From bac5946f29d5e1ca824e3be483c4302a9ed2599b Mon Sep 17 00:00:00 2001 From: jgraettinger Date: Sun, 8 Sep 2024 16:48:04 +0000 Subject: [PATCH] =?UTF-8?q?Remove=20preview=20for=20PR=201594=20?= =?UTF-8?q?=F0=9F=9B=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pr-preview/pr-1594/404.html | 18 - .../pr-1594/assets/css/styles.7552b07e.css | 1 - ...nt_ID-755966905d34f909de14009536374173.png | Bin 64992 -> 0 bytes ...er_ID-de1a2aac02163282fc8694374ac22c27.png | Bin 55842 -> 0 bytes ..._Name-0f3730e71af4f785f38be9df59f63d5e.png | Bin 36204 -> 0 bytes ...lance-013b784deb2b72b4632eee51e5b90252.png | Bin 96919 -> 0 bytes ...rview-f9b94a89b40a2b4e9b4b000d76a5fd64.png | Bin 75493 -> 0 bytes ...-spec-1ab774883c35c141ebb72ed8c82df94a.png | Bin 39145 -> 0 bytes ...-page-8d3387cfc38707280bb54a2e42c4c999.png | Bin 73746 -> 0 bytes ...er-ui-e21d902c34932277099c045d7d62ac99.png | Bin 39628 -> 0 bytes ...s-new-4479ed989de046cd79db471d502bfc89.svg | 1 - ...rview-84393a8d4246d9e8d218c4f8344c4c15.png | Bin 106588 -> 0 bytes ...-spec-f934385ed9eb953ef06a24ca45692df3.png | Bin 36683 -> 0 bytes ...-page-8f653c98f00bf99ffd1a7ab351735fa6.png | Bin 52087 -> 0 bytes ...te-ui-d8ae2ab634980751f8c87a0483f96d39.png | Bin 798420 -> 0 bytes ...rnals-d78b87f0eda7164e8a9936e36c4d7a0e.svg | 1 - ...creen-d4dd6652cdd8a1c64997b2ae85a00050.png | Bin 22064 -> 0 bytes ...ation-13219c2248a49327c4c97340d0216bed.gif | Bin 1585315 -> 0 bytes ...rview-3d6549a0a57b21fa5c7917a7980ee7ba.png | Bin 77445 -> 0 bytes ...-spec-e72c1f5f9d360e2787575a35687e3e1d.png | Bin 60058 -> 0 bytes ...n-new-bbe45dcc13bded994190ac75f86dc01f.svg | 1 - ...-page-e2b7070883f3db0f1bf3add85e3a9f86.png | Bin 67501 -> 0 bytes ...reate-de574ca2333327fc911cc8ff0e46c5b9.png | Bin 185213 -> 0 bytes .../pr-1594/assets/js/014c8d62.cdd16169.js | 1 - .../pr-1594/assets/js/01f1a992.d58243ab.js | 1 - .../pr-1594/assets/js/02365777.75cbb3fb.js | 1 - .../pr-1594/assets/js/02ad5b1c.d0c45e12.js | 1 - .../pr-1594/assets/js/0359e208.9032423a.js | 1 - .../pr-1594/assets/js/04c11cf4.2c889b63.js | 1 - .../pr-1594/assets/js/061adc4c.1893b077.js | 1 - .../pr-1594/assets/js/07003cee.b4545e62.js | 1 - .../pr-1594/assets/js/08b3569b.177052bf.js | 1 - .../pr-1594/assets/js/08c8edc4.34819e19.js | 1 - .../pr-1594/assets/js/08cd1031.e390c4de.js | 1 - .../pr-1594/assets/js/08e5c7dc.2226f998.js | 1 - .../pr-1594/assets/js/0ad621fa.7adcf55b.js | 1 - .../pr-1594/assets/js/0bcbca69.ed09f615.js | 1 - .../pr-1594/assets/js/0c8d310c.ef9f80a5.js | 1 - .../pr-1594/assets/js/0d3223a3.65fc4528.js | 1 - .../pr-1594/assets/js/0d762a34.feefc22e.js | 1 - .../pr-1594/assets/js/0ea4d505.941429b1.js | 1 - .../pr-1594/assets/js/0fda5f57.aa85507c.js | 1 - .../pr-1594/assets/js/104ea86a.f1e9ae96.js | 1 - pr-preview/pr-1594/assets/js/1169.640da5fa.js | 1 - .../pr-1594/assets/js/116b31b8.1da8035b.js | 1 - pr-preview/pr-1594/assets/js/1176.6957abeb.js | 1 - pr-preview/pr-1594/assets/js/1245.c5d67bd8.js | 1 - .../pr-1594/assets/js/12ca7dc6.d05b6203.js | 1 - pr-preview/pr-1594/assets/js/130.def7e228.js | 18473 ------ pr-preview/pr-1594/assets/js/1331.ec0a48c7.js | 1 - pr-preview/pr-1594/assets/js/1398.40a441e2.js | 1 - .../pr-1594/assets/js/1434155d.858c890c.js | 1 - .../pr-1594/assets/js/161e6f0a.3eb5081c.js | 1 - pr-preview/pr-1594/assets/js/162.5b1f790d.js | 20438 ------ .../pr-1594/assets/js/1714037f.090798cc.js | 1 - .../pr-1594/assets/js/17896441.adc411f8.js | 1 - .../pr-1594/assets/js/1875cf18.3bf76a87.js | 1 - .../pr-1594/assets/js/189edb0d.5a86180d.js | 1 - pr-preview/pr-1594/assets/js/1946.abc6ec22.js | 1 - .../pr-1594/assets/js/1bc1529f.f5dc7d77.js | 1 - .../pr-1594/assets/js/1ca4a2d7.9a1ce243.js | 1 - .../pr-1594/assets/js/1cde271f.b1370c1a.js | 1 - .../pr-1594/assets/js/1d129a7b.62510428.js | 1 - .../pr-1594/assets/js/1f391b9e.19b65b27.js | 1 - pr-preview/pr-1594/assets/js/2130.c89b510d.js | 1 - pr-preview/pr-1594/assets/js/2237.baec02cf.js | 1 - .../pr-1594/assets/js/22ed3411.65f32600.js | 1 - pr-preview/pr-1594/assets/js/2376.9cdcd224.js | 1 - pr-preview/pr-1594/assets/js/2453.2ecc4026.js | 1 - pr-preview/pr-1594/assets/js/2548.3eaa016b.js | 1 - .../pr-1594/assets/js/25491a6a.1255d965.js | 1 - .../pr-1594/assets/js/25a17fcd.f1fd2bbd.js | 1 - pr-preview/pr-1594/assets/js/2843.6beaccba.js | 1 - .../pr-1594/assets/js/28a8491c.13ec90df.js | 1 - pr-preview/pr-1594/assets/js/2925.5a7d8b64.js | 1 - pr-preview/pr-1594/assets/js/2983.236363d9.js | 1 - .../pr-1594/assets/js/2e3ffc99.3c49228a.js | 1 - .../pr-1594/assets/js/2e426791.7b73cb21.js | 1 - .../pr-1594/assets/js/2fea2d40.5d40aa26.js | 1 - pr-preview/pr-1594/assets/js/3068.5e00bfe3.js | 1 - pr-preview/pr-1594/assets/js/309.6dbebb91.js | 51749 ---------------- .../pr-1594/assets/js/31570a90.2a22eeaa.js | 1 - pr-preview/pr-1594/assets/js/331.9e748e5c.js | 10814 ---- pr-preview/pr-1594/assets/js/3626.1692bd06.js | 1 - pr-preview/pr-1594/assets/js/3658.0c8f3c0c.js | 1 - pr-preview/pr-1594/assets/js/3706.4e7ba6f2.js | 1 - .../pr-1594/assets/js/375ba1d8.fab37c6c.js | 1 - pr-preview/pr-1594/assets/js/376.dedd6ca6.js | 1242 - .../pr-1594/assets/js/37788a03.8ee42d0e.js | 1 - .../pr-1594/assets/js/38a516ae.4ac9c90c.js | 1 - .../pr-1594/assets/js/38fdfb5b.40732ef4.js | 1 - .../pr-1594/assets/js/397210d6.7624d70a.js | 1 - .../pr-1594/assets/js/3bada45e.c4a4a13c.js | 1 - .../pr-1594/assets/js/3c6e6542.17a2c4da.js | 1 - .../pr-1594/assets/js/3c6ed59c.234f75b7.js | 1 - .../pr-1594/assets/js/3c711bdb.54e664af.js | 1 - .../pr-1594/assets/js/405f2d9a.b8852ea3.js | 1 - pr-preview/pr-1594/assets/js/4132.adc4137b.js | 1 - pr-preview/pr-1594/assets/js/4162.aab6f778.js | 1 - .../pr-1594/assets/js/41d993a6.6eb7edc2.js | 1 - pr-preview/pr-1594/assets/js/420.011125cd.js | 1323 - pr-preview/pr-1594/assets/js/426.ae7a4e4d.js | 10825 ---- .../pr-1594/assets/js/42e3560a.c10d6b08.js | 1 - .../pr-1594/assets/js/432d7d66.1e8d1f70.js | 1 - .../pr-1594/assets/js/4434a8b7.1fe1ee28.js | 1 - .../pr-1594/assets/js/44386d1b.cfce857c.js | 1 - .../pr-1594/assets/js/44b1e2f5.3eccbccd.js | 1 - pr-preview/pr-1594/assets/js/453.3f16938b.js | 26805 -------- .../pr-1594/assets/js/45462f11.9c7c6de5.js | 1 - .../pr-1594/assets/js/4648c831.3dbeef75.js | 1 - .../pr-1594/assets/js/46cf1090.eef6ac79.js | 1 - pr-preview/pr-1594/assets/js/4741.460f6e7f.js | 1 - .../pr-1594/assets/js/477598dd.947758f8.js | 1 - pr-preview/pr-1594/assets/js/478.66e42700.js | 1227 - .../pr-1594/assets/js/482d6521.2cfa7538.js | 1 - .../pr-1594/assets/js/487bf429.ec0ba307.js | 1 - pr-preview/pr-1594/assets/js/4943.ce789d06.js | 1 - .../pr-1594/assets/js/49e00cf0.cdedc3b2.js | 1 - .../pr-1594/assets/js/4a1a3e03.96287a86.js | 1 - .../pr-1594/assets/js/4acaa9c4.8e18b133.js | 1 - .../pr-1594/assets/js/4bccbb93.23c8fa60.js | 1 - .../pr-1594/assets/js/4d317276.f8901f15.js | 1 - .../pr-1594/assets/js/4d4f51e2.da6d3a2e.js | 1 - .../pr-1594/assets/js/4da0167e.b6e7eb4e.js | 1 - .../pr-1594/assets/js/4dbcc71c.aeeb3f61.js | 1 - .../pr-1594/assets/js/4e1df6a3.b2cf9f16.js | 1 - .../pr-1594/assets/js/4f08651a.6c382f9c.js | 1 - .../pr-1594/assets/js/4f1ddcc5.d704e6be.js | 1 - .../pr-1594/assets/js/540a1167.3d448be8.js | 1 - .../pr-1594/assets/js/547dc70b.f76ed865.js | 1 - .../pr-1594/assets/js/54a88ed7.1baf8def.js | 1 - .../pr-1594/assets/js/5769edfb.b3730ae4.js | 1 - .../pr-1594/assets/js/57aea1fc.95ca8c03.js | 1 - .../pr-1594/assets/js/58d4a820.4aebbe0f.js | 1 - .../pr-1594/assets/js/5b71c68f.ee8c2b84.js | 1 - .../pr-1594/assets/js/5ba559d4.e84db72e.js | 1 - .../pr-1594/assets/js/5bb0dc82.2ac019c2.js | 1 - .../pr-1594/assets/js/5c7e141f.4ab4be0d.js | 1 - .../pr-1594/assets/js/5d9eac72.17517544.js | 1 - .../pr-1594/assets/js/5e95c892.af57b059.js | 1 - .../pr-1594/assets/js/61038276.4935de1d.js | 1 - .../pr-1594/assets/js/6181342c.6b6f6a4d.js | 1 - pr-preview/pr-1594/assets/js/635.c9ac7722.js | 26180 -------- .../pr-1594/assets/js/63b37bf5.cf27ab4f.js | 1 - pr-preview/pr-1594/assets/js/6420.ed961081.js | 1 - .../pr-1594/assets/js/6459b84b.62c1dfdf.js | 1 - .../pr-1594/assets/js/645c44d3.db494a12.js | 1 - .../pr-1594/assets/js/65a8f618.a33655b0.js | 1 - pr-preview/pr-1594/assets/js/6788.0068c12f.js | 1 - pr-preview/pr-1594/assets/js/68.81c34607.js | 26093 -------- pr-preview/pr-1594/assets/js/689.a3a2233a.js | 3478 -- .../pr-1594/assets/js/68a929a9.0d90be75.js | 1 - .../pr-1594/assets/js/68cc1c24.1d1d9631.js | 1 - .../pr-1594/assets/js/6b49cdad.22931ba6.js | 1 - .../pr-1594/assets/js/6bdc832c.c5fbbab6.js | 1 - .../pr-1594/assets/js/6d42ac36.5676c2f3.js | 1 - .../pr-1594/assets/js/6e2958ef.adf03a04.js | 1 - .../pr-1594/assets/js/6e773b1a.8f6d9140.js | 1 - .../pr-1594/assets/js/6f6bf398.23c7fab7.js | 1 - pr-preview/pr-1594/assets/js/706.eb973759.js | 10065 --- pr-preview/pr-1594/assets/js/741.b53f607c.js | 23923 ------- pr-preview/pr-1594/assets/js/7426.ae5481b0.js | 1 - .../pr-1594/assets/js/76bcc235.e9a356aa.js | 1 - .../pr-1594/assets/js/770e6532.6787aeaf.js | 1 - .../pr-1594/assets/js/7718f40c.fd132592.js | 1 - pr-preview/pr-1594/assets/js/788.e94a45f6.js | 1410 - .../pr-1594/assets/js/7c555ba4.b049aafe.js | 1 - .../pr-1594/assets/js/7cda2da6.e581f4a5.js | 1 - .../pr-1594/assets/js/7cfb1d0c.f28a5984.js | 1 - .../pr-1594/assets/js/7fd3d7a0.638976a6.js | 1 - pr-preview/pr-1594/assets/js/803.8e7831e5.js | 742 - pr-preview/pr-1594/assets/js/8055.435b03d2.js | 1 - pr-preview/pr-1594/assets/js/810.c3c49cc3.js | 28500 --------- .../pr-1594/assets/js/8114665f.1e39622d.js | 1 - pr-preview/pr-1594/assets/js/8337.d2982b80.js | 1 - pr-preview/pr-1594/assets/js/843.d7e56aae.js | 540 - .../pr-1594/assets/js/8431750a.e60b9ff0.js | 1 - .../pr-1594/assets/js/845ce2f5.a0d8342a.js | 1 - pr-preview/pr-1594/assets/js/8478.e385cd80.js | 1 - pr-preview/pr-1594/assets/js/8577.769b0788.js | 1 - .../pr-1594/assets/js/858820da.470c2343.js | 1 - pr-preview/pr-1594/assets/js/8591.54a6cd4d.js | 2 - .../assets/js/8591.54a6cd4d.js.LICENSE.txt | 61 - pr-preview/pr-1594/assets/js/8635.2c31446f.js | 1 - pr-preview/pr-1594/assets/js/869.3cca42c0.js | 2105 - pr-preview/pr-1594/assets/js/8810.e107d159.js | 1 - pr-preview/pr-1594/assets/js/8869.7e05992f.js | 1 - .../pr-1594/assets/js/88fa6390.cb1c4c18.js | 1 - .../pr-1594/assets/js/8a611437.2791fab7.js | 1 - .../pr-1594/assets/js/8dce94c3.e9ffddf1.js | 1 - .../pr-1594/assets/js/8e876c80.c8f53ef4.js | 1 - pr-preview/pr-1594/assets/js/902.9277dc16.js | 10323 --- .../pr-1594/assets/js/905c32de.4949c5ef.js | 1 - .../pr-1594/assets/js/906e1e9f.8bf790cc.js | 1 - pr-preview/pr-1594/assets/js/9184.0cf47614.js | 1 - .../pr-1594/assets/js/921f956e.eed2c065.js | 1 - pr-preview/pr-1594/assets/js/925.f8ccfbd9.js | 14571 ----- pr-preview/pr-1594/assets/js/9278.bc46237a.js | 1 - pr-preview/pr-1594/assets/js/9309.04c2ac1e.js | 2 - .../assets/js/9309.04c2ac1e.js.LICENSE.txt | 9 - pr-preview/pr-1594/assets/js/943.e1f9edb9.js | 1820 - pr-preview/pr-1594/assets/js/946.bcce335e.js | 2605 - .../pr-1594/assets/js/952b3fdc.bf8bb02d.js | 1 - pr-preview/pr-1594/assets/js/9610.9966723f.js | 2 - .../assets/js/9610.9966723f.js.LICENSE.txt | 9 - .../pr-1594/assets/js/964d596a.f473761b.js | 1 - pr-preview/pr-1594/assets/js/9689.0064c4fa.js | 1 - .../pr-1594/assets/js/971e8ccd.1f633718.js | 1 - .../pr-1594/assets/js/977d5535.4f5651d7.js | 1 - .../pr-1594/assets/js/986b9943.fb5e319e.js | 1 - .../pr-1594/assets/js/9b515b04.fad6a0cb.js | 1 - .../pr-1594/assets/js/9d18d13c.41265962.js | 1 - .../pr-1594/assets/js/9d57d0a6.6861fb38.js | 1 - .../pr-1594/assets/js/9e25251f.8354a6a9.js | 1 - .../pr-1594/assets/js/9e64d05b.e2db52a4.js | 1 - .../pr-1594/assets/js/9e8f5f1c.a4c5d2e7.js | 1 - .../pr-1594/assets/js/9fc067fe.251a75bc.js | 1 - .../pr-1594/assets/js/9fce37be.7fefd728.js | 1 - .../pr-1594/assets/js/a06d9ffe.c7666626.js | 1 - .../pr-1594/assets/js/a0e6a329.782c5d27.js | 1 - .../pr-1594/assets/js/a24b80f3.ff51b134.js | 1 - .../pr-1594/assets/js/a3c49fd9.88a15c8a.js | 1 - .../pr-1594/assets/js/a42036e6.6b75a9cc.js | 1 - .../pr-1594/assets/js/a7456010.732b7642.js | 1 - .../pr-1594/assets/js/a7bd4aaa.154be41b.js | 1 - .../pr-1594/assets/js/a9379b01.b5f39f28.js | 1 - .../pr-1594/assets/js/a94703ab.226454ec.js | 1 - .../pr-1594/assets/js/a995ee96.690695c5.js | 1 - .../pr-1594/assets/js/aba21aa0.421a8980.js | 1 - .../pr-1594/assets/js/abc1ea5e.22be9f20.js | 1 - .../pr-1594/assets/js/ac961e5b.234f3378.js | 1 - .../pr-1594/assets/js/b05d4510.a0d5be06.js | 1 - .../pr-1594/assets/js/b0d5790a.65438780.js | 1 - .../pr-1594/assets/js/b0d7f3f2.9d1cd86c.js | 1 - .../pr-1594/assets/js/b1a65bd3.d2b80b1e.js | 1 - .../pr-1594/assets/js/b32e8f59.dc986ba8.js | 1 - .../pr-1594/assets/js/b5dab0d4.1e790139.js | 1 - .../pr-1594/assets/js/b74f0b56.f52da84e.js | 1 - .../pr-1594/assets/js/b7a68670.8abf42ed.js | 1 - .../pr-1594/assets/js/be02d3e2.d0ed9e3a.js | 1 - .../pr-1594/assets/js/bf636eff.50dbd921.js | 1 - .../pr-1594/assets/js/bfc09eea.ce8f0d11.js | 1 - .../pr-1594/assets/js/bfec4f44.274315dd.js | 1 - .../pr-1594/assets/js/c042bbf4.a74c0bcc.js | 1 - .../pr-1594/assets/js/c10f38bc.a5ee4330.js | 1 - .../pr-1594/assets/js/c11c77a9.a2b9dcc2.js | 1 - .../pr-1594/assets/js/c13ec0a6.a1c4a196.js | 1 - .../pr-1594/assets/js/c1e7e5a7.cf9e77e7.js | 1 - .../pr-1594/assets/js/c287b26d.f37a2575.js | 1 - .../pr-1594/assets/js/c521cd6b.3bb8b1c4.js | 1 - .../pr-1594/assets/js/c5a10934.815f7080.js | 1 - .../pr-1594/assets/js/c66ae53f.5559e12c.js | 1 - .../pr-1594/assets/js/ca7ab025.09643496.js | 1 - .../pr-1594/assets/js/cad0251b.5b4c1d93.js | 1 - .../pr-1594/assets/js/caea5a36.df5bb5b9.js | 1 - .../pr-1594/assets/js/cc0c6179.b428285d.js | 1 - .../pr-1594/assets/js/cce87b67.6c56c4f9.js | 1 - .../pr-1594/assets/js/ce5ba636.9f197015.js | 1 - .../pr-1594/assets/js/cf864737.d68d694e.js | 1 - .../pr-1594/assets/js/cfe90ca7.b62377d3.js | 1 - .../pr-1594/assets/js/d14d20ef.fbb1f607.js | 1 - .../pr-1594/assets/js/d273ee52.32015f22.js | 1 - .../pr-1594/assets/js/d6385b0d.7ea3f246.js | 1 - .../pr-1594/assets/js/d7fdcae3.6b5923a2.js | 1 - .../pr-1594/assets/js/d8b2c51c.7d4e0add.js | 1 - .../pr-1594/assets/js/d8b5b6da.fb36935e.js | 1 - .../pr-1594/assets/js/da6eb168.ca96c985.js | 1 - .../pr-1594/assets/js/db0f1c3a.7197a5a3.js | 1 - .../pr-1594/assets/js/db2b4d90.8dfa8c0e.js | 1 - .../pr-1594/assets/js/dbd1cd20.28d3f6e1.js | 1 - .../pr-1594/assets/js/de285be4.307d9b0b.js | 1 - .../pr-1594/assets/js/de7a358c.dd4ca8f3.js | 1 - .../pr-1594/assets/js/deef465e.8270f0d6.js | 1 - .../pr-1594/assets/js/e1d33ea7.754a454b.js | 1 - .../pr-1594/assets/js/e3318347.4be28ac9.js | 1 - .../pr-1594/assets/js/e33c9cd6.b3bccb4b.js | 1 - .../pr-1594/assets/js/e459d51d.17071a91.js | 1 - .../pr-1594/assets/js/e5e05fea.88348c3f.js | 1 - .../pr-1594/assets/js/e6e0301f.1895224e.js | 1 - .../pr-1594/assets/js/e76aecec.5fe24bf1.js | 1 - .../pr-1594/assets/js/e8453306.8955c2e4.js | 1 - .../pr-1594/assets/js/e858514f.dcda684d.js | 1 - .../pr-1594/assets/js/e8851b38.2dd6bd79.js | 1 - .../pr-1594/assets/js/ea7b1b11.fbf626bf.js | 1 - .../pr-1594/assets/js/eae8ea84.583bf550.js | 1 - .../pr-1594/assets/js/ebce6379.9b37e36b.js | 1 - .../pr-1594/assets/js/ecf790cf.29e2deb3.js | 1 - .../pr-1594/assets/js/eec1121c.a7bb96af.js | 1 - .../pr-1594/assets/js/f09a1148.cc1f16d4.js | 1 - .../pr-1594/assets/js/f47a7ed3.5af1643e.js | 1 - .../pr-1594/assets/js/f59a0ebe.dd03be98.js | 1 - .../pr-1594/assets/js/f5f0d846.43fdf6c7.js | 1 - .../pr-1594/assets/js/f65e0d6c.e05fb411.js | 1 - .../pr-1594/assets/js/fc44458b.b9f3d72a.js | 1 - .../pr-1594/assets/js/fca4800a.1513ebb2.js | 1 - .../pr-1594/assets/js/fe12321f.dca86e54.js | 1 - pr-preview/pr-1594/assets/js/main.8532303a.js | 2 - .../assets/js/main.8532303a.js.LICENSE.txt | 71 - .../js/reactPlayerDailyMotion.70afc90f.js | 1 - .../js/reactPlayerDailyMotion.f20d032c.js | 155 - .../assets/js/reactPlayerFacebook.1a4ea89c.js | 156 - .../assets/js/reactPlayerFacebook.c760d132.js | 1 - .../js/reactPlayerFilePlayer.d5d95a3c.js | 1 - .../js/reactPlayerFilePlayer.f1588da1.js | 385 - .../assets/js/reactPlayerKaltura.337ee336.js | 1 - .../assets/js/reactPlayerKaltura.910cba58.js | 153 - .../assets/js/reactPlayerMixcloud.433550ac.js | 1 - .../assets/js/reactPlayerMixcloud.7864a519.js | 141 - .../assets/js/reactPlayerMux.462f90bd.js | 241 - .../assets/js/reactPlayerMux.93d8b537.js | 1 - .../assets/js/reactPlayerPreview.76287d19.js | 1 - .../assets/js/reactPlayerPreview.f0416885.js | 150 - .../js/reactPlayerSoundCloud.b8f7e226.js | 1 - .../js/reactPlayerSoundCloud.e82f1e0e.js | 158 - .../js/reactPlayerStreamable.28f63750.js | 1 - .../js/reactPlayerStreamable.41e1bb3f.js | 151 - .../assets/js/reactPlayerTwitch.72c73ef7.js | 145 - .../assets/js/reactPlayerTwitch.e499980d.js | 1 - .../assets/js/reactPlayerVidyard.0018beb1.js | 149 - .../assets/js/reactPlayerVidyard.86fd8a80.js | 1 - .../assets/js/reactPlayerVimeo.0d5ed4f1.js | 190 - .../assets/js/reactPlayerVimeo.554e1970.js | 1 - .../assets/js/reactPlayerWistia.3c90c4da.js | 1 - .../assets/js/reactPlayerWistia.3eab0b00.js | 165 - .../assets/js/reactPlayerYouTube.2978d928.js | 1 - .../assets/js/reactPlayerYouTube.606b56bc.js | 235 - .../assets/js/runtime~main.95e4f360.js | 1 - .../concepts/advanced/evolutions/index.html | 78 - .../concepts/advanced/journals/index.html | 135 - .../concepts/advanced/logs-stats/index.html | 59 - .../concepts/advanced/projections/index.html | 63 - .../concepts/advanced/shards/index.html | 69 - .../pr-1594/concepts/captures/index.html | 73 - .../pr-1594/concepts/catalogs/index.html | 69 - .../pr-1594/concepts/collections/index.html | 191 - .../pr-1594/concepts/connectors/index.html | 167 - .../pr-1594/concepts/derivations/index.html | 455 - .../pr-1594/concepts/flowctl/index.html | 181 - pr-preview/pr-1594/concepts/import/index.html | 116 - pr-preview/pr-1594/concepts/index.html | 214 - .../concepts/materialization/index.html | 152 - .../pr-1594/concepts/schemas/index.html | 230 - .../concepts/storage-mappings/index.html | 35 - pr-preview/pr-1594/concepts/tests/index.html | 69 - .../pr-1594/concepts/web-app/index.html | 244 - .../pr-1594/example-markdown/index.html | 19 - pr-preview/pr-1594/example/index.html | 18 - .../getting-started/installation/index.html | 193 - .../continuous-materialized-view/index.html | 220 - .../dataflow-s3-snowflake/index.html | 233 - .../tutorials/derivations_acmebank/index.html | 150 - .../getting-started/tutorials/index.html | 29 - .../postgresql_cdc_to_snowflake/index.html | 186 - .../real_time_cdc_with_mongodb/index.html | 194 - .../pr-1594/guides/connect-network/index.html | 199 - .../pr-1594/guides/create-dataflow/index.html | 179 - .../guides/create-derivation/index.html | 11 - .../index.html | 164 - .../index.html | 63 - .../guides/derivation_tutorial_sql/index.html | 66 - .../pr-1594/guides/edit-data-flows/index.html | 120 - .../flowctl/create-derivation/index.html | 270 - .../flowctl/edit-draft-from-webapp/index.html | 125 - .../edit-specification-locally/index.html | 144 - pr-preview/pr-1594/guides/flowctl/index.html | 21 - .../flowctl/troubleshoot-task/index.html | 85 - .../index.html | 78 - pr-preview/pr-1594/guides/index.html | 21 - .../guides/schema-evolution/index.html | 94 - .../firestore-to-dwh/index.html | 187 - .../system-specific-dataflows/index.html | 22 - .../s3-to-snowflake/index.html | 189 - .../index.html | 77 - pr-preview/pr-1594/img/Estuary.png | Bin 27316 -> 0 bytes pr-preview/pr-1594/img/EstuaryAnimated.gif | Bin 421905 -> 0 bytes pr-preview/pr-1594/img/docusaurus.png | Bin 5142 -> 0 bytes pr-preview/pr-1594/img/estuary-new.png | Bin 21498 -> 0 bytes pr-preview/pr-1594/img/favicon-2.ico | Bin 15406 -> 0 bytes pr-preview/pr-1594/img/favicon.ico | Bin 3483 -> 0 bytes pr-preview/pr-1594/img/logo.svg | 1 - .../img/undraw_docusaurus_mountain.svg | 170 - .../pr-1594/img/undraw_docusaurus_react.svg | 169 - .../pr-1594/img/undraw_docusaurus_tree.svg | 1 - pr-preview/pr-1594/index.html | 54 - .../pr-1594/lunr-index-1724944510578.json | 1 - pr-preview/pr-1594/lunr-index.json | 1 - .../pr-1594/overview/comparisons/index.html | 103 - .../overview/who-should-use-flow/index.html | 78 - .../Configuring-task-shards/index.html | 29 - .../MariaDB/amazon-rds-mariadb/index.html | 172 - .../capture-connectors/MariaDB/index.html | 170 - .../MySQL/amazon-rds-mysql/index.html | 194 - .../MySQL/google-cloud-sql-mysql/index.html | 157 - .../capture-connectors/MySQL/index.html | 264 - .../MySQL/mysql-batch/index.html | 41 - .../OracleDB/flashback/index.html | 65 - .../capture-connectors/OracleDB/index.html | 101 - .../PostgreSQL/Supabase/index.html | 150 - .../PostgreSQL/amazon-rds-postgres/index.html | 150 - .../google-cloud-sql-postgres/index.html | 129 - .../capture-connectors/PostgreSQL/index.html | 321 - .../PostgreSQL/neon-postgres/index.html | 146 - .../PostgreSQL/postgres-batch/index.html | 38 - .../SQLServer/amazon-rds-sqlserver/index.html | 119 - .../google-cloud-sql-sqlserver/index.html | 112 - .../capture-connectors/SQLServer/index.html | 153 - .../capture-connectors/Salesforce/index.html | 28 - .../salesforce-historical-data/index.html | 178 - .../salesforce-real-time/index.html | 126 - .../capture-connectors/aircall/index.html | 70 - .../capture-connectors/airtable/index.html | 38 - .../capture-connectors/alloydb/index.html | 85 - .../capture-connectors/alpaca/index.html | 82 - .../capture-connectors/amazon-ads/index.html | 101 - .../amazon-dynamodb/index.html | 61 - .../amazon-kinesis/index.html | 60 - .../amazon-redshift/index.html | 35 - .../capture-connectors/amazon-s3/index.html | 181 - .../capture-connectors/amazon-sqs/index.html | 53 - .../capture-connectors/amplitude/index.html | 47 - .../apache-kafka/index.html | 71 - .../azure-blob-storage/index.html | 164 - .../bigquery-batch/index.html | 95 - .../capture-connectors/bing-ads/index.html | 97 - .../capture-connectors/braintree/index.html | 54 - .../capture-connectors/braze/index.html | 57 - .../capture-connectors/chargebee/index.html | 51 - .../capture-connectors/confluence/index.html | 65 - .../datadog-ingest/index.html | 76 - .../capture-connectors/dropbox/index.html | 144 - .../exchange-rates/index.html | 46 - .../facebook-marketing/index.html | 104 - .../capture-connectors/freshdesk/index.html | 72 - .../capture-connectors/gcs/index.html | 149 - .../capture-connectors/github/index.html | 81 - .../capture-connectors/gitlab/index.html | 79 - .../capture-connectors/gladly/index.html | 44 - .../capture-connectors/google-ads/index.html | 136 - .../google-analytics-4/index.html | 111 - .../google-analytics/index.html | 130 - .../google-drive/index.html | 37 - .../google-firestore/index.html | 80 - .../google-pubsub/index.html | 97 - .../google-search-console/index.html | 93 - .../google-sheets/index.html | 103 - .../capture-connectors/greenhouse/index.html | 71 - .../capture-connectors/harvest/index.html | 67 - .../capture-connectors/http-file/index.html | 156 - .../capture-connectors/http-ingest/index.html | 72 - .../hubspot-real-time/index.html | 81 - .../capture-connectors/hubspot/index.html | 112 - .../Connectors/capture-connectors/index.html | 462 - .../capture-connectors/instagram/index.html | 54 - .../intercom-ingest/index.html | 67 - .../capture-connectors/intercom/index.html | 62 - .../capture-connectors/iterable/index.html | 86 - .../capture-connectors/jira-ingest/index.html | 65 - .../capture-connectors/jira/index.html | 95 - .../capture-connectors/klaviyo/index.html | 49 - .../linkedin-ads/index.html | 75 - .../linkedin-pages/index.html | 69 - .../capture-connectors/mailchimp/index.html | 54 - .../capture-connectors/marketo/index.html | 53 - .../capture-connectors/mixpanel/index.html | 49 - .../capture-connectors/mongodb/index.html | 99 - .../netsuite-suiteanalytics/index.html | 173 - .../netsuite-suitetalk/index.html | 211 - .../capture-connectors/notion/index.html | 81 - .../paypal-transaction/index.html | 44 - .../capture-connectors/pendo/index.html | 49 - .../capture-connectors/pinterest/index.html | 70 - .../capture-connectors/recharge/index.html | 53 - .../capture-connectors/sendgrid/index.html | 56 - .../capture-connectors/sentry/index.html | 46 - .../capture-connectors/sftp/index.html | 147 - .../capture-connectors/slack/index.html | 50 - .../capture-connectors/snapchat/index.html | 63 - .../capture-connectors/snowflake/index.html | 61 - .../capture-connectors/stripe/index.html | 73 - .../survey-monkey/index.html | 69 - .../capture-connectors/tiktok/index.html | 74 - .../capture-connectors/twilio/index.html | 69 - .../capture-connectors/woocommerce/index.html | 81 - .../youtube-analytics/index.html | 56 - .../zendesk-chat/index.html | 55 - .../zendesk-support/index.html | 77 - .../dekaf/dekaf-tinybird/index.html | 51 - .../reference/Connectors/dekaf/index.html | 25 - .../pr-1594/reference/Connectors/index.html | 25 - .../BigQuery/index.html | 111 - .../Elasticsearch/index.html | 88 - .../Firebolt/index.html | 86 - .../Google-sheets/index.html | 92 - .../MySQL/amazon-rds-mysql/index.html | 189 - .../MySQL/google-cloud-sql-mysql/index.html | 188 - .../MySQL/index.html | 181 - .../PostgreSQL/amazon-rds-postgres/index.html | 123 - .../google-cloud-sql-postgres/index.html | 107 - .../PostgreSQL/index.html | 90 - .../Rockset/index.html | 81 - .../SQLServer/amazon-rds-sqlserver/index.html | 216 - .../google-cloud-sql-sqlserver/index.html | 212 - .../SQLServer/index.html | 221 - .../SQLite/index.html | 46 - .../Snowflake/index.html | 123 - .../alloydb/index.html | 51 - .../amazon-dynamodb/index.html | 70 - .../amazon-redshift/index.html | 108 - .../amazon-s3-csv/index.html | 65 - .../amazon-s3-iceberg/index.html | 71 - .../amazon-s3-parquet/index.html | 70 - .../databricks/index.html | 67 - .../google-gcs-csv/index.html | 65 - .../google-gcs-parquet/index.html | 69 - .../google-pubsub/index.html | 82 - .../http-webhook/index.html | 35 - .../materialization-connectors/index.html | 181 - .../mongodb/index.html | 64 - .../motherduck/index.html | 60 - .../mysql-heatwave/index.html | 52 - .../pinecone/index.html | 70 - .../slack/index.html | 35 - .../starburst/index.html | 55 - .../timescaledb/index.html | 85 - .../materialization-protocol/index.html | 241 - .../reference/allow-ip-addresses/index.html | 29 - .../reference/authentication/index.html | 93 - .../pr-1594/reference/editing/index.html | 65 - .../materialization-sync-schedule/index.html | 141 - .../reference/notifications/index.html | 33 - .../reference/organizing-catalogs/index.html | 65 - .../reduction-strategies/append/index.html | 21 - .../composing-with-conditionals/index.html | 21 - .../index.html | 20 - .../reference/reduction-strategies/index.html | 45 - .../reduction-strategies/merge/index.html | 25 - .../minimize-and-maximize/index.html | 23 - .../reduction-strategies/set/index.html | 30 - .../reduction-strategies/sum/index.html | 20 - .../pr-1594/reference/time-travel/index.html | 27 - .../reference/working-logs-stats/index.html | 83 - .../pr-1594/search-doc-1724944510578.json | 1 - pr-preview/pr-1594/search-doc.json | 1 - pr-preview/pr-1594/sitemap.xml | 1 - 544 files changed, 318842 deletions(-) delete mode 100644 pr-preview/pr-1594/404.html delete mode 100644 pr-preview/pr-1594/assets/css/styles.7552b07e.css delete mode 100644 pr-preview/pr-1594/assets/images/Azure_AD_Tenant_ID-755966905d34f909de14009536374173.png delete mode 100644 pr-preview/pr-1594/assets/images/Azure_Container_ID-de1a2aac02163282fc8694374ac22c27.png delete mode 100644 pr-preview/pr-1594/assets/images/Azure_Storage_Account_Name-0f3730e71af4f785f38be9df59f63d5e.png delete mode 100644 pr-preview/pr-1594/assets/images/at-a-glance-013b784deb2b72b4632eee51e5b90252.png delete mode 100644 pr-preview/pr-1594/assets/images/capture-details-page--overview-f9b94a89b40a2b4e9b4b000d76a5fd64.png delete mode 100644 pr-preview/pr-1594/assets/images/capture-details-page--spec-1ab774883c35c141ebb72ed8c82df94a.png delete mode 100644 pr-preview/pr-1594/assets/images/capture-page-8d3387cfc38707280bb54a2e42c4c999.png delete mode 100644 pr-preview/pr-1594/assets/images/captures-auto-discover-ui-e21d902c34932277099c045d7d62ac99.png delete mode 100644 pr-preview/pr-1594/assets/images/captures-new-4479ed989de046cd79db471d502bfc89.svg delete mode 100644 pr-preview/pr-1594/assets/images/collection-details-page--overview-84393a8d4246d9e8d218c4f8344c4c15.png delete mode 100644 pr-preview/pr-1594/assets/images/collection-details-page--spec-f934385ed9eb953ef06a24ca45692df3.png delete mode 100644 pr-preview/pr-1594/assets/images/collections-page-8f653c98f00bf99ffd1a7ab351735fa6.png delete mode 100644 pr-preview/pr-1594/assets/images/evolution-re-create-ui-d8ae2ab634980751f8c87a0483f96d39.png delete mode 100644 pr-preview/pr-1594/assets/images/journals-d78b87f0eda7164e8a9936e36c4d7a0e.svg delete mode 100644 pr-preview/pr-1594/assets/images/login-screen-d4dd6652cdd8a1c64997b2ae85a00050.png delete mode 100644 pr-preview/pr-1594/assets/images/materialization-13219c2248a49327c4c97340d0216bed.gif delete mode 100644 pr-preview/pr-1594/assets/images/materialization-details-page--overview-3d6549a0a57b21fa5c7917a7980ee7ba.png delete mode 100644 pr-preview/pr-1594/assets/images/materialization-details-page--spec-e72c1f5f9d360e2787575a35687e3e1d.png delete mode 100644 pr-preview/pr-1594/assets/images/materialization-new-bbe45dcc13bded994190ac75f86dc01f.svg delete mode 100644 pr-preview/pr-1594/assets/images/materialization-page-e2b7070883f3db0f1bf3add85e3a9f86.png delete mode 100644 pr-preview/pr-1594/assets/images/ui-evolution-re-create-de574ca2333327fc911cc8ff0e46c5b9.png delete mode 100644 pr-preview/pr-1594/assets/js/014c8d62.cdd16169.js delete mode 100644 pr-preview/pr-1594/assets/js/01f1a992.d58243ab.js delete mode 100644 pr-preview/pr-1594/assets/js/02365777.75cbb3fb.js delete mode 100644 pr-preview/pr-1594/assets/js/02ad5b1c.d0c45e12.js delete mode 100644 pr-preview/pr-1594/assets/js/0359e208.9032423a.js delete mode 100644 pr-preview/pr-1594/assets/js/04c11cf4.2c889b63.js delete mode 100644 pr-preview/pr-1594/assets/js/061adc4c.1893b077.js delete mode 100644 pr-preview/pr-1594/assets/js/07003cee.b4545e62.js delete mode 100644 pr-preview/pr-1594/assets/js/08b3569b.177052bf.js delete mode 100644 pr-preview/pr-1594/assets/js/08c8edc4.34819e19.js delete mode 100644 pr-preview/pr-1594/assets/js/08cd1031.e390c4de.js delete mode 100644 pr-preview/pr-1594/assets/js/08e5c7dc.2226f998.js delete mode 100644 pr-preview/pr-1594/assets/js/0ad621fa.7adcf55b.js delete mode 100644 pr-preview/pr-1594/assets/js/0bcbca69.ed09f615.js delete mode 100644 pr-preview/pr-1594/assets/js/0c8d310c.ef9f80a5.js delete mode 100644 pr-preview/pr-1594/assets/js/0d3223a3.65fc4528.js delete mode 100644 pr-preview/pr-1594/assets/js/0d762a34.feefc22e.js delete mode 100644 pr-preview/pr-1594/assets/js/0ea4d505.941429b1.js delete mode 100644 pr-preview/pr-1594/assets/js/0fda5f57.aa85507c.js delete mode 100644 pr-preview/pr-1594/assets/js/104ea86a.f1e9ae96.js delete mode 100644 pr-preview/pr-1594/assets/js/1169.640da5fa.js delete mode 100644 pr-preview/pr-1594/assets/js/116b31b8.1da8035b.js delete mode 100644 pr-preview/pr-1594/assets/js/1176.6957abeb.js delete mode 100644 pr-preview/pr-1594/assets/js/1245.c5d67bd8.js delete mode 100644 pr-preview/pr-1594/assets/js/12ca7dc6.d05b6203.js delete mode 100644 pr-preview/pr-1594/assets/js/130.def7e228.js delete mode 100644 pr-preview/pr-1594/assets/js/1331.ec0a48c7.js delete mode 100644 pr-preview/pr-1594/assets/js/1398.40a441e2.js delete mode 100644 pr-preview/pr-1594/assets/js/1434155d.858c890c.js delete mode 100644 pr-preview/pr-1594/assets/js/161e6f0a.3eb5081c.js delete mode 100644 pr-preview/pr-1594/assets/js/162.5b1f790d.js delete mode 100644 pr-preview/pr-1594/assets/js/1714037f.090798cc.js delete mode 100644 pr-preview/pr-1594/assets/js/17896441.adc411f8.js delete mode 100644 pr-preview/pr-1594/assets/js/1875cf18.3bf76a87.js delete mode 100644 pr-preview/pr-1594/assets/js/189edb0d.5a86180d.js delete mode 100644 pr-preview/pr-1594/assets/js/1946.abc6ec22.js delete mode 100644 pr-preview/pr-1594/assets/js/1bc1529f.f5dc7d77.js delete mode 100644 pr-preview/pr-1594/assets/js/1ca4a2d7.9a1ce243.js delete mode 100644 pr-preview/pr-1594/assets/js/1cde271f.b1370c1a.js delete mode 100644 pr-preview/pr-1594/assets/js/1d129a7b.62510428.js delete mode 100644 pr-preview/pr-1594/assets/js/1f391b9e.19b65b27.js delete mode 100644 pr-preview/pr-1594/assets/js/2130.c89b510d.js delete mode 100644 pr-preview/pr-1594/assets/js/2237.baec02cf.js delete mode 100644 pr-preview/pr-1594/assets/js/22ed3411.65f32600.js delete mode 100644 pr-preview/pr-1594/assets/js/2376.9cdcd224.js delete mode 100644 pr-preview/pr-1594/assets/js/2453.2ecc4026.js delete mode 100644 pr-preview/pr-1594/assets/js/2548.3eaa016b.js delete mode 100644 pr-preview/pr-1594/assets/js/25491a6a.1255d965.js delete mode 100644 pr-preview/pr-1594/assets/js/25a17fcd.f1fd2bbd.js delete mode 100644 pr-preview/pr-1594/assets/js/2843.6beaccba.js delete mode 100644 pr-preview/pr-1594/assets/js/28a8491c.13ec90df.js delete mode 100644 pr-preview/pr-1594/assets/js/2925.5a7d8b64.js delete mode 100644 pr-preview/pr-1594/assets/js/2983.236363d9.js delete mode 100644 pr-preview/pr-1594/assets/js/2e3ffc99.3c49228a.js delete mode 100644 pr-preview/pr-1594/assets/js/2e426791.7b73cb21.js delete mode 100644 pr-preview/pr-1594/assets/js/2fea2d40.5d40aa26.js delete mode 100644 pr-preview/pr-1594/assets/js/3068.5e00bfe3.js delete mode 100644 pr-preview/pr-1594/assets/js/309.6dbebb91.js delete mode 100644 pr-preview/pr-1594/assets/js/31570a90.2a22eeaa.js delete mode 100644 pr-preview/pr-1594/assets/js/331.9e748e5c.js delete mode 100644 pr-preview/pr-1594/assets/js/3626.1692bd06.js delete mode 100644 pr-preview/pr-1594/assets/js/3658.0c8f3c0c.js delete mode 100644 pr-preview/pr-1594/assets/js/3706.4e7ba6f2.js delete mode 100644 pr-preview/pr-1594/assets/js/375ba1d8.fab37c6c.js delete mode 100644 pr-preview/pr-1594/assets/js/376.dedd6ca6.js delete mode 100644 pr-preview/pr-1594/assets/js/37788a03.8ee42d0e.js delete mode 100644 pr-preview/pr-1594/assets/js/38a516ae.4ac9c90c.js delete mode 100644 pr-preview/pr-1594/assets/js/38fdfb5b.40732ef4.js delete mode 100644 pr-preview/pr-1594/assets/js/397210d6.7624d70a.js delete mode 100644 pr-preview/pr-1594/assets/js/3bada45e.c4a4a13c.js delete mode 100644 pr-preview/pr-1594/assets/js/3c6e6542.17a2c4da.js delete mode 100644 pr-preview/pr-1594/assets/js/3c6ed59c.234f75b7.js delete mode 100644 pr-preview/pr-1594/assets/js/3c711bdb.54e664af.js delete mode 100644 pr-preview/pr-1594/assets/js/405f2d9a.b8852ea3.js delete mode 100644 pr-preview/pr-1594/assets/js/4132.adc4137b.js delete mode 100644 pr-preview/pr-1594/assets/js/4162.aab6f778.js delete mode 100644 pr-preview/pr-1594/assets/js/41d993a6.6eb7edc2.js delete mode 100644 pr-preview/pr-1594/assets/js/420.011125cd.js delete mode 100644 pr-preview/pr-1594/assets/js/426.ae7a4e4d.js delete mode 100644 pr-preview/pr-1594/assets/js/42e3560a.c10d6b08.js delete mode 100644 pr-preview/pr-1594/assets/js/432d7d66.1e8d1f70.js delete mode 100644 pr-preview/pr-1594/assets/js/4434a8b7.1fe1ee28.js delete mode 100644 pr-preview/pr-1594/assets/js/44386d1b.cfce857c.js delete mode 100644 pr-preview/pr-1594/assets/js/44b1e2f5.3eccbccd.js delete mode 100644 pr-preview/pr-1594/assets/js/453.3f16938b.js delete mode 100644 pr-preview/pr-1594/assets/js/45462f11.9c7c6de5.js delete mode 100644 pr-preview/pr-1594/assets/js/4648c831.3dbeef75.js delete mode 100644 pr-preview/pr-1594/assets/js/46cf1090.eef6ac79.js delete mode 100644 pr-preview/pr-1594/assets/js/4741.460f6e7f.js delete mode 100644 pr-preview/pr-1594/assets/js/477598dd.947758f8.js delete mode 100644 pr-preview/pr-1594/assets/js/478.66e42700.js delete mode 100644 pr-preview/pr-1594/assets/js/482d6521.2cfa7538.js delete mode 100644 pr-preview/pr-1594/assets/js/487bf429.ec0ba307.js delete mode 100644 pr-preview/pr-1594/assets/js/4943.ce789d06.js delete mode 100644 pr-preview/pr-1594/assets/js/49e00cf0.cdedc3b2.js delete mode 100644 pr-preview/pr-1594/assets/js/4a1a3e03.96287a86.js delete mode 100644 pr-preview/pr-1594/assets/js/4acaa9c4.8e18b133.js delete mode 100644 pr-preview/pr-1594/assets/js/4bccbb93.23c8fa60.js delete mode 100644 pr-preview/pr-1594/assets/js/4d317276.f8901f15.js delete mode 100644 pr-preview/pr-1594/assets/js/4d4f51e2.da6d3a2e.js delete mode 100644 pr-preview/pr-1594/assets/js/4da0167e.b6e7eb4e.js delete mode 100644 pr-preview/pr-1594/assets/js/4dbcc71c.aeeb3f61.js delete mode 100644 pr-preview/pr-1594/assets/js/4e1df6a3.b2cf9f16.js delete mode 100644 pr-preview/pr-1594/assets/js/4f08651a.6c382f9c.js delete mode 100644 pr-preview/pr-1594/assets/js/4f1ddcc5.d704e6be.js delete mode 100644 pr-preview/pr-1594/assets/js/540a1167.3d448be8.js delete mode 100644 pr-preview/pr-1594/assets/js/547dc70b.f76ed865.js delete mode 100644 pr-preview/pr-1594/assets/js/54a88ed7.1baf8def.js delete mode 100644 pr-preview/pr-1594/assets/js/5769edfb.b3730ae4.js delete mode 100644 pr-preview/pr-1594/assets/js/57aea1fc.95ca8c03.js delete mode 100644 pr-preview/pr-1594/assets/js/58d4a820.4aebbe0f.js delete mode 100644 pr-preview/pr-1594/assets/js/5b71c68f.ee8c2b84.js delete mode 100644 pr-preview/pr-1594/assets/js/5ba559d4.e84db72e.js delete mode 100644 pr-preview/pr-1594/assets/js/5bb0dc82.2ac019c2.js delete mode 100644 pr-preview/pr-1594/assets/js/5c7e141f.4ab4be0d.js delete mode 100644 pr-preview/pr-1594/assets/js/5d9eac72.17517544.js delete mode 100644 pr-preview/pr-1594/assets/js/5e95c892.af57b059.js delete mode 100644 pr-preview/pr-1594/assets/js/61038276.4935de1d.js delete mode 100644 pr-preview/pr-1594/assets/js/6181342c.6b6f6a4d.js delete mode 100644 pr-preview/pr-1594/assets/js/635.c9ac7722.js delete mode 100644 pr-preview/pr-1594/assets/js/63b37bf5.cf27ab4f.js delete mode 100644 pr-preview/pr-1594/assets/js/6420.ed961081.js delete mode 100644 pr-preview/pr-1594/assets/js/6459b84b.62c1dfdf.js delete mode 100644 pr-preview/pr-1594/assets/js/645c44d3.db494a12.js delete mode 100644 pr-preview/pr-1594/assets/js/65a8f618.a33655b0.js delete mode 100644 pr-preview/pr-1594/assets/js/6788.0068c12f.js delete mode 100644 pr-preview/pr-1594/assets/js/68.81c34607.js delete mode 100644 pr-preview/pr-1594/assets/js/689.a3a2233a.js delete mode 100644 pr-preview/pr-1594/assets/js/68a929a9.0d90be75.js delete mode 100644 pr-preview/pr-1594/assets/js/68cc1c24.1d1d9631.js delete mode 100644 pr-preview/pr-1594/assets/js/6b49cdad.22931ba6.js delete mode 100644 pr-preview/pr-1594/assets/js/6bdc832c.c5fbbab6.js delete mode 100644 pr-preview/pr-1594/assets/js/6d42ac36.5676c2f3.js delete mode 100644 pr-preview/pr-1594/assets/js/6e2958ef.adf03a04.js delete mode 100644 pr-preview/pr-1594/assets/js/6e773b1a.8f6d9140.js delete mode 100644 pr-preview/pr-1594/assets/js/6f6bf398.23c7fab7.js delete mode 100644 pr-preview/pr-1594/assets/js/706.eb973759.js delete mode 100644 pr-preview/pr-1594/assets/js/741.b53f607c.js delete mode 100644 pr-preview/pr-1594/assets/js/7426.ae5481b0.js delete mode 100644 pr-preview/pr-1594/assets/js/76bcc235.e9a356aa.js delete mode 100644 pr-preview/pr-1594/assets/js/770e6532.6787aeaf.js delete mode 100644 pr-preview/pr-1594/assets/js/7718f40c.fd132592.js delete mode 100644 pr-preview/pr-1594/assets/js/788.e94a45f6.js delete mode 100644 pr-preview/pr-1594/assets/js/7c555ba4.b049aafe.js delete mode 100644 pr-preview/pr-1594/assets/js/7cda2da6.e581f4a5.js delete mode 100644 pr-preview/pr-1594/assets/js/7cfb1d0c.f28a5984.js delete mode 100644 pr-preview/pr-1594/assets/js/7fd3d7a0.638976a6.js delete mode 100644 pr-preview/pr-1594/assets/js/803.8e7831e5.js delete mode 100644 pr-preview/pr-1594/assets/js/8055.435b03d2.js delete mode 100644 pr-preview/pr-1594/assets/js/810.c3c49cc3.js delete mode 100644 pr-preview/pr-1594/assets/js/8114665f.1e39622d.js delete mode 100644 pr-preview/pr-1594/assets/js/8337.d2982b80.js delete mode 100644 pr-preview/pr-1594/assets/js/843.d7e56aae.js delete mode 100644 pr-preview/pr-1594/assets/js/8431750a.e60b9ff0.js delete mode 100644 pr-preview/pr-1594/assets/js/845ce2f5.a0d8342a.js delete mode 100644 pr-preview/pr-1594/assets/js/8478.e385cd80.js delete mode 100644 pr-preview/pr-1594/assets/js/8577.769b0788.js delete mode 100644 pr-preview/pr-1594/assets/js/858820da.470c2343.js delete mode 100644 pr-preview/pr-1594/assets/js/8591.54a6cd4d.js delete mode 100644 pr-preview/pr-1594/assets/js/8591.54a6cd4d.js.LICENSE.txt delete mode 100644 pr-preview/pr-1594/assets/js/8635.2c31446f.js delete mode 100644 pr-preview/pr-1594/assets/js/869.3cca42c0.js delete mode 100644 pr-preview/pr-1594/assets/js/8810.e107d159.js delete mode 100644 pr-preview/pr-1594/assets/js/8869.7e05992f.js delete mode 100644 pr-preview/pr-1594/assets/js/88fa6390.cb1c4c18.js delete mode 100644 pr-preview/pr-1594/assets/js/8a611437.2791fab7.js delete mode 100644 pr-preview/pr-1594/assets/js/8dce94c3.e9ffddf1.js delete mode 100644 pr-preview/pr-1594/assets/js/8e876c80.c8f53ef4.js delete mode 100644 pr-preview/pr-1594/assets/js/902.9277dc16.js delete mode 100644 pr-preview/pr-1594/assets/js/905c32de.4949c5ef.js delete mode 100644 pr-preview/pr-1594/assets/js/906e1e9f.8bf790cc.js delete mode 100644 pr-preview/pr-1594/assets/js/9184.0cf47614.js delete mode 100644 pr-preview/pr-1594/assets/js/921f956e.eed2c065.js delete mode 100644 pr-preview/pr-1594/assets/js/925.f8ccfbd9.js delete mode 100644 pr-preview/pr-1594/assets/js/9278.bc46237a.js delete mode 100644 pr-preview/pr-1594/assets/js/9309.04c2ac1e.js delete mode 100644 pr-preview/pr-1594/assets/js/9309.04c2ac1e.js.LICENSE.txt delete mode 100644 pr-preview/pr-1594/assets/js/943.e1f9edb9.js delete mode 100644 pr-preview/pr-1594/assets/js/946.bcce335e.js delete mode 100644 pr-preview/pr-1594/assets/js/952b3fdc.bf8bb02d.js delete mode 100644 pr-preview/pr-1594/assets/js/9610.9966723f.js delete mode 100644 pr-preview/pr-1594/assets/js/9610.9966723f.js.LICENSE.txt delete mode 100644 pr-preview/pr-1594/assets/js/964d596a.f473761b.js delete mode 100644 pr-preview/pr-1594/assets/js/9689.0064c4fa.js delete mode 100644 pr-preview/pr-1594/assets/js/971e8ccd.1f633718.js delete mode 100644 pr-preview/pr-1594/assets/js/977d5535.4f5651d7.js delete mode 100644 pr-preview/pr-1594/assets/js/986b9943.fb5e319e.js delete mode 100644 pr-preview/pr-1594/assets/js/9b515b04.fad6a0cb.js delete mode 100644 pr-preview/pr-1594/assets/js/9d18d13c.41265962.js delete mode 100644 pr-preview/pr-1594/assets/js/9d57d0a6.6861fb38.js delete mode 100644 pr-preview/pr-1594/assets/js/9e25251f.8354a6a9.js delete mode 100644 pr-preview/pr-1594/assets/js/9e64d05b.e2db52a4.js delete mode 100644 pr-preview/pr-1594/assets/js/9e8f5f1c.a4c5d2e7.js delete mode 100644 pr-preview/pr-1594/assets/js/9fc067fe.251a75bc.js delete mode 100644 pr-preview/pr-1594/assets/js/9fce37be.7fefd728.js delete mode 100644 pr-preview/pr-1594/assets/js/a06d9ffe.c7666626.js delete mode 100644 pr-preview/pr-1594/assets/js/a0e6a329.782c5d27.js delete mode 100644 pr-preview/pr-1594/assets/js/a24b80f3.ff51b134.js delete mode 100644 pr-preview/pr-1594/assets/js/a3c49fd9.88a15c8a.js delete mode 100644 pr-preview/pr-1594/assets/js/a42036e6.6b75a9cc.js delete mode 100644 pr-preview/pr-1594/assets/js/a7456010.732b7642.js delete mode 100644 pr-preview/pr-1594/assets/js/a7bd4aaa.154be41b.js delete mode 100644 pr-preview/pr-1594/assets/js/a9379b01.b5f39f28.js delete mode 100644 pr-preview/pr-1594/assets/js/a94703ab.226454ec.js delete mode 100644 pr-preview/pr-1594/assets/js/a995ee96.690695c5.js delete mode 100644 pr-preview/pr-1594/assets/js/aba21aa0.421a8980.js delete mode 100644 pr-preview/pr-1594/assets/js/abc1ea5e.22be9f20.js delete mode 100644 pr-preview/pr-1594/assets/js/ac961e5b.234f3378.js delete mode 100644 pr-preview/pr-1594/assets/js/b05d4510.a0d5be06.js delete mode 100644 pr-preview/pr-1594/assets/js/b0d5790a.65438780.js delete mode 100644 pr-preview/pr-1594/assets/js/b0d7f3f2.9d1cd86c.js delete mode 100644 pr-preview/pr-1594/assets/js/b1a65bd3.d2b80b1e.js delete mode 100644 pr-preview/pr-1594/assets/js/b32e8f59.dc986ba8.js delete mode 100644 pr-preview/pr-1594/assets/js/b5dab0d4.1e790139.js delete mode 100644 pr-preview/pr-1594/assets/js/b74f0b56.f52da84e.js delete mode 100644 pr-preview/pr-1594/assets/js/b7a68670.8abf42ed.js delete mode 100644 pr-preview/pr-1594/assets/js/be02d3e2.d0ed9e3a.js delete mode 100644 pr-preview/pr-1594/assets/js/bf636eff.50dbd921.js delete mode 100644 pr-preview/pr-1594/assets/js/bfc09eea.ce8f0d11.js delete mode 100644 pr-preview/pr-1594/assets/js/bfec4f44.274315dd.js delete mode 100644 pr-preview/pr-1594/assets/js/c042bbf4.a74c0bcc.js delete mode 100644 pr-preview/pr-1594/assets/js/c10f38bc.a5ee4330.js delete mode 100644 pr-preview/pr-1594/assets/js/c11c77a9.a2b9dcc2.js delete mode 100644 pr-preview/pr-1594/assets/js/c13ec0a6.a1c4a196.js delete mode 100644 pr-preview/pr-1594/assets/js/c1e7e5a7.cf9e77e7.js delete mode 100644 pr-preview/pr-1594/assets/js/c287b26d.f37a2575.js delete mode 100644 pr-preview/pr-1594/assets/js/c521cd6b.3bb8b1c4.js delete mode 100644 pr-preview/pr-1594/assets/js/c5a10934.815f7080.js delete mode 100644 pr-preview/pr-1594/assets/js/c66ae53f.5559e12c.js delete mode 100644 pr-preview/pr-1594/assets/js/ca7ab025.09643496.js delete mode 100644 pr-preview/pr-1594/assets/js/cad0251b.5b4c1d93.js delete mode 100644 pr-preview/pr-1594/assets/js/caea5a36.df5bb5b9.js delete mode 100644 pr-preview/pr-1594/assets/js/cc0c6179.b428285d.js delete mode 100644 pr-preview/pr-1594/assets/js/cce87b67.6c56c4f9.js delete mode 100644 pr-preview/pr-1594/assets/js/ce5ba636.9f197015.js delete mode 100644 pr-preview/pr-1594/assets/js/cf864737.d68d694e.js delete mode 100644 pr-preview/pr-1594/assets/js/cfe90ca7.b62377d3.js delete mode 100644 pr-preview/pr-1594/assets/js/d14d20ef.fbb1f607.js delete mode 100644 pr-preview/pr-1594/assets/js/d273ee52.32015f22.js delete mode 100644 pr-preview/pr-1594/assets/js/d6385b0d.7ea3f246.js delete mode 100644 pr-preview/pr-1594/assets/js/d7fdcae3.6b5923a2.js delete mode 100644 pr-preview/pr-1594/assets/js/d8b2c51c.7d4e0add.js delete mode 100644 pr-preview/pr-1594/assets/js/d8b5b6da.fb36935e.js delete mode 100644 pr-preview/pr-1594/assets/js/da6eb168.ca96c985.js delete mode 100644 pr-preview/pr-1594/assets/js/db0f1c3a.7197a5a3.js delete mode 100644 pr-preview/pr-1594/assets/js/db2b4d90.8dfa8c0e.js delete mode 100644 pr-preview/pr-1594/assets/js/dbd1cd20.28d3f6e1.js delete mode 100644 pr-preview/pr-1594/assets/js/de285be4.307d9b0b.js delete mode 100644 pr-preview/pr-1594/assets/js/de7a358c.dd4ca8f3.js delete mode 100644 pr-preview/pr-1594/assets/js/deef465e.8270f0d6.js delete mode 100644 pr-preview/pr-1594/assets/js/e1d33ea7.754a454b.js delete mode 100644 pr-preview/pr-1594/assets/js/e3318347.4be28ac9.js delete mode 100644 pr-preview/pr-1594/assets/js/e33c9cd6.b3bccb4b.js delete mode 100644 pr-preview/pr-1594/assets/js/e459d51d.17071a91.js delete mode 100644 pr-preview/pr-1594/assets/js/e5e05fea.88348c3f.js delete mode 100644 pr-preview/pr-1594/assets/js/e6e0301f.1895224e.js delete mode 100644 pr-preview/pr-1594/assets/js/e76aecec.5fe24bf1.js delete mode 100644 pr-preview/pr-1594/assets/js/e8453306.8955c2e4.js delete mode 100644 pr-preview/pr-1594/assets/js/e858514f.dcda684d.js delete mode 100644 pr-preview/pr-1594/assets/js/e8851b38.2dd6bd79.js delete mode 100644 pr-preview/pr-1594/assets/js/ea7b1b11.fbf626bf.js delete mode 100644 pr-preview/pr-1594/assets/js/eae8ea84.583bf550.js delete mode 100644 pr-preview/pr-1594/assets/js/ebce6379.9b37e36b.js delete mode 100644 pr-preview/pr-1594/assets/js/ecf790cf.29e2deb3.js delete mode 100644 pr-preview/pr-1594/assets/js/eec1121c.a7bb96af.js delete mode 100644 pr-preview/pr-1594/assets/js/f09a1148.cc1f16d4.js delete mode 100644 pr-preview/pr-1594/assets/js/f47a7ed3.5af1643e.js delete mode 100644 pr-preview/pr-1594/assets/js/f59a0ebe.dd03be98.js delete mode 100644 pr-preview/pr-1594/assets/js/f5f0d846.43fdf6c7.js delete mode 100644 pr-preview/pr-1594/assets/js/f65e0d6c.e05fb411.js delete mode 100644 pr-preview/pr-1594/assets/js/fc44458b.b9f3d72a.js delete mode 100644 pr-preview/pr-1594/assets/js/fca4800a.1513ebb2.js delete mode 100644 pr-preview/pr-1594/assets/js/fe12321f.dca86e54.js delete mode 100644 pr-preview/pr-1594/assets/js/main.8532303a.js delete mode 100644 pr-preview/pr-1594/assets/js/main.8532303a.js.LICENSE.txt delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerDailyMotion.70afc90f.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerDailyMotion.f20d032c.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerFacebook.1a4ea89c.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerFacebook.c760d132.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerFilePlayer.d5d95a3c.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerFilePlayer.f1588da1.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerKaltura.337ee336.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerKaltura.910cba58.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerMixcloud.433550ac.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerMixcloud.7864a519.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerMux.462f90bd.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerMux.93d8b537.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerPreview.76287d19.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerPreview.f0416885.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerSoundCloud.b8f7e226.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerSoundCloud.e82f1e0e.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerStreamable.28f63750.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerStreamable.41e1bb3f.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerTwitch.72c73ef7.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerTwitch.e499980d.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerVidyard.0018beb1.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerVidyard.86fd8a80.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerVimeo.0d5ed4f1.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerVimeo.554e1970.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerWistia.3c90c4da.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerWistia.3eab0b00.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerYouTube.2978d928.js delete mode 100644 pr-preview/pr-1594/assets/js/reactPlayerYouTube.606b56bc.js delete mode 100644 pr-preview/pr-1594/assets/js/runtime~main.95e4f360.js delete mode 100644 pr-preview/pr-1594/concepts/advanced/evolutions/index.html delete mode 100644 pr-preview/pr-1594/concepts/advanced/journals/index.html delete mode 100644 pr-preview/pr-1594/concepts/advanced/logs-stats/index.html delete mode 100644 pr-preview/pr-1594/concepts/advanced/projections/index.html delete mode 100644 pr-preview/pr-1594/concepts/advanced/shards/index.html delete mode 100644 pr-preview/pr-1594/concepts/captures/index.html delete mode 100644 pr-preview/pr-1594/concepts/catalogs/index.html delete mode 100644 pr-preview/pr-1594/concepts/collections/index.html delete mode 100644 pr-preview/pr-1594/concepts/connectors/index.html delete mode 100644 pr-preview/pr-1594/concepts/derivations/index.html delete mode 100644 pr-preview/pr-1594/concepts/flowctl/index.html delete mode 100644 pr-preview/pr-1594/concepts/import/index.html delete mode 100644 pr-preview/pr-1594/concepts/index.html delete mode 100644 pr-preview/pr-1594/concepts/materialization/index.html delete mode 100644 pr-preview/pr-1594/concepts/schemas/index.html delete mode 100644 pr-preview/pr-1594/concepts/storage-mappings/index.html delete mode 100644 pr-preview/pr-1594/concepts/tests/index.html delete mode 100644 pr-preview/pr-1594/concepts/web-app/index.html delete mode 100644 pr-preview/pr-1594/example-markdown/index.html delete mode 100644 pr-preview/pr-1594/example/index.html delete mode 100644 pr-preview/pr-1594/getting-started/installation/index.html delete mode 100644 pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/index.html delete mode 100644 pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/index.html delete mode 100644 pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/index.html delete mode 100644 pr-preview/pr-1594/getting-started/tutorials/index.html delete mode 100644 pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/index.html delete mode 100644 pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/index.html delete mode 100644 pr-preview/pr-1594/guides/connect-network/index.html delete mode 100644 pr-preview/pr-1594/guides/create-dataflow/index.html delete mode 100644 pr-preview/pr-1594/guides/create-derivation/index.html delete mode 100644 pr-preview/pr-1594/guides/customize-materialization-fields/index.html delete mode 100644 pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/index.html delete mode 100644 pr-preview/pr-1594/guides/derivation_tutorial_sql/index.html delete mode 100644 pr-preview/pr-1594/guides/edit-data-flows/index.html delete mode 100644 pr-preview/pr-1594/guides/flowctl/create-derivation/index.html delete mode 100644 pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/index.html delete mode 100644 pr-preview/pr-1594/guides/flowctl/edit-specification-locally/index.html delete mode 100644 pr-preview/pr-1594/guides/flowctl/index.html delete mode 100644 pr-preview/pr-1594/guides/flowctl/troubleshoot-task/index.html delete mode 100644 pr-preview/pr-1594/guides/howto_join_two_collections_typescript/index.html delete mode 100644 pr-preview/pr-1594/guides/index.html delete mode 100644 pr-preview/pr-1594/guides/schema-evolution/index.html delete mode 100644 pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/index.html delete mode 100644 pr-preview/pr-1594/guides/system-specific-dataflows/index.html delete mode 100644 pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/index.html delete mode 100644 pr-preview/pr-1594/guides/transform_data_using_typescript/index.html delete mode 100644 pr-preview/pr-1594/img/Estuary.png delete mode 100644 pr-preview/pr-1594/img/EstuaryAnimated.gif delete mode 100644 pr-preview/pr-1594/img/docusaurus.png delete mode 100644 pr-preview/pr-1594/img/estuary-new.png delete mode 100644 pr-preview/pr-1594/img/favicon-2.ico delete mode 100644 pr-preview/pr-1594/img/favicon.ico delete mode 100644 pr-preview/pr-1594/img/logo.svg delete mode 100644 pr-preview/pr-1594/img/undraw_docusaurus_mountain.svg delete mode 100644 pr-preview/pr-1594/img/undraw_docusaurus_react.svg delete mode 100644 pr-preview/pr-1594/img/undraw_docusaurus_tree.svg delete mode 100644 pr-preview/pr-1594/index.html delete mode 100644 pr-preview/pr-1594/lunr-index-1724944510578.json delete mode 100644 pr-preview/pr-1594/lunr-index.json delete mode 100644 pr-preview/pr-1594/overview/comparisons/index.html delete mode 100644 pr-preview/pr-1594/overview/who-should-use-flow/index.html delete mode 100644 pr-preview/pr-1594/reference/Configuring-task-shards/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/github/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/dekaf/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/index.html delete mode 100644 pr-preview/pr-1594/reference/Connectors/materialization-protocol/index.html delete mode 100644 pr-preview/pr-1594/reference/allow-ip-addresses/index.html delete mode 100644 pr-preview/pr-1594/reference/authentication/index.html delete mode 100644 pr-preview/pr-1594/reference/editing/index.html delete mode 100644 pr-preview/pr-1594/reference/materialization-sync-schedule/index.html delete mode 100644 pr-preview/pr-1594/reference/notifications/index.html delete mode 100644 pr-preview/pr-1594/reference/organizing-catalogs/index.html delete mode 100644 pr-preview/pr-1594/reference/reduction-strategies/append/index.html delete mode 100644 pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals/index.html delete mode 100644 pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins/index.html delete mode 100644 pr-preview/pr-1594/reference/reduction-strategies/index.html delete mode 100644 pr-preview/pr-1594/reference/reduction-strategies/merge/index.html delete mode 100644 pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize/index.html delete mode 100644 pr-preview/pr-1594/reference/reduction-strategies/set/index.html delete mode 100644 pr-preview/pr-1594/reference/reduction-strategies/sum/index.html delete mode 100644 pr-preview/pr-1594/reference/time-travel/index.html delete mode 100644 pr-preview/pr-1594/reference/working-logs-stats/index.html delete mode 100644 pr-preview/pr-1594/search-doc-1724944510578.json delete mode 100644 pr-preview/pr-1594/search-doc.json delete mode 100644 pr-preview/pr-1594/sitemap.xml diff --git a/pr-preview/pr-1594/404.html b/pr-preview/pr-1594/404.html deleted file mode 100644 index fe6e9c8111..0000000000 --- a/pr-preview/pr-1594/404.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - -Estuary Flow - - - - - - - - - -
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/css/styles.7552b07e.css b/pr-preview/pr-1594/assets/css/styles.7552b07e.css deleted file mode 100644 index ab40b91523..0000000000 --- a/pr-preview/pr-1594/assets/css/styles.7552b07e.css +++ /dev/null @@ -1 +0,0 @@ -.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}body,ol ol,ol ul,ul ol,ul ul{margin:0}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.button,.dropdown__link,.searchbox,.text--truncate{white-space:nowrap}*,.algolia-autocomplete .ds-dropdown-menu *,.searchbox,.searchbox__input{box-sizing:border-box}.searchbox__reset:focus,.searchbox__submit:focus,body:not(.navigation-with-keyboard) :not(input):focus{outline:0}pre,table{overflow:auto}.markdown li,body{word-wrap:break-word}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#25c2a0;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#46cbae;--ifm-color-primary-lighter:#66d4bd;--ifm-color-primary-lightest:#92e0d0;--ifm-code-font-size:95%;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none,.tabItem_LNqP{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul,.tabList__CuJ{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items,.tabItem_Ymn6>:last-child{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;top:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;visibility:hidden;left:0}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;content:"";filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;position:fixed;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto;padding-left:0}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.docusaurus-highlight-code-line{background-color:#0000001a;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}html[data-theme=dark] .docusaurus-highlight-code-line{background-color:#0000004d}.navbar__search{padding-left:var(--ifm-navbar-padding-horizontal)!important}body.running-in-iframe .navbar,body.running-in-iframe .theme-doc-breadcrumbs{display:none}.button-link{background-color:#e9eeed;border-radius:30px;color:#fff;display:inline-block;padding:10px 20px;text-align:center;text-decoration:none;transition:background-color .3s}.button-link:hover{background-color:#d3d6d5;cursor:pointer}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.searchbox,.searchbox__input,.tag_QGVx{display:inline-block}.tag_QGVx{margin:0 .4rem .5rem 0}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}.algolia-docsearch-suggestion{border-bottom-color:#3a3dd1}.algolia-docsearch-suggestion--category-header{background-color:#4b54de}.algolia-docsearch-suggestion--highlight{color:#3a33d1}.algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background-color:#4d47d5}.aa-cursor .algolia-docsearch-suggestion--content{color:#272296}.aa-cursor .algolia-docsearch-suggestion{background:#ebebfb}.searchbox{height:32px!important;position:relative;visibility:visible!important;width:200px}.searchbox .algolia-autocomplete{display:block;height:100%;width:100%}.searchbox__wrapper{height:100%;position:relative;width:100%;z-index:999}.searchbox__input{appearance:none;background:#fff!important;border:0;border-radius:16px;box-shadow:inset 0 0 0 1px #ccc;font-size:12px;height:100%;padding:0 26px 0 32px;transition:box-shadow .4s,background .4s;vertical-align:middle;white-space:normal;width:100%}.searchbox__reset,.searchbox__submit{font-size:inherit;-webkit-user-select:none;position:absolute}.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{background:#fff;box-shadow:inset 0 0 0 1px #aaa;outline:0}.searchbox__input::placeholder{color:#aaa}.searchbox__submit{background-color:#458ee100;border:0;border-radius:16px 0 0 16px;height:100%;left:0;margin:0;padding:0;right:inherit;text-align:center;top:0;user-select:none;vertical-align:middle;width:32px}.searchbox__submit:before{content:"";display:inline-block;height:100%;margin-right:-4px;vertical-align:middle}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion,.dropdownNavbarItemMobile_S0Fm,.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}.searchbox__submit svg{height:14px;vertical-align:middle;width:14px;fill:#6d7e96}.searchbox__reset{background:none;border:0;cursor:pointer;display:block;margin:0;padding:0;right:8px;top:8px;user-select:none;fill:#00000080}.searchbox__reset.hide{display:none}.searchbox__reset svg{display:block;height:8px;margin:4px;width:8px}.searchbox__input:valid~.searchbox__reset{animation-duration:.15s;animation-name:a;display:block}@keyframes a{0%{opacity:0;transform:translate3d(-20%,0,0)}to{opacity:1;transform:none}}.algolia-autocomplete .ds-dropdown-menu:before{background:#373940;border-radius:2px;border-right:1px solid #373940;border-top:1px solid #373940;content:"";display:block;height:14px;position:absolute;top:-7px;transform:rotate(-45deg);width:14px;z-index:1000}.algolia-autocomplete .ds-dropdown-menu{box-shadow:0 1px 0 0 #0003,0 2px 3px 0 #0000001a}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:1000}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{background:#fff;border-radius:4px;overflow:auto;padding:0;position:relative}.algolia-autocomplete .algolia-docsearch-suggestion{display:block;overflow:hidden;padding:0;position:relative;text-decoration:none}.algolia-autocomplete .ds-cursor .algolia-docsearch-suggestion--wrapper{background:#f1f1f1;box-shadow:inset -2px 0 0 #61dafb}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{background:#ffe564;padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight{background:inherit;color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{background:inherit;box-shadow:inset 0 -2px 0 0 #458ee1cc;color:inherit;padding:0 0 1px}.algolia-autocomplete .algolia-docsearch-suggestion--content{cursor:pointer;display:block;float:right;padding:5.33333px 0 5.33333px 10.66667px;position:relative;width:70%}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{background:#ececec;content:"";display:block;height:100%;left:-1px;position:absolute;top:0;width:1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{background-color:#373940;color:#fff;display:none;font-size:14px;font-weight:700;letter-spacing:.08em;margin:0;padding:5px 8px;position:relative;text-transform:uppercase}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{background-color:#fff;float:left;padding:8px 0 0;width:100%}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{color:#777;display:none;float:left;font-size:.9em;padding:5.33333px 10.66667px;position:relative;text-align:right;width:30%;word-wrap:break-word}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{background:#ececec;content:"";display:block;height:100%;position:absolute;right:0;top:0;width:1px}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column .algolia-docsearch-suggestion--highlight{background-color:inherit;color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{color:#02060c;font-size:.9em;font-weight:700;margin-bottom:4px}.algolia-autocomplete .algolia-docsearch-suggestion--text{color:#63676d;display:block;font-size:.85em;line-height:1.2em;padding-right:2px}.algolia-autocomplete .algolia-docsearch-suggestion--version{color:#a6aab1;display:block;font-size:.65em;padding-right:2px;padding-top:2px}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{background-color:#373940;font-size:1.2em;margin-top:-8px;padding:8px 0;text-align:center;width:100%}.algolia-autocomplete .algolia-docsearch-suggestion--no-results .algolia-docsearch-suggestion--text{color:#fff;margin-top:4px}#__docusaurus-base-url-issue-banner-container,.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before,.docSidebarContainer_YfHR,.navbarSearchContainer_Bca1:empty,.sidebarLogo_isFc,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{background-color:#ebebeb;border:none;border-radius:3px;color:#222;font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace;font-size:90%;padding:1px 5px}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:none}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header{color:#fff;display:block}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary .algolia-docsearch-suggestion--subcategory-column,.tocCollapsibleContent_vkbj a{display:block}.algolia-autocomplete .algolia-docsearch-footer{background-color:#fff;float:right;font-size:0;height:30px;line-height:0;width:100%;z-index:2000}.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 130 18'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='url(%2523a)' d='M59.4.02h13.3a2.37 2.37 0 0 1 2.38 2.37V15.6a2.37 2.37 0 0 1-2.38 2.36H59.4a2.37 2.37 0 0 1-2.38-2.36V2.38A2.37 2.37 0 0 1 59.4.02'/%3E%3Cpath fill='%2523FFF' d='M66.26 4.56c-2.82 0-5.1 2.27-5.1 5.08 0 2.8 2.28 5.07 5.1 5.07 2.8 0 5.1-2.26 5.1-5.07 0-2.8-2.28-5.07-5.1-5.07zm0 8.65c-2 0-3.6-1.6-3.6-3.56 0-1.97 1.6-3.58 3.6-3.58 1.98 0 3.6 1.6 3.6 3.58a3.58 3.58 0 0 1-3.6 3.57zm0-6.4v2.66c0 .07.08.13.15.1l2.4-1.24c.04-.02.06-.1.03-.14a2.96 2.96 0 0 0-2.46-1.5.1.1 0 0 0-.1.1zm-3.33-1.96-.3-.3a.78.78 0 0 0-1.12 0l-.36.36a.77.77 0 0 0 0 1.1l.3.3c.05.05.13.04.17 0 .2-.25.4-.5.6-.7.23-.23.46-.43.7-.6.07-.04.07-.1.03-.16zm5-.8V3.4a.78.78 0 0 0-.78-.78h-1.83a.78.78 0 0 0-.78.78v.63c0 .07.06.12.14.1a5.7 5.7 0 0 1 1.58-.22c.52 0 1.04.07 1.54.2a.1.1 0 0 0 .13-.1z'/%3E%3Cpath fill='%2523182359' d='M102.16 13.76c0 1.46-.37 2.52-1.12 3.2-.75.67-1.9 1-3.44 1-.56 0-1.74-.1-2.67-.3l.34-1.7c.78.17 1.82.2 2.36.2.86 0 1.48-.16 1.84-.5.37-.36.55-.88.55-1.57v-.35a6 6 0 0 1-.84.3 4.2 4.2 0 0 1-1.2.17 4.5 4.5 0 0 1-1.6-.28 3.4 3.4 0 0 1-1.26-.82 3.7 3.7 0 0 1-.8-1.35c-.2-.54-.3-1.5-.3-2.2 0-.67.1-1.5.3-2.06a3.9 3.9 0 0 1 .9-1.43 4.1 4.1 0 0 1 1.45-.92 5.3 5.3 0 0 1 1.94-.37c.7 0 1.35.1 1.97.2a16 16 0 0 1 1.6.33v8.46zm-5.95-4.2c0 .9.2 1.88.6 2.3.4.4.9.62 1.53.62q.51 0 .96-.15a2.8 2.8 0 0 0 .73-.33V6.7a8.5 8.5 0 0 0-1.42-.17c-.76-.02-1.36.3-1.77.8-.4.5-.62 1.4-.62 2.23zm16.13 0c0 .72-.1 1.26-.32 1.85a4.4 4.4 0 0 1-.9 1.53c-.38.42-.85.75-1.4.98-.54.24-1.4.37-1.8.37-.43 0-1.27-.13-1.8-.36a4.1 4.1 0 0 1-1.4-.97 4.5 4.5 0 0 1-.92-1.52 5 5 0 0 1-.33-1.84c0-.72.1-1.4.32-2s.53-1.1.92-1.5c.4-.43.86-.75 1.4-.98a4.55 4.55 0 0 1 1.78-.34 4.7 4.7 0 0 1 1.8.34c.54.23 1 .55 1.4.97q.57.63.9 1.5c.23.6.35 1.3.35 2zm-2.2 0c0-.92-.2-1.7-.6-2.22-.38-.54-.94-.8-1.64-.8-.72 0-1.27.26-1.67.8s-.58 1.3-.58 2.22c0 .93.2 1.56.6 2.1.38.54.94.8 1.64.8s1.25-.26 1.65-.8c.4-.55.6-1.17.6-2.1m6.97 4.7c-3.5.02-3.5-2.8-3.5-3.27L113.57.92l2.15-.34v10c0 .25 0 1.87 1.37 1.88v1.8zm3.77 0h-2.15v-9.2l2.15-.33v9.54zM119.8 3.74c.7 0 1.3-.58 1.3-1.3 0-.7-.58-1.3-1.3-1.3-.73 0-1.3.6-1.3 1.3 0 .72.58 1.3 1.3 1.3m6.43 1c.7 0 1.3.1 1.78.27.5.18.88.42 1.17.73.28.3.5.74.6 1.18.13.46.2.95.2 1.5v5.47a25 25 0 0 1-1.5.25q-1.005.15-2.25.15a6.8 6.8 0 0 1-1.52-.16 3.2 3.2 0 0 1-1.18-.5 2.46 2.46 0 0 1-.76-.9c-.18-.37-.27-.9-.27-1.44 0-.52.1-.85.3-1.2.2-.37.48-.67.83-.9a3.6 3.6 0 0 1 1.23-.5 7 7 0 0 1 2.2-.1l.83.16V8.4c0-.25-.03-.48-.1-.7a1.5 1.5 0 0 0-.3-.58c-.15-.18-.34-.3-.58-.4a2.5 2.5 0 0 0-.92-.17c-.5 0-.94.06-1.35.13-.4.08-.75.16-1 .25l-.27-1.74c.27-.1.67-.18 1.2-.28a9.3 9.3 0 0 1 1.65-.14zm.18 7.74c.66 0 1.15-.04 1.5-.1V10.2a5.1 5.1 0 0 0-2-.1c-.23.03-.45.1-.64.2a1.17 1.17 0 0 0-.47.38c-.13.17-.18.26-.18.52 0 .5.17.8.5.98.32.2.74.3 1.3.3zM84.1 4.8c.72 0 1.3.08 1.8.26.48.17.87.42 1.15.73.3.3.5.72.6 1.17.14.45.2.94.2 1.47v5.48a25 25 0 0 1-1.5.26c-.67.1-1.42.14-2.25.14a6.8 6.8 0 0 1-1.52-.16 3.2 3.2 0 0 1-1.18-.5 2.46 2.46 0 0 1-.76-.9c-.18-.38-.27-.9-.27-1.44 0-.53.1-.86.3-1.22s.5-.65.84-.88a3.6 3.6 0 0 1 1.24-.5 7 7 0 0 1 2.2-.1q.39.045.84.15v-.35c0-.24-.03-.48-.1-.7a1.5 1.5 0 0 0-.3-.58c-.15-.17-.34-.3-.58-.4a2.5 2.5 0 0 0-.9-.15c-.5 0-.96.05-1.37.12-.4.07-.75.15-1 .24l-.26-1.75c.27-.08.67-.17 1.18-.26a9 9 0 0 1 1.66-.15zm.2 7.73c.65 0 1.14-.04 1.48-.1v-2.17a5.1 5.1 0 0 0-1.98-.1c-.24.03-.46.1-.65.18a1.17 1.17 0 0 0-.47.4c-.12.17-.17.26-.17.52 0 .5.18.8.5.98.32.2.75.3 1.3.3zm8.68 1.74c-3.5 0-3.5-2.82-3.5-3.28L89.45.92 91.6.6v10c0 .25 0 1.87 1.38 1.88v1.8z'/%3E%3Cpath fill='%25231D3657' d='M5.03 11.03c0 .7-.26 1.24-.76 1.64q-.75.6-2.1.6c-.88 0-1.6-.14-2.17-.42v-1.2c.36.16.74.3 1.14.38.4.1.78.15 1.13.15.5 0 .88-.1 1.12-.3a.94.94 0 0 0 .35-.77.98.98 0 0 0-.33-.74c-.22-.2-.68-.44-1.37-.72-.72-.3-1.22-.62-1.52-1C.23 8.27.1 7.82.1 7.3c0-.65.22-1.17.7-1.55.46-.37 1.08-.56 1.86-.56.76 0 1.5.16 2.25.48l-.4 1.05c-.7-.3-1.32-.44-1.87-.44-.4 0-.73.08-.94.26a.9.9 0 0 0-.33.72c0 .2.04.38.12.52.08.15.22.3.42.4.2.14.55.3 1.06.52.58.24 1 .47 1.27.67s.47.44.6.7c.12.26.18.57.18.92zM9 13.27c-.92 0-1.64-.27-2.16-.8-.52-.55-.78-1.3-.78-2.24 0-.97.24-1.73.72-2.3.5-.54 1.15-.82 2-.82.78 0 1.4.25 1.85.72.46.48.7 1.14.7 1.97v.67H7.35c0 .58.17 1.02.46 1.33.3.3.7.47 1.24.47.36 0 .68-.04.98-.1a5 5 0 0 0 .98-.33v1.02a3.9 3.9 0 0 1-.94.32 5.7 5.7 0 0 1-1.08.1zm-.22-5.2c-.4 0-.73.12-.97.38s-.37.62-.42 1.1h2.7c0-.48-.13-.85-.36-1.1-.23-.26-.54-.38-.94-.38zm7.7 5.1-.26-.84h-.05c-.28.36-.57.6-.86.74-.28.13-.65.2-1.1.2-.6 0-1.05-.16-1.38-.48-.32-.32-.5-.77-.5-1.34 0-.62.24-1.08.7-1.4.45-.3 1.14-.47 2.07-.5l1.02-.03V9.2c0-.37-.1-.65-.27-.84-.17-.2-.45-.28-.82-.28-.3 0-.6.04-.88.13a7 7 0 0 0-.8.33l-.4-.9a4.4 4.4 0 0 1 1.05-.4 5 5 0 0 1 1.08-.12c.76 0 1.33.18 1.7.5q.6.495.6 1.56v4h-.9zm-1.9-.87c.47 0 .83-.13 1.1-.38.3-.26.43-.62.43-1.08v-.52l-.76.03c-.6.03-1.02.13-1.3.3s-.4.45-.4.82c0 .26.08.47.24.6.16.16.4.23.7.23zm7.57-5.2c.25 0 .46.03.62.06l-.12 1.18a2.4 2.4 0 0 0-.56-.06c-.5 0-.92.16-1.24.5-.3.32-.47.75-.47 1.27v3.1h-1.27V7.23h1l.16 1.05h.05c.2-.36.45-.64.77-.85a1.83 1.83 0 0 1 1.02-.3zm4.12 6.17c-.9 0-1.58-.27-2.05-.8-.47-.52-.7-1.27-.7-2.25 0-1 .24-1.77.73-2.3.5-.54 1.2-.8 2.12-.8.63 0 1.2.1 1.7.34l-.4 1c-.52-.2-.96-.3-1.3-.3-1.04 0-1.55.68-1.55 2.05 0 .67.13 1.17.38 1.5.26.34.64.5 1.13.5a3.23 3.23 0 0 0 1.6-.4v1.1a2.5 2.5 0 0 1-.73.28 4.4 4.4 0 0 1-.93.08m8.28-.1h-1.27V9.5c0-.45-.1-.8-.28-1.02-.18-.23-.47-.34-.88-.34-.53 0-.9.16-1.16.48-.25.3-.38.85-.38 1.6v2.94h-1.26V4.8h1.26v2.12c0 .34-.02.7-.06 1.1h.08a1.76 1.76 0 0 1 .72-.67c.3-.16.66-.24 1.07-.24 1.43 0 2.15.74 2.15 2.2v3.86zM42.2 7.1c.74 0 1.32.28 1.73.82.4.53.62 1.3.62 2.26 0 .97-.2 1.73-.63 2.27-.42.54-1 .82-1.75.82s-1.33-.27-1.75-.8h-.08l-.23.7h-.94V4.8h1.26v2l-.02.64-.03.56h.05c.4-.6 1-.9 1.78-.9zm-.33 1.04c-.5 0-.88.15-1.1.45s-.34.8-.35 1.5v.08c0 .72.12 1.24.35 1.57.23.32.6.48 1.12.48.44 0 .78-.17 1-.53.24-.35.36-.87.36-1.53 0-1.35-.47-2.03-1.4-2.03zm3.24-.92h1.4l1.2 3.37c.18.47.3.92.36 1.34h.04l.18-.72 1.37-4H51l-2.53 6.73c-.46 1.23-1.23 1.85-2.3 1.85-.3 0-.56-.03-.83-.1v-1c.2.05.4.08.65.08.6 0 1.03-.36 1.28-1.06l.22-.56-2.4-5.94z'/%3E%3C/g%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100%;display:block;height:100%;margin-left:auto;margin-right:5px;overflow:hidden;text-indent:-9000px;width:110px}html[data-theme=dark] .algolia-docsearch-footer,html[data-theme=dark] .algolia-docsearch-suggestion--category-header,html[data-theme=dark] .algolia-docsearch-suggestion--wrapper{background:var(--ifm-background-color)!important;color:var(--ifm-font-color-base)!important}html[data-theme=dark] .algolia-docsearch-suggestion--title{color:var(--ifm-font-color-base)!important}html[data-theme=dark] .ds-cursor .algolia-docsearch-suggestion--wrapper{background:var(--ifm-background-surface-color)!important}mark{background-color:#add8e6}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.iconExternalLink_nPIU{margin-left:.3rem}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.heroBanner_qdFl{overflow:hidden;padding:4rem 0;position:relative;text-align:center}.buttons_AeoN,.mdxPageWrapper_j9I6{justify-content:center}.buttons_AeoN,.features_xdhU{align-items:center;display:flex}.features_xdhU{padding:2rem 0;width:100%}.featureSvg__8YW{height:200px;width:200px}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.img_ev3q{height:auto}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{display:inline-block;height:1.6em;width:1.6em;fill:var(--ifm-alert-foreground-color)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}@media (min-width:601px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{left:inherit!important;right:0!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete .ds-dropdown-menu{background:#0000;border:none;border-radius:4px;height:auto;margin:6px 0 0;max-width:600px;min-width:500px;padding:0;position:relative;text-align:left;top:-6px;z-index:999}}@media (min-width:768px){.algolia-docsearch-suggestion{border-bottom-color:#7671df}.algolia-docsearch-suggestion--subcategory-column{border-right-color:#7671df;color:#4e4726}}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media screen and (max-width:966px){.heroBanner_qdFl{padding:2rem}}@media (max-width:600px){.algolia-autocomplete .ds-dropdown-menu{display:block;left:auto!important;max-height:calc(100% - 5rem);max-width:calc(100% - 2rem);position:fixed!important;right:1rem!important;top:50px!important;width:600px;z-index:100}.algolia-autocomplete .ds-dropdown-menu:before{right:6rem}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/images/Azure_AD_Tenant_ID-755966905d34f909de14009536374173.png b/pr-preview/pr-1594/assets/images/Azure_AD_Tenant_ID-755966905d34f909de14009536374173.png deleted file mode 100644 index c962a3a77b699260fe097ff59b57eac16badc864..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64992 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

oILIdB;)&Cl~`B)7pdmS^*2tp>Z-41D5#p5v9 zdV|ws{$OYwhWe4!xW@qMh~Q$$Xxf;xBy^{6omu@2M2%p zBRZ&D}Z| z_4sWVM+5uEvS&h*#&>3K^^M%UR--zIgNllM3x>Fb-1A<3%h3vxTR8SUy{7D?hIaI7 z%4-p~Rxg|X&@_#_H+``n`CW|2qD_M}JPZ{DO_50d=6shWIA$eud{ZN|Su~P#zahhG z1!cEJ<8e4a=au#7E$U*WvyLALGu3cfs0dpB#c|7mGM5i=< zAg|GFK@%NV z4VrdCkFjj1oq$6tEd0ya(22-LGNENLDZJ{x4>s`$+J3H%>xQ82&efMK)B>ObbZhF1 z8s=Ek9D#%W^Ict;-|TN_acZGXpZ-(}H_n6Fze$b(FPR~-hPRt}jh`;9oOTyVjMKO( z41aSaC2ED)zEP7q+V5t7?xBN5R7T~y)r}4K36b+pU=C}apN5%vzkhw8{&n&MNu)Al zJxxMu6G>(fkH%|}@rBasVaDRl-<=5WdPk<^)+p(lRe=|F>HNrbzrLzu2%+HFU&(5@ zcRjcC_`hg->!_;RwhK@Nq`MJmrMnyH?vj))De0C*x?4h0frCgLx=RtHOBzJFyXHRn zzJA}DS!>psSu=k=K0nSc?z*mh?Y%ERq2*y5rLy?+Y$4jOrpFa|Zw!tByOXDuT$uk+pVKu9Mk~Pk{gp8*r ztLxh8WsI0jHB1P!rzS#qxE2~%H3wigZ=*nX|sf-~TVPLVx+_JSRSvk^e^QyRh{BC>!$y#@S816AjH(5{7 zliY}^!#EQHMjO)lAG@kAt<_->mHktCmcIuUEPX5ROZ~;PG4`Uz&1>$7MWEH!TE`e| zdk0kmz*!dub`po+oC0i+CEbc_DF8D%EI`!?G@4sl`ffNHW49!1RY2}``D;D&|B~r_ zGE}7F@#|%p57u|OZoT`YCDvaJqK+%zZNWm`Kgft4<;!n7ZcSI?4_Jr(KtP;UxyUXG zH&&*S+qx1@FX-8=4+;m*<9G}koH3Vg!<(0|0quwLC;;bZo~594ICnd_+2CVgPwvO{92oNk_n>*?-=hDy2Z$qFX@ytU;7gZmX%f-Q!8}e zJNlcV5PwZ%D5d5rphI}`h^%^6b)*!^V$?A4Me2Au1kKD?*3`2Ii^e*fY~ClYu93?r zK+SuK#SkpzurPI(w**=9(}m%&Ib!s(!Be|UXCH;^3ZO^dlcW}XkGU5x$b{ev#Ajvf zF$_{ifXsL|ceBT(4qOvw4F8A8m=!(F4%F~ve4o$)1jMK*A8!ibA$d7DdL||V;Jl$c)P!80n1~ZHHad!>tfHddY@OiFg1VV? zd&(NG0*bplsZr_8%|gG+fU4TC?zPSISV;tMtYFysS*&Dd{sfpxWd3aQ(s&aU8=HDn zfJBOphL+9iG1L=9h_$-Ezp-*O2Lva|*$069A+D%tzLq^xEfY)B`eq%a?4v%_U#PsqrpI-L??xB+jc52qDVw%3`@zSOC$ zFK{#>(r5abj<4^GtEoy3B$2JMgXQkWhnXZ?VS^k>>3nizs~?NlyFD65pmQbj}X_IVKqI(i-d1|1>} zJ*Elg-wp^Wf7L(3@v^(O!w>s23Rq;o!lu?`Lpg*}2voaUeP_Nfrm|U(S(x{^Giu-nOi}VQQHH0tk_f3s>h%J zaF&{4%;U6_Cqp^>r1|+!tzG@i(xil|VWWGA()Q%fmk`MAlpppz*X|^(eOlKMNi(qx z0H4SP|C}k?zi)yHj!`*R7&Qm0pEzPsA3hYRg!7e;OYe&K$ir)$4~`bGX|Z-OH$V&i zYOZaN^jtX}UccTUaOq=d>05^eziXZvbSh`pmJ-BAnB-ThlB8OZj1&|PydQr;+gui- zM%!Im-os!v=NL9ceVe8(AVoT0qGEl<%|g zirT~ePxY2Rrz-SoZ7m#>F>vydGf&{E2pL%Pn0G-gDeQgn6C|*~Q{9_9X1}r_hK+#5 z>jxsB=zsu47X!#?Jv?UzvQ$Mi?K%kv;!(sSe!tQcf9evr$M$D59TA_y6HIIOpHSc z9@)jqD_#z4)5==-{g{mlzJRnB-3ajy%tw;)H;=I=$@sW)@=0h{fBIOz z(s7qj)3NNk5+Ei#>RdhfsDZNpBqm@{GH_Fr^cw2wJ3FYRnEwme%&5**0V2js5qh4T_Wg|6`iWoK6)Qoifk;4q z!sGf4P%Xx#gB&1`ADpYbu?h9F8&It2R(pMCXZG&tceo3QukM-~`Zs=$P$M}m)F7M8 zOm_bLcvA2BA4b~E)m6wl8@BnQKco5r^d+6~ih!s2!;Ju+kfj1JBeAiU`PKoyV>nlo zm5xsA0R#4YaB{@Q7Xk5Gf3myjW?0;T8GL1N=~A*L_T@M4?MF)(m|f@hzcj`19;fQL=8FjE8t9bIaA zeHIw}3-l5HP-t-PB*5rL{@*zCfAAGhRQ!iT{|6#`^uMrZu!Yb9syfbi z)_;nFFl7M$zj6qe-I+kt`=2@+peHB+mFXWnlDeZRcnCmq|5K#=$O{B3Nx}bcdjS6q zfWQ5tm)$}K1=lt3w|{=+6zq34Z~jv)jrRtB^8es=eO8rFAcBjE0zwvoQ%RtngUh+| zN=it$1G6a%B9*k1-_~|3!7eJ=w)u03=kvU&O0GyuY%HYyE0%bK{g#Teuyw3aFTu1i%r-F5?hF>HJft`UByYNvJ&-aLv-nt%H&*NV)JtxYD zk&MruOLxk|kp^~s64nFS$xk|JY7a}sJ`hHY*d1;J5Z^S)PLKdi*1=AN78*jnv8xNV zHRLM8q4VPK=qQnG7SSVqa#>pD3E}K=qpFFaquvu7YXbWl053$_fcX_A<-Ix>-IJMK z9?kf(U%gb>IiI6(lfs}<-9WnBFqxENvQWedsmXOO#MweHrYBHmEQ>HqTH%KRe-&>Y+ImzI`bgla*Fb~G?SAyX#~ki3nL8nh$P1=6vqC0T=a871L; z-N8Z-t14)J+l|8%n)lT280X%)jP;V(EY*$42I~~j!YT!2R#wlN^D7SF|eb0)Dpbi z*3=5f6F; z%+29Zq@E=(GrYReRhTB)fTmoX+#$CF5B2o9-Fjr?X&C^fo!{k=1#-c)lUk*58xKZv z=0Y=3(eK#1TmRlAz!}xRDbu!%|L?5qGL7OXYyk;rU^`*{rDuvKQiYL>U7aqHF{k}( zO|KnrqD0`aI(vQj4#QXo;M~54RFli{JUGC^YMGJG-9c5Af~2qEv?@G-IxJVj?Nfqg z@!5C@%v~}_|Fh>ImEjFg6kwB|uk?HfMP0UU-xXV1S4hLUTsvG%PR4_hIQ1`eJr(?Q zs!Wj~EK0`$jROQnpxOqnu%5x$$_KA9YwkY2^abQ;PfS1z@Cz;+=OG`9?B{?*5t>x5 zlHb3ryLGPZYP#CZ!i;@>FTJ=(z=6v}j>J}iN7TWa3cfzizakU%wdU}daI%*|kMuww zl>Y_4r1x&I__Ps_`~Yp)zRlj{=A!D$7mh+8#UZW<_iT5XU4rDVJIj_pf7A`<3QGXr z5e+9TB};siaL4sX{2#r)sn_C8h(z7SC4ib6Andgx}H$~ zzN~f9U>6k` z`NhqGu+P=)&-0mTwxmn{zRy)WH0Ef~rpjR1V5>MxtJ0@*T;_bM=Zoy6ni^tnO^9AW zO)qM%A-lIe=U8!vLJm7bPq?f2AP*oGC#4B=NN(UjA#sCx9tJhkZ5}BWluK))C<*oz z)r9Oi$7+i^0L>(DHR&dT+_T^UH;Ljn#2h%@eL(SEOGAiuiM}r{XR>GH?$^QdrHQ5OSp$NWKo3SHTc zfyEhByJB3_xW;d8(j$_QWe>POA^n6p!zCOXtnt3S@QPP)asj+?Dr)Mbs*Wm7VC;)i zh8zz_1)dvrKYwDK9UXN-6E_Kqpylgh1wOp}Z177=o%t_FJb4ZjTJ5gw=jZJ{K$kv$ zz{_ya1(q7XViJk2huftWtwKQR3KStqEj0=EHa95=t(BaY^_*fD$nnC>S--a>ciGG} zn1y$5;}On+bV-iOQcq9sHP{!XK!md`=dWGHPcHioU^Nupm5*ZaWsquwQKMix(cVtJ$-Ob6ckm$fPa!a)z zJ8vX11|K0aD0Es!fBB$Nn2BAgN#Aph{wsE(d~Qljgc!j>gwuF zbIRF#4@(rHrFtxUvdidSoYcD7343IyYV@qPf4AeP2LxI!5!sPMj&BuuA74N+vBX{Z zcKIQvay=5A$FJ@;bLr29!-FXsZ8PK44IYWu!{85aT!m31Rf_XGiHM6^Z1I@_ITHxN z%d;sx9~>+ItY!1p7K(BA^@X$KLZjE%+}w3HvLnp`NLcp5Eq-1k_vuS2=LijejNx)T z%qrL=p9Sa{7-u>Q4EHw!g$P-6U;T{W0W{!@dmj6(FBS@2gKhHi&j7_UjmaqF0uhr; zR=%5@-$3H#Ua@mL{hN$cNIi;9cCHh4za7Kj{(I@zo^1Mz8<^+`gxl;kZi&JEIV zxWC_NLDbcp34-_yXKVB?p4ItywrrebiV+b$f+{=rn(orY@#)j7k_g+51Dbe|RAN%1 zYD+2!RpIOekPb`gD4O-w&QG}Y9IYSKdhA=$lEA6iBzdzjL@V5lBaTX_?=Lh2qh#Z~ z+wS3LL8%Hn@9N~RxbG{#;WxSQ#P0nVWZHjUA>+OLSoXQxBhQ4?u;hb>I)rIC!mTeb zMrmS0eI2c1o)Ds;f1)-feH6F)=A;x+S+*S8Saf{PGitmH3*qjnjO9beF4$lA=GGDB zpw7Y5q8a;jmPCTj@Jc3|yaW3dxiAM~6HbTN**{y!m z#N~kfL5Gqi07x>RSWB-ti|0UKu1UjYZBRVy^0EDcmPXk%`B-AO;t$GJ5=pp-l|rkt23aQyl4jxrdrV)WK8_If{k zq~Pj&dt=uRW`lFW)cPYo8+h^TdYoRRim46{p|rkc8owVA zp?6>46Dr-4t!E$FFN6g@2LzZ)!sB5ZFY8SkUO0DSV#1sUdlamu8tg?WJD%uy?5|bHtv;1s4SkT>? z)eSPY{%i7dyHZtW??>x<&pLp+@s2zy?w1$pdluK=u}`MnnfB^Aa5%(DNOUItMtibn z*zE&tihIgQV!Sb&6`m;{=h&za&=`P3vnnn%24qxyu}@Q2j0T{eRSHE&Rl=+KV-((!H&j~PATKymwDNlO%u?T^K8V@Nf7+)?W<>0`H=G(V#T`Q$t)UTcR_Ce(l3gsJ&iHjo) zmHgPvbc41u83!Mc?0<(zE>h@d5UKTqF`tINv?9`h8CX-xzPozaQiOj*-y6`SEG9BN z{Gq*HsW9-R9Nh1GoVPDmY{2KK$4Lhzx^#O zBSRfM7##GdN^O*~nudUfWgLxy=zZJG3J{dRsxHv3_D>Fx!|E&^$Nvp3lsgV+k^<7;QIJ90PRGxP}!VHc``4Tb1NU z#(ENq3uh_{;w(I)vLxS&c94H#85Ub5PuiWh-~`CYayaF6lJyZwx((C9YTY%Au1A<$1Xrl zK}~jQ=nM1q#8W3(fU}sccVzv_6e1}pE_D*45HRsrflf}@-(SR3^;wJS<_FIhxt5|H zNV=#aC<{vMq+lf zEc+47)`|Fl(>UqVr`=0*SAG@C8N*LTNz1Lr3E5+#XfR7AV}r5C!YCqs>3o9kS3-4FZud0CzHXDv@5qul6r4=yH#_ z1mCQVZiQuZu!HO^GA^zU^PzmuZl<7za^s#cnOc4yb7??ZE3jR_!*>WS32BH{D7y}p zXrt*JV#GtPcgS9&8_f}JqE+$c6cF;4QMFVokcoNYJoB8G5Q5qSFQo6wao8w=8`-%6oOy)2<|UkHhngeq=f^ zUH0|ofu5zT0@c@MyPW8YrN5l|52zhJ+vTow+l?o55>V=!xny-|%?10< zt7WwQe2_3wQ?LHyU;mAPm8el7RON1+f(&LO+1MLb*LH7U35QWO!pqY0DJDe~!p<8M zEG3cqn@-o!Myj$CR09iTszRyhQJTMfNB5GJmVA|(mXRUVip$Hw-4nR@i7upzZWuUATsiqA)i8LNZ^V#-eQs#_|{p>4bYAP~05^5TkvECT< z=fw(9iP5C&q^-0^c=Pdi2w~Rzf~>g6-N8mwWRct+LqHvn%%ptoKC7 z%$iAOV$g4}6-t*wP))?eGU`;Um@~ebwFmrpcBk`&&84@N#)b0#bQt=MRej3v(}~h@ z6`@PH_VmTkef_b3$Rce30>G9C>;>O!ed=!+pIOz_mog^lbR~fJ9gU!Onn{08TB91GU zqtX#b2yO5X5Gtw2gui|rd@XW|9HRzYm_)gr!HO2;QI|5|yt3B4;S~)Zp1T4U*zWG` z?Ck8WaLfre!ExdDiZmdmw+gU4-~1TY-zttNyR||0FL19vHJvE%U_6NbUqAQ%Z?|HLbMEPu1T_izPbEb~&mzEL z^xqf9F;)KevD5pYv-Nh@o3!MWFRS&)V9~#%srUcsnlUIFXcZGhlp;S-q+kW6OqlK< zbj8%{Y-hH??N}PX8P34j54h^=^XKb@eobj$2ubaJ-OK%YTD5-ytTf5N?@xFS+`!SB z=o}gr*4PLI5c%f8vIOwijCdFG&e`4Q?Dt65>GmY(3Im*cvPfbcA9{ItSq*19JEiZh z)%+gXoijb$+SZ7 znZv#REtc5e^&ZaXY*o6m{e1I?fyH0@J?5G>7Rsvv9zzNdSft2-WjeR(y(zi5#-IyP zVz!Xw30wNJ~=|~oJ>se<%`6<7r&)pdu=6`NEZYqDrE@CaRt45 zT}3sL_-l1HCYzd?3M)1;lB3UovV!>U5|LFX4Aq7V+8BU6BkY*sGuWlsL6IlX85H;{ z^cuu#l-`B6E@^f`fqO-5<4_<{QzMjul)znu%j+F&2dEHc0pH2DfTy7QzW&_H!~lS+ zI9~E&fUNPoN?+D4?C<&=#j(jxVRRuOd}KFSE=^QS^AmhOaz{t_y`QZW+GS}hFQc98 z?JL+I{SinsrRC*#y`k{BKNtMUllW3)6WQN~!$`BFapgrNiI|MMFpx;&U3F#E@BkJxl z1RfM7Cg+ot`rkI7vMpS^tBse<<$Zg}rO~{p___KscE+C^neGMuc>8)Gl1x3v4!c(* z5>*Z%6y!%<1$JM!s|4=*mb^Y^h%}Lf*r;cNSlb9b-vstgU% zsT|5Z<}eHUQxJ~nDUK-%%)4Ul`?s!TH+nuuE@P2Yd2^>dm#Y@ub9&2gwWX8Y;WUnaIYE6?Bd0QFgaG%=6q1glYU zO3R(o;apm=`cxM8M$ZmJ zJI8U1Kc6`?-}&XEgv+8&u@JfSi7n|049nVix4Fy- zMhy*(wL`MK@Ot~18#bYv_B+38*UGlwz;Y)e?^``F+5Yb@Id`OTTiy!-hUEf$#=B_G zLhZ7tO8siD)iB^Ga&6QKm=*}DnSwsg*WlUvt#-GxjzHsqWR?0{hK$5-bpKpwTWLGbiiT9k?l_Jy}3#*=~oi9 zkoFe%T4x)2ysKX?c?e@cjJ^h^^(cq6b}vHl`=QtSiFk>+#p-sp6SJSkzc@6hI|w;` zO;TWc*2dV%Su(djU#-9;vA$;B^-;2m5YPJV=gdWNiN{RivmK*Skaq&(0PMqjk9{V+ z-*m&o(p=6rx+CSF^8>%zkz`M`RygKUJTmb1Yiy3O)>JM=b&~R*t*ZWX}2w)!tBJW5;fA|NiNB-+uGsr<)1ENKX_8j6%V*mQ@Jsm6H9I z2bRW{Zw={S2%k1r@46THHc;ElW|UtTSPZvIKO_`@0-LYVp7^rx<>j$r#VhB);PhAW z$jHN=ZKf&_%8eRKdyXt(k2fA0oK9^;E4UuO(E_;C=U0u83Q@uu^Q(7baS;i$vc7ku z#8gfbi~HGA#1%v3Yh6#mLVmis%@hNS>@$6E7Bw*;DUSAY`)`ArV=RWvc@timCd*lt zU_tCr9oN*1!(E@T=&#gxPeg*DiD-DNF$xQ);!_{RM8&7RIA&+b*Wa&3F|+2%1aQ`K zT3XOVpi6h$w)Piuy3e&X(ppJ#^B(%E>$AOt=%t^l^UVMK&SGu7Yh zkBiYAzs9HYxm?vmpSV_0F_GbGogWED{MbriR0T0kXv(CW0mv{wU_!8LCL{bRxVE;| zi2+YtX!_$mtkT=-{(?SXCwW6|toM|LMfp&d1Qt`qo1ShAOC_)v9ekXE zIxIG>gKa)%z6opS`*$~^I`h4qjBjboZgUMSjg1c7*ui87>|Oq1Ijw1|89Xczb)nZV!u2|KPF?;Rt<*Hh{kH7%`Y!*zh3MfnYQB{HCx1z}z#TEHS^ScXB#3|IC< z$8J46{QA`H;Uo(J>~rZc!vdqntC1AlE9u*XCC(Y4gM*4P;a=ewdybyf_^@ka&0v8> z-T%b-e0002g$b_SRZW4gJg}b-~Yq*_C&vzNke>VYEy8Ko3hOOxRZ= zqhdPzOtyc;{0mpJ7hJ?)7rAI5F(dy?ApQpZ;{UH={;r!|x08}g5jlMO+~n17utWJLY^#$~u&TxWn-+Ct_qr97ZVh7^-Cp|NBGLYoR zX=-Xp^#l|FgYtJ#F@D2A*i_;F&A!6;V;IY!N1~3F<4U}v_s6|a!$D&rsPflLY^Osi z>*&L4V=5xCadBy_3jktiHJm$VBBFfrKd*7g4}nnHM}_ zwm}iDf5{Ah&3TPdecdVdM2DoNl#Jp;Mb7!ynhMqU)7chQ0aRg7ikh9(JExWbsWTT~Y#kgNoG%KD3jE8+Oe|O5 ze5<^>dntGS<7Dr}JKX&e$8U5JiUn`jEDfBis?yzi|y1BS35zEw3``eLerBK|B0gojow=1pBugFz}-40EVdv(jpj$lzRWo zVJScY!j9Y%;H67ZJa(DlY{9Tm!$EH;qb*U3*ozO4Qa?aS-&y#M5xBKwDym4@pQ41}SPg_t+}{Q28ZGU(sf0vx3;YE*P#D6yFQ!;z^% z*&%(LWM-K8M2QEh4k6*@_LZ9*rP}CJ^4c2U0Q;WXtAto7=I;5gMd*crb5mqtLESq> z`grNiZw)Z#KRtJRYGd&)O9uI5jBoPo=4tXUq(nA1C!;8msL)1MTd)pjzDH+$s3i)zUI-=f*0N z!|vA@K`dyg_*xN-3gm)L9epz9wPtNxuEKVXFUH{GfA(6ZJnbP|o zewj$r7I4Sq5Qy{u$mP~SY8S~E$HdGWT1fn@1W;92Syf#5Xe9q<*;Lg<6Zco z_I>?*v0nYqY!78fjpx4|hdrXW*`U@!;nesR-(dUuNp-Fb17n3Di@5AJaHs!(AqYPh zQlh{m_oo33sSckq*j{L;zSg*?3NGJ>O z!C~a1Vkim$+Anu3Cy)8vdW>*>ApTeKE8{Vs7XAMR{jtyQx;o4KfBo) zH4O2K6443Z_PYB4Tm1DS*crfNW5AfoN-k`RSG;+4wkH!?SX|6wdl(TBQD-kA>hjCA zg}$t;tnK&sVP7b!60O8T0e9;~fWDRKRM=|DEg;tFF+W0IgpCjCr>^j_`{8@FM(xGc zTJ5W;cUY!be~t~gRT5rzw3A=$fwyJa6+4zwwa013=9ZQ`zK5V-2T0&;V3AP11D$wr z$jKcAzJn?_g(c|Zh|b#O^94W#A2pswITi4PgZMykJ}SE2zU=P1V={!>7uwi*O#{xy zr+?n$wE>_{V=n^=Nsaxnmy>EdSAAVw9Tcitg=7k{3B@&JGn+gP8?H=1!|@s{f60k> z$0nA5R>ql{{~?R&Yq9!ANuukG+J!9JlX`1X_m1Cc&rxhlcfnEpoPZ_-%a2R+w(yNR zA$>7`*$WuyM9KtNfmWA0$u- zp9?ZLi@UzEonGzfcX#*nQ2ByxO$osO!vGXIHvisk;OdPF~-1$i$RWbZ|$7v`9rOU?9=KOXOs8f1@6&Mj0 z8F_Lhf{E=7>c{0~pp+QlI@eGwaqTV}d;w6J+I;A0g@PUq)MWIuN|{L5dX47nZ?N82fR{T4wCTs_H!sT7TKRh?Sw>-7 zGYt}8oC%FKZ>Uj()HrNC_9Yk8-qZ`YKmYV}jvF6;lI1C72$-h3CMK&v{;zf0{D*d4 zs#XFA9ni-%;^pV4iwn0q0Z}TYY`XNUExZZTxucfy%Uv=xuA%w5ash;II0LN z6DjSZ)Mq0Dsv#cxZzR6JRAZO-2b^sCYR47(}*jl{TAMUN=;(| zO*X+T(sx-|*?7jU-N>sZB3Hp$vRso;tjl%6_n-kn&r}Md&MW#IQZMbuY#@VFz=OM% z0rVez_*D{a+d`yoynWNNHURz}8^5}qa^1;uWfl~~xKKv2sY@S&nljj8wtae;V^~XF zDextmn`Tt8>a+9d?ifr?2b>N=!o|p%hjOHDK)JCmmiT=}hSy zF#~w7@gVmpc_VdrCK7jW<8=%GKnZd26JwK~x~q+@n^cJa65`|GIRla#!?ruyh31CH z@{=|aPL^POcz**ZmSrgVz<0k5e(>2!Ku(5Mp#D)gr~LB5tjNyqzC~|}PX&qcJ3%$E zPKur&Z^5VCBo1~r1-drlUU?jwSRmN#*7bDLaqfJyX6He2HTp$cysV zvR)ZHu1ETbiHf_*2q;&I?ArMqwPPTgMd7M6E~|5>xNBvmSM#WPZ5PnPEUC%nckM$cHs-dq=yKuI+m5nY60;4b z+Ei|pBT%nGyO~L$%x6H$-QC^It@d4!sy}BeO&}WRGNn{rrS@{uF(CrzbuNC`(T3EB zaLvqcAOB)N?0svel%6N2RO`NpL|K@h{vBFp1%jxBZ=ws|FURJyMHdF{R(H$U*)Pj( zjs0s*kc$I!FS#fyKT%$ePfn5vZyf@7{(N&DR=Y+5+rscUJrN~J<~vw!%q~6uc7L^Z zv(2E)a#LN&zqM8Yw1bK10x!ybergr?G1o}ta!2o|1Qe_dl=Sd(7tK5(*;o`y$asF= z1_OL|YqZEkb3Dr<2e4?PoJ*0}31M-HP2D*9g~+S7qqTR-^`8tKGV2|OC;&(hIup%U z_MvxK?bp7a>3x^rndng8393I?w#Juby__G+rBl0wU%WX7hKKJ@lHwfaQATpL^!2xQ zns=7F!WGh(&d$#z6hV)RPTbx&{U%E#0C#HhYIBdu#`*3n*0X|OF))kQ!PCpj@bL6K zsNNP71Q)t=bi4qYS0;}e%CFYpx};PDSTL7KS=-UU?e6{+BP8I)Y}aeutPEgCU)Zvo z=UL01UX`zH|0s71N_sx8lAC)&!amg6aEnpsHj{C)8k+4xe|pdD297weN=UL1;)0^x z_ANbL-QV>`MEv-n>Kkg;(F)RykRo{nh0(DwY@eO@KGpoATk{7C@S5OQd8$ zha)n=CsFOSZy&5JZEjwQ%qi;;{P}#^<2eEd)#{Ctyo*ll9^$gw?Lxh^ob_LnT;;NU zt8WZ`g&xh0AvCISeNecY;j9L*b9y<-$f#DOD?q{<1KRwlvOy16P;6mu@xRq0nyNCB z>G=t^H(1Sa8FW<{JUSC`?1W;mF5Cd^QasE79}s!+O+GkBPviZ00t{;g2F<3QpYE6I z<)=v4-omxwitFM2Vh0@l^>;R}c2t}z?XorGi_+UXyzW**NlgskFpDyVXlZERZE1Q< zg878~U>+GjmiCSf0-e@P!1>||N+Wtd7W^{-*#ozi`+hen>}_zDFAW3&ad&kUyXsL^ z1})l@7TiZyVA)xO+Xxje4b@(?6&=0_(4lGWy$E&kB>L)K%Gr7DhTT%mV z?}wi$1Y5o0c&`P%DBf@IdFdas(C|XW>kB&0z{CgCJM}Mn^E*Pq!p1G$p zVzy`%0KFMsva)Jht9Wr~YTI96fOxhaPH))gS|!jt(^?ch~#qyG!zuc6;MK#!t4TdQ9zKd)$?Pfc);%4^J(`_zVJwx`)_cZ#cSuvsznyBQOS%AT%8OvEb+L*;9=QW(g`v2; zu-uEx*{H+@7X1}tB(mM> zS+F?%zzIxpU{|=kW_(iXe=ayNQZQSO`3S%%jJ;^RwcHGT`kK9yrD*dd9KNjeP@5Up z%CBNkdQgy4uNNJM~O9i_*#=}C!eUD>C zYenvxwWr`hLGT4%9fPr$oe&-MH`fvos%>rMemeVv=-_se85Z`7GsP$oO@aOysVpyF z@2bcD0)QiEgoI~X`*p1Pmj`U8K3{YJizVW_DQ>S+#Gk6NFOnuAhUWcQ0G*-Th0|%Z z6)gV<(Z&5Q1Y{}=+v<5wC{F~MNg@0+2myBmUr8(RS}M zkt3XWwXg~BrMf?W(VwOE2(}Z=H!%ug-7RC*mMGgy*#0?gGFktdW))&vbJZ>^a0gr^ zjn=l_d^y|FvLgfslHP-VR|J;+oG%01?qtYBeWifV&sizzkaz+(7%Bz3342U&xnixo z{;3Q(y`fzvyqkLBpPiohU+vr!?YoNTN3h%i&Nz$gzUP(<4AuR4Td9B9+R2DH@DyfIIY=?6y{)86jM0v51HSQze*yJ|zUmgAF(xbV3 zg<3oHN=cgNd9}F$tX2im!KhCRU}PrlFGRs4c%3dFvM?J8KHp?qMhvPy!c>s6oQdbu zwUt5yF}Mkst4c2dZF?fOjBms@^^%_3sB2WfUZDzq(B7c&F@$$H`g5Ztq}~|W<~eM> zSCF~M%YRR%|M~)HS&!4o_RE()Z(PMZ_{t!E;8|9sML(@gs)uQyudS>DutHaJ1jvTm zSmd}lkK?TCwswSnLgcB@U8!~%Z8UjWQqtI(8>oU`dHQVk`FMLvOMg+gMTEf~Ha)OI z*E|9oy4Q=JcpS!)lXaV1K@J?1-T}?iy{|h<;JP*K2oQ#He`R$x)Ga!Dzt7VI zV-4)bhN-?&33ayF)@$^~$wlX4@oQ0w&(4OQ8}WTh80Kre3KG{$4zEOi-)nb!pdTSg z!MEW6b6J+L;B2KQb68ZTagxxOVgWYOu}oWeSbnEoXc7@h+JQH_cpc;nvS@JJed{mX z{-~?2{sp7}waXwW>~K$IHhk03hj?gVVF7?An3%$)+I4;mRLB6g2amuV6I82k<4E~^ z!3huajB|4;T~webEUTfbi*%nM>bRH5U1nxx+P$^K4biU`Ck1(DCOcXd>$exZ~hd=q2c=1P&#Ek2H03RvEvD&qyW_%3uE;k*I*IuFP;+VZ|we zfLiL|XQS8SV1xer8W)3L1Xfq62+Jf%Y4Z8rcAqs`dv&4~?wt1utQ8h6nNbaFg*kU3>g`i@QeCcGy*cf{ajZr zoawNHJ^`T3!9j5N{jqpEumHD#7&kq3Y*^Vw!-`NqhVJsi;3%F09tmItM&Bg-A`TiN+C5%|a5SkyH!}vior{;0SS+0sW)XrEo$^ zTbqg)r*GT;gW?myUl71rkd&5^LSE%id)wXJ2%OG`Wi9~2eAdGUA7vHC#H&(V?J*vj z!hExHfi~g}I~yAt9UT^Z5pApN7;JCQW63-@$;{wHM-#VptdvuzhV6+VL?9kR_=aO< zNdzc|nVC1FQyF6=`Q(6bf^EFs>jnt3A?vtIQb?GRQib7NvVI5gWX83P1SPN`nE7lX zad-)IkFf7Mm(bf1p9AQ?4`@=~h+QmqHO2;^^Rld!_q&6Z^Ai&jsxl!}uL#1=?HN+J zAVC5~17;woq<_O4^ySMJ-=`nQ-$+En#)7~lfHL25oUX|3_S6{E&d2e%thrv9N&}~qsL05|O555-wR%)4wW87P zbeSA_ zA&bYJiHV6Tfs9tMa=*3bJq<5!{j!~Ny6FCFt)1R{%wEDCOa2nT(~MoWB1}(!O}0L7 z6EKqoB$3FMcX$4v0%TD(`N4QNZ%@?~Uq={>mirv%Wz!wexM+(s0>)h%X@C&;2;ziIQGR7BjmChaTIiR+H5>JSaN4s^?cIxZVipIs8H<)+7!g%Q15WPa`#Ede39vU{(`A!Kg zC20$(d{#$V0+x5a^+{5obQ|OQ1k&UTgl$p*V`JK>FGDfhC){+?IC?u?-@=vkqaq@z z6KwtNCCXjl>&y2+@SZ_|Ue)-q;YSJf*BBszn^;}@#aEyOatRsXYyJhd%N#Ul1l?82 zIZ$s~_Gm~+y#UHZkk5x)(aH<&dic37ypX4htqUdUHT7;JtU7Wv&AM=vD-c1?Ud2@g zDJcwmJ9Km_%YtZdBP$Q z*k2#41+*<=A6rgxnChrIogeS&purS0<7A``Vvf(N%XqH=Rt*O3A`Qz?ju~%rhh0?GrdEY)=ql0m=%>{`{UCW1x+vgpOM1ac@HbO) zG)++B@5v0CL4lE&OI)O8OA0en1lA}uXI^s%EP~$# zkc}?TbJi7g+n}=Bak=ocnWVdLYje%ZQ}wG{K6;lbZ%rB)gBNf#ft2DUtt(KfqWJYq zI`n2q9fIDUf?F7Khn=5udx-CbFSt!!qm4*oq685cMfAVH-;Z8wRE0aY)E-UHroXVY zr)5xC+fe;=D>EwpuNTQ%GN~DeEJJbw(s?7E-7umiE>zfYft%@u-AqFeMIysHAo{M( z9E^^b>yHQTu@b@J(r@JenUgBv{j`XWkAFG3x4N@a!#OEXLAQP=#j$mAen#}D%Zr#n z2X;WBOVYtsWIcU-_C69g`t0K)-vIqi6Z5lkyok;DDCqFex#E43yE%duHB0KT2@vIi~{IR-y(oYaWXV)4#ruBRg>TYVai8=cEy^^svO;@ z(bu4Wat?ov*IX%6H1aWk-VPj3^E@*5FB-f8$s}fwuGQ6HZRwvR(fk06gI33MJ^t{VpvyG4h-Gx#$cZBX^=J+z1H zgIWgj4x~yY?)n6V9HH^5!|l$p;g$2Z?O~XNUONjNNQ4<>DVv;+g}l7_>WGHlZtOrs zj^g0banZY%KPDfQ{q}o4TNAS}M#`oCE&JA{AmUV@ZuRuYDRFqU*1pw;(xe3)z@ogT?s&f@Z99QH5r-B4@);)v5ipk)4Q0ykN^M)9B|53=Qe!z^2J`l@>R(idlWcW zuo|({fI({uXP~v z3knF+MD&ox-?PF9TgpD5MPkvhr}Z{5NDyRZFdzcvo)V@!)6@*UvV(zxLmd7wIOI!< z9w*E~JTNe%S{}C%)6z!cTr~KJojJa3%TSWfPZCgF)@?itvO+zHjO0U{u|w` zd_r!$YbKH*+D^^vU6X%*F^|JY_ zLLZ%(kr9{rKABN0@yh&w*q4^NZ%Dy%`w&kx=m9_QOr39h5E@`tf3M=v^hGuE2{4d4 zi4k>LbNlN>m$kl#>XD=N{i2u@e#95m1V`t@=xn04o3QP5u+hk9TRriHl0QJY^V)8! zFZsdUtiF~-@H&E=RDPg7g?c3D@AHI|l+c!r*Kdv2#jp=)a!E`%4eLS$Gk{L0s0qKu zI^0vl_D00_6bVz=na#~RGT5YjB)2hoU>8{pf5HR&y|WWOpA*1}XnhL=y^-fZa!!}J zcccr-ZnDUhQa^3J^BS@P^;P@7IxX(H*Z29E1O~PA7Jt)00Qx z051IpV3QqGVP@94ST810%GPac*x#5+<}`>a+MBu1tT3z1`8qJ34RU_d7yrV7$^J|n zg~$Ajs#e4~ZYgzAVv@rh??yPeF1<_uZ2sqanyI$8QjBl}S>sUWy?4wbocAxk4xW_%{7gxeb}6lk(?2*vg%>+Ta_=4-9gT1bUH+B8qe!;Oe(Gn2 zFXD6@@3gF4LR))kUaOjB2CE;Gf;Tosrmq38*>jVZQp@>!?7NP2C8mmIbK{XO3BYGln`R($apXRp0Y0IMNmEsXP z@^b%y+@1oC_kdAd?82jG(^qRSQ>LdSEdO_x#x2|-v>SP5W)EJx7~vGSe3fq=MZ!w4 z#ZSmSyv7ew$kL>i_I8+4{(^d`%^b+8u$KRTCA&1zc2wMt<5(FP zvsD$OpGcM4k5+0-eQcArt{2+dI@=>wvL?y6Gcy%QB{ab4ErOQ4OZ!TZTrQ9;y zLbp$`Ux+LA#llho#SKUW>($>}0UAo4$c3ITa z<03_0$euxg(VD8I^}B$-}hf^R?LZnWvnn+kgg+_#8VIFuuo z9*96EN5_$3BYr>!fwv+ch?dHlL^d^TT&nu3(p@)F6P{#>KZQv;QOM*}fIUxJ!Ni1~ z=mjJg!UY)>8TNC7e-1#f{p{6{s#vK zdex>kZN$s_WZQ0vOWduyCJ_*~b;JGUwMzV* z=)OP2C+V{`K?KHjAME^oC5GM4&w2I*e|cp-VC!clO?x!0Bu^j$GC%Rd@9HfKcNMO zPaL?LGDK`gbNN+`_|dxI`?hU_NaBhq2h8#xdv7YFsnS@%QF^< zZ_{eNyT`#%@3uK@DbkxRW~8pZEBdHP-@OtvE5CW75!4tdUne(tdFUe&DZ_4=OHqxb z?yG~1*^WqaIE6T(YvM$>?giY%5(VEfXh}P1mv$W7Xdjs(HDA(g-RcyJZ1IbaXh6&|P996g)q& zK^tyaGFVaL8-@5!#cTDz3%8lIGt^;541Xqm^X2lG^GKk z6*OP!k5PG8N|VD5YvQEDu_O*KR;qpzT)H(6T%+Su6H&kaRbPjR*dmp@gk2*&!f(o9 z4R#pNvZkckh6kI&C8A9O@=3?@JGoftow-B?-Q`Y`TnUs3CDi^lK?sw28X6jg+m7%qpt$(&K27-3@$M}G!XR~|F#8BZU(@=&Zezr` z;Ri}j6Y$>8e8bzA*@P((%1yav8)IQ!R@Myp_7I7 zGUZdl?MGZI1B<6My@AgL!#^4NJY&+T8S4o&2<)?__1s;`ae? z%vvY5RZJ}LlQN^&zj9YzSd7UiR&!K>W&PG?HWU=i7Fl}T5AP$%MdY){@4KtWJATb5 z&vAPh4vt}>eq=Z9Mj)Dt!c)^N4WC^~5l#V_v7FaeNFU_r@deW?b@uca)LZ?2b#?+1 zCP93kggoIH#!U{-g@{_WO;bW|A0HG7MOkZ8-ZDCRj1&%a=7sAe!&Kt9U(E$JCeDFG-ed z@iiqWeGg7J`6x`*z*Fdp`W#6!JJ|*WByc&Ui+JVJ&QvLHf|7G+h4omCr(tObu@v)t zdisx^=PgyIPxks?OqN8$d&>k#8}^eWhTQ?>>;_-mL9D1Y-{0Tw>vPimK`0lJbKHYN z)jz94VCZ{CS@->?Eq8vwYngop;Z_PxUOorwv*Pym11%sg{CQ3N8AQ?o#-aFp_;HEA zL*{J*l`F4TT(}-M18#SAvPVq#rLDPHgq5{ZTkNq`OGx+>z zCmU(;9ri%aLbD+=ITaoH$7WAlm|daa(ZS}7{UL=SSwcoV7EhzWcHF>=Yx;%Hn3Uhz z6(XB^3#YCU6jH73&Tc*``!jYx;fMDQACrz#3@dJ=2&@mO-G09 zD>r3?*?4*Hh)`q3S)@ipVE?Rh<)DK+ZjZOt_n5p+Ea3@Yy?2i%=c*&HB+t8Rfn;FZ z%(nUR3d?J4e_ijbbr^=$Af(SI%948b1={g-DvPpgO#mE7E9_uA*oK27BOa`-;zIv< zYupb_p%b=*=S-$Uiwg}2KLq8Uy`X%dA8LXpX*SCOcw;!|dZ+81m?8O!KLmu196szu zT~4C;?s+FzKWq3pc%95;#YM322ku|at<6n+2yit^xMYpu4~v-0uZDN_e|mkZ)yeJf zm#BlWAGqu8DfhwiF6$QyHY^ag3OO#6Jjm&~Nt+H^g+#)_B@ISqW|W7f=2VSbmM;S* z7c!SlbGSLdOrEWiM@6@|{Omf1S!J*#V8Qc&L*H)7`BUB%_G04a#OPjsIjSM7_y#2a z3g4qiPyxwe#bJlYZK#8+;ZmVajgGKmcXQQzUXZR)KRfis_f-2S{UROMnT%w4>Si4g>V6lbw$nk0OH2Gya}hX+s@mFQ_zoJM^h`m}_XY#ys9P>; zR9<9QPeDO(455X=vYD40d_%*FdpZ6ET9F(Zo14XB-ylpv;G%;NAamN$VtZPiWv($6 z)Y}@;D8ca-&YZ$TFaQ7!Z@0B=Iaw1;v*+(K_m=cSB$Pe`!EAY>&q=)OYb?U5YY4u% zkyj295&`8l;^J2~PLUQZUi#%VGN0-HAl0X$sd%=HJ;Kcve(oyp*!xyqORqn7RnA}D z4J=o=oZ3r@5FC1yL}CN~!RWCyBwGTf>%(uLLu9i1w}Ug)JEVQPMs@C`ZpEAW2Kt~B z-j&Xc$`HSz8}tAYU5U)h<`47=yd}|+ z0C~!+P?EB0xNS~CGD5J`JIF|gl=g9hz+gx~B*N9y)m?GfXOE(Y`cj9r6mT;Nx)cHv z^{=WfPZY6qK8X1#StR;u?gcb+kZV14eo!}Fj^J=`&Km_2h*1cIiM%{!5#3p=`(0zc z<2J@)a=TZqw$siFKM2$X;kDBzMSn*t0szbiWNmcYj_MOb$($W2dAYYT%l1B9Go zkK?MBIC`>p3%|Q^oXO>XWCOUkzpC@zGbV+iz4JCk6Vv#f0HN1p;bXIta8$j|G!mc} zK}AIt;8iUFt~{Idf!kMjqXwTj>-*Fd6NDKTi#y{~dZ|r9uaT+vsdi{pSJu+>4S#MD zG4G}Rh~<48+Jl0l!JmBhIREsV-Q{Uqc^3(rb!a3+@&BndKar3|NBnLHNo6FHob`TZ`3&UQdb@TDw%)zFZd;eoZ;$ui9i(6h&jkX-jfw+e2<{vZ< zlwCvi*B7wB!Qwkn7P3GyKgS8t>R?hspxQQml}%`C=7?i3qMC>(3C(Jftaq})_9#ZT zQSGsE0l2C4__D7H8W4BJJ|e>IF)``-5lB;#?yE^O@fyu^wK-!gl2f0#x4UW)4g^I8 zpplZ#H{;MxuoT_A0ohcrkll>^mJdp8i6nBhIri<_fRjJ>l$E!M-HcgCav+Pt!eu0| zTFcv~!ruNwz+SpDTYd@zNn zHg!Jv!i~7rAZFwrm7C@R&Y={7jlHR=LyxvVZqq)VO18+(rG1~SH5k#g>8>2>^aGU4@ZH$G3qaj7Hsu9ZS3pS4dWiimu z&nX>W$}M|r|0pf5I(waDLgRmWm$OKD)3EL9{i`Dkqa2^@KVhH(7L!H_VU#2#A<2O- zlONmy`-{T`=aB;(uZFrIQG=F{(CPP^pCcSkE$zLgr|Ue-zzu;G+4a#HBe_re18lF@ z1A6MZS$K2z@0tq8@uEm*^~ah!zqF}r?*R*Z8JC2;CRrKW(l^L6|sG@ZsaA5-a7XV<-70$I`{J62(0^e{IYMeYUG8; zS#NGDx|!)D(eX3O%pkcL$;c&8aME&Iu*?l0OIWkDTSHbu zCsOw^8zgSeP>~~4JjCd*tzr4D$DZ7>tSFDH?!Es$$t5dXjY|tK^)PUNVpAqU`eiq= z;iQszMQ{GaS2e%eW^H_qEn9Mg%nQGN-%HEWBpU^CK%06*$hF(zG;g)4ZH%cc0$6We za0~9Dh%b*|oO>N+I`nLwA1N_6e|PDtnl}+piQ42@D5%3Yt9Cm}i}Oled?XE@yg+yC zosa|$Ju7xLLSbcD2p~<|b;0^`_x?=1R{{pA#^Y}fMd>SGo-vm}M+a0%-1*ys?d_kV zg?V{-p3&DF-GLQuY)r?P!oqq%~jg!5pXpD`VR^zm`z}V(VK_}si$BiBj%s1a}Oq!sIeN> zt#~5Teb)LrapZ3(#igYe?zD{`}#6IGIR_Fsmf8swrblChi=) zL}Mms(oVf0BpS_S_1pQ`PPgh`1@6FIXL74_%&9k_?&c+4gk+RSD#adf=WMPYVt_0gkWOz};n-+JW95;B`lbI21;ecB%swO#w!6oj$aR7lKP z0S|AB#S9pc$_YJ_>FSNk+- zHsm@_;<>%oCONUj$ktJj&_R(9?Pj~qs;`GwcehWvc~1?mGNsRB^$BafxDi$xOY506qf@SvHPxs`AvC@e&PGZSyEh`k$*9pDaw<9;wW!D? zn9y<-?98yQJS=62D-_bp~V03n}psQ8llZwUpqJY}auH08Xs%9(uxu#Di#B=Q#HKi4Et8{0kw=+oL zbS{xOpcr09Hc*bv(u;8wW1%FLOnr{N_NDVDrO4G(ICsor4~wl0`j%pUAZgoG-PrgW z_$x>`6S+nUeY^@EDEvgCJ+eAzN2iy(PC?2e2ncfIr|0_1mX-#TT2*|Lc$hT{zguNtOr|m-9b=CcoR*K1>Tg{4O)I!S?=ig;RUBf}!qTXA}J$ z@?fi1Z7;a>dsB~m<^x}C+@zQ41K#H+jPh34j3~9Z1X2>B=UKVd!yG;wiWv4CT0Ds^ z3ZH9+NAj+n+1S~U%&flJ7`nn67v(B}exwSVOeVk;Lu8(2{rmf_vZ@fV6mK)tG&xBl zd~2AGgM$MC{WSGR(@ycR>oY&#OQ4BCnRSMrNFnKkjmgEz#m44-k=D+uio5sEmoKNc zf4)rh`Zns73}Aj_H2?h_;9x&ax%lgMF8C7rdUFgOb%@}lfFC=YCZbF9%bJFv$hkb? zNMYIFUTn-OAkc>_9{GBIYyXaojfN#Kd+S&TNQ$-~ng}e`Y%?VaQgZBnUFF~V`$RbJ z8S2c?==D=*^{Y*dO}i*bpke;kG0#JG>>af_^{4VLS2CW6o$z7a_j?&UySAI8xaaD+ z$NRQV%r`45DhdrNzGh`fCFH}_8DI&7ybb{O>s5-%E8(wSv&}rtNEZ}a_?Lcp{i)AO z|5K7tVZaK zc%L4sns4URdz6`+)fA8W5|)*g{v16Bj-p2U{P|uO21d<;e6EEL2~|op|GL7lgGD1( z#dQaxgj~=k2<%3C{<5clAM0Ww=VGSTC>&c*bbIe}IgtdPODEV!xvYEo@1R!rAokHB zyWXH{SGI6%x?&aZ*|YI%@rmQ;f4onZ0#$}5D=e9OxSK1*gEc}#=bf|0G)6eE< zcSF7AM3t?goLon5?{qY2eEdL`C>K}XXfcW)%>8%>?v!D>N#ysbp7n5vS1qTfr|(={ z8JP2@>VBCvAG`br_QaQA%j4jtd;B~+$~Q==E+}E??#d&#UX7=AQbB~w5$U{MB*)JH zzM@ckDqA9ikXZ3EHlAIdI1eQvA)zU$G%R~rQC9X$Qu4L;1Tp4Kt8cDh33()x!?u5h zb^AKITWGWa%z~%X>)4Xw`lTTPNHkOKU5{wC3xyQ7r-P-lf(fC=wpER%qnXuaN-xfH zU0(6_-Oc~K763+SaAD8jUE)arTXz{5!~U_O;hxzxdszaOk}X)O-4yYn20DZx=;J z_d&QAK$ZSP4{rStf7qhBGCo{DE9P4+=5m_}(r+L> zL={8+yI)-XiKE4mr8{`u9vxenIlkRq)qeI|7d25fl>U4 z#KndBpyeYz9Au(p2eMD(S16eHi-0a;Ab4%oVnPwxtc_3F$JY^w#mZnu8zk&;P0P~W zJ|T;dot3((&?7-Y1Z`;PGxG$*;3BJ*bEmIE>yov<~ z@r9VO!b01NhWa81t9a38RI4gQ1Kx@3p3Np?%~GB2Dj>B#{6!xdxtxOA1mO`8qunm5=v0uI#)l?eK>EQ=OY_j3b5# z<^_;U;py&9_M9C8@9gwRIrAtrOAtKe|l|W6}zvLLx#i)LMkCEHb_`@;)jvkED16ZzaQxPqr<{U3v4p_=)O6VfLqW zrv!c>e_hpv0~Bt~Z;a@sXYj_pxw?T*e+E7~GV0(5oIw(*nwpx1hSMV>%NOg8j$b#Y z>nGZSJ!KRXdjR-??Jc{8f3MgL&4N#M0bD3#wPJqf!VL44+7@{YR&85s+}w2Za}~Ot z-rlJV$ua&0adC08V{M~1+K=Fh2p98}G9{Icx!9Qc1`yH0!d>Tzq9Ucu`jr3(`*E(w zOmA(4$d1jKMrCDXJS;4qeRkG6cc>``q;-fQ!oocAVK;6A7OJU;dyFLZ>a7s`KxV;X z;F}NHaAL;>2IlAH(&G0QkN$#Eg}IK)h{P^B6L(qQ+S%DzG_BA+I96hf?sI5%Y(SE_^#!JQWi=okdq!_etxP5ZBi=KVQpq>hPzw5T#s`)Lfg1P9}JOD z5x9~RqY+{`D92E4*t3?>9MbB?Gc4fL=5cD@IB)u^z0&il4ZhDi&Qs6lSNN^CfkcT( zP7a8zU(^G?e`5qCTMz&ug$895lBI^_*DO68E_^}tV`a4h>;WE4iQ!lGSahwr`c_t4 zIDBLo>thY;0U_R{LF-Gz=qJ$`BbFAbi1_l1P?3f+Bu&j%Y{BV5hfT4kyuFwuvB zh$8p}I`)BV1u2F#^gqL(dA+28{`6Ac3C4p7U;b$7ize))c3F*o&lZ0ts<=??rGCc8 z;^JbpJ=#bxrJ#r)8TqPrCJ6fAkXhfi%?D1>ugKu!?~>}?-rkSbuBy)gvSeOgTWAHs zM#U8_1(x$wE)hT`ZQt+QxFr_98c)<>MkX?UytgW2V}ozJLpf5M zps#@Gw?0jLwlZva%WEl~sK~H-Ai-AZqUWJqqNU(<4l4@MCRM!&2;A!lAj5)OvAd%j zfskIYn}LTJG!Mj>O!PQhb5b&HC>yf(Bz~uf?~{^}-)30qlf4)9+y!giJz?KdvWH}p zlqrdc=*`~wIE6JqTyf5W{@5PLDJjfP$^6bIAGJW&73gHCq!dzw^;hTMk8Ugu)9XzE zTx=7~4ZA%Um-fEgN@LU zWj23nb6M&aCvX#44d|k2`wfp5jL>4fr%NlImF4B?b?Uz9P64}YT6NUQ>Ak(Zc2-t9 z+tpE64>^-E-U1|B(ys!K;Pq=8p@yFRtspx&dX}X$WDqeSAz+cLg>A!w zly`swlBkjzt8mKAL4?tbau96Xy18dp@ONjY((adyAPVn>O{gZS#_6Q;r8pHc0fF+c zGu9kbBa!v%Q4f&u!umA}jBdIZp(If?q)-fF;u7;L^$)+!4*q-q)OCs0j0ddKd;UBt z2f@h9>?Har_IlrP;?Jr-T&c%Vv_ioG44s>cch20dhtL}4L((3o_D1SWZ0uJ8--4UgJfs)6b@x(55OTa?>Pq13SAhUO_lI3Sm5N^q$=M zQV7r|_N^34s~XpJitM$E&t%&u&oI$wibwMSAt4q+HmE1d$E-m9NChu5F+tC3p4=M~ zQ4p@fGKP7|$3GF;jeOIWB!X4nRGBLD=M6UWTPzk%hup`(*rlbV^21*wN>www##o4C zm^`fG3y~c4y%gleb z1(kRX%PUSnAX88df_~R-!qx^CYf3`!Ez`$b^1BH+F20HH-@s6VwJ7>OFT)0rHrt zbq(XT&bg;FZYoWZx-{AASDO&@+7+J0SeD)`1Y(9JfAZ@;LuIGZ#-&fd2^>m0i?Cfa zS`$R^t1BxG$L}c<+)308y*E;S&0qVZe%5uJ+MkeBNKZ|h98+P^+$_b z^kq!MLurLPiMGMx(_)mLV+@Tgt47uPQ@be&(Y4EDIK+EE@EgjvlCyu)Jjh>5^wWsK za>}yGPYGPrAsvfzZ(4z}29hNaEa}N7{-4605X?Nc3$BXG@2b|O!$Mt&Xl->d=s_B% zWVk$_f4CBoSy92r$0zN`K~OR=9AW+a)I&EC%jBf8FuCT1--^1j*KJC|%p5)RiAuZS z2b|uIWo)DKmg7T0ytp1-1V=|_>7kd{DNgMi{2kQY2izY>?yqG+pI+*h^waFk!Lq94 z8b%4o_W$urL+5Daw}K+-jqjd(0m5>6w#JKp>phyTy%U6u)IjLiLA5r1SsyDP-2Grr ze*&_-=>03?!l7ja0&v;xbAEaRgX*>G8@qYZ zRAM+dIM87U`>y5b*E}HY!)GlDt4*1>EIR~WojXjaXmY97f)EgKUIn)Pg2&(`ylEr| zS?_EDDnbxM-qLcz`x$&Vd@c%sr>EYE%LDuPqjwZh*OJ?U2!nvtOE%uDuB|oE26~mA zjZJ}I3ukAqo`8fT7>Cpe(Sg@eQJ|H5tLg@Hhlgr1Z+~R7&eqiomLX6~yQxfpNf%X=!TC&$b*`z`Ey4UlQ!(__nxZ^1N9~ z&5&y5j^4x_WIx>t=>E{WFGj5SIGrJAB}egtX~~|=UET3<{u9!RE>W*Iv))f3>4%DR zlEjw?B$}1xr@-fTthicTwAkOrC!~bCLwdDZ#nuOIPAP}aZ7**7c%7dnO(I(~H2r^0 zJbm^I@GDsUlY6@9;8%GMd(OtiO$&roT#EVYK z;T82g4LyAGyQ`ccq1^618o5|JVt91)&*Gw}4@J>uJ@h8t-zLz98IZv{Bw@GS&XA_A zamjD5xoKGE{z;<>pZ#G{mrDVuTVJ`Fo}S(rb>j7M@3Ui|$b@gKo3s_z#05UU5N=deF!oGdCKrje#{5d_`bn1Sq(@wQb%j>oaVY zM;yL{Y~wswy#x2=mkNr6McX21+o=yeRqXl7m1oT^E|T2dx%=o5`7N@B@v#L?U&(;e z$3OZycG@$tc!jC-+S8wW`>fq<9b;&9)>@dHOi^e=es?}4JG?Km?~np_mOy)IY<%l| zyBK-rB`Cd(qDV+wBPDXiGaFP)>4t+f>vMD;tpYmSL48-MriY$GKW5vbc?<(DWZQ;Y z+2e{Lt!E4iTEj_9jR|OIqSPe2k-B<%g9FnR!yJWeK@Pv)RB29mo;;My*VM(#&Yg`x z$Ho@++epnp=;-L$O?}l_8mTPQgRJJ`h9k098W$hN#-jLCmBxQ@7*(ndaIBu4)LLvr zFEb?%-h;;SaOjaigv_=k7z&f^0PNx9;UNgI6aCTk?pir!e31S3kR}Oq%BUyU+C0KR zL$JZ3z?Zy3xk%5~x2i=s`*Une%*Xu)q&J=(7^So(XbmC*0>G4izqE9$V2{;vH@y3K zf5u+wm(vsSG<;K=|NcHm=WpRrkv%d!gh$cIO=uK&OcMhCes6S({JA<*y5 z>HaF$7F!3hCNXHB0s#j8@QO0-9m9h^?=mO$gaZ&_|xVXE^n(FFz8+>4o z`Da#q0&6oEPDAw^B;F)9W_qzbR;+@v#Q5{=lI4fz4gs%k{82@;#s3BIbXFHL!)=L( zkn{VTAx{k-{h(`&X&a`6XfoH6U39cihg?oy3oQ8@muq1gWhx7FjdPQt3eT$zuHk8f}Gsx@_FK_j)}<8L%@)Szb9 z6>s9Cn!wct_i#}<*k2@x&nRIJ=Sk`SE=rd|{r$6_83}?IKkrCRT$)a0uxTqznvVfQ z*>1p$MR{zSnqy_+k<(o-EG#tT5Vy!Zba|C_o0z!5cPibXP#TMrs$_a534t@LCz6&% z3i*WO6cpD^nyRH0s}AvD)eg4Fu8qEj(R&3^AKs#yuQc=|tXL^LD-WN-UH$eA;7E2C zlF?XyS2Wn*NFDe8p7w9BowoVumt8WKOHCyTbJE|U*bVaWwrq8gKfL`0bXi`>$;mKz z3^^BMWSD+D88)i(+}i;l8s>VSQsK6?YHJl52*kf1_%jzVT*bzp;Ic##u(uklb8hr< zQcXK(Z*4gWKz1N{N&GI3qWxq_zLu}eU&BU8qybkTx=#g1O&9}rgvZHLqA7H)*>gN_ zBOCU)zz(MmDJg@4OrAF?tAMLBN+C2{L%0DGh@}@9lLr?U#=dYH6bS2@@8D55D?APF|j3$q*aDm?Y4MU0htAe0`d}>(p1s zidG{8P#kvPbVOI-af)@}*-*pkv)Z1Nn$Mz)?}|vH_gHCMJ}r6Myg1Ovi-}O!nrpr# z09ysJ)LbAT&`}>or>oZ1+fD_r?#-KYVPOF>?nqf(pbF;xX>}jo#Dc&3t+>*D!gC?C zCuK-ID=;vST_0&Yi7bTyASh5urg6N~>;%|`)3dXd!ETGLKgTXv+B&+^yL-dV%so~@ zY(co`xJ;PW*xb0SL@hcMC+4!t$y4@7;_ABjBG3=N}@2?>AxLbAz+4=QrTkNwAw zjTy{6J&%D*DP8}gZy+5Ec5T3NffZ=cG+vc@sUGwMnjPvj_&{z6@G+s1f3XUH9f(&#{T6bKzG)k0;e*GbFb-C~e zB(K7%8V`}7J{Zbo(t5KRhk9Pcem&C6sdtSPigNixy1ihD~>3Q&{?+mlDCAe{p!afv9_4Qnk z4|g*xxh-4A);!y=F-qp_$0_9W*iesu5VPmRl(4~%^W*OrF3`+~3-2Nqz+-^rnsNNB zj!LQA)6G+7V8F7tbWh6<&(8wrtzYX&oB{xYhliR*rA*YN9lD49>`ORS+~+dQ@{L<= z{QNESrQ97uaYWC*ZL|g-9v<$Vej_LQH!IzE38dgw69k+ZzD^tjlXmTzim99uYx&d+ zZ)-d9C&nK{c1?C;Pv0gb4f!r2buH=@f_ol%;g;KZtrpVsy%uXLq$uK^mU~UEH zv~a3|^wY%nP((p}J@tsQ7z_H>yCVZJ5-o$dm+xtGAH5_tKR_KF1wDXS$Gr59GKaZq zr;(A78s}3;V}hOhS#ApnvJXG5ycl@Ed3n4UxzeD~6E=OH4;dSL?}(=2nbtmCxZkr^ zU+4y%9~Z&*uH)llF3i@nM%O#IQxbafZKR!^UPkeqFzCKyOFj|*e4kUG>DFJY23lKm~0%$d(Mz%VJ z2EcBi*0$14Vk{bM*{SAQr(Qz(5?1whaL#kI|^8*0Oax$TphQxF?GX3Qo4>UN`!+l9Dfl zWPkW342V`;J=Pi3v_pb)QS{V8!esyBdwz1Y-Bf$gd>9|c@A*Z?4f^S8Fl)Y#Z}3Se zwJ#oqNQqC3*9YF6OGYwcTs|^DBGjMMImqYWp z(RQiGNKIXX&ILZ!l-|Qj#26x^J=NtP?$_GdT5NACWcL4qOnUb0j`AGUTiS3CA;4_$ znlB_XyP?4_O-)tx6)p?WZv*Tupyaxq4-F6R`6*-YxEky8o+onFpPnB5p{HP;C-~SldW*Lh=z6pI)_jxeFU&Rl@%fZ0j4<_ zx{R`xfGpR#tcFJR969}g(bl3LXM;BW|Mm9W;Z*qj-%S)*$;ei+kC7R&WoCuau}QX* znMlUr7#U@kO&K96j=e`jMo6|}7P9wv-sgMYzx%oWd;WN?>*rsW>$uKmz2C3(_M#bA zFQi`U`Sy!zex0yPCTR2WKTt{^)w(Ga7pR4{k~Zyq{NU+KeZ+RPMsouNYTB5Wt6f zNtCsn#5CVLJv@@7p1ykhI!hjA+gOP6s?Q)lyZFzh*2U)YoKa)d)z%h3HG27Up}qp{ zNHMBWN@)eehj5bUz{a$aVrG^po%fpqf6&0$vQIDtbt3Hd+d@6hjxfvbU-$%dHg@~A+u)DH2820nfiTwW(kravJL!3Rd&9WrigEPxF) zPqZ*jLo6xyt-@mG@jrAxvQl;S?>~MLhaP4J3Mw*q-nFg%YJv}`DpcaK^(nZv$chxa zpEUc2Xh=3t%iokLrf{xv5v7|}9uFQ20|;?VR5YQw+6<*OfWarIwM8=3z)1STPnzDE zDAZc)*VnL);>YEtIkWBH<6I3@Ii1!XKK~uU4_m6Db6}^2p8Y(LFokMGD z@9(Bc{h96?MzTPMER4 zrXCdC-6MWiorXW#mi0DQ!v665HZ6hd zl&K~Uhlxk#C0x5}mW8e=CbeGv#LG}1?ks;v7U`$jgV#le+He#~H((?&_CD_JZP$0< zznIF8&<&^IQ#`)C{q_`5Twq|0u1Iu1S6DN&6II+F3U~M)R#K&*Q^rF73>AlZ>b-gm zNIdVf_BEeDTH~6h8*>eTgd20+70gsYw{jZd8GQCvE8)hRnaNIi_ioiDrsxsUtpA4V zXM|R-9ddmT*p8muo!L$S9|nmE35oU|#{?o)c5Vqw?NUizTzF-t4j6iTnMc@$l|dZ**heZxb>~A7EU^O_L>}bQix|RFf3vLhGM#* zp#f+Cj7pYIbo@2}XoZ!y^vhew=Z(W}pP6sCv%2lrHg>)J>%O~R$Ams7)hb&F;sH%7 z``BNI=>%#!6XPr-rXc!d4&vggd`Cok5q8fRnfd!fUJ}0}^nCT62zOO-&W6II)+cXp z--L&!y#mwJK<>6k$(l`UhJ4L&#B`aFk&<$HW&u-L4ruVS49(Qk)UKL*fy?bSiR;3f zBh|rhEDd>02?SqvfA708^^ML3m45=#0**Zx@>3W$sR#r2AaYq^aVHdrPlCt&TcKLW z^VtPoG=~R^kY0H#3kTd+gGdB7&5-_IFYy%JiCVqa>PW_J@aSi=qadA z7YBu1fF#_I7(cSC{L0SHAA{LA3v<3i)rPZq!W>KjGdY6wYzwW%MXu4@>t*oX4V4Md2Nl@mt?#Z~Q%nVHBkqdc zCDr2Ls1$qa3vrZyU$_HM-|`UTy$x@4yGs#>zK5{7PjI@N9dXXhi=QkQp4>t z5fo3aP#59?qCkZOjA)3SZHhwX02UyS=n4>W0*?4MI0S8;)p{u94U9f*6`*Ik2YXv3 z^U98B(Y#NRAa&_C^{lo{GT@EpyFjUd(s0Wpm)2IG}KIO6p353of7%B)i#QESC(MOBLU z0?Rjp5U0jt8-K=RTrIaMN!ybr!{j)A;&4C@%OB6>7`DCR=nJcLq!^^kNd1ZKQ5a#5t}3zTUK)Y1p9Ai2WP->u@4#^vGa1s{*_G-# zx_Mm762WY=-O&(pd>#?)fDi~_yFRl{<#Sfq&w zT;0BGYLHFudo;1a)O0brebM}^JP1C@J=;-=mnMr#qvqT!PGIEm)-bNjr7*f)0Xcht11+Ye4Rkh^PXT>tGG;f{a`x3 zHFl9M8v#KtuV8Dox+s|X~U4|K+4;_RiDqKUN*&-ZzreNE{*fOZq z_um%SgVY}6C2WDT0k~^x+qDtXK%G53UP@{Yex6At=Ibl?#Lme{dCu<`HxUz{8J(a+ z2FaA+$7Yuy-eRbyXN@7{XFbGAW(?90PWKHS-SFrH1hJPVMP{2hQO^2b)48o4 z!%?iH(v$wJ5yS1H!ELwC#4qpjZ7;ywkT}HnXp+i!*jI_$3<>Bhr9LLEfyFR73>aUC zHF1G38JN1MI1R-L4FY+}^+lg72NKzx&LZ`DRKn1Tx`0BK6)w9+&t{0+h>8N-sOntj zw;#~ZG_x`#KMmT>u6Y_rq9PZ5`}S=W&}4N_qb9S zfY`l`GeN5$7isT%Le@8>63wPK83s}!ZAD>1MqNM}qUAIggv4$(DUV^N&bB?hrGP^l4zNw;Q2DLq-N^MBZQ{>5R`WC>-}zar_}-?d z*%e7ndroXX>)b_miVYL_RH=rlY3kR)1s_XFDA*|0Hf;+oKGuf-BVB7f>Nnq%zQ~Kh z^W3Zsc&<5(9ef!NxxmfV*Dpy4+n-#@{?8GZyf9R@1{wDZmdI@v?R50p)=BbH zqEp7!0#_hm8w1msd~`U;Ln9)7%=Xh={ZF^p6NpOj)7hI?T35pGJCMhmJip~g8X~#@^d=rt_Nss8rvLySd)d*qsjpA#c-0nzx%wD%lWT!-Q|nJFOpPBPy6~h z|(MMjMKv%L59PyQZn>#skiUxoP4kB^8Z6YiHN_?CCC@%ad=$>686w zIu&!eij8&3y_~s+9JC$(hEu@B!2Y}Q#QqJRyn|c~=Fl)|)SP0E=#|@1+=|Z$e(K2n0L7@*x%Q+Ts?{fOT(;n%Ms7wQ&E*`CeX-dl=)-Y{7jiH*-b4i1vxYd zgoyrMT+0l3mm=(BUOS$scW;Yr-Pvi_t`&{3$=GL*(7eUec9CfJkP)kC(`xNG-3*ty z!p&$xI)I_~!HDqdY#^l!S-ve&J1aOi7?N8Xb(@bE3R~k+Quq!vACo1^rULQL!uPSN zyKB#~RmpQme~R&s0HddH?=nOH15K`r8)48PS=55zB==ado9eASb6*ieU2r zx`}z~;Q~{^n?r)$fm(o7%h;H4JVo5R+6oDXD}JzhT6-GK=#y73+_C94pc|)u)3hKZ z1RctfpaaEzuz~hyeVxB3%YX00nr{W=WIUJU!k9@;cq9H4yK$H!F&u{OC(rl=5POF; zfF6p6CZj@aDj^1;*{Tlg!s3+KXHeNNwNZ(72m;|*oio!DwF!AH4={lqm^)_PKkx!; zCgB0DZ%8)L#cTIFfDXPo;{f{h}n zr7v8!pY5!uUY-#nMW{vAy;j06F=w)6-bPnwhQ1+gFI*gY=KlniND&Y-}v(gK3 z4`N~c&jBton3sYdE^Gcr1WeXCKsOYYk9On3Jd2o2F8=cbU3peIx3DnIgq!Lj>OlSS z;x?(3MgsG`Vwc5G`(=AOyP2-Mwb{RQ8P~^>p=)|AtXzvlC!&9fOwY&7P@g+L5Stks zOix z|BsJ?qO8MExB$IldMn^j<@2h$Dt`qaD#Z)R*3D0Od3nIV<>V+;gJ80yv$a*(I3EB{ zyl(ovR?d2JPY=0d)n(sBb4|@l`QW#S;Q;fJt;f=EY3}YWw)XQ@Alr6uLvj;`uBj=% zRs(Ag9wrhu`%Dd1j5`FIdTM!KS$O<7+JwzSUq46v55%EET|PkR>pZHWrQYv;_OpK$ z)d;(mt&pO#nirw?nte)?zq)4qn!}en$fyv@yxE-^U7mF4z0--!z^UQNL z6y&cHWsdfyzxL%WfZ%6bMg5s&;@n(!QjK*fTFQE{kG&tjAlqBG1e7HVb6Ui?GTwP7 zb@rcVfnppkCl>UFpT9`6)kxXe%ukvXtN%$#a-Q!_%8JKYg8Nr1b<<1T3g21dHAAuB z=}Ws41-QVypr46}wLf6`SP;n*sM};D=dJWbJn38euV4AN%xQoQQZk|eyIrJ-f)TOb1dYEiBkl?g6dmbIvA=HTW7!D!=;=teE=!*|A^xmzk4^5w#%{| z(I@C4&V2k(nP%rk(*)t&bQe+sJ2A^f&GQ|(x8_a`4L)S?8{H?;Cd4raVO*~{d=Gai4jv>w0@gYpO8Me>kh6OoONof+ zR}(*|be%85nAW=G!65Sf4GVesGbXi>Q8Mo9*MAUQv2*MOl@R1kEZwJyp=8HVni0zX z$WUGn09UhdrBw+gBm})YQSJ#E^o7KHnKbCmjF#-0OEz>)AaOUl3-%qzXHiPWCUUaY><3v>|$T@0P_TCM1Nsg`)hL&K=xu56`JnwEzGW zUm)e%`>YC(wN-Q$GtN8f@m+o4f}@)CN~a3X^8tG=FP73@VHe7wPY z5@}{_%jHL@Ohd{jwY$5PHSS0(NI+8Yr1kA^smIEwKM_H3oz`2H<_p(UB0TTBWI%1a zE7oPd87&x*==t}Th{f*5m-M1$R-q*Ap*mc(#2`bxj#E=rrIWVH9@*RIsGGpu0@1M= zAd!{c1Kcys^;bgy<)KZnWQg*N0X=lVy_ZqFn{JmcLos(#(`Mmz0r{8$t1#cHNqL(bO%% zEuc_an!3yp+4NTI;eB3^`fQ$-M;8W;C@MCjK|UR#ZHT`DSu(Spkdt4BUshUEWkp3!eK5pMQl1@zdhF`F+l@Xg+CD5W z>Td-)Nb?o*yf2qR+UX{PZHUg?A!Tcm*W z-_C@AFa-yu+di02;__5s>mcS*a%^9Eh9h7TKTOwWyV+eNkO_5Oj#{ouJqG;Ck4f)z zf*VLN6GG;KAfYWL@y+X-7P|s_<}YsX@rs6ySmgFV`@;2pcXPG|jmp^lDJT=p;&k7= zrfR&-FDlEJ;k)?982>+x@F?x+;FrRs!`FC!%iVTkr;g31hE}h3doUwh^+G1 z%GVXSfpy=QgBlV{YfLmdj^vk_n981(o?qYH+uL#?i)JPUTM9Izl1#H59RV{$A%Y`V z6h!PWF|ACi(yP!2$%-mIH4bdh}LXMT8p~5|}5$aw>=H?kHb#Q4U zfJ6ppLwJQX-)Xk28m(8J-T380|0?sWsxAMV(d8eZG#ZDu^*jV?qdghsDv=(Qph%Q!gn0S~YE$mE{ zl+K4KSSs#rC7?i8scr8B29Y;>yo#=!@ragTjsJlltvOWvftsQ67YZGO0R=C;xgh-tCJ%~u1%5*;5Fa+I8d3Ty5$GU?0D&<+EIkL94md%)U2tZbbzUg>0 zpd}X4(t@_+$ko+)b#x{}43JvQbsR7W8RCxqtroo-@c>R_sZAHM;tBeY&!OG9?ii}| zhpUVcjk7nIfO7%Ie*U|+kkfz$nvkl{`T+ZV>-^hhkS1`mH-ggc8_62=&9L~zn;2^h11hF#VvmxX%V-@LQ zDh5DZE^(-Gog@zwG~eO%(@-D91(-O2_!z_;*TYD}SwhGTRM*XO zY2MCT>hzA)*B3q%4R4t!sS84ZA7N{%$=UwNG*O#e0q#R1!ov_uP2eGN6#DE7^Vj6t z%@oO6MMed8^m`4vCigQvg4=BHE12AB?er*^LKfh?9}57rfM|`D@LD7s0HdpHuBK8tnwF{pJ}NZ09W}ptDSs4)5stI_zLBh-%#J=uj(c-2ytIGXXJ$xl%5E zy+BTe!k^Nt89%(ppKDreV5SH!H+3VuB#Saf=AO2kg*yy58eU#e_eaRPk&%MEy+jsA z-azlW$#D{%qkKomLmpREm2yXHyw;cg>ebA{gPV_Dp#W`Uy&1gTxY^j$_&J`DWb%X1 z+oYiS zaaq^*1{BuEgr>N_*>(_mGCjk)(hLf%NP0dgSAs~O?LJ39Kut}Zzw*F6H$k8X-s5ZxN8Nc^)BFLK-!rPn3eS~M*7$`5htq;W z&0ruiC%KsSv0R4TWI7rccE$UzceVU=t;NZ&&&btl-$p`1;m0W&-?{X1hJ(P=jkUF-}nZLhwPBLiBgN6Ip468 z>hRRapC~!AhNumcngcs4doj6cW;SQ38M|7De~vrY>Iqr|j7pcx>LatsmAlW3p9Ml7p{?qgzqxg#s7Zw z(=f1x-XoC9`LOOuN8Kxor4AeXGbIFGvs4ELK zyRZUF&W8^g z$Ku*i9i)%!?Cq<@a>O$UJQ!JgTldOs=7b$fEWoW$) zIibJ2b&aLMV>5|Oe^>n1gDWV+@3MPst_G)1Lsl0wH2{ITTwjwq6)c2neTjZxZnh6% zNxu{40;E}bu#^`uH@j{SYO1js0$^X#i&0TgrDN`!HNhf)0VYjNUC=_7DMGQdv=kjE zeSuV28cEelOZ)cU=w0yjqsPeOP?3}Vj8(r|RP84o57qYB5sFZKv%b^001XWQ%Qp^x z1F;=j>)uJ-Pj@pr0g}zBdFp&Qd6D2B&DG>RJYNUz`z3xIGPMRQ=ti?ugZl!Etsdh? zA>siHf-L5je;&zi`N`}ZpGYRveJ%ES^)LgoQ_?*+I0)K~FV?k{1V%Zc-_Zf}dDxD4T#!7Jbp4+0HBzyB+q8J~?P~s>!R=7db$f$BNJMd1giO`^h00o#O&Dop zcM!713p^sCuBSviuR@SQo-$Ktyg`k9gKw$+5!F&oD!{#EQcX8b$HPG|8G9dlIr8F~ z@Dt>HwcXTQvBamTqB(CfJZW@Ve>`b$YzrwI>wiC_NSiVPpP|!sx@JNM{{6yQ<0uT{ z?=PaC81KOUed&MAc@FyD)g%bfe_zrr?x9I&Y}|01pv+fkR*P8O&Sbc7{J1ZhN#x2{$_D%d+0syT5#V@eK|1 zB-TtGkzLUr@H}O6wCb*))bVTd$LmDVqm5sG7n<$64SjI^bjYdXl@T}?4ne@e89Ro@ zM}<=o9Jf`WVmz6wQL)Gd;Z~6iFB}9topa>cTT~0YJmJmwgIVcM4CHSXSRAOwbr0iP zZYhSo1mwF5sl5GU&GiB|2vYRvz$Es4sLU{Am-PN~U8@0(_&}spu}5S>+WGb67u3I- z_j&*w;qIY#RDFApfA~jN;Qlp>{_ORJnUbrL{L!xOv>jhl?MUydPh8(;3Yk%Jd)Yt9 zrvzN4y>VX4Jk5 zecd!k_J3`2D4{hoce6kElEJq%IX2P>U7_mJ%EX(|OU_b_>t?M%m9TLGZ#+OH3cco++I)jMSA5MIYyx}1 z!q+j=u9S^azQSesR#=L&(P%Lo5r34}gb0Ok(0qEIF@WytAJT{-P^(dIIzu#-Q}8$5 zeF?f|`QqstsLeeozQ5_B5@<4q-m@D~KmNp92jd|=Lo76MdL|O~3p;ov>)ikqqk%^m z)>(;h^KzQ*LO=qGx46X&>M-Rgleg$#X2%^?HFvm=-Dly#XGr7HW3>36BV;CU^l-Z<^0iYK?axXMV*TNaL??MN z66Prym7o|ZbglSZ9(}N!3fSE;x=-}})tLI&g zX)iRW_^u=3){Z3TaeeApiPXx&+3DT(G?5ZG=1C4VC58@8P_WH1#V%LbBU{~*$D@JI z6ka#Tgiz6omg`KZlnY0f-*aPsW@jCAh@KyJ@_1=O~zfNzk z(^D3HE>JkyZ-NYOO^4q5;5gfiM56t)O_(?eVMaV>$nz9D7Z1BQDjCi$t_nW*p3C zhUF%g1>Qj?o4w;L7>&<0{6uMnW5hQPH>}mIJ|FCR+G=53`tl#WzIKyxx@>zjrSn6P zzWs`sss?mHhb+vZ9~xE}nko~2qT%X5-HGpooEy+dZ=gtxzZA;pF*6>n;&|N;Lle(h zuQkm079esLT*^C03*JY9dq4y;z#lAfFN|4~gJ>|x#xl-%T~UK&VD`EaazTXaSInQV z|?(mArYJu2_5Tz0+|0EZQ1^C~@SmH*oXsa&?uLO@p%w?A?(JV(v2N+SIX~ z_1||7|4j;33QjO(s2_7OU4IoXrJN zrdCh(W=a15k*+~av4y#fzQ#s>MY~nA1}|2-N)KHq>Y2e?{c3~byu&Ri!=b!xVCt%m zZTSr66~n1#W`PQn%P-CIZ(Rwa=s3Ob#^QRPqMc35Qh1Fh6ubAURyPdBp#8zfuC_}Z z7PwHr^F0AOizrD;c!g&z@5>gw(}V@v3Yk7l>hTMq2sEqCWU5{odB zWZayhLUeA@&eyKB%NBSN+v>6JFsb6)^FixB-6%)FvY z5Bb@XB!m{nBqHhxVvM$&dDyvCj z$Td9>4b%-r$uy!ovonx~z;$5tTf~k8ugt#=*d2$Th>L9CgSqoNjrM64%`pbqBj2-U zemWGS$Q19p-(*hC$Z{MGnhPnLcJkWr_YxZsdqh7~ScFLiv3l^VZL?mRzelS?{KU=5 z&ilCm`_^0XtTW!}8_MC}j-(xEG&WqV6SgQqmspGpmnNf|jncZ`I!}+^E>B0MceTmci|(|&mPDi? zx|W)O=oO1F=b?GR5A#1D+1YgBj46%vTP3vhtUi+YT@SB?!$BJ@4jC@A8^4>0+$+Eh z5a~)YNfUAMvf@8;*&Rki$=eFg)={;oPCzMy?Cyyf&O7XZ?q09i{ugcP@QsJCS5p64 zK5tD}5F~%e?IWrFvjn|li*7%Jd-9jo8I^??(CSh)=l-UReU%xa!5v4Z$)I^cy}JsM zI5BkLw)gZz$D2}<<+KLq@FF3GQ z34!^|A&Q`nlu%12Z20hjoXZK8ei=gpS%WKz4534854{OrED|lkbWr)89YzIJ^*hHE z1Paq_E~;A>CSI;jRjq!Ebx9~rGm%lz7kajr_R_Rg68YeNd(nYyDzEnjqv727A0FzR z;iZG(>~>l`P^i^VJu178 zgBp5X;p+DKBsKL4|2s`F{@8Rne0jss#an_;Sx5X^Hbx+;T7SbOC~+O%D-Y)$ZG+(U zr-3;oS{8YE&nA~vndzMN*X$CAu&5`CE9H%& zwB2GRNVzRK*^3UqJXxKI5agWT(mY%&A3XtajYt;Rgb`v%8y9esyWm2}`0!T&jv6GQ zCyOnO)u|40i+WJb-(4EiQBNsSQ_urN{%rKDw^K~QuB-&RX>)_yM7;mPOETxC zUHH?vTeFqUQ#nF*ywnL)wdH=_PmlY4YG|LVRLkd#Zba{7J~Dl{NiJ{XrR+krho;DG zG4~?1iSyGecOf4g>bur>6A}p0bHQ7YO!XXa{dX7^zzrBBO3g>8WqA>FB9OPu`XBq$ z?#t*MhN;ej@C=$6(1?lb5TXc-<)rodUm1hl^#(Vj_zdbymXdaGV$>L$V{S!)WVK~e z*1q;7M|F=hgnP4$2H!J#t`9y4B}rLcc5~6eQ?w!vKh&~di#Hj{G||6**-ih3`dnT1 zzGk%HJUx!zQqrb@uE7_ZJ$F$10=!lCk2ZSOf4QR)SZ2B82@-~Dm8cSkh6l`ARZ>G3 z$q%({t?PZE#Z>{Ae#o=tm(>jow-SqbC-KOVE4ixv;(?cU-*pp;UWyez+hOP>_~UJ> zIx780Kq>92%J~iBzFSu6+$-JENpsL1(aww18$9qe9jT>siZZhiUPyaAK zlz3e-P5{;FJRTyJQ?#oXdC((;ulW%=Ey{b4xP24W7J=?o?0UZYJ57SYrq8kT2J@vj zikPp}9JR&U>kPCkKjorbDS;t1OG_B4%q#DwR%{L_+BAWi*v4_~vO{As>T{R*5%9(9 zH@fF;57suBjOwbt8Q%ochl-|s4Z}e3AhhbqTCuyqaML@R#(S% zB;@@qe_u)Z_i?)Yqc1Lki>?=5V#Mjq7*asjR%ZGCFkJm#p4EWc z@h;VY;JWIgr`d{%7OD7uAMX28L<9Bc#Dtc<{`brM*^rQsis4W$O#=hB!-aZZUnIgw z{q0Tb7X$>$?q}gEv1|>Ejq+}=o`_s!#3ol9hp}i*sk(b^Zm#u6N_|3HTypaK+?=TN zEV)E@c=*{CDmw-i_;jOBfBWa(G%VUH>u+}v85qh}z`7p^X*r>8du;)=3vZ(DAsCJVKe zJh#7;tc>6?t5MY}U!I>!HEw$epfTGN%ui2h)Bo0zc-T2v@1c(t0(P}CKOqQ8Mfhg{ z8BXbmLn&Ioj%m>Bv>q_->R%^0&?AudG( zF15sD2YhcYf!!7}OF%$ikN#YU)40K(YOL3)GB@|FOX*R3 z-3RzIhrS%kNy*?K{<}mx>E7c^$StQs^G(3Unfd!9|8L*E6==*?S&uX%Mzl~IMWGvB zd`lW_ICdneyPkjhB1lbVMgImtx|RpYPNx@FI{rfXwIm`uZ34WaFHytO2A43l$b; zTfIO;SXo_NsNoyb^bhs%3}Org`LSpA?8zR~_=d9$`sVU&q0R~U_HFQLN>**a*EqudfdR_6@|6e(J!;?O-jo?< zmO-m+zk-^4oci|IW1C*HaQmyUE;&e9~OEfzhO;vSa;=1;G^XmM1_ENK`S4RA0| zbSPqo+OxB2e10>l@(T%x&4>ONej&YK|BNnMf1%YxLm{I; z%C|}EDfX3pdL?02{qk%Lc>evK_kAf3Z}xs&L)a*408og@xWE4C#))0*lJDpl0aFG9 zDwSA4PYoTQ8t>m1t+k#pc^^X=aiouJamLZ{_19s%&v)#hxX01pKl!8sm!#6bM**%cF7$H`l>yGT3 zX9rmh8>kXH)S~P{tWU3bUPW%wZx9G9LrFH?Nsp>@rKfu$`nvw`57g{XypKT5vo8#} zK7{kdYuoMc6$tZ=P|?PHsmSPV& zztrm9({=m$*)vXEm;!pSyAZmrWiNqr#vhMgg{7zYuAau&*deyNiiH~1oABP`cTWep zLP@3?%HEYf#qh`e1_H5iELF3;9|`+P$sjhk{&Vp?uLBRMz)~TY(yELuh)o85p>j?* zU3%-5hiSPu8^JUS_8hGOi?b<7k9Jf{;%x>+wYXM{$Ybd8U<2Q1n&M||=kKy|-iOC77J}pC=j~#U2F+yy= zFri29A4+dem zqmHkln-_U__6T>bpp)?=_3gUC#K8gLMO1k?0ee0uPBc6EYstQ!iyKXxTax@N-th0b zhW~-UD-YQ_Ejl0m6)y>5F=|@_q1TreY$~9~n7EBDR16&G1e;!rNZ%LxnWA6M5`4@a zG{YJiidl&T1g1{sdFs~MU8l5?>k9Oed&`%jz?9JtOUqtR0~AU%OzRXy9h?m|ChqO& z`txUJ$A&cDy_X9}!vjWI2@^e@&Ui@zf*0q51qLnV7#$)e7eAPCHuh($78e)szU6M| zyByBYV(j_oe~{iDNuQ@C|C9iY7{a9#WjWIk6&20OswtdcNTyG>Ya7Ji9_%9a4H_BY`jZa`Z6XR)W zEe7xJf4(bx75v<^r}7m)q18`*A%_TUpNk8%7Sz2ww0`1S=|43!H7hHzCg&iL@q_tn zqfQM%Lc(4zd{b85R)eZZORI6=JNZZ|MVeEt?UziYH6TH6O4Ag9Pr7hp1CR%1!{^!1 zE?C9Nw_*$h;Y{;md~!hr^nN3EgX7QDrTu*ol=B>gp2BXG5*~IF-Qnn+6+2`#gHtEO zycn8tP>?_mf;+H-(aQ5pkkMy$9}`hR04oHt$Wx;l2;B|9rdU!R<}d};7|&!Tg*j0) z(s7E{_n*pMc~ZtZ4p6u%#HL{bv`KAKkEq1MD8qbIk!V9!7Tul5Rk6q^^Mdv=@m}_? zpWyG{rrwr!J*U!FKo4NT#)^IybO?`=_6s#+(gvQssJC3XBSkYyI;MjxNp%-`IBXE$ zCdRIxfp`-2nj|o?Qquq^&|0gFF5;djT2vO;rj66H5ro5OLZDSR;s?KK0k0R?b&su% zn^xpY@~tpJf#<*rEwhVG9$D$95yD)Sh+mDeT&|J<&P`r zNrJp*e%3+VRC~_D?v2Ce1W@^?Ii*zp?OE*nTRHo=M%PGoI}~kgsanhHtA`o=TfeZ5 zD^SPzAAdv9k~6cSJcz(U1aTs!v__?VchC_BoHRqn4} z=GOUgu^q=fu-udb=SE7p+*hvJ?7hu6Ag;HG-;5XemTf@v3gSZhbFi^^8QagxR6n&! z+*x;a-d~!ZfF{M2L^aKM#Ro}ue$dte5M+|%JcZeoQd?1lGG-0Pyx-5d7pD%Y@!KUn ztaBK^CTa_+NSM3-3L)!Mhz4XTard0TzF9igvh}q!_EjK;cN|E_pb!#5LgD0_gHhN) zphX|@AH@glD$~hcP6o~8^1QtFv-SSpU7Gq|131ZkByG>D_e0C+#cY+efq8pzCy0VG zt9(y?5{&#aDU}_1xMiU0N_0+68239DJhr-;E|I$D&cz#rOQ}uCY@p5?M-_txwO4#2 z?h#@{HYZLeuu!bt0v7?B##_g& z*?7;}%LY{yDQ04;;#bH}B>J5Fxaj2QC|gA>});dqZty9T$5@PC*g!!c8U+S^D5`VX{}?D&En?nI^- zM{70J6ayf}Vkzr7XJ+a}aUxV85QrEK+JetyhZMTM44Ce~|M@d-ApNp7x)QB-iuMsw=qrB6ZNtlonh^<2@$}VOMBi^_ zM%KV8BX$MXE-#NxQqor4E@5R;JyW4?cjrU7a@fnTP2I?Q!Dv(%lr!T+(S%uI$q|t@ zoC`N0qSL{#m!D{gZN<;ULEbbu7QG%%EbNG$mvKux02hfMN9s z<%g!DT>Hq9TH8D?68gJq>~GxMHvte$Y^v9SS!gZO%(dWYs&}S8IaB(;Co}p+AjEsK zp9tggmoL>#S;On=2fMo(A3xvBx?N0U_UonGxZA5nEJjXIKFKY&9!}AvMKnM6bgBDS zRCtaPvNtodY1mazMPGwGBcKl*YQB4~^t}u)JoJ9%;mD@qpA(<=Qr$L4uqt@_MLo=& zuHK3&>rowa;TMvOi^+5n5{;iWN-M~k^k%;bK!cV&$`K9!MA_pq)*wIx9>GtUiNBQ_ zQ$WO^oV}$CN=m$7_5&zOBP`$3&_p1632S|^8JMiTw~u&nVUR3(Tph;7#jQQA?we?~ zJ`&?P20awZ48(K%v~2zGA&_^&NbBs|RyP2Wo%SYKjUs77?dFir>3ozyN>Ck0yRjuNu3uyxw#tLg3Hp9hR4XX^Wn@C^-|{?7YJ0 zu4z-QlOoVepL5$FW<5LV)&K36h#0EKY;^N|tU|nN@eQ6bX4d+BhmvK%bb>~;FFF_V7AjVe?!gs)|=H7<0 z48tDstN6S`QMgQPV`DQzNpNPY9(7lkmLz3cFpSj@Q!FjR(X#`E(EIxDv~Xv96s3Gk z%1qlE+i)TPHtku;CB>(6ZuZa0${MjAR>v(6R>Ef1J6bF}s@t@0<#rPMy541sj*~95 z8AB?K?&Jf%jiPtr(mo!AQA>Im@wYme!W{Prtz{2hPN{WiOWKF1jq$x1(zr+a z=A+Gj<+-@yaFIq8ara8s%8C*3WG^Qpts}ESjJ*;9#IRJnCgo8~q-2s1mz21D=F<8G zyFg(gONEH3SD`&hCfD8;mbegEsv_%YSd6&Q$KJ5>B|zQB!oc;UEYsqa^7Qm<%rB5- zC%{ed8Q?3MC5~;oc=5o%XP044>?gZ{O+M`^A?8J0Vdh6AkNtLgb8{Dg6wboMrH7Qc zKXFQaQI09FZHWCFHa-1*V`TUO4%4Ayk@G<54c`oe11)_|3pK#4iA4=PT*8q}zSJv0 zPQ679W&O`ac~Q~3$65LUT%&hZis?o;4%4pw!dFMj@?(AJu&T-h$$^laRIv;G$MdB| z1f(C={hGz3@qGPwian;&A7vo)hocuq%ZDj|4KnE!R`lqqYo06E9Y(N|$apA5G>vHd zsD!sLg-#w9zFdJ(f3IGLLdZWZlV3Uvf|x=*!eTIFJDspCG=2UEUcUv(d1 z=ir#SVnbd+pTwouG}YH<(Q?)9o4=wH3QcL&kO$Dw-L$?cn;nU!y5ye?_G7Dwp*-WA^8M@l=PQ=(nFeXf)hh^gwiRDtewbE~5ru@NTzzJTx~Asm zn*-*jtl5sEfo{huK5u1+dL<)@n@R>7A(*yycH_@=7o(i+#pHof^0VoC{v%8OfH5J{ zuyI?e7)zh3&{jEi2spCbw0SKv%IZZ-hiXY}YrPyUN~67vjibwZ%D*g)<}VUhn9(J` zw&DHUhNg+NI-0B}B%kp|XCe^7Pt5bv_^TyPh4IyoS`#fjjD;$)TgIr3jYxRJ&;Hp- zu9>J10Cs?fKMh!izrttOSwudwLLd;LVxrR}2BjaJ!aNL(NvNQn9x*RDyH4_Q7>dcb zKEX=J=J#)2GDlG3n$&0I>;EE^da*%D&;!t&(Ae-p$A3}@tUituMZVV{b8?`@>keEO4RgH`eN zv`6yJ#9Oh2??1ihd%KLOgPmQ&Ybouo;|t27Gz@W#qOo))6pb6;;L>Ih%lJz1{`2QGlZoePGtyP9o#e^tKCB=TYdOHFa{3S_G zd;+0Mqoa;?KMckU#SQ7!*0t#rMjO%O{=QS`Ug1_5Q}6SgF{j@I*Fvq1)6p5OxMBZY z>GT5#c+BU|CnhHNczMUsNcBgKX%<2QW&gXfuFct$+7kfI-;P(>fVuz-75N1PHYHUu z|9u~{E(Begn?rPwn0{WUI~h#mi;j+FR!ieYEQjk8Q&CAw8;~1}kB{R}Z-w6cyM&3w zYaI@Qm3L>Xqp8SagS#8rJIS>CuB9?ryI61O=zLhdgF0 ztrVV;(-|RPeh=W~)ZHA{LrIwV?F zR#pWqBqfqPX2q@ovz2^ zrf7N)6Qb4Op`q9)VDz`CDCsB#wiLHH!0~9Ip5X9P!m}`yq~v65=X1nTvxhz_2glE+ z^e+ViiEFE?X}Ou07sG)N!LuTZ4eabl12|>obYdc+V2Hy~ zlY!iH8!*DT9xatxKQU}ei{~&5Sj^m}xo!5kZwPT*>%@pRyy!p@a zmN;{r2zd@L7evg{p5in#G;C~2(*W!Ip)bI;_1FWW6Z18Bw~?M6GZgA|k3dGl>CI0} zOk9J{*L*Q-botWug!ja_!e)#v$3R2F>E_hx1k~F+2QibNvO56gw}Kf9ABg|qd})*n86P*CW-IoqB}Ui_c;5ufSL z|1m_a|6egg{$JMYPDWv8U!4Wtmf$|W_jw+#p|3uxzS(4W@o)KeNC3Qh(AF|OSS-O? z!_pSiuCEvd26~{Pldfb!0)IZNEQ0aYUh0YfFCHpmYP#%~WOpYyO-4(Agb+Q!?Y4?- zG#ZbvDsf)TUTAW2j_(6v`IDVpx2Tw<%}Qq<=J28ufk>=ysYMbOukYPvZS7=MU|{Za zgif3sVS>B;WjH|o+U=m!fI7*}L2J}u1Fr%HX1+K7!bUTya9q?hXNFbr4B?aUe(m4T zE}|lNh_6y)C4*$Vsk%iNYFy#*KFo%BcaD&+Vt$W!!`BUP9`p!xJTdw;cob-H>?FU+0g_czv^Sos z1eDgdZ{Ma__0cjiGSbr0nkYww5uJmc11e@Btc+4D?kjw{w5*Kt=;J;xU6W5kAf=Sa zY{fDH)I|`WXcCc-SX*1`X=|@Ix_fxwQV9Q$K6{7bnf{wuZ3&1xEP{$K!uJxfiU)p7 z<8yQF%Q;O=6!5goPSZM%D|=ntY5nbXnT7iP=VjTe#Yta&B_|si7>L-|v9k72H$8ft z52qe})V4TC5+Iove?6nlQv)r7Qd(JA0i=!J;YoKmISHo`=~ubn5pFuDJ+->)0pr-% z*hHR+Va?}R5>v1b(MaV+R8!OIoZT*zKK<1Sh{Iw7BO9OA^i)XXN+RUy{Cov*Ui^4b z+u{u$ij+tRi$zAe#1)8cYFYrgukh`k=4Q{WFtVLP903Cex3XzqQucP_H838|);dt@ z^78WH1;tkE`GiUAq+ppoH2n(VTM)?<5fS-HWnpe!&dV?_#e4|>tF-Nrd90*#pwFd> zg6t+w*Nqp_;cE?J9>*Eau;-3Uyzg_p?@3Bf2JbPS9kHKg%SYld(~CD374`eQR!f&S z=#B26`dn}v0$KiJR<{k`o38+NuVm%Xu-53}=Wx1YdQ8m5zLx1N6i;jkpr%$D+6^Et zm-&So5}xigiy7NpWkMp!U!Q?`MTx5qrzqT>j(`E)hs9{HvZ`uRtxllKP)22A{_XO9 zNCefMZgvMZz%Vl!H5@LtaCy79xBwLSIIQOteqgV2fuEdT^!{QajQh4Ap3AhG=`f5Q z6Hr5s3q`b{ztdNjzgPH$LX#m4Uq7PzUb|~)5loMDnu$-jQEz>-+ne{k>lo#`jd5Cm zpB_A+q@>&#%JSXZ-WCfznuB@fd%ds*Oju&tc-E$4K)+~*9o$>!qjNS4#BqcM1xcw$ zE4aE|0f<2em^kdFiU0ti_~-ii8qmb$4(G1tsY17YX?d8_7;Nf~tWag6Ou_pfE8p^g;n_VA$ei+!=tK7W+$VK_)mrC|wjJj2H4S-zdhzodt2pHY8jR`#-?@9d|%SlWB?C-|u?>g8W!T#thj$~JF z$NE@>UG@`1RW1=0eYmPZWhyUdNA9`{2MdUP7}1W{(M5@S6c__=xRWzV*kv_KV#nX# z|3k~LM3+33G9Ad7cQ7LwWQqnPr3&b5bbKX41F`YD5Ey1C-WU0bxvHz%bgto0T<;Z& z2%{bchLh8O98Lhn44OhdmNP&rGX))2()Y%8-plgD>0K0clvZ+Z^yOWc%RUgeLKR%APJUsu^UX5+IC?tTR zCy*0R{F2jFAD^ff(9Qjg8?&6kWiu8OViRa-CF@9EI1gorO4#@V_esT3NQ?0c;m*+qaXHWSOsM@ zuLVU)B;)Q@)GV3A#VK>crBYC3CRj^o@Z6*-N4ad8S99_J-ja@KjfNFHE)?;hEwR#r z3Equ$a~WLa*xy4< z{}V`?47bhzwDmR1CYiZnm1IFGRpn01^KS+62cMvvL@xx&b8}H+pCUMQ(3eSMia%Vc zaa>HSZc#~@UU33#__Fb?%poolLyixnA|N9BDequNkfhU_uD7VB#wEpLIA9`xe0;lr zJpuFc^V`h6zW!d24!Zx`Y}lv_0}V4$_HivmzOS|S>i>5gC%v8$sF53N<(kj zt5v|1<21kd%VV*gtZP~?H>N>t(jV3cJ%Tzc)l!6?T4-4qzc~DC@2C0YGm^*eby3h> z3>Fss8E=R;z_0eEci43IUN>xRBFdu48j$);%aD3o7OvtK=C#F42UoS@b2Rq%reBpSIjcs-J z^ju65D2_%K)wVOWfe>>V(ZCfPPu3g)-6x@2@KN$zXjXR65h@OKHL4C$?C9vLgbuX} z#4a}ynKMu`u-r%XR3c8{7>5cNO|RM6vD(9lz_|J1&pH3#9aevWg-p{YVR5&@HrVY3jtKmr2qD+GLRq^ZfsDA&=c z9aW7wvZsMG;Si4MdZ>JJZP6K@ug3>5uDW)YmTsDR{t)wR(u!!n;|NO6bG3it6l8Ub z1*o1jDWNBzL<2M+y?uZ2KLevDuk;6^1Iz%9ML$0|D48ma!Ncd=Fb}T36*)H{fAe^~ z&X;S6>y*Ggh)klvfZ9j=DbRI|UOyX4aff9pj#+@{tB*Xg$N7%NB;AIJN#7=S63o+6 zq0&A<4oR=o2bkhMbO075i^r>;l3<))CrSCE9^1 zQklCXgba+X!Iabd;*yS^{FOxL@pqz6N+89dNfhkRNSrEWXxX7sV*xJCSgfZoU<}D+ zb>4Q<`o^>=m-PxQ5Idp^)`GB$D9KJ7r?+?$t*fKsdHiszU_G#nM8buE zV?OFw0C?f!jlbt||9b5H&#UuA>rrS5jrTORG`^?`L^#83q%zlS5{^M#?*Lf4{3Kx3 zsD0RK5SgtXHpO=Vph^rZtVx1DuN^`_h=%m`Z57n|wAmxqbXAqN-#u<8AcpVW@ji5t zpg|vi`WzY(0NRA_G1}B^z5P7%!+~1RbqBszSdx=N|5c|W*Qr(nrGUHX{itM zBFK*|k#XU)iM7nI&V98qycN)@$&uIN`(YeBVxpoh*jScGJK5I_ypqkin!?J|DtNl1 zb%i#UcqDzqBqTCsTAG?0Y6;7`6Z!bFyvy$k1sPtvgys9R0<-RCO?CAjayrr!a%W`_ zT%GA~>u}kvt+o9OtmufruN8zi`+^b@CX+^YG7?=srMOm;ktJtxMs`4+ub%!Qs?c4L z-JxYszD*9wdC))g(+a30`qUY+2)l6WUW4OQp>dH&Y6%zP4&zx-=aoD^Y#AB*NwjkY z%Usuw?~}$MrwD}%lu80H3733LtXN)9xf$wmuy+L5Dg%#hkNU(u&j$Fb-5`L8L7nz( z;OKmt(A+6V_o9C_-~Ij@sZW^5(m5!!q)|~rV+@$Y=T#yo#h$73RHIxV+lL2W`Ru7Q z?xIE_VR=4J!1H{eV{zFIB`t9_2b;z9m3}qfW3puu#k*%t2>WlY%6%tax;a-SRuxIT)8 z({KjW?xpnMVq;(x4d2*_=QmyN^SitA3AF;HAXb71zzY^QJK?zq@^pL?)E6}zDs#T9 z^tC$!;yLL_8Ti_{8!NGLt-Q@?3(lg?{|&uux2&WLC{_O}NU{h|OGgUhf+8BEEB5c@P1q@+3XF0G{Uy1|_^{hH*i znE`c9eW$u9opb>0sKpx~t~yd0N|9P_K4vZiH#l|d!Fd_^#l#Hlc{-RPnHc*Jzgk-# zF!=s5U%V5P@ybSnmd+p@nKe^S0r|@dz$DUZXmy^Dwn}8$vq_-Ke8jM1HSEF3&Q2Km zVp)Jc)c5w?pO_dze0pmhr^R3VW?nXVG0c7I$&G_o)bmFkGZR9CJ?+|>bS9U09+kZI zuV{O*QsgM=w*sf)2jLP`YjHnx!=KgpI zwW6$a(ZhR@Y1F;vk&+KAyBSekFrAO*M!}Hc`u(_lz~$2*5r$LdJ-m=gEmqq^otINb z>Mi{YXphGrw>ZN6nF`~Z1~V^%92J?+T9=`h{-5XmXb5@(*)TU>%ySOHl^~j&pe!J| z9?pt654_TL_7QbimwQzEvUAb@P9{s6L}Rd1)?D}AmG`pSTCRIRqs<9m+jBtp4{CiVJVST7j;fG3zx#e1TI%<4WC+3iwSam0 z+_vISvU@9uRzR4A?cC*@>-oF9nwsfQ@x+RYi#KnI53?df?zAE4WkSr^BSB5n0eBET z&f*1i>SNNY{jYu%{f5B2Y-`KUq;_T;W z4x4}7=Rs>;p`JV(U$i;{ZqAS-Qbn!ydZ^v4-e@Y|_0gT+i!1Zu9Mk@#gN3~xC<>^2 zR{H=NgR!&6L)>7E>mL)V@0i~epxjX;RD!G40xkr|m)csGp@;mxJ2>t8POBOLB&Vru z(XH@pmYCA_zJoVfpFVvuygSHJY`N>AemuUdT>>MsnH5W$sitiX(E=W|QWMIpE|g&J zf8v0-*(kBcQQG30fjHuYdcJXyHqLVTefu0&**ii&3oI-wY-+k&{Xm0bj*~Q3nX6<9 z91s8wI-FX2JsfPOd)oud(a5P>5aquxdR}JudFCwOV%3B~-4)x#e^FyLSO(amfPjEs zzh1zcs3g6@goAcP-y0ar=9oUL0rY|UUpE#$dJiU+k&&Sxn-AbY2MiL}&ab_Uujc@Z zAaHb|q@+X^-AIz3fkFKK6i`0|zswPmkmUb*-}rIpqNJqCdbmJpAD`U(3BDxsCz-hUEkci*yGt;S4TSQ?5uC?52mzp1bE5n&&tLo_I2ZU19z!M9^eIKg8+`w z84xK2bOdp4Rs*}1Ii-`1kIv5r0(1k_N7$1AeLU-7=n?VBD2?`T$HP;?nMt&6MDlR~ z9h>;qSPu!9($ihIL772j>g9Pc4})BrjrCwcbb7jER-|z_P4>p$b#?Q=4Lo$xmKZ1yBMn^_Q?;7hT&tm^DXn}}A0wbJ<$)>3 z&S$&+PVgvzr)D@o;(nz~*y!|dsaee9lHC&5ooTkl0S9Q1fu$ckPi}T63UNG}0R-=M zy+5HA6>+XyR9x)mr$_f!KrW#FWiUD;!2835eI6iq1+dXJ^l!SzfC zK=A$l=sL@=DBJGcD+UPC(hXA5p>(G-l2SvL(j5cRJ%rLBjpR_$4AR|5Np~nEo%`Z> zpZD1Rz4x)d_+<`Hdavxwy_xObz8zu;Q*V1G2uO3u>#SC# zi7uYG9|V_wtPzr(lLOBBLa|ZO z_~hvNY!e^O3I?>hMz{8(So&#+eJJJ%8Ui+nim+|LomyBx0JWW2e}a^xWY5jFy}dnf zn*#jp@UuvxC^DeZArGuL>pU24xjOuG)Z~wALwRj$MBevQ^~fnFCsj*MyRfdNJyBR7O<#c z5&JKw+keMKjf|+ASfbAEf?D^Ze}K5K#=zX1-rDB%#a~55MOh;-0zDt+j8=kS2<;pk z*yq|`9$U3H5kx-LAT|AYMEG3pc_~YqLr>51*$?r`fxdS)XJ>o!Rhv5p%k54Z1Iavg z5*v|wy1)Y}y`_XiWy%d6wc)P>nYH3ni^u|hUA)&$^o*wV6vF(> z#I>ktcv=f+CB1Lf7n`a@-rz55v#~L84QT0@kZC@e^4}JBFMoEcSL4hm9AAj~x8-)0 zJxJq){GTW2Cyo0}HE&(*!>g&U_w^yE)bNP@X(i08;EkrO2-$9ji`Tb{xGWif$HJJAfrE$vBETmNC+ z=DW`z3UYG(-0g9B;}JICE`F${ATR&H#zyKMc=wzFW(tN3OJ736aw!qA-NM8+i@8}@ z51*Ck)#FfYkr+A=35P5hLr->o%38PjKVjEjJDsa{LYb?wP;TH$s&?8`(tgdqCMG6k z50xN6>gGY?$Z9$;oEDs1uMDxlPD)96<#&E7Hvl+5j+jgp2`TAwD+HkMw>MWTJQQnN zF+{xlW3Bv;iTT8C&9bTF1{Mh7a3pRWC>gX#8#7*n6MS#WV9Jd|S7qikmF1fpO_7+x zX5r%_^2iYJy#;$>h}v5eDq;UB{HyUowc}s6VvBp0LjKa^}MOc;`a-xI5 zqNn#5l24UGIfM7G?MLLZEAOQI{QO5(XZ@0x5pWv4c+e9dF{^Jl_c&19)$z*?BqizN z;2zbx4yMGq8~>Dmba&ncde!|^Aw$LfDIZCM2D_g}?x^WSt0I6S^g6HYH3?N{nBv-y z6j-P`r@(U=fl}lf=@Z=`gNtx2ogD?W8ZA4oJMFc>WFFeLGq$jnRWyWcQaq6@DqA2- zUJKtfR0NbPhv_oKel90+wA`ka)c4?8*r@tQ)!SQ8LEWxOQi4{|*)x8f>36DV#ByIz zvf2g+9Z;~c9f|l9Bu@%{R6+v2EZ=ER4-ik&EIxeraHSEY<4h-oZ;Mk8VoWZ4eJl`4 z6BQQb!23)Qwm0;n3bMSsyv3gB9Yb4B6Gp9r@UAyw`a*~yH#z!H6qUi~?G9iX!5;IK zn|)g?F_O3EtI@Bp*B03qm4oKRc1IbH25XVA#Dl|It{RLCG;3^j6Y;r&S73dOhGiq~ z+rOw|dl~`5Ca`M~Tm?!XKOPYBy`AfC@nGbkw-`!<==kX2m`6uXd_6D(fTSuS9v+cf zC`GO|0i9po@D%W*Ut;>PbonTxDaMBvu6uZ*1-Y;>U8BPziUV#` z@{%7zz`faf9rUxf-4r!yy&0+QC6!7urx|#7R(5ZyA_{aZ2$&#u-W!oXudOYN2T61Z zN%aNRDusIPfv`STFq@}=k>fNu29a03WXD1_6BPJ-3l@e3c>h2zz)z1egww;BBIYE@ zuNv}R{w!8e&!{N9AzB=QVR$gso8_OegQTu!hcw=OQ|MLQD1ZA01_Dcs^Qx+<>>hYG zfO)%Rw!+(v@FN#m*ulr-`K)rm*f5s}_%EKB2A5)T9Bgc=eT6`{#2&3ma9%vTKNTIw zn6Q&FGGKGYY#2~|MN6@F2QHE^508Y=;Ifl8G2N&XDBG57t_iNR2>wDi<^p6K`QU+ zUe8)2^T#E{EDcQ2y!rSk2Qu8(rs?3|U~S-KY)m}~9NXRO$ieH)(+Ol$P~JUYQ?S1T z9g+2IgNy57^6gA#UmWhr>gd}~POHXldvkpCt`k#JMxTK(DRTXl8(MJSBy=_ssxdVl+^Y_7puI=l$!F>w92GI_Yo`^M1tgmj(2& z9ykk_7+8N3G(?+xw6?D75cD`Qm5_Ke)(vw_ono{DjVUe?Ky{4EY zBtuZ>LX$@i`DCnevRA-UCSKlYGDsqr*r@y_7>j%q+wFXul*pwv|i( zk>Pnt@chfO%AyRIRH6wGcyPc{q&##UTu4?jjDh-#s0J1#bbn6+^T7USdp$5vr?^R? z9J*bfL1C7)R2|mF(g%HboN&zD9S)hEyz3fl9VL&~sQBj$Ws*2z2CejLe`7rUVEDSy z3E#$~NHx7=SD_0ffteE&*LPdWi+tsi5WcZLTGRV$tbWQvLi{|=+;shfCD1P;Mg936?)I2?A9P!3<)5jBFJD8K`>FWb4kwM&+ zylh2|3HxS0TRglt>F7Z&=}D#tA^*#Js#P{WucQy8&e5UeZGfrlLySwjxgQ>e%;N+xc;P2V*Xq!Q5)6a;I&rkMg zi8g-srKDKbH44NE2=D{7t6-{ZWJFFo(NLKML5@_sxmrPe{rm4 zHe!K=EgniX#d5kJ)Cjl_#cQ)}Sh>J&XJ=QLYqWdbH8Ryr0Ul>A^8sGxt(Yp5{zNuq zMMbhfW^D262r+S3+m-=9Rn*O1}hKJLOkXF2jcyIsp3DN zNBsJW(S@hZZ2-kel|FOmQfVX(C+UCxi{RPGP4f2$Tr}ICE&{q88_h{t;)22d9zmxQ zk3G!=;+$}e9|;G2YQ77L%zuRkK1D=-S5iZ>FYyR&K=x1%gz37*x|D} zi?nw{|IcsjiboLZo+)`l->XFecg`i3ORaTa!!9jb zy|}1NeEd`?ou8K1eI4Ke^Wlsq5D0*e9f5&>+Kj|tb-c$T_5>oMu*Hdq7ld`^s?ZzY zgXZFbr-Ma5-EG0=_F@yu{r1}9`VMG9!aP9DxsN~_JIlNBba8oo8hQin93WR#L-O+U z1no^ShY5dnUVa8D03K9{#6&dz<9aHe;oW&^4elFL_#|mtyvKrdLLvKq{y;&T2$`as zzl}sUU^Z0C02!UDtr1!q7#NV_eMbicZ*=A=mV;z~_Av18&#ZwW9@sCR0#b3UD()@l zOyL+U`~x^GjsM;wFHrsf4=N$W_KXU`KuhcF%=fGq7_}7MzBQ9$gj^C0mtqZS-1%)#bd=kg9@?RbIhFqZJ(hZE|XgbjGmr;mjj^N z`?e5-+w}MK9azcBx6}z7yAZXoF*5RbZA6-_L}guE`il%h0L6JF=(#y0(tNgeZ$)6K zRz|9D1Hn1}fMoH|uPgO%-@3*FJD$WF_@J4uK)Lqh{P78>=H2bjXTM*Wn3(w?OCSzM z@9#oR$Is+oyI5HMc6Axu=qAxeH3#e+v>jRSM}&N1X;(kfn!Qf79kacK+}FcF+>GY3 ztP`lV0RT6i@&I*l=-~FQ&*OiIemF=wy)E-^fz_SeeQXN3GmCXOX-P$7B*i@Vvj?1& zQ~-a|`yL2uQXbx2ufW0C2Yi)_a}2uxfk60vYN{ioYJki0-VO};G{~&)78Vv@E&Ti$ zq-XL@BRXd8Y%lpIyia!6g>o}9A2jIc=v;y=2!(sHqUm<_1CT!k^SyuK`}7G* zNH-G%*$Hut<1q0RU@)4t=X!) zRiE)aDMl0(RSXe>O$ThNgy4@mNZa`!^e4Z*x+?ezbJ+vi5!jeIz{V6Ramml0aea2T zF+FwH?z`o6TFVALjePd+{CLsk!7sWYSK2$ER2W7n$2zXPMh~Dpp?{; zNw+`YuxOE&%jYS~KmglG;0pzYB#@H<+%y!{*0-V6gg?@Q_fmt<+BJi8kVr^KRFMGp zEYEOVZUYHEo>!|MmaxDlm`2~WLIhFIH_k#M`Ti*o;E3D%_49sG1wxWEdO+}l&+^4) z7rT5%x5v>&suE<${cO+vowQ9FfXd__-Pil#K}UdLF~!R3&W^Dd+qjX{e4Uzj3!IbM z+uPf%{H8*$tijav4fRKGTYf9Npcymn;RLgm(Hnd0i=SFPS73^-jYJ{r9coi+Gar7E znYpeF{A$GY&oOaH+kj;wI62g(C+Ac5A`P5K- zdf5IPj6B9X!BfK@A@~grvXz8=uH8+Y1O>NtCCoAlmi2Qmi z_`?A>ry^hZ9{Ck07r;7=VzIMo%SX1WPZn=%&$oXG<$%G)E9+m8+v8e6!N&SXU^>(C zzV2Sp$O2|=aJWp69IQ^h=?mH7PWEhNEWLa2Q%W`rg zvh|1i{0%5yOAZaUu=s`6yY%BvcuzQe%zo~r@9qwi`(R`U2r3UpbAIB7FSI~D zj<=~G6a4L48LawY?-L8)^Z`meY+sOkm6JZ|7OpswOBn>{f3ALAW}AZ}Hc{%gR1z@A z0Q)oJ5Zw^kPVn-UGv)XD+N8CnM^IdeR74nz7IHxjnbe?(@k)1JZu~ zswJR0U7@B412Fya@S`J6bwkz1C0hvAxWFg=K|0~__hm~NWy8VvXig{~>{cZ? zr)~5vD?|Ii!>KK!P}p8X9P#NDMCP%3)^C)Z0F)T25*paRaZIxL5V$B`;5nrd9xKX( zuV84j%-A?9s~Q~Hb-C_FU5-mJT>1v1Kf4>!G_90Jl9s%)B=Yv1_ZNg@AM0EcoGnPD z9UVD7wp}1)49h8Og<&E2B{cuIR`ygN}IB!1B# z#Ay16$#UfQ-$a;ifd zW%EHtew&*ObolSKJ)&=Zb=ko05^DbfkZYi=-A%N;vSm|7+0VRN_ZXF z4*M6?&JegEu&>Rtf2HW;|M+|bY59|HPaWIZ@XBu24{t)0kXaB4i_=jPO(7zEx+JZl zOaPWIUKxfi0Jy^p_NObz{K}yEUG-Gf+A_$!S#Y>60Su3u4a04AWMpK1KB~{2oAKEw z5J&x*n`0(pPtJHLN_tWV4gNe%70y_XB(k><6$APZ3`N!Zll<5R&@%NRV3(kd1vA|Y zA*ZKI438xnGvb3zNO)``OW^_^KL3HRdZ~)$VEfBIsOi+ymN`?%6WmH1^;wCu0Ma<- zvRJmPXW>9f-^-uicIQbUp81>9j2_W`e(F+^DV5-=dEu$6`|HR|-mFQkY|zr9a|+}} zQMLhSb44aZ_3(b~=}08{LBMLsf&2Y$TM`2G+>o! zeQ8>bAFH}3$*gyNnXgEK?j-!_d1Idp7TY<#snkh!hsQjQ+9oXGX;W$1; z`=mea>(_ne*S?b8LX?KA>bip^_RG6lJM!)t8hC9}K_T~b?%7X$6?#zEDJ2&@1(nps z+Of!Lqs^~3crvIEI~&pr3~pmb0oAV5j0^*jS4p5q=qmvUDHujZ1 zjn#pQ(REKwrGM`|WlL;kICx$0vA6}qpWl836+(V%bVd?=??q5576_tOICIr=M@|6AC?|~P{&sOYiV!&V9~Yj zgp798T+NuNEpA?cAary7`3mhzc6_|1{Rt-to@RnWPD4 z$rKCBcvNpUy{4m!P4AG2l%5F1G=6L{fnxn7@mw_O{0H*GoY;_19GdX0r%xn3P=qOw z{3%g;a`qB0dllXnPa0QfS87k3aaotBekgliWv(%pa+0j!G>HSzTJS9;&@1+?^D|v? zo|>q>3%N6#x4D7bX^h*Ecs==Sp{}lejN)ecl3TVzmR~dgbe;?*!(@XK>WW&A*H=(i zZS2Bui5nz0vS=KAUwjBuCR{~E9uD|!xKRvGczZrp&dvkX$B|r_dR`|xNWpOm(Hh7g zdwE;5t$!VbfHhNL;xGB44EOa_9-q`ZZ5ZZPju}6v-l3R~#kv%5+v~B7jtT>Vb0@*A zu>|%7IyXU59M~o5Iw~XOqe@hD=j@{M-lY777Te@6b7clqp09o4d9?c6SLPdC3oR{i z&L^i>c1xxSlP zektUd(b~Y(LunC8t*T-#9X0yPKB*PJ?wyAl;aIq?2QGTHc`5ji=*3F2z}vvf5DJX` zbWAtkHeM59$TP{%9 z{evLqqvRMR$lg^$WNk!PSn$g4xnxQ*!L+=MXzfc+W8-KS-~r4oi?ML%x@G6}2jwDL z6q$hdzNhK-?z@U60S9AGPyTlTE<5z`yn#4Y#%9%Ro)-k2^1AEY^n!!y|XB*l6-W-f~}&TutiK1>J1#`J*1BpRXZZa^ey)TPAoa zG39vEqNXkf(0O{v2hSkDtt)*siK7%llGGn^JeM*Lh&*GCkqjm;c* zYn%PhMr_ZiC#tAlSn<$T80;Q>@u`)=eZu(J`aCcXE6u&mJ~AS-^Ql& z?DeSLWkU%{K?|`uszu+3TWrv% zgUT2D8%91mqDcn3f1Q*rB)*RY$G^B;662dYmmIu^fMaSZV~%?`XJ!7VQ0fwP z6Ran7dy>L47Njo+KW0@s_TbbZuLBZHs}FC*9Ov`{suDkjZX#^IoWO5OfB#6#dkaY@ z8ZNILHxU^eygkiNEll>-=b!bdaOXgMtaJKmw!)+v%b(MasG4#e&&5)Wy2C+%pDKKL zXBX-}xPAJqT>=Viu3Grk0om&7bpS02pVL!%OduG@C*fd-!J-^z8b16!GwwD4%>1i5 zhQzigb}?vy$fBf*(I?1pDJ}M!Lu3|gXWxp8ox0m4ZCIGnY9=-N6X#4sQrob{)t?EF z!@!nqLRwOrpWl^!*~h^szn0D}@kfIm=2E%ZYgW%>??1uk5jVNnyY>4A(b@3GoPImz zFjUCa`g_miY^}Vjk3kbxZqMQ0EpyC$`08}d!w}aD!2+hK{e#|b5qSNH6bf%+H*Zl| z+?U%>ZnEw`ql|-tBe+1y*;G*q$Ne=nKR0(v;A_OP+j0@r6_N~elp@c+i9G)ziQABzi(^x0INn zJ$$qL{z8UO(RYgmv9PefYVvCn8F{hJ!GtnZA{fYZjhXmYR?}T|7r*!a=UYXaX5D2hZz1?r2zZqbsK?onF*Z!2Z2kH@Z5h4`>%{MozRy*jGfl1&X zuSWD$m#cqW0 zRlT9VYD&Sn0%|KAkUKz=v%IU#E+PWCaiHm@!||051g?eSEE zX75*C!o@dIp)}y9>sa&VYlGp1v5A4+Ya;WJsW7rF1!Xt7U9#c}5od5jaQE&hv6-Mt8UZ#h zrq}YI9^i^5xB2)Hz|FP5+Ae|H?ML_5^0Se$o4)=P+{f&nt?@sXbA`{~?}^ybbcM;0 z%m-y5KF4MM3lNEd7{Wdz0k9%zeE!C8f?+px*Z0<9Ug?$vghz)$mXraE=mu^5LB7el zTmhT?z|iSGpyD~oC4a>e&{juo^ZO2g&Xj=p;6ER{xc?wvW4CtK)?tPFo7&HxlP%Zs z^6y*j?xO1SoyO1j);hv)>6My4Tet$0SM%v?s@HzK^_QJMWBmfO+4oKt@C;K+AlIz{ zBqW%YY|&>ITyeigh#@k7PWAyG`sV|Rc|1I&#!}w{KlnWX>G%Ln7Yq39%hEF40oXJp z&>NAvP1~E6H2_YYV}eVJ4}J#wYU^D6kZqY89{zuBpr&Wg^l9MCCsK0GFA(^A0{g}Q z*@S_go(PzhF8EvR!Fvr2r+4QRrH!R`%b5Qj1jxdv`B96=h>JTK*zbnZK)f2@I05M3cla;=+3k+DIN^bEPPhXv66RH=$XS|M;9f$)Y0C}UTD2u!D|@Y%X=xrU)N@0fxs;;E>0o@V|_jS^^LkpjPKp;4Y-Tv=H@7Tc=Zen@_j0w zbF+jdgH+HCKDRwRAg;gsUQxlp#Do?>gN?UEh|2~1m4z}eAg-;iq7pH;xX%QK17)JT zGB8d#WdB_5Jmp;-B4K9@@?efjNYQ~nEOh!feuaKiC@6+!sAl*H1$6xVOR@J(raTWs z7kMarpx;wdQ(HBE|2j6N{1Gi=mxw36iR#Vd`|5ZmP2Pnq#(HNf;HW1r`SKj;{!#=N z!@u&MjE64XJ{?z6hCN43$=g2t1jhq8(?hg}jP}Pew#gzFrf%{Pm*1VvYykngxH%IZ zsKKuLeH>j7MJ|Mz=9u5_FK|w)P!s%9m zVVSqu{d0UyG0G)9mTM1KVLfofQKdq;(K8Sg{xYGBcrl&V0W56MAHQhSjFPkGuTHZc zplZ{&qS2M0g*?N{VMNlo?IE-lKO2{1+5)0?gF(8{e8qHs6EKJSwfLk(yNQq%pR0m{ zgW+^2Tha5b8HjsQk%lt{rDnGFiT{X#2dSp!&EiIDKjL;ZS_HVCPT5=%*dTlJ9nTJv zz-EiPK-^++W?P4myQ!lQFAX`GCylk$ikS z@s2w&I7mt|Fvp(!H}nwOe5oYGz?kfjBAW5WRRFRSH5}3c!(nw>DNx90a#f7>ZqHgK z0yW`~F$jF`7h1i!I-?qyxmg8c|Le<>zWA=s3|Ae`3h_aB?^2`J867c!7`Nn`ynu6* zz)Ib+PR?I3^wqe`t6tb^cVOX5Dl96Je6;a5CdRKIOd?;0v4csLucI|QI{J(k`?8_- zM_7xUopDdw6B1(+IWNdskhRhBwMPbjCkPxROIge|1d~f|H#L(u(MghKy#>~w3pG7X&`T6C99?C>jSuP`e`w2pB zcx+~qQd5h!gDV_6QPo$@3ma1At)8ZyirjIb(cIbHm6AxEh0&Lo-R$2faXBL$vM}f~ zxF;wdq^71Gs+pPPaU6(?`Q`AWBC!y3z)=Q=ufVh;{9P+B!}$VDlMS>AD3dKNUs#7Lc-oSfsme(EZ&uKv-#?z-t;yHUDY9pZTL;?neF)>nT zNQ=G%xEO(t_Y|h7sFGr1`iiw^ANSqzRxT?-?)t$_ldM`Ptl1q=OxeK|oCp7Knd8gQ zc$ko@`g#(s8}fDK%}3d}D&!O468&)j7D^;j>XV+>Z3^Xf!5wIz33=jlnp%OeakgTx z1ZX@~%`n0r&p%b<*U%q5A13x+@`2&5f1t;;t&y^OBj~=SplUddqN=pYjmx8vh zomh2=R!~^jXLf=yf#dZ}I2x@~F`jLDT-z|}|A8YJDo!PXiIp%g!q-AQPG#t%BG zW0XX6`Wqx0^4}8N%%ciz!e1;1YHjD+ynFNHQw)S1B00ID^YijoM3=BKBdH{b8+N+t zk6bK9?MFuS1ijBkKz-37;E-*8;L?$NKJ+Wb5Wy ztBJGcWJAk7K-Vtq$YsczHg@}6Or<->^2;{#X=n@|SbLk)@(suYhU6r9GJQrM{aSa2 zcg~wZxo=I9(4~pW5U_BPDX)oD>&U`)QE%q^<5Si)H|2RTiW|t>?{1;$Gb_8GlxyUt z_Foo9wN4sH%gpRl{vZW!A6OO zg+#O*(qHf{D*VW?(4H0+2okUyt+WB9{-%SEtmAz%QTX*%N(B8g1}Qu2#mj(C5#&3Q zLPobYi_mm4t^*TVq7+;Au@ijaaK}7b`o%^!Of#43I-V$+7c5})&sJy?!OHf0pDAS6 zq#7mN_IpMwfdlXSStTrQBFbK#6iQZ#J+b_(855EIP$K>_+OJBVdH!dC`a}X3y!|yu zifEECQ~?Gu-a?Kyp4A-cpC80Om?hz~`;F~)ij$p{mA&_+fSk|Y^JycJ3kH%|Zpo2L zp;P4e6qA-PtdwveFp#;8RUbTybXMoRR`Id1RPoo@L1^}mvES+GaW9u1hJHE<9v;6G z$>+OlsIu&;nAfH$!`Rtc%{Ju!Vi|m4Y!L%FNP#nnO*xxsoz2c~W9DRxWKnKxZst&n z5^4OLVgH2Ka|*77=inz~AZQa=8Gn8&E$xhamjKwO?3uCpanY{_HCpo!WSi2`-rhwj zov%EUVQ$;6diF!$cbyPtk<0M7EK%U?lT*^&Hyj7+Rm5VY)Hq}y+u#+l{w=5-+TKJC ztKOeU|GGL}J>p1se++DiwmIE@V<;IHkI0H>Je2rk*;rQrk&&7jA*FD$#PSRi@}#@% z`3pg?Jt3{<=YxlR=8gZg{H8nH>vQ?|wENXWA{c6X?6OT0 z2Fx~u)u-uD-4Sf~VF;<>~E&S9-%a(^AXWe2{^0M`N z(W}74dM6n&DA8LG$W(-p7k!F+@nruTP!znQGD5cn9Frn36)aU1m9N=jk`iheZGxm5 zoa@W%1Yu!2k4{VsmvTWNM+(FbUO^}+QR^^-QA@<0=2;*p5Iq*PW^c? zXHt`b=nCyWA0s>2R^POd!+ymm0HL){FF^!$nE}eDgFrHYa{e@S$G+q^N4@W67*eqn zc-j#SNLk`vuJFs8m>O3=IpXlA<3z&NPc~Tf*GdDmPH++a-=1E82wi;pXAHl5l6jgV zSZPi4E$~subx1I4EA{*L@3|}nv`B{X*EJ zBB#C;%;#b%rr-hdmD0vLI}fipSzk-S2j(NplJ&2cnZM|E?odTL_q9z4G%rO~-Phh& zjMcAT&oiXWIQOgS8LBI#UwHK=g~r5`OYleD9JCur#-O5SM^?2vfV%=v$|^%6<<3*ag9*zK^DOjoefOwH&O5#)yvYuk}>)*qEDsqaa zLz#rNyb^>K`bi24WT1(WNP?f6{gE3!y+cNpjKaT7I6cA-^#eK~6ph}E$g!*>*{}l-{xelOcW$Kj`ySq-lfhMlTp*V# zLE-dFH7O6CLl;8V=WVd?e)Y;Jra19AW^W?2UY(N&>;TFhFa1qQUD5g;So_RSX(u2S zASya*iUO!ay)1dE#O`B``{bL(r0sID1uac zq(WEA(K*kbPfU@S>5E^U5X*EEo6b%Y9_V)~1zIPe`NUZ`?f8@*xyPzoWr)LWvkZ%qhGIgw^q4 zE?|z|1A~wAMd%f*$lp-cG?`xUxPN-3zc;@4#Aspf_^YHJ&+Rb7D+!a&nJv}dYl`BH zpT3SXAy+vgUOYC|>)`wa)O^!kLzgk%2!06+J*WG|KTA3pVIFtNqUdT#RjlGG%t%O-M{td=TSJ-|3NBq_=A z0vY{;oq&3GYZq2rGm!PpbQ`9pp%I^Uoi0eW%T+s#*Cn#_qtj}>!R}={!AT;arRS8y z@3(jseP4P*bNDDCahANvpvJi-7mmu_`VHOJ?IO`v{3ZbM z4f1MQfQ{&Zx^f}TWw3Qh?Ooi@X5B-Vek0Zc{pl>??3Y4F-(?n!Uh)Jl?^+cWj*&>V zjS~LQswb}|?wUT~>oQJjuR|Y~cu+!&U~MT9p_84iXm@NXboe>sX!)BHW&ViOgiy9Khf8RtQ+XiR?B*af&fts^zz=rWqSZ=^iWjzPU&z5wLE?O|ll`D$wm zK5jYtjnSN=7%|(>(`4Ok%+Im0u=Ac8!Wzc*-KkQE6fi+KPy_4u&Ir`S;n zS%Wg!FkdlE@6*a1PM^PBdagKHX0gWnjbCtG4$uCp5`AxomJZ zQW|2M&h3yfCDPdD?NW-WKq)6SS?0BEPkO6(=AvDazv!3nlWKPM`v+3!yu;4~zJY#$ z;+NVf3|%6$uIajKrhx349S?^t_$lT;ml$8i%%jCV$!zB(G>bH1m;2Oi_~N_uDtwGa z_OwZm+z(FU@Y7e?vlo*XapEGb_ZQ&wr`9`n2bg3P74vTUm!4{XM7mR8LiJsOiRwxk zhk>VoOknmDCE>QKOAF$`_p0w2UsnbsQYeP;!YTsH8VF66Hx4jL-AaNZ2oiNL_MHZ@ zKIpA!3R#Ojp5m#hknVR-DnrhxTTmUs$98e`#fAf3DUpn@yS_X+xww^KzPD)GxFM1vo4Bt}lB74rG}Ex8vxY4>buLS z8}<{o#XpzZ^bm{tM1rN|ZorSP0C-jDVo|)iYS}$Ex8b?_1YU3U8~I=G+ED%d#AwH^ zWj;Cm&#vA*Ck4T##%NDLVgkxG{e_iPLdwFmmahhf*XczGGsGeWz}cyT0oHqdd2q{5 zROyU|pJMl|<*(A_;VNQ?0Q}-Cq<_D=(%IZXg!`oBVi$(T)R5jH77zZj(7$9?B4H>1 znWE{|b8|EYF$Atn3>C;~xQD^_85h_8aO~T?-FX(4N7pT$O6`t22)E%Wv(MmnnS>ye zJ_6<3czN2r;?@}XADBu4Dfo&VweE){{_*Mk7cE|T%E|R{wNP*!xhdE2QE}pPlIU&k~Tu zQ7S-IsxcaPyW`qg?`LrPQ@Hbk@NPgXCW~`v{_a=+^w! zN%kn@qsP|H&MTnOb>30|yZX2?FDiJe0Eqt{9vr+`4ryOsH`}4_2goyt@zpEwG=P;| z+}w&GK%ZA(Qo)O(>IdWCP}9^5K2p=uTl2(K(aJ3-_&U_v%HfFLt&PJ?FEc2Gp>Of@ zd(0QqYwLkWZ&2m=x@6uqdi>4bjpC%EF8K8OoeVHC)&Lh5sSFS9%jmF_loa9qBHCxq z1XPZ`XE>3CLdpK_^E7vcy?0&bf773qJ6|I^+Q5pjsT^*UZd=bIK zV~210W~%D*cVbb<$S{Eg*gG}k;l<_bP3_(9d8XBb`5%$BoRU4OpAfg_3;>k5bTU{N zYyt^>T{yE&-4Az`*4Q@Btf{V~I?2`{TCTdKQdlVa?d;E=CtbU6;21250rwLX_WERk z6$qfGJlKtAib@D3%2_Aj$g2l&8K%$rg7g%V1w8-~OJ{*Ww92%pE+jWP*O(uLn0x$K z2o7i~CG*uG#>dCThNat=pLNP4`9ZB4-~#tW@xU1}X1HW_Yk)qz+e(GgWZCu%6_^z> zko-fQ#r@Ya4uP8wYwPzd$E>Q2=k59fF@vZUo%^$zTRxDrI}i#7jV0QiYR%qISiL|$D$8I^{qUWMxojQ@nD(0ZxbBJ zaVk-?`e-4{87JEcX2~dvRbD)jR1B7rz(dWg9{}W8Of79tTpZV)>!I{#N3zv*btqbU zKYqL|e_J2%VEdjw?l_}-Zt$q__)9mT$d2p9e>u2Ts)iI=G>CpVC^Mf~% z)6E~IgoJ7Vv670-;$=?-0F1`OC@ZUI<%5-#-?-tQo^~MlRUc3*@DX3pmI9MWjHqp$ zN(U2CpVxmtC0%3ulT!rrp&T5eT@dhQgJp)D1*(A~u$4srDiNQUfMrJwFC#R2x@;M8Yc{OY9*r)<5Le2c*V)d$oSUj9S$>Q4D*-; z1`8K>nIIzjT9)L&X)rGGSL-|VFNrjC#LqxpFQDNsYkA?Sn1La1@z69+6v?WWJUm*) z)Lh@J!6tpU3xr_~;Xu6tUOP}*TT4UgAsQ+u;Z))sifl-qv)$-sNBs)7{>q+}&93uk z{S}fNLD4Z#JgAp`yH-vA5Byfuuzm`ujSOxe)8M{m--&>IYj^W&_SZboYWTllw}2PC zAYKbDhw|kH%pjZ~Avwh!J^c4OHnb=v&(;SMw88kX0qN(W<>bnxK-(@s zsBMx7+*zy2^zDs6ql#XJ(2Y^KKTH z-UHJ)2VBbp;{tSS%!NFmB1f>#YCWm6KUOntm8m)IX zxY`ro<_(>zB;k{q4A7d}v{07Oa(_blNZp?yW!=n-HJHc)tv`!A<#s^bRUEv=qoIXb zGVDPKr}UXZc47`+oz}EKeds>VUT{Zp*hetH!r|=jz^$X zKMWvMm?MUiXjG(U3)sv~Uaw@n3K1gF3MmqNX&O7w&eGBTlGLR(P~yd!@zONKQx~B! zR#~w8D~1KX{g-tDA2%_p5IVQ~^&JXBu9UUrD;8*(<2o z9u}qiIa=>OpB)`Fs;@hSoqMj!eZ%35&P{uQAqJ5N3ie(Jm0$(0G|9!N&ga2i#(zb3 z+8aEr{V`%Tc?iH`>q{=nj#vX)-nuSfDa-H17U0J5<6(L9ZGc zn=pl>_O@J5)W3?fVJPyPzYLobRs6MK%u%75NEYpbh%wI)QA(1V6Blh>X7pm|r^F;A zuWy<%ZV$P`GKVl>FMiyWq>C`IIYATr+J(vr#|+F5^m z@gYxwemD2cJ1XUaC}o!K3%?w@x{cly2rOi_t)R$!$B>YEy~A*PYD#$3&>+AxFS3SR z@8JJ-NlR}Pgol7iiU=DU!OhGJ240&(j|&G?#VGiXL%B282p2mz&5qVwc0FwgGv|ti z7J-`#?}Gi3pOtEKRP{Vu^I>24TouPxx@Mbm_i76g=Fu}^0>u3Kv zEaRQ8rTB>#Kw`Y|;Lmgg4V6(yrE>QVs;%AsJ%PA{<>X_mgB0bZi0R=j)NwErqC_P` z#SvF$L#sxP40;^(*h+!FOMQv{yyCFLA($|7N6NgT;-xnEYXUy!bfUsvs=rK_Kmh;5 z%E~UavL#k_T7;?B(r)bTR8IXjTOXQXOa8v5LuLuDXQLxS|Es#U4vVt?-bF18L_rV% zDM101E@==+1w^ECl#~{bE>V<5kp=-lBm^1h9*{0+80pSIdgwR{czwU```i1R>+G}l zzRo%R<#jne^UNn!-0NQVQnhcGxKG)@rjdO%WF)%*9iuFqh`4+5yNs0@dp+eTzHg66 zzpp4pP>;guvp z{DL^R9}yln7ZIL{NZp+aXd|Y2d6kIjWZEMgztdkP9B!dk?aKoIhx<)Vu$YrRFpeQ$ za^!p25ZyT=L~LKr`cq)Xmvgb< z{9KO;#S-P0kj61bs>p_O&sB+j0u|KX6gIW2vA|5*7ISB}IgXH5pQ`UBQQk$7`%`3% zT+Hiv2Sw+CEPfdx)&7BEs*57`OwZ7o78cwh_y*Dh(ng04Kt?9B-n^9f@&nbKFy<&7 zrY@O@N0${ApODv}-yHy)r@%Zv7azMo>1dL8yBsLG;u4Y?HC(Sw`qG+gI&_FXYGopu zHK~xe&qm2@bg-L>`?hbu*CQ^DF9n4dwQN{%&4^c$prAALK1hO+Yg zAjN}iqeoSXA;P0EHApsF+1X|%cjp{|zzhNkuOEDGKjDg1^BXkiGwm(XA;MYWBNBKU z(nuebTJ)5V&9rR2NSX;e|CP#ddMx4#$T2Vl662g{QOvK^AE!|9>>AN8(1xn_%jjG9 zXZlHN=Xqsn+tEQniA*as8p=!**z0CG1K1G$fsOC79eq_}HKjh!9)D|mWv$ysvAt2$ z^ogmfvvYXMSC^i|t?)iQroR5Fxe{;5A=lUr_{M~yV3xzO~ z$oQd)c5EZ4Qa!aI6Y*LNVoZeb>0=LGl2!e9d^61&w_pqdZfyw*W&1j|5Q(ipSqRIQ zrKm@vygCUI#?=P1M>d><<&Z2&$v6kwe#cBlP_~FT(usz=!*lhMhUv3s<%40uGR;?N zX~ekZ2<9Y}S=CR29S`4YWjogNDNIrY6hWYyIDk0aKcxIW<&O84ww#@nC}z-}Cr?S# zJPqX@omQ(6KgGqXV5A!aq$K~d)~`>mF`3IqfCX800rm(ZFH8HH*hMIKC{rBTb(2fA z6#R|;3G#^WzF+O}TFxI)EXj9J4Xu|Qhb}gl>*;-lbKtTI;gnTxL%o4I90t+dCr2d= zC80cEb9APCr9M9i8rkIv@26&)T?W*1VgrNd=nBSt6pi1lA?(w`d@NzY45ejUW2v2@ zcXXlIFxMN-E2M z!tLtkvL;fUFZ|`wF)WsWmAP^qNZRkm)0H-h(xopv%;E&!-_^(PT<4RENs)G^ z==8|3)G=B;_TvvO&)N{zDjlQ)8ddCGVUg_Z$-o&IJC7xl?GmVd z`|PVPTAhpH+BvV*#wRpmZAaU`vsZLWf9-7?JDFJjx-GcoBTJy+8PYf%=DoOxL}}P* zBHsjjDAL`u7SG-h;7K%8CuqZ?)Y~Y-Pbb0A?r_zfe`K;1VH%NH#lGfswAr7Ljnb4| z1J!D2qa`1=e`RxFqT%Pr zOx=f6+$^nr>#jf#u?{p&2-z(M-lWBs9ejMda`9#7D@q3VaCuMFh@?y4m^x;k{>>w>FopX5zE5YH@1L8cjLR3`^{UqAL`LvzbK7nc(HWGoZ(kj*(0pPbM@G#AjKfV*SP1-q9iSOa?GH z`NbrpShvB(t*U_+$N?M{Nmbs9aE&AH*v^Lij4sBL<~7-YK8cj#wv;Ue?lLIxE?-s- zavDE78Zp@Rc_#nMgaT^OQQG@i=@QQUnkOd-y6{NNlk-PQkc{rWu^_M)wloosY)y}PBk9nQ%kksJe43)VLfegcNaeDxv z2Z8IRDe2EbBsq8@?S6Isuw7`2BXKSk@kPo^T^Sonma(M1k>;Y!S#nHml+@J~z_9># zEnUt32L2aF#$Dyq^*qE;-$1+9se#MWhT)_ne_az0!>sq~V=oo38h!KXRh+5GwRHU2 zD$h6f9490N=nGI=oH`OPK`kMbikr>Y@ysG%AWBbUWpe~Sa-(PzT(mW=)*R=l$rNaA zXRp3=g(U*1V{{7@c&GmCE&|WL&Cr#f$dPTUXhw*w0S(xt6tClUzyRR1_!L`Y>=j4L zDS(=vQ*m-1ntkRo_K2$X{p92%=!IStGch$?Aj{BKJJma@i}!Ko`e$Ql0u=vg{z|Ul zn%6H9&li)pE&=LRPi}n{(sqU;9M}QqZTo@1SKu zq{;RS6$?aZppl6=z#W8=%{(k&ewwzD+O(UCcnz&i z%jrX~9SR8lWIDss>b@U*`rqGPWQx)$T;5np|DkoA%n%0o#kz+8OhI=2^5t+kspYQZqsuXYhQ zE5M&KisNnT?KQ!JF710yG)zofU1N+dDPGL{Wb7QouIJKuk1#MDWVWyJG+b7^D-1Id zXPPDN(@K;1rRa?mcmNG~W_H$^Q*=2ZB{kJ5J3UHT`j^KCB-TIr!5{%ShN-uKn2`dr z^FbyY#s-c2cu;>0)*aS+J_;~7$dYn*&iRg^F1$Pl^+vzATq+v@4}Zw|J?M%W%`dyp z|NQPQF22KTebA#WICS$syj)p%{dzlhIEytrkV?p8(8y+=Zg>U|WZF@ftF~bav6t|= zmyyC-32$aSUE4#dG3_qcq}4*cY@;(YNw)~hkEL5cb+?Y8`>a&>B4kgr6h1)q8wIXv z09fkpSy_+GS?SXye&fa`C0+IKeuu;EitXaav^xg~DZ8X3=dmC#zv!te=cG>+;}C_t zij3Fgk^l{!6V`rFtv^rY?x|h^0^kAl*t6Tron%LMN%ykS0el?c8x{neANEi7-4urb zLB2`8tNodBdfK72yL+-v@aPN|*StZBU4nk|1-Hk*9wi`Qo$%YB11OTFwx+SK{rh)s z@8?aPZ&^GNA4UrHwBOKT+SvW^nik#(;Z++Fz7DJwe)zd{Je_2*L1AH&O!PO@=E)X- z&FPV`KpiJwf6r&BppEJmpZQ$_og(LQ~r@j5L-lvVN7y5MevCXm740XLpxUO&OXj|LV;#bkC(BaqrMdtrM1}P zv16ab(qg_~_S>24p34vL+*-|I_pT6Mxx%8kM&}8b=40{Xgaq9QU*hD4yQ}pK9Z0Rh z_JM(zk2~6rTGQ*PT}de^zr?<-)celc?}X`g=o|<VVB}BN4_NJ2sn0JHTF5_QLR=N-PB{T;9ycYRp*Cu;A0miOTyPAKpa* z3;B6Mq+6)OR?~3LG#%8nGZM0TkMzdO9>~gy50GEE>J*OuDzqrHm{6O}#;0_2ip3 z^zR-}#2LpP@HwrfT*%BUkW7eu6KLub zOXyaBdS3Y*wuNbo^gb}sCgum)K9dy?%DYUND-Ed~6r#>q21tDbe7z#G_0F$cQwEkz zkm&Zi!cwmBeHbqJR&kd;=`l)i1+F!EsUN|Qli~c>UpYlaM%K=pn4XUJM)6-@X#>MU zf{&oZQ_r%DpC(DhQuyNjCVw+!h>;$Jg2@aW-i24gx|a%A4O?p-`4u!j)z+qTD|Ok- zx^+?#5zd=Mt6*-XprR7iFbl?rMT>3dB*F^^1?Vqi)ZO|Ef*WKQj?#efcd9i!$My~559N&1i+<)_}i=0ne zkGYK$J@w3K+K-&g{DSZ=BNL7jr-2B*n%37}&gZzCICh=pU7OTw`lNIW4Y0Yea5n4F z0Evu8-A1`BjY>4-=jQ3^oO|HrCX51k^r|ZHu@BcgzJ2?aQc#VyQifsgm7cuIX->af zC!5Ha{LZQ&SC7AxO;Hjz*l*X zKh3nPrdxcAFm!5tDxqYqD=5qRa9t8;^RdrT^oDdTGz@65&=|B z&i-IKvOGa3n-l?s4&fw0&>)U;L8$dOlzqmCiei_uUGf2W&GZwf>#uqwF)x2-HL znf#DjcctW(zFXeW&L@9*=u>}z_d<0WGg$EkMZtGJ_&)Jp)|uOvrsUv-ekUnLRg~^& z#KJ%^1B%5SJML5HH1d||m7&S=#gZ>ipWeRJMSc3Bhbbq$a%h?#J8d1=S9+}oQ1bFf z;}|U`t?He@*h#YN)R2^X1h;YeiA#$Qkg{D_ZkB>+aZ=YRw61nozj{ISY=(g>j@zqr zy<3eW-?VPtESG0f;4%#kE(=C+C2j3&EHQDVD2rI4f6Q3S#G{S{#M%oZ zc{$srw;TK#6~BD_{qb@OHj3(qqKE)FrR|~Ga2nsjLWVgz$@6gknb3U-*Wz4$|2kj^n zqMp!yC3k>1ej*qpVwU^~2&F_{A*blK%cfPfhubqqBJg_Wl^1GHWbEP7s6E$_sJIL_ z=Xnh+yEc+DHi&@Tr{k*5BN$o?n=Q|FWeUTKo8BqZ3YR|lN6p$_7c+Swqpp6-H*0BE zSN|-BzpHjB3I1CTA}QxpUr;Ia<9(p@3BBPvOHSg9eMY7EZ5}D`DsJ4Wo!e(SpNEOPl!?g6pv-pN?bA>tN;RaY;u}tAfDOw!%;w|1@R9cBy>Gl?I4LqYlLPO&pUnye`Sc>~6Z&@rg{@TrY=vlM=Ov$}m6JQ02-y0w~OZZgN zT1yd3faE?7Luv`dNoA48l1n;k6ORk~!hvF6`o3#SLznu1`RiYC`O&zn{ZAYzgnj9? zhqAXa?45$V_)@eF2oH1@O$msqV)uz=hSPJjY~xTY`I%od}8)uJ+rt3=igrSSeAB=XQ01r%p28 z$1W1B2-wpP-vm<*LZe1)-)Sl2w3b_`f*-2X>|p|Pg_f9g*0AqXsOFIArYeVY@QC#bf3i2<0f!~Mi?*%(xP|Hq=}8gssHo?G~AKQ zo4T2jr{6rC!`v)iE+HhgC>=ZjoHkPk84VP!(p`KIQ!;o_;<9bdsf1mhvp3ViOnY)o zr_S#F)QynhBz~jLGSbdfeU8p&_`@|zs+U!DnmPEC*1a+jcruB1CqMFkxi<=f0%olJ zecpa)LvL#lOd)4xN(7rcNFLPU$wK1-pP$c)hSLe@ecM8^8*(R%+{tg0HtO#U_z-LEsOIi9_fVkajVN`Ki$c>)vKy#NeW|xd#N*TN~|6~S}!rv*d zAeUR)M8^4?KMnaTtTE3Mdd3v_&y%Hj!(@yDvV2xrCX;Jv*{8FSThk8|Lc(HmwxBFC zo(!USsqgJ`iUh#^_;mbP4(BC9H1k&C)i$>)8?FHjrwjGOmH=3Z= z6ZZTRT}jKT)y0Nia*Y!GP4S550J`R>tQ1EFD0?OiMNEz5{y4r}*wQd0!F5@NI-h2wjh>g%if}*RqZ5jh6!rzK?FX5$m z+7$1KaCDjzSwd!kSx-1L>4m@bcr^A3rV-x#*oVbRi_drH1$>D5g49#TE?weBalefA|Hu30Zis)4xE_%c}kgEoo z_i~!mMhyF#TvL^?G_J?&daJgDg()sV%-mhPVQ0JMNI{fLp>rKH$RCji8N81;SefFwJ`$VIXR3S^HJ6o3qUa{^;> z^cL%&hlFih6quO)tJ6VP)9%pbi8=)<5Klh8#7E zzILEp-&nfB&%@ahIwAsEKd_uqf^YZyMbR=;Hs6VUcV!j2pS{m;66j*xEn!20t*n<> z9#3Fu+L+7m+|O+rZ1`31`qT3|#4g+B;8vl#Ui#0^TZ}CVI4-2$dILSy^|NWn694C2 z#ghE>kO|i}3Xr!7s9a~5x;#lIYNljk6TCKklW__Av?JBZdrb2X>^Zwcitp-bGiWP= z!0)$f!khqUr{Rbss~3&HOx2`(Tjp^3g9$JOMG~KP=e8}=`2!~^j9dqSSol^FU=!mV|!$F$L{_5U7ZtJ0Zeg)?yQZmNTcd=Kwq%VoL^h zQNkZVgBTa@JWt zR)16=|0`bh=Li0!MDYI%5i1$PXp2bMUfBtd)sA#$RD4n62%>%F&G z58qz<1E}dN+BWc$ZTE$a|E(*#V3Sk@|eDWX!6b)Jial7{TgpR-k zJbg-Vcl3OV9;_)>IgubX#xX$TR$)S9py=u7U@kWar?Rp#TmaDG)hM?6 z35{2mteH4D+1afY2CE=wsjaE%&p=9DGpzBa!b0DwmnW0Svu8J<{od{QBB%>!=FK&F zm@zGx{^PYwW|^Gj2c9ihlGtrH^}oF^_2SwDw5MKO>KiK0UQ&dSs1V;rO1Jq|^ z*FmvKWas%t02-m0KTj^FYE$)5z^EBAKZ1gBzv{C)>;lgH1w5}`8M?YJ4g+ZOz4Ps_ zUt_h|K-00lMlQ2+^$*Jzxr_MFZ@SR1NseC={a_ypkxTVuBBFrzK+V)FHsm(6wthI0 z92gilJ$;ju&+y42Fli6^nv=HqUr^9Q$jit{G{IH;*-AZW=PKk$wN#oLS#^M@9`4Xm z6w;Xq6Q#V5_4i+8|11TfUQp@323?At2YtFteZ1Uv?o^=TC$pp-9r;estoDB1MFUaA za}hwX@Nj#(yPDEF2g;LwysJHMc>rph?*3#8+3Ke0o;Z*2+h66gIw0 z8bZWTQ!x1f;CaQ6Z_95JJh3B1jB9R*0B&HTVQEfP}bGH z@QQMK(_%h~3JS+Zfc={W;*y`PiL6X30J4u%L%BeXekuD<#vv^?m$>LHV$<5b4{pfe zMIDXVmzn*l!TtX7Fs3Gu1$w>DGO@5!xJXJC`Q{m7O?(!C+iwIb&r6B zeRwOYO~>TUkv04|zW-Y;@&UB{|N0kztwlDZxGwbF<}NK-nw6heFNx;7R|3_9LyX=R zlC&}wCao9WC;R$O%VM%-mxvXo1FCcfZXZ zESIgl;`3!8Sxd{`V|!4NBi<q81cgMnig~|D(2TGXf?_1T1j`K;k z6LJmfUp8f091c|`2x`!u<_ZRc$%<3M+}gU4o#7D-#8p9s*a{N-5T}F^P#~4qylujhkeK-}UqWrQ;m=9>{Ka&u!UaVx6q@!E_SL zlOP4DuKAnV2c$p|f!-aD1g2?>z^j%yq&)?1Ua6in!zl@tgSjXn}4Gj}<{Fs1J zt_FPPd&2nV9PLM|fZOoIZEfya-8v{RRsERl^kvFEj*#N&vY;9K6QlrbXFr*kIIyFy zZ?+oEzA{Dqd%vsdcf=lMr^6!Yocya^Vemz8#C{HACMG5x{en`#eXgY$sGu}7Ri7uh zQBqLw3<{l>I4t_3g(x*1#yu3W9xoITOl$YT^+S#kUGi51Qi(5p{a3@2hKtz2Qs+^O zZhLdq3l>)VO|O*^#VejYdOA*(pD(<8f8-Im)$hE&zvk&k@sE?TzaDO|-;(9kG2|A7 z&CkvvSRNvY*;zO*KT71WKLs)G7BY^cAkIuvlRSqTa0#&a1qD1AOBYb7keO-&-{oRx42G%M1;w^E&lIKgcT62zN`)+YLd!8ymQQ< z<#L4%ca&}F_(Sa0cCScv~;%wXtU(z%{8BIodp#sll z1m9+1d8I7lMbI=i5PfrGswFObF`CCxr_9Y2+Dc?TLNoHWl5|-Nu_<=17P3|!Y6?Mo zPV1HJ^1a=xP8q%0W=Jt2!|H%;rZNJKlWgUBJ?$kQ0#e?YyuF6-l9FsmM1B*Yw2Vw} z-&EGQi10yHh_~zdCfLD|J}A3dYxc<;n&|#{RyfxO9r)(IMk~gpLVpf=HlhY*96`L_ zg`S+GAEu2747^x-R_Jun`E^JrD2RzuEBgBSw4>EcP17)4g~4=0ziL1yicD;)>GTrr zfA+En@zSsy%7svRf{78O#vPJar0jnjIUbC-;M05i;)CPTn<-%byT)7}g*hQdLFwCU zBvHcuoxuO!)!=`$Y5jSR|5}Uwb4UKSM+DGB`a?uyW9?xwN%p?m+Sk8cTl1^JXE_=N_!`aZ1o}sCq!XYH9yA#tNliHmYCf*aU z{&CnGt$Uas`TT3KWucrx^;}q<7#Q20lam8wY|x=S6Y<4E5tL7X#7!C-7w5h*`SV8$ zJ{j+ybvcQ}HoTTN6K1rxp^#vFuVC8;dKwNwYlz@+&pKS?BvbCg#gqSg8Ev}{U8&fNdoPnir!)EtR*|&qR(yKG!T1B3l zFeb90;la5$h{gd6q%yL+R*nw(qFrov^(0`F0jT-1Kbrz;W)z;3B>!vH>2}|KvT#SC z!xF6^X}1NQe}E4er&H&_0VK>yfgyfWasRAk+JeuinwgucLIR$9o}>vzIuj&7lTh>4 z3qv)v={K)V+)qwTy(Q?P{7=OQsfx^^7O{H-D7)WR@BcjOLW!whP@$m#vt2iyld2es zR8>`Fg@Wqivln9_^1ea?<#>tHO0=NsH@;a81aF#LNNpBCaN>e!U1pPP70fR_es0aV zjOd@^Q1Hu8ON$sQuc20vm=-i*?sFy2M~C+91)NiY7vfahcJ%DlK%(HDO__)T0Zij^ zgE~H-N_PvOMCzzk%yic4ZMUU&z#FpUFG;i%OYxJ^-_p{~TM?X?k%y5VAS@vsyWXR9 z3X&k2+<&J)ieXP?p~Fw?BXD)kiH;i}SR^X%x@bRsY5qB85pqO;5Kv z?ZPCAJ!l(@=*cm@eu}cJVt~7p`_(4C$cA1;ASKm;dpql&+XR#C@3f@5*c=$ zRVXMv7=L@2i&8h>@{{pr$0C-YGN|_15iHp`MEpRO@L1`)PfjkJmv5JQWiK z^94^}?}7>RjI;+Sc*S@{23o-#AkY{WA+L*e@zT6L_9yV2Lg}oUH}6e#ukj5ul+7Ey zTD-x_5|R%ECeDqb{xp;=CQO`24rJ33o3u)vi&lWRBz*}t70m%9wgp<5Kpp19iposo zhidea&)J&P%*?h3q9xmLDgN%t1vs}CMjFsT6(IdVECNi!^sAguK1Sp`7gbdyG1Ia5 zqG#jJ=!6Xor(>8q$65F1fa6W?vPFtIulb*|XV>muQ!FEdSn+kIVH|J#42p^bJ%)j9 z{j-8Llm1nOR%54870uOXSiu_8mi9nVcL}?(u>ptBo{Y^v z%!QKkz4ZnUVNfn30Z&N@qECkq~rW9=--#ao<6}pu+SpqW4LriQ|zXnl4j4qe%m~lRPw6>x;LaD7g)!h;*$- zUe(W6spUFFgjg6XO+!_N{etlQ3}?YCNGZq)aaQ&R2H>+B?9f z`U`p6MSJlsVj%#QW`OZ?4#Gl0186>4;Xhu>fOngp2KSG#Kfu@iEd2j#{`G&m1OH$4 z1+m*skoh{s0F@F(5wTAC5Fr0P3WZ1z+^sw49F7u(1PO#DSw_P{LqW&LsiX+35Ve3^ z(^$37&p&xC*?VMVTVrDb=)8XZ{JE+Z=B7_D?Lm@>f7YRQtczwz;yj5%32!EhH#tC) zH*TF=#zOr{2?0s%sV@iaqA5Hi#H^o`$Dm;xshUwGcu!YP_Zr5VfG}$sbUT2WbIBbf zk&@+NqM+>)6-9U;H@q`E45`MtqqH=zJHjfm^d#R^$lBU+(|&Ahe2uz(;vVqk^iu(M zhamq$NQh^iD5yz-4!5e5_$P%-PIeVxIt%{VWB~{7=xj`n8s8s;u?^tl=WI>9f=l@wtkU2^1;^R|h=m%$L^&ZKuoe zN+|Z2G51cTlvUL_(TM;QKoH2q{;s+bxKD3D)IxBO`A~57=)!U%!rvdDfU@T1%&WVA zVvja}WEYV4y*y-xN}cly3sX~4r20qJYhK)VZmbrugeuMy!Ml2L!wF_lG$BeHF0I7J z%Ww^#+1)pn4Se33U3&v5hR;GtKnY~ul(P3lJpq>8$W2JNx48upWV%%Bm)tv&0wOG7 zc#A{Jdz!!D9JGtJg|^>g%f38i3%y36Ip8||RzM)XevMk)bKbab;iWei!BM3#Up%Jz zixUN{q~YY79Z3(BgSuQ@H~8t#SsELwFIVfYa1~e&KdF}FQ zXIf(Z{e_?ke_Bw4mo&Mw9BomQo^O!exXwmo+2Q>xJ{w(YYdmC#it;|z;OJ>O9i@8lpo z8F%Wa2?%G^e$11SqJtRy&5XX{S8bBp{BedQGBzwMY42&IT`35uf#hfgc)HW4PuG1W z+|9b_A*{c6jW0VX$qYen(#T^_Xwn7V6LH$0V zXjjrLBSOeDEDbFtCZ8JJtEl+6qM~`eH@9&yABUB}iSpR7XR~}e+n5h+R5pe(_tR{X zJ5t?PSw3IY#um9K$p_(i%Oh#22riVA`GSBUF6AQ$K)c@(8N+{ zgKi`na&4Gn$L=Z`&e=u~lwLe`j7tJpdHHZ}Z#hvW9euhD!-jLXj=nlxw^|QBzsfJ` zarhDm=%=`={Kt;9hWyZxKkjDJvMloAXwB{I8O`uk8u0&mDrXYuU(Ya-Wk38MmrI)? zbpQIQ820Kv57zUIKYaUX+nUQ_hi}`4@xS%>sgI`izN$zqD@K8A zbY;*?=+SrMtvTgz+v`4XkvG&L@XOC_1cRtMK=}d0# zcI4xUTVwtijTy-{utD0>tXN+>{DlVJ(SDXBkY3rkz5p@)xu6(rYFkEu6)eiN`J-@G zPnsItgb1{zPWsPy;ZvqCu?APiDI!@Ad0h0j+x42~EX&kGtS6QSx<}pDkqa(tqm~HQ zO%WVNK8`bMzau%FlgtX93ya=S`t@KUzF)J)diQfn*mur&Om})%@Prz=ltb2FKGlJ&`=$M+s@($v06mWyOUKVCaIo& z`f3M6MRKf2J{N7sC^{;w)ir0l>n%14fAPE)TM%*c+%)-&NSZudw{mxyPFa-8{R|rm z!+P7T7H0SM-X*t)4}IN!B+d126a7efv0Ga2dQ4gf7ph~=Pc~L3$N3{NcLaLqvz;b< zzsQtyHIsFSs0x&6=83P>;h!vxjrI5V`<&@mG{e+F61wUDIe&_9(zY3?zupB`$noAi ztpWFTyNgu6))D)gC`<<&H@X74@Gt1TJz<@UFLMjRgP3p@dN(eM^f^`c(yK(oJsD{H zxxO(c;!UNP>*QK1KfKFQWBOd(l>|5~65mm6#+&thcVq6#7&y9ar=52V?NoGiN9Q@? z&%5=atLxx|VikHKc@p2fqdI4jPi4(iK-cO=HSmy#bTQcFwmNI6Fq~bjzVY5Jj3$re zW4{kGX{z6D7ArEzFXW){sr!+3RKhRrVz*XXlFe6oG@dfr$`!|OEYG$nToOBtuTfH$ zhCUhM`1S7vFs!-YSItpnRB6gcB4j+S&=VXQ+4kF*yc_v@Xo2M7kH=lc~R+Xg4tgUVGwhQIR(Llff9Tkv=BK}mbHs`NDR*(X z^rGU?qja7ik)>$C$-wNyrRvfXt%`@vq4WG4HngnMF-+h(2GP%WOi1F;6_l3i?Dx&4 zkl6DsDjh{2Q{5PumJpm|C7drxu9wsnlMU`Kq)TsX-}k!FgMOQ6yWQW^)MQ%LP*?Y! z*xh};<9Rj+U14ZT21Uk`I49rWG?b_RX?pfGku&fUoSKp=r-a^^yq0x|mt@ zkeo$nPA;d^Wnv(Vg^Za(YF~J!&olh;|HHFqZGK}=t$p|T%gAE)lW+8mDRwU} z=|(n1KXn|4ZOudjgkXc64V|pb?lZ|{Sz3#|V?GFO7~#(=B{pvDK) zAT*%sVHdIrEEfi6_IEd5ZLWL>4vxcazZpF8`$Aqi`!>_xcnE!mqziUyJ^L)H(r#_( zxwMgog>9|}_YA~dD|K6a_WXVtwA-jh@*6BKy?;M>r&I@cKcC#oCK}7m*Mjc+~S}^qu;LjtZ%cxrz_NDAxC9 zl3_?p&$Ubz^6|nrx8+PTUWdisHU1Mv9zHws($7%+AS;vNc8DvG2z81cNZc?DiafvtRAz$!J+0DOxuoWPg)ENhqPvX z*O1(9Zp|#hP^YeyY@|@N(ViT- zr!k4|g|u_lsNH_bzqW-&xXze3aRVzPW7n?Ob>yDBddSaN`YVnJ=_yj@adF4vYgF2I zt#|jF7aIH?yh)46Hv0Kk;2o&n%_}omSy_MDNx6pI|NIWWD+9tdhGAota}+A+l@ z8X4R34|l@F!l{4$kogwe$#F&_sik>kAhtVL2YSBtnH?zmr4+1xeU`#JP;xy8E;ssk9@&lc6zTdm+gTH@atY4YEC+-1s{>AFE#<&a}l#4nc;)5&p zYv}UI%aH|Ar%Ojy?!^9f(o}ZC+N8>q$ef!|txg==7N4=&3EkwlIL0I%%ihF!h0P~b z-ipZ&^9ESu?FW7k5?ZGZ5Gf;NfDqOt7sV@@ab|TPe!pPqO0w6(;|mhuZ(K zozu4e%gpfq;G=4sg%(W2pwTQmIJy(&d%=JPD8?DHGv2Diq_6z<@)1?HG|}> zM|%t*u?_N$7lD$=J_1JOWT$v%I3!;F%{;l1E2rdaL@OvO}QhZ#9e zg-c^1{LX7;$pV&IWh^8R#yov$w7a_-;Ckj0$)7D6l67)$QgoGb4BlFO>|L6WazDVp zz4BY47sm{{UC(uaV&U6tY)@8Gf_`85ZC8B5_TYDv4z{*lBMB?ul}fYHs}+}$vhT&j z%=`QJgvAj+KbpVm@Bi#iHW78~77A6fmV#zI-N%?NXQI2#)i3LEGx$nZmXw{HtCEXL z$qieWGt*a{(7ln7k}{oxURhb0Nce50R)*@(S$L7W!}k4oe6kkn@-jH6J8P6Lb^ch? zSlec*tRz&?oPs{$tji;v=|@Bps&Tf1v9^07xr3^mp?2h*Px~=(Jz#M!)-7N8;$n93g^C&&f$jnsku%-n!n2FX_M7mpS(1 z^%<#Guk@3P+)KwE&bTQrF8gNv#4>z!cypARpLQ0y-t4AdzZ<6RBqFUXIMS=q>Uu#S zrn$WQ7*D=OMzP9UJSzR{p3cuATN~0p8%JlA87K6Njb)HBHgFe|ghRb1U6+Rj)y zCNLGXM6mp(x?-2t5d)A6_8tvQt^YsI$9YZEXNDCeBNd~B%T(cxawagV>z%BfLk!E+`S=g10t zSmR%GIr=&OEpqVx1#|ZITLDr-vVw8qXjv*f@%GOK>~2RayQ_U{12my!o$}=ABlA@{ zgaM{u$r>*tyEDzLt%?G>JH5>O6oGJ6!@~yI*WQ%h_;YaG*vl+h^IpaJqkXb6-Yu_c zvAO(eT_18@hlptWo?+vpT+IAxU#4DAxN5P)jIE=tsHjIK>nVEC!>AWBYenM=*(cMq zIVT=<^EBJ$Mss9kGn|Med9@#2u2g^E|cZ9rF zp4E_aDlKS;&k%aoUDq5-@hby8LCZm_+tdCfHugNQV>=UOv7E{B&P|b}&*P_n@fZbw z8*r|!i;8j@6*XolcZi>ajofg;a<%` zo+VV&{WJ4L8AdpR!7)O7-?fo|fxwC91w>6eFMVoiiYI?<>)`g4R904&l%T?}MMXt< zrSoIiwr~d-9)4WJ4$%7nCdQM22tR*+|NHmsy}i8}=!`w_XHnHS`*X7z>M&%vb!< z&<5Hp5IzN}fWz?tiYi#ND(Ky0Uo#jD{d?t4hMNqoGoNcrQCta>w{l4@jtc7I)IxWx z-Do&k#|0G?x81JrEZR(#AEmCvmNuqH)(DXn>}B~D9ARNi?NVSAu#%V?Rc>LAV!J|} z@d;%uEweelYQ~p`xE7>-#e`}5dSl`Q>(n^X1pfCQvcyyndRsxzaXgK-)$7_89@Hibwa>}Ksj+TWE zd0{HB+(iSRjUN27Y;T(l*f>AGwIQj%D-M;gq7GB2j6S`4_X5ebb(e6Dq9*|DY%uN| zsSGPjmh%<{Q{NCeI)l}g4UCM8eR~66=ajy!F)f@bI>JW%*ZDtP`u|0w^|xvI8*2UU d7)-4Dr7m_lKDEowj=`V%5)Z{Q?mc<+e*mpT3IqTE diff --git a/pr-preview/pr-1594/assets/images/Azure_Storage_Account_Name-0f3730e71af4f785f38be9df59f63d5e.png b/pr-preview/pr-1594/assets/images/Azure_Storage_Account_Name-0f3730e71af4f785f38be9df59f63d5e.png deleted file mode 100644 index 761c8750572434c800af1570cbb2d5a75480054e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36204 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

hcXFa+s7XfaB+J=TVXnaw|#i%UwBADt?=I2Fq0 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�|UNTFfT$Q*Ai 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

  • phFVqI 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 Eg52>zKmY&$ diff --git a/pr-preview/pr-1594/assets/images/capture-details-page--overview-f9b94a89b40a2b4e9b4b000d76a5fd64.png b/pr-preview/pr-1594/assets/images/capture-details-page--overview-f9b94a89b40a2b4e9b4b000d76a5fd64.png deleted file mode 100644 index 3d8ae66d2dcfbb778bc844b577e3f43cbc48b5bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75493 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 JWt~$(698roSGNEF diff --git a/pr-preview/pr-1594/assets/images/capture-details-page--spec-1ab774883c35c141ebb72ed8c82df94a.png b/pr-preview/pr-1594/assets/images/capture-details-page--spec-1ab774883c35c141ebb72ed8c82df94a.png deleted file mode 100644 index 51ff114eb6f169b4a6df7cc5416c88c1069aaeda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39145 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 advuc1*nhFfHhksSKT{)wAr*e_&;J6e4J5t* diff --git a/pr-preview/pr-1594/assets/images/capture-page-8d3387cfc38707280bb54a2e42c4c999.png b/pr-preview/pr-1594/assets/images/capture-page-8d3387cfc38707280bb54a2e42c4c999.png deleted file mode 100644 index e3ff7d612783a82b43326ab719bfab2bba3df181..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73746 zcmeEtcT|(X@@TN3C}07RCQ1?My@f6{AiZ}fp+hJMB{T&U6#?nJ_fR5Tx~PcsPNX-f zq4&=Ff_m@$y>i~W=e*y4cR8GI^L?|kyEC)1voo`ARh8uk2`C6aAP^x$URoUlx;zI0 z;gw�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 bLF0dBG0&_*@3qZh3_#%N>gTe~DWM4f{F;cW diff --git a/pr-preview/pr-1594/assets/images/captures-new-4479ed989de046cd79db471d502bfc89.svg b/pr-preview/pr-1594/assets/images/captures-new-4479ed989de046cd79db471d502bfc89.svg deleted file mode 100644 index bff13b86f0..0000000000 --- a/pr-preview/pr-1594/assets/images/captures-new-4479ed989de046cd79db471d502bfc89.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/images/collection-details-page--overview-84393a8d4246d9e8d218c4f8344c4c15.png b/pr-preview/pr-1594/assets/images/collection-details-page--overview-84393a8d4246d9e8d218c4f8344c4c15.png deleted file mode 100644 index 6b834b18da5477959e3fd6dd9f89048ac9f00f45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106588 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

    XM_q^xg~=1YJ5M#M+^@ZEr(R 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%0D$#| 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

    (^T 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 ?~&(ko!ZQ%HL`{Sqb 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 z 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 Uy=n`5UK)P*Z;J3jwg3PC diff --git a/pr-preview/pr-1594/assets/images/collection-details-page--spec-f934385ed9eb953ef06a24ca45692df3.png b/pr-preview/pr-1594/assets/images/collection-details-page--spec-f934385ed9eb953ef06a24ca45692df3.png deleted file mode 100644 index b7f4889c4857c90828a914674ba351a2043f3d63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36683 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

      FTojWN5g+?(o*RZe&o1Nu>&D~v9(EfXXdt^?r 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

      =m96++Kl$IAAedr2kQvXvIE5B}1 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 Rf5L!=h@hlE;U}#h{|}b~@xcH9 diff --git a/pr-preview/pr-1594/assets/images/evolution-re-create-ui-d8ae2ab634980751f8c87a0483f96d39.png b/pr-preview/pr-1594/assets/images/evolution-re-create-ui-d8ae2ab634980751f8c87a0483f96d39.png deleted file mode 100644 index 7935be0fe6b38d65db1493364e660f35390071da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 798420 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

      s=z1%-a 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

      #uJ(oi!sv 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

      s#*|`D35NLp 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%0Du7 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 diff --git a/pr-preview/pr-1594/assets/images/journals-d78b87f0eda7164e8a9936e36c4d7a0e.svg b/pr-preview/pr-1594/assets/images/journals-d78b87f0eda7164e8a9936e36c4d7a0e.svg deleted file mode 100644 index 0099d878e0..0000000000 --- a/pr-preview/pr-1594/assets/images/journals-d78b87f0eda7164e8a9936e36c4d7a0e.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/images/login-screen-d4dd6652cdd8a1c64997b2ae85a00050.png b/pr-preview/pr-1594/assets/images/login-screen-d4dd6652cdd8a1c64997b2ae85a00050.png deleted file mode 100644 index 1a49b14fb7ae5e784d7b63257824149fe2d9c0d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22064 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

      p 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

      2L2tzeXBAi6X+ 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

      0KASUzF2^K)Sj6}Av0WC=Oe&Z@4n%5p)5 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≪08IOHoaVG(TUS6{ztQVIsTA{By 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%0A;hk{;LvWl<$QJf#^C>mg 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 z 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�ydQ8Xj93 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 z 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�H{9gt;V#cvq(NJ2{vpDE8{Z$T26d1$_Op=;j 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 z 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 z%0A6N**YFjz{&i=>9{1ITcgOWz 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 z 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≥sRD^WCmNQE0c4G2Pz(-p2W%Ym zeZy2Ic~>eZK!HcVgC2}1-Z=Q7SS_?8mSvQyPIKzcb?##xZsf#1#=!^zz(TH&D1a6g zR*MW|_Ye{w$3pjU+?X|@0DfS{K02Y|ffQgBvmysnTVgbh68Ok@0UpBGCjg^BT)(W4 zFvb>rsK8Bo`OFoL;{yf=00Xq3u6fvl6sz3_IkaGpzwQGO7N}_kXfeW=L8AWy1SkLj z01-1=W+J~pg*}H&ctH9zmkI?EYIAiuelgn`39F{h0a2GR5*?cpH5p(dL;BWm>87nKBGs4e z10N(DP^l`%kKT5T(^d1SK=_HS1Lak)2GyGNZdth5TAM-FqG-T&jq7f&#YeUU)|`OH)U?CpO0MRMLm$;+ZxKL|-QGu0)| ztUkuDgBxT>>UkN%6eZP^JT|ia&NyDM8gP_MW^Davmv2ZTD3MEQqK*HFYQe1?kAp~5 zXlBX`GS`x)}^qvgTD2ht^T@`3o{Th~TB673zrpYtGg)QD8A+NjrE%(61WkC+F(NM-9!r~2o zWUF4?IOgws@4Mjn{&)EhUhpHw8QM)l8|UT5@!&B?$#nPj%BLkCKgxx;(Vh~{7v3VA zPkG8ipOOg)%ow?V?4>Qwda@kM7PdIr(YyniSrvXWlhJp7a3lJ{10L^Hx0mk?|M}Pi zU$(=qI%T#q^4vdO!1~tDK&VxVOd+`S*yqYUa*>MI59;HpPzC?6ESmlDW5qE#3VSNT zh4V$Jef!2!Ia=f(%%K12}*P7zz5Pf8zHJd%}D4 zH-k}OB>$ibssITsxPvU%f<3r{Kp2EVID|Xc2u65>kzj<7aD+@qH%i!qNN9wP&?&EJ%e`ScO?QgVyD zh*%4R7>R^Ph=K@;lxT^Hc!-HOh^ycVtI&pj_y~xo3aVI$tr&`aD2s`>h<~UGkMIb7 zmpX(m)R6hzq*n4!58Sa_5c!la6W!F#b@ExIm7%Ko0-#4Y|;d zxS)Bta0}=-knXsTwvc-Nk_*zHc?n4l_NXhlpbNQhe|#u+=@@R&@C~@23M?az?x=?& zxsmcnlJ%&Eu;&i)P>!jmcIfyk5E*U@`47JmjRgOxEB_FXxIhc^sF5T|kGsMr2yqWT zcQ`AzdmXclO!*P@QV^gc5b@v+QyC9S!X5V)Cplu3xL}l%0uTM*4zLn`KjIGl;2=Qq zD=^p(I6@Eh@*|{Tls_VA@F14eVU-dBc4B#z^gxwtHN-2iI()h9jp?UnQ|~7*CLw%gOSIUcPE2Q z`I;Re8~4yz1R*KAvkz<;no@~$S2HQ$wCobBNBfx|YIkFh{V3re7 zAtSRYJQWXlsV_&PBi%S~F9SRp(^I?wJj4HK9kS__dxD$-@gv&7oFa#tR2iL7bSSDR z8N4GXR|9rp>Sw{+jB7y!C-1y^0D6NBfWa{M85G?J8u7K4iMY-ERxsB;fxcMm_4qI8#^JcV+S zQ85$}c>;JYu6qmA*DP1hgmA$+!(qyeH{%4dA>;utL_d`PFHR2Lgp8l{BS zc%~vKM>=ytH&N6fD7T?}AZKZeL2$TH8H&}tF@CTLl3}O} z<_LfynYyX`z<&av2o_+g{on|SK&qySs#@a+kie>@ssXSn ztNcK#wmPl2dakvq0gx~uexM4$dZ-kzuGHEOj!FR<5UKnyspjzr6;J_>AYgV{un)mF z7SlDG@uam=oRBv%oxz)K8mC8RjUjV0u0b8oH*<;i9s@VA)@E&O>Y9w9G5N_r+Txl9 zyRr|#FL(G=Lc?jtMn2(VK_CC4ID(V2^MkFlvKVEH84Us&kU=2ysUBau zd(rolNjtYRAu{qX544cCdb_uL%eSwfx3$2xweYurOAD}&w}socdHc70%eac`xQ$B- z)ete&APv%R3#$;2xd3~xcMAo%xdFM5qRY9XTe`643Lt3<;U{*tu#lU}xuE;HuIsv> zOS+<)3#q%1i{x;0+q)~lw4YNA&`=HIAP(Yy4&y)#$!omFo4m!#yyzef<50ZOiw@Qh zz2a~V)PTIsaJOb6pRkrK*10!!54fE z-JlN4a1Ivy!0NCK*+32IKn)Q*!5KWk=EI3X01nFlytUaHqDK&wNe;}nrWD%{ zLrWS%T*QbRoBaRLSQKdy9LbU#$&cI(>);9I5Xsq~4B0@≪k`9LkbB4bbok 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%0ArgJ_+HCc3Aj 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�ZP1+ zkk-R>D+Mou#&sk?ORb?wQ@To)0!ptLrBi98(xscaQz>Dopl6Dv2{L(km609C2gs>; z8E0~n;0FQF08a3F5Re6%-~Y1(L%4H6(Q5f2tX2k)SC^9dIJSwmbwF76Nwu`mmQC<|EC3bH^btoo{iqW^|p zI16d0hP2uWw@Ryoq90(mtF7xF;2Mb7>a5xNt>GH3uUf9)+O6KouG$(hrO*yil&1HJuM{Vd zE!GFP$DVKMdXt6)7m9&4+5nE)ot>9x9qNIuhiJ_y1>DJVl}kM04PIieoH$Z(m)IM5gyT?3jS~p2KirLf&V0CS{D64 z3;9a6Wy=*@>j8K*d#4s@d%y=ast1}DX;Lr=%7|gfNNKOuww3m3lm=;owFC{ol9-iO zdSJLSX1Incw|+ZomquwmX}D7G2U1`NNB|GjLnVv?E-iH~C*`>XDut=3D6umVg`f!D za1x{wptD&Mvw(l(VN7DxeFyPx)UXX!Mj!OI9?)>R($KSu(+~}@4Z(X5)qq{SOCI_| zfA~^33-JqP61DX)3rqAMTiX<(3Kqn-4x%~sfCns=jeStQQh*13r3ZxzSWS=t=?hqYWxu19zxj*5=c~Sj+y4joo4|(qS4;2* z$zTYW@LY{Vy7|x!rBDZBs}E9?DYdz5tYNbj(??-tFnBk@dO|^qvkd`5IR~*GS;h>K zBPSEI!f-Oe=u{rhusK=TaL`o?qR1fE+cDou#6=7*uu*V%5CR6Z1RR9~P29vx98t~K z#2=7QNALj>rNvfkQ5ir`8x_S){KQNQ#S9h32XzF0;0^jP4|$+9t_8<%j9j!;TgHW3 zbWF#^6~}ulTXihQNf2CR0|H4v2er^88$+|L+a2IFFpJa34s$TWE4%`ccL+l;4IvFH zY{K6_L6F0C6GSk*n>4`S*c1{N;3u58eU?LtGpZFX2S)u zT>^t9!z;t*aUS}UWeT$=GVFJfb1({I&hG}vw|l~SG{QO@3tU@WtGgBWaKWXJ2+r2S zqwC7EOwegsQ$BXYNBLw)0W>;OMOS(=sd>!0EYY)MIVHW~CpUZ$J&P}@&CsV_L$Eaq{GzzIsd3aJo& zKHVL)zzLg!3E|fY&>&62S_{%-M%;l3tDp)2lnP6IwIqBo*;O9fA=M7uwOgS)_@D>? z9mK2-p0E7S0SWXMPE`O{QwWD;ke3W`k&_`=z(@MZiWU$pQHi!j;v64^f`hR<+S$*>616b)in3)}<^ zwJ;F>7FPDXFVJ98BY_;+jFbVg2(JBO*s;~KZU5k<=pXlRncbG#xNUVzgB8v_FTc%v z4xZMaliUBr!z?8}0+^LsO3@wefZ}sR)oi6Swbn?gDW>2K;dVHgQ+D-XCeNVQWTqWw zgg@O;X7%yd#>5HYEjX`W3hLceiy(%a06@<`e^W~*XhIEWf)S|@Q@d$k{_)Qc5+Hqc z;9IVs%2(m3{S~!|$n=7sw`mIAuv2B%IDk^vtWXQ{;0^Kx4Qa$pnJr(uM4f8853=zzT7$RdO^y;lwZBK>yiw^bAAov}@L88FL5Zln{pH2|e zpu?)bZK)f&5veJxVeHb@9EyO@!Dbr>X%nx+KK(5ne}JK&g=KtdQ$u$2bB}4Q|&t`OuprBMSn~F*q@{ z+>Y=GPtg8XwMtG6*(C(V)Q}43 zS0CSi@xD6`ac zI_^LVt>DsS*B;k&IbwxJT~%*7y#F21unL=lFJ+Q3gLBzQ%U%|wW$r#f-;uO}vnGLp z_SY14Kg<+9Nk6n4KVch>^rSJdDve?@&Oz`?&-jgxpvaLA zaGtcBGx?PtK{i_rT1F_GtqN#JDADi=!nz7wRjd1fw49)Zwcy=_V@LX-3WcMFTBaWn zWcf*(43lrOWDgJW01t&|3)jl3g&3>ax~!P!i0{g(rJxF*=&jmn{KWtJtq`uzkFD=i z3WL}VHRbr*&;1Non@zz=&m7Ei?UlO3OS&Yb64GhO`9n7Y$+ZU z+7IU4&;R`|ajTpu0I`psKL36N3lcP#P~pOb_zXHcm=K}Ff&vvzq_}XOLx>DLeq=at zBS?}Z8TK=oQsqjPEnU8Z8B^v=nl)|S#Fm3h{zTAEw6#x3jB=F+l3qn1ZdUM*FnNZCTZS(d8LrEHB}y}DJY%*Zo4e=du9 zDekMCUr%0LyDICRo&Q6xK3zI@Te4_*yC+%xeERk6-^YL7XhnM7W<>)qKmef;FhBwe zG!Vf8r3sKh0lk4n8U~?(h8hPMlu$tg4~&KtXxxFvAF?Rh2{E4b>F1qx+Ic5G7hi-i zMj2<65vjh~ndKDkqS*U$4twqgao3BOrr=w$xMr?O6#7E`k|*C8vg_|P(cSJ zw5NWoil&ukdd#Lu2^(#c$w#Gulu=73#gtM@zexreCn?P)R7gdQRMSU8#T1%Xl97iY z5^YK`zPH}7rTT&_WL9CilTKEVW*$|2 zOr{kdpI#*uX;Mih6|a*?MjA{OPNox1oDRFJ8X~3hI;AA7o}$6)eUZ4)jPZ82_HskJ~1I#gr~oL`|mHR zvV#nV#$eVdO_`>+w=igMtzsV=+t@xPwr6C+V?gReg{Z-~=#dT+k4weV7Pbv*v8`<+ zYg9C5kq|N6#7+Gmgr9aoriAzne=me#3}sl5S44wKlR}lWBt@XE84rPC^AV>ov8V@j zEdLqQ;8gc6*SSt)18iZlkkN2BDoQ1TK&yBN`*2b(ejEZGZsFYw#W+SX_RD3nAdnQ* zXrTyE19V}7-qKd_3<~cN&+X32F9ZuX=y?{@`fsAkq^Syq$BsBoy&6K4}2NZp7+G3UiPC8c+dik1pk8O zGX}IwfcgkPvoKvXk+jTqo*%4bYvI@1-ZD@?v}M>JNEqgUi;Hm~SuP=Q*D+00@Us!#<`fjZHk z-o~drEh;8zu^V7Pb*VlrDpZTQRjVo$s$P-@JX)2Kz=-7|a54$s#B~vduc!vA57W`x5W(>TXD zrs3vum_r@rScf^9VGeeL;~a8k2cPq-=V>(B9B6)XInu0+HBUOt&xmq%R|{Xk^hJ{V zxJO*OJZe(!sw-OY);?g74Q;r&)vY!MIv&l9R&(RgZYGDD0bS^I=(!owu(LVzybfms zI?;XBwVU@WY(764*5yEltY7VBZrGaEZbpYTXq}E_tjv)>L(_N3Y7pANv5YgjSsCHD#G!Q^>^vKK(y`V? zIjnIFa$G~-@|O3TwLuPir#T(XSVfw4;-+_$LWLuL6D8HXa{rbK3KsA-2eiu(>zGFy z9W$5p&0|dtS;u_l%^*i8nt_f(2YMZsNOqt1ypBMh108|ZwasOIbE@YY=RJqEw6(Df zSg=*RFrh^$QaEKq( zLIG%4*qI&7Xhxo`fedFbLmM`~hSc>PZD`j#=5@zD#i=Yq)Sco^9t2q*+Jj%1Z_iKiA2!-1t2f>4dqYH<52n9JihfpB6 zO9+Kb2!$SWhRBP&o147Ji@&PNI-6^T>x(aqu)va#l?;rZ@jE>aq{1p3FN&xWet?B- zmi4AN@W&j0dIJ!YYI$;Y1C6kTq^-vpp0-yrVj7^SPdjI%U%aEV>!eT8c3dh^e?T zuNcN)#q;ScYwwhsVRVN~F1~ z^EsKjJf3s2OaQ+9D@Ah%1v~=FbHF34Il9BPsiQkRg9WP4 zvMN)FuIL9+I7HHmkA7IhZKTL-1Q@4qy?C3qjqEr$+em%`$y@`tUjqeL7=?PQvvUvy zrfY^doX2&jhh|U)R+vM?!?Sqf2I_k=>i?TJjN{0kEVFc&hG)pDp^&Yrzz1Orx4oK1 zGBHM~(3Y~mhgvAE-Km#)5yp7gh%y0-tyGt+XsMRE2U@7evZTmw!3fiO21j$XN6R@_ zgS#}OyIixgKC??D3kRcHhF;S%VGF=>U^+^JHCyYs$J04oi%VOByK9?v$QfZ2X5H2RwIXh!?i>+v_sQ|UNbaySO?gwvu1!z zrVBu3NW*hzwLJT^GHWy6w|}Ph=;cD3)7M(777cpzzB?-iIED%L+J;2 zI?l}0P7j2{NJNu*&;}xtF(7*}^8a)O@wBn@^syoPF;)n&W?+SI2(p25v1&N7Re*(R zs4@MVvGbfU@~kl#JBNDMhj%C}(5QvmSTM`-Fv^OK2Q?4zSPlrCFbHc739Zn@DlF>2 zn}^)a4{bSMREP@HFEoLZ6YYxrQqeVu7yFVg6;07{p|2CIi2IsR6CJR&f)$16yj}v) zA5A-?)SuX4lK?v_8C_A}!mXhAy4w0W8-0`0S_)r8Q69yuvY?97nk~Q>3Gb9fE!`_m z>y^17#vTRIGcC2M=r7m-Gqjkm?9(q4HLWVmucfFmC~X&Rgi$2L(Iq4bBh4Q#{g=E# z(?U&Cmnl+un1^bZ1tR;gXa8u_^c*r7oi7`&? zRL5-88uL^h^VCSKR87s#S%6G_7>-tG1y!)sSRjwshz08?1?Zp-TOg0;h_Ll|Eay1T z>L8Ehu#N~*kJV_8VfBt^Ef4Paj`yfcL)BIjE7FE22zrQyMnki0*t#+!S8XfTYSV^p zC|61YM{dZ5Zukan=!R`jS6V|?eAPC64NY}5*K*y4bJfj%C0ADsnmSFp`Vv4vSY?1q-*SZu(Cj=cts6+({%+qQLEuzf|b zJ%=9~t0RRKGqoFR#M-~@EVIfYe4vMFsD*T}S(<%6Zpb>fEeE$n2WzM{WI%?sJwSB0 zhEWg&J-j)^9a(kAI%uQWBOKYrg}<942hWW*Zs;>wpawW0E#d)}sBD*`43{famv%6P zLr4UwY^|-h-Q^n6_{tqFIyb;Y-oOQzj(E9NgFT*mKc0iObvVKIONU#_gvc$2bU+7n zz=lkCUeNtSb^ka`b}-*KB*Lk?xlbg+eKW%{EJGnQhj5sNgM158FuQ#?jwvgMiA>)A zr78DP7uQ2Je>20|t3;mbx6pmRdEmB*R=o-7@UNPJFa!s0KK>F3Bv3uP6mYPy|nA39|5CH%4VLnv)>qcr|A2mfm{WLSoDPzU*}25qy~ zmH)+QW)?yebYFmM=@D6IcOnH^aENx0XrBn9i&knFT3%q(=vdon^+iF@9oeexSad+# zOF(IRWQ98uI%YtIP-KOKGY5VCz27@oT9etEjz8z4YMavrYM5ql;ia0mhwrEbQmAN} zFy*E8>lhM~tq_NC$jhvQ>ce(G2c$V%B)Ze|;~X1JYST5u(}rfSH8<R%bx;a}@%DID3cc|gXOCJ~k!-#2A@>)S(TF*P-4l(9 zy|U9LU-B5W#-P5^ZoMrhx6>y#t*EeaBu{bKolMmF?usB0ks?Ik1#=@$i+oTEB4_iS zp$so?9~`!3yMoi3LMfT}Ix=qaJqH}wkyDQdus}D_Dn&{*nF=C>MlRQKLI1~7Mo03W zuyeRT5w@6fKDTuIpzT4g2ixxNOoi1Sn~ndTjZEEdO*M5=&s5Ivu~RQ9PL0%76?Ir0 zbs?K|P}kJC&Iej3EMN7EScnDmunu5ntnAQG&q%Cc=kXe^jt4V#W2c4HzVv9H5$5VI zcMykaFf?%hZaLF-Za*}JTW;V!H1i$qaaf1dG_yq;SZdJCJliv+1Gf29ICBsOVcYh5 z$M^RhhiJ%$c-e`4Q1hnsiF*-pX*YNoS!fagw$~&y-FCA?gJPP~ZKnIT07T7b3t8?} zW}U6JH*2#u12l)XZr*12+}3w@0P6gr3Ea7vN-v4090zDW_?fQ{zW-6bYN&<)L`MXc z-djAu^ks*eYhr$5hsV1H?;Yro_boF;1c9is748o<~ z-l+ch$`4&ytUBRlh4GV@x`Ayc>rEHWaP}Zh}YG&?|xpU!|DQm`T znJ9vyoRveT4V^iT=s0%#D3aU9jNC|)oHkF@K7K9v@xzBNCd`^PZ{p0^?_SM&v=rqG zDs<>gSwxQ_O{#P$)22?JLX9eQD%Gl1uVT%rbt~7dUWv}6IrC-9W!lb>{CE;2y0vZ9 za_cBp9XfXFE;%!|jv1?Eus}^acPZRCbIw*NLk8+2L}w(;h2*yJWV*L*(WPU1GBB){ z{Q8N7>3J$Xp6wLT>dLdG(XXyw!;UR`HtpKBZ{yAl+y8Uen)~*_Lfe*GWw>iIpTsQk zqq&snGF=8f4IrfpiYO!F{hx|AtXC}bNurcJ(j<9OB5$HO+CzkvgFKW>arg?MKQx{H&H0fJHgj zq?1oV8Ksm{Qt4EFW4Xi+h1#H$7F@%D8B%kQ=|xf|&NO2UGt7{fA~OatbB;2rbhC;x z=Wt}rMjWN*WtSwGq+VL*oWn|x_Q^EXZ!h(OPyc<6;=`yu_z2jjK8(^rihrWPH0h(0 zN;(s0`&7!PqcJ79Po%a~*{Z9r!WyfrvodubO#NIsp*HiFGZ}N_ET@)8a*bpoH6t z0&YsHz4zjqufF?wWouZ#1*T0o=8#jc!3JM*u)^dFj1D=5S>wzo5rwl3G665sEGX-& z!wxLUz%q(6>=djKIoDWIa5*a*%nmy%n^R882KQRcGxUL$s7#l-bZVp#S}GyBkDkg8 zJhimbPA#;IDpP=;of_n*O?&z@Xjj+NPyfCAa^1DpUxSTrOZ!wq%{1YdLvq^WxXiZ8 zX%h_h!(?*A4m#_wO&G`1KvtMu%@n52I_DI;HrtRrT=?7scYHX(;S|iyIoHK9Pkvd& z15-W%zShq>tcD%B=%bTfx@^4(IL|!KOyjcau7~qFJF%1OGUT-0|H zIj*NIJ3EHcZanO^hhw%o?#P2{qv{^zS$#KM-cO@MS;B@DU<~YO=vlg|e984~6K$T985(wU7lo)aS$}LNSV5t51CvWyLFEF^gIhT9C%( zMJr0^H<8jJ8NqnH&Y>|vYLp@y+vvtOCWv}Dxg1yaaXmWP1dl<{$2~R&wLD(0XsWu^ z_r@}lM`ej~LaHK7)QHH>ct$`!W1k-3Xvs@rGLu)KVubW@Mw@(+li#b!Cqc;%PoDC7 zs5~VqS81P7rjnGftj|44na8VCvMc*Yk|ulU%U=Q$C;IS*H(cS0Qy}vc#zf{ZlX=W% z8Z(;9lqNK(X-#YPVwuRK1^+XhnM`GNlbNm{MlJn8ixjG2gzB_K3rE-r71~f1>4YH> zQ^-zuDzOwZ)TasK8P9q4^PVik=Me3QLQ{-T7ULiW`GV=theEV;r5syL@ZpbkoI)7G zAjU8{I*eav)T6)f=tfCu(vxVp^=Eo(7=QH)&_BN(SGEig>G3%tIy zrn;D|E^7K(VDN&rym)PGcR}0PLIM}6)denq(c9PJl^3pMt!ay)i`Fvt7Ruz@sQx29 z*u0|@o!u^XyQ`at(xe}~C~9ki(OO`bHyG+wZ)#h+3t+r<7xKleE>62!--(m%}&Fe87AzWW{ z^|$bS?|W?w-TxTV7{*8@MlbG|C9VvS5aaNQB3qH-FM~PEQVEhLd-023uyz>rWvwob z0bS*;S;wu#MOTA?3ta315~z5DBZP5`M)s{L*R;>o z#W0{-+8UP@%~j^qR$daqM6^SWSa}KP#BAzQqxzN-HnWSL`(h`?8xB!A9!eiTW%F+Bp~r;V7EIL zd95ifdYf^N`?kKc98)KNdf|07J2`N(3X=xA0;X)s}L(do%eYoPxz{s(Fbz5

      lAXnA}cp;ux1IOIA7dCK$pR+sPC*0j!e(=lH2`rrjv6Z}CSH4%g-j(Gn#|6lH{fOJYn-_@YGvXmHR>>>3 zxc@QMX@4VcQ`iGG=bVn^@}q*a&%stOwrNfE8Q=lx%V-!~ zOX!2r^n&``f-p#+MoHi>R3HUfU7Og^dVpo8lk-$%00BhFGyDto`MrT zp%ac*6S@KwI^iw2f-QVgM%jWk5fw6Fp>#b{6h`4KNY@lTVHKv~6)F=kw8J>S1OG)y z8{0XFfRM^P;NcPK;T}Q>9o|u7=>z8+UAovxWrap>45H46#bH4RA`apq9+JNtA}Li^ zJG>Anv_clX(+efk4zW`V&Comn6c4pRDa;c;$x}j+qC2HxKlRfl+7k?skS#2c5`~ap z@nJ6NqJrREZy?frP!WX0L?B%cBgOs;%H+o|oF<>!@SYypf3@(ZxUSotE2W5HEJ4TixHPScg<37#? z9W66M5<%+O(aROWJ1~zqFB$PP?UgJ*=RV59jasww&X~53IjHhISOG% z3guAhMlKnp_YB2R66I1dWm7ukQ$l4_O662iWmQ_`RbpjUYUNgPWmkITSAu0&ise|s IL_h!lJCm4J#Q*>R diff --git a/pr-preview/pr-1594/assets/images/materialization-details-page--overview-3d6549a0a57b21fa5c7917a7980ee7ba.png b/pr-preview/pr-1594/assets/images/materialization-details-page--overview-3d6549a0a57b21fa5c7917a7980ee7ba.png deleted file mode 100644 index e00a20a281ce9700032898533fccbd85683f4dc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77445 zcmeFYby(F+w?DiQ6$3#;N>Wllx*Me%>F%ygcPR+cA}ys-(%sz+BF(0|yYn|2@B4n9 zbKc*3z1MlKbN)MDuFanPom#VI&6+i9eI`IwTI9*27mpwi$P+P9K{*Hn@h1dw$LPU* z@aEl6t_t}2WvC)%Bql}$c>sQZk_dMp2q5(n5hVXg8{Gkw5D+2Y6~qsGo`E#H4E*x~ z;oj|cFi7M6m5v1ISAUg(*I_`o19<|z6TpWNq@RQDEbuY)|I=3;NW-58w|})Dbq{?0 z{uU9Fk|koKWuT{JVg~i;8JRfg**Tf$i5OToSvWXZ7(xFC-~L4ryrswXzxV)sA58@W zWW@voh^%d)My3{q5QuYvM>vmYGe2IdwtSip)d$C?Xq~e7Lmz&AN>Td$0OM`$uPmR= zBMFn=pHnN?ALZRc;={~Fq3x^Uta$Wc7U@%VP{fa*$kY1NU&L)b3!XLAClzi;4@#fO z_m(m655FeC2@6>33B-05dWyK(MlWn&v|jur(tG8!%0DdM>0Q#2$9DffTyGrmZa@o@ zB-`tGhxtq?iIo}|JR>0v33q93vtRcD2rKg{F54<+3mTZ3g{e41@W?SA)8v%UQ@^0v zBefyTHjAW7)$FsKp3jM<%CV8TZjzN&*P7?-^=v8h77~5>{o98pkvcEMvxNf#NVnR# zFFiuFiDTa8J)yVlNkPUaT0pw-nVI@}7GT3h`5bXV+u}n1>4VKXM_HC$gfPdeySsdd z%4&n!c?g5asmk$ciw{;O?$hSQe=S1N*oM@~R9SR{E@n_J9yDCwc*x&ht-QynG&TL= zg53imH>5a!pPl`#-=oOd<-KhkbLdTy>EQ|DZ+zR{{@rL>AcW4Q3M%$0Qj(ndP)k}} z1E`)Mt+S;ye8wQ$e9qRo`sRlAM0$qCrdB+}JJt2XM5YEj#L6sE^itLWh9;(>uC|8q zuF?wnuIBn22E=^4kGP#VK?9bC_PRvQmKIiaoX$MNx9xI*H2gIkG0|-idvhLQ6(C3g zP+LPHW?E)idKw{TQ%6Q(-bX~-wgyI=a)QEtH35F{5S!TBTXWLUIXOAeIx*2gZH?&| zI5;@y=o#r48EHTX8ao#&dtGN5D?1W+6MxzeG_=#VHMO=kg<288+tk&AI@t3N6N7xB zzv;8ImXi9Xc`LiWxB&P;=d5c@$3RO@XK6|I?=|e~g&aX6e-ZS5tzoC&Vr@t#XJ`j? zu+=vdax}EEC;9g#4D|o0Z|z`faXTCXeL6!6LrYN94)n_KAG(AuxqoWFSzv5xX?S7qk8YZSb7i;ru%xp!z@U{)f_kkNvhVC?zGuDG1effRiUC$U_Y8pVI)U zZ)(7Kn`AUHGGt+5VWeSYU}m6Urf1cs(KBEK|Cn`|*_arZ^;mTE{;er7D?58#D}6(F zQ=oBLQ_v10D+ddU5d#B_J|l|}4YL6QsLi6!LSw+d%tTLbWWdJ4&hc+e$k>_!snoUj zcdFn`8GxpA^*N06S&TSn*cc2rXqZ`y*lE}~^w?;a_38EX7?_OMnK)Q)n=;Vn6o%Sb z>VoMswbV5>q_eg%zRiF$ob!#W7!NTcE&adV$Xe*y8-WTu#FC~~4$l9|P%yPLl(*M~ zbCZFUgNd1ug@uEO6%3q_`Co;U3~lXzB*NRgRi3vw@M+-$g8_`yh07^u;PyQj3#Wjs zp{_mDRsjmN;357;?f#Q31(uV6uD!0HuDu~>^dCj6@V6qSp=ai#|3f~!IVq@tsgcY7 zS84d-A>sz*!IX=d+JXLEZeRUbQSyd1e}4V>X<>T1l!%CK7X@JapCQ=kIvN_>(h1u7 zlcjH>Yh`Q*w8vlK`uBU&|BEOvvoo_Yv(U5AaImwn(=hAmGScWVF|yDw8t8Gbau~9* zFzEdeg@0PNgBsa8>Dn5;F$R1DyaM8RyG0Sbx}7M>|456Ii6MLz0K;hL*=d;Q|7IBY zdCM@mzXnVP*BO70n49kZ!4vM=0{^CDK)pZjfbs&mknSI4_!rLrz5kQXUvu$4*#!~N z|90|U;_v^m>wnqxU*f=jsqp_w*Z;EXzr=z6QsMuVuKzZ6J^I&i%Fqf}K~CVXs%i&;ptQh02vO81xZov{y_l2`(#it@bS@UAx09_9 z2oXd~@Qs4=#O9Qfd&nqa`(A%3> zWc?^L4$4xDpGXn5eDmxrvD?(e1&M}KC;x}_lPg!3+KLmGK9_B#yo1^m?iGfXHi|g3 zKaWdOPRV1zKM#W9pYKK14K6Q+c$VMFe|{(F@Uz7Cs^C6R!41JizQ6T%RbphZPV(Xb z@kWKe%31TXm|Nt3x_!9sF^hfqlYI3p@INK)Wc_*Z>F>n@@D@mE&k@`e9%D;ig|m!*A5s6Z!beAG5^M7*eIe zInj~wOW#QFnnX_~S$d75m;Bvh%%^VWC5|Oz`fjR=3}uxU9(7-7ZtCG``bHbm*RW9 zJ>#e~Ry$5ev&uEZy1Hx+9#_8yg)F%oYj=t=t~q_2zCUy4+zzt1;_f4;8-k83hi@dD zE-5_1%I24odxl_T zZ5(78)xWR^lUtE_9P>L*N+KsWmvGHa;=C`3D-6&HJzTvQ+X&UFW|i;$=y8n0))q#w z9HUL&+QJ>pc{^>_+k8wdCmA0lOjYtxDs7kCXC08dhLRfzk7P_+jDN+iM)1*9dwSJ` z9QfxR%+96Y@!15%$@BH^+I2TG#7U~C@{G^C??FSm3Ak-9a?XyXUwXP76MWM>a9liom}>BGJ^0j~`{6@M0o03QLSH~AQ+={T)Yp*R9_>h1 zDXqo)LF2WXfv5WyF>M*5IOoTNf^u?S(s}^f-_@()avxx&$?CYAKRG2F7#PT0fAYAx z5sJ$;SmGZiFM6Glu7!*N6E8jko zjLFv^`=)?V^9XZgcYtra_yhvx5&85K9fC=x9sr7YT%gWZPDt%`VDSS2$Lj3L(}G)C zNc}>weY^t1ow2CiEMVfZTd#gvx;pi}3rO_^B5^k|t7$ACVrM+xD<55_YbY)mOQ)te2PGh|x+>yy#opqmdr? ztr)jAg__CRUvn0exvRlrdvW)cIvP!zdi>M7a)qihdADnJ@y@zA^jNPsorW1Y@rnG& z27}Y}yuuD45T$RZgi}hC zOa2ULpfmSE z{HD1Pjp{*rvd-mw78LzEVu4 zwdF>+F_QPbQAekJo6ot>kZB|jCfb*1>udN)~0 z{Xw-&1d63P&#yv9TU))U{vc59$5s%{Pq4NmcJzeXoo^bOAvJ^9T%gBHwaPn>V{%&B z+P(tPKlljH996J$g)?PvL4b_pT(~gw^+_YI-k`L0Dd;cfa3EiPquYX&=xw%i0?n9M zRccn?xv&#S^)C1a!u4boMrZGCwSW{4HzQk(8|Y@SGcleQklr_fdDHZ9tkjtB-2j8{ zOjXqOp4mXnLkLE9jN#RKTJ&6P87pOsniiDqD{~Ig=j}3oUoFIMy0sI?SEq=Ou4r1Z zr58_tn$SqfR*REqm-=D-{ewH7{v#!&`w7{wdX=4|6u$8tMUcjTYG!vqm7Z0yPICyFfS_Q^ye_A z?e7DRw}2{%iiM$13kuC7o-TupH&bzeW8c*cOnO;yacgHM<&twnWjd!P4*mk0mfJ_g z?9q3%R!n9}`NCUY`v*(yL~Pw$3+zS-nN6lgiZ0C)Id=iQ2nB_ujpH0?(p>85T`@Gh z6JYJ*<4gIMQNDyO^_v%z7R~|PHBl%e(<+PI~ox6^W?8m$zEiIic`$k(jiL-YxlW7fB?Ur87HFx}3nn}ga$9fv4HB zw&p|&7XGv2r@|Zvs{{fAYa!@iO7WpV*DAJhwpsv* zTRFYg03(?DwqN1;*es6EvSa!)RCFLgo|k<^H8OQ2$?YyH6|s^=f%i}4%k0HGRf`F@ zxVVt-`=rHGXl`J=(p=vTLpBtT(pgx}#qkUUYbX^E{aULmuvfioFjtwcP3mjY&W4ha za}9x@E6kJ6s5mZlk+jE%X>X4b_O8ytv@IC#i&-TX-#%mv!%HT2%{H<&i-a49)|XueF5RQBIDnN5BTVxM)BwllUg(+=2c@NX@Sjw8xlq zD-%cbK+h#vO({}E8IMMno?c)Wo&L1JyEqW6>b|Kxv4w?3x;?nMdi3sxGZ94OhWpJh z6$Z^kTbD`dXDC9={vx>u3Kj|hudCBcTYHB3C=}PTePZJ4oB;0+g#f+9j=3-ES7hB@ zZCzb~(R9q6zauD9^tmk-RqC!h33d+G+kT%FtCr0o{rK@CuHFR4$|{f9RHc7EV{vP4 z91`#_Ku}nC3Z*e%lg~MJGKrv~f*p~PCw#QIDVE2WH;Otc!&`+Ob+=!hirVFnscSCxXeTDRzf*WU!6DhRw~c@)!O#U5NPmit9|AT$ zV2oB&R}a)VNN8vznEoyxFdwn}CIpja&eHbhJ0>*fEK;;kDGsKJ>KZIo$7+*|?NRqQ zm(Nf-a`TJ6mIt(MPI-OauANB{+~e==$qxvitnK2X(GU+>4zaPd@41~uJiKRJlgXGi z)Qn%mm%5AQV`|@06PlehKprA?JPh z9>wx^eMXr@oScff`oVAsR7_lac}P1$UWy=Ua4O_UeA)hBQ<|@@M)TmHPw57$p1HX| z=luKURIBmZdsM3%b~CPaZmv4aFU~wR9O2Z%YNuNU8ecYB&eRxkL66;I8h!}H?rC;8 z?2q6kGQ0?J|CNvG;}@I?&L;MrX*@tSm=3Br+z;PqPkWW0%na@=BrCEd4j{o7AF*j? zk*d3~#{n5jHeY*1Kt$Yb>u8C`-baNU#qX4wnDbrLv?lB^-(F8 zyP~c8hI?HR@nCme?A}PswEU@3_nPou6sV0D^Kin^XS`?N|Z{|0&t z1)sMqHe7&lGWrWy-~bRpqpMvK|1g4ukWno$j0T_qmVu1}SX?t!q*`T&vD?|c7?7-I zY}~yfpN>XA5T4~}Zf>qb6DKk?!Gg`RZ8z-#B`PapeVuTTyTskK>O2(|5rN)(AC(A* zMdqM!xbwvT7mlSH;OnP=5W^-cZGG1GGrcC0EXCZr4P3QVd#%0$Dylfxduz_ov^Q}C zQ&qpJ+i^3Ce`Igy-{`qKbGUUm)F(GucsdfQu%B(tx#fO@BXUYlYzm_oaTIIp|5PF9hV$T z1eu|`M;ifO`S_ZbY*Dbi_4)bzx`noQ$sbUAP&%EpnSx zD(I(u?wcA1!LtPlf73oagIb%<@VXg~vS7=tKZO(bjvpiZ5SU*Jlivl(qIQ4>C&_~f zF8X1DC*J}u{U_sUUYRw1$Z=!MYV@}ANBN2^c59~9nr6Dm3SGMaPY${JT$4y0#W3j3 zY73UVa_bX&E-SP+;G3^~V;%Obu&}XG3is&ituGAja`KQ3(W=I@6BL{f@Op9|IWLc$ z#VSYVwp-w}*>`S9;*|ncA$&Xh`LYI1%@6O}Tw>xIeAk{}_;_#qMgJ-Bw@>Z=-MQ8w z-^)q;sM31w!*S}L%8=QOjSJZgoF1cM)oK~|*aQWWn4j$3GXK^M24~a15`bZUUi^~) zp0YpB--&;6{z?3u1NW-kKL6zWllVL5f2v5Q)rd^i{NtDfY_0|F_I|;IL|Eu_{^CmI zzEzK!`^U76x2k7Ss>ptkh9aIGp~W$JE+?gT4)I*M6*+o0T<5n;yMyn=AXwYe%YFBK zOz240u|JcSraCgK_0jq0D&=*O+*fnmfD;c7j zZdWyqtzoGgSaL{=%lt04J7I7bA!xE{lTCZ;NsbJC%e#YD;-$|EbJTFsQambnu1 z{CpTde(vQOsIko|c}4n}oW+j8`qH!ysa39AP1;J3)b>)68A8sq$^BHi)@(caXhrH( zXHkB4!R7|z;aVggnZ}Zx&R*niNt_p=vew))J@pBhMc3QOOPD84^Z9lR5WEZOuPvlZ z{?dYXtk*S=Tdxw6017U{k7%1K%6UJ^P2{eS8sBjIJ-^EZ9Oc_t}5Q(zgu^o#BJICY`pO25(ZP(23AP(6}1{ZbKkh1M+F$O-08atS3wB`5#(GllPiq?vU zuZE1MqN7DZfQN|H+=6BDU$a8F`Y8&bPb+Y4H{g|))m&@kHfV6-fH$M?8xA2 zA&Xo@T5rr*AvTN$F$`_gg!u|G-8&c`JXpGnqoS_04G~5ZdcmDVJ&8cwkSkVejO{IDX7Fwlfm#)T_pE1QF;Qn~gL8r%?`0~(>9*{N{H^?e)XsBRi z<7MnQZvUh|p={B<^t&Vj7G~~4GHn7b4b7xb_j;EL4&sz~m+$Y0LN+jT_k%UvucoXd z_${Yu?t08*`2`i@SK4x>tFe{)+hq|bCc9hR^%s0bnCzRV*|l<^v#K^xBl{r>!^6Jy zuchlkEZ|NZ)%U(Sn`OZ$Vdd~6w&yuVEV^-usakh)kz`^PhiVmVB#?4vmx*+>o8?@= zrY8Ao!B)}?QcH8hv)WDPVofbt|CU0}_7KUasCSiQf$V!LYbIToGL{dm(e{Qzv!f38&@fQl}$qU~$^=-)(9PBa(=BXvcl-lP!XMwlaGA(Un<$dA|4}6Oi^nZStZtd zeg`(||CIPUAO;Wf+&=$3MXp0~ihq2rA!{>{G5Q^)PiRK*XA_?EZ?s^ICoKK^7>m|K z=GIR5^Z-&g}?|57D8f z&Q|auNM*<=%kCI-(lk=#zq+`Wl#n24Ys(lA5D+U#e)WP3URZVd0V_7LimIxvzP`_Z zNeOc>(;)V3ztyzG%z&IvI~tQCBO~lwTQHlDT5coBenc*zbvs zRmXH+ougISWjOu>K~~mMiR7g+^ToczaZKr*62&3u@b+-5T!PZy{+r$yF61pp_t3a4 zux;Ym_-s{|J4A`=uA+aL4wmQxc`VB0InOE6gwkl7N)Ele>D}1hIrP;F7kQ8|+8*49 zhZ~=^M7}vCv07sKLYM^57x#?Q^2KsThkZ;TrQ)OZEJffRdYTgSSjo{bHX=f-$|1-% z2rEFXJT!GMV-OWDJlrfrv`n5K!{q@O!(;*zMR)VsjDQ)S^(zb9!etz`5)Eq{2}99R7OC+9!(`QmcY@nGqxw{5Wr1Ey>%xX3CnJuRLr=~z#Jc~*vM1_tTNFm zMhElH3jiddcX`&~+T(R0`@9doww*YU*0Ie%jT zvgH?bO+W3R9|8wXir0)5I2z|B?qPq_kkQ!=)FEPGv%*~+`W?hgP!_HH<7CUHrKM!F zptQBj)^JlIx+RYvAviBjWqeFWT#|IH?TKC(K8fo%W6$0m&PbjvGvMtFPfEM=51VG! zNIG@Sgs%CV+%pAuWoQlkwK76SCa>M^2o#9c# zwNCnS6#e(qbtUzON=K4#IiWROSvkXJ!`{1?y_GkO}wEl$0{L z!sxUsyF_kq-w$+&%Go}H)2R_BSK_(G65W?Zz7w|3jC+{`JJ8b5~2|Fh3mJwWXpJwhu}VJh_>WXt>1GZ zCbrtsDDA2_k(Tk6v^=2JbbE?D+aFhqRbg{LeuF!fERNBo%NmcvYWq6o11&l}zCfbd z@Y+D`V+e?XEWySPtP9F1C@JIU+QRgf=*(4%EHFSAt8IAp=|s6{+_KG?=Ng6lzqn-9G zEyW-UVxQYKYj(@Wn(ZGPSc{g=u$2~;;%cw5)Lru%a)33lJCG+e*6yomNuZ$gS#wD- zFifgcF)PZL|ISsPjOE73A4p-CfFaI4eac@^=L1ySbyQarrBH<5(WzlCr&_5=7ohdN z`{hGnY7*fTj0L_cUl3+x^!)w&1Fd$W0VBg{$~7MEIfXujblXUqUu>)jc_{uH5aTMd znrXfE@xP5XOte5c2L@F4RV{e9tu4pD;40^T!FwK==}?qq749X(U;Ett;{t^YgIn8k zh;T?;$Bw$wta1gBx#v_vjVh%8L55^vXP~0F$y62x==_Igq8f0N;fRTe!2|HiQZH-| zjM$q+WOUX(?AX{_>#QHDzE-UZbj+3aFVONpqBq@q0Q}pck`}KMtB!U0oa8Cxvq=5J zuEo~Aw2DbflY?OX*};{(K=8QTBbOd~HJC7~bvfDD zEyYu!o4^XGXC&ivT&`L=>rWjgupl*;YEDhfB=qsUaTCkM#{Eq8zmV=e-yy=cUfx80~(YPMKm5O@Mo?JLQe(0YfJ%aHP+Q z(gv@VXlbWg(z0#vI51j+YEkBt8{Rk8K3a$-IWo0B)W>Jo-ybzB`YmrluETW0A}0jz_h3E~?H(XudQx(Jyx+c@Inz z_+(Qre|q474zN&{k9lr1FfeJgq_Z)l)`p!R=)4!cO&=fGu68i+;;@AFw}FoT1FUop5j8K|HO35LiI7RcUiQPX=+^oD}HB`kI<*Wo{0D4ROzySuN59s+B`Fq!gt!_Nn@F&XdG>nf2JZlZKy>1eM zOq5!MQzfKl02}~~7ab;cL+iKhxCtX~cb8gt+{ruJ9HlFovNf)FB~!VYJdvx`KsC?3 z@;3+tChU*n;j_abCLmmCbXL?8Y|bXPz4bbFCW!$t(E7@VxHwv)(zx=D3w|t5S?ZF^ zwnmw%trqgt{A&m8srH7w440MCJEzVteRKWRNZt3yo9{k%f8VnwunvyG%`;R{;(saP zSHIB?X0yObU1hn+RIr7FPpxg;afi~IlJem}u6mr>&Kv(-xN&iOaM;nB+aa2#@uY34 zcldYoYx%6ZjW17b5IiRq_o7*~;^fFGTv<-v!&;mw6tWIwVV0p`6l+72#OYEb$52aL zux%DnYJ%Gl+!j;BI4)FfvWba_*le!Y3w$?$1qJaX7Spj<>a5L;(@9%gj>Y>crQi&J z=DPI)qbo+L@>kEYn_t77yZ*jKF5QlfTXk-P$;A=!>$46#$jO&3^0m>Uu%O3SbiYg9 zdH979pf>C)nq%*35lZ~@$nKwFxE#&*N5hF?9C}$i_gvJW|HFU@DJ3PPJS<@(X0dc* zbnk?^C3t7q`f$u9Cnty9ei6IWj5~Qh?R3dGT{6CNMZWI4VBrq{T%aC=t*?J6$^{!P zaN3FFc5UOGGVM=CbWQMk(p6XAu%`E*#L$J|gLr(OM)1oR^{%Vzl@EG*dv!dE!+oMn zThmISYlRL4^=^_Eb;|<4595l$^L}(o)xn7{kcg8t4)_h^iobB#MQbm$D>lZxV05QQ zMLD}fMhh1!G5_MAfp+7&z30Pb1_2s3PfDH^E zh4Tr_4`;KVo=wpV4o0*{=EPt)1aY$<3{Oudjg5`DX@%8ajXePyb-ngWa(7m|h|U)8 zFuq0@HENk-*=3O_aF7fGfUdJ?JpfI zcky}FR$)IEwCa!iEMF!`c}&RNb5uYNBKHWgS%NxQ->aMwxSZy~Ph^bBICAO4!Za#R z%_hp7ofqf31CsC1&jsbndkjpiv4C~Sf?l7{g>-dpkadaIH*y!#QEx5(dx>eJKmJ8C zCB|&R+LoP7QMx0BQ+iKji~m%}?cT6u&YJPbcYUN=@pcBUp9DqzYQ&cZg#$3 z2!~IOKs$*ktl=QZ`ut~(?NZZKT6OJ2dW)b{u0|%52uz1pAwJiMY^9zHHxD44JaF*{O^J z#8F8^ZdzvYpJwzYWmv3zq5RJG^1W0&v^g?C(!k)krFPv#Y`ork1dYnCj0P=Wy~kc$ zn(WF5oIhWl-4o@k_3}-yVzsx7KY1T|B?850$@eDN3FT}ZTU&9-jEhMtFLv|4y!+ff zwV#3lhy9v4#C&nS_5R7RZ{5W2_zgC6m1?qJBL{Amw2y2l8Ho!^C!w}SYIl5GF(Q1nS4nU8iZT>Ea zNK#d?;% z&GJlgh;qLmY3%9D!(@-9Ss7k3a@J_y)4R4ywkySGl=Yk}Kb7MXt54vVL=~JIYdbr` z$<^KV6#9IlRhJmGuMRHT?~<6!fh|2i_j1itlw0B-8R zMs0ypLA&>RT_2>$Y94)Idgn0{Nphxl@7^KfobuArQr7wiT|P!9#F7Eq_0IiV)bstl zU+;R7$|2re7~S$$mBAVJ>6DngW3)H=d>Kf7YmgVi61d8d0MKFKcUt#d&B`u{n~SFa zMs$9>-R4G!(l{`HFp5Vzl&>E2sY4Wm%GVC%xU{zSF~L^aLP1LJI3x>MAI{}R!AS?EsyV8My^KBEoGP&?oswDJb+A<35Fi6kk3%WIl6VeFevGbv|oN8uuA3(^tm4 zVcsYl9`)F@3BAHN${%Bk@PD4>9)K68cDx%Py8If|Xi`K7n|_&&v-I$X{p?l$T7k>K zr>PQ3ySbr3^swuz!lT^+-$7i7m~@VAsOx@zLM9YAg~FKuJ}tn&fpHLBZ`_LO#+hw2yN{JD#PLes=blH_cfB_-h$-zW)x#25&>R5 z9{>jw7L@ziZR98#q?p9*TysKDR!$+rNJe32w>OWp%>fSpc8cbe&q$YJ4clLF4oJj2 ztF!$f=8?Be;mUX96|K?Ne@J(C&)<=3ux#9;ND=7HZ=D&#K4L`bHa|DQlrB?_0 zodB0=>P|gx3zl5cC;_*HO1j?~uY!rSO{4i3J&%@f(P32$VJ{lZzIOtZ0t7d{T`tBI z?%O710`3#%!=13k#+Mt-nLdaFR~OU?UHab%6vF+VRvM$C4Q3ca$&{29`?op4u`3B- z{Y@=3@2gMocFUjbmnEYkjki|(FS7H^O!5u79b9JYq^qSD8#yp(#7mO3qdm@M!pukW zCI;Z{On&$PitO#u&~~mz-a#=G;Bu|7Ii19Lx8@jYW{jXTZ544 zzMX|dbPQCz@W-EsHR_bKO{NA8ti~l^x;!j)ID0U0mf@&N7%!f+HS_Jgqpw})-(S`d zhY#=<#SqX$R))-rszQ-dKDzndKr@#m7@$$@ndsXhXzRAv1nke*&$7?Z zBdqQ1iOMtlrIEqKo|w}MQq zB03X#>SlX0n<)7O-Ld28Xi_W(w8n7ox2vtBot$`APgsxQOLf650bhTS0?QSvn%aHq zvo1wpuzOVpSS56kfc*TCEVZG3*_TugFmgh>haEy60iJ2M zBS3rZ?PcK(k@;w@j8ps%bdraG=Nol9A6xybdFR=M?4o7tJOBiWO8IrWc1C}J#|mNa zjRm$6%gV|)8338^Fx8^X z5!($DaOqkOv;kI0#v@|%9(L2s7x3st0opvy2nT(7TNor`k?pDs7oBf{R zD9%Hkb;Ys0+8V|2)?;Re_ zw%?N&13+qGk`(8o5G}Zq37l|?ELXOf%R3t<0=yHJwlB0ivH13@Pp1yf-wTLj!YVL& zwKqEgla-mw&kgn$k5geA`HZ$bq*`vps7VBsuM~f$O*qTy)Q85z5v zxb(+Kx92HVMY)s16`jPkdf(&T7kh7ug`>SrHb*eL!EF|vT~-`=*{ks*{0j{&UY=5&te+WptvD1y$_tskc_(y$BlU;zxjr;BAJ;xL0>A zdL}hlk$w7v+C0(ar-9;9P*^mGfR5&JpNx!*!Ma1#bEXOr%wItxqRB`F0#H}>o+)hL zmPClC1!4sbZpH!#26;1^5}ot)T!?<8ISVgwGGhQPgE z;O>ar&u?_2%~p`7u3Mb77bvrOzYOv4@nSg~o?W2eEd$^-8E_0IY;VKOd8kpJQCkiN zxG4$O2$tFwjhXd*zX1AGPjBG?@@~6{O-j&{N1n&jQPl21d+E~^FH>Di4-qkrD4!7+)wQe=x znbxlUod$Y)VKZo0gfgXSQYHgAXrp-_3(rT7Her?FtE<>qBa%2zN}O)qRM~Hf7Pmct zgYF{8W%RpJ88oUL69MN}fvej;6mMbl2zR`8Nm)-%&n3?h{VS_g!v&)MzGJ?Xy~WJe z{x+}9aDA_JNYEdcSx3DP+D+4#ML~M6gl0iu;hd`qHUv0jWa<%o5KN|1UkVZGCP4_3 z-NELVfQO$cf8cVA&)yQ1{Sr8mut9(Tu<_Mw1fxNP(vcZ5E=%Z+*J(gJ8k+NBkBf{8 zF018S$H0O@J`CBrC6zQ!qq2+e0;RyB(E>shNuBFWg(?|AdV7bH`wb|odk_uWZd?&( zc19{%`9P3Ha#Z+}CX;HeN4Rp-uFSt0j;W{vQ(mqXlQ7xar}m1co1Bb7mvu&~e|Z{B zaDm+8W4ST`=G7^_0FsCG%sKLX#6)e={=S*fqJxvt1ojeiulgo1ker<741Zw)7PTqa zNuL`VQ-C{&XD+>*J>`Q7uq$4@_C6l_^|4SkZLcT*fJfA^)R(fCl+0ob7A7H+c&>le zH4M?He9;4LTF4f@?dsVz?n|NofY06C2dowo;va3(z(p704ORK&7m` zw-*D5HMrSSY!Ma`@?>Cu@<_=m?-3lg-WC!Mu<&~T@ejP<>2E6;!R4NN-u2SS!;Kh! zKy~36`D+YUwFtImfQbU^h|m*O5Vy0^2fx|Isk)e1MY|)y1C%}d*;kN7 z&4L?;m)V&}ii4DPCwHaKOG+FMTnJ$ANwNM%z=ZBshvM|0NJ5 z-~nKAS(j|Gn*64kavx0gU0mFw9B>5UrpCj^U;SN4aNd~CPwjlxe0!7bB8>WigrVySb$r2y6j}QAB)v7r`KMjeQf~H zRivcX$+gue#aRrw0Ijt*~>?*4dX-OA5@7s2%D z=jiApVk5sbZv2arcAUN*UB6$+wjoEZ1WEqIE5)M|Zi$!M_Jb*Q#Q8F~pGX^xwRa3h zu-tZ?4XT`^7fX$ih{R&F@~18i3b-`vcOqBWuHIh7M5>*-?!8&2;p|8^T-YdGv9F4| zyreqD>uCO_d~n?DBMN=?=8Y~3DsO4R4?QNc(hthXIQ;&sg`NkjLuD|UgGGt#@xlvc z$jS70CtKT!U)kZL0krt@E(?|KR~^hIv=3g69$EHK%eWNra{Y}3I5}CG zvWh$QNN2J&d7REOutIk-{dDEqb&^lE?9=DZJDxQAe@^uH@}Y@%`lerU+G9iU3oaR> z{xTk?gGu-2H;6badat_cv|GQu_i(v5!Wu8KL~=R1r}y;Uo2Pf@=tRGe5|cEojijNg zmu>3|Mq7?quo`)uvbxrW0s#E(RTm2$S5jv%>UHaHL+bGwLtG?J-WJ?^$%Xe9{yV= zYpHxx%S|nrbRBRc^gMUda?K*-b7u=Jqe(g29mI#!9L-@`VgLR>ScfZ;y*%K)e89BZyDBR7i@vj zQfRS4aiYexo#0xWK(YJsopbJU|KFz+LK5EW>^*zU z%$hYj#3M2ax7&$ezhW-CuQpXWeuUw3UHt{ynu2E^_59p0K8Ccew^i}aWoKIbHCh?= zQYuT7eK8I>vn!i7+jO2EuX`S#FCB~Ov_+v1{8ITXhc-vKj0GQA*6Rpi-fr=mi5iy2 zz1dUP66EXq@0{8i&87lsb93C8A6eW3K7R-}$0-DrUAXfT3OYt4jiu)(mmI7&U{EP! z8mpQvJ^7dX!pZRvNHsfTDDf%6HZd0{CMLty;vuN8ZEKcSMu}$ zc`{d-R#FPFpk-O!xG6SLW*~2&q-I4|qg*}!*2VV;SmtJ@Ezy5bDSa{N`*A+C5q8NW zrhBWp-WOwUOnquv^&p`c+&L(2giXF*A5c|lzCX@+b%Kd5}FtSOE3GELhti_MVMha>l9fn@*wA_mhXz4l!UyX zgY@|t8+t2F(|^QF8s0I_93#|-st|Ra^Q-RxZ(+F|uenKlF7?qdwnC%A^8YfJS8x*O zd$*$%%}7}~qQg5dh5;-2`LUpR&GsV+k9hh#gCaGiJOBCy9C7qXyWMZ;(3xEZN_uQ0 z+Qc{qxAozeV|Ya+rJ**sjVf>q6`jd09I^Z4ExEfKWCq?x6>w$jZoU_c2d&o`$WLi+4Y-GR-cruOdVQIoLjB127|`(U=~}B zF%cX@zKNyzPPJsvEgRzj;Pt2YJHs1lIxxEVr5-suv#^XsYGUz+_$qUHnucm8DBeH4 z#3QTY8Vfq}nFrWqa8!<1on)u)Ez#)y{FIF*^i-pNW8MFC(-_)2QLe6sYD+Ylo>UM$ zUZULikxCczUV4B5NTZg8ZbRWh7;0{?XKg8)as!tfm%8Ka!A`tfHqU;-bbe zG!!{$&SAWtkzcw@53h`N^x9q@E$_RhKIZlKjj~97|DT+f^KhMa`=<8B_AcE5vrm6f zvb9xTsSE%4!7Tg>!Ik0P%xm0ck9(A70K5{8?bD?e>%lgazA!ghuXN#DVaKf(5{zlNQIu%%dEO9hCHw70 z`o*u73jp_-+#Re8jq@BnOg#eaI8Fn14^Ni^QD&26XJ}~+f2Bum1)4AB9d@!AHWx3D zTW&j&ehQIXm^jI275acX2>G4Awb{eve2k`70Ve0W5=(gJLl)UUl#|?F!s8WH}NLD4xfLgu2Fbwci9Rb*t7_!9B3p2&QrHu&NjW>XCE)Rs8$Z=7()5% zEZv4ohR3RmkC4hQA9}V@jE2&IIRH$G}APwrxmuh*IyDFS2 zqlw_qljZo4s5P_4y|Z)$Qy1${LP({ji$YscBnHU$k z-E#LlpJPLaw?u)Ntaayl|0!5^0U7*I^{|eEBlVByy1DdyEA;RFpRS(3V0gBtOuuRV zcACf;<-x&W)Aazm=Hte6jYdNh`1Y*g!4H5!VQlmGU!CcicYj(!|fWas*+3o0FF=mg+m>mQoEAZd*gV)&8d>5`w zM^7;hmYd0hPS*#FP!;lhR_0gP4wa;(WoW3W`wb>zQ_vKEEk>8@J+>4es^@h@B$#_7upNx%^P^0*HnN$9Y0$|A0M`re*Yck@${|qQ0Q~xyH+miA$i?`yF7P#aW?MeO1(c^3MV| z>m;`AeAKwRTl5e(T|%s{Zxm1#<`)#$pZ>6#v}nLgPGE(W!L7bTJ6!*rBPtphT4mbL zTR47=aLXzC`d24!JN%T9qvVQ5Yuj$l+qk{X|z{8|)F9V#D6pW(!I z%xU8IvQxnCsUICqT&iv3%KV&T=V7x96Net)H^=MKe)l;f3Y*pJpX5gUBpNK1n(LPa zTH4Z+z~EV8BJTU<#OtG^-p%LraBr++EpEs17`?SPW_)&?If2mZXw17X-5*fFb#dqX z(B!O>fqC7cl=~$G9Noh38^5XhfE!iNvQM>;1*fOh?XlYb z;UMJoPH5I2D^fCi%jb4#a`5|2`BHT(h#@U+&O9_Us->J$fEe|xP3UJ)k)Wu(J@c8* z9Sd17%GTN;$rVsay4VJt1tHZs$+OsXfmhir-&t{4ckepRG@9lqOWHGMkEY6qiD9*S zIzwVx~w|5paW-K*XR1=vZ^D}|ICs=;^TgQY!AU>B(r62wdagPBrYOZ@IPWy{KaSy z*oRR6$9SCL@cnh^?F42RP`SW(cR>j5Y!!lQYj~|A9k8;%D&n&K#v@wkW7!Q-TNSFL zQ#0i&a%#ufL_p$*NmW5~M}-yK58Vejx=a}N>udl!tY`0(M`s1hLYw$Dd@fX^s`846 zmhB?+EX7`e%G3GTg#ZhD$~(4N1--Z_GE$_mLLEPuWsFKZj&cIxo${p^k%2~s4pEf? zWuSv|?T9`kWT3FZ;54@e7unKxIeml-yhK|V{Mkl#);5qlrI!Cs+h$1;_r2|l$_Mwd8|OcrhaT8_2Zp9XPNJ>D2c|5e{*+8K-LzP*qbiV)g{z!oP=CR@DK_8;vnJ z+^$1cyy&A1AZ@L;TUqAHUW06A@sUul@r5jrw1+5{yfXl-v)*>;ZKAZ8qT=TTl#}BX zNlx!U7j}z`;jaq(a-yPy1tuoNs?y8#mg@%oNA|olGz>t;Y>oL4Yw$<>121CRRu6VM z^(rcE?q5n|!OEIy6o9>b{@_B$qxWu;PW}xLi47;j|=1>bKY*UKo?(CD*aqY2-M^s|>=L&cDv zTx~^e$V7_~Wx?Lvs2h5aRuxB@k^h26X*SefU`zRI9sD$jL`Hio~k z+DhlV4@%UiU<_X6U*NIDE!Hl&F50(;-rc zBe! z(gYO0cXWw}-929cJsSllW!g-U6L9QMmt`Hx_BPMwt|mUaoAd$8I>?3l-BDfi(C9EE z(yx6$NZ%uBauV&9 z*Rwp8kj4%V`ONX%G4O^&f$~g~10r~hKP`jsYz}E4q9v;+%L^`kXb>Y>b}N3#sSimN z?Oje3;7owjeBLfiJa6aE-g}rc0oJqjnHO{3qLHr?m60j`Ce;!Wv~Za%KVGni95~a0 z7@ErTNTd+DyxI1XJZJR1Tw$sNj)iRQeqSRIgAgZkzGtbUmhgs=#I2>Mm;JkV7)-iF3FqR_4TYD zhgSAhHbC!*JD;XqZZ5y)z<1o4JGUQZckpfH+Q^{$LYZv_-{a6^LCdQII4qvam-h|3 ziHKfm&oCTf$$^!g9pBjll5F>bXRi;aNPWAmSEq5ifk8o+J3Ar3G-e3KhYxIbo!)jX z@4CP~)I5ib0de*3>f&EF1b+EaT8J<}h>wYh8RypsQ@14jz*(UQ{*J+!p1J1Lo_r$| zn<}QEL5-@=lH42UPRIcczI5krTD1j^$dar2tLtHTNd^?$V%N(Ncr&BcyrA*vZb@v- z>tAcfu`!jkwD!Q(dE&_14{BCC+KPi*GD%YnPVe`abRt%^_ei$S$eEe{aM?*&&~TPT zChK{nUtS`r(qe(qE5>nmW570;u8~p(vOU02qXh#34;bL9^mXJhngwxyT3vf z8;u+nH8m-+;@v%>Pf2tP6rl_HS^dXMLL;x%#`nTNO^uc}^<&MHik|&j8#k~od|_)P z_R`NjI^0w%;0d@AGYQO1oJqH-hpjNofdm~9X$6%u4CwY<3|;|B?sbMLeee~ zcYannP=(0@7gVV? z&`2co2_0SbIO!0X(3K1v-5wo^(T|RgFA9X$o|zww#vt86VtukN?%2f9A%g8*m!siT zGj(TZ0MVuZt;{@JZ(v(%am}?^0kK;q2s>sX5z!<{Uwitrhf@JJkm1jsHa(#y^2y^w zZJL?mcF{Gj^7C{T_d<(?lfuYgo5HGvjg~Q$-ujE6Q8VHoLaNGusuHZrW`sj)kDD?bL zOKLdN_{vTE_jMlfnK6$1LxBDB`#kBsljsc`SknJ_3~^Rp0=`yWJ>I8ZcBEhATgU@R zlDgXIjy(vAvo$>s7nbHi90pOwnsA~-93G#GbuOK$YO;UoMA})4LRUK^NAbtl-|qwd z=&Qu3>zQA;<20pwYoGz-hzQrbSdoS(y<$gwbh2pgfU$36ENM!~_bGircKC+Bbv{UZ zS>{yioRF)6C-p({YaHf|ni=G>N%G^RUP;3!=vxO*h~!s($Uj_`n1Ig!1prmHalP2B zRUzco>-q^UyvItDPY#(#%G&u;BmGv6_T(d1^u}6(a9&y}Qr!?;ea@VuIfrysdle77 z?kUT(L>+DFjSVN|&#(k{vMC6!qvP0U%2_*)ZL}+-d_!q)oeYaziWPD(n88?$MqIwz z!BWyI7Wzf)e?~qZ)y6@{xFj}kVD*c=H&(?XaI7dfR|UVOnV~-7K(y?(jA3n(B(4 zkQ>y6^0alZ$eOTUL}GX||5l6hg!W~Vm=TY1j>JUOXQSR?gM*}m~(sdXTw--xdkbDqwt=@4-e))RP? z3uEt*VVq3T|NEnXYJBL)pnlKaM-p?q^**lXKFz+pnUU(2(FjXV63;{>b+k z?ux_HjLly=`fRkTnySl9NbHDIep14AR^pAs2$qeJ>Z{BixwG|QG)a^t%XZhUgW@hVnJftf{FUFyJ=en3e2CCn z`zMz}epkN<&(!O}*o;AX|7XLtcS^sXOHO!nlRJ=J4z;(vR1ATDA=kVC=>O_eL_x>!1y}!$YHR znjHF==v;cqe*j}`(`UBj8j#QEwX6$Q-?WqO-*yfA{`zj7>ybT)#?lJsTI~!H>oOuP zvqL#3YS{c3b{oGC+7kFLE3!*7d;~)SA{oILnsHMlZ4!<_hq<^@J9?a1TBD^WRZRu= zWbe!a`h;JYkY=eWEzZ&Ofy=&yv;0<^WNXt?z1-#{W)l4vqHkKD44k<{W~|u;<7XB3 z4nOg2kf_e}>zv+MO;Ok9zbi0u(spP%Z8AY+j7CEEFeeeKm?af~8#arJDBG$nDqux>G;C#!S$&pH;p(aXLH&yz zybFxLb_k4tQ>td_6V_D!x9J{UWm~%3!MKr@cqA5!faX$4b@dd%wDr&)&8&O82SmSo z?NwpbI4$H8lF6`!fh9lcY&U%joNwsB`zT6^GsyR_{0zX4c$`6ZF(&BQJ?T-DE`ESx zdmrPyeG5NKAiRb768A3vi*q#{VPHMKvHA5`7#p|Le=LxjF~F`Eg0n=L{e{M`;2dQz z)S^Quk4jtctA~!ejt=@8SFWlH|Y|M3frh%zs& zEiIhjzMZJ%>(Fan zq3yt%ETqw3XA;{G1`gOnnjZYDOJ<|>3aF;`XBw`=)CJ2Ymrw1r%b^lU9-H(1<{aoU z^ZO9j5#$r%zFXLW{N9C5v50rp8~Vf5R)$MWWxp70L^Yf5>50-pV9?B!on9C$s1wl< zrApnDDF564z@~WzvD5hdmKqb?D=Hyg+k6|cLQrR-z(T>XpBfBrHCc@1eWwO*5lXpS z@E*fhnG84s(v)0Ev>+jd{E^XARq1qRRFiIPB}fGX`CUE@QNNadVTDca`5Nu|{rVKU zZ($?5)QyEaeQoT$zDbO}u~?ZB>vvVek3}KTIPPaISR^(EC%=pZ^?Lqjd>YwDtIK zD*aqN`6{fTI1l+jk=Ke{?IlZnlT((9st4;`CM$6HAdj!&an=T&4A z^wjgHF3{&wh_Df_mg?K)NIm#KR3$hY#$`sdD+$8Vii{gLvlTV}9XznUs!uf&2R0?y zw>K?d!obdlO!;}TDM5JkyqYLp(ws8B;w75TA`*AD(m=YNQx`}q`a1Ur_xCZdUhi#f zMTqUvBK9>BVg$dBSL#FY+19A5h-nk0lYZTiO795fyxWJp1i?eahQ=G*^R`UnP@O_6 z@-E6qCL{JzTo>O$ZA?;1jw{P?BveGzD+t@^J=AP~$9}YxKYDd4u!&j#wW9^+M>QIX zoxpmqn;>5o;QU@+xg(F|BG!}G+eTkbd_+4Mytmd&wdgjR?s0J2PcDA!u{oC}Tb%^X zG9UADQmBTS^H?VKesyEdQL6WUZ}|@qVfy@bhqJ?Vme!6>ss^62eQWI9drNn-Qm#6v zBo9z{e{W|cE1lv0pkEoEIvot{7&MrGu-fg-vny{!Hl%(=Ig_>RdC)hleu&|^`omz6 z-%rr|g7q@`Uf=XwMb2~@xMyxC@SVjSbca*+g*IMSC^;8I*YvWdicghdxq_g2HJ;G8 zZ!&G3VZQa849!R$GFX^c@1R^ykd7CBbHhq9K4QGzHH~Dtp1B-_x^GgwElfk3*xQ>v zZJwqobd_Djw$#!2u0eW>gsWhhp5~7o@mOtyrO}DWX^K%lGag*xJx}WAUO%{svAA%-?%! zR4c4bBAh_nlLw+nVdhOuvJjE=wusi>iw|0QY#K<%6QWH8MIM_8>ZXkC3G@{wpl?f1 z%(O^V>+iJ}Enf_ETXUW5l1&ix9R-1Gy(kN^_76Yv61l4 zMZGYNe_x9dO^^<4tyHk&t|Jd|S!qw@3!$1S5qlan+sHINZF~znx)Q>XD>E|bnc588 zHP$>jDei2cmX3g^cm=6D?PF2}!huF|&1aW|IG5HncYfk>5P`q{8^07RPq)7azN;z` zpgaS~GhD#rdo7)=HfoaQ|rHBFyOyu_1neE?Qupv_#~#6lL*8|wa7Lz zKbPF{GsLW%e8dib0B6xDpD<5;=)ej?qn0uG(U9P&Mf}zExW62_@;~qS(sOdrAc$8U zq7UK7C_wBzA8pxS4V;?#)V%$oaq64G&Pe+Gjdt4}Jm3@O)c-aL0r1ZZczTvQz~lI_ zB_^sJ-0)%|inXs?Jx=+xB6e@w`z*zDo)D`RsT5A17y^I{BTYwWoXs-RtVTTtqDn0q zb2k6fEs&=YL%!(L6aiQ@q@-DH%*c)F`%=Gmr$GMx4z?Cem2-@?v6#~Sw;2GC-rLIb z?8Z583s|qI2dqIp?dSfN5xmA0kC{lS(e!nuR&T5tvG3$I>RSh)FFfH+jNC7srX*Ed zHdD(w8!sEFUfs}_iR8?8n~gMl_|`Hsw7}%QIxHXulu`ag`oFhfmx+tmg`JiPw5(5fRvA6{RX9FR?Z^C*Zv(YeApWt%Mi z!ZAe-um9g40PYt(Q#&ZkOby7E>ofS-W;%!e9JV<^OOKWWW&b0jU(?Cg#Ev@}*)@b9 zea#7u4~y!5M}nyOrh1VdGl|#1t8#T6JrNzh@1S=R>HkKFsG0-PEQmKrmoBMos?x~z zr=);x;FA6CYXk2QNT8liKB9tF68SO|%07i${TIprvuAG-`tU!=)qi1Ht}xdBOv&r_ z|INDoe?QQ5tbgV!dF8rhu~x$M;=bun&beYYy~i|Vws`}nOl0}-x=Es>k^RrzK%m3V zor9iY531DUX%z3nx^P}sr!$AC^EtTTn5))mL<=arM9Zi46WFy6TusQ{niy+}$K~tm z{1&{O{KoPp0N__46ZD;f{e0ObilD#bwQ&Gbjj{z+tSxwbZczca{6d;IXTvJ;_hNi^Gk;p!>Q<7B-qx@4j)aLm?B zc%#hYrq2w<9g@hE3O4vOBo#@`NQ0#i{2B2-8@wYM5j5I6eIb_U2=MuMNHkXb2H|zQ zc3ZQDZ25)c_rzS%5&NMMl;7)CYBcEE9_Gtl$$g+?IZe&te|Yv7uiFY`y+6dcvxV#v z3VKG6fS5$erY1|w{QkC`Qg-O`M=vHMS!*=lhV%?!Cuo zhkirS+RD5Ur}ly8obZM5hyO8zKp|GJM8CBQseTvYjr1+Whwhgw(Ux-x13>>MhhOxz z+O>xgD7IYyoF)vwI|B6JQ`O;^?l#pMMWB8mWr62V!_vX|N*`ya6yZ7cFul7YuWZ&3aMO^aOZh?Z9pam6a@1?WqlZ*A0eS- zcmE3(-B^w*V|gCOnTLxfuEv^s?WjV9rKK%;m1fXN@9QByfYZXn#AX51YQuE2u_mbS zdB8a0ff+?^-eX2?(286#ByHEkU}dXYYIhTY$$o|+0o9&7tNo~QJt!h!G#h!n7H$wO zYOYV_gUa3`Q}Od7x9jO-$f3cN{)nwcF}Tb_oqbp-*?#bTS+Hn$+;8VP zHqrCBz}rysIQ9f46*89m=3uRikB_sWG}+_tA(cDuzc>E#V@~K-?^kW!|9t&_A)%Yc z@84JNHR4nTuQ1IvM%3^zG4txAm0Ei^%aW@y(R0PShT_OtA~PZKT#eC zJ>pLvWB{j0CbeEx>0*V^|I60__hyUQ^1o5}wr7OpWt4LVM?}onP=RT~E!8P_6aBeW z5Iqw=MW0ZDY10uU5Ihq@d;d^UQ@|CKvf6uPAk9+t`)%1H$t8!?u>py|G| z`Qr79O7s=`^r9|lskEUMhZ~0nDYZ4-jX*@-HfL^)}d}&w0D<#&{-~PZKpt zo|F-?;_!`UOy5r%MbnDlr#n1;{a=zi}}dwf1XoThi=`jnnm= z`G{$ANYFMY zSl-$xjrw$LP9XnVYOEt~H-o0yps@vakt{5V;p?OY79qc$W)*7m`?&3h3~tRxKc{e)ZegPca*@EoVItymr9S0ru`%G zu|1VME+dEsM6g1PtKl<$3q7JSTQ(-~f!*>4cp-p&CSzdv@!nR-sOyN$yXJ&EdUfet zJLphXs^G0uoPDdwnNV~@PN4=Ia8t(?wU$0_hP_RtSyTFRStDjOV9ul>miT?RiyfV_ zP-v4REHpyCpKL@`mFNE8m_C>68o8YpyU#<;lb;wdJj{VxC%M5k$OM?L2`nN7@QR%6 z`jXK00v9@QakIru!Okw4eY}3axj*`_F5n&Yw+P`EJ_FF5+f7y$ja|3 zpdFcTBXV;PW}J`?Q=#|FcsilLdfgR0udDTwNQv@)#kRVtw)WV?1DL-Z1y3)=nwj!k z@!9%)S+E|s*Ou$P9%zShUz$!ykOs%91df=Gjqw1Hl!Rm6zoJH;)<@>EiPfl{!$OJu zZ+h9BXi@<-t@2l+Wmfjh{I7CD3x(@9n|)kd)xJ*HjNp(^H@CecB^zKNvb-%g_*}E$ zH`n?297c*clN&zDbO?z)aMqCb-e-3&D8AVFoRf_#5MG&#V}q_njntj2V0}(`Vg{)jP6bJwd}hR=_rB3**T!5U{{qeUOeQec9; zvHew>__CE!9uT;Gd#g$dhbXnxNU&o6(gd8%VlSkkuQT=+1tatW+rP`Y&efios&Ytg zr34_#$rWy&jxtqeG18-4fJPR$6-mAV$W?vnuq9Pc0cQj+R*r}zP|4u&Fb#m6T_hyd z%7_2-$})rOSvMlqNR6D_C8M}F7ZrXe$tnIw8*2@3`df|vDfI>hppasI z|6UAU*)D;?$qcD@3yB3Zr zMN7)ta*fKSilrAz#j?$s>A7M8K=dHW9e@@M2L>Ys*xqa$?py;0zGPeePN4>%JQt*>tl0O{*)E_Tr zuEtAV4&xhE>jh;|5c`&;CTD(a*DS+jD=SUr2UEdpmgVFjKJB6QXhw@_ZU$PGtA4L^ zjrMa}WOxp)sLX+7xzy{k%;6mz5bOR^EIAh4Ln$H~x+!=qAybD59S*kuqlPk9EW zEE9SItqxad>mei^T5tdbcT2)hB(cKGDzEnN^mMIBSLN&dE{2*BY{Xh@zQ+Ecq4XIi zLgH4@kT1OFRG5_J!;FMik!HIWJ%=Gent@g{WkoMjAghrX@WOnk!X5pk~KbW7iMRM3Wh&D^n7r zq)NtPUm^B6N|vFVl!^vCKi6!;L`4!viKUcd?8ZwpO^Fc2m z1iGCyt(4@Ka$~A!@X$uqac;+chv5_jYz-eaHoEes8a38^A=~M4=lxIy<5jkoKjl<|YG<4@W zcBiNtGD?Q8pEna!d*SkRK!uBO(S2%SK?4EGMqeSy=$L9JL?qyV;cn&#QmkSZj%^j} zz?Bl)&nlr>W-nrRn8f2LY>&wUX+WWE_epkAEKlu_sc94)9r913o>sSAHuQ$x)U1HZ z=$BYon>(c}$qMx0rn<-iX`vRj@^=MCEBkn@annqD{V#A3GcTY%^&-Va+#5h z>?!cupU_ij*^@1)iV=(Ezg8}ZqzK|?Do>f0mr?&($fuZ7#^PkJO6GO75#f5 z>KSD{(j~X?6 zVRL&HqzApP65#tGD4_D%^&lE>^V)WD@|;C~|I7?f{Ig*2X$ZwO&=$o1e1bT>qn^7^ z;sNL`0a&|8cRTn~h>4x<@m*S9dZhfCh$TFGUhev|eWhI}+23ax=3t5^_JLS?`j6w; zZsU{{j4Z-JH&~DZc3PQQj>-e3!vyNE1WH&o$eaxNo~1r|ft(Mus67TN-NcA*cgB7pvou zEm{xd4+C@*D(BQ{(t@1Q1@t@Nx!SM=>#jtg3NHO!OI7PJb$ZG*Wc`z0;0860BBbj! zS7h5fV#lVxUsC@~JVGsAqKZariUxP|5;pYP@DXK*P)IXqZV#xrd=cP4TOxBhj``O8 zv!PfO9gJf0ZROg4@FQxZVPvnkyO2F_g!P^|hyqb6*C7t!)I-}at>7KAuQ4KG&^Mqy z|1H=uG@9kNs`M(y7lcIVT)PG84I7*B)2{H)$#_CH2u|>rP1oOAQqoW5;lfD*z}Dk{ zD<{AM@PK>G^~9D-l9D{=eZzR`gTABt#sO_4O5(CVJzcfhdw+7Sn3_E06)QHybO+1W zQv5+lbWn01m>-5Sxu9_Iiji$o+Z25AGzn*~q2G2*yWA4IQ;jhunA<4kL}oC8Z$coZhd&_B0l11 z5mO4noJ4NiET+czoyoAZ*rHBSn(G%ux&}<`OAD;2L~5gMkC8lb4FZ4ZoZHA8t&)rO z6AtyKF~RTSfsj)>E@cyk_jq07)H>6|yl z)-LmOk_1uWwx72vTmM4LjVt`blYF+xq!0sKAm*4j6Ynf~VoWk$?gm*wW^1zCY4EI^ z;J#LVj?>u@v@k7ov$e9w%>=7~fr@Xub{R|=B{l5m#t!Owk4~U%@ z`RsqHBMv#00S(=-?q@LtW1I{S>R)9eDAe6vP;--sWOsnatMn8>gRo7Vk@B)sj8{d!9^c@AT_Jg z>`M_vCI?6L;FeRdbAG50`6^ueMkYuNvsis_LIP0(OcU?25!Gkt!fdcZ2(PovfQ$mq zVTH3cHiaR!>hZ#LqVa?Z10Ybh99O;RSpO*e%BmZ4wzdS=1dv8x`}w5+twHDWNDKeQ z($n>aid#Fjf@pj+J9)y7|8d;%)z_D=iVMp*9Ij~>0nGY8MB4PRKB!f6jqTJTd@?C* zckhq1x8VHQ?(sFVlv{U_FqzSgT&&NN`4m91Vxv93{?GilQU#DLf5Osy2tMF5#Kv1H z@V>5s+_=6yUGzzV>XFE5IpV%1J(nBGNK}+>$ZAreHo-|} z*l0^UcJ1fM1(U(AG9K1IrSW)Q;R|Q^6(}F^!^a5ub%e|Ilt%TvV_3+vE^b4#fpU2#CSkFy z{e&3+TfRZo3-jM^SU-_!ec{!)Q=DIv6sU<^N8L~Pka^ZE;Zg*aM9LS_+T0~+B%}F- zDp>)35Ta-b+Sm?+IV0d*_%1<;v+deMGa_?2qKefwZ`J8bxrbwhSsRzIsoH7b@a6`5 zkkvVQk(?;iZd{mCF>u3*a-E33iXJKLpKDsC<*0b&nVR&eVc?O3u_Av*7TF~6xhk>_ z?|ECrvG5r;E1O0D!$&jKU`Wza;}|}9pmp>RM|W>z{GC2;Jm&1lbm|||&eBX=H3Dfz z*5dM8J@;~UuA}K~C%n|!HYBqxc2a6`xX8EZ|44YZ9cFFE5_EUe7qVn%$W$!p&PTWs zXlnF$ft%N-IkuRK3F0E_yXKgSJ8?$t&#YVtQsou{YC2Ifp2*Q7Dt_LVWK06V$+0v- zLS$t}3<{#cM(A%DJ4Ta}rLKI|pE_CnEy(RJWW9y)FK{f(^uP1$nvuoq{tAztSo*N} zl3hamVZb1~$iuxGE}4h%b7Iq#AlGq~x@G&syncKrl4J>V$rmB`&m8 zb&u=l_>xtsH_dXO!*YdlYs~a){g-@ZOw5squZ=!SA-N&r)cCG3{wl$4(o)CHXND^I zJRoJ?AZ>c!B9tglie2SR8q+^3I6em@?5Qg%S@(Z;s6JhRU42}2QBBlTv`Aq8n2dXwq(*}XNZ+Qp zDNX`LW;R_2kFK+UX3c3L*k!&PG4A4PgvJxD5*A_Z-2={etYw|p>(O*fwwLMB@! zSgBZLaM^5$)uEENbidzJc0M7gO2fSjtosZ|C{>^kzKkW2r>|p(ihd>~t)KKdlY93` z@m&=PW)0NQ=XBw(ni8fM@K1zZLm2I_{p;uYn3(ku+hJQ*x4kDa+)=rJ-{fxv^@Sc{ zGgC92_J)?$JZ>{mjo6P;SV^8=(rK25MW z4h#k{uB(p=;J33R5i(iggQ1sQcUXSIqkRu^ zg>$+W{312)S0=G_!B6briUmVs(I=bUoG`H`U+NNh+&q2ke0{t`_)|~fc=5BAI9yDc zo^0zphhNN#D?~K_)@p-p0HTV=_a%yJeMNSIIM(?uS}-`-D$_;`U6nKtP4rhM4@<>r z!|^I7NG&5Zbw}Wdz2yhY+rKTxxiYG2{J<##UTX-WbEqgK7yRtBXxc$UnR*gc4yT74 zl|GqORx=N>Os>Kys0;jpI{4!ozsYQzW~ zxGb(-MnI|Lp{HQ}lewcJW{yvuO`G48pIiF0pZIBN_PyLswazTzvi;jLBZ=NAw^9B| z;+00vcguDyZir^P%i9qIYiVPA$`)%!qX%igA|ZUdE|>qpBa>^*e9*Mts5dwA=q-1E z8Du1NUvK^CPZdF&``uq(?o2H;!soe2!L@WXyX*wz!D&0x%L_hr6;&M()5ZdjXi7l7 z0ObF)0O{&s(aCh6vY#&6%D8;Fw0NBO&IvCQ>~S}VFWLcZmZuj-R?>bC-+xy(15|Hhb=KhH1BMn#{EVF7GkT`aH$3BDvrV&dnDVlT}x4TeMVuM)Bdxs(LgTrqIt(~ z6S6ISyv_ieGV_IZAjDy0wlX5M7EMjH|_DHn<*d3vfw*hNMg2mq~*5E;VdjOZ&wmlllx~I`ms1_>EWU5|>D?MxG5a_d{r7d^&@*1KV@u&syPIwUaMCcHNtM92OFT1Pc z+<6{1`)SR{REf~d0%#FUD9?JeS2RGws?MoJl=p?-{r>rGq$84qTWeH1JF^+SfyLQk zdmxX^(yyyh?kVl3#|nN0v3Mq3US6S^{!h=GQyKcb8-*yt299-1!5*&=RwL!p__fC{ z`tqnt@v;!TsqKAi?|+nLC}=BWeQoC=hI!*`d>+Q!@#5bGakk+c_1X*fFWa|v#WrD4 zA1m5R`09L3yyj_DPtQ`Bz=?hm;`L2`bDvw&$FOB7xtw{4fbQUN-HCmHc>VqaJpId& z1+FV~Q|#K6Ok~^#Qf<&Wr3lvkV@G-T^{esS0ZoPFAxV4eVD@v76!W z3i5B*!-F1^^(oI|B>;8DT+e|RM)cnAM}dWeW&(=TRvnvV-!M&7#{HXp@eB2$_OZdn z^TD+zisCJ%_;+d<$==$gdC7-`P6IOsbX_=GUv_8l?VLkyxo$p(hG&}`&m(1JfWWO` zh+)`_Ku>0Qr%98Yj@7h)KD^@u6}S%i!33vf&7S06Tn+KAOYNGbNgsqe8n z{WkuZm$cO9R!m+D_?Gd~o$Y7>=a;B_^5JOWzA`VUxDaP%u0+wnZZv)1oy4Tn2LSCp zIM9q_^5M(|pXoB)-x*mS9-`Zm2AT^`|D=7zLYZX}lv6;mg@UYS))_V3=0LWmAjsn- z;>u^z>ZV_Rm5)f;yDRLe81#Cjq2WwEu+j+K%OTaF7?$WScyfW)fdn=gXP!mI*6O>z z85oN9>kuxA56hD%z)^d&a1*=~AOL4|_pE8OThG;|FS;=UogLcYeTHNJ9I9s#O9jo1 zXQKL{3X3PD#uz97n%xEcna~xxBgQVw|A7h7#~GfwI*JclOdhvWqyQSW{A=zhVZG`) z0}AHsx!QMiCT6rVXHUUnLTg$ARpw{0XTZmWS%sP(k-Y&f5hn8!Nj{hMvaExD%3&3g zT;vllVn*ixEj>mNG@OLBzxlP(p`FTAFGo7ngNu=N%|adpAgC?o*_L4pN`;2zv9K!D)x8r&TQC%C)21$TD{?hxGFT?QZI z9lrbD|5d$uQ*|i(oax=WWp(e>P2BV@YPC@RF!=aZ@+L9(@+-V{S_7&UIb?h(-mKZL z#g>~kU3A9@zJryOe@d8zeZFj5DN{sVe^U~j$04?4V6TPdkDxH^ z&M`Ct=Ig8}zwm?P+oR}w<22Jw6`xOMbJ1WKhujF}!@<+=1$Wj9h;B zOkFnJrKVb#m4I&pDwssEU*tBaEb6Ypxv^RTkaLPvXN<5U#RQ@Ac|Z!T_l&nYhK?N_ zE{Fu7suP)1p}uQlNUz5gq?E+a(t+opoq~W??97ln-Ujbf;P5@nvk@G!U3pr!R`bBN zOSKS_31VUq$JNFXryK`UE!`&FVJcVo4CbDG;Aj?dQw;dLMWU>sE@bU0nwPNu>$>B* z1CPg%v#|AkPvF%fVt+gqZ4|tpcX!pDr`=kDP9iJ2@_3!2e{&?Tk~KbYjHLif&KWJRaZQ)FtO`J&B()HM z(~P8nxn_^+e`=yA5#@JIozfhny}L57^}0JWin2NDSCW2-Osq~JA2fh?R3K6_EfpkQ zZ<4+oZSHAW^g;F`F>dg6w$99=8M)EA*Xl-J6KCk5qQ{TGN5D=t?KC-_y3HNS@l`g% z&KFV9AQSdx#`}}<5oBZ$5%vUbzO;Ur)lu@dnl5k{l(|XPsE_^oiP)d4=#_W3)j2nl z(+l8IYlm3#Zf}=n@sz97oV9^bbm!R&aMC@R>qaqHU$rX2fIDM>Li5-!go5v&~ zHs2c2qo1Sq;!!s&&{5kAIhbq;43gXc>=F7TTjK_4p4eS@B z{kc;D#GJfBc1W^2IKz3fZ{Jh>W->sw7N0 z$y-~<92a^$xD*h#AO)FzBJLF#0{$1S<7?o7>B{bsB4EaCfjN*d3ZD=rT$k5TPU!`l z5tZt>)%ngp+&DJmnbDYQcm62FH8()HRIcYfR=^T@IE8cE#g9_u%W&jaV=_xsk+qx! zM#vr?kSKd~jvd~lQnVKf1$(ns>a-UvbiS5xNIlkK#KCtSS0**f27Jy%{fTnaH+cAi z{u_5A!`M2~sWL4swR+tF1LkTCZzGKvPX@-^%|G0S9QKR%(tH_3>}z@BEvC4sj{+!# z8rxj6?Nx=9sn6Q>^#9$aWg~^f?r`a*o1#!h=L7#$FyblTRYZXSq*%o6&R@*0h8&h| z?}XjQj^{Rc2e?*_rYS-12T1yJN;Vw1E%wJtLXRw0=mv|qkIN)8DA5o&F_ENs8qa~pjGnr0>CZ7mq5u~!!lxT(uHK}Gb^K<&MGBrkxP!ZJU7#D zB>yuIo^*^)N}AWOsa46 zP91$OErZY(LmgmXWCRv~RLD!XVFar&VWxqe(ml^%rxIS~YM?Hw2 z72{RYCZQKlSir=wy-?-kU@r}9FVyF~oXdNABkJft#h)&V?Y=x?{W&QbD7ZXOpKEjs z%iBF{R$zdu9`n4PXure~(dG`gEmSmpb(^`%$BDiZeqUewmzb%49IgSFAu06+=FtgRS0q*eY$P|EX3=*Brm6& zzBj6(GG?WMtYxIVy~EU`pmJ=9I0KMvr_%zGCHwd$NAsQ``ns#dyW*WM3#O=NT{BE$ z7uQ9uriY7|9=AQzq4ds=Ab3N^R|=>T9);dUiyB*Q<$e@1iKGTEHl0Q%U1;5MiGhjb zLDK1MMqEdX6k1o;7kSGB8iv*RNOIcg#S}R<`f#1XjeP?{wR1T)r;qp31AkDE`-x8# zXC7CDf`-PB;=w<1KFXb)G&JYu#u8fQSA|L0FqM#s2(&Y)IEPchRU z6Gr5q{>&bcQB8X^0S2tC+_sk$q5?C{hT1ZavEj@z>Cx+kU(siH#15B8R5*{qcsA9k^b|{Svt)(O3)2~QMt~VIQ7gTNSm`H`R2KoCE zknPyy<=gP49@gm;yO=5g>Wgdm76O7O#C@26H&m9+Nyz^pnxsM{|$y9 zTC)29N0%`)!9_||JMsCbdzgJ2gYb38C*8%dq)H_wUPm&G>4uX15?k-Mrx`rxU^C?3 z(E!ICw6FMz2r1qRyTNA3;C~vTu41cZ;$iiD(!OBCv1K|M9B)+6IQy_oGXRRTZ%?s_WETp66DvYU@vczy$f7+CqeabHwyhRkM|-JLHA-Q8bD zC<5IweD?Uup{eTj>}&2B%b$4i%xP4_xS*}Oe*31ay;oMGu2mg-Z_$8R#qG*O_>JEY z@r-f^Sa`IVz&#~4XM8HdNt8n1RA%(0Uypg&d|inS#qKqHo9JwF+wF2E7Z@c!k|{Q| zU^2g)fv1Dc@VSClE1X+{9Za?ff-i|mih*ABl~azWJF)j#&6Je-L&>-G-W;iQhBZP$ zlYCs@XxAJw=-0IxzJRB<&Lx${DI3BBOW>5d+u@`V(r)995|5|i9}TO!6Ap=zI%NeN z`N^+0waO}U*hBxQvVile83PU#-~*k5ZJWUb_FEJ*z|@a#o1M7EupwC@Em#AyF7VpR z7fzi9RIGOHq6*BAmaHAFBo~`_D&?b!jaWE_X{C}@_FH8Nd&Xw#GdtrXtVJkjWxtX9 z#SqH6n4Hb3PrVYLWGhTksv?j1Gq#`w=a> zgFA9&#Y>xKBE#f^8VgbLDP_@wNa<+np@4CS5X37~UT@V+WX$685u@jvm2ZzfQNS z7cC=Rnw2y(M1Q^Sn^Q2iy53ngubstNc6h{Z{jDV3r(eygW;vD^D(X$ESw6>Yu)HwT zSyG}#m*1p@N70aL4g{fgYMJ=}xJiUj;bp6oR zmFqJglUP9_Otuo4g)as$gF^*2Zkj>9@UAh68U_%0Ywi5juj>M*?g!cvA^_0S#Wv5ym+%7>NrhOiam8x~gq_ zNNwN;c&!L-no}CS<7RM0tGKM8BFJkgdaScwL_tjpta|&jC6QPrB|QC=ukf8_zJ%>> zJU8uA6z>d~pw7={GYe?$4uWIssy(R@9#GR%wpTnzh$N0v{}bvU}Jx80>!}= zOa3xra`Pnq=OSK`R!X}mZ9z0)R|v z44`Gzf2o{5#I0N1(+u_LCkQ;+-BmZSj4*!BsvlILQ%TAAH>*Gg34OV)?OnFra(QJG z%BHmNx3meDv^?Ku*R*2W_^lcIlOc7K?@7@<{w}NrnsYQ>(%Pbdr%Xp$CF498 z?_o21?z43a6AG&MEHL>iUi@7fq8Vg>xN|?2X#H0$&n4KoYq@7IChiL|KKb8)0#u|dE+>ANO_{+IlxjtEx37RJbrQvdy;a;cSU)2 zkvsFfJQjb5l81+(>A6u{vbpJCM9iDLeJK;`$#&=(n9Vw=QT&q<6=%#Jsa^g@`a1_V z>>Y6>onJvF{lT&$V)n-FR#>CtEQZ@RH`PG4tni?&w79;Ys?r1i6@Gh%=YkPtdwsQ_ z`f`U=bQVq3*H-apJe1Xyk~#KMeGgMC#aAR>w_eCJX~z-lr`6@G=0%~XdnmVF)td&H z_FRBp#dI!vpqa9W?QmuI-wb&Z=gZ>-?HwxVpZ)7tSqUTC#Lq%camk2;;hcO~W*Pf* z(t*=?Ll?Lsk7D8FmjLovSjbt`E|FXhfn-HdW=)8CLC)nH?C6F))6{U=_|Y{ zmFfd^)b=t|-w5pkp2&BasDtk`R=X++R9_E0srdQ*z3+3#3X|kxONQc^fjFp_d>hP= zbU9Layx9DJb$hM`5Pfg$&KtkdI}HtuZPzk%a7TfWx%NK;FbTKiZNzqY!z+K~4`n9@ z%KP@aBZ8^Y65JqUBBLW|mP0l@GLG@4xSe>#_~bEoh=c*SwwG5Nx=Zvt3L<8PBuJ2oc!6G3kFrTodEjFkEBQyWDMSXdv%<;0& z;lKe9ZD3FrPBlSZ1`ej&KN?h|b~lcAmo$De+THcIdq#joCKAi)GI;y>-~>Z<(;t7B zPo3El*^}2eys7GUyizL8V-|x)r6VDK3=1Y&lGfgf**%ZdF0{UGaP{SP?7q^{^ZB_G zdH~U3X6URr%vT=DB+5*$7*qpF1NN+DU@Y!491fE+TIJK7mD$dl(2UGC_a$AfyWB5q zL1OY4XYF8iUfvaGwZ>m8e2-DtlIO%LcNed}8hNUgEPLyY$20Eugdi2qDV)0$=`xh1 z^JNAnvx?0}sd&Lw>wZ|eo}Y?ZTvrM1_@x>A4%f6@==Z#IB07TZme)n5W+3A&m7`^JURuqeUI3{G_)Zds&Eq4{=xco3P@!6_ zGwJz+S47lWmb6wWc8A&(8x*ltZkdIC<+xF;cSZhnzaxOztrt&6M27cEp?KJN${pyQJ$}p(G z5r&ODyaIc@eYemt^vOhdl}6{Teh6{dM}he*u(Vp3xI#OHO>2U zZbC&%yS)bYItG%&s&SY$cRpX0)$!s7uX*}KUY@2vZY@mcJKNgQ8+F`$UOS%BpP&QC zindk=IAE^Kc4j@$xO~W^VYB8f!onnfP7E4;f8__T_{m%mGBcc%qLNVH7_EaDHFA*O z@UVo3XItss4?5a`p4AM1=lAkaaw2>Fn3|rx$GCoT??}Q}g`J5>{sRmQ8V1JC+jh4OraYf!K$bm{jLXrz0wFSt^u-RRpIxAM?+Q%p6lLmu7&RMN! zJoh z9K-f@_EpDR)`>d^Iy(68?_IXHPXiV$H{~-wYCH{S_PFpFZJ<{+>2hZi+ki zpZ*lZ~c`bbka<+*3TPrBegw%clkU($v@_C+Sl1y)Z-P_-vU%zODivsq5 znvSO1vLQM#Q?S*!{L&UQFftO?ovRP1_*YgkY+c=R0B_Mz5&Z3~yp@ug*aghazyV|f z1rs3B_Am|!#|0sM2@428uPEbh7?yC)Z~{WA`^S5LI+uTVcvze(VK}EZFFu+6`f%3o zZof_EP1@iiEgdZ-1#N3A1 zICMQT%a2uSoSr3|tu-Ph)f{xR85m?&qziB>`LeD809=ICL-^kzFsQbkVv-lw>Hrt) z!%!pcFFeQPpOld1S6g4do_k%Ok_Mp^c(#^&;QG5B z<$m54p)5exH!zTPw@=UMU>T}lqW$#bfx}!x1niv4xXOJnx$ZPg1Nk>tQecG32RN8H zO{@$BZvtnz9d-$3f2RY>gZ|P1yU{=sCR%|MU%2cW+p#%m19^LW<<_LC;OviP1 zmk{#1=VwgSFe8e-4-gTlGh0Ov(A5Q=Pn_2tKP*2UAZpWKwUM!xpaC4mr%>uahhjjFDDOk{e(xt`{mT-jts$#KZ5>{)o+^OVw;MT&`wUOMXvJlb^PqwYi;kHV*OLrE@hbIl&`dP}Zn_ zuxY#EE%nyw7rt8!88as3Ehx& zXw#bca_wY3*=<{j+mR?(rjXI$F=D^{RlRXFys{F7z#UP4Cn3%ZXZ0Nl3d)+xu7H-) z7?R^5pMTQ=_T$Z=xTDf1C1s;3+?Cr*-rHOUt{1A=89tPru6wXbF6K5XCEs^2KZARP85g0J(^O{KqU&e-p$2SKs zOL3Si8G#X?@4w4qC@4<5ZlB(LM1t?1p7sMc+0jrZ>mC;XQvz=>^+!d!V4X7pQ{c55 z;Js}I=5^xpIlpU{k^SLYqnsh zY`^(N8CU9+;>d&xk66?ac?(QF(PFXV1qPcW^iu)#0sYEc z=FVNs7(hy1pG%|*$Nsk$;DyJ;*btlDQ17M_<$P7)`TWkfQ^SI&CkWZ_{+|z9VsjJr z;`MRVzH-M~*eHsMhClk(%hTmipz`9fQ1>5G2Z1dA%V%Jimll&7HpfI899CY;LDAj{ zdiMz~Zf=bF2YP@=CCtolo*%FEfJKJCxHDOb7iTp? z8;+t?L0@K0Ejz(isd!Ad!E0nRbexUnnv@@N-SKG!kY5cqSTO%fJe0Th3lD@3INS<6 z>dx7+iS6tH(+Xp|`PQWj!M5vDjJt&gYVVK6BIP9DYcA)f4`Cfz{n;_wW~(%bukKIK zK=78W+3>hWm{M_!)#>S){SG?-98R-@~EcRA(Iw`W^ z#kDUHGUrml!qcp*vmqtilS-6pXEc7T?$d=9E>0*}O^(V-r(^{L8<1XEIW47YSOPac zJD_7w_4L@iyErz}#uUJ*d z@5KAKUM?u#N)Pn3x)UfZq=g)rMYqvPgi>p;o`Sb1o$`4?*FB?8AO&I zxF6sX17R}L|5IO{IaQnV8g1wnrJWe*OTz9%MstByl5V@WZ7ZkK&ip-{Gu14N%^<+` z4h59-Nu|Hj*t2gmt!27ZvsPf`wkM!ft;&VLxit>iO4#)#C8ntv_kj0a8`-J@!Z5qt znuT__LL44kz>l@lE^P}$@EPfQ$l@^R#M5Xh66NK!<7U4FkHdsjJ5=)PqV*cY1rA1J_xb>B{CFZV*9`sK z?YQ~`B20xl>h(*i+)3J(FXg!#yF=5}zcP_%>xYC7>m!)VK>B|KZAv!MA<+9sKlIdg zEy`Zm6p;;uqLbNvX;VDX;ZMh}*^-r&wD$K_nZ<0DIeK4L7u0q8dK&s;idpiTOZz;1 zXF$NY^w!2E{+Y*)JCr3moT81Ugl#nCx)*nX`1X?h$f~Xb9W~MKRw78uwG@jkeR4PO zkox0KR&=^CgJ+&Nyf;_4FW~c>G97191cW=j%W3tIiQ#HSkDrJ+#5!z*P{7ABHHY-m z)@j%K3a<|^E_z(QDxPbk{6TR`^BS?-l(IobrF0 zDOfZ%QC%qPXXnxWix))&?lkQ0psbgaVsxIG&7i|@oG&BjuMfLrBUv7HNVV2yT|ht4 z=h>A`6?OO!E`a*EH`T`4_#xM zF(t?l9J)-!w7k&F(Z2RffA4`Zmikz8+p6hucA3Nbu*Jap@b9aebHqj;WzclFB4^gO zwUOwTNz12Suz7*~SKB3d-du@x)c`Rp!a(emxCAvB?xtITQryN`NuRjp59|?Ogrw7|4?t6R!Z|0D}{fHinQh)-N3#sJ|^LLiYu1%EYFN z9Ju~wzEAORb8{`cmHx?_s+w1JqZ!NP$eM&2_XSE1RAgwRSrP{vi`{Hjtt2C63S#Kw z8_d20yF&VC59W%gb#y9b+au^x9{^h8@v~&!+1f`r`wOr#ZT7`;o za!2%%g1?6ST?ji$bu*6d2uFdIoS&_8#B~+~-Ps-Tqkta4oJ$pv4wZU)hrVNYUblU` z4KHi_*51mtT?(V9R!bbhL->*ju{rMoB?}F*-9~GGUMZ;%|RbvU!={{d%r6D!LM=4J8d!fHqac$2udm#zTYzO83<^ z8R%`CZN<-4gfMz>u39wje^)85adQsaI3_}tSJLuX&AIAdq36snaYK(H-v#%6>Xg%w zXFK6wSq@Lre12BFIjvM}{K)_4!BJ8Ylcw7*7UrxWGIw(%CT+ir#>&NM- z&sb=p-<2I;?92}5gJX8xNy)-t|C+jo+Hrk8oBrJ!MCfXa85Fh04C+F@r8HzQ)8g@c z$BR9~5t?LT^Va=(+(-sqN|(NOYmG^;+RQ0bsre;|@MZ+~6E!_OtALzJ>w}VV-k{dd zq~Rwnm^pzJFUUAw-PuBz3?JNN@xWIA1RH>W1#+gWEAQBhC8;4O_#^_I8#cT$34TFn zZ&;Hl?rf&cd(q29EJ<_AJTu$@*>uAt=|*(I)l6DS8Ke13PbDR_2fIF+mTO!gtsos< z@Dr_CxrzR+Be#0HF@2^_3?eR5W_o(bCOZ%4oV-9AFK z6NBlr75q0(7RWFekmP|))g-0O#T+@by~OmmBzwSr!uN9C$JX|E@)JtusdJM~qao`> z)nhQ$2Kj1Ak#xM}DMbtp40wWToM&h_w3>f-=9x>NNR;iwVr?82BjV?NkKd*8Q99lQ z15Q^>w}2{j{VV0qy(>ad>)85PuJhMnasAp%`|{E`?>yO6%X52wRybG;Ib`>R(n}v4 zsdSdS78mv9)OaHS{Gh)GZLGC^BRfz9{OVi#@I8CZsOyac)XEAX&`F7=&Sl&$r9PNj zc?<5s+Xh_S=iiMw*otgyV@{u%Uqdhf4@0RMX+BnuzLf%4o-_9?N?5H2;zJzrw#z3| zvm$R&oGscCOpN7wXKC2d1|_5q5TFq zh{NnsQh^?@g87(iHmj|%*oXN{u)U-ixvnQK43P~75GFulC6y>bWY;s)+Q-7Zos9ZB zk7QsmVF;6FgMjY2;`*~YhwP4rR^k$;(}~$xITHnr%}{orpH2D(Z1kxDB58NL#+5!Q z95vI*&(0lf!=ItC-vZ?g;!owv8OL7nv|u>vsGsMWC#CBROX#GSBwGNNEthLJq*D|Y zW}yNJ2iTChw$|E&kd|XtiGjA%w#rPFU(~M~X*=z8lOJdUwc65ecAomMmI{WBt0bHN zP?WZpy;jpyiQ3?T6}J(jlV$H{0Eu>Be!yTUT>rcF3=e?W%v##ort=MKvi!GSGc%ER zOq8ap-R z^GR@L%>+PEtmp9W$Ow8~SMbnSM0f6%hS9x?JNhJRI3ENhHZExZ!0Wl|Y$m$=g=d#f z1fst;@(V*Vrbvb3u!WaawkZ6kjl?fyUo$(aSSU?|l*Zs6=^aUKcT4v)@Qg zncs*%Lm?MRq|D0ia~GD#|8mH@MwUw38q6oJ~Dm!v?voc*=T=Z&{r~Zh4 zbajO(Tduyk^jdFSj-?i@s*JbiI@xBa(E*mAMKkBKyh{r)mBG4T?7q`T<-6(DcI z2gY3i7)|%=Y=SG1r-Ye0*SrkA?6C^HdaE@$Jqf9Ls~2epFhj6DG{@DDr33N{1^~0j z3e)vZl3OT^ZUO8^*;3N^Y;9zA+guk*zr4!+$puZNG@&Obs>W&Hn}#S`63|TYmS+N4 z=u5LBcYq3gn~S3xzJSdTIc=qH)mQX(o(J^#ZU`_SAlf#VIFB-$irb^DJ(>A|#=7l= zTVm9BsUdRvwv{l~Dvfig-fB#iR<+jk*m*^3)#dR)wfWalJ?kf%VN6x&9AzoVx5YrA zRhcXVp={|J;GVej^rYEC$~i7)92mg&im$|gCFZei4LK#_a(x^bi=w1n|}8xHrng zC(NGY@Vh;Im|u0l;}+?fpAX9MgS-0o43hA}_-`?R6j)rLM|ic_NC@oUB^_m*A->XB zKknoM{j$Pl!3`Qq)oDK&PidT4vR=U?wczb6L@iJQKuAZ^^+cN_4-JdeHqd&}3rMRp zk?zsOy4(sD1(;9dM0>Q>s54PT><8dTayK*9)QFACLEkRFC-5!3gMkMs!LN-XB+QIfh4IY!7GUnG=ouvv}wY7{-1S#d1 zX{u=H7ai7ztTbq&9VJ`Nq3|JT*>f461B{|7uEm;0sKOGaKVpnQv7?52DoRFA2u;mL zA(0n<%!0)=lK+Eui}WoB%@WDpNfEPN2LF(EOV?zs1Q;%JKx>?>MMWef2=inU7{XU@jM(Ro8(_#eK($b#NaqGqzf z+mn*#g}drz{E)|hbwtu%jnulO_yVZjryxaAw$^kgA}nKRGw~*};ojo@2mAw1757NUt(9a9eUz?@ zCyc4Td&3W5VZoTc2*lrLlAb>6&KAccDvyVU$lpVnW}2nVRk+{>B$FA-sH0Y<5Pr{U z+H)o<42RSy5H>L-YEp{HE9n~y`1op6f*fYI_5azC)MNZ6fJ3;noi>=sdXPgwVY(c= z<|OQ7i#+cC5gVf@=;qv9$N09-w6GD>Xu=Ng_*0=2f8OW^nN#MIp`u{fPznV(WS3&*^0?*`Mc^t(_d0f7fxvCQ{6W9 zPkqzEG8I#dfHuAAWj2zYl}j-5)>iJmlJV)Eni>Ui{_&*k;x9CoGPeZO1?tIgp=YCT z?$v$c6KS>T&D25Ct>9olGenvS|IZ_4KPlyS>M@YCnXm1x9EEzXQ$F%&ZDHB7VH90xIT>whbLjbxZt*THg^4&DX+!jx1Qei~_#7;&~{;#oW z^>V3~`phw=BR5P&u3jyVMZ3-{t6SY2u;S_MA${@6oMt$i>f4}!DFir3RJ`qmDN}QR z3f-$__G0VkC7Th;b}Y;2(t>tKgsjnc_&|8q>gWkZ$4#EZrVxUQd%SW!8_fKn#5Pz}%U zm69dBsAR5aAU-K;qJj?yQ6#Ha&G}A{;Q;z}vZTOfe-f_g#e?&n(K3AJQ|hw%Hhhci z{<*V_gG;g++yk4`_^JD9zJ$c_Z}TS_BUVc6=6p1?r}$iMzK)^eX6|uAKY(dXZtXAW z4fC{aTG!te(v`FJolVGbajgSOGN-;PQlV>%8G0TyKBc!MQcuT<%`a6#E*O>3eCNPBWMYz;_b73h z328Nxa#c(Cj;6bsCR}IMu&IH`3vHBHhv<3c<&{;%WSOjaW^($~+qUM(S~pI6@ow#z zfP>A+*nTh)t%x`kyXxAD|3dq%C^?ymq}>3|aQ&ND7?U-RV8Ga#>A*Hn3Y{Oft54Ka zh#MT|Su?%)cj(wFDuQ}AUGj^+NxJWVohbi^-7bQZiZQw(LvuzW(@7sCfIMQ}I0E*4 zHGS^?0Ju&Jfx75;H=fvYWd0Qyq~`PjF-?(EqHPI2lcw3qVWz2WB5YFc%4mN_4B)ag z#Gr0Ep5iN5xC(V6ST^*R28D&iG!-TKyRkw>AT>%~6QR#;M4r3dQUE@}T~nIQAU zBTmRz2d3`}k3hwQ@jw?zKMK6TY$AS3!%d+Bo&ZHusNSV)F+Q(~P~+{(^*OG8S2m-w z9yTqzvB5vuaGcMgBZDoKcuq`5z}7Xq%OL?8b85kQW4f&@4zw;7o0rp+g$NlM5aufP z&u$slZg0r^R;40ag8vi2TkolQK8~aj6PJ-0Vq{zD9JKZj?Zn3XOywo>8j^cOD6SeTFS(kwyy_ zV7Ht7xDSoD!jjy@=Ld~F%MdUBECh``Lz*neSCY8SM<3W)C~klTSnwY`lhoX90TJ1% z3&Gs;QC6-F@+@w(eM^^GB^IN?8G-oJ}I@PS1Tp z4bX{5VW!`~jKSykK~dY!4_R_%jk;5IjA`_APag26t+#n1S|-M;5JvbQbl3k$;8g^2 zmmPO+8rRCbw8cYGfYNzUKf9l3I3*=zlw$GWirqOWYZ$=q06$;tdW_5}y?q}NC)IlB z+?}`Vu-jVt>7v*pUo?d`Em(t%{2bAvTcZ~nVAE^ur_-{dx>i^VwP`fM=+`E`L{l!mB`j}ZB z4cH=uc~-}qnI2Dq@1CA<`M#tUprRA>wQ<=@@iO~fkJ71>X$S*RFzTjs$VVFqH&F_K z3N2~Ju%G>rTr4xghmH#JIzFwfAq$C<*oev?J*kO7G9aLz1egKrdsuz_eBYoL%ayi> zUeW<LJsQvz}6@L|*N=G111==F)q>6nIz6j{@@>+7*fy1GO_ z{cxepiV}zoH&ew`FIT4mv^;0k);!$5QOcwn?oL=F->u<|x`N5^OXAop<{cO}8EbXD zV~lh?M&pN6<>ln=8+(Q1F+4my4`!LcuU%o5K|;0`{*JJ+jUs)|qC+&v7LGzDhVhYd^c0F7gY#wN8^`_?UY z1pUF)aR3;V!TR$pRQPxq1spHTrKwiPSV(u8Xf8CPao&He1+8Do&pZ$f=(5z(^Z8&1 zz4O=k;TC7_Tt?|!{c?SF(w^1cSR00ayN20HLghP1tn7CF`RkwP%u}9Dfmpg;e;o`L z0U{JaLlY1sOIAw8sC(!7!}$1mRApIN`jf9vi_>ZN@+k!$eS|Hi(AgtWe0<_0O(6^v zXvLoI0VbeKCvF6(acvBzFtc~VAS#sq)r5LUX*BKJAGVp03xd0A1$;wCv4Jo3fi}cj~#^(p4h5}J2yU9EOc0kj)M>I z#rX0iHu|%ys|b0QUU2Lbv(`5(X%?12v&nEEWwpQ0enG^w#m2-;z_42SlcDefcp-C} z3t~c{X$?8boc08U&c;86l;oP!$ zf9pz5f|>^NDT#3_p%Kv1_uAY<-G7Fr0YL+(Sovad)A8RfAd$?r?L|9?Ju(e#)xK_Nt^{s3Zq)|Kx zo4^^J!pPIchZam))ydk|NkbDOkwR_IY-iIo5tdm`@Vk zSvaV7=#!7AmKn~7Y=%SsZ!bV{mMtefBLCjcHJ1lh_C2f(`)1RXCi!c=hlhZ0LNJS` zoAbVIlGflV3U5C>Xhp0v{fic8)(HQh(Wgwa(`V6P?{XAOYPwv&cDLsGX{@%k>7p&C zOe1at_yeJ&@rsadiUkB28=R>UXcU06EKPe$0UO(7tgUwv>>(kXRJnQzj;%O5! zEWDAojkYh$&HQ|)zTyFCzkd&HpUSaaKCjce?F{})Dtk3qm^IB@2ou2eUNW%fS4H#X zx>P!AzTc6r*Fee(gbwKS9pNBdHyK-UTJgH`^A{q1VXqQ+b=~3b zj$zDbxiQ)J?KPUt6|~mgGTjK0)p0we7s_F@Y3B|Huwe7NVe4tOA`f*^LD`P^TQ%V!t81Oq3%5F3l67HVf2`p_InI&fQwc(%- zjaqi+tF8_P*>sLxzdrwPb>*^Yd*+wpgW7u!TJJ9_-d1lmM;cKnGu+#;TXBL!AbKA< zS;@(N$9yP#(_UgqBBJ*5;$UDu&8^r?^f;b_$WD<@dlHg#q_T8YAIw%h0NsEN$UILj z6|INJ2neMEAGi+h4O~u!_PO?by)Tdd3;{-p$#n@aFx`WXj+4cNz(R2m*ur50tOgwPrmZvWpwO%E?DH}vm1BIt}{BXdTL?WWp<#uMt^kS(!b{y z4Gqm=bR+6-kiflv5TR#ioGkVzDay*wf*rcETM8hliJDznwPtfRsB`aY95Di>pLmkD zIRE#y%xQ+UduHDI%~-m74QZ9T{YIea^79zA#G$yTHI%=?cWYfkg;}x^_Gm$lN8gPS zk~-Sm8850j@R?jb78gf^gj_<|J{D6ttV)Ca-PsJFe*EwTYXNuGH_*qv>{d+ozQj~g zamBG!v#GeB@B48Q%$`j3Kkpg;CxEU#a7PijZd4phkm?k9j~yHqW{v`vmd&FlXmuF4 zT2>!yij_ywVO#I`UCuj?d0&?Q_9U}S!{@Rqp)m76~KKXAvHPpQY zg)1B~S%HNrj53VUV#>8XHf+N$C|u>!zw0Zouo7i&zMdyhs>emOJlApOr;udg$@TIx zI^|XtXUqnU$>;g|yqvP?AGId?n@gZ}+k?p8o!O%BC~_2yzZ`*GV81Q(!a4 z5Kq#|otxqN(U`(TB^0JG;*%MgB z3{2ogVJdkqCG933$n|?+mZOJ#^vG5NPXX_dP-tEHP4i|7rWy0sz3|#I9c5{8_|w0S z4R+QX&-C5>MydE5g6;B*>g)6MTcIM`;)DnZs?g@=Kr>Zc_mUWoH%tFfS%+bbh6r#x za#Ur$mh^u)=~ljRFjW%*tM7d8xu#rtYdT^kj1YvBcbFGtPD-6UyvJ*Imf@El2hYCMei545AsW5Vj>Y{HFXuCr7lK1wkJ4CHYxy-pSfu)Q3@JavhK_E_N#_aOJ`2uarJol^+rk%cv5>~w#J&+(_%D}rXyDqm=b`F zi&zwBrkBjt7{`PpHBy$T0$yNDkO9{Hmc!?Jba%J(pL{mJ8OsYg3krGQBL|5H3ZhCg zPvKdLBf-5>iX?0o28Z$OV#LbwqE5?mP&6wj+T|B)naxMG;aM-7dCY{C{HCct9Bs&3 z^*~yN?dfGDMk_vivA|{Pn)%xxZMhr>t06Bv(!Kcirer+&eUQO=WcjWwC$3f^AF3Py zGF-v#Uq(`hrKeQw=8YXET^V;h+fmtkqR&j(^CH0Qi2a)5Ua6r3JnqX9pf%#+;wqf0 z(oBRX)YL;jG7y`YsB!)r4x`y~-mEe~X%*+)&MQA^HB+TgFVs_L z`rW%8F`+6n^C;GI-dUK6&^fkc0xp(6G(KDYQ6Np!l{rn6SBYR*k}xk88uMv=($mJe zl&{#JbV5sGi07vamX6Y3{=jT@wBXa#3T!7cA@|Q*mF8>r{3m@N3bdCyZ%TxP5{G|E zx%EUkL-KkLxatYyy9lG4VA!#;mDfbTg66XclASv-~Tr+(Y#L#3Lm zEcX>rE_V$i+FNd+K3UmvrioJfS-h|j&Uz#;N+zeLg!IJn^UR*s>5tIRsbUZBBNN;! z@mf}o8;RVIn)8BK0vVrX<3uOBBm@h$^Y|RPwY^R|dlH22zz4>&1%(>ZCj#=W=RUgjoJ5{Wq1Oi2Z+1-~i_1{a7bp;aH)^Y@N80og< z3_fm|(L*4~`BBTyUP7uzJ=jXRZhNg0Qm*FRvRvITlUK-JNOqzC??~I?s zXymFNZNbIrLa$K?&UW_<_mzBNbE)W!g(r_wYv$iAfu0WkzPguDg#R_qG~w4sgVOU6 ztyoiQTx7W`S6ae%9f`Ezh6(1J@!7LqvB+IVs#h2~IAPA4Y_O7?C#yaUF%jZQJX>D5 zrYs3I?kZiIX8o)YuCy}6EyQE2%Zum9d@$ff<*_xOeEk{;SG_eZs3N@ENXg`VGMWA` z4nMx4Dx*)_@!;ZcBcU}Cqkdxil4K@?bGGKnn&=N@hv{E>M2k{5m+_J=H=R#h$KU7# zd-v3b4Hvwrlj45$rroyla}CydYMS>KYY4~>F8Soe_x9OR8gnJ`S(Ob>-D$AT3S)Qt zRZ*2x$Zhc|Td1zrGz6b20J3vgc6pcTCZ|yYMs>JqZ}~tPp4f_uw~jxSqvVk4$yTCO z{M2L4pXU7jTw&?!#`)V@o451SS$+>!W@!be3I-%tyq%)&9J!^2pQ9sH8J`nqyp4Jh zr8xA_9x&hpvQ)^`eR^}_lNEoRWX`}Ji@LklRZP6*AXux|f`lrkk9FbV3CcEE!Fu!B z<0pL?b_i9;6iN?X`TP z2ajNCeEK|EQ``A+P2eCrykhsXWzlwbAYbW704je=84%U`+zGd_mo3}0fFZJYc4VWzQ_|%)zL3BwOwQMSW~NfE!pj6v7yrZ z-}F|u4XyeTgPK{Xp9@olW`aXu>Vu4J7$RDF=U(1agweyacN#9EQvr4#TcRM4x|40)l~gPbmOqDK?!HBHKrGO~#7y2GY9 zPowzC-RENeX`5=xrk7wiG&MsGj27)KRVNBp^+BJ ze9O)#kCQR4ZCsnYAL7IACqltRFOTyLWRZ@MtasAa17#~^I8oOC`V^1E@bZI5v^jZX z)N0UoxMYCfe2+;*V6aV9YjyQTSGU#K%5@~?I85@!`8b-8p5F1@foDBPABl|BYCJNH zwqtlO;;mHH_=!SJ9Irx!UMw9N1fvTIJW@3@EJLDtCf#fbSNq+DzYR=ShEEOV^jX)s zy-D-RU2pO>tSiOC5yE839-ach6@KY`HtVcRmt?qtfg8b&exvI01B7TdH0{p3RNTTY zFJ_Mt(M{$%R&b;T%{aF|!+G{_;&ir;c>l~$!}MY9js;vA@wTv_An4n-ld~07vA++v zf7{ZOiMfYsh&>!6D*9C8wJ&sfdXeiwJ;)p=J;Au&r(H-X1pTBDHaY2sLElI`v2i8Q zzH8Gvh$QtEHRF^ZmN%a7p&wZ}uX=A`&8)~hTW_Z|1od&O|NWO=;ya?>*59VZt|FL1 zDEkwaP4wzCYj%_AqbtOf@Ks&oA2^$yyo8=LWOB4PRP0>LE&B%aOz(zC>WKFS6!}74 zX7Qc&+p55};5dgK-hk0~+Oif7j)WIL`!jLuGxKeF=-Z2lbrLh|kldMOtmPDB{vH(c z2JEu6;Xf?*s%Y_i&!25juO@E4Ez8F`|`P2DammXbB>brS!KYGu+=|b-t z9Ewzu@X`i5XdJ{h7KOM_6`GRWCl#W?|c{g|RWUb2w_ z!T%#vjo1onxAA?6#A$2rE`Ojqz>$6z9BKXR%YF9tMH1hO8xzD#EKHGbUb=u5`u2rD z<;IQf*hv>t1yTzF4Q^e)n5)11>{qMQ0f7n>u;*x)LFO!_ijEQLb*?p5d{RcJj=_QoaCnq96PyY{NCzp zxR#nZ$5>U1vX%Ttgce`HufpZa1X4)4C$5W!Et9syq1c$}(w(7FYm99zJ{sJfL;R?S^ufCE#}@kBdl{xEY5S zpS7N^b?Xqbe|#DE04`EGC^Y@Y0m12BUg6N%7U_$GxTL^ajDs4_!)BZPQ3fSNxv3-V zYR{+I-{>MUGrzwiX(mauZ)LU(9#I;~qkS(%5rlK^Hfju}6w=YW#v`N>J|^=qk-`lV z+)`mxbMlH_Fq`y+;hDt^%6!}J)bVX}we{QvurEg&BYRyepnTP7p*KnQ$mvc0Uqz~*3)5a9IuFiAlfK6Lt6XgaK__5ov z8Q5C8yd85&9&-|SCw9(whUS4|T>I`N0pGfkkzPY&(4U6FV$<&w0#4WVO2)k`8}CMZ zh}#@8nT!$%_Grwz6wqK-K_)4l{ZH(dV|JD=wq9iH{S9 z@rCKu$vCs?GQI#$a@0TU3++ZZ(%uKR;CTQ+oT;=2f5;B%*Y%%Dx7}Ee8hLQQ`CCJAt9R0t1=C$zrBLuz(dTHDU<>1gb-U#%G?o0Nx?at5Bix<%eL-i)l zKBp-iF!O%MX`6KrJL#|#skDrI?#Un&mpm0DKviI0t0-DobSYS_v2ndbvh*(1?K;MG zv9&R_IpPCBVVEC&08An1J44)1mb{4&XTrMZHLT2ZN??I4j3qfeC4Tr|;Rg%5A>P`L z&8OOC%)p!UvTJwF%k=VR(s@9dE$6it;2T&-k9&}3Kyx0cyHZ~h@2+Za|po}IeSyf9* zSuuoQh##&ilwA9!I4GVE?fzOIDry+&MlKn5cfe>hj!eDHLWi8j?ZU zyfw1w;3r$CRXR6r%+0$U7g%YFjLOQAVOG2dB`Ixan>@X<_P69NFK?oq|H8q!$3imk z$?QVpiMKCyYe!+~We`kXXi<^upu73E!6wnO(fqU4U`G>%K;MrK24`w5R`UxdP%JHQ7vr#EYZn5f_q9M8$eb5%(HB zH2dE1wCe5nbe_}syaI7!8nMbu5Tqo(Jil$^CzLSuiy}d&&@a3srf_ukM5BKw$3;Os zD*7hAblt^--Zuu4@`{94)?OPl=;-+PGUU16mJ09;gRq|fn0*;OwSr@?-bL0SkNtRZ zk^S8lM-87q?(&oVyI%2Yd}f1C1@lQ;az69^B`k4V+7)$S7Ru`Hr*LInrr)!xKPL%} zx1KWe!v-+JO7CcsyEgS+8SH1O7~tlVr+ zP>B+akhwhXrs_!%ON|xjm47|==r5VSkn!9Y=k_|31qV0lpcW3qg-ZD&m-H9mJBJ zjda=1sEH1mIv708G2!Et`M<)pQ126%*|kgO%2-k}O_iM<3B1WaNXbx2bYJ!-3Ax-e zFHbOwN|^X{M78hkd%_;_NFo;SLV}r@jP*gs#BzxqHn>$a#kF09Hck*icXvFeB4}CTM;59 zKj`@#cVc|l{~;?kIwhrho(bW8*%o)YG%Ei=uwcOW zQZ$jq8G<1A{6c?2(ZLy=-=qElh;`N81iQydefTd)6J|Q!eG!e^{>62~Ra2o|9b%vK zNRISkH@aWmX7Web0*hwq1%b3;%CqEfNeum2LTdYE^H{3i6F1BmUIuJ*^2E+JnLmEg zWdmm{0v^ed>JjN@=#9&nV1Cf&MThjjjO{)6)%cD?NZ;wkP92&zI#+ome~hlopb zhdRa6*8OYdk^_oeJl(@cC|*n$*tj1;VeSvKY3f&n0!F0 zcOQslWV~2TR5Ll*9qI=`Y`>F?KL{Q2i|8R0iTL5+_DRnb%p&>2{mnZJRf`!1tHTX6 zJ9SqM^)qE=He9laK_1K1SN941Gf?36MzgN+^%*@~-FA4U?}tN`1)>P4`@YJO7;iET zeMJBnz~L|~59x0>`Hr%!iLD&gl%zZ*)iXTWyZ9aVl$~?Mh}`H8K$SGFBdt&S`MCd9 zc#$hhEXf%992mSzS55v@k`i5((;+Pc$L2u50>>vI)gBuV z`AY$Ge#?sw2%?i?x@5@-P1g_Oy`|1rZ0q+P=`L5!Rz6|j-ACAMTwo_&SFb_8|4MRi z%@I{zUeWb5Qv}(Cq%{%P!x#i*eNXnx!^FL3aW!VVc53_|;M39g)H#pe_B`5D4sf** z_Ez;H@=Nnt*6ud>xPqGns47p0w{Zr5?RGW1zFf@Y^d5D=+! z9JP7OB^joA@~6tbIcp}zap*`pGC8^JRtF6t&d5*2%F1NBc0=&l<=?`&cDB~lk zIM=vHJS-hmu-*17sksycCgU$5zbA3}{69gw6ATxb)Wr!OD=Vw>&O~)h$2VNk7#F!+ z=eJ~gdwW@czH8FT@7oHHGMhJbbmEKNLKB`p?raY|1#|)F0WMKb9B~Mc6Mk#N65k57 zx%KNkNxUWyER$^V`Cua{q5VgEhj4FohRt@)^e^S6F+0lBO@Z7zxM`S;g8oJa|y=U z8i*eBqBB8^ULf=lQ*>mc>z`q`Y{jN%ID(z+wQ|AstAu-WDgaIdLLyfejR*1yHa%xY zR2c>r34)f*1xV|_;P6mGlb?~1?dt;7F3Te3)7Ly*cY->$o-i;ZL##)x-Fxsr8eWoo zI=`{=w$@f+Z_i=Cww>Th(sJ**vqDICc%j?NF~I5ChOW0jwH*HblI=%ZuC=cfL(I2o zTv|J{!_#QU$>nrBJd)9`=t;DS-pX#ois(Bxi2y7G(}d>~(1Vt_^+Rk>*a@H|B0`{O zV8EqaiSQ}@`SXMBGCvE&?Y)B&qcsrd&#`pe2-SW-N7oO!@LIu|dTK?x*ibs8<3YV7 z*OMnHE*l4rE_~+fzxfBp4uajMTX-yDlVzvdy}J?rg5$mAu}oCL{sxJkkK>ArF~@MU}cr4?IdoK2Rk6=VrJzf z8RGA>h*AdiFPNCJL4l>P%JxwEnk0f(Ho*!R9q^xvj3aiPnQEC20iGnYs_GkeBW2qs zU!TsNp4o<4TTpN3TjlVug-u0y0yb#~L=hc@?W+y0e@z$Vywbak|F!3rNaA57KOy0u zI+cc++6#cmz?xtJP!ikln(sl>g!=LESw;>w*0lB0BRxn}O;zkgliceYR!snNhtnFY zjn}h(RgsMDZ#;|5YLy{uc`PDw3xpyOb0My7ho^PI9CwEJ_f9X6Lv@nWeZ8Ys{x6YJ zN;@92YBh(aR4S5a`XRqmQXk({o!mVD1mtl#7RNu5+Wd3*IG*|QyR;mxCyFh9cnH`#o)AgD zvxsQQz4gSNWOxMaR4uLdIebWd;Z^8wjypSKQ;!Sl4E2>+n%=o+&)PrL+<8<7bn0O4 z`o4$??)kh2$|i$$8eP4`+XczVF@ZC5@7lT{Mf%Y1BgIZcC%T?sM~UiPqe`2hpcaB7 z0-%`j5(W61#$Ufco?Aj<$m0;QPalTC`cCn1!KfymVnp|ZL|ryiYNgLX5A~HL9eBPQ z-vhXyCp4&oBQU3GKHjj=UD-sB%3T}Su<~wLU$Ei1S9G9rnF-Vc>?0POOd+IPaIuLm z26}qA728K6V1b>F*v7MPv!L@$KB3A@cBGFrC0W?}TP7{`DwGn@>>q47Rj`E1`$zeR z{7K>!{tdjQRm=;aWpexND}%m>=C+1& z8dGCh1W=yeLd`hi*VeH3vc@n>Y`S^!t5RA65NZci%$nzT0$jISK>_Pq_|l5;f?r39 z^{{pYvtrUWseA9vb}Cj!bF~lMKuK$0{rwW%lOyX-=^5LRGT$Gj9C%Q~Ou1HRF`Xpe zsFdweh<7d{14~d9>R1#XtDg^)HIQPN;xF`{$Wb zESHfyAZBnJSLO=Yi=mAJH7%`ny9K{@dz)P$bQmU(_!=}K$RH7VY=e4s8D~U%G9d_- z05wCy7hv5!@i`U;^7L)p2TJ){fzIoHKLfj9_Y|{OqNk#3HT9xe@?z1+wtCMhwlBFk zL#J`ikDSPKZa#b9!F;r`@b{H~#y7I2vd)hS@E`ywsUj{B65LPMU2UF9dso2J6q&k( z8*pT@yjkt;BMHdSnud$X%gcMG;cyEeIW-_UvcW(Y_Bj3h)AE+b`aXhO(Y*DJ%7`UY zVmXiDWU-?3ZH>3=SG39ZmI}ku{P>aMs%G)!w$H2s&+KG{G6NG+eB6wCz&oDTJQVZu zcLL@Q&QDh>xGB94Ba>XtSjDgA5kUTveoR#05>3S}Vkbk~Jig70z!U8>wN!U{r;H=| zXM)tC2xo%E+qbO%Fq%;+vXeA)dU#N3nJ~WiDZjXXWd#@@@0&8RTie}FY`UFotLLl+ z2i2>$`Ur0Nzf3wqKiE6P)S>6hlYG~^lDtMNFIM7>6%%=bpFjSCSxJ=!>yY?y>dKGc z&~ylbtkMpC`pxI^i|n_SIg2W**kl@s$l{~^;Qj@q&~zb4$@4?E4z-;4EPo6Vw4ryK z67@V@Z6CJe0~S0M_Xbup)xn`h2W_J>PQ9d8^FLl-PSI1ubHx9kQWhu}>9`W#zorF9 zQ#ZCrZlDP$F84RQPx{ygo=?<3l#k-@>pgM)f{K8bK4@ui`~EFqqBN8^7Q%d|#mH>> zi!5;09h?`5P>WdLEcnKQEKkY>7R4-|TA2P>_#MjQ8SU!h0)^_8utdte?nIC#4bRHS zah!MPc=re&Epd1~))G`Gb(^#uCE}KL)nc}^47HqmnmwHdJFfsB=+AN~?%#EsmcQCK zjW*i7Un&r&J6^8sG5Q@rZsZv{=|UyEP#Nt3jPFVJEmD93R1!Z~jTTN;{(gbE4)nB0 z2K=LyJ(kptaz#)&Q0`@O*i0@jP-xaH^Ru!TM=8@?{oI;oGd(WySK`I|a9vxMM-od+ zN0L0SP~JBRh?A2F?$xP60zBdkgrAX5Gyv5lqHG(&0%*N%0~HilAz9k}+Z;yKK|n{w z|GkE)T~S8D6yl_-cIH?BOtoSIY8CvWGsS$YRygX5t?R`oIq>oq?2lX@q2NF?ub>yu zrw+n2ts|3fTEG`a0NRLVD~(g-`G#6(*WkPEWeS1RTjBu3%MY4-zT)zN+i^p(PpO-? z9F0+em(M=|_f4H79TB2z=IS%tCb7JH-@-b_GJ%n?^#S4cUC(-?!M2s{o6VzBfRCm4 zPEuTq*aB)@zGZz0{r$jMtbTEa5MTOR^ON`DiFSCJOGf}qk_q)+j~%HR8^gitn5{b(_$S}51Hs2l0&h7T91D!|mp$lyX&O6dK@KNVR2_g!X@`vopGQV;$f z{?AYU&%ytm0k{3Xyd>+pF$LR~PNS2GoKFA_Lr*ViNk(!*6F6J}Y}Bp%<2wrc$k#GA zNXCQdBVQ-?CtWMR;_O~avoz+&Kfb5>MCLf-`QuNP+q%P=&jD}+0Fl2KQ&8XoaNC!r zwA=LMG&w|F@_9wX~NFlXlrmzOpP_X2+jQzz>AzzB2c%dJz3C%C;8hyL(bU1|U8D9JeU z5P!xKf&08x&1=gKEd3#oGt6t4K{T*jejE>2 z;_SuAOKM#lX(1P}@B@mAcZWxBhG^o+(zLeo|V}Ud^diV zz&vMv9RMFNsSUT4{2 z@m`>Z(Z*1iS}Xru!pvhoFqk(q1>s>JeEIzaf7%zd9RVyW)7RdA0~bCI!Pi9L5Ai>8 z5B))1i3?3nt2up_aV;3ktj?6OC7r@A`9H3$E8l=%9~)WkdcW`;o8xoG%{9vPcTfI3 zhQ790^A@&=;O~D0#s7Wq{|lk=e~2d6C=-?bzc3rfe*$Uou?a=H5lh+#zQ+G@>rwJF0{&4KM7?+6z~j{zn_4X8@GcZ5d9@yQ3tp|oV2r9Nf9_ij;ryPTe=WSpL;6qZe-PTVGUVShQ2d4b z${@RY?!(B)XmO|0wqvzc|Aym30G`ziTeu!BBx|}sSNF}H z(9A5AlrMbQgpo1A{dj!+8V8nP_O%J~B41xmRl$W^)?8FqKa|AqyLz0`Cg$pD{A(_Z zPE~?dD5u&9*99IhgM2K%A4im{B3>rf!utH(ne)Dpr~C~vEXl`PMAXm$k$CE$)AMdK zZO5MI?hCx3T#ZYV9a|-qKAp5#pV$bp3fizx_6BV~xwS;Qg1`UR_I4h<-b#P(l+YaS zeKqa>G8-g1)9-hF&T(ufyonD#^Ug%sGQbRKX%e&tIwRfXLMPS_KCcZy?6L2Tlvv~* z{i3T`8CYmnWfR`-w(1|ZJ#yZ7Y0JN2;4Nb0cmDM_p+2vur-N!oX{B4QG3@eubK?}J z=U2U?=vGz5jM-RW^hW(mYN7%XJ+m`ps>S|~UprIwa-nHJ$7MA1JmS>1C7)*F?x6J% zj=NmQ@TnmL+>=gj*lkW{TPtS4cz-TiduA~)a%X4wUYA$*L5op3K>K4;%(@HMu+F+^ z-=j8(GqIe@6huCG1MzdmsDMVg(a-0$VnJgREI0@)G6xhUGhVJ5C+_6r#9K{AaoRKNhev2Lp84MVhossAaC1QwDfeqS@qu~~#ZSE&y;1*5LMr@LwAS8McyRUcpsz~`n#+)IZdY*BWytTcC8t$mPP?Q0`!*LX&sT6ZN15^3f;$`-DoWZ76* zvvpiYQtvBYJ>?Q~4G$RN481x_trMH)Smqk*6oC8TeVU=0zd%Ra)j{4fWOi=}11nU0Y7it3AmL=RAHT3%6c7Fd1E z!1n=4NH2tmL>=^rWHv1c?_68s*`bYK5qOS#j+z6_RU?$fXK2r zFEw_5kKCzxpU&rWEzUH=dqcd2cJTTqs*+U|wKDRdXAYvAo~{Ubs2WH3v=2vPzfL3K zytkFLu=+GbO&s(0R;zoGVq(0WRGJoKYyV<_fT-x8%5h$X=E*;qMs)aTqQI0WF(??M zNU4ZyggmJ-;BwUEXULW13knj%dQDGH1Gp^*#1nyG$2%V*1hz@2r952{0;!Dqe>?4(qHez!>=@Z29bp3M~N)HsIw*p*g;v>br|?8y9SJB@|ERcWGLS5U@H_@jhLv z1#kI|K|`={9uOK>UhANn?K`KPTOv=zpKX#$o&ViXFMLp`QGhqj={5iyUkT>sNFAb2 zH-cjwF~~Tl7J)bo9Ub}97hgTj0t2cp*AZB2-EsNG1*UZYR%1(^;wG3Fq>y3Y4d(}8 zeqe(BP?`3l`2=Eg2_Qn>1=WTa*@?Mbz64p0H*osS8xc=|gG)rjG61F);A;6RrzvX5 zpTh_mxS12k*jk&}54TI~4nnpS8E6ODNFz9P`AW~^jM8eBpn5CJ7h8+kBG#|X`=lz^ z%`Y$!Q$)FV=dgF}n@2}AxB&_ZZl@#9v?|Qp9UU{mzcMkocZ5yNq2sQOscr?(Bx%($Q!1+U4HxfA%enLfV zz{7u51Kgj#1>Fn|C7|i{XCXS&F0GFzxyW%qt|EgVvso>|1wf``W}GZml#AY$6*P@1 z#S1b#QpPQ*JyQoUN=W?@4mORq!N>F3J>XymiEh+>n`+1zB4KKfZhD{aJFMDP?_iwV z$O%MXWa&~pCRni^_p_7vJN==TlVDs%7E4eIs6p6PvE+)Y7{w{reed9JV3DC-GjDEv z*LiC1^p^eY;k7e8c1=U&tSa}o5eD1ccOjfL_S(wv*HCZaQu}==#hC!|29_t=vmt!> zXG+l(%5=>-xx~gMzPKQ&Xjsy)Nmpr&dX(#Q@LnetIAE^h&l;vH%16K$x%MR`tfns2&kc2VIHYQPq^o#=H1$ z40ARmsF8UBQBY!9*YJ~>Md~_U*Q!|_khh=c-XuY0E z>9vTB`DXm5K!E8(RvX^#y4a9IEeK~y%yo@An)Z6doa(4nkJerBT}$_iKk zc%9QdWoBXugGCO0O1t`*JBtQx4KkhaY#yjphw34)o&V8k*d6HC&W&-{bT{iyrt?XP zOlik})HbikI`^#!m)eIv z+)Sq~DMEx6Z9*hrHdLuIjd}>Rx0+o$P9sj|c$p%{yCaMI3d?o@OA!-KV^MSzEnnJB zLCIH5vwp-v(UW9(YwC_jJiWcvI}hGgWqmSYE?&%^dmyiT`1?s|lHShwXRwl$F~fh} zP}tARytY%s34m&4jU!uq8?RsgQIsEF^XQ;kcB&)LoUX{RW}Y_DBD$N6N* zXEuLydOWs|-rT#|nsU>RLE?4n?bMUs<4;;LG*x~`{q*T=+lSOu0&-#en0PZQOUne2 z?w-M(p2*moSavzvwq!iFSUz~Q+Vkh_^=LGKXEepNzzpB%Qti^k$pi5f@fDA4pS}7O zapI)~jKpwYbZ!9>Pr-MHzS_je(OFaG!-p?66O|SPw~SPv7;(R*sO#wb9MPL+D%t@l zcb0USOPRxi#hB&f#Cnq_-o%xD?{1u;?lo|JJ=8#`+NHhl^0bxr(!nob87i_aB9_;s;P06=x zvZ7P3;o#t0O+C<=*PDhG=?d6o94C8qKZ*X@Q=w3P8^Z|?C_15MPTs~vi~Dp2P( zwyEj|CHM_4i)(WwiC4xWg4HI4dMG`+W6C@}^S*p@bRW#7z*B2v-~kIV-I`mcSc|kX zRV7pEQB=-xp(aOO;}ylv#SNyQ`aB~uxXK|^Uxd$kS-bbaPbxz78CnPu-m!4UE~h76 z12WU#Y$-ya?o+yuMuilv!z@=z^NGL2yV;h?5yohK*mRUcgGZ8 z#(c4pm5hZ+(hWQ>Wpbcf@1aAlcSFVYi#6!SeTt^sUwRmNzL*ki_lw%u3Z-%}zr1*e zW;)liTl3#vvXL@6KeLvl6aTet!X|8jPfh~fX0Kvl@hd5b+LZs1>Dj20N0dp&-xpC~ zA9oU;oDG!A>u~D3%JBJ4CVs5%wmn6b%a31QQf5+E59?xN+WS;UK$(;rQ>{pe>Q{^7 z%4SUxt*Ujx#dabb2bYxc%}7z$`pAI6)L@lQ&X*f8{{ZLwq!;|lsg!mC-OBF zK3)kEJyR7dEJWC@Uk@R~O%c#xgG6o8T~^Na5chbuPc{^H{`sQ`Z`))Am+Y?E6SJkr z8+#o;{V-8^Xwzz;*>q@&hrRiB_7Sb7nd+Wmw|@DDgv&)ms}CE4{-5!|Ioc=Jz)d+H z$A4y;$WbOG4VqpNZEs&}X@GN|KHbhz1kF2|PkZr9SZac46`T^MxCKtVCg^_e=7NJm z(y-qYPZD=3-|X=O+)&sbqoa;X8a9oBZ<5q| z^7<$G>%DzN0-nbi;gyGs7Tw=Kr_GtvL+j7GK%`RJG;8% zqlOPc`}Wa=rNrMu2al6$kvmgQCZJxWB?gV@TBR;A0q|0*Q~cFZPQ`fEKif96F#KAq1&tK9o z@V`T)OK%2m0TPZFv33a=A;j%rfTnjHjUQKUiaI^R% zrYWnx3c1vuQKZhrtG!10fT|ELz;}i1`F9PNq9u)(L(u2{UJ&TgZZV7=VzKPb>UWtR zwuI!X8G*t*uT}eVJs~#JHPXd~8wL3@y(6JiO{}(=FEA62_6IC_lO$9!B|VK|*s2`< z8%A7#2C%`%`q*ByBl}8*gNfwe;;qy*g!~M1p3pX;t2<68oUAV~e~zv$akT+B#xs^c zy^Fy`?vC}oWP9X+U6*uB#1qVAN2=#hOa|d~(72mIRn4q}Nqo)e7J)X60 z#1MP-+^-yaviKF=OS&||?r-mUZ}3onces~~nP&A>+M(1}xb>rQ-S8+0@k!Z!85yZi zu*+L*t`r*j;I9WzMjyHE(5@f8vhxw}sHv+LC#9kS1V(A~4woB{$2g&56AOcjL&K%0 zi@-KQteeVJ`iPiFJIn+a(|cAzH&s6t=`bnO6)Xk&YR2}&Q)1_!xHjR)`A~TN2f;+s zvbPT@J+yTyMERnygMuTk{{INNXYuNF$&u+;se$w1`v1(Q|JPHe^Y3PgOeW~t`$g=0 zoMlz3QvGZ$l(vjW4B#WgKJ!NaQv>$%e=PK zV4a?cuUI)$Pmgje-sFU{O&4etrjOW7(#x+8)HWJ&>gm`*>LAlCatjSf9P+ns-GcCv zyP=Ln_DP3=Vyx%4(5qz+x+6<}jT8}Af;u$q1v1raFbvB`gVA%nWN{Z=J~K?-sG;AG z7B@4qR!K~~%kC~o$s2LazYSj}E>YVLN3RZ69iVG}ImbnB1jj@(_Ffp5G@MwyNjM|* zK$mz^!4*{{-yfQTIj39`Ca-S8lJg!p5fm0CUuncjS@<(=W#*+^c=BuHr7m=*pm4OL z(56G^;|ki>h%UQUO%2vx#j>>y-AF(m%*!>*^s^|A>>Fvbi;BLgKd)yY-Z?9ndi>mv zR)R}jKGvwgQ8qN8ky(Y#2)Z$Bke+UA$u?8w1h2C??`o-Skfi2qA1Tf1&Q(lg0ypj- z?jfU0+3!o_w615N_p*sR}dt(5lL(hCX3yyUvUq7KCnkbO= zf~^OvMIVib?XYrehB2;H474~~^lRCmeyb~J7Y&Cc-||~?b97eRy)#^wO3qpltx;G0 zhZ7Ye;U&naU(V5WjDp+b10@AimKHo)SXHArJ^00FdHIFOk#i$szr?hfZBG@HRQ?;5 zT&u1*Y6UHD&cB~<+57Dw(r%_C2892ka(s(*E0pj0Y)C}%$}6D~M>t}>e)Y*H%{D7i zr_VmG^Y^q( zUk*Szzq3;rsMUaGEvzU8Ou-z*D@mm#%rs2~U5?5~U$3<@7<3HGS|w^J?($L(NPc7v z6jABe+4-UKr41Qh zZtQPtp5EE(PEIybJ+h(|b-e&8rhfO&!LkRr&X{&3`Ka-aBl|JdnnSgob)KMV(aL3A;yd&#NhTHGL|>(S_b>u^WE= zn@~?IUo@5&vZQ*3LTbDPFg$2;`9bK0&~S-{n+Nh(L*j}|)MvSf3{$SJk<&j&EXDP= za>tAv@VE~Fp%yaXuI6ZI^<@=0TMk@lHI$wR#LwTR7P&*+l`6_}uzg{^a*J7kVTaL{ z7<+*s5d*PC{sVzrogp_fb}=2mEiVFt_z?fo4>fr&TVxs0_M-qXGjo}gRf zot*$(V~h(zB6F`EqhQ#z{0(xwbErdm=IUgqaoW$p#_wuD<~vIx37t ziuKBDYkqo&w0_=(ij;;EeB(#w%I>vWwXXIL=ST|)*dSjZtptWgw#1@ozN)2$X^WsA zSq+xg+fEY3W<3nYd}%`<3uL3erAndCM8R}kpW2ZCi_H_z78`bf`y0Vv;PiF~)o=9c z7N~U?d3`x%8M9MV3=u`IG60#hzHeqU6&f`7tu%N2>s%(IypSD!q4R0Mv&3GQ4UjyV z;nNr!skr>v?1%_egKAGDUtAkVwWooA<@ofmPW*7SEojSRfxGp=$kzI}`6nWbuM7|X zxmsJbR>+AXhtd85D0W$~xjC6pT^?5Myo*`_TN1>=wIQaij_M`)B9I(Sd7uTbO`pCgQ1+xXvI=L&cf`R-nfO$* zv_9>ef1YO2p|UvpvrvA8n*Kd!Y~No5HtXQZF3@*=1h*jBhrappLr`nXpQ+d26B+ zxgltUhPj-9B90F!DdXQ6b%kOIpc_l0k59cerCYWwwu1Z<4%=7~_)T@AR!lnjBx*dj zYKS%`vi3~mEc-4}A8c-HPt^i}1Si^_rU$m$>7Cd-(~5T8db5`L{%X#BySGNn(QE0W zdqv|;kWyu(8#Xg(ukQLl-!CP6=yz$lcEi~oO@`dhPq$+Ujnk_xPY|EugMJ)&%dXww z<61IxFON(K!z51@EGyNUQsUCcHHdav-sl;367^nGDJGuGqWN4{Y1>90O3i0Tf^NUa z^;a0qG3Aq2x3~Y1l$>ni1Ffjg2DW_E65Mu5Yoy3wX}nx?W4Tu^>Sw{e9^8&yZ=?w3 zWA5UrWp8gEwIoD0CO1i*(^o_3%|1=R0%4H|=Z1DfYKq|CA2Kok=~Oh-7yU2Uwp3Hj^}`7%X&Nr5|uSZU{=Qlu~$-^>4%54dkd-oZ@uX0s1cjm z1@gnWu=(`Mw$@jL*14ne4b&4b=@stQ;^#lY0@aXg4t#}RRnkD1g)+&rC|_m+*^m(z zOcu#l9TR-6zPuYL<-FZ23xxes`I-l`=@l#U$4j1e9$xY4OprWP+@=0Fm8iov1N1e% zm>k&lST=L$#YcsWM8W-`Ser)RnaFpyA!pTB#g3G_dsSbGR4Ey5Xr)aD7Y4@nTB5cw zW%eYeKY>&J%=XPZ!rqAMz8hio8?w0M`s5PB+7!Ui)3ruQ7d|oLUGnkCNt$`@J_FgE zK69nI_rA2VYk+s$X>JPwd6lVFO6JujD4qD$=uI43dT`w3NB~27C)|)m>Fj+G%yuUK zg|yu3C^NX6ij?|7y*A}z-f$Dl@ZwZJL_nE9t zve92LpQ|{FMk{y7&>wVwd=%CU3!HDObh~O|?02~VcYH=ccSm&bzTWGy#_L=MwVYMN*1kqe@3oU}i_DLcoe$qO!GQ3MpT{xK z{1mWhvREhvY1PvcPo1B%Hy-U;J15c6*k0@Jr{+vOe_Pg|c(?!LzBvN~dpH4nPhb=xm4`X5DwWwCf`5a|OX?A2~IrEq&;tDM?x& zivHFTek;*~mU|-D<^zj|nPyIpwl(ImN5R{VrC|A@Jm7&bRSwqkN{psr z-jB#gEl0Fb9jcZG!k7o3DK0$G+3Bp(>bk|0qyL7gBUnNxmCD-MD`8>7*e-_QX)WxO zv^`YPsX4@{uO(}fgZ1bjy=@GYs0&9u(NtSCf_JwFYN6MJ7i5P&TGit{h9ei}yIALj z{!wQPkdkH3%UFUUT++-McvjF%g=WJ|O*T9;mDpvPkQHl)T`ymeGlZIDYJ0YvaK1E% z-t~C~N%=a!NVuD18+PGN+Gc}^c60N-8Z|S@Ez)cmrnuC3K9e-(d`?Q&&!#dxQK`X^ z;$0Azsq;ldR7&3tTnL=A-s5@`0b_yGsS||siLUHV2g7Wi7K&z3-}>r+y5KjQS_0IJ zUFD>t%2<&rv@$e7%Sj=g>&`|bYI)2ZSX?3#AG{J)y|F~y$&8JSod)BiJK!7KzCh}) zkW|ced(ka5TXM@l%Cm6h_hZvV2Lh*;A5~X5kk@CI53yRXC_EiACOkwjFs-0?=Yxfg zy*j9)*0-L{&(Dc3w4UAo@uFWj7h$<107DIed_h7&hRm!r60Zx#LDE7AR~Qfn;Jwi? znByS7&&4iKz-9d6P-ja;vUBSh60KS@yao@_>G^*`AfsyQ*EyEhh~NSGq0zDcZbZVa`zeFcJ|aFM>E-WV)B5Pu zk)H0|IY_p1Fry^gKq9ipt7=2~R8UGLb*6Bgr)FDYx)-1)B?rt>zs&BT$g{3*EG+r( zhTN{j5+7GLRF25vx8wnmJ=VNjeTT)@AnuSTAI@dn!+5QwtnTwo zSM|J{oV%6`diT~%qtvggE>b6Osx!Y=5nf`SY7(Cl6aBr&TXF&b9AgU1(}`fANILzq zM+d-Aur5@dGpn(1&GGqSfEDmiz#@Q;aHYynzpwDs zhk%N!&X|zd@&<6H>my{`+b8m#Ju?6~Po`Pyrj_Z{w8jJo-!n%bQ%*}oA72FZcseHtu z8r$(|YT2#UK|zhXa#OtWd-D#888;(`n6jtVHTmfXt1-m9mWKhj39smEv7EzD9tU&_ zdSoToZ?tYPei&Bgfz1Q2M-MJi(n9NgwC!nRy?;LJrs8s2UIQs%JYMIV-dnv7v)F_V~;+RW24t zG#ci5tOhI*K->Y`XR)xO<3YpesoHL9Ud>=GbtYAvH=}w7F!nhChx~=OEr3h#?qD=i ziCoEdc$YKb!;A(~Y}a8v?Ph3l-$zLMmC!a(-nt}Vnf#+Rzg=EIK94UU{mGsGC!x-J z$2QZ70LwC)$ny8e*;mozI58+%a({M=zb$|eOI!QjNB_TcJpatCshp)JMI>ADJ-c#; zj%(k#Hzo(-_sZ3y#_=OUYM$`7q&f z`0Kc7a74lCe!2Z+3{oEv0Un6LNE8^Zh=|-YP`7IP9)z_due&vY_)yN_aKv$ivdtSE zXv)mXSa>N~74TVe^Ya9l3n)0v&uUr(&!ogOH-l00^umpZHO|l32BDYp^Yf=ioJ~#d zc4Zq7U*W`H$RmVpabfI%l>S$2vW&L5dh_!2gj)N>KCuWQ0&yrgzU^VjCok@trlmg; zO^Wcl4bZK+8Jd-!d>-dx0qNhL;b4!^M2@-eKJqGZ2j2F>3k!cxU@9%z<~o` zbUV#rc0N$Rfx7RYt=tH==d|{pe_ML;3-hy^r)O{e=`1iZsWZr)F2=?eXNiM--0M#r zhiXDftK4Y#{PkO~$0H5F@DnFav}YTvy80M|vWFo~4K@C(1}^=M?Y5*6)#mY*(?go+ zlOMSaDpQ;GP=5vE4K^zcUkHFkiRFv$_>@)LnGsN@N<~la>Tih$ZkLZQw={(>k-`=} z?B27d|AE3qjj!CF+faPwz4fC;#Oo9-%OR@8daztjc+V$boq)hV8?eU@+lmoK1uXb%UpaLZNwT{* z-?-eHbbS9q+KVHvRyTezO-@Rpw_rB_{58|Fh<=gz#=!lZM>SM3@uxA;h#KD$ zQj#`Sf3+jo9%so-1#P`BoopxAJaw#>-KdO+i*?ZNK|N!TQ5%|IU@aIb#$N&r0=L{u&EU zGURvLP!Xj2oH-$STksA3b`((n`5-ixo-*2s3|G_u?EUZBg z?HD5j3I~Y{K0^qYfkG~0SPYMd$wTjiyJYp33ssP=O5G>2vt%t0WBH_d#RlR?B{VdskCFMv?m6kFDJ*w*=Ws96lrCAec4T?yJLO!zm8r$J-VQdowJS z3#_7)YPPZxQU%I$XJ=<8nYdja zv{ui&(E8#MJ*^;CvbBfAKWWtOxbeN6mP78ZFK=5c2WAq-Zx{G)S@SQR6w{YmJ4h8y VF5-?ee3e1-B@}meXiM0T-2!bX5WE!k;_mLn9g4dZCqVE3 zLGGga{q8-_J?H*+zH`?To~$h9nrqBqbBx~@Nsy9)6c#2a=7R?huwq7i<*&+b2PhBC#-UJ85X zVBLQ*A&G;R#S#BGCDZV@pZ4uJ)!F@`KkbR{{(F1i#GgAWaPt2hNU6ehe?zZmmcjk| zH<)zu{rhY5H_!j32{bM9QNzuF{W=+9nkA)0PY1rS5s}3U?9KY-38&C~NU3wIo&(t3FU~S&>#;fX+}UqM5ud9jSX_&st zZMo>wROP0onFxni?BQy8YriiLfGRz0Ic~2uPLLpC72t9rr?HP}ZMY6b>~P5eibB{Z zkbr=I^%5FZuTL$a+K9b)CFXnd-DZS1BzG{r)ZEH^XQjz?t>(Ap4+|a8Tnp3}wxyAH zMTCu|YrR-s>dw)lm{M6@Q?&IF)wRK5Q12I2s9ITr;I-kabQ$BSCgX6GHSqBviAyw$ z=OL?^72qA`t#WjA5rZ8VS+apT*atN2K8`?l2Ok?bv~@@+##DpFCFM47Lz<6c@_d>`Bu7lw!s^i`Asis!@TJxPXsu9Z%Q(NiRNW1CYFhYYG&PXQe zw;sqp3c*Tpo3NRv*sk-rb(3QbAfH6kQi)t)O%cxOOuEdv9oj3~^eCj-%v6PiM^;xB zq7zQCQ-$ue&Fxxgmz>k_I!w2=(b*9>(=s#~WgapIX?=>AX!fE#cs5G44 zJ-f5DTdZ=?+``_Ut8#>$u4@CF{mf>d@JeW`b7uQzx-s2|`wQitC&c=mH@B*m9-oDYq$DkFSQ;mEyk=2fuzn<- z^Y$hXN8c0cgRBB=24Nu|1;6v))STn5Pc7!dUa{_-%}=mL^iSievoAN#m<9(wY_S>m zOszSMw70i&ZLwnSEu)h((em5#&r&r5a7Zj{EFE_D{9AFz+16B$b7&N#aH_GMcfP?P z=1bExU}D$E1vZDd!NDRX%~BkaiDlqXcVbe2W$*mnGXZfnY@VU(3%oB-E8h-oW0^LzLAqJo~oJ+nGsXQrW6t}`~4i>IP=meXHrF-oY(W1<*spq zjRKIWiK=T!eEzrGk%uwdVZLZ%0`y@_B8@!;;34VYD%gQo#u>Umzp|>PeOsM~482^`_6oVz{6O6}| zTsRa0?_|dL=`RS;WfDoOQ8`1V$jWCvTw5%LFLP`&V4;nc{jjY8l?FPvB3rQZm4^X5#2dt6>V@5su^VzeZ!-I+jySf>3g zjH+`NU}6d}jCaG01ctBW4jSRC?mLM~%)dD|eucKb*(3)pr^b~Ml_nd$LSSEgzrbYzCMQM9TRS@__8UK%J509*K^rMOlRqQJ?LBC6 zZWz>6mg#xN8@-Qzyc-5E>RTj!wo1N>2=NoTX~1-fii#AEo?2BSo|B4}7}+`A?*$}; z%hPCH;V*E&Aj@$kCntkbG2L&!7{2VGEe=7A^j|f}y;GKngxBen6a+h_zD^_0(~ygS zb8>M7(X-QQiHkRHL$2rR>Qhe+JWqoPE}M^`y3wj%^$)6 zUJLP-rm(xzEbjxn5*ZzvV0Iu!nsHSaB^~@&kq#9jpsKf z(*+~Tqeo|~>%VEk$OP<;91#ty#X7up)7>`xoukK&j$6V_vP}VdDRT{i+56ipmLZ^j2@|OeURv89afMSsj;2)?n(6nyqlFp z9uDa*bHs3STz~(FLEkqv;UQm7zVCdfSB{!qKr zO5RNGZAA3XLA@{plt`m=xx#8OHXpy|6gkhu#8pV|X=Y}oe{{ZBVQ4zrF;G(0DYw{} zJvxwEtC)Ip*a&m$JLX}UvTbl&%?hjDNLYI^D=LX`1sUl!;K+|Iui!3)Oy5?ZTm%FJ zumi_)&G|sP^Mz3Tz!6{R38%8g9k<-70@`r0*#gs(N(uv?T4Wfhn9X9&{;gqH$1Vu)sr?(M92GlXUgb-glv!?CZX9C?0L|$ijV!J-?NESqJ z{J6W*&9oWsR|iE}&sUE$+b~f?Ojk#t^DBw*qQ2`k@~}BLZb^pY*g<&s3Qx9zU8qWz zqGxg~sLl^=q`)S&W>)4f!$RaF(Wg;uEQyh5{7Xp-mrGy)-t;IkPS9^SO)pLg5W)YL>w7d8e5JNBI0 zG{J105nR2^HidK}4@W%Q7Z193Sy%#pCSWIBcl#~;P^J)IuLO1$TXX1; z&m^$=zi?B4uvs?_TQ-;w62!c(;v1~U@A>Udv01#LW5$Y(yyJVrJ*(Glan5pW?m;L5e_&JT2LmN+0^LN?<4nHw}ax@GMllB$Y4y&Y{E4+ z^ir>bYH>01Il1tAu(9Ox%_H~99Qou{cMmix?8)5{8x@D;T^qHNxqO0v%X@z|PQc6b zexkg>4s1nPyVxu_FLv9I)$B3fCgFyqkh-S`0lHObie4%fLJ9KO*1^UTj};Lg&7E%7 z#pZN$n5J!yTU?D#;cav{NSchb++hJeTMH`?U5=FH7;@>N5DLFHGBHU z7T!WiL&f<8rqXz9-rM&gfRqV+HA}H5xLA*}?>Tt1x#^-nIXhAUqY$lg8oN*ic2?Fa zC-vS!zIonaSKD=Iu#?#b5&`F5U2;n&#B8P#Mv)5(`<&W) z2-L%Sx3^IoC`wUQV=o7fXxDtcVqHR3)6K9iM|l_MS=CJu4iziE7{rzFWS97eXezG*vC5oH+9LZ-p% zU zP>m}P>eR*=NzbG$)^53=ThIFWV+Gn$YbKv`2)$($2aGbsn2QWLaLhJ#H)!-5A8*Jy zrNPAqGSk)%-h3G-qS13Xj<7)yU&#$D6y3NOQ*^IepuidGa^*6x1dwd=Uszf|D^ss ze;=q}7yY;66Ria}FU~|=E-_la{rcN)u0XY$+h!D8g*uEHC;kE(!CJG2!()qDa48Zv zp++Z$Q6t1*yQ6)Qtu?#Dei3kK8ReP0&utkA#lxN$z9ROs3sbPbv?gyO`}amu#9ZrJ za({atRMgva{%+q)L6sUTw77%_w)m_L@LgPbgqzUitC%;fMR>tv2k48;GllI!^Gjmw z`yuIyeq3;A?V#yFWt;AQBELT@?fR6f!q9=u@he8Cx!TskWxb7!d!hGM73d>ihupLR zH0Gnv`Alij!(xVqgm6=r>~g|wtZWN*eA&j@B>CvqRb_Q-b@@&@vzS3+Q)(K@M7O%h zpK>9(60J3|x|)?<5lcxg3w=e{`H*)s?Z3HZ=67uuJW7AOJ>J`pa#9`o8Rq~dxZ>?= zldP2;NsNhC`MKq^&k{WWeVT*A=R=q}RKvt@d|I^uyykc(>+Xb8Y}C|O5f(nI=&6p0 zy;przhTV?uOA^Z4=kt>5IQfhrSHIP)=djs>1V_crr%{XTna-;Aj zAWqwHW6Ll%Z_GIN)AeFxzzmX>Qw@T*Q%3;=0!oz_%$*Z%snY!u&wS;iPGeJt$}s31 zRoZRxba%fVBEZ*OR_9 zM!eY6*L`7Acx03~3ur8_OAHxxh~IzDybHzrxd|ptm5`8;{(hp$fo5D~hHw`wxU@-; znX=T$VgAoN9LxQM!Qd;h?McR#jew!*TS9+QHh+z5PDb@ z+!=Ud@w^*tC~XPXGYZzydrgR02d*-+i}rdpbj7Q6aBpXMbp?y7D`UTu#N`dUB=5@H zWbP^OjGF0M42Bh?BwZ$iu#sCkpE=(RIWgo5$S~Z$610s#zn{5FVpMlyLtmY6tj!gd zabm>s`uP>PmhD+MRh^X!6Hxl;c~q=5yO#jXzzT0KtQ;` zQU;*@{@6FUgupAyl%QdvH2d|)yaV^S8b6@wSmCbOQ`m{Z!k$RjHljQ@!RsA^!E{VP{!LE~516Alvvm$>^UE2aD=YIrOu zDJ7-p$#Z}40pV-Bp#B4;qkn;NCDo6R|I-Nh|2B-iv|qJUORvlWO_6J6Q;k(TXq^I} zQgQLodi8<)uE#|sdMhC@0oV-vOPHATynci#XIk5cR_7-YFJRv=gUSxi*@ z3^PL7pmO6p`Z8{oY`%Bt4tAO#QCOmB=W)+6^{jqXWPA`85vzWFVWx=9u@(Rl1cs+r zP1h?b*xJ%iyw}$snwe3OkVt@oGM8~)3JdPu1TOm`#tU`L)zt|B$i3WBDl`Q^{Da}4 zAP{RD6DKbxCwE?FMQfP{3I=QB!8nJK*3MU>4)JRu4J{B$PtJ60YaN$_ZQ5e?UUAGH z?A$bH=Qf*R@tsq6UfX~x;c982!S=59bT)9PkQ zo*m^iuW(>9iyldBre|hO<}kfJ?OS7n`hb4h^AjsjmUKRqGqKEZu~uAOnLgr*)7x<5 zr@pfnbiBF*0*a}-S!GRK%Y!u0$~c4h@)|_QH%0tS_Zxvyn{mnR`E!w%9J6cZ*^$71 z*G}rEho8d;W7&OTbNz~KjiowDagHvu2d83EpojtjJ8mA0dx?4xA>d@6%1K0kmjgO;d$uS^TLKRs4{8s zMt_TGLU(mvL;|pVxhc%m+S9YUuCFqb1%XJIb3t%zPa>3R7Eu8Z1hz=kb7sU0cd{^y zLbt$&9Ia~3_Ck44k_CW`6~I72Kwii7W1u(u@&a8}j$ww~0Gjt{jrch2H`^h=18uY& zcjeNh1L_O7#<}YoTXA=eN0)k!MAT7JL{XCUdjh9l;o+$s9P70h`g6KGRv+u^1CpjE z`A8Bjb43gqxVcGre~$L+L2s*K&2mT?^6S&^IEUnU20!pLH0UC=#?^~sy#;U>iR6e% znwHunCYt?RF6I7g0@?+s0Y6Enr?%5sAS@BJK`#t=%|i83(& zt&jjy2Vx64xGxiTJ*VWl+z#Se6mp9f_Hq8GWM3=lH#Rl~31~XtvUk^T9S-2}Jv*2^ zTUlLu7F+Z>qXX?$WwH4l4CH+joZGd(PfScqYLH{--D)y%AEcP$Hj?k=zRUAV{R|lw;tRlsGnCut#id>A>I2|3IfihIASzKl$q0jc;2c3#rdpdte z%$N4FnJ6v3Le&_M?qXKbR$rhyD-FcM(^_6Glow}bCuj&nRNHU3kjd>EJ|YjYSel3> z%p(HqYGqopTIdzrV!UA^Cntkt9>of2HoV-$DqhsF*1E~{_aHx?J-1niWsa8spCRV> zY)5^T+cJj|`Rx`Om>|re=P27pH*;VDQX-$jUq@Xh<|WHjejTgs$%4$BywS4RB{q#$ zdZ;80Q}5Ao>mn9};7qyOT&)X}L3c<9w!}bPj{Eij3+Gg>%bLRv+QQ;9Km_yr@E9iQ>7Z@J_jb%$^cl{eTAu%{- zSkHcYJO9Wy06+5k_wOUwTtM;)^K^yIRLKK%niwA$lAN#I3N|cAuLx1s&8|e2S~qfU z=cDb{>V)-n3f0a-@;36>PpOlG0I$+dEJS(lJxwHId=tZZ*5s48d4<=HX7PR95PLr3 zNCiZ=h*%e0*$5GAVsNTk_MO44KKKppV`1Mm_E6)fsRod)exwcXSed>)ZSC38rLQ}? z79pWnLGXc%rDl)I#OWQ!*rO}?m$*E(rTQDduGsL|0w;ol*~YO?_qy zN=Ta8x#bY{+=_&3D%dlvpSQcqJUnHGger*Vd4glS}fsYEd5xWc1TaRn_rfNZqM~Vt^qg zjsNqG7m-@bME_h&Hz}YE1a+OG;^Kf>`G+7x^2Se}*aO5WfO}%S6xJ~?IOzSHf^%K+ zl5`v9#3+#dEqKF4l949kOaG-0x25;{sp=#f8CXsh+Jt zdd8O@!cu^V=v=P`oxBtCxmW%Ntv?tQnvo#M@T3N_j+zW2eSLBe96r zEEWC=v1_NdWI2A|1r)4<(9xHG`RlQ6Z6CByu5szQh_M^SPUndw&(&639C_Za*Fd*?s9z#79y_xg5Y~t)H~cqX2$b*_f6iS8ze3Tt@7;L-B%b zTiwL~RufJs@_{~D$bCD$I;N|OODac^#CK!v%%ByEe5Msu`SS+={tTrE)F;OPz&CWd zd;hR}{C&C-r1Tu1a6P1pS0i>5X$-d*tx#`naI3fPL#uj!X=or70z*o9af`JoJ%EyU zm)lbu(iyk$8vPUEQg~3<+L61EDDVFs$2*AdBZkL(? zn9P)EYIk>=Ia$c~{4{8TZ4)V?yTy8iIIR!4^tc2{7KOKZdHMMqWxhx^T;;&Y?Ylgx)Bu>6&~&hsfd@}19u16Ow-JR@*%kf5|8}{DCjm>uc1Kkuuj-^fJk1G z4U(0ge?(2Zo2=QJRS!A1y1Rpl9Q29BM zw$glVZcdn@w9|ZlZ;uiBv>FK8OF!uA7dOb=-*=%nJ~_$3&i>+`ztv%{_Yn6hc`%ED zC^l6(<43 zt{6_L`w6bUSZVE6bB>GD7+X|!$HXc*IXS7TsWC$TWPcYtlVysP+6f4agRgeWEt9`~ z&qJe_~3uCQ)6J*w%+MHPkWAL-w$-Pr7-4ms}xrQbrSxyuuvsLqZp3ao$3+e0WF`C|s z=o3U1ORjm?<#fxsSfl7k<;{zh(V#|3)O}E zH2%3iewiSMQj_)O5YsrhBlLrP$`j+z23S&4tcID%dWYq>Dx}#_$Wg0jHi6u$AUt8? zaCIj=U8Q_xe;ZfEwq$vQDnVJ<`>}s-iBnAnvES=l4ysMDOX- zrwKezjoI9Uq@=SGHdQhX-I&_xb}=>1 z%*e;&QkOacdKw$PC>7dbH2#UKSY#U%;kR;bymh?PfLQn2pZ#M5HAP zx-{%L4UUXN1O+K;YTm6D-rMaVQ-NWAocilX_a}k1l|03L4}cVMUosvs$@0pcA3GU{92hkr5P0e;}k8dGC;{f=OdNBSgGOUL{rK zC?du*B?^-P8H}e09mvOTPd520q9|rLIA~l8g`k^WrE;}_5%AW#A9>1oIYb){ZG|4s zu+t#sKOcY`4O&^<2Q*4IS-z)YOr&rn!2wO$n9npHJK0j)9764nswOAu=+MxLcu7J| zo2KgJw%hzn39e5qf7Ux~wR!;Ym!{5aVJ|?_gVui(TuZc+TMB$0vI+|7yx|1UhkatC z@^}2hdOeVpsZB*wuC9M>aA+te4^Mt_MZeVdG~X86=9Y9jpUrmzrO;_xeA-atuXJ%2 z;(KuZj;gJ#4Fdxs`vz2AQ6cN>TqXVH>gdtE3u*HW&p*I3nJUueieuLHL@wR5-dLWuWFJ z(3(8xh7{FnIgY~dJl!tWZ**nVtvRKmyeIR=wbcw?97#bT9?*IF7*EFFb5_FuLqJF5 z^cVTyjc_suY zZJF%FEuXd{FfnVO5dL9g1jN_#RodKU8_feS9;VL=LV_Payk|kE4w`8O{Kk1OVh7`_>uf9 z`+e7sQ|y+$O;5GV-qoT~Q!^+;;L_FM`IG&GrEW+cuXPJQ|7UPG1HDCqn_~Y!T!i@u zhqK#=qRdmRs=Ax5XYXCkG=*H7mZ}>MiV{|(B60%#T^bGs2>+S6OtN0YL#*MutQu9O z2+fcJOj<)OBb`qq4K-pl<@iMS_#|LA8Hw|drk~PpRD!+AUVmo6@6vW?OAnxOt8VBh|AMohDghylM|YixfppYo)>oc3?z0zg+BAX|{S zlM_hR>m(=E-~USqYv2IS-b(5P_ow~*jdd`%AEa!nx3Co}sQ}KhwoX3T!N;ZfpB*Y) z2EUkZ<>yCr58sVmL*zWK)LP}qO5VO!)0}p7l=V46roI>#g~8z+Ye!$(#}wK|kW*J@ zh<<)42n3=!E@(4fGs#Ajb8k^T?|AHrm1ej0shnx&$yIvyK{^K^28v{=U@6XFZ(2#Zbi4z;!$$+Cbw z?hKQoXg@@+Z#dK~Ts_+?oS#j=A&ow}?by&L4(hFPV?$ex!=(!ifiA)(A!oJPa);R} zf!0Bqod>QVx!yaBG9;Z>I)qMsC>{$`^U!`C`nXG zNlAr(yVbcbasJ~`i)`;q0q>E-Zs;9|P5y7Ac%H`>KR>MJ&;S1NeJ$^QbfQ`0*oROc zQrraoh*@;>{talO3uyQ4KS81j3lYV-eE-RbDn1t1;(;Y4fzE?_5|oJk=k|Qxg1Y%y zq+;SL#M+6))ZXuXI{6QU+wjkY8m&SeoF8{8=y4*Dq;(hWzgClQEAO5PyYMwsiTb8u zE_v<@;Y?qYR&POyh4J-LQ%l9N_)|C=Qx5A@H{P=VIP_sZypYA?f2pm12KF|PD;<^ zF6(L>d+(65bduo4PW>pCvsEn;ZQ4>6K|)O71EIJv7=1e1h8%C;C-IrigS8-4xK5bt z`Gt(DS*XckM-BVzu%FNhXntH7(bUNoOQ=(7nB_X{*^1;GJf)aI;+(oyEx`&kXT}fL z?IQkq@QG35q@{z3mS=4!*My>0Sgad8u=>>hy}Eh{5Y$Te+jt;12t8Lm{*I!1WGwci z;^b@>P%fD+qx3`_N%y)&6k*Gk_C<%aaY*YXrvF?RDUV)FbjKDDXdT;MJ^u`(km>14 z`imZmbM48=bSK1s=V$l#2g1phZU-O0|3mDoq}DxOYgcPM+u*Q5h9TqBV9m9=56yJNkd;HgqsAA}B> zsdL{N^a_bI)~Dxya1%nC_|q%>-QMa++P3Xz4?h2TOl5_ zUq{v$|M9qGn#UW3??*grSH&AYnPYA+wEWQkwWhvXxhRfnA0D!K2gb^Uh=>#>B&7DQ z$m4uj&V72hKsz;u2;f~g;fE0Wu3QQ6(6kk$)_}S1dY@sLwhgA%SkvgT`YY^O_pSa4 z>7DpYhGgnHLQE_B;z!vQWO`dzMSVSO@_{1FHicwVq&lubyI#$z}#o)zltLFI<3>#mWkhFkP*KEX%~2K4zD^9{a`F1CeX#fAGf zx1Um2g!NE4u{*s1qEfyy zn7cS>@)xgJc5__I`56jSP?6MS6fhAjU#nfn3Hl*Y|H2 z8+^OxbiSu;O=d_Ohx|lG(RPW|jj)gH#pCQ%)=Gt5tib#Yvxt*;<=s!e8D`bqUaYMS zCOoHxwRn5?-7TYnwfcPM!MoRA2f%XzqA~Qxm|M=F?zXE z5%q3AZh<~p`r1#7C&?+yFzfQM|E4jUsC(2;_OY+03+sczu0Q|#OCNXo zXOkNZ)vpld`puvj5>@#c&`AGS5m;$w59kU}HgEk}xB7GQugvCC77 zN8Z;hoxhj6OlK62jb7%189B(DR*hwO=UG^UmaPZK+Z+g1_69J<}E*a52_>It-uA8l|Bd#52nKYB* zQ+4h7P0zoSqW;l#<;<&c8XP1Hk#r|WYwbjRUmoE188McK+qgyijiTY3sr}j~9g(3K z3vlo^Czx7ztkQS;uE@Rvi*LaMeSU1JBrEG^W+oX_d$-XitJE>&$@Zj~XIzV>8prCL7YK1vD*|oC+WOi$k>-8tEu;~ytUW;b(U6z)YGBR^vWcZPWXxBcr zFYxWPV%=AwVpBbFa3CmlwYFxF8^FU^-Q4VEUq+F&=WGAY3cb#mngdT{N8XMf64W&7 zi|A9tt-V%3$A1?G8)w8*Z}^8AsUBy{Ape2%=)voY2|cV0w&^)8r)R0natTiK-(c~vH%Q)8 zpP{f>xmwi|yFJXIFFDqD|P+s&UsvJ}zZ0j&jBTs{69yd6B z>)YLr85+Y*St?6%Ec-6chH>b3*Nn2ySVfr_sKqW|iGI?>+onVPOxLir8xefcLPm{A zB;?_Px0jPy6G;hlOKw7k7uyt*`qGm?AwKOcs)GtUFj98hpcQ+uc6kvU{8syN=Zk-+ zTK_rPvuNPTW%vACT|?_>*!#cYV6u!Xg=DysD$Fi?5<61Y!o=d8=_4qd<-2os_-`K!V#N1vm;moH1LHH$7r_|99v{rBP3050UNk|$!oA$gO< z^d)1^mv6pnrM!^Z=_?IK(yF7Dk%}om!H6kf{0>4_zNXO#yHIs=KY8cqE517vioz|- zMr}l`**$HoHgg7x?(T!DVJ&MkKdQBqw8Ptn3;(1w)|XA1VrIJG|(*TAIzSI~ToAPYnAqaoWsH|6cbaSA}yIK$b>sl?13W0iR-FBn@_;CqJ2i z_vxyKiB2m~ny+8;ThM;%`9a>f*#XvRzbIHohcs?LUHzs-Obq~=y(Y61D<$6K(3+W{ zW_)sPy4Ua+#$oe2d)L9<$Iab+it_55oOtw1a>pmeb_=gT>4}NSIcC4dbHM~_YXh$1 zPEKBxc4A3EYse)QrvyAs3NLJ0cT zP~K_sLl9=j&_(=rIq<4O!kPS}`B@duquO^FMYL~JF79ejDG30W{3>I?S$yRjP|L%#)?Xpyy zKYr{YBve!0mlKAQD^E<%G+j}({?s45&JLR!mk4RrspG_xVR`m!adSvcXuBtZ616v5 z>2o6}P>;NrzH7!Ojaa(WQh)c+CXbPBC1ysdcPlk@(z^flQ`O!>8iCscfuYu0scR70 zyIn|VXFg;CzCAT?v61VyOt-=Q+=-gr$50Hdf!zQEdwX?*ij1Z@0^8@7Rv*A|shx9V zg$diYXu~=nmNM{_wiBHWG?bQ?ad)@E2co?TiJ6|~AV;TPE}YXQUV^%o9ANpaicQfKD)YVnM?zP0<}W=|=Fi$&=QU<*)u{?!|~H4fPlQxToFO zF6>=yrZKRZLVn`z58ll*aubx(NB;4{#r_}_k2P< z3b|vX=hhz+;KGfq2vzz0bI2gQFX6J7Sf4IKR6Z=nr7~f;$F_TU1fkFZisS_7w>@v5 zNgbWG3nCFIlCt(%XTPjy`s8N+{TXg`u_jtlscDVd4y1FH?J$EnL-nAPnP>4Heii*pax!#1yK^gkJdGGcxyl+$JS z#{$jgsBb7|s{f zwOabGUI50pH*67fY>Hr@C^N~)$3@AVR}c};6kC?0VSa~iVUwqlDp4dmZM7Pv?mJX{GIUL6Ftv(-3KSd7G&s5Bozo)>_(|0kQ{g zX)v*|dGG6Qve+*D{fwidqd=2>r+KTKybgke)w%0pmo+_6Lci`sgPoY-yLWxPd2QDo zVykfT14+BaS2^@O#Fk7flxoM*((2W^19CHmS5cRbf$vQm)j_z7?`@sw$)W}}O=&=X z4Q4Bik3VXR4d~3fnJoOaTk`P1idcG1$=PjPV#}ZJD7=2;GpECLEC26r3;Zv>5Fn<$ zus@HYlMg>T^5BM^M~rk65G|2jpkr$GQ(1NNCfqCU?4CwY#EA5Flp7kl)&K=8LjLV| z4r6`2#AGqwmWRgoKv#hr78*OST&m=6aL-c@VUQqqMpAvaq>H8+(9qt5o15#_aG={X zYIzC4^jyAR$-|72enY32`awo!^GNo#<^ER-K0#Cgm=|0H`}kx_5Mxqb;_=bf_vrgCg=QEFCWjd3><`M*z3pG4)FNJ=>Pzu)31y+Eydy8d&WZ z7Z=YqDxV*v*89A&(=PE8hr$GQu`-{T8ylqx0GgcC)RYQIsaLx(^N}5b!^3;)5oW`( z-d9zz^&YZH-vC75F**5f`}OK7_(06`1hc_>XHZmk7#S4R3TdNPe)sOP50tl-0L* zun4rU6fuu4HBVSuUt{20I-^Q_3N;i4?qo6l`A4U*RS61?9m95P*F+!KyXzA&KB{HOGKp;%f9lx*H&sh_AI z_qh1@Uxg=CTNvb;IbM^tZok~xvg5UXp!xdszep+OKlbsWVQ^Je*jW4V$I>cs8o!X4YgbL^`vLJ3_j5LM;+1w2W4hMiG)lVwo6U<$x`>l{tK6h zvWdp5B&d!0Mv?c?M3gAnRxD|zK^f2i68_{dotGf&Kyh%g5oB>tx)oQkmBT|~D1obI za?+*!YfwiZPHEA7#dt+b;oZA;+S>J1ko-I_&z{h$Q!551{wxsNp2jkWpSQeWApdVq zTb7OpiYOw27s_Vfzi};jtS?rB`Ea|ITiHspX_VB957&Xpo)OGD$WZ0W7sr1xuu8tcO46- z42E>UkS1wx4Su(It1oi0N#bWlmwc@a%bi-O+y3$XDA&&A3Ejyi`h1%~L7wMePF-1X zWT1K@sTmy|7UuEZkfa0H$?(a^_0Os9(a1)P#6Q3=)}Qa}c&oE8{EJ53^(=YxNH}=^ zb*(SviQM?cD*rYSq?IR&TOQXL&`exZjw&gqvkDC=my2SRe+Tv?j$T^bwqJ1ANA>*n zXeXb#e%|LJcHK5SG}w}ok^n<*?l;+~lLZc>c;EUsY2si!I&UCFdv^!FXju@?EGqJz zVK27(zK>sc#ag!G{3_vtoo#sXI)}i<#Dn_MAXXR>Ys;kF`KoyPGY74mBt8UCEyLa|k zn!G(eUg;Mb`b8IDJ_|WdaMV=~8~XU%;BH!P?F=!^!psZ^2VMVIS?SMlTlu`abk?GI zkUU}yZ&@w!=>->;eouhdX`LTHJozI_Fml;T} zFSqsw;@D+-ChZ50sFpX-I63||0h7x}x@e{}2%b)>ao+IL>|UIB-Sn<27SpMNE$i5a1J zUHEFJTd!3}j=wG~yxQk_{D5|$*^fGkN&J0q$+Cs4e2VHgacVIY2L}u(y5i_yQZf1Y z#xXYbAzLnppC5Tj@|+@qI%+ZX>pzW>5BS{jEbY{*0l=_1b2tv z?(QMD2MF%&?he5N1ef6MuEB#l3GVLhPT;HOmG7Lr|D7H^k}>F}s=I2fHRrtVYc4LI zIFS<;nVV{?KYvIW->X?{p;nMNJdWn`4qaTt+uJJRv(s@E6I0a9+^-Mb8ymX_04V&Y zMpV__p$utiaG0AF*{$xO;{t#VmGcd=y0(+EzU^Y!*`C=?m(sJ9mhSx1IDIsZj&|_* zAV^q%h_u@C$x+P6TS*B#NPaRZQ!|cG|GNCXmpaChO zbM5=H&2SoYe_+FUHys)s9dQLZsp#;f535RZ%}mN#S^-#cb4%L13PfNGJjcmNl<#xg zR>$e-knq)<8t|d2RJy$S&82j~#p~#MrXUg$@UgrSD_OpKj>~jZO+H52iizn1HMdmA z<)vd#HkkN$y}rOyRaKRhl{h2(XTq4XBsQ$+VYel8$Kv21>2e>NDc@~UOXKXf_}k}p zviG5oLoH_tkQy8HWcOT?Z2S$vK-+BIAT#i^gC(3O&KC5&C+0M#&g6CWT3-5U^Vn{~ znu=1u=UPX}-OR+q)Z@EVP&}EZpIg)V^Cu=&$K3R^y{)bI_T=8My_w zkO7%ZPoq;-z)(pE0TuIKaCW{Kx;}iCRj>;WGCp{KC$e9I8#8Wogo2GhadbeeBT)6Y z#Q}0Wyp1FJetHU$Ms`fyT6MXy2&2{23ND*D?%Z@F7mRc7^CXO_<0KmLP&&ks_W#rQ3d8u_~- z;o!)R^ifR>M5iC!-K4|A%)(3f8Vt$Tyj+(5U6)Cc zHSUVYIjhIuMmV@EK@){A>u)pB)01$?9jBW-hpOiKyw}rP0~cNw_qXcj=6{dw7X%tw z+R2$23e@1z{M2vX-oFpIx~0Yk7h@oYjPf;XednAJX2gA9-TyjE&^sYskC3P4&3p9U ztNK?q4qPKG=J)Rb9zMQ-{(e7u+JCR7pF`0_$EtB){`=TP_}IASPiShoyRHrWpYM?9 zPf#)!`JV%Qy*ht4>-C?NIpJgvCxGvBnu9hapSGtO8>P7aeLZ_phc zkx+t%Clv~JA2E)H*H~L?IKlKA`&lrPkMVqkcc-{DI2e4%P+V$`r{jex+FAsxrYh9Waks1`aM75s7XN(;Tc<)V^u&(T?OeM3cbbm8o5iy(YAIvjW{@XyXnU_x$m+rVFp zU}J;9VaC?$G}`OJ0|r)~h`_MgHtL@o5bzP)MTmqXTZHN5((N4pwM z;e1#k)ko-XwLtP)He#Yomac$`$hF^)Rpq;Y?2t9Cb>7TkZ^r3I)?BG)Vo&0f6wDp5jS691k-iT;?P%E!JLmtIww!}rNsB=6D{6jy8Oi*q3W zi^j%mRW;KW9zu3_40Hb~^gT;-lqij5OpSIQbTj`Pw%^Ucq@4V~QBxX%)Yg zp~B20*)F(m&O0D=X>)NLJCnBZt;uzMs!$9brHSunS~;d#W6UCU|L)fY+{?Kqr5*)V zXGGJx;R0$)&Uzvmda5IYQ8g_sEktG4%g^`cmX?;j_9FitfT8IB zE?1zxvbbWZ{1X{{pyuat&5y+&_dh#a8eK-OS0EFA{Id4OQ>|C%V~_TqaU1-Vj-KXk z?(FQPK#=FbM0yzc?K<6r#VlREYWai87iziBnJk;%Tje3c%;bkSb40)Ea_=vmDSW(WYadQ&Mri~E|0Ix z;@`ngS4PHwTWLL7G`(c|PYC*Y8F+nrOTG#SVCFgBR|cz=NKR|(ygcQXW*@cg)QqS8 zeU(qsR%&|E;>s&`1GK;WD|T@Tc5!xmSs(znmpDe@b3;XD0$?v&zBBVPG7x?0vQGY+ z)-SMiG>C*kmCV$>KiP^IN$Xk`|Bd!WJ$OtYZit^ku}$_8LF`EQ%;&8gRl?;y!0?@aXS6@~^nT>GcX%S3_WXYEs<`<$|KCrZuiJ*QU$b!F z!dC)gwI{jEv~OxCMX(8a^s%_1fb`zmt{2 zFsOOCqwl?5BvL_2KQF&b&v$(XsfF)UTM>g8U`B1M< zP!cJX^(PWa^(*vIf>s+Y$)zVrvU{%&&*!_B6gLYbB#Fw5EZUa7DZO_VtGnIPF_dn9 zQUTO>t!Sz8T^tI*{qFe4YG`a72PREpCBX7Xm$56yI0pLMqw--pKeST3#OWYh3w6~ylpXf_{$&nZg01Ku(%64mAW1Eid0H3 zkhf~VD;`=?3kvG`n4jmDdJ~THjQY>IoG|@7OlsKrEN&D0Kdxm0uuTlVM4IrbJTw^PT4P=9i4ysW_OL1ABMv+T(J&$e=BKCsX@0YWs*)v(!PwROXN_6A zdfs?<55^-#|G@{g)&mCc?t$moJMLu;#UkGVj~w~Ceen2K3zjXsCz48x(A$Xft*F;T zkmB%wi8G>FC`Z#YIr}kOr@J1u62!*9bbMh7bPR1^-!2!T{;in1=EWL+OEx|A8w0CU z$^myScoED}8t=+Sz*HhxAJubdH7^Yrs9DFxieKU`Jn2elzLF{XWq01ht>EmK(>;O; zW*D`+pNuQ8XI*$~V$?J*JRZuZGX>><@Sze;eG$n8NC(2?RwSXW8T&D%b%{o-LdRBrs$IBfC0df%EX5N zD1R#@=av9~$Z0E}X z?Kk(y2PDx01=9ElRDvulgbxX_zqXl6YW|x)+FaNyv70%BC?1P`Keo0JteAOFVZj~i z#Yqy5@_yT^Ig&{${64mQip&99-q0DDa%NoY=oLqKe&OmG77R!F$eA>}hw9*ap7Dqy z&_8@GxrJh$@V3G-BBNeaSl(Qki3}WF2xt_Ao&XB|UKaAJiOwnV=5Bt^L!%}k< zzuy0>i<-trZ^NA3 zWN5FL?WmZA$cda_)5mG*(N#C-PCu4V<({tKlDKKxemS6#{i4!l+8;4wh}EdAt_lfU z(JwDqbW|&}UOI&q&wl6n0w-Io%PW1bHw_hsO`WA=SaB)Z5%^Lko`d&v!+W!mAUG9BPP5yvf6RH`C(D zx_+E;(mu}|-QLmZ$^|6U>dPqV;S*)WG~eJ8l1D>QPrMi@FB`ZSxt^SQ>Tc8Z=+atI z1cv-QS5y_ge$kmG{nQtj!#cX{;xOrD54E;gJxRGOpX5QbZB5g^;E0MC)1NJyezA9f9j_9+tgNpxnVib0 zZyVwmO$q63=p(|4Ca1h(NM^YAyJPUbp>cT$rZyg=eBsg8Xc>u(1!Fi^U$tXmM<=)Y ziGpe*s2?Qd<^q3W6EP1rADy;~z_PT0ToNK+aS{zI%E(x1Hns}E-|FYKe_t+ach(NR z9?$RYK`TCA{VoQd=#)Q6SZL)V8w#-(o10E*g7Z?_>2V)g{C|CE2?#2sB? zNjBMLa%2XqxHWSLPyivetP&=@^?{eBSR>Z!g%q6)n?8we@Me&9n9ax1v(f<<~b+Of`%^(fM&+iM(HEm?20dJ{Li%3q1JW-S;bvy%iaC$XL z%t#qjK-1ZphmIVDhsMfE<&!u5-UmMx?&6W30_ACEe8USjl@@?-AoFT>g1Ul>tS!|CWObY3y zrz_}}XGsYcx1f~9R$M$qCDi(v*p0H5<4wDt+bo zk}LmyA0z^zet`pcDK>YPmwFEZ9B#W%oWJzLWq15 zQGjHE9<*b8AhimK5iHkrv7=JAPz6x>ic@Yvb`ldlRNiy_{3~}LwPEECM5$uHmCpSo?zDk^z)yQ7bAQ(c+5NCk-R!u>j8Jh#msn?Ag1N$OaGNEWuTBHe ztgh0_LW>cITEvcK2!{yx+eEWd01j@6iY#tpnb>UD33RA7XvEY%9xi`U!ST7PufJv9 zko&c>tS{3XYmgX+!FgUao(kdk4h}=IY_55d-#Zm*xdqG~mbx#TXZsC4s;Ys(3QURx zJ8X7-aL$R5QWZl0*!oh7kLDB8Ctlzbq^~M~1X2)i1G4nEBF9e;P0NSA9h8QvD|w?M z;76#OgJ+)ol9rjJgOxO3~ZG6f#sfR&Y2KA^w#hd@N;W~D<1bVR?#B{t>dRpbw@^!5&2T@l%@zo#!b z+$}uZ?LXg)b>FK<>|86UH&4yXG-RqO+a7@UsIHoHy)B8$a97(BGThn-EiIk$E8wQ% zxxmHMWnb;PU-o}lfN=t`n#<<5vA0Kam*Yja#gss+EO8f6!{#+z5) z^$IyeY*~9d*Z@$wm?7d9G%_A~|Gt*pTov}6ijNNf$WrjVy5$#l3K_+RDIU>FSX*~} z1#&FRi!IFG0d(I<+S&BlJtkLI$2B}0ezHn@GmgT9_%$r|BjxAK7JXmmmSLsaggpgd zF%p@~?SeJ$@&QlgxNT-fY&bYZau`{*dYOGxOe7vNS&x713%oR8Ef=B^%-wI!^zD*H zqrBJf##}wFBO$k=sy(`w{x>f*)_#RdcZ-H6c1ln5?SYL}%lQ3?fv#MHuxZN0v z>@7y{Fbvq(;sRhDBJGipNCN?G1Tgf1R#QK!B|2?ArPzXi;rhYwuyM=er98n-hl#@- z+zpGh!z8H*;-fr*yu1QtP~dbV0~mLn&-X&kh{G@o*cWO0$M2hI7V(A#_c%PX%3HL{ zs-8JBCrlFHe@Zf!`4I}+#1izO_&d`|Cs?O@)8V(7_JvQ8bh3U!b!;>L;XxSAJsp2m z?AS?X2SRJyUs50eeyB(A8~sgYBUn0w56c|IZv|sPd&kkKWhHi&k~?VwO?idwErp=y zZD&0g!kEj>G=!Awzgn)>=(;m@gmr5j6a*0}G|#&%VI}A^7B^gbBA?3r+dJwKQ> zMigNJ46f6q>BMg#^WW)%7zaTwx>G2pJKN?;^+Le*F*$<|!myuXe>WYORFwe-Z(d8f(ktV7rol*#L~Ce_4KRgtX>R2ORgm-I(+?0j)ZNCs82_co zbpK&5z(`wR=kGcNo|vpSl~v+;Gjil~I_jE!Sxnl42n*g?kk{lRr#s8d7s~f#OOH4{ zp|lYx9oiFKN(%*T47dO|jWCe;p+354TED`ekP(-+F?f_$$Km4n)4q&qNI1Q;CAjF;wfJPH!RDlkiV*(h|>MGZM1(dtd$-KE`UsT? zUxut4u*cxXv7%!i9?j&^W2^WpA31&_9#6 zHCIO&)lxjObo*QX6523*mMO>(d22YaM|b3u_ty+QP}gW9IP}kC?~PDm&77?N5lt>> z$M+WlAxD2g*q~tn_P7+Dnq_hUsj`_woCH+Tlh(}X>P-5y*2bhh^Gqqas#9Fk5(lri z!U7r*iHwK3aI11=k~pOp9&%lMTY@w-XW`nbdv{V<)4mAv7m2hAc*@P%EUqIAMpZD+ zF>=CZlhu~zD6AjRDlb{RllXQ!KMj7_8&yhn87=%Jyb1C|AYgoxEE5{oLg6QW@)ADM z@;2!=jZzbAX)~>WLz|!J27Bj4^~fh&hc=syz=a*<`TH`#&DiVE_`%nySp~Iq?F@fx zq~F=)Z7p%TyAU6h)i0DwKU!^X(R~#K9gDuV3v$@7f`8>K$lFIEHcc6Su`Amu{z$ z{Lw$O*R0GxoEuer#q~z5^Un&N5gr5uukXw(F}xcE)pWI&Ua(yxn_#r2ywy$jeR8S3 zVaEVVH`sGRZ?YVg+MKvS1Aa|FSt*`JvYc@OEkY?76PXHuxx_F+%xG!N{ z%kF5u+Kdg>drnZ82O;>{%syaYGQeK<@>B|MkMLQH^?juRlW$Si(y1pVs`PEo52Up@ ztf#i+HKyYS6|LZC2R{BXY)tHf_)wU7WLfwg0E1B}Q52}YG5Hu6{4#)^g9d)>_I!0_ zc30q@QwJOC#{#}u+Nawh?U?jM#ODRqQhk#`^K&@Q8YELXj;!*z*}aP)+!N9&-$20;Y$l(}UVc1x6Je-IvbC7hEtw@nks zNO`o{A-ENXNVpr!)UgQceQ#@_?rchkonKA{3f3P5$Q79yeq!rRtqf}%-M#vfUyt?G z=~EYXS~69gPGe?D((vQc6MOyH$0;c%yL^hDw?gU2TT)1uj~nua1fnzu%xc&QT7n!8 z!q9*Xei`z&uf^cfn7NO&c8-lyAP!%Qty%F(nd$znc-i_}!sR>S9epjs@r3Sqg})-o z;3`VTY?@PIc<9QsH)5v6c3UYpWc}O4dpwM}4A|I=EW}da-t{1 z-oBd9)&3yZak30=8h#$gl2?C(BlkyQ#;D+aqNcb#rCSdJI6>T*TH|^n)~X#nj^ zBu`ed?C9)uZ`&IO7?ZP4U-SU5#7ao`ARUehE_(#ahXBjS$5$Jv$w|q_Mbk=jGH6te z8(6ed62s}y9~*f{J_C6b#wSMLrPlB!d7ZtITM|r*!ck#_MJ*BMlES(1%&C&~uS;{MUcJ<+%E^=# z#YX9@wRx48>l+G-Qz~i1(MdP;v6WKVj`tFq)m1FL&IJf#6|U~e?ms5s{4k3frtsL; z0D}e-z(!ti%O)lRhUj0-#^IJ7-01c9^2F&4zJcYnciq(MQ{9jHUw^&3{h)a6zK|)f ziH^GgJ~I>lWuR!RJWqyr;P|wBJ}>Jr3c2HE2xOt%JFGdJF0njRT08d%@Q8PAX@B!n zGua{OhI#XAx0xYhKL*Pq08s_K+Op`f6AD$rMNOAE(zsK|=csny^j7!ftn2R|^#q-B zTMzg8za4#@oYlpPx8^~S#CAkM6;qIa(a5YCwmYl(FpVu5`F8&>w7oVG;L!MaxY7bc zqyBr{!*VMVps`Wl>{Uw{J<(%ekXrYkE#%JtEr6WhwX`~^5hq+**@p9oh!9v@eertv z#yH)tLwlDqoo|aA#Gnjn_FFebqhPuL<|1&q4@pL{X9N``euu!2#@$OkkzujiO4Oe#KMt!TW5Y^5W zngK=cI4m@^i=kctM)BGo#!o%Q=ocDU?}uPMet|~xVL3}Q9qM2}p7M%5Mbz8vlIWaO zig&1gXt!MbD9^S%CPpCG5^2~^U~d8hRDJVM@Jx^ASd`G`qAAqMAw>mxrmVo2_0I== z??v=_Hf!D5v6qjd3TAIi*mU6+*-k-U-f`fFD^(OmPKp>K&&SH}9u6GS;Ub2|IvDNT ztBkO5cZ?hhJ@2J5zC7+0SC~0L)ZijIkx`|qtjZlXmz7h<6Wf+t9Eh)b{1DRG-uX0Y ztz_>BB@!HdU8nYDS{NPOsq;y1y*X=9SkcS7|M@kUm5$A~SyUwc2Ap4iR=4X$wb6Dx z;**x}QAD}Iz*U@p0wrPGQ+qz7*XZa0@eVBST7E?auMm9*yMs`PWeOVA5v>9~S9%L>LiCzRCQ#%ufPZZii($h;;$m1#9d0sv_6i~8#l@tv!M0B-hBe)U0lbZsi{TL z_7Y@?s%eQfhip|x2D+ZgdC<0|mrK~K-w^SDz9A2Fgrvb?RZyYW`+lnZVYg%VN-zcb zPqi#u#vj1ow~Y#(BU!ckWi!;rmatFyk{J6Bvz&B;Bc(6}PZ%;BQ@ zIyCOAt_Tngn)*?(QLzQz+X(!c)p+jL?k16WGgoqRC_zS%JgLhpJRgt!7kJdYBxAbr zbG}PY^viN+U-ueiIQmu;c5ZbOWE=r&9wm25uZfdpMUhLcLTtsEorHFJT~JW}1W`jP z--c5m5)ud~Sh%|CaJA71d@?jy=QeCqH2!JhwtPGfie+-Dt_IyA!J3^u;&x}|{u%VB zkjTeoxmO%*#9+NLtU#Wq2#W~`WDZYMV^%nZ7S9u<+h_T&k-xPMLQJSX$%{?sKLpn*atG5z0PxPyj`j-4u?|ku!1b zr&AL#vpI;5%;o2Yb$#Odpuq+UDtH3#gn&PZIK6&6rOa(NBX4HeSegTs zRLaQNoOz23JMrrET2BeRsyL+61v&1+4*D1kSUjp%c_pQrL=I&jbk)p+Wo&X_7FwTVo8 z*Fdtp-Gx#qgV+E~nXj0dGKm{(pJ+KMi_#~`3f#;S8=}~i&^1&)>GdWwEF~bU`xjW` zQ2kJv>e+KxZuMTDam6o_);b*NV90B7y?47~K_ik)3?>oO*%VQR0R%jhB1&42Y;UH! zs}&iWcB=hB$*$BgHx7hQp@h6Af_f$;35e%So4!~}kR#KBY2jNQ(acB@x@ z{n0}sE2ZUCC$E_-Q$Y>y%1wN7T__U(%6*{oRWc0kmmM)uW(|S|8}hc)VZBM{rv!Gm zh&p<99naN-CU3!l{=47VRa;x;&IaqjUIdYiHw(+0612lcl@pHlOdfmL_dgp}_!v5n z0h9iSP^)-t|KDOSF`gHS%&wJ!5irrfuT3X*8SOY;!;REkhn9WO$a$}uw@*qki62jW zx;~y5RrzdN(z4-tdR-%WNBg=vQ;NfbB_&{x%b2b?_laU7V=Qq38t2j*Nr@j940d}w z%E7C3fr)eOmLrjjPIH&F(=?Um&?2IWsuBftr39tf&GO?Pp%s|TKYg3?#6uiw|D*Xl zQSW4^8qJmnicPytq+l*k6aou`9x2-(bKlB4D>CyRs5XYFW=Ff#)=xC8*N@S#h5wjS z(-#uRuS)69bz=b?ydeL}fptn~1q;AHBCfM;YHuOGhr2NoOMZ1|AKDa27u2Q}BJV$} zW@QJS+LTeQuJ(S?dN5V0?=0g{CP+a5U0z8NtT8`#bC8DkBGd&5l3gz&ZdUJtMnk}) zToB6<5f&_2;nBXfQY|LYL#bIrT-=n`)0suwB4Z9Q519(Kw?pcOIt?K z9#t5+l2#>)SyPJ$uaI+g-e58>5br2k__v^IYg;QmINHsB%X8a)adTkN*}`ErrjnL` zz3fDVt1qX29elLmBjU-3d%lB&6-`WT5^~}(8;}DVTLsLbiki9ORm3!TjkYMv)aOC5 zj)iCC*ViD9$=PysK|w(|d3oVdk@eaKpZ8Z2l^?{nJmVpL8JVAg8vD>2PKqYD%E&l7 zeuxO?zv_iE9)HbD7!3)JS~{J6dcnw$q;Q|j zxB%5Sw3gN>Sm17Tyxi)Dc$WkQU_fWBMl?a%^sim}(dR zaIo6mcy`hE%qDTkGIc7)ld)^q^l9BqBW_1?vo$33HDazS_JIO!X?oV_o)kRVr@pmI zGO-nG{rrgMEmc#ofbbY@L;#n;H0Wdw?$LDlHFF zDH)etve8-ao5n^C$CB2Km<2xiDoZP-=RLIuE^jR;3g*R9}wA2ejH ztie`WUX0D#Qy2)=RfI5DvWP}n>-Dwa+`7g`QVTU;NxjvB4cG2zvXpSs&ZBv61lDmB zkk~*~byKE4lP3rafUDFsITPS;@9C*48*@7Vx7G*>awIfIU!8|p7jMC#ujMBK(mi&W zRvG$>owxT446s3ihD=QLkN_`yJPo{kC4Dt5GZmx6A2gF=#u6*@I-Viwcwj@|6E8>Q zKq8rZpYdQiZCK%~z{(K-co3RxAeGtYFWY`UIWUC$Rk=`?LcI!>%zs%Ftak>&t>{j7 zJ|PseC@>SZyiC!5)6Z$Zo%H|q=X;;=yj;R*bDbH##U(7$8=#he;kZD&s$i_AX$gLw zyY*4_>3By@bw}ddlUC|8N2jEwx(6`P(dNU$MI0l{=d_N(_TTkmYHi*cnSkwT`jf2b zBUD%(7SU@6N_S&wLy|Wks;A{uMTUS__)lwV8_#1pz@UP*V?o^gc6J6S0V&&To|?#+ zbfYFgq73vCoxhd_H0O(=Ts=qNC+qDSt))y4%X#i5&FEo=g%5(NoQ97O<=+PHE_{z^ zgs{=ozv_0HqBz7cjk5{boYEw)QHybWb&AT?avX*4TKg)}3c5hW*phW?l4M*GZ-m)t zj@J61X$2J-a3*Yw)uk<3R%v>R8(+2!4Idnljh8qaZAmSE@t|6q$oWm6?e1Aa1Ao4s zce;OtN9=;4|K$};U!rdt%p&~l2$2A&u&nRjf`24OJ+JYAW6kxkQ~V-iUr$ZB%^TMS z6#l_AyQ{LEfTx3_VRGAvfQbQXxzYs^gQA zFbrJgagj{+)3Dl5o=m?EDwU`(5B1fSQk4t16}SlN1@XiBH4qatw=Dr+NoH$rY3iRv zeohJP9RM!O7~eQxp}4&2g4#QDbPel|tgNiv&soGT39L^6gJdX5R?c;cSqxhEIR11A ze{pR;!hd1cnl-LF$E77DIiF##)gE=WBI&+|bZt0^XeGLs9I2n`sHv$5*`&^K58ok` zKi$~8$%BX~rYaE|L;}cKnI$z}p6hTGSe_oauApW5+M(ZJ_?W#4sp&{_&L%!p=r(sE zfF2AQ+4tUEKAV`%7B|e_lgUfn4yzd6R&l!?B1==Bcbq&N4P@l|vM%-4nI-I_TU)30 zj=4vlQP@DOn_M{RVdbSAp2MRPv3?4Bc=7dz7F_CP%Ei_%|Jr>H>mfzidgu6 zLwlWw|1Z!U#NP*Ubbr2ogXsF7F9@cTl$G)DpZxh(iyP`cYS=KLPpo;!XE#WP$mdO; zTRy^&`q%Q_#{F;wnJebV62M{Ga(GI%`X6=mX?<+w3SmkQzu{C3Te&H(R@-a>s=34Q zrIzJ|si1_(V+?_81EichUyTc#DC)la55!A;vXlt%zQge-64E6FCL8{2+0FK7a-R<2 z={>euBY6bq?vygW|D%EVYm_T?u4-+OI)TP75Cq2T1Wpm8{pqW|_=|^6Ol>&wXG8u1 zElfM_?bu^w-3yP)$HeaC%FgHsYt}%WNU!Co+tTg~4?^!m`-Z28-O!5!2$*bbwGS_W z%7=1y?bFP1bHQ5n-#*@H?B)u*u|}@C2SIbq$Avw@(u;yG3CUDpx>bP=Kj`EC^ON~d z36mKrEG|;+NP*L;r5*qT?*!eQM5nDN%+|Oy@Qk_`>6q?)AN~RLr6xdT|6jCVW-rPW z@S(UpX~X*+`~z=|W7Epm)8p`QxAuqf3e{0&DXTlE5E5eWYO|(hD#-WxbK|0o#U8X}*It+| zHtSy`z(|cq6}I6m30~W?D+ACMPv`G4z4>Bj(;i34eNH+h){g6u-Seya^*Uj`&iT1) zOV>%|ohbMPjFkeO@&Jnd`yuCERYj2F{5xJ9^3I>%pN#)?C^`EcH3Ew5&4z6X0*J_I z;zoY#s?DtGqyZut5rBy{V^3|def6g3)yoF`%opQiNki4P@ja=Xw?JdA<~-Z6rUQ`9 zWZ(+!qO-F*GWh%g8TVaX`gHCJAe@u9J3yR3EndBcxKshM|t(YhE*Q{NLcnJL-U@6`{}NdR$K+5 zAP2@4uNFSQkSzwU7J>K9WKUp2aN7bg`In6V*jrK29{(PAKHCEwvsFuV#JB1WhKa?E zn6Xd#zfiA_q@1igs>Gdvtq$$p2s=msY@PIRypP8z|fYE%5sFz4bN* zX!M$ZeUMrW%*FNK-@fILo8I=eqq^u%wURE*aM&i2Fq@N(M5`80xj5%``5zS9^Q$w5 zt!czi$F^sf4pX1Wyftk^affB?RI0f0v>iC`U<5xB@lNoTNj|lKf>wOJAA!d$^o@bxg6(9A#&1GMd z%9+Wyn)~a1y@kwcJrr4lc^^_`ae8EXW@3`kNH+=>?RIzgg0IWA_C;Flg&d;ffwsiz zjkAp6c!dI#Ilzt<&`H+s>Ykqdi{bJ1cGnO*ytnguqBQ-9pq{h!BA(jb`>tkn+e6%`x%M}fXxe#;1vB(Kxb;{WJHPu5L2p?w^8~yZl|Io&~|Zof(XN& z)>M1+jvVb&OhWl-7`>SJ?6v*mItpkei?J9kps3?|MEAfcRJzrF=4HA6+n)H^)RI^0 zjS2xa6Br}&j0;=}(ZpmxTmB5486_*ruO$l`^-W%P7^ptK4)WX%y)-(vO}8@XWU|Rj z2@GvNP;9P``OPiqHuL+@6CEuk)A_0&%nGQnUxe>)7daLk23-=EX%_5jpniGT_pY)F zm&l03f8k~dZu&0^;AiV3t-HUF=_|7dB9$pU-^$ayH|&GDGKGl{VXrU5K>|^zW*gU9 z<{EN{UM5c6`+&qR*59vG71VGQnXN;8*CmyfM$pwCdSu8iVl;`1gCgg=2?BCh>FE{H zylx(cL$E<vOf3&bF9~^|1uAGegWYm~>aehGEIY3+8?)i%avT*G`Fttv@nsxx>H7D4qIsYayM&g%%l(>r=O!1nW z+UT>=Whh$04E^6;Bk#9<<;Q%h)f~(rm2yZpD(pSo4O|Fmm6$=^ZtYq4JHW*$>#mL9ZG2p zL>feVokQ&CyyQfTVbQDrsumJSe3K zeAuW7cPpn6cjHut_^0$~s`C&f&^738`%TaFj3`NgQ^W@*N+e*TOD8K#5Cj_8#HunD z;1^A&xl<8+vN90~vtgTmN71+kO7FC8N4wFGi1q-;inE{JL?YuS6gzP?O`8)co}3t> zIi&8MwIXD=WbJaFwWVw8OkegcnxK)L{b@&YgT1=+MAEi1b8OK;LqD7OB&!#h>91S> zB2$ZMM1af@zdX&H?OT-OV>o*D!-Ly%diyfYr3ZP;2uM#ce+ zW_M0?UZO9!iONs_NK>UmFKKqg@xP5FW0OB9vO)$B`J0S>!{Ab6^@{!Cc_1PL@Zi#B zXtODAgf6~vvzzw8@fW3=BsV?idL((whzEx!WZ%a=?Q;MN9^}1ZDpqmz-+v*zv4IHW z`ZY<=$%uI?7l%VzescW7FSMJ8##`(CBIE&@w;^uzc2-=FXmDJ>j($M_to`Nn&#Fd` zN!f{Lx(1UktvlM@M&K2zlafAMjzNQ}CB#u$sj;{!ThpjydJapa!r_(je+$!kCF;!1h)5#- z0$Vym8aMaZz`koH3FgdUw$I5>fVSB-Wlow{8gdn|*=ci^-t09!Bw{HxaR-e= zGCt1m_6ClD=V;%VQ%PwzP~t$CupuUe4+~ zd3Q~HL8a%Xs1WuO&U3-)k7Se1EuYoa3+ZWU)PzC5PG>9$?1}r!)V?LSnxf|uq5*C@ zG&}Jat#ee=wqrB`w*I&yBx!!vdWrJ`X*ijqRxoLa>jm4KSTx4OWM{V##)hGF#4#!h zI!C=!pnrt(^UT{+slMf4s63}DJukB^g!;wi-eG#?HF8aY zGNp6NC@7KU8#e{2HUDb90MUdY>)w+D=}kONy}2V$e2dW_I5N!#yFk9THy}>1P}WAp zs~L7ZEtQhAXWQpc4I4QJb0YUF=}&voF@F+K^`7a3=V365Z5)kjb!xNQ_gF3~ycBQl zd~SzS@6)X{45;?_}A z6x^+%kiT0XdAks&%v;QcXKKA{zyv@(jac8n&teU3@O1L~z_;US^OvSMH4PRGT$Tk0 zu$oB+z11SEDbRmW#tg6Y7Xwo4vV`yxugr5gLMt?es(U3Ip*NgR4je#Xgzg%{kiIxe7r35Q=V z?-9BdfJYG1OZYgsa{bZg%5h$#scsGIs>WX5lp2SVWhw$$Co_-(K93XX%874P2viLI zPF!@KE0ol%_$pgX+*v}HOL=`gB{X~Bb+g>z?sUm>lAvo0@li$32E1FlDf*t;JO2v;U6 z7#s0&M%oR|8yQf@MW}w0$IlX0cXt-edzCrzljs{-`pJVxtdD_(1mF@@wH3hvCi3!* z6zCx7MK_h6)+cP6Es&RpDJ^rf`-CKeY&@f@3z0+1nWRui#h?QX*uaVoEO?+Qsb*$K zv9SRGIB2E*cQyvyiemqBmkn?~8!acNnT$+`kG;L*mi;mm=_}!AJZyNt4%h|!%61oxo9H9&9+?(Xgy+$9j)g1fuBdvJGmcXyx8 zeLwHaGqdLXuEmdDBz<+$y?5=ZI*+O?73c2{zYU4x|Cen43)SrRrqbFWpN(+Bfgq64 zGu3dl{(+jSshW$t!FOOSPJ#Ie;qO?$2|?|gG(F)cyE{~Yw(>0s9!Ye4=$=+!j?9Dt zSPxlbH6*LE{J(+jpWIJh_PnGkI^~?}6mqgPr*pxApqKoDtD~e@q^_8zLEKkS`qW3ZeEnH z8@4R7NR1R}?e8K2pKxnv1<}DIgz%g#BUwv+gs@l7Oc)jxzcC|O)Ubvv$H&uZrO#tN za%bu$#hI3%G1gljT6YiJlre4?RgU zIzBbPh*fO3;d^i-Vl#?3hMqap*pNXxs6y)1(mHk7oKMnp7#Uw%+Hr8`XgX$LRJT8e zCjLHp&DJgAy0w$P8GLl7BV@|k=~F$hMxFAxEW%HmcMXaJ^Ze{;AOUvcVl)ia>*|jn z*jVXP3boy^I|nh~CHlD`sp#VINYGHejl$|?{sj(5T%0GVvCDWj@}5)_TA{>3TvFU{ zcp;GRv?wS7j`B(Tgd|4o!120?4yj&iawvW;opGEO_RJ%PIZ+>3MkaAXzc5*GEWd>K zo-XTP3)vMQhzfWr@S#WC!4+HLSY8qkLjw?}bEdaQkZlha+5`v$xhwIpke)rN&)1T5a_`(EUl zXyW_Nv;Y*1BWr7)$9X|^dG&zG$pcV6Ht3WQcfMcV9Hnz_6#E|1YoDg^R*uqPWoXBf zaPPb`B3=!jZU*elfHcW=TmC!kW#dk{1MfXwTe@#*&$0{a92Uh!o`8_tcJvdBJv6*3 z_TaoYCP2z+oDC%5j=zRudkB)X8w^O ztVx4O4X^WrRzx0VXe*Up$V6UdG-$uHA_7yW#65E+$na2RkkCNBiSC9>4FRV@K~HU1 ztiz2qZbP;Y*Gy3-&@Qaem|j_9L_Y$}DodXISb+M3@*cg&>R3AF)9z|1$;ZI68zm@U zL%y4{IAQRX-nUIezHaR#NRazXHl8)}9uwb+1 zKApGHWI*2fiaz1oJR)V0Nn(~sa%hsn^(g$uHEShOwXtI{{cZ2gMZVP|c0dFixxaf& z4DoqBy1-HLcZq~9p&aeAk;Yiz-EeGq_%b%mvc{CwV1;-2|v$+#ycc`D~004fvbr(D$@|M(?6wgAHEj_ynkJ7cb z^XefKV-h)wd35q|;L`>z3s^kLR~z=BQT%G~ph4&plpONS zeGR6D@N&izWQg2aJl_V+3XAV0b>}Bnn*}YyUS^hgzAGkE33jDl`oln`2YlSrnl(U~ z98y{_a`*v`&dD22PV}|8OKJLv-_Fr0i&ff-tu=5#w2z#Go)x169+|8OtdkO_%EB~w z*Bd)vJ?=f%-c_Uy)SL2#X755~*^kgEtdDIIMJjyH$Ug>rK$au{J_$38wro@@Bm1!$v^y~q%IPusY%0zZybVi z|FGoDQC;GEQyfP^&M<)++M?lZvv(DiOKQ);k~EyOP*ezXMjsy^PEID-+Cq4J&l<0+ zawRV$$iRf~qM}?JA0uEw&@z*W$n^ESABdT7aS1sveG`#yY@&jP2@hED@hcp$K}J7Z z*%|Uf=C!nt(n!wF)Ef0@GF#uBt%H4*R)WVJFFD`6ddPaWX>A!)-zqx5Ccy$GzJG2V zoK&~<$x@P|HY=s>QZ(79s7gflbR#eohL6pGzB2RebGmOLZ~Z!+^a6>fXA5|}ZZ);Vjd$l~Rz5fYAKXx+ zR1}*R^*%J94zs;MQe;o0=xr;7^ve5|vU}?{6ZUzbl9=#wTjjNaGb49aGI4|E8vVVW z;*2z>Gf*EVPg?(y)lp_eW|tE^GY&yeRlRSxlvL1Z50Rc5i1{Jj=DK&?3EdR~DNL9RJ|;!Pir3dH^m(PHFGtqEfLfO?7;w zqrljF^h++djxyI)T*+ta6ZeTTvv9Or&WEuF8mQy>oywNr#o;gO$1*QVeo0y{R8tiS zA1;LO+DNRuc^~G-BdB3O-qD)D>G&Q{J{T-X)mHqjr|#~mf1^=XzbgFKYgmvsO2Mbi z-Q4c*ClnbdvNAuWla7jwAV@Op-+&Y?Z{X-iD)bh>Mdnl4>sMl-Ph3<1)(lEscC(P1 zX|@!q<(VDu>_sa#3{JU<_bswoY4>7UDk8NV)462h^6=uVs&);TkvefCqVcnpDp;Ez zV#BhVU9kDT180>ptk|hY01l0!su-+Sugceqf*9D{Hb%2i6r&V>Oa<$*!?PV0Ta9}q zgJIOrV|6^VWc799!Y_7*F`*%8v_>3{!%d}u&c`OZ7|;yJx)OG1e)g#%zZ7p~x2f;8 zJBN*|sIE|fH4z635eaO7cy|^Xeo0L!5|y^d)5sBA)bFoVbBl>plvLjSnkGOJyS@mH zf(E-xAONvNf1u2arGh3<7^&yqd2*#OKc!%5#-&O0Q&=F2e~t>^V#Zqble#B%!f@E| zSfSwldt$v{QG&mgxXcv+sY0mX+>qyusdMFen z#2y{M8$uhA>8G7FHTO6NlrELLvwS;&LV{`SCZ9GIJ#xTp8Lw#RjKD=FWZbhf4|-N%%e(;#ts+SDsc^I>|7W8W5r4R1rVhZ^O$6v{e?Z?glOS)Vob*CeAhoq{ zmzI=>w=|c&zPVIPMZ_A}r(4JNaba&pNK4t)#6YgdFIgO+YExYNVIsoVqs*}{AyL)p z>6__-T}W@#SGu*jNY$4sy`kdME@BdQ{9h6IQ+HmdS3z%SqV9i8=#x{ItmjFp7HdQ` zUdMf4aSR!Z!3O(^PAg22UXe+8G#Xnw3uM1ck>?_yU8#F5&!Djz(Zuyb;f$T98JsPz-!&SNM(~`K%W82O&;eA}U*X}zD>R>h&T?ByobSWDo=zFd6O;WeFOJ(e zUk*u;U;s);Uuwo7A*;|GYkCcZf_M!=wbLNeg}Yk|h_$!`{%0xT?;K^35qsty%6kS+ z&k=Vax``+;90GZiVTc%Jm3Q)$%_!S--)2S(2hWUeqLM=&(dtKMb@^Bj!=@%O|FSG&CE-bNgfwfyO(kMe~TCC_lk4=71BoZ9_ zaeBLeTMB!lnoCyd`+%$#UU>K}zL=Ywl#$&J&RW4k3bE&NpHKe1m-A?oV+$F1g!axg zwsleiNVKjer7~!ytKn01YS@~Zs~$gELkn>fR1}}o^*g3kQ$?kP6|GL?RwbykTtBDq zk(z!H1|8oIHDXa02cdB=MSZfgr8ZcZL`vgxFW`LJzCP9^-pGKiMWNSi3h3=}J;A|= z;Hj^lu%3!Fp8ZVWq)hZBE1ucp_7hf$Jz0kN>#`l-6MEfr<;!Yj(o@&k3vx|ay{rg*+!ECf4dJJX`%Y80#t6@6ISA&Vv zjD8zPsDTVUikGu(j6NHKxlMb5ZN(KDmjF=fsrS?0Md;~R5h_>t<%1wF$2}@2rEp*@ zY{_rd3t~M0okjgfB0N|ZBuW}uD<2m_u(`~MnoTbBeBASdHMpshMK$$H5Q76T$&pHD z*D*FR2zghLHEa%NTR$_qjI_l%vElRv!Oo$=LFT&9^{dy6MPntKq7K z=JO_eMrCzOc$>A#(oKuxmYIeCzND{6JE6>XI?b2>7y>OiZFjFjr?ho*n*Gklofa^v zp`U-UQkn8dJ;|&(6Odid(dua4B}8~S`s&~6YSAz@d3M&K1dPq~B(|QKh_N?i$DUMt zb$OyIS%HPvdwwxC7VVbSaCZO6PR4mi1uUtbHXezKw$Gy&sGMt5m7F1be@c3L##o_@ zdXpK?+%H4MTr^|n4EK{qnR7+{b-9V&tqqoyiYtYRl9zchwmS_rCsJf~wy79S+`{2f8opfN_Q#FVKtO+h9srYZuAy&tbyw*9e z0$qmF0xkJri@V=RKlUz|l)hem^N1>3MCzSM;BR9`L64R`VHQw06Jyf)7_@4Nahh(g zThTH`yQi-I5?Tk@$+@r%0q|dM8R3U{$_Z&5S?K3dBLF`KanVvl6{E5oe$+pG3iD<% z@b(GYM$&Qc3yPa%g#;pal#dwu&hy|f;V(8hHCx;Q@%=`$bzT!ABasm|-T%yP-y!ZU zqx&CocoJ}=_CDq-prWF>7j|>47e2INxVUc>5wabeKixlThH$ltnyOmN{HiFrEepO?>^LzLVwGt^$+i*h1nSZsMi)L*>?f`RvMKCig|M zpQcuCaObva@!Mf4lcU?nCm*FzEaEGB+Wp}Txxi=5h4ShPlQzze;`@q5LY5x!XN`)+ zE1m@-8|)uCoep1w+s^3Pv>Xtky1~m}^dLx(C)pC8=qaM6YSQbyMzvC@NdF$ywGYq) z!pXRQ(iWH8x*83hraan~D?{z0>*_)=$L-b;F&k&8(Q>Z05_l6qBI0D#2?R&LaUimv z*Vb4q=j`tLh5~fmBG~xZ1+*AcrIU?tFu_gEE@`QM)R}wq6N6Wb4(I(4l`B-f21}BR z{usxlC{7z{pRIy{|JuQejek(o#xY!=@iBg2=YppA#~-<0GxM4!iqB&9H#=1mpKdRS zySqU*%whN>&6upM(%_^*z@!i(hVShWed>8!7>`joalxr4&w3g;HTCr5VM(VDHw6t1 zJ>A$Vaj^Rzg=_Z;kJ;a;ny*g{+ClZ+-Y?PQX;p~F3JL}~I?KqRMx#AKX*^spK|MFF zfy+&Pv}X(tY#UZkydSbXQPI#24h|ywGyll&nV1x4uJ%M8EThlN1S8^z*4B#FJ}=d% z%JO&Gt^awU?)3Z_n@Q|>K@FY>b(^s`3TwaMTKMdZZZSVgN3(yB z#$-QOO{sH8!#R7~W>kN-G8)HjR76pdLpjvAU&RT7zlXBx$sl68VzIJV@!($Dn?KqT zTITkrv=@+G97?W#tk}Q!5M}WB(Yq2Ny)~!P(KY18n;pD%IF#eaGy8R29@ZrrV=KiW z4vhV5DAh5vqaE7PI_=D-lF;kp4pz?BCZAYe^^k+)Kf5;K5&e}PvbsBnSilA}%L_l! zj_L1qCz2gq*8_=V%sLfV=K59z=ecs(_xCT_}DU(_8IDc?vB~{Dnxj+c|`#I0`*s(65A8XPpjs@kqMO_u=p{|V2mQEJKI-`+0Eqs>T0vP0)~&m ztFL%m#`$BNc(;Yc^XqwVz#S){md=dClT#0wO_ACDn$nk=Z@i>~d;rk77FR_34sDrH z6S?`xJSZOtFG_`xm0-$A@fmIc6+(h@x*60J0un;82VB*|=c7d*YeY1qxx_{=oS5AHTr(`5@hah@ zaavFF$I_zyG1njTX$gueHv{EvxTY`L%$k|*441G0;eM+hs^~i4)771JcjMX9DsAP! zduUvIxP>-AQu%1wwA0bS{>^D1xl5QQ+4Lm(A=f6swcT#@AXI{ z<7GRe+m>N?$vAD$Dx>vmux{d1$Ve20$IB5>2Bs~g>Jl^8RJ^0>4<2JmpLf79Zt}eU zCM-3AwJQ2gB>Rv-k4Yw7Ig}T!gYPxqC~2Np4)W|QlUP1N7}&ut+K?+FX)Z-~VLow| zUAEiyy*N_4gJ8The&dnZM`dC2e4o*g>B?+|2d4AD;Ip3?d^s?|C+@CvrJ?iRaC?$m z*qjGe^Exk}#3qiZK3_e(j*725LTQDAqq=f+Y3+h8Hz_X{fCJWqwK<@MMd?{e6tLs8F{XY&^jn*o;c5TQ+5%MD*+ZKZyHgNQiu zt+nDipqVP;xIPxOYEe!|g@L@x7Rp8yyC|b(^E)m3+czc1*{2uOT?%lG`?#Z3@&$F z^h>7bk*Q&SiB3+dzq6~XY2|2ZtIzMm1Kz{#mZoY4wWY14Kku3vq4^uNu$f0@)mA0g z^xp^GwdEeUvkmZ}0xxdzcf?K1hriOY>*reZ*DndQF{r+!xE+(leQva2F2WbLo2sOj z$0;U?i&s0fEFI`9C!7B&^u)c^;LAAZcRz2oEJl&$%9L@mp$|A|tPm3MN;+wb?p*W{ z>wZe9c^M7)(++iRl86%{D- z8vznBrTp?K;xSfMcI>#ZN-OPqwP#c7jV+@@1QeUxq{>EM+ZXx!mZ}H%X~s?OPl1<0 z*fduRrJ3|+6*jla9^Z*ST#SaaMJY2s3Uhd(Y4O`9R9V5YfZeEA`nG#0J;%hs&sKcTA_p&4w57z9VHD^oJ@4CCHID0P zdo9xMQ!SctITyS@7zf+7Jb=lZf7msBEayo9$!40otNV3uoa4-TmIp!zpEMlPw0>-O zCl6c3lgxnnN6iVzqf!`8It3+Ugs{Q^SbP}^D{N{!m6v0kAYS$T1K+x!$@ zy}7@={r=Ho^5%SBWhn9PF76Sj8U=+ztyVomv}UDJrF$iHdMUa5z<(wZnb3Em{*;I&0vL6Tgo_TjSs!w0lp?10_&DZiH zAnM~&^&bCoKwv~Zn5y^y7`t3kSRaQc-#Cc83tcCZl8%X?#OEBCt5Q;x3ZI_JJ~?5& z^2h&Wh|-t_u{Kws2X2oLMJj>({Ona(%o+huRJOePvQ8&Vo)zy`N4e$^PQ_7Whr#vP zdyPCj=_*rD1GNDDy{e8$OeSA4ON|{jyTo7B$H}gULg>171^~d63BUb*BI!D}>uhT5 z3zG?*rcK7>;Ts-GA9u#q>Zc9;HxR^Mh_%!t09JIB`u52W_))9l*^JTP1Vl}gjYwW) zofm1!uGQFEC^QZM4ZqsL{1bxLg5gfc^QbB&4ntu1)T~pg|9I5Vf>xQqjzYDYCljwX z-va02K)?Jq<|4!A97M!U;w};YoyCjWxxg`X@RkF^QnHAiuj}=1hpFB{!#>!{U(9tC;0M+hCqf@z)ly zMO8iUJq#ja`3GAh=!}F5@XJwz`E3avV^EW?%;NikIXbnnR-9t$+s0;tF6n99Dk=!= zSB}4dQu1(g87H|2I|IyL!zxN?Tx@3OVjjvo9?4lHf5#)7`TjAHbSLU4aZ>CU8r`t6 z9+xV0?WpoI`L+U+pjR4vYvJ(Z@HwUr*|!6LM-SWVB9#pAf{2Y*(|X>WGR5K#5h(vE zt8eWD>Z+%CiVGMNE^207`ZM)OMXg_QO}>blQi@zG4ppu)4Rb~QI3`1vqn@u?zwhO< z0cEm4C@=>?%$jh9!9ILIYDnorO~m_Ntmv$2cIZnc=U@T0L580W51?IMKOrB|v0?f} zbgIUVwJf-goBbz`7X?=5@vi@!>r%y<`inW%@_RmdMK9K?x%u92ER+I;xj0Ki>*$Rs;cjH+lOyLI0xA8ES--w5am9J0DUpO;v1(TSyj; zUoDwCFiu+pO*?pxL3L7}Qh^#8f=SbOSNFA-5DwqP4q`9t=Y9q62 zBZ-?iWiFlC4KME;k^f9kut>0IIT2R0`1mLtw?6$~8drHCi+WqM_(iuXD){*P0pmK; zWpR~O#T?8$UUe&k-P!RyyxhKdg5eY{GSw-!Dz^P9fBF$b?OfoYx8a{=NW-uqG?yX>x2lkq?g4UUzCU&GsBRajSh3MQVY<^%-4h4l!D zx`>IJ`MsehlWc4`eJt<&xX19=Ybls(Y3NOce9EmW=)rB^6YE*Q;)a?@omVacZ0xco z$Ftvc;h2{+>P#;;N%RpPxpZzxzOtL?sfh&MwlvY?Ng3dBl2#|1cKW+6w-A|`AGz#Q z&n~l5+}r@aZ4aueTVLvXD{j~wyGqnal>O>+2Ep&ks-U+xq|JJ5Wn*R&HHd#MVl+B8 zpksEuD~K8)3j-Gxpn1u&{rIT?lt6`^oZ+QJ9!!?Urok4sI7JLYFWarpPP(oNF@ptB zcr2xHD-FR??n{hW`Oj{=VXGunLyY5d%&Y5cH5#P)uvDB)#CTxiTE&2eOzvJgg3feXM?q< ze6mwG&dw=btzTB`5Vo@a^A#CsJi@hcmU8>I)fxkA$Kt$W)WGJ7q~pARk;UDm^O5D~ zSP9W3g_`Sp5v`ap7~HXzg+Fn&Lm(wNcv{7H=!`3INPu^e{RD&P)581Br^X=i{ax45#hl$X zG~P6-V$CocN?qTeaCuI{;^)uuCe+V!giZM=S+s(v6A3t=W*_Cqpm4tQV0 z+H|d2f+27t!s%XtXlTW>d;}_fHhI)_>dutn_%AJNF==6NkU$w7K4bLqYi{nAo?VrC%k+0m@wZO; zA0~S$f1%KG(aAcW(2h$Zx;H8WWi~aI7Iy6A?tWr7LamJJ9JQVaw#JOaD;C%d^H~l! zIPq?y>XWap|%|+ODgdj9~XEe9_}OPK_6m>I~5MNrpD!dKIhOM?2G1a zmCO|t^0tMpdo+#{nt;Hk&KYUQ9mHO!T4i!og)igft5a4L^VAebT7MX^+`lQ{j)B0v zcIaHcP{qIvwaa}TK?ssXt|=k3YJQ2^mr4{ShyZC5zDx$v+Hc(4rVCg8QF+x$inT4y zm-LtlIDRc}pEwWqWKRzM>5mB#GbpLgi($Ho*@!2(b(8xF4H|uZ}RN7 zgn-U!#|CI~Xl@S1sivj^>6^Psafv~+x%vj*GiBk4BP&}txo&>cg|q~OhJJH8<5}fq zu*^?&1CgVr?l!7a#)Y%d_zfft)R!dFf--3dy|uP^;LOzvvem{dwV!;1ZJw<6e!=+Z zxf7s)9UbAx514JC;uq>RoZkN}x1{2AruGi3t2jP5PEqEAV(6 zU}1iop8?;-KcH`mjw6NBLc&HsSCg4h^!b}hUhj)@%B^>$Xwp#iw)}QJGRlOpm_1;8 zy0*q$VdDF49fgDMx&YL5kbsgZ>J%r9wetIDzvwN%@Hj0+R)G8W4he(I`IHU2p zrR$1#sJ_x6P>^0&6WSlxUwmF6(`!pVubyTR{&ZAxhJW-w=vz=Rv2&NS!VB6t!pJJo z+cU)$kXSQ>AMTf*A5?`zqFrETHR`;a3=bjy#$AxviknvL&=`DDa>oGFgP2yQf`3~r zQAdLrsomF@YYw<@=v_Q5b0r&(4Slj>Pz3kc8(0~Bai00R0x=oPXbP{o7G0KK)hd#G zgzv!uH+J5dP;IR68_M0^;ab$|ISH_4QHn`-+t6w7#S<&)Nm}2f(ON7uhPOJZ9*YBG zOSqCMK`aL7pP$~2NY1h8?F~U%-$^hw>tF*{)7cczBkOxh zCDnLUCE50Lc-1TvF#EX>v^bzRt!wG7!D#!?ng^yEPl;od;FCj*LdReM>TC7i`so;B5oLU-JY~vD z7)mm$)$b?kH>R^lER2# z(O9bKBv#&zB^*Hh=vYYorAm#9aQ~QG`3f!NJ+ArCP;pQo{4Fjc^FhY1Mwi)Fx{x*# zJpajKiMo&{(qqqg6d@wZoVG08sc!cub?dVBV-RT*pP;BJN*pJcRC!gYatf z?!sV~ApEIqkq!XhEO?>j=K5bSF&<^Tg9bo|!ne!w7c{`CUff#4uOOLxcXLSaF%W1! zee1wgnO=~BTBFAlC|s^_$uspy_5TBj>2D4D3nfQx=z_xt(C*63KRnc!UR_?i=@G^7 z%h_V-6N!{s8g;!%iUT2+VPCtIrg2XZ>gBcLoZv44Z*+pHZgMGUnZ zQk{QuzdGs8z;h!h4^}2jMgXN52W8;GV32PA@`1D1iQ_$LLcEkqBy5 zz{mSGXZOzs-qq(#yB9(D94_QO1v}U2j6S*KdM{dQg{swPMzV7`*w6lkP z$TX79U0$i#zOn=J_KBcl^Rb+mOlD=oXEKr4C}JgMhOa330MCEpWveSN9dz|o{m)IE z=aU+CXYGjqAJ@Vu#Cvaz1AIgI3RaH8X(S-MzOf{~k-DugMwApRR)J_&b{!U?H8X5D zl(Lza$Bw?7%G%c8k&5d%<6lVX&Q+VGTU zA$ohYiE?zbNS!sNC-UV<3yR>3PFy~vyNT^?!E``OE~s#^7!jrKO)p;CfI|`OgnWf1 zCa9;o6i%SITmWl21+kh_PykjC^4DQRVC_dmPwo46AEikDqHnU1bDWDd*Y|cFb+9k6 zD0bg!oo@O{(S|LJ^fJg4mYiTqaA&Lh_WIsWTr{ss0fm#P<$vvsrZ;`Wxab zEqb3Ds+O)hWhohhOhEUt>Kg~MKP;gKtBaz;hk#Rh#LiXr1d2^}rN)S;BTde-u2^;F z#c!~`rqff^hQ8z;Tji^JW))Y5B`A&mX&Xa+no1jpo0_2%BpeWv#oiC;z#8~UZHJ1v zzWnYZS7-#$+cFKKx@v$&j29wnbhv_#u{JhZ*u(^LG_{1?!Q4!wA2#L}A;_1_^}Wi? zkCaj!K>$--y>c-z{gssfPo`{)xjD}Jqi{7maNop#`Ly#eSSqa0*c58hZO$4rRB~12 z_%e0!lDyvhQqm8BL9wyh5fQ){DU*D6scqrV|4yVKEx@q_gA4Gan7?n10=xzlLsnr!$~yp5FgWl?$wWHn;ytOXvwbOE zMX(SdpXRsTGyipZJtpuCGO&^q5C9NPG=DF(NAwk3O~AbI?eYi&;BgBNQk20m-@()+ zKyW7>Sy}8<=i&61Nkcd}TSUZ>hyhtbi1x{3RgRpD8ohv8sz70ofpb?_xlS$vskGJ_ zpI0M(N(3v`hPbN{TQMOYtyRfAar)U9PmLAz#UcI5h6+M9bD%v~7mJID*U&@`q>xI3 zc~!R(H>+)Cz1OI4YjD+|dB68`)^HzS}KWb>>-4wyG3 zew*Mso}kG4CiLm7Gd(Yn)R0GeU>e{5a#88QNf@kTOsh}x*W$BVL{&3Hl%O_7l%zp- z5so+QC*5TMcm(MsdqkT zENNEn0i>gI<4yW4?=J7F*EOQz@!k|=sik&0+vLmI%y$g5wO60M+f}!l&qbV zHNPWd`G5^sp@AHGI{;LN8ZmDT4;CxQ`-9@9Zyi2~%kjSPysK%=$;!?xLXxTr!MCNd zms6kgTP2kGhs;~MeLl`La^FuF=hI3ZSzGIt9I~JrkA?w2bDA_d01y!8fDF8%v7P|P zhLmE@|IIdG6oR9&^`<&nm_QlxivU;I8!xz@@3BG2MUrox#mZ^~Op$|u%LeG#g@+1G z1)BnA)f4$v#{o{7-C7~T+v~eh@6i!NzjWSq`dkeNHF1DA=5`7utqAHMmBoQ`><86( zT#4vY(iq70s3TR>Z-vRk^W*a0zLnwOTV+&)URMfi&0z<noIJ!y>MJQ>1b+Auk%M$w`Q~PR7ijHM@R>F2Fe`jgw ztil7sPe$KBV?J6}7It3SS;s?$tN2X!iH^mU-QCCWHChZ?A25 zN+sX=#)z(N|1?&b`s|*7kESCdm`x6g$9ML3`*PM0l=b4IKZUDTn&GX0li({{b~OY9 z2p$kf>+gX9aFFnXm8+QbZt?!*);5C45%HeP&yiiecc(Ylp7~$87^0A{vUaVkcpOX> z;8)`_h$UVu$1Ct}S3M#fd+7u8x-h6Cr6EYzJpcGpFQR#sy?_}!P z4Va@J)V=xQ1N!B&Ul{|Ty!~U?R`x9l%0zgygRT!?G5k{0*1r@kpPcbE<>WITs|HA^zzU%O+APtrx85EQ8NYXnt&uupFyI%<2_cNV%C_H^y^Uao@ z!z7omo`C?MO$Jg=OF%eUHX;YBsBIEovRr59JG{j~YaSJ|R3wFiTSQA(Wp-?2S3{q7 zK^tdG`tM>W%XDnocd;nwm$wX8w+t{|@k5CkER`!$b$S?R&y|LQAsHaUG%bM$X0-tA z?9Z2vHn16(&=x7*>^8R%-$4iFqfc8uHun*4D61V@Vxd`LJQz2Sp*wQ6?6L{uEb-=+KBY!RS z_zxc+RSn{vg{ZyWGLTlOCX2HjSoM}=Zywc*d`DR*cBZqc?m*fcz9ZSHL%=fWQ$C=) zvka%7jGb1D-J%_%-t5H@JF`r2PgbZpJ{1R~f1|Zk8rByFxDs(529JfrDY8qfzJ~Pg zydRHH+hBwPn8h)hLD~^a1sPykcif15Fm7M5+wOiN#SgY3JjE#rY)S*AK(>mxkyrf- z5OjdXUule!x75pTUrj53ULNfMt4D4)3NEOxm^j={Q30@mf@QXehCK@T2lICoMYmaV zN<1WH4QCnoWj~$xtb&VqgZE$}&HR0Mo4pj}HR$1DewSDtLB_?g936PsB(4Ipr&Nl| zd66RMN^B5bLB)6A)3gmIVNk|Fj;KFm7wdTc-J7Nt#gm1v&4{fH<~Yr0**3Uk&GSIY z_aD57&??hCdtySClXLl&mh2D9&pL!dV+--xOceV?C`T*X&cdBqR8Lgu}M>8~PakH3lz9(DVK3f->q*E~HNw3^3Oq4%RER3D;OQ!hNR+TL($x>*_( z(+z68GFmx;!j|5<0;!2ZlzXMn1>_d+wPs|&UeUq?Q}TX3ryH`^>=Y|XhP`%jyVNs( zWta2j>+-LEAbfKB#;+#w20#9^ZIjn!yW9Ue3rl^gV?X#TlLE2Q48`*wi~-Jd6vb1+86q7?5j@GMJt~l!Np8e=(naN z%2ka!DnCBwL0j>tZh+7n(i(P$4I)$f zTKOgD_ZOgK8&9KtXK!`hCL$&i$z6l=m#lKjXw9a_c_BhXyn1Ya`WLp+!bQ0z{Ldlx z|8v*|X6GKX-qze-FAY`I-IITu_iYt=!K>bvSLaos#cVSkA0O}ZZyHLx*6>9CA6AP# zJ!{38M$zA}nXw_QB50%F)Xjh2EO6ig_3Z2{AUr%cFwn%((&KgF-|GqEBktwT+W!uV zzGIi;z%HP`D0rLpaf_0Ogrr-W?x6|gKerVK-pflIIRyn88rqE``Cl#!inkT{%K>gW zv$^u=A^Xm58q1C2KfoCH4=~2DK@i|dH(6)7e06@lo>yJ>_d`jERIjrC@t>1nxTa>< zd1B(?)Kpd9=Bk6cyv#d0dB(v0%bW!>r!Ts+!8dCt3z_LvYTRfpFn263F3~YG?ai){ zh1%^Lm_-Ouyq%2|-#=w|QFG$Ji?|#4Dk39uo-dR2P{i?{+pY$0`v%dpW%wQV^O!@I z_9?1Ad)zoED9Af-G?lZ-deg-d75+b$^mAcFWR;PT0k`DQ#c$E_?|UCtm9^mBH~wS3O8J%$3?wqgbd6h=m_2`UvU zC#0k-yLQZ(GyC%Key08BFVac|AKxLHFj+x9A6@sT&4(Am{8&>B$}H};*WW^#pU8la zR*%rM3!B%UALCwre`PjgW?CZ`;V!{$e1NsUPaER**F0G~{h`ebd>}`;<)&dMEb8oi zkPsC)NgofgT#Ao8Pv#-MU_=(q1|>LP4HucJ9!xn)-akCVCnep=mOni`S=t)?i#WP{ zgt1dA`(jRW%d7Zv_Jhw0P2XyT>k!&o>pyK>~^!q4M}J@!~0$(ZbP?*;Sft(V-0kZ&M72RDB}t$yg= zsu-7nnarEc%l$4He-~jeSFXb^AaK_omB(en`R`~;Ta81%#tWA;to&xyjPuw;kf!i| zF0nc~>!!%cq^GIdzc$13C(0@4&zNLSOq^O?GH13jEh~J3cxdoRERJSyXy~W~V`gS% zdwVh8 z@LY?KsF)cjRNm<#9~`Xf^;9k{B!}aD{w;h|TRZp7wn3cq%*mn6(qHpdRa<+l-r57S zD=k#~#K_JZD|wH~|M~m+y~6%~jKB{o<>qMCdG}QV0K*`+&FrG@g=W);VPgV+S#}E+ z3GdTOx>{yoRMuj{>b<9EenDs;-03DM-O=-UaeY0jpAI!Ob!BCxyE^s1(~O4>G?`{% zxprdx3l-T~qTXl6bLWS16&_|Y#i?xerk-)o{}_nuG8nt5V7CuRC2Cxqif{h;aCQ3q zYXi74XirUQ%QUU6MLf|V{xv9OKL3r-{;xDGmxsm2&7QiL7++^+MpH9x4~u2-`Nt_L z0=vl=^rvVLC1EQG{&D~9BFYNkpDz~3hj?a6dd(TDo}l>jHRn)_9oF{lekLpL-U<%N zJGAtn)g+6AeCvh!^8|VwOJmCWK}sv_GdWPDqz5YiK(6*#nc^Q4{2~WVfm06jB7Q~= zXgNivxn7IpTm4QPk+=7_;aAfSvSJ6q8(IJh(wOPO0-v_*` z8v@N{{OTLH6WZ2FQ#e<`78O;oIQ0zU^OSzA*5@v%bClI*5=IDTQ&1oa6ThH^;j%m2 zo-Atym2bMtIQnmZ6(7|amjp~XZvZ@_Y4PV{@)xb9nsr}=lGi_ELjOG1du_8xk5u@$P-D zk~}DeiwzDTUS9N|2dm*}x0&TdhDvl^?vi7B+%&qv0)m<^p8!FvHq!b)cE^*2#YL$^ zrh+(Ku#&RP11D8RTW8BEPskyWn_R8{m|Hkz))^CW_;lT3(2FRjFFnjFw{zT@mX6L)Z0MX9N>wK zjs40@)9mmLa58tWkd>vSle=R-R6zuwJNcO1&KO?@*sZh^H6r*)O@Y+$xXBlBnXMQ=@kT5S(C z5=gN1%GvdX$4!mFS>vBS+}eVAAn{vhKz%foyuqEUYnr-ixCI=F;3LGriTwThj@N*0 z;&;WA(%CXz)uCW)Z6z_cdvc57*HDwHosNp%BW9>yoe%WMG(dEE2S;R$R#9G_$#kj@ zX@T&c=`XDHVGl8u_<9xVwWzvUUP|f~-{_U}%s~gYB(z^KI@2;~jcY>QYQ)#o3QLu) zz1V*0Rva^j;QMngCGGzk*yq|{NFb(&nIHQ=KVzjk;qP0Xh8ZeoYi&I|FhGplmK{w0 z&kN=f)X~W(Eu~4IqQD`Ej*UIo-*3=Lu_G^Y(|Gy^l|KNaVQT&(3aixSwK}du@n((;N zU6{%dsMSzN$iQH-{2-<2*Cb*9iaI2@TAQQN8nTl+6<<~LR*nO971G>n|6K_(KuZWx z#Zx=8wv3}IC$S#P%)?Hb1rBIUTB5#)U!rjAGaX&}L}c&CA514ejcjRH;ju#gpK}qJ zAlVL5c6IHI{fz3mY*Ysi4`7gG`rK+?ssC>W0y$Os@<;_VBk}%5pe6CUvI94-H3p5O zPzW~uI?IWt=>ZkiI{;5IQG9UVjaMZs5=cm{IfK)lW3}OMJ-dIsRZrC08z9)d+NYyE z9s5Yccyr`#r2_sAJZC6lQjW!{zs(I(N?fz9b*-!o@Dj+7);9>0r}!=?NH-gVN?BFq zid`uFe-(F~QB8E~I>@Jp1*Hhm6{LtX37rViyP*@h^xj1}C@LM1-igvfFOtv#N{2|5 zCJ3STUJL{XckrBh*1c=p|2KbT*34w~%sYEO@3Y^w_Zp2dE^rq6GaNw@7JDZ#-o^vs zOn5p_`YJaNoXz~T?OzzhM?c7#QcpIl%vHRaTqhyuvM@1sN8lztUx}FHtsEUCEfHwu z;dh_N%(OJjXlQquEK*ji)OesB~9TnOEt56&(_q5K0#!?;vzy>c}+e2*aJ(D_FM+M+9=_girz#*oHMA>jE^q5yz2g>x%Gt=u4nsE-OzYJsXm*UZfrSzvevvaz(mppkkA7-uZ(Y-NSsU9;a+_4)eJW0<~D)%!nf8RbCyM`v8)`e;XMa z>+S8;LRs+W(%Wrg(ERn#N~s*g7pOE$|#b_0I^-y@HQKAi!ZBvIaza zT6^sXUVCzB4IXN=W)^6NaB{A`Lx%s&+!>!!b=asK){L4Gy%X%(aB_%F0zZ1Z7{oL5 z&EjNXa)iey|L8F9=x~?HP*2ZU=1OC&(8`ECXt&NCNP}}+ZsFhSf~&lfZ7>Y>A7l_J z784N(C}j>cr!p`|0T*Ix*5E<6aE#haOyye}C034r&M&qzmkz@Hs?EMaOxzW7P*YjC zdTI+eKs?um7F@~N)9lbS`(@y;kJxjVit#2;go1*K0`yNbqu_?dS=w%hB>@S9eiMC0 zAP{9`eWRnbI~lT<18cEF`ZE|7KN9@pHTPwb)X(#-U;mjA-penVVz2Yhpx?i+243;N zIZBd!o#%f6^3z4x=|*op!9zm5XAAD%Q`0rA{}>e3uU{GzT#XJTJApYq8fg_-6uh); zN)S^G3AoDsB2(0TzWu*J_uTTiBD(vVCN=e#=~2Iq?G4$`B5?_vzVBZIke0k2=@%zC zL@R-8iF)%dzCRGC{6CVZ{%MSnjxf7%$IvzBrOqJp$5RfnpV9Es5^u25Vu|1UPNg z7Qn=}PY-496BxQ&m;bsJ42gcPD@3%fJYZcjC?cqZTYOFP~=0pbG!FXJP*0Fwgo zy|=((xz||Yiu2xcxJ^!J3p*EB+gdVw?0`zG<4;E0JFGWrZiKVINK+qMY){tmen9>n@h?+5wYRp{*WOs6s9)5= z$)u;xU*m+qSW4I*&n=_Xh)64G3kFWTOq-S=kOACDKW*X;L$=roBa4Ml zdUWh~N_z)+Ter=7GP8!naNcHox_e7d5&}V2|NCgEGM(N)#&2rMQgRXzOKmzjkYc7BwzA@TaRxL>p;*A_7` zJiwcceEN6I%JTLzg>$_7$(f|(6neq{-w>-}VOby0yfsmkD|z-NJSWq{W@Y)VX74(V z+n7Xx5B7D_p-@sgwy4suXax&6s4oCX?EvOH z(JNh@oyefu>tM-Fdury-TqkVOVnT!Di7yfk^K@%H_7u6BrjDFuV?dlV8wMm%7FfFpq_+u?1yld&z_6jiw1PZD^$oEJJ1EwJh zg93@E{HCdz*Gw+cx25iGq0F)Gp?@k)B&Ex>yf{39f`Xu48{ajucK+-pH@lcD|8eHV zaBggT^z}v1(f3jYLpGNSl2LYvk+QO3#p!eg$vrbT-LsIZbon9HX$_f9TNCYUs{I4- zfg)XQOi_Bq`px~=Q+zddo85@wGe|lH14|ZTyzdjZLY8dp5*WN0R>{BhZNA2qB8A(& z?~5QIptbcwv`UXa`oY0U3I}1rr*XA1BO?c?V4&~sbG#eEimgoxQ0M{F#>)oPmi3b^z-PZ5PnTD(kp%NCh6GC!i;^M^M;Mg=i99frh7XQgpxFUR|>3B+9=?b zm-VKrHt{-|#HestkHqf~OuYwx6;Bbjb2nomdVlw`@U<%-&~w~TbukKF|2|x;qZI*d z$Rw~q$JbUFchu?g+rm)Wy-&F6ny`d_1_XYf6*GkiD!hW=#^7;ZLep6{rU07_CbnRF+|37s(VCg2W6>%Ws!F?B9=L}gc;in_ zZMP=Nc${}0u_Lk0GTY-=yN&M9v$H=9Vi26MK|p}K)-dG&7eDO<`c@MyheWxhO+aKQ+1WQqLv5l9sZ6e(oQIonqt zaZE_bX1YH=E!EQWHoWPY0sO@i?c%gvKY6X!OWj1ta(Nn0t7xs|UJ2BX_*d#?5Kq;3 z@0c>ftEQp%K%m)*=M@7-{Sl(^`kFsE^-s#ND4SyJPuZ+wg-#tIq?_pC#&48eDu;k{Wqxvsi!4r`QySfFVP%X+UEj^E2@CQzm4cLQUj%( zO#%g8vS7RIey5O6QaeJS$<|PktEyqQ_GYSo@jm#xz1#;*fLj~r+1V^NdWIp?mhm1F z^#(QaT8O&yn)u?*&i6Egf;dcsIRtA~@{D{PdD!O(wl%10Kn7V9gld|Ad>S4iL z;;9-B77y^S@D@|asdZUc%vrH$={4 zPSBtr>F3X%iyZs|0v$)q3f6MQbc85+Z^pN_$|x#^bx}2C+_>Q)Cf4JZXLKiYJpk1e zGisM}PTUzxYyQ+K9J!>XQHdMlp)N0PQ2+6%TbIsY0=IN3+bA6H<9>x}OH6!^)w6Ue z5a=76i;r*M`*-OFb`=auRMgbs;^MD^b7sD_5)lNwDJWZT`^Y=DoOpbt@0c`azK^E? zNNmEP-v{DV6}bC?j8;6e-7Rs?2E`El{CwSli|u|^7K9G+7R_*cT;EmNGDRDh^&wbn-B^8zR z$&t%@Yz=LAq0LWov~Oar9aTjd2JBEu^{I?DD$Y}SxU2@W5u@gTmI=+qW;pwF_JG8kOkJ57r9mIp^uB zuwph9csH=H?`zEZ)|BI-&fTYJHnm1h5Wr<;%xFvoUVWFo+38nImc$M_8##Hd4qasHNf$6a6zAy+3^ml9mzHsuq@4+1ZKQtJ`!=EM3_;>JJ_^+_)wfvxs7pxjz?*g2+1NGRh1H9jHp zCHbH)9UQ<8ROAt5rSG*6$mubR>S?WjP%YXn+BnFi^8l)rZnf;;`nE!e>z)BDJWq=( z6a^SfPR22LAY-x0qgP5I~ zK^(G=9%by>6fu`!W`;+5G1s0So z=T0Jso%2k{Of}pvJ<4OO(|-IqD~-?8a&b!eG zPo{vtu=|n#FnC)&HZ?&=NJ!p(MtdY`!(gkcs}tuDhj@YOadThpd_4rGFx<*0NU%CI zlQo^`&^KGiNZplV*#QERvtH*i;zd=2D+pzRJ1@yvThjbh+Q$ovQl+i@%N! zVmGN@EgzmY>e|~Ut*zluK<6@8eYYb*U?3&k6Hfz>5p;{Gc*YcgDS5zTvovSEG&jWh zF7enElc$zu1XPiqapQsKZ^+e1GS*NNuUk=API zz|tJ*Fp4;>GSUejjngvfd_TG1sX#vUQTq_I?5kIYnPN3q-xWp^4uBqkK7;*Cj(GRI z;44Dh^R4J7x2~TwMLnUhXKwL-6!acl)-SN3YiPI#xPlt`FRy=|0$_NXXbORyWv*?@ zBMJXICgi2aij-9T45x_5I1p~|7Y;$I@uu(%XQ-MDfm2b!lQpiKa>yGfIYY^QT*K|Z zJ4>|_TYr03>ZIyse=dtQ!%!TcHhqZx#2gQ?+~ zR2_*+*O~seIk(@_(@{}TURl?HE8g%PH5cRT4D~9fo)g6uZpiuF=1sxyN0-+CCqaX3 zXwz{Cj(H_hdG%c5rN$s^IwB|`^!9@sR(lbVAJJkBMOs3;3jv5H;P3BAcu3EsY?fhGc~{3!NEamO!7d6$c5C!iNbjOWmBu6 zruyhXR{Wo>Q|tvn@!yir+A$ixnWYbd2518maey2S)%XoVv*e0Nw~&MN+&0$>Ro7B_d2ERA=DOAW}eNSgS;qX zGp&GC@tNe?*u;4HJb7j34}NX)(&NQZaRqqfmLvCkAd_%$j%k%omo-a+HU}#4`c=p_ zgH#tvHcS#y`L$tb$ywRkVX2Lg=QS^_^&=--%ZCP=(PM85nLvi|e#RGa9NH?9Vjir8 zUnLznL|e>}TQTVuYtSCCq<33=(9-PB&c4TDL9aLuc02rUdTftjP@%s43>%emjT>`o$zq5W6`s0E}N&r4ENRE~qr$_SnEuJ>o1iRWB;JHDp}A z7OX@-g(Z3Æz)wAB2x=0O)^{Q2wyzk?yt)ZUa;BCxHK3(oK<0UK-G_4(Xv2Oyr zKEei;Y$EV$sn<5aQZlt}!^u=ZT8R7{Y^8)Bn@#MK?qng9*VH>-vo$bm7U7v69iox) zU0%(fH@o3DnOT)Utk0xo_RR74De*)4%C#?V}@F?VIjA{ zVVU0`=1?cX;WbKon@2wM`)?(!4*OQZh z>Ft6Igjs?oPgFQLoJx0e?_jy>#mxx+pyjfiX4afYObR7+^Pq-?n|(**`wx6N)>e0i z+K3Hm#eGNDQy&kQ7!sfgU+nk>B2|^$zkufp!m{CD6ntwyQGb-smXlO*19f zafrf~2Q1mo9|#I9MRv4e&4iD(P}rW{-t}40>nFzAtZ$XRfx*-cMlwzKs1FdySg?$Z zJ4#Pk&YjkpXgjb&CR>}ihcda--gk7&Cg;suU>(E9e7RLSM=j052RQ(XmTTwF(|YQm zJLOHC3pdZ`8!4Mn}v>Qg(Y zitXcc-D=vOP0CJ}23rzLgQrvp?FXR@_F7gZrb-kzKKP^XSWM_*q=P!Liudx;e< zcY&2&0lzhn-@m7azB~fLKd;ai{kwN~UFYwim&Y1Mm#F$?PImNC3xPuK{AEd?`;z|; b7o0NJl-Ku-$}_25K8mvZ3%PQcmm&WJu`xbO diff --git a/pr-preview/pr-1594/assets/images/materialization-new-bbe45dcc13bded994190ac75f86dc01f.svg b/pr-preview/pr-1594/assets/images/materialization-new-bbe45dcc13bded994190ac75f86dc01f.svg deleted file mode 100644 index 179f20d3f6..0000000000 --- a/pr-preview/pr-1594/assets/images/materialization-new-bbe45dcc13bded994190ac75f86dc01f.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/images/materialization-page-e2b7070883f3db0f1bf3add85e3a9f86.png b/pr-preview/pr-1594/assets/images/materialization-page-e2b7070883f3db0f1bf3add85e3a9f86.png deleted file mode 100644 index 084a840e66816e6a065fc6e0ee768b29ec11d0bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67501 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 aYEisnX&Tc4>3r@Ekr0s)E)e|i^?w0F`{+gh diff --git a/pr-preview/pr-1594/assets/images/ui-evolution-re-create-de574ca2333327fc911cc8ff0e46c5b9.png b/pr-preview/pr-1594/assets/images/ui-evolution-re-create-de574ca2333327fc911cc8ff0e46c5b9.png deleted file mode 100644 index a81aa582fe9043ab33c4c8b5000f8434080e9877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185213 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�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 i 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 diff --git a/pr-preview/pr-1594/assets/js/014c8d62.cdd16169.js b/pr-preview/pr-1594/assets/js/014c8d62.cdd16169.js deleted file mode 100644 index f7e61c8209..0000000000 --- a/pr-preview/pr-1594/assets/js/014c8d62.cdd16169.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3161],{26860:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>a});var t=i(74848),r=i(28453);const s={},c="Elasticsearch",o={id:"reference/Connectors/materialization-connectors/Elasticsearch",title:"Elasticsearch",description:"This connector materializes Flow collections into indices in an Elasticsearch cluster.",source:"@site/docs/reference/Connectors/materialization-connectors/Elasticsearch.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/Elasticsearch",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/Elasticsearch.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Databricks",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks"},next:{title:"Firebolt",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt"}},d={},a=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Setup",id:"setup",level:2},{value:"Delta updates",id:"delta-updates",level:2},{value:"Keyword Fields",id:"keyword-fields",level:2},{value:"Changelog",id:"changelog",level:2},{value:"V3: 2023-08-21",id:"v3-2023-08-21",level:4}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"elasticsearch",children:"Elasticsearch"}),"\n",(0,t.jsx)(n.p,{children:"This connector materializes Flow collections into indices in an Elasticsearch cluster."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/materialize-elasticsearch:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/materialize-elasticsearch:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["An Elastic cluster with a known ",(0,t.jsx)(n.a,{href:"https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html#send-requests-to-elasticsearch",children:"endpoint"})]}),"\n",(0,t.jsxs)(n.li,{children:["The role used to connect to Elasticsearch must have at least the following privileges (see Elastic's documentation on ",(0,t.jsx)(n.a,{href:"https://www.elastic.co/guide/en/elasticsearch/reference/current/defining-roles.html#roles-indices-priv",children:"defining roles"})," and ",(0,t.jsx)(n.a,{href:"https://www.elastic.co/guide/en/elasticsearch/reference/current/security-privileges.html#privileges-list-indices",children:"security privileges"}),"):","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Cluster privilege"})," of ",(0,t.jsx)(n.code,{children:"monitor"})]}),"\n",(0,t.jsxs)(n.li,{children:["For each index to be created: ",(0,t.jsx)(n.code,{children:"read"}),", ",(0,t.jsx)(n.code,{children:"write"}),", ",(0,t.jsx)(n.code,{children:"view_index_metadata"}),", and ",(0,t.jsx)(n.code,{children:"create_index"}),". When creating ",(0,t.jsx)(n.strong,{children:"Index privileges"}),", you can use a wildcard ",(0,t.jsx)(n.code,{children:'"*"'})," to grant the privileges to all indices."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["If you haven't yet captured your data from its external source, start at the beginning of the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"guide to create a dataflow"}),". You'll be referred back to this connector-specific documentation at the appropriate steps."]})}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure an Elasticsearch materialization, which will direct the contents of these Flow collections into Elasticsearch indices."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Authentication"})}),"\n",(0,t.jsx)(n.p,{children:"You can authenticate to Elasticsearch using either a username and password, or using an API key."}),"\n",(0,t.jsxs)(n.p,{children:["The connector will automatically create an Elasticsearch index for each binding of the materialization with index mappings for each selected field of the binding. It uses the last component of the collection name as the name of the index by default. You can customize the name of the index using the ",(0,t.jsx)(n.code,{children:"index"})," property in the resource configuration for each binding."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/endpoint"})})}),(0,t.jsx)(n.td,{children:"Endpoint"}),(0,t.jsxs)(n.td,{children:["Endpoint host or URL. Must start with http:// or https://. If using Elastic Cloud this follows the format https://CLUSTER_ID.REGION.CLOUD_PLATFORM.DOMAIN",":PORT"]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials"})})}),(0,t.jsx)(n.td,{}),(0,t.jsx)(n.td,{}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/credentials/username"})}),(0,t.jsx)(n.td,{children:"Username"}),(0,t.jsx)(n.td,{children:"Username to use for authenticating with Elasticsearch."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/credentials/password"})}),(0,t.jsx)(n.td,{children:"Password"}),(0,t.jsx)(n.td,{children:"Password to use for authenticating with Elasticsearch."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/credentials/apiKey"})}),(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"API key for authenticating with the Elasticsearch API. Must be the 'encoded' API key credentials, which is the Base64-encoding of the UTF-8 representation of the id and api_key joined by a colon (:)."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"advanced/number_of_replicas"})}),(0,t.jsx)(n.td,{children:"Index Replicas"}),(0,t.jsx)(n.td,{children:"The number of replicas to create new indices with. Leave blank to use the cluster default."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/index"})})}),(0,t.jsx)(n.td,{children:"index"}),(0,t.jsx)(n.td,{children:"Name of the Elasticsearch index to store the materialization results."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/delta_updates"})})}),(0,t.jsx)(n.td,{children:"Delta updates"}),(0,t.jsxs)(n.td,{children:["Whether to use standard or ",(0,t.jsx)(n.a,{href:"#delta-updates",children:"delta updates"}),"."]}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/number_of_shards"})}),(0,t.jsx)(n.td,{children:"Number of shards"}),(0,t.jsx)(n.td,{children:"The number of shards to create the index with. Leave blank to use the cluster default."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1"})})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"materializations:\n PREFIX/mat_name:\n endpoint:\n connector:\n # Path to the latest version of the connector, provided as a Docker image\n image: ghcr.io/estuary/materialize-elasticsearch:dev\n config:\n endpoint: https://ec47fc4d2c53414e1307e85726d4b9bb.us-east-1.aws.found.io:9243\n credentials:\n username: flow_user\n password: secret\n # If you have multiple collections you need to materialize, add a binding for each one\n # to ensure complete data flow-through\n bindings:\n - resource:\n index: my-elasticsearch-index\n source: PREFIX/source_collection\n"})}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsxs)(n.p,{children:["You must configure your Elasticsearch cluster to allow connections from Estuary. It may be necessary to ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"allowlist the Estuary IP addresses"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Alternatively, you can allow secure connections via SSH tunneling. To do so:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Refer to the ",(0,t.jsx)(n.a,{href:"../../../../guides/connect-network/",children:"guide"})," to configure an SSH server on the cloud platform of your choice."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, with the addition of the ",(0,t.jsx)(n.code,{children:"networkTunnel"})," stanza to enable the SSH tunnel, if using. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,t.jsx)(n.p,{children:"This connector supports both standard and delta updates. You must choose an option for each binding."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"Learn more about delta updates"})," and the implications of using each update type."]}),"\n",(0,t.jsx)(n.h2,{id:"keyword-fields",children:"Keyword Fields"}),"\n",(0,t.jsxs)(n.p,{children:["Collection fields with ",(0,t.jsx)(n.code,{children:"type: string"})," will have ",(0,t.jsx)(n.code,{children:"keyword"})," index mappings created for them if they\nare part of the collection key, and ",(0,t.jsx)(n.code,{children:"text"})," mappings for them if they are not part of the collection\nkey."]}),"\n",(0,t.jsxs)(n.p,{children:["To materialize a collection field with ",(0,t.jsx)(n.code,{children:"type: string"})," as a ",(0,t.jsx)(n.code,{children:"keyword"})," mapping instead of a ",(0,t.jsx)(n.code,{children:"text"}),"\nmapping, configure the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#projected-fields",children:"field selection"})," for\nthe binding to indicate which fields should having keyword mappings created for them using the key\nand value of ",(0,t.jsx)(n.code,{children:'"keyword": true'}),". This can be changed by updating the JSON in the ",(0,t.jsx)(n.strong,{children:"Advanced\nSpecification Editor"})," in the web app or by using ",(0,t.jsx)(n.code,{children:"flowctl"})," to edit the specification directly, see\n",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/edit-data-flows#edit-a-materialization",children:"edit a materialization"})," for more details."]}),"\n",(0,t.jsxs)(n.p,{children:["An example JSON configuration for a binding that materializes ",(0,t.jsx)(n.code,{children:"stringField"})," as a ",(0,t.jsx)(n.code,{children:"keyword"})," mapping\nis shown below:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "bindings": [\n {\n "resource": {\n "index": "my-elasticsearch-index"\n },\n "source": "PREFIX/source_collection",\n "fields": {\n "include": {\n "stringField": {\n "keyword": true\n }\n },\n "recommended": true\n }\n }\n ]\n}\n'})}),"\n",(0,t.jsx)(n.h2,{id:"changelog",children:"Changelog"}),"\n",(0,t.jsx)(n.p,{children:"The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version."})}),"\n",(0,t.jsx)(n.h4,{id:"v3-2023-08-21",children:"V3: 2023-08-21"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Index mappings will now be created based on the selected fields of the materialization. Previously only dynamic runtime mappings were created, and the entire root document was always materialized."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:'Moved "number of replicas" configuration for new indices to an advanced, optional, endpoint-level configuration.'}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:'The "number of shards" resource configuration is now optional.'}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>c,x:()=>o});var t=i(96540);const r={},s=t.createContext(r);function c(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/01f1a992.d58243ab.js b/pr-preview/pr-1594/assets/js/01f1a992.d58243ab.js deleted file mode 100644 index 45bdb04837..0000000000 --- a/pr-preview/pr-1594/assets/js/01f1a992.d58243ab.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6802],{36297:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>h});var r=s(74848),n=s(28453);const i={},c="Harvest",o={id:"reference/Connectors/capture-connectors/harvest",title:"Harvest",description:"This connector captures data from Harvest into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/harvest.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/harvest",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/harvest.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Greenhouse",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse"},next:{title:"HTTP File",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file"}},a={},h=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"harvest",children:"Harvest"}),"\n",(0,r.jsx)(t.p,{children:"This connector captures data from Harvest into Flow collections."}),"\n",(0,r.jsxs)(t.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(t.a,{href:"https://ghcr.io/estuary/source-harvest:dev",children:(0,r.jsx)(t.code,{children:"ghcr.io/estuary/source-harvest:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsxs)(t.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.jsx)(t.a,{href:"https://docs.airbyte.com/integrations/sources/harvest/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,r.jsx)(t.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,r.jsx)(t.p,{children:"The following data resources are supported through the Harvest APIs:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/clients-api/clients/contacts/",children:"Client Contacts"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/clients-api/clients/clients/",children:"Clients"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/company-api/company/company/",children:"Company"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-messages/",children:"Invoice Messages"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-payments/",children:"Invoice Payments"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/invoices-api/invoices/invoices/",children:"Invoices"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-item-categories/",children:"Invoice Item Categories"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-messages/",children:"Estimate Messages"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/estimates-api/estimates/estimates/",children:"Estimates"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-item-categories/",children:"Estimate Item Categories"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/expenses-api/expenses/expenses/",children:"Expenses"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/expenses-api/expenses/expense-categories/",children:"Expense Categories"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/tasks-api/tasks/tasks/",children:"Tasks"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/timesheets-api/timesheets/time-entries/",children:"Time Entries"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/projects-api/projects/user-assignments/",children:"Project User Assignments"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/projects-api/projects/task-assignments/",children:"Project Task Assignments"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/projects-api/projects/projects/",children:"Projects"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/roles-api/roles/roles/",children:"Roles"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/users-api/users/billable-rates/",children:"User Billable Rates"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/users-api/users/cost-rates/",children:"User Cost Rates"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/users-api/users/project-assignments/",children:"User Project Assignments"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/reports-api/reports/expense-reports/",children:"Expense Reports"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/reports-api/reports/uninvoiced-report/",children:"Uninvoiced Report"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/reports-api/reports/time-reports/",children:"Time Reports"})}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/reports-api/reports/project-budget-report/",children:"Project Budget Report"}),"\nBy default, each resource is mapped to a Flow collection through a separate binding."]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["To set up the Harvest source connector, you'll need the ",(0,r.jsx)(t.a,{href:"https://help.getharvest.com/api-v2/authentication-api/authentication/authentication/",children:"Harvest Account ID and API key"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(t.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Harvest source connector."]}),"\n",(0,r.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/account_id"})}),(0,r.jsx)(t.td,{children:"Account ID"}),(0,r.jsx)(t.td,{children:"Harvest account ID. Required for all Harvest requests in pair with Personal Access Token."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/start_date"})}),(0,r.jsx)(t.td,{children:"Start Date"}),(0,r.jsx)(t.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/end_date"})}),(0,r.jsx)(t.td,{children:"End Date"}),(0,r.jsx)(t.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Default"})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/stream"})})}),(0,r.jsx)(t.td,{children:"Stream"}),(0,r.jsx)(t.td,{children:"Resource of your Harvest project from which collections are captured."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/syncMode"})})}),(0,r.jsx)(t.td,{children:"Sync Mode"}),(0,r.jsx)(t.td,{children:"Connection method."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-harvest:dev\n config:\n account_id: \n start_date: 2017-01-25T00:00:00Z\n end_date: 2020-01-25T00:00:00Z\n bindings:\n - resource:\n stream: clients\n syncMode: incremental\n target: ${PREFIX}/clients\n {...}\n"})})]})}function d(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>c,x:()=>o});var r=s(96540);const n={},i=r.createContext(n);function c(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/02365777.75cbb3fb.js b/pr-preview/pr-1594/assets/js/02365777.75cbb3fb.js deleted file mode 100644 index 75d62bc656..0000000000 --- a/pr-preview/pr-1594/assets/js/02365777.75cbb3fb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6792],{28953:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var s=t(74848),a=t(28453),o=t(61114);const i={},r="Concepts",c={id:"concepts/README",title:"Concepts",description:"Flow helps you define data pipelines, known as Data Flows, that connect multiple data systems, APIs, and storage, and optionally transform data along the way.",source:"@site/docs/concepts/README.md",sourceDirName:"concepts",slug:"/concepts/",permalink:"/pr-preview/pr-1594/concepts/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/README.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"How to transform data using TypeScript",permalink:"/pr-preview/pr-1594/guides/transform_data_using_typescript"},next:{title:"Catalog",permalink:"/pr-preview/pr-1594/concepts/catalogs"}},l={},d=[{value:"Working with Flow",id:"working-with-flow",level:2},{value:"Web application",id:"web-application",level:3},{value:"flowctl",id:"flowctl",level:3},{value:"Essential concepts",id:"essential-concepts",level:2},{value:"Catalog",id:"catalog",level:3},{value:"Collections",id:"collections",level:3},{value:"Captures",id:"captures",level:3},{value:"Materializations",id:"materializations",level:3},{value:"Endpoints",id:"endpoints",level:3},{value:"Connectors",id:"connectors",level:3},{value:"Intermediate concepts",id:"intermediate-concepts",level:2},{value:"Derivations",id:"derivations",level:3},{value:"Schemas",id:"schemas",level:3},{value:"Reductions",id:"reductions",level:3},{value:"Tests",id:"tests",level:3},{value:"Tasks",id:"tasks",level:3},{value:"Resources and bindings",id:"resources-and-bindings",level:3},{value:"Storage mappings",id:"storage-mappings",level:3},{value:"Advanced concepts",id:"advanced-concepts",level:2},{value:"Journals",id:"journals",level:3},{value:"Task shards",id:"task-shards",level:3},{value:"Projections",id:"projections",level:3}];function h(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"concepts",children:"Concepts"}),"\n",(0,s.jsxs)(n.p,{children:["Flow helps you define data pipelines, known as ",(0,s.jsx)(n.strong,{children:"Data Flows"}),", that connect multiple data systems, APIs, and storage, and optionally transform data along the way.\nData Flows are defined by a set of ",(0,s.jsx)(n.strong,{children:"Flow specifications"})," and deployed using either the web application or the command-line interface."]}),"\n",(0,s.jsx)(n.p,{children:"This page introduces concepts and terms that will help you begin working with Flow and better understand its underlying mechanisms.\nThese concepts are discussed in more detail on subsequent pages."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:t(74532).A+"",width:"960",height:"540"})}),"\n",(0,s.jsx)(n.h2,{id:"working-with-flow",children:"Working with Flow"}),"\n",(0,s.jsx)(n.p,{children:"There are two main environments in which you can work with Flow:\nthe web application or your preferred local environment using the flowctl command-line tool."}),"\n",(0,s.jsx)(n.h3,{id:"web-application",children:"Web application"}),"\n",(0,s.jsxs)(n.p,{children:["The Flow web application is where you'll most likely create, monitor, and update your Data Flows.\nYou can find it at ",(0,s.jsx)(n.a,{href:"https://dashboard.estuary.dev",children:"dashboard.estuary.dev"}),".\nThe app is backed by secure, cloud-hosted infrastructure that Estuary manages."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/web-app",children:"Take a tour of the web app"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"Create your first Data Flow with the web app"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"flowctl",children:"flowctl"}),"\n",(0,s.jsx)(n.p,{children:"flowctl is a command-line interface for working with Flow's public API.\nUsing flowctl, developers can inspect, edit, test, and publish Data Flows \u2014 just as with the web application.\nFor example, you can create a Data Flow with the web app, and then use flowctl to fetch it into files that you manage within a Git repo."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/flowctl",children:"Learn more about flowctl"})}),"\n",(0,s.jsx)(n.h2,{id:"essential-concepts",children:"Essential concepts"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"In this section, you'll find the most important Flow terms and concepts. If you're new to Flow, start here."})}),"\n",(0,s.jsxs)(n.p,{children:["A complete end-to-end ",(0,s.jsx)(n.strong,{children:"Data Flow"})," between two systems has three components:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Capture"}),": Flow ingests data from an outside source."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Collections"}),": Flow maintains the captured data in cloud storage."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Materialization"}),": Flow pushes data to an outside destination."]}),"\n"]}),"\n","\n",(0,s.jsx)(o.A,{chart:"\n\tgraph LR;\n\t\tCapture--\x3eCollection;\n Collection--\x3eMaterialization;\n"}),"\n",(0,s.jsx)(n.p,{children:"It may also include:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Derivations"}),": You apply a transformation to data in a collection, resulting in a new collection."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["All of these entities are described in the ",(0,s.jsx)(n.strong,{children:"catalog"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"catalog",children:"Catalog"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"catalog"})," is the set of active entities that comprise all ",(0,s.jsx)(n.strong,{children:"Data Flows"}),": captures, materializations, derivations, collections, schemas, tests, and more."]}),"\n",(0,s.jsxs)(n.p,{children:["All catalog entities are defined in ",(0,s.jsx)(n.strong,{children:"Flow specification files"})," \u2014 either manually, by you, or generated by the Flow web app. You create the specifications as ",(0,s.jsx)(n.strong,{children:"drafts"}),", and ",(0,s.jsx)(n.strong,{children:"publish"})," them to add them to the catalog."]}),"\n",(0,s.jsx)(n.p,{children:"You can mix and match catalog entities to create a variety of Data Flows."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/catalogs",children:"Learn more about the catalog"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"collections",children:"Collections"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Collections"})," represent datasets within Flow.\nAll captured documents are written to a collection, and all materialized documents are read from a collection."]}),"\n",(0,s.jsx)(n.p,{children:"Collections are a real-time data lake.\nLike a traditional data lake, the documents that make up a collection are stored as plain JSON in your cloud storage bucket.\nUnlike a traditional data lake, updates to the collection are reflected downstream in the data flow\nwithin milliseconds."}),"\n",(0,s.jsx)(n.p,{children:"Documents in collections are stored indefinitely in your cloud storage bucket (or may be managed with your regular bucket lifecycle policies).\nThis means that the full historical content of a collection is available to support future data operations and perform backfills without going back to the source."}),"\n",(0,s.jsxs)(n.p,{children:["Each collection has a keyed ",(0,s.jsx)(n.a,{href:"#schemas",children:"schema"})," against which incoming documents are validated.\nThis ensures that data is always clean and organized."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections",children:"Learn more about collections"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"captures",children:"Captures"}),"\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.strong,{children:"capture"})," is a Flow task that ingests data from an external source into one or more Flow collections.\nDocuments continuously move from the source into Flow;\nas new documents become available at the source,\nFlow validates their schema and adds them to their corresponding collection.\nCaptures interface with source systems using ",(0,s.jsx)(n.a,{href:"#connectors",children:"connectors"}),"."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures",children:"Learn more about captures"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"materializations",children:"Materializations"}),"\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.strong,{children:"materialization"})," is a Flow task that pushes data from one or more collections\nto an external destination.\nDocuments continuously moves from each Flow collection to the destination.\nMaterializations are the conceptual inverse of ",(0,s.jsx)(n.strong,{children:"captures."})]}),"\n",(0,s.jsxs)(n.p,{children:["As new documents become available within bound collections, the materialization\nkeeps the destination up to date within milliseconds, or as fast as that system allows.\nMaterializations interface with destinations using ",(0,s.jsx)(n.a,{href:"#connectors",children:"connectors"}),"."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization",children:"Learn more about materializations"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"endpoints",children:"Endpoints"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Endpoints"})," are the source systems from which Flow captures data and the destination systems to which Flow materializes data. All kinds of data systems can be endpoints, including databases, key/value stores, streaming pub/sub systems, SaaS products, and cloud storage locations."]}),"\n",(0,s.jsxs)(n.p,{children:["Flow connects to this wide variety of endpoints using ",(0,s.jsx)(n.strong,{children:"connectors"}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"connectors",children:"Connectors"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Connectors"})," are plugin components that allow Flow to interface with endpoint data systems.\nThey power captures and materializations."]}),"\n",(0,s.jsx)(n.p,{children:"Flow uses an open-source connector model.\nMany connectors are made by Estuary, and others are made by third parties.\nBecause connectors are open-source and kept separate from Flow itself,\nnew integrations can be added and updated quickly.\nThis is important, as the landscape of data systems and platforms is constantly evolving."}),"\n",(0,s.jsx)(n.p,{children:"All currently supported connectors are ready to use in the Flow web application.\nThey're also available as Docker images, each encapsulating the details of working with\na particular source or destination system."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors",children:"Learn more about connectors"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"intermediate-concepts",children:"Intermediate concepts"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"In this section, you'll find important concepts that are optional for basic usage.\nRead this to unlock more powerful workflows."})}),"\n",(0,s.jsx)(n.h3,{id:"derivations",children:"Derivations"}),"\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.strong,{children:"derivation"})," is a collection that results from the transformation of one or more other collections,\nwhich is continuously updated in sync with its source collection(s)."]}),"\n",(0,s.jsx)(n.p,{children:"You can use derivations to map, reshape, and filter documents.\nThey can also be used to tackle complex stateful streaming workflows,\nincluding joins and aggregations,\nwithout windowing and scaling limitations."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"derivations/",children:"Learn more about derivations"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"schemas",children:"Schemas"}),"\n",(0,s.jsxs)(n.p,{children:["All collections in Flow have an associated\n",(0,s.jsx)(n.a,{href:"https://json-schema.org/understanding-json-schema/",children:"JSON schema"}),"\nagainst which documents are validated every time they're written or read.\nSchemas are critical to how Flow ensures the integrity of your data.\nFlow validates your documents to ensure that\nbad data doesn't make it into your collections \u2014 or worse,\ninto downstream data products!"]}),"\n",(0,s.jsx)(n.p,{children:"JSON schema is a flexible standard for representing structure, invariants,\nand other constraints over your documents.\nSchemas can be very permissive, highly exacting, or somewhere in between."}),"\n",(0,s.jsx)(n.p,{children:"Flow pauses catalog tasks when documents don't match the collection schema,\nalerting you to the mismatch and allowing you to fix it before it creates a bigger problem."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas",children:"Learn more about schemas"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"reductions",children:"Reductions"}),"\n",(0,s.jsxs)(n.p,{children:["Every Flow collection ",(0,s.jsx)(n.a,{href:"#schemas",children:"schema"})," includes a ",(0,s.jsx)(n.strong,{children:"key"}),".\nThe key is used to identify collection documents and determine how they are grouped.\nWhen a collection is materialized into a database table, for example, its key becomes\nthe SQL primary key of the materialized table."]}),"\n",(0,s.jsxs)(n.p,{children:["Flow also uses the key to ",(0,s.jsx)(n.strong,{children:"reduce"})," documents in collections, making storage and materializations more efficient.\nIf multiple documents of a given key are added to a collection,\nby default, the most recent document supersedes all previous documents of that key."]}),"\n",(0,s.jsx)(n.p,{children:"You can exert more control over your data by changing the default reduction strategy.\nBy doing so, you can deeply merge documents, maintain running counts,\nand achieve other complex aggregation behaviors."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"Learn more about reductions"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"tests",children:"Tests"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Tests"})," become an important part of your Data Flows when you add derivations and customized reduction behavior.\nYou use tests to verify the end-to-end behavior of your collections and derivations."]}),"\n",(0,s.jsx)(n.p,{children:"A test is a sequence of ingestion or verification steps.\nIngestion steps ingest one or more document fixtures into a collection,\nand verification steps assert that the contents of another derived collection match a test expectation."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/tests",children:"Learn more about tests"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"tasks",children:"Tasks"}),"\n",(0,s.jsxs)(n.p,{children:["Captures, derivations, and materializations are collectively referred to as catalog ",(0,s.jsx)(n.strong,{children:"tasks"}),'.\nThey are the "active" components of a Data Flow, each running continuously and reacting to documents\nas they become available.']}),"\n",(0,s.jsx)(n.p,{children:"Collections, by way of comparison, are inert. They reflect data at rest, and are acted upon by\ncatalog tasks:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A capture adds documents to a collection pulled from a source endpoint."}),"\n",(0,s.jsx)(n.li,{children:"A derivation updates a collection by applying transformations to other collections."}),"\n",(0,s.jsx)(n.li,{children:"A materialization reacts to changes of a collection to update a destination endpoint."}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"resources-and-bindings",children:"Resources and bindings"}),"\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.strong,{children:"resource"})," is an addressable collection of data within a source or destination system.\nThe exact meaning of a resource is up to the endpoint and its connector. For example:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Resources of a database endpoint might be its individual tables."}),"\n",(0,s.jsx)(n.li,{children:"Resources of a Kafka cluster might be its topics."}),"\n",(0,s.jsx)(n.li,{children:"Resources of a SaaS connector might be its various API feeds."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["When you create capture or materialization, it connects a collection to a resource through a ",(0,s.jsx)(n.strong,{children:"binding"}),".\nA given capture or materialization may have multiple bindings, which connect multiple collections to different resources."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"storage-mappings",children:"Storage mappings"}),"\n",(0,s.jsxs)(n.p,{children:["Flow ",(0,s.jsx)(n.a,{href:"#collections",children:"collections"})," use cloud storage buckets for the durable storage of data.\nStorage mappings define how Flow maps your various collections into your storage buckets and prefixes."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/storage-mappings",children:"Learn more about storage mappings"})}),"\n",(0,s.jsx)(n.h2,{id:"advanced-concepts",children:"Advanced concepts"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"This section discusses advanced Flow concepts. The information here unlocks\na more technical understanding of how Flow works, and may be helpful in advanced use cases."})}),"\n",(0,s.jsx)(n.h3,{id:"journals",children:"Journals"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Journals"})," provide the low-level storage for Flow collections.\nEach logical and physical partition of a collection is backed by a journal."]}),"\n",(0,s.jsxs)(n.p,{children:["Task ",(0,s.jsx)(n.a,{href:"#task-shards",children:"shards"})," also use journals to provide for their durability\nand fault tolerance.\nEach shard has an associated ",(0,s.jsx)(n.strong,{children:"recovery log"}),", which is a journal into which\ninternal checkpoint states are written."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/journals",children:"Learn more about journals"})}),"\n",(0,s.jsx)(n.h3,{id:"task-shards",children:"Task shards"}),"\n",(0,s.jsxs)(n.p,{children:["Task ",(0,s.jsx)(n.strong,{children:"shards"})," are the unit of execution for a catalog ",(0,s.jsx)(n.a,{href:"#tasks",children:"task"}),".\nA single task can have many shards, which allow the task to scale across\nmany machines to achieve more throughput and parallelism."]}),"\n",(0,s.jsx)(n.p,{children:"Shards are created and managed by the Flow runtime.\nEach shard represents a slice of the overall work of the catalog task,\nincluding its processing status and associated internal checkpoints.\nCatalog tasks are created with a single shard,\nwhich can be repeatedly subdivided at any time \u2014 with no downtime \u2014 to\nincrease the processing capacity of the task."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards",children:"Learn more about shards"})}),"\n",(0,s.jsx)(n.h3,{id:"projections",children:"Projections"}),"\n",(0,s.jsxs)(n.p,{children:["Flow leverages your JSON schemas to produce other types of schemas as needed,\nsuch as TypeScript types and SQL ",(0,s.jsx)(n.code,{children:"CREATE TABLE"})," statements."]}),"\n",(0,s.jsx)(n.p,{children:"In many cases these projections provide comprehensive end-to-end type safety\nof Data Flows and their TypeScript transformations, all statically verified\nat build time."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections",children:"Learn more about projections"})})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},61114:(e,n,t)=>{t.d(n,{A:()=>i});var s=t(96540),a=t(99702),o=t(74848);a.N.initialize({startOnLoad:!0});const i=e=>{let{chart:n}=e;return(0,s.useEffect)((()=>{a.N.contentLoaded()}),[]),(0,o.jsx)("div",{className:"mermaid",children:n})}},74532:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/at-a-glance-013b784deb2b72b4632eee51e5b90252.png"}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/02ad5b1c.d0c45e12.js b/pr-preview/pr-1594/assets/js/02ad5b1c.d0c45e12.js deleted file mode 100644 index 9ff1d7eb65..0000000000 --- a/pr-preview/pr-1594/assets/js/02ad5b1c.d0c45e12.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5031],{78032:(e,d,r)=>{r.r(d),r.d(d,{assets:()=>c,contentTitle:()=>i,default:()=>x,frontMatter:()=>n,metadata:()=>l,toc:()=>h});var s=r(74848),t=r(28453);const n={},i="Google Cloud SQL for PostgreSQL",l={id:"reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres",title:"Google Cloud SQL for PostgreSQL",description:"This connector materializes Flow collections into tables in a Google Cloud SQL for PostgreSQL database.",source:"@site/docs/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres.md",sourceDirName:"reference/Connectors/materialization-connectors/PostgreSQL",slug:"/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amazon RDS for PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres"},next:{title:"Rockset",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset"}},c={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Conenecting Directly to Google Cloud SQL",id:"conenecting-directly-to-google-cloud-sql",level:3},{value:"Connect With SSH Tunneling",id:"connect-with-ssh-tunneling",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Delta updates",id:"delta-updates",level:2},{value:"Reserved words",id:"reserved-words",level:2},{value:"Changelog",id:"changelog",level:2},{value:"V4: 2022-11-30",id:"v4-2022-11-30",level:4}];function o(e){const d={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.h1,{id:"google-cloud-sql-for-postgresql",children:"Google Cloud SQL for PostgreSQL"}),"\n",(0,s.jsx)(d.p,{children:"This connector materializes Flow collections into tables in a Google Cloud SQL for PostgreSQL database."}),"\n",(0,s.jsxs)(d.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(d.a,{href:"https://ghcr.io/estuary/materialize-postgres:dev",children:(0,s.jsx)(d.code,{children:"ghcr.io/estuary/materialize-postgres:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(d.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(d.p,{children:"To use this connector, you'll need:"}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsx)(d.li,{children:"A Postgres database to which to materialize, and user credentials.\nThe connector will create new tables in the database per your specification. Tables created manually in advance are not supported."}),"\n",(0,s.jsx)(d.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,s.jsx)(d.h2,{id:"setup",children:"Setup"}),"\n",(0,s.jsx)(d.p,{children:"You must configure your database to allow connections from Estuary.\nThere are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,s.jsx)(d.h3,{id:"conenecting-directly-to-google-cloud-sql",children:"Conenecting Directly to Google Cloud SQL"}),"\n",(0,s.jsxs)(d.ol,{children:["\n",(0,s.jsxs)(d.li,{children:[(0,s.jsx)(d.a,{href:"https://cloud.google.com/sql/docs/mysql/configure-ip#add",children:"Enable public IP on your database"})," and add the ",(0,s.jsx)(d.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"})," as authorized IP addresses."]}),"\n"]}),"\n",(0,s.jsx)(d.h3,{id:"connect-with-ssh-tunneling",children:"Connect With SSH Tunneling"}),"\n",(0,s.jsx)(d.p,{children:"To allow SSH tunneling to a database instance hosted on Google Cloud, you must set up a virtual machine (VM)."}),"\n",(0,s.jsxs)(d.ol,{children:["\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:["Begin by finding your public SSH key on your local machine.\nIn the ",(0,s.jsx)(d.code,{children:".ssh"})," subdirectory of your user home directory,\nlook for the PEM file that contains the private SSH key. Check that it starts with ",(0,s.jsx)(d.code,{children:"-----BEGIN RSA PRIVATE KEY-----"}),",\nwhich indicates it is an RSA-based file."]}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsx)(d.li,{children:"If no such file exists, generate one using the command:"}),"\n"]}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-console",children:" ssh-keygen -m PEM -t rsa\n"})}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsxs)(d.li,{children:["If a PEM file exists, but starts with ",(0,s.jsx)(d.code,{children:"-----BEGIN OPENSSH PRIVATE KEY-----"}),", convert it with the command:"]}),"\n"]}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-console",children:' ssh-keygen -p -N "" -m pem -f /path/to/key\n'})}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsx)(d.li,{children:"If your Google login differs from your local username, generate a key that includes your Google email address as a comment:"}),"\n"]}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-console",children:" ssh-keygen -m PEM -t rsa -C user@domain.com\n"})}),"\n"]}),"\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.a,{href:"https://cloud.google.com/compute/docs/instances/create-start-instance",children:"Create and start a new VM in GCP"}),", ",(0,s.jsx)(d.a,{href:"https://cloud.google.com/compute/docs/images/os-details#user-space-features",children:"choosing an image that supports OS Login"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.a,{href:"https://cloud.google.com/compute/docs/connect/add-ssh-keys",children:"Add your public key to the VM"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.a,{href:"https://cloud.google.com/compute/docs/ip-addresses/reserve-static-external-ip-address",children:"Reserve an external IP address"})," and connect it to the VM during setup.\nNote the generated address."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(d.admonition,{title:"Configuration Tip",type:"tip",children:[(0,s.jsxs)(d.p,{children:["To configure the connector, you must specify the database address in the format ",(0,s.jsx)(d.code,{children:"host:port"}),". (You can also supply ",(0,s.jsx)(d.code,{children:"host"})," only; the connector will use the port ",(0,s.jsx)(d.code,{children:"5432"})," by default, which is correct in many cases.)\nYou can find the host and port in the following location:"]}),(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsxs)(d.li,{children:["Host as Private IP Address; port is always ",(0,s.jsx)(d.code,{children:"5432"}),". You may need to ",(0,s.jsx)(d.a,{href:"https://cloud.google.com/sql/docs/postgres/configure-private-ip",children:"configure private IP"})," on your database."]}),"\n"]})]}),"\n",(0,s.jsx)(d.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsx)(d.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a Postgres materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database."}),"\n",(0,s.jsx)(d.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(d.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Property"}),(0,s.jsx)(d.th,{children:"Title"}),(0,s.jsx)(d.th,{children:"Description"}),(0,s.jsx)(d.th,{children:"Type"}),(0,s.jsx)(d.th,{children:"Required/Default"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/database"})}),(0,s.jsx)(d.td,{children:"Database"}),(0,s.jsx)(d.td,{children:"Name of the logical database to materialize to."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.strong,{children:(0,s.jsx)(d.code,{children:"/address"})})}),(0,s.jsx)(d.td,{children:"Address"}),(0,s.jsxs)(d.td,{children:["Host and port of the database. If only the host is specified, port will default to ",(0,s.jsx)(d.code,{children:"5432"}),"."]}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:"Required"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.strong,{children:(0,s.jsx)(d.code,{children:"/password"})})}),(0,s.jsx)(d.td,{children:"Password"}),(0,s.jsx)(d.td,{children:"Password for the specified database user."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:"Required"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/schema"})}),(0,s.jsx)(d.td,{children:"Database Schema"}),(0,s.jsxs)(d.td,{children:["Database ",(0,s.jsx)(d.a,{href:"https://www.postgresql.org/docs/current/ddl-schemas.html",children:"schema"})," to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables"]}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:'"public"'})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.strong,{children:(0,s.jsx)(d.code,{children:"/user"})})}),(0,s.jsx)(d.td,{children:"User"}),(0,s.jsx)(d.td,{children:"Database user to connect as."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:"Required"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/advanced"})}),(0,s.jsx)(d.td,{children:"Advanced Options"}),(0,s.jsx)(d.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,s.jsx)(d.td,{children:"object"}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/advanced/sslmode"})}),(0,s.jsx)(d.td,{children:"SSL Mode"}),(0,s.jsx)(d.td,{children:"Overrides SSL connection behavior by setting the 'sslmode' parameter."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{})]})]})]}),"\n",(0,s.jsx)(d.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Property"}),(0,s.jsx)(d.th,{children:"Title"}),(0,s.jsx)(d.th,{children:"Description"}),(0,s.jsx)(d.th,{children:"Type"}),(0,s.jsx)(d.th,{children:"Required/Default"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/additional_table_create_sql"})}),(0,s.jsx)(d.td,{children:"Additional Table Create SQL"}),(0,s.jsx)(d.td,{children:"Additional SQL statement(s) to be run in the same transaction that creates the table."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/delta_updates"})}),(0,s.jsx)(d.td,{children:"Delta Update"}),(0,s.jsx)(d.td,{children:"Should updates to this table be done via delta updates."}),(0,s.jsx)(d.td,{children:"boolean"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"false"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/schema"})}),(0,s.jsx)(d.td,{children:"Alternative Schema"}),(0,s.jsx)(d.td,{children:"Alternative schema for this table (optional). Overrides schema set in endpoint configuration."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.strong,{children:(0,s.jsx)(d.code,{children:"/table"})})}),(0,s.jsx)(d.td,{children:"Table"}),(0,s.jsx)(d.td,{children:"Table name to materialize to. It will be created by the connector, unless the connector has previously created it."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(d.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-postgres:dev\n config:\n database: flow\n address: localhost:5432\n password: flow\n user: flow\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,s.jsx)(d.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,s.jsxs)(d.p,{children:["This connector supports both standard (merge) and ",(0,s.jsx)(d.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]}),"\n",(0,s.jsx)(d.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,s.jsxs)(d.p,{children:['PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier.\nFlow considers all the reserved words that are marked as "reserved" in any of the columns in the official ',(0,s.jsx)(d.a,{href:"https://www.postgresql.org/docs/current/sql-keywords-appendix.html",children:"PostgreSQL documentation"}),"."]}),"\n",(0,s.jsx)(d.p,{children:"These reserve words are listed in the table below. Flow automatically quotes fields that are in this list."}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Reserved words"}),(0,s.jsx)(d.th,{}),(0,s.jsx)(d.th,{}),(0,s.jsx)(d.th,{}),(0,s.jsx)(d.th,{})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"abs"}),(0,s.jsx)(d.td,{children:"current_transform_group_for_type"}),(0,s.jsx)(d.td,{children:"indicator"}),(0,s.jsx)(d.td,{children:"order"}),(0,s.jsx)(d.td,{children:"sqlexception"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"absolute"}),(0,s.jsx)(d.td,{children:"current_user"}),(0,s.jsx)(d.td,{children:"initial"}),(0,s.jsx)(d.td,{children:"out"}),(0,s.jsx)(d.td,{children:"sqlstate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"acos"}),(0,s.jsx)(d.td,{children:"cursor"}),(0,s.jsx)(d.td,{children:"initially"}),(0,s.jsx)(d.td,{children:"outer"}),(0,s.jsx)(d.td,{children:"sqlwarning"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"action"}),(0,s.jsx)(d.td,{children:"cycle"}),(0,s.jsx)(d.td,{children:"inner"}),(0,s.jsx)(d.td,{children:"output"}),(0,s.jsx)(d.td,{children:"sqrt"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"add"}),(0,s.jsx)(d.td,{children:"datalink"}),(0,s.jsx)(d.td,{children:"inout"}),(0,s.jsx)(d.td,{children:"over"}),(0,s.jsx)(d.td,{children:"start"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"all"}),(0,s.jsx)(d.td,{children:"date"}),(0,s.jsx)(d.td,{children:"input"}),(0,s.jsx)(d.td,{children:"overlaps"}),(0,s.jsx)(d.td,{children:"static"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"allocate"}),(0,s.jsx)(d.td,{children:"day"}),(0,s.jsx)(d.td,{children:"insensitive"}),(0,s.jsx)(d.td,{children:"overlay"}),(0,s.jsx)(d.td,{children:"stddev_pop"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"alter"}),(0,s.jsx)(d.td,{children:"deallocate"}),(0,s.jsx)(d.td,{children:"insert"}),(0,s.jsx)(d.td,{children:"pad"}),(0,s.jsx)(d.td,{children:"stddev_samp"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"analyse"}),(0,s.jsx)(d.td,{children:"dec"}),(0,s.jsx)(d.td,{children:"int"}),(0,s.jsx)(d.td,{children:"parameter"}),(0,s.jsx)(d.td,{children:"submultiset"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"analyze"}),(0,s.jsx)(d.td,{children:"decfloat"}),(0,s.jsx)(d.td,{children:"integer"}),(0,s.jsx)(d.td,{children:"partial"}),(0,s.jsx)(d.td,{children:"subset"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"and"}),(0,s.jsx)(d.td,{children:"decimal"}),(0,s.jsx)(d.td,{children:"intersect"}),(0,s.jsx)(d.td,{children:"partition"}),(0,s.jsx)(d.td,{children:"substring"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"any"}),(0,s.jsx)(d.td,{children:"declare"}),(0,s.jsx)(d.td,{children:"intersection"}),(0,s.jsx)(d.td,{children:"pattern"}),(0,s.jsx)(d.td,{children:"substring_regex"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"are"}),(0,s.jsx)(d.td,{children:"default"}),(0,s.jsx)(d.td,{children:"interval"}),(0,s.jsx)(d.td,{children:"per"}),(0,s.jsx)(d.td,{children:"succeeds"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"array"}),(0,s.jsx)(d.td,{children:"deferrable"}),(0,s.jsx)(d.td,{children:"into"}),(0,s.jsx)(d.td,{children:"percent"}),(0,s.jsx)(d.td,{children:"sum"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"array_agg"}),(0,s.jsx)(d.td,{children:"deferred"}),(0,s.jsx)(d.td,{children:"is"}),(0,s.jsx)(d.td,{children:"percentile_cont"}),(0,s.jsx)(d.td,{children:"symmetric"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"array_max_cardinality"}),(0,s.jsx)(d.td,{children:"define"}),(0,s.jsx)(d.td,{children:"isnull"}),(0,s.jsx)(d.td,{children:"percentile_disc"}),(0,s.jsx)(d.td,{children:"system"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"as"}),(0,s.jsx)(d.td,{children:"delete"}),(0,s.jsx)(d.td,{children:"isolation"}),(0,s.jsx)(d.td,{children:"percent_rank"}),(0,s.jsx)(d.td,{children:"system_time"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"asc"}),(0,s.jsx)(d.td,{children:"dense_rank"}),(0,s.jsx)(d.td,{children:"join"}),(0,s.jsx)(d.td,{children:"period"}),(0,s.jsx)(d.td,{children:"system_user"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"asensitive"}),(0,s.jsx)(d.td,{children:"deref"}),(0,s.jsx)(d.td,{children:"json_array"}),(0,s.jsx)(d.td,{children:"permute"}),(0,s.jsx)(d.td,{children:"table"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"asin"}),(0,s.jsx)(d.td,{children:"desc"}),(0,s.jsx)(d.td,{children:"json_arrayagg"}),(0,s.jsx)(d.td,{children:"placing"}),(0,s.jsx)(d.td,{children:"tablesample"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"assertion"}),(0,s.jsx)(d.td,{children:"describe"}),(0,s.jsx)(d.td,{children:"json_exists"}),(0,s.jsx)(d.td,{children:"portion"}),(0,s.jsx)(d.td,{children:"tan"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"asymmetric"}),(0,s.jsx)(d.td,{children:"descriptor"}),(0,s.jsx)(d.td,{children:"json_object"}),(0,s.jsx)(d.td,{children:"position"}),(0,s.jsx)(d.td,{children:"tanh"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"at"}),(0,s.jsx)(d.td,{children:"deterministic"}),(0,s.jsx)(d.td,{children:"json_objectagg"}),(0,s.jsx)(d.td,{children:"position_regex"}),(0,s.jsx)(d.td,{children:"temporary"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"atan"}),(0,s.jsx)(d.td,{children:"diagnostics"}),(0,s.jsx)(d.td,{children:"json_query"}),(0,s.jsx)(d.td,{children:"power"}),(0,s.jsx)(d.td,{children:"then"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"atomic"}),(0,s.jsx)(d.td,{children:"disconnect"}),(0,s.jsx)(d.td,{children:"json_table"}),(0,s.jsx)(d.td,{children:"precedes"}),(0,s.jsx)(d.td,{children:"time"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"authorization"}),(0,s.jsx)(d.td,{children:"distinct"}),(0,s.jsx)(d.td,{children:"json_table_primitive"}),(0,s.jsx)(d.td,{children:"precision"}),(0,s.jsx)(d.td,{children:"timestamp"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"avg"}),(0,s.jsx)(d.td,{children:"dlnewcopy"}),(0,s.jsx)(d.td,{children:"json_value"}),(0,s.jsx)(d.td,{children:"prepare"}),(0,s.jsx)(d.td,{children:"timezone_hour"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"begin"}),(0,s.jsx)(d.td,{children:"dlpreviouscopy"}),(0,s.jsx)(d.td,{children:"key"}),(0,s.jsx)(d.td,{children:"preserve"}),(0,s.jsx)(d.td,{children:"timezone_minute"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"begin_frame"}),(0,s.jsx)(d.td,{children:"dlurlcomplete"}),(0,s.jsx)(d.td,{children:"lag"}),(0,s.jsx)(d.td,{children:"primary"}),(0,s.jsx)(d.td,{children:"to"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"begin_partition"}),(0,s.jsx)(d.td,{children:"dlurlcompleteonly"}),(0,s.jsx)(d.td,{children:"language"}),(0,s.jsx)(d.td,{children:"prior"}),(0,s.jsx)(d.td,{children:"trailing"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"between"}),(0,s.jsx)(d.td,{children:"dlurlcompletewrite"}),(0,s.jsx)(d.td,{children:"large"}),(0,s.jsx)(d.td,{children:"privileges"}),(0,s.jsx)(d.td,{children:"transaction"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"bigint"}),(0,s.jsx)(d.td,{children:"dlurlpath"}),(0,s.jsx)(d.td,{children:"last"}),(0,s.jsx)(d.td,{children:"procedure"}),(0,s.jsx)(d.td,{children:"translate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"binary"}),(0,s.jsx)(d.td,{children:"dlurlpathonly"}),(0,s.jsx)(d.td,{children:"last_value"}),(0,s.jsx)(d.td,{children:"ptf"}),(0,s.jsx)(d.td,{children:"translate_regex"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"bit"}),(0,s.jsx)(d.td,{children:"dlurlpathwrite"}),(0,s.jsx)(d.td,{children:"lateral"}),(0,s.jsx)(d.td,{children:"public"}),(0,s.jsx)(d.td,{children:"translation"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"bit_length"}),(0,s.jsx)(d.td,{children:"dlurlscheme"}),(0,s.jsx)(d.td,{children:"lead"}),(0,s.jsx)(d.td,{children:"range"}),(0,s.jsx)(d.td,{children:"treat"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"blob"}),(0,s.jsx)(d.td,{children:"dlurlserver"}),(0,s.jsx)(d.td,{children:"leading"}),(0,s.jsx)(d.td,{children:"rank"}),(0,s.jsx)(d.td,{children:"trigger"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"boolean"}),(0,s.jsx)(d.td,{children:"dlvalue"}),(0,s.jsx)(d.td,{children:"left"}),(0,s.jsx)(d.td,{children:"read"}),(0,s.jsx)(d.td,{children:"trim"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"both"}),(0,s.jsx)(d.td,{children:"do"}),(0,s.jsx)(d.td,{children:"level"}),(0,s.jsx)(d.td,{children:"reads"}),(0,s.jsx)(d.td,{children:"trim_array"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"by"}),(0,s.jsx)(d.td,{children:"domain"}),(0,s.jsx)(d.td,{children:"like"}),(0,s.jsx)(d.td,{children:"real"}),(0,s.jsx)(d.td,{children:"true"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"call"}),(0,s.jsx)(d.td,{children:"double"}),(0,s.jsx)(d.td,{children:"like_regex"}),(0,s.jsx)(d.td,{children:"recursive"}),(0,s.jsx)(d.td,{children:"truncate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"called"}),(0,s.jsx)(d.td,{children:"drop"}),(0,s.jsx)(d.td,{children:"limit"}),(0,s.jsx)(d.td,{children:"ref"}),(0,s.jsx)(d.td,{children:"uescape"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cardinality"}),(0,s.jsx)(d.td,{children:"dynamic"}),(0,s.jsx)(d.td,{children:"listagg"}),(0,s.jsx)(d.td,{children:"references"}),(0,s.jsx)(d.td,{children:"union"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cascade"}),(0,s.jsx)(d.td,{children:"each"}),(0,s.jsx)(d.td,{children:"ln"}),(0,s.jsx)(d.td,{children:"referencing"}),(0,s.jsx)(d.td,{children:"unique"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cascaded"}),(0,s.jsx)(d.td,{children:"element"}),(0,s.jsx)(d.td,{children:"local"}),(0,s.jsx)(d.td,{children:"regr_avgx"}),(0,s.jsx)(d.td,{children:"unknown"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"case"}),(0,s.jsx)(d.td,{children:"else"}),(0,s.jsx)(d.td,{children:"localtime"}),(0,s.jsx)(d.td,{children:"regr_avgy"}),(0,s.jsx)(d.td,{children:"unmatched"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cast"}),(0,s.jsx)(d.td,{children:"empty"}),(0,s.jsx)(d.td,{children:"localtimestamp"}),(0,s.jsx)(d.td,{children:"regr_count"}),(0,s.jsx)(d.td,{children:"unnest"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"catalog"}),(0,s.jsx)(d.td,{children:"end"}),(0,s.jsx)(d.td,{children:"log"}),(0,s.jsx)(d.td,{children:"regr_intercept"}),(0,s.jsx)(d.td,{children:"update"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"ceil"}),(0,s.jsx)(d.td,{children:"end-exec"}),(0,s.jsx)(d.td,{children:"log10"}),(0,s.jsx)(d.td,{children:"regr_r2"}),(0,s.jsx)(d.td,{children:"upper"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"ceiling"}),(0,s.jsx)(d.td,{children:"end_frame"}),(0,s.jsx)(d.td,{children:"lower"}),(0,s.jsx)(d.td,{children:"regr_slope"}),(0,s.jsx)(d.td,{children:"usage"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"char"}),(0,s.jsx)(d.td,{children:"end_partition"}),(0,s.jsx)(d.td,{children:"match"}),(0,s.jsx)(d.td,{children:"regr_sxx"}),(0,s.jsx)(d.td,{children:"user"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"character"}),(0,s.jsx)(d.td,{children:"equals"}),(0,s.jsx)(d.td,{children:"matches"}),(0,s.jsx)(d.td,{children:"regr_sxy"}),(0,s.jsx)(d.td,{children:"using"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"character_length"}),(0,s.jsx)(d.td,{children:"escape"}),(0,s.jsx)(d.td,{children:"match_number"}),(0,s.jsx)(d.td,{children:"regr_syy"}),(0,s.jsx)(d.td,{children:"value"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"char_length"}),(0,s.jsx)(d.td,{children:"every"}),(0,s.jsx)(d.td,{children:"match_recognize"}),(0,s.jsx)(d.td,{children:"relative"}),(0,s.jsx)(d.td,{children:"values"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"check"}),(0,s.jsx)(d.td,{children:"except"}),(0,s.jsx)(d.td,{children:"max"}),(0,s.jsx)(d.td,{children:"release"}),(0,s.jsx)(d.td,{children:"value_of"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"classifier"}),(0,s.jsx)(d.td,{children:"exception"}),(0,s.jsx)(d.td,{children:"measures"}),(0,s.jsx)(d.td,{children:"restrict"}),(0,s.jsx)(d.td,{children:"varbinary"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"clob"}),(0,s.jsx)(d.td,{children:"exec"}),(0,s.jsx)(d.td,{children:"member"}),(0,s.jsx)(d.td,{children:"result"}),(0,s.jsx)(d.td,{children:"varchar"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"close"}),(0,s.jsx)(d.td,{children:"execute"}),(0,s.jsx)(d.td,{children:"merge"}),(0,s.jsx)(d.td,{children:"return"}),(0,s.jsx)(d.td,{children:"variadic"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"coalesce"}),(0,s.jsx)(d.td,{children:"exists"}),(0,s.jsx)(d.td,{children:"method"}),(0,s.jsx)(d.td,{children:"returning"}),(0,s.jsx)(d.td,{children:"varying"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"collate"}),(0,s.jsx)(d.td,{children:"exp"}),(0,s.jsx)(d.td,{children:"min"}),(0,s.jsx)(d.td,{children:"returns"}),(0,s.jsx)(d.td,{children:"var_pop"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"collation"}),(0,s.jsx)(d.td,{children:"external"}),(0,s.jsx)(d.td,{children:"minute"}),(0,s.jsx)(d.td,{children:"revoke"}),(0,s.jsx)(d.td,{children:"var_samp"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"collect"}),(0,s.jsx)(d.td,{children:"extract"}),(0,s.jsx)(d.td,{children:"mod"}),(0,s.jsx)(d.td,{children:"right"}),(0,s.jsx)(d.td,{children:"verbose"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"column"}),(0,s.jsx)(d.td,{children:"false"}),(0,s.jsx)(d.td,{children:"modifies"}),(0,s.jsx)(d.td,{children:"rollback"}),(0,s.jsx)(d.td,{children:"versioning"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"commit"}),(0,s.jsx)(d.td,{children:"fetch"}),(0,s.jsx)(d.td,{children:"module"}),(0,s.jsx)(d.td,{children:"rollup"}),(0,s.jsx)(d.td,{children:"view"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"concurrently"}),(0,s.jsx)(d.td,{children:"filter"}),(0,s.jsx)(d.td,{children:"month"}),(0,s.jsx)(d.td,{children:"row"}),(0,s.jsx)(d.td,{children:"when"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"condition"}),(0,s.jsx)(d.td,{children:"first"}),(0,s.jsx)(d.td,{children:"multiset"}),(0,s.jsx)(d.td,{children:"rows"}),(0,s.jsx)(d.td,{children:"whenever"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"connect"}),(0,s.jsx)(d.td,{children:"first_value"}),(0,s.jsx)(d.td,{children:"names"}),(0,s.jsx)(d.td,{children:"row_number"}),(0,s.jsx)(d.td,{children:"where"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"connection"}),(0,s.jsx)(d.td,{children:"float"}),(0,s.jsx)(d.td,{children:"national"}),(0,s.jsx)(d.td,{children:"running"}),(0,s.jsx)(d.td,{children:"width_bucket"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"constraint"}),(0,s.jsx)(d.td,{children:"floor"}),(0,s.jsx)(d.td,{children:"natural"}),(0,s.jsx)(d.td,{children:"savepoint"}),(0,s.jsx)(d.td,{children:"window"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"constraints"}),(0,s.jsx)(d.td,{children:"for"}),(0,s.jsx)(d.td,{children:"nchar"}),(0,s.jsx)(d.td,{children:"schema"}),(0,s.jsx)(d.td,{children:"with"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"contains"}),(0,s.jsx)(d.td,{children:"foreign"}),(0,s.jsx)(d.td,{children:"nclob"}),(0,s.jsx)(d.td,{children:"scope"}),(0,s.jsx)(d.td,{children:"within"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"continue"}),(0,s.jsx)(d.td,{children:"found"}),(0,s.jsx)(d.td,{children:"new"}),(0,s.jsx)(d.td,{children:"scroll"}),(0,s.jsx)(d.td,{children:"without"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"convert"}),(0,s.jsx)(d.td,{children:"frame_row"}),(0,s.jsx)(d.td,{children:"next"}),(0,s.jsx)(d.td,{children:"search"}),(0,s.jsx)(d.td,{children:"work"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"copy"}),(0,s.jsx)(d.td,{children:"free"}),(0,s.jsx)(d.td,{children:"no"}),(0,s.jsx)(d.td,{children:"second"}),(0,s.jsx)(d.td,{children:"write"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"corr"}),(0,s.jsx)(d.td,{children:"freeze"}),(0,s.jsx)(d.td,{children:"none"}),(0,s.jsx)(d.td,{children:"section"}),(0,s.jsx)(d.td,{children:"xml"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"corresponding"}),(0,s.jsx)(d.td,{children:"from"}),(0,s.jsx)(d.td,{children:"normalize"}),(0,s.jsx)(d.td,{children:"seek"}),(0,s.jsx)(d.td,{children:"xmlagg"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cos"}),(0,s.jsx)(d.td,{children:"full"}),(0,s.jsx)(d.td,{children:"not"}),(0,s.jsx)(d.td,{children:"select"}),(0,s.jsx)(d.td,{children:"xmlattributes"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cosh"}),(0,s.jsx)(d.td,{children:"function"}),(0,s.jsx)(d.td,{children:"notnull"}),(0,s.jsx)(d.td,{children:"sensitive"}),(0,s.jsx)(d.td,{children:"xmlbinary"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"count"}),(0,s.jsx)(d.td,{children:"fusion"}),(0,s.jsx)(d.td,{children:"nth_value"}),(0,s.jsx)(d.td,{children:"session"}),(0,s.jsx)(d.td,{children:"xmlcast"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"covar_pop"}),(0,s.jsx)(d.td,{children:"get"}),(0,s.jsx)(d.td,{children:"ntile"}),(0,s.jsx)(d.td,{children:"session_user"}),(0,s.jsx)(d.td,{children:"xmlcomment"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"covar_samp"}),(0,s.jsx)(d.td,{children:"global"}),(0,s.jsx)(d.td,{children:"null"}),(0,s.jsx)(d.td,{children:"set"}),(0,s.jsx)(d.td,{children:"xmlconcat"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"create"}),(0,s.jsx)(d.td,{children:"go"}),(0,s.jsx)(d.td,{children:"nullif"}),(0,s.jsx)(d.td,{children:"show"}),(0,s.jsx)(d.td,{children:"xmldocument"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cross"}),(0,s.jsx)(d.td,{children:"goto"}),(0,s.jsx)(d.td,{children:"numeric"}),(0,s.jsx)(d.td,{children:"similar"}),(0,s.jsx)(d.td,{children:"xmlelement"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cube"}),(0,s.jsx)(d.td,{children:"grant"}),(0,s.jsx)(d.td,{children:"occurrences_regex"}),(0,s.jsx)(d.td,{children:"sin"}),(0,s.jsx)(d.td,{children:"xmlexists"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cume_dist"}),(0,s.jsx)(d.td,{children:"group"}),(0,s.jsx)(d.td,{children:"octet_length"}),(0,s.jsx)(d.td,{children:"sinh"}),(0,s.jsx)(d.td,{children:"xmlforest"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current"}),(0,s.jsx)(d.td,{children:"grouping"}),(0,s.jsx)(d.td,{children:"of"}),(0,s.jsx)(d.td,{children:"size"}),(0,s.jsx)(d.td,{children:"xmliterate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_catalog"}),(0,s.jsx)(d.td,{children:"groups"}),(0,s.jsx)(d.td,{children:"offset"}),(0,s.jsx)(d.td,{children:"skip"}),(0,s.jsx)(d.td,{children:"xmlnamespaces"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_date"}),(0,s.jsx)(d.td,{children:"having"}),(0,s.jsx)(d.td,{children:"old"}),(0,s.jsx)(d.td,{children:"smallint"}),(0,s.jsx)(d.td,{children:"xmlparse"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_default_transform_group"}),(0,s.jsx)(d.td,{children:"hold"}),(0,s.jsx)(d.td,{children:"omit"}),(0,s.jsx)(d.td,{children:"some"}),(0,s.jsx)(d.td,{children:"xmlpi"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_path"}),(0,s.jsx)(d.td,{children:"hour"}),(0,s.jsx)(d.td,{children:"on"}),(0,s.jsx)(d.td,{children:"space"}),(0,s.jsx)(d.td,{children:"xmlquery"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_role"}),(0,s.jsx)(d.td,{children:"identity"}),(0,s.jsx)(d.td,{children:"one"}),(0,s.jsx)(d.td,{children:"specific"}),(0,s.jsx)(d.td,{children:"xmlserialize"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_row"}),(0,s.jsx)(d.td,{children:"ilike"}),(0,s.jsx)(d.td,{children:"only"}),(0,s.jsx)(d.td,{children:"specifictype"}),(0,s.jsx)(d.td,{children:"xmltable"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_schema"}),(0,s.jsx)(d.td,{children:"immediate"}),(0,s.jsx)(d.td,{children:"open"}),(0,s.jsx)(d.td,{children:"sql"}),(0,s.jsx)(d.td,{children:"xmltext"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_time"}),(0,s.jsx)(d.td,{children:"import"}),(0,s.jsx)(d.td,{children:"option"}),(0,s.jsx)(d.td,{children:"sqlcode"}),(0,s.jsx)(d.td,{children:"xmlvalidate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_timestamp"}),(0,s.jsx)(d.td,{children:"in"}),(0,s.jsx)(d.td,{children:"or"}),(0,s.jsx)(d.td,{children:"sqlerror"}),(0,s.jsx)(d.td,{children:"year"})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"changelog",children:"Changelog"}),"\n",(0,s.jsx)(d.p,{children:"The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed."}),"\n",(0,s.jsx)(d.p,{children:(0,s.jsx)(d.strong,{children:"Proceed with caution when editing materializations created with previous versions of this connector;\nediting always upgrades your materialization to the latest connector version."})}),"\n",(0,s.jsx)(d.h4,{id:"v4-2022-11-30",children:"V4: 2022-11-30"}),"\n",(0,s.jsx)(d.p,{children:"This version includes breaking changes to materialized table columns.\nThese provide more consistent column names and types, but tables created from previous versions of the connector may\nnot be compatible with this version."}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsx)(d.p,{children:"Capitalization is now preserved when fields in Flow are converted to Postgres column names.\nPreviously, fields containing uppercase letters were converted to lowercase."}),"\n"]}),"\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:["Field names and values of types ",(0,s.jsx)(d.code,{children:"date"}),", ",(0,s.jsx)(d.code,{children:"duration"}),", ",(0,s.jsx)(d.code,{children:"ipv4"}),", ",(0,s.jsx)(d.code,{children:"ipv6"}),", ",(0,s.jsx)(d.code,{children:"macaddr"}),", ",(0,s.jsx)(d.code,{children:"macaddr8"}),", and ",(0,s.jsx)(d.code,{children:"time"})," are now converted into\ntheir corresponding Postgres types.\nPreviously, only ",(0,s.jsx)(d.code,{children:"date-time"})," was converted, and all others were materialized as strings."]}),"\n"]}),"\n"]})]})}function x(e={}){const{wrapper:d}={...(0,t.R)(),...e.components};return d?(0,s.jsx)(d,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},28453:(e,d,r)=>{r.d(d,{R:()=>i,x:()=>l});var s=r(96540);const t={},n=s.createContext(t);function i(e){const d=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function l(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),s.createElement(n.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/0359e208.9032423a.js b/pr-preview/pr-1594/assets/js/0359e208.9032423a.js deleted file mode 100644 index a1dc41d365..0000000000 --- a/pr-preview/pr-1594/assets/js/0359e208.9032423a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1419],{53181:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var s=n(74848),r=n(28453);const i={},d="Databricks",a={id:"reference/Connectors/materialization-connectors/databricks",title:"Databricks",description:"This connector materializes Flow collections into tables in a Databricks SQL Warehouse.",source:"@site/docs/reference/Connectors/materialization-connectors/databricks.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/databricks",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/databricks.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google BigQuery",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery"},next:{title:"Elasticsearch",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Sync Schedule",id:"sync-schedule",level:2},{value:"Delta updates",id:"delta-updates",level:2},{value:"Reserved words",id:"reserved-words",level:2}];function o(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"databricks",children:"Databricks"}),"\n",(0,s.jsxs)(t.p,{children:["This connector materializes Flow collections into tables in a Databricks SQL Warehouse.\nIt allows both standard and ",(0,s.jsx)(t.a,{href:"#delta-updates",children:"delta updates"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["The connector first uploads data changes to a ",(0,s.jsx)(t.a,{href:"https://docs.databricks.com/en/sql/language-manual/sql-ref-volumes.html",children:"Databricks Unity Catalog Volume"}),".\nFrom there, it transactionally applies the changes to the Databricks tables."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://ghcr.io/estuary/materialize-databricks:dev",children:(0,s.jsx)(t.code,{children:"ghcr.io/estuary/materialize-databricks:dev"})})," provides the latest connector image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(t.p,{children:"To use this connector, you'll need:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["A Databricks account that includes:","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"A unity catalog"}),"\n",(0,s.jsx)(t.li,{children:"A SQL Warehouse"}),"\n",(0,s.jsxs)(t.li,{children:["A ",(0,s.jsx)(t.a,{href:"https://docs.databricks.com/api/workspace/schemas",children:"schema"})," \u2014 a logical grouping of tables in a catalog"]}),"\n",(0,s.jsx)(t.li,{children:"A user with a role assigned that grants the appropriate access levels to these resources."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,s.jsx)(t.admonition,{type:"tip",children:(0,s.jsxs)(t.p,{children:["If you haven't yet captured your data from its external source, start at the beginning of the ",(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"guide to create a dataflow"}),". You'll be referred back to this connector-specific documentation at the appropriate steps."]})}),"\n",(0,s.jsx)(t.h3,{id:"setup",children:"Setup"}),"\n",(0,s.jsxs)(t.p,{children:["You need to first create a SQL Warehouse if you don't already have one in your account. See ",(0,s.jsx)(t.a,{href:"https://docs.databricks.com/en/sql/admin/create-sql-warehouse.html",children:"Databricks documentation"})," on configuring a Databricks SQL Warehouse. After creating a SQL Warehouse, you can find the details necessary for connecting to it under the ",(0,s.jsx)(t.strong,{children:"Connection Details"})," tab."]}),"\n",(0,s.jsxs)(t.p,{children:["In order to save on costs, we recommend that you set the Auto Stop parameter for your SQL warehouse to the minimum available. Estuary's Databricks connector automatically delays updates to the destination according to the configured ",(0,s.jsx)(t.strong,{children:"Sync Schedule"})," (see configuration details below), with a default delay value of 30 minutes."]}),"\n",(0,s.jsxs)(t.p,{children:["You also need an access token for your user to be used by our connector, see the respective ",(0,s.jsx)(t.a,{href:"https://docs.databricks.com/en/administration-guide/access-control/tokens.html",children:"documentation"})," from Databricks on how to create an access token."]}),"\n",(0,s.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsx)(t.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a Databricks materialization, which will direct one or more of your Flow collections to new Databricks tables."}),"\n",(0,s.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Property"}),(0,s.jsx)(t.th,{children:"Title"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"}),(0,s.jsx)(t.th,{children:"Required/Default"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/address"})})}),(0,s.jsx)(t.td,{children:"Address"}),(0,s.jsxs)(t.td,{children:["Host and port of the SQL warehouse (in the form of host[",":port","]). Port 443 is used as the default if no specific port is provided."]}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/http_path"})})}),(0,s.jsx)(t.td,{children:"HTTP Path"}),(0,s.jsx)(t.td,{children:"HTTP path of your SQL warehouse"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/catalog_name"})})}),(0,s.jsx)(t.td,{children:"Catalog Name"}),(0,s.jsx)(t.td,{children:"Name of your Unity Catalog"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/schema_name"})})}),(0,s.jsx)(t.td,{children:"Schema Name"}),(0,s.jsx)(t.td,{children:"Default schema to materialize to"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.code,{children:"default"})," schema is used"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/credentials"})})}),(0,s.jsx)(t.td,{children:"Credentials"}),(0,s.jsx)(t.td,{children:"Authentication credentials"}),(0,s.jsx)(t.td,{children:"object"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/credentials/auth_type"})})}),(0,s.jsx)(t.td,{children:"Role"}),(0,s.jsxs)(t.td,{children:["Authentication type, set to ",(0,s.jsx)(t.code,{children:"PAT"})," for personal access token"]}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/credentials/personal_access_token"})})}),(0,s.jsx)(t.td,{children:"Role"}),(0,s.jsx)(t.td,{children:"Personal Access Token"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Property"}),(0,s.jsx)(t.th,{children:"Title"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"}),(0,s.jsx)(t.th,{children:"Required/Default"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/table"})})}),(0,s.jsx)(t.td,{children:"Table"}),(0,s.jsx)(t.td,{children:"Table name"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"/schema"})}),(0,s.jsx)(t.td,{children:"Alternative Schema"}),(0,s.jsx)(t.td,{children:"Alternative schema for this table"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"/delta_updates"})}),(0,s.jsx)(t.td,{children:"Delta updates"}),(0,s.jsxs)(t.td,{children:["Whether to use standard or ",(0,s.jsx)(t.a,{href:"#delta-updates",children:"delta updates"})]}),(0,s.jsx)(t.td,{children:"boolean"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"false"})})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:"\nmaterializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n \t connector:\n \t config:\n address: dbc-abcdefgh-a12b.cloud.databricks.com\n catalog_name: main\n http_path: /sql/1.0/warehouses/abcd123efgh4567\n schema_name: default\n credentials:\n auth_type: PAT\n personal_access_token: secret\n \t image: ghcr.io/estuary/materialize-databricks:dev\n # If you have multiple collections you need to materialize, add a binding for each one\n # to ensure complete data flow-through\n bindings:\n \t- resource:\n \ttable: ${table_name}\n schema: default\n source: ${PREFIX}/${source_collection}\n"})}),"\n",(0,s.jsx)(t.h2,{id:"sync-schedule",children:"Sync Schedule"}),"\n",(0,s.jsxs)(t.p,{children:["This connector supports configuring a schedule for sync frequency. You can read\nabout how to configure this ",(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/materialization-sync-schedule",children:"here"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,s.jsxs)(t.p,{children:["This connector supports both standard (merge) and ",(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]}),"\n",(0,s.jsx)(t.p,{children:"Enabling delta updates will prevent Flow from querying for documents in your Databricks table, which can reduce latency and costs for large datasets.\nIf you're certain that all events will have unique keys, enabling delta updates is a simple way to improve\nperformance with no effect on the output.\nHowever, enabling delta updates is not suitable for all workflows, as the resulting table in Databricks won't be fully reduced."}),"\n",(0,s.jsx)(t.p,{children:"You can enable delta updates on a per-binding basis:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:" bindings:\n \t- resource:\n \ttable: ${table_name}\n schema: default\n delta_updates: true\n source: ${PREFIX}/${source_collection}\n"})}),"\n",(0,s.jsx)(t.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,s.jsxs)(t.p,{children:["Databricks has a list of reserved words that must be quoted in order to be used as an identifier. Flow automatically quotes fields that are in the reserved words list. You can find this list in Databricks's documentation ",(0,s.jsx)(t.a,{href:"https://docs.databricks.com/en/sql/language-manual/sql-ref-reserved-words.html",children:"here"})," and in the table below."]}),"\n",(0,s.jsx)(t.admonition,{type:"caution",children:(0,s.jsxs)(t.p,{children:["In Databricks, objects created with quoted identifiers must always be referenced exactly as created, including the quotes. Otherwise, SQL statements and queries can result in errors. See the ",(0,s.jsx)(t.a,{href:"https://docs.databricks.com/en/sql-reference/identifiers-syntax.html#double-quoted-identifiers",children:"Databricks docs"}),"."]})}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Reserved words"}),(0,s.jsx)(t.th,{})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"ANTI"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"EXCEPT"}),(0,s.jsx)(t.td,{children:"FULL"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"INNER"}),(0,s.jsx)(t.td,{children:"INTERSECT"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"JOIN"}),(0,s.jsx)(t.td,{children:"LATERAL"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"LEFT"}),(0,s.jsx)(t.td,{children:"MINUS"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"NATURAL"}),(0,s.jsx)(t.td,{children:"ON"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"RIGHT"}),(0,s.jsx)(t.td,{children:"SEMI"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"SEMI"}),(0,s.jsx)(t.td,{children:"USING"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"NULL"}),(0,s.jsx)(t.td,{children:"DEFAULT"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"TRUE"}),(0,s.jsx)(t.td,{children:"FALSE"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"CROSS"}),(0,s.jsx)(t.td,{})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>d,x:()=>a});var s=n(96540);const r={},i=s.createContext(r);function d(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/04c11cf4.2c889b63.js b/pr-preview/pr-1594/assets/js/04c11cf4.2c889b63.js deleted file mode 100644 index 27cdc003e7..0000000000 --- a/pr-preview/pr-1594/assets/js/04c11cf4.2c889b63.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6221],{16764:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var i=t(74848),o=t(28453);const r={},s="Projections",a={id:"concepts/advanced/projections",title:"Projections",description:"Projections are an advanced concept of Flow.",source:"@site/docs/concepts/advanced/projections.md",sourceDirName:"concepts/advanced",slug:"/concepts/advanced/projections",permalink:"/pr-preview/pr-1594/concepts/advanced/projections",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/advanced/projections.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Logs and statistics",permalink:"/pr-preview/pr-1594/concepts/advanced/logs-stats"},next:{title:"Task shards",permalink:"/pr-preview/pr-1594/concepts/advanced/shards"}},c={},l=[{value:"Logical partitions",id:"logical-partitions",level:2},{value:"Partition selectors",id:"partition-selectors",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"projections",children:"Projections"}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Projections are an advanced concept of Flow.\nYou can use Flow without knowing the details of projections,\nbut this section may help you better understand how Flow works."})}),"\n",(0,i.jsx)(n.p,{children:"Flow documents are arbitrary JSON, and may contain multiple levels of hierarchy and nesting.\nHowever, systems that Flow integrates with often model flat tables of rows and columns, without hierarchy.\nOthers are somewhere in between."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Projections"})," are the means by which Flow translates between the documents\nof a collection and a table representation.\nA projection defines a mapping between a structured document location,\ngiven as a ",(0,i.jsx)(n.a,{href:"https://tools.ietf.org/html/rfc6901",children:"JSON-Pointer"}),",\nand a corresponding ",(0,i.jsx)(n.strong,{children:"field"})," name used as, for example, a CSV file header or SQL table column."]}),"\n",(0,i.jsxs)(n.p,{children:["Many projections are inferred automatically from a collection\u2019s JSON schema,\nusing a field that is simply the JSON Pointer with its leading slash removed.\nFor example, a schema scalar with pointer ",(0,i.jsx)(n.code,{children:"/myScalar"})," will generate a projection with field ",(0,i.jsx)(n.code,{children:"myScalar"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"You can supplement by providing additional collection projections,\nand a document location can have more than one projection field that references it:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'collections:\n acmeCo/user-sessions:\n schema: session.schema.yaml\n key: [/user/id, /timestamp]\n projections:\n # A "user/id" projection field is automatically inferred.\n # Add an additional field that doesn\'t have a slash.\n user_id: /user/id\n # Partly decompose a nested array of requests into a handful of named projections.\n "first request": /requests/0\n "second request": /requests/1\n "third request": /requests/2\n'})}),"\n",(0,i.jsx)(n.h2,{id:"logical-partitions",children:"Logical partitions"}),"\n",(0,i.jsx)(n.p,{children:"Projections can also be used to logically partition a collection,\nspecified as a longer-form variant of a projection definition:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/user-sessions:\n schema: session.schema.yaml\n key: [/user/id, /timestamp]\n projections:\n country:\n location: /country\n partition: true\n device:\n location: /agent/type\n partition: true\n network:\n location: /agent/network\n partition: true\n"})}),"\n",(0,i.jsx)(n.p,{children:"Logical partitions isolate the storage of documents\nby their differing values for partitioned fields.\nFlow extracts partitioned fields from each document,\nand every unique combination of partitioned fields\nis a separate logical partition."}),"\n",(0,i.jsxs)(n.p,{children:["Every logical partition has one or more ",(0,i.jsx)(n.strong,{children:"physical partitions"}),"\ninto which their documents are written,\nwhich in turn controls\nhow files are arranged within cloud storage."]}),"\n",(0,i.jsx)(n.p,{children:'For example, a document of "acmeCo/user-sessions" like:'}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{"country": "CA", "agent": {"type": "iPhone", "network": "LTE"}, ...}\n'})}),"\n",(0,i.jsx)(n.p,{children:"Might produce files in cloud storage like:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"s3://bucket/example/sessions/country=CA/device=iPhone/network=LTE/pivot=00/utc_date=2020-11-04/utc_hour=16/.gz\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"country"}),", ",(0,i.jsx)(n.code,{children:"device"}),", and ",(0,i.jsx)(n.code,{children:"network"})," together identify a ",(0,i.jsx)(n.em,{children:"logical partition"}),",\nwhile ",(0,i.jsx)(n.code,{children:"pivot"})," identifies a ",(0,i.jsx)(n.em,{children:"physical partition"}),".\n",(0,i.jsx)(n.code,{children:"utc_date"})," and ",(0,i.jsx)(n.code,{children:"utc_hour"})," is the time at which the journal fragment was created."]})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/journals#physical-partitions",children:"Learn more about physical partitions"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"partition-selectors",children:"Partition selectors"}),"\n",(0,i.jsxs)(n.p,{children:["When reading from a collection, Flow catalog entities like derivations, materializations,\nand tests can provide a ",(0,i.jsx)(n.strong,{children:"partition selector"}),", which identifies the subset\nof partitions that should be read from a source collection:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'# Partition selectors are included as part of a larger entity,\n# such as a derivation or materialization.\npartitions:\n # `include` selects partitioned fields and corresponding values that\n # must be matched in order for a partition to be processed.\n # All of the included fields must be matched.\n # Default: All partitions are included. type: object\n include:\n # Include partitions from North America.\n country: [US, CA]\n # AND where the device is a mobile phone.\n device: [iPhone, Android]\n\n # `exclude` selects partitioned fields and corresponding values which,\n # if matched, exclude the partition from being processed.\n # A match of any of the excluded fields will exclude the partition.\n # Default: No partitions are excluded. type: object\n exclude:\n # Skip sessions which were over a 3G network.\n network: ["3G"]\n'})}),"\n",(0,i.jsx)(n.p,{children:"Partition selectors are efficient as they allow Flow to altogether\navoid reading documents that aren\u2019t needed."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var i=t(96540);const o={},r=i.createContext(o);function s(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/061adc4c.1893b077.js b/pr-preview/pr-1594/assets/js/061adc4c.1893b077.js deleted file mode 100644 index 7d18bf2421..0000000000 --- a/pr-preview/pr-1594/assets/js/061adc4c.1893b077.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5039],{10150:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>h,frontMatter:()=>c,metadata:()=>o,toc:()=>l});var t=i(74848),r=i(28453);const c={},s="Mailchimp",o={id:"reference/Connectors/capture-connectors/mailchimp",title:"Mailchimp",description:"This connector captures data from a Mailchimp account.",source:"@site/docs/reference/Connectors/capture-connectors/mailchimp.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/mailchimp",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/mailchimp.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"LinkedIn Pages",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages"},next:{title:"MariaDB",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/"}},a={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with Mailchimp in the Flow web app",id:"using-oauth2-to-authenticate-with-mailchimp-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually",id:"configuring-the-connector-specification-manually",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"mailchimp",children:"Mailchimp"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from a Mailchimp account."}),"\n",(0,t.jsx)(n.p,{children:"Three data resources are supported, each of which is mapped to a Flow collection: lists, campaigns, and email activity."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-mailchimp:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-mailchimp:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/mailchimp",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"There are two ways to authenticate with MailChimp when capturing data: using OAuth2, and manually, with an API key.\nTheir prerequisites differ."}),"\n",(0,t.jsx)(n.p,{children:"OAuth is recommended for simplicity in the Flow web app;\nthe API key method is the only supported method using the command line."}),"\n",(0,t.jsx)(n.h3,{id:"using-oauth2-to-authenticate-with-mailchimp-in-the-flow-web-app",children:"Using OAuth2 to authenticate with Mailchimp in the Flow web app"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"A Mailchimp account"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"configuring-the-connector-specification-manually",children:"Configuring the connector specification manually"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"A Mailchimp account"}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A Mailchimp ",(0,t.jsx)(n.a,{href:"https://mailchimp.com/developer/marketing/guides/quick-start/#generate-your-api-key",children:"API key"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Mailchimp source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsx)(n.p,{children:"The following properties reflect the API Key authentication method."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials"})})}),(0,t.jsx)(n.td,{children:"Authentication"}),(0,t.jsx)(n.td,{children:"Authentication Type and Details"}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/auth_type"})})}),(0,t.jsx)(n.td,{children:"Authentication Type"}),(0,t.jsxs)(n.td,{children:["Authentication type. Set to ",(0,t.jsx)(n.code,{children:"apikey"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/apikey"})})}),(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"Your Mailchimp API key"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Resource"}),(0,t.jsxs)(n.td,{children:["Mailchimp ",(0,t.jsx)(n.code,{children:"lists"}),", ",(0,t.jsx)(n.code,{children:"campaigns"}),", or ",(0,t.jsx)(n.code,{children:"email_activity"})]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsxs)(n.td,{children:["Connection method. Always set to ",(0,t.jsx)(n.code,{children:"incremental"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-mailchimp:dev\n config:\n credentials:\n auth_type: apikey\n apikey: \n bindings:\n - resource:\n stream: lists\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: campaigns\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: email_activity\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>s,x:()=>o});var t=i(96540);const r={},c=t.createContext(r);function s(e){const n=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/07003cee.b4545e62.js b/pr-preview/pr-1594/assets/js/07003cee.b4545e62.js deleted file mode 100644 index fc3baaa949..0000000000 --- a/pr-preview/pr-1594/assets/js/07003cee.b4545e62.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1036],{2157:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>a,toc:()=>h});var t=s(74848),r=s(28453),i=s(11470),c=s(19365);const l={},o="Amazon S3",a={id:"reference/Connectors/capture-connectors/amazon-s3",title:"Amazon S3",description:"This connector captures data from an Amazon S3 bucket.",source:"@site/docs/reference/Connectors/capture-connectors/amazon-s3.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/amazon-s3",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/amazon-s3.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amazon Redshift",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift"},next:{title:"Amazon SQS",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs"}},d={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup: Public buckets",id:"setup-public-buckets",level:3},{value:"Setup: Accessing with a user account",id:"setup-accessing-with-a-user-account",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Advanced: Parsing cloud storage data",id:"advanced-parsing-cloud-storage-data",level:3},{value:"CSV configuration",id:"csv-configuration",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"amazon-s3",children:"Amazon S3"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from an Amazon S3 bucket."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-s3:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-s3:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.p,{children:["You can use this connector to capture data from an entire S3 bucket or for a ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html",children:"prefix"})," within a bucket.\nThis bucket or prefix must be either be:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Publicly accessible and allowing anonymous reads."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Accessible via a root or ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html",children:"IAM user"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["In either case, you'll need an ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html",children:"access policy"}),".\nPolicies in AWS are JSON objects that define permissions. You attach them to ",(0,t.jsx)(n.em,{children:"resources"}),", which include both IAM users and S3 buckets."]}),"\n",(0,t.jsx)(n.p,{children:"See the steps below to set up access."}),"\n",(0,t.jsx)(n.h3,{id:"setup-public-buckets",children:"Setup: Public buckets"}),"\n",(0,t.jsx)(n.p,{children:"For a public buckets, the bucket access policy must allow anonymous reads on the whole bucket or a specific prefix."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Create a bucket policy using the templates below."}),"\n"]}),"\n",(0,t.jsxs)(i.A,{children:[(0,t.jsx)(c.A,{value:"Anonymous reads policy - Full bucket",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:"file=./policies/public-full-bucket.json",children:'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Sid": "BucketAnonymousRead",\n "Effect": "Allow",\n "Principal": "*",\n "Action": [\n "s3:ListBucket"\n ],\n "Resource": [\n "arn:aws:s3:::EXAMPLE_BUCKET"\n ]\n },\n {\n "Effect": "Allow",\n "Principal": "*",\n "Action": [\n "s3:GetObject"\n ],\n "Resource": [\n "arn:aws:s3:::EXAMPLE_BUCKET/*"\n ]\n }\n ]\n}\n'})})}),(0,t.jsx)(c.A,{value:"Anonymous reads policy - Specific prefix",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:"file=./policies/public-prefix-only.json",children:'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Sid": "BucketPrefixAnonymousRead",\n "Effect": "Allow",\n "Principal": "*",\n "Action": [\n "s3:ListBucket"\n ],\n "Resource": [\n "arn:aws:s3:::EXAMPLE_BUCKET"\n ],\n "Condition": {\n "StringLike": {\n "s3:prefix": [\n "EXAMPLE_PREFIX",\n "EXAMPLE_PREFIX/*"\n ]\n }\n }\n },\n {\n "Effect": "Allow",\n "Principal": "*",\n "Action": [\n "s3:GetObject"\n ],\n "Resource": [\n "arn:aws:s3:::EXAMPLE_BUCKET/EXAMPLE_PREFIX/*"\n ]\n }\n ]\n}\n'})})})]}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html",children:"Add the policy to your bucket"}),". Paste over the existing policy and resolve any errors or warnings before saving."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Confirm that the ",(0,t.jsx)(n.strong,{children:"Block public access"})," setting on the bucket is ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteAccessPermissionsReqd.html",children:"disabled"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"setup-accessing-with-a-user-account",children:"Setup: Accessing with a user account"}),"\n",(0,t.jsxs)(n.p,{children:["For buckets accessed by a user account, you'll need the AWS ",(0,t.jsx)(n.strong,{children:"access key"})," and ",(0,t.jsx)(n.strong,{children:"secret access key"})," for the user.\nYou'll also need to apply an access policy to the user to grant access to the specific bucket or prefix."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html",children:"Create an IAM user"})," if you don't yet have one to use with Flow."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Note the user's access key and secret access key.\nSee the ",(0,t.jsx)(n.a,{href:"https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/",children:"AWS blog"})," for help finding these credentials."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create an IAM policy using the templates below."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.A,{children:[(0,t.jsx)(c.A,{value:"IAM user access policy - Full bucket",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:"file=./policies/iam-user-full-bucket.json",children:'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Sid": "UserAccessFullBucket",\n "Effect": "Allow",\n "Action": [\n "s3:ListBucket"\n ],\n "Resource": [\n "arn:aws:s3:::EXAMPLE_BUCKET"\n ]\n },\n {\n "Effect": "Allow",\n "Action": [\n "s3:GetObject"\n ],\n "Resource": [\n "arn:aws:s3:::EXAMPLE_BUCKET/*"\n ]\n }\n ]\n}\n'})})}),(0,t.jsx)(c.A,{value:"IAM user access policy - Specific prefix",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:"file=./policies/iam-user-prefix-only.json",children:'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Sid": "UserAccessBucketPrefix",\n "Effect": "Allow",\n "Action": [\n "s3:ListBucket"\n ],\n "Resource": [\n "arn:aws:s3:::EXAMPLE_BUCKET"\n ],\n "Condition": {\n "StringLike": {\n "s3:prefix": [\n "EXAMPLE_PREFIX",\n "EXAMPLE_PREFIX/*"\n ]\n }\n }\n },\n {\n "Effect": "Allow",\n "Action": [\n "s3:GetObject"\n ],\n "Resource": [\n "arn:aws:s3:::EXAMPLE_BUCKET/EXAMPLE_PREFIX/*"\n ]\n }\n ]\n}\n'})})})]}),"\n",(0,t.jsxs)(n.ol,{start:"4",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor",children:"Add the policy"})," to AWS."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console",children:"Attach the policy to the IAM user"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the S3 source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced"})}),(0,t.jsx)(n.td,{}),(0,t.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/ascendingKeys"})}),(0,t.jsx)(n.td,{children:"Ascending Keys"}),(0,t.jsx)(n.td,{children:"Improve sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors."}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/endpoint"})}),(0,t.jsx)(n.td,{children:"AWS Endpoint"}),(0,t.jsx)(n.td,{children:"The AWS endpoint URI to connect to. Use if you're capturing from a S3-compatible API that isn't provided by AWS"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/awsAccessKeyId"})}),(0,t.jsx)(n.td,{children:"AWS Access Key ID"}),(0,t.jsx)(n.td,{children:"Part of the AWS credentials that will be used to connect to S3. Required unless the bucket is public and allows anonymous listings and reads."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/awsSecretAccessKey"})}),(0,t.jsx)(n.td,{children:"AWS Secret Access Key"}),(0,t.jsx)(n.td,{children:"Part of the AWS credentials that will be used to connect to S3. Required unless the bucket is public and allows anonymous listings and reads."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/bucket"})})}),(0,t.jsx)(n.td,{children:"Bucket"}),(0,t.jsx)(n.td,{children:"Name of the S3 bucket"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/matchKeys"})}),(0,t.jsx)(n.td,{children:"Match Keys"}),(0,t.jsx)(n.td,{children:'Filter applied to all object keys under the prefix. If provided, only objects whose absolute path matches this regex will be read. For example, you can use ".*\\.json" to only capture json files.'}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/parser"})}),(0,t.jsx)(n.td,{children:"Parser Configuration"}),(0,t.jsx)(n.td,{children:"Configures how files are parsed (optional, see below)"}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/parser/compression"})}),(0,t.jsx)(n.td,{children:"Compression"}),(0,t.jsx)(n.td,{children:"Determines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically."}),(0,t.jsx)(n.td,{children:"null, string"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"null"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/parser/format"})}),(0,t.jsx)(n.td,{children:"Format"}),(0,t.jsx)(n.td,{children:"Determines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available."}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'{"type":"auto"}'})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/parser/format/type"})}),(0,t.jsx)(n.td,{children:"Type"}),(0,t.jsx)(n.td,{}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/prefix"})}),(0,t.jsx)(n.td,{children:"Prefix"}),(0,t.jsx)(n.td,{children:"Prefix within the bucket to capture from. Use this to limit the data in your capture."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/region"})})}),(0,t.jsx)(n.td,{children:"AWS Region"}),(0,t.jsx)(n.td,{children:'The name of the AWS region where the S3 bucket is located. "us-east-1" is a popular default you can try, if you\'re unsure what to put here.'}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsxs)(n.td,{children:["Required, ",(0,t.jsx)(n.code,{children:'"us-east-1"'})]})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Prefix"}),(0,t.jsxs)(n.td,{children:["Path to dataset in the bucket, formatted as ",(0,t.jsx)(n.code,{children:"bucket-name/prefix-name"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-s3:dev\n config:\n bucket: "my-bucket"\n parser:\n compression: zip\n format:\n type: csv\n config:\n delimiter: ","\n encoding: UTF-8\n errorThreshold: 5\n headers: [ID, username, first_name, last_name]\n lineEnding: "\\\\r"\n quote: "\\""\n region: "us-east-1"\n bindings:\n - resource:\n stream: my-bucket/${PREFIX}\n target: ${PREFIX}/${COLLECTION_NAME}\n\n'})}),"\n",(0,t.jsx)(n.p,{children:"Your capture definition may be more complex, with additional bindings for different S3 prefixes within the same bucket."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,t.jsx)(n.h3,{id:"advanced-parsing-cloud-storage-data",children:"Advanced: Parsing cloud storage data"}),"\n",(0,t.jsx)(n.p,{children:"Cloud storage platforms like S3 can support a wider variety of file types\nthan other data source systems. For each of these file types, Flow must parse\nand translate data into collections with defined fields and JSON schemas."}),"\n",(0,t.jsx)(n.p,{children:"By default, the parser will automatically detect the type and shape of the data in your bucket,\nso you won't need to change the parser configuration for most captures."}),"\n",(0,t.jsxs)(n.p,{children:["However, the automatic detection may be incorrect in some cases.\nTo fix or prevent this, you can provide explicit information in the parser configuration,\nwhich is part of the ",(0,t.jsx)(n.a,{href:"#endpoint",children:"endpoint configuration"})," for this connector."]}),"\n",(0,t.jsx)(n.p,{children:"The parser configuration includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Compression"}),": Specify how the bucket contents are compressed.\nIf no compression type is specified, the connector will try to determine the compression type automatically.\nOptions are:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"zip"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"gzip"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"zstd"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"none"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Format"}),": Specify the data format, which determines how it will be parsed.\nOptions are:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Auto"}),": If no format is specified, the connector will try to determine it automatically."]}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Avro"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"CSV"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"JSON"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Protobuf"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"W3C Extended Log"})}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsx)(n.p,{children:"At this time, Flow only supports S3 captures with data of a single file type.\nSupport for multiple file types, which can be configured on a per-binding basis,\nwill be added in the future."}),(0,t.jsx)(n.p,{children:"For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type."})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"csv-configuration",children:"CSV configuration"}),"\n",(0,t.jsx)(n.p,{children:"CSV files include several additional properties that are important to the parser.\nIn most cases, Flow is able to automatically determine the correct values,\nbut you may need to specify for unusual datasets. These properties are:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Delimiter"}),". Options are:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Comma (",(0,t.jsx)(n.code,{children:'","'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Pipe (",(0,t.jsx)(n.code,{children:'"|"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Space (",(0,t.jsx)(n.code,{children:'"0x20"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Semicolon (",(0,t.jsx)(n.code,{children:'";"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Tab (",(0,t.jsx)(n.code,{children:'"0x09"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Vertical tab (",(0,t.jsx)(n.code,{children:'"0x0B"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Unit separator (",(0,t.jsx)(n.code,{children:'"0x1F"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["SOH (",(0,t.jsx)(n.code,{children:'"0x01"'}),")"]}),"\n",(0,t.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Encoding"})," type, specified by its ",(0,t.jsx)(n.a,{href:"https://encoding.spec.whatwg.org/#names-and-labels",children:"WHATWG label"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Optionally, an ",(0,t.jsx)(n.strong,{children:"Error threshold"}),", as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Escape characters"}),". Options are:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Backslash (",(0,t.jsx)(n.code,{children:'"\\\\"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Disable escapes (",(0,t.jsx)(n.code,{children:'""'}),")"]}),"\n",(0,t.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Optionally, a list of column ",(0,t.jsx)(n.strong,{children:"Headers"}),", if not already included in the first row of the CSV file."]}),"\n",(0,t.jsx)(n.p,{children:"If any headers are provided, it is assumed that the provided list of headers is complete and authoritative.\nThe first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Line ending"})," values"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["CRLF (",(0,t.jsx)(n.code,{children:'"\\\\r\\\\n"'}),") (Windows)"]}),"\n",(0,t.jsxs)(n.li,{children:["CR (",(0,t.jsx)(n.code,{children:'"\\\\r"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["LF (",(0,t.jsx)(n.code,{children:'"\\\\n"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Record Separator (",(0,t.jsx)(n.code,{children:'"0x1E"'}),")"]}),"\n",(0,t.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Quote character"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Double Quote (",(0,t.jsx)(n.code,{children:'"\\""'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Single Quote (",(0,t.jsx)(n.code,{children:'"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Disable Quoting (",(0,t.jsx)(n.code,{children:'""'}),")"]}),"\n",(0,t.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The sample specification ",(0,t.jsx)(n.a,{href:"#sample",children:"above"})," includes these fields."]})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},19365:(e,n,s)=>{s.d(n,{A:()=>c});s(96540);var t=s(34164);const r={tabItem:"tabItem_Ymn6"};var i=s(74848);function c(e){let{children:n,hidden:s,className:c}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,t.A)(r.tabItem,c),hidden:s,children:n})}},11470:(e,n,s)=>{s.d(n,{A:()=>v});var t=s(96540),r=s(34164),i=s(23104),c=s(56347),l=s(205),o=s(57485),a=s(31682),d=s(70679);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:t,default:r}}=e;return{value:n,label:s,attributes:t,default:r}}))}(s);return function(e){const n=(0,a.X)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function p(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:s}=e;const r=(0,c.W6)(),i=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,o.aZ)(i),(0,t.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(r.location.search);n.set(i,e),r.replace({...r.location,search:n.toString()})}),[i,r])]}function j(e){const{defaultValue:n,queryString:s=!1,groupId:r}=e,i=u(e),[c,o]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=s.find((e=>e.default))??s[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:i}))),[a,h]=x({queryString:s,groupId:r}),[j,f]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,i]=(0,d.Dv)(s);return[r,(0,t.useCallback)((e=>{s&&i.set(e)}),[s,i])]}({groupId:r}),m=(()=>{const e=a??j;return p({value:e,tabValues:i})?e:null})();(0,l.A)((()=>{m&&o(m)}),[m]);return{selectedValue:c,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),f(e)}),[h,f,i]),tabValues:i}}var f=s(92303);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=s(74848);function g(e){let{className:n,block:s,selectedValue:t,selectValue:c,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:a}=(0,i.a_)(),d=e=>{const n=e.currentTarget,s=o.indexOf(n),r=l[s].value;r!==t&&(a(n),c(r))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=o.indexOf(e.currentTarget)+1;n=o[s]??o[0];break}case"ArrowLeft":{const s=o.indexOf(e.currentTarget)-1;n=o[s]??o[o.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":s},n),children:l.map((e=>{let{value:n,label:s,attributes:i}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>o.push(e),onKeyDown:h,onClick:d,...i,className:(0,r.A)("tabs__item",m.tabItem,i?.className,{"tabs__item--active":t===n}),children:s??n},n)}))})}function y(e){let{lazy:n,children:s,selectedValue:r}=e;const i=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===r));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function w(e){const n=j(e);return(0,b.jsxs)("div",{className:(0,r.A)("tabs-container",m.tabList),children:[(0,b.jsx)(g,{...n,...e}),(0,b.jsx)(y,{...n,...e})]})}function v(e){const n=(0,f.A)();return(0,b.jsx)(w,{...e,children:h(e.children)},String(n))}},28453:(e,n,s)=>{s.d(n,{R:()=>c,x:()=>l});var t=s(96540);const r={},i=t.createContext(r);function c(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/08b3569b.177052bf.js b/pr-preview/pr-1594/assets/js/08b3569b.177052bf.js deleted file mode 100644 index a230ad4c2d..0000000000 --- a/pr-preview/pr-1594/assets/js/08b3569b.177052bf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7746],{60961:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var t=r(74848),s=r(28453);const i={},o="Tinybird",a={id:"reference/Connectors/dekaf/dekaf-tinybird",title:"Tinybird",description:"In this guide, you'll learn how to use Estuary Flow to push data streams to Tinybird.",source:"@site/docs/reference/Connectors/dekaf/dekaf-tinybird.md",sourceDirName:"reference/Connectors/dekaf",slug:"/reference/Connectors/dekaf/dekaf-tinybird",permalink:"/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/dekaf/dekaf-tinybird.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Dekaf integrations",permalink:"/pr-preview/pr-1594/reference/Connectors/dekaf/"},next:{title:"Materialization connectors",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/"}},c={},d=[{value:"Prerequisites",id:"prerequisites",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"tinybird",children:"Tinybird"}),"\n",(0,t.jsx)(n.p,{children:"In this guide, you'll learn how to use Estuary Flow to push data streams to Tinybird."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.tinybird.co/",children:"Tinybird"})," is a data platform for user-facing analytics."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"An Estuary account & collection"}),"\n",(0,t.jsx)(n.li,{children:"A Tinybird account & Workspace"}),"\n"]}),"\n",(0,t.jsx)(n.h1,{id:"connecting-estuary-flow-to-tinybird",children:"Connecting Estuary Flow to Tinybird"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a new access token to use for the Tinybird connection. You can do this from the Estuary Admin Dashboard.\n",(0,t.jsx)(n.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//Group_22_95a85083d4/Group_22_95a85083d4.png",alt:"Export Dekaf Access Token"})]}),"\n",(0,t.jsxs)(n.li,{children:["In your Tinybird Workspace, create a new Data Source and use the Kafka Connector.\n",(0,t.jsx)(n.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//Screenshot_2024_08_23_at_15_16_39_35b06dad77/Screenshot_2024_08_23_at_15_16_39_35b06dad77.png",alt:"Configure Estuary Flow Data Source"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"To configure the connection details, use the following settings."}),"\n",(0,t.jsxs)(n.p,{children:["Bootstrap servers: ",(0,t.jsx)(n.code,{children:"dekaf.estuary.dev"}),"\nSASL Mechanism: ",(0,t.jsx)(n.code,{children:"PLAIN"}),"\nSASL Username: ",(0,t.jsx)(n.code,{children:"{}"}),"\nSASL Password: ",(0,t.jsx)(n.code,{children:"Estuary Refresh Token"})," (Generate your token in the Estuary Admin Dashboard)"]}),"\n",(0,t.jsx)(n.p,{children:"Tick the Decode Avro messages with Schema Register box, and use the following settings:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["URL: ",(0,t.jsx)(n.code,{children:"https://dekaf.estuary.dev"})]}),"\n",(0,t.jsxs)(n.li,{children:["Username: ",(0,t.jsx)(n.code,{children:"{}"})]}),"\n",(0,t.jsxs)(n.li,{children:["Password: ",(0,t.jsx)(n.code,{children:"The same Estuary Refresh Token as above"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//Screenshot_2024_08_23_at_15_16_46_374f7f8a12/Screenshot_2024_08_23_at_15_16_46_374f7f8a12.png",alt:"Configure Estuary Flow Schema Registry"})}),"\n",(0,t.jsx)(n.p,{children:"Click Next and you will see a list of topics. These topics are the collections you have in Estuary.\nSelect the collection you want to ingest into Tinybird, and click Next."}),"\n",(0,t.jsx)(n.p,{children:"Configure your consumer group as needed."}),"\n",(0,t.jsx)(n.p,{children:"Finally, you will see a preview of the Data Source schema. Feel free to make any modifications as required, then click\nCreate Data Source."}),"\n",(0,t.jsx)(n.p,{children:"This will complete the connection with Tinybird, and new data from the Estuary Flow collection will arrive in your\nTinybird Data Source in real-time."})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>a});var t=r(96540);const s={},i=t.createContext(s);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/08c8edc4.34819e19.js b/pr-preview/pr-1594/assets/js/08c8edc4.34819e19.js deleted file mode 100644 index 9303a52130..0000000000 --- a/pr-preview/pr-1594/assets/js/08c8edc4.34819e19.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9856],{9738:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var o=n(74848),r=n(28453);const i={},s="Intercom HTTP Ingest (Webhook)",c={id:"reference/Connectors/capture-connectors/intercom-ingest",title:"Intercom HTTP Ingest (Webhook)",description:"The Intercom HTTP Ingest connector allows you to capture data from incoming HTTP requests from Intercom.",source:"@site/docs/reference/Connectors/capture-connectors/intercom-ingest.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/intercom-ingest",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/intercom-ingest.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Intercom",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom"},next:{title:"Iterable",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable"}},a={},d=[{value:"Usage",id:"usage",level:2},{value:"Send sample data to Flow",id:"send-sample-data-to-flow",level:3},{value:"Configure a Intercom webhook",id:"configure-a-intercom-webhook",level:3},{value:"Webhook URLs",id:"webhook-urls",level:3},{value:"Authentication",id:"authentication",level:3},{value:"Webhook signature verification",id:"webhook-signature-verification",level:3},{value:"Endpoint Configuration",id:"endpoint-configuration",level:2},{value:"Resource configuration",id:"resource-configuration",level:2}];function l(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"intercom-http-ingest-webhook",children:"Intercom HTTP Ingest (Webhook)"}),"\n",(0,o.jsxs)(t.p,{children:["The Intercom HTTP Ingest connector allows you to capture data from ",(0,o.jsx)(t.em,{children:"incoming"})," HTTP requests from Intercom.\nA common use case is to capture webhook deliveries, turning them into a Flow collection."]}),"\n",(0,o.jsxs)(t.p,{children:["The connector is available for use in the Flow web application. For local development or open-source workflows, ",(0,o.jsx)(t.a,{href:"https://ghcr.io/estuary/source-http-ingest:dev",children:(0,o.jsx)(t.code,{children:"ghcr.io/estuary/source-http-ingest:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,o.jsx)(t.h2,{id:"usage",children:"Usage"}),"\n",(0,o.jsx)(t.p,{children:"This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific\nsystem or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source."}),"\n",(0,o.jsx)(t.p,{children:"This is useful primarily if you want to test out Flow or see how your webhook data will come over."}),"\n",(0,o.jsx)(t.p,{children:"To begin, use the web app to create a capture. Once published, the confirmation dialog displays\na unique URL for your public endpoint."}),"\n",(0,o.jsx)(t.p,{children:"You're now ready to send data to Flow."}),"\n",(0,o.jsx)(t.h3,{id:"send-sample-data-to-flow",children:"Send sample data to Flow"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Expand ",(0,o.jsx)(t.strong,{children:"POST"})," or ",(0,o.jsx)(t.strong,{children:"PUT"})," and click ",(0,o.jsx)(t.strong,{children:"Try it out"})," to send some example JSON documents using the UI. You can also copy the provided ",(0,o.jsx)(t.code,{children:"curl"})," commands to send data via the command line."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture.\nClick ",(0,o.jsx)(t.strong,{children:"Details"})," to view the data preview."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"configure-a-intercom-webhook",children:"Configure a Intercom webhook"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Navigate to your App in your Developer Hub and select the ",(0,o.jsx)(t.code,{children:"Webhooks"})," from the configuration options"]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Under ",(0,o.jsx)(t.code,{children:"Endpoint URL"})," enter in the unique URL generated for your Estuary Webhook endpoint in the format ",(0,o.jsx)(t.code,{children:"https:///webhook-data"})]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Configure the ",(0,o.jsx)(t.code,{children:"Topics"})," section to trigger on your preferred webhook events and click save. Optionally, you can select ",(0,o.jsx)(t.code,{children:"Send a test request"})," to preview how the data would be ingested into Estuary."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"webhook-urls",children:"Webhook URLs"}),"\n",(0,o.jsxs)(t.p,{children:["To determine the full URL, start with the base URL from the Flow web app (for example ",(0,o.jsx)(t.code,{children:"https://abc123-8080.us-central1.v1.estuary-data.dev"}),"), and then append the path."]}),"\n",(0,o.jsxs)(t.p,{children:["The path will be whatever is in the ",(0,o.jsx)(t.code,{children:"paths"})," endpoint configuration field (",(0,o.jsx)(t.code,{children:"/webhook-data"})," by default). For example, your full webhook URL would be ",(0,o.jsx)(t.code,{children:"https:///webhook-data"}),". You can add additional paths to ",(0,o.jsx)(t.code,{children:"paths"}),', and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you\'re editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to ',(0,o.jsx)(t.code,{children:"/my-webhook.json"}),", then the full URL for that binding would be ",(0,o.jsx)(t.code,{children:"https:///my-webhook.json"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["Any URL query parameters that are sent on the request will be captured and serialized under ",(0,o.jsx)(t.code,{children:"/_meta/query/*"})," the in documents. For example, a webhook request that's sent to ",(0,o.jsx)(t.code,{children:"/webhook-data?testKey=testValue"})," would result in a document like:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:'{\n "_meta": {\n "webhookId": "...",\n "query": {\n "testKey": "testValue"\n },\n ...\n }\n ...\n}\n'})}),"\n",(0,o.jsx)(t.h3,{id:"authentication",children:"Authentication"}),"\n",(0,o.jsxs)(t.p,{children:["The connector can optionally require each request to present an authentication token as part of an ",(0,o.jsx)(t.code,{children:"Authorization: Bearer "}),' HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an ',(0,o.jsx)(t.code,{children:"Authorization"})," header with the value of your token. For example, if you use an auth token value of ",(0,o.jsx)(t.code,{children:"mySecretToken"}),", then the header on each request must be ",(0,o.jsx)(t.code,{children:"Authorization: Bearer mySecretToken"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection."})," We recommend using authentication whenever possible."]}),"\n",(0,o.jsx)(t.h3,{id:"webhook-signature-verification",children:"Webhook signature verification"}),"\n",(0,o.jsxs)(t.p,{children:["This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact ",(0,o.jsx)(t.a,{href:"mailto://support@estuary.dev",children:(0,o.jsx)(t.code,{children:"support@estuary.dev"})})," and let us know."]}),"\n",(0,o.jsx)(t.h2,{id:"endpoint-configuration",children:"Endpoint Configuration"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Property"}),(0,o.jsx)(t.th,{children:"Title"}),(0,o.jsx)(t.th,{children:"Description"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Required/Default"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"****"}),(0,o.jsx)(t.td,{children:"EndpointConfig"}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"object"}),(0,o.jsx)(t.td,{children:"Required"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/require_auth_token"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"Optional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"null"})})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/paths"})}),(0,o.jsx)(t.td,{children:"URL Paths"}),(0,o.jsx)(t.td,{children:"List of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"null"})})]})]})]}),"\n",(0,o.jsx)(t.h2,{id:"resource-configuration",children:"Resource configuration"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Property"}),(0,o.jsx)(t.th,{children:"Title"}),(0,o.jsx)(t.th,{children:"Description"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Required/Default"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"****"}),(0,o.jsx)(t.td,{children:"ResourceConfig"}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"object"}),(0,o.jsx)(t.td,{children:"Required"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/idFromHeader"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"Set the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/path"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"The URL path to use for adding documents to this binding. Defaults to the name of the collection."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>c});var o=n(96540);const r={},i=o.createContext(r);function s(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/08cd1031.e390c4de.js b/pr-preview/pr-1594/assets/js/08cd1031.e390c4de.js deleted file mode 100644 index e0525d9c6e..0000000000 --- a/pr-preview/pr-1594/assets/js/08cd1031.e390c4de.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3073],{32627:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var r=t(74848),s=t(28453);const i={},c="Apache Kafka",o={id:"reference/Connectors/capture-connectors/apache-kafka",title:"Apache Kafka",description:"This connector captures streaming data from Apache Kafka topics.",source:"@site/docs/reference/Connectors/capture-connectors/apache-kafka.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/apache-kafka",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/apache-kafka.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amplitude",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude"},next:{title:"Azure Blob Storage",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage"}},a={},d=[{value:"Supported data types",id:"supported-data-types",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Authentication and connection security",id:"authentication-and-connection-security",level:3},{value:"AWS Managed Streaming Kafka (MSK)",id:"aws-managed-streaming-kafka-msk",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"apache-kafka",children:"Apache Kafka"}),"\n",(0,r.jsx)(n.p,{children:"This connector captures streaming data from Apache Kafka topics."}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://github.com/estuary/connectors/pkgs/container/source-kafka",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-kafka:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"supported-data-types",children:"Supported data types"}),"\n",(0,r.jsxs)(n.p,{children:["This connector supports Kafka messages that contain JSON data.\nFlow ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections",children:"collections"})," store data as JSON.\nBefore deploying this connector, you should modify ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas",children:"schema(s)"}),"\nof the Flow collection(s) you're creating to reflect the structure of your JSON Kafka messages."]}),"\n",(0,r.jsx)(n.p,{children:"At this time, the connector does not support other data types in Kafka messages."}),"\n",(0,r.jsx)(n.admonition,{title:"Beta",type:"info",children:(0,r.jsxs)(n.p,{children:["Support for Avro Kafka messages will be added soon. For more information, ",(0,r.jsx)(n.a,{href:"mailto:info@estuary.dev",children:"contact the Estuary team"}),"."]})}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["A Kafka cluster with:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://kafka.apache.org/documentation/#producerconfigs_bootstrap.servers",children:"bootstrap.servers"})," configured so that clients may connect via the desired host and port"]}),"\n",(0,r.jsx)(n.li,{children:"An authentication mechanism of choice set up (highly recommended for production environments)"}),"\n",(0,r.jsx)(n.li,{children:"Connection security enabled with TLS (highly recommended for production environments)"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"authentication-and-connection-security",children:"Authentication and connection security"}),"\n",(0,r.jsx)(n.p,{children:"Neither authentication nor connection security are enabled by default in your Kafka cluster, but both are important considerations.\nSimilarly, Flow's Kafka connectors do not strictly require authentication or connection security mechanisms.\nYou may choose to omit them for local development and testing; however, both are strongly encouraged for production environments."}),"\n",(0,r.jsxs)(n.p,{children:["A wide ",(0,r.jsx)(n.a,{href:"https://kafka.apache.org/documentation/#security_overview",children:"variety of authentication methods"})," is available in Kafka clusters.\nFlow supports SASL/SCRAM-SHA-256, SASL/SCRAM-SHA-512, and SASL/PLAIN. Behavior using other authentication methods is not guaranteed.\nWhen authentication details are not provided, the client connection will attempt to use PLAINTEXT (insecure) protocol."]}),"\n",(0,r.jsxs)(n.p,{children:["If you don't already have authentication enabled on your cluster, Estuary recommends either of listed ",(0,r.jsx)(n.a,{href:"https://kafka.apache.org/documentation/#security_sasl_scram",children:"SASL/SCRAM"})," methods.\nWith SCRAM, you set up a username and password, making it analogous to the traditional authentication mechanisms\nyou use in other applications."]}),"\n",(0,r.jsxs)(n.p,{children:['For connection security, Estuary recommends that you enable TLS encryption for your SASL mechanism of choice,\nas well as all other components of your cluster.\nNote that because TLS replaced now-deprecated SSL encryption, Kafka still uses the acronym "SSL" to refer to TLS encryption.\nSee ',(0,r.jsx)(n.a,{href:"https://docs.confluent.io/platform/current/kafka/authentication_ssl.html",children:"Confluent's documentation"})," for details."]}),"\n",(0,r.jsx)(n.admonition,{title:"Beta",type:"info",children:(0,r.jsx)(n.p,{children:"TLS encryption is currently the only supported connection security mechanism for this connector.\nOther connection security methods may be enabled in the future."})}),"\n",(0,r.jsx)(n.h3,{id:"aws-managed-streaming-kafka-msk",children:"AWS Managed Streaming Kafka (MSK)"}),"\n",(0,r.jsxs)(n.p,{children:["If using AWS Managed Streaming for Apache Kafka (MSK), you can use IAM authentication with our connector. Read more about IAM authentication with MSK in AWS docs: ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html",children:"IAM access control"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Additionally, you want to make sure that your VPC configuration allows inbound and outbound requests to ",(0,r.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Apache Kafka source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/bootstrap_servers"})})}),(0,r.jsx)(n.td,{children:"Bootstrap servers"}),(0,r.jsx)(n.td,{children:"The initial servers in the Kafka cluster to connect to, separated by commas. The Kafka client will be informed of the rest of the cluster nodes by connecting to one of these nodes."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/tls"})})}),(0,r.jsx)(n.td,{children:"TLS"}),(0,r.jsx)(n.td,{children:"TLS connection settings."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"system_certificates"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials"})}),(0,r.jsx)(n.td,{children:"Credentials"}),(0,r.jsx)(n.td,{children:"Connection details used to authenticate a client connection to Kafka via SASL."}),(0,r.jsx)(n.td,{children:"null, object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/auth_type"})}),(0,r.jsx)(n.td,{children:"Authentication type"}),(0,r.jsxs)(n.td,{children:["One of ",(0,r.jsx)(n.code,{children:"UserPassword"})," for SASL or ",(0,r.jsx)(n.code,{children:"AWS"})," for IAM authentication"]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/mechanism"})}),(0,r.jsx)(n.td,{children:"SASL Mechanism"}),(0,r.jsx)(n.td,{children:"SASL mechanism describing how to exchange and authenticate client servers."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/password"})}),(0,r.jsx)(n.td,{children:"Password"}),(0,r.jsx)(n.td,{children:"Password, if applicable for the authentication mechanism chosen."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/username"})}),(0,r.jsx)(n.td,{children:"Username"}),(0,r.jsx)(n.td,{children:"Username, if applicable for the authentication mechanism chosen."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/aws_access_key_id"})}),(0,r.jsx)(n.td,{children:"AWS Access Key ID"}),(0,r.jsx)(n.td,{children:"Supply if using auth_type: AWS"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/aws_secret_access_key"})}),(0,r.jsx)(n.td,{children:"AWS Secret Access Key"}),(0,r.jsx)(n.td,{children:"Supply if using auth_type: AWS"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/region"})}),(0,r.jsx)(n.td,{children:"AWS Region"}),(0,r.jsx)(n.td,{children:"Supply if using auth_type: AWS"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Kafka topic name."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync mode"}),(0,r.jsxs)(n.td,{children:["Connection method. Always set to ",(0,r.jsx)(n.code,{children:"incremental"})]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.p,{children:"User and password authentication (SASL):"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-kafka:dev\n config:\n bootstrap_servers: localhost:9093\n tls: system_certificates\n credentials:\n auth_type: UserPassword\n mechanism: SCRAM-SHA-512\n username: bruce.wayne\n password: definitely-not-batman\n bindings:\n - resource:\n stream: ${TOPIC_NAME}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,r.jsx)(n.p,{children:"AWS IAM authentication:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-kafka:dev\n config:\n bootstrap_servers: localhost:9093\n tls: system_certificates\n credentials:\n auth_type: AWS\n aws_access_key_id: AK...\n aws_secret_access_key: secret\n region: us-east-1\n bindings:\n - resource:\n stream: ${TOPIC_NAME}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,r.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each Kafka topic."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>o});var r=t(96540);const s={},i=r.createContext(s);function c(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/08e5c7dc.2226f998.js b/pr-preview/pr-1594/assets/js/08e5c7dc.2226f998.js deleted file mode 100644 index 6c5565e2dd..0000000000 --- a/pr-preview/pr-1594/assets/js/08e5c7dc.2226f998.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8164],{67151:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>d,frontMatter:()=>c,metadata:()=>s,toc:()=>l});var r=o(74848),t=o(28453);const c={},i="Confluence",s={id:"reference/Connectors/capture-connectors/confluence",title:"Confluence",description:"This connector captures data from Confluence into Flow collections via the Confluence Cloud REST API.",source:"@site/docs/reference/Connectors/capture-connectors/confluence.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/confluence",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/confluence.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Chargebee",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee"},next:{title:"Datadog HTTP Ingest (Webhook)",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest"}},a={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"resources",id:"resources",level:3},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Sample",id:"sample",level:3}];function u(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"confluence",children:"Confluence"}),"\n",(0,r.jsxs)(n.p,{children:["This connector captures data from Confluence into Flow collections via the Confluence ",(0,r.jsx)(n.a,{href:"https://developer.atlassian.com/cloud/confluence/rest/v1/intro/#about",children:"Cloud REST API"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://ghcr.io/estuary/source-confluence:dev",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-confluence:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/confluence/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,r.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,r.jsxs)(n.p,{children:["When you ",(0,r.jsx)(n.a,{href:"#endpoint",children:"configure the connector"}),", you specify your email, api and domain name"]}),"\n",(0,r.jsx)(n.p,{children:"From your selection, the following data resources are captured:"}),"\n",(0,r.jsx)(n.h3,{id:"resources",children:"resources"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.atlassian.com/cloud/confluence/rest/api-group-audit/#api-wiki-rest-api-audit-get",children:"Audit"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.atlassian.com/cloud/confluence/rest/api-group-content/#api-wiki-rest-api-content-get",children:"Blog Posts"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.atlassian.com/cloud/confluence/rest/api-group-group/#api-wiki-rest-api-group-get",children:"Group"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.atlassian.com/cloud/confluence/rest/api-group-content/#api-wiki-rest-api-content-get",children:"Pages"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.atlassian.com/cloud/confluence/rest/api-group-space/#api-wiki-rest-api-space-get",children:"Space"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Atlassian API Token"}),"\n",(0,r.jsx)(n.li,{children:"Your Confluence domain name"}),"\n",(0,r.jsx)(n.li,{children:"Your Confluence login email"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector."]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Create an API Token"}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["For detailed instructions on creating an Atlassian API Token, please refer to the ",(0,r.jsx)(n.a,{href:"https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/",children:"official documentation"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsx)(n.li,{children:"Set up the Confluence connector in Estuary Flow"}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'Log into Estuary Flow and click "Captures".'}),"\n",(0,r.jsx)(n.li,{children:'Select "Create Capture" search for and click on "Confluence"'}),"\n",(0,r.jsx)(n.li,{children:"Enter a Capture Name"}),"\n",(0,r.jsx)(n.li,{children:'In the "API Token" field, enter your Atlassian API Token'}),"\n",(0,r.jsx)(n.li,{children:'In the "Domain Name" field, enter your Confluence Domain name'}),"\n",(0,r.jsx)(n.li,{children:'In the "Email" field, enter your Confluence login email'}),"\n",(0,r.jsx)(n.li,{children:'Click "Save and Publish"'}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.p,{children:"This sample specification reflects the manual authentication method."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-confluence:dev\n config:\n credentials:\n api_token: PAT Credentials\n domain_name: estuary1.atlassian.net\n email: dave@estuary.dev\n bindings:\n - resource:\n stream: audit\n syncMode: full_refresh\n target: ${PREFIX}/audit\n {...}\n"})})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>i,x:()=>s});var r=o(96540);const t={},c=r.createContext(t);function i(e){const n=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/0ad621fa.7adcf55b.js b/pr-preview/pr-1594/assets/js/0ad621fa.7adcf55b.js deleted file mode 100644 index 45449d7f12..0000000000 --- a/pr-preview/pr-1594/assets/js/0ad621fa.7adcf55b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7308],{37934:(e,d,r)=>{r.r(d),r.d(d,{assets:()=>c,contentTitle:()=>i,default:()=>x,frontMatter:()=>n,metadata:()=>l,toc:()=>h});var s=r(74848),t=r(28453);const n={},i=void 0,l={id:"reference/Connectors/materialization-connectors/PostgreSQL/PostgreSQL",title:"PostgreSQL",description:"This connector materializes Flow collections into tables in a PostgreSQL database.",source:"@site/docs/reference/Connectors/materialization-connectors/PostgreSQL/PostgreSQL.md",sourceDirName:"reference/Connectors/materialization-connectors/PostgreSQL",slug:"/reference/Connectors/materialization-connectors/PostgreSQL/",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/PostgreSQL/PostgreSQL.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Pinecone",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone"},next:{title:"Amazon RDS for PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres"}},c={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Azure Database for PostgreSQL",id:"azure-database-for-postgresql",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"SSL Mode",id:"ssl-mode",level:4},{value:"Sample",id:"sample",level:3},{value:"Delta updates",id:"delta-updates",level:2},{value:"Reserved words",id:"reserved-words",level:2},{value:"Changelog",id:"changelog",level:2},{value:"V4: 2022-11-30",id:"v4-2022-11-30",level:4}];function o(e){const d={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.p,{children:"This connector materializes Flow collections into tables in a PostgreSQL database."}),"\n",(0,s.jsxs)(d.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(d.a,{href:"https://ghcr.io/estuary/materialize-postgres:dev",children:(0,s.jsx)(d.code,{children:"ghcr.io/estuary/materialize-postgres:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(d.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(d.p,{children:"To use this connector, you'll need:"}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsx)(d.li,{children:"A Postgres database to which to materialize, and user credentials.\nThe connector will create new tables in the database per your specification. Tables created manually in advance are not supported."}),"\n",(0,s.jsx)(d.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,s.jsx)(d.h2,{id:"setup",children:"Setup"}),"\n",(0,s.jsx)(d.p,{children:"To meet these requirements, follow the steps for your hosting type."}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsx)(d.li,{children:(0,s.jsx)(d.a,{href:"./amazon-rds-postgres/",children:"Amazon RDS"})}),"\n",(0,s.jsx)(d.li,{children:(0,s.jsx)(d.a,{href:"./google-cloud-sql-postgres/",children:"Google Cloud SQL"})}),"\n",(0,s.jsx)(d.li,{children:(0,s.jsx)(d.a,{href:"#azure-database-for-postgresql",children:"Azure Database for PostgreSQL"})}),"\n"]}),"\n",(0,s.jsx)(d.p,{children:"In addition to standard PostgreSQL, this connector supports cloud-based PostgreSQL instances. Google Cloud Platform, Amazon Web Service, and Microsoft Azure are currently supported. You may use other cloud platforms, but Estuary doesn't guarantee performance."}),"\n",(0,s.jsx)(d.p,{children:"To connect securely, you can either enable direct access for Flows's IP or use an SSH tunnel."}),"\n",(0,s.jsxs)(d.admonition,{title:"Configuration Tip",type:"tip",children:[(0,s.jsxs)(d.p,{children:["To configure the connector, you must specify the database address in the format ",(0,s.jsx)(d.code,{children:"host:port"}),". (You can also supply ",(0,s.jsx)(d.code,{children:"host"})," only; the connector will use the port ",(0,s.jsx)(d.code,{children:"5432"})," by default, which is correct in many cases.)\nYou can find the host and port in the following locations in each platform's console:"]}),(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsx)(d.li,{children:"Amazon RDS and Amazon Aurora: host as Endpoint; port as Port."}),"\n",(0,s.jsxs)(d.li,{children:["Google Cloud SQL: host as Private IP Address; port is always ",(0,s.jsx)(d.code,{children:"5432"}),". You may need to ",(0,s.jsx)(d.a,{href:"https://cloud.google.com/sql/docs/postgres/configure-private-ip",children:"configure private IP"})," on your database."]}),"\n",(0,s.jsxs)(d.li,{children:["Azure Database: host as Server Name; port under Connection Strings (usually ",(0,s.jsx)(d.code,{children:"5432"}),")."]}),"\n",(0,s.jsx)(d.li,{children:"TimescaleDB: host as Host; port as Port."}),"\n"]})]}),"\n",(0,s.jsx)(d.h3,{id:"azure-database-for-postgresql",children:"Azure Database for PostgreSQL"}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.strong,{children:"Connect Directly With Azure Database For PostgreSQL"}),": Create a new ",(0,s.jsx)(d.a,{href:"https://docs.microsoft.com/en-us/azure/postgresql/flexible-server/how-to-manage-firewall-portal#create-a-firewall-rule-after-server-is-created",children:"firewall rule"})," that grants access to the ",(0,s.jsx)(d.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.strong,{children:"Connect With SSH Tunneling"}),": Follow the instructions for setting up an SSH connection to ",(0,s.jsx)(d.a,{href:"/guides/connect-network/#setup-for-azure",children:"Azure Database"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(d.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsx)(d.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a Postgres materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database."}),"\n",(0,s.jsx)(d.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(d.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Property"}),(0,s.jsx)(d.th,{children:"Title"}),(0,s.jsx)(d.th,{children:"Description"}),(0,s.jsx)(d.th,{children:"Type"}),(0,s.jsx)(d.th,{children:"Required/Default"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/database"})}),(0,s.jsx)(d.td,{children:"Database"}),(0,s.jsx)(d.td,{children:"Name of the logical database to materialize to."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.strong,{children:(0,s.jsx)(d.code,{children:"/address"})})}),(0,s.jsx)(d.td,{children:"Address"}),(0,s.jsxs)(d.td,{children:["Host and port of the database. If only the host is specified, port will default to ",(0,s.jsx)(d.code,{children:"5432"}),"."]}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:"Required"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.strong,{children:(0,s.jsx)(d.code,{children:"/password"})})}),(0,s.jsx)(d.td,{children:"Password"}),(0,s.jsx)(d.td,{children:"Password for the specified database user."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:"Required"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/schema"})}),(0,s.jsx)(d.td,{children:"Database Schema"}),(0,s.jsxs)(d.td,{children:["Database ",(0,s.jsx)(d.a,{href:"https://www.postgresql.org/docs/current/ddl-schemas.html",children:"schema"})," to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables"]}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:'"public"'})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.strong,{children:(0,s.jsx)(d.code,{children:"/user"})})}),(0,s.jsx)(d.td,{children:"User"}),(0,s.jsx)(d.td,{children:"Database user to connect as."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:"Required"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/advanced"})}),(0,s.jsx)(d.td,{children:"Advanced Options"}),(0,s.jsx)(d.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,s.jsx)(d.td,{children:"object"}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/advanced/sslmode"})}),(0,s.jsx)(d.td,{children:"SSL Mode"}),(0,s.jsx)(d.td,{children:"Overrides SSL connection behavior by setting the 'sslmode' parameter."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{})]})]})]}),"\n",(0,s.jsx)(d.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Property"}),(0,s.jsx)(d.th,{children:"Title"}),(0,s.jsx)(d.th,{children:"Description"}),(0,s.jsx)(d.th,{children:"Type"}),(0,s.jsx)(d.th,{children:"Required/Default"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/additional_table_create_sql"})}),(0,s.jsx)(d.td,{children:"Additional Table Create SQL"}),(0,s.jsx)(d.td,{children:"Additional SQL statement(s) to be run in the same transaction that creates the table."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/delta_updates"})}),(0,s.jsx)(d.td,{children:"Delta Update"}),(0,s.jsx)(d.td,{children:"Should updates to this table be done via delta updates."}),(0,s.jsx)(d.td,{children:"boolean"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"false"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/schema"})}),(0,s.jsx)(d.td,{children:"Alternative Schema"}),(0,s.jsx)(d.td,{children:"Alternative schema for this table (optional). Overrides schema set in endpoint configuration."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.strong,{children:(0,s.jsx)(d.code,{children:"/table"})})}),(0,s.jsx)(d.td,{children:"Table"}),(0,s.jsx)(d.td,{children:"Table name to materialize to. It will be created by the connector, unless the connector has previously created it."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(d.h4,{id:"ssl-mode",children:"SSL Mode"}),"\n",(0,s.jsxs)(d.p,{children:["Certain managed PostgreSQL implementations may require you to explicitly set the ",(0,s.jsx)(d.a,{href:"https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION",children:"SSL Mode"})," to connect with Flow. One example is ",(0,s.jsx)(d.a,{href:"https://neon.tech/docs/connect/connect-securely",children:"Neon"}),", which requires the setting ",(0,s.jsx)(d.code,{children:"verify-full"}),". Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration."]}),"\n",(0,s.jsx)(d.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-postgres:dev\n config:\n database: flow\n address: localhost:5432\n password: flow\n user: flow\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,s.jsx)(d.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,s.jsxs)(d.p,{children:["This connector supports both standard (merge) and ",(0,s.jsx)(d.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),"."]}),"\n",(0,s.jsx)(d.p,{children:"The default is to use standard updates."}),"\n",(0,s.jsx)(d.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,s.jsxs)(d.p,{children:['PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier.\nFlow considers all the reserved words that are marked as "reserved" in any of the columns in the official ',(0,s.jsx)(d.a,{href:"https://www.postgresql.org/docs/current/sql-keywords-appendix.html",children:"PostgreSQL documentation"}),"."]}),"\n",(0,s.jsx)(d.p,{children:"These reserve words are listed in the table below. Flow automatically quotes fields that are in this list."}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Reserved words"}),(0,s.jsx)(d.th,{}),(0,s.jsx)(d.th,{}),(0,s.jsx)(d.th,{}),(0,s.jsx)(d.th,{})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"abs"}),(0,s.jsx)(d.td,{children:"current_transform_group_for_type"}),(0,s.jsx)(d.td,{children:"indicator"}),(0,s.jsx)(d.td,{children:"order"}),(0,s.jsx)(d.td,{children:"sqlexception"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"absolute"}),(0,s.jsx)(d.td,{children:"current_user"}),(0,s.jsx)(d.td,{children:"initial"}),(0,s.jsx)(d.td,{children:"out"}),(0,s.jsx)(d.td,{children:"sqlstate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"acos"}),(0,s.jsx)(d.td,{children:"cursor"}),(0,s.jsx)(d.td,{children:"initially"}),(0,s.jsx)(d.td,{children:"outer"}),(0,s.jsx)(d.td,{children:"sqlwarning"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"action"}),(0,s.jsx)(d.td,{children:"cycle"}),(0,s.jsx)(d.td,{children:"inner"}),(0,s.jsx)(d.td,{children:"output"}),(0,s.jsx)(d.td,{children:"sqrt"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"add"}),(0,s.jsx)(d.td,{children:"datalink"}),(0,s.jsx)(d.td,{children:"inout"}),(0,s.jsx)(d.td,{children:"over"}),(0,s.jsx)(d.td,{children:"start"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"all"}),(0,s.jsx)(d.td,{children:"date"}),(0,s.jsx)(d.td,{children:"input"}),(0,s.jsx)(d.td,{children:"overlaps"}),(0,s.jsx)(d.td,{children:"static"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"allocate"}),(0,s.jsx)(d.td,{children:"day"}),(0,s.jsx)(d.td,{children:"insensitive"}),(0,s.jsx)(d.td,{children:"overlay"}),(0,s.jsx)(d.td,{children:"stddev_pop"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"alter"}),(0,s.jsx)(d.td,{children:"deallocate"}),(0,s.jsx)(d.td,{children:"insert"}),(0,s.jsx)(d.td,{children:"pad"}),(0,s.jsx)(d.td,{children:"stddev_samp"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"analyse"}),(0,s.jsx)(d.td,{children:"dec"}),(0,s.jsx)(d.td,{children:"int"}),(0,s.jsx)(d.td,{children:"parameter"}),(0,s.jsx)(d.td,{children:"submultiset"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"analyze"}),(0,s.jsx)(d.td,{children:"decfloat"}),(0,s.jsx)(d.td,{children:"integer"}),(0,s.jsx)(d.td,{children:"partial"}),(0,s.jsx)(d.td,{children:"subset"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"and"}),(0,s.jsx)(d.td,{children:"decimal"}),(0,s.jsx)(d.td,{children:"intersect"}),(0,s.jsx)(d.td,{children:"partition"}),(0,s.jsx)(d.td,{children:"substring"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"any"}),(0,s.jsx)(d.td,{children:"declare"}),(0,s.jsx)(d.td,{children:"intersection"}),(0,s.jsx)(d.td,{children:"pattern"}),(0,s.jsx)(d.td,{children:"substring_regex"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"are"}),(0,s.jsx)(d.td,{children:"default"}),(0,s.jsx)(d.td,{children:"interval"}),(0,s.jsx)(d.td,{children:"per"}),(0,s.jsx)(d.td,{children:"succeeds"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"array"}),(0,s.jsx)(d.td,{children:"deferrable"}),(0,s.jsx)(d.td,{children:"into"}),(0,s.jsx)(d.td,{children:"percent"}),(0,s.jsx)(d.td,{children:"sum"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"array_agg"}),(0,s.jsx)(d.td,{children:"deferred"}),(0,s.jsx)(d.td,{children:"is"}),(0,s.jsx)(d.td,{children:"percentile_cont"}),(0,s.jsx)(d.td,{children:"symmetric"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"array_max_cardinality"}),(0,s.jsx)(d.td,{children:"define"}),(0,s.jsx)(d.td,{children:"isnull"}),(0,s.jsx)(d.td,{children:"percentile_disc"}),(0,s.jsx)(d.td,{children:"system"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"as"}),(0,s.jsx)(d.td,{children:"delete"}),(0,s.jsx)(d.td,{children:"isolation"}),(0,s.jsx)(d.td,{children:"percent_rank"}),(0,s.jsx)(d.td,{children:"system_time"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"asc"}),(0,s.jsx)(d.td,{children:"dense_rank"}),(0,s.jsx)(d.td,{children:"join"}),(0,s.jsx)(d.td,{children:"period"}),(0,s.jsx)(d.td,{children:"system_user"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"asensitive"}),(0,s.jsx)(d.td,{children:"deref"}),(0,s.jsx)(d.td,{children:"json_array"}),(0,s.jsx)(d.td,{children:"permute"}),(0,s.jsx)(d.td,{children:"table"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"asin"}),(0,s.jsx)(d.td,{children:"desc"}),(0,s.jsx)(d.td,{children:"json_arrayagg"}),(0,s.jsx)(d.td,{children:"placing"}),(0,s.jsx)(d.td,{children:"tablesample"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"assertion"}),(0,s.jsx)(d.td,{children:"describe"}),(0,s.jsx)(d.td,{children:"json_exists"}),(0,s.jsx)(d.td,{children:"portion"}),(0,s.jsx)(d.td,{children:"tan"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"asymmetric"}),(0,s.jsx)(d.td,{children:"descriptor"}),(0,s.jsx)(d.td,{children:"json_object"}),(0,s.jsx)(d.td,{children:"position"}),(0,s.jsx)(d.td,{children:"tanh"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"at"}),(0,s.jsx)(d.td,{children:"deterministic"}),(0,s.jsx)(d.td,{children:"json_objectagg"}),(0,s.jsx)(d.td,{children:"position_regex"}),(0,s.jsx)(d.td,{children:"temporary"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"atan"}),(0,s.jsx)(d.td,{children:"diagnostics"}),(0,s.jsx)(d.td,{children:"json_query"}),(0,s.jsx)(d.td,{children:"power"}),(0,s.jsx)(d.td,{children:"then"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"atomic"}),(0,s.jsx)(d.td,{children:"disconnect"}),(0,s.jsx)(d.td,{children:"json_table"}),(0,s.jsx)(d.td,{children:"precedes"}),(0,s.jsx)(d.td,{children:"time"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"authorization"}),(0,s.jsx)(d.td,{children:"distinct"}),(0,s.jsx)(d.td,{children:"json_table_primitive"}),(0,s.jsx)(d.td,{children:"precision"}),(0,s.jsx)(d.td,{children:"timestamp"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"avg"}),(0,s.jsx)(d.td,{children:"dlnewcopy"}),(0,s.jsx)(d.td,{children:"json_value"}),(0,s.jsx)(d.td,{children:"prepare"}),(0,s.jsx)(d.td,{children:"timezone_hour"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"begin"}),(0,s.jsx)(d.td,{children:"dlpreviouscopy"}),(0,s.jsx)(d.td,{children:"key"}),(0,s.jsx)(d.td,{children:"preserve"}),(0,s.jsx)(d.td,{children:"timezone_minute"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"begin_frame"}),(0,s.jsx)(d.td,{children:"dlurlcomplete"}),(0,s.jsx)(d.td,{children:"lag"}),(0,s.jsx)(d.td,{children:"primary"}),(0,s.jsx)(d.td,{children:"to"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"begin_partition"}),(0,s.jsx)(d.td,{children:"dlurlcompleteonly"}),(0,s.jsx)(d.td,{children:"language"}),(0,s.jsx)(d.td,{children:"prior"}),(0,s.jsx)(d.td,{children:"trailing"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"between"}),(0,s.jsx)(d.td,{children:"dlurlcompletewrite"}),(0,s.jsx)(d.td,{children:"large"}),(0,s.jsx)(d.td,{children:"privileges"}),(0,s.jsx)(d.td,{children:"transaction"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"bigint"}),(0,s.jsx)(d.td,{children:"dlurlpath"}),(0,s.jsx)(d.td,{children:"last"}),(0,s.jsx)(d.td,{children:"procedure"}),(0,s.jsx)(d.td,{children:"translate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"binary"}),(0,s.jsx)(d.td,{children:"dlurlpathonly"}),(0,s.jsx)(d.td,{children:"last_value"}),(0,s.jsx)(d.td,{children:"ptf"}),(0,s.jsx)(d.td,{children:"translate_regex"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"bit"}),(0,s.jsx)(d.td,{children:"dlurlpathwrite"}),(0,s.jsx)(d.td,{children:"lateral"}),(0,s.jsx)(d.td,{children:"public"}),(0,s.jsx)(d.td,{children:"translation"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"bit_length"}),(0,s.jsx)(d.td,{children:"dlurlscheme"}),(0,s.jsx)(d.td,{children:"lead"}),(0,s.jsx)(d.td,{children:"range"}),(0,s.jsx)(d.td,{children:"treat"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"blob"}),(0,s.jsx)(d.td,{children:"dlurlserver"}),(0,s.jsx)(d.td,{children:"leading"}),(0,s.jsx)(d.td,{children:"rank"}),(0,s.jsx)(d.td,{children:"trigger"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"boolean"}),(0,s.jsx)(d.td,{children:"dlvalue"}),(0,s.jsx)(d.td,{children:"left"}),(0,s.jsx)(d.td,{children:"read"}),(0,s.jsx)(d.td,{children:"trim"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"both"}),(0,s.jsx)(d.td,{children:"do"}),(0,s.jsx)(d.td,{children:"level"}),(0,s.jsx)(d.td,{children:"reads"}),(0,s.jsx)(d.td,{children:"trim_array"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"by"}),(0,s.jsx)(d.td,{children:"domain"}),(0,s.jsx)(d.td,{children:"like"}),(0,s.jsx)(d.td,{children:"real"}),(0,s.jsx)(d.td,{children:"true"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"call"}),(0,s.jsx)(d.td,{children:"double"}),(0,s.jsx)(d.td,{children:"like_regex"}),(0,s.jsx)(d.td,{children:"recursive"}),(0,s.jsx)(d.td,{children:"truncate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"called"}),(0,s.jsx)(d.td,{children:"drop"}),(0,s.jsx)(d.td,{children:"limit"}),(0,s.jsx)(d.td,{children:"ref"}),(0,s.jsx)(d.td,{children:"uescape"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cardinality"}),(0,s.jsx)(d.td,{children:"dynamic"}),(0,s.jsx)(d.td,{children:"listagg"}),(0,s.jsx)(d.td,{children:"references"}),(0,s.jsx)(d.td,{children:"union"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cascade"}),(0,s.jsx)(d.td,{children:"each"}),(0,s.jsx)(d.td,{children:"ln"}),(0,s.jsx)(d.td,{children:"referencing"}),(0,s.jsx)(d.td,{children:"unique"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cascaded"}),(0,s.jsx)(d.td,{children:"element"}),(0,s.jsx)(d.td,{children:"local"}),(0,s.jsx)(d.td,{children:"regr_avgx"}),(0,s.jsx)(d.td,{children:"unknown"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"case"}),(0,s.jsx)(d.td,{children:"else"}),(0,s.jsx)(d.td,{children:"localtime"}),(0,s.jsx)(d.td,{children:"regr_avgy"}),(0,s.jsx)(d.td,{children:"unmatched"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cast"}),(0,s.jsx)(d.td,{children:"empty"}),(0,s.jsx)(d.td,{children:"localtimestamp"}),(0,s.jsx)(d.td,{children:"regr_count"}),(0,s.jsx)(d.td,{children:"unnest"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"catalog"}),(0,s.jsx)(d.td,{children:"end"}),(0,s.jsx)(d.td,{children:"log"}),(0,s.jsx)(d.td,{children:"regr_intercept"}),(0,s.jsx)(d.td,{children:"update"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"ceil"}),(0,s.jsx)(d.td,{children:"end-exec"}),(0,s.jsx)(d.td,{children:"log10"}),(0,s.jsx)(d.td,{children:"regr_r2"}),(0,s.jsx)(d.td,{children:"upper"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"ceiling"}),(0,s.jsx)(d.td,{children:"end_frame"}),(0,s.jsx)(d.td,{children:"lower"}),(0,s.jsx)(d.td,{children:"regr_slope"}),(0,s.jsx)(d.td,{children:"usage"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"char"}),(0,s.jsx)(d.td,{children:"end_partition"}),(0,s.jsx)(d.td,{children:"match"}),(0,s.jsx)(d.td,{children:"regr_sxx"}),(0,s.jsx)(d.td,{children:"user"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"character"}),(0,s.jsx)(d.td,{children:"equals"}),(0,s.jsx)(d.td,{children:"matches"}),(0,s.jsx)(d.td,{children:"regr_sxy"}),(0,s.jsx)(d.td,{children:"using"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"character_length"}),(0,s.jsx)(d.td,{children:"escape"}),(0,s.jsx)(d.td,{children:"match_number"}),(0,s.jsx)(d.td,{children:"regr_syy"}),(0,s.jsx)(d.td,{children:"value"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"char_length"}),(0,s.jsx)(d.td,{children:"every"}),(0,s.jsx)(d.td,{children:"match_recognize"}),(0,s.jsx)(d.td,{children:"relative"}),(0,s.jsx)(d.td,{children:"values"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"check"}),(0,s.jsx)(d.td,{children:"except"}),(0,s.jsx)(d.td,{children:"max"}),(0,s.jsx)(d.td,{children:"release"}),(0,s.jsx)(d.td,{children:"value_of"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"classifier"}),(0,s.jsx)(d.td,{children:"exception"}),(0,s.jsx)(d.td,{children:"measures"}),(0,s.jsx)(d.td,{children:"restrict"}),(0,s.jsx)(d.td,{children:"varbinary"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"clob"}),(0,s.jsx)(d.td,{children:"exec"}),(0,s.jsx)(d.td,{children:"member"}),(0,s.jsx)(d.td,{children:"result"}),(0,s.jsx)(d.td,{children:"varchar"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"close"}),(0,s.jsx)(d.td,{children:"execute"}),(0,s.jsx)(d.td,{children:"merge"}),(0,s.jsx)(d.td,{children:"return"}),(0,s.jsx)(d.td,{children:"variadic"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"coalesce"}),(0,s.jsx)(d.td,{children:"exists"}),(0,s.jsx)(d.td,{children:"method"}),(0,s.jsx)(d.td,{children:"returning"}),(0,s.jsx)(d.td,{children:"varying"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"collate"}),(0,s.jsx)(d.td,{children:"exp"}),(0,s.jsx)(d.td,{children:"min"}),(0,s.jsx)(d.td,{children:"returns"}),(0,s.jsx)(d.td,{children:"var_pop"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"collation"}),(0,s.jsx)(d.td,{children:"external"}),(0,s.jsx)(d.td,{children:"minute"}),(0,s.jsx)(d.td,{children:"revoke"}),(0,s.jsx)(d.td,{children:"var_samp"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"collect"}),(0,s.jsx)(d.td,{children:"extract"}),(0,s.jsx)(d.td,{children:"mod"}),(0,s.jsx)(d.td,{children:"right"}),(0,s.jsx)(d.td,{children:"verbose"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"column"}),(0,s.jsx)(d.td,{children:"false"}),(0,s.jsx)(d.td,{children:"modifies"}),(0,s.jsx)(d.td,{children:"rollback"}),(0,s.jsx)(d.td,{children:"versioning"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"commit"}),(0,s.jsx)(d.td,{children:"fetch"}),(0,s.jsx)(d.td,{children:"module"}),(0,s.jsx)(d.td,{children:"rollup"}),(0,s.jsx)(d.td,{children:"view"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"concurrently"}),(0,s.jsx)(d.td,{children:"filter"}),(0,s.jsx)(d.td,{children:"month"}),(0,s.jsx)(d.td,{children:"row"}),(0,s.jsx)(d.td,{children:"when"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"condition"}),(0,s.jsx)(d.td,{children:"first"}),(0,s.jsx)(d.td,{children:"multiset"}),(0,s.jsx)(d.td,{children:"rows"}),(0,s.jsx)(d.td,{children:"whenever"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"connect"}),(0,s.jsx)(d.td,{children:"first_value"}),(0,s.jsx)(d.td,{children:"names"}),(0,s.jsx)(d.td,{children:"row_number"}),(0,s.jsx)(d.td,{children:"where"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"connection"}),(0,s.jsx)(d.td,{children:"float"}),(0,s.jsx)(d.td,{children:"national"}),(0,s.jsx)(d.td,{children:"running"}),(0,s.jsx)(d.td,{children:"width_bucket"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"constraint"}),(0,s.jsx)(d.td,{children:"floor"}),(0,s.jsx)(d.td,{children:"natural"}),(0,s.jsx)(d.td,{children:"savepoint"}),(0,s.jsx)(d.td,{children:"window"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"constraints"}),(0,s.jsx)(d.td,{children:"for"}),(0,s.jsx)(d.td,{children:"nchar"}),(0,s.jsx)(d.td,{children:"schema"}),(0,s.jsx)(d.td,{children:"with"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"contains"}),(0,s.jsx)(d.td,{children:"foreign"}),(0,s.jsx)(d.td,{children:"nclob"}),(0,s.jsx)(d.td,{children:"scope"}),(0,s.jsx)(d.td,{children:"within"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"continue"}),(0,s.jsx)(d.td,{children:"found"}),(0,s.jsx)(d.td,{children:"new"}),(0,s.jsx)(d.td,{children:"scroll"}),(0,s.jsx)(d.td,{children:"without"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"convert"}),(0,s.jsx)(d.td,{children:"frame_row"}),(0,s.jsx)(d.td,{children:"next"}),(0,s.jsx)(d.td,{children:"search"}),(0,s.jsx)(d.td,{children:"work"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"copy"}),(0,s.jsx)(d.td,{children:"free"}),(0,s.jsx)(d.td,{children:"no"}),(0,s.jsx)(d.td,{children:"second"}),(0,s.jsx)(d.td,{children:"write"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"corr"}),(0,s.jsx)(d.td,{children:"freeze"}),(0,s.jsx)(d.td,{children:"none"}),(0,s.jsx)(d.td,{children:"section"}),(0,s.jsx)(d.td,{children:"xml"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"corresponding"}),(0,s.jsx)(d.td,{children:"from"}),(0,s.jsx)(d.td,{children:"normalize"}),(0,s.jsx)(d.td,{children:"seek"}),(0,s.jsx)(d.td,{children:"xmlagg"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cos"}),(0,s.jsx)(d.td,{children:"full"}),(0,s.jsx)(d.td,{children:"not"}),(0,s.jsx)(d.td,{children:"select"}),(0,s.jsx)(d.td,{children:"xmlattributes"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cosh"}),(0,s.jsx)(d.td,{children:"function"}),(0,s.jsx)(d.td,{children:"notnull"}),(0,s.jsx)(d.td,{children:"sensitive"}),(0,s.jsx)(d.td,{children:"xmlbinary"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"count"}),(0,s.jsx)(d.td,{children:"fusion"}),(0,s.jsx)(d.td,{children:"nth_value"}),(0,s.jsx)(d.td,{children:"session"}),(0,s.jsx)(d.td,{children:"xmlcast"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"covar_pop"}),(0,s.jsx)(d.td,{children:"get"}),(0,s.jsx)(d.td,{children:"ntile"}),(0,s.jsx)(d.td,{children:"session_user"}),(0,s.jsx)(d.td,{children:"xmlcomment"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"covar_samp"}),(0,s.jsx)(d.td,{children:"global"}),(0,s.jsx)(d.td,{children:"null"}),(0,s.jsx)(d.td,{children:"set"}),(0,s.jsx)(d.td,{children:"xmlconcat"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"create"}),(0,s.jsx)(d.td,{children:"go"}),(0,s.jsx)(d.td,{children:"nullif"}),(0,s.jsx)(d.td,{children:"show"}),(0,s.jsx)(d.td,{children:"xmldocument"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cross"}),(0,s.jsx)(d.td,{children:"goto"}),(0,s.jsx)(d.td,{children:"numeric"}),(0,s.jsx)(d.td,{children:"similar"}),(0,s.jsx)(d.td,{children:"xmlelement"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cube"}),(0,s.jsx)(d.td,{children:"grant"}),(0,s.jsx)(d.td,{children:"occurrences_regex"}),(0,s.jsx)(d.td,{children:"sin"}),(0,s.jsx)(d.td,{children:"xmlexists"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cume_dist"}),(0,s.jsx)(d.td,{children:"group"}),(0,s.jsx)(d.td,{children:"octet_length"}),(0,s.jsx)(d.td,{children:"sinh"}),(0,s.jsx)(d.td,{children:"xmlforest"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current"}),(0,s.jsx)(d.td,{children:"grouping"}),(0,s.jsx)(d.td,{children:"of"}),(0,s.jsx)(d.td,{children:"size"}),(0,s.jsx)(d.td,{children:"xmliterate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_catalog"}),(0,s.jsx)(d.td,{children:"groups"}),(0,s.jsx)(d.td,{children:"offset"}),(0,s.jsx)(d.td,{children:"skip"}),(0,s.jsx)(d.td,{children:"xmlnamespaces"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_date"}),(0,s.jsx)(d.td,{children:"having"}),(0,s.jsx)(d.td,{children:"old"}),(0,s.jsx)(d.td,{children:"smallint"}),(0,s.jsx)(d.td,{children:"xmlparse"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_default_transform_group"}),(0,s.jsx)(d.td,{children:"hold"}),(0,s.jsx)(d.td,{children:"omit"}),(0,s.jsx)(d.td,{children:"some"}),(0,s.jsx)(d.td,{children:"xmlpi"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_path"}),(0,s.jsx)(d.td,{children:"hour"}),(0,s.jsx)(d.td,{children:"on"}),(0,s.jsx)(d.td,{children:"space"}),(0,s.jsx)(d.td,{children:"xmlquery"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_role"}),(0,s.jsx)(d.td,{children:"identity"}),(0,s.jsx)(d.td,{children:"one"}),(0,s.jsx)(d.td,{children:"specific"}),(0,s.jsx)(d.td,{children:"xmlserialize"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_row"}),(0,s.jsx)(d.td,{children:"ilike"}),(0,s.jsx)(d.td,{children:"only"}),(0,s.jsx)(d.td,{children:"specifictype"}),(0,s.jsx)(d.td,{children:"xmltable"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_schema"}),(0,s.jsx)(d.td,{children:"immediate"}),(0,s.jsx)(d.td,{children:"open"}),(0,s.jsx)(d.td,{children:"sql"}),(0,s.jsx)(d.td,{children:"xmltext"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_time"}),(0,s.jsx)(d.td,{children:"import"}),(0,s.jsx)(d.td,{children:"option"}),(0,s.jsx)(d.td,{children:"sqlcode"}),(0,s.jsx)(d.td,{children:"xmlvalidate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_timestamp"}),(0,s.jsx)(d.td,{children:"in"}),(0,s.jsx)(d.td,{children:"or"}),(0,s.jsx)(d.td,{children:"sqlerror"}),(0,s.jsx)(d.td,{children:"year"})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"changelog",children:"Changelog"}),"\n",(0,s.jsx)(d.p,{children:"The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed."}),"\n",(0,s.jsx)(d.p,{children:(0,s.jsx)(d.strong,{children:"Proceed with caution when editing materializations created with previous versions of this connector;\nediting always upgrades your materialization to the latest connector version."})}),"\n",(0,s.jsx)(d.h4,{id:"v4-2022-11-30",children:"V4: 2022-11-30"}),"\n",(0,s.jsx)(d.p,{children:"This version includes breaking changes to materialized table columns.\nThese provide more consistent column names and types, but tables created from previous versions of the connector may\nnot be compatible with this version."}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsx)(d.p,{children:"Capitalization is now preserved when fields in Flow are converted to Postgres column names.\nPreviously, fields containing uppercase letters were converted to lowercase."}),"\n"]}),"\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:["Field names and values of types ",(0,s.jsx)(d.code,{children:"date"}),", ",(0,s.jsx)(d.code,{children:"duration"}),", ",(0,s.jsx)(d.code,{children:"ipv4"}),", ",(0,s.jsx)(d.code,{children:"ipv6"}),", ",(0,s.jsx)(d.code,{children:"macaddr"}),", ",(0,s.jsx)(d.code,{children:"macaddr8"}),", and ",(0,s.jsx)(d.code,{children:"time"})," are now converted into\ntheir corresponding Postgres types.\nPreviously, only ",(0,s.jsx)(d.code,{children:"date-time"})," was converted, and all others were materialized as strings."]}),"\n"]}),"\n"]})]})}function x(e={}){const{wrapper:d}={...(0,t.R)(),...e.components};return d?(0,s.jsx)(d,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},28453:(e,d,r)=>{r.d(d,{R:()=>i,x:()=>l});var s=r(96540);const t={},n=s.createContext(t);function i(e){const d=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function l(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),s.createElement(n.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/0bcbca69.ed09f615.js b/pr-preview/pr-1594/assets/js/0bcbca69.ed09f615.js deleted file mode 100644 index 99ed187229..0000000000 --- a/pr-preview/pr-1594/assets/js/0bcbca69.ed09f615.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7993],{85866:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>a});var t=r(74848),i=r(28453);const s={},o="Pendo",c={id:"reference/Connectors/capture-connectors/pendo",title:"Pendo",description:"This connector captures data from Pendo into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/pendo.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/pendo",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/pendo.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Paypal Transaction",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction"},next:{title:"Pinterest",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest"}},d={},a=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"pendo",children:"Pendo"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from Pendo into Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-pendo:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-pendo:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(n.p,{children:"The following data resources are supported through the Pendo API:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://engageapi.pendo.io/#75c6b443-eb07-4a0c-9e27-6c12ad3dbbc4",children:"Feature"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://engageapi.pendo.io/#4f1e3ca1-fc41-4469-bf4b-da90ee8caf3d",children:"Guide"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://engageapi.pendo.io/#a53463f9-bdd3-443e-b22f-b6ea6c7376fb",children:"Page"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://engageapi.pendo.io/#2ac0699a-b653-4082-be11-563e5c0c9410",children:"Report"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://engageapi.pendo.io/#9af41daf-e6f2-4dc2-8031-836922aad09e",children:"PageEvents"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://engageapi.pendo.io/#a26da609-62d0-43ea-814b-956551f2abeb",children:"FeatureEvents"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://engageapi.pendo.io/#97927543-0222-42b9-93a2-0775d2c62e1e",children:"TrackEvents"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://engageapi.pendo.io/#7b6aa7b0-117d-478b-942b-c339196e636d",children:"GuideEvents"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://engageapi.pendo.io/#a6ff15d6-f989-4c11-b7a7-1de0f1577306",children:"PollEvents"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"A Pendo account with the integration feature enabled."}),"\n",(0,t.jsxs)(n.li,{children:["A Pendo ",(0,t.jsx)(n.a,{href:"https://app.pendo.io/admin/integrationkeys",children:"API key"})]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification files.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Pendo source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/access_token"})})}),(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"Your Pendo API key."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/startDate"})}),(0,t.jsx)(n.td,{children:"Replication Start Date"}),(0,t.jsxs)(n.td,{children:['UTC date and time in the format "YYYY-MM-DDTHH:MM',":SSZ",'". Data prior to this date will not be replicated.']}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"1 hour before the current time"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/name"})})}),(0,t.jsx)(n.td,{children:"Data resource"}),(0,t.jsx)(n.td,{children:"Resource in Pendo from which collections are captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-pendo:dev\n config:\n credentials:\n access_token: \n bindings:\n - resource:\n name: Feature\n target: ${PREFIX}/Feature\n - resource:\n name: Guide\n target: ${PREFIX}/Guide\n - resource:\n name: Page\n target: ${PREFIX}/Page\n - resource:\n name: Report\n target: ${PREFIX}/Report\n - resource:\n name: PageEvents\n target: ${PREFIX}/PageEvents\n - resource:\n name: FeatureEvents\n target: ${PREFIX}/FeatureEvents\n - resource:\n name: TrackEvents\n target: ${PREFIX}/TrackEvents\n - resource:\n name: GuideEvents\n target: ${PREFIX}/GuideEvents\n - resource:\n name: PollEvents\n target: ${PREFIX}/PollEvents\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>c});var t=r(96540);const i={},s=t.createContext(i);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/0c8d310c.ef9f80a5.js b/pr-preview/pr-1594/assets/js/0c8d310c.ef9f80a5.js deleted file mode 100644 index cb56d8e0f4..0000000000 --- a/pr-preview/pr-1594/assets/js/0c8d310c.ef9f80a5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5795],{175:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var a=t(74848),r=t(28453),s=t(11470),i=t(19365);t(61114);const o={id:"derivations_acmebank",title:"Implementing Derivations for AcmeBank"},c="Implementing Derivations for AcmeBank",l={id:"getting-started/tutorials/derivations_acmebank",title:"Implementing Derivations for AcmeBank",description:"The following tutorial sections use an illustrative example",source:"@site/docs/getting-started/tutorials/derivations_acmebank.md",sourceDirName:"getting-started/tutorials",slug:"/getting-started/tutorials/derivations_acmebank",permalink:"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/getting-started/tutorials/derivations_acmebank.md",tags:[],version:"current",frontMatter:{id:"derivations_acmebank",title:"Implementing Derivations for AcmeBank"},sidebar:"tutorialSidebar",previous:{title:"Create a real-time materialized view in PostgreSQL",permalink:"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view"},next:{title:"Flow user guides",permalink:"/pr-preview/pr-1594/guides/"}},d={},u=[{value:"Filtering Large Transfers",id:"filtering-large-transfers",level:2},{value:"Finding New Account Pairs",id:"finding-new-account-pairs",level:2},{value:"Grouped Windows of Transfers",id:"grouped-windows-of-transfers",level:2},{value:"Approving Transfers",id:"approving-transfers",level:2},{value:"Current Account Balances",id:"current-account-balances",level:2}];function m(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Head:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Head",!0),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t,{children:(0,a.jsx)("meta",{property:"og:image",content:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//architecture_6bbaf2c5a6/architecture_6bbaf2c5a6.png"})}),"\n","\n",(0,a.jsx)(n.h1,{id:"implementing-derivations-for-acmebank",children:"Implementing Derivations for AcmeBank"}),"\n",(0,a.jsx)(n.p,{children:"The following tutorial sections use an illustrative example\nto introduce you to derivations, how you might use them, and their common components.\nWe'll discuss each component in depth in subsequent sections of this page,\nbut we recommend you start here to get your bearings."}),"\n",(0,a.jsxs)(n.p,{children:["Suppose you have an application through which users send one another\nsome amount of currency, like in-game tokens or dollars or digital kittens.\nYou have a ",(0,a.jsx)(n.code,{children:"transfers"})," collection of user-requested transfers,\neach sending funds from one account to another:"]}),"\n",(0,a.jsxs)(s.A,{children:[(0,a.jsx)(i.A,{value:"transfers.flow.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"file=./derivations_acmebank_assets/transfers.flow.yaml",children:"collections:\n # Collection of \ud83d\udcb2 transfers between accounts:\n # {id: 123, sender: alice, recipient: bob, amount: 32.50}\n acmeBank/transfers:\n schema: transfers.schema.yaml\n key: [/id]\n"})})}),(0,a.jsx)(i.A,{value:"transfers.schema.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"file=./derivations_acmebank_assets/transfers.schema.yaml",children:"type: object\nproperties:\n id: { type: integer }\n sender: { type: string }\n recipient: { type: string }\n amount: { type: number }\nrequired: [id, sender, recipient, amount]\n"})})})]}),"\n",(0,a.jsx)(n.p,{children:"There are many views over this data that you might require,\nsuch as summaries of sender or receiver activity,\nor current account balances within your application."}),"\n",(0,a.jsx)(n.h2,{id:"filtering-large-transfers",children:"Filtering Large Transfers"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["This section introduces SQLite derivations, SQL lambda blocks and ",(0,a.jsx)(n.code,{children:"$parameters"}),"."]})}),"\n",(0,a.jsx)(n.p,{children:"Your compliance department has reached out, and they require an understanding\nof the last large transfer (if any) made by each user account."}),"\n",(0,a.jsxs)(n.p,{children:["You create a SQL derivation to help them out.\nThe ",(0,a.jsx)(n.code,{children:"transfers"})," collection is keyed on the transfer ",(0,a.jsx)(n.code,{children:"/id"}),",\nso you'll need to re-key your derivation on the ",(0,a.jsx)(n.code,{children:"/sender"})," account.\nYou also need to filter out transfers that aren't large enough."]}),"\n",(0,a.jsx)(n.p,{children:"Putting this all together:"}),"\n",(0,a.jsxs)(s.A,{children:[(0,a.jsx)(i.A,{value:"last-large-send.flow.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"file=./derivations_acmebank_assets/last-large-send.flow.yaml",children:"collections:\n acmeBank/last-large-send:\n schema: transfers.schema.yaml\n key: [/sender]\n\n derive:\n using:\n sqlite: {}\n transforms:\n - name: filterTransfers\n source: acmeBank/transfers\n shuffle: any\n lambda: SELECT $id, $sender, $recipient, $amount WHERE $amount > 100;\n"})})}),(0,a.jsx)(i.A,{value:"last-large-send-test.flow.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"file=./derivations_acmebank_assets/last-large-send-test.flow.yaml",children:"tests:\n acmeBank/tests/last-large-send:\n - ingest:\n collection: acmeBank/transfers\n description: Initial set of transfers amongst users\n documents:\n - { id: 1, sender: alice, recipient: bob, amount: 125.10 }\n - { id: 2, sender: bob, recipient: alice, amount: 10.22 }\n - { id: 3, sender: carol, recipient: bob, amount: 327.00 }\n - ingest:\n collection: acmeBank/transfers\n description: Alice and Carol later send additional transfers.\n documents:\n - { id: 4, sender: alice, recipient: carol, amount: 32.50 }\n - { id: 5, sender: carol, recipient: alice, amount: 226.73 }\n - verify:\n collection: acmeBank/last-large-send\n description:\n Expect the most-recent of Carol's large transfers is tracked,\n along with Alice's only large transfer.\n documents:\n - { id: 1, sender: alice, recipient: bob, amount: 125.10 }\n - { id: 5, sender: carol, recipient: alice, amount: 226.73 }\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.code,{children:"derive: using: sqlite: {}"})," tells Flow that collection\n",(0,a.jsx)(n.code,{children:"acmeBank/last-large-send"})," is derived using Flow's SQLite derivation connector."]}),"\n",(0,a.jsxs)(n.p,{children:["This derivation has just one transform, which sources from the ",(0,a.jsx)(n.code,{children:"transfers"})," collection.\nAs source documents become available, they're evaluated by the SQL ",(0,a.jsx)(n.code,{children:"lambda"}),"\nand its ",(0,a.jsx)(n.code,{children:"SELECT"})," output is published to the derived collection.\nYour SQL queries access locations of source documents through ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations#parameters",children:"$parameter"})," bindings."]}),"\n",(0,a.jsx)(n.p,{children:"The compliance department then materializes this collection to their preferred destination,\nfor an always up-to-date view indexed by each account."}),"\n",(0,a.jsx)(n.h2,{id:"finding-new-account-pairs",children:"Finding New Account Pairs"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:"This section introduces SQLite migrations and internal task tables."})}),"\n",(0,a.jsx)(n.p,{children:"The fraud team needs your help: they have a new process they must run\nthe first time some sending account sends funds to a receiving account.\nThey would like to see only those transfers which reflect a new account pair of (sender, recipient).\nTo tackle this you need to know which account pairs have been seen before."}),"\n",(0,a.jsxs)(n.p,{children:["SQLite derivations run within the context of a persistent, managed SQLite database.\nYou can apply database ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations#migrations",children:"migrations"})," that create whatever tables, triggers, or views you might need.\nThen, the statements of your SQL lambda code can ",(0,a.jsx)(n.code,{children:"INSERT"}),", ",(0,a.jsx)(n.code,{children:"UPDATE"}),", or ",(0,a.jsx)(n.code,{children:"DELETE"}),"\nfrom those tables, query from them, or any other operation supported by SQLite.\nThe tables and other schema you create through your migrations\nare the ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations#internal-state",children:"internal state"})," of your task."]}),"\n",(0,a.jsxs)(s.A,{children:[(0,a.jsx)(i.A,{value:"first-send.flow.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"file=./derivations_acmebank_assets/first-send.flow.yaml",children:"collections:\n acmeBank/first-send:\n schema: transfers.schema.yaml\n key: [/id]\n\n derive:\n using:\n sqlite:\n migrations:\n - CREATE TABLE seen_pairs (\n sender TEXT NOT NULL,\n recipient TEXT NOT NULL,\n PRIMARY KEY (sender, recipient)\n );\n\n transforms:\n - name: fromTransfers\n source: acmeBank/transfers\n shuffle:\n key: [/sender, /recipient]\n lambda:\n INSERT INTO seen_pairs (sender, recipient) VALUES ($sender, $recipient)\n ON CONFLICT DO NOTHING\n RETURNING $id, $sender, $recipient, $amount;\n"})})}),(0,a.jsx)(i.A,{value:"first-send-test.flow.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"file=./derivations_acmebank_assets/first-send-test.flow.yaml",children:"tests:\n acmeBank/tests/first-send:\n - ingest:\n collection: acmeBank/transfers\n documents:\n - { id: 1, sender: alice, recipient: bob, amount: 10.25 }\n - { id: 2, sender: alice, recipient: bob, amount: 13.40 }\n - { id: 3, sender: carol, recipient: alice, amount: 12.50 }\n - { id: 4, sender: alice, recipient: carol, amount: 16.96 }\n - { id: 5, sender: carol, recipient: alice, amount: 2.36 }\n - { id: 6, sender: alice, recipient: carol, amount: 7.13 }\n\n - verify:\n collection: acmeBank/first-send\n description: Expect to see only the first interaction of each account pair.\n documents:\n - { id: 1, sender: alice, recipient: bob, amount: 10.25 }\n - { id: 3, sender: carol, recipient: alice, amount: 12.50 }\n - { id: 4, sender: alice, recipient: carol, amount: 16.96 }\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["This time, the derivation attempts to ",(0,a.jsx)(n.code,{children:"INSERT"})," into the ",(0,a.jsx)(n.code,{children:"seen_pairs"})," table,\nand uses SQLite's ",(0,a.jsx)(n.a,{href:"https://www.sqlite.org/lang_returning.html",children:"RETURNING"}),"\nsyntax to only publish documents for rows which were successfully inserted."]}),"\n",(0,a.jsxs)(n.p,{children:["You can evolve the internal SQLite tables of your derivation as needed,\nby appending SQL blocks which perform a database migration to the ",(0,a.jsx)(n.code,{children:"migrations"})," array.\nAny migrations appended to the list are automatically applied by Flow."]}),"\n",(0,a.jsx)(n.h2,{id:"grouped-windows-of-transfers",children:"Grouped Windows of Transfers"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:"This section introduces delayed reads, and applies them to implement a custom window policy."})}),"\n",(0,a.jsxs)(n.p,{children:["The fraud team is back, and now needs to know the ",(0,a.jsx)(n.em,{children:"other"}),"\ntransfers which an account has made in the last day.\nThey want you to enrich each transfer with the grouping of all\ntransfers initiated by that account in the prior 24 hours."]}),"\n",(0,a.jsx)(n.p,{children:'You may have encountered "windowing" in other tools for stream processing.\nSome systems even require that you define a window policy in order to function.\nFlow does not use windows, but sometimes you do want a time-bound grouping of recent events.'}),"\n",(0,a.jsxs)(n.p,{children:["All collection documents contain a wall-clock timestamp of when they were published.\nThe transforms of a derivation will generally process source documents in ascending wall-time order.\nYou can augment this behavior by using a ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations#read-delay",children:"read delay"})," to refine the relative order in which\nsource documents are read, which is useful for implementing arbitrary window policies:"]}),"\n",(0,a.jsxs)(s.A,{children:[(0,a.jsx)(i.A,{value:"grouped.flow.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"file=./derivations_acmebank_assets/grouped.flow.yaml title=grouped.flow.yaml",children:"collections:\n acmeBank/grouped-transfers:\n schema:\n # Enrich transfer with a window of *other* transfers.\n $ref: transfers.schema.yaml\n required: [window]\n properties:\n window: { type: array }\n key: [/id]\n\n derive:\n using:\n sqlite:\n migrations:\n - CREATE TABLE transfers (\n id INTEGER PRIMARY KEY NOT NULL,\n sender TEXT NOT NULL,\n recipient TEXT NOT NULL,\n amount REAL NOT NULL\n );\n CREATE INDEX idx_transfers_sender ON transfers (sender);\n transforms:\n - name: enrichAndAddToWindow\n source: acmeBank/transfers\n shuffle: { key: [/sender] }\n lambda: enrichAndAddToWindow.sql\n\n - name: removeFromWindow\n source: acmeBank/transfers\n shuffle: { key: [/sender] }\n readDelay: 24h\n lambda: DELETE FROM transfers WHERE id = $id;\n"})})}),(0,a.jsx)(i.A,{value:"enrichAndAddToWindow.sql",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-sql",metastring:"file=./derivations_acmebank_assets/enrichAndAddToWindow.sql title=enrichAndAddToWindow.sql",children:"-- Enrich the transfer with a nested array of other transfers in the window.\nWITH w AS (\n SELECT JSON_GROUP_ARRAY(JSON_OBJECT(\n 'id', id,\n 'recipient', recipient,\n 'amount', amount\n )) AS window\n FROM transfers WHERE sender = $sender\n)\nSELECT $id, $sender, $recipient, $amount, w.window FROM w;\n\n-- Add the current transfer to the window.\nINSERT INTO transfers (id, sender, recipient, amount)\nVALUES ($id, $sender, $recipient, $amount);\n"})})}),(0,a.jsx)(i.A,{value:"grouped-test.flow.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"file=./derivations_acmebank_assets/grouped-test.flow.yaml title=grouped-test.flow.yaml",children:"tests:\n acmeBank/tests/grouped-transfers:\n - ingest:\n description: Initial transfers.\n collection: acmeBank/transfers\n documents:\n - { id: 1, sender: alice, recipient: bob, amount: 6.45 }\n - { id: 2, sender: bob, recipient: carol, amount: 9.72 }\n - { id: 3, sender: bob, recipient: alice, amount: 12.50 }\n\n - verify:\n description: Expect transfers were enriched with their current window.\n Note that a verify step will advance test time forward until all\n source documents have been read by all transforms,\n meaning that the window has been reset.\n collection: acmeBank/grouped-transfers\n documents:\n - { amount: 6.45, id: 1, sender: alice, recipient: bob, window: [] }\n - { amount: 9.72, id: 2, sender: bob, recipient: carol, window: [] }\n - {\n id: 3,\n sender: bob,\n recipient: alice,\n amount: 12.5,\n window: [{ id: 2, recipient: carol, amount: 9.72 }],\n }\n\n - ingest:\n collection: acmeBank/transfers\n documents:\n - { id: 4, sender: alice, recipient: bob, amount: 1.96 }\n - { id: 5, sender: alice, recipient: carol, amount: 2.36 }\n - { id: 6, sender: bob, recipient: alice, amount: 7.13 }\n - { id: 7, sender: alice, recipient: bob, amount: 2.57 }\n\n - verify:\n collection: acmeBank/grouped-transfers\n documents:\n - { id: 1 }\n - { id: 2 }\n - { id: 3 }\n - { id: 4, amount: 1.96, sender: alice, recipient: bob, window: [] }\n - {\n id: 5,\n amount: 2.36,\n sender: alice,\n recipient: carol,\n window: [{ id: 4, amount: 1.96, recipient: bob }],\n }\n - { id: 6, sender: bob, recipient: alice, amount: 7.13, window: [] }\n - {\n id: 7,\n amount: 2.57,\n sender: alice,\n recipient: bob,\n window:\n [\n { id: 4, amount: 1.96, recipient: bob },\n { id: 5, amount: 2.36, recipient: carol },\n ],\n }\n"})})})]}),"\n",(0,a.jsx)(n.h2,{id:"approving-transfers",children:"Approving Transfers"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:"This section expands usage of SQLite task tables and introduces a recursive data flow."})}),"\n",(0,a.jsxs)(n.p,{children:["Your users don't always check if they have sufficient funds before starting a transfer,\nand account overdrafts are becoming common.\nThe product team has tapped you to fix this\nby enriching each transfer with an ",(0,a.jsx)(n.strong,{children:"approve"})," or ",(0,a.jsx)(n.strong,{children:"deny"})," outcome\nbased on the account balance of the sender."]}),"\n",(0,a.jsx)(n.p,{children:"To do this, you first need to track the sender's current account balance.\nClearly an account balance is debited when it's used to sends funds.\nIt's also credited when it receives funds."}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"But there's a catch"}),":\nan account can only be credited for funds received from ",(0,a.jsx)(n.strong,{children:"approved"})," transfers!\nThis implies you need a collection of transfer outcomes\nin order to derive your collection of transfer outcomes \ud83e\udd2f."]}),"\n",(0,a.jsxs)(n.p,{children:["This is an example of a self-referential, recursive data-flow.\nYou may have used tools which require that data flow in a Directed Acyclic Graph (DAG).\nFlow does ",(0,a.jsx)(n.em,{children:"not"})," require that your data flows are acyclic,\nand it also supports a derivation that reads from itself,\nwhich lets you tackle this task:"]}),"\n",(0,a.jsxs)(s.A,{children:[(0,a.jsx)(i.A,{value:"outcomes.flow.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"file=./derivations_acmebank_assets/outcomes.flow.yaml title=outcomes.flow.yaml",children:"collections:\n acmeBank/transfer-outcomes:\n schema:\n # Enrich transfer schema with outcome and the sender's balance.\n $ref: transfers.schema.yaml\n required: [outcome, sender_balance]\n properties:\n outcome:\n description: Transfer was approved, or denied for insufficient funds.\n enum: [approve, deny]\n sender_balance: { type: number }\n key: [/id]\n\n derive:\n using:\n sqlite:\n migrations:\n - CREATE TABLE current_balances (\n account TEXT PRIMARY KEY NOT NULL,\n balance REAL NOT NULL\n );\n\n transforms:\n - name: debitSender\n source: acmeBank/transfers\n # Shuffle on the sender, as we'll debit their balance.\n shuffle: { key: [/sender] }\n lambda: debitSender.sql\n\n - name: creditRecipient\n # When a transfer is approved, we've debited the sender but still need to\n # credit the recipient. Read approved transfers from ourselves to do so.\n source:\n name: acmeBank/transfer-outcomes\n partitions:\n include:\n outcome: [approve]\n shuffle: { key: [/recipient] }\n lambda:\n INSERT INTO current_balances (account, balance) VALUES ($recipient, $amount)\n ON CONFLICT DO UPDATE SET balance = balance + $amount;\n\n # Partition output based on the transfer outcome.\n projections:\n outcome:\n location: /outcome\n partition: true\n"})})}),(0,a.jsx)(i.A,{value:"debitSender.sql",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-sql",metastring:"file=./derivations_acmebank_assets/debitSender.sql title=debitSender.sql",children:"-- Debit the sender if they have an account with sufficient funds.\nUPDATE current_balances\nSET balance = balance - $amount\nWHERE account = $sender AND balance >= $amount;\n\n-- Publish the transfer enriched with outcome and sender balance.\n-- Use SQLite's CHANGES() function to check if the prior UPDATE matched any rows.\n-- Or, a special sweep account 'DEPOSIT' is always approved.\nWITH t AS (SELECT $id, $sender, $recipient, $amount)\nSELECT t.*,\n CASE WHEN CHANGES() OR $sender = 'DEPOSIT'\n THEN 'approve' ELSE 'deny' END AS outcome,\n COALESCE(b.balance, 0) AS sender_balance\nFROM t\nLEFT OUTER JOIN current_balances b ON $sender = b.account;\n"})})}),(0,a.jsx)(i.A,{value:"outcomes-test.flow.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"file=./derivations_acmebank_assets/outcomes-test.flow.yaml title=outcomes-test.flow.yaml",children:"tests:\n acmeBank/tests/transfer-outcomes:\n - ingest:\n description: Initial deposits.\n collection: acmeBank/transfers\n documents:\n - { id: 1, sender: DEPOSIT, recipient: Alice, amount: 20 }\n - { id: 2, sender: DEPOSIT, recipient: Bob, amount: 20 }\n\n - ingest:\n description: Transfers between users.\n collection: acmeBank/transfers\n documents:\n - { id: 3, sender: Alice, recipient: Bob, amount: 32.50 }\n - { id: 4, sender: Bob, recipient: Carol, amount: 10.75 }\n\n - verify:\n description: Expect transfers were enriched with outcome and balance.\n collection: acmeBank/transfer-outcomes\n documents:\n - {\n id: 1,\n sender: DEPOSIT,\n recipient: Alice,\n amount: 20,\n outcome: approve,\n }\n - {\n id: 2,\n sender: DEPOSIT,\n recipient: Bob,\n amount: 20,\n outcome: approve,\n }\n - {\n id: 3,\n sender: Alice,\n recipient: Bob,\n amount: 32.50,\n outcome: deny,\n }\n - {\n id: 4,\n sender: Bob,\n recipient: Carol,\n amount: 10.75,\n outcome: approve,\n sender_balance: 9.25,\n }\n"})})})]}),"\n",(0,a.jsx)(n.h2,{id:"current-account-balances",children:"Current Account Balances"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:"This section introduces TypeScript derivations and reduction annotations."})}),"\n",(0,a.jsx)(n.p,{children:"Your product team is back, and they want a database table\nkeyed by account that contains its up-to-date current balance."}),"\n",(0,a.jsxs)(n.p,{children:["As shown in the previous section, you could create\na task table which aggregates each account balance,\nand then ",(0,a.jsx)(n.code,{children:"SELECT"})," the current balance after every transfer.\nFor most use cases, this is a ",(0,a.jsx)(n.strong,{children:"great"})," place to start.\nFor interest and variety, you'll solve this problem using TypeScript."]}),"\n",(0,a.jsxs)(n.p,{children:["TypeScript derivations require a ",(0,a.jsx)(n.code,{children:"module"})," which you write.\nYou don't know how to write that module yet,\nso first implement the derivation specification in ",(0,a.jsx)(n.code,{children:"balances.flow.yaml"}),".\nNext run the ",(0,a.jsx)(n.code,{children:"flowctl generate"})," command, which generates two files:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"A module stub for you to fill out."}),"\n",(0,a.jsx)(n.li,{children:"A file of TypeScript interfaces which are used by your module."}),"\n"]}),"\n",(0,a.jsxs)(s.A,{children:[(0,a.jsx)(i.A,{value:"balances.flow.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"title=balances.flow.yaml file=./derivations_acmebank_assets/balances.flow.yaml",children:"collections:\n acmeBank/balances:\n schema: balances.schema.yaml\n key: [/user]\n\n derive:\n using:\n typescript:\n module: balances.ts\n transforms:\n - name: fromOutcomes\n source:\n name: acmeBank/transfer-outcomes\n partitions:\n include:\n outcome: [approve]\n shuffle: any\n"})})}),(0,a.jsx)(i.A,{value:"Module Stub",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-typescript",metastring:"title=balances.ts file=./derivations_acmebank_assets/balances-stub.ts",children:"import { IDerivation, Document, SourceFromOutcomes } from 'flow/acmeBank/balances.ts';\n\n// Implementation for derivation acmeBank/balances.\nexport class Derivation extends IDerivation {\n fromOutcomes(_read: { doc: SourceFromOutcomes }): Document[] {\n throw new Error(\"Not implemented\"); // \ud83d\udc48 Your implementation goes here.\n }\n}\n"})})}),(0,a.jsx)(i.A,{value:"Interfaces",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-typescript",metastring:"file=./derivations_acmebank_assets/flow_generated/typescript/acmeBank/balances.ts title=flow/acmeBank/balances.ts",children:'\n// Generated for published documents of derived collection acmeBank/balances.\nexport type Document = {\n balance: number;\n user: string;\n};\n\n\n// Generated for read documents of sourced collection acmeBank/transfer-outcomes.\nexport type SourceFromOutcomes = {\n amount: number;\n id: number;\n outcome: /* Transfer was approved, or denied for insufficient funds. */ "approve" | "deny";\n recipient: string;\n sender: string;\n sender_balance: number;\n};\n\n\nexport abstract class IDerivation {\n // Construct a new Derivation instance from a Request.Open message.\n constructor(_open: { state: unknown }) { }\n\n // flush awaits any remaining documents to be published and returns them.\n // deno-lint-ignore require-await\n async flush(): Promise {\n return [];\n }\n\n // reset is called only when running catalog tests, and must reset any internal state.\n async reset() { }\n\n // startCommit is notified of a runtime commit in progress, and returns an optional\n // connector state update to be committed.\n startCommit(_startCommit: { runtimeCheckpoint: unknown }): { state?: { updated: unknown, mergePatch: boolean } } {\n return {};\n }\n\n abstract fromOutcomes(read: { doc: SourceFromOutcomes }): Document[];\n}\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"Next fill out the body of your TypeScript module and write a test:"}),"\n",(0,a.jsxs)(s.A,{children:[(0,a.jsx)(i.A,{value:"balances.ts",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-typescript",metastring:"title=balances.ts file=./derivations_acmebank_assets/balances.ts",children:"import { IDerivation, Document, SourceFromOutcomes } from 'flow/acmeBank/balances.ts';\n\n// Implementation for derivation acmeBank/balances.\nexport class Derivation extends IDerivation {\n fromOutcomes(read: { doc: SourceFromOutcomes }): Document[] {\n const doc = read.doc;\n return [\n // Debit the sender.\n { user: doc.sender, balance: -doc.amount },\n // Credit the recipient.\n { user: doc.recipient, balance: doc.amount },\n ];\n }\n}\n"})})}),(0,a.jsx)(i.A,{value:"balances-test.flow.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"title=balances-test.flow.yaml file=./derivations_acmebank_assets/balances-test.flow.yaml",children:"tests:\n acmeBank/tests/balances:\n - ingest:\n collection: acmeBank/transfers\n description: Initial deposits into user accounts.\n documents:\n - { id: 1, sender: DEPOSIT, recipient: alice, amount: 100 }\n - { id: 2, sender: DEPOSIT, recipient: bob, amount: 100 }\n - { id: 3, sender: DEPOSIT, recipient: carol, amount: 100 }\n\n - ingest:\n collection: acmeBank/transfers\n description: Transfers between users, and a withdraw.\n documents:\n - { id: 4, sender: alice, recipient: bob, amount: 20 }\n - { id: 5, sender: bob, recipient: carol, amount: 40 }\n - { id: 6, sender: carol, recipient: alice, amount: 90 }\n - { id: 7, sender: bob, recipient: DEPOSIT, amount: 40 }\n\n - verify:\n collection: acmeBank/balances\n description: Verify expected balances.\n documents:\n - { user: DEPOSIT, balance: -260 }\n - { user: alice, balance: 170 }\n - { user: bob, balance: 40 }\n - { user: carol, balance: 50 }\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["One piece is still missing.\nYour TypeScript module is publishing the ",(0,a.jsx)(n.strong,{children:"change"})," in account balance for each transfer.\nThat's not the same thing as the ",(0,a.jsx)(n.strong,{children:"current"})," balance for each account."]}),"\n",(0,a.jsxs)(n.p,{children:["You can ask Flow to sum up the balance changes into a current account balance\nthrough ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"reduction annotations"}),".\nHere's the balances schema, with ",(0,a.jsx)(n.code,{children:"reduce"})," annotations for summing the account balance:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:"title=balances.schema.yaml file=./derivations_acmebank_assets/balances.schema.yaml",children:"type: object\nrequired: [user, balance]\nreduce: { strategy: merge }\nproperties:\n user: { type: string }\n balance:\n type: number\n reduce: { strategy: sum }\n"})}),"\n",(0,a.jsx)(n.p,{children:"This section has more moving parts that the previous SQL-based examples.\nYou might be wondering, why bother? Fair question!\nThis is just an illustrative example, after all."}),"\n",(0,a.jsx)(n.p,{children:"While they're more verbose, TypeScript derivations do have certain advantages:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["TypeScript derivations are strongly typed, and those checks often catch meaningful bugs and defects ",(0,a.jsx)(n.strong,{children:"before"})," they're deployed.\nYour derivation modules also play nicely with VSCode and other developer tooling."]}),"\n",(0,a.jsx)(n.li,{children:"TypeScript derivations can use third-party libraries, as well as your native code compiled to WASM."}),"\n",(0,a.jsx)(n.li,{children:"TypeScript can be easier when working with nested or complex document structures."}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"Reduction annotations also have some benefits over task state (like SQLite tables):"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Internal task state is managed by Flow.\nIf it grows to be large (say, you have ",(0,a.jsx)(n.strong,{children:"a lot"})," of accounts),\nthen your task must be scaled and could require performance tuning.\nReduction annotations, on the other hand, require ",(0,a.jsx)(n.em,{children:"no"})," internal state and are extremely efficient."]}),"\n",(0,a.jsx)(n.li,{children:"Certain aggregations, such as recursive merging of tree-like structures,\nare much simpler to express through reduction annotations vs implementing yourself."}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:'[See "Where to Accumulate?" for more discussion]../../concepts/derivations.md(#where-to-accumulate).'})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(m,{...e})}):m(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>i});t(96540);var a=t(34164);const r={tabItem:"tabItem_Ymn6"};var s=t(74848);function i(e){let{children:n,hidden:t,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.A)(r.tabItem,i),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>j});var a=t(96540),r=t(34164),s=t(23104),i=t(56347),o=t(205),c=t(57485),l=t(31682),d=t(70679);function u(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function m(e){const{values:n,children:t}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:r}}=e;return{value:n,label:t,attributes:a,default:r}}))}(t);return function(e){const n=(0,l.X)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function h(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:t}=e;const r=(0,i.W6)(),s=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,c.aZ)(s),(0,a.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(r.location.search);n.set(s,e),r.replace({...r.location,search:n.toString()})}),[s,r])]}function f(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=m(e),[i,c]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!h({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:s}))),[l,u]=p({queryString:t,groupId:r}),[f,b]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,s]=(0,d.Dv)(t);return[r,(0,a.useCallback)((e=>{t&&s.set(e)}),[t,s])]}({groupId:r}),g=(()=>{const e=l??f;return h({value:e,tabValues:s})?e:null})();(0,o.A)((()=>{g&&c(g)}),[g]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),u(e),b(e)}),[u,b,s]),tabValues:s}}var b=t(92303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var y=t(74848);function w(e){let{className:n,block:t,selectedValue:a,selectValue:i,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.a_)(),d=e=>{const n=e.currentTarget,t=c.indexOf(n),r=o[t].value;r!==a&&(l(n),i(r))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;n=c[t]??c[0];break}case"ArrowLeft":{const t=c.indexOf(e.currentTarget)-1;n=c[t]??c[c.length-1];break}}n?.focus()};return(0,y.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":t},n),children:o.map((e=>{let{value:n,label:t,attributes:s}=e;return(0,y.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>c.push(e),onKeyDown:u,onClick:d,...s,className:(0,r.A)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":a===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:r}=e;const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,y.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function x(e){const n=f(e);return(0,y.jsxs)("div",{className:(0,r.A)("tabs-container",g.tabList),children:[(0,y.jsx)(w,{...n,...e}),(0,y.jsx)(v,{...n,...e})]})}function j(e){const n=(0,b.A)();return(0,y.jsx)(x,{...e,children:u(e.children)},String(n))}},61114:(e,n,t)=>{t.d(n,{A:()=>i});var a=t(96540),r=t(99702),s=t(74848);r.N.initialize({startOnLoad:!0});const i=e=>{let{chart:n}=e;return(0,a.useEffect)((()=>{r.N.contentLoaded()}),[]),(0,s.jsx)("div",{className:"mermaid",children:n})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/0d3223a3.65fc4528.js b/pr-preview/pr-1594/assets/js/0d3223a3.65fc4528.js deleted file mode 100644 index eb729464d1..0000000000 --- a/pr-preview/pr-1594/assets/js/0d3223a3.65fc4528.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6917],{55048:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var t=r(74848),s=r(28453);const i={},o="Survey Monkey",c={id:"reference/Connectors/capture-connectors/survey-monkey",title:"Survey Monkey",description:"This connector captures data from SurveyMonkey surveys into Flow collections via the SurveyMonkey API.",source:"@site/docs/reference/Connectors/capture-connectors/survey-monkey.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/survey-monkey",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/survey-monkey.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Stripe",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe"},next:{title:"TikTok Marketing",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok"}},d={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:3},{value:"OAuth authentication in the web app",id:"oauth-authentication-in-the-web-app",level:4},{value:"Manual authentication with flowctl",id:"manual-authentication-with-flowctl",level:4},{value:"Performance considerations",id:"performance-considerations",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"survey-monkey",children:"Survey Monkey"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from SurveyMonkey surveys into Flow collections via the SurveyMonkey API."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-surveymonkey:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-surveymonkey:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/surveymonkey",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(n.p,{children:"The following data resources are supported:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.surveymonkey.com/api/v3/#api-endpoints-get-surveys",children:"Surveys"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.surveymonkey.com/api/v3/#api-endpoints-get-surveys-id-pages",children:"Survey pages"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.surveymonkey.com/api/v3/#api-endpoints-get-surveys-survey_id-pages-page_id-questions",children:"Survey questions"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.surveymonkey.com/api/v3/#api-endpoints-survey-responses",children:"Survey responses"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"You'll need to configure a SurveyMonkey private app to integrate with Flow."}),"\n",(0,t.jsx)(n.h3,{id:"setup",children:"Setup"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Go to your your ",(0,t.jsx)(n.a,{href:"https://developer.surveymonkey.com/apps",children:"SurveyMonkey apps page"})," and create a new private app."]}),"\n",(0,t.jsxs)(n.li,{children:["Set the following required ",(0,t.jsx)(n.a,{href:"https://developer.surveymonkey.com/api/v3/#scopes",children:"scopes"}),":","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"View surveys"}),"\n",(0,t.jsx)(n.li,{children:"View responses"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Deploy the app. This requires a paid SurveyMonkey plan; otherwise, ",(0,t.jsx)(n.a,{href:"https://developer.surveymonkey.com/api/v3/#deploying-an-app",children:"the app will be deleted in 90 days"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Once the app is set up, there are two ways to authenticate SurveyMonkey in Flow: using OAuth in the web app, or using an access token with the flowctl CLI."}),"\n",(0,t.jsx)(n.h4,{id:"oauth-authentication-in-the-web-app",children:"OAuth authentication in the web app"}),"\n",(0,t.jsxs)(n.p,{children:["You'll need the username and password of a SurveyMonkey user that is part of the ",(0,t.jsx)(n.a,{href:"https://help.surveymonkey.com/en/billing/teams/",children:"team"}),"\nfor which the private app was created."]}),"\n",(0,t.jsx)(n.h4,{id:"manual-authentication-with-flowctl",children:"Manual authentication with flowctl"}),"\n",(0,t.jsx)(n.p,{children:"Note the client ID, secret, and access token for the private app you created. You'll use these in the connector configuration."}),"\n",(0,t.jsx)(n.h2,{id:"performance-considerations",children:"Performance considerations"}),"\n",(0,t.jsxs)(n.p,{children:["The SurveyMonkey API imposes ",(0,t.jsx)(n.a,{href:"https://developer.surveymonkey.com/api/v3/#request-and-response-limits",children:"call limits"})," of 500 per day\nand 120 per minute."]}),"\n",(0,t.jsx)(n.p,{children:"This connector uses caching to avoid exceeding these limits."}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the SurveyMonkey source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.p,{children:["The properties in the table below reflect the manual authentication method.\nIf you're working in the Flow web app, you'll use ",(0,t.jsx)(n.a,{href:"#oauth-authentication-in-the-web-app",children:"OAuth2"}),",\nso many of these properties aren't required."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials"})})}),(0,t.jsx)(n.td,{children:"Credentials"}),(0,t.jsx)(n.td,{children:"Credentials for the service"}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/access_token"})})}),(0,t.jsx)(n.td,{children:"Access Token"}),(0,t.jsx)(n.td,{children:"Access Token for your SurveyMonkey private app."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/client_id"})})}),(0,t.jsx)(n.td,{children:"Client ID"}),(0,t.jsx)(n.td,{children:"Client ID associated with your SurveyMonkey private app."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/client_secret"})})}),(0,t.jsx)(n.td,{children:"Client Secret"}),(0,t.jsx)(n.td,{children:"Client secret associated with your SurveyMonkey private app."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/start_date"})})}),(0,t.jsx)(n.td,{children:"Start Date"}),(0,t.jsx)(n.td,{children:"UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/survey_ids"})}),(0,t.jsx)(n.td,{children:"Survey Monkey survey IDs"}),(0,t.jsx)(n.td,{children:"IDs of the surveys from which you'd like to replicate data. If left empty, data from all boards to which you have access will be replicated."}),(0,t.jsx)(n.td,{children:"array"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"SurveyMonkey resource from which a collection is captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.p,{children:"This sample specification reflects the manual authentication method."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-surveymonkey:dev\n config:\n credentials:\n access_token: {secret}\n client_id: XXXXXXXXXXXXXXXX\n client_secret: {secret}\n start_date: 2021-01-25T00:00:00Z\n bindings:\n - resource:\n stream: surveys\n syncMode: incremental\n target: ${PREFIX}/surveys\n {...}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>c});var t=r(96540);const s={},i=t.createContext(s);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/0d762a34.feefc22e.js b/pr-preview/pr-1594/assets/js/0d762a34.feefc22e.js deleted file mode 100644 index 8c8fcad896..0000000000 --- a/pr-preview/pr-1594/assets/js/0d762a34.feefc22e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[658],{14639:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var r=n(74848),s=n(28453);const o={sidebar_position:1,description:"Get to know Estuary Flow and learn how to get started.",slug:"/"},i="Flow documentation",a={id:"overview/README",title:"Flow documentation",description:"Get to know Estuary Flow and learn how to get started.",source:"@site/docs/overview/README.md",sourceDirName:"overview",slug:"/",permalink:"/pr-preview/pr-1594/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/overview/README.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"Get to know Estuary Flow and learn how to get started.",slug:"/"},sidebar:"tutorialSidebar",next:{title:"Who should use Flow?",permalink:"/pr-preview/pr-1594/overview/who-should-use-flow"}},l={},d=[{value:"Quick start",id:"quick-start",level:3},{value:"Real-time data and Flow",id:"real-time-data-and-flow",level:2},{value:"Other resources",id:"other-resources",level:3}];function c(e){const t={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"flow-documentation",children:"Flow documentation"}),"\n",(0,r.jsx)(t.p,{children:"Estuary Flow is a data movement and transformation platform for the whole data team."}),"\n",(0,r.jsxs)(t.p,{children:["With Flow, you build, test, and evolve streaming pipelines (called ",(0,r.jsx)(t.strong,{children:"data flows"})," in the Flow ecosystem) that continuously move data across all of your systems with optional in-flight transformations."]}),"\n",(0,r.jsx)(t.p,{children:"You work with Flow through its intuitive web application or using the command line interface.\nBusiness users and analysts can configure data flows to connect disparate systems in minutes,\nand engineers can then refine those data flows, troubleshoot, and configure complex transformations in their preferred environment."}),"\n",(0,r.jsx)(t.h3,{id:"quick-start",children:"Quick start"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Want to get up and running ASAP?"})}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://dashboard.estuary.dev",children:"Use the web app to sign up."})," (You start for ",(0,r.jsx)(t.a,{href:"https://estuary.dev/pricing",children:"free"}),".)"]}),"\n",(0,r.jsxs)(t.p,{children:["See the ",(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/getting-started/installation",children:"get started documentation"}),"."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Wondering if Flow is right for you?"})}),"\n",(0,r.jsx)(t.p,{children:"If you're unsure if Flow is the right solution for your data integration needs, you can read about the technical benefits and clear comparisons with similar systems that may be familiar to you."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/overview/who-should-use-flow",children:"Who should use Flow?"})})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/overview/comparisons",children:"Comparisons with other systems"})})}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Looking to understand the concepts behind Flow at a deeper level?"})}),"\n",(0,r.jsxs)(t.p,{children:["We recommend starting with a tutorial or ",(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"guide"})," to get acquainted with basic Flow concepts in action.\nAfter that, read the ",(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/",children:"Concepts"})})," to go deeper."]}),"\n",(0,r.jsx)(t.h2,{id:"real-time-data-and-flow",children:"Real-time data and Flow"}),"\n",(0,r.jsx)(t.p,{children:"Flow synchronizes your systems \u2013 SaaS, databases, streaming, and more \u2013 around the same datasets, which it stores in the cloud and updates in milliseconds. It combines the easy cross-system integration of an ELT tool and a flexible streaming backbone,\nall while remaining aware of your data's complete history."}),"\n",(0,r.jsx)(t.p,{children:"A few examples of what you can do with Flow:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Perform ",(0,r.jsx)(t.em,{children:"change data capture"})," from MySQL tables into PostgreSQL or a cloud analytics warehouse"]}),"\n",(0,r.jsx)(t.li,{children:"Fetch, transform, and load logs from cloud delivery networks (CDNs) into Elasticsearch or BigQuery"}),"\n",(0,r.jsx)(t.li,{children:"Instrument real-time analytics over your business events, accessible from current tools like PostgreSQL or even Google Sheets"}),"\n",(0,r.jsx)(t.li,{children:"Capture and organize your data from your SaaS vendors (like Hubspot or Facebook), into a Parquet data lake"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Under the hood, Flow comprises cloud-native streaming infrastructure, a powerful runtime for data processing,\nand an open-source ecosystem of pluggable connectors for integrating your existing data systems."}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h3,{id:"other-resources",children:(0,r.jsx)(t.strong,{children:"Other resources"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Our ",(0,r.jsx)(t.a,{href:"https://www.estuary.dev",children:"website"})," offers general information about Flow, Estuary, and how we fit into the data infrastructure landscape."]}),"\n",(0,r.jsxs)(t.li,{children:["Our source code lives on ",(0,r.jsx)(t.a,{href:"https://github.com/estuary",children:"GitHub"}),"."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>a});var r=n(96540);const s={},o=r.createContext(s);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/0ea4d505.941429b1.js b/pr-preview/pr-1594/assets/js/0ea4d505.941429b1.js deleted file mode 100644 index de7a3dd619..0000000000 --- a/pr-preview/pr-1594/assets/js/0ea4d505.941429b1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6341],{96243:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>n,metadata:()=>l,toc:()=>a});var o=i(74848),s=i(28453);const n={},r="flowctl guides",l={id:"guides/flowctl/README",title:"flowctl guides",description:"The guides in this section cover common workflows using the Estuary Flow CLI, flowctl.",source:"@site/docs/guides/flowctl/README.md",sourceDirName:"guides/flowctl",slug:"/guides/flowctl/",permalink:"/pr-preview/pr-1594/guides/flowctl/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/flowctl/README.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Edit Data Flows in the web app",permalink:"/pr-preview/pr-1594/guides/edit-data-flows"},next:{title:"Edit a Flow specification locally",permalink:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally"}},c={},a=[];function d(e){const t={a:"a",h1:"h1",p:"p",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"flowctl-guides",children:"flowctl guides"}),"\n",(0,o.jsxs)(t.p,{children:["The guides in this section cover common workflows using the Estuary Flow CLI, flowctl.\nLearn how to ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally",children:"edit published Flow entities"}),", ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/flowctl/create-derivation",children:"create derivations"}),", and more."]}),"\n",(0,o.jsxs)(t.p,{children:["To get to know flowctl, ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/flowctl",children:"see the concepts page"}),"."]})]})}function p(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,t,i)=>{i.d(t,{R:()=>r,x:()=>l});var o=i(96540);const s={},n=o.createContext(s);function r(e){const t=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/0fda5f57.aa85507c.js b/pr-preview/pr-1594/assets/js/0fda5f57.aa85507c.js deleted file mode 100644 index 6eead56b15..0000000000 --- a/pr-preview/pr-1594/assets/js/0fda5f57.aa85507c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[929],{36814:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>h});var i=o(74848),n=o(28453),r=o(61114);const s={sidebar_position:7},a="Imports",l={id:"concepts/import",title:"Imports",description:"When you work on a draft Data Flow using flowctl draft,",source:"@site/docs/concepts/import.md",sourceDirName:"concepts",slug:"/concepts/import",permalink:"/pr-preview/pr-1594/concepts/import",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/import.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"tutorialSidebar",previous:{title:"flowctl",permalink:"/pr-preview/pr-1594/concepts/flowctl"},next:{title:"Schemas",permalink:"/pr-preview/pr-1594/concepts/schemas"}},c={},h=[{value:"Specification",id:"specification",level:2},{value:"Fetch behavior",id:"fetch-behavior",level:2},{value:"Import types",id:"import-types",level:2},{value:"JSON Schema $ref",id:"json-schema-ref",level:2},{value:"Importing derivation resources",id:"importing-derivation-resources",level:2},{value:"Import paths",id:"import-paths",level:2}];function d(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"imports",children:"Imports"}),"\n",(0,i.jsxs)(t.p,{children:["When you work on a draft Data Flow ",(0,i.jsxs)(t.a,{href:"/pr-preview/pr-1594/concepts/flowctl#working-with-drafts",children:["using ",(0,i.jsx)(t.code,{children:"flowctl draft"})]}),",\nyour Flow specifications may be spread across multiple files.\nFor example, you may have multiple ",(0,i.jsx)(t.strong,{children:"materializations"})," that read from collections defined in separate files,\nor you could store a ",(0,i.jsx)(t.strong,{children:"derivation"})," separately from its ",(0,i.jsx)(t.strong,{children:"tests"}),".\nYou might also reference specifications that aren't in your local draft.\nFor example, you might create a derivation with a source collection that is not in your local draft."]}),"\n",(0,i.jsxs)(t.p,{children:["When you publish your draft, Flow automatically resolves references to specifications across the entirety of the ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/catalogs",children:"catalog"}),".\nThis is possible because every entity in Flow has a globally unique name."]}),"\n",(0,i.jsxs)(t.p,{children:["Alternatively, you can explicitly add other local specification files to the Data Flow's build process by including an ",(0,i.jsx)(t.code,{children:"import"})," section\nin the Flow specification file you'll publish.\nWhen the draft is published, the imported specifications are treated as part of the file\ninto which they are imported.\nAll entities in the draft will be used to overwrite any existing version of those entities in the global catalog."]}),"\n",(0,i.jsxs)(t.p,{children:["Explicit imports are useful when you need to update multiple components of a data flow at the same time,\nbut they're in separate files.\nFor example, when you update a derivation, you must also update its test(s) at the same time to prevent failures.\nYou could import ",(0,i.jsx)(t.code,{children:"test.yaml"})," into ",(0,i.jsx)(t.code,{children:"my-derivation.yaml"})," and then publish ",(0,i.jsx)(t.code,{children:"my-derivation.yaml"})," to update both entities in the catalog."]}),"\n",(0,i.jsxs)(t.p,{children:["A common pattern for a given draft is to have a single top-level specification\nfile which explicitly imports all the others.\nFlow automatically generates such a top-level file for your draft when you begin a local work session\nusing ",(0,i.jsx)(t.code,{children:"flowctl draft develop"}),"."]}),"\n",(0,i.jsx)(t.h2,{id:"specification",children:"Specification"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"import"})," section is structured as a list of partial or absolute URIs,\nwhich Flow always evaluates relative to the base directory of the current source file.\nFor example, these are possible imports within a collection:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:'# Suppose we\'re in file "/path/dir/flow.yaml"\nimport:\n - sub/directory/flow.yaml # Resolves to "file:///path/dir/sub/directory/flow.yaml".\n - ../sibling/directory/flow.yaml # Resolves to "file:///path/sibling/directory/flow.yaml".\n - https://example/path/flow.yaml # Uses the absolute url.\n'})}),"\n",(0,i.jsxs)(t.p,{children:["The import rule is flexible; a collection doesn\u2019t have to do anything special\nto be imported by another,\nand ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/flowctl",children:(0,i.jsx)(t.code,{children:"flowctl"})})," can even directly build remote sources:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"# Test an example from a GitHub repository.\n$ flowctl draft test --source https://raw.githubusercontent.com/estuary/flow-template/main/word-counts.flow.yaml\n"})}),"\n",(0,i.jsx)(t.h2,{id:"fetch-behavior",children:"Fetch behavior"}),"\n",(0,i.jsxs)(t.p,{children:["Flow resolves, fetches, and validates all imports in your local environment during the catalog build process,\nand then includes their fetched contents within the published catalog on the Estuary servers.\nThe resulting catalog entities are thus self-contained snapshots of all resources\n",(0,i.jsx)(t.em,{children:"as they were"})," at the time of publication."]}),"\n",(0,i.jsx)(t.p,{children:"This means it's both safe and recommended to directly reference\nan authoritative source of a resource, such as a third-party JSON schema, as well as resources within your private network.\nIt will be fetched and verified locally at build time,\nand thereafter that fetched version will be used for execution,\nregardless of whether the authority URL itself later changes or errors."}),"\n",(0,i.jsx)(t.h2,{id:"import-types",children:"Import types"}),"\n",(0,i.jsxs)(t.p,{children:["Almost always, the ",(0,i.jsx)(t.code,{children:"import"})," stanza is used to import other Flow\nspecification files.\nThis is the default when given a string path:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"import:\n - path/to/source/catalog.flow.yaml\n"})}),"\n",(0,i.jsx)(t.p,{children:"A long-form variant also accepts a content type of the imported resource:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"import:\n - url: path/to/source/catalog.flow.yaml\n contentType: CATALOG\n"})}),"\n",(0,i.jsxs)(t.p,{children:["Other permitted content types include ",(0,i.jsx)(t.code,{children:"JSON_SCHEMA"}),",\nbut these are not typically used and are needed only for advanced use cases."]}),"\n",(0,i.jsxs)(t.h2,{id:"json-schema-ref",children:["JSON Schema ",(0,i.jsx)(t.code,{children:"$ref"})]}),"\n",(0,i.jsxs)(t.p,{children:["Certain catalog entities, like collections, commonly reference JSON schemas.\nIt's not necessary to explicitly add these to the ",(0,i.jsx)(t.code,{children:"import"})," section;\nthey are automatically resolved and treated as an import.\nYou can think of this as an analog to the JSON Schema ",(0,i.jsx)(t.code,{children:"$ref"})," keyword,\nwhich is used to reference a schema that may\nbe contained in another file."]}),"\n",(0,i.jsxs)(t.p,{children:["The one exception is schemas that use the ",(0,i.jsx)(t.code,{children:"$id"})," keyword\nat their root to define an alternative canonical URL.\nIn this case, the schema must be referenced through its canonical URL,\nand then explicitly added to the ",(0,i.jsx)(t.code,{children:"import"})," section\nwith ",(0,i.jsx)(t.code,{children:"JSON_SCHEMA"})," content type."]}),"\n",(0,i.jsx)(t.h2,{id:"importing-derivation-resources",children:"Importing derivation resources"}),"\n",(0,i.jsxs)(t.p,{children:["In many cases, ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivations"})," in your catalog will need to import resources.\nUsually, these are TypeScript modules that define the lambda functions of a transformation,\nand, in certain cases, the NPM dependencies of that TypeScript module."]}),"\n",(0,i.jsxs)(t.p,{children:["These imports are specified in the derivation specification, ",(0,i.jsx)(t.em,{children:"not"})," in the ",(0,i.jsx)(t.code,{children:"import"})," section of the specification file."]}),"\n",(0,i.jsxs)(t.p,{children:["For more information, see ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/derivations#specification",children:"Derivation specification"})," and ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/derivations#creating-typescript-modules",children:"creating TypeScript modules"}),"."]}),"\n",(0,i.jsx)(t.h2,{id:"import-paths",children:"Import paths"}),"\n","\n",(0,i.jsxs)(t.p,{children:["If a catalog source file ",(0,i.jsx)(t.code,{children:"foo.flow.yaml"})," references a collection in ",(0,i.jsx)(t.code,{children:"bar.flow.yaml"}),",\nfor example as a target of a capture,\nthere must be an ",(0,i.jsx)(t.em,{children:"import path"})," where either ",(0,i.jsx)(t.code,{children:"foo.flow.yaml"}),"\nimports ",(0,i.jsx)(t.code,{children:"bar.flow.yaml"})," or vice versa."]}),"\n",(0,i.jsxs)(t.p,{children:["When you omit the ",(0,i.jsx)(t.code,{children:"import"})," section, Flow chooses an import path for you.\nWhen you explicitly include the ",(0,i.jsx)(t.code,{children:"import"})," section, you have more control over the import path."]}),"\n",(0,i.jsx)(t.p,{children:"Import paths can be direct:"}),"\n",(0,i.jsx)(r.A,{chart:"\n\tgraph LR;\n\t\tfoo.flow.yaml--\x3ebar.flow.yaml;\n"}),"\n",(0,i.jsx)(t.p,{children:"Or they can be indirect:"}),"\n",(0,i.jsx)(r.A,{chart:"\n\tgraph LR;\n\t\tbar.flow.yaml--\x3eother.flow.yaml;\n other.flow.yaml--\x3efoo.flow.yaml;\n"}),"\n",(0,i.jsxs)(t.p,{children:["The sources must still have an import path\neven if referenced from a common parent.\nThe following would ",(0,i.jsx)(t.strong,{children:"not"})," work:"]}),"\n",(0,i.jsx)(r.A,{chart:"\n\tgraph LR;\n\t\tparent.flow.yaml--\x3efoo.flow.yaml;\n\t\tparent.flow.yaml--\x3ebar.flow.yaml;\n"}),"\n",(0,i.jsxs)(t.p,{children:["These rules make your catalog sources more self-contained\nand less brittle to refactoring and reorganization.\nConsider what might otherwise happen if ",(0,i.jsx)(t.code,{children:"foo.flow.yaml"}),"\nwere imported in another project without ",(0,i.jsx)(t.code,{children:"bar.flow.yaml"}),"."]})]})}function p(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},61114:(e,t,o)=>{o.d(t,{A:()=>s});var i=o(96540),n=o(99702),r=o(74848);n.N.initialize({startOnLoad:!0});const s=e=>{let{chart:t}=e;return(0,i.useEffect)((()=>{n.N.contentLoaded()}),[]),(0,r.jsx)("div",{className:"mermaid",children:t})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/104ea86a.f1e9ae96.js b/pr-preview/pr-1594/assets/js/104ea86a.f1e9ae96.js deleted file mode 100644 index e5c5a54909..0000000000 --- a/pr-preview/pr-1594/assets/js/104ea86a.f1e9ae96.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6313],{32076:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>a});var s=n(74848),t=n(28453);const i={},c="Salesforce \u2014 Real-time data",l={id:"reference/Connectors/capture-connectors/Salesforce/salesforce-real-time",title:"Salesforce \u2014 Real-time data",description:"This connector captures data from Salesforce objects into Flow collections in real time via the Salesforce PushTopic API.",source:"@site/docs/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time.md",sourceDirName:"reference/Connectors/capture-connectors/Salesforce",slug:"/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Salesforce \u2014 Historical data",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data"},next:{title:"SendGrid",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid"}},o={},a=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with Salesforce in the Flow web app",id:"using-oauth2-to-authenticate-with-salesforce-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually",id:"configuring-the-connector-specification-manually",level:3},{value:"Setup",id:"setup",level:3},{value:"Create a read-only Salesforce user",id:"create-a-read-only-salesforce-user",level:4},{value:"Create a developer application and generate authorization tokens",id:"create-a-developer-application-and-generate-authorization-tokens",level:4},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function d(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"salesforce--real-time-data",children:"Salesforce \u2014 Real-time data"}),"\n",(0,s.jsxs)(r.p,{children:["This connector captures data from Salesforce objects into Flow collections in real time via the ",(0,s.jsx)(r.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.api_streaming.meta/api_streaming/pushtopic_events_intro.htm",children:"Salesforce PushTopic API"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data",children:"A separate connector is available for syncing historical Salesforce data"}),".\nFor help using both connectors in parallel, ",(0,s.jsx)(r.a,{href:"mailto:info@estuary.dev",children:"contact your Estuary account manager"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["This connector is available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(r.a,{href:"https://ghcr.io/estuary/source-salesforce-next:dev",children:(0,s.jsx)(r.code,{children:"ghcr.io/estuary/source-salesforce-next:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(r.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,s.jsxs)(r.p,{children:["This connector can capture the following Salesforce ",(0,s.jsx)(r.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_list.htm",children:"standard objects"}),", if present in your account:"]}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:"Account"}),"\n",(0,s.jsx)(r.li,{children:"Contact"}),"\n",(0,s.jsx)(r.li,{children:"User"}),"\n",(0,s.jsx)(r.li,{children:"OpportunityFilledHistory"}),"\n",(0,s.jsx)(r.li,{children:"LeadHistory"}),"\n",(0,s.jsx)(r.li,{children:"Opportunity"}),"\n",(0,s.jsx)(r.li,{children:"Campaign"}),"\n",(0,s.jsx)(r.li,{children:"Case"}),"\n",(0,s.jsx)(r.li,{children:"ContactLineItem"}),"\n",(0,s.jsx)(r.li,{children:"Entitlement"}),"\n",(0,s.jsx)(r.li,{children:"Lead"}),"\n",(0,s.jsx)(r.li,{children:"LiveChatTranscript"}),"\n",(0,s.jsx)(r.li,{children:"MessagingSession"}),"\n",(0,s.jsx)(r.li,{children:"Quote"}),"\n",(0,s.jsx)(r.li,{children:"QuoteLineItem"}),"\n",(0,s.jsx)(r.li,{children:"ServiceAppointment"}),"\n",(0,s.jsx)(r.li,{children:"ServiceContract"}),"\n",(0,s.jsx)(r.li,{children:"Task"}),"\n",(0,s.jsx)(r.li,{children:"UserServicePresence"}),"\n",(0,s.jsx)(r.li,{children:"WorkOrder"}),"\n",(0,s.jsx)(r.li,{children:"WorkOrderLineItem"}),"\n"]}),"\n",(0,s.jsx)(r.p,{children:"Because most Salesforce accounts contain large volumes of data, you may only want to capture a subset of the available objects.\nThere are several ways to control this:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["Create a ",(0,s.jsx)(r.a,{href:"#create-a-read-only-salesforce-user",children:"dedicated Salesforce user"})," with access only to the objects you'd like to capture."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["During ",(0,s.jsx)(r.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-capture",children:"capture creation in the web application"}),",\nremove the bindings for objects you don't want to capture."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(r.h3,{id:"using-oauth2-to-authenticate-with-salesforce-in-the-flow-web-app",children:"Using OAuth2 to authenticate with Salesforce in the Flow web app"}),"\n",(0,s.jsx)(r.p,{children:"If you're using the Flow web app, you'll be prompted to authenticate with Salesforce using OAuth. You'll need the following:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["A Salesforce organization on the Enterprise tier, or with an equivalent ",(0,s.jsx)(r.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_api.htm",children:"API request allocation"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["Salesforce user credentials. We recommend creating a dedicated read-only ",(0,s.jsx)(r.a,{href:"#create-a-read-only-salesforce-user",children:"Salesforce user"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(r.h3,{id:"configuring-the-connector-specification-manually",children:"Configuring the connector specification manually"}),"\n",(0,s.jsx)(r.p,{children:"If you're working with flowctl and writing specifications in a local development environment,\nyou'll need to manually supply OAuth credentials. You'll need:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["The items required to ",(0,s.jsx)(r.a,{href:"#using-oauth2-to-authenticate-with-salesforce-in-the-flow-web-app",children:"set up with OAuth2"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["A Salesforce developer application with a generated client ID, client secret, and refresh token. ",(0,s.jsx)(r.a,{href:"#create-a-developer-application-and-generate-authorization-tokens",children:"See setup steps."})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(r.h3,{id:"setup",children:"Setup"}),"\n",(0,s.jsx)(r.h4,{id:"create-a-read-only-salesforce-user",children:"Create a read-only Salesforce user"}),"\n",(0,s.jsx)(r.p,{children:"Creating a dedicated read-only Salesforce user is a simple way to specify which objects Flow will capture."}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["While signed in as an administrator, create a ",(0,s.jsx)(r.a,{href:"https://help.salesforce.com/s/articleView?id=sf.users_profiles_cloning.htm&type=5",children:"new profile"})," by cloning the standard ",(0,s.jsx)(r.a,{href:"https://help.salesforce.com/s/articleView?id=sf.standard_profiles.htm&type=5",children:"Minimum Access"})," profile."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"https://help.salesforce.com/s/articleView?id=sf.perm_sets_object_perms_edit.htm&type=5",children:"Edit the new profile's permissions"}),". Grant it read access to all the standard and custom objects you'd like to capture with Flow."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"https://help.salesforce.com/s/articleView?id=sf.adding_new_users.htm&type=5",children:"Create a new user"}),", applying the profile you just created.\nYou'll use this user's email address and password to authenticate Salesforce in Flow."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(r.h4,{id:"create-a-developer-application-and-generate-authorization-tokens",children:"Create a developer application and generate authorization tokens"}),"\n",(0,s.jsx)(r.p,{children:"To manually write a capture specification for Salesforce, you need to create and configure a developer application.\nThrough this process, you'll obtain the client ID, client secret, and refresh token."}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["Create a ",(0,s.jsx)(r.a,{href:"https://help.salesforce.com/s/articleView?id=sf.connected_app_create_api_integration.htm&type=5",children:"new developer application"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["a. When selecting ",(0,s.jsx)(r.strong,{children:"Scopes"})," for your app, select ",(0,s.jsxs)(r.strong,{children:["Manage user data via APIs ",(0,s.jsx)(r.code,{children:"(api)"})]}),", ",(0,s.jsxs)(r.strong,{children:["Perform requests at any time ",(0,s.jsx)(r.code,{children:"(refresh_token, offline_access)"})]}),", and ",(0,s.jsxs)(r.strong,{children:["Manage user data via Web browsers ",(0,s.jsx)(r.code,{children:"(web)"})]}),"."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["Edit the app to ensure that ",(0,s.jsx)(r.strong,{children:"Permitted users"})," is set to ",(0,s.jsx)(r.a,{href:"https://help.salesforce.com/s/articleView?id=sf.connected_app_manage_oauth.htm&type=5",children:"All users may self-authorize"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["Locate the ",(0,s.jsx)(r.a,{href:"https://help.salesforce.com/s/articleView?id=sf.remoteaccess_oauth_web_server_flow.htm&type=5",children:"Consumer Key and Consumer Secret"}),". These are equivalent to the client id and client secret, respectively."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["Follow the ",(0,s.jsx)(r.a,{href:"https://help.salesforce.com/s/articleView?id=sf.remoteaccess_oauth_web_server_flow.htm&type=5",children:"Salesforce Web Server Flow"}),". The final POST response will include your refresh token."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(r.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,s.jsx)(r.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the real-time Salesforce source connector."]}),"\n",(0,s.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(r.p,{children:["The properties in the table below reflect the manual authentication method.\nIf you're working in the Flow web app, you'll use ",(0,s.jsx)(r.a,{href:"#using-oauth2-to-authenticate-with-salesforce-in-the-flow-web-app",children:"OAuth2"}),",\nso you won't need the ",(0,s.jsx)(r.code,{children:"/credentials"})," values listed here."]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Property"}),(0,s.jsx)(r.th,{children:"Title"}),(0,s.jsx)(r.th,{children:"Description"}),(0,s.jsx)(r.th,{children:"Type"}),(0,s.jsx)(r.th,{children:"Required/Default"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.code,{children:"/credentials"})})}),(0,s.jsx)(r.td,{}),(0,s.jsx)(r.td,{}),(0,s.jsx)(r.td,{children:"object"}),(0,s.jsx)(r.td,{children:"Required"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.code,{children:"/credentials/client_id"})})}),(0,s.jsx)(r.td,{children:"Client ID"}),(0,s.jsx)(r.td,{children:"The Salesforce Client ID, also known as a Consumer Key, for your developer application."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.code,{children:"/credentials/client_secret"})})}),(0,s.jsx)(r.td,{children:"Client Secret"}),(0,s.jsx)(r.td,{children:"The Salesforce Client Secret, also known as a Consumer Secret, for your developer application."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.code,{children:"/credentials/refresh_token"})})}),(0,s.jsx)(r.td,{children:"Refresh Token"}),(0,s.jsx)(r.td,{children:"The refresh token generated by your developer application."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"/is_sandbox"})}),(0,s.jsx)(r.td,{children:"Sandbox"}),(0,s.jsxs)(r.td,{children:["Whether you're using a ",(0,s.jsx)(r.a,{href:"https://help.salesforce.com/s/articleView?id=sf.deploy_sandboxes_parent.htm&type=5",children:"Salesforce Sandbox"}),"."]}),(0,s.jsx)(r.td,{children:"boolean"}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"false"})})]})]})]}),"\n",(0,s.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Property"}),(0,s.jsx)(r.th,{children:"Title"}),(0,s.jsx)(r.th,{children:"Description"}),(0,s.jsx)(r.th,{children:"Type"}),(0,s.jsx)(r.th,{children:"Required/Default"})]})}),(0,s.jsx)(r.tbody,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.code,{children:"/stream"})})}),(0,s.jsx)(r.td,{children:"Stream"}),(0,s.jsx)(r.td,{children:"Salesforce object from which a collection is captured."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]})})]}),"\n",(0,s.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-salesforce-next:dev\n config:\n credentials:\n client_id: {your_client_id}\n client_secret: {secret}\n refresh_token: {XXXXXXXX}\n is_sandbox: false\n bindings:\n - resource:\n stream: WorkOrder\n target: ${PREFIX}/WorkOrder\n - resource:\n stream: WorkOrderLineItem\n target: ${PREFIX}/WorkOrderLineItem\n"})})]})}function h(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>c,x:()=>l});var s=n(96540);const t={},i=s.createContext(t);function c(e){const r=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function l(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1169.640da5fa.js b/pr-preview/pr-1594/assets/js/1169.640da5fa.js deleted file mode 100644 index 3c86c43359..0000000000 --- a/pr-preview/pr-1594/assets/js/1169.640da5fa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1169],{73046:(t,e,n)=>{n.d(e,{T:()=>k});var r=n(48585),o=n(39142),i=n(89610),s=n(27422),u=n(11662),c=n(66401),a=n(8058),f=n(69592),h=n(13588),A=n(24326),d=n(62062),l=n(25707);const v=function(t){return t!=t};const b=function(t,e,n){for(var r=n-1,o=t.length;++r-1};const g=function(t,e,n){for(var r=-1,o=null==t?0:t.length;++r=200){var a=e?null:C(t);if(a)return(0,w.A)(a);s=!1,o=j.A,c=new d.A}else c=e?[]:u;t:for(;++r1?r.setNode(t,e):r.setNode(t)})),this}setNode(t,e){return r.A(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=P,this._children[t]={},this._children[P][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)}node(t){return this._nodes[t]}hasNode(t){return r.A(this._nodes,t)}removeNode(t){var e=this;if(r.A(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],a.A(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),a.A(s.A(this._in[t]),n),delete this._in[t],delete this._preds[t],a.A(s.A(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this}setParent(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(f.A(e))e=P;else{for(var n=e+="";!f.A(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this}_removeFromParentsChildList(t){delete this._children[this._parent[t]][t]}parent(t){if(this._isCompound){var e=this._parent[t];if(e!==P)return e}}children(t){if(f.A(t)&&(t=P),this._isCompound){var e=this._children[t];if(e)return s.A(e)}else{if(t===P)return this.nodes();if(this.hasNode(t))return[]}}predecessors(t){var e=this._preds[t];if(e)return s.A(e)}successors(t){var e=this._sucs[t];if(e)return s.A(e)}neighbors(t){var e=this.predecessors(t);if(e)return N(e,this.successors(t))}isLeaf(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length}filterNodes(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var n=this;a.A(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),a.A(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var r={};function o(t){var i=n.parent(t);return void 0===i||e.hasNode(i)?(r[t]=i,i):i in r?r[i]:o(i)}return this._isCompound&&a.A(e.nodes(),(function(t){e.setParent(t,o(t))})),e}setDefaultEdgeLabel(t){return i.A(t)||(t=o.A(t)),this._defaultEdgeLabelFn=t,this}edgeCount(){return this._edgeCount}edges(){return D.A(this._edgeObjs)}setPath(t,e){var n=this,r=arguments;return S.A(t,(function(t,o){return r.length>1?n.setEdge(t,o,e):n.setEdge(t,o),o})),this}setEdge(){var t,e,n,o,i=!1,s=arguments[0];"object"==typeof s&&null!==s&&"v"in s?(t=s.v,e=s.w,n=s.name,2===arguments.length&&(o=arguments[1],i=!0)):(t=s,e=arguments[1],n=arguments[3],arguments.length>2&&(o=arguments[2],i=!0)),t=""+t,e=""+e,f.A(n)||(n=""+n);var u=U(this._isDirected,t,e,n);if(r.A(this._edgeLabels,u))return i&&(this._edgeLabels[u]=o),this;if(!f.A(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[u]=i?o:this._defaultEdgeLabelFn(t,e,n);var c=function(t,e,n,r){var o=""+e,i=""+n;if(!t&&o>i){var s=o;o=i,i=s}var u={v:o,w:i};r&&(u.name=r);return u}(this._isDirected,t,e,n);return t=c.v,e=c.w,Object.freeze(c),this._edgeObjs[u]=c,I(this._preds[e],t),I(this._sucs[t],e),this._in[e][u]=c,this._out[t][u]=c,this._edgeCount++,this}edge(t,e,n){var r=1===arguments.length?z(this._isDirected,arguments[0]):U(this._isDirected,t,e,n);return this._edgeLabels[r]}hasEdge(t,e,n){var o=1===arguments.length?z(this._isDirected,arguments[0]):U(this._isDirected,t,e,n);return r.A(this._edgeLabels,o)}removeEdge(t,e,n){var r=1===arguments.length?z(this._isDirected,arguments[0]):U(this._isDirected,t,e,n),o=this._edgeObjs[r];return o&&(t=o.v,e=o.w,delete this._edgeLabels[r],delete this._edgeObjs[r],x(this._preds[e],t),x(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this}inEdges(t,e){var n=this._in[t];if(n){var r=D.A(n);return e?u.A(r,(function(t){return t.v===e})):r}}outEdges(t,e){var n=this._out[t];if(n){var r=D.A(n);return e?u.A(r,(function(t){return t.w===e})):r}}nodeEdges(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}}function I(t,e){t[e]?t[e]++:t[e]=1}function x(t,e){--t[e]||delete t[e]}function U(t,e,n,r){var o=""+e,i=""+n;if(!t&&o>i){var s=o;o=i,i=s}return o+M+i+M+(f.A(r)?F:r)}function z(t,e){return U(t,e.v,e.w,e.name)}k.prototype._nodeCount=0,k.prototype._edgeCount=0},697:(t,e,n)=>{n.d(e,{T:()=>r.T});var r=n(73046)},62062:(t,e,n)=>{n.d(e,{A:()=>u});var r=n(29471);const o=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this};const i=function(t){return this.__data__.has(t)};function s(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r.A;++e{n.d(e,{A:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length;++n{n.d(e,{A:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length,o=0,i=[];++n{n.d(e,{A:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n{n.d(e,{A:()=>r});const r=function(t,e){for(var n=-1,r=e.length,o=t.length;++n{n.d(e,{A:()=>Z});var r=n(11754),o=n(72641),i=n(52851),s=n(22031),u=n(27422);const c=function(t,e){return t&&(0,s.A)(e,(0,u.A)(e),t)};var a=n(55615);const f=function(t,e){return t&&(0,s.A)(e,(0,a.A)(e),t)};var h=n(80154),A=n(39759),d=n(14792);const l=function(t,e){return(0,s.A)(t,(0,d.A)(t),e)};var v=n(76912),b=n(15647),_=n(13153);const p=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)(0,v.A)(e,(0,d.A)(t)),t=(0,b.A)(t);return e}:_.A;const g=function(t,e){return(0,s.A)(t,p(t),e)};var j=n(19042),y=n(33831);const m=function(t){return(0,y.A)(t,a.A,p)};var w=n(9779),O=Object.prototype.hasOwnProperty;const C=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&O.call(t,"index")&&(n.index=t.index,n.input=t.input),n};var E=n(90565);const L=function(t,e){var n=e?(0,E.A)(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)};var N=/\w*$/;const D=function(t){var e=new t.constructor(t.source,N.exec(t));return e.lastIndex=t.lastIndex,e};var S=n(241),F=S.A?S.A.prototype:void 0,P=F?F.valueOf:void 0;const M=function(t){return P?Object(P.call(t)):{}};var k=n(1801);const I=function(t,e,n){var r=t.constructor;switch(e){case"[object ArrayBuffer]":return(0,E.A)(t);case"[object Boolean]":case"[object Date]":return new r(+t);case"[object DataView]":return L(t,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return(0,k.A)(t,n);case"[object Map]":case"[object Set]":return new r;case"[object Number]":case"[object String]":return new r(t);case"[object RegExp]":return D(t);case"[object Symbol]":return M(t)}};var x=n(18598),U=n(92049),z=n(99912),B=n(53098);const $=function(t){return(0,B.A)(t)&&"[object Map]"==(0,w.A)(t)};var G=n(52789),R=n(64841),T=R.A&&R.A.isMap;const V=T?(0,G.A)(T):$;var W=n(23149);const q=function(t){return(0,B.A)(t)&&"[object Set]"==(0,w.A)(t)};var H=R.A&&R.A.isSet;const J=H?(0,G.A)(H):q;var K="[object Arguments]",Q="[object Function]",X="[object Object]",Y={};Y[K]=Y["[object Array]"]=Y["[object ArrayBuffer]"]=Y["[object DataView]"]=Y["[object Boolean]"]=Y["[object Date]"]=Y["[object Float32Array]"]=Y["[object Float64Array]"]=Y["[object Int8Array]"]=Y["[object Int16Array]"]=Y["[object Int32Array]"]=Y["[object Map]"]=Y["[object Number]"]=Y[X]=Y["[object RegExp]"]=Y["[object Set]"]=Y["[object String]"]=Y["[object Symbol]"]=Y["[object Uint8Array]"]=Y["[object Uint8ClampedArray]"]=Y["[object Uint16Array]"]=Y["[object Uint32Array]"]=!0,Y["[object Error]"]=Y[Q]=Y["[object WeakMap]"]=!1;const Z=function t(e,n,s,d,v,b){var _,p=1&n,y=2&n,O=4&n;if(s&&(_=v?s(e,d,v,b):s(e)),void 0!==_)return _;if(!(0,W.A)(e))return e;var E=(0,U.A)(e);if(E){if(_=C(e),!p)return(0,A.A)(e,_)}else{var L=(0,w.A)(e),N=L==Q||"[object GeneratorFunction]"==L;if((0,z.A)(e))return(0,h.A)(e,p);if(L==X||L==K||N&&!v){if(_=y||N?{}:(0,x.A)(e),!p)return y?g(e,f(_,e)):l(e,c(_,e))}else{if(!Y[L])return v?e:{};_=I(e,L,p)}}b||(b=new r.A);var D=b.get(e);if(D)return D;b.set(e,_),J(e)?e.forEach((function(r){_.add(t(r,n,s,r,e,b))})):V(e)&&e.forEach((function(r,o){_.set(o,t(r,n,s,o,e,b))}));var S=O?y?m:j.A:y?a.A:u.A,F=E?void 0:S(e);return(0,o.A)(F||e,(function(r,o){F&&(r=e[o=r]),(0,i.A)(_,o,t(r,n,s,o,e,b))})),_}},6240:(t,e,n)=>{n.d(e,{A:()=>i});var r=n(79841),o=n(38446);const i=function(t,e){return function(n,r){if(null==n)return n;if(!(0,o.A)(n))return t(n,r);for(var i=n.length,s=e?i:-1,u=Object(n);(e?s--:++s{n.d(e,{A:()=>r});const r=function(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i{n.d(e,{A:()=>a});var r=n(76912),o=n(241),i=n(52274),s=n(92049),u=o.A?o.A.isConcatSpreadable:void 0;const c=function(t){return(0,s.A)(t)||(0,i.A)(t)||!!(u&&t&&t[u])};const a=function t(e,n,o,i,s){var u=-1,a=e.length;for(o||(o=c),s||(s=[]);++u0&&o(f)?n>1?t(f,n-1,o,i,s):(0,r.A)(s,f):i||(s[s.length]=f)}return s}},79841:(t,e,n)=>{n.d(e,{A:()=>i});var r=n(4574),o=n(27422);const i=function(t,e){return t&&(0,r.A)(t,e,o.A)}},66318:(t,e,n)=>{n.d(e,{A:()=>i});var r=n(7819),o=n(30901);const i=function(t,e){for(var n=0,i=(e=(0,r.A)(e,t)).length;null!=t&&n{n.d(e,{A:()=>i});var r=n(76912),o=n(92049);const i=function(t,e,n){var i=e(t);return(0,o.A)(t)?i:(0,r.A)(i,n(t))}},49574:(t,e,n)=>{n.d(e,{A:()=>H});var r=n(11754),o=n(62062);const i=function(t,e){for(var n=-1,r=null==t?0:t.length;++nf))return!1;var A=c.get(t),d=c.get(e);if(A&&d)return A==e&&d==t;var l=-1,v=!0,b=2&n?new o.A:void 0;for(c.set(t,e),c.set(e,t);++l{n.d(e,{A:()=>r});const r=function(t){return function(e){return null==e?void 0:e[t]}}},64099:(t,e,n)=>{n.d(e,{A:()=>r});const r=function(t,e){return t.has(e)}},99922:(t,e,n)=>{n.d(e,{A:()=>o});var r=n(29008);const o=function(t){return"function"==typeof t?t:r.A}},7819:(t,e,n)=>{n.d(e,{A:()=>f});var r=n(92049),o=n(86586),i=n(46632);var s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,u=/\\(\\)?/g;const c=function(t){var e=(0,i.A)(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(s,(function(t,n,r,o){e.push(r?o.replace(u,"$1"):n||t)})),e}));var a=n(28894);const f=function(t,e){return(0,r.A)(t)?t:(0,o.A)(t,e)?[t]:c((0,a.A)(t))}},19042:(t,e,n)=>{n.d(e,{A:()=>s});var r=n(33831),o=n(14792),i=n(27422);const s=function(t){return(0,r.A)(t,i.A,o.A)}},14792:(t,e,n)=>{n.d(e,{A:()=>u});var r=n(2634),o=n(13153),i=Object.prototype.propertyIsEnumerable,s=Object.getOwnPropertySymbols;const u=s?function(t){return null==t?[]:(t=Object(t),(0,r.A)(s(t),(function(e){return i.call(t,e)})))}:o.A},85054:(t,e,n)=>{n.d(e,{A:()=>a});var r=n(7819),o=n(52274),i=n(92049),s=n(25353),u=n(5254),c=n(30901);const a=function(t,e,n){for(var a=-1,f=(e=(0,r.A)(e,t)).length,h=!1;++a{n.d(e,{A:()=>u});var r=n(92049),o=n(61882),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;const u=function(t,e){if((0,r.A)(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!(0,o.A)(t))||(s.test(t)||!i.test(t)||null!=e&&t in Object(e))}},29959:(t,e,n)=>{n.d(e,{A:()=>r});const r=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},30901:(t,e,n)=>{n.d(e,{A:()=>o});var r=n(61882);const o=function(t){if("string"==typeof t||(0,r.A)(t))return t;var e=t+"";return"0"==e&&1/t==-Infinity?"-0":e}},11662:(t,e,n)=>{n.d(e,{A:()=>c});var r=n(2634),o=n(6240);const i=function(t,e){var n=[];return(0,o.A)(t,(function(t,r,o){e(t,r,o)&&n.push(t)})),n};var s=n(49574),u=n(92049);const c=function(t,e){return((0,u.A)(t)?r.A:i)(t,(0,s.A)(e,3))}},8058:(t,e,n)=>{n.d(e,{A:()=>u});var r=n(72641),o=n(6240),i=n(99922),s=n(92049);const u=function(t,e){return((0,s.A)(t)?r.A:o.A)(t,(0,i.A)(e))}},48585:(t,e,n)=>{n.d(e,{A:()=>s});var r=Object.prototype.hasOwnProperty;const o=function(t,e){return null!=t&&r.call(t,e)};var i=n(85054);const s=function(t,e){return null!=t&&(0,i.A)(t,e,o)}},39188:(t,e,n)=>{n.d(e,{A:()=>i});const r=function(t,e){return null!=t&&e in Object(t)};var o=n(85054);const i=function(t,e){return null!=t&&(0,o.A)(t,e,r)}},61882:(t,e,n)=>{n.d(e,{A:()=>i});var r=n(88496),o=n(53098);const i=function(t){return"symbol"==typeof t||(0,o.A)(t)&&"[object Symbol]"==(0,r.A)(t)}},69592:(t,e,n)=>{n.d(e,{A:()=>r});const r=function(t){return void 0===t}},27422:(t,e,n)=>{n.d(e,{A:()=>s});var r=n(83607),o=n(69471),i=n(38446);const s=function(t){return(0,i.A)(t)?(0,r.A)(t):(0,o.A)(t)}},89463:(t,e,n)=>{n.d(e,{A:()=>c});const r=function(t,e,n,r){var o=-1,i=null==t?0:t.length;for(r&&i&&(n=t[++o]);++o{n.d(e,{A:()=>r});const r=function(){return[]}},28894:(t,e,n)=>{n.d(e,{A:()=>f});var r=n(241),o=n(45572),i=n(92049),s=n(61882),u=r.A?r.A.prototype:void 0,c=u?u.toString:void 0;const a=function t(e){if("string"==typeof e)return e;if((0,i.A)(e))return(0,o.A)(e,t)+"";if((0,s.A)(e))return c?c.call(e):"";var n=e+"";return"0"==n&&1/e==-Infinity?"-0":n};const f=function(t){return null==t?"":a(t)}},38207:(t,e,n)=>{n.d(e,{A:()=>s});var r=n(45572);const o=function(t,e){return(0,r.A)(e,(function(e){return t[e]}))};var i=n(27422);const s=function(t){return null==t?[]:o(t,(0,i.A)(t))}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/116b31b8.1da8035b.js b/pr-preview/pr-1594/assets/js/116b31b8.1da8035b.js deleted file mode 100644 index ffaea4d014..0000000000 --- a/pr-preview/pr-1594/assets/js/116b31b8.1da8035b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7843],{65520:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var t=r(74848),s=r(28453);const i={},c="Paypal Transaction",o={id:"reference/Connectors/capture-connectors/paypal-transaction",title:"Paypal Transaction",description:"This connector captures data from Paypal Transaction into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/paypal-transaction.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/paypal-transaction",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/paypal-transaction.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"OracleDB (Flashback)",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback"},next:{title:"Pendo",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo"}},a={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"paypal-transaction",children:"Paypal Transaction"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from Paypal Transaction into Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-paypal-transaction:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-paypal-transaction:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.p,{children:"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system."}),"\n",(0,t.jsxs)(n.p,{children:["You can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/paypal-transaction/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(n.p,{children:"The following data resources are supported through the Paypal APIs:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.paypal.com/docs/api/transaction-search/v1/#transactions",children:"Transactions"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.paypal.com/docs/api/transaction-search/v1/#balances",children:"Balances"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.a,{href:"https://developer.paypal.com/docs/api/transaction-search/v1/",children:"Paypal Transaction API"})," is used to get the history of transactions for a PayPal account."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Paypal Transaction source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/client_id"})}),(0,t.jsx)(n.td,{children:"Client ID"}),(0,t.jsx)(n.td,{children:"The Client ID of your Paypal developer application."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/client_secret"})}),(0,t.jsx)(n.td,{children:"Client Secret"}),(0,t.jsx)(n.td,{children:"The Client Secret of your Paypal developer application."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/is_sandbox"})}),(0,t.jsx)(n.td,{children:"Sandbox"}),(0,t.jsx)(n.td,{children:"Checkbox to indicate whether it is a sandbox environment or not"}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/refresh_token"})}),(0,t.jsx)(n.td,{children:"Refresh token"}),(0,t.jsx)(n.td,{children:"The key to refresh the expired access token."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/start_date"})}),(0,t.jsx)(n.td,{children:"Start Date"}),(0,t.jsx)(n.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Resource of your Paypal Transaction project from which collections are captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-paypal-transaction:dev\n config:\n client_id: \n client_secret: \n is_sandbox: false\n refresh_token: \n start_date: 2017-01-25T00:00:00Z\n bindings:\n - resource:\n stream: transactions\n syncMode: full_refresh\n target: ${PREFIX}/transactions\n {...}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>o});var t=r(96540);const s={},i=t.createContext(s);function c(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1176.6957abeb.js b/pr-preview/pr-1594/assets/js/1176.6957abeb.js deleted file mode 100644 index f39e20ad47..0000000000 --- a/pr-preview/pr-1594/assets/js/1176.6957abeb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1176],{21176:(n,e,r)=>{r.d(e,{Zp:()=>Ce});var t=r(8058),o=r(5664),i=r(48585),u=r(39142),a=r(34098),d=r(74722),c=r(91395),f=r(697);class s{constructor(){var n={};n._next=n._prev=n,this._sentinel=n}dequeue(){var n=this._sentinel,e=n._prev;if(e!==n)return v(e),e}enqueue(n){var e=this._sentinel;n._prev&&n._next&&v(n),n._next=e._next,e._next._prev=n,e._next=n,n._prev=e}toString(){for(var n=[],e=this._sentinel,r=e._prev;r!==e;)n.push(JSON.stringify(r,g)),r=r._prev;return"["+n.join(", ")+"]"}}function v(n){n._prev._next=n._next,n._next._prev=n._prev,delete n._next,delete n._prev}function g(n,e){if("_next"!==n&&"_prev"!==n)return e}var h=u.A(1);function l(n,e){if(n.nodeCount()<=1)return[];var r=function(n,e){var r=new f.T,o=0,i=0;t.A(n.nodes(),(function(n){r.setNode(n,{v:n,in:0,out:0})})),t.A(n.edges(),(function(n){var t=r.edge(n.v,n.w)||0,u=e(n),a=t+u;r.setEdge(n.v,n.w,a),i=Math.max(i,r.node(n.v).out+=u),o=Math.max(o,r.node(n.w).in+=u)}));var u=c.A(i+o+3).map((function(){return new s})),a=o+1;return t.A(r.nodes(),(function(n){p(u,a,r.node(n))})),{graph:r,buckets:u,zeroIdx:a}}(n,e||h),o=function(n,e,r){var t,o=[],i=e[e.length-1],u=e[0];for(;n.nodeCount();){for(;t=u.dequeue();)A(n,e,r,t);for(;t=i.dequeue();)A(n,e,r,t);if(n.nodeCount())for(var a=e.length-2;a>0;--a)if(t=e[a].dequeue()){o=o.concat(A(n,e,r,t,!0));break}}return o}(r.graph,r.buckets,r.zeroIdx);return a.A(d.A(o,(function(e){return n.outEdges(e.v,e.w)})))}function A(n,e,r,o,i){var u=i?[]:void 0;return t.A(n.inEdges(o.v),(function(t){var o=n.edge(t),a=n.node(t.v);i&&u.push({v:t.v,w:t.w}),a.out-=o,p(e,r,a)})),t.A(n.outEdges(o.v),(function(t){var o=n.edge(t),i=t.w,u=n.node(i);u.in-=o,p(e,r,u)})),n.removeNode(o.v),u}function p(n,e,r){r.out?r.in?n[r.out-r.in+e].enqueue(r):n[n.length-1].enqueue(r):n[0].enqueue(r)}function w(n){var e="greedy"===n.graph().acyclicer?l(n,function(n){return function(e){return n.edge(e).weight}}(n)):function(n){var e=[],r={},o={};function u(a){i.A(o,a)||(o[a]=!0,r[a]=!0,t.A(n.outEdges(a),(function(n){i.A(r,n.w)?e.push(n):u(n.w)})),delete r[a])}return t.A(n.nodes(),u),e}(n);t.A(e,(function(e){var r=n.edge(e);n.removeEdge(e),r.forwardName=e.name,r.reversed=!0,n.setEdge(e.w,e.v,r,o.A("rev"))}))}var m=r(98879),b=r(81942),y=r(23068),x=r(61882);const k=function(n,e,r){for(var t=-1,o=n.length;++te};var N=r(29008);const _=function(n){return n&&n.length?k(n,N.A,E):void 0};const I=function(n){var e=null==n?0:n.length;return e?n[e-1]:void 0};var T=r(52528),R=r(79841),M=r(49574);const L=function(n,e){var r={};return e=(0,M.A)(e,3),(0,R.A)(n,(function(n,t,o){(0,T.A)(r,t,e(n,t,o))})),r};var C=r(69592);const O=function(n,e){return nMath.abs(u)*c?(a<0&&(c=-c),r=c*u/a,t=c):(u<0&&(d=-d),r=d,t=d*a/u),{x:o+r,y:i+t}}function B(n){var e=d.A(c.A(Y(n)+1),(function(){return[]}));return t.A(n.nodes(),(function(r){var t=n.node(r),o=t.rank;C.A(o)||(e[o][t.order]=r)})),e}function q(n,e,r,t){var o={width:0,height:0};return arguments.length>=4&&(o.rank=r,o.order=t),F(n,"border",o,e)}function Y(n){return _(d.A(n.nodes(),(function(e){var r=n.node(e).rank;if(!C.A(r))return r})))}function z(n,e){var r=j();try{return e()}finally{console.log(n+" time: "+(j()-r)+"ms")}}function D(n,e){return e()}function $(n,e,r,t,o,i){var u={width:0,height:0,rank:i,borderType:e},a=o[e][i-1],d=F(n,"border",u,r);o[e][i]=d,n.setParent(d,t),a&&n.setEdge(a,d,{weight:1})}function J(n){var e=n.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(n){t.A(n.nodes(),(function(e){K(n.node(e))})),t.A(n.edges(),(function(e){var r=n.edge(e);t.A(r.points,K),i.A(r,"y")&&K(r)}))}(n),"lr"!==e&&"rl"!==e||(!function(n){t.A(n.nodes(),(function(e){Q(n.node(e))})),t.A(n.edges(),(function(e){var r=n.edge(e);t.A(r.points,Q),i.A(r,"x")&&Q(r)}))}(n),Z(n))}function Z(n){t.A(n.nodes(),(function(e){H(n.node(e))})),t.A(n.edges(),(function(e){H(n.edge(e))}))}function H(n){var e=n.width;n.width=n.height,n.height=e}function K(n){n.y=-n.y}function Q(n){var e=n.x;n.x=n.y,n.y=e}function U(n){n.graph().dummyChains=[],t.A(n.edges(),(function(e){!function(n,e){var r,t,o,i=e.v,u=n.node(i).rank,a=e.w,d=n.node(a).rank,c=e.name,f=n.edge(e),s=f.labelRank;if(d===u+1)return;for(n.removeEdge(e),o=0,++u;u-1?o[i?e[u]:u]:void 0}};var cn=r(25707),fn=r(74342);const sn=function(n){var e=(0,fn.A)(n),r=e%1;return e==e?r?e-r:e:0};var vn=Math.max;const gn=dn((function(n,e,r){var t=null==n?0:n.length;if(!t)return-1;var o=null==r?0:sn(r);return o<0&&(o=vn(t+o,0)),(0,cn.A)(n,(0,M.A)(e,3),o)}));var hn=r(11662);u.A(1);u.A(1);r(69471),r(9779),r(88496);var ln=r(92049);r(53098);(0,r(70805).A)("length");RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var An="\\ud800-\\udfff",pn="["+An+"]",wn="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",mn="\\ud83c[\\udffb-\\udfff]",bn="[^"+An+"]",yn="(?:\\ud83c[\\udde6-\\uddff]){2}",xn="[\\ud800-\\udbff][\\udc00-\\udfff]",kn="(?:"+wn+"|"+mn+")"+"?",En="[\\ufe0e\\ufe0f]?",Nn=En+kn+("(?:\\u200d(?:"+[bn,yn,xn].join("|")+")"+En+kn+")*"),_n="(?:"+[bn+wn+"?",wn,yn,xn,pn].join("|")+")";RegExp(mn+"(?="+mn+")|"+_n+Nn,"g");function In(){}function Tn(n,e,r){ln.A(e)||(e=[e]);var o=(n.isDirected()?n.successors:n.neighbors).bind(n),i=[],u={};return t.A(e,(function(e){if(!n.hasNode(e))throw new Error("Graph does not have node: "+e);Rn(n,e,"post"===r,u,o,i)})),i}function Rn(n,e,r,o,u,a){i.A(o,e)||(o[e]=!0,r||a.push(e),t.A(u(e),(function(e){Rn(n,e,r,o,u,a)})),r&&a.push(e))}In.prototype=new Error;r(73046);function Mn(n){n=function(n){var e=(new f.T).setGraph(n.graph());return t.A(n.nodes(),(function(r){e.setNode(r,n.node(r))})),t.A(n.edges(),(function(r){var t=e.edge(r.v,r.w)||{weight:0,minlen:1},o=n.edge(r);e.setEdge(r.v,r.w,{weight:t.weight+o.weight,minlen:Math.max(t.minlen,o.minlen)})})),e}(n),X(n);var e,r=en(n);for(On(r),Ln(r,n);e=Sn(r);)Fn(r,n,e,jn(r,n,e))}function Ln(n,e){var r=function(n,e){return Tn(n,e,"post")}(n,n.nodes());r=r.slice(0,r.length-1),t.A(r,(function(r){!function(n,e,r){var t=n.node(r),o=t.parent;n.edge(r,o).cutvalue=Cn(n,e,r)}(n,e,r)}))}function Cn(n,e,r){var o=n.node(r).parent,i=!0,u=e.edge(r,o),a=0;return u||(i=!1,u=e.edge(o,r)),a=u.weight,t.A(e.nodeEdges(r),(function(t){var u,d,c=t.v===r,f=c?t.w:t.v;if(f!==o){var s=c===i,v=e.edge(t).weight;if(a+=s?v:-v,u=r,d=f,n.hasEdge(u,d)){var g=n.edge(r,f).cutvalue;a+=s?-g:g}}})),a}function On(n,e){arguments.length<2&&(e=n.nodes()[0]),Pn(n,{},1,e)}function Pn(n,e,r,o,u){var a=r,d=n.node(o);return e[o]=!0,t.A(n.neighbors(o),(function(t){i.A(e,t)||(r=Pn(n,e,r,t,o))})),d.low=a,d.lim=r++,u?d.parent=u:delete d.parent,r}function Sn(n){return gn(n.edges(),(function(e){return n.edge(e).cutvalue<0}))}function jn(n,e,r){var t=r.v,o=r.w;e.hasEdge(t,o)||(t=r.w,o=r.v);var i=n.node(t),u=n.node(o),a=i,d=!1;i.lim>u.lim&&(a=u,d=!0);var c=hn.A(e.edges(),(function(e){return d===Gn(n,n.node(e.v),a)&&d!==Gn(n,n.node(e.w),a)}));return W(c,(function(n){return nn(e,n)}))}function Fn(n,e,r,o){var i=r.v,u=r.w;n.removeEdge(i,u),n.setEdge(o.v,o.w,{}),On(n),Ln(n,e),function(n,e){var r=gn(n.nodes(),(function(n){return!e.node(n).parent})),o=function(n,e){return Tn(n,e,"pre")}(n,r);o=o.slice(1),t.A(o,(function(r){var t=n.node(r).parent,o=e.edge(r,t),i=!1;o||(o=e.edge(t,r),i=!0),e.node(r).rank=e.node(t).rank+(i?o.minlen:-o.minlen)}))}(n,e)}function Gn(n,e,r){return r.low<=e.lim&&e.lim<=r.lim}function Vn(n){switch(n.graph().ranker){case"network-simplex":default:qn(n);break;case"tight-tree":!function(n){X(n),en(n)}(n);break;case"longest-path":Bn(n)}}Mn.initLowLimValues=On,Mn.initCutValues=Ln,Mn.calcCutValue=Cn,Mn.leaveEdge=Sn,Mn.enterEdge=jn,Mn.exchangeEdges=Fn;var Bn=X;function qn(n){Mn(n)}var Yn=r(38207),zn=r(89463);function Dn(n){var e=F(n,"root",{},"_root"),r=function(n){var e={};function r(o,i){var u=n.children(o);u&&u.length&&t.A(u,(function(n){r(n,i+1)})),e[o]=i}return t.A(n.children(),(function(n){r(n,1)})),e}(n),o=_(Yn.A(r))-1,i=2*o+1;n.graph().nestingRoot=e,t.A(n.edges(),(function(e){n.edge(e).minlen*=i}));var u=function(n){return zn.A(n.edges(),(function(e,r){return e+n.edge(r).weight}),0)}(n)+1;t.A(n.children(),(function(t){$n(n,e,i,u,o,r,t)})),n.graph().nodeRankFactor=i}function $n(n,e,r,o,i,u,a){var d=n.children(a);if(d.length){var c=q(n,"_bt"),f=q(n,"_bb"),s=n.node(a);n.setParent(c,a),s.borderTop=c,n.setParent(f,a),s.borderBottom=f,t.A(d,(function(t){$n(n,e,r,o,i,u,t);var d=n.node(t),s=d.borderTop?d.borderTop:t,v=d.borderBottom?d.borderBottom:t,g=d.borderTop?o:2*o,h=s!==v?1:i-u[a]+1;n.setEdge(c,s,{weight:g,minlen:h,nestingEdge:!0}),n.setEdge(v,f,{weight:g,minlen:h,nestingEdge:!0})})),n.parent(a)||n.setEdge(e,c,{weight:0,minlen:i+u[a]})}else a!==e&&n.setEdge(e,a,{weight:0,minlen:r})}var Jn=r(91641);const Zn=function(n){return(0,Jn.A)(n,5)};function Hn(n,e,r){var u=function(n){var e;for(;n.hasNode(e=o.A("_root")););return e}(n),a=new f.T({compound:!0}).setGraph({root:u}).setDefaultNodeLabel((function(e){return n.node(e)}));return t.A(n.nodes(),(function(o){var d=n.node(o),c=n.parent(o);(d.rank===e||d.minRank<=e&&e<=d.maxRank)&&(a.setNode(o),a.setParent(o,c||u),t.A(n[r](o),(function(e){var r=e.v===o?e.w:e.v,t=a.edge(r,o),i=C.A(t)?0:t.weight;a.setEdge(r,o,{weight:n.edge(e).weight+i})})),i.A(d,"minRank")&&a.setNode(o,{borderLeft:d.borderLeft[e],borderRight:d.borderRight[e]}))})),a}var Kn=r(52851);const Qn=function(n,e,r){for(var t=-1,o=n.length,i=e.length,u={};++te||i&&u&&d&&!a&&!c||t&&u&&d||!r&&d||!o)return 1;if(!t&&!i&&!c&&n=a?d:d*("desc"==r[t]?-1:1)}return n.index-e.index};const ue=function(n,e,r){e=e.length?(0,Xn.A)(e,(function(n){return(0,ln.A)(n)?function(e){return(0,ne.A)(e,1===n.length?n[0]:n)}:n})):[N.A];var t=-1;e=(0,Xn.A)(e,(0,te.A)(M.A));var o=(0,ee.A)(n,(function(n,r,o){return{criteria:(0,Xn.A)(e,(function(e){return e(n)})),index:++t,value:n}}));return re(o,(function(n,e){return ie(n,e,r)}))};var ae=r(24326),de=r(6832);const ce=(0,ae.A)((function(n,e){if(null==n)return[];var r=e.length;return r>1&&(0,de.A)(n,e[0],e[1])?e=[]:r>2&&(0,de.A)(e[0],e[1],e[2])&&(e=[e[0]]),ue(n,(0,Wn.A)(e,1),[])}));function fe(n,e){for(var r=0,t=1;t0;)e%2&&(r+=f[e+1]),f[e=e-1>>1]+=n.weight;s+=n.weight*r}))),s}function ve(n,e){var r={};return t.A(n,(function(n,e){var t=r[n.v]={indegree:0,in:[],out:[],vs:[n.v],i:e};C.A(n.barycenter)||(t.barycenter=n.barycenter,t.weight=n.weight)})),t.A(e.edges(),(function(n){var e=r[n.v],t=r[n.w];C.A(e)||C.A(t)||(t.indegree++,e.out.push(r[n.w]))})),function(n){var e=[];function r(n){return function(e){e.merged||(C.A(e.barycenter)||C.A(n.barycenter)||e.barycenter>=n.barycenter)&&function(n,e){var r=0,t=0;n.weight&&(r+=n.barycenter*n.weight,t+=n.weight);e.weight&&(r+=e.barycenter*e.weight,t+=e.weight);n.vs=e.vs.concat(n.vs),n.barycenter=r/t,n.weight=t,n.i=Math.min(e.i,n.i),e.merged=!0}(n,e)}}function o(e){return function(r){r.in.push(e),0==--r.indegree&&n.push(r)}}for(;n.length;){var i=n.pop();e.push(i),t.A(i.in.reverse(),r(i)),t.A(i.out,o(i))}return d.A(hn.A(e,(function(n){return!n.merged})),(function(n){return b.A(n,["vs","i","barycenter","weight"])}))}(hn.A(r,(function(n){return!n.indegree})))}function ge(n,e){var r,o=function(n,e){var r={lhs:[],rhs:[]};return t.A(n,(function(n){e(n)?r.lhs.push(n):r.rhs.push(n)})),r}(n,(function(n){return i.A(n,"barycenter")})),u=o.lhs,d=ce(o.rhs,(function(n){return-n.i})),c=[],f=0,s=0,v=0;u.sort((r=!!e,function(n,e){return n.barycentere.barycenter?1:r?e.i-n.i:n.i-e.i})),v=he(c,d,v),t.A(u,(function(n){v+=n.vs.length,c.push(n.vs),f+=n.barycenter*n.weight,s+=n.weight,v=he(c,d,v)}));var g={vs:a.A(c)};return s&&(g.barycenter=f/s,g.weight=s),g}function he(n,e,r){for(var t;e.length&&(t=I(e)).i<=r;)e.pop(),n.push(t.vs),r++;return r}function le(n,e,r,o){var u=n.children(e),c=n.node(e),f=c?c.borderLeft:void 0,s=c?c.borderRight:void 0,v={};f&&(u=hn.A(u,(function(n){return n!==f&&n!==s})));var g=function(n,e){return d.A(e,(function(e){var r=n.inEdges(e);if(r.length){var t=zn.A(r,(function(e,r){var t=n.edge(r),o=n.node(r.v);return{sum:e.sum+t.weight*o.order,weight:e.weight+t.weight}}),{sum:0,weight:0});return{v:e,barycenter:t.sum/t.weight,weight:t.weight}}return{v:e}}))}(n,u);t.A(g,(function(e){if(n.children(e.v).length){var t=le(n,e.v,r,o);v[e.v]=t,i.A(t,"barycenter")&&(u=e,a=t,C.A(u.barycenter)?(u.barycenter=a.barycenter,u.weight=a.weight):(u.barycenter=(u.barycenter*u.weight+a.barycenter*a.weight)/(u.weight+a.weight),u.weight+=a.weight))}var u,a}));var h=ve(g,r);!function(n,e){t.A(n,(function(n){n.vs=a.A(n.vs.map((function(n){return e[n]?e[n].vs:n})))}))}(h,v);var l=ge(h,o);if(f&&(l.vs=a.A([f,l.vs,s]),n.predecessors(f).length)){var A=n.node(n.predecessors(f)[0]),p=n.node(n.predecessors(s)[0]);i.A(l,"barycenter")||(l.barycenter=0,l.weight=0),l.barycenter=(l.barycenter*l.weight+A.order+p.order)/(l.weight+2),l.weight+=2}return l}function Ae(n){var e=Y(n),r=pe(n,c.A(1,e+1),"inEdges"),o=pe(n,c.A(e-1,-1,-1),"outEdges"),u=function(n){var e={},r=hn.A(n.nodes(),(function(e){return!n.children(e).length})),o=_(d.A(r,(function(e){return n.node(e).rank}))),u=d.A(c.A(o+1),(function(){return[]})),a=ce(r,(function(e){return n.node(e).rank}));return t.A(a,(function r(o){if(!i.A(e,o)){e[o]=!0;var a=n.node(o);u[a.rank].push(o),t.A(n.successors(o),r)}})),u}(n);me(n,u);for(var a,f=Number.POSITIVE_INFINITY,s=0,v=0;v<4;++s,++v){we(s%2?r:o,s%4>=2);var g=fe(n,u=B(n));gd||c>e[o].lim));i=o,o=t;for(;(o=n.parent(o))!==i;)a.push(o);return{path:u.concat(a.reverse()),lca:i}}(n,e,o.v,o.w),u=i.path,a=i.lca,d=0,c=u[d],f=!0;r!==o.w;){if(t=n.node(r),f){for(;(c=u[d])!==a&&n.node(c).maxRankr){var t=e;e=r,r=t}var o=n[e];o||(n[e]=o={}),o[r]=!0}function Te(n,e,r){if(e>r){var t=e;e=r,r=t}return i.A(n[e],r)}function Re(n,e,r,o,u){var a={},d=function(n,e,r,o){var u=new f.T,a=n.graph(),d=function(n,e,r){return function(t,o,u){var a,d=t.node(o),c=t.node(u),f=0;if(f+=d.width/2,i.A(d,"labelpos"))switch(d.labelpos.toLowerCase()){case"l":a=-d.width/2;break;case"r":a=d.width/2}if(a&&(f+=r?a:-a),a=0,f+=(d.dummy?e:n)/2,f+=(c.dummy?e:n)/2,f+=c.width/2,i.A(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":a=c.width/2;break;case"r":a=-c.width/2}return a&&(f+=r?a:-a),a=0,f}}(a.nodesep,a.edgesep,o);return t.A(e,(function(e){var o;t.A(e,(function(e){var t=r[e];if(u.setNode(t),o){var i=r[o],a=u.edge(i,t);u.setEdge(i,t,Math.max(d(n,e,o),a||0))}o=e}))})),u}(n,e,r,u),c=u?"borderLeft":"borderRight";function s(n,e){for(var r=d.nodes(),t=r.pop(),o={};t;)o[t]?n(t):(o[t]=!0,r.push(t),r=r.concat(e(t))),t=r.pop()}return s((function(n){a[n]=d.inEdges(n).reduce((function(n,e){return Math.max(n,a[e.v]+d.edge(e))}),0)}),d.predecessors.bind(d)),s((function(e){var r=d.outEdges(e).reduce((function(n,e){return Math.min(n,a[e.w]-d.edge(e))}),Number.POSITIVE_INFINITY),t=n.node(e);r!==Number.POSITIVE_INFINITY&&t.borderType!==c&&(a[e]=Math.max(a[e],r))}),d.successors.bind(d)),t.A(o,(function(n){a[n]=a[r[n]]})),a}function Me(n){var e,r=B(n),o=m.A(_e(n,r),function(n,e){var r={};function o(e,o,i,u,a){var d;t.A(c.A(o,i),(function(o){d=e[o],n.node(d).dummy&&t.A(n.predecessors(d),(function(e){var t=n.node(e);t.dummy&&(t.ordera)&&Ie(r,e,d)}))}))}return zn.A(e,(function(e,r){var i,u=-1,a=0;return t.A(r,(function(t,d){if("border"===n.node(t).dummy){var c=n.predecessors(t);c.length&&(i=n.node(c[0]).order,o(r,a,d,u,i),a=d,u=i)}o(r,a,r.length,i,e.length)})),r})),r}(n,r)),i={};t.A(["u","d"],(function(u){e="u"===u?r:Yn.A(r).reverse(),t.A(["l","r"],(function(r){"r"===r&&(e=d.A(e,(function(n){return Yn.A(n).reverse()})));var a=("u"===u?n.predecessors:n.successors).bind(n),c=function(n,e,r,o){var i={},u={},a={};return t.A(e,(function(n){t.A(n,(function(n,e){i[n]=n,u[n]=n,a[n]=e}))})),t.A(e,(function(n){var e=-1;t.A(n,(function(n){var t=o(n);if(t.length){t=ce(t,(function(n){return a[n]}));for(var d=(t.length-1)/2,c=Math.floor(d),f=Math.ceil(d);c<=f;++c){var s=t[c];u[n]===n&&e{r.d(e,{A:()=>i});var t=r(6240),o=r(38446);const i=function(n,e){var r=-1,i=(0,o.A)(n)?Array(n.length):[];return(0,t.A)(n,(function(n,t,o){i[++r]=e(n,t,o)})),i}},23068:(n,e,r)=>{r.d(e,{A:()=>c});var t=r(24326),o=r(66984),i=r(6832),u=r(55615),a=Object.prototype,d=a.hasOwnProperty;const c=(0,t.A)((function(n,e){n=Object(n);var r=-1,t=e.length,c=t>2?e[2]:void 0;for(c&&(0,i.A)(e[0],e[1],c)&&(t=1);++r{r.d(e,{A:()=>o});var t=r(13588);const o=function(n){return(null==n?0:n.length)?(0,t.A)(n,1):[]}},74722:(n,e,r)=>{r.d(e,{A:()=>a});var t=r(45572),o=r(49574),i=r(52568),u=r(92049);const a=function(n,e){return((0,u.A)(n)?t.A:i.A)(n,(0,o.A)(e,3))}},81942:(n,e,r)=>{r.d(e,{A:()=>A});var t=r(66318),o=r(52851),i=r(7819),u=r(25353),a=r(23149),d=r(30901);const c=function(n,e,r,t){if(!(0,a.A)(n))return n;for(var c=-1,f=(e=(0,i.A)(e,n)).length,s=f-1,v=n;null!=v&&++c{r.d(e,{A:()=>d});var t=Math.ceil,o=Math.max;const i=function(n,e,r,i){for(var u=-1,a=o(t((e-n)/(r||1)),0),d=Array(a);a--;)d[i?a:++u]=n,n+=r;return d};var u=r(6832),a=r(74342);const d=function(n){return function(e,r,t){return t&&"number"!=typeof t&&(0,u.A)(e,r,t)&&(r=t=void 0),e=(0,a.A)(e),void 0===r?(r=e,e=0):r=(0,a.A)(r),t=void 0===t?e{r.d(e,{A:()=>l});var t=/\s/;const o=function(n){for(var e=n.length;e--&&t.test(n.charAt(e)););return e};var i=/^\s+/;const u=function(n){return n?n.slice(0,o(n)+1).replace(i,""):n};var a=r(23149),d=r(61882),c=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,s=/^0o[0-7]+$/i,v=parseInt;const g=function(n){if("number"==typeof n)return n;if((0,d.A)(n))return NaN;if((0,a.A)(n)){var e="function"==typeof n.valueOf?n.valueOf():n;n=(0,a.A)(e)?e+"":e}if("string"!=typeof n)return 0===n?n:+n;n=u(n);var r=f.test(n);return r||s.test(n)?v(n.slice(2),r?2:8):c.test(n)?NaN:+n};var h=1/0;const l=function(n){return n?(n=g(n))===h||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}},5664:(n,e,r)=>{r.d(e,{A:()=>i});var t=r(28894),o=0;const i=function(n){var e=++o;return(0,t.A)(n)+e}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1245.c5d67bd8.js b/pr-preview/pr-1594/assets/js/1245.c5d67bd8.js deleted file mode 100644 index 77092a9879..0000000000 --- a/pr-preview/pr-1594/assets/js/1245.c5d67bd8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1245],{91245:(t,e,s)=>{s.d(e,{D:()=>l,S:()=>c,a:()=>h,b:()=>a,c:()=>o,d:()=>B,p:()=>r,s:()=>P});var i=s(99702),n=function(){var t=function(t,e,s,i){for(s=s||{},i=t.length;i--;s[t[i]]=e);return s},e=[1,2],s=[1,3],i=[1,4],n=[2,4],r=[1,9],o=[1,11],a=[1,15],c=[1,16],l=[1,17],h=[1,18],u=[1,30],d=[1,19],p=[1,20],y=[1,21],f=[1,22],m=[1,23],g=[1,25],S=[1,26],_=[1,27],k=[1,28],T=[1,29],b=[1,32],E=[1,33],x=[1,34],C=[1,35],$=[1,31],v=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],D=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],A=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],L={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"--\x3e":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",13:"DESCR",14:"--\x3e",15:"HIDE_EMPTY",16:"scale",17:"WIDTH",18:"COMPOSIT_STATE",19:"STRUCT_START",20:"STRUCT_STOP",21:"STATE_DESCR",22:"AS",23:"ID",24:"FORK",25:"JOIN",26:"CHOICE",27:"CONCURRENT",28:"note",30:"NOTE_TEXT",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"classDef",38:"CLASSDEF_ID",39:"CLASSDEF_STYLEOPTS",40:"DEFAULT",41:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(t,e,s,i,n,r,o){var a=r.length-1;switch(n){case 3:return i.setRootDoc(r[a]),r[a];case 4:this.$=[];break;case 5:"nl"!=r[a]&&(r[a-1].push(r[a]),this.$=r[a-1]);break;case 6:case 7:case 11:this.$=r[a];break;case 8:this.$="nl";break;case 12:const t=r[a-1];t.description=i.trimColon(r[a]),this.$=t;break;case 13:this.$={stmt:"relation",state1:r[a-2],state2:r[a]};break;case 14:const e=i.trimColon(r[a]);this.$={stmt:"relation",state1:r[a-3],state2:r[a-1],description:e};break;case 18:this.$={stmt:"state",id:r[a-3],type:"default",description:"",doc:r[a-1]};break;case 19:var c=r[a],l=r[a-2].trim();if(r[a].match(":")){var h=r[a].split(":");c=h[0],l=[l,h[1]]}this.$={stmt:"state",id:c,type:"default",description:l};break;case 20:this.$={stmt:"state",id:r[a-3],type:"default",description:r[a-5],doc:r[a-1]};break;case 21:this.$={stmt:"state",id:r[a],type:"fork"};break;case 22:this.$={stmt:"state",id:r[a],type:"join"};break;case 23:this.$={stmt:"state",id:r[a],type:"choice"};break;case 24:this.$={stmt:"state",id:i.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:r[a-1].trim(),note:{position:r[a-2].trim(),text:r[a].trim()}};break;case 28:this.$=r[a].trim(),i.setAccTitle(this.$);break;case 29:case 30:this.$=r[a].trim(),i.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:r[a-1].trim(),classes:r[a].trim()};break;case 33:this.$={stmt:"applyClass",id:r[a-1].trim(),styleClass:r[a].trim()};break;case 34:i.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:i.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:i.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:i.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:r[a].trim(),type:"default",description:""};break;case 42:case 43:this.$={stmt:"state",id:r[a-2].trim(),classes:[r[a].trim()],type:"default",description:""}}},table:[{3:1,4:e,5:s,6:i},{1:[3]},{3:5,4:e,5:s,6:i},{3:6,4:e,5:s,6:i},t([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],n,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:r,5:o,8:8,9:10,10:12,11:13,12:14,15:a,16:c,18:l,21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,5]),{9:36,10:12,11:13,12:14,15:a,16:c,18:l,21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,7]),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(v,[2,11],{13:[1,37],14:[1,38]}),t(v,[2,15]),{17:[1,39]},t(v,[2,17],{19:[1,40]}),{22:[1,41]},t(v,[2,21]),t(v,[2,22]),t(v,[2,23]),t(v,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},t(v,[2,27]),{33:[1,46]},{35:[1,47]},t(v,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},t(D,[2,40],{51:[1,51]}),t(D,[2,41],{51:[1,52]}),t(v,[2,34]),t(v,[2,35]),t(v,[2,36]),t(v,[2,37]),t(v,[2,6]),t(v,[2,12]),{12:53,23:u,50:$},t(v,[2,16]),t(A,n,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},t(v,[2,28]),t(v,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},t(v,[2,13],{13:[1,63]}),{4:r,5:o,8:8,9:10,10:12,11:13,12:14,15:a,16:c,18:l,20:[1,64],21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},t(v,[2,31]),t(v,[2,32]),t(v,[2,33]),t(D,[2,42]),t(D,[2,43]),t(v,[2,14]),t(v,[2,18]),t(A,n,{7:68}),t(v,[2,25]),t(v,[2,26]),{4:r,5:o,8:8,9:10,10:12,11:13,12:14,15:a,16:c,18:l,20:[1,69],21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],i=[],n=[null],r=[],o=this.table,a="",c=0,l=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var f=u.options&&u.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,g,S,_,k,T,b,E,x,C={};;){if(g=s[s.length-1],this.defaultActions[g]?S=this.defaultActions[g]:(null==m&&(x=void 0,"number"!=typeof(x=i.pop()||u.lex()||1)&&(x instanceof Array&&(x=(i=x).pop()),x=e.symbols_[x]||x),m=x),S=o[g]&&o[g][m]),void 0===S||!S.length||!S[0]){var $="";for(k in E=[],o[g])this.terminals_[k]&&k>2&&E.push("'"+this.terminals_[k]+"'");$=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+E.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError($,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:y,expected:E})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(S[0]){case 1:s.push(m),n.push(u.yytext),r.push(u.yylloc),s.push(S[1]),m=null,l=u.yyleng,a=u.yytext,c=u.yylineno,y=u.yylloc;break;case 2:if(T=this.productions_[S[1]][1],C.$=n[n.length-T],C._$={first_line:r[r.length-(T||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(T||1)].first_column,last_column:r[r.length-1].last_column},f&&(C._$.range=[r[r.length-(T||1)].range[0],r[r.length-1].range[1]]),void 0!==(_=this.performAction.apply(C,[a,l,c,d.yy,S[1],n,r].concat(h))))return _;T&&(s=s.slice(0,-1*T*2),n=n.slice(0,-1*T),r=r.slice(0,-1*T)),s.push(this.productions_[S[1]][0]),n.push(C.$),r.push(C._$),b=o[s[s.length-2]][s[s.length-1]],s.push(b);break;case 3:return!0}}return!0}},I={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var s,i,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;re[0].length)){if(e=s,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,n[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,s,i){switch(s){case 0:return 40;case 1:case 39:return 44;case 2:case 40:return 45;case 3:case 41:return 46;case 4:case 42:return 47;case 5:case 6:case 8:case 9:case 10:case 11:case 51:case 53:case 59:break;case 7:case 74:return 5;case 12:case 29:return this.pushState("SCALE"),16;case 13:case 30:return 17;case 14:case 20:case 31:case 46:case 49:this.popState();break;case 15:return this.begin("acc_title"),32;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),34;case 18:return this.popState(),"acc_descr_value";case 19:this.begin("acc_descr_multiline");break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),37;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),38;case 25:return this.popState(),39;case 26:return this.pushState("CLASS"),41;case 27:return this.popState(),this.pushState("CLASS_STYLE"),42;case 28:return this.popState(),43;case 32:this.pushState("STATE");break;case 33:case 36:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 34:case 37:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),25;case 35:case 38:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),26;case 43:this.pushState("STATE_STRING");break;case 44:return this.pushState("STATE_ID"),"AS";case 45:case 61:return this.popState(),"ID";case 47:return"STATE_DESCR";case 48:return 18;case 50:return this.popState(),this.pushState("struct"),19;case 52:return this.popState(),20;case 54:return this.begin("NOTE"),28;case 55:return this.popState(),this.pushState("NOTE_ID"),52;case 56:return this.popState(),this.pushState("NOTE_ID"),53;case 57:this.popState(),this.pushState("FLOATING_NOTE");break;case 58:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 60:return"NOTE_TEXT";case 62:return this.popState(),this.pushState("NOTE_TEXT"),23;case 63:return this.popState(),e.yytext=e.yytext.substr(2).trim(),30;case 64:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),30;case 65:case 66:return 6;case 67:return 15;case 68:return 50;case 69:return 23;case 70:return e.yytext=e.yytext.trim(),13;case 71:return 14;case 72:return 27;case 73:return 51;case 75:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,32,39,40,41,42,51,52,53,54,68,69,70,71,72],inclusive:!1},FLOATING_NOTE_ID:{rules:[61],inclusive:!1},FLOATING_NOTE:{rules:[58,59,60],inclusive:!1},NOTE_TEXT:{rules:[63,64],inclusive:!1},NOTE_ID:{rules:[62],inclusive:!1},NOTE:{rules:[55,56,57],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,30,31],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[45],inclusive:!1},STATE_STRING:{rules:[46,47],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,33,34,35,36,37,38,43,44,48,49,50],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,50,54,65,66,67,68,69,70,71,73,74,75],inclusive:!0}}};function O(){this.yy={}}return L.lexer=I,O.prototype=L,L.Parser=O,new O}();n.parser=n;const r=n,o="TB",a="state",c="relation",l="default",h="divider",u="[*]",d="start",p=u,y="color",f="fill";let m="LR",g=[],S={};let _={root:{relations:[],states:{},documents:{}}},k=_.root,T=0,b=0;const E=t=>JSON.parse(JSON.stringify(t)),x=(t,e,s)=>{if(e.stmt===c)x(t,e.state1,!0),x(t,e.state2,!1);else if(e.stmt===a&&("[*]"===e.id?(e.id=s?t.id+"_start":t.id+"_end",e.start=s):e.id=e.id.trim()),e.doc){const t=[];let s,n=[];for(s=0;s0&&n.length>0){const s={stmt:a,id:(0,i.I)(),type:"divider",doc:E(n)};t.push(E(s)),e.doc=t}e.doc.forEach((t=>x(e,t,!0)))}},C=function(t,e=l,s=null,n=null,r=null,o=null,a=null,c=null){const h=null==t?void 0:t.trim();if(void 0===k.states[h]?(i.l.info("Adding state ",h,n),k.states[h]={id:h,descriptions:[],type:e,doc:s,note:r,classes:[],styles:[],textStyles:[]}):(k.states[h].doc||(k.states[h].doc=s),k.states[h].type||(k.states[h].type=e)),n&&(i.l.info("Setting state description",h,n),"string"==typeof n&&I(h,n.trim()),"object"==typeof n&&n.forEach((t=>I(h,t.trim())))),r&&(k.states[h].note=r,k.states[h].note.text=i.e.sanitizeText(k.states[h].note.text,(0,i.c)())),o){i.l.info("Setting state classes",h,o);("string"==typeof o?[o]:o).forEach((t=>N(h,t.trim())))}if(a){i.l.info("Setting state styles",h,a);("string"==typeof a?[a]:a).forEach((t=>R(h,t.trim())))}if(c){i.l.info("Setting state styles",h,a);("string"==typeof c?[c]:c).forEach((t=>w(h,t.trim())))}},$=function(t){_={root:{relations:[],states:{},documents:{}}},k=_.root,T=0,S={},t||(0,i.v)()},v=function(t){return k.states[t]};function D(t=""){let e=t;return t===u&&(T++,e=`${d}${T}`),e}function A(t="",e=l){return t===u?d:e}const L=function(t,e,s){if("object"==typeof t)!function(t,e,s){let n=D(t.id.trim()),r=A(t.id.trim(),t.type),o=D(e.id.trim()),a=A(e.id.trim(),e.type);C(n,r,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),C(o,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),k.relations.push({id1:n,id2:o,relationTitle:i.e.sanitizeText(s,(0,i.c)())})}(t,e,s);else{const n=D(t.trim()),r=A(t),o=function(t=""){let e=t;return t===p&&(T++,e=`end${T}`),e}(e.trim()),a=function(t="",e=l){return t===p?"end":e}(e);C(n,r),C(o,a),k.relations.push({id1:n,id2:o,title:i.e.sanitizeText(s,(0,i.c)())})}},I=function(t,e){const s=k.states[t],n=e.startsWith(":")?e.replace(":","").trim():e;s.descriptions.push(i.e.sanitizeText(n,(0,i.c)()))},O=function(t,e=""){void 0===S[t]&&(S[t]={id:t,styles:[],textStyles:[]});const s=S[t];null!=e&&e.split(",").forEach((t=>{const e=t.replace(/([^;]*);/,"$1").trim();if(t.match(y)){const t=e.replace(f,"bgFill").replace(y,f);s.textStyles.push(t)}s.styles.push(e)}))},N=function(t,e){t.split(",").forEach((function(t){let s=v(t);if(void 0===s){const e=t.trim();C(e),s=v(e)}s.classes.push(e)}))},R=function(t,e){const s=v(t);void 0!==s&&s.textStyles.push(e)},w=function(t,e){const s=v(t);void 0!==s&&s.textStyles.push(e)},B={getConfig:()=>(0,i.c)().state,addState:C,clear:$,getState:v,getStates:function(){return k.states},getRelations:function(){return k.relations},getClasses:function(){return S},getDirection:()=>m,addRelation:L,getDividerId:()=>(b++,"divider-id-"+b),setDirection:t=>{m=t},cleanupLabel:function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},logDocuments:function(){i.l.info("Documents = ",_)},getRootDoc:()=>g,setRootDoc:t=>{i.l.info("Setting root doc",t),g=t},getRootDocV2:()=>(x({id:"root"},{id:"root",doc:g},!0),{id:"root",doc:g}),extract:t=>{let e;e=t.doc?t.doc:t,i.l.info(e),$(!0),i.l.info("Extract",e),e.forEach((t=>{switch(t.stmt){case a:C(t.id.trim(),t.type,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles);break;case c:L(t.state1,t.state2,t.description);break;case"classDef":O(t.id.trim(),t.classes);break;case"applyClass":N(t.id.trim(),t.styleClass)}}))},trimColon:t=>t&&":"===t[0]?t.substr(1).trim():t.trim(),getAccTitle:i.g,setAccTitle:i.s,getAccDescription:i.a,setAccDescription:i.b,addStyleClass:O,setCssClass:N,addDescription:I,setDiagramTitle:i.q,getDiagramTitle:i.t},P=t=>`\ndefs #statediagram-barbEnd {\n fill: ${t.transitionColor};\n stroke: ${t.transitionColor};\n }\ng.stateGroup text {\n fill: ${t.nodeBorder};\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ${t.textColor};\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ${t.stateLabelColor};\n}\n\ng.stateGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.stateGroup line {\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.transition {\n stroke: ${t.transitionColor};\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ${t.background};\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n\n text {\n fill: ${t.noteTextColor};\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ${t.labelBackgroundColor};\n opacity: 0.5;\n}\n.edgeLabel .label text {\n fill: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n.label div .edgeLabel {\n color: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n\n.stateLabel text {\n fill: ${t.stateLabelColor};\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node .fork-join {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node circle.state-end {\n fill: ${t.innerEndBackground};\n stroke: ${t.background};\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ${t.compositeBackground||t.background};\n // stroke: ${t.background};\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ${t.stateBkg||t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n.node polygon {\n fill: ${t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ${t.lineColor};\n}\n\n.statediagram-cluster rect {\n fill: ${t.compositeTitleBackground};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ${t.stateLabelColor};\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ${t.stateBorder||t.nodeBorder};\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ${t.compositeBackground||t.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ${t.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n color: ${t.noteTextColor};\n}\n.statediagram .edgeLabel {\n color: red; // ${t.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ${t.lineColor};\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.statediagramTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/12ca7dc6.d05b6203.js b/pr-preview/pr-1594/assets/js/12ca7dc6.d05b6203.js deleted file mode 100644 index 72bc2bc7a2..0000000000 --- a/pr-preview/pr-1594/assets/js/12ca7dc6.d05b6203.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3516],{53387:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>a});var r=t(74848),s=t(28453);const o={},i="Neon PostgreSQL",l={id:"reference/Connectors/capture-connectors/PostgreSQL/neon-postgres",title:"Neon PostgreSQL",description:"Neon's logical replication feature allows you to replicate data from your Neon Postgres database to external destinations.",source:"@site/docs/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres.md",sourceDirName:"reference/Connectors/capture-connectors/PostgreSQL",slug:"/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Cloud SQL for PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres"},next:{title:"PostgreSQL Batch Query Connector",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch"}},c={},a=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"1. Enable Logical Replication in Neon",id:"1-enable-logical-replication-in-neon",level:3},{value:"2. Create a Postgres Role for Replication",id:"2-create-a-postgres-role-for-replication",level:3},{value:"3. Grant Schema Access to Your Postgres Role",id:"3-grant-schema-access-to-your-postgres-role",level:3},{value:"4. Create a Publication",id:"4-create-a-publication",level:3},{value:"Allow Inbound Traffic",id:"allow-inbound-traffic",level:2},{value:"Create a Postgres Source Connector in Estuary Flow",id:"create-a-postgres-source-connector-in-estuary-flow",level:2},{value:"Backfills and performance considerations",id:"backfills-and-performance-considerations",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"TOASTed values",id:"toasted-values",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"Publications",id:"publications",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"neon-postgresql",children:"Neon PostgreSQL"}),"\n",(0,r.jsx)(n.p,{children:"Neon's logical replication feature allows you to replicate data from your Neon Postgres database to external destinations."}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["An ",(0,r.jsx)(n.a,{href:"https://dashboard.estuary.dev/register",children:"Estuary Flow account"})," (start free, no credit card required)"]}),"\n",(0,r.jsxs)(n.li,{children:["A ",(0,r.jsx)(n.a,{href:"https://console.neon.tech/",children:"Neon account"})]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,r.jsx)(n.h3,{id:"1-enable-logical-replication-in-neon",children:"1. Enable Logical Replication in Neon"}),"\n",(0,r.jsxs)(n.p,{children:["Enabling logical replication modifies the Postgres ",(0,r.jsx)(n.code,{children:"wal_level"})," configuration parameter, changing it from ",(0,r.jsx)(n.code,{children:"replica"})," to ",(0,r.jsx)(n.code,{children:"logical"})," for all databases in your Neon project. Once the ",(0,r.jsx)(n.code,{children:"wal_level"})," setting is changed to ",(0,r.jsx)(n.code,{children:"logical"}),", it cannot be reverted. Enabling logical replication also restarts all computes in your Neon project, meaning active connections will be dropped and have to reconnect."]}),"\n",(0,r.jsx)(n.p,{children:"To enable logical replication in Neon:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Select your project in the Neon Console."}),"\n",(0,r.jsxs)(n.li,{children:["On the Neon ",(0,r.jsx)(n.strong,{children:"Dashboard"}),", select ",(0,r.jsx)(n.strong,{children:"Project settings"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Select ",(0,r.jsx)(n.strong,{children:"Beta"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Enable"})," to enable logical replication."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["You can verify that logical replication is enabled by running the following query from the ",(0,r.jsx)(n.a,{href:"https://neon.tech/docs/get-started-with-neon/query-with-neon-sql-editor",children:"Neon SQL Editor"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"SHOW wal_level;\n wal_level\n-----------\n logical\n"})}),"\n",(0,r.jsx)(n.h3,{id:"2-create-a-postgres-role-for-replication",children:"2. Create a Postgres Role for Replication"}),"\n",(0,r.jsxs)(n.p,{children:["It is recommended that you create a dedicated Postgres role for replicating data. The role must have the ",(0,r.jsx)(n.code,{children:"REPLICATION"})," privilege.\nThe default Postgres role created with your Neon project and roles created using the Neon Console, CLI, or API are granted membership in the neon_superuser role, which has the required ",(0,r.jsx)(n.code,{children:"REPLICATION"})," privilege."]}),"\n",(0,r.jsx)(n.p,{children:"To create a role in the Neon Console:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Navigate to the ",(0,r.jsx)(n.a,{href:"https://console.neon.tech",children:"Neon Console"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Select a project."}),"\n",(0,r.jsxs)(n.li,{children:["Select ",(0,r.jsx)(n.strong,{children:"Roles"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Select the branch where you want to create the role."}),"\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"New Role"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"In the role creation dialog, specify a role name."}),"\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Create"}),". The role is created and you are provided with the password for the role."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The following CLI command creates a role. To view the CLI documentation for this command, see ",(0,r.jsx)(n.a,{href:"https://api-docs.neon.tech/reference/createprojectbranchrole",children:"Neon CLI commands \u2014 roles"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"neon roles create --name \n"})}),"\n",(0,r.jsx)(n.p,{children:"The following Neon API method creates a role. To view the API documentation for this method, refer to the Neon API reference."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"curl 'https://console.neon.tech/api/v2/projects/hidden-cell-763301/branches/br-blue-tooth-671580/roles' \\\n -H 'Accept: application/json' \\\n -H \"Authorization: Bearer $NEON_API_KEY\" \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"role\": {\n \"name\": \"cdc_role\"\n }\n}' | jq\n"})}),"\n",(0,r.jsx)(n.h3,{id:"3-grant-schema-access-to-your-postgres-role",children:"3. Grant Schema Access to Your Postgres Role"}),"\n",(0,r.jsx)(n.p,{children:"If your replication role does not own the schemas and tables you are replicating from, make sure to grant access. Run these commands for each schema:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"GRANT USAGE ON SCHEMA public TO cdc_role;\nGRANT SELECT ON ALL TABLES IN SCHEMA public TO cdc_role;\nALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO cdc_role;\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Granting ",(0,r.jsx)(n.code,{children:"SELECT ON ALL TABLES IN SCHEMA"})," instead of naming the specific tables avoids having to add privileges later if you add tables to your publication."]}),"\n",(0,r.jsx)(n.h3,{id:"4-create-a-publication",children:"4. Create a Publication"}),"\n",(0,r.jsxs)(n.p,{children:["Create a ",(0,r.jsx)(n.a,{href:"https://www.postgresql.org/docs/current/sql-createpublication.html",children:"publication"})," with the name ",(0,r.jsx)(n.code,{children:"estuary_publication"}),". Include all the tables you would like to ingest into Estuary Flow."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"CREATE PUBLICATION flow_publication FOR TABLE ;\nALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"publish_via_partition_root"}),"\nsetting is recommended (because most users will want changes to a partitioned table to be captured\nunder the name of the root table) but is not required."]}),"\n",(0,r.jsxs)(n.p,{children:["Refer to the ",(0,r.jsx)(n.a,{href:"https://www.postgresql.org/docs/current/sql-alterpublication.html",children:"Postgres docs"})," if you need to add or remove tables from your publication. Alternatively, you also can create a publication ",(0,r.jsx)(n.code,{children:"FOR ALL TABLES"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Upon start-up, the Estuary Flow connector for Postgres will automatically create the ",(0,r.jsx)(n.a,{href:"https://www.postgresql.org/docs/current/logicaldecoding-explanation.html#LOGICALDECODING-REPLICATION-SLOTS",children:"replication slot"})," required for ingesting data change events from Postgres. The slot's name will be prefixed with ",(0,r.jsx)(n.code,{children:"estuary_"}),", followed by a unique identifier."]}),"\n",(0,r.jsxs)(n.p,{children:["To prevent storage bloat, ",(0,r.jsxs)(n.strong,{children:["Neon automatically removes ",(0,r.jsx)(n.em,{children:"inactive"})," replication slots after a period of time if there are other ",(0,r.jsx)(n.em,{children:"active"})," replication slots"]}),". If you have or intend on having more than one replication slot, please see ",(0,r.jsx)(n.a,{href:"https://docs.neon.tech/docs/logical-replication-neon#unused-replication-slots",children:"Unused replication slots"})," to learn more."]}),"\n",(0,r.jsx)(n.h2,{id:"allow-inbound-traffic",children:"Allow Inbound Traffic"}),"\n",(0,r.jsxs)(n.p,{children:["If you are using Neon's ",(0,r.jsx)(n.strong,{children:"IP Allow"})," feature to limit the IP addresses that can connect to Neon, you will need to allow inbound traffic from Estuary Flow's IP addresses.\nRefer to the ",(0,r.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow documentation"})," for the list of IPs that need to be allowlisted for the Estuary Flow region of your account.\nFor information about configuring allowed IPs in Neon, see ",(0,r.jsx)(n.a,{href:"https://neon.tech/docs/introduction/ip-allow",children:"Configure IP Allow"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"create-a-postgres-source-connector-in-estuary-flow",children:"Create a Postgres Source Connector in Estuary Flow"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the Estuary Flow web UI, select ",(0,r.jsx)(n.strong,{children:"Sources"})," from the left navigation bar and click ",(0,r.jsx)(n.strong,{children:"New Capture"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the connector catalog, choose ",(0,r.jsx)(n.strong,{children:"Neon PostgreSQL"})," and click ",(0,r.jsx)(n.strong,{children:"Connect"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Enter the connection details for your Neon database. You can get these details from your Neon connection string, which you'll find in the ",(0,r.jsx)(n.strong,{children:"Connection Details"})," widget on the ",(0,r.jsx)(n.strong,{children:"Dashboard"})," of your Neon project. Your connection string will look like this:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"postgres://alex:AbC123dEf@ep-cool-darkness-123456.us-east-2.aws.neon.tech/dbname?sslmode=require\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Enter the details for ",(0,r.jsx)(n.strong,{children:"your connection string"})," into the source connector fields. Based on the sample connection string above, the values would be specified as shown below. Your values will differ."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Name: Name of the Capture connector"}),"\n",(0,r.jsx)(n.li,{children:"Server Address: ep-cool-darkness-123456.us-east-2.aws.neon.tech:5432"}),"\n",(0,r.jsx)(n.li,{children:"User: cdc_role"}),"\n",(0,r.jsxs)(n.li,{children:["Password: Click ",(0,r.jsx)(n.strong,{children:"Add a new secret..."}),", then specify a name for that secret and ",(0,r.jsx)(n.code,{children:"AbC123dEf"})," as its value"]}),"\n",(0,r.jsx)(n.li,{children:"Database: dbname"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Next"}),". Estuary Flow will now scan the source database for all the tables that can be replicated. Select one or more table(s) by checking the checkbox next to their name.\nOptionally, you can change the name of the destination name for each table. You can also take a look at the schema of each stream by clicking on the ",(0,r.jsx)(n.strong,{children:"Collection"})," tab."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Save and Publish"})," to provision the connector and kick off the automated backfill process."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"backfills-and-performance-considerations",children:"Backfills and performance considerations"}),"\n",(0,r.jsxs)(n.p,{children:["When the a PostgreSQL capture is initiated, by default, the connector first ",(0,r.jsx)(n.em,{children:"backfills"}),", or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis."]}),"\n",(0,r.jsx)(n.p,{children:"This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow.\nHowever, you may find it appropriate to skip the backfill, especially for extremely large tables."}),"\n",(0,r.jsxs)(n.p,{children:["In this case, you may turn of backfilling on a per-table basis. See ",(0,r.jsx)(n.a,{href:"#properties",children:"properties"})," for details."]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/address"})})}),(0,r.jsx)(n.td,{children:"Address"}),(0,r.jsxs)(n.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/database"})})}),(0,r.jsx)(n.td,{children:"Database"}),(0,r.jsx)(n.td,{children:"Logical database name to capture from."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsxs)(n.td,{children:["Required, ",(0,r.jsx)(n.code,{children:'"postgres"'})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/user"})})}),(0,r.jsx)(n.td,{children:"User"}),(0,r.jsx)(n.td,{children:"The database user to authenticate as."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsxs)(n.td,{children:["Required, ",(0,r.jsx)(n.code,{children:'"flow_capture"'})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/password"})})}),(0,r.jsx)(n.td,{children:"Password"}),(0,r.jsx)(n.td,{children:"Password for the specified database user."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced"})}),(0,r.jsx)(n.td,{children:"Advanced Options"}),(0,r.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,r.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,r.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"4096"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/publicationName"})}),(0,r.jsx)(n.td,{children:"Publication Name"}),(0,r.jsx)(n.td,{children:"The name of the PostgreSQL publication to replicate from."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"flow_publication"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/skip_backfills"})}),(0,r.jsx)(n.td,{children:"Skip Backfills"}),(0,r.jsx)(n.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/slotName"})}),(0,r.jsx)(n.td,{children:"Slot Name"}),(0,r.jsx)(n.td,{children:"The name of the PostgreSQL replication slot to replicate from."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"flow_slot"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/watermarksTable"})}),(0,r.jsx)(n.td,{children:"Watermarks Table"}),(0,r.jsx)(n.td,{children:"The name of the table used for watermark writes during backfills. Must be fully-qualified in '.' form."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"public.flow_watermarks"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/sslmode"})}),(0,r.jsx)(n.td,{children:"SSL Mode"}),(0,r.jsx)(n.td,{children:"Overrides SSL connection behavior by setting the 'sslmode' parameter."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/namespace"})})}),(0,r.jsx)(n.td,{children:"Namespace"}),(0,r.jsxs)(n.td,{children:["The ",(0,r.jsx)(n.a,{href:"https://www.postgresql.org/docs/9.1/ddl-schemas.html",children:"namespace/schema"})," of the table."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Table name."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync mode"}),(0,r.jsxs)(n.td,{children:["Connection method. Always set to ",(0,r.jsx)(n.code,{children:"incremental"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/source-postgres:dev"\n config:\n address: "localhost:5432"\n database: "postgres"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n stream: ${TABLE_NAME}\n namespace: ${TABLE_NAMESPACE}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,r.jsx)(n.h2,{id:"toasted-values",children:"TOASTed values"}),"\n",(0,r.jsxs)(n.p,{children:["PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons.\nIf your tables contain values that exceed the limit, those values can't be stored directly.\nPostgreSQL uses ",(0,r.jsx)(n.a,{href:"https://www.postgresql.org/docs/current/storage-toast.html",children:"TOAST"})," (The Oversized-Attribute Storage Technique) to\nstore them separately."]}),"\n",(0,r.jsxs)(n.p,{children:["TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector.\nIf a change event occurs on a row that contains a TOASTed value, ",(0,r.jsx)(n.em,{children:"but the TOASTed value itself is unchanged"}),", it is omitted from the WAL.\nAs a result, the connector emits a row update with the a value omitted, which might cause\nunexpected results in downstream catalog tasks if adjustments are not made."]}),"\n",(0,r.jsxs)(n.p,{children:["The PostgreSQL connector handles TOASTed values for you when you follow the ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#flowctl-discover",children:"standard discovery workflow"}),"\nor use the ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#flow-ui",children:"Flow UI"})," to create your capture.\nIt uses ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/merge",children:"merge"})," ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"reductions"}),"\nto fill in the previous known TOASTed value in cases when that value is omitted from a row update."]}),"\n",(0,r.jsx)(n.p,{children:"However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["When you materialize the captured data to another system using a connector that requires ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})]}),"\n",(0,r.jsxs)(n.li,{children:["When you perform a ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivation"})," that uses TOASTed values"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,r.jsx)(n.p,{children:"If you encounter an issue that you suspect is due to TOASTed values, try the following:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Ensure your collection's schema is using the merge ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas#reduce-annotations",children:"reduction strategy"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://www.postgresql.org/docs/9.4/sql-altertable.html",children:"Set REPLICA IDENTITY to FULL"})," for the table. This circumvents the problem by forcing the\nWAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"mailto:support@estuary.dev",children:"Contact Estuary support"})," for assistance."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"publications",children:"Publications"}),"\n",(0,r.jsx)(n.p,{children:"It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true);\n"})}),"\n",(0,r.jsx)(n.p,{children:"Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes."})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>l});var r=t(96540);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/130.def7e228.js b/pr-preview/pr-1594/assets/js/130.def7e228.js deleted file mode 100644 index 223d1a5663..0000000000 --- a/pr-preview/pr-1594/assets/js/130.def7e228.js +++ /dev/null @@ -1,18473 +0,0 @@ -"use strict"; -exports.id = 130; -exports.ids = [130]; -exports.modules = { - -/***/ 22130: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ katex) -/* harmony export */ }); -/** - * Lexing or parsing positional information for error reporting. - * This object is immutable. - */ -class SourceLocation { - // The + prefix indicates that these fields aren't writeable - // Lexer holding the input string. - // Start offset, zero-based inclusive. - // End offset, zero-based exclusive. - constructor(lexer, start, end) { - this.lexer = void 0; - this.start = void 0; - this.end = void 0; - this.lexer = lexer; - this.start = start; - this.end = end; - } - /** - * Merges two `SourceLocation`s from location providers, given they are - * provided in order of appearance. - * - Returns the first one's location if only the first is provided. - * - Returns a merged range of the first and the last if both are provided - * and their lexers match. - * - Otherwise, returns null. - */ - - - static range(first, second) { - if (!second) { - return first && first.loc; - } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) { - return null; - } else { - return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end); - } - } - -} - -/** - * Interface required to break circular dependency between Token, Lexer, and - * ParseError. - */ - -/** - * The resulting token returned from `lex`. - * - * It consists of the token text plus some position information. - * The position information is essentially a range in an input string, - * but instead of referencing the bare input string, we refer to the lexer. - * That way it is possible to attach extra metadata to the input string, - * like for example a file name or similar. - * - * The position information is optional, so it is OK to construct synthetic - * tokens if appropriate. Not providing available position information may - * lead to degraded error reporting, though. - */ -class Token { - // don't expand the token - // used in \noexpand - constructor(text, // the text of this token - loc) { - this.text = void 0; - this.loc = void 0; - this.noexpand = void 0; - this.treatAsRelax = void 0; - this.text = text; - this.loc = loc; - } - /** - * Given a pair of tokens (this and endToken), compute a `Token` encompassing - * the whole input range enclosed by these two. - */ - - - range(endToken, // last token of the range, inclusive - text // the text of the newly constructed token - ) { - return new Token(text, SourceLocation.range(this, endToken)); - } - -} - -/** - * This is the ParseError class, which is the main error thrown by KaTeX - * functions when something has gone wrong. This is used to distinguish internal - * errors from errors in the expression that the user provided. - * - * If possible, a caller should provide a Token or ParseNode with information - * about where in the source string the problem occurred. - */ -class ParseError { - // Error start position based on passed-in Token or ParseNode. - // Length of affected text based on passed-in Token or ParseNode. - // The underlying error message without any context added. - constructor(message, // The error message - token // An object providing position information - ) { - this.name = void 0; - this.position = void 0; - this.length = void 0; - this.rawMessage = void 0; - var error = "KaTeX parse error: " + message; - var start; - var end; - var loc = token && token.loc; - - if (loc && loc.start <= loc.end) { - // If we have the input and a position, make the error a bit fancier - // Get the input - var input = loc.lexer.input; // Prepend some information - - start = loc.start; - end = loc.end; - - if (start === input.length) { - error += " at end of input: "; - } else { - error += " at position " + (start + 1) + ": "; - } // Underline token in question using combining underscores - - - var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); // Extract some context from the input and add it to the error - - var left; - - if (start > 15) { - left = "…" + input.slice(start - 15, start); - } else { - left = input.slice(0, start); - } - - var right; - - if (end + 15 < input.length) { - right = input.slice(end, end + 15) + "…"; - } else { - right = input.slice(end); - } - - error += left + underlined + right; - } // Some hackery to make ParseError a prototype of Error - // See http://stackoverflow.com/a/8460753 - // $FlowFixMe - - - var self = new Error(error); - self.name = "ParseError"; // $FlowFixMe - - self.__proto__ = ParseError.prototype; - self.position = start; - - if (start != null && end != null) { - self.length = end - start; - } - - self.rawMessage = message; - return self; - } - -} // $FlowFixMe More hackery - - -ParseError.prototype.__proto__ = Error.prototype; - -/** - * This file contains a list of utility functions which are useful in other - * files. - */ - -/** - * Return whether an element is contained in a list - */ -var contains = function contains(list, elem) { - return list.indexOf(elem) !== -1; -}; -/** - * Provide a default value if a setting is undefined - * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022. - */ - - -var deflt = function deflt(setting, defaultIfUndefined) { - return setting === undefined ? defaultIfUndefined : setting; -}; // hyphenate and escape adapted from Facebook's React under Apache 2 license - - -var uppercase = /([A-Z])/g; - -var hyphenate = function hyphenate(str) { - return str.replace(uppercase, "-$1").toLowerCase(); -}; - -var ESCAPE_LOOKUP = { - "&": "&", - ">": ">", - "<": "<", - "\"": """, - "'": "'" -}; -var ESCAPE_REGEX = /[&><"']/g; -/** - * Escapes text to prevent scripting attacks. - */ - -function escape(text) { - return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]); -} -/** - * Sometimes we want to pull out the innermost element of a group. In most - * cases, this will just be the group itself, but when ordgroups and colors have - * a single element, we want to pull that out. - */ - - -var getBaseElem = function getBaseElem(group) { - if (group.type === "ordgroup") { - if (group.body.length === 1) { - return getBaseElem(group.body[0]); - } else { - return group; - } - } else if (group.type === "color") { - if (group.body.length === 1) { - return getBaseElem(group.body[0]); - } else { - return group; - } - } else if (group.type === "font") { - return getBaseElem(group.body); - } else { - return group; - } -}; -/** - * TeXbook algorithms often reference "character boxes", which are simply groups - * with a single character in them. To decide if something is a character box, - * we find its innermost group, and see if it is a single character. - */ - - -var isCharacterBox = function isCharacterBox(group) { - var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters - - return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom"; -}; - -var assert = function assert(value) { - if (!value) { - throw new Error('Expected non-null, but got ' + String(value)); - } - - return value; -}; -/** - * Return the protocol of a URL, or "_relative" if the URL does not specify a - * protocol (and thus is relative), or `null` if URL has invalid protocol - * (so should be outright rejected). - */ - -var protocolFromUrl = function protocolFromUrl(url) { - // Check for possible leading protocol. - // https://url.spec.whatwg.org/#url-parsing strips leading whitespace - // (U+20) or C0 control (U+00-U+1F) characters. - // eslint-disable-next-line no-control-regex - var protocol = /^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(url); - - if (!protocol) { - return "_relative"; - } // Reject weird colons - - - if (protocol[2] !== ":") { - return null; - } // Reject invalid characters in scheme according to - // https://datatracker.ietf.org/doc/html/rfc3986#section-3.1 - - - if (!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(protocol[1])) { - return null; - } // Lowercase the protocol - - - return protocol[1].toLowerCase(); -}; -var utils = { - contains, - deflt, - escape, - hyphenate, - getBaseElem, - isCharacterBox, - protocolFromUrl -}; - -/* eslint no-console:0 */ -// TODO: automatically generate documentation -// TODO: check all properties on Settings exist -// TODO: check the type of a property on Settings matches -var SETTINGS_SCHEMA = { - displayMode: { - type: "boolean", - description: "Render math in display mode, which puts the math in " + "display style (so \\int and \\sum are large, for example), and " + "centers the math on the page on its own line.", - cli: "-d, --display-mode" - }, - output: { - type: { - enum: ["htmlAndMathml", "html", "mathml"] - }, - description: "Determines the markup language of the output.", - cli: "-F, --format " - }, - leqno: { - type: "boolean", - description: "Render display math in leqno style (left-justified tags)." - }, - fleqn: { - type: "boolean", - description: "Render display math flush left." - }, - throwOnError: { - type: "boolean", - default: true, - cli: "-t, --no-throw-on-error", - cliDescription: "Render errors (in the color given by --error-color) ins" + "tead of throwing a ParseError exception when encountering an error." - }, - errorColor: { - type: "string", - default: "#cc0000", - cli: "-c, --error-color ", - cliDescription: "A color string given in the format 'rgb' or 'rrggbb' " + "(no #). This option determines the color of errors rendered by the " + "-t option.", - cliProcessor: color => "#" + color - }, - macros: { - type: "object", - cli: "-m, --macro ", - cliDescription: "Define custom macro of the form '\\foo:expansion' (use " + "multiple -m arguments for multiple macros).", - cliDefault: [], - cliProcessor: (def, defs) => { - defs.push(def); - return defs; - } - }, - minRuleThickness: { - type: "number", - description: "Specifies a minimum thickness, in ems, for fraction lines," + " `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, " + "`\\hdashline`, `\\underline`, `\\overline`, and the borders of " + "`\\fbox`, `\\boxed`, and `\\fcolorbox`.", - processor: t => Math.max(0, t), - cli: "--min-rule-thickness ", - cliProcessor: parseFloat - }, - colorIsTextColor: { - type: "boolean", - description: "Makes \\color behave like LaTeX's 2-argument \\textcolor, " + "instead of LaTeX's one-argument \\color mode change.", - cli: "-b, --color-is-text-color" - }, - strict: { - type: [{ - enum: ["warn", "ignore", "error"] - }, "boolean", "function"], - description: "Turn on strict / LaTeX faithfulness mode, which throws an " + "error if the input uses features that are not supported by LaTeX.", - cli: "-S, --strict", - cliDefault: false - }, - trust: { - type: ["boolean", "function"], - description: "Trust the input, enabling all HTML features such as \\url.", - cli: "-T, --trust" - }, - maxSize: { - type: "number", - default: Infinity, - description: "If non-zero, all user-specified sizes, e.g. in " + "\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, " + "elements and spaces can be arbitrarily large", - processor: s => Math.max(0, s), - cli: "-s, --max-size ", - cliProcessor: parseInt - }, - maxExpand: { - type: "number", - default: 1000, - description: "Limit the number of macro expansions to the specified " + "number, to prevent e.g. infinite macro loops. If set to Infinity, " + "the macro expander will try to fully expand as in LaTeX.", - processor: n => Math.max(0, n), - cli: "-e, --max-expand ", - cliProcessor: n => n === "Infinity" ? Infinity : parseInt(n) - }, - globalGroup: { - type: "boolean", - cli: false - } -}; - -function getDefaultValue(schema) { - if (schema.default) { - return schema.default; - } - - var type = schema.type; - var defaultType = Array.isArray(type) ? type[0] : type; - - if (typeof defaultType !== 'string') { - return defaultType.enum[0]; - } - - switch (defaultType) { - case 'boolean': - return false; - - case 'string': - return ''; - - case 'number': - return 0; - - case 'object': - return {}; - } -} -/** - * The main Settings object - * - * The current options stored are: - * - displayMode: Whether the expression should be typeset as inline math - * (false, the default), meaning that the math starts in - * \textstyle and is placed in an inline-block); or as display - * math (true), meaning that the math starts in \displaystyle - * and is placed in a block with vertical margin. - */ - - -class Settings { - constructor(options) { - this.displayMode = void 0; - this.output = void 0; - this.leqno = void 0; - this.fleqn = void 0; - this.throwOnError = void 0; - this.errorColor = void 0; - this.macros = void 0; - this.minRuleThickness = void 0; - this.colorIsTextColor = void 0; - this.strict = void 0; - this.trust = void 0; - this.maxSize = void 0; - this.maxExpand = void 0; - this.globalGroup = void 0; - // allow null options - options = options || {}; - - for (var prop in SETTINGS_SCHEMA) { - if (SETTINGS_SCHEMA.hasOwnProperty(prop)) { - // $FlowFixMe - var schema = SETTINGS_SCHEMA[prop]; // TODO: validate options - // $FlowFixMe - - this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema); - } - } - } - /** - * Report nonstrict (non-LaTeX-compatible) input. - * Can safely not be called if `this.strict` is false in JavaScript. - */ - - - reportNonstrict(errorCode, errorMsg, token) { - var strict = this.strict; - - if (typeof strict === "function") { - // Allow return value of strict function to be boolean or string - // (or null/undefined, meaning no further processing). - strict = strict(errorCode, errorMsg, token); - } - - if (!strict || strict === "ignore") { - return; - } else if (strict === true || strict === "error") { - throw new ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + (errorMsg + " [" + errorCode + "]"), token); - } else if (strict === "warn") { - typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); - } else { - // won't happen in type-safe code - typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); - } - } - /** - * Check whether to apply strict (LaTeX-adhering) behavior for unusual - * input (like `\\`). Unlike `nonstrict`, will not throw an error; - * instead, "error" translates to a return value of `true`, while "ignore" - * translates to a return value of `false`. May still print a warning: - * "warn" prints a warning and returns `false`. - * This is for the second category of `errorCode`s listed in the README. - */ - - - useStrictBehavior(errorCode, errorMsg, token) { - var strict = this.strict; - - if (typeof strict === "function") { - // Allow return value of strict function to be boolean or string - // (or null/undefined, meaning no further processing). - // But catch any exceptions thrown by function, treating them - // like "error". - try { - strict = strict(errorCode, errorMsg, token); - } catch (error) { - strict = "error"; - } - } - - if (!strict || strict === "ignore") { - return false; - } else if (strict === true || strict === "error") { - return true; - } else if (strict === "warn") { - typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); - return false; - } else { - // won't happen in type-safe code - typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); - return false; - } - } - /** - * Check whether to test potentially dangerous input, and return - * `true` (trusted) or `false` (untrusted). The sole argument `context` - * should be an object with `command` field specifying the relevant LaTeX - * command (as a string starting with `\`), and any other arguments, etc. - * If `context` has a `url` field, a `protocol` field will automatically - * get added by this function (changing the specified object). - */ - - - isTrusted(context) { - if (context.url && !context.protocol) { - var protocol = utils.protocolFromUrl(context.url); - - if (protocol == null) { - return false; - } - - context.protocol = protocol; - } - - var trust = typeof this.trust === "function" ? this.trust(context) : this.trust; - return Boolean(trust); - } - -} - -/** - * This file contains information and classes for the various kinds of styles - * used in TeX. It provides a generic `Style` class, which holds information - * about a specific style. It then provides instances of all the different kinds - * of styles possible, and provides functions to move between them and get - * information about them. - */ - -/** - * The main style class. Contains a unique id for the style, a size (which is - * the same for cramped and uncramped version of a style), and a cramped flag. - */ -class Style { - constructor(id, size, cramped) { - this.id = void 0; - this.size = void 0; - this.cramped = void 0; - this.id = id; - this.size = size; - this.cramped = cramped; - } - /** - * Get the style of a superscript given a base in the current style. - */ - - - sup() { - return styles[sup[this.id]]; - } - /** - * Get the style of a subscript given a base in the current style. - */ - - - sub() { - return styles[sub[this.id]]; - } - /** - * Get the style of a fraction numerator given the fraction in the current - * style. - */ - - - fracNum() { - return styles[fracNum[this.id]]; - } - /** - * Get the style of a fraction denominator given the fraction in the current - * style. - */ - - - fracDen() { - return styles[fracDen[this.id]]; - } - /** - * Get the cramped version of a style (in particular, cramping a cramped style - * doesn't change the style). - */ - - - cramp() { - return styles[cramp[this.id]]; - } - /** - * Get a text or display version of this style. - */ - - - text() { - return styles[text$1[this.id]]; - } - /** - * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle) - */ - - - isTight() { - return this.size >= 2; - } - -} // Export an interface for type checking, but don't expose the implementation. -// This way, no more styles can be generated. - - -// IDs of the different styles -var D = 0; -var Dc = 1; -var T = 2; -var Tc = 3; -var S = 4; -var Sc = 5; -var SS = 6; -var SSc = 7; // Instances of the different styles - -var styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another - -var sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; -var sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; -var fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; -var fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; -var cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; -var text$1 = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles. - -var Style$1 = { - DISPLAY: styles[D], - TEXT: styles[T], - SCRIPT: styles[S], - SCRIPTSCRIPT: styles[SS] -}; - -/* - * This file defines the Unicode scripts and script families that we - * support. To add new scripts or families, just add a new entry to the - * scriptData array below. Adding scripts to the scriptData array allows - * characters from that script to appear in \text{} environments. - */ - -/** - * Each script or script family has a name and an array of blocks. - * Each block is an array of two numbers which specify the start and - * end points (inclusive) of a block of Unicode codepoints. - */ - -/** - * Unicode block data for the families of scripts we support in \text{}. - * Scripts only need to appear here if they do not have font metrics. - */ -var scriptData = [{ - // Latin characters beyond the Latin-1 characters we have metrics for. - // Needed for Czech, Hungarian and Turkish text, for example. - name: 'latin', - blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B - [0x0300, 0x036f] // Combining Diacritical marks - ] -}, { - // The Cyrillic script used by Russian and related languages. - // A Cyrillic subset used to be supported as explicitly defined - // symbols in symbols.js - name: 'cyrillic', - blocks: [[0x0400, 0x04ff]] -}, { - // Armenian - name: 'armenian', - blocks: [[0x0530, 0x058F]] -}, { - // The Brahmic scripts of South and Southeast Asia - // Devanagari (0900–097F) - // Bengali (0980–09FF) - // Gurmukhi (0A00–0A7F) - // Gujarati (0A80–0AFF) - // Oriya (0B00–0B7F) - // Tamil (0B80–0BFF) - // Telugu (0C00–0C7F) - // Kannada (0C80–0CFF) - // Malayalam (0D00–0D7F) - // Sinhala (0D80–0DFF) - // Thai (0E00–0E7F) - // Lao (0E80–0EFF) - // Tibetan (0F00–0FFF) - // Myanmar (1000–109F) - name: 'brahmic', - blocks: [[0x0900, 0x109F]] -}, { - name: 'georgian', - blocks: [[0x10A0, 0x10ff]] -}, { - // Chinese and Japanese. - // The "k" in cjk is for Korean, but we've separated Korean out - name: "cjk", - blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana - [0x4E00, 0x9FAF], // CJK ideograms - [0xFF00, 0xFF60] // Fullwidth punctuation - // TODO: add halfwidth Katakana and Romanji glyphs - ] -}, { - // Korean - name: 'hangul', - blocks: [[0xAC00, 0xD7AF]] -}]; -/** - * Given a codepoint, return the name of the script or script family - * it is from, or null if it is not part of a known block - */ - -function scriptFromCodepoint(codepoint) { - for (var i = 0; i < scriptData.length; i++) { - var script = scriptData[i]; - - for (var _i = 0; _i < script.blocks.length; _i++) { - var block = script.blocks[_i]; - - if (codepoint >= block[0] && codepoint <= block[1]) { - return script.name; - } - } - } - - return null; -} -/** - * A flattened version of all the supported blocks in a single array. - * This is an optimization to make supportedCodepoint() fast. - */ - -var allBlocks = []; -scriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b))); -/** - * Given a codepoint, return true if it falls within one of the - * scripts or script families defined above and false otherwise. - * - * Micro benchmarks shows that this is faster than - * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test() - * in Firefox, Chrome and Node. - */ - -function supportedCodepoint(codepoint) { - for (var i = 0; i < allBlocks.length; i += 2) { - if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) { - return true; - } - } - - return false; -} - -/** - * This file provides support to domTree.js and delimiter.js. - * It's a storehouse of path geometry for SVG images. - */ -// In all paths below, the viewBox-to-em scale is 1000:1. -var hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping. -// The vinculum of a \sqrt can be made thicker by a KaTeX rendering option. -// Think of variable extraVinculum as two detours in the SVG path. -// The detour begins at the lower left of the area labeled extraVinculum below. -// The detour proceeds one extraVinculum distance up and slightly to the right, -// displacing the radiused corner between surd and vinculum. The radius is -// traversed as usual, then the detour resumes. It goes right, to the end of -// the very long vinculum, then down one extraVinculum distance, -// after which it resumes regular path geometry for the radical. - -/* vinculum - / - /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraVinculum - / █████████████████████←0.04em (40 unit) std vinculum thickness - / / - / / - / /\ - / / surd -*/ - -var sqrtMain = function sqrtMain(extraVinculum, hLinePad) { - // sqrtMain path geometry is from glyph U221A in the font KaTeX Main - return "M95," + (622 + extraVinculum + hLinePad) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraVinculum / 2.075 + " -" + extraVinculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraVinculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; -}; - -var sqrtSize1 = function sqrtSize1(extraVinculum, hLinePad) { - // size1 is from glyph U221A in the font KaTeX_Size1-Regular - return "M263," + (601 + extraVinculum + hLinePad) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraVinculum / 2.084 + " -" + extraVinculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraVinculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; -}; - -var sqrtSize2 = function sqrtSize2(extraVinculum, hLinePad) { - // size2 is from glyph U221A in the font KaTeX_Size2-Regular - return "M983 " + (10 + extraVinculum + hLinePad) + "\nl" + extraVinculum / 3.13 + " -" + extraVinculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraVinculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; -}; - -var sqrtSize3 = function sqrtSize3(extraVinculum, hLinePad) { - // size3 is from glyph U221A in the font KaTeX_Size3-Regular - return "M424," + (2398 + extraVinculum + hLinePad) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraVinculum / 4.223 + " -" + extraVinculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraVinculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraVinculum) + " " + hLinePad + "\nh400000v" + (40 + extraVinculum) + "h-400000z"; -}; - -var sqrtSize4 = function sqrtSize4(extraVinculum, hLinePad) { - // size4 is from glyph U221A in the font KaTeX_Size4-Regular - return "M473," + (2713 + extraVinculum + hLinePad) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraVinculum / 5.298 + " -" + extraVinculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraVinculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "H1017.7z"; -}; - -var phasePath = function phasePath(y) { - var x = y / 2; // x coordinate at top of angle - - return "M400000 " + y + " H0 L" + x + " 0 l65 45 L145 " + (y - 80) + " H400000z"; -}; - -var sqrtTall = function sqrtTall(extraVinculum, hLinePad, viewBoxHeight) { - // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular - // One path edge has a variable length. It runs vertically from the vinculum - // to a point near (14 units) the bottom of the surd. The vinculum - // is normally 40 units thick. So the length of the line in question is: - var vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum; - return "M702 " + (extraVinculum + hLinePad) + "H400000" + (40 + extraVinculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraVinculum) + "H742z"; -}; - -var sqrtPath = function sqrtPath(size, extraVinculum, viewBoxHeight) { - extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox. - - var path = ""; - - switch (size) { - case "sqrtMain": - path = sqrtMain(extraVinculum, hLinePad); - break; - - case "sqrtSize1": - path = sqrtSize1(extraVinculum, hLinePad); - break; - - case "sqrtSize2": - path = sqrtSize2(extraVinculum, hLinePad); - break; - - case "sqrtSize3": - path = sqrtSize3(extraVinculum, hLinePad); - break; - - case "sqrtSize4": - path = sqrtSize4(extraVinculum, hLinePad); - break; - - case "sqrtTall": - path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight); - } - - return path; -}; -var innerPath = function innerPath(name, height) { - // The inner part of stretchy tall delimiters - switch (name) { - case "\u239c": - return "M291 0 H417 V" + height + " H291z M291 0 H417 V" + height + " H291z"; - - case "\u2223": - return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z"; - - case "\u2225": - return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z" + ("M367 0 H410 V" + height + " H367z M367 0 H410 V" + height + " H367z"); - - case "\u239f": - return "M457 0 H583 V" + height + " H457z M457 0 H583 V" + height + " H457z"; - - case "\u23a2": - return "M319 0 H403 V" + height + " H319z M319 0 H403 V" + height + " H319z"; - - case "\u23a5": - return "M263 0 H347 V" + height + " H263z M263 0 H347 V" + height + " H263z"; - - case "\u23aa": - return "M384 0 H504 V" + height + " H384z M384 0 H504 V" + height + " H384z"; - - case "\u23d0": - return "M312 0 H355 V" + height + " H312z M312 0 H355 V" + height + " H312z"; - - case "\u2016": - return "M257 0 H300 V" + height + " H257z M257 0 H300 V" + height + " H257z" + ("M478 0 H521 V" + height + " H478z M478 0 H521 V" + height + " H478z"); - - default: - return ""; - } -}; -var path = { - // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main - doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z", - // doublerightarrow is from glyph U+21D2 in font KaTeX Main - doublerightarrow: "M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z", - // leftarrow is from glyph U+2190 in font KaTeX Main - leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z", - // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular - leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z", - leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z", - // overgroup is from the MnSymbol package (public domain) - leftgroup: "M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z", - leftgroupunder: "M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z", - // Harpoons are from glyph U+21BD in font KaTeX Main - leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z", - leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z", - leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z", - leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z", - // hook is from glyph U+21A9 in font KaTeX Main - lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z", - leftlinesegment: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z", - leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z", - // tofrom is from glyph U+21C4 in font KaTeX AMS Regular - leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z", - longequal: "M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z", - midbrace: "M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z", - midbraceunder: "M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z", - oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z", - oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z", - oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z", - oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z", - rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z", - rightbrace: "M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z", - rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z", - rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z", - rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z", - rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z", - rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z", - rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z", - rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z", - righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z", - rightlinesegment: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z", - rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z", - // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular - twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z", - twoheadrightarrow: "M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z", - // tilde1 is a modified version of a glyph from the MnSymbol package - tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z", - // ditto tilde2, tilde3, & tilde4 - tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z", - tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z", - tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z", - // vec is from glyph U+20D7 in font KaTeX Main - vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z", - // widehat1 is a modified version of a glyph from the MnSymbol package - widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z", - // ditto widehat2, widehat3, & widehat4 - widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", - widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", - widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", - // widecheck paths are all inverted versions of widehat - widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z", - widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", - widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", - widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", - // The next ten paths support reaction arrows from the mhchem package. - // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX - // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main - baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z", - // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main - rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z", - // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end. - // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em - baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z", - rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z", - shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z", - shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z" -}; -var tallDelim = function tallDelim(label, midHeight) { - switch (label) { - case "lbrack": - return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v" + midHeight + " v1759 h84z"; - - case "rbrack": - return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v" + midHeight + " v1759 h84z"; - - case "vert": - return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z"; - - case "doublevert": - return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z\nM367 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v" + midHeight + " v585 h43z"; - - case "lfloor": - return "M319 602 V0 H403 V602 v" + midHeight + " v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z"; - - case "rfloor": - return "M319 602 V0 H403 V602 v" + midHeight + " v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z"; - - case "lceil": - return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v602 h84z\nM403 1759 V0 H319 V1759 v" + midHeight + " v602 h84z"; - - case "rceil": - return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v602 h84z\nM347 1759 V0 h-84 V1759 v" + midHeight + " v602 h84z"; - - case "lparen": - return "M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0," + (midHeight + 84) + "c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-" + (midHeight + 92) + "c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"; - - case "rparen": - return "M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0," + (midHeight + 9) + "\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-" + (midHeight + 144) + "c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"; - - default: - // We should not ever get here. - throw new Error("Unknown stretchy delimiter."); - } -}; - -/** - * This node represents a document fragment, which contains elements, but when - * placed into the DOM doesn't have any representation itself. It only contains - * children and doesn't have any DOM node properties. - */ -class DocumentFragment { - // HtmlDomNode - // Never used; needed for satisfying interface. - constructor(children) { - this.children = void 0; - this.classes = void 0; - this.height = void 0; - this.depth = void 0; - this.maxFontSize = void 0; - this.style = void 0; - this.children = children; - this.classes = []; - this.height = 0; - this.depth = 0; - this.maxFontSize = 0; - this.style = {}; - } - - hasClass(className) { - return utils.contains(this.classes, className); - } - /** Convert the fragment into a node. */ - - - toNode() { - var frag = document.createDocumentFragment(); - - for (var i = 0; i < this.children.length; i++) { - frag.appendChild(this.children[i].toNode()); - } - - return frag; - } - /** Convert the fragment into HTML markup. */ - - - toMarkup() { - var markup = ""; // Simply concatenate the markup for the children together. - - for (var i = 0; i < this.children.length; i++) { - markup += this.children[i].toMarkup(); - } - - return markup; - } - /** - * Converts the math node into a string, similar to innerText. Applies to - * MathDomNode's only. - */ - - - toText() { - // To avoid this, we would subclass documentFragment separately for - // MathML, but polyfills for subclassing is expensive per PR 1469. - // $FlowFixMe: Only works for ChildType = MathDomNode. - var toText = child => child.toText(); - - return this.children.map(toText).join(""); - } - -} - -// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY. -var fontMetricsData = { - "AMS-Regular": { - "32": [0, 0, 0, 0, 0.25], - "65": [0, 0.68889, 0, 0, 0.72222], - "66": [0, 0.68889, 0, 0, 0.66667], - "67": [0, 0.68889, 0, 0, 0.72222], - "68": [0, 0.68889, 0, 0, 0.72222], - "69": [0, 0.68889, 0, 0, 0.66667], - "70": [0, 0.68889, 0, 0, 0.61111], - "71": [0, 0.68889, 0, 0, 0.77778], - "72": [0, 0.68889, 0, 0, 0.77778], - "73": [0, 0.68889, 0, 0, 0.38889], - "74": [0.16667, 0.68889, 0, 0, 0.5], - "75": [0, 0.68889, 0, 0, 0.77778], - "76": [0, 0.68889, 0, 0, 0.66667], - "77": [0, 0.68889, 0, 0, 0.94445], - "78": [0, 0.68889, 0, 0, 0.72222], - "79": [0.16667, 0.68889, 0, 0, 0.77778], - "80": [0, 0.68889, 0, 0, 0.61111], - "81": [0.16667, 0.68889, 0, 0, 0.77778], - "82": [0, 0.68889, 0, 0, 0.72222], - "83": [0, 0.68889, 0, 0, 0.55556], - "84": [0, 0.68889, 0, 0, 0.66667], - "85": [0, 0.68889, 0, 0, 0.72222], - "86": [0, 0.68889, 0, 0, 0.72222], - "87": [0, 0.68889, 0, 0, 1.0], - "88": [0, 0.68889, 0, 0, 0.72222], - "89": [0, 0.68889, 0, 0, 0.72222], - "90": [0, 0.68889, 0, 0, 0.66667], - "107": [0, 0.68889, 0, 0, 0.55556], - "160": [0, 0, 0, 0, 0.25], - "165": [0, 0.675, 0.025, 0, 0.75], - "174": [0.15559, 0.69224, 0, 0, 0.94666], - "240": [0, 0.68889, 0, 0, 0.55556], - "295": [0, 0.68889, 0, 0, 0.54028], - "710": [0, 0.825, 0, 0, 2.33334], - "732": [0, 0.9, 0, 0, 2.33334], - "770": [0, 0.825, 0, 0, 2.33334], - "771": [0, 0.9, 0, 0, 2.33334], - "989": [0.08167, 0.58167, 0, 0, 0.77778], - "1008": [0, 0.43056, 0.04028, 0, 0.66667], - "8245": [0, 0.54986, 0, 0, 0.275], - "8463": [0, 0.68889, 0, 0, 0.54028], - "8487": [0, 0.68889, 0, 0, 0.72222], - "8498": [0, 0.68889, 0, 0, 0.55556], - "8502": [0, 0.68889, 0, 0, 0.66667], - "8503": [0, 0.68889, 0, 0, 0.44445], - "8504": [0, 0.68889, 0, 0, 0.66667], - "8513": [0, 0.68889, 0, 0, 0.63889], - "8592": [-0.03598, 0.46402, 0, 0, 0.5], - "8594": [-0.03598, 0.46402, 0, 0, 0.5], - "8602": [-0.13313, 0.36687, 0, 0, 1.0], - "8603": [-0.13313, 0.36687, 0, 0, 1.0], - "8606": [0.01354, 0.52239, 0, 0, 1.0], - "8608": [0.01354, 0.52239, 0, 0, 1.0], - "8610": [0.01354, 0.52239, 0, 0, 1.11111], - "8611": [0.01354, 0.52239, 0, 0, 1.11111], - "8619": [0, 0.54986, 0, 0, 1.0], - "8620": [0, 0.54986, 0, 0, 1.0], - "8621": [-0.13313, 0.37788, 0, 0, 1.38889], - "8622": [-0.13313, 0.36687, 0, 0, 1.0], - "8624": [0, 0.69224, 0, 0, 0.5], - "8625": [0, 0.69224, 0, 0, 0.5], - "8630": [0, 0.43056, 0, 0, 1.0], - "8631": [0, 0.43056, 0, 0, 1.0], - "8634": [0.08198, 0.58198, 0, 0, 0.77778], - "8635": [0.08198, 0.58198, 0, 0, 0.77778], - "8638": [0.19444, 0.69224, 0, 0, 0.41667], - "8639": [0.19444, 0.69224, 0, 0, 0.41667], - "8642": [0.19444, 0.69224, 0, 0, 0.41667], - "8643": [0.19444, 0.69224, 0, 0, 0.41667], - "8644": [0.1808, 0.675, 0, 0, 1.0], - "8646": [0.1808, 0.675, 0, 0, 1.0], - "8647": [0.1808, 0.675, 0, 0, 1.0], - "8648": [0.19444, 0.69224, 0, 0, 0.83334], - "8649": [0.1808, 0.675, 0, 0, 1.0], - "8650": [0.19444, 0.69224, 0, 0, 0.83334], - "8651": [0.01354, 0.52239, 0, 0, 1.0], - "8652": [0.01354, 0.52239, 0, 0, 1.0], - "8653": [-0.13313, 0.36687, 0, 0, 1.0], - "8654": [-0.13313, 0.36687, 0, 0, 1.0], - "8655": [-0.13313, 0.36687, 0, 0, 1.0], - "8666": [0.13667, 0.63667, 0, 0, 1.0], - "8667": [0.13667, 0.63667, 0, 0, 1.0], - "8669": [-0.13313, 0.37788, 0, 0, 1.0], - "8672": [-0.064, 0.437, 0, 0, 1.334], - "8674": [-0.064, 0.437, 0, 0, 1.334], - "8705": [0, 0.825, 0, 0, 0.5], - "8708": [0, 0.68889, 0, 0, 0.55556], - "8709": [0.08167, 0.58167, 0, 0, 0.77778], - "8717": [0, 0.43056, 0, 0, 0.42917], - "8722": [-0.03598, 0.46402, 0, 0, 0.5], - "8724": [0.08198, 0.69224, 0, 0, 0.77778], - "8726": [0.08167, 0.58167, 0, 0, 0.77778], - "8733": [0, 0.69224, 0, 0, 0.77778], - "8736": [0, 0.69224, 0, 0, 0.72222], - "8737": [0, 0.69224, 0, 0, 0.72222], - "8738": [0.03517, 0.52239, 0, 0, 0.72222], - "8739": [0.08167, 0.58167, 0, 0, 0.22222], - "8740": [0.25142, 0.74111, 0, 0, 0.27778], - "8741": [0.08167, 0.58167, 0, 0, 0.38889], - "8742": [0.25142, 0.74111, 0, 0, 0.5], - "8756": [0, 0.69224, 0, 0, 0.66667], - "8757": [0, 0.69224, 0, 0, 0.66667], - "8764": [-0.13313, 0.36687, 0, 0, 0.77778], - "8765": [-0.13313, 0.37788, 0, 0, 0.77778], - "8769": [-0.13313, 0.36687, 0, 0, 0.77778], - "8770": [-0.03625, 0.46375, 0, 0, 0.77778], - "8774": [0.30274, 0.79383, 0, 0, 0.77778], - "8776": [-0.01688, 0.48312, 0, 0, 0.77778], - "8778": [0.08167, 0.58167, 0, 0, 0.77778], - "8782": [0.06062, 0.54986, 0, 0, 0.77778], - "8783": [0.06062, 0.54986, 0, 0, 0.77778], - "8785": [0.08198, 0.58198, 0, 0, 0.77778], - "8786": [0.08198, 0.58198, 0, 0, 0.77778], - "8787": [0.08198, 0.58198, 0, 0, 0.77778], - "8790": [0, 0.69224, 0, 0, 0.77778], - "8791": [0.22958, 0.72958, 0, 0, 0.77778], - "8796": [0.08198, 0.91667, 0, 0, 0.77778], - "8806": [0.25583, 0.75583, 0, 0, 0.77778], - "8807": [0.25583, 0.75583, 0, 0, 0.77778], - "8808": [0.25142, 0.75726, 0, 0, 0.77778], - "8809": [0.25142, 0.75726, 0, 0, 0.77778], - "8812": [0.25583, 0.75583, 0, 0, 0.5], - "8814": [0.20576, 0.70576, 0, 0, 0.77778], - "8815": [0.20576, 0.70576, 0, 0, 0.77778], - "8816": [0.30274, 0.79383, 0, 0, 0.77778], - "8817": [0.30274, 0.79383, 0, 0, 0.77778], - "8818": [0.22958, 0.72958, 0, 0, 0.77778], - "8819": [0.22958, 0.72958, 0, 0, 0.77778], - "8822": [0.1808, 0.675, 0, 0, 0.77778], - "8823": [0.1808, 0.675, 0, 0, 0.77778], - "8828": [0.13667, 0.63667, 0, 0, 0.77778], - "8829": [0.13667, 0.63667, 0, 0, 0.77778], - "8830": [0.22958, 0.72958, 0, 0, 0.77778], - "8831": [0.22958, 0.72958, 0, 0, 0.77778], - "8832": [0.20576, 0.70576, 0, 0, 0.77778], - "8833": [0.20576, 0.70576, 0, 0, 0.77778], - "8840": [0.30274, 0.79383, 0, 0, 0.77778], - "8841": [0.30274, 0.79383, 0, 0, 0.77778], - "8842": [0.13597, 0.63597, 0, 0, 0.77778], - "8843": [0.13597, 0.63597, 0, 0, 0.77778], - "8847": [0.03517, 0.54986, 0, 0, 0.77778], - "8848": [0.03517, 0.54986, 0, 0, 0.77778], - "8858": [0.08198, 0.58198, 0, 0, 0.77778], - "8859": [0.08198, 0.58198, 0, 0, 0.77778], - "8861": [0.08198, 0.58198, 0, 0, 0.77778], - "8862": [0, 0.675, 0, 0, 0.77778], - "8863": [0, 0.675, 0, 0, 0.77778], - "8864": [0, 0.675, 0, 0, 0.77778], - "8865": [0, 0.675, 0, 0, 0.77778], - "8872": [0, 0.69224, 0, 0, 0.61111], - "8873": [0, 0.69224, 0, 0, 0.72222], - "8874": [0, 0.69224, 0, 0, 0.88889], - "8876": [0, 0.68889, 0, 0, 0.61111], - "8877": [0, 0.68889, 0, 0, 0.61111], - "8878": [0, 0.68889, 0, 0, 0.72222], - "8879": [0, 0.68889, 0, 0, 0.72222], - "8882": [0.03517, 0.54986, 0, 0, 0.77778], - "8883": [0.03517, 0.54986, 0, 0, 0.77778], - "8884": [0.13667, 0.63667, 0, 0, 0.77778], - "8885": [0.13667, 0.63667, 0, 0, 0.77778], - "8888": [0, 0.54986, 0, 0, 1.11111], - "8890": [0.19444, 0.43056, 0, 0, 0.55556], - "8891": [0.19444, 0.69224, 0, 0, 0.61111], - "8892": [0.19444, 0.69224, 0, 0, 0.61111], - "8901": [0, 0.54986, 0, 0, 0.27778], - "8903": [0.08167, 0.58167, 0, 0, 0.77778], - "8905": [0.08167, 0.58167, 0, 0, 0.77778], - "8906": [0.08167, 0.58167, 0, 0, 0.77778], - "8907": [0, 0.69224, 0, 0, 0.77778], - "8908": [0, 0.69224, 0, 0, 0.77778], - "8909": [-0.03598, 0.46402, 0, 0, 0.77778], - "8910": [0, 0.54986, 0, 0, 0.76042], - "8911": [0, 0.54986, 0, 0, 0.76042], - "8912": [0.03517, 0.54986, 0, 0, 0.77778], - "8913": [0.03517, 0.54986, 0, 0, 0.77778], - "8914": [0, 0.54986, 0, 0, 0.66667], - "8915": [0, 0.54986, 0, 0, 0.66667], - "8916": [0, 0.69224, 0, 0, 0.66667], - "8918": [0.0391, 0.5391, 0, 0, 0.77778], - "8919": [0.0391, 0.5391, 0, 0, 0.77778], - "8920": [0.03517, 0.54986, 0, 0, 1.33334], - "8921": [0.03517, 0.54986, 0, 0, 1.33334], - "8922": [0.38569, 0.88569, 0, 0, 0.77778], - "8923": [0.38569, 0.88569, 0, 0, 0.77778], - "8926": [0.13667, 0.63667, 0, 0, 0.77778], - "8927": [0.13667, 0.63667, 0, 0, 0.77778], - "8928": [0.30274, 0.79383, 0, 0, 0.77778], - "8929": [0.30274, 0.79383, 0, 0, 0.77778], - "8934": [0.23222, 0.74111, 0, 0, 0.77778], - "8935": [0.23222, 0.74111, 0, 0, 0.77778], - "8936": [0.23222, 0.74111, 0, 0, 0.77778], - "8937": [0.23222, 0.74111, 0, 0, 0.77778], - "8938": [0.20576, 0.70576, 0, 0, 0.77778], - "8939": [0.20576, 0.70576, 0, 0, 0.77778], - "8940": [0.30274, 0.79383, 0, 0, 0.77778], - "8941": [0.30274, 0.79383, 0, 0, 0.77778], - "8994": [0.19444, 0.69224, 0, 0, 0.77778], - "8995": [0.19444, 0.69224, 0, 0, 0.77778], - "9416": [0.15559, 0.69224, 0, 0, 0.90222], - "9484": [0, 0.69224, 0, 0, 0.5], - "9488": [0, 0.69224, 0, 0, 0.5], - "9492": [0, 0.37788, 0, 0, 0.5], - "9496": [0, 0.37788, 0, 0, 0.5], - "9585": [0.19444, 0.68889, 0, 0, 0.88889], - "9586": [0.19444, 0.74111, 0, 0, 0.88889], - "9632": [0, 0.675, 0, 0, 0.77778], - "9633": [0, 0.675, 0, 0, 0.77778], - "9650": [0, 0.54986, 0, 0, 0.72222], - "9651": [0, 0.54986, 0, 0, 0.72222], - "9654": [0.03517, 0.54986, 0, 0, 0.77778], - "9660": [0, 0.54986, 0, 0, 0.72222], - "9661": [0, 0.54986, 0, 0, 0.72222], - "9664": [0.03517, 0.54986, 0, 0, 0.77778], - "9674": [0.11111, 0.69224, 0, 0, 0.66667], - "9733": [0.19444, 0.69224, 0, 0, 0.94445], - "10003": [0, 0.69224, 0, 0, 0.83334], - "10016": [0, 0.69224, 0, 0, 0.83334], - "10731": [0.11111, 0.69224, 0, 0, 0.66667], - "10846": [0.19444, 0.75583, 0, 0, 0.61111], - "10877": [0.13667, 0.63667, 0, 0, 0.77778], - "10878": [0.13667, 0.63667, 0, 0, 0.77778], - "10885": [0.25583, 0.75583, 0, 0, 0.77778], - "10886": [0.25583, 0.75583, 0, 0, 0.77778], - "10887": [0.13597, 0.63597, 0, 0, 0.77778], - "10888": [0.13597, 0.63597, 0, 0, 0.77778], - "10889": [0.26167, 0.75726, 0, 0, 0.77778], - "10890": [0.26167, 0.75726, 0, 0, 0.77778], - "10891": [0.48256, 0.98256, 0, 0, 0.77778], - "10892": [0.48256, 0.98256, 0, 0, 0.77778], - "10901": [0.13667, 0.63667, 0, 0, 0.77778], - "10902": [0.13667, 0.63667, 0, 0, 0.77778], - "10933": [0.25142, 0.75726, 0, 0, 0.77778], - "10934": [0.25142, 0.75726, 0, 0, 0.77778], - "10935": [0.26167, 0.75726, 0, 0, 0.77778], - "10936": [0.26167, 0.75726, 0, 0, 0.77778], - "10937": [0.26167, 0.75726, 0, 0, 0.77778], - "10938": [0.26167, 0.75726, 0, 0, 0.77778], - "10949": [0.25583, 0.75583, 0, 0, 0.77778], - "10950": [0.25583, 0.75583, 0, 0, 0.77778], - "10955": [0.28481, 0.79383, 0, 0, 0.77778], - "10956": [0.28481, 0.79383, 0, 0, 0.77778], - "57350": [0.08167, 0.58167, 0, 0, 0.22222], - "57351": [0.08167, 0.58167, 0, 0, 0.38889], - "57352": [0.08167, 0.58167, 0, 0, 0.77778], - "57353": [0, 0.43056, 0.04028, 0, 0.66667], - "57356": [0.25142, 0.75726, 0, 0, 0.77778], - "57357": [0.25142, 0.75726, 0, 0, 0.77778], - "57358": [0.41951, 0.91951, 0, 0, 0.77778], - "57359": [0.30274, 0.79383, 0, 0, 0.77778], - "57360": [0.30274, 0.79383, 0, 0, 0.77778], - "57361": [0.41951, 0.91951, 0, 0, 0.77778], - "57366": [0.25142, 0.75726, 0, 0, 0.77778], - "57367": [0.25142, 0.75726, 0, 0, 0.77778], - "57368": [0.25142, 0.75726, 0, 0, 0.77778], - "57369": [0.25142, 0.75726, 0, 0, 0.77778], - "57370": [0.13597, 0.63597, 0, 0, 0.77778], - "57371": [0.13597, 0.63597, 0, 0, 0.77778] - }, - "Caligraphic-Regular": { - "32": [0, 0, 0, 0, 0.25], - "65": [0, 0.68333, 0, 0.19445, 0.79847], - "66": [0, 0.68333, 0.03041, 0.13889, 0.65681], - "67": [0, 0.68333, 0.05834, 0.13889, 0.52653], - "68": [0, 0.68333, 0.02778, 0.08334, 0.77139], - "69": [0, 0.68333, 0.08944, 0.11111, 0.52778], - "70": [0, 0.68333, 0.09931, 0.11111, 0.71875], - "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487], - "72": [0, 0.68333, 0.00965, 0.11111, 0.84452], - "73": [0, 0.68333, 0.07382, 0, 0.54452], - "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778], - "75": [0, 0.68333, 0.01445, 0.05556, 0.76195], - "76": [0, 0.68333, 0, 0.13889, 0.68972], - "77": [0, 0.68333, 0, 0.13889, 1.2009], - "78": [0, 0.68333, 0.14736, 0.08334, 0.82049], - "79": [0, 0.68333, 0.02778, 0.11111, 0.79611], - "80": [0, 0.68333, 0.08222, 0.08334, 0.69556], - "81": [0.09722, 0.68333, 0, 0.11111, 0.81667], - "82": [0, 0.68333, 0, 0.08334, 0.8475], - "83": [0, 0.68333, 0.075, 0.13889, 0.60556], - "84": [0, 0.68333, 0.25417, 0, 0.54464], - "85": [0, 0.68333, 0.09931, 0.08334, 0.62583], - "86": [0, 0.68333, 0.08222, 0, 0.61278], - "87": [0, 0.68333, 0.08222, 0.08334, 0.98778], - "88": [0, 0.68333, 0.14643, 0.13889, 0.7133], - "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834], - "90": [0, 0.68333, 0.07944, 0.13889, 0.72473], - "160": [0, 0, 0, 0, 0.25] - }, - "Fraktur-Regular": { - "32": [0, 0, 0, 0, 0.25], - "33": [0, 0.69141, 0, 0, 0.29574], - "34": [0, 0.69141, 0, 0, 0.21471], - "38": [0, 0.69141, 0, 0, 0.73786], - "39": [0, 0.69141, 0, 0, 0.21201], - "40": [0.24982, 0.74947, 0, 0, 0.38865], - "41": [0.24982, 0.74947, 0, 0, 0.38865], - "42": [0, 0.62119, 0, 0, 0.27764], - "43": [0.08319, 0.58283, 0, 0, 0.75623], - "44": [0, 0.10803, 0, 0, 0.27764], - "45": [0.08319, 0.58283, 0, 0, 0.75623], - "46": [0, 0.10803, 0, 0, 0.27764], - "47": [0.24982, 0.74947, 0, 0, 0.50181], - "48": [0, 0.47534, 0, 0, 0.50181], - "49": [0, 0.47534, 0, 0, 0.50181], - "50": [0, 0.47534, 0, 0, 0.50181], - "51": [0.18906, 0.47534, 0, 0, 0.50181], - "52": [0.18906, 0.47534, 0, 0, 0.50181], - "53": [0.18906, 0.47534, 0, 0, 0.50181], - "54": [0, 0.69141, 0, 0, 0.50181], - "55": [0.18906, 0.47534, 0, 0, 0.50181], - "56": [0, 0.69141, 0, 0, 0.50181], - "57": [0.18906, 0.47534, 0, 0, 0.50181], - "58": [0, 0.47534, 0, 0, 0.21606], - "59": [0.12604, 0.47534, 0, 0, 0.21606], - "61": [-0.13099, 0.36866, 0, 0, 0.75623], - "63": [0, 0.69141, 0, 0, 0.36245], - "65": [0, 0.69141, 0, 0, 0.7176], - "66": [0, 0.69141, 0, 0, 0.88397], - "67": [0, 0.69141, 0, 0, 0.61254], - "68": [0, 0.69141, 0, 0, 0.83158], - "69": [0, 0.69141, 0, 0, 0.66278], - "70": [0.12604, 0.69141, 0, 0, 0.61119], - "71": [0, 0.69141, 0, 0, 0.78539], - "72": [0.06302, 0.69141, 0, 0, 0.7203], - "73": [0, 0.69141, 0, 0, 0.55448], - "74": [0.12604, 0.69141, 0, 0, 0.55231], - "75": [0, 0.69141, 0, 0, 0.66845], - "76": [0, 0.69141, 0, 0, 0.66602], - "77": [0, 0.69141, 0, 0, 1.04953], - "78": [0, 0.69141, 0, 0, 0.83212], - "79": [0, 0.69141, 0, 0, 0.82699], - "80": [0.18906, 0.69141, 0, 0, 0.82753], - "81": [0.03781, 0.69141, 0, 0, 0.82699], - "82": [0, 0.69141, 0, 0, 0.82807], - "83": [0, 0.69141, 0, 0, 0.82861], - "84": [0, 0.69141, 0, 0, 0.66899], - "85": [0, 0.69141, 0, 0, 0.64576], - "86": [0, 0.69141, 0, 0, 0.83131], - "87": [0, 0.69141, 0, 0, 1.04602], - "88": [0, 0.69141, 0, 0, 0.71922], - "89": [0.18906, 0.69141, 0, 0, 0.83293], - "90": [0.12604, 0.69141, 0, 0, 0.60201], - "91": [0.24982, 0.74947, 0, 0, 0.27764], - "93": [0.24982, 0.74947, 0, 0, 0.27764], - "94": [0, 0.69141, 0, 0, 0.49965], - "97": [0, 0.47534, 0, 0, 0.50046], - "98": [0, 0.69141, 0, 0, 0.51315], - "99": [0, 0.47534, 0, 0, 0.38946], - "100": [0, 0.62119, 0, 0, 0.49857], - "101": [0, 0.47534, 0, 0, 0.40053], - "102": [0.18906, 0.69141, 0, 0, 0.32626], - "103": [0.18906, 0.47534, 0, 0, 0.5037], - "104": [0.18906, 0.69141, 0, 0, 0.52126], - "105": [0, 0.69141, 0, 0, 0.27899], - "106": [0, 0.69141, 0, 0, 0.28088], - "107": [0, 0.69141, 0, 0, 0.38946], - "108": [0, 0.69141, 0, 0, 0.27953], - "109": [0, 0.47534, 0, 0, 0.76676], - "110": [0, 0.47534, 0, 0, 0.52666], - "111": [0, 0.47534, 0, 0, 0.48885], - "112": [0.18906, 0.52396, 0, 0, 0.50046], - "113": [0.18906, 0.47534, 0, 0, 0.48912], - "114": [0, 0.47534, 0, 0, 0.38919], - "115": [0, 0.47534, 0, 0, 0.44266], - "116": [0, 0.62119, 0, 0, 0.33301], - "117": [0, 0.47534, 0, 0, 0.5172], - "118": [0, 0.52396, 0, 0, 0.5118], - "119": [0, 0.52396, 0, 0, 0.77351], - "120": [0.18906, 0.47534, 0, 0, 0.38865], - "121": [0.18906, 0.47534, 0, 0, 0.49884], - "122": [0.18906, 0.47534, 0, 0, 0.39054], - "160": [0, 0, 0, 0, 0.25], - "8216": [0, 0.69141, 0, 0, 0.21471], - "8217": [0, 0.69141, 0, 0, 0.21471], - "58112": [0, 0.62119, 0, 0, 0.49749], - "58113": [0, 0.62119, 0, 0, 0.4983], - "58114": [0.18906, 0.69141, 0, 0, 0.33328], - "58115": [0.18906, 0.69141, 0, 0, 0.32923], - "58116": [0.18906, 0.47534, 0, 0, 0.50343], - "58117": [0, 0.69141, 0, 0, 0.33301], - "58118": [0, 0.62119, 0, 0, 0.33409], - "58119": [0, 0.47534, 0, 0, 0.50073] - }, - "Main-Bold": { - "32": [0, 0, 0, 0, 0.25], - "33": [0, 0.69444, 0, 0, 0.35], - "34": [0, 0.69444, 0, 0, 0.60278], - "35": [0.19444, 0.69444, 0, 0, 0.95833], - "36": [0.05556, 0.75, 0, 0, 0.575], - "37": [0.05556, 0.75, 0, 0, 0.95833], - "38": [0, 0.69444, 0, 0, 0.89444], - "39": [0, 0.69444, 0, 0, 0.31944], - "40": [0.25, 0.75, 0, 0, 0.44722], - "41": [0.25, 0.75, 0, 0, 0.44722], - "42": [0, 0.75, 0, 0, 0.575], - "43": [0.13333, 0.63333, 0, 0, 0.89444], - "44": [0.19444, 0.15556, 0, 0, 0.31944], - "45": [0, 0.44444, 0, 0, 0.38333], - "46": [0, 0.15556, 0, 0, 0.31944], - "47": [0.25, 0.75, 0, 0, 0.575], - "48": [0, 0.64444, 0, 0, 0.575], - "49": [0, 0.64444, 0, 0, 0.575], - "50": [0, 0.64444, 0, 0, 0.575], - "51": [0, 0.64444, 0, 0, 0.575], - "52": [0, 0.64444, 0, 0, 0.575], - "53": [0, 0.64444, 0, 0, 0.575], - "54": [0, 0.64444, 0, 0, 0.575], - "55": [0, 0.64444, 0, 0, 0.575], - "56": [0, 0.64444, 0, 0, 0.575], - "57": [0, 0.64444, 0, 0, 0.575], - "58": [0, 0.44444, 0, 0, 0.31944], - "59": [0.19444, 0.44444, 0, 0, 0.31944], - "60": [0.08556, 0.58556, 0, 0, 0.89444], - "61": [-0.10889, 0.39111, 0, 0, 0.89444], - "62": [0.08556, 0.58556, 0, 0, 0.89444], - "63": [0, 0.69444, 0, 0, 0.54305], - "64": [0, 0.69444, 0, 0, 0.89444], - "65": [0, 0.68611, 0, 0, 0.86944], - "66": [0, 0.68611, 0, 0, 0.81805], - "67": [0, 0.68611, 0, 0, 0.83055], - "68": [0, 0.68611, 0, 0, 0.88194], - "69": [0, 0.68611, 0, 0, 0.75555], - "70": [0, 0.68611, 0, 0, 0.72361], - "71": [0, 0.68611, 0, 0, 0.90416], - "72": [0, 0.68611, 0, 0, 0.9], - "73": [0, 0.68611, 0, 0, 0.43611], - "74": [0, 0.68611, 0, 0, 0.59444], - "75": [0, 0.68611, 0, 0, 0.90138], - "76": [0, 0.68611, 0, 0, 0.69166], - "77": [0, 0.68611, 0, 0, 1.09166], - "78": [0, 0.68611, 0, 0, 0.9], - "79": [0, 0.68611, 0, 0, 0.86388], - "80": [0, 0.68611, 0, 0, 0.78611], - "81": [0.19444, 0.68611, 0, 0, 0.86388], - "82": [0, 0.68611, 0, 0, 0.8625], - "83": [0, 0.68611, 0, 0, 0.63889], - "84": [0, 0.68611, 0, 0, 0.8], - "85": [0, 0.68611, 0, 0, 0.88472], - "86": [0, 0.68611, 0.01597, 0, 0.86944], - "87": [0, 0.68611, 0.01597, 0, 1.18888], - "88": [0, 0.68611, 0, 0, 0.86944], - "89": [0, 0.68611, 0.02875, 0, 0.86944], - "90": [0, 0.68611, 0, 0, 0.70277], - "91": [0.25, 0.75, 0, 0, 0.31944], - "92": [0.25, 0.75, 0, 0, 0.575], - "93": [0.25, 0.75, 0, 0, 0.31944], - "94": [0, 0.69444, 0, 0, 0.575], - "95": [0.31, 0.13444, 0.03194, 0, 0.575], - "97": [0, 0.44444, 0, 0, 0.55902], - "98": [0, 0.69444, 0, 0, 0.63889], - "99": [0, 0.44444, 0, 0, 0.51111], - "100": [0, 0.69444, 0, 0, 0.63889], - "101": [0, 0.44444, 0, 0, 0.52708], - "102": [0, 0.69444, 0.10903, 0, 0.35139], - "103": [0.19444, 0.44444, 0.01597, 0, 0.575], - "104": [0, 0.69444, 0, 0, 0.63889], - "105": [0, 0.69444, 0, 0, 0.31944], - "106": [0.19444, 0.69444, 0, 0, 0.35139], - "107": [0, 0.69444, 0, 0, 0.60694], - "108": [0, 0.69444, 0, 0, 0.31944], - "109": [0, 0.44444, 0, 0, 0.95833], - "110": [0, 0.44444, 0, 0, 0.63889], - "111": [0, 0.44444, 0, 0, 0.575], - "112": [0.19444, 0.44444, 0, 0, 0.63889], - "113": [0.19444, 0.44444, 0, 0, 0.60694], - "114": [0, 0.44444, 0, 0, 0.47361], - "115": [0, 0.44444, 0, 0, 0.45361], - "116": [0, 0.63492, 0, 0, 0.44722], - "117": [0, 0.44444, 0, 0, 0.63889], - "118": [0, 0.44444, 0.01597, 0, 0.60694], - "119": [0, 0.44444, 0.01597, 0, 0.83055], - "120": [0, 0.44444, 0, 0, 0.60694], - "121": [0.19444, 0.44444, 0.01597, 0, 0.60694], - "122": [0, 0.44444, 0, 0, 0.51111], - "123": [0.25, 0.75, 0, 0, 0.575], - "124": [0.25, 0.75, 0, 0, 0.31944], - "125": [0.25, 0.75, 0, 0, 0.575], - "126": [0.35, 0.34444, 0, 0, 0.575], - "160": [0, 0, 0, 0, 0.25], - "163": [0, 0.69444, 0, 0, 0.86853], - "168": [0, 0.69444, 0, 0, 0.575], - "172": [0, 0.44444, 0, 0, 0.76666], - "176": [0, 0.69444, 0, 0, 0.86944], - "177": [0.13333, 0.63333, 0, 0, 0.89444], - "184": [0.17014, 0, 0, 0, 0.51111], - "198": [0, 0.68611, 0, 0, 1.04166], - "215": [0.13333, 0.63333, 0, 0, 0.89444], - "216": [0.04861, 0.73472, 0, 0, 0.89444], - "223": [0, 0.69444, 0, 0, 0.59722], - "230": [0, 0.44444, 0, 0, 0.83055], - "247": [0.13333, 0.63333, 0, 0, 0.89444], - "248": [0.09722, 0.54167, 0, 0, 0.575], - "305": [0, 0.44444, 0, 0, 0.31944], - "338": [0, 0.68611, 0, 0, 1.16944], - "339": [0, 0.44444, 0, 0, 0.89444], - "567": [0.19444, 0.44444, 0, 0, 0.35139], - "710": [0, 0.69444, 0, 0, 0.575], - "711": [0, 0.63194, 0, 0, 0.575], - "713": [0, 0.59611, 0, 0, 0.575], - "714": [0, 0.69444, 0, 0, 0.575], - "715": [0, 0.69444, 0, 0, 0.575], - "728": [0, 0.69444, 0, 0, 0.575], - "729": [0, 0.69444, 0, 0, 0.31944], - "730": [0, 0.69444, 0, 0, 0.86944], - "732": [0, 0.69444, 0, 0, 0.575], - "733": [0, 0.69444, 0, 0, 0.575], - "915": [0, 0.68611, 0, 0, 0.69166], - "916": [0, 0.68611, 0, 0, 0.95833], - "920": [0, 0.68611, 0, 0, 0.89444], - "923": [0, 0.68611, 0, 0, 0.80555], - "926": [0, 0.68611, 0, 0, 0.76666], - "928": [0, 0.68611, 0, 0, 0.9], - "931": [0, 0.68611, 0, 0, 0.83055], - "933": [0, 0.68611, 0, 0, 0.89444], - "934": [0, 0.68611, 0, 0, 0.83055], - "936": [0, 0.68611, 0, 0, 0.89444], - "937": [0, 0.68611, 0, 0, 0.83055], - "8211": [0, 0.44444, 0.03194, 0, 0.575], - "8212": [0, 0.44444, 0.03194, 0, 1.14999], - "8216": [0, 0.69444, 0, 0, 0.31944], - "8217": [0, 0.69444, 0, 0, 0.31944], - "8220": [0, 0.69444, 0, 0, 0.60278], - "8221": [0, 0.69444, 0, 0, 0.60278], - "8224": [0.19444, 0.69444, 0, 0, 0.51111], - "8225": [0.19444, 0.69444, 0, 0, 0.51111], - "8242": [0, 0.55556, 0, 0, 0.34444], - "8407": [0, 0.72444, 0.15486, 0, 0.575], - "8463": [0, 0.69444, 0, 0, 0.66759], - "8465": [0, 0.69444, 0, 0, 0.83055], - "8467": [0, 0.69444, 0, 0, 0.47361], - "8472": [0.19444, 0.44444, 0, 0, 0.74027], - "8476": [0, 0.69444, 0, 0, 0.83055], - "8501": [0, 0.69444, 0, 0, 0.70277], - "8592": [-0.10889, 0.39111, 0, 0, 1.14999], - "8593": [0.19444, 0.69444, 0, 0, 0.575], - "8594": [-0.10889, 0.39111, 0, 0, 1.14999], - "8595": [0.19444, 0.69444, 0, 0, 0.575], - "8596": [-0.10889, 0.39111, 0, 0, 1.14999], - "8597": [0.25, 0.75, 0, 0, 0.575], - "8598": [0.19444, 0.69444, 0, 0, 1.14999], - "8599": [0.19444, 0.69444, 0, 0, 1.14999], - "8600": [0.19444, 0.69444, 0, 0, 1.14999], - "8601": [0.19444, 0.69444, 0, 0, 1.14999], - "8636": [-0.10889, 0.39111, 0, 0, 1.14999], - "8637": [-0.10889, 0.39111, 0, 0, 1.14999], - "8640": [-0.10889, 0.39111, 0, 0, 1.14999], - "8641": [-0.10889, 0.39111, 0, 0, 1.14999], - "8656": [-0.10889, 0.39111, 0, 0, 1.14999], - "8657": [0.19444, 0.69444, 0, 0, 0.70277], - "8658": [-0.10889, 0.39111, 0, 0, 1.14999], - "8659": [0.19444, 0.69444, 0, 0, 0.70277], - "8660": [-0.10889, 0.39111, 0, 0, 1.14999], - "8661": [0.25, 0.75, 0, 0, 0.70277], - "8704": [0, 0.69444, 0, 0, 0.63889], - "8706": [0, 0.69444, 0.06389, 0, 0.62847], - "8707": [0, 0.69444, 0, 0, 0.63889], - "8709": [0.05556, 0.75, 0, 0, 0.575], - "8711": [0, 0.68611, 0, 0, 0.95833], - "8712": [0.08556, 0.58556, 0, 0, 0.76666], - "8715": [0.08556, 0.58556, 0, 0, 0.76666], - "8722": [0.13333, 0.63333, 0, 0, 0.89444], - "8723": [0.13333, 0.63333, 0, 0, 0.89444], - "8725": [0.25, 0.75, 0, 0, 0.575], - "8726": [0.25, 0.75, 0, 0, 0.575], - "8727": [-0.02778, 0.47222, 0, 0, 0.575], - "8728": [-0.02639, 0.47361, 0, 0, 0.575], - "8729": [-0.02639, 0.47361, 0, 0, 0.575], - "8730": [0.18, 0.82, 0, 0, 0.95833], - "8733": [0, 0.44444, 0, 0, 0.89444], - "8734": [0, 0.44444, 0, 0, 1.14999], - "8736": [0, 0.69224, 0, 0, 0.72222], - "8739": [0.25, 0.75, 0, 0, 0.31944], - "8741": [0.25, 0.75, 0, 0, 0.575], - "8743": [0, 0.55556, 0, 0, 0.76666], - "8744": [0, 0.55556, 0, 0, 0.76666], - "8745": [0, 0.55556, 0, 0, 0.76666], - "8746": [0, 0.55556, 0, 0, 0.76666], - "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875], - "8764": [-0.10889, 0.39111, 0, 0, 0.89444], - "8768": [0.19444, 0.69444, 0, 0, 0.31944], - "8771": [0.00222, 0.50222, 0, 0, 0.89444], - "8773": [0.027, 0.638, 0, 0, 0.894], - "8776": [0.02444, 0.52444, 0, 0, 0.89444], - "8781": [0.00222, 0.50222, 0, 0, 0.89444], - "8801": [0.00222, 0.50222, 0, 0, 0.89444], - "8804": [0.19667, 0.69667, 0, 0, 0.89444], - "8805": [0.19667, 0.69667, 0, 0, 0.89444], - "8810": [0.08556, 0.58556, 0, 0, 1.14999], - "8811": [0.08556, 0.58556, 0, 0, 1.14999], - "8826": [0.08556, 0.58556, 0, 0, 0.89444], - "8827": [0.08556, 0.58556, 0, 0, 0.89444], - "8834": [0.08556, 0.58556, 0, 0, 0.89444], - "8835": [0.08556, 0.58556, 0, 0, 0.89444], - "8838": [0.19667, 0.69667, 0, 0, 0.89444], - "8839": [0.19667, 0.69667, 0, 0, 0.89444], - "8846": [0, 0.55556, 0, 0, 0.76666], - "8849": [0.19667, 0.69667, 0, 0, 0.89444], - "8850": [0.19667, 0.69667, 0, 0, 0.89444], - "8851": [0, 0.55556, 0, 0, 0.76666], - "8852": [0, 0.55556, 0, 0, 0.76666], - "8853": [0.13333, 0.63333, 0, 0, 0.89444], - "8854": [0.13333, 0.63333, 0, 0, 0.89444], - "8855": [0.13333, 0.63333, 0, 0, 0.89444], - "8856": [0.13333, 0.63333, 0, 0, 0.89444], - "8857": [0.13333, 0.63333, 0, 0, 0.89444], - "8866": [0, 0.69444, 0, 0, 0.70277], - "8867": [0, 0.69444, 0, 0, 0.70277], - "8868": [0, 0.69444, 0, 0, 0.89444], - "8869": [0, 0.69444, 0, 0, 0.89444], - "8900": [-0.02639, 0.47361, 0, 0, 0.575], - "8901": [-0.02639, 0.47361, 0, 0, 0.31944], - "8902": [-0.02778, 0.47222, 0, 0, 0.575], - "8968": [0.25, 0.75, 0, 0, 0.51111], - "8969": [0.25, 0.75, 0, 0, 0.51111], - "8970": [0.25, 0.75, 0, 0, 0.51111], - "8971": [0.25, 0.75, 0, 0, 0.51111], - "8994": [-0.13889, 0.36111, 0, 0, 1.14999], - "8995": [-0.13889, 0.36111, 0, 0, 1.14999], - "9651": [0.19444, 0.69444, 0, 0, 1.02222], - "9657": [-0.02778, 0.47222, 0, 0, 0.575], - "9661": [0.19444, 0.69444, 0, 0, 1.02222], - "9667": [-0.02778, 0.47222, 0, 0, 0.575], - "9711": [0.19444, 0.69444, 0, 0, 1.14999], - "9824": [0.12963, 0.69444, 0, 0, 0.89444], - "9825": [0.12963, 0.69444, 0, 0, 0.89444], - "9826": [0.12963, 0.69444, 0, 0, 0.89444], - "9827": [0.12963, 0.69444, 0, 0, 0.89444], - "9837": [0, 0.75, 0, 0, 0.44722], - "9838": [0.19444, 0.69444, 0, 0, 0.44722], - "9839": [0.19444, 0.69444, 0, 0, 0.44722], - "10216": [0.25, 0.75, 0, 0, 0.44722], - "10217": [0.25, 0.75, 0, 0, 0.44722], - "10815": [0, 0.68611, 0, 0, 0.9], - "10927": [0.19667, 0.69667, 0, 0, 0.89444], - "10928": [0.19667, 0.69667, 0, 0, 0.89444], - "57376": [0.19444, 0.69444, 0, 0, 0] - }, - "Main-BoldItalic": { - "32": [0, 0, 0, 0, 0.25], - "33": [0, 0.69444, 0.11417, 0, 0.38611], - "34": [0, 0.69444, 0.07939, 0, 0.62055], - "35": [0.19444, 0.69444, 0.06833, 0, 0.94444], - "37": [0.05556, 0.75, 0.12861, 0, 0.94444], - "38": [0, 0.69444, 0.08528, 0, 0.88555], - "39": [0, 0.69444, 0.12945, 0, 0.35555], - "40": [0.25, 0.75, 0.15806, 0, 0.47333], - "41": [0.25, 0.75, 0.03306, 0, 0.47333], - "42": [0, 0.75, 0.14333, 0, 0.59111], - "43": [0.10333, 0.60333, 0.03306, 0, 0.88555], - "44": [0.19444, 0.14722, 0, 0, 0.35555], - "45": [0, 0.44444, 0.02611, 0, 0.41444], - "46": [0, 0.14722, 0, 0, 0.35555], - "47": [0.25, 0.75, 0.15806, 0, 0.59111], - "48": [0, 0.64444, 0.13167, 0, 0.59111], - "49": [0, 0.64444, 0.13167, 0, 0.59111], - "50": [0, 0.64444, 0.13167, 0, 0.59111], - "51": [0, 0.64444, 0.13167, 0, 0.59111], - "52": [0.19444, 0.64444, 0.13167, 0, 0.59111], - "53": [0, 0.64444, 0.13167, 0, 0.59111], - "54": [0, 0.64444, 0.13167, 0, 0.59111], - "55": [0.19444, 0.64444, 0.13167, 0, 0.59111], - "56": [0, 0.64444, 0.13167, 0, 0.59111], - "57": [0, 0.64444, 0.13167, 0, 0.59111], - "58": [0, 0.44444, 0.06695, 0, 0.35555], - "59": [0.19444, 0.44444, 0.06695, 0, 0.35555], - "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555], - "63": [0, 0.69444, 0.11472, 0, 0.59111], - "64": [0, 0.69444, 0.09208, 0, 0.88555], - "65": [0, 0.68611, 0, 0, 0.86555], - "66": [0, 0.68611, 0.0992, 0, 0.81666], - "67": [0, 0.68611, 0.14208, 0, 0.82666], - "68": [0, 0.68611, 0.09062, 0, 0.87555], - "69": [0, 0.68611, 0.11431, 0, 0.75666], - "70": [0, 0.68611, 0.12903, 0, 0.72722], - "71": [0, 0.68611, 0.07347, 0, 0.89527], - "72": [0, 0.68611, 0.17208, 0, 0.8961], - "73": [0, 0.68611, 0.15681, 0, 0.47166], - "74": [0, 0.68611, 0.145, 0, 0.61055], - "75": [0, 0.68611, 0.14208, 0, 0.89499], - "76": [0, 0.68611, 0, 0, 0.69777], - "77": [0, 0.68611, 0.17208, 0, 1.07277], - "78": [0, 0.68611, 0.17208, 0, 0.8961], - "79": [0, 0.68611, 0.09062, 0, 0.85499], - "80": [0, 0.68611, 0.0992, 0, 0.78721], - "81": [0.19444, 0.68611, 0.09062, 0, 0.85499], - "82": [0, 0.68611, 0.02559, 0, 0.85944], - "83": [0, 0.68611, 0.11264, 0, 0.64999], - "84": [0, 0.68611, 0.12903, 0, 0.7961], - "85": [0, 0.68611, 0.17208, 0, 0.88083], - "86": [0, 0.68611, 0.18625, 0, 0.86555], - "87": [0, 0.68611, 0.18625, 0, 1.15999], - "88": [0, 0.68611, 0.15681, 0, 0.86555], - "89": [0, 0.68611, 0.19803, 0, 0.86555], - "90": [0, 0.68611, 0.14208, 0, 0.70888], - "91": [0.25, 0.75, 0.1875, 0, 0.35611], - "93": [0.25, 0.75, 0.09972, 0, 0.35611], - "94": [0, 0.69444, 0.06709, 0, 0.59111], - "95": [0.31, 0.13444, 0.09811, 0, 0.59111], - "97": [0, 0.44444, 0.09426, 0, 0.59111], - "98": [0, 0.69444, 0.07861, 0, 0.53222], - "99": [0, 0.44444, 0.05222, 0, 0.53222], - "100": [0, 0.69444, 0.10861, 0, 0.59111], - "101": [0, 0.44444, 0.085, 0, 0.53222], - "102": [0.19444, 0.69444, 0.21778, 0, 0.4], - "103": [0.19444, 0.44444, 0.105, 0, 0.53222], - "104": [0, 0.69444, 0.09426, 0, 0.59111], - "105": [0, 0.69326, 0.11387, 0, 0.35555], - "106": [0.19444, 0.69326, 0.1672, 0, 0.35555], - "107": [0, 0.69444, 0.11111, 0, 0.53222], - "108": [0, 0.69444, 0.10861, 0, 0.29666], - "109": [0, 0.44444, 0.09426, 0, 0.94444], - "110": [0, 0.44444, 0.09426, 0, 0.64999], - "111": [0, 0.44444, 0.07861, 0, 0.59111], - "112": [0.19444, 0.44444, 0.07861, 0, 0.59111], - "113": [0.19444, 0.44444, 0.105, 0, 0.53222], - "114": [0, 0.44444, 0.11111, 0, 0.50167], - "115": [0, 0.44444, 0.08167, 0, 0.48694], - "116": [0, 0.63492, 0.09639, 0, 0.385], - "117": [0, 0.44444, 0.09426, 0, 0.62055], - "118": [0, 0.44444, 0.11111, 0, 0.53222], - "119": [0, 0.44444, 0.11111, 0, 0.76777], - "120": [0, 0.44444, 0.12583, 0, 0.56055], - "121": [0.19444, 0.44444, 0.105, 0, 0.56166], - "122": [0, 0.44444, 0.13889, 0, 0.49055], - "126": [0.35, 0.34444, 0.11472, 0, 0.59111], - "160": [0, 0, 0, 0, 0.25], - "168": [0, 0.69444, 0.11473, 0, 0.59111], - "176": [0, 0.69444, 0, 0, 0.94888], - "184": [0.17014, 0, 0, 0, 0.53222], - "198": [0, 0.68611, 0.11431, 0, 1.02277], - "216": [0.04861, 0.73472, 0.09062, 0, 0.88555], - "223": [0.19444, 0.69444, 0.09736, 0, 0.665], - "230": [0, 0.44444, 0.085, 0, 0.82666], - "248": [0.09722, 0.54167, 0.09458, 0, 0.59111], - "305": [0, 0.44444, 0.09426, 0, 0.35555], - "338": [0, 0.68611, 0.11431, 0, 1.14054], - "339": [0, 0.44444, 0.085, 0, 0.82666], - "567": [0.19444, 0.44444, 0.04611, 0, 0.385], - "710": [0, 0.69444, 0.06709, 0, 0.59111], - "711": [0, 0.63194, 0.08271, 0, 0.59111], - "713": [0, 0.59444, 0.10444, 0, 0.59111], - "714": [0, 0.69444, 0.08528, 0, 0.59111], - "715": [0, 0.69444, 0, 0, 0.59111], - "728": [0, 0.69444, 0.10333, 0, 0.59111], - "729": [0, 0.69444, 0.12945, 0, 0.35555], - "730": [0, 0.69444, 0, 0, 0.94888], - "732": [0, 0.69444, 0.11472, 0, 0.59111], - "733": [0, 0.69444, 0.11472, 0, 0.59111], - "915": [0, 0.68611, 0.12903, 0, 0.69777], - "916": [0, 0.68611, 0, 0, 0.94444], - "920": [0, 0.68611, 0.09062, 0, 0.88555], - "923": [0, 0.68611, 0, 0, 0.80666], - "926": [0, 0.68611, 0.15092, 0, 0.76777], - "928": [0, 0.68611, 0.17208, 0, 0.8961], - "931": [0, 0.68611, 0.11431, 0, 0.82666], - "933": [0, 0.68611, 0.10778, 0, 0.88555], - "934": [0, 0.68611, 0.05632, 0, 0.82666], - "936": [0, 0.68611, 0.10778, 0, 0.88555], - "937": [0, 0.68611, 0.0992, 0, 0.82666], - "8211": [0, 0.44444, 0.09811, 0, 0.59111], - "8212": [0, 0.44444, 0.09811, 0, 1.18221], - "8216": [0, 0.69444, 0.12945, 0, 0.35555], - "8217": [0, 0.69444, 0.12945, 0, 0.35555], - "8220": [0, 0.69444, 0.16772, 0, 0.62055], - "8221": [0, 0.69444, 0.07939, 0, 0.62055] - }, - "Main-Italic": { - "32": [0, 0, 0, 0, 0.25], - "33": [0, 0.69444, 0.12417, 0, 0.30667], - "34": [0, 0.69444, 0.06961, 0, 0.51444], - "35": [0.19444, 0.69444, 0.06616, 0, 0.81777], - "37": [0.05556, 0.75, 0.13639, 0, 0.81777], - "38": [0, 0.69444, 0.09694, 0, 0.76666], - "39": [0, 0.69444, 0.12417, 0, 0.30667], - "40": [0.25, 0.75, 0.16194, 0, 0.40889], - "41": [0.25, 0.75, 0.03694, 0, 0.40889], - "42": [0, 0.75, 0.14917, 0, 0.51111], - "43": [0.05667, 0.56167, 0.03694, 0, 0.76666], - "44": [0.19444, 0.10556, 0, 0, 0.30667], - "45": [0, 0.43056, 0.02826, 0, 0.35778], - "46": [0, 0.10556, 0, 0, 0.30667], - "47": [0.25, 0.75, 0.16194, 0, 0.51111], - "48": [0, 0.64444, 0.13556, 0, 0.51111], - "49": [0, 0.64444, 0.13556, 0, 0.51111], - "50": [0, 0.64444, 0.13556, 0, 0.51111], - "51": [0, 0.64444, 0.13556, 0, 0.51111], - "52": [0.19444, 0.64444, 0.13556, 0, 0.51111], - "53": [0, 0.64444, 0.13556, 0, 0.51111], - "54": [0, 0.64444, 0.13556, 0, 0.51111], - "55": [0.19444, 0.64444, 0.13556, 0, 0.51111], - "56": [0, 0.64444, 0.13556, 0, 0.51111], - "57": [0, 0.64444, 0.13556, 0, 0.51111], - "58": [0, 0.43056, 0.0582, 0, 0.30667], - "59": [0.19444, 0.43056, 0.0582, 0, 0.30667], - "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666], - "63": [0, 0.69444, 0.1225, 0, 0.51111], - "64": [0, 0.69444, 0.09597, 0, 0.76666], - "65": [0, 0.68333, 0, 0, 0.74333], - "66": [0, 0.68333, 0.10257, 0, 0.70389], - "67": [0, 0.68333, 0.14528, 0, 0.71555], - "68": [0, 0.68333, 0.09403, 0, 0.755], - "69": [0, 0.68333, 0.12028, 0, 0.67833], - "70": [0, 0.68333, 0.13305, 0, 0.65277], - "71": [0, 0.68333, 0.08722, 0, 0.77361], - "72": [0, 0.68333, 0.16389, 0, 0.74333], - "73": [0, 0.68333, 0.15806, 0, 0.38555], - "74": [0, 0.68333, 0.14028, 0, 0.525], - "75": [0, 0.68333, 0.14528, 0, 0.76888], - "76": [0, 0.68333, 0, 0, 0.62722], - "77": [0, 0.68333, 0.16389, 0, 0.89666], - "78": [0, 0.68333, 0.16389, 0, 0.74333], - "79": [0, 0.68333, 0.09403, 0, 0.76666], - "80": [0, 0.68333, 0.10257, 0, 0.67833], - "81": [0.19444, 0.68333, 0.09403, 0, 0.76666], - "82": [0, 0.68333, 0.03868, 0, 0.72944], - "83": [0, 0.68333, 0.11972, 0, 0.56222], - "84": [0, 0.68333, 0.13305, 0, 0.71555], - "85": [0, 0.68333, 0.16389, 0, 0.74333], - "86": [0, 0.68333, 0.18361, 0, 0.74333], - "87": [0, 0.68333, 0.18361, 0, 0.99888], - "88": [0, 0.68333, 0.15806, 0, 0.74333], - "89": [0, 0.68333, 0.19383, 0, 0.74333], - "90": [0, 0.68333, 0.14528, 0, 0.61333], - "91": [0.25, 0.75, 0.1875, 0, 0.30667], - "93": [0.25, 0.75, 0.10528, 0, 0.30667], - "94": [0, 0.69444, 0.06646, 0, 0.51111], - "95": [0.31, 0.12056, 0.09208, 0, 0.51111], - "97": [0, 0.43056, 0.07671, 0, 0.51111], - "98": [0, 0.69444, 0.06312, 0, 0.46], - "99": [0, 0.43056, 0.05653, 0, 0.46], - "100": [0, 0.69444, 0.10333, 0, 0.51111], - "101": [0, 0.43056, 0.07514, 0, 0.46], - "102": [0.19444, 0.69444, 0.21194, 0, 0.30667], - "103": [0.19444, 0.43056, 0.08847, 0, 0.46], - "104": [0, 0.69444, 0.07671, 0, 0.51111], - "105": [0, 0.65536, 0.1019, 0, 0.30667], - "106": [0.19444, 0.65536, 0.14467, 0, 0.30667], - "107": [0, 0.69444, 0.10764, 0, 0.46], - "108": [0, 0.69444, 0.10333, 0, 0.25555], - "109": [0, 0.43056, 0.07671, 0, 0.81777], - "110": [0, 0.43056, 0.07671, 0, 0.56222], - "111": [0, 0.43056, 0.06312, 0, 0.51111], - "112": [0.19444, 0.43056, 0.06312, 0, 0.51111], - "113": [0.19444, 0.43056, 0.08847, 0, 0.46], - "114": [0, 0.43056, 0.10764, 0, 0.42166], - "115": [0, 0.43056, 0.08208, 0, 0.40889], - "116": [0, 0.61508, 0.09486, 0, 0.33222], - "117": [0, 0.43056, 0.07671, 0, 0.53666], - "118": [0, 0.43056, 0.10764, 0, 0.46], - "119": [0, 0.43056, 0.10764, 0, 0.66444], - "120": [0, 0.43056, 0.12042, 0, 0.46389], - "121": [0.19444, 0.43056, 0.08847, 0, 0.48555], - "122": [0, 0.43056, 0.12292, 0, 0.40889], - "126": [0.35, 0.31786, 0.11585, 0, 0.51111], - "160": [0, 0, 0, 0, 0.25], - "168": [0, 0.66786, 0.10474, 0, 0.51111], - "176": [0, 0.69444, 0, 0, 0.83129], - "184": [0.17014, 0, 0, 0, 0.46], - "198": [0, 0.68333, 0.12028, 0, 0.88277], - "216": [0.04861, 0.73194, 0.09403, 0, 0.76666], - "223": [0.19444, 0.69444, 0.10514, 0, 0.53666], - "230": [0, 0.43056, 0.07514, 0, 0.71555], - "248": [0.09722, 0.52778, 0.09194, 0, 0.51111], - "338": [0, 0.68333, 0.12028, 0, 0.98499], - "339": [0, 0.43056, 0.07514, 0, 0.71555], - "710": [0, 0.69444, 0.06646, 0, 0.51111], - "711": [0, 0.62847, 0.08295, 0, 0.51111], - "713": [0, 0.56167, 0.10333, 0, 0.51111], - "714": [0, 0.69444, 0.09694, 0, 0.51111], - "715": [0, 0.69444, 0, 0, 0.51111], - "728": [0, 0.69444, 0.10806, 0, 0.51111], - "729": [0, 0.66786, 0.11752, 0, 0.30667], - "730": [0, 0.69444, 0, 0, 0.83129], - "732": [0, 0.66786, 0.11585, 0, 0.51111], - "733": [0, 0.69444, 0.1225, 0, 0.51111], - "915": [0, 0.68333, 0.13305, 0, 0.62722], - "916": [0, 0.68333, 0, 0, 0.81777], - "920": [0, 0.68333, 0.09403, 0, 0.76666], - "923": [0, 0.68333, 0, 0, 0.69222], - "926": [0, 0.68333, 0.15294, 0, 0.66444], - "928": [0, 0.68333, 0.16389, 0, 0.74333], - "931": [0, 0.68333, 0.12028, 0, 0.71555], - "933": [0, 0.68333, 0.11111, 0, 0.76666], - "934": [0, 0.68333, 0.05986, 0, 0.71555], - "936": [0, 0.68333, 0.11111, 0, 0.76666], - "937": [0, 0.68333, 0.10257, 0, 0.71555], - "8211": [0, 0.43056, 0.09208, 0, 0.51111], - "8212": [0, 0.43056, 0.09208, 0, 1.02222], - "8216": [0, 0.69444, 0.12417, 0, 0.30667], - "8217": [0, 0.69444, 0.12417, 0, 0.30667], - "8220": [0, 0.69444, 0.1685, 0, 0.51444], - "8221": [0, 0.69444, 0.06961, 0, 0.51444], - "8463": [0, 0.68889, 0, 0, 0.54028] - }, - "Main-Regular": { - "32": [0, 0, 0, 0, 0.25], - "33": [0, 0.69444, 0, 0, 0.27778], - "34": [0, 0.69444, 0, 0, 0.5], - "35": [0.19444, 0.69444, 0, 0, 0.83334], - "36": [0.05556, 0.75, 0, 0, 0.5], - "37": [0.05556, 0.75, 0, 0, 0.83334], - "38": [0, 0.69444, 0, 0, 0.77778], - "39": [0, 0.69444, 0, 0, 0.27778], - "40": [0.25, 0.75, 0, 0, 0.38889], - "41": [0.25, 0.75, 0, 0, 0.38889], - "42": [0, 0.75, 0, 0, 0.5], - "43": [0.08333, 0.58333, 0, 0, 0.77778], - "44": [0.19444, 0.10556, 0, 0, 0.27778], - "45": [0, 0.43056, 0, 0, 0.33333], - "46": [0, 0.10556, 0, 0, 0.27778], - "47": [0.25, 0.75, 0, 0, 0.5], - "48": [0, 0.64444, 0, 0, 0.5], - "49": [0, 0.64444, 0, 0, 0.5], - "50": [0, 0.64444, 0, 0, 0.5], - "51": [0, 0.64444, 0, 0, 0.5], - "52": [0, 0.64444, 0, 0, 0.5], - "53": [0, 0.64444, 0, 0, 0.5], - "54": [0, 0.64444, 0, 0, 0.5], - "55": [0, 0.64444, 0, 0, 0.5], - "56": [0, 0.64444, 0, 0, 0.5], - "57": [0, 0.64444, 0, 0, 0.5], - "58": [0, 0.43056, 0, 0, 0.27778], - "59": [0.19444, 0.43056, 0, 0, 0.27778], - "60": [0.0391, 0.5391, 0, 0, 0.77778], - "61": [-0.13313, 0.36687, 0, 0, 0.77778], - "62": [0.0391, 0.5391, 0, 0, 0.77778], - "63": [0, 0.69444, 0, 0, 0.47222], - "64": [0, 0.69444, 0, 0, 0.77778], - "65": [0, 0.68333, 0, 0, 0.75], - "66": [0, 0.68333, 0, 0, 0.70834], - "67": [0, 0.68333, 0, 0, 0.72222], - "68": [0, 0.68333, 0, 0, 0.76389], - "69": [0, 0.68333, 0, 0, 0.68056], - "70": [0, 0.68333, 0, 0, 0.65278], - "71": [0, 0.68333, 0, 0, 0.78472], - "72": [0, 0.68333, 0, 0, 0.75], - "73": [0, 0.68333, 0, 0, 0.36111], - "74": [0, 0.68333, 0, 0, 0.51389], - "75": [0, 0.68333, 0, 0, 0.77778], - "76": [0, 0.68333, 0, 0, 0.625], - "77": [0, 0.68333, 0, 0, 0.91667], - "78": [0, 0.68333, 0, 0, 0.75], - "79": [0, 0.68333, 0, 0, 0.77778], - "80": [0, 0.68333, 0, 0, 0.68056], - "81": [0.19444, 0.68333, 0, 0, 0.77778], - "82": [0, 0.68333, 0, 0, 0.73611], - "83": [0, 0.68333, 0, 0, 0.55556], - "84": [0, 0.68333, 0, 0, 0.72222], - "85": [0, 0.68333, 0, 0, 0.75], - "86": [0, 0.68333, 0.01389, 0, 0.75], - "87": [0, 0.68333, 0.01389, 0, 1.02778], - "88": [0, 0.68333, 0, 0, 0.75], - "89": [0, 0.68333, 0.025, 0, 0.75], - "90": [0, 0.68333, 0, 0, 0.61111], - "91": [0.25, 0.75, 0, 0, 0.27778], - "92": [0.25, 0.75, 0, 0, 0.5], - "93": [0.25, 0.75, 0, 0, 0.27778], - "94": [0, 0.69444, 0, 0, 0.5], - "95": [0.31, 0.12056, 0.02778, 0, 0.5], - "97": [0, 0.43056, 0, 0, 0.5], - "98": [0, 0.69444, 0, 0, 0.55556], - "99": [0, 0.43056, 0, 0, 0.44445], - "100": [0, 0.69444, 0, 0, 0.55556], - "101": [0, 0.43056, 0, 0, 0.44445], - "102": [0, 0.69444, 0.07778, 0, 0.30556], - "103": [0.19444, 0.43056, 0.01389, 0, 0.5], - "104": [0, 0.69444, 0, 0, 0.55556], - "105": [0, 0.66786, 0, 0, 0.27778], - "106": [0.19444, 0.66786, 0, 0, 0.30556], - "107": [0, 0.69444, 0, 0, 0.52778], - "108": [0, 0.69444, 0, 0, 0.27778], - "109": [0, 0.43056, 0, 0, 0.83334], - "110": [0, 0.43056, 0, 0, 0.55556], - "111": [0, 0.43056, 0, 0, 0.5], - "112": [0.19444, 0.43056, 0, 0, 0.55556], - "113": [0.19444, 0.43056, 0, 0, 0.52778], - "114": [0, 0.43056, 0, 0, 0.39167], - "115": [0, 0.43056, 0, 0, 0.39445], - "116": [0, 0.61508, 0, 0, 0.38889], - "117": [0, 0.43056, 0, 0, 0.55556], - "118": [0, 0.43056, 0.01389, 0, 0.52778], - "119": [0, 0.43056, 0.01389, 0, 0.72222], - "120": [0, 0.43056, 0, 0, 0.52778], - "121": [0.19444, 0.43056, 0.01389, 0, 0.52778], - "122": [0, 0.43056, 0, 0, 0.44445], - "123": [0.25, 0.75, 0, 0, 0.5], - "124": [0.25, 0.75, 0, 0, 0.27778], - "125": [0.25, 0.75, 0, 0, 0.5], - "126": [0.35, 0.31786, 0, 0, 0.5], - "160": [0, 0, 0, 0, 0.25], - "163": [0, 0.69444, 0, 0, 0.76909], - "167": [0.19444, 0.69444, 0, 0, 0.44445], - "168": [0, 0.66786, 0, 0, 0.5], - "172": [0, 0.43056, 0, 0, 0.66667], - "176": [0, 0.69444, 0, 0, 0.75], - "177": [0.08333, 0.58333, 0, 0, 0.77778], - "182": [0.19444, 0.69444, 0, 0, 0.61111], - "184": [0.17014, 0, 0, 0, 0.44445], - "198": [0, 0.68333, 0, 0, 0.90278], - "215": [0.08333, 0.58333, 0, 0, 0.77778], - "216": [0.04861, 0.73194, 0, 0, 0.77778], - "223": [0, 0.69444, 0, 0, 0.5], - "230": [0, 0.43056, 0, 0, 0.72222], - "247": [0.08333, 0.58333, 0, 0, 0.77778], - "248": [0.09722, 0.52778, 0, 0, 0.5], - "305": [0, 0.43056, 0, 0, 0.27778], - "338": [0, 0.68333, 0, 0, 1.01389], - "339": [0, 0.43056, 0, 0, 0.77778], - "567": [0.19444, 0.43056, 0, 0, 0.30556], - "710": [0, 0.69444, 0, 0, 0.5], - "711": [0, 0.62847, 0, 0, 0.5], - "713": [0, 0.56778, 0, 0, 0.5], - "714": [0, 0.69444, 0, 0, 0.5], - "715": [0, 0.69444, 0, 0, 0.5], - "728": [0, 0.69444, 0, 0, 0.5], - "729": [0, 0.66786, 0, 0, 0.27778], - "730": [0, 0.69444, 0, 0, 0.75], - "732": [0, 0.66786, 0, 0, 0.5], - "733": [0, 0.69444, 0, 0, 0.5], - "915": [0, 0.68333, 0, 0, 0.625], - "916": [0, 0.68333, 0, 0, 0.83334], - "920": [0, 0.68333, 0, 0, 0.77778], - "923": [0, 0.68333, 0, 0, 0.69445], - "926": [0, 0.68333, 0, 0, 0.66667], - "928": [0, 0.68333, 0, 0, 0.75], - "931": [0, 0.68333, 0, 0, 0.72222], - "933": [0, 0.68333, 0, 0, 0.77778], - "934": [0, 0.68333, 0, 0, 0.72222], - "936": [0, 0.68333, 0, 0, 0.77778], - "937": [0, 0.68333, 0, 0, 0.72222], - "8211": [0, 0.43056, 0.02778, 0, 0.5], - "8212": [0, 0.43056, 0.02778, 0, 1.0], - "8216": [0, 0.69444, 0, 0, 0.27778], - "8217": [0, 0.69444, 0, 0, 0.27778], - "8220": [0, 0.69444, 0, 0, 0.5], - "8221": [0, 0.69444, 0, 0, 0.5], - "8224": [0.19444, 0.69444, 0, 0, 0.44445], - "8225": [0.19444, 0.69444, 0, 0, 0.44445], - "8230": [0, 0.123, 0, 0, 1.172], - "8242": [0, 0.55556, 0, 0, 0.275], - "8407": [0, 0.71444, 0.15382, 0, 0.5], - "8463": [0, 0.68889, 0, 0, 0.54028], - "8465": [0, 0.69444, 0, 0, 0.72222], - "8467": [0, 0.69444, 0, 0.11111, 0.41667], - "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646], - "8476": [0, 0.69444, 0, 0, 0.72222], - "8501": [0, 0.69444, 0, 0, 0.61111], - "8592": [-0.13313, 0.36687, 0, 0, 1.0], - "8593": [0.19444, 0.69444, 0, 0, 0.5], - "8594": [-0.13313, 0.36687, 0, 0, 1.0], - "8595": [0.19444, 0.69444, 0, 0, 0.5], - "8596": [-0.13313, 0.36687, 0, 0, 1.0], - "8597": [0.25, 0.75, 0, 0, 0.5], - "8598": [0.19444, 0.69444, 0, 0, 1.0], - "8599": [0.19444, 0.69444, 0, 0, 1.0], - "8600": [0.19444, 0.69444, 0, 0, 1.0], - "8601": [0.19444, 0.69444, 0, 0, 1.0], - "8614": [0.011, 0.511, 0, 0, 1.0], - "8617": [0.011, 0.511, 0, 0, 1.126], - "8618": [0.011, 0.511, 0, 0, 1.126], - "8636": [-0.13313, 0.36687, 0, 0, 1.0], - "8637": [-0.13313, 0.36687, 0, 0, 1.0], - "8640": [-0.13313, 0.36687, 0, 0, 1.0], - "8641": [-0.13313, 0.36687, 0, 0, 1.0], - "8652": [0.011, 0.671, 0, 0, 1.0], - "8656": [-0.13313, 0.36687, 0, 0, 1.0], - "8657": [0.19444, 0.69444, 0, 0, 0.61111], - "8658": [-0.13313, 0.36687, 0, 0, 1.0], - "8659": [0.19444, 0.69444, 0, 0, 0.61111], - "8660": [-0.13313, 0.36687, 0, 0, 1.0], - "8661": [0.25, 0.75, 0, 0, 0.61111], - "8704": [0, 0.69444, 0, 0, 0.55556], - "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309], - "8707": [0, 0.69444, 0, 0, 0.55556], - "8709": [0.05556, 0.75, 0, 0, 0.5], - "8711": [0, 0.68333, 0, 0, 0.83334], - "8712": [0.0391, 0.5391, 0, 0, 0.66667], - "8715": [0.0391, 0.5391, 0, 0, 0.66667], - "8722": [0.08333, 0.58333, 0, 0, 0.77778], - "8723": [0.08333, 0.58333, 0, 0, 0.77778], - "8725": [0.25, 0.75, 0, 0, 0.5], - "8726": [0.25, 0.75, 0, 0, 0.5], - "8727": [-0.03472, 0.46528, 0, 0, 0.5], - "8728": [-0.05555, 0.44445, 0, 0, 0.5], - "8729": [-0.05555, 0.44445, 0, 0, 0.5], - "8730": [0.2, 0.8, 0, 0, 0.83334], - "8733": [0, 0.43056, 0, 0, 0.77778], - "8734": [0, 0.43056, 0, 0, 1.0], - "8736": [0, 0.69224, 0, 0, 0.72222], - "8739": [0.25, 0.75, 0, 0, 0.27778], - "8741": [0.25, 0.75, 0, 0, 0.5], - "8743": [0, 0.55556, 0, 0, 0.66667], - "8744": [0, 0.55556, 0, 0, 0.66667], - "8745": [0, 0.55556, 0, 0, 0.66667], - "8746": [0, 0.55556, 0, 0, 0.66667], - "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667], - "8764": [-0.13313, 0.36687, 0, 0, 0.77778], - "8768": [0.19444, 0.69444, 0, 0, 0.27778], - "8771": [-0.03625, 0.46375, 0, 0, 0.77778], - "8773": [-0.022, 0.589, 0, 0, 0.778], - "8776": [-0.01688, 0.48312, 0, 0, 0.77778], - "8781": [-0.03625, 0.46375, 0, 0, 0.77778], - "8784": [-0.133, 0.673, 0, 0, 0.778], - "8801": [-0.03625, 0.46375, 0, 0, 0.77778], - "8804": [0.13597, 0.63597, 0, 0, 0.77778], - "8805": [0.13597, 0.63597, 0, 0, 0.77778], - "8810": [0.0391, 0.5391, 0, 0, 1.0], - "8811": [0.0391, 0.5391, 0, 0, 1.0], - "8826": [0.0391, 0.5391, 0, 0, 0.77778], - "8827": [0.0391, 0.5391, 0, 0, 0.77778], - "8834": [0.0391, 0.5391, 0, 0, 0.77778], - "8835": [0.0391, 0.5391, 0, 0, 0.77778], - "8838": [0.13597, 0.63597, 0, 0, 0.77778], - "8839": [0.13597, 0.63597, 0, 0, 0.77778], - "8846": [0, 0.55556, 0, 0, 0.66667], - "8849": [0.13597, 0.63597, 0, 0, 0.77778], - "8850": [0.13597, 0.63597, 0, 0, 0.77778], - "8851": [0, 0.55556, 0, 0, 0.66667], - "8852": [0, 0.55556, 0, 0, 0.66667], - "8853": [0.08333, 0.58333, 0, 0, 0.77778], - "8854": [0.08333, 0.58333, 0, 0, 0.77778], - "8855": [0.08333, 0.58333, 0, 0, 0.77778], - "8856": [0.08333, 0.58333, 0, 0, 0.77778], - "8857": [0.08333, 0.58333, 0, 0, 0.77778], - "8866": [0, 0.69444, 0, 0, 0.61111], - "8867": [0, 0.69444, 0, 0, 0.61111], - "8868": [0, 0.69444, 0, 0, 0.77778], - "8869": [0, 0.69444, 0, 0, 0.77778], - "8872": [0.249, 0.75, 0, 0, 0.867], - "8900": [-0.05555, 0.44445, 0, 0, 0.5], - "8901": [-0.05555, 0.44445, 0, 0, 0.27778], - "8902": [-0.03472, 0.46528, 0, 0, 0.5], - "8904": [0.005, 0.505, 0, 0, 0.9], - "8942": [0.03, 0.903, 0, 0, 0.278], - "8943": [-0.19, 0.313, 0, 0, 1.172], - "8945": [-0.1, 0.823, 0, 0, 1.282], - "8968": [0.25, 0.75, 0, 0, 0.44445], - "8969": [0.25, 0.75, 0, 0, 0.44445], - "8970": [0.25, 0.75, 0, 0, 0.44445], - "8971": [0.25, 0.75, 0, 0, 0.44445], - "8994": [-0.14236, 0.35764, 0, 0, 1.0], - "8995": [-0.14236, 0.35764, 0, 0, 1.0], - "9136": [0.244, 0.744, 0, 0, 0.412], - "9137": [0.244, 0.745, 0, 0, 0.412], - "9651": [0.19444, 0.69444, 0, 0, 0.88889], - "9657": [-0.03472, 0.46528, 0, 0, 0.5], - "9661": [0.19444, 0.69444, 0, 0, 0.88889], - "9667": [-0.03472, 0.46528, 0, 0, 0.5], - "9711": [0.19444, 0.69444, 0, 0, 1.0], - "9824": [0.12963, 0.69444, 0, 0, 0.77778], - "9825": [0.12963, 0.69444, 0, 0, 0.77778], - "9826": [0.12963, 0.69444, 0, 0, 0.77778], - "9827": [0.12963, 0.69444, 0, 0, 0.77778], - "9837": [0, 0.75, 0, 0, 0.38889], - "9838": [0.19444, 0.69444, 0, 0, 0.38889], - "9839": [0.19444, 0.69444, 0, 0, 0.38889], - "10216": [0.25, 0.75, 0, 0, 0.38889], - "10217": [0.25, 0.75, 0, 0, 0.38889], - "10222": [0.244, 0.744, 0, 0, 0.412], - "10223": [0.244, 0.745, 0, 0, 0.412], - "10229": [0.011, 0.511, 0, 0, 1.609], - "10230": [0.011, 0.511, 0, 0, 1.638], - "10231": [0.011, 0.511, 0, 0, 1.859], - "10232": [0.024, 0.525, 0, 0, 1.609], - "10233": [0.024, 0.525, 0, 0, 1.638], - "10234": [0.024, 0.525, 0, 0, 1.858], - "10236": [0.011, 0.511, 0, 0, 1.638], - "10815": [0, 0.68333, 0, 0, 0.75], - "10927": [0.13597, 0.63597, 0, 0, 0.77778], - "10928": [0.13597, 0.63597, 0, 0, 0.77778], - "57376": [0.19444, 0.69444, 0, 0, 0] - }, - "Math-BoldItalic": { - "32": [0, 0, 0, 0, 0.25], - "48": [0, 0.44444, 0, 0, 0.575], - "49": [0, 0.44444, 0, 0, 0.575], - "50": [0, 0.44444, 0, 0, 0.575], - "51": [0.19444, 0.44444, 0, 0, 0.575], - "52": [0.19444, 0.44444, 0, 0, 0.575], - "53": [0.19444, 0.44444, 0, 0, 0.575], - "54": [0, 0.64444, 0, 0, 0.575], - "55": [0.19444, 0.44444, 0, 0, 0.575], - "56": [0, 0.64444, 0, 0, 0.575], - "57": [0.19444, 0.44444, 0, 0, 0.575], - "65": [0, 0.68611, 0, 0, 0.86944], - "66": [0, 0.68611, 0.04835, 0, 0.8664], - "67": [0, 0.68611, 0.06979, 0, 0.81694], - "68": [0, 0.68611, 0.03194, 0, 0.93812], - "69": [0, 0.68611, 0.05451, 0, 0.81007], - "70": [0, 0.68611, 0.15972, 0, 0.68889], - "71": [0, 0.68611, 0, 0, 0.88673], - "72": [0, 0.68611, 0.08229, 0, 0.98229], - "73": [0, 0.68611, 0.07778, 0, 0.51111], - "74": [0, 0.68611, 0.10069, 0, 0.63125], - "75": [0, 0.68611, 0.06979, 0, 0.97118], - "76": [0, 0.68611, 0, 0, 0.75555], - "77": [0, 0.68611, 0.11424, 0, 1.14201], - "78": [0, 0.68611, 0.11424, 0, 0.95034], - "79": [0, 0.68611, 0.03194, 0, 0.83666], - "80": [0, 0.68611, 0.15972, 0, 0.72309], - "81": [0.19444, 0.68611, 0, 0, 0.86861], - "82": [0, 0.68611, 0.00421, 0, 0.87235], - "83": [0, 0.68611, 0.05382, 0, 0.69271], - "84": [0, 0.68611, 0.15972, 0, 0.63663], - "85": [0, 0.68611, 0.11424, 0, 0.80027], - "86": [0, 0.68611, 0.25555, 0, 0.67778], - "87": [0, 0.68611, 0.15972, 0, 1.09305], - "88": [0, 0.68611, 0.07778, 0, 0.94722], - "89": [0, 0.68611, 0.25555, 0, 0.67458], - "90": [0, 0.68611, 0.06979, 0, 0.77257], - "97": [0, 0.44444, 0, 0, 0.63287], - "98": [0, 0.69444, 0, 0, 0.52083], - "99": [0, 0.44444, 0, 0, 0.51342], - "100": [0, 0.69444, 0, 0, 0.60972], - "101": [0, 0.44444, 0, 0, 0.55361], - "102": [0.19444, 0.69444, 0.11042, 0, 0.56806], - "103": [0.19444, 0.44444, 0.03704, 0, 0.5449], - "104": [0, 0.69444, 0, 0, 0.66759], - "105": [0, 0.69326, 0, 0, 0.4048], - "106": [0.19444, 0.69326, 0.0622, 0, 0.47083], - "107": [0, 0.69444, 0.01852, 0, 0.6037], - "108": [0, 0.69444, 0.0088, 0, 0.34815], - "109": [0, 0.44444, 0, 0, 1.0324], - "110": [0, 0.44444, 0, 0, 0.71296], - "111": [0, 0.44444, 0, 0, 0.58472], - "112": [0.19444, 0.44444, 0, 0, 0.60092], - "113": [0.19444, 0.44444, 0.03704, 0, 0.54213], - "114": [0, 0.44444, 0.03194, 0, 0.5287], - "115": [0, 0.44444, 0, 0, 0.53125], - "116": [0, 0.63492, 0, 0, 0.41528], - "117": [0, 0.44444, 0, 0, 0.68102], - "118": [0, 0.44444, 0.03704, 0, 0.56666], - "119": [0, 0.44444, 0.02778, 0, 0.83148], - "120": [0, 0.44444, 0, 0, 0.65903], - "121": [0.19444, 0.44444, 0.03704, 0, 0.59028], - "122": [0, 0.44444, 0.04213, 0, 0.55509], - "160": [0, 0, 0, 0, 0.25], - "915": [0, 0.68611, 0.15972, 0, 0.65694], - "916": [0, 0.68611, 0, 0, 0.95833], - "920": [0, 0.68611, 0.03194, 0, 0.86722], - "923": [0, 0.68611, 0, 0, 0.80555], - "926": [0, 0.68611, 0.07458, 0, 0.84125], - "928": [0, 0.68611, 0.08229, 0, 0.98229], - "931": [0, 0.68611, 0.05451, 0, 0.88507], - "933": [0, 0.68611, 0.15972, 0, 0.67083], - "934": [0, 0.68611, 0, 0, 0.76666], - "936": [0, 0.68611, 0.11653, 0, 0.71402], - "937": [0, 0.68611, 0.04835, 0, 0.8789], - "945": [0, 0.44444, 0, 0, 0.76064], - "946": [0.19444, 0.69444, 0.03403, 0, 0.65972], - "947": [0.19444, 0.44444, 0.06389, 0, 0.59003], - "948": [0, 0.69444, 0.03819, 0, 0.52222], - "949": [0, 0.44444, 0, 0, 0.52882], - "950": [0.19444, 0.69444, 0.06215, 0, 0.50833], - "951": [0.19444, 0.44444, 0.03704, 0, 0.6], - "952": [0, 0.69444, 0.03194, 0, 0.5618], - "953": [0, 0.44444, 0, 0, 0.41204], - "954": [0, 0.44444, 0, 0, 0.66759], - "955": [0, 0.69444, 0, 0, 0.67083], - "956": [0.19444, 0.44444, 0, 0, 0.70787], - "957": [0, 0.44444, 0.06898, 0, 0.57685], - "958": [0.19444, 0.69444, 0.03021, 0, 0.50833], - "959": [0, 0.44444, 0, 0, 0.58472], - "960": [0, 0.44444, 0.03704, 0, 0.68241], - "961": [0.19444, 0.44444, 0, 0, 0.6118], - "962": [0.09722, 0.44444, 0.07917, 0, 0.42361], - "963": [0, 0.44444, 0.03704, 0, 0.68588], - "964": [0, 0.44444, 0.13472, 0, 0.52083], - "965": [0, 0.44444, 0.03704, 0, 0.63055], - "966": [0.19444, 0.44444, 0, 0, 0.74722], - "967": [0.19444, 0.44444, 0, 0, 0.71805], - "968": [0.19444, 0.69444, 0.03704, 0, 0.75833], - "969": [0, 0.44444, 0.03704, 0, 0.71782], - "977": [0, 0.69444, 0, 0, 0.69155], - "981": [0.19444, 0.69444, 0, 0, 0.7125], - "982": [0, 0.44444, 0.03194, 0, 0.975], - "1009": [0.19444, 0.44444, 0, 0, 0.6118], - "1013": [0, 0.44444, 0, 0, 0.48333], - "57649": [0, 0.44444, 0, 0, 0.39352], - "57911": [0.19444, 0.44444, 0, 0, 0.43889] - }, - "Math-Italic": { - "32": [0, 0, 0, 0, 0.25], - "48": [0, 0.43056, 0, 0, 0.5], - "49": [0, 0.43056, 0, 0, 0.5], - "50": [0, 0.43056, 0, 0, 0.5], - "51": [0.19444, 0.43056, 0, 0, 0.5], - "52": [0.19444, 0.43056, 0, 0, 0.5], - "53": [0.19444, 0.43056, 0, 0, 0.5], - "54": [0, 0.64444, 0, 0, 0.5], - "55": [0.19444, 0.43056, 0, 0, 0.5], - "56": [0, 0.64444, 0, 0, 0.5], - "57": [0.19444, 0.43056, 0, 0, 0.5], - "65": [0, 0.68333, 0, 0.13889, 0.75], - "66": [0, 0.68333, 0.05017, 0.08334, 0.75851], - "67": [0, 0.68333, 0.07153, 0.08334, 0.71472], - "68": [0, 0.68333, 0.02778, 0.05556, 0.82792], - "69": [0, 0.68333, 0.05764, 0.08334, 0.7382], - "70": [0, 0.68333, 0.13889, 0.08334, 0.64306], - "71": [0, 0.68333, 0, 0.08334, 0.78625], - "72": [0, 0.68333, 0.08125, 0.05556, 0.83125], - "73": [0, 0.68333, 0.07847, 0.11111, 0.43958], - "74": [0, 0.68333, 0.09618, 0.16667, 0.55451], - "75": [0, 0.68333, 0.07153, 0.05556, 0.84931], - "76": [0, 0.68333, 0, 0.02778, 0.68056], - "77": [0, 0.68333, 0.10903, 0.08334, 0.97014], - "78": [0, 0.68333, 0.10903, 0.08334, 0.80347], - "79": [0, 0.68333, 0.02778, 0.08334, 0.76278], - "80": [0, 0.68333, 0.13889, 0.08334, 0.64201], - "81": [0.19444, 0.68333, 0, 0.08334, 0.79056], - "82": [0, 0.68333, 0.00773, 0.08334, 0.75929], - "83": [0, 0.68333, 0.05764, 0.08334, 0.6132], - "84": [0, 0.68333, 0.13889, 0.08334, 0.58438], - "85": [0, 0.68333, 0.10903, 0.02778, 0.68278], - "86": [0, 0.68333, 0.22222, 0, 0.58333], - "87": [0, 0.68333, 0.13889, 0, 0.94445], - "88": [0, 0.68333, 0.07847, 0.08334, 0.82847], - "89": [0, 0.68333, 0.22222, 0, 0.58056], - "90": [0, 0.68333, 0.07153, 0.08334, 0.68264], - "97": [0, 0.43056, 0, 0, 0.52859], - "98": [0, 0.69444, 0, 0, 0.42917], - "99": [0, 0.43056, 0, 0.05556, 0.43276], - "100": [0, 0.69444, 0, 0.16667, 0.52049], - "101": [0, 0.43056, 0, 0.05556, 0.46563], - "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], - "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], - "104": [0, 0.69444, 0, 0, 0.57616], - "105": [0, 0.65952, 0, 0, 0.34451], - "106": [0.19444, 0.65952, 0.05724, 0, 0.41181], - "107": [0, 0.69444, 0.03148, 0, 0.5206], - "108": [0, 0.69444, 0.01968, 0.08334, 0.29838], - "109": [0, 0.43056, 0, 0, 0.87801], - "110": [0, 0.43056, 0, 0, 0.60023], - "111": [0, 0.43056, 0, 0.05556, 0.48472], - "112": [0.19444, 0.43056, 0, 0.08334, 0.50313], - "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], - "114": [0, 0.43056, 0.02778, 0.05556, 0.45116], - "115": [0, 0.43056, 0, 0.05556, 0.46875], - "116": [0, 0.61508, 0, 0.08334, 0.36111], - "117": [0, 0.43056, 0, 0.02778, 0.57246], - "118": [0, 0.43056, 0.03588, 0.02778, 0.48472], - "119": [0, 0.43056, 0.02691, 0.08334, 0.71592], - "120": [0, 0.43056, 0, 0.02778, 0.57153], - "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], - "122": [0, 0.43056, 0.04398, 0.05556, 0.46505], - "160": [0, 0, 0, 0, 0.25], - "915": [0, 0.68333, 0.13889, 0.08334, 0.61528], - "916": [0, 0.68333, 0, 0.16667, 0.83334], - "920": [0, 0.68333, 0.02778, 0.08334, 0.76278], - "923": [0, 0.68333, 0, 0.16667, 0.69445], - "926": [0, 0.68333, 0.07569, 0.08334, 0.74236], - "928": [0, 0.68333, 0.08125, 0.05556, 0.83125], - "931": [0, 0.68333, 0.05764, 0.08334, 0.77986], - "933": [0, 0.68333, 0.13889, 0.05556, 0.58333], - "934": [0, 0.68333, 0, 0.08334, 0.66667], - "936": [0, 0.68333, 0.11, 0.05556, 0.61222], - "937": [0, 0.68333, 0.05017, 0.08334, 0.7724], - "945": [0, 0.43056, 0.0037, 0.02778, 0.6397], - "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], - "947": [0.19444, 0.43056, 0.05556, 0, 0.51773], - "948": [0, 0.69444, 0.03785, 0.05556, 0.44444], - "949": [0, 0.43056, 0, 0.08334, 0.46632], - "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], - "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], - "952": [0, 0.69444, 0.02778, 0.08334, 0.46944], - "953": [0, 0.43056, 0, 0.05556, 0.35394], - "954": [0, 0.43056, 0, 0, 0.57616], - "955": [0, 0.69444, 0, 0, 0.58334], - "956": [0.19444, 0.43056, 0, 0.02778, 0.60255], - "957": [0, 0.43056, 0.06366, 0.02778, 0.49398], - "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], - "959": [0, 0.43056, 0, 0.05556, 0.48472], - "960": [0, 0.43056, 0.03588, 0, 0.57003], - "961": [0.19444, 0.43056, 0, 0.08334, 0.51702], - "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], - "963": [0, 0.43056, 0.03588, 0, 0.57141], - "964": [0, 0.43056, 0.1132, 0.02778, 0.43715], - "965": [0, 0.43056, 0.03588, 0.02778, 0.54028], - "966": [0.19444, 0.43056, 0, 0.08334, 0.65417], - "967": [0.19444, 0.43056, 0, 0.05556, 0.62569], - "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], - "969": [0, 0.43056, 0.03588, 0, 0.62245], - "977": [0, 0.69444, 0, 0.08334, 0.59144], - "981": [0.19444, 0.69444, 0, 0.08334, 0.59583], - "982": [0, 0.43056, 0.02778, 0, 0.82813], - "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702], - "1013": [0, 0.43056, 0, 0.05556, 0.4059], - "57649": [0, 0.43056, 0, 0.02778, 0.32246], - "57911": [0.19444, 0.43056, 0, 0.08334, 0.38403] - }, - "SansSerif-Bold": { - "32": [0, 0, 0, 0, 0.25], - "33": [0, 0.69444, 0, 0, 0.36667], - "34": [0, 0.69444, 0, 0, 0.55834], - "35": [0.19444, 0.69444, 0, 0, 0.91667], - "36": [0.05556, 0.75, 0, 0, 0.55], - "37": [0.05556, 0.75, 0, 0, 1.02912], - "38": [0, 0.69444, 0, 0, 0.83056], - "39": [0, 0.69444, 0, 0, 0.30556], - "40": [0.25, 0.75, 0, 0, 0.42778], - "41": [0.25, 0.75, 0, 0, 0.42778], - "42": [0, 0.75, 0, 0, 0.55], - "43": [0.11667, 0.61667, 0, 0, 0.85556], - "44": [0.10556, 0.13056, 0, 0, 0.30556], - "45": [0, 0.45833, 0, 0, 0.36667], - "46": [0, 0.13056, 0, 0, 0.30556], - "47": [0.25, 0.75, 0, 0, 0.55], - "48": [0, 0.69444, 0, 0, 0.55], - "49": [0, 0.69444, 0, 0, 0.55], - "50": [0, 0.69444, 0, 0, 0.55], - "51": [0, 0.69444, 0, 0, 0.55], - "52": [0, 0.69444, 0, 0, 0.55], - "53": [0, 0.69444, 0, 0, 0.55], - "54": [0, 0.69444, 0, 0, 0.55], - "55": [0, 0.69444, 0, 0, 0.55], - "56": [0, 0.69444, 0, 0, 0.55], - "57": [0, 0.69444, 0, 0, 0.55], - "58": [0, 0.45833, 0, 0, 0.30556], - "59": [0.10556, 0.45833, 0, 0, 0.30556], - "61": [-0.09375, 0.40625, 0, 0, 0.85556], - "63": [0, 0.69444, 0, 0, 0.51945], - "64": [0, 0.69444, 0, 0, 0.73334], - "65": [0, 0.69444, 0, 0, 0.73334], - "66": [0, 0.69444, 0, 0, 0.73334], - "67": [0, 0.69444, 0, 0, 0.70278], - "68": [0, 0.69444, 0, 0, 0.79445], - "69": [0, 0.69444, 0, 0, 0.64167], - "70": [0, 0.69444, 0, 0, 0.61111], - "71": [0, 0.69444, 0, 0, 0.73334], - "72": [0, 0.69444, 0, 0, 0.79445], - "73": [0, 0.69444, 0, 0, 0.33056], - "74": [0, 0.69444, 0, 0, 0.51945], - "75": [0, 0.69444, 0, 0, 0.76389], - "76": [0, 0.69444, 0, 0, 0.58056], - "77": [0, 0.69444, 0, 0, 0.97778], - "78": [0, 0.69444, 0, 0, 0.79445], - "79": [0, 0.69444, 0, 0, 0.79445], - "80": [0, 0.69444, 0, 0, 0.70278], - "81": [0.10556, 0.69444, 0, 0, 0.79445], - "82": [0, 0.69444, 0, 0, 0.70278], - "83": [0, 0.69444, 0, 0, 0.61111], - "84": [0, 0.69444, 0, 0, 0.73334], - "85": [0, 0.69444, 0, 0, 0.76389], - "86": [0, 0.69444, 0.01528, 0, 0.73334], - "87": [0, 0.69444, 0.01528, 0, 1.03889], - "88": [0, 0.69444, 0, 0, 0.73334], - "89": [0, 0.69444, 0.0275, 0, 0.73334], - "90": [0, 0.69444, 0, 0, 0.67223], - "91": [0.25, 0.75, 0, 0, 0.34306], - "93": [0.25, 0.75, 0, 0, 0.34306], - "94": [0, 0.69444, 0, 0, 0.55], - "95": [0.35, 0.10833, 0.03056, 0, 0.55], - "97": [0, 0.45833, 0, 0, 0.525], - "98": [0, 0.69444, 0, 0, 0.56111], - "99": [0, 0.45833, 0, 0, 0.48889], - "100": [0, 0.69444, 0, 0, 0.56111], - "101": [0, 0.45833, 0, 0, 0.51111], - "102": [0, 0.69444, 0.07639, 0, 0.33611], - "103": [0.19444, 0.45833, 0.01528, 0, 0.55], - "104": [0, 0.69444, 0, 0, 0.56111], - "105": [0, 0.69444, 0, 0, 0.25556], - "106": [0.19444, 0.69444, 0, 0, 0.28611], - "107": [0, 0.69444, 0, 0, 0.53056], - "108": [0, 0.69444, 0, 0, 0.25556], - "109": [0, 0.45833, 0, 0, 0.86667], - "110": [0, 0.45833, 0, 0, 0.56111], - "111": [0, 0.45833, 0, 0, 0.55], - "112": [0.19444, 0.45833, 0, 0, 0.56111], - "113": [0.19444, 0.45833, 0, 0, 0.56111], - "114": [0, 0.45833, 0.01528, 0, 0.37222], - "115": [0, 0.45833, 0, 0, 0.42167], - "116": [0, 0.58929, 0, 0, 0.40417], - "117": [0, 0.45833, 0, 0, 0.56111], - "118": [0, 0.45833, 0.01528, 0, 0.5], - "119": [0, 0.45833, 0.01528, 0, 0.74445], - "120": [0, 0.45833, 0, 0, 0.5], - "121": [0.19444, 0.45833, 0.01528, 0, 0.5], - "122": [0, 0.45833, 0, 0, 0.47639], - "126": [0.35, 0.34444, 0, 0, 0.55], - "160": [0, 0, 0, 0, 0.25], - "168": [0, 0.69444, 0, 0, 0.55], - "176": [0, 0.69444, 0, 0, 0.73334], - "180": [0, 0.69444, 0, 0, 0.55], - "184": [0.17014, 0, 0, 0, 0.48889], - "305": [0, 0.45833, 0, 0, 0.25556], - "567": [0.19444, 0.45833, 0, 0, 0.28611], - "710": [0, 0.69444, 0, 0, 0.55], - "711": [0, 0.63542, 0, 0, 0.55], - "713": [0, 0.63778, 0, 0, 0.55], - "728": [0, 0.69444, 0, 0, 0.55], - "729": [0, 0.69444, 0, 0, 0.30556], - "730": [0, 0.69444, 0, 0, 0.73334], - "732": [0, 0.69444, 0, 0, 0.55], - "733": [0, 0.69444, 0, 0, 0.55], - "915": [0, 0.69444, 0, 0, 0.58056], - "916": [0, 0.69444, 0, 0, 0.91667], - "920": [0, 0.69444, 0, 0, 0.85556], - "923": [0, 0.69444, 0, 0, 0.67223], - "926": [0, 0.69444, 0, 0, 0.73334], - "928": [0, 0.69444, 0, 0, 0.79445], - "931": [0, 0.69444, 0, 0, 0.79445], - "933": [0, 0.69444, 0, 0, 0.85556], - "934": [0, 0.69444, 0, 0, 0.79445], - "936": [0, 0.69444, 0, 0, 0.85556], - "937": [0, 0.69444, 0, 0, 0.79445], - "8211": [0, 0.45833, 0.03056, 0, 0.55], - "8212": [0, 0.45833, 0.03056, 0, 1.10001], - "8216": [0, 0.69444, 0, 0, 0.30556], - "8217": [0, 0.69444, 0, 0, 0.30556], - "8220": [0, 0.69444, 0, 0, 0.55834], - "8221": [0, 0.69444, 0, 0, 0.55834] - }, - "SansSerif-Italic": { - "32": [0, 0, 0, 0, 0.25], - "33": [0, 0.69444, 0.05733, 0, 0.31945], - "34": [0, 0.69444, 0.00316, 0, 0.5], - "35": [0.19444, 0.69444, 0.05087, 0, 0.83334], - "36": [0.05556, 0.75, 0.11156, 0, 0.5], - "37": [0.05556, 0.75, 0.03126, 0, 0.83334], - "38": [0, 0.69444, 0.03058, 0, 0.75834], - "39": [0, 0.69444, 0.07816, 0, 0.27778], - "40": [0.25, 0.75, 0.13164, 0, 0.38889], - "41": [0.25, 0.75, 0.02536, 0, 0.38889], - "42": [0, 0.75, 0.11775, 0, 0.5], - "43": [0.08333, 0.58333, 0.02536, 0, 0.77778], - "44": [0.125, 0.08333, 0, 0, 0.27778], - "45": [0, 0.44444, 0.01946, 0, 0.33333], - "46": [0, 0.08333, 0, 0, 0.27778], - "47": [0.25, 0.75, 0.13164, 0, 0.5], - "48": [0, 0.65556, 0.11156, 0, 0.5], - "49": [0, 0.65556, 0.11156, 0, 0.5], - "50": [0, 0.65556, 0.11156, 0, 0.5], - "51": [0, 0.65556, 0.11156, 0, 0.5], - "52": [0, 0.65556, 0.11156, 0, 0.5], - "53": [0, 0.65556, 0.11156, 0, 0.5], - "54": [0, 0.65556, 0.11156, 0, 0.5], - "55": [0, 0.65556, 0.11156, 0, 0.5], - "56": [0, 0.65556, 0.11156, 0, 0.5], - "57": [0, 0.65556, 0.11156, 0, 0.5], - "58": [0, 0.44444, 0.02502, 0, 0.27778], - "59": [0.125, 0.44444, 0.02502, 0, 0.27778], - "61": [-0.13, 0.37, 0.05087, 0, 0.77778], - "63": [0, 0.69444, 0.11809, 0, 0.47222], - "64": [0, 0.69444, 0.07555, 0, 0.66667], - "65": [0, 0.69444, 0, 0, 0.66667], - "66": [0, 0.69444, 0.08293, 0, 0.66667], - "67": [0, 0.69444, 0.11983, 0, 0.63889], - "68": [0, 0.69444, 0.07555, 0, 0.72223], - "69": [0, 0.69444, 0.11983, 0, 0.59722], - "70": [0, 0.69444, 0.13372, 0, 0.56945], - "71": [0, 0.69444, 0.11983, 0, 0.66667], - "72": [0, 0.69444, 0.08094, 0, 0.70834], - "73": [0, 0.69444, 0.13372, 0, 0.27778], - "74": [0, 0.69444, 0.08094, 0, 0.47222], - "75": [0, 0.69444, 0.11983, 0, 0.69445], - "76": [0, 0.69444, 0, 0, 0.54167], - "77": [0, 0.69444, 0.08094, 0, 0.875], - "78": [0, 0.69444, 0.08094, 0, 0.70834], - "79": [0, 0.69444, 0.07555, 0, 0.73611], - "80": [0, 0.69444, 0.08293, 0, 0.63889], - "81": [0.125, 0.69444, 0.07555, 0, 0.73611], - "82": [0, 0.69444, 0.08293, 0, 0.64584], - "83": [0, 0.69444, 0.09205, 0, 0.55556], - "84": [0, 0.69444, 0.13372, 0, 0.68056], - "85": [0, 0.69444, 0.08094, 0, 0.6875], - "86": [0, 0.69444, 0.1615, 0, 0.66667], - "87": [0, 0.69444, 0.1615, 0, 0.94445], - "88": [0, 0.69444, 0.13372, 0, 0.66667], - "89": [0, 0.69444, 0.17261, 0, 0.66667], - "90": [0, 0.69444, 0.11983, 0, 0.61111], - "91": [0.25, 0.75, 0.15942, 0, 0.28889], - "93": [0.25, 0.75, 0.08719, 0, 0.28889], - "94": [0, 0.69444, 0.0799, 0, 0.5], - "95": [0.35, 0.09444, 0.08616, 0, 0.5], - "97": [0, 0.44444, 0.00981, 0, 0.48056], - "98": [0, 0.69444, 0.03057, 0, 0.51667], - "99": [0, 0.44444, 0.08336, 0, 0.44445], - "100": [0, 0.69444, 0.09483, 0, 0.51667], - "101": [0, 0.44444, 0.06778, 0, 0.44445], - "102": [0, 0.69444, 0.21705, 0, 0.30556], - "103": [0.19444, 0.44444, 0.10836, 0, 0.5], - "104": [0, 0.69444, 0.01778, 0, 0.51667], - "105": [0, 0.67937, 0.09718, 0, 0.23889], - "106": [0.19444, 0.67937, 0.09162, 0, 0.26667], - "107": [0, 0.69444, 0.08336, 0, 0.48889], - "108": [0, 0.69444, 0.09483, 0, 0.23889], - "109": [0, 0.44444, 0.01778, 0, 0.79445], - "110": [0, 0.44444, 0.01778, 0, 0.51667], - "111": [0, 0.44444, 0.06613, 0, 0.5], - "112": [0.19444, 0.44444, 0.0389, 0, 0.51667], - "113": [0.19444, 0.44444, 0.04169, 0, 0.51667], - "114": [0, 0.44444, 0.10836, 0, 0.34167], - "115": [0, 0.44444, 0.0778, 0, 0.38333], - "116": [0, 0.57143, 0.07225, 0, 0.36111], - "117": [0, 0.44444, 0.04169, 0, 0.51667], - "118": [0, 0.44444, 0.10836, 0, 0.46111], - "119": [0, 0.44444, 0.10836, 0, 0.68334], - "120": [0, 0.44444, 0.09169, 0, 0.46111], - "121": [0.19444, 0.44444, 0.10836, 0, 0.46111], - "122": [0, 0.44444, 0.08752, 0, 0.43472], - "126": [0.35, 0.32659, 0.08826, 0, 0.5], - "160": [0, 0, 0, 0, 0.25], - "168": [0, 0.67937, 0.06385, 0, 0.5], - "176": [0, 0.69444, 0, 0, 0.73752], - "184": [0.17014, 0, 0, 0, 0.44445], - "305": [0, 0.44444, 0.04169, 0, 0.23889], - "567": [0.19444, 0.44444, 0.04169, 0, 0.26667], - "710": [0, 0.69444, 0.0799, 0, 0.5], - "711": [0, 0.63194, 0.08432, 0, 0.5], - "713": [0, 0.60889, 0.08776, 0, 0.5], - "714": [0, 0.69444, 0.09205, 0, 0.5], - "715": [0, 0.69444, 0, 0, 0.5], - "728": [0, 0.69444, 0.09483, 0, 0.5], - "729": [0, 0.67937, 0.07774, 0, 0.27778], - "730": [0, 0.69444, 0, 0, 0.73752], - "732": [0, 0.67659, 0.08826, 0, 0.5], - "733": [0, 0.69444, 0.09205, 0, 0.5], - "915": [0, 0.69444, 0.13372, 0, 0.54167], - "916": [0, 0.69444, 0, 0, 0.83334], - "920": [0, 0.69444, 0.07555, 0, 0.77778], - "923": [0, 0.69444, 0, 0, 0.61111], - "926": [0, 0.69444, 0.12816, 0, 0.66667], - "928": [0, 0.69444, 0.08094, 0, 0.70834], - "931": [0, 0.69444, 0.11983, 0, 0.72222], - "933": [0, 0.69444, 0.09031, 0, 0.77778], - "934": [0, 0.69444, 0.04603, 0, 0.72222], - "936": [0, 0.69444, 0.09031, 0, 0.77778], - "937": [0, 0.69444, 0.08293, 0, 0.72222], - "8211": [0, 0.44444, 0.08616, 0, 0.5], - "8212": [0, 0.44444, 0.08616, 0, 1.0], - "8216": [0, 0.69444, 0.07816, 0, 0.27778], - "8217": [0, 0.69444, 0.07816, 0, 0.27778], - "8220": [0, 0.69444, 0.14205, 0, 0.5], - "8221": [0, 0.69444, 0.00316, 0, 0.5] - }, - "SansSerif-Regular": { - "32": [0, 0, 0, 0, 0.25], - "33": [0, 0.69444, 0, 0, 0.31945], - "34": [0, 0.69444, 0, 0, 0.5], - "35": [0.19444, 0.69444, 0, 0, 0.83334], - "36": [0.05556, 0.75, 0, 0, 0.5], - "37": [0.05556, 0.75, 0, 0, 0.83334], - "38": [0, 0.69444, 0, 0, 0.75834], - "39": [0, 0.69444, 0, 0, 0.27778], - "40": [0.25, 0.75, 0, 0, 0.38889], - "41": [0.25, 0.75, 0, 0, 0.38889], - "42": [0, 0.75, 0, 0, 0.5], - "43": [0.08333, 0.58333, 0, 0, 0.77778], - "44": [0.125, 0.08333, 0, 0, 0.27778], - "45": [0, 0.44444, 0, 0, 0.33333], - "46": [0, 0.08333, 0, 0, 0.27778], - "47": [0.25, 0.75, 0, 0, 0.5], - "48": [0, 0.65556, 0, 0, 0.5], - "49": [0, 0.65556, 0, 0, 0.5], - "50": [0, 0.65556, 0, 0, 0.5], - "51": [0, 0.65556, 0, 0, 0.5], - "52": [0, 0.65556, 0, 0, 0.5], - "53": [0, 0.65556, 0, 0, 0.5], - "54": [0, 0.65556, 0, 0, 0.5], - "55": [0, 0.65556, 0, 0, 0.5], - "56": [0, 0.65556, 0, 0, 0.5], - "57": [0, 0.65556, 0, 0, 0.5], - "58": [0, 0.44444, 0, 0, 0.27778], - "59": [0.125, 0.44444, 0, 0, 0.27778], - "61": [-0.13, 0.37, 0, 0, 0.77778], - "63": [0, 0.69444, 0, 0, 0.47222], - "64": [0, 0.69444, 0, 0, 0.66667], - "65": [0, 0.69444, 0, 0, 0.66667], - "66": [0, 0.69444, 0, 0, 0.66667], - "67": [0, 0.69444, 0, 0, 0.63889], - "68": [0, 0.69444, 0, 0, 0.72223], - "69": [0, 0.69444, 0, 0, 0.59722], - "70": [0, 0.69444, 0, 0, 0.56945], - "71": [0, 0.69444, 0, 0, 0.66667], - "72": [0, 0.69444, 0, 0, 0.70834], - "73": [0, 0.69444, 0, 0, 0.27778], - "74": [0, 0.69444, 0, 0, 0.47222], - "75": [0, 0.69444, 0, 0, 0.69445], - "76": [0, 0.69444, 0, 0, 0.54167], - "77": [0, 0.69444, 0, 0, 0.875], - "78": [0, 0.69444, 0, 0, 0.70834], - "79": [0, 0.69444, 0, 0, 0.73611], - "80": [0, 0.69444, 0, 0, 0.63889], - "81": [0.125, 0.69444, 0, 0, 0.73611], - "82": [0, 0.69444, 0, 0, 0.64584], - "83": [0, 0.69444, 0, 0, 0.55556], - "84": [0, 0.69444, 0, 0, 0.68056], - "85": [0, 0.69444, 0, 0, 0.6875], - "86": [0, 0.69444, 0.01389, 0, 0.66667], - "87": [0, 0.69444, 0.01389, 0, 0.94445], - "88": [0, 0.69444, 0, 0, 0.66667], - "89": [0, 0.69444, 0.025, 0, 0.66667], - "90": [0, 0.69444, 0, 0, 0.61111], - "91": [0.25, 0.75, 0, 0, 0.28889], - "93": [0.25, 0.75, 0, 0, 0.28889], - "94": [0, 0.69444, 0, 0, 0.5], - "95": [0.35, 0.09444, 0.02778, 0, 0.5], - "97": [0, 0.44444, 0, 0, 0.48056], - "98": [0, 0.69444, 0, 0, 0.51667], - "99": [0, 0.44444, 0, 0, 0.44445], - "100": [0, 0.69444, 0, 0, 0.51667], - "101": [0, 0.44444, 0, 0, 0.44445], - "102": [0, 0.69444, 0.06944, 0, 0.30556], - "103": [0.19444, 0.44444, 0.01389, 0, 0.5], - "104": [0, 0.69444, 0, 0, 0.51667], - "105": [0, 0.67937, 0, 0, 0.23889], - "106": [0.19444, 0.67937, 0, 0, 0.26667], - "107": [0, 0.69444, 0, 0, 0.48889], - "108": [0, 0.69444, 0, 0, 0.23889], - "109": [0, 0.44444, 0, 0, 0.79445], - "110": [0, 0.44444, 0, 0, 0.51667], - "111": [0, 0.44444, 0, 0, 0.5], - "112": [0.19444, 0.44444, 0, 0, 0.51667], - "113": [0.19444, 0.44444, 0, 0, 0.51667], - "114": [0, 0.44444, 0.01389, 0, 0.34167], - "115": [0, 0.44444, 0, 0, 0.38333], - "116": [0, 0.57143, 0, 0, 0.36111], - "117": [0, 0.44444, 0, 0, 0.51667], - "118": [0, 0.44444, 0.01389, 0, 0.46111], - "119": [0, 0.44444, 0.01389, 0, 0.68334], - "120": [0, 0.44444, 0, 0, 0.46111], - "121": [0.19444, 0.44444, 0.01389, 0, 0.46111], - "122": [0, 0.44444, 0, 0, 0.43472], - "126": [0.35, 0.32659, 0, 0, 0.5], - "160": [0, 0, 0, 0, 0.25], - "168": [0, 0.67937, 0, 0, 0.5], - "176": [0, 0.69444, 0, 0, 0.66667], - "184": [0.17014, 0, 0, 0, 0.44445], - "305": [0, 0.44444, 0, 0, 0.23889], - "567": [0.19444, 0.44444, 0, 0, 0.26667], - "710": [0, 0.69444, 0, 0, 0.5], - "711": [0, 0.63194, 0, 0, 0.5], - "713": [0, 0.60889, 0, 0, 0.5], - "714": [0, 0.69444, 0, 0, 0.5], - "715": [0, 0.69444, 0, 0, 0.5], - "728": [0, 0.69444, 0, 0, 0.5], - "729": [0, 0.67937, 0, 0, 0.27778], - "730": [0, 0.69444, 0, 0, 0.66667], - "732": [0, 0.67659, 0, 0, 0.5], - "733": [0, 0.69444, 0, 0, 0.5], - "915": [0, 0.69444, 0, 0, 0.54167], - "916": [0, 0.69444, 0, 0, 0.83334], - "920": [0, 0.69444, 0, 0, 0.77778], - "923": [0, 0.69444, 0, 0, 0.61111], - "926": [0, 0.69444, 0, 0, 0.66667], - "928": [0, 0.69444, 0, 0, 0.70834], - "931": [0, 0.69444, 0, 0, 0.72222], - "933": [0, 0.69444, 0, 0, 0.77778], - "934": [0, 0.69444, 0, 0, 0.72222], - "936": [0, 0.69444, 0, 0, 0.77778], - "937": [0, 0.69444, 0, 0, 0.72222], - "8211": [0, 0.44444, 0.02778, 0, 0.5], - "8212": [0, 0.44444, 0.02778, 0, 1.0], - "8216": [0, 0.69444, 0, 0, 0.27778], - "8217": [0, 0.69444, 0, 0, 0.27778], - "8220": [0, 0.69444, 0, 0, 0.5], - "8221": [0, 0.69444, 0, 0, 0.5] - }, - "Script-Regular": { - "32": [0, 0, 0, 0, 0.25], - "65": [0, 0.7, 0.22925, 0, 0.80253], - "66": [0, 0.7, 0.04087, 0, 0.90757], - "67": [0, 0.7, 0.1689, 0, 0.66619], - "68": [0, 0.7, 0.09371, 0, 0.77443], - "69": [0, 0.7, 0.18583, 0, 0.56162], - "70": [0, 0.7, 0.13634, 0, 0.89544], - "71": [0, 0.7, 0.17322, 0, 0.60961], - "72": [0, 0.7, 0.29694, 0, 0.96919], - "73": [0, 0.7, 0.19189, 0, 0.80907], - "74": [0.27778, 0.7, 0.19189, 0, 1.05159], - "75": [0, 0.7, 0.31259, 0, 0.91364], - "76": [0, 0.7, 0.19189, 0, 0.87373], - "77": [0, 0.7, 0.15981, 0, 1.08031], - "78": [0, 0.7, 0.3525, 0, 0.9015], - "79": [0, 0.7, 0.08078, 0, 0.73787], - "80": [0, 0.7, 0.08078, 0, 1.01262], - "81": [0, 0.7, 0.03305, 0, 0.88282], - "82": [0, 0.7, 0.06259, 0, 0.85], - "83": [0, 0.7, 0.19189, 0, 0.86767], - "84": [0, 0.7, 0.29087, 0, 0.74697], - "85": [0, 0.7, 0.25815, 0, 0.79996], - "86": [0, 0.7, 0.27523, 0, 0.62204], - "87": [0, 0.7, 0.27523, 0, 0.80532], - "88": [0, 0.7, 0.26006, 0, 0.94445], - "89": [0, 0.7, 0.2939, 0, 0.70961], - "90": [0, 0.7, 0.24037, 0, 0.8212], - "160": [0, 0, 0, 0, 0.25] - }, - "Size1-Regular": { - "32": [0, 0, 0, 0, 0.25], - "40": [0.35001, 0.85, 0, 0, 0.45834], - "41": [0.35001, 0.85, 0, 0, 0.45834], - "47": [0.35001, 0.85, 0, 0, 0.57778], - "91": [0.35001, 0.85, 0, 0, 0.41667], - "92": [0.35001, 0.85, 0, 0, 0.57778], - "93": [0.35001, 0.85, 0, 0, 0.41667], - "123": [0.35001, 0.85, 0, 0, 0.58334], - "125": [0.35001, 0.85, 0, 0, 0.58334], - "160": [0, 0, 0, 0, 0.25], - "710": [0, 0.72222, 0, 0, 0.55556], - "732": [0, 0.72222, 0, 0, 0.55556], - "770": [0, 0.72222, 0, 0, 0.55556], - "771": [0, 0.72222, 0, 0, 0.55556], - "8214": [-0.00099, 0.601, 0, 0, 0.77778], - "8593": [1e-05, 0.6, 0, 0, 0.66667], - "8595": [1e-05, 0.6, 0, 0, 0.66667], - "8657": [1e-05, 0.6, 0, 0, 0.77778], - "8659": [1e-05, 0.6, 0, 0, 0.77778], - "8719": [0.25001, 0.75, 0, 0, 0.94445], - "8720": [0.25001, 0.75, 0, 0, 0.94445], - "8721": [0.25001, 0.75, 0, 0, 1.05556], - "8730": [0.35001, 0.85, 0, 0, 1.0], - "8739": [-0.00599, 0.606, 0, 0, 0.33333], - "8741": [-0.00599, 0.606, 0, 0, 0.55556], - "8747": [0.30612, 0.805, 0.19445, 0, 0.47222], - "8748": [0.306, 0.805, 0.19445, 0, 0.47222], - "8749": [0.306, 0.805, 0.19445, 0, 0.47222], - "8750": [0.30612, 0.805, 0.19445, 0, 0.47222], - "8896": [0.25001, 0.75, 0, 0, 0.83334], - "8897": [0.25001, 0.75, 0, 0, 0.83334], - "8898": [0.25001, 0.75, 0, 0, 0.83334], - "8899": [0.25001, 0.75, 0, 0, 0.83334], - "8968": [0.35001, 0.85, 0, 0, 0.47222], - "8969": [0.35001, 0.85, 0, 0, 0.47222], - "8970": [0.35001, 0.85, 0, 0, 0.47222], - "8971": [0.35001, 0.85, 0, 0, 0.47222], - "9168": [-0.00099, 0.601, 0, 0, 0.66667], - "10216": [0.35001, 0.85, 0, 0, 0.47222], - "10217": [0.35001, 0.85, 0, 0, 0.47222], - "10752": [0.25001, 0.75, 0, 0, 1.11111], - "10753": [0.25001, 0.75, 0, 0, 1.11111], - "10754": [0.25001, 0.75, 0, 0, 1.11111], - "10756": [0.25001, 0.75, 0, 0, 0.83334], - "10758": [0.25001, 0.75, 0, 0, 0.83334] - }, - "Size2-Regular": { - "32": [0, 0, 0, 0, 0.25], - "40": [0.65002, 1.15, 0, 0, 0.59722], - "41": [0.65002, 1.15, 0, 0, 0.59722], - "47": [0.65002, 1.15, 0, 0, 0.81111], - "91": [0.65002, 1.15, 0, 0, 0.47222], - "92": [0.65002, 1.15, 0, 0, 0.81111], - "93": [0.65002, 1.15, 0, 0, 0.47222], - "123": [0.65002, 1.15, 0, 0, 0.66667], - "125": [0.65002, 1.15, 0, 0, 0.66667], - "160": [0, 0, 0, 0, 0.25], - "710": [0, 0.75, 0, 0, 1.0], - "732": [0, 0.75, 0, 0, 1.0], - "770": [0, 0.75, 0, 0, 1.0], - "771": [0, 0.75, 0, 0, 1.0], - "8719": [0.55001, 1.05, 0, 0, 1.27778], - "8720": [0.55001, 1.05, 0, 0, 1.27778], - "8721": [0.55001, 1.05, 0, 0, 1.44445], - "8730": [0.65002, 1.15, 0, 0, 1.0], - "8747": [0.86225, 1.36, 0.44445, 0, 0.55556], - "8748": [0.862, 1.36, 0.44445, 0, 0.55556], - "8749": [0.862, 1.36, 0.44445, 0, 0.55556], - "8750": [0.86225, 1.36, 0.44445, 0, 0.55556], - "8896": [0.55001, 1.05, 0, 0, 1.11111], - "8897": [0.55001, 1.05, 0, 0, 1.11111], - "8898": [0.55001, 1.05, 0, 0, 1.11111], - "8899": [0.55001, 1.05, 0, 0, 1.11111], - "8968": [0.65002, 1.15, 0, 0, 0.52778], - "8969": [0.65002, 1.15, 0, 0, 0.52778], - "8970": [0.65002, 1.15, 0, 0, 0.52778], - "8971": [0.65002, 1.15, 0, 0, 0.52778], - "10216": [0.65002, 1.15, 0, 0, 0.61111], - "10217": [0.65002, 1.15, 0, 0, 0.61111], - "10752": [0.55001, 1.05, 0, 0, 1.51112], - "10753": [0.55001, 1.05, 0, 0, 1.51112], - "10754": [0.55001, 1.05, 0, 0, 1.51112], - "10756": [0.55001, 1.05, 0, 0, 1.11111], - "10758": [0.55001, 1.05, 0, 0, 1.11111] - }, - "Size3-Regular": { - "32": [0, 0, 0, 0, 0.25], - "40": [0.95003, 1.45, 0, 0, 0.73611], - "41": [0.95003, 1.45, 0, 0, 0.73611], - "47": [0.95003, 1.45, 0, 0, 1.04445], - "91": [0.95003, 1.45, 0, 0, 0.52778], - "92": [0.95003, 1.45, 0, 0, 1.04445], - "93": [0.95003, 1.45, 0, 0, 0.52778], - "123": [0.95003, 1.45, 0, 0, 0.75], - "125": [0.95003, 1.45, 0, 0, 0.75], - "160": [0, 0, 0, 0, 0.25], - "710": [0, 0.75, 0, 0, 1.44445], - "732": [0, 0.75, 0, 0, 1.44445], - "770": [0, 0.75, 0, 0, 1.44445], - "771": [0, 0.75, 0, 0, 1.44445], - "8730": [0.95003, 1.45, 0, 0, 1.0], - "8968": [0.95003, 1.45, 0, 0, 0.58334], - "8969": [0.95003, 1.45, 0, 0, 0.58334], - "8970": [0.95003, 1.45, 0, 0, 0.58334], - "8971": [0.95003, 1.45, 0, 0, 0.58334], - "10216": [0.95003, 1.45, 0, 0, 0.75], - "10217": [0.95003, 1.45, 0, 0, 0.75] - }, - "Size4-Regular": { - "32": [0, 0, 0, 0, 0.25], - "40": [1.25003, 1.75, 0, 0, 0.79167], - "41": [1.25003, 1.75, 0, 0, 0.79167], - "47": [1.25003, 1.75, 0, 0, 1.27778], - "91": [1.25003, 1.75, 0, 0, 0.58334], - "92": [1.25003, 1.75, 0, 0, 1.27778], - "93": [1.25003, 1.75, 0, 0, 0.58334], - "123": [1.25003, 1.75, 0, 0, 0.80556], - "125": [1.25003, 1.75, 0, 0, 0.80556], - "160": [0, 0, 0, 0, 0.25], - "710": [0, 0.825, 0, 0, 1.8889], - "732": [0, 0.825, 0, 0, 1.8889], - "770": [0, 0.825, 0, 0, 1.8889], - "771": [0, 0.825, 0, 0, 1.8889], - "8730": [1.25003, 1.75, 0, 0, 1.0], - "8968": [1.25003, 1.75, 0, 0, 0.63889], - "8969": [1.25003, 1.75, 0, 0, 0.63889], - "8970": [1.25003, 1.75, 0, 0, 0.63889], - "8971": [1.25003, 1.75, 0, 0, 0.63889], - "9115": [0.64502, 1.155, 0, 0, 0.875], - "9116": [1e-05, 0.6, 0, 0, 0.875], - "9117": [0.64502, 1.155, 0, 0, 0.875], - "9118": [0.64502, 1.155, 0, 0, 0.875], - "9119": [1e-05, 0.6, 0, 0, 0.875], - "9120": [0.64502, 1.155, 0, 0, 0.875], - "9121": [0.64502, 1.155, 0, 0, 0.66667], - "9122": [-0.00099, 0.601, 0, 0, 0.66667], - "9123": [0.64502, 1.155, 0, 0, 0.66667], - "9124": [0.64502, 1.155, 0, 0, 0.66667], - "9125": [-0.00099, 0.601, 0, 0, 0.66667], - "9126": [0.64502, 1.155, 0, 0, 0.66667], - "9127": [1e-05, 0.9, 0, 0, 0.88889], - "9128": [0.65002, 1.15, 0, 0, 0.88889], - "9129": [0.90001, 0, 0, 0, 0.88889], - "9130": [0, 0.3, 0, 0, 0.88889], - "9131": [1e-05, 0.9, 0, 0, 0.88889], - "9132": [0.65002, 1.15, 0, 0, 0.88889], - "9133": [0.90001, 0, 0, 0, 0.88889], - "9143": [0.88502, 0.915, 0, 0, 1.05556], - "10216": [1.25003, 1.75, 0, 0, 0.80556], - "10217": [1.25003, 1.75, 0, 0, 0.80556], - "57344": [-0.00499, 0.605, 0, 0, 1.05556], - "57345": [-0.00499, 0.605, 0, 0, 1.05556], - "57680": [0, 0.12, 0, 0, 0.45], - "57681": [0, 0.12, 0, 0, 0.45], - "57682": [0, 0.12, 0, 0, 0.45], - "57683": [0, 0.12, 0, 0, 0.45] - }, - "Typewriter-Regular": { - "32": [0, 0, 0, 0, 0.525], - "33": [0, 0.61111, 0, 0, 0.525], - "34": [0, 0.61111, 0, 0, 0.525], - "35": [0, 0.61111, 0, 0, 0.525], - "36": [0.08333, 0.69444, 0, 0, 0.525], - "37": [0.08333, 0.69444, 0, 0, 0.525], - "38": [0, 0.61111, 0, 0, 0.525], - "39": [0, 0.61111, 0, 0, 0.525], - "40": [0.08333, 0.69444, 0, 0, 0.525], - "41": [0.08333, 0.69444, 0, 0, 0.525], - "42": [0, 0.52083, 0, 0, 0.525], - "43": [-0.08056, 0.53055, 0, 0, 0.525], - "44": [0.13889, 0.125, 0, 0, 0.525], - "45": [-0.08056, 0.53055, 0, 0, 0.525], - "46": [0, 0.125, 0, 0, 0.525], - "47": [0.08333, 0.69444, 0, 0, 0.525], - "48": [0, 0.61111, 0, 0, 0.525], - "49": [0, 0.61111, 0, 0, 0.525], - "50": [0, 0.61111, 0, 0, 0.525], - "51": [0, 0.61111, 0, 0, 0.525], - "52": [0, 0.61111, 0, 0, 0.525], - "53": [0, 0.61111, 0, 0, 0.525], - "54": [0, 0.61111, 0, 0, 0.525], - "55": [0, 0.61111, 0, 0, 0.525], - "56": [0, 0.61111, 0, 0, 0.525], - "57": [0, 0.61111, 0, 0, 0.525], - "58": [0, 0.43056, 0, 0, 0.525], - "59": [0.13889, 0.43056, 0, 0, 0.525], - "60": [-0.05556, 0.55556, 0, 0, 0.525], - "61": [-0.19549, 0.41562, 0, 0, 0.525], - "62": [-0.05556, 0.55556, 0, 0, 0.525], - "63": [0, 0.61111, 0, 0, 0.525], - "64": [0, 0.61111, 0, 0, 0.525], - "65": [0, 0.61111, 0, 0, 0.525], - "66": [0, 0.61111, 0, 0, 0.525], - "67": [0, 0.61111, 0, 0, 0.525], - "68": [0, 0.61111, 0, 0, 0.525], - "69": [0, 0.61111, 0, 0, 0.525], - "70": [0, 0.61111, 0, 0, 0.525], - "71": [0, 0.61111, 0, 0, 0.525], - "72": [0, 0.61111, 0, 0, 0.525], - "73": [0, 0.61111, 0, 0, 0.525], - "74": [0, 0.61111, 0, 0, 0.525], - "75": [0, 0.61111, 0, 0, 0.525], - "76": [0, 0.61111, 0, 0, 0.525], - "77": [0, 0.61111, 0, 0, 0.525], - "78": [0, 0.61111, 0, 0, 0.525], - "79": [0, 0.61111, 0, 0, 0.525], - "80": [0, 0.61111, 0, 0, 0.525], - "81": [0.13889, 0.61111, 0, 0, 0.525], - "82": [0, 0.61111, 0, 0, 0.525], - "83": [0, 0.61111, 0, 0, 0.525], - "84": [0, 0.61111, 0, 0, 0.525], - "85": [0, 0.61111, 0, 0, 0.525], - "86": [0, 0.61111, 0, 0, 0.525], - "87": [0, 0.61111, 0, 0, 0.525], - "88": [0, 0.61111, 0, 0, 0.525], - "89": [0, 0.61111, 0, 0, 0.525], - "90": [0, 0.61111, 0, 0, 0.525], - "91": [0.08333, 0.69444, 0, 0, 0.525], - "92": [0.08333, 0.69444, 0, 0, 0.525], - "93": [0.08333, 0.69444, 0, 0, 0.525], - "94": [0, 0.61111, 0, 0, 0.525], - "95": [0.09514, 0, 0, 0, 0.525], - "96": [0, 0.61111, 0, 0, 0.525], - "97": [0, 0.43056, 0, 0, 0.525], - "98": [0, 0.61111, 0, 0, 0.525], - "99": [0, 0.43056, 0, 0, 0.525], - "100": [0, 0.61111, 0, 0, 0.525], - "101": [0, 0.43056, 0, 0, 0.525], - "102": [0, 0.61111, 0, 0, 0.525], - "103": [0.22222, 0.43056, 0, 0, 0.525], - "104": [0, 0.61111, 0, 0, 0.525], - "105": [0, 0.61111, 0, 0, 0.525], - "106": [0.22222, 0.61111, 0, 0, 0.525], - "107": [0, 0.61111, 0, 0, 0.525], - "108": [0, 0.61111, 0, 0, 0.525], - "109": [0, 0.43056, 0, 0, 0.525], - "110": [0, 0.43056, 0, 0, 0.525], - "111": [0, 0.43056, 0, 0, 0.525], - "112": [0.22222, 0.43056, 0, 0, 0.525], - "113": [0.22222, 0.43056, 0, 0, 0.525], - "114": [0, 0.43056, 0, 0, 0.525], - "115": [0, 0.43056, 0, 0, 0.525], - "116": [0, 0.55358, 0, 0, 0.525], - "117": [0, 0.43056, 0, 0, 0.525], - "118": [0, 0.43056, 0, 0, 0.525], - "119": [0, 0.43056, 0, 0, 0.525], - "120": [0, 0.43056, 0, 0, 0.525], - "121": [0.22222, 0.43056, 0, 0, 0.525], - "122": [0, 0.43056, 0, 0, 0.525], - "123": [0.08333, 0.69444, 0, 0, 0.525], - "124": [0.08333, 0.69444, 0, 0, 0.525], - "125": [0.08333, 0.69444, 0, 0, 0.525], - "126": [0, 0.61111, 0, 0, 0.525], - "127": [0, 0.61111, 0, 0, 0.525], - "160": [0, 0, 0, 0, 0.525], - "176": [0, 0.61111, 0, 0, 0.525], - "184": [0.19445, 0, 0, 0, 0.525], - "305": [0, 0.43056, 0, 0, 0.525], - "567": [0.22222, 0.43056, 0, 0, 0.525], - "711": [0, 0.56597, 0, 0, 0.525], - "713": [0, 0.56555, 0, 0, 0.525], - "714": [0, 0.61111, 0, 0, 0.525], - "715": [0, 0.61111, 0, 0, 0.525], - "728": [0, 0.61111, 0, 0, 0.525], - "730": [0, 0.61111, 0, 0, 0.525], - "770": [0, 0.61111, 0, 0, 0.525], - "771": [0, 0.61111, 0, 0, 0.525], - "776": [0, 0.61111, 0, 0, 0.525], - "915": [0, 0.61111, 0, 0, 0.525], - "916": [0, 0.61111, 0, 0, 0.525], - "920": [0, 0.61111, 0, 0, 0.525], - "923": [0, 0.61111, 0, 0, 0.525], - "926": [0, 0.61111, 0, 0, 0.525], - "928": [0, 0.61111, 0, 0, 0.525], - "931": [0, 0.61111, 0, 0, 0.525], - "933": [0, 0.61111, 0, 0, 0.525], - "934": [0, 0.61111, 0, 0, 0.525], - "936": [0, 0.61111, 0, 0, 0.525], - "937": [0, 0.61111, 0, 0, 0.525], - "8216": [0, 0.61111, 0, 0, 0.525], - "8217": [0, 0.61111, 0, 0, 0.525], - "8242": [0, 0.61111, 0, 0, 0.525], - "9251": [0.11111, 0.21944, 0, 0, 0.525] - } -}; - -/** - * This file contains metrics regarding fonts and individual symbols. The sigma - * and xi variables, as well as the metricMap map contain data extracted from - * TeX, TeX font metrics, and the TTF files. These data are then exposed via the - * `metrics` variable and the getCharacterMetrics function. - */ -// In TeX, there are actually three sets of dimensions, one for each of -// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4: -// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are -// provided in the arrays below, in that order. -// -// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively. -// This was determined by running the following script: -// -// latex -interaction=nonstopmode \ -// '\documentclass{article}\usepackage{amsmath}\begin{document}' \ -// '$a$ \expandafter\show\the\textfont2' \ -// '\expandafter\show\the\scriptfont2' \ -// '\expandafter\show\the\scriptscriptfont2' \ -// '\stop' -// -// The metrics themselves were retrieved using the following commands: -// -// tftopl cmsy10 -// tftopl cmsy7 -// tftopl cmsy5 -// -// The output of each of these commands is quite lengthy. The only part we -// care about is the FONTDIMEN section. Each value is measured in EMs. -var sigmasAndXis = { - slant: [0.250, 0.250, 0.250], - // sigma1 - space: [0.000, 0.000, 0.000], - // sigma2 - stretch: [0.000, 0.000, 0.000], - // sigma3 - shrink: [0.000, 0.000, 0.000], - // sigma4 - xHeight: [0.431, 0.431, 0.431], - // sigma5 - quad: [1.000, 1.171, 1.472], - // sigma6 - extraSpace: [0.000, 0.000, 0.000], - // sigma7 - num1: [0.677, 0.732, 0.925], - // sigma8 - num2: [0.394, 0.384, 0.387], - // sigma9 - num3: [0.444, 0.471, 0.504], - // sigma10 - denom1: [0.686, 0.752, 1.025], - // sigma11 - denom2: [0.345, 0.344, 0.532], - // sigma12 - sup1: [0.413, 0.503, 0.504], - // sigma13 - sup2: [0.363, 0.431, 0.404], - // sigma14 - sup3: [0.289, 0.286, 0.294], - // sigma15 - sub1: [0.150, 0.143, 0.200], - // sigma16 - sub2: [0.247, 0.286, 0.400], - // sigma17 - supDrop: [0.386, 0.353, 0.494], - // sigma18 - subDrop: [0.050, 0.071, 0.100], - // sigma19 - delim1: [2.390, 1.700, 1.980], - // sigma20 - delim2: [1.010, 1.157, 1.420], - // sigma21 - axisHeight: [0.250, 0.250, 0.250], - // sigma22 - // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; - // they correspond to the font parameters of the extension fonts (family 3). - // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to - // match cmex7, we'd use cmex7.tfm values for script and scriptscript - // values. - defaultRuleThickness: [0.04, 0.049, 0.049], - // xi8; cmex7: 0.049 - bigOpSpacing1: [0.111, 0.111, 0.111], - // xi9 - bigOpSpacing2: [0.166, 0.166, 0.166], - // xi10 - bigOpSpacing3: [0.2, 0.2, 0.2], - // xi11 - bigOpSpacing4: [0.6, 0.611, 0.611], - // xi12; cmex7: 0.611 - bigOpSpacing5: [0.1, 0.143, 0.143], - // xi13; cmex7: 0.143 - // The \sqrt rule width is taken from the height of the surd character. - // Since we use the same font at all sizes, this thickness doesn't scale. - sqrtRuleThickness: [0.04, 0.04, 0.04], - // This value determines how large a pt is, for metrics which are defined - // in terms of pts. - // This value is also used in katex.less; if you change it make sure the - // values match. - ptPerEm: [10.0, 10.0, 10.0], - // The space between adjacent `|` columns in an array definition. From - // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. - doubleRuleSep: [0.2, 0.2, 0.2], - // The width of separator lines in {array} environments. From - // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm. - arrayRuleWidth: [0.04, 0.04, 0.04], - // Two values from LaTeX source2e: - fboxsep: [0.3, 0.3, 0.3], - // 3 pt / ptPerEm - fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm - -}; // This map contains a mapping from font name and character code to character -// should have Latin-1 and Cyrillic characters, but may not depending on the -// operating system. The metrics do not account for extra height from the -// accents. In the case of Cyrillic characters which have both ascenders and -// descenders we prefer approximations with ascenders, primarily to prevent -// the fraction bar or root line from intersecting the glyph. -// TODO(kevinb) allow union of multiple glyph metrics for better accuracy. - -var extraCharacterMap = { - // Latin-1 - 'Å': 'A', - 'Ð': 'D', - 'Þ': 'o', - 'å': 'a', - 'ð': 'd', - 'þ': 'o', - // Cyrillic - 'А': 'A', - 'Б': 'B', - 'В': 'B', - 'Г': 'F', - 'Д': 'A', - 'Е': 'E', - 'Ж': 'K', - 'З': '3', - 'И': 'N', - 'Й': 'N', - 'К': 'K', - 'Л': 'N', - 'М': 'M', - 'Н': 'H', - 'О': 'O', - 'П': 'N', - 'Р': 'P', - 'С': 'C', - 'Т': 'T', - 'У': 'y', - 'Ф': 'O', - 'Х': 'X', - 'Ц': 'U', - 'Ч': 'h', - 'Ш': 'W', - 'Щ': 'W', - 'Ъ': 'B', - 'Ы': 'X', - 'Ь': 'B', - 'Э': '3', - 'Ю': 'X', - 'Я': 'R', - 'а': 'a', - 'б': 'b', - 'в': 'a', - 'г': 'r', - 'д': 'y', - 'е': 'e', - 'ж': 'm', - 'з': 'e', - 'и': 'n', - 'й': 'n', - 'к': 'n', - 'л': 'n', - 'м': 'm', - 'н': 'n', - 'о': 'o', - 'п': 'n', - 'р': 'p', - 'с': 'c', - 'т': 'o', - 'у': 'y', - 'ф': 'b', - 'х': 'x', - 'ц': 'n', - 'ч': 'n', - 'ш': 'w', - 'щ': 'w', - 'ъ': 'a', - 'ы': 'm', - 'ь': 'a', - 'э': 'e', - 'ю': 'm', - 'я': 'r' -}; - -/** - * This function adds new font metrics to default metricMap - * It can also override existing metrics - */ -function setFontMetrics(fontName, metrics) { - fontMetricsData[fontName] = metrics; -} -/** - * This function is a convenience function for looking up information in the - * metricMap table. It takes a character as a string, and a font. - * - * Note: the `width` property may be undefined if fontMetricsData.js wasn't - * built using `Make extended_metrics`. - */ - -function getCharacterMetrics(character, font, mode) { - if (!fontMetricsData[font]) { - throw new Error("Font metrics not found for font: " + font + "."); - } - - var ch = character.charCodeAt(0); - var metrics = fontMetricsData[font][ch]; - - if (!metrics && character[0] in extraCharacterMap) { - ch = extraCharacterMap[character[0]].charCodeAt(0); - metrics = fontMetricsData[font][ch]; - } - - if (!metrics && mode === 'text') { - // We don't typically have font metrics for Asian scripts. - // But since we support them in text mode, we need to return - // some sort of metrics. - // So if the character is in a script we support but we - // don't have metrics for it, just use the metrics for - // the Latin capital letter M. This is close enough because - // we (currently) only care about the height of the glyph - // not its width. - if (supportedCodepoint(ch)) { - metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M' - } - } - - if (metrics) { - return { - depth: metrics[0], - height: metrics[1], - italic: metrics[2], - skew: metrics[3], - width: metrics[4] - }; - } -} -var fontMetricsBySizeIndex = {}; -/** - * Get the font metrics for a given size. - */ - -function getGlobalMetrics(size) { - var sizeIndex; - - if (size >= 5) { - sizeIndex = 0; - } else if (size >= 3) { - sizeIndex = 1; - } else { - sizeIndex = 2; - } - - if (!fontMetricsBySizeIndex[sizeIndex]) { - var metrics = fontMetricsBySizeIndex[sizeIndex] = { - cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18 - }; - - for (var key in sigmasAndXis) { - if (sigmasAndXis.hasOwnProperty(key)) { - metrics[key] = sigmasAndXis[key][sizeIndex]; - } - } - } - - return fontMetricsBySizeIndex[sizeIndex]; -} - -/** - * This file contains information about the options that the Parser carries - * around with it while parsing. Data is held in an `Options` object, and when - * recursing, a new `Options` object can be created with the `.with*` and - * `.reset` functions. - */ -var sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize]. -// The size mappings are taken from TeX with \normalsize=10pt. -[1, 1, 1], // size1: [5, 5, 5] \tiny -[2, 1, 1], // size2: [6, 5, 5] -[3, 1, 1], // size3: [7, 5, 5] \scriptsize -[4, 2, 1], // size4: [8, 6, 5] \footnotesize -[5, 2, 1], // size5: [9, 6, 5] \small -[6, 3, 1], // size6: [10, 7, 5] \normalsize -[7, 4, 2], // size7: [12, 8, 6] \large -[8, 6, 3], // size8: [14.4, 10, 7] \Large -[9, 7, 6], // size9: [17.28, 12, 10] \LARGE -[10, 8, 7], // size10: [20.74, 14.4, 12] \huge -[11, 10, 9] // size11: [24.88, 20.74, 17.28] \HUGE -]; -var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if -// you change size indexes, change that function. -0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; - -var sizeAtStyle = function sizeAtStyle(size, style) { - return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; -}; // In these types, "" (empty string) means "no change". - - -/** - * This is the main options class. It contains the current style, size, color, - * and font. - * - * Options objects should not be modified. To create a new Options with - * different properties, call a `.having*` method. - */ -class Options { - // A font family applies to a group of fonts (i.e. SansSerif), while a font - // represents a specific font (i.e. SansSerif Bold). - // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm - - /** - * The base size index. - */ - constructor(data) { - this.style = void 0; - this.color = void 0; - this.size = void 0; - this.textSize = void 0; - this.phantom = void 0; - this.font = void 0; - this.fontFamily = void 0; - this.fontWeight = void 0; - this.fontShape = void 0; - this.sizeMultiplier = void 0; - this.maxSize = void 0; - this.minRuleThickness = void 0; - this._fontMetrics = void 0; - this.style = data.style; - this.color = data.color; - this.size = data.size || Options.BASESIZE; - this.textSize = data.textSize || this.size; - this.phantom = !!data.phantom; - this.font = data.font || ""; - this.fontFamily = data.fontFamily || ""; - this.fontWeight = data.fontWeight || ''; - this.fontShape = data.fontShape || ''; - this.sizeMultiplier = sizeMultipliers[this.size - 1]; - this.maxSize = data.maxSize; - this.minRuleThickness = data.minRuleThickness; - this._fontMetrics = undefined; - } - /** - * Returns a new options object with the same properties as "this". Properties - * from "extension" will be copied to the new options object. - */ - - - extend(extension) { - var data = { - style: this.style, - size: this.size, - textSize: this.textSize, - color: this.color, - phantom: this.phantom, - font: this.font, - fontFamily: this.fontFamily, - fontWeight: this.fontWeight, - fontShape: this.fontShape, - maxSize: this.maxSize, - minRuleThickness: this.minRuleThickness - }; - - for (var key in extension) { - if (extension.hasOwnProperty(key)) { - data[key] = extension[key]; - } - } - - return new Options(data); - } - /** - * Return an options object with the given style. If `this.style === style`, - * returns `this`. - */ - - - havingStyle(style) { - if (this.style === style) { - return this; - } else { - return this.extend({ - style: style, - size: sizeAtStyle(this.textSize, style) - }); - } - } - /** - * Return an options object with a cramped version of the current style. If - * the current style is cramped, returns `this`. - */ - - - havingCrampedStyle() { - return this.havingStyle(this.style.cramp()); - } - /** - * Return an options object with the given size and in at least `\textstyle`. - * Returns `this` if appropriate. - */ - - - havingSize(size) { - if (this.size === size && this.textSize === size) { - return this; - } else { - return this.extend({ - style: this.style.text(), - size: size, - textSize: size, - sizeMultiplier: sizeMultipliers[size - 1] - }); - } - } - /** - * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, - * changes to at least `\textstyle`. - */ - - - havingBaseStyle(style) { - style = style || this.style.text(); - var wantSize = sizeAtStyle(Options.BASESIZE, style); - - if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { - return this; - } else { - return this.extend({ - style: style, - size: wantSize - }); - } - } - /** - * Remove the effect of sizing changes such as \Huge. - * Keep the effect of the current style, such as \scriptstyle. - */ - - - havingBaseSizing() { - var size; - - switch (this.style.id) { - case 4: - case 5: - size = 3; // normalsize in scriptstyle - - break; - - case 6: - case 7: - size = 1; // normalsize in scriptscriptstyle - - break; - - default: - size = 6; - // normalsize in textstyle or displaystyle - } - - return this.extend({ - style: this.style.text(), - size: size - }); - } - /** - * Create a new options object with the given color. - */ - - - withColor(color) { - return this.extend({ - color: color - }); - } - /** - * Create a new options object with "phantom" set to true. - */ - - - withPhantom() { - return this.extend({ - phantom: true - }); - } - /** - * Creates a new options object with the given math font or old text font. - * @type {[type]} - */ - - - withFont(font) { - return this.extend({ - font - }); - } - /** - * Create a new options objects with the given fontFamily. - */ - - - withTextFontFamily(fontFamily) { - return this.extend({ - fontFamily, - font: "" - }); - } - /** - * Creates a new options object with the given font weight - */ - - - withTextFontWeight(fontWeight) { - return this.extend({ - fontWeight, - font: "" - }); - } - /** - * Creates a new options object with the given font weight - */ - - - withTextFontShape(fontShape) { - return this.extend({ - fontShape, - font: "" - }); - } - /** - * Return the CSS sizing classes required to switch from enclosing options - * `oldOptions` to `this`. Returns an array of classes. - */ - - - sizingClasses(oldOptions) { - if (oldOptions.size !== this.size) { - return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; - } else { - return []; - } - } - /** - * Return the CSS sizing classes required to switch to the base size. Like - * `this.havingSize(BASESIZE).sizingClasses(this)`. - */ - - - baseSizingClasses() { - if (this.size !== Options.BASESIZE) { - return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; - } else { - return []; - } - } - /** - * Return the font metrics for this size. - */ - - - fontMetrics() { - if (!this._fontMetrics) { - this._fontMetrics = getGlobalMetrics(this.size); - } - - return this._fontMetrics; - } - /** - * Gets the CSS color of the current options object - */ - - - getColor() { - if (this.phantom) { - return "transparent"; - } else { - return this.color; - } - } - -} - -Options.BASESIZE = 6; - -/** - * This file does conversion between units. In particular, it provides - * calculateSize to convert other units into ems. - */ -// Thus, multiplying a length by this number converts the length from units -// into pts. Dividing the result by ptPerEm gives the number of ems -// *assuming* a font size of ptPerEm (normal size, normal style). - -var ptPerUnit = { - // https://en.wikibooks.org/wiki/LaTeX/Lengths and - // https://tex.stackexchange.com/a/8263 - "pt": 1, - // TeX point - "mm": 7227 / 2540, - // millimeter - "cm": 7227 / 254, - // centimeter - "in": 72.27, - // inch - "bp": 803 / 800, - // big (PostScript) points - "pc": 12, - // pica - "dd": 1238 / 1157, - // didot - "cc": 14856 / 1157, - // cicero (12 didot) - "nd": 685 / 642, - // new didot - "nc": 1370 / 107, - // new cicero (12 new didot) - "sp": 1 / 65536, - // scaled point (TeX's internal smallest unit) - // https://tex.stackexchange.com/a/41371 - "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX - -}; // Dictionary of relative units, for fast validity testing. - -var relativeUnit = { - "ex": true, - "em": true, - "mu": true -}; - -/** - * Determine whether the specified unit (either a string defining the unit - * or a "size" parse node containing a unit field) is valid. - */ -var validUnit = function validUnit(unit) { - if (typeof unit !== "string") { - unit = unit.unit; - } - - return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; -}; -/* - * Convert a "size" parse node (with numeric "number" and string "unit" fields, - * as parsed by functions.js argType "size") into a CSS em value for the - * current style/scale. `options` gives the current options. - */ - -var calculateSize = function calculateSize(sizeValue, options) { - var scale; - - if (sizeValue.unit in ptPerUnit) { - // Absolute units - scale = ptPerUnit[sizeValue.unit] // Convert unit to pt - / options.fontMetrics().ptPerEm // Convert pt to CSS em - / options.sizeMultiplier; // Unscale to make absolute units - } else if (sizeValue.unit === "mu") { - // `mu` units scale with scriptstyle/scriptscriptstyle. - scale = options.fontMetrics().cssEmPerMu; - } else { - // Other relative units always refer to the *textstyle* font - // in the current size. - var unitOptions; - - if (options.style.isTight()) { - // isTight() means current style is script/scriptscript. - unitOptions = options.havingStyle(options.style.text()); - } else { - unitOptions = options; - } // TODO: In TeX these units are relative to the quad of the current - // *text* font, e.g. cmr10. KaTeX instead uses values from the - // comparably-sized *Computer Modern symbol* font. At 10pt, these - // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; - // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. - // TeX \showlists shows a kern of 1.13889 * fontsize; - // KaTeX shows a kern of 1.171 * fontsize. - - - if (sizeValue.unit === "ex") { - scale = unitOptions.fontMetrics().xHeight; - } else if (sizeValue.unit === "em") { - scale = unitOptions.fontMetrics().quad; - } else { - throw new ParseError("Invalid unit: '" + sizeValue.unit + "'"); - } - - if (unitOptions !== options) { - scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; - } - } - - return Math.min(sizeValue.number * scale, options.maxSize); -}; -/** - * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See - * https://github.com/KaTeX/KaTeX/pull/2460. - */ - -var makeEm = function makeEm(n) { - return +n.toFixed(4) + "em"; -}; - -/** - * These objects store the data about the DOM nodes we create, as well as some - * extra data. They can then be transformed into real DOM nodes with the - * `toNode` function or HTML markup using `toMarkup`. They are useful for both - * storing extra properties on the nodes, as well as providing a way to easily - * work with the DOM. - * - * Similar functions for working with MathML nodes exist in mathMLTree.js. - * - * TODO: refactor `span` and `anchor` into common superclass when - * target environments support class inheritance - */ - -/** - * Create an HTML className based on a list of classes. In addition to joining - * with spaces, we also remove empty classes. - */ -var createClass = function createClass(classes) { - return classes.filter(cls => cls).join(" "); -}; - -var initNode = function initNode(classes, options, style) { - this.classes = classes || []; - this.attributes = {}; - this.height = 0; - this.depth = 0; - this.maxFontSize = 0; - this.style = style || {}; - - if (options) { - if (options.style.isTight()) { - this.classes.push("mtight"); - } - - var color = options.getColor(); - - if (color) { - this.style.color = color; - } - } -}; -/** - * Convert into an HTML node - */ - - -var toNode = function toNode(tagName) { - var node = document.createElement(tagName); // Apply the class - - node.className = createClass(this.classes); // Apply inline styles - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - // $FlowFixMe Flow doesn't seem to understand span.style's type. - node.style[style] = this.style[style]; - } - } // Apply attributes - - - for (var attr in this.attributes) { - if (this.attributes.hasOwnProperty(attr)) { - node.setAttribute(attr, this.attributes[attr]); - } - } // Append the children, also as HTML nodes - - - for (var i = 0; i < this.children.length; i++) { - node.appendChild(this.children[i].toNode()); - } - - return node; -}; -/** - * Convert into an HTML markup string - */ - - -var toMarkup = function toMarkup(tagName) { - var markup = "<" + tagName; // Add the class - - if (this.classes.length) { - markup += " class=\"" + utils.escape(createClass(this.classes)) + "\""; - } - - var styles = ""; // Add the styles, after hyphenation - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; - } - } - - if (styles) { - markup += " style=\"" + utils.escape(styles) + "\""; - } // Add the attributes - - - for (var attr in this.attributes) { - if (this.attributes.hasOwnProperty(attr)) { - markup += " " + attr + "=\"" + utils.escape(this.attributes[attr]) + "\""; - } - } - - markup += ">"; // Add the markup of the children, also as markup - - for (var i = 0; i < this.children.length; i++) { - markup += this.children[i].toMarkup(); - } - - markup += ""; - return markup; -}; // Making the type below exact with all optional fields doesn't work due to -// - https://github.com/facebook/flow/issues/4582 -// - https://github.com/facebook/flow/issues/5688 -// However, since *all* fields are optional, $Shape<> works as suggested in 5688 -// above. -// This type does not include all CSS properties. Additional properties should -// be added as needed. - - -/** - * This node represents a span node, with a className, a list of children, and - * an inline style. It also contains information about its height, depth, and - * maxFontSize. - * - * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan - * otherwise. This typesafety is important when HTML builders access a span's - * children. - */ -class Span { - constructor(classes, children, options, style) { - this.children = void 0; - this.attributes = void 0; - this.classes = void 0; - this.height = void 0; - this.depth = void 0; - this.width = void 0; - this.maxFontSize = void 0; - this.style = void 0; - initNode.call(this, classes, options, style); - this.children = children || []; - } - /** - * Sets an arbitrary attribute on the span. Warning: use this wisely. Not - * all browsers support attributes the same, and having too many custom - * attributes is probably bad. - */ - - - setAttribute(attribute, value) { - this.attributes[attribute] = value; - } - - hasClass(className) { - return utils.contains(this.classes, className); - } - - toNode() { - return toNode.call(this, "span"); - } - - toMarkup() { - return toMarkup.call(this, "span"); - } - -} -/** - * This node represents an anchor () element with a hyperlink. See `span` - * for further details. - */ - -class Anchor { - constructor(href, classes, children, options) { - this.children = void 0; - this.attributes = void 0; - this.classes = void 0; - this.height = void 0; - this.depth = void 0; - this.maxFontSize = void 0; - this.style = void 0; - initNode.call(this, classes, options); - this.children = children || []; - this.setAttribute('href', href); - } - - setAttribute(attribute, value) { - this.attributes[attribute] = value; - } - - hasClass(className) { - return utils.contains(this.classes, className); - } - - toNode() { - return toNode.call(this, "a"); - } - - toMarkup() { - return toMarkup.call(this, "a"); - } - -} -/** - * This node represents an image embed () element. - */ - -class Img { - constructor(src, alt, style) { - this.src = void 0; - this.alt = void 0; - this.classes = void 0; - this.height = void 0; - this.depth = void 0; - this.maxFontSize = void 0; - this.style = void 0; - this.alt = alt; - this.src = src; - this.classes = ["mord"]; - this.style = style; - } - - hasClass(className) { - return utils.contains(this.classes, className); - } - - toNode() { - var node = document.createElement("img"); - node.src = this.src; - node.alt = this.alt; - node.className = "mord"; // Apply inline styles - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - // $FlowFixMe - node.style[style] = this.style[style]; - } - } - - return node; - } - - toMarkup() { - var markup = "\"" 0) { - span = document.createElement("span"); - span.style.marginRight = makeEm(this.italic); - } - - if (this.classes.length > 0) { - span = span || document.createElement("span"); - span.className = createClass(this.classes); - } - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type. - - span.style[style] = this.style[style]; - } - } - - if (span) { - span.appendChild(node); - return span; - } else { - return node; - } - } - /** - * Creates markup for a symbol node. - */ - - - toMarkup() { - // TODO(alpert): More duplication than I'd like from - // span.prototype.toMarkup and symbolNode.prototype.toNode... - var needsSpan = false; - var markup = " 0) { - styles += "margin-right:" + this.italic + "em;"; - } - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; - } - } - - if (styles) { - needsSpan = true; - markup += " style=\"" + utils.escape(styles) + "\""; - } - - var escaped = utils.escape(this.text); - - if (needsSpan) { - markup += ">"; - markup += escaped; - markup += ""; - return markup; - } else { - return escaped; - } - } - -} -/** - * SVG nodes are used to render stretchy wide elements. - */ - -class SvgNode { - constructor(children, attributes) { - this.children = void 0; - this.attributes = void 0; - this.children = children || []; - this.attributes = attributes || {}; - } - - toNode() { - var svgNS = "http://www.w3.org/2000/svg"; - var node = document.createElementNS(svgNS, "svg"); // Apply attributes - - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - node.setAttribute(attr, this.attributes[attr]); - } - } - - for (var i = 0; i < this.children.length; i++) { - node.appendChild(this.children[i].toNode()); - } - - return node; - } - - toMarkup() { - var markup = ""; - } else { - return ""; - } - } - -} -class LineNode { - constructor(attributes) { - this.attributes = void 0; - this.attributes = attributes || {}; - } - - toNode() { - var svgNS = "http://www.w3.org/2000/svg"; - var node = document.createElementNS(svgNS, "line"); // Apply attributes - - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - node.setAttribute(attr, this.attributes[attr]); - } - } - - return node; - } - - toMarkup() { - var markup = " but got " + String(group) + "."); - } -} - -/** - * This file holds a list of all no-argument functions and single-character - * symbols (like 'a' or ';'). - * - * For each of the symbols, there are three properties they can have: - * - font (required): the font to be used for this symbol. Either "main" (the - normal font), or "ams" (the ams fonts). - * - group (required): the ParseNode group type the symbol should have (i.e. - "textord", "mathord", etc). - See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types - * - replace: the character that this symbol or function should be - * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi - * character in the main font). - * - * The outermost map in the table indicates what mode the symbols should be - * accepted in (e.g. "math" or "text"). - */ -// Some of these have a "-token" suffix since these are also used as `ParseNode` -// types for raw text tokens, and we want to avoid conflicts with higher-level -// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by -// looking up the `symbols` map. -var ATOMS = { - "bin": 1, - "close": 1, - "inner": 1, - "open": 1, - "punct": 1, - "rel": 1 -}; -var NON_ATOMS = { - "accent-token": 1, - "mathord": 1, - "op-token": 1, - "spacing": 1, - "textord": 1 -}; -var symbols = { - "math": {}, - "text": {} -}; -/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ - -function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) { - symbols[mode][name] = { - font, - group, - replace - }; - - if (acceptUnicodeChar && replace) { - symbols[mode][replace] = symbols[mode][name]; - } -} // Some abbreviations for commonly used strings. -// This helps minify the code, and also spotting typos using jshint. -// modes: - -var math = "math"; -var text = "text"; // fonts: - -var main = "main"; -var ams = "ams"; // groups: - -var accent = "accent-token"; -var bin = "bin"; -var close = "close"; -var inner = "inner"; -var mathord = "mathord"; -var op = "op-token"; -var open = "open"; -var punct = "punct"; -var rel = "rel"; -var spacing = "spacing"; -var textord = "textord"; // Now comes the symbol table -// Relation Symbols - -defineSymbol(math, main, rel, "\u2261", "\\equiv", true); -defineSymbol(math, main, rel, "\u227a", "\\prec", true); -defineSymbol(math, main, rel, "\u227b", "\\succ", true); -defineSymbol(math, main, rel, "\u223c", "\\sim", true); -defineSymbol(math, main, rel, "\u22a5", "\\perp"); -defineSymbol(math, main, rel, "\u2aaf", "\\preceq", true); -defineSymbol(math, main, rel, "\u2ab0", "\\succeq", true); -defineSymbol(math, main, rel, "\u2243", "\\simeq", true); -defineSymbol(math, main, rel, "\u2223", "\\mid", true); -defineSymbol(math, main, rel, "\u226a", "\\ll", true); -defineSymbol(math, main, rel, "\u226b", "\\gg", true); -defineSymbol(math, main, rel, "\u224d", "\\asymp", true); -defineSymbol(math, main, rel, "\u2225", "\\parallel"); -defineSymbol(math, main, rel, "\u22c8", "\\bowtie", true); -defineSymbol(math, main, rel, "\u2323", "\\smile", true); -defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true); -defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true); -defineSymbol(math, main, rel, "\u2250", "\\doteq", true); -defineSymbol(math, main, rel, "\u2322", "\\frown", true); -defineSymbol(math, main, rel, "\u220b", "\\ni", true); -defineSymbol(math, main, rel, "\u221d", "\\propto", true); -defineSymbol(math, main, rel, "\u22a2", "\\vdash", true); -defineSymbol(math, main, rel, "\u22a3", "\\dashv", true); -defineSymbol(math, main, rel, "\u220b", "\\owns"); // Punctuation - -defineSymbol(math, main, punct, "\u002e", "\\ldotp"); -defineSymbol(math, main, punct, "\u22c5", "\\cdotp"); // Misc Symbols - -defineSymbol(math, main, textord, "\u0023", "\\#"); -defineSymbol(text, main, textord, "\u0023", "\\#"); -defineSymbol(math, main, textord, "\u0026", "\\&"); -defineSymbol(text, main, textord, "\u0026", "\\&"); -defineSymbol(math, main, textord, "\u2135", "\\aleph", true); -defineSymbol(math, main, textord, "\u2200", "\\forall", true); -defineSymbol(math, main, textord, "\u210f", "\\hbar", true); -defineSymbol(math, main, textord, "\u2203", "\\exists", true); -defineSymbol(math, main, textord, "\u2207", "\\nabla", true); -defineSymbol(math, main, textord, "\u266d", "\\flat", true); -defineSymbol(math, main, textord, "\u2113", "\\ell", true); -defineSymbol(math, main, textord, "\u266e", "\\natural", true); -defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true); -defineSymbol(math, main, textord, "\u2118", "\\wp", true); -defineSymbol(math, main, textord, "\u266f", "\\sharp", true); -defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true); -defineSymbol(math, main, textord, "\u211c", "\\Re", true); -defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true); -defineSymbol(math, main, textord, "\u2111", "\\Im", true); -defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true); -defineSymbol(math, main, textord, "\u00a7", "\\S", true); -defineSymbol(text, main, textord, "\u00a7", "\\S"); -defineSymbol(math, main, textord, "\u00b6", "\\P", true); -defineSymbol(text, main, textord, "\u00b6", "\\P"); // Math and Text - -defineSymbol(math, main, textord, "\u2020", "\\dag"); -defineSymbol(text, main, textord, "\u2020", "\\dag"); -defineSymbol(text, main, textord, "\u2020", "\\textdagger"); -defineSymbol(math, main, textord, "\u2021", "\\ddag"); -defineSymbol(text, main, textord, "\u2021", "\\ddag"); -defineSymbol(text, main, textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters - -defineSymbol(math, main, close, "\u23b1", "\\rmoustache", true); -defineSymbol(math, main, open, "\u23b0", "\\lmoustache", true); -defineSymbol(math, main, close, "\u27ef", "\\rgroup", true); -defineSymbol(math, main, open, "\u27ee", "\\lgroup", true); // Binary Operators - -defineSymbol(math, main, bin, "\u2213", "\\mp", true); -defineSymbol(math, main, bin, "\u2296", "\\ominus", true); -defineSymbol(math, main, bin, "\u228e", "\\uplus", true); -defineSymbol(math, main, bin, "\u2293", "\\sqcap", true); -defineSymbol(math, main, bin, "\u2217", "\\ast"); -defineSymbol(math, main, bin, "\u2294", "\\sqcup", true); -defineSymbol(math, main, bin, "\u25ef", "\\bigcirc", true); -defineSymbol(math, main, bin, "\u2219", "\\bullet", true); -defineSymbol(math, main, bin, "\u2021", "\\ddagger"); -defineSymbol(math, main, bin, "\u2240", "\\wr", true); -defineSymbol(math, main, bin, "\u2a3f", "\\amalg"); -defineSymbol(math, main, bin, "\u0026", "\\And"); // from amsmath -// Arrow Symbols - -defineSymbol(math, main, rel, "\u27f5", "\\longleftarrow", true); -defineSymbol(math, main, rel, "\u21d0", "\\Leftarrow", true); -defineSymbol(math, main, rel, "\u27f8", "\\Longleftarrow", true); -defineSymbol(math, main, rel, "\u27f6", "\\longrightarrow", true); -defineSymbol(math, main, rel, "\u21d2", "\\Rightarrow", true); -defineSymbol(math, main, rel, "\u27f9", "\\Longrightarrow", true); -defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true); -defineSymbol(math, main, rel, "\u27f7", "\\longleftrightarrow", true); -defineSymbol(math, main, rel, "\u21d4", "\\Leftrightarrow", true); -defineSymbol(math, main, rel, "\u27fa", "\\Longleftrightarrow", true); -defineSymbol(math, main, rel, "\u21a6", "\\mapsto", true); -defineSymbol(math, main, rel, "\u27fc", "\\longmapsto", true); -defineSymbol(math, main, rel, "\u2197", "\\nearrow", true); -defineSymbol(math, main, rel, "\u21a9", "\\hookleftarrow", true); -defineSymbol(math, main, rel, "\u21aa", "\\hookrightarrow", true); -defineSymbol(math, main, rel, "\u2198", "\\searrow", true); -defineSymbol(math, main, rel, "\u21bc", "\\leftharpoonup", true); -defineSymbol(math, main, rel, "\u21c0", "\\rightharpoonup", true); -defineSymbol(math, main, rel, "\u2199", "\\swarrow", true); -defineSymbol(math, main, rel, "\u21bd", "\\leftharpoondown", true); -defineSymbol(math, main, rel, "\u21c1", "\\rightharpoondown", true); -defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true); -defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons", true); // AMS Negated Binary Relations - -defineSymbol(math, ams, rel, "\u226e", "\\nless", true); // Symbol names preceded by "@" each have a corresponding macro. - -defineSymbol(math, ams, rel, "\ue010", "\\@nleqslant"); -defineSymbol(math, ams, rel, "\ue011", "\\@nleqq"); -defineSymbol(math, ams, rel, "\u2a87", "\\lneq", true); -defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true); -defineSymbol(math, ams, rel, "\ue00c", "\\@lvertneqq"); -defineSymbol(math, ams, rel, "\u22e6", "\\lnsim", true); -defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox", true); -defineSymbol(math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym. - -defineSymbol(math, ams, rel, "\u22e0", "\\npreceq", true); -defineSymbol(math, ams, rel, "\u22e8", "\\precnsim", true); -defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox", true); -defineSymbol(math, ams, rel, "\u2241", "\\nsim", true); -defineSymbol(math, ams, rel, "\ue006", "\\@nshortmid"); -defineSymbol(math, ams, rel, "\u2224", "\\nmid", true); -defineSymbol(math, ams, rel, "\u22ac", "\\nvdash", true); -defineSymbol(math, ams, rel, "\u22ad", "\\nvDash", true); -defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft"); -defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq", true); -defineSymbol(math, ams, rel, "\u228a", "\\subsetneq", true); -defineSymbol(math, ams, rel, "\ue01a", "\\@varsubsetneq"); -defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq", true); -defineSymbol(math, ams, rel, "\ue017", "\\@varsubsetneqq"); -defineSymbol(math, ams, rel, "\u226f", "\\ngtr", true); -defineSymbol(math, ams, rel, "\ue00f", "\\@ngeqslant"); -defineSymbol(math, ams, rel, "\ue00e", "\\@ngeqq"); -defineSymbol(math, ams, rel, "\u2a88", "\\gneq", true); -defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true); -defineSymbol(math, ams, rel, "\ue00d", "\\@gvertneqq"); -defineSymbol(math, ams, rel, "\u22e7", "\\gnsim", true); -defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox", true); -defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym. - -defineSymbol(math, ams, rel, "\u22e1", "\\nsucceq", true); -defineSymbol(math, ams, rel, "\u22e9", "\\succnsim", true); -defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym. - -defineSymbol(math, ams, rel, "\u2246", "\\ncong", true); -defineSymbol(math, ams, rel, "\ue007", "\\@nshortparallel"); -defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true); -defineSymbol(math, ams, rel, "\u22af", "\\nVDash", true); -defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright"); -defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq", true); -defineSymbol(math, ams, rel, "\ue018", "\\@nsupseteqq"); -defineSymbol(math, ams, rel, "\u228b", "\\supsetneq", true); -defineSymbol(math, ams, rel, "\ue01b", "\\@varsupsetneq"); -defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq", true); -defineSymbol(math, ams, rel, "\ue019", "\\@varsupsetneqq"); -defineSymbol(math, ams, rel, "\u22ae", "\\nVdash", true); -defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq", true); -defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq", true); -defineSymbol(math, ams, rel, "\ue016", "\\@nsubseteqq"); -defineSymbol(math, ams, bin, "\u22b4", "\\unlhd"); -defineSymbol(math, ams, bin, "\u22b5", "\\unrhd"); // AMS Negated Arrows - -defineSymbol(math, ams, rel, "\u219a", "\\nleftarrow", true); -defineSymbol(math, ams, rel, "\u219b", "\\nrightarrow", true); -defineSymbol(math, ams, rel, "\u21cd", "\\nLeftarrow", true); -defineSymbol(math, ams, rel, "\u21cf", "\\nRightarrow", true); -defineSymbol(math, ams, rel, "\u21ae", "\\nleftrightarrow", true); -defineSymbol(math, ams, rel, "\u21ce", "\\nLeftrightarrow", true); // AMS Misc - -defineSymbol(math, ams, rel, "\u25b3", "\\vartriangle"); -defineSymbol(math, ams, textord, "\u210f", "\\hslash"); -defineSymbol(math, ams, textord, "\u25bd", "\\triangledown"); -defineSymbol(math, ams, textord, "\u25ca", "\\lozenge"); -defineSymbol(math, ams, textord, "\u24c8", "\\circledS"); -defineSymbol(math, ams, textord, "\u00ae", "\\circledR"); -defineSymbol(text, ams, textord, "\u00ae", "\\circledR"); -defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true); -defineSymbol(math, ams, textord, "\u2204", "\\nexists"); -defineSymbol(math, ams, textord, "\u2127", "\\mho"); -defineSymbol(math, ams, textord, "\u2132", "\\Finv", true); -defineSymbol(math, ams, textord, "\u2141", "\\Game", true); -defineSymbol(math, ams, textord, "\u2035", "\\backprime"); -defineSymbol(math, ams, textord, "\u25b2", "\\blacktriangle"); -defineSymbol(math, ams, textord, "\u25bc", "\\blacktriangledown"); -defineSymbol(math, ams, textord, "\u25a0", "\\blacksquare"); -defineSymbol(math, ams, textord, "\u29eb", "\\blacklozenge"); -defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); -defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true); -defineSymbol(math, ams, textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 to \matheth. We map to AMS function \eth - -defineSymbol(math, ams, textord, "\u00f0", "\\eth", true); -defineSymbol(text, main, textord, "\u00f0", "\u00f0"); -defineSymbol(math, ams, textord, "\u2571", "\\diagup"); -defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); -defineSymbol(math, ams, textord, "\u25a1", "\\square"); -defineSymbol(math, ams, textord, "\u25a1", "\\Box"); -defineSymbol(math, ams, textord, "\u25ca", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen - -defineSymbol(math, ams, textord, "\u00a5", "\\yen", true); -defineSymbol(text, ams, textord, "\u00a5", "\\yen", true); -defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true); -defineSymbol(text, ams, textord, "\u2713", "\\checkmark"); // AMS Hebrew - -defineSymbol(math, ams, textord, "\u2136", "\\beth", true); -defineSymbol(math, ams, textord, "\u2138", "\\daleth", true); -defineSymbol(math, ams, textord, "\u2137", "\\gimel", true); // AMS Greek - -defineSymbol(math, ams, textord, "\u03dd", "\\digamma", true); -defineSymbol(math, ams, textord, "\u03f0", "\\varkappa"); // AMS Delimiters - -defineSymbol(math, ams, open, "\u250c", "\\@ulcorner", true); -defineSymbol(math, ams, close, "\u2510", "\\@urcorner", true); -defineSymbol(math, ams, open, "\u2514", "\\@llcorner", true); -defineSymbol(math, ams, close, "\u2518", "\\@lrcorner", true); // AMS Binary Relations - -defineSymbol(math, ams, rel, "\u2266", "\\leqq", true); -defineSymbol(math, ams, rel, "\u2a7d", "\\leqslant", true); -defineSymbol(math, ams, rel, "\u2a95", "\\eqslantless", true); -defineSymbol(math, ams, rel, "\u2272", "\\lesssim", true); -defineSymbol(math, ams, rel, "\u2a85", "\\lessapprox", true); -defineSymbol(math, ams, rel, "\u224a", "\\approxeq", true); -defineSymbol(math, ams, bin, "\u22d6", "\\lessdot"); -defineSymbol(math, ams, rel, "\u22d8", "\\lll", true); -defineSymbol(math, ams, rel, "\u2276", "\\lessgtr", true); -defineSymbol(math, ams, rel, "\u22da", "\\lesseqgtr", true); -defineSymbol(math, ams, rel, "\u2a8b", "\\lesseqqgtr", true); -defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); -defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true); -defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true); -defineSymbol(math, ams, rel, "\u223d", "\\backsim", true); -defineSymbol(math, ams, rel, "\u22cd", "\\backsimeq", true); -defineSymbol(math, ams, rel, "\u2ac5", "\\subseteqq", true); -defineSymbol(math, ams, rel, "\u22d0", "\\Subset", true); -defineSymbol(math, ams, rel, "\u228f", "\\sqsubset", true); -defineSymbol(math, ams, rel, "\u227c", "\\preccurlyeq", true); -defineSymbol(math, ams, rel, "\u22de", "\\curlyeqprec", true); -defineSymbol(math, ams, rel, "\u227e", "\\precsim", true); -defineSymbol(math, ams, rel, "\u2ab7", "\\precapprox", true); -defineSymbol(math, ams, rel, "\u22b2", "\\vartriangleleft"); -defineSymbol(math, ams, rel, "\u22b4", "\\trianglelefteq"); -defineSymbol(math, ams, rel, "\u22a8", "\\vDash", true); -defineSymbol(math, ams, rel, "\u22aa", "\\Vvdash", true); -defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); -defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); -defineSymbol(math, ams, rel, "\u224f", "\\bumpeq", true); -defineSymbol(math, ams, rel, "\u224e", "\\Bumpeq", true); -defineSymbol(math, ams, rel, "\u2267", "\\geqq", true); -defineSymbol(math, ams, rel, "\u2a7e", "\\geqslant", true); -defineSymbol(math, ams, rel, "\u2a96", "\\eqslantgtr", true); -defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true); -defineSymbol(math, ams, rel, "\u2a86", "\\gtrapprox", true); -defineSymbol(math, ams, bin, "\u22d7", "\\gtrdot"); -defineSymbol(math, ams, rel, "\u22d9", "\\ggg", true); -defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true); -defineSymbol(math, ams, rel, "\u22db", "\\gtreqless", true); -defineSymbol(math, ams, rel, "\u2a8c", "\\gtreqqless", true); -defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true); -defineSymbol(math, ams, rel, "\u2257", "\\circeq", true); -defineSymbol(math, ams, rel, "\u225c", "\\triangleq", true); -defineSymbol(math, ams, rel, "\u223c", "\\thicksim"); -defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); -defineSymbol(math, ams, rel, "\u2ac6", "\\supseteqq", true); -defineSymbol(math, ams, rel, "\u22d1", "\\Supset", true); -defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true); -defineSymbol(math, ams, rel, "\u227d", "\\succcurlyeq", true); -defineSymbol(math, ams, rel, "\u22df", "\\curlyeqsucc", true); -defineSymbol(math, ams, rel, "\u227f", "\\succsim", true); -defineSymbol(math, ams, rel, "\u2ab8", "\\succapprox", true); -defineSymbol(math, ams, rel, "\u22b3", "\\vartriangleright"); -defineSymbol(math, ams, rel, "\u22b5", "\\trianglerighteq"); -defineSymbol(math, ams, rel, "\u22a9", "\\Vdash", true); -defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); -defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); -defineSymbol(math, ams, rel, "\u226c", "\\between", true); -defineSymbol(math, ams, rel, "\u22d4", "\\pitchfork", true); -defineSymbol(math, ams, rel, "\u221d", "\\varpropto"); -defineSymbol(math, ams, rel, "\u25c0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom. -// We kept the amssymb atom type, which is rel. - -defineSymbol(math, ams, rel, "\u2234", "\\therefore", true); -defineSymbol(math, ams, rel, "\u220d", "\\backepsilon"); -defineSymbol(math, ams, rel, "\u25b6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom. -// We kept the amssymb atom type, which is rel. - -defineSymbol(math, ams, rel, "\u2235", "\\because", true); -defineSymbol(math, ams, rel, "\u22d8", "\\llless"); -defineSymbol(math, ams, rel, "\u22d9", "\\gggtr"); -defineSymbol(math, ams, bin, "\u22b2", "\\lhd"); -defineSymbol(math, ams, bin, "\u22b3", "\\rhd"); -defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true); -defineSymbol(math, main, rel, "\u22c8", "\\Join"); -defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators - -defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true); -defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); -defineSymbol(math, ams, bin, "\u22d2", "\\Cap", true); -defineSymbol(math, ams, bin, "\u22d3", "\\Cup", true); -defineSymbol(math, ams, bin, "\u2a5e", "\\doublebarwedge", true); -defineSymbol(math, ams, bin, "\u229f", "\\boxminus", true); -defineSymbol(math, ams, bin, "\u229e", "\\boxplus", true); -defineSymbol(math, ams, bin, "\u22c7", "\\divideontimes", true); -defineSymbol(math, ams, bin, "\u22c9", "\\ltimes", true); -defineSymbol(math, ams, bin, "\u22ca", "\\rtimes", true); -defineSymbol(math, ams, bin, "\u22cb", "\\leftthreetimes", true); -defineSymbol(math, ams, bin, "\u22cc", "\\rightthreetimes", true); -defineSymbol(math, ams, bin, "\u22cf", "\\curlywedge", true); -defineSymbol(math, ams, bin, "\u22ce", "\\curlyvee", true); -defineSymbol(math, ams, bin, "\u229d", "\\circleddash", true); -defineSymbol(math, ams, bin, "\u229b", "\\circledast", true); -defineSymbol(math, ams, bin, "\u22c5", "\\centerdot"); -defineSymbol(math, ams, bin, "\u22ba", "\\intercal", true); -defineSymbol(math, ams, bin, "\u22d2", "\\doublecap"); -defineSymbol(math, ams, bin, "\u22d3", "\\doublecup"); -defineSymbol(math, ams, bin, "\u22a0", "\\boxtimes", true); // AMS Arrows -// Note: unicode-math maps \u21e2 to their own function \rightdasharrow. -// We'll map it to AMS function \dashrightarrow. It produces the same atom. - -defineSymbol(math, ams, rel, "\u21e2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym. - -defineSymbol(math, ams, rel, "\u21e0", "\\dashleftarrow", true); -defineSymbol(math, ams, rel, "\u21c7", "\\leftleftarrows", true); -defineSymbol(math, ams, rel, "\u21c6", "\\leftrightarrows", true); -defineSymbol(math, ams, rel, "\u21da", "\\Lleftarrow", true); -defineSymbol(math, ams, rel, "\u219e", "\\twoheadleftarrow", true); -defineSymbol(math, ams, rel, "\u21a2", "\\leftarrowtail", true); -defineSymbol(math, ams, rel, "\u21ab", "\\looparrowleft", true); -defineSymbol(math, ams, rel, "\u21cb", "\\leftrightharpoons", true); -defineSymbol(math, ams, rel, "\u21b6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym. - -defineSymbol(math, ams, rel, "\u21ba", "\\circlearrowleft", true); -defineSymbol(math, ams, rel, "\u21b0", "\\Lsh", true); -defineSymbol(math, ams, rel, "\u21c8", "\\upuparrows", true); -defineSymbol(math, ams, rel, "\u21bf", "\\upharpoonleft", true); -defineSymbol(math, ams, rel, "\u21c3", "\\downharpoonleft", true); -defineSymbol(math, main, rel, "\u22b6", "\\origof", true); // not in font - -defineSymbol(math, main, rel, "\u22b7", "\\imageof", true); // not in font - -defineSymbol(math, ams, rel, "\u22b8", "\\multimap", true); -defineSymbol(math, ams, rel, "\u21ad", "\\leftrightsquigarrow", true); -defineSymbol(math, ams, rel, "\u21c9", "\\rightrightarrows", true); -defineSymbol(math, ams, rel, "\u21c4", "\\rightleftarrows", true); -defineSymbol(math, ams, rel, "\u21a0", "\\twoheadrightarrow", true); -defineSymbol(math, ams, rel, "\u21a3", "\\rightarrowtail", true); -defineSymbol(math, ams, rel, "\u21ac", "\\looparrowright", true); -defineSymbol(math, ams, rel, "\u21b7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym. - -defineSymbol(math, ams, rel, "\u21bb", "\\circlearrowright", true); -defineSymbol(math, ams, rel, "\u21b1", "\\Rsh", true); -defineSymbol(math, ams, rel, "\u21ca", "\\downdownarrows", true); -defineSymbol(math, ams, rel, "\u21be", "\\upharpoonright", true); -defineSymbol(math, ams, rel, "\u21c2", "\\downharpoonright", true); -defineSymbol(math, ams, rel, "\u21dd", "\\rightsquigarrow", true); -defineSymbol(math, ams, rel, "\u21dd", "\\leadsto"); -defineSymbol(math, ams, rel, "\u21db", "\\Rrightarrow", true); -defineSymbol(math, ams, rel, "\u21be", "\\restriction"); -defineSymbol(math, main, textord, "\u2018", "`"); -defineSymbol(math, main, textord, "$", "\\$"); -defineSymbol(text, main, textord, "$", "\\$"); -defineSymbol(text, main, textord, "$", "\\textdollar"); -defineSymbol(math, main, textord, "%", "\\%"); -defineSymbol(text, main, textord, "%", "\\%"); -defineSymbol(math, main, textord, "_", "\\_"); -defineSymbol(text, main, textord, "_", "\\_"); -defineSymbol(text, main, textord, "_", "\\textunderscore"); -defineSymbol(math, main, textord, "\u2220", "\\angle", true); -defineSymbol(math, main, textord, "\u221e", "\\infty", true); -defineSymbol(math, main, textord, "\u2032", "\\prime"); -defineSymbol(math, main, textord, "\u25b3", "\\triangle"); -defineSymbol(math, main, textord, "\u0393", "\\Gamma", true); -defineSymbol(math, main, textord, "\u0394", "\\Delta", true); -defineSymbol(math, main, textord, "\u0398", "\\Theta", true); -defineSymbol(math, main, textord, "\u039b", "\\Lambda", true); -defineSymbol(math, main, textord, "\u039e", "\\Xi", true); -defineSymbol(math, main, textord, "\u03a0", "\\Pi", true); -defineSymbol(math, main, textord, "\u03a3", "\\Sigma", true); -defineSymbol(math, main, textord, "\u03a5", "\\Upsilon", true); -defineSymbol(math, main, textord, "\u03a6", "\\Phi", true); -defineSymbol(math, main, textord, "\u03a8", "\\Psi", true); -defineSymbol(math, main, textord, "\u03a9", "\\Omega", true); -defineSymbol(math, main, textord, "A", "\u0391"); -defineSymbol(math, main, textord, "B", "\u0392"); -defineSymbol(math, main, textord, "E", "\u0395"); -defineSymbol(math, main, textord, "Z", "\u0396"); -defineSymbol(math, main, textord, "H", "\u0397"); -defineSymbol(math, main, textord, "I", "\u0399"); -defineSymbol(math, main, textord, "K", "\u039A"); -defineSymbol(math, main, textord, "M", "\u039C"); -defineSymbol(math, main, textord, "N", "\u039D"); -defineSymbol(math, main, textord, "O", "\u039F"); -defineSymbol(math, main, textord, "P", "\u03A1"); -defineSymbol(math, main, textord, "T", "\u03A4"); -defineSymbol(math, main, textord, "X", "\u03A7"); -defineSymbol(math, main, textord, "\u00ac", "\\neg", true); -defineSymbol(math, main, textord, "\u00ac", "\\lnot"); -defineSymbol(math, main, textord, "\u22a4", "\\top"); -defineSymbol(math, main, textord, "\u22a5", "\\bot"); -defineSymbol(math, main, textord, "\u2205", "\\emptyset"); -defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); -defineSymbol(math, main, mathord, "\u03b1", "\\alpha", true); -defineSymbol(math, main, mathord, "\u03b2", "\\beta", true); -defineSymbol(math, main, mathord, "\u03b3", "\\gamma", true); -defineSymbol(math, main, mathord, "\u03b4", "\\delta", true); -defineSymbol(math, main, mathord, "\u03f5", "\\epsilon", true); -defineSymbol(math, main, mathord, "\u03b6", "\\zeta", true); -defineSymbol(math, main, mathord, "\u03b7", "\\eta", true); -defineSymbol(math, main, mathord, "\u03b8", "\\theta", true); -defineSymbol(math, main, mathord, "\u03b9", "\\iota", true); -defineSymbol(math, main, mathord, "\u03ba", "\\kappa", true); -defineSymbol(math, main, mathord, "\u03bb", "\\lambda", true); -defineSymbol(math, main, mathord, "\u03bc", "\\mu", true); -defineSymbol(math, main, mathord, "\u03bd", "\\nu", true); -defineSymbol(math, main, mathord, "\u03be", "\\xi", true); -defineSymbol(math, main, mathord, "\u03bf", "\\omicron", true); -defineSymbol(math, main, mathord, "\u03c0", "\\pi", true); -defineSymbol(math, main, mathord, "\u03c1", "\\rho", true); -defineSymbol(math, main, mathord, "\u03c3", "\\sigma", true); -defineSymbol(math, main, mathord, "\u03c4", "\\tau", true); -defineSymbol(math, main, mathord, "\u03c5", "\\upsilon", true); -defineSymbol(math, main, mathord, "\u03d5", "\\phi", true); -defineSymbol(math, main, mathord, "\u03c7", "\\chi", true); -defineSymbol(math, main, mathord, "\u03c8", "\\psi", true); -defineSymbol(math, main, mathord, "\u03c9", "\\omega", true); -defineSymbol(math, main, mathord, "\u03b5", "\\varepsilon", true); -defineSymbol(math, main, mathord, "\u03d1", "\\vartheta", true); -defineSymbol(math, main, mathord, "\u03d6", "\\varpi", true); -defineSymbol(math, main, mathord, "\u03f1", "\\varrho", true); -defineSymbol(math, main, mathord, "\u03c2", "\\varsigma", true); -defineSymbol(math, main, mathord, "\u03c6", "\\varphi", true); -defineSymbol(math, main, bin, "\u2217", "*", true); -defineSymbol(math, main, bin, "+", "+"); -defineSymbol(math, main, bin, "\u2212", "-", true); -defineSymbol(math, main, bin, "\u22c5", "\\cdot", true); -defineSymbol(math, main, bin, "\u2218", "\\circ", true); -defineSymbol(math, main, bin, "\u00f7", "\\div", true); -defineSymbol(math, main, bin, "\u00b1", "\\pm", true); -defineSymbol(math, main, bin, "\u00d7", "\\times", true); -defineSymbol(math, main, bin, "\u2229", "\\cap", true); -defineSymbol(math, main, bin, "\u222a", "\\cup", true); -defineSymbol(math, main, bin, "\u2216", "\\setminus", true); -defineSymbol(math, main, bin, "\u2227", "\\land"); -defineSymbol(math, main, bin, "\u2228", "\\lor"); -defineSymbol(math, main, bin, "\u2227", "\\wedge", true); -defineSymbol(math, main, bin, "\u2228", "\\vee", true); -defineSymbol(math, main, textord, "\u221a", "\\surd"); -defineSymbol(math, main, open, "\u27e8", "\\langle", true); -defineSymbol(math, main, open, "\u2223", "\\lvert"); -defineSymbol(math, main, open, "\u2225", "\\lVert"); -defineSymbol(math, main, close, "?", "?"); -defineSymbol(math, main, close, "!", "!"); -defineSymbol(math, main, close, "\u27e9", "\\rangle", true); -defineSymbol(math, main, close, "\u2223", "\\rvert"); -defineSymbol(math, main, close, "\u2225", "\\rVert"); -defineSymbol(math, main, rel, "=", "="); -defineSymbol(math, main, rel, ":", ":"); -defineSymbol(math, main, rel, "\u2248", "\\approx", true); -defineSymbol(math, main, rel, "\u2245", "\\cong", true); -defineSymbol(math, main, rel, "\u2265", "\\ge"); -defineSymbol(math, main, rel, "\u2265", "\\geq", true); -defineSymbol(math, main, rel, "\u2190", "\\gets"); -defineSymbol(math, main, rel, ">", "\\gt", true); -defineSymbol(math, main, rel, "\u2208", "\\in", true); -defineSymbol(math, main, rel, "\ue020", "\\@not"); -defineSymbol(math, main, rel, "\u2282", "\\subset", true); -defineSymbol(math, main, rel, "\u2283", "\\supset", true); -defineSymbol(math, main, rel, "\u2286", "\\subseteq", true); -defineSymbol(math, main, rel, "\u2287", "\\supseteq", true); -defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true); -defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true); -defineSymbol(math, main, rel, "\u22a8", "\\models"); -defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true); -defineSymbol(math, main, rel, "\u2264", "\\le"); -defineSymbol(math, main, rel, "\u2264", "\\leq", true); -defineSymbol(math, main, rel, "<", "\\lt", true); -defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true); -defineSymbol(math, main, rel, "\u2192", "\\to"); -defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true); -defineSymbol(math, ams, rel, "\u2270", "\\nleq", true); -defineSymbol(math, main, spacing, "\u00a0", "\\ "); -defineSymbol(math, main, spacing, "\u00a0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{% - -defineSymbol(math, main, spacing, "\u00a0", "\\nobreakspace"); -defineSymbol(text, main, spacing, "\u00a0", "\\ "); -defineSymbol(text, main, spacing, "\u00a0", " "); -defineSymbol(text, main, spacing, "\u00a0", "\\space"); -defineSymbol(text, main, spacing, "\u00a0", "\\nobreakspace"); -defineSymbol(math, main, spacing, null, "\\nobreak"); -defineSymbol(math, main, spacing, null, "\\allowbreak"); -defineSymbol(math, main, punct, ",", ","); -defineSymbol(math, main, punct, ";", ";"); -defineSymbol(math, ams, bin, "\u22bc", "\\barwedge", true); -defineSymbol(math, ams, bin, "\u22bb", "\\veebar", true); -defineSymbol(math, main, bin, "\u2299", "\\odot", true); -defineSymbol(math, main, bin, "\u2295", "\\oplus", true); -defineSymbol(math, main, bin, "\u2297", "\\otimes", true); -defineSymbol(math, main, textord, "\u2202", "\\partial", true); -defineSymbol(math, main, bin, "\u2298", "\\oslash", true); -defineSymbol(math, ams, bin, "\u229a", "\\circledcirc", true); -defineSymbol(math, ams, bin, "\u22a1", "\\boxdot", true); -defineSymbol(math, main, bin, "\u25b3", "\\bigtriangleup"); -defineSymbol(math, main, bin, "\u25bd", "\\bigtriangledown"); -defineSymbol(math, main, bin, "\u2020", "\\dagger"); -defineSymbol(math, main, bin, "\u22c4", "\\diamond"); -defineSymbol(math, main, bin, "\u22c6", "\\star"); -defineSymbol(math, main, bin, "\u25c3", "\\triangleleft"); -defineSymbol(math, main, bin, "\u25b9", "\\triangleright"); -defineSymbol(math, main, open, "{", "\\{"); -defineSymbol(text, main, textord, "{", "\\{"); -defineSymbol(text, main, textord, "{", "\\textbraceleft"); -defineSymbol(math, main, close, "}", "\\}"); -defineSymbol(text, main, textord, "}", "\\}"); -defineSymbol(text, main, textord, "}", "\\textbraceright"); -defineSymbol(math, main, open, "{", "\\lbrace"); -defineSymbol(math, main, close, "}", "\\rbrace"); -defineSymbol(math, main, open, "[", "\\lbrack", true); -defineSymbol(text, main, textord, "[", "\\lbrack", true); -defineSymbol(math, main, close, "]", "\\rbrack", true); -defineSymbol(text, main, textord, "]", "\\rbrack", true); -defineSymbol(math, main, open, "(", "\\lparen", true); -defineSymbol(math, main, close, ")", "\\rparen", true); -defineSymbol(text, main, textord, "<", "\\textless", true); // in T1 fontenc - -defineSymbol(text, main, textord, ">", "\\textgreater", true); // in T1 fontenc - -defineSymbol(math, main, open, "\u230a", "\\lfloor", true); -defineSymbol(math, main, close, "\u230b", "\\rfloor", true); -defineSymbol(math, main, open, "\u2308", "\\lceil", true); -defineSymbol(math, main, close, "\u2309", "\\rceil", true); -defineSymbol(math, main, textord, "\\", "\\backslash"); -defineSymbol(math, main, textord, "\u2223", "|"); -defineSymbol(math, main, textord, "\u2223", "\\vert"); -defineSymbol(text, main, textord, "|", "\\textbar", true); // in T1 fontenc - -defineSymbol(math, main, textord, "\u2225", "\\|"); -defineSymbol(math, main, textord, "\u2225", "\\Vert"); -defineSymbol(text, main, textord, "\u2225", "\\textbardbl"); -defineSymbol(text, main, textord, "~", "\\textasciitilde"); -defineSymbol(text, main, textord, "\\", "\\textbackslash"); -defineSymbol(text, main, textord, "^", "\\textasciicircum"); -defineSymbol(math, main, rel, "\u2191", "\\uparrow", true); -defineSymbol(math, main, rel, "\u21d1", "\\Uparrow", true); -defineSymbol(math, main, rel, "\u2193", "\\downarrow", true); -defineSymbol(math, main, rel, "\u21d3", "\\Downarrow", true); -defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true); -defineSymbol(math, main, rel, "\u21d5", "\\Updownarrow", true); -defineSymbol(math, main, op, "\u2210", "\\coprod"); -defineSymbol(math, main, op, "\u22c1", "\\bigvee"); -defineSymbol(math, main, op, "\u22c0", "\\bigwedge"); -defineSymbol(math, main, op, "\u2a04", "\\biguplus"); -defineSymbol(math, main, op, "\u22c2", "\\bigcap"); -defineSymbol(math, main, op, "\u22c3", "\\bigcup"); -defineSymbol(math, main, op, "\u222b", "\\int"); -defineSymbol(math, main, op, "\u222b", "\\intop"); -defineSymbol(math, main, op, "\u222c", "\\iint"); -defineSymbol(math, main, op, "\u222d", "\\iiint"); -defineSymbol(math, main, op, "\u220f", "\\prod"); -defineSymbol(math, main, op, "\u2211", "\\sum"); -defineSymbol(math, main, op, "\u2a02", "\\bigotimes"); -defineSymbol(math, main, op, "\u2a01", "\\bigoplus"); -defineSymbol(math, main, op, "\u2a00", "\\bigodot"); -defineSymbol(math, main, op, "\u222e", "\\oint"); -defineSymbol(math, main, op, "\u222f", "\\oiint"); -defineSymbol(math, main, op, "\u2230", "\\oiiint"); -defineSymbol(math, main, op, "\u2a06", "\\bigsqcup"); -defineSymbol(math, main, op, "\u222b", "\\smallint"); -defineSymbol(text, main, inner, "\u2026", "\\textellipsis"); -defineSymbol(math, main, inner, "\u2026", "\\mathellipsis"); -defineSymbol(text, main, inner, "\u2026", "\\ldots", true); -defineSymbol(math, main, inner, "\u2026", "\\ldots", true); -defineSymbol(math, main, inner, "\u22ef", "\\@cdots", true); -defineSymbol(math, main, inner, "\u22f1", "\\ddots", true); -defineSymbol(math, main, textord, "\u22ee", "\\varvdots"); // \vdots is a macro - -defineSymbol(math, main, accent, "\u02ca", "\\acute"); -defineSymbol(math, main, accent, "\u02cb", "\\grave"); -defineSymbol(math, main, accent, "\u00a8", "\\ddot"); -defineSymbol(math, main, accent, "\u007e", "\\tilde"); -defineSymbol(math, main, accent, "\u02c9", "\\bar"); -defineSymbol(math, main, accent, "\u02d8", "\\breve"); -defineSymbol(math, main, accent, "\u02c7", "\\check"); -defineSymbol(math, main, accent, "\u005e", "\\hat"); -defineSymbol(math, main, accent, "\u20d7", "\\vec"); -defineSymbol(math, main, accent, "\u02d9", "\\dot"); -defineSymbol(math, main, accent, "\u02da", "\\mathring"); // \imath and \jmath should be invariant to \mathrm, \mathbf, etc., so use PUA - -defineSymbol(math, main, mathord, "\ue131", "\\@imath"); -defineSymbol(math, main, mathord, "\ue237", "\\@jmath"); -defineSymbol(math, main, textord, "\u0131", "\u0131"); -defineSymbol(math, main, textord, "\u0237", "\u0237"); -defineSymbol(text, main, textord, "\u0131", "\\i", true); -defineSymbol(text, main, textord, "\u0237", "\\j", true); -defineSymbol(text, main, textord, "\u00df", "\\ss", true); -defineSymbol(text, main, textord, "\u00e6", "\\ae", true); -defineSymbol(text, main, textord, "\u0153", "\\oe", true); -defineSymbol(text, main, textord, "\u00f8", "\\o", true); -defineSymbol(text, main, textord, "\u00c6", "\\AE", true); -defineSymbol(text, main, textord, "\u0152", "\\OE", true); -defineSymbol(text, main, textord, "\u00d8", "\\O", true); -defineSymbol(text, main, accent, "\u02ca", "\\'"); // acute - -defineSymbol(text, main, accent, "\u02cb", "\\`"); // grave - -defineSymbol(text, main, accent, "\u02c6", "\\^"); // circumflex - -defineSymbol(text, main, accent, "\u02dc", "\\~"); // tilde - -defineSymbol(text, main, accent, "\u02c9", "\\="); // macron - -defineSymbol(text, main, accent, "\u02d8", "\\u"); // breve - -defineSymbol(text, main, accent, "\u02d9", "\\."); // dot above - -defineSymbol(text, main, accent, "\u00b8", "\\c"); // cedilla - -defineSymbol(text, main, accent, "\u02da", "\\r"); // ring above - -defineSymbol(text, main, accent, "\u02c7", "\\v"); // caron - -defineSymbol(text, main, accent, "\u00a8", '\\"'); // diaresis - -defineSymbol(text, main, accent, "\u02dd", "\\H"); // double acute - -defineSymbol(text, main, accent, "\u25ef", "\\textcircled"); // \bigcirc glyph -// These ligatures are detected and created in Parser.js's `formLigatures`. - -var ligatures = { - "--": true, - "---": true, - "``": true, - "''": true -}; -defineSymbol(text, main, textord, "\u2013", "--", true); -defineSymbol(text, main, textord, "\u2013", "\\textendash"); -defineSymbol(text, main, textord, "\u2014", "---", true); -defineSymbol(text, main, textord, "\u2014", "\\textemdash"); -defineSymbol(text, main, textord, "\u2018", "`", true); -defineSymbol(text, main, textord, "\u2018", "\\textquoteleft"); -defineSymbol(text, main, textord, "\u2019", "'", true); -defineSymbol(text, main, textord, "\u2019", "\\textquoteright"); -defineSymbol(text, main, textord, "\u201c", "``", true); -defineSymbol(text, main, textord, "\u201c", "\\textquotedblleft"); -defineSymbol(text, main, textord, "\u201d", "''", true); -defineSymbol(text, main, textord, "\u201d", "\\textquotedblright"); // \degree from gensymb package - -defineSymbol(math, main, textord, "\u00b0", "\\degree", true); -defineSymbol(text, main, textord, "\u00b0", "\\degree"); // \textdegree from inputenc package - -defineSymbol(text, main, textord, "\u00b0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math -// mode, but among our fonts, only Main-Regular defines this character "163". - -defineSymbol(math, main, textord, "\u00a3", "\\pounds"); -defineSymbol(math, main, textord, "\u00a3", "\\mathsterling", true); -defineSymbol(text, main, textord, "\u00a3", "\\pounds"); -defineSymbol(text, main, textord, "\u00a3", "\\textsterling", true); -defineSymbol(math, ams, textord, "\u2720", "\\maltese"); -defineSymbol(text, ams, textord, "\u2720", "\\maltese"); // There are lots of symbols which are the same, so we add them in afterwards. -// All of these are textords in math mode - -var mathTextSymbols = "0123456789/@.\""; - -for (var i = 0; i < mathTextSymbols.length; i++) { - var ch = mathTextSymbols.charAt(i); - defineSymbol(math, main, textord, ch, ch); -} // All of these are textords in text mode - - -var textSymbols = "0123456789!@*()-=+\";:?/.,"; - -for (var _i = 0; _i < textSymbols.length; _i++) { - var _ch = textSymbols.charAt(_i); - - defineSymbol(text, main, textord, _ch, _ch); -} // All of these are textords in text mode, and mathords in math mode - - -var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - -for (var _i2 = 0; _i2 < letters.length; _i2++) { - var _ch2 = letters.charAt(_i2); - - defineSymbol(math, main, mathord, _ch2, _ch2); - defineSymbol(text, main, textord, _ch2, _ch2); -} // Blackboard bold and script letters in Unicode range - - -defineSymbol(math, ams, textord, "C", "\u2102"); // blackboard bold - -defineSymbol(text, ams, textord, "C", "\u2102"); -defineSymbol(math, ams, textord, "H", "\u210D"); -defineSymbol(text, ams, textord, "H", "\u210D"); -defineSymbol(math, ams, textord, "N", "\u2115"); -defineSymbol(text, ams, textord, "N", "\u2115"); -defineSymbol(math, ams, textord, "P", "\u2119"); -defineSymbol(text, ams, textord, "P", "\u2119"); -defineSymbol(math, ams, textord, "Q", "\u211A"); -defineSymbol(text, ams, textord, "Q", "\u211A"); -defineSymbol(math, ams, textord, "R", "\u211D"); -defineSymbol(text, ams, textord, "R", "\u211D"); -defineSymbol(math, ams, textord, "Z", "\u2124"); -defineSymbol(text, ams, textord, "Z", "\u2124"); -defineSymbol(math, main, mathord, "h", "\u210E"); // italic h, Planck constant - -defineSymbol(text, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters. -// We support some letters in the Unicode range U+1D400 to U+1D7FF, -// Mathematical Alphanumeric Symbols. -// Some editors do not deal well with wide characters. So don't write the -// string into this file. Instead, create the string from the surrogate pair. - -var wideChar = ""; - -for (var _i3 = 0; _i3 < letters.length; _i3++) { - var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair. - // 0xD835 is the high surrogate for all letters in the range we support. - // 0xDC00 is the low surrogate for bold A. - - - wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold - - defineSymbol(math, main, mathord, _ch3, wideChar); - defineSymbol(text, main, textord, _ch3, wideChar); - wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic - - defineSymbol(math, main, mathord, _ch3, wideChar); - defineSymbol(text, main, textord, _ch3, wideChar); - wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic - - defineSymbol(math, main, mathord, _ch3, wideChar); - defineSymbol(text, main, textord, _ch3, wideChar); - wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fractur - - defineSymbol(math, main, mathord, _ch3, wideChar); - defineSymbol(text, main, textord, _ch3, wideChar); - wideChar = String.fromCharCode(0xD835, 0xDD6C + _i3); // A-Z a-z bold Fractur - - defineSymbol(math, main, mathord, _ch3, wideChar); - defineSymbol(text, main, textord, _ch3, wideChar); - wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif - - defineSymbol(math, main, mathord, _ch3, wideChar); - defineSymbol(text, main, textord, _ch3, wideChar); - wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold - - defineSymbol(math, main, mathord, _ch3, wideChar); - defineSymbol(text, main, textord, _ch3, wideChar); - wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic - - defineSymbol(math, main, mathord, _ch3, wideChar); - defineSymbol(text, main, textord, _ch3, wideChar); - wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace - - defineSymbol(math, main, mathord, _ch3, wideChar); - defineSymbol(text, main, textord, _ch3, wideChar); - - if (_i3 < 26) { - // KaTeX fonts have only capital letters for blackboard bold and script. - // See exception for k below. - wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck - - defineSymbol(math, main, mathord, _ch3, wideChar); - defineSymbol(text, main, textord, _ch3, wideChar); - wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script - - defineSymbol(math, main, mathord, _ch3, wideChar); - defineSymbol(text, main, textord, _ch3, wideChar); - } // TODO: Add bold script when it is supported by a KaTeX font. - -} // "k" is the only double struck lower case letter in the KaTeX fonts. - - -wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck - -defineSymbol(math, main, mathord, "k", wideChar); -defineSymbol(text, main, textord, "k", wideChar); // Next, some wide character numerals - -for (var _i4 = 0; _i4 < 10; _i4++) { - var _ch4 = _i4.toString(); - - wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold - - defineSymbol(math, main, mathord, _ch4, wideChar); - defineSymbol(text, main, textord, _ch4, wideChar); - wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif - - defineSymbol(math, main, mathord, _ch4, wideChar); - defineSymbol(text, main, textord, _ch4, wideChar); - wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans - - defineSymbol(math, main, mathord, _ch4, wideChar); - defineSymbol(text, main, textord, _ch4, wideChar); - wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace - - defineSymbol(math, main, mathord, _ch4, wideChar); - defineSymbol(text, main, textord, _ch4, wideChar); -} // We add these Latin-1 letters as symbols for backwards-compatibility, -// but they are not actually in the font, nor are they supported by the -// Unicode accent mechanism, so they fall back to Times font and look ugly. -// TODO(edemaine): Fix this. - - -var extraLatin = "\u00d0\u00de\u00fe"; - -for (var _i5 = 0; _i5 < extraLatin.length; _i5++) { - var _ch5 = extraLatin.charAt(_i5); - - defineSymbol(math, main, mathord, _ch5, _ch5); - defineSymbol(text, main, textord, _ch5, _ch5); -} - -/** - * This file provides support for Unicode range U+1D400 to U+1D7FF, - * Mathematical Alphanumeric Symbols. - * - * Function wideCharacterFont takes a wide character as input and returns - * the font information necessary to render it properly. - */ -/** - * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf - * That document sorts characters into groups by font type, say bold or italic. - * - * In the arrays below, each subarray consists three elements: - * * The CSS class of that group when in math mode. - * * The CSS class of that group when in text mode. - * * The font name, so that KaTeX can get font metrics. - */ - -var wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright -["mathbf", "textbf", "Main-Bold"], // a-z bold upright -["mathnormal", "textit", "Math-Italic"], // A-Z italic -["mathnormal", "textit", "Math-Italic"], // a-z italic -["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic -["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic -// Map fancy A-Z letters to script, not calligraphic. -// This aligns with unicode-math and math fonts (except Cambria Math). -["mathscr", "textscr", "Script-Regular"], // A-Z script -["", "", ""], // a-z script. No font -["", "", ""], // A-Z bold script. No font -["", "", ""], // a-z bold script. No font -["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur -["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur -["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck -["mathbb", "textbb", "AMS-Regular"], // k double-struck -// Note that we are using a bold font, but font metrics for regular Fraktur. -["mathboldfrak", "textboldfrak", "Fraktur-Regular"], // A-Z bold Fraktur -["mathboldfrak", "textboldfrak", "Fraktur-Regular"], // a-z bold Fraktur -["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif -["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif -["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif -["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif -["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif -["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif -["", "", ""], // A-Z bold italic sans. No font -["", "", ""], // a-z bold italic sans. No font -["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace -["mathtt", "texttt", "Typewriter-Regular"] // a-z monospace -]; -var wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold -["", "", ""], // 0-9 double-struck. No KaTeX font. -["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif -["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif -["mathtt", "texttt", "Typewriter-Regular"] // 0-9 monospace -]; -var wideCharacterFont = function wideCharacterFont(wideChar, mode) { - // IE doesn't support codePointAt(). So work with the surrogate pair. - var H = wideChar.charCodeAt(0); // high surrogate - - var L = wideChar.charCodeAt(1); // low surrogate - - var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000; - var j = mode === "math" ? 0 : 1; // column index for CSS class. - - if (0x1D400 <= codePoint && codePoint < 0x1D6A4) { - // wideLatinLetterData contains exactly 26 chars on each row. - // So we can calculate the relevant row. No traverse necessary. - var i = Math.floor((codePoint - 0x1D400) / 26); - return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]]; - } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) { - // Numerals, ten per row. - var _i = Math.floor((codePoint - 0x1D7CE) / 10); - - return [wideNumeralData[_i][2], wideNumeralData[_i][j]]; - } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) { - // dotless i or j - return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]]; - } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) { - // Greek letters. Not supported, yet. - return ["", ""]; - } else { - // We don't support any wide characters outside 1D400–1D7FF. - throw new ParseError("Unsupported character: " + wideChar); - } -}; - -/* eslint no-console:0 */ - -/** - * Looks up the given symbol in fontMetrics, after applying any symbol - * replacements defined in symbol.js - */ -var lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this. -fontName, mode) { - // Replace the value with its replaced value from symbol.js - if (symbols[mode][value] && symbols[mode][value].replace) { - value = symbols[mode][value].replace; - } - - return { - value: value, - metrics: getCharacterMetrics(value, fontName, mode) - }; -}; -/** - * Makes a symbolNode after translation via the list of symbols in symbols.js. - * Correctly pulls out metrics for the character, and optionally takes a list of - * classes to be attached to the node. - * - * TODO: make argument order closer to makeSpan - * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which - * should if present come first in `classes`. - * TODO(#953): Make `options` mandatory and always pass it in. - */ - - -var makeSymbol = function makeSymbol(value, fontName, mode, options, classes) { - var lookup = lookupSymbol(value, fontName, mode); - var metrics = lookup.metrics; - value = lookup.value; - var symbolNode; - - if (metrics) { - var italic = metrics.italic; - - if (mode === "text" || options && options.font === "mathit") { - italic = 0; - } - - symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes); - } else { - // TODO(emily): Figure out a good way to only print this in development - typeof console !== "undefined" && console.warn("No character metrics " + ("for '" + value + "' in style '" + fontName + "' and mode '" + mode + "'")); - symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes); - } - - if (options) { - symbolNode.maxFontSize = options.sizeMultiplier; - - if (options.style.isTight()) { - symbolNode.classes.push("mtight"); - } - - var color = options.getColor(); - - if (color) { - symbolNode.style.color = color; - } - } - - return symbolNode; -}; -/** - * Makes a symbol in Main-Regular or AMS-Regular. - * Used for rel, bin, open, close, inner, and punct. - */ - - -var mathsym = function mathsym(value, mode, options, classes) { - if (classes === void 0) { - classes = []; - } - - // Decide what font to render the symbol in by its entry in the symbols - // table. - // Have a special case for when the value = \ because the \ is used as a - // textord in unsupported command errors but cannot be parsed as a regular - // text ordinal and is therefore not present as a symbol in the symbols - // table for text, as well as a special case for boldsymbol because it - // can be used for bold + and - - if (options.font === "boldsymbol" && lookupSymbol(value, "Main-Bold", mode).metrics) { - return makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"])); - } else if (value === "\\" || symbols[mode][value].font === "main") { - return makeSymbol(value, "Main-Regular", mode, options, classes); - } else { - return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); - } -}; -/** - * Determines which of the two font names (Main-Bold and Math-BoldItalic) and - * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol", - * depending on the symbol. Use this function instead of fontMap for font - * "boldsymbol". - */ - - -var boldsymbol = function boldsymbol(value, mode, options, classes, type) { - if (type !== "textord" && lookupSymbol(value, "Math-BoldItalic", mode).metrics) { - return { - fontName: "Math-BoldItalic", - fontClass: "boldsymbol" - }; - } else { - // Some glyphs do not exist in Math-BoldItalic so we need to use - // Main-Bold instead. - return { - fontName: "Main-Bold", - fontClass: "mathbf" - }; - } -}; -/** - * Makes either a mathord or textord in the correct font and color. - */ - - -var makeOrd = function makeOrd(group, options, type) { - var mode = group.mode; - var text = group.text; - var classes = ["mord"]; // Math mode or Old font (i.e. \rm) - - var isFont = mode === "math" || mode === "text" && options.font; - var fontOrFamily = isFont ? options.font : options.fontFamily; - var wideFontName = ""; - var wideFontClass = ""; - - if (text.charCodeAt(0) === 0xD835) { - [wideFontName, wideFontClass] = wideCharacterFont(text, mode); - } - - if (wideFontName.length > 0) { - // surrogate pairs get special treatment - return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass)); - } else if (fontOrFamily) { - var fontName; - var fontClasses; - - if (fontOrFamily === "boldsymbol") { - var fontData = boldsymbol(text, mode, options, classes, type); - fontName = fontData.fontName; - fontClasses = [fontData.fontClass]; - } else if (isFont) { - fontName = fontMap[fontOrFamily].fontName; - fontClasses = [fontOrFamily]; - } else { - fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape); - fontClasses = [fontOrFamily, options.fontWeight, options.fontShape]; - } - - if (lookupSymbol(text, fontName, mode).metrics) { - return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses)); - } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === "Typewriter") { - // Deconstruct ligatures in monospace fonts (\texttt, \tt). - var parts = []; - - for (var i = 0; i < text.length; i++) { - parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses))); - } - - return makeFragment(parts); - } - } // Makes a symbol in the default font for mathords and textords. - - - if (type === "mathord") { - return makeSymbol(text, "Math-Italic", mode, options, classes.concat(["mathnormal"])); - } else if (type === "textord") { - var font = symbols[mode][text] && symbols[mode][text].font; - - if (font === "ams") { - var _fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape); - - return makeSymbol(text, _fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape)); - } else if (font === "main" || !font) { - var _fontName2 = retrieveTextFontName("textrm", options.fontWeight, options.fontShape); - - return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape)); - } else { - // fonts added by plugins - var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class - - - return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape)); - } - } else { - throw new Error("unexpected type: " + type + " in makeOrd"); - } -}; -/** - * Returns true if subsequent symbolNodes have the same classes, skew, maxFont, - * and styles. - */ - - -var canCombine = (prev, next) => { - if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) { - return false; - } // If prev and next both are just "mbin"s or "mord"s we don't combine them - // so that the proper spacing can be preserved. - - - if (prev.classes.length === 1) { - var cls = prev.classes[0]; - - if (cls === "mbin" || cls === "mord") { - return false; - } - } - - for (var style in prev.style) { - if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) { - return false; - } - } - - for (var _style in next.style) { - if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) { - return false; - } - } - - return true; -}; -/** - * Combine consecutive domTree.symbolNodes into a single symbolNode. - * Note: this function mutates the argument. - */ - - -var tryCombineChars = chars => { - for (var i = 0; i < chars.length - 1; i++) { - var prev = chars[i]; - var next = chars[i + 1]; - - if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) { - prev.text += next.text; - prev.height = Math.max(prev.height, next.height); - prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use - // it to add padding to the right of the span created from - // the combined characters. - - prev.italic = next.italic; - chars.splice(i + 1, 1); - i--; - } - } - - return chars; -}; -/** - * Calculate the height, depth, and maxFontSize of an element based on its - * children. - */ - - -var sizeElementFromChildren = function sizeElementFromChildren(elem) { - var height = 0; - var depth = 0; - var maxFontSize = 0; - - for (var i = 0; i < elem.children.length; i++) { - var child = elem.children[i]; - - if (child.height > height) { - height = child.height; - } - - if (child.depth > depth) { - depth = child.depth; - } - - if (child.maxFontSize > maxFontSize) { - maxFontSize = child.maxFontSize; - } - } - - elem.height = height; - elem.depth = depth; - elem.maxFontSize = maxFontSize; -}; -/** - * Makes a span with the given list of classes, list of children, and options. - * - * TODO(#953): Ensure that `options` is always provided (currently some call - * sites don't pass it) and make the type below mandatory. - * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which - * should if present come first in `classes`. - */ - - -var makeSpan$2 = function makeSpan(classes, children, options, style) { - var span = new Span(classes, children, options, style); - sizeElementFromChildren(span); - return span; -}; // SVG one is simpler -- doesn't require height, depth, max-font setting. -// This is also a separate method for typesafety. - - -var makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style); - -var makeLineSpan = function makeLineSpan(className, options, thickness) { - var line = makeSpan$2([className], [], options); - line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness); - line.style.borderBottomWidth = makeEm(line.height); - line.maxFontSize = 1.0; - return line; -}; -/** - * Makes an anchor with the given href, list of classes, list of children, - * and options. - */ - - -var makeAnchor = function makeAnchor(href, classes, children, options) { - var anchor = new Anchor(href, classes, children, options); - sizeElementFromChildren(anchor); - return anchor; -}; -/** - * Makes a document fragment with the given list of children. - */ - - -var makeFragment = function makeFragment(children) { - var fragment = new DocumentFragment(children); - sizeElementFromChildren(fragment); - return fragment; -}; -/** - * Wraps group in a span if it's a document fragment, allowing to apply classes - * and styles - */ - - -var wrapFragment = function wrapFragment(group, options) { - if (group instanceof DocumentFragment) { - return makeSpan$2([], [group], options); - } - - return group; -}; // These are exact object types to catch typos in the names of the optional fields. - - -// Computes the updated `children` list and the overall depth. -// -// This helper function for makeVList makes it easier to enforce type safety by -// allowing early exits (returns) in the logic. -var getVListChildrenAndDepth = function getVListChildrenAndDepth(params) { - if (params.positionType === "individualShift") { - var oldChildren = params.children; - var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be - // shifted to the correct specified shift - - var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth; - - var currPos = _depth; - - for (var i = 1; i < oldChildren.length; i++) { - var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth; - var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth); - currPos = currPos + diff; - children.push({ - type: "kern", - size - }); - children.push(oldChildren[i]); - } - - return { - children, - depth: _depth - }; - } - - var depth; - - if (params.positionType === "top") { - // We always start at the bottom, so calculate the bottom by adding up - // all the sizes - var bottom = params.positionData; - - for (var _i = 0; _i < params.children.length; _i++) { - var child = params.children[_i]; - bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth; - } - - depth = bottom; - } else if (params.positionType === "bottom") { - depth = -params.positionData; - } else { - var firstChild = params.children[0]; - - if (firstChild.type !== "elem") { - throw new Error('First child must have type "elem".'); - } - - if (params.positionType === "shift") { - depth = -firstChild.elem.depth - params.positionData; - } else if (params.positionType === "firstBaseline") { - depth = -firstChild.elem.depth; - } else { - throw new Error("Invalid positionType " + params.positionType + "."); - } - } - - return { - children: params.children, - depth - }; -}; -/** - * Makes a vertical list by stacking elements and kerns on top of each other. - * Allows for many different ways of specifying the positioning method. - * - * See VListParam documentation above. - */ - - -var makeVList = function makeVList(params, options) { - var { - children, - depth - } = getVListChildrenAndDepth(params); // Create a strut that is taller than any list item. The strut is added to - // each item, where it will determine the item's baseline. Since it has - // `overflow:hidden`, the strut's top edge will sit on the item's line box's - // top edge and the strut's bottom edge will sit on the item's baseline, - // with no additional line-height spacing. This allows the item baseline to - // be positioned precisely without worrying about font ascent and - // line-height. - - var pstrutSize = 0; - - for (var i = 0; i < children.length; i++) { - var child = children[i]; - - if (child.type === "elem") { - var elem = child.elem; - pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height); - } - } - - pstrutSize += 2; - var pstrut = makeSpan$2(["pstrut"], []); - pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets - - var realChildren = []; - var minPos = depth; - var maxPos = depth; - var currPos = depth; - - for (var _i2 = 0; _i2 < children.length; _i2++) { - var _child = children[_i2]; - - if (_child.type === "kern") { - currPos += _child.size; - } else { - var _elem = _child.elem; - var classes = _child.wrapperClasses || []; - var style = _child.wrapperStyle || {}; - var childWrap = makeSpan$2(classes, [pstrut, _elem], undefined, style); - childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth); - - if (_child.marginLeft) { - childWrap.style.marginLeft = _child.marginLeft; - } - - if (_child.marginRight) { - childWrap.style.marginRight = _child.marginRight; - } - - realChildren.push(childWrap); - currPos += _elem.height + _elem.depth; - } - - minPos = Math.min(minPos, currPos); - maxPos = Math.max(maxPos, currPos); - } // The vlist contents go in a table-cell with `vertical-align:bottom`. - // This cell's bottom edge will determine the containing table's baseline - // without overly expanding the containing line-box. - - - var vlist = makeSpan$2(["vlist"], realChildren); - vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist's depth. - - var rows; - - if (minPos < 0) { - // We will define depth in an empty span with display: table-cell. - // It should render with the height that we define. But Chrome, in - // contenteditable mode only, treats that span as if it contains some - // text content. And that min-height over-rides our desired height. - // So we put another empty span inside the depth strut span. - var emptySpan = makeSpan$2([], []); - var depthStrut = makeSpan$2(["vlist"], [emptySpan]); - depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it - // puts the bottom of the *second* row on the baseline. - - var topStrut = makeSpan$2(["vlist-s"], [new SymbolNode("\u200b")]); - rows = [makeSpan$2(["vlist-r"], [vlist, topStrut]), makeSpan$2(["vlist-r"], [depthStrut])]; - } else { - rows = [makeSpan$2(["vlist-r"], [vlist])]; - } - - var vtable = makeSpan$2(["vlist-t"], rows); - - if (rows.length === 2) { - vtable.classes.push("vlist-t2"); - } - - vtable.height = maxPos; - vtable.depth = -minPos; - return vtable; -}; // Glue is a concept from TeX which is a flexible space between elements in -// either a vertical or horizontal list. In KaTeX, at least for now, it's -// static space between elements in a horizontal layout. - - -var makeGlue = (measurement, options) => { - // Make an empty span for the space - var rule = makeSpan$2(["mspace"], [], options); - var size = calculateSize(measurement, options); - rule.style.marginRight = makeEm(size); - return rule; -}; // Takes font options, and returns the appropriate fontLookup name - - -var retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) { - var baseFontName = ""; - - switch (fontFamily) { - case "amsrm": - baseFontName = "AMS"; - break; - - case "textrm": - baseFontName = "Main"; - break; - - case "textsf": - baseFontName = "SansSerif"; - break; - - case "texttt": - baseFontName = "Typewriter"; - break; - - default: - baseFontName = fontFamily; - // use fonts added by a plugin - } - - var fontStylesName; - - if (fontWeight === "textbf" && fontShape === "textit") { - fontStylesName = "BoldItalic"; - } else if (fontWeight === "textbf") { - fontStylesName = "Bold"; - } else if (fontWeight === "textit") { - fontStylesName = "Italic"; - } else { - fontStylesName = "Regular"; - } - - return baseFontName + "-" + fontStylesName; -}; -/** - * Maps TeX font commands to objects containing: - * - variant: string used for "mathvariant" attribute in buildMathML.js - * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics - */ -// A map between tex font commands an MathML mathvariant attribute values - - -var fontMap = { - // styles - "mathbf": { - variant: "bold", - fontName: "Main-Bold" - }, - "mathrm": { - variant: "normal", - fontName: "Main-Regular" - }, - "textit": { - variant: "italic", - fontName: "Main-Italic" - }, - "mathit": { - variant: "italic", - fontName: "Main-Italic" - }, - "mathnormal": { - variant: "italic", - fontName: "Math-Italic" - }, - // "boldsymbol" is missing because they require the use of multiple fonts: - // Math-BoldItalic and Main-Bold. This is handled by a special case in - // makeOrd which ends up calling boldsymbol. - // families - "mathbb": { - variant: "double-struck", - fontName: "AMS-Regular" - }, - "mathcal": { - variant: "script", - fontName: "Caligraphic-Regular" - }, - "mathfrak": { - variant: "fraktur", - fontName: "Fraktur-Regular" - }, - "mathscr": { - variant: "script", - fontName: "Script-Regular" - }, - "mathsf": { - variant: "sans-serif", - fontName: "SansSerif-Regular" - }, - "mathtt": { - variant: "monospace", - fontName: "Typewriter-Regular" - } -}; -var svgData = { - // path, width, height - vec: ["vec", 0.471, 0.714], - // values from the font glyph - oiintSize1: ["oiintSize1", 0.957, 0.499], - // oval to overlay the integrand - oiintSize2: ["oiintSize2", 1.472, 0.659], - oiiintSize1: ["oiiintSize1", 1.304, 0.499], - oiiintSize2: ["oiiintSize2", 1.98, 0.659] -}; - -var staticSvg = function staticSvg(value, options) { - // Create a span with inline SVG for the element. - var [pathName, width, height] = svgData[value]; - var path = new PathNode(pathName); - var svgNode = new SvgNode([path], { - "width": makeEm(width), - "height": makeEm(height), - // Override CSS rule `.katex svg { width: 100% }` - "style": "width:" + makeEm(width), - "viewBox": "0 0 " + 1000 * width + " " + 1000 * height, - "preserveAspectRatio": "xMinYMin" - }); - var span = makeSvgSpan(["overlay"], [svgNode], options); - span.height = height; - span.style.height = makeEm(height); - span.style.width = makeEm(width); - return span; -}; - -var buildCommon = { - fontMap, - makeSymbol, - mathsym, - makeSpan: makeSpan$2, - makeSvgSpan, - makeLineSpan, - makeAnchor, - makeFragment, - wrapFragment, - makeVList, - makeOrd, - makeGlue, - staticSvg, - svgData, - tryCombineChars -}; - -/** - * Describes spaces between different classes of atoms. - */ -var thinspace = { - number: 3, - unit: "mu" -}; -var mediumspace = { - number: 4, - unit: "mu" -}; -var thickspace = { - number: 5, - unit: "mu" -}; // Making the type below exact with all optional fields doesn't work due to -// - https://github.com/facebook/flow/issues/4582 -// - https://github.com/facebook/flow/issues/5688 -// However, since *all* fields are optional, $Shape<> works as suggested in 5688 -// above. - -// Spacing relationships for display and text styles -var spacings = { - mord: { - mop: thinspace, - mbin: mediumspace, - mrel: thickspace, - minner: thinspace - }, - mop: { - mord: thinspace, - mop: thinspace, - mrel: thickspace, - minner: thinspace - }, - mbin: { - mord: mediumspace, - mop: mediumspace, - mopen: mediumspace, - minner: mediumspace - }, - mrel: { - mord: thickspace, - mop: thickspace, - mopen: thickspace, - minner: thickspace - }, - mopen: {}, - mclose: { - mop: thinspace, - mbin: mediumspace, - mrel: thickspace, - minner: thinspace - }, - mpunct: { - mord: thinspace, - mop: thinspace, - mrel: thickspace, - mopen: thinspace, - mclose: thinspace, - mpunct: thinspace, - minner: thinspace - }, - minner: { - mord: thinspace, - mop: thinspace, - mbin: mediumspace, - mrel: thickspace, - mopen: thinspace, - mpunct: thinspace, - minner: thinspace - } -}; // Spacing relationships for script and scriptscript styles - -var tightSpacings = { - mord: { - mop: thinspace - }, - mop: { - mord: thinspace, - mop: thinspace - }, - mbin: {}, - mrel: {}, - mopen: {}, - mclose: { - mop: thinspace - }, - mpunct: {}, - minner: { - mop: thinspace - } -}; - -/** Context provided to function handlers for error messages. */ -// Note: reverse the order of the return type union will cause a flow error. -// See https://github.com/facebook/flow/issues/3663. -// More general version of `HtmlBuilder` for nodes (e.g. \sum, accent types) -// whose presence impacts super/subscripting. In this case, ParseNode<"supsub"> -// delegates its HTML building to the HtmlBuilder corresponding to these nodes. - -/** - * Final function spec for use at parse time. - * This is almost identical to `FunctionPropSpec`, except it - * 1. includes the function handler, and - * 2. requires all arguments except argTypes. - * It is generated by `defineFunction()` below. - */ - -/** - * All registered functions. - * `functions.js` just exports this same dictionary again and makes it public. - * `Parser.js` requires this dictionary. - */ -var _functions = {}; -/** - * All HTML builders. Should be only used in the `define*` and the `build*ML` - * functions. - */ - -var _htmlGroupBuilders = {}; -/** - * All MathML builders. Should be only used in the `define*` and the `build*ML` - * functions. - */ - -var _mathmlGroupBuilders = {}; -function defineFunction(_ref) { - var { - type, - names, - props, - handler, - htmlBuilder, - mathmlBuilder - } = _ref; - // Set default values of functions - var data = { - type, - numArgs: props.numArgs, - argTypes: props.argTypes, - allowedInArgument: !!props.allowedInArgument, - allowedInText: !!props.allowedInText, - allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath, - numOptionalArgs: props.numOptionalArgs || 0, - infix: !!props.infix, - primitive: !!props.primitive, - handler: handler - }; - - for (var i = 0; i < names.length; ++i) { - _functions[names[i]] = data; - } - - if (type) { - if (htmlBuilder) { - _htmlGroupBuilders[type] = htmlBuilder; - } - - if (mathmlBuilder) { - _mathmlGroupBuilders[type] = mathmlBuilder; - } - } -} -/** - * Use this to register only the HTML and MathML builders for a function (e.g. - * if the function's ParseNode is generated in Parser.js rather than via a - * stand-alone handler provided to `defineFunction`). - */ - -function defineFunctionBuilders(_ref2) { - var { - type, - htmlBuilder, - mathmlBuilder - } = _ref2; - defineFunction({ - type, - names: [], - props: { - numArgs: 0 - }, - - handler() { - throw new Error('Should never be called.'); - }, - - htmlBuilder, - mathmlBuilder - }); -} -var normalizeArgument = function normalizeArgument(arg) { - return arg.type === "ordgroup" && arg.body.length === 1 ? arg.body[0] : arg; -}; // Since the corresponding buildHTML/buildMathML function expects a -// list of elements, we normalize for different kinds of arguments - -var ordargument = function ordargument(arg) { - return arg.type === "ordgroup" ? arg.body : [arg]; -}; - -/** - * This file does the main work of building a domTree structure from a parse - * tree. The entry point is the `buildHTML` function, which takes a parse tree. - * Then, the buildExpression, buildGroup, and various groupBuilders functions - * are called, to produce a final HTML tree. - */ -var makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) -// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, -// and the text before Rule 19. - -var binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"]; -var binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"]; -var styleMap$1 = { - "display": Style$1.DISPLAY, - "text": Style$1.TEXT, - "script": Style$1.SCRIPT, - "scriptscript": Style$1.SCRIPTSCRIPT -}; -var DomEnum = { - mord: "mord", - mop: "mop", - mbin: "mbin", - mrel: "mrel", - mopen: "mopen", - mclose: "mclose", - mpunct: "mpunct", - minner: "minner" -}; - -/** - * Take a list of nodes, build them in order, and return a list of the built - * nodes. documentFragments are flattened into their contents, so the - * returned list contains no fragments. `isRealGroup` is true if `expression` - * is a real group (no atoms will be added on either side), as opposed to - * a partial group (e.g. one created by \color). `surrounding` is an array - * consisting type of nodes that will be added to the left and right. - */ -var buildExpression$1 = function buildExpression(expression, options, isRealGroup, surrounding) { - if (surrounding === void 0) { - surrounding = [null, null]; - } - - // Parse expressions into `groups`. - var groups = []; - - for (var i = 0; i < expression.length; i++) { - var output = buildGroup$1(expression[i], options); - - if (output instanceof DocumentFragment) { - var children = output.children; - groups.push(...children); - } else { - groups.push(output); - } - } // Combine consecutive domTree.symbolNodes into a single symbolNode. - - - buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings - // to avoid processing groups multiple times. - - if (!isRealGroup) { - return groups; - } - - var glueOptions = options; - - if (expression.length === 1) { - var node = expression[0]; - - if (node.type === "sizing") { - glueOptions = options.havingSize(node.size); - } else if (node.type === "styling") { - glueOptions = options.havingStyle(styleMap$1[node.style]); - } - } // Dummy spans for determining spacings between surrounding atoms. - // If `expression` has no atoms on the left or right, class "leftmost" - // or "rightmost", respectively, is used to indicate it. - - - var dummyPrev = makeSpan$1([surrounding[0] || "leftmost"], [], options); - var dummyNext = makeSpan$1([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element - // of its `classes` array. A later cleanup should ensure this, for - // instance by changing the signature of `makeSpan`. - // Before determining what spaces to insert, perform bin cancellation. - // Binary operators change to ordinary symbols in some contexts. - - var isRoot = isRealGroup === "root"; - traverseNonSpaceNodes(groups, (node, prev) => { - var prevType = prev.classes[0]; - var type = node.classes[0]; - - if (prevType === "mbin" && utils.contains(binRightCanceller, type)) { - prev.classes[0] = "mord"; - } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) { - node.classes[0] = "mord"; - } - }, { - node: dummyPrev - }, dummyNext, isRoot); - traverseNonSpaceNodes(groups, (node, prev) => { - var prevType = getTypeOfDomTree(prev); - var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style. - - var space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null; - - if (space) { - // Insert glue (spacing) after the `prev`. - return buildCommon.makeGlue(space, glueOptions); - } - }, { - node: dummyPrev - }, dummyNext, isRoot); - return groups; -}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and -// previous node as arguments, optionally returning a node to insert after the -// previous node. `prev` is an object with the previous node and `insertAfter` -// function to insert after it. `next` is a node that will be added to the right. -// Used for bin cancellation and inserting spacings. - -var traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) { - if (next) { - // temporarily append the right node, if exists - nodes.push(next); - } - - var i = 0; - - for (; i < nodes.length; i++) { - var node = nodes[i]; - var partialGroup = checkPartialGroup(node); - - if (partialGroup) { - // Recursive DFS - // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array - traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot); - continue; - } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit - // spacing should go between atoms of different classes - - - var nonspace = !node.hasClass("mspace"); - - if (nonspace) { - var result = callback(node, prev.node); - - if (result) { - if (prev.insertAfter) { - prev.insertAfter(result); - } else { - // insert at front - nodes.unshift(result); - i++; - } - } - } - - if (nonspace) { - prev.node = node; - } else if (isRoot && node.hasClass("newline")) { - prev.node = makeSpan$1(["leftmost"]); // treat like beginning of line - } - - prev.insertAfter = (index => n => { - nodes.splice(index + 1, 0, n); - i++; - })(i); - } - - if (next) { - nodes.pop(); - } -}; // Check if given node is a partial group, i.e., does not affect spacing around. - - -var checkPartialGroup = function checkPartialGroup(node) { - if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass("enclosing")) { - return node; - } - - return null; -}; // Return the outermost node of a domTree. - - -var getOutermostNode = function getOutermostNode(node, side) { - var partialGroup = checkPartialGroup(node); - - if (partialGroup) { - var children = partialGroup.children; - - if (children.length) { - if (side === "right") { - return getOutermostNode(children[children.length - 1], "right"); - } else if (side === "left") { - return getOutermostNode(children[0], "left"); - } - } - } - - return node; -}; // Return math atom class (mclass) of a domTree. -// If `side` is given, it will get the type of the outermost node at given side. - - -var getTypeOfDomTree = function getTypeOfDomTree(node, side) { - if (!node) { - return null; - } - - if (side) { - node = getOutermostNode(node, side); - } // This makes a lot of assumptions as to where the type of atom - // appears. We should do a better job of enforcing this. - - - return DomEnum[node.classes[0]] || null; -}; -var makeNullDelimiter = function makeNullDelimiter(options, classes) { - var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses()); - return makeSpan$1(classes.concat(moreClasses)); -}; -/** - * buildGroup is the function that takes a group and calls the correct groupType - * function for it. It also handles the interaction of size and style changes - * between parents and children. - */ - -var buildGroup$1 = function buildGroup(group, options, baseOptions) { - if (!group) { - return makeSpan$1(); - } - - if (_htmlGroupBuilders[group.type]) { - // Call the groupBuilders function - // $FlowFixMe - var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account - // for that size difference. - - if (baseOptions && options.size !== baseOptions.size) { - groupNode = makeSpan$1(options.sizingClasses(baseOptions), [groupNode], options); - var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; - groupNode.height *= multiplier; - groupNode.depth *= multiplier; - } - - return groupNode; - } else { - throw new ParseError("Got group of unknown type: '" + group.type + "'"); - } -}; -/** - * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`) - * into an unbreakable HTML node of class .base, with proper struts to - * guarantee correct vertical extent. `buildHTML` calls this repeatedly to - * make up the entire expression as a sequence of unbreakable units. - */ - -function buildHTMLUnbreakable(children, options) { - // Compute height and depth of this chunk. - var body = makeSpan$1(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at - // the height of the expression, and the bottom of the HTML element - // falls at the depth of the expression. - - var strut = makeSpan$1(["strut"]); - strut.style.height = makeEm(body.height + body.depth); - - if (body.depth) { - strut.style.verticalAlign = makeEm(-body.depth); - } - - body.children.unshift(strut); - return body; -} -/** - * Take an entire parse tree, and build it into an appropriate set of HTML - * nodes. - */ - - -function buildHTML(tree, options) { - // Strip off outer tag wrapper for processing below. - var tag = null; - - if (tree.length === 1 && tree[0].type === "tag") { - tag = tree[0].tag; - tree = tree[0].body; - } // Build the expression contained in the tree - - - var expression = buildExpression$1(tree, options, "root"); - var eqnNum; - - if (expression.length === 2 && expression[1].hasClass("tag")) { - // An environment with automatic equation numbers, e.g. {gather}. - eqnNum = expression.pop(); - } - - var children = []; // Create one base node for each chunk between potential line breaks. - // The TeXBook [p.173] says "A formula will be broken only after a - // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary - // operation symbol like $+$ or $-$ or $\times$, where the relation or - // binary operation is on the ``outer level'' of the formula (i.e., not - // enclosed in {...} and not part of an \over construction)." - - var parts = []; - - for (var i = 0; i < expression.length; i++) { - parts.push(expression[i]); - - if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) { - // Put any post-operator glue on same line as operator. - // Watch for \nobreak along the way, and stop at \newline. - var nobreak = false; - - while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) { - i++; - parts.push(expression[i]); - - if (expression[i].hasClass("nobreak")) { - nobreak = true; - } - } // Don't allow break if \nobreak among the post-operator glue. - - - if (!nobreak) { - children.push(buildHTMLUnbreakable(parts, options)); - parts = []; - } - } else if (expression[i].hasClass("newline")) { - // Write the line except the newline - parts.pop(); - - if (parts.length > 0) { - children.push(buildHTMLUnbreakable(parts, options)); - parts = []; - } // Put the newline at the top level - - - children.push(expression[i]); - } - } - - if (parts.length > 0) { - children.push(buildHTMLUnbreakable(parts, options)); - } // Now, if there was a tag, build it too and append it as a final child. - - - var tagChild; - - if (tag) { - tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options, true)); - tagChild.classes = ["tag"]; - children.push(tagChild); - } else if (eqnNum) { - children.push(eqnNum); - } - - var htmlNode = makeSpan$1(["katex-html"], children); - htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children - // (the height of the enclosing htmlNode) for proper vertical alignment. - - if (tagChild) { - var strut = tagChild.children[0]; - strut.style.height = makeEm(htmlNode.height + htmlNode.depth); - - if (htmlNode.depth) { - strut.style.verticalAlign = makeEm(-htmlNode.depth); - } - } - - return htmlNode; -} - -/** - * These objects store data about MathML nodes. This is the MathML equivalent - * of the types in domTree.js. Since MathML handles its own rendering, and - * since we're mainly using MathML to improve accessibility, we don't manage - * any of the styling state that the plain DOM nodes do. - * - * The `toNode` and `toMarkup` functions work similarly to how they do in - * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. - */ -function newDocumentFragment(children) { - return new DocumentFragment(children); -} -/** - * This node represents a general purpose MathML node of any type. The - * constructor requires the type of node to create (for example, `"mo"` or - * `"mspace"`, corresponding to `` and `` tags). - */ - -class MathNode { - constructor(type, children, classes) { - this.type = void 0; - this.attributes = void 0; - this.children = void 0; - this.classes = void 0; - this.type = type; - this.attributes = {}; - this.children = children || []; - this.classes = classes || []; - } - /** - * Sets an attribute on a MathML node. MathML depends on attributes to convey a - * semantic content, so this is used heavily. - */ - - - setAttribute(name, value) { - this.attributes[name] = value; - } - /** - * Gets an attribute on a MathML node. - */ - - - getAttribute(name) { - return this.attributes[name]; - } - /** - * Converts the math node into a MathML-namespaced DOM element. - */ - - - toNode() { - var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); - - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - node.setAttribute(attr, this.attributes[attr]); - } - } - - if (this.classes.length > 0) { - node.className = createClass(this.classes); - } - - for (var i = 0; i < this.children.length; i++) { - node.appendChild(this.children[i].toNode()); - } - - return node; - } - /** - * Converts the math node into an HTML markup string. - */ - - - toMarkup() { - var markup = "<" + this.type; // Add the attributes - - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - markup += " " + attr + "=\""; - markup += utils.escape(this.attributes[attr]); - markup += "\""; - } - } - - if (this.classes.length > 0) { - markup += " class =\"" + utils.escape(createClass(this.classes)) + "\""; - } - - markup += ">"; - - for (var i = 0; i < this.children.length; i++) { - markup += this.children[i].toMarkup(); - } - - markup += ""; - return markup; - } - /** - * Converts the math node into a string, similar to innerText, but escaped. - */ - - - toText() { - return this.children.map(child => child.toText()).join(""); - } - -} -/** - * This node represents a piece of text. - */ - -class TextNode { - constructor(text) { - this.text = void 0; - this.text = text; - } - /** - * Converts the text node into a DOM text node. - */ - - - toNode() { - return document.createTextNode(this.text); - } - /** - * Converts the text node into escaped HTML markup - * (representing the text itself). - */ - - - toMarkup() { - return utils.escape(this.toText()); - } - /** - * Converts the text node into a string - * (representing the text itself). - */ - - - toText() { - return this.text; - } - -} -/** - * This node represents a space, but may render as or as text, - * depending on the width. - */ - -class SpaceNode { - /** - * Create a Space node with width given in CSS ems. - */ - constructor(width) { - this.width = void 0; - this.character = void 0; - this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html - // for a table of space-like characters. We use Unicode - // representations instead of &LongNames; as it's not clear how to - // make the latter via document.createTextNode. - - if (width >= 0.05555 && width <= 0.05556) { - this.character = "\u200a"; //   - } else if (width >= 0.1666 && width <= 0.1667) { - this.character = "\u2009"; //   - } else if (width >= 0.2222 && width <= 0.2223) { - this.character = "\u2005"; //   - } else if (width >= 0.2777 && width <= 0.2778) { - this.character = "\u2005\u200a"; //    - } else if (width >= -0.05556 && width <= -0.05555) { - this.character = "\u200a\u2063"; // ​ - } else if (width >= -0.1667 && width <= -0.1666) { - this.character = "\u2009\u2063"; // ​ - } else if (width >= -0.2223 && width <= -0.2222) { - this.character = "\u205f\u2063"; // ​ - } else if (width >= -0.2778 && width <= -0.2777) { - this.character = "\u2005\u2063"; // ​ - } else { - this.character = null; - } - } - /** - * Converts the math node into a MathML-namespaced DOM element. - */ - - - toNode() { - if (this.character) { - return document.createTextNode(this.character); - } else { - var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace"); - node.setAttribute("width", makeEm(this.width)); - return node; - } - } - /** - * Converts the math node into an HTML markup string. - */ - - - toMarkup() { - if (this.character) { - return "" + this.character + ""; - } else { - return ""; - } - } - /** - * Converts the math node into a string, similar to innerText. - */ - - - toText() { - if (this.character) { - return this.character; - } else { - return " "; - } - } - -} - -var mathMLTree = { - MathNode, - TextNode, - SpaceNode, - newDocumentFragment -}; - -/** - * This file converts a parse tree into a corresponding MathML tree. The main - * entry point is the `buildMathML` function, which takes a parse tree from the - * parser. - */ - -/** - * Takes a symbol and converts it into a MathML text node after performing - * optional replacement from symbols.js. - */ -var makeText = function makeText(text, mode, options) { - if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === "tt" || options.font && options.font.slice(4, 6) === "tt"))) { - text = symbols[mode][text].replace; - } - - return new mathMLTree.TextNode(text); -}; -/** - * Wrap the given array of nodes in an node if needed, i.e., - * unless the array has length 1. Always returns a single node. - */ - -var makeRow = function makeRow(body) { - if (body.length === 1) { - return body[0]; - } else { - return new mathMLTree.MathNode("mrow", body); - } -}; -/** - * Returns the math variant as a string or null if none is required. - */ - -var getVariant = function getVariant(group, options) { - // Handle \text... font specifiers as best we can. - // MathML has a limited list of allowable mathvariant specifiers; see - // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt - if (options.fontFamily === "texttt") { - return "monospace"; - } else if (options.fontFamily === "textsf") { - if (options.fontShape === "textit" && options.fontWeight === "textbf") { - return "sans-serif-bold-italic"; - } else if (options.fontShape === "textit") { - return "sans-serif-italic"; - } else if (options.fontWeight === "textbf") { - return "bold-sans-serif"; - } else { - return "sans-serif"; - } - } else if (options.fontShape === "textit" && options.fontWeight === "textbf") { - return "bold-italic"; - } else if (options.fontShape === "textit") { - return "italic"; - } else if (options.fontWeight === "textbf") { - return "bold"; - } - - var font = options.font; - - if (!font || font === "mathnormal") { - return null; - } - - var mode = group.mode; - - if (font === "mathit") { - return "italic"; - } else if (font === "boldsymbol") { - return group.type === "textord" ? "bold" : "bold-italic"; - } else if (font === "mathbf") { - return "bold"; - } else if (font === "mathbb") { - return "double-struck"; - } else if (font === "mathfrak") { - return "fraktur"; - } else if (font === "mathscr" || font === "mathcal") { - // MathML makes no distinction between script and calligraphic - return "script"; - } else if (font === "mathsf") { - return "sans-serif"; - } else if (font === "mathtt") { - return "monospace"; - } - - var text = group.text; - - if (utils.contains(["\\imath", "\\jmath"], text)) { - return null; - } - - if (symbols[mode][text] && symbols[mode][text].replace) { - text = symbols[mode][text].replace; - } - - var fontName = buildCommon.fontMap[font].fontName; - - if (getCharacterMetrics(text, fontName, mode)) { - return buildCommon.fontMap[font].variant; - } - - return null; -}; -/** - * Takes a list of nodes, builds them, and returns a list of the generated - * MathML nodes. Also combine consecutive outputs into a single - * tag. - */ - -var buildExpression = function buildExpression(expression, options, isOrdgroup) { - if (expression.length === 1) { - var group = buildGroup(expression[0], options); - - if (isOrdgroup && group instanceof MathNode && group.type === "mo") { - // When TeX writers want to suppress spacing on an operator, - // they often put the operator by itself inside braces. - group.setAttribute("lspace", "0em"); - group.setAttribute("rspace", "0em"); - } - - return [group]; - } - - var groups = []; - var lastGroup; - - for (var i = 0; i < expression.length; i++) { - var _group = buildGroup(expression[i], options); - - if (_group instanceof MathNode && lastGroup instanceof MathNode) { - // Concatenate adjacent s - if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) { - lastGroup.children.push(..._group.children); - continue; // Concatenate adjacent s - } else if (_group.type === 'mn' && lastGroup.type === 'mn') { - lastGroup.children.push(..._group.children); - continue; // Concatenate ... followed by . - } else if (_group.type === 'mi' && _group.children.length === 1 && lastGroup.type === 'mn') { - var child = _group.children[0]; - - if (child instanceof TextNode && child.text === '.') { - lastGroup.children.push(..._group.children); - continue; - } - } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) { - var lastChild = lastGroup.children[0]; - - if (lastChild instanceof TextNode && lastChild.text === '\u0338' && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) { - var _child = _group.children[0]; - - if (_child instanceof TextNode && _child.text.length > 0) { - // Overlay with combining character long solidus - _child.text = _child.text.slice(0, 1) + "\u0338" + _child.text.slice(1); - groups.pop(); - } - } - } - } - - groups.push(_group); - lastGroup = _group; - } - - return groups; -}; -/** - * Equivalent to buildExpression, but wraps the elements in an - * if there's more than one. Returns a single node instead of an array. - */ - -var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) { - return makeRow(buildExpression(expression, options, isOrdgroup)); -}; -/** - * Takes a group from the parser and calls the appropriate groupBuilders function - * on it to produce a MathML node. - */ - -var buildGroup = function buildGroup(group, options) { - if (!group) { - return new mathMLTree.MathNode("mrow"); - } - - if (_mathmlGroupBuilders[group.type]) { - // Call the groupBuilders function - // $FlowFixMe - var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe - - return result; - } else { - throw new ParseError("Got group of unknown type: '" + group.type + "'"); - } -}; -/** - * Takes a full parse tree and settings and builds a MathML representation of - * it. In particular, we put the elements from building the parse tree into a - * tag so we can also include that TeX source as an annotation. - * - * Note that we actually return a domTree element with a `` inside it so - * we can do appropriate styling. - */ - -function buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) { - var expression = buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes - // and add spacing nodes. This is necessary only adjacent to math operators - // like \sin or \lim or to subsup elements that contain math operators. - // MathML takes care of the other spacing issues. - // Wrap up the expression in an mrow so it is presented in the semantics - // tag correctly, unless it's a single or . - - var wrapper; - - if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) { - wrapper = expression[0]; - } else { - wrapper = new mathMLTree.MathNode("mrow", expression); - } // Build a TeX annotation of the source - - - var annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]); - annotation.setAttribute("encoding", "application/x-tex"); - var semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]); - var math = new mathMLTree.MathNode("math", [semantics]); - math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); - - if (isDisplayMode) { - math.setAttribute("display", "block"); - } // You can't style nodes, so we wrap the node in a span. - // NOTE: The span class is not typed to have nodes as children, and - // we don't want to make the children type more generic since the children - // of span are expected to have more fields in `buildHtml` contexts. - - - var wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe - - return buildCommon.makeSpan([wrapperClass], [math]); -} - -var optionsFromSettings = function optionsFromSettings(settings) { - return new Options({ - style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT, - maxSize: settings.maxSize, - minRuleThickness: settings.minRuleThickness - }); -}; - -var displayWrap = function displayWrap(node, settings) { - if (settings.displayMode) { - var classes = ["katex-display"]; - - if (settings.leqno) { - classes.push("leqno"); - } - - if (settings.fleqn) { - classes.push("fleqn"); - } - - node = buildCommon.makeSpan(classes, [node]); - } - - return node; -}; - -var buildTree = function buildTree(tree, expression, settings) { - var options = optionsFromSettings(settings); - var katexNode; - - if (settings.output === "mathml") { - return buildMathML(tree, expression, options, settings.displayMode, true); - } else if (settings.output === "html") { - var htmlNode = buildHTML(tree, options); - katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); - } else { - var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false); - - var _htmlNode = buildHTML(tree, options); - - katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, _htmlNode]); - } - - return displayWrap(katexNode, settings); -}; -var buildHTMLTree = function buildHTMLTree(tree, expression, settings) { - var options = optionsFromSettings(settings); - var htmlNode = buildHTML(tree, options); - var katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); - return displayWrap(katexNode, settings); -}; - -/** - * This file provides support to buildMathML.js and buildHTML.js - * for stretchy wide elements rendered from SVG files - * and other CSS trickery. - */ -var stretchyCodePoint = { - widehat: "^", - widecheck: "ˇ", - widetilde: "~", - utilde: "~", - overleftarrow: "\u2190", - underleftarrow: "\u2190", - xleftarrow: "\u2190", - overrightarrow: "\u2192", - underrightarrow: "\u2192", - xrightarrow: "\u2192", - underbrace: "\u23df", - overbrace: "\u23de", - overgroup: "\u23e0", - undergroup: "\u23e1", - overleftrightarrow: "\u2194", - underleftrightarrow: "\u2194", - xleftrightarrow: "\u2194", - Overrightarrow: "\u21d2", - xRightarrow: "\u21d2", - overleftharpoon: "\u21bc", - xleftharpoonup: "\u21bc", - overrightharpoon: "\u21c0", - xrightharpoonup: "\u21c0", - xLeftarrow: "\u21d0", - xLeftrightarrow: "\u21d4", - xhookleftarrow: "\u21a9", - xhookrightarrow: "\u21aa", - xmapsto: "\u21a6", - xrightharpoondown: "\u21c1", - xleftharpoondown: "\u21bd", - xrightleftharpoons: "\u21cc", - xleftrightharpoons: "\u21cb", - xtwoheadleftarrow: "\u219e", - xtwoheadrightarrow: "\u21a0", - xlongequal: "=", - xtofrom: "\u21c4", - xrightleftarrows: "\u21c4", - xrightequilibrium: "\u21cc", - // Not a perfect match. - xleftequilibrium: "\u21cb", - // None better available. - "\\cdrightarrow": "\u2192", - "\\cdleftarrow": "\u2190", - "\\cdlongequal": "=" -}; - -var mathMLnode = function mathMLnode(label) { - var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\/, '')])]); - node.setAttribute("stretchy", "true"); - return node; -}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. -// Copyright (c) 2009-2010, Design Science, Inc. () -// Copyright (c) 2014-2017 Khan Academy () -// Licensed under the SIL Open Font License, Version 1.1. -// See \nhttp://scripts.sil.org/OFL -// Very Long SVGs -// Many of the KaTeX stretchy wide elements use a long SVG image and an -// overflow: hidden tactic to achieve a stretchy image while avoiding -// distortion of arrowheads or brace corners. -// The SVG typically contains a very long (400 em) arrow. -// The SVG is in a container span that has overflow: hidden, so the span -// acts like a window that exposes only part of the SVG. -// The SVG always has a longer, thinner aspect ratio than the container span. -// After the SVG fills 100% of the height of the container span, -// there is a long arrow shaft left over. That left-over shaft is not shown. -// Instead, it is sliced off because the span's CSS has overflow: hidden. -// Thus, the reader sees an arrow that matches the subject matter width -// without distortion. -// Some functions, such as \cancel, need to vary their aspect ratio. These -// functions do not get the overflow SVG treatment. -// Second Brush Stroke -// Low resolution monitors struggle to display images in fine detail. -// So browsers apply anti-aliasing. A long straight arrow shaft therefore -// will sometimes appear as if it has a blurred edge. -// To mitigate this, these SVG files contain a second "brush-stroke" on the -// arrow shafts. That is, a second long thin rectangular SVG path has been -// written directly on top of each arrow shaft. This reinforcement causes -// some of the screen pixels to display as black instead of the anti-aliased -// gray pixel that a single path would generate. So we get arrow shafts -// whose edges appear to be sharper. -// In the katexImagesData object just below, the dimensions all -// correspond to path geometry inside the relevant SVG. -// For example, \overrightarrow uses the same arrowhead as glyph U+2192 -// from the KaTeX Main font. The scaling factor is 1000. -// That is, inside the font, that arrowhead is 522 units tall, which -// corresponds to 0.522 em inside the document. - - -var katexImagesData = { - // path(s), minWidth, height, align - overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], - overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], - underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], - underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], - xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], - "\\cdrightarrow": [["rightarrow"], 3.0, 522, "xMaxYMin"], - // CD minwwidth2.5pc - xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], - "\\cdleftarrow": [["leftarrow"], 3.0, 522, "xMinYMin"], - Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], - xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], - xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], - overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], - xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], - xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], - overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], - xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], - xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], - xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], - "\\cdlongequal": [["longequal"], 3.0, 334, "xMinYMin"], - xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], - xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], - overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], - overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], - underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548], - underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], - xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], - xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], - xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], - xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], - xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], - xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], - overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], - underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], - overgroup: [["leftgroup", "rightgroup"], 0.888, 342], - undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], - xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], - xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528], - // The next three arrows are from the mhchem package. - // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the - // document as \xrightarrow or \xrightleftharpoons. Those have - // min-length = 1.75em, so we set min-length on these next three to match. - xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901], - xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716], - xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716] -}; - -var groupLength = function groupLength(arg) { - if (arg.type === "ordgroup") { - return arg.body.length; - } else { - return 1; - } -}; - -var svgSpan = function svgSpan(group, options) { - // Create a span with inline SVG for the element. - function buildSvgSpan_() { - var viewBoxWidth = 400000; // default - - var label = group.label.slice(1); - - if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) { - // Each type in the `if` statement corresponds to one of the ParseNode - // types below. This narrowing is required to access `grp.base`. - // $FlowFixMe - var grp = group; // There are four SVG images available for each function. - // Choose a taller image when there are more characters. - - var numChars = groupLength(grp.base); - var viewBoxHeight; - var pathName; - - var _height; - - if (numChars > 5) { - if (label === "widehat" || label === "widecheck") { - viewBoxHeight = 420; - viewBoxWidth = 2364; - _height = 0.42; - pathName = label + "4"; - } else { - viewBoxHeight = 312; - viewBoxWidth = 2340; - _height = 0.34; - pathName = "tilde4"; - } - } else { - var imgIndex = [1, 1, 2, 2, 3, 3][numChars]; - - if (label === "widehat" || label === "widecheck") { - viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex]; - viewBoxHeight = [0, 239, 300, 360, 420][imgIndex]; - _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex]; - pathName = label + imgIndex; - } else { - viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex]; - viewBoxHeight = [0, 260, 286, 306, 312][imgIndex]; - _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex]; - pathName = "tilde" + imgIndex; - } - } - - var path = new PathNode(pathName); - var svgNode = new SvgNode([path], { - "width": "100%", - "height": makeEm(_height), - "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight, - "preserveAspectRatio": "none" - }); - return { - span: buildCommon.makeSvgSpan([], [svgNode], options), - minWidth: 0, - height: _height - }; - } else { - var spans = []; - var data = katexImagesData[label]; - var [paths, _minWidth, _viewBoxHeight] = data; - - var _height2 = _viewBoxHeight / 1000; - - var numSvgChildren = paths.length; - var widthClasses; - var aligns; - - if (numSvgChildren === 1) { - // $FlowFixMe: All these cases must be of the 4-tuple type. - var align1 = data[3]; - widthClasses = ["hide-tail"]; - aligns = [align1]; - } else if (numSvgChildren === 2) { - widthClasses = ["halfarrow-left", "halfarrow-right"]; - aligns = ["xMinYMin", "xMaxYMin"]; - } else if (numSvgChildren === 3) { - widthClasses = ["brace-left", "brace-center", "brace-right"]; - aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"]; - } else { - throw new Error("Correct katexImagesData or update code here to support\n " + numSvgChildren + " children."); - } - - for (var i = 0; i < numSvgChildren; i++) { - var _path = new PathNode(paths[i]); - - var _svgNode = new SvgNode([_path], { - "width": "400em", - "height": makeEm(_height2), - "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight, - "preserveAspectRatio": aligns[i] + " slice" - }); - - var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options); - - if (numSvgChildren === 1) { - return { - span: _span, - minWidth: _minWidth, - height: _height2 - }; - } else { - _span.style.height = makeEm(_height2); - spans.push(_span); - } - } - - return { - span: buildCommon.makeSpan(["stretchy"], spans, options), - minWidth: _minWidth, - height: _height2 - }; - } - } // buildSvgSpan_() - - - var { - span, - minWidth, - height - } = buildSvgSpan_(); // Note that we are returning span.depth = 0. - // Any adjustments relative to the baseline must be done in buildHTML. - - span.height = height; - span.style.height = makeEm(height); - - if (minWidth > 0) { - span.style.minWidth = makeEm(minWidth); - } - - return span; -}; - -var encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) { - // Return an image span for \cancel, \bcancel, \xcancel, \fbox, or \angl - var img; - var totalHeight = inner.height + inner.depth + topPad + bottomPad; - - if (/fbox|color|angl/.test(label)) { - img = buildCommon.makeSpan(["stretchy", label], [], options); - - if (label === "fbox") { - var color = options.color && options.getColor(); - - if (color) { - img.style.borderColor = color; - } - } - } else { - // \cancel, \bcancel, or \xcancel - // Since \cancel's SVG is inline and it omits the viewBox attribute, - // its stroke-width will not vary with span area. - var lines = []; - - if (/^[bx]cancel$/.test(label)) { - lines.push(new LineNode({ - "x1": "0", - "y1": "0", - "x2": "100%", - "y2": "100%", - "stroke-width": "0.046em" - })); - } - - if (/^x?cancel$/.test(label)) { - lines.push(new LineNode({ - "x1": "0", - "y1": "100%", - "x2": "100%", - "y2": "0", - "stroke-width": "0.046em" - })); - } - - var svgNode = new SvgNode(lines, { - "width": "100%", - "height": makeEm(totalHeight) - }); - img = buildCommon.makeSvgSpan([], [svgNode], options); - } - - img.height = totalHeight; - img.style.height = makeEm(totalHeight); - return img; -}; - -var stretchy = { - encloseSpan, - mathMLnode, - svgSpan -}; - -/** - * Asserts that the node is of the given type and returns it with stricter - * typing. Throws if the node's type does not match. - */ -function assertNodeType(node, type) { - if (!node || node.type !== type) { - throw new Error("Expected node of type " + type + ", but got " + (node ? "node of type " + node.type : String(node))); - } // $FlowFixMe, >=0.125 - - - return node; -} -/** - * Returns the node more strictly typed iff it is of the given type. Otherwise, - * returns null. - */ - -function assertSymbolNodeType(node) { - var typedNode = checkSymbolNodeType(node); - - if (!typedNode) { - throw new Error("Expected node of symbol group type, but got " + (node ? "node of type " + node.type : String(node))); - } - - return typedNode; -} -/** - * Returns the node more strictly typed iff it is of the given type. Otherwise, - * returns null. - */ - -function checkSymbolNodeType(node) { - if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) { - // $FlowFixMe - return node; - } - - return null; -} - -// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but -// also "supsub" since an accent can affect super/subscripting. -var htmlBuilder$a = (grp, options) => { - // Accents are handled in the TeXbook pg. 443, rule 12. - var base; - var group; - var supSubGroup; - - if (grp && grp.type === "supsub") { - // If our base is a character box, and we have superscripts and - // subscripts, the supsub will defer to us. In particular, we want - // to attach the superscripts and subscripts to the inner body (so - // that the position of the superscripts and subscripts won't be - // affected by the height of the accent). We accomplish this by - // sticking the base of the accent into the base of the supsub, and - // rendering that, while keeping track of where the accent is. - // The real accent group is the base of the supsub group - group = assertNodeType(grp.base, "accent"); // The character box is the base of the accent group - - base = group.base; // Stick the character box into the base of the supsub group - - grp.base = base; // Rerender the supsub group with its new base, and store that - // result. - - supSubGroup = assertSpan(buildGroup$1(grp, options)); // reset original base - - grp.base = group; - } else { - group = assertNodeType(grp, "accent"); - base = group.base; - } // Build the base group - - - var body = buildGroup$1(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character? - - var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the - // nucleus is not a single character, let s = 0; otherwise set s to the - // kern amount for the nucleus followed by the \skewchar of its font." - // Note that our skew metrics are just the kern between each character - // and the skewchar. - - var skew = 0; - - if (mustShift) { - // If the base is a character box, then we want the skew of the - // innermost character. To do that, we find the innermost character: - var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it - - var baseGroup = buildGroup$1(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol. - - skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we - // removed with getBaseElem might contain things like \color which - // we can't get rid of. - // TODO(emily): Find a better way to get the skew - } - - var accentBelow = group.label === "\\c"; // calculate the amount of space between the body and the accent - - var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent - - var accentBody; - - if (!group.isStretchy) { - var accent; - var width; - - if (group.label === "\\vec") { - // Before version 0.9, \vec used the combining font glyph U+20D7. - // But browsers, especially Safari, are not consistent in how they - // render combining characters when not preceded by a character. - // So now we use an SVG. - // If Safari reforms, we should consider reverting to the glyph. - accent = buildCommon.staticSvg("vec", options); - width = buildCommon.svgData.vec[1]; - } else { - accent = buildCommon.makeOrd({ - mode: group.mode, - text: group.label - }, options, "textord"); - accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to - // shift the accent over to a place we don't want. - - accent.italic = 0; - width = accent.width; - - if (accentBelow) { - clearance += accent.depth; - } - } - - accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be - // at least the width of the accent, and overlap directly onto the - // character without any vertical offset. - - var accentFull = group.label === "\\textcircled"; - - if (accentFull) { - accentBody.classes.push('accent-full'); - clearance = body.height; - } // Shift the accent over by the skew. - - - var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }` - // so that the accent doesn't contribute to the bounding box. - // We need to shift the character by its width (effectively half - // its width) to compensate. - - if (!accentFull) { - left -= width / 2; - } - - accentBody.style.left = makeEm(left); // \textcircled uses the \bigcirc glyph, so it needs some - // vertical adjustment to match LaTeX. - - if (group.label === "\\textcircled") { - accentBody.style.top = ".2em"; - } - - accentBody = buildCommon.makeVList({ - positionType: "firstBaseline", - children: [{ - type: "elem", - elem: body - }, { - type: "kern", - size: -clearance - }, { - type: "elem", - elem: accentBody - }] - }, options); - } else { - accentBody = stretchy.svgSpan(group, options); - accentBody = buildCommon.makeVList({ - positionType: "firstBaseline", - children: [{ - type: "elem", - elem: body - }, { - type: "elem", - elem: accentBody, - wrapperClasses: ["svg-align"], - wrapperStyle: skew > 0 ? { - width: "calc(100% - " + makeEm(2 * skew) + ")", - marginLeft: makeEm(2 * skew) - } : undefined - }] - }, options); - } - - var accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options); - - if (supSubGroup) { - // Here, we replace the "base" child of the supsub with our newly - // generated accent. - supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the - // accent, we manually recalculate height. - - supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not. - - supSubGroup.classes[0] = "mord"; - return supSubGroup; - } else { - return accentWrap; - } -}; - -var mathmlBuilder$9 = (group, options) => { - var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [makeText(group.label, group.mode)]); - var node = new mathMLTree.MathNode("mover", [buildGroup(group.base, options), accentNode]); - node.setAttribute("accent", "true"); - return node; -}; - -var NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(accent => "\\" + accent).join("|")); // Accents - -defineFunction({ - type: "accent", - names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], - props: { - numArgs: 1 - }, - handler: (context, args) => { - var base = normalizeArgument(args[0]); - var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName); - var isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck"; - return { - type: "accent", - mode: context.parser.mode, - label: context.funcName, - isStretchy: isStretchy, - isShifty: isShifty, - base: base - }; - }, - htmlBuilder: htmlBuilder$a, - mathmlBuilder: mathmlBuilder$9 -}); // Text-mode accents - -defineFunction({ - type: "accent", - names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\c", "\\r", "\\H", "\\v", "\\textcircled"], - props: { - numArgs: 1, - allowedInText: true, - allowedInMath: true, - // unless in strict mode - argTypes: ["primitive"] - }, - handler: (context, args) => { - var base = args[0]; - var mode = context.parser.mode; - - if (mode === "math") { - context.parser.settings.reportNonstrict("mathVsTextAccents", "LaTeX's accent " + context.funcName + " works only in text mode"); - mode = "text"; - } - - return { - type: "accent", - mode: mode, - label: context.funcName, - isStretchy: false, - isShifty: true, - base: base - }; - }, - htmlBuilder: htmlBuilder$a, - mathmlBuilder: mathmlBuilder$9 -}); - -// Horizontal overlap functions -defineFunction({ - type: "accentUnder", - names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"], - props: { - numArgs: 1 - }, - handler: (_ref, args) => { - var { - parser, - funcName - } = _ref; - var base = args[0]; - return { - type: "accentUnder", - mode: parser.mode, - label: funcName, - base: base - }; - }, - htmlBuilder: (group, options) => { - // Treat under accents much like underlines. - var innerGroup = buildGroup$1(group.base, options); - var accentBody = stretchy.svgSpan(group, options); - var kern = group.label === "\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns - - var vlist = buildCommon.makeVList({ - positionType: "top", - positionData: innerGroup.height, - children: [{ - type: "elem", - elem: accentBody, - wrapperClasses: ["svg-align"] - }, { - type: "kern", - size: kern - }, { - type: "elem", - elem: innerGroup - }] - }, options); - return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options); - }, - mathmlBuilder: (group, options) => { - var accentNode = stretchy.mathMLnode(group.label); - var node = new mathMLTree.MathNode("munder", [buildGroup(group.base, options), accentNode]); - node.setAttribute("accentunder", "true"); - return node; - } -}); - -// Helper function -var paddedNode = group => { - var node = new mathMLTree.MathNode("mpadded", group ? [group] : []); - node.setAttribute("width", "+0.6em"); - node.setAttribute("lspace", "0.3em"); - return node; -}; // Stretchy arrows with an optional argument - - -defineFunction({ - type: "xArrow", - names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension. - // Direct use of these functions is discouraged and may break someday. - "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium", // The next 3 functions are here only to support the {CD} environment. - "\\\\cdrightarrow", "\\\\cdleftarrow", "\\\\cdlongequal"], - props: { - numArgs: 1, - numOptionalArgs: 1 - }, - - handler(_ref, args, optArgs) { - var { - parser, - funcName - } = _ref; - return { - type: "xArrow", - mode: parser.mode, - label: funcName, - body: args[0], - below: optArgs[0] - }; - }, - - // Flow is unable to correctly infer the type of `group`, even though it's - // unambiguously determined from the passed-in `type` above. - htmlBuilder(group, options) { - var style = options.style; // Build the argument groups in the appropriate style. - // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% - // Some groups can return document fragments. Handle those by wrapping - // them in a span. - - var newOptions = options.havingStyle(style.sup()); - var upperGroup = buildCommon.wrapFragment(buildGroup$1(group.body, newOptions, options), options); - var arrowPrefix = group.label.slice(0, 2) === "\\x" ? "x" : "cd"; - upperGroup.classes.push(arrowPrefix + "-arrow-pad"); - var lowerGroup; - - if (group.below) { - // Build the lower group - newOptions = options.havingStyle(style.sub()); - lowerGroup = buildCommon.wrapFragment(buildGroup$1(group.below, newOptions, options), options); - lowerGroup.classes.push(arrowPrefix + "-arrow-pad"); - } - - var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0. - // The point we want on the math axis is at 0.5 * arrowBody.height. - - var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi - - var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu - - if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") { - upperShift -= upperGroup.depth; // shift up if depth encroaches - } // Generate the vlist - - - var vlist; - - if (lowerGroup) { - var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111; - vlist = buildCommon.makeVList({ - positionType: "individualShift", - children: [{ - type: "elem", - elem: upperGroup, - shift: upperShift - }, { - type: "elem", - elem: arrowBody, - shift: arrowShift - }, { - type: "elem", - elem: lowerGroup, - shift: lowerShift - }] - }, options); - } else { - vlist = buildCommon.makeVList({ - positionType: "individualShift", - children: [{ - type: "elem", - elem: upperGroup, - shift: upperShift - }, { - type: "elem", - elem: arrowBody, - shift: arrowShift - }] - }, options); - } // $FlowFixMe: Replace this with passing "svg-align" into makeVList. - - - vlist.children[0].children[0].children[1].classes.push("svg-align"); - return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options); - }, - - mathmlBuilder(group, options) { - var arrowNode = stretchy.mathMLnode(group.label); - arrowNode.setAttribute("minsize", group.label.charAt(0) === "x" ? "1.75em" : "3.0em"); - var node; - - if (group.body) { - var upperNode = paddedNode(buildGroup(group.body, options)); - - if (group.below) { - var lowerNode = paddedNode(buildGroup(group.below, options)); - node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]); - } else { - node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]); - } - } else if (group.below) { - var _lowerNode = paddedNode(buildGroup(group.below, options)); - - node = new mathMLTree.MathNode("munder", [arrowNode, _lowerNode]); - } else { - // This should never happen. - // Parser.js throws an error if there is no argument. - node = paddedNode(); - node = new mathMLTree.MathNode("mover", [arrowNode, node]); - } - - return node; - } - -}); - -var makeSpan = buildCommon.makeSpan; - -function htmlBuilder$9(group, options) { - var elements = buildExpression$1(group.body, options, true); - return makeSpan([group.mclass], elements, options); -} - -function mathmlBuilder$8(group, options) { - var node; - var inner = buildExpression(group.body, options); - - if (group.mclass === "minner") { - node = new mathMLTree.MathNode("mpadded", inner); - } else if (group.mclass === "mord") { - if (group.isCharacterBox) { - node = inner[0]; - node.type = "mi"; - } else { - node = new mathMLTree.MathNode("mi", inner); - } - } else { - if (group.isCharacterBox) { - node = inner[0]; - node.type = "mo"; - } else { - node = new mathMLTree.MathNode("mo", inner); - } // Set spacing based on what is the most likely adjacent atom type. - // See TeXbook p170. - - - if (group.mclass === "mbin") { - node.attributes.lspace = "0.22em"; // medium space - - node.attributes.rspace = "0.22em"; - } else if (group.mclass === "mpunct") { - node.attributes.lspace = "0em"; - node.attributes.rspace = "0.17em"; // thinspace - } else if (group.mclass === "mopen" || group.mclass === "mclose") { - node.attributes.lspace = "0em"; - node.attributes.rspace = "0em"; - } else if (group.mclass === "minner") { - node.attributes.lspace = "0.0556em"; // 1 mu is the most likely option - - node.attributes.width = "+0.1111em"; - } // MathML default space is 5/18 em, so needs no action. - // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo - - } - - return node; -} // Math class commands except \mathop - - -defineFunction({ - type: "mclass", - names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], - props: { - numArgs: 1, - primitive: true - }, - - handler(_ref, args) { - var { - parser, - funcName - } = _ref; - var body = args[0]; - return { - type: "mclass", - mode: parser.mode, - mclass: "m" + funcName.slice(5), - // TODO(kevinb): don't prefix with 'm' - body: ordargument(body), - isCharacterBox: utils.isCharacterBox(body) - }; - }, - - htmlBuilder: htmlBuilder$9, - mathmlBuilder: mathmlBuilder$8 -}); -var binrelClass = arg => { - // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument. - // (by rendering separately and with {}s before and after, and measuring - // the change in spacing). We'll do roughly the same by detecting the - // atom type directly. - var atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg; - - if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) { - return "m" + atom.family; - } else { - return "mord"; - } -}; // \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord. -// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX. - -defineFunction({ - type: "mclass", - names: ["\\@binrel"], - props: { - numArgs: 2 - }, - - handler(_ref2, args) { - var { - parser - } = _ref2; - return { - type: "mclass", - mode: parser.mode, - mclass: binrelClass(args[0]), - body: ordargument(args[1]), - isCharacterBox: utils.isCharacterBox(args[1]) - }; - } - -}); // Build a relation or stacked op by placing one symbol on top of another - -defineFunction({ - type: "mclass", - names: ["\\stackrel", "\\overset", "\\underset"], - props: { - numArgs: 2 - }, - - handler(_ref3, args) { - var { - parser, - funcName - } = _ref3; - var baseArg = args[1]; - var shiftedArg = args[0]; - var mclass; - - if (funcName !== "\\stackrel") { - // LaTeX applies \binrel spacing to \overset and \underset. - mclass = binrelClass(baseArg); - } else { - mclass = "mrel"; // for \stackrel - } - - var baseOp = { - type: "op", - mode: baseArg.mode, - limits: true, - alwaysHandleSupSub: true, - parentIsSupSub: false, - symbol: false, - suppressBaseShift: funcName !== "\\stackrel", - body: ordargument(baseArg) - }; - var supsub = { - type: "supsub", - mode: shiftedArg.mode, - base: baseOp, - sup: funcName === "\\underset" ? null : shiftedArg, - sub: funcName === "\\underset" ? shiftedArg : null - }; - return { - type: "mclass", - mode: parser.mode, - mclass, - body: [supsub], - isCharacterBox: utils.isCharacterBox(supsub) - }; - }, - - htmlBuilder: htmlBuilder$9, - mathmlBuilder: mathmlBuilder$8 -}); - -// \pmb is a simulation of bold font. -// The version of \pmb in ambsy.sty works by typesetting three copies -// with small offsets. We use CSS text-shadow. -// It's a hack. Not as good as a real bold font. Better than nothing. -defineFunction({ - type: "pmb", - names: ["\\pmb"], - props: { - numArgs: 1, - allowedInText: true - }, - - handler(_ref, args) { - var { - parser - } = _ref; - return { - type: "pmb", - mode: parser.mode, - mclass: binrelClass(args[0]), - body: ordargument(args[0]) - }; - }, - - htmlBuilder(group, options) { - var elements = buildExpression$1(group.body, options, true); - var node = buildCommon.makeSpan([group.mclass], elements, options); - node.style.textShadow = "0.02em 0.01em 0.04px"; - return node; - }, - - mathmlBuilder(group, style) { - var inner = buildExpression(group.body, style); // Wrap with an element. - - var node = new mathMLTree.MathNode("mstyle", inner); - node.setAttribute("style", "text-shadow: 0.02em 0.01em 0.04px"); - return node; - } - -}); - -var cdArrowFunctionName = { - ">": "\\\\cdrightarrow", - "<": "\\\\cdleftarrow", - "=": "\\\\cdlongequal", - "A": "\\uparrow", - "V": "\\downarrow", - "|": "\\Vert", - ".": "no arrow" -}; - -var newCell = () => { - // Create an empty cell, to be filled below with parse nodes. - // The parseTree from this module must be constructed like the - // one created by parseArray(), so an empty CD cell must - // be a ParseNode<"styling">. And CD is always displaystyle. - // So these values are fixed and flow can do implicit typing. - return { - type: "styling", - body: [], - mode: "math", - style: "display" - }; -}; - -var isStartOfArrow = node => { - return node.type === "textord" && node.text === "@"; -}; - -var isLabelEnd = (node, endChar) => { - return (node.type === "mathord" || node.type === "atom") && node.text === endChar; -}; - -function cdArrow(arrowChar, labels, parser) { - // Return a parse tree of an arrow and its labels. - // This acts in a way similar to a macro expansion. - var funcName = cdArrowFunctionName[arrowChar]; - - switch (funcName) { - case "\\\\cdrightarrow": - case "\\\\cdleftarrow": - return parser.callFunction(funcName, [labels[0]], [labels[1]]); - - case "\\uparrow": - case "\\downarrow": - { - var leftLabel = parser.callFunction("\\\\cdleft", [labels[0]], []); - var bareArrow = { - type: "atom", - text: funcName, - mode: "math", - family: "rel" - }; - var sizedArrow = parser.callFunction("\\Big", [bareArrow], []); - var rightLabel = parser.callFunction("\\\\cdright", [labels[1]], []); - var arrowGroup = { - type: "ordgroup", - mode: "math", - body: [leftLabel, sizedArrow, rightLabel] - }; - return parser.callFunction("\\\\cdparent", [arrowGroup], []); - } - - case "\\\\cdlongequal": - return parser.callFunction("\\\\cdlongequal", [], []); - - case "\\Vert": - { - var arrow = { - type: "textord", - text: "\\Vert", - mode: "math" - }; - return parser.callFunction("\\Big", [arrow], []); - } - - default: - return { - type: "textord", - text: " ", - mode: "math" - }; - } -} - -function parseCD(parser) { - // Get the array's parse nodes with \\ temporarily mapped to \cr. - var parsedRows = []; - parser.gullet.beginGroup(); - parser.gullet.macros.set("\\cr", "\\\\\\relax"); - parser.gullet.beginGroup(); - - while (true) { - // eslint-disable-line no-constant-condition - // Get the parse nodes for the next row. - parsedRows.push(parser.parseExpression(false, "\\\\")); - parser.gullet.endGroup(); - parser.gullet.beginGroup(); - var next = parser.fetch().text; - - if (next === "&" || next === "\\\\") { - parser.consume(); - } else if (next === "\\end") { - if (parsedRows[parsedRows.length - 1].length === 0) { - parsedRows.pop(); // final row ended in \\ - } - - break; - } else { - throw new ParseError("Expected \\\\ or \\cr or \\end", parser.nextToken); - } - } - - var row = []; - var body = [row]; // Loop thru the parse nodes. Collect them into cells and arrows. - - for (var i = 0; i < parsedRows.length; i++) { - // Start a new row. - var rowNodes = parsedRows[i]; // Create the first cell. - - var cell = newCell(); - - for (var j = 0; j < rowNodes.length; j++) { - if (!isStartOfArrow(rowNodes[j])) { - // If a parseNode is not an arrow, it goes into a cell. - cell.body.push(rowNodes[j]); - } else { - // Parse node j is an "@", the start of an arrow. - // Before starting on the arrow, push the cell into `row`. - row.push(cell); // Now collect parseNodes into an arrow. - // The character after "@" defines the arrow type. - - j += 1; - var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them. - - var labels = new Array(2); - labels[0] = { - type: "ordgroup", - mode: "math", - body: [] - }; - labels[1] = { - type: "ordgroup", - mode: "math", - body: [] - }; // Process the arrow. - - if ("=|.".indexOf(arrowChar) > -1) ; else if ("<>AV".indexOf(arrowChar) > -1) { - // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take - // two optional labels. E.g. the right-point arrow syntax is - // really: @>{optional label}>{optional label}> - // Collect parseNodes into labels. - for (var labelNum = 0; labelNum < 2; labelNum++) { - var inLabel = true; - - for (var k = j + 1; k < rowNodes.length; k++) { - if (isLabelEnd(rowNodes[k], arrowChar)) { - inLabel = false; - j = k; - break; - } - - if (isStartOfArrow(rowNodes[k])) { - throw new ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[k]); - } - - labels[labelNum].body.push(rowNodes[k]); - } - - if (inLabel) { - // isLabelEnd never returned a true. - throw new ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[j]); - } - } - } else { - throw new ParseError("Expected one of \"<>AV=|.\" after @", rowNodes[j]); - } // Now join the arrow to its labels. - - - var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in ParseNode<"styling">. - // This is done to match parseArray() behavior. - - var wrappedArrow = { - type: "styling", - body: [arrow], - mode: "math", - style: "display" // CD is always displaystyle. - - }; - row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that - // is not an arrow gets collected into a cell. So create an empty - // cell now. It will collect upcoming parseNodes. - - cell = newCell(); - } - } - - if (i % 2 === 0) { - // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell - // The last cell is not yet pushed into `row`, so: - row.push(cell); - } else { - // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow - // Remove the empty cell that was placed at the beginning of `row`. - row.shift(); - } - - row = []; - body.push(row); - } // End row group - - - parser.gullet.endGroup(); // End array group defining \\ - - parser.gullet.endGroup(); // define column separation. - - var cols = new Array(body[0].length).fill({ - type: "align", - align: "c", - pregap: 0.25, - // CD package sets \enskip between columns. - postgap: 0.25 // So pre and post each get half an \enskip, i.e. 0.25em. - - }); - return { - type: "array", - mode: "math", - body, - arraystretch: 1, - addJot: true, - rowGaps: [null], - cols, - colSeparationType: "CD", - hLinesBeforeRow: new Array(body.length + 1).fill([]) - }; -} // The functions below are not available for general use. -// They are here only for internal use by the {CD} environment in placing labels -// next to vertical arrows. -// We don't need any such functions for horizontal arrows because we can reuse -// the functionality that already exists for extensible arrows. - -defineFunction({ - type: "cdlabel", - names: ["\\\\cdleft", "\\\\cdright"], - props: { - numArgs: 1 - }, - - handler(_ref, args) { - var { - parser, - funcName - } = _ref; - return { - type: "cdlabel", - mode: parser.mode, - side: funcName.slice(4), - label: args[0] - }; - }, - - htmlBuilder(group, options) { - var newOptions = options.havingStyle(options.style.sup()); - var label = buildCommon.wrapFragment(buildGroup$1(group.label, newOptions, options), options); - label.classes.push("cd-label-" + group.side); - label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set - // by the arrow height, not by the label. - - label.height = 0; - label.depth = 0; - return label; - }, - - mathmlBuilder(group, options) { - var label = new mathMLTree.MathNode("mrow", [buildGroup(group.label, options)]); - label = new mathMLTree.MathNode("mpadded", [label]); - label.setAttribute("width", "0"); - - if (group.side === "left") { - label.setAttribute("lspace", "-1width"); - } // We have to guess at vertical alignment. We know the arrow is 1.8em tall, - // But we don't know the height or depth of the label. - - - label.setAttribute("voffset", "0.7em"); - label = new mathMLTree.MathNode("mstyle", [label]); - label.setAttribute("displaystyle", "false"); - label.setAttribute("scriptlevel", "1"); - return label; - } - -}); -defineFunction({ - type: "cdlabelparent", - names: ["\\\\cdparent"], - props: { - numArgs: 1 - }, - - handler(_ref2, args) { - var { - parser - } = _ref2; - return { - type: "cdlabelparent", - mode: parser.mode, - fragment: args[0] - }; - }, - - htmlBuilder(group, options) { - // Wrap the vertical arrow and its labels. - // The parent gets position: relative. The child gets position: absolute. - // So CSS can locate the label correctly. - var parent = buildCommon.wrapFragment(buildGroup$1(group.fragment, options), options); - parent.classes.push("cd-vert-arrow"); - return parent; - }, - - mathmlBuilder(group, options) { - return new mathMLTree.MathNode("mrow", [buildGroup(group.fragment, options)]); - } - -}); - -// {123} and converts into symbol with code 123. It is used by the *macro* -// \char defined in macros.js. - -defineFunction({ - type: "textord", - names: ["\\@char"], - props: { - numArgs: 1, - allowedInText: true - }, - - handler(_ref, args) { - var { - parser - } = _ref; - var arg = assertNodeType(args[0], "ordgroup"); - var group = arg.body; - var number = ""; - - for (var i = 0; i < group.length; i++) { - var node = assertNodeType(group[i], "textord"); - number += node.text; - } - - var code = parseInt(number); - var text; - - if (isNaN(code)) { - throw new ParseError("\\@char has non-numeric argument " + number); // If we drop IE support, the following code could be replaced with - // text = String.fromCodePoint(code) - } else if (code < 0 || code >= 0x10ffff) { - throw new ParseError("\\@char with invalid code point " + number); - } else if (code <= 0xffff) { - text = String.fromCharCode(code); - } else { - // Astral code point; split into surrogate halves - code -= 0x10000; - text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00); - } - - return { - type: "textord", - mode: parser.mode, - text: text - }; - } - -}); - -var htmlBuilder$8 = (group, options) => { - var elements = buildExpression$1(group.body, options.withColor(group.color), false); // \color isn't supposed to affect the type of the elements it contains. - // To accomplish this, we wrap the results in a fragment, so the inner - // elements will be able to directly interact with their neighbors. For - // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` - - return buildCommon.makeFragment(elements); -}; - -var mathmlBuilder$7 = (group, options) => { - var inner = buildExpression(group.body, options.withColor(group.color)); - var node = new mathMLTree.MathNode("mstyle", inner); - node.setAttribute("mathcolor", group.color); - return node; -}; - -defineFunction({ - type: "color", - names: ["\\textcolor"], - props: { - numArgs: 2, - allowedInText: true, - argTypes: ["color", "original"] - }, - - handler(_ref, args) { - var { - parser - } = _ref; - var color = assertNodeType(args[0], "color-token").color; - var body = args[1]; - return { - type: "color", - mode: parser.mode, - color, - body: ordargument(body) - }; - }, - - htmlBuilder: htmlBuilder$8, - mathmlBuilder: mathmlBuilder$7 -}); -defineFunction({ - type: "color", - names: ["\\color"], - props: { - numArgs: 1, - allowedInText: true, - argTypes: ["color"] - }, - - handler(_ref2, args) { - var { - parser, - breakOnTokenText - } = _ref2; - var color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current - // color, mimicking the behavior of color.sty. - // This is currently used just to correctly color a \right - // that follows a \color command. - - parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored. - - var body = parser.parseExpression(true, breakOnTokenText); - return { - type: "color", - mode: parser.mode, - color, - body - }; - }, - - htmlBuilder: htmlBuilder$8, - mathmlBuilder: mathmlBuilder$7 -}); - -// Row breaks within tabular environments, and line breaks at top level - -defineFunction({ - type: "cr", - names: ["\\\\"], - props: { - numArgs: 0, - numOptionalArgs: 0, - allowedInText: true - }, - - handler(_ref, args, optArgs) { - var { - parser - } = _ref; - var size = parser.gullet.future().text === "[" ? parser.parseSizeGroup(true) : null; - var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " + "does nothing in display mode"); - return { - type: "cr", - mode: parser.mode, - newLine, - size: size && assertNodeType(size, "size").value - }; - }, - - // The following builders are called only at the top level, - // not within tabular/array environments. - htmlBuilder(group, options) { - var span = buildCommon.makeSpan(["mspace"], [], options); - - if (group.newLine) { - span.classes.push("newline"); - - if (group.size) { - span.style.marginTop = makeEm(calculateSize(group.size, options)); - } - } - - return span; - }, - - mathmlBuilder(group, options) { - var node = new mathMLTree.MathNode("mspace"); - - if (group.newLine) { - node.setAttribute("linebreak", "newline"); - - if (group.size) { - node.setAttribute("height", makeEm(calculateSize(group.size, options))); - } - } - - return node; - } - -}); - -var globalMap = { - "\\global": "\\global", - "\\long": "\\\\globallong", - "\\\\globallong": "\\\\globallong", - "\\def": "\\gdef", - "\\gdef": "\\gdef", - "\\edef": "\\xdef", - "\\xdef": "\\xdef", - "\\let": "\\\\globallet", - "\\futurelet": "\\\\globalfuture" -}; - -var checkControlSequence = tok => { - var name = tok.text; - - if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { - throw new ParseError("Expected a control sequence", tok); - } - - return name; -}; - -var getRHS = parser => { - var tok = parser.gullet.popToken(); - - if (tok.text === "=") { - // consume optional equals - tok = parser.gullet.popToken(); - - if (tok.text === " ") { - // consume one optional space - tok = parser.gullet.popToken(); - } - } - - return tok; -}; - -var letCommand = (parser, name, tok, global) => { - var macro = parser.gullet.macros.get(tok.text); - - if (macro == null) { - // don't expand it later even if a macro with the same name is defined - // e.g., \let\foo=\frac \def\frac{\relax} \frac12 - tok.noexpand = true; - macro = { - tokens: [tok], - numArgs: 0, - // reproduce the same behavior in expansion - unexpandable: !parser.gullet.isExpandable(tok.text) - }; - } - - parser.gullet.macros.set(name, macro, global); -}; // -> | -// -> |\global -// -> | -// -> \global|\long|\outer - - -defineFunction({ - type: "internal", - names: ["\\global", "\\long", "\\\\globallong" // can’t be entered directly - ], - props: { - numArgs: 0, - allowedInText: true - }, - - handler(_ref) { - var { - parser, - funcName - } = _ref; - parser.consumeSpaces(); - var token = parser.fetch(); - - if (globalMap[token.text]) { - // KaTeX doesn't have \par, so ignore \long - if (funcName === "\\global" || funcName === "\\\\globallong") { - token.text = globalMap[token.text]; - } - - return assertNodeType(parser.parseFunction(), "internal"); - } - - throw new ParseError("Invalid token after macro prefix", token); - } - -}); // Basic support for macro definitions: \def, \gdef, \edef, \xdef -// -> -// -> \def|\gdef|\edef|\xdef -// -> - -defineFunction({ - type: "internal", - names: ["\\def", "\\gdef", "\\edef", "\\xdef"], - props: { - numArgs: 0, - allowedInText: true, - primitive: true - }, - - handler(_ref2) { - var { - parser, - funcName - } = _ref2; - var tok = parser.gullet.popToken(); - var name = tok.text; - - if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { - throw new ParseError("Expected a control sequence", tok); - } - - var numArgs = 0; - var insert; - var delimiters = [[]]; // contains no braces - - while (parser.gullet.future().text !== "{") { - tok = parser.gullet.popToken(); - - if (tok.text === "#") { - // If the very last character of the is #, so that - // this # is immediately followed by {, TeX will behave as if the { - // had been inserted at the right end of both the parameter text - // and the replacement text. - if (parser.gullet.future().text === "{") { - insert = parser.gullet.future(); - delimiters[numArgs].push("{"); - break; - } // A parameter, the first appearance of # must be followed by 1, - // the next by 2, and so on; up to nine #’s are allowed - - - tok = parser.gullet.popToken(); - - if (!/^[1-9]$/.test(tok.text)) { - throw new ParseError("Invalid argument number \"" + tok.text + "\""); - } - - if (parseInt(tok.text) !== numArgs + 1) { - throw new ParseError("Argument number \"" + tok.text + "\" out of order"); - } - - numArgs++; - delimiters.push([]); - } else if (tok.text === "EOF") { - throw new ParseError("Expected a macro definition"); - } else { - delimiters[numArgs].push(tok.text); - } - } // replacement text, enclosed in '{' and '}' and properly nested - - - var { - tokens - } = parser.gullet.consumeArg(); - - if (insert) { - tokens.unshift(insert); - } - - if (funcName === "\\edef" || funcName === "\\xdef") { - tokens = parser.gullet.expandTokens(tokens); - tokens.reverse(); // to fit in with stack order - } // Final arg is the expansion of the macro - - - parser.gullet.macros.set(name, { - tokens, - numArgs, - delimiters - }, funcName === globalMap[funcName]); - return { - type: "internal", - mode: parser.mode - }; - } - -}); // -> -// -> \futurelet -// | \let -// -> |= - -defineFunction({ - type: "internal", - names: ["\\let", "\\\\globallet" // can’t be entered directly - ], - props: { - numArgs: 0, - allowedInText: true, - primitive: true - }, - - handler(_ref3) { - var { - parser, - funcName - } = _ref3; - var name = checkControlSequence(parser.gullet.popToken()); - parser.gullet.consumeSpaces(); - var tok = getRHS(parser); - letCommand(parser, name, tok, funcName === "\\\\globallet"); - return { - type: "internal", - mode: parser.mode - }; - } - -}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf - -defineFunction({ - type: "internal", - names: ["\\futurelet", "\\\\globalfuture" // can’t be entered directly - ], - props: { - numArgs: 0, - allowedInText: true, - primitive: true - }, - - handler(_ref4) { - var { - parser, - funcName - } = _ref4; - var name = checkControlSequence(parser.gullet.popToken()); - var middle = parser.gullet.popToken(); - var tok = parser.gullet.popToken(); - letCommand(parser, name, tok, funcName === "\\\\globalfuture"); - parser.gullet.pushToken(tok); - parser.gullet.pushToken(middle); - return { - type: "internal", - mode: parser.mode - }; - } - -}); - -/** - * This file deals with creating delimiters of various sizes. The TeXbook - * discusses these routines on page 441-442, in the "Another subroutine sets box - * x to a specified variable delimiter" paragraph. - * - * There are three main routines here. `makeSmallDelim` makes a delimiter in the - * normal font, but in either text, script, or scriptscript style. - * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, - * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of - * smaller pieces that are stacked on top of one another. - * - * The functions take a parameter `center`, which determines if the delimiter - * should be centered around the axis. - * - * Then, there are three exposed functions. `sizedDelim` makes a delimiter in - * one of the given sizes. This is used for things like `\bigl`. - * `customSizedDelim` makes a delimiter with a given total height+depth. It is - * called in places like `\sqrt`. `leftRightDelim` makes an appropriate - * delimiter which surrounds an expression of a given height an depth. It is - * used in `\left` and `\right`. - */ - -/** - * Get the metrics for a given symbol and font, after transformation (i.e. - * after following replacement from symbols.js) - */ -var getMetrics = function getMetrics(symbol, font, mode) { - var replace = symbols.math[symbol] && symbols.math[symbol].replace; - var metrics = getCharacterMetrics(replace || symbol, font, mode); - - if (!metrics) { - throw new Error("Unsupported symbol " + symbol + " and font size " + font + "."); - } - - return metrics; -}; -/** - * Puts a delimiter span in a given style, and adds appropriate height, depth, - * and maxFontSizes. - */ - - -var styleWrap = function styleWrap(delim, toStyle, options, classes) { - var newOptions = options.havingBaseStyle(toStyle); - var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options); - var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; - span.height *= delimSizeMultiplier; - span.depth *= delimSizeMultiplier; - span.maxFontSize = newOptions.sizeMultiplier; - return span; -}; - -var centerSpan = function centerSpan(span, options, style) { - var newOptions = options.havingBaseStyle(style); - var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; - span.classes.push("delimcenter"); - span.style.top = makeEm(shift); - span.height -= shift; - span.depth += shift; -}; -/** - * Makes a small delimiter. This is a delimiter that comes in the Main-Regular - * font, but is restyled to either be in textstyle, scriptstyle, or - * scriptscriptstyle. - */ - - -var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) { - var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options); - var span = styleWrap(text, style, options, classes); - - if (center) { - centerSpan(span, options, style); - } - - return span; -}; -/** - * Builds a symbol in the given font size (note size is an integer) - */ - - -var mathrmSize = function mathrmSize(value, size, mode, options) { - return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options); -}; -/** - * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, - * Size3, or Size4 fonts. It is always rendered in textstyle. - */ - - -var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) { - var inner = mathrmSize(delim, size, mode, options); - var span = styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), Style$1.TEXT, options, classes); - - if (center) { - centerSpan(span, options, Style$1.TEXT); - } - - return span; -}; -/** - * Make a span from a font glyph with the given offset and in the given font. - * This is used in makeStackedDelim to make the stacking pieces for the delimiter. - */ - - -var makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) { - var sizeClass; // Apply the correct CSS class to choose the right font. - - if (font === "Size1-Regular") { - sizeClass = "delim-size1"; - } else - /* if (font === "Size4-Regular") */ - { - sizeClass = "delim-size4"; - } - - var corner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element - // in the appropriate tag that VList uses. - - return { - type: "elem", - elem: corner - }; -}; - -var makeInner = function makeInner(ch, height, options) { - // Create a span with inline SVG for the inner part of a tall stacked delimiter. - var width = fontMetricsData['Size4-Regular'][ch.charCodeAt(0)] ? fontMetricsData['Size4-Regular'][ch.charCodeAt(0)][4] : fontMetricsData['Size1-Regular'][ch.charCodeAt(0)][4]; - var path = new PathNode("inner", innerPath(ch, Math.round(1000 * height))); - var svgNode = new SvgNode([path], { - "width": makeEm(width), - "height": makeEm(height), - // Override CSS rule `.katex svg { width: 100% }` - "style": "width:" + makeEm(width), - "viewBox": "0 0 " + 1000 * width + " " + Math.round(1000 * height), - "preserveAspectRatio": "xMinYMin" - }); - var span = buildCommon.makeSvgSpan([], [svgNode], options); - span.height = height; - span.style.height = makeEm(height); - span.style.width = makeEm(width); - return { - type: "elem", - elem: span - }; -}; // Helpers for makeStackedDelim - - -var lapInEms = 0.008; -var lap = { - type: "kern", - size: -1 * lapInEms -}; -var verts = ["|", "\\lvert", "\\rvert", "\\vert"]; -var doubleVerts = ["\\|", "\\lVert", "\\rVert", "\\Vert"]; -/** - * Make a stacked delimiter out of a given delimiter, with the total height at - * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. - */ - -var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) { - // There are four parts, the top, an optional middle, a repeated part, and a - // bottom. - var top; - var middle; - var repeat; - var bottom; - var svgLabel = ""; - var viewBoxWidth = 0; - top = repeat = bottom = delim; - middle = null; // Also keep track of what font the delimiters are in - - var font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use - // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the - // repeats of the arrows - - if (delim === "\\uparrow") { - repeat = bottom = "\u23d0"; - } else if (delim === "\\Uparrow") { - repeat = bottom = "\u2016"; - } else if (delim === "\\downarrow") { - top = repeat = "\u23d0"; - } else if (delim === "\\Downarrow") { - top = repeat = "\u2016"; - } else if (delim === "\\updownarrow") { - top = "\\uparrow"; - repeat = "\u23d0"; - bottom = "\\downarrow"; - } else if (delim === "\\Updownarrow") { - top = "\\Uparrow"; - repeat = "\u2016"; - bottom = "\\Downarrow"; - } else if (utils.contains(verts, delim)) { - repeat = "\u2223"; - svgLabel = "vert"; - viewBoxWidth = 333; - } else if (utils.contains(doubleVerts, delim)) { - repeat = "\u2225"; - svgLabel = "doublevert"; - viewBoxWidth = 556; - } else if (delim === "[" || delim === "\\lbrack") { - top = "\u23a1"; - repeat = "\u23a2"; - bottom = "\u23a3"; - font = "Size4-Regular"; - svgLabel = "lbrack"; - viewBoxWidth = 667; - } else if (delim === "]" || delim === "\\rbrack") { - top = "\u23a4"; - repeat = "\u23a5"; - bottom = "\u23a6"; - font = "Size4-Regular"; - svgLabel = "rbrack"; - viewBoxWidth = 667; - } else if (delim === "\\lfloor" || delim === "\u230a") { - repeat = top = "\u23a2"; - bottom = "\u23a3"; - font = "Size4-Regular"; - svgLabel = "lfloor"; - viewBoxWidth = 667; - } else if (delim === "\\lceil" || delim === "\u2308") { - top = "\u23a1"; - repeat = bottom = "\u23a2"; - font = "Size4-Regular"; - svgLabel = "lceil"; - viewBoxWidth = 667; - } else if (delim === "\\rfloor" || delim === "\u230b") { - repeat = top = "\u23a5"; - bottom = "\u23a6"; - font = "Size4-Regular"; - svgLabel = "rfloor"; - viewBoxWidth = 667; - } else if (delim === "\\rceil" || delim === "\u2309") { - top = "\u23a4"; - repeat = bottom = "\u23a5"; - font = "Size4-Regular"; - svgLabel = "rceil"; - viewBoxWidth = 667; - } else if (delim === "(" || delim === "\\lparen") { - top = "\u239b"; - repeat = "\u239c"; - bottom = "\u239d"; - font = "Size4-Regular"; - svgLabel = "lparen"; - viewBoxWidth = 875; - } else if (delim === ")" || delim === "\\rparen") { - top = "\u239e"; - repeat = "\u239f"; - bottom = "\u23a0"; - font = "Size4-Regular"; - svgLabel = "rparen"; - viewBoxWidth = 875; - } else if (delim === "\\{" || delim === "\\lbrace") { - top = "\u23a7"; - middle = "\u23a8"; - bottom = "\u23a9"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } else if (delim === "\\}" || delim === "\\rbrace") { - top = "\u23ab"; - middle = "\u23ac"; - bottom = "\u23ad"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } else if (delim === "\\lgroup" || delim === "\u27ee") { - top = "\u23a7"; - bottom = "\u23a9"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } else if (delim === "\\rgroup" || delim === "\u27ef") { - top = "\u23ab"; - bottom = "\u23ad"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } else if (delim === "\\lmoustache" || delim === "\u23b0") { - top = "\u23a7"; - bottom = "\u23ad"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } else if (delim === "\\rmoustache" || delim === "\u23b1") { - top = "\u23ab"; - bottom = "\u23a9"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } // Get the metrics of the four sections - - - var topMetrics = getMetrics(top, font, mode); - var topHeightTotal = topMetrics.height + topMetrics.depth; - var repeatMetrics = getMetrics(repeat, font, mode); - var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; - var bottomMetrics = getMetrics(bottom, font, mode); - var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; - var middleHeightTotal = 0; - var middleFactor = 1; - - if (middle !== null) { - var middleMetrics = getMetrics(middle, font, mode); - middleHeightTotal = middleMetrics.height + middleMetrics.depth; - middleFactor = 2; // repeat symmetrically above and below middle - } // Calculate the minimal height that the delimiter can have. - // It is at least the size of the top, bottom, and optional middle combined. - - - var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need - - var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols - - var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note - // that in this context, "center" means that the delimiter should be - // centered around the axis in the current style, while normally it is - // centered around the axis in textstyle. - - var axisHeight = options.fontMetrics().axisHeight; - - if (center) { - axisHeight *= options.sizeMultiplier; - } // Calculate the depth - - - var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist - // Keep a list of the pieces of the stacked delimiter - - var stack = []; - - if (svgLabel.length > 0) { - // Instead of stacking glyphs, create a single SVG. - // This evades browser problems with imprecise positioning of spans. - var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal; - var viewBoxHeight = Math.round(realHeightTotal * 1000); - var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000)); - var path = new PathNode(svgLabel, pathStr); - var width = (viewBoxWidth / 1000).toFixed(3) + "em"; - var height = (viewBoxHeight / 1000).toFixed(3) + "em"; - var svg = new SvgNode([path], { - "width": width, - "height": height, - "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight - }); - var wrapper = buildCommon.makeSvgSpan([], [svg], options); - wrapper.height = viewBoxHeight / 1000; - wrapper.style.width = width; - wrapper.style.height = height; - stack.push({ - type: "elem", - elem: wrapper - }); - } else { - // Stack glyphs - // Start by adding the bottom symbol - stack.push(makeGlyphSpan(bottom, font, mode)); - stack.push(lap); // overlap - - if (middle === null) { - // The middle section will be an SVG. Make it an extra 0.016em tall. - // We'll overlap by 0.008em at top and bottom. - var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms; - stack.push(makeInner(repeat, innerHeight, options)); - } else { - // When there is a middle bit, we need the middle part and two repeated - // sections - var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms; - - stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace. - - stack.push(lap); - stack.push(makeGlyphSpan(middle, font, mode)); - stack.push(lap); - stack.push(makeInner(repeat, _innerHeight, options)); - } // Add the top symbol - - - stack.push(lap); - stack.push(makeGlyphSpan(top, font, mode)); - } // Finally, build the vlist - - - var newOptions = options.havingBaseStyle(Style$1.TEXT); - var inner = buildCommon.makeVList({ - positionType: "bottom", - positionData: depth, - children: stack - }, newOptions); - return styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), Style$1.TEXT, options, classes); -}; // All surds have 0.08em padding above the vinculum inside the SVG. -// That keeps browser span height rounding error from pinching the line. - - -var vbPad = 80; // padding above the surd, measured inside the viewBox. - -var emPad = 0.08; // padding, in ems, measured in the document. - -var sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraVinculum, options) { - var path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight); - var pathNode = new PathNode(sqrtName, path); - var svg = new SvgNode([pathNode], { - // Note: 1000:1 ratio of viewBox to document em width. - "width": "400em", - "height": makeEm(height), - "viewBox": "0 0 400000 " + viewBoxHeight, - "preserveAspectRatio": "xMinYMin slice" - }); - return buildCommon.makeSvgSpan(["hide-tail"], [svg], options); -}; -/** - * Make a sqrt image of the given height, - */ - - -var makeSqrtImage = function makeSqrtImage(height, options) { - // Define a newOptions that removes the effect of size changes such as \Huge. - // We don't pick different a height surd for \Huge. For it, we scale up. - var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds. - - var delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions); - var sizeMultiplier = newOptions.sizeMultiplier; // default - // The standard sqrt SVGs each have a 0.04em thick vinculum. - // If Settings.minRuleThickness is larger than that, we add extraVinculum. - - var extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol. - - var span; - var spanHeight = 0; - var texHeight = 0; - var viewBoxHeight = 0; - var advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd. - // Then browser rounding error on the parent span height will not - // encroach on the ink of the vinculum. But that padding is not - // included in the TeX-like `height` used for calculation of - // vertical alignment. So texHeight = span.height < span.style.height. - - if (delim.type === "small") { - // Get an SVG that is derived from glyph U+221A in font KaTeX-Main. - // 1000 unit normal glyph height. - viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad; - - if (height < 1.0) { - sizeMultiplier = 1.0; // mimic a \textfont radical - } else if (height < 1.4) { - sizeMultiplier = 0.7; // mimic a \scriptfont radical - } - - spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier; - texHeight = (1.00 + extraVinculum) / sizeMultiplier; - span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraVinculum, options); - span.style.minWidth = "0.853em"; - advanceWidth = 0.833 / sizeMultiplier; // from the font. - } else if (delim.type === "large") { - // These SVGs come from fonts: KaTeX_Size1, _Size2, etc. - viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size]; - texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier; - spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier; - span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options); - span.style.minWidth = "1.02em"; - advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font. - } else { - // Tall sqrt. In TeX, this would be stacked using multiple glyphs. - // We'll use a single SVG to accomplish the same thing. - spanHeight = height + extraVinculum + emPad; - texHeight = height + extraVinculum; - viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad; - span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraVinculum, options); - span.style.minWidth = "0.742em"; - advanceWidth = 1.056; - } - - span.height = texHeight; - span.style.height = makeEm(spanHeight); - return { - span, - advanceWidth, - // Calculate the actual line width. - // This actually should depend on the chosen font -- e.g. \boldmath - // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and - // have thicker rules. - ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier - }; -}; // There are three kinds of delimiters, delimiters that stack when they become -// too large - - -var stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]; // delimiters that always stack - -var stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1"]; // and delimiters that never stack - -var stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of -// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ -// Used to create stacked delimiters of appropriate sizes in makeSizedDelim. - -var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; -/** - * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. - */ - -var makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) { - // < and > turn into \langle and \rangle in delimiters - if (delim === "<" || delim === "\\lt" || delim === "\u27e8") { - delim = "\\langle"; - } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") { - delim = "\\rangle"; - } // Sized delimiters are never centered. - - - if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) { - return makeLargeDelim(delim, size, false, options, mode, classes); - } else if (utils.contains(stackAlwaysDelimiters, delim)) { - return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes); - } else { - throw new ParseError("Illegal delimiter: '" + delim + "'"); - } -}; -/** - * There are three different sequences of delimiter sizes that the delimiters - * follow depending on the kind of delimiter. This is used when creating custom - * sized delimiters to decide whether to create a small, large, or stacked - * delimiter. - * - * In real TeX, these sequences aren't explicitly defined, but are instead - * defined inside the font metrics. Since there are only three sequences that - * are possible for the delimiters that TeX defines, it is easier to just encode - * them explicitly here. - */ - - -// Delimiters that never stack try small delimiters and large delimiters only -var stackNeverDelimiterSequence = [{ - type: "small", - style: Style$1.SCRIPTSCRIPT -}, { - type: "small", - style: Style$1.SCRIPT -}, { - type: "small", - style: Style$1.TEXT -}, { - type: "large", - size: 1 -}, { - type: "large", - size: 2 -}, { - type: "large", - size: 3 -}, { - type: "large", - size: 4 -}]; // Delimiters that always stack try the small delimiters first, then stack - -var stackAlwaysDelimiterSequence = [{ - type: "small", - style: Style$1.SCRIPTSCRIPT -}, { - type: "small", - style: Style$1.SCRIPT -}, { - type: "small", - style: Style$1.TEXT -}, { - type: "stack" -}]; // Delimiters that stack when large try the small and then large delimiters, and -// stack afterwards - -var stackLargeDelimiterSequence = [{ - type: "small", - style: Style$1.SCRIPTSCRIPT -}, { - type: "small", - style: Style$1.SCRIPT -}, { - type: "small", - style: Style$1.TEXT -}, { - type: "large", - size: 1 -}, { - type: "large", - size: 2 -}, { - type: "large", - size: 3 -}, { - type: "large", - size: 4 -}, { - type: "stack" -}]; -/** - * Get the font used in a delimiter based on what kind of delimiter it is. - * TODO(#963) Use more specific font family return type once that is introduced. - */ - -var delimTypeToFont = function delimTypeToFont(type) { - if (type.type === "small") { - return "Main-Regular"; - } else if (type.type === "large") { - return "Size" + type.size + "-Regular"; - } else if (type.type === "stack") { - return "Size4-Regular"; - } else { - throw new Error("Add support for delim type '" + type.type + "' here."); - } -}; -/** - * Traverse a sequence of types of delimiters to decide what kind of delimiter - * should be used to create a delimiter of the given height+depth. - */ - - -var traverseSequence = function traverseSequence(delim, height, sequence, options) { - // Here, we choose the index we should start at in the sequences. In smaller - // sizes (which correspond to larger numbers in style.size) we start earlier - // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts - // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 - var start = Math.min(2, 3 - options.style.size); - - for (var i = start; i < sequence.length; i++) { - if (sequence[i].type === "stack") { - // This is always the last delimiter, so we just break the loop now. - break; - } - - var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), "math"); - var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we - // account for the style change size. - - if (sequence[i].type === "small") { - var newOptions = options.havingBaseStyle(sequence[i].style); - heightDepth *= newOptions.sizeMultiplier; - } // Check if the delimiter at this size works for the given height. - - - if (heightDepth > height) { - return sequence[i]; - } - } // If we reached the end of the sequence, return the last sequence element. - - - return sequence[sequence.length - 1]; -}; -/** - * Make a delimiter of a given height+depth, with optional centering. Here, we - * traverse the sequences, and create a delimiter that the sequence tells us to. - */ - - -var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) { - if (delim === "<" || delim === "\\lt" || delim === "\u27e8") { - delim = "\\langle"; - } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") { - delim = "\\rangle"; - } // Decide what sequence to use - - - var sequence; - - if (utils.contains(stackNeverDelimiters, delim)) { - sequence = stackNeverDelimiterSequence; - } else if (utils.contains(stackLargeDelimiters, delim)) { - sequence = stackLargeDelimiterSequence; - } else { - sequence = stackAlwaysDelimiterSequence; - } // Look through the sequence - - - var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs. - // Depending on the sequence element we decided on, call the - // appropriate function. - - if (delimType.type === "small") { - return makeSmallDelim(delim, delimType.style, center, options, mode, classes); - } else if (delimType.type === "large") { - return makeLargeDelim(delim, delimType.size, center, options, mode, classes); - } else - /* if (delimType.type === "stack") */ - { - return makeStackedDelim(delim, height, center, options, mode, classes); - } -}; -/** - * Make a delimiter for use with `\left` and `\right`, given a height and depth - * of an expression that the delimiters surround. - */ - - -var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) { - // We always center \left/\right delimiters, so the axis is always shifted - var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right - - var delimiterFactor = 901; - var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm; - var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); - var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are - // 65536 per pt, or 655360 per em. So, the division here truncates in - // TeX but doesn't here, producing different results. If we wanted to - // exactly match TeX's calculation, we could do - // Math.floor(655360 * maxDistFromAxis / 500) * - // delimiterFactor / 655360 - // (To see the difference, compare - // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} - // in TeX and KaTeX) - maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total - // height - - return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes); -}; - -var delimiter = { - sqrtImage: makeSqrtImage, - sizedDelim: makeSizedDelim, - sizeToMaxHeight: sizeToMaxHeight, - customSizedDelim: makeCustomSizedDelim, - leftRightDelim: makeLeftRightDelim -}; - -// Extra data needed for the delimiter handler down below -var delimiterSizes = { - "\\bigl": { - mclass: "mopen", - size: 1 - }, - "\\Bigl": { - mclass: "mopen", - size: 2 - }, - "\\biggl": { - mclass: "mopen", - size: 3 - }, - "\\Biggl": { - mclass: "mopen", - size: 4 - }, - "\\bigr": { - mclass: "mclose", - size: 1 - }, - "\\Bigr": { - mclass: "mclose", - size: 2 - }, - "\\biggr": { - mclass: "mclose", - size: 3 - }, - "\\Biggr": { - mclass: "mclose", - size: 4 - }, - "\\bigm": { - mclass: "mrel", - size: 1 - }, - "\\Bigm": { - mclass: "mrel", - size: 2 - }, - "\\biggm": { - mclass: "mrel", - size: 3 - }, - "\\Biggm": { - mclass: "mrel", - size: 4 - }, - "\\big": { - mclass: "mord", - size: 1 - }, - "\\Big": { - mclass: "mord", - size: 2 - }, - "\\bigg": { - mclass: "mord", - size: 3 - }, - "\\Bigg": { - mclass: "mord", - size: 4 - } -}; -var delimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27e8", "\\rangle", "\u27e9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]; - -// Delimiter functions -function checkDelimiter(delim, context) { - var symDelim = checkSymbolNodeType(delim); - - if (symDelim && utils.contains(delimiters, symDelim.text)) { - return symDelim; - } else if (symDelim) { - throw new ParseError("Invalid delimiter '" + symDelim.text + "' after '" + context.funcName + "'", delim); - } else { - throw new ParseError("Invalid delimiter type '" + delim.type + "'", delim); - } -} - -defineFunction({ - type: "delimsizing", - names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], - props: { - numArgs: 1, - argTypes: ["primitive"] - }, - handler: (context, args) => { - var delim = checkDelimiter(args[0], context); - return { - type: "delimsizing", - mode: context.parser.mode, - size: delimiterSizes[context.funcName].size, - mclass: delimiterSizes[context.funcName].mclass, - delim: delim.text - }; - }, - htmlBuilder: (group, options) => { - if (group.delim === ".") { - // Empty delimiters still count as elements, even though they don't - // show anything. - return buildCommon.makeSpan([group.mclass]); - } // Use delimiter.sizedDelim to generate the delimiter. - - - return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]); - }, - mathmlBuilder: group => { - var children = []; - - if (group.delim !== ".") { - children.push(makeText(group.delim, group.mode)); - } - - var node = new mathMLTree.MathNode("mo", children); - - if (group.mclass === "mopen" || group.mclass === "mclose") { - // Only some of the delimsizing functions act as fences, and they - // return "mopen" or "mclose" mclass. - node.setAttribute("fence", "true"); - } else { - // Explicitly disable fencing if it's not a fence, to override the - // defaults. - node.setAttribute("fence", "false"); - } - - node.setAttribute("stretchy", "true"); - var size = makeEm(delimiter.sizeToMaxHeight[group.size]); - node.setAttribute("minsize", size); - node.setAttribute("maxsize", size); - return node; - } -}); - -function assertParsed(group) { - if (!group.body) { - throw new Error("Bug: The leftright ParseNode wasn't fully parsed."); - } -} - -defineFunction({ - type: "leftright-right", - names: ["\\right"], - props: { - numArgs: 1, - primitive: true - }, - handler: (context, args) => { - // \left case below triggers parsing of \right in - // `const right = parser.parseFunction();` - // uses this return value. - var color = context.parser.gullet.macros.get("\\current@color"); - - if (color && typeof color !== "string") { - throw new ParseError("\\current@color set to non-string in \\right"); - } - - return { - type: "leftright-right", - mode: context.parser.mode, - delim: checkDelimiter(args[0], context).text, - color // undefined if not set via \color - - }; - } -}); -defineFunction({ - type: "leftright", - names: ["\\left"], - props: { - numArgs: 1, - primitive: true - }, - handler: (context, args) => { - var delim = checkDelimiter(args[0], context); - var parser = context.parser; // Parse out the implicit body - - ++parser.leftrightDepth; // parseExpression stops before '\\right' - - var body = parser.parseExpression(false); - --parser.leftrightDepth; // Check the next token - - parser.expect("\\right", false); - var right = assertNodeType(parser.parseFunction(), "leftright-right"); - return { - type: "leftright", - mode: parser.mode, - body, - left: delim.text, - right: right.delim, - rightColor: right.color - }; - }, - htmlBuilder: (group, options) => { - assertParsed(group); // Build the inner expression - - var inner = buildExpression$1(group.body, options, true, ["mopen", "mclose"]); - var innerHeight = 0; - var innerDepth = 0; - var hadMiddle = false; // Calculate its height and depth - - for (var i = 0; i < inner.length; i++) { - // Property `isMiddle` not defined on `span`. See comment in - // "middle"'s htmlBuilder. - // $FlowFixMe - if (inner[i].isMiddle) { - hadMiddle = true; - } else { - innerHeight = Math.max(inner[i].height, innerHeight); - innerDepth = Math.max(inner[i].depth, innerDepth); - } - } // The size of delimiters is the same, regardless of what style we are - // in. Thus, to correctly calculate the size of delimiter we need around - // a group, we scale down the inner size based on the size. - - - innerHeight *= options.sizeMultiplier; - innerDepth *= options.sizeMultiplier; - var leftDelim; - - if (group.left === ".") { - // Empty delimiters in \left and \right make null delimiter spaces. - leftDelim = makeNullDelimiter(options, ["mopen"]); - } else { - // Otherwise, use leftRightDelim to generate the correct sized - // delimiter. - leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]); - } // Add it to the beginning of the expression - - - inner.unshift(leftDelim); // Handle middle delimiters - - if (hadMiddle) { - for (var _i = 1; _i < inner.length; _i++) { - var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in - // "middle"'s htmlBuilder. - // $FlowFixMe - - var isMiddle = middleDelim.isMiddle; - - if (isMiddle) { - // Apply the options that were active when \middle was called - inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []); - } - } - } - - var rightDelim; // Same for the right delimiter, but using color specified by \color - - if (group.right === ".") { - rightDelim = makeNullDelimiter(options, ["mclose"]); - } else { - var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options; - rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]); - } // Add it to the end of the expression. - - - inner.push(rightDelim); - return buildCommon.makeSpan(["minner"], inner, options); - }, - mathmlBuilder: (group, options) => { - assertParsed(group); - var inner = buildExpression(group.body, options); - - if (group.left !== ".") { - var leftNode = new mathMLTree.MathNode("mo", [makeText(group.left, group.mode)]); - leftNode.setAttribute("fence", "true"); - inner.unshift(leftNode); - } - - if (group.right !== ".") { - var rightNode = new mathMLTree.MathNode("mo", [makeText(group.right, group.mode)]); - rightNode.setAttribute("fence", "true"); - - if (group.rightColor) { - rightNode.setAttribute("mathcolor", group.rightColor); - } - - inner.push(rightNode); - } - - return makeRow(inner); - } -}); -defineFunction({ - type: "middle", - names: ["\\middle"], - props: { - numArgs: 1, - primitive: true - }, - handler: (context, args) => { - var delim = checkDelimiter(args[0], context); - - if (!context.parser.leftrightDepth) { - throw new ParseError("\\middle without preceding \\left", delim); - } - - return { - type: "middle", - mode: context.parser.mode, - delim: delim.text - }; - }, - htmlBuilder: (group, options) => { - var middleDelim; - - if (group.delim === ".") { - middleDelim = makeNullDelimiter(options, []); - } else { - middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []); - var isMiddle = { - delim: group.delim, - options - }; // Property `isMiddle` not defined on `span`. It is only used in - // this file above. - // TODO: Fix this violation of the `span` type and possibly rename - // things since `isMiddle` sounds like a boolean, but is a struct. - // $FlowFixMe - - middleDelim.isMiddle = isMiddle; - } - - return middleDelim; - }, - mathmlBuilder: (group, options) => { - // A Firefox \middle will stretch a character vertically only if it - // is in the fence part of the operator dictionary at: - // https://www.w3.org/TR/MathML3/appendixc.html. - // So we need to avoid U+2223 and use plain "|" instead. - var textNode = group.delim === "\\vert" || group.delim === "|" ? makeText("|", "text") : makeText(group.delim, group.mode); - var middleNode = new mathMLTree.MathNode("mo", [textNode]); - middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each element. - // \middle should get delimiter spacing instead. - - middleNode.setAttribute("lspace", "0.05em"); - middleNode.setAttribute("rspace", "0.05em"); - return middleNode; - } -}); - -var htmlBuilder$7 = (group, options) => { - // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox, \phase - // Some groups can return document fragments. Handle those by wrapping - // them in a span. - var inner = buildCommon.wrapFragment(buildGroup$1(group.body, options), options); - var label = group.label.slice(1); - var scale = options.sizeMultiplier; - var img; - var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different - // depending on whether the subject is wider than it is tall, or vice versa. - // We don't know the width of a group, so as a proxy, we test if - // the subject is a single character. This captures most of the - // subjects that should get the "tall" treatment. - - var isSingleChar = utils.isCharacterBox(group.body); - - if (label === "sout") { - img = buildCommon.makeSpan(["stretchy", "sout"]); - img.height = options.fontMetrics().defaultRuleThickness / scale; - imgShift = -0.5 * options.fontMetrics().xHeight; - } else if (label === "phase") { - // Set a couple of dimensions from the steinmetz package. - var lineWeight = calculateSize({ - number: 0.6, - unit: "pt" - }, options); - var clearance = calculateSize({ - number: 0.35, - unit: "ex" - }, options); // Prevent size changes like \Huge from affecting line thickness - - var newOptions = options.havingBaseSizing(); - scale = scale / newOptions.sizeMultiplier; - var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle. - - inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG - - var viewBoxHeight = Math.floor(1000 * angleHeight * scale); - var path = phasePath(viewBoxHeight); - var svgNode = new SvgNode([new PathNode("phase", path)], { - "width": "400em", - "height": makeEm(viewBoxHeight / 1000), - "viewBox": "0 0 400000 " + viewBoxHeight, - "preserveAspectRatio": "xMinYMin slice" - }); // Wrap it in a span with overflow: hidden. - - img = buildCommon.makeSvgSpan(["hide-tail"], [svgNode], options); - img.style.height = makeEm(angleHeight); - imgShift = inner.depth + lineWeight + clearance; - } else { - // Add horizontal padding - if (/cancel/.test(label)) { - if (!isSingleChar) { - inner.classes.push("cancel-pad"); - } - } else if (label === "angl") { - inner.classes.push("anglpad"); - } else { - inner.classes.push("boxpad"); - } // Add vertical padding - - - var topPad = 0; - var bottomPad = 0; - var ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2" - - if (/box/.test(label)) { - ruleThickness = Math.max(options.fontMetrics().fboxrule, // default - options.minRuleThickness // User override. - ); - topPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness); - bottomPad = topPad; - } else if (label === "angl") { - ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness); - topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself. - - bottomPad = Math.max(0, 0.25 - inner.depth); - } else { - topPad = isSingleChar ? 0.2 : 0; - bottomPad = topPad; - } - - img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options); - - if (/fbox|boxed|fcolorbox/.test(label)) { - img.style.borderStyle = "solid"; - img.style.borderWidth = makeEm(ruleThickness); - } else if (label === "angl" && ruleThickness !== 0.049) { - img.style.borderTopWidth = makeEm(ruleThickness); - img.style.borderRightWidth = makeEm(ruleThickness); - } - - imgShift = inner.depth + bottomPad; - - if (group.backgroundColor) { - img.style.backgroundColor = group.backgroundColor; - - if (group.borderColor) { - img.style.borderColor = group.borderColor; - } - } - } - - var vlist; - - if (group.backgroundColor) { - vlist = buildCommon.makeVList({ - positionType: "individualShift", - children: [// Put the color background behind inner; - { - type: "elem", - elem: img, - shift: imgShift - }, { - type: "elem", - elem: inner, - shift: 0 - }] - }, options); - } else { - var classes = /cancel|phase/.test(label) ? ["svg-align"] : []; - vlist = buildCommon.makeVList({ - positionType: "individualShift", - children: [// Write the \cancel stroke on top of inner. - { - type: "elem", - elem: inner, - shift: 0 - }, { - type: "elem", - elem: img, - shift: imgShift, - wrapperClasses: classes - }] - }, options); - } - - if (/cancel/.test(label)) { - // The cancel package documentation says that cancel lines add their height - // to the expression, but tests show that isn't how it actually works. - vlist.height = inner.height; - vlist.depth = inner.depth; - } - - if (/cancel/.test(label) && !isSingleChar) { - // cancel does not create horiz space for its line extension. - return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options); - } else { - return buildCommon.makeSpan(["mord"], [vlist], options); - } -}; - -var mathmlBuilder$6 = (group, options) => { - var fboxsep = 0; - var node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildGroup(group.body, options)]); - - switch (group.label) { - case "\\cancel": - node.setAttribute("notation", "updiagonalstrike"); - break; - - case "\\bcancel": - node.setAttribute("notation", "downdiagonalstrike"); - break; - - case "\\phase": - node.setAttribute("notation", "phasorangle"); - break; - - case "\\sout": - node.setAttribute("notation", "horizontalstrike"); - break; - - case "\\fbox": - node.setAttribute("notation", "box"); - break; - - case "\\angl": - node.setAttribute("notation", "actuarial"); - break; - - case "\\fcolorbox": - case "\\colorbox": - // doesn't have a good notation option. So use - // instead. Set some attributes that come included with . - fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm; - node.setAttribute("width", "+" + 2 * fboxsep + "pt"); - node.setAttribute("height", "+" + 2 * fboxsep + "pt"); - node.setAttribute("lspace", fboxsep + "pt"); // - - node.setAttribute("voffset", fboxsep + "pt"); - - if (group.label === "\\fcolorbox") { - var thk = Math.max(options.fontMetrics().fboxrule, // default - options.minRuleThickness // user override - ); - node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor)); - } - - break; - - case "\\xcancel": - node.setAttribute("notation", "updiagonalstrike downdiagonalstrike"); - break; - } - - if (group.backgroundColor) { - node.setAttribute("mathbackground", group.backgroundColor); - } - - return node; -}; - -defineFunction({ - type: "enclose", - names: ["\\colorbox"], - props: { - numArgs: 2, - allowedInText: true, - argTypes: ["color", "text"] - }, - - handler(_ref, args, optArgs) { - var { - parser, - funcName - } = _ref; - var color = assertNodeType(args[0], "color-token").color; - var body = args[1]; - return { - type: "enclose", - mode: parser.mode, - label: funcName, - backgroundColor: color, - body - }; - }, - - htmlBuilder: htmlBuilder$7, - mathmlBuilder: mathmlBuilder$6 -}); -defineFunction({ - type: "enclose", - names: ["\\fcolorbox"], - props: { - numArgs: 3, - allowedInText: true, - argTypes: ["color", "color", "text"] - }, - - handler(_ref2, args, optArgs) { - var { - parser, - funcName - } = _ref2; - var borderColor = assertNodeType(args[0], "color-token").color; - var backgroundColor = assertNodeType(args[1], "color-token").color; - var body = args[2]; - return { - type: "enclose", - mode: parser.mode, - label: funcName, - backgroundColor, - borderColor, - body - }; - }, - - htmlBuilder: htmlBuilder$7, - mathmlBuilder: mathmlBuilder$6 -}); -defineFunction({ - type: "enclose", - names: ["\\fbox"], - props: { - numArgs: 1, - argTypes: ["hbox"], - allowedInText: true - }, - - handler(_ref3, args) { - var { - parser - } = _ref3; - return { - type: "enclose", - mode: parser.mode, - label: "\\fbox", - body: args[0] - }; - } - -}); -defineFunction({ - type: "enclose", - names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\phase"], - props: { - numArgs: 1 - }, - - handler(_ref4, args) { - var { - parser, - funcName - } = _ref4; - var body = args[0]; - return { - type: "enclose", - mode: parser.mode, - label: funcName, - body - }; - }, - - htmlBuilder: htmlBuilder$7, - mathmlBuilder: mathmlBuilder$6 -}); -defineFunction({ - type: "enclose", - names: ["\\angl"], - props: { - numArgs: 1, - argTypes: ["hbox"], - allowedInText: false - }, - - handler(_ref5, args) { - var { - parser - } = _ref5; - return { - type: "enclose", - mode: parser.mode, - label: "\\angl", - body: args[0] - }; - } - -}); - -/** - * All registered environments. - * `environments.js` exports this same dictionary again and makes it public. - * `Parser.js` requires this dictionary via `environments.js`. - */ -var _environments = {}; -function defineEnvironment(_ref) { - var { - type, - names, - props, - handler, - htmlBuilder, - mathmlBuilder - } = _ref; - // Set default values of environments. - var data = { - type, - numArgs: props.numArgs || 0, - allowedInText: false, - numOptionalArgs: 0, - handler - }; - - for (var i = 0; i < names.length; ++i) { - // TODO: The value type of _environments should be a type union of all - // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is - // an existential type. - _environments[names[i]] = data; - } - - if (htmlBuilder) { - _htmlGroupBuilders[type] = htmlBuilder; - } - - if (mathmlBuilder) { - _mathmlGroupBuilders[type] = mathmlBuilder; - } -} - -/** - * All registered global/built-in macros. - * `macros.js` exports this same dictionary again and makes it public. - * `Parser.js` requires this dictionary via `macros.js`. - */ -var _macros = {}; // This function might one day accept an additional argument and do more things. - -function defineMacro(name, body) { - _macros[name] = body; -} - -// Helper functions -function getHLines(parser) { - // Return an array. The array length = number of hlines. - // Each element in the array tells if the line is dashed. - var hlineInfo = []; - parser.consumeSpaces(); - var nxt = parser.fetch().text; - - if (nxt === "\\relax") { - // \relax is an artifact of the \cr macro below - parser.consume(); - parser.consumeSpaces(); - nxt = parser.fetch().text; - } - - while (nxt === "\\hline" || nxt === "\\hdashline") { - parser.consume(); - hlineInfo.push(nxt === "\\hdashline"); - parser.consumeSpaces(); - nxt = parser.fetch().text; - } - - return hlineInfo; -} - -var validateAmsEnvironmentContext = context => { - var settings = context.parser.settings; - - if (!settings.displayMode) { - throw new ParseError("{" + context.envName + "} can be used only in" + " display mode."); - } -}; // autoTag (an argument to parseArray) can be one of three values: -// * undefined: Regular (not-top-level) array; no tags on each row -// * true: Automatic equation numbering, overridable by \tag -// * false: Tags allowed on each row, but no automatic numbering -// This function *doesn't* work with the "split" environment name. - - -function getAutoTag(name) { - if (name.indexOf("ed") === -1) { - return name.indexOf("*") === -1; - } // return undefined; - -} -/** - * Parse the body of the environment, with rows delimited by \\ and - * columns delimited by &, and create a nested list in row-major order - * with one group per cell. If given an optional argument style - * ("text", "display", etc.), then each cell is cast into that style. - */ - - -function parseArray(parser, _ref, style) { - var { - hskipBeforeAndAfter, - addJot, - cols, - arraystretch, - colSeparationType, - autoTag, - singleRow, - emptySingleRow, - maxNumCols, - leqno - } = _ref; - parser.gullet.beginGroup(); - - if (!singleRow) { - // \cr is equivalent to \\ without the optional size argument (see below) - // TODO: provide helpful error when \cr is used outside array environment - parser.gullet.macros.set("\\cr", "\\\\\\relax"); - } // Get current arraystretch if it's not set by the environment - - - if (!arraystretch) { - var stretch = parser.gullet.expandMacroAsText("\\arraystretch"); - - if (stretch == null) { - // Default \arraystretch from lttab.dtx - arraystretch = 1; - } else { - arraystretch = parseFloat(stretch); - - if (!arraystretch || arraystretch < 0) { - throw new ParseError("Invalid \\arraystretch: " + stretch); - } - } - } // Start group for first cell - - - parser.gullet.beginGroup(); - var row = []; - var body = [row]; - var rowGaps = []; - var hLinesBeforeRow = []; - var tags = autoTag != null ? [] : undefined; // amsmath uses \global\@eqnswtrue and \global\@eqnswfalse to represent - // whether this row should have an equation number. Simulate this with - // a \@eqnsw macro set to 1 or 0. - - function beginRow() { - if (autoTag) { - parser.gullet.macros.set("\\@eqnsw", "1", true); - } - } - - function endRow() { - if (tags) { - if (parser.gullet.macros.get("\\df@tag")) { - tags.push(parser.subparse([new Token("\\df@tag")])); - parser.gullet.macros.set("\\df@tag", undefined, true); - } else { - tags.push(Boolean(autoTag) && parser.gullet.macros.get("\\@eqnsw") === "1"); - } - } - } - - beginRow(); // Test for \hline at the top of the array. - - hLinesBeforeRow.push(getHLines(parser)); - - while (true) { - // eslint-disable-line no-constant-condition - // Parse each cell in its own group (namespace) - var cell = parser.parseExpression(false, singleRow ? "\\end" : "\\\\"); - parser.gullet.endGroup(); - parser.gullet.beginGroup(); - cell = { - type: "ordgroup", - mode: parser.mode, - body: cell - }; - - if (style) { - cell = { - type: "styling", - mode: parser.mode, - style, - body: [cell] - }; - } - - row.push(cell); - var next = parser.fetch().text; - - if (next === "&") { - if (maxNumCols && row.length === maxNumCols) { - if (singleRow || colSeparationType) { - // {equation} or {split} - throw new ParseError("Too many tab characters: &", parser.nextToken); - } else { - // {array} environment - parser.settings.reportNonstrict("textEnv", "Too few columns " + "specified in the {array} column argument."); - } - } - - parser.consume(); - } else if (next === "\\end") { - endRow(); // Arrays terminate newlines with `\crcr` which consumes a `\cr` if - // the last line is empty. However, AMS environments keep the - // empty row if it's the only one. - // NOTE: Currently, `cell` is the last item added into `row`. - - if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) { - body.pop(); - } - - if (hLinesBeforeRow.length < body.length + 1) { - hLinesBeforeRow.push([]); - } - - break; - } else if (next === "\\\\") { - parser.consume(); - var size = void 0; // \def\Let@{\let\\\math@cr} - // \def\math@cr{...\math@cr@} - // \def\math@cr@{\new@ifnextchar[\math@cr@@{\math@cr@@[\z@]}} - // \def\math@cr@@[#1]{...\math@cr@@@...} - // \def\math@cr@@@{\cr} - - if (parser.gullet.future().text !== " ") { - size = parser.parseSizeGroup(true); - } - - rowGaps.push(size ? size.value : null); - endRow(); // check for \hline(s) following the row separator - - hLinesBeforeRow.push(getHLines(parser)); - row = []; - body.push(row); - beginRow(); - } else { - throw new ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken); - } - } // End cell group - - - parser.gullet.endGroup(); // End array group defining \cr - - parser.gullet.endGroup(); - return { - type: "array", - mode: parser.mode, - addJot, - arraystretch, - body, - cols, - rowGaps, - hskipBeforeAndAfter, - hLinesBeforeRow, - colSeparationType, - tags, - leqno - }; -} // Decides on a style for cells in an array according to whether the given -// environment name starts with the letter 'd'. - - -function dCellStyle(envName) { - if (envName.slice(0, 1) === "d") { - return "display"; - } else { - return "text"; - } -} - -var htmlBuilder$6 = function htmlBuilder(group, options) { - var r; - var c; - var nr = group.body.length; - var hLinesBeforeRow = group.hLinesBeforeRow; - var nc = 0; - var body = new Array(nr); - var hlines = []; - var ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em. - options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override. - ); // Horizontal spacing - - var pt = 1 / options.fontMetrics().ptPerEm; - var arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls - - if (group.colSeparationType && group.colSeparationType === "small") { - // We're in a {smallmatrix}. Default column space is \thickspace, - // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}. - // But that needs adjustment because LaTeX applies \scriptstyle to the - // entire array, including the colspace, but this function applies - // \scriptstyle only inside each element. - var localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier; - arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier); - } // Vertical spacing - - - var baselineskip = group.colSeparationType === "CD" ? calculateSize({ - number: 3, - unit: "ex" - }, options) : 12 * pt; // see size10.clo - // Default \jot from ltmath.dtx - // TODO(edemaine): allow overriding \jot via \setlength (#687) - - var jot = 3 * pt; - var arrayskip = group.arraystretch * baselineskip; - var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and - - var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx - - var totalHeight = 0; // Set a position for \hline(s) at the top of the array, if any. - - function setHLinePos(hlinesInGap) { - for (var i = 0; i < hlinesInGap.length; ++i) { - if (i > 0) { - totalHeight += 0.25; - } - - hlines.push({ - pos: totalHeight, - isDashed: hlinesInGap[i] - }); - } - } - - setHLinePos(hLinesBeforeRow[0]); - - for (r = 0; r < group.body.length; ++r) { - var inrow = group.body[r]; - var height = arstrutHeight; // \@array adds an \@arstrut - - var depth = arstrutDepth; // to each tow (via the template) - - if (nc < inrow.length) { - nc = inrow.length; - } - - var outrow = new Array(inrow.length); - - for (c = 0; c < inrow.length; ++c) { - var elt = buildGroup$1(inrow[c], options); - - if (depth < elt.depth) { - depth = elt.depth; - } - - if (height < elt.height) { - height = elt.height; - } - - outrow[c] = elt; - } - - var rowGap = group.rowGaps[r]; - var gap = 0; - - if (rowGap) { - gap = calculateSize(rowGap, options); - - if (gap > 0) { - // \@argarraycr - gap += arstrutDepth; - - if (depth < gap) { - depth = gap; // \@xargarraycr - } - - gap = 0; - } - } // In AMS multiline environments such as aligned and gathered, rows - // correspond to lines that have additional \jot added to the - // \baselineskip via \openup. - - - if (group.addJot) { - depth += jot; - } - - outrow.height = height; - outrow.depth = depth; - totalHeight += height; - outrow.pos = totalHeight; - totalHeight += depth + gap; // \@yargarraycr - - body[r] = outrow; // Set a position for \hline(s), if any. - - setHLinePos(hLinesBeforeRow[r + 1]); - } - - var offset = totalHeight / 2 + options.fontMetrics().axisHeight; - var colDescriptions = group.cols || []; - var cols = []; - var colSep; - var colDescrNum; - var tagSpans = []; - - if (group.tags && group.tags.some(tag => tag)) { - // An environment with manual tags and/or automatic equation numbers. - // Create node(s), the latter of which trigger CSS counter increment. - for (r = 0; r < nr; ++r) { - var rw = body[r]; - var shift = rw.pos - offset; - var tag = group.tags[r]; - var tagSpan = void 0; - - if (tag === true) { - // automatic numbering - tagSpan = buildCommon.makeSpan(["eqn-num"], [], options); - } else if (tag === false) { - // \nonumber/\notag or starred environment - tagSpan = buildCommon.makeSpan([], [], options); - } else { - // manual \tag - tagSpan = buildCommon.makeSpan([], buildExpression$1(tag, options, true), options); - } - - tagSpan.depth = rw.depth; - tagSpan.height = rw.height; - tagSpans.push({ - type: "elem", - elem: tagSpan, - shift - }); - } - } - - for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column - // descriptions, so trailing separators don't get lost. - c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) { - var colDescr = colDescriptions[colDescrNum] || {}; - var firstSeparator = true; - - while (colDescr.type === "separator") { - // If there is more than one separator in a row, add a space - // between them. - if (!firstSeparator) { - colSep = buildCommon.makeSpan(["arraycolsep"], []); - colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep); - cols.push(colSep); - } - - if (colDescr.separator === "|" || colDescr.separator === ":") { - var lineType = colDescr.separator === "|" ? "solid" : "dashed"; - var separator = buildCommon.makeSpan(["vertical-separator"], [], options); - separator.style.height = makeEm(totalHeight); - separator.style.borderRightWidth = makeEm(ruleThickness); - separator.style.borderRightStyle = lineType; - separator.style.margin = "0 " + makeEm(-ruleThickness / 2); - - var _shift = totalHeight - offset; - - if (_shift) { - separator.style.verticalAlign = makeEm(-_shift); - } - - cols.push(separator); - } else { - throw new ParseError("Invalid separator type: " + colDescr.separator); - } - - colDescrNum++; - colDescr = colDescriptions[colDescrNum] || {}; - firstSeparator = false; - } - - if (c >= nc) { - continue; - } - - var sepwidth = void 0; - - if (c > 0 || group.hskipBeforeAndAfter) { - sepwidth = utils.deflt(colDescr.pregap, arraycolsep); - - if (sepwidth !== 0) { - colSep = buildCommon.makeSpan(["arraycolsep"], []); - colSep.style.width = makeEm(sepwidth); - cols.push(colSep); - } - } - - var col = []; - - for (r = 0; r < nr; ++r) { - var row = body[r]; - var elem = row[c]; - - if (!elem) { - continue; - } - - var _shift2 = row.pos - offset; - - elem.depth = row.depth; - elem.height = row.height; - col.push({ - type: "elem", - elem: elem, - shift: _shift2 - }); - } - - col = buildCommon.makeVList({ - positionType: "individualShift", - children: col - }, options); - col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]); - cols.push(col); - - if (c < nc - 1 || group.hskipBeforeAndAfter) { - sepwidth = utils.deflt(colDescr.postgap, arraycolsep); - - if (sepwidth !== 0) { - colSep = buildCommon.makeSpan(["arraycolsep"], []); - colSep.style.width = makeEm(sepwidth); - cols.push(colSep); - } - } - } - - body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any. - - if (hlines.length > 0) { - var line = buildCommon.makeLineSpan("hline", options, ruleThickness); - var dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness); - var vListElems = [{ - type: "elem", - elem: body, - shift: 0 - }]; - - while (hlines.length > 0) { - var hline = hlines.pop(); - var lineShift = hline.pos - offset; - - if (hline.isDashed) { - vListElems.push({ - type: "elem", - elem: dashes, - shift: lineShift - }); - } else { - vListElems.push({ - type: "elem", - elem: line, - shift: lineShift - }); - } - } - - body = buildCommon.makeVList({ - positionType: "individualShift", - children: vListElems - }, options); - } - - if (tagSpans.length === 0) { - return buildCommon.makeSpan(["mord"], [body], options); - } else { - var eqnNumCol = buildCommon.makeVList({ - positionType: "individualShift", - children: tagSpans - }, options); - eqnNumCol = buildCommon.makeSpan(["tag"], [eqnNumCol], options); - return buildCommon.makeFragment([body, eqnNumCol]); - } -}; - -var alignMap = { - c: "center ", - l: "left ", - r: "right " -}; - -var mathmlBuilder$5 = function mathmlBuilder(group, options) { - var tbl = []; - var glue = new mathMLTree.MathNode("mtd", [], ["mtr-glue"]); - var tag = new mathMLTree.MathNode("mtd", [], ["mml-eqn-num"]); - - for (var i = 0; i < group.body.length; i++) { - var rw = group.body[i]; - var row = []; - - for (var j = 0; j < rw.length; j++) { - row.push(new mathMLTree.MathNode("mtd", [buildGroup(rw[j], options)])); - } - - if (group.tags && group.tags[i]) { - row.unshift(glue); - row.push(glue); - - if (group.leqno) { - row.unshift(tag); - } else { - row.push(tag); - } - } - - tbl.push(new mathMLTree.MathNode("mtr", row)); - } - - var table = new mathMLTree.MathNode("mtable", tbl); // Set column alignment, row spacing, column spacing, and - // array lines by setting attributes on the table element. - // Set the row spacing. In MathML, we specify a gap distance. - // We do not use rowGap[] because MathML automatically increases - // cell height with the height/depth of the element content. - // LaTeX \arraystretch multiplies the row baseline-to-baseline distance. - // We simulate this by adding (arraystretch - 1)em to the gap. This - // does a reasonable job of adjusting arrays containing 1 em tall content. - // The 0.16 and 0.09 values are found empirically. They produce an array - // similar to LaTeX and in which content does not interfere with \hlines. - - var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray} - : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0); - table.setAttribute("rowspacing", makeEm(gap)); // MathML table lines go only between cells. - // To place a line on an edge we'll use , if necessary. - - var menclose = ""; - var align = ""; - - if (group.cols && group.cols.length > 0) { - // Find column alignment, column spacing, and vertical lines. - var cols = group.cols; - var columnLines = ""; - var prevTypeWasAlign = false; - var iStart = 0; - var iEnd = cols.length; - - if (cols[0].type === "separator") { - menclose += "top "; - iStart = 1; - } - - if (cols[cols.length - 1].type === "separator") { - menclose += "bottom "; - iEnd -= 1; - } - - for (var _i = iStart; _i < iEnd; _i++) { - if (cols[_i].type === "align") { - align += alignMap[cols[_i].align]; - - if (prevTypeWasAlign) { - columnLines += "none "; - } - - prevTypeWasAlign = true; - } else if (cols[_i].type === "separator") { - // MathML accepts only single lines between cells. - // So we read only the first of consecutive separators. - if (prevTypeWasAlign) { - columnLines += cols[_i].separator === "|" ? "solid " : "dashed "; - prevTypeWasAlign = false; - } - } - } - - table.setAttribute("columnalign", align.trim()); - - if (/[sd]/.test(columnLines)) { - table.setAttribute("columnlines", columnLines.trim()); - } - } // Set column spacing. - - - if (group.colSeparationType === "align") { - var _cols = group.cols || []; - - var spacing = ""; - - for (var _i2 = 1; _i2 < _cols.length; _i2++) { - spacing += _i2 % 2 ? "0em " : "1em "; - } - - table.setAttribute("columnspacing", spacing.trim()); - } else if (group.colSeparationType === "alignat" || group.colSeparationType === "gather") { - table.setAttribute("columnspacing", "0em"); - } else if (group.colSeparationType === "small") { - table.setAttribute("columnspacing", "0.2778em"); - } else if (group.colSeparationType === "CD") { - table.setAttribute("columnspacing", "0.5em"); - } else { - table.setAttribute("columnspacing", "1em"); - } // Address \hline and \hdashline - - - var rowLines = ""; - var hlines = group.hLinesBeforeRow; - menclose += hlines[0].length > 0 ? "left " : ""; - menclose += hlines[hlines.length - 1].length > 0 ? "right " : ""; - - for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) { - rowLines += hlines[_i3].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element. - : hlines[_i3][0] ? "dashed " : "solid "; - } - - if (/[sd]/.test(rowLines)) { - table.setAttribute("rowlines", rowLines.trim()); - } - - if (menclose !== "") { - table = new mathMLTree.MathNode("menclose", [table]); - table.setAttribute("notation", menclose.trim()); - } - - if (group.arraystretch && group.arraystretch < 1) { - // A small array. Wrap in scriptstyle so row gap is not too large. - table = new mathMLTree.MathNode("mstyle", [table]); - table.setAttribute("scriptlevel", "1"); - } - - return table; -}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat. - - -var alignedHandler = function alignedHandler(context, args) { - if (context.envName.indexOf("ed") === -1) { - validateAmsEnvironmentContext(context); - } - - var cols = []; - var separationType = context.envName.indexOf("at") > -1 ? "alignat" : "align"; - var isSplit = context.envName === "split"; - var res = parseArray(context.parser, { - cols, - addJot: true, - autoTag: isSplit ? undefined : getAutoTag(context.envName), - emptySingleRow: true, - colSeparationType: separationType, - maxNumCols: isSplit ? 2 : undefined, - leqno: context.parser.settings.leqno - }, "display"); // Determining number of columns. - // 1. If the first argument is given, we use it as a number of columns, - // and makes sure that each row doesn't exceed that number. - // 2. Otherwise, just count number of columns = maximum number - // of cells in each row ("aligned" mode -- isAligned will be true). - // - // At the same time, prepend empty group {} at beginning of every second - // cell in each row (starting with second cell) so that operators become - // binary. This behavior is implemented in amsmath's \start@aligned. - - var numMaths; - var numCols = 0; - var emptyGroup = { - type: "ordgroup", - mode: context.mode, - body: [] - }; - - if (args[0] && args[0].type === "ordgroup") { - var arg0 = ""; - - for (var i = 0; i < args[0].body.length; i++) { - var textord = assertNodeType(args[0].body[i], "textord"); - arg0 += textord.text; - } - - numMaths = Number(arg0); - numCols = numMaths * 2; - } - - var isAligned = !numCols; - res.body.forEach(function (row) { - for (var _i4 = 1; _i4 < row.length; _i4 += 2) { - // Modify ordgroup node within styling node - var styling = assertNodeType(row[_i4], "styling"); - var ordgroup = assertNodeType(styling.body[0], "ordgroup"); - ordgroup.body.unshift(emptyGroup); - } - - if (!isAligned) { - // Case 1 - var curMaths = row.length / 2; - - if (numMaths < curMaths) { - throw new ParseError("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row[0]); - } - } else if (numCols < row.length) { - // Case 2 - numCols = row.length; - } - }); // Adjusting alignment. - // In aligned mode, we add one \qquad between columns; - // otherwise we add nothing. - - for (var _i5 = 0; _i5 < numCols; ++_i5) { - var align = "r"; - var pregap = 0; - - if (_i5 % 2 === 1) { - align = "l"; - } else if (_i5 > 0 && isAligned) { - // "aligned" mode. - pregap = 1; // add one \quad - } - - cols[_i5] = { - type: "align", - align: align, - pregap: pregap, - postgap: 0 - }; - } - - res.colSeparationType = isAligned ? "align" : "alignat"; - return res; -}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation -// is part of the source2e.pdf file of LaTeX2e source documentation. -// {darray} is an {array} environment where cells are set in \displaystyle, -// as defined in nccmath.sty. - - -defineEnvironment({ - type: "array", - names: ["array", "darray"], - props: { - numArgs: 1 - }, - - handler(context, args) { - // Since no types are specified above, the two possibilities are - // - The argument is wrapped in {} or [], in which case Parser's - // parseGroup() returns an "ordgroup" wrapping some symbol node. - // - The argument is a bare symbol node. - var symNode = checkSymbolNodeType(args[0]); - var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; - var cols = colalign.map(function (nde) { - var node = assertSymbolNodeType(nde); - var ca = node.text; - - if ("lcr".indexOf(ca) !== -1) { - return { - type: "align", - align: ca - }; - } else if (ca === "|") { - return { - type: "separator", - separator: "|" - }; - } else if (ca === ":") { - return { - type: "separator", - separator: ":" - }; - } - - throw new ParseError("Unknown column alignment: " + ca, nde); - }); - var res = { - cols, - hskipBeforeAndAfter: true, - // \@preamble in lttab.dtx - maxNumCols: cols.length - }; - return parseArray(context.parser, res, dCellStyle(context.envName)); - }, - - htmlBuilder: htmlBuilder$6, - mathmlBuilder: mathmlBuilder$5 -}); // The matrix environments of amsmath builds on the array environment -// of LaTeX, which is discussed above. -// The mathtools package adds starred versions of the same environments. -// These have an optional argument to choose left|center|right justification. - -defineEnvironment({ - type: "array", - names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix", "matrix*", "pmatrix*", "bmatrix*", "Bmatrix*", "vmatrix*", "Vmatrix*"], - props: { - numArgs: 0 - }, - - handler(context) { - var delimiters = { - "matrix": null, - "pmatrix": ["(", ")"], - "bmatrix": ["[", "]"], - "Bmatrix": ["\\{", "\\}"], - "vmatrix": ["|", "|"], - "Vmatrix": ["\\Vert", "\\Vert"] - }[context.envName.replace("*", "")]; // \hskip -\arraycolsep in amsmath - - var colAlign = "c"; - var payload = { - hskipBeforeAndAfter: false, - cols: [{ - type: "align", - align: colAlign - }] - }; - - if (context.envName.charAt(context.envName.length - 1) === "*") { - // It's one of the mathtools starred functions. - // Parse the optional alignment argument. - var parser = context.parser; - parser.consumeSpaces(); - - if (parser.fetch().text === "[") { - parser.consume(); - parser.consumeSpaces(); - colAlign = parser.fetch().text; - - if ("lcr".indexOf(colAlign) === -1) { - throw new ParseError("Expected l or c or r", parser.nextToken); - } - - parser.consume(); - parser.consumeSpaces(); - parser.expect("]"); - parser.consume(); - payload.cols = [{ - type: "align", - align: colAlign - }]; - } - } - - var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs. - - var numCols = Math.max(0, ...res.body.map(row => row.length)); - res.cols = new Array(numCols).fill({ - type: "align", - align: colAlign - }); - return delimiters ? { - type: "leftright", - mode: context.mode, - body: [res], - left: delimiters[0], - right: delimiters[1], - rightColor: undefined // \right uninfluenced by \color in array - - } : res; - }, - - htmlBuilder: htmlBuilder$6, - mathmlBuilder: mathmlBuilder$5 -}); -defineEnvironment({ - type: "array", - names: ["smallmatrix"], - props: { - numArgs: 0 - }, - - handler(context) { - var payload = { - arraystretch: 0.5 - }; - var res = parseArray(context.parser, payload, "script"); - res.colSeparationType = "small"; - return res; - }, - - htmlBuilder: htmlBuilder$6, - mathmlBuilder: mathmlBuilder$5 -}); -defineEnvironment({ - type: "array", - names: ["subarray"], - props: { - numArgs: 1 - }, - - handler(context, args) { - // Parsing of {subarray} is similar to {array} - var symNode = checkSymbolNodeType(args[0]); - var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; - var cols = colalign.map(function (nde) { - var node = assertSymbolNodeType(nde); - var ca = node.text; // {subarray} only recognizes "l" & "c" - - if ("lc".indexOf(ca) !== -1) { - return { - type: "align", - align: ca - }; - } - - throw new ParseError("Unknown column alignment: " + ca, nde); - }); - - if (cols.length > 1) { - throw new ParseError("{subarray} can contain only one column"); - } - - var res = { - cols, - hskipBeforeAndAfter: false, - arraystretch: 0.5 - }; - res = parseArray(context.parser, res, "script"); - - if (res.body.length > 0 && res.body[0].length > 1) { - throw new ParseError("{subarray} can contain only one column"); - } - - return res; - }, - - htmlBuilder: htmlBuilder$6, - mathmlBuilder: mathmlBuilder$5 -}); // A cases environment (in amsmath.sty) is almost equivalent to -// \def\arraystretch{1.2}% -// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. -// {dcases} is a {cases} environment where cells are set in \displaystyle, -// as defined in mathtools.sty. -// {rcases} is another mathtools environment. It's brace is on the right side. - -defineEnvironment({ - type: "array", - names: ["cases", "dcases", "rcases", "drcases"], - props: { - numArgs: 0 - }, - - handler(context) { - var payload = { - arraystretch: 1.2, - cols: [{ - type: "align", - align: "l", - pregap: 0, - // TODO(kevinb) get the current style. - // For now we use the metrics for TEXT style which is what we were - // doing before. Before attempting to get the current style we - // should look at TeX's behavior especially for \over and matrices. - postgap: 1.0 - /* 1em quad */ - - }, { - type: "align", - align: "l", - pregap: 0, - postgap: 0 - }] - }; - var res = parseArray(context.parser, payload, dCellStyle(context.envName)); - return { - type: "leftright", - mode: context.mode, - body: [res], - left: context.envName.indexOf("r") > -1 ? "." : "\\{", - right: context.envName.indexOf("r") > -1 ? "\\}" : ".", - rightColor: undefined - }; - }, - - htmlBuilder: htmlBuilder$6, - mathmlBuilder: mathmlBuilder$5 -}); // In the align environment, one uses ampersands, &, to specify number of -// columns in each row, and to locate spacing between each column. -// align gets automatic numbering. align* and aligned do not. -// The alignedat environment can be used in math mode. -// Note that we assume \nomallineskiplimit to be zero, -// so that \strut@ is the same as \strut. - -defineEnvironment({ - type: "array", - names: ["align", "align*", "aligned", "split"], - props: { - numArgs: 0 - }, - handler: alignedHandler, - htmlBuilder: htmlBuilder$6, - mathmlBuilder: mathmlBuilder$5 -}); // A gathered environment is like an array environment with one centered -// column, but where rows are considered lines so get \jot line spacing -// and contents are set in \displaystyle. - -defineEnvironment({ - type: "array", - names: ["gathered", "gather", "gather*"], - props: { - numArgs: 0 - }, - - handler(context) { - if (utils.contains(["gather", "gather*"], context.envName)) { - validateAmsEnvironmentContext(context); - } - - var res = { - cols: [{ - type: "align", - align: "c" - }], - addJot: true, - colSeparationType: "gather", - autoTag: getAutoTag(context.envName), - emptySingleRow: true, - leqno: context.parser.settings.leqno - }; - return parseArray(context.parser, res, "display"); - }, - - htmlBuilder: htmlBuilder$6, - mathmlBuilder: mathmlBuilder$5 -}); // alignat environment is like an align environment, but one must explicitly -// specify maximum number of columns in each row, and can adjust spacing between -// each columns. - -defineEnvironment({ - type: "array", - names: ["alignat", "alignat*", "alignedat"], - props: { - numArgs: 1 - }, - handler: alignedHandler, - htmlBuilder: htmlBuilder$6, - mathmlBuilder: mathmlBuilder$5 -}); -defineEnvironment({ - type: "array", - names: ["equation", "equation*"], - props: { - numArgs: 0 - }, - - handler(context) { - validateAmsEnvironmentContext(context); - var res = { - autoTag: getAutoTag(context.envName), - emptySingleRow: true, - singleRow: true, - maxNumCols: 1, - leqno: context.parser.settings.leqno - }; - return parseArray(context.parser, res, "display"); - }, - - htmlBuilder: htmlBuilder$6, - mathmlBuilder: mathmlBuilder$5 -}); -defineEnvironment({ - type: "array", - names: ["CD"], - props: { - numArgs: 0 - }, - - handler(context) { - validateAmsEnvironmentContext(context); - return parseCD(context.parser); - }, - - htmlBuilder: htmlBuilder$6, - mathmlBuilder: mathmlBuilder$5 -}); -defineMacro("\\nonumber", "\\gdef\\@eqnsw{0}"); -defineMacro("\\notag", "\\nonumber"); // Catch \hline outside array environment - -defineFunction({ - type: "text", - // Doesn't matter what this is. - names: ["\\hline", "\\hdashline"], - props: { - numArgs: 0, - allowedInText: true, - allowedInMath: true - }, - - handler(context, args) { - throw new ParseError(context.funcName + " valid only within array environment"); - } - -}); - -var environments = _environments; - -// defineEnvironment definitions. - -defineFunction({ - type: "environment", - names: ["\\begin", "\\end"], - props: { - numArgs: 1, - argTypes: ["text"] - }, - - handler(_ref, args) { - var { - parser, - funcName - } = _ref; - var nameGroup = args[0]; - - if (nameGroup.type !== "ordgroup") { - throw new ParseError("Invalid environment name", nameGroup); - } - - var envName = ""; - - for (var i = 0; i < nameGroup.body.length; ++i) { - envName += assertNodeType(nameGroup.body[i], "textord").text; - } - - if (funcName === "\\begin") { - // begin...end is similar to left...right - if (!environments.hasOwnProperty(envName)) { - throw new ParseError("No such environment: " + envName, nameGroup); - } // Build the environment object. Arguments and other information will - // be made available to the begin and end methods using properties. - - - var env = environments[envName]; - var { - args: _args, - optArgs - } = parser.parseArguments("\\begin{" + envName + "}", env); - var context = { - mode: parser.mode, - envName, - parser - }; - var result = env.handler(context, _args, optArgs); - parser.expect("\\end", false); - var endNameToken = parser.nextToken; - var end = assertNodeType(parser.parseFunction(), "environment"); - - if (end.name !== envName) { - throw new ParseError("Mismatch: \\begin{" + envName + "} matched by \\end{" + end.name + "}", endNameToken); - } // $FlowFixMe, "environment" handler returns an environment ParseNode - - - return result; - } - - return { - type: "environment", - mode: parser.mode, - name: envName, - nameGroup - }; - } - -}); - -// TODO(kevinb): implement \\sl and \\sc - -var htmlBuilder$5 = (group, options) => { - var font = group.font; - var newOptions = options.withFont(font); - return buildGroup$1(group.body, newOptions); -}; - -var mathmlBuilder$4 = (group, options) => { - var font = group.font; - var newOptions = options.withFont(font); - return buildGroup(group.body, newOptions); -}; - -var fontAliases = { - "\\Bbb": "\\mathbb", - "\\bold": "\\mathbf", - "\\frak": "\\mathfrak", - "\\bm": "\\boldsymbol" -}; -defineFunction({ - type: "font", - names: [// styles, except \boldsymbol defined below - "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", // families - "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", // aliases, except \bm defined below - "\\Bbb", "\\bold", "\\frak"], - props: { - numArgs: 1, - allowedInArgument: true - }, - handler: (_ref, args) => { - var { - parser, - funcName - } = _ref; - var body = normalizeArgument(args[0]); - var func = funcName; - - if (func in fontAliases) { - func = fontAliases[func]; - } - - return { - type: "font", - mode: parser.mode, - font: func.slice(1), - body - }; - }, - htmlBuilder: htmlBuilder$5, - mathmlBuilder: mathmlBuilder$4 -}); -defineFunction({ - type: "mclass", - names: ["\\boldsymbol", "\\bm"], - props: { - numArgs: 1 - }, - handler: (_ref2, args) => { - var { - parser - } = _ref2; - var body = args[0]; - var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the - // argument's bin|rel|ord status - - return { - type: "mclass", - mode: parser.mode, - mclass: binrelClass(body), - body: [{ - type: "font", - mode: parser.mode, - font: "boldsymbol", - body - }], - isCharacterBox: isCharacterBox - }; - } -}); // Old font changing functions - -defineFunction({ - type: "font", - names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it", "\\cal"], - props: { - numArgs: 0, - allowedInText: true - }, - handler: (_ref3, args) => { - var { - parser, - funcName, - breakOnTokenText - } = _ref3; - var { - mode - } = parser; - var body = parser.parseExpression(true, breakOnTokenText); - var style = "math" + funcName.slice(1); - return { - type: "font", - mode: mode, - font: style, - body: { - type: "ordgroup", - mode: parser.mode, - body - } - }; - }, - htmlBuilder: htmlBuilder$5, - mathmlBuilder: mathmlBuilder$4 -}); - -var adjustStyle = (size, originalStyle) => { - // Figure out what style this fraction should be in based on the - // function used - var style = originalStyle; - - if (size === "display") { - // Get display style as a default. - // If incoming style is sub/sup, use style.text() to get correct size. - style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY; - } else if (size === "text" && style.size === Style$1.DISPLAY.size) { - // We're in a \tfrac but incoming style is displaystyle, so: - style = Style$1.TEXT; - } else if (size === "script") { - style = Style$1.SCRIPT; - } else if (size === "scriptscript") { - style = Style$1.SCRIPTSCRIPT; - } - - return style; -}; - -var htmlBuilder$4 = (group, options) => { - // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). - var style = adjustStyle(group.size, options.style); - var nstyle = style.fracNum(); - var dstyle = style.fracDen(); - var newOptions; - newOptions = options.havingStyle(nstyle); - var numerm = buildGroup$1(group.numer, newOptions, options); - - if (group.continued) { - // \cfrac inserts a \strut into the numerator. - // Get \strut dimensions from TeXbook page 353. - var hStrut = 8.5 / options.fontMetrics().ptPerEm; - var dStrut = 3.5 / options.fontMetrics().ptPerEm; - numerm.height = numerm.height < hStrut ? hStrut : numerm.height; - numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth; - } - - newOptions = options.havingStyle(dstyle); - var denomm = buildGroup$1(group.denom, newOptions, options); - var rule; - var ruleWidth; - var ruleSpacing; - - if (group.hasBarLine) { - if (group.barSize) { - ruleWidth = calculateSize(group.barSize, options); - rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth); - } else { - rule = buildCommon.makeLineSpan("frac-line", options); - } - - ruleWidth = rule.height; - ruleSpacing = rule.height; - } else { - rule = null; - ruleWidth = 0; - ruleSpacing = options.fontMetrics().defaultRuleThickness; - } // Rule 15b - - - var numShift; - var clearance; - var denomShift; - - if (style.size === Style$1.DISPLAY.size || group.size === "display") { - numShift = options.fontMetrics().num1; - - if (ruleWidth > 0) { - clearance = 3 * ruleSpacing; - } else { - clearance = 7 * ruleSpacing; - } - - denomShift = options.fontMetrics().denom1; - } else { - if (ruleWidth > 0) { - numShift = options.fontMetrics().num2; - clearance = ruleSpacing; - } else { - numShift = options.fontMetrics().num3; - clearance = 3 * ruleSpacing; - } - - denomShift = options.fontMetrics().denom2; - } - - var frac; - - if (!rule) { - // Rule 15c - var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift); - - if (candidateClearance < clearance) { - numShift += 0.5 * (clearance - candidateClearance); - denomShift += 0.5 * (clearance - candidateClearance); - } - - frac = buildCommon.makeVList({ - positionType: "individualShift", - children: [{ - type: "elem", - elem: denomm, - shift: denomShift - }, { - type: "elem", - elem: numerm, - shift: -numShift - }] - }, options); - } else { - // Rule 15d - var axisHeight = options.fontMetrics().axisHeight; - - if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) { - numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth)); - } - - if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) { - denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift)); - } - - var midShift = -(axisHeight - 0.5 * ruleWidth); - frac = buildCommon.makeVList({ - positionType: "individualShift", - children: [{ - type: "elem", - elem: denomm, - shift: denomShift - }, { - type: "elem", - elem: rule, - shift: midShift - }, { - type: "elem", - elem: numerm, - shift: -numShift - }] - }, options); - } // Since we manually change the style sometimes (with \dfrac or \tfrac), - // account for the possible size change here. - - - newOptions = options.havingStyle(style); - frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier; - frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e - - var delimSize; - - if (style.size === Style$1.DISPLAY.size) { - delimSize = options.fontMetrics().delim1; - } else if (style.size === Style$1.SCRIPTSCRIPT.size) { - delimSize = options.havingStyle(Style$1.SCRIPT).fontMetrics().delim2; - } else { - delimSize = options.fontMetrics().delim2; - } - - var leftDelim; - var rightDelim; - - if (group.leftDelim == null) { - leftDelim = makeNullDelimiter(options, ["mopen"]); - } else { - leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]); - } - - if (group.continued) { - rightDelim = buildCommon.makeSpan([]); // zero width for \cfrac - } else if (group.rightDelim == null) { - rightDelim = makeNullDelimiter(options, ["mclose"]); - } else { - rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]); - } - - return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options); -}; - -var mathmlBuilder$3 = (group, options) => { - var node = new mathMLTree.MathNode("mfrac", [buildGroup(group.numer, options), buildGroup(group.denom, options)]); - - if (!group.hasBarLine) { - node.setAttribute("linethickness", "0px"); - } else if (group.barSize) { - var ruleWidth = calculateSize(group.barSize, options); - node.setAttribute("linethickness", makeEm(ruleWidth)); - } - - var style = adjustStyle(group.size, options.style); - - if (style.size !== options.style.size) { - node = new mathMLTree.MathNode("mstyle", [node]); - var isDisplay = style.size === Style$1.DISPLAY.size ? "true" : "false"; - node.setAttribute("displaystyle", isDisplay); - node.setAttribute("scriptlevel", "0"); - } - - if (group.leftDelim != null || group.rightDelim != null) { - var withDelims = []; - - if (group.leftDelim != null) { - var leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]); - leftOp.setAttribute("fence", "true"); - withDelims.push(leftOp); - } - - withDelims.push(node); - - if (group.rightDelim != null) { - var rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]); - rightOp.setAttribute("fence", "true"); - withDelims.push(rightOp); - } - - return makeRow(withDelims); - } - - return node; -}; - -defineFunction({ - type: "genfrac", - names: ["\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly - "\\\\bracefrac", "\\\\brackfrac" // ditto - ], - props: { - numArgs: 2, - allowedInArgument: true - }, - handler: (_ref, args) => { - var { - parser, - funcName - } = _ref; - var numer = args[0]; - var denom = args[1]; - var hasBarLine; - var leftDelim = null; - var rightDelim = null; - var size = "auto"; - - switch (funcName) { - case "\\dfrac": - case "\\frac": - case "\\tfrac": - hasBarLine = true; - break; - - case "\\\\atopfrac": - hasBarLine = false; - break; - - case "\\dbinom": - case "\\binom": - case "\\tbinom": - hasBarLine = false; - leftDelim = "("; - rightDelim = ")"; - break; - - case "\\\\bracefrac": - hasBarLine = false; - leftDelim = "\\{"; - rightDelim = "\\}"; - break; - - case "\\\\brackfrac": - hasBarLine = false; - leftDelim = "["; - rightDelim = "]"; - break; - - default: - throw new Error("Unrecognized genfrac command"); - } - - switch (funcName) { - case "\\dfrac": - case "\\dbinom": - size = "display"; - break; - - case "\\tfrac": - case "\\tbinom": - size = "text"; - break; - } - - return { - type: "genfrac", - mode: parser.mode, - continued: false, - numer, - denom, - hasBarLine, - leftDelim, - rightDelim, - size, - barSize: null - }; - }, - htmlBuilder: htmlBuilder$4, - mathmlBuilder: mathmlBuilder$3 -}); -defineFunction({ - type: "genfrac", - names: ["\\cfrac"], - props: { - numArgs: 2 - }, - handler: (_ref2, args) => { - var { - parser, - funcName - } = _ref2; - var numer = args[0]; - var denom = args[1]; - return { - type: "genfrac", - mode: parser.mode, - continued: true, - numer, - denom, - hasBarLine: true, - leftDelim: null, - rightDelim: null, - size: "display", - barSize: null - }; - } -}); // Infix generalized fractions -- these are not rendered directly, but replaced -// immediately by one of the variants above. - -defineFunction({ - type: "infix", - names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"], - props: { - numArgs: 0, - infix: true - }, - - handler(_ref3) { - var { - parser, - funcName, - token - } = _ref3; - var replaceWith; - - switch (funcName) { - case "\\over": - replaceWith = "\\frac"; - break; - - case "\\choose": - replaceWith = "\\binom"; - break; - - case "\\atop": - replaceWith = "\\\\atopfrac"; - break; - - case "\\brace": - replaceWith = "\\\\bracefrac"; - break; - - case "\\brack": - replaceWith = "\\\\brackfrac"; - break; - - default: - throw new Error("Unrecognized infix genfrac command"); - } - - return { - type: "infix", - mode: parser.mode, - replaceWith, - token - }; - } - -}); -var stylArray = ["display", "text", "script", "scriptscript"]; - -var delimFromValue = function delimFromValue(delimString) { - var delim = null; - - if (delimString.length > 0) { - delim = delimString; - delim = delim === "." ? null : delim; - } - - return delim; -}; - -defineFunction({ - type: "genfrac", - names: ["\\genfrac"], - props: { - numArgs: 6, - allowedInArgument: true, - argTypes: ["math", "math", "size", "text", "math", "math"] - }, - - handler(_ref4, args) { - var { - parser - } = _ref4; - var numer = args[4]; - var denom = args[5]; // Look into the parse nodes to get the desired delimiters. - - var leftNode = normalizeArgument(args[0]); - var leftDelim = leftNode.type === "atom" && leftNode.family === "open" ? delimFromValue(leftNode.text) : null; - var rightNode = normalizeArgument(args[1]); - var rightDelim = rightNode.type === "atom" && rightNode.family === "close" ? delimFromValue(rightNode.text) : null; - var barNode = assertNodeType(args[2], "size"); - var hasBarLine; - var barSize = null; - - if (barNode.isBlank) { - // \genfrac acts differently than \above. - // \genfrac treats an empty size group as a signal to use a - // standard bar size. \above would see size = 0 and omit the bar. - hasBarLine = true; - } else { - barSize = barNode.value; - hasBarLine = barSize.number > 0; - } // Find out if we want displaystyle, textstyle, etc. - - - var size = "auto"; - var styl = args[3]; - - if (styl.type === "ordgroup") { - if (styl.body.length > 0) { - var textOrd = assertNodeType(styl.body[0], "textord"); - size = stylArray[Number(textOrd.text)]; - } - } else { - styl = assertNodeType(styl, "textord"); - size = stylArray[Number(styl.text)]; - } - - return { - type: "genfrac", - mode: parser.mode, - numer, - denom, - continued: false, - hasBarLine, - barSize, - leftDelim, - rightDelim, - size - }; - }, - - htmlBuilder: htmlBuilder$4, - mathmlBuilder: mathmlBuilder$3 -}); // \above is an infix fraction that also defines a fraction bar size. - -defineFunction({ - type: "infix", - names: ["\\above"], - props: { - numArgs: 1, - argTypes: ["size"], - infix: true - }, - - handler(_ref5, args) { - var { - parser, - funcName, - token - } = _ref5; - return { - type: "infix", - mode: parser.mode, - replaceWith: "\\\\abovefrac", - size: assertNodeType(args[0], "size").value, - token - }; - } - -}); -defineFunction({ - type: "genfrac", - names: ["\\\\abovefrac"], - props: { - numArgs: 3, - argTypes: ["math", "size", "math"] - }, - handler: (_ref6, args) => { - var { - parser, - funcName - } = _ref6; - var numer = args[0]; - var barSize = assert(assertNodeType(args[1], "infix").size); - var denom = args[2]; - var hasBarLine = barSize.number > 0; - return { - type: "genfrac", - mode: parser.mode, - numer, - denom, - continued: false, - hasBarLine, - barSize, - leftDelim: null, - rightDelim: null, - size: "auto" - }; - }, - htmlBuilder: htmlBuilder$4, - mathmlBuilder: mathmlBuilder$3 -}); - -// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but -// also "supsub" since an over/underbrace can affect super/subscripting. -var htmlBuilder$3 = (grp, options) => { - var style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node. - - var supSubGroup; - var group; - - if (grp.type === "supsub") { - // Ref: LaTeX source2e: }}}}\limits} - // i.e. LaTeX treats the brace similar to an op and passes it - // with \limits, so we need to assign supsub style. - supSubGroup = grp.sup ? buildGroup$1(grp.sup, options.havingStyle(style.sup()), options) : buildGroup$1(grp.sub, options.havingStyle(style.sub()), options); - group = assertNodeType(grp.base, "horizBrace"); - } else { - group = assertNodeType(grp, "horizBrace"); - } // Build the base group - - - var body = buildGroup$1(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element - - var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓ - // This first vlist contains the content and the brace: equation - - var vlist; - - if (group.isOver) { - vlist = buildCommon.makeVList({ - positionType: "firstBaseline", - children: [{ - type: "elem", - elem: body - }, { - type: "kern", - size: 0.1 - }, { - type: "elem", - elem: braceBody - }] - }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. - - vlist.children[0].children[0].children[1].classes.push("svg-align"); - } else { - vlist = buildCommon.makeVList({ - positionType: "bottom", - positionData: body.depth + 0.1 + braceBody.height, - children: [{ - type: "elem", - elem: braceBody - }, { - type: "kern", - size: 0.1 - }, { - type: "elem", - elem: body - }] - }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. - - vlist.children[0].children[0].children[0].classes.push("svg-align"); - } - - if (supSubGroup) { - // To write the supsub, wrap the first vlist in another vlist: - // They can't all go in the same vlist, because the note might be - // wider than the equation. We want the equation to control the - // brace width. - // note long note long note - // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓ - // equation eqn eqn - var vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); - - if (group.isOver) { - vlist = buildCommon.makeVList({ - positionType: "firstBaseline", - children: [{ - type: "elem", - elem: vSpan - }, { - type: "kern", - size: 0.2 - }, { - type: "elem", - elem: supSubGroup - }] - }, options); - } else { - vlist = buildCommon.makeVList({ - positionType: "bottom", - positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth, - children: [{ - type: "elem", - elem: supSubGroup - }, { - type: "kern", - size: 0.2 - }, { - type: "elem", - elem: vSpan - }] - }, options); - } - } - - return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); -}; - -var mathmlBuilder$2 = (group, options) => { - var accentNode = stretchy.mathMLnode(group.label); - return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildGroup(group.base, options), accentNode]); -}; // Horizontal stretchy braces - - -defineFunction({ - type: "horizBrace", - names: ["\\overbrace", "\\underbrace"], - props: { - numArgs: 1 - }, - - handler(_ref, args) { - var { - parser, - funcName - } = _ref; - return { - type: "horizBrace", - mode: parser.mode, - label: funcName, - isOver: /^\\over/.test(funcName), - base: args[0] - }; - }, - - htmlBuilder: htmlBuilder$3, - mathmlBuilder: mathmlBuilder$2 -}); - -defineFunction({ - type: "href", - names: ["\\href"], - props: { - numArgs: 2, - argTypes: ["url", "original"], - allowedInText: true - }, - handler: (_ref, args) => { - var { - parser - } = _ref; - var body = args[1]; - var href = assertNodeType(args[0], "url").url; - - if (!parser.settings.isTrusted({ - command: "\\href", - url: href - })) { - return parser.formatUnsupportedCmd("\\href"); - } - - return { - type: "href", - mode: parser.mode, - href, - body: ordargument(body) - }; - }, - htmlBuilder: (group, options) => { - var elements = buildExpression$1(group.body, options, false); - return buildCommon.makeAnchor(group.href, [], elements, options); - }, - mathmlBuilder: (group, options) => { - var math = buildExpressionRow(group.body, options); - - if (!(math instanceof MathNode)) { - math = new MathNode("mrow", [math]); - } - - math.setAttribute("href", group.href); - return math; - } -}); -defineFunction({ - type: "href", - names: ["\\url"], - props: { - numArgs: 1, - argTypes: ["url"], - allowedInText: true - }, - handler: (_ref2, args) => { - var { - parser - } = _ref2; - var href = assertNodeType(args[0], "url").url; - - if (!parser.settings.isTrusted({ - command: "\\url", - url: href - })) { - return parser.formatUnsupportedCmd("\\url"); - } - - var chars = []; - - for (var i = 0; i < href.length; i++) { - var c = href[i]; - - if (c === "~") { - c = "\\textasciitilde"; - } - - chars.push({ - type: "textord", - mode: "text", - text: c - }); - } - - var body = { - type: "text", - mode: parser.mode, - font: "\\texttt", - body: chars - }; - return { - type: "href", - mode: parser.mode, - href, - body: ordargument(body) - }; - } -}); - -// In LaTeX, \vcenter can act only on a box, as in -// \vcenter{\hbox{$\frac{a+b}{\dfrac{c}{d}}$}} -// This function by itself doesn't do anything but prevent a soft line break. - -defineFunction({ - type: "hbox", - names: ["\\hbox"], - props: { - numArgs: 1, - argTypes: ["text"], - allowedInText: true, - primitive: true - }, - - handler(_ref, args) { - var { - parser - } = _ref; - return { - type: "hbox", - mode: parser.mode, - body: ordargument(args[0]) - }; - }, - - htmlBuilder(group, options) { - var elements = buildExpression$1(group.body, options, false); - return buildCommon.makeFragment(elements); - }, - - mathmlBuilder(group, options) { - return new mathMLTree.MathNode("mrow", buildExpression(group.body, options)); - } - -}); - -defineFunction({ - type: "html", - names: ["\\htmlClass", "\\htmlId", "\\htmlStyle", "\\htmlData"], - props: { - numArgs: 2, - argTypes: ["raw", "original"], - allowedInText: true - }, - handler: (_ref, args) => { - var { - parser, - funcName, - token - } = _ref; - var value = assertNodeType(args[0], "raw").string; - var body = args[1]; - - if (parser.settings.strict) { - parser.settings.reportNonstrict("htmlExtension", "HTML extension is disabled on strict mode"); - } - - var trustContext; - var attributes = {}; - - switch (funcName) { - case "\\htmlClass": - attributes.class = value; - trustContext = { - command: "\\htmlClass", - class: value - }; - break; - - case "\\htmlId": - attributes.id = value; - trustContext = { - command: "\\htmlId", - id: value - }; - break; - - case "\\htmlStyle": - attributes.style = value; - trustContext = { - command: "\\htmlStyle", - style: value - }; - break; - - case "\\htmlData": - { - var data = value.split(","); - - for (var i = 0; i < data.length; i++) { - var keyVal = data[i].split("="); - - if (keyVal.length !== 2) { - throw new ParseError("Error parsing key-value for \\htmlData"); - } - - attributes["data-" + keyVal[0].trim()] = keyVal[1].trim(); - } - - trustContext = { - command: "\\htmlData", - attributes - }; - break; - } - - default: - throw new Error("Unrecognized html command"); - } - - if (!parser.settings.isTrusted(trustContext)) { - return parser.formatUnsupportedCmd(funcName); - } - - return { - type: "html", - mode: parser.mode, - attributes, - body: ordargument(body) - }; - }, - htmlBuilder: (group, options) => { - var elements = buildExpression$1(group.body, options, false); - var classes = ["enclosing"]; - - if (group.attributes.class) { - classes.push(...group.attributes.class.trim().split(/\s+/)); - } - - var span = buildCommon.makeSpan(classes, elements, options); - - for (var attr in group.attributes) { - if (attr !== "class" && group.attributes.hasOwnProperty(attr)) { - span.setAttribute(attr, group.attributes[attr]); - } - } - - return span; - }, - mathmlBuilder: (group, options) => { - return buildExpressionRow(group.body, options); - } -}); - -defineFunction({ - type: "htmlmathml", - names: ["\\html@mathml"], - props: { - numArgs: 2, - allowedInText: true - }, - handler: (_ref, args) => { - var { - parser - } = _ref; - return { - type: "htmlmathml", - mode: parser.mode, - html: ordargument(args[0]), - mathml: ordargument(args[1]) - }; - }, - htmlBuilder: (group, options) => { - var elements = buildExpression$1(group.html, options, false); - return buildCommon.makeFragment(elements); - }, - mathmlBuilder: (group, options) => { - return buildExpressionRow(group.mathml, options); - } -}); - -var sizeData = function sizeData(str) { - if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) { - // str is a number with no unit specified. - // default unit is bp, per graphix package. - return { - number: +str, - unit: "bp" - }; - } else { - var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str); - - if (!match) { - throw new ParseError("Invalid size: '" + str + "' in \\includegraphics"); - } - - var data = { - number: +(match[1] + match[2]), - // sign + magnitude, cast to number - unit: match[3] - }; - - if (!validUnit(data)) { - throw new ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics."); - } - - return data; - } -}; - -defineFunction({ - type: "includegraphics", - names: ["\\includegraphics"], - props: { - numArgs: 1, - numOptionalArgs: 1, - argTypes: ["raw", "url"], - allowedInText: false - }, - handler: (_ref, args, optArgs) => { - var { - parser - } = _ref; - var width = { - number: 0, - unit: "em" - }; - var height = { - number: 0.9, - unit: "em" - }; // sorta character sized. - - var totalheight = { - number: 0, - unit: "em" - }; - var alt = ""; - - if (optArgs[0]) { - var attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string. - - var attributes = attributeStr.split(","); - - for (var i = 0; i < attributes.length; i++) { - var keyVal = attributes[i].split("="); - - if (keyVal.length === 2) { - var str = keyVal[1].trim(); - - switch (keyVal[0].trim()) { - case "alt": - alt = str; - break; - - case "width": - width = sizeData(str); - break; - - case "height": - height = sizeData(str); - break; - - case "totalheight": - totalheight = sizeData(str); - break; - - default: - throw new ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics."); - } - } - } - } - - var src = assertNodeType(args[0], "url").url; - - if (alt === "") { - // No alt given. Use the file name. Strip away the path. - alt = src; - alt = alt.replace(/^.*[\\/]/, ''); - alt = alt.substring(0, alt.lastIndexOf('.')); - } - - if (!parser.settings.isTrusted({ - command: "\\includegraphics", - url: src - })) { - return parser.formatUnsupportedCmd("\\includegraphics"); - } - - return { - type: "includegraphics", - mode: parser.mode, - alt: alt, - width: width, - height: height, - totalheight: totalheight, - src: src - }; - }, - htmlBuilder: (group, options) => { - var height = calculateSize(group.height, options); - var depth = 0; - - if (group.totalheight.number > 0) { - depth = calculateSize(group.totalheight, options) - height; - } - - var width = 0; - - if (group.width.number > 0) { - width = calculateSize(group.width, options); - } - - var style = { - height: makeEm(height + depth) - }; - - if (width > 0) { - style.width = makeEm(width); - } - - if (depth > 0) { - style.verticalAlign = makeEm(-depth); - } - - var node = new Img(group.src, group.alt, style); - node.height = height; - node.depth = depth; - return node; - }, - mathmlBuilder: (group, options) => { - var node = new mathMLTree.MathNode("mglyph", []); - node.setAttribute("alt", group.alt); - var height = calculateSize(group.height, options); - var depth = 0; - - if (group.totalheight.number > 0) { - depth = calculateSize(group.totalheight, options) - height; - node.setAttribute("valign", makeEm(-depth)); - } - - node.setAttribute("height", makeEm(height + depth)); - - if (group.width.number > 0) { - var width = calculateSize(group.width, options); - node.setAttribute("width", makeEm(width)); - } - - node.setAttribute("src", group.src); - return node; - } -}); - -// Horizontal spacing commands - -defineFunction({ - type: "kern", - names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], - props: { - numArgs: 1, - argTypes: ["size"], - primitive: true, - allowedInText: true - }, - - handler(_ref, args) { - var { - parser, - funcName - } = _ref; - var size = assertNodeType(args[0], "size"); - - if (parser.settings.strict) { - var mathFunction = funcName[1] === 'm'; // \mkern, \mskip - - var muUnit = size.value.unit === 'mu'; - - if (mathFunction) { - if (!muUnit) { - parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units")); - } - - if (parser.mode !== "math") { - parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " works only in math mode"); - } - } else { - // !mathFunction - if (muUnit) { - parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " doesn't support mu units"); - } - } - } - - return { - type: "kern", - mode: parser.mode, - dimension: size.value - }; - }, - - htmlBuilder(group, options) { - return buildCommon.makeGlue(group.dimension, options); - }, - - mathmlBuilder(group, options) { - var dimension = calculateSize(group.dimension, options); - return new mathMLTree.SpaceNode(dimension); - } - -}); - -// Horizontal overlap functions -defineFunction({ - type: "lap", - names: ["\\mathllap", "\\mathrlap", "\\mathclap"], - props: { - numArgs: 1, - allowedInText: true - }, - handler: (_ref, args) => { - var { - parser, - funcName - } = _ref; - var body = args[0]; - return { - type: "lap", - mode: parser.mode, - alignment: funcName.slice(5), - body - }; - }, - htmlBuilder: (group, options) => { - // mathllap, mathrlap, mathclap - var inner; - - if (group.alignment === "clap") { - // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/ - inner = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span - - inner = buildCommon.makeSpan(["inner"], [inner], options); - } else { - inner = buildCommon.makeSpan(["inner"], [buildGroup$1(group.body, options)]); - } - - var fix = buildCommon.makeSpan(["fix"], []); - var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the - // two items involved in the lap. - // Next, use a strut to set the height of the HTML bounding box. - // Otherwise, a tall argument may be misplaced. - // This code resolved issue #1153 - - var strut = buildCommon.makeSpan(["strut"]); - strut.style.height = makeEm(node.height + node.depth); - - if (node.depth) { - strut.style.verticalAlign = makeEm(-node.depth); - } - - node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall. - // This code resolves issue #1234 - - node = buildCommon.makeSpan(["thinbox"], [node], options); - return buildCommon.makeSpan(["mord", "vbox"], [node], options); - }, - mathmlBuilder: (group, options) => { - // mathllap, mathrlap, mathclap - var node = new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)]); - - if (group.alignment !== "rlap") { - var offset = group.alignment === "llap" ? "-1" : "-0.5"; - node.setAttribute("lspace", offset + "width"); - } - - node.setAttribute("width", "0px"); - return node; - } -}); - -defineFunction({ - type: "styling", - names: ["\\(", "$"], - props: { - numArgs: 0, - allowedInText: true, - allowedInMath: false - }, - - handler(_ref, args) { - var { - funcName, - parser - } = _ref; - var outerMode = parser.mode; - parser.switchMode("math"); - var close = funcName === "\\(" ? "\\)" : "$"; - var body = parser.parseExpression(false, close); - parser.expect(close); - parser.switchMode(outerMode); - return { - type: "styling", - mode: parser.mode, - style: "text", - body - }; - } - -}); // Check for extra closing math delimiters - -defineFunction({ - type: "text", - // Doesn't matter what this is. - names: ["\\)", "\\]"], - props: { - numArgs: 0, - allowedInText: true, - allowedInMath: false - }, - - handler(context, args) { - throw new ParseError("Mismatched " + context.funcName); - } - -}); - -var chooseMathStyle = (group, options) => { - switch (options.style.size) { - case Style$1.DISPLAY.size: - return group.display; - - case Style$1.TEXT.size: - return group.text; - - case Style$1.SCRIPT.size: - return group.script; - - case Style$1.SCRIPTSCRIPT.size: - return group.scriptscript; - - default: - return group.text; - } -}; - -defineFunction({ - type: "mathchoice", - names: ["\\mathchoice"], - props: { - numArgs: 4, - primitive: true - }, - handler: (_ref, args) => { - var { - parser - } = _ref; - return { - type: "mathchoice", - mode: parser.mode, - display: ordargument(args[0]), - text: ordargument(args[1]), - script: ordargument(args[2]), - scriptscript: ordargument(args[3]) - }; - }, - htmlBuilder: (group, options) => { - var body = chooseMathStyle(group, options); - var elements = buildExpression$1(body, options, false); - return buildCommon.makeFragment(elements); - }, - mathmlBuilder: (group, options) => { - var body = chooseMathStyle(group, options); - return buildExpressionRow(body, options); - } -}); - -var assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => { - base = buildCommon.makeSpan([], [base]); - var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup); - var sub; - var sup; // We manually have to handle the superscripts and subscripts. This, - // aside from the kern calculations, is copied from supsub. - - if (supGroup) { - var elem = buildGroup$1(supGroup, options.havingStyle(style.sup()), options); - sup = { - elem, - kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth) - }; - } - - if (subGroup) { - var _elem = buildGroup$1(subGroup, options.havingStyle(style.sub()), options); - - sub = { - elem: _elem, - kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height) - }; - } // Build the final group as a vlist of the possible subscript, base, - // and possible superscript. - - - var finalGroup; - - if (sup && sub) { - var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift; - finalGroup = buildCommon.makeVList({ - positionType: "bottom", - positionData: bottom, - children: [{ - type: "kern", - size: options.fontMetrics().bigOpSpacing5 - }, { - type: "elem", - elem: sub.elem, - marginLeft: makeEm(-slant) - }, { - type: "kern", - size: sub.kern - }, { - type: "elem", - elem: base - }, { - type: "kern", - size: sup.kern - }, { - type: "elem", - elem: sup.elem, - marginLeft: makeEm(slant) - }, { - type: "kern", - size: options.fontMetrics().bigOpSpacing5 - }] - }, options); - } else if (sub) { - var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note - // that we are supposed to shift the limits by 1/2 of the slant, - // but since we are centering the limits adding a full slant of - // margin will shift by 1/2 that. - - finalGroup = buildCommon.makeVList({ - positionType: "top", - positionData: top, - children: [{ - type: "kern", - size: options.fontMetrics().bigOpSpacing5 - }, { - type: "elem", - elem: sub.elem, - marginLeft: makeEm(-slant) - }, { - type: "kern", - size: sub.kern - }, { - type: "elem", - elem: base - }] - }, options); - } else if (sup) { - var _bottom = base.depth + baseShift; - - finalGroup = buildCommon.makeVList({ - positionType: "bottom", - positionData: _bottom, - children: [{ - type: "elem", - elem: base - }, { - type: "kern", - size: sup.kern - }, { - type: "elem", - elem: sup.elem, - marginLeft: makeEm(slant) - }, { - type: "kern", - size: options.fontMetrics().bigOpSpacing5 - }] - }, options); - } else { - // This case probably shouldn't occur (this would mean the - // supsub was sending us a group with no superscript or - // subscript) but be safe. - return base; - } - - var parts = [finalGroup]; - - if (sub && slant !== 0 && !subIsSingleCharacter) { - // A negative margin-left was applied to the lower limit. - // Avoid an overlap by placing a spacer on the left on the group. - var spacer = buildCommon.makeSpan(["mspace"], [], options); - spacer.style.marginRight = makeEm(slant); - parts.unshift(spacer); - } - - return buildCommon.makeSpan(["mop", "op-limits"], parts, options); -}; - -// Limits, symbols -// Most operators have a large successor symbol, but these don't. -var noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also -// "supsub" since some of them (like \int) can affect super/subscripting. - -var htmlBuilder$2 = (grp, options) => { - // Operators are handled in the TeXbook pg. 443-444, rule 13(a). - var supGroup; - var subGroup; - var hasLimits = false; - var group; - - if (grp.type === "supsub") { - // If we have limits, supsub will pass us its group to handle. Pull - // out the superscript and subscript and set the group to the op in - // its base. - supGroup = grp.sup; - subGroup = grp.sub; - group = assertNodeType(grp.base, "op"); - hasLimits = true; - } else { - group = assertNodeType(grp, "op"); - } - - var style = options.style; - var large = false; - - if (style.size === Style$1.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) { - // Most symbol operators get larger in displaystyle (rule 13) - large = true; - } - - var base; - - if (group.symbol) { - // If this is a symbol, create the symbol. - var fontName = large ? "Size2-Regular" : "Size1-Regular"; - var stash = ""; - - if (group.name === "\\oiint" || group.name === "\\oiiint") { - // No font glyphs yet, so use a glyph w/o the oval. - // TODO: When font glyphs are available, delete this code. - stash = group.name.slice(1); - group.name = stash === "oiint" ? "\\iint" : "\\iiint"; - } - - base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); - - if (stash.length > 0) { - // We're in \oiint or \oiiint. Overlay the oval. - // TODO: When font glyphs are available, delete this code. - var italic = base.italic; - var oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options); - base = buildCommon.makeVList({ - positionType: "individualShift", - children: [{ - type: "elem", - elem: base, - shift: 0 - }, { - type: "elem", - elem: oval, - shift: large ? 0.08 : 0 - }] - }, options); - group.name = "\\" + stash; - base.classes.unshift("mop"); // $FlowFixMe - - base.italic = italic; - } - } else if (group.body) { - // If this is a list, compose that list. - var inner = buildExpression$1(group.body, options, true); - - if (inner.length === 1 && inner[0] instanceof SymbolNode) { - base = inner[0]; - base.classes[0] = "mop"; // replace old mclass - } else { - base = buildCommon.makeSpan(["mop"], inner, options); - } - } else { - // Otherwise, this is a text operator. Build the text from the - // operator's name. - var output = []; - - for (var i = 1; i < group.name.length; i++) { - output.push(buildCommon.mathsym(group.name[i], group.mode, options)); - } - - base = buildCommon.makeSpan(["mop"], output, options); - } // If content of op is a single symbol, shift it vertically. - - - var baseShift = 0; - var slant = 0; - - if ((base instanceof SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) { - // We suppress the shift of the base of \overset and \underset. Otherwise, - // shift the symbol so its center lies on the axis (rule 13). It - // appears that our fonts have the centers of the symbols already - // almost on the axis, so these numbers are very small. Note we - // don't actually apply this here, but instead it is used either in - // the vlist creation or separately when there are no limits. - baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction. - // $FlowFixMe - - slant = base.italic; - } - - if (hasLimits) { - return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift); - } else { - if (baseShift) { - base.style.position = "relative"; - base.style.top = makeEm(baseShift); - } - - return base; - } -}; - -var mathmlBuilder$1 = (group, options) => { - var node; - - if (group.symbol) { - // This is a symbol. Just add the symbol. - node = new MathNode("mo", [makeText(group.name, group.mode)]); - - if (utils.contains(noSuccessor, group.name)) { - node.setAttribute("largeop", "false"); - } - } else if (group.body) { - // This is an operator with children. Add them. - node = new MathNode("mo", buildExpression(group.body, options)); - } else { - // This is a text operator. Add all of the characters from the - // operator's name. - node = new MathNode("mi", [new TextNode(group.name.slice(1))]); // Append an . - // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4 - - var operator = new MathNode("mo", [makeText("\u2061", "text")]); - - if (group.parentIsSupSub) { - node = new MathNode("mrow", [node, operator]); - } else { - node = newDocumentFragment([node, operator]); - } - } - - return node; -}; - -var singleCharBigOps = { - "\u220F": "\\prod", - "\u2210": "\\coprod", - "\u2211": "\\sum", - "\u22c0": "\\bigwedge", - "\u22c1": "\\bigvee", - "\u22c2": "\\bigcap", - "\u22c3": "\\bigcup", - "\u2a00": "\\bigodot", - "\u2a01": "\\bigoplus", - "\u2a02": "\\bigotimes", - "\u2a04": "\\biguplus", - "\u2a06": "\\bigsqcup" -}; -defineFunction({ - type: "op", - names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22c0", "\u22c1", "\u22c2", "\u22c3", "\u2a00", "\u2a01", "\u2a02", "\u2a04", "\u2a06"], - props: { - numArgs: 0 - }, - handler: (_ref, args) => { - var { - parser, - funcName - } = _ref; - var fName = funcName; - - if (fName.length === 1) { - fName = singleCharBigOps[fName]; - } - - return { - type: "op", - mode: parser.mode, - limits: true, - parentIsSupSub: false, - symbol: true, - name: fName - }; - }, - htmlBuilder: htmlBuilder$2, - mathmlBuilder: mathmlBuilder$1 -}); // Note: calling defineFunction with a type that's already been defined only -// works because the same htmlBuilder and mathmlBuilder are being used. - -defineFunction({ - type: "op", - names: ["\\mathop"], - props: { - numArgs: 1, - primitive: true - }, - handler: (_ref2, args) => { - var { - parser - } = _ref2; - var body = args[0]; - return { - type: "op", - mode: parser.mode, - limits: false, - parentIsSupSub: false, - symbol: false, - body: ordargument(body) - }; - }, - htmlBuilder: htmlBuilder$2, - mathmlBuilder: mathmlBuilder$1 -}); // There are 2 flags for operators; whether they produce limits in -// displaystyle, and whether they are symbols and should grow in -// displaystyle. These four groups cover the four possible choices. - -var singleCharIntegrals = { - "\u222b": "\\int", - "\u222c": "\\iint", - "\u222d": "\\iiint", - "\u222e": "\\oint", - "\u222f": "\\oiint", - "\u2230": "\\oiiint" -}; // No limits, not symbols - -defineFunction({ - type: "op", - names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], - props: { - numArgs: 0 - }, - - handler(_ref3) { - var { - parser, - funcName - } = _ref3; - return { - type: "op", - mode: parser.mode, - limits: false, - parentIsSupSub: false, - symbol: false, - name: funcName - }; - }, - - htmlBuilder: htmlBuilder$2, - mathmlBuilder: mathmlBuilder$1 -}); // Limits, not symbols - -defineFunction({ - type: "op", - names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"], - props: { - numArgs: 0 - }, - - handler(_ref4) { - var { - parser, - funcName - } = _ref4; - return { - type: "op", - mode: parser.mode, - limits: true, - parentIsSupSub: false, - symbol: false, - name: funcName - }; - }, - - htmlBuilder: htmlBuilder$2, - mathmlBuilder: mathmlBuilder$1 -}); // No limits, symbols - -defineFunction({ - type: "op", - names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222b", "\u222c", "\u222d", "\u222e", "\u222f", "\u2230"], - props: { - numArgs: 0 - }, - - handler(_ref5) { - var { - parser, - funcName - } = _ref5; - var fName = funcName; - - if (fName.length === 1) { - fName = singleCharIntegrals[fName]; - } - - return { - type: "op", - mode: parser.mode, - limits: false, - parentIsSupSub: false, - symbol: true, - name: fName - }; - }, - - htmlBuilder: htmlBuilder$2, - mathmlBuilder: mathmlBuilder$1 -}); - -// NOTE: Unlike most `htmlBuilder`s, this one handles not only -// "operatorname", but also "supsub" since \operatorname* can -// affect super/subscripting. -var htmlBuilder$1 = (grp, options) => { - // Operators are handled in the TeXbook pg. 443-444, rule 13(a). - var supGroup; - var subGroup; - var hasLimits = false; - var group; - - if (grp.type === "supsub") { - // If we have limits, supsub will pass us its group to handle. Pull - // out the superscript and subscript and set the group to the op in - // its base. - supGroup = grp.sup; - subGroup = grp.sub; - group = assertNodeType(grp.base, "operatorname"); - hasLimits = true; - } else { - group = assertNodeType(grp, "operatorname"); - } - - var base; - - if (group.body.length > 0) { - var body = group.body.map(child => { - // $FlowFixMe: Check if the node has a string `text` property. - var childText = child.text; - - if (typeof childText === "string") { - return { - type: "textord", - mode: child.mode, - text: childText - }; - } else { - return child; - } - }); // Consolidate function names into symbol characters. - - var expression = buildExpression$1(body, options.withFont("mathrm"), true); - - for (var i = 0; i < expression.length; i++) { - var child = expression[i]; - - if (child instanceof SymbolNode) { - // Per amsopn package, - // change minus to hyphen and \ast to asterisk - child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); - } - } - - base = buildCommon.makeSpan(["mop"], expression, options); - } else { - base = buildCommon.makeSpan(["mop"], [], options); - } - - if (hasLimits) { - return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0); - } else { - return base; - } -}; - -var mathmlBuilder = (group, options) => { - // The steps taken here are similar to the html version. - var expression = buildExpression(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction? - - var isAllString = true; // default - - for (var i = 0; i < expression.length; i++) { - var node = expression[i]; - - if (node instanceof mathMLTree.SpaceNode) ; else if (node instanceof mathMLTree.MathNode) { - switch (node.type) { - case "mi": - case "mn": - case "ms": - case "mspace": - case "mtext": - break; - // Do nothing yet. - - case "mo": - { - var child = node.children[0]; - - if (node.children.length === 1 && child instanceof mathMLTree.TextNode) { - child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); - } else { - isAllString = false; - } - - break; - } - - default: - isAllString = false; - } - } else { - isAllString = false; - } - } - - if (isAllString) { - // Write a single TextNode instead of multiple nested tags. - var word = expression.map(node => node.toText()).join(""); - expression = [new mathMLTree.TextNode(word)]; - } - - var identifier = new mathMLTree.MathNode("mi", expression); - identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as ⁡ - // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp - - var operator = new mathMLTree.MathNode("mo", [makeText("\u2061", "text")]); - - if (group.parentIsSupSub) { - return new mathMLTree.MathNode("mrow", [identifier, operator]); - } else { - return mathMLTree.newDocumentFragment([identifier, operator]); - } -}; // \operatorname -// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@ - - -defineFunction({ - type: "operatorname", - names: ["\\operatorname@", "\\operatornamewithlimits"], - props: { - numArgs: 1 - }, - handler: (_ref, args) => { - var { - parser, - funcName - } = _ref; - var body = args[0]; - return { - type: "operatorname", - mode: parser.mode, - body: ordargument(body), - alwaysHandleSupSub: funcName === "\\operatornamewithlimits", - limits: false, - parentIsSupSub: false - }; - }, - htmlBuilder: htmlBuilder$1, - mathmlBuilder -}); -defineMacro("\\operatorname", "\\@ifstar\\operatornamewithlimits\\operatorname@"); - -defineFunctionBuilders({ - type: "ordgroup", - - htmlBuilder(group, options) { - if (group.semisimple) { - return buildCommon.makeFragment(buildExpression$1(group.body, options, false)); - } - - return buildCommon.makeSpan(["mord"], buildExpression$1(group.body, options, true), options); - }, - - mathmlBuilder(group, options) { - return buildExpressionRow(group.body, options, true); - } - -}); - -defineFunction({ - type: "overline", - names: ["\\overline"], - props: { - numArgs: 1 - }, - - handler(_ref, args) { - var { - parser - } = _ref; - var body = args[0]; - return { - type: "overline", - mode: parser.mode, - body - }; - }, - - htmlBuilder(group, options) { - // Overlines are handled in the TeXbook pg 443, Rule 9. - // Build the inner group in the cramped style. - var innerGroup = buildGroup$1(group.body, options.havingCrampedStyle()); // Create the line above the body - - var line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns - - var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; - var vlist = buildCommon.makeVList({ - positionType: "firstBaseline", - children: [{ - type: "elem", - elem: innerGroup - }, { - type: "kern", - size: 3 * defaultRuleThickness - }, { - type: "elem", - elem: line - }, { - type: "kern", - size: defaultRuleThickness - }] - }, options); - return buildCommon.makeSpan(["mord", "overline"], [vlist], options); - }, - - mathmlBuilder(group, options) { - var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]); - operator.setAttribute("stretchy", "true"); - var node = new mathMLTree.MathNode("mover", [buildGroup(group.body, options), operator]); - node.setAttribute("accent", "true"); - return node; - } - -}); - -defineFunction({ - type: "phantom", - names: ["\\phantom"], - props: { - numArgs: 1, - allowedInText: true - }, - handler: (_ref, args) => { - var { - parser - } = _ref; - var body = args[0]; - return { - type: "phantom", - mode: parser.mode, - body: ordargument(body) - }; - }, - htmlBuilder: (group, options) => { - var elements = buildExpression$1(group.body, options.withPhantom(), false); // \phantom isn't supposed to affect the elements it contains. - // See "color" for more details. - - return buildCommon.makeFragment(elements); - }, - mathmlBuilder: (group, options) => { - var inner = buildExpression(group.body, options); - return new mathMLTree.MathNode("mphantom", inner); - } -}); -defineFunction({ - type: "hphantom", - names: ["\\hphantom"], - props: { - numArgs: 1, - allowedInText: true - }, - handler: (_ref2, args) => { - var { - parser - } = _ref2; - var body = args[0]; - return { - type: "hphantom", - mode: parser.mode, - body - }; - }, - htmlBuilder: (group, options) => { - var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options.withPhantom())]); - node.height = 0; - node.depth = 0; - - if (node.children) { - for (var i = 0; i < node.children.length; i++) { - node.children[i].height = 0; - node.children[i].depth = 0; - } - } // See smash for comment re: use of makeVList - - - node = buildCommon.makeVList({ - positionType: "firstBaseline", - children: [{ - type: "elem", - elem: node - }] - }, options); // For spacing, TeX treats \smash as a math group (same spacing as ord). - - return buildCommon.makeSpan(["mord"], [node], options); - }, - mathmlBuilder: (group, options) => { - var inner = buildExpression(ordargument(group.body), options); - var phantom = new mathMLTree.MathNode("mphantom", inner); - var node = new mathMLTree.MathNode("mpadded", [phantom]); - node.setAttribute("height", "0px"); - node.setAttribute("depth", "0px"); - return node; - } -}); -defineFunction({ - type: "vphantom", - names: ["\\vphantom"], - props: { - numArgs: 1, - allowedInText: true - }, - handler: (_ref3, args) => { - var { - parser - } = _ref3; - var body = args[0]; - return { - type: "vphantom", - mode: parser.mode, - body - }; - }, - htmlBuilder: (group, options) => { - var inner = buildCommon.makeSpan(["inner"], [buildGroup$1(group.body, options.withPhantom())]); - var fix = buildCommon.makeSpan(["fix"], []); - return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options); - }, - mathmlBuilder: (group, options) => { - var inner = buildExpression(ordargument(group.body), options); - var phantom = new mathMLTree.MathNode("mphantom", inner); - var node = new mathMLTree.MathNode("mpadded", [phantom]); - node.setAttribute("width", "0px"); - return node; - } -}); - -defineFunction({ - type: "raisebox", - names: ["\\raisebox"], - props: { - numArgs: 2, - argTypes: ["size", "hbox"], - allowedInText: true - }, - - handler(_ref, args) { - var { - parser - } = _ref; - var amount = assertNodeType(args[0], "size").value; - var body = args[1]; - return { - type: "raisebox", - mode: parser.mode, - dy: amount, - body - }; - }, - - htmlBuilder(group, options) { - var body = buildGroup$1(group.body, options); - var dy = calculateSize(group.dy, options); - return buildCommon.makeVList({ - positionType: "shift", - positionData: -dy, - children: [{ - type: "elem", - elem: body - }] - }, options); - }, - - mathmlBuilder(group, options) { - var node = new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)]); - var dy = group.dy.number + group.dy.unit; - node.setAttribute("voffset", dy); - return node; - } - -}); - -defineFunction({ - type: "internal", - names: ["\\relax"], - props: { - numArgs: 0, - allowedInText: true - }, - - handler(_ref) { - var { - parser - } = _ref; - return { - type: "internal", - mode: parser.mode - }; - } - -}); - -defineFunction({ - type: "rule", - names: ["\\rule"], - props: { - numArgs: 2, - numOptionalArgs: 1, - argTypes: ["size", "size", "size"] - }, - - handler(_ref, args, optArgs) { - var { - parser - } = _ref; - var shift = optArgs[0]; - var width = assertNodeType(args[0], "size"); - var height = assertNodeType(args[1], "size"); - return { - type: "rule", - mode: parser.mode, - shift: shift && assertNodeType(shift, "size").value, - width: width.value, - height: height.value - }; - }, - - htmlBuilder(group, options) { - // Make an empty span for the rule - var rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units - - var width = calculateSize(group.width, options); - var height = calculateSize(group.height, options); - var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size - - rule.style.borderRightWidth = makeEm(width); - rule.style.borderTopWidth = makeEm(height); - rule.style.bottom = makeEm(shift); // Record the height and width - - rule.width = width; - rule.height = height + shift; - rule.depth = -shift; // Font size is the number large enough that the browser will - // reserve at least `absHeight` space above the baseline. - // The 1.125 factor was empirically determined - - rule.maxFontSize = height * 1.125 * options.sizeMultiplier; - return rule; - }, - - mathmlBuilder(group, options) { - var width = calculateSize(group.width, options); - var height = calculateSize(group.height, options); - var shift = group.shift ? calculateSize(group.shift, options) : 0; - var color = options.color && options.getColor() || "black"; - var rule = new mathMLTree.MathNode("mspace"); - rule.setAttribute("mathbackground", color); - rule.setAttribute("width", makeEm(width)); - rule.setAttribute("height", makeEm(height)); - var wrapper = new mathMLTree.MathNode("mpadded", [rule]); - - if (shift >= 0) { - wrapper.setAttribute("height", makeEm(shift)); - } else { - wrapper.setAttribute("height", makeEm(shift)); - wrapper.setAttribute("depth", makeEm(-shift)); - } - - wrapper.setAttribute("voffset", makeEm(shift)); - return wrapper; - } - -}); - -function sizingGroup(value, options, baseOptions) { - var inner = buildExpression$1(value, options, false); - var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize - // manually. Handle nested size changes. - - for (var i = 0; i < inner.length; i++) { - var pos = inner[i].classes.indexOf("sizing"); - - if (pos < 0) { - Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions)); - } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) { - // This is a nested size change: e.g., inner[i] is the "b" in - // `\Huge a \small b`. Override the old size (the `reset-` class) - // but not the new size. - inner[i].classes[pos + 1] = "reset-size" + baseOptions.size; - } - - inner[i].height *= multiplier; - inner[i].depth *= multiplier; - } - - return buildCommon.makeFragment(inner); -} -var sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"]; -var htmlBuilder = (group, options) => { - // Handle sizing operators like \Huge. Real TeX doesn't actually allow - // these functions inside of math expressions, so we do some special - // handling. - var newOptions = options.havingSize(group.size); - return sizingGroup(group.body, newOptions, options); -}; -defineFunction({ - type: "sizing", - names: sizeFuncs, - props: { - numArgs: 0, - allowedInText: true - }, - handler: (_ref, args) => { - var { - breakOnTokenText, - funcName, - parser - } = _ref; - var body = parser.parseExpression(false, breakOnTokenText); - return { - type: "sizing", - mode: parser.mode, - // Figure out what size to use based on the list of functions above - size: sizeFuncs.indexOf(funcName) + 1, - body - }; - }, - htmlBuilder, - mathmlBuilder: (group, options) => { - var newOptions = options.havingSize(group.size); - var inner = buildExpression(group.body, newOptions); - var node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size - // changes, because we don't keep state of what style we're currently - // in, so we can't reset the size to normal before changing it. Now - // that we're passing an options parameter we should be able to fix - // this. - - node.setAttribute("mathsize", makeEm(newOptions.sizeMultiplier)); - return node; - } -}); - -// smash, with optional [tb], as in AMS -defineFunction({ - type: "smash", - names: ["\\smash"], - props: { - numArgs: 1, - numOptionalArgs: 1, - allowedInText: true - }, - handler: (_ref, args, optArgs) => { - var { - parser - } = _ref; - var smashHeight = false; - var smashDepth = false; - var tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup"); - - if (tbArg) { - // Optional [tb] argument is engaged. - // ref: amsmath: \renewcommand{\smash}[1][tb]{% - // def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% - var letter = ""; - - for (var i = 0; i < tbArg.body.length; ++i) { - var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property. - - letter = node.text; - - if (letter === "t") { - smashHeight = true; - } else if (letter === "b") { - smashDepth = true; - } else { - smashHeight = false; - smashDepth = false; - break; - } - } - } else { - smashHeight = true; - smashDepth = true; - } - - var body = args[0]; - return { - type: "smash", - mode: parser.mode, - body, - smashHeight, - smashDepth - }; - }, - htmlBuilder: (group, options) => { - var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); - - if (!group.smashHeight && !group.smashDepth) { - return node; - } - - if (group.smashHeight) { - node.height = 0; // In order to influence makeVList, we have to reset the children. - - if (node.children) { - for (var i = 0; i < node.children.length; i++) { - node.children[i].height = 0; - } - } - } - - if (group.smashDepth) { - node.depth = 0; - - if (node.children) { - for (var _i = 0; _i < node.children.length; _i++) { - node.children[_i].depth = 0; - } - } - } // At this point, we've reset the TeX-like height and depth values. - // But the span still has an HTML line height. - // makeVList applies "display: table-cell", which prevents the browser - // from acting on that line height. So we'll call makeVList now. - - - var smashedNode = buildCommon.makeVList({ - positionType: "firstBaseline", - children: [{ - type: "elem", - elem: node - }] - }, options); // For spacing, TeX treats \hphantom as a math group (same spacing as ord). - - return buildCommon.makeSpan(["mord"], [smashedNode], options); - }, - mathmlBuilder: (group, options) => { - var node = new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)]); - - if (group.smashHeight) { - node.setAttribute("height", "0px"); - } - - if (group.smashDepth) { - node.setAttribute("depth", "0px"); - } - - return node; - } -}); - -defineFunction({ - type: "sqrt", - names: ["\\sqrt"], - props: { - numArgs: 1, - numOptionalArgs: 1 - }, - - handler(_ref, args, optArgs) { - var { - parser - } = _ref; - var index = optArgs[0]; - var body = args[0]; - return { - type: "sqrt", - mode: parser.mode, - body, - index - }; - }, - - htmlBuilder(group, options) { - // Square roots are handled in the TeXbook pg. 443, Rule 11. - // First, we do the same steps as in overline to build the inner group - // and line - var inner = buildGroup$1(group.body, options.havingCrampedStyle()); - - if (inner.height === 0) { - // Render a small surd. - inner.height = options.fontMetrics().xHeight; - } // Some groups can return document fragments. Handle those by wrapping - // them in a span. - - - inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \surd delimiter - - var metrics = options.fontMetrics(); - var theta = metrics.defaultRuleThickness; - var phi = theta; - - if (options.style.id < Style$1.TEXT.id) { - phi = options.fontMetrics().xHeight; - } // Calculate the clearance between the body and line - - - var lineClearance = theta + phi / 4; - var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size - - var { - span: img, - ruleWidth, - advanceWidth - } = delimiter.sqrtImage(minDelimiterHeight, options); - var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size - - if (delimDepth > inner.height + inner.depth + lineClearance) { - lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2; - } // Shift the sqrt image - - - var imgShift = img.height - inner.height - lineClearance - ruleWidth; - inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument. - - var body = buildCommon.makeVList({ - positionType: "firstBaseline", - children: [{ - type: "elem", - elem: inner, - wrapperClasses: ["svg-align"] - }, { - type: "kern", - size: -(inner.height + imgShift) - }, { - type: "elem", - elem: img - }, { - type: "kern", - size: ruleWidth - }] - }, options); - - if (!group.index) { - return buildCommon.makeSpan(["mord", "sqrt"], [body], options); - } else { - // Handle the optional root index - // The index is always in scriptscript style - var newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT); - var rootm = buildGroup$1(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX - // source, in the definition of `\r@@t`. - - var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly - - var rootVList = buildCommon.makeVList({ - positionType: "shift", - positionData: -toShift, - children: [{ - type: "elem", - elem: rootm - }] - }, options); // Add a class surrounding it so we can add on the appropriate - // kerning - - var rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]); - return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options); - } - }, - - mathmlBuilder(group, options) { - var { - body, - index - } = group; - return index ? new mathMLTree.MathNode("mroot", [buildGroup(body, options), buildGroup(index, options)]) : new mathMLTree.MathNode("msqrt", [buildGroup(body, options)]); - } - -}); - -var styleMap = { - "display": Style$1.DISPLAY, - "text": Style$1.TEXT, - "script": Style$1.SCRIPT, - "scriptscript": Style$1.SCRIPTSCRIPT -}; -defineFunction({ - type: "styling", - names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], - props: { - numArgs: 0, - allowedInText: true, - primitive: true - }, - - handler(_ref, args) { - var { - breakOnTokenText, - funcName, - parser - } = _ref; - // parse out the implicit body - var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g. - // here and in buildHTML and de-dupe the enumeration of all the styles). - // $FlowFixMe: The names above exactly match the styles. - - var style = funcName.slice(1, funcName.length - 5); - return { - type: "styling", - mode: parser.mode, - // Figure out what style to use by pulling out the style from - // the function name - style, - body - }; - }, - - htmlBuilder(group, options) { - // Style changes are handled in the TeXbook on pg. 442, Rule 3. - var newStyle = styleMap[group.style]; - var newOptions = options.havingStyle(newStyle).withFont(''); - return sizingGroup(group.body, newOptions, options); - }, - - mathmlBuilder(group, options) { - // Figure out what style we're changing to. - var newStyle = styleMap[group.style]; - var newOptions = options.havingStyle(newStyle); - var inner = buildExpression(group.body, newOptions); - var node = new mathMLTree.MathNode("mstyle", inner); - var styleAttributes = { - "display": ["0", "true"], - "text": ["0", "false"], - "script": ["1", "false"], - "scriptscript": ["2", "false"] - }; - var attr = styleAttributes[group.style]; - node.setAttribute("scriptlevel", attr[0]); - node.setAttribute("displaystyle", attr[1]); - return node; - } - -}); - -/** - * Sometimes, groups perform special rules when they have superscripts or - * subscripts attached to them. This function lets the `supsub` group know that - * Sometimes, groups perform special rules when they have superscripts or - * its inner element should handle the superscripts and subscripts instead of - * handling them itself. - */ -var htmlBuilderDelegate = function htmlBuilderDelegate(group, options) { - var base = group.base; - - if (!base) { - return null; - } else if (base.type === "op") { - // Operators handle supsubs differently when they have limits - // (e.g. `\displaystyle\sum_2^3`) - var delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub); - return delegate ? htmlBuilder$2 : null; - } else if (base.type === "operatorname") { - var _delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits); - - return _delegate ? htmlBuilder$1 : null; - } else if (base.type === "accent") { - return utils.isCharacterBox(base.base) ? htmlBuilder$a : null; - } else if (base.type === "horizBrace") { - var isSup = !group.sub; - return isSup === base.isOver ? htmlBuilder$3 : null; - } else { - return null; - } -}; // Super scripts and subscripts, whose precise placement can depend on other -// functions that precede them. - - -defineFunctionBuilders({ - type: "supsub", - - htmlBuilder(group, options) { - // Superscript and subscripts are handled in the TeXbook on page - // 445-446, rules 18(a-f). - // Here is where we defer to the inner group if it should handle - // superscripts and subscripts itself. - var builderDelegate = htmlBuilderDelegate(group, options); - - if (builderDelegate) { - return builderDelegate(group, options); - } - - var { - base: valueBase, - sup: valueSup, - sub: valueSub - } = group; - var base = buildGroup$1(valueBase, options); - var supm; - var subm; - var metrics = options.fontMetrics(); // Rule 18a - - var supShift = 0; - var subShift = 0; - var isCharacterBox = valueBase && utils.isCharacterBox(valueBase); - - if (valueSup) { - var newOptions = options.havingStyle(options.style.sup()); - supm = buildGroup$1(valueSup, newOptions, options); - - if (!isCharacterBox) { - supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier; - } - } - - if (valueSub) { - var _newOptions = options.havingStyle(options.style.sub()); - - subm = buildGroup$1(valueSub, _newOptions, options); - - if (!isCharacterBox) { - subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier; - } - } // Rule 18c - - - var minSupShift; - - if (options.style === Style$1.DISPLAY) { - minSupShift = metrics.sup1; - } else if (options.style.cramped) { - minSupShift = metrics.sup3; - } else { - minSupShift = metrics.sup2; - } // scriptspace is a font-size-independent size, so scale it - // appropriately for use as the marginRight. - - - var multiplier = options.sizeMultiplier; - var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier); - var marginLeft = null; - - if (subm) { - // Subscripts shouldn't be shifted by the base's italic correction. - // Account for that by shifting the subscript back the appropriate - // amount. Note we only do this when the base is a single symbol. - var isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint"); - - if (base instanceof SymbolNode || isOiint) { - // $FlowFixMe - marginLeft = makeEm(-base.italic); - } - } - - var supsub; - - if (supm && subm) { - supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); - subShift = Math.max(subShift, metrics.sub2); - var ruleWidth = metrics.defaultRuleThickness; // Rule 18e - - var maxWidth = 4 * ruleWidth; - - if (supShift - supm.depth - (subm.height - subShift) < maxWidth) { - subShift = maxWidth - (supShift - supm.depth) + subm.height; - var psi = 0.8 * metrics.xHeight - (supShift - supm.depth); - - if (psi > 0) { - supShift += psi; - subShift -= psi; - } - } - - var vlistElem = [{ - type: "elem", - elem: subm, - shift: subShift, - marginRight, - marginLeft - }, { - type: "elem", - elem: supm, - shift: -supShift, - marginRight - }]; - supsub = buildCommon.makeVList({ - positionType: "individualShift", - children: vlistElem - }, options); - } else if (subm) { - // Rule 18b - subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight); - var _vlistElem = [{ - type: "elem", - elem: subm, - marginLeft, - marginRight - }]; - supsub = buildCommon.makeVList({ - positionType: "shift", - positionData: subShift, - children: _vlistElem - }, options); - } else if (supm) { - // Rule 18c, d - supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); - supsub = buildCommon.makeVList({ - positionType: "shift", - positionData: -supShift, - children: [{ - type: "elem", - elem: supm, - marginRight - }] - }, options); - } else { - throw new Error("supsub must have either sup or sub."); - } // Wrap the supsub vlist in a span.msupsub to reset text-align. - - - var mclass = getTypeOfDomTree(base, "right") || "mord"; - return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options); - }, - - mathmlBuilder(group, options) { - // Is the inner group a relevant horizonal brace? - var isBrace = false; - var isOver; - var isSup; - - if (group.base && group.base.type === "horizBrace") { - isSup = !!group.sup; - - if (isSup === group.base.isOver) { - isBrace = true; - isOver = group.base.isOver; - } - } - - if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) { - group.base.parentIsSupSub = true; - } - - var children = [buildGroup(group.base, options)]; - - if (group.sub) { - children.push(buildGroup(group.sub, options)); - } - - if (group.sup) { - children.push(buildGroup(group.sup, options)); - } - - var nodeType; - - if (isBrace) { - nodeType = isOver ? "mover" : "munder"; - } else if (!group.sub) { - var base = group.base; - - if (base && base.type === "op" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) { - nodeType = "mover"; - } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) { - nodeType = "mover"; - } else { - nodeType = "msup"; - } - } else if (!group.sup) { - var _base = group.base; - - if (_base && _base.type === "op" && _base.limits && (options.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) { - nodeType = "munder"; - } else if (_base && _base.type === "operatorname" && _base.alwaysHandleSupSub && (_base.limits || options.style === Style$1.DISPLAY)) { - nodeType = "munder"; - } else { - nodeType = "msub"; - } - } else { - var _base2 = group.base; - - if (_base2 && _base2.type === "op" && _base2.limits && options.style === Style$1.DISPLAY) { - nodeType = "munderover"; - } else if (_base2 && _base2.type === "operatorname" && _base2.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || _base2.limits)) { - nodeType = "munderover"; - } else { - nodeType = "msubsup"; - } - } - - return new mathMLTree.MathNode(nodeType, children); - } - -}); - -defineFunctionBuilders({ - type: "atom", - - htmlBuilder(group, options) { - return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]); - }, - - mathmlBuilder(group, options) { - var node = new mathMLTree.MathNode("mo", [makeText(group.text, group.mode)]); - - if (group.family === "bin") { - var variant = getVariant(group, options); - - if (variant === "bold-italic") { - node.setAttribute("mathvariant", variant); - } - } else if (group.family === "punct") { - node.setAttribute("separator", "true"); - } else if (group.family === "open" || group.family === "close") { - // Delims built here should not stretch vertically. - // See delimsizing.js for stretchy delims. - node.setAttribute("stretchy", "false"); - } - - return node; - } - -}); - -// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in -// src/symbols.js. -var defaultVariant = { - "mi": "italic", - "mn": "normal", - "mtext": "normal" -}; -defineFunctionBuilders({ - type: "mathord", - - htmlBuilder(group, options) { - return buildCommon.makeOrd(group, options, "mathord"); - }, - - mathmlBuilder(group, options) { - var node = new mathMLTree.MathNode("mi", [makeText(group.text, group.mode, options)]); - var variant = getVariant(group, options) || "italic"; - - if (variant !== defaultVariant[node.type]) { - node.setAttribute("mathvariant", variant); - } - - return node; - } - -}); -defineFunctionBuilders({ - type: "textord", - - htmlBuilder(group, options) { - return buildCommon.makeOrd(group, options, "textord"); - }, - - mathmlBuilder(group, options) { - var text = makeText(group.text, group.mode, options); - var variant = getVariant(group, options) || "normal"; - var node; - - if (group.mode === 'text') { - node = new mathMLTree.MathNode("mtext", [text]); - } else if (/[0-9]/.test(group.text)) { - node = new mathMLTree.MathNode("mn", [text]); - } else if (group.text === "\\prime") { - node = new mathMLTree.MathNode("mo", [text]); - } else { - node = new mathMLTree.MathNode("mi", [text]); - } - - if (variant !== defaultVariant[node.type]) { - node.setAttribute("mathvariant", variant); - } - - return node; - } - -}); - -var cssSpace = { - "\\nobreak": "nobreak", - "\\allowbreak": "allowbreak" -}; // A lookup table to determine whether a spacing function/symbol should be -// treated like a regular space character. If a symbol or command is a key -// in this table, then it should be a regular space character. Furthermore, -// the associated value may have a `className` specifying an extra CSS class -// to add to the created `span`. - -var regularSpace = { - " ": {}, - "\\ ": {}, - "~": { - className: "nobreak" - }, - "\\space": {}, - "\\nobreakspace": { - className: "nobreak" - } -}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in -// src/symbols.js. - -defineFunctionBuilders({ - type: "spacing", - - htmlBuilder(group, options) { - if (regularSpace.hasOwnProperty(group.text)) { - var className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these - // things has an entry in the symbols table, so these will be turned - // into appropriate outputs. - - if (group.mode === "text") { - var ord = buildCommon.makeOrd(group, options, "textord"); - ord.classes.push(className); - return ord; - } else { - return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options); - } - } else if (cssSpace.hasOwnProperty(group.text)) { - // Spaces based on just a CSS class. - return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options); - } else { - throw new ParseError("Unknown type of space \"" + group.text + "\""); - } - }, - - mathmlBuilder(group, options) { - var node; - - if (regularSpace.hasOwnProperty(group.text)) { - node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\u00a0")]); - } else if (cssSpace.hasOwnProperty(group.text)) { - // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored - return new mathMLTree.MathNode("mspace"); - } else { - throw new ParseError("Unknown type of space \"" + group.text + "\""); - } - - return node; - } - -}); - -var pad = () => { - var padNode = new mathMLTree.MathNode("mtd", []); - padNode.setAttribute("width", "50%"); - return padNode; -}; - -defineFunctionBuilders({ - type: "tag", - - mathmlBuilder(group, options) { - var table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]); - table.setAttribute("width", "100%"); - return table; // TODO: Left-aligned tags. - // Currently, the group and options passed here do not contain - // enough info to set tag alignment. `leqno` is in Settings but it is - // not passed to Options. On the HTML side, leqno is - // set by a CSS class applied in buildTree.js. That would have worked - // in MathML if browsers supported . Since they don't, we - // need to rewrite the way this function is called. - } - -}); - -var textFontFamilies = { - "\\text": undefined, - "\\textrm": "textrm", - "\\textsf": "textsf", - "\\texttt": "texttt", - "\\textnormal": "textrm" -}; -var textFontWeights = { - "\\textbf": "textbf", - "\\textmd": "textmd" -}; -var textFontShapes = { - "\\textit": "textit", - "\\textup": "textup" -}; - -var optionsWithFont = (group, options) => { - var font = group.font; // Checks if the argument is a font family or a font style. - - if (!font) { - return options; - } else if (textFontFamilies[font]) { - return options.withTextFontFamily(textFontFamilies[font]); - } else if (textFontWeights[font]) { - return options.withTextFontWeight(textFontWeights[font]); - } else { - return options.withTextFontShape(textFontShapes[font]); - } -}; - -defineFunction({ - type: "text", - names: [// Font families - "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights - "\\textbf", "\\textmd", // Font Shapes - "\\textit", "\\textup"], - props: { - numArgs: 1, - argTypes: ["text"], - allowedInArgument: true, - allowedInText: true - }, - - handler(_ref, args) { - var { - parser, - funcName - } = _ref; - var body = args[0]; - return { - type: "text", - mode: parser.mode, - body: ordargument(body), - font: funcName - }; - }, - - htmlBuilder(group, options) { - var newOptions = optionsWithFont(group, options); - var inner = buildExpression$1(group.body, newOptions, true); - return buildCommon.makeSpan(["mord", "text"], inner, newOptions); - }, - - mathmlBuilder(group, options) { - var newOptions = optionsWithFont(group, options); - return buildExpressionRow(group.body, newOptions); - } - -}); - -defineFunction({ - type: "underline", - names: ["\\underline"], - props: { - numArgs: 1, - allowedInText: true - }, - - handler(_ref, args) { - var { - parser - } = _ref; - return { - type: "underline", - mode: parser.mode, - body: args[0] - }; - }, - - htmlBuilder(group, options) { - // Underlines are handled in the TeXbook pg 443, Rule 10. - // Build the inner group. - var innerGroup = buildGroup$1(group.body, options); // Create the line to go below the body - - var line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns - - var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; - var vlist = buildCommon.makeVList({ - positionType: "top", - positionData: innerGroup.height, - children: [{ - type: "kern", - size: defaultRuleThickness - }, { - type: "elem", - elem: line - }, { - type: "kern", - size: 3 * defaultRuleThickness - }, { - type: "elem", - elem: innerGroup - }] - }, options); - return buildCommon.makeSpan(["mord", "underline"], [vlist], options); - }, - - mathmlBuilder(group, options) { - var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]); - operator.setAttribute("stretchy", "true"); - var node = new mathMLTree.MathNode("munder", [buildGroup(group.body, options), operator]); - node.setAttribute("accentunder", "true"); - return node; - } - -}); - -defineFunction({ - type: "vcenter", - names: ["\\vcenter"], - props: { - numArgs: 1, - argTypes: ["original"], - // In LaTeX, \vcenter can act only on a box. - allowedInText: false - }, - - handler(_ref, args) { - var { - parser - } = _ref; - return { - type: "vcenter", - mode: parser.mode, - body: args[0] - }; - }, - - htmlBuilder(group, options) { - var body = buildGroup$1(group.body, options); - var axisHeight = options.fontMetrics().axisHeight; - var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight)); - return buildCommon.makeVList({ - positionType: "shift", - positionData: dy, - children: [{ - type: "elem", - elem: body - }] - }, options); - }, - - mathmlBuilder(group, options) { - // There is no way to do this in MathML. - // Write a class as a breadcrumb in case some post-processor wants - // to perform a vcenter adjustment. - return new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)], ["vcenter"]); - } - -}); - -defineFunction({ - type: "verb", - names: ["\\verb"], - props: { - numArgs: 0, - allowedInText: true - }, - - handler(context, args, optArgs) { - // \verb and \verb* are dealt with directly in Parser.js. - // If we end up here, it's because of a failure to match the two delimiters - // in the regex in Lexer.js. LaTeX raises the following error when \verb is - // terminated by end of line (or file). - throw new ParseError("\\verb ended by end of line instead of matching delimiter"); - }, - - htmlBuilder(group, options) { - var text = makeVerb(group); - var body = []; // \verb enters text mode and therefore is sized like \textstyle - - var newOptions = options.havingStyle(options.style.text()); - - for (var i = 0; i < text.length; i++) { - var c = text[i]; - - if (c === '~') { - c = '\\textasciitilde'; - } - - body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"])); - } - - return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions); - }, - - mathmlBuilder(group, options) { - var text = new mathMLTree.TextNode(makeVerb(group)); - var node = new mathMLTree.MathNode("mtext", [text]); - node.setAttribute("mathvariant", "monospace"); - return node; - } - -}); -/** - * Converts verb group into body string. - * - * \verb* replaces each space with an open box \u2423 - * \verb replaces each space with a no-break space \xA0 - */ - -var makeVerb = group => group.body.replace(/ /g, group.star ? '\u2423' : '\xA0'); - -/** Include this to ensure that all functions are defined. */ -var functions = _functions; - -/** - * The Lexer class handles tokenizing the input in various ways. Since our - * parser expects us to be able to backtrack, the lexer allows lexing from any - * given starting point. - * - * Its main exposed function is the `lex` function, which takes a position to - * lex from and a type of token to lex. It defers to the appropriate `_innerLex` - * function. - * - * The various `_innerLex` functions perform the actual lexing of different - * kinds. - */ - -/* The following tokenRegex - * - matches typical whitespace (but not NBSP etc.) using its first group - * - does not match any control character \x00-\x1f except whitespace - * - does not match a bare backslash - * - matches any ASCII character except those just mentioned - * - does not match the BMP private use area \uE000-\uF8FF - * - does not match bare surrogate code units - * - matches any BMP character except for those just described - * - matches any valid Unicode surrogate pair - * - matches a backslash followed by one or more whitespace characters - * - matches a backslash followed by one or more letters then whitespace - * - matches a backslash followed by any BMP character - * Capturing groups: - * [1] regular whitespace - * [2] backslash followed by whitespace - * [3] anything else, which may include: - * [4] left character of \verb* - * [5] left character of \verb - * [6] backslash followed by word, excluding any trailing whitespace - * Just because the Lexer matches something doesn't mean it's valid input: - * If there is no matching function or symbol definition, the Parser will - * still reject the input. - */ -var spaceRegexString = "[ \r\n\t]"; -var controlWordRegexString = "\\\\[a-zA-Z@]+"; -var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; -var controlWordWhitespaceRegexString = "(" + controlWordRegexString + ")" + spaceRegexString + "*"; -var controlSpaceRegexString = "\\\\(\n|[ \r\t]+\n?)[ \r\t]*"; -var combiningDiacriticalMarkString = "[\u0300-\u036f]"; -var combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$"); -var tokenRegexString = "(" + spaceRegexString + "+)|" + ( // whitespace -controlSpaceRegexString + "|") + // \whitespace -"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + ( // single codepoint -combiningDiacriticalMarkString + "*") + // ...plus accents -"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + ( // surrogate pair -combiningDiacriticalMarkString + "*") + // ...plus accents -"|\\\\verb\\*([^]).*?\\4" + // \verb* -"|\\\\verb([^*a-zA-Z]).*?\\5" + ( // \verb unstarred -"|" + controlWordWhitespaceRegexString) + ( // \macroName + spaces -"|" + controlSymbolRegexString + ")"); // \\, \', etc. - -/** Main Lexer class */ - -class Lexer { - // Category codes. The lexer only supports comment characters (14) for now. - // MacroExpander additionally distinguishes active (13). - constructor(input, settings) { - this.input = void 0; - this.settings = void 0; - this.tokenRegex = void 0; - this.catcodes = void 0; - // Separate accents from characters - this.input = input; - this.settings = settings; - this.tokenRegex = new RegExp(tokenRegexString, 'g'); - this.catcodes = { - "%": 14, - // comment character - "~": 13 // active character - - }; - } - - setCatcode(char, code) { - this.catcodes[char] = code; - } - /** - * This function lexes a single token. - */ - - - lex() { - var input = this.input; - var pos = this.tokenRegex.lastIndex; - - if (pos === input.length) { - return new Token("EOF", new SourceLocation(this, pos, pos)); - } - - var match = this.tokenRegex.exec(input); - - if (match === null || match.index !== pos) { - throw new ParseError("Unexpected character: '" + input[pos] + "'", new Token(input[pos], new SourceLocation(this, pos, pos + 1))); - } - - var text = match[6] || match[3] || (match[2] ? "\\ " : " "); - - if (this.catcodes[text] === 14) { - // comment character - var nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex); - - if (nlIndex === -1) { - this.tokenRegex.lastIndex = input.length; // EOF - - this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)"); - } else { - this.tokenRegex.lastIndex = nlIndex + 1; - } - - return this.lex(); - } - - return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex)); - } - -} - -/** - * A `Namespace` refers to a space of nameable things like macros or lengths, - * which can be `set` either globally or local to a nested group, using an - * undo stack similar to how TeX implements this functionality. - * Performance-wise, `get` and local `set` take constant time, while global - * `set` takes time proportional to the depth of group nesting. - */ -class Namespace { - /** - * Both arguments are optional. The first argument is an object of - * built-in mappings which never change. The second argument is an object - * of initial (global-level) mappings, which will constantly change - * according to any global/top-level `set`s done. - */ - constructor(builtins, globalMacros) { - if (builtins === void 0) { - builtins = {}; - } - - if (globalMacros === void 0) { - globalMacros = {}; - } - - this.current = void 0; - this.builtins = void 0; - this.undefStack = void 0; - this.current = globalMacros; - this.builtins = builtins; - this.undefStack = []; - } - /** - * Start a new nested group, affecting future local `set`s. - */ - - - beginGroup() { - this.undefStack.push({}); - } - /** - * End current nested group, restoring values before the group began. - */ - - - endGroup() { - if (this.undefStack.length === 0) { - throw new ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug"); - } - - var undefs = this.undefStack.pop(); - - for (var undef in undefs) { - if (undefs.hasOwnProperty(undef)) { - if (undefs[undef] == null) { - delete this.current[undef]; - } else { - this.current[undef] = undefs[undef]; - } - } - } - } - /** - * Ends all currently nested groups (if any), restoring values before the - * groups began. Useful in case of an error in the middle of parsing. - */ - - - endGroups() { - while (this.undefStack.length > 0) { - this.endGroup(); - } - } - /** - * Detect whether `name` has a definition. Equivalent to - * `get(name) != null`. - */ - - - has(name) { - return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name); - } - /** - * Get the current value of a name, or `undefined` if there is no value. - * - * Note: Do not use `if (namespace.get(...))` to detect whether a macro - * is defined, as the definition may be the empty string which evaluates - * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or - * `if (namespace.has(...))`. - */ - - - get(name) { - if (this.current.hasOwnProperty(name)) { - return this.current[name]; - } else { - return this.builtins[name]; - } - } - /** - * Set the current value of a name, and optionally set it globally too. - * Local set() sets the current value and (when appropriate) adds an undo - * operation to the undo stack. Global set() may change the undo - * operation at every level, so takes time linear in their number. - * A value of undefined means to delete existing definitions. - */ - - - set(name, value, global) { - if (global === void 0) { - global = false; - } - - if (global) { - // Global set is equivalent to setting in all groups. Simulate this - // by destroying any undos currently scheduled for this name, - // and adding an undo with the *new* value (in case it later gets - // locally reset within this environment). - for (var i = 0; i < this.undefStack.length; i++) { - delete this.undefStack[i][name]; - } - - if (this.undefStack.length > 0) { - this.undefStack[this.undefStack.length - 1][name] = value; - } - } else { - // Undo this set at end of this group (possibly to `undefined`), - // unless an undo is already in place, in which case that older - // value is the correct one. - var top = this.undefStack[this.undefStack.length - 1]; - - if (top && !top.hasOwnProperty(name)) { - top[name] = this.current[name]; - } - } - - if (value == null) { - delete this.current[name]; - } else { - this.current[name] = value; - } - } - -} - -/** - * Predefined macros for KaTeX. - * This can be used to define some commands in terms of others. - */ -var macros = _macros; -// macro tools - -defineMacro("\\noexpand", function (context) { - // The expansion is the token itself; but that token is interpreted - // as if its meaning were ‘\relax’ if it is a control sequence that - // would ordinarily be expanded by TeX’s expansion rules. - var t = context.popToken(); - - if (context.isExpandable(t.text)) { - t.noexpand = true; - t.treatAsRelax = true; - } - - return { - tokens: [t], - numArgs: 0 - }; -}); -defineMacro("\\expandafter", function (context) { - // TeX first reads the token that comes immediately after \expandafter, - // without expanding it; let’s call this token t. Then TeX reads the - // token that comes after t (and possibly more tokens, if that token - // has an argument), replacing it by its expansion. Finally TeX puts - // t back in front of that expansion. - var t = context.popToken(); - context.expandOnce(true); // expand only an expandable token - - return { - tokens: [t], - numArgs: 0 - }; -}); // LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2 -// TeX source: \long\def\@firstoftwo#1#2{#1} - -defineMacro("\\@firstoftwo", function (context) { - var args = context.consumeArgs(2); - return { - tokens: args[0], - numArgs: 0 - }; -}); // LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1 -// TeX source: \long\def\@secondoftwo#1#2{#2} - -defineMacro("\\@secondoftwo", function (context) { - var args = context.consumeArgs(2); - return { - tokens: args[1], - numArgs: 0 - }; -}); // LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded) -// symbol that isn't a space, consuming any spaces but not consuming the -// first nonspace character. If that nonspace character matches #1, then -// the macro expands to #2; otherwise, it expands to #3. - -defineMacro("\\@ifnextchar", function (context) { - var args = context.consumeArgs(3); // symbol, if, else - - context.consumeSpaces(); - var nextToken = context.future(); - - if (args[0].length === 1 && args[0][0].text === nextToken.text) { - return { - tokens: args[1], - numArgs: 0 - }; - } else { - return { - tokens: args[2], - numArgs: 0 - }; - } -}); // LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol. -// If it is `*`, then it consumes the symbol, and the macro expands to #1; -// otherwise, the macro expands to #2 (without consuming the symbol). -// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} - -defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); // LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode - -defineMacro("\\TextOrMath", function (context) { - var args = context.consumeArgs(2); - - if (context.mode === 'text') { - return { - tokens: args[0], - numArgs: 0 - }; - } else { - return { - tokens: args[1], - numArgs: 0 - }; - } -}); // Lookup table for parsing numbers in base 8 through 16 - -var digitToNumber = { - "0": 0, - "1": 1, - "2": 2, - "3": 3, - "4": 4, - "5": 5, - "6": 6, - "7": 7, - "8": 8, - "9": 9, - "a": 10, - "A": 10, - "b": 11, - "B": 11, - "c": 12, - "C": 12, - "d": 13, - "D": 13, - "e": 14, - "E": 14, - "f": 15, - "F": 15 -}; // TeX \char makes a literal character (catcode 12) using the following forms: -// (see The TeXBook, p. 43) -// \char123 -- decimal -// \char'123 -- octal -// \char"123 -- hex -// \char`x -- character that can be written (i.e. isn't active) -// \char`\x -- character that cannot be written (e.g. %) -// These all refer to characters from the font, so we turn them into special -// calls to a function \@char dealt with in the Parser. - -defineMacro("\\char", function (context) { - var token = context.popToken(); - var base; - var number = ''; - - if (token.text === "'") { - base = 8; - token = context.popToken(); - } else if (token.text === '"') { - base = 16; - token = context.popToken(); - } else if (token.text === "`") { - token = context.popToken(); - - if (token.text[0] === "\\") { - number = token.text.charCodeAt(1); - } else if (token.text === "EOF") { - throw new ParseError("\\char` missing argument"); - } else { - number = token.text.charCodeAt(0); - } - } else { - base = 10; - } - - if (base) { - // Parse a number in the given base, starting with first `token`. - number = digitToNumber[token.text]; - - if (number == null || number >= base) { - throw new ParseError("Invalid base-" + base + " digit " + token.text); - } - - var digit; - - while ((digit = digitToNumber[context.future().text]) != null && digit < base) { - number *= base; - number += digit; - context.popToken(); - } - } - - return "\\@char{" + number + "}"; -}); // \newcommand{\macro}[args]{definition} -// \renewcommand{\macro}[args]{definition} -// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition} - -var newcommand = (context, existsOK, nonexistsOK) => { - var arg = context.consumeArg().tokens; - - if (arg.length !== 1) { - throw new ParseError("\\newcommand's first argument must be a macro name"); - } - - var name = arg[0].text; - var exists = context.isDefined(name); - - if (exists && !existsOK) { - throw new ParseError("\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\renewcommand")); - } - - if (!exists && !nonexistsOK) { - throw new ParseError("\\renewcommand{" + name + "} when command " + name + " " + "does not yet exist; use \\newcommand"); - } - - var numArgs = 0; - arg = context.consumeArg().tokens; - - if (arg.length === 1 && arg[0].text === "[") { - var argText = ''; - var token = context.expandNextToken(); - - while (token.text !== "]" && token.text !== "EOF") { - // TODO: Should properly expand arg, e.g., ignore {}s - argText += token.text; - token = context.expandNextToken(); - } - - if (!argText.match(/^\s*[0-9]+\s*$/)) { - throw new ParseError("Invalid number of arguments: " + argText); - } - - numArgs = parseInt(argText); - arg = context.consumeArg().tokens; - } // Final arg is the expansion of the macro - - - context.macros.set(name, { - tokens: arg, - numArgs - }); - return ''; -}; - -defineMacro("\\newcommand", context => newcommand(context, false, true)); -defineMacro("\\renewcommand", context => newcommand(context, true, false)); -defineMacro("\\providecommand", context => newcommand(context, true, true)); // terminal (console) tools - -defineMacro("\\message", context => { - var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console - - console.log(arg.reverse().map(token => token.text).join("")); - return ''; -}); -defineMacro("\\errmessage", context => { - var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console - - console.error(arg.reverse().map(token => token.text).join("")); - return ''; -}); -defineMacro("\\show", context => { - var tok = context.popToken(); - var name = tok.text; // eslint-disable-next-line no-console - - console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]); - return ''; -}); ////////////////////////////////////////////////////////////////////// -// Grouping -// \let\bgroup={ \let\egroup=} - -defineMacro("\\bgroup", "{"); -defineMacro("\\egroup", "}"); // Symbols from latex.ltx: -// \def~{\nobreakspace{}} -// \def\lq{`} -// \def\rq{'} -// \def \aa {\r a} -// \def \AA {\r A} - -defineMacro("~", "\\nobreakspace"); -defineMacro("\\lq", "`"); -defineMacro("\\rq", "'"); -defineMacro("\\aa", "\\r a"); -defineMacro("\\AA", "\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML. -// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}} -// \DeclareTextCommandDefault{\textregistered}{\textcircled{% -// \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}} -// \DeclareRobustCommand{\copyright}{% -// \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi} - -defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}"); -defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"); -defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF - -defineMacro("\u212C", "\\mathscr{B}"); // script - -defineMacro("\u2130", "\\mathscr{E}"); -defineMacro("\u2131", "\\mathscr{F}"); -defineMacro("\u210B", "\\mathscr{H}"); -defineMacro("\u2110", "\\mathscr{I}"); -defineMacro("\u2112", "\\mathscr{L}"); -defineMacro("\u2133", "\\mathscr{M}"); -defineMacro("\u211B", "\\mathscr{R}"); -defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur - -defineMacro("\u210C", "\\mathfrak{H}"); -defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML. - -defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot -// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays -// the dot at U+22C5 and gives it punct spacing. - -defineMacro("\u00b7", "\\cdotp"); // \llap and \rlap render their contents in text mode - -defineMacro("\\llap", "\\mathllap{\\textrm{#1}}"); -defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}"); -defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \mathstrut from the TeXbook, p 360 - -defineMacro("\\mathstrut", "\\vphantom{(}"); // \underbar from TeXbook p 353 - -defineMacro("\\underbar", "\\underline{\\text{#1}}"); // \not is defined by base/fontmath.ltx via -// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36} -// It's thus treated like a \mathrel, but defined by a symbol that has zero -// width but extends to the right. We use \rlap to get that spacing. -// For MathML we write U+0338 here. buildMathML.js will then do the overlay. - -defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx: -// \def\neq{\not=} \let\ne=\neq -// \DeclareRobustCommand -// \notin{\mathrel{\m@th\mathpalette\c@ncel\in}} -// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} - -defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"); -defineMacro("\\ne", "\\neq"); -defineMacro("\u2260", "\\neq"); -defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}"); -defineMacro("\u2209", "\\notin"); // Unicode stacked relations - -defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}"); -defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"); -defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}"); -defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}"); -defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}"); -defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}"); -defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); // Misc Unicode - -defineMacro("\u27C2", "\\perp"); -defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}"); -defineMacro("\u220C", "\\notni"); -defineMacro("\u231C", "\\ulcorner"); -defineMacro("\u231D", "\\urcorner"); -defineMacro("\u231E", "\\llcorner"); -defineMacro("\u231F", "\\lrcorner"); -defineMacro("\u00A9", "\\copyright"); -defineMacro("\u00AE", "\\textregistered"); -defineMacro("\uFE0F", "\\textregistered"); // The KaTeX fonts have corners at codepoints that don't match Unicode. -// For MathML purposes, use the Unicode code point. - -defineMacro("\\ulcorner", "\\html@mathml{\\@ulcorner}{\\mathop{\\char\"231c}}"); -defineMacro("\\urcorner", "\\html@mathml{\\@urcorner}{\\mathop{\\char\"231d}}"); -defineMacro("\\llcorner", "\\html@mathml{\\@llcorner}{\\mathop{\\char\"231e}}"); -defineMacro("\\lrcorner", "\\html@mathml{\\@lrcorner}{\\mathop{\\char\"231f}}"); ////////////////////////////////////////////////////////////////////// -// LaTeX_2ε -// \vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ -// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} -// We'll call \varvdots, which gets a glyph from symbols.js. -// The zero-width rule gets us an equivalent to the vertical 6pt kern. - -defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}"); -defineMacro("\u22ee", "\\vdots"); ////////////////////////////////////////////////////////////////////// -// amsmath.sty -// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf -// Italic Greek capital letters. AMS defines these with \DeclareMathSymbol, -// but they are equivalent to \mathit{\Letter}. - -defineMacro("\\varGamma", "\\mathit{\\Gamma}"); -defineMacro("\\varDelta", "\\mathit{\\Delta}"); -defineMacro("\\varTheta", "\\mathit{\\Theta}"); -defineMacro("\\varLambda", "\\mathit{\\Lambda}"); -defineMacro("\\varXi", "\\mathit{\\Xi}"); -defineMacro("\\varPi", "\\mathit{\\Pi}"); -defineMacro("\\varSigma", "\\mathit{\\Sigma}"); -defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}"); -defineMacro("\\varPhi", "\\mathit{\\Phi}"); -defineMacro("\\varPsi", "\\mathit{\\Psi}"); -defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray} - -defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript -// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} - -defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} - -defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;} -// \def\implies{\DOTSB\;\Longrightarrow\;} -// \def\impliedby{\DOTSB\;\Longleftarrow\;} - -defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"); -defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"); -defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); // AMSMath's automatic \dots, based on \mdots@@ macro. - -var dotsByToken = { - ',': '\\dotsc', - '\\not': '\\dotsb', - // \keybin@ checks for the following: - '+': '\\dotsb', - '=': '\\dotsb', - '<': '\\dotsb', - '>': '\\dotsb', - '-': '\\dotsb', - '*': '\\dotsb', - ':': '\\dotsb', - // Symbols whose definition starts with \DOTSB: - '\\DOTSB': '\\dotsb', - '\\coprod': '\\dotsb', - '\\bigvee': '\\dotsb', - '\\bigwedge': '\\dotsb', - '\\biguplus': '\\dotsb', - '\\bigcap': '\\dotsb', - '\\bigcup': '\\dotsb', - '\\prod': '\\dotsb', - '\\sum': '\\dotsb', - '\\bigotimes': '\\dotsb', - '\\bigoplus': '\\dotsb', - '\\bigodot': '\\dotsb', - '\\bigsqcup': '\\dotsb', - '\\And': '\\dotsb', - '\\longrightarrow': '\\dotsb', - '\\Longrightarrow': '\\dotsb', - '\\longleftarrow': '\\dotsb', - '\\Longleftarrow': '\\dotsb', - '\\longleftrightarrow': '\\dotsb', - '\\Longleftrightarrow': '\\dotsb', - '\\mapsto': '\\dotsb', - '\\longmapsto': '\\dotsb', - '\\hookrightarrow': '\\dotsb', - '\\doteq': '\\dotsb', - // Symbols whose definition starts with \mathbin: - '\\mathbin': '\\dotsb', - // Symbols whose definition starts with \mathrel: - '\\mathrel': '\\dotsb', - '\\relbar': '\\dotsb', - '\\Relbar': '\\dotsb', - '\\xrightarrow': '\\dotsb', - '\\xleftarrow': '\\dotsb', - // Symbols whose definition starts with \DOTSI: - '\\DOTSI': '\\dotsi', - '\\int': '\\dotsi', - '\\oint': '\\dotsi', - '\\iint': '\\dotsi', - '\\iiint': '\\dotsi', - '\\iiiint': '\\dotsi', - '\\idotsint': '\\dotsi', - // Symbols whose definition starts with \DOTSX: - '\\DOTSX': '\\dotsx' -}; -defineMacro("\\dots", function (context) { - // TODO: If used in text mode, should expand to \textellipsis. - // However, in KaTeX, \textellipsis and \ldots behave the same - // (in text mode), and it's unlikely we'd see any of the math commands - // that affect the behavior of \dots when in text mode. So fine for now - // (until we support \ifmmode ... \else ... \fi). - var thedots = '\\dotso'; - var next = context.expandAfterFuture().text; - - if (next in dotsByToken) { - thedots = dotsByToken[next]; - } else if (next.slice(0, 4) === '\\not') { - thedots = '\\dotsb'; - } else if (next in symbols.math) { - if (utils.contains(['bin', 'rel'], symbols.math[next].group)) { - thedots = '\\dotsb'; - } - } - - return thedots; -}); -var spaceAfterDots = { - // \rightdelim@ checks for the following: - ')': true, - ']': true, - '\\rbrack': true, - '\\}': true, - '\\rbrace': true, - '\\rangle': true, - '\\rceil': true, - '\\rfloor': true, - '\\rgroup': true, - '\\rmoustache': true, - '\\right': true, - '\\bigr': true, - '\\biggr': true, - '\\Bigr': true, - '\\Biggr': true, - // \extra@ also tests for the following: - '$': true, - // \extrap@ checks for the following: - ';': true, - '.': true, - ',': true -}; -defineMacro("\\dotso", function (context) { - var next = context.future().text; - - if (next in spaceAfterDots) { - return "\\ldots\\,"; - } else { - return "\\ldots"; - } -}); -defineMacro("\\dotsc", function (context) { - var next = context.future().text; // \dotsc uses \extra@ but not \extrap@, instead specially checking for - // ';' and '.', but doesn't check for ','. - - if (next in spaceAfterDots && next !== ',') { - return "\\ldots\\,"; - } else { - return "\\ldots"; - } -}); -defineMacro("\\cdots", function (context) { - var next = context.future().text; - - if (next in spaceAfterDots) { - return "\\@cdots\\,"; - } else { - return "\\@cdots"; - } -}); -defineMacro("\\dotsb", "\\cdots"); -defineMacro("\\dotsm", "\\cdots"); -defineMacro("\\dotsi", "\\!\\cdots"); // amsmath doesn't actually define \dotsx, but \dots followed by a macro -// starting with \DOTSX implies \dotso, and then \extra@ detects this case -// and forces the added `\,`. - -defineMacro("\\dotsx", "\\ldots\\,"); // \let\DOTSI\relax -// \let\DOTSB\relax -// \let\DOTSX\relax - -defineMacro("\\DOTSI", "\\relax"); -defineMacro("\\DOTSB", "\\relax"); -defineMacro("\\DOTSX", "\\relax"); // Spacing, based on amsmath.sty's override of LaTeX defaults -// \DeclareRobustCommand{\tmspace}[3]{% -// \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} - -defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); // \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} -// TODO: math mode should use \thinmuskip - -defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); // \let\thinspace\, - -defineMacro("\\thinspace", "\\,"); // \def\>{\mskip\medmuskip} -// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}} -// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu - -defineMacro("\\>", "\\mskip{4mu}"); -defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); // \let\medspace\: - -defineMacro("\\medspace", "\\:"); // \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} -// TODO: math mode should use \thickmuskip = 5mu plus 5mu - -defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); // \let\thickspace\; - -defineMacro("\\thickspace", "\\;"); // \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} -// TODO: math mode should use \thinmuskip - -defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); // \let\negthinspace\! - -defineMacro("\\negthinspace", "\\!"); // \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} -// TODO: math mode should use \medmuskip - -defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); // \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} -// TODO: math mode should use \thickmuskip - -defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); // \def\enspace{\kern.5em } - -defineMacro("\\enspace", "\\kern.5em "); // \def\enskip{\hskip.5em\relax} - -defineMacro("\\enskip", "\\hskip.5em\\relax"); // \def\quad{\hskip1em\relax} - -defineMacro("\\quad", "\\hskip1em\\relax"); // \def\qquad{\hskip2em\relax} - -defineMacro("\\qquad", "\\hskip2em\\relax"); // \tag@in@display form of \tag - -defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren"); -defineMacro("\\tag@paren", "\\tag@literal{({#1})}"); -defineMacro("\\tag@literal", context => { - if (context.macros.get("\\df@tag")) { - throw new ParseError("Multiple \\tag"); - } - - return "\\gdef\\df@tag{\\text{#1}}"; -}); // \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin -// {\operator@font mod}\penalty900 -// \mkern5mu\nonscript\mskip-\medmuskip} -// \newcommand{\pod}[1]{\allowbreak -// \if@display\mkern18mu\else\mkern8mu\fi(#1)} -// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}} -// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu -// \else\mkern12mu\fi{\operator@font mod}\,\,#1} -// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu - -defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"); -defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"); -defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}"); -defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); ////////////////////////////////////////////////////////////////////// -// LaTeX source2e -// \expandafter\let\expandafter\@normalcr -// \csname\expandafter\@gobble\string\\ \endcsname -// \DeclareRobustCommand\newline{\@normalcr\relax} - -defineMacro("\\newline", "\\\\\\relax"); // \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} -// TODO: Doesn't normally work in math mode because \@ fails. KaTeX doesn't -// support \@ yet, so that's omitted, and we add \text so that the result -// doesn't look funny in math mode. - -defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); // \DeclareRobustCommand{\LaTeX}{L\kern-.36em% -// {\sbox\z@ T% -// \vbox to\ht\z@{\hbox{\check@mathfonts -// \fontsize\sf@size\z@ -// \math@fontsfalse\selectfont -// A}% -// \vss}% -// }% -// \kern-.15em% -// \TeX} -// This code aligns the top of the A with the T (from the perspective of TeX's -// boxes, though visually the A appears to extend above slightly). -// We compute the corresponding \raisebox when A is rendered in \normalsize -// \scriptstyle, which has a scale factor of 0.7 (see Options.js). - -var latexRaiseA = makeEm(fontMetricsData['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular']["A".charCodeAt(0)][1]); -defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo - -defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} -// \def\@hspace#1{\hskip #1\relax} -// \def\@hspacer#1{\vrule \@width\z@\nobreak -// \hskip #1\hskip \z@skip} - -defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace"); -defineMacro("\\@hspace", "\\hskip #1\\relax"); -defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); ////////////////////////////////////////////////////////////////////// -// mathtools.sty -//\providecommand\ordinarycolon{:} - -defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} -//TODO(edemaine): Not yet centered. Fix via \raisebox or #726 - -defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} - -defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} - -defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔ -// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} - -defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} - -defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}} - -defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} - -defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕ -// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} - -defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} - -defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} - -defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} - -defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} - -defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} - -defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} - -defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions. - -defineMacro("\u2237", "\\dblcolon"); // :: - -defineMacro("\u2239", "\\eqcolon"); // -: - -defineMacro("\u2254", "\\coloneqq"); // := - -defineMacro("\u2255", "\\eqqcolon"); // =: - -defineMacro("\u2A74", "\\Coloneqq"); // ::= -////////////////////////////////////////////////////////////////////// -// colonequals.sty -// Alternate names for mathtools's macros: - -defineMacro("\\ratio", "\\vcentcolon"); -defineMacro("\\coloncolon", "\\dblcolon"); -defineMacro("\\colonequals", "\\coloneqq"); -defineMacro("\\coloncolonequals", "\\Coloneqq"); -defineMacro("\\equalscolon", "\\eqqcolon"); -defineMacro("\\equalscoloncolon", "\\Eqqcolon"); -defineMacro("\\colonminus", "\\coloneq"); -defineMacro("\\coloncolonminus", "\\Coloneq"); -defineMacro("\\minuscolon", "\\eqcolon"); -defineMacro("\\minuscoloncolon", "\\Eqcolon"); // \colonapprox name is same in mathtools and colonequals. - -defineMacro("\\coloncolonapprox", "\\Colonapprox"); // \colonsim name is same in mathtools and colonequals. - -defineMacro("\\coloncolonsim", "\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions: - -defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); -defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"); -defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); -defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts - -defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}"); -defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}"); -defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); ////////////////////////////////////////////////////////////////////// -// From amsopn.sty - -defineMacro("\\injlim", "\\DOTSB\\operatorname*{inj\\,lim}"); -defineMacro("\\projlim", "\\DOTSB\\operatorname*{proj\\,lim}"); -defineMacro("\\varlimsup", "\\DOTSB\\operatorname*{\\overline{lim}}"); -defineMacro("\\varliminf", "\\DOTSB\\operatorname*{\\underline{lim}}"); -defineMacro("\\varinjlim", "\\DOTSB\\operatorname*{\\underrightarrow{lim}}"); -defineMacro("\\varprojlim", "\\DOTSB\\operatorname*{\\underleftarrow{lim}}"); ////////////////////////////////////////////////////////////////////// -// MathML alternates for KaTeX glyphs in the Unicode private area - -defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}"); -defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}"); -defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}"); -defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}"); -defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}"); -defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}"); -defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}"); -defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}"); -defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}"); -defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}"); -defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}"); -defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}"); -defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}"); -defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); -defineMacro("\\imath", "\\html@mathml{\\@imath}{\u0131}"); -defineMacro("\\jmath", "\\html@mathml{\\@jmath}{\u0237}"); ////////////////////////////////////////////////////////////////////// -// stmaryrd and semantic -// The stmaryrd and semantic packages render the next four items by calling a -// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros. - -defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27e6}}"); -defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27e7}}"); -defineMacro("\u27e6", "\\llbracket"); // blackboard bold [ - -defineMacro("\u27e7", "\\rrbracket"); // blackboard bold ] - -defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}"); -defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}"); -defineMacro("\u2983", "\\lBrace"); // blackboard bold { - -defineMacro("\u2984", "\\rBrace"); // blackboard bold } -// TODO: Create variable sized versions of the last two items. I believe that -// will require new font glyphs. -// The stmaryrd function `\minuso` provides a "Plimsoll" symbol that -// superimposes the characters \circ and \mathminus. Used in chemistry. - -defineMacro("\\minuso", "\\mathbin{\\html@mathml{" + "{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}" + "{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}" + "{\\char`⦵}}"); -defineMacro("⦵", "\\minuso"); ////////////////////////////////////////////////////////////////////// -// texvc.sty -// The texvc package contains macros available in mediawiki pages. -// We omit the functions deprecated at -// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax -// We also omit texvc's \O, which conflicts with \text{\O} - -defineMacro("\\darr", "\\downarrow"); -defineMacro("\\dArr", "\\Downarrow"); -defineMacro("\\Darr", "\\Downarrow"); -defineMacro("\\lang", "\\langle"); -defineMacro("\\rang", "\\rangle"); -defineMacro("\\uarr", "\\uparrow"); -defineMacro("\\uArr", "\\Uparrow"); -defineMacro("\\Uarr", "\\Uparrow"); -defineMacro("\\N", "\\mathbb{N}"); -defineMacro("\\R", "\\mathbb{R}"); -defineMacro("\\Z", "\\mathbb{Z}"); -defineMacro("\\alef", "\\aleph"); -defineMacro("\\alefsym", "\\aleph"); -defineMacro("\\Alpha", "\\mathrm{A}"); -defineMacro("\\Beta", "\\mathrm{B}"); -defineMacro("\\bull", "\\bullet"); -defineMacro("\\Chi", "\\mathrm{X}"); -defineMacro("\\clubs", "\\clubsuit"); -defineMacro("\\cnums", "\\mathbb{C}"); -defineMacro("\\Complex", "\\mathbb{C}"); -defineMacro("\\Dagger", "\\ddagger"); -defineMacro("\\diamonds", "\\diamondsuit"); -defineMacro("\\empty", "\\emptyset"); -defineMacro("\\Epsilon", "\\mathrm{E}"); -defineMacro("\\Eta", "\\mathrm{H}"); -defineMacro("\\exist", "\\exists"); -defineMacro("\\harr", "\\leftrightarrow"); -defineMacro("\\hArr", "\\Leftrightarrow"); -defineMacro("\\Harr", "\\Leftrightarrow"); -defineMacro("\\hearts", "\\heartsuit"); -defineMacro("\\image", "\\Im"); -defineMacro("\\infin", "\\infty"); -defineMacro("\\Iota", "\\mathrm{I}"); -defineMacro("\\isin", "\\in"); -defineMacro("\\Kappa", "\\mathrm{K}"); -defineMacro("\\larr", "\\leftarrow"); -defineMacro("\\lArr", "\\Leftarrow"); -defineMacro("\\Larr", "\\Leftarrow"); -defineMacro("\\lrarr", "\\leftrightarrow"); -defineMacro("\\lrArr", "\\Leftrightarrow"); -defineMacro("\\Lrarr", "\\Leftrightarrow"); -defineMacro("\\Mu", "\\mathrm{M}"); -defineMacro("\\natnums", "\\mathbb{N}"); -defineMacro("\\Nu", "\\mathrm{N}"); -defineMacro("\\Omicron", "\\mathrm{O}"); -defineMacro("\\plusmn", "\\pm"); -defineMacro("\\rarr", "\\rightarrow"); -defineMacro("\\rArr", "\\Rightarrow"); -defineMacro("\\Rarr", "\\Rightarrow"); -defineMacro("\\real", "\\Re"); -defineMacro("\\reals", "\\mathbb{R}"); -defineMacro("\\Reals", "\\mathbb{R}"); -defineMacro("\\Rho", "\\mathrm{P}"); -defineMacro("\\sdot", "\\cdot"); -defineMacro("\\sect", "\\S"); -defineMacro("\\spades", "\\spadesuit"); -defineMacro("\\sub", "\\subset"); -defineMacro("\\sube", "\\subseteq"); -defineMacro("\\supe", "\\supseteq"); -defineMacro("\\Tau", "\\mathrm{T}"); -defineMacro("\\thetasym", "\\vartheta"); // TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}"); - -defineMacro("\\weierp", "\\wp"); -defineMacro("\\Zeta", "\\mathrm{Z}"); ////////////////////////////////////////////////////////////////////// -// statmath.sty -// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf - -defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}"); -defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}"); -defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); ////////////////////////////////////////////////////////////////////// -// braket.sty -// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf - -defineMacro("\\bra", "\\mathinner{\\langle{#1}|}"); -defineMacro("\\ket", "\\mathinner{|{#1}\\rangle}"); -defineMacro("\\braket", "\\mathinner{\\langle{#1}\\rangle}"); -defineMacro("\\Bra", "\\left\\langle#1\\right|"); -defineMacro("\\Ket", "\\left|#1\\right\\rangle"); - -var braketHelper = one => context => { - var left = context.consumeArg().tokens; - var middle = context.consumeArg().tokens; - var middleDouble = context.consumeArg().tokens; - var right = context.consumeArg().tokens; - var oldMiddle = context.macros.get("|"); - var oldMiddleDouble = context.macros.get("\\|"); - context.macros.beginGroup(); - - var midMacro = double => context => { - if (one) { - // Only modify the first instance of | or \| - context.macros.set("|", oldMiddle); - - if (middleDouble.length) { - context.macros.set("\\|", oldMiddleDouble); - } - } - - var doubled = double; - - if (!double && middleDouble.length) { - // Mimic \@ifnextchar - var nextToken = context.future(); - - if (nextToken.text === "|") { - context.popToken(); - doubled = true; - } - } - - return { - tokens: doubled ? middleDouble : middle, - numArgs: 0 - }; - }; - - context.macros.set("|", midMacro(false)); - - if (middleDouble.length) { - context.macros.set("\\|", midMacro(true)); - } - - var arg = context.consumeArg().tokens; - var expanded = context.expandTokens([...right, ...arg, ...left // reversed - ]); - context.macros.endGroup(); - return { - tokens: expanded.reverse(), - numArgs: 0 - }; -}; - -defineMacro("\\bra@ket", braketHelper(false)); -defineMacro("\\bra@set", braketHelper(true)); -defineMacro("\\Braket", "\\bra@ket{\\left\\langle}" + "{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"); -defineMacro("\\Set", "\\bra@set{\\left\\{\\:}" + "{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"); -defineMacro("\\set", "\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"); // has no support for special || or \| -////////////////////////////////////////////////////////////////////// -// actuarialangle.dtx - -defineMacro("\\angln", "{\\angl n}"); // Custom Khan Academy colors, should be moved to an optional package - -defineMacro("\\blue", "\\textcolor{##6495ed}{#1}"); -defineMacro("\\orange", "\\textcolor{##ffa500}{#1}"); -defineMacro("\\pink", "\\textcolor{##ff00af}{#1}"); -defineMacro("\\red", "\\textcolor{##df0030}{#1}"); -defineMacro("\\green", "\\textcolor{##28ae7b}{#1}"); -defineMacro("\\gray", "\\textcolor{gray}{#1}"); -defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}"); -defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}"); -defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}"); -defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}"); -defineMacro("\\blueD", "\\textcolor{##11accd}{#1}"); -defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}"); -defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}"); -defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}"); -defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}"); -defineMacro("\\tealD", "\\textcolor{##01a995}{#1}"); -defineMacro("\\tealE", "\\textcolor{##208170}{#1}"); -defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}"); -defineMacro("\\greenB", "\\textcolor{##8af281}{#1}"); -defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}"); -defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}"); -defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}"); -defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}"); -defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}"); -defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}"); -defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}"); -defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}"); -defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}"); -defineMacro("\\redB", "\\textcolor{##ff8482}{#1}"); -defineMacro("\\redC", "\\textcolor{##f9685d}{#1}"); -defineMacro("\\redD", "\\textcolor{##e84d39}{#1}"); -defineMacro("\\redE", "\\textcolor{##bc2612}{#1}"); -defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}"); -defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}"); -defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}"); -defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}"); -defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}"); -defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}"); -defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}"); -defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}"); -defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}"); -defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}"); -defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}"); -defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}"); -defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}"); -defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}"); -defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}"); -defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}"); -defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}"); -defineMacro("\\grayE", "\\textcolor{##babec2}{#1}"); -defineMacro("\\grayF", "\\textcolor{##888d93}{#1}"); -defineMacro("\\grayG", "\\textcolor{##626569}{#1}"); -defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}"); -defineMacro("\\grayI", "\\textcolor{##21242c}{#1}"); -defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}"); -defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}"); - -/** - * This file contains the “gullet” where macros are expanded - * until only non-macro tokens remain. - */ -// List of commands that act like macros but aren't defined as a macro, -// function, or symbol. Used in `isDefined`. -var implicitCommands = { - "^": true, - // Parser.js - "_": true, - // Parser.js - "\\limits": true, - // Parser.js - "\\nolimits": true // Parser.js - -}; -class MacroExpander { - constructor(input, settings, mode) { - this.settings = void 0; - this.expansionCount = void 0; - this.lexer = void 0; - this.macros = void 0; - this.stack = void 0; - this.mode = void 0; - this.settings = settings; - this.expansionCount = 0; - this.feed(input); // Make new global namespace - - this.macros = new Namespace(macros, settings.macros); - this.mode = mode; - this.stack = []; // contains tokens in REVERSE order - } - /** - * Feed a new input string to the same MacroExpander - * (with existing macros etc.). - */ - - - feed(input) { - this.lexer = new Lexer(input, this.settings); - } - /** - * Switches between "text" and "math" modes. - */ - - - switchMode(newMode) { - this.mode = newMode; - } - /** - * Start a new group nesting within all namespaces. - */ - - - beginGroup() { - this.macros.beginGroup(); - } - /** - * End current group nesting within all namespaces. - */ - - - endGroup() { - this.macros.endGroup(); - } - /** - * Ends all currently nested groups (if any), restoring values before the - * groups began. Useful in case of an error in the middle of parsing. - */ - - - endGroups() { - this.macros.endGroups(); - } - /** - * Returns the topmost token on the stack, without expanding it. - * Similar in behavior to TeX's `\futurelet`. - */ - - - future() { - if (this.stack.length === 0) { - this.pushToken(this.lexer.lex()); - } - - return this.stack[this.stack.length - 1]; - } - /** - * Remove and return the next unexpanded token. - */ - - - popToken() { - this.future(); // ensure non-empty stack - - return this.stack.pop(); - } - /** - * Add a given token to the token stack. In particular, this get be used - * to put back a token returned from one of the other methods. - */ - - - pushToken(token) { - this.stack.push(token); - } - /** - * Append an array of tokens to the token stack. - */ - - - pushTokens(tokens) { - this.stack.push(...tokens); - } - /** - * Find an macro argument without expanding tokens and append the array of - * tokens to the token stack. Uses Token as a container for the result. - */ - - - scanArgument(isOptional) { - var start; - var end; - var tokens; - - if (isOptional) { - this.consumeSpaces(); // \@ifnextchar gobbles any space following it - - if (this.future().text !== "[") { - return null; - } - - start = this.popToken(); // don't include [ in tokens - - ({ - tokens, - end - } = this.consumeArg(["]"])); - } else { - ({ - tokens, - start, - end - } = this.consumeArg()); - } // indicate the end of an argument - - - this.pushToken(new Token("EOF", end.loc)); - this.pushTokens(tokens); - return start.range(end, ""); - } - /** - * Consume all following space tokens, without expansion. - */ - - - consumeSpaces() { - for (;;) { - var token = this.future(); - - if (token.text === " ") { - this.stack.pop(); - } else { - break; - } - } - } - /** - * Consume an argument from the token stream, and return the resulting array - * of tokens and start/end token. - */ - - - consumeArg(delims) { - // The argument for a delimited parameter is the shortest (possibly - // empty) sequence of tokens with properly nested {...} groups that is - // followed ... by this particular list of non-parameter tokens. - // The argument for an undelimited parameter is the next nonblank - // token, unless that token is ‘{’, when the argument will be the - // entire {...} group that follows. - var tokens = []; - var isDelimited = delims && delims.length > 0; - - if (!isDelimited) { - // Ignore spaces between arguments. As the TeXbook says: - // "After you have said ‘\def\row#1#2{...}’, you are allowed to - // put spaces between the arguments (e.g., ‘\row x n’), because - // TeX doesn’t use single spaces as undelimited arguments." - this.consumeSpaces(); - } - - var start = this.future(); - var tok; - var depth = 0; - var match = 0; - - do { - tok = this.popToken(); - tokens.push(tok); - - if (tok.text === "{") { - ++depth; - } else if (tok.text === "}") { - --depth; - - if (depth === -1) { - throw new ParseError("Extra }", tok); - } - } else if (tok.text === "EOF") { - throw new ParseError("Unexpected end of input in a macro argument" + ", expected '" + (delims && isDelimited ? delims[match] : "}") + "'", tok); - } - - if (delims && isDelimited) { - if ((depth === 0 || depth === 1 && delims[match] === "{") && tok.text === delims[match]) { - ++match; - - if (match === delims.length) { - // don't include delims in tokens - tokens.splice(-match, match); - break; - } - } else { - match = 0; - } - } - } while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{}’, - // ... the outermost braces enclosing the argument are removed - - - if (start.text === "{" && tokens[tokens.length - 1].text === "}") { - tokens.pop(); - tokens.shift(); - } - - tokens.reverse(); // to fit in with stack order - - return { - tokens, - start, - end: tok - }; - } - /** - * Consume the specified number of (delimited) arguments from the token - * stream and return the resulting array of arguments. - */ - - - consumeArgs(numArgs, delimiters) { - if (delimiters) { - if (delimiters.length !== numArgs + 1) { - throw new ParseError("The length of delimiters doesn't match the number of args!"); - } - - var delims = delimiters[0]; - - for (var i = 0; i < delims.length; i++) { - var tok = this.popToken(); - - if (delims[i] !== tok.text) { - throw new ParseError("Use of the macro doesn't match its definition", tok); - } - } - } - - var args = []; - - for (var _i = 0; _i < numArgs; _i++) { - args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens); - } - - return args; - } - /** - * Increment `expansionCount` by the specified amount. - * Throw an error if it exceeds `maxExpand`. - */ - - - countExpansion(amount) { - this.expansionCount += amount; - - if (this.expansionCount > this.settings.maxExpand) { - throw new ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting"); - } - } - /** - * Expand the next token only once if possible. - * - * If the token is expanded, the resulting tokens will be pushed onto - * the stack in reverse order, and the number of such tokens will be - * returned. This number might be zero or positive. - * - * If not, the return value is `false`, and the next token remains at the - * top of the stack. - * - * In either case, the next token will be on the top of the stack, - * or the stack will be empty (in case of empty expansion - * and no other tokens). - * - * Used to implement `expandAfterFuture` and `expandNextToken`. - * - * If expandableOnly, only expandable tokens are expanded and - * an undefined control sequence results in an error. - */ - - - expandOnce(expandableOnly) { - var topToken = this.popToken(); - var name = topToken.text; - var expansion = !topToken.noexpand ? this._getExpansion(name) : null; - - if (expansion == null || expandableOnly && expansion.unexpandable) { - if (expandableOnly && expansion == null && name[0] === "\\" && !this.isDefined(name)) { - throw new ParseError("Undefined control sequence: " + name); - } - - this.pushToken(topToken); - return false; - } - - this.countExpansion(1); - var tokens = expansion.tokens; - var args = this.consumeArgs(expansion.numArgs, expansion.delimiters); - - if (expansion.numArgs) { - // paste arguments in place of the placeholders - tokens = tokens.slice(); // make a shallow copy - - for (var i = tokens.length - 1; i >= 0; --i) { - var tok = tokens[i]; - - if (tok.text === "#") { - if (i === 0) { - throw new ParseError("Incomplete placeholder at end of macro body", tok); - } - - tok = tokens[--i]; // next token on stack - - if (tok.text === "#") { - // ## → # - tokens.splice(i + 1, 1); // drop first # - } else if (/^[1-9]$/.test(tok.text)) { - // replace the placeholder with the indicated argument - tokens.splice(i, 2, ...args[+tok.text - 1]); - } else { - throw new ParseError("Not a valid argument number", tok); - } - } - } - } // Concatenate expansion onto top of stack. - - - this.pushTokens(tokens); - return tokens.length; - } - /** - * Expand the next token only once (if possible), and return the resulting - * top token on the stack (without removing anything from the stack). - * Similar in behavior to TeX's `\expandafter\futurelet`. - * Equivalent to expandOnce() followed by future(). - */ - - - expandAfterFuture() { - this.expandOnce(); - return this.future(); - } - /** - * Recursively expand first token, then return first non-expandable token. - */ - - - expandNextToken() { - for (;;) { - if (this.expandOnce() === false) { - // fully expanded - var token = this.stack.pop(); // the token after \noexpand is interpreted as if its meaning - // were ‘\relax’ - - if (token.treatAsRelax) { - token.text = "\\relax"; - } - - return token; - } - } // Flow unable to figure out that this pathway is impossible. - // https://github.com/facebook/flow/issues/4808 - - - throw new Error(); // eslint-disable-line no-unreachable - } - /** - * Fully expand the given macro name and return the resulting list of - * tokens, or return `undefined` if no such macro is defined. - */ - - - expandMacro(name) { - return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined; - } - /** - * Fully expand the given token stream and return the resulting list of - * tokens. Note that the input tokens are in reverse order, but the - * output tokens are in forward order. - */ - - - expandTokens(tokens) { - var output = []; - var oldStackLength = this.stack.length; - this.pushTokens(tokens); - - while (this.stack.length > oldStackLength) { - // Expand only expandable tokens - if (this.expandOnce(true) === false) { - // fully expanded - var token = this.stack.pop(); - - if (token.treatAsRelax) { - // the expansion of \noexpand is the token itself - token.noexpand = false; - token.treatAsRelax = false; - } - - output.push(token); - } - } // Count all of these tokens as additional expansions, to prevent - // exponential blowup from linearly many \edef's. - - - this.countExpansion(output.length); - return output; - } - /** - * Fully expand the given macro name and return the result as a string, - * or return `undefined` if no such macro is defined. - */ - - - expandMacroAsText(name) { - var tokens = this.expandMacro(name); - - if (tokens) { - return tokens.map(token => token.text).join(""); - } else { - return tokens; - } - } - /** - * Returns the expanded macro as a reversed array of tokens and a macro - * argument count. Or returns `null` if no such macro. - */ - - - _getExpansion(name) { - var definition = this.macros.get(name); - - if (definition == null) { - // mainly checking for undefined here - return definition; - } // If a single character has an associated catcode other than 13 - // (active character), then don't expand it. - - - if (name.length === 1) { - var catcode = this.lexer.catcodes[name]; - - if (catcode != null && catcode !== 13) { - return; - } - } - - var expansion = typeof definition === "function" ? definition(this) : definition; - - if (typeof expansion === "string") { - var numArgs = 0; - - if (expansion.indexOf("#") !== -1) { - var stripped = expansion.replace(/##/g, ""); - - while (stripped.indexOf("#" + (numArgs + 1)) !== -1) { - ++numArgs; - } - } - - var bodyLexer = new Lexer(expansion, this.settings); - var tokens = []; - var tok = bodyLexer.lex(); - - while (tok.text !== "EOF") { - tokens.push(tok); - tok = bodyLexer.lex(); - } - - tokens.reverse(); // to fit in with stack using push and pop - - var expanded = { - tokens, - numArgs - }; - return expanded; - } - - return expansion; - } - /** - * Determine whether a command is currently "defined" (has some - * functionality), meaning that it's a macro (in the current group), - * a function, a symbol, or one of the special commands listed in - * `implicitCommands`. - */ - - - isDefined(name) { - return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name); - } - /** - * Determine whether a command is expandable. - */ - - - isExpandable(name) { - var macro = this.macros.get(name); - return macro != null ? typeof macro === "string" || typeof macro === "function" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive; - } - -} - -// Helpers for Parser.js handling of Unicode (sub|super)script characters. -var unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/; -var uSubsAndSups = Object.freeze({ - '₊': '+', - '₋': '-', - '₌': '=', - '₍': '(', - '₎': ')', - '₀': '0', - '₁': '1', - '₂': '2', - '₃': '3', - '₄': '4', - '₅': '5', - '₆': '6', - '₇': '7', - '₈': '8', - '₉': '9', - '\u2090': 'a', - '\u2091': 'e', - '\u2095': 'h', - '\u1D62': 'i', - '\u2C7C': 'j', - '\u2096': 'k', - '\u2097': 'l', - '\u2098': 'm', - '\u2099': 'n', - '\u2092': 'o', - '\u209A': 'p', - '\u1D63': 'r', - '\u209B': 's', - '\u209C': 't', - '\u1D64': 'u', - '\u1D65': 'v', - '\u2093': 'x', - '\u1D66': 'β', - '\u1D67': 'γ', - '\u1D68': 'ρ', - '\u1D69': '\u03d5', - '\u1D6A': 'χ', - '⁺': '+', - '⁻': '-', - '⁼': '=', - '⁽': '(', - '⁾': ')', - '⁰': '0', - '¹': '1', - '²': '2', - '³': '3', - '⁴': '4', - '⁵': '5', - '⁶': '6', - '⁷': '7', - '⁸': '8', - '⁹': '9', - '\u1D2C': 'A', - '\u1D2E': 'B', - '\u1D30': 'D', - '\u1D31': 'E', - '\u1D33': 'G', - '\u1D34': 'H', - '\u1D35': 'I', - '\u1D36': 'J', - '\u1D37': 'K', - '\u1D38': 'L', - '\u1D39': 'M', - '\u1D3A': 'N', - '\u1D3C': 'O', - '\u1D3E': 'P', - '\u1D3F': 'R', - '\u1D40': 'T', - '\u1D41': 'U', - '\u2C7D': 'V', - '\u1D42': 'W', - '\u1D43': 'a', - '\u1D47': 'b', - '\u1D9C': 'c', - '\u1D48': 'd', - '\u1D49': 'e', - '\u1DA0': 'f', - '\u1D4D': 'g', - '\u02B0': 'h', - '\u2071': 'i', - '\u02B2': 'j', - '\u1D4F': 'k', - '\u02E1': 'l', - '\u1D50': 'm', - '\u207F': 'n', - '\u1D52': 'o', - '\u1D56': 'p', - '\u02B3': 'r', - '\u02E2': 's', - '\u1D57': 't', - '\u1D58': 'u', - '\u1D5B': 'v', - '\u02B7': 'w', - '\u02E3': 'x', - '\u02B8': 'y', - '\u1DBB': 'z', - '\u1D5D': 'β', - '\u1D5E': 'γ', - '\u1D5F': 'δ', - '\u1D60': '\u03d5', - '\u1D61': 'χ', - '\u1DBF': 'θ' -}); - -/* eslint no-constant-condition:0 */ - -var unicodeAccents = { - "́": { - "text": "\\'", - "math": "\\acute" - }, - "̀": { - "text": "\\`", - "math": "\\grave" - }, - "̈": { - "text": "\\\"", - "math": "\\ddot" - }, - "̃": { - "text": "\\~", - "math": "\\tilde" - }, - "̄": { - "text": "\\=", - "math": "\\bar" - }, - "̆": { - "text": "\\u", - "math": "\\breve" - }, - "̌": { - "text": "\\v", - "math": "\\check" - }, - "̂": { - "text": "\\^", - "math": "\\hat" - }, - "̇": { - "text": "\\.", - "math": "\\dot" - }, - "̊": { - "text": "\\r", - "math": "\\mathring" - }, - "̋": { - "text": "\\H" - }, - "̧": { - "text": "\\c" - } -}; -var unicodeSymbols = { - "á": "á", - "à": "à", - "ä": "ä", - "ǟ": "ǟ", - "ã": "ã", - "ā": "ā", - "ă": "ă", - "ắ": "ắ", - "ằ": "ằ", - "ẵ": "ẵ", - "ǎ": "ǎ", - "â": "â", - "ấ": "ấ", - "ầ": "ầ", - "ẫ": "ẫ", - "ȧ": "ȧ", - "ǡ": "ǡ", - "å": "å", - "ǻ": "ǻ", - "ḃ": "ḃ", - "ć": "ć", - "ḉ": "ḉ", - "č": "č", - "ĉ": "ĉ", - "ċ": "ċ", - "ç": "ç", - "ď": "ď", - "ḋ": "ḋ", - "ḑ": "ḑ", - "é": "é", - "è": "è", - "ë": "ë", - "ẽ": "ẽ", - "ē": "ē", - "ḗ": "ḗ", - "ḕ": "ḕ", - "ĕ": "ĕ", - "ḝ": "ḝ", - "ě": "ě", - "ê": "ê", - "ế": "ế", - "ề": "ề", - "ễ": "ễ", - "ė": "ė", - "ȩ": "ȩ", - "ḟ": "ḟ", - "ǵ": "ǵ", - "ḡ": "ḡ", - "ğ": "ğ", - "ǧ": "ǧ", - "ĝ": "ĝ", - "ġ": "ġ", - "ģ": "ģ", - "ḧ": "ḧ", - "ȟ": "ȟ", - "ĥ": "ĥ", - "ḣ": "ḣ", - "ḩ": "ḩ", - "í": "í", - "ì": "ì", - "ï": "ï", - "ḯ": "ḯ", - "ĩ": "ĩ", - "ī": "ī", - "ĭ": "ĭ", - "ǐ": "ǐ", - "î": "î", - "ǰ": "ǰ", - "ĵ": "ĵ", - "ḱ": "ḱ", - "ǩ": "ǩ", - "ķ": "ķ", - "ĺ": "ĺ", - "ľ": "ľ", - "ļ": "ļ", - "ḿ": "ḿ", - "ṁ": "ṁ", - "ń": "ń", - "ǹ": "ǹ", - "ñ": "ñ", - "ň": "ň", - "ṅ": "ṅ", - "ņ": "ņ", - "ó": "ó", - "ò": "ò", - "ö": "ö", - "ȫ": "ȫ", - "õ": "õ", - "ṍ": "ṍ", - "ṏ": "ṏ", - "ȭ": "ȭ", - "ō": "ō", - "ṓ": "ṓ", - "ṑ": "ṑ", - "ŏ": "ŏ", - "ǒ": "ǒ", - "ô": "ô", - "ố": "ố", - "ồ": "ồ", - "ỗ": "ỗ", - "ȯ": "ȯ", - "ȱ": "ȱ", - "ő": "ő", - "ṕ": "ṕ", - "ṗ": "ṗ", - "ŕ": "ŕ", - "ř": "ř", - "ṙ": "ṙ", - "ŗ": "ŗ", - "ś": "ś", - "ṥ": "ṥ", - "š": "š", - "ṧ": "ṧ", - "ŝ": "ŝ", - "ṡ": "ṡ", - "ş": "ş", - "ẗ": "ẗ", - "ť": "ť", - "ṫ": "ṫ", - "ţ": "ţ", - "ú": "ú", - "ù": "ù", - "ü": "ü", - "ǘ": "ǘ", - "ǜ": "ǜ", - "ǖ": "ǖ", - "ǚ": "ǚ", - "ũ": "ũ", - "ṹ": "ṹ", - "ū": "ū", - "ṻ": "ṻ", - "ŭ": "ŭ", - "ǔ": "ǔ", - "û": "û", - "ů": "ů", - "ű": "ű", - "ṽ": "ṽ", - "ẃ": "ẃ", - "ẁ": "ẁ", - "ẅ": "ẅ", - "ŵ": "ŵ", - "ẇ": "ẇ", - "ẘ": "ẘ", - "ẍ": "ẍ", - "ẋ": "ẋ", - "ý": "ý", - "ỳ": "ỳ", - "ÿ": "ÿ", - "ỹ": "ỹ", - "ȳ": "ȳ", - "ŷ": "ŷ", - "ẏ": "ẏ", - "ẙ": "ẙ", - "ź": "ź", - "ž": "ž", - "ẑ": "ẑ", - "ż": "ż", - "Á": "Á", - "À": "À", - "Ä": "Ä", - "Ǟ": "Ǟ", - "Ã": "Ã", - "Ā": "Ā", - "Ă": "Ă", - "Ắ": "Ắ", - "Ằ": "Ằ", - "Ẵ": "Ẵ", - "Ǎ": "Ǎ", - "Â": "Â", - "Ấ": "Ấ", - "Ầ": "Ầ", - "Ẫ": "Ẫ", - "Ȧ": "Ȧ", - "Ǡ": "Ǡ", - "Å": "Å", - "Ǻ": "Ǻ", - "Ḃ": "Ḃ", - "Ć": "Ć", - "Ḉ": "Ḉ", - "Č": "Č", - "Ĉ": "Ĉ", - "Ċ": "Ċ", - "Ç": "Ç", - "Ď": "Ď", - "Ḋ": "Ḋ", - "Ḑ": "Ḑ", - "É": "É", - "È": "È", - "Ë": "Ë", - "Ẽ": "Ẽ", - "Ē": "Ē", - "Ḗ": "Ḗ", - "Ḕ": "Ḕ", - "Ĕ": "Ĕ", - "Ḝ": "Ḝ", - "Ě": "Ě", - "Ê": "Ê", - "Ế": "Ế", - "Ề": "Ề", - "Ễ": "Ễ", - "Ė": "Ė", - "Ȩ": "Ȩ", - "Ḟ": "Ḟ", - "Ǵ": "Ǵ", - "Ḡ": "Ḡ", - "Ğ": "Ğ", - "Ǧ": "Ǧ", - "Ĝ": "Ĝ", - "Ġ": "Ġ", - "Ģ": "Ģ", - "Ḧ": "Ḧ", - "Ȟ": "Ȟ", - "Ĥ": "Ĥ", - "Ḣ": "Ḣ", - "Ḩ": "Ḩ", - "Í": "Í", - "Ì": "Ì", - "Ï": "Ï", - "Ḯ": "Ḯ", - "Ĩ": "Ĩ", - "Ī": "Ī", - "Ĭ": "Ĭ", - "Ǐ": "Ǐ", - "Î": "Î", - "İ": "İ", - "Ĵ": "Ĵ", - "Ḱ": "Ḱ", - "Ǩ": "Ǩ", - "Ķ": "Ķ", - "Ĺ": "Ĺ", - "Ľ": "Ľ", - "Ļ": "Ļ", - "Ḿ": "Ḿ", - "Ṁ": "Ṁ", - "Ń": "Ń", - "Ǹ": "Ǹ", - "Ñ": "Ñ", - "Ň": "Ň", - "Ṅ": "Ṅ", - "Ņ": "Ņ", - "Ó": "Ó", - "Ò": "Ò", - "Ö": "Ö", - "Ȫ": "Ȫ", - "Õ": "Õ", - "Ṍ": "Ṍ", - "Ṏ": "Ṏ", - "Ȭ": "Ȭ", - "Ō": "Ō", - "Ṓ": "Ṓ", - "Ṑ": "Ṑ", - "Ŏ": "Ŏ", - "Ǒ": "Ǒ", - "Ô": "Ô", - "Ố": "Ố", - "Ồ": "Ồ", - "Ỗ": "Ỗ", - "Ȯ": "Ȯ", - "Ȱ": "Ȱ", - "Ő": "Ő", - "Ṕ": "Ṕ", - "Ṗ": "Ṗ", - "Ŕ": "Ŕ", - "Ř": "Ř", - "Ṙ": "Ṙ", - "Ŗ": "Ŗ", - "Ś": "Ś", - "Ṥ": "Ṥ", - "Š": "Š", - "Ṧ": "Ṧ", - "Ŝ": "Ŝ", - "Ṡ": "Ṡ", - "Ş": "Ş", - "Ť": "Ť", - "Ṫ": "Ṫ", - "Ţ": "Ţ", - "Ú": "Ú", - "Ù": "Ù", - "Ü": "Ü", - "Ǘ": "Ǘ", - "Ǜ": "Ǜ", - "Ǖ": "Ǖ", - "Ǚ": "Ǚ", - "Ũ": "Ũ", - "Ṹ": "Ṹ", - "Ū": "Ū", - "Ṻ": "Ṻ", - "Ŭ": "Ŭ", - "Ǔ": "Ǔ", - "Û": "Û", - "Ů": "Ů", - "Ű": "Ű", - "Ṽ": "Ṽ", - "Ẃ": "Ẃ", - "Ẁ": "Ẁ", - "Ẅ": "Ẅ", - "Ŵ": "Ŵ", - "Ẇ": "Ẇ", - "Ẍ": "Ẍ", - "Ẋ": "Ẋ", - "Ý": "Ý", - "Ỳ": "Ỳ", - "Ÿ": "Ÿ", - "Ỹ": "Ỹ", - "Ȳ": "Ȳ", - "Ŷ": "Ŷ", - "Ẏ": "Ẏ", - "Ź": "Ź", - "Ž": "Ž", - "Ẑ": "Ẑ", - "Ż": "Ż", - "ά": "ά", - "ὰ": "ὰ", - "ᾱ": "ᾱ", - "ᾰ": "ᾰ", - "έ": "έ", - "ὲ": "ὲ", - "ή": "ή", - "ὴ": "ὴ", - "ί": "ί", - "ὶ": "ὶ", - "ϊ": "ϊ", - "ΐ": "ΐ", - "ῒ": "ῒ", - "ῑ": "ῑ", - "ῐ": "ῐ", - "ό": "ό", - "ὸ": "ὸ", - "ύ": "ύ", - "ὺ": "ὺ", - "ϋ": "ϋ", - "ΰ": "ΰ", - "ῢ": "ῢ", - "ῡ": "ῡ", - "ῠ": "ῠ", - "ώ": "ώ", - "ὼ": "ὼ", - "Ύ": "Ύ", - "Ὺ": "Ὺ", - "Ϋ": "Ϋ", - "Ῡ": "Ῡ", - "Ῠ": "Ῠ", - "Ώ": "Ώ", - "Ὼ": "Ὼ" -}; - -/** - * This file contains the parser used to parse out a TeX expression from the - * input. Since TeX isn't context-free, standard parsers don't work particularly - * well. - * - * The strategy of this parser is as such: - * - * The main functions (the `.parse...` ones) take a position in the current - * parse string to parse tokens from. The lexer (found in Lexer.js, stored at - * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When - * individual tokens are needed at a position, the lexer is called to pull out a - * token, which is then used. - * - * The parser has a property called "mode" indicating the mode that - * the parser is currently in. Currently it has to be one of "math" or - * "text", which denotes whether the current environment is a math-y - * one or a text-y one (e.g. inside \text). Currently, this serves to - * limit the functions which can be used in text mode. - * - * The main functions then return an object which contains the useful data that - * was parsed at its given point, and a new position at the end of the parsed - * data. The main functions can call each other and continue the parsing by - * using the returned position as a new starting point. - * - * There are also extra `.handle...` functions, which pull out some reused - * functionality into self-contained functions. - * - * The functions return ParseNodes. - */ -class Parser { - constructor(input, settings) { - this.mode = void 0; - this.gullet = void 0; - this.settings = void 0; - this.leftrightDepth = void 0; - this.nextToken = void 0; - // Start in math mode - this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a - // new lexer (mouth) for this parser (stomach, in the language of TeX) - - this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing - - this.settings = settings; // Count leftright depth (for \middle errors) - - this.leftrightDepth = 0; - } - /** - * Checks a result to make sure it has the right type, and throws an - * appropriate error otherwise. - */ - - - expect(text, consume) { - if (consume === void 0) { - consume = true; - } - - if (this.fetch().text !== text) { - throw new ParseError("Expected '" + text + "', got '" + this.fetch().text + "'", this.fetch()); - } - - if (consume) { - this.consume(); - } - } - /** - * Discards the current lookahead token, considering it consumed. - */ - - - consume() { - this.nextToken = null; - } - /** - * Return the current lookahead token, or if there isn't one (at the - * beginning, or if the previous lookahead token was consume()d), - * fetch the next token as the new lookahead token and return it. - */ - - - fetch() { - if (this.nextToken == null) { - this.nextToken = this.gullet.expandNextToken(); - } - - return this.nextToken; - } - /** - * Switches between "text" and "math" modes. - */ - - - switchMode(newMode) { - this.mode = newMode; - this.gullet.switchMode(newMode); - } - /** - * Main parsing function, which parses an entire input. - */ - - - parse() { - if (!this.settings.globalGroup) { - // Create a group namespace for the math expression. - // (LaTeX creates a new group for every $...$, $$...$$, \[...\].) - this.gullet.beginGroup(); - } // Use old \color behavior (same as LaTeX's \textcolor) if requested. - // We do this within the group for the math expression, so it doesn't - // pollute settings.macros. - - - if (this.settings.colorIsTextColor) { - this.gullet.macros.set("\\color", "\\textcolor"); - } - - try { - // Try to parse the input - var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end - - this.expect("EOF"); // End the group namespace for the expression - - if (!this.settings.globalGroup) { - this.gullet.endGroup(); - } - - return parse; // Close any leftover groups in case of a parse error. - } finally { - this.gullet.endGroups(); - } - } - /** - * Fully parse a separate sequence of tokens as a separate job. - * Tokens should be specified in reverse order, as in a MacroDefinition. - */ - - - subparse(tokens) { - // Save the next token from the current job. - var oldToken = this.nextToken; - this.consume(); // Run the new job, terminating it with an excess '}' - - this.gullet.pushToken(new Token("}")); - this.gullet.pushTokens(tokens); - var parse = this.parseExpression(false); - this.expect("}"); // Restore the next token from the current job. - - this.nextToken = oldToken; - return parse; - } - - /** - * Parses an "expression", which is a list of atoms. - * - * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This - * happens when functions have higher precedence han infix - * nodes in implicit parses. - * - * `breakOnTokenText`: The text of the token that the expression should end - * with, or `null` if something else should end the - * expression. - */ - parseExpression(breakOnInfix, breakOnTokenText) { - var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either - // we reached the end, a }, or a \right) - - while (true) { - // Ignore spaces in math mode - if (this.mode === "math") { - this.consumeSpaces(); - } - - var lex = this.fetch(); - - if (Parser.endOfExpression.indexOf(lex.text) !== -1) { - break; - } - - if (breakOnTokenText && lex.text === breakOnTokenText) { - break; - } - - if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) { - break; - } - - var atom = this.parseAtom(breakOnTokenText); - - if (!atom) { - break; - } else if (atom.type === "internal") { - continue; - } - - body.push(atom); - } - - if (this.mode === "text") { - this.formLigatures(body); - } - - return this.handleInfixNodes(body); - } - /** - * Rewrites infix operators such as \over with corresponding commands such - * as \frac. - * - * There can only be one infix operator per group. If there's more than one - * then the expression is ambiguous. This can be resolved by adding {}. - */ - - - handleInfixNodes(body) { - var overIndex = -1; - var funcName; - - for (var i = 0; i < body.length; i++) { - if (body[i].type === "infix") { - if (overIndex !== -1) { - throw new ParseError("only one infix operator per group", body[i].token); - } - - overIndex = i; - funcName = body[i].replaceWith; - } - } - - if (overIndex !== -1 && funcName) { - var numerNode; - var denomNode; - var numerBody = body.slice(0, overIndex); - var denomBody = body.slice(overIndex + 1); - - if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { - numerNode = numerBody[0]; - } else { - numerNode = { - type: "ordgroup", - mode: this.mode, - body: numerBody - }; - } - - if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { - denomNode = denomBody[0]; - } else { - denomNode = { - type: "ordgroup", - mode: this.mode, - body: denomBody - }; - } - - var node; - - if (funcName === "\\\\abovefrac") { - node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []); - } else { - node = this.callFunction(funcName, [numerNode, denomNode], []); - } - - return [node]; - } else { - return body; - } - } - /** - * Handle a subscript or superscript with nice errors. - */ - - - handleSupSubscript(name // For error reporting. - ) { - var symbolToken = this.fetch(); - var symbol = symbolToken.text; - this.consume(); - this.consumeSpaces(); // ignore spaces before sup/subscript argument - - var group = this.parseGroup(name); - - if (!group) { - throw new ParseError("Expected group after '" + symbol + "'", symbolToken); - } - - return group; - } - /** - * Converts the textual input of an unsupported command into a text node - * contained within a color node whose color is determined by errorColor - */ - - - formatUnsupportedCmd(text) { - var textordArray = []; - - for (var i = 0; i < text.length; i++) { - textordArray.push({ - type: "textord", - mode: "text", - text: text[i] - }); - } - - var textNode = { - type: "text", - mode: this.mode, - body: textordArray - }; - var colorNode = { - type: "color", - mode: this.mode, - color: this.settings.errorColor, - body: [textNode] - }; - return colorNode; - } - /** - * Parses a group with optional super/subscripts. - */ - - - parseAtom(breakOnTokenText) { - // The body of an atom is an implicit group, so that things like - // \left(x\right)^2 work correctly. - var base = this.parseGroup("atom", breakOnTokenText); // In text mode, we don't have superscripts or subscripts - - if (this.mode === "text") { - return base; - } // Note that base may be empty (i.e. null) at this point. - - - var superscript; - var subscript; - - while (true) { - // Guaranteed in math mode, so eat any spaces first. - this.consumeSpaces(); // Lex the first token - - var lex = this.fetch(); - - if (lex.text === "\\limits" || lex.text === "\\nolimits") { - // We got a limit control - if (base && base.type === "op") { - var limits = lex.text === "\\limits"; - base.limits = limits; - base.alwaysHandleSupSub = true; - } else if (base && base.type === "operatorname") { - if (base.alwaysHandleSupSub) { - base.limits = lex.text === "\\limits"; - } - } else { - throw new ParseError("Limit controls must follow a math operator", lex); - } - - this.consume(); - } else if (lex.text === "^") { - // We got a superscript start - if (superscript) { - throw new ParseError("Double superscript", lex); - } - - superscript = this.handleSupSubscript("superscript"); - } else if (lex.text === "_") { - // We got a subscript start - if (subscript) { - throw new ParseError("Double subscript", lex); - } - - subscript = this.handleSupSubscript("subscript"); - } else if (lex.text === "'") { - // We got a prime - if (superscript) { - throw new ParseError("Double superscript", lex); - } - - var prime = { - type: "textord", - mode: this.mode, - text: "\\prime" - }; // Many primes can be grouped together, so we handle this here - - var primes = [prime]; - this.consume(); // Keep lexing tokens until we get something that's not a prime - - while (this.fetch().text === "'") { - // For each one, add another prime to the list - primes.push(prime); - this.consume(); - } // If there's a superscript following the primes, combine that - // superscript in with the primes. - - - if (this.fetch().text === "^") { - primes.push(this.handleSupSubscript("superscript")); - } // Put everything into an ordgroup as the superscript - - - superscript = { - type: "ordgroup", - mode: this.mode, - body: primes - }; - } else if (uSubsAndSups[lex.text]) { - // A Unicode subscript or superscript character. - // We treat these similarly to the unicode-math package. - // So we render a string of Unicode (sub|super)scripts the - // same as a (sub|super)script of regular characters. - var isSub = unicodeSubRegEx.test(lex.text); - var subsupTokens = []; - subsupTokens.push(new Token(uSubsAndSups[lex.text])); - this.consume(); // Continue fetching tokens to fill out the string. - - while (true) { - var token = this.fetch().text; - - if (!uSubsAndSups[token]) { - break; - } - - if (unicodeSubRegEx.test(token) !== isSub) { - break; - } - - subsupTokens.unshift(new Token(uSubsAndSups[token])); - this.consume(); - } // Now create a (sub|super)script. - - - var body = this.subparse(subsupTokens); - - if (isSub) { - subscript = { - type: "ordgroup", - mode: "math", - body - }; - } else { - superscript = { - type: "ordgroup", - mode: "math", - body - }; - } - } else { - // If it wasn't ^, _, or ', stop parsing super/subscripts - break; - } - } // Base must be set if superscript or subscript are set per logic above, - // but need to check here for type check to pass. - - - if (superscript || subscript) { - // If we got either a superscript or subscript, create a supsub - return { - type: "supsub", - mode: this.mode, - base: base, - sup: superscript, - sub: subscript - }; - } else { - // Otherwise return the original body - return base; - } - } - /** - * Parses an entire function, including its base and all of its arguments. - */ - - - parseFunction(breakOnTokenText, name // For determining its context - ) { - var token = this.fetch(); - var func = token.text; - var funcData = functions[func]; - - if (!funcData) { - return null; - } - - this.consume(); // consume command token - - if (name && name !== "atom" && !funcData.allowedInArgument) { - throw new ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token); - } else if (this.mode === "text" && !funcData.allowedInText) { - throw new ParseError("Can't use function '" + func + "' in text mode", token); - } else if (this.mode === "math" && funcData.allowedInMath === false) { - throw new ParseError("Can't use function '" + func + "' in math mode", token); - } - - var { - args, - optArgs - } = this.parseArguments(func, funcData); - return this.callFunction(func, args, optArgs, token, breakOnTokenText); - } - /** - * Call a function handler with a suitable context and arguments. - */ - - - callFunction(name, args, optArgs, token, breakOnTokenText) { - var context = { - funcName: name, - parser: this, - token, - breakOnTokenText - }; - var func = functions[name]; - - if (func && func.handler) { - return func.handler(context, args, optArgs); - } else { - throw new ParseError("No function handler for " + name); - } - } - /** - * Parses the arguments of a function or environment - */ - - - parseArguments(func, // Should look like "\name" or "\begin{name}". - funcData) { - var totalArgs = funcData.numArgs + funcData.numOptionalArgs; - - if (totalArgs === 0) { - return { - args: [], - optArgs: [] - }; - } - - var args = []; - var optArgs = []; - - for (var i = 0; i < totalArgs; i++) { - var argType = funcData.argTypes && funcData.argTypes[i]; - var isOptional = i < funcData.numOptionalArgs; - - if (funcData.primitive && argType == null || // \sqrt expands into primitive if optional argument doesn't exist - funcData.type === "sqrt" && i === 1 && optArgs[0] == null) { - argType = "primitive"; - } - - var arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional); - - if (isOptional) { - optArgs.push(arg); - } else if (arg != null) { - args.push(arg); - } else { - // should be unreachable - throw new ParseError("Null argument, please report this as a bug"); - } - } - - return { - args, - optArgs - }; - } - /** - * Parses a group when the mode is changing. - */ - - - parseGroupOfType(name, type, optional) { - switch (type) { - case "color": - return this.parseColorGroup(optional); - - case "size": - return this.parseSizeGroup(optional); - - case "url": - return this.parseUrlGroup(optional); - - case "math": - case "text": - return this.parseArgumentGroup(optional, type); - - case "hbox": - { - // hbox argument type wraps the argument in the equivalent of - // \hbox, which is like \text but switching to \textstyle size. - var group = this.parseArgumentGroup(optional, "text"); - return group != null ? { - type: "styling", - mode: group.mode, - body: [group], - style: "text" // simulate \textstyle - - } : null; - } - - case "raw": - { - var token = this.parseStringGroup("raw", optional); - return token != null ? { - type: "raw", - mode: "text", - string: token.text - } : null; - } - - case "primitive": - { - if (optional) { - throw new ParseError("A primitive argument cannot be optional"); - } - - var _group = this.parseGroup(name); - - if (_group == null) { - throw new ParseError("Expected group as " + name, this.fetch()); - } - - return _group; - } - - case "original": - case null: - case undefined: - return this.parseArgumentGroup(optional); - - default: - throw new ParseError("Unknown group type as " + name, this.fetch()); - } - } - /** - * Discard any space tokens, fetching the next non-space token. - */ - - - consumeSpaces() { - while (this.fetch().text === " ") { - this.consume(); - } - } - /** - * Parses a group, essentially returning the string formed by the - * brace-enclosed tokens plus some position information. - */ - - - parseStringGroup(modeName, // Used to describe the mode in error messages. - optional) { - var argToken = this.gullet.scanArgument(optional); - - if (argToken == null) { - return null; - } - - var str = ""; - var nextToken; - - while ((nextToken = this.fetch()).text !== "EOF") { - str += nextToken.text; - this.consume(); - } - - this.consume(); // consume the end of the argument - - argToken.text = str; - return argToken; - } - /** - * Parses a regex-delimited group: the largest sequence of tokens - * whose concatenated strings match `regex`. Returns the string - * formed by the tokens plus some position information. - */ - - - parseRegexGroup(regex, modeName // Used to describe the mode in error messages. - ) { - var firstToken = this.fetch(); - var lastToken = firstToken; - var str = ""; - var nextToken; - - while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) { - lastToken = nextToken; - str += lastToken.text; - this.consume(); - } - - if (str === "") { - throw new ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken); - } - - return firstToken.range(lastToken, str); - } - /** - * Parses a color description. - */ - - - parseColorGroup(optional) { - var res = this.parseStringGroup("color", optional); - - if (res == null) { - return null; - } - - var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text); - - if (!match) { - throw new ParseError("Invalid color: '" + res.text + "'", res); - } - - var color = match[0]; - - if (/^[0-9a-f]{6}$/i.test(color)) { - // We allow a 6-digit HTML color spec without a leading "#". - // This follows the xcolor package's HTML color model. - // Predefined color names are all missed by this RegEx pattern. - color = "#" + color; - } - - return { - type: "color-token", - mode: this.mode, - color - }; - } - /** - * Parses a size specification, consisting of magnitude and unit. - */ - - - parseSizeGroup(optional) { - var res; - var isBlank = false; // don't expand before parseStringGroup - - this.gullet.consumeSpaces(); - - if (!optional && this.gullet.future().text !== "{") { - res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size"); - } else { - res = this.parseStringGroup("size", optional); - } - - if (!res) { - return null; - } - - if (!optional && res.text.length === 0) { - // Because we've tested for what is !optional, this block won't - // affect \kern, \hspace, etc. It will capture the mandatory arguments - // to \genfrac and \above. - res.text = "0pt"; // Enable \above{} - - isBlank = true; // This is here specifically for \genfrac - } - - var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text); - - if (!match) { - throw new ParseError("Invalid size: '" + res.text + "'", res); - } - - var data = { - number: +(match[1] + match[2]), - // sign + magnitude, cast to number - unit: match[3] - }; - - if (!validUnit(data)) { - throw new ParseError("Invalid unit: '" + data.unit + "'", res); - } - - return { - type: "size", - mode: this.mode, - value: data, - isBlank - }; - } - /** - * Parses an URL, checking escaped letters and allowed protocols, - * and setting the catcode of % as an active character (as in \hyperref). - */ - - - parseUrlGroup(optional) { - this.gullet.lexer.setCatcode("%", 13); // active character - - this.gullet.lexer.setCatcode("~", 12); // other character - - var res = this.parseStringGroup("url", optional); - this.gullet.lexer.setCatcode("%", 14); // comment character - - this.gullet.lexer.setCatcode("~", 13); // active character - - if (res == null) { - return null; - } // hyperref package allows backslashes alone in href, but doesn't - // generate valid links in such cases; we interpret this as - // "undefined" behaviour, and keep them as-is. Some browser will - // replace backslashes with forward slashes. - - - var url = res.text.replace(/\\([#$%&~_^{}])/g, '$1'); - return { - type: "url", - mode: this.mode, - url - }; - } - /** - * Parses an argument with the mode specified. - */ - - - parseArgumentGroup(optional, mode) { - var argToken = this.gullet.scanArgument(optional); - - if (argToken == null) { - return null; - } - - var outerMode = this.mode; - - if (mode) { - // Switch to specified mode - this.switchMode(mode); - } - - this.gullet.beginGroup(); - var expression = this.parseExpression(false, "EOF"); // TODO: find an alternative way to denote the end - - this.expect("EOF"); // expect the end of the argument - - this.gullet.endGroup(); - var result = { - type: "ordgroup", - mode: this.mode, - loc: argToken.loc, - body: expression - }; - - if (mode) { - // Switch mode back - this.switchMode(outerMode); - } - - return result; - } - /** - * Parses an ordinary group, which is either a single nucleus (like "x") - * or an expression in braces (like "{x+y}") or an implicit group, a group - * that starts at the current position, and ends right before a higher explicit - * group ends, or at EOF. - */ - - - parseGroup(name, // For error reporting. - breakOnTokenText) { - var firstToken = this.fetch(); - var text = firstToken.text; - var result; // Try to parse an open brace or \begingroup - - if (text === "{" || text === "\\begingroup") { - this.consume(); - var groupEnd = text === "{" ? "}" : "\\endgroup"; - this.gullet.beginGroup(); // If we get a brace, parse an expression - - var expression = this.parseExpression(false, groupEnd); - var lastToken = this.fetch(); - this.expect(groupEnd); // Check that we got a matching closing brace - - this.gullet.endGroup(); - result = { - type: "ordgroup", - mode: this.mode, - loc: SourceLocation.range(firstToken, lastToken), - body: expression, - // A group formed by \begingroup...\endgroup is a semi-simple group - // which doesn't affect spacing in math mode, i.e., is transparent. - // https://tex.stackexchange.com/questions/1930/when-should-one- - // use-begingroup-instead-of-bgroup - semisimple: text === "\\begingroup" || undefined - }; - } else { - // If there exists a function with this name, parse the function. - // Otherwise, just return a nucleus - result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol(); - - if (result == null && text[0] === "\\" && !implicitCommands.hasOwnProperty(text)) { - if (this.settings.throwOnError) { - throw new ParseError("Undefined control sequence: " + text, firstToken); - } - - result = this.formatUnsupportedCmd(text); - this.consume(); - } - } - - return result; - } - /** - * Form ligature-like combinations of characters for text mode. - * This includes inputs like "--", "---", "``" and "''". - * The result will simply replace multiple textord nodes with a single - * character in each value by a single textord node having multiple - * characters in its value. The representation is still ASCII source. - * The group will be modified in place. - */ - - - formLigatures(group) { - var n = group.length - 1; - - for (var i = 0; i < n; ++i) { - var a = group[i]; // $FlowFixMe: Not every node type has a `text` property. - - var v = a.text; - - if (v === "-" && group[i + 1].text === "-") { - if (i + 1 < n && group[i + 2].text === "-") { - group.splice(i, 3, { - type: "textord", - mode: "text", - loc: SourceLocation.range(a, group[i + 2]), - text: "---" - }); - n -= 2; - } else { - group.splice(i, 2, { - type: "textord", - mode: "text", - loc: SourceLocation.range(a, group[i + 1]), - text: "--" - }); - n -= 1; - } - } - - if ((v === "'" || v === "`") && group[i + 1].text === v) { - group.splice(i, 2, { - type: "textord", - mode: "text", - loc: SourceLocation.range(a, group[i + 1]), - text: v + v - }); - n -= 1; - } - } - } - /** - * Parse a single symbol out of the string. Here, we handle single character - * symbols and special functions like \verb. - */ - - - parseSymbol() { - var nucleus = this.fetch(); - var text = nucleus.text; - - if (/^\\verb[^a-zA-Z]/.test(text)) { - this.consume(); - var arg = text.slice(5); - var star = arg.charAt(0) === "*"; - - if (star) { - arg = arg.slice(1); - } // Lexer's tokenRegex is constructed to always have matching - // first/last characters. - - - if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) { - throw new ParseError("\\verb assertion failed --\n please report what input caused this bug"); - } - - arg = arg.slice(1, -1); // remove first and last char - - return { - type: "verb", - mode: "text", - body: arg, - star - }; - } // At this point, we should have a symbol, possibly with accents. - // First expand any accented base symbol according to unicodeSymbols. - - - if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) { - // This behavior is not strict (XeTeX-compatible) in math mode. - if (this.settings.strict && this.mode === "math") { - this.settings.reportNonstrict("unicodeTextInMathMode", "Accented Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); - } - - text = unicodeSymbols[text[0]] + text.slice(1); - } // Strip off any combining characters - - - var match = combiningDiacriticalMarksEndRegex.exec(text); - - if (match) { - text = text.substring(0, match.index); - - if (text === 'i') { - text = '\u0131'; // dotless i, in math and text mode - } else if (text === 'j') { - text = '\u0237'; // dotless j, in math and text mode - } - } // Recognize base symbol - - - var symbol; - - if (symbols[this.mode][text]) { - if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) { - this.settings.reportNonstrict("unicodeTextInMathMode", "Latin-1/Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); - } - - var group = symbols[this.mode][text].group; - var loc = SourceLocation.range(nucleus); - var s; - - if (ATOMS.hasOwnProperty(group)) { - // $FlowFixMe - var family = group; - s = { - type: "atom", - mode: this.mode, - family, - loc, - text - }; - } else { - // $FlowFixMe - s = { - type: group, - mode: this.mode, - loc, - text - }; - } // $FlowFixMe - - - symbol = s; - } else if (text.charCodeAt(0) >= 0x80) { - // no symbol for e.g. ^ - if (this.settings.strict) { - if (!supportedCodepoint(text.charCodeAt(0))) { - this.settings.reportNonstrict("unknownSymbol", "Unrecognized Unicode character \"" + text[0] + "\"" + (" (" + text.charCodeAt(0) + ")"), nucleus); - } else if (this.mode === "math") { - this.settings.reportNonstrict("unicodeTextInMathMode", "Unicode text character \"" + text[0] + "\" used in math mode", nucleus); - } - } // All nonmathematical Unicode characters are rendered as if they - // are in text mode (wrapped in \text) because that's what it - // takes to render them in LaTeX. Setting `mode: this.mode` is - // another natural choice (the user requested math mode), but - // this makes it more difficult for getCharacterMetrics() to - // distinguish Unicode characters without metrics and those for - // which we want to simulate the letter M. - - - symbol = { - type: "textord", - mode: "text", - loc: SourceLocation.range(nucleus), - text - }; - } else { - return null; // EOF, ^, _, {, }, etc. - } - - this.consume(); // Transform combining characters into accents - - if (match) { - for (var i = 0; i < match[0].length; i++) { - var accent = match[0][i]; - - if (!unicodeAccents[accent]) { - throw new ParseError("Unknown accent ' " + accent + "'", nucleus); - } - - var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text; - - if (!command) { - throw new ParseError("Accent " + accent + " unsupported in " + this.mode + " mode", nucleus); - } - - symbol = { - type: "accent", - mode: this.mode, - loc: SourceLocation.range(nucleus), - label: command, - isStretchy: false, - isShifty: true, - // $FlowFixMe - base: symbol - }; - } - } // $FlowFixMe - - - return symbol; - } - -} -Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"]; - -/** - * Provides a single function for parsing an expression using a Parser - * TODO(emily): Remove this - */ - -/** - * Parses an expression using a Parser, then returns the parsed result. - */ -var parseTree = function parseTree(toParse, settings) { - if (!(typeof toParse === 'string' || toParse instanceof String)) { - throw new TypeError('KaTeX can only parse string typed expression'); - } - - var parser = new Parser(toParse, settings); // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors - - delete parser.gullet.macros.current["\\df@tag"]; - var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render(). - - delete parser.gullet.macros.current["\\current@color"]; - delete parser.gullet.macros.current["\\color"]; // If the input used \tag, it will set the \df@tag macro to the tag. - // In this case, we separately parse the tag and wrap the tree. - - if (parser.gullet.macros.get("\\df@tag")) { - if (!settings.displayMode) { - throw new ParseError("\\tag works only in display equations"); - } - - tree = [{ - type: "tag", - mode: "text", - body: tree, - tag: parser.subparse([new Token("\\df@tag")]) - }]; - } - - return tree; -}; - -/* eslint no-console:0 */ - -/** - * Parse and build an expression, and place that expression in the DOM node - * given. - */ -var render = function render(expression, baseNode, options) { - baseNode.textContent = ""; - var node = renderToDomTree(expression, options).toNode(); - baseNode.appendChild(node); -}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and -// disable rendering. - - -if (typeof document !== "undefined") { - if (document.compatMode !== "CSS1Compat") { - typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype."); - - render = function render() { - throw new ParseError("KaTeX doesn't work in quirks mode."); - }; - } -} -/** - * Parse and build an expression, and return the markup for that. - */ - - -var renderToString = function renderToString(expression, options) { - var markup = renderToDomTree(expression, options).toMarkup(); - return markup; -}; -/** - * Parse an expression and return the parse tree. - */ - - -var generateParseTree = function generateParseTree(expression, options) { - var settings = new Settings(options); - return parseTree(expression, settings); -}; -/** - * If the given error is a KaTeX ParseError and options.throwOnError is false, - * renders the invalid LaTeX as a span with hover title giving the KaTeX - * error message. Otherwise, simply throws the error. - */ - - -var renderError = function renderError(error, expression, options) { - if (options.throwOnError || !(error instanceof ParseError)) { - throw error; - } - - var node = buildCommon.makeSpan(["katex-error"], [new SymbolNode(expression)]); - node.setAttribute("title", error.toString()); - node.setAttribute("style", "color:" + options.errorColor); - return node; -}; -/** - * Generates and returns the katex build tree. This is used for advanced - * use cases (like rendering to custom output). - */ - - -var renderToDomTree = function renderToDomTree(expression, options) { - var settings = new Settings(options); - - try { - var tree = parseTree(expression, settings); - return buildTree(tree, expression, settings); - } catch (error) { - return renderError(error, expression, settings); - } -}; -/** - * Generates and returns the katex build tree, with just HTML (no MathML). - * This is used for advanced use cases (like rendering to custom output). - */ - - -var renderToHTMLTree = function renderToHTMLTree(expression, options) { - var settings = new Settings(options); - - try { - var tree = parseTree(expression, settings); - return buildHTMLTree(tree, expression, settings); - } catch (error) { - return renderError(error, expression, settings); - } -}; - -var katex = { - /** - * Current KaTeX version - */ - version: "0.16.10", - - /** - * Renders the given LaTeX into an HTML+MathML combination, and adds - * it as a child to the specified DOM node. - */ - render, - - /** - * Renders the given LaTeX into an HTML+MathML combination string, - * for sending to the client. - */ - renderToString, - - /** - * KaTeX error, usually during parsing. - */ - ParseError, - - /** - * The shema of Settings - */ - SETTINGS_SCHEMA, - - /** - * Parses the given LaTeX into KaTeX's internal parse tree structure, - * without rendering to HTML or MathML. - * - * NOTE: This method is not currently recommended for public use. - * The internal tree representation is unstable and is very likely - * to change. Use at your own risk. - */ - __parse: generateParseTree, - - /** - * Renders the given LaTeX into an HTML+MathML internal DOM tree - * representation, without flattening that representation to a string. - * - * NOTE: This method is not currently recommended for public use. - * The internal tree representation is unstable and is very likely - * to change. Use at your own risk. - */ - __renderToDomTree: renderToDomTree, - - /** - * Renders the given LaTeX into an HTML internal DOM tree representation, - * without MathML and without flattening that representation to a string. - * - * NOTE: This method is not currently recommended for public use. - * The internal tree representation is unstable and is very likely - * to change. Use at your own risk. - */ - __renderToHTMLTree: renderToHTMLTree, - - /** - * extends internal font metrics object with a new object - * each key in the new object represents a font name - */ - __setFontMetrics: setFontMetrics, - - /** - * adds a new symbol to builtin symbols table - */ - __defineSymbol: defineSymbol, - - /** - * adds a new function to builtin function list, - * which directly produce parse tree elements - * and have their own html/mathml builders - */ - __defineFunction: defineFunction, - - /** - * adds a new macro to builtin macro list - */ - __defineMacro: defineMacro, - - /** - * Expose the dom tree node types, which can be useful for type checking nodes. - * - * NOTE: This method is not currently recommended for public use. - * The internal tree representation is unstable and is very likely - * to change. Use at your own risk. - */ - __domTree: { - Span, - Anchor, - SymbolNode, - SvgNode, - PathNode, - LineNode - } -}; - - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1331.ec0a48c7.js b/pr-preview/pr-1594/assets/js/1331.ec0a48c7.js deleted file mode 100644 index 1eab54544a..0000000000 --- a/pr-preview/pr-1594/assets/js/1331.ec0a48c7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1331],{31331:(t,e,a)=>{a.d(e,{diagram:()=>b});var i=a(91245),n=a(26312),d=a(21176),r=a(697),s=a(99702);a(74353),a(16750),a(42838);const o={},c=(t,e)=>{o[t]=e},g=(t,e)=>{const a=t.append("text").attr("x",2*(0,s.c)().state.padding).attr("y",(0,s.c)().state.textHeight+1.3*(0,s.c)().state.padding).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),i=a.height,n=t.append("text").attr("x",(0,s.c)().state.padding).attr("y",i+.4*(0,s.c)().state.padding+(0,s.c)().state.dividerMargin+(0,s.c)().state.textHeight).attr("class","state-description");let d=!0,r=!0;e.descriptions.forEach((function(t){d||(!function(t,e,a){const i=t.append("tspan").attr("x",2*(0,s.c)().state.padding).text(e);a||i.attr("dy",(0,s.c)().state.textHeight)}(n,t,r),r=!1),d=!1}));const o=t.append("line").attr("x1",(0,s.c)().state.padding).attr("y1",(0,s.c)().state.padding+i+(0,s.c)().state.dividerMargin/2).attr("y2",(0,s.c)().state.padding+i+(0,s.c)().state.dividerMargin/2).attr("class","descr-divider"),c=n.node().getBBox(),g=Math.max(c.width,a.width);return o.attr("x2",g+3*(0,s.c)().state.padding),t.insert("rect",":first-child").attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding).attr("width",g+2*(0,s.c)().state.padding).attr("height",c.height+i+2*(0,s.c)().state.padding).attr("rx",(0,s.c)().state.radius),t},p=(t,e,a)=>{const i=(0,s.c)().state.padding,n=2*(0,s.c)().state.padding,d=t.node().getBBox(),r=d.width,o=d.x,c=t.append("text").attr("x",0).attr("y",(0,s.c)().state.titleShift).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.id),g=c.node().getBBox().width+n;let p,h=Math.max(g,r);h===r&&(h+=n);const l=t.node().getBBox();e.doc,p=o-i,g>r&&(p=(r-h)/2+i),Math.abs(o-l.x)r&&(p=o-(g-r)/2);const x=1-(0,s.c)().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",x).attr("class",a?"alt-composit":"composit").attr("width",h).attr("height",l.height+(0,s.c)().state.textHeight+(0,s.c)().state.titleShift+1).attr("rx","0"),c.attr("x",p+i),g<=r&&c.attr("x",o+(h-n)/2-g/2+i),t.insert("rect",":first-child").attr("x",p).attr("y",(0,s.c)().state.titleShift-(0,s.c)().state.textHeight-(0,s.c)().state.padding).attr("width",h).attr("height",3*(0,s.c)().state.textHeight).attr("rx",(0,s.c)().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",(0,s.c)().state.titleShift-(0,s.c)().state.textHeight-(0,s.c)().state.padding).attr("width",h).attr("height",l.height+3+2*(0,s.c)().state.textHeight).attr("rx",(0,s.c)().state.radius),t},h=(t,e)=>{e.attr("class","state-note");const a=e.append("rect").attr("x",0).attr("y",(0,s.c)().state.padding),i=e.append("g"),{textWidth:n,textHeight:d}=((t,e,a,i)=>{let n=0;const d=i.append("text");d.style("text-anchor","start"),d.attr("class","noteText");let r=t.replace(/\r\n/g,"
      ");r=r.replace(/\n/g,"
      ");const o=r.split(s.e.lineBreakRegex);let c=1.25*(0,s.c)().state.noteMargin;for(const g of o){const t=g.trim();if(t.length>0){const i=d.append("tspan");i.text(t),0===c&&(c+=i.node().getBBox().height),n+=c,i.attr("x",e+(0,s.c)().state.noteMargin),i.attr("y",a+n+1.25*(0,s.c)().state.noteMargin)}}return{textWidth:d.node().getBBox().width,textHeight:n}})(t,0,0,i);return a.attr("height",d+2*(0,s.c)().state.noteMargin),a.attr("width",n+2*(0,s.c)().state.noteMargin),a},l=function(t,e){const a=e.id,i={id:a,label:e.id,width:0,height:0},n=t.append("g").attr("id",a).attr("class","stateGroup");"start"===e.type&&(t=>{t.append("circle").attr("class","start-state").attr("r",(0,s.c)().state.sizeUnit).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit)})(n),"end"===e.type&&(t=>{t.append("circle").attr("class","end-state-outer").attr("r",(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",(0,s.c)().state.sizeUnit).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+2).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+2)})(n),"fork"!==e.type&&"join"!==e.type||((t,e)=>{let a=(0,s.c)().state.forkWidth,i=(0,s.c)().state.forkHeight;if(e.parentId){let t=a;a=i,i=t}t.append("rect").style("stroke","black").style("fill","black").attr("width",a).attr("height",i).attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding)})(n,e),"note"===e.type&&h(e.note.text,n),"divider"===e.type&&(t=>{t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",(0,s.c)().state.textHeight).attr("class","divider").attr("x2",2*(0,s.c)().state.textHeight).attr("y1",0).attr("y2",0)})(n),"default"===e.type&&0===e.descriptions.length&&((t,e)=>{const a=t.append("text").attr("x",2*(0,s.c)().state.padding).attr("y",(0,s.c)().state.textHeight+2*(0,s.c)().state.padding).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.id),i=a.node().getBBox();t.insert("rect",":first-child").attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding).attr("width",i.width+2*(0,s.c)().state.padding).attr("height",i.height+2*(0,s.c)().state.padding).attr("rx",(0,s.c)().state.radius)})(n,e),"default"===e.type&&e.descriptions.length>0&&g(n,e);const d=n.node().getBBox();return i.width=d.width+2*(0,s.c)().state.padding,i.height=d.height+2*(0,s.c)().state.padding,c(a,i),i};let x=0;let u;const f={},y=(t,e,a,o,c,g,h)=>{const w=new r.T({compound:!0,multigraph:!0});let b,B=!0;for(b=0;b{const e=t.parentElement;let a=0,i=0;e&&(e.parentElement&&(a=e.parentElement.getBBox().width),i=parseInt(e.getAttribute("data-x-shift"),10),Number.isNaN(i)&&(i=0)),t.setAttribute("x1",0-i+8),t.setAttribute("x2",a-i-8)}))}else s.l.debug("No Node "+t+": "+JSON.stringify(w.node(t)))}));let M=v.getBBox();w.edges().forEach((function(t){void 0!==t&&void 0!==w.edge(t)&&(s.l.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(w.edge(t))),function(t,e,a){e.points=e.points.filter((t=>!Number.isNaN(t.y)));const d=e.points,r=(0,n.n8j)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.qrM),o=t.append("path").attr("d",r(d)).attr("id","edge"+x).attr("class","transition");let c="";if((0,s.c)().state.arrowMarkerAbsolute&&(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,c=c.replace(/\(/g,"\\("),c=c.replace(/\)/g,"\\)")),o.attr("marker-end","url("+c+"#"+function(t){switch(t){case i.d.relationType.AGGREGATION:return"aggregation";case i.d.relationType.EXTENSION:return"extension";case i.d.relationType.COMPOSITION:return"composition";case i.d.relationType.DEPENDENCY:return"dependency"}}(i.d.relationType.DEPENDENCY)+"End)"),void 0!==a.title){const i=t.append("g").attr("class","stateLabel"),{x:n,y:d}=s.u.calcLabelPosition(e.points),r=s.e.getRows(a.title);let o=0;const c=[];let g=0,p=0;for(let t=0;t<=r.length;t++){const e=i.append("text").attr("text-anchor","middle").text(r[t]).attr("x",n).attr("y",d+o),a=e.node().getBBox();if(g=Math.max(g,a.width),p=Math.min(p,a.x),s.l.info(a.x,n,d+o),0===o){const t=e.node().getBBox();o=t.height,s.l.info("Title height",o,d)}c.push(e)}let h=o*r.length;if(r.length>1){const t=(r.length-1)*o*.5;c.forEach(((e,a)=>e.attr("y",d+a*o-t))),h=o*r.length}const l=i.node().getBBox();i.insert("rect",":first-child").attr("class","box").attr("x",n-g/2-(0,s.c)().state.padding/2).attr("y",d-h/2-(0,s.c)().state.padding/2-3.5).attr("width",g+(0,s.c)().state.padding).attr("height",h+(0,s.c)().state.padding),s.l.info(l)}x++}(e,w.edge(t),w.edge(t).relation))})),M=v.getBBox();const S={id:a||"root",label:a||"root",width:0,height:0};return S.width=M.width+2*u.padding,S.height=M.height+2*u.padding,s.l.debug("Doc rendered",S,w),S},w={setConf:function(){},draw:function(t,e,a,i){u=(0,s.c)().state;const d=(0,s.c)().securityLevel;let r;"sandbox"===d&&(r=(0,n.Ltv)("#i"+e));const o="sandbox"===d?(0,n.Ltv)(r.nodes()[0].contentDocument.body):(0,n.Ltv)("body"),c="sandbox"===d?r.nodes()[0].contentDocument:document;s.l.debug("Rendering diagram "+t);const g=o.select(`[id='${e}']`);g.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z");const p=i.db.getRootDoc();y(p,g,void 0,!1,o,c,i);const h=u.padding,l=g.node().getBBox(),x=l.width+2*h,f=l.height+2*h,w=1.75*x;(0,s.i)(g,f,w,u.useMaxWidth),g.attr("viewBox",`${l.x-u.padding} ${l.y-u.padding} `+x+" "+f)}},b={parser:i.p,db:i.d,renderer:w,styles:i.s,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,i.d.clear()}}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1398.40a441e2.js b/pr-preview/pr-1594/assets/js/1398.40a441e2.js deleted file mode 100644 index a7e62d06cd..0000000000 --- a/pr-preview/pr-1594/assets/js/1398.40a441e2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1398],{31398:(t,e,r)=>{r.d(e,{diagram:()=>D});var i=r(99702),a=r(697),n=r(26312),s=r(21176);const o=[];for(let S=0;S<256;++S)o.push((S+256).toString(16).slice(1));function c(t,e=0){return o[t[e+0]]+o[t[e+1]]+o[t[e+2]]+o[t[e+3]]+"-"+o[t[e+4]]+o[t[e+5]]+"-"+o[t[e+6]]+o[t[e+7]]+"-"+o[t[e+8]]+o[t[e+9]]+"-"+o[t[e+10]]+o[t[e+11]]+o[t[e+12]]+o[t[e+13]]+o[t[e+14]]+o[t[e+15]]}const l=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const h=function(t){return"string"==typeof t&&l.test(t)};const d=function(t){if(!h(t))throw TypeError("Invalid UUID");let e;const r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=255&e,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=255&e,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=255&e,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=255&e,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=255&e,r};function y(t,e,r,i){switch(t){case 0:return e&r^~e&i;case 1:case 3:return e^r^i;case 2:return e&r^e&i^r&i}}function u(t,e){return t<>>32-e}const p=function(t,e,r){function i(t,i,a,n){var s;if("string"==typeof t&&(t=function(t){t=unescape(encodeURIComponent(t));const e=[];for(let r=0;r>>0;l=c,c=o,o=u(a,30)>>>0,a=i,i=s}r[0]=r[0]+i>>>0,r[1]=r[1]+a>>>0,r[2]=r[2]+o>>>0,r[3]=r[3]+c>>>0,r[4]=r[4]+l>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}));r(74353),r(16750),r(42838);var _=function(){var t=function(t,e,r,i){for(r=r||{},i=t.length;i--;r[t[i]]=e);return r},e=[6,8,10,20,22,24,26,27,28],r=[1,10],i=[1,11],a=[1,12],n=[1,13],s=[1,14],o=[1,15],c=[1,21],l=[1,22],h=[1,23],d=[1,24],y=[1,25],u=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],p=[1,34],_=[27,28,46,47],f=[41,42,43,44,45],m=[17,34],E=[1,54],g=[1,53],O=[17,34,36,38],b={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:function(t,e,r,i,a,n,s){var o=n.length-1;switch(a){case 1:break;case 2:case 6:case 7:this.$=[];break;case 3:n[o-1].push(n[o]),this.$=n[o-1];break;case 4:case 5:case 19:case 43:case 27:case 28:case 31:this.$=n[o];break;case 8:i.addEntity(n[o-4]),i.addEntity(n[o-2]),i.addRelationship(n[o-4],n[o],n[o-2],n[o-3]);break;case 9:i.addEntity(n[o-3]),i.addAttributes(n[o-3],n[o-1]);break;case 10:i.addEntity(n[o-2]);break;case 11:i.addEntity(n[o]);break;case 12:i.addEntity(n[o-6],n[o-4]),i.addAttributes(n[o-6],n[o-1]);break;case 13:i.addEntity(n[o-5],n[o-3]);break;case 14:i.addEntity(n[o-3],n[o-1]);break;case 15:case 16:this.$=n[o].trim(),i.setAccTitle(this.$);break;case 17:case 18:this.$=n[o].trim(),i.setAccDescription(this.$);break;case 20:case 41:case 42:case 32:this.$=n[o].replace(/"/g,"");break;case 21:case 29:this.$=[n[o]];break;case 22:n[o].push(n[o-1]),this.$=n[o];break;case 23:this.$={attributeType:n[o-1],attributeName:n[o]};break;case 24:this.$={attributeType:n[o-2],attributeName:n[o-1],attributeKeyTypeList:n[o]};break;case 25:this.$={attributeType:n[o-2],attributeName:n[o-1],attributeComment:n[o]};break;case 26:this.$={attributeType:n[o-3],attributeName:n[o-2],attributeKeyTypeList:n[o-1],attributeComment:n[o]};break;case 30:n[o-2].push(n[o]),this.$=n[o-2];break;case 33:this.$={cardA:n[o],relType:n[o-1],cardB:n[o-2]};break;case 34:this.$=i.Cardinality.ZERO_OR_ONE;break;case 35:this.$=i.Cardinality.ZERO_OR_MORE;break;case 36:this.$=i.Cardinality.ONE_OR_MORE;break;case 37:this.$=i.Cardinality.ONLY_ONE;break;case 38:this.$=i.Cardinality.MD_PARENT;break;case 39:this.$=i.Identification.NON_IDENTIFYING;break;case 40:this.$=i.Identification.IDENTIFYING}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:i,24:a,26:n,27:s,28:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:i,24:a,26:n,27:s,28:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:c,42:l,43:h,44:d,45:y}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(u,[2,19]),t(u,[2,20]),t(e,[2,4]),{11:29,27:s,28:o},{16:30,17:[1,31],29:32,30:33,34:p},{11:35,27:s,28:o},{40:36,46:[1,37],47:[1,38]},t(_,[2,34]),t(_,[2,35]),t(_,[2,36]),t(_,[2,37]),t(_,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:p},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:c,42:l,43:h,44:d,45:y},t(f,[2,39]),t(f,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(m,[2,23],{32:50,33:51,35:52,37:E,38:g}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(m,[2,24],{33:56,36:[1,57],38:g}),t(m,[2,25]),t(O,[2,29]),t(m,[2,32]),t(O,[2,31]),{16:58,17:[1,59],29:32,30:33,34:p},t(m,[2,26]),{35:60,37:E},{17:[1,61]},t(e,[2,13]),t(O,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(t,e){if(!e.recoverable){var r=new Error(t);throw r.hash=e,r}this.trace(t)},parse:function(t){var e=this,r=[0],i=[],a=[null],n=[],s=this.table,o="",c=0,l=0,h=n.slice.call(arguments,1),d=Object.create(this.lexer),y={yy:{}};for(var u in this.yy)Object.prototype.hasOwnProperty.call(this.yy,u)&&(y.yy[u]=this.yy[u]);d.setInput(t,y.yy),y.yy.lexer=d,y.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var p=d.yylloc;n.push(p);var _=d.options&&d.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,E,g,O,b,k,R,N,T={};;){if(m=r[r.length-1],this.defaultActions[m]?E=this.defaultActions[m]:(null==f&&(N=void 0,"number"!=typeof(N=i.pop()||d.lex()||1)&&(N instanceof Array&&(N=(i=N).pop()),N=e.symbols_[N]||N),f=N),E=s[m]&&s[m][f]),void 0===E||!E.length||!E[0]){var x="";for(O in R=[],s[m])this.terminals_[O]&&O>2&&R.push("'"+this.terminals_[O]+"'");x=d.showPosition?"Parse error on line "+(c+1)+":\n"+d.showPosition()+"\nExpecting "+R.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(x,{text:d.match,token:this.terminals_[f]||f,line:d.yylineno,loc:p,expected:R})}if(E[0]instanceof Array&&E.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+f);switch(E[0]){case 1:r.push(f),a.push(d.yytext),n.push(d.yylloc),r.push(E[1]),f=null,l=d.yyleng,o=d.yytext,c=d.yylineno,p=d.yylloc;break;case 2:if(b=this.productions_[E[1]][1],T.$=a[a.length-b],T._$={first_line:n[n.length-(b||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(b||1)].first_column,last_column:n[n.length-1].last_column},_&&(T._$.range=[n[n.length-(b||1)].range[0],n[n.length-1].range[1]]),void 0!==(g=this.performAction.apply(T,[o,l,c,y.yy,E[1],a,n].concat(h))))return g;b&&(r=r.slice(0,-1*b*2),a=a.slice(0,-1*b),n=n.slice(0,-1*b)),r.push(this.productions_[E[1]][0]),a.push(T.$),n.push(T._$),k=s[r[r.length-2]][r[r.length-1]],r.push(k);break;case 3:return!0}}return!0}},k={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,r=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===i.length?this.yylloc.first_column:0)+i[i.length-r.length].length-r[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var r,i,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var n in a)this[n]=a[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,r,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),n=0;ne[0].length)){if(e=r,i=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,a[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,r,i){switch(r){case 0:return this.begin("acc_title"),22;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),24;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:case 15:case 20:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;case 14:return 36;case 16:return 37;case 17:case 18:return 34;case 19:return 38;case 21:return this.popState(),17;case 22:case 54:return e.yytext[0];case 23:return 18;case 24:return 19;case 25:case 29:case 30:case 43:return 41;case 26:case 27:case 28:case 36:case 38:case 45:return 43;case 31:case 32:case 33:case 34:case 35:case 37:case 44:return 42;case 39:case 40:case 41:case 42:return 44;case 46:return 45;case 47:case 50:case 51:case 52:return 46;case 48:case 49:return 47;case 53:return 27;case 55:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};function R(){this.yy={}}return b.lexer=k,R.prototype=b,b.Parser=R,new R}();_.parser=_;const f=_;let m={},E=[];const g=function(t,e=void 0){return void 0===m[t]?(m[t]={attributes:[],alias:e},i.l.info("Added new entity :",t)):m[t]&&!m[t].alias&&e&&(m[t].alias=e,i.l.info(`Add alias '${e}' to entity '${t}'`)),m[t]},O={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},getConfig:()=>(0,i.c)().er,addEntity:g,addAttributes:function(t,e){let r,a=g(t);for(r=e.length-1;r>=0;r--)a.attributes.push(e[r]),i.l.debug("Added attribute ",e[r].attributeName)},getEntities:()=>m,addRelationship:function(t,e,r,a){let n={entityA:t,roleA:e,entityB:r,relSpec:a};E.push(n),i.l.debug("Added new relationship :",n)},getRelationships:()=>E,clear:function(){m={},E=[],(0,i.v)()},setAccTitle:i.s,getAccTitle:i.g,setAccDescription:i.b,getAccDescription:i.a,setDiagramTitle:i.q,getDiagramTitle:i.t},b={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},k=b,R=function(t,e){let r;t.append("defs").append("marker").attr("id",b.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",b.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",b.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",b.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",b.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",b.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},N=/[^\dA-Za-z](\W)*/g;let T={},x=new Map;const A=function(t,e,r){let a;return Object.keys(e).forEach((function(n){const s=function(t="",e=""){const r=t.replace(N,"");return`${v(e)}${v(r)}${p(t,I)}`}(n,"entity");x.set(n,s);const o=t.append("g").attr("id",s);a=void 0===a?s:a;const c="text-"+s,l=o.append("text").classed("er entityLabel",!0).attr("id",c).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",(0,i.c)().fontFamily).style("font-size",T.fontSize+"px").text(e[n].alias??n),{width:h,height:d}=((t,e,r)=>{const a=T.entityPadding/3,n=T.entityPadding/3,s=.85*T.fontSize,o=e.node().getBBox(),c=[];let l=!1,h=!1,d=0,y=0,u=0,p=0,_=o.height+2*a,f=1;r.forEach((t=>{void 0!==t.attributeKeyTypeList&&t.attributeKeyTypeList.length>0&&(l=!0),void 0!==t.attributeComment&&(h=!0)})),r.forEach((r=>{const n=`${e.node().id}-attr-${f}`;let o=0;const m=(0,i.x)(r.attributeType),E=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(m),g=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(r.attributeName),O={};O.tn=E,O.nn=g;const b=E.node().getBBox(),k=g.node().getBBox();if(d=Math.max(d,b.width),y=Math.max(y,k.width),o=Math.max(b.height,k.height),l){const e=void 0!==r.attributeKeyTypeList?r.attributeKeyTypeList.join(","):"",a=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(e);O.kn=a;const c=a.node().getBBox();u=Math.max(u,c.width),o=Math.max(o,c.height)}if(h){const e=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(r.attributeComment||"");O.cn=e;const a=e.node().getBBox();p=Math.max(p,a.width),o=Math.max(o,a.height)}O.height=o,c.push(O),_+=o+2*a,f+=1}));let m=4;l&&(m+=2),h&&(m+=2);const E=d+y+u+p,g={width:Math.max(T.minEntityWidth,Math.max(o.width+2*T.entityPadding,E+n*m)),height:r.length>0?_:Math.max(T.minEntityHeight,o.height+2*T.entityPadding)};if(r.length>0){const r=Math.max(0,(g.width-E-n*m)/(m/2));e.attr("transform","translate("+g.width/2+","+(a+o.height/2)+")");let i=o.height+2*a,s="attributeBoxOdd";c.forEach((e=>{const o=i+a+e.height/2;e.tn.attr("transform","translate("+n+","+o+")");const c=t.insert("rect","#"+e.tn.node().id).classed(`er ${s}`,!0).attr("x",0).attr("y",i).attr("width",d+2*n+r).attr("height",e.height+2*a),_=parseFloat(c.attr("x"))+parseFloat(c.attr("width"));e.nn.attr("transform","translate("+(_+n)+","+o+")");const f=t.insert("rect","#"+e.nn.node().id).classed(`er ${s}`,!0).attr("x",_).attr("y",i).attr("width",y+2*n+r).attr("height",e.height+2*a);let m=parseFloat(f.attr("x"))+parseFloat(f.attr("width"));if(l){e.kn.attr("transform","translate("+(m+n)+","+o+")");const c=t.insert("rect","#"+e.kn.node().id).classed(`er ${s}`,!0).attr("x",m).attr("y",i).attr("width",u+2*n+r).attr("height",e.height+2*a);m=parseFloat(c.attr("x"))+parseFloat(c.attr("width"))}h&&(e.cn.attr("transform","translate("+(m+n)+","+o+")"),t.insert("rect","#"+e.cn.node().id).classed(`er ${s}`,"true").attr("x",m).attr("y",i).attr("width",p+2*n+r).attr("height",e.height+2*a)),i+=e.height+2*a,s="attributeBoxOdd"===s?"attributeBoxEven":"attributeBoxOdd"}))}else g.height=Math.max(T.minEntityHeight,_),e.attr("transform","translate("+g.width/2+","+g.height/2+")");return g})(o,l,e[n].attributes),y=o.insert("rect","#"+c).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",h).attr("height",d).node().getBBox();r.setNode(s,{width:y.width,height:y.height,shape:"rect",id:s})})),a},M=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")};let w=0;const I="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function v(t=""){return t.length>0?`${t}-`:""}const D={parser:f,db:O,renderer:{setConf:function(t){const e=Object.keys(t);for(const r of e)T[r]=t[r]},draw:function(t,e,r,o){T=(0,i.c)().er,i.l.info("Drawing ER diagram");const c=(0,i.c)().securityLevel;let l;"sandbox"===c&&(l=(0,n.Ltv)("#i"+e));const h=("sandbox"===c?(0,n.Ltv)(l.nodes()[0].contentDocument.body):(0,n.Ltv)("body")).select(`[id='${e}']`);let d;R(h,T),d=new a.T({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:T.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));const y=A(h,o.db.getEntities(),d),u=function(t,e){return t.forEach((function(t){e.setEdge(x.get(t.entityA),x.get(t.entityB),{relationship:t},M(t))})),t}(o.db.getRelationships(),d);var p,_;(0,s.Zp)(d),p=h,(_=d).nodes().forEach((function(t){void 0!==t&&void 0!==_.node(t)&&p.select("#"+t).attr("transform","translate("+(_.node(t).x-_.node(t).width/2)+","+(_.node(t).y-_.node(t).height/2)+" )")})),u.forEach((function(t){!function(t,e,r,a,s){w++;const o=r.edge(x.get(e.entityA),x.get(e.entityB),M(e)),c=(0,n.n8j)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.qrM),l=t.insert("path","#"+a).classed("er relationshipLine",!0).attr("d",c(o.points)).style("stroke",T.stroke).style("fill","none");e.relSpec.relType===s.db.Identification.NON_IDENTIFYING&&l.attr("stroke-dasharray","8,8");let h="";switch(T.arrowMarkerAbsolute&&(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,h=h.replace(/\(/g,"\\("),h=h.replace(/\)/g,"\\)")),e.relSpec.cardA){case s.db.Cardinality.ZERO_OR_ONE:l.attr("marker-end","url("+h+"#"+k.ZERO_OR_ONE_END+")");break;case s.db.Cardinality.ZERO_OR_MORE:l.attr("marker-end","url("+h+"#"+k.ZERO_OR_MORE_END+")");break;case s.db.Cardinality.ONE_OR_MORE:l.attr("marker-end","url("+h+"#"+k.ONE_OR_MORE_END+")");break;case s.db.Cardinality.ONLY_ONE:l.attr("marker-end","url("+h+"#"+k.ONLY_ONE_END+")");break;case s.db.Cardinality.MD_PARENT:l.attr("marker-end","url("+h+"#"+k.MD_PARENT_END+")")}switch(e.relSpec.cardB){case s.db.Cardinality.ZERO_OR_ONE:l.attr("marker-start","url("+h+"#"+k.ZERO_OR_ONE_START+")");break;case s.db.Cardinality.ZERO_OR_MORE:l.attr("marker-start","url("+h+"#"+k.ZERO_OR_MORE_START+")");break;case s.db.Cardinality.ONE_OR_MORE:l.attr("marker-start","url("+h+"#"+k.ONE_OR_MORE_START+")");break;case s.db.Cardinality.ONLY_ONE:l.attr("marker-start","url("+h+"#"+k.ONLY_ONE_START+")");break;case s.db.Cardinality.MD_PARENT:l.attr("marker-start","url("+h+"#"+k.MD_PARENT_START+")")}const d=l.node().getTotalLength(),y=l.node().getPointAtLength(.5*d),u="rel"+w,p=t.append("text").classed("er relationshipLabel",!0).attr("id",u).attr("x",y.x).attr("y",y.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",(0,i.c)().fontFamily).style("font-size",T.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+u).classed("er relationshipLabelBox",!0).attr("x",y.x-p.width/2).attr("y",y.y-p.height/2).attr("width",p.width).attr("height",p.height)}(h,t,d,y,o)}));const f=T.diagramPadding;i.u.insertTitle(h,"entityTitleText",T.titleTopMargin,o.db.getDiagramTitle());const m=h.node().getBBox(),E=m.width+2*f,g=m.height+2*f;(0,i.i)(h,g,E,T.useMaxWidth),h.attr("viewBox",`${m.x-f} ${m.y-f} ${E} ${g}`)}},styles:t=>`\n .entityBox {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n }\n\n .attributeBoxOdd {\n fill: ${t.attributeBackgroundColorOdd};\n stroke: ${t.nodeBorder};\n }\n\n .attributeBoxEven {\n fill: ${t.attributeBackgroundColorEven};\n stroke: ${t.nodeBorder};\n }\n\n .relationshipLabelBox {\n fill: ${t.tertiaryColor};\n opacity: 0.7;\n background-color: ${t.tertiaryColor};\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ${t.lineColor};\n }\n\n .entityTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n } \n #MD_PARENT_START {\n fill: #f5f5f5 !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n }\n #MD_PARENT_END {\n fill: #f5f5f5 !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n }\n \n`}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1434155d.858c890c.js b/pr-preview/pr-1594/assets/js/1434155d.858c890c.js deleted file mode 100644 index cc799c97fd..0000000000 --- a/pr-preview/pr-1594/assets/js/1434155d.858c890c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7196],{1826:(e,d,r)=>{r.r(d),r.d(d,{assets:()=>c,contentTitle:()=>i,default:()=>j,frontMatter:()=>n,metadata:()=>l,toc:()=>h});var t=r(74848),s=r(28453);const n={},i="AlloyDB",l={id:"reference/Connectors/materialization-connectors/alloydb",title:"AlloyDB",description:"This connector materializes Flow collections into tables in an AlloyDB database.",source:"@site/docs/reference/Connectors/materialization-connectors/alloydb.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/alloydb",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/alloydb.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Materialization connectors",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/"},next:{title:"Amazon DynamoDB",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb"}},c={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Reserved words",id:"reserved-words",level:2}];function x(e){const d={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d.h1,{id:"alloydb",children:"AlloyDB"}),"\n",(0,t.jsx)(d.p,{children:"This connector materializes Flow collections into tables in an AlloyDB database."}),"\n",(0,t.jsxs)(d.p,{children:["AlloyDB is a fully managed, PostgreSQL-compatible database available in the Google Cloud platform.\nThis connector is derived from the ",(0,t.jsx)(d.a,{href:"/reference/Connectors/materialization-connectors/PostgreSQL/",children:"PostgreSQL materialization connector"}),",\nso the same configuration applies, but the setup steps look somewhat different."]}),"\n",(0,t.jsxs)(d.p,{children:["It's available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(d.a,{href:"https://ghcr.io/estuary/materialize-alloydb:dev",children:(0,t.jsx)(d.code,{children:"ghcr.io/estuary/materialize-alloydb:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(d.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(d.p,{children:"To use this connector, you'll need:"}),"\n",(0,t.jsxs)(d.ul,{children:["\n",(0,t.jsx)(d.li,{children:"An AlloyDB database to which to materialize, and user credentials.\nThe connector will create new tables in the database per your specification. Tables created manually in advance are not supported."}),"\n",(0,t.jsxs)(d.li,{children:["A virtual machine to connect securely to the instance via SSH tunneling. (AlloyDB doesn't support IP allowlisting.)\nFollow the instructions to create a ",(0,t.jsx)(d.a,{href:"/pr-preview/pr-1594/guides/connect-network#setup-for-google-cloud",children:"virtual machine for SSH tunneling"}),"\nin the same Google Cloud project as your instance."]}),"\n"]}),"\n",(0,t.jsx)(d.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(d.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a AlloyDB materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database."}),"\n",(0,t.jsx)(d.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(d.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(d.p,{children:["The SSH config section is required for this connector.\nYou'll fill in the database address with a localhost IP address,\nand specify your VM's IP address as the SSH address.\nSee the table below and the ",(0,t.jsx)(d.a,{href:"#sample",children:"sample config"}),"."]}),"\n",(0,t.jsxs)(d.table,{children:[(0,t.jsx)(d.thead,{children:(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.th,{children:"Property"}),(0,t.jsx)(d.th,{children:"Title"}),(0,t.jsx)(d.th,{children:"Description"}),(0,t.jsx)(d.th,{children:"Type"}),(0,t.jsx)(d.th,{children:"Required/Default"})]})}),(0,t.jsxs)(d.tbody,{children:[(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"/database"})}),(0,t.jsx)(d.td,{children:"Database"}),(0,t.jsx)(d.td,{children:"Name of the logical database to materialize to."}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.strong,{children:(0,t.jsx)(d.code,{children:"/address"})})}),(0,t.jsx)(d.td,{children:"Address"}),(0,t.jsxs)(d.td,{children:["Host and port. Set to ",(0,t.jsx)(d.code,{children:"127.0.0.1:5432"})," to enable SSH tunneling."]}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{children:"Required"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.strong,{children:(0,t.jsx)(d.code,{children:"/password"})})}),(0,t.jsx)(d.td,{children:"Password"}),(0,t.jsx)(d.td,{children:"Password for the specified database user."}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{children:"Required"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"/schema"})}),(0,t.jsx)(d.td,{children:"Database Schema"}),(0,t.jsxs)(d.td,{children:["Database ",(0,t.jsx)(d.a,{href:"https://www.postgresql.org/docs/current/ddl-schemas.html",children:"schema"})," to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables"]}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:'"public"'})})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.strong,{children:(0,t.jsx)(d.code,{children:"/user"})})}),(0,t.jsx)(d.td,{children:"User"}),(0,t.jsx)(d.td,{children:"Database user to connect as."}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{children:"Required"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"networkTunnel"})}),(0,t.jsx)(d.td,{children:"Network Tunnel"}),(0,t.jsx)(d.td,{children:"Connect to your system through an SSH server that acts as a bastion host for your network."}),(0,t.jsx)(d.td,{children:"Object"}),(0,t.jsx)(d.td,{})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"networkTunnel/sshForwarding"})}),(0,t.jsx)(d.td,{children:"SSH Forwarding"}),(0,t.jsx)(d.td,{}),(0,t.jsx)(d.td,{children:"Object"}),(0,t.jsx)(d.td,{})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"networkTunnel/sshForwarding/sshEndpoint"})}),(0,t.jsx)(d.td,{children:"SSH Endpoint"}),(0,t.jsx)(d.td,{children:"Endpoint of the remote SSH server (in this case, your Google Cloud VM) that supports tunneling (in the form of ssh://user@address."}),(0,t.jsx)(d.td,{children:"String"}),(0,t.jsx)(d.td,{})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"networkTunnel/sshForwarding/privateKey"})}),(0,t.jsx)(d.td,{children:"SSH Private Key"}),(0,t.jsx)(d.td,{children:"Private key to connect to the remote SSH server."}),(0,t.jsx)(d.td,{children:"String"}),(0,t.jsx)(d.td,{})]})]})]}),"\n",(0,t.jsx)(d.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(d.table,{children:[(0,t.jsx)(d.thead,{children:(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.th,{children:"Property"}),(0,t.jsx)(d.th,{children:"Title"}),(0,t.jsx)(d.th,{children:"Description"}),(0,t.jsx)(d.th,{children:"Type"}),(0,t.jsx)(d.th,{children:"Required/Default"})]})}),(0,t.jsxs)(d.tbody,{children:[(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"/additional_table_create_sql"})}),(0,t.jsx)(d.td,{children:"Additional Table Create SQL"}),(0,t.jsx)(d.td,{children:"Additional SQL statement(s) to be run in the same transaction that creates the table."}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"/delta_updates"})}),(0,t.jsx)(d.td,{children:"Delta Update"}),(0,t.jsx)(d.td,{children:"Should updates to this table be done via delta updates."}),(0,t.jsx)(d.td,{children:"boolean"}),(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"false"})})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"/schema"})}),(0,t.jsx)(d.td,{children:"Alternative Schema"}),(0,t.jsx)(d.td,{children:"Alternative schema for this table (optional). Overrides schema set in endpoint configuration."}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.strong,{children:(0,t.jsx)(d.code,{children:"/table"})})}),(0,t.jsx)(d.td,{children:"Table"}),(0,t.jsx)(d.td,{children:"Table name to materialize to. It will be created by the connector, unless the connector has previously created it."}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(d.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(d.pre,{children:(0,t.jsx)(d.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-alloydb:dev\n config:\n database: postgres\n address: 127.0.0.1:5432\n password: flow\n user: flow\n networkTunnel:\n sshForwarding:\n sshEndpoint: ssh://sshUser@\n privateKey: |2\n -----BEGIN RSA PRIVATE KEY-----\n MIICXAIBAAKBgQCJO7G6R+kv2MMS8Suw21sk2twHg8Vog0fjimEWJEwyAfFM/Toi\n EJ6r5RTaSvN++/+MPWUll7sUdOOBZr6ErLKLHEt7uXxusAzOjMxFKZpEARMcjwHY\n v/tN1A2OYU0qay1DOwknEE0i+/Bvf8lMS7VDjHmwRaBtRed/+iAQHf128QIDAQAB\n AoGAGoOUBP+byAjDN8esv1DCPU6jsDf/Tf//RbEYrOR6bDb/3fYW4zn+zgtGih5t\n CR268+dwwWCdXohu5DNrn8qV/Awk7hWp18mlcNyO0skT84zvippe+juQMK4hDQNi\n ywp8mDvKQwpOuzw6wNEitcGDuACx5U/1JEGGmuIRGx2ST5kCQQDsstfWDcYqbdhr\n 5KemOPpu80OtBYzlgpN0iVP/6XW1e5FCRp2ofQKZYXVwu5txKIakjYRruUiiZTza\n QeXRPbp3AkEAlGx6wMe1l9UtAAlkgCFYbuxM+eRD4Gg5qLYFpKNsoINXTnlfDry5\n +1NkuyiQDjzOSPiLZ4Abpf+a+myjOuNL1wJBAOwkdM6aCVT1J9BkW5mrCLY+PgtV\n GT80KTY/d6091fBMKhxL5SheJ4SsRYVFtguL2eA7S5xJSpyxkadRzR0Wj3sCQAvA\n bxO2fE1SRqbbF4cBnOPjd9DNXwZ0miQejWHUwrQO0inXeExNaxhYKQCcnJNUAy1J\n 6JfAT/AbxeSQF3iBKK8CQAt5r/LLEM1/8ekGOvBh8MAQpWBW771QzHUN84SiUd/q\n xR9mfItngPwYJ9d/pTO7u9ZUPHEoat8Ave4waB08DsI=\n -----END RSA PRIVATE KEY-----\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,t.jsx)(d.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,t.jsxs)(d.p,{children:['PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier.\nFlow considers all the reserved words that are marked as "reserved" in any of the columns in the official ',(0,t.jsx)(d.a,{href:"https://www.postgresql.org/docs/current/sql-keywords-appendix.html",children:"PostgreSQL documentation"}),"."]}),"\n",(0,t.jsx)(d.p,{children:"These reserve words are listed in the table below. Flow automatically quotes fields that are in this list."}),"\n",(0,t.jsxs)(d.table,{children:[(0,t.jsx)(d.thead,{children:(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.th,{children:"Reserved words"}),(0,t.jsx)(d.th,{}),(0,t.jsx)(d.th,{}),(0,t.jsx)(d.th,{}),(0,t.jsx)(d.th,{})]})}),(0,t.jsxs)(d.tbody,{children:[(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"abs"}),(0,t.jsx)(d.td,{children:"current_transform_group_for_type"}),(0,t.jsx)(d.td,{children:"indicator"}),(0,t.jsx)(d.td,{children:"order"}),(0,t.jsx)(d.td,{children:"sqlexception"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"absolute"}),(0,t.jsx)(d.td,{children:"current_user"}),(0,t.jsx)(d.td,{children:"initial"}),(0,t.jsx)(d.td,{children:"out"}),(0,t.jsx)(d.td,{children:"sqlstate"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"acos"}),(0,t.jsx)(d.td,{children:"cursor"}),(0,t.jsx)(d.td,{children:"initially"}),(0,t.jsx)(d.td,{children:"outer"}),(0,t.jsx)(d.td,{children:"sqlwarning"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"action"}),(0,t.jsx)(d.td,{children:"cycle"}),(0,t.jsx)(d.td,{children:"inner"}),(0,t.jsx)(d.td,{children:"output"}),(0,t.jsx)(d.td,{children:"sqrt"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"add"}),(0,t.jsx)(d.td,{children:"datalink"}),(0,t.jsx)(d.td,{children:"inout"}),(0,t.jsx)(d.td,{children:"over"}),(0,t.jsx)(d.td,{children:"start"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"all"}),(0,t.jsx)(d.td,{children:"date"}),(0,t.jsx)(d.td,{children:"input"}),(0,t.jsx)(d.td,{children:"overlaps"}),(0,t.jsx)(d.td,{children:"static"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"allocate"}),(0,t.jsx)(d.td,{children:"day"}),(0,t.jsx)(d.td,{children:"insensitive"}),(0,t.jsx)(d.td,{children:"overlay"}),(0,t.jsx)(d.td,{children:"stddev_pop"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"alter"}),(0,t.jsx)(d.td,{children:"deallocate"}),(0,t.jsx)(d.td,{children:"insert"}),(0,t.jsx)(d.td,{children:"pad"}),(0,t.jsx)(d.td,{children:"stddev_samp"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"analyse"}),(0,t.jsx)(d.td,{children:"dec"}),(0,t.jsx)(d.td,{children:"int"}),(0,t.jsx)(d.td,{children:"parameter"}),(0,t.jsx)(d.td,{children:"submultiset"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"analyze"}),(0,t.jsx)(d.td,{children:"decfloat"}),(0,t.jsx)(d.td,{children:"integer"}),(0,t.jsx)(d.td,{children:"partial"}),(0,t.jsx)(d.td,{children:"subset"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"and"}),(0,t.jsx)(d.td,{children:"decimal"}),(0,t.jsx)(d.td,{children:"intersect"}),(0,t.jsx)(d.td,{children:"partition"}),(0,t.jsx)(d.td,{children:"substring"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"any"}),(0,t.jsx)(d.td,{children:"declare"}),(0,t.jsx)(d.td,{children:"intersection"}),(0,t.jsx)(d.td,{children:"pattern"}),(0,t.jsx)(d.td,{children:"substring_regex"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"are"}),(0,t.jsx)(d.td,{children:"default"}),(0,t.jsx)(d.td,{children:"interval"}),(0,t.jsx)(d.td,{children:"per"}),(0,t.jsx)(d.td,{children:"succeeds"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"array"}),(0,t.jsx)(d.td,{children:"deferrable"}),(0,t.jsx)(d.td,{children:"into"}),(0,t.jsx)(d.td,{children:"percent"}),(0,t.jsx)(d.td,{children:"sum"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"array_agg"}),(0,t.jsx)(d.td,{children:"deferred"}),(0,t.jsx)(d.td,{children:"is"}),(0,t.jsx)(d.td,{children:"percentile_cont"}),(0,t.jsx)(d.td,{children:"symmetric"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"array_max_cardinality"}),(0,t.jsx)(d.td,{children:"define"}),(0,t.jsx)(d.td,{children:"isnull"}),(0,t.jsx)(d.td,{children:"percentile_disc"}),(0,t.jsx)(d.td,{children:"system"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"as"}),(0,t.jsx)(d.td,{children:"delete"}),(0,t.jsx)(d.td,{children:"isolation"}),(0,t.jsx)(d.td,{children:"percent_rank"}),(0,t.jsx)(d.td,{children:"system_time"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"asc"}),(0,t.jsx)(d.td,{children:"dense_rank"}),(0,t.jsx)(d.td,{children:"join"}),(0,t.jsx)(d.td,{children:"period"}),(0,t.jsx)(d.td,{children:"system_user"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"asensitive"}),(0,t.jsx)(d.td,{children:"deref"}),(0,t.jsx)(d.td,{children:"json_array"}),(0,t.jsx)(d.td,{children:"permute"}),(0,t.jsx)(d.td,{children:"table"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"asin"}),(0,t.jsx)(d.td,{children:"desc"}),(0,t.jsx)(d.td,{children:"json_arrayagg"}),(0,t.jsx)(d.td,{children:"placing"}),(0,t.jsx)(d.td,{children:"tablesample"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"assertion"}),(0,t.jsx)(d.td,{children:"describe"}),(0,t.jsx)(d.td,{children:"json_exists"}),(0,t.jsx)(d.td,{children:"portion"}),(0,t.jsx)(d.td,{children:"tan"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"asymmetric"}),(0,t.jsx)(d.td,{children:"descriptor"}),(0,t.jsx)(d.td,{children:"json_object"}),(0,t.jsx)(d.td,{children:"position"}),(0,t.jsx)(d.td,{children:"tanh"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"at"}),(0,t.jsx)(d.td,{children:"deterministic"}),(0,t.jsx)(d.td,{children:"json_objectagg"}),(0,t.jsx)(d.td,{children:"position_regex"}),(0,t.jsx)(d.td,{children:"temporary"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"atan"}),(0,t.jsx)(d.td,{children:"diagnostics"}),(0,t.jsx)(d.td,{children:"json_query"}),(0,t.jsx)(d.td,{children:"power"}),(0,t.jsx)(d.td,{children:"then"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"atomic"}),(0,t.jsx)(d.td,{children:"disconnect"}),(0,t.jsx)(d.td,{children:"json_table"}),(0,t.jsx)(d.td,{children:"precedes"}),(0,t.jsx)(d.td,{children:"time"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"authorization"}),(0,t.jsx)(d.td,{children:"distinct"}),(0,t.jsx)(d.td,{children:"json_table_primitive"}),(0,t.jsx)(d.td,{children:"precision"}),(0,t.jsx)(d.td,{children:"timestamp"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"avg"}),(0,t.jsx)(d.td,{children:"dlnewcopy"}),(0,t.jsx)(d.td,{children:"json_value"}),(0,t.jsx)(d.td,{children:"prepare"}),(0,t.jsx)(d.td,{children:"timezone_hour"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"begin"}),(0,t.jsx)(d.td,{children:"dlpreviouscopy"}),(0,t.jsx)(d.td,{children:"key"}),(0,t.jsx)(d.td,{children:"preserve"}),(0,t.jsx)(d.td,{children:"timezone_minute"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"begin_frame"}),(0,t.jsx)(d.td,{children:"dlurlcomplete"}),(0,t.jsx)(d.td,{children:"lag"}),(0,t.jsx)(d.td,{children:"primary"}),(0,t.jsx)(d.td,{children:"to"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"begin_partition"}),(0,t.jsx)(d.td,{children:"dlurlcompleteonly"}),(0,t.jsx)(d.td,{children:"language"}),(0,t.jsx)(d.td,{children:"prior"}),(0,t.jsx)(d.td,{children:"trailing"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"between"}),(0,t.jsx)(d.td,{children:"dlurlcompletewrite"}),(0,t.jsx)(d.td,{children:"large"}),(0,t.jsx)(d.td,{children:"privileges"}),(0,t.jsx)(d.td,{children:"transaction"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"bigint"}),(0,t.jsx)(d.td,{children:"dlurlpath"}),(0,t.jsx)(d.td,{children:"last"}),(0,t.jsx)(d.td,{children:"procedure"}),(0,t.jsx)(d.td,{children:"translate"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"binary"}),(0,t.jsx)(d.td,{children:"dlurlpathonly"}),(0,t.jsx)(d.td,{children:"last_value"}),(0,t.jsx)(d.td,{children:"ptf"}),(0,t.jsx)(d.td,{children:"translate_regex"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"bit"}),(0,t.jsx)(d.td,{children:"dlurlpathwrite"}),(0,t.jsx)(d.td,{children:"lateral"}),(0,t.jsx)(d.td,{children:"public"}),(0,t.jsx)(d.td,{children:"translation"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"bit_length"}),(0,t.jsx)(d.td,{children:"dlurlscheme"}),(0,t.jsx)(d.td,{children:"lead"}),(0,t.jsx)(d.td,{children:"range"}),(0,t.jsx)(d.td,{children:"treat"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"blob"}),(0,t.jsx)(d.td,{children:"dlurlserver"}),(0,t.jsx)(d.td,{children:"leading"}),(0,t.jsx)(d.td,{children:"rank"}),(0,t.jsx)(d.td,{children:"trigger"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"boolean"}),(0,t.jsx)(d.td,{children:"dlvalue"}),(0,t.jsx)(d.td,{children:"left"}),(0,t.jsx)(d.td,{children:"read"}),(0,t.jsx)(d.td,{children:"trim"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"both"}),(0,t.jsx)(d.td,{children:"do"}),(0,t.jsx)(d.td,{children:"level"}),(0,t.jsx)(d.td,{children:"reads"}),(0,t.jsx)(d.td,{children:"trim_array"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"by"}),(0,t.jsx)(d.td,{children:"domain"}),(0,t.jsx)(d.td,{children:"like"}),(0,t.jsx)(d.td,{children:"real"}),(0,t.jsx)(d.td,{children:"true"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"call"}),(0,t.jsx)(d.td,{children:"double"}),(0,t.jsx)(d.td,{children:"like_regex"}),(0,t.jsx)(d.td,{children:"recursive"}),(0,t.jsx)(d.td,{children:"truncate"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"called"}),(0,t.jsx)(d.td,{children:"drop"}),(0,t.jsx)(d.td,{children:"limit"}),(0,t.jsx)(d.td,{children:"ref"}),(0,t.jsx)(d.td,{children:"uescape"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cardinality"}),(0,t.jsx)(d.td,{children:"dynamic"}),(0,t.jsx)(d.td,{children:"listagg"}),(0,t.jsx)(d.td,{children:"references"}),(0,t.jsx)(d.td,{children:"union"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cascade"}),(0,t.jsx)(d.td,{children:"each"}),(0,t.jsx)(d.td,{children:"ln"}),(0,t.jsx)(d.td,{children:"referencing"}),(0,t.jsx)(d.td,{children:"unique"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cascaded"}),(0,t.jsx)(d.td,{children:"element"}),(0,t.jsx)(d.td,{children:"local"}),(0,t.jsx)(d.td,{children:"regr_avgx"}),(0,t.jsx)(d.td,{children:"unknown"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"case"}),(0,t.jsx)(d.td,{children:"else"}),(0,t.jsx)(d.td,{children:"localtime"}),(0,t.jsx)(d.td,{children:"regr_avgy"}),(0,t.jsx)(d.td,{children:"unmatched"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cast"}),(0,t.jsx)(d.td,{children:"empty"}),(0,t.jsx)(d.td,{children:"localtimestamp"}),(0,t.jsx)(d.td,{children:"regr_count"}),(0,t.jsx)(d.td,{children:"unnest"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"catalog"}),(0,t.jsx)(d.td,{children:"end"}),(0,t.jsx)(d.td,{children:"log"}),(0,t.jsx)(d.td,{children:"regr_intercept"}),(0,t.jsx)(d.td,{children:"update"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"ceil"}),(0,t.jsx)(d.td,{children:"end-exec"}),(0,t.jsx)(d.td,{children:"log10"}),(0,t.jsx)(d.td,{children:"regr_r2"}),(0,t.jsx)(d.td,{children:"upper"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"ceiling"}),(0,t.jsx)(d.td,{children:"end_frame"}),(0,t.jsx)(d.td,{children:"lower"}),(0,t.jsx)(d.td,{children:"regr_slope"}),(0,t.jsx)(d.td,{children:"usage"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"char"}),(0,t.jsx)(d.td,{children:"end_partition"}),(0,t.jsx)(d.td,{children:"match"}),(0,t.jsx)(d.td,{children:"regr_sxx"}),(0,t.jsx)(d.td,{children:"user"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"character"}),(0,t.jsx)(d.td,{children:"equals"}),(0,t.jsx)(d.td,{children:"matches"}),(0,t.jsx)(d.td,{children:"regr_sxy"}),(0,t.jsx)(d.td,{children:"using"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"character_length"}),(0,t.jsx)(d.td,{children:"escape"}),(0,t.jsx)(d.td,{children:"match_number"}),(0,t.jsx)(d.td,{children:"regr_syy"}),(0,t.jsx)(d.td,{children:"value"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"char_length"}),(0,t.jsx)(d.td,{children:"every"}),(0,t.jsx)(d.td,{children:"match_recognize"}),(0,t.jsx)(d.td,{children:"relative"}),(0,t.jsx)(d.td,{children:"values"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"check"}),(0,t.jsx)(d.td,{children:"except"}),(0,t.jsx)(d.td,{children:"max"}),(0,t.jsx)(d.td,{children:"release"}),(0,t.jsx)(d.td,{children:"value_of"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"classifier"}),(0,t.jsx)(d.td,{children:"exception"}),(0,t.jsx)(d.td,{children:"measures"}),(0,t.jsx)(d.td,{children:"restrict"}),(0,t.jsx)(d.td,{children:"varbinary"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"clob"}),(0,t.jsx)(d.td,{children:"exec"}),(0,t.jsx)(d.td,{children:"member"}),(0,t.jsx)(d.td,{children:"result"}),(0,t.jsx)(d.td,{children:"varchar"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"close"}),(0,t.jsx)(d.td,{children:"execute"}),(0,t.jsx)(d.td,{children:"merge"}),(0,t.jsx)(d.td,{children:"return"}),(0,t.jsx)(d.td,{children:"variadic"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"coalesce"}),(0,t.jsx)(d.td,{children:"exists"}),(0,t.jsx)(d.td,{children:"method"}),(0,t.jsx)(d.td,{children:"returning"}),(0,t.jsx)(d.td,{children:"varying"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"collate"}),(0,t.jsx)(d.td,{children:"exp"}),(0,t.jsx)(d.td,{children:"min"}),(0,t.jsx)(d.td,{children:"returns"}),(0,t.jsx)(d.td,{children:"var_pop"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"collation"}),(0,t.jsx)(d.td,{children:"external"}),(0,t.jsx)(d.td,{children:"minute"}),(0,t.jsx)(d.td,{children:"revoke"}),(0,t.jsx)(d.td,{children:"var_samp"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"collect"}),(0,t.jsx)(d.td,{children:"extract"}),(0,t.jsx)(d.td,{children:"mod"}),(0,t.jsx)(d.td,{children:"right"}),(0,t.jsx)(d.td,{children:"verbose"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"column"}),(0,t.jsx)(d.td,{children:"false"}),(0,t.jsx)(d.td,{children:"modifies"}),(0,t.jsx)(d.td,{children:"rollback"}),(0,t.jsx)(d.td,{children:"versioning"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"commit"}),(0,t.jsx)(d.td,{children:"fetch"}),(0,t.jsx)(d.td,{children:"module"}),(0,t.jsx)(d.td,{children:"rollup"}),(0,t.jsx)(d.td,{children:"view"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"concurrently"}),(0,t.jsx)(d.td,{children:"filter"}),(0,t.jsx)(d.td,{children:"month"}),(0,t.jsx)(d.td,{children:"row"}),(0,t.jsx)(d.td,{children:"when"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"condition"}),(0,t.jsx)(d.td,{children:"first"}),(0,t.jsx)(d.td,{children:"multiset"}),(0,t.jsx)(d.td,{children:"rows"}),(0,t.jsx)(d.td,{children:"whenever"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"connect"}),(0,t.jsx)(d.td,{children:"first_value"}),(0,t.jsx)(d.td,{children:"names"}),(0,t.jsx)(d.td,{children:"row_number"}),(0,t.jsx)(d.td,{children:"where"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"connection"}),(0,t.jsx)(d.td,{children:"float"}),(0,t.jsx)(d.td,{children:"national"}),(0,t.jsx)(d.td,{children:"running"}),(0,t.jsx)(d.td,{children:"width_bucket"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"constraint"}),(0,t.jsx)(d.td,{children:"floor"}),(0,t.jsx)(d.td,{children:"natural"}),(0,t.jsx)(d.td,{children:"savepoint"}),(0,t.jsx)(d.td,{children:"window"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"constraints"}),(0,t.jsx)(d.td,{children:"for"}),(0,t.jsx)(d.td,{children:"nchar"}),(0,t.jsx)(d.td,{children:"schema"}),(0,t.jsx)(d.td,{children:"with"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"contains"}),(0,t.jsx)(d.td,{children:"foreign"}),(0,t.jsx)(d.td,{children:"nclob"}),(0,t.jsx)(d.td,{children:"scope"}),(0,t.jsx)(d.td,{children:"within"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"continue"}),(0,t.jsx)(d.td,{children:"found"}),(0,t.jsx)(d.td,{children:"new"}),(0,t.jsx)(d.td,{children:"scroll"}),(0,t.jsx)(d.td,{children:"without"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"convert"}),(0,t.jsx)(d.td,{children:"frame_row"}),(0,t.jsx)(d.td,{children:"next"}),(0,t.jsx)(d.td,{children:"search"}),(0,t.jsx)(d.td,{children:"work"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"copy"}),(0,t.jsx)(d.td,{children:"free"}),(0,t.jsx)(d.td,{children:"no"}),(0,t.jsx)(d.td,{children:"second"}),(0,t.jsx)(d.td,{children:"write"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"corr"}),(0,t.jsx)(d.td,{children:"freeze"}),(0,t.jsx)(d.td,{children:"none"}),(0,t.jsx)(d.td,{children:"section"}),(0,t.jsx)(d.td,{children:"xml"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"corresponding"}),(0,t.jsx)(d.td,{children:"from"}),(0,t.jsx)(d.td,{children:"normalize"}),(0,t.jsx)(d.td,{children:"seek"}),(0,t.jsx)(d.td,{children:"xmlagg"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cos"}),(0,t.jsx)(d.td,{children:"full"}),(0,t.jsx)(d.td,{children:"not"}),(0,t.jsx)(d.td,{children:"select"}),(0,t.jsx)(d.td,{children:"xmlattributes"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cosh"}),(0,t.jsx)(d.td,{children:"function"}),(0,t.jsx)(d.td,{children:"notnull"}),(0,t.jsx)(d.td,{children:"sensitive"}),(0,t.jsx)(d.td,{children:"xmlbinary"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"count"}),(0,t.jsx)(d.td,{children:"fusion"}),(0,t.jsx)(d.td,{children:"nth_value"}),(0,t.jsx)(d.td,{children:"session"}),(0,t.jsx)(d.td,{children:"xmlcast"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"covar_pop"}),(0,t.jsx)(d.td,{children:"get"}),(0,t.jsx)(d.td,{children:"ntile"}),(0,t.jsx)(d.td,{children:"session_user"}),(0,t.jsx)(d.td,{children:"xmlcomment"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"covar_samp"}),(0,t.jsx)(d.td,{children:"global"}),(0,t.jsx)(d.td,{children:"null"}),(0,t.jsx)(d.td,{children:"set"}),(0,t.jsx)(d.td,{children:"xmlconcat"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"create"}),(0,t.jsx)(d.td,{children:"go"}),(0,t.jsx)(d.td,{children:"nullif"}),(0,t.jsx)(d.td,{children:"show"}),(0,t.jsx)(d.td,{children:"xmldocument"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cross"}),(0,t.jsx)(d.td,{children:"goto"}),(0,t.jsx)(d.td,{children:"numeric"}),(0,t.jsx)(d.td,{children:"similar"}),(0,t.jsx)(d.td,{children:"xmlelement"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cube"}),(0,t.jsx)(d.td,{children:"grant"}),(0,t.jsx)(d.td,{children:"occurrences_regex"}),(0,t.jsx)(d.td,{children:"sin"}),(0,t.jsx)(d.td,{children:"xmlexists"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cume_dist"}),(0,t.jsx)(d.td,{children:"group"}),(0,t.jsx)(d.td,{children:"octet_length"}),(0,t.jsx)(d.td,{children:"sinh"}),(0,t.jsx)(d.td,{children:"xmlforest"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current"}),(0,t.jsx)(d.td,{children:"grouping"}),(0,t.jsx)(d.td,{children:"of"}),(0,t.jsx)(d.td,{children:"size"}),(0,t.jsx)(d.td,{children:"xmliterate"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_catalog"}),(0,t.jsx)(d.td,{children:"groups"}),(0,t.jsx)(d.td,{children:"offset"}),(0,t.jsx)(d.td,{children:"skip"}),(0,t.jsx)(d.td,{children:"xmlnamespaces"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_date"}),(0,t.jsx)(d.td,{children:"having"}),(0,t.jsx)(d.td,{children:"old"}),(0,t.jsx)(d.td,{children:"smallint"}),(0,t.jsx)(d.td,{children:"xmlparse"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_default_transform_group"}),(0,t.jsx)(d.td,{children:"hold"}),(0,t.jsx)(d.td,{children:"omit"}),(0,t.jsx)(d.td,{children:"some"}),(0,t.jsx)(d.td,{children:"xmlpi"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_path"}),(0,t.jsx)(d.td,{children:"hour"}),(0,t.jsx)(d.td,{children:"on"}),(0,t.jsx)(d.td,{children:"space"}),(0,t.jsx)(d.td,{children:"xmlquery"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_role"}),(0,t.jsx)(d.td,{children:"identity"}),(0,t.jsx)(d.td,{children:"one"}),(0,t.jsx)(d.td,{children:"specific"}),(0,t.jsx)(d.td,{children:"xmlserialize"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_row"}),(0,t.jsx)(d.td,{children:"ilike"}),(0,t.jsx)(d.td,{children:"only"}),(0,t.jsx)(d.td,{children:"specifictype"}),(0,t.jsx)(d.td,{children:"xmltable"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_schema"}),(0,t.jsx)(d.td,{children:"immediate"}),(0,t.jsx)(d.td,{children:"open"}),(0,t.jsx)(d.td,{children:"sql"}),(0,t.jsx)(d.td,{children:"xmltext"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_time"}),(0,t.jsx)(d.td,{children:"import"}),(0,t.jsx)(d.td,{children:"option"}),(0,t.jsx)(d.td,{children:"sqlcode"}),(0,t.jsx)(d.td,{children:"xmlvalidate"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_timestamp"}),(0,t.jsx)(d.td,{children:"in"}),(0,t.jsx)(d.td,{children:"or"}),(0,t.jsx)(d.td,{children:"sqlerror"}),(0,t.jsx)(d.td,{children:"year"})]})]})]})]})}function j(e={}){const{wrapper:d}={...(0,s.R)(),...e.components};return d?(0,t.jsx)(d,{...e,children:(0,t.jsx)(x,{...e})}):x(e)}},28453:(e,d,r)=>{r.d(d,{R:()=>i,x:()=>l});var t=r(96540);const s={},n=t.createContext(s);function i(e){const d=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function l(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(n.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/161e6f0a.3eb5081c.js b/pr-preview/pr-1594/assets/js/161e6f0a.3eb5081c.js deleted file mode 100644 index bc24839653..0000000000 --- a/pr-preview/pr-1594/assets/js/161e6f0a.3eb5081c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3765],{15331:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>i,default:()=>x,frontMatter:()=>d,metadata:()=>l,toc:()=>h});var n=t(74848),s=t(28453);const d={},i=void 0,l={id:"reference/Connectors/materialization-connectors/SQLite",title:"SQLite",description:"This connector materializes Flow collections into an ephemeral SQLite database.",source:"@site/docs/reference/Connectors/materialization-connectors/SQLite.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/SQLite",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/SQLite.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Snowflake",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake"},next:{title:"Starburst",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst"}},c={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Delta updates",id:"delta-updates",level:2},{value:"Reserved words",id:"reserved-words",level:2}];function o(e){const r={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.p,{children:"This connector materializes Flow collections into an ephemeral SQLite database.\nNote that this connector is for demo and sandbox purposes, and if the connector is restarted for any\nreason, the data materialized up to that point will be lost in the\nmaterialization (your collection will stay in-tact and your other\nmaterializations will have the data as normal)."}),"\n",(0,n.jsxs)(r.p,{children:["It is available for use in the Flow web application. For local development or\nopen-source workflows,\n",(0,n.jsx)(r.a,{href:"https://ghcr.io/estuary/materialize-sqlite:dev",children:(0,n.jsx)(r.code,{children:"ghcr.io/estuary/materialize-sqlite:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,n.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsx)(r.p,{children:"To use this connector, you'll need:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(r.p,{children:"This materialization requires no configuration, and all you need to do is choose\na collection to materialize."}),"\n",(0,n.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,n.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Property"}),(0,n.jsx)(r.th,{children:"Title"}),(0,n.jsx)(r.th,{children:"Description"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Required/Default"})]})}),(0,n.jsx)(r.tbody,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/table"})})}),(0,n.jsx)(r.td,{children:"Table"}),(0,n.jsx)(r.td,{children:"Table name to materialize to. It will be created by the connector, unless the connector has previously created it."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]})})]}),"\n",(0,n.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-sqlite:dev\n config: {}\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,n.jsx)(r.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,n.jsx)(r.p,{children:"This connector does not support delta updates at the moment."}),"\n",(0,n.jsx)(r.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,n.jsxs)(r.p,{children:['SQLite has a list of reserved words that must be quoted in order to be used as an identifier.\nFlow considers all the reserved words that are marked as "reserved" in any of\nthe columns in the official ',(0,n.jsx)(r.a,{href:"https://www.sqlite.org/lang_keywords.html",children:"SQlite documentation"}),"."]}),"\n",(0,n.jsx)(r.p,{children:"These reserve words are listed in the table below. Flow automatically quotes fields that are in this list."}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Reserved words"}),(0,n.jsx)(r.th,{})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"abort"}),(0,n.jsx)(r.td,{children:"intersect"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"action"}),(0,n.jsx)(r.td,{children:"into"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"add"}),(0,n.jsx)(r.td,{children:"is"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"after"}),(0,n.jsx)(r.td,{children:"isnull"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"all"}),(0,n.jsx)(r.td,{children:"join"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"alter"}),(0,n.jsx)(r.td,{children:"key"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"always"}),(0,n.jsx)(r.td,{children:"last"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"analyze"}),(0,n.jsx)(r.td,{children:"left"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"and"}),(0,n.jsx)(r.td,{children:"like"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"as"}),(0,n.jsx)(r.td,{children:"limit"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"asc"}),(0,n.jsx)(r.td,{children:"match"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"attach"}),(0,n.jsx)(r.td,{children:"materialized"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"autoincrement"}),(0,n.jsx)(r.td,{children:"natural"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"before"}),(0,n.jsx)(r.td,{children:"no"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"begin"}),(0,n.jsx)(r.td,{children:"not"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"between"}),(0,n.jsx)(r.td,{children:"nothing"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"by"}),(0,n.jsx)(r.td,{children:"notnull"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"cascade"}),(0,n.jsx)(r.td,{children:"null"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"case"}),(0,n.jsx)(r.td,{children:"nulls"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"cast"}),(0,n.jsx)(r.td,{children:"of"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"check"}),(0,n.jsx)(r.td,{children:"offset"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collate"}),(0,n.jsx)(r.td,{children:"on"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"column"}),(0,n.jsx)(r.td,{children:"or"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"commit"}),(0,n.jsx)(r.td,{children:"order"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"conflict"}),(0,n.jsx)(r.td,{children:"others"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"constraint"}),(0,n.jsx)(r.td,{children:"outer"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"create"}),(0,n.jsx)(r.td,{children:"over"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"cross"}),(0,n.jsx)(r.td,{children:"partition"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"current"}),(0,n.jsx)(r.td,{children:"plan"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"current_date"}),(0,n.jsx)(r.td,{children:"pragma"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"current_time"}),(0,n.jsx)(r.td,{children:"preceding"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"current_timestamp"}),(0,n.jsx)(r.td,{children:"primary"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"database"}),(0,n.jsx)(r.td,{children:"query"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"default"}),(0,n.jsx)(r.td,{children:"raise"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"deferrable"}),(0,n.jsx)(r.td,{children:"range"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"deferred"}),(0,n.jsx)(r.td,{children:"recursive"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"delete"}),(0,n.jsx)(r.td,{children:"references"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"desc"}),(0,n.jsx)(r.td,{children:"regexp"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"detach"}),(0,n.jsx)(r.td,{children:"reindex"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"distinct"}),(0,n.jsx)(r.td,{children:"release"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"do"}),(0,n.jsx)(r.td,{children:"rename"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"drop"}),(0,n.jsx)(r.td,{children:"replace"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"each"}),(0,n.jsx)(r.td,{children:"restrict"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"else"}),(0,n.jsx)(r.td,{children:"returning"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"end"}),(0,n.jsx)(r.td,{children:"right"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"escape"}),(0,n.jsx)(r.td,{children:"rollback"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"except"}),(0,n.jsx)(r.td,{children:"row"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"exclude"}),(0,n.jsx)(r.td,{children:"rows"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"exclusive"}),(0,n.jsx)(r.td,{children:"savepoint"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"exists"}),(0,n.jsx)(r.td,{children:"select"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"explain"}),(0,n.jsx)(r.td,{children:"set"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"fail"}),(0,n.jsx)(r.td,{children:"table"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"filter"}),(0,n.jsx)(r.td,{children:"temp"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"first"}),(0,n.jsx)(r.td,{children:"temporary"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"following"}),(0,n.jsx)(r.td,{children:"then"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"for"}),(0,n.jsx)(r.td,{children:"ties"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"foreign"}),(0,n.jsx)(r.td,{children:"to"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"from"}),(0,n.jsx)(r.td,{children:"transaction"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"full"}),(0,n.jsx)(r.td,{children:"trigger"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"generated"}),(0,n.jsx)(r.td,{children:"unbounded"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"glob"}),(0,n.jsx)(r.td,{children:"union"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"group"}),(0,n.jsx)(r.td,{children:"unique"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"groups"}),(0,n.jsx)(r.td,{children:"update"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"having"}),(0,n.jsx)(r.td,{children:"using"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"if"}),(0,n.jsx)(r.td,{children:"vacuum"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ignore"}),(0,n.jsx)(r.td,{children:"values"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"immediate"}),(0,n.jsx)(r.td,{children:"view"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"in"}),(0,n.jsx)(r.td,{children:"virtual"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index"}),(0,n.jsx)(r.td,{children:"when"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"indexed"}),(0,n.jsx)(r.td,{children:"where"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"initially"}),(0,n.jsx)(r.td,{children:"window"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"inner"}),(0,n.jsx)(r.td,{children:"with"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"insert"}),(0,n.jsx)(r.td,{children:"without"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"instead"}),(0,n.jsx)(r.td,{})]})]})]})]})}function x(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},28453:(e,r,t)=>{t.d(r,{R:()=>i,x:()=>l});var n=t(96540);const s={},d=n.createContext(s);function i(e){const r=n.useContext(d);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function l(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(d.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/162.5b1f790d.js b/pr-preview/pr-1594/assets/js/162.5b1f790d.js deleted file mode 100644 index 44dbe406de..0000000000 --- a/pr-preview/pr-1594/assets/js/162.5b1f790d.js +++ /dev/null @@ -1,20438 +0,0 @@ -"use strict"; -exports.id = 162; -exports.ids = [162]; -exports.modules = { - -/***/ 73046: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - T: () => (/* binding */ Graph) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js -var isFunction = __webpack_require__(89610); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js -var isEmpty = __webpack_require__(66401); -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -/* harmony default export */ const _baseIsNaN = (baseIsNaN); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -/* harmony default export */ const _strictIndexOf = (strictIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js - - - - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? _strictIndexOf(array, value, fromIndex) - : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); -} - -/* harmony default export */ const _baseIndexOf = (baseIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js - - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && _baseIndexOf(array, value, 0) > -1; -} - -/* harmony default export */ const _arrayIncludes = (arrayIncludes); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js -var _Set = __webpack_require__(39857); -;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js -/** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ -function noop() { - // No operation performed. -} - -/* harmony default export */ const lodash_es_noop = (noop); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { - return new _Set/* default */.A(values); -}; - -/* harmony default export */ const _createSet = (createSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js - - - - - - - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = _arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = _arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : _createSet(array); - if (set) { - return (0,_setToArray/* default */.A)(set); - } - isCommon = false; - includes = _cacheHas/* default */.A; - seen = new _SetCache/* default */.A; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -/* harmony default export */ const _baseUniq = (baseUniq); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js -var isArrayLikeObject = __webpack_require__(53533); -;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js - - - - - -/** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ -var union = (0,_baseRest/* default */.A)(function(arrays) { - return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); -}); - -/* harmony default export */ const lodash_es_union = (union); - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js - - -var DEFAULT_EDGE_NAME = '\x00'; -var GRAPH_NODE = '\x00'; -var EDGE_KEY_DELIM = '\x01'; - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. -class Graph { - constructor(opts = {}) { - this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; - this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; - this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; - - // Label for the graph itself - this._label = undefined; - - // Defaults to be set when creating a new node - this._defaultNodeLabelFn = constant/* default */.A(undefined); - - // Defaults to be set when creating a new edge - this._defaultEdgeLabelFn = constant/* default */.A(undefined); - - // v -> label - this._nodes = {}; - - if (this._isCompound) { - // v -> parent - this._parent = {}; - - // v -> children - this._children = {}; - this._children[GRAPH_NODE] = {}; - } - - // v -> edgeObj - this._in = {}; - - // u -> v -> Number - this._preds = {}; - - // v -> edgeObj - this._out = {}; - - // v -> w -> Number - this._sucs = {}; - - // e -> edgeObj - this._edgeObjs = {}; - - // e -> label - this._edgeLabels = {}; - } - /* === Graph functions ========= */ - isDirected() { - return this._isDirected; - } - isMultigraph() { - return this._isMultigraph; - } - isCompound() { - return this._isCompound; - } - setGraph(label) { - this._label = label; - return this; - } - graph() { - return this._label; - } - /* === Node functions ========== */ - setDefaultNodeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultNodeLabelFn = newDefault; - return this; - } - nodeCount() { - return this._nodeCount; - } - nodes() { - return keys/* default */.A(this._nodes); - } - sources() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._in[v]); - }); - } - sinks() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._out[v]); - }); - } - setNodes(vs, value) { - var args = arguments; - var self = this; - forEach/* default */.A(vs, function (v) { - if (args.length > 1) { - self.setNode(v, value); - } else { - self.setNode(v); - } - }); - return this; - } - setNode(v, value) { - if (has/* default */.A(this._nodes, v)) { - if (arguments.length > 1) { - this._nodes[v] = value; - } - return this; - } - - // @ts-expect-error - this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); - if (this._isCompound) { - this._parent[v] = GRAPH_NODE; - this._children[v] = {}; - this._children[GRAPH_NODE][v] = true; - } - this._in[v] = {}; - this._preds[v] = {}; - this._out[v] = {}; - this._sucs[v] = {}; - ++this._nodeCount; - return this; - } - node(v) { - return this._nodes[v]; - } - hasNode(v) { - return has/* default */.A(this._nodes, v); - } - removeNode(v) { - var self = this; - if (has/* default */.A(this._nodes, v)) { - var removeEdge = function (e) { - self.removeEdge(self._edgeObjs[e]); - }; - delete this._nodes[v]; - if (this._isCompound) { - this._removeFromParentsChildList(v); - delete this._parent[v]; - forEach/* default */.A(this.children(v), function (child) { - self.setParent(child); - }); - delete this._children[v]; - } - forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); - delete this._in[v]; - delete this._preds[v]; - forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); - delete this._out[v]; - delete this._sucs[v]; - --this._nodeCount; - } - return this; - } - setParent(v, parent) { - if (!this._isCompound) { - throw new Error('Cannot set parent in a non-compound graph'); - } - - if (isUndefined/* default */.A(parent)) { - parent = GRAPH_NODE; - } else { - // Coerce parent to string - parent += ''; - for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { - if (ancestor === v) { - throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); - } - } - - this.setNode(parent); - } - - this.setNode(v); - this._removeFromParentsChildList(v); - this._parent[v] = parent; - this._children[parent][v] = true; - return this; - } - _removeFromParentsChildList(v) { - delete this._children[this._parent[v]][v]; - } - parent(v) { - if (this._isCompound) { - var parent = this._parent[v]; - if (parent !== GRAPH_NODE) { - return parent; - } - } - } - children(v) { - if (isUndefined/* default */.A(v)) { - v = GRAPH_NODE; - } - - if (this._isCompound) { - var children = this._children[v]; - if (children) { - return keys/* default */.A(children); - } - } else if (v === GRAPH_NODE) { - return this.nodes(); - } else if (this.hasNode(v)) { - return []; - } - } - predecessors(v) { - var predsV = this._preds[v]; - if (predsV) { - return keys/* default */.A(predsV); - } - } - successors(v) { - var sucsV = this._sucs[v]; - if (sucsV) { - return keys/* default */.A(sucsV); - } - } - neighbors(v) { - var preds = this.predecessors(v); - if (preds) { - return lodash_es_union(preds, this.successors(v)); - } - } - isLeaf(v) { - var neighbors; - if (this.isDirected()) { - neighbors = this.successors(v); - } else { - neighbors = this.neighbors(v); - } - return neighbors.length === 0; - } - filterNodes(filter) { - // @ts-expect-error - var copy = new this.constructor({ - directed: this._isDirected, - multigraph: this._isMultigraph, - compound: this._isCompound, - }); - - copy.setGraph(this.graph()); - - var self = this; - forEach/* default */.A(this._nodes, function (value, v) { - if (filter(v)) { - copy.setNode(v, value); - } - }); - - forEach/* default */.A(this._edgeObjs, function (e) { - // @ts-expect-error - if (copy.hasNode(e.v) && copy.hasNode(e.w)) { - copy.setEdge(e, self.edge(e)); - } - }); - - var parents = {}; - function findParent(v) { - var parent = self.parent(v); - if (parent === undefined || copy.hasNode(parent)) { - parents[v] = parent; - return parent; - } else if (parent in parents) { - return parents[parent]; - } else { - return findParent(parent); - } - } - - if (this._isCompound) { - forEach/* default */.A(copy.nodes(), function (v) { - copy.setParent(v, findParent(v)); - }); - } - - return copy; - } - /* === Edge functions ========== */ - setDefaultEdgeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultEdgeLabelFn = newDefault; - return this; - } - edgeCount() { - return this._edgeCount; - } - edges() { - return values/* default */.A(this._edgeObjs); - } - setPath(vs, value) { - var self = this; - var args = arguments; - reduce/* default */.A(vs, function (v, w) { - if (args.length > 1) { - self.setEdge(v, w, value); - } else { - self.setEdge(v, w); - } - return w; - }); - return this; - } - /* - * setEdge(v, w, [value, [name]]) - * setEdge({ v, w, [name] }, [value]) - */ - setEdge() { - var v, w, name, value; - var valueSpecified = false; - var arg0 = arguments[0]; - - if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { - v = arg0.v; - w = arg0.w; - name = arg0.name; - if (arguments.length === 2) { - value = arguments[1]; - valueSpecified = true; - } - } else { - v = arg0; - w = arguments[1]; - name = arguments[3]; - if (arguments.length > 2) { - value = arguments[2]; - valueSpecified = true; - } - } - - v = '' + v; - w = '' + w; - if (!isUndefined/* default */.A(name)) { - name = '' + name; - } - - var e = edgeArgsToId(this._isDirected, v, w, name); - if (has/* default */.A(this._edgeLabels, e)) { - if (valueSpecified) { - this._edgeLabels[e] = value; - } - return this; - } - - if (!isUndefined/* default */.A(name) && !this._isMultigraph) { - throw new Error('Cannot set a named edge when isMultigraph = false'); - } - - // It didn't exist, so we need to create it. - // First ensure the nodes exist. - this.setNode(v); - this.setNode(w); - - // @ts-expect-error - this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); - - var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); - // Ensure we add undirected edges in a consistent way. - v = edgeObj.v; - w = edgeObj.w; - - Object.freeze(edgeObj); - this._edgeObjs[e] = edgeObj; - incrementOrInitEntry(this._preds[w], v); - incrementOrInitEntry(this._sucs[v], w); - this._in[w][e] = edgeObj; - this._out[v][e] = edgeObj; - this._edgeCount++; - return this; - } - edge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return this._edgeLabels[e]; - } - hasEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return has/* default */.A(this._edgeLabels, e); - } - removeEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - var edge = this._edgeObjs[e]; - if (edge) { - v = edge.v; - w = edge.w; - delete this._edgeLabels[e]; - delete this._edgeObjs[e]; - decrementOrRemoveEntry(this._preds[w], v); - decrementOrRemoveEntry(this._sucs[v], w); - delete this._in[w][e]; - delete this._out[v][e]; - this._edgeCount--; - } - return this; - } - inEdges(v, u) { - var inV = this._in[v]; - if (inV) { - var edges = values/* default */.A(inV); - if (!u) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.v === u; - }); - } - } - outEdges(v, w) { - var outV = this._out[v]; - if (outV) { - var edges = values/* default */.A(outV); - if (!w) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.w === w; - }); - } - } - nodeEdges(v, w) { - var inEdges = this.inEdges(v, w); - if (inEdges) { - return inEdges.concat(this.outEdges(v, w)); - } - } -} - -/* Number of nodes in the graph. Should only be changed by the implementation. */ -Graph.prototype._nodeCount = 0; - -/* Number of edges in the graph. Should only be changed by the implementation. */ -Graph.prototype._edgeCount = 0; - -function incrementOrInitEntry(map, k) { - if (map[k]) { - map[k]++; - } else { - map[k] = 1; - } -} - -function decrementOrRemoveEntry(map, k) { - if (!--map[k]) { - delete map[k]; - } -} - -function edgeArgsToId(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); -} - -function edgeArgsToObj(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - var edgeObj = { v: v, w: w }; - if (name) { - edgeObj.name = name; - } - return edgeObj; -} - -function edgeObjToId(isDirected, edgeObj) { - return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); -} - - -/***/ }), - -/***/ 697: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) -/* harmony export */ }); -/* unused harmony export version */ -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); -// Includes only the "core" of graphlib - - - -const version = '2.1.9-pre'; - - - - -/***/ }), - -/***/ 75937: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72453); -/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74886); -/* IMPORT */ - - -/* MAIN */ -const channel = (color, channel) => { - return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.lang.round(_color_index_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.parse(color)[channel]); -}; -/* EXPORT */ -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (channel); - - -/***/ }), - -/***/ 62062: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _SetCache) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules -var _MapCache = __webpack_require__(29471); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -/* harmony default export */ const _setCacheAdd = (setCacheAdd); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -/* harmony default export */ const _setCacheHas = (setCacheHas); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js - - - - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new _MapCache/* default */.A; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; -SetCache.prototype.has = _setCacheHas; - -/* harmony default export */ const _SetCache = (SetCache); - - -/***/ }), - -/***/ 72641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); - - -/***/ }), - -/***/ 2634: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); - - -/***/ }), - -/***/ 45572: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); - - -/***/ }), - -/***/ 76912: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); - - -/***/ }), - -/***/ 91641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseClone) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js -var _arrayEach = __webpack_require__(72641); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js -var _copyObject = __webpack_require__(22031); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js - - - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssign = (baseAssign); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js - - - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssignIn = (baseAssignIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js -var _cloneBuffer = __webpack_require__(80154); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js -var _copyArray = __webpack_require__(39759); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js -var _getSymbols = __webpack_require__(14792); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js - - - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); -} - -/* harmony default export */ const _copySymbols = (copySymbols); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js -var _getPrototype = __webpack_require__(15647); -// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js -var stubArray = __webpack_require__(13153); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js - - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { - var result = []; - while (object) { - (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); - object = (0,_getPrototype/* default */.A)(object); - } - return result; -}; - -/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js - - - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); -} - -/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js -var _baseGetAllKeys = __webpack_require__(33831); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js - - - - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); -} - -/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/* harmony default export */ const _initCloneArray = (initCloneArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js -var _cloneArrayBuffer = __webpack_require__(90565); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js - - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -/* harmony default export */ const _cloneDataView = (cloneDataView); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -/* harmony default export */ const _cloneRegExp = (cloneRegExp); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js - - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -/* harmony default export */ const _cloneSymbol = (cloneSymbol); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js -var _cloneTypedArray = __webpack_require__(1801); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js - - - - - - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return (0,_cloneArrayBuffer/* default */.A)(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return _cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return (0,_cloneTypedArray/* default */.A)(object, isDeep); - - case mapTag: - return new Ctor; - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return _cloneRegExp(object); - - case setTag: - return new Ctor; - - case symbolTag: - return _cloneSymbol(object); - } -} - -/* harmony default export */ const _initCloneByTag = (initCloneByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules -var _initCloneObject = __webpack_require__(18598); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js - - - -/** `Object#toString` result references. */ -var _baseIsMap_mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; -} - -/* harmony default export */ const _baseIsMap = (baseIsMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js -var _nodeUtil = __webpack_require__(64841); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js - - - - -/* Node.js helper references. */ -var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; - -/* harmony default export */ const lodash_es_isMap = (isMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js - - - -/** `Object#toString` result references. */ -var _baseIsSet_setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; -} - -/* harmony default export */ const _baseIsSet = (baseIsSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js - - - - -/* Node.js helper references. */ -var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; - -/* harmony default export */ const lodash_es_isSet = (isSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js - - - - - - - - - - - - - - - - - - - - - - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - _baseClone_boolTag = '[object Boolean]', - _baseClone_dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - _baseClone_mapTag = '[object Map]', - _baseClone_numberTag = '[object Number]', - objectTag = '[object Object]', - _baseClone_regexpTag = '[object RegExp]', - _baseClone_setTag = '[object Set]', - _baseClone_stringTag = '[object String]', - _baseClone_symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var _baseClone_arrayBufferTag = '[object ArrayBuffer]', - _baseClone_dataViewTag = '[object DataView]', - _baseClone_float32Tag = '[object Float32Array]', - _baseClone_float64Tag = '[object Float64Array]', - _baseClone_int8Tag = '[object Int8Array]', - _baseClone_int16Tag = '[object Int16Array]', - _baseClone_int32Tag = '[object Int32Array]', - _baseClone_uint8Tag = '[object Uint8Array]', - _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', - _baseClone_uint16Tag = '[object Uint16Array]', - _baseClone_uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = -cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = -cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = -cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = -cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = -cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = -cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = -cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = -cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = -cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!(0,isObject/* default */.A)(value)) { - return value; - } - var isArr = (0,isArray/* default */.A)(value); - if (isArr) { - result = _initCloneArray(value); - if (!isDeep) { - return (0,_copyArray/* default */.A)(value, result); - } - } else { - var tag = (0,_getTag/* default */.A)(value), - isFunc = tag == funcTag || tag == genTag; - - if ((0,isBuffer/* default */.A)(value)) { - return (0,_cloneBuffer/* default */.A)(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); - if (!isDeep) { - return isFlat - ? _copySymbolsIn(value, _baseAssignIn(result, value)) - : _copySymbols(value, _baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = _initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new _Stack/* default */.A); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (lodash_es_isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (lodash_es_isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } - - var keysFunc = isFull - ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) - : (isFlat ? keysIn/* default */.A : keys/* default */.A); - - var props = isArr ? undefined : keysFunc(value); - (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -/* harmony default export */ const _baseClone = (baseClone); - - -/***/ }), - -/***/ 6240: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseEach) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js - - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!(0,isArrayLike/* default */.A)(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -/* harmony default export */ const _createBaseEach = (createBaseEach); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js - - - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = _createBaseEach(_baseForOwn/* default */.A); - -/* harmony default export */ const _baseEach = (baseEach); - - -/***/ }), - -/***/ 25707: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); - - -/***/ }), - -/***/ 13588: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseFlatten) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules -var isArguments = __webpack_require__(52274); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js - - - - -/** Built-in value references. */ -var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -/* harmony default export */ const _isFlattenable = (isFlattenable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js - - - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = _isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - (0,_arrayPush/* default */.A)(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -/* harmony default export */ const _baseFlatten = (baseFlatten); - - -/***/ }), - -/***/ 79841: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); - - -/***/ }), - -/***/ 66318: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); - - -/***/ }), - -/***/ 33831: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); - - -/***/ }), - -/***/ 49574: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseIteratee) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arraySome = (arraySome); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js - - - - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!_arraySome(other, function(othValue, othIndex) { - if (!(0,_cacheHas/* default */.A)(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalArrays = (equalArrays); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js -var _Uint8Array = __webpack_require__(43988); -// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js -var eq = __webpack_require__(66984); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -/* harmony default export */ const _mapToArray = (mapToArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _equalByTag_COMPARE_PARTIAL_FLAG = 1, - _equalByTag_COMPARE_UNORDERED_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return (0,eq/* default */.A)(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = _mapToArray; - - case setTag: - var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; - convert || (convert = _setToArray/* default */.A); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -/* harmony default export */ const _equalByTag = (equalByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js - - -/** Used to compose bitmasks for value comparisons. */ -var _equalObjects_COMPARE_PARTIAL_FLAG = 1; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, - objProps = (0,_getAllKeys/* default */.A)(object), - objLength = objProps.length, - othProps = (0,_getAllKeys/* default */.A)(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalObjects = (equalObjects); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules -var isTypedArray = __webpack_require__(33858); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js - - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var _baseIsEqualDeep_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = (0,isArray/* default */.A)(object), - othIsArr = (0,isArray/* default */.A)(other), - objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), - othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && (0,isBuffer/* default */.A)(object)) { - if (!(0,isBuffer/* default */.A)(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new _Stack/* default */.A); - return (objIsArr || (0,isTypedArray/* default */.A)(object)) - ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new _Stack/* default */.A); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new _Stack/* default */.A); - return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js - - - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { - return value !== value && other !== other; - } - return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -/* harmony default export */ const _baseIsEqual = (baseIsEqual); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, - _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new _Stack/* default */.A; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -/* harmony default export */ const _baseIsMatch = (baseIsMatch); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js - - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !(0,isObject/* default */.A)(value); -} - -/* harmony default export */ const _isStrictComparable = (isStrictComparable); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js - - - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = (0,keys/* default */.A)(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, _isStrictComparable(value)]; - } - return result; -} - -/* harmony default export */ const _getMatchData = (getMatchData); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js - - - - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = _getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return _matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || _baseIsMatch(object, source, matchData); - }; -} - -/* harmony default export */ const _baseMatches = (baseMatches); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js - - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); - return result === undefined ? defaultValue : result; -} - -/* harmony default export */ const lodash_es_get = (get); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, - _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { - return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); - } - return function(object) { - var objValue = lodash_es_get(object, path); - return (objValue === undefined && objValue === srcValue) - ? (0,hasIn/* default */.A)(object, path) - : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); - }; -} - -/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js - - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return (0,_baseGet/* default */.A)(object, path); - }; -} - -/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js - - - - - -/** - * Creates a function that returns the value at `path` of a given object. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - * @example - * - * var objects = [ - * { 'a': { 'b': 2 } }, - * { 'a': { 'b': 1 } } - * ]; - * - * _.map(objects, _.property('a.b')); - * // => [2, 1] - * - * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); - * // => [1, 2] - */ -function property(path) { - return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); -} - -/* harmony default export */ const lodash_es_property = (property); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js - - - - - - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity/* default */.A; - } - if (typeof value == 'object') { - return (0,isArray/* default */.A)(value) - ? _baseMatchesProperty(value[0], value[1]) - : _baseMatches(value); - } - return lodash_es_property(value); -} - -/* harmony default export */ const _baseIteratee = (baseIteratee); - - -/***/ }), - -/***/ 70805: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); - - -/***/ }), - -/***/ 64099: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); - - -/***/ }), - -/***/ 99922: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); - - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); - - -/***/ }), - -/***/ 7819: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _castPath) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js -var memoize = __webpack_require__(46632); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js - - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = (0,memoize/* default */.A)(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -/* harmony default export */ const _memoizeCapped = (memoizeCapped); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js - - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = _memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/* harmony default export */ const _stringToPath = (stringToPath); - -// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules -var lodash_es_toString = __webpack_require__(28894); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js - - - - - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if ((0,isArray/* default */.A)(value)) { - return value; - } - return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); -} - -/* harmony default export */ const _castPath = (castPath); - - -/***/ }), - -/***/ 19042: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); -/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); - - -/***/ }), - -/***/ 14792: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); -/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); - - -/***/ }), - -/***/ 85054: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); -/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); -/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - - - - - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && - ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); - - -/***/ }), - -/***/ 86586: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); - - - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); - - -/***/ }), - -/***/ 29959: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); - - -/***/ }), - -/***/ 30901: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); - - -/***/ }), - -/***/ 50053: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(91641); - - -/** Used to compose bitmasks for cloning. */ -var CLONE_SYMBOLS_FLAG = 4; - -/** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ -function clone(value) { - return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value, CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone); - - -/***/ }), - -/***/ 11662: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_filter) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js -var _arrayFilter = __webpack_require__(2634); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js - - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - (0,_baseEach/* default */.A)(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -/* harmony default export */ const _baseFilter = (baseFilter); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js - - - - - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ -function filter(collection, predicate) { - var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; - return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); -} - -/* harmony default export */ const lodash_es_filter = (filter); - - -/***/ }), - -/***/ 8058: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); -/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); - - -/***/ }), - -/***/ 48585: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_has) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && _baseHas_hasOwnProperty.call(object, key); -} - -/* harmony default export */ const _baseHas = (baseHas); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js - - - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); -} - -/* harmony default export */ const lodash_es_has = (has); - - -/***/ }), - -/***/ 39188: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_hasIn) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -/* harmony default export */ const _baseHasIn = (baseHasIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js - - - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); -} - -/* harmony default export */ const lodash_es_hasIn = (hasIn); - - -/***/ }), - -/***/ 61882: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); -/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); - - - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); - - -/***/ }), - -/***/ 69592: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); - - -/***/ }), - -/***/ 27422: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); -/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); - - -/***/ }), - -/***/ 89463: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_reduce) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -/* harmony default export */ const _arrayReduce = (arrayReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -/* harmony default export */ const _baseReduce = (baseReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js - - - - - - -/** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ -function reduce(collection, iteratee, accumulator) { - var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, - initAccum = arguments.length < 3; - - return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); -} - -/* harmony default export */ const lodash_es_reduce = (reduce); - - -/***/ }), - -/***/ 13153: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ -function stubArray() { - return []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); - - -/***/ }), - -/***/ 28894: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toString) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js - - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if ((0,isArray/* default */.A)(value)) { - // Recursively convert values (susceptible to call stack limits). - return (0,_arrayMap/* default */.A)(value, baseToString) + ''; - } - if ((0,isSymbol/* default */.A)(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const _baseToString = (baseToString); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js - - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString_toString(value) { - return value == null ? '' : _baseToString(value); -} - -/* harmony default export */ const lodash_es_toString = (toString_toString); - - -/***/ }), - -/***/ 38207: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_values) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js - - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return (0,_arrayMap/* default */.A)(props, function(key) { - return object[key]; - }); -} - -/* harmony default export */ const _baseValues = (baseValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js - - - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values(object) { - return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); -} - -/* harmony default export */ const lodash_es_values = (values); - - -/***/ }), - -/***/ 14162: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99702); -/* harmony import */ var lodash_es_clone_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(50053); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(75937); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(25582); -/* harmony import */ var _edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(98055); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(697); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26312); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99418); -var _a, _b; - - - - - - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 7], $V1 = [1, 13], $V2 = [1, 14], $V3 = [1, 15], $V4 = [1, 19], $V5 = [1, 16], $V6 = [1, 17], $V7 = [1, 18], $V8 = [8, 30], $V9 = [8, 21, 28, 29, 30, 31, 32, 40, 44, 47], $Va = [1, 23], $Vb = [1, 24], $Vc = [8, 15, 16, 21, 28, 29, 30, 31, 32, 40, 44, 47], $Vd = [8, 15, 16, 21, 27, 28, 29, 30, 31, 32, 40, 44, 47], $Ve = [1, 49]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "spaceLines": 3, "SPACELINE": 4, "NL": 5, "separator": 6, "SPACE": 7, "EOF": 8, "start": 9, "BLOCK_DIAGRAM_KEY": 10, "document": 11, "stop": 12, "statement": 13, "link": 14, "LINK": 15, "START_LINK": 16, "LINK_LABEL": 17, "STR": 18, "nodeStatement": 19, "columnsStatement": 20, "SPACE_BLOCK": 21, "blockStatement": 22, "classDefStatement": 23, "cssClassStatement": 24, "styleStatement": 25, "node": 26, "SIZE": 27, "COLUMNS": 28, "id-block": 29, "end": 30, "block": 31, "NODE_ID": 32, "nodeShapeNLabel": 33, "dirList": 34, "DIR": 35, "NODE_DSTART": 36, "NODE_DEND": 37, "BLOCK_ARROW_START": 38, "BLOCK_ARROW_END": 39, "classDef": 40, "CLASSDEF_ID": 41, "CLASSDEF_STYLEOPTS": 42, "DEFAULT": 43, "class": 44, "CLASSENTITY_IDS": 45, "STYLECLASS": 46, "style": 47, "STYLE_ENTITY_IDS": 48, "STYLE_DEFINITION_DATA": 49, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 4: "SPACELINE", 5: "NL", 7: "SPACE", 8: "EOF", 10: "BLOCK_DIAGRAM_KEY", 15: "LINK", 16: "START_LINK", 17: "LINK_LABEL", 18: "STR", 21: "SPACE_BLOCK", 27: "SIZE", 28: "COLUMNS", 29: "id-block", 30: "end", 31: "block", 32: "NODE_ID", 35: "DIR", 36: "NODE_DSTART", 37: "NODE_DEND", 38: "BLOCK_ARROW_START", 39: "BLOCK_ARROW_END", 40: "classDef", 41: "CLASSDEF_ID", 42: "CLASSDEF_STYLEOPTS", 43: "DEFAULT", 44: "class", 45: "CLASSENTITY_IDS", 46: "STYLECLASS", 47: "style", 48: "STYLE_ENTITY_IDS", 49: "STYLE_DEFINITION_DATA" }, - productions_: [0, [3, 1], [3, 2], [3, 2], [6, 1], [6, 1], [6, 1], [9, 3], [12, 1], [12, 1], [12, 2], [12, 2], [11, 1], [11, 2], [14, 1], [14, 4], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [19, 3], [19, 2], [19, 1], [20, 1], [22, 4], [22, 3], [26, 1], [26, 2], [34, 1], [34, 2], [33, 3], [33, 4], [23, 3], [23, 3], [24, 3], [25, 3]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 4: - yy.getLogger().debug("Rule: separator (NL) "); - break; - case 5: - yy.getLogger().debug("Rule: separator (Space) "); - break; - case 6: - yy.getLogger().debug("Rule: separator (EOF) "); - break; - case 7: - yy.getLogger().debug("Rule: hierarchy: ", $$[$0 - 1]); - yy.setHierarchy($$[$0 - 1]); - break; - case 8: - yy.getLogger().debug("Stop NL "); - break; - case 9: - yy.getLogger().debug("Stop EOF "); - break; - case 10: - yy.getLogger().debug("Stop NL2 "); - break; - case 11: - yy.getLogger().debug("Stop EOF2 "); - break; - case 12: - yy.getLogger().debug("Rule: statement: ", $$[$0]); - typeof $$[$0].length === "number" ? this.$ = $$[$0] : this.$ = [$$[$0]]; - break; - case 13: - yy.getLogger().debug("Rule: statement #2: ", $$[$0 - 1]); - this.$ = [$$[$0 - 1]].concat($$[$0]); - break; - case 14: - yy.getLogger().debug("Rule: link: ", $$[$0], yytext); - this.$ = { edgeTypeStr: $$[$0], label: "" }; - break; - case 15: - yy.getLogger().debug("Rule: LABEL link: ", $$[$0 - 3], $$[$0 - 1], $$[$0]); - this.$ = { edgeTypeStr: $$[$0], label: $$[$0 - 1] }; - break; - case 18: - const num = parseInt($$[$0]); - const spaceId = yy.generateId(); - this.$ = { id: spaceId, type: "space", label: "", width: num, children: [] }; - break; - case 23: - yy.getLogger().debug("Rule: (nodeStatement link node) ", $$[$0 - 2], $$[$0 - 1], $$[$0], " typestr: ", $$[$0 - 1].edgeTypeStr); - const edgeData = yy.edgeStrToEdgeData($$[$0 - 1].edgeTypeStr); - this.$ = [ - { id: $$[$0 - 2].id, label: $$[$0 - 2].label, type: $$[$0 - 2].type, directions: $$[$0 - 2].directions }, - { id: $$[$0 - 2].id + "-" + $$[$0].id, start: $$[$0 - 2].id, end: $$[$0].id, label: $$[$0 - 1].label, type: "edge", directions: $$[$0].directions, arrowTypeEnd: edgeData, arrowTypeStart: "arrow_open" }, - { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions } - ]; - break; - case 24: - yy.getLogger().debug("Rule: nodeStatement (abc88 node size) ", $$[$0 - 1], $$[$0]); - this.$ = { id: $$[$0 - 1].id, label: $$[$0 - 1].label, type: yy.typeStr2Type($$[$0 - 1].typeStr), directions: $$[$0 - 1].directions, widthInColumns: parseInt($$[$0], 10) }; - break; - case 25: - yy.getLogger().debug("Rule: nodeStatement (node) ", $$[$0]); - this.$ = { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions, widthInColumns: 1 }; - break; - case 26: - yy.getLogger().debug("APA123", this ? this : "na"); - yy.getLogger().debug("COLUMNS: ", $$[$0]); - this.$ = { type: "column-setting", columns: $$[$0] === "auto" ? -1 : parseInt($$[$0]) }; - break; - case 27: - yy.getLogger().debug("Rule: id-block statement : ", $$[$0 - 2], $$[$0 - 1]); - yy.generateId(); - this.$ = { ...$$[$0 - 2], type: "composite", children: $$[$0 - 1] }; - break; - case 28: - yy.getLogger().debug("Rule: blockStatement : ", $$[$0 - 2], $$[$0 - 1], $$[$0]); - const id = yy.generateId(); - this.$ = { id, type: "composite", label: "", children: $$[$0 - 1] }; - break; - case 29: - yy.getLogger().debug("Rule: node (NODE_ID separator): ", $$[$0]); - this.$ = { id: $$[$0] }; - break; - case 30: - yy.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ", $$[$0 - 1], $$[$0]); - this.$ = { id: $$[$0 - 1], label: $$[$0].label, typeStr: $$[$0].typeStr, directions: $$[$0].directions }; - break; - case 31: - yy.getLogger().debug("Rule: dirList: ", $$[$0]); - this.$ = [$$[$0]]; - break; - case 32: - yy.getLogger().debug("Rule: dirList: ", $$[$0 - 1], $$[$0]); - this.$ = [$$[$0 - 1]].concat($$[$0]); - break; - case 33: - yy.getLogger().debug("Rule: nodeShapeNLabel: ", $$[$0 - 2], $$[$0 - 1], $$[$0]); - this.$ = { typeStr: $$[$0 - 2] + $$[$0], label: $$[$0 - 1] }; - break; - case 34: - yy.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ", $$[$0 - 3], $$[$0 - 2], " #3:", $$[$0 - 1], $$[$0]); - this.$ = { typeStr: $$[$0 - 3] + $$[$0], label: $$[$0 - 2], directions: $$[$0 - 1] }; - break; - case 35: - case 36: - this.$ = { type: "classDef", id: $$[$0 - 1].trim(), css: $$[$0].trim() }; - break; - case 37: - this.$ = { type: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; - break; - case 38: - this.$ = { type: "applyStyles", id: $$[$0 - 1].trim(), stylesStr: $$[$0].trim() }; - break; - } - }, - table: [{ 9: 1, 10: [1, 2] }, { 1: [3] }, { 11: 3, 13: 4, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 8: [1, 20] }, o($V8, [2, 12], { 13: 4, 19: 5, 20: 6, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 11: 21, 21: $V0, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }), o($V9, [2, 16], { 14: 22, 15: $Va, 16: $Vb }), o($V9, [2, 17]), o($V9, [2, 18]), o($V9, [2, 19]), o($V9, [2, 20]), o($V9, [2, 21]), o($V9, [2, 22]), o($Vc, [2, 25], { 27: [1, 25] }), o($V9, [2, 26]), { 19: 26, 26: 12, 32: $V4 }, { 11: 27, 13: 4, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 41: [1, 28], 43: [1, 29] }, { 45: [1, 30] }, { 48: [1, 31] }, o($Vd, [2, 29], { 33: 32, 36: [1, 33], 38: [1, 34] }), { 1: [2, 7] }, o($V8, [2, 13]), { 26: 35, 32: $V4 }, { 32: [2, 14] }, { 17: [1, 36] }, o($Vc, [2, 24]), { 11: 37, 13: 4, 14: 22, 15: $Va, 16: $Vb, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 30: [1, 38] }, { 42: [1, 39] }, { 42: [1, 40] }, { 46: [1, 41] }, { 49: [1, 42] }, o($Vd, [2, 30]), { 18: [1, 43] }, { 18: [1, 44] }, o($Vc, [2, 23]), { 18: [1, 45] }, { 30: [1, 46] }, o($V9, [2, 28]), o($V9, [2, 35]), o($V9, [2, 36]), o($V9, [2, 37]), o($V9, [2, 38]), { 37: [1, 47] }, { 34: 48, 35: $Ve }, { 15: [1, 50] }, o($V9, [2, 27]), o($Vd, [2, 33]), { 39: [1, 51] }, { 34: 52, 35: $Ve, 39: [2, 31] }, { 32: [2, 15] }, o($Vd, [2, 34]), { 39: [2, 32] }], - defaultActions: { 20: [2, 7], 23: [2, 14], 50: [2, 15], 52: [2, 32] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: {}, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - return 10; - case 1: - yy.getLogger().debug("Found space-block"); - return 31; - case 2: - yy.getLogger().debug("Found nl-block"); - return 31; - case 3: - yy.getLogger().debug("Found space-block"); - return 29; - case 4: - yy.getLogger().debug(".", yy_.yytext); - break; - case 5: - yy.getLogger().debug("_", yy_.yytext); - break; - case 6: - return 5; - case 7: - yy_.yytext = -1; - return 28; - case 8: - yy_.yytext = yy_.yytext.replace(/columns\s+/, ""); - yy.getLogger().debug("COLUMNS (LEX)", yy_.yytext); - return 28; - case 9: - this.pushState("md_string"); - break; - case 10: - return "MD_STR"; - case 11: - this.popState(); - break; - case 12: - this.pushState("string"); - break; - case 13: - yy.getLogger().debug("LEX: POPPING STR:", yy_.yytext); - this.popState(); - break; - case 14: - yy.getLogger().debug("LEX: STR end:", yy_.yytext); - return "STR"; - case 15: - yy_.yytext = yy_.yytext.replace(/space\:/, ""); - yy.getLogger().debug("SPACE NUM (LEX)", yy_.yytext); - return 21; - case 16: - yy_.yytext = "1"; - yy.getLogger().debug("COLUMNS (LEX)", yy_.yytext); - return 21; - case 17: - return 43; - case 18: - return "LINKSTYLE"; - case 19: - return "INTERPOLATE"; - case 20: - this.pushState("CLASSDEF"); - return 40; - case 21: - this.popState(); - this.pushState("CLASSDEFID"); - return "DEFAULT_CLASSDEF_ID"; - case 22: - this.popState(); - this.pushState("CLASSDEFID"); - return 41; - case 23: - this.popState(); - return 42; - case 24: - this.pushState("CLASS"); - return 44; - case 25: - this.popState(); - this.pushState("CLASS_STYLE"); - return 45; - case 26: - this.popState(); - return 46; - case 27: - this.pushState("STYLE_STMNT"); - return 47; - case 28: - this.popState(); - this.pushState("STYLE_DEFINITION"); - return 48; - case 29: - this.popState(); - return 49; - case 30: - this.pushState("acc_title"); - return "acc_title"; - case 31: - this.popState(); - return "acc_title_value"; - case 32: - this.pushState("acc_descr"); - return "acc_descr"; - case 33: - this.popState(); - return "acc_descr_value"; - case 34: - this.pushState("acc_descr_multiline"); - break; - case 35: - this.popState(); - break; - case 36: - return "acc_descr_multiline_value"; - case 37: - return 30; - case 38: - this.popState(); - yy.getLogger().debug("Lex: (("); - return "NODE_DEND"; - case 39: - this.popState(); - yy.getLogger().debug("Lex: (("); - return "NODE_DEND"; - case 40: - this.popState(); - yy.getLogger().debug("Lex: ))"); - return "NODE_DEND"; - case 41: - this.popState(); - yy.getLogger().debug("Lex: (("); - return "NODE_DEND"; - case 42: - this.popState(); - yy.getLogger().debug("Lex: (("); - return "NODE_DEND"; - case 43: - this.popState(); - yy.getLogger().debug("Lex: (-"); - return "NODE_DEND"; - case 44: - this.popState(); - yy.getLogger().debug("Lex: -)"); - return "NODE_DEND"; - case 45: - this.popState(); - yy.getLogger().debug("Lex: (("); - return "NODE_DEND"; - case 46: - this.popState(); - yy.getLogger().debug("Lex: ]]"); - return "NODE_DEND"; - case 47: - this.popState(); - yy.getLogger().debug("Lex: ("); - return "NODE_DEND"; - case 48: - this.popState(); - yy.getLogger().debug("Lex: ])"); - return "NODE_DEND"; - case 49: - this.popState(); - yy.getLogger().debug("Lex: /]"); - return "NODE_DEND"; - case 50: - this.popState(); - yy.getLogger().debug("Lex: /]"); - return "NODE_DEND"; - case 51: - this.popState(); - yy.getLogger().debug("Lex: )]"); - return "NODE_DEND"; - case 52: - this.popState(); - yy.getLogger().debug("Lex: )"); - return "NODE_DEND"; - case 53: - this.popState(); - yy.getLogger().debug("Lex: ]>"); - return "NODE_DEND"; - case 54: - this.popState(); - yy.getLogger().debug("Lex: ]"); - return "NODE_DEND"; - case 55: - yy.getLogger().debug("Lexa: -)"); - this.pushState("NODE"); - return 36; - case 56: - yy.getLogger().debug("Lexa: (-"); - this.pushState("NODE"); - return 36; - case 57: - yy.getLogger().debug("Lexa: ))"); - this.pushState("NODE"); - return 36; - case 58: - yy.getLogger().debug("Lexa: )"); - this.pushState("NODE"); - return 36; - case 59: - yy.getLogger().debug("Lex: ((("); - this.pushState("NODE"); - return 36; - case 60: - yy.getLogger().debug("Lexa: )"); - this.pushState("NODE"); - return 36; - case 61: - yy.getLogger().debug("Lexa: )"); - this.pushState("NODE"); - return 36; - case 62: - yy.getLogger().debug("Lexa: )"); - this.pushState("NODE"); - return 36; - case 63: - yy.getLogger().debug("Lexc: >"); - this.pushState("NODE"); - return 36; - case 64: - yy.getLogger().debug("Lexa: (["); - this.pushState("NODE"); - return 36; - case 65: - yy.getLogger().debug("Lexa: )"); - this.pushState("NODE"); - return 36; - case 66: - this.pushState("NODE"); - return 36; - case 67: - this.pushState("NODE"); - return 36; - case 68: - this.pushState("NODE"); - return 36; - case 69: - this.pushState("NODE"); - return 36; - case 70: - this.pushState("NODE"); - return 36; - case 71: - this.pushState("NODE"); - return 36; - case 72: - this.pushState("NODE"); - return 36; - case 73: - yy.getLogger().debug("Lexa: ["); - this.pushState("NODE"); - return 36; - case 74: - this.pushState("BLOCK_ARROW"); - yy.getLogger().debug("LEX ARR START"); - return 38; - case 75: - yy.getLogger().debug("Lex: NODE_ID", yy_.yytext); - return 32; - case 76: - yy.getLogger().debug("Lex: EOF", yy_.yytext); - return 8; - case 77: - this.pushState("md_string"); - break; - case 78: - this.pushState("md_string"); - break; - case 79: - return "NODE_DESCR"; - case 80: - this.popState(); - break; - case 81: - yy.getLogger().debug("Lex: Starting string"); - this.pushState("string"); - break; - case 82: - yy.getLogger().debug("LEX ARR: Starting string"); - this.pushState("string"); - break; - case 83: - yy.getLogger().debug("LEX: NODE_DESCR:", yy_.yytext); - return "NODE_DESCR"; - case 84: - yy.getLogger().debug("LEX POPPING"); - this.popState(); - break; - case 85: - yy.getLogger().debug("Lex: =>BAE"); - this.pushState("ARROW_DIR"); - break; - case 86: - yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); - yy.getLogger().debug("Lex (right): dir:", yy_.yytext); - return "DIR"; - case 87: - yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); - yy.getLogger().debug("Lex (left):", yy_.yytext); - return "DIR"; - case 88: - yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); - yy.getLogger().debug("Lex (x):", yy_.yytext); - return "DIR"; - case 89: - yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); - yy.getLogger().debug("Lex (y):", yy_.yytext); - return "DIR"; - case 90: - yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); - yy.getLogger().debug("Lex (up):", yy_.yytext); - return "DIR"; - case 91: - yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); - yy.getLogger().debug("Lex (down):", yy_.yytext); - return "DIR"; - case 92: - yy_.yytext = "]>"; - yy.getLogger().debug("Lex (ARROW_DIR end):", yy_.yytext); - this.popState(); - this.popState(); - return "BLOCK_ARROW_END"; - case 93: - yy.getLogger().debug("Lex: LINK", "#" + yy_.yytext + "#"); - return 15; - case 94: - yy.getLogger().debug("Lex: LINK", yy_.yytext); - return 15; - case 95: - yy.getLogger().debug("Lex: LINK", yy_.yytext); - return 15; - case 96: - yy.getLogger().debug("Lex: LINK", yy_.yytext); - return 15; - case 97: - yy.getLogger().debug("Lex: START_LINK", yy_.yytext); - this.pushState("LLABEL"); - return 16; - case 98: - yy.getLogger().debug("Lex: START_LINK", yy_.yytext); - this.pushState("LLABEL"); - return 16; - case 99: - yy.getLogger().debug("Lex: START_LINK", yy_.yytext); - this.pushState("LLABEL"); - return 16; - case 100: - this.pushState("md_string"); - break; - case 101: - yy.getLogger().debug("Lex: Starting string"); - this.pushState("string"); - return "LINK_LABEL"; - case 102: - this.popState(); - yy.getLogger().debug("Lex: LINK", "#" + yy_.yytext + "#"); - return 15; - case 103: - this.popState(); - yy.getLogger().debug("Lex: LINK", yy_.yytext); - return 15; - case 104: - this.popState(); - yy.getLogger().debug("Lex: LINK", yy_.yytext); - return 15; - case 105: - yy.getLogger().debug("Lex: COLON", yy_.yytext); - yy_.yytext = yy_.yytext.slice(1); - return 27; - } - }, - rules: [/^(?:block-beta\b)/, /^(?:block\s+)/, /^(?:block\n+)/, /^(?:block:)/, /^(?:[\s]+)/, /^(?:[\n]+)/, /^(?:((\u000D\u000A)|(\u000A)))/, /^(?:columns\s+auto\b)/, /^(?:columns\s+[\d]+)/, /^(?:["][`])/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:space[:]\d+)/, /^(?:space\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\s+)/, /^(?:DEFAULT\s+)/, /^(?:\w+\s+)/, /^(?:[^\n]*)/, /^(?:class\s+)/, /^(?:(\w+)+((,\s*\w+)*))/, /^(?:[^\n]*)/, /^(?:style\s+)/, /^(?:(\w+)+((,\s*\w+)*))/, /^(?:[^\n]*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:end\b\s*)/, /^(?:\(\(\()/, /^(?:\)\)\))/, /^(?:[\)]\))/, /^(?:\}\})/, /^(?:\})/, /^(?:\(-)/, /^(?:-\))/, /^(?:\(\()/, /^(?:\]\])/, /^(?:\()/, /^(?:\]\))/, /^(?:\\\])/, /^(?:\/\])/, /^(?:\)\])/, /^(?:[\)])/, /^(?:\]>)/, /^(?:[\]])/, /^(?:-\))/, /^(?:\(-)/, /^(?:\)\))/, /^(?:\))/, /^(?:\(\(\()/, /^(?:\(\()/, /^(?:\{\{)/, /^(?:\{)/, /^(?:>)/, /^(?:\(\[)/, /^(?:\()/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\[\\)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:\[)/, /^(?:<\[)/, /^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/, /^(?:$)/, /^(?:["][`])/, /^(?:["][`])/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["])/, /^(?:["])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:\]>\s*\()/, /^(?:,?\s*right\s*)/, /^(?:,?\s*left\s*)/, /^(?:,?\s*x\s*)/, /^(?:,?\s*y\s*)/, /^(?:,?\s*up\s*)/, /^(?:,?\s*down\s*)/, /^(?:\)\s*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*~~[\~]+\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:["][`])/, /^(?:["])/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?::\d+)/], - conditions: { "STYLE_DEFINITION": { "rules": [29], "inclusive": false }, "STYLE_STMNT": { "rules": [28], "inclusive": false }, "CLASSDEFID": { "rules": [23], "inclusive": false }, "CLASSDEF": { "rules": [21, 22], "inclusive": false }, "CLASS_STYLE": { "rules": [26], "inclusive": false }, "CLASS": { "rules": [25], "inclusive": false }, "LLABEL": { "rules": [100, 101, 102, 103, 104], "inclusive": false }, "ARROW_DIR": { "rules": [86, 87, 88, 89, 90, 91, 92], "inclusive": false }, "BLOCK_ARROW": { "rules": [77, 82, 85], "inclusive": false }, "NODE": { "rules": [38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 78, 81], "inclusive": false }, "md_string": { "rules": [10, 11, 79, 80], "inclusive": false }, "space": { "rules": [], "inclusive": false }, "string": { "rules": [13, 14, 83, 84], "inclusive": false }, "acc_descr_multiline": { "rules": [35, 36], "inclusive": false }, "acc_descr": { "rules": [33], "inclusive": false }, "acc_title": { "rules": [31], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 15, 16, 17, 18, 19, 20, 24, 27, 30, 32, 34, 37, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 93, 94, 95, 96, 97, 98, 99, 105], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -let blockDatabase = {}; -let edgeList = []; -let edgeCount = {}; -const COLOR_KEYWORD = "color"; -const FILL_KEYWORD = "fill"; -const BG_FILL = "bgFill"; -const STYLECLASS_SEP = ","; -const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.c)(); -let classes = {}; -const sanitizeText = (txt) => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(txt, config); -const addStyleClass = function(id, styleAttributes = "") { - if (classes[id] === void 0) { - classes[id] = { id, styles: [], textStyles: [] }; - } - const foundClass = classes[id]; - if (styleAttributes !== void 0 && styleAttributes !== null) { - styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { - const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); - if (attrib.match(COLOR_KEYWORD)) { - const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); - const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); - foundClass.textStyles.push(newStyle2); - } - foundClass.styles.push(fixedAttrib); - }); - } -}; -const addStyle2Node = function(id, styles = "") { - const foundBlock = blockDatabase[id]; - if (styles !== void 0 && styles !== null) { - foundBlock.styles = styles.split(STYLECLASS_SEP); - } -}; -const setCssClass = function(itemIds, cssClassName) { - itemIds.split(",").forEach(function(id) { - let foundBlock = blockDatabase[id]; - if (foundBlock === void 0) { - const trimmedId = id.trim(); - blockDatabase[trimmedId] = { id: trimmedId, type: "na", children: [] }; - foundBlock = blockDatabase[trimmedId]; - } - if (!foundBlock.classes) { - foundBlock.classes = []; - } - foundBlock.classes.push(cssClassName); - }); -}; -const populateBlockDatabase = (_blockList, parent) => { - const blockList = _blockList.flat(); - const children = []; - for (const block of blockList) { - if (block.label) { - block.label = sanitizeText(block.label); - } - if (block.type === "classDef") { - addStyleClass(block.id, block.css); - continue; - } - if (block.type === "applyClass") { - setCssClass(block.id, (block == null ? void 0 : block.styleClass) || ""); - continue; - } - if (block.type === "applyStyles") { - if (block == null ? void 0 : block.stylesStr) { - addStyle2Node(block.id, block == null ? void 0 : block.stylesStr); - } - continue; - } - if (block.type === "column-setting") { - parent.columns = block.columns || -1; - } else if (block.type === "edge") { - if (edgeCount[block.id]) { - edgeCount[block.id]++; - } else { - edgeCount[block.id] = 1; - } - block.id = edgeCount[block.id] + "-" + block.id; - edgeList.push(block); - } else { - if (!block.label) { - if (block.type === "composite") { - block.label = ""; - } else { - block.label = block.id; - } - } - const newBlock = !blockDatabase[block.id]; - if (newBlock) { - blockDatabase[block.id] = block; - } else { - if (block.type !== "na") { - blockDatabase[block.id].type = block.type; - } - if (block.label !== block.id) { - blockDatabase[block.id].label = block.label; - } - } - if (block.children) { - populateBlockDatabase(block.children, block); - } - if (block.type === "space") { - const w = block.width || 1; - for (let j = 0; j < w; j++) { - const newBlock2 = (0,lodash_es_clone_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)(block); - newBlock2.id = newBlock2.id + "-" + j; - blockDatabase[newBlock2.id] = newBlock2; - children.push(newBlock2); - } - } else if (newBlock) { - children.push(block); - } - } - } - parent.children = children; -}; -let blocks = []; -let rootBlock = { id: "root", type: "composite", children: [], columns: -1 }; -const clear = () => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Clear called"); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.v)(); - rootBlock = { id: "root", type: "composite", children: [], columns: -1 }; - blockDatabase = { root: rootBlock }; - blocks = []; - classes = {}; - edgeList = []; - edgeCount = {}; -}; -function typeStr2Type(typeStr) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("typeStr2Type", typeStr); - switch (typeStr) { - case "[]": - return "square"; - case "()": - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("we have a round"); - return "round"; - case "(())": - return "circle"; - case ">]": - return "rect_left_inv_arrow"; - case "{}": - return "diamond"; - case "{{}}": - return "hexagon"; - case "([])": - return "stadium"; - case "[[]]": - return "subroutine"; - case "[()]": - return "cylinder"; - case "((()))": - return "doublecircle"; - case "[//]": - return "lean_right"; - case "[\\\\]": - return "lean_left"; - case "[/\\]": - return "trapezoid"; - case "[\\/]": - return "inv_trapezoid"; - case "<[]>": - return "block_arrow"; - default: - return "na"; - } -} -function edgeTypeStr2Type(typeStr) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("typeStr2Type", typeStr); - switch (typeStr) { - case "==": - return "thick"; - default: - return "normal"; - } -} -function edgeStrToEdgeData(typeStr) { - switch (typeStr.trim()) { - case "--x": - return "arrow_cross"; - case "--o": - return "arrow_circle"; - default: - return "arrow_point"; - } -} -let cnt = 0; -const generateId = () => { - cnt++; - return "id-" + Math.random().toString(36).substr(2, 12) + "-" + cnt; -}; -const setHierarchy = (block) => { - rootBlock.children = block; - populateBlockDatabase(block, rootBlock); - blocks = rootBlock.children; -}; -const getColumns = (blockId) => { - const block = blockDatabase[blockId]; - if (!block) { - return -1; - } - if (block.columns) { - return block.columns; - } - if (!block.children) { - return -1; - } - return block.children.length; -}; -const getBlocksFlat = () => { - return [...Object.values(blockDatabase)]; -}; -const getBlocks = () => { - return blocks || []; -}; -const getEdges = () => { - return edgeList; -}; -const getBlock = (id) => { - return blockDatabase[id]; -}; -const setBlock = (block) => { - blockDatabase[block.id] = block; -}; -const getLogger = () => console; -const getClasses$1 = function() { - return classes; -}; -const db = { - getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)().block, - typeStr2Type, - edgeTypeStr2Type, - edgeStrToEdgeData, - getLogger, - getBlocksFlat, - getBlocks, - getEdges, - setHierarchy, - getBlock, - setBlock, - getColumns, - getClasses: getClasses$1, - clear, - generateId -}; -const db$1 = db; -const fade = (color, opacity) => { - const channel = khroma__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A; - const r = channel(color, "r"); - const g = channel(color, "g"); - const b = channel(color, "b"); - return khroma__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A(r, g, b, opacity); -}; -const getStyles = (options) => `.label { - font-family: ${options.fontFamily}; - color: ${options.nodeTextColor || options.textColor}; - } - .cluster-label text { - fill: ${options.titleColor}; - } - .cluster-label span,p { - color: ${options.titleColor}; - } - - - - .label text,span,p { - fill: ${options.nodeTextColor || options.textColor}; - color: ${options.nodeTextColor || options.textColor}; - } - - .node rect, - .node circle, - .node ellipse, - .node polygon, - .node path { - fill: ${options.mainBkg}; - stroke: ${options.nodeBorder}; - stroke-width: 1px; - } - .flowchart-label text { - text-anchor: middle; - } - // .flowchart-label .text-outer-tspan { - // text-anchor: middle; - // } - // .flowchart-label .text-inner-tspan { - // text-anchor: start; - // } - - .node .label { - text-align: center; - } - .node.clickable { - cursor: pointer; - } - - .arrowheadPath { - fill: ${options.arrowheadColor}; - } - - .edgePath .path { - stroke: ${options.lineColor}; - stroke-width: 2.0px; - } - - .flowchart-link { - stroke: ${options.lineColor}; - fill: none; - } - - .edgeLabel { - background-color: ${options.edgeLabelBackground}; - rect { - opacity: 0.5; - background-color: ${options.edgeLabelBackground}; - fill: ${options.edgeLabelBackground}; - } - text-align: center; - } - - /* For html labels only */ - .labelBkg { - background-color: ${fade(options.edgeLabelBackground, 0.5)}; - // background-color: - } - - .node .cluster { - // fill: ${fade(options.mainBkg, 0.5)}; - fill: ${fade(options.clusterBkg, 0.5)}; - stroke: ${fade(options.clusterBorder, 0.2)}; - box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; - stroke-width: 1px; - } - - .cluster text { - fill: ${options.titleColor}; - } - - .cluster span,p { - color: ${options.titleColor}; - } - /* .cluster div { - color: ${options.titleColor}; - } */ - - div.mermaidTooltip { - position: absolute; - text-align: center; - max-width: 200px; - padding: 2px; - font-family: ${options.fontFamily}; - font-size: 12px; - background: ${options.tertiaryColor}; - border: 1px solid ${options.border2}; - border-radius: 2px; - pointer-events: none; - z-index: 100; - } - - .flowchartTitleText { - text-anchor: middle; - font-size: 18px; - fill: ${options.textColor}; - } -`; -const flowStyles = getStyles; -function getNodeFromBlock(block, db2, positioned = false) { - var _a2, _b2, _c; - const vertex = block; - let classStr = "default"; - if ((((_a2 = vertex == null ? void 0 : vertex.classes) == null ? void 0 : _a2.length) || 0) > 0) { - classStr = ((vertex == null ? void 0 : vertex.classes) || []).join(" "); - } - classStr = classStr + " flowchart-label"; - let radius = 0; - let shape = ""; - let padding2; - switch (vertex.type) { - case "round": - radius = 5; - shape = "rect"; - break; - case "composite": - radius = 0; - shape = "composite"; - padding2 = 0; - break; - case "square": - shape = "rect"; - break; - case "diamond": - shape = "question"; - break; - case "hexagon": - shape = "hexagon"; - break; - case "block_arrow": - shape = "block_arrow"; - break; - case "odd": - shape = "rect_left_inv_arrow"; - break; - case "lean_right": - shape = "lean_right"; - break; - case "lean_left": - shape = "lean_left"; - break; - case "trapezoid": - shape = "trapezoid"; - break; - case "inv_trapezoid": - shape = "inv_trapezoid"; - break; - case "rect_left_inv_arrow": - shape = "rect_left_inv_arrow"; - break; - case "circle": - shape = "circle"; - break; - case "ellipse": - shape = "ellipse"; - break; - case "stadium": - shape = "stadium"; - break; - case "subroutine": - shape = "subroutine"; - break; - case "cylinder": - shape = "cylinder"; - break; - case "group": - shape = "rect"; - break; - case "doublecircle": - shape = "doublecircle"; - break; - default: - shape = "rect"; - } - const styles = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.k)((vertex == null ? void 0 : vertex.styles) || []); - const vertexText = vertex.label; - const bounds = vertex.size || { width: 0, height: 0, x: 0, y: 0 }; - const node = { - labelStyle: styles.labelStyle, - shape, - labelText: vertexText, - rx: radius, - ry: radius, - class: classStr, - style: styles.style, - id: vertex.id, - directions: vertex.directions, - width: bounds.width, - height: bounds.height, - x: bounds.x, - y: bounds.y, - positioned, - intersect: void 0, - type: vertex.type, - padding: padding2 ?? (((_c = (_b2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)()) == null ? void 0 : _b2.block) == null ? void 0 : _c.padding) || 0) - }; - return node; -} -async function calculateBlockSize(elem, block, db2) { - const node = getNodeFromBlock(block, db2, false); - if (node.type === "group") { - return; - } - const nodeEl = await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.e)(elem, node); - const boundingBox = nodeEl.node().getBBox(); - const obj = db2.getBlock(node.id); - obj.size = { width: boundingBox.width, height: boundingBox.height, x: 0, y: 0, node: nodeEl }; - db2.setBlock(obj); - nodeEl.remove(); -} -async function insertBlockPositioned(elem, block, db2) { - const node = getNodeFromBlock(block, db2, true); - const obj = db2.getBlock(node.id); - if (obj.type !== "space") { - await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.e)(elem, node); - block.intersect = node == null ? void 0 : node.intersect; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.p)(node); - } -} -async function performOperations(elem, blocks2, db2, operation) { - for (const block of blocks2) { - await operation(elem, block, db2); - if (block.children) { - await performOperations(elem, block.children, db2, operation); - } - } -} -async function calculateBlockSizes(elem, blocks2, db2) { - await performOperations(elem, blocks2, db2, calculateBlockSize); -} -async function insertBlocks(elem, blocks2, db2) { - await performOperations(elem, blocks2, db2, insertBlockPositioned); -} -async function insertEdges(elem, edges, blocks2, db2, id) { - const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .T({ - multigraph: true, - compound: true - }); - g.setGraph({ - rankdir: "TB", - nodesep: 10, - ranksep: 10, - marginx: 8, - marginy: 8 - }); - for (const block of blocks2) { - if (block.size) { - g.setNode(block.id, { - width: block.size.width, - height: block.size.height, - intersect: block.intersect - }); - } - } - for (const edge of edges) { - if (edge.start && edge.end) { - const startBlock = db2.getBlock(edge.start); - const endBlock = db2.getBlock(edge.end); - if ((startBlock == null ? void 0 : startBlock.size) && (endBlock == null ? void 0 : endBlock.size)) { - const start = startBlock.size; - const end = endBlock.size; - const points = [ - { x: start.x, y: start.y }, - { x: start.x + (end.x - start.x) / 2, y: start.y + (end.y - start.y) / 2 }, - { x: end.x, y: end.y } - ]; - await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.h)( - elem, - { v: edge.start, w: edge.end, name: edge.id }, - { - ...edge, - arrowTypeEnd: edge.arrowTypeEnd, - arrowTypeStart: edge.arrowTypeStart, - points, - classes: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1" - }, - void 0, - "block", - g, - id - ); - if (edge.label) { - await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.f)(elem, { - ...edge, - label: edge.label, - labelStyle: "stroke: #333; stroke-width: 1.5px;fill:none;", - arrowTypeEnd: edge.arrowTypeEnd, - arrowTypeStart: edge.arrowTypeStart, - points, - classes: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1" - }); - await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.j)( - { ...edge, x: points[1].x, y: points[1].y }, - { - originalPath: points - } - ); - } - } - } - } -} -const padding = ((_b = (_a = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.c)()) == null ? void 0 : _a.block) == null ? void 0 : _b.padding) || 8; -function calculateBlockPosition(columns, position) { - if (columns === 0 || !Number.isInteger(columns)) { - throw new Error("Columns must be an integer !== 0."); - } - if (position < 0 || !Number.isInteger(position)) { - throw new Error("Position must be a non-negative integer." + position); - } - if (columns < 0) { - return { px: position, py: 0 }; - } - if (columns === 1) { - return { px: 0, py: position }; - } - const px = position % columns; - const py = Math.floor(position / columns); - return { px, py }; -} -const getMaxChildSize = (block) => { - let maxWidth = 0; - let maxHeight = 0; - for (const child of block.children) { - const { width, height, x, y } = child.size || { width: 0, height: 0, x: 0, y: 0 }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( - "getMaxChildSize abc95 child:", - child.id, - "width:", - width, - "height:", - height, - "x:", - x, - "y:", - y, - child.type - ); - if (child.type === "space") { - continue; - } - if (width > maxWidth) { - maxWidth = width / (block.widthInColumns || 1); - } - if (height > maxHeight) { - maxHeight = height; - } - } - return { width: maxWidth, height: maxHeight }; -}; -function setBlockSizes(block, db2, siblingWidth = 0, siblingHeight = 0) { - var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( - "setBlockSizes abc95 (start)", - block.id, - (_a2 = block == null ? void 0 : block.size) == null ? void 0 : _a2.x, - "block width =", - block == null ? void 0 : block.size, - "sieblingWidth", - siblingWidth - ); - if (!((_b2 = block == null ? void 0 : block.size) == null ? void 0 : _b2.width)) { - block.size = { - width: siblingWidth, - height: siblingHeight, - x: 0, - y: 0 - }; - } - let maxWidth = 0; - let maxHeight = 0; - if (((_c = block.children) == null ? void 0 : _c.length) > 0) { - for (const child of block.children) { - setBlockSizes(child, db2); - } - const childSize = getMaxChildSize(block); - maxWidth = childSize.width; - maxHeight = childSize.height; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("setBlockSizes abc95 maxWidth of", block.id, ":s children is ", maxWidth, maxHeight); - for (const child of block.children) { - if (child.size) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( - `abc95 Setting size of children of ${block.id} id=${child.id} ${maxWidth} ${maxHeight} ${child.size}` - ); - child.size.width = maxWidth * (child.widthInColumns || 1) + padding * ((child.widthInColumns || 1) - 1); - child.size.height = maxHeight; - child.size.x = 0; - child.size.y = 0; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( - `abc95 updating size of ${block.id} children child:${child.id} maxWidth:${maxWidth} maxHeight:${maxHeight}` - ); - } - } - for (const child of block.children) { - setBlockSizes(child, db2, maxWidth, maxHeight); - } - const columns = block.columns || -1; - let numItems = 0; - for (const child of block.children) { - numItems += child.widthInColumns || 1; - } - let xSize = block.children.length; - if (columns > 0 && columns < numItems) { - xSize = columns; - } - block.widthInColumns || 1; - const ySize = Math.ceil(numItems / xSize); - let width = xSize * (maxWidth + padding) + padding; - let height = ySize * (maxHeight + padding) + padding; - if (width < siblingWidth) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( - `Detected to small siebling: abc95 ${block.id} sieblingWidth ${siblingWidth} sieblingHeight ${siblingHeight} width ${width}` - ); - width = siblingWidth; - height = siblingHeight; - const childWidth = (siblingWidth - xSize * padding - padding) / xSize; - const childHeight = (siblingHeight - ySize * padding - padding) / ySize; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Size indata abc88", block.id, "childWidth", childWidth, "maxWidth", maxWidth); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Size indata abc88", block.id, "childHeight", childHeight, "maxHeight", maxHeight); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Size indata abc88 xSize", xSize, "padding", padding); - for (const child of block.children) { - if (child.size) { - child.size.width = childWidth; - child.size.height = childHeight; - child.size.x = 0; - child.size.y = 0; - } - } - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( - `abc95 (finale calc) ${block.id} xSize ${xSize} ySize ${ySize} columns ${columns}${block.children.length} width=${Math.max(width, ((_d = block.size) == null ? void 0 : _d.width) || 0)}` - ); - if (width < (((_e = block == null ? void 0 : block.size) == null ? void 0 : _e.width) || 0)) { - width = ((_f = block == null ? void 0 : block.size) == null ? void 0 : _f.width) || 0; - const num = columns > 0 ? Math.min(block.children.length, columns) : block.children.length; - if (num > 0) { - const childWidth = (width - num * padding - padding) / num; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("abc95 (growing to fit) width", block.id, width, (_g = block.size) == null ? void 0 : _g.width, childWidth); - for (const child of block.children) { - if (child.size) { - child.size.width = childWidth; - } - } - } - } - block.size = { - width, - height, - x: 0, - y: 0 - }; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( - "setBlockSizes abc94 (done)", - block.id, - (_h = block == null ? void 0 : block.size) == null ? void 0 : _h.x, - (_i = block == null ? void 0 : block.size) == null ? void 0 : _i.width, - (_j = block == null ? void 0 : block.size) == null ? void 0 : _j.y, - (_k = block == null ? void 0 : block.size) == null ? void 0 : _k.height - ); -} -function layoutBlocks(block, db2) { - var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( - `abc85 layout blocks (=>layoutBlocks) ${block.id} x: ${(_a2 = block == null ? void 0 : block.size) == null ? void 0 : _a2.x} y: ${(_b2 = block == null ? void 0 : block.size) == null ? void 0 : _b2.y} width: ${(_c = block == null ? void 0 : block.size) == null ? void 0 : _c.width}` - ); - const columns = block.columns || -1; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("layoutBlocks columns abc95", block.id, "=>", columns, block); - if (block.children && // find max width of children - block.children.length > 0) { - const width = ((_e = (_d = block == null ? void 0 : block.children[0]) == null ? void 0 : _d.size) == null ? void 0 : _e.width) || 0; - const widthOfChildren = block.children.length * width + (block.children.length - 1) * padding; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("widthOfChildren 88", widthOfChildren, "posX"); - let columnPos = 0; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("abc91 block?.size?.x", block.id, (_f = block == null ? void 0 : block.size) == null ? void 0 : _f.x); - let startingPosX = ((_g = block == null ? void 0 : block.size) == null ? void 0 : _g.x) ? ((_h = block == null ? void 0 : block.size) == null ? void 0 : _h.x) + (-((_i = block == null ? void 0 : block.size) == null ? void 0 : _i.width) / 2 || 0) : -padding; - let rowPos = 0; - for (const child of block.children) { - const parent = block; - if (!child.size) { - continue; - } - const { width: width2, height } = child.size; - const { px, py } = calculateBlockPosition(columns, columnPos); - if (py != rowPos) { - rowPos = py; - startingPosX = ((_j = block == null ? void 0 : block.size) == null ? void 0 : _j.x) ? ((_k = block == null ? void 0 : block.size) == null ? void 0 : _k.x) + (-((_l = block == null ? void 0 : block.size) == null ? void 0 : _l.width) / 2 || 0) : -padding; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("New row in layout for block", block.id, " and child ", child.id, rowPos); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( - `abc89 layout blocks (child) id: ${child.id} Pos: ${columnPos} (px, py) ${px},${py} (${(_m = parent == null ? void 0 : parent.size) == null ? void 0 : _m.x},${(_n = parent == null ? void 0 : parent.size) == null ? void 0 : _n.y}) parent: ${parent.id} width: ${width2}${padding}` - ); - if (parent.size) { - const halfWidth = width2 / 2; - child.size.x = startingPosX + padding + halfWidth; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( - `abc91 layout blocks (calc) px, pyid:${child.id} startingPos=X${startingPosX} new startingPosX${child.size.x} ${halfWidth} padding=${padding} width=${width2} halfWidth=${halfWidth} => x:${child.size.x} y:${child.size.y} ${child.widthInColumns} (width * (child?.w || 1)) / 2 ${width2 * ((child == null ? void 0 : child.widthInColumns) || 1) / 2}` - ); - startingPosX = child.size.x + halfWidth; - child.size.y = parent.size.y - parent.size.height / 2 + py * (height + padding) + height / 2 + padding; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( - `abc88 layout blocks (calc) px, pyid:${child.id}startingPosX${startingPosX}${padding}${halfWidth}=>x:${child.size.x}y:${child.size.y}${child.widthInColumns}(width * (child?.w || 1)) / 2${width2 * ((child == null ? void 0 : child.widthInColumns) || 1) / 2}` - ); - } - if (child.children) { - layoutBlocks(child); - } - columnPos += (child == null ? void 0 : child.widthInColumns) || 1; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("abc88 columnsPos", child, columnPos); - } - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( - `layout blocks (<==layoutBlocks) ${block.id} x: ${(_o = block == null ? void 0 : block.size) == null ? void 0 : _o.x} y: ${(_p = block == null ? void 0 : block.size) == null ? void 0 : _p.y} width: ${(_q = block == null ? void 0 : block.size) == null ? void 0 : _q.width}` - ); -} -function findBounds(block, { minX, minY, maxX, maxY } = { minX: 0, minY: 0, maxX: 0, maxY: 0 }) { - if (block.size && block.id !== "root") { - const { x, y, width, height } = block.size; - if (x - width / 2 < minX) { - minX = x - width / 2; - } - if (y - height / 2 < minY) { - minY = y - height / 2; - } - if (x + width / 2 > maxX) { - maxX = x + width / 2; - } - if (y + height / 2 > maxY) { - maxY = y + height / 2; - } - } - if (block.children) { - for (const child of block.children) { - ({ minX, minY, maxX, maxY } = findBounds(child, { minX, minY, maxX, maxY })); - } - } - return { minX, minY, maxX, maxY }; -} -function layout(db2) { - const root = db2.getBlock("root"); - if (!root) { - return; - } - setBlockSizes(root, db2, 0, 0); - layoutBlocks(root); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("getBlocks", JSON.stringify(root, null, 2)); - const { minX, minY, maxX, maxY } = findBounds(root); - const height = maxY - minY; - const width = maxX - minX; - return { x: minX, y: minY, width, height }; -} -const getClasses = function(text, diagObj) { - return diagObj.db.getClasses(); -}; -const draw = async function(text, id, _version, diagObj) { - const { securityLevel, block: conf } = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)(); - const db2 = diagObj.db; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("body"); - const svg = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)(`[id="${id}"]`); - const markers = ["point", "circle", "cross"]; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_9__.a)(svg, markers, diagObj.type, id); - const bl = db2.getBlocks(); - const blArr = db2.getBlocksFlat(); - const edges = db2.getEdges(); - const nodes = svg.insert("g").attr("class", "block"); - await calculateBlockSizes(nodes, bl, db2); - const bounds = layout(db2); - await insertBlocks(nodes, bl, db2); - await insertEdges(nodes, edges, blArr, db2, id); - if (bounds) { - const bounds2 = bounds; - const magicFactor = Math.max(1, Math.round(0.125 * (bounds2.width / bounds2.height))); - const height = bounds2.height + magicFactor + 10; - const width = bounds2.width + 10; - const { useMaxWidth } = conf; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.i)(svg, height, width, !!useMaxWidth); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Here Bounds", bounds, bounds2); - svg.attr( - "viewBox", - `${bounds2.x - 5} ${bounds2.y - 5} ${bounds2.width + 10} ${bounds2.height + 10}` - ); - } - (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .scaleOrdinal */ .UMr)(d3__WEBPACK_IMPORTED_MODULE_1__/* .schemeTableau10 */ .zt); -}; -const renderer = { - draw, - getClasses -}; -const diagram = { - parser: parser$1, - db: db$1, - renderer, - styles: flowStyles -}; - - - -/***/ }), - -/***/ 18897: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - a: () => (/* binding */ createText), - c: () => (/* binding */ computeDimensionOfText) -}); - -// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -var constructs_namespaceObject = {}; -__webpack_require__.r(constructs_namespaceObject); -__webpack_require__.d(constructs_namespaceObject, { - attentionMarkers: () => (attentionMarkers), - contentInitial: () => (contentInitial), - disable: () => (disable), - document: () => (constructs_document), - flow: () => (constructs_flow), - flowInitial: () => (flowInitial), - insideSpan: () => (insideSpan), - string: () => (constructs_string), - text: () => (constructs_text) -}); - -// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules -var mermaid_6dc72991 = __webpack_require__(99702); -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js -/** - * @typedef {import('mdast').Root|import('mdast').Content} Node - * - * @typedef Options - * Configuration (optional). - * @property {boolean | null | undefined} [includeImageAlt=true] - * Whether to use `alt` for `image`s. - * @property {boolean | null | undefined} [includeHtml=true] - * Whether to use `value` of HTML. - */ - -/** @type {Options} */ -const emptyOptions = {} - -/** - * Get the text content of a node or list of nodes. - * - * Prefers the node’s plain-text fields, otherwise serializes its children, - * and if the given value is an array, serialize the nodes in it. - * - * @param {unknown} value - * Thing to serialize, typically `Node`. - * @param {Options | null | undefined} [options] - * Configuration (optional). - * @returns {string} - * Serialized `value`. - */ -function lib_toString(value, options) { - const settings = options || emptyOptions - const includeImageAlt = - typeof settings.includeImageAlt === 'boolean' - ? settings.includeImageAlt - : true - const includeHtml = - typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true - - return one(value, includeImageAlt, includeHtml) -} - -/** - * One node or several nodes. - * - * @param {unknown} value - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized node. - */ -function one(value, includeImageAlt, includeHtml) { - if (node(value)) { - if ('value' in value) { - return value.type === 'html' && !includeHtml ? '' : value.value - } - - if (includeImageAlt && 'alt' in value && value.alt) { - return value.alt - } - - if ('children' in value) { - return lib_all(value.children, includeImageAlt, includeHtml) - } - } - - if (Array.isArray(value)) { - return lib_all(value, includeImageAlt, includeHtml) - } - - return '' -} - -/** - * Serialize a list of nodes. - * - * @param {Array} values - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized nodes. - */ -function lib_all(values, includeImageAlt, includeHtml) { - /** @type {Array} */ - const result = [] - let index = -1 - - while (++index < values.length) { - result[index] = one(values[index], includeImageAlt, includeHtml) - } - - return result.join('') -} - -/** - * Check if `value` looks like a node. - * - * @param {unknown} value - * Thing. - * @returns {value is Node} - * Whether `value` is a node. - */ -function node(value) { - return Boolean(value && typeof value === 'object') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array} items - * Items to inject into `list`. - * @returns {void} - * Nothing. - */ -function splice(list, start, remove, items) { - const end = list.length - let chunkStart = 0 - /** @type {Array} */ - let parameters - - // Make start between zero and `end` (included). - if (start < 0) { - start = -start > end ? 0 : end + start - } else { - start = start > end ? end : start - } - remove = remove > 0 ? remove : 0 - - // No need to chunk the items if there’s only a couple (10k) items. - if (items.length < 10000) { - parameters = Array.from(items) - parameters.unshift(start, remove) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - } else { - // Delete `remove` items starting from `start` - if (remove) list.splice(start, remove) - - // Insert the items in chunks to not cause stack overflows. - while (chunkStart < items.length) { - parameters = items.slice(chunkStart, chunkStart + 10000) - parameters.unshift(start, 0) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - chunkStart += 10000 - start += 10000 - } - } -} - -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {Array} items - * Items to add to `list`. - * @returns {Array} - * Either `list` or `items`. - */ -function push(list, items) { - if (list.length > 0) { - splice(list, list.length, 0, items) - return list - } - return items -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - * @typedef {import('micromark-util-types').Handles} Handles - * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension - * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension - */ - - - -const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty - -/** - * Combine multiple syntax extensions into one. - * - * @param {Array} extensions - * List of syntax extensions. - * @returns {NormalizedExtension} - * A single combined extension. - */ -function combineExtensions(extensions) { - /** @type {NormalizedExtension} */ - const all = {} - let index = -1 - - while (++index < extensions.length) { - syntaxExtension(all, extensions[index]) - } - - return all -} - -/** - * Merge `extension` into `all`. - * - * @param {NormalizedExtension} all - * Extension to merge into. - * @param {Extension} extension - * Extension to merge. - * @returns {void} - */ -function syntaxExtension(all, extension) { - /** @type {keyof Extension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - /** @type {Record} */ - const left = maybe || (all[hook] = {}) - /** @type {Record | undefined} */ - const right = extension[hook] - /** @type {string} */ - let code - - if (right) { - for (code in right) { - if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] - const value = right[code] - constructs( - // @ts-expect-error Looks like a list. - left[code], - Array.isArray(value) ? value : value ? [value] : [] - ) - } - } - } -} - -/** - * Merge `list` into `existing` (both lists of constructs). - * Mutates `existing`. - * - * @param {Array} existing - * @param {Array} list - * @returns {void} - */ -function constructs(existing, list) { - let index = -1 - /** @type {Array} */ - const before = [] - - while (++index < list.length) { - // @ts-expect-error Looks like an object. - ;(list[index].add === 'after' ? existing : before).push(list[index]) - } - - splice(existing, 0, 0, before) -} - -/** - * Combine multiple HTML extensions into one. - * - * @param {Array} htmlExtensions - * List of HTML extensions. - * @returns {HtmlExtension} - * A single combined HTML extension. - */ -function combineHtmlExtensions(htmlExtensions) { - /** @type {HtmlExtension} */ - const handlers = {} - let index = -1 - - while (++index < htmlExtensions.length) { - htmlExtension(handlers, htmlExtensions[index]) - } - - return handlers -} - -/** - * Merge `extension` into `all`. - * - * @param {HtmlExtension} all - * Extension to merge into. - * @param {HtmlExtension} extension - * Extension to merge. - * @returns {void} - */ -function htmlExtension(all, extension) { - /** @type {keyof HtmlExtension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - const left = maybe || (all[hook] = {}) - const right = extension[hook] - /** @type {keyof Handles} */ - let type - - if (right) { - for (type in right) { - // @ts-expect-error assume document vs regular handler are managed correctly. - left[type] = right[type] - } - } - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js -// This module is generated by `script/`. -// -// CommonMark handles attention (emphasis, strong) markers based on what comes -// before or after them. -// One such difference is if those characters are Unicode punctuation. -// This script is generated from the Unicode data. - -/** - * Regular expression that matches a unicode punctuation character. - */ -const unicodePunctuationRegex = - /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - - -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlpha = regexCheck(/[A-Za-z]/) - -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) - -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) - -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function asciiControl(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code !== null && (code < 32 || code === 127) - ) -} - -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiDigit = regexCheck(/\d/) - -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) - -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) - -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEnding(code) { - return code !== null && code < -2 -} - -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEndingOrSpace(code) { - return code !== null && (code < 0 || code === 32) -} - -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownSpace(code) { - return code === -2 || code === -1 || code === 32 -} - -// Size note: removing ASCII from the regex and using `asciiPunctuation` here -// In fact adds to the bundle size. -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodePunctuation = regexCheck(unicodePunctuationRegex) - -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodeWhitespace = regexCheck(/\s/) - -/** - * Create a code check from a regex. - * - * @param {RegExp} regex - * @returns {(code: Code) => boolean} - */ -function regexCheck(regex) { - return check - - /** - * Check whether a code matches the bound regex. - * - * @param {Code} code - * Character code. - * @returns {boolean} - * Whether the character code matches the bound regex. - */ - function check(code) { - return code !== null && regex.test(String.fromCharCode(code)) - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns - * Start state. - */ -function factorySpace(effects, ok, type, max) { - const limit = max ? max - 1 : Number.POSITIVE_INFINITY - let size = 0 - return start - - /** @type {State} */ - function start(code) { - if (markdownSpace(code)) { - effects.enter(type) - return prefix(code) - } - return ok(code) - } - - /** @type {State} */ - function prefix(code) { - if (markdownSpace(code) && size++ < limit) { - effects.consume(code) - return prefix - } - effects.exit(type) - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - -/** @type {InitialConstruct} */ -const content = { - tokenize: initializeContent -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeContent(effects) { - const contentStart = effects.attempt( - this.parser.constructs.contentInitial, - afterContentStartConstruct, - paragraphInitial - ) - /** @type {Token} */ - let previous - return contentStart - - /** @type {State} */ - function afterContentStartConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, contentStart, 'linePrefix') - } - - /** @type {State} */ - function paragraphInitial(code) { - effects.enter('paragraph') - return lineStart(code) - } - - /** @type {State} */ - function lineStart(code) { - const token = effects.enter('chunkText', { - contentType: 'text', - previous - }) - if (previous) { - previous.next = token - } - previous = token - return data(code) - } - - /** @type {State} */ - function data(code) { - if (code === null) { - effects.exit('chunkText') - effects.exit('paragraph') - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - effects.exit('chunkText') - return lineStart - } - - // Data. - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - -/** - * @typedef {[Construct, ContainerState]} StackItem - */ - - - - -/** @type {InitialConstruct} */ -const document_document = { - tokenize: initializeDocument -} - -/** @type {Construct} */ -const containerConstruct = { - tokenize: tokenizeContainer -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeDocument(effects) { - const self = this - /** @type {Array} */ - const stack = [] - let continued = 0 - /** @type {TokenizeContext | undefined} */ - let childFlow - /** @type {Token | undefined} */ - let childToken - /** @type {number} */ - let lineStartOffset - return start - - /** @type {State} */ - function start(code) { - // First we iterate through the open blocks, starting with the root - // document, and descending through last children down to the last open - // block. - // Each block imposes a condition that the line must satisfy if the block is - // to remain open. - // For example, a block quote requires a `>` character. - // A paragraph requires a non-blank line. - // In this phase we may match all or just some of the open blocks. - // But we cannot close unmatched blocks yet, because we may have a lazy - // continuation line. - if (continued < stack.length) { - const item = stack[continued] - self.containerState = item[1] - return effects.attempt( - item[0].continuation, - documentContinue, - checkNewContainers - )(code) - } - - // Done. - return checkNewContainers(code) - } - - /** @type {State} */ - function documentContinue(code) { - continued++ - - // Note: this field is called `_closeFlow` but it also closes containers. - // Perhaps a good idea to rename it but it’s already used in the wild by - // extensions. - if (self.containerState._closeFlow) { - self.containerState._closeFlow = undefined - if (childFlow) { - closeFlow() - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when dealing with lazy lines in `writeToChild`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {Point | undefined} */ - let point - - // Find the flow chunk. - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - point = self.events[indexBeforeFlow][1].end - break - } - } - exitContainers(continued) - - // Fix positions. - let index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - return checkNewContainers(code) - } - return start(code) - } - - /** @type {State} */ - function checkNewContainers(code) { - // Next, after consuming the continuation markers for existing blocks, we - // look for new block starts (e.g. `>` for a block quote). - // If we encounter a new block start, we close any blocks unmatched in - // step 1 before creating the new block as a child of the last matched - // block. - if (continued === stack.length) { - // No need to `check` whether there’s a container, of `exitContainers` - // would be moot. - // We can instead immediately `attempt` to parse one. - if (!childFlow) { - return documentContinued(code) - } - - // If we have concrete content, such as block HTML or fenced code, - // we can’t have containers “pierce” into them, so we can immediately - // start. - if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { - return flowStart(code) - } - - // If we do have flow, it could still be a blank line, - // but we’d be interrupting it w/ a new container if there’s a current - // construct. - // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer - // needed in micromark-extension-gfm-table@1.0.6). - self.interrupt = Boolean( - childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack - ) - } - - // Check if there is a new container. - self.containerState = {} - return effects.check( - containerConstruct, - thereIsANewContainer, - thereIsNoNewContainer - )(code) - } - - /** @type {State} */ - function thereIsANewContainer(code) { - if (childFlow) closeFlow() - exitContainers(continued) - return documentContinued(code) - } - - /** @type {State} */ - function thereIsNoNewContainer(code) { - self.parser.lazy[self.now().line] = continued !== stack.length - lineStartOffset = self.now().offset - return flowStart(code) - } - - /** @type {State} */ - function documentContinued(code) { - // Try new containers. - self.containerState = {} - return effects.attempt( - containerConstruct, - containerContinue, - flowStart - )(code) - } - - /** @type {State} */ - function containerContinue(code) { - continued++ - stack.push([self.currentConstruct, self.containerState]) - // Try another. - return documentContinued(code) - } - - /** @type {State} */ - function flowStart(code) { - if (code === null) { - if (childFlow) closeFlow() - exitContainers(0) - effects.consume(code) - return - } - childFlow = childFlow || self.parser.flow(self.now()) - effects.enter('chunkFlow', { - contentType: 'flow', - previous: childToken, - _tokenizer: childFlow - }) - return flowContinue(code) - } - - /** @type {State} */ - function flowContinue(code) { - if (code === null) { - writeToChild(effects.exit('chunkFlow'), true) - exitContainers(0) - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - writeToChild(effects.exit('chunkFlow')) - // Get ready for the next line. - continued = 0 - self.interrupt = undefined - return start - } - effects.consume(code) - return flowContinue - } - - /** - * @param {Token} token - * @param {boolean | undefined} [eof] - * @returns {void} - */ - function writeToChild(token, eof) { - const stream = self.sliceStream(token) - if (eof) stream.push(null) - token.previous = childToken - if (childToken) childToken.next = token - childToken = token - childFlow.defineSkip(token.start) - childFlow.write(stream) - - // Alright, so we just added a lazy line: - // - // ```markdown - // > a - // b. - // - // Or: - // - // > ~~~c - // d - // - // Or: - // - // > | e | - // f - // ``` - // - // The construct in the second example (fenced code) does not accept lazy - // lines, so it marked itself as done at the end of its first line, and - // then the content construct parses `d`. - // Most constructs in markdown match on the first line: if the first line - // forms a construct, a non-lazy line can’t “unmake” it. - // - // The construct in the third example is potentially a GFM table, and - // those are *weird*. - // It *could* be a table, from the first line, if the following line - // matches a condition. - // In this case, that second line is lazy, which “unmakes” the first line - // and turns the whole into one content block. - // - // We’ve now parsed the non-lazy and the lazy line, and can figure out - // whether the lazy line started a new flow block. - // If it did, we exit the current containers between the two flow blocks. - if (self.parser.lazy[token.start.line]) { - let index = childFlow.events.length - while (index--) { - if ( - // The token starts before the line ending… - childFlow.events[index][1].start.offset < lineStartOffset && - // …and either is not ended yet… - (!childFlow.events[index][1].end || - // …or ends after it. - childFlow.events[index][1].end.offset > lineStartOffset) - ) { - // Exit: there’s still something open, which means it’s a lazy line - // part of something. - return - } - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when closing flow in `documentContinue`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {boolean | undefined} */ - let seen - /** @type {Point | undefined} */ - let point - - // Find the previous chunk (the one before the lazy line). - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - if (seen) { - point = self.events[indexBeforeFlow][1].end - break - } - seen = true - } - } - exitContainers(continued) - - // Fix positions. - index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - } - } - - /** - * @param {number} size - * @returns {void} - */ - function exitContainers(size) { - let index = stack.length - - // Exit open containers. - while (index-- > size) { - const entry = stack[index] - self.containerState = entry[1] - entry[0].exit.call(self, effects) - } - stack.length = size - } - function closeFlow() { - childFlow.write([null]) - childToken = undefined - childFlow = undefined - self.containerState._closeFlow = undefined - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContainer(effects, ok, nok) { - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(this.parser.constructs.document, ok, nok), - 'linePrefix', - this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blankLine = { - tokenize: tokenizeBlankLine, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLine(effects, ok, nok) { - return start - - /** - * Start of blank line. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - return markdownSpace(code) - ? factorySpace(effects, after, 'linePrefix')(code) - : after(code) - } - - /** - * At eof/eol, after optional whitespace. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Token} Token - */ - - -/** - * Tokenize subcontent. - * - * @param {Array} events - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -function subtokenize(events) { - /** @type {Record} */ - const jumps = {} - let index = -1 - /** @type {Event} */ - let event - /** @type {number | undefined} */ - let lineIndex - /** @type {number} */ - let otherIndex - /** @type {Event} */ - let otherEvent - /** @type {Array} */ - let parameters - /** @type {Array} */ - let subevents - /** @type {boolean | undefined} */ - let more - while (++index < events.length) { - while (index in jumps) { - index = jumps[index] - } - event = events[index] - - // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. - if ( - index && - event[1].type === 'chunkFlow' && - events[index - 1][1].type === 'listItemPrefix' - ) { - subevents = event[1]._tokenizer.events - otherIndex = 0 - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'lineEndingBlank' - ) { - otherIndex += 2 - } - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'content' - ) { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === 'content') { - break - } - if (subevents[otherIndex][1].type === 'chunkText') { - subevents[otherIndex][1]._isInFirstContentOfListItem = true - otherIndex++ - } - } - } - } - - // Enter. - if (event[0] === 'enter') { - if (event[1].contentType) { - Object.assign(jumps, subcontent(events, index)) - index = jumps[index] - more = true - } - } - // Exit. - else if (event[1]._container) { - otherIndex = index - lineIndex = undefined - while (otherIndex--) { - otherEvent = events[otherIndex] - if ( - otherEvent[1].type === 'lineEnding' || - otherEvent[1].type === 'lineEndingBlank' - ) { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - } - otherEvent[1].type = 'lineEnding' - lineIndex = otherIndex - } - } else { - break - } - } - if (lineIndex) { - // Fix position. - event[1].end = Object.assign({}, events[lineIndex][1].start) - - // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index) - parameters.unshift(event) - splice(events, lineIndex, index - lineIndex + 1, parameters) - } - } - } - return !more -} - -/** - * Tokenize embedded tokens. - * - * @param {Array} events - * @param {number} eventIndex - * @returns {Record} - */ -function subcontent(events, eventIndex) { - const token = events[eventIndex][1] - const context = events[eventIndex][2] - let startPosition = eventIndex - 1 - /** @type {Array} */ - const startPositions = [] - const tokenizer = - token._tokenizer || context.parser[token.contentType](token.start) - const childEvents = tokenizer.events - /** @type {Array<[number, number]>} */ - const jumps = [] - /** @type {Record} */ - const gaps = {} - /** @type {Array} */ - let stream - /** @type {Token | undefined} */ - let previous - let index = -1 - /** @type {Token | undefined} */ - let current = token - let adjust = 0 - let start = 0 - const breaks = [start] - - // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. - while (current) { - // Find the position of the event for this token. - while (events[++startPosition][1] !== current) { - // Empty. - } - startPositions.push(startPosition) - if (!current._tokenizer) { - stream = context.sliceStream(current) - if (!current.next) { - stream.push(null) - } - if (previous) { - tokenizer.defineSkip(current.start) - } - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true - } - tokenizer.write(stream) - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined - } - } - - // Unravel the next token. - previous = current - current = current.next - } - - // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. - current = token - while (++index < childEvents.length) { - if ( - // Find a void token that includes a break. - childEvents[index][0] === 'exit' && - childEvents[index - 1][0] === 'enter' && - childEvents[index][1].type === childEvents[index - 1][1].type && - childEvents[index][1].start.line !== childEvents[index][1].end.line - ) { - start = index + 1 - breaks.push(start) - // Help GC. - current._tokenizer = undefined - current.previous = undefined - current = current.next - } - } - - // Help GC. - tokenizer.events = [] - - // If there’s one more token (which is the cases for lines that end in an - // EOF), that’s perfect: the last point we found starts it. - // If there isn’t then make sure any remaining content is added to it. - if (current) { - // Help GC. - current._tokenizer = undefined - current.previous = undefined - } else { - breaks.pop() - } - - // Now splice the events from the subtokenizer into the current events, - // moving back to front so that splice indices aren’t affected. - index = breaks.length - while (index--) { - const slice = childEvents.slice(breaks[index], breaks[index + 1]) - const start = startPositions.pop() - jumps.unshift([start, start + slice.length - 1]) - splice(events, start, 2, slice) - } - index = -1 - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] - adjust += jumps[index][1] - jumps[index][0] - 1 - } - return gaps -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** - * No name because it must not be turned off. - * @type {Construct} - */ -const content_content = { - tokenize: tokenizeContent, - resolve: resolveContent -} - -/** @type {Construct} */ -const continuationConstruct = { - tokenize: tokenizeContinuation, - partial: true -} - -/** - * Content is transparent: it’s parsed right now. That way, definitions are also - * parsed right now: before text in paragraphs (specifically, media) are parsed. - * - * @type {Resolver} - */ -function resolveContent(events) { - subtokenize(events) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContent(effects, ok) { - /** @type {Token | undefined} */ - let previous - return chunkStart - - /** - * Before a content chunk. - * - * ```markdown - * > | abc - * ^ - * ``` - * - * @type {State} - */ - function chunkStart(code) { - effects.enter('content') - previous = effects.enter('chunkContent', { - contentType: 'content' - }) - return chunkInside(code) - } - - /** - * In a content chunk. - * - * ```markdown - * > | abc - * ^^^ - * ``` - * - * @type {State} - */ - function chunkInside(code) { - if (code === null) { - return contentEnd(code) - } - - // To do: in `markdown-rs`, each line is parsed on its own, and everything - // is stitched together resolving. - if (markdownLineEnding(code)) { - return effects.check( - continuationConstruct, - contentContinue, - contentEnd - )(code) - } - - // Data. - effects.consume(code) - return chunkInside - } - - /** - * - * - * @type {State} - */ - function contentEnd(code) { - effects.exit('chunkContent') - effects.exit('content') - return ok(code) - } - - /** - * - * - * @type {State} - */ - function contentContinue(code) { - effects.consume(code) - effects.exit('chunkContent') - previous.next = effects.enter('chunkContent', { - contentType: 'content', - previous - }) - previous = previous.next - return chunkInside - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContinuation(effects, ok, nok) { - const self = this - return startLookahead - - /** - * - * - * @type {State} - */ - function startLookahead(code) { - effects.exit('chunkContent') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, prefixed, 'linePrefix') - } - - /** - * - * - * @type {State} - */ - function prefixed(code) { - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - - // Always populated by defaults. - - const tail = self.events[self.events.length - 1] - if ( - !self.parser.constructs.disable.null.includes('codeIndented') && - tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ) { - return ok(code) - } - return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - - -/** @type {InitialConstruct} */ -const flow = { - tokenize: initializeFlow -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeFlow(effects) { - const self = this - const initial = effects.attempt( - // Try to parse a blank line. - blankLine, - atBlankEnding, - // Try to parse initial flow (essentially, only code). - effects.attempt( - this.parser.constructs.flowInitial, - afterConstruct, - factorySpace( - effects, - effects.attempt( - this.parser.constructs.flow, - afterConstruct, - effects.attempt(content_content, afterConstruct) - ), - 'linePrefix' - ) - ) - ) - return initial - - /** @type {State} */ - function atBlankEnding(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEndingBlank') - effects.consume(code) - effects.exit('lineEndingBlank') - self.currentConstruct = undefined - return initial - } - - /** @type {State} */ - function afterConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - self.currentConstruct = undefined - return initial - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -const resolver = { - resolveAll: createResolver() -} -const string = initializeFactory('string') -const text_text = initializeFactory('text') - -/** - * @param {'string' | 'text'} field - * @returns {InitialConstruct} - */ -function initializeFactory(field) { - return { - tokenize: initializeText, - resolveAll: createResolver( - field === 'text' ? resolveAllLineSuffixes : undefined - ) - } - - /** - * @this {TokenizeContext} - * @type {Initializer} - */ - function initializeText(effects) { - const self = this - const constructs = this.parser.constructs[field] - const text = effects.attempt(constructs, start, notText) - return start - - /** @type {State} */ - function start(code) { - return atBreak(code) ? text(code) : notText(code) - } - - /** @type {State} */ - function notText(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('data') - effects.consume(code) - return data - } - - /** @type {State} */ - function data(code) { - if (atBreak(code)) { - effects.exit('data') - return text(code) - } - - // Data. - effects.consume(code) - return data - } - - /** - * @param {Code} code - * @returns {boolean} - */ - function atBreak(code) { - if (code === null) { - return true - } - const list = constructs[code] - let index = -1 - if (list) { - // Always populated by defaults. - - while (++index < list.length) { - const item = list[index] - if (!item.previous || item.previous.call(self, self.previous)) { - return true - } - } - } - return false - } - } -} - -/** - * @param {Resolver | undefined} [extraResolver] - * @returns {Resolver} - */ -function createResolver(extraResolver) { - return resolveAllText - - /** @type {Resolver} */ - function resolveAllText(events, context) { - let index = -1 - /** @type {number | undefined} */ - let enter - - // A rather boring computation (to merge adjacent `data` events) which - // improves mm performance by 29%. - while (++index <= events.length) { - if (enter === undefined) { - if (events[index] && events[index][1].type === 'data') { - enter = index - index++ - } - } else if (!events[index] || events[index][1].type !== 'data') { - // Don’t do anything if there is one data token. - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - index = enter + 2 - } - enter = undefined - } - } - return extraResolver ? extraResolver(events, context) : events - } -} - -/** - * A rather ugly set of instructions which again looks at chunks in the input - * stream. - * The reason to do this here is that it is *much* faster to parse in reverse. - * And that we can’t hook into `null` to split the line suffix before an EOF. - * To do: figure out if we can make this into a clean utility, or even in core. - * As it will be useful for GFMs literal autolink extension (and maybe even - * tables?) - * - * @type {Resolver} - */ -function resolveAllLineSuffixes(events, context) { - let eventIndex = 0 // Skip first. - - while (++eventIndex <= events.length) { - if ( - (eventIndex === events.length || - events[eventIndex][1].type === 'lineEnding') && - events[eventIndex - 1][1].type === 'data' - ) { - const data = events[eventIndex - 1][1] - const chunks = context.sliceStream(data) - let index = chunks.length - let bufferIndex = -1 - let size = 0 - /** @type {boolean | undefined} */ - let tabs - while (index--) { - const chunk = chunks[index] - if (typeof chunk === 'string') { - bufferIndex = chunk.length - while (chunk.charCodeAt(bufferIndex - 1) === 32) { - size++ - bufferIndex-- - } - if (bufferIndex) break - bufferIndex = -1 - } - // Number - else if (chunk === -2) { - tabs = true - size++ - } else if (chunk === -1) { - // Empty - } else { - // Replacement character, exit. - index++ - break - } - } - if (size) { - const token = { - type: - eventIndex === events.length || tabs || size < 2 - ? 'lineSuffix' - : 'hardBreakTrailing', - start: { - line: data.end.line, - column: data.end.column - size, - offset: data.end.offset - size, - _index: data.start._index + index, - _bufferIndex: index - ? bufferIndex - : data.start._bufferIndex + bufferIndex - }, - end: Object.assign({}, data.end) - } - data.end = Object.assign({}, token.start) - if (data.start.offset === data.end.offset) { - Object.assign(data, token) - } else { - events.splice( - eventIndex, - 0, - ['enter', token, context], - ['exit', token, context] - ) - eventIndex += 2 - } - } - eventIndex++ - } - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js -/** - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * Call all `resolveAll`s. - * - * @param {Array<{resolveAll?: Resolver | undefined}>} constructs - * List of constructs, optionally with `resolveAll`s. - * @param {Array} events - * List of events. - * @param {TokenizeContext} context - * Context used by `tokenize`. - * @returns {Array} - * Changed events. - */ -function resolveAll(constructs, events, context) { - /** @type {Array} */ - const called = [] - let index = -1 - - while (++index < constructs.length) { - const resolve = constructs[index].resolveAll - - if (resolve && !called.includes(resolve)) { - events = resolve(events, context) - called.push(resolve) - } - } - - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenType} TokenType - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * @callback Restore - * @returns {void} - * - * @typedef Info - * @property {Restore} restore - * @property {number} from - * - * @callback ReturnHandle - * Handle a successful run. - * @param {Construct} construct - * @param {Info} info - * @returns {void} - */ - - - - -/** - * Create a tokenizer. - * Tokenizers deal with one type of data (e.g., containers, flow, text). - * The parser is the object dealing with it all. - * `initialize` works like other constructs, except that only its `tokenize` - * function is used, in which case it doesn’t receive an `ok` or `nok`. - * `from` can be given to set the point before the first character, although - * when further lines are indented, they must be set with `defineSkip`. - * - * @param {ParseContext} parser - * @param {InitialConstruct} initialize - * @param {Omit | undefined} [from] - * @returns {TokenizeContext} - */ -function createTokenizer(parser, initialize, from) { - /** @type {Point} */ - let point = Object.assign( - from - ? Object.assign({}, from) - : { - line: 1, - column: 1, - offset: 0 - }, - { - _index: 0, - _bufferIndex: -1 - } - ) - /** @type {Record} */ - const columnStart = {} - /** @type {Array} */ - const resolveAllConstructs = [] - /** @type {Array} */ - let chunks = [] - /** @type {Array} */ - let stack = [] - /** @type {boolean | undefined} */ - let consumed = true - - /** - * Tools used for tokenizing. - * - * @type {Effects} - */ - const effects = { - consume, - enter, - exit, - attempt: constructFactory(onsuccessfulconstruct), - check: constructFactory(onsuccessfulcheck), - interrupt: constructFactory(onsuccessfulcheck, { - interrupt: true - }) - } - - /** - * State and tools for resolving and serializing. - * - * @type {TokenizeContext} - */ - const context = { - previous: null, - code: null, - containerState: {}, - events: [], - parser, - sliceStream, - sliceSerialize, - now, - defineSkip, - write - } - - /** - * The state function. - * - * @type {State | void} - */ - let state = initialize.tokenize.call(context, effects) - - /** - * Track which character we expect to be consumed, to catch bugs. - * - * @type {Code} - */ - let expectedCode - if (initialize.resolveAll) { - resolveAllConstructs.push(initialize) - } - return context - - /** @type {TokenizeContext['write']} */ - function write(slice) { - chunks = push(chunks, slice) - main() - - // Exit if we’re not done, resolve might change stuff. - if (chunks[chunks.length - 1] !== null) { - return [] - } - addResult(initialize, 0) - - // Otherwise, resolve, and exit. - context.events = resolveAll(resolveAllConstructs, context.events, context) - return context.events - } - - // - // Tools. - // - - /** @type {TokenizeContext['sliceSerialize']} */ - function sliceSerialize(token, expandTabs) { - return serializeChunks(sliceStream(token), expandTabs) - } - - /** @type {TokenizeContext['sliceStream']} */ - function sliceStream(token) { - return sliceChunks(chunks, token) - } - - /** @type {TokenizeContext['now']} */ - function now() { - // This is a hot path, so we clone manually instead of `Object.assign({}, point)` - const {line, column, offset, _index, _bufferIndex} = point - return { - line, - column, - offset, - _index, - _bufferIndex - } - } - - /** @type {TokenizeContext['defineSkip']} */ - function defineSkip(value) { - columnStart[value.line] = value.column - accountForPotentialSkip() - } - - // - // State management. - // - - /** - * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by - * `consume`). - * Here is where we walk through the chunks, which either include strings of - * several characters, or numerical character codes. - * The reason to do this in a loop instead of a call is so the stack can - * drain. - * - * @returns {void} - */ - function main() { - /** @type {number} */ - let chunkIndex - while (point._index < chunks.length) { - const chunk = chunks[point._index] - - // If we’re in a buffer chunk, loop through it. - if (typeof chunk === 'string') { - chunkIndex = point._index - if (point._bufferIndex < 0) { - point._bufferIndex = 0 - } - while ( - point._index === chunkIndex && - point._bufferIndex < chunk.length - ) { - go(chunk.charCodeAt(point._bufferIndex)) - } - } else { - go(chunk) - } - } - } - - /** - * Deal with one code. - * - * @param {Code} code - * @returns {void} - */ - function go(code) { - consumed = undefined - expectedCode = code - state = state(code) - } - - /** @type {Effects['consume']} */ - function consume(code) { - if (markdownLineEnding(code)) { - point.line++ - point.column = 1 - point.offset += code === -3 ? 2 : 1 - accountForPotentialSkip() - } else if (code !== -1) { - point.column++ - point.offset++ - } - - // Not in a string chunk. - if (point._bufferIndex < 0) { - point._index++ - } else { - point._bufferIndex++ - - // At end of string chunk. - // @ts-expect-error Points w/ non-negative `_bufferIndex` reference - // strings. - if (point._bufferIndex === chunks[point._index].length) { - point._bufferIndex = -1 - point._index++ - } - } - - // Expose the previous character. - context.previous = code - - // Mark as consumed. - consumed = true - } - - /** @type {Effects['enter']} */ - function enter(type, fields) { - /** @type {Token} */ - // @ts-expect-error Patch instead of assign required fields to help GC. - const token = fields || {} - token.type = type - token.start = now() - context.events.push(['enter', token, context]) - stack.push(token) - return token - } - - /** @type {Effects['exit']} */ - function exit(type) { - const token = stack.pop() - token.end = now() - context.events.push(['exit', token, context]) - return token - } - - /** - * Use results. - * - * @type {ReturnHandle} - */ - function onsuccessfulconstruct(construct, info) { - addResult(construct, info.from) - } - - /** - * Discard results. - * - * @type {ReturnHandle} - */ - function onsuccessfulcheck(_, info) { - info.restore() - } - - /** - * Factory to attempt/check/interrupt. - * - * @param {ReturnHandle} onreturn - * @param {{interrupt?: boolean | undefined} | undefined} [fields] - */ - function constructFactory(onreturn, fields) { - return hook - - /** - * Handle either an object mapping codes to constructs, a list of - * constructs, or a single construct. - * - * @param {Array | Construct | ConstructRecord} constructs - * @param {State} returnState - * @param {State | undefined} [bogusState] - * @returns {State} - */ - function hook(constructs, returnState, bogusState) { - /** @type {Array} */ - let listOfConstructs - /** @type {number} */ - let constructIndex - /** @type {Construct} */ - let currentConstruct - /** @type {Info} */ - let info - return Array.isArray(constructs) /* c8 ignore next 1 */ - ? handleListOfConstructs(constructs) - : 'tokenize' in constructs - ? // @ts-expect-error Looks like a construct. - handleListOfConstructs([constructs]) - : handleMapOfConstructs(constructs) - - /** - * Handle a list of construct. - * - * @param {ConstructRecord} map - * @returns {State} - */ - function handleMapOfConstructs(map) { - return start - - /** @type {State} */ - function start(code) { - const def = code !== null && map[code] - const all = code !== null && map.null - const list = [ - // To do: add more extension tests. - /* c8 ignore next 2 */ - ...(Array.isArray(def) ? def : def ? [def] : []), - ...(Array.isArray(all) ? all : all ? [all] : []) - ] - return handleListOfConstructs(list)(code) - } - } - - /** - * Handle a list of construct. - * - * @param {Array} list - * @returns {State} - */ - function handleListOfConstructs(list) { - listOfConstructs = list - constructIndex = 0 - if (list.length === 0) { - return bogusState - } - return handleConstruct(list[constructIndex]) - } - - /** - * Handle a single construct. - * - * @param {Construct} construct - * @returns {State} - */ - function handleConstruct(construct) { - return start - - /** @type {State} */ - function start(code) { - // To do: not needed to store if there is no bogus state, probably? - // Currently doesn’t work because `inspect` in document does a check - // w/o a bogus, which doesn’t make sense. But it does seem to help perf - // by not storing. - info = store() - currentConstruct = construct - if (!construct.partial) { - context.currentConstruct = construct - } - - // Always populated by defaults. - - if ( - construct.name && - context.parser.constructs.disable.null.includes(construct.name) - ) { - return nok(code) - } - return construct.tokenize.call( - // If we do have fields, create an object w/ `context` as its - // prototype. - // This allows a “live binding”, which is needed for `interrupt`. - fields ? Object.assign(Object.create(context), fields) : context, - effects, - ok, - nok - )(code) - } - } - - /** @type {State} */ - function ok(code) { - consumed = true - onreturn(currentConstruct, info) - return returnState - } - - /** @type {State} */ - function nok(code) { - consumed = true - info.restore() - if (++constructIndex < listOfConstructs.length) { - return handleConstruct(listOfConstructs[constructIndex]) - } - return bogusState - } - } - } - - /** - * @param {Construct} construct - * @param {number} from - * @returns {void} - */ - function addResult(construct, from) { - if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { - resolveAllConstructs.push(construct) - } - if (construct.resolve) { - splice( - context.events, - from, - context.events.length - from, - construct.resolve(context.events.slice(from), context) - ) - } - if (construct.resolveTo) { - context.events = construct.resolveTo(context.events, context) - } - } - - /** - * Store state. - * - * @returns {Info} - */ - function store() { - const startPoint = now() - const startPrevious = context.previous - const startCurrentConstruct = context.currentConstruct - const startEventsIndex = context.events.length - const startStack = Array.from(stack) - return { - restore, - from: startEventsIndex - } - - /** - * Restore state. - * - * @returns {void} - */ - function restore() { - point = startPoint - context.previous = startPrevious - context.currentConstruct = startCurrentConstruct - context.events.length = startEventsIndex - stack = startStack - accountForPotentialSkip() - } - } - - /** - * Move the current point a bit forward in the line when it’s on a column - * skip. - * - * @returns {void} - */ - function accountForPotentialSkip() { - if (point.line in columnStart && point.column < 2) { - point.column = columnStart[point.line] - point.offset += columnStart[point.line] - 1 - } - } -} - -/** - * Get the chunks from a slice of chunks in the range of a token. - * - * @param {Array} chunks - * @param {Pick} token - * @returns {Array} - */ -function sliceChunks(chunks, token) { - const startIndex = token.start._index - const startBufferIndex = token.start._bufferIndex - const endIndex = token.end._index - const endBufferIndex = token.end._bufferIndex - /** @type {Array} */ - let view - if (startIndex === endIndex) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] - } else { - view = chunks.slice(startIndex, endIndex) - if (startBufferIndex > -1) { - const head = view[0] - if (typeof head === 'string') { - view[0] = head.slice(startBufferIndex) - } else { - view.shift() - } - } - if (endBufferIndex > 0) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view.push(chunks[endIndex].slice(0, endBufferIndex)) - } - } - return view -} - -/** - * Get the string value of a slice of chunks. - * - * @param {Array} chunks - * @param {boolean | undefined} [expandTabs=false] - * @returns {string} - */ -function serializeChunks(chunks, expandTabs) { - let index = -1 - /** @type {Array} */ - const result = [] - /** @type {boolean | undefined} */ - let atTab - while (++index < chunks.length) { - const chunk = chunks[index] - /** @type {string} */ - let value - if (typeof chunk === 'string') { - value = chunk - } else - switch (chunk) { - case -5: { - value = '\r' - break - } - case -4: { - value = '\n' - break - } - case -3: { - value = '\r' + '\n' - break - } - case -2: { - value = expandTabs ? ' ' : '\t' - break - } - case -1: { - if (!expandTabs && atTab) continue - value = ' ' - break - } - default: { - // Currently only replacement character. - value = String.fromCharCode(chunk) - } - } - atTab = chunk === -2 - result.push(value) - } - return result.join('') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const thematicBreak = { - name: 'thematicBreak', - tokenize: tokenizeThematicBreak -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeThematicBreak(effects, ok, nok) { - let size = 0 - /** @type {NonNullable} */ - let marker - return start - - /** - * Start of thematic break. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('thematicBreak') - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * After optional whitespace, at marker. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - marker = code - return atBreak(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.enter('thematicBreakSequence') - return sequence(code) - } - if (size >= 3 && (code === null || markdownLineEnding(code))) { - effects.exit('thematicBreak') - return ok(code) - } - return nok(code) - } - - /** - * In sequence. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function sequence(code) { - if (code === marker) { - effects.consume(code) - size++ - return sequence - } - effects.exit('thematicBreakSequence') - return markdownSpace(code) - ? factorySpace(effects, atBreak, 'whitespace')(code) - : atBreak(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - -/** @type {Construct} */ -const list = { - name: 'list', - tokenize: tokenizeListStart, - continuation: { - tokenize: tokenizeListContinuation - }, - exit: tokenizeListEnd -} - -/** @type {Construct} */ -const listItemPrefixWhitespaceConstruct = { - tokenize: tokenizeListItemPrefixWhitespace, - partial: true -} - -/** @type {Construct} */ -const indentConstruct = { - tokenize: tokenizeIndent, - partial: true -} - -// To do: `markdown-rs` parses list items on their own and later stitches them -// together. - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListStart(effects, ok, nok) { - const self = this - const tail = self.events[self.events.length - 1] - let initialSize = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - let size = 0 - return start - - /** @type {State} */ - function start(code) { - const kind = - self.containerState.type || - (code === 42 || code === 43 || code === 45 - ? 'listUnordered' - : 'listOrdered') - if ( - kind === 'listUnordered' - ? !self.containerState.marker || code === self.containerState.marker - : asciiDigit(code) - ) { - if (!self.containerState.type) { - self.containerState.type = kind - effects.enter(kind, { - _container: true - }) - } - if (kind === 'listUnordered') { - effects.enter('listItemPrefix') - return code === 42 || code === 45 - ? effects.check(thematicBreak, nok, atMarker)(code) - : atMarker(code) - } - if (!self.interrupt || code === 49) { - effects.enter('listItemPrefix') - effects.enter('listItemValue') - return inside(code) - } - } - return nok(code) - } - - /** @type {State} */ - function inside(code) { - if (asciiDigit(code) && ++size < 10) { - effects.consume(code) - return inside - } - if ( - (!self.interrupt || size < 2) && - (self.containerState.marker - ? code === self.containerState.marker - : code === 41 || code === 46) - ) { - effects.exit('listItemValue') - return atMarker(code) - } - return nok(code) - } - - /** - * @type {State} - **/ - function atMarker(code) { - effects.enter('listItemMarker') - effects.consume(code) - effects.exit('listItemMarker') - self.containerState.marker = self.containerState.marker || code - return effects.check( - blankLine, - // Can’t be empty when interrupting. - self.interrupt ? nok : onBlank, - effects.attempt( - listItemPrefixWhitespaceConstruct, - endOfPrefix, - otherPrefix - ) - ) - } - - /** @type {State} */ - function onBlank(code) { - self.containerState.initialBlankLine = true - initialSize++ - return endOfPrefix(code) - } - - /** @type {State} */ - function otherPrefix(code) { - if (markdownSpace(code)) { - effects.enter('listItemPrefixWhitespace') - effects.consume(code) - effects.exit('listItemPrefixWhitespace') - return endOfPrefix - } - return nok(code) - } - - /** @type {State} */ - function endOfPrefix(code) { - self.containerState.size = - initialSize + - self.sliceSerialize(effects.exit('listItemPrefix'), true).length - return ok(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListContinuation(effects, ok, nok) { - const self = this - self.containerState._closeFlow = undefined - return effects.check(blankLine, onBlank, notBlank) - - /** @type {State} */ - function onBlank(code) { - self.containerState.furtherBlankLines = - self.containerState.furtherBlankLines || - self.containerState.initialBlankLine - - // We have a blank line. - // Still, try to consume at most the items size. - return factorySpace( - effects, - ok, - 'listItemIndent', - self.containerState.size + 1 - )(code) - } - - /** @type {State} */ - function notBlank(code) { - if (self.containerState.furtherBlankLines || !markdownSpace(code)) { - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return notInCurrentItem(code) - } - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) - } - - /** @type {State} */ - function notInCurrentItem(code) { - // While we do continue, we signal that the flow should be closed. - self.containerState._closeFlow = true - // As we’re closing flow, we’re no longer interrupting. - self.interrupt = undefined - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(list, ok, nok), - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeIndent(effects, ok, nok) { - const self = this - return factorySpace( - effects, - afterPrefix, - 'listItemIndent', - self.containerState.size + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'listItemIndent' && - tail[2].sliceSerialize(tail[1], true).length === self.containerState.size - ? ok(code) - : nok(code) - } -} - -/** - * @type {Exiter} - * @this {TokenizeContext} - */ -function tokenizeListEnd(effects) { - effects.exit(this.containerState.type) -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListItemPrefixWhitespace(effects, ok, nok) { - const self = this - - // Always populated by defaults. - - return factorySpace( - effects, - afterPrefix, - 'listItemPrefixWhitespace', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return !markdownSpace(code) && - tail && - tail[1].type === 'listItemPrefixWhitespace' - ? ok(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blockQuote = { - name: 'blockQuote', - tokenize: tokenizeBlockQuoteStart, - continuation: { - tokenize: tokenizeBlockQuoteContinuation - }, - exit -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteStart(effects, ok, nok) { - const self = this - return start - - /** - * Start of block quote. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 62) { - const state = self.containerState - if (!state.open) { - effects.enter('blockQuote', { - _container: true - }) - state.open = true - } - effects.enter('blockQuotePrefix') - effects.enter('blockQuoteMarker') - effects.consume(code) - effects.exit('blockQuoteMarker') - return after - } - return nok(code) - } - - /** - * After `>`, before optional whitespace. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownSpace(code)) { - effects.enter('blockQuotePrefixWhitespace') - effects.consume(code) - effects.exit('blockQuotePrefixWhitespace') - effects.exit('blockQuotePrefix') - return ok - } - effects.exit('blockQuotePrefix') - return ok(code) - } -} - -/** - * Start of block quote continuation. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteContinuation(effects, ok, nok) { - const self = this - return contStart - - /** - * Start of block quote continuation. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contStart(code) { - if (markdownSpace(code)) { - // Always populated by defaults. - - return factorySpace( - effects, - contBefore, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } - return contBefore(code) - } - - /** - * At `>`, after optional whitespace. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contBefore(code) { - return effects.attempt(blockQuote, ok, nok)(code) - } -} - -/** @type {Exiter} */ -function exit(effects) { - effects.exit('blockQuote') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * - * b> - * - * - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`` or `b`). - * @param {TokenType} literalType - * Type when enclosed (``). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryDestination( - effects, - ok, - nok, - type, - literalType, - literalMarkerType, - rawType, - stringType, - max -) { - const limit = max || Number.POSITIVE_INFINITY - let balance = 0 - return start - - /** - * Start of destination. - * - * ```markdown - * > | - * ^ - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 60) { - effects.enter(type) - effects.enter(literalType) - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - return enclosedBefore - } - - // ASCII control, space, closing paren. - if (code === null || code === 32 || code === 41 || asciiControl(code)) { - return nok(code) - } - effects.enter(type) - effects.enter(rawType) - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return raw(code) - } - - /** - * After `<`, at an enclosed destination. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosedBefore(code) { - if (code === 62) { - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - effects.exit(literalType) - effects.exit(type) - return ok - } - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return enclosed(code) - } - - /** - * In enclosed destination. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosed(code) { - if (code === 62) { - effects.exit('chunkString') - effects.exit(stringType) - return enclosedBefore(code) - } - if (code === null || code === 60 || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? enclosedEscape : enclosed - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosedEscape(code) { - if (code === 60 || code === 62 || code === 92) { - effects.consume(code) - return enclosed - } - return enclosed(code) - } - - /** - * In raw destination. - * - * ```markdown - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function raw(code) { - if ( - !balance && - (code === null || code === 41 || markdownLineEndingOrSpace(code)) - ) { - effects.exit('chunkString') - effects.exit(stringType) - effects.exit(rawType) - effects.exit(type) - return ok(code) - } - if (balance < limit && code === 40) { - effects.consume(code) - balance++ - return raw - } - if (code === 41) { - effects.consume(code) - balance-- - return raw - } - - // ASCII control (but *not* `\0`) and space and `(`. - // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it - // doesn’t. - if (code === null || code === 32 || code === 40 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? rawEscape : raw - } - - /** - * After `\`, at special character. - * - * ```markdown - * > | a\*a - * ^ - * ``` - * - * @type {State} - */ - function rawEscape(code) { - if (code === 40 || code === 41 || code === 92) { - effects.consume(code) - return raw - } - return raw(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryLabel(effects, ok, nok, type, markerType, stringType) { - const self = this - let size = 0 - /** @type {boolean} */ - let seen - return start - - /** - * Start of label. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.enter(stringType) - return atBreak - } - - /** - * In label, at something, before something else. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if ( - size > 999 || - code === null || - code === 91 || - (code === 93 && !seen) || - // To do: remove in the future once we’ve switched from - // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, - // which doesn’t need this. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - (code === 94 && - !size && - '_hiddenFootnoteSupport' in self.parser.constructs) - ) { - return nok(code) - } - if (code === 93) { - effects.exit(stringType) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - - // To do: indent? Link chunks and EOLs together? - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return atBreak - } - effects.enter('chunkString', { - contentType: 'string' - }) - return labelInside(code) - } - - /** - * In label, in text. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function labelInside(code) { - if ( - code === null || - code === 91 || - code === 93 || - markdownLineEnding(code) || - size++ > 999 - ) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - if (!seen) seen = !markdownSpace(code) - return code === 92 ? labelEscape : labelInside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | [a\*a] - * ^ - * ``` - * - * @type {State} - */ - function labelEscape(code) { - if (code === 91 || code === 92 || code === 93) { - effects.consume(code) - size++ - return labelInside - } - return labelInside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryTitle(effects, ok, nok, type, markerType, stringType) { - /** @type {NonNullable} */ - let marker - return start - - /** - * Start of title. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 34 || code === 39 || code === 40) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - marker = code === 40 ? 41 : code - return begin - } - return nok(code) - } - - /** - * After opening marker. - * - * This is also used at the closing marker. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function begin(code) { - if (code === marker) { - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - effects.enter(stringType) - return atBreak(code) - } - - /** - * At something, before something else. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.exit(stringType) - return begin(marker) - } - if (code === null) { - return nok(code) - } - - // Note: blank lines can’t exist in content. - if (markdownLineEnding(code)) { - // To do: use `space_or_tab_eol_with_options`, connect. - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, atBreak, 'linePrefix') - } - effects.enter('chunkString', { - contentType: 'string' - }) - return inside(code) - } - - /** - * - * - * @type {State} - */ - function inside(code) { - if (code === marker || code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - return code === 92 ? escape : inside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | "a\*b" - * ^ - * ``` - * - * @type {State} - */ - function escape(code) { - if (code === marker || code === 92) { - effects.consume(code) - return inside - } - return inside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - */ - - - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns - * Start state. - */ -function factoryWhitespace(effects, ok) { - /** @type {boolean} */ - let seen - return start - - /** @type {State} */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - seen = true - return start - } - if (markdownSpace(code)) { - return factorySpace( - effects, - start, - seen ? 'linePrefix' : 'lineSuffix' - )(code) - } - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -function normalizeIdentifier(value) { - return ( - value - // Collapse markdown whitespace. - .replace(/[\t\n\r ]+/g, ' ') - // Trim. - .replace(/^ | $/g, '') - // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase() - .toUpperCase() - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - -/** @type {Construct} */ -const definition = { - name: 'definition', - tokenize: tokenizeDefinition -} - -/** @type {Construct} */ -const titleBefore = { - tokenize: tokenizeTitleBefore, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeDefinition(effects, ok, nok) { - const self = this - /** @type {string} */ - let identifier - return start - - /** - * At start of a definition. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Do not interrupt paragraphs (but do follow definitions). - // To do: do `interrupt` the way `markdown-rs` does. - // To do: parse whitespace the way `markdown-rs` does. - effects.enter('definition') - return before(code) - } - - /** - * After optional whitespace, at `[`. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - // To do: parse whitespace the way `markdown-rs` does. - - return factoryLabel.call( - self, - effects, - labelAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionLabel', - 'definitionLabelMarker', - 'definitionLabelString' - )(code) - } - - /** - * After label. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function labelAfter(code) { - identifier = normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - if (code === 58) { - effects.enter('definitionMarker') - effects.consume(code) - effects.exit('definitionMarker') - return markerAfter - } - return nok(code) - } - - /** - * After marker. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function markerAfter(code) { - // Note: whitespace is optional. - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, destinationBefore)(code) - : destinationBefore(code) - } - - /** - * Before destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationBefore(code) { - return factoryDestination( - effects, - destinationAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionDestination', - 'definitionDestinationLiteral', - 'definitionDestinationLiteralMarker', - 'definitionDestinationRaw', - 'definitionDestinationString' - )(code) - } - - /** - * After destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationAfter(code) { - return effects.attempt(titleBefore, after, after)(code) - } - - /** - * After definition. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return markdownSpace(code) - ? factorySpace(effects, afterWhitespace, 'whitespace')(code) - : afterWhitespace(code) - } - - /** - * After definition, after optional whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function afterWhitespace(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('definition') - - // Note: we don’t care about uniqueness. - // It’s likely that that doesn’t happen very frequently. - // It is more likely that it wastes precious time. - self.parser.defined.push(identifier) - - // To do: `markdown-rs` interrupt. - // // You’d be interrupting. - // tokenizer.interrupt = true - return ok(code) - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeTitleBefore(effects, ok, nok) { - return titleBefore - - /** - * After destination, at whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, beforeMarker)(code) - : nok(code) - } - - /** - * At title. - * - * ```markdown - * | [a]: b - * > | "c" - * ^ - * ``` - * - * @type {State} - */ - function beforeMarker(code) { - return factoryTitle( - effects, - titleAfter, - nok, - 'definitionTitle', - 'definitionTitleMarker', - 'definitionTitleString' - )(code) - } - - /** - * After title. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfter(code) { - return markdownSpace(code) - ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) - : titleAfterOptionalWhitespace(code) - } - - /** - * After title, after optional whitespace. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfterOptionalWhitespace(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const codeIndented = { - name: 'codeIndented', - tokenize: tokenizeCodeIndented -} - -/** @type {Construct} */ -const furtherStart = { - tokenize: tokenizeFurtherStart, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeIndented(effects, ok, nok) { - const self = this - return start - - /** - * Start of code (indented). - * - * > **Parsing note**: it is not needed to check if this first line is a - * > filled line (that it has a non-whitespace character), because blank lines - * > are parsed already, so we never run into that. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: manually check if interrupting like `markdown-rs`. - - effects.enter('codeIndented') - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? atBreak(code) - : nok(code) - } - - /** - * At a break. - * - * ```markdown - * > | aaa - * ^ ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === null) { - return after(code) - } - if (markdownLineEnding(code)) { - return effects.attempt(furtherStart, atBreak, after)(code) - } - effects.enter('codeFlowValue') - return inside(code) - } - - /** - * In code content. - * - * ```markdown - * > | aaa - * ^^^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return atBreak(code) - } - effects.consume(code) - return inside - } - - /** @type {State} */ - function after(code) { - effects.exit('codeIndented') - // To do: allow interrupting like `markdown-rs`. - // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeFurtherStart(effects, ok, nok) { - const self = this - return furtherStart - - /** - * At eol, trying to parse another indent. - * - * ```markdown - * > | aaa - * ^ - * | bbb - * ``` - * - * @type {State} - */ - function furtherStart(code) { - // To do: improve `lazy` / `pierce` handling. - // If this is a lazy line, it can’t be code. - if (self.parser.lazy[self.now().line]) { - return nok(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return furtherStart - } - - // To do: the code here in `micromark-js` is a bit different from - // `markdown-rs` because there it can attempt spaces. - // We can’t yet. - // - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? ok(code) - : markdownLineEnding(code) - ? furtherStart(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const headingAtx = { - name: 'headingAtx', - tokenize: tokenizeHeadingAtx, - resolve: resolveHeadingAtx -} - -/** @type {Resolver} */ -function resolveHeadingAtx(events, context) { - let contentEnd = events.length - 2 - let contentStart = 3 - /** @type {Token} */ - let content - /** @type {Token} */ - let text - - // Prefix whitespace, part of the opening. - if (events[contentStart][1].type === 'whitespace') { - contentStart += 2 - } - - // Suffix whitespace, part of the closing. - if ( - contentEnd - 2 > contentStart && - events[contentEnd][1].type === 'whitespace' - ) { - contentEnd -= 2 - } - if ( - events[contentEnd][1].type === 'atxHeadingSequence' && - (contentStart === contentEnd - 1 || - (contentEnd - 4 > contentStart && - events[contentEnd - 2][1].type === 'whitespace')) - ) { - contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 - } - if (contentEnd > contentStart) { - content = { - type: 'atxHeadingText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end - } - text = { - type: 'chunkText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end, - contentType: 'text' - } - splice(events, contentStart, contentEnd - contentStart + 1, [ - ['enter', content, context], - ['enter', text, context], - ['exit', text, context], - ['exit', content, context] - ]) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHeadingAtx(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of a heading (atx). - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - effects.enter('atxHeading') - return before(code) - } - - /** - * After optional whitespace, at `#`. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('atxHeadingSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 35 && size++ < 6) { - effects.consume(code) - return sequenceOpen - } - - // Always at least one `#`. - if (code === null || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingSequence') - return atBreak(code) - } - return nok(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === 35) { - effects.enter('atxHeadingSequence') - return sequenceFurther(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('atxHeading') - // To do: interrupt like `markdown-rs`. - // // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } - if (markdownSpace(code)) { - return factorySpace(effects, atBreak, 'whitespace')(code) - } - - // To do: generate `data` tokens, add the `text` token later. - // Needs edit map, see: `markdown.rs`. - effects.enter('atxHeadingText') - return data(code) - } - - /** - * In further sequence (after whitespace). - * - * Could be normal “visible” hashes in the heading or a final sequence. - * - * ```markdown - * > | ## aa ## - * ^ - * ``` - * - * @type {State} - */ - function sequenceFurther(code) { - if (code === 35) { - effects.consume(code) - return sequenceFurther - } - effects.exit('atxHeadingSequence') - return atBreak(code) - } - - /** - * In text. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingText') - return atBreak(code) - } - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const setextUnderline = { - name: 'setextUnderline', - tokenize: tokenizeSetextUnderline, - resolveTo: resolveToSetextUnderline -} - -/** @type {Resolver} */ -function resolveToSetextUnderline(events, context) { - // To do: resolve like `markdown-rs`. - let index = events.length - /** @type {number | undefined} */ - let content - /** @type {number | undefined} */ - let text - /** @type {number | undefined} */ - let definition - - // Find the opening of the content. - // It’ll always exist: we don’t tokenize if it isn’t there. - while (index--) { - if (events[index][0] === 'enter') { - if (events[index][1].type === 'content') { - content = index - break - } - if (events[index][1].type === 'paragraph') { - text = index - } - } - // Exit - else { - if (events[index][1].type === 'content') { - // Remove the content end (if needed we’ll add it later) - events.splice(index, 1) - } - if (!definition && events[index][1].type === 'definition') { - definition = index - } - } - } - const heading = { - type: 'setextHeading', - start: Object.assign({}, events[text][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - - // Change the paragraph to setext heading text. - events[text][1].type = 'setextHeadingText' - - // If we have definitions in the content, we’ll keep on having content, - // but we need move it. - if (definition) { - events.splice(text, 0, ['enter', heading, context]) - events.splice(definition + 1, 0, ['exit', events[content][1], context]) - events[content][1].end = Object.assign({}, events[definition][1].end) - } else { - events[content][1] = heading - } - - // Add the heading exit at the end. - events.push(['exit', heading, context]) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeSetextUnderline(effects, ok, nok) { - const self = this - /** @type {NonNullable} */ - let marker - return start - - /** - * At start of heading (setext) underline. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - let index = self.events.length - /** @type {boolean | undefined} */ - let paragraph - // Find an opening. - while (index--) { - // Skip enter/exit of line ending, line prefix, and content. - // We can now either have a definition or a paragraph. - if ( - self.events[index][1].type !== 'lineEnding' && - self.events[index][1].type !== 'linePrefix' && - self.events[index][1].type !== 'content' - ) { - paragraph = self.events[index][1].type === 'paragraph' - break - } - } - - // To do: handle lazy/pierce like `markdown-rs`. - // To do: parse indent like `markdown-rs`. - if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { - effects.enter('setextHeadingLine') - marker = code - return before(code) - } - return nok(code) - } - - /** - * After optional whitespace, at `-` or `=`. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('setextHeadingLineSequence') - return inside(code) - } - - /** - * In sequence. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - effects.exit('setextHeadingLineSequence') - return markdownSpace(code) - ? factorySpace(effects, after, 'lineSuffix')(code) - : after(code) - } - - /** - * After sequence, after optional whitespace. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('setextHeadingLine') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js -/** - * List of lowercase HTML “block” tag names. - * - * The list, when parsing HTML (flow), results in more relaxed rules (condition - * 6). - * Because they are known blocks, the HTML-like syntax doesn’t have to be - * strictly parsed. - * For tag names not in this list, a more strict algorithm (condition 7) is used - * to detect whether the HTML-like syntax is seen as HTML (flow) or not. - * - * This is copied from: - * . - * - * > 👉 **Note**: `search` was added in `CommonMark@0.31`. - */ -const htmlBlockNames = [ - 'address', - 'article', - 'aside', - 'base', - 'basefont', - 'blockquote', - 'body', - 'caption', - 'center', - 'col', - 'colgroup', - 'dd', - 'details', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'frame', - 'frameset', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hr', - 'html', - 'iframe', - 'legend', - 'li', - 'link', - 'main', - 'menu', - 'menuitem', - 'nav', - 'noframes', - 'ol', - 'optgroup', - 'option', - 'p', - 'param', - 'search', - 'section', - 'summary', - 'table', - 'tbody', - 'td', - 'tfoot', - 'th', - 'thead', - 'title', - 'tr', - 'track', - 'ul' -] - -/** - * List of lowercase HTML “raw” tag names. - * - * The list, when parsing HTML (flow), results in HTML that can include lines - * without exiting, until a closing tag also in this list is found (condition - * 1). - * - * This module is copied from: - * . - * - * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - */ -const htmlRawNames = ['pre', 'script', 'style', 'textarea'] - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - -/** @type {Construct} */ -const htmlFlow = { - name: 'htmlFlow', - tokenize: tokenizeHtmlFlow, - resolveTo: resolveToHtmlFlow, - concrete: true -} - -/** @type {Construct} */ -const blankLineBefore = { - tokenize: tokenizeBlankLineBefore, - partial: true -} -const nonLazyContinuationStart = { - tokenize: tokenizeNonLazyContinuationStart, - partial: true -} - -/** @type {Resolver} */ -function resolveToHtmlFlow(events) { - let index = events.length - while (index--) { - if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { - break - } - } - if (index > 1 && events[index - 2][1].type === 'linePrefix') { - // Add the prefix start to the HTML token. - events[index][1].start = events[index - 2][1].start - // Add the prefix start to the HTML line token. - events[index + 1][1].start = events[index - 2][1].start - // Remove the line prefix. - events.splice(index - 2, 2) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlFlow(effects, ok, nok) { - const self = this - /** @type {number} */ - let marker - /** @type {boolean} */ - let closingTag - /** @type {string} */ - let buffer - /** @type {number} */ - let index - /** @type {Code} */ - let markerB - return start - - /** - * Start of HTML (flow). - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * At `<`, after optional whitespace. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('htmlFlow') - effects.enter('htmlFlowData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * > | - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - closingTag = true - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - marker = 3 - // To do: - // tokenizer.concrete = true - // To do: use `markdown-rs` style interrupt. - // While we’re in an instruction instead of a declaration, we’re on a `?` - // right now, so we do need to search for `>`, similar to declarations. - return self.interrupt ? ok : continuationDeclarationInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After ` | - * ^ - * > | - * ^ - * > | &<]]> - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - marker = 2 - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - marker = 5 - index = 0 - return cdataOpenInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - marker = 4 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After ` | - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After ` | &<]]> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - if (index === value.length) { - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return cdataOpenInside - } - return nok(code) - } - - /** - * After ` | - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * In tag name. - * - * ```markdown - * > | - * ^^ - * > | - * ^^ - * ``` - * - * @type {State} - */ - function tagName(code) { - if ( - code === null || - code === 47 || - code === 62 || - markdownLineEndingOrSpace(code) - ) { - const slash = code === 47 - const name = buffer.toLowerCase() - if (!slash && !closingTag && htmlRawNames.includes(name)) { - marker = 1 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - if (htmlBlockNames.includes(buffer.toLowerCase())) { - marker = 6 - if (slash) { - effects.consume(code) - return basicSelfClosing - } - - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - marker = 7 - // Do not support complete HTML when interrupting. - return self.interrupt && !self.parser.lazy[self.now().line] - ? nok(code) - : closingTag - ? completeClosingTagAfter(code) - : completeAttributeNameBefore(code) - } - - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - buffer += String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After closing slash of a basic tag name. - * - * ```markdown - * > |
      - * ^ - * ``` - * - * @type {State} - */ - function basicSelfClosing(code) { - if (code === 62) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return nok(code) - } - - /** - * After closing slash of a complete tag name. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeClosingTagAfter(code) { - if (markdownSpace(code)) { - effects.consume(code) - return completeClosingTagAfter - } - return completeEnd(code) - } - - /** - * At an attribute name. - * - * At first, this state is used after a complete tag name, after whitespace, - * where it expects optional attributes or the end of the tag. - * It is also reused after attributes, when expecting more optional - * attributes. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * > | - * ^ - * > | - * ^ - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameBefore(code) { - if (code === 47) { - effects.consume(code) - return completeEnd - } - - // ASCII alphanumerical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return completeAttributeName - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameBefore - } - return completeEnd(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeName(code) { - // ASCII alphanumerical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return completeAttributeName - } - return completeAttributeNameAfter(code) - } - - /** - * After attribute name, at an optional initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return completeAttributeValueBefore - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameAfter - } - return completeAttributeNameBefore(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - markerB = code - return completeAttributeValueQuoted - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeValueBefore - } - return completeAttributeValueUnquoted(code) - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuoted(code) { - if (code === markerB) { - effects.consume(code) - markerB = null - return completeAttributeValueQuotedAfter - } - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return completeAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 47 || - code === 60 || - code === 61 || - code === 62 || - code === 96 || - markdownLineEndingOrSpace(code) - ) { - return completeAttributeNameAfter(code) - } - effects.consume(code) - return completeAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the - * end of the tag. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownSpace(code)) { - return completeAttributeNameBefore(code) - } - return nok(code) - } - - /** - * In certain circumstances of a complete tag where only an `>` is allowed. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeEnd(code) { - if (code === 62) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * After `>` in a complete tag. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAfter(code) { - if (code === null || markdownLineEnding(code)) { - // // Do not form containers. - // tokenizer.concrete = true - return continuation(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * In continuation of any HTML kind. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function continuation(code) { - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationCommentInside - } - if (code === 60 && marker === 1) { - effects.consume(code) - return continuationRawTagOpen - } - if (code === 62 && marker === 4) { - effects.consume(code) - return continuationClose - } - if (code === 63 && marker === 3) { - effects.consume(code) - return continuationDeclarationInside - } - if (code === 93 && marker === 5) { - effects.consume(code) - return continuationCdataInside - } - if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { - effects.exit('htmlFlowData') - return effects.check( - blankLineBefore, - continuationAfter, - continuationStart - )(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationStart(code) - } - effects.consume(code) - return continuation - } - - /** - * In continuation, at eol. - * - * ```markdown - * > | - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStart(code) { - return effects.check( - nonLazyContinuationStart, - continuationStartNonLazy, - continuationAfter - )(code) - } - - /** - * In continuation, at eol, before non-lazy content. - * - * ```markdown - * > | - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStartNonLazy(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return continuationBefore - } - - /** - * In continuation, before non-lazy content. - * - * ```markdown - * | - * > | asd - * ^ - * ``` - * - * @type {State} - */ - function continuationBefore(code) { - if (code === null || markdownLineEnding(code)) { - return continuationStart(code) - } - effects.enter('htmlFlowData') - return continuation(code) - } - - /** - * In comment continuation, after one `-`, expecting another. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function continuationCommentInside(code) { - if (code === 45) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In raw continuation, after `<`, at `/`. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function continuationRawTagOpen(code) { - if (code === 47) { - effects.consume(code) - buffer = '' - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In raw continuation, after ` | - * ^^^^^^ - * ``` - * - * @type {State} - */ - function continuationRawEndTag(code) { - if (code === 62) { - const name = buffer.toLowerCase() - if (htmlRawNames.includes(name)) { - effects.consume(code) - return continuationClose - } - return continuation(code) - } - if (asciiAlpha(code) && buffer.length < 8) { - effects.consume(code) - // @ts-expect-error: not null. - buffer += String.fromCharCode(code) - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In cdata continuation, after `]`, expecting `]>`. - * - * ```markdown - * > | &<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationCdataInside(code) { - if (code === 93) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In declaration or instruction continuation, at `>`. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * > | - * ^ - * > | - * ^ - * > | &<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationDeclarationInside(code) { - if (code === 62) { - effects.consume(code) - return continuationClose - } - - // More dashes. - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In closed continuation: everything we get until the eol/eof is part of it. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function continuationClose(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationAfter(code) - } - effects.consume(code) - return continuationClose - } - - /** - * Done. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function continuationAfter(code) { - effects.exit('htmlFlow') - // // Feel free to interrupt. - // tokenizer.interrupt = false - // // No longer concrete. - // tokenizer.concrete = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuationStart(effects, ok, nok) { - const self = this - return start - - /** - * At eol, before continuation. - * - * ```markdown - * > | * ```js - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return after - } - return nok(code) - } - - /** - * A continuation. - * - * ```markdown - * | * ```js - * > | b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLineBefore(effects, ok, nok) { - return start - - /** - * Before eol, expecting blank line. - * - * ```markdown - * > |
      - * ^ - * | - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return effects.attempt(blankLine, ok, nok) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const nonLazyContinuation = { - tokenize: tokenizeNonLazyContinuation, - partial: true -} - -/** @type {Construct} */ -const codeFenced = { - name: 'codeFenced', - tokenize: tokenizeCodeFenced, - concrete: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeFenced(effects, ok, nok) { - const self = this - /** @type {Construct} */ - const closeStart = { - tokenize: tokenizeCloseStart, - partial: true - } - let initialPrefix = 0 - let sizeOpen = 0 - /** @type {NonNullable} */ - let marker - return start - - /** - * Start of code. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse whitespace like `markdown-rs`. - return beforeSequenceOpen(code) - } - - /** - * In opening fence, after prefix, at sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeSequenceOpen(code) { - const tail = self.events[self.events.length - 1] - initialPrefix = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - marker = code - effects.enter('codeFenced') - effects.enter('codeFencedFence') - effects.enter('codeFencedFenceSequence') - return sequenceOpen(code) - } - - /** - * In opening fence sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === marker) { - sizeOpen++ - effects.consume(code) - return sequenceOpen - } - if (sizeOpen < 3) { - return nok(code) - } - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, infoBefore, 'whitespace')(code) - : infoBefore(code) - } - - /** - * In opening fence, after the sequence (and optional whitespace), before info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function infoBefore(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return self.interrupt - ? ok(code) - : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFencedFenceInfo') - effects.enter('chunkString', { - contentType: 'string' - }) - return info(code) - } - - /** - * In info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function info(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return infoBefore(code) - } - if (markdownSpace(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return factorySpace(effects, metaBefore, 'whitespace')(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return info - } - - /** - * In opening fence, after info and whitespace, before meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function metaBefore(code) { - if (code === null || markdownLineEnding(code)) { - return infoBefore(code) - } - effects.enter('codeFencedFenceMeta') - effects.enter('chunkString', { - contentType: 'string' - }) - return meta(code) - } - - /** - * In meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function meta(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceMeta') - return infoBefore(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return meta - } - - /** - * At eol/eof in code, before a non-lazy closing fence or content. - * - * ```markdown - * > | ~~~js - * ^ - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function atNonLazyBreak(code) { - return effects.attempt(closeStart, after, contentBefore)(code) - } - - /** - * Before code content, not a closing fence, at eol. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return contentStart - } - - /** - * Before code content, not a closing fence. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentStart(code) { - return initialPrefix > 0 && markdownSpace(code) - ? factorySpace( - effects, - beforeContentChunk, - 'linePrefix', - initialPrefix + 1 - )(code) - : beforeContentChunk(code) - } - - /** - * Before code content, after optional prefix. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeContentChunk(code) { - if (code === null || markdownLineEnding(code)) { - return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFlowValue') - return contentChunk(code) - } - - /** - * In code content. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^^^^^^^^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentChunk(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return beforeContentChunk(code) - } - effects.consume(code) - return contentChunk - } - - /** - * After code. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - effects.exit('codeFenced') - return ok(code) - } - - /** - * @this {TokenizeContext} - * @type {Tokenizer} - */ - function tokenizeCloseStart(effects, ok, nok) { - let size = 0 - return startBefore - - /** - * - * - * @type {State} - */ - function startBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return start - } - - /** - * Before closing fence, at optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Always populated by defaults. - - // To do: `enter` here or in next state? - effects.enter('codeFencedFence') - return markdownSpace(code) - ? factorySpace( - effects, - beforeSequenceClose, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : beforeSequenceClose(code) - } - - /** - * In closing fence, after optional whitespace, at sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function beforeSequenceClose(code) { - if (code === marker) { - effects.enter('codeFencedFenceSequence') - return sequenceClose(code) - } - return nok(code) - } - - /** - * In closing fence sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - if (code === marker) { - size++ - effects.consume(code) - return sequenceClose - } - if (size >= sizeOpen) { - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) - : sequenceCloseAfter(code) - } - return nok(code) - } - - /** - * After closing fence sequence, after optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceCloseAfter(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return ok(code) - } - return nok(code) - } - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuation(effects, ok, nok) { - const self = this - return start - - /** - * - * - * @type {State} - */ - function start(code) { - if (code === null) { - return nok(code) - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineStart - } - - /** - * - * - * @type {State} - */ - function lineStart(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/character-entities/index.js -/** - * Map of named character references. - * - * @type {Record} - */ -const characterEntities = { - AElig: 'Æ', - AMP: '&', - Aacute: 'Á', - Abreve: 'Ă', - Acirc: 'Â', - Acy: 'А', - Afr: '𝔄', - Agrave: 'À', - Alpha: 'Α', - Amacr: 'Ā', - And: '⩓', - Aogon: 'Ą', - Aopf: '𝔸', - ApplyFunction: '⁡', - Aring: 'Å', - Ascr: '𝒜', - Assign: '≔', - Atilde: 'Ã', - Auml: 'Ä', - Backslash: '∖', - Barv: '⫧', - Barwed: '⌆', - Bcy: 'Б', - Because: '∵', - Bernoullis: 'ℬ', - Beta: 'Β', - Bfr: '𝔅', - Bopf: '𝔹', - Breve: '˘', - Bscr: 'ℬ', - Bumpeq: '≎', - CHcy: 'Ч', - COPY: '©', - Cacute: 'Ć', - Cap: '⋒', - CapitalDifferentialD: 'ⅅ', - Cayleys: 'ℭ', - Ccaron: 'Č', - Ccedil: 'Ç', - Ccirc: 'Ĉ', - Cconint: '∰', - Cdot: 'Ċ', - Cedilla: '¸', - CenterDot: '·', - Cfr: 'ℭ', - Chi: 'Χ', - CircleDot: '⊙', - CircleMinus: '⊖', - CirclePlus: '⊕', - CircleTimes: '⊗', - ClockwiseContourIntegral: '∲', - CloseCurlyDoubleQuote: '”', - CloseCurlyQuote: '’', - Colon: '∷', - Colone: '⩴', - Congruent: '≡', - Conint: '∯', - ContourIntegral: '∮', - Copf: 'ℂ', - Coproduct: '∐', - CounterClockwiseContourIntegral: '∳', - Cross: '⨯', - Cscr: '𝒞', - Cup: '⋓', - CupCap: '≍', - DD: 'ⅅ', - DDotrahd: '⤑', - DJcy: 'Ђ', - DScy: 'Ѕ', - DZcy: 'Џ', - Dagger: '‡', - Darr: '↡', - Dashv: '⫤', - Dcaron: 'Ď', - Dcy: 'Д', - Del: '∇', - Delta: 'Δ', - Dfr: '𝔇', - DiacriticalAcute: '´', - DiacriticalDot: '˙', - DiacriticalDoubleAcute: '˝', - DiacriticalGrave: '`', - DiacriticalTilde: '˜', - Diamond: '⋄', - DifferentialD: 'ⅆ', - Dopf: '𝔻', - Dot: '¨', - DotDot: '⃜', - DotEqual: '≐', - DoubleContourIntegral: '∯', - DoubleDot: '¨', - DoubleDownArrow: '⇓', - DoubleLeftArrow: '⇐', - DoubleLeftRightArrow: '⇔', - DoubleLeftTee: '⫤', - DoubleLongLeftArrow: '⟸', - DoubleLongLeftRightArrow: '⟺', - DoubleLongRightArrow: '⟹', - DoubleRightArrow: '⇒', - DoubleRightTee: '⊨', - DoubleUpArrow: '⇑', - DoubleUpDownArrow: '⇕', - DoubleVerticalBar: '∥', - DownArrow: '↓', - DownArrowBar: '⤓', - DownArrowUpArrow: '⇵', - DownBreve: '̑', - DownLeftRightVector: '⥐', - DownLeftTeeVector: '⥞', - DownLeftVector: '↽', - DownLeftVectorBar: '⥖', - DownRightTeeVector: '⥟', - DownRightVector: '⇁', - DownRightVectorBar: '⥗', - DownTee: '⊤', - DownTeeArrow: '↧', - Downarrow: '⇓', - Dscr: '𝒟', - Dstrok: 'Đ', - ENG: 'Ŋ', - ETH: 'Ð', - Eacute: 'É', - Ecaron: 'Ě', - Ecirc: 'Ê', - Ecy: 'Э', - Edot: 'Ė', - Efr: '𝔈', - Egrave: 'È', - Element: '∈', - Emacr: 'Ē', - EmptySmallSquare: '◻', - EmptyVerySmallSquare: '▫', - Eogon: 'Ę', - Eopf: '𝔼', - Epsilon: 'Ε', - Equal: '⩵', - EqualTilde: '≂', - Equilibrium: '⇌', - Escr: 'ℰ', - Esim: '⩳', - Eta: 'Η', - Euml: 'Ë', - Exists: '∃', - ExponentialE: 'ⅇ', - Fcy: 'Ф', - Ffr: '𝔉', - FilledSmallSquare: '◼', - FilledVerySmallSquare: '▪', - Fopf: '𝔽', - ForAll: '∀', - Fouriertrf: 'ℱ', - Fscr: 'ℱ', - GJcy: 'Ѓ', - GT: '>', - Gamma: 'Γ', - Gammad: 'Ϝ', - Gbreve: 'Ğ', - Gcedil: 'Ģ', - Gcirc: 'Ĝ', - Gcy: 'Г', - Gdot: 'Ġ', - Gfr: '𝔊', - Gg: '⋙', - Gopf: '𝔾', - GreaterEqual: '≥', - GreaterEqualLess: '⋛', - GreaterFullEqual: '≧', - GreaterGreater: '⪢', - GreaterLess: '≷', - GreaterSlantEqual: '⩾', - GreaterTilde: '≳', - Gscr: '𝒢', - Gt: '≫', - HARDcy: 'Ъ', - Hacek: 'ˇ', - Hat: '^', - Hcirc: 'Ĥ', - Hfr: 'ℌ', - HilbertSpace: 'ℋ', - Hopf: 'ℍ', - HorizontalLine: '─', - Hscr: 'ℋ', - Hstrok: 'Ħ', - HumpDownHump: '≎', - HumpEqual: '≏', - IEcy: 'Е', - IJlig: 'IJ', - IOcy: 'Ё', - Iacute: 'Í', - Icirc: 'Î', - Icy: 'И', - Idot: 'İ', - Ifr: 'ℑ', - Igrave: 'Ì', - Im: 'ℑ', - Imacr: 'Ī', - ImaginaryI: 'ⅈ', - Implies: '⇒', - Int: '∬', - Integral: '∫', - Intersection: '⋂', - InvisibleComma: '⁣', - InvisibleTimes: '⁢', - Iogon: 'Į', - Iopf: '𝕀', - Iota: 'Ι', - Iscr: 'ℐ', - Itilde: 'Ĩ', - Iukcy: 'І', - Iuml: 'Ï', - Jcirc: 'Ĵ', - Jcy: 'Й', - Jfr: '𝔍', - Jopf: '𝕁', - Jscr: '𝒥', - Jsercy: 'Ј', - Jukcy: 'Є', - KHcy: 'Х', - KJcy: 'Ќ', - Kappa: 'Κ', - Kcedil: 'Ķ', - Kcy: 'К', - Kfr: '𝔎', - Kopf: '𝕂', - Kscr: '𝒦', - LJcy: 'Љ', - LT: '<', - Lacute: 'Ĺ', - Lambda: 'Λ', - Lang: '⟪', - Laplacetrf: 'ℒ', - Larr: '↞', - Lcaron: 'Ľ', - Lcedil: 'Ļ', - Lcy: 'Л', - LeftAngleBracket: '⟨', - LeftArrow: '←', - LeftArrowBar: '⇤', - LeftArrowRightArrow: '⇆', - LeftCeiling: '⌈', - LeftDoubleBracket: '⟦', - LeftDownTeeVector: '⥡', - LeftDownVector: '⇃', - LeftDownVectorBar: '⥙', - LeftFloor: '⌊', - LeftRightArrow: '↔', - LeftRightVector: '⥎', - LeftTee: '⊣', - LeftTeeArrow: '↤', - LeftTeeVector: '⥚', - LeftTriangle: '⊲', - LeftTriangleBar: '⧏', - LeftTriangleEqual: '⊴', - LeftUpDownVector: '⥑', - LeftUpTeeVector: '⥠', - LeftUpVector: '↿', - LeftUpVectorBar: '⥘', - LeftVector: '↼', - LeftVectorBar: '⥒', - Leftarrow: '⇐', - Leftrightarrow: '⇔', - LessEqualGreater: '⋚', - LessFullEqual: '≦', - LessGreater: '≶', - LessLess: '⪡', - LessSlantEqual: '⩽', - LessTilde: '≲', - Lfr: '𝔏', - Ll: '⋘', - Lleftarrow: '⇚', - Lmidot: 'Ŀ', - LongLeftArrow: '⟵', - LongLeftRightArrow: '⟷', - LongRightArrow: '⟶', - Longleftarrow: '⟸', - Longleftrightarrow: '⟺', - Longrightarrow: '⟹', - Lopf: '𝕃', - LowerLeftArrow: '↙', - LowerRightArrow: '↘', - Lscr: 'ℒ', - Lsh: '↰', - Lstrok: 'Ł', - Lt: '≪', - Map: '⤅', - Mcy: 'М', - MediumSpace: ' ', - Mellintrf: 'ℳ', - Mfr: '𝔐', - MinusPlus: '∓', - Mopf: '𝕄', - Mscr: 'ℳ', - Mu: 'Μ', - NJcy: 'Њ', - Nacute: 'Ń', - Ncaron: 'Ň', - Ncedil: 'Ņ', - Ncy: 'Н', - NegativeMediumSpace: '​', - NegativeThickSpace: '​', - NegativeThinSpace: '​', - NegativeVeryThinSpace: '​', - NestedGreaterGreater: '≫', - NestedLessLess: '≪', - NewLine: '\n', - Nfr: '𝔑', - NoBreak: '⁠', - NonBreakingSpace: ' ', - Nopf: 'ℕ', - Not: '⫬', - NotCongruent: '≢', - NotCupCap: '≭', - NotDoubleVerticalBar: '∦', - NotElement: '∉', - NotEqual: '≠', - NotEqualTilde: '≂̸', - NotExists: '∄', - NotGreater: '≯', - NotGreaterEqual: '≱', - NotGreaterFullEqual: '≧̸', - NotGreaterGreater: '≫̸', - NotGreaterLess: '≹', - NotGreaterSlantEqual: '⩾̸', - NotGreaterTilde: '≵', - NotHumpDownHump: '≎̸', - NotHumpEqual: '≏̸', - NotLeftTriangle: '⋪', - NotLeftTriangleBar: '⧏̸', - NotLeftTriangleEqual: '⋬', - NotLess: '≮', - NotLessEqual: '≰', - NotLessGreater: '≸', - NotLessLess: '≪̸', - NotLessSlantEqual: '⩽̸', - NotLessTilde: '≴', - NotNestedGreaterGreater: '⪢̸', - NotNestedLessLess: '⪡̸', - NotPrecedes: '⊀', - NotPrecedesEqual: '⪯̸', - NotPrecedesSlantEqual: '⋠', - NotReverseElement: '∌', - NotRightTriangle: '⋫', - NotRightTriangleBar: '⧐̸', - NotRightTriangleEqual: '⋭', - NotSquareSubset: '⊏̸', - NotSquareSubsetEqual: '⋢', - NotSquareSuperset: '⊐̸', - NotSquareSupersetEqual: '⋣', - NotSubset: '⊂⃒', - NotSubsetEqual: '⊈', - NotSucceeds: '⊁', - NotSucceedsEqual: '⪰̸', - NotSucceedsSlantEqual: '⋡', - NotSucceedsTilde: '≿̸', - NotSuperset: '⊃⃒', - NotSupersetEqual: '⊉', - NotTilde: '≁', - NotTildeEqual: '≄', - NotTildeFullEqual: '≇', - NotTildeTilde: '≉', - NotVerticalBar: '∤', - Nscr: '𝒩', - Ntilde: 'Ñ', - Nu: 'Ν', - OElig: 'Œ', - Oacute: 'Ó', - Ocirc: 'Ô', - Ocy: 'О', - Odblac: 'Ő', - Ofr: '𝔒', - Ograve: 'Ò', - Omacr: 'Ō', - Omega: 'Ω', - Omicron: 'Ο', - Oopf: '𝕆', - OpenCurlyDoubleQuote: '“', - OpenCurlyQuote: '‘', - Or: '⩔', - Oscr: '𝒪', - Oslash: 'Ø', - Otilde: 'Õ', - Otimes: '⨷', - Ouml: 'Ö', - OverBar: '‾', - OverBrace: '⏞', - OverBracket: '⎴', - OverParenthesis: '⏜', - PartialD: '∂', - Pcy: 'П', - Pfr: '𝔓', - Phi: 'Φ', - Pi: 'Π', - PlusMinus: '±', - Poincareplane: 'ℌ', - Popf: 'ℙ', - Pr: '⪻', - Precedes: '≺', - PrecedesEqual: '⪯', - PrecedesSlantEqual: '≼', - PrecedesTilde: '≾', - Prime: '″', - Product: '∏', - Proportion: '∷', - Proportional: '∝', - Pscr: '𝒫', - Psi: 'Ψ', - QUOT: '"', - Qfr: '𝔔', - Qopf: 'ℚ', - Qscr: '𝒬', - RBarr: '⤐', - REG: '®', - Racute: 'Ŕ', - Rang: '⟫', - Rarr: '↠', - Rarrtl: '⤖', - Rcaron: 'Ř', - Rcedil: 'Ŗ', - Rcy: 'Р', - Re: 'ℜ', - ReverseElement: '∋', - ReverseEquilibrium: '⇋', - ReverseUpEquilibrium: '⥯', - Rfr: 'ℜ', - Rho: 'Ρ', - RightAngleBracket: '⟩', - RightArrow: '→', - RightArrowBar: '⇥', - RightArrowLeftArrow: '⇄', - RightCeiling: '⌉', - RightDoubleBracket: '⟧', - RightDownTeeVector: '⥝', - RightDownVector: '⇂', - RightDownVectorBar: '⥕', - RightFloor: '⌋', - RightTee: '⊢', - RightTeeArrow: '↦', - RightTeeVector: '⥛', - RightTriangle: '⊳', - RightTriangleBar: '⧐', - RightTriangleEqual: '⊵', - RightUpDownVector: '⥏', - RightUpTeeVector: '⥜', - RightUpVector: '↾', - RightUpVectorBar: '⥔', - RightVector: '⇀', - RightVectorBar: '⥓', - Rightarrow: '⇒', - Ropf: 'ℝ', - RoundImplies: '⥰', - Rrightarrow: '⇛', - Rscr: 'ℛ', - Rsh: '↱', - RuleDelayed: '⧴', - SHCHcy: 'Щ', - SHcy: 'Ш', - SOFTcy: 'Ь', - Sacute: 'Ś', - Sc: '⪼', - Scaron: 'Š', - Scedil: 'Ş', - Scirc: 'Ŝ', - Scy: 'С', - Sfr: '𝔖', - ShortDownArrow: '↓', - ShortLeftArrow: '←', - ShortRightArrow: '→', - ShortUpArrow: '↑', - Sigma: 'Σ', - SmallCircle: '∘', - Sopf: '𝕊', - Sqrt: '√', - Square: '□', - SquareIntersection: '⊓', - SquareSubset: '⊏', - SquareSubsetEqual: '⊑', - SquareSuperset: '⊐', - SquareSupersetEqual: '⊒', - SquareUnion: '⊔', - Sscr: '𝒮', - Star: '⋆', - Sub: '⋐', - Subset: '⋐', - SubsetEqual: '⊆', - Succeeds: '≻', - SucceedsEqual: '⪰', - SucceedsSlantEqual: '≽', - SucceedsTilde: '≿', - SuchThat: '∋', - Sum: '∑', - Sup: '⋑', - Superset: '⊃', - SupersetEqual: '⊇', - Supset: '⋑', - THORN: 'Þ', - TRADE: '™', - TSHcy: 'Ћ', - TScy: 'Ц', - Tab: '\t', - Tau: 'Τ', - Tcaron: 'Ť', - Tcedil: 'Ţ', - Tcy: 'Т', - Tfr: '𝔗', - Therefore: '∴', - Theta: 'Θ', - ThickSpace: '  ', - ThinSpace: ' ', - Tilde: '∼', - TildeEqual: '≃', - TildeFullEqual: '≅', - TildeTilde: '≈', - Topf: '𝕋', - TripleDot: '⃛', - Tscr: '𝒯', - Tstrok: 'Ŧ', - Uacute: 'Ú', - Uarr: '↟', - Uarrocir: '⥉', - Ubrcy: 'Ў', - Ubreve: 'Ŭ', - Ucirc: 'Û', - Ucy: 'У', - Udblac: 'Ű', - Ufr: '𝔘', - Ugrave: 'Ù', - Umacr: 'Ū', - UnderBar: '_', - UnderBrace: '⏟', - UnderBracket: '⎵', - UnderParenthesis: '⏝', - Union: '⋃', - UnionPlus: '⊎', - Uogon: 'Ų', - Uopf: '𝕌', - UpArrow: '↑', - UpArrowBar: '⤒', - UpArrowDownArrow: '⇅', - UpDownArrow: '↕', - UpEquilibrium: '⥮', - UpTee: '⊥', - UpTeeArrow: '↥', - Uparrow: '⇑', - Updownarrow: '⇕', - UpperLeftArrow: '↖', - UpperRightArrow: '↗', - Upsi: 'ϒ', - Upsilon: 'Υ', - Uring: 'Ů', - Uscr: '𝒰', - Utilde: 'Ũ', - Uuml: 'Ü', - VDash: '⊫', - Vbar: '⫫', - Vcy: 'В', - Vdash: '⊩', - Vdashl: '⫦', - Vee: '⋁', - Verbar: '‖', - Vert: '‖', - VerticalBar: '∣', - VerticalLine: '|', - VerticalSeparator: '❘', - VerticalTilde: '≀', - VeryThinSpace: ' ', - Vfr: '𝔙', - Vopf: '𝕍', - Vscr: '𝒱', - Vvdash: '⊪', - Wcirc: 'Ŵ', - Wedge: '⋀', - Wfr: '𝔚', - Wopf: '𝕎', - Wscr: '𝒲', - Xfr: '𝔛', - Xi: 'Ξ', - Xopf: '𝕏', - Xscr: '𝒳', - YAcy: 'Я', - YIcy: 'Ї', - YUcy: 'Ю', - Yacute: 'Ý', - Ycirc: 'Ŷ', - Ycy: 'Ы', - Yfr: '𝔜', - Yopf: '𝕐', - Yscr: '𝒴', - Yuml: 'Ÿ', - ZHcy: 'Ж', - Zacute: 'Ź', - Zcaron: 'Ž', - Zcy: 'З', - Zdot: 'Ż', - ZeroWidthSpace: '​', - Zeta: 'Ζ', - Zfr: 'ℨ', - Zopf: 'ℤ', - Zscr: '𝒵', - aacute: 'á', - abreve: 'ă', - ac: '∾', - acE: '∾̳', - acd: '∿', - acirc: 'â', - acute: '´', - acy: 'а', - aelig: 'æ', - af: '⁡', - afr: '𝔞', - agrave: 'à', - alefsym: 'ℵ', - aleph: 'ℵ', - alpha: 'α', - amacr: 'ā', - amalg: '⨿', - amp: '&', - and: '∧', - andand: '⩕', - andd: '⩜', - andslope: '⩘', - andv: '⩚', - ang: '∠', - ange: '⦤', - angle: '∠', - angmsd: '∡', - angmsdaa: '⦨', - angmsdab: '⦩', - angmsdac: '⦪', - angmsdad: '⦫', - angmsdae: '⦬', - angmsdaf: '⦭', - angmsdag: '⦮', - angmsdah: '⦯', - angrt: '∟', - angrtvb: '⊾', - angrtvbd: '⦝', - angsph: '∢', - angst: 'Å', - angzarr: '⍼', - aogon: 'ą', - aopf: '𝕒', - ap: '≈', - apE: '⩰', - apacir: '⩯', - ape: '≊', - apid: '≋', - apos: "'", - approx: '≈', - approxeq: '≊', - aring: 'å', - ascr: '𝒶', - ast: '*', - asymp: '≈', - asympeq: '≍', - atilde: 'ã', - auml: 'ä', - awconint: '∳', - awint: '⨑', - bNot: '⫭', - backcong: '≌', - backepsilon: '϶', - backprime: '‵', - backsim: '∽', - backsimeq: '⋍', - barvee: '⊽', - barwed: '⌅', - barwedge: '⌅', - bbrk: '⎵', - bbrktbrk: '⎶', - bcong: '≌', - bcy: 'б', - bdquo: '„', - becaus: '∵', - because: '∵', - bemptyv: '⦰', - bepsi: '϶', - bernou: 'ℬ', - beta: 'β', - beth: 'ℶ', - between: '≬', - bfr: '𝔟', - bigcap: '⋂', - bigcirc: '◯', - bigcup: '⋃', - bigodot: '⨀', - bigoplus: '⨁', - bigotimes: '⨂', - bigsqcup: '⨆', - bigstar: '★', - bigtriangledown: '▽', - bigtriangleup: '△', - biguplus: '⨄', - bigvee: '⋁', - bigwedge: '⋀', - bkarow: '⤍', - blacklozenge: '⧫', - blacksquare: '▪', - blacktriangle: '▴', - blacktriangledown: '▾', - blacktriangleleft: '◂', - blacktriangleright: '▸', - blank: '␣', - blk12: '▒', - blk14: '░', - blk34: '▓', - block: '█', - bne: '=⃥', - bnequiv: '≡⃥', - bnot: '⌐', - bopf: '𝕓', - bot: '⊥', - bottom: '⊥', - bowtie: '⋈', - boxDL: '╗', - boxDR: '╔', - boxDl: '╖', - boxDr: '╓', - boxH: '═', - boxHD: '╦', - boxHU: '╩', - boxHd: '╤', - boxHu: '╧', - boxUL: '╝', - boxUR: '╚', - boxUl: '╜', - boxUr: '╙', - boxV: '║', - boxVH: '╬', - boxVL: '╣', - boxVR: '╠', - boxVh: '╫', - boxVl: '╢', - boxVr: '╟', - boxbox: '⧉', - boxdL: '╕', - boxdR: '╒', - boxdl: '┐', - boxdr: '┌', - boxh: '─', - boxhD: '╥', - boxhU: '╨', - boxhd: '┬', - boxhu: '┴', - boxminus: '⊟', - boxplus: '⊞', - boxtimes: '⊠', - boxuL: '╛', - boxuR: '╘', - boxul: '┘', - boxur: '└', - boxv: '│', - boxvH: '╪', - boxvL: '╡', - boxvR: '╞', - boxvh: '┼', - boxvl: '┤', - boxvr: '├', - bprime: '‵', - breve: '˘', - brvbar: '¦', - bscr: '𝒷', - bsemi: '⁏', - bsim: '∽', - bsime: '⋍', - bsol: '\\', - bsolb: '⧅', - bsolhsub: '⟈', - bull: '•', - bullet: '•', - bump: '≎', - bumpE: '⪮', - bumpe: '≏', - bumpeq: '≏', - cacute: 'ć', - cap: '∩', - capand: '⩄', - capbrcup: '⩉', - capcap: '⩋', - capcup: '⩇', - capdot: '⩀', - caps: '∩︀', - caret: '⁁', - caron: 'ˇ', - ccaps: '⩍', - ccaron: 'č', - ccedil: 'ç', - ccirc: 'ĉ', - ccups: '⩌', - ccupssm: '⩐', - cdot: 'ċ', - cedil: '¸', - cemptyv: '⦲', - cent: '¢', - centerdot: '·', - cfr: '𝔠', - chcy: 'ч', - check: '✓', - checkmark: '✓', - chi: 'χ', - cir: '○', - cirE: '⧃', - circ: 'ˆ', - circeq: '≗', - circlearrowleft: '↺', - circlearrowright: '↻', - circledR: '®', - circledS: 'Ⓢ', - circledast: '⊛', - circledcirc: '⊚', - circleddash: '⊝', - cire: '≗', - cirfnint: '⨐', - cirmid: '⫯', - cirscir: '⧂', - clubs: '♣', - clubsuit: '♣', - colon: ':', - colone: '≔', - coloneq: '≔', - comma: ',', - commat: '@', - comp: '∁', - compfn: '∘', - complement: '∁', - complexes: 'ℂ', - cong: '≅', - congdot: '⩭', - conint: '∮', - copf: '𝕔', - coprod: '∐', - copy: '©', - copysr: '℗', - crarr: '↵', - cross: '✗', - cscr: '𝒸', - csub: '⫏', - csube: '⫑', - csup: '⫐', - csupe: '⫒', - ctdot: '⋯', - cudarrl: '⤸', - cudarrr: '⤵', - cuepr: '⋞', - cuesc: '⋟', - cularr: '↶', - cularrp: '⤽', - cup: '∪', - cupbrcap: '⩈', - cupcap: '⩆', - cupcup: '⩊', - cupdot: '⊍', - cupor: '⩅', - cups: '∪︀', - curarr: '↷', - curarrm: '⤼', - curlyeqprec: '⋞', - curlyeqsucc: '⋟', - curlyvee: '⋎', - curlywedge: '⋏', - curren: '¤', - curvearrowleft: '↶', - curvearrowright: '↷', - cuvee: '⋎', - cuwed: '⋏', - cwconint: '∲', - cwint: '∱', - cylcty: '⌭', - dArr: '⇓', - dHar: '⥥', - dagger: '†', - daleth: 'ℸ', - darr: '↓', - dash: '‐', - dashv: '⊣', - dbkarow: '⤏', - dblac: '˝', - dcaron: 'ď', - dcy: 'д', - dd: 'ⅆ', - ddagger: '‡', - ddarr: '⇊', - ddotseq: '⩷', - deg: '°', - delta: 'δ', - demptyv: '⦱', - dfisht: '⥿', - dfr: '𝔡', - dharl: '⇃', - dharr: '⇂', - diam: '⋄', - diamond: '⋄', - diamondsuit: '♦', - diams: '♦', - die: '¨', - digamma: 'ϝ', - disin: '⋲', - div: '÷', - divide: '÷', - divideontimes: '⋇', - divonx: '⋇', - djcy: 'ђ', - dlcorn: '⌞', - dlcrop: '⌍', - dollar: '$', - dopf: '𝕕', - dot: '˙', - doteq: '≐', - doteqdot: '≑', - dotminus: '∸', - dotplus: '∔', - dotsquare: '⊡', - doublebarwedge: '⌆', - downarrow: '↓', - downdownarrows: '⇊', - downharpoonleft: '⇃', - downharpoonright: '⇂', - drbkarow: '⤐', - drcorn: '⌟', - drcrop: '⌌', - dscr: '𝒹', - dscy: 'ѕ', - dsol: '⧶', - dstrok: 'đ', - dtdot: '⋱', - dtri: '▿', - dtrif: '▾', - duarr: '⇵', - duhar: '⥯', - dwangle: '⦦', - dzcy: 'џ', - dzigrarr: '⟿', - eDDot: '⩷', - eDot: '≑', - eacute: 'é', - easter: '⩮', - ecaron: 'ě', - ecir: '≖', - ecirc: 'ê', - ecolon: '≕', - ecy: 'э', - edot: 'ė', - ee: 'ⅇ', - efDot: '≒', - efr: '𝔢', - eg: '⪚', - egrave: 'è', - egs: '⪖', - egsdot: '⪘', - el: '⪙', - elinters: '⏧', - ell: 'ℓ', - els: '⪕', - elsdot: '⪗', - emacr: 'ē', - empty: '∅', - emptyset: '∅', - emptyv: '∅', - emsp13: ' ', - emsp14: ' ', - emsp: ' ', - eng: 'ŋ', - ensp: ' ', - eogon: 'ę', - eopf: '𝕖', - epar: '⋕', - eparsl: '⧣', - eplus: '⩱', - epsi: 'ε', - epsilon: 'ε', - epsiv: 'ϵ', - eqcirc: '≖', - eqcolon: '≕', - eqsim: '≂', - eqslantgtr: '⪖', - eqslantless: '⪕', - equals: '=', - equest: '≟', - equiv: '≡', - equivDD: '⩸', - eqvparsl: '⧥', - erDot: '≓', - erarr: '⥱', - escr: 'ℯ', - esdot: '≐', - esim: '≂', - eta: 'η', - eth: 'ð', - euml: 'ë', - euro: '€', - excl: '!', - exist: '∃', - expectation: 'ℰ', - exponentiale: 'ⅇ', - fallingdotseq: '≒', - fcy: 'ф', - female: '♀', - ffilig: 'ffi', - fflig: 'ff', - ffllig: 'ffl', - ffr: '𝔣', - filig: 'fi', - fjlig: 'fj', - flat: '♭', - fllig: 'fl', - fltns: '▱', - fnof: 'ƒ', - fopf: '𝕗', - forall: '∀', - fork: '⋔', - forkv: '⫙', - fpartint: '⨍', - frac12: '½', - frac13: '⅓', - frac14: '¼', - frac15: '⅕', - frac16: '⅙', - frac18: '⅛', - frac23: '⅔', - frac25: '⅖', - frac34: '¾', - frac35: '⅗', - frac38: '⅜', - frac45: '⅘', - frac56: '⅚', - frac58: '⅝', - frac78: '⅞', - frasl: '⁄', - frown: '⌢', - fscr: '𝒻', - gE: '≧', - gEl: '⪌', - gacute: 'ǵ', - gamma: 'γ', - gammad: 'ϝ', - gap: '⪆', - gbreve: 'ğ', - gcirc: 'ĝ', - gcy: 'г', - gdot: 'ġ', - ge: '≥', - gel: '⋛', - geq: '≥', - geqq: '≧', - geqslant: '⩾', - ges: '⩾', - gescc: '⪩', - gesdot: '⪀', - gesdoto: '⪂', - gesdotol: '⪄', - gesl: '⋛︀', - gesles: '⪔', - gfr: '𝔤', - gg: '≫', - ggg: '⋙', - gimel: 'ℷ', - gjcy: 'ѓ', - gl: '≷', - glE: '⪒', - gla: '⪥', - glj: '⪤', - gnE: '≩', - gnap: '⪊', - gnapprox: '⪊', - gne: '⪈', - gneq: '⪈', - gneqq: '≩', - gnsim: '⋧', - gopf: '𝕘', - grave: '`', - gscr: 'ℊ', - gsim: '≳', - gsime: '⪎', - gsiml: '⪐', - gt: '>', - gtcc: '⪧', - gtcir: '⩺', - gtdot: '⋗', - gtlPar: '⦕', - gtquest: '⩼', - gtrapprox: '⪆', - gtrarr: '⥸', - gtrdot: '⋗', - gtreqless: '⋛', - gtreqqless: '⪌', - gtrless: '≷', - gtrsim: '≳', - gvertneqq: '≩︀', - gvnE: '≩︀', - hArr: '⇔', - hairsp: ' ', - half: '½', - hamilt: 'ℋ', - hardcy: 'ъ', - harr: '↔', - harrcir: '⥈', - harrw: '↭', - hbar: 'ℏ', - hcirc: 'ĥ', - hearts: '♥', - heartsuit: '♥', - hellip: '…', - hercon: '⊹', - hfr: '𝔥', - hksearow: '⤥', - hkswarow: '⤦', - hoarr: '⇿', - homtht: '∻', - hookleftarrow: '↩', - hookrightarrow: '↪', - hopf: '𝕙', - horbar: '―', - hscr: '𝒽', - hslash: 'ℏ', - hstrok: 'ħ', - hybull: '⁃', - hyphen: '‐', - iacute: 'í', - ic: '⁣', - icirc: 'î', - icy: 'и', - iecy: 'е', - iexcl: '¡', - iff: '⇔', - ifr: '𝔦', - igrave: 'ì', - ii: 'ⅈ', - iiiint: '⨌', - iiint: '∭', - iinfin: '⧜', - iiota: '℩', - ijlig: 'ij', - imacr: 'ī', - image: 'ℑ', - imagline: 'ℐ', - imagpart: 'ℑ', - imath: 'ı', - imof: '⊷', - imped: 'Ƶ', - in: '∈', - incare: '℅', - infin: '∞', - infintie: '⧝', - inodot: 'ı', - int: '∫', - intcal: '⊺', - integers: 'ℤ', - intercal: '⊺', - intlarhk: '⨗', - intprod: '⨼', - iocy: 'ё', - iogon: 'į', - iopf: '𝕚', - iota: 'ι', - iprod: '⨼', - iquest: '¿', - iscr: '𝒾', - isin: '∈', - isinE: '⋹', - isindot: '⋵', - isins: '⋴', - isinsv: '⋳', - isinv: '∈', - it: '⁢', - itilde: 'ĩ', - iukcy: 'і', - iuml: 'ï', - jcirc: 'ĵ', - jcy: 'й', - jfr: '𝔧', - jmath: 'ȷ', - jopf: '𝕛', - jscr: '𝒿', - jsercy: 'ј', - jukcy: 'є', - kappa: 'κ', - kappav: 'ϰ', - kcedil: 'ķ', - kcy: 'к', - kfr: '𝔨', - kgreen: 'ĸ', - khcy: 'х', - kjcy: 'ќ', - kopf: '𝕜', - kscr: '𝓀', - lAarr: '⇚', - lArr: '⇐', - lAtail: '⤛', - lBarr: '⤎', - lE: '≦', - lEg: '⪋', - lHar: '⥢', - lacute: 'ĺ', - laemptyv: '⦴', - lagran: 'ℒ', - lambda: 'λ', - lang: '⟨', - langd: '⦑', - langle: '⟨', - lap: '⪅', - laquo: '«', - larr: '←', - larrb: '⇤', - larrbfs: '⤟', - larrfs: '⤝', - larrhk: '↩', - larrlp: '↫', - larrpl: '⤹', - larrsim: '⥳', - larrtl: '↢', - lat: '⪫', - latail: '⤙', - late: '⪭', - lates: '⪭︀', - lbarr: '⤌', - lbbrk: '❲', - lbrace: '{', - lbrack: '[', - lbrke: '⦋', - lbrksld: '⦏', - lbrkslu: '⦍', - lcaron: 'ľ', - lcedil: 'ļ', - lceil: '⌈', - lcub: '{', - lcy: 'л', - ldca: '⤶', - ldquo: '“', - ldquor: '„', - ldrdhar: '⥧', - ldrushar: '⥋', - ldsh: '↲', - le: '≤', - leftarrow: '←', - leftarrowtail: '↢', - leftharpoondown: '↽', - leftharpoonup: '↼', - leftleftarrows: '⇇', - leftrightarrow: '↔', - leftrightarrows: '⇆', - leftrightharpoons: '⇋', - leftrightsquigarrow: '↭', - leftthreetimes: '⋋', - leg: '⋚', - leq: '≤', - leqq: '≦', - leqslant: '⩽', - les: '⩽', - lescc: '⪨', - lesdot: '⩿', - lesdoto: '⪁', - lesdotor: '⪃', - lesg: '⋚︀', - lesges: '⪓', - lessapprox: '⪅', - lessdot: '⋖', - lesseqgtr: '⋚', - lesseqqgtr: '⪋', - lessgtr: '≶', - lesssim: '≲', - lfisht: '⥼', - lfloor: '⌊', - lfr: '𝔩', - lg: '≶', - lgE: '⪑', - lhard: '↽', - lharu: '↼', - lharul: '⥪', - lhblk: '▄', - ljcy: 'љ', - ll: '≪', - llarr: '⇇', - llcorner: '⌞', - llhard: '⥫', - lltri: '◺', - lmidot: 'ŀ', - lmoust: '⎰', - lmoustache: '⎰', - lnE: '≨', - lnap: '⪉', - lnapprox: '⪉', - lne: '⪇', - lneq: '⪇', - lneqq: '≨', - lnsim: '⋦', - loang: '⟬', - loarr: '⇽', - lobrk: '⟦', - longleftarrow: '⟵', - longleftrightarrow: '⟷', - longmapsto: '⟼', - longrightarrow: '⟶', - looparrowleft: '↫', - looparrowright: '↬', - lopar: '⦅', - lopf: '𝕝', - loplus: '⨭', - lotimes: '⨴', - lowast: '∗', - lowbar: '_', - loz: '◊', - lozenge: '◊', - lozf: '⧫', - lpar: '(', - lparlt: '⦓', - lrarr: '⇆', - lrcorner: '⌟', - lrhar: '⇋', - lrhard: '⥭', - lrm: '‎', - lrtri: '⊿', - lsaquo: '‹', - lscr: '𝓁', - lsh: '↰', - lsim: '≲', - lsime: '⪍', - lsimg: '⪏', - lsqb: '[', - lsquo: '‘', - lsquor: '‚', - lstrok: 'ł', - lt: '<', - ltcc: '⪦', - ltcir: '⩹', - ltdot: '⋖', - lthree: '⋋', - ltimes: '⋉', - ltlarr: '⥶', - ltquest: '⩻', - ltrPar: '⦖', - ltri: '◃', - ltrie: '⊴', - ltrif: '◂', - lurdshar: '⥊', - luruhar: '⥦', - lvertneqq: '≨︀', - lvnE: '≨︀', - mDDot: '∺', - macr: '¯', - male: '♂', - malt: '✠', - maltese: '✠', - map: '↦', - mapsto: '↦', - mapstodown: '↧', - mapstoleft: '↤', - mapstoup: '↥', - marker: '▮', - mcomma: '⨩', - mcy: 'м', - mdash: '—', - measuredangle: '∡', - mfr: '𝔪', - mho: '℧', - micro: 'µ', - mid: '∣', - midast: '*', - midcir: '⫰', - middot: '·', - minus: '−', - minusb: '⊟', - minusd: '∸', - minusdu: '⨪', - mlcp: '⫛', - mldr: '…', - mnplus: '∓', - models: '⊧', - mopf: '𝕞', - mp: '∓', - mscr: '𝓂', - mstpos: '∾', - mu: 'μ', - multimap: '⊸', - mumap: '⊸', - nGg: '⋙̸', - nGt: '≫⃒', - nGtv: '≫̸', - nLeftarrow: '⇍', - nLeftrightarrow: '⇎', - nLl: '⋘̸', - nLt: '≪⃒', - nLtv: '≪̸', - nRightarrow: '⇏', - nVDash: '⊯', - nVdash: '⊮', - nabla: '∇', - nacute: 'ń', - nang: '∠⃒', - nap: '≉', - napE: '⩰̸', - napid: '≋̸', - napos: 'ʼn', - napprox: '≉', - natur: '♮', - natural: '♮', - naturals: 'ℕ', - nbsp: ' ', - nbump: '≎̸', - nbumpe: '≏̸', - ncap: '⩃', - ncaron: 'ň', - ncedil: 'ņ', - ncong: '≇', - ncongdot: '⩭̸', - ncup: '⩂', - ncy: 'н', - ndash: '–', - ne: '≠', - neArr: '⇗', - nearhk: '⤤', - nearr: '↗', - nearrow: '↗', - nedot: '≐̸', - nequiv: '≢', - nesear: '⤨', - nesim: '≂̸', - nexist: '∄', - nexists: '∄', - nfr: '𝔫', - ngE: '≧̸', - nge: '≱', - ngeq: '≱', - ngeqq: '≧̸', - ngeqslant: '⩾̸', - nges: '⩾̸', - ngsim: '≵', - ngt: '≯', - ngtr: '≯', - nhArr: '⇎', - nharr: '↮', - nhpar: '⫲', - ni: '∋', - nis: '⋼', - nisd: '⋺', - niv: '∋', - njcy: 'њ', - nlArr: '⇍', - nlE: '≦̸', - nlarr: '↚', - nldr: '‥', - nle: '≰', - nleftarrow: '↚', - nleftrightarrow: '↮', - nleq: '≰', - nleqq: '≦̸', - nleqslant: '⩽̸', - nles: '⩽̸', - nless: '≮', - nlsim: '≴', - nlt: '≮', - nltri: '⋪', - nltrie: '⋬', - nmid: '∤', - nopf: '𝕟', - not: '¬', - notin: '∉', - notinE: '⋹̸', - notindot: '⋵̸', - notinva: '∉', - notinvb: '⋷', - notinvc: '⋶', - notni: '∌', - notniva: '∌', - notnivb: '⋾', - notnivc: '⋽', - npar: '∦', - nparallel: '∦', - nparsl: '⫽⃥', - npart: '∂̸', - npolint: '⨔', - npr: '⊀', - nprcue: '⋠', - npre: '⪯̸', - nprec: '⊀', - npreceq: '⪯̸', - nrArr: '⇏', - nrarr: '↛', - nrarrc: '⤳̸', - nrarrw: '↝̸', - nrightarrow: '↛', - nrtri: '⋫', - nrtrie: '⋭', - nsc: '⊁', - nsccue: '⋡', - nsce: '⪰̸', - nscr: '𝓃', - nshortmid: '∤', - nshortparallel: '∦', - nsim: '≁', - nsime: '≄', - nsimeq: '≄', - nsmid: '∤', - nspar: '∦', - nsqsube: '⋢', - nsqsupe: '⋣', - nsub: '⊄', - nsubE: '⫅̸', - nsube: '⊈', - nsubset: '⊂⃒', - nsubseteq: '⊈', - nsubseteqq: '⫅̸', - nsucc: '⊁', - nsucceq: '⪰̸', - nsup: '⊅', - nsupE: '⫆̸', - nsupe: '⊉', - nsupset: '⊃⃒', - nsupseteq: '⊉', - nsupseteqq: '⫆̸', - ntgl: '≹', - ntilde: 'ñ', - ntlg: '≸', - ntriangleleft: '⋪', - ntrianglelefteq: '⋬', - ntriangleright: '⋫', - ntrianglerighteq: '⋭', - nu: 'ν', - num: '#', - numero: '№', - numsp: ' ', - nvDash: '⊭', - nvHarr: '⤄', - nvap: '≍⃒', - nvdash: '⊬', - nvge: '≥⃒', - nvgt: '>⃒', - nvinfin: '⧞', - nvlArr: '⤂', - nvle: '≤⃒', - nvlt: '<⃒', - nvltrie: '⊴⃒', - nvrArr: '⤃', - nvrtrie: '⊵⃒', - nvsim: '∼⃒', - nwArr: '⇖', - nwarhk: '⤣', - nwarr: '↖', - nwarrow: '↖', - nwnear: '⤧', - oS: 'Ⓢ', - oacute: 'ó', - oast: '⊛', - ocir: '⊚', - ocirc: 'ô', - ocy: 'о', - odash: '⊝', - odblac: 'ő', - odiv: '⨸', - odot: '⊙', - odsold: '⦼', - oelig: 'œ', - ofcir: '⦿', - ofr: '𝔬', - ogon: '˛', - ograve: 'ò', - ogt: '⧁', - ohbar: '⦵', - ohm: 'Ω', - oint: '∮', - olarr: '↺', - olcir: '⦾', - olcross: '⦻', - oline: '‾', - olt: '⧀', - omacr: 'ō', - omega: 'ω', - omicron: 'ο', - omid: '⦶', - ominus: '⊖', - oopf: '𝕠', - opar: '⦷', - operp: '⦹', - oplus: '⊕', - or: '∨', - orarr: '↻', - ord: '⩝', - order: 'ℴ', - orderof: 'ℴ', - ordf: 'ª', - ordm: 'º', - origof: '⊶', - oror: '⩖', - orslope: '⩗', - orv: '⩛', - oscr: 'ℴ', - oslash: 'ø', - osol: '⊘', - otilde: 'õ', - otimes: '⊗', - otimesas: '⨶', - ouml: 'ö', - ovbar: '⌽', - par: '∥', - para: '¶', - parallel: '∥', - parsim: '⫳', - parsl: '⫽', - part: '∂', - pcy: 'п', - percnt: '%', - period: '.', - permil: '‰', - perp: '⊥', - pertenk: '‱', - pfr: '𝔭', - phi: 'φ', - phiv: 'ϕ', - phmmat: 'ℳ', - phone: '☎', - pi: 'π', - pitchfork: '⋔', - piv: 'ϖ', - planck: 'ℏ', - planckh: 'ℎ', - plankv: 'ℏ', - plus: '+', - plusacir: '⨣', - plusb: '⊞', - pluscir: '⨢', - plusdo: '∔', - plusdu: '⨥', - pluse: '⩲', - plusmn: '±', - plussim: '⨦', - plustwo: '⨧', - pm: '±', - pointint: '⨕', - popf: '𝕡', - pound: '£', - pr: '≺', - prE: '⪳', - prap: '⪷', - prcue: '≼', - pre: '⪯', - prec: '≺', - precapprox: '⪷', - preccurlyeq: '≼', - preceq: '⪯', - precnapprox: '⪹', - precneqq: '⪵', - precnsim: '⋨', - precsim: '≾', - prime: '′', - primes: 'ℙ', - prnE: '⪵', - prnap: '⪹', - prnsim: '⋨', - prod: '∏', - profalar: '⌮', - profline: '⌒', - profsurf: '⌓', - prop: '∝', - propto: '∝', - prsim: '≾', - prurel: '⊰', - pscr: '𝓅', - psi: 'ψ', - puncsp: ' ', - qfr: '𝔮', - qint: '⨌', - qopf: '𝕢', - qprime: '⁗', - qscr: '𝓆', - quaternions: 'ℍ', - quatint: '⨖', - quest: '?', - questeq: '≟', - quot: '"', - rAarr: '⇛', - rArr: '⇒', - rAtail: '⤜', - rBarr: '⤏', - rHar: '⥤', - race: '∽̱', - racute: 'ŕ', - radic: '√', - raemptyv: '⦳', - rang: '⟩', - rangd: '⦒', - range: '⦥', - rangle: '⟩', - raquo: '»', - rarr: '→', - rarrap: '⥵', - rarrb: '⇥', - rarrbfs: '⤠', - rarrc: '⤳', - rarrfs: '⤞', - rarrhk: '↪', - rarrlp: '↬', - rarrpl: '⥅', - rarrsim: '⥴', - rarrtl: '↣', - rarrw: '↝', - ratail: '⤚', - ratio: '∶', - rationals: 'ℚ', - rbarr: '⤍', - rbbrk: '❳', - rbrace: '}', - rbrack: ']', - rbrke: '⦌', - rbrksld: '⦎', - rbrkslu: '⦐', - rcaron: 'ř', - rcedil: 'ŗ', - rceil: '⌉', - rcub: '}', - rcy: 'р', - rdca: '⤷', - rdldhar: '⥩', - rdquo: '”', - rdquor: '”', - rdsh: '↳', - real: 'ℜ', - realine: 'ℛ', - realpart: 'ℜ', - reals: 'ℝ', - rect: '▭', - reg: '®', - rfisht: '⥽', - rfloor: '⌋', - rfr: '𝔯', - rhard: '⇁', - rharu: '⇀', - rharul: '⥬', - rho: 'ρ', - rhov: 'ϱ', - rightarrow: '→', - rightarrowtail: '↣', - rightharpoondown: '⇁', - rightharpoonup: '⇀', - rightleftarrows: '⇄', - rightleftharpoons: '⇌', - rightrightarrows: '⇉', - rightsquigarrow: '↝', - rightthreetimes: '⋌', - ring: '˚', - risingdotseq: '≓', - rlarr: '⇄', - rlhar: '⇌', - rlm: '‏', - rmoust: '⎱', - rmoustache: '⎱', - rnmid: '⫮', - roang: '⟭', - roarr: '⇾', - robrk: '⟧', - ropar: '⦆', - ropf: '𝕣', - roplus: '⨮', - rotimes: '⨵', - rpar: ')', - rpargt: '⦔', - rppolint: '⨒', - rrarr: '⇉', - rsaquo: '›', - rscr: '𝓇', - rsh: '↱', - rsqb: ']', - rsquo: '’', - rsquor: '’', - rthree: '⋌', - rtimes: '⋊', - rtri: '▹', - rtrie: '⊵', - rtrif: '▸', - rtriltri: '⧎', - ruluhar: '⥨', - rx: '℞', - sacute: 'ś', - sbquo: '‚', - sc: '≻', - scE: '⪴', - scap: '⪸', - scaron: 'š', - sccue: '≽', - sce: '⪰', - scedil: 'ş', - scirc: 'ŝ', - scnE: '⪶', - scnap: '⪺', - scnsim: '⋩', - scpolint: '⨓', - scsim: '≿', - scy: 'с', - sdot: '⋅', - sdotb: '⊡', - sdote: '⩦', - seArr: '⇘', - searhk: '⤥', - searr: '↘', - searrow: '↘', - sect: '§', - semi: ';', - seswar: '⤩', - setminus: '∖', - setmn: '∖', - sext: '✶', - sfr: '𝔰', - sfrown: '⌢', - sharp: '♯', - shchcy: 'щ', - shcy: 'ш', - shortmid: '∣', - shortparallel: '∥', - shy: '­', - sigma: 'σ', - sigmaf: 'ς', - sigmav: 'ς', - sim: '∼', - simdot: '⩪', - sime: '≃', - simeq: '≃', - simg: '⪞', - simgE: '⪠', - siml: '⪝', - simlE: '⪟', - simne: '≆', - simplus: '⨤', - simrarr: '⥲', - slarr: '←', - smallsetminus: '∖', - smashp: '⨳', - smeparsl: '⧤', - smid: '∣', - smile: '⌣', - smt: '⪪', - smte: '⪬', - smtes: '⪬︀', - softcy: 'ь', - sol: '/', - solb: '⧄', - solbar: '⌿', - sopf: '𝕤', - spades: '♠', - spadesuit: '♠', - spar: '∥', - sqcap: '⊓', - sqcaps: '⊓︀', - sqcup: '⊔', - sqcups: '⊔︀', - sqsub: '⊏', - sqsube: '⊑', - sqsubset: '⊏', - sqsubseteq: '⊑', - sqsup: '⊐', - sqsupe: '⊒', - sqsupset: '⊐', - sqsupseteq: '⊒', - squ: '□', - square: '□', - squarf: '▪', - squf: '▪', - srarr: '→', - sscr: '𝓈', - ssetmn: '∖', - ssmile: '⌣', - sstarf: '⋆', - star: '☆', - starf: '★', - straightepsilon: 'ϵ', - straightphi: 'ϕ', - strns: '¯', - sub: '⊂', - subE: '⫅', - subdot: '⪽', - sube: '⊆', - subedot: '⫃', - submult: '⫁', - subnE: '⫋', - subne: '⊊', - subplus: '⪿', - subrarr: '⥹', - subset: '⊂', - subseteq: '⊆', - subseteqq: '⫅', - subsetneq: '⊊', - subsetneqq: '⫋', - subsim: '⫇', - subsub: '⫕', - subsup: '⫓', - succ: '≻', - succapprox: '⪸', - succcurlyeq: '≽', - succeq: '⪰', - succnapprox: '⪺', - succneqq: '⪶', - succnsim: '⋩', - succsim: '≿', - sum: '∑', - sung: '♪', - sup1: '¹', - sup2: '²', - sup3: '³', - sup: '⊃', - supE: '⫆', - supdot: '⪾', - supdsub: '⫘', - supe: '⊇', - supedot: '⫄', - suphsol: '⟉', - suphsub: '⫗', - suplarr: '⥻', - supmult: '⫂', - supnE: '⫌', - supne: '⊋', - supplus: '⫀', - supset: '⊃', - supseteq: '⊇', - supseteqq: '⫆', - supsetneq: '⊋', - supsetneqq: '⫌', - supsim: '⫈', - supsub: '⫔', - supsup: '⫖', - swArr: '⇙', - swarhk: '⤦', - swarr: '↙', - swarrow: '↙', - swnwar: '⤪', - szlig: 'ß', - target: '⌖', - tau: 'τ', - tbrk: '⎴', - tcaron: 'ť', - tcedil: 'ţ', - tcy: 'т', - tdot: '⃛', - telrec: '⌕', - tfr: '𝔱', - there4: '∴', - therefore: '∴', - theta: 'θ', - thetasym: 'ϑ', - thetav: 'ϑ', - thickapprox: '≈', - thicksim: '∼', - thinsp: ' ', - thkap: '≈', - thksim: '∼', - thorn: 'þ', - tilde: '˜', - times: '×', - timesb: '⊠', - timesbar: '⨱', - timesd: '⨰', - tint: '∭', - toea: '⤨', - top: '⊤', - topbot: '⌶', - topcir: '⫱', - topf: '𝕥', - topfork: '⫚', - tosa: '⤩', - tprime: '‴', - trade: '™', - triangle: '▵', - triangledown: '▿', - triangleleft: '◃', - trianglelefteq: '⊴', - triangleq: '≜', - triangleright: '▹', - trianglerighteq: '⊵', - tridot: '◬', - trie: '≜', - triminus: '⨺', - triplus: '⨹', - trisb: '⧍', - tritime: '⨻', - trpezium: '⏢', - tscr: '𝓉', - tscy: 'ц', - tshcy: 'ћ', - tstrok: 'ŧ', - twixt: '≬', - twoheadleftarrow: '↞', - twoheadrightarrow: '↠', - uArr: '⇑', - uHar: '⥣', - uacute: 'ú', - uarr: '↑', - ubrcy: 'ў', - ubreve: 'ŭ', - ucirc: 'û', - ucy: 'у', - udarr: '⇅', - udblac: 'ű', - udhar: '⥮', - ufisht: '⥾', - ufr: '𝔲', - ugrave: 'ù', - uharl: '↿', - uharr: '↾', - uhblk: '▀', - ulcorn: '⌜', - ulcorner: '⌜', - ulcrop: '⌏', - ultri: '◸', - umacr: 'ū', - uml: '¨', - uogon: 'ų', - uopf: '𝕦', - uparrow: '↑', - updownarrow: '↕', - upharpoonleft: '↿', - upharpoonright: '↾', - uplus: '⊎', - upsi: 'υ', - upsih: 'ϒ', - upsilon: 'υ', - upuparrows: '⇈', - urcorn: '⌝', - urcorner: '⌝', - urcrop: '⌎', - uring: 'ů', - urtri: '◹', - uscr: '𝓊', - utdot: '⋰', - utilde: 'ũ', - utri: '▵', - utrif: '▴', - uuarr: '⇈', - uuml: 'ü', - uwangle: '⦧', - vArr: '⇕', - vBar: '⫨', - vBarv: '⫩', - vDash: '⊨', - vangrt: '⦜', - varepsilon: 'ϵ', - varkappa: 'ϰ', - varnothing: '∅', - varphi: 'ϕ', - varpi: 'ϖ', - varpropto: '∝', - varr: '↕', - varrho: 'ϱ', - varsigma: 'ς', - varsubsetneq: '⊊︀', - varsubsetneqq: '⫋︀', - varsupsetneq: '⊋︀', - varsupsetneqq: '⫌︀', - vartheta: 'ϑ', - vartriangleleft: '⊲', - vartriangleright: '⊳', - vcy: 'в', - vdash: '⊢', - vee: '∨', - veebar: '⊻', - veeeq: '≚', - vellip: '⋮', - verbar: '|', - vert: '|', - vfr: '𝔳', - vltri: '⊲', - vnsub: '⊂⃒', - vnsup: '⊃⃒', - vopf: '𝕧', - vprop: '∝', - vrtri: '⊳', - vscr: '𝓋', - vsubnE: '⫋︀', - vsubne: '⊊︀', - vsupnE: '⫌︀', - vsupne: '⊋︀', - vzigzag: '⦚', - wcirc: 'ŵ', - wedbar: '⩟', - wedge: '∧', - wedgeq: '≙', - weierp: '℘', - wfr: '𝔴', - wopf: '𝕨', - wp: '℘', - wr: '≀', - wreath: '≀', - wscr: '𝓌', - xcap: '⋂', - xcirc: '◯', - xcup: '⋃', - xdtri: '▽', - xfr: '𝔵', - xhArr: '⟺', - xharr: '⟷', - xi: 'ξ', - xlArr: '⟸', - xlarr: '⟵', - xmap: '⟼', - xnis: '⋻', - xodot: '⨀', - xopf: '𝕩', - xoplus: '⨁', - xotime: '⨂', - xrArr: '⟹', - xrarr: '⟶', - xscr: '𝓍', - xsqcup: '⨆', - xuplus: '⨄', - xutri: '△', - xvee: '⋁', - xwedge: '⋀', - yacute: 'ý', - yacy: 'я', - ycirc: 'ŷ', - ycy: 'ы', - yen: '¥', - yfr: '𝔶', - yicy: 'ї', - yopf: '𝕪', - yscr: '𝓎', - yucy: 'ю', - yuml: 'ÿ', - zacute: 'ź', - zcaron: 'ž', - zcy: 'з', - zdot: 'ż', - zeetrf: 'ℨ', - zeta: 'ζ', - zfr: '𝔷', - zhcy: 'ж', - zigrarr: '⇝', - zopf: '𝕫', - zscr: '𝓏', - zwj: '‍', - zwnj: '‌' -} - -;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js - - -const own = {}.hasOwnProperty - -/** - * Decode a single character reference (without the `&` or `;`). - * You probably only need this when you’re building parsers yourself that follow - * different rules compared to HTML. - * This is optimized to be tiny in browsers. - * - * @param {string} value - * `notin` (named), `#123` (deci), `#x123` (hexa). - * @returns {string|false} - * Decoded reference. - */ -function decodeNamedCharacterReference(value) { - return own.call(characterEntities, value) ? characterEntities[value] : false -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const characterReference = { - name: 'characterReference', - tokenize: tokenizeCharacterReference -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterReference(effects, ok, nok) { - const self = this - let size = 0 - /** @type {number} */ - let max - /** @type {(code: Code) => boolean} */ - let test - return start - - /** - * Start of character reference. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterReference') - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - return open - } - - /** - * After `&`, at `#` for numeric references or alphanumeric for named - * references. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 35) { - effects.enter('characterReferenceMarkerNumeric') - effects.consume(code) - effects.exit('characterReferenceMarkerNumeric') - return numeric - } - effects.enter('characterReferenceValue') - max = 31 - test = asciiAlphanumeric - return value(code) - } - - /** - * After `#`, at `x` for hexadecimals or digit for decimals. - * - * ```markdown - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function numeric(code) { - if (code === 88 || code === 120) { - effects.enter('characterReferenceMarkerHexadecimal') - effects.consume(code) - effects.exit('characterReferenceMarkerHexadecimal') - effects.enter('characterReferenceValue') - max = 6 - test = asciiHexDigit - return value - } - effects.enter('characterReferenceValue') - max = 7 - test = asciiDigit - return value(code) - } - - /** - * After markers (`&#x`, `&#`, or `&`), in value, before `;`. - * - * The character reference kind defines what and how many characters are - * allowed. - * - * ```markdown - * > | a&b - * ^^^ - * > | a{b - * ^^^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function value(code) { - if (code === 59 && size) { - const token = effects.exit('characterReferenceValue') - if ( - test === asciiAlphanumeric && - !decodeNamedCharacterReference(self.sliceSerialize(token)) - ) { - return nok(code) - } - - // To do: `markdown-rs` uses a different name: - // `CharacterReferenceMarkerSemi`. - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - effects.exit('characterReference') - return ok - } - if (test(code) && size++ < max) { - effects.consume(code) - return value - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const characterEscape = { - name: 'characterEscape', - tokenize: tokenizeCharacterEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterEscape(effects, ok, nok) { - return start - - /** - * Start of character escape. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterEscape') - effects.enter('escapeMarker') - effects.consume(code) - effects.exit('escapeMarker') - return inside - } - - /** - * After `\`, at punctuation. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - // ASCII punctuation. - if (asciiPunctuation(code)) { - effects.enter('characterEscapeValue') - effects.consume(code) - effects.exit('characterEscapeValue') - effects.exit('characterEscape') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const lineEnding = { - name: 'lineEnding', - tokenize: tokenizeLineEnding -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLineEnding(effects, ok) { - return start - - /** @type {State} */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, ok, 'linePrefix') - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - - -/** @type {Construct} */ -const labelEnd = { - name: 'labelEnd', - tokenize: tokenizeLabelEnd, - resolveTo: resolveToLabelEnd, - resolveAll: resolveAllLabelEnd -} - -/** @type {Construct} */ -const resourceConstruct = { - tokenize: tokenizeResource -} -/** @type {Construct} */ -const referenceFullConstruct = { - tokenize: tokenizeReferenceFull -} -/** @type {Construct} */ -const referenceCollapsedConstruct = { - tokenize: tokenizeReferenceCollapsed -} - -/** @type {Resolver} */ -function resolveAllLabelEnd(events) { - let index = -1 - while (++index < events.length) { - const token = events[index][1] - if ( - token.type === 'labelImage' || - token.type === 'labelLink' || - token.type === 'labelEnd' - ) { - // Remove the marker. - events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) - token.type = 'data' - index++ - } - } - return events -} - -/** @type {Resolver} */ -function resolveToLabelEnd(events, context) { - let index = events.length - let offset = 0 - /** @type {Token} */ - let token - /** @type {number | undefined} */ - let open - /** @type {number | undefined} */ - let close - /** @type {Array} */ - let media - - // Find an opening. - while (index--) { - token = events[index][1] - if (open) { - // If we see another link, or inactive link label, we’ve been here before. - if ( - token.type === 'link' || - (token.type === 'labelLink' && token._inactive) - ) { - break - } - - // Mark other link openings as inactive, as we can’t have links in - // links. - if (events[index][0] === 'enter' && token.type === 'labelLink') { - token._inactive = true - } - } else if (close) { - if ( - events[index][0] === 'enter' && - (token.type === 'labelImage' || token.type === 'labelLink') && - !token._balanced - ) { - open = index - if (token.type !== 'labelLink') { - offset = 2 - break - } - } - } else if (token.type === 'labelEnd') { - close = index - } - } - const group = { - type: events[open][1].type === 'labelLink' ? 'link' : 'image', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - const label = { - type: 'label', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[close][1].end) - } - const text = { - type: 'labelText', - start: Object.assign({}, events[open + offset + 2][1].end), - end: Object.assign({}, events[close - 2][1].start) - } - media = [ - ['enter', group, context], - ['enter', label, context] - ] - - // Opening marker. - media = push(media, events.slice(open + 1, open + offset + 3)) - - // Text open. - media = push(media, [['enter', text, context]]) - - // Always populated by defaults. - - // Between. - media = push( - media, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + offset + 4, close - 3), - context - ) - ) - - // Text close, marker close, label close. - media = push(media, [ - ['exit', text, context], - events[close - 2], - events[close - 1], - ['exit', label, context] - ]) - - // Reference, resource, or so. - media = push(media, events.slice(close + 1)) - - // Media close. - media = push(media, [['exit', group, context]]) - splice(events, open, events.length, media) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelEnd(effects, ok, nok) { - const self = this - let index = self.events.length - /** @type {Token} */ - let labelStart - /** @type {boolean} */ - let defined - - // Find an opening. - while (index--) { - if ( - (self.events[index][1].type === 'labelImage' || - self.events[index][1].type === 'labelLink') && - !self.events[index][1]._balanced - ) { - labelStart = self.events[index][1] - break - } - } - return start - - /** - * Start of label end. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ``` - * - * @type {State} - */ - function start(code) { - // If there is not an okay opening. - if (!labelStart) { - return nok(code) - } - - // If the corresponding label (link) start is marked as inactive, - // it means we’d be wrapping a link, like this: - // - // ```markdown - // > | a [b [c](d) e](f) g. - // ^ - // ``` - // - // We can’t have that, so it’s just balanced brackets. - if (labelStart._inactive) { - return labelEndNok(code) - } - defined = self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize({ - start: labelStart.end, - end: self.now() - }) - ) - ) - effects.enter('labelEnd') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelEnd') - return after - } - - /** - * After `]`. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - // Note: `markdown-rs` also parses GFM footnotes here, which for us is in - // an extension. - - // Resource (`[asd](fgh)`)? - if (code === 40) { - return effects.attempt( - resourceConstruct, - labelEndOk, - defined ? labelEndOk : labelEndNok - )(code) - } - - // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? - if (code === 91) { - return effects.attempt( - referenceFullConstruct, - labelEndOk, - defined ? referenceNotFull : labelEndNok - )(code) - } - - // Shortcut (`[asd]`) reference? - return defined ? labelEndOk(code) : labelEndNok(code) - } - - /** - * After `]`, at `[`, but not at a full reference. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function referenceNotFull(code) { - return effects.attempt( - referenceCollapsedConstruct, - labelEndOk, - labelEndNok - )(code) - } - - /** - * Done, we found something. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndOk(code) { - // Note: `markdown-rs` does a bunch of stuff here. - return ok(code) - } - - /** - * Done, it’s nothing. - * - * There was an okay opening, but we didn’t match anything. - * - * ```markdown - * > | [a](b c - * ^ - * > | [a][b c - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndNok(code) { - labelStart._balanced = true - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeResource(effects, ok, nok) { - return resourceStart - - /** - * At a resource. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceStart(code) { - effects.enter('resource') - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - return resourceBefore - } - - /** - * In resource, after `(`, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceOpen)(code) - : resourceOpen(code) - } - - /** - * In resource, after optional whitespace, at `)` or a destination. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceOpen(code) { - if (code === 41) { - return resourceEnd(code) - } - return factoryDestination( - effects, - resourceDestinationAfter, - resourceDestinationMissing, - 'resourceDestination', - 'resourceDestinationLiteral', - 'resourceDestinationLiteralMarker', - 'resourceDestinationRaw', - 'resourceDestinationString', - 32 - )(code) - } - - /** - * In resource, after destination, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceBetween)(code) - : resourceEnd(code) - } - - /** - * At invalid destination. - * - * ```markdown - * > | [a](<<) b - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationMissing(code) { - return nok(code) - } - - /** - * In resource, after destination and whitespace, at `(` or title. - * - * ```markdown - * > | [a](b ) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBetween(code) { - if (code === 34 || code === 39 || code === 40) { - return factoryTitle( - effects, - resourceTitleAfter, - nok, - 'resourceTitle', - 'resourceTitleMarker', - 'resourceTitleString' - )(code) - } - return resourceEnd(code) - } - - /** - * In resource, after title, at optional whitespace. - * - * ```markdown - * > | [a](b "c") d - * ^ - * ``` - * - * @type {State} - */ - function resourceTitleAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceEnd)(code) - : resourceEnd(code) - } - - /** - * In resource, at `)`. - * - * ```markdown - * > | [a](b) d - * ^ - * ``` - * - * @type {State} - */ - function resourceEnd(code) { - if (code === 41) { - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - effects.exit('resource') - return ok - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceFull(effects, ok, nok) { - const self = this - return referenceFull - - /** - * In a reference (full), at the `[`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFull(code) { - return factoryLabel.call( - self, - effects, - referenceFullAfter, - referenceFullMissing, - 'reference', - 'referenceMarker', - 'referenceString' - )(code) - } - - /** - * In a reference (full), after `]`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullAfter(code) { - return self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - ) - ? ok(code) - : nok(code) - } - - /** - * In reference (full) that was missing. - * - * ```markdown - * > | [a][b d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullMissing(code) { - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceCollapsed(effects, ok, nok) { - return referenceCollapsedStart - - /** - * In reference (collapsed), at `[`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedStart(code) { - // We only attempt a collapsed label if there’s a `[`. - - effects.enter('reference') - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - return referenceCollapsedOpen - } - - /** - * In reference (collapsed), at `]`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedOpen(code) { - if (code === 93) { - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - effects.exit('reference') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartImage = { - name: 'labelStartImage', - tokenize: tokenizeLabelStartImage, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartImage(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (image) start. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelImage') - effects.enter('labelImageMarker') - effects.consume(code) - effects.exit('labelImageMarker') - return open - } - - /** - * After `!`, at `[`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 91) { - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelImage') - return after - } - return nok(code) - } - - /** - * After `![`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * This is needed in because, when GFM footnotes are enabled, images never - * form when started with a `^`. - * Instead, links form: - * - * ```markdown - * ![^a](b) - * - * ![^a][b] - * - * [b]: c - * ``` - * - * ```html - *

      !^a

      - *

      !^a

      - * ``` - * - * @type {State} - */ - function after(code) { - // To do: use a new field to do this, this is still needed for - // `micromark-extension-gfm-footnote`, but the `label-start-link` - // behavior isn’t. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -function classifyCharacter(code) { - if ( - code === null || - markdownLineEndingOrSpace(code) || - unicodeWhitespace(code) - ) { - return 1 - } - if (unicodePunctuation(code)) { - return 2 - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const attention = { - name: 'attention', - tokenize: tokenizeAttention, - resolveAll: resolveAllAttention -} - -/** - * Take all events and resolve attention to emphasis or strong. - * - * @type {Resolver} - */ -function resolveAllAttention(events, context) { - let index = -1 - /** @type {number} */ - let open - /** @type {Token} */ - let group - /** @type {Token} */ - let text - /** @type {Token} */ - let openingSequence - /** @type {Token} */ - let closingSequence - /** @type {number} */ - let use - /** @type {Array} */ - let nextEvents - /** @type {number} */ - let offset - - // Walk through all events. - // - // Note: performance of this is fine on an mb of normal markdown, but it’s - // a bottleneck for malicious stuff. - while (++index < events.length) { - // Find a token that can close. - if ( - events[index][0] === 'enter' && - events[index][1].type === 'attentionSequence' && - events[index][1]._close - ) { - open = index - - // Now walk back to find an opener. - while (open--) { - // Find a token that can open the closer. - if ( - events[open][0] === 'exit' && - events[open][1].type === 'attentionSequence' && - events[open][1]._open && - // If the markers are the same: - context.sliceSerialize(events[open][1]).charCodeAt(0) === - context.sliceSerialize(events[index][1]).charCodeAt(0) - ) { - // If the opening can close or the closing can open, - // and the close size *is not* a multiple of three, - // but the sum of the opening and closing size *is* multiple of three, - // then don’t match. - if ( - (events[open][1]._close || events[index][1]._open) && - (events[index][1].end.offset - events[index][1].start.offset) % 3 && - !( - (events[open][1].end.offset - - events[open][1].start.offset + - events[index][1].end.offset - - events[index][1].start.offset) % - 3 - ) - ) { - continue - } - - // Number of markers to use from the sequence. - use = - events[open][1].end.offset - events[open][1].start.offset > 1 && - events[index][1].end.offset - events[index][1].start.offset > 1 - ? 2 - : 1 - const start = Object.assign({}, events[open][1].end) - const end = Object.assign({}, events[index][1].start) - movePoint(start, -use) - movePoint(end, use) - openingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start, - end: Object.assign({}, events[open][1].end) - } - closingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start: Object.assign({}, events[index][1].start), - end - } - text = { - type: use > 1 ? 'strongText' : 'emphasisText', - start: Object.assign({}, events[open][1].end), - end: Object.assign({}, events[index][1].start) - } - group = { - type: use > 1 ? 'strong' : 'emphasis', - start: Object.assign({}, openingSequence.start), - end: Object.assign({}, closingSequence.end) - } - events[open][1].end = Object.assign({}, openingSequence.start) - events[index][1].start = Object.assign({}, closingSequence.end) - nextEvents = [] - - // If there are more markers in the opening, add them before. - if (events[open][1].end.offset - events[open][1].start.offset) { - nextEvents = push(nextEvents, [ - ['enter', events[open][1], context], - ['exit', events[open][1], context] - ]) - } - - // Opening. - nextEvents = push(nextEvents, [ - ['enter', group, context], - ['enter', openingSequence, context], - ['exit', openingSequence, context], - ['enter', text, context] - ]) - - // Always populated by defaults. - - // Between. - nextEvents = push( - nextEvents, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + 1, index), - context - ) - ) - - // Closing. - nextEvents = push(nextEvents, [ - ['exit', text, context], - ['enter', closingSequence, context], - ['exit', closingSequence, context], - ['exit', group, context] - ]) - - // If there are more markers in the closing, add them after. - if (events[index][1].end.offset - events[index][1].start.offset) { - offset = 2 - nextEvents = push(nextEvents, [ - ['enter', events[index][1], context], - ['exit', events[index][1], context] - ]) - } else { - offset = 0 - } - splice(events, open - 1, index - open + 3, nextEvents) - index = open + nextEvents.length - offset - 2 - break - } - } - } - } - - // Remove remaining sequences. - index = -1 - while (++index < events.length) { - if (events[index][1].type === 'attentionSequence') { - events[index][1].type = 'data' - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAttention(effects, ok) { - const attentionMarkers = this.parser.constructs.attentionMarkers.null - const previous = this.previous - const before = classifyCharacter(previous) - - /** @type {NonNullable} */ - let marker - return start - - /** - * Before a sequence. - * - * ```markdown - * > | ** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - marker = code - effects.enter('attentionSequence') - return inside(code) - } - - /** - * In a sequence. - * - * ```markdown - * > | ** - * ^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - const token = effects.exit('attentionSequence') - - // To do: next major: move this to resolver, just like `markdown-rs`. - const after = classifyCharacter(code) - - // Always populated by defaults. - - const open = - !after || (after === 2 && before) || attentionMarkers.includes(code) - const close = - !before || (before === 2 && after) || attentionMarkers.includes(previous) - token._open = Boolean(marker === 42 ? open : open && (before || !close)) - token._close = Boolean(marker === 42 ? close : close && (after || !open)) - return ok(code) - } -} - -/** - * Move a point a bit. - * - * Note: `move` only works inside lines! It’s not possible to move past other - * chunks (replacement characters, tabs, or line endings). - * - * @param {Point} point - * @param {number} offset - * @returns {void} - */ -function movePoint(point, offset) { - point.column += offset - point.offset += offset - point._bufferIndex += offset -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const autolink = { - name: 'autolink', - tokenize: tokenizeAutolink -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAutolink(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of an autolink. - * - * ```markdown - * > | ab - * ^ - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('autolink') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.enter('autolinkProtocol') - return open - } - - /** - * After `<`, at protocol or atext. - * - * ```markdown - * > | ab - * ^ - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (asciiAlpha(code)) { - effects.consume(code) - return schemeOrEmailAtext - } - return emailAtext(code) - } - - /** - * At second byte of protocol or atext. - * - * ```markdown - * > | ab - * ^ - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function schemeOrEmailAtext(code) { - // ASCII alphanumeric and `+`, `-`, and `.`. - if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { - // Count the previous alphabetical from `open` too. - size = 1 - return schemeInsideOrEmailAtext(code) - } - return emailAtext(code) - } - - /** - * In ambiguous protocol or atext. - * - * ```markdown - * > | ab - * ^ - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function schemeInsideOrEmailAtext(code) { - if (code === 58) { - effects.consume(code) - size = 0 - return urlInside - } - - // ASCII alphanumeric and `+`, `-`, and `.`. - if ( - (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && - size++ < 32 - ) { - effects.consume(code) - return schemeInsideOrEmailAtext - } - size = 0 - return emailAtext(code) - } - - /** - * After protocol, in URL. - * - * ```markdown - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function urlInside(code) { - if (code === 62) { - effects.exit('autolinkProtocol') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - - // ASCII control, space, or `<`. - if (code === null || code === 32 || code === 60 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return urlInside - } - - /** - * In email atext. - * - * ```markdown - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function emailAtext(code) { - if (code === 64) { - effects.consume(code) - return emailAtSignOrDot - } - if (asciiAtext(code)) { - effects.consume(code) - return emailAtext - } - return nok(code) - } - - /** - * In label, after at-sign or dot. - * - * ```markdown - * > | ab - * ^ ^ - * ``` - * - * @type {State} - */ - function emailAtSignOrDot(code) { - return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) - } - - /** - * In label, where `.` and `>` are allowed. - * - * ```markdown - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function emailLabel(code) { - if (code === 46) { - effects.consume(code) - size = 0 - return emailAtSignOrDot - } - if (code === 62) { - // Exit, then change the token type. - effects.exit('autolinkProtocol').type = 'autolinkEmail' - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - return emailValue(code) - } - - /** - * In label, where `.` and `>` are *not* allowed. - * - * Though, this is also used in `emailLabel` to parse other values. - * - * ```markdown - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function emailValue(code) { - // ASCII alphanumeric or `-`. - if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { - const next = code === 45 ? emailValue : emailLabel - effects.consume(code) - return next - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const htmlText = { - name: 'htmlText', - tokenize: tokenizeHtmlText -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlText(effects, ok, nok) { - const self = this - /** @type {NonNullable | undefined} */ - let marker - /** @type {number} */ - let index - /** @type {State} */ - let returnState - return start - - /** - * Start of HTML (text). - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('htmlText') - effects.enter('htmlTextData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | a c - * ^ - * > | a c - * ^ - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - return instruction - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagOpen - } - return nok(code) - } - - /** - * After ` | a c - * ^ - * > | a c - * ^ - * > | a &<]]> c - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - index = 0 - return cdataOpenInside - } - if (asciiAlpha(code)) { - effects.consume(code) - return declaration - } - return nok(code) - } - - /** - * In a comment, after ` | a c - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return nok(code) - } - - /** - * In comment. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function comment(code) { - if (code === null) { - return nok(code) - } - if (code === 45) { - effects.consume(code) - return commentClose - } - if (markdownLineEnding(code)) { - returnState = comment - return lineEndingBefore(code) - } - effects.consume(code) - return comment - } - - /** - * In comment, after `-`. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function commentClose(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return comment(code) - } - - /** - * In comment, after `--`. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function commentEnd(code) { - return code === 62 - ? end(code) - : code === 45 - ? commentClose(code) - : comment(code) - } - - /** - * After ` | a &<]]> b - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - return index === value.length ? cdata : cdataOpenInside - } - return nok(code) - } - - /** - * In CDATA. - * - * ```markdown - * > | a &<]]> b - * ^^^ - * ``` - * - * @type {State} - */ - function cdata(code) { - if (code === null) { - return nok(code) - } - if (code === 93) { - effects.consume(code) - return cdataClose - } - if (markdownLineEnding(code)) { - returnState = cdata - return lineEndingBefore(code) - } - effects.consume(code) - return cdata - } - - /** - * In CDATA, after `]`, at another `]`. - * - * ```markdown - * > | a &<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataClose(code) { - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In CDATA, after `]]`, at `>`. - * - * ```markdown - * > | a &<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataEnd(code) { - if (code === 62) { - return end(code) - } - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In declaration. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function declaration(code) { - if (code === null || code === 62) { - return end(code) - } - if (markdownLineEnding(code)) { - returnState = declaration - return lineEndingBefore(code) - } - effects.consume(code) - return declaration - } - - /** - * In instruction. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function instruction(code) { - if (code === null) { - return nok(code) - } - if (code === 63) { - effects.consume(code) - return instructionClose - } - if (markdownLineEnding(code)) { - returnState = instruction - return lineEndingBefore(code) - } - effects.consume(code) - return instruction - } - - /** - * In instruction, after `?`, at `>`. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function instructionClose(code) { - return code === 62 ? end(code) : instruction(code) - } - - /** - * After ` | a c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagClose - } - return nok(code) - } - - /** - * After ` | a c - * ^ - * ``` - * - * @type {State} - */ - function tagClose(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagClose - } - return tagCloseBetween(code) - } - - /** - * In closing tag, after tag name. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseBetween(code) { - if (markdownLineEnding(code)) { - returnState = tagCloseBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagCloseBetween - } - return end(code) - } - - /** - * After ` | a c - * ^ - * ``` - * - * @type {State} - */ - function tagOpen(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagOpen - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In opening tag, after tag name. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function tagOpenBetween(code) { - if (code === 47) { - effects.consume(code) - return end - } - - // ASCII alphabetical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return tagOpenAttributeName - } - if (markdownLineEnding(code)) { - returnState = tagOpenBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenBetween - } - return end(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | a d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeName(code) { - // ASCII alphabetical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return tagOpenAttributeName - } - return tagOpenAttributeNameAfter(code) - } - - /** - * After attribute name, before initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | a d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeNameAfter - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeNameAfter - } - return tagOpenBetween(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | a e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - marker = code - return tagOpenAttributeValueQuoted - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueBefore - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | a e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuoted(code) { - if (code === marker) { - effects.consume(code) - marker = undefined - return tagOpenAttributeValueQuotedAfter - } - if (code === null) { - return nok(code) - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueQuoted - return lineEndingBefore(code) - } - effects.consume(code) - return tagOpenAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | a e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 60 || - code === 61 || - code === 96 - ) { - return nok(code) - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the end - * of the tag. - * - * ```markdown - * > | a e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In certain circumstances of a tag where only an `>` is allowed. - * - * ```markdown - * > | a e - * ^ - * ``` - * - * @type {State} - */ - function end(code) { - if (code === 62) { - effects.consume(code) - effects.exit('htmlTextData') - effects.exit('htmlText') - return ok - } - return nok(code) - } - - /** - * At eol. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * > | a - * ``` - * - * @type {State} - */ - function lineEndingBefore(code) { - effects.exit('htmlTextData') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineEndingAfter - } - - /** - * After eol, at optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfter(code) { - // Always populated by defaults. - - return markdownSpace(code) - ? factorySpace( - effects, - lineEndingAfterPrefix, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : lineEndingAfterPrefix(code) - } - - /** - * After eol, after optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfterPrefix(code) { - effects.enter('htmlTextData') - return returnState(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartLink = { - name: 'labelStartLink', - tokenize: tokenizeLabelStartLink, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartLink(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (link) start. - * - * ```markdown - * > | a [b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelLink') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelLink') - return after - } - - /** @type {State} */ - function after(code) { - // To do: this isn’t needed in `micromark-extension-gfm-footnote`, - // remove. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const hardBreakEscape = { - name: 'hardBreakEscape', - tokenize: tokenizeHardBreakEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHardBreakEscape(effects, ok, nok) { - return start - - /** - * Start of a hard break (escape). - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('hardBreakEscape') - effects.consume(code) - return after - } - - /** - * After `\`, at eol. - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownLineEnding(code)) { - effects.exit('hardBreakEscape') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Previous} Previous - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const codeText = { - name: 'codeText', - tokenize: tokenizeCodeText, - resolve: resolveCodeText, - previous -} - -// To do: next major: don’t resolve, like `markdown-rs`. -/** @type {Resolver} */ -function resolveCodeText(events) { - let tailExitIndex = events.length - 4 - let headEnterIndex = 3 - /** @type {number} */ - let index - /** @type {number | undefined} */ - let enter - - // If we start and end with an EOL or a space. - if ( - (events[headEnterIndex][1].type === 'lineEnding' || - events[headEnterIndex][1].type === 'space') && - (events[tailExitIndex][1].type === 'lineEnding' || - events[tailExitIndex][1].type === 'space') - ) { - index = headEnterIndex - - // And we have data. - while (++index < tailExitIndex) { - if (events[index][1].type === 'codeTextData') { - // Then we have padding. - events[headEnterIndex][1].type = 'codeTextPadding' - events[tailExitIndex][1].type = 'codeTextPadding' - headEnterIndex += 2 - tailExitIndex -= 2 - break - } - } - } - - // Merge adjacent spaces and data. - index = headEnterIndex - 1 - tailExitIndex++ - while (++index <= tailExitIndex) { - if (enter === undefined) { - if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { - enter = index - } - } else if ( - index === tailExitIndex || - events[index][1].type === 'lineEnding' - ) { - events[enter][1].type = 'codeTextData' - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - tailExitIndex -= index - enter - 2 - index = enter + 2 - } - enter = undefined - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Previous} - */ -function previous(code) { - // If there is a previous code, there will always be a tail. - return ( - code !== 96 || - this.events[this.events.length - 1][1].type === 'characterEscape' - ) -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeText(effects, ok, nok) { - const self = this - let sizeOpen = 0 - /** @type {number} */ - let size - /** @type {Token} */ - let token - return start - - /** - * Start of code (text). - * - * ```markdown - * > | `a` - * ^ - * > | \`a` - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('codeText') - effects.enter('codeTextSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 96) { - effects.consume(code) - sizeOpen++ - return sequenceOpen - } - effects.exit('codeTextSequence') - return between(code) - } - - /** - * Between something and something else. - * - * ```markdown - * > | `a` - * ^^ - * ``` - * - * @type {State} - */ - function between(code) { - // EOF. - if (code === null) { - return nok(code) - } - - // To do: next major: don’t do spaces in resolve, but when compiling, - // like `markdown-rs`. - // Tabs don’t work, and virtual spaces don’t make sense. - if (code === 32) { - effects.enter('space') - effects.consume(code) - effects.exit('space') - return between - } - - // Closing fence? Could also be data. - if (code === 96) { - token = effects.enter('codeTextSequence') - size = 0 - return sequenceClose(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return between - } - - // Data. - effects.enter('codeTextData') - return data(code) - } - - /** - * In data. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if ( - code === null || - code === 32 || - code === 96 || - markdownLineEnding(code) - ) { - effects.exit('codeTextData') - return between(code) - } - effects.consume(code) - return data - } - - /** - * In closing sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - // More. - if (code === 96) { - effects.consume(code) - size++ - return sequenceClose - } - - // Done! - if (size === sizeOpen) { - effects.exit('codeTextSequence') - effects.exit('codeText') - return ok(code) - } - - // More or less accents: mark as data. - token.type = 'codeTextData' - return data(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - */ - - - - -/** @satisfies {Extension['document']} */ -const constructs_document = { - [42]: list, - [43]: list, - [45]: list, - [48]: list, - [49]: list, - [50]: list, - [51]: list, - [52]: list, - [53]: list, - [54]: list, - [55]: list, - [56]: list, - [57]: list, - [62]: blockQuote -} - -/** @satisfies {Extension['contentInitial']} */ -const contentInitial = { - [91]: definition -} - -/** @satisfies {Extension['flowInitial']} */ -const flowInitial = { - [-2]: codeIndented, - [-1]: codeIndented, - [32]: codeIndented -} - -/** @satisfies {Extension['flow']} */ -const constructs_flow = { - [35]: headingAtx, - [42]: thematicBreak, - [45]: [setextUnderline, thematicBreak], - [60]: htmlFlow, - [61]: setextUnderline, - [95]: thematicBreak, - [96]: codeFenced, - [126]: codeFenced -} - -/** @satisfies {Extension['string']} */ -const constructs_string = { - [38]: characterReference, - [92]: characterEscape -} - -/** @satisfies {Extension['text']} */ -const constructs_text = { - [-5]: lineEnding, - [-4]: lineEnding, - [-3]: lineEnding, - [33]: labelStartImage, - [38]: characterReference, - [42]: attention, - [60]: [autolink, htmlText], - [91]: labelStartLink, - [92]: [hardBreakEscape, characterEscape], - [93]: labelEnd, - [95]: attention, - [96]: codeText -} - -/** @satisfies {Extension['insideSpan']} */ -const insideSpan = { - null: [attention, resolver] -} - -/** @satisfies {Extension['attentionMarkers']} */ -const attentionMarkers = { - null: [42, 95] -} - -/** @satisfies {Extension['disable']} */ -const disable = { - null: [] -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js -/** - * @typedef {import('micromark-util-types').Create} Create - * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - */ - - - - - - - - - -/** - * @param {ParseOptions | null | undefined} [options] - * @returns {ParseContext} - */ -function parse(options) { - const settings = options || {} - const constructs = - /** @type {FullNormalizedExtension} */ - combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) - - /** @type {ParseContext} */ - const parser = { - defined: [], - lazy: {}, - constructs, - content: create(content), - document: create(document_document), - flow: create(flow), - string: create(string), - text: create(text_text) - } - return parser - - /** - * @param {InitialConstruct} initial - */ - function create(initial) { - return creator - /** @type {Create} */ - function creator(from) { - return createTokenizer(parser, initial, from) - } - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Value} Value - */ - -/** - * @callback Preprocessor - * @param {Value} value - * @param {Encoding | null | undefined} [encoding] - * @param {boolean | null | undefined} [end=false] - * @returns {Array} - */ - -const search = /[\0\t\n\r]/g - -/** - * @returns {Preprocessor} - */ -function preprocess() { - let column = 1 - let buffer = '' - /** @type {boolean | undefined} */ - let start = true - /** @type {boolean | undefined} */ - let atCarriageReturn - return preprocessor - - /** @type {Preprocessor} */ - function preprocessor(value, encoding, end) { - /** @type {Array} */ - const chunks = [] - /** @type {RegExpMatchArray | null} */ - let match - /** @type {number} */ - let next - /** @type {number} */ - let startPosition - /** @type {number} */ - let endPosition - /** @type {Code} */ - let code - - // @ts-expect-error `Buffer` does allow an encoding. - value = buffer + value.toString(encoding) - startPosition = 0 - buffer = '' - if (start) { - // To do: `markdown-rs` actually parses BOMs (byte order mark). - if (value.charCodeAt(0) === 65279) { - startPosition++ - } - start = undefined - } - while (startPosition < value.length) { - search.lastIndex = startPosition - match = search.exec(value) - endPosition = - match && match.index !== undefined ? match.index : value.length - code = value.charCodeAt(endPosition) - if (!match) { - buffer = value.slice(startPosition) - break - } - if (code === 10 && startPosition === endPosition && atCarriageReturn) { - chunks.push(-3) - atCarriageReturn = undefined - } else { - if (atCarriageReturn) { - chunks.push(-5) - atCarriageReturn = undefined - } - if (startPosition < endPosition) { - chunks.push(value.slice(startPosition, endPosition)) - column += endPosition - startPosition - } - switch (code) { - case 0: { - chunks.push(65533) - column++ - break - } - case 9: { - next = Math.ceil(column / 4) * 4 - chunks.push(-2) - while (column++ < next) chunks.push(-1) - break - } - case 10: { - chunks.push(-4) - column = 1 - break - } - default: { - atCarriageReturn = true - column = 1 - } - } - } - startPosition = endPosition + 1 - } - if (end) { - if (atCarriageReturn) chunks.push(-5) - if (buffer) chunks.push(buffer) - chunks.push(null) - } - return chunks - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js -/** - * @typedef {import('micromark-util-types').Event} Event - */ - - - -/** - * @param {Array} events - * @returns {Array} - */ -function postprocess(events) { - while (!subtokenize(events)) { - // Empty - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -function decodeNumericCharacterReference(value, base) { - const code = Number.parseInt(value, base) - if ( - // C0 except for HT, LF, FF, CR, space. - code < 9 || - code === 11 || - (code > 13 && code < 32) || - // Control character (DEL) of C0, and C1 controls. - (code > 126 && code < 160) || - // Lone high surrogates and low surrogates. - (code > 55295 && code < 57344) || - // Noncharacters. - (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || - (code & 65535) === 65535 || - (code & 65535) === 65534 /* eslint-enable no-bitwise */ || - // Out of range - code > 1114111 - ) { - return '\uFFFD' - } - return String.fromCharCode(code) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js - - -const characterEscapeOrReference = - /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi - -/** - * Decode markdown strings (which occur in places such as fenced code info - * strings, destinations, labels, and titles). - * - * The “string” content type allows character escapes and -references. - * This decodes those. - * - * @param {string} value - * Value to decode. - * @returns {string} - * Decoded value. - */ -function decodeString(value) { - return value.replace(characterEscapeOrReference, decode) -} - -/** - * @param {string} $0 - * @param {string} $1 - * @param {string} $2 - * @returns {string} - */ -function decode($0, $1, $2) { - if ($1) { - // Escape. - return $1 - } - - // Reference. - const head = $2.charCodeAt(0) - if (head === 35) { - const head = $2.charCodeAt(1) - const hex = head === 120 || head === 88 - return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) - } - return decodeNamedCharacterReference($2) || $0 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Point} Point - * @typedef {import('unist').Position} Position - */ - -/** - * @typedef NodeLike - * @property {string} type - * @property {PositionLike | null | undefined} [position] - * - * @typedef PositionLike - * @property {PointLike | null | undefined} [start] - * @property {PointLike | null | undefined} [end] - * - * @typedef PointLike - * @property {number | null | undefined} [line] - * @property {number | null | undefined} [column] - * @property {number | null | undefined} [offset] - */ - -/** - * Serialize the positional info of a point, position (start and end points), - * or node. - * - * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] - * Node, position, or point. - * @returns {string} - * Pretty printed positional info of a node (`string`). - * - * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) - * or a point `l:c` (when given `point`), where `l` stands for line, `c` for - * column, `s` for `start`, and `e` for end. - * An empty string (`''`) is returned if the given value is neither `node`, - * `position`, nor `point`. - */ -function stringifyPosition(value) { - // Nothing. - if (!value || typeof value !== 'object') { - return '' - } - - // Node. - if ('position' in value || 'type' in value) { - return position(value.position) - } - - // Position. - if ('start' in value || 'end' in value) { - return position(value) - } - - // Point. - if ('line' in value || 'column' in value) { - return point(value) - } - - // ? - return '' -} - -/** - * @param {Point | PointLike | null | undefined} point - * @returns {string} - */ -function point(point) { - return index(point && point.line) + ':' + index(point && point.column) -} - -/** - * @param {Position | PositionLike | null | undefined} pos - * @returns {string} - */ -function position(pos) { - return point(pos && pos.start) + '-' + point(pos && pos.end) -} - -/** - * @param {number | null | undefined} value - * @returns {number} - */ -function index(value) { - return value && typeof value === 'number' ? value : 1 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js -/** - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Value} Value - * - * @typedef {import('unist').Parent} UnistParent - * @typedef {import('unist').Point} Point - * - * @typedef {import('mdast').PhrasingContent} PhrasingContent - * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent - * @typedef {import('mdast').Content} Content - * @typedef {import('mdast').Break} Break - * @typedef {import('mdast').Blockquote} Blockquote - * @typedef {import('mdast').Code} Code - * @typedef {import('mdast').Definition} Definition - * @typedef {import('mdast').Emphasis} Emphasis - * @typedef {import('mdast').Heading} Heading - * @typedef {import('mdast').HTML} HTML - * @typedef {import('mdast').Image} Image - * @typedef {import('mdast').ImageReference} ImageReference - * @typedef {import('mdast').InlineCode} InlineCode - * @typedef {import('mdast').Link} Link - * @typedef {import('mdast').LinkReference} LinkReference - * @typedef {import('mdast').List} List - * @typedef {import('mdast').ListItem} ListItem - * @typedef {import('mdast').Paragraph} Paragraph - * @typedef {import('mdast').Root} Root - * @typedef {import('mdast').Strong} Strong - * @typedef {import('mdast').Text} Text - * @typedef {import('mdast').ThematicBreak} ThematicBreak - * @typedef {import('mdast').ReferenceType} ReferenceType - * @typedef {import('../index.js').CompileData} CompileData - */ - -/** - * @typedef {Root | Content} Node - * @typedef {Extract} Parent - * - * @typedef {Omit & {type: 'fragment', children: Array}} Fragment - */ - -/** - * @callback Transform - * Extra transform, to change the AST afterwards. - * @param {Root} tree - * Tree to transform. - * @returns {Root | undefined | null | void} - * New tree or nothing (in which case the current tree is used). - * - * @callback Handle - * Handle a token. - * @param {CompileContext} this - * Context. - * @param {Token} token - * Current token. - * @returns {void} - * Nothing. - * - * @typedef {Record} Handles - * Token types mapping to handles - * - * @callback OnEnterError - * Handle the case where the `right` token is open, but it is closed (by the - * `left` token) or because we reached the end of the document. - * @param {Omit} this - * Context. - * @param {Token | undefined} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @callback OnExitError - * Handle the case where the `right` token is open but it is closed by - * exiting the `left` token. - * @param {Omit} this - * Context. - * @param {Token} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @typedef {[Token, OnEnterError | undefined]} TokenTuple - * Open token on the stack, with an optional error handler for when - * that token isn’t closed properly. - */ - -/** - * @typedef Config - * Configuration. - * - * We have our defaults, but extensions will add more. - * @property {Array} canContainEols - * Token types where line endings are used. - * @property {Handles} enter - * Opening handles. - * @property {Handles} exit - * Closing handles. - * @property {Array} transforms - * Tree transforms. - * - * @typedef {Partial} Extension - * Change how markdown tokens from micromark are turned into mdast. - * - * @typedef CompileContext - * mdast compiler context. - * @property {Array} stack - * Stack of nodes. - * @property {Array} tokenStack - * Stack of tokens. - * @property {(key: Key) => CompileData[Key]} getData - * Get data from the key/value store. - * @property {(key: Key, value?: CompileData[Key]) => void} setData - * Set data into the key/value store. - * @property {(this: CompileContext) => void} buffer - * Capture some of the output data. - * @property {(this: CompileContext) => string} resume - * Stop capturing and access the output data. - * @property {(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter - * Enter a token. - * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit - * Exit a token. - * @property {TokenizeContext['sliceSerialize']} sliceSerialize - * Get the string value of a token. - * @property {Config} config - * Configuration. - * - * @typedef FromMarkdownOptions - * Configuration for how to build mdast. - * @property {Array> | null | undefined} [mdastExtensions] - * Extensions for this utility to change how tokens are turned into a tree. - * - * @typedef {ParseOptions & FromMarkdownOptions} Options - * Configuration. - */ - -// To do: micromark: create a registry of tokens? -// To do: next major: don’t return given `Node` from `enter`. -// To do: next major: remove setter/getter. - - - - - - - - - - -const lib_own = {}.hasOwnProperty - -/** - * @param value - * Markdown to parse. - * @param encoding - * Character encoding for when `value` is `Buffer`. - * @param options - * Configuration. - * @returns - * mdast tree. - */ -const fromMarkdown = - /** - * @type {( - * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & - * ((value: Value, options?: Options | null | undefined) => Root) - * )} - */ - - /** - * @param {Value} value - * @param {Encoding | Options | null | undefined} [encoding] - * @param {Options | null | undefined} [options] - * @returns {Root} - */ - function (value, encoding, options) { - if (typeof encoding !== 'string') { - options = encoding - encoding = undefined - } - return compiler(options)( - postprocess( - parse(options).document().write(preprocess()(value, encoding, true)) - ) - ) - } - -/** - * Note this compiler only understand complete buffering, not streaming. - * - * @param {Options | null | undefined} [options] - */ -function compiler(options) { - /** @type {Config} */ - const config = { - transforms: [], - canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], - enter: { - autolink: opener(link), - autolinkProtocol: onenterdata, - autolinkEmail: onenterdata, - atxHeading: opener(heading), - blockQuote: opener(blockQuote), - characterEscape: onenterdata, - characterReference: onenterdata, - codeFenced: opener(codeFlow), - codeFencedFenceInfo: buffer, - codeFencedFenceMeta: buffer, - codeIndented: opener(codeFlow, buffer), - codeText: opener(codeText, buffer), - codeTextData: onenterdata, - data: onenterdata, - codeFlowValue: onenterdata, - definition: opener(definition), - definitionDestinationString: buffer, - definitionLabelString: buffer, - definitionTitleString: buffer, - emphasis: opener(emphasis), - hardBreakEscape: opener(hardBreak), - hardBreakTrailing: opener(hardBreak), - htmlFlow: opener(html, buffer), - htmlFlowData: onenterdata, - htmlText: opener(html, buffer), - htmlTextData: onenterdata, - image: opener(image), - label: buffer, - link: opener(link), - listItem: opener(listItem), - listItemValue: onenterlistitemvalue, - listOrdered: opener(list, onenterlistordered), - listUnordered: opener(list), - paragraph: opener(paragraph), - reference: onenterreference, - referenceString: buffer, - resourceDestinationString: buffer, - resourceTitleString: buffer, - setextHeading: opener(heading), - strong: opener(strong), - thematicBreak: opener(thematicBreak) - }, - exit: { - atxHeading: closer(), - atxHeadingSequence: onexitatxheadingsequence, - autolink: closer(), - autolinkEmail: onexitautolinkemail, - autolinkProtocol: onexitautolinkprotocol, - blockQuote: closer(), - characterEscapeValue: onexitdata, - characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, - characterReferenceMarkerNumeric: onexitcharacterreferencemarker, - characterReferenceValue: onexitcharacterreferencevalue, - codeFenced: closer(onexitcodefenced), - codeFencedFence: onexitcodefencedfence, - codeFencedFenceInfo: onexitcodefencedfenceinfo, - codeFencedFenceMeta: onexitcodefencedfencemeta, - codeFlowValue: onexitdata, - codeIndented: closer(onexitcodeindented), - codeText: closer(onexitcodetext), - codeTextData: onexitdata, - data: onexitdata, - definition: closer(), - definitionDestinationString: onexitdefinitiondestinationstring, - definitionLabelString: onexitdefinitionlabelstring, - definitionTitleString: onexitdefinitiontitlestring, - emphasis: closer(), - hardBreakEscape: closer(onexithardbreak), - hardBreakTrailing: closer(onexithardbreak), - htmlFlow: closer(onexithtmlflow), - htmlFlowData: onexitdata, - htmlText: closer(onexithtmltext), - htmlTextData: onexitdata, - image: closer(onexitimage), - label: onexitlabel, - labelText: onexitlabeltext, - lineEnding: onexitlineending, - link: closer(onexitlink), - listItem: closer(), - listOrdered: closer(), - listUnordered: closer(), - paragraph: closer(), - referenceString: onexitreferencestring, - resourceDestinationString: onexitresourcedestinationstring, - resourceTitleString: onexitresourcetitlestring, - resource: onexitresource, - setextHeading: closer(onexitsetextheading), - setextHeadingLineSequence: onexitsetextheadinglinesequence, - setextHeadingText: onexitsetextheadingtext, - strong: closer(), - thematicBreak: closer() - } - } - configure(config, (options || {}).mdastExtensions || []) - - /** @type {CompileData} */ - const data = {} - return compile - - /** - * Turn micromark events into an mdast tree. - * - * @param {Array} events - * Events. - * @returns {Root} - * mdast tree. - */ - function compile(events) { - /** @type {Root} */ - let tree = { - type: 'root', - children: [] - } - /** @type {Omit} */ - const context = { - stack: [tree], - tokenStack: [], - config, - enter, - exit, - buffer, - resume, - setData, - getData - } - /** @type {Array} */ - const listStack = [] - let index = -1 - while (++index < events.length) { - // We preprocess lists to add `listItem` tokens, and to infer whether - // items the list itself are spread out. - if ( - events[index][1].type === 'listOrdered' || - events[index][1].type === 'listUnordered' - ) { - if (events[index][0] === 'enter') { - listStack.push(index) - } else { - const tail = listStack.pop() - index = prepareList(events, tail, index) - } - } - } - index = -1 - while (++index < events.length) { - const handler = config[events[index][0]] - if (lib_own.call(handler, events[index][1].type)) { - handler[events[index][1].type].call( - Object.assign( - { - sliceSerialize: events[index][2].sliceSerialize - }, - context - ), - events[index][1] - ) - } - } - - // Handle tokens still being open. - if (context.tokenStack.length > 0) { - const tail = context.tokenStack[context.tokenStack.length - 1] - const handler = tail[1] || defaultOnError - handler.call(context, undefined, tail[0]) - } - - // Figure out `root` position. - tree.position = { - start: lib_point( - events.length > 0 - ? events[0][1].start - : { - line: 1, - column: 1, - offset: 0 - } - ), - end: lib_point( - events.length > 0 - ? events[events.length - 2][1].end - : { - line: 1, - column: 1, - offset: 0 - } - ) - } - - // Call transforms. - index = -1 - while (++index < config.transforms.length) { - tree = config.transforms[index](tree) || tree - } - return tree - } - - /** - * @param {Array} events - * @param {number} start - * @param {number} length - * @returns {number} - */ - function prepareList(events, start, length) { - let index = start - 1 - let containerBalance = -1 - let listSpread = false - /** @type {Token | undefined} */ - let listItem - /** @type {number | undefined} */ - let lineIndex - /** @type {number | undefined} */ - let firstBlankLineIndex - /** @type {boolean | undefined} */ - let atMarker - while (++index <= length) { - const event = events[index] - if ( - event[1].type === 'listUnordered' || - event[1].type === 'listOrdered' || - event[1].type === 'blockQuote' - ) { - if (event[0] === 'enter') { - containerBalance++ - } else { - containerBalance-- - } - atMarker = undefined - } else if (event[1].type === 'lineEndingBlank') { - if (event[0] === 'enter') { - if ( - listItem && - !atMarker && - !containerBalance && - !firstBlankLineIndex - ) { - firstBlankLineIndex = index - } - atMarker = undefined - } - } else if ( - event[1].type === 'linePrefix' || - event[1].type === 'listItemValue' || - event[1].type === 'listItemMarker' || - event[1].type === 'listItemPrefix' || - event[1].type === 'listItemPrefixWhitespace' - ) { - // Empty. - } else { - atMarker = undefined - } - if ( - (!containerBalance && - event[0] === 'enter' && - event[1].type === 'listItemPrefix') || - (containerBalance === -1 && - event[0] === 'exit' && - (event[1].type === 'listUnordered' || - event[1].type === 'listOrdered')) - ) { - if (listItem) { - let tailIndex = index - lineIndex = undefined - while (tailIndex--) { - const tailEvent = events[tailIndex] - if ( - tailEvent[1].type === 'lineEnding' || - tailEvent[1].type === 'lineEndingBlank' - ) { - if (tailEvent[0] === 'exit') continue - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - listSpread = true - } - tailEvent[1].type = 'lineEnding' - lineIndex = tailIndex - } else if ( - tailEvent[1].type === 'linePrefix' || - tailEvent[1].type === 'blockQuotePrefix' || - tailEvent[1].type === 'blockQuotePrefixWhitespace' || - tailEvent[1].type === 'blockQuoteMarker' || - tailEvent[1].type === 'listItemIndent' - ) { - // Empty - } else { - break - } - } - if ( - firstBlankLineIndex && - (!lineIndex || firstBlankLineIndex < lineIndex) - ) { - listItem._spread = true - } - - // Fix position. - listItem.end = Object.assign( - {}, - lineIndex ? events[lineIndex][1].start : event[1].end - ) - events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) - index++ - length++ - } - - // Create a new list item. - if (event[1].type === 'listItemPrefix') { - listItem = { - type: 'listItem', - _spread: false, - start: Object.assign({}, event[1].start), - // @ts-expect-error: we’ll add `end` in a second. - end: undefined - } - // @ts-expect-error: `listItem` is most definitely defined, TS... - events.splice(index, 0, ['enter', listItem, event[2]]) - index++ - length++ - firstBlankLineIndex = undefined - atMarker = true - } - } - } - events[start][1]._spread = listSpread - return length - } - - /** - * Set data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @param {CompileData[Key]} [value] - * New value. - * @returns {void} - * Nothing. - */ - function setData(key, value) { - data[key] = value - } - - /** - * Get data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @returns {CompileData[Key]} - * Value. - */ - function getData(key) { - return data[key] - } - - /** - * Create an opener handle. - * - * @param {(token: Token) => Node} create - * Create a node. - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function opener(create, and) { - return open - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function open(token) { - enter.call(this, create(token), token) - if (and) and.call(this, token) - } - } - - /** - * @this {CompileContext} - * @returns {void} - */ - function buffer() { - this.stack.push({ - type: 'fragment', - children: [] - }) - } - - /** - * @template {Node} Kind - * Node type. - * @this {CompileContext} - * Context. - * @param {Kind} node - * Node to enter. - * @param {Token} token - * Corresponding token. - * @param {OnEnterError | undefined} [errorHandler] - * Handle the case where this token is open, but it is closed by something else. - * @returns {Kind} - * The given node. - */ - function enter(node, token, errorHandler) { - const parent = this.stack[this.stack.length - 1] - // @ts-expect-error: Assume `Node` can exist as a child of `parent`. - parent.children.push(node) - this.stack.push(node) - this.tokenStack.push([token, errorHandler]) - // @ts-expect-error: `end` will be patched later. - node.position = { - start: lib_point(token.start) - } - return node - } - - /** - * Create a closer handle. - * - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function closer(and) { - return close - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function close(token) { - if (and) and.call(this, token) - exit.call(this, token) - } - } - - /** - * @this {CompileContext} - * Context. - * @param {Token} token - * Corresponding token. - * @param {OnExitError | undefined} [onExitError] - * Handle the case where another token is open. - * @returns {Node} - * The closed node. - */ - function exit(token, onExitError) { - const node = this.stack.pop() - const open = this.tokenStack.pop() - if (!open) { - throw new Error( - 'Cannot close `' + - token.type + - '` (' + - stringifyPosition({ - start: token.start, - end: token.end - }) + - '): it’s not open' - ) - } else if (open[0].type !== token.type) { - if (onExitError) { - onExitError.call(this, token, open[0]) - } else { - const handler = open[1] || defaultOnError - handler.call(this, token, open[0]) - } - } - node.position.end = lib_point(token.end) - return node - } - - /** - * @this {CompileContext} - * @returns {string} - */ - function resume() { - return lib_toString(this.stack.pop()) - } - - // - // Handlers. - // - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistordered() { - setData('expectingFirstListItemValue', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistitemvalue(token) { - if (getData('expectingFirstListItemValue')) { - const ancestor = this.stack[this.stack.length - 2] - ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) - setData('expectingFirstListItemValue') - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfenceinfo() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.lang = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfencemeta() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.meta = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfence() { - // Exit if this is the closing fence. - if (getData('flowCodeInside')) return - this.buffer() - setData('flowCodeInside', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefenced() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') - setData('flowCodeInside') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodeindented() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/(\r?\n|\r)$/g, '') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitionlabelstring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - node.label = label - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiontitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiondestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitatxheadingsequence(token) { - const node = this.stack[this.stack.length - 1] - if (!node.depth) { - const depth = this.sliceSerialize(token).length - node.depth = depth - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadingtext() { - setData('setextHeadingSlurpLineEnding', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadinglinesequence(token) { - const node = this.stack[this.stack.length - 1] - node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheading() { - setData('setextHeadingSlurpLineEnding') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterdata(token) { - const node = this.stack[this.stack.length - 1] - let tail = node.children[node.children.length - 1] - if (!tail || tail.type !== 'text') { - // Add a new text node. - tail = text() - // @ts-expect-error: we’ll add `end` later. - tail.position = { - start: lib_point(token.start) - } - // @ts-expect-error: Assume `parent` accepts `text`. - node.children.push(tail) - } - this.stack.push(tail) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitdata(token) { - const tail = this.stack.pop() - tail.value += this.sliceSerialize(token) - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlineending(token) { - const context = this.stack[this.stack.length - 1] - // If we’re at a hard break, include the line ending in there. - if (getData('atHardBreak')) { - const tail = context.children[context.children.length - 1] - tail.position.end = lib_point(token.end) - setData('atHardBreak') - return - } - if ( - !getData('setextHeadingSlurpLineEnding') && - config.canContainEols.includes(context.type) - ) { - onenterdata.call(this, token) - onexitdata.call(this, token) - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithardbreak() { - setData('atHardBreak', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmlflow() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmltext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcodetext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlink() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitimage() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabeltext(token) { - const string = this.sliceSerialize(token) - const ancestor = this.stack[this.stack.length - 2] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - ancestor.label = decodeString(string) - // @ts-expect-error: same as above. - ancestor.identifier = normalizeIdentifier(string).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabel() { - const fragment = this.stack[this.stack.length - 1] - const value = this.resume() - const node = this.stack[this.stack.length - 1] - // Assume a reference. - setData('inReference', true) - if (node.type === 'link') { - /** @type {Array} */ - // @ts-expect-error: Assume static phrasing content. - const children = fragment.children - node.children = children - } else { - node.alt = value - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcedestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcetitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresource() { - setData('inReference') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterreference() { - setData('referenceType', 'collapsed') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitreferencestring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - node.label = label - // @ts-expect-error: same as above. - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - setData('referenceType', 'full') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcharacterreferencemarker(token) { - setData('characterReferenceType', token.type) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcharacterreferencevalue(token) { - const data = this.sliceSerialize(token) - const type = getData('characterReferenceType') - /** @type {string} */ - let value - if (type) { - value = decodeNumericCharacterReference( - data, - type === 'characterReferenceMarkerNumeric' ? 10 : 16 - ) - setData('characterReferenceType') - } else { - const result = decodeNamedCharacterReference(data) - value = result - } - const tail = this.stack.pop() - tail.value += value - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkprotocol(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = this.sliceSerialize(token) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkemail(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = 'mailto:' + this.sliceSerialize(token) - } - - // - // Creaters. - // - - /** @returns {Blockquote} */ - function blockQuote() { - return { - type: 'blockquote', - children: [] - } - } - - /** @returns {Code} */ - function codeFlow() { - return { - type: 'code', - lang: null, - meta: null, - value: '' - } - } - - /** @returns {InlineCode} */ - function codeText() { - return { - type: 'inlineCode', - value: '' - } - } - - /** @returns {Definition} */ - function definition() { - return { - type: 'definition', - identifier: '', - label: null, - title: null, - url: '' - } - } - - /** @returns {Emphasis} */ - function emphasis() { - return { - type: 'emphasis', - children: [] - } - } - - /** @returns {Heading} */ - function heading() { - // @ts-expect-error `depth` will be set later. - return { - type: 'heading', - depth: undefined, - children: [] - } - } - - /** @returns {Break} */ - function hardBreak() { - return { - type: 'break' - } - } - - /** @returns {HTML} */ - function html() { - return { - type: 'html', - value: '' - } - } - - /** @returns {Image} */ - function image() { - return { - type: 'image', - title: null, - url: '', - alt: null - } - } - - /** @returns {Link} */ - function link() { - return { - type: 'link', - title: null, - url: '', - children: [] - } - } - - /** - * @param {Token} token - * @returns {List} - */ - function list(token) { - return { - type: 'list', - ordered: token.type === 'listOrdered', - start: null, - spread: token._spread, - children: [] - } - } - - /** - * @param {Token} token - * @returns {ListItem} - */ - function listItem(token) { - return { - type: 'listItem', - spread: token._spread, - checked: null, - children: [] - } - } - - /** @returns {Paragraph} */ - function paragraph() { - return { - type: 'paragraph', - children: [] - } - } - - /** @returns {Strong} */ - function strong() { - return { - type: 'strong', - children: [] - } - } - - /** @returns {Text} */ - function text() { - return { - type: 'text', - value: '' - } - } - - /** @returns {ThematicBreak} */ - function thematicBreak() { - return { - type: 'thematicBreak' - } - } -} - -/** - * Copy a point-like value. - * - * @param {Point} d - * Point-like value. - * @returns {Point} - * unist point. - */ -function lib_point(d) { - return { - line: d.line, - column: d.column, - offset: d.offset - } -} - -/** - * @param {Config} combined - * @param {Array>} extensions - * @returns {void} - */ -function configure(combined, extensions) { - let index = -1 - while (++index < extensions.length) { - const value = extensions[index] - if (Array.isArray(value)) { - configure(combined, value) - } else { - extension(combined, value) - } - } -} - -/** - * @param {Config} combined - * @param {Extension} extension - * @returns {void} - */ -function extension(combined, extension) { - /** @type {keyof Extension} */ - let key - for (key in extension) { - if (lib_own.call(extension, key)) { - if (key === 'canContainEols') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'transforms') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'enter' || key === 'exit') { - const right = extension[key] - if (right) { - Object.assign(combined[key], right) - } - } - } - } -} - -/** @type {OnEnterError} */ -function defaultOnError(left, right) { - if (left) { - throw new Error( - 'Cannot close `' + - left.type + - '` (' + - stringifyPosition({ - start: left.start, - end: left.end - }) + - '): a different token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is open' - ) - } else { - throw new Error( - 'Cannot close document, a token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is still open' - ) - } -} - -// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js -var esm = __webpack_require__(60513); -;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-ca0c5216.js - - - -function preprocessMarkdown(markdown) { - const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); - const withoutExtraSpaces = (0,esm/* dedent */.T)(withoutMultipleNewlines); - return withoutExtraSpaces; -} -function markdownToLines(markdown) { - const preprocessedMarkdown = preprocessMarkdown(markdown); - const { children } = fromMarkdown(preprocessedMarkdown); - const lines = [[]]; - let currentLine = 0; - function processNode(node, parentType = "normal") { - if (node.type === "text") { - const textLines = node.value.split("\n"); - textLines.forEach((textLine, index) => { - if (index !== 0) { - currentLine++; - lines.push([]); - } - textLine.split(" ").forEach((word) => { - if (word) { - lines[currentLine].push({ content: word, type: parentType }); - } - }); - }); - } else if (node.type === "strong" || node.type === "emphasis") { - node.children.forEach((contentNode) => { - processNode(contentNode, node.type); - }); - } - } - children.forEach((treeNode) => { - if (treeNode.type === "paragraph") { - treeNode.children.forEach((contentNode) => { - processNode(contentNode); - }); - } - }); - return lines; -} -function markdownToHTML(markdown) { - const { children } = fromMarkdown(markdown); - function output(node) { - if (node.type === "text") { - return node.value.replace(/\n/g, "
      "); - } else if (node.type === "strong") { - return `${node.children.map(output).join("")}`; - } else if (node.type === "emphasis") { - return `${node.children.map(output).join("")}`; - } else if (node.type === "paragraph") { - return `

      ${node.children.map(output).join("")}

      `; - } - return `Unsupported markdown: ${node.type}`; - } - return children.map(output).join(""); -} -function splitTextToChars(text) { - if (Intl.Segmenter) { - return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); - } - return [...text]; -} -function splitWordToFitWidth(checkFit, word) { - const characters = splitTextToChars(word.content); - return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); -} -function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { - if (remainingChars.length === 0) { - return [ - { content: usedChars.join(""), type }, - { content: "", type } - ]; - } - const [nextChar, ...rest] = remainingChars; - const newWord = [...usedChars, nextChar]; - if (checkFit([{ content: newWord.join(""), type }])) { - return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); - } - if (usedChars.length === 0 && nextChar) { - usedChars.push(nextChar); - remainingChars.shift(); - } - return [ - { content: usedChars.join(""), type }, - { content: remainingChars.join(""), type } - ]; -} -function splitLineToFitWidth(line, checkFit) { - if (line.some(({ content }) => content.includes("\n"))) { - throw new Error("splitLineToFitWidth does not support newlines in the line"); - } - return splitLineToFitWidthRecursion(line, checkFit); -} -function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { - if (words.length === 0) { - if (newLine.length > 0) { - lines.push(newLine); - } - return lines.length > 0 ? lines : []; - } - let joiner = ""; - if (words[0].content === " ") { - joiner = " "; - words.shift(); - } - const nextWord = words.shift() ?? { content: " ", type: "normal" }; - const lineWithNextWord = [...newLine]; - if (joiner !== "") { - lineWithNextWord.push({ content: joiner, type: "normal" }); - } - lineWithNextWord.push(nextWord); - if (checkFit(lineWithNextWord)) { - return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); - } - if (newLine.length > 0) { - lines.push(newLine); - words.unshift(nextWord); - } else if (nextWord.content) { - const [line, rest] = splitWordToFitWidth(checkFit, nextWord); - lines.push([line]); - if (rest.content) { - words.unshift(rest); - } - } - return splitLineToFitWidthRecursion(words, checkFit, lines); -} -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlSpan(element, node, width, classes, addBackground = false) { - const fo = element.append("foreignObject"); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - ` - " + label + "" - ); - applyStyle(div, node.labelStyle); - div.style("display", "table-cell"); - div.style("white-space", "nowrap"); - div.style("max-width", width + "px"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - if (addBackground) { - div.attr("class", "labelBkg"); - } - let bbox = div.node().getBoundingClientRect(); - if (bbox.width === width) { - div.style("display", "table"); - div.style("white-space", "break-spaces"); - div.style("width", width + "px"); - bbox = div.node().getBoundingClientRect(); - } - fo.style("width", bbox.width); - fo.style("height", bbox.height); - return fo.node(); -} -function createTspan(textElement, lineIndex, lineHeight) { - return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); -} -function computeWidthOfText(parentNode, lineHeight, line) { - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, line); - const textLength = testSpan.node().getComputedTextLength(); - testElement.remove(); - return textLength; -} -function computeDimensionOfText(parentNode, lineHeight, text) { - var _a; - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); - const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); - if (textDimension) { - testElement.remove(); - } - return textDimension; -} -function createFormattedText(width, g, structuredText, addBackground = false) { - const lineHeight = 1.1; - const labelGroup = g.append("g"); - const bkg = labelGroup.insert("rect").attr("class", "background"); - const textElement = labelGroup.append("text").attr("y", "-10.1"); - let lineIndex = 0; - for (const line of structuredText) { - const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; - const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); - for (const preparedLine of linesUnderWidth) { - const tspan = createTspan(textElement, lineIndex, lineHeight); - updateTextContentAndStyles(tspan, preparedLine); - lineIndex++; - } - } - if (addBackground) { - const bbox = textElement.node().getBBox(); - const padding = 2; - bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); - return labelGroup.node(); - } else { - return textElement.node(); - } -} -function updateTextContentAndStyles(tspan, wrappedLine) { - tspan.text(""); - wrappedLine.forEach((word, index) => { - const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); - if (index === 0) { - innerTspan.text(word.content); - } else { - innerTspan.text(" " + word.content); - } - }); -} -const createText = (el, text = "", { - style = "", - isTitle = false, - classes = "", - useHtmlLabels = true, - isNode = true, - width = 200, - addSvgBackground = false -} = {}) => { - mermaid_6dc72991.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); - if (useHtmlLabels) { - const htmlText = markdownToHTML(text); - const node = { - isNode, - label: (0,mermaid_6dc72991.M)(htmlText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `` - ), - labelStyle: style.replace("fill:", "color:") - }; - const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); - return vertexNode; - } else { - const structuredText = markdownToLines(text); - const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); - return svgLabel; - } -}; - - - -/***/ }), - -/***/ 98055: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ a: () => (/* binding */ insertMarkers$1), -/* harmony export */ b: () => (/* binding */ clear$1), -/* harmony export */ c: () => (/* binding */ createLabel$1), -/* harmony export */ d: () => (/* binding */ clear), -/* harmony export */ e: () => (/* binding */ insertNode), -/* harmony export */ f: () => (/* binding */ insertEdgeLabel), -/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), -/* harmony export */ h: () => (/* binding */ insertEdge), -/* harmony export */ i: () => (/* binding */ intersectRect$1), -/* harmony export */ j: () => (/* binding */ positionEdgeLabel), -/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), -/* harmony export */ l: () => (/* binding */ labelHelper), -/* harmony export */ m: () => (/* binding */ addEdgeMarkers), -/* harmony export */ p: () => (/* binding */ positionNode), -/* harmony export */ s: () => (/* binding */ setNodeElem), -/* harmony export */ u: () => (/* binding */ updateNodeBounds) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(18897); - - - -const insertMarkers = (elem, markerArray, type, id) => { - markerArray.forEach((markerName) => { - markers[markerName](elem, type, id); - }); -}; -const extension = (elem, type, id) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); -}; -const composition = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); -}; -const aggregation = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); -}; -const dependency = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); -}; -const lollipop = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); -}; -const point = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); -}; -const circle$1 = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); -}; -const cross = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); -}; -const barb = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); -}; -const markers = { - extension, - composition, - aggregation, - dependency, - lollipop, - point, - circle: circle$1, - cross, - barb -}; -const insertMarkers$1 = insertMarkers; -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlLabel(node) { - const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - '" + label + "" - ); - applyStyle(div, node.labelStyle); - div.style("display", "inline-block"); - div.style("white-space", "nowrap"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - return fo.node(); -} -const createLabel = (_vertexText, style, isTitle, isNode) => { - let vertexText = _vertexText || ""; - if (typeof vertexText === "object") { - vertexText = vertexText[0]; - } - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - vertexText = vertexText.replace(/\\n|\n/g, "
      "); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); - const node = { - isNode, - label: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(vertexText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `` - ), - labelStyle: style.replace("fill:", "color:") - }; - let vertexNode = addHtmlLabel(node); - return vertexNode; - } else { - const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); - svgLabel.setAttribute("style", style.replace("color:", "fill:")); - let rows = []; - if (typeof vertexText === "string") { - rows = vertexText.split(/\\n|\n|/gi); - } else if (Array.isArray(vertexText)) { - rows = vertexText; - } else { - rows = []; - } - for (const row of rows) { - const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); - tspan.setAttribute("dy", "1em"); - tspan.setAttribute("x", "0"); - if (isTitle) { - tspan.setAttribute("class", "title-row"); - } else { - tspan.setAttribute("class", "row"); - } - tspan.textContent = row.trim(); - svgLabel.appendChild(tspan); - } - return svgLabel; - } -}; -const createLabel$1 = createLabel; -const labelHelper = async (parent, node, _classes, isNode) => { - let classes; - const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); - if (!_classes) { - classes = "node default"; - } else { - classes = _classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); - let labelText; - if (node.labelText === void 0) { - labelText = ""; - } else { - labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; - } - const textNode = label.node(); - let text; - if (node.labelType === "markdown") { - text = (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { - useHtmlLabels, - width: node.width || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, - classes: "markdown-node-label" - }); - } else { - text = textNode.appendChild( - createLabel$1( - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), - node.labelStyle, - false, - isNode - ) - ); - } - let bbox = text.getBBox(); - const halfPadding = node.padding / 2; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); - const images = div.getElementsByTagName("img"); - if (images) { - const noImgText = labelText.replace(/]*>/g, "").trim() === ""; - await Promise.all( - [...images].map( - (img) => new Promise((res) => { - function setupImage() { - img.style.display = "flex"; - img.style.flexDirection = "column"; - if (noImgText) { - const bodyFontSize = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; - const enlargingFactor = 5; - const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; - img.style.minWidth = width; - img.style.maxWidth = width; - } else { - img.style.width = "100%"; - } - res(img); - } - setTimeout(() => { - if (img.complete) { - setupImage(); - } - }); - img.addEventListener("error", setupImage); - img.addEventListener("load", setupImage); - }) - ) - ); - } - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (useHtmlLabels) { - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - } else { - label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); - } - if (node.centerLabel) { - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - } - label.insert("rect", ":first-child"); - return { shapeSvg, bbox, halfPadding, label }; -}; -const updateNodeBounds = (node, element) => { - const bbox = element.node().getBBox(); - node.width = bbox.width; - node.height = bbox.height; -}; -function insertPolygonShape(parent, w, h, points) { - return parent.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); -} -function intersectNode(node, point2) { - return node.intersect(point2); -} -function intersectEllipse(node, rx, ry, point2) { - var cx = node.x; - var cy = node.y; - var px = cx - point2.x; - var py = cy - point2.y; - var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); - var dx = Math.abs(rx * ry * px / det); - if (point2.x < cx) { - dx = -dx; - } - var dy = Math.abs(rx * ry * py / det); - if (point2.y < cy) { - dy = -dy; - } - return { x: cx + dx, y: cy + dy }; -} -function intersectCircle(node, rx, point2) { - return intersectEllipse(node, rx, rx, point2); -} -function intersectLine(p1, p2, q1, q2) { - var a1, a2, b1, b2, c1, c2; - var r1, r2, r3, r4; - var denom, offset, num; - var x, y; - a1 = p2.y - p1.y; - b1 = p1.x - p2.x; - c1 = p2.x * p1.y - p1.x * p2.y; - r3 = a1 * q1.x + b1 * q1.y + c1; - r4 = a1 * q2.x + b1 * q2.y + c1; - if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { - return; - } - a2 = q2.y - q1.y; - b2 = q1.x - q2.x; - c2 = q2.x * q1.y - q1.x * q2.y; - r1 = a2 * p1.x + b2 * p1.y + c2; - r2 = a2 * p2.x + b2 * p2.y + c2; - if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { - return; - } - denom = a1 * b2 - a2 * b1; - if (denom === 0) { - return; - } - offset = Math.abs(denom / 2); - num = b1 * c2 - b2 * c1; - x = num < 0 ? (num - offset) / denom : (num + offset) / denom; - num = a2 * c1 - a1 * c2; - y = num < 0 ? (num - offset) / denom : (num + offset) / denom; - return { x, y }; -} -function sameSign(r1, r2) { - return r1 * r2 > 0; -} -function intersectPolygon(node, polyPoints, point2) { - var x1 = node.x; - var y1 = node.y; - var intersections = []; - var minX = Number.POSITIVE_INFINITY; - var minY = Number.POSITIVE_INFINITY; - if (typeof polyPoints.forEach === "function") { - polyPoints.forEach(function(entry) { - minX = Math.min(minX, entry.x); - minY = Math.min(minY, entry.y); - }); - } else { - minX = Math.min(minX, polyPoints.x); - minY = Math.min(minY, polyPoints.y); - } - var left = x1 - node.width / 2 - minX; - var top = y1 - node.height / 2 - minY; - for (var i = 0; i < polyPoints.length; i++) { - var p1 = polyPoints[i]; - var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; - var intersect2 = intersectLine( - node, - point2, - { x: left + p1.x, y: top + p1.y }, - { x: left + p2.x, y: top + p2.y } - ); - if (intersect2) { - intersections.push(intersect2); - } - } - if (!intersections.length) { - return node; - } - if (intersections.length > 1) { - intersections.sort(function(p, q) { - var pdx = p.x - point2.x; - var pdy = p.y - point2.y; - var distp = Math.sqrt(pdx * pdx + pdy * pdy); - var qdx = q.x - point2.x; - var qdy = q.y - point2.y; - var distq = Math.sqrt(qdx * qdx + qdy * qdy); - return distp < distq ? -1 : distp === distq ? 0 : 1; - }); - } - return intersections[0]; -} -const intersectRect = (node, point2) => { - var x = node.x; - var y = node.y; - var dx = point2.x - x; - var dy = point2.y - y; - var w = node.width / 2; - var h = node.height / 2; - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - if (dy < 0) { - h = -h; - } - sx = dy === 0 ? 0 : h * dx / dy; - sy = h; - } else { - if (dx < 0) { - w = -w; - } - sx = w; - sy = dx === 0 ? 0 : w * dy / dx; - } - return { x: x + sx, y: y + sy }; -}; -const intersectRect$1 = intersectRect; -const intersect = { - node: intersectNode, - circle: intersectCircle, - ellipse: intersectEllipse, - polygon: intersectPolygon, - rect: intersectRect$1 -}; -const note = async (parent, node) => { - const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; - if (!useHtmlLabels) { - node.centerLabel = true; - } - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes, - true - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); - const rect2 = shapeSvg.insert("rect", ":first-child"); - rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const note$1 = note; -const expandAndDeduplicateDirections = (directions) => { - const uniqueDirections = /* @__PURE__ */ new Set(); - for (const direction of directions) { - switch (direction) { - case "x": - uniqueDirections.add("right"); - uniqueDirections.add("left"); - break; - case "y": - uniqueDirections.add("up"); - uniqueDirections.add("down"); - break; - default: - uniqueDirections.add(direction); - break; - } - } - return uniqueDirections; -}; -const getArrowPoints = (duplicatedDirections, bbox, node) => { - const directions = expandAndDeduplicateDirections(duplicatedDirections); - const f = 2; - const height = bbox.height + 2 * node.padding; - const midpoint = height / f; - const width = bbox.width + 2 * midpoint + node.padding; - const padding = node.padding / 2; - if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { - return [ - // Bottom - { x: 0, y: 0 }, - { x: midpoint, y: 0 }, - { x: width / 2, y: 2 * padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: 0 }, - // Right - { x: width, y: -height / 3 }, - { x: width + 2 * padding, y: -height / 2 }, - { x: width, y: -2 * height / 3 }, - { x: width, y: -height }, - // Top - { x: width - midpoint, y: -height }, - { x: width / 2, y: -height - 2 * padding }, - { x: midpoint, y: -height }, - // Left - { x: 0, y: -height }, - { x: 0, y: -2 * height / 3 }, - { x: -2 * padding, y: -height / 2 }, - { x: 0, y: -height / 3 } - ]; - } - if (directions.has("right") && directions.has("left") && directions.has("up")) { - return [ - { x: midpoint, y: 0 }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("right") && directions.has("left") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: midpoint, y: -height }, - { x: width - midpoint, y: -height }, - { x: width, y: 0 } - ]; - } - if (directions.has("right") && directions.has("up") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: width, y: -midpoint }, - { x: width, y: -height + midpoint }, - { x: 0, y: -height } - ]; - } - if (directions.has("left") && directions.has("up") && directions.has("down")) { - return [ - { x: width, y: 0 }, - { x: 0, y: -midpoint }, - { x: 0, y: -height + midpoint }, - { x: width, y: -height } - ]; - } - if (directions.has("right") && directions.has("left")) { - return [ - { x: midpoint, y: 0 }, - { x: midpoint, y: -padding }, - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: width - midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("up") && directions.has("down")) { - return [ - // Bottom center - { x: width / 2, y: 0 }, - // Left pont of bottom arrow - { x: 0, y: -padding }, - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: 0, y: -height + padding }, - // Top of arrow - { x: width / 2, y: -height }, - { x: width, y: -height + padding }, - // Top of right vertical bar - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding }, - { x: width, y: -padding } - ]; - } - if (directions.has("right") && directions.has("up")) { - return [ - { x: 0, y: 0 }, - { x: width, y: -midpoint }, - { x: 0, y: -height } - ]; - } - if (directions.has("right") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: width, y: 0 }, - { x: 0, y: -height } - ]; - } - if (directions.has("left") && directions.has("up")) { - return [ - { x: width, y: 0 }, - { x: 0, y: -midpoint }, - { x: width, y: -height } - ]; - } - if (directions.has("left") && directions.has("down")) { - return [ - { x: width, y: 0 }, - { x: 0, y: 0 }, - { x: width, y: -height } - ]; - } - if (directions.has("right")) { - return [ - { x: midpoint, y: -padding }, - { x: midpoint, y: -padding }, - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: width - midpoint, y: -height + padding }, - // top left corner of arrow - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding } - ]; - } - if (directions.has("left")) { - return [ - { x: midpoint, y: 0 }, - { x: midpoint, y: -padding }, - // Two points, the right corners - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("up")) { - return [ - // Bottom center - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: 0, y: -height + padding }, - // Top of arrow - { x: width / 2, y: -height }, - { x: width, y: -height + padding }, - // Top of right vertical bar - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding } - ]; - } - if (directions.has("down")) { - return [ - // Bottom center - { x: width / 2, y: 0 }, - // Left pont of bottom arrow - { x: 0, y: -padding }, - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding }, - { x: width, y: -padding } - ]; - } - return [{ x: 0, y: 0 }]; -}; -const formatClass = (str) => { - if (str) { - return " " + str; - } - return ""; -}; -const getClassesFromNode = (node, otherClasses) => { - return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( - node.class - )}`; -}; -const question = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const s = w + h; - const points = [ - { x: s / 2, y: 0 }, - { x: s, y: -s / 2 }, - { x: s / 2, y: -s }, - { x: 0, y: -s / 2 } - ]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); - const questionElem = insertPolygonShape(shapeSvg, s, s, points); - questionElem.attr("style", node.style); - updateNodeBounds(node, questionElem); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const choice = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const s = 28; - const points = [ - { x: 0, y: s / 2 }, - { x: s / 2, y: 0 }, - { x: 0, y: -s / 2 }, - { x: -s / 2, y: 0 } - ]; - const choice2 = shapeSvg.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ); - choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); - node.width = 28; - node.height = 28; - node.intersect = function(point2) { - return intersect.circle(node, 14, point2); - }; - return shapeSvg; -}; -const hexagon = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const f = 4; - const h = bbox.height + node.padding; - const m = h / f; - const w = bbox.width + 2 * m + node.padding; - const points = [ - { x: m, y: 0 }, - { x: w - m, y: 0 }, - { x: w, y: -h / 2 }, - { x: w - m, y: -h }, - { x: m, y: -h }, - { x: 0, y: -h / 2 } - ]; - const hex = insertPolygonShape(shapeSvg, w, h, points); - hex.attr("style", node.style); - updateNodeBounds(node, hex); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const block_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); - const f = 2; - const h = bbox.height + 2 * node.padding; - const m = h / f; - const w = bbox.width + 2 * m + node.padding; - const points = getArrowPoints(node.directions, bbox, node); - const blockArrow = insertPolygonShape(shapeSvg, w, h, points); - blockArrow.attr("style", node.style); - updateNodeBounds(node, blockArrow); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const rect_left_inv_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -h / 2, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: -h / 2, y: -h }, - { x: 0, y: -h / 2 } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - node.width = w + h; - node.height = h; - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const lean_right = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const lean_left = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 2 * h / 6, y: 0 }, - { x: w + h / 6, y: 0 }, - { x: w - 2 * h / 6, y: -h }, - { x: -h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const trapezoid = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w + 2 * h / 6, y: 0 }, - { x: w - h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const inv_trapezoid = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: -2 * h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const rect_right_inv_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 0, y: 0 }, - { x: w + h / 2, y: 0 }, - { x: w, y: -h / 2 }, - { x: w + h / 2, y: -h }, - { x: 0, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const cylinder = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const rx = w / 2; - const ry = rx / (2.5 + w / 50); - const h = bbox.height + ry + node.padding; - const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; - const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); - updateNodeBounds(node, el); - node.intersect = function(point2) { - const pos = intersect.rect(node, point2); - const x = pos.x - node.x; - if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { - let y = ry * ry * (1 - x * x / (rx * rx)); - if (y != 0) { - y = Math.sqrt(y); - } - y = ry - y; - if (point2.y - node.y > 0) { - y = -y; - } - pos.y += y; - } - return pos; - }; - return shapeSvg; -}; -const rect = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes + " " + node.class, - true - ); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = node.positioned ? node.width : bbox.width + node.padding; - const totalHeight = node.positioned ? node.height : bbox.height + node.padding; - const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; - const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; - rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const composite = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes, - true - ); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = node.positioned ? node.width : bbox.width + node.padding; - const totalHeight = node.positioned ? node.height : bbox.height + node.padding; - const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; - const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; - rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const labelRect = async (parent, node) => { - const { shapeSvg } = await labelHelper(parent, node, "label", true); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = 0; - const totalHeight = 0; - rect2.attr("width", totalWidth).attr("height", totalHeight); - shapeSvg.attr("class", "label edgeLabel"); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { - const strokeDashArray = []; - const addBorder = (length) => { - strokeDashArray.push(length, 0); - }; - const skipBorder = (length) => { - strokeDashArray.push(0, length); - }; - if (borders.includes("t")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); - addBorder(totalWidth); - } else { - skipBorder(totalWidth); - } - if (borders.includes("r")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); - addBorder(totalHeight); - } else { - skipBorder(totalHeight); - } - if (borders.includes("b")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); - addBorder(totalWidth); - } else { - skipBorder(totalWidth); - } - if (borders.includes("l")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); - addBorder(totalHeight); - } else { - skipBorder(totalHeight); - } - rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); -} -const rectWithTitle = (parent, node) => { - let classes; - if (!node.classes) { - classes = "node default"; - } else { - classes = "node " + node.classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const innerLine = shapeSvg.insert("line"); - const label = shapeSvg.insert("g").attr("class", "label"); - const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; - let title = ""; - if (typeof text2 === "object") { - title = text2[0]; - } else { - title = text2; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); - const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); - let bbox = { width: 0, height: 0 }; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); - const textRows = text2.slice(1, text2.length); - let titleBox = text.getBBox(); - const descr = label.node().appendChild( - createLabel$1(textRows.join ? textRows.join("
      ") : textRows, node.labelStyle, true, true) - ); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = descr.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - const halfPadding = node.padding / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr).attr( - "transform", - "translate( " + // (titleBox.width - bbox.width) / 2 + - (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" - ); - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text).attr( - "transform", - "translate( " + // (titleBox.width - bbox.width) / 2 + - (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" - ); - bbox = label.node().getBBox(); - label.attr( - "transform", - "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" - ); - rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const stadium = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const h = bbox.height + node.padding; - const w = bbox.width + h / 4 + node.padding; - const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const circle = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); - return intersect.circle(node, bbox.width / 2 + halfPadding, point2); - }; - return shapeSvg; -}; -const doublecircle = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const gap = 5; - const circleGroup = shapeSvg.insert("g", ":first-child"); - const outerCircle = circleGroup.insert("circle"); - const innerCircle = circleGroup.insert("circle"); - circleGroup.attr("class", node.class); - outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); - innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); - updateNodeBounds(node, outerCircle); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); - return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); - }; - return shapeSvg; -}; -const subroutine = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 0, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: 0, y: -h }, - { x: 0, y: 0 }, - { x: -8, y: 0 }, - { x: w + 8, y: 0 }, - { x: w + 8, y: -h }, - { x: -8, y: -h }, - { x: -8, y: 0 } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const start = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - return intersect.circle(node, 7, point2); - }; - return shapeSvg; -}; -const forkJoin = (parent, node, dir) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - let width = 70; - let height = 10; - if (dir === "LR") { - width = 10; - height = 70; - } - const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); - updateNodeBounds(node, shape); - node.height = node.height + node.padding / 2; - node.width = node.width + node.padding / 2; - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const end = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const innerCircle = shapeSvg.insert("circle", ":first-child"); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); - innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - return intersect.circle(node, 7, point2); - }; - return shapeSvg; -}; -const class_box = (parent, node) => { - const halfPadding = node.padding / 2; - const rowPadding = 4; - const lineHeight = 8; - let classes; - if (!node.classes) { - classes = "node default"; - } else { - classes = "node " + node.classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const topLine = shapeSvg.insert("line"); - const bottomLine = shapeSvg.insert("line"); - let maxWidth = 0; - let maxHeight = rowPadding; - const labelContainer = shapeSvg.insert("g").attr("class", "label"); - let verticalPos = 0; - const hasInterface = node.classData.annotations && node.classData.annotations[0]; - const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; - const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); - let interfaceBBox = interfaceLabel.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = interfaceLabel.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel); - interfaceBBox = div.getBoundingClientRect(); - dv.attr("width", interfaceBBox.width); - dv.attr("height", interfaceBBox.height); - } - if (node.classData.annotations[0]) { - maxHeight += interfaceBBox.height + rowPadding; - maxWidth += interfaceBBox.width; - } - let classTitleString = node.classData.label; - if (node.classData.type !== void 0 && node.classData.type !== "") { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - classTitleString += "<" + node.classData.type + ">"; - } else { - classTitleString += "<" + node.classData.type + ">"; - } - } - const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr("class", "classTitle"); - let classTitleBBox = classTitleLabel.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = classTitleLabel.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel); - classTitleBBox = div.getBoundingClientRect(); - dv.attr("width", classTitleBBox.width); - dv.attr("height", classTitleBBox.height); - } - maxHeight += classTitleBBox.height + rowPadding; - if (classTitleBBox.width > maxWidth) { - maxWidth = classTitleBBox.width; - } - const classAttributes = []; - node.classData.members.forEach((member) => { - const parsedInfo = member.getDisplayDetails(); - let parsedText = parsedInfo.displayText; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - parsedText = parsedText.replace(//g, ">"); - } - const lbl = labelContainer.node().appendChild( - createLabel$1( - parsedText, - parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, - true, - true - ) - ); - let bbox = lbl.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = lbl.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (bbox.width > maxWidth) { - maxWidth = bbox.width; - } - maxHeight += bbox.height + rowPadding; - classAttributes.push(lbl); - }); - maxHeight += lineHeight; - const classMethods = []; - node.classData.methods.forEach((member) => { - const parsedInfo = member.getDisplayDetails(); - let displayText = parsedInfo.displayText; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - displayText = displayText.replace(//g, ">"); - } - const lbl = labelContainer.node().appendChild( - createLabel$1( - displayText, - parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, - true, - true - ) - ); - let bbox = lbl.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = lbl.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (bbox.width > maxWidth) { - maxWidth = bbox.width; - } - maxHeight += bbox.height + rowPadding; - classMethods.push(lbl); - }); - maxHeight += lineHeight; - if (hasInterface) { - let diffX2 = (maxWidth - interfaceBBox.width) / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel).attr( - "transform", - "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" - ); - verticalPos = interfaceBBox.height + rowPadding; - } - let diffX = (maxWidth - classTitleBBox.width) / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr( - "transform", - "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" - ); - verticalPos += classTitleBBox.height + rowPadding; - topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); - verticalPos += lineHeight; - classAttributes.forEach((lbl) => { - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( - "transform", - "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" - ); - const memberBBox = lbl == null ? void 0 : lbl.getBBox(); - verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; - }); - verticalPos += lineHeight; - bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); - verticalPos += lineHeight; - classMethods.forEach((lbl) => { - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( - "transform", - "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" - ); - const memberBBox = lbl == null ? void 0 : lbl.getBBox(); - verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; - }); - rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const shapes = { - rhombus: question, - composite, - question, - rect, - labelRect, - rectWithTitle, - choice, - circle, - doublecircle, - stadium, - hexagon, - block_arrow, - rect_left_inv_arrow, - lean_right, - lean_left, - trapezoid, - inv_trapezoid, - rect_right_inv_arrow, - cylinder, - start, - end, - note: note$1, - subroutine, - fork: forkJoin, - join: forkJoin, - class_box -}; -let nodeElems = {}; -const insertNode = async (elem, node, dir) => { - let newEl; - let el; - if (node.link) { - let target; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { - target = "_top"; - } else if (node.linkTarget) { - target = node.linkTarget || "_blank"; - } - newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); - el = await shapes[node.shape](newEl, node, dir); - } else { - el = await shapes[node.shape](elem, node, dir); - newEl = el; - } - if (node.tooltip) { - el.attr("title", node.tooltip); - } - if (node.class) { - el.attr("class", "node default " + node.class); - } - newEl.attr("data-node", "true"); - newEl.attr("data-id", node.id); - nodeElems[node.id] = newEl; - if (node.haveCallback) { - nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); - } - return newEl; -}; -const setNodeElem = (elem, node) => { - nodeElems[node.id] = elem; -}; -const clear$1 = () => { - nodeElems = {}; -}; -const positionNode = (node) => { - const el = nodeElems[node.id]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( - "Transforming node", - node.diff, - node, - "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" - ); - const padding = 8; - const diff = node.diff || 0; - if (node.clusterNode) { - el.attr( - "transform", - "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" - ); - } else { - el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); - } - return diff; -}; -const getSubGraphTitleMargins = ({ - flowchart -}) => { - var _a, _b; - const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; - const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; - const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; - return { - subGraphTitleTopMargin, - subGraphTitleBottomMargin, - subGraphTitleTotalMargin - }; -}; -const markerOffsets = { - aggregation: 18, - extension: 18, - composition: 18, - dependency: 6, - lollipop: 13.5, - arrow_point: 5.3 -}; -function calculateDeltaAndAngle(point1, point2) { - if (point1 === void 0 || point2 === void 0) { - return { angle: 0, deltaX: 0, deltaY: 0 }; - } - point1 = pointTransformer(point1); - point2 = pointTransformer(point2); - const [x1, y1] = [point1.x, point1.y]; - const [x2, y2] = [point2.x, point2.y]; - const deltaX = x2 - x1; - const deltaY = y2 - y1; - return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; -} -const pointTransformer = (data) => { - if (Array.isArray(data)) { - return { x: data[0], y: data[1] }; - } - return data; -}; -const getLineFunctionsWithOffset = (edge) => { - return { - x: function(d, i, data) { - let offset = 0; - if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { - const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); - offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); - } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { - const { angle, deltaX } = calculateDeltaAndAngle( - data[data.length - 1], - data[data.length - 2] - ); - offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); - } - return pointTransformer(d).x + offset; - }, - y: function(d, i, data) { - let offset = 0; - if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { - const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); - offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); - } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { - const { angle, deltaY } = calculateDeltaAndAngle( - data[data.length - 1], - data[data.length - 2] - ); - offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); - } - return pointTransformer(d).y + offset; - } - }; -}; -const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { - if (edge.arrowTypeStart) { - addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); - } - if (edge.arrowTypeEnd) { - addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); - } -}; -const arrowTypesMap = { - arrow_cross: "cross", - arrow_point: "point", - arrow_barb: "barb", - arrow_circle: "circle", - aggregation: "aggregation", - extension: "extension", - composition: "composition", - dependency: "dependency", - lollipop: "lollipop" -}; -const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { - const endMarkerType = arrowTypesMap[arrowType]; - if (!endMarkerType) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); - return; - } - const suffix = position === "start" ? "Start" : "End"; - svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); -}; -let edgeLabels = {}; -let terminalLabels = {}; -const clear = () => { - edgeLabels = {}; - terminalLabels = {}; -}; -const insertEdgeLabel = (elem, edge) => { - const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); - const labelElement = edge.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { - style: edge.labelStyle, - useHtmlLabels, - addSvgBackground: true - }) : createLabel$1(edge.label, edge.labelStyle); - const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); - const label = edgeLabel.insert("g").attr("class", "label"); - label.node().appendChild(labelElement); - let bbox = labelElement.getBBox(); - if (useHtmlLabels) { - const div = labelElement.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(labelElement); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - edgeLabels[edge.id] = edgeLabel; - edge.width = bbox.width; - edge.height = bbox.height; - let fo; - if (edge.startLabelLeft) { - const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); - const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); - const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(startLabelElement); - const slBox = startLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].startLeft = startEdgeLabelLeft; - setTerminalWidth(fo, edge.startLabelLeft); - } - if (edge.startLabelRight) { - const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); - const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); - const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); - fo = startEdgeLabelRight.node().appendChild(startLabelElement); - inner.node().appendChild(startLabelElement); - const slBox = startLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].startRight = startEdgeLabelRight; - setTerminalWidth(fo, edge.startLabelRight); - } - if (edge.endLabelLeft) { - const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); - const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); - const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(endLabelElement); - const slBox = endLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - endEdgeLabelLeft.node().appendChild(endLabelElement); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].endLeft = endEdgeLabelLeft; - setTerminalWidth(fo, edge.endLabelLeft); - } - if (edge.endLabelRight) { - const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); - const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); - const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(endLabelElement); - const slBox = endLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - endEdgeLabelRight.node().appendChild(endLabelElement); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].endRight = endEdgeLabelRight; - setTerminalWidth(fo, edge.endLabelRight); - } - return labelElement; -}; -function setTerminalWidth(fo, value) { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { - fo.style.width = value.length * 9 + "px"; - fo.style.height = "12px"; - } -} -const positionEdgeLabel = (edge, paths) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); - let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); - if (edge.label) { - const el = edgeLabels[edge.id]; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( - "Moving label " + edge.label + " from (", - x, - ",", - y, - ") to (", - pos.x, - ",", - pos.y, - ") abc88" - ); - if (paths.updatedPath) { - x = pos.x; - y = pos.y; - } - } - el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); - } - if (edge.startLabelLeft) { - const el = terminalLabels[edge.id].startLeft; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.startLabelRight) { - const el = terminalLabels[edge.id].startRight; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( - edge.arrowTypeStart ? 10 : 0, - "start_right", - path - ); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.endLabelLeft) { - const el = terminalLabels[edge.id].endLeft; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.endLabelRight) { - const el = terminalLabels[edge.id].endRight; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } -}; -const outsideNode = (node, point2) => { - const x = node.x; - const y = node.y; - const dx = Math.abs(point2.x - x); - const dy = Math.abs(point2.y - y); - const w = node.width / 2; - const h = node.height / 2; - if (dx >= w || dy >= h) { - return true; - } - return false; -}; -const intersection = (node, outsidePoint, insidePoint) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: - outsidePoint: ${JSON.stringify(outsidePoint)} - insidePoint : ${JSON.stringify(insidePoint)} - node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); - const x = node.x; - const y = node.y; - const dx = Math.abs(x - insidePoint.x); - const w = node.width / 2; - let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; - const h = node.height / 2; - const Q = Math.abs(outsidePoint.y - insidePoint.y); - const R = Math.abs(outsidePoint.x - insidePoint.x); - if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { - let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; - r = R * q / Q; - const res = { - x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, - y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q - }; - if (r === 0) { - res.x = outsidePoint.x; - res.y = outsidePoint.y; - } - if (R === 0) { - res.x = outsidePoint.x; - } - if (Q === 0) { - res.y = outsidePoint.y; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); - return res; - } else { - if (insidePoint.x < outsidePoint.x) { - r = outsidePoint.x - w - x; - } else { - r = x - w - outsidePoint.x; - } - let q = Q * r / R; - let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; - let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); - if (r === 0) { - _x = outsidePoint.x; - _y = outsidePoint.y; - } - if (R === 0) { - _x = outsidePoint.x; - } - if (Q === 0) { - _y = outsidePoint.y; - } - return { x: _x, y: _y }; - } -}; -const cutPathAtIntersect = (_points, boundaryNode) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundaryNode); - let points = []; - let lastPointOutside = _points[0]; - let isInside = false; - _points.forEach((point2) => { - if (!outsideNode(boundaryNode, point2) && !isInside) { - const inter = intersection(boundaryNode, lastPointOutside, point2); - let pointPresent = false; - points.forEach((p) => { - pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; - }); - if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { - points.push(inter); - } - isInside = true; - } else { - lastPointOutside = point2; - if (!isInside) { - points.push(point2); - } - } - }); - return points; -}; -const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { - let points = edge.points; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); - let pointsHasChanged = false; - const tail = graph.node(e.v); - var head = graph.node(e.w); - if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { - points = points.slice(1, edge.points.length - 1); - points.unshift(tail.intersect(points[0])); - points.push(head.intersect(points[points.length - 1])); - } - if (edge.toCluster) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); - points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); - pointsHasChanged = true; - } - if (edge.fromCluster) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); - points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); - pointsHasChanged = true; - } - const lineData = points.filter((p) => !Number.isNaN(p.y)); - let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .qrM; - if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { - curve = edge.curve; - } - const { x, y } = getLineFunctionsWithOffset(edge); - const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(x).y(y).curve(curve); - let strokeClasses; - switch (edge.thickness) { - case "normal": - strokeClasses = "edge-thickness-normal"; - break; - case "thick": - strokeClasses = "edge-thickness-thick"; - break; - case "invisible": - strokeClasses = "edge-thickness-thick"; - break; - default: - strokeClasses = ""; - } - switch (edge.pattern) { - case "solid": - strokeClasses += " edge-pattern-solid"; - break; - case "dotted": - strokeClasses += " edge-pattern-dotted"; - break; - case "dashed": - strokeClasses += " edge-pattern-dashed"; - break; - } - const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); - let url = ""; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { - url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; - url = url.replace(/\(/g, "\\("); - url = url.replace(/\)/g, "\\)"); - } - addEdgeMarkers(svgPath, edge, url, id, diagramType); - let paths = {}; - if (pointsHasChanged) { - paths.updatedPath = points; - } - paths.originalPath = edge.points; - return paths; -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1714037f.090798cc.js b/pr-preview/pr-1594/assets/js/1714037f.090798cc.js deleted file mode 100644 index 237be137fc..0000000000 --- a/pr-preview/pr-1594/assets/js/1714037f.090798cc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4480],{60189:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var t=s(74848),r=s(28453);const i={},o="Amazon S3 to Snowflake",l={id:"guides/system-specific-dataflows/s3-to-snowflake",title:"Amazon S3 to Snowflake",description:"This guide walks you through the process of creating an",source:"@site/docs/guides/system-specific-dataflows/s3-to-snowflake.md",sourceDirName:"guides/system-specific-dataflows",slug:"/guides/system-specific-dataflows/s3-to-snowflake",permalink:"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/system-specific-dataflows/s3-to-snowflake.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Cloud Firestore to Snowflake",permalink:"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh"},next:{title:"Edit Data Flows in the web app",permalink:"/pr-preview/pr-1594/guides/edit-data-flows"}},a={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Introduction",id:"introduction",level:2},{value:"Capture from S3",id:"capture-from-s3",level:2},{value:"Materialize to Snowflake",id:"materialize-to-snowflake",level:2},{value:"What's next?",id:"whats-next",level:2}];function h(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"amazon-s3-to-snowflake",children:"Amazon S3 to Snowflake"}),"\n",(0,t.jsx)(n.p,{children:"This guide walks you through the process of creating an\nend-to-end real-time Data Flow from Amazon S3 to Snowflake using Estuary Flow."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"You'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["(Recommended) understanding of the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/#essential-concepts",children:"basic Flow concepts"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Access to the ",(0,t.jsx)(n.a,{href:"http://dashboard.estuary.dev",children:(0,t.jsx)(n.strong,{children:"Flow web application"})})," through an Estuary account.\nIf you don't have one, visit the web app to register for free."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["An ",(0,t.jsx)(n.strong,{children:"S3 bucket"})," that contains the data you'd like to move to Snowflake."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["For public buckets, verify that the ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-overview.html#access-control-resources-manage-permissions-basics",children:"access policy"})," allows anonymous reads."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["For buckets accessed by a user account, you'll need the AWS ",(0,t.jsx)(n.strong,{children:"access key"})," and ",(0,t.jsx)(n.strong,{children:"secret access key"})," for the user.\nSee the ",(0,t.jsx)(n.a,{href:"https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/",children:"AWS blog"})," for help finding these credentials."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"A Snowflake account with:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A target ",(0,t.jsx)(n.strong,{children:"database"}),", ",(0,t.jsx)(n.strong,{children:"schema"}),", and virtual ",(0,t.jsx)(n.strong,{children:"warehouse"}),"; and a ",(0,t.jsx)(n.strong,{children:"user"})," with a ",(0,t.jsx)(n.strong,{children:"role"})," assigned that grants the appropriate access levels to these resources.\n",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake#setup",children:"You can use a script to quickly create all of these items."})," Have these details on hand for setup with Flow."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The account identifier and host URL noted. ",(0,t.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/admin-account-identifier.html#where-are-account-identifiers-used",children:"The URL is formatted using the account identifier"}),". For example, you might have the account identifier ",(0,t.jsx)(n.code,{children:"orgname-accountname.snowflakecomputing.com"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsxs)(n.p,{children:["In Estuary Flow, you create ",(0,t.jsx)(n.strong,{children:"Data Flows"})," to transfer data from ",(0,t.jsx)(n.strong,{children:"source"})," systems to ",(0,t.jsx)(n.strong,{children:"destination"})," systems in real time.\nIn this use case, your source is an Amazon S3 bucket and your destination is a Snowflake data warehouse."]}),"\n",(0,t.jsx)(n.p,{children:"After following this guide, you'll have a Data Flow that comprises:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A ",(0,t.jsx)(n.strong,{children:"capture"}),", which ingests data from S3"]}),"\n",(0,t.jsxs)(n.li,{children:["A ",(0,t.jsx)(n.strong,{children:"collection"}),", a cloud-backed copy of that data in the Flow system"]}),"\n",(0,t.jsxs)(n.li,{children:["A ",(0,t.jsx)(n.strong,{children:"materialization"}),", which pushes the data to Snowflake"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The capture and materialization rely on plug-in components called ",(0,t.jsx)(n.strong,{children:"connectors"}),".\nWe'll walk through how to configure the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3",children:"S3"})," and ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake",children:"Snowflake"})," connectors to integrate these systems with Flow."]}),"\n",(0,t.jsx)(n.h2,{id:"capture-from-s3",children:"Capture from S3"}),"\n",(0,t.jsx)(n.p,{children:"You'll first create a capture to connect to your S3 bucket, which will yield one or more Flow collections."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to the Flow web application at ",(0,t.jsx)(n.a,{href:"https://dashboard.estuary.dev/",children:"dashboard.estuary.dev"})," and sign in using the\ncredentials provided by your Estuary account manager."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click the ",(0,t.jsx)(n.strong,{children:"Sources"})," tab and choose ",(0,t.jsx)(n.strong,{children:"New Capture"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Find the ",(0,t.jsx)(n.strong,{children:"Amazon S3"})," tile and click ",(0,t.jsx)(n.strong,{children:"Capture"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"A form appears with the properties required for an S3 capture."}),"\n",(0,t.jsxs)(n.ol,{start:"4",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Type a name for your capture."}),"\n",(0,t.jsxs)(n.p,{children:["Your capture name must begin with a ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/catalogs#namespace",children:"prefix"})," to which you ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/authentication",children:"have access"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"Name"})," field, use the drop-down to select your prefix.\nAppend a unique capture name after the ",(0,t.jsx)(n.code,{children:"/"})," to create the full name, for example, ",(0,t.jsx)(n.code,{children:"acmeCo/myS3Capture"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Fill out the required properties for S3."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsxs)(n.a,{href:"https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/",children:[(0,t.jsx)(n.strong,{children:"AWS Access Key ID"})," and ",(0,t.jsx)(n.strong,{children:"AWS Secret Access Key"})]}),": Required for private buckets."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"AWS Region"})," and ",(0,t.jsx)(n.strong,{children:"Bucket"}),": These are listed in your ",(0,t.jsx)(n.a,{href:"https://s3.console.aws.amazon.com/s3/buckets",children:"S3 console"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Prefix"}),": You might organize your S3 bucket using ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html",children:"prefixes"}),", which emulate a directory structure. To capture ",(0,t.jsx)(n.em,{children:"only"})," from a specific prefix, add it here."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Match Keys"}),": Filters to apply to the objects in the S3 bucket. If provided, only data whose absolute path matches the filter will be captured. For example, ",(0,t.jsx)(n.code,{children:"*\\.json"})," will only capture JSON file."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["See the S3 connector documentation for information on ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3#endpoint",children:"advanced fields"})," and ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3#advanced-parsing-cloud-storage-data",children:"parser settings"}),". (You're unlikely to need these for most use cases.)"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Next"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Flow uses the provided configuration to initiate a connection to S3."}),"\n",(0,t.jsx)(n.p,{children:"It generates a permissive schema and details of the Flow collection that will store the data from S3."}),"\n",(0,t.jsx)(n.p,{children:"You'll have the chance to tighten up each collection's JSON schema later, when you materialize to Snowflake."}),"\n",(0,t.jsxs)(n.ol,{start:"7",children:["\n",(0,t.jsxs)(n.li,{children:["Click ",(0,t.jsx)(n.strong,{children:"Save and publish"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"You'll see a notification when the capture publishes successfully."}),"\n",(0,t.jsx)(n.p,{children:"The data currently in your S3 bucket has been captured, and future updates to it will be captured continuously."}),"\n",(0,t.jsxs)(n.ol,{start:"8",children:["\n",(0,t.jsxs)(n.li,{children:["Click ",(0,t.jsx)(n.strong,{children:"Materialize Collections"})," to continue."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"materialize-to-snowflake",children:"Materialize to Snowflake"}),"\n",(0,t.jsx)(n.p,{children:"Next, you'll add a Snowflake materialization to connect the captured data to its destination: your data warehouse."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Locate the ",(0,t.jsx)(n.strong,{children:"Snowflake"})," tile and click ",(0,t.jsx)(n.strong,{children:"Materialization"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"A form appears with the properties required for a Snowflake materialization."}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Choose a unique name for your materialization like you did when naming your capture; for example, ",(0,t.jsx)(n.code,{children:"acmeCo/mySnowflakeMaterialization"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Fill out the required properties for Snowflake (you should have most of these handy from the ",(0,t.jsx)(n.a,{href:"#prerequisites",children:"prerequisites"}),")."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Host URL"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Account"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"User"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Password"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Database"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Schema"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Warehouse"}),": optional"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Role"}),": optional"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Next"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Flow uses the provided configuration to initiate a connection to Snowflake."}),"\n",(0,t.jsxs)(n.p,{children:["You'll be notified if there's an error. In that case, fix the configuration form or Snowflake setup as needed and click ",(0,t.jsx)(n.strong,{children:"Next"})," to try again."]}),"\n",(0,t.jsxs)(n.p,{children:["Once the connection is successful, the Endpoint Config collapses and the ",(0,t.jsx)(n.strong,{children:"Source Collections"})," browser becomes prominent.\nIt shows the collection you captured previously, which will be mapped to a Snowflake table."]}),"\n",(0,t.jsxs)(n.ol,{start:"5",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"Collection Selector"}),", optionally change the name in the ",(0,t.jsx)(n.strong,{children:"Table"})," field."]}),"\n",(0,t.jsx)(n.p,{children:"This will be the name of the output table in Snowflake."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Choose whether to ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake#delta-updates",children:"enable delta updates"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Apply a stricter schema to the collection for the materialization."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["S3 has a flat data structure.\nTo materialize this data effectively to Snowflake, you should apply a schema that can translate to a table structure.\nFlow's ",(0,t.jsx)(n.strong,{children:"Schema Inference"})," tool can help."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"Source Collections"})," browser, click the collection's ",(0,t.jsx)(n.strong,{children:"Collection"})," tab."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Schema Inference"})]}),"\n",(0,t.jsxs)(n.p,{children:["The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the ",(0,t.jsx)(n.code,{children:"readSchema"}),", to use for the materialization."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Review the new schema and click ",(0,t.jsx)(n.strong,{children:"Apply Inferred Schema"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Next"})," to apply the changes you made to the collection."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Save and Publish"}),". You'll see a notification when the full Data Flow publishes successfully."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"whats-next",children:"What's next?"}),"\n",(0,t.jsx)(n.p,{children:"Your Data Flow has been deployed, and will run continuously until it's stopped. Updates in your S3 bucket will be reflected in your Snowflake table as they occur."}),"\n",(0,t.jsxs)(n.p,{children:["You can advance your Data Flow by adding a ",(0,t.jsx)(n.strong,{children:"derivation"}),". Derivations are real-time data transformations.\nSee the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/flowctl/create-derivation",children:"guide to create a derivation"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>l});var t=s(96540);const r={},i=t.createContext(r);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/17896441.adc411f8.js b/pr-preview/pr-1594/assets/js/17896441.adc411f8.js deleted file mode 100644 index 8e983f7e3b..0000000000 --- a/pr-preview/pr-1594/assets/js/17896441.adc411f8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8401],{36365:(e,t,n)=>{n.r(t),n.d(t,{default:()=>le});var s=n(96540),a=n(1003),i=n(89532),o=n(74848);const l=s.createContext(null);function r(e){let{children:t,content:n}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return(0,o.jsx)(l.Provider,{value:a,children:t})}function c(){const e=(0,s.useContext)(l);if(null===e)throw new i.dV("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:n}=c();return(0,o.jsx)(a.be,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var u=n(34164),m=n(24581),h=n(21312),b=n(28774);function x(e){const{permalink:t,title:n,subLabel:s,isNext:a}=e;return(0,o.jsxs)(b.A,{className:(0,u.A)("pagination-nav__link",a?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[s&&(0,o.jsx)("div",{className:"pagination-nav__sublabel",children:s}),(0,o.jsx)("div",{className:"pagination-nav__label",children:n})]})}function p(e){const{previous:t,next:n}=e;return(0,o.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,h.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,o.jsx)(x,{...t,subLabel:(0,o.jsx)(h.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,o.jsx)(x,{...n,subLabel:(0,o.jsx)(h.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}function v(){const{metadata:e}=c();return(0,o.jsx)(p,{previous:e.previous,next:e.next})}var g=n(44586),j=n(48295),f=n(17559),_=n(55597),A=n(32252);const N={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,o.jsx)(h.A,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,o.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,o.jsx)(h.A,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,o.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function C(e){const t=N[e.versionMetadata.banner];return(0,o.jsx)(t,{...e})}function L(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,o.jsx)(h.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,o.jsx)("b",{children:(0,o.jsx)(b.A,{to:n,onClick:s,children:(0,o.jsx)(h.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function T(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:s}}=(0,g.A)(),{pluginId:a}=(0,j.vT)({failfast:!0}),{savePreferredVersionName:i}=(0,_.g1)(a),{latestDocSuggestion:l,latestVersionSuggestion:r}=(0,j.HW)(a),c=l??(d=r).docs.find((e=>e.id===d.mainDocId));var d;return(0,o.jsxs)("div",{className:(0,u.A)(t,f.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,o.jsx)("div",{children:(0,o.jsx)(C,{siteTitle:s,versionMetadata:n})}),(0,o.jsx)("div",{className:"margin-top--md",children:(0,o.jsx)(L,{versionLabel:r.label,to:c.path,onClick:()=>i(r.name)})})]})}function k(e){let{className:t}=e;const n=(0,A.r)();return n.banner?(0,o.jsx)(T,{className:t,versionMetadata:n}):null}function M(e){let{className:t}=e;const n=(0,A.r)();return n.badge?(0,o.jsx)("span",{className:(0,u.A)(t,f.G.docs.docVersionBadge,"badge badge--secondary"),children:(0,o.jsx)(h.A,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}const w={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function B(e){let{permalink:t,label:n,count:s,description:a}=e;return(0,o.jsxs)(b.A,{href:t,title:a,className:(0,u.A)(w.tag,s?w.tagWithCount:w.tagRegular),children:[n,s&&(0,o.jsx)("span",{children:s})]})}const I={tags:"tags_jXut",tag:"tag_QGVx"};function V(e){let{tags:t}=e;return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("b",{children:(0,o.jsx)(h.A,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,o.jsx)("ul",{className:(0,u.A)(I.tags,"padding--none","margin-left--sm"),children:t.map((e=>(0,o.jsx)("li",{className:I.tag,children:(0,o.jsx)(B,{...e})},e.permalink)))})]})}var H=n(12153);function y(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s,tags:a}=e,i=a.length>0,l=!!(t||n||s);return i||l?(0,o.jsxs)("footer",{className:(0,u.A)(f.G.docs.docFooter,"docusaurus-mt-lg"),children:[i&&(0,o.jsx)("div",{className:(0,u.A)("row margin-top--sm",f.G.docs.docFooterTagsRow),children:(0,o.jsx)("div",{className:"col",children:(0,o.jsx)(V,{tags:a})})}),l&&(0,o.jsx)(H.A,{className:(0,u.A)("margin-top--sm",f.G.docs.docFooterEditMetaRow),editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s})]}):null}var E=n(41422),G=n(65195);const P={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function F(e){let{collapsed:t,...n}=e;return(0,o.jsx)("button",{type:"button",...n,className:(0,u.A)("clean-btn",P.tocCollapsibleButton,!t&&P.tocCollapsibleButtonExpanded,n.className),children:(0,o.jsx)(h.A,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const R={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function D(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:a}=e;const{collapsed:i,toggleCollapsed:l}=(0,E.u)({initialState:!0});return(0,o.jsxs)("div",{className:(0,u.A)(R.tocCollapsible,!i&&R.tocCollapsibleExpanded,n),children:[(0,o.jsx)(F,{collapsed:i,onClick:l}),(0,o.jsx)(E.N,{lazy:!0,className:R.tocCollapsibleContent,collapsed:i,children:(0,o.jsx)(G.A,{toc:t,minHeadingLevel:s,maxHeadingLevel:a})})]})}const O={tocMobile:"tocMobile_ITEo"};function S(){const{toc:e,frontMatter:t}=c();return(0,o.jsx)(D,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.A)(f.G.docs.docTocMobile,O.tocMobile)})}var U=n(67763);function z(){const{toc:e,frontMatter:t}=c();return(0,o.jsx)(U.A,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:f.G.docs.docTocDesktop})}var W=n(51107),Q=n(15533);function X(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return(0,o.jsxs)("div",{className:(0,u.A)(f.G.docs.docMarkdown,"markdown"),children:[n&&(0,o.jsx)("header",{children:(0,o.jsx)(W.A,{as:"h1",children:n})}),(0,o.jsx)(Q.A,{children:t})]})}var Y=n(84142),Z=n(99169),$=n(86025);function q(e){return(0,o.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,o.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const J={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function K(){const e=(0,$.Ay)("/");return(0,o.jsx)("li",{className:"breadcrumbs__item",children:(0,o.jsx)(b.A,{"aria-label":(0,h.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,o.jsx)(q,{className:J.breadcrumbHomeIcon})})})}const ee={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function te(e){let{children:t,href:n,isLast:s}=e;const a="breadcrumbs__link";return s?(0,o.jsx)("span",{className:a,itemProp:"name",children:t}):n?(0,o.jsx)(b.A,{className:a,href:n,itemProp:"item",children:(0,o.jsx)("span",{itemProp:"name",children:t})}):(0,o.jsx)("span",{className:a,children:t})}function ne(e){let{children:t,active:n,index:s,addMicrodata:a}=e;return(0,o.jsxs)("li",{...a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,u.A)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,o.jsx)("meta",{itemProp:"position",content:String(s+1)})]})}function se(){const e=(0,Y.OF)(),t=(0,Z.Dt)();return e?(0,o.jsx)("nav",{className:(0,u.A)(f.G.docs.docBreadcrumbs,ee.breadcrumbsContainer),"aria-label":(0,h.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,o.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,o.jsx)(K,{}),e.map(((t,n)=>{const s=n===e.length-1,a="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,o.jsx)(ne,{active:s,index:n,addMicrodata:!!a,children:(0,o.jsx)(te,{href:a,isLast:s,children:t.label})},n)}))]})}):null}var ae=n(50996);const ie={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function oe(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.l)(),s=e.hide_table_of_contents,a=!s&&t.length>0;return{hidden:s,mobile:a?(0,o.jsx)(S,{}):void 0,desktop:!a||"desktop"!==n&&"ssr"!==n?void 0:(0,o.jsx)(z,{})}}(),{metadata:{unlisted:s}}=c();return(0,o.jsxs)("div",{className:"row",children:[(0,o.jsxs)("div",{className:(0,u.A)("col",!n.hidden&&ie.docItemCol),children:[s&&(0,o.jsx)(ae.A,{}),(0,o.jsx)(k,{}),(0,o.jsxs)("div",{className:ie.docItemContainer,children:[(0,o.jsxs)("article",{children:[(0,o.jsx)(se,{}),(0,o.jsx)(M,{}),n.mobile,(0,o.jsx)(X,{children:t}),(0,o.jsx)(y,{})]}),(0,o.jsx)(v,{})]})]}),n.desktop&&(0,o.jsx)("div",{className:"col col--3",children:n.desktop})]})}function le(e){const t=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,o.jsx)(r,{content:e.content,children:(0,o.jsxs)(a.e3,{className:t,children:[(0,o.jsx)(d,{}),(0,o.jsx)(oe,{children:(0,o.jsx)(n,{})})]})})}},61114:(e,t,n)=>{n.d(t,{A:()=>o});var s=n(96540),a=n(99702),i=n(74848);a.N.initialize({startOnLoad:!0});const o=e=>{let{chart:t}=e;return(0,s.useEffect)((()=>{a.N.contentLoaded()}),[]),(0,i.jsx)("div",{className:"mermaid",children:t})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1875cf18.3bf76a87.js b/pr-preview/pr-1594/assets/js/1875cf18.3bf76a87.js deleted file mode 100644 index 3a5e05eb9a..0000000000 --- a/pr-preview/pr-1594/assets/js/1875cf18.3bf76a87.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2216],{88235:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>l,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var o=n(74848),r=n(28453);const i={},s="Datadog HTTP Ingest (Webhook)",a={id:"reference/Connectors/capture-connectors/datadog-ingest",title:"Datadog HTTP Ingest (Webhook)",description:"The Datadog HTTP Ingest connector allows you to capture data from incoming HTTP requests from Datadog.",source:"@site/docs/reference/Connectors/capture-connectors/datadog-ingest.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/datadog-ingest",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/datadog-ingest.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Confluence",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence"},next:{title:"Dropbox",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox"}},d={},c=[{value:"Usage",id:"usage",level:2},{value:"Send sample data to Flow",id:"send-sample-data-to-flow",level:3},{value:"Configure a Datadog webhook",id:"configure-a-datadog-webhook",level:3},{value:"Webhook URLs",id:"webhook-urls",level:3},{value:"Authentication",id:"authentication",level:3},{value:"Webhook signature verification",id:"webhook-signature-verification",level:3},{value:"Endpoint Configuration",id:"endpoint-configuration",level:2},{value:"Resource configuration",id:"resource-configuration",level:2}];function h(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"datadog-http-ingest-webhook",children:"Datadog HTTP Ingest (Webhook)"}),"\n",(0,o.jsxs)(t.p,{children:["The Datadog HTTP Ingest connector allows you to capture data from ",(0,o.jsx)(t.em,{children:"incoming"})," HTTP requests from Datadog.\nA common use case is to capture webhook deliveries, turning them into a Flow collection."]}),"\n",(0,o.jsxs)(t.p,{children:["The connector is available for use in the Flow web application. For local development or open-source workflows, ",(0,o.jsx)(t.a,{href:"https://ghcr.io/estuary/source-http-ingest:dev",children:(0,o.jsx)(t.code,{children:"ghcr.io/estuary/source-http-ingest:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,o.jsx)(t.h2,{id:"usage",children:"Usage"}),"\n",(0,o.jsx)(t.p,{children:"This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific\nsystem or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source."}),"\n",(0,o.jsx)(t.p,{children:"This is useful primarily if you want to test out Flow or see how your webhook data will come over."}),"\n",(0,o.jsx)(t.p,{children:"To begin, use the web app to create a capture. Once published, the confirmation dialog displays\na unique URL for your public endpoint."}),"\n",(0,o.jsx)(t.p,{children:"You're now ready to send data to Flow."}),"\n",(0,o.jsx)(t.h3,{id:"send-sample-data-to-flow",children:"Send sample data to Flow"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Expand ",(0,o.jsx)(t.strong,{children:"POST"})," or ",(0,o.jsx)(t.strong,{children:"PUT"})," and click ",(0,o.jsx)(t.strong,{children:"Try it out"})," to send some example JSON documents using the UI. You can also copy the provided ",(0,o.jsx)(t.code,{children:"curl"})," commands to send data via the command line."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture.\nClick ",(0,o.jsx)(t.strong,{children:"Details"})," to view the data preview."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"configure-a-datadog-webhook",children:"Configure a Datadog webhook"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"In the Datadog Cloud Monitoring Platform, navigate to the Integrations tab and click on the Integrations option in the dropdown."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Using the search bar, search for the Webhook Integration and install it."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Within the Webhook Integration configuration, select new Webhook and enter in the following information:"}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Field"}),(0,o.jsx)(t.th,{children:"Value"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"Name"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"your-webhook"})}),(0,o.jsx)(t.td,{children:"The name of your webhook within Datadog"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"URL"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"https://your-unique-webhook-url/webhook-data"})}),(0,o.jsx)(t.td,{children:"The unique Estuary URL created for ingesting webhook data"})]})]})]}),"\n",(0,o.jsxs)(t.ol,{start:"4",children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"In the Datadog Cloud Monitoring Platform, navigate to Monitors/New Monitor and select Metric for the type."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Define the alert conditions and under ",(0,o.jsx)(t.code,{children:"Notify your team"})," select ",(0,o.jsx)(t.code,{children:"@your-webhook"})," from the dropdown."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"webhook-urls",children:"Webhook URLs"}),"\n",(0,o.jsxs)(t.p,{children:["To determine the full URL, start with the base URL from the Flow web app (for example ",(0,o.jsx)(t.code,{children:"https://abc123-8080.us-central1.v1.estuary-data.dev"}),"), and then append the path."]}),"\n",(0,o.jsxs)(t.p,{children:["The path will be whatever is in the ",(0,o.jsx)(t.code,{children:"paths"})," endpoint configuration field (",(0,o.jsx)(t.code,{children:"/webhook-data"})," by default). For example, your full webhook URL would be ",(0,o.jsx)(t.code,{children:"https:///webhook-data"}),". You can add additional paths to ",(0,o.jsx)(t.code,{children:"paths"}),', and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you\'re editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to ',(0,o.jsx)(t.code,{children:"/my-webhook.json"}),", then the full URL for that binding would be ",(0,o.jsx)(t.code,{children:"https:///my-webhook.json"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["Any URL query parameters that are sent on the request will be captured and serialized under ",(0,o.jsx)(t.code,{children:"/_meta/query/*"})," the in documents. For example, a webhook request that's sent to ",(0,o.jsx)(t.code,{children:"/webhook-data?testKey=testValue"})," would result in a document like:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:'{\n "_meta": {\n "webhookId": "...",\n "query": {\n "testKey": "testValue"\n },\n ...\n }\n ...\n}\n'})}),"\n",(0,o.jsx)(t.h3,{id:"authentication",children:"Authentication"}),"\n",(0,o.jsxs)(t.p,{children:["The connector can optionally require each request to present an authentication token as part of an ",(0,o.jsx)(t.code,{children:"Authorization: Bearer "}),' HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an ',(0,o.jsx)(t.code,{children:"Authorization"})," header with the value of your token. For example, if you use an auth token value of ",(0,o.jsx)(t.code,{children:"mySecretToken"}),", then the header on each request must be ",(0,o.jsx)(t.code,{children:"Authorization: Bearer mySecretToken"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection."})," We recommend using authentication whenever possible."]}),"\n",(0,o.jsx)(t.h3,{id:"webhook-signature-verification",children:"Webhook signature verification"}),"\n",(0,o.jsxs)(t.p,{children:["This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact ",(0,o.jsx)(t.a,{href:"mailto://support@estuary.dev",children:(0,o.jsx)(t.code,{children:"support@estuary.dev"})})," and let us know."]}),"\n",(0,o.jsx)(t.h2,{id:"endpoint-configuration",children:"Endpoint Configuration"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Property"}),(0,o.jsx)(t.th,{children:"Title"}),(0,o.jsx)(t.th,{children:"Description"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Required/Default"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"****"}),(0,o.jsx)(t.td,{children:"EndpointConfig"}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"object"}),(0,o.jsx)(t.td,{children:"Required"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/require_auth_token"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"Optional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"null"})})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/paths"})}),(0,o.jsx)(t.td,{children:"URL Paths"}),(0,o.jsx)(t.td,{children:"List of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"null"})})]})]})]}),"\n",(0,o.jsx)(t.h2,{id:"resource-configuration",children:"Resource configuration"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Property"}),(0,o.jsx)(t.th,{children:"Title"}),(0,o.jsx)(t.th,{children:"Description"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Required/Default"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"****"}),(0,o.jsx)(t.td,{children:"ResourceConfig"}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"object"}),(0,o.jsx)(t.td,{children:"Required"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/idFromHeader"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"Set the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/path"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"The URL path to use for adding documents to this binding. Defaults to the name of the collection."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/stream"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"The name of the binding, which is used as a merge key when doing Discovers."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{})]})]})]})]})}function l(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>a});var o=n(96540);const r={},i=o.createContext(r);function s(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/189edb0d.5a86180d.js b/pr-preview/pr-1594/assets/js/189edb0d.5a86180d.js deleted file mode 100644 index 19991249ee..0000000000 --- a/pr-preview/pr-1594/assets/js/189edb0d.5a86180d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5352],{1891:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var t=i(74848),r=i(28453);const o={sidebar_position:3},s="Create a derivation with flowctl",l={id:"guides/flowctl/create-derivation",title:"Create a derivation with flowctl",description:"Once you're familiar with creating a basic Data Flow, you can take things a step further",source:"@site/docs/guides/flowctl/create-derivation.md",sourceDirName:"guides/flowctl",slug:"/guides/flowctl/create-derivation",permalink:"/pr-preview/pr-1594/guides/flowctl/create-derivation",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/flowctl/create-derivation.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Edit a draft created in the web app",permalink:"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp"},next:{title:"Troubleshoot a task with flowctl",permalink:"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task"}},a={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Get started with GitPod",id:"get-started-with-gitpod",level:2},{value:"Add a SQL derivation in GitPod",id:"add-a-sql-derivation-in-gitpod",level:2},{value:"Add a TypeScript derivation in GitPod",id:"add-a-typescript-derivation-in-gitpod",level:2},{value:"Create a derivation locally",id:"create-a-derivation-locally",level:2},{value:"Updating an existing derivation",id:"updating-an-existing-derivation",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"create-a-derivation-with-flowctl",children:"Create a derivation with flowctl"}),"\n",(0,t.jsxs)(n.p,{children:["Once you're familiar with creating a basic ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/#essential-concepts",children:"Data Flow"}),", you can take things a step further\nand transform your data with ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivations"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["A ",(0,t.jsx)(n.strong,{children:"derivation"})," is a kind of Flow collection that results from the transformation of one or more other collections.\nThis transformed stream of data keeps the order of the source data intact,\nand can then be ",(0,t.jsx)(n.strong,{children:"materialized"})," to an outside system or further transformed with another derivation.\nWhen you master derivations, you unlock the full flexibility and power of Flow."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A Flow account and access to the web app.\nIf you don't have an account yet, ",(0,t.jsx)(n.a,{href:"https://dashboard.estuary.dev",children:"go to the web app"})," to register for free."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["An existing Flow ",(0,t.jsx)(n.strong,{children:"collection"}),". Typically, you create this through a ",(0,t.jsx)(n.strong,{children:"capture"})," in the Flow web application.\nIf you need help, see the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"guide to create a Data Flow"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"A development environment to work with flowctl. Choose between:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.gitpod.io/",children:"GitPod"}),", the cloud development environment integrated with Flow.\nGitPod comes ready for derivation writing, with stubbed out files and flowctl installed. You'll need a GitLab, GitHub, or BitBucket account to log in."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Your local development environment. ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/getting-started/installation#get-started-with-the-flow-cli",children:"Install flowctl locally"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"get-started-with-gitpod",children:"Get started with GitPod"}),"\n",(0,t.jsx)(n.p,{children:"You'll write your derivation using GitPod, a cloud development environment integrated in the Flow web app."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Navigate to the ",(0,t.jsx)(n.a,{href:"https://dashboard.estuary.dev/collections",children:"Collections"})," page in Flow."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click on the ",(0,t.jsx)(n.strong,{children:"New Transformation"})," button."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Derive A New Collection"})," pop-up window appears."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"Available Collections"})," dropdown, select the collection you want to use as the source."]}),"\n",(0,t.jsxs)(n.p,{children:["For example, if your organization is ",(0,t.jsx)(n.code,{children:"acmeCo"}),", you might choose the ",(0,t.jsx)(n.code,{children:"acmeCo/resources/anvils"})," collection."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Set the transformation language to either ",(0,t.jsx)(n.strong,{children:"SQL"})," and ",(0,t.jsx)(n.strong,{children:"TypeScript"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"SQL transformations can be a more approachable place to start if you're new to derivations.\nTypeScript transformations can provide more resiliency against failures through static type checking."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Give your derivation a name. From the dropdown, choose the name of your catalog prefix and append a unique name, for example ",(0,t.jsx)(n.code,{children:"acmeCo/resources/anvil-status."})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Proceed to GitPod"})," to create your development environment. Sign in with one of the available account types."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["On the ",(0,t.jsx)(n.strong,{children:"New Workspace"})," screen, keep the ",(0,t.jsx)(n.strong,{children:"Context URL"})," option selected and click ",(0,t.jsx)(n.strong,{children:"Continue."})]}),"\n",(0,t.jsx)(n.p,{children:"A GitPod development environment opens.\nA stubbed-out derivation with a transformation has already been created for you in the language you chose. Next, you'll locate and open the source files."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Each slash-delimited prefix of your derivation name has become a folder. Open the nested folders to find the ",(0,t.jsx)(n.code,{children:"flow.yaml"})," file with the derivation specification."]}),"\n",(0,t.jsxs)(n.p,{children:["Following the example above, you'd open the folders called ",(0,t.jsx)(n.code,{children:"acmeCo"}),", then ",(0,t.jsx)(n.code,{children:"resources"})," to find the correct ",(0,t.jsx)(n.code,{children:"flow.yaml"})," file."]}),"\n",(0,t.jsx)(n.p,{children:"The file contains a placeholder collection specification and schema for the derivation."}),"\n",(0,t.jsx)(n.p,{children:"In the same folder, you'll also find supplementary TypeScript or SQL files you'll need for your transformation."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"#add-a-sql-derivation-in-gitpod",children:"Continue with SQL"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"#add-a-typescript-derivation-in-gitpod",children:"Continue with TypeScript"})}),"\n",(0,t.jsxs)(n.admonition,{title:"Authentication",type:"info",children:[(0,t.jsx)(n.p,{children:"When you first connect to GitPod, you will have already authenticated Flow, but if you leave GitPod opened for too long, you may have to reauthenticate Flow. To do this:"}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to the ",(0,t.jsx)(n.a,{href:"https://dashboard.estuary.dev/admin/api",children:"CLI-API tab of the web app"})," and copy your access token."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Run ",(0,t.jsx)(n.code,{children:"flowctl auth token --token "})," in the GitPod terminal."]}),"\n"]}),"\n"]})]}),"\n",(0,t.jsx)(n.h2,{id:"add-a-sql-derivation-in-gitpod",children:"Add a SQL derivation in GitPod"}),"\n",(0,t.jsxs)(n.p,{children:["If you chose ",(0,t.jsx)(n.strong,{children:"SQL"})," as your transformation language, follow these steps."]}),"\n",(0,t.jsxs)(n.p,{children:["Along with the derivation's ",(0,t.jsx)(n.code,{children:"flow.yaml"})," you found in the previous steps, there are two other files:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A ",(0,t.jsx)(n.strong,{children:"lambda"})," file. This is where you'll write your first SQL transformation.\nIts name follows the pattern ",(0,t.jsx)(n.code,{children:"derivation-name.lambda.source-collection-name.sql"}),".\nUsing the example above, it'd be called ",(0,t.jsx)(n.code,{children:"anvil-status.lambda.anvils.sql"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A ",(0,t.jsx)(n.strong,{children:"migrations"})," file. ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations#migrations",children:"Migrations"})," allow you to leverage other features of the sqlite database that backs your derivation by creating tables, indices, views, and more.\nIts name follows the pattern ",(0,t.jsx)(n.code,{children:"derivation-name.migration.0.sql"}),".\nUsing the example above, it'd be called ",(0,t.jsx)(n.code,{children:"anvil-status.migration.0.sql"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Open the ",(0,t.jsx)(n.code,{children:"flow.yaml"})," file for your derivation. It looks something like this:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/resources/anvil-status:\n schema:\n properties:\n your_key:\n type: string\n required:\n - your_key\n type: object\n key:\n - /your_key\n derive:\n using:\n sqlite:\n migrations:\n - anvil-status.migration.0.sql\n transforms:\n - name: anvils\n source: acmeCo/resources/anvils\n shuffle: any\n lambda: anvil-status.lambda.anvils.sql\n"})}),"\n",(0,t.jsx)(n.p,{children:"Note the stubbed out schema and key."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Write the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas",children:"schema"})," you'd like your derivation to conform to and specify its ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#keys",children:"collection key"}),". Keep in mind:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"The source collection's schema."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"The transformation required to get from the source schema to the new schema."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Give the transform a unique ",(0,t.jsx)(n.code,{children:"name"})," (by default, it's the name of the source collection)."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"In the lambda file, write your SQL transformation."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{title:"Tip",type:"info",children:[(0,t.jsx)(n.p,{children:"For help writing your derivation, start with these examples:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view",children:"Continuous materialized view tutorial"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations#tutorial",children:"Acme Bank examples"})}),"\n"]}),(0,t.jsxs)(n.p,{children:["The main ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivations page"})," includes many other examples and in-depth explanations of how derivations work."]})]}),"\n",(0,t.jsxs)(n.ol,{start:"5",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If necessary, open the migration file and write your migration."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Preview the derivation locally."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:"flowctl preview --source flow.yaml\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If the preview output appears as expected, ",(0,t.jsx)(n.strong,{children:"publish"})," the derivation."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:"flowctl catalog publish --source flow.yaml\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The derivation you created is now live and ready for further use.\nYou can access it from the web application and ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-materialization",children:"materialize it to a destination"}),",\njust as you would any other Flow collection."]}),"\n",(0,t.jsx)(n.h2,{id:"add-a-typescript-derivation-in-gitpod",children:"Add a TypeScript derivation in GitPod"}),"\n",(0,t.jsxs)(n.p,{children:["If you chose ",(0,t.jsx)(n.strong,{children:"TypeScript"})," as your transformation language, follow these steps."]}),"\n",(0,t.jsxs)(n.p,{children:["Along with the derivation's ",(0,t.jsx)(n.code,{children:"flow.yaml"})," you found in the previous steps, there's another file for the TypeScript transformation.\nIt follows the naming convention ",(0,t.jsx)(n.code,{children:"derivation-name.ts"}),".\nUsing the example above, it'd be called ",(0,t.jsx)(n.code,{children:"anvil-status.ts"}),"."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Open the ",(0,t.jsx)(n.code,{children:"flow.yaml"})," file for your derivation. It looks something like this:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/resources/anvil-status:\n schema:\n properties:\n your_key:\n type: string\n required:\n - your_key\n type: object\n key:\n - /your_key\n derive:\n using:\n typescript:\n module: anvil-status.ts\n transforms:\n - name: anvils\n source: acmeCo/resources/anvils\n shuffle: any\n"})}),"\n",(0,t.jsx)(n.p,{children:"Note the stubbed out schema and key."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Write the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas",children:"schema"})," you'd like your derivation to conform to and specify the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#keys",children:"collection key"}),". Keep in mind:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"The source collection's schema."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"The transformation required to get from the source schema to the new schema."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Give the transform a unique ",(0,t.jsx)(n.code,{children:"name"})," (by default, it's the name of the source collection)."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"In the TypeScript file, write your transformation."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{title:"Tip",type:"info",children:[(0,t.jsxs)(n.p,{children:["For help writing a TypeScript derivation, start with ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations#current-account-balances",children:"this example"}),"."]}),(0,t.jsxs)(n.p,{children:["The main ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivations page"})," includes many other examples and in-depth explanations of how derivations work."]})]}),"\n",(0,t.jsxs)(n.ol,{start:"6",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Preview the derivation locally."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:"flowctl preview --source flow.yaml\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If the preview output appears how you'd expect, ",(0,t.jsx)(n.strong,{children:"publish"})," the derivation."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:"flowctl catalog publish --source flow.yaml\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The derivation you created is now live and ready for further use.\nYou can access it from the web application and ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-materialization",children:"materialize it to a destination"}),",\njust as you would any other Flow collection."]}),"\n",(0,t.jsx)(n.h2,{id:"create-a-derivation-locally",children:"Create a derivation locally"}),"\n",(0,t.jsx)(n.p,{children:"Creating a derivation locally is largely the same as using GitPod, but has some extra steps. Those extra steps are explained here, but you'll find more useful context in the sections above."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Authorize flowctl."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to the ",(0,t.jsx)(n.a,{href:"https://dashboard.estuary.dev/admin/api",children:"CLI-API tab of the web app"})," and copy your access token."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Run ",(0,t.jsx)(n.code,{children:"flowctl auth token --token "})," in your local environment."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Locate the source collection for your derivation."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Check the web app's ",(0,t.jsx)(n.strong,{children:"Collections"}),".\nAll published entities to which you have access are listed and can be searched."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Run ",(0,t.jsx)(n.code,{children:"flowctl catalog list --collections"}),". This command returns a complete list of collections to which you have access.\nYou can refine by specifying a ",(0,t.jsx)(n.code,{children:"--prefix"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Pull the source collection locally using the full collection name."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:"flowctl catalog pull-specs --name acmeCo/resources/anvils\n"})}),"\n",(0,t.jsx)(n.p,{children:"The source files are written to your current working directory."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Each slash-delimited prefix of your collection name has become a folder. Open the nested folders to find the ",(0,t.jsx)(n.code,{children:"flow.yaml"})," file with the collection specification."]}),"\n",(0,t.jsxs)(n.p,{children:["Following the example above, you'd open the folders called ",(0,t.jsx)(n.code,{children:"acmeCo"}),", then ",(0,t.jsx)(n.code,{children:"resources"})," to find the correct ",(0,t.jsx)(n.code,{children:"flow.yaml"})," file."]}),"\n",(0,t.jsx)(n.p,{children:"The file contains the source collection specification and schema."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add the derivation as a second collection in the ",(0,t.jsx)(n.code,{children:"flow.yaml"})," file."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Write the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas",children:"schema"})," you'd like your derivation to conform to and specify the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#keys",children:"collection key"}),". Reference the source collection's schema, and keep in mind the transformation required to get from the source schema to the new schema."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add the ",(0,t.jsx)(n.code,{children:"derive"})," stanza. See examples for ",(0,t.jsx)(n.a,{href:"#add-a-sql-derivation-in-gitpod",children:"SQL"})," and ",(0,t.jsx)(n.a,{href:"#add-a-sql-derivation-in-gitpod",children:"TypeScript"})," above. Give your transform a a unique name."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Stub out the SQL or TypeScript files for your transform."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:"flowctl generate --source flow.yaml\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Locate the generated file, likely in the same subdirectory as the ",(0,t.jsx)(n.code,{children:"flow.yaml"})," file you've been working in."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Write your transformation."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Preview the derivation locally."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:"flowctl preview --source flow.yaml\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"7",children:["\n",(0,t.jsxs)(n.li,{children:["If the preview output appears how you'd expect, ",(0,t.jsx)(n.strong,{children:"publish"})," the derivation."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:"flowctl catalog publish --source flow.yaml\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The derivation you created is now live and ready for further use.\nYou can access it from the web application and ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-materialization",children:"materialize it to a destination"}),",\njust as you would any other Flow collection."]}),"\n",(0,t.jsx)(n.h2,{id:"updating-an-existing-derivation",children:"Updating an existing derivation"}),"\n",(0,t.jsx)(n.p,{children:"Derivations are applied on a go-forward basis only."}),"\n",(0,t.jsx)(n.p,{children:"If you would like to make an update to an existing derivation (for example, adding columns to the derived collection), you can add a new transform by changing the name of your existing transform to a new name, and at the same time updating your lambda or TypeScript module."}),"\n",(0,t.jsx)(n.p,{children:"From the Flow's perspective, this is equivalent to deleting the old transform and adding a new one. This will backfill over the source collection again with the updated SQL statement."})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>s,x:()=>l});var t=i(96540);const r={},o=t.createContext(r);function s(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1946.abc6ec22.js b/pr-preview/pr-1594/assets/js/1946.abc6ec22.js deleted file mode 100644 index 9bd8775185..0000000000 --- a/pr-preview/pr-1594/assets/js/1946.abc6ec22.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1946],{31946:(t,e,n)=>{n.d(e,{diagram:()=>nt});var a=n(99702),i=n(26312),s=n(28259),r=n(16750),l=(n(74353),n(42838),function(){var t=function(t,e,n,a){for(n=n||{},a=t.length;a--;n[t[a]]=e);return n},e=[1,24],n=[1,25],a=[1,26],i=[1,27],s=[1,28],r=[1,63],l=[1,64],o=[1,65],h=[1,66],d=[1,67],u=[1,68],p=[1,69],y=[1,29],f=[1,30],b=[1,31],g=[1,32],x=[1,33],_=[1,34],m=[1,35],E=[1,36],A=[1,37],S=[1,38],C=[1,39],k=[1,40],O=[1,41],v=[1,42],T=[1,43],w=[1,44],R=[1,45],D=[1,46],N=[1,47],P=[1,48],M=[1,50],j=[1,51],B=[1,52],L=[1,53],Y=[1,54],I=[1,55],U=[1,56],F=[1,57],X=[1,58],z=[1,59],W=[1,60],Q=[14,42],$=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],q=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],V=[1,82],G=[1,83],H=[1,84],K=[1,85],J=[12,14,42],Z=[12,14,33,42],tt=[12,14,33,42,76,77,79,80],et=[12,33],nt=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],at={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:function(t,e,n,a,i,s,r){var l=s.length-1;switch(i){case 3:a.setDirection("TB");break;case 4:a.setDirection("BT");break;case 5:a.setDirection("RL");break;case 6:a.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:a.setC4Type(s[l-3]);break;case 19:a.setTitle(s[l].substring(6)),this.$=s[l].substring(6);break;case 20:a.setAccDescription(s[l].substring(15)),this.$=s[l].substring(15);break;case 21:this.$=s[l].trim(),a.setTitle(this.$);break;case 22:case 23:this.$=s[l].trim(),a.setAccDescription(this.$);break;case 28:case 29:s[l].splice(2,0,"ENTERPRISE"),a.addPersonOrSystemBoundary(...s[l]),this.$=s[l];break;case 30:a.addPersonOrSystemBoundary(...s[l]),this.$=s[l];break;case 31:s[l].splice(2,0,"CONTAINER"),a.addContainerBoundary(...s[l]),this.$=s[l];break;case 32:a.addDeploymentNode("node",...s[l]),this.$=s[l];break;case 33:a.addDeploymentNode("nodeL",...s[l]),this.$=s[l];break;case 34:a.addDeploymentNode("nodeR",...s[l]),this.$=s[l];break;case 35:a.popBoundaryParseStack();break;case 39:a.addPersonOrSystem("person",...s[l]),this.$=s[l];break;case 40:a.addPersonOrSystem("external_person",...s[l]),this.$=s[l];break;case 41:a.addPersonOrSystem("system",...s[l]),this.$=s[l];break;case 42:a.addPersonOrSystem("system_db",...s[l]),this.$=s[l];break;case 43:a.addPersonOrSystem("system_queue",...s[l]),this.$=s[l];break;case 44:a.addPersonOrSystem("external_system",...s[l]),this.$=s[l];break;case 45:a.addPersonOrSystem("external_system_db",...s[l]),this.$=s[l];break;case 46:a.addPersonOrSystem("external_system_queue",...s[l]),this.$=s[l];break;case 47:a.addContainer("container",...s[l]),this.$=s[l];break;case 48:a.addContainer("container_db",...s[l]),this.$=s[l];break;case 49:a.addContainer("container_queue",...s[l]),this.$=s[l];break;case 50:a.addContainer("external_container",...s[l]),this.$=s[l];break;case 51:a.addContainer("external_container_db",...s[l]),this.$=s[l];break;case 52:a.addContainer("external_container_queue",...s[l]),this.$=s[l];break;case 53:a.addComponent("component",...s[l]),this.$=s[l];break;case 54:a.addComponent("component_db",...s[l]),this.$=s[l];break;case 55:a.addComponent("component_queue",...s[l]),this.$=s[l];break;case 56:a.addComponent("external_component",...s[l]),this.$=s[l];break;case 57:a.addComponent("external_component_db",...s[l]),this.$=s[l];break;case 58:a.addComponent("external_component_queue",...s[l]),this.$=s[l];break;case 60:a.addRel("rel",...s[l]),this.$=s[l];break;case 61:a.addRel("birel",...s[l]),this.$=s[l];break;case 62:a.addRel("rel_u",...s[l]),this.$=s[l];break;case 63:a.addRel("rel_d",...s[l]),this.$=s[l];break;case 64:a.addRel("rel_l",...s[l]),this.$=s[l];break;case 65:a.addRel("rel_r",...s[l]),this.$=s[l];break;case 66:a.addRel("rel_b",...s[l]),this.$=s[l];break;case 67:s[l].splice(0,1),a.addRel("rel",...s[l]),this.$=s[l];break;case 68:a.updateElStyle("update_el_style",...s[l]),this.$=s[l];break;case 69:a.updateRelStyle("update_rel_style",...s[l]),this.$=s[l];break;case 70:a.updateLayoutConfig("update_layout_config",...s[l]),this.$=s[l];break;case 71:this.$=[s[l]];break;case 72:s[l].unshift(s[l-1]),this.$=s[l];break;case 73:case 75:this.$=s[l].trim();break;case 74:let t={};t[s[l-1].trim()]=s[l].trim(),this.$=t;break;case 76:this.$=""}},table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{13:70,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{13:71,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{13:72,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{13:73,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{14:[1,74]},t(Q,[2,13],{43:23,29:49,30:61,32:62,20:75,34:r,36:l,37:o,38:h,39:d,40:u,41:p,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W}),t(Q,[2,14]),t($,[2,16],{12:[1,76]}),t(Q,[2,36],{12:[1,77]}),t(q,[2,19]),t(q,[2,20]),{25:[1,78]},{27:[1,79]},t(q,[2,23]),{35:80,75:81,76:V,77:G,79:H,80:K},{35:86,75:81,76:V,77:G,79:H,80:K},{35:87,75:81,76:V,77:G,79:H,80:K},{35:88,75:81,76:V,77:G,79:H,80:K},{35:89,75:81,76:V,77:G,79:H,80:K},{35:90,75:81,76:V,77:G,79:H,80:K},{35:91,75:81,76:V,77:G,79:H,80:K},{35:92,75:81,76:V,77:G,79:H,80:K},{35:93,75:81,76:V,77:G,79:H,80:K},{35:94,75:81,76:V,77:G,79:H,80:K},{35:95,75:81,76:V,77:G,79:H,80:K},{35:96,75:81,76:V,77:G,79:H,80:K},{35:97,75:81,76:V,77:G,79:H,80:K},{35:98,75:81,76:V,77:G,79:H,80:K},{35:99,75:81,76:V,77:G,79:H,80:K},{35:100,75:81,76:V,77:G,79:H,80:K},{35:101,75:81,76:V,77:G,79:H,80:K},{35:102,75:81,76:V,77:G,79:H,80:K},{35:103,75:81,76:V,77:G,79:H,80:K},{35:104,75:81,76:V,77:G,79:H,80:K},t(J,[2,59]),{35:105,75:81,76:V,77:G,79:H,80:K},{35:106,75:81,76:V,77:G,79:H,80:K},{35:107,75:81,76:V,77:G,79:H,80:K},{35:108,75:81,76:V,77:G,79:H,80:K},{35:109,75:81,76:V,77:G,79:H,80:K},{35:110,75:81,76:V,77:G,79:H,80:K},{35:111,75:81,76:V,77:G,79:H,80:K},{35:112,75:81,76:V,77:G,79:H,80:K},{35:113,75:81,76:V,77:G,79:H,80:K},{35:114,75:81,76:V,77:G,79:H,80:K},{35:115,75:81,76:V,77:G,79:H,80:K},{20:116,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{12:[1,118],33:[1,117]},{35:119,75:81,76:V,77:G,79:H,80:K},{35:120,75:81,76:V,77:G,79:H,80:K},{35:121,75:81,76:V,77:G,79:H,80:K},{35:122,75:81,76:V,77:G,79:H,80:K},{35:123,75:81,76:V,77:G,79:H,80:K},{35:124,75:81,76:V,77:G,79:H,80:K},{35:125,75:81,76:V,77:G,79:H,80:K},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(Q,[2,15]),t($,[2,17],{21:22,19:130,22:e,23:n,24:a,26:i,28:s}),t(Q,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:n,24:a,26:i,28:s,34:r,36:l,37:o,38:h,39:d,40:u,41:p,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W}),t(q,[2,21]),t(q,[2,22]),t(J,[2,39]),t(Z,[2,71],{75:81,35:132,76:V,77:G,79:H,80:K}),t(tt,[2,73]),{78:[1,133]},t(tt,[2,75]),t(tt,[2,76]),t(J,[2,40]),t(J,[2,41]),t(J,[2,42]),t(J,[2,43]),t(J,[2,44]),t(J,[2,45]),t(J,[2,46]),t(J,[2,47]),t(J,[2,48]),t(J,[2,49]),t(J,[2,50]),t(J,[2,51]),t(J,[2,52]),t(J,[2,53]),t(J,[2,54]),t(J,[2,55]),t(J,[2,56]),t(J,[2,57]),t(J,[2,58]),t(J,[2,60]),t(J,[2,61]),t(J,[2,62]),t(J,[2,63]),t(J,[2,64]),t(J,[2,65]),t(J,[2,66]),t(J,[2,67]),t(J,[2,68]),t(J,[2,69]),t(J,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(et,[2,28]),t(et,[2,29]),t(et,[2,30]),t(et,[2,31]),t(et,[2,32]),t(et,[2,33]),t(et,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t($,[2,18]),t(Q,[2,38]),t(Z,[2,72]),t(tt,[2,74]),t(J,[2,24]),t(J,[2,35]),t(nt,[2,25]),t(nt,[2,26],{12:[1,138]}),t(nt,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],a=[],i=[null],s=[],r=this.table,l="",o=0,c=0,h=s.slice.call(arguments,1),d=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var y=d.yylloc;s.push(y);var f=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,g,x,_,m,E,A,S,C,k={};;){if(g=n[n.length-1],this.defaultActions[g]?x=this.defaultActions[g]:(null==b&&(C=void 0,"number"!=typeof(C=a.pop()||d.lex()||1)&&(C instanceof Array&&(C=(a=C).pop()),C=e.symbols_[C]||C),b=C),x=r[g]&&r[g][b]),void 0===x||!x.length||!x[0]){var O="";for(m in S=[],r[g])this.terminals_[m]&&m>2&&S.push("'"+this.terminals_[m]+"'");O=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(O,{text:d.match,token:this.terminals_[b]||b,line:d.yylineno,loc:y,expected:S})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+b);switch(x[0]){case 1:n.push(b),i.push(d.yytext),s.push(d.yylloc),n.push(x[1]),b=null,c=d.yyleng,l=d.yytext,o=d.yylineno,y=d.yylloc;break;case 2:if(E=this.productions_[x[1]][1],k.$=i[i.length-E],k._$={first_line:s[s.length-(E||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(E||1)].first_column,last_column:s[s.length-1].last_column},f&&(k._$.range=[s[s.length-(E||1)].range[0],s[s.length-1].range[1]]),void 0!==(_=this.performAction.apply(k,[l,c,o,u.yy,x[1],i,s].concat(h))))return _;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),s=s.slice(0,-1*E)),n.push(this.productions_[x[1]][0]),i.push(k.$),s.push(k._$),A=r[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},it={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var a=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===a.length?this.yylloc.first_column:0)+a[a.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,a,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(a=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=a.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:a?a[a.length-1].length-a[a.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,a;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;se[0].length)){if(e=n,a=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[a]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,a){switch(n){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 73:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:case 16:case 70:break;case 14:c;break;case 15:return 12;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:case 53:return this.begin("rel_u"),66;case 54:case 55:return this.begin("rel_d"),67;case 56:case 57:return this.begin("rel_l"),68;case 58:case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:case 79:this.popState(),this.popState();break;case 69:case 71:return 80;case 72:this.begin("string");break;case 74:case 80:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};function st(){this.yy={}}return at.lexer=it,st.prototype=at,at.Parser=st,new st}());l.parser=l;const o=l;let h=[],d=[""],u="global",p="",y=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],f=[],b="",g=!1,x=4,_=2;var m;const E=function(t){return null==t?h:h.filter((e=>e.parentBoundary===t))},A=function(t){return null==t?y:y.filter((e=>e.parentBoundary===t))},S=function(){return g},C={addPersonOrSystem:function(t,e,n,a,i,s,r){if(null===e||null===n)return;let l={};const o=h.find((t=>t.alias===e));if(o&&e===o.alias?l=o:(l.alias=e,h.push(l)),l.label=null==n?{text:""}:{text:n},null==a)l.descr={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]={text:e}}else l.descr={text:a};if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]=e}else l.sprite=i;if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=e}else l.tags=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]=e}else l.link=r;l.typeC4Shape={text:t},l.parentBoundary=u,l.wrap=S()},addPersonOrSystemBoundary:function(t,e,n,a,i){if(null===t||null===e)return;let s={};const r=y.find((e=>e.alias===t));if(r&&t===r.alias?s=r:(s.alias=t,y.push(s)),s.label=null==e?{text:""}:{text:e},null==n)s.type={text:"system"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];s[t]={text:e}}else s.type={text:n};if("object"==typeof a){let[t,e]=Object.entries(a)[0];s[t]=e}else s.tags=a;if("object"==typeof i){let[t,e]=Object.entries(i)[0];s[t]=e}else s.link=i;s.parentBoundary=u,s.wrap=S(),p=u,u=t,d.push(p)},addContainer:function(t,e,n,a,i,s,r,l){if(null===e||null===n)return;let o={};const c=h.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,h.push(o)),o.label=null==n?{text:""}:{text:n},null==a)o.techn={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.techn={text:a};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.sprite=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.wrap=S(),o.typeC4Shape={text:t},o.parentBoundary=u},addContainerBoundary:function(t,e,n,a,i){if(null===t||null===e)return;let s={};const r=y.find((e=>e.alias===t));if(r&&t===r.alias?s=r:(s.alias=t,y.push(s)),s.label=null==e?{text:""}:{text:e},null==n)s.type={text:"container"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];s[t]={text:e}}else s.type={text:n};if("object"==typeof a){let[t,e]=Object.entries(a)[0];s[t]=e}else s.tags=a;if("object"==typeof i){let[t,e]=Object.entries(i)[0];s[t]=e}else s.link=i;s.parentBoundary=u,s.wrap=S(),p=u,u=t,d.push(p)},addComponent:function(t,e,n,a,i,s,r,l){if(null===e||null===n)return;let o={};const c=h.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,h.push(o)),o.label=null==n?{text:""}:{text:n},null==a)o.techn={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.techn={text:a};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.sprite=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.wrap=S(),o.typeC4Shape={text:t},o.parentBoundary=u},addDeploymentNode:function(t,e,n,a,i,s,r,l){if(null===e||null===n)return;let o={};const c=y.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,y.push(o)),o.label=null==n?{text:""}:{text:n},null==a)o.type={text:"node"};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.type={text:a};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.nodeType=t,o.parentBoundary=u,o.wrap=S(),p=u,u=e,d.push(p)},popBoundaryParseStack:function(){u=p,d.pop(),p=d.pop(),d.push(p)},addRel:function(t,e,n,a,i,s,r,l,o){if(null==t||null==e||null==n||null==a)return;let c={};const h=f.find((t=>t.from===e&&t.to===n));if(h?c=h:f.push(c),c.type=t,c.from=e,c.to=n,c.label={text:a},null==i)c.techn={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];c[t]={text:e}}else c.techn={text:i};if(null==s)c.descr={text:""};else if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]={text:e}}else c.descr={text:s};if("object"==typeof r){let[t,e]=Object.entries(r)[0];c[t]=e}else c.sprite=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];c[t]=e}else c.tags=l;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.link=o;c.wrap=S()},updateElStyle:function(t,e,n,a,i,s,r,l,o,c,d){let u=h.find((t=>t.alias===e));if(void 0!==u||(u=y.find((t=>t.alias===e)),void 0!==u)){if(null!=n)if("object"==typeof n){let[t,e]=Object.entries(n)[0];u[t]=e}else u.bgColor=n;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];u[t]=e}else u.fontColor=a;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];u[t]=e}else u.borderColor=i;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];u[t]=e}else u.shadowing=s;if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];u[t]=e}else u.shape=r;if(null!=l)if("object"==typeof l){let[t,e]=Object.entries(l)[0];u[t]=e}else u.sprite=l;if(null!=o)if("object"==typeof o){let[t,e]=Object.entries(o)[0];u[t]=e}else u.techn=o;if(null!=c)if("object"==typeof c){let[t,e]=Object.entries(c)[0];u[t]=e}else u.legendText=c;if(null!=d)if("object"==typeof d){let[t,e]=Object.entries(d)[0];u[t]=e}else u.legendSprite=d}},updateRelStyle:function(t,e,n,a,i,s,r){const l=f.find((t=>t.from===e&&t.to===n));if(void 0!==l){if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]=e}else l.textColor=a;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]=e}else l.lineColor=i;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=parseInt(e)}else l.offsetX=parseInt(s);if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]=parseInt(e)}else l.offsetY=parseInt(r)}},updateLayoutConfig:function(t,e,n){let a=x,i=_;if("object"==typeof e){const t=Object.values(e)[0];a=parseInt(t)}else a=parseInt(e);if("object"==typeof n){const t=Object.values(n)[0];i=parseInt(t)}else i=parseInt(n);a>=1&&(x=a),i>=1&&(_=i)},autoWrap:S,setWrap:function(t){g=t},getC4ShapeArray:E,getC4Shape:function(t){return h.find((e=>e.alias===t))},getC4ShapeKeys:function(t){return Object.keys(E(t))},getBoundaries:A,getBoundarys:A,getCurrentBoundaryParse:function(){return u},getParentBoundaryParse:function(){return p},getRels:function(){return f},getTitle:function(){return b},getC4Type:function(){return m},getC4ShapeInRow:function(){return x},getC4BoundaryInRow:function(){return _},setAccTitle:a.s,getAccTitle:a.g,getAccDescription:a.a,setAccDescription:a.b,getConfig:()=>(0,a.c)().c4,clear:function(){h=[],y=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],p="",u="global",d=[""],f=[],d=[""],b="",g=!1,x=4,_=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(t){let e=(0,a.d)(t,(0,a.c)());b=e},setC4Type:function(t){let e=(0,a.d)(t,(0,a.c)());m=e}},k=function(t,e){return(0,s.d)(t,e)},O=function(t,e,n,a,i,s){const l=t.append("image");l.attr("width",e),l.attr("height",n),l.attr("x",a),l.attr("y",i);let o=s.startsWith("data:image/png;base64")?s:(0,r.Jf)(s);l.attr("xlink:href",o)},v=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),T=function(){function t(t,e,n,a,s,r,l){i(e.append("text").attr("x",n+s/2).attr("y",a+r/2+5).style("text-anchor","middle").text(t),l)}function e(t,e,n,s,r,l,o,c){const{fontSize:h,fontFamily:d,fontWeight:u}=c,p=t.split(a.e.lineBreakRegex);for(let a=0;a>"),e.typeC4Shape.text){case"person":case"external_person":O(c,48,48,e.x+e.width/2-24,e.y+e.image.Y,o)}let u=n[e.typeC4Shape.text+"Font"]();return u.fontWeight="bold",u.fontSize=u.fontSize+2,u.fontColor=l,T(n)(e.label.text,c,e.x,e.y+e.label.Y,e.width,e.height,{fill:l},u),u=n[e.typeC4Shape.text+"Font"](),u.fontColor=l,e.techn&&""!==(null==(a=e.techn)?void 0:a.text)?T(n)(e.techn.text,c,e.x,e.y+e.techn.Y,e.width,e.height,{fill:l,"font-style":"italic"},u):e.type&&""!==e.type.text&&T(n)(e.type.text,c,e.x,e.y+e.type.Y,e.width,e.height,{fill:l,"font-style":"italic"},u),e.descr&&""!==e.descr.text&&(u=n.personFont(),u.fontColor=l,T(n)(e.descr.text,c,e.x,e.y+e.descr.Y,e.width,e.height,{fill:l},u)),e.height},D=(t,e,n)=>{const a=t.append("g");let i=0;for(let s of e){let t=s.textColor?s.textColor:"#444444",e=s.lineColor?s.lineColor:"#444444",r=s.offsetX?parseInt(s.offsetX):0,l=s.offsetY?parseInt(s.offsetY):0,o="";if(0===i){let t=a.append("line");t.attr("x1",s.startPoint.x),t.attr("y1",s.startPoint.y),t.attr("x2",s.endPoint.x),t.attr("y2",s.endPoint.y),t.attr("stroke-width","1"),t.attr("stroke",e),t.style("fill","none"),"rel_b"!==s.type&&t.attr("marker-end","url("+o+"#arrowhead)"),"birel"!==s.type&&"rel_b"!==s.type||t.attr("marker-start","url("+o+"#arrowend)"),i=-1}else{let t=a.append("path");t.attr("fill","none").attr("stroke-width","1").attr("stroke",e).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",s.startPoint.x).replaceAll("starty",s.startPoint.y).replaceAll("controlx",s.startPoint.x+(s.endPoint.x-s.startPoint.x)/2-(s.endPoint.x-s.startPoint.x)/4).replaceAll("controly",s.startPoint.y+(s.endPoint.y-s.startPoint.y)/2).replaceAll("stopx",s.endPoint.x).replaceAll("stopy",s.endPoint.y)),"rel_b"!==s.type&&t.attr("marker-end","url("+o+"#arrowhead)"),"birel"!==s.type&&"rel_b"!==s.type||t.attr("marker-start","url("+o+"#arrowend)")}let c=n.messageFont();T(n)(s.label.text,a,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+r,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+l,s.label.width,s.label.height,{fill:t},c),s.techn&&""!==s.techn.text&&(c=n.messageFont(),T(n)("["+s.techn.text+"]",a,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+r,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+n.messageFontSize+5+l,Math.max(s.label.width,s.techn.width),s.techn.height,{fill:t,"font-style":"italic"},c))}},N=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},P=function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},M=function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},j=function(t){const e=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);e.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),e.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},B=function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},L=function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},Y=function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")};let I=0,U=0,F=4,X=2;l.yy=C;let z={};class W{constructor(t){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,Q(t.db.getConfig())}setData(t,e,n,a){this.nextData.startx=this.data.startx=t,this.nextData.stopx=this.data.stopx=e,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=a}updateVal(t,e,n,a){void 0===t[e]?t[e]=n:t[e]=a(n,t[e])}insert(t){this.nextData.cnt=this.nextData.cnt+1;let e=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+t.margin:this.nextData.stopx+2*t.margin,n=e+t.width,a=this.nextData.starty+2*t.margin,i=a+t.height;(e>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>F)&&(e=this.nextData.startx+t.margin+z.nextLinePaddingX,a=this.nextData.stopy+2*t.margin,this.nextData.stopx=n=e+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=i=a+t.height,this.nextData.cnt=1),t.x=e,t.y=a,this.updateVal(this.data,"startx",e,Math.min),this.updateVal(this.data,"starty",a,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",i,Math.max),this.updateVal(this.nextData,"startx",e,Math.min),this.updateVal(this.nextData,"starty",a,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",i,Math.max)}init(t){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},Q(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}}const Q=function(t){(0,a.f)(z,t),t.fontFamily&&(z.personFontFamily=z.systemFontFamily=z.messageFontFamily=t.fontFamily),t.fontSize&&(z.personFontSize=z.systemFontSize=z.messageFontSize=t.fontSize),t.fontWeight&&(z.personFontWeight=z.systemFontWeight=z.messageFontWeight=t.fontWeight)},$=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),q=t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight});function V(t,e,n,i,s){if(!e[t].width)if(n)e[t].text=(0,a.w)(e[t].text,s,i),e[t].textLines=e[t].text.split(a.e.lineBreakRegex).length,e[t].width=s,e[t].height=(0,a.j)(e[t].text,i);else{let n=e[t].text.split(a.e.lineBreakRegex);e[t].textLines=n.length;let s=0;e[t].height=0,e[t].width=0;for(const r of n)e[t].width=Math.max((0,a.h)(r,i),e[t].width),s=(0,a.j)(r,i),e[t].height=e[t].height+s}}const G=function(t,e,n){e.x=n.data.startx,e.y=n.data.starty,e.width=n.data.stopx-n.data.startx,e.height=n.data.stopy-n.data.starty,e.label.y=z.c4ShapeMargin-35;let i=e.wrap&&z.wrap,s=q(z);s.fontSize=s.fontSize+2,s.fontWeight="bold",V("label",e,i,s,(0,a.h)(e.label.text,s)),w(t,e,z)},H=function(t,e,n,i){let s=0;for(const r of i){s=0;const i=n[r];let l=$(z,i.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,i.typeC4Shape.width=(0,a.h)("\xab"+i.typeC4Shape.text+"\xbb",l),i.typeC4Shape.height=l.fontSize+2,i.typeC4Shape.Y=z.c4ShapePadding,s=i.typeC4Shape.Y+i.typeC4Shape.height-4,i.image={width:0,height:0,Y:0},i.typeC4Shape.text){case"person":case"external_person":i.image.width=48,i.image.height=48,i.image.Y=s,s=i.image.Y+i.image.height}i.sprite&&(i.image.width=48,i.image.height=48,i.image.Y=s,s=i.image.Y+i.image.height);let o=i.wrap&&z.wrap,c=z.width-2*z.c4ShapePadding,h=$(z,i.typeC4Shape.text);if(h.fontSize=h.fontSize+2,h.fontWeight="bold",V("label",i,o,h,c),i.label.Y=s+8,s=i.label.Y+i.label.height,i.type&&""!==i.type.text){i.type.text="["+i.type.text+"]",V("type",i,o,$(z,i.typeC4Shape.text),c),i.type.Y=s+5,s=i.type.Y+i.type.height}else if(i.techn&&""!==i.techn.text){i.techn.text="["+i.techn.text+"]",V("techn",i,o,$(z,i.techn.text),c),i.techn.Y=s+5,s=i.techn.Y+i.techn.height}let d=s,u=i.label.width;if(i.descr&&""!==i.descr.text){V("descr",i,o,$(z,i.typeC4Shape.text),c),i.descr.Y=s+20,s=i.descr.Y+i.descr.height,u=Math.max(i.label.width,i.descr.width),d=s-5*i.descr.textLines}u+=z.c4ShapePadding,i.width=Math.max(i.width||z.width,u,z.width),i.height=Math.max(i.height||z.height,d,z.height),i.margin=i.margin||z.c4ShapeMargin,t.insert(i),R(e,i,z)}t.bumpLastMargin(z.c4ShapeMargin)};class K{constructor(t,e){this.x=t,this.y=e}}let J=function(t,e){let n=t.x,a=t.y,i=e.x,s=e.y,r=n+t.width/2,l=a+t.height/2,o=Math.abs(n-i),c=Math.abs(a-s),h=c/o,d=t.height/t.width,u=null;return a==s&&ni?u=new K(n,l):n==i&&as&&(u=new K(r,a)),n>i&&a=h?new K(n,l+h*t.width/2):new K(r-o/c*t.height/2,a+t.height):n=h?new K(n+t.width,l+h*t.width/2):new K(r+o/c*t.height/2,a+t.height):ns?u=d>=h?new K(n+t.width,l-h*t.width/2):new K(r+t.height/2*o/c,a):n>i&&a>s&&(u=d>=h?new K(n,l-t.width/2*h):new K(r-t.height/2*o/c,a)),u},Z=function(t,e){let n={x:0,y:0};n.x=e.x+e.width/2,n.y=e.y+e.height/2;let a=J(t,n);return n.x=t.x+t.width/2,n.y=t.y+t.height/2,{startPoint:a,endPoint:J(e,n)}};function tt(t,e,n,a,i){let s=new W(i);s.data.widthLimit=n.data.widthLimit/Math.min(X,a.length);for(let[r,l]of a.entries()){let a=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=a,a=l.image.Y+l.image.height);let o=l.wrap&&z.wrap,c=q(z);if(c.fontSize=c.fontSize+2,c.fontWeight="bold",V("label",l,o,c,s.data.widthLimit),l.label.Y=a+8,a=l.label.Y+l.label.height,l.type&&""!==l.type.text){l.type.text="["+l.type.text+"]",V("type",l,o,q(z),s.data.widthLimit),l.type.Y=a+5,a=l.type.Y+l.type.height}if(l.descr&&""!==l.descr.text){let t=q(z);t.fontSize=t.fontSize-2,V("descr",l,o,t,s.data.widthLimit),l.descr.Y=a+20,a=l.descr.Y+l.descr.height}if(0==r||r%X==0){let t=n.data.startx+z.diagramMarginX,e=n.data.stopy+z.diagramMarginY+a;s.setData(t,t,e,e)}else{let t=s.data.stopx!==s.data.startx?s.data.stopx+z.diagramMarginX:s.data.startx,e=s.data.starty;s.setData(t,t,e,e)}s.name=l.alias;let h=i.db.getC4ShapeArray(l.alias),d=i.db.getC4ShapeKeys(l.alias);d.length>0&&H(s,t,h,d),e=l.alias;let u=i.db.getBoundarys(e);u.length>0&&tt(t,e,s,u,i),"global"!==l.alias&&G(t,l,s),n.data.stopy=Math.max(s.data.stopy+z.c4ShapeMargin,n.data.stopy),n.data.stopx=Math.max(s.data.stopx+z.c4ShapeMargin,n.data.stopx),I=Math.max(I,n.data.stopx),U=Math.max(U,n.data.stopy)}}const et={drawPersonOrSystemArray:H,drawBoundary:G,setConf:Q,draw:function(t,e,n,s){z=(0,a.c)().c4;const r=(0,a.c)().securityLevel;let l;"sandbox"===r&&(l=(0,i.Ltv)("#i"+e));const o="sandbox"===r?(0,i.Ltv)(l.nodes()[0].contentDocument.body):(0,i.Ltv)("body");let c=s.db;s.db.setWrap(z.wrap),F=c.getC4ShapeInRow(),X=c.getC4BoundaryInRow(),a.l.debug(`C:${JSON.stringify(z,null,2)}`);const h="sandbox"===r?o.select(`[id="${e}"]`):(0,i.Ltv)(`[id="${e}"]`);L(h),B(h),Y(h);let d=new W(s);d.setData(z.diagramMarginX,z.diagramMarginX,z.diagramMarginY,z.diagramMarginY),d.data.widthLimit=screen.availWidth,I=z.diagramMarginX,U=z.diagramMarginY;const u=s.db.getTitle();tt(h,"",d,s.db.getBoundarys(""),s),N(h),P(h),j(h),M(h),function(t,e,n,i){let s=0;for(let l of e){s+=1;let t=l.wrap&&z.wrap,e={fontFamily:(r=z).messageFontFamily,fontSize:r.messageFontSize,fontWeight:r.messageFontWeight};"C4Dynamic"===i.db.getC4Type()&&(l.label.text=s+": "+l.label.text);let o=(0,a.h)(l.label.text,e);V("label",l,t,e,o),l.techn&&""!==l.techn.text&&(o=(0,a.h)(l.techn.text,e),V("techn",l,t,e,o)),l.descr&&""!==l.descr.text&&(o=(0,a.h)(l.descr.text,e),V("descr",l,t,e,o));let c=n(l.from),h=n(l.to),d=Z(c,h);l.startPoint=d.startPoint,l.endPoint=d.endPoint}var r;D(t,e,z)}(h,s.db.getRels(),s.db.getC4Shape,s),d.data.stopx=I,d.data.stopy=U;const p=d.data;let y=p.stopy-p.starty+2*z.diagramMarginY;const f=p.stopx-p.startx+2*z.diagramMarginX;u&&h.append("text").text(u).attr("x",(p.stopx-p.startx)/2-4*z.diagramMarginX).attr("y",p.starty+z.diagramMarginY),(0,a.i)(h,y,f,z.useMaxWidth);const b=u?60:0;h.attr("viewBox",p.startx-z.diagramMarginX+" -"+(z.diagramMarginY+b)+" "+f+" "+(y+b)),a.l.debug("models:",p)}},nt={parser:o,db:C,renderer:et,styles:t=>`.person {\n stroke: ${t.personBorder};\n fill: ${t.personBkg};\n }\n`,init:({c4:t,wrap:e})=>{et.setConf(t),C.setWrap(e)}}},28259:(t,e,n)=>{n.d(e,{a:()=>r,b:()=>c,c:()=>o,d:()=>s,e:()=>d,f:()=>l,g:()=>h});var a=n(16750),i=n(99702);const s=(t,e)=>{const n=t.append("rect");if(n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),e.name&&n.attr("name",e.name),void 0!==e.rx&&n.attr("rx",e.rx),void 0!==e.ry&&n.attr("ry",e.ry),void 0!==e.attrs)for(const a in e.attrs)n.attr(a,e.attrs[a]);return void 0!==e.class&&n.attr("class",e.class),n},r=(t,e)=>{const n={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};s(t,n).lower()},l=(t,e)=>{const n=e.text.replace(i.J," "),a=t.append("text");a.attr("x",e.x),a.attr("y",e.y),a.attr("class","legend"),a.style("text-anchor",e.anchor),void 0!==e.class&&a.attr("class",e.class);const s=a.append("tspan");return s.attr("x",e.x+2*e.textMargin),s.text(n),a},o=(t,e,n,i)=>{const s=t.append("image");s.attr("x",e),s.attr("y",n);const r=(0,a.Jf)(i);s.attr("xlink:href",r)},c=(t,e,n,i)=>{const s=t.append("use");s.attr("x",e),s.attr("y",n);const r=(0,a.Jf)(i);s.attr("xlink:href",`#${r}`)},h=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),d=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1bc1529f.f5dc7d77.js b/pr-preview/pr-1594/assets/js/1bc1529f.f5dc7d77.js deleted file mode 100644 index 7ea76c5795..0000000000 --- a/pr-preview/pr-1594/assets/js/1bc1529f.f5dc7d77.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4134],{70041:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var s=n(74848),r=n(28453);const a={description:"Using the set reduction strategy",sidebar_position:5},i="set",o={id:"reference/reduction-strategies/set",title:"set",description:"Using the set reduction strategy",source:"@site/docs/reference/reduction-strategies/set.md",sourceDirName:"reference/reduction-strategies",slug:"/reference/reduction-strategies/set",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/set",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/reduction-strategies/set.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{description:"Using the set reduction strategy",sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"minimize and maximize",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize"},next:{title:"sum",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/sum"}},d={},c=[];function l(e){const t={code:"code",h1:"h1",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"set",children:"set"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"set"})," interprets the document location as an update to a set."]}),"\n",(0,s.jsx)(t.p,{children:'The location must be an object having only \u201cadd", \u201cintersect", and \u201cremove\u201d properties. Any single \u201cadd", \u201cintersect", or \u201cremove\u201d is always allowed.'}),"\n",(0,s.jsx)(t.p,{children:"A document with \u201cintersect\u201d and \u201cadd\u201d is allowed, and is interpreted as applying the intersection to the left-hand side set, followed by a union with the additions."}),"\n",(0,s.jsx)(t.p,{children:"A document with \u201cremove\u201d and \u201cadd\u201d is also allowed, and is interpreted as applying the removals to the base set, followed by a union with the additions."}),"\n",(0,s.jsx)(t.p,{children:"\u201cremove\u201d and \u201cintersect\u201d within the same document are prohibited."}),"\n",(0,s.jsx)(t.p,{children:"Set additions are deeply merged. This makes sets behave like associative maps, where the \u201cvalue\u201d of a set member can be updated by adding it to the set again, with a reducible update."}),"\n",(0,s.jsx)(t.p,{children:"Sets may be objects, in which case the object property serves as the set item key:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:'collections:\n - name: example/reductions/set\n schema:\n type: object\n reduce: { strategy: merge }\n properties:\n key: { type: string }\n value:\n # Sets are always represented as an object.\n type: object\n reduce: { strategy: set }\n # Schema for "add", "intersect", and "remove" properties\n # (each a map of keys and their associated sums):\n additionalProperties:\n type: object\n additionalProperties:\n type: number\n reduce: { strategy: sum }\n # Flow requires that all parents of locations with a reduce\n # annotation also have one themselves.\n # This strategy therefore must (currently) be here, but is ignored.\n reduce: { strategy: lastWriteWins }\n\n required: [key]\n key: [/key]\n\ntests:\n "Expect we can apply set operations to incrementally build associative maps":\n - ingest:\n collection: example/reductions/set\n documents:\n - { key: "key", value: { "add": { "a": 1, "b": 1, "c": 1 } } }\n - { key: "key", value: { "remove": { "b": 0 } } }\n - { key: "key", value: { "add": { "a": 1, "d": 1 } } }\n - verify:\n collection: example/reductions/set\n documents:\n - { key: "key", value: { "add": { "a": 2, "c": 1, "d": 1 } } }\n - ingest:\n collection: example/reductions/set\n documents:\n - { key: "key", value: { "intersect": { "a": 0, "d": 0 } } }\n - { key: "key", value: { "add": { "a": 1, "e": 1 } } }\n - verify:\n collection: example/reductions/set\n documents:\n - { key: "key", value: { "add": { "a": 3, "d": 1, "e": 1 } } }\n'})}),"\n",(0,s.jsxs)(t.p,{children:["Sets can also be sorted arrays, which are ordered using a provide ",(0,s.jsx)(t.code,{children:"key"})," extractor. Keys are given as one or more JSON pointers, each relative to the item. As with ",(0,s.jsx)(t.code,{children:"merge"}),", arrays must be pre-sorted and de-duplicated by the key, and set reductions always maintain this invariant."]}),"\n",(0,s.jsxs)(t.p,{children:["Use a key extractor of ",(0,s.jsx)(t.code,{children:"[\u201c\u201d]"})," to apply the natural ordering of scalar values."]}),"\n",(0,s.jsx)(t.p,{children:"Whether array or object types are used, the type must always be consistent across the \u201cadd\u201d / \u201cintersect\u201d / \u201cremove\u201d terms of both sides of the reduction."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:'collections:\n - name: example/reductions/set-array\n schema:\n type: object\n reduce: { strategy: merge }\n properties:\n key: { type: string }\n value:\n # Sets are always represented as an object.\n type: object\n reduce:\n strategy: set\n key: [/0]\n # Schema for "add", "intersect", & "remove" properties\n # (each a sorted array of [key, sum] 2-tuples):\n additionalProperties:\n type: array\n # Flow requires that all parents of locations with a reduce\n # annotation also have one themselves.\n # This strategy therefore must (currently) be here, but is ignored.\n reduce: { strategy: lastWriteWins }\n # Schema for contained [key, sum] 2-tuples:\n items:\n type: array\n items:\n - type: string\n - type: number\n reduce: { strategy: sum }\n reduce: { strategy: merge }\n\n required: [key]\n key: [/key]\n\ntests:\n ? "Expect we can apply operations of sorted-array sets to incrementally build associative maps"\n : - ingest:\n collection: example/reductions/set-array\n documents:\n - { key: "key", value: { "add": [["a", 1], ["b", 1], ["c", 1]] } }\n - { key: "key", value: { "remove": [["b", 0]] } }\n - { key: "key", value: { "add": [["a", 1], ["d", 1]] } }\n - verify:\n collection: example/reductions/set-array\n documents:\n - { key: "key", value: { "add": [["a", 2], ["c", 1], ["d", 1]] } }\n - ingest:\n collection: example/reductions/set-array\n documents:\n - { key: "key", value: { "intersect": [["a", 0], ["d", 0]] } }\n - { key: "key", value: { "add": [["a", 1], ["e", 1]] } }\n - verify:\n collection: example/reductions/set-array\n documents:\n - { key: "key", value: { "add": [["a", 3], ["d", 1], ["e", 1]] } }\n'})})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>o});var s=n(96540);const r={},a=s.createContext(r);function i(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1ca4a2d7.9a1ce243.js b/pr-preview/pr-1594/assets/js/1ca4a2d7.9a1ce243.js deleted file mode 100644 index cd33c04f2d..0000000000 --- a/pr-preview/pr-1594/assets/js/1ca4a2d7.9a1ce243.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[722],{96719:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>a});var t=s(74848),i=s(28453);const r={},c="Facebook Marketing",d={id:"reference/Connectors/capture-connectors/facebook-marketing",title:"Facebook Marketing",description:"This connector captures data from the Facebook Marketing API into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/facebook-marketing.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/facebook-marketing",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/facebook-marketing.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Exchange Rates API",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates"},next:{title:"Freshdesk",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk"}},o={},a=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Signing in with OAuth2",id:"signing-in-with-oauth2",level:3},{value:"Configuring manually with an access token",id:"configuring-manually-with-an-access-token",level:3},{value:"Setup",id:"setup",level:4},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"facebook-marketing",children:"Facebook Marketing"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from the Facebook Marketing API into Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-facebook-marketing:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-facebook-marketing:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/facebook-marketing/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(n.p,{children:"The following data resources are supported:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/marketing-api/reference/adgroup",children:"Ads"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/marketing-api/reference/ad-activity",children:"Ad activities"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/marketing-api/reference/ad-creative",children:"Ad creatives"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/marketing-api/reference/adgroup/insights/",children:"Ad insights"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/marketing-api/reference/business/adaccount/",children:"Business ad accounts"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group",children:"Campaigns"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/marketing-api/reference/ad-image",children:"Images"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/graph-api/reference/video/",children:"Videos"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"By default, each resource associated with your Facebook Business account is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"There are two ways to authenticate with Facebook when capturing data into Flow: signing in with OAuth2, and manually supplying an access token.\nTheir prerequisites differ."}),"\n",(0,t.jsx)(n.p,{children:"OAuth is recommended for simplicity in the Flow web app;\nthe manual method is the only supported method using the command line."}),"\n",(0,t.jsx)(n.h3,{id:"signing-in-with-oauth2",children:"Signing in with OAuth2"}),"\n",(0,t.jsxs)(n.p,{children:["To use OAuth2 in the Flow web app, you'll need A Facebook Business account and its ",(0,t.jsx)(n.a,{href:"https://www.facebook.com/business/help/1492627900875762",children:"Ad Account ID"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"configuring-manually-with-an-access-token",children:"Configuring manually with an access token"}),"\n",(0,t.jsx)(n.p,{children:"To configure manually with an access token, you'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"A Facebook Business account, and its Ad Account ID."}),"\n",(0,t.jsxs)(n.li,{children:["A Facebook app with:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.a,{href:"https://developers.facebook.com/products/marketing-api/",children:"Marketing API"})," enabled."]}),"\n",(0,t.jsx)(n.li,{children:"A Marketing API access token generated."}),"\n",(0,t.jsxs)(n.li,{children:["Access upgrade from Standard Access (the default) to Advanced Access. This allows a sufficient ",(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/marketing-api/overview/authorization#limits",children:"rate limit"})," to support the connector."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Follow the steps below to meet these requirements."}),"\n",(0,t.jsx)(n.h4,{id:"setup",children:"Setup"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Find your Facebook ",(0,t.jsx)(n.a,{href:"https://www.facebook.com/business/help/1492627900875762",children:"Ad Account ID"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In Meta for Developers, ",(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/development/create-an-app/",children:"create a new app"})," of the type Business."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"On your new app's dashboard, click the button to set up the Marketing API."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["On the Marketing API Tools tab, generate a Marketing API access token with all available permissions (",(0,t.jsx)(n.code,{children:"ads_management"}),", ",(0,t.jsx)(n.code,{children:"ads_read"}),", ",(0,t.jsx)(n.code,{children:"read_insights"}),", and ",(0,t.jsx)(n.code,{children:"business_management"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/marketing-api/overview/authorization/#access-levels",children:"Request Advanced Access"})," for your app. Specifically request the Advanced Access to the following:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The feature ",(0,t.jsx)(n.code,{children:"Ads Management Standard Access"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The permission ",(0,t.jsx)(n.code,{children:"ads_read"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The permission ",(0,t.jsx)(n.code,{children:"ads_management"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Once your request is approved, you'll have a high enough rate limit to proceed with running the connector."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Facebook Marketing source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsx)(n.p,{children:"By default, this connector captures all data associated with your Business Ad Account."}),"\n",(0,t.jsxs)(n.p,{children:["You can refine the data you capture from Facebook Marketing using the optional Custom Insights configuration.\nYou're able to specify certain fields to capture and apply data breakdowns.\n",(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/marketing-api/insights/breakdowns",children:"Breakdowns"})," are a feature of the Facebook Marketing Insights API that allows you to group API output by common metrics.\n",(0,t.jsx)(n.a,{href:"https://developers.facebook.com/docs/marketing-api/insights/breakdowns#actionsbreakdown",children:"Action breakdowns"}),"\nare a subset of breakdowns that must be specified separately."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/access_token"})})}),(0,t.jsx)(n.td,{children:"Access Token"}),(0,t.jsx)(n.td,{children:"The value of the access token generated."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/account_id"})})}),(0,t.jsx)(n.td,{children:"Account ID"}),(0,t.jsx)(n.td,{children:"The Facebook Ad account ID to use when pulling data from the Facebook Marketing API."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsxs)(n.td,{children:["Required for ",(0,t.jsx)(n.a,{href:"#configuring-manually-with-an-access-token",children:"manual authentication"})," only"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/custom_insights"})}),(0,t.jsx)(n.td,{children:"Custom Insights"}),(0,t.jsx)(n.td,{children:"A list which contains insights entries. Each entry must have a name and can contains fields, breakdowns or action_breakdowns"}),(0,t.jsx)(n.td,{children:"array"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"/custom_insights/-/action_breakdowns"})})}),(0,t.jsx)(n.td,{children:"Action Breakdowns"}),(0,t.jsx)(n.td,{children:"A list of chosen action_breakdowns to apply"}),(0,t.jsx)(n.td,{children:"array"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"[]"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"/custom_insights/-/action_breakdowns/-"})})}),(0,t.jsx)(n.td,{children:"ValidActionBreakdowns"}),(0,t.jsx)(n.td,{children:"Generic enumeration. Derive from this class to define new enumerations."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"/custom_insights/-/breakdowns"})})}),(0,t.jsx)(n.td,{children:"Breakdowns"}),(0,t.jsx)(n.td,{children:"A list of chosen breakdowns to apply"}),(0,t.jsx)(n.td,{children:"array"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"[]"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"/custom_insights/-/breakdowns/-"})})}),(0,t.jsx)(n.td,{children:"ValidBreakdowns"}),(0,t.jsx)(n.td,{children:"Generic enumeration. Derive from this class to define new enumerations."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"/custom_insights/-/end_date"})})}),(0,t.jsx)(n.td,{children:"End Date"}),(0,t.jsx)(n.td,{children:"The date until which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this date will be replicated. Not setting this option will result in always syncing the latest data."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"/custom_insights/-/fields"})})}),(0,t.jsx)(n.td,{children:"Fields"}),(0,t.jsx)(n.td,{children:"A list of chosen fields to capture"}),(0,t.jsx)(n.td,{children:"array"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"[]"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"/custom_insights/-/fields/-"})})}),(0,t.jsx)(n.td,{children:"ValidEnums"}),(0,t.jsx)(n.td,{children:"Generic enumeration. Derive from this class to define new enumerations."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"/custom_insights/-/name"})})}),(0,t.jsx)(n.td,{children:"Name"}),(0,t.jsx)(n.td,{children:"The name of the insight"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"/custom_insights/-/start_date"})})}),(0,t.jsx)(n.td,{children:"Start Date"}),(0,t.jsx)(n.td,{children:"The date from which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"/custom_insights/-/time_increment"})})}),(0,t.jsx)(n.td,{children:"Time Increment"}),(0,t.jsx)(n.td,{children:"Time window in days by which to aggregate statistics. The sync will be chunked into N day intervals, where N is the number of days you specified. For example, if you set this value to 7, then all statistics will be reported as 7-day aggregates by starting from the start_date. If the start and end dates are October 1st and October 30th, then the connector will output 5 records: 01 - 06, 07 - 13, 14 - 20, 21 - 27, and 28 - 30 (3 days only)."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/end_date"})}),(0,t.jsx)(n.td,{children:"End Date"}),(0,t.jsx)(n.td,{children:"The date until which you'd like to capture data, in the format YYYY-MM-DDT00:00:00Z. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the latest data."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/fetch_thumbnail_images"})}),(0,t.jsx)(n.td,{children:"Fetch Thumbnail Images"}),(0,t.jsx)(n.td,{children:"In each Ad Creative, fetch the thumbnail_url and store the result in thumbnail_data_url"}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/include_deleted"})}),(0,t.jsx)(n.td,{children:"Include Deleted"}),(0,t.jsx)(n.td,{children:"Include data from deleted Campaigns, Ads, and AdSets"}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/insights_lookback_window"})}),(0,t.jsx)(n.td,{children:"Insights Lookback Window"}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.a,{href:"https://www.facebook.com/business/help/2198119873776795",children:"attribution window"})]}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"28"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/max_batch_size"})}),(0,t.jsx)(n.td,{children:"Maximum size of Batched Requests"}),(0,t.jsx)(n.td,{children:"Maximum batch size used when sending batch requests to Facebook API. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"50"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/page_size"})}),(0,t.jsx)(n.td,{children:"Page Size of Requests"}),(0,t.jsx)(n.td,{children:"Page size used when sending requests to Facebook API to specify number of records per page when response has pagination. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"25"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/start_date"})})}),(0,t.jsx)(n.td,{children:"Start Date"}),(0,t.jsx)(n.td,{children:"The date from which you'd like to begin capturing data, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Resource of your Facebook Marketing account from which collections are captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.p,{children:"This sample specification reflects the manual authentication method."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-facebook-marketing:dev\n config:\n access_token: \n account_id: 000000000000000\n start_date: 2022-03-01T00:00:00Z\n custom_insights:\n - name: my-custom-insight\n fields: [ad_id, account_currency]\n breakdowns: [device_platform]\n action_breakdowns: [action_type]\n start_date: 2022-03-01T00:00:00Z\n bindings:\n - resource:\n stream: ad_account\n syncMode: incremental\n target: ${PREFIX}/ad_account\n - resource:\n stream: ad_sets\n syncMode: incremental\n target: ${PREFIX}/ad_sets\n - resource:\n stream: ads_insights\n syncMode: incremental\n target: ${PREFIX}/ads_insights\n - resource:\n stream: ads_insights_age_and_gender\n syncMode: incremental\n target: ${PREFIX}/ads_insights_age_and_gender\n - resource:\n stream: ads_insights_country\n syncMode: incremental\n target: ${PREFIX}/ads_insights_country\n - resource:\n stream: ads_insights_region\n syncMode: incremental\n target: ${PREFIX}/ads_insights_region\n - resource:\n stream: ads_insights_dma\n syncMode: incremental\n target: ${PREFIX}/ads_insights_dma\n - resource:\n stream: ads_insights_platform_and_device\n syncMode: incremental\n target: ${PREFIX}/ads_insights_platform_and_device\n - resource:\n stream: ads_insights_action_type\n syncMode: incremental\n target: ${PREFIX}/ads_insights_action_type\n - resource:\n stream: campaigns\n syncMode: incremental\n target: ${PREFIX}/campaigns\n - resource:\n stream: activities\n syncMode: incremental\n target: ${PREFIX}/activities\n - resource:\n stream: ads\n syncMode: incremental\n target: ${PREFIX}/ads\n - resource:\n stream: ad_creatives\n syncMode: full_refresh\n target: ${PREFIX}/ad_creatives\n"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>c,x:()=>d});var t=s(96540);const i={},r=t.createContext(i);function c(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1cde271f.b1370c1a.js b/pr-preview/pr-1594/assets/js/1cde271f.b1370c1a.js deleted file mode 100644 index 37acd424da..0000000000 --- a/pr-preview/pr-1594/assets/js/1cde271f.b1370c1a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9938],{75237:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var s=t(74848),i=t(28453);const r={},a="Amazon Redshift",o={id:"reference/Connectors/materialization-connectors/amazon-redshift",title:"Amazon Redshift",description:"This connector materializes Flow collections into tables in an Amazon Redshift database.",source:"@site/docs/reference/Connectors/materialization-connectors/amazon-redshift.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/amazon-redshift",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/amazon-redshift.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amazon DynamoDB",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb"},next:{title:"CSV Files in Amazon S3",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv"}},c={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Sync Schedule",id:"sync-schedule",level:2},{value:"Setup",id:"setup",level:2},{value:"Naming Conventions",id:"naming-conventions",level:2},{value:"Performance considerations",id:"performance-considerations",level:2},{value:"Maximum record size",id:"maximum-record-size",level:2},{value:"Delta updates",id:"delta-updates",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"amazon-redshift",children:"Amazon Redshift"}),"\n",(0,s.jsx)(n.p,{children:"This connector materializes Flow collections into tables in an Amazon Redshift database."}),"\n",(0,s.jsx)(n.p,{children:"The connector uses your AWS account to materialize to Redshift tables by way of files in an S3\nbucket. The files in the bucket as as a temporary staging area for data storage and retrieval."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/materialize-redshift:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/materialize-redshift:dev"})}),"\nprovides the latest connector image. You can also follow the link in your browser to see past image\nversions."]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:['A Redshift cluster accessible either directly or using an SSH tunnel. The user configured to\nconnect to Redshift must have at least "create table" permissions for the configured schema. The\nconnector will create new tables in the database per your specification. Tables created manually\nin advance are not supported. See ',(0,s.jsx)(n.a,{href:"#setup",children:"setup"})," for more information."]}),"\n",(0,s.jsxs)(n.li,{children:["An S3 bucket for staging temporary files. For best performance the bucket should be in the same\nregion as your Redshift cluster. See ",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html",children:"this\nguide"})," for\ninstructions on setting up a new S3 bucket."]}),"\n",(0,s.jsxs)(n.li,{children:["An AWS root or IAM user with ",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_s3_rw-bucket.html",children:"read and write\naccess"}),"\nto the S3 bucket. For this user, you'll need the ",(0,s.jsx)(n.strong,{children:"access key"})," and ",(0,s.jsx)(n.strong,{children:"secret access key"}),". See the\n",(0,s.jsx)(n.a,{href:"https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/",children:"AWS blog"})," for help finding\nthese credentials."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsx)(n.p,{children:"Use the below properties to configure an Amazon Redshift materialization, which will direct one or\nmore of your Flow collections to your desired tables in the database."}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/address"})})}),(0,s.jsx)(n.td,{children:"Address"}),(0,s.jsx)(n.td,{children:"Host and port of the database. Example: red-shift-cluster-name.account.us-east-2.redshift.amazonaws.com:5439"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/user"})})}),(0,s.jsx)(n.td,{children:"User"}),(0,s.jsx)(n.td,{children:"Database user to connect as."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/password"})})}),(0,s.jsx)(n.td,{children:"Password"}),(0,s.jsx)(n.td,{children:"Password for the specified database user."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/database"})}),(0,s.jsx)(n.td,{children:"Database"}),(0,s.jsx)(n.td,{children:"Name of the logical database to materialize to. The materialization will attempt to connect to the default database for the provided user if omitted."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/schema"})}),(0,s.jsx)(n.td,{children:"Database Schema"}),(0,s.jsx)(n.td,{children:"Database schema for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:'"public"'})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/awsAccessKeyId"})})}),(0,s.jsx)(n.td,{children:"Access Key ID"}),(0,s.jsx)(n.td,{children:"AWS Access Key ID for reading and writing data to the S3 staging bucket."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/awsSecretAccessKey"})})}),(0,s.jsx)(n.td,{children:"Secret Access Key"}),(0,s.jsx)(n.td,{children:"AWS Secret Access Key for reading and writing data to the S3 staging bucket."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/bucket"})})}),(0,s.jsx)(n.td,{children:"S3 Staging Bucket"}),(0,s.jsx)(n.td,{children:"Name of the S3 bucket to use for staging data loads."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/region"})})}),(0,s.jsx)(n.td,{children:"Region"}),(0,s.jsx)(n.td,{children:"Region of the S3 staging bucket. For optimal performance this should be in the same region as the Redshift database cluster."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/bucketPath"})}),(0,s.jsx)(n.td,{children:"Bucket Path"}),(0,s.jsx)(n.td,{children:"A prefix that will be used to store objects in S3."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/table"})})}),(0,s.jsx)(n.td,{children:"Table"}),(0,s.jsx)(n.td,{children:"Name of the database table."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/delta_updates"})}),(0,s.jsx)(n.td,{children:"Delta Update"}),(0,s.jsx)(n.td,{children:"Should updates to this table be done via delta updates. Default is false."}),(0,s.jsx)(n.td,{children:"boolean"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/schema"})}),(0,s.jsx)(n.td,{children:"Alternative Schema"}),(0,s.jsx)(n.td,{children:"Alternative schema for this table (optional)."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/materialize-redshift:dev"\n config:\n address: "redshift-cluster.account.us-east-2.redshift.amazonaws.com:5439"\n user: user\n password: password\n database: db\n awsAccessKeyId: access_key_id\n awsSecretAccessKey: secret_access_key\n bucket: my-bucket\n region: us-east-2\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,s.jsx)(n.h2,{id:"sync-schedule",children:"Sync Schedule"}),"\n",(0,s.jsxs)(n.p,{children:["This connector supports configuring a schedule for sync frequency. You can read\nabout how to configure this ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/materialization-sync-schedule",children:"here"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,s.jsxs)(n.p,{children:["You must configure your cluster to allow connections from Estuary. This can be accomplished by\nmaking your cluster accessible over the internet for the\n",(0,s.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),", or using an SSH tunnel. Connecting to the S3\nstaging bucket does not use the network tunnel and connects over HTTPS only."]}),"\n",(0,s.jsxs)(n.p,{children:["Instructions for making a cluster accessible over the internet can be found\n",(0,s.jsx)(n.a,{href:"https://aws.amazon.com/premiumsupport/knowledge-center/redshift-cluster-private-public/",children:"here"}),".\nWhen using this option, database connections are made over SSL only."]}),"\n",(0,s.jsx)(n.p,{children:"For allowing secure connections via SSH tunneling:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Refer to the ",(0,s.jsx)(n.a,{href:"../../../../guides/connect-network/",children:"guide"})," to configure an SSH server on using an\nAWS EC2 instance."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Configure your connector as described in the ",(0,s.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, with\nthe additional of the ",(0,s.jsx)(n.code,{children:"networkTunnel"})," stanza to enable the SSH tunnel, if using. See ",(0,s.jsx)(n.a,{href:"../../../../concepts/connectors/#connecting-to-endpoints-on-secure-networks",children:"Connecting to\nendpoints on secure\nnetworks"})," for additional\ndetails and a sample."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"naming-conventions",children:"Naming Conventions"}),"\n",(0,s.jsxs)(n.p,{children:["Redshift has requirements for ",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/redshift/latest/dg/r_names.html",children:"names and\nidentifiers"})," and this connector will\nautomatically apply quoting when needed. All table identifiers and column identifiers (corresponding\nto Flow collection fields) are treated as lowercase, unless the\n",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/redshift/latest/dg/r_enable_case_sensitive_identifier.html",children:"enable_case_sensitive_identifier"}),"\nconfiguration is enabled on the cluster being materialized to. Table names for bindings must be\nunique on a case-insensitive basis, as well as field names of the source collection. If any names\nare not unique on a case-insensitive basis (ex: ",(0,s.jsx)(n.code,{children:"myField"})," vs. ",(0,s.jsx)(n.code,{children:"MyField"}),") the materialization will\nfail to apply."]}),"\n",(0,s.jsxs)(n.p,{children:["If necessary, you can add ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections",children:"projections"})," to your\ncollection specification to change field names."]}),"\n",(0,s.jsx)(n.h2,{id:"performance-considerations",children:"Performance considerations"}),"\n",(0,s.jsx)(n.p,{children:"For best performance there should at most one Redshift materialization active per Redshift schema.\nAdditional collections to be materialized should be added as bindings to this single materialization\nrather than creating a separate materialization for each collection."}),"\n",(0,s.jsxs)(n.p,{children:["In order to achieve exactly-once processing of collection documents, the materialization creates and\nuses metadata tables located in the schema configured by the endpoint ",(0,s.jsx)(n.code,{children:"schema"}),' property. To commit a\ntransaction, a table-level lock is acquired on these metadata tables. If there are multiple\nmaterializations using the same metadata tables, they will need to take turns acquiring these locks.\nThis locking behavior prevents "serializable isolation violation" errors in the case of multiple\nmaterializations sharing the same metadata tables at the expense of allowing only a single\nmaterialization to be actively committing a transaction.']}),"\n",(0,s.jsx)(n.h2,{id:"maximum-record-size",children:"Maximum record size"}),"\n",(0,s.jsxs)(n.p,{children:["The maximum size of a single input document is 4 MB. Attempting to materialize collections with\ndocuments larger than 4 MB will result in an error. To materialize this data you can use a\n",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivation"})," to create a derived collection with smaller\ndocuments, or exclude fields containing excessive amounts of data by ",(0,s.jsx)(n.a,{href:"../../../../guides/customize-materialization-fields/#include-desired-fields-in-your-materialization",children:"customizing the materialized\nfields"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,s.jsxs)(n.p,{children:["This connector supports both standard (merge) and ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var s=t(96540);const i={},r=s.createContext(i);function a(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1d129a7b.62510428.js b/pr-preview/pr-1594/assets/js/1d129a7b.62510428.js deleted file mode 100644 index 1eac3bb66e..0000000000 --- a/pr-preview/pr-1594/assets/js/1d129a7b.62510428.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3380],{1276:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var s=t(74848),r=t(28453);const n={sidebar_position:8},a="Storage mappings",i={id:"concepts/storage-mappings",title:"Storage mappings",description:"Flow stores the documents that comprise your collections in a cloud storage bucket.",source:"@site/docs/concepts/storage-mappings.md",sourceDirName:"concepts",slug:"/concepts/storage-mappings",permalink:"/pr-preview/pr-1594/concepts/storage-mappings",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/storage-mappings.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8},sidebar:"tutorialSidebar",previous:{title:"Schemas",permalink:"/pr-preview/pr-1594/concepts/schemas"},next:{title:"Tests",permalink:"/pr-preview/pr-1594/concepts/tests"}},c={},l=[{value:"Recovery logs",id:"recovery-logs",level:2}];function p(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.h1,{id:"storage-mappings",children:"Storage mappings"}),"\n",(0,s.jsxs)(o.p,{children:["Flow stores the documents that comprise your collections in a cloud storage bucket.\nYour ",(0,s.jsx)(o.strong,{children:"storage mapping"})," tells Flow which bucket to use."]}),"\n",(0,s.jsx)(o.p,{children:"When you first register for Flow, your storage mapping is Estuary's secure Google Cloud Storage bucket.\nData in Flow's cloud storage bucket is deleted 30 days after collection."}),"\n",(0,s.jsxs)(o.p,{children:["For production workflows, you should ",(0,s.jsx)(o.a,{href:"/pr-preview/pr-1594/getting-started/installation#configuring-your-cloud-storage-bucket-for-use-with-flow",children:"set up your own cloud storage bucket as a storage mapping"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["You may also use apply different storage mappings to different ",(0,s.jsx)(o.a,{href:"/pr-preview/pr-1594/concepts/catalogs#namespace",children:"catalog prefixes"})," within your organization's prefix."]}),"\n",(0,s.jsx)(o.p,{children:"You can set up a bucket lifecycle policy to manage data retention in your storage mapping;\nfor example, to remove data after six months."}),"\n",(0,s.jsx)(o.h2,{id:"recovery-logs",children:"Recovery logs"}),"\n",(0,s.jsxs)(o.p,{children:["In addition to collection data, Flow uses your storage mapping to temporarily store ",(0,s.jsx)(o.strong,{children:"recovery logs"}),"."]}),"\n",(0,s.jsx)(o.p,{children:"Flow tasks \u2014 captures, derivations, and materializations \u2014 use recovery logs to durably store their processing context as a backup.\nRecovery logs are an opaque binary log, but may contain user data."}),"\n",(0,s.jsxs)(o.p,{children:["The recovery logs of a task are always prefixed by ",(0,s.jsx)(o.code,{children:"recovery/"}),",\nso a task named ",(0,s.jsx)(o.code,{children:"acmeCo/produce-TNT"})," would have a recovery log called ",(0,s.jsx)(o.code,{children:"recovery/acmeCo/roduce-TNT"})]}),"\n",(0,s.jsx)(o.p,{children:"Flow prunes data from recovery logs once it is no longer required."}),"\n",(0,s.jsx)(o.admonition,{type:"warning",children:(0,s.jsx)(o.p,{children:"Deleting data from recovery logs while it is still in use can\ncause Flow processing tasks to fail permanently."})})]})}function d(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},28453:(e,o,t)=>{t.d(o,{R:()=>a,x:()=>i});var s=t(96540);const r={},n=s.createContext(r);function a(e){const o=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(n.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/1f391b9e.19b65b27.js b/pr-preview/pr-1594/assets/js/1f391b9e.19b65b27.js deleted file mode 100644 index 0fa5f7f64c..0000000000 --- a/pr-preview/pr-1594/assets/js/1f391b9e.19b65b27.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6061],{67973:(e,a,t)=>{t.r(a),t.d(a,{default:()=>x});t(96540);var s=t(34164),i=t(1003),d=t(17559),r=t(58356),l=t(15533),n=t(67763),c=t(50996),o=t(12153);const m={mdxPageWrapper:"mdxPageWrapper_j9I6"};var p=t(74848);function x(e){const{content:a}=e,{metadata:{title:t,editUrl:x,description:g,frontMatter:h,unlisted:j,lastUpdatedBy:v,lastUpdatedAt:A},assets:u}=a,{keywords:N,wrapperClassName:_,hide_table_of_contents:f}=h,w=u.image??h.image,k=!!(x||A||v);return(0,p.jsx)(i.e3,{className:(0,s.A)(_??d.G.wrapper.mdxPages,d.G.page.mdxPage),children:(0,p.jsxs)(r.A,{children:[(0,p.jsx)(i.be,{title:t,description:g,keywords:N,image:w}),(0,p.jsx)("main",{className:"container container--fluid margin-vert--lg",children:(0,p.jsxs)("div",{className:(0,s.A)("row",m.mdxPageWrapper),children:[(0,p.jsxs)("div",{className:(0,s.A)("col",!f&&"col--8"),children:[j&&(0,p.jsx)(c.A,{}),(0,p.jsx)("article",{children:(0,p.jsx)(l.A,{children:(0,p.jsx)(a,{})})}),k&&(0,p.jsx)(o.A,{className:(0,s.A)("margin-top--sm",d.G.pages.pageFooterEditMetaRow),editUrl:x,lastUpdatedAt:A,lastUpdatedBy:v})]}),!f&&a.toc.length>0&&(0,p.jsx)("div",{className:"col col--2",children:(0,p.jsx)(n.A,{toc:a.toc,minHeadingLevel:h.toc_min_heading_level,maxHeadingLevel:h.toc_max_heading_level})})]})})]})})}},61114:(e,a,t)=>{t.d(a,{A:()=>r});var s=t(96540),i=t(99702),d=t(74848);i.N.initialize({startOnLoad:!0});const r=e=>{let{chart:a}=e;return(0,s.useEffect)((()=>{i.N.contentLoaded()}),[]),(0,d.jsx)("div",{className:"mermaid",children:a})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/2130.c89b510d.js b/pr-preview/pr-1594/assets/js/2130.c89b510d.js deleted file mode 100644 index 431b6c3b3e..0000000000 --- a/pr-preview/pr-1594/assets/js/2130.c89b510d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2130],{22130:(e,t,r)=>{r.d(t,{default:()=>Ja});class a{constructor(e,t,r){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=t,this.end=r}static range(e,t){return t?e&&e.loc&&t.loc&&e.loc.lexer===t.loc.lexer?new a(e.loc.lexer,e.loc.start,t.loc.end):null:e&&e.loc}}class n{constructor(e,t){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=t}range(e,t){return new n(t,a.range(this,e))}}class i{constructor(e,t){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var r,a,n="KaTeX parse error: "+e,o=t&&t.loc;if(o&&o.start<=o.end){var s=o.lexer.input;r=o.start,a=o.end,r===s.length?n+=" at end of input: ":n+=" at position "+(r+1)+": ";var l=s.slice(r,a).replace(/[^]/g,"$&\u0332");n+=(r>15?"\u2026"+s.slice(r-15,r):s.slice(0,r))+l+(a+15":">","<":"<",'"':""","'":"'"},l=/[&><"']/g;var h=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},m={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(l,(e=>s[e]))},hyphenate:function(e){return e.replace(o,"-$1").toLowerCase()},getBaseElem:h,isCharacterBox:function(e){var t=h(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){var t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"}},c={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand ",cliProcessor:e=>"Infinity"===e?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function p(e){if(e.default)return e.default;var t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class u{constructor(e){for(var t in this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},c)if(c.hasOwnProperty(t)){var r=c[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:p(r)}}reportNonstrict(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new i("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]")}}useStrictBehavior(e,t,r){var a=this.strict;if("function"==typeof a)try{a=a(e,t,r)}catch(n){a="error"}return!(!a||"ignore"===a)&&(!0===a||"error"===a||("warn"===a?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]"),!1)))}isTrusted(e){if(e.url&&!e.protocol){var t=m.protocolFromUrl(e.url);if(null==t)return!1;e.protocol=t}var r="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(r)}}class d{constructor(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}sup(){return g[f[this.id]]}sub(){return g[v[this.id]]}fracNum(){return g[b[this.id]]}fracDen(){return g[y[this.id]]}cramp(){return g[x[this.id]]}text(){return g[w[this.id]]}isTight(){return this.size>=2}}var g=[new d(0,0,!1),new d(1,0,!0),new d(2,1,!1),new d(3,1,!0),new d(4,2,!1),new d(5,2,!0),new d(6,3,!1),new d(7,3,!0)],f=[4,5,4,5,6,7,6,7],v=[5,5,5,5,7,7,7,7],b=[2,3,4,5,6,7,6,7],y=[3,3,5,5,7,7,7,7],x=[1,1,3,3,5,5,7,7],w=[0,1,2,3,2,3,2,3],k={DISPLAY:g[0],TEXT:g[2],SCRIPT:g[4],SCRIPTSCRIPT:g[6]},S=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var M=[];function z(e){for(var t=0;t=M[t]&&e<=M[t+1])return!0;return!1}S.forEach((e=>e.blocks.forEach((e=>M.push(...e)))));var A=80,T={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"};class B{constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return m.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),t=0;te.toText())).join("")}}var C={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},N={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},q={"\xc5":"A","\xd0":"D","\xde":"o","\xe5":"a","\xf0":"d","\xfe":"o","\u0410":"A","\u0411":"B","\u0412":"B","\u0413":"F","\u0414":"A","\u0415":"E","\u0416":"K","\u0417":"3","\u0418":"N","\u0419":"N","\u041a":"K","\u041b":"N","\u041c":"M","\u041d":"H","\u041e":"O","\u041f":"N","\u0420":"P","\u0421":"C","\u0422":"T","\u0423":"y","\u0424":"O","\u0425":"X","\u0426":"U","\u0427":"h","\u0428":"W","\u0429":"W","\u042a":"B","\u042b":"X","\u042c":"B","\u042d":"3","\u042e":"X","\u042f":"R","\u0430":"a","\u0431":"b","\u0432":"a","\u0433":"r","\u0434":"y","\u0435":"e","\u0436":"m","\u0437":"e","\u0438":"n","\u0439":"n","\u043a":"n","\u043b":"n","\u043c":"m","\u043d":"n","\u043e":"o","\u043f":"n","\u0440":"p","\u0441":"c","\u0442":"o","\u0443":"y","\u0444":"b","\u0445":"x","\u0446":"n","\u0447":"n","\u0448":"w","\u0449":"w","\u044a":"a","\u044b":"m","\u044c":"a","\u044d":"e","\u044e":"m","\u044f":"r"};function I(e,t,r){if(!C[t])throw new Error("Font metrics not found for font: "+t+".");var a=e.charCodeAt(0),n=C[t][a];if(!n&&e[0]in q&&(a=q[e[0]].charCodeAt(0),n=C[t][a]),n||"text"!==r||z(a)&&(n=C[t][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}var R={};var H=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],O=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],E=function(e,t){return t.size<2?e:H[e-1][t.size-1]};class L{constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||L.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=O[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var t={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return new L(t)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:E(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:O[e-1]})}havingBaseStyle(e){e=e||this.style.text();var t=E(L.BASESIZE,e);return this.size===t&&this.textSize===L.BASESIZE&&this.style===e?this:this.extend({style:e,size:t})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==L.BASESIZE?["sizing","reset-size"+this.size,"size"+L.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=function(e){var t;if(!R[t=e>=5?0:e>=3?1:2]){var r=R[t]={cssEmPerMu:N.quad[t]/18};for(var a in N)N.hasOwnProperty(a)&&(r[a]=N[a][t])}return R[t]}(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}L.BASESIZE=6;var D={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},V={ex:!0,em:!0,mu:!0},P=function(e){return"string"!=typeof e&&(e=e.unit),e in D||e in V||"ex"===e},F=function(e,t){var r;if(e.unit in D)r=D[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var a;if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else{if("em"!==e.unit)throw new i("Invalid unit: '"+e.unit+"'");r=a.fontMetrics().quad}a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},G=function(e){return+e.toFixed(4)+"em"},U=function(e){return e.filter((e=>e)).join(" ")},Y=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");var a=t.getColor();a&&(this.style.color=a)}},X=function(e){var t=document.createElement(e);for(var r in t.className=U(this.classes),this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);for(var a in this.attributes)this.attributes.hasOwnProperty(a)&&t.setAttribute(a,this.attributes[a]);for(var n=0;n"};class _{constructor(e,t,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,Y.call(this,e,r,a),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return m.contains(this.classes,e)}toNode(){return X.call(this,"span")}toMarkup(){return W.call(this,"span")}}class j{constructor(e,t,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Y.call(this,t,a),this.children=r||[],this.setAttribute("href",e)}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return m.contains(this.classes,e)}toNode(){return X.call(this,"a")}toMarkup(){return W.call(this,"a")}}class ${constructor(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}hasClass(e){return m.contains(this.classes,e)}toNode(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e}toMarkup(){var e=''+m.escape(this.alt)+'=n[0]&&e<=n[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=Z[this.text])}hasClass(e){return m.contains(this.classes,e)}toNode(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=G(this.italic)),this.classes.length>0&&((t=t||document.createElement("span")).className=U(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e}toMarkup(){var e=!1,t="0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(a)&&(r+=m.hyphenate(a)+":"+this.style[a]+";");r&&(e=!0,t+=' style="'+m.escape(r)+'"');var n=m.escape(this.text);return e?(t+=">",t+=n,t+=""):n}}class J{constructor(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}toNode(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r':''}}class ee{constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e}toMarkup(){var e="","\\gt",!0),ie(oe,le,be,"\u2208","\\in",!0),ie(oe,le,be,"\ue020","\\@not"),ie(oe,le,be,"\u2282","\\subset",!0),ie(oe,le,be,"\u2283","\\supset",!0),ie(oe,le,be,"\u2286","\\subseteq",!0),ie(oe,le,be,"\u2287","\\supseteq",!0),ie(oe,he,be,"\u2288","\\nsubseteq",!0),ie(oe,he,be,"\u2289","\\nsupseteq",!0),ie(oe,le,be,"\u22a8","\\models"),ie(oe,le,be,"\u2190","\\leftarrow",!0),ie(oe,le,be,"\u2264","\\le"),ie(oe,le,be,"\u2264","\\leq",!0),ie(oe,le,be,"<","\\lt",!0),ie(oe,le,be,"\u2192","\\rightarrow",!0),ie(oe,le,be,"\u2192","\\to"),ie(oe,he,be,"\u2271","\\ngeq",!0),ie(oe,he,be,"\u2270","\\nleq",!0),ie(oe,le,ye,"\xa0","\\ "),ie(oe,le,ye,"\xa0","\\space"),ie(oe,le,ye,"\xa0","\\nobreakspace"),ie(se,le,ye,"\xa0","\\ "),ie(se,le,ye,"\xa0"," "),ie(se,le,ye,"\xa0","\\space"),ie(se,le,ye,"\xa0","\\nobreakspace"),ie(oe,le,ye,null,"\\nobreak"),ie(oe,le,ye,null,"\\allowbreak"),ie(oe,le,ve,",",","),ie(oe,le,ve,";",";"),ie(oe,he,ce,"\u22bc","\\barwedge",!0),ie(oe,he,ce,"\u22bb","\\veebar",!0),ie(oe,le,ce,"\u2299","\\odot",!0),ie(oe,le,ce,"\u2295","\\oplus",!0),ie(oe,le,ce,"\u2297","\\otimes",!0),ie(oe,le,xe,"\u2202","\\partial",!0),ie(oe,le,ce,"\u2298","\\oslash",!0),ie(oe,he,ce,"\u229a","\\circledcirc",!0),ie(oe,he,ce,"\u22a1","\\boxdot",!0),ie(oe,le,ce,"\u25b3","\\bigtriangleup"),ie(oe,le,ce,"\u25bd","\\bigtriangledown"),ie(oe,le,ce,"\u2020","\\dagger"),ie(oe,le,ce,"\u22c4","\\diamond"),ie(oe,le,ce,"\u22c6","\\star"),ie(oe,le,ce,"\u25c3","\\triangleleft"),ie(oe,le,ce,"\u25b9","\\triangleright"),ie(oe,le,fe,"{","\\{"),ie(se,le,xe,"{","\\{"),ie(se,le,xe,"{","\\textbraceleft"),ie(oe,le,pe,"}","\\}"),ie(se,le,xe,"}","\\}"),ie(se,le,xe,"}","\\textbraceright"),ie(oe,le,fe,"{","\\lbrace"),ie(oe,le,pe,"}","\\rbrace"),ie(oe,le,fe,"[","\\lbrack",!0),ie(se,le,xe,"[","\\lbrack",!0),ie(oe,le,pe,"]","\\rbrack",!0),ie(se,le,xe,"]","\\rbrack",!0),ie(oe,le,fe,"(","\\lparen",!0),ie(oe,le,pe,")","\\rparen",!0),ie(se,le,xe,"<","\\textless",!0),ie(se,le,xe,">","\\textgreater",!0),ie(oe,le,fe,"\u230a","\\lfloor",!0),ie(oe,le,pe,"\u230b","\\rfloor",!0),ie(oe,le,fe,"\u2308","\\lceil",!0),ie(oe,le,pe,"\u2309","\\rceil",!0),ie(oe,le,xe,"\\","\\backslash"),ie(oe,le,xe,"\u2223","|"),ie(oe,le,xe,"\u2223","\\vert"),ie(se,le,xe,"|","\\textbar",!0),ie(oe,le,xe,"\u2225","\\|"),ie(oe,le,xe,"\u2225","\\Vert"),ie(se,le,xe,"\u2225","\\textbardbl"),ie(se,le,xe,"~","\\textasciitilde"),ie(se,le,xe,"\\","\\textbackslash"),ie(se,le,xe,"^","\\textasciicircum"),ie(oe,le,be,"\u2191","\\uparrow",!0),ie(oe,le,be,"\u21d1","\\Uparrow",!0),ie(oe,le,be,"\u2193","\\downarrow",!0),ie(oe,le,be,"\u21d3","\\Downarrow",!0),ie(oe,le,be,"\u2195","\\updownarrow",!0),ie(oe,le,be,"\u21d5","\\Updownarrow",!0),ie(oe,le,ge,"\u2210","\\coprod"),ie(oe,le,ge,"\u22c1","\\bigvee"),ie(oe,le,ge,"\u22c0","\\bigwedge"),ie(oe,le,ge,"\u2a04","\\biguplus"),ie(oe,le,ge,"\u22c2","\\bigcap"),ie(oe,le,ge,"\u22c3","\\bigcup"),ie(oe,le,ge,"\u222b","\\int"),ie(oe,le,ge,"\u222b","\\intop"),ie(oe,le,ge,"\u222c","\\iint"),ie(oe,le,ge,"\u222d","\\iiint"),ie(oe,le,ge,"\u220f","\\prod"),ie(oe,le,ge,"\u2211","\\sum"),ie(oe,le,ge,"\u2a02","\\bigotimes"),ie(oe,le,ge,"\u2a01","\\bigoplus"),ie(oe,le,ge,"\u2a00","\\bigodot"),ie(oe,le,ge,"\u222e","\\oint"),ie(oe,le,ge,"\u222f","\\oiint"),ie(oe,le,ge,"\u2230","\\oiiint"),ie(oe,le,ge,"\u2a06","\\bigsqcup"),ie(oe,le,ge,"\u222b","\\smallint"),ie(se,le,ue,"\u2026","\\textellipsis"),ie(oe,le,ue,"\u2026","\\mathellipsis"),ie(se,le,ue,"\u2026","\\ldots",!0),ie(oe,le,ue,"\u2026","\\ldots",!0),ie(oe,le,ue,"\u22ef","\\@cdots",!0),ie(oe,le,ue,"\u22f1","\\ddots",!0),ie(oe,le,xe,"\u22ee","\\varvdots"),ie(oe,le,me,"\u02ca","\\acute"),ie(oe,le,me,"\u02cb","\\grave"),ie(oe,le,me,"\xa8","\\ddot"),ie(oe,le,me,"~","\\tilde"),ie(oe,le,me,"\u02c9","\\bar"),ie(oe,le,me,"\u02d8","\\breve"),ie(oe,le,me,"\u02c7","\\check"),ie(oe,le,me,"^","\\hat"),ie(oe,le,me,"\u20d7","\\vec"),ie(oe,le,me,"\u02d9","\\dot"),ie(oe,le,me,"\u02da","\\mathring"),ie(oe,le,de,"\ue131","\\@imath"),ie(oe,le,de,"\ue237","\\@jmath"),ie(oe,le,xe,"\u0131","\u0131"),ie(oe,le,xe,"\u0237","\u0237"),ie(se,le,xe,"\u0131","\\i",!0),ie(se,le,xe,"\u0237","\\j",!0),ie(se,le,xe,"\xdf","\\ss",!0),ie(se,le,xe,"\xe6","\\ae",!0),ie(se,le,xe,"\u0153","\\oe",!0),ie(se,le,xe,"\xf8","\\o",!0),ie(se,le,xe,"\xc6","\\AE",!0),ie(se,le,xe,"\u0152","\\OE",!0),ie(se,le,xe,"\xd8","\\O",!0),ie(se,le,me,"\u02ca","\\'"),ie(se,le,me,"\u02cb","\\`"),ie(se,le,me,"\u02c6","\\^"),ie(se,le,me,"\u02dc","\\~"),ie(se,le,me,"\u02c9","\\="),ie(se,le,me,"\u02d8","\\u"),ie(se,le,me,"\u02d9","\\."),ie(se,le,me,"\xb8","\\c"),ie(se,le,me,"\u02da","\\r"),ie(se,le,me,"\u02c7","\\v"),ie(se,le,me,"\xa8",'\\"'),ie(se,le,me,"\u02dd","\\H"),ie(se,le,me,"\u25ef","\\textcircled");var we={"--":!0,"---":!0,"``":!0,"''":!0};ie(se,le,xe,"\u2013","--",!0),ie(se,le,xe,"\u2013","\\textendash"),ie(se,le,xe,"\u2014","---",!0),ie(se,le,xe,"\u2014","\\textemdash"),ie(se,le,xe,"\u2018","`",!0),ie(se,le,xe,"\u2018","\\textquoteleft"),ie(se,le,xe,"\u2019","'",!0),ie(se,le,xe,"\u2019","\\textquoteright"),ie(se,le,xe,"\u201c","``",!0),ie(se,le,xe,"\u201c","\\textquotedblleft"),ie(se,le,xe,"\u201d","''",!0),ie(se,le,xe,"\u201d","\\textquotedblright"),ie(oe,le,xe,"\xb0","\\degree",!0),ie(se,le,xe,"\xb0","\\degree"),ie(se,le,xe,"\xb0","\\textdegree",!0),ie(oe,le,xe,"\xa3","\\pounds"),ie(oe,le,xe,"\xa3","\\mathsterling",!0),ie(se,le,xe,"\xa3","\\pounds"),ie(se,le,xe,"\xa3","\\textsterling",!0),ie(oe,he,xe,"\u2720","\\maltese"),ie(se,he,xe,"\u2720","\\maltese");for(var ke='0123456789/@."',Se=0;Se<14;Se++){var Me=ke.charAt(Se);ie(oe,le,xe,Me,Me)}for(var ze='0123456789!@*()-=+";:?/.,',Ae=0;Ae<25;Ae++){var Te=ze.charAt(Ae);ie(se,le,xe,Te,Te)}for(var Be="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Ce=0;Ce<52;Ce++){var Ne=Be.charAt(Ce);ie(oe,le,de,Ne,Ne),ie(se,le,xe,Ne,Ne)}ie(oe,he,xe,"C","\u2102"),ie(se,he,xe,"C","\u2102"),ie(oe,he,xe,"H","\u210d"),ie(se,he,xe,"H","\u210d"),ie(oe,he,xe,"N","\u2115"),ie(se,he,xe,"N","\u2115"),ie(oe,he,xe,"P","\u2119"),ie(se,he,xe,"P","\u2119"),ie(oe,he,xe,"Q","\u211a"),ie(se,he,xe,"Q","\u211a"),ie(oe,he,xe,"R","\u211d"),ie(se,he,xe,"R","\u211d"),ie(oe,he,xe,"Z","\u2124"),ie(se,he,xe,"Z","\u2124"),ie(oe,le,de,"h","\u210e"),ie(se,le,de,"h","\u210e");for(var qe="",Ie=0;Ie<52;Ie++){var Re=Be.charAt(Ie);ie(oe,le,de,Re,qe=String.fromCharCode(55349,56320+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56372+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56424+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56580+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56684+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56736+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56788+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56840+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56944+Ie)),ie(se,le,xe,Re,qe),Ie<26&&(ie(oe,le,de,Re,qe=String.fromCharCode(55349,56632+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56476+Ie)),ie(se,le,xe,Re,qe))}ie(oe,le,de,"k",qe=String.fromCharCode(55349,56668)),ie(se,le,xe,"k",qe);for(var He=0;He<10;He++){var Oe=He.toString();ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57294+He)),ie(se,le,xe,Oe,qe),ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57314+He)),ie(se,le,xe,Oe,qe),ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57324+He)),ie(se,le,xe,Oe,qe),ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57334+He)),ie(se,le,xe,Oe,qe)}for(var Ee="\xd0\xde\xfe",Le=0;Le<3;Le++){var De=Ee.charAt(Le);ie(oe,le,de,De,De),ie(se,le,xe,De,De)}var Ve=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathnormal","textit","Math-Italic"],["mathnormal","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],Pe=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],Fe=function(e,t,r){return ne[r][e]&&ne[r][e].replace&&(e=ne[r][e].replace),{value:e,metrics:I(e,t,r)}},Ge=function(e,t,r,a,n){var i,o=Fe(e,t,r),s=o.metrics;if(e=o.value,s){var l=s.italic;("text"===r||a&&"mathit"===a.font)&&(l=0),i=new K(e,s.height,s.depth,l,s.skew,s.width,n)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+e+"' in style '"+t+"' and mode '"+r+"'"),i=new K(e,0,0,0,0,0,n);if(a){i.maxFontSize=a.sizeMultiplier,a.style.isTight()&&i.classes.push("mtight");var h=a.getColor();h&&(i.style.color=h)}return i},Ue=(e,t)=>{if(U(e.classes)!==U(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize)return!1;if(1===e.classes.length){var r=e.classes[0];if("mbin"===r||"mord"===r)return!1}for(var a in e.style)if(e.style.hasOwnProperty(a)&&e.style[a]!==t.style[a])return!1;for(var n in t.style)if(t.style.hasOwnProperty(n)&&e.style[n]!==t.style[n])return!1;return!0},Ye=function(e){for(var t=0,r=0,a=0,n=0;nt&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>a&&(a=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=a},Xe=function(e,t,r,a){var n=new _(e,t,r,a);return Ye(n),n},We=(e,t,r,a)=>new _(e,t,r,a),_e=function(e){var t=new B(e);return Ye(t),t},je=function(e,t,r){var a="";switch(e){case"amsrm":a="AMS";break;case"textrm":a="Main";break;case"textsf":a="SansSerif";break;case"texttt":a="Typewriter";break;default:a=e}return a+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},$e={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ze={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ke={fontMap:$e,makeSymbol:Ge,mathsym:function(e,t,r,a){return void 0===a&&(a=[]),"boldsymbol"===r.font&&Fe(e,"Main-Bold",t).metrics?Ge(e,"Main-Bold",t,r,a.concat(["mathbf"])):"\\"===e||"main"===ne[t][e].font?Ge(e,"Main-Regular",t,r,a):Ge(e,"AMS-Regular",t,r,a.concat(["amsrm"]))},makeSpan:Xe,makeSvgSpan:We,makeLineSpan:function(e,t,r){var a=Xe([e],[],t);return a.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),a.style.borderBottomWidth=G(a.height),a.maxFontSize=1,a},makeAnchor:function(e,t,r,a){var n=new j(e,t,r,a);return Ye(n),n},makeFragment:_e,wrapFragment:function(e,t){return e instanceof B?Xe([],[e],t):e},makeVList:function(e,t){for(var{children:r,depth:a}=function(e){if("individualShift"===e.positionType){for(var t=e.children,r=[t[0]],a=-t[0].shift-t[0].elem.depth,n=a,i=1;i0)return Ge(n,h,a,t,o.concat(m));if(l){var c,p;if("boldsymbol"===l){var u=function(e,t,r,a,n){return"textord"!==n&&Fe(e,"Math-BoldItalic",t).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}}(n,a,0,0,r);c=u.fontName,p=[u.fontClass]}else s?(c=$e[l].fontName,p=[l]):(c=je(l,t.fontWeight,t.fontShape),p=[l,t.fontWeight,t.fontShape]);if(Fe(n,c,a).metrics)return Ge(n,c,a,t,o.concat(p));if(we.hasOwnProperty(n)&&"Typewriter"===c.slice(0,10)){for(var d=[],g=0;g{var r=Xe(["mspace"],[],t),a=F(e,t);return r.style.marginRight=G(a),r},staticSvg:function(e,t){var[r,a,n]=Ze[e],i=new Q(r),o=new J([i],{width:G(a),height:G(n),style:"width:"+G(a),viewBox:"0 0 "+1e3*a+" "+1e3*n,preserveAspectRatio:"xMinYMin"}),s=We(["overlay"],[o],t);return s.height=n,s.style.height=G(n),s.style.width=G(a),s},svgData:Ze,tryCombineChars:e=>{for(var t=0;t{var r=t.classes[0],a=e.classes[0];"mbin"===r&&m.contains(pt,a)?t.classes[0]="mord":"mbin"===a&&m.contains(ct,r)&&(e.classes[0]="mord")}),{node:c},p,u),ft(n,((e,t)=>{var r=yt(t),a=yt(e),n=r&&a?e.hasClass("mtight")?rt[r][a]:tt[r][a]:null;if(n)return Ke.makeGlue(n,l)}),{node:c},p,u),n},ft=function e(t,r,a,n,i){n&&t.push(n);for(var o=0;or=>{t.splice(e+1,0,r),o++})(o)}}n&&t.pop()},vt=function(e){return e instanceof B||e instanceof j||e instanceof _&&e.hasClass("enclosing")?e:null},bt=function e(t,r){var a=vt(t);if(a){var n=a.children;if(n.length){if("right"===r)return e(n[n.length-1],"right");if("left"===r)return e(n[0],"left")}}return t},yt=function(e,t){return e?(t&&(e=bt(e,t)),dt[e.classes[0]]||null):null},xt=function(e,t){var r=["nulldelimiter"].concat(e.baseSizingClasses());return mt(t.concat(r))},wt=function(e,t,r){if(!e)return mt();if(nt[e.type]){var a=nt[e.type](e,t);if(r&&t.size!==r.size){a=mt(t.sizingClasses(r),[a],t);var n=t.sizeMultiplier/r.sizeMultiplier;a.height*=n,a.depth*=n}return a}throw new i("Got group of unknown type: '"+e.type+"'")};function kt(e,t){var r=mt(["base"],e,t),a=mt(["strut"]);return a.style.height=G(r.height+r.depth),r.depth&&(a.style.verticalAlign=G(-r.depth)),r.children.unshift(a),r}function St(e,t){var r=null;1===e.length&&"tag"===e[0].type&&(r=e[0].tag,e=e[0].body);var a,n=gt(e,t,"root");2===n.length&&n[1].hasClass("tag")&&(a=n.pop());for(var i,o=[],s=[],l=0;l0&&(o.push(kt(s,t)),s=[]),o.push(n[l]));s.length>0&&o.push(kt(s,t)),r?((i=kt(gt(r,t,!0))).classes=["tag"],o.push(i)):a&&o.push(a);var m=mt(["katex-html"],o);if(m.setAttribute("aria-hidden","true"),i){var c=i.children[0];c.style.height=G(m.height+m.depth),m.depth&&(c.style.verticalAlign=G(-m.depth))}return m}function Mt(e){return new B(e)}class zt{constructor(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=U(this.classes));for(var r=0;r0&&(e+=' class ="'+m.escape(U(this.classes))+'"'),e+=">";for(var r=0;r"}toText(){return this.children.map((e=>e.toText())).join("")}}class At{constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return m.escape(this.toText())}toText(){return this.text}}var Tt={MathNode:zt,TextNode:At,SpaceNode:class{constructor(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",G(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},newDocumentFragment:Mt},Bt=function(e,t,r){return!ne[t][e]||!ne[t][e].replace||55349===e.charCodeAt(0)||we.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=ne[t][e].replace),new Tt.TextNode(e)},Ct=function(e){return 1===e.length?e[0]:new Tt.MathNode("mrow",e)},Nt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var a=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var n=e.text;return m.contains(["\\imath","\\jmath"],n)?null:(ne[a][n]&&ne[a][n].replace&&(n=ne[a][n].replace),I(n,Ke.fontMap[r].fontName,a)?Ke.fontMap[r].variant:null)},qt=function(e,t,r){if(1===e.length){var a=Rt(e[0],t);return r&&a instanceof zt&&"mo"===a.type&&(a.setAttribute("lspace","0em"),a.setAttribute("rspace","0em")),[a]}for(var n,i=[],o=0;o0&&(m.text=m.text.slice(0,1)+"\u0338"+m.text.slice(1),i.pop())}}}i.push(s),n=s}return i},It=function(e,t,r){return Ct(qt(e,t,r))},Rt=function(e,t){if(!e)return new Tt.MathNode("mrow");if(it[e.type])return it[e.type](e,t);throw new i("Got group of unknown type: '"+e.type+"'")};function Ht(e,t,r,a,n){var i,o=qt(e,r);i=1===o.length&&o[0]instanceof zt&&m.contains(["mrow","mtable"],o[0].type)?o[0]:new Tt.MathNode("mrow",o);var s=new Tt.MathNode("annotation",[new Tt.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var l=new Tt.MathNode("semantics",[i,s]),h=new Tt.MathNode("math",[l]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),a&&h.setAttribute("display","block");var c=n?"katex":"katex-mathml";return Ke.makeSpan([c],[h])}var Ot=function(e){return new L({style:e.displayMode?k.DISPLAY:k.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Et=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Ke.makeSpan(r,[e])}return e},Lt={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Dt={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Vt=function(e,t,r,a,n){var i,o=e.height+e.depth+r+a;if(/fbox|color|angl/.test(t)){if(i=Ke.makeSpan(["stretchy",t],[],n),"fbox"===t){var s=n.color&&n.getColor();s&&(i.style.borderColor=s)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new ee({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new ee({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new J(l,{width:"100%",height:G(o)});i=Ke.makeSvgSpan([],[h],n)}return i.height=o,i.style.height=G(o),i},Pt=function(e){var t=new Tt.MathNode("mo",[new Tt.TextNode(Lt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Ft=function(e,t){var{span:r,minWidth:a,height:n}=function(){var r=4e5,a=e.label.slice(1);if(m.contains(["widehat","widecheck","widetilde","utilde"],a)){var n,i,o,s="ordgroup"===(d=e.base).type?d.body.length:1;if(s>5)"widehat"===a||"widecheck"===a?(n=420,r=2364,o=.42,i=a+"4"):(n=312,r=2340,o=.34,i="tilde4");else{var l=[1,1,2,2,3,3][s];"widehat"===a||"widecheck"===a?(r=[0,1062,2364,2364,2364][l],n=[0,239,300,360,420][l],o=[0,.24,.3,.3,.36,.42][l],i=a+l):(r=[0,600,1033,2339,2340][l],n=[0,260,286,306,312][l],o=[0,.26,.286,.3,.306,.34][l],i="tilde"+l)}var h=new Q(i),c=new J([h],{width:"100%",height:G(o),viewBox:"0 0 "+r+" "+n,preserveAspectRatio:"none"});return{span:Ke.makeSvgSpan([],[c],t),minWidth:0,height:o}}var p,u,d,g=[],f=Dt[a],[v,b,y]=f,x=y/1e3,w=v.length;if(1===w)p=["hide-tail"],u=[f[3]];else if(2===w)p=["halfarrow-left","halfarrow-right"],u=["xMinYMin","xMaxYMin"];else{if(3!==w)throw new Error("Correct katexImagesData or update code here to support\n "+w+" children.");p=["brace-left","brace-center","brace-right"],u=["xMinYMin","xMidYMin","xMaxYMin"]}for(var k=0;k0&&(r.style.minWidth=G(a)),r};function Gt(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Ut(e){var t=Yt(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Yt(e){return e&&("atom"===e.type||ae.hasOwnProperty(e.type))?e:null}var Xt=(e,t)=>{var r,a,n;e&&"supsub"===e.type?(r=(a=Gt(e.base,"accent")).base,e.base=r,n=function(e){if(e instanceof _)return e;throw new Error("Expected span but got "+String(e)+".")}(wt(e,t)),e.base=a):r=(a=Gt(e,"accent")).base;var i=wt(r,t.havingCrampedStyle()),o=0;if(a.isShifty&&m.isCharacterBox(r)){var s=m.getBaseElem(r);o=te(wt(s,t.havingCrampedStyle())).skew}var l,h="\\c"===a.label,c=h?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(a.isStretchy)l=Ft(a,t),l=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:l,wrapperClasses:["svg-align"],wrapperStyle:o>0?{width:"calc(100% - "+G(2*o)+")",marginLeft:G(2*o)}:void 0}]},t);else{var p,u;"\\vec"===a.label?(p=Ke.staticSvg("vec",t),u=Ke.svgData.vec[1]):((p=te(p=Ke.makeOrd({mode:a.mode,text:a.label},t,"textord"))).italic=0,u=p.width,h&&(c+=p.depth)),l=Ke.makeSpan(["accent-body"],[p]);var d="\\textcircled"===a.label;d&&(l.classes.push("accent-full"),c=i.height);var g=o;d||(g-=u/2),l.style.left=G(g),"\\textcircled"===a.label&&(l.style.top=".2em"),l=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-c},{type:"elem",elem:l}]},t)}var f=Ke.makeSpan(["mord","accent"],[l],t);return n?(n.children[0]=f,n.height=Math.max(f.height,n.height),n.classes[0]="mord",n):f},Wt=(e,t)=>{var r=e.isStretchy?Pt(e.label):new Tt.MathNode("mo",[Bt(e.label,e.mode)]),a=new Tt.MathNode("mover",[Rt(e.base,t),r]);return a.setAttribute("accent","true"),a},_t=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((e=>"\\"+e)).join("|"));ot({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{var r=lt(t[0]),a=!_t.test(e.funcName),n=!a||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:a,isShifty:n,base:r}},htmlBuilder:Xt,mathmlBuilder:Wt}),ot({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{var r=t[0],a=e.parser.mode;return"math"===a&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),a="text"),{type:"accent",mode:a,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Xt,mathmlBuilder:Wt}),ot({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0];return{type:"accentUnder",mode:r.mode,label:a,base:n}},htmlBuilder:(e,t)=>{var r=wt(e.base,t),a=Ft(e,t),n="\\utilde"===e.label?.12:0,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:a,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder:(e,t)=>{var r=Pt(e.label),a=new Tt.MathNode("munder",[Rt(e.base,t),r]);return a.setAttribute("accentunder","true"),a}});var jt=e=>{var t=new Tt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};ot({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:a,funcName:n}=e;return{type:"xArrow",mode:a.mode,label:n,body:t[0],below:r[0]}},htmlBuilder(e,t){var r,a=t.style,n=t.havingStyle(a.sup()),i=Ke.wrapFragment(wt(e.body,n,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";i.classes.push(o+"-arrow-pad"),e.below&&(n=t.havingStyle(a.sub()),(r=Ke.wrapFragment(wt(e.below,n,t),t)).classes.push(o+"-arrow-pad"));var s,l=Ft(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,m=-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||"\\xleftequilibrium"===e.label)&&(m-=i.depth),r){var c=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:c}]},t)}else s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h}]},t);return s.children[0].children[0].children[1].classes.push("svg-align"),Ke.makeSpan(["mrel","x-arrow"],[s],t)},mathmlBuilder(e,t){var r,a=Pt(e.label);if(a.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var n=jt(Rt(e.body,t));if(e.below){var i=jt(Rt(e.below,t));r=new Tt.MathNode("munderover",[a,i,n])}else r=new Tt.MathNode("mover",[a,n])}else if(e.below){var o=jt(Rt(e.below,t));r=new Tt.MathNode("munder",[a,o])}else r=jt(),r=new Tt.MathNode("mover",[a,r]);return r}});var $t=Ke.makeSpan;function Zt(e,t){var r=gt(e.body,t,!0);return $t([e.mclass],r,t)}function Kt(e,t){var r,a=qt(e.body,t);return"minner"===e.mclass?r=new Tt.MathNode("mpadded",a):"mord"===e.mclass?e.isCharacterBox?(r=a[0]).type="mi":r=new Tt.MathNode("mi",a):(e.isCharacterBox?(r=a[0]).type="mo":r=new Tt.MathNode("mo",a),"mbin"===e.mclass?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}ot({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+a.slice(5),body:ht(n),isCharacterBox:m.isCharacterBox(n)}},htmlBuilder:Zt,mathmlBuilder:Kt});var Jt=e=>{var t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};ot({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){var{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:Jt(t[0]),body:ht(t[1]),isCharacterBox:m.isCharacterBox(t[1])}}}),ot({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){var r,{parser:a,funcName:n}=e,i=t[1],o=t[0];r="\\stackrel"!==n?Jt(i):"mrel";var s={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:"\\stackrel"!==n,body:ht(i)},l={type:"supsub",mode:o.mode,base:s,sup:"\\underset"===n?null:o,sub:"\\underset"===n?o:null};return{type:"mclass",mode:a.mode,mclass:r,body:[l],isCharacterBox:m.isCharacterBox(l)}},htmlBuilder:Zt,mathmlBuilder:Kt}),ot({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:Jt(t[0]),body:ht(t[0])}},htmlBuilder(e,t){var r=gt(e.body,t,!0),a=Ke.makeSpan([e.mclass],r,t);return a.style.textShadow="0.02em 0.01em 0.04px",a},mathmlBuilder(e,t){var r=qt(e.body,t),a=new Tt.MathNode("mstyle",r);return a.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),a}});var Qt={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},er=e=>"textord"===e.type&&"@"===e.text;function tr(e,t,r){var a=Qt[e];switch(a){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(a,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var n={type:"atom",text:a,mode:"math",family:"rel"},i={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[n],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[i],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}ot({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e;return{type:"cdlabel",mode:r.mode,side:a.slice(4),label:t[0]}},htmlBuilder(e,t){var r=t.havingStyle(t.style.sup()),a=Ke.wrapFragment(wt(e.label,r,t),t);return a.classes.push("cd-label-"+e.side),a.style.bottom=G(.8-a.depth),a.height=0,a.depth=0,a},mathmlBuilder(e,t){var r=new Tt.MathNode("mrow",[Rt(e.label,t)]);return(r=new Tt.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new Tt.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),ot({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){var{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){var r=Ke.wrapFragment(wt(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:(e,t)=>new Tt.MathNode("mrow",[Rt(e.fragment,t)])}),ot({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){for(var{parser:r}=e,a=Gt(t[0],"ordgroup").body,n="",o=0;o=1114111)throw new i("\\@char with invalid code point "+n);return l<=65535?s=String.fromCharCode(l):(l-=65536,s=String.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:"textord",mode:r.mode,text:s}}});var rr=(e,t)=>{var r=gt(e.body,t.withColor(e.color),!1);return Ke.makeFragment(r)},ar=(e,t)=>{var r=qt(e.body,t.withColor(e.color)),a=new Tt.MathNode("mstyle",r);return a.setAttribute("mathcolor",e.color),a};ot({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){var{parser:r}=e,a=Gt(t[0],"color-token").color,n=t[1];return{type:"color",mode:r.mode,color:a,body:ht(n)}},htmlBuilder:rr,mathmlBuilder:ar}),ot({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){var{parser:r,breakOnTokenText:a}=e,n=Gt(t[0],"color-token").color;r.gullet.macros.set("\\current@color",n);var i=r.parseExpression(!0,a);return{type:"color",mode:r.mode,color:n,body:i}},htmlBuilder:rr,mathmlBuilder:ar}),ot({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){var{parser:a}=e,n="["===a.gullet.future().text?a.parseSizeGroup(!0):null,i=!a.settings.displayMode||!a.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:a.mode,newLine:i,size:n&&Gt(n,"size").value}},htmlBuilder(e,t){var r=Ke.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=G(F(e.size,t)))),r},mathmlBuilder(e,t){var r=new Tt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",G(F(e.size,t)))),r}});var nr={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},ir=e=>{var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new i("Expected a control sequence",e);return t},or=(e,t,r,a)=>{var n=e.gullet.macros.get(r.text);null==n&&(r.noexpand=!0,n={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,n,a)};ot({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t,funcName:r}=e;t.consumeSpaces();var a=t.fetch();if(nr[a.text])return"\\global"!==r&&"\\\\globallong"!==r||(a.text=nr[a.text]),Gt(t.parseFunction(),"internal");throw new i("Invalid token after macro prefix",a)}}),ot({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,a=t.gullet.popToken(),n=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(n))throw new i("Expected a control sequence",a);for(var o,s=0,l=[[]];"{"!==t.gullet.future().text;)if("#"===(a=t.gullet.popToken()).text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[s].push("{");break}if(a=t.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new i('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new i('Argument number "'+a.text+'" out of order');s++,l.push([])}else{if("EOF"===a.text)throw new i("Expected a macro definition");l[s].push(a.text)}var{tokens:h}=t.gullet.consumeArg();return o&&h.unshift(o),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(n,{tokens:h,numArgs:s,delimiters:l},r===nr[r]),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,a=ir(t.gullet.popToken());t.gullet.consumeSpaces();var n=(e=>{var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t})(t);return or(t,a,n,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,a=ir(t.gullet.popToken()),n=t.gullet.popToken(),i=t.gullet.popToken();return or(t,a,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(n),{type:"internal",mode:t.mode}}});var sr=function(e,t,r){var a=I(ne.math[e]&&ne.math[e].replace||e,t,r);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return a},lr=function(e,t,r,a){var n=r.havingBaseStyle(t),i=Ke.makeSpan(a.concat(n.sizingClasses(r)),[e],r),o=n.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=n.sizeMultiplier,i},hr=function(e,t,r){var a=t.havingBaseStyle(r),n=(1-t.sizeMultiplier/a.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=G(n),e.height-=n,e.depth+=n},mr=function(e,t,r,a,n,i){var o=function(e,t,r,a){return Ke.makeSymbol(e,"Size"+t+"-Regular",r,a)}(e,t,n,a),s=lr(Ke.makeSpan(["delimsizing","size"+t],[o],a),k.TEXT,a,i);return r&&hr(s,a,k.TEXT),s},cr=function(e,t,r){var a;return a="Size1-Regular"===t?"delim-size1":"delim-size4",{type:"elem",elem:Ke.makeSpan(["delimsizinginner",a],[Ke.makeSpan([],[Ke.makeSymbol(e,t,r)])])}},pr=function(e,t,r){var a=C["Size4-Regular"][e.charCodeAt(0)]?C["Size4-Regular"][e.charCodeAt(0)][4]:C["Size1-Regular"][e.charCodeAt(0)][4],n=new Q("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),i=new J([n],{width:G(a),height:G(t),style:"width:"+G(a),viewBox:"0 0 "+1e3*a+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),o=Ke.makeSvgSpan([],[i],r);return o.height=t,o.style.height=G(t),o.style.width=G(a),{type:"elem",elem:o}},ur={type:"kern",size:-.008},dr=["|","\\lvert","\\rvert","\\vert"],gr=["\\|","\\lVert","\\rVert","\\Vert"],fr=function(e,t,r,a,n,i){var o,s,l,h,c="",p=0;o=l=h=e,s=null;var u="Size1-Regular";"\\uparrow"===e?l=h="\u23d0":"\\Uparrow"===e?l=h="\u2016":"\\downarrow"===e?o=l="\u23d0":"\\Downarrow"===e?o=l="\u2016":"\\updownarrow"===e?(o="\\uparrow",l="\u23d0",h="\\downarrow"):"\\Updownarrow"===e?(o="\\Uparrow",l="\u2016",h="\\Downarrow"):m.contains(dr,e)?(l="\u2223",c="vert",p=333):m.contains(gr,e)?(l="\u2225",c="doublevert",p=556):"["===e||"\\lbrack"===e?(o="\u23a1",l="\u23a2",h="\u23a3",u="Size4-Regular",c="lbrack",p=667):"]"===e||"\\rbrack"===e?(o="\u23a4",l="\u23a5",h="\u23a6",u="Size4-Regular",c="rbrack",p=667):"\\lfloor"===e||"\u230a"===e?(l=o="\u23a2",h="\u23a3",u="Size4-Regular",c="lfloor",p=667):"\\lceil"===e||"\u2308"===e?(o="\u23a1",l=h="\u23a2",u="Size4-Regular",c="lceil",p=667):"\\rfloor"===e||"\u230b"===e?(l=o="\u23a5",h="\u23a6",u="Size4-Regular",c="rfloor",p=667):"\\rceil"===e||"\u2309"===e?(o="\u23a4",l=h="\u23a5",u="Size4-Regular",c="rceil",p=667):"("===e||"\\lparen"===e?(o="\u239b",l="\u239c",h="\u239d",u="Size4-Regular",c="lparen",p=875):")"===e||"\\rparen"===e?(o="\u239e",l="\u239f",h="\u23a0",u="Size4-Regular",c="rparen",p=875):"\\{"===e||"\\lbrace"===e?(o="\u23a7",s="\u23a8",h="\u23a9",l="\u23aa",u="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(o="\u23ab",s="\u23ac",h="\u23ad",l="\u23aa",u="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(o="\u23a7",h="\u23a9",l="\u23aa",u="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(o="\u23ab",h="\u23ad",l="\u23aa",u="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(o="\u23a7",h="\u23ad",l="\u23aa",u="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(o="\u23ab",h="\u23a9",l="\u23aa",u="Size4-Regular");var d=sr(o,u,n),g=d.height+d.depth,f=sr(l,u,n),v=f.height+f.depth,b=sr(h,u,n),y=b.height+b.depth,x=0,w=1;if(null!==s){var S=sr(s,u,n);x=S.height+S.depth,w=2}var M=g+y+x,z=M+Math.max(0,Math.ceil((t-M)/(w*v)))*w*v,A=a.fontMetrics().axisHeight;r&&(A*=a.sizeMultiplier);var T=z/2-A,B=[];if(c.length>0){var C=z-g-y,N=Math.round(1e3*z),q=function(e,t){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v"+t+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v"+t+" v1759 h84z";case"vert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z";case"doublevert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z\nM367 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v"+t+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+t+" v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+t+" v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v602 h84z\nM403 1759 V0 H319 V1759 v"+t+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v602 h84z\nM347 1759 V0 h-84 V1759 v"+t+" v602 h84z";case"lparen":return"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0,"+(t+84)+"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-"+(t+92)+"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z";case"rparen":return"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,"+(t+9)+"\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-"+(t+144)+"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z";default:throw new Error("Unknown stretchy delimiter.")}}(c,Math.round(1e3*C)),I=new Q(c,q),R=(p/1e3).toFixed(3)+"em",H=(N/1e3).toFixed(3)+"em",O=new J([I],{width:R,height:H,viewBox:"0 0 "+p+" "+N}),E=Ke.makeSvgSpan([],[O],a);E.height=N/1e3,E.style.width=R,E.style.height=H,B.push({type:"elem",elem:E})}else{if(B.push(cr(h,u,n)),B.push(ur),null===s){var L=z-g-y+.016;B.push(pr(l,L,a))}else{var D=(z-g-y-x)/2+.016;B.push(pr(l,D,a)),B.push(ur),B.push(cr(s,u,n)),B.push(ur),B.push(pr(l,D,a))}B.push(ur),B.push(cr(o,u,n))}var V=a.havingBaseStyle(k.TEXT),P=Ke.makeVList({positionType:"bottom",positionData:T,children:B},V);return lr(Ke.makeSpan(["delimsizing","mult"],[P],V),k.TEXT,a,i)},vr=.08,br=function(e,t,r,a,n){var i=function(e,t,r){t*=1e3;var a="";switch(e){case"sqrtMain":a=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,A);break;case"sqrtSize1":a=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,A);break;case"sqrtSize2":a=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,A);break;case"sqrtSize3":a=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,A);break;case"sqrtSize4":a=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,A);break;case"sqrtTall":a=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,A,r)}return a}(e,a,r),o=new Q(e,i),s=new J([o],{width:"400em",height:G(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Ke.makeSvgSpan(["hide-tail"],[s],n)},yr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],xr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],wr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],kr=[0,1.2,1.8,2.4,3],Sr=[{type:"small",style:k.SCRIPTSCRIPT},{type:"small",style:k.SCRIPT},{type:"small",style:k.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],Mr=[{type:"small",style:k.SCRIPTSCRIPT},{type:"small",style:k.SCRIPT},{type:"small",style:k.TEXT},{type:"stack"}],zr=[{type:"small",style:k.SCRIPTSCRIPT},{type:"small",style:k.SCRIPT},{type:"small",style:k.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],Ar=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},Tr=function(e,t,r,a){for(var n=Math.min(2,3-a.style.size);nt)return r[n]}return r[r.length-1]},Br=function(e,t,r,a,n,i){var o;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),o=m.contains(wr,e)?Sr:m.contains(yr,e)?zr:Mr;var s=Tr(e,t,o,a);return"small"===s.type?function(e,t,r,a,n,i){var o=Ke.makeSymbol(e,"Main-Regular",n,a),s=lr(o,t,a,i);return r&&hr(s,a,t),s}(e,s.style,r,a,n,i):"large"===s.type?mr(e,s.size,r,a,n,i):fr(e,t,r,a,n,i)},Cr={sqrtImage:function(e,t){var r,a,n=t.havingBaseSizing(),i=Tr("\\surd",e*n.sizeMultiplier,zr,n),o=n.sizeMultiplier,s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,m=0;return"small"===i.type?(e<1?o=1:e<1.4&&(o=.7),h=(1+s)/o,(r=br("sqrtMain",l=(1+s+vr)/o,m=1e3+1e3*s+80,s,t)).style.minWidth="0.853em",a=.833/o):"large"===i.type?(m=1080*kr[i.size],h=(kr[i.size]+s)/o,l=(kr[i.size]+s+vr)/o,(r=br("sqrtSize"+i.size,l,m,s,t)).style.minWidth="1.02em",a=1/o):(l=e+s+vr,h=e+s,m=Math.floor(1e3*e+s)+80,(r=br("sqrtTall",l,m,s,t)).style.minWidth="0.742em",a=1.056),r.height=h,r.style.height=G(l),{span:r,advanceWidth:a,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,a,n){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),m.contains(yr,e)||m.contains(wr,e))return mr(e,t,!1,r,a,n);if(m.contains(xr,e))return fr(e,kr[t],!1,r,a,n);throw new i("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:kr,customSizedDelim:Br,leftRightDelim:function(e,t,r,a,n,i){var o=a.fontMetrics().axisHeight*a.sizeMultiplier,s=5/a.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),h=Math.max(l/500*901,2*l-s);return Br(e,h,!0,a,n,i)}},Nr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},qr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Ir(e,t){var r=Yt(e);if(r&&m.contains(qr,r.text))return r;throw new i(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function Rr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}ot({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{var r=Ir(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Nr[e.funcName].size,mclass:Nr[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>"."===e.delim?Ke.makeSpan([e.mclass]):Cr.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder:e=>{var t=[];"."!==e.delim&&t.push(Bt(e.delim,e.mode));var r=new Tt.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var a=G(Cr.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",a),r.setAttribute("maxsize",a),r}}),ot({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new i("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Ir(t[0],e).text,color:r}}}),ot({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=Ir(t[0],e),a=e.parser;++a.leftrightDepth;var n=a.parseExpression(!1);--a.leftrightDepth,a.expect("\\right",!1);var i=Gt(a.parseFunction(),"leftright-right");return{type:"leftright",mode:a.mode,body:n,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:(e,t)=>{Rr(e);for(var r,a,n=gt(e.body,t,!0,["mopen","mclose"]),i=0,o=0,s=!1,l=0;l{Rr(e);var r=qt(e.body,t);if("."!==e.left){var a=new Tt.MathNode("mo",[Bt(e.left,e.mode)]);a.setAttribute("fence","true"),r.unshift(a)}if("."!==e.right){var n=new Tt.MathNode("mo",[Bt(e.right,e.mode)]);n.setAttribute("fence","true"),e.rightColor&&n.setAttribute("mathcolor",e.rightColor),r.push(n)}return Ct(r)}}),ot({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=Ir(t[0],e);if(!e.parser.leftrightDepth)throw new i("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:(e,t)=>{var r;if("."===e.delim)r=xt(t,[]);else{r=Cr.sizedDelim(e.delim,1,t,e.mode,[]);var a={delim:e.delim,options:t};r.isMiddle=a}return r},mathmlBuilder:(e,t)=>{var r="\\vert"===e.delim||"|"===e.delim?Bt("|","text"):Bt(e.delim,e.mode),a=new Tt.MathNode("mo",[r]);return a.setAttribute("fence","true"),a.setAttribute("lspace","0.05em"),a.setAttribute("rspace","0.05em"),a}});var Hr=(e,t)=>{var r,a,n,i=Ke.wrapFragment(wt(e.body,t),t),o=e.label.slice(1),s=t.sizeMultiplier,l=0,h=m.isCharacterBox(e.body);if("sout"===o)(r=Ke.makeSpan(["stretchy","sout"])).height=t.fontMetrics().defaultRuleThickness/s,l=-.5*t.fontMetrics().xHeight;else if("phase"===o){var c=F({number:.6,unit:"pt"},t),p=F({number:.35,unit:"ex"},t);s/=t.havingBaseSizing().sizeMultiplier;var u=i.height+i.depth+c+p;i.style.paddingLeft=G(u/2+c);var d=Math.floor(1e3*u*s),g="M400000 "+(a=d)+" H0 L"+a/2+" 0 l65 45 L145 "+(a-80)+" H400000z",f=new J([new Q("phase",g)],{width:"400em",height:G(d/1e3),viewBox:"0 0 400000 "+d,preserveAspectRatio:"xMinYMin slice"});(r=Ke.makeSvgSpan(["hide-tail"],[f],t)).style.height=G(u),l=i.depth+c+p}else{/cancel/.test(o)?h||i.classes.push("cancel-pad"):"angl"===o?i.classes.push("anglpad"):i.classes.push("boxpad");var v=0,b=0,y=0;/box/.test(o)?(y=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),b=v=t.fontMetrics().fboxsep+("colorbox"===o?0:y)):"angl"===o?(v=4*(y=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness)),b=Math.max(0,.25-i.depth)):b=v=h?.2:0,r=Vt(i,o,v,b,t),/fbox|boxed|fcolorbox/.test(o)?(r.style.borderStyle="solid",r.style.borderWidth=G(y)):"angl"===o&&.049!==y&&(r.style.borderTopWidth=G(y),r.style.borderRightWidth=G(y)),l=i.depth+b,e.backgroundColor&&(r.style.backgroundColor=e.backgroundColor,e.borderColor&&(r.style.borderColor=e.borderColor))}if(e.backgroundColor)n=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:l},{type:"elem",elem:i,shift:0}]},t);else{var x=/cancel|phase/.test(o)?["svg-align"]:[];n=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:0},{type:"elem",elem:r,shift:l,wrapperClasses:x}]},t)}return/cancel/.test(o)&&(n.height=i.height,n.depth=i.depth),/cancel/.test(o)&&!h?Ke.makeSpan(["mord","cancel-lap"],[n],t):Ke.makeSpan(["mord"],[n],t)},Or=(e,t)=>{var r=0,a=new Tt.MathNode(e.label.indexOf("colorbox")>-1?"mpadded":"menclose",[Rt(e.body,t)]);switch(e.label){case"\\cancel":a.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":a.setAttribute("notation","downdiagonalstrike");break;case"\\phase":a.setAttribute("notation","phasorangle");break;case"\\sout":a.setAttribute("notation","horizontalstrike");break;case"\\fbox":a.setAttribute("notation","box");break;case"\\angl":a.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,a.setAttribute("width","+"+2*r+"pt"),a.setAttribute("height","+"+2*r+"pt"),a.setAttribute("lspace",r+"pt"),a.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var n=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);a.setAttribute("style","border: "+n+"em solid "+String(e.borderColor))}break;case"\\xcancel":a.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&a.setAttribute("mathbackground",e.backgroundColor),a};ot({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(e,t,r){var{parser:a,funcName:n}=e,i=Gt(t[0],"color-token").color,o=t[1];return{type:"enclose",mode:a.mode,label:n,backgroundColor:i,body:o}},htmlBuilder:Hr,mathmlBuilder:Or}),ot({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(e,t,r){var{parser:a,funcName:n}=e,i=Gt(t[0],"color-token").color,o=Gt(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:a.mode,label:n,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Hr,mathmlBuilder:Or}),ot({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}}),ot({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"enclose",mode:r.mode,label:a,body:n}},htmlBuilder:Hr,mathmlBuilder:Or}),ot({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});var Er={};function Lr(e){for(var{type:t,names:r,props:a,handler:n,htmlBuilder:i,mathmlBuilder:o}=e,s={type:t,numArgs:a.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n},l=0;l{if(!e.parser.settings.displayMode)throw new i("{"+e.envName+"} can be used only in display mode.")};function Gr(e){if(-1===e.indexOf("ed"))return-1===e.indexOf("*")}function Ur(e,t,r){var{hskipBeforeAndAfter:a,addJot:o,cols:s,arraystretch:l,colSeparationType:h,autoTag:m,singleRow:c,emptySingleRow:p,maxNumCols:u,leqno:d}=t;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!l){var g=e.gullet.expandMacroAsText("\\arraystretch");if(null==g)l=1;else if(!(l=parseFloat(g))||l<0)throw new i("Invalid \\arraystretch: "+g)}e.gullet.beginGroup();var f=[],v=[f],b=[],y=[],x=null!=m?[]:void 0;function w(){m&&e.gullet.macros.set("\\@eqnsw","1",!0)}function k(){x&&(e.gullet.macros.get("\\df@tag")?(x.push(e.subparse([new n("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):x.push(Boolean(m)&&"1"===e.gullet.macros.get("\\@eqnsw")))}for(w(),y.push(Pr(e));;){var S=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup(),S={type:"ordgroup",mode:e.mode,body:S},r&&(S={type:"styling",mode:e.mode,style:r,body:[S]}),f.push(S);var M=e.fetch().text;if("&"===M){if(u&&f.length===u){if(c||h)throw new i("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else{if("\\end"===M){k(),1===f.length&&"styling"===S.type&&0===S.body[0].body.length&&(v.length>1||!p)&&v.pop(),y.length0&&(y+=.25),h.push({pos:y,isDashed:e[t]})}for(x(o[0]),r=0;r0&&(M<(B+=b)&&(M=B),B=0),e.addJot&&(M+=g),z.height=S,z.depth=M,y+=S,z.pos=y,y+=M+B,l[r]=z,x(o[r+1])}var C,N,q=y/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],H=[];if(e.tags&&e.tags.some((e=>e)))for(r=0;r=s)){var W=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(W=m.deflt(V.pregap,u))&&((C=Ke.makeSpan(["arraycolsep"],[])).style.width=G(W),R.push(C));var _=[];for(r=0;r0){for(var K=Ke.makeLineSpan("hline",t,c),J=Ke.makeLineSpan("hdashline",t,c),Q=[{type:"elem",elem:l,shift:0}];h.length>0;){var ee=h.pop(),te=ee.pos-q;ee.isDashed?Q.push({type:"elem",elem:J,shift:te}):Q.push({type:"elem",elem:K,shift:te})}l=Ke.makeVList({positionType:"individualShift",children:Q},t)}if(0===H.length)return Ke.makeSpan(["mord"],[l],t);var re=Ke.makeVList({positionType:"individualShift",children:H},t);return re=Ke.makeSpan(["tag"],[re],t),Ke.makeFragment([l,re])},Wr={c:"center ",l:"left ",r:"right "},_r=function(e,t){for(var r=[],a=new Tt.MathNode("mtd",[],["mtr-glue"]),n=new Tt.MathNode("mtd",[],["mml-eqn-num"]),i=0;i0){var u=e.cols,d="",g=!1,f=0,v=u.length;"separator"===u[0].type&&(c+="top ",f=1),"separator"===u[u.length-1].type&&(c+="bottom ",v-=1);for(var b=f;b0?"left ":"",c+=S[S.length-1].length>0?"right ":"";for(var M=1;M-1?"alignat":"align",o="split"===e.envName,s=Ur(e.parser,{cols:a,addJot:!0,autoTag:o?void 0:Gr(e.envName),emptySingleRow:!0,colSeparationType:n,maxNumCols:o?2:void 0,leqno:e.parser.settings.leqno},"display"),l=0,h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var m="",c=0;c0&&p&&(g=1),a[u]={type:"align",align:d,pregap:g,postgap:0}}return s.colSeparationType=p?"align":"alignat",s};Lr({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){var r=(Yt(t[0])?[t[0]]:Gt(t[0],"ordgroup").body).map((function(e){var t=Ut(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new i("Unknown column alignment: "+t,e)})),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Ur(e.parser,a,Yr(e.envName))},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var n=e.parser;if(n.consumeSpaces(),"["===n.fetch().text){if(n.consume(),n.consumeSpaces(),r=n.fetch().text,-1==="lcr".indexOf(r))throw new i("Expected l or c or r",n.nextToken);n.consume(),n.consumeSpaces(),n.expect("]"),n.consume(),a.cols=[{type:"align",align:r}]}}var o=Ur(e.parser,a,Yr(e.envName)),s=Math.max(0,...o.body.map((e=>e.length)));return o.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[o],left:t[0],right:t[1],rightColor:void 0}:o},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){var t=Ur(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){var r=(Yt(t[0])?[t[0]]:Gt(t[0],"ordgroup").body).map((function(e){var t=Ut(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new i("Unknown column alignment: "+t,e)}));if(r.length>1)throw new i("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=Ur(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new i("{subarray} can contain only one column");return a},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){var t=Ur(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},Yr(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:jr,htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){m.contains(["gather","gather*"],e.envName)&&Fr(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Gr(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Ur(e.parser,t,"display")},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:jr,htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){Fr(e);var t={autoTag:Gr(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Ur(e.parser,t,"display")},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["CD"],props:{numArgs:0},handler:e=>(Fr(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new i("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}for(var a,n,o=[],s=[o],l=0;l-1);else{if(!("<>AV".indexOf(p)>-1))throw new i('Expected one of "<>AV=|." after @',h[c]);for(var d=0;d<2;d++){for(var g=!0,f=c+1;f{var r=e.font,a=t.withFont(r);return wt(e.body,a)},Kr=(e,t)=>{var r=e.font,a=t.withFont(r);return Rt(e.body,a)},Jr={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};ot({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=lt(t[0]),i=a;return i in Jr&&(i=Jr[i]),{type:"font",mode:r.mode,font:i.slice(1),body:n}},htmlBuilder:Zr,mathmlBuilder:Kr}),ot({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(e,t)=>{var{parser:r}=e,a=t[0],n=m.isCharacterBox(a);return{type:"mclass",mode:r.mode,mclass:Jt(a),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:a}],isCharacterBox:n}}}),ot({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:a,breakOnTokenText:n}=e,{mode:i}=r,o=r.parseExpression(!0,n);return{type:"font",mode:i,font:"math"+a.slice(1),body:{type:"ordgroup",mode:r.mode,body:o}}},htmlBuilder:Zr,mathmlBuilder:Kr});var Qr=(e,t)=>{var r=t;return"display"===e?r=r.id>=k.SCRIPT.id?r.text():k.DISPLAY:"text"===e&&r.size===k.DISPLAY.size?r=k.TEXT:"script"===e?r=k.SCRIPT:"scriptscript"===e&&(r=k.SCRIPTSCRIPT),r},ea=(e,t)=>{var r,a=Qr(e.size,t.style),n=a.fracNum(),i=a.fracDen();r=t.havingStyle(n);var o=wt(e.numer,r,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;o.height=o.height0?3*c:7*c,d=t.fontMetrics().denom1):(m>0?(p=t.fontMetrics().num2,u=c):(p=t.fontMetrics().num3,u=3*c),d=t.fontMetrics().denom2),h){var x=t.fontMetrics().axisHeight;p-o.depth-(x+.5*m){var r=new Tt.MathNode("mfrac",[Rt(e.numer,t),Rt(e.denom,t)]);if(e.hasBarLine){if(e.barSize){var a=F(e.barSize,t);r.setAttribute("linethickness",G(a))}}else r.setAttribute("linethickness","0px");var n=Qr(e.size,t.style);if(n.size!==t.style.size){r=new Tt.MathNode("mstyle",[r]);var i=n.size===k.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",i),r.setAttribute("scriptlevel","0")}if(null!=e.leftDelim||null!=e.rightDelim){var o=[];if(null!=e.leftDelim){var s=new Tt.MathNode("mo",[new Tt.TextNode(e.leftDelim.replace("\\",""))]);s.setAttribute("fence","true"),o.push(s)}if(o.push(r),null!=e.rightDelim){var l=new Tt.MathNode("mo",[new Tt.TextNode(e.rightDelim.replace("\\",""))]);l.setAttribute("fence","true"),o.push(l)}return Ct(o)}return r};ot({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(e,t)=>{var r,{parser:a,funcName:n}=e,i=t[0],o=t[1],s=null,l=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":r=!0;break;case"\\\\atopfrac":r=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":r=!1,s="(",l=")";break;case"\\\\bracefrac":r=!1,s="\\{",l="\\}";break;case"\\\\brackfrac":r=!1,s="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text"}return{type:"genfrac",mode:a.mode,continued:!1,numer:i,denom:o,hasBarLine:r,leftDelim:s,rightDelim:l,size:h,barSize:null}},htmlBuilder:ea,mathmlBuilder:ta}),ot({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0],i=t[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:n,denom:i,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}}),ot({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){var t,{parser:r,funcName:a,token:n}=e;switch(a){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;case"\\atop":t="\\\\atopfrac";break;case"\\brace":t="\\\\bracefrac";break;case"\\brack":t="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:r.mode,replaceWith:t,token:n}}});var ra=["display","text","script","scriptscript"],aa=function(e){var t=null;return e.length>0&&(t="."===(t=e)?null:t),t};ot({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){var r,{parser:a}=e,n=t[4],i=t[5],o=lt(t[0]),s="atom"===o.type&&"open"===o.family?aa(o.text):null,l=lt(t[1]),h="atom"===l.type&&"close"===l.family?aa(l.text):null,m=Gt(t[2],"size"),c=null;r=!!m.isBlank||(c=m.value).number>0;var p="auto",u=t[3];if("ordgroup"===u.type){if(u.body.length>0){var d=Gt(u.body[0],"textord");p=ra[Number(d.text)]}}else u=Gt(u,"textord"),p=ra[Number(u.text)];return{type:"genfrac",mode:a.mode,numer:n,denom:i,continued:!1,hasBarLine:r,barSize:c,leftDelim:s,rightDelim:h,size:p}},htmlBuilder:ea,mathmlBuilder:ta}),ot({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){var{parser:r,funcName:a,token:n}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Gt(t[0],"size").value,token:n}}}),ot({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0],i=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Gt(t[1],"infix").size),o=t[2],s=i.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:o,continued:!1,hasBarLine:s,barSize:i,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:ea,mathmlBuilder:ta});var na=(e,t)=>{var r,a,n=t.style;"supsub"===e.type?(r=e.sup?wt(e.sup,t.havingStyle(n.sup()),t):wt(e.sub,t.havingStyle(n.sub()),t),a=Gt(e.base,"horizBrace")):a=Gt(e,"horizBrace");var i,o=wt(a.base,t.havingBaseStyle(k.DISPLAY)),s=Ft(a,t);if(a.isOver?(i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(i=Ke.makeVList({positionType:"bottom",positionData:o.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Ke.makeSpan(["mord",a.isOver?"mover":"munder"],[i],t);i=a.isOver?Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):Ke.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return Ke.makeSpan(["mord",a.isOver?"mover":"munder"],[i],t)};ot({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e;return{type:"horizBrace",mode:r.mode,label:a,isOver:/^\\over/.test(a),base:t[0]}},htmlBuilder:na,mathmlBuilder:(e,t)=>{var r=Pt(e.label);return new Tt.MathNode(e.isOver?"mover":"munder",[Rt(e.base,t),r])}}),ot({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=t[1],n=Gt(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:r.mode,href:n,body:ht(a)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:(e,t)=>{var r=gt(e.body,t,!1);return Ke.makeAnchor(e.href,[],r,t)},mathmlBuilder:(e,t)=>{var r=It(e.body,t);return r instanceof zt||(r=new zt("mrow",[r])),r.setAttribute("href",e.href),r}}),ot({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=Gt(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:a}))return r.formatUnsupportedCmd("\\url");for(var n=[],i=0;inew Tt.MathNode("mrow",qt(e.body,t))}),ot({type:"html",names:["\\htmlClass","\\htmlId","\\htmlStyle","\\htmlData"],props:{numArgs:2,argTypes:["raw","original"],allowedInText:!0},handler:(e,t)=>{var r,{parser:a,funcName:n,token:o}=e,s=Gt(t[0],"raw").string,l=t[1];a.settings.strict&&a.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var h={};switch(n){case"\\htmlClass":h.class=s,r={command:"\\htmlClass",class:s};break;case"\\htmlId":h.id=s,r={command:"\\htmlId",id:s};break;case"\\htmlStyle":h.style=s,r={command:"\\htmlStyle",style:s};break;case"\\htmlData":for(var m=s.split(","),c=0;c{var r=gt(e.body,t,!1),a=["enclosing"];e.attributes.class&&a.push(...e.attributes.class.trim().split(/\s+/));var n=Ke.makeSpan(a,r,t);for(var i in e.attributes)"class"!==i&&e.attributes.hasOwnProperty(i)&&n.setAttribute(i,e.attributes[i]);return n},mathmlBuilder:(e,t)=>It(e.body,t)}),ot({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:ht(t[0]),mathml:ht(t[1])}},htmlBuilder:(e,t)=>{var r=gt(e.html,t,!1);return Ke.makeFragment(r)},mathmlBuilder:(e,t)=>It(e.mathml,t)});var ia=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new i("Invalid size: '"+e+"' in \\includegraphics");var r={number:+(t[1]+t[2]),unit:t[3]};if(!P(r))throw new i("Invalid unit: '"+r.unit+"' in \\includegraphics.");return r};ot({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(e,t,r)=>{var{parser:a}=e,n={number:0,unit:"em"},o={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var h=Gt(r[0],"raw").string.split(","),m=0;m{var r=F(e.height,t),a=0;e.totalheight.number>0&&(a=F(e.totalheight,t)-r);var n=0;e.width.number>0&&(n=F(e.width,t));var i={height:G(r+a)};n>0&&(i.width=G(n)),a>0&&(i.verticalAlign=G(-a));var o=new $(e.src,e.alt,i);return o.height=r,o.depth=a,o},mathmlBuilder:(e,t)=>{var r=new Tt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var a=F(e.height,t),n=0;if(e.totalheight.number>0&&(n=F(e.totalheight,t)-a,r.setAttribute("valign",G(-n))),r.setAttribute("height",G(a+n)),e.width.number>0){var i=F(e.width,t);r.setAttribute("width",G(i))}return r.setAttribute("src",e.src),r}}),ot({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:a}=e,n=Gt(t[0],"size");if(r.settings.strict){var i="m"===a[1],o="mu"===n.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" supports only mu units, not "+n.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:n.value}},htmlBuilder:(e,t)=>Ke.makeGlue(e.dimension,t),mathmlBuilder(e,t){var r=F(e.dimension,t);return new Tt.SpaceNode(r)}}),ot({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0];return{type:"lap",mode:r.mode,alignment:a.slice(5),body:n}},htmlBuilder:(e,t)=>{var r;"clap"===e.alignment?(r=Ke.makeSpan([],[wt(e.body,t)]),r=Ke.makeSpan(["inner"],[r],t)):r=Ke.makeSpan(["inner"],[wt(e.body,t)]);var a=Ke.makeSpan(["fix"],[]),n=Ke.makeSpan([e.alignment],[r,a],t),i=Ke.makeSpan(["strut"]);return i.style.height=G(n.height+n.depth),n.depth&&(i.style.verticalAlign=G(-n.depth)),n.children.unshift(i),n=Ke.makeSpan(["thinbox"],[n],t),Ke.makeSpan(["mord","vbox"],[n],t)},mathmlBuilder:(e,t)=>{var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);if("rlap"!==e.alignment){var a="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",a+"width")}return r.setAttribute("width","0px"),r}}),ot({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){var{funcName:r,parser:a}=e,n=a.mode;a.switchMode("math");var i="\\("===r?"\\)":"$",o=a.parseExpression(!1,i);return a.expect(i),a.switchMode(n),{type:"styling",mode:a.mode,style:"text",body:o}}}),ot({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new i("Mismatched "+e.funcName)}});var oa=(e,t)=>{switch(t.style.size){case k.DISPLAY.size:return e.display;case k.TEXT.size:return e.text;case k.SCRIPT.size:return e.script;case k.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};ot({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:ht(t[0]),text:ht(t[1]),script:ht(t[2]),scriptscript:ht(t[3])}},htmlBuilder:(e,t)=>{var r=oa(e,t),a=gt(r,t,!1);return Ke.makeFragment(a)},mathmlBuilder:(e,t)=>{var r=oa(e,t);return It(r,t)}});var sa=(e,t,r,a,n,i,o)=>{e=Ke.makeSpan([],[e]);var s,l,h,c=r&&m.isCharacterBox(r);if(t){var p=wt(t,a.havingStyle(n.sup()),a);l={elem:p,kern:Math.max(a.fontMetrics().bigOpSpacing1,a.fontMetrics().bigOpSpacing3-p.depth)}}if(r){var u=wt(r,a.havingStyle(n.sub()),a);s={elem:u,kern:Math.max(a.fontMetrics().bigOpSpacing2,a.fontMetrics().bigOpSpacing4-u.height)}}if(l&&s){var d=a.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;h=Ke.makeVList({positionType:"bottom",positionData:d,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:G(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e},{type:"kern",size:l.kern},{type:"elem",elem:l.elem,marginLeft:G(i)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else if(s){var g=e.height-o;h=Ke.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:G(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e}]},a)}else{if(!l)return e;var f=e.depth+o;h=Ke.makeVList({positionType:"bottom",positionData:f,children:[{type:"elem",elem:e},{type:"kern",size:l.kern},{type:"elem",elem:l.elem,marginLeft:G(i)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}var v=[h];if(s&&0!==i&&!c){var b=Ke.makeSpan(["mspace"],[],a);b.style.marginRight=G(i),v.unshift(b)}return Ke.makeSpan(["mop","op-limits"],v,a)},la=["\\smallint"],ha=(e,t)=>{var r,a,n,i=!1;"supsub"===e.type?(r=e.sup,a=e.sub,n=Gt(e.base,"op"),i=!0):n=Gt(e,"op");var o,s=t.style,l=!1;if(s.size===k.DISPLAY.size&&n.symbol&&!m.contains(la,n.name)&&(l=!0),n.symbol){var h=l?"Size2-Regular":"Size1-Regular",c="";if("\\oiint"!==n.name&&"\\oiiint"!==n.name||(c=n.name.slice(1),n.name="oiint"===c?"\\iint":"\\iiint"),o=Ke.makeSymbol(n.name,h,"math",t,["mop","op-symbol",l?"large-op":"small-op"]),c.length>0){var p=o.italic,u=Ke.staticSvg(c+"Size"+(l?"2":"1"),t);o=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:u,shift:l?.08:0}]},t),n.name="\\"+c,o.classes.unshift("mop"),o.italic=p}}else if(n.body){var d=gt(n.body,t,!0);1===d.length&&d[0]instanceof K?(o=d[0]).classes[0]="mop":o=Ke.makeSpan(["mop"],d,t)}else{for(var g=[],f=1;f{var r;if(e.symbol)r=new zt("mo",[Bt(e.name,e.mode)]),m.contains(la,e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new zt("mo",qt(e.body,t));else{r=new zt("mi",[new At(e.name.slice(1))]);var a=new zt("mo",[Bt("\u2061","text")]);r=e.parentIsSupSub?new zt("mrow",[r,a]):Mt([r,a])}return r},ca={"\u220f":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22c0":"\\bigwedge","\u22c1":"\\bigvee","\u22c2":"\\bigcap","\u22c3":"\\bigcup","\u2a00":"\\bigodot","\u2a01":"\\bigoplus","\u2a02":"\\bigotimes","\u2a04":"\\biguplus","\u2a06":"\\bigsqcup"};ot({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220f","\u2210","\u2211","\u22c0","\u22c1","\u22c2","\u22c3","\u2a00","\u2a01","\u2a02","\u2a04","\u2a06"],props:{numArgs:0},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=a;return 1===n.length&&(n=ca[n]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:ha,mathmlBuilder:ma}),ot({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var{parser:r}=e,a=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:ht(a)}},htmlBuilder:ha,mathmlBuilder:ma});var pa={"\u222b":"\\int","\u222c":"\\iint","\u222d":"\\iiint","\u222e":"\\oint","\u222f":"\\oiint","\u2230":"\\oiiint"};ot({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:ha,mathmlBuilder:ma}),ot({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:ha,mathmlBuilder:ma}),ot({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222b","\u222c","\u222d","\u222e","\u222f","\u2230"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e,a=r;return 1===a.length&&(a=pa[a]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:ha,mathmlBuilder:ma});var ua=(e,t)=>{var r,a,n,i,o=!1;if("supsub"===e.type?(r=e.sup,a=e.sub,n=Gt(e.base,"operatorname"),o=!0):n=Gt(e,"operatorname"),n.body.length>0){for(var s=n.body.map((e=>{var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),l=gt(s,t.withFont("mathrm"),!0),h=0;h{var{parser:r,funcName:a}=e,n=t[0];return{type:"operatorname",mode:r.mode,body:ht(n),alwaysHandleSupSub:"\\operatornamewithlimits"===a,limits:!1,parentIsSupSub:!1}},htmlBuilder:ua,mathmlBuilder:(e,t)=>{for(var r=qt(e.body,t.withFont("mathrm")),a=!0,n=0;ne.toText())).join("");r=[new Tt.TextNode(s)]}var l=new Tt.MathNode("mi",r);l.setAttribute("mathvariant","normal");var h=new Tt.MathNode("mo",[Bt("\u2061","text")]);return e.parentIsSupSub?new Tt.MathNode("mrow",[l,h]):Tt.newDocumentFragment([l,h])}}),Vr("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),st({type:"ordgroup",htmlBuilder:(e,t)=>e.semisimple?Ke.makeFragment(gt(e.body,t,!1)):Ke.makeSpan(["mord"],gt(e.body,t,!0),t),mathmlBuilder:(e,t)=>It(e.body,t,!0)}),ot({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){var{parser:r}=e,a=t[0];return{type:"overline",mode:r.mode,body:a}},htmlBuilder(e,t){var r=wt(e.body,t.havingCrampedStyle()),a=Ke.makeLineSpan("overline-line",t),n=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*n},{type:"elem",elem:a},{type:"kern",size:n}]},t);return Ke.makeSpan(["mord","overline"],[i],t)},mathmlBuilder(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new Tt.MathNode("mover",[Rt(e.body,t),r]);return a.setAttribute("accent","true"),a}}),ot({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=t[0];return{type:"phantom",mode:r.mode,body:ht(a)}},htmlBuilder:(e,t)=>{var r=gt(e.body,t.withPhantom(),!1);return Ke.makeFragment(r)},mathmlBuilder:(e,t)=>{var r=qt(e.body,t);return new Tt.MathNode("mphantom",r)}}),ot({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=t[0];return{type:"hphantom",mode:r.mode,body:a}},htmlBuilder:(e,t)=>{var r=Ke.makeSpan([],[wt(e.body,t.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var a=0;a{var r=qt(ht(e.body),t),a=new Tt.MathNode("mphantom",r),n=new Tt.MathNode("mpadded",[a]);return n.setAttribute("height","0px"),n.setAttribute("depth","0px"),n}}),ot({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=t[0];return{type:"vphantom",mode:r.mode,body:a}},htmlBuilder:(e,t)=>{var r=Ke.makeSpan(["inner"],[wt(e.body,t.withPhantom())]),a=Ke.makeSpan(["fix"],[]);return Ke.makeSpan(["mord","rlap"],[r,a],t)},mathmlBuilder:(e,t)=>{var r=qt(ht(e.body),t),a=new Tt.MathNode("mphantom",r),n=new Tt.MathNode("mpadded",[a]);return n.setAttribute("width","0px"),n}}),ot({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e,a=Gt(t[0],"size").value,n=t[1];return{type:"raisebox",mode:r.mode,dy:a,body:n}},htmlBuilder(e,t){var r=wt(e.body,t),a=F(e.dy,t);return Ke.makeVList({positionType:"shift",positionData:-a,children:[{type:"elem",elem:r}]},t)},mathmlBuilder(e,t){var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]),a=e.dy.number+e.dy.unit;return r.setAttribute("voffset",a),r}}),ot({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t}=e;return{type:"internal",mode:t.mode}}}),ot({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(e,t,r){var{parser:a}=e,n=r[0],i=Gt(t[0],"size"),o=Gt(t[1],"size");return{type:"rule",mode:a.mode,shift:n&&Gt(n,"size").value,width:i.value,height:o.value}},htmlBuilder(e,t){var r=Ke.makeSpan(["mord","rule"],[],t),a=F(e.width,t),n=F(e.height,t),i=e.shift?F(e.shift,t):0;return r.style.borderRightWidth=G(a),r.style.borderTopWidth=G(n),r.style.bottom=G(i),r.width=a,r.height=n+i,r.depth=-i,r.maxFontSize=1.125*n*t.sizeMultiplier,r},mathmlBuilder(e,t){var r=F(e.width,t),a=F(e.height,t),n=e.shift?F(e.shift,t):0,i=t.color&&t.getColor()||"black",o=new Tt.MathNode("mspace");o.setAttribute("mathbackground",i),o.setAttribute("width",G(r)),o.setAttribute("height",G(a));var s=new Tt.MathNode("mpadded",[o]);return n>=0?s.setAttribute("height",G(n)):(s.setAttribute("height",G(n)),s.setAttribute("depth",G(-n))),s.setAttribute("voffset",G(n)),s}});var ga=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];ot({type:"sizing",names:ga,props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{breakOnTokenText:r,funcName:a,parser:n}=e,i=n.parseExpression(!1,r);return{type:"sizing",mode:n.mode,size:ga.indexOf(a)+1,body:i}},htmlBuilder:(e,t)=>{var r=t.havingSize(e.size);return da(e.body,r,t)},mathmlBuilder:(e,t)=>{var r=t.havingSize(e.size),a=qt(e.body,r),n=new Tt.MathNode("mstyle",a);return n.setAttribute("mathsize",G(r.sizeMultiplier)),n}}),ot({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(e,t,r)=>{var{parser:a}=e,n=!1,i=!1,o=r[0]&&Gt(r[0],"ordgroup");if(o)for(var s="",l=0;l{var r=Ke.makeSpan([],[wt(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0,r.children))for(var a=0;a{var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}}),ot({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:a}=e,n=r[0],i=t[0];return{type:"sqrt",mode:a.mode,body:i,index:n}},htmlBuilder(e,t){var r=wt(e.body,t.havingCrampedStyle());0===r.height&&(r.height=t.fontMetrics().xHeight),r=Ke.wrapFragment(r,t);var a=t.fontMetrics().defaultRuleThickness,n=a;t.style.idr.height+r.depth+i&&(i=(i+m-r.height-r.depth)/2);var c=s.height-r.height-i-l;r.style.paddingLeft=G(h);var p=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+c)},{type:"elem",elem:s},{type:"kern",size:l}]},t);if(e.index){var u=t.havingStyle(k.SCRIPTSCRIPT),d=wt(e.index,u,t),g=.6*(p.height-p.depth),f=Ke.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:d}]},t),v=Ke.makeSpan(["root"],[f]);return Ke.makeSpan(["mord","sqrt"],[v,p],t)}return Ke.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder(e,t){var{body:r,index:a}=e;return a?new Tt.MathNode("mroot",[Rt(r,t),Rt(a,t)]):new Tt.MathNode("msqrt",[Rt(r,t)])}});var fa={display:k.DISPLAY,text:k.TEXT,script:k.SCRIPT,scriptscript:k.SCRIPTSCRIPT};ot({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){var{breakOnTokenText:r,funcName:a,parser:n}=e,i=n.parseExpression(!0,r),o=a.slice(1,a.length-5);return{type:"styling",mode:n.mode,style:o,body:i}},htmlBuilder(e,t){var r=fa[e.style],a=t.havingStyle(r).withFont("");return da(e.body,a,t)},mathmlBuilder(e,t){var r=fa[e.style],a=t.havingStyle(r),n=qt(e.body,a),i=new Tt.MathNode("mstyle",n),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});st({type:"supsub",htmlBuilder(e,t){var r=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===k.DISPLAY.size||r.alwaysHandleSupSub)?ha:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===k.DISPLAY.size||r.limits)?ua:null:"accent"===r.type?m.isCharacterBox(r.base)?Xt:null:"horizBrace"===r.type&&!e.sub===r.isOver?na:null:null}(e,t);if(r)return r(e,t);var a,n,i,{base:o,sup:s,sub:l}=e,h=wt(o,t),c=t.fontMetrics(),p=0,u=0,d=o&&m.isCharacterBox(o);if(s){var g=t.havingStyle(t.style.sup());a=wt(s,g,t),d||(p=h.height-g.fontMetrics().supDrop*g.sizeMultiplier/t.sizeMultiplier)}if(l){var f=t.havingStyle(t.style.sub());n=wt(l,f,t),d||(u=h.depth+f.fontMetrics().subDrop*f.sizeMultiplier/t.sizeMultiplier)}i=t.style===k.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;var v,b=t.sizeMultiplier,y=G(.5/c.ptPerEm/b),x=null;if(n){var w=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(h instanceof K||w)&&(x=G(-h.italic))}if(a&&n){p=Math.max(p,i,a.depth+.25*c.xHeight),u=Math.max(u,c.sub2);var S=4*c.defaultRuleThickness;if(p-a.depth-(n.height-u)0&&(p+=M,u-=M)}var z=[{type:"elem",elem:n,shift:u,marginRight:y,marginLeft:x},{type:"elem",elem:a,shift:-p,marginRight:y}];v=Ke.makeVList({positionType:"individualShift",children:z},t)}else if(n){u=Math.max(u,c.sub1,n.height-.8*c.xHeight);var A=[{type:"elem",elem:n,marginLeft:x,marginRight:y}];v=Ke.makeVList({positionType:"shift",positionData:u,children:A},t)}else{if(!a)throw new Error("supsub must have either sup or sub.");p=Math.max(p,i,a.depth+.25*c.xHeight),v=Ke.makeVList({positionType:"shift",positionData:-p,children:[{type:"elem",elem:a,marginRight:y}]},t)}var T=yt(h,"right")||"mord";return Ke.makeSpan([T],[h,Ke.makeSpan(["msupsub"],[v])],t)},mathmlBuilder(e,t){var r,a=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(a=!0,r=e.base.isOver),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);var n,i=[Rt(e.base,t)];if(e.sub&&i.push(Rt(e.sub,t)),e.sup&&i.push(Rt(e.sup,t)),a)n=r?"mover":"munder";else if(e.sub)if(e.sup){var o=e.base;n=o&&"op"===o.type&&o.limits&&t.style===k.DISPLAY||o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===k.DISPLAY||o.limits)?"munderover":"msubsup"}else{var s=e.base;n=s&&"op"===s.type&&s.limits&&(t.style===k.DISPLAY||s.alwaysHandleSupSub)||s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(s.limits||t.style===k.DISPLAY)?"munder":"msub"}else{var l=e.base;n=l&&"op"===l.type&&l.limits&&(t.style===k.DISPLAY||l.alwaysHandleSupSub)||l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===k.DISPLAY)?"mover":"msup"}return new Tt.MathNode(n,i)}}),st({type:"atom",htmlBuilder:(e,t)=>Ke.mathsym(e.text,e.mode,t,["m"+e.family]),mathmlBuilder(e,t){var r=new Tt.MathNode("mo",[Bt(e.text,e.mode)]);if("bin"===e.family){var a=Nt(e,t);"bold-italic"===a&&r.setAttribute("mathvariant",a)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});var va={mi:"italic",mn:"normal",mtext:"normal"};st({type:"mathord",htmlBuilder:(e,t)=>Ke.makeOrd(e,t,"mathord"),mathmlBuilder(e,t){var r=new Tt.MathNode("mi",[Bt(e.text,e.mode,t)]),a=Nt(e,t)||"italic";return a!==va[r.type]&&r.setAttribute("mathvariant",a),r}}),st({type:"textord",htmlBuilder:(e,t)=>Ke.makeOrd(e,t,"textord"),mathmlBuilder(e,t){var r,a=Bt(e.text,e.mode,t),n=Nt(e,t)||"normal";return r="text"===e.mode?new Tt.MathNode("mtext",[a]):/[0-9]/.test(e.text)?new Tt.MathNode("mn",[a]):"\\prime"===e.text?new Tt.MathNode("mo",[a]):new Tt.MathNode("mi",[a]),n!==va[r.type]&&r.setAttribute("mathvariant",n),r}});var ba={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},ya={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};st({type:"spacing",htmlBuilder(e,t){if(ya.hasOwnProperty(e.text)){var r=ya[e.text].className||"";if("text"===e.mode){var a=Ke.makeOrd(e,t,"textord");return a.classes.push(r),a}return Ke.makeSpan(["mspace",r],[Ke.mathsym(e.text,e.mode,t)],t)}if(ba.hasOwnProperty(e.text))return Ke.makeSpan(["mspace",ba[e.text]],[],t);throw new i('Unknown type of space "'+e.text+'"')},mathmlBuilder(e,t){if(!ya.hasOwnProperty(e.text)){if(ba.hasOwnProperty(e.text))return new Tt.MathNode("mspace");throw new i('Unknown type of space "'+e.text+'"')}return new Tt.MathNode("mtext",[new Tt.TextNode("\xa0")])}});var xa=()=>{var e=new Tt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};st({type:"tag",mathmlBuilder(e,t){var r=new Tt.MathNode("mtable",[new Tt.MathNode("mtr",[xa(),new Tt.MathNode("mtd",[It(e.body,t)]),xa(),new Tt.MathNode("mtd",[It(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var wa={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},ka={"\\textbf":"textbf","\\textmd":"textmd"},Sa={"\\textit":"textit","\\textup":"textup"},Ma=(e,t)=>{var r=e.font;return r?wa[r]?t.withTextFontFamily(wa[r]):ka[r]?t.withTextFontWeight(ka[r]):t.withTextFontShape(Sa[r]):t};ot({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"text",mode:r.mode,body:ht(n),font:a}},htmlBuilder(e,t){var r=Ma(e,t),a=gt(e.body,r,!0);return Ke.makeSpan(["mord","text"],a,r)},mathmlBuilder(e,t){var r=Ma(e,t);return It(e.body,r)}}),ot({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=wt(e.body,t),a=Ke.makeLineSpan("underline-line",t),n=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:n},{type:"elem",elem:a},{type:"kern",size:3*n},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","underline"],[i],t)},mathmlBuilder(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new Tt.MathNode("munder",[Rt(e.body,t),r]);return a.setAttribute("accentunder","true"),a}}),ot({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=wt(e.body,t),a=t.fontMetrics().axisHeight,n=.5*(r.height-a-(r.depth+a));return Ke.makeVList({positionType:"shift",positionData:n,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:(e,t)=>new Tt.MathNode("mpadded",[Rt(e.body,t)],["vcenter"])}),ot({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new i("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){for(var r=za(e),a=[],n=t.havingStyle(t.style.text()),i=0;ie.body.replace(/ /g,e.star?"\u2423":"\xa0"),Aa=at,Ta="[ \r\n\t]",Ba="(\\\\[a-zA-Z@]+)"+Ta+"*",Ca="[\u0300-\u036f]",Na=new RegExp(Ca+"+$"),qa="("+Ta+"+)|\\\\(\n|[ \r\t]+\n?)[ \r\t]*|([!-\\[\\]-\u2027\u202a-\ud7ff\uf900-\uffff]"+Ca+"*|[\ud800-\udbff][\udc00-\udfff]"+Ca+"*|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5|"+Ba+"|\\\\[^\ud800-\udfff])";class Ia{constructor(e,t){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=t,this.tokenRegex=new RegExp(qa,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){var e=this.input,t=this.tokenRegex.lastIndex;if(t===e.length)return new n("EOF",new a(this,t,t));var r=this.tokenRegex.exec(e);if(null===r||r.index!==t)throw new i("Unexpected character: '"+e[t]+"'",new n(e[t],new a(this,t,t+1)));var o=r[6]||r[3]||(r[2]?"\\ ":" ");if(14===this.catcodes[o]){var s=e.indexOf("\n",this.tokenRegex.lastIndex);return-1===s?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=s+1,this.lex()}return new n(o,new a(this,t,this.tokenRegex.lastIndex))}}class Ra{constructor(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(0===this.undefStack.length)throw new i("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var t in e)e.hasOwnProperty(t)&&(null==e[t]?delete this.current[t]:this.current[t]=e[t])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,t,r){if(void 0===r&&(r=!1),r){for(var a=0;a0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var n=this.undefStack[this.undefStack.length-1];n&&!n.hasOwnProperty(e)&&(n[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t}}var Ha=Dr;Vr("\\noexpand",(function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Vr("\\expandafter",(function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Vr("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Vr("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Vr("\\@ifnextchar",(function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Vr("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Vr("\\TextOrMath",(function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));var Oa={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Vr("\\char",(function(e){var t,r=e.popToken(),a="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if("\\"===(r=e.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new i("\\char` missing argument");a=r.text.charCodeAt(0)}else t=10;if(t){if(null==(a=Oa[r.text])||a>=t)throw new i("Invalid base-"+t+" digit "+r.text);for(var n;null!=(n=Oa[e.future().text])&&n{var a=e.consumeArg().tokens;if(1!==a.length)throw new i("\\newcommand's first argument must be a macro name");var n=a[0].text,o=e.isDefined(n);if(o&&!t)throw new i("\\newcommand{"+n+"} attempting to redefine "+n+"; use \\renewcommand");if(!o&&!r)throw new i("\\renewcommand{"+n+"} when command "+n+" does not yet exist; use \\newcommand");var s=0;if(1===(a=e.consumeArg().tokens).length&&"["===a[0].text){for(var l="",h=e.expandNextToken();"]"!==h.text&&"EOF"!==h.text;)l+=h.text,h=e.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new i("Invalid number of arguments: "+l);s=parseInt(l),a=e.consumeArg().tokens}return e.macros.set(n,{tokens:a,numArgs:s}),""};Vr("\\newcommand",(e=>Ea(e,!1,!0))),Vr("\\renewcommand",(e=>Ea(e,!0,!1))),Vr("\\providecommand",(e=>Ea(e,!0,!0))),Vr("\\message",(e=>{var t=e.consumeArgs(1)[0];return console.log(t.reverse().map((e=>e.text)).join("")),""})),Vr("\\errmessage",(e=>{var t=e.consumeArgs(1)[0];return console.error(t.reverse().map((e=>e.text)).join("")),""})),Vr("\\show",(e=>{var t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),Aa[r],ne.math[r],ne.text[r]),""})),Vr("\\bgroup","{"),Vr("\\egroup","}"),Vr("~","\\nobreakspace"),Vr("\\lq","`"),Vr("\\rq","'"),Vr("\\aa","\\r a"),Vr("\\AA","\\r A"),Vr("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xa9}"),Vr("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"),Vr("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xae}"),Vr("\u212c","\\mathscr{B}"),Vr("\u2130","\\mathscr{E}"),Vr("\u2131","\\mathscr{F}"),Vr("\u210b","\\mathscr{H}"),Vr("\u2110","\\mathscr{I}"),Vr("\u2112","\\mathscr{L}"),Vr("\u2133","\\mathscr{M}"),Vr("\u211b","\\mathscr{R}"),Vr("\u212d","\\mathfrak{C}"),Vr("\u210c","\\mathfrak{H}"),Vr("\u2128","\\mathfrak{Z}"),Vr("\\Bbbk","\\Bbb{k}"),Vr("\xb7","\\cdotp"),Vr("\\llap","\\mathllap{\\textrm{#1}}"),Vr("\\rlap","\\mathrlap{\\textrm{#1}}"),Vr("\\clap","\\mathclap{\\textrm{#1}}"),Vr("\\mathstrut","\\vphantom{(}"),Vr("\\underbar","\\underline{\\text{#1}}"),Vr("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'),Vr("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}"),Vr("\\ne","\\neq"),Vr("\u2260","\\neq"),Vr("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}"),Vr("\u2209","\\notin"),Vr("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}"),Vr("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"),Vr("\u225a","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225a}}"),Vr("\u225b","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225b}}"),Vr("\u225d","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225d}}"),Vr("\u225e","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225e}}"),Vr("\u225f","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225f}}"),Vr("\u27c2","\\perp"),Vr("\u203c","\\mathclose{!\\mkern-0.8mu!}"),Vr("\u220c","\\notni"),Vr("\u231c","\\ulcorner"),Vr("\u231d","\\urcorner"),Vr("\u231e","\\llcorner"),Vr("\u231f","\\lrcorner"),Vr("\xa9","\\copyright"),Vr("\xae","\\textregistered"),Vr("\ufe0f","\\textregistered"),Vr("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}'),Vr("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}'),Vr("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}'),Vr("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}'),Vr("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}"),Vr("\u22ee","\\vdots"),Vr("\\varGamma","\\mathit{\\Gamma}"),Vr("\\varDelta","\\mathit{\\Delta}"),Vr("\\varTheta","\\mathit{\\Theta}"),Vr("\\varLambda","\\mathit{\\Lambda}"),Vr("\\varXi","\\mathit{\\Xi}"),Vr("\\varPi","\\mathit{\\Pi}"),Vr("\\varSigma","\\mathit{\\Sigma}"),Vr("\\varUpsilon","\\mathit{\\Upsilon}"),Vr("\\varPhi","\\mathit{\\Phi}"),Vr("\\varPsi","\\mathit{\\Psi}"),Vr("\\varOmega","\\mathit{\\Omega}"),Vr("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),Vr("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"),Vr("\\boxed","\\fbox{$\\displaystyle{#1}$}"),Vr("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),Vr("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),Vr("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");var La={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Vr("\\dots",(function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in La?t=La[r]:("\\not"===r.slice(0,4)||r in ne.math&&m.contains(["bin","rel"],ne.math[r].group))&&(t="\\dotsb"),t}));var Da={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Vr("\\dotso",(function(e){return e.future().text in Da?"\\ldots\\,":"\\ldots"})),Vr("\\dotsc",(function(e){var t=e.future().text;return t in Da&&","!==t?"\\ldots\\,":"\\ldots"})),Vr("\\cdots",(function(e){return e.future().text in Da?"\\@cdots\\,":"\\@cdots"})),Vr("\\dotsb","\\cdots"),Vr("\\dotsm","\\cdots"),Vr("\\dotsi","\\!\\cdots"),Vr("\\dotsx","\\ldots\\,"),Vr("\\DOTSI","\\relax"),Vr("\\DOTSB","\\relax"),Vr("\\DOTSX","\\relax"),Vr("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Vr("\\,","\\tmspace+{3mu}{.1667em}"),Vr("\\thinspace","\\,"),Vr("\\>","\\mskip{4mu}"),Vr("\\:","\\tmspace+{4mu}{.2222em}"),Vr("\\medspace","\\:"),Vr("\\;","\\tmspace+{5mu}{.2777em}"),Vr("\\thickspace","\\;"),Vr("\\!","\\tmspace-{3mu}{.1667em}"),Vr("\\negthinspace","\\!"),Vr("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Vr("\\negthickspace","\\tmspace-{5mu}{.277em}"),Vr("\\enspace","\\kern.5em "),Vr("\\enskip","\\hskip.5em\\relax"),Vr("\\quad","\\hskip1em\\relax"),Vr("\\qquad","\\hskip2em\\relax"),Vr("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Vr("\\tag@paren","\\tag@literal{({#1})}"),Vr("\\tag@literal",(e=>{if(e.macros.get("\\df@tag"))throw new i("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Vr("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Vr("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Vr("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Vr("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Vr("\\newline","\\\\\\relax"),Vr("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Va=G(C["Main-Regular"]["T".charCodeAt(0)][1]-.7*C["Main-Regular"]["A".charCodeAt(0)][1]);Vr("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Va+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Vr("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Va+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Vr("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Vr("\\@hspace","\\hskip #1\\relax"),Vr("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Vr("\\ordinarycolon",":"),Vr("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Vr("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Vr("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Vr("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Vr("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Vr("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Vr("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Vr("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Vr("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Vr("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Vr("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Vr("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Vr("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Vr("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Vr("\u2237","\\dblcolon"),Vr("\u2239","\\eqcolon"),Vr("\u2254","\\coloneqq"),Vr("\u2255","\\eqqcolon"),Vr("\u2a74","\\Coloneqq"),Vr("\\ratio","\\vcentcolon"),Vr("\\coloncolon","\\dblcolon"),Vr("\\colonequals","\\coloneqq"),Vr("\\coloncolonequals","\\Coloneqq"),Vr("\\equalscolon","\\eqqcolon"),Vr("\\equalscoloncolon","\\Eqqcolon"),Vr("\\colonminus","\\coloneq"),Vr("\\coloncolonminus","\\Coloneq"),Vr("\\minuscolon","\\eqcolon"),Vr("\\minuscoloncolon","\\Eqcolon"),Vr("\\coloncolonapprox","\\Colonapprox"),Vr("\\coloncolonsim","\\Colonsim"),Vr("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Vr("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Vr("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Vr("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Vr("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Vr("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Vr("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Vr("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Vr("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Vr("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Vr("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Vr("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Vr("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Vr("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Vr("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Vr("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Vr("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Vr("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Vr("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Vr("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Vr("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Vr("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Vr("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Vr("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Vr("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Vr("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Vr("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Vr("\\imath","\\html@mathml{\\@imath}{\u0131}"),Vr("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Vr("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Vr("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Vr("\u27e6","\\llbracket"),Vr("\u27e7","\\rrbracket"),Vr("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Vr("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Vr("\u2983","\\lBrace"),Vr("\u2984","\\rBrace"),Vr("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Vr("\u29b5","\\minuso"),Vr("\\darr","\\downarrow"),Vr("\\dArr","\\Downarrow"),Vr("\\Darr","\\Downarrow"),Vr("\\lang","\\langle"),Vr("\\rang","\\rangle"),Vr("\\uarr","\\uparrow"),Vr("\\uArr","\\Uparrow"),Vr("\\Uarr","\\Uparrow"),Vr("\\N","\\mathbb{N}"),Vr("\\R","\\mathbb{R}"),Vr("\\Z","\\mathbb{Z}"),Vr("\\alef","\\aleph"),Vr("\\alefsym","\\aleph"),Vr("\\Alpha","\\mathrm{A}"),Vr("\\Beta","\\mathrm{B}"),Vr("\\bull","\\bullet"),Vr("\\Chi","\\mathrm{X}"),Vr("\\clubs","\\clubsuit"),Vr("\\cnums","\\mathbb{C}"),Vr("\\Complex","\\mathbb{C}"),Vr("\\Dagger","\\ddagger"),Vr("\\diamonds","\\diamondsuit"),Vr("\\empty","\\emptyset"),Vr("\\Epsilon","\\mathrm{E}"),Vr("\\Eta","\\mathrm{H}"),Vr("\\exist","\\exists"),Vr("\\harr","\\leftrightarrow"),Vr("\\hArr","\\Leftrightarrow"),Vr("\\Harr","\\Leftrightarrow"),Vr("\\hearts","\\heartsuit"),Vr("\\image","\\Im"),Vr("\\infin","\\infty"),Vr("\\Iota","\\mathrm{I}"),Vr("\\isin","\\in"),Vr("\\Kappa","\\mathrm{K}"),Vr("\\larr","\\leftarrow"),Vr("\\lArr","\\Leftarrow"),Vr("\\Larr","\\Leftarrow"),Vr("\\lrarr","\\leftrightarrow"),Vr("\\lrArr","\\Leftrightarrow"),Vr("\\Lrarr","\\Leftrightarrow"),Vr("\\Mu","\\mathrm{M}"),Vr("\\natnums","\\mathbb{N}"),Vr("\\Nu","\\mathrm{N}"),Vr("\\Omicron","\\mathrm{O}"),Vr("\\plusmn","\\pm"),Vr("\\rarr","\\rightarrow"),Vr("\\rArr","\\Rightarrow"),Vr("\\Rarr","\\Rightarrow"),Vr("\\real","\\Re"),Vr("\\reals","\\mathbb{R}"),Vr("\\Reals","\\mathbb{R}"),Vr("\\Rho","\\mathrm{P}"),Vr("\\sdot","\\cdot"),Vr("\\sect","\\S"),Vr("\\spades","\\spadesuit"),Vr("\\sub","\\subset"),Vr("\\sube","\\subseteq"),Vr("\\supe","\\supseteq"),Vr("\\Tau","\\mathrm{T}"),Vr("\\thetasym","\\vartheta"),Vr("\\weierp","\\wp"),Vr("\\Zeta","\\mathrm{Z}"),Vr("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Vr("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Vr("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Vr("\\bra","\\mathinner{\\langle{#1}|}"),Vr("\\ket","\\mathinner{|{#1}\\rangle}"),Vr("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Vr("\\Bra","\\left\\langle#1\\right|"),Vr("\\Ket","\\left|#1\\right\\rangle");var Pa=e=>t=>{var r=t.consumeArg().tokens,a=t.consumeArg().tokens,n=t.consumeArg().tokens,i=t.consumeArg().tokens,o=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=t=>r=>{e&&(r.macros.set("|",o),n.length&&r.macros.set("\\|",s));var i=t;!t&&n.length&&("|"===r.future().text&&(r.popToken(),i=!0));return{tokens:i?n:a,numArgs:0}};t.macros.set("|",l(!1)),n.length&&t.macros.set("\\|",l(!0));var h=t.consumeArg().tokens,m=t.expandTokens([...i,...h,...r]);return t.macros.endGroup(),{tokens:m.reverse(),numArgs:0}};Vr("\\bra@ket",Pa(!1)),Vr("\\bra@set",Pa(!0)),Vr("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),Vr("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),Vr("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),Vr("\\angln","{\\angl n}"),Vr("\\blue","\\textcolor{##6495ed}{#1}"),Vr("\\orange","\\textcolor{##ffa500}{#1}"),Vr("\\pink","\\textcolor{##ff00af}{#1}"),Vr("\\red","\\textcolor{##df0030}{#1}"),Vr("\\green","\\textcolor{##28ae7b}{#1}"),Vr("\\gray","\\textcolor{gray}{#1}"),Vr("\\purple","\\textcolor{##9d38bd}{#1}"),Vr("\\blueA","\\textcolor{##ccfaff}{#1}"),Vr("\\blueB","\\textcolor{##80f6ff}{#1}"),Vr("\\blueC","\\textcolor{##63d9ea}{#1}"),Vr("\\blueD","\\textcolor{##11accd}{#1}"),Vr("\\blueE","\\textcolor{##0c7f99}{#1}"),Vr("\\tealA","\\textcolor{##94fff5}{#1}"),Vr("\\tealB","\\textcolor{##26edd5}{#1}"),Vr("\\tealC","\\textcolor{##01d1c1}{#1}"),Vr("\\tealD","\\textcolor{##01a995}{#1}"),Vr("\\tealE","\\textcolor{##208170}{#1}"),Vr("\\greenA","\\textcolor{##b6ffb0}{#1}"),Vr("\\greenB","\\textcolor{##8af281}{#1}"),Vr("\\greenC","\\textcolor{##74cf70}{#1}"),Vr("\\greenD","\\textcolor{##1fab54}{#1}"),Vr("\\greenE","\\textcolor{##0d923f}{#1}"),Vr("\\goldA","\\textcolor{##ffd0a9}{#1}"),Vr("\\goldB","\\textcolor{##ffbb71}{#1}"),Vr("\\goldC","\\textcolor{##ff9c39}{#1}"),Vr("\\goldD","\\textcolor{##e07d10}{#1}"),Vr("\\goldE","\\textcolor{##a75a05}{#1}"),Vr("\\redA","\\textcolor{##fca9a9}{#1}"),Vr("\\redB","\\textcolor{##ff8482}{#1}"),Vr("\\redC","\\textcolor{##f9685d}{#1}"),Vr("\\redD","\\textcolor{##e84d39}{#1}"),Vr("\\redE","\\textcolor{##bc2612}{#1}"),Vr("\\maroonA","\\textcolor{##ffbde0}{#1}"),Vr("\\maroonB","\\textcolor{##ff92c6}{#1}"),Vr("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Vr("\\maroonD","\\textcolor{##ca337c}{#1}"),Vr("\\maroonE","\\textcolor{##9e034e}{#1}"),Vr("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Vr("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Vr("\\purpleC","\\textcolor{##aa87ff}{#1}"),Vr("\\purpleD","\\textcolor{##7854ab}{#1}"),Vr("\\purpleE","\\textcolor{##543b78}{#1}"),Vr("\\mintA","\\textcolor{##f5f9e8}{#1}"),Vr("\\mintB","\\textcolor{##edf2df}{#1}"),Vr("\\mintC","\\textcolor{##e0e5cc}{#1}"),Vr("\\grayA","\\textcolor{##f6f7f7}{#1}"),Vr("\\grayB","\\textcolor{##f0f1f2}{#1}"),Vr("\\grayC","\\textcolor{##e3e5e6}{#1}"),Vr("\\grayD","\\textcolor{##d6d8da}{#1}"),Vr("\\grayE","\\textcolor{##babec2}{#1}"),Vr("\\grayF","\\textcolor{##888d93}{#1}"),Vr("\\grayG","\\textcolor{##626569}{#1}"),Vr("\\grayH","\\textcolor{##3b3e40}{#1}"),Vr("\\grayI","\\textcolor{##21242c}{#1}"),Vr("\\kaBlue","\\textcolor{##314453}{#1}"),Vr("\\kaGreen","\\textcolor{##71B307}{#1}");var Fa={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class Ga{constructor(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Ra(Ha,t.macros),this.mode=r,this.stack=[]}feed(e){this.lexer=new Ia(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var t,r,a;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken(),({tokens:a,end:r}=this.consumeArg(["]"]))}else({tokens:a,start:t,end:r}=this.consumeArg());return this.pushToken(new n("EOF",r.loc)),this.pushTokens(a),t.range(r,"")}consumeSpaces(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}}consumeArg(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var a,n=this.future(),o=0,s=0;do{if(a=this.popToken(),t.push(a),"{"===a.text)++o;else if("}"===a.text){if(-1===--o)throw new i("Extra }",a)}else if("EOF"===a.text)throw new i("Unexpected end of input in a macro argument, expected '"+(e&&r?e[s]:"}")+"'",a);if(e&&r)if((0===o||1===o&&"{"===e[s])&&a.text===e[s]){if(++s===e.length){t.splice(-s,s);break}}else s=0}while(0!==o||r);return"{"===n.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:n,end:a}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new i("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;athis.settings.maxExpand)throw new i("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var t=this.popToken(),r=t.text,a=t.noexpand?null:this._getExpansion(r);if(null==a||e&&a.unexpandable){if(e&&null==a&&"\\"===r[0]&&!this.isDefined(r))throw new i("Undefined control sequence: "+r);return this.pushToken(t),!1}this.countExpansion(1);var n=a.tokens,o=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s=(n=n.slice()).length-1;s>=0;--s){var l=n[s];if("#"===l.text){if(0===s)throw new i("Incomplete placeholder at end of macro body",l);if("#"===(l=n[--s]).text)n.splice(s+1,1);else{if(!/^[1-9]$/.test(l.text))throw new i("Not a valid argument number",l);n.splice(s,2,...o[+l.text-1])}}}return this.pushTokens(n),n.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(!1===this.expandOnce()){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new n(e)]):void 0}expandTokens(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(!1===this.expandOnce(!0)){var a=this.stack.pop();a.treatAsRelax&&(a.noexpand=!1,a.treatAsRelax=!1),t.push(a)}return this.countExpansion(t.length),t}expandMacroAsText(e){var t=this.expandMacro(e);return t?t.map((e=>e.text)).join(""):t}_getExpansion(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var a="function"==typeof t?t(this):t;if("string"==typeof a){var n=0;if(-1!==a.indexOf("#"))for(var i=a.replace(/##/g,"");-1!==i.indexOf("#"+(n+1));)++n;for(var o=new Ia(a,this.settings),s=[],l=o.lex();"EOF"!==l.text;)s.push(l),l=o.lex();return s.reverse(),{tokens:s,numArgs:n}}return a}isDefined(e){return this.macros.has(e)||Aa.hasOwnProperty(e)||ne.math.hasOwnProperty(e)||ne.text.hasOwnProperty(e)||Fa.hasOwnProperty(e)}isExpandable(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Aa.hasOwnProperty(e)&&!Aa[e].primitive}}var Ua=/^[\u208a\u208b\u208c\u208d\u208e\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u1d66\u1d67\u1d68\u1d69\u1d6a]/,Ya=Object.freeze({"\u208a":"+","\u208b":"-","\u208c":"=","\u208d":"(","\u208e":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1d62":"i","\u2c7c":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209a":"p","\u1d63":"r","\u209b":"s","\u209c":"t","\u1d64":"u","\u1d65":"v","\u2093":"x","\u1d66":"\u03b2","\u1d67":"\u03b3","\u1d68":"\u03c1","\u1d69":"\u03d5","\u1d6a":"\u03c7","\u207a":"+","\u207b":"-","\u207c":"=","\u207d":"(","\u207e":")","\u2070":"0","\xb9":"1","\xb2":"2","\xb3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1d2c":"A","\u1d2e":"B","\u1d30":"D","\u1d31":"E","\u1d33":"G","\u1d34":"H","\u1d35":"I","\u1d36":"J","\u1d37":"K","\u1d38":"L","\u1d39":"M","\u1d3a":"N","\u1d3c":"O","\u1d3e":"P","\u1d3f":"R","\u1d40":"T","\u1d41":"U","\u2c7d":"V","\u1d42":"W","\u1d43":"a","\u1d47":"b","\u1d9c":"c","\u1d48":"d","\u1d49":"e","\u1da0":"f","\u1d4d":"g","\u02b0":"h","\u2071":"i","\u02b2":"j","\u1d4f":"k","\u02e1":"l","\u1d50":"m","\u207f":"n","\u1d52":"o","\u1d56":"p","\u02b3":"r","\u02e2":"s","\u1d57":"t","\u1d58":"u","\u1d5b":"v","\u02b7":"w","\u02e3":"x","\u02b8":"y","\u1dbb":"z","\u1d5d":"\u03b2","\u1d5e":"\u03b3","\u1d5f":"\u03b4","\u1d60":"\u03d5","\u1d61":"\u03c7","\u1dbf":"\u03b8"}),Xa={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},Wa={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"};class _a{constructor(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new Ga(e,t,this.mode),this.settings=t,this.leftrightDepth=0}expect(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new i("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new n("}")),this.gullet.pushTokens(e);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r}parseExpression(e,t){for(var r=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==_a.endOfExpression.indexOf(a.text))break;if(t&&a.text===t)break;if(e&&Aa[a.text]&&Aa[a.text].infix)break;var n=this.parseAtom(t);if(!n)break;"internal"!==n.type&&r.push(n)}return"text"===this.mode&&this.formLigatures(r),this.handleInfixNodes(r)}handleInfixNodes(e){for(var t,r=-1,a=0;a=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var l,h=ne[this.mode][t].group,m=a.range(e);if(re.hasOwnProperty(h)){var c=h;l={type:"atom",mode:this.mode,family:c,loc:m,text:t}}else l={type:h,mode:this.mode,loc:m,text:t};o=l}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(z(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),o={type:"textord",mode:"text",loc:a.range(e),text:t}}if(this.consume(),s)for(var p=0;p{i.d(t,{A:()=>a});i(96540);var n=i(34164),s=i(21312),o=i(51107),r=i(74848);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,n.A)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(s.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(s.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(s.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},82237:(e,t,i)=>{i.r(t),i.d(t,{default:()=>l});i(96540);var n=i(21312),s=i(1003),o=i(58356),r=i(23363),a=i(74848);function l(){const e=(0,n.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.be,{title:e}),(0,a.jsx)(o.A,{children:(0,a.jsx)(r.A,{})})]})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/22ed3411.65f32600.js b/pr-preview/pr-1594/assets/js/22ed3411.65f32600.js deleted file mode 100644 index 95148c1b83..0000000000 --- a/pr-preview/pr-1594/assets/js/22ed3411.65f32600.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[903],{93766:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>a,frontMatter:()=>t,metadata:()=>c,toc:()=>l});var s=r(74848),i=r(28453);const t={},o="Dropbox",c={id:"reference/Connectors/capture-connectors/dropbox",title:"Dropbox",description:"This connector captures data from a Dropbox account into a Flow collection.",source:"@site/docs/reference/Connectors/capture-connectors/dropbox.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/dropbox",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/dropbox.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Datadog HTTP Ingest (Webhook)",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest"},next:{title:"Exchange Rates API",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates"}},d={},l=[{value:"Supported data types",id:"supported-data-types",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Advanced: Parsing Dropbox files",id:"advanced-parsing-dropbox-files",level:3},{value:"CSV configuration",id:"csv-configuration",level:4}];function h(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"dropbox",children:"Dropbox"}),"\n",(0,s.jsx)(n.p,{children:"This connector captures data from a Dropbox account into a Flow collection."}),"\n",(0,s.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/source-dropbox:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/source-dropbox:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(n.h2,{id:"supported-data-types",children:"Supported data types"}),"\n",(0,s.jsx)(n.p,{children:"This connector automatically captures the data within the specified Dropbox folder into a single Flow collection."}),"\n",(0,s.jsx)(n.p,{children:"The following file types are supported:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Avro"}),"\n",(0,s.jsx)(n.li,{children:"CSV"}),"\n",(0,s.jsx)(n.li,{children:"JSON"}),"\n",(0,s.jsx)(n.li,{children:"Protobuf"}),"\n",(0,s.jsx)(n.li,{children:"W3C Extended Log"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The following compression methods are supported:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"ZIP"}),"\n",(0,s.jsx)(n.li,{children:"GZIP"}),"\n",(0,s.jsx)(n.li,{children:"ZSTD"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["By default, Flow automatically detects the file type and compression method.\nIf necessary, you can specify the correct file type, compression, and other properties (CSV only) using the optional ",(0,s.jsx)(n.a,{href:"#advanced-parsing-dropbox-files",children:"parser configuration"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"To use this connector, make sure you have an active Dropbox account. Authentication is handled using OAuth2 in the Flow web app."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Note:"})," This connector is designed for files located in a specific Dropbox folder."]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["You configure the Dropbox source connector in the Flow web app.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Dropbox source connector."]}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/path"})})}),(0,s.jsx)(n.td,{children:"Path"}),(0,s.jsxs)(n.td,{children:["The path to the Dropbox folder to read from. For example, ",(0,s.jsx)(n.code,{children:'"/my_folder"'}),"."]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/matchKeys"})}),(0,s.jsx)(n.td,{children:"Match Keys"}),(0,s.jsxs)(n.td,{children:["Filter applied to all object keys under the prefix. If provided, only objects whose absolute path matches this regex will be read. For example, you can use ",(0,s.jsx)(n.code,{children:".*\\.json"})," to only capture JSON files."]}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials"})})}),(0,s.jsx)(n.td,{children:"Credentials"}),(0,s.jsx)(n.td,{children:"OAuth2 credentials for Dropbox. These are automatically handled by the Web UI."}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced"})}),(0,s.jsx)(n.td,{children:"Advanced"}),(0,s.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/ascendingKeys"})}),(0,s.jsx)(n.td,{children:"Ascending Keys"}),(0,s.jsx)(n.td,{children:"Improve sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors."}),(0,s.jsx)(n.td,{children:"boolean"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/parser"})}),(0,s.jsx)(n.td,{children:"Parser Configuration"}),(0,s.jsx)(n.td,{children:"Configures how files are parsed (optional, see below)"}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/parser/compression"})}),(0,s.jsx)(n.td,{children:"Compression"}),(0,s.jsx)(n.td,{children:"Determines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically."}),(0,s.jsx)(n.td,{children:"null, string"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"null"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/parser/format"})}),(0,s.jsx)(n.td,{children:"Format"}),(0,s.jsx)(n.td,{children:"Determines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available."}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:'{"type":"auto"}'})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/parser/format/type"})}),(0,s.jsx)(n.td,{children:"Type"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/stream"})})}),(0,s.jsx)(n.td,{children:"Path"}),(0,s.jsx)(n.td,{children:"The path to the Dropbox folder."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-http-file:dev\n config:\n path: "/my_folder"\n matchKeys: ".*\\.json"\n bindings:\n - resource:\n stream: /my_folder\n target: ${PREFIX}/${COLLECTION_NAME}\n\n'})}),"\n",(0,s.jsx)(n.h3,{id:"advanced-parsing-dropbox-files",children:"Advanced: Parsing Dropbox files"}),"\n",(0,s.jsx)(n.p,{children:"Dropbox folders can contain a variety of file types.\nFor each file type, Flow must parse\nand translate data into collections with defined fields and JSON schemas."}),"\n",(0,s.jsx)(n.p,{children:"By default, the parser will automatically detect the type and shape of the data in the Dropbox folder,\nso you won't need to change the parser configuration for most captures."}),"\n",(0,s.jsx)(n.p,{children:"However, the automatic detection may be incorrect in some cases.\nTo fix or prevent this, you can provide explicit information in the parser configuration,\nwhich is part of the endpoint configuration for this connector."}),"\n",(0,s.jsx)(n.p,{children:"The parser configuration includes:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Compression"}),": Specify how the data is compressed.\nIf no compression type is specified, the connector will try to determine the compression type automatically.\nOptions are:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"zip"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"gzip"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"zstd"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"none"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Format"}),": Specify the data format, which determines how it will be parsed.\nIf no file type is specified, the connector will try to determine the file type automatically\nOptions are:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Avro"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"CSV"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"JSON"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Protobuf"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"W3C Extended Log"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"csv-configuration",children:"CSV configuration"}),"\n",(0,s.jsx)(n.p,{children:"CSV files include several additional properties that are important to the parser.\nIn most cases, Flow is able to automatically determine the correct values,\nbut you may need to specify for unusual datasets. These properties are:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Delimiter"}),". Options are:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Comma (",(0,s.jsx)(n.code,{children:'","'}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Pipe (",(0,s.jsx)(n.code,{children:'"|"'}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Space (",(0,s.jsx)(n.code,{children:'"0x20"'}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Semicolon (",(0,s.jsx)(n.code,{children:'";"'}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Tab (",(0,s.jsx)(n.code,{children:'"0x09"'}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Vertical tab (",(0,s.jsx)(n.code,{children:'"0x0B"'}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Unit separator (",(0,s.jsx)(n.code,{children:'"0x1F"'}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["SOH (",(0,s.jsx)(n.code,{children:'"0x01"'}),")"]}),"\n",(0,s.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Encoding"})," type, specified by its ",(0,s.jsx)(n.a,{href:"https://encoding.spec.whatwg.org/#names-and-labels",children:"WHATWG label"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Optionally, an ",(0,s.jsx)(n.strong,{children:"Error threshold"}),", as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Escape characters"}),". Options are:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Backslash (",(0,s.jsx)(n.code,{children:'"\\\\"'}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Disable escapes (",(0,s.jsx)(n.code,{children:'""'}),")"]}),"\n",(0,s.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Optionally, a list of column ",(0,s.jsx)(n.strong,{children:"Headers"}),", if not already included in the first row of the CSV file."]}),"\n",(0,s.jsx)(n.p,{children:"If any headers are provided, it is assumed that the provided list of headers is complete and authoritative.\nThe first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Line ending"})," values"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["CRLF (",(0,s.jsx)(n.code,{children:'"\\\\r\\\\n"'}),") (Windows)"]}),"\n",(0,s.jsxs)(n.li,{children:["CR (",(0,s.jsx)(n.code,{children:'"\\\\r"'}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["LF (",(0,s.jsx)(n.code,{children:'"\\\\n"'}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Record Separator (",(0,s.jsx)(n.code,{children:'"0x1E"'}),")"]}),"\n",(0,s.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Quote character"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Double Quote (",(0,s.jsx)(n.code,{children:'"\\""'}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Single Quote (",(0,s.jsx)(n.code,{children:'"'}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Disable Quoting (",(0,s.jsx)(n.code,{children:'""'}),")"]}),"\n",(0,s.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n"]})]})}function a(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>c});var s=r(96540);const i={},t=s.createContext(i);function o(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/2376.9cdcd224.js b/pr-preview/pr-1594/assets/js/2376.9cdcd224.js deleted file mode 100644 index a4ecb8b124..0000000000 --- a/pr-preview/pr-1594/assets/js/2376.9cdcd224.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2376],{42376:(t,e,n)=>{n.d(e,{diagram:()=>O});var i=n(99702),s=n(26312),r=n(3219),a=n(78041),o=n(75263),l=(n(74353),n(16750),n(42838),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[6,8,10,11,12,14,16,17,20,21],n=[1,9],i=[1,10],s=[1,11],r=[1,12],a=[1,13],o=[1,16],l=[1,17],c={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.getCommonDb().setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 9:this.$=r[o].trim(),i.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=r[o].trim(),i.getCommonDb().setAccDescription(this.$);break;case 12:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 15:i.addTask(r[o],0,""),this.$=r[o];break;case 16:i.addEvent(r[o].substr(2)),this.$=r[o]}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:i,14:s,16:r,17:a,18:14,19:15,20:o,21:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:n,12:i,14:s,16:r,17:a,18:14,19:15,20:o,21:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",l=0,c=0,h=r.slice.call(arguments,1),d=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var y=d.yylloc;r.push(y);var g=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,_,b,x,k,v,w,S,$={};;){if(m=n[n.length-1],this.defaultActions[m]?_=this.defaultActions[m]:(null==f&&(S=void 0,"number"!=typeof(S=i.pop()||d.lex()||1)&&(S instanceof Array&&(S=(i=S).pop()),S=e.symbols_[S]||S),f=S),_=a[m]&&a[m][f]),void 0===_||!_.length||!_[0]){var E="";for(x in w=[],a[m])this.terminals_[x]&&x>2&&w.push("'"+this.terminals_[x]+"'");E=d.showPosition?"Parse error on line "+(l+1)+":\n"+d.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(E,{text:d.match,token:this.terminals_[f]||f,line:d.yylineno,loc:y,expected:w})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+f);switch(_[0]){case 1:n.push(f),s.push(d.yytext),r.push(d.yylloc),n.push(_[1]),f=null,c=d.yyleng,o=d.yytext,l=d.yylineno,y=d.yylloc;break;case 2:if(k=this.productions_[_[1]][1],$.$=s[s.length-k],$._$={first_line:r[r.length-(k||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(k||1)].first_column,last_column:r[r.length-1].last_column},g&&($._$.range=[r[r.length-(k||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[o,c,l,u.yy,_[1],s,r].concat(h))))return b;k&&(n=n.slice(0,-1*k*2),s=s.slice(0,-1*k),r=r.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),s.push($.$),r.push($._$),v=a[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},h={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;re[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:case 1:case 3:case 4:break;case 2:return 10;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};function d(){this.yy={}}return c.lexer=h,d.prototype=c,c.Parser=d,new d}());l.parser=l;const c=l;let h="",d=0;const u=[],p=[],y=[],g=()=>i.L,f=function(){u.length=0,p.length=0,h="",y.length=0,(0,i.v)()},m=function(t){h=t,u.push(t)},_=function(){return u},b=function(){let t=w();let e=0;for(;!t&&e<100;)t=w(),e++;return p.push(...y),p},x=function(t,e,n){const i={id:d++,section:h,type:h,task:t,score:e||0,events:n?[n]:[]};y.push(i)},k=function(t){y.find((t=>t.id===d-1)).events.push(t)},v=function(t){const e={section:h,type:h,description:t,task:t,classes:[]};p.push(e)},w=function(){let t=!0;for(const[e,n]of y.entries())y[e].processed,t=t&&n.processed;return t},S={clear:f,getCommonDb:g,addSection:m,getSections:_,getTasks:b,addTask:x,addTaskOrg:v,addEvent:k},$=Object.freeze(Object.defineProperty({__proto__:null,addEvent:k,addSection:m,addTask:x,addTaskOrg:v,clear:f,default:S,getCommonDb:g,getSections:_,getTasks:b},Symbol.toStringTag,{value:"Module"}));!function(){function t(t,e,n,s,r,a,o,l){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",l).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,l,c){const{taskFontSize:h,taskFontFamily:d}=l,u=t.split(//gi);for(let p=0;p)/).reverse(),r=[],a=n.attr("y"),o=parseFloat(n.attr("dy")),l=n.text(null).append("tspan").attr("x",0).attr("y",a).attr("dy",o+"em");for(let s=0;se||"
      "===t)&&(r.pop(),l.text(r.join(" ").trim()),r="
      "===t?[""]:[t],l=n.append("tspan").attr("x",0).attr("y",a).attr("dy","1.1em").text(t))}))}const I=function(t,e,n){t.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("d",`M0 ${e.height-5} v${10-e.height} q0,-5 5,-5 h${e.width-10} q5,0 5,5 v${e.height-5} H0 Z`),t.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},L=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},T=function(t,e,n,i){const s=n%12-1,r=t.append("g");e.section=s,r.attr("class",(e.class?e.class+" ":"")+"timeline-node section-"+s);const a=r.append("g"),o=r.append("g"),l=o.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(E,e.width).node().getBBox(),c=i.fontSize&&i.fontSize.replace?i.fontSize.replace("px",""):i.fontSize;return e.height=l.height+1.1*c*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,o.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),I(a,e,s),e},A=function(t,e,n){const i=t.append("g"),s=i.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(E,e.width).node().getBBox(),r=n.fontSize&&n.fontSize.replace?n.fontSize.replace("px",""):n.fontSize;return i.remove(),s.height+1.1*r*.5+e.padding},C=function(t,e,n,s,r,a,o,l,c,h,d){var u;for(const p of e){const e={descr:p.task,section:n,number:n,width:150,padding:20,maxHeight:a};i.l.debug("taskNode",e);const l=t.append("g").attr("class","taskWrapper"),y=T(l,e,n,o).height;if(i.l.debug("taskHeight after draw",y),l.attr("transform",`translate(${s}, ${r})`),a=Math.max(a,y),p.events){const e=t.append("g").attr("class","lineWrapper");let i=a;r+=100,i+=M(t,p.events,n,s,r,o),r-=100,e.append("line").attr("x1",s+95).attr("y1",r+a).attr("x2",s+95).attr("y2",r+a+(d?a:h)+c+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}s+=200,d&&!(null==(u=o.timeline)?void 0:u.disableMulticolor)&&n++}r-=10},M=function(t,e,n,s,r,a){let o=0;const l=r;r+=100;for(const c of e){const e={descr:c,section:n,number:n,width:150,padding:20,maxHeight:50};i.l.debug("eventNode",e);const l=t.append("g").attr("class","eventWrapper"),h=T(l,e,n,a).height;o+=h,l.attr("transform",`translate(${s}, ${r})`),r=r+10+h}return r=l,o},O={db:$,renderer:{setConf:()=>{},draw:function(t,e,n,r){var a,o;const l=(0,i.c)(),c=l.leftMargin??50;i.l.debug("timeline",r.db);const h=l.securityLevel;let d;"sandbox"===h&&(d=(0,s.Ltv)("#i"+e));const u=("sandbox"===h?(0,s.Ltv)(d.nodes()[0].contentDocument.body):(0,s.Ltv)("body")).select("#"+e);u.append("g");const p=r.db.getTasks(),y=r.db.getCommonDb().getDiagramTitle();i.l.debug("task",p),L(u);const g=r.db.getSections();i.l.debug("sections",g);let f=0,m=0,_=0,b=0,x=50+c,k=50;b=50;let v=0,w=!0;g.forEach((function(t){const e=A(u,{number:v,descr:t,section:v,width:150,padding:20,maxHeight:f},l);i.l.debug("sectionHeight before draw",e),f=Math.max(f,e+20)}));let S=0,$=0;i.l.debug("tasks.length",p.length);for(const[s,I]of p.entries()){const t={number:s,descr:I,section:I.section,width:150,padding:20,maxHeight:m},e=A(u,t,l);i.l.debug("taskHeight before draw",e),m=Math.max(m,e+20),S=Math.max(S,I.events.length);let n=0;for(let i=0;i0?g.forEach((t=>{const e=p.filter((e=>e.section===t)),n={number:v,descr:t,section:v,width:200*Math.max(e.length,1)-50,padding:20,maxHeight:f};i.l.debug("sectionNode",n);const s=u.append("g"),r=T(s,n,v,l);i.l.debug("sectionNode output",r),s.attr("transform",`translate(${x}, 50)`),k+=f+50,e.length>0&&C(u,e,v,x,k,m,l,S,$,f,!1),x+=200*Math.max(e.length,1),k=50,v++})):(w=!1,C(u,p,v,x,k,m,l,S,$,f,!0));const E=u.node().getBBox();i.l.debug("bounds",E),y&&u.append("text").text(y).attr("x",E.width/2-c).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),_=w?f+m+150:m+100;u.append("g").attr("class","lineWrapper").append("line").attr("x1",c).attr("y1",_).attr("x2",E.width+3*c).attr("y2",_).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),(0,i.o)(void 0,u,(null==(a=l.timeline)?void 0:a.padding)??50,(null==(o=l.timeline)?void 0:o.useMaxWidth)??!1)}},parser:c,styles:t=>`\n .edge {\n stroke-width: 3;\n }\n ${(t=>{let e="";for(let n=0;n{n.d(t,{H:()=>l});var r=n(82933);function l(e,t){var n=e.append("foreignObject").attr("width","100000"),l=n.append("xhtml:div");l.attr("xmlns","http://www.w3.org/1999/xhtml");var o=t.label;switch(typeof o){case"function":l.insert(o);break;case"object":l.insert((function(){return o}));break;default:l.html(o)}r.AV(l,t.labelStyle),l.style("display","inline-block"),l.style("white-space","nowrap");var a=l.node().getBoundingClientRect();return n.attr("width",a.width).attr("height",a.height),n}},82933:(e,t,n)=>{n.d(t,{AV:()=>c,De:()=>o,c$:()=>p,gh:()=>a,nh:()=>d});var r=n(34963),l=n(89610);function o(e,t){return!!e.children(t).length}function a(e){return i(e.v)+":"+i(e.w)+":"+i(e.name)}var s=/:/g;function i(e){return e?String(e).replace(s,"\\:"):""}function c(e,t){t&&e.attr("style",t)}function d(e,t,n){t&&e.attr("class",t).attr("class",n+" "+e.attr("class"))}function p(e,t){var n=t.graph();if(r.A(n)){var o=n.transition;if(l.A(o))return o(e)}return e}},75937:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(72453),l=n(74886);const o=(e,t)=>r.A.lang.round(l.A.parse(e)[t])},22453:(e,t,n)=>{n.d(t,{diagram:()=>a});var r=n(32548),l=n(65382),o=n(99702);n(26312),n(697),n(21176),n(14075),n(74353),n(16750),n(42838);const a={parser:r.p,db:r.f,renderer:l.f,styles:l.a,init:e=>{e.flowchart||(e.flowchart={}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,(0,o.p)({flowchart:{arrowMarkerAbsolute:e.arrowMarkerAbsolute}}),l.f.setConf(e.flowchart),r.f.clear(),r.f.setGen("gen-2")}}},65382:(e,t,n)=>{n.d(t,{a:()=>f,f:()=>w});var r=n(697),l=n(26312),o=n(99702),a=n(35364),s=n(10646),i=n(75937),c=n(25582);const d={},p=async function(e,t,n,r,l,a){const i=r.select(`[id="${n}"]`),c=Object.keys(e);for(const d of c){const n=e[d];let r="default";n.classes.length>0&&(r=n.classes.join(" ")),r+=" flowchart-label";const c=(0,o.k)(n.styles);let p,b=void 0!==n.text?n.text:n.id;if(o.l.info("vertex",n,n.labelType),"markdown"===n.labelType)o.l.info("vertex",n,n.labelType);else if((0,o.m)((0,o.c)().flowchart.htmlLabels)){const e={label:b};p=(0,s.H)(i,e).node(),p.parentNode.removeChild(p)}else{const e=l.createElementNS("http://www.w3.org/2000/svg","text");e.setAttribute("style",c.labelStyle.replace("color:","fill:"));const t=b.split(o.e.lineBreakRegex);for(const n of t){const t=l.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","1"),t.textContent=n,e.appendChild(t)}p=e}let w=0,f="";switch(n.type){case"round":w=5,f="rect";break;case"square":case"group":default:f="rect";break;case"diamond":f="question";break;case"hexagon":f="hexagon";break;case"odd":case"odd_right":f="rect_left_inv_arrow";break;case"lean_right":f="lean_right";break;case"lean_left":f="lean_left";break;case"trapezoid":f="trapezoid";break;case"inv_trapezoid":f="inv_trapezoid";break;case"circle":f="circle";break;case"ellipse":f="ellipse";break;case"stadium":f="stadium";break;case"subroutine":f="subroutine";break;case"cylinder":f="cylinder";break;case"doublecircle":f="doublecircle"}const h=await(0,o.r)(b,(0,o.c)());t.setNode(n.id,{labelStyle:c.labelStyle,shape:f,labelText:h,labelType:n.labelType,rx:w,ry:w,class:r,style:c.style,id:n.id,link:n.link,linkTarget:n.linkTarget,tooltip:a.db.getTooltip(n.id)||"",domId:a.db.lookUpDomId(n.id),haveCallback:n.haveCallback,width:"group"===n.type?500:void 0,dir:n.dir,type:n.type,props:n.props,padding:(0,o.c)().flowchart.padding}),o.l.info("setNode",{labelStyle:c.labelStyle,labelType:n.labelType,shape:f,labelText:h,rx:w,ry:w,class:r,style:c.style,id:n.id,domId:a.db.lookUpDomId(n.id),width:"group"===n.type?500:void 0,type:n.type,dir:n.dir,props:n.props,padding:(0,o.c)().flowchart.padding})}},b=async function(e,t,n){o.l.info("abc78 edges = ",e);let r,a,s=0,i={};if(void 0!==e.defaultStyle){const t=(0,o.k)(e.defaultStyle);r=t.style,a=t.labelStyle}for(const c of e){s++;const n="L-"+c.start+"-"+c.end;void 0===i[n]?(i[n]=0,o.l.info("abc78 new entry",n,i[n])):(i[n]++,o.l.info("abc78 new entry",n,i[n]));let p=n+"-"+i[n];o.l.info("abc78 new link id to be used is",n,p,i[n]);const b="LS-"+c.start,w="LE-"+c.end,f={style:"",labelStyle:""};switch(f.minlen=c.length||1,"arrow_open"===c.type?f.arrowhead="none":f.arrowhead="normal",f.arrowTypeStart="arrow_open",f.arrowTypeEnd="arrow_open",c.type){case"double_arrow_cross":f.arrowTypeStart="arrow_cross";case"arrow_cross":f.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":f.arrowTypeStart="arrow_point";case"arrow_point":f.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":f.arrowTypeStart="arrow_circle";case"arrow_circle":f.arrowTypeEnd="arrow_circle"}let h="",u="";switch(c.stroke){case"normal":h="fill:none;",void 0!==r&&(h=r),void 0!==a&&(u=a),f.thickness="normal",f.pattern="solid";break;case"dotted":f.thickness="normal",f.pattern="dotted",f.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":f.thickness="thick",f.pattern="solid",f.style="stroke-width: 3.5px;fill:none;";break;case"invisible":f.thickness="invisible",f.pattern="solid",f.style="stroke-width: 0;fill:none;"}if(void 0!==c.style){const e=(0,o.k)(c.style);h=e.style,u=e.labelStyle}f.style=f.style+=h,f.labelStyle=f.labelStyle+=u,void 0!==c.interpolate?f.curve=(0,o.n)(c.interpolate,l.lUB):void 0!==e.defaultInterpolate?f.curve=(0,o.n)(e.defaultInterpolate,l.lUB):f.curve=(0,o.n)(d.curve,l.lUB),void 0===c.text?void 0!==c.style&&(f.arrowheadStyle="fill: #333"):(f.arrowheadStyle="fill: #333",f.labelpos="c"),f.labelType=c.labelType,f.label=await(0,o.r)(c.text.replace(o.e.lineBreakRegex,"\n"),(0,o.c)()),void 0===c.style&&(f.style=f.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),f.labelStyle=f.labelStyle.replace("color:","fill:"),f.id=p,f.classes="flowchart-link "+b+" "+w,t.setEdge(c.start,c.end,f,s)}},w={setConf:function(e){const t=Object.keys(e);for(const n of t)d[n]=e[n]},addVertices:p,addEdges:b,getClasses:function(e,t){return t.db.getClasses()},draw:async function(e,t,n,s){o.l.info("Drawing flowchart");let i=s.db.getDirection();void 0===i&&(i="TD");const{securityLevel:c,flowchart:d}=(0,o.c)(),w=d.nodeSpacing||50,f=d.rankSpacing||50;let h;"sandbox"===c&&(h=(0,l.Ltv)("#i"+t));const u="sandbox"===c?(0,l.Ltv)(h.nodes()[0].contentDocument.body):(0,l.Ltv)("body"),g="sandbox"===c?h.nodes()[0].contentDocument:document,y=new r.T({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:w,ranksep:f,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let k;const x=s.db.getSubGraphs();o.l.info("Subgraphs - ",x);for(let r=x.length-1;r>=0;r--)k=x[r],o.l.info("Subgraph - ",k),s.db.addVertex(k.id,{text:k.title,type:k.labelType},"group",void 0,k.classes,k.dir);const v=s.db.getVertices(),m=s.db.getEdges();o.l.info("Edges",m);let S=0;for(S=x.length-1;S>=0;S--){k=x[S],(0,l.Ubm)("cluster").append("text");for(let e=0;e`.label {\n font-family: ${e.fontFamily};\n color: ${e.nodeTextColor||e.textColor};\n }\n .cluster-label text {\n fill: ${e.titleColor};\n }\n .cluster-label span,p {\n color: ${e.titleColor};\n }\n\n .label text,span,p {\n fill: ${e.nodeTextColor||e.textColor};\n color: ${e.nodeTextColor||e.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .katex path {\n fill: #000;\n stroke: #000;\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${e.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${e.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${e.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${e.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${e.edgeLabelBackground};\n fill: ${e.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${((e,t)=>{const n=i.A,r=n(e,"r"),l=n(e,"g"),o=n(e,"b");return c.A(r,l,o,t)})(e.edgeLabelBackground,.5)};\n // background-color: \n }\n\n .cluster rect {\n fill: ${e.clusterBkg};\n stroke: ${e.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${e.titleColor};\n }\n\n .cluster span,p {\n color: ${e.titleColor};\n }\n /* .cluster div {\n color: ${e.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${e.fontFamily};\n font-size: 12px;\n background: ${e.tertiaryColor};\n border: 1px solid ${e.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n }\n`}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/2548.3eaa016b.js b/pr-preview/pr-1594/assets/js/2548.3eaa016b.js deleted file mode 100644 index a3fca943ce..0000000000 --- a/pr-preview/pr-1594/assets/js/2548.3eaa016b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2548],{32548:(t,e,s)=>{s.d(e,{d:()=>st,f:()=>et,p:()=>r});var u=s(26312),i=s(99702),n=function(){var t=function(t,e,s,u){for(s=s||{},u=t.length;u--;s[t[u]]=e);return s},e=[1,4],s=[1,3],u=[1,5],i=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],n=[2,2],r=[1,13],a=[1,14],c=[1,15],o=[1,16],l=[1,23],h=[1,25],A=[1,26],d=[1,27],p=[1,49],y=[1,48],E=[1,29],f=[1,30],g=[1,31],k=[1,32],D=[1,33],b=[1,44],F=[1,46],T=[1,42],C=[1,47],_=[1,43],B=[1,50],S=[1,45],m=[1,51],x=[1,52],v=[1,34],L=[1,35],I=[1,36],R=[1,37],$=[1,57],N=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],O=[1,61],w=[1,60],P=[1,62],U=[8,9,11,73,75],V=[1,88],G=[1,93],M=[1,92],K=[1,89],Y=[1,85],j=[1,91],X=[1,87],z=[1,94],H=[1,90],W=[1,95],Q=[1,86],q=[8,9,10,11,73,75],Z=[8,9,10,11,44,73,75],J=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],tt=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],et=[42,58,86,99,102,103,106,108,111,112,113],st=[1,121],ut=[1,120],it=[1,128],nt=[1,142],rt=[1,143],at=[1,144],ct=[1,145],ot=[1,130],lt=[1,132],ht=[1,136],At=[1,137],dt=[1,138],pt=[1,139],yt=[1,140],Et=[1,141],ft=[1,146],gt=[1,147],kt=[1,126],Dt=[1,127],bt=[1,134],Ft=[1,129],Tt=[1,133],Ct=[1,131],_t=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Bt=[1,149],St=[8,9,11],mt=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],xt=[1,169],vt=[1,165],Lt=[1,166],It=[1,170],Rt=[1,167],$t=[1,168],Nt=[75,113,116],Ot=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],wt=[10,103],Pt=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],Ut=[1,235],Vt=[1,233],Gt=[1,237],Mt=[1,231],Kt=[1,232],Yt=[1,234],jt=[1,236],Xt=[1,238],zt=[1,255],Ht=[8,9,11,103],Wt=[8,9,10,11,58,81,102,103,106,107,108,109],Qt={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(t,e,s,u,i,n,r){var a=n.length-1;switch(i){case 2:case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 3:(!Array.isArray(n[a])||n[a].length>0)&&n[a-1].push(n[a]),this.$=n[a-1];break;case 4:case 176:case 49:case 71:case 174:this.$=n[a];break;case 11:u.setDirection("TB"),this.$="TB";break;case 12:u.setDirection(n[a-1]),this.$=n[a-1];break;case 27:this.$=n[a-1].nodes;break;case 33:this.$=u.addSubGraph(n[a-6],n[a-1],n[a-4]);break;case 34:this.$=u.addSubGraph(n[a-3],n[a-1],n[a-3]);break;case 35:this.$=u.addSubGraph(void 0,n[a-1],void 0);break;case 37:this.$=n[a].trim(),u.setAccTitle(this.$);break;case 38:case 39:this.$=n[a].trim(),u.setAccDescription(this.$);break;case 43:u.addLink(n[a-2].stmt,n[a],n[a-1]),this.$={stmt:n[a],nodes:n[a].concat(n[a-2].nodes)};break;case 44:u.addLink(n[a-3].stmt,n[a-1],n[a-2]),this.$={stmt:n[a-1],nodes:n[a-1].concat(n[a-3].nodes)};break;case 45:this.$={stmt:n[a-1],nodes:n[a-1]};break;case 46:this.$={stmt:n[a],nodes:n[a]};break;case 47:case 121:case 123:this.$=[n[a]];break;case 48:this.$=n[a-4].concat(n[a]);break;case 50:this.$=n[a-2],u.setClass(n[a-2],n[a]);break;case 51:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"square");break;case 52:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"doublecircle");break;case 53:this.$=n[a-5],u.addVertex(n[a-5],n[a-2],"circle");break;case 54:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"ellipse");break;case 55:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"stadium");break;case 56:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"subroutine");break;case 57:this.$=n[a-7],u.addVertex(n[a-7],n[a-1],"rect",void 0,void 0,void 0,Object.fromEntries([[n[a-5],n[a-3]]]));break;case 58:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"cylinder");break;case 59:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"round");break;case 60:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"diamond");break;case 61:this.$=n[a-5],u.addVertex(n[a-5],n[a-2],"hexagon");break;case 62:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"odd");break;case 63:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"trapezoid");break;case 64:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"inv_trapezoid");break;case 65:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"lean_right");break;case 66:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"lean_left");break;case 67:this.$=n[a],u.addVertex(n[a]);break;case 68:n[a-1].text=n[a],this.$=n[a-1];break;case 69:case 70:n[a-2].text=n[a-1],this.$=n[a-2];break;case 72:var c=u.destructLink(n[a],n[a-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:n[a-1]};break;case 73:case 79:case 94:case 96:this.$={text:n[a],type:"text"};break;case 74:case 80:case 95:this.$={text:n[a-1].text+""+n[a],type:n[a-1].type};break;case 75:case 81:this.$={text:n[a],type:"string"};break;case 76:case 82:case 97:this.$={text:n[a],type:"markdown"};break;case 77:c=u.destructLink(n[a]);this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 78:this.$=n[a-1];break;case 98:this.$=n[a-4],u.addClass(n[a-2],n[a]);break;case 99:this.$=n[a-4],u.setClass(n[a-2],n[a]);break;case 100:case 108:this.$=n[a-1],u.setClickEvent(n[a-1],n[a]);break;case 101:case 109:this.$=n[a-3],u.setClickEvent(n[a-3],n[a-2]),u.setTooltip(n[a-3],n[a]);break;case 102:this.$=n[a-2],u.setClickEvent(n[a-2],n[a-1],n[a]);break;case 103:this.$=n[a-4],u.setClickEvent(n[a-4],n[a-3],n[a-2]),u.setTooltip(n[a-4],n[a]);break;case 104:this.$=n[a-2],u.setLink(n[a-2],n[a]);break;case 105:this.$=n[a-4],u.setLink(n[a-4],n[a-2]),u.setTooltip(n[a-4],n[a]);break;case 106:this.$=n[a-4],u.setLink(n[a-4],n[a-2],n[a]);break;case 107:this.$=n[a-6],u.setLink(n[a-6],n[a-4],n[a]),u.setTooltip(n[a-6],n[a-2]);break;case 110:this.$=n[a-1],u.setLink(n[a-1],n[a]);break;case 111:this.$=n[a-3],u.setLink(n[a-3],n[a-2]),u.setTooltip(n[a-3],n[a]);break;case 112:this.$=n[a-3],u.setLink(n[a-3],n[a-2],n[a]);break;case 113:this.$=n[a-5],u.setLink(n[a-5],n[a-4],n[a]),u.setTooltip(n[a-5],n[a-2]);break;case 114:this.$=n[a-4],u.addVertex(n[a-2],void 0,void 0,n[a]);break;case 115:this.$=n[a-4],u.updateLink([n[a-2]],n[a]);break;case 116:this.$=n[a-4],u.updateLink(n[a-2],n[a]);break;case 117:this.$=n[a-8],u.updateLinkInterpolate([n[a-6]],n[a-2]),u.updateLink([n[a-6]],n[a]);break;case 118:this.$=n[a-8],u.updateLinkInterpolate(n[a-6],n[a-2]),u.updateLink(n[a-6],n[a]);break;case 119:this.$=n[a-6],u.updateLinkInterpolate([n[a-4]],n[a]);break;case 120:this.$=n[a-6],u.updateLinkInterpolate(n[a-4],n[a]);break;case 122:case 124:n[a-2].push(n[a]),this.$=n[a-2];break;case 126:this.$=n[a-1]+n[a];break;case 175:case 177:this.$=n[a-1]+""+n[a];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,9:e,10:s,12:u},{1:[3]},t(i,n,{5:6}),{4:7,9:e,10:s,12:u},{4:8,9:e,10:s,12:u},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:$,15:53,18:56},t(N,[2,3]),t(N,[2,4]),t(N,[2,5]),t(N,[2,6]),t(N,[2,7]),t(N,[2,8]),{8:O,9:w,11:P,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:O,9:w,11:P,21:66},{8:O,9:w,11:P,21:67},{8:O,9:w,11:P,21:68},{8:O,9:w,11:P,21:69},{8:O,9:w,11:P,21:70},{8:O,9:w,10:[1,71],11:P,21:72},t(N,[2,36]),{35:[1,73]},{37:[1,74]},t(N,[2,39]),t(U,[2,46],{18:75,10:$}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:V,42:G,58:M,77:[1,83],86:K,92:[1,80],94:[1,81],98:82,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},t(N,[2,178]),t(N,[2,179]),t(N,[2,180]),t(N,[2,181]),t(q,[2,47]),t(q,[2,49],{44:[1,96]}),t(Z,[2,67],{110:109,29:[1,97],42:p,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:y,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:b,99:F,102:T,103:C,106:_,108:B,111:S,112:m,113:x}),t(J,[2,174]),t(J,[2,135]),t(J,[2,136]),t(J,[2,137]),t(J,[2,138]),t(J,[2,139]),t(J,[2,140]),t(J,[2,141]),t(J,[2,142]),t(J,[2,143]),t(J,[2,144]),t(J,[2,145]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,110]},t(tt,[2,26],{18:111,10:$}),t(N,[2,27]),{40:112,41:38,42:p,43:39,45:40,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},t(N,[2,40]),t(N,[2,41]),t(N,[2,42]),t(et,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:st,116:ut},t([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),t(N,[2,28]),t(N,[2,29]),t(N,[2,30]),t(N,[2,31]),t(N,[2,32]),{10:it,12:nt,14:rt,27:at,28:122,32:ct,42:ot,58:lt,73:ht,77:[1,124],78:[1,125],80:135,81:At,82:dt,83:pt,84:yt,85:Et,86:ft,87:gt,88:123,102:kt,106:Dt,108:bt,111:Ft,112:Tt,113:Ct},t(_t,n,{5:148}),t(N,[2,37]),t(N,[2,38]),t(U,[2,45],{42:Bt}),{42:p,45:150,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{99:[1,151],100:152,102:[1,153]},{42:p,45:154,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{42:p,45:155,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},t(St,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},t(St,[2,108],{117:160,10:[1,159],14:V,42:G,58:M,86:K,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q}),t(St,[2,110],{10:[1,161]}),t(mt,[2,176]),t(mt,[2,163]),t(mt,[2,164]),t(mt,[2,165]),t(mt,[2,166]),t(mt,[2,167]),t(mt,[2,168]),t(mt,[2,169]),t(mt,[2,170]),t(mt,[2,171]),t(mt,[2,172]),t(mt,[2,173]),{42:p,45:162,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{30:163,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:171,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:173,48:[1,172],65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:174,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:175,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:176,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{106:[1,177]},{30:178,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:179,63:[1,180],65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:181,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:182,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:183,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},t(J,[2,175]),t(i,[2,20]),t(tt,[2,25]),t(U,[2,43],{18:184,10:$}),t(et,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{75:[1,188],76:189,113:st,116:ut},t(Nt,[2,73]),t(Nt,[2,75]),t(Nt,[2,76]),t(Nt,[2,161]),t(Nt,[2,162]),{8:O,9:w,10:it,11:P,12:nt,14:rt,21:191,27:at,29:[1,190],32:ct,42:ot,58:lt,73:ht,80:135,81:At,82:dt,83:pt,84:yt,85:Et,86:ft,87:gt,88:192,102:kt,106:Dt,108:bt,111:Ft,112:Tt,113:Ct},t(Ot,[2,94]),t(Ot,[2,96]),t(Ot,[2,97]),t(Ot,[2,150]),t(Ot,[2,151]),t(Ot,[2,152]),t(Ot,[2,153]),t(Ot,[2,154]),t(Ot,[2,155]),t(Ot,[2,156]),t(Ot,[2,157]),t(Ot,[2,158]),t(Ot,[2,159]),t(Ot,[2,160]),t(Ot,[2,83]),t(Ot,[2,84]),t(Ot,[2,85]),t(Ot,[2,86]),t(Ot,[2,87]),t(Ot,[2,88]),t(Ot,[2,89]),t(Ot,[2,90]),t(Ot,[2,91]),t(Ot,[2,92]),t(Ot,[2,93]),{6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,32:[1,193],33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},{10:$,18:194},{10:[1,195],42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:109,111:S,112:m,113:x},{10:[1,196]},{10:[1,197],103:[1,198]},t(wt,[2,121]),{10:[1,199],42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:109,111:S,112:m,113:x},{10:[1,200],42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:109,111:S,112:m,113:x},{77:[1,201]},t(St,[2,102],{10:[1,202]}),t(St,[2,104],{10:[1,203]}),{77:[1,204]},t(mt,[2,177]),{77:[1,205],95:[1,206]},t(q,[2,50],{110:109,42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,111:S,112:m,113:x}),{31:[1,207],65:xt,79:208,113:It,114:Rt,115:$t},t(Pt,[2,79]),t(Pt,[2,81]),t(Pt,[2,82]),t(Pt,[2,146]),t(Pt,[2,147]),t(Pt,[2,148]),t(Pt,[2,149]),{47:[1,209],65:xt,79:208,113:It,114:Rt,115:$t},{30:210,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{49:[1,211],65:xt,79:208,113:It,114:Rt,115:$t},{51:[1,212],65:xt,79:208,113:It,114:Rt,115:$t},{53:[1,213],65:xt,79:208,113:It,114:Rt,115:$t},{55:[1,214],65:xt,79:208,113:It,114:Rt,115:$t},{58:[1,215]},{62:[1,216],65:xt,79:208,113:It,114:Rt,115:$t},{64:[1,217],65:xt,79:208,113:It,114:Rt,115:$t},{30:218,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{31:[1,219],65:xt,79:208,113:It,114:Rt,115:$t},{65:xt,67:[1,220],69:[1,221],79:208,113:It,114:Rt,115:$t},{65:xt,67:[1,223],69:[1,222],79:208,113:It,114:Rt,115:$t},t(U,[2,44],{42:Bt}),t(et,[2,70]),t(et,[2,69]),{60:[1,224],65:xt,79:208,113:It,114:Rt,115:$t},t(et,[2,72]),t(Nt,[2,74]),{30:225,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},t(_t,n,{5:226}),t(Ot,[2,95]),t(N,[2,35]),{41:227,42:p,43:39,45:40,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{10:Ut,58:Vt,81:Gt,89:228,102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:239,101:[1,240],102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:241,101:[1,242],102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{102:[1,243]},{10:Ut,58:Vt,81:Gt,89:244,102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{42:p,45:245,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},t(St,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},t(St,[2,109]),t(St,[2,111],{10:[1,249]}),t(St,[2,112]),t(Z,[2,51]),t(Pt,[2,80]),t(Z,[2,52]),{49:[1,250],65:xt,79:208,113:It,114:Rt,115:$t},t(Z,[2,59]),t(Z,[2,54]),t(Z,[2,55]),t(Z,[2,56]),{106:[1,251]},t(Z,[2,58]),t(Z,[2,60]),{64:[1,252],65:xt,79:208,113:It,114:Rt,115:$t},t(Z,[2,62]),t(Z,[2,63]),t(Z,[2,65]),t(Z,[2,64]),t(Z,[2,66]),t([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:xt,79:208,113:It,114:Rt,115:$t},{6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,32:[1,254],33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},t(q,[2,48]),t(St,[2,114],{103:zt}),t(Ht,[2,123],{105:256,10:Ut,58:Vt,81:Gt,102:Mt,106:Kt,107:Yt,108:jt,109:Xt}),t(Wt,[2,125]),t(Wt,[2,127]),t(Wt,[2,128]),t(Wt,[2,129]),t(Wt,[2,130]),t(Wt,[2,131]),t(Wt,[2,132]),t(Wt,[2,133]),t(Wt,[2,134]),t(St,[2,115],{103:zt}),{10:[1,257]},t(St,[2,116],{103:zt}),{10:[1,258]},t(wt,[2,122]),t(St,[2,98],{103:zt}),t(St,[2,99],{110:109,42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,111:S,112:m,113:x}),t(St,[2,103]),t(St,[2,105],{10:[1,259]}),t(St,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:O,9:w,11:P,21:264},t(N,[2,34]),{10:Ut,58:Vt,81:Gt,102:Mt,104:265,105:230,106:Kt,107:Yt,108:jt,109:Xt},t(Wt,[2,126]),{14:V,42:G,58:M,86:K,98:266,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},{14:V,42:G,58:M,86:K,98:267,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},{95:[1,268]},t(St,[2,113]),t(Z,[2,53]),{30:269,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},t(Z,[2,61]),t(_t,n,{5:270}),t(Ht,[2,124],{105:256,10:Ut,58:Vt,81:Gt,102:Mt,106:Kt,107:Yt,108:jt,109:Xt}),t(St,[2,119],{117:160,10:[1,271],14:V,42:G,58:M,86:K,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q}),t(St,[2,120],{117:160,10:[1,272],14:V,42:G,58:M,86:K,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q}),t(St,[2,107]),{31:[1,273],65:xt,79:208,113:It,114:Rt,115:$t},{6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,32:[1,274],33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},{10:Ut,58:Vt,81:Gt,89:275,102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:276,102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},t(Z,[2,57]),t(N,[2,33]),t(St,[2,117],{103:zt}),t(St,[2,118],{103:zt})],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],u=[],i=[null],n=[],r=this.table,a="",c=0,o=0,l=n.slice.call(arguments,1),h=Object.create(this.lexer),A={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(A.yy[d]=this.yy[d]);h.setInput(t,A.yy),A.yy.lexer=h,A.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;n.push(p);var y=h.options&&h.options.ranges;"function"==typeof A.yy.parseError?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,f,g,k,D,b,F,T,C,_={};;){if(f=s[s.length-1],this.defaultActions[f]?g=this.defaultActions[f]:(null==E&&(C=void 0,"number"!=typeof(C=u.pop()||h.lex()||1)&&(C instanceof Array&&(C=(u=C).pop()),C=e.symbols_[C]||C),E=C),g=r[f]&&r[f][E]),void 0===g||!g.length||!g[0]){var B="";for(D in T=[],r[f])this.terminals_[D]&&D>2&&T.push("'"+this.terminals_[D]+"'");B=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(B,{text:h.match,token:this.terminals_[E]||E,line:h.yylineno,loc:p,expected:T})}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+f+", token: "+E);switch(g[0]){case 1:s.push(E),i.push(h.yytext),n.push(h.yylloc),s.push(g[1]),E=null,o=h.yyleng,a=h.yytext,c=h.yylineno,p=h.yylloc;break;case 2:if(b=this.productions_[g[1]][1],_.$=i[i.length-b],_._$={first_line:n[n.length-(b||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(b||1)].first_column,last_column:n[n.length-1].last_column},y&&(_._$.range=[n[n.length-(b||1)].range[0],n[n.length-1].range[1]]),void 0!==(k=this.performAction.apply(_,[a,o,c,A.yy,g[1],i,n].concat(l))))return k;b&&(s=s.slice(0,-1*b*2),i=i.slice(0,-1*b),n=n.slice(0,-1*b)),s.push(this.productions_[g[1]][0]),i.push(_.$),n.push(_._$),F=r[s[s.length-2]][s[s.length-1]],s.push(F);break;case 3:return!0}}return!0}},qt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===u.length?this.yylloc.first_column:0)+u[u.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var s,u,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(u=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=u.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:u?u[u.length-1].length-u[u.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var n in i)this[n]=i[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,u;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),n=0;ne[0].length)){if(e=s,u=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,i[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[u]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,s,u){switch(s){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:case 8:case 11:case 14:case 17:case 27:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:this.begin("callbackname");break;case 9:this.popState(),this.begin("callbackargs");break;case 10:return 92;case 12:return 93;case 13:return"MD_STR";case 15:this.begin("md_string");break;case 16:return"STR";case 18:this.pushState("string");break;case 19:return 81;case 20:return 99;case 21:return 82;case 22:return 101;case 23:return 83;case 24:return 84;case 25:return 94;case 26:this.begin("click");break;case 28:return 85;case 29:case 30:case 31:return t.lex.firstGraph()&&this.begin("dir"),12;case 32:return 27;case 33:return 32;case 34:case 35:case 36:case 37:return 95;case 38:return this.popState(),13;case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 48:return this.popState(),14;case 49:return 118;case 50:return 119;case 51:return 120;case 52:return 121;case 53:return 102;case 54:case 95:return 108;case 55:return 44;case 56:return 58;case 57:case 96:return 42;case 58:return 8;case 59:return 103;case 60:case 94:return 112;case 61:case 64:case 67:return this.popState(),75;case 62:return this.pushState("edgeText"),73;case 63:case 66:case 69:return 116;case 65:return this.pushState("thickEdgeText"),73;case 68:return this.pushState("dottedEdgeText"),73;case 70:return 75;case 71:return this.popState(),51;case 72:case 108:return"TEXT";case 73:return this.pushState("ellipseText"),50;case 74:return this.popState(),53;case 75:return this.pushState("text"),52;case 76:return this.popState(),55;case 77:return this.pushState("text"),54;case 78:return 56;case 79:return this.pushState("text"),65;case 80:return this.popState(),62;case 81:return this.pushState("text"),61;case 82:return this.popState(),47;case 83:return this.pushState("text"),46;case 84:return this.popState(),67;case 85:return this.popState(),69;case 86:return 114;case 87:return this.pushState("trapText"),66;case 88:return this.pushState("trapText"),68;case 89:return 115;case 90:return 65;case 91:return 87;case 92:return"SEP";case 93:return 86;case 97:return 106;case 98:return 111;case 99:return 113;case 100:return this.popState(),60;case 101:return this.pushState("text"),60;case 102:return this.popState(),49;case 103:return this.pushState("text"),48;case 104:return this.popState(),31;case 105:return this.pushState("text"),29;case 106:return this.popState(),64;case 107:return this.pushState("text"),63;case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{callbackargs:{rules:[11,12,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},callbackname:{rules:[8,9,10,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},href:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},click:{rules:[15,18,27,28,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dottedEdgeText:{rules:[15,18,67,69,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},thickEdgeText:{rules:[15,18,64,66,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},edgeText:{rules:[15,18,61,63,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},trapText:{rules:[15,18,70,73,75,77,81,83,84,85,86,87,88,101,103,105,107],inclusive:!1},ellipseText:{rules:[15,18,70,71,72,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},text:{rules:[15,18,70,73,74,75,76,77,80,81,82,83,87,88,100,101,102,103,104,105,106,107,108],inclusive:!1},vertex:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dir:{rules:[15,18,38,39,40,41,42,43,44,45,46,47,48,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr_multiline:{rules:[5,6,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr:{rules:[3,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_title:{rules:[1,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},md_string:{rules:[13,14,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},string:{rules:[15,16,17,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},INITIAL:{rules:[0,2,4,7,15,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,70,73,75,77,78,79,81,83,87,88,89,90,91,92,93,94,95,96,97,98,99,101,103,105,107,109,110,111,112],inclusive:!0}}};function Zt(){this.yy={}}return Qt.lexer=qt,Zt.prototype=Qt,Qt.Parser=Zt,new Zt}();n.parser=n;const r=n;let a,c,o=0,l=(0,i.c)(),h={},A=[],d={},p=[],y={},E={},f=0,g=!0,k=[];const D=t=>i.e.sanitizeText(t,l),b=function(t){const e=Object.keys(h);for(const s of e)if(h[s].id===t)return h[s].domId;return t},F=function(t,e,s,u,n,r,a={}){let c,A=t;void 0!==A&&0!==A.trim().length&&(void 0===h[A]&&(h[A]={id:A,labelType:"text",domId:"flowchart-"+A+"-"+o,styles:[],classes:[]}),o++,void 0!==e?(l=(0,i.c)(),c=D(e.text.trim()),h[A].labelType=e.type,'"'===c[0]&&'"'===c[c.length-1]&&(c=c.substring(1,c.length-1)),h[A].text=c):void 0===h[A].text&&(h[A].text=t),void 0!==s&&(h[A].type=s),null!=u&&u.forEach((function(t){h[A].styles.push(t)})),null!=n&&n.forEach((function(t){h[A].classes.push(t)})),void 0!==r&&(h[A].dir=r),void 0===h[A].props?h[A].props=a:void 0!==a&&Object.assign(h[A].props,a))},T=function(t,e,s){const u={start:t,end:e,type:void 0,text:"",labelType:"text"};i.l.info("abc78 Got edge...",u);const n=s.text;if(void 0!==n&&(u.text=D(n.text.trim()),'"'===u.text[0]&&'"'===u.text[u.text.length-1]&&(u.text=u.text.substring(1,u.text.length-1)),u.labelType=n.type),void 0!==s&&(u.type=s.type,u.stroke=s.stroke,u.length=s.length),(null==u?void 0:u.length)>10&&(u.length=10),!(A.length<(l.maxEdges??500)))throw new Error(`Edge limit exceeded. ${A.length} edges found, but the limit is ${l.maxEdges}.\n\nInitialize mermaid with maxEdges set to a higher number to allow more edges.\nYou cannot set this config via configuration inside the diagram as it is a secure config.\nYou have to call mermaid.initialize.`);i.l.info("abc78 pushing edge..."),A.push(u)},C=function(t,e,s){let u,n;for(i.l.info("addLink (abc78)",t,e,s),u=0;u=A.length)throw new Error(`The index ${t} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${A.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);"default"===t?A.defaultStyle=e:(-1===i.u.isSubstringInArray("fill",e)&&e.push("fill:none"),A[t].style=e)}))},S=function(t,e){t.split(",").forEach((function(t){void 0===d[t]&&(d[t]={id:t,styles:[],textStyles:[]}),null!=e&&e.forEach((function(e){if(e.match("color")){const s=e.replace("fill","bgFill").replace("color","fill");d[t].textStyles.push(s)}d[t].styles.push(e)}))}))},m=function(t){a=t,a.match(/.*/)&&(a="LR"),a.match(/.*v/)&&(a="TB"),"TD"===a&&(a="TB")},x=function(t,e){t.split(",").forEach((function(t){let s=t;void 0!==h[s]&&h[s].classes.push(e),void 0!==y[s]&&y[s].classes.push(e)}))},v=function(t,e,s){t.split(",").forEach((function(t){void 0!==h[t]&&(h[t].link=i.u.formatUrl(e,l),h[t].linkTarget=s)})),x(t,"clickable")},L=function(t){if(E.hasOwnProperty(t))return E[t]},I=function(t,e,s){t.split(",").forEach((function(t){!function(t,e,s){let u=b(t);if("loose"!==(0,i.c)().securityLevel)return;if(void 0===e)return;let n=[];if("string"==typeof s){n=s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,u.Ltv)(this).classed("hover",!1)}))};k.push(P);const U=function(t="gen-1"){h={},d={},A=[],k=[P],p=[],y={},f=0,E={},g=!0,c=t,l=(0,i.c)(),(0,i.v)()},V=t=>{c=t||"gen-2"},G=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},M=function(t,e,s){let u=t.text.trim(),n=s.text;t===s&&s.text.match(/\s/)&&(u=void 0);let r=[];const{nodeList:a,dir:o}=function(t){const e={boolean:{},number:{},string:{}},s=[];let u;return{nodeList:t.filter((function(t){const i=typeof t;return t.stmt&&"dir"===t.stmt?(u=t.value,!1):""!==t.trim()&&(i in e?!e[i].hasOwnProperty(t)&&(e[i][t]=!0):!s.includes(t)&&s.push(t))})),dir:u}}(r.concat.apply(r,e));if(r=a,"gen-1"===c)for(let i=0;i2e3)return;if(j[Y]=e,p[e].id===t)return{result:!0,count:0};let u=0,i=1;for(;u=0){const s=X(t,e);if(s.result)return{result:!0,count:i+s.count};i+=s.count}u+=1}return{result:!1,count:i}},z=function(t){return j[t]},H=function(){Y=-1,p.length>0&&X("none",p.length-1)},W=function(){return p},Q=()=>!!g&&(g=!1,!0),q=(t,e)=>{const s=(t=>{const e=t.trim();let s=e.slice(0,-1),u="arrow_open";switch(e.slice(-1)){case"x":u="arrow_cross","x"===e[0]&&(u="double_"+u,s=s.slice(1));break;case">":u="arrow_point","<"===e[0]&&(u="double_"+u,s=s.slice(1));break;case"o":u="arrow_circle","o"===e[0]&&(u="double_"+u,s=s.slice(1))}let i="normal",n=s.length-1;"="===s[0]&&(i="thick"),"~"===s[0]&&(i="invisible");let r=((t,e)=>{const s=e.length;let u=0;for(let i=0;i{let e=t.trim(),s="arrow_open";switch(e[0]){case"<":s="arrow_point",e=e.slice(1);break;case"x":s="arrow_cross",e=e.slice(1);break;case"o":s="arrow_circle",e=e.slice(1)}let u="normal";return e.includes("=")&&(u="thick"),e.includes(".")&&(u="dotted"),{type:s,stroke:u}})(e),u.stroke!==s.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===u.type)u.type=s.type;else{if(u.type!==s.type)return{type:"INVALID",stroke:"INVALID"};u.type="double_"+u.type}return"double_arrow"===u.type&&(u.type="double_arrow_point"),u.length=s.length,u}return s},Z=(t,e)=>{let s=!1;return t.forEach((t=>{t.nodes.indexOf(e)>=0&&(s=!0)})),s},J=(t,e)=>{const s=[];return t.nodes.forEach(((u,i)=>{Z(e,u)||s.push(t.nodes[i])})),{nodes:s}},tt={firstGraph:Q},et={defaultConfig:()=>i.K.flowchart,setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,addVertex:F,lookUpDomId:b,addLink:C,updateLinkInterpolate:_,updateLink:B,addClass:S,setDirection:m,setClass:x,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(E["gen-1"===c?b(t):t]=D(e))}))},getTooltip:L,setClickEvent:I,setLink:v,bindFunctions:R,getDirection:$,getVertices:N,getEdges:O,getClasses:w,clear:U,setGen:V,defaultStyle:G,addSubGraph:M,getDepthFirstPos:z,indexNodes:H,getSubGraphs:W,destructLink:q,lex:tt,exists:Z,makeUniq:J,setDiagramTitle:i.q,getDiagramTitle:i.t},st=Object.freeze(Object.defineProperty({__proto__:null,addClass:S,addLink:C,addSingleLink:T,addSubGraph:M,addVertex:F,bindFunctions:R,clear:U,default:et,defaultStyle:G,destructLink:q,firstGraph:Q,getClasses:w,getDepthFirstPos:z,getDirection:$,getEdges:O,getSubGraphs:W,getTooltip:L,getVertices:N,indexNodes:H,lex:tt,lookUpDomId:b,setClass:x,setClickEvent:I,setDirection:m,setGen:V,setLink:v,updateLink:B,updateLinkInterpolate:_},Symbol.toStringTag,{value:"Module"}))}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/25491a6a.1255d965.js b/pr-preview/pr-1594/assets/js/25491a6a.1255d965.js deleted file mode 100644 index 81c4433e3c..0000000000 --- a/pr-preview/pr-1594/assets/js/25491a6a.1255d965.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[228],{78749:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var s=r(74848),n=r(28453);const i={},d="Starburst",c={id:"reference/Connectors/materialization-connectors/starburst",title:"Starburst",description:"This connector materializes transactionally Flow collections into Iceberg or Delta Lake tables using AWS S3 storage in Starburst Galaxy.",source:"@site/docs/reference/Connectors/materialization-connectors/starburst.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/starburst",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/starburst.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"SQLite",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite"},next:{title:"TimescaleDB",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb"}},l={},a=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Sync Schedule",id:"sync-schedule",level:2},{value:"Reserved words",id:"reserved-words",level:2}];function o(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"starburst",children:"Starburst"}),"\n",(0,s.jsxs)(t.p,{children:["This connector materializes transactionally Flow collections into Iceberg or Delta Lake tables using AWS S3 storage in ",(0,s.jsx)(t.a,{href:"https://www.starburst.io/platform/starburst-galaxy/",children:"Starburst Galaxy"}),".\nStarburst Galaxy connector supports only standard(merge) updates."]}),"\n",(0,s.jsx)(t.p,{children:"The connector makes use of S3 AWS storage for storing temporarily data during the materialization process."}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://ghcr.io/estuary/materialize-starburst:dev",children:(0,s.jsx)(t.code,{children:"ghcr.io/estuary/materialize-starburst:dev"})})," provides the latest connector image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(t.p,{children:"To use this connector, you'll need:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["A Starburst Galaxy account (To create one: ",(0,s.jsx)(t.a,{href:"https://www.starburst.io/platform/starburst-galaxy/start/",children:"Staburst Galaxy start"})," that includes:","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["A running cluster containing an ",(0,s.jsx)(t.a,{href:"https://docs.starburst.io/starburst-galaxy/working-with-data/create-catalogs/object-storage/s3.html",children:"Amazon S3"})," catalog"]}),"\n",(0,s.jsxs)(t.li,{children:["A ",(0,s.jsx)(t.a,{href:"https://docs.starburst.io/starburst-galaxy/data-engineering/working-with-data-lakes/table-formats/index.html#create-schema",children:"schema"})," which is a logical grouping of tables"]}),"\n",(0,s.jsxs)(t.li,{children:["Storage on S3 for temporary data with ",(0,s.jsx)(t.code,{children:"awsAccessKeyId"})," and ",(0,s.jsx)(t.code,{children:"awsSecretAccessKey"})," which should correspond to used catalog"]}),"\n",(0,s.jsx)(t.li,{children:"A user with a role assigned that grants access to create, modify, drop tables in specified Amazon S3 catalog"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"setup",children:"Setup"}),"\n",(0,s.jsxs)(t.p,{children:["To get host go to your Cluster -> Connection info -> Other clients (",(0,s.jsx)(t.a,{href:"https://docs.starburst.io/starburst-galaxy/working-with-data/query-data/connect-clients.html",children:"Connect clients"}),")"]}),"\n",(0,s.jsxs)(t.p,{children:['There is also need to grant access to temporary storage (Roles and privileges -> Select specific role -> Privileges -> Add privilege -> Location). "Create schema and table in location" should be selected. ',(0,s.jsx)(t.a,{href:"https://docs.starburst.io/starburst-galaxy/cluster-administration/manage-cluster-access/manage-users-roles-and-tags/account-and-cluster-privileges-and-entities.html#location-privileges-",children:"Doc"})]}),"\n",(0,s.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsx)(t.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a Starburst materialization, which will direct one or more of your Flow collections to new Starburst tables."}),"\n",(0,s.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Property"}),(0,s.jsx)(t.th,{children:"Title"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"}),(0,s.jsx)(t.th,{children:"Required/Default"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/host"})})}),(0,s.jsx)(t.td,{children:"Host and optional port"}),(0,s.jsx)(t.td,{}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/catalog"})})}),(0,s.jsx)(t.td,{children:"Catalog Name"}),(0,s.jsx)(t.td,{children:"Galaxy catalog Catalog"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/schema"})})}),(0,s.jsx)(t.td,{children:"Schema Name"}),(0,s.jsx)(t.td,{children:"Default schema to materialize to"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/account"})})}),(0,s.jsx)(t.td,{children:"Account"}),(0,s.jsx)(t.td,{children:"Galaxy account name"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/password"})})}),(0,s.jsx)(t.td,{children:"Password"}),(0,s.jsx)(t.td,{children:"Galaxy account password"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/awsAccessKeyId"})})}),(0,s.jsx)(t.td,{children:"AWS Access Key ID"}),(0,s.jsx)(t.td,{}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/awsSecretAccessKey"})})}),(0,s.jsx)(t.td,{children:"AWS Secret Access Key"}),(0,s.jsx)(t.td,{}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/region"})})}),(0,s.jsx)(t.td,{children:"AWS Region"}),(0,s.jsx)(t.td,{children:"Region of AWS storage"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/bucket"})})}),(0,s.jsx)(t.td,{children:"Bucket name"}),(0,s.jsx)(t.td,{}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/bucketPath"})})}),(0,s.jsx)(t.td,{children:"Bucket path"}),(0,s.jsx)(t.td,{children:"A prefix that will be used to store objects in S3."}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Property"}),(0,s.jsx)(t.th,{children:"Title"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"}),(0,s.jsx)(t.th,{children:"Required/Default"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.code,{children:"/table"})})}),(0,s.jsx)(t.td,{children:"Table"}),(0,s.jsx)(t.td,{children:"Table name"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"Required"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"/schema"})}),(0,s.jsx)(t.td,{children:"Alternative Schema"}),(0,s.jsx)(t.td,{children:"Alternative schema for this table"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:"\nmaterializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n \t connector:\n \t config:\n host: HOST:PORT\n account: ACCOUNT\n password: PASSWORD\n catalog: CATALOG_NAME\n schema: SCHEMA_NAME\n awsAccessKeyId: AWS_ACCESS_KEY_ID\n awsSecretAccessKey: AWS_SECRET_KEY_ID\n region: REGION\n bucket: BUCKET\n bucketPath: BUCKET_PATH\n \t image: ghcr.io/estuary/materialize-starburst:dev\n # If you have multiple collections you need to materialize, add a binding for each one\n # to ensure complete data flow-through\n bindings:\n - resource:\n table: ${table_name}\n schema: default\n source: ${PREFIX}/${source_collection}\n"})}),"\n",(0,s.jsx)(t.h2,{id:"sync-schedule",children:"Sync Schedule"}),"\n",(0,s.jsxs)(t.p,{children:["This connector supports configuring a schedule for sync frequency. You can read\nabout how to configure this ",(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/materialization-sync-schedule",children:"here"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,s.jsxs)(t.p,{children:["Starburst Galaxy has a list of reserved words that must be quoted in order to be used as an identifier. Flow automatically quotes fields that are in the reserved words list. You can find this list in Trino's documentation ",(0,s.jsx)(t.a,{href:"https://trino.io/docs/current/language/reserved.html",children:"here"})," and in the table below."]}),"\n",(0,s.jsx)(t.admonition,{type:"caution",children:(0,s.jsxs)(t.p,{children:["In Starburst Galaxy, objects created with quoted identifiers must always be referenced exactly as created, including the quotes. Otherwise, SQL statements and queries can result in errors. See the ",(0,s.jsx)(t.a,{href:"https://trino.io/docs/current/language/reserved.html#language-identifiers",children:"Trino docs"}),"."]})}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Reserved words"}),(0,s.jsx)(t.th,{}),(0,s.jsx)(t.th,{})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"CUBE"}),(0,s.jsx)(t.td,{children:"INSERT"}),(0,s.jsx)(t.td,{children:"TABLE"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"CURRENT_CATALOG"}),(0,s.jsx)(t.td,{children:"INTERSECT"}),(0,s.jsx)(t.td,{children:"THEN"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"CURRENT_DATE"}),(0,s.jsx)(t.td,{children:"INTO"}),(0,s.jsx)(t.td,{children:"TRIM"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"CURRENT_PATH"}),(0,s.jsx)(t.td,{children:"IS"}),(0,s.jsx)(t.td,{children:"TRUE"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"CURRENT_ROLE"}),(0,s.jsx)(t.td,{children:"JOIN"}),(0,s.jsx)(t.td,{children:"UESCAPE"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"CURRENT_SCHEMA"}),(0,s.jsx)(t.td,{children:"JSON_ARRAY"}),(0,s.jsx)(t.td,{children:"UNION"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"CURRENT_TIME"}),(0,s.jsx)(t.td,{children:"JSON_EXISTS"}),(0,s.jsx)(t.td,{children:"UNNEST"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"CURRENT_TIMESTAMP"}),(0,s.jsx)(t.td,{children:"JSON_OBJECT"}),(0,s.jsx)(t.td,{children:"USING"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"CURRENT_USER"}),(0,s.jsx)(t.td,{children:"JSON_QUERY"}),(0,s.jsx)(t.td,{children:"VALUES"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"DEALLOCATE"}),(0,s.jsx)(t.td,{children:"JSON_TABLE"}),(0,s.jsx)(t.td,{children:"WHEN"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"DELETE"}),(0,s.jsx)(t.td,{children:"JSON_VALUE"}),(0,s.jsx)(t.td,{children:"WHERE"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"DESCRIBE"}),(0,s.jsx)(t.td,{children:"LEFT"}),(0,s.jsx)(t.td,{children:"WITH"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"DISTINCT"}),(0,s.jsx)(t.td,{children:"LIKE"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"DROP"}),(0,s.jsx)(t.td,{children:"LISTAGG"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"ELSE"}),(0,s.jsx)(t.td,{children:"LOCALTIME"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"END"}),(0,s.jsx)(t.td,{children:"LOCALTIMESTAMP"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"ESCAPE"}),(0,s.jsx)(t.td,{children:"NATURAL"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"EXCEPT"}),(0,s.jsx)(t.td,{children:"NORMALIZE"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"EXECUTE"}),(0,s.jsx)(t.td,{children:"NOT"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"EXISTS"}),(0,s.jsx)(t.td,{children:"NULL"}),(0,s.jsx)(t.td,{})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},28453:(e,t,r)=>{r.d(t,{R:()=>d,x:()=>c});var s=r(96540);const n={},i=s.createContext(n);function d(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/25a17fcd.f1fd2bbd.js b/pr-preview/pr-1594/assets/js/25a17fcd.f1fd2bbd.js deleted file mode 100644 index 4f9175ca43..0000000000 --- a/pr-preview/pr-1594/assets/js/25a17fcd.f1fd2bbd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[368],{76787:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>d});var i=t(74848),r=t(28453);const s={},c="Slack",l={id:"reference/Connectors/materialization-connectors/slack",title:"Slack",description:"This connector lets you materialize data from Estuary Flow directly into Slack channels.",source:"@site/docs/reference/Connectors/materialization-connectors/slack.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/slack",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/slack.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Rockset",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset"},next:{title:"Snowflake",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake"}},o={},d=[{value:"Prerequisites",id:"prerequisites",level:3},{value:"Configuration",id:"configuration",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"slack",children:"Slack"}),"\n",(0,i.jsx)(n.p,{children:"This connector lets you materialize data from Estuary Flow directly into Slack channels."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"ghcr.io/estuary/materialize-slack:dev"})," provides the latest connector image. For earlier versions, visit the ",(0,i.jsx)(n.a,{href:"https://ghcr.io/estuary/materialize-slack",children:"GitHub Container Registry"})," page."]}),"\n",(0,i.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(n.p,{children:"To use this connector, ensure you have the following:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"An active Slack workspace with appropriate permissions."}),"\n",(0,i.jsx)(n.li,{children:"Slack credentials and access token for authentication."}),"\n",(0,i.jsx)(n.li,{children:"At least one Flow collection."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsxs)(n.p,{children:["The Slack connector is available for use in the Flow web application. To learn more about connectors and how to set them up, read our guide on ",(0,i.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"using connectors"}),"."]}),"\n",(0,i.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Title"}),(0,i.jsx)(n.th,{children:"Description"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required/Default"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"/access_token"}),(0,i.jsx)(n.td,{children:"Access Token"}),(0,i.jsx)(n.td,{children:"The Slack API access token for authentication."}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Required"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"/client_id"}),(0,i.jsx)(n.td,{children:"Client ID"}),(0,i.jsx)(n.td,{children:"Client ID for authentication."}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Required"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"/client_secret"}),(0,i.jsx)(n.td,{children:"Client Secret"}),(0,i.jsx)(n.td,{children:"The Slack API client secret."}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Title"}),(0,i.jsx)(n.th,{children:"Description"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required/Default"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"/source"}),(0,i.jsx)(n.td,{children:"Source"}),(0,i.jsx)(n.td,{children:"Source data in Flow to be sent to Slack."}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Required"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"/channel"}),(0,i.jsx)(n.td,{children:"Channel"}),(0,i.jsx)(n.td,{children:"The ID of the Slack channel to send messages to."}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Required"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"/display_name"}),(0,i.jsx)(n.td,{children:"Display Name"}),(0,i.jsx)(n.td,{children:"The display name for the sender in Slack."}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"/logo_emoji"}),(0,i.jsx)(n.td,{children:"Logo Emoji"}),(0,i.jsx)(n.td,{children:"The emoji to be used."}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'materializations:\n ${PREFIX}/${MATERIALIZATION_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-slack:dev\n config:\n credentials:\n auth_type: OAuth\n access_token: {secret}\n client_id: {your_client_id}\n client_secret: {secret}\n bindings:\n - source: ${PREFIX}/source_name\n resource:\n channel: "id: C05A95LJHSL"\n sender_config:\n display_name: Task Monitor\n logo_emoji: ":eyes:"\n'})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>l});var i=t(96540);const r={},s=i.createContext(r);function c(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/2843.6beaccba.js b/pr-preview/pr-1594/assets/js/2843.6beaccba.js deleted file mode 100644 index c66d3eac43..0000000000 --- a/pr-preview/pr-1594/assets/js/2843.6beaccba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2843],{22843:(t,i,n)=>{n.d(i,{diagram:()=>o});var s=n(99702),e=(n(74353),n(16750),n(26312),n(42838),function(){var t=function(t,i,n,s){for(n=n||{},s=t.length;s--;n[t[s]]=i);return n},i=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,i,n,s,e,r,h){switch(r.length,e){case 1:return s;case 4:break;case 6:s.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(i,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(i,[2,3]),t(i,[2,4]),t(i,[2,5]),t(i,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,i){if(!i.recoverable){var n=new Error(t);throw n.hash=i,n}this.trace(t)},parse:function(t){var i=this,n=[0],s=[],e=[null],r=[],h=this.table,o="",l=0,c=0,a=r.slice.call(arguments,1),y=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);y.setInput(t,u.yy),u.yy.lexer=y,u.yy.parser=this,void 0===y.yylloc&&(y.yylloc={});var f=y.yylloc;r.push(f);var g=y.options&&y.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,m,d,k,x,b,v,w,I,S={};;){if(m=n[n.length-1],this.defaultActions[m]?d=this.defaultActions[m]:(null==_&&(I=void 0,"number"!=typeof(I=s.pop()||y.lex()||1)&&(I instanceof Array&&(I=(s=I).pop()),I=i.symbols_[I]||I),_=I),d=h[m]&&h[m][_]),void 0===d||!d.length||!d[0]){var E="";for(x in w=[],h[m])this.terminals_[x]&&x>2&&w.push("'"+this.terminals_[x]+"'");E=y.showPosition?"Parse error on line "+(l+1)+":\n"+y.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==_?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(E,{text:y.match,token:this.terminals_[_]||_,line:y.yylineno,loc:f,expected:w})}if(d[0]instanceof Array&&d.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+_);switch(d[0]){case 1:n.push(_),e.push(y.yytext),r.push(y.yylloc),n.push(d[1]),_=null,c=y.yyleng,o=y.yytext,l=y.yylineno,f=y.yylloc;break;case 2:if(b=this.productions_[d[1]][1],S.$=e[e.length-b],S._$={first_line:r[r.length-(b||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(b||1)].first_column,last_column:r[r.length-1].last_column},g&&(S._$.range=[r[r.length-(b||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(S,[o,c,l,u.yy,d[1],e,r].concat(a))))return k;b&&(n=n.slice(0,-1*b*2),e=e.slice(0,-1*b),r=r.slice(0,-1*b)),n.push(this.productions_[d[1]][0]),e.push(S.$),r.push(S._$),v=h[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},s={EOF:1,parseError:function(t,i){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===s.length?this.yylloc.first_column:0)+s[s.length-n.length].length-n[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+i+"^"},test_match:function(t,i){var n,s,e;if(this.options.backtrack_lexer&&(e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(e.yylloc.range=this.yylloc.range.slice(0))),(s=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in e)this[r]=e[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,n,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var e=this._currentRules(),r=0;ri[0].length)){if(i=n,s=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,e[r])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,e[s]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,i,n,s){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function e(){this.yy={}}return n.lexer=s,e.prototype=n,n.Parser=e,new e}());e.parser=e;const r=!1;let h=r;const o={parser:e,db:{clear:()=>{h=r},setInfo:t=>{h=t},getInfo:()=>h},renderer:{draw:(t,i,n)=>{s.l.debug("rendering info diagram\n"+t);const e=(0,s.A)(i);(0,s.i)(e,100,400,!0);e.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${n}`)}}}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/28a8491c.13ec90df.js b/pr-preview/pr-1594/assets/js/28a8491c.13ec90df.js deleted file mode 100644 index b8bc10bc1d..0000000000 --- a/pr-preview/pr-1594/assets/js/28a8491c.13ec90df.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3239],{76374:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var s=t(74848),i=t(28453),r=t(61114);const a={sidebar_position:3},o="Create your first dataflow with Amazon S3 and Snowflake",l={id:"getting-started/tutorials/dataflow-s3-snowflake",title:"Create your first dataflow with Amazon S3 and Snowflake",description:"In this tutorial, you'll create your first complete Data Flow with Estuary Flow using publicly available data.",source:"@site/docs/getting-started/tutorials/dataflow-s3-snowflake.md",sourceDirName:"getting-started/tutorials",slug:"/getting-started/tutorials/dataflow-s3-snowflake",permalink:"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/getting-started/tutorials/dataflow-s3-snowflake.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Real-time CDC with MongoDB",permalink:"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb"},next:{title:"Create a real-time materialized view in PostgreSQL",permalink:"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view"}},c={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Introduction",id:"introduction",level:2},{value:"The data",id:"the-data",level:4},{value:"Estuary Flow",id:"estuary-flow",level:4},{value:"Capture Citi Bike data from S3",id:"capture-citi-bike-data-from-s3",level:2},{value:"Prepare Snowflake to use with Flow",id:"prepare-snowflake-to-use-with-flow",level:2},{value:"Materialize your Flow collection to Snowflake",id:"materialize-your-flow-collection-to-snowflake",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Want to learn more?",id:"want-to-learn-more",level:4}];function h(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"create-your-first-dataflow-with-amazon-s3-and-snowflake",children:"Create your first dataflow with Amazon S3 and Snowflake"}),"\n",(0,s.jsxs)(n.p,{children:["In this tutorial, you'll create your first complete ",(0,s.jsx)(n.strong,{children:"Data Flow"})," with Estuary Flow using publicly available data."]}),"\n",(0,s.jsx)(n.p,{children:"The dataset you'll use is composed of zipped CSV files in an Amazon S3 cloud storage bucket. You'll transport this data to a table in your own Snowflake data warehouse."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"You'll need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["An Estuary Flow account. If you don't have one, visit the ",(0,s.jsx)(n.a,{href:"https://dashboard.estuary.dev",children:"Flow web app"})," to register for free."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.a,{href:"https://signup.snowflake.com/",children:"Snowflake free trial account"})," (or a full account).\nSnowflake trials are valid for 30 days."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,s.jsx)(n.h4,{id:"the-data",children:"The data"}),"\n",(0,s.jsxs)(n.p,{children:["New York City hosts the United States' largest bike share program, Citi Bike. ",(0,s.jsx)(n.a,{href:"https://ride.citibikenyc.com/system-data",children:"Citi Bike shares ride data"})," in CSV format with the public, including the starting and ending times and locations for every ride.\nThey upload new data monthly to ",(0,s.jsx)(n.a,{href:"https://s3.amazonaws.com/tripdata/index.html",children:"their Amazon S3 bucket"})," as a zipped CSV file."]}),"\n",(0,s.jsx)(n.p,{children:"In this scenario, let's imagine you're interested in urban bike safety, or perhaps you plan to open a bike store and entice Citi Bike renters to buy their own bikes.\nYou'd like to access the Citi Bike data in your Snowflake data warehouse.\nFrom there, you plan to use your data analytics platform of choice to explore the data, and perhaps integrate it with business intelligence apps."}),"\n",(0,s.jsx)(n.p,{children:"You can use Estuary Flow to build a real-time Data Flow that will capture all the new data from Citi Bike as soon as it appears, convert it to Snowflake's format, and land the data in your warehouse."}),"\n",(0,s.jsx)(n.h4,{id:"estuary-flow",children:"Estuary Flow"}),"\n",(0,s.jsxs)(n.p,{children:["In Estuary Flow, you create Data Flows to connect data ",(0,s.jsx)(n.strong,{children:"source"})," and ",(0,s.jsx)(n.strong,{children:"destination"})," systems."]}),"\n",(0,s.jsx)(n.p,{children:"The simplest Data Flow comprises three types of entities:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A data ",(0,s.jsx)(n.strong,{children:"capture"}),", which ingests data from the source. In this case, you'll capture from Amazon S3."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["One or more ",(0,s.jsx)(n.strong,{children:"collections"}),", which Flow uses to store that data inside a cloud-backed data lake"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.strong,{children:"materialization"}),", to push the data to an external destination. In this case, you'll materialize to a Snowflake data warehouse."]}),"\n"]}),"\n"]}),"\n","\n",(0,s.jsx)(r.A,{chart:"\n\tgraph LR;\n\t\tCapture--\x3eCollection;\n Collection--\x3eMaterialization;\n"}),"\n",(0,s.jsxs)(n.p,{children:["For the capture and materialization to work, they need to integrate with outside systems: in this case, S3 and Snowflake, but many other systems can be used.\nTo accomplish this, Flow uses ",(0,s.jsx)(n.strong,{children:"connectors"}),".\nConnectors are plug-in components that interface between Flow and an outside system.\nToday, you'll use Flow's S3 capture connector and Snowflake materialization connector."]}),"\n",(0,s.jsx)(n.p,{children:"You'll start by creating your capture."}),"\n",(0,s.jsx)(n.h2,{id:"capture-citi-bike-data-from-s3",children:"Capture Citi Bike data from S3"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Go to the Flow web app at ",(0,s.jsx)(n.a,{href:"http://dashboard.estuary.dev",children:"dashboard.estuary.dev"})," and sign in."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click the ",(0,s.jsx)(n.strong,{children:"Sources"})," tab and choose ",(0,s.jsx)(n.strong,{children:"New Capture"})]}),"\n",(0,s.jsx)(n.p,{children:"All of the available capture connectors \u2014 representing the possible data sources \u2014 appear as tiles."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Find the ",(0,s.jsx)(n.strong,{children:"Amazon S3"})," tile and click ",(0,s.jsx)(n.strong,{children:"Capture"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"A form appears with the properties required for an S3 capture. Every connector requires different properties to configure."}),"\n",(0,s.jsx)(n.p,{children:"First, you'll name your capture."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click inside the ",(0,s.jsx)(n.strong,{children:"Name"})," box."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Names of entities in Flow must be unique. They're organized by prefixes, similar to paths in a file system."}),"\n",(0,s.jsxs)(n.p,{children:["You'll see one or more prefixes pertaining to your organization.\nThese prefixes represent the ",(0,s.jsx)(n.strong,{children:"namespaces"})," of Flow to which you have access."]}),"\n",(0,s.jsxs)(n.ol,{start:"5",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click your prefix from the dropdown and append a unique name after it. For example, ",(0,s.jsx)(n.code,{children:"myOrg/yourname/citibiketutorial"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Next, fill out the required properties for S3."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"AWS Access Key ID"})," and ",(0,s.jsx)(n.strong,{children:"AWS Secret Access Key"}),": The bucket is public, so you can leave these fields blank."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"AWS Region"}),": ",(0,s.jsx)(n.code,{children:"us-east-1"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Bucket"}),": ",(0,s.jsx)(n.code,{children:"tripdata"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Prefix"}),": The storage bucket isn't organized by prefixes, so leave this blank."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Match Keys"}),": ",(0,s.jsx)(n.code,{children:"2022"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The Citi Bike storage bucket has been around for a while. Some of the older datasets have incorrect file extensions or contain data in different formats. By selecting a subset of files from the year 2022, you'll make things easier to manage for the purposes of this tutorial.\n(In a real-world use case, you'd likely reconcile the different schemas of the various data formats using a ",(0,s.jsx)(n.strong,{children:"derivation"}),".\n",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/#derivations",children:"Derivations"})," are a more advanced Flow skill.)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Next"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Flow uses the configuration you provided to initiate a connection with S3. It generates a list of ",(0,s.jsx)(n.strong,{children:"collections"})," that will store the data inside Flow. In this case, there's just one collection from the bucket."]}),"\n",(0,s.jsx)(n.p,{children:"Once this process completes, you can move on to the next step. If there's an error, go back and check your configuration."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Save and Publish"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Flow deploys, or ",(0,s.jsx)(n.strong,{children:"publishes"}),", your capture, including your change to the schema. You'll see a notification when the this is complete."]}),"\n",(0,s.jsx)(n.p,{children:"A subset of data from the Citi Bike tripdata bucket has been captured to a Flow collection. Now, you can materialize that data to Snowflake."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Materialize Collections"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"prepare-snowflake-to-use-with-flow",children:"Prepare Snowflake to use with Flow"}),"\n",(0,s.jsx)(n.p,{children:"Before you can materialize from Flow to Snowflake, you need to complete some setup steps."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Leave the Flow web app open. In a new window or tab, go to your Snowflake console."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["If you're a new trial user, you should have received instructions by email. For additional help in this section, see the ",(0,s.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide-getting-started.html",children:"Snowflake documentation"}),"."]}),"\n",(0,s.jsxs)(n.ol,{start:"2",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Create a new SQL worksheet if you don't have one open."}),"\n",(0,s.jsx)(n.p,{children:"This provides an interface where you can run queries."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Paste the follow script into the console, changing the value for ",(0,s.jsx)(n.code,{children:"estuary_password"})," from ",(0,s.jsx)(n.code,{children:"secret"})," to a strong password):"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",children:"set database_name = 'ESTUARY_DB';\nset warehouse_name = 'ESTUARY_WH';\nset estuary_role = 'ESTUARY_ROLE';\nset estuary_user = 'ESTUARY_USER';\nset estuary_password = 'secret';\nset estuary_schema = 'ESTUARY_SCHEMA';\n-- create role and schema for Estuary\ncreate role if not exists identifier($estuary_role);\ngrant role identifier($estuary_role) to role SYSADMIN;\n-- Create snowflake DB\ncreate database if not exists identifier($database_name);\nuse database identifier($database_name);\ncreate schema if not exists identifier($estuary_schema);\n-- create a user for Estuary\ncreate user if not exists identifier($estuary_user)\npassword = $estuary_password\ndefault_role = $estuary_role\ndefault_warehouse = $warehouse_name;\ngrant role identifier($estuary_role) to user identifier($estuary_user);\ngrant all on schema identifier($estuary_schema) to identifier($estuary_role);\n-- create a warehouse for estuary\ncreate warehouse if not exists identifier($warehouse_name)\nwarehouse_size = xsmall\nwarehouse_type = standard\nauto_suspend = 60\nauto_resume = true\ninitially_suspended = true;\n-- grant Estuary role access to warehouse\ngrant USAGE\non warehouse identifier($warehouse_name)\nto role identifier($estuary_role);\n-- grant Estuary access to database\ngrant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role);\n-- change role to ACCOUNTADMIN for STORAGE INTEGRATION support to Estuary (only needed for Snowflake on GCP)\nuse role ACCOUNTADMIN;\ngrant CREATE INTEGRATION on account to role identifier($estuary_role);\nuse role sysadmin;\nCOMMIT;\n"})}),"\n",(0,s.jsxs)(n.ol,{start:"4",children:["\n",(0,s.jsxs)(n.li,{children:["Click the drop-down arrow next to the ",(0,s.jsx)(n.strong,{children:"Run"})," button and click ",(0,s.jsx)(n.strong,{children:"Run All"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Snowflake runs all the queries and is ready to use with Flow."}),"\n",(0,s.jsxs)(n.ol,{start:"5",children:["\n",(0,s.jsx)(n.li,{children:"Return to the Flow web application."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"materialize-your-flow-collection-to-snowflake",children:"Materialize your Flow collection to Snowflake"}),"\n",(0,s.jsxs)(n.p,{children:["You were directed to the ",(0,s.jsx)(n.strong,{children:"Materializations"})," page.\nAll of the available materialization connectors \u2014 representing the possible data destinations \u2014 are shown as tiles."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Find the ",(0,s.jsx)(n.strong,{children:"Snowflake"})," tile and click ",(0,s.jsx)(n.strong,{children:"Materialization"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"A new form appears with the properties required to materialize to Snowflake."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click inside the ",(0,s.jsx)(n.strong,{children:"Name"})," box."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click your prefix from the dropdown and append a unique name after it. For example, ",(0,s.jsx)(n.code,{children:"myOrg/yourname/citibiketutorial"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Next, fill out the required properties for Snowflake (most of these come from the script you just ran)."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Host URL"}),": This is the URL you use to log into Snowflake. If you recently signed up for a trial, it should be in your email. Omit the protocol from the beginning. For example, ",(0,s.jsx)(n.code,{children:"ACCOUNTID.region.cloudprovider.snowflakecomputing.com"})," or ",(0,s.jsx)(n.code,{children:"orgname-accountname.snowflakecomputing.com"}),"."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/admin-account-identifier.html#where-are-account-identifiers-used",children:"Learn more about account identifiers and host URLs."})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Account"}),": Your account identifier. This is part of the Host URL. Using the previous examples, it would be ",(0,s.jsx)(n.code,{children:"ACCOUNTID"})," or ",(0,s.jsx)(n.code,{children:"accountname"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"User"}),": ",(0,s.jsx)(n.code,{children:"ESTUARY_USER"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Password"}),": ",(0,s.jsx)(n.code,{children:"secret"})," (Substitute the password you set in the script.)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Database"}),": ",(0,s.jsx)(n.code,{children:"ESTUARY_DB"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Schema"}),": ",(0,s.jsx)(n.code,{children:"ESTUARY_SCHEMA"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Warehouse"}),": ",(0,s.jsx)(n.code,{children:"ESTUARY_WH"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Role"}),": ",(0,s.jsx)(n.code,{children:"ESTUARY_ROLE"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Scroll down to view the ",(0,s.jsx)(n.strong,{children:"Source Collections"})," section and change the default name in the ",(0,s.jsx)(n.strong,{children:"Table"})," field to ",(0,s.jsx)(n.code,{children:"CitiBikeData"})," or another name of your choosing."]}),"\n",(0,s.jsxs)(n.p,{children:["Every Flow collection is defined by one or more ",(0,s.jsx)(n.strong,{children:"schemas"}),".\nBecause S3 is a cloud storage bucket, the schema used to ingest the data is quite permissive."]}),"\n",(0,s.jsx)(n.p,{children:"You'll add a more detailed schema for Flow to use to materialize the data to Snowflake. This will ensure that each field from the source CSV is mapped to a column in the Snowflake table."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["With the collection still selected, click its ",(0,s.jsx)(n.strong,{children:"Collection"})," tab. Then, click ",(0,s.jsx)(n.strong,{children:"Schema Inference"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Flow examines the data and automatically generates a new ",(0,s.jsx)(n.code,{children:"readSchema"}),". Scroll through and note the differences between this and the original schema, renamed ",(0,s.jsx)(n.code,{children:"writeSchema"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Apply Inferred Schema"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Next"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Flow uses the configuration you provided to initiate a connection with Snowflake and generate a specification with details of the materialization."}),"\n",(0,s.jsx)(n.p,{children:"Once this process completes, you can move on to the next step. If there's an error, go back and check your configuration."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Save and Publish"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Flow publishes the materialization."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Return to the Snowflake console and expand ESTUARY_DB and ESTUARY_SCHEMA.\nYou'll find the materialized table there."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,s.jsx)(n.p,{children:"You've created a complete Data Flow that ingests the Citi Bike CSV files from an Amazon S3 bucket and materializes them into your Snowflake database."}),"\n",(0,s.jsx)(n.p,{children:"When Citi Bike uploads new data, it'll be reflected in Snowflake in near-real-time, so long as you don't disable your capture or materialization."}),"\n",(0,s.jsx)(n.p,{children:"Data warehouses like Snowflake are designed to power data analytics. From here, you can begin any number of analytical workflows."}),"\n",(0,s.jsx)(n.h4,{id:"want-to-learn-more",children:"Want to learn more?"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["For more information on the connectors you used today, see the pages on ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3",children:"S3"})," and ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake",children:"Snowflake"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["You can create a Data Flow using any combination of supported connectors with a similar process to the one you followed in this tutorial. For a more generalized procedure, see the ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"guide to create a Data Flow"}),"."]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},61114:(e,n,t)=>{t.d(n,{A:()=>a});var s=t(96540),i=t(99702),r=t(74848);i.N.initialize({startOnLoad:!0});const a=e=>{let{chart:n}=e;return(0,s.useEffect)((()=>{i.N.contentLoaded()}),[]),(0,r.jsx)("div",{className:"mermaid",children:n})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/2925.5a7d8b64.js b/pr-preview/pr-1594/assets/js/2925.5a7d8b64.js deleted file mode 100644 index 40928a4eaa..0000000000 --- a/pr-preview/pr-1594/assets/js/2925.5a7d8b64.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2925],{32925:(t,i,e)=>{e.d(i,{diagram:()=>F});var s=e(99702),n=e(8337),a=e(26312),h=(e(74353),e(16750),e(42838),function(){var t=function(t,i,e,s){for(e=e||{},s=t.length;s--;e[t[s]]=i);return e},i=[1,10,12,14,16,18,19,21,23],e=[2,6],s=[1,3],n=[1,5],a=[1,6],h=[1,7],o=[1,5,10,12,14,16,18,19,21,23,34,35,36],r=[1,25],l=[1,26],c=[1,28],g=[1,29],u=[1,30],x=[1,31],d=[1,32],p=[1,33],f=[1,34],y=[1,35],m=[1,36],b=[1,37],A=[1,43],w=[1,42],S=[1,47],C=[1,50],k=[1,10,12,14,16,18,19,21,23,34,35,36],_=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],T=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],R=[1,64],D={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:function(t,i,e,s,n,a,h){var o=a.length-1;switch(n){case 5:s.setOrientation(a[o]);break;case 9:s.setDiagramTitle(a[o].text.trim());break;case 12:s.setLineData({text:"",type:"text"},a[o]);break;case 13:s.setLineData(a[o-1],a[o]);break;case 14:s.setBarData({text:"",type:"text"},a[o]);break;case 15:s.setBarData(a[o-1],a[o]);break;case 16:this.$=a[o].trim(),s.setAccTitle(this.$);break;case 17:case 18:this.$=a[o].trim(),s.setAccDescription(this.$);break;case 19:case 27:this.$=a[o-1];break;case 20:this.$=[Number(a[o-2]),...a[o]];break;case 21:this.$=[Number(a[o])];break;case 22:s.setXAxisTitle(a[o]);break;case 23:s.setXAxisTitle(a[o-1]);break;case 24:s.setXAxisTitle({type:"text",text:""});break;case 25:s.setXAxisBand(a[o]);break;case 26:s.setXAxisRangeData(Number(a[o-2]),Number(a[o]));break;case 28:this.$=[a[o-2],...a[o]];break;case 29:this.$=[a[o]];break;case 30:s.setYAxisTitle(a[o]);break;case 31:s.setYAxisTitle(a[o-1]);break;case 32:s.setYAxisTitle({type:"text",text:""});break;case 33:s.setYAxisRangeData(Number(a[o-2]),Number(a[o]));break;case 37:case 38:this.$={text:a[o],type:"text"};break;case 39:this.$={text:a[o],type:"markdown"};break;case 40:this.$=a[o];break;case 41:this.$=a[o-1]+""+a[o]}},table:[t(i,e,{3:1,4:2,7:4,5:s,34:n,35:a,36:h}),{1:[3]},t(i,e,{4:2,7:4,3:8,5:s,34:n,35:a,36:h}),t(i,e,{4:2,7:4,6:9,3:10,5:s,8:[1,11],34:n,35:a,36:h}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(o,[2,34]),t(o,[2,35]),t(o,[2,36]),{1:[2,1]},t(i,e,{4:2,7:4,3:21,5:s,34:n,35:a,36:h}),{1:[2,3]},t(o,[2,5]),t(i,[2,7],{4:22,34:n,35:a,36:h}),{11:23,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:39,13:38,24:A,27:w,29:40,30:41,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:45,15:44,27:S,33:46,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:49,17:48,24:C,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:52,17:51,24:C,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{20:[1,53]},{22:[1,54]},t(k,[2,18]),{1:[2,2]},t(k,[2,8]),t(k,[2,9]),t(_,[2,37],{40:55,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b}),t(_,[2,38]),t(_,[2,39]),t(T,[2,40]),t(T,[2,42]),t(T,[2,43]),t(T,[2,44]),t(T,[2,45]),t(T,[2,46]),t(T,[2,47]),t(T,[2,48]),t(T,[2,49]),t(T,[2,50]),t(T,[2,51]),t(k,[2,10]),t(k,[2,22],{30:41,29:56,24:A,27:w}),t(k,[2,24]),t(k,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},t(k,[2,11]),t(k,[2,30],{33:60,27:S}),t(k,[2,32]),{31:[1,61]},t(k,[2,12]),{17:62,24:C},{25:63,27:R},t(k,[2,14]),{17:65,24:C},t(k,[2,16]),t(k,[2,17]),t(T,[2,41]),t(k,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(k,[2,31]),{27:[1,69]},t(k,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(k,[2,15]),t(k,[2,26]),t(k,[2,27]),{11:59,32:72,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},t(k,[2,33]),t(k,[2,19]),{25:73,27:R},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:function(t,i){if(!i.recoverable){var e=new Error(t);throw e.hash=i,e}this.trace(t)},parse:function(t){var i=this,e=[0],s=[],n=[null],a=[],h=this.table,o="",r=0,l=0,c=a.slice.call(arguments,1),g=Object.create(this.lexer),u={yy:{}};for(var x in this.yy)Object.prototype.hasOwnProperty.call(this.yy,x)&&(u.yy[x]=this.yy[x]);g.setInput(t,u.yy),u.yy.lexer=g,u.yy.parser=this,void 0===g.yylloc&&(g.yylloc={});var d=g.yylloc;a.push(d);var p=g.options&&g.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,y,m,b,A,w,S,C,k,_={};;){if(y=e[e.length-1],this.defaultActions[y]?m=this.defaultActions[y]:(null==f&&(k=void 0,"number"!=typeof(k=s.pop()||g.lex()||1)&&(k instanceof Array&&(k=(s=k).pop()),k=i.symbols_[k]||k),f=k),m=h[y]&&h[y][f]),void 0===m||!m.length||!m[0]){var T="";for(A in C=[],h[y])this.terminals_[A]&&A>2&&C.push("'"+this.terminals_[A]+"'");T=g.showPosition?"Parse error on line "+(r+1)+":\n"+g.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(r+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(T,{text:g.match,token:this.terminals_[f]||f,line:g.yylineno,loc:d,expected:C})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+y+", token: "+f);switch(m[0]){case 1:e.push(f),n.push(g.yytext),a.push(g.yylloc),e.push(m[1]),f=null,l=g.yyleng,o=g.yytext,r=g.yylineno,d=g.yylloc;break;case 2:if(w=this.productions_[m[1]][1],_.$=n[n.length-w],_._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},p&&(_._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(b=this.performAction.apply(_,[o,l,r,u.yy,m[1],n,a].concat(c))))return b;w&&(e=e.slice(0,-1*w*2),n=n.slice(0,-1*w),a=a.slice(0,-1*w)),e.push(this.productions_[m[1]][0]),n.push(_.$),a.push(_._$),S=h[e[e.length-2]][e[e.length-1]],e.push(S);break;case 3:return!0}}return!0}},L={EOF:1,parseError:function(t,i){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,e=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),e.length-1&&(this.yylineno-=e.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:e?(e.length===s.length?this.yylloc.first_column:0)+s[s.length-e.length].length-e[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+i+"^"},test_match:function(t,i){var e,s,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(s=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;if(this._backtrack){for(var a in n)this[a]=n[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,e,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),a=0;ai[0].length)){if(i=e,s=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,n[a])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,n[s]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,i,e,s){switch(e){case 0:case 1:case 5:case 43:break;case 2:case 3:return this.popState(),34;case 4:return 34;case 6:return 10;case 7:return this.pushState("acc_title"),19;case 8:return this.popState(),"acc_title_value";case 9:return this.pushState("acc_descr"),21;case 10:return this.popState(),"acc_descr_value";case 11:this.pushState("acc_descr_multiline");break;case 12:case 25:case 27:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";case 17:return this.pushState("axis_data"),"Y_AXIS";case 18:return this.pushState("axis_band_data"),24;case 19:return 31;case 20:return this.pushState("data"),16;case 21:return this.pushState("data"),18;case 22:return this.pushState("data_inner"),24;case 23:return 27;case 24:return this.popState(),26;case 26:this.pushState("string");break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 44:return 35;case 45:return 36}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};function P(){this.yy={}}return D.lexer=L,P.prototype=D,D.Parser=P,new P}());h.parser=h;const o=h;function r(t){return"bar"===t.type}function l(t){return"band"===t.type}function c(t){return"linear"===t.type}class g{constructor(t){this.parentGroup=t}getMaxDimension(t,i){if(!this.parentGroup)return{width:t.reduce(((t,i)=>Math.max(i.length,t)),0)*i,height:i};const e={width:0,height:0},s=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",i);for(const a of t){const t=(0,n.c)(s,1,a),h=t?t.width:a.length*i,o=t?t.height:i;e.width=Math.max(e.width,h),e.height=Math.max(e.height,o)}return s.remove(),e}}class u{constructor(t,i,e,s){this.axisConfig=t,this.title=i,this.textDimensionCalculator=e,this.axisThemeConfig=s,this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left",this.showTitle=!1,this.showLabel=!1,this.showTick=!1,this.showAxisLine=!1,this.outerPadding=0,this.titleTextHeight=0,this.labelTextHeight=0,this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}setRange(t){this.range=t,"left"===this.axisPosition||"right"===this.axisPosition?this.boundingRect.height=t[1]-t[0]:this.boundingRect.width=t[1]-t[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(t){this.axisPosition=t,this.setRange(this.range)}getTickDistance(){const t=this.getRange();return Math.abs(t[0]-t[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map((t=>t.toString())),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>2*this.outerPadding&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(t){let i=t.height;if(this.axisConfig.showAxisLine&&i>this.axisConfig.axisLineWidth&&(i-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const e=this.getLabelDimension(),s=.2*t.width;this.outerPadding=Math.min(e.width/2,s);const n=e.height+2*this.axisConfig.labelPadding;this.labelTextHeight=e.height,n<=i&&(i-=n,this.showLabel=!0)}if(this.axisConfig.showTick&&i>=this.axisConfig.tickLength&&(this.showTick=!0,i-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const t=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),e=t.height+2*this.axisConfig.titlePadding;this.titleTextHeight=t.height,e<=i&&(i-=e,this.showTitle=!0)}this.boundingRect.width=t.width,this.boundingRect.height=t.height-i}calculateSpaceIfDrawnVertical(t){let i=t.width;if(this.axisConfig.showAxisLine&&i>this.axisConfig.axisLineWidth&&(i-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const e=this.getLabelDimension(),s=.2*t.height;this.outerPadding=Math.min(e.height/2,s);const n=e.width+2*this.axisConfig.labelPadding;n<=i&&(i-=n,this.showLabel=!0)}if(this.axisConfig.showTick&&i>=this.axisConfig.tickLength&&(this.showTick=!0,i-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const t=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),e=t.height+2*this.axisConfig.titlePadding;this.titleTextHeight=t.height,e<=i&&(i-=e,this.showTitle=!0)}this.boundingRect.width=t.width-i,this.boundingRect.height=t.height}calculateSpace(t){return"left"===this.axisPosition||"right"===this.axisPosition?this.calculateSpaceIfDrawnVertical(t):this.calculateSpaceIfDrawnHorizontally(t),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}getDrawableElementsForLeftAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${i},${this.boundingRect.y} L ${i},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map((t=>({text:t.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(t),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"})))}),this.showTick){const i=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);t.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map((t=>({path:`M ${i},${this.getScaleValue(t)} L ${i-this.axisConfig.tickLength},${this.getScaleValue(t)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth})))})}return this.showTitle&&t.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElementsForBottomAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.y+this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${i} L ${this.boundingRect.x+this.boundingRect.width},${i}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map((t=>({text:t.toString(),x:this.getScaleValue(t),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"})))}),this.showTick){const i=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);t.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map((t=>({path:`M ${this.getScaleValue(t)},${i} L ${this.getScaleValue(t)},${i+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth})))})}return this.showTitle&&t.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElementsForTopAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${i} L ${this.boundingRect.x+this.boundingRect.width},${i}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map((t=>({text:t.toString(),x:this.getScaleValue(t),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+2*this.axisConfig.titlePadding:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"})))}),this.showTick){const i=this.boundingRect.y;t.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map((t=>({path:`M ${this.getScaleValue(t)},${i+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(t)},${i+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth})))})}return this.showTitle&&t.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElements(){if("left"===this.axisPosition)return this.getDrawableElementsForLeftAxis();if("right"===this.axisPosition)throw Error("Drawing of right axis is not implemented");return"bottom"===this.axisPosition?this.getDrawableElementsForBottomAxis():"top"===this.axisPosition?this.getDrawableElementsForTopAxis():[]}}class x extends u{constructor(t,i,e,s,n){super(t,s,n,i),this.categories=e,this.scale=(0,a.WH)().domain(this.categories).range(this.getRange())}setRange(t){super.setRange(t)}recalculateScale(){this.scale=(0,a.WH)().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),s.l.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(t){return this.scale(t)||this.getRange()[0]}}class d extends u{constructor(t,i,e,s,n){super(t,s,n,i),this.domain=e,this.scale=(0,a.m4Y)().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){const t=[...this.domain];"left"===this.axisPosition&&t.reverse(),this.scale=(0,a.m4Y)().domain(t).range(this.getRange())}getScaleValue(t){return this.scale(t)}}function p(t,i,e,s){const n=new g(s);return l(t)?new x(i,e,t.categories,t.title,n):new d(i,e,[t.min,t.max],t.title,n)}class f{constructor(t,i,e,s){this.textDimensionCalculator=t,this.chartConfig=i,this.chartData=e,this.chartThemeConfig=s,this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}calculateSpace(t){const i=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),e=Math.max(i.width,t.width),s=i.height+2*this.chartConfig.titlePadding;return i.width<=e&&i.height<=s&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=e,this.boundingRect.height=s,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){const t=[];return this.showChartTitle&&t.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),t}}function y(t,i,e,s){const n=new g(s);return new f(n,t,i,e)}class m{constructor(t,i,e,s,n){this.plotData=t,this.xAxis=i,this.yAxis=e,this.orientation=s,this.plotIndex=n}getDrawableElement(){const t=this.plotData.data.map((t=>[this.xAxis.getScaleValue(t[0]),this.yAxis.getScaleValue(t[1])]));let i;return i="horizontal"===this.orientation?(0,a.n8j)().y((t=>t[0])).x((t=>t[1]))(t):(0,a.n8j)().x((t=>t[0])).y((t=>t[1]))(t),i?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:i,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}class b{constructor(t,i,e,s,n,a){this.barData=t,this.boundingRect=i,this.xAxis=e,this.yAxis=s,this.orientation=n,this.plotIndex=a}getDrawableElement(){const t=this.barData.data.map((t=>[this.xAxis.getScaleValue(t[0]),this.yAxis.getScaleValue(t[1])])),i=.95*Math.min(2*this.xAxis.getAxisOuterPadding(),this.xAxis.getTickDistance()),e=i/2;return"horizontal"===this.orientation?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:t.map((t=>({x:this.boundingRect.x,y:t[0]-e,height:i,width:t[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill})))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:t.map((t=>({x:t[0]-e,y:t[1],width:i,height:this.boundingRect.y+this.boundingRect.height-t[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill})))}]}}class A{constructor(t,i,e){this.chartConfig=t,this.chartData=i,this.chartThemeConfig=e,this.boundingRect={x:0,y:0,width:0,height:0}}setAxes(t,i){this.xAxis=t,this.yAxis=i}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}calculateSpace(t){return this.boundingRect.width=t.width,this.boundingRect.height=t.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!this.xAxis||!this.yAxis)throw Error("Axes must be passed to render Plots");const t=[];for(const[i,e]of this.chartData.plots.entries())switch(e.type){case"line":{const s=new m(e,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,i);t.push(...s.getDrawableElement())}break;case"bar":{const s=new b(e,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,i);t.push(...s.getDrawableElement())}}return t}}function w(t,i,e){return new A(t,i,e)}class S{constructor(t,i,e,s){this.chartConfig=t,this.chartData=i,this.componentStore={title:y(t,i,e,s),plot:w(t,i,e),xAxis:p(i.xAxis,t.xAxis,{titleColor:e.xAxisTitleColor,labelColor:e.xAxisLabelColor,tickColor:e.xAxisTickColor,axisLineColor:e.xAxisLineColor},s),yAxis:p(i.yAxis,t.yAxis,{titleColor:e.yAxisTitleColor,labelColor:e.yAxisLabelColor,tickColor:e.yAxisTickColor,axisLineColor:e.yAxisLineColor},s)}}calculateVerticalSpace(){let t=this.chartConfig.width,i=this.chartConfig.height,e=0,s=0,n=Math.floor(t*this.chartConfig.plotReservedSpacePercent/100),a=Math.floor(i*this.chartConfig.plotReservedSpacePercent/100),h=this.componentStore.plot.calculateSpace({width:n,height:a});t-=h.width,i-=h.height,h=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:i}),s=h.height,i-=h.height,this.componentStore.xAxis.setAxisPosition("bottom"),h=this.componentStore.xAxis.calculateSpace({width:t,height:i}),i-=h.height,this.componentStore.yAxis.setAxisPosition("left"),h=this.componentStore.yAxis.calculateSpace({width:t,height:i}),e=h.width,t-=h.width,t>0&&(n+=t,t=0),i>0&&(a+=i,i=0),this.componentStore.plot.calculateSpace({width:n,height:a}),this.componentStore.plot.setBoundingBoxXY({x:e,y:s}),this.componentStore.xAxis.setRange([e,e+n]),this.componentStore.xAxis.setBoundingBoxXY({x:e,y:s+a}),this.componentStore.yAxis.setRange([s,s+a]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:s}),this.chartData.plots.some((t=>r(t)))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let t=this.chartConfig.width,i=this.chartConfig.height,e=0,s=0,n=0,a=Math.floor(t*this.chartConfig.plotReservedSpacePercent/100),h=Math.floor(i*this.chartConfig.plotReservedSpacePercent/100),o=this.componentStore.plot.calculateSpace({width:a,height:h});t-=o.width,i-=o.height,o=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:i}),e=o.height,i-=o.height,this.componentStore.xAxis.setAxisPosition("left"),o=this.componentStore.xAxis.calculateSpace({width:t,height:i}),t-=o.width,s=o.width,this.componentStore.yAxis.setAxisPosition("top"),o=this.componentStore.yAxis.calculateSpace({width:t,height:i}),i-=o.height,n=e+o.height,t>0&&(a+=t,t=0),i>0&&(h+=i,i=0),this.componentStore.plot.calculateSpace({width:a,height:h}),this.componentStore.plot.setBoundingBoxXY({x:s,y:n}),this.componentStore.yAxis.setRange([s,s+a]),this.componentStore.yAxis.setBoundingBoxXY({x:s,y:e}),this.componentStore.xAxis.setRange([n,n+h]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:n}),this.chartData.plots.some((t=>r(t)))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){"horizontal"===this.chartConfig.chartOrientation?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();const t=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(const i of Object.values(this.componentStore))t.push(...i.getDrawableElements());return t}}class C{static build(t,i,e,s){return new S(t,i,e,s).getDrawableElement()}}let k,_=0,T=I(),R=v(),D=M(),L=R.plotColorPalette.split(",").map((t=>t.trim())),P=!1,E=!1;function v(){const t=(0,s.E)(),i=(0,s.F)();return(0,s.C)(t.xyChart,i.themeVariables.xyChart)}function I(){const t=(0,s.F)();return(0,s.C)(s.B.xyChart,t.xyChart)}function M(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function $(t){const i=(0,s.F)();return(0,s.d)(t.trim(),i)}function z(t,i){D.xAxis={type:"linear",title:D.xAxis.title,min:t,max:i},P=!0}function B(t){let i=[];if(0===t.length)return i;if(!P){const i=c(D.xAxis)?D.xAxis.min:1/0,e=c(D.xAxis)?D.xAxis.max:-1/0;z(Math.min(i,1),Math.max(e,t.length))}if(E||function(t){const i=Math.min(...t),e=Math.max(...t),s=c(D.yAxis)?D.yAxis.min:1/0,n=c(D.yAxis)?D.yAxis.max:-1/0;D.yAxis={type:"linear",title:D.yAxis.title,min:Math.min(s,i),max:Math.max(n,e)}}(t),l(D.xAxis)&&(i=D.xAxis.categories.map(((i,e)=>[i,t[e]]))),c(D.xAxis)){const e=D.xAxis.min,s=D.xAxis.max,n=(s-e+1)/t.length,a=[];for(let t=e;t<=s;t+=n)a.push(`${t}`);i=a.map(((i,e)=>[i,t[e]]))}return i}function W(t){return L[0===t?0:t%L.length]}const F={parser:o,db:{getDrawableElem:function(){if(0===D.plots.length)throw Error("No Plot to render, please provide a plot with some data");return D.title=(0,s.t)(),C.build(T,D,R,k)},clear:function(){(0,s.v)(),_=0,T=I(),D={yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]},R=v(),L=R.plotColorPalette.split(",").map((t=>t.trim())),P=!1,E=!1},setAccTitle:s.s,getAccTitle:s.g,setDiagramTitle:s.q,getDiagramTitle:s.t,getAccDescription:s.a,setAccDescription:s.b,setOrientation:function(t){T.chartOrientation="horizontal"===t?"horizontal":"vertical"},setXAxisTitle:function(t){D.xAxis.title=$(t.text)},setXAxisRangeData:z,setXAxisBand:function(t){D.xAxis={type:"band",title:D.xAxis.title,categories:t.map((t=>$(t.text)))},P=!0},setYAxisTitle:function(t){D.yAxis.title=$(t.text)},setYAxisRangeData:function(t,i){D.yAxis={type:"linear",title:D.yAxis.title,min:t,max:i},E=!0},setLineData:function(t,i){const e=B(i);D.plots.push({type:"line",strokeFill:W(_),strokeWidth:2,data:e}),_++},setBarData:function(t,i){const e=B(i);D.plots.push({type:"bar",fill:W(_),data:e}),_++},setTmpSVGG:function(t){k=t},getChartThemeConfig:function(){return R},getChartConfig:function(){return T}},renderer:{draw:(t,i,e,n)=>{const a=n.db,h=a.getChartThemeConfig(),o=a.getChartConfig();function r(t){return`translate(${t.x}, ${t.y}) rotate(${t.rotation||0})`}s.l.debug("Rendering xychart chart\n"+t);const l=(0,s.A)(i),c=l.append("g").attr("class","main"),g=c.append("rect").attr("width",o.width).attr("height",o.height).attr("class","background");(0,s.i)(l,o.height,o.width,!0),l.attr("viewBox",`0 0 ${o.width} ${o.height}`),g.attr("fill",h.backgroundColor),a.setTmpSVGG(l.append("g").attr("class","mermaid-tmp-group"));const u=a.getDrawableElem(),x={};function d(t){let i=c,e="";for(const[s]of t.entries()){let n=c;s>0&&x[e]&&(n=x[e]),e+=t[s],i=x[e],i||(i=x[e]=n.append("g").attr("class",t[s]))}return i}for(const s of u){if(0===s.data.length)continue;const t=d(s.groupTexts);switch(s.type){case"rect":t.selectAll("rect").data(s.data).enter().append("rect").attr("x",(t=>t.x)).attr("y",(t=>t.y)).attr("width",(t=>t.width)).attr("height",(t=>t.height)).attr("fill",(t=>t.fill)).attr("stroke",(t=>t.strokeFill)).attr("stroke-width",(t=>t.strokeWidth));break;case"text":t.selectAll("text").data(s.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",(t=>t.fill)).attr("font-size",(t=>t.fontSize)).attr("dominant-baseline",(t=>"top"===t.verticalPos?"text-before-edge":"middle")).attr("text-anchor",(t=>{return"left"===(i=t.horizontalPos)?"start":"right"===i?"end":"middle";var i})).attr("transform",(t=>r(t))).text((t=>t.text));break;case"path":t.selectAll("path").data(s.data).enter().append("path").attr("d",(t=>t.path)).attr("fill",(t=>t.fill?t.fill:"none")).attr("stroke",(t=>t.strokeFill)).attr("stroke-width",(t=>t.strokeWidth))}}}}}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/2983.236363d9.js b/pr-preview/pr-1594/assets/js/2983.236363d9.js deleted file mode 100644 index 6a72dddad2..0000000000 --- a/pr-preview/pr-1594/assets/js/2983.236363d9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2983],{14075:(e,t,n)=>{n.d(t,{M:()=>d});var r=n(69592),i=n(50053),a=n(74722);n(73046);function d(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:o(e),edges:l(e)};return r.A(e.graph())||(t.value=i.A(e.graph())),t}function o(e){return a.A(e.nodes(),(function(t){var n=e.node(t),i=e.parent(t),a={v:t};return r.A(n)||(a.value=n),r.A(i)||(a.parent=i),a}))}function l(e){return a.A(e.edges(),(function(t){var n=e.edge(t),i={v:t.v,w:t.w};return r.A(t.name)||(i.name=t.name),r.A(n)||(i.value=n),i}))}},50053:(e,t,n)=>{n.d(t,{A:()=>i});var r=n(91641);const i=function(e){return(0,r.A)(e,4)}},35364:(e,t,n)=>{n.d(t,{r:()=>E});var r=n(21176),i=n(14075),a=n(98055),d=n(99702),o=n(697),l=n(8337),s=n(26312);let c={},h={},g={};const f=(e,t)=>(d.l.trace("In isDescendant",t," ",e," = ",h[t].includes(e)),!!h[t].includes(e)),u=(e,t,n,r)=>{d.l.warn("Copying children of ",e,"root",r,"data",t.node(e),r);const i=t.children(e)||[];e!==r&&i.push(e),d.l.warn("Copying (nodes) clusterId",e,"nodes",i),i.forEach((i=>{if(t.children(i).length>0)u(i,t,n,r);else{const a=t.node(i);d.l.info("cp ",i," to ",r," with parent ",e),n.setNode(i,a),r!==t.parent(i)&&(d.l.warn("Setting parent",i,t.parent(i)),n.setParent(i,t.parent(i))),e!==r&&i!==e?(d.l.debug("Setting parent",i,e),n.setParent(i,e)):(d.l.info("In copy ",e,"root",r,"data",t.node(e),r),d.l.debug("Not Setting parent for node=",i,"cluster!==rootId",e!==r,"node!==clusterId",i!==e));const o=t.edges(i);d.l.debug("Copying Edges",o),o.forEach((i=>{d.l.info("Edge",i);const a=t.edge(i.v,i.w,i.name);d.l.info("Edge data",a,r);try{((e,t)=>(d.l.info("Descendants of ",t," is ",h[t]),d.l.info("Edge is ",e),e.v!==t&&e.w!==t&&(h[t]?h[t].includes(e.v)||f(e.v,t)||f(e.w,t)||h[t].includes(e.w):(d.l.debug("Tilt, ",t,",not in descendants"),!1))))(i,r)?(d.l.info("Copying as ",i.v,i.w,a,i.name),n.setEdge(i.v,i.w,a,i.name),d.l.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):d.l.info("Skipping copy of edge ",i.v,"--\x3e",i.w," rootId: ",r," clusterId:",e)}catch(o){d.l.error(o)}}))}d.l.debug("Removing node",i),t.removeNode(i)}))},w=(e,t)=>{const n=t.children(e);let r=[...n];for(const i of n)g[i]=e,r=[...r,...w(i,t)];return r},p=(e,t)=>{d.l.trace("Searching",e);const n=t.children(e);if(d.l.trace("Searching children of id ",e,n),n.length<1)return d.l.trace("This is a valid node",e),e;for(const r of n){const n=p(r,t);if(n)return d.l.trace("Found replacement for",e," => ",n),n}},v=e=>c[e]&&c[e].externalConnections&&c[e]?c[e].id:e,y=(e,t)=>{if(d.l.warn("extractor - ",t,i.M(e),e.children("D")),t>10)return void d.l.error("Bailing out");let n=e.nodes(),r=!1;for(const i of n){const t=e.children(i);r=r||t.length>0}if(r){d.l.debug("Nodes = ",n,t);for(const r of n)if(d.l.debug("Extracting node",r,c,c[r]&&!c[r].externalConnections,!e.parent(r),e.node(r),e.children("D")," Depth ",t),c[r])if(!c[r].externalConnections&&e.children(r)&&e.children(r).length>0){d.l.warn("Cluster without external connections, without a parent and with children",r,t);let n="TB"===e.graph().rankdir?"LR":"TB";c[r]&&c[r].clusterData&&c[r].clusterData.dir&&(n=c[r].clusterData.dir,d.l.warn("Fixing dir",c[r].clusterData.dir,n));const a=new o.T({multigraph:!0,compound:!0}).setGraph({rankdir:n,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));d.l.warn("Old graph before copy",i.M(e)),u(r,e,a,r),e.setNode(r,{clusterNode:!0,id:r,clusterData:c[r].clusterData,labelText:c[r].labelText,graph:a}),d.l.warn("New graph after copy node: (",r,")",i.M(a)),d.l.debug("Old graph after copy",i.M(e))}else d.l.warn("Cluster ** ",r," **not meeting the criteria !externalConnections:",!c[r].externalConnections," no parent: ",!e.parent(r)," children ",e.children(r)&&e.children(r).length>0,e.children("D"),t),d.l.debug(c);else d.l.debug("Not a cluster",r,t);n=e.nodes(),d.l.warn("New list of nodes",n);for(const r of n){const n=e.node(r);d.l.warn(" Now next level",r,n),n.clusterNode&&y(n.graph,t+1)}}else d.l.debug("Done, no node has children",e.nodes())},x=(e,t)=>{if(0===t.length)return[];let n=Object.assign(t);return t.forEach((t=>{const r=e.children(t),i=x(e,r);n=[...n,...i]})),n},m={rect:(e,t)=>{d.l.info("Creating subgraph rect for ",t.id,t);const n=(0,d.c)(),r=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),i=r.insert("rect",":first-child"),o=(0,d.m)(n.flowchart.htmlLabels),c=r.insert("g").attr("class","cluster-label"),h="markdown"===t.labelType?(0,l.a)(c,t.labelText,{style:t.labelStyle,useHtmlLabels:o}):c.node().appendChild((0,a.c)(t.labelText,t.labelStyle,void 0,!0));let g=h.getBBox();if((0,d.m)(n.flowchart.htmlLabels)){const e=h.children[0],t=(0,s.Ltv)(h);g=e.getBoundingClientRect(),t.attr("width",g.width),t.attr("height",g.height)}const f=0*t.padding,u=f/2,w=t.width<=g.width+f?g.width+f:t.width;t.width<=g.width+f?t.diff=(g.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,d.l.trace("Data ",t,JSON.stringify(t)),i.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-w/2).attr("y",t.y-t.height/2-u).attr("width",w).attr("height",t.height+f);const{subGraphTitleTopMargin:p}=(0,a.g)(n);o?c.attr("transform",`translate(${t.x-g.width/2}, ${t.y-t.height/2+p})`):c.attr("transform",`translate(${t.x}, ${t.y-t.height/2+p})`);const v=i.node().getBBox();return t.width=v.width,t.height=v.height,t.intersect=function(e){return(0,a.i)(t,e)},r},roundedWithTitle:(e,t)=>{const n=(0,d.c)(),r=e.insert("g").attr("class",t.classes).attr("id",t.id),i=r.insert("rect",":first-child"),o=r.insert("g").attr("class","cluster-label"),l=r.append("rect"),c=o.node().appendChild((0,a.c)(t.labelText,t.labelStyle,void 0,!0));let h=c.getBBox();if((0,d.m)(n.flowchart.htmlLabels)){const e=c.children[0],t=(0,s.Ltv)(c);h=e.getBoundingClientRect(),t.attr("width",h.width),t.attr("height",h.height)}h=c.getBBox();const g=0*t.padding,f=g/2,u=t.width<=h.width+t.padding?h.width+t.padding:t.width;t.width<=h.width+t.padding?t.diff=(h.width+0*t.padding-t.width)/2:t.diff=-t.padding/2,i.attr("class","outer").attr("x",t.x-u/2-f).attr("y",t.y-t.height/2-f).attr("width",u+g).attr("height",t.height+g),l.attr("class","inner").attr("x",t.x-u/2-f).attr("y",t.y-t.height/2-f+h.height-1).attr("width",u+g).attr("height",t.height+g-h.height-3);const{subGraphTitleTopMargin:w}=(0,a.g)(n);o.attr("transform",`translate(${t.x-h.width/2}, ${t.y-t.height/2-t.padding/3+((0,d.m)(n.flowchart.htmlLabels)?5:3)+w})`);const p=i.node().getBBox();return t.height=p.height,t.intersect=function(e){return(0,a.i)(t,e)},r},noteGroup:(e,t)=>{const n=e.insert("g").attr("class","note-cluster").attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,d=i/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-d).attr("y",t.y-t.height/2-d).attr("width",t.width+i).attr("height",t.height+i).attr("fill","none");const o=r.node().getBBox();return t.width=o.width,t.height=o.height,t.intersect=function(e){return(0,a.i)(t,e)},n},divider:(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,d=i/2;r.attr("class","divider").attr("x",t.x-t.width/2-d).attr("y",t.y-t.height/2).attr("width",t.width+i).attr("height",t.height+i);const o=r.node().getBBox();return t.width=o.width,t.height=o.height,t.diff=-t.padding/2,t.intersect=function(e){return(0,a.i)(t,e)},n}};let b={};const C=async(e,t,n,o,l,s)=>{d.l.info("Graph in recursive render: XXX",i.M(t),l);const h=t.graph().rankdir;d.l.trace("Dir in recursive render - dir:",h);const g=e.insert("g").attr("class","root");t.nodes()?d.l.info("Recursive render XXX",t.nodes()):d.l.info("No nodes found for",t),t.edges().length>0&&d.l.trace("Recursive edges",t.edge(t.edges()[0]));const f=g.insert("g").attr("class","clusters"),u=g.insert("g").attr("class","edgePaths"),w=g.insert("g").attr("class","edgeLabels"),v=g.insert("g").attr("class","nodes");await Promise.all(t.nodes().map((async function(e){const r=t.node(e);if(void 0!==l){const n=JSON.parse(JSON.stringify(l.clusterData));d.l.info("Setting data for cluster XXX (",e,") ",n,l),t.setNode(l.id,n),t.parent(e)||(d.l.trace("Setting parent",e,l.id),t.setParent(e,l.id,n))}if(d.l.info("(Insert) Node XXX"+e+": "+JSON.stringify(t.node(e))),r&&r.clusterNode){d.l.info("Cluster identified",e,r.width,t.node(e));const i=await C(v,r.graph,n,o,t.node(e),s),l=i.elem;(0,a.u)(r,l),r.diff=i.diff||0,d.l.info("Node bounds (abc123)",e,r,r.width,r.x,r.y),(0,a.s)(l,r),d.l.warn("Recursive render complete ",l,r)}else t.children(e).length>0?(d.l.info("Cluster - the non recursive path XXX",e,r.id,r,t),d.l.info(p(r.id,t)),c[r.id]={id:p(r.id,t),node:r}):(d.l.info("Node - the non recursive path",e,r.id,r),await(0,a.e)(v,t.node(e),h))}))),t.edges().forEach((function(e){const n=t.edge(e.v,e.w,e.name);d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),d.l.info("Edge "+e.v+" -> "+e.w+": ",e," ",JSON.stringify(t.edge(e))),d.l.info("Fix",c,"ids:",e.v,e.w,"Translating: ",c[e.v],c[e.w]),(0,a.f)(w,n)})),t.edges().forEach((function(e){d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e))})),d.l.info("#############################################"),d.l.info("### Layout ###"),d.l.info("#############################################"),d.l.info(t),(0,r.Zp)(t),d.l.info("Graph after layout:",i.M(t));let y=0;const{subGraphTitleTotalMargin:E}=(0,a.g)(s);return(e=>x(e,e.children()))(t).forEach((function(e){const n=t.node(e);d.l.info("Position "+e+": "+JSON.stringify(t.node(e))),d.l.info("Position "+e+": ("+n.x,","+n.y,") width: ",n.width," height: ",n.height),n&&n.clusterNode?(n.y+=E,(0,a.p)(n)):t.children(e).length>0?(n.height+=E,((e,t)=>{d.l.trace("Inserting cluster");const n=t.shape||"rect";b[t.id]=m[n](e,t)})(f,n),c[n.id].node=n):(n.y+=E/2,(0,a.p)(n))})),t.edges().forEach((function(e){const r=t.edge(e);d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(r),r),r.points.forEach((e=>e.y+=E/2));const i=(0,a.h)(u,e,r,c,n,t,o);(0,a.j)(r,i)})),t.nodes().forEach((function(e){const n=t.node(e);d.l.info(e,n.type,n.diff),"group"===n.type&&(y=n.diff)})),{elem:g,diff:y}},E=async(e,t,n,r,o)=>{(0,a.a)(e,n,r,o),(0,a.b)(),(0,a.d)(),b={},h={},g={},c={},d.l.warn("Graph at first:",JSON.stringify(i.M(t))),((e,t)=>{if(!e||t>10)d.l.debug("Opting out, no graph ");else{d.l.debug("Opting in, graph "),e.nodes().forEach((function(t){e.children(t).length>0&&(d.l.warn("Cluster identified",t," Replacement id in edges: ",p(t,e)),h[t]=w(t,e),c[t]={id:p(t,e),clusterData:e.node(t)})})),e.nodes().forEach((function(t){const n=e.children(t),r=e.edges();n.length>0?(d.l.debug("Cluster identified",t,h),r.forEach((e=>{e.v!==t&&e.w!==t&&f(e.v,t)^f(e.w,t)&&(d.l.warn("Edge: ",e," leaves cluster ",t),d.l.warn("Descendants of XXX ",t,": ",h[t]),c[t].externalConnections=!0)}))):d.l.debug("Not a cluster ",t,h)}));for(let t of Object.keys(c)){const n=c[t].id,r=e.parent(n);r!==t&&c[r]&&!c[r].externalConnections&&(c[t].id=r)}e.edges().forEach((function(t){const n=e.edge(t);d.l.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),d.l.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e.edge(t)));let r=t.v,i=t.w;if(d.l.warn("Fix XXX",c,"ids:",t.v,t.w,"Translating: ",c[t.v]," --- ",c[t.w]),c[t.v]&&c[t.w]&&c[t.v]===c[t.w]){d.l.warn("Fixing and trixing link to self - removing XXX",t.v,t.w,t.name),d.l.warn("Fixing and trixing - removing XXX",t.v,t.w,t.name),r=v(t.v),i=v(t.w),e.removeEdge(t.v,t.w,t.name);const a=t.w+"---"+t.v;e.setNode(a,{domId:a,id:a,labelStyle:"",labelText:n.label,padding:0,shape:"labelRect",style:""});const o=structuredClone(n),l=structuredClone(n);o.label="",o.arrowTypeEnd="none",l.label="",o.fromCluster=t.v,l.toCluster=t.v,e.setEdge(r,a,o,t.name+"-cyclic-special"),e.setEdge(a,i,l,t.name+"-cyclic-special")}else if(c[t.v]||c[t.w]){if(d.l.warn("Fixing and trixing - removing XXX",t.v,t.w,t.name),r=v(t.v),i=v(t.w),e.removeEdge(t.v,t.w,t.name),r!==t.v){const i=e.parent(r);c[i].externalConnections=!0,n.fromCluster=t.v}if(i!==t.w){const r=e.parent(i);c[r].externalConnections=!0,n.toCluster=t.w}d.l.warn("Fix Replacing with XXX",r,i,t.name),e.setEdge(r,i,n,t.name)}})),d.l.warn("Adjusted Graph",i.M(e)),y(e,0),d.l.trace(c)}})(t),d.l.warn("Graph after:",JSON.stringify(i.M(t)));const l=(0,d.c)();await C(e,t,r,o,void 0,l)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/2e3ffc99.3c49228a.js b/pr-preview/pr-1594/assets/js/2e3ffc99.3c49228a.js deleted file mode 100644 index f8ba5caa78..0000000000 --- a/pr-preview/pr-1594/assets/js/2e3ffc99.3c49228a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8036],{44392:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var t=i(74848),a=i(28453);const o={},s="Schema evolution",r={id:"guides/schema-evolution",title:"Schema evolution",description:"When collection specifications and schemas change, you must make corresponding changes in other parts of your Data Flow to avoid errors. In this guide, you'll learn how to respond to different types of collection changes.",source:"@site/docs/guides/schema-evolution.md",sourceDirName:"guides",slug:"/guides/schema-evolution",permalink:"/pr-preview/pr-1594/guides/schema-evolution",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/schema-evolution.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"How to join two collections (TypeScript)",permalink:"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript"},next:{title:"How to transform data using TypeScript",permalink:"/pr-preview/pr-1594/guides/transform_data_using_typescript"}},c={},l=[{value:"Introduction",id:"introduction",level:2},{value:"Schema evolution scenarios",id:"schema-evolution-scenarios",level:2},{value:"Re-creating a collection",id:"re-creating-a-collection",level:3},{value:"A new field is added",id:"a-new-field-is-added",level:3},{value:"A field's data type has changed",id:"a-fields-data-type-has-changed",level:3},{value:"A field was removed",id:"a-field-was-removed",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"schema-evolution",children:"Schema evolution"}),"\n",(0,t.jsx)(n.p,{children:"When collection specifications and schemas change, you must make corresponding changes in other parts of your Data Flow to avoid errors. In this guide, you'll learn how to respond to different types of collection changes."}),"\n",(0,t.jsxs)(n.p,{children:["Manual methods (using flowctl) as well as features available in the Flow web app are covered here.\nFor an in-depth overview of the automatic schema evolution feature in the web app and how it works, see ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/evolutions",children:"this article"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsxs)(n.p,{children:["Flow ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections",children:"collections"})," serve not only as your real-time data storage, but also as a contract between tasks that produce and consume their data. ",(0,t.jsx)(n.strong,{children:"Captures"})," are producers, ",(0,t.jsx)(n.strong,{children:"materializations"})," are consumers, and ",(0,t.jsx)(n.strong,{children:"derivations"})," can act as either."]}),"\n",(0,t.jsx)(n.p,{children:"This contract helps prevent data loss and error in your Data Flows, and is defined in terms of the collection specification, or spec, which includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"The JSON schema"}),"\n",(0,t.jsxs)(n.li,{children:["The collection ",(0,t.jsx)(n.code,{children:"key"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections",children:"Projections"}),", if any"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"There are many reasons a collection spec might change. Often, it's due to a change in the source data. Regardless, you'll need to make changes to downstream tasks \u2014 most often, materializations \u2014\xa0to avoid errors."}),"\n",(0,t.jsx)(n.h2,{id:"schema-evolution-scenarios",children:"Schema evolution scenarios"}),"\n",(0,t.jsx)(n.p,{children:"This guide is broken down into sections for different common scenarios, depending on which properties of the collection spec have changed."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsxs)(n.a,{href:"#re-creating-a-collection",children:["The ",(0,t.jsx)(n.code,{children:"key"})," pointers have changed"]})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#re-creating-a-collection",children:"The logical partitioning configuration has changed"})}),"\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.code,{children:"schema"})," (or ",(0,t.jsx)(n.code,{children:"readSchema"})," if defined separately) has changed","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#a-new-field-is-added",children:"A new field is added"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#a-fields-data-type-has-changed",children:"A field's data type has changed"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#a-field-was-removed",children:"A field was removed"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["There are a variety of reasons why these properties may change, and also different mechanisms for detecting changes in source data. In general, it doesn't matter why the collection spec has changed, only ",(0,t.jsx)(n.em,{children:"what"})," has changed. However, ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#automatically-update-captures",children:"AutoDiscovers"})," are able to handle some of these scenarios automatically. Where applicable, AutoDiscover behavior will be called out under each section."]})}),"\n",(0,t.jsx)(n.h3,{id:"re-creating-a-collection",children:"Re-creating a collection"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsxs)(n.em,{children:["Scenario: the ",(0,t.jsx)(n.code,{children:"key"})," pointer or logical partitioning configurations have changed."]})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"key"})," of a Flow collection cannot be changed after the collection is created. The same is true of the logical partitioning, which also cannot be changed after the collection is created."]}),"\n",(0,t.jsx)(n.p,{children:"If you need to change either of those parts of a collection spec, you'll need to create a new collection and update the bindings of any captures or materializations that reference the old collection."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Web app workflow"})}),"\n",(0,t.jsx)(n.p,{children:"If you're working in the Flow web app, you'll see an error message and an option to re-create the collection as shown in the example below."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:i(65035).A+"",width:"2318",height:"1215"})}),"\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Apply"})," to re-create the collection and update any tasks that reference the old collection with the new name."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"flowctl workflow:"})}),"\n",(0,t.jsxs)(n.p,{children:["If you're working with flowctl, you'll need to re-create the collection manually in your ",(0,t.jsx)(n.code,{children:"flow.yaml"})," file. You must also update any captures or materializations that reference it. For example, say you have a data flow defined by the following specs:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"captures:\n acmeCo/inventory/source-postgres:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-postgres:v1\n config: encrypted-pg-config.sops.yaml\n bindings:\n - resource:\n namespace: public\n stream: anvils\n mode: Normal\n target: acmeCo/inventory/anvils\n\ncollections:\n acmeCo/inventory/anvils:\n key: [/sku]\n schema:\n type: object\n properties:\n sku: { type: string }\n warehouse_id: { type: string }\n quantity: { type: integer }\n required: [sku, warehouse_id, quantity]\n\nmaterializations:\n acmeCo/data-warehouse/materialize-snowflake:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-snowflake:v1\n config: encrypted-snowflake-config.sops.yaml\n bindings:\n - source: acmeCo/inventory/anvils\n resource:\n table: anvils\n schema: inventory\n"})}),"\n",(0,t.jsxs)(n.p,{children:["To change the collection key, you would update the YAML like so. Note the capture ",(0,t.jsx)(n.code,{children:"target"}),", collection name, and materialization ",(0,t.jsx)(n.code,{children:"source"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"captures:\n acmeCo/inventory/source-postgres:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-postgres:v1\n config: encrypted-pg-config.sops.yaml\n bindings:\n - resource:\n namespace: public\n stream: anvils\n mode: Normal\n backfill: 1\n target: acmeCo/inventory/anvils_v2\n\ncollections:\n acmeCo/inventory/anvils_v2:\n key: [/sku]\n schema:\n type: object\n properties:\n sku: { type: string }\n warehouse_id: { type: string }\n quantity: { type: integer }\n required: [sku, warehouse_id, quantity]\n\nmaterializations:\n acmeCo/data-warehouse/materialize-snowflake:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-snowflake:v1\n config: encrypted-snowflake-config.sops.yaml\n bindings:\n - source: acmeCo/inventory/anvils_v2\n backfill: 1\n resource:\n table: anvils\n schema: inventory\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The existing ",(0,t.jsx)(n.code,{children:"acmeCo/inventory/anvils"})," collection will not be modified and will remain in place, but won't update because no captures are writing to it."]}),"\n",(0,t.jsxs)(n.p,{children:["Also note the addition of the ",(0,t.jsx)(n.code,{children:"backfill"})," property. If the ",(0,t.jsx)(n.code,{children:"backfill"})," property already exists, just increment its value. For the materialization, this will ensure that the destination table in Snowflake gets dropped and re-created, and that the materialization will backfill it from the beginning. In the capture, it similarly causes it to start over from the beginning, writing the captured data into the new collection."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Auto-Discovers:"})}),"\n",(0,t.jsxs)(n.p,{children:["If you enabled the option to ",(0,t.jsxs)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#automatically-update-captures",children:[(0,t.jsx)(n.strong,{children:"Automatically keep schemas up to date"})," (",(0,t.jsx)(n.code,{children:"autoDiscover"}),")"]})," and selected ",(0,t.jsx)(n.strong,{children:"Breaking change re-versions collections"})," (",(0,t.jsx)(n.code,{children:"evolveIncompatibleCollections"}),") for the capture, this evolution would be performed automatically."]}),"\n",(0,t.jsx)(n.h3,{id:"a-new-field-is-added",children:"A new field is added"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"Scenario: this is one way in which the schema can change."})}),"\n",(0,t.jsxs)(n.p,{children:["When a new field appears in the collection schema, it ",(0,t.jsx)(n.em,{children:"may"})," automatically be added to any materializations that use ",(0,t.jsx)(n.code,{children:"recommended"})," fields. Recommended fields are enabled by default in each binding. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#projected-fields",children:"the materialization docs"})," for more info about how to enable or disable ",(0,t.jsx)(n.code,{children:"recommended"})," fields."]}),"\n",(0,t.jsx)(n.p,{children:'When recommended fields are enabled, new fields are added automatically if they meet the criteria for the particular materialization connector. For example, scalar fields (strings, numbers, and booleans) are considered "recommended" fields when materializing to database tables.'}),"\n",(0,t.jsxs)(n.p,{children:["If your materialization binding is set to ",(0,t.jsx)(n.code,{children:"recommended: false"}),", or if the new field is not recommended, you can manually add it to the materialization."]}),"\n",(0,t.jsx)(n.p,{children:"To manually add a field:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"In the Flow web app,"})," ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/edit-data-flows#edit-a-materialization",children:"edit the materialization"}),", find the affected binding, and click ",(0,t.jsx)(n.strong,{children:"Show Fields"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Using flowctl,"})," add the field to ",(0,t.jsx)(n.code,{children:"fields.include"})," in the materialization specification as shown ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#projected-fields",children:"here"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["Newly added fields will not be set for rows that have already been materialized. If you want to ensure that all rows have the new field, just increment the ",(0,t.jsx)(n.code,{children:"backfill"})," counter in the affected binding to have it re-start from the beginning."]})}),"\n",(0,t.jsx)(n.h3,{id:"a-fields-data-type-has-changed",children:"A field's data type has changed"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"Scenario: this is one way in which the schema can change."})}),"\n",(0,t.jsx)(n.p,{children:"When a field's data type has changed, the effect on your materialization depends on the specific connector you're using."}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Note that these restrictions only apply to fields that are actively being materialized. If a field is ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#projected-fields",children:"excluded from your materialization"}),", either explicitly or because it's not recommended, then the data types may change in any way."]}),(0,t.jsxs)(n.p,{children:["Regardless of whether the field is materialized or not, it must still pass schema validation tests. Therefore, you must still make sure existing data remains valid against the new schema. For example, if you changed ",(0,t.jsx)(n.code,{children:"excluded_field: { type: string }"})," to ",(0,t.jsx)(n.code,{children:"type: integer"})," while there was existing data with string values, your materialization would fail due to a schema validation error."]})]}),"\n",(0,t.jsxs)(n.p,{children:["Database and data warehouse materializations tend to be somewhat restrictive about changing column types. They typically only allow dropping ",(0,t.jsx)(n.code,{children:"NOT NULL"})," constraints. This means that you can safely change a schema to make a required field optional, or to add ",(0,t.jsx)(n.code,{children:"null"})," as a possible type, and the materialization will continue to work normally. Most other types of changes will require materializing into a new table."]}),"\n",(0,t.jsx)(n.p,{children:"The best way to find out whether a change is acceptable to a given connector is to run test or attempt to re-publish. Failed attempts to publish won't affect any tasks that are already running."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Web app workflow"})}),"\n",(0,t.jsxs)(n.p,{children:["If you're working in the Flow web app, and attempt to publish a change that's unacceptable to the connector, you'll see an error message and an offer to increment the necessary ",(0,t.jsx)(n.code,{children:"backfill"})," counters, or, in rare cases, to re-create the collection."]}),"\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Apply"})," to to accept this solution and continue to publish."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"flowctl workflow"})}),"\n",(0,t.jsx)(n.p,{children:"If you test or attempt to publish a change that's unacceptable to the connector, you'll see an error message pointing to the field that's changed. In most cases, you can work around the issue by manually updating the materialization to materialize into a new table."}),"\n",(0,t.jsx)(n.p,{children:"For example, say you have a data flow defined by the following specs:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/inventory/anvils:\n key: [/sku]\n schema:\n type: object\n properties:\n sku: { type: string }\n quantity: { type: integer }\n description: { type: string }\n required: [sku, quantity]\n\nmaterializations:\n acmeCo/data-warehouse/materialize-snowflake:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-snowflake:v1\n config: encrypted-snowflake-config.sops.yaml\n bindings:\n - source: acmeCo/inventory/anvils\n backfill: 3\n resource:\n table: anvils\n schema: inventory\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Let's say the type of ",(0,t.jsx)(n.code,{children:"description"})," was broadened to allow ",(0,t.jsx)(n.code,{children:"object"})," values in addition to ",(0,t.jsx)(n.code,{children:"string"}),". You'd update your specs as follows:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/inventory/anvils:\n key: [/sku]\n schema:\n type: object\n properties:\n sku: { type: string }\n quantity: { type: integer }\n description: { type: [string, object] }\n required: [sku, quantity]\n\nmaterializations:\n acmeCo/data-warehouse/materialize-snowflake:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-snowflake:v1\n config: encrypted-snowflake-config.sops.yaml\n bindings:\n - source: acmeCo/inventory/anvils\n backfill: 4\n resource:\n table: anvils\n schema: inventory\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Note that the only change was to increment the ",(0,t.jsx)(n.code,{children:"backfill"})," counter. If the previous binding spec did not specify ",(0,t.jsx)(n.code,{children:"backfill"}),", then just add ",(0,t.jsx)(n.code,{children:"backfill: 1"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["This works because the type is broadened, so existing values will still validate against the new schema. If this were not the case, then you'd likely need to ",(0,t.jsx)(n.a,{href:"#re-creating-a-collection",children:"re-create the whole collection"}),"."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Auto-Discovers:"})}),"\n",(0,t.jsxs)(n.p,{children:["If you enabled the option to ",(0,t.jsxs)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#automatically-update-captures",children:[(0,t.jsx)(n.strong,{children:"Automatically keep schemas up to date"})," (",(0,t.jsx)(n.code,{children:"autoDiscover"}),")"]})," and selected ",(0,t.jsx)(n.strong,{children:"Breaking change re-versions collections"})," (",(0,t.jsx)(n.code,{children:"evolveIncompatibleCollections"}),") for the capture, this evolution would be performed automatically."]}),"\n",(0,t.jsx)(n.h3,{id:"a-field-was-removed",children:"A field was removed"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"Scenario: this is one way in which the schema can change."})}),"\n",(0,t.jsxs)(n.p,{children:["Removing fields is generally allowed by all connectors, and does not require new tables or collections. Note that for database materializations, the existing column will ",(0,t.jsx)(n.em,{children:"not"})," be dropped, and will just be ignored by the materialization going forward. A ",(0,t.jsx)(n.code,{children:"NOT NULL"})," constraint would be removed from that column, but it will otherwise be left in place."]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},65035:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/evolution-re-create-ui-d8ae2ab634980751f8c87a0483f96d39.png"},28453:(e,n,i)=>{i.d(n,{R:()=>s,x:()=>r});var t=i(96540);const a={},o=t.createContext(a);function s(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/2e426791.7b73cb21.js b/pr-preview/pr-1594/assets/js/2e426791.7b73cb21.js deleted file mode 100644 index 7a831450e5..0000000000 --- a/pr-preview/pr-1594/assets/js/2e426791.7b73cb21.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9481],{94135:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=r(74848),s=r(28453);const i={},o="Amazon RDS for SQL Server",a={id:"reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver",title:"Amazon RDS for SQL Server",description:"This connector materializes Flow collections into tables in a Microsoft SQLServer database.",source:"@site/docs/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver.md",sourceDirName:"reference/Connectors/materialization-connectors/SQLServer",slug:"/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Microsoft SQLServer",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/"},next:{title:"Google Cloud SQL for SQLServer",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver"}},l={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup Amazon RDS for SQL Server",id:"setup-amazon-rds-for-sql-server",level:2},{value:"Connecting to SQLServer",id:"connecting-to-sqlserver",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Delta updates",id:"delta-updates",level:2},{value:"Reserved words",id:"reserved-words",level:2},{value:"Changelog",id:"changelog",level:2},{value:"V1: 2023-09-01",id:"v1-2023-09-01",level:4}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"amazon-rds-for-sql-server",children:"Amazon RDS for SQL Server"}),"\n",(0,t.jsx)(n.p,{children:"This connector materializes Flow collections into tables in a Microsoft SQLServer database."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or\nopen-source workflows,\n",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/materialize-sqlserver:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/materialize-sqlserver:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A SQLServer database to which to materialize, and user credentials.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"SQLServer 2017 and later are supported"}),"\n",(0,t.jsx)(n.li,{children:"The connector will create new tables in the database per your specification,\nso user credentials must have access to create new tables."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup-amazon-rds-for-sql-server",children:"Setup Amazon RDS for SQL Server"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html",children:"Modify the database"}),", setting ",(0,t.jsx)(n.strong,{children:"Public accessibility"})," to ",(0,t.jsx)(n.strong,{children:"Yes"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Edit the VPC security group associated with your database, or create a new VPC security group and associate it as described in ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html#Overview.RDSSecurityGroups.Create",children:"the Amazon documentation"}),".Create a new inbound rule and a new outbound rule that allow all traffic from the ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Follow the guide to ",(0,t.jsx)(n.a,{href:"../../../../../guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,t.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In your SQL client, connect to your instance as the default ",(0,t.jsx)(n.code,{children:"sqlserver"})," user and issue the following commands."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"USE ;\n-- Create user and password for use with the connector.\nCREATE LOGIN flow_materialize WITH PASSWORD = 'secret';\nCREATE USER flow_materialize FOR LOGIN flow_materialize;\n-- Grant control on the database to flow_materialize\nGRANT CONTROL ON DATABASE:: TO flow_materialize;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsxs)(n.li,{children:["In the ",(0,t.jsx)(n.a,{href:"https://console.aws.amazon.com/rds/",children:"RDS console"}),", note the instance's Endpoint and Port. You'll need these for the ",(0,t.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"connecting-to-sqlserver",children:"Connecting to SQLServer"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html",children:"Modify the database"}),", setting ",(0,t.jsx)(n.strong,{children:"Public accessibility"})," to ",(0,t.jsx)(n.strong,{children:"Yes"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Edit the VPC security group associated with your database, or create a new VPC security group and associate it as described in ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html#Overview.RDSSecurityGroups.Create",children:"the Amazon documentation"}),".Create a new inbound rule and a new outbound rule that allow all traffic from the ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Follow the guide to ",(0,t.jsx)(n.a,{href:"../../../../../guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,t.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In your SQL client, connect to your instance as the default ",(0,t.jsx)(n.code,{children:"sqlserver"})," user and issue the following commands."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"USE ;\n-- Create user and password for use with the connector.\nCREATE LOGIN flow_materialize WITH PASSWORD = 'Secret123!';\nCREATE USER flow_materialize FOR LOGIN flow_materialize;\n-- Grant control on the database to flow_materialize\nGRANT CONTROL ON DATABASE:: TO flow_materialize;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsxs)(n.li,{children:["In the ",(0,t.jsx)(n.a,{href:"https://console.aws.amazon.com/rds/",children:"RDS console"}),", note the instance's Endpoint and Port. You'll need these for the ",(0,t.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a SQLServer materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database."}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/database"})})}),(0,t.jsx)(n.td,{children:"Database"}),(0,t.jsx)(n.td,{children:"Name of the logical database to materialize to."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/address"})})}),(0,t.jsx)(n.td,{children:"Address"}),(0,t.jsxs)(n.td,{children:["Host and port of the database. If only the host is specified, port will default to ",(0,t.jsx)(n.code,{children:"3306"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/password"})})}),(0,t.jsx)(n.td,{children:"Password"}),(0,t.jsx)(n.td,{children:"Password for the specified database user."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/user"})})}),(0,t.jsx)(n.td,{children:"User"}),(0,t.jsx)(n.td,{children:"Database user to connect as."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/table"})})}),(0,t.jsx)(n.td,{children:"Table"}),(0,t.jsx)(n.td,{children:"Table name to materialize to. It will be created by the connector, unless the connector has previously created it."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/delta_updates"})}),(0,t.jsx)(n.td,{children:"Delta Update"}),(0,t.jsx)(n.td,{children:"Should updates to this table be done via delta updates."}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-sqlserver:dev\n config:\n database: flow\n address: localhost:5432\n password: flow\n user: flow\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,t.jsxs)(n.p,{children:["This connector supports both standard (merge) and ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]}),"\n",(0,t.jsx)(n.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,t.jsxs)(n.p,{children:["SQLServer has a list of reserved words that must be quoted in order to be used as an identifier.\nFlow considers all the reserved words in the official ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-2017",children:"SQLServer documentation"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"These reserved words are listed in the table below. Flow automatically quotes fields that are in this list."}),"\n",(0,t.jsx)(n.p,{children:"| Reserved words | | | | |\n| -------------- | ------------- | ------------- | ------------- | ------------- | ----- |\n| absolute | connect | else | intersect | on |\n| action | connection | end | intersection | only |\n| ada | constraint | end-exec | interval | open |\n| add | constraints | equals | into | opendatasourc |\n| admin | constructor | errlvl | is | openquery |\n| after | contains | escape | isolation | openrowset |\n| aggregate | containstable | every | iterate | openxml |\n| alias | continue | except | join | operation |\n| all | convert | exception | key | option |\n| allocate | corr | exec | kill | or |\n| alter | corresponding | execute | language | order |\n| and | count | exists | large | ordinality |\n| any | covar_pop | exit | last | out |\n| are | covar_samp | external | lateral | outer |\n| array | create | extract | leading | output |\n| as | cross | false | left | over |\n| asc | cube | fetch | less | overlaps |\n| asensitive | cume_dist | file | level | overlay |\n| assertion | current | fillfactor | like | pad |\n| asymmetric | current_catal | filter | like_regex | parameter |\n| at | current_date | first | limit | parameters |\n| atomic | current_defau | float | lineno | partial |\n| authorization | current_path | for | ln | partition |\n| avg | current_role | foreign | load | pascal |\n| backup | current_schem | fortran | local | path |\n| before | current_time | found | localtime | percent |\n| begin | current_times | free | localtimestam | percent_rank |\n| between | current_trans | freetext | locator | percentile_co |\n| binary | current_user | freetexttable | lower | percentile_di |\n| bit | cursor | from | map | pivot |\n| bit_length | cycle | full | match | plan |\n| blob | data | fulltexttable | max | position |\n| boolean | database | function | member | position_rege |\n| both | date | fusion | merge | postfix |\n| breadth | day | general | method | precision |\n| break | dbcc | get | min | prefix |\n| browse | deallocate | global | minute | preorder |\n| bulk | dec | go | mod | prepare |\n| by | decimal | goto | modifies | preserve |\n| call | declare | grant | modify | primary |\n| called | default | group | module | print |\n| cardinality | deferrable | grouping | month | prior |\n| cascade | deferred | having | multiset | privileges |\n| cascaded | delete | hold | names | proc |\n| case | deny | holdlock | national | procedure |\n| cast | depth | host | natural | public |\n| catalog | deref | hour | nchar | raiserror |\n| char | desc | identity | nclob | range |\n| char_length | describe | identity_inse | new | read |\n| character | descriptor | identitycol | next | reads |\n| character_len | destroy | if | no | readtext |\n| check | destructor | ignore | nocheck | real |\n| checkpoint | deterministic | immediate | nonclustered | reconfigure |\n| class | diagnostics | in | none | recursive |\n| clob | dictionary | include | normalize | ref |\n| close | disconnect | index | not | references |\n| clustered | disk | indicator | null | referencing |\n| coalesce | distinct | initialize | nullif | regr_avgx |\n| collate | distributed | initially | numeric | regr_avgy |\n| collation | domain | inner | object | regr_count |\n| collect | double | inout | occurrences_r | regr_intercep |\n| column | drop | input | octet_length | regr_r2 |\n| commit | dump | insensitive | of | regr_slope |\n| completion | dynamic | insert | off | regr_sxx |\n| compute | each | int | offsets | regr_sxy |\n| condition | element | integer | old | regr_syy |\n| relative | semanticsimil | structure | truncate | window |\n| release | semanticsimil | submultiset | try_convert | with |\n| replication | sensitive | substring | tsequal | within | group |\n| restore | sequence | substring_reg | uescape | within |\n| restrict | session | sum | under | without |\n| result | session_user | symmetric | union | work |\n| return | set | system | unique | write |\n| returns | sets | system_user | unknown | writetext |\n| revert | setuser | table | unnest | xmlagg |\n| revoke | shutdown | tablesample | unpivot | xmlattributes |\n| right | similar | temporary | update | xmlbinary |\n| role | size | terminate | updatetext | xmlcast |\n| rollback | smallint | textsize | upper | xmlcomment |\n| rollup | some | than | usage | xmlconcat |\n| routine | space | then | use | xmldocument |\n| row | specific | time | user | xmlelement |\n| rowcount | specifictype | timestamp | using | xmlexists |\n| rowguidcol | sql | timezone_hour | value | xmlforest |\n| rows | sqlca | timezone_minu | values | xmliterate |\n| rule | sqlcode | to | var_pop | xmlnamespaces |\n| save | sqlerror | top | var_samp | xmlparse |\n| savepoint | sqlexception | trailing | varchar | xmlpi |\n| schema | sqlstate | tran | variable | xmlquery |\n| scope | sqlwarning | transaction | varying | xmlserialize |\n| scroll | start | translate | view | xmltable |\n| search | state | translate_reg | waitfor | xmltext |\n| second | statement | translation | when | xmlvalidate |\n| section | static | treat | whenever | year |\n| securityaudit | statistics | trigger | where | zone |\n| select | stddev_pop | trim | while |\n| semantickeyph | stddev_samp | true | width_bucket |"}),"\n",(0,t.jsx)(n.h2,{id:"changelog",children:"Changelog"}),"\n",(0,t.jsx)(n.p,{children:"The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Proceed with caution when editing materializations created with previous versions of this connector;\nediting always upgrades your materialization to the latest connector version."})}),"\n",(0,t.jsx)(n.h4,{id:"v1-2023-09-01",children:"V1: 2023-09-01"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"First version"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>a});var t=r(96540);const s={},i=t.createContext(s);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/2fea2d40.5d40aa26.js b/pr-preview/pr-1594/assets/js/2fea2d40.5d40aa26.js deleted file mode 100644 index 1c92eba0bd..0000000000 --- a/pr-preview/pr-1594/assets/js/2fea2d40.5d40aa26.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5727],{67364:(e,d,r)=>{r.r(d),r.d(d,{assets:()=>c,contentTitle:()=>i,default:()=>a,frontMatter:()=>n,metadata:()=>l,toc:()=>h});var t=r(74848),s=r(28453);const n={},i="TimescaleDB",l={id:"reference/Connectors/materialization-connectors/timescaledb",title:"TimescaleDB",description:"This connector materializes Flow collections into tables in a TimescaleDB database.",source:"@site/docs/reference/Connectors/materialization-connectors/timescaledb.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/timescaledb",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/timescaledb.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Starburst",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst"},next:{title:"Materialization Protocol",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-protocol"}},c={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Creating TimescaleDB hypertables",id:"creating-timescaledb-hypertables",level:2},{value:"Delta updates",id:"delta-updates",level:2},{value:"Reserved words",id:"reserved-words",level:2},{value:"Changelog",id:"changelog",level:2},{value:"V4: 2022-11-30",id:"v4-2022-11-30",level:4}];function x(e){const d={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d.h1,{id:"timescaledb",children:"TimescaleDB"}),"\n",(0,t.jsxs)(d.p,{children:["This connector materializes Flow collections into tables in a TimescaleDB database.\nTimescaleDB provides managed PostgreSQL instances for real-time data.\nThe connector is derived from the main ",(0,t.jsx)(d.a,{href:"/reference/Connectors/materialization-connectors/PostgreSQL/",children:"PostgreSQL"})," materialization connector\nand has the same configuration."]}),"\n",(0,t.jsxs)(d.p,{children:["By default, the connector only materializes regular PostgreSQL tables in TimescaleDB.\nYou can materialize an accompanying ",(0,t.jsx)(d.a,{href:"https://docs.timescale.com/timescaledb/latest/how-to-guides/hypertables/",children:"Hypertable"})," by ",(0,t.jsx)(d.a,{href:"#creating-timescaledb-hypertables",children:"adding a SQL statement to a binding's configuration"}),"."]}),"\n",(0,t.jsxs)(d.p,{children:["The connector is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(d.a,{href:"https://ghcr.io/estuary/materialize-timescaledb:dev",children:(0,t.jsx)(d.code,{children:"ghcr.io/estuary/materialize-timescaledb:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(d.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(d.p,{children:"To use this connector, you'll need:"}),"\n",(0,t.jsxs)(d.ul,{children:["\n",(0,t.jsxs)(d.li,{children:["\n",(0,t.jsxs)(d.p,{children:["A TimescaleDB database to which to materialize. Know your user credentials, and the host and port.\nIf using Timescale Cloud, this information is available on your console, on the ",(0,t.jsx)(d.strong,{children:"Connection info"})," pane."]}),"\n"]}),"\n",(0,t.jsxs)(d.li,{children:["\n",(0,t.jsx)(d.p,{children:"At least one Flow collection."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(d.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(d.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a TimescaleDB materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database."}),"\n",(0,t.jsx)(d.p,{children:"The connector will create new tables in the database per your specification. Tables created manually in advance are not supported."}),"\n",(0,t.jsx)(d.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(d.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(d.table,{children:[(0,t.jsx)(d.thead,{children:(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.th,{children:"Property"}),(0,t.jsx)(d.th,{children:"Title"}),(0,t.jsx)(d.th,{children:"Description"}),(0,t.jsx)(d.th,{children:"Type"}),(0,t.jsx)(d.th,{children:"Required/Default"})]})}),(0,t.jsxs)(d.tbody,{children:[(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"/database"})}),(0,t.jsx)(d.td,{children:"Database"}),(0,t.jsx)(d.td,{children:"Name of the logical database to materialize to."}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.strong,{children:(0,t.jsx)(d.code,{children:"/address"})})}),(0,t.jsx)(d.td,{children:"Address"}),(0,t.jsx)(d.td,{children:"Host and port of the database"}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{children:"Required"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.strong,{children:(0,t.jsx)(d.code,{children:"/password"})})}),(0,t.jsx)(d.td,{children:"Password"}),(0,t.jsx)(d.td,{children:"Password for the specified database user."}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{children:"Required"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"/schema"})}),(0,t.jsx)(d.td,{children:"Database Schema"}),(0,t.jsxs)(d.td,{children:["Database ",(0,t.jsx)(d.a,{href:"https://docs.timescale.com/timescaledb/latest/how-to-guides/schema-management/",children:"schema"})," to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables"]}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:'"public"'})})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.strong,{children:(0,t.jsx)(d.code,{children:"/user"})})}),(0,t.jsx)(d.td,{children:"User"}),(0,t.jsx)(d.td,{children:"Database user to connect as."}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(d.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(d.table,{children:[(0,t.jsx)(d.thead,{children:(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.th,{children:"Property"}),(0,t.jsx)(d.th,{children:"Title"}),(0,t.jsx)(d.th,{children:"Description"}),(0,t.jsx)(d.th,{children:"Type"}),(0,t.jsx)(d.th,{children:"Required/Default"})]})}),(0,t.jsxs)(d.tbody,{children:[(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"/additional_table_create_sql"})}),(0,t.jsx)(d.td,{children:"Additional Table Create SQL"}),(0,t.jsxs)(d.td,{children:["Additional SQL statement(s) to be run in the same transaction that creates the table. Useful for creating ",(0,t.jsx)(d.a,{href:"#creating-timescaledb-hypertables",children:"Hypertables"}),"."]}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"/delta_updates"})}),(0,t.jsx)(d.td,{children:"Delta Update"}),(0,t.jsx)(d.td,{children:"Should updates to this table be done via delta updates."}),(0,t.jsx)(d.td,{children:"boolean"}),(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"false"})})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.code,{children:"/schema"})}),(0,t.jsx)(d.td,{children:"Alternative Schema"}),(0,t.jsx)(d.td,{children:"Alternative schema for this table (optional). Overrides schema set in endpoint configuration."}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:(0,t.jsx)(d.strong,{children:(0,t.jsx)(d.code,{children:"/table"})})}),(0,t.jsx)(d.td,{children:"Table"}),(0,t.jsx)(d.td,{children:"Table name to materialize to. It will be created by the connector, unless the connector has previously created it."}),(0,t.jsx)(d.td,{children:"string"}),(0,t.jsx)(d.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(d.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(d.pre,{children:(0,t.jsx)(d.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-timescaledb:dev\n config:\n database: flow\n address: xxxxxxxxxx.xxxxxxxxxx.tsdb.cloud.timescale.com:01234\n password: flow\n user: flow\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,t.jsx)(d.h2,{id:"creating-timescaledb-hypertables",children:"Creating TimescaleDB hypertables"}),"\n",(0,t.jsxs)(d.p,{children:[(0,t.jsx)(d.a,{href:"https://docs.timescale.com/timescaledb/latest/how-to-guides/hypertables/",children:"Hypertables"})," are PostgreSQL tables in TimescaleDB optimized for time-series data.\nThey exist alongside regular PostgreSQL tables."]}),"\n",(0,t.jsxs)(d.p,{children:["You can add Hypertables to your materialization on a per-binding basis by adding the optional ",(0,t.jsx)(d.code,{children:"/additional_table_create_sql"})," field to each ",(0,t.jsx)(d.a,{href:"#bindings",children:"binding configuration"}),"."]}),"\n",(0,t.jsx)(d.p,{children:"Your SQL statement should take the following format:"}),"\n",(0,t.jsx)(d.pre,{children:(0,t.jsx)(d.code,{className:"language-sql",children:"SELECT create_hypertable('table', 'timestamp_column');\n"})}),"\n",(0,t.jsxs)(d.p,{children:["Where 'table' matches the value for the field ",(0,t.jsx)(d.code,{children:"/table"})," in that binding, and\n'timestamp_column' is the name of the table column containing its time values."]}),"\n",(0,t.jsxs)(d.p,{children:["For example, materializing the Flow collection ",(0,t.jsx)(d.code,{children:"acmeCo/my_time_series"})," would produce a table called 'my_time_series'.\nAssuming its timestamp value is in the field 'time', the binding configuration would look like:"]}),"\n",(0,t.jsx)(d.pre,{children:(0,t.jsx)(d.code,{className:"language-yaml",children:"bindings:\n - resource:\n additional_table_create_sql: 'SELECT create_hypertable('my_time_series', 'time');'\n table: my_time_series\n source: acmeCo/my_time_series\n"})}),"\n",(0,t.jsx)(d.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,t.jsxs)(d.p,{children:["This connector supports both standard (merge) and ",(0,t.jsx)(d.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]}),"\n",(0,t.jsx)(d.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,t.jsxs)(d.p,{children:['PostgreSQL (and thus TimescaleDB) has a list of reserved words that must be quoted in order to be used as an identifier.\nFlow considers all the reserved words that are marked as "reserved" in any of the columns in the official ',(0,t.jsx)(d.a,{href:"https://www.postgresql.org/docs/current/sql-keywords-appendix.html",children:"PostgreSQL documentation"}),"."]}),"\n",(0,t.jsx)(d.p,{children:"These reserve words are listed in the table below. Flow automatically quotes fields that are in this list."}),"\n",(0,t.jsxs)(d.table,{children:[(0,t.jsx)(d.thead,{children:(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.th,{children:"Reserved words"}),(0,t.jsx)(d.th,{}),(0,t.jsx)(d.th,{}),(0,t.jsx)(d.th,{}),(0,t.jsx)(d.th,{})]})}),(0,t.jsxs)(d.tbody,{children:[(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"abs"}),(0,t.jsx)(d.td,{children:"current_transform_group_for_type"}),(0,t.jsx)(d.td,{children:"indicator"}),(0,t.jsx)(d.td,{children:"order"}),(0,t.jsx)(d.td,{children:"sqlexception"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"absolute"}),(0,t.jsx)(d.td,{children:"current_user"}),(0,t.jsx)(d.td,{children:"initial"}),(0,t.jsx)(d.td,{children:"out"}),(0,t.jsx)(d.td,{children:"sqlstate"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"acos"}),(0,t.jsx)(d.td,{children:"cursor"}),(0,t.jsx)(d.td,{children:"initially"}),(0,t.jsx)(d.td,{children:"outer"}),(0,t.jsx)(d.td,{children:"sqlwarning"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"action"}),(0,t.jsx)(d.td,{children:"cycle"}),(0,t.jsx)(d.td,{children:"inner"}),(0,t.jsx)(d.td,{children:"output"}),(0,t.jsx)(d.td,{children:"sqrt"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"add"}),(0,t.jsx)(d.td,{children:"datalink"}),(0,t.jsx)(d.td,{children:"inout"}),(0,t.jsx)(d.td,{children:"over"}),(0,t.jsx)(d.td,{children:"start"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"all"}),(0,t.jsx)(d.td,{children:"date"}),(0,t.jsx)(d.td,{children:"input"}),(0,t.jsx)(d.td,{children:"overlaps"}),(0,t.jsx)(d.td,{children:"static"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"allocate"}),(0,t.jsx)(d.td,{children:"day"}),(0,t.jsx)(d.td,{children:"insensitive"}),(0,t.jsx)(d.td,{children:"overlay"}),(0,t.jsx)(d.td,{children:"stddev_pop"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"alter"}),(0,t.jsx)(d.td,{children:"deallocate"}),(0,t.jsx)(d.td,{children:"insert"}),(0,t.jsx)(d.td,{children:"pad"}),(0,t.jsx)(d.td,{children:"stddev_samp"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"analyse"}),(0,t.jsx)(d.td,{children:"dec"}),(0,t.jsx)(d.td,{children:"int"}),(0,t.jsx)(d.td,{children:"parameter"}),(0,t.jsx)(d.td,{children:"submultiset"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"analyze"}),(0,t.jsx)(d.td,{children:"decfloat"}),(0,t.jsx)(d.td,{children:"integer"}),(0,t.jsx)(d.td,{children:"partial"}),(0,t.jsx)(d.td,{children:"subset"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"and"}),(0,t.jsx)(d.td,{children:"decimal"}),(0,t.jsx)(d.td,{children:"intersect"}),(0,t.jsx)(d.td,{children:"partition"}),(0,t.jsx)(d.td,{children:"substring"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"any"}),(0,t.jsx)(d.td,{children:"declare"}),(0,t.jsx)(d.td,{children:"intersection"}),(0,t.jsx)(d.td,{children:"pattern"}),(0,t.jsx)(d.td,{children:"substring_regex"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"are"}),(0,t.jsx)(d.td,{children:"default"}),(0,t.jsx)(d.td,{children:"interval"}),(0,t.jsx)(d.td,{children:"per"}),(0,t.jsx)(d.td,{children:"succeeds"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"array"}),(0,t.jsx)(d.td,{children:"deferrable"}),(0,t.jsx)(d.td,{children:"into"}),(0,t.jsx)(d.td,{children:"percent"}),(0,t.jsx)(d.td,{children:"sum"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"array_agg"}),(0,t.jsx)(d.td,{children:"deferred"}),(0,t.jsx)(d.td,{children:"is"}),(0,t.jsx)(d.td,{children:"percentile_cont"}),(0,t.jsx)(d.td,{children:"symmetric"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"array_max_cardinality"}),(0,t.jsx)(d.td,{children:"define"}),(0,t.jsx)(d.td,{children:"isnull"}),(0,t.jsx)(d.td,{children:"percentile_disc"}),(0,t.jsx)(d.td,{children:"system"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"as"}),(0,t.jsx)(d.td,{children:"delete"}),(0,t.jsx)(d.td,{children:"isolation"}),(0,t.jsx)(d.td,{children:"percent_rank"}),(0,t.jsx)(d.td,{children:"system_time"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"asc"}),(0,t.jsx)(d.td,{children:"dense_rank"}),(0,t.jsx)(d.td,{children:"join"}),(0,t.jsx)(d.td,{children:"period"}),(0,t.jsx)(d.td,{children:"system_user"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"asensitive"}),(0,t.jsx)(d.td,{children:"deref"}),(0,t.jsx)(d.td,{children:"json_array"}),(0,t.jsx)(d.td,{children:"permute"}),(0,t.jsx)(d.td,{children:"table"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"asin"}),(0,t.jsx)(d.td,{children:"desc"}),(0,t.jsx)(d.td,{children:"json_arrayagg"}),(0,t.jsx)(d.td,{children:"placing"}),(0,t.jsx)(d.td,{children:"tablesample"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"assertion"}),(0,t.jsx)(d.td,{children:"describe"}),(0,t.jsx)(d.td,{children:"json_exists"}),(0,t.jsx)(d.td,{children:"portion"}),(0,t.jsx)(d.td,{children:"tan"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"asymmetric"}),(0,t.jsx)(d.td,{children:"descriptor"}),(0,t.jsx)(d.td,{children:"json_object"}),(0,t.jsx)(d.td,{children:"position"}),(0,t.jsx)(d.td,{children:"tanh"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"at"}),(0,t.jsx)(d.td,{children:"deterministic"}),(0,t.jsx)(d.td,{children:"json_objectagg"}),(0,t.jsx)(d.td,{children:"position_regex"}),(0,t.jsx)(d.td,{children:"temporary"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"atan"}),(0,t.jsx)(d.td,{children:"diagnostics"}),(0,t.jsx)(d.td,{children:"json_query"}),(0,t.jsx)(d.td,{children:"power"}),(0,t.jsx)(d.td,{children:"then"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"atomic"}),(0,t.jsx)(d.td,{children:"disconnect"}),(0,t.jsx)(d.td,{children:"json_table"}),(0,t.jsx)(d.td,{children:"precedes"}),(0,t.jsx)(d.td,{children:"time"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"authorization"}),(0,t.jsx)(d.td,{children:"distinct"}),(0,t.jsx)(d.td,{children:"json_table_primitive"}),(0,t.jsx)(d.td,{children:"precision"}),(0,t.jsx)(d.td,{children:"timestamp"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"avg"}),(0,t.jsx)(d.td,{children:"dlnewcopy"}),(0,t.jsx)(d.td,{children:"json_value"}),(0,t.jsx)(d.td,{children:"prepare"}),(0,t.jsx)(d.td,{children:"timezone_hour"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"begin"}),(0,t.jsx)(d.td,{children:"dlpreviouscopy"}),(0,t.jsx)(d.td,{children:"key"}),(0,t.jsx)(d.td,{children:"preserve"}),(0,t.jsx)(d.td,{children:"timezone_minute"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"begin_frame"}),(0,t.jsx)(d.td,{children:"dlurlcomplete"}),(0,t.jsx)(d.td,{children:"lag"}),(0,t.jsx)(d.td,{children:"primary"}),(0,t.jsx)(d.td,{children:"to"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"begin_partition"}),(0,t.jsx)(d.td,{children:"dlurlcompleteonly"}),(0,t.jsx)(d.td,{children:"language"}),(0,t.jsx)(d.td,{children:"prior"}),(0,t.jsx)(d.td,{children:"trailing"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"between"}),(0,t.jsx)(d.td,{children:"dlurlcompletewrite"}),(0,t.jsx)(d.td,{children:"large"}),(0,t.jsx)(d.td,{children:"privileges"}),(0,t.jsx)(d.td,{children:"transaction"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"bigint"}),(0,t.jsx)(d.td,{children:"dlurlpath"}),(0,t.jsx)(d.td,{children:"last"}),(0,t.jsx)(d.td,{children:"procedure"}),(0,t.jsx)(d.td,{children:"translate"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"binary"}),(0,t.jsx)(d.td,{children:"dlurlpathonly"}),(0,t.jsx)(d.td,{children:"last_value"}),(0,t.jsx)(d.td,{children:"ptf"}),(0,t.jsx)(d.td,{children:"translate_regex"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"bit"}),(0,t.jsx)(d.td,{children:"dlurlpathwrite"}),(0,t.jsx)(d.td,{children:"lateral"}),(0,t.jsx)(d.td,{children:"public"}),(0,t.jsx)(d.td,{children:"translation"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"bit_length"}),(0,t.jsx)(d.td,{children:"dlurlscheme"}),(0,t.jsx)(d.td,{children:"lead"}),(0,t.jsx)(d.td,{children:"range"}),(0,t.jsx)(d.td,{children:"treat"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"blob"}),(0,t.jsx)(d.td,{children:"dlurlserver"}),(0,t.jsx)(d.td,{children:"leading"}),(0,t.jsx)(d.td,{children:"rank"}),(0,t.jsx)(d.td,{children:"trigger"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"boolean"}),(0,t.jsx)(d.td,{children:"dlvalue"}),(0,t.jsx)(d.td,{children:"left"}),(0,t.jsx)(d.td,{children:"read"}),(0,t.jsx)(d.td,{children:"trim"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"both"}),(0,t.jsx)(d.td,{children:"do"}),(0,t.jsx)(d.td,{children:"level"}),(0,t.jsx)(d.td,{children:"reads"}),(0,t.jsx)(d.td,{children:"trim_array"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"by"}),(0,t.jsx)(d.td,{children:"domain"}),(0,t.jsx)(d.td,{children:"like"}),(0,t.jsx)(d.td,{children:"real"}),(0,t.jsx)(d.td,{children:"true"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"call"}),(0,t.jsx)(d.td,{children:"double"}),(0,t.jsx)(d.td,{children:"like_regex"}),(0,t.jsx)(d.td,{children:"recursive"}),(0,t.jsx)(d.td,{children:"truncate"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"called"}),(0,t.jsx)(d.td,{children:"drop"}),(0,t.jsx)(d.td,{children:"limit"}),(0,t.jsx)(d.td,{children:"ref"}),(0,t.jsx)(d.td,{children:"uescape"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cardinality"}),(0,t.jsx)(d.td,{children:"dynamic"}),(0,t.jsx)(d.td,{children:"listagg"}),(0,t.jsx)(d.td,{children:"references"}),(0,t.jsx)(d.td,{children:"union"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cascade"}),(0,t.jsx)(d.td,{children:"each"}),(0,t.jsx)(d.td,{children:"ln"}),(0,t.jsx)(d.td,{children:"referencing"}),(0,t.jsx)(d.td,{children:"unique"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cascaded"}),(0,t.jsx)(d.td,{children:"element"}),(0,t.jsx)(d.td,{children:"local"}),(0,t.jsx)(d.td,{children:"regr_avgx"}),(0,t.jsx)(d.td,{children:"unknown"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"case"}),(0,t.jsx)(d.td,{children:"else"}),(0,t.jsx)(d.td,{children:"localtime"}),(0,t.jsx)(d.td,{children:"regr_avgy"}),(0,t.jsx)(d.td,{children:"unmatched"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cast"}),(0,t.jsx)(d.td,{children:"empty"}),(0,t.jsx)(d.td,{children:"localtimestamp"}),(0,t.jsx)(d.td,{children:"regr_count"}),(0,t.jsx)(d.td,{children:"unnest"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"catalog"}),(0,t.jsx)(d.td,{children:"end"}),(0,t.jsx)(d.td,{children:"log"}),(0,t.jsx)(d.td,{children:"regr_intercept"}),(0,t.jsx)(d.td,{children:"update"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"ceil"}),(0,t.jsx)(d.td,{children:"end-exec"}),(0,t.jsx)(d.td,{children:"log10"}),(0,t.jsx)(d.td,{children:"regr_r2"}),(0,t.jsx)(d.td,{children:"upper"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"ceiling"}),(0,t.jsx)(d.td,{children:"end_frame"}),(0,t.jsx)(d.td,{children:"lower"}),(0,t.jsx)(d.td,{children:"regr_slope"}),(0,t.jsx)(d.td,{children:"usage"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"char"}),(0,t.jsx)(d.td,{children:"end_partition"}),(0,t.jsx)(d.td,{children:"match"}),(0,t.jsx)(d.td,{children:"regr_sxx"}),(0,t.jsx)(d.td,{children:"user"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"character"}),(0,t.jsx)(d.td,{children:"equals"}),(0,t.jsx)(d.td,{children:"matches"}),(0,t.jsx)(d.td,{children:"regr_sxy"}),(0,t.jsx)(d.td,{children:"using"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"character_length"}),(0,t.jsx)(d.td,{children:"escape"}),(0,t.jsx)(d.td,{children:"match_number"}),(0,t.jsx)(d.td,{children:"regr_syy"}),(0,t.jsx)(d.td,{children:"value"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"char_length"}),(0,t.jsx)(d.td,{children:"every"}),(0,t.jsx)(d.td,{children:"match_recognize"}),(0,t.jsx)(d.td,{children:"relative"}),(0,t.jsx)(d.td,{children:"values"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"check"}),(0,t.jsx)(d.td,{children:"except"}),(0,t.jsx)(d.td,{children:"max"}),(0,t.jsx)(d.td,{children:"release"}),(0,t.jsx)(d.td,{children:"value_of"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"classifier"}),(0,t.jsx)(d.td,{children:"exception"}),(0,t.jsx)(d.td,{children:"measures"}),(0,t.jsx)(d.td,{children:"restrict"}),(0,t.jsx)(d.td,{children:"varbinary"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"clob"}),(0,t.jsx)(d.td,{children:"exec"}),(0,t.jsx)(d.td,{children:"member"}),(0,t.jsx)(d.td,{children:"result"}),(0,t.jsx)(d.td,{children:"varchar"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"close"}),(0,t.jsx)(d.td,{children:"execute"}),(0,t.jsx)(d.td,{children:"merge"}),(0,t.jsx)(d.td,{children:"return"}),(0,t.jsx)(d.td,{children:"variadic"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"coalesce"}),(0,t.jsx)(d.td,{children:"exists"}),(0,t.jsx)(d.td,{children:"method"}),(0,t.jsx)(d.td,{children:"returning"}),(0,t.jsx)(d.td,{children:"varying"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"collate"}),(0,t.jsx)(d.td,{children:"exp"}),(0,t.jsx)(d.td,{children:"min"}),(0,t.jsx)(d.td,{children:"returns"}),(0,t.jsx)(d.td,{children:"var_pop"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"collation"}),(0,t.jsx)(d.td,{children:"external"}),(0,t.jsx)(d.td,{children:"minute"}),(0,t.jsx)(d.td,{children:"revoke"}),(0,t.jsx)(d.td,{children:"var_samp"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"collect"}),(0,t.jsx)(d.td,{children:"extract"}),(0,t.jsx)(d.td,{children:"mod"}),(0,t.jsx)(d.td,{children:"right"}),(0,t.jsx)(d.td,{children:"verbose"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"column"}),(0,t.jsx)(d.td,{children:"false"}),(0,t.jsx)(d.td,{children:"modifies"}),(0,t.jsx)(d.td,{children:"rollback"}),(0,t.jsx)(d.td,{children:"versioning"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"commit"}),(0,t.jsx)(d.td,{children:"fetch"}),(0,t.jsx)(d.td,{children:"module"}),(0,t.jsx)(d.td,{children:"rollup"}),(0,t.jsx)(d.td,{children:"view"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"concurrently"}),(0,t.jsx)(d.td,{children:"filter"}),(0,t.jsx)(d.td,{children:"month"}),(0,t.jsx)(d.td,{children:"row"}),(0,t.jsx)(d.td,{children:"when"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"condition"}),(0,t.jsx)(d.td,{children:"first"}),(0,t.jsx)(d.td,{children:"multiset"}),(0,t.jsx)(d.td,{children:"rows"}),(0,t.jsx)(d.td,{children:"whenever"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"connect"}),(0,t.jsx)(d.td,{children:"first_value"}),(0,t.jsx)(d.td,{children:"names"}),(0,t.jsx)(d.td,{children:"row_number"}),(0,t.jsx)(d.td,{children:"where"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"connection"}),(0,t.jsx)(d.td,{children:"float"}),(0,t.jsx)(d.td,{children:"national"}),(0,t.jsx)(d.td,{children:"running"}),(0,t.jsx)(d.td,{children:"width_bucket"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"constraint"}),(0,t.jsx)(d.td,{children:"floor"}),(0,t.jsx)(d.td,{children:"natural"}),(0,t.jsx)(d.td,{children:"savepoint"}),(0,t.jsx)(d.td,{children:"window"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"constraints"}),(0,t.jsx)(d.td,{children:"for"}),(0,t.jsx)(d.td,{children:"nchar"}),(0,t.jsx)(d.td,{children:"schema"}),(0,t.jsx)(d.td,{children:"with"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"contains"}),(0,t.jsx)(d.td,{children:"foreign"}),(0,t.jsx)(d.td,{children:"nclob"}),(0,t.jsx)(d.td,{children:"scope"}),(0,t.jsx)(d.td,{children:"within"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"continue"}),(0,t.jsx)(d.td,{children:"found"}),(0,t.jsx)(d.td,{children:"new"}),(0,t.jsx)(d.td,{children:"scroll"}),(0,t.jsx)(d.td,{children:"without"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"convert"}),(0,t.jsx)(d.td,{children:"frame_row"}),(0,t.jsx)(d.td,{children:"next"}),(0,t.jsx)(d.td,{children:"search"}),(0,t.jsx)(d.td,{children:"work"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"copy"}),(0,t.jsx)(d.td,{children:"free"}),(0,t.jsx)(d.td,{children:"no"}),(0,t.jsx)(d.td,{children:"second"}),(0,t.jsx)(d.td,{children:"write"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"corr"}),(0,t.jsx)(d.td,{children:"freeze"}),(0,t.jsx)(d.td,{children:"none"}),(0,t.jsx)(d.td,{children:"section"}),(0,t.jsx)(d.td,{children:"xml"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"corresponding"}),(0,t.jsx)(d.td,{children:"from"}),(0,t.jsx)(d.td,{children:"normalize"}),(0,t.jsx)(d.td,{children:"seek"}),(0,t.jsx)(d.td,{children:"xmlagg"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cos"}),(0,t.jsx)(d.td,{children:"full"}),(0,t.jsx)(d.td,{children:"not"}),(0,t.jsx)(d.td,{children:"select"}),(0,t.jsx)(d.td,{children:"xmlattributes"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cosh"}),(0,t.jsx)(d.td,{children:"function"}),(0,t.jsx)(d.td,{children:"notnull"}),(0,t.jsx)(d.td,{children:"sensitive"}),(0,t.jsx)(d.td,{children:"xmlbinary"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"count"}),(0,t.jsx)(d.td,{children:"fusion"}),(0,t.jsx)(d.td,{children:"nth_value"}),(0,t.jsx)(d.td,{children:"session"}),(0,t.jsx)(d.td,{children:"xmlcast"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"covar_pop"}),(0,t.jsx)(d.td,{children:"get"}),(0,t.jsx)(d.td,{children:"ntile"}),(0,t.jsx)(d.td,{children:"session_user"}),(0,t.jsx)(d.td,{children:"xmlcomment"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"covar_samp"}),(0,t.jsx)(d.td,{children:"global"}),(0,t.jsx)(d.td,{children:"null"}),(0,t.jsx)(d.td,{children:"set"}),(0,t.jsx)(d.td,{children:"xmlconcat"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"create"}),(0,t.jsx)(d.td,{children:"go"}),(0,t.jsx)(d.td,{children:"nullif"}),(0,t.jsx)(d.td,{children:"show"}),(0,t.jsx)(d.td,{children:"xmldocument"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cross"}),(0,t.jsx)(d.td,{children:"goto"}),(0,t.jsx)(d.td,{children:"numeric"}),(0,t.jsx)(d.td,{children:"similar"}),(0,t.jsx)(d.td,{children:"xmlelement"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cube"}),(0,t.jsx)(d.td,{children:"grant"}),(0,t.jsx)(d.td,{children:"occurrences_regex"}),(0,t.jsx)(d.td,{children:"sin"}),(0,t.jsx)(d.td,{children:"xmlexists"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"cume_dist"}),(0,t.jsx)(d.td,{children:"group"}),(0,t.jsx)(d.td,{children:"octet_length"}),(0,t.jsx)(d.td,{children:"sinh"}),(0,t.jsx)(d.td,{children:"xmlforest"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current"}),(0,t.jsx)(d.td,{children:"grouping"}),(0,t.jsx)(d.td,{children:"of"}),(0,t.jsx)(d.td,{children:"size"}),(0,t.jsx)(d.td,{children:"xmliterate"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_catalog"}),(0,t.jsx)(d.td,{children:"groups"}),(0,t.jsx)(d.td,{children:"offset"}),(0,t.jsx)(d.td,{children:"skip"}),(0,t.jsx)(d.td,{children:"xmlnamespaces"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_date"}),(0,t.jsx)(d.td,{children:"having"}),(0,t.jsx)(d.td,{children:"old"}),(0,t.jsx)(d.td,{children:"smallint"}),(0,t.jsx)(d.td,{children:"xmlparse"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_default_transform_group"}),(0,t.jsx)(d.td,{children:"hold"}),(0,t.jsx)(d.td,{children:"omit"}),(0,t.jsx)(d.td,{children:"some"}),(0,t.jsx)(d.td,{children:"xmlpi"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_path"}),(0,t.jsx)(d.td,{children:"hour"}),(0,t.jsx)(d.td,{children:"on"}),(0,t.jsx)(d.td,{children:"space"}),(0,t.jsx)(d.td,{children:"xmlquery"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_role"}),(0,t.jsx)(d.td,{children:"identity"}),(0,t.jsx)(d.td,{children:"one"}),(0,t.jsx)(d.td,{children:"specific"}),(0,t.jsx)(d.td,{children:"xmlserialize"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_row"}),(0,t.jsx)(d.td,{children:"ilike"}),(0,t.jsx)(d.td,{children:"only"}),(0,t.jsx)(d.td,{children:"specifictype"}),(0,t.jsx)(d.td,{children:"xmltable"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_schema"}),(0,t.jsx)(d.td,{children:"immediate"}),(0,t.jsx)(d.td,{children:"open"}),(0,t.jsx)(d.td,{children:"sql"}),(0,t.jsx)(d.td,{children:"xmltext"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_time"}),(0,t.jsx)(d.td,{children:"import"}),(0,t.jsx)(d.td,{children:"option"}),(0,t.jsx)(d.td,{children:"sqlcode"}),(0,t.jsx)(d.td,{children:"xmlvalidate"})]}),(0,t.jsxs)(d.tr,{children:[(0,t.jsx)(d.td,{children:"current_timestamp"}),(0,t.jsx)(d.td,{children:"in"}),(0,t.jsx)(d.td,{children:"or"}),(0,t.jsx)(d.td,{children:"sqlerror"}),(0,t.jsx)(d.td,{children:"year"})]})]})]}),"\n",(0,t.jsx)(d.h2,{id:"changelog",children:"Changelog"}),"\n",(0,t.jsx)(d.p,{children:"The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed."}),"\n",(0,t.jsx)(d.p,{children:(0,t.jsx)(d.strong,{children:"Proceed with caution when editing materializations created with previous versions of this connector;\nediting always upgrades your materialization to the latest connector version."})}),"\n",(0,t.jsx)(d.h4,{id:"v4-2022-11-30",children:"V4: 2022-11-30"}),"\n",(0,t.jsx)(d.p,{children:"This version includes breaking changes to materialized table columns.\nThese provide more consistent column names and types, but tables created from previous versions of the connector may\nnot be compatible with this version."}),"\n",(0,t.jsxs)(d.ul,{children:["\n",(0,t.jsxs)(d.li,{children:["\n",(0,t.jsx)(d.p,{children:"Capitalization is now preserved when fields in Flow are converted to Postgres (TimescaleDB) column names.\nPreviously, fields containing uppercase letters were converted to lowercase."}),"\n"]}),"\n",(0,t.jsxs)(d.li,{children:["\n",(0,t.jsxs)(d.p,{children:["Field names and values of types ",(0,t.jsx)(d.code,{children:"date"}),", ",(0,t.jsx)(d.code,{children:"duration"}),", ",(0,t.jsx)(d.code,{children:"ipv4"}),", ",(0,t.jsx)(d.code,{children:"ipv6"}),", ",(0,t.jsx)(d.code,{children:"macaddr"}),", ",(0,t.jsx)(d.code,{children:"macaddr8"}),", and ",(0,t.jsx)(d.code,{children:"time"})," are now converted into\ntheir corresponding Postgres (TimescaleDB) types.\nPreviously, only ",(0,t.jsx)(d.code,{children:"date-time"})," was converted, and all others were materialized as strings."]}),"\n"]}),"\n"]})]})}function a(e={}){const{wrapper:d}={...(0,s.R)(),...e.components};return d?(0,t.jsx)(d,{...e,children:(0,t.jsx)(x,{...e})}):x(e)}},28453:(e,d,r)=>{r.d(d,{R:()=>i,x:()=>l});var t=r(96540);const s={},n=t.createContext(s);function i(e){const d=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function l(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(n.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/3068.5e00bfe3.js b/pr-preview/pr-1594/assets/js/3068.5e00bfe3.js deleted file mode 100644 index de0410d67a..0000000000 --- a/pr-preview/pr-1594/assets/js/3068.5e00bfe3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3068],{3068:(e,t,s)=>{s.d(t,{diagram:()=>V});var o=s(91245),i=s(697),a=s(26312),r=s(99702),n=s(35364);s(74353),s(16750),s(42838),s(21176),s(14075);const d="rect",l="rectWithTitle",c="statediagram",p=`${c}-state`,b="transition",g=`${b} note-edge`,h=`${c}-note`,u=`${c}-cluster`,y=`${c}-cluster-alt`,f="parent",w="note",x="----",$=`${x}${w}`,m=`${x}${f}`,T="fill:none",S="fill: #333",k="text",v="normal";let D={},A=0;function B(e="",t=0,s="",o=x){return`state-${e}${null!==s&&s.length>0?`${o}${s}`:""}-${t}`}const L=(e,t,s,i,a,n)=>{const c=s.id,b=null==(x=i[c])?"":x.classes?x.classes.join(" "):"";var x;if("root"!==c){let t=d;!0===s.start&&(t="start"),!1===s.start&&(t="end"),s.type!==o.D&&(t=s.type),D[c]||(D[c]={id:c,shape:t,description:r.e.sanitizeText(c,(0,r.c)()),classes:`${b} ${p}`});const i=D[c];s.description&&(Array.isArray(i.description)?(i.shape=l,i.description.push(s.description)):i.description.length>0?(i.shape=l,i.description===c?i.description=[s.description]:i.description=[i.description,s.description]):(i.shape=d,i.description=s.description),i.description=r.e.sanitizeTextOrArray(i.description,(0,r.c)())),1===i.description.length&&i.shape===l&&(i.shape=d),!i.type&&s.doc&&(r.l.info("Setting cluster for ",c,E(s)),i.type="group",i.dir=E(s),i.shape=s.type===o.a?"divider":"roundedWithTitle",i.classes=i.classes+" "+u+" "+(n?y:""));const a={labelStyle:"",shape:i.shape,labelText:i.description,classes:i.classes,style:"",id:c,dir:i.dir,domId:B(c,A),type:i.type,padding:15,centerLabel:!0};if(s.note){const t={labelStyle:"",shape:"note",labelText:s.note.text,classes:h,style:"",id:c+$+"-"+A,domId:B(c,A,w),type:i.type,padding:15},o={labelStyle:"",shape:"noteGroup",labelText:s.note.text,classes:i.classes,style:"",id:c+m,domId:B(c,A,f),type:"group",padding:0};A++;const r=c+m;e.setNode(r,o),e.setNode(t.id,t),e.setNode(c,a),e.setParent(c,r),e.setParent(t.id,r);let n=c,d=t.id;"left of"===s.note.position&&(n=t.id,d=c),e.setEdge(n,d,{arrowhead:"none",arrowType:"",style:T,labelStyle:"",classes:g,arrowheadStyle:S,labelpos:"c",labelType:k,thickness:v})}else e.setNode(c,a)}t&&"root"!==t.id&&(r.l.trace("Setting node ",c," to be child of its parent ",t.id),e.setParent(c,t.id)),s.doc&&(r.l.trace("Adding nodes children "),C(e,s,s.doc,i,a,!n))},C=(e,t,s,i,a,n)=>{r.l.trace("items",s),s.forEach((s=>{switch(s.stmt){case o.b:case o.D:L(e,t,s,i,a,n);break;case o.S:{L(e,t,s.state1,i,a,n),L(e,t,s.state2,i,a,n);const o={id:"edge"+A,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:T,labelStyle:"",label:r.e.sanitizeText(s.description,(0,r.c)()),arrowheadStyle:S,labelpos:"c",labelType:k,thickness:v,classes:b};e.setEdge(s.state1.id,s.state2.id,o,A),A++}}}))},E=(e,t=o.c)=>{let s=t;if(e.doc)for(let o=0;o{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute,o.d.clear()}}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/309.6dbebb91.js b/pr-preview/pr-1594/assets/js/309.6dbebb91.js deleted file mode 100644 index a6cb26dd7b..0000000000 --- a/pr-preview/pr-1594/assets/js/309.6dbebb91.js +++ /dev/null @@ -1,51749 +0,0 @@ -exports.id = 309; -exports.ids = [309]; -exports.modules = { - -/***/ 87799: -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -(function webpackUniversalModuleDefinition(root, factory) { - if(true) - module.exports = factory(__webpack_require__(23143)); - else {} -})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __nested_webpack_require_643__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_643__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __nested_webpack_require_643__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __nested_webpack_require_643__.c = installedModules; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __nested_webpack_require_643__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __nested_webpack_require_643__.d = function(exports, name, getter) { -/******/ if(!__nested_webpack_require_643__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __nested_webpack_require_643__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __nested_webpack_require_643__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __nested_webpack_require_643__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __nested_webpack_require_643__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __nested_webpack_require_643__(__nested_webpack_require_643__.s = 7); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = __WEBPACK_EXTERNAL_MODULE_0__; - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __nested_webpack_require_3185__) { - -"use strict"; - - -var FDLayoutConstants = __nested_webpack_require_3185__(0).FDLayoutConstants; - -function CoSEConstants() {} - -//CoSEConstants inherits static props in FDLayoutConstants -for (var prop in FDLayoutConstants) { - CoSEConstants[prop] = FDLayoutConstants[prop]; -} - -CoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false; -CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH; -CoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60; -CoSEConstants.TILE = true; -CoSEConstants.TILING_PADDING_VERTICAL = 10; -CoSEConstants.TILING_PADDING_HORIZONTAL = 10; -CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; // make this true when cose is used incrementally as a part of other non-incremental layout - -module.exports = CoSEConstants; - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __nested_webpack_require_4002__) { - -"use strict"; - - -var FDLayoutEdge = __nested_webpack_require_4002__(0).FDLayoutEdge; - -function CoSEEdge(source, target, vEdge) { - FDLayoutEdge.call(this, source, target, vEdge); -} - -CoSEEdge.prototype = Object.create(FDLayoutEdge.prototype); -for (var prop in FDLayoutEdge) { - CoSEEdge[prop] = FDLayoutEdge[prop]; -} - -module.exports = CoSEEdge; - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __nested_webpack_require_4409__) { - -"use strict"; - - -var LGraph = __nested_webpack_require_4409__(0).LGraph; - -function CoSEGraph(parent, graphMgr, vGraph) { - LGraph.call(this, parent, graphMgr, vGraph); -} - -CoSEGraph.prototype = Object.create(LGraph.prototype); -for (var prop in LGraph) { - CoSEGraph[prop] = LGraph[prop]; -} - -module.exports = CoSEGraph; - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __nested_webpack_require_4790__) { - -"use strict"; - - -var LGraphManager = __nested_webpack_require_4790__(0).LGraphManager; - -function CoSEGraphManager(layout) { - LGraphManager.call(this, layout); -} - -CoSEGraphManager.prototype = Object.create(LGraphManager.prototype); -for (var prop in LGraphManager) { - CoSEGraphManager[prop] = LGraphManager[prop]; -} - -module.exports = CoSEGraphManager; - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __nested_webpack_require_5205__) { - -"use strict"; - - -var FDLayoutNode = __nested_webpack_require_5205__(0).FDLayoutNode; -var IMath = __nested_webpack_require_5205__(0).IMath; - -function CoSENode(gm, loc, size, vNode) { - FDLayoutNode.call(this, gm, loc, size, vNode); -} - -CoSENode.prototype = Object.create(FDLayoutNode.prototype); -for (var prop in FDLayoutNode) { - CoSENode[prop] = FDLayoutNode[prop]; -} - -CoSENode.prototype.move = function () { - var layout = this.graphManager.getLayout(); - this.displacementX = layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren; - this.displacementY = layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren; - - if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) { - this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX); - } - - if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) { - this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY); - } - - // a simple node, just move it - if (this.child == null) { - this.moveBy(this.displacementX, this.displacementY); - } - // an empty compound node, again just move it - else if (this.child.getNodes().length == 0) { - this.moveBy(this.displacementX, this.displacementY); - } - // non-empty compound node, propogate movement to children as well - else { - this.propogateDisplacementToChildren(this.displacementX, this.displacementY); - } - - layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY); - - this.springForceX = 0; - this.springForceY = 0; - this.repulsionForceX = 0; - this.repulsionForceY = 0; - this.gravitationForceX = 0; - this.gravitationForceY = 0; - this.displacementX = 0; - this.displacementY = 0; -}; - -CoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) { - var nodes = this.getChild().getNodes(); - var node; - for (var i = 0; i < nodes.length; i++) { - node = nodes[i]; - if (node.getChild() == null) { - node.moveBy(dX, dY); - node.displacementX += dX; - node.displacementY += dY; - } else { - node.propogateDisplacementToChildren(dX, dY); - } - } -}; - -CoSENode.prototype.setPred1 = function (pred1) { - this.pred1 = pred1; -}; - -CoSENode.prototype.getPred1 = function () { - return pred1; -}; - -CoSENode.prototype.getPred2 = function () { - return pred2; -}; - -CoSENode.prototype.setNext = function (next) { - this.next = next; -}; - -CoSENode.prototype.getNext = function () { - return next; -}; - -CoSENode.prototype.setProcessed = function (processed) { - this.processed = processed; -}; - -CoSENode.prototype.isProcessed = function () { - return processed; -}; - -module.exports = CoSENode; - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __nested_webpack_require_8085__) { - -"use strict"; - - -var FDLayout = __nested_webpack_require_8085__(0).FDLayout; -var CoSEGraphManager = __nested_webpack_require_8085__(4); -var CoSEGraph = __nested_webpack_require_8085__(3); -var CoSENode = __nested_webpack_require_8085__(5); -var CoSEEdge = __nested_webpack_require_8085__(2); -var CoSEConstants = __nested_webpack_require_8085__(1); -var FDLayoutConstants = __nested_webpack_require_8085__(0).FDLayoutConstants; -var LayoutConstants = __nested_webpack_require_8085__(0).LayoutConstants; -var Point = __nested_webpack_require_8085__(0).Point; -var PointD = __nested_webpack_require_8085__(0).PointD; -var Layout = __nested_webpack_require_8085__(0).Layout; -var Integer = __nested_webpack_require_8085__(0).Integer; -var IGeometry = __nested_webpack_require_8085__(0).IGeometry; -var LGraph = __nested_webpack_require_8085__(0).LGraph; -var Transform = __nested_webpack_require_8085__(0).Transform; - -function CoSELayout() { - FDLayout.call(this); - - this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled -} - -CoSELayout.prototype = Object.create(FDLayout.prototype); - -for (var prop in FDLayout) { - CoSELayout[prop] = FDLayout[prop]; -} - -CoSELayout.prototype.newGraphManager = function () { - var gm = new CoSEGraphManager(this); - this.graphManager = gm; - return gm; -}; - -CoSELayout.prototype.newGraph = function (vGraph) { - return new CoSEGraph(null, this.graphManager, vGraph); -}; - -CoSELayout.prototype.newNode = function (vNode) { - return new CoSENode(this.graphManager, vNode); -}; - -CoSELayout.prototype.newEdge = function (vEdge) { - return new CoSEEdge(null, null, vEdge); -}; - -CoSELayout.prototype.initParameters = function () { - FDLayout.prototype.initParameters.call(this, arguments); - if (!this.isSubLayout) { - if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) { - this.idealEdgeLength = 10; - } else { - this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH; - } - - this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; - this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; - this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; - this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; - this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; - this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; - this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; - - // variables for tree reduction support - this.prunedNodesAll = []; - this.growTreeIterations = 0; - this.afterGrowthIterations = 0; - this.isTreeGrowing = false; - this.isGrowthFinished = false; - - // variables for cooling - this.coolingCycle = 0; - this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD; - this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations; - this.coolingAdjuster = 1; - } -}; - -CoSELayout.prototype.layout = function () { - var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; - if (createBendsAsNeeded) { - this.createBendpoints(); - this.graphManager.resetAllEdges(); - } - - this.level = 0; - return this.classicLayout(); -}; - -CoSELayout.prototype.classicLayout = function () { - this.nodesWithGravity = this.calculateNodesToApplyGravitationTo(); - this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity); - this.calcNoOfChildrenForAllNodes(); - this.graphManager.calcLowestCommonAncestors(); - this.graphManager.calcInclusionTreeDepths(); - this.graphManager.getRoot().calcEstimatedSize(); - this.calcIdealEdgeLengths(); - - if (!this.incremental) { - var forest = this.getFlatForest(); - - // The graph associated with this layout is flat and a forest - if (forest.length > 0) { - this.positionNodesRadially(forest); - } - // The graph associated with this layout is not flat or a forest - else { - // Reduce the trees when incremental mode is not enabled and graph is not a forest - this.reduceTrees(); - // Update nodes that gravity will be applied - this.graphManager.resetAllNodesToApplyGravitation(); - var allNodes = new Set(this.getAllNodes()); - var intersection = this.nodesWithGravity.filter(function (x) { - return allNodes.has(x); - }); - this.graphManager.setAllNodesToApplyGravitation(intersection); - - this.positionNodesRandomly(); - } - } else { - if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) { - // Reduce the trees in incremental mode if only this constant is set to true - this.reduceTrees(); - // Update nodes that gravity will be applied - this.graphManager.resetAllNodesToApplyGravitation(); - var allNodes = new Set(this.getAllNodes()); - var intersection = this.nodesWithGravity.filter(function (x) { - return allNodes.has(x); - }); - this.graphManager.setAllNodesToApplyGravitation(intersection); - } - } - - this.initSpringEmbedder(); - this.runSpringEmbedder(); - - return true; -}; - -CoSELayout.prototype.tick = function () { - this.totalIterations++; - - if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) { - if (this.prunedNodesAll.length > 0) { - this.isTreeGrowing = true; - } else { - return true; - } - } - - if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) { - if (this.isConverged()) { - if (this.prunedNodesAll.length > 0) { - this.isTreeGrowing = true; - } else { - return true; - } - } - - this.coolingCycle++; - - if (this.layoutQuality == 0) { - // quality - "draft" - this.coolingAdjuster = this.coolingCycle; - } else if (this.layoutQuality == 1) { - // quality - "default" - this.coolingAdjuster = this.coolingCycle / 3; - } - - // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3 - this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature); - this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor)); - } - // Operations while tree is growing again - if (this.isTreeGrowing) { - if (this.growTreeIterations % 10 == 0) { - if (this.prunedNodesAll.length > 0) { - this.graphManager.updateBounds(); - this.updateGrid(); - this.growTree(this.prunedNodesAll); - // Update nodes that gravity will be applied - this.graphManager.resetAllNodesToApplyGravitation(); - var allNodes = new Set(this.getAllNodes()); - var intersection = this.nodesWithGravity.filter(function (x) { - return allNodes.has(x); - }); - this.graphManager.setAllNodesToApplyGravitation(intersection); - - this.graphManager.updateBounds(); - this.updateGrid(); - this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; - } else { - this.isTreeGrowing = false; - this.isGrowthFinished = true; - } - } - this.growTreeIterations++; - } - // Operations after growth is finished - if (this.isGrowthFinished) { - if (this.isConverged()) { - return true; - } - if (this.afterGrowthIterations % 10 == 0) { - this.graphManager.updateBounds(); - this.updateGrid(); - } - this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100); - this.afterGrowthIterations++; - } - - var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished; - var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished; - - this.totalDisplacement = 0; - this.graphManager.updateBounds(); - this.calcSpringForces(); - this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate); - this.calcGravitationalForces(); - this.moveNodes(); - this.animate(); - - return false; // Layout is not ended yet return false -}; - -CoSELayout.prototype.getPositionsData = function () { - var allNodes = this.graphManager.getAllNodes(); - var pData = {}; - for (var i = 0; i < allNodes.length; i++) { - var rect = allNodes[i].rect; - var id = allNodes[i].id; - pData[id] = { - id: id, - x: rect.getCenterX(), - y: rect.getCenterY(), - w: rect.width, - h: rect.height - }; - } - - return pData; -}; - -CoSELayout.prototype.runSpringEmbedder = function () { - this.initialAnimationPeriod = 25; - this.animationPeriod = this.initialAnimationPeriod; - var layoutEnded = false; - - // If aminate option is 'during' signal that layout is supposed to start iterating - if (FDLayoutConstants.ANIMATE === 'during') { - this.emit('layoutstarted'); - } else { - // If aminate option is 'during' tick() function will be called on index.js - while (!layoutEnded) { - layoutEnded = this.tick(); - } - - this.graphManager.updateBounds(); - } -}; - -CoSELayout.prototype.calculateNodesToApplyGravitationTo = function () { - var nodeList = []; - var graph; - - var graphs = this.graphManager.getGraphs(); - var size = graphs.length; - var i; - for (i = 0; i < size; i++) { - graph = graphs[i]; - - graph.updateConnected(); - - if (!graph.isConnected) { - nodeList = nodeList.concat(graph.getNodes()); - } - } - - return nodeList; -}; - -CoSELayout.prototype.createBendpoints = function () { - var edges = []; - edges = edges.concat(this.graphManager.getAllEdges()); - var visited = new Set(); - var i; - for (i = 0; i < edges.length; i++) { - var edge = edges[i]; - - if (!visited.has(edge)) { - var source = edge.getSource(); - var target = edge.getTarget(); - - if (source == target) { - edge.getBendpoints().push(new PointD()); - edge.getBendpoints().push(new PointD()); - this.createDummyNodesForBendpoints(edge); - visited.add(edge); - } else { - var edgeList = []; - - edgeList = edgeList.concat(source.getEdgeListToNode(target)); - edgeList = edgeList.concat(target.getEdgeListToNode(source)); - - if (!visited.has(edgeList[0])) { - if (edgeList.length > 1) { - var k; - for (k = 0; k < edgeList.length; k++) { - var multiEdge = edgeList[k]; - multiEdge.getBendpoints().push(new PointD()); - this.createDummyNodesForBendpoints(multiEdge); - } - } - edgeList.forEach(function (edge) { - visited.add(edge); - }); - } - } - } - - if (visited.size == edges.length) { - break; - } - } -}; - -CoSELayout.prototype.positionNodesRadially = function (forest) { - // We tile the trees to a grid row by row; first tree starts at (0,0) - var currentStartingPoint = new Point(0, 0); - var numberOfColumns = Math.ceil(Math.sqrt(forest.length)); - var height = 0; - var currentY = 0; - var currentX = 0; - var point = new PointD(0, 0); - - for (var i = 0; i < forest.length; i++) { - if (i % numberOfColumns == 0) { - // Start of a new row, make the x coordinate 0, increment the - // y coordinate with the max height of the previous row - currentX = 0; - currentY = height; - - if (i != 0) { - currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION; - } - - height = 0; - } - - var tree = forest[i]; - - // Find the center of the tree - var centerNode = Layout.findCenterOfTree(tree); - - // Set the staring point of the next tree - currentStartingPoint.x = currentX; - currentStartingPoint.y = currentY; - - // Do a radial layout starting with the center - point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint); - - if (point.y > height) { - height = Math.floor(point.y); - } - - currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION); - } - - this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2)); -}; - -CoSELayout.radialLayout = function (tree, centerNode, startingPoint) { - var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION); - CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep); - var bounds = LGraph.calculateBounds(tree); - - var transform = new Transform(); - transform.setDeviceOrgX(bounds.getMinX()); - transform.setDeviceOrgY(bounds.getMinY()); - transform.setWorldOrgX(startingPoint.x); - transform.setWorldOrgY(startingPoint.y); - - for (var i = 0; i < tree.length; i++) { - var node = tree[i]; - node.transform(transform); - } - - var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY()); - - return transform.inverseTransformPoint(bottomRight); -}; - -CoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) { - // First, position this node by finding its angle. - var halfInterval = (endAngle - startAngle + 1) / 2; - - if (halfInterval < 0) { - halfInterval += 180; - } - - var nodeAngle = (halfInterval + startAngle) % 360; - var teta = nodeAngle * IGeometry.TWO_PI / 360; - - // Make polar to java cordinate conversion. - var cos_teta = Math.cos(teta); - var x_ = distance * Math.cos(teta); - var y_ = distance * Math.sin(teta); - - node.setCenter(x_, y_); - - // Traverse all neighbors of this node and recursively call this - // function. - var neighborEdges = []; - neighborEdges = neighborEdges.concat(node.getEdges()); - var childCount = neighborEdges.length; - - if (parentOfNode != null) { - childCount--; - } - - var branchCount = 0; - - var incEdgesCount = neighborEdges.length; - var startIndex; - - var edges = node.getEdgesBetween(parentOfNode); - - // If there are multiple edges, prune them until there remains only one - // edge. - while (edges.length > 1) { - //neighborEdges.remove(edges.remove(0)); - var temp = edges[0]; - edges.splice(0, 1); - var index = neighborEdges.indexOf(temp); - if (index >= 0) { - neighborEdges.splice(index, 1); - } - incEdgesCount--; - childCount--; - } - - if (parentOfNode != null) { - //assert edges.length == 1; - startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount; - } else { - startIndex = 0; - } - - var stepAngle = Math.abs(endAngle - startAngle) / childCount; - - for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) { - var currentNeighbor = neighborEdges[i].getOtherEnd(node); - - // Don't back traverse to root node in current tree. - if (currentNeighbor == parentOfNode) { - continue; - } - - var childStartAngle = (startAngle + branchCount * stepAngle) % 360; - var childEndAngle = (childStartAngle + stepAngle) % 360; - - CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation); - - branchCount++; - } -}; - -CoSELayout.maxDiagonalInTree = function (tree) { - var maxDiagonal = Integer.MIN_VALUE; - - for (var i = 0; i < tree.length; i++) { - var node = tree[i]; - var diagonal = node.getDiagonal(); - - if (diagonal > maxDiagonal) { - maxDiagonal = diagonal; - } - } - - return maxDiagonal; -}; - -CoSELayout.prototype.calcRepulsionRange = function () { - // formula is 2 x (level + 1) x idealEdgeLength - return 2 * (this.level + 1) * this.idealEdgeLength; -}; - -// Tiling methods - -// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's -CoSELayout.prototype.groupZeroDegreeMembers = function () { - var self = this; - // array of [parent_id x oneDegreeNode_id] - var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members - this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled - this.idToDummyNode = {}; // A map of id to dummy node - - var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled - var allNodes = this.graphManager.getAllNodes(); - - // Fill zero degree list - for (var i = 0; i < allNodes.length; i++) { - var node = allNodes[i]; - var parent = node.getParent(); - // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list - if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) { - zeroDegree.push(node); - } - } - - // Create a map of parent node and its zero degree members - for (var i = 0; i < zeroDegree.length; i++) { - var node = zeroDegree[i]; // Zero degree node itself - var p_id = node.getParent().id; // Parent id - - if (typeof tempMemberGroups[p_id] === "undefined") tempMemberGroups[p_id] = []; - - tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups - } - - // If there are at least two nodes at a level, create a dummy compound for them - Object.keys(tempMemberGroups).forEach(function (p_id) { - if (tempMemberGroups[p_id].length > 1) { - var dummyCompoundId = "DummyCompound_" + p_id; // The id of dummy compound which will be created soon - self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups - - var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound - - // Create a dummy compound with calculated id - var dummyCompound = new CoSENode(self.graphManager); - dummyCompound.id = dummyCompoundId; - dummyCompound.paddingLeft = parent.paddingLeft || 0; - dummyCompound.paddingRight = parent.paddingRight || 0; - dummyCompound.paddingBottom = parent.paddingBottom || 0; - dummyCompound.paddingTop = parent.paddingTop || 0; - - self.idToDummyNode[dummyCompoundId] = dummyCompound; - - var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound); - var parentGraph = parent.getChild(); - - // Add dummy compound to parent the graph - parentGraph.add(dummyCompound); - - // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent - for (var i = 0; i < tempMemberGroups[p_id].length; i++) { - var node = tempMemberGroups[p_id][i]; - - parentGraph.remove(node); - dummyParentGraph.add(node); - } - } - }); -}; - -CoSELayout.prototype.clearCompounds = function () { - var childGraphMap = {}; - var idToNode = {}; - - // Get compound ordering by finding the inner one first - this.performDFSOnCompounds(); - - for (var i = 0; i < this.compoundOrder.length; i++) { - - idToNode[this.compoundOrder[i].id] = this.compoundOrder[i]; - childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes()); - - // Remove children of compounds - this.graphManager.remove(this.compoundOrder[i].getChild()); - this.compoundOrder[i].child = null; - } - - this.graphManager.resetAllNodes(); - - // Tile the removed children - this.tileCompoundMembers(childGraphMap, idToNode); -}; - -CoSELayout.prototype.clearZeroDegreeMembers = function () { - var self = this; - var tiledZeroDegreePack = this.tiledZeroDegreePack = []; - - Object.keys(this.memberGroups).forEach(function (id) { - var compoundNode = self.idToDummyNode[id]; // Get the dummy compound - - tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight); - - // Set the width and height of the dummy compound as calculated - compoundNode.rect.width = tiledZeroDegreePack[id].width; - compoundNode.rect.height = tiledZeroDegreePack[id].height; - }); -}; - -CoSELayout.prototype.repopulateCompounds = function () { - for (var i = this.compoundOrder.length - 1; i >= 0; i--) { - var lCompoundNode = this.compoundOrder[i]; - var id = lCompoundNode.id; - var horizontalMargin = lCompoundNode.paddingLeft; - var verticalMargin = lCompoundNode.paddingTop; - - this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin); - } -}; - -CoSELayout.prototype.repopulateZeroDegreeMembers = function () { - var self = this; - var tiledPack = this.tiledZeroDegreePack; - - Object.keys(tiledPack).forEach(function (id) { - var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id - var horizontalMargin = compoundNode.paddingLeft; - var verticalMargin = compoundNode.paddingTop; - - // Adjust the positions of nodes wrt its compound - self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin); - }); -}; - -CoSELayout.prototype.getToBeTiled = function (node) { - var id = node.id; - //firstly check the previous results - if (this.toBeTiled[id] != null) { - return this.toBeTiled[id]; - } - - //only compound nodes are to be tiled - var childGraph = node.getChild(); - if (childGraph == null) { - this.toBeTiled[id] = false; - return false; - } - - var children = childGraph.getNodes(); // Get the children nodes - - //a compound node is not to be tiled if all of its compound children are not to be tiled - for (var i = 0; i < children.length; i++) { - var theChild = children[i]; - - if (this.getNodeDegree(theChild) > 0) { - this.toBeTiled[id] = false; - return false; - } - - //pass the children not having the compound structure - if (theChild.getChild() == null) { - this.toBeTiled[theChild.id] = false; - continue; - } - - if (!this.getToBeTiled(theChild)) { - this.toBeTiled[id] = false; - return false; - } - } - this.toBeTiled[id] = true; - return true; -}; - -// Get degree of a node depending of its edges and independent of its children -CoSELayout.prototype.getNodeDegree = function (node) { - var id = node.id; - var edges = node.getEdges(); - var degree = 0; - - // For the edges connected - for (var i = 0; i < edges.length; i++) { - var edge = edges[i]; - if (edge.getSource().id !== edge.getTarget().id) { - degree = degree + 1; - } - } - return degree; -}; - -// Get degree of a node with its children -CoSELayout.prototype.getNodeDegreeWithChildren = function (node) { - var degree = this.getNodeDegree(node); - if (node.getChild() == null) { - return degree; - } - var children = node.getChild().getNodes(); - for (var i = 0; i < children.length; i++) { - var child = children[i]; - degree += this.getNodeDegreeWithChildren(child); - } - return degree; -}; - -CoSELayout.prototype.performDFSOnCompounds = function () { - this.compoundOrder = []; - this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes()); -}; - -CoSELayout.prototype.fillCompexOrderByDFS = function (children) { - for (var i = 0; i < children.length; i++) { - var child = children[i]; - if (child.getChild() != null) { - this.fillCompexOrderByDFS(child.getChild().getNodes()); - } - if (this.getToBeTiled(child)) { - this.compoundOrder.push(child); - } - } -}; - -/** -* This method places each zero degree member wrt given (x,y) coordinates (top left). -*/ -CoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin) { - x += compoundHorizontalMargin; - y += compoundVerticalMargin; - - var left = x; - - for (var i = 0; i < organization.rows.length; i++) { - var row = organization.rows[i]; - x = left; - var maxHeight = 0; - - for (var j = 0; j < row.length; j++) { - var lnode = row[j]; - - lnode.rect.x = x; // + lnode.rect.width / 2; - lnode.rect.y = y; // + lnode.rect.height / 2; - - x += lnode.rect.width + organization.horizontalPadding; - - if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height; - } - - y += maxHeight + organization.verticalPadding; - } -}; - -CoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) { - var self = this; - this.tiledMemberPack = []; - - Object.keys(childGraphMap).forEach(function (id) { - // Get the compound node - var compoundNode = idToNode[id]; - - self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight); - - compoundNode.rect.width = self.tiledMemberPack[id].width; - compoundNode.rect.height = self.tiledMemberPack[id].height; - }); -}; - -CoSELayout.prototype.tileNodes = function (nodes, minWidth) { - var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL; - var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL; - var organization = { - rows: [], - rowWidth: [], - rowHeight: [], - width: 0, - height: minWidth, // assume minHeight equals to minWidth - verticalPadding: verticalPadding, - horizontalPadding: horizontalPadding - }; - - // Sort the nodes in ascending order of their areas - nodes.sort(function (n1, n2) { - if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1; - if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1; - return 0; - }); - - // Create the organization -> tile members - for (var i = 0; i < nodes.length; i++) { - var lNode = nodes[i]; - - if (organization.rows.length == 0) { - this.insertNodeToRow(organization, lNode, 0, minWidth); - } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) { - this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth); - } else { - this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth); - } - - this.shiftToLastRow(organization); - } - - return organization; -}; - -CoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) { - var minCompoundSize = minWidth; - - // Add new row if needed - if (rowIndex == organization.rows.length) { - var secondDimension = []; - - organization.rows.push(secondDimension); - organization.rowWidth.push(minCompoundSize); - organization.rowHeight.push(0); - } - - // Update row width - var w = organization.rowWidth[rowIndex] + node.rect.width; - - if (organization.rows[rowIndex].length > 0) { - w += organization.horizontalPadding; - } - - organization.rowWidth[rowIndex] = w; - // Update compound width - if (organization.width < w) { - organization.width = w; - } - - // Update height - var h = node.rect.height; - if (rowIndex > 0) h += organization.verticalPadding; - - var extraHeight = 0; - if (h > organization.rowHeight[rowIndex]) { - extraHeight = organization.rowHeight[rowIndex]; - organization.rowHeight[rowIndex] = h; - extraHeight = organization.rowHeight[rowIndex] - extraHeight; - } - - organization.height += extraHeight; - - // Insert node - organization.rows[rowIndex].push(node); -}; - -//Scans the rows of an organization and returns the one with the min width -CoSELayout.prototype.getShortestRowIndex = function (organization) { - var r = -1; - var min = Number.MAX_VALUE; - - for (var i = 0; i < organization.rows.length; i++) { - if (organization.rowWidth[i] < min) { - r = i; - min = organization.rowWidth[i]; - } - } - return r; -}; - -//Scans the rows of an organization and returns the one with the max width -CoSELayout.prototype.getLongestRowIndex = function (organization) { - var r = -1; - var max = Number.MIN_VALUE; - - for (var i = 0; i < organization.rows.length; i++) { - - if (organization.rowWidth[i] > max) { - r = i; - max = organization.rowWidth[i]; - } - } - - return r; -}; - -/** -* This method checks whether adding extra width to the organization violates -* the aspect ratio(1) or not. -*/ -CoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) { - - var sri = this.getShortestRowIndex(organization); - - if (sri < 0) { - return true; - } - - var min = organization.rowWidth[sri]; - - if (min + organization.horizontalPadding + extraWidth <= organization.width) return true; - - var hDiff = 0; - - // Adding to an existing row - if (organization.rowHeight[sri] < extraHeight) { - if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri]; - } - - var add_to_row_ratio; - if (organization.width - min >= extraWidth + organization.horizontalPadding) { - add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding); - } else { - add_to_row_ratio = (organization.height + hDiff) / organization.width; - } - - // Adding a new row for this node - hDiff = extraHeight + organization.verticalPadding; - var add_new_row_ratio; - if (organization.width < extraWidth) { - add_new_row_ratio = (organization.height + hDiff) / extraWidth; - } else { - add_new_row_ratio = (organization.height + hDiff) / organization.width; - } - - if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio; - - if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio; - - return add_to_row_ratio < add_new_row_ratio; -}; - -//If moving the last node from the longest row and adding it to the last -//row makes the bounding box smaller, do it. -CoSELayout.prototype.shiftToLastRow = function (organization) { - var longest = this.getLongestRowIndex(organization); - var last = organization.rowWidth.length - 1; - var row = organization.rows[longest]; - var node = row[row.length - 1]; - - var diff = node.width + organization.horizontalPadding; - - // Check if there is enough space on the last row - if (organization.width - organization.rowWidth[last] > diff && longest != last) { - // Remove the last element of the longest row - row.splice(-1, 1); - - // Push it to the last row - organization.rows[last].push(node); - - organization.rowWidth[longest] = organization.rowWidth[longest] - diff; - organization.rowWidth[last] = organization.rowWidth[last] + diff; - organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)]; - - // Update heights of the organization - var maxHeight = Number.MIN_VALUE; - for (var i = 0; i < row.length; i++) { - if (row[i].height > maxHeight) maxHeight = row[i].height; - } - if (longest > 0) maxHeight += organization.verticalPadding; - - var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last]; - - organization.rowHeight[longest] = maxHeight; - if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding; - - var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last]; - organization.height += finalTotal - prevTotal; - - this.shiftToLastRow(organization); - } -}; - -CoSELayout.prototype.tilingPreLayout = function () { - if (CoSEConstants.TILE) { - // Find zero degree nodes and create a compound for each level - this.groupZeroDegreeMembers(); - // Tile and clear children of each compound - this.clearCompounds(); - // Separately tile and clear zero degree nodes for each level - this.clearZeroDegreeMembers(); - } -}; - -CoSELayout.prototype.tilingPostLayout = function () { - if (CoSEConstants.TILE) { - this.repopulateZeroDegreeMembers(); - this.repopulateCompounds(); - } -}; - -// ----------------------------------------------------------------------------- -// Section: Tree Reduction methods -// ----------------------------------------------------------------------------- -// Reduce trees -CoSELayout.prototype.reduceTrees = function () { - var prunedNodesAll = []; - var containsLeaf = true; - var node; - - while (containsLeaf) { - var allNodes = this.graphManager.getAllNodes(); - var prunedNodesInStepTemp = []; - containsLeaf = false; - - for (var i = 0; i < allNodes.length; i++) { - node = allNodes[i]; - if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) { - prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]); - containsLeaf = true; - } - } - if (containsLeaf == true) { - var prunedNodesInStep = []; - for (var j = 0; j < prunedNodesInStepTemp.length; j++) { - if (prunedNodesInStepTemp[j][0].getEdges().length == 1) { - prunedNodesInStep.push(prunedNodesInStepTemp[j]); - prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]); - } - } - prunedNodesAll.push(prunedNodesInStep); - this.graphManager.resetAllNodes(); - this.graphManager.resetAllEdges(); - } - } - this.prunedNodesAll = prunedNodesAll; -}; - -// Grow tree one step -CoSELayout.prototype.growTree = function (prunedNodesAll) { - var lengthOfPrunedNodesInStep = prunedNodesAll.length; - var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1]; - - var nodeData; - for (var i = 0; i < prunedNodesInStep.length; i++) { - nodeData = prunedNodesInStep[i]; - - this.findPlaceforPrunedNode(nodeData); - - nodeData[2].add(nodeData[0]); - nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target); - } - - prunedNodesAll.splice(prunedNodesAll.length - 1, 1); - this.graphManager.resetAllNodes(); - this.graphManager.resetAllEdges(); -}; - -// Find an appropriate position to replace pruned node, this method can be improved -CoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) { - - var gridForPrunedNode; - var nodeToConnect; - var prunedNode = nodeData[0]; - if (prunedNode == nodeData[1].source) { - nodeToConnect = nodeData[1].target; - } else { - nodeToConnect = nodeData[1].source; - } - var startGridX = nodeToConnect.startX; - var finishGridX = nodeToConnect.finishX; - var startGridY = nodeToConnect.startY; - var finishGridY = nodeToConnect.finishY; - - var upNodeCount = 0; - var downNodeCount = 0; - var rightNodeCount = 0; - var leftNodeCount = 0; - var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount]; - - if (startGridY > 0) { - for (var i = startGridX; i <= finishGridX; i++) { - controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1; - } - } - if (finishGridX < this.grid.length - 1) { - for (var i = startGridY; i <= finishGridY; i++) { - controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1; - } - } - if (finishGridY < this.grid[0].length - 1) { - for (var i = startGridX; i <= finishGridX; i++) { - controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1; - } - } - if (startGridX > 0) { - for (var i = startGridY; i <= finishGridY; i++) { - controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1; - } - } - var min = Integer.MAX_VALUE; - var minCount; - var minIndex; - for (var j = 0; j < controlRegions.length; j++) { - if (controlRegions[j] < min) { - min = controlRegions[j]; - minCount = 1; - minIndex = j; - } else if (controlRegions[j] == min) { - minCount++; - } - } - - if (minCount == 3 && min == 0) { - if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) { - gridForPrunedNode = 1; - } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) { - gridForPrunedNode = 0; - } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { - gridForPrunedNode = 3; - } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { - gridForPrunedNode = 2; - } - } else if (minCount == 2 && min == 0) { - var random = Math.floor(Math.random() * 2); - if (controlRegions[0] == 0 && controlRegions[1] == 0) { - ; - if (random == 0) { - gridForPrunedNode = 0; - } else { - gridForPrunedNode = 1; - } - } else if (controlRegions[0] == 0 && controlRegions[2] == 0) { - if (random == 0) { - gridForPrunedNode = 0; - } else { - gridForPrunedNode = 2; - } - } else if (controlRegions[0] == 0 && controlRegions[3] == 0) { - if (random == 0) { - gridForPrunedNode = 0; - } else { - gridForPrunedNode = 3; - } - } else if (controlRegions[1] == 0 && controlRegions[2] == 0) { - if (random == 0) { - gridForPrunedNode = 1; - } else { - gridForPrunedNode = 2; - } - } else if (controlRegions[1] == 0 && controlRegions[3] == 0) { - if (random == 0) { - gridForPrunedNode = 1; - } else { - gridForPrunedNode = 3; - } - } else { - if (random == 0) { - gridForPrunedNode = 2; - } else { - gridForPrunedNode = 3; - } - } - } else if (minCount == 4 && min == 0) { - var random = Math.floor(Math.random() * 4); - gridForPrunedNode = random; - } else { - gridForPrunedNode = minIndex; - } - - if (gridForPrunedNode == 0) { - prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2); - } else if (gridForPrunedNode == 1) { - prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); - } else if (gridForPrunedNode == 2) { - prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2); - } else { - prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); - } -}; - -module.exports = CoSELayout; - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __nested_webpack_require_45620__) { - -"use strict"; - - -var coseBase = {}; - -coseBase.layoutBase = __nested_webpack_require_45620__(0); -coseBase.CoSEConstants = __nested_webpack_require_45620__(1); -coseBase.CoSEEdge = __nested_webpack_require_45620__(2); -coseBase.CoSEGraph = __nested_webpack_require_45620__(3); -coseBase.CoSEGraphManager = __nested_webpack_require_45620__(4); -coseBase.CoSELayout = __nested_webpack_require_45620__(6); -coseBase.CoSENode = __nested_webpack_require_45620__(5); - -module.exports = coseBase; - -/***/ }) -/******/ ]); -}); - -/***/ }), - -/***/ 43457: -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -(function webpackUniversalModuleDefinition(root, factory) { - if(true) - module.exports = factory(__webpack_require__(87799)); - else {} -})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __nested_webpack_require_659__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_659__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __nested_webpack_require_659__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __nested_webpack_require_659__.c = installedModules; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __nested_webpack_require_659__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __nested_webpack_require_659__.d = function(exports, name, getter) { -/******/ if(!__nested_webpack_require_659__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __nested_webpack_require_659__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __nested_webpack_require_659__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __nested_webpack_require_659__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __nested_webpack_require_659__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __nested_webpack_require_659__(__nested_webpack_require_659__.s = 1); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = __WEBPACK_EXTERNAL_MODULE_0__; - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __nested_webpack_require_3201__) { - -"use strict"; - - -var LayoutConstants = __nested_webpack_require_3201__(0).layoutBase.LayoutConstants; -var FDLayoutConstants = __nested_webpack_require_3201__(0).layoutBase.FDLayoutConstants; -var CoSEConstants = __nested_webpack_require_3201__(0).CoSEConstants; -var CoSELayout = __nested_webpack_require_3201__(0).CoSELayout; -var CoSENode = __nested_webpack_require_3201__(0).CoSENode; -var PointD = __nested_webpack_require_3201__(0).layoutBase.PointD; -var DimensionD = __nested_webpack_require_3201__(0).layoutBase.DimensionD; - -var defaults = { - // Called on `layoutready` - ready: function ready() {}, - // Called on `layoutstop` - stop: function stop() {}, - // 'draft', 'default' or 'proof" - // - 'draft' fast cooling rate - // - 'default' moderate cooling rate - // - "proof" slow cooling rate - quality: 'default', - // include labels in node dimensions - nodeDimensionsIncludeLabels: false, - // number of ticks per frame; higher is faster but more jerky - refresh: 30, - // Whether to fit the network view after when done - fit: true, - // Padding on fit - padding: 10, - // Whether to enable incremental mode - randomize: true, - // Node repulsion (non overlapping) multiplier - nodeRepulsion: 4500, - // Ideal edge (non nested) length - idealEdgeLength: 50, - // Divisor to compute edge forces - edgeElasticity: 0.45, - // Nesting factor (multiplier) to compute ideal edge length for nested edges - nestingFactor: 0.1, - // Gravity force (constant) - gravity: 0.25, - // Maximum number of iterations to perform - numIter: 2500, - // For enabling tiling - tile: true, - // Type of layout animation. The option set is {'during', 'end', false} - animate: 'end', - // Duration for animate:end - animationDuration: 500, - // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function) - tilingPaddingVertical: 10, - // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function) - tilingPaddingHorizontal: 10, - // Gravity range (constant) for compounds - gravityRangeCompound: 1.5, - // Gravity force (constant) for compounds - gravityCompound: 1.0, - // Gravity range (constant) - gravityRange: 3.8, - // Initial cooling factor for incremental layout - initialEnergyOnIncremental: 0.5 -}; - -function extend(defaults, options) { - var obj = {}; - - for (var i in defaults) { - obj[i] = defaults[i]; - } - - for (var i in options) { - obj[i] = options[i]; - } - - return obj; -}; - -function _CoSELayout(_options) { - this.options = extend(defaults, _options); - getUserOptions(this.options); -} - -var getUserOptions = function getUserOptions(options) { - if (options.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options.nodeRepulsion; - if (options.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength; - if (options.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options.edgeElasticity; - if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor; - if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity; - if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter; - if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange; - if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound; - if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound; - if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental; - - if (options.quality == 'draft') LayoutConstants.QUALITY = 0;else if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 1; - - CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels; - CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize; - CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate; - CoSEConstants.TILE = options.tile; - CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical; - CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal; -}; - -_CoSELayout.prototype.run = function () { - var ready; - var frameId; - var options = this.options; - var idToLNode = this.idToLNode = {}; - var layout = this.layout = new CoSELayout(); - var self = this; - - self.stopped = false; - - this.cy = this.options.cy; - - this.cy.trigger({ type: 'layoutstart', layout: this }); - - var gm = layout.newGraphManager(); - this.gm = gm; - - var nodes = this.options.eles.nodes(); - var edges = this.options.eles.edges(); - - this.root = gm.addRoot(); - this.processChildrenList(this.root, this.getTopMostNodes(nodes), layout); - - for (var i = 0; i < edges.length; i++) { - var edge = edges[i]; - var sourceNode = this.idToLNode[edge.data("source")]; - var targetNode = this.idToLNode[edge.data("target")]; - if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) { - var e1 = gm.add(layout.newEdge(), sourceNode, targetNode); - e1.id = edge.id(); - } - } - - var getPositions = function getPositions(ele, i) { - if (typeof ele === "number") { - ele = i; - } - var theId = ele.data('id'); - var lNode = self.idToLNode[theId]; - - return { - x: lNode.getRect().getCenterX(), - y: lNode.getRect().getCenterY() - }; - }; - - /* - * Reposition nodes in iterations animatedly - */ - var iterateAnimated = function iterateAnimated() { - // Thigs to perform after nodes are repositioned on screen - var afterReposition = function afterReposition() { - if (options.fit) { - options.cy.fit(options.eles, options.padding); - } - - if (!ready) { - ready = true; - self.cy.one('layoutready', options.ready); - self.cy.trigger({ type: 'layoutready', layout: self }); - } - }; - - var ticksPerFrame = self.options.refresh; - var isDone; - - for (var i = 0; i < ticksPerFrame && !isDone; i++) { - isDone = self.stopped || self.layout.tick(); - } - - // If layout is done - if (isDone) { - // If the layout is not a sublayout and it is successful perform post layout. - if (layout.checkLayoutSuccess() && !layout.isSubLayout) { - layout.doPostLayout(); - } - - // If layout has a tilingPostLayout function property call it. - if (layout.tilingPostLayout) { - layout.tilingPostLayout(); - } - - layout.isLayoutFinished = true; - - self.options.eles.nodes().positions(getPositions); - - afterReposition(); - - // trigger layoutstop when the layout stops (e.g. finishes) - self.cy.one('layoutstop', self.options.stop); - self.cy.trigger({ type: 'layoutstop', layout: self }); - - if (frameId) { - cancelAnimationFrame(frameId); - } - - ready = false; - return; - } - - var animationData = self.layout.getPositionsData(); // Get positions of layout nodes note that all nodes may not be layout nodes because of tiling - - // Position nodes, for the nodes whose id does not included in data (because they are removed from their parents and included in dummy compounds) - // use position of their ancestors or dummy ancestors - options.eles.nodes().positions(function (ele, i) { - if (typeof ele === "number") { - ele = i; - } - // If ele is a compound node, then its position will be defined by its children - if (!ele.isParent()) { - var theId = ele.id(); - var pNode = animationData[theId]; - var temp = ele; - // If pNode is undefined search until finding position data of its first ancestor (It may be dummy as well) - while (pNode == null) { - pNode = animationData[temp.data('parent')] || animationData['DummyCompound_' + temp.data('parent')]; - animationData[theId] = pNode; - temp = temp.parent()[0]; - if (temp == undefined) { - break; - } - } - if (pNode != null) { - return { - x: pNode.x, - y: pNode.y - }; - } else { - return { - x: ele.position('x'), - y: ele.position('y') - }; - } - } - }); - - afterReposition(); - - frameId = requestAnimationFrame(iterateAnimated); - }; - - /* - * Listen 'layoutstarted' event and start animated iteration if animate option is 'during' - */ - layout.addListener('layoutstarted', function () { - if (self.options.animate === 'during') { - frameId = requestAnimationFrame(iterateAnimated); - } - }); - - layout.runLayout(); // Run cose layout - - /* - * If animate option is not 'during' ('end' or false) perform these here (If it is 'during' similar things are already performed) - */ - if (this.options.animate !== "during") { - self.options.eles.nodes().not(":parent").layoutPositions(self, self.options, getPositions); // Use layout positions to reposition the nodes it considers the options parameter - ready = false; - } - - return this; // chaining -}; - -//Get the top most ones of a list of nodes -_CoSELayout.prototype.getTopMostNodes = function (nodes) { - var nodesMap = {}; - for (var i = 0; i < nodes.length; i++) { - nodesMap[nodes[i].id()] = true; - } - var roots = nodes.filter(function (ele, i) { - if (typeof ele === "number") { - ele = i; - } - var parent = ele.parent()[0]; - while (parent != null) { - if (nodesMap[parent.id()]) { - return false; - } - parent = parent.parent()[0]; - } - return true; - }); - - return roots; -}; - -_CoSELayout.prototype.processChildrenList = function (parent, children, layout) { - var size = children.length; - for (var i = 0; i < size; i++) { - var theChild = children[i]; - var children_of_children = theChild.children(); - var theNode; - - var dimensions = theChild.layoutDimensions({ - nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels - }); - - if (theChild.outerWidth() != null && theChild.outerHeight() != null) { - theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h)))); - } else { - theNode = parent.add(new CoSENode(this.graphManager)); - } - // Attach id to the layout node - theNode.id = theChild.data("id"); - // Attach the paddings of cy node to layout node - theNode.paddingLeft = parseInt(theChild.css('padding')); - theNode.paddingTop = parseInt(theChild.css('padding')); - theNode.paddingRight = parseInt(theChild.css('padding')); - theNode.paddingBottom = parseInt(theChild.css('padding')); - - //Attach the label properties to compound if labels will be included in node dimensions - if (this.options.nodeDimensionsIncludeLabels) { - if (theChild.isParent()) { - var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w; - var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h; - var labelPos = theChild.css("text-halign"); - theNode.labelWidth = labelWidth; - theNode.labelHeight = labelHeight; - theNode.labelPos = labelPos; - } - } - - // Map the layout node - this.idToLNode[theChild.data("id")] = theNode; - - if (isNaN(theNode.rect.x)) { - theNode.rect.x = 0; - } - - if (isNaN(theNode.rect.y)) { - theNode.rect.y = 0; - } - - if (children_of_children != null && children_of_children.length > 0) { - var theNewGraph; - theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode); - this.processChildrenList(theNewGraph, children_of_children, layout); - } - } -}; - -/** - * @brief : called on continuous layouts to stop them before they finish - */ -_CoSELayout.prototype.stop = function () { - this.stopped = true; - - return this; // chaining -}; - -var register = function register(cytoscape) { - // var Layout = getLayout( cytoscape ); - - cytoscape('layout', 'cose-bilkent', _CoSELayout); -}; - -// auto reg for globals -if (typeof cytoscape !== 'undefined') { - register(cytoscape); -} - -module.exports = register; - -/***/ }) -/******/ ]); -}); - -/***/ }), - -/***/ 44726: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -/** - * Copyright (c) 2016-2023, The Cytoscape Consortium. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the “Software”), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - - - -var debounce = __webpack_require__(38221); -var Heap = __webpack_require__(65731); -var get = __webpack_require__(58156); -var set = __webpack_require__(63560); -var toPath = __webpack_require__(42072); - -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } - -var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce); -var Heap__default = /*#__PURE__*/_interopDefaultLegacy(Heap); -var get__default = /*#__PURE__*/_interopDefaultLegacy(get); -var set__default = /*#__PURE__*/_interopDefaultLegacy(set); -var toPath__default = /*#__PURE__*/_interopDefaultLegacy(toPath); - -function _typeof(obj) { - "@babel/helpers - typeof"; - - return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }, _typeof(obj); -} -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; -} -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - return obj; -} -function _slicedToArray(arr, i) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); -} -function _arrayWithHoles(arr) { - if (Array.isArray(arr)) return arr; -} -function _iterableToArrayLimit(arr, i) { - var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; - if (_i == null) return; - var _arr = []; - var _n = true; - var _d = false; - var _s, _e; - try { - for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) _i["return"](); - } finally { - if (_d) throw _e; - } - } - return _arr; -} -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - return arr2; -} -function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -var _window = typeof window === 'undefined' ? null : window; // eslint-disable-line no-undef - -var navigator = _window ? _window.navigator : null; -_window ? _window.document : null; -var typeofstr = _typeof(''); -var typeofobj = _typeof({}); -var typeoffn = _typeof(function () {}); -var typeofhtmlele = typeof HTMLElement === "undefined" ? "undefined" : _typeof(HTMLElement); -var instanceStr = function instanceStr(obj) { - return obj && obj.instanceString && fn$6(obj.instanceString) ? obj.instanceString() : null; -}; - -var string = function string(obj) { - return obj != null && _typeof(obj) == typeofstr; -}; -var fn$6 = function fn(obj) { - return obj != null && _typeof(obj) === typeoffn; -}; -var array = function array(obj) { - return !elementOrCollection(obj) && (Array.isArray ? Array.isArray(obj) : obj != null && obj instanceof Array); -}; -var plainObject = function plainObject(obj) { - return obj != null && _typeof(obj) === typeofobj && !array(obj) && obj.constructor === Object; -}; -var object = function object(obj) { - return obj != null && _typeof(obj) === typeofobj; -}; -var number$1 = function number(obj) { - return obj != null && _typeof(obj) === _typeof(1) && !isNaN(obj); -}; -var integer = function integer(obj) { - return number$1(obj) && Math.floor(obj) === obj; -}; -var htmlElement = function htmlElement(obj) { - if ('undefined' === typeofhtmlele) { - return undefined; - } else { - return null != obj && obj instanceof HTMLElement; - } -}; -var elementOrCollection = function elementOrCollection(obj) { - return element(obj) || collection(obj); -}; -var element = function element(obj) { - return instanceStr(obj) === 'collection' && obj._private.single; -}; -var collection = function collection(obj) { - return instanceStr(obj) === 'collection' && !obj._private.single; -}; -var core = function core(obj) { - return instanceStr(obj) === 'core'; -}; -var stylesheet = function stylesheet(obj) { - return instanceStr(obj) === 'stylesheet'; -}; -var event = function event(obj) { - return instanceStr(obj) === 'event'; -}; -var emptyString = function emptyString(obj) { - if (obj === undefined || obj === null) { - // null is empty - return true; - } else if (obj === '' || obj.match(/^\s+$/)) { - return true; // empty string is empty - } - - return false; // otherwise, we don't know what we've got -}; -var domElement = function domElement(obj) { - if (typeof HTMLElement === 'undefined') { - return false; // we're not in a browser so it doesn't matter - } else { - return obj instanceof HTMLElement; - } -}; -var boundingBox = function boundingBox(obj) { - return plainObject(obj) && number$1(obj.x1) && number$1(obj.x2) && number$1(obj.y1) && number$1(obj.y2); -}; -var promise = function promise(obj) { - return object(obj) && fn$6(obj.then); -}; -var ms = function ms() { - return navigator && navigator.userAgent.match(/msie|trident|edge/i); -}; // probably a better way to detect this... - -var memoize = function memoize(fn, keyFn) { - if (!keyFn) { - keyFn = function keyFn() { - if (arguments.length === 1) { - return arguments[0]; - } else if (arguments.length === 0) { - return 'undefined'; - } - var args = []; - for (var i = 0; i < arguments.length; i++) { - args.push(arguments[i]); - } - return args.join('$'); - }; - } - var memoizedFn = function memoizedFn() { - var self = this; - var args = arguments; - var ret; - var k = keyFn.apply(self, args); - var cache = memoizedFn.cache; - if (!(ret = cache[k])) { - ret = cache[k] = fn.apply(self, args); - } - return ret; - }; - memoizedFn.cache = {}; - return memoizedFn; -}; - -var camel2dash = memoize(function (str) { - return str.replace(/([A-Z])/g, function (v) { - return '-' + v.toLowerCase(); - }); -}); -var dash2camel = memoize(function (str) { - return str.replace(/(-\w)/g, function (v) { - return v[1].toUpperCase(); - }); -}); -var prependCamel = memoize(function (prefix, str) { - return prefix + str[0].toUpperCase() + str.substring(1); -}, function (prefix, str) { - return prefix + '$' + str; -}); -var capitalize = function capitalize(str) { - if (emptyString(str)) { - return str; - } - return str.charAt(0).toUpperCase() + str.substring(1); -}; - -var number = '(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))'; -var rgba = 'rgb[a]?\\((' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)(?:\\s*,\\s*(' + number + '))?\\)'; -var rgbaNoBackRefs = 'rgb[a]?\\((?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)(?:\\s*,\\s*(?:' + number + '))?\\)'; -var hsla = 'hsl[a]?\\((' + number + ')\\s*,\\s*(' + number + '[%])\\s*,\\s*(' + number + '[%])(?:\\s*,\\s*(' + number + '))?\\)'; -var hslaNoBackRefs = 'hsl[a]?\\((?:' + number + ')\\s*,\\s*(?:' + number + '[%])\\s*,\\s*(?:' + number + '[%])(?:\\s*,\\s*(?:' + number + '))?\\)'; -var hex3 = '\\#[0-9a-fA-F]{3}'; -var hex6 = '\\#[0-9a-fA-F]{6}'; - -var ascending = function ascending(a, b) { - if (a < b) { - return -1; - } else if (a > b) { - return 1; - } else { - return 0; - } -}; -var descending = function descending(a, b) { - return -1 * ascending(a, b); -}; - -var extend = Object.assign != null ? Object.assign.bind(Object) : function (tgt) { - var args = arguments; - for (var i = 1; i < args.length; i++) { - var obj = args[i]; - if (obj == null) { - continue; - } - var keys = Object.keys(obj); - for (var j = 0; j < keys.length; j++) { - var k = keys[j]; - tgt[k] = obj[k]; - } - } - return tgt; -}; - -// get [r, g, b] from #abc or #aabbcc -var hex2tuple = function hex2tuple(hex) { - if (!(hex.length === 4 || hex.length === 7) || hex[0] !== '#') { - return; - } - var shortHex = hex.length === 4; - var r, g, b; - var base = 16; - if (shortHex) { - r = parseInt(hex[1] + hex[1], base); - g = parseInt(hex[2] + hex[2], base); - b = parseInt(hex[3] + hex[3], base); - } else { - r = parseInt(hex[1] + hex[2], base); - g = parseInt(hex[3] + hex[4], base); - b = parseInt(hex[5] + hex[6], base); - } - return [r, g, b]; -}; - -// get [r, g, b, a] from hsl(0, 0, 0) or hsla(0, 0, 0, 0) -var hsl2tuple = function hsl2tuple(hsl) { - var ret; - var h, s, l, a, r, g, b; - function hue2rgb(p, q, t) { - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1 / 6) return p + (q - p) * 6 * t; - if (t < 1 / 2) return q; - if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; - return p; - } - var m = new RegExp('^' + hsla + '$').exec(hsl); - if (m) { - // get hue - h = parseInt(m[1]); - if (h < 0) { - h = (360 - -1 * h % 360) % 360; - } else if (h > 360) { - h = h % 360; - } - h /= 360; // normalise on [0, 1] - - s = parseFloat(m[2]); - if (s < 0 || s > 100) { - return; - } // saturation is [0, 100] - s = s / 100; // normalise on [0, 1] - - l = parseFloat(m[3]); - if (l < 0 || l > 100) { - return; - } // lightness is [0, 100] - l = l / 100; // normalise on [0, 1] - - a = m[4]; - if (a !== undefined) { - a = parseFloat(a); - if (a < 0 || a > 1) { - return; - } // alpha is [0, 1] - } - - // now, convert to rgb - // code from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript - if (s === 0) { - r = g = b = Math.round(l * 255); // achromatic - } else { - var q = l < 0.5 ? l * (1 + s) : l + s - l * s; - var p = 2 * l - q; - r = Math.round(255 * hue2rgb(p, q, h + 1 / 3)); - g = Math.round(255 * hue2rgb(p, q, h)); - b = Math.round(255 * hue2rgb(p, q, h - 1 / 3)); - } - ret = [r, g, b, a]; - } - return ret; -}; - -// get [r, g, b, a] from rgb(0, 0, 0) or rgba(0, 0, 0, 0) -var rgb2tuple = function rgb2tuple(rgb) { - var ret; - var m = new RegExp('^' + rgba + '$').exec(rgb); - if (m) { - ret = []; - var isPct = []; - for (var i = 1; i <= 3; i++) { - var channel = m[i]; - if (channel[channel.length - 1] === '%') { - isPct[i] = true; - } - channel = parseFloat(channel); - if (isPct[i]) { - channel = channel / 100 * 255; // normalise to [0, 255] - } - - if (channel < 0 || channel > 255) { - return; - } // invalid channel value - - ret.push(Math.floor(channel)); - } - var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3]; - var allArePct = isPct[1] && isPct[2] && isPct[3]; - if (atLeastOneIsPct && !allArePct) { - return; - } // must all be percent values if one is - - var alpha = m[4]; - if (alpha !== undefined) { - alpha = parseFloat(alpha); - if (alpha < 0 || alpha > 1) { - return; - } // invalid alpha value - - ret.push(alpha); - } - } - return ret; -}; -var colorname2tuple = function colorname2tuple(color) { - return colors[color.toLowerCase()]; -}; -var color2tuple = function color2tuple(color) { - return (array(color) ? color : null) || colorname2tuple(color) || hex2tuple(color) || rgb2tuple(color) || hsl2tuple(color); -}; -var colors = { - // special colour names - transparent: [0, 0, 0, 0], - // NB alpha === 0 - - // regular colours - aliceblue: [240, 248, 255], - antiquewhite: [250, 235, 215], - aqua: [0, 255, 255], - aquamarine: [127, 255, 212], - azure: [240, 255, 255], - beige: [245, 245, 220], - bisque: [255, 228, 196], - black: [0, 0, 0], - blanchedalmond: [255, 235, 205], - blue: [0, 0, 255], - blueviolet: [138, 43, 226], - brown: [165, 42, 42], - burlywood: [222, 184, 135], - cadetblue: [95, 158, 160], - chartreuse: [127, 255, 0], - chocolate: [210, 105, 30], - coral: [255, 127, 80], - cornflowerblue: [100, 149, 237], - cornsilk: [255, 248, 220], - crimson: [220, 20, 60], - cyan: [0, 255, 255], - darkblue: [0, 0, 139], - darkcyan: [0, 139, 139], - darkgoldenrod: [184, 134, 11], - darkgray: [169, 169, 169], - darkgreen: [0, 100, 0], - darkgrey: [169, 169, 169], - darkkhaki: [189, 183, 107], - darkmagenta: [139, 0, 139], - darkolivegreen: [85, 107, 47], - darkorange: [255, 140, 0], - darkorchid: [153, 50, 204], - darkred: [139, 0, 0], - darksalmon: [233, 150, 122], - darkseagreen: [143, 188, 143], - darkslateblue: [72, 61, 139], - darkslategray: [47, 79, 79], - darkslategrey: [47, 79, 79], - darkturquoise: [0, 206, 209], - darkviolet: [148, 0, 211], - deeppink: [255, 20, 147], - deepskyblue: [0, 191, 255], - dimgray: [105, 105, 105], - dimgrey: [105, 105, 105], - dodgerblue: [30, 144, 255], - firebrick: [178, 34, 34], - floralwhite: [255, 250, 240], - forestgreen: [34, 139, 34], - fuchsia: [255, 0, 255], - gainsboro: [220, 220, 220], - ghostwhite: [248, 248, 255], - gold: [255, 215, 0], - goldenrod: [218, 165, 32], - gray: [128, 128, 128], - grey: [128, 128, 128], - green: [0, 128, 0], - greenyellow: [173, 255, 47], - honeydew: [240, 255, 240], - hotpink: [255, 105, 180], - indianred: [205, 92, 92], - indigo: [75, 0, 130], - ivory: [255, 255, 240], - khaki: [240, 230, 140], - lavender: [230, 230, 250], - lavenderblush: [255, 240, 245], - lawngreen: [124, 252, 0], - lemonchiffon: [255, 250, 205], - lightblue: [173, 216, 230], - lightcoral: [240, 128, 128], - lightcyan: [224, 255, 255], - lightgoldenrodyellow: [250, 250, 210], - lightgray: [211, 211, 211], - lightgreen: [144, 238, 144], - lightgrey: [211, 211, 211], - lightpink: [255, 182, 193], - lightsalmon: [255, 160, 122], - lightseagreen: [32, 178, 170], - lightskyblue: [135, 206, 250], - lightslategray: [119, 136, 153], - lightslategrey: [119, 136, 153], - lightsteelblue: [176, 196, 222], - lightyellow: [255, 255, 224], - lime: [0, 255, 0], - limegreen: [50, 205, 50], - linen: [250, 240, 230], - magenta: [255, 0, 255], - maroon: [128, 0, 0], - mediumaquamarine: [102, 205, 170], - mediumblue: [0, 0, 205], - mediumorchid: [186, 85, 211], - mediumpurple: [147, 112, 219], - mediumseagreen: [60, 179, 113], - mediumslateblue: [123, 104, 238], - mediumspringgreen: [0, 250, 154], - mediumturquoise: [72, 209, 204], - mediumvioletred: [199, 21, 133], - midnightblue: [25, 25, 112], - mintcream: [245, 255, 250], - mistyrose: [255, 228, 225], - moccasin: [255, 228, 181], - navajowhite: [255, 222, 173], - navy: [0, 0, 128], - oldlace: [253, 245, 230], - olive: [128, 128, 0], - olivedrab: [107, 142, 35], - orange: [255, 165, 0], - orangered: [255, 69, 0], - orchid: [218, 112, 214], - palegoldenrod: [238, 232, 170], - palegreen: [152, 251, 152], - paleturquoise: [175, 238, 238], - palevioletred: [219, 112, 147], - papayawhip: [255, 239, 213], - peachpuff: [255, 218, 185], - peru: [205, 133, 63], - pink: [255, 192, 203], - plum: [221, 160, 221], - powderblue: [176, 224, 230], - purple: [128, 0, 128], - red: [255, 0, 0], - rosybrown: [188, 143, 143], - royalblue: [65, 105, 225], - saddlebrown: [139, 69, 19], - salmon: [250, 128, 114], - sandybrown: [244, 164, 96], - seagreen: [46, 139, 87], - seashell: [255, 245, 238], - sienna: [160, 82, 45], - silver: [192, 192, 192], - skyblue: [135, 206, 235], - slateblue: [106, 90, 205], - slategray: [112, 128, 144], - slategrey: [112, 128, 144], - snow: [255, 250, 250], - springgreen: [0, 255, 127], - steelblue: [70, 130, 180], - tan: [210, 180, 140], - teal: [0, 128, 128], - thistle: [216, 191, 216], - tomato: [255, 99, 71], - turquoise: [64, 224, 208], - violet: [238, 130, 238], - wheat: [245, 222, 179], - white: [255, 255, 255], - whitesmoke: [245, 245, 245], - yellow: [255, 255, 0], - yellowgreen: [154, 205, 50] -}; - -// sets the value in a map (map may not be built) -var setMap = function setMap(options) { - var obj = options.map; - var keys = options.keys; - var l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (plainObject(key)) { - throw Error('Tried to set map with object key'); - } - if (i < keys.length - 1) { - // extend the map if necessary - if (obj[key] == null) { - obj[key] = {}; - } - obj = obj[key]; - } else { - // set the value - obj[key] = options.value; - } - } -}; - -// gets the value in a map even if it's not built in places -var getMap = function getMap(options) { - var obj = options.map; - var keys = options.keys; - var l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (plainObject(key)) { - throw Error('Tried to get map with object key'); - } - obj = obj[key]; - if (obj == null) { - return obj; - } - } - return obj; -}; - -var performance = _window ? _window.performance : null; -var pnow = performance && performance.now ? function () { - return performance.now(); -} : function () { - return Date.now(); -}; -var raf = function () { - if (_window) { - if (_window.requestAnimationFrame) { - return function (fn) { - _window.requestAnimationFrame(fn); - }; - } else if (_window.mozRequestAnimationFrame) { - return function (fn) { - _window.mozRequestAnimationFrame(fn); - }; - } else if (_window.webkitRequestAnimationFrame) { - return function (fn) { - _window.webkitRequestAnimationFrame(fn); - }; - } else if (_window.msRequestAnimationFrame) { - return function (fn) { - _window.msRequestAnimationFrame(fn); - }; - } - } - return function (fn) { - if (fn) { - setTimeout(function () { - fn(pnow()); - }, 1000 / 60); - } - }; -}(); -var requestAnimationFrame = function requestAnimationFrame(fn) { - return raf(fn); -}; -var performanceNow = pnow; - -var DEFAULT_HASH_SEED = 9261; -var K = 65599; // 37 also works pretty well -var DEFAULT_HASH_SEED_ALT = 5381; -var hashIterableInts = function hashIterableInts(iterator) { - var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; - // sdbm/string-hash - var hash = seed; - var entry; - for (;;) { - entry = iterator.next(); - if (entry.done) { - break; - } - hash = hash * K + entry.value | 0; - } - return hash; -}; -var hashInt = function hashInt(num) { - var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; - // sdbm/string-hash - return seed * K + num | 0; -}; -var hashIntAlt = function hashIntAlt(num) { - var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED_ALT; - // djb2/string-hash - return (seed << 5) + seed + num | 0; -}; -var combineHashes = function combineHashes(hash1, hash2) { - return hash1 * 0x200000 + hash2; -}; -var combineHashesArray = function combineHashesArray(hashes) { - return hashes[0] * 0x200000 + hashes[1]; -}; -var hashArrays = function hashArrays(hashes1, hashes2) { - return [hashInt(hashes1[0], hashes2[0]), hashIntAlt(hashes1[1], hashes2[1])]; -}; -var hashIntsArray = function hashIntsArray(ints, seed) { - var entry = { - value: 0, - done: false - }; - var i = 0; - var length = ints.length; - var iterator = { - next: function next() { - if (i < length) { - entry.value = ints[i++]; - } else { - entry.done = true; - } - return entry; - } - }; - return hashIterableInts(iterator, seed); -}; -var hashString = function hashString(str, seed) { - var entry = { - value: 0, - done: false - }; - var i = 0; - var length = str.length; - var iterator = { - next: function next() { - if (i < length) { - entry.value = str.charCodeAt(i++); - } else { - entry.done = true; - } - return entry; - } - }; - return hashIterableInts(iterator, seed); -}; -var hashStrings = function hashStrings() { - return hashStringsArray(arguments); -}; -var hashStringsArray = function hashStringsArray(strs) { - var hash; - for (var i = 0; i < strs.length; i++) { - var str = strs[i]; - if (i === 0) { - hash = hashString(str); - } else { - hash = hashString(str, hash); - } - } - return hash; -}; - -/*global console */ -var warningsEnabled = true; -var warnSupported = console.warn != null; // eslint-disable-line no-console -var traceSupported = console.trace != null; // eslint-disable-line no-console - -var MAX_INT$1 = Number.MAX_SAFE_INTEGER || 9007199254740991; -var trueify = function trueify() { - return true; -}; -var falsify = function falsify() { - return false; -}; -var zeroify = function zeroify() { - return 0; -}; -var noop$1 = function noop() {}; -var error = function error(msg) { - throw new Error(msg); -}; -var warnings = function warnings(enabled) { - if (enabled !== undefined) { - warningsEnabled = !!enabled; - } else { - return warningsEnabled; - } -}; -var warn = function warn(msg) { - /* eslint-disable no-console */ - if (!warnings()) { - return; - } - if (warnSupported) { - console.warn(msg); - } else { - console.log(msg); - if (traceSupported) { - console.trace(); - } - } -}; /* eslint-enable */ - -var clone = function clone(obj) { - return extend({}, obj); -}; - -// gets a shallow copy of the argument -var copy = function copy(obj) { - if (obj == null) { - return obj; - } - if (array(obj)) { - return obj.slice(); - } else if (plainObject(obj)) { - return clone(obj); - } else { - return obj; - } -}; -var copyArray = function copyArray(arr) { - return arr.slice(); -}; -var uuid = function uuid(a, b /* placeholders */) { - for ( - // loop :) - b = a = ''; - // b - result , a - numeric letiable - a++ < 36; - // - b += a * 51 & 52 // if "a" is not 9 or 14 or 19 or 24 - ? - // return a random number or 4 - (a ^ 15 // if "a" is not 15 - ? - // generate a random number from 0 to 15 - 8 ^ Math.random() * (a ^ 20 ? 16 : 4) // unless "a" is 20, in which case a random number from 8 to 11 - : 4 // otherwise 4 - ).toString(16) : '-' // in other cases (if "a" is 9,14,19,24) insert "-" - ) { - } - return b; -}; -var _staticEmptyObject = {}; -var staticEmptyObject = function staticEmptyObject() { - return _staticEmptyObject; -}; -var defaults$g = function defaults(_defaults) { - var keys = Object.keys(_defaults); - return function (opts) { - var filledOpts = {}; - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - var optVal = opts == null ? undefined : opts[key]; - filledOpts[key] = optVal === undefined ? _defaults[key] : optVal; - } - return filledOpts; - }; -}; -var removeFromArray = function removeFromArray(arr, ele, oneCopy) { - for (var i = arr.length - 1; i >= 0; i--) { - if (arr[i] === ele) { - arr.splice(i, 1); - if (oneCopy) { - break; - } - } - } -}; -var clearArray = function clearArray(arr) { - arr.splice(0, arr.length); -}; -var push = function push(arr, otherArr) { - for (var i = 0; i < otherArr.length; i++) { - var el = otherArr[i]; - arr.push(el); - } -}; -var getPrefixedProperty = function getPrefixedProperty(obj, propName, prefix) { - if (prefix) { - propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth - } - - return obj[propName]; -}; -var setPrefixedProperty = function setPrefixedProperty(obj, propName, prefix, value) { - if (prefix) { - propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth - } - - obj[propName] = value; -}; - -/* global Map */ -var ObjectMap = /*#__PURE__*/function () { - function ObjectMap() { - _classCallCheck(this, ObjectMap); - this._obj = {}; - } - _createClass(ObjectMap, [{ - key: "set", - value: function set(key, val) { - this._obj[key] = val; - return this; - } - }, { - key: "delete", - value: function _delete(key) { - this._obj[key] = undefined; - return this; - } - }, { - key: "clear", - value: function clear() { - this._obj = {}; - } - }, { - key: "has", - value: function has(key) { - return this._obj[key] !== undefined; - } - }, { - key: "get", - value: function get(key) { - return this._obj[key]; - } - }]); - return ObjectMap; -}(); -var Map$1 = typeof Map !== 'undefined' ? Map : ObjectMap; - -/* global Set */ - -var undef = "undefined" ; -var ObjectSet = /*#__PURE__*/function () { - function ObjectSet(arrayOrObjectSet) { - _classCallCheck(this, ObjectSet); - this._obj = Object.create(null); - this.size = 0; - if (arrayOrObjectSet != null) { - var arr; - if (arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString()) { - arr = arrayOrObjectSet.toArray(); - } else { - arr = arrayOrObjectSet; - } - for (var i = 0; i < arr.length; i++) { - this.add(arr[i]); - } - } - } - _createClass(ObjectSet, [{ - key: "instanceString", - value: function instanceString() { - return 'set'; - } - }, { - key: "add", - value: function add(val) { - var o = this._obj; - if (o[val] !== 1) { - o[val] = 1; - this.size++; - } - } - }, { - key: "delete", - value: function _delete(val) { - var o = this._obj; - if (o[val] === 1) { - o[val] = 0; - this.size--; - } - } - }, { - key: "clear", - value: function clear() { - this._obj = Object.create(null); - } - }, { - key: "has", - value: function has(val) { - return this._obj[val] === 1; - } - }, { - key: "toArray", - value: function toArray() { - var _this = this; - return Object.keys(this._obj).filter(function (key) { - return _this.has(key); - }); - } - }, { - key: "forEach", - value: function forEach(callback, thisArg) { - return this.toArray().forEach(callback, thisArg); - } - }]); - return ObjectSet; -}(); -var Set$1 = (typeof Set === "undefined" ? "undefined" : _typeof(Set)) !== undef ? Set : ObjectSet; - -// represents a node or an edge -var Element = function Element(cy, params) { - var restore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - if (cy === undefined || params === undefined || !core(cy)) { - error('An element must have a core reference and parameters set'); - return; - } - var group = params.group; - - // try to automatically infer the group if unspecified - if (group == null) { - if (params.data && params.data.source != null && params.data.target != null) { - group = 'edges'; - } else { - group = 'nodes'; - } - } - - // validate group - if (group !== 'nodes' && group !== 'edges') { - error('An element must be of type `nodes` or `edges`; you specified `' + group + '`'); - return; - } - - // make the element array-like, just like a collection - this.length = 1; - this[0] = this; - - // NOTE: when something is added here, add also to ele.json() - var _p = this._private = { - cy: cy, - single: true, - // indicates this is an element - data: params.data || {}, - // data object - position: params.position || { - x: 0, - y: 0 - }, - // (x, y) position pair - autoWidth: undefined, - // width and height of nodes calculated by the renderer when set to special 'auto' value - autoHeight: undefined, - autoPadding: undefined, - compoundBoundsClean: false, - // whether the compound dimensions need to be recalculated the next time dimensions are read - listeners: [], - // array of bound listeners - group: group, - // string; 'nodes' or 'edges' - style: {}, - // properties as set by the style - rstyle: {}, - // properties for style sent from the renderer to the core - styleCxts: [], - // applied style contexts from the styler - styleKeys: {}, - // per-group keys of style property values - removed: true, - // whether it's inside the vis; true if removed (set true here since we call restore) - selected: params.selected ? true : false, - // whether it's selected - selectable: params.selectable === undefined ? true : params.selectable ? true : false, - // whether it's selectable - locked: params.locked ? true : false, - // whether the element is locked (cannot be moved) - grabbed: false, - // whether the element is grabbed by the mouse; renderer sets this privately - grabbable: params.grabbable === undefined ? true : params.grabbable ? true : false, - // whether the element can be grabbed - pannable: params.pannable === undefined ? group === 'edges' ? true : false : params.pannable ? true : false, - // whether the element has passthrough panning enabled - active: false, - // whether the element is active from user interaction - classes: new Set$1(), - // map ( className => true ) - animation: { - // object for currently-running animations - current: [], - queue: [] - }, - rscratch: {}, - // object in which the renderer can store information - scratch: params.scratch || {}, - // scratch objects - edges: [], - // array of connected edges - children: [], - // array of children - parent: params.parent && params.parent.isNode() ? params.parent : null, - // parent ref - traversalCache: {}, - // cache of output of traversal functions - backgrounding: false, - // whether background images are loading - bbCache: null, - // cache of the current bounding box - bbCacheShift: { - x: 0, - y: 0 - }, - // shift applied to cached bb to be applied on next get - bodyBounds: null, - // bounds cache of element body, w/o overlay - overlayBounds: null, - // bounds cache of element body, including overlay - labelBounds: { - // bounds cache of labels - all: null, - source: null, - target: null, - main: null - }, - arrowBounds: { - // bounds cache of edge arrows - source: null, - target: null, - 'mid-source': null, - 'mid-target': null - } - }; - if (_p.position.x == null) { - _p.position.x = 0; - } - if (_p.position.y == null) { - _p.position.y = 0; - } - - // renderedPosition overrides if specified - if (params.renderedPosition) { - var rpos = params.renderedPosition; - var pan = cy.pan(); - var zoom = cy.zoom(); - _p.position = { - x: (rpos.x - pan.x) / zoom, - y: (rpos.y - pan.y) / zoom - }; - } - var classes = []; - if (array(params.classes)) { - classes = params.classes; - } else if (string(params.classes)) { - classes = params.classes.split(/\s+/); - } - for (var i = 0, l = classes.length; i < l; i++) { - var cls = classes[i]; - if (!cls || cls === '') { - continue; - } - _p.classes.add(cls); - } - this.createEmitter(); - var bypass = params.style || params.css; - if (bypass) { - warn('Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead.'); - this.style(bypass); - } - if (restore === undefined || restore) { - this.restore(); - } -}; - -var defineSearch = function defineSearch(params) { - params = { - bfs: params.bfs || !params.dfs, - dfs: params.dfs || !params.bfs - }; - - // from pseudocode on wikipedia - return function searchFn(roots, fn, directed) { - var options; - if (plainObject(roots) && !elementOrCollection(roots)) { - options = roots; - roots = options.roots || options.root; - fn = options.visit; - directed = options.directed; - } - directed = arguments.length === 2 && !fn$6(fn) ? fn : directed; - fn = fn$6(fn) ? fn : function () {}; - var cy = this._private.cy; - var v = roots = string(roots) ? this.filter(roots) : roots; - var Q = []; - var connectedNodes = []; - var connectedBy = {}; - var id2depth = {}; - var V = {}; - var j = 0; - var found; - var _this$byGroup = this.byGroup(), - nodes = _this$byGroup.nodes, - edges = _this$byGroup.edges; - - // enqueue v - for (var i = 0; i < v.length; i++) { - var vi = v[i]; - var viId = vi.id(); - if (vi.isNode()) { - Q.unshift(vi); - if (params.bfs) { - V[viId] = true; - connectedNodes.push(vi); - } - id2depth[viId] = 0; - } - } - var _loop = function _loop() { - var v = params.bfs ? Q.shift() : Q.pop(); - var vId = v.id(); - if (params.dfs) { - if (V[vId]) { - return "continue"; - } - V[vId] = true; - connectedNodes.push(v); - } - var depth = id2depth[vId]; - var prevEdge = connectedBy[vId]; - var src = prevEdge != null ? prevEdge.source() : null; - var tgt = prevEdge != null ? prevEdge.target() : null; - var prevNode = prevEdge == null ? undefined : v.same(src) ? tgt[0] : src[0]; - var ret = void 0; - ret = fn(v, prevEdge, prevNode, j++, depth); - if (ret === true) { - found = v; - return "break"; - } - if (ret === false) { - return "break"; - } - var vwEdges = v.connectedEdges().filter(function (e) { - return (!directed || e.source().same(v)) && edges.has(e); - }); - for (var _i2 = 0; _i2 < vwEdges.length; _i2++) { - var e = vwEdges[_i2]; - var w = e.connectedNodes().filter(function (n) { - return !n.same(v) && nodes.has(n); - }); - var wId = w.id(); - if (w.length !== 0 && !V[wId]) { - w = w[0]; - Q.push(w); - if (params.bfs) { - V[wId] = true; - connectedNodes.push(w); - } - connectedBy[wId] = e; - id2depth[wId] = id2depth[vId] + 1; - } - } - }; - while (Q.length !== 0) { - var _ret = _loop(); - if (_ret === "continue") continue; - if (_ret === "break") break; - } - var connectedEles = cy.collection(); - for (var _i = 0; _i < connectedNodes.length; _i++) { - var node = connectedNodes[_i]; - var edge = connectedBy[node.id()]; - if (edge != null) { - connectedEles.push(edge); - } - connectedEles.push(node); - } - return { - path: cy.collection(connectedEles), - found: cy.collection(found) - }; - }; -}; - -// search, spanning trees, etc -var elesfn$v = { - breadthFirstSearch: defineSearch({ - bfs: true - }), - depthFirstSearch: defineSearch({ - dfs: true - }) -}; - -// nice, short mathematical alias -elesfn$v.bfs = elesfn$v.breadthFirstSearch; -elesfn$v.dfs = elesfn$v.depthFirstSearch; - -var dijkstraDefaults = defaults$g({ - root: null, - weight: function weight(edge) { - return 1; - }, - directed: false -}); -var elesfn$u = { - dijkstra: function dijkstra(options) { - if (!plainObject(options)) { - var args = arguments; - options = { - root: args[0], - weight: args[1], - directed: args[2] - }; - } - var _dijkstraDefaults = dijkstraDefaults(options), - root = _dijkstraDefaults.root, - weight = _dijkstraDefaults.weight, - directed = _dijkstraDefaults.directed; - var eles = this; - var weightFn = weight; - var source = string(root) ? this.filter(root)[0] : root[0]; - var dist = {}; - var prev = {}; - var knownDist = {}; - var _this$byGroup = this.byGroup(), - nodes = _this$byGroup.nodes, - edges = _this$byGroup.edges; - edges.unmergeBy(function (ele) { - return ele.isLoop(); - }); - var getDist = function getDist(node) { - return dist[node.id()]; - }; - var setDist = function setDist(node, d) { - dist[node.id()] = d; - Q.updateItem(node); - }; - var Q = new Heap__default["default"](function (a, b) { - return getDist(a) - getDist(b); - }); - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - dist[node.id()] = node.same(source) ? 0 : Infinity; - Q.push(node); - } - var distBetween = function distBetween(u, v) { - var uvs = (directed ? u.edgesTo(v) : u.edgesWith(v)).intersect(edges); - var smallestDistance = Infinity; - var smallestEdge; - for (var _i = 0; _i < uvs.length; _i++) { - var edge = uvs[_i]; - var _weight = weightFn(edge); - if (_weight < smallestDistance || !smallestEdge) { - smallestDistance = _weight; - smallestEdge = edge; - } - } - return { - edge: smallestEdge, - dist: smallestDistance - }; - }; - while (Q.size() > 0) { - var u = Q.pop(); - var smalletsDist = getDist(u); - var uid = u.id(); - knownDist[uid] = smalletsDist; - if (smalletsDist === Infinity) { - continue; - } - var neighbors = u.neighborhood().intersect(nodes); - for (var _i2 = 0; _i2 < neighbors.length; _i2++) { - var v = neighbors[_i2]; - var vid = v.id(); - var vDist = distBetween(u, v); - var alt = smalletsDist + vDist.dist; - if (alt < getDist(v)) { - setDist(v, alt); - prev[vid] = { - node: u, - edge: vDist.edge - }; - } - } // for - } // while - - return { - distanceTo: function distanceTo(node) { - var target = string(node) ? nodes.filter(node)[0] : node[0]; - return knownDist[target.id()]; - }, - pathTo: function pathTo(node) { - var target = string(node) ? nodes.filter(node)[0] : node[0]; - var S = []; - var u = target; - var uid = u.id(); - if (target.length > 0) { - S.unshift(target); - while (prev[uid]) { - var p = prev[uid]; - S.unshift(p.edge); - S.unshift(p.node); - u = p.node; - uid = u.id(); - } - } - return eles.spawn(S); - } - }; - } -}; - -var elesfn$t = { - // kruskal's algorithm (finds min spanning tree, assuming undirected graph) - // implemented from pseudocode from wikipedia - kruskal: function kruskal(weightFn) { - weightFn = weightFn || function (edge) { - return 1; - }; - var _this$byGroup = this.byGroup(), - nodes = _this$byGroup.nodes, - edges = _this$byGroup.edges; - var numNodes = nodes.length; - var forest = new Array(numNodes); - var A = nodes; // assumes byGroup() creates new collections that can be safely mutated - - var findSetIndex = function findSetIndex(ele) { - for (var i = 0; i < forest.length; i++) { - var eles = forest[i]; - if (eles.has(ele)) { - return i; - } - } - }; - - // start with one forest per node - for (var i = 0; i < numNodes; i++) { - forest[i] = this.spawn(nodes[i]); - } - var S = edges.sort(function (a, b) { - return weightFn(a) - weightFn(b); - }); - for (var _i = 0; _i < S.length; _i++) { - var edge = S[_i]; - var u = edge.source()[0]; - var v = edge.target()[0]; - var setUIndex = findSetIndex(u); - var setVIndex = findSetIndex(v); - var setU = forest[setUIndex]; - var setV = forest[setVIndex]; - if (setUIndex !== setVIndex) { - A.merge(edge); - - // combine forests for u and v - setU.merge(setV); - forest.splice(setVIndex, 1); - } - } - return A; - } -}; - -var aStarDefaults = defaults$g({ - root: null, - goal: null, - weight: function weight(edge) { - return 1; - }, - heuristic: function heuristic(edge) { - return 0; - }, - directed: false -}); -var elesfn$s = { - // Implemented from pseudocode from wikipedia - aStar: function aStar(options) { - var cy = this.cy(); - var _aStarDefaults = aStarDefaults(options), - root = _aStarDefaults.root, - goal = _aStarDefaults.goal, - heuristic = _aStarDefaults.heuristic, - directed = _aStarDefaults.directed, - weight = _aStarDefaults.weight; - root = cy.collection(root)[0]; - goal = cy.collection(goal)[0]; - var sid = root.id(); - var tid = goal.id(); - var gScore = {}; - var fScore = {}; - var closedSetIds = {}; - var openSet = new Heap__default["default"](function (a, b) { - return fScore[a.id()] - fScore[b.id()]; - }); - var openSetIds = new Set$1(); - var cameFrom = {}; - var cameFromEdge = {}; - var addToOpenSet = function addToOpenSet(ele, id) { - openSet.push(ele); - openSetIds.add(id); - }; - var cMin, cMinId; - var popFromOpenSet = function popFromOpenSet() { - cMin = openSet.pop(); - cMinId = cMin.id(); - openSetIds["delete"](cMinId); - }; - var isInOpenSet = function isInOpenSet(id) { - return openSetIds.has(id); - }; - addToOpenSet(root, sid); - gScore[sid] = 0; - fScore[sid] = heuristic(root); - - // Counter - var steps = 0; - - // Main loop - while (openSet.size() > 0) { - popFromOpenSet(); - steps++; - - // If we've found our goal, then we are done - if (cMinId === tid) { - var path = []; - var pathNode = goal; - var pathNodeId = tid; - var pathEdge = cameFromEdge[pathNodeId]; - for (;;) { - path.unshift(pathNode); - if (pathEdge != null) { - path.unshift(pathEdge); - } - pathNode = cameFrom[pathNodeId]; - if (pathNode == null) { - break; - } - pathNodeId = pathNode.id(); - pathEdge = cameFromEdge[pathNodeId]; - } - return { - found: true, - distance: gScore[cMinId], - path: this.spawn(path), - steps: steps - }; - } - - // Add cMin to processed nodes - closedSetIds[cMinId] = true; - - // Update scores for neighbors of cMin - // Take into account if graph is directed or not - var vwEdges = cMin._private.edges; - for (var i = 0; i < vwEdges.length; i++) { - var e = vwEdges[i]; - - // edge must be in set of calling eles - if (!this.hasElementWithId(e.id())) { - continue; - } - - // cMin must be the source of edge if directed - if (directed && e.data('source') !== cMinId) { - continue; - } - var wSrc = e.source(); - var wTgt = e.target(); - var w = wSrc.id() !== cMinId ? wSrc : wTgt; - var wid = w.id(); - - // node must be in set of calling eles - if (!this.hasElementWithId(wid)) { - continue; - } - - // if node is in closedSet, ignore it - if (closedSetIds[wid]) { - continue; - } - - // New tentative score for node w - var tempScore = gScore[cMinId] + weight(e); - - // Update gScore for node w if: - // w not present in openSet - // OR - // tentative gScore is less than previous value - - // w not in openSet - if (!isInOpenSet(wid)) { - gScore[wid] = tempScore; - fScore[wid] = tempScore + heuristic(w); - addToOpenSet(w, wid); - cameFrom[wid] = cMin; - cameFromEdge[wid] = e; - continue; - } - - // w already in openSet, but with greater gScore - if (tempScore < gScore[wid]) { - gScore[wid] = tempScore; - fScore[wid] = tempScore + heuristic(w); - cameFrom[wid] = cMin; - cameFromEdge[wid] = e; - } - } // End of neighbors update - } // End of main loop - - // If we've reached here, then we've not reached our goal - return { - found: false, - distance: undefined, - path: undefined, - steps: steps - }; - } -}; // elesfn - -var floydWarshallDefaults = defaults$g({ - weight: function weight(edge) { - return 1; - }, - directed: false -}); -var elesfn$r = { - // Implemented from pseudocode from wikipedia - floydWarshall: function floydWarshall(options) { - var cy = this.cy(); - var _floydWarshallDefault = floydWarshallDefaults(options), - weight = _floydWarshallDefault.weight, - directed = _floydWarshallDefault.directed; - var weightFn = weight; - var _this$byGroup = this.byGroup(), - nodes = _this$byGroup.nodes, - edges = _this$byGroup.edges; - var N = nodes.length; - var Nsq = N * N; - var indexOf = function indexOf(node) { - return nodes.indexOf(node); - }; - var atIndex = function atIndex(i) { - return nodes[i]; - }; - - // Initialize distance matrix - var dist = new Array(Nsq); - for (var n = 0; n < Nsq; n++) { - var j = n % N; - var i = (n - j) / N; - if (i === j) { - dist[n] = 0; - } else { - dist[n] = Infinity; - } - } - - // Initialize matrix used for path reconstruction - // Initialize distance matrix - var next = new Array(Nsq); - var edgeNext = new Array(Nsq); - - // Process edges - for (var _i = 0; _i < edges.length; _i++) { - var edge = edges[_i]; - var src = edge.source()[0]; - var tgt = edge.target()[0]; - if (src === tgt) { - continue; - } // exclude loops - - var s = indexOf(src); - var t = indexOf(tgt); - var st = s * N + t; // source to target index - var _weight = weightFn(edge); - - // Check if already process another edge between same 2 nodes - if (dist[st] > _weight) { - dist[st] = _weight; - next[st] = t; - edgeNext[st] = edge; - } - - // If undirected graph, process 'reversed' edge - if (!directed) { - var ts = t * N + s; // target to source index - - if (!directed && dist[ts] > _weight) { - dist[ts] = _weight; - next[ts] = s; - edgeNext[ts] = edge; - } - } - } - - // Main loop - for (var k = 0; k < N; k++) { - for (var _i2 = 0; _i2 < N; _i2++) { - var ik = _i2 * N + k; - for (var _j = 0; _j < N; _j++) { - var ij = _i2 * N + _j; - var kj = k * N + _j; - if (dist[ik] + dist[kj] < dist[ij]) { - dist[ij] = dist[ik] + dist[kj]; - next[ij] = next[ik]; - } - } - } - } - var getArgEle = function getArgEle(ele) { - return (string(ele) ? cy.filter(ele) : ele)[0]; - }; - var indexOfArgEle = function indexOfArgEle(ele) { - return indexOf(getArgEle(ele)); - }; - var res = { - distance: function distance(from, to) { - var i = indexOfArgEle(from); - var j = indexOfArgEle(to); - return dist[i * N + j]; - }, - path: function path(from, to) { - var i = indexOfArgEle(from); - var j = indexOfArgEle(to); - var fromNode = atIndex(i); - if (i === j) { - return fromNode.collection(); - } - if (next[i * N + j] == null) { - return cy.collection(); - } - var path = cy.collection(); - var prev = i; - var edge; - path.merge(fromNode); - while (i !== j) { - prev = i; - i = next[i * N + j]; - edge = edgeNext[prev * N + i]; - path.merge(edge); - path.merge(atIndex(i)); - } - return path; - } - }; - return res; - } // floydWarshall -}; // elesfn - -var bellmanFordDefaults = defaults$g({ - weight: function weight(edge) { - return 1; - }, - directed: false, - root: null -}); -var elesfn$q = { - // Implemented from pseudocode from wikipedia - bellmanFord: function bellmanFord(options) { - var _this = this; - var _bellmanFordDefaults = bellmanFordDefaults(options), - weight = _bellmanFordDefaults.weight, - directed = _bellmanFordDefaults.directed, - root = _bellmanFordDefaults.root; - var weightFn = weight; - var eles = this; - var cy = this.cy(); - var _this$byGroup = this.byGroup(), - edges = _this$byGroup.edges, - nodes = _this$byGroup.nodes; - var numNodes = nodes.length; - var infoMap = new Map$1(); - var hasNegativeWeightCycle = false; - var negativeWeightCycles = []; - root = cy.collection(root)[0]; // in case selector passed - - edges.unmergeBy(function (edge) { - return edge.isLoop(); - }); - var numEdges = edges.length; - var getInfo = function getInfo(node) { - var obj = infoMap.get(node.id()); - if (!obj) { - obj = {}; - infoMap.set(node.id(), obj); - } - return obj; - }; - var getNodeFromTo = function getNodeFromTo(to) { - return (string(to) ? cy.$(to) : to)[0]; - }; - var distanceTo = function distanceTo(to) { - return getInfo(getNodeFromTo(to)).dist; - }; - var pathTo = function pathTo(to) { - var thisStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : root; - var end = getNodeFromTo(to); - var path = []; - var node = end; - for (;;) { - if (node == null) { - return _this.spawn(); - } - var _getInfo = getInfo(node), - edge = _getInfo.edge, - pred = _getInfo.pred; - path.unshift(node[0]); - if (node.same(thisStart) && path.length > 0) { - break; - } - if (edge != null) { - path.unshift(edge); - } - node = pred; - } - return eles.spawn(path); - }; - - // Initializations { dist, pred, edge } - for (var i = 0; i < numNodes; i++) { - var node = nodes[i]; - var info = getInfo(node); - if (node.same(root)) { - info.dist = 0; - } else { - info.dist = Infinity; - } - info.pred = null; - info.edge = null; - } - - // Edges relaxation - var replacedEdge = false; - var checkForEdgeReplacement = function checkForEdgeReplacement(node1, node2, edge, info1, info2, weight) { - var dist = info1.dist + weight; - if (dist < info2.dist && !edge.same(info1.edge)) { - info2.dist = dist; - info2.pred = node1; - info2.edge = edge; - replacedEdge = true; - } - }; - for (var _i = 1; _i < numNodes; _i++) { - replacedEdge = false; - for (var e = 0; e < numEdges; e++) { - var edge = edges[e]; - var src = edge.source(); - var tgt = edge.target(); - var _weight = weightFn(edge); - var srcInfo = getInfo(src); - var tgtInfo = getInfo(tgt); - checkForEdgeReplacement(src, tgt, edge, srcInfo, tgtInfo, _weight); - - // If undirected graph, we need to take into account the 'reverse' edge - if (!directed) { - checkForEdgeReplacement(tgt, src, edge, tgtInfo, srcInfo, _weight); - } - } - if (!replacedEdge) { - break; - } - } - if (replacedEdge) { - // Check for negative weight cycles - var negativeWeightCycleIds = []; - for (var _e = 0; _e < numEdges; _e++) { - var _edge = edges[_e]; - var _src = _edge.source(); - var _tgt = _edge.target(); - var _weight2 = weightFn(_edge); - var srcDist = getInfo(_src).dist; - var tgtDist = getInfo(_tgt).dist; - if (srcDist + _weight2 < tgtDist || !directed && tgtDist + _weight2 < srcDist) { - if (!hasNegativeWeightCycle) { - warn('Graph contains a negative weight cycle for Bellman-Ford'); - hasNegativeWeightCycle = true; - } - if (options.findNegativeWeightCycles !== false) { - var negativeNodes = []; - if (srcDist + _weight2 < tgtDist) { - negativeNodes.push(_src); - } - if (!directed && tgtDist + _weight2 < srcDist) { - negativeNodes.push(_tgt); - } - var numNegativeNodes = negativeNodes.length; - for (var n = 0; n < numNegativeNodes; n++) { - var start = negativeNodes[n]; - var cycle = [start]; - cycle.push(getInfo(start).edge); - var _node = getInfo(start).pred; - while (cycle.indexOf(_node) === -1) { - cycle.push(_node); - cycle.push(getInfo(_node).edge); - _node = getInfo(_node).pred; - } - cycle = cycle.slice(cycle.indexOf(_node)); - var smallestId = cycle[0].id(); - var smallestIndex = 0; - for (var c = 2; c < cycle.length; c += 2) { - if (cycle[c].id() < smallestId) { - smallestId = cycle[c].id(); - smallestIndex = c; - } - } - cycle = cycle.slice(smallestIndex).concat(cycle.slice(0, smallestIndex)); - cycle.push(cycle[0]); - var cycleId = cycle.map(function (el) { - return el.id(); - }).join(","); - if (negativeWeightCycleIds.indexOf(cycleId) === -1) { - negativeWeightCycles.push(eles.spawn(cycle)); - negativeWeightCycleIds.push(cycleId); - } - } - } else { - break; - } - } - } - } - return { - distanceTo: distanceTo, - pathTo: pathTo, - hasNegativeWeightCycle: hasNegativeWeightCycle, - negativeWeightCycles: negativeWeightCycles - }; - } // bellmanFord -}; // elesfn - -var sqrt2 = Math.sqrt(2); - -// Function which colapses 2 (meta) nodes into one -// Updates the remaining edge lists -// Receives as a paramater the edge which causes the collapse -var collapse = function collapse(edgeIndex, nodeMap, remainingEdges) { - if (remainingEdges.length === 0) { - error("Karger-Stein must be run on a connected (sub)graph"); - } - var edgeInfo = remainingEdges[edgeIndex]; - var sourceIn = edgeInfo[1]; - var targetIn = edgeInfo[2]; - var partition1 = nodeMap[sourceIn]; - var partition2 = nodeMap[targetIn]; - var newEdges = remainingEdges; // re-use array - - // Delete all edges between partition1 and partition2 - for (var i = newEdges.length - 1; i >= 0; i--) { - var edge = newEdges[i]; - var src = edge[1]; - var tgt = edge[2]; - if (nodeMap[src] === partition1 && nodeMap[tgt] === partition2 || nodeMap[src] === partition2 && nodeMap[tgt] === partition1) { - newEdges.splice(i, 1); - } - } - - // All edges pointing to partition2 should now point to partition1 - for (var _i = 0; _i < newEdges.length; _i++) { - var _edge = newEdges[_i]; - if (_edge[1] === partition2) { - // Check source - newEdges[_i] = _edge.slice(); // copy - newEdges[_i][1] = partition1; - } else if (_edge[2] === partition2) { - // Check target - newEdges[_i] = _edge.slice(); // copy - newEdges[_i][2] = partition1; - } - } - - // Move all nodes from partition2 to partition1 - for (var _i2 = 0; _i2 < nodeMap.length; _i2++) { - if (nodeMap[_i2] === partition2) { - nodeMap[_i2] = partition1; - } - } - return newEdges; -}; - -// Contracts a graph until we reach a certain number of meta nodes -var contractUntil = function contractUntil(metaNodeMap, remainingEdges, size, sizeLimit) { - while (size > sizeLimit) { - // Choose an edge randomly - var edgeIndex = Math.floor(Math.random() * remainingEdges.length); - - // Collapse graph based on edge - remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges); - size--; - } - return remainingEdges; -}; -var elesfn$p = { - // Computes the minimum cut of an undirected graph - // Returns the correct answer with high probability - kargerStein: function kargerStein() { - var _this = this; - var _this$byGroup = this.byGroup(), - nodes = _this$byGroup.nodes, - edges = _this$byGroup.edges; - edges.unmergeBy(function (edge) { - return edge.isLoop(); - }); - var numNodes = nodes.length; - var numEdges = edges.length; - var numIter = Math.ceil(Math.pow(Math.log(numNodes) / Math.LN2, 2)); - var stopSize = Math.floor(numNodes / sqrt2); - if (numNodes < 2) { - error('At least 2 nodes are required for Karger-Stein algorithm'); - return undefined; - } - - // Now store edge destination as indexes - // Format for each edge (edge index, source node index, target node index) - var edgeIndexes = []; - for (var i = 0; i < numEdges; i++) { - var e = edges[i]; - edgeIndexes.push([i, nodes.indexOf(e.source()), nodes.indexOf(e.target())]); - } - - // We will store the best cut found here - var minCutSize = Infinity; - var minCutEdgeIndexes = []; - var minCutNodeMap = new Array(numNodes); - - // Initial meta node partition - var metaNodeMap = new Array(numNodes); - var metaNodeMap2 = new Array(numNodes); - var copyNodesMap = function copyNodesMap(from, to) { - for (var _i3 = 0; _i3 < numNodes; _i3++) { - to[_i3] = from[_i3]; - } - }; - - // Main loop - for (var iter = 0; iter <= numIter; iter++) { - // Reset meta node partition - for (var _i4 = 0; _i4 < numNodes; _i4++) { - metaNodeMap[_i4] = _i4; - } - - // Contract until stop point (stopSize nodes) - var edgesState = contractUntil(metaNodeMap, edgeIndexes.slice(), numNodes, stopSize); - var edgesState2 = edgesState.slice(); // copy - - // Create a copy of the colapsed nodes state - copyNodesMap(metaNodeMap, metaNodeMap2); - - // Run 2 iterations starting in the stop state - var res1 = contractUntil(metaNodeMap, edgesState, stopSize, 2); - var res2 = contractUntil(metaNodeMap2, edgesState2, stopSize, 2); - - // Is any of the 2 results the best cut so far? - if (res1.length <= res2.length && res1.length < minCutSize) { - minCutSize = res1.length; - minCutEdgeIndexes = res1; - copyNodesMap(metaNodeMap, minCutNodeMap); - } else if (res2.length <= res1.length && res2.length < minCutSize) { - minCutSize = res2.length; - minCutEdgeIndexes = res2; - copyNodesMap(metaNodeMap2, minCutNodeMap); - } - } // end of main loop - - // Construct result - var cut = this.spawn(minCutEdgeIndexes.map(function (e) { - return edges[e[0]]; - })); - var partition1 = this.spawn(); - var partition2 = this.spawn(); - - // traverse metaNodeMap for best cut - var witnessNodePartition = minCutNodeMap[0]; - for (var _i5 = 0; _i5 < minCutNodeMap.length; _i5++) { - var partitionId = minCutNodeMap[_i5]; - var node = nodes[_i5]; - if (partitionId === witnessNodePartition) { - partition1.merge(node); - } else { - partition2.merge(node); - } - } - - // construct components corresponding to each disjoint subset of nodes - var constructComponent = function constructComponent(subset) { - var component = _this.spawn(); - subset.forEach(function (node) { - component.merge(node); - node.connectedEdges().forEach(function (edge) { - // ensure edge is within calling collection and edge is not in cut - if (_this.contains(edge) && !cut.contains(edge)) { - component.merge(edge); - } - }); - }); - return component; - }; - var components = [constructComponent(partition1), constructComponent(partition2)]; - var ret = { - cut: cut, - components: components, - // n.b. partitions are included to be compatible with the old api spec - // (could be removed in a future major version) - partition1: partition1, - partition2: partition2 - }; - return ret; - } -}; // elesfn - -var copyPosition = function copyPosition(p) { - return { - x: p.x, - y: p.y - }; -}; -var modelToRenderedPosition = function modelToRenderedPosition(p, zoom, pan) { - return { - x: p.x * zoom + pan.x, - y: p.y * zoom + pan.y - }; -}; -var renderedToModelPosition = function renderedToModelPosition(p, zoom, pan) { - return { - x: (p.x - pan.x) / zoom, - y: (p.y - pan.y) / zoom - }; -}; -var array2point = function array2point(arr) { - return { - x: arr[0], - y: arr[1] - }; -}; -var min = function min(arr) { - var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; - var min = Infinity; - for (var i = begin; i < end; i++) { - var val = arr[i]; - if (isFinite(val)) { - min = Math.min(val, min); - } - } - return min; -}; -var max = function max(arr) { - var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; - var max = -Infinity; - for (var i = begin; i < end; i++) { - var val = arr[i]; - if (isFinite(val)) { - max = Math.max(val, max); - } - } - return max; -}; -var mean = function mean(arr) { - var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; - var total = 0; - var n = 0; - for (var i = begin; i < end; i++) { - var val = arr[i]; - if (isFinite(val)) { - total += val; - n++; - } - } - return total / n; -}; -var median = function median(arr) { - var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; - var copy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var sort = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; - var includeHoles = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; - if (copy) { - arr = arr.slice(begin, end); - } else { - if (end < arr.length) { - arr.splice(end, arr.length - end); - } - if (begin > 0) { - arr.splice(0, begin); - } - } - - // all non finite (e.g. Infinity, NaN) elements must be -Infinity so they go to the start - var off = 0; // offset from non-finite values - for (var i = arr.length - 1; i >= 0; i--) { - var v = arr[i]; - if (includeHoles) { - if (!isFinite(v)) { - arr[i] = -Infinity; - off++; - } - } else { - // just remove it if we don't want to consider holes - arr.splice(i, 1); - } - } - if (sort) { - arr.sort(function (a, b) { - return a - b; - }); // requires copy = true if you don't want to change the orig - } - - var len = arr.length; - var mid = Math.floor(len / 2); - if (len % 2 !== 0) { - return arr[mid + 1 + off]; - } else { - return (arr[mid - 1 + off] + arr[mid + off]) / 2; - } -}; -var deg2rad = function deg2rad(deg) { - return Math.PI * deg / 180; -}; -var getAngleFromDisp = function getAngleFromDisp(dispX, dispY) { - return Math.atan2(dispY, dispX) - Math.PI / 2; -}; -var log2 = Math.log2 || function (n) { - return Math.log(n) / Math.log(2); -}; -var signum = function signum(x) { - if (x > 0) { - return 1; - } else if (x < 0) { - return -1; - } else { - return 0; - } -}; -var dist = function dist(p1, p2) { - return Math.sqrt(sqdist(p1, p2)); -}; -var sqdist = function sqdist(p1, p2) { - var dx = p2.x - p1.x; - var dy = p2.y - p1.y; - return dx * dx + dy * dy; -}; -var inPlaceSumNormalize = function inPlaceSumNormalize(v) { - var length = v.length; - - // First, get sum of all elements - var total = 0; - for (var i = 0; i < length; i++) { - total += v[i]; - } - - // Now, divide each by the sum of all elements - for (var _i = 0; _i < length; _i++) { - v[_i] = v[_i] / total; - } - return v; -}; - -// from http://en.wikipedia.org/wiki/Bézier_curve#Quadratic_curves -var qbezierAt = function qbezierAt(p0, p1, p2, t) { - return (1 - t) * (1 - t) * p0 + 2 * (1 - t) * t * p1 + t * t * p2; -}; -var qbezierPtAt = function qbezierPtAt(p0, p1, p2, t) { - return { - x: qbezierAt(p0.x, p1.x, p2.x, t), - y: qbezierAt(p0.y, p1.y, p2.y, t) - }; -}; -var lineAt = function lineAt(p0, p1, t, d) { - var vec = { - x: p1.x - p0.x, - y: p1.y - p0.y - }; - var vecDist = dist(p0, p1); - var normVec = { - x: vec.x / vecDist, - y: vec.y / vecDist - }; - t = t == null ? 0 : t; - d = d != null ? d : t * vecDist; - return { - x: p0.x + normVec.x * d, - y: p0.y + normVec.y * d - }; -}; -var bound = function bound(min, val, max) { - return Math.max(min, Math.min(max, val)); -}; - -// makes a full bb (x1, y1, x2, y2, w, h) from implicit params -var makeBoundingBox = function makeBoundingBox(bb) { - if (bb == null) { - return { - x1: Infinity, - y1: Infinity, - x2: -Infinity, - y2: -Infinity, - w: 0, - h: 0 - }; - } else if (bb.x1 != null && bb.y1 != null) { - if (bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1) { - return { - x1: bb.x1, - y1: bb.y1, - x2: bb.x2, - y2: bb.y2, - w: bb.x2 - bb.x1, - h: bb.y2 - bb.y1 - }; - } else if (bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0) { - return { - x1: bb.x1, - y1: bb.y1, - x2: bb.x1 + bb.w, - y2: bb.y1 + bb.h, - w: bb.w, - h: bb.h - }; - } - } -}; -var copyBoundingBox = function copyBoundingBox(bb) { - return { - x1: bb.x1, - x2: bb.x2, - w: bb.w, - y1: bb.y1, - y2: bb.y2, - h: bb.h - }; -}; -var clearBoundingBox = function clearBoundingBox(bb) { - bb.x1 = Infinity; - bb.y1 = Infinity; - bb.x2 = -Infinity; - bb.y2 = -Infinity; - bb.w = 0; - bb.h = 0; -}; -var shiftBoundingBox = function shiftBoundingBox(bb, dx, dy) { - return { - x1: bb.x1 + dx, - x2: bb.x2 + dx, - y1: bb.y1 + dy, - y2: bb.y2 + dy, - w: bb.w, - h: bb.h - }; -}; -var updateBoundingBox = function updateBoundingBox(bb1, bb2) { - // update bb1 with bb2 bounds - - bb1.x1 = Math.min(bb1.x1, bb2.x1); - bb1.x2 = Math.max(bb1.x2, bb2.x2); - bb1.w = bb1.x2 - bb1.x1; - bb1.y1 = Math.min(bb1.y1, bb2.y1); - bb1.y2 = Math.max(bb1.y2, bb2.y2); - bb1.h = bb1.y2 - bb1.y1; -}; -var expandBoundingBoxByPoint = function expandBoundingBoxByPoint(bb, x, y) { - bb.x1 = Math.min(bb.x1, x); - bb.x2 = Math.max(bb.x2, x); - bb.w = bb.x2 - bb.x1; - bb.y1 = Math.min(bb.y1, y); - bb.y2 = Math.max(bb.y2, y); - bb.h = bb.y2 - bb.y1; -}; -var expandBoundingBox = function expandBoundingBox(bb) { - var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - bb.x1 -= padding; - bb.x2 += padding; - bb.y1 -= padding; - bb.y2 += padding; - bb.w = bb.x2 - bb.x1; - bb.h = bb.y2 - bb.y1; - return bb; -}; -var expandBoundingBoxSides = function expandBoundingBoxSides(bb) { - var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0]; - var top, right, bottom, left; - if (padding.length === 1) { - top = right = bottom = left = padding[0]; - } else if (padding.length === 2) { - top = bottom = padding[0]; - left = right = padding[1]; - } else if (padding.length === 4) { - var _padding = _slicedToArray(padding, 4); - top = _padding[0]; - right = _padding[1]; - bottom = _padding[2]; - left = _padding[3]; - } - bb.x1 -= left; - bb.x2 += right; - bb.y1 -= top; - bb.y2 += bottom; - bb.w = bb.x2 - bb.x1; - bb.h = bb.y2 - bb.y1; - return bb; -}; - -// assign the values of bb2 into bb1 -var assignBoundingBox = function assignBoundingBox(bb1, bb2) { - bb1.x1 = bb2.x1; - bb1.y1 = bb2.y1; - bb1.x2 = bb2.x2; - bb1.y2 = bb2.y2; - bb1.w = bb1.x2 - bb1.x1; - bb1.h = bb1.y2 - bb1.y1; -}; -var boundingBoxesIntersect = function boundingBoxesIntersect(bb1, bb2) { - // case: one bb to right of other - if (bb1.x1 > bb2.x2) { - return false; - } - if (bb2.x1 > bb1.x2) { - return false; - } - - // case: one bb to left of other - if (bb1.x2 < bb2.x1) { - return false; - } - if (bb2.x2 < bb1.x1) { - return false; - } - - // case: one bb above other - if (bb1.y2 < bb2.y1) { - return false; - } - if (bb2.y2 < bb1.y1) { - return false; - } - - // case: one bb below other - if (bb1.y1 > bb2.y2) { - return false; - } - if (bb2.y1 > bb1.y2) { - return false; - } - - // otherwise, must have some overlap - return true; -}; -var inBoundingBox = function inBoundingBox(bb, x, y) { - return bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2; -}; -var pointInBoundingBox = function pointInBoundingBox(bb, pt) { - return inBoundingBox(bb, pt.x, pt.y); -}; -var boundingBoxInBoundingBox = function boundingBoxInBoundingBox(bb1, bb2) { - return inBoundingBox(bb1, bb2.x1, bb2.y1) && inBoundingBox(bb1, bb2.x2, bb2.y2); -}; -var roundRectangleIntersectLine = function roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding) { - var cornerRadius = getRoundRectangleRadius(width, height); - var halfWidth = width / 2; - var halfHeight = height / 2; - - // Check intersections with straight line segments - var straightLineIntersections; - - // Top segment, left to right - { - var topStartX = nodeX - halfWidth + cornerRadius - padding; - var topStartY = nodeY - halfHeight - padding; - var topEndX = nodeX + halfWidth - cornerRadius + padding; - var topEndY = topStartY; - straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); - if (straightLineIntersections.length > 0) { - return straightLineIntersections; - } - } - - // Right segment, top to bottom - { - var rightStartX = nodeX + halfWidth + padding; - var rightStartY = nodeY - halfHeight + cornerRadius - padding; - var rightEndX = rightStartX; - var rightEndY = nodeY + halfHeight - cornerRadius + padding; - straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false); - if (straightLineIntersections.length > 0) { - return straightLineIntersections; - } - } - - // Bottom segment, left to right - { - var bottomStartX = nodeX - halfWidth + cornerRadius - padding; - var bottomStartY = nodeY + halfHeight + padding; - var bottomEndX = nodeX + halfWidth - cornerRadius + padding; - var bottomEndY = bottomStartY; - straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false); - if (straightLineIntersections.length > 0) { - return straightLineIntersections; - } - } - - // Left segment, top to bottom - { - var leftStartX = nodeX - halfWidth - padding; - var leftStartY = nodeY - halfHeight + cornerRadius - padding; - var leftEndX = leftStartX; - var leftEndY = nodeY + halfHeight - cornerRadius + padding; - straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false); - if (straightLineIntersections.length > 0) { - return straightLineIntersections; - } - } - - // Check intersections with arc segments - var arcIntersections; - - // Top Left - { - var topLeftCenterX = nodeX - halfWidth + cornerRadius; - var topLeftCenterY = nodeY - halfHeight + cornerRadius; - arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding); - - // Ensure the intersection is on the desired quarter of the circle - if (arcIntersections.length > 0 && arcIntersections[0] <= topLeftCenterX && arcIntersections[1] <= topLeftCenterY) { - return [arcIntersections[0], arcIntersections[1]]; - } - } - - // Top Right - { - var topRightCenterX = nodeX + halfWidth - cornerRadius; - var topRightCenterY = nodeY - halfHeight + cornerRadius; - arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding); - - // Ensure the intersection is on the desired quarter of the circle - if (arcIntersections.length > 0 && arcIntersections[0] >= topRightCenterX && arcIntersections[1] <= topRightCenterY) { - return [arcIntersections[0], arcIntersections[1]]; - } - } - - // Bottom Right - { - var bottomRightCenterX = nodeX + halfWidth - cornerRadius; - var bottomRightCenterY = nodeY + halfHeight - cornerRadius; - arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding); - - // Ensure the intersection is on the desired quarter of the circle - if (arcIntersections.length > 0 && arcIntersections[0] >= bottomRightCenterX && arcIntersections[1] >= bottomRightCenterY) { - return [arcIntersections[0], arcIntersections[1]]; - } - } - - // Bottom Left - { - var bottomLeftCenterX = nodeX - halfWidth + cornerRadius; - var bottomLeftCenterY = nodeY + halfHeight - cornerRadius; - arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding); - - // Ensure the intersection is on the desired quarter of the circle - if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) { - return [arcIntersections[0], arcIntersections[1]]; - } - } - return []; // if nothing -}; - -var inLineVicinity = function inLineVicinity(x, y, lx1, ly1, lx2, ly2, tolerance) { - var t = tolerance; - var x1 = Math.min(lx1, lx2); - var x2 = Math.max(lx1, lx2); - var y1 = Math.min(ly1, ly2); - var y2 = Math.max(ly1, ly2); - return x1 - t <= x && x <= x2 + t && y1 - t <= y && y <= y2 + t; -}; -var inBezierVicinity = function inBezierVicinity(x, y, x1, y1, x2, y2, x3, y3, tolerance) { - var bb = { - x1: Math.min(x1, x3, x2) - tolerance, - x2: Math.max(x1, x3, x2) + tolerance, - y1: Math.min(y1, y3, y2) - tolerance, - y2: Math.max(y1, y3, y2) + tolerance - }; - - // if outside the rough bounding box for the bezier, then it can't be a hit - if (x < bb.x1 || x > bb.x2 || y < bb.y1 || y > bb.y2) { - // console.log('bezier out of rough bb') - return false; - } else { - // console.log('do more expensive check'); - return true; - } -}; -var solveQuadratic = function solveQuadratic(a, b, c, val) { - c -= val; - var r = b * b - 4 * a * c; - if (r < 0) { - return []; - } - var sqrtR = Math.sqrt(r); - var denom = 2 * a; - var root1 = (-b + sqrtR) / denom; - var root2 = (-b - sqrtR) / denom; - return [root1, root2]; -}; -var solveCubic = function solveCubic(a, b, c, d, result) { - // Solves a cubic function, returns root in form [r1, i1, r2, i2, r3, i3], where - // r is the real component, i is the imaginary component - - // An implementation of the Cardano method from the year 1545 - // http://en.wikipedia.org/wiki/Cubic_function#The_nature_of_the_roots - - var epsilon = 0.00001; - - // avoid division by zero while keeping the overall expression close in value - if (a === 0) { - a = epsilon; - } - b /= a; - c /= a; - d /= a; - var discriminant, q, r, dum1, s, t, term1, r13; - q = (3.0 * c - b * b) / 9.0; - r = -(27.0 * d) + b * (9.0 * c - 2.0 * (b * b)); - r /= 54.0; - discriminant = q * q * q + r * r; - result[1] = 0; - term1 = b / 3.0; - if (discriminant > 0) { - s = r + Math.sqrt(discriminant); - s = s < 0 ? -Math.pow(-s, 1.0 / 3.0) : Math.pow(s, 1.0 / 3.0); - t = r - Math.sqrt(discriminant); - t = t < 0 ? -Math.pow(-t, 1.0 / 3.0) : Math.pow(t, 1.0 / 3.0); - result[0] = -term1 + s + t; - term1 += (s + t) / 2.0; - result[4] = result[2] = -term1; - term1 = Math.sqrt(3.0) * (-t + s) / 2; - result[3] = term1; - result[5] = -term1; - return; - } - result[5] = result[3] = 0; - if (discriminant === 0) { - r13 = r < 0 ? -Math.pow(-r, 1.0 / 3.0) : Math.pow(r, 1.0 / 3.0); - result[0] = -term1 + 2.0 * r13; - result[4] = result[2] = -(r13 + term1); - return; - } - q = -q; - dum1 = q * q * q; - dum1 = Math.acos(r / Math.sqrt(dum1)); - r13 = 2.0 * Math.sqrt(q); - result[0] = -term1 + r13 * Math.cos(dum1 / 3.0); - result[2] = -term1 + r13 * Math.cos((dum1 + 2.0 * Math.PI) / 3.0); - result[4] = -term1 + r13 * Math.cos((dum1 + 4.0 * Math.PI) / 3.0); - return; -}; -var sqdistToQuadraticBezier = function sqdistToQuadraticBezier(x, y, x1, y1, x2, y2, x3, y3) { - // Find minimum distance by using the minimum of the distance - // function between the given point and the curve - - // This gives the coefficients of the resulting cubic equation - // whose roots tell us where a possible minimum is - // (Coefficients are divided by 4) - - var a = 1.0 * x1 * x1 - 4 * x1 * x2 + 2 * x1 * x3 + 4 * x2 * x2 - 4 * x2 * x3 + x3 * x3 + y1 * y1 - 4 * y1 * y2 + 2 * y1 * y3 + 4 * y2 * y2 - 4 * y2 * y3 + y3 * y3; - var b = 1.0 * 9 * x1 * x2 - 3 * x1 * x1 - 3 * x1 * x3 - 6 * x2 * x2 + 3 * x2 * x3 + 9 * y1 * y2 - 3 * y1 * y1 - 3 * y1 * y3 - 6 * y2 * y2 + 3 * y2 * y3; - var c = 1.0 * 3 * x1 * x1 - 6 * x1 * x2 + x1 * x3 - x1 * x + 2 * x2 * x2 + 2 * x2 * x - x3 * x + 3 * y1 * y1 - 6 * y1 * y2 + y1 * y3 - y1 * y + 2 * y2 * y2 + 2 * y2 * y - y3 * y; - var d = 1.0 * x1 * x2 - x1 * x1 + x1 * x - x2 * x + y1 * y2 - y1 * y1 + y1 * y - y2 * y; - - // debug("coefficients: " + a / a + ", " + b / a + ", " + c / a + ", " + d / a); - - var roots = []; - - // Use the cubic solving algorithm - solveCubic(a, b, c, d, roots); - var zeroThreshold = 0.0000001; - var params = []; - for (var index = 0; index < 6; index += 2) { - if (Math.abs(roots[index + 1]) < zeroThreshold && roots[index] >= 0 && roots[index] <= 1.0) { - params.push(roots[index]); - } - } - params.push(1.0); - params.push(0.0); - var minDistanceSquared = -1; - var curX, curY, distSquared; - for (var i = 0; i < params.length; i++) { - curX = Math.pow(1.0 - params[i], 2.0) * x1 + 2.0 * (1 - params[i]) * params[i] * x2 + params[i] * params[i] * x3; - curY = Math.pow(1 - params[i], 2.0) * y1 + 2 * (1.0 - params[i]) * params[i] * y2 + params[i] * params[i] * y3; - distSquared = Math.pow(curX - x, 2) + Math.pow(curY - y, 2); - // debug('distance for param ' + params[i] + ": " + Math.sqrt(distSquared)); - if (minDistanceSquared >= 0) { - if (distSquared < minDistanceSquared) { - minDistanceSquared = distSquared; - } - } else { - minDistanceSquared = distSquared; - } - } - return minDistanceSquared; -}; -var sqdistToFiniteLine = function sqdistToFiniteLine(x, y, x1, y1, x2, y2) { - var offset = [x - x1, y - y1]; - var line = [x2 - x1, y2 - y1]; - var lineSq = line[0] * line[0] + line[1] * line[1]; - var hypSq = offset[0] * offset[0] + offset[1] * offset[1]; - var dotProduct = offset[0] * line[0] + offset[1] * line[1]; - var adjSq = dotProduct * dotProduct / lineSq; - if (dotProduct < 0) { - return hypSq; - } - if (adjSq > lineSq) { - return (x - x2) * (x - x2) + (y - y2) * (y - y2); - } - return hypSq - adjSq; -}; -var pointInsidePolygonPoints = function pointInsidePolygonPoints(x, y, points) { - var x1, y1, x2, y2; - var y3; - - // Intersect with vertical line through (x, y) - var up = 0; - // let down = 0; - for (var i = 0; i < points.length / 2; i++) { - x1 = points[i * 2]; - y1 = points[i * 2 + 1]; - if (i + 1 < points.length / 2) { - x2 = points[(i + 1) * 2]; - y2 = points[(i + 1) * 2 + 1]; - } else { - x2 = points[(i + 1 - points.length / 2) * 2]; - y2 = points[(i + 1 - points.length / 2) * 2 + 1]; - } - if (x1 == x && x2 == x) ; else if (x1 >= x && x >= x2 || x1 <= x && x <= x2) { - y3 = (x - x1) / (x2 - x1) * (y2 - y1) + y1; - if (y3 > y) { - up++; - } - - // if( y3 < y ){ - // down++; - // } - } else { - continue; - } - } - if (up % 2 === 0) { - return false; - } else { - return true; - } -}; -var pointInsidePolygon = function pointInsidePolygon(x, y, basePoints, centerX, centerY, width, height, direction, padding) { - var transformedPoints = new Array(basePoints.length); - - // Gives negative angle - var angle; - if (direction[0] != null) { - angle = Math.atan(direction[1] / direction[0]); - if (direction[0] < 0) { - angle = angle + Math.PI / 2; - } else { - angle = -angle - Math.PI / 2; - } - } else { - angle = direction; - } - var cos = Math.cos(-angle); - var sin = Math.sin(-angle); - - // console.log("base: " + basePoints); - for (var i = 0; i < transformedPoints.length / 2; i++) { - transformedPoints[i * 2] = width / 2 * (basePoints[i * 2] * cos - basePoints[i * 2 + 1] * sin); - transformedPoints[i * 2 + 1] = height / 2 * (basePoints[i * 2 + 1] * cos + basePoints[i * 2] * sin); - transformedPoints[i * 2] += centerX; - transformedPoints[i * 2 + 1] += centerY; - } - var points; - if (padding > 0) { - var expandedLineSet = expandPolygon(transformedPoints, -padding); - points = joinLines(expandedLineSet); - } else { - points = transformedPoints; - } - return pointInsidePolygonPoints(x, y, points); -}; -var pointInsideRoundPolygon = function pointInsideRoundPolygon(x, y, basePoints, centerX, centerY, width, height) { - var cutPolygonPoints = new Array(basePoints.length); - var halfW = width / 2; - var halfH = height / 2; - var cornerRadius = getRoundPolygonRadius(width, height); - var squaredCornerRadius = cornerRadius * cornerRadius; - for (var i = 0; i < basePoints.length / 4; i++) { - var sourceUv = void 0, - destUv = void 0; - if (i === 0) { - sourceUv = basePoints.length - 2; - } else { - sourceUv = i * 4 - 2; - } - destUv = i * 4 + 2; - var px = centerX + halfW * basePoints[i * 4]; - var py = centerY + halfH * basePoints[i * 4 + 1]; - var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1]; - var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); - var cp0x = px - offset * basePoints[sourceUv]; - var cp0y = py - offset * basePoints[sourceUv + 1]; - var cp1x = px + offset * basePoints[destUv]; - var cp1y = py + offset * basePoints[destUv + 1]; - cutPolygonPoints[i * 4] = cp0x; - cutPolygonPoints[i * 4 + 1] = cp0y; - cutPolygonPoints[i * 4 + 2] = cp1x; - cutPolygonPoints[i * 4 + 3] = cp1y; - var orthx = basePoints[sourceUv + 1]; - var orthy = -basePoints[sourceUv]; - var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; - if (cosAlpha < 0) { - orthx *= -1; - orthy *= -1; - } - var cx = cp0x + orthx * cornerRadius; - var cy = cp0y + orthy * cornerRadius; - var squaredDistance = Math.pow(cx - x, 2) + Math.pow(cy - y, 2); - if (squaredDistance <= squaredCornerRadius) { - return true; - } - } - return pointInsidePolygonPoints(x, y, cutPolygonPoints); -}; -var joinLines = function joinLines(lineSet) { - var vertices = new Array(lineSet.length / 2); - var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY; - var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY; - for (var i = 0; i < lineSet.length / 4; i++) { - currentLineStartX = lineSet[i * 4]; - currentLineStartY = lineSet[i * 4 + 1]; - currentLineEndX = lineSet[i * 4 + 2]; - currentLineEndY = lineSet[i * 4 + 3]; - if (i < lineSet.length / 4 - 1) { - nextLineStartX = lineSet[(i + 1) * 4]; - nextLineStartY = lineSet[(i + 1) * 4 + 1]; - nextLineEndX = lineSet[(i + 1) * 4 + 2]; - nextLineEndY = lineSet[(i + 1) * 4 + 3]; - } else { - nextLineStartX = lineSet[0]; - nextLineStartY = lineSet[1]; - nextLineEndX = lineSet[2]; - nextLineEndY = lineSet[3]; - } - var intersection = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true); - vertices[i * 2] = intersection[0]; - vertices[i * 2 + 1] = intersection[1]; - } - return vertices; -}; -var expandPolygon = function expandPolygon(points, pad) { - var expandedLineSet = new Array(points.length * 2); - var currentPointX, currentPointY, nextPointX, nextPointY; - for (var i = 0; i < points.length / 2; i++) { - currentPointX = points[i * 2]; - currentPointY = points[i * 2 + 1]; - if (i < points.length / 2 - 1) { - nextPointX = points[(i + 1) * 2]; - nextPointY = points[(i + 1) * 2 + 1]; - } else { - nextPointX = points[0]; - nextPointY = points[1]; - } - - // Current line: [currentPointX, currentPointY] to [nextPointX, nextPointY] - - // Assume CCW polygon winding - - var offsetX = nextPointY - currentPointY; - var offsetY = -(nextPointX - currentPointX); - - // Normalize - var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY); - var normalizedOffsetX = offsetX / offsetLength; - var normalizedOffsetY = offsetY / offsetLength; - expandedLineSet[i * 4] = currentPointX + normalizedOffsetX * pad; - expandedLineSet[i * 4 + 1] = currentPointY + normalizedOffsetY * pad; - expandedLineSet[i * 4 + 2] = nextPointX + normalizedOffsetX * pad; - expandedLineSet[i * 4 + 3] = nextPointY + normalizedOffsetY * pad; - } - return expandedLineSet; -}; -var intersectLineEllipse = function intersectLineEllipse(x, y, centerX, centerY, ellipseWradius, ellipseHradius) { - var dispX = centerX - x; - var dispY = centerY - y; - dispX /= ellipseWradius; - dispY /= ellipseHradius; - var len = Math.sqrt(dispX * dispX + dispY * dispY); - var newLength = len - 1; - if (newLength < 0) { - return []; - } - var lenProportion = newLength / len; - return [(centerX - x) * lenProportion + x, (centerY - y) * lenProportion + y]; -}; -var checkInEllipse = function checkInEllipse(x, y, width, height, centerX, centerY, padding) { - x -= centerX; - y -= centerY; - x /= width / 2 + padding; - y /= height / 2 + padding; - return x * x + y * y <= 1; -}; - -// Returns intersections of increasing distance from line's start point -var intersectLineCircle = function intersectLineCircle(x1, y1, x2, y2, centerX, centerY, radius) { - // Calculate d, direction vector of line - var d = [x2 - x1, y2 - y1]; // Direction vector of line - var f = [x1 - centerX, y1 - centerY]; - var a = d[0] * d[0] + d[1] * d[1]; - var b = 2 * (f[0] * d[0] + f[1] * d[1]); - var c = f[0] * f[0] + f[1] * f[1] - radius * radius; - var discriminant = b * b - 4 * a * c; - if (discriminant < 0) { - return []; - } - var t1 = (-b + Math.sqrt(discriminant)) / (2 * a); - var t2 = (-b - Math.sqrt(discriminant)) / (2 * a); - var tMin = Math.min(t1, t2); - var tMax = Math.max(t1, t2); - var inRangeParams = []; - if (tMin >= 0 && tMin <= 1) { - inRangeParams.push(tMin); - } - if (tMax >= 0 && tMax <= 1) { - inRangeParams.push(tMax); - } - if (inRangeParams.length === 0) { - return []; - } - var nearIntersectionX = inRangeParams[0] * d[0] + x1; - var nearIntersectionY = inRangeParams[0] * d[1] + y1; - if (inRangeParams.length > 1) { - if (inRangeParams[0] == inRangeParams[1]) { - return [nearIntersectionX, nearIntersectionY]; - } else { - var farIntersectionX = inRangeParams[1] * d[0] + x1; - var farIntersectionY = inRangeParams[1] * d[1] + y1; - return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY]; - } - } else { - return [nearIntersectionX, nearIntersectionY]; - } -}; -var midOfThree = function midOfThree(a, b, c) { - if (b <= a && a <= c || c <= a && a <= b) { - return a; - } else if (a <= b && b <= c || c <= b && b <= a) { - return b; - } else { - return c; - } -}; - -// (x1,y1)=>(x2,y2) intersect with (x3,y3)=>(x4,y4) -var finiteLinesIntersect = function finiteLinesIntersect(x1, y1, x2, y2, x3, y3, x4, y4, infiniteLines) { - var dx13 = x1 - x3; - var dx21 = x2 - x1; - var dx43 = x4 - x3; - var dy13 = y1 - y3; - var dy21 = y2 - y1; - var dy43 = y4 - y3; - var ua_t = dx43 * dy13 - dy43 * dx13; - var ub_t = dx21 * dy13 - dy21 * dx13; - var u_b = dy43 * dx21 - dx43 * dy21; - if (u_b !== 0) { - var ua = ua_t / u_b; - var ub = ub_t / u_b; - var flptThreshold = 0.001; - var _min = 0 - flptThreshold; - var _max = 1 + flptThreshold; - if (_min <= ua && ua <= _max && _min <= ub && ub <= _max) { - return [x1 + ua * dx21, y1 + ua * dy21]; - } else { - if (!infiniteLines) { - return []; - } else { - return [x1 + ua * dx21, y1 + ua * dy21]; - } - } - } else { - if (ua_t === 0 || ub_t === 0) { - // Parallel, coincident lines. Check if overlap - - // Check endpoint of second line - if (midOfThree(x1, x2, x4) === x4) { - return [x4, y4]; - } - - // Check start point of second line - if (midOfThree(x1, x2, x3) === x3) { - return [x3, y3]; - } - - // Endpoint of first line - if (midOfThree(x3, x4, x2) === x2) { - return [x2, y2]; - } - return []; - } else { - // Parallel, non-coincident - return []; - } - } -}; - -// math.polygonIntersectLine( x, y, basePoints, centerX, centerY, width, height, padding ) -// intersect a node polygon (pts transformed) -// -// math.polygonIntersectLine( x, y, basePoints, centerX, centerY ) -// intersect the points (no transform) -var polygonIntersectLine = function polygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { - var intersections = []; - var intersection; - var transformedPoints = new Array(basePoints.length); - var doTransform = true; - if (width == null) { - doTransform = false; - } - var points; - if (doTransform) { - for (var i = 0; i < transformedPoints.length / 2; i++) { - transformedPoints[i * 2] = basePoints[i * 2] * width + centerX; - transformedPoints[i * 2 + 1] = basePoints[i * 2 + 1] * height + centerY; - } - if (padding > 0) { - var expandedLineSet = expandPolygon(transformedPoints, -padding); - points = joinLines(expandedLineSet); - } else { - points = transformedPoints; - } - } else { - points = basePoints; - } - var currentX, currentY, nextX, nextY; - for (var _i2 = 0; _i2 < points.length / 2; _i2++) { - currentX = points[_i2 * 2]; - currentY = points[_i2 * 2 + 1]; - if (_i2 < points.length / 2 - 1) { - nextX = points[(_i2 + 1) * 2]; - nextY = points[(_i2 + 1) * 2 + 1]; - } else { - nextX = points[0]; - nextY = points[1]; - } - intersection = finiteLinesIntersect(x, y, centerX, centerY, currentX, currentY, nextX, nextY); - if (intersection.length !== 0) { - intersections.push(intersection[0], intersection[1]); - } - } - return intersections; -}; -var roundPolygonIntersectLine = function roundPolygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { - var intersections = []; - var intersection; - var lines = new Array(basePoints.length); - var halfW = width / 2; - var halfH = height / 2; - var cornerRadius = getRoundPolygonRadius(width, height); - for (var i = 0; i < basePoints.length / 4; i++) { - var sourceUv = void 0, - destUv = void 0; - if (i === 0) { - sourceUv = basePoints.length - 2; - } else { - sourceUv = i * 4 - 2; - } - destUv = i * 4 + 2; - var px = centerX + halfW * basePoints[i * 4]; - var py = centerY + halfH * basePoints[i * 4 + 1]; - var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1]; - var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); - var cp0x = px - offset * basePoints[sourceUv]; - var cp0y = py - offset * basePoints[sourceUv + 1]; - var cp1x = px + offset * basePoints[destUv]; - var cp1y = py + offset * basePoints[destUv + 1]; - if (i === 0) { - lines[basePoints.length - 2] = cp0x; - lines[basePoints.length - 1] = cp0y; - } else { - lines[i * 4 - 2] = cp0x; - lines[i * 4 - 1] = cp0y; - } - lines[i * 4] = cp1x; - lines[i * 4 + 1] = cp1y; - var orthx = basePoints[sourceUv + 1]; - var orthy = -basePoints[sourceUv]; - var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; - if (cosAlpha < 0) { - orthx *= -1; - orthy *= -1; - } - var cx = cp0x + orthx * cornerRadius; - var cy = cp0y + orthy * cornerRadius; - intersection = intersectLineCircle(x, y, centerX, centerY, cx, cy, cornerRadius); - if (intersection.length !== 0) { - intersections.push(intersection[0], intersection[1]); - } - } - for (var _i3 = 0; _i3 < lines.length / 4; _i3++) { - intersection = finiteLinesIntersect(x, y, centerX, centerY, lines[_i3 * 4], lines[_i3 * 4 + 1], lines[_i3 * 4 + 2], lines[_i3 * 4 + 3], false); - if (intersection.length !== 0) { - intersections.push(intersection[0], intersection[1]); - } - } - if (intersections.length > 2) { - var lowestIntersection = [intersections[0], intersections[1]]; - var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x, 2) + Math.pow(lowestIntersection[1] - y, 2); - for (var _i4 = 1; _i4 < intersections.length / 2; _i4++) { - var squaredDistance = Math.pow(intersections[_i4 * 2] - x, 2) + Math.pow(intersections[_i4 * 2 + 1] - y, 2); - if (squaredDistance <= lowestSquaredDistance) { - lowestIntersection[0] = intersections[_i4 * 2]; - lowestIntersection[1] = intersections[_i4 * 2 + 1]; - lowestSquaredDistance = squaredDistance; - } - } - return lowestIntersection; - } - return intersections; -}; -var shortenIntersection = function shortenIntersection(intersection, offset, amount) { - var disp = [intersection[0] - offset[0], intersection[1] - offset[1]]; - var length = Math.sqrt(disp[0] * disp[0] + disp[1] * disp[1]); - var lenRatio = (length - amount) / length; - if (lenRatio < 0) { - lenRatio = 0.00001; - } - return [offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1]]; -}; -var generateUnitNgonPointsFitToSquare = function generateUnitNgonPointsFitToSquare(sides, rotationRadians) { - var points = generateUnitNgonPoints(sides, rotationRadians); - points = fitPolygonToSquare(points); - return points; -}; -var fitPolygonToSquare = function fitPolygonToSquare(points) { - var x, y; - var sides = points.length / 2; - var minX = Infinity, - minY = Infinity, - maxX = -Infinity, - maxY = -Infinity; - for (var i = 0; i < sides; i++) { - x = points[2 * i]; - y = points[2 * i + 1]; - minX = Math.min(minX, x); - maxX = Math.max(maxX, x); - minY = Math.min(minY, y); - maxY = Math.max(maxY, y); - } - - // stretch factors - var sx = 2 / (maxX - minX); - var sy = 2 / (maxY - minY); - for (var _i5 = 0; _i5 < sides; _i5++) { - x = points[2 * _i5] = points[2 * _i5] * sx; - y = points[2 * _i5 + 1] = points[2 * _i5 + 1] * sy; - minX = Math.min(minX, x); - maxX = Math.max(maxX, x); - minY = Math.min(minY, y); - maxY = Math.max(maxY, y); - } - if (minY < -1) { - for (var _i6 = 0; _i6 < sides; _i6++) { - y = points[2 * _i6 + 1] = points[2 * _i6 + 1] + (-1 - minY); - } - } - return points; -}; -var generateUnitNgonPoints = function generateUnitNgonPoints(sides, rotationRadians) { - var increment = 1.0 / sides * 2 * Math.PI; - var startAngle = sides % 2 === 0 ? Math.PI / 2.0 + increment / 2.0 : Math.PI / 2.0; - startAngle += rotationRadians; - var points = new Array(sides * 2); - var currentAngle; - for (var i = 0; i < sides; i++) { - currentAngle = i * increment + startAngle; - points[2 * i] = Math.cos(currentAngle); // x - points[2 * i + 1] = Math.sin(-currentAngle); // y - } - - return points; -}; - -// Set the default radius, unless half of width or height is smaller than default -var getRoundRectangleRadius = function getRoundRectangleRadius(width, height) { - return Math.min(width / 4, height / 4, 8); -}; - -// Set the default radius -var getRoundPolygonRadius = function getRoundPolygonRadius(width, height) { - return Math.min(width / 10, height / 10, 8); -}; -var getCutRectangleCornerLength = function getCutRectangleCornerLength() { - return 8; -}; -var bezierPtsToQuadCoeff = function bezierPtsToQuadCoeff(p0, p1, p2) { - return [p0 - 2 * p1 + p2, 2 * (p1 - p0), p0]; -}; - -// get curve width, height, and control point position offsets as a percentage of node height / width -var getBarrelCurveConstants = function getBarrelCurveConstants(width, height) { - return { - heightOffset: Math.min(15, 0.05 * height), - widthOffset: Math.min(100, 0.25 * width), - ctrlPtOffsetPct: 0.05 - }; -}; - -var pageRankDefaults = defaults$g({ - dampingFactor: 0.8, - precision: 0.000001, - iterations: 200, - weight: function weight(edge) { - return 1; - } -}); -var elesfn$o = { - pageRank: function pageRank(options) { - var _pageRankDefaults = pageRankDefaults(options), - dampingFactor = _pageRankDefaults.dampingFactor, - precision = _pageRankDefaults.precision, - iterations = _pageRankDefaults.iterations, - weight = _pageRankDefaults.weight; - var cy = this._private.cy; - var _this$byGroup = this.byGroup(), - nodes = _this$byGroup.nodes, - edges = _this$byGroup.edges; - var numNodes = nodes.length; - var numNodesSqd = numNodes * numNodes; - var numEdges = edges.length; - - // Construct transposed adjacency matrix - // First lets have a zeroed matrix of the right size - // We'll also keep track of the sum of each column - var matrix = new Array(numNodesSqd); - var columnSum = new Array(numNodes); - var additionalProb = (1 - dampingFactor) / numNodes; - - // Create null matrix - for (var i = 0; i < numNodes; i++) { - for (var j = 0; j < numNodes; j++) { - var n = i * numNodes + j; - matrix[n] = 0; - } - columnSum[i] = 0; - } - - // Now, process edges - for (var _i = 0; _i < numEdges; _i++) { - var edge = edges[_i]; - var srcId = edge.data('source'); - var tgtId = edge.data('target'); - - // Don't include loops in the matrix - if (srcId === tgtId) { - continue; - } - var s = nodes.indexOfId(srcId); - var t = nodes.indexOfId(tgtId); - var w = weight(edge); - var _n = t * numNodes + s; - - // Update matrix - matrix[_n] += w; - - // Update column sum - columnSum[s] += w; - } - - // Add additional probability based on damping factor - // Also, take into account columns that have sum = 0 - var p = 1.0 / numNodes + additionalProb; // Shorthand - - // Traverse matrix, column by column - for (var _j = 0; _j < numNodes; _j++) { - if (columnSum[_j] === 0) { - // No 'links' out from node jth, assume equal probability for each possible node - for (var _i2 = 0; _i2 < numNodes; _i2++) { - var _n2 = _i2 * numNodes + _j; - matrix[_n2] = p; - } - } else { - // Node jth has outgoing link, compute normalized probabilities - for (var _i3 = 0; _i3 < numNodes; _i3++) { - var _n3 = _i3 * numNodes + _j; - matrix[_n3] = matrix[_n3] / columnSum[_j] + additionalProb; - } - } - } - - // Compute dominant eigenvector using power method - var eigenvector = new Array(numNodes); - var temp = new Array(numNodes); - var previous; - - // Start with a vector of all 1's - // Also, initialize a null vector which will be used as shorthand - for (var _i4 = 0; _i4 < numNodes; _i4++) { - eigenvector[_i4] = 1; - } - for (var iter = 0; iter < iterations; iter++) { - // Temp array with all 0's - for (var _i5 = 0; _i5 < numNodes; _i5++) { - temp[_i5] = 0; - } - - // Multiply matrix with previous result - for (var _i6 = 0; _i6 < numNodes; _i6++) { - for (var _j2 = 0; _j2 < numNodes; _j2++) { - var _n4 = _i6 * numNodes + _j2; - temp[_i6] += matrix[_n4] * eigenvector[_j2]; - } - } - inPlaceSumNormalize(temp); - previous = eigenvector; - eigenvector = temp; - temp = previous; - var diff = 0; - // Compute difference (squared module) of both vectors - for (var _i7 = 0; _i7 < numNodes; _i7++) { - var delta = previous[_i7] - eigenvector[_i7]; - diff += delta * delta; - } - - // If difference is less than the desired threshold, stop iterating - if (diff < precision) { - break; - } - } - - // Construct result - var res = { - rank: function rank(node) { - node = cy.collection(node)[0]; - return eigenvector[nodes.indexOf(node)]; - } - }; - return res; - } // pageRank -}; // elesfn - -var defaults$f = defaults$g({ - root: null, - weight: function weight(edge) { - return 1; - }, - directed: false, - alpha: 0 -}); -var elesfn$n = { - degreeCentralityNormalized: function degreeCentralityNormalized(options) { - options = defaults$f(options); - var cy = this.cy(); - var nodes = this.nodes(); - var numNodes = nodes.length; - if (!options.directed) { - var degrees = {}; - var maxDegree = 0; - for (var i = 0; i < numNodes; i++) { - var node = nodes[i]; - - // add current node to the current options object and call degreeCentrality - options.root = node; - var currDegree = this.degreeCentrality(options); - if (maxDegree < currDegree.degree) { - maxDegree = currDegree.degree; - } - degrees[node.id()] = currDegree.degree; - } - return { - degree: function degree(node) { - if (maxDegree === 0) { - return 0; - } - if (string(node)) { - // from is a selector string - node = cy.filter(node); - } - return degrees[node.id()] / maxDegree; - } - }; - } else { - var indegrees = {}; - var outdegrees = {}; - var maxIndegree = 0; - var maxOutdegree = 0; - for (var _i = 0; _i < numNodes; _i++) { - var _node = nodes[_i]; - var id = _node.id(); - - // add current node to the current options object and call degreeCentrality - options.root = _node; - var _currDegree = this.degreeCentrality(options); - if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree; - if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree; - indegrees[id] = _currDegree.indegree; - outdegrees[id] = _currDegree.outdegree; - } - return { - indegree: function indegree(node) { - if (maxIndegree == 0) { - return 0; - } - if (string(node)) { - // from is a selector string - node = cy.filter(node); - } - return indegrees[node.id()] / maxIndegree; - }, - outdegree: function outdegree(node) { - if (maxOutdegree === 0) { - return 0; - } - if (string(node)) { - // from is a selector string - node = cy.filter(node); - } - return outdegrees[node.id()] / maxOutdegree; - } - }; - } - }, - // degreeCentralityNormalized - - // Implemented from the algorithm in Opsahl's paper - // "Node centrality in weighted networks: Generalizing degree and shortest paths" - // check the heading 2 "Degree" - degreeCentrality: function degreeCentrality(options) { - options = defaults$f(options); - var cy = this.cy(); - var callingEles = this; - var _options = options, - root = _options.root, - weight = _options.weight, - directed = _options.directed, - alpha = _options.alpha; - root = cy.collection(root)[0]; - if (!directed) { - var connEdges = root.connectedEdges().intersection(callingEles); - var k = connEdges.length; - var s = 0; - - // Now, sum edge weights - for (var i = 0; i < connEdges.length; i++) { - s += weight(connEdges[i]); - } - return { - degree: Math.pow(k, 1 - alpha) * Math.pow(s, alpha) - }; - } else { - var edges = root.connectedEdges(); - var incoming = edges.filter(function (edge) { - return edge.target().same(root) && callingEles.has(edge); - }); - var outgoing = edges.filter(function (edge) { - return edge.source().same(root) && callingEles.has(edge); - }); - var k_in = incoming.length; - var k_out = outgoing.length; - var s_in = 0; - var s_out = 0; - - // Now, sum incoming edge weights - for (var _i2 = 0; _i2 < incoming.length; _i2++) { - s_in += weight(incoming[_i2]); - } - - // Now, sum outgoing edge weights - for (var _i3 = 0; _i3 < outgoing.length; _i3++) { - s_out += weight(outgoing[_i3]); - } - return { - indegree: Math.pow(k_in, 1 - alpha) * Math.pow(s_in, alpha), - outdegree: Math.pow(k_out, 1 - alpha) * Math.pow(s_out, alpha) - }; - } - } // degreeCentrality -}; // elesfn - -// nice, short mathematical alias -elesfn$n.dc = elesfn$n.degreeCentrality; -elesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized; - -var defaults$e = defaults$g({ - harmonic: true, - weight: function weight() { - return 1; - }, - directed: false, - root: null -}); -var elesfn$m = { - closenessCentralityNormalized: function closenessCentralityNormalized(options) { - var _defaults = defaults$e(options), - harmonic = _defaults.harmonic, - weight = _defaults.weight, - directed = _defaults.directed; - var cy = this.cy(); - var closenesses = {}; - var maxCloseness = 0; - var nodes = this.nodes(); - var fw = this.floydWarshall({ - weight: weight, - directed: directed - }); - - // Compute closeness for every node and find the maximum closeness - for (var i = 0; i < nodes.length; i++) { - var currCloseness = 0; - var node_i = nodes[i]; - for (var j = 0; j < nodes.length; j++) { - if (i !== j) { - var d = fw.distance(node_i, nodes[j]); - if (harmonic) { - currCloseness += 1 / d; - } else { - currCloseness += d; - } - } - } - if (!harmonic) { - currCloseness = 1 / currCloseness; - } - if (maxCloseness < currCloseness) { - maxCloseness = currCloseness; - } - closenesses[node_i.id()] = currCloseness; - } - return { - closeness: function closeness(node) { - if (maxCloseness == 0) { - return 0; - } - if (string(node)) { - // from is a selector string - node = cy.filter(node)[0].id(); - } else { - // from is a node - node = node.id(); - } - return closenesses[node] / maxCloseness; - } - }; - }, - // Implemented from pseudocode from wikipedia - closenessCentrality: function closenessCentrality(options) { - var _defaults2 = defaults$e(options), - root = _defaults2.root, - weight = _defaults2.weight, - directed = _defaults2.directed, - harmonic = _defaults2.harmonic; - root = this.filter(root)[0]; - - // we need distance from this node to every other node - var dijkstra = this.dijkstra({ - root: root, - weight: weight, - directed: directed - }); - var totalDistance = 0; - var nodes = this.nodes(); - for (var i = 0; i < nodes.length; i++) { - var n = nodes[i]; - if (!n.same(root)) { - var d = dijkstra.distanceTo(n); - if (harmonic) { - totalDistance += 1 / d; - } else { - totalDistance += d; - } - } - } - return harmonic ? totalDistance : 1 / totalDistance; - } // closenessCentrality -}; // elesfn - -// nice, short mathematical alias -elesfn$m.cc = elesfn$m.closenessCentrality; -elesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized; - -var defaults$d = defaults$g({ - weight: null, - directed: false -}); -var elesfn$l = { - // Implemented from the algorithm in the paper "On Variants of Shortest-Path Betweenness Centrality and their Generic Computation" by Ulrik Brandes - betweennessCentrality: function betweennessCentrality(options) { - var _defaults = defaults$d(options), - directed = _defaults.directed, - weight = _defaults.weight; - var weighted = weight != null; - var cy = this.cy(); - - // starting - var V = this.nodes(); - var A = {}; - var _C = {}; - var max = 0; - var C = { - set: function set(key, val) { - _C[key] = val; - if (val > max) { - max = val; - } - }, - get: function get(key) { - return _C[key]; - } - }; - - // A contains the neighborhoods of every node - for (var i = 0; i < V.length; i++) { - var v = V[i]; - var vid = v.id(); - if (directed) { - A[vid] = v.outgoers().nodes(); // get outgoers of every node - } else { - A[vid] = v.openNeighborhood().nodes(); // get neighbors of every node - } - - C.set(vid, 0); - } - var _loop = function _loop(s) { - var sid = V[s].id(); - var S = []; // stack - var P = {}; - var g = {}; - var d = {}; - var Q = new Heap__default["default"](function (a, b) { - return d[a] - d[b]; - }); // queue - - // init dictionaries - for (var _i = 0; _i < V.length; _i++) { - var _vid = V[_i].id(); - P[_vid] = []; - g[_vid] = 0; - d[_vid] = Infinity; - } - g[sid] = 1; // sigma - d[sid] = 0; // distance to s - - Q.push(sid); - while (!Q.empty()) { - var _v = Q.pop(); - S.push(_v); - if (weighted) { - for (var j = 0; j < A[_v].length; j++) { - var w = A[_v][j]; - var vEle = cy.getElementById(_v); - var edge = void 0; - if (vEle.edgesTo(w).length > 0) { - edge = vEle.edgesTo(w)[0]; - } else { - edge = w.edgesTo(vEle)[0]; - } - var edgeWeight = weight(edge); - w = w.id(); - if (d[w] > d[_v] + edgeWeight) { - d[w] = d[_v] + edgeWeight; - if (Q.nodes.indexOf(w) < 0) { - //if w is not in Q - Q.push(w); - } else { - // update position if w is in Q - Q.updateItem(w); - } - g[w] = 0; - P[w] = []; - } - if (d[w] == d[_v] + edgeWeight) { - g[w] = g[w] + g[_v]; - P[w].push(_v); - } - } - } else { - for (var _j = 0; _j < A[_v].length; _j++) { - var _w = A[_v][_j].id(); - if (d[_w] == Infinity) { - Q.push(_w); - d[_w] = d[_v] + 1; - } - if (d[_w] == d[_v] + 1) { - g[_w] = g[_w] + g[_v]; - P[_w].push(_v); - } - } - } - } - var e = {}; - for (var _i2 = 0; _i2 < V.length; _i2++) { - e[V[_i2].id()] = 0; - } - while (S.length > 0) { - var _w2 = S.pop(); - for (var _j2 = 0; _j2 < P[_w2].length; _j2++) { - var _v2 = P[_w2][_j2]; - e[_v2] = e[_v2] + g[_v2] / g[_w2] * (1 + e[_w2]); - } - if (_w2 != V[s].id()) { - C.set(_w2, C.get(_w2) + e[_w2]); - } - } - }; - for (var s = 0; s < V.length; s++) { - _loop(s); - } - var ret = { - betweenness: function betweenness(node) { - var id = cy.collection(node).id(); - return C.get(id); - }, - betweennessNormalized: function betweennessNormalized(node) { - if (max == 0) { - return 0; - } - var id = cy.collection(node).id(); - return C.get(id) / max; - } - }; - - // alias - ret.betweennessNormalised = ret.betweennessNormalized; - return ret; - } // betweennessCentrality -}; // elesfn - -// nice, short mathematical alias -elesfn$l.bc = elesfn$l.betweennessCentrality; - -// Implemented by Zoe Xi @zoexi for GSOC 2016 - -/* eslint-disable no-unused-vars */ -var defaults$c = defaults$g({ - expandFactor: 2, - // affects time of computation and cluster granularity to some extent: M * M - inflateFactor: 2, - // affects cluster granularity (the greater the value, the more clusters): M(i,j) / E(j) - multFactor: 1, - // optional self loops for each node. Use a neutral value to improve cluster computations. - maxIterations: 20, - // maximum number of iterations of the MCL algorithm in a single run - attributes: [ - // attributes/features used to group nodes, ie. similarity values between nodes - function (edge) { - return 1; - }] -}); -/* eslint-enable */ - -var setOptions$3 = function setOptions(options) { - return defaults$c(options); -}; -/* eslint-enable */ - -var getSimilarity$1 = function getSimilarity(edge, attributes) { - var total = 0; - for (var i = 0; i < attributes.length; i++) { - total += attributes[i](edge); - } - return total; -}; -var addLoops = function addLoops(M, n, val) { - for (var i = 0; i < n; i++) { - M[i * n + i] = val; - } -}; -var normalize = function normalize(M, n) { - var sum; - for (var col = 0; col < n; col++) { - sum = 0; - for (var row = 0; row < n; row++) { - sum += M[row * n + col]; - } - for (var _row = 0; _row < n; _row++) { - M[_row * n + col] = M[_row * n + col] / sum; - } - } -}; - -// TODO: blocked matrix multiplication? -var mmult = function mmult(A, B, n) { - var C = new Array(n * n); - for (var i = 0; i < n; i++) { - for (var j = 0; j < n; j++) { - C[i * n + j] = 0; - } - for (var k = 0; k < n; k++) { - for (var _j = 0; _j < n; _j++) { - C[i * n + _j] += A[i * n + k] * B[k * n + _j]; - } - } - } - return C; -}; -var expand = function expand(M, n, expandFactor /** power **/) { - var _M = M.slice(0); - for (var p = 1; p < expandFactor; p++) { - M = mmult(M, _M, n); - } - return M; -}; -var inflate = function inflate(M, n, inflateFactor /** r **/) { - var _M = new Array(n * n); - - // M(i,j) ^ inflatePower - for (var i = 0; i < n * n; i++) { - _M[i] = Math.pow(M[i], inflateFactor); - } - normalize(_M, n); - return _M; -}; -var hasConverged = function hasConverged(M, _M, n2, roundFactor) { - // Check that both matrices have the same elements (i,j) - for (var i = 0; i < n2; i++) { - var v1 = Math.round(M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); // truncate to 'roundFactor' decimal places - var v2 = Math.round(_M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); - if (v1 !== v2) { - return false; - } - } - return true; -}; -var assign$2 = function assign(M, n, nodes, cy) { - var clusters = []; - for (var i = 0; i < n; i++) { - var cluster = []; - for (var j = 0; j < n; j++) { - // Row-wise attractors and elements that they attract belong in same cluster - if (Math.round(M[i * n + j] * 1000) / 1000 > 0) { - cluster.push(nodes[j]); - } - } - if (cluster.length !== 0) { - clusters.push(cy.collection(cluster)); - } - } - return clusters; -}; -var isDuplicate = function isDuplicate(c1, c2) { - for (var i = 0; i < c1.length; i++) { - if (!c2[i] || c1[i].id() !== c2[i].id()) { - return false; - } - } - return true; -}; -var removeDuplicates = function removeDuplicates(clusters) { - for (var i = 0; i < clusters.length; i++) { - for (var j = 0; j < clusters.length; j++) { - if (i != j && isDuplicate(clusters[i], clusters[j])) { - clusters.splice(j, 1); - } - } - } - return clusters; -}; -var markovClustering = function markovClustering(options) { - var nodes = this.nodes(); - var edges = this.edges(); - var cy = this.cy(); - - // Set parameters of algorithm: - var opts = setOptions$3(options); - - // Map each node to its position in node array - var id2position = {}; - for (var i = 0; i < nodes.length; i++) { - id2position[nodes[i].id()] = i; - } - - // Generate stochastic matrix M from input graph G (should be symmetric/undirected) - var n = nodes.length, - n2 = n * n; - var M = new Array(n2), - _M; - for (var _i = 0; _i < n2; _i++) { - M[_i] = 0; - } - for (var e = 0; e < edges.length; e++) { - var edge = edges[e]; - var _i2 = id2position[edge.source().id()]; - var j = id2position[edge.target().id()]; - var sim = getSimilarity$1(edge, opts.attributes); - M[_i2 * n + j] += sim; // G should be symmetric and undirected - M[j * n + _i2] += sim; - } - - // Begin Markov cluster algorithm - - // Step 1: Add self loops to each node, ie. add multFactor to matrix diagonal - addLoops(M, n, opts.multFactor); - - // Step 2: M = normalize( M ); - normalize(M, n); - var isStillMoving = true; - var iterations = 0; - while (isStillMoving && iterations < opts.maxIterations) { - isStillMoving = false; - - // Step 3: - _M = expand(M, n, opts.expandFactor); - - // Step 4: - M = inflate(_M, n, opts.inflateFactor); - - // Step 5: check to see if ~steady state has been reached - if (!hasConverged(M, _M, n2, 4)) { - isStillMoving = true; - } - iterations++; - } - - // Build clusters from matrix - var clusters = assign$2(M, n, nodes, cy); - - // Remove duplicate clusters due to symmetry of graph and M matrix - clusters = removeDuplicates(clusters); - return clusters; -}; -var markovClustering$1 = { - markovClustering: markovClustering, - mcl: markovClustering -}; - -// Common distance metrics for clustering algorithms -var identity = function identity(x) { - return x; -}; -var absDiff = function absDiff(p, q) { - return Math.abs(q - p); -}; -var addAbsDiff = function addAbsDiff(total, p, q) { - return total + absDiff(p, q); -}; -var addSquaredDiff = function addSquaredDiff(total, p, q) { - return total + Math.pow(q - p, 2); -}; -var sqrt = function sqrt(x) { - return Math.sqrt(x); -}; -var maxAbsDiff = function maxAbsDiff(currentMax, p, q) { - return Math.max(currentMax, absDiff(p, q)); -}; -var getDistance = function getDistance(length, getP, getQ, init, visit) { - var post = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : identity; - var ret = init; - var p, q; - for (var dim = 0; dim < length; dim++) { - p = getP(dim); - q = getQ(dim); - ret = visit(ret, p, q); - } - return post(ret); -}; -var distances = { - euclidean: function euclidean(length, getP, getQ) { - if (length >= 2) { - return getDistance(length, getP, getQ, 0, addSquaredDiff, sqrt); - } else { - // for single attr case, more efficient to avoid sqrt - return getDistance(length, getP, getQ, 0, addAbsDiff); - } - }, - squaredEuclidean: function squaredEuclidean(length, getP, getQ) { - return getDistance(length, getP, getQ, 0, addSquaredDiff); - }, - manhattan: function manhattan(length, getP, getQ) { - return getDistance(length, getP, getQ, 0, addAbsDiff); - }, - max: function max(length, getP, getQ) { - return getDistance(length, getP, getQ, -Infinity, maxAbsDiff); - } -}; - -// in case the user accidentally doesn't use camel case -distances['squared-euclidean'] = distances['squaredEuclidean']; -distances['squaredeuclidean'] = distances['squaredEuclidean']; -function clusteringDistance (method, length, getP, getQ, nodeP, nodeQ) { - var impl; - if (fn$6(method)) { - impl = method; - } else { - impl = distances[method] || distances.euclidean; - } - if (length === 0 && fn$6(method)) { - return impl(nodeP, nodeQ); - } else { - return impl(length, getP, getQ, nodeP, nodeQ); - } -} - -var defaults$b = defaults$g({ - k: 2, - m: 2, - sensitivityThreshold: 0.0001, - distance: 'euclidean', - maxIterations: 10, - attributes: [], - testMode: false, - testCentroids: null -}); -var setOptions$2 = function setOptions(options) { - return defaults$b(options); -}; - -var getDist = function getDist(type, node, centroid, attributes, mode) { - var noNodeP = mode !== 'kMedoids'; - var getP = noNodeP ? function (i) { - return centroid[i]; - } : function (i) { - return attributes[i](centroid); - }; - var getQ = function getQ(i) { - return attributes[i](node); - }; - var nodeP = centroid; - var nodeQ = node; - return clusteringDistance(type, attributes.length, getP, getQ, nodeP, nodeQ); -}; -var randomCentroids = function randomCentroids(nodes, k, attributes) { - var ndim = attributes.length; - var min = new Array(ndim); - var max = new Array(ndim); - var centroids = new Array(k); - var centroid = null; - - // Find min, max values for each attribute dimension - for (var i = 0; i < ndim; i++) { - min[i] = nodes.min(attributes[i]).value; - max[i] = nodes.max(attributes[i]).value; - } - - // Build k centroids, each represented as an n-dim feature vector - for (var c = 0; c < k; c++) { - centroid = []; - for (var _i = 0; _i < ndim; _i++) { - centroid[_i] = Math.random() * (max[_i] - min[_i]) + min[_i]; // random initial value - } - - centroids[c] = centroid; - } - return centroids; -}; -var classify = function classify(node, centroids, distance, attributes, type) { - var min = Infinity; - var index = 0; - for (var i = 0; i < centroids.length; i++) { - var dist = getDist(distance, node, centroids[i], attributes, type); - if (dist < min) { - min = dist; - index = i; - } - } - return index; -}; -var buildCluster = function buildCluster(centroid, nodes, assignment) { - var cluster = []; - var node = null; - for (var n = 0; n < nodes.length; n++) { - node = nodes[n]; - if (assignment[node.id()] === centroid) { - //console.log("Node " + node.id() + " is associated with medoid #: " + m); - cluster.push(node); - } - } - return cluster; -}; -var haveValuesConverged = function haveValuesConverged(v1, v2, sensitivityThreshold) { - return Math.abs(v2 - v1) <= sensitivityThreshold; -}; -var haveMatricesConverged = function haveMatricesConverged(v1, v2, sensitivityThreshold) { - for (var i = 0; i < v1.length; i++) { - for (var j = 0; j < v1[i].length; j++) { - var diff = Math.abs(v1[i][j] - v2[i][j]); - if (diff > sensitivityThreshold) { - return false; - } - } - } - return true; -}; -var seenBefore = function seenBefore(node, medoids, n) { - for (var i = 0; i < n; i++) { - if (node === medoids[i]) return true; - } - return false; -}; -var randomMedoids = function randomMedoids(nodes, k) { - var medoids = new Array(k); - - // For small data sets, the probability of medoid conflict is greater, - // so we need to check to see if we've already seen or chose this node before. - if (nodes.length < 50) { - // Randomly select k medoids from the n nodes - for (var i = 0; i < k; i++) { - var node = nodes[Math.floor(Math.random() * nodes.length)]; - - // If we've already chosen this node to be a medoid, don't choose it again (for small data sets). - // Instead choose a different random node. - while (seenBefore(node, medoids, i)) { - node = nodes[Math.floor(Math.random() * nodes.length)]; - } - medoids[i] = node; - } - } else { - // Relatively large data set, so pretty safe to not check and just select random nodes - for (var _i2 = 0; _i2 < k; _i2++) { - medoids[_i2] = nodes[Math.floor(Math.random() * nodes.length)]; - } - } - return medoids; -}; -var findCost = function findCost(potentialNewMedoid, cluster, attributes) { - var cost = 0; - for (var n = 0; n < cluster.length; n++) { - cost += getDist('manhattan', cluster[n], potentialNewMedoid, attributes, 'kMedoids'); - } - return cost; -}; -var kMeans = function kMeans(options) { - var cy = this.cy(); - var nodes = this.nodes(); - var node = null; - - // Set parameters of algorithm: # of clusters, distance metric, etc. - var opts = setOptions$2(options); - - // Begin k-means algorithm - var clusters = new Array(opts.k); - var assignment = {}; - var centroids; - - // Step 1: Initialize centroid positions - if (opts.testMode) { - if (typeof opts.testCentroids === 'number') { - // TODO: implement a seeded random number generator. - opts.testCentroids; - centroids = randomCentroids(nodes, opts.k, opts.attributes); - } else if (_typeof(opts.testCentroids) === 'object') { - centroids = opts.testCentroids; - } else { - centroids = randomCentroids(nodes, opts.k, opts.attributes); - } - } else { - centroids = randomCentroids(nodes, opts.k, opts.attributes); - } - var isStillMoving = true; - var iterations = 0; - while (isStillMoving && iterations < opts.maxIterations) { - // Step 2: Assign nodes to the nearest centroid - for (var n = 0; n < nodes.length; n++) { - node = nodes[n]; - // Determine which cluster this node belongs to: node id => cluster # - assignment[node.id()] = classify(node, centroids, opts.distance, opts.attributes, 'kMeans'); - } - - // Step 3: For each of the k clusters, update its centroid - isStillMoving = false; - for (var c = 0; c < opts.k; c++) { - // Get all nodes that belong to this cluster - var cluster = buildCluster(c, nodes, assignment); - if (cluster.length === 0) { - // If cluster is empty, break out early & move to next cluster - continue; - } - - // Update centroids by calculating avg of all nodes within the cluster. - var ndim = opts.attributes.length; - var centroid = centroids[c]; // [ dim_1, dim_2, dim_3, ... , dim_n ] - var newCentroid = new Array(ndim); - var sum = new Array(ndim); - for (var d = 0; d < ndim; d++) { - sum[d] = 0.0; - for (var i = 0; i < cluster.length; i++) { - node = cluster[i]; - sum[d] += opts.attributes[d](node); - } - newCentroid[d] = sum[d] / cluster.length; - - // Check to see if algorithm has converged, i.e. when centroids no longer change - if (!haveValuesConverged(newCentroid[d], centroid[d], opts.sensitivityThreshold)) { - isStillMoving = true; - } - } - centroids[c] = newCentroid; - clusters[c] = cy.collection(cluster); - } - iterations++; - } - return clusters; -}; -var kMedoids = function kMedoids(options) { - var cy = this.cy(); - var nodes = this.nodes(); - var node = null; - var opts = setOptions$2(options); - - // Begin k-medoids algorithm - var clusters = new Array(opts.k); - var medoids; - var assignment = {}; - var curCost; - var minCosts = new Array(opts.k); // minimum cost configuration for each cluster - - // Step 1: Initialize k medoids - if (opts.testMode) { - if (typeof opts.testCentroids === 'number') ; else if (_typeof(opts.testCentroids) === 'object') { - medoids = opts.testCentroids; - } else { - medoids = randomMedoids(nodes, opts.k); - } - } else { - medoids = randomMedoids(nodes, opts.k); - } - var isStillMoving = true; - var iterations = 0; - while (isStillMoving && iterations < opts.maxIterations) { - // Step 2: Assign nodes to the nearest medoid - for (var n = 0; n < nodes.length; n++) { - node = nodes[n]; - // Determine which cluster this node belongs to: node id => cluster # - assignment[node.id()] = classify(node, medoids, opts.distance, opts.attributes, 'kMedoids'); - } - isStillMoving = false; - // Step 3: For each medoid m, and for each node associated with mediod m, - // select the node with the lowest configuration cost as new medoid. - for (var m = 0; m < medoids.length; m++) { - // Get all nodes that belong to this medoid - var cluster = buildCluster(m, nodes, assignment); - if (cluster.length === 0) { - // If cluster is empty, break out early & move to next cluster - continue; - } - minCosts[m] = findCost(medoids[m], cluster, opts.attributes); // original cost - - // Select different medoid if its configuration has the lowest cost - for (var _n = 0; _n < cluster.length; _n++) { - curCost = findCost(cluster[_n], cluster, opts.attributes); - if (curCost < minCosts[m]) { - minCosts[m] = curCost; - medoids[m] = cluster[_n]; - isStillMoving = true; - } - } - clusters[m] = cy.collection(cluster); - } - iterations++; - } - return clusters; -}; -var updateCentroids = function updateCentroids(centroids, nodes, U, weight, opts) { - var numerator, denominator; - for (var n = 0; n < nodes.length; n++) { - for (var c = 0; c < centroids.length; c++) { - weight[n][c] = Math.pow(U[n][c], opts.m); - } - } - for (var _c = 0; _c < centroids.length; _c++) { - for (var dim = 0; dim < opts.attributes.length; dim++) { - numerator = 0; - denominator = 0; - for (var _n2 = 0; _n2 < nodes.length; _n2++) { - numerator += weight[_n2][_c] * opts.attributes[dim](nodes[_n2]); - denominator += weight[_n2][_c]; - } - centroids[_c][dim] = numerator / denominator; - } - } -}; -var updateMembership = function updateMembership(U, _U, centroids, nodes, opts) { - // Save previous step - for (var i = 0; i < U.length; i++) { - _U[i] = U[i].slice(); - } - var sum, numerator, denominator; - var pow = 2 / (opts.m - 1); - for (var c = 0; c < centroids.length; c++) { - for (var n = 0; n < nodes.length; n++) { - sum = 0; - for (var k = 0; k < centroids.length; k++) { - // against all other centroids - numerator = getDist(opts.distance, nodes[n], centroids[c], opts.attributes, 'cmeans'); - denominator = getDist(opts.distance, nodes[n], centroids[k], opts.attributes, 'cmeans'); - sum += Math.pow(numerator / denominator, pow); - } - U[n][c] = 1 / sum; - } - } -}; -var assign$1 = function assign(nodes, U, opts, cy) { - var clusters = new Array(opts.k); - for (var c = 0; c < clusters.length; c++) { - clusters[c] = []; - } - var max; - var index; - for (var n = 0; n < U.length; n++) { - // for each node (U is N x C matrix) - max = -Infinity; - index = -1; - // Determine which cluster the node is most likely to belong in - for (var _c2 = 0; _c2 < U[0].length; _c2++) { - if (U[n][_c2] > max) { - max = U[n][_c2]; - index = _c2; - } - } - clusters[index].push(nodes[n]); - } - - // Turn every array into a collection of nodes - for (var _c3 = 0; _c3 < clusters.length; _c3++) { - clusters[_c3] = cy.collection(clusters[_c3]); - } - return clusters; -}; -var fuzzyCMeans = function fuzzyCMeans(options) { - var cy = this.cy(); - var nodes = this.nodes(); - var opts = setOptions$2(options); - - // Begin fuzzy c-means algorithm - var clusters; - var centroids; - var U; - var _U; - var weight; - - // Step 1: Initialize letiables. - _U = new Array(nodes.length); - for (var i = 0; i < nodes.length; i++) { - // N x C matrix - _U[i] = new Array(opts.k); - } - U = new Array(nodes.length); - for (var _i3 = 0; _i3 < nodes.length; _i3++) { - // N x C matrix - U[_i3] = new Array(opts.k); - } - for (var _i4 = 0; _i4 < nodes.length; _i4++) { - var total = 0; - for (var j = 0; j < opts.k; j++) { - U[_i4][j] = Math.random(); - total += U[_i4][j]; - } - for (var _j = 0; _j < opts.k; _j++) { - U[_i4][_j] = U[_i4][_j] / total; - } - } - centroids = new Array(opts.k); - for (var _i5 = 0; _i5 < opts.k; _i5++) { - centroids[_i5] = new Array(opts.attributes.length); - } - weight = new Array(nodes.length); - for (var _i6 = 0; _i6 < nodes.length; _i6++) { - // N x C matrix - weight[_i6] = new Array(opts.k); - } - // end init FCM - - var isStillMoving = true; - var iterations = 0; - while (isStillMoving && iterations < opts.maxIterations) { - isStillMoving = false; - - // Step 2: Calculate the centroids for each step. - updateCentroids(centroids, nodes, U, weight, opts); - - // Step 3: Update the partition matrix U. - updateMembership(U, _U, centroids, nodes, opts); - - // Step 4: Check for convergence. - if (!haveMatricesConverged(U, _U, opts.sensitivityThreshold)) { - isStillMoving = true; - } - iterations++; - } - - // Assign nodes to clusters with highest probability. - clusters = assign$1(nodes, U, opts, cy); - return { - clusters: clusters, - degreeOfMembership: U - }; -}; -var kClustering = { - kMeans: kMeans, - kMedoids: kMedoids, - fuzzyCMeans: fuzzyCMeans, - fcm: fuzzyCMeans -}; - -// Implemented by Zoe Xi @zoexi for GSOC 2016 -var defaults$a = defaults$g({ - distance: 'euclidean', - // distance metric to compare nodes - linkage: 'min', - // linkage criterion : how to determine the distance between clusters of nodes - mode: 'threshold', - // mode:'threshold' => clusters must be threshold distance apart - threshold: Infinity, - // the distance threshold - // mode:'dendrogram' => the nodes are organised as leaves in a tree (siblings are close), merging makes clusters - addDendrogram: false, - // whether to add the dendrogram to the graph for viz - dendrogramDepth: 0, - // depth at which dendrogram branches are merged into the returned clusters - attributes: [] // array of attr functions -}); - -var linkageAliases = { - 'single': 'min', - 'complete': 'max' -}; -var setOptions$1 = function setOptions(options) { - var opts = defaults$a(options); - var preferredAlias = linkageAliases[opts.linkage]; - if (preferredAlias != null) { - opts.linkage = preferredAlias; - } - return opts; -}; -var mergeClosest = function mergeClosest(clusters, index, dists, mins, opts) { - // Find two closest clusters from cached mins - var minKey = 0; - var min = Infinity; - var dist; - var attrs = opts.attributes; - var getDist = function getDist(n1, n2) { - return clusteringDistance(opts.distance, attrs.length, function (i) { - return attrs[i](n1); - }, function (i) { - return attrs[i](n2); - }, n1, n2); - }; - for (var i = 0; i < clusters.length; i++) { - var key = clusters[i].key; - var _dist = dists[key][mins[key]]; - if (_dist < min) { - minKey = key; - min = _dist; - } - } - if (opts.mode === 'threshold' && min >= opts.threshold || opts.mode === 'dendrogram' && clusters.length === 1) { - return false; - } - var c1 = index[minKey]; - var c2 = index[mins[minKey]]; - var merged; - - // Merge two closest clusters - if (opts.mode === 'dendrogram') { - merged = { - left: c1, - right: c2, - key: c1.key - }; - } else { - merged = { - value: c1.value.concat(c2.value), - key: c1.key - }; - } - clusters[c1.index] = merged; - clusters.splice(c2.index, 1); - index[c1.key] = merged; - - // Update distances with new merged cluster - for (var _i = 0; _i < clusters.length; _i++) { - var cur = clusters[_i]; - if (c1.key === cur.key) { - dist = Infinity; - } else if (opts.linkage === 'min') { - dist = dists[c1.key][cur.key]; - if (dists[c1.key][cur.key] > dists[c2.key][cur.key]) { - dist = dists[c2.key][cur.key]; - } - } else if (opts.linkage === 'max') { - dist = dists[c1.key][cur.key]; - if (dists[c1.key][cur.key] < dists[c2.key][cur.key]) { - dist = dists[c2.key][cur.key]; - } - } else if (opts.linkage === 'mean') { - dist = (dists[c1.key][cur.key] * c1.size + dists[c2.key][cur.key] * c2.size) / (c1.size + c2.size); - } else { - if (opts.mode === 'dendrogram') dist = getDist(cur.value, c1.value);else dist = getDist(cur.value[0], c1.value[0]); - } - dists[c1.key][cur.key] = dists[cur.key][c1.key] = dist; // distance matrix is symmetric - } - - // Update cached mins - for (var _i2 = 0; _i2 < clusters.length; _i2++) { - var key1 = clusters[_i2].key; - if (mins[key1] === c1.key || mins[key1] === c2.key) { - var _min = key1; - for (var j = 0; j < clusters.length; j++) { - var key2 = clusters[j].key; - if (dists[key1][key2] < dists[key1][_min]) { - _min = key2; - } - } - mins[key1] = _min; - } - clusters[_i2].index = _i2; - } - - // Clean up meta data used for clustering - c1.key = c2.key = c1.index = c2.index = null; - return true; -}; -var getAllChildren = function getAllChildren(root, arr, cy) { - if (!root) return; - if (root.value) { - arr.push(root.value); - } else { - if (root.left) getAllChildren(root.left, arr); - if (root.right) getAllChildren(root.right, arr); - } -}; -var buildDendrogram = function buildDendrogram(root, cy) { - if (!root) return ''; - if (root.left && root.right) { - var leftStr = buildDendrogram(root.left, cy); - var rightStr = buildDendrogram(root.right, cy); - var node = cy.add({ - group: 'nodes', - data: { - id: leftStr + ',' + rightStr - } - }); - cy.add({ - group: 'edges', - data: { - source: leftStr, - target: node.id() - } - }); - cy.add({ - group: 'edges', - data: { - source: rightStr, - target: node.id() - } - }); - return node.id(); - } else if (root.value) { - return root.value.id(); - } -}; -var buildClustersFromTree = function buildClustersFromTree(root, k, cy) { - if (!root) return []; - var left = [], - right = [], - leaves = []; - if (k === 0) { - // don't cut tree, simply return all nodes as 1 single cluster - if (root.left) getAllChildren(root.left, left); - if (root.right) getAllChildren(root.right, right); - leaves = left.concat(right); - return [cy.collection(leaves)]; - } else if (k === 1) { - // cut at root - - if (root.value) { - // leaf node - return [cy.collection(root.value)]; - } else { - if (root.left) getAllChildren(root.left, left); - if (root.right) getAllChildren(root.right, right); - return [cy.collection(left), cy.collection(right)]; - } - } else { - if (root.value) { - return [cy.collection(root.value)]; - } else { - if (root.left) left = buildClustersFromTree(root.left, k - 1, cy); - if (root.right) right = buildClustersFromTree(root.right, k - 1, cy); - return left.concat(right); - } - } -}; - -var hierarchicalClustering = function hierarchicalClustering(options) { - var cy = this.cy(); - var nodes = this.nodes(); - - // Set parameters of algorithm: linkage type, distance metric, etc. - var opts = setOptions$1(options); - var attrs = opts.attributes; - var getDist = function getDist(n1, n2) { - return clusteringDistance(opts.distance, attrs.length, function (i) { - return attrs[i](n1); - }, function (i) { - return attrs[i](n2); - }, n1, n2); - }; - - // Begin hierarchical algorithm - var clusters = []; - var dists = []; // distances between each pair of clusters - var mins = []; // closest cluster for each cluster - var index = []; // hash of all clusters by key - - // In agglomerative (bottom-up) clustering, each node starts as its own cluster - for (var n = 0; n < nodes.length; n++) { - var cluster = { - value: opts.mode === 'dendrogram' ? nodes[n] : [nodes[n]], - key: n, - index: n - }; - clusters[n] = cluster; - index[n] = cluster; - dists[n] = []; - mins[n] = 0; - } - - // Calculate the distance between each pair of clusters - for (var i = 0; i < clusters.length; i++) { - for (var j = 0; j <= i; j++) { - var dist = void 0; - if (opts.mode === 'dendrogram') { - // modes store cluster values differently - dist = i === j ? Infinity : getDist(clusters[i].value, clusters[j].value); - } else { - dist = i === j ? Infinity : getDist(clusters[i].value[0], clusters[j].value[0]); - } - dists[i][j] = dist; - dists[j][i] = dist; - if (dist < dists[i][mins[i]]) { - mins[i] = j; // Cache mins: closest cluster to cluster i is cluster j - } - } - } - - // Find the closest pair of clusters and merge them into a single cluster. - // Update distances between new cluster and each of the old clusters, and loop until threshold reached. - var merged = mergeClosest(clusters, index, dists, mins, opts); - while (merged) { - merged = mergeClosest(clusters, index, dists, mins, opts); - } - var retClusters; - - // Dendrogram mode builds the hierarchy and adds intermediary nodes + edges - // in addition to returning the clusters. - if (opts.mode === 'dendrogram') { - retClusters = buildClustersFromTree(clusters[0], opts.dendrogramDepth, cy); - if (opts.addDendrogram) buildDendrogram(clusters[0], cy); - } else { - // Regular mode simply returns the clusters - - retClusters = new Array(clusters.length); - clusters.forEach(function (cluster, i) { - // Clean up meta data used for clustering - cluster.key = cluster.index = null; - retClusters[i] = cy.collection(cluster.value); - }); - } - return retClusters; -}; -var hierarchicalClustering$1 = { - hierarchicalClustering: hierarchicalClustering, - hca: hierarchicalClustering -}; - -// Implemented by Zoe Xi @zoexi for GSOC 2016 -var defaults$9 = defaults$g({ - distance: 'euclidean', - // distance metric to compare attributes between two nodes - preference: 'median', - // suitability of a data point to serve as an exemplar - damping: 0.8, - // damping factor between [0.5, 1) - maxIterations: 1000, - // max number of iterations to run - minIterations: 100, - // min number of iterations to run in order for clustering to stop - attributes: [// functions to quantify the similarity between any two points - // e.g. node => node.data('weight') - ] -}); -var setOptions = function setOptions(options) { - var dmp = options.damping; - var pref = options.preference; - if (!(0.5 <= dmp && dmp < 1)) { - error("Damping must range on [0.5, 1). Got: ".concat(dmp)); - } - var validPrefs = ['median', 'mean', 'min', 'max']; - if (!(validPrefs.some(function (v) { - return v === pref; - }) || number$1(pref))) { - error("Preference must be one of [".concat(validPrefs.map(function (p) { - return "'".concat(p, "'"); - }).join(', '), "] or a number. Got: ").concat(pref)); - } - return defaults$9(options); -}; - -var getSimilarity = function getSimilarity(type, n1, n2, attributes) { - var attr = function attr(n, i) { - return attributes[i](n); - }; - - // nb negative because similarity should have an inverse relationship to distance - return -clusteringDistance(type, attributes.length, function (i) { - return attr(n1, i); - }, function (i) { - return attr(n2, i); - }, n1, n2); -}; -var getPreference = function getPreference(S, preference) { - // larger preference = greater # of clusters - var p = null; - if (preference === 'median') { - p = median(S); - } else if (preference === 'mean') { - p = mean(S); - } else if (preference === 'min') { - p = min(S); - } else if (preference === 'max') { - p = max(S); - } else { - // Custom preference number, as set by user - p = preference; - } - return p; -}; -var findExemplars = function findExemplars(n, R, A) { - var indices = []; - for (var i = 0; i < n; i++) { - if (R[i * n + i] + A[i * n + i] > 0) { - indices.push(i); - } - } - return indices; -}; -var assignClusters = function assignClusters(n, S, exemplars) { - var clusters = []; - for (var i = 0; i < n; i++) { - var index = -1; - var max = -Infinity; - for (var ei = 0; ei < exemplars.length; ei++) { - var e = exemplars[ei]; - if (S[i * n + e] > max) { - index = e; - max = S[i * n + e]; - } - } - if (index > 0) { - clusters.push(index); - } - } - for (var _ei = 0; _ei < exemplars.length; _ei++) { - clusters[exemplars[_ei]] = exemplars[_ei]; - } - return clusters; -}; -var assign = function assign(n, S, exemplars) { - var clusters = assignClusters(n, S, exemplars); - for (var ei = 0; ei < exemplars.length; ei++) { - var ii = []; - for (var c = 0; c < clusters.length; c++) { - if (clusters[c] === exemplars[ei]) { - ii.push(c); - } - } - var maxI = -1; - var maxSum = -Infinity; - for (var i = 0; i < ii.length; i++) { - var sum = 0; - for (var j = 0; j < ii.length; j++) { - sum += S[ii[j] * n + ii[i]]; - } - if (sum > maxSum) { - maxI = i; - maxSum = sum; - } - } - exemplars[ei] = ii[maxI]; - } - clusters = assignClusters(n, S, exemplars); - return clusters; -}; -var affinityPropagation = function affinityPropagation(options) { - var cy = this.cy(); - var nodes = this.nodes(); - var opts = setOptions(options); - - // Map each node to its position in node array - var id2position = {}; - for (var i = 0; i < nodes.length; i++) { - id2position[nodes[i].id()] = i; - } - - // Begin affinity propagation algorithm - - var n; // number of data points - var n2; // size of matrices - var S; // similarity matrix (1D array) - var p; // preference/suitability of a data point to serve as an exemplar - var R; // responsibility matrix (1D array) - var A; // availability matrix (1D array) - - n = nodes.length; - n2 = n * n; - - // Initialize and build S similarity matrix - S = new Array(n2); - for (var _i = 0; _i < n2; _i++) { - S[_i] = -Infinity; // for cases where two data points shouldn't be linked together - } - - for (var _i2 = 0; _i2 < n; _i2++) { - for (var j = 0; j < n; j++) { - if (_i2 !== j) { - S[_i2 * n + j] = getSimilarity(opts.distance, nodes[_i2], nodes[j], opts.attributes); - } - } - } - - // Place preferences on the diagonal of S - p = getPreference(S, opts.preference); - for (var _i3 = 0; _i3 < n; _i3++) { - S[_i3 * n + _i3] = p; - } - - // Initialize R responsibility matrix - R = new Array(n2); - for (var _i4 = 0; _i4 < n2; _i4++) { - R[_i4] = 0.0; - } - - // Initialize A availability matrix - A = new Array(n2); - for (var _i5 = 0; _i5 < n2; _i5++) { - A[_i5] = 0.0; - } - var old = new Array(n); - var Rp = new Array(n); - var se = new Array(n); - for (var _i6 = 0; _i6 < n; _i6++) { - old[_i6] = 0.0; - Rp[_i6] = 0.0; - se[_i6] = 0; - } - var e = new Array(n * opts.minIterations); - for (var _i7 = 0; _i7 < e.length; _i7++) { - e[_i7] = 0; - } - var iter; - for (iter = 0; iter < opts.maxIterations; iter++) { - // main algorithmic loop - - // Update R responsibility matrix - for (var _i8 = 0; _i8 < n; _i8++) { - var max = -Infinity, - max2 = -Infinity, - maxI = -1, - AS = 0.0; - for (var _j = 0; _j < n; _j++) { - old[_j] = R[_i8 * n + _j]; - AS = A[_i8 * n + _j] + S[_i8 * n + _j]; - if (AS >= max) { - max2 = max; - max = AS; - maxI = _j; - } else if (AS > max2) { - max2 = AS; - } - } - for (var _j2 = 0; _j2 < n; _j2++) { - R[_i8 * n + _j2] = (1 - opts.damping) * (S[_i8 * n + _j2] - max) + opts.damping * old[_j2]; - } - R[_i8 * n + maxI] = (1 - opts.damping) * (S[_i8 * n + maxI] - max2) + opts.damping * old[maxI]; - } - - // Update A availability matrix - for (var _i9 = 0; _i9 < n; _i9++) { - var sum = 0; - for (var _j3 = 0; _j3 < n; _j3++) { - old[_j3] = A[_j3 * n + _i9]; - Rp[_j3] = Math.max(0, R[_j3 * n + _i9]); - sum += Rp[_j3]; - } - sum -= Rp[_i9]; - Rp[_i9] = R[_i9 * n + _i9]; - sum += Rp[_i9]; - for (var _j4 = 0; _j4 < n; _j4++) { - A[_j4 * n + _i9] = (1 - opts.damping) * Math.min(0, sum - Rp[_j4]) + opts.damping * old[_j4]; - } - A[_i9 * n + _i9] = (1 - opts.damping) * (sum - Rp[_i9]) + opts.damping * old[_i9]; - } - - // Check for convergence - var K = 0; - for (var _i10 = 0; _i10 < n; _i10++) { - var E = A[_i10 * n + _i10] + R[_i10 * n + _i10] > 0 ? 1 : 0; - e[iter % opts.minIterations * n + _i10] = E; - K += E; - } - if (K > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) { - var _sum = 0; - for (var _i11 = 0; _i11 < n; _i11++) { - se[_i11] = 0; - for (var _j5 = 0; _j5 < opts.minIterations; _j5++) { - se[_i11] += e[_j5 * n + _i11]; - } - if (se[_i11] === 0 || se[_i11] === opts.minIterations) { - _sum++; - } - } - if (_sum === n) { - // then we have convergence - break; - } - } - } - - // Identify exemplars (cluster centers) - var exemplarsIndices = findExemplars(n, R, A); - - // Assign nodes to clusters - var clusterIndices = assign(n, S, exemplarsIndices); - var clusters = {}; - for (var c = 0; c < exemplarsIndices.length; c++) { - clusters[exemplarsIndices[c]] = []; - } - for (var _i12 = 0; _i12 < nodes.length; _i12++) { - var pos = id2position[nodes[_i12].id()]; - var clusterIndex = clusterIndices[pos]; - if (clusterIndex != null) { - // the node may have not been assigned a cluster if no valid attributes were specified - clusters[clusterIndex].push(nodes[_i12]); - } - } - var retClusters = new Array(exemplarsIndices.length); - for (var _c = 0; _c < exemplarsIndices.length; _c++) { - retClusters[_c] = cy.collection(clusters[exemplarsIndices[_c]]); - } - return retClusters; -}; -var affinityPropagation$1 = { - affinityPropagation: affinityPropagation, - ap: affinityPropagation -}; - -var hierholzerDefaults = defaults$g({ - root: undefined, - directed: false -}); -var elesfn$k = { - hierholzer: function hierholzer(options) { - if (!plainObject(options)) { - var args = arguments; - options = { - root: args[0], - directed: args[1] - }; - } - var _hierholzerDefaults = hierholzerDefaults(options), - root = _hierholzerDefaults.root, - directed = _hierholzerDefaults.directed; - var eles = this; - var dflag = false; - var oddIn; - var oddOut; - var startVertex; - if (root) startVertex = string(root) ? this.filter(root)[0].id() : root[0].id(); - var nodes = {}; - var edges = {}; - if (directed) { - eles.forEach(function (ele) { - var id = ele.id(); - if (ele.isNode()) { - var ind = ele.indegree(true); - var outd = ele.outdegree(true); - var d1 = ind - outd; - var d2 = outd - ind; - if (d1 == 1) { - if (oddIn) dflag = true;else oddIn = id; - } else if (d2 == 1) { - if (oddOut) dflag = true;else oddOut = id; - } else if (d2 > 1 || d1 > 1) { - dflag = true; - } - nodes[id] = []; - ele.outgoers().forEach(function (e) { - if (e.isEdge()) nodes[id].push(e.id()); - }); - } else { - edges[id] = [undefined, ele.target().id()]; - } - }); - } else { - eles.forEach(function (ele) { - var id = ele.id(); - if (ele.isNode()) { - var d = ele.degree(true); - if (d % 2) { - if (!oddIn) oddIn = id;else if (!oddOut) oddOut = id;else dflag = true; - } - nodes[id] = []; - ele.connectedEdges().forEach(function (e) { - return nodes[id].push(e.id()); - }); - } else { - edges[id] = [ele.source().id(), ele.target().id()]; - } - }); - } - var result = { - found: false, - trail: undefined - }; - if (dflag) return result;else if (oddOut && oddIn) { - if (directed) { - if (startVertex && oddOut != startVertex) { - return result; - } - startVertex = oddOut; - } else { - if (startVertex && oddOut != startVertex && oddIn != startVertex) { - return result; - } else if (!startVertex) { - startVertex = oddOut; - } - } - } else { - if (!startVertex) startVertex = eles[0].id(); - } - var walk = function walk(v) { - var currentNode = v; - var subtour = [v]; - var adj, adjTail, adjHead; - while (nodes[currentNode].length) { - adj = nodes[currentNode].shift(); - adjTail = edges[adj][0]; - adjHead = edges[adj][1]; - if (currentNode != adjHead) { - nodes[adjHead] = nodes[adjHead].filter(function (e) { - return e != adj; - }); - currentNode = adjHead; - } else if (!directed && currentNode != adjTail) { - nodes[adjTail] = nodes[adjTail].filter(function (e) { - return e != adj; - }); - currentNode = adjTail; - } - subtour.unshift(adj); - subtour.unshift(currentNode); - } - return subtour; - }; - var trail = []; - var subtour = []; - subtour = walk(startVertex); - while (subtour.length != 1) { - if (nodes[subtour[0]].length == 0) { - trail.unshift(eles.getElementById(subtour.shift())); - trail.unshift(eles.getElementById(subtour.shift())); - } else { - subtour = walk(subtour.shift()).concat(subtour); - } - } - trail.unshift(eles.getElementById(subtour.shift())); // final node - - for (var d in nodes) { - if (nodes[d].length) { - return result; - } - } - result.found = true; - result.trail = this.spawn(trail, true); - return result; - } -}; - -var hopcroftTarjanBiconnected = function hopcroftTarjanBiconnected() { - var eles = this; - var nodes = {}; - var id = 0; - var edgeCount = 0; - var components = []; - var stack = []; - var visitedEdges = {}; - var buildComponent = function buildComponent(x, y) { - var i = stack.length - 1; - var cutset = []; - var component = eles.spawn(); - while (stack[i].x != x || stack[i].y != y) { - cutset.push(stack.pop().edge); - i--; - } - cutset.push(stack.pop().edge); - cutset.forEach(function (edge) { - var connectedNodes = edge.connectedNodes().intersection(eles); - component.merge(edge); - connectedNodes.forEach(function (node) { - var nodeId = node.id(); - var connectedEdges = node.connectedEdges().intersection(eles); - component.merge(node); - if (!nodes[nodeId].cutVertex) { - component.merge(connectedEdges); - } else { - component.merge(connectedEdges.filter(function (edge) { - return edge.isLoop(); - })); - } - }); - }); - components.push(component); - }; - var biconnectedSearch = function biconnectedSearch(root, currentNode, parent) { - if (root === parent) edgeCount += 1; - nodes[currentNode] = { - id: id, - low: id++, - cutVertex: false - }; - var edges = eles.getElementById(currentNode).connectedEdges().intersection(eles); - if (edges.size() === 0) { - components.push(eles.spawn(eles.getElementById(currentNode))); - } else { - var sourceId, targetId, otherNodeId, edgeId; - edges.forEach(function (edge) { - sourceId = edge.source().id(); - targetId = edge.target().id(); - otherNodeId = sourceId === currentNode ? targetId : sourceId; - if (otherNodeId !== parent) { - edgeId = edge.id(); - if (!visitedEdges[edgeId]) { - visitedEdges[edgeId] = true; - stack.push({ - x: currentNode, - y: otherNodeId, - edge: edge - }); - } - if (!(otherNodeId in nodes)) { - biconnectedSearch(root, otherNodeId, currentNode); - nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].low); - if (nodes[currentNode].id <= nodes[otherNodeId].low) { - nodes[currentNode].cutVertex = true; - buildComponent(currentNode, otherNodeId); - } - } else { - nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].id); - } - } - }); - } - }; - eles.forEach(function (ele) { - if (ele.isNode()) { - var nodeId = ele.id(); - if (!(nodeId in nodes)) { - edgeCount = 0; - biconnectedSearch(nodeId, nodeId); - nodes[nodeId].cutVertex = edgeCount > 1; - } - } - }); - var cutVertices = Object.keys(nodes).filter(function (id) { - return nodes[id].cutVertex; - }).map(function (id) { - return eles.getElementById(id); - }); - return { - cut: eles.spawn(cutVertices), - components: components - }; -}; -var hopcroftTarjanBiconnected$1 = { - hopcroftTarjanBiconnected: hopcroftTarjanBiconnected, - htbc: hopcroftTarjanBiconnected, - htb: hopcroftTarjanBiconnected, - hopcroftTarjanBiconnectedComponents: hopcroftTarjanBiconnected -}; - -var tarjanStronglyConnected = function tarjanStronglyConnected() { - var eles = this; - var nodes = {}; - var index = 0; - var components = []; - var stack = []; - var cut = eles.spawn(eles); - var stronglyConnectedSearch = function stronglyConnectedSearch(sourceNodeId) { - stack.push(sourceNodeId); - nodes[sourceNodeId] = { - index: index, - low: index++, - explored: false - }; - var connectedEdges = eles.getElementById(sourceNodeId).connectedEdges().intersection(eles); - connectedEdges.forEach(function (edge) { - var targetNodeId = edge.target().id(); - if (targetNodeId !== sourceNodeId) { - if (!(targetNodeId in nodes)) { - stronglyConnectedSearch(targetNodeId); - } - if (!nodes[targetNodeId].explored) { - nodes[sourceNodeId].low = Math.min(nodes[sourceNodeId].low, nodes[targetNodeId].low); - } - } - }); - if (nodes[sourceNodeId].index === nodes[sourceNodeId].low) { - var componentNodes = eles.spawn(); - for (;;) { - var nodeId = stack.pop(); - componentNodes.merge(eles.getElementById(nodeId)); - nodes[nodeId].low = nodes[sourceNodeId].index; - nodes[nodeId].explored = true; - if (nodeId === sourceNodeId) { - break; - } - } - var componentEdges = componentNodes.edgesWith(componentNodes); - var component = componentNodes.merge(componentEdges); - components.push(component); - cut = cut.difference(component); - } - }; - eles.forEach(function (ele) { - if (ele.isNode()) { - var nodeId = ele.id(); - if (!(nodeId in nodes)) { - stronglyConnectedSearch(nodeId); - } - } - }); - return { - cut: cut, - components: components - }; -}; -var tarjanStronglyConnected$1 = { - tarjanStronglyConnected: tarjanStronglyConnected, - tsc: tarjanStronglyConnected, - tscc: tarjanStronglyConnected, - tarjanStronglyConnectedComponents: tarjanStronglyConnected -}; - -var elesfn$j = {}; -[elesfn$v, elesfn$u, elesfn$t, elesfn$s, elesfn$r, elesfn$q, elesfn$p, elesfn$o, elesfn$n, elesfn$m, elesfn$l, markovClustering$1, kClustering, hierarchicalClustering$1, affinityPropagation$1, elesfn$k, hopcroftTarjanBiconnected$1, tarjanStronglyConnected$1].forEach(function (props) { - extend(elesfn$j, props); -}); - -/*! -Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable -Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) -Licensed under The MIT License (http://opensource.org/licenses/MIT) -*/ - -/* promise states [Promises/A+ 2.1] */ -var STATE_PENDING = 0; /* [Promises/A+ 2.1.1] */ -var STATE_FULFILLED = 1; /* [Promises/A+ 2.1.2] */ -var STATE_REJECTED = 2; /* [Promises/A+ 2.1.3] */ - -/* promise object constructor */ -var api = function api(executor) { - /* optionally support non-constructor/plain-function call */ - if (!(this instanceof api)) return new api(executor); - - /* initialize object */ - this.id = 'Thenable/1.0.7'; - this.state = STATE_PENDING; /* initial state */ - this.fulfillValue = undefined; /* initial value */ /* [Promises/A+ 1.3, 2.1.2.2] */ - this.rejectReason = undefined; /* initial reason */ /* [Promises/A+ 1.5, 2.1.3.2] */ - this.onFulfilled = []; /* initial handlers */ - this.onRejected = []; /* initial handlers */ - - /* provide optional information-hiding proxy */ - this.proxy = { - then: this.then.bind(this) - }; - - /* support optional executor function */ - if (typeof executor === 'function') executor.call(this, this.fulfill.bind(this), this.reject.bind(this)); -}; - -/* promise API methods */ -api.prototype = { - /* promise resolving methods */ - fulfill: function fulfill(value) { - return deliver(this, STATE_FULFILLED, 'fulfillValue', value); - }, - reject: function reject(value) { - return deliver(this, STATE_REJECTED, 'rejectReason', value); - }, - /* "The then Method" [Promises/A+ 1.1, 1.2, 2.2] */ - then: function then(onFulfilled, onRejected) { - var curr = this; - var next = new api(); /* [Promises/A+ 2.2.7] */ - curr.onFulfilled.push(resolver(onFulfilled, next, 'fulfill')); /* [Promises/A+ 2.2.2/2.2.6] */ - curr.onRejected.push(resolver(onRejected, next, 'reject')); /* [Promises/A+ 2.2.3/2.2.6] */ - execute(curr); - return next.proxy; /* [Promises/A+ 2.2.7, 3.3] */ - } -}; - -/* deliver an action */ -var deliver = function deliver(curr, state, name, value) { - if (curr.state === STATE_PENDING) { - curr.state = state; /* [Promises/A+ 2.1.2.1, 2.1.3.1] */ - curr[name] = value; /* [Promises/A+ 2.1.2.2, 2.1.3.2] */ - execute(curr); - } - return curr; -}; - -/* execute all handlers */ -var execute = function execute(curr) { - if (curr.state === STATE_FULFILLED) execute_handlers(curr, 'onFulfilled', curr.fulfillValue);else if (curr.state === STATE_REJECTED) execute_handlers(curr, 'onRejected', curr.rejectReason); -}; - -/* execute particular set of handlers */ -var execute_handlers = function execute_handlers(curr, name, value) { - /* global setImmediate: true */ - /* global setTimeout: true */ - - /* short-circuit processing */ - if (curr[name].length === 0) return; - - /* iterate over all handlers, exactly once */ - var handlers = curr[name]; - curr[name] = []; /* [Promises/A+ 2.2.2.3, 2.2.3.3] */ - var func = function func() { - for (var i = 0; i < handlers.length; i++) { - handlers[i](value); - } /* [Promises/A+ 2.2.5] */ - }; - - /* execute procedure asynchronously */ /* [Promises/A+ 2.2.4, 3.1] */ - if (typeof setImmediate === 'function') setImmediate(func);else setTimeout(func, 0); -}; - -/* generate a resolver function */ -var resolver = function resolver(cb, next, method) { - return function (value) { - if (typeof cb !== 'function') /* [Promises/A+ 2.2.1, 2.2.7.3, 2.2.7.4] */ - next[method].call(next, value); /* [Promises/A+ 2.2.7.3, 2.2.7.4] */else { - var result; - try { - result = cb(value); - } /* [Promises/A+ 2.2.2.1, 2.2.3.1, 2.2.5, 3.2] */ catch (e) { - next.reject(e); /* [Promises/A+ 2.2.7.2] */ - return; - } - resolve(next, result); /* [Promises/A+ 2.2.7.1] */ - } - }; -}; - -/* "Promise Resolution Procedure" */ /* [Promises/A+ 2.3] */ -var resolve = function resolve(promise, x) { - /* sanity check arguments */ /* [Promises/A+ 2.3.1] */ - if (promise === x || promise.proxy === x) { - promise.reject(new TypeError('cannot resolve promise with itself')); - return; - } - - /* surgically check for a "then" method - (mainly to just call the "getter" of "then" only once) */ - var then; - if (_typeof(x) === 'object' && x !== null || typeof x === 'function') { - try { - then = x.then; - } /* [Promises/A+ 2.3.3.1, 3.5] */ catch (e) { - promise.reject(e); /* [Promises/A+ 2.3.3.2] */ - return; - } - } - - /* handle own Thenables [Promises/A+ 2.3.2] - and similar "thenables" [Promises/A+ 2.3.3] */ - if (typeof then === 'function') { - var resolved = false; - try { - /* call retrieved "then" method */ /* [Promises/A+ 2.3.3.3] */ - then.call(x, /* resolvePromise */ /* [Promises/A+ 2.3.3.3.1] */ - function (y) { - if (resolved) return; - resolved = true; /* [Promises/A+ 2.3.3.3.3] */ - if (y === x) /* [Promises/A+ 3.6] */ - promise.reject(new TypeError('circular thenable chain'));else resolve(promise, y); - }, /* rejectPromise */ /* [Promises/A+ 2.3.3.3.2] */ - function (r) { - if (resolved) return; - resolved = true; /* [Promises/A+ 2.3.3.3.3] */ - promise.reject(r); - }); - } catch (e) { - if (!resolved) /* [Promises/A+ 2.3.3.3.3] */ - promise.reject(e); /* [Promises/A+ 2.3.3.3.4] */ - } - - return; - } - - /* handle other values */ - promise.fulfill(x); /* [Promises/A+ 2.3.4, 2.3.3.4] */ -}; - -// so we always have Promise.all() -api.all = function (ps) { - return new api(function (resolveAll, rejectAll) { - var vals = new Array(ps.length); - var doneCount = 0; - var fulfill = function fulfill(i, val) { - vals[i] = val; - doneCount++; - if (doneCount === ps.length) { - resolveAll(vals); - } - }; - for (var i = 0; i < ps.length; i++) { - (function (i) { - var p = ps[i]; - var isPromise = p != null && p.then != null; - if (isPromise) { - p.then(function (val) { - fulfill(i, val); - }, function (err) { - rejectAll(err); - }); - } else { - var val = p; - fulfill(i, val); - } - })(i); - } - }); -}; -api.resolve = function (val) { - return new api(function (resolve, reject) { - resolve(val); - }); -}; -api.reject = function (val) { - return new api(function (resolve, reject) { - reject(val); - }); -}; -var Promise$1 = typeof Promise !== 'undefined' ? Promise : api; // eslint-disable-line no-undef - -var Animation = function Animation(target, opts, opts2) { - var isCore = core(target); - var isEle = !isCore; - var _p = this._private = extend({ - duration: 1000 - }, opts, opts2); - _p.target = target; - _p.style = _p.style || _p.css; - _p.started = false; - _p.playing = false; - _p.hooked = false; - _p.applying = false; - _p.progress = 0; - _p.completes = []; - _p.frames = []; - if (_p.complete && fn$6(_p.complete)) { - _p.completes.push(_p.complete); - } - if (isEle) { - var pos = target.position(); - _p.startPosition = _p.startPosition || { - x: pos.x, - y: pos.y - }; - _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style); - } - if (isCore) { - var pan = target.pan(); - _p.startPan = { - x: pan.x, - y: pan.y - }; - _p.startZoom = target.zoom(); - } - - // for future timeline/animations impl - this.length = 1; - this[0] = this; -}; -var anifn = Animation.prototype; -extend(anifn, { - instanceString: function instanceString() { - return 'animation'; - }, - hook: function hook() { - var _p = this._private; - if (!_p.hooked) { - // add to target's animation queue - var q; - var tAni = _p.target._private.animation; - if (_p.queue) { - q = tAni.queue; - } else { - q = tAni.current; - } - q.push(this); - - // add to the animation loop pool - if (elementOrCollection(_p.target)) { - _p.target.cy().addToAnimationPool(_p.target); - } - _p.hooked = true; - } - return this; - }, - play: function play() { - var _p = this._private; - - // autorewind - if (_p.progress === 1) { - _p.progress = 0; - } - _p.playing = true; - _p.started = false; // needs to be started by animation loop - _p.stopped = false; - this.hook(); - - // the animation loop will start the animation... - - return this; - }, - playing: function playing() { - return this._private.playing; - }, - apply: function apply() { - var _p = this._private; - _p.applying = true; - _p.started = false; // needs to be started by animation loop - _p.stopped = false; - this.hook(); - - // the animation loop will apply the animation at this progress - - return this; - }, - applying: function applying() { - return this._private.applying; - }, - pause: function pause() { - var _p = this._private; - _p.playing = false; - _p.started = false; - return this; - }, - stop: function stop() { - var _p = this._private; - _p.playing = false; - _p.started = false; - _p.stopped = true; // to be removed from animation queues - - return this; - }, - rewind: function rewind() { - return this.progress(0); - }, - fastforward: function fastforward() { - return this.progress(1); - }, - time: function time(t) { - var _p = this._private; - if (t === undefined) { - return _p.progress * _p.duration; - } else { - return this.progress(t / _p.duration); - } - }, - progress: function progress(p) { - var _p = this._private; - var wasPlaying = _p.playing; - if (p === undefined) { - return _p.progress; - } else { - if (wasPlaying) { - this.pause(); - } - _p.progress = p; - _p.started = false; - if (wasPlaying) { - this.play(); - } - } - return this; - }, - completed: function completed() { - return this._private.progress === 1; - }, - reverse: function reverse() { - var _p = this._private; - var wasPlaying = _p.playing; - if (wasPlaying) { - this.pause(); - } - _p.progress = 1 - _p.progress; - _p.started = false; - var swap = function swap(a, b) { - var _pa = _p[a]; - if (_pa == null) { - return; - } - _p[a] = _p[b]; - _p[b] = _pa; - }; - swap('zoom', 'startZoom'); - swap('pan', 'startPan'); - swap('position', 'startPosition'); - - // swap styles - if (_p.style) { - for (var i = 0; i < _p.style.length; i++) { - var prop = _p.style[i]; - var name = prop.name; - var startStyleProp = _p.startStyle[name]; - _p.startStyle[name] = prop; - _p.style[i] = startStyleProp; - } - } - if (wasPlaying) { - this.play(); - } - return this; - }, - promise: function promise(type) { - var _p = this._private; - var arr; - switch (type) { - case 'frame': - arr = _p.frames; - break; - default: - case 'complete': - case 'completed': - arr = _p.completes; - } - return new Promise$1(function (resolve, reject) { - arr.push(function () { - resolve(); - }); - }); - } -}); -anifn.complete = anifn.completed; -anifn.run = anifn.play; -anifn.running = anifn.playing; - -var define$3 = { - animated: function animated() { - return function animatedImpl() { - var self = this; - var selfIsArrayLike = self.length !== undefined; - var all = selfIsArrayLike ? self : [self]; // put in array if not array-like - var cy = this._private.cy || this; - if (!cy.styleEnabled()) { - return false; - } - var ele = all[0]; - if (ele) { - return ele._private.animation.current.length > 0; - } - }; - }, - // animated - - clearQueue: function clearQueue() { - return function clearQueueImpl() { - var self = this; - var selfIsArrayLike = self.length !== undefined; - var all = selfIsArrayLike ? self : [self]; // put in array if not array-like - var cy = this._private.cy || this; - if (!cy.styleEnabled()) { - return this; - } - for (var i = 0; i < all.length; i++) { - var ele = all[i]; - ele._private.animation.queue = []; - } - return this; - }; - }, - // clearQueue - - delay: function delay() { - return function delayImpl(time, complete) { - var cy = this._private.cy || this; - if (!cy.styleEnabled()) { - return this; - } - return this.animate({ - delay: time, - duration: time, - complete: complete - }); - }; - }, - // delay - - delayAnimation: function delayAnimation() { - return function delayAnimationImpl(time, complete) { - var cy = this._private.cy || this; - if (!cy.styleEnabled()) { - return this; - } - return this.animation({ - delay: time, - duration: time, - complete: complete - }); - }; - }, - // delay - - animation: function animation() { - return function animationImpl(properties, params) { - var self = this; - var selfIsArrayLike = self.length !== undefined; - var all = selfIsArrayLike ? self : [self]; // put in array if not array-like - var cy = this._private.cy || this; - var isCore = !selfIsArrayLike; - var isEles = !isCore; - if (!cy.styleEnabled()) { - return this; - } - var style = cy.style(); - properties = extend({}, properties, params); - var propertiesEmpty = Object.keys(properties).length === 0; - if (propertiesEmpty) { - return new Animation(all[0], properties); // nothing to animate - } - - if (properties.duration === undefined) { - properties.duration = 400; - } - switch (properties.duration) { - case 'slow': - properties.duration = 600; - break; - case 'fast': - properties.duration = 200; - break; - } - if (isEles) { - properties.style = style.getPropsList(properties.style || properties.css); - properties.css = undefined; - } - if (isEles && properties.renderedPosition != null) { - var rpos = properties.renderedPosition; - var pan = cy.pan(); - var zoom = cy.zoom(); - properties.position = renderedToModelPosition(rpos, zoom, pan); - } - - // override pan w/ panBy if set - if (isCore && properties.panBy != null) { - var panBy = properties.panBy; - var cyPan = cy.pan(); - properties.pan = { - x: cyPan.x + panBy.x, - y: cyPan.y + panBy.y - }; - } - - // override pan w/ center if set - var center = properties.center || properties.centre; - if (isCore && center != null) { - var centerPan = cy.getCenterPan(center.eles, properties.zoom); - if (centerPan != null) { - properties.pan = centerPan; - } - } - - // override pan & zoom w/ fit if set - if (isCore && properties.fit != null) { - var fit = properties.fit; - var fitVp = cy.getFitViewport(fit.eles || fit.boundingBox, fit.padding); - if (fitVp != null) { - properties.pan = fitVp.pan; - properties.zoom = fitVp.zoom; - } - } - - // override zoom (& potentially pan) w/ zoom obj if set - if (isCore && plainObject(properties.zoom)) { - var vp = cy.getZoomedViewport(properties.zoom); - if (vp != null) { - if (vp.zoomed) { - properties.zoom = vp.zoom; - } - if (vp.panned) { - properties.pan = vp.pan; - } - } else { - properties.zoom = null; // an inavalid zoom (e.g. no delta) gets automatically destroyed - } - } - - return new Animation(all[0], properties); - }; - }, - // animate - - animate: function animate() { - return function animateImpl(properties, params) { - var self = this; - var selfIsArrayLike = self.length !== undefined; - var all = selfIsArrayLike ? self : [self]; // put in array if not array-like - var cy = this._private.cy || this; - if (!cy.styleEnabled()) { - return this; - } - if (params) { - properties = extend({}, properties, params); - } - - // manually hook and run the animation - for (var i = 0; i < all.length; i++) { - var ele = all[i]; - var queue = ele.animated() && (properties.queue === undefined || properties.queue); - var ani = ele.animation(properties, queue ? { - queue: true - } : undefined); - ani.play(); - } - return this; // chaining - }; - }, - - // animate - - stop: function stop() { - return function stopImpl(clearQueue, jumpToEnd) { - var self = this; - var selfIsArrayLike = self.length !== undefined; - var all = selfIsArrayLike ? self : [self]; // put in array if not array-like - var cy = this._private.cy || this; - if (!cy.styleEnabled()) { - return this; - } - for (var i = 0; i < all.length; i++) { - var ele = all[i]; - var _p = ele._private; - var anis = _p.animation.current; - for (var j = 0; j < anis.length; j++) { - var ani = anis[j]; - var ani_p = ani._private; - if (jumpToEnd) { - // next iteration of the animation loop, the animation - // will go straight to the end and be removed - ani_p.duration = 0; - } - } - - // clear the queue of future animations - if (clearQueue) { - _p.animation.queue = []; - } - if (!jumpToEnd) { - _p.animation.current = []; - } - } - - // we have to notify (the animation loop doesn't do it for us on `stop`) - cy.notify('draw'); - return this; - }; - } // stop -}; // define - -var define$2 = { - // access data field - data: function data(params) { - var defaults = { - field: 'data', - bindingEvent: 'data', - allowBinding: false, - allowSetting: false, - allowGetting: false, - settingEvent: 'data', - settingTriggersEvent: false, - triggerFnName: 'trigger', - immutableKeys: {}, - // key => true if immutable - updateStyle: false, - beforeGet: function beforeGet(self) {}, - beforeSet: function beforeSet(self, obj) {}, - onSet: function onSet(self) {}, - canSet: function canSet(self) { - return true; - } - }; - params = extend({}, defaults, params); - return function dataImpl(name, value) { - var p = params; - var self = this; - var selfIsArrayLike = self.length !== undefined; - var all = selfIsArrayLike ? self : [self]; // put in array if not array-like - var single = selfIsArrayLike ? self[0] : self; - - // .data('foo', ...) - if (string(name)) { - // set or get property - var isPathLike = name.indexOf('.') !== -1; // there might be a normal field with a dot - var path = isPathLike && toPath__default["default"](name); - - // .data('foo') - if (p.allowGetting && value === undefined) { - // get - - var ret; - if (single) { - p.beforeGet(single); - - // check if it's path and a field with the same name doesn't exist - if (path && single._private[p.field][name] === undefined) { - ret = get__default["default"](single._private[p.field], path); - } else { - ret = single._private[p.field][name]; - } - } - return ret; - - // .data('foo', 'bar') - } else if (p.allowSetting && value !== undefined) { - // set - var valid = !p.immutableKeys[name]; - if (valid) { - var change = _defineProperty({}, name, value); - p.beforeSet(self, change); - for (var i = 0, l = all.length; i < l; i++) { - var ele = all[i]; - if (p.canSet(ele)) { - if (path && single._private[p.field][name] === undefined) { - set__default["default"](ele._private[p.field], path, value); - } else { - ele._private[p.field][name] = value; - } - } - } - - // update mappers if asked - if (p.updateStyle) { - self.updateStyle(); - } - - // call onSet callback - p.onSet(self); - if (p.settingTriggersEvent) { - self[p.triggerFnName](p.settingEvent); - } - } - } - - // .data({ 'foo': 'bar' }) - } else if (p.allowSetting && plainObject(name)) { - // extend - var obj = name; - var k, v; - var keys = Object.keys(obj); - p.beforeSet(self, obj); - for (var _i = 0; _i < keys.length; _i++) { - k = keys[_i]; - v = obj[k]; - var _valid = !p.immutableKeys[k]; - if (_valid) { - for (var j = 0; j < all.length; j++) { - var _ele = all[j]; - if (p.canSet(_ele)) { - _ele._private[p.field][k] = v; - } - } - } - } - - // update mappers if asked - if (p.updateStyle) { - self.updateStyle(); - } - - // call onSet callback - p.onSet(self); - if (p.settingTriggersEvent) { - self[p.triggerFnName](p.settingEvent); - } - - // .data(function(){ ... }) - } else if (p.allowBinding && fn$6(name)) { - // bind to event - var fn = name; - self.on(p.bindingEvent, fn); - - // .data() - } else if (p.allowGetting && name === undefined) { - // get whole object - var _ret; - if (single) { - p.beforeGet(single); - _ret = single._private[p.field]; - } - return _ret; - } - return self; // maintain chainability - }; // function - }, - - // data - - // remove data field - removeData: function removeData(params) { - var defaults = { - field: 'data', - event: 'data', - triggerFnName: 'trigger', - triggerEvent: false, - immutableKeys: {} // key => true if immutable - }; - - params = extend({}, defaults, params); - return function removeDataImpl(names) { - var p = params; - var self = this; - var selfIsArrayLike = self.length !== undefined; - var all = selfIsArrayLike ? self : [self]; // put in array if not array-like - - // .removeData('foo bar') - if (string(names)) { - // then get the list of keys, and delete them - var keys = names.split(/\s+/); - var l = keys.length; - for (var i = 0; i < l; i++) { - // delete each non-empty key - var key = keys[i]; - if (emptyString(key)) { - continue; - } - var valid = !p.immutableKeys[key]; // not valid if immutable - if (valid) { - for (var i_a = 0, l_a = all.length; i_a < l_a; i_a++) { - all[i_a]._private[p.field][key] = undefined; - } - } - } - if (p.triggerEvent) { - self[p.triggerFnName](p.event); - } - - // .removeData() - } else if (names === undefined) { - // then delete all keys - - for (var _i_a = 0, _l_a = all.length; _i_a < _l_a; _i_a++) { - var _privateFields = all[_i_a]._private[p.field]; - var _keys = Object.keys(_privateFields); - for (var _i2 = 0; _i2 < _keys.length; _i2++) { - var _key = _keys[_i2]; - var validKeyToDelete = !p.immutableKeys[_key]; - if (validKeyToDelete) { - _privateFields[_key] = undefined; - } - } - } - if (p.triggerEvent) { - self[p.triggerFnName](p.event); - } - } - return self; // maintain chaining - }; // function - } // removeData -}; // define - -var define$1 = { - eventAliasesOn: function eventAliasesOn(proto) { - var p = proto; - p.addListener = p.listen = p.bind = p.on; - p.unlisten = p.unbind = p.off = p.removeListener; - p.trigger = p.emit; - - // this is just a wrapper alias of .on() - p.pon = p.promiseOn = function (events, selector) { - var self = this; - var args = Array.prototype.slice.call(arguments, 0); - return new Promise$1(function (resolve, reject) { - var callback = function callback(e) { - self.off.apply(self, offArgs); - resolve(e); - }; - var onArgs = args.concat([callback]); - var offArgs = onArgs.concat([]); - self.on.apply(self, onArgs); - }); - }; - } -}; // define - -// use this module to cherry pick functions into your prototype -var define = {}; -[define$3, define$2, define$1].forEach(function (m) { - extend(define, m); -}); - -var elesfn$i = { - animate: define.animate(), - animation: define.animation(), - animated: define.animated(), - clearQueue: define.clearQueue(), - delay: define.delay(), - delayAnimation: define.delayAnimation(), - stop: define.stop() -}; - -var elesfn$h = { - classes: function classes(_classes) { - var self = this; - if (_classes === undefined) { - var ret = []; - self[0]._private.classes.forEach(function (cls) { - return ret.push(cls); - }); - return ret; - } else if (!array(_classes)) { - // extract classes from string - _classes = (_classes || '').match(/\S+/g) || []; - } - var changed = []; - var classesSet = new Set$1(_classes); - - // check and update each ele - for (var j = 0; j < self.length; j++) { - var ele = self[j]; - var _p = ele._private; - var eleClasses = _p.classes; - var changedEle = false; - - // check if ele has all of the passed classes - for (var i = 0; i < _classes.length; i++) { - var cls = _classes[i]; - var eleHasClass = eleClasses.has(cls); - if (!eleHasClass) { - changedEle = true; - break; - } - } - - // check if ele has classes outside of those passed - if (!changedEle) { - changedEle = eleClasses.size !== _classes.length; - } - if (changedEle) { - _p.classes = classesSet; - changed.push(ele); - } - } - - // trigger update style on those eles that had class changes - if (changed.length > 0) { - this.spawn(changed).updateStyle().emit('class'); - } - return self; - }, - addClass: function addClass(classes) { - return this.toggleClass(classes, true); - }, - hasClass: function hasClass(className) { - var ele = this[0]; - return ele != null && ele._private.classes.has(className); - }, - toggleClass: function toggleClass(classes, toggle) { - if (!array(classes)) { - // extract classes from string - classes = classes.match(/\S+/g) || []; - } - var self = this; - var toggleUndefd = toggle === undefined; - var changed = []; // eles who had classes changed - - for (var i = 0, il = self.length; i < il; i++) { - var ele = self[i]; - var eleClasses = ele._private.classes; - var changedEle = false; - for (var j = 0; j < classes.length; j++) { - var cls = classes[j]; - var hasClass = eleClasses.has(cls); - var changedNow = false; - if (toggle || toggleUndefd && !hasClass) { - eleClasses.add(cls); - changedNow = true; - } else if (!toggle || toggleUndefd && hasClass) { - eleClasses["delete"](cls); - changedNow = true; - } - if (!changedEle && changedNow) { - changed.push(ele); - changedEle = true; - } - } // for j classes - } // for i eles - - // trigger update style on those eles that had class changes - if (changed.length > 0) { - this.spawn(changed).updateStyle().emit('class'); - } - return self; - }, - removeClass: function removeClass(classes) { - return this.toggleClass(classes, false); - }, - flashClass: function flashClass(classes, duration) { - var self = this; - if (duration == null) { - duration = 250; - } else if (duration === 0) { - return self; // nothing to do really - } - - self.addClass(classes); - setTimeout(function () { - self.removeClass(classes); - }, duration); - return self; - } -}; -elesfn$h.className = elesfn$h.classNames = elesfn$h.classes; - -// tokens in the query language -var tokens = { - metaChar: '[\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]', - // chars we need to escape in let names, etc - comparatorOp: '=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=', - // binary comparison op (used in data selectors) - boolOp: '\\?|\\!|\\^', - // boolean (unary) operators (used in data selectors) - string: '"(?:\\\\"|[^"])*"' + '|' + "'(?:\\\\'|[^'])*'", - // string literals (used in data selectors) -- doublequotes | singlequotes - number: number, - // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123 - meta: 'degree|indegree|outdegree', - // allowed metadata fields (i.e. allowed functions to use from Collection) - separator: '\\s*,\\s*', - // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass - descendant: '\\s+', - child: '\\s+>\\s+', - subject: '\\$', - group: 'node|edge|\\*', - directedEdge: '\\s+->\\s+', - undirectedEdge: '\\s+<->\\s+' -}; -tokens.variable = '(?:[\\w-.]|(?:\\\\' + tokens.metaChar + '))+'; // a variable name can have letters, numbers, dashes, and periods -tokens.className = '(?:[\\w-]|(?:\\\\' + tokens.metaChar + '))+'; // a class name has the same rules as a variable except it can't have a '.' in the name -tokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number -tokens.id = tokens.variable; // an element id (follows variable conventions) - -(function () { - var ops, op, i; - - // add @ variants to comparatorOp - ops = tokens.comparatorOp.split('|'); - for (i = 0; i < ops.length; i++) { - op = ops[i]; - tokens.comparatorOp += '|@' + op; - } - - // add ! variants to comparatorOp - ops = tokens.comparatorOp.split('|'); - for (i = 0; i < ops.length; i++) { - op = ops[i]; - if (op.indexOf('!') >= 0) { - continue; - } // skip ops that explicitly contain ! - if (op === '=') { - continue; - } // skip = b/c != is explicitly defined - - tokens.comparatorOp += '|\\!' + op; - } -})(); - -/** - * Make a new query object - * - * @prop type {Type} The type enum (int) of the query - * @prop checks List of checks to make against an ele to test for a match - */ -var newQuery = function newQuery() { - return { - checks: [] - }; -}; - -/** - * A check type enum-like object. Uses integer values for fast match() lookup. - * The ordering does not matter as long as the ints are unique. - */ -var Type = { - /** E.g. node */ - GROUP: 0, - /** A collection of elements */ - COLLECTION: 1, - /** A filter(ele) function */ - FILTER: 2, - /** E.g. [foo > 1] */ - DATA_COMPARE: 3, - /** E.g. [foo] */ - DATA_EXIST: 4, - /** E.g. [?foo] */ - DATA_BOOL: 5, - /** E.g. [[degree > 2]] */ - META_COMPARE: 6, - /** E.g. :selected */ - STATE: 7, - /** E.g. #foo */ - ID: 8, - /** E.g. .foo */ - CLASS: 9, - /** E.g. #foo <-> #bar */ - UNDIRECTED_EDGE: 10, - /** E.g. #foo -> #bar */ - DIRECTED_EDGE: 11, - /** E.g. $#foo -> #bar */ - NODE_SOURCE: 12, - /** E.g. #foo -> $#bar */ - NODE_TARGET: 13, - /** E.g. $#foo <-> #bar */ - NODE_NEIGHBOR: 14, - /** E.g. #foo > #bar */ - CHILD: 15, - /** E.g. #foo #bar */ - DESCENDANT: 16, - /** E.g. $#foo > #bar */ - PARENT: 17, - /** E.g. $#foo #bar */ - ANCESTOR: 18, - /** E.g. #foo > $bar > #baz */ - COMPOUND_SPLIT: 19, - /** Always matches, useful placeholder for subject in `COMPOUND_SPLIT` */ - TRUE: 20 -}; - -var stateSelectors = [{ - selector: ':selected', - matches: function matches(ele) { - return ele.selected(); - } -}, { - selector: ':unselected', - matches: function matches(ele) { - return !ele.selected(); - } -}, { - selector: ':selectable', - matches: function matches(ele) { - return ele.selectable(); - } -}, { - selector: ':unselectable', - matches: function matches(ele) { - return !ele.selectable(); - } -}, { - selector: ':locked', - matches: function matches(ele) { - return ele.locked(); - } -}, { - selector: ':unlocked', - matches: function matches(ele) { - return !ele.locked(); - } -}, { - selector: ':visible', - matches: function matches(ele) { - return ele.visible(); - } -}, { - selector: ':hidden', - matches: function matches(ele) { - return !ele.visible(); - } -}, { - selector: ':transparent', - matches: function matches(ele) { - return ele.transparent(); - } -}, { - selector: ':grabbed', - matches: function matches(ele) { - return ele.grabbed(); - } -}, { - selector: ':free', - matches: function matches(ele) { - return !ele.grabbed(); - } -}, { - selector: ':removed', - matches: function matches(ele) { - return ele.removed(); - } -}, { - selector: ':inside', - matches: function matches(ele) { - return !ele.removed(); - } -}, { - selector: ':grabbable', - matches: function matches(ele) { - return ele.grabbable(); - } -}, { - selector: ':ungrabbable', - matches: function matches(ele) { - return !ele.grabbable(); - } -}, { - selector: ':animated', - matches: function matches(ele) { - return ele.animated(); - } -}, { - selector: ':unanimated', - matches: function matches(ele) { - return !ele.animated(); - } -}, { - selector: ':parent', - matches: function matches(ele) { - return ele.isParent(); - } -}, { - selector: ':childless', - matches: function matches(ele) { - return ele.isChildless(); - } -}, { - selector: ':child', - matches: function matches(ele) { - return ele.isChild(); - } -}, { - selector: ':orphan', - matches: function matches(ele) { - return ele.isOrphan(); - } -}, { - selector: ':nonorphan', - matches: function matches(ele) { - return ele.isChild(); - } -}, { - selector: ':compound', - matches: function matches(ele) { - if (ele.isNode()) { - return ele.isParent(); - } else { - return ele.source().isParent() || ele.target().isParent(); - } - } -}, { - selector: ':loop', - matches: function matches(ele) { - return ele.isLoop(); - } -}, { - selector: ':simple', - matches: function matches(ele) { - return ele.isSimple(); - } -}, { - selector: ':active', - matches: function matches(ele) { - return ele.active(); - } -}, { - selector: ':inactive', - matches: function matches(ele) { - return !ele.active(); - } -}, { - selector: ':backgrounding', - matches: function matches(ele) { - return ele.backgrounding(); - } -}, { - selector: ':nonbackgrounding', - matches: function matches(ele) { - return !ele.backgrounding(); - } -}].sort(function (a, b) { - // n.b. selectors that are starting substrings of others must have the longer ones first - return descending(a.selector, b.selector); -}); -var lookup = function () { - var selToFn = {}; - var s; - for (var i = 0; i < stateSelectors.length; i++) { - s = stateSelectors[i]; - selToFn[s.selector] = s.matches; - } - return selToFn; -}(); -var stateSelectorMatches = function stateSelectorMatches(sel, ele) { - return lookup[sel](ele); -}; -var stateSelectorRegex = '(' + stateSelectors.map(function (s) { - return s.selector; -}).join('|') + ')'; - -// when a token like a variable has escaped meta characters, we need to clean the backslashes out -// so that values get compared properly in Selector.filter() -var cleanMetaChars = function cleanMetaChars(str) { - return str.replace(new RegExp('\\\\(' + tokens.metaChar + ')', 'g'), function (match, $1) { - return $1; - }); -}; -var replaceLastQuery = function replaceLastQuery(selector, examiningQuery, replacementQuery) { - selector[selector.length - 1] = replacementQuery; -}; - -// NOTE: add new expression syntax here to have it recognised by the parser; -// - a query contains all adjacent (i.e. no separator in between) expressions; -// - the current query is stored in selector[i] -// - you need to check the query objects in match() for it actually filter properly, but that's pretty straight forward -var exprs = [{ - name: 'group', - // just used for identifying when debugging - query: true, - regex: '(' + tokens.group + ')', - populate: function populate(selector, query, _ref) { - var _ref2 = _slicedToArray(_ref, 1), - group = _ref2[0]; - query.checks.push({ - type: Type.GROUP, - value: group === '*' ? group : group + 's' - }); - } -}, { - name: 'state', - query: true, - regex: stateSelectorRegex, - populate: function populate(selector, query, _ref3) { - var _ref4 = _slicedToArray(_ref3, 1), - state = _ref4[0]; - query.checks.push({ - type: Type.STATE, - value: state - }); - } -}, { - name: 'id', - query: true, - regex: '\\#(' + tokens.id + ')', - populate: function populate(selector, query, _ref5) { - var _ref6 = _slicedToArray(_ref5, 1), - id = _ref6[0]; - query.checks.push({ - type: Type.ID, - value: cleanMetaChars(id) - }); - } -}, { - name: 'className', - query: true, - regex: '\\.(' + tokens.className + ')', - populate: function populate(selector, query, _ref7) { - var _ref8 = _slicedToArray(_ref7, 1), - className = _ref8[0]; - query.checks.push({ - type: Type.CLASS, - value: cleanMetaChars(className) - }); - } -}, { - name: 'dataExists', - query: true, - regex: '\\[\\s*(' + tokens.variable + ')\\s*\\]', - populate: function populate(selector, query, _ref9) { - var _ref10 = _slicedToArray(_ref9, 1), - variable = _ref10[0]; - query.checks.push({ - type: Type.DATA_EXIST, - field: cleanMetaChars(variable) - }); - } -}, { - name: 'dataCompare', - query: true, - regex: '\\[\\s*(' + tokens.variable + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.value + ')\\s*\\]', - populate: function populate(selector, query, _ref11) { - var _ref12 = _slicedToArray(_ref11, 3), - variable = _ref12[0], - comparatorOp = _ref12[1], - value = _ref12[2]; - var valueIsString = new RegExp('^' + tokens.string + '$').exec(value) != null; - if (valueIsString) { - value = value.substring(1, value.length - 1); - } else { - value = parseFloat(value); - } - query.checks.push({ - type: Type.DATA_COMPARE, - field: cleanMetaChars(variable), - operator: comparatorOp, - value: value - }); - } -}, { - name: 'dataBool', - query: true, - regex: '\\[\\s*(' + tokens.boolOp + ')\\s*(' + tokens.variable + ')\\s*\\]', - populate: function populate(selector, query, _ref13) { - var _ref14 = _slicedToArray(_ref13, 2), - boolOp = _ref14[0], - variable = _ref14[1]; - query.checks.push({ - type: Type.DATA_BOOL, - field: cleanMetaChars(variable), - operator: boolOp - }); - } -}, { - name: 'metaCompare', - query: true, - regex: '\\[\\[\\s*(' + tokens.meta + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.number + ')\\s*\\]\\]', - populate: function populate(selector, query, _ref15) { - var _ref16 = _slicedToArray(_ref15, 3), - meta = _ref16[0], - comparatorOp = _ref16[1], - number = _ref16[2]; - query.checks.push({ - type: Type.META_COMPARE, - field: cleanMetaChars(meta), - operator: comparatorOp, - value: parseFloat(number) - }); - } -}, { - name: 'nextQuery', - separator: true, - regex: tokens.separator, - populate: function populate(selector, query) { - var currentSubject = selector.currentSubject; - var edgeCount = selector.edgeCount; - var compoundCount = selector.compoundCount; - var lastQ = selector[selector.length - 1]; - if (currentSubject != null) { - lastQ.subject = currentSubject; - selector.currentSubject = null; - } - lastQ.edgeCount = edgeCount; - lastQ.compoundCount = compoundCount; - selector.edgeCount = 0; - selector.compoundCount = 0; - - // go on to next query - var nextQuery = selector[selector.length++] = newQuery(); - return nextQuery; // this is the new query to be filled by the following exprs - } -}, { - name: 'directedEdge', - separator: true, - regex: tokens.directedEdge, - populate: function populate(selector, query) { - if (selector.currentSubject == null) { - // undirected edge - var edgeQuery = newQuery(); - var source = query; - var target = newQuery(); - edgeQuery.checks.push({ - type: Type.DIRECTED_EDGE, - source: source, - target: target - }); - - // the query in the selector should be the edge rather than the source - replaceLastQuery(selector, query, edgeQuery); - selector.edgeCount++; - - // we're now populating the target query with expressions that follow - return target; - } else { - // source/target - var srcTgtQ = newQuery(); - var _source = query; - var _target = newQuery(); - srcTgtQ.checks.push({ - type: Type.NODE_SOURCE, - source: _source, - target: _target - }); - - // the query in the selector should be the neighbourhood rather than the node - replaceLastQuery(selector, query, srcTgtQ); - selector.edgeCount++; - return _target; // now populating the target with the following expressions - } - } -}, { - name: 'undirectedEdge', - separator: true, - regex: tokens.undirectedEdge, - populate: function populate(selector, query) { - if (selector.currentSubject == null) { - // undirected edge - var edgeQuery = newQuery(); - var source = query; - var target = newQuery(); - edgeQuery.checks.push({ - type: Type.UNDIRECTED_EDGE, - nodes: [source, target] - }); - - // the query in the selector should be the edge rather than the source - replaceLastQuery(selector, query, edgeQuery); - selector.edgeCount++; - - // we're now populating the target query with expressions that follow - return target; - } else { - // neighbourhood - var nhoodQ = newQuery(); - var node = query; - var neighbor = newQuery(); - nhoodQ.checks.push({ - type: Type.NODE_NEIGHBOR, - node: node, - neighbor: neighbor - }); - - // the query in the selector should be the neighbourhood rather than the node - replaceLastQuery(selector, query, nhoodQ); - return neighbor; // now populating the neighbor with following expressions - } - } -}, { - name: 'child', - separator: true, - regex: tokens.child, - populate: function populate(selector, query) { - if (selector.currentSubject == null) { - // default: child query - var parentChildQuery = newQuery(); - var child = newQuery(); - var parent = selector[selector.length - 1]; - parentChildQuery.checks.push({ - type: Type.CHILD, - parent: parent, - child: child - }); - - // the query in the selector should be the '>' itself - replaceLastQuery(selector, query, parentChildQuery); - selector.compoundCount++; - - // we're now populating the child query with expressions that follow - return child; - } else if (selector.currentSubject === query) { - // compound split query - var compound = newQuery(); - var left = selector[selector.length - 1]; - var right = newQuery(); - var subject = newQuery(); - var _child = newQuery(); - var _parent = newQuery(); - - // set up the root compound q - compound.checks.push({ - type: Type.COMPOUND_SPLIT, - left: left, - right: right, - subject: subject - }); - - // populate the subject and replace the q at the old spot (within left) with TRUE - subject.checks = query.checks; // take the checks from the left - query.checks = [{ - type: Type.TRUE - }]; // checks under left refs the subject implicitly - - // set up the right q - _parent.checks.push({ - type: Type.TRUE - }); // parent implicitly refs the subject - right.checks.push({ - type: Type.PARENT, - // type is swapped on right side queries - parent: _parent, - child: _child // empty for now - }); - - replaceLastQuery(selector, left, compound); - - // update the ref since we moved things around for `query` - selector.currentSubject = subject; - selector.compoundCount++; - return _child; // now populating the right side's child - } else { - // parent query - // info for parent query - var _parent2 = newQuery(); - var _child2 = newQuery(); - var pcQChecks = [{ - type: Type.PARENT, - parent: _parent2, - child: _child2 - }]; - - // the parent-child query takes the place of the query previously being populated - _parent2.checks = query.checks; // the previous query contains the checks for the parent - query.checks = pcQChecks; // pc query takes over - - selector.compoundCount++; - return _child2; // we're now populating the child - } - } -}, { - name: 'descendant', - separator: true, - regex: tokens.descendant, - populate: function populate(selector, query) { - if (selector.currentSubject == null) { - // default: descendant query - var ancChQuery = newQuery(); - var descendant = newQuery(); - var ancestor = selector[selector.length - 1]; - ancChQuery.checks.push({ - type: Type.DESCENDANT, - ancestor: ancestor, - descendant: descendant - }); - - // the query in the selector should be the '>' itself - replaceLastQuery(selector, query, ancChQuery); - selector.compoundCount++; - - // we're now populating the descendant query with expressions that follow - return descendant; - } else if (selector.currentSubject === query) { - // compound split query - var compound = newQuery(); - var left = selector[selector.length - 1]; - var right = newQuery(); - var subject = newQuery(); - var _descendant = newQuery(); - var _ancestor = newQuery(); - - // set up the root compound q - compound.checks.push({ - type: Type.COMPOUND_SPLIT, - left: left, - right: right, - subject: subject - }); - - // populate the subject and replace the q at the old spot (within left) with TRUE - subject.checks = query.checks; // take the checks from the left - query.checks = [{ - type: Type.TRUE - }]; // checks under left refs the subject implicitly - - // set up the right q - _ancestor.checks.push({ - type: Type.TRUE - }); // ancestor implicitly refs the subject - right.checks.push({ - type: Type.ANCESTOR, - // type is swapped on right side queries - ancestor: _ancestor, - descendant: _descendant // empty for now - }); - - replaceLastQuery(selector, left, compound); - - // update the ref since we moved things around for `query` - selector.currentSubject = subject; - selector.compoundCount++; - return _descendant; // now populating the right side's descendant - } else { - // ancestor query - // info for parent query - var _ancestor2 = newQuery(); - var _descendant2 = newQuery(); - var adQChecks = [{ - type: Type.ANCESTOR, - ancestor: _ancestor2, - descendant: _descendant2 - }]; - - // the parent-child query takes the place of the query previously being populated - _ancestor2.checks = query.checks; // the previous query contains the checks for the parent - query.checks = adQChecks; // pc query takes over - - selector.compoundCount++; - return _descendant2; // we're now populating the child - } - } -}, { - name: 'subject', - modifier: true, - regex: tokens.subject, - populate: function populate(selector, query) { - if (selector.currentSubject != null && selector.currentSubject !== query) { - warn('Redefinition of subject in selector `' + selector.toString() + '`'); - return false; - } - selector.currentSubject = query; - var topQ = selector[selector.length - 1]; - var topChk = topQ.checks[0]; - var topType = topChk == null ? null : topChk.type; - if (topType === Type.DIRECTED_EDGE) { - // directed edge with subject on the target - - // change to target node check - topChk.type = Type.NODE_TARGET; - } else if (topType === Type.UNDIRECTED_EDGE) { - // undirected edge with subject on the second node - - // change to neighbor check - topChk.type = Type.NODE_NEIGHBOR; - topChk.node = topChk.nodes[1]; // second node is subject - topChk.neighbor = topChk.nodes[0]; - - // clean up unused fields for new type - topChk.nodes = null; - } - } -}]; -exprs.forEach(function (e) { - return e.regexObj = new RegExp('^' + e.regex); -}); - -/** - * Of all the expressions, find the first match in the remaining text. - * @param {string} remaining The remaining text to parse - * @returns The matched expression and the newly remaining text `{ expr, match, name, remaining }` - */ -var consumeExpr = function consumeExpr(remaining) { - var expr; - var match; - var name; - for (var j = 0; j < exprs.length; j++) { - var e = exprs[j]; - var n = e.name; - var m = remaining.match(e.regexObj); - if (m != null) { - match = m; - expr = e; - name = n; - var consumed = m[0]; - remaining = remaining.substring(consumed.length); - break; // we've consumed one expr, so we can return now - } - } - - return { - expr: expr, - match: match, - name: name, - remaining: remaining - }; -}; - -/** - * Consume all the leading whitespace - * @param {string} remaining The text to consume - * @returns The text with the leading whitespace removed - */ -var consumeWhitespace = function consumeWhitespace(remaining) { - var match = remaining.match(/^\s+/); - if (match) { - var consumed = match[0]; - remaining = remaining.substring(consumed.length); - } - return remaining; -}; - -/** - * Parse the string and store the parsed representation in the Selector. - * @param {string} selector The selector string - * @returns `true` if the selector was successfully parsed, `false` otherwise - */ -var parse = function parse(selector) { - var self = this; - var remaining = self.inputText = selector; - var currentQuery = self[0] = newQuery(); - self.length = 1; - remaining = consumeWhitespace(remaining); // get rid of leading whitespace - - for (;;) { - var exprInfo = consumeExpr(remaining); - if (exprInfo.expr == null) { - warn('The selector `' + selector + '`is invalid'); - return false; - } else { - var args = exprInfo.match.slice(1); - - // let the token populate the selector object in currentQuery - var ret = exprInfo.expr.populate(self, currentQuery, args); - if (ret === false) { - return false; // exit if population failed - } else if (ret != null) { - currentQuery = ret; // change the current query to be filled if the expr specifies - } - } - - remaining = exprInfo.remaining; - - // we're done when there's nothing left to parse - if (remaining.match(/^\s*$/)) { - break; - } - } - var lastQ = self[self.length - 1]; - if (self.currentSubject != null) { - lastQ.subject = self.currentSubject; - } - lastQ.edgeCount = self.edgeCount; - lastQ.compoundCount = self.compoundCount; - for (var i = 0; i < self.length; i++) { - var q = self[i]; - - // in future, this could potentially be allowed if there were operator precedence and detection of invalid combinations - if (q.compoundCount > 0 && q.edgeCount > 0) { - warn('The selector `' + selector + '` is invalid because it uses both a compound selector and an edge selector'); - return false; - } - if (q.edgeCount > 1) { - warn('The selector `' + selector + '` is invalid because it uses multiple edge selectors'); - return false; - } else if (q.edgeCount === 1) { - warn('The selector `' + selector + '` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.'); - } - } - return true; // success -}; - -/** - * Get the selector represented as a string. This value uses default formatting, - * so things like spacing may differ from the input text passed to the constructor. - * @returns {string} The selector string - */ -var toString = function toString() { - if (this.toStringCache != null) { - return this.toStringCache; - } - var clean = function clean(obj) { - if (obj == null) { - return ''; - } else { - return obj; - } - }; - var cleanVal = function cleanVal(val) { - if (string(val)) { - return '"' + val + '"'; - } else { - return clean(val); - } - }; - var space = function space(val) { - return ' ' + val + ' '; - }; - var checkToString = function checkToString(check, subject) { - var type = check.type, - value = check.value; - switch (type) { - case Type.GROUP: - { - var group = clean(value); - return group.substring(0, group.length - 1); - } - case Type.DATA_COMPARE: - { - var field = check.field, - operator = check.operator; - return '[' + field + space(clean(operator)) + cleanVal(value) + ']'; - } - case Type.DATA_BOOL: - { - var _operator = check.operator, - _field = check.field; - return '[' + clean(_operator) + _field + ']'; - } - case Type.DATA_EXIST: - { - var _field2 = check.field; - return '[' + _field2 + ']'; - } - case Type.META_COMPARE: - { - var _operator2 = check.operator, - _field3 = check.field; - return '[[' + _field3 + space(clean(_operator2)) + cleanVal(value) + ']]'; - } - case Type.STATE: - { - return value; - } - case Type.ID: - { - return '#' + value; - } - case Type.CLASS: - { - return '.' + value; - } - case Type.PARENT: - case Type.CHILD: - { - return queryToString(check.parent, subject) + space('>') + queryToString(check.child, subject); - } - case Type.ANCESTOR: - case Type.DESCENDANT: - { - return queryToString(check.ancestor, subject) + ' ' + queryToString(check.descendant, subject); - } - case Type.COMPOUND_SPLIT: - { - var lhs = queryToString(check.left, subject); - var sub = queryToString(check.subject, subject); - var rhs = queryToString(check.right, subject); - return lhs + (lhs.length > 0 ? ' ' : '') + sub + rhs; - } - case Type.TRUE: - { - return ''; - } - } - }; - var queryToString = function queryToString(query, subject) { - return query.checks.reduce(function (str, chk, i) { - return str + (subject === query && i === 0 ? '$' : '') + checkToString(chk, subject); - }, ''); - }; - var str = ''; - for (var i = 0; i < this.length; i++) { - var query = this[i]; - str += queryToString(query, query.subject); - if (this.length > 1 && i < this.length - 1) { - str += ', '; - } - } - this.toStringCache = str; - return str; -}; -var parse$1 = { - parse: parse, - toString: toString -}; - -var valCmp = function valCmp(fieldVal, operator, value) { - var matches; - var isFieldStr = string(fieldVal); - var isFieldNum = number$1(fieldVal); - var isValStr = string(value); - var fieldStr, valStr; - var caseInsensitive = false; - var notExpr = false; - var isIneqCmp = false; - if (operator.indexOf('!') >= 0) { - operator = operator.replace('!', ''); - notExpr = true; - } - if (operator.indexOf('@') >= 0) { - operator = operator.replace('@', ''); - caseInsensitive = true; - } - if (isFieldStr || isValStr || caseInsensitive) { - fieldStr = !isFieldStr && !isFieldNum ? '' : '' + fieldVal; - valStr = '' + value; - } - - // if we're doing a case insensitive comparison, then we're using a STRING comparison - // even if we're comparing numbers - if (caseInsensitive) { - fieldVal = fieldStr = fieldStr.toLowerCase(); - value = valStr = valStr.toLowerCase(); - } - switch (operator) { - case '*=': - matches = fieldStr.indexOf(valStr) >= 0; - break; - case '$=': - matches = fieldStr.indexOf(valStr, fieldStr.length - valStr.length) >= 0; - break; - case '^=': - matches = fieldStr.indexOf(valStr) === 0; - break; - case '=': - matches = fieldVal === value; - break; - case '>': - isIneqCmp = true; - matches = fieldVal > value; - break; - case '>=': - isIneqCmp = true; - matches = fieldVal >= value; - break; - case '<': - isIneqCmp = true; - matches = fieldVal < value; - break; - case '<=': - isIneqCmp = true; - matches = fieldVal <= value; - break; - default: - matches = false; - break; - } - - // apply the not op, but null vals for inequalities should always stay non-matching - if (notExpr && (fieldVal != null || !isIneqCmp)) { - matches = !matches; - } - return matches; -}; -var boolCmp = function boolCmp(fieldVal, operator) { - switch (operator) { - case '?': - return fieldVal ? true : false; - case '!': - return fieldVal ? false : true; - case '^': - return fieldVal === undefined; - } -}; -var existCmp = function existCmp(fieldVal) { - return fieldVal !== undefined; -}; -var data$1 = function data(ele, field) { - return ele.data(field); -}; -var meta = function meta(ele, field) { - return ele[field](); -}; - -/** A lookup of `match(check, ele)` functions by `Type` int */ -var match = []; - -/** - * Returns whether the query matches for the element - * @param query The `{ type, value, ... }` query object - * @param ele The element to compare against -*/ -var matches$1 = function matches(query, ele) { - return query.checks.every(function (chk) { - return match[chk.type](chk, ele); - }); -}; -match[Type.GROUP] = function (check, ele) { - var group = check.value; - return group === '*' || group === ele.group(); -}; -match[Type.STATE] = function (check, ele) { - var stateSelector = check.value; - return stateSelectorMatches(stateSelector, ele); -}; -match[Type.ID] = function (check, ele) { - var id = check.value; - return ele.id() === id; -}; -match[Type.CLASS] = function (check, ele) { - var cls = check.value; - return ele.hasClass(cls); -}; -match[Type.META_COMPARE] = function (check, ele) { - var field = check.field, - operator = check.operator, - value = check.value; - return valCmp(meta(ele, field), operator, value); -}; -match[Type.DATA_COMPARE] = function (check, ele) { - var field = check.field, - operator = check.operator, - value = check.value; - return valCmp(data$1(ele, field), operator, value); -}; -match[Type.DATA_BOOL] = function (check, ele) { - var field = check.field, - operator = check.operator; - return boolCmp(data$1(ele, field), operator); -}; -match[Type.DATA_EXIST] = function (check, ele) { - var field = check.field; - check.operator; - return existCmp(data$1(ele, field)); -}; -match[Type.UNDIRECTED_EDGE] = function (check, ele) { - var qA = check.nodes[0]; - var qB = check.nodes[1]; - var src = ele.source(); - var tgt = ele.target(); - return matches$1(qA, src) && matches$1(qB, tgt) || matches$1(qB, src) && matches$1(qA, tgt); -}; -match[Type.NODE_NEIGHBOR] = function (check, ele) { - return matches$1(check.node, ele) && ele.neighborhood().some(function (n) { - return n.isNode() && matches$1(check.neighbor, n); - }); -}; -match[Type.DIRECTED_EDGE] = function (check, ele) { - return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target()); -}; -match[Type.NODE_SOURCE] = function (check, ele) { - return matches$1(check.source, ele) && ele.outgoers().some(function (n) { - return n.isNode() && matches$1(check.target, n); - }); -}; -match[Type.NODE_TARGET] = function (check, ele) { - return matches$1(check.target, ele) && ele.incomers().some(function (n) { - return n.isNode() && matches$1(check.source, n); - }); -}; -match[Type.CHILD] = function (check, ele) { - return matches$1(check.child, ele) && matches$1(check.parent, ele.parent()); -}; -match[Type.PARENT] = function (check, ele) { - return matches$1(check.parent, ele) && ele.children().some(function (c) { - return matches$1(check.child, c); - }); -}; -match[Type.DESCENDANT] = function (check, ele) { - return matches$1(check.descendant, ele) && ele.ancestors().some(function (a) { - return matches$1(check.ancestor, a); - }); -}; -match[Type.ANCESTOR] = function (check, ele) { - return matches$1(check.ancestor, ele) && ele.descendants().some(function (d) { - return matches$1(check.descendant, d); - }); -}; -match[Type.COMPOUND_SPLIT] = function (check, ele) { - return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele); -}; -match[Type.TRUE] = function () { - return true; -}; -match[Type.COLLECTION] = function (check, ele) { - var collection = check.value; - return collection.has(ele); -}; -match[Type.FILTER] = function (check, ele) { - var filter = check.value; - return filter(ele); -}; - -// filter an existing collection -var filter = function filter(collection) { - var self = this; - - // for 1 id #foo queries, just get the element - if (self.length === 1 && self[0].checks.length === 1 && self[0].checks[0].type === Type.ID) { - return collection.getElementById(self[0].checks[0].value).collection(); - } - var selectorFunction = function selectorFunction(element) { - for (var j = 0; j < self.length; j++) { - var query = self[j]; - if (matches$1(query, element)) { - return true; - } - } - return false; - }; - if (self.text() == null) { - selectorFunction = function selectorFunction() { - return true; - }; - } - return collection.filter(selectorFunction); -}; // filter - -// does selector match a single element? -var matches = function matches(ele) { - var self = this; - for (var j = 0; j < self.length; j++) { - var query = self[j]; - if (matches$1(query, ele)) { - return true; - } - } - return false; -}; // matches - -var matching = { - matches: matches, - filter: filter -}; - -var Selector = function Selector(selector) { - this.inputText = selector; - this.currentSubject = null; - this.compoundCount = 0; - this.edgeCount = 0; - this.length = 0; - if (selector == null || string(selector) && selector.match(/^\s*$/)) ; else if (elementOrCollection(selector)) { - this.addQuery({ - checks: [{ - type: Type.COLLECTION, - value: selector.collection() - }] - }); - } else if (fn$6(selector)) { - this.addQuery({ - checks: [{ - type: Type.FILTER, - value: selector - }] - }); - } else if (string(selector)) { - if (!this.parse(selector)) { - this.invalid = true; - } - } else { - error('A selector must be created from a string; found '); - } -}; -var selfn = Selector.prototype; -[parse$1, matching].forEach(function (p) { - return extend(selfn, p); -}); -selfn.text = function () { - return this.inputText; -}; -selfn.size = function () { - return this.length; -}; -selfn.eq = function (i) { - return this[i]; -}; -selfn.sameText = function (otherSel) { - return !this.invalid && !otherSel.invalid && this.text() === otherSel.text(); -}; -selfn.addQuery = function (q) { - this[this.length++] = q; -}; -selfn.selector = selfn.toString; - -var elesfn$g = { - allAre: function allAre(selector) { - var selObj = new Selector(selector); - return this.every(function (ele) { - return selObj.matches(ele); - }); - }, - is: function is(selector) { - var selObj = new Selector(selector); - return this.some(function (ele) { - return selObj.matches(ele); - }); - }, - some: function some(fn, thisArg) { - for (var i = 0; i < this.length; i++) { - var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); - if (ret) { - return true; - } - } - return false; - }, - every: function every(fn, thisArg) { - for (var i = 0; i < this.length; i++) { - var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); - if (!ret) { - return false; - } - } - return true; - }, - same: function same(collection) { - // cheap collection ref check - if (this === collection) { - return true; - } - collection = this.cy().collection(collection); - var thisLength = this.length; - var collectionLength = collection.length; - - // cheap length check - if (thisLength !== collectionLength) { - return false; - } - - // cheap element ref check - if (thisLength === 1) { - return this[0] === collection[0]; - } - return this.every(function (ele) { - return collection.hasElementWithId(ele.id()); - }); - }, - anySame: function anySame(collection) { - collection = this.cy().collection(collection); - return this.some(function (ele) { - return collection.hasElementWithId(ele.id()); - }); - }, - allAreNeighbors: function allAreNeighbors(collection) { - collection = this.cy().collection(collection); - var nhood = this.neighborhood(); - return collection.every(function (ele) { - return nhood.hasElementWithId(ele.id()); - }); - }, - contains: function contains(collection) { - collection = this.cy().collection(collection); - var self = this; - return collection.every(function (ele) { - return self.hasElementWithId(ele.id()); - }); - } -}; -elesfn$g.allAreNeighbours = elesfn$g.allAreNeighbors; -elesfn$g.has = elesfn$g.contains; -elesfn$g.equal = elesfn$g.equals = elesfn$g.same; - -var cache = function cache(fn, name) { - return function traversalCache(arg1, arg2, arg3, arg4) { - var selectorOrEles = arg1; - var eles = this; - var key; - if (selectorOrEles == null) { - key = ''; - } else if (elementOrCollection(selectorOrEles) && selectorOrEles.length === 1) { - key = selectorOrEles.id(); - } - if (eles.length === 1 && key) { - var _p = eles[0]._private; - var tch = _p.traversalCache = _p.traversalCache || {}; - var ch = tch[name] = tch[name] || []; - var hash = hashString(key); - var cacheHit = ch[hash]; - if (cacheHit) { - return cacheHit; - } else { - return ch[hash] = fn.call(eles, arg1, arg2, arg3, arg4); - } - } else { - return fn.call(eles, arg1, arg2, arg3, arg4); - } - }; -}; - -var elesfn$f = { - parent: function parent(selector) { - var parents = []; - - // optimisation for single ele call - if (this.length === 1) { - var parent = this[0]._private.parent; - if (parent) { - return parent; - } - } - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - var _parent = ele._private.parent; - if (_parent) { - parents.push(_parent); - } - } - return this.spawn(parents, true).filter(selector); - }, - parents: function parents(selector) { - var parents = []; - var eles = this.parent(); - while (eles.nonempty()) { - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - parents.push(ele); - } - eles = eles.parent(); - } - return this.spawn(parents, true).filter(selector); - }, - commonAncestors: function commonAncestors(selector) { - var ancestors; - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - var parents = ele.parents(); - ancestors = ancestors || parents; - ancestors = ancestors.intersect(parents); // current list must be common with current ele parents set - } - - return ancestors.filter(selector); - }, - orphans: function orphans(selector) { - return this.stdFilter(function (ele) { - return ele.isOrphan(); - }).filter(selector); - }, - nonorphans: function nonorphans(selector) { - return this.stdFilter(function (ele) { - return ele.isChild(); - }).filter(selector); - }, - children: cache(function (selector) { - var children = []; - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - var eleChildren = ele._private.children; - for (var j = 0; j < eleChildren.length; j++) { - children.push(eleChildren[j]); - } - } - return this.spawn(children, true).filter(selector); - }, 'children'), - siblings: function siblings(selector) { - return this.parent().children().not(this).filter(selector); - }, - isParent: function isParent() { - var ele = this[0]; - if (ele) { - return ele.isNode() && ele._private.children.length !== 0; - } - }, - isChildless: function isChildless() { - var ele = this[0]; - if (ele) { - return ele.isNode() && ele._private.children.length === 0; - } - }, - isChild: function isChild() { - var ele = this[0]; - if (ele) { - return ele.isNode() && ele._private.parent != null; - } - }, - isOrphan: function isOrphan() { - var ele = this[0]; - if (ele) { - return ele.isNode() && ele._private.parent == null; - } - }, - descendants: function descendants(selector) { - var elements = []; - function add(eles) { - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - elements.push(ele); - if (ele.children().nonempty()) { - add(ele.children()); - } - } - } - add(this.children()); - return this.spawn(elements, true).filter(selector); - } -}; -function forEachCompound(eles, fn, includeSelf, recursiveStep) { - var q = []; - var did = new Set$1(); - var cy = eles.cy(); - var hasCompounds = cy.hasCompoundNodes(); - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - if (includeSelf) { - q.push(ele); - } else if (hasCompounds) { - recursiveStep(q, did, ele); - } - } - while (q.length > 0) { - var _ele = q.shift(); - fn(_ele); - did.add(_ele.id()); - if (hasCompounds) { - recursiveStep(q, did, _ele); - } - } - return eles; -} -function addChildren(q, did, ele) { - if (ele.isParent()) { - var children = ele._private.children; - for (var i = 0; i < children.length; i++) { - var child = children[i]; - if (!did.has(child.id())) { - q.push(child); - } - } - } -} - -// very efficient version of eles.add( eles.descendants() ).forEach() -// for internal use -elesfn$f.forEachDown = function (fn) { - var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - return forEachCompound(this, fn, includeSelf, addChildren); -}; -function addParent(q, did, ele) { - if (ele.isChild()) { - var parent = ele._private.parent; - if (!did.has(parent.id())) { - q.push(parent); - } - } -} -elesfn$f.forEachUp = function (fn) { - var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - return forEachCompound(this, fn, includeSelf, addParent); -}; -function addParentAndChildren(q, did, ele) { - addParent(q, did, ele); - addChildren(q, did, ele); -} -elesfn$f.forEachUpAndDown = function (fn) { - var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - return forEachCompound(this, fn, includeSelf, addParentAndChildren); -}; - -// aliases -elesfn$f.ancestors = elesfn$f.parents; - -var fn$5, elesfn$e; -fn$5 = elesfn$e = { - data: define.data({ - field: 'data', - bindingEvent: 'data', - allowBinding: true, - allowSetting: true, - settingEvent: 'data', - settingTriggersEvent: true, - triggerFnName: 'trigger', - allowGetting: true, - immutableKeys: { - 'id': true, - 'source': true, - 'target': true, - 'parent': true - }, - updateStyle: true - }), - removeData: define.removeData({ - field: 'data', - event: 'data', - triggerFnName: 'trigger', - triggerEvent: true, - immutableKeys: { - 'id': true, - 'source': true, - 'target': true, - 'parent': true - }, - updateStyle: true - }), - scratch: define.data({ - field: 'scratch', - bindingEvent: 'scratch', - allowBinding: true, - allowSetting: true, - settingEvent: 'scratch', - settingTriggersEvent: true, - triggerFnName: 'trigger', - allowGetting: true, - updateStyle: true - }), - removeScratch: define.removeData({ - field: 'scratch', - event: 'scratch', - triggerFnName: 'trigger', - triggerEvent: true, - updateStyle: true - }), - rscratch: define.data({ - field: 'rscratch', - allowBinding: false, - allowSetting: true, - settingTriggersEvent: false, - allowGetting: true - }), - removeRscratch: define.removeData({ - field: 'rscratch', - triggerEvent: false - }), - id: function id() { - var ele = this[0]; - if (ele) { - return ele._private.data.id; - } - } -}; - -// aliases -fn$5.attr = fn$5.data; -fn$5.removeAttr = fn$5.removeData; -var data = elesfn$e; - -var elesfn$d = {}; -function defineDegreeFunction(callback) { - return function (includeLoops) { - var self = this; - if (includeLoops === undefined) { - includeLoops = true; - } - if (self.length === 0) { - return; - } - if (self.isNode() && !self.removed()) { - var degree = 0; - var node = self[0]; - var connectedEdges = node._private.edges; - for (var i = 0; i < connectedEdges.length; i++) { - var edge = connectedEdges[i]; - if (!includeLoops && edge.isLoop()) { - continue; - } - degree += callback(node, edge); - } - return degree; - } else { - return; - } - }; -} -extend(elesfn$d, { - degree: defineDegreeFunction(function (node, edge) { - if (edge.source().same(edge.target())) { - return 2; - } else { - return 1; - } - }), - indegree: defineDegreeFunction(function (node, edge) { - if (edge.target().same(node)) { - return 1; - } else { - return 0; - } - }), - outdegree: defineDegreeFunction(function (node, edge) { - if (edge.source().same(node)) { - return 1; - } else { - return 0; - } - }) -}); -function defineDegreeBoundsFunction(degreeFn, callback) { - return function (includeLoops) { - var ret; - var nodes = this.nodes(); - for (var i = 0; i < nodes.length; i++) { - var ele = nodes[i]; - var degree = ele[degreeFn](includeLoops); - if (degree !== undefined && (ret === undefined || callback(degree, ret))) { - ret = degree; - } - } - return ret; - }; -} -extend(elesfn$d, { - minDegree: defineDegreeBoundsFunction('degree', function (degree, min) { - return degree < min; - }), - maxDegree: defineDegreeBoundsFunction('degree', function (degree, max) { - return degree > max; - }), - minIndegree: defineDegreeBoundsFunction('indegree', function (degree, min) { - return degree < min; - }), - maxIndegree: defineDegreeBoundsFunction('indegree', function (degree, max) { - return degree > max; - }), - minOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, min) { - return degree < min; - }), - maxOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, max) { - return degree > max; - }) -}); -extend(elesfn$d, { - totalDegree: function totalDegree(includeLoops) { - var total = 0; - var nodes = this.nodes(); - for (var i = 0; i < nodes.length; i++) { - total += nodes[i].degree(includeLoops); - } - return total; - } -}); - -var fn$4, elesfn$c; -var beforePositionSet = function beforePositionSet(eles, newPos, silent) { - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - if (!ele.locked()) { - var oldPos = ele._private.position; - var delta = { - x: newPos.x != null ? newPos.x - oldPos.x : 0, - y: newPos.y != null ? newPos.y - oldPos.y : 0 - }; - if (ele.isParent() && !(delta.x === 0 && delta.y === 0)) { - ele.children().shift(delta, silent); - } - ele.dirtyBoundingBoxCache(); - } - } -}; -var positionDef = { - field: 'position', - bindingEvent: 'position', - allowBinding: true, - allowSetting: true, - settingEvent: 'position', - settingTriggersEvent: true, - triggerFnName: 'emitAndNotify', - allowGetting: true, - validKeys: ['x', 'y'], - beforeGet: function beforeGet(ele) { - ele.updateCompoundBounds(); - }, - beforeSet: function beforeSet(eles, newPos) { - beforePositionSet(eles, newPos, false); - }, - onSet: function onSet(eles) { - eles.dirtyCompoundBoundsCache(); - }, - canSet: function canSet(ele) { - return !ele.locked(); - } -}; -fn$4 = elesfn$c = { - position: define.data(positionDef), - // position but no notification to renderer - silentPosition: define.data(extend({}, positionDef, { - allowBinding: false, - allowSetting: true, - settingTriggersEvent: false, - allowGetting: false, - beforeSet: function beforeSet(eles, newPos) { - beforePositionSet(eles, newPos, true); - }, - onSet: function onSet(eles) { - eles.dirtyCompoundBoundsCache(); - } - })), - positions: function positions(pos, silent) { - if (plainObject(pos)) { - if (silent) { - this.silentPosition(pos); - } else { - this.position(pos); - } - } else if (fn$6(pos)) { - var _fn = pos; - var cy = this.cy(); - cy.startBatch(); - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - var _pos = void 0; - if (_pos = _fn(ele, i)) { - if (silent) { - ele.silentPosition(_pos); - } else { - ele.position(_pos); - } - } - } - cy.endBatch(); - } - return this; // chaining - }, - - silentPositions: function silentPositions(pos) { - return this.positions(pos, true); - }, - shift: function shift(dim, val, silent) { - var delta; - if (plainObject(dim)) { - delta = { - x: number$1(dim.x) ? dim.x : 0, - y: number$1(dim.y) ? dim.y : 0 - }; - silent = val; - } else if (string(dim) && number$1(val)) { - delta = { - x: 0, - y: 0 - }; - delta[dim] = val; - } - if (delta != null) { - var cy = this.cy(); - cy.startBatch(); - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - - // exclude any node that is a descendant of the calling collection - if (cy.hasCompoundNodes() && ele.isChild() && ele.ancestors().anySame(this)) { - continue; - } - var pos = ele.position(); - var newPos = { - x: pos.x + delta.x, - y: pos.y + delta.y - }; - if (silent) { - ele.silentPosition(newPos); - } else { - ele.position(newPos); - } - } - cy.endBatch(); - } - return this; - }, - silentShift: function silentShift(dim, val) { - if (plainObject(dim)) { - this.shift(dim, true); - } else if (string(dim) && number$1(val)) { - this.shift(dim, val, true); - } - return this; - }, - // get/set the rendered (i.e. on screen) positon of the element - renderedPosition: function renderedPosition(dim, val) { - var ele = this[0]; - var cy = this.cy(); - var zoom = cy.zoom(); - var pan = cy.pan(); - var rpos = plainObject(dim) ? dim : undefined; - var setting = rpos !== undefined || val !== undefined && string(dim); - if (ele && ele.isNode()) { - // must have an element and must be a node to return position - if (setting) { - for (var i = 0; i < this.length; i++) { - var _ele = this[i]; - if (val !== undefined) { - // set one dimension - _ele.position(dim, (val - pan[dim]) / zoom); - } else if (rpos !== undefined) { - // set whole position - _ele.position(renderedToModelPosition(rpos, zoom, pan)); - } - } - } else { - // getting - var pos = ele.position(); - rpos = modelToRenderedPosition(pos, zoom, pan); - if (dim === undefined) { - // then return the whole rendered position - return rpos; - } else { - // then return the specified dimension - return rpos[dim]; - } - } - } else if (!setting) { - return undefined; // for empty collection case - } - - return this; // chaining - }, - - // get/set the position relative to the parent - relativePosition: function relativePosition(dim, val) { - var ele = this[0]; - var cy = this.cy(); - var ppos = plainObject(dim) ? dim : undefined; - var setting = ppos !== undefined || val !== undefined && string(dim); - var hasCompoundNodes = cy.hasCompoundNodes(); - if (ele && ele.isNode()) { - // must have an element and must be a node to return position - if (setting) { - for (var i = 0; i < this.length; i++) { - var _ele2 = this[i]; - var parent = hasCompoundNodes ? _ele2.parent() : null; - var hasParent = parent && parent.length > 0; - var relativeToParent = hasParent; - if (hasParent) { - parent = parent[0]; - } - var origin = relativeToParent ? parent.position() : { - x: 0, - y: 0 - }; - if (val !== undefined) { - // set one dimension - _ele2.position(dim, val + origin[dim]); - } else if (ppos !== undefined) { - // set whole position - _ele2.position({ - x: ppos.x + origin.x, - y: ppos.y + origin.y - }); - } - } - } else { - // getting - var pos = ele.position(); - var _parent = hasCompoundNodes ? ele.parent() : null; - var _hasParent = _parent && _parent.length > 0; - var _relativeToParent = _hasParent; - if (_hasParent) { - _parent = _parent[0]; - } - var _origin = _relativeToParent ? _parent.position() : { - x: 0, - y: 0 - }; - ppos = { - x: pos.x - _origin.x, - y: pos.y - _origin.y - }; - if (dim === undefined) { - // then return the whole rendered position - return ppos; - } else { - // then return the specified dimension - return ppos[dim]; - } - } - } else if (!setting) { - return undefined; // for empty collection case - } - - return this; // chaining - } -}; - -// aliases -fn$4.modelPosition = fn$4.point = fn$4.position; -fn$4.modelPositions = fn$4.points = fn$4.positions; -fn$4.renderedPoint = fn$4.renderedPosition; -fn$4.relativePoint = fn$4.relativePosition; -var position = elesfn$c; - -var fn$3, elesfn$b; -fn$3 = elesfn$b = {}; -elesfn$b.renderedBoundingBox = function (options) { - var bb = this.boundingBox(options); - var cy = this.cy(); - var zoom = cy.zoom(); - var pan = cy.pan(); - var x1 = bb.x1 * zoom + pan.x; - var x2 = bb.x2 * zoom + pan.x; - var y1 = bb.y1 * zoom + pan.y; - var y2 = bb.y2 * zoom + pan.y; - return { - x1: x1, - x2: x2, - y1: y1, - y2: y2, - w: x2 - x1, - h: y2 - y1 - }; -}; -elesfn$b.dirtyCompoundBoundsCache = function () { - var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var cy = this.cy(); - if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { - return this; - } - this.forEachUp(function (ele) { - if (ele.isParent()) { - var _p = ele._private; - _p.compoundBoundsClean = false; - _p.bbCache = null; - if (!silent) { - ele.emitAndNotify('bounds'); - } - } - }); - return this; -}; -elesfn$b.updateCompoundBounds = function () { - var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var cy = this.cy(); - - // not possible to do on non-compound graphs or with the style disabled - if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { - return this; - } - - // save cycles when batching -- but bounds will be stale (or not exist yet) - if (!force && cy.batching()) { - return this; - } - function update(parent) { - if (!parent.isParent()) { - return; - } - var _p = parent._private; - var children = parent.children(); - var includeLabels = parent.pstyle('compound-sizing-wrt-labels').value === 'include'; - var min = { - width: { - val: parent.pstyle('min-width').pfValue, - left: parent.pstyle('min-width-bias-left'), - right: parent.pstyle('min-width-bias-right') - }, - height: { - val: parent.pstyle('min-height').pfValue, - top: parent.pstyle('min-height-bias-top'), - bottom: parent.pstyle('min-height-bias-bottom') - } - }; - var bb = children.boundingBox({ - includeLabels: includeLabels, - includeOverlays: false, - // updating the compound bounds happens outside of the regular - // cache cycle (i.e. before fired events) - useCache: false - }); - var pos = _p.position; - - // if children take up zero area then keep position and fall back on stylesheet w/h - if (bb.w === 0 || bb.h === 0) { - bb = { - w: parent.pstyle('width').pfValue, - h: parent.pstyle('height').pfValue - }; - bb.x1 = pos.x - bb.w / 2; - bb.x2 = pos.x + bb.w / 2; - bb.y1 = pos.y - bb.h / 2; - bb.y2 = pos.y + bb.h / 2; - } - function computeBiasValues(propDiff, propBias, propBiasComplement) { - var biasDiff = 0; - var biasComplementDiff = 0; - var biasTotal = propBias + propBiasComplement; - if (propDiff > 0 && biasTotal > 0) { - biasDiff = propBias / biasTotal * propDiff; - biasComplementDiff = propBiasComplement / biasTotal * propDiff; - } - return { - biasDiff: biasDiff, - biasComplementDiff: biasComplementDiff - }; - } - function computePaddingValues(width, height, paddingObject, relativeTo) { - // Assuming percentage is number from 0 to 1 - if (paddingObject.units === '%') { - switch (relativeTo) { - case 'width': - return width > 0 ? paddingObject.pfValue * width : 0; - case 'height': - return height > 0 ? paddingObject.pfValue * height : 0; - case 'average': - return width > 0 && height > 0 ? paddingObject.pfValue * (width + height) / 2 : 0; - case 'min': - return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * height : paddingObject.pfValue * width : 0; - case 'max': - return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * width : paddingObject.pfValue * height : 0; - default: - return 0; - } - } else if (paddingObject.units === 'px') { - return paddingObject.pfValue; - } else { - return 0; - } - } - var leftVal = min.width.left.value; - if (min.width.left.units === 'px' && min.width.val > 0) { - leftVal = leftVal * 100 / min.width.val; - } - var rightVal = min.width.right.value; - if (min.width.right.units === 'px' && min.width.val > 0) { - rightVal = rightVal * 100 / min.width.val; - } - var topVal = min.height.top.value; - if (min.height.top.units === 'px' && min.height.val > 0) { - topVal = topVal * 100 / min.height.val; - } - var bottomVal = min.height.bottom.value; - if (min.height.bottom.units === 'px' && min.height.val > 0) { - bottomVal = bottomVal * 100 / min.height.val; - } - var widthBiasDiffs = computeBiasValues(min.width.val - bb.w, leftVal, rightVal); - var diffLeft = widthBiasDiffs.biasDiff; - var diffRight = widthBiasDiffs.biasComplementDiff; - var heightBiasDiffs = computeBiasValues(min.height.val - bb.h, topVal, bottomVal); - var diffTop = heightBiasDiffs.biasDiff; - var diffBottom = heightBiasDiffs.biasComplementDiff; - _p.autoPadding = computePaddingValues(bb.w, bb.h, parent.pstyle('padding'), parent.pstyle('padding-relative-to').value); - _p.autoWidth = Math.max(bb.w, min.width.val); - pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2; - _p.autoHeight = Math.max(bb.h, min.height.val); - pos.y = (-diffTop + bb.y1 + bb.y2 + diffBottom) / 2; - } - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - var _p = ele._private; - if (!_p.compoundBoundsClean || force) { - update(ele); - if (!cy.batching()) { - _p.compoundBoundsClean = true; - } - } - } - return this; -}; -var noninf = function noninf(x) { - if (x === Infinity || x === -Infinity) { - return 0; - } - return x; -}; -var updateBounds = function updateBounds(b, x1, y1, x2, y2) { - // don't update with zero area boxes - if (x2 - x1 === 0 || y2 - y1 === 0) { - return; - } - - // don't update with null dim - if (x1 == null || y1 == null || x2 == null || y2 == null) { - return; - } - b.x1 = x1 < b.x1 ? x1 : b.x1; - b.x2 = x2 > b.x2 ? x2 : b.x2; - b.y1 = y1 < b.y1 ? y1 : b.y1; - b.y2 = y2 > b.y2 ? y2 : b.y2; - b.w = b.x2 - b.x1; - b.h = b.y2 - b.y1; -}; -var updateBoundsFromBox = function updateBoundsFromBox(b, b2) { - if (b2 == null) { - return b; - } - return updateBounds(b, b2.x1, b2.y1, b2.x2, b2.y2); -}; -var prefixedProperty = function prefixedProperty(obj, field, prefix) { - return getPrefixedProperty(obj, field, prefix); -}; -var updateBoundsFromArrow = function updateBoundsFromArrow(bounds, ele, prefix) { - if (ele.cy().headless()) { - return; - } - var _p = ele._private; - var rstyle = _p.rstyle; - var halfArW = rstyle.arrowWidth / 2; - var arrowType = ele.pstyle(prefix + '-arrow-shape').value; - var x; - var y; - if (arrowType !== 'none') { - if (prefix === 'source') { - x = rstyle.srcX; - y = rstyle.srcY; - } else if (prefix === 'target') { - x = rstyle.tgtX; - y = rstyle.tgtY; - } else { - x = rstyle.midX; - y = rstyle.midY; - } - - // always store the individual arrow bounds - var bbs = _p.arrowBounds = _p.arrowBounds || {}; - var bb = bbs[prefix] = bbs[prefix] || {}; - bb.x1 = x - halfArW; - bb.y1 = y - halfArW; - bb.x2 = x + halfArW; - bb.y2 = y + halfArW; - bb.w = bb.x2 - bb.x1; - bb.h = bb.y2 - bb.y1; - expandBoundingBox(bb, 1); - updateBounds(bounds, bb.x1, bb.y1, bb.x2, bb.y2); - } -}; -var updateBoundsFromLabel = function updateBoundsFromLabel(bounds, ele, prefix) { - if (ele.cy().headless()) { - return; - } - var prefixDash; - if (prefix) { - prefixDash = prefix + '-'; - } else { - prefixDash = ''; - } - var _p = ele._private; - var rstyle = _p.rstyle; - var label = ele.pstyle(prefixDash + 'label').strValue; - if (label) { - var halign = ele.pstyle('text-halign'); - var valign = ele.pstyle('text-valign'); - var labelWidth = prefixedProperty(rstyle, 'labelWidth', prefix); - var labelHeight = prefixedProperty(rstyle, 'labelHeight', prefix); - var labelX = prefixedProperty(rstyle, 'labelX', prefix); - var labelY = prefixedProperty(rstyle, 'labelY', prefix); - var marginX = ele.pstyle(prefixDash + 'text-margin-x').pfValue; - var marginY = ele.pstyle(prefixDash + 'text-margin-y').pfValue; - var isEdge = ele.isEdge(); - var rotation = ele.pstyle(prefixDash + 'text-rotation'); - var outlineWidth = ele.pstyle('text-outline-width').pfValue; - var borderWidth = ele.pstyle('text-border-width').pfValue; - var halfBorderWidth = borderWidth / 2; - var padding = ele.pstyle('text-background-padding').pfValue; - var marginOfError = 2; // expand to work around browser dimension inaccuracies - - var lh = labelHeight; - var lw = labelWidth; - var lw_2 = lw / 2; - var lh_2 = lh / 2; - var lx1, lx2, ly1, ly2; - if (isEdge) { - lx1 = labelX - lw_2; - lx2 = labelX + lw_2; - ly1 = labelY - lh_2; - ly2 = labelY + lh_2; - } else { - switch (halign.value) { - case 'left': - lx1 = labelX - lw; - lx2 = labelX; - break; - case 'center': - lx1 = labelX - lw_2; - lx2 = labelX + lw_2; - break; - case 'right': - lx1 = labelX; - lx2 = labelX + lw; - break; - } - switch (valign.value) { - case 'top': - ly1 = labelY - lh; - ly2 = labelY; - break; - case 'center': - ly1 = labelY - lh_2; - ly2 = labelY + lh_2; - break; - case 'bottom': - ly1 = labelY; - ly2 = labelY + lh; - break; - } - } - - // shift by margin and expand by outline and border - lx1 += marginX - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; - lx2 += marginX + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; - ly1 += marginY - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; - ly2 += marginY + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; - - // always store the unrotated label bounds separately - var bbPrefix = prefix || 'main'; - var bbs = _p.labelBounds; - var bb = bbs[bbPrefix] = bbs[bbPrefix] || {}; - bb.x1 = lx1; - bb.y1 = ly1; - bb.x2 = lx2; - bb.y2 = ly2; - bb.w = lx2 - lx1; - bb.h = ly2 - ly1; - var isAutorotate = isEdge && rotation.strValue === 'autorotate'; - var isPfValue = rotation.pfValue != null && rotation.pfValue !== 0; - if (isAutorotate || isPfValue) { - var theta = isAutorotate ? prefixedProperty(_p.rstyle, 'labelAngle', prefix) : rotation.pfValue; - var cos = Math.cos(theta); - var sin = Math.sin(theta); - - // rotation point (default value for center-center) - var xo = (lx1 + lx2) / 2; - var yo = (ly1 + ly2) / 2; - if (!isEdge) { - switch (halign.value) { - case 'left': - xo = lx2; - break; - case 'right': - xo = lx1; - break; - } - switch (valign.value) { - case 'top': - yo = ly2; - break; - case 'bottom': - yo = ly1; - break; - } - } - var rotate = function rotate(x, y) { - x = x - xo; - y = y - yo; - return { - x: x * cos - y * sin + xo, - y: x * sin + y * cos + yo - }; - }; - var px1y1 = rotate(lx1, ly1); - var px1y2 = rotate(lx1, ly2); - var px2y1 = rotate(lx2, ly1); - var px2y2 = rotate(lx2, ly2); - lx1 = Math.min(px1y1.x, px1y2.x, px2y1.x, px2y2.x); - lx2 = Math.max(px1y1.x, px1y2.x, px2y1.x, px2y2.x); - ly1 = Math.min(px1y1.y, px1y2.y, px2y1.y, px2y2.y); - ly2 = Math.max(px1y1.y, px1y2.y, px2y1.y, px2y2.y); - } - var bbPrefixRot = bbPrefix + 'Rot'; - var bbRot = bbs[bbPrefixRot] = bbs[bbPrefixRot] || {}; - bbRot.x1 = lx1; - bbRot.y1 = ly1; - bbRot.x2 = lx2; - bbRot.y2 = ly2; - bbRot.w = lx2 - lx1; - bbRot.h = ly2 - ly1; - updateBounds(bounds, lx1, ly1, lx2, ly2); - updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2); - } - return bounds; -}; -var updateBoundsFromOutline = function updateBoundsFromOutline(bounds, ele) { - if (ele.cy().headless()) { - return; - } - var outlineOpacity = ele.pstyle('outline-opacity').value; - var outlineWidth = ele.pstyle('outline-width').value; - if (outlineOpacity > 0 && outlineWidth > 0) { - var outlineOffset = ele.pstyle('outline-offset').value; - var nodeShape = ele.pstyle('shape').value; - var outlineSize = outlineWidth + outlineOffset; - var scaleX = (bounds.w + outlineSize * 2) / bounds.w; - var scaleY = (bounds.h + outlineSize * 2) / bounds.h; - var xOffset = 0; - var yOffset = 0; - if (["diamond", "pentagon", "round-triangle"].includes(nodeShape)) { - scaleX = (bounds.w + outlineSize * 2.4) / bounds.w; - yOffset = -outlineSize / 3.6; - } else if (["concave-hexagon", "rhomboid", "right-rhomboid"].includes(nodeShape)) { - scaleX = (bounds.w + outlineSize * 2.4) / bounds.w; - } else if (nodeShape === "star") { - scaleX = (bounds.w + outlineSize * 2.8) / bounds.w; - scaleY = (bounds.h + outlineSize * 2.6) / bounds.h; - yOffset = -outlineSize / 3.8; - } else if (nodeShape === "triangle") { - scaleX = (bounds.w + outlineSize * 2.8) / bounds.w; - scaleY = (bounds.h + outlineSize * 2.4) / bounds.h; - yOffset = -outlineSize / 1.4; - } else if (nodeShape === "vee") { - scaleX = (bounds.w + outlineSize * 4.4) / bounds.w; - scaleY = (bounds.h + outlineSize * 3.8) / bounds.h; - yOffset = -outlineSize * .5; - } - var hDelta = bounds.h * scaleY - bounds.h; - var wDelta = bounds.w * scaleX - bounds.w; - expandBoundingBoxSides(bounds, [Math.ceil(hDelta / 2), Math.ceil(wDelta / 2)]); - if (xOffset != 0 || yOffset !== 0) { - var oBounds = shiftBoundingBox(bounds, xOffset, yOffset); - updateBoundingBox(bounds, oBounds); - } - } -}; - -// get the bounding box of the elements (in raw model position) -var boundingBoxImpl = function boundingBoxImpl(ele, options) { - var cy = ele._private.cy; - var styleEnabled = cy.styleEnabled(); - var headless = cy.headless(); - var bounds = makeBoundingBox(); - var _p = ele._private; - var isNode = ele.isNode(); - var isEdge = ele.isEdge(); - var ex1, ex2, ey1, ey2; // extrema of body / lines - var x, y; // node pos - var rstyle = _p.rstyle; - var manualExpansion = isNode && styleEnabled ? ele.pstyle('bounds-expansion').pfValue : [0]; - - // must use `display` prop only, as reading `compound.width()` causes recursion - // (other factors like width values will be considered later in this function anyway) - var isDisplayed = function isDisplayed(ele) { - return ele.pstyle('display').value !== 'none'; - }; - var displayed = !styleEnabled || isDisplayed(ele) - - // must take into account connected nodes b/c of implicit edge hiding on display:none node - && (!isEdge || isDisplayed(ele.source()) && isDisplayed(ele.target())); - if (displayed) { - // displayed suffices, since we will find zero area eles anyway - var overlayOpacity = 0; - var overlayPadding = 0; - if (styleEnabled && options.includeOverlays) { - overlayOpacity = ele.pstyle('overlay-opacity').value; - if (overlayOpacity !== 0) { - overlayPadding = ele.pstyle('overlay-padding').value; - } - } - var underlayOpacity = 0; - var underlayPadding = 0; - if (styleEnabled && options.includeUnderlays) { - underlayOpacity = ele.pstyle('underlay-opacity').value; - if (underlayOpacity !== 0) { - underlayPadding = ele.pstyle('underlay-padding').value; - } - } - var padding = Math.max(overlayPadding, underlayPadding); - var w = 0; - var wHalf = 0; - if (styleEnabled) { - w = ele.pstyle('width').pfValue; - wHalf = w / 2; - } - if (isNode && options.includeNodes) { - var pos = ele.position(); - x = pos.x; - y = pos.y; - var _w = ele.outerWidth(); - var halfW = _w / 2; - var h = ele.outerHeight(); - var halfH = h / 2; - - // handle node dimensions - ///////////////////////// - - ex1 = x - halfW; - ex2 = x + halfW; - ey1 = y - halfH; - ey2 = y + halfH; - updateBounds(bounds, ex1, ey1, ex2, ey2); - if (styleEnabled && options.includeOutlines) { - updateBoundsFromOutline(bounds, ele); - } - } else if (isEdge && options.includeEdges) { - if (styleEnabled && !headless) { - var curveStyle = ele.pstyle('curve-style').strValue; - - // handle edge dimensions (rough box estimate) - ////////////////////////////////////////////// - - ex1 = Math.min(rstyle.srcX, rstyle.midX, rstyle.tgtX); - ex2 = Math.max(rstyle.srcX, rstyle.midX, rstyle.tgtX); - ey1 = Math.min(rstyle.srcY, rstyle.midY, rstyle.tgtY); - ey2 = Math.max(rstyle.srcY, rstyle.midY, rstyle.tgtY); - - // take into account edge width - ex1 -= wHalf; - ex2 += wHalf; - ey1 -= wHalf; - ey2 += wHalf; - updateBounds(bounds, ex1, ey1, ex2, ey2); - - // precise edges - //////////////// - - if (curveStyle === 'haystack') { - var hpts = rstyle.haystackPts; - if (hpts && hpts.length === 2) { - ex1 = hpts[0].x; - ey1 = hpts[0].y; - ex2 = hpts[1].x; - ey2 = hpts[1].y; - if (ex1 > ex2) { - var temp = ex1; - ex1 = ex2; - ex2 = temp; - } - if (ey1 > ey2) { - var _temp = ey1; - ey1 = ey2; - ey2 = _temp; - } - updateBounds(bounds, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf); - } - } else if (curveStyle === 'bezier' || curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'taxi') { - var pts; - switch (curveStyle) { - case 'bezier': - case 'unbundled-bezier': - pts = rstyle.bezierPts; - break; - case 'segments': - case 'taxi': - pts = rstyle.linePts; - break; - } - if (pts != null) { - for (var j = 0; j < pts.length; j++) { - var pt = pts[j]; - ex1 = pt.x - wHalf; - ex2 = pt.x + wHalf; - ey1 = pt.y - wHalf; - ey2 = pt.y + wHalf; - updateBounds(bounds, ex1, ey1, ex2, ey2); - } - } - } // bezier-like or segment-like edge - } else { - // headless or style disabled - - // fallback on source and target positions - ////////////////////////////////////////// - - var n1 = ele.source(); - var n1pos = n1.position(); - var n2 = ele.target(); - var n2pos = n2.position(); - ex1 = n1pos.x; - ex2 = n2pos.x; - ey1 = n1pos.y; - ey2 = n2pos.y; - if (ex1 > ex2) { - var _temp2 = ex1; - ex1 = ex2; - ex2 = _temp2; - } - if (ey1 > ey2) { - var _temp3 = ey1; - ey1 = ey2; - ey2 = _temp3; - } - - // take into account edge width - ex1 -= wHalf; - ex2 += wHalf; - ey1 -= wHalf; - ey2 += wHalf; - updateBounds(bounds, ex1, ey1, ex2, ey2); - } // headless or style disabled - } // edges - - // handle edge arrow size - ///////////////////////// - - if (styleEnabled && options.includeEdges && isEdge) { - updateBoundsFromArrow(bounds, ele, 'mid-source'); - updateBoundsFromArrow(bounds, ele, 'mid-target'); - updateBoundsFromArrow(bounds, ele, 'source'); - updateBoundsFromArrow(bounds, ele, 'target'); - } - - // ghost - //////// - - if (styleEnabled) { - var ghost = ele.pstyle('ghost').value === 'yes'; - if (ghost) { - var gx = ele.pstyle('ghost-offset-x').pfValue; - var gy = ele.pstyle('ghost-offset-y').pfValue; - updateBounds(bounds, bounds.x1 + gx, bounds.y1 + gy, bounds.x2 + gx, bounds.y2 + gy); - } - } - - // always store the body bounds separately from the labels - var bbBody = _p.bodyBounds = _p.bodyBounds || {}; - assignBoundingBox(bbBody, bounds); - expandBoundingBoxSides(bbBody, manualExpansion); - expandBoundingBox(bbBody, 1); // expand to work around browser dimension inaccuracies - - // overlay - ////////// - - if (styleEnabled) { - ex1 = bounds.x1; - ex2 = bounds.x2; - ey1 = bounds.y1; - ey2 = bounds.y2; - updateBounds(bounds, ex1 - padding, ey1 - padding, ex2 + padding, ey2 + padding); - } - - // always store the body bounds separately from the labels - var bbOverlay = _p.overlayBounds = _p.overlayBounds || {}; - assignBoundingBox(bbOverlay, bounds); - expandBoundingBoxSides(bbOverlay, manualExpansion); - expandBoundingBox(bbOverlay, 1); // expand to work around browser dimension inaccuracies - - // handle label dimensions - ////////////////////////// - - var bbLabels = _p.labelBounds = _p.labelBounds || {}; - if (bbLabels.all != null) { - clearBoundingBox(bbLabels.all); - } else { - bbLabels.all = makeBoundingBox(); - } - if (styleEnabled && options.includeLabels) { - if (options.includeMainLabels) { - updateBoundsFromLabel(bounds, ele, null); - } - if (isEdge) { - if (options.includeSourceLabels) { - updateBoundsFromLabel(bounds, ele, 'source'); - } - if (options.includeTargetLabels) { - updateBoundsFromLabel(bounds, ele, 'target'); - } - } - } // style enabled for labels - } // if displayed - - bounds.x1 = noninf(bounds.x1); - bounds.y1 = noninf(bounds.y1); - bounds.x2 = noninf(bounds.x2); - bounds.y2 = noninf(bounds.y2); - bounds.w = noninf(bounds.x2 - bounds.x1); - bounds.h = noninf(bounds.y2 - bounds.y1); - if (bounds.w > 0 && bounds.h > 0 && displayed) { - expandBoundingBoxSides(bounds, manualExpansion); - - // expand bounds by 1 because antialiasing can increase the visual/effective size by 1 on all sides - expandBoundingBox(bounds, 1); - } - return bounds; -}; -var getKey = function getKey(opts) { - var i = 0; - var tf = function tf(val) { - return (val ? 1 : 0) << i++; - }; - var key = 0; - key += tf(opts.incudeNodes); - key += tf(opts.includeEdges); - key += tf(opts.includeLabels); - key += tf(opts.includeMainLabels); - key += tf(opts.includeSourceLabels); - key += tf(opts.includeTargetLabels); - key += tf(opts.includeOverlays); - key += tf(opts.includeOutlines); - return key; -}; -var getBoundingBoxPosKey = function getBoundingBoxPosKey(ele) { - if (ele.isEdge()) { - var p1 = ele.source().position(); - var p2 = ele.target().position(); - var r = function r(x) { - return Math.round(x); - }; - return hashIntsArray([r(p1.x), r(p1.y), r(p2.x), r(p2.y)]); - } else { - return 0; - } -}; -var cachedBoundingBoxImpl = function cachedBoundingBoxImpl(ele, opts) { - var _p = ele._private; - var bb; - var isEdge = ele.isEdge(); - var key = opts == null ? defBbOptsKey : getKey(opts); - var usingDefOpts = key === defBbOptsKey; - var currPosKey = getBoundingBoxPosKey(ele); - var isPosKeySame = _p.bbCachePosKey === currPosKey; - var useCache = opts.useCache && isPosKeySame; - var isDirty = function isDirty(ele) { - return ele._private.bbCache == null || ele._private.styleDirty; - }; - var needRecalc = !useCache || isDirty(ele) || isEdge && isDirty(ele.source()) || isDirty(ele.target()); - if (needRecalc) { - if (!isPosKeySame) { - ele.recalculateRenderedStyle(useCache); - } - bb = boundingBoxImpl(ele, defBbOpts); - _p.bbCache = bb; - _p.bbCachePosKey = currPosKey; - } else { - bb = _p.bbCache; - } - - // not using def opts => need to build up bb from combination of sub bbs - if (!usingDefOpts) { - var isNode = ele.isNode(); - bb = makeBoundingBox(); - if (opts.includeNodes && isNode || opts.includeEdges && !isNode) { - if (opts.includeOverlays) { - updateBoundsFromBox(bb, _p.overlayBounds); - } else { - updateBoundsFromBox(bb, _p.bodyBounds); - } - } - if (opts.includeLabels) { - if (opts.includeMainLabels && (!isEdge || opts.includeSourceLabels && opts.includeTargetLabels)) { - updateBoundsFromBox(bb, _p.labelBounds.all); - } else { - if (opts.includeMainLabels) { - updateBoundsFromBox(bb, _p.labelBounds.mainRot); - } - if (opts.includeSourceLabels) { - updateBoundsFromBox(bb, _p.labelBounds.sourceRot); - } - if (opts.includeTargetLabels) { - updateBoundsFromBox(bb, _p.labelBounds.targetRot); - } - } - } - bb.w = bb.x2 - bb.x1; - bb.h = bb.y2 - bb.y1; - } - return bb; -}; -var defBbOpts = { - includeNodes: true, - includeEdges: true, - includeLabels: true, - includeMainLabels: true, - includeSourceLabels: true, - includeTargetLabels: true, - includeOverlays: true, - includeUnderlays: true, - includeOutlines: true, - useCache: true -}; -var defBbOptsKey = getKey(defBbOpts); -var filledBbOpts = defaults$g(defBbOpts); -elesfn$b.boundingBox = function (options) { - var bounds; - - // the main usecase is ele.boundingBox() for a single element with no/def options - // specified s.t. the cache is used, so check for this case to make it faster by - // avoiding the overhead of the rest of the function - if (this.length === 1 && this[0]._private.bbCache != null && !this[0]._private.styleDirty && (options === undefined || options.useCache === undefined || options.useCache === true)) { - if (options === undefined) { - options = defBbOpts; - } else { - options = filledBbOpts(options); - } - bounds = cachedBoundingBoxImpl(this[0], options); - } else { - bounds = makeBoundingBox(); - options = options || defBbOpts; - var opts = filledBbOpts(options); - var eles = this; - var cy = eles.cy(); - var styleEnabled = cy.styleEnabled(); - if (styleEnabled) { - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - var _p = ele._private; - var currPosKey = getBoundingBoxPosKey(ele); - var isPosKeySame = _p.bbCachePosKey === currPosKey; - var useCache = opts.useCache && isPosKeySame && !_p.styleDirty; - ele.recalculateRenderedStyle(useCache); - } - } - this.updateCompoundBounds(!options.useCache); - for (var _i = 0; _i < eles.length; _i++) { - var _ele = eles[_i]; - updateBoundsFromBox(bounds, cachedBoundingBoxImpl(_ele, opts)); - } - } - bounds.x1 = noninf(bounds.x1); - bounds.y1 = noninf(bounds.y1); - bounds.x2 = noninf(bounds.x2); - bounds.y2 = noninf(bounds.y2); - bounds.w = noninf(bounds.x2 - bounds.x1); - bounds.h = noninf(bounds.y2 - bounds.y1); - return bounds; -}; -elesfn$b.dirtyBoundingBoxCache = function () { - for (var i = 0; i < this.length; i++) { - var _p = this[i]._private; - _p.bbCache = null; - _p.bbCachePosKey = null; - _p.bodyBounds = null; - _p.overlayBounds = null; - _p.labelBounds.all = null; - _p.labelBounds.source = null; - _p.labelBounds.target = null; - _p.labelBounds.main = null; - _p.labelBounds.sourceRot = null; - _p.labelBounds.targetRot = null; - _p.labelBounds.mainRot = null; - _p.arrowBounds.source = null; - _p.arrowBounds.target = null; - _p.arrowBounds['mid-source'] = null; - _p.arrowBounds['mid-target'] = null; - } - this.emitAndNotify('bounds'); - return this; -}; - -// private helper to get bounding box for custom node positions -// - good for perf in certain cases but currently requires dirtying the rendered style -// - would be better to not modify the nodes but the nodes are read directly everywhere in the renderer... -// - try to use for only things like discrete layouts where the node position would change anyway -elesfn$b.boundingBoxAt = function (fn) { - var nodes = this.nodes(); - var cy = this.cy(); - var hasCompoundNodes = cy.hasCompoundNodes(); - var parents = cy.collection(); - if (hasCompoundNodes) { - parents = nodes.filter(function (node) { - return node.isParent(); - }); - nodes = nodes.not(parents); - } - if (plainObject(fn)) { - var obj = fn; - fn = function fn() { - return obj; - }; - } - var storeOldPos = function storeOldPos(node, i) { - return node._private.bbAtOldPos = fn(node, i); - }; - var getOldPos = function getOldPos(node) { - return node._private.bbAtOldPos; - }; - cy.startBatch(); - nodes.forEach(storeOldPos).silentPositions(fn); - if (hasCompoundNodes) { - parents.dirtyCompoundBoundsCache(); - parents.dirtyBoundingBoxCache(); - parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle - } - - var bb = copyBoundingBox(this.boundingBox({ - useCache: false - })); - nodes.silentPositions(getOldPos); - if (hasCompoundNodes) { - parents.dirtyCompoundBoundsCache(); - parents.dirtyBoundingBoxCache(); - parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle - } - - cy.endBatch(); - return bb; -}; -fn$3.boundingbox = fn$3.bb = fn$3.boundingBox; -fn$3.renderedBoundingbox = fn$3.renderedBoundingBox; -var bounds = elesfn$b; - -var fn$2, elesfn$a; -fn$2 = elesfn$a = {}; -var defineDimFns = function defineDimFns(opts) { - opts.uppercaseName = capitalize(opts.name); - opts.autoName = 'auto' + opts.uppercaseName; - opts.labelName = 'label' + opts.uppercaseName; - opts.outerName = 'outer' + opts.uppercaseName; - opts.uppercaseOuterName = capitalize(opts.outerName); - fn$2[opts.name] = function dimImpl() { - var ele = this[0]; - var _p = ele._private; - var cy = _p.cy; - var styleEnabled = cy._private.styleEnabled; - if (ele) { - if (styleEnabled) { - if (ele.isParent()) { - ele.updateCompoundBounds(); - return _p[opts.autoName] || 0; - } - var d = ele.pstyle(opts.name); - switch (d.strValue) { - case 'label': - ele.recalculateRenderedStyle(); - return _p.rstyle[opts.labelName] || 0; - default: - return d.pfValue; - } - } else { - return 1; - } - } - }; - fn$2['outer' + opts.uppercaseName] = function outerDimImpl() { - var ele = this[0]; - var _p = ele._private; - var cy = _p.cy; - var styleEnabled = cy._private.styleEnabled; - if (ele) { - if (styleEnabled) { - var dim = ele[opts.name](); - var border = ele.pstyle('border-width').pfValue; // n.b. 1/2 each side - var padding = 2 * ele.padding(); - return dim + border + padding; - } else { - return 1; - } - } - }; - fn$2['rendered' + opts.uppercaseName] = function renderedDimImpl() { - var ele = this[0]; - if (ele) { - var d = ele[opts.name](); - return d * this.cy().zoom(); - } - }; - fn$2['rendered' + opts.uppercaseOuterName] = function renderedOuterDimImpl() { - var ele = this[0]; - if (ele) { - var od = ele[opts.outerName](); - return od * this.cy().zoom(); - } - }; -}; -defineDimFns({ - name: 'width' -}); -defineDimFns({ - name: 'height' -}); -elesfn$a.padding = function () { - var ele = this[0]; - var _p = ele._private; - if (ele.isParent()) { - ele.updateCompoundBounds(); - if (_p.autoPadding !== undefined) { - return _p.autoPadding; - } else { - return ele.pstyle('padding').pfValue; - } - } else { - return ele.pstyle('padding').pfValue; - } -}; -elesfn$a.paddedHeight = function () { - var ele = this[0]; - return ele.height() + 2 * ele.padding(); -}; -elesfn$a.paddedWidth = function () { - var ele = this[0]; - return ele.width() + 2 * ele.padding(); -}; -var widthHeight = elesfn$a; - -var ifEdge = function ifEdge(ele, getValue) { - if (ele.isEdge()) { - return getValue(ele); - } -}; -var ifEdgeRenderedPosition = function ifEdgeRenderedPosition(ele, getPoint) { - if (ele.isEdge()) { - var cy = ele.cy(); - return modelToRenderedPosition(getPoint(ele), cy.zoom(), cy.pan()); - } -}; -var ifEdgeRenderedPositions = function ifEdgeRenderedPositions(ele, getPoints) { - if (ele.isEdge()) { - var cy = ele.cy(); - var pan = cy.pan(); - var zoom = cy.zoom(); - return getPoints(ele).map(function (p) { - return modelToRenderedPosition(p, zoom, pan); - }); - } -}; -var controlPoints = function controlPoints(ele) { - return ele.renderer().getControlPoints(ele); -}; -var segmentPoints = function segmentPoints(ele) { - return ele.renderer().getSegmentPoints(ele); -}; -var sourceEndpoint = function sourceEndpoint(ele) { - return ele.renderer().getSourceEndpoint(ele); -}; -var targetEndpoint = function targetEndpoint(ele) { - return ele.renderer().getTargetEndpoint(ele); -}; -var midpoint = function midpoint(ele) { - return ele.renderer().getEdgeMidpoint(ele); -}; -var pts = { - controlPoints: { - get: controlPoints, - mult: true - }, - segmentPoints: { - get: segmentPoints, - mult: true - }, - sourceEndpoint: { - get: sourceEndpoint - }, - targetEndpoint: { - get: targetEndpoint - }, - midpoint: { - get: midpoint - } -}; -var renderedName = function renderedName(name) { - return 'rendered' + name[0].toUpperCase() + name.substr(1); -}; -var edgePoints = Object.keys(pts).reduce(function (obj, name) { - var spec = pts[name]; - var rName = renderedName(name); - obj[name] = function () { - return ifEdge(this, spec.get); - }; - if (spec.mult) { - obj[rName] = function () { - return ifEdgeRenderedPositions(this, spec.get); - }; - } else { - obj[rName] = function () { - return ifEdgeRenderedPosition(this, spec.get); - }; - } - return obj; -}, {}); - -var dimensions = extend({}, position, bounds, widthHeight, edgePoints); - -/*! -Event object based on jQuery events, MIT license - -https://jquery.org/license/ -https://tldrlegal.com/license/mit-license -https://github.com/jquery/jquery/blob/master/src/event.js -*/ - -var Event = function Event(src, props) { - this.recycle(src, props); -}; -function returnFalse() { - return false; -} -function returnTrue() { - return true; -} - -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -Event.prototype = { - instanceString: function instanceString() { - return 'event'; - }, - recycle: function recycle(src, props) { - this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = returnFalse; - if (src != null && src.preventDefault) { - // Browser Event object - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse; - } else if (src != null && src.type) { - // Plain object containing all event details - props = src; - } else { - // Event string - this.type = src; - } - - // Put explicitly provided properties onto the event object - if (props != null) { - // more efficient to manually copy fields we use - this.originalEvent = props.originalEvent; - this.type = props.type != null ? props.type : this.type; - this.cy = props.cy; - this.target = props.target; - this.position = props.position; - this.renderedPosition = props.renderedPosition; - this.namespace = props.namespace; - this.layout = props.layout; - } - if (this.cy != null && this.position != null && this.renderedPosition == null) { - // create a rendered position based on the passed position - var pos = this.position; - var zoom = this.cy.zoom(); - var pan = this.cy.pan(); - this.renderedPosition = { - x: pos.x * zoom + pan.x, - y: pos.y * zoom + pan.y - }; - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - }, - preventDefault: function preventDefault() { - this.isDefaultPrevented = returnTrue; - var e = this.originalEvent; - if (!e) { - return; - } - - // if preventDefault exists run it on the original event - if (e.preventDefault) { - e.preventDefault(); - } - }, - stopPropagation: function stopPropagation() { - this.isPropagationStopped = returnTrue; - var e = this.originalEvent; - if (!e) { - return; - } - - // if stopPropagation exists run it on the original event - if (e.stopPropagation) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function stopImmediatePropagation() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - }, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse -}; - -var eventRegex = /^([^.]+)(\.(?:[^.]+))?$/; // regex for matching event strings (e.g. "click.namespace") -var universalNamespace = '.*'; // matches as if no namespace specified and prevents users from unbinding accidentally - -var defaults$8 = { - qualifierCompare: function qualifierCompare(q1, q2) { - return q1 === q2; - }, - eventMatches: function eventMatches( /*context, listener, eventObj*/ - ) { - return true; - }, - addEventFields: function addEventFields( /*context, evt*/ - ) {}, - callbackContext: function callbackContext(context /*, listener, eventObj*/) { - return context; - }, - beforeEmit: function beforeEmit( /* context, listener, eventObj */ - ) {}, - afterEmit: function afterEmit( /* context, listener, eventObj */ - ) {}, - bubble: function bubble( /*context*/ - ) { - return false; - }, - parent: function parent( /*context*/ - ) { - return null; - }, - context: null -}; -var defaultsKeys = Object.keys(defaults$8); -var emptyOpts = {}; -function Emitter() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : emptyOpts; - var context = arguments.length > 1 ? arguments[1] : undefined; - // micro-optimisation vs Object.assign() -- reduces Element instantiation time - for (var i = 0; i < defaultsKeys.length; i++) { - var key = defaultsKeys[i]; - this[key] = opts[key] || defaults$8[key]; - } - this.context = context || this.context; - this.listeners = []; - this.emitting = 0; -} -var p = Emitter.prototype; -var forEachEvent = function forEachEvent(self, handler, events, qualifier, callback, conf, confOverrides) { - if (fn$6(qualifier)) { - callback = qualifier; - qualifier = null; - } - if (confOverrides) { - if (conf == null) { - conf = confOverrides; - } else { - conf = extend({}, conf, confOverrides); - } - } - var eventList = array(events) ? events : events.split(/\s+/); - for (var i = 0; i < eventList.length; i++) { - var evt = eventList[i]; - if (emptyString(evt)) { - continue; - } - var match = evt.match(eventRegex); // type[.namespace] - - if (match) { - var type = match[1]; - var namespace = match[2] ? match[2] : null; - var ret = handler(self, evt, type, namespace, qualifier, callback, conf); - if (ret === false) { - break; - } // allow exiting early - } - } -}; - -var makeEventObj = function makeEventObj(self, obj) { - self.addEventFields(self.context, obj); - return new Event(obj.type, obj); -}; -var forEachEventObj = function forEachEventObj(self, handler, events) { - if (event(events)) { - handler(self, events); - return; - } else if (plainObject(events)) { - handler(self, makeEventObj(self, events)); - return; - } - var eventList = array(events) ? events : events.split(/\s+/); - for (var i = 0; i < eventList.length; i++) { - var evt = eventList[i]; - if (emptyString(evt)) { - continue; - } - var match = evt.match(eventRegex); // type[.namespace] - - if (match) { - var type = match[1]; - var namespace = match[2] ? match[2] : null; - var eventObj = makeEventObj(self, { - type: type, - namespace: namespace, - target: self.context - }); - handler(self, eventObj); - } - } -}; -p.on = p.addListener = function (events, qualifier, callback, conf, confOverrides) { - forEachEvent(this, function (self, event, type, namespace, qualifier, callback, conf) { - if (fn$6(callback)) { - self.listeners.push({ - event: event, - // full event string - callback: callback, - // callback to run - type: type, - // the event type (e.g. 'click') - namespace: namespace, - // the event namespace (e.g. ".foo") - qualifier: qualifier, - // a restriction on whether to match this emitter - conf: conf // additional configuration - }); - } - }, events, qualifier, callback, conf, confOverrides); - return this; -}; -p.one = function (events, qualifier, callback, conf) { - return this.on(events, qualifier, callback, conf, { - one: true - }); -}; -p.removeListener = p.off = function (events, qualifier, callback, conf) { - var _this = this; - if (this.emitting !== 0) { - this.listeners = copyArray(this.listeners); - } - var listeners = this.listeners; - var _loop = function _loop(i) { - var listener = listeners[i]; - forEachEvent(_this, function (self, event, type, namespace, qualifier, callback /*, conf*/) { - if ((listener.type === type || events === '*') && (!namespace && listener.namespace !== '.*' || listener.namespace === namespace) && (!qualifier || self.qualifierCompare(listener.qualifier, qualifier)) && (!callback || listener.callback === callback)) { - listeners.splice(i, 1); - return false; - } - }, events, qualifier, callback, conf); - }; - for (var i = listeners.length - 1; i >= 0; i--) { - _loop(i); - } - return this; -}; -p.removeAllListeners = function () { - return this.removeListener('*'); -}; -p.emit = p.trigger = function (events, extraParams, manualCallback) { - var listeners = this.listeners; - var numListenersBeforeEmit = listeners.length; - this.emitting++; - if (!array(extraParams)) { - extraParams = [extraParams]; - } - forEachEventObj(this, function (self, eventObj) { - if (manualCallback != null) { - listeners = [{ - event: eventObj.event, - type: eventObj.type, - namespace: eventObj.namespace, - callback: manualCallback - }]; - numListenersBeforeEmit = listeners.length; - } - var _loop2 = function _loop2(i) { - var listener = listeners[i]; - if (listener.type === eventObj.type && (!listener.namespace || listener.namespace === eventObj.namespace || listener.namespace === universalNamespace) && self.eventMatches(self.context, listener, eventObj)) { - var args = [eventObj]; - if (extraParams != null) { - push(args, extraParams); - } - self.beforeEmit(self.context, listener, eventObj); - if (listener.conf && listener.conf.one) { - self.listeners = self.listeners.filter(function (l) { - return l !== listener; - }); - } - var context = self.callbackContext(self.context, listener, eventObj); - var ret = listener.callback.apply(context, args); - self.afterEmit(self.context, listener, eventObj); - if (ret === false) { - eventObj.stopPropagation(); - eventObj.preventDefault(); - } - } // if listener matches - }; - for (var i = 0; i < numListenersBeforeEmit; i++) { - _loop2(i); - } // for listener - - if (self.bubble(self.context) && !eventObj.isPropagationStopped()) { - self.parent(self.context).emit(eventObj, extraParams); - } - }, events); - this.emitting--; - return this; -}; - -var emitterOptions$1 = { - qualifierCompare: function qualifierCompare(selector1, selector2) { - if (selector1 == null || selector2 == null) { - return selector1 == null && selector2 == null; - } else { - return selector1.sameText(selector2); - } - }, - eventMatches: function eventMatches(ele, listener, eventObj) { - var selector = listener.qualifier; - if (selector != null) { - return ele !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); - } - return true; - }, - addEventFields: function addEventFields(ele, evt) { - evt.cy = ele.cy(); - evt.target = ele; - }, - callbackContext: function callbackContext(ele, listener, eventObj) { - return listener.qualifier != null ? eventObj.target : ele; - }, - beforeEmit: function beforeEmit(context, listener /*, eventObj*/) { - if (listener.conf && listener.conf.once) { - listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback); - } - }, - bubble: function bubble() { - return true; - }, - parent: function parent(ele) { - return ele.isChild() ? ele.parent() : ele.cy(); - } -}; -var argSelector$1 = function argSelector(arg) { - if (string(arg)) { - return new Selector(arg); - } else { - return arg; - } -}; -var elesfn$9 = { - createEmitter: function createEmitter() { - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - var _p = ele._private; - if (!_p.emitter) { - _p.emitter = new Emitter(emitterOptions$1, ele); - } - } - return this; - }, - emitter: function emitter() { - return this._private.emitter; - }, - on: function on(events, selector, callback) { - var argSel = argSelector$1(selector); - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - ele.emitter().on(events, argSel, callback); - } - return this; - }, - removeListener: function removeListener(events, selector, callback) { - var argSel = argSelector$1(selector); - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - ele.emitter().removeListener(events, argSel, callback); - } - return this; - }, - removeAllListeners: function removeAllListeners() { - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - ele.emitter().removeAllListeners(); - } - return this; - }, - one: function one(events, selector, callback) { - var argSel = argSelector$1(selector); - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - ele.emitter().one(events, argSel, callback); - } - return this; - }, - once: function once(events, selector, callback) { - var argSel = argSelector$1(selector); - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - ele.emitter().on(events, argSel, callback, { - once: true, - onceCollection: this - }); - } - }, - emit: function emit(events, extraParams) { - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - ele.emitter().emit(events, extraParams); - } - return this; - }, - emitAndNotify: function emitAndNotify(event, extraParams) { - // for internal use only - if (this.length === 0) { - return; - } // empty collections don't need to notify anything - - // notify renderer - this.cy().notify(event, this); - this.emit(event, extraParams); - return this; - } -}; -define.eventAliasesOn(elesfn$9); - -var elesfn$8 = { - nodes: function nodes(selector) { - return this.filter(function (ele) { - return ele.isNode(); - }).filter(selector); - }, - edges: function edges(selector) { - return this.filter(function (ele) { - return ele.isEdge(); - }).filter(selector); - }, - // internal helper to get nodes and edges as separate collections with single iteration over elements - byGroup: function byGroup() { - var nodes = this.spawn(); - var edges = this.spawn(); - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - if (ele.isNode()) { - nodes.push(ele); - } else { - edges.push(ele); - } - } - return { - nodes: nodes, - edges: edges - }; - }, - filter: function filter(_filter, thisArg) { - if (_filter === undefined) { - // check this first b/c it's the most common/performant case - return this; - } else if (string(_filter) || elementOrCollection(_filter)) { - return new Selector(_filter).filter(this); - } else if (fn$6(_filter)) { - var filterEles = this.spawn(); - var eles = this; - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - var include = thisArg ? _filter.apply(thisArg, [ele, i, eles]) : _filter(ele, i, eles); - if (include) { - filterEles.push(ele); - } - } - return filterEles; - } - return this.spawn(); // if not handled by above, give 'em an empty collection - }, - - not: function not(toRemove) { - if (!toRemove) { - return this; - } else { - if (string(toRemove)) { - toRemove = this.filter(toRemove); - } - var elements = this.spawn(); - for (var i = 0; i < this.length; i++) { - var element = this[i]; - var remove = toRemove.has(element); - if (!remove) { - elements.push(element); - } - } - return elements; - } - }, - absoluteComplement: function absoluteComplement() { - var cy = this.cy(); - return cy.mutableElements().not(this); - }, - intersect: function intersect(other) { - // if a selector is specified, then filter by it instead - if (string(other)) { - var selector = other; - return this.filter(selector); - } - var elements = this.spawn(); - var col1 = this; - var col2 = other; - var col1Smaller = this.length < other.length; - var colS = col1Smaller ? col1 : col2; - var colL = col1Smaller ? col2 : col1; - for (var i = 0; i < colS.length; i++) { - var ele = colS[i]; - if (colL.has(ele)) { - elements.push(ele); - } - } - return elements; - }, - xor: function xor(other) { - var cy = this._private.cy; - if (string(other)) { - other = cy.$(other); - } - var elements = this.spawn(); - var col1 = this; - var col2 = other; - var add = function add(col, other) { - for (var i = 0; i < col.length; i++) { - var ele = col[i]; - var id = ele._private.data.id; - var inOther = other.hasElementWithId(id); - if (!inOther) { - elements.push(ele); - } - } - }; - add(col1, col2); - add(col2, col1); - return elements; - }, - diff: function diff(other) { - var cy = this._private.cy; - if (string(other)) { - other = cy.$(other); - } - var left = this.spawn(); - var right = this.spawn(); - var both = this.spawn(); - var col1 = this; - var col2 = other; - var add = function add(col, other, retEles) { - for (var i = 0; i < col.length; i++) { - var ele = col[i]; - var id = ele._private.data.id; - var inOther = other.hasElementWithId(id); - if (inOther) { - both.merge(ele); - } else { - retEles.push(ele); - } - } - }; - add(col1, col2, left); - add(col2, col1, right); - return { - left: left, - right: right, - both: both - }; - }, - add: function add(toAdd) { - var cy = this._private.cy; - if (!toAdd) { - return this; - } - if (string(toAdd)) { - var selector = toAdd; - toAdd = cy.mutableElements().filter(selector); - } - var elements = this.spawnSelf(); - for (var i = 0; i < toAdd.length; i++) { - var ele = toAdd[i]; - var add = !this.has(ele); - if (add) { - elements.push(ele); - } - } - return elements; - }, - // in place merge on calling collection - merge: function merge(toAdd) { - var _p = this._private; - var cy = _p.cy; - if (!toAdd) { - return this; - } - if (toAdd && string(toAdd)) { - var selector = toAdd; - toAdd = cy.mutableElements().filter(selector); - } - var map = _p.map; - for (var i = 0; i < toAdd.length; i++) { - var toAddEle = toAdd[i]; - var id = toAddEle._private.data.id; - var add = !map.has(id); - if (add) { - var index = this.length++; - this[index] = toAddEle; - map.set(id, { - ele: toAddEle, - index: index - }); - } - } - return this; // chaining - }, - - unmergeAt: function unmergeAt(i) { - var ele = this[i]; - var id = ele.id(); - var _p = this._private; - var map = _p.map; - - // remove ele - this[i] = undefined; - map["delete"](id); - var unmergedLastEle = i === this.length - 1; - - // replace empty spot with last ele in collection - if (this.length > 1 && !unmergedLastEle) { - var lastEleI = this.length - 1; - var lastEle = this[lastEleI]; - var lastEleId = lastEle._private.data.id; - this[lastEleI] = undefined; - this[i] = lastEle; - map.set(lastEleId, { - ele: lastEle, - index: i - }); - } - - // the collection is now 1 ele smaller - this.length--; - return this; - }, - // remove single ele in place in calling collection - unmergeOne: function unmergeOne(ele) { - ele = ele[0]; - var _p = this._private; - var id = ele._private.data.id; - var map = _p.map; - var entry = map.get(id); - if (!entry) { - return this; // no need to remove - } - - var i = entry.index; - this.unmergeAt(i); - return this; - }, - // remove eles in place on calling collection - unmerge: function unmerge(toRemove) { - var cy = this._private.cy; - if (!toRemove) { - return this; - } - if (toRemove && string(toRemove)) { - var selector = toRemove; - toRemove = cy.mutableElements().filter(selector); - } - for (var i = 0; i < toRemove.length; i++) { - this.unmergeOne(toRemove[i]); - } - return this; // chaining - }, - - unmergeBy: function unmergeBy(toRmFn) { - for (var i = this.length - 1; i >= 0; i--) { - var ele = this[i]; - if (toRmFn(ele)) { - this.unmergeAt(i); - } - } - return this; - }, - map: function map(mapFn, thisArg) { - var arr = []; - var eles = this; - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - var ret = thisArg ? mapFn.apply(thisArg, [ele, i, eles]) : mapFn(ele, i, eles); - arr.push(ret); - } - return arr; - }, - reduce: function reduce(fn, initialValue) { - var val = initialValue; - var eles = this; - for (var i = 0; i < eles.length; i++) { - val = fn(val, eles[i], i, eles); - } - return val; - }, - max: function max(valFn, thisArg) { - var max = -Infinity; - var maxEle; - var eles = this; - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); - if (val > max) { - max = val; - maxEle = ele; - } - } - return { - value: max, - ele: maxEle - }; - }, - min: function min(valFn, thisArg) { - var min = Infinity; - var minEle; - var eles = this; - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); - if (val < min) { - min = val; - minEle = ele; - } - } - return { - value: min, - ele: minEle - }; - } -}; - -// aliases -var fn$1 = elesfn$8; -fn$1['u'] = fn$1['|'] = fn$1['+'] = fn$1.union = fn$1.or = fn$1.add; -fn$1['\\'] = fn$1['!'] = fn$1['-'] = fn$1.difference = fn$1.relativeComplement = fn$1.subtract = fn$1.not; -fn$1['n'] = fn$1['&'] = fn$1['.'] = fn$1.and = fn$1.intersection = fn$1.intersect; -fn$1['^'] = fn$1['(+)'] = fn$1['(-)'] = fn$1.symmetricDifference = fn$1.symdiff = fn$1.xor; -fn$1.fnFilter = fn$1.filterFn = fn$1.stdFilter = fn$1.filter; -fn$1.complement = fn$1.abscomp = fn$1.absoluteComplement; - -var elesfn$7 = { - isNode: function isNode() { - return this.group() === 'nodes'; - }, - isEdge: function isEdge() { - return this.group() === 'edges'; - }, - isLoop: function isLoop() { - return this.isEdge() && this.source()[0] === this.target()[0]; - }, - isSimple: function isSimple() { - return this.isEdge() && this.source()[0] !== this.target()[0]; - }, - group: function group() { - var ele = this[0]; - if (ele) { - return ele._private.group; - } - } -}; - -/** - * Elements are drawn in a specific order based on compound depth (low to high), the element type (nodes above edges), - * and z-index (low to high). These styles affect how this applies: - * - * z-compound-depth: May be `bottom | orphan | auto | top`. The first drawn is `bottom`, then `orphan` which is the - * same depth as the root of the compound graph, followed by the default value `auto` which draws in order from - * root to leaves of the compound graph. The last drawn is `top`. - * z-index-compare: May be `auto | manual`. The default value is `auto` which always draws edges under nodes. - * `manual` ignores this convention and draws based on the `z-index` value setting. - * z-index: An integer value that affects the relative draw order of elements. In general, an element with a higher - * `z-index` will be drawn on top of an element with a lower `z-index`. - */ -var zIndexSort = function zIndexSort(a, b) { - var cy = a.cy(); - var hasCompoundNodes = cy.hasCompoundNodes(); - function getDepth(ele) { - var style = ele.pstyle('z-compound-depth'); - if (style.value === 'auto') { - return hasCompoundNodes ? ele.zDepth() : 0; - } else if (style.value === 'bottom') { - return -1; - } else if (style.value === 'top') { - return MAX_INT$1; - } - // 'orphan' - return 0; - } - var depthDiff = getDepth(a) - getDepth(b); - if (depthDiff !== 0) { - return depthDiff; - } - function getEleDepth(ele) { - var style = ele.pstyle('z-index-compare'); - if (style.value === 'auto') { - return ele.isNode() ? 1 : 0; - } - // 'manual' - return 0; - } - var eleDiff = getEleDepth(a) - getEleDepth(b); - if (eleDiff !== 0) { - return eleDiff; - } - var zDiff = a.pstyle('z-index').value - b.pstyle('z-index').value; - if (zDiff !== 0) { - return zDiff; - } - // compare indices in the core (order added to graph w/ last on top) - return a.poolIndex() - b.poolIndex(); -}; - -var elesfn$6 = { - forEach: function forEach(fn, thisArg) { - if (fn$6(fn)) { - var N = this.length; - for (var i = 0; i < N; i++) { - var ele = this[i]; - var ret = thisArg ? fn.apply(thisArg, [ele, i, this]) : fn(ele, i, this); - if (ret === false) { - break; - } // exit each early on return false - } - } - - return this; - }, - toArray: function toArray() { - var array = []; - for (var i = 0; i < this.length; i++) { - array.push(this[i]); - } - return array; - }, - slice: function slice(start, end) { - var array = []; - var thisSize = this.length; - if (end == null) { - end = thisSize; - } - if (start == null) { - start = 0; - } - if (start < 0) { - start = thisSize + start; - } - if (end < 0) { - end = thisSize + end; - } - for (var i = start; i >= 0 && i < end && i < thisSize; i++) { - array.push(this[i]); - } - return this.spawn(array); - }, - size: function size() { - return this.length; - }, - eq: function eq(i) { - return this[i] || this.spawn(); - }, - first: function first() { - return this[0] || this.spawn(); - }, - last: function last() { - return this[this.length - 1] || this.spawn(); - }, - empty: function empty() { - return this.length === 0; - }, - nonempty: function nonempty() { - return !this.empty(); - }, - sort: function sort(sortFn) { - if (!fn$6(sortFn)) { - return this; - } - var sorted = this.toArray().sort(sortFn); - return this.spawn(sorted); - }, - sortByZIndex: function sortByZIndex() { - return this.sort(zIndexSort); - }, - zDepth: function zDepth() { - var ele = this[0]; - if (!ele) { - return undefined; - } - - // let cy = ele.cy(); - var _p = ele._private; - var group = _p.group; - if (group === 'nodes') { - var depth = _p.data.parent ? ele.parents().size() : 0; - if (!ele.isParent()) { - return MAX_INT$1 - 1; // childless nodes always on top - } - - return depth; - } else { - var src = _p.source; - var tgt = _p.target; - var srcDepth = src.zDepth(); - var tgtDepth = tgt.zDepth(); - return Math.max(srcDepth, tgtDepth, 0); // depth of deepest parent - } - } -}; - -elesfn$6.each = elesfn$6.forEach; -var defineSymbolIterator = function defineSymbolIterator() { - var typeofUndef = "undefined" ; - var isIteratorSupported = (typeof Symbol === "undefined" ? "undefined" : _typeof(Symbol)) != typeofUndef && _typeof(Symbol.iterator) != typeofUndef; // eslint-disable-line no-undef - - if (isIteratorSupported) { - elesfn$6[Symbol.iterator] = function () { - var _this = this; - // eslint-disable-line no-undef - var entry = { - value: undefined, - done: false - }; - var i = 0; - var length = this.length; - return _defineProperty({ - next: function next() { - if (i < length) { - entry.value = _this[i++]; - } else { - entry.value = undefined; - entry.done = true; - } - return entry; - } - }, Symbol.iterator, function () { - // eslint-disable-line no-undef - return this; - }); - }; - } -}; -defineSymbolIterator(); - -var getLayoutDimensionOptions = defaults$g({ - nodeDimensionsIncludeLabels: false -}); -var elesfn$5 = { - // Calculates and returns node dimensions { x, y } based on options given - layoutDimensions: function layoutDimensions(options) { - options = getLayoutDimensionOptions(options); - var dims; - if (!this.takesUpSpace()) { - dims = { - w: 0, - h: 0 - }; - } else if (options.nodeDimensionsIncludeLabels) { - var bbDim = this.boundingBox(); - dims = { - w: bbDim.w, - h: bbDim.h - }; - } else { - dims = { - w: this.outerWidth(), - h: this.outerHeight() - }; - } - - // sanitise the dimensions for external layouts (avoid division by zero) - if (dims.w === 0 || dims.h === 0) { - dims.w = dims.h = 1; - } - return dims; - }, - // using standard layout options, apply position function (w/ or w/o animation) - layoutPositions: function layoutPositions(layout, options, fn) { - var nodes = this.nodes().filter(function (n) { - return !n.isParent(); - }); - var cy = this.cy(); - var layoutEles = options.eles; // nodes & edges - var getMemoizeKey = function getMemoizeKey(node) { - return node.id(); - }; - var fnMem = memoize(fn, getMemoizeKey); // memoized version of position function - - layout.emit({ - type: 'layoutstart', - layout: layout - }); - layout.animations = []; - var calculateSpacing = function calculateSpacing(spacing, nodesBb, pos) { - var center = { - x: nodesBb.x1 + nodesBb.w / 2, - y: nodesBb.y1 + nodesBb.h / 2 - }; - var spacingVector = { - // scale from center of bounding box (not necessarily 0,0) - x: (pos.x - center.x) * spacing, - y: (pos.y - center.y) * spacing - }; - return { - x: center.x + spacingVector.x, - y: center.y + spacingVector.y - }; - }; - var useSpacingFactor = options.spacingFactor && options.spacingFactor !== 1; - var spacingBb = function spacingBb() { - if (!useSpacingFactor) { - return null; - } - var bb = makeBoundingBox(); - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - var pos = fnMem(node, i); - expandBoundingBoxByPoint(bb, pos.x, pos.y); - } - return bb; - }; - var bb = spacingBb(); - var getFinalPos = memoize(function (node, i) { - var newPos = fnMem(node, i); - if (useSpacingFactor) { - var spacing = Math.abs(options.spacingFactor); - newPos = calculateSpacing(spacing, bb, newPos); - } - if (options.transform != null) { - newPos = options.transform(node, newPos); - } - return newPos; - }, getMemoizeKey); - if (options.animate) { - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - var newPos = getFinalPos(node, i); - var animateNode = options.animateFilter == null || options.animateFilter(node, i); - if (animateNode) { - var ani = node.animation({ - position: newPos, - duration: options.animationDuration, - easing: options.animationEasing - }); - layout.animations.push(ani); - } else { - node.position(newPos); - } - } - if (options.fit) { - var fitAni = cy.animation({ - fit: { - boundingBox: layoutEles.boundingBoxAt(getFinalPos), - padding: options.padding - }, - duration: options.animationDuration, - easing: options.animationEasing - }); - layout.animations.push(fitAni); - } else if (options.zoom !== undefined && options.pan !== undefined) { - var zoomPanAni = cy.animation({ - zoom: options.zoom, - pan: options.pan, - duration: options.animationDuration, - easing: options.animationEasing - }); - layout.animations.push(zoomPanAni); - } - layout.animations.forEach(function (ani) { - return ani.play(); - }); - layout.one('layoutready', options.ready); - layout.emit({ - type: 'layoutready', - layout: layout - }); - Promise$1.all(layout.animations.map(function (ani) { - return ani.promise(); - })).then(function () { - layout.one('layoutstop', options.stop); - layout.emit({ - type: 'layoutstop', - layout: layout - }); - }); - } else { - nodes.positions(getFinalPos); - if (options.fit) { - cy.fit(options.eles, options.padding); - } - if (options.zoom != null) { - cy.zoom(options.zoom); - } - if (options.pan) { - cy.pan(options.pan); - } - layout.one('layoutready', options.ready); - layout.emit({ - type: 'layoutready', - layout: layout - }); - layout.one('layoutstop', options.stop); - layout.emit({ - type: 'layoutstop', - layout: layout - }); - } - return this; // chaining - }, - - layout: function layout(options) { - var cy = this.cy(); - return cy.makeLayout(extend({}, options, { - eles: this - })); - } -}; - -// aliases: -elesfn$5.createLayout = elesfn$5.makeLayout = elesfn$5.layout; - -function styleCache(key, fn, ele) { - var _p = ele._private; - var cache = _p.styleCache = _p.styleCache || []; - var val; - if ((val = cache[key]) != null) { - return val; - } else { - val = cache[key] = fn(ele); - return val; - } -} -function cacheStyleFunction(key, fn) { - key = hashString(key); - return function cachedStyleFunction(ele) { - return styleCache(key, fn, ele); - }; -} -function cachePrototypeStyleFunction(key, fn) { - key = hashString(key); - var selfFn = function selfFn(ele) { - return fn.call(ele); - }; - return function cachedPrototypeStyleFunction() { - var ele = this[0]; - if (ele) { - return styleCache(key, selfFn, ele); - } - }; -} -var elesfn$4 = { - recalculateRenderedStyle: function recalculateRenderedStyle(useCache) { - var cy = this.cy(); - var renderer = cy.renderer(); - var styleEnabled = cy.styleEnabled(); - if (renderer && styleEnabled) { - renderer.recalculateRenderedStyle(this, useCache); - } - return this; - }, - dirtyStyleCache: function dirtyStyleCache() { - var cy = this.cy(); - var dirty = function dirty(ele) { - return ele._private.styleCache = null; - }; - if (cy.hasCompoundNodes()) { - var eles; - eles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); - eles.merge(eles.connectedEdges()); - eles.forEach(dirty); - } else { - this.forEach(function (ele) { - dirty(ele); - ele.connectedEdges().forEach(dirty); - }); - } - return this; - }, - // fully updates (recalculates) the style for the elements - updateStyle: function updateStyle(notifyRenderer) { - var cy = this._private.cy; - if (!cy.styleEnabled()) { - return this; - } - if (cy.batching()) { - var bEles = cy._private.batchStyleEles; - bEles.merge(this); - return this; // chaining and exit early when batching - } - - var hasCompounds = cy.hasCompoundNodes(); - var updatedEles = this; - notifyRenderer = notifyRenderer || notifyRenderer === undefined ? true : false; - if (hasCompounds) { - // then add everything up and down for compound selector checks - updatedEles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); - } - - // let changedEles = style.apply( updatedEles ); - var changedEles = updatedEles; - if (notifyRenderer) { - changedEles.emitAndNotify('style'); // let renderer know we changed style - } else { - changedEles.emit('style'); // just fire the event - } - - updatedEles.forEach(function (ele) { - return ele._private.styleDirty = true; - }); - return this; // chaining - }, - - // private: clears dirty flag and recalculates style - cleanStyle: function cleanStyle() { - var cy = this.cy(); - if (!cy.styleEnabled()) { - return; - } - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - if (ele._private.styleDirty) { - // n.b. this flag should be set before apply() to avoid potential infinite recursion - ele._private.styleDirty = false; - cy.style().apply(ele); - } - } - }, - // get the internal parsed style object for the specified property - parsedStyle: function parsedStyle(property) { - var includeNonDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var ele = this[0]; - var cy = ele.cy(); - if (!cy.styleEnabled()) { - return; - } - if (ele) { - this.cleanStyle(); - var overriddenStyle = ele._private.style[property]; - if (overriddenStyle != null) { - return overriddenStyle; - } else if (includeNonDefault) { - return cy.style().getDefaultProperty(property); - } else { - return null; - } - } - }, - numericStyle: function numericStyle(property) { - var ele = this[0]; - if (!ele.cy().styleEnabled()) { - return; - } - if (ele) { - var pstyle = ele.pstyle(property); - return pstyle.pfValue !== undefined ? pstyle.pfValue : pstyle.value; - } - }, - numericStyleUnits: function numericStyleUnits(property) { - var ele = this[0]; - if (!ele.cy().styleEnabled()) { - return; - } - if (ele) { - return ele.pstyle(property).units; - } - }, - // get the specified css property as a rendered value (i.e. on-screen value) - // or get the whole rendered style if no property specified (NB doesn't allow setting) - renderedStyle: function renderedStyle(property) { - var cy = this.cy(); - if (!cy.styleEnabled()) { - return this; - } - var ele = this[0]; - if (ele) { - return cy.style().getRenderedStyle(ele, property); - } - }, - // read the calculated css style of the element or override the style (via a bypass) - style: function style(name, value) { - var cy = this.cy(); - if (!cy.styleEnabled()) { - return this; - } - var updateTransitions = false; - var style = cy.style(); - if (plainObject(name)) { - // then extend the bypass - var props = name; - style.applyBypass(this, props, updateTransitions); - this.emitAndNotify('style'); // let the renderer know we've updated style - } else if (string(name)) { - if (value === undefined) { - // then get the property from the style - var ele = this[0]; - if (ele) { - return style.getStylePropertyValue(ele, name); - } else { - // empty collection => can't get any value - return; - } - } else { - // then set the bypass with the property value - style.applyBypass(this, name, value, updateTransitions); - this.emitAndNotify('style'); // let the renderer know we've updated style - } - } else if (name === undefined) { - var _ele = this[0]; - if (_ele) { - return style.getRawStyle(_ele); - } else { - // empty collection => can't get any value - return; - } - } - return this; // chaining - }, - - removeStyle: function removeStyle(names) { - var cy = this.cy(); - if (!cy.styleEnabled()) { - return this; - } - var updateTransitions = false; - var style = cy.style(); - var eles = this; - if (names === undefined) { - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - style.removeAllBypasses(ele, updateTransitions); - } - } else { - names = names.split(/\s+/); - for (var _i = 0; _i < eles.length; _i++) { - var _ele2 = eles[_i]; - style.removeBypasses(_ele2, names, updateTransitions); - } - } - this.emitAndNotify('style'); // let the renderer know we've updated style - - return this; // chaining - }, - - show: function show() { - this.css('display', 'element'); - return this; // chaining - }, - - hide: function hide() { - this.css('display', 'none'); - return this; // chaining - }, - - effectiveOpacity: function effectiveOpacity() { - var cy = this.cy(); - if (!cy.styleEnabled()) { - return 1; - } - var hasCompoundNodes = cy.hasCompoundNodes(); - var ele = this[0]; - if (ele) { - var _p = ele._private; - var parentOpacity = ele.pstyle('opacity').value; - if (!hasCompoundNodes) { - return parentOpacity; - } - var parents = !_p.data.parent ? null : ele.parents(); - if (parents) { - for (var i = 0; i < parents.length; i++) { - var parent = parents[i]; - var opacity = parent.pstyle('opacity').value; - parentOpacity = opacity * parentOpacity; - } - } - return parentOpacity; - } - }, - transparent: function transparent() { - var cy = this.cy(); - if (!cy.styleEnabled()) { - return false; - } - var ele = this[0]; - var hasCompoundNodes = ele.cy().hasCompoundNodes(); - if (ele) { - if (!hasCompoundNodes) { - return ele.pstyle('opacity').value === 0; - } else { - return ele.effectiveOpacity() === 0; - } - } - }, - backgrounding: function backgrounding() { - var cy = this.cy(); - if (!cy.styleEnabled()) { - return false; - } - var ele = this[0]; - return ele._private.backgrounding ? true : false; - } -}; -function checkCompound(ele, parentOk) { - var _p = ele._private; - var parents = _p.data.parent ? ele.parents() : null; - if (parents) { - for (var i = 0; i < parents.length; i++) { - var parent = parents[i]; - if (!parentOk(parent)) { - return false; - } - } - } - return true; -} -function defineDerivedStateFunction(specs) { - var ok = specs.ok; - var edgeOkViaNode = specs.edgeOkViaNode || specs.ok; - var parentOk = specs.parentOk || specs.ok; - return function () { - var cy = this.cy(); - if (!cy.styleEnabled()) { - return true; - } - var ele = this[0]; - var hasCompoundNodes = cy.hasCompoundNodes(); - if (ele) { - var _p = ele._private; - if (!ok(ele)) { - return false; - } - if (ele.isNode()) { - return !hasCompoundNodes || checkCompound(ele, parentOk); - } else { - var src = _p.source; - var tgt = _p.target; - return edgeOkViaNode(src) && (!hasCompoundNodes || checkCompound(src, edgeOkViaNode)) && (src === tgt || edgeOkViaNode(tgt) && (!hasCompoundNodes || checkCompound(tgt, edgeOkViaNode))); - } - } - }; -} -var eleTakesUpSpace = cacheStyleFunction('eleTakesUpSpace', function (ele) { - return ele.pstyle('display').value === 'element' && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true); -}); -elesfn$4.takesUpSpace = cachePrototypeStyleFunction('takesUpSpace', defineDerivedStateFunction({ - ok: eleTakesUpSpace -})); -var eleInteractive = cacheStyleFunction('eleInteractive', function (ele) { - return ele.pstyle('events').value === 'yes' && ele.pstyle('visibility').value === 'visible' && eleTakesUpSpace(ele); -}); -var parentInteractive = cacheStyleFunction('parentInteractive', function (parent) { - return parent.pstyle('visibility').value === 'visible' && eleTakesUpSpace(parent); -}); -elesfn$4.interactive = cachePrototypeStyleFunction('interactive', defineDerivedStateFunction({ - ok: eleInteractive, - parentOk: parentInteractive, - edgeOkViaNode: eleTakesUpSpace -})); -elesfn$4.noninteractive = function () { - var ele = this[0]; - if (ele) { - return !ele.interactive(); - } -}; -var eleVisible = cacheStyleFunction('eleVisible', function (ele) { - return ele.pstyle('visibility').value === 'visible' && ele.pstyle('opacity').pfValue !== 0 && eleTakesUpSpace(ele); -}); -var edgeVisibleViaNode = eleTakesUpSpace; -elesfn$4.visible = cachePrototypeStyleFunction('visible', defineDerivedStateFunction({ - ok: eleVisible, - edgeOkViaNode: edgeVisibleViaNode -})); -elesfn$4.hidden = function () { - var ele = this[0]; - if (ele) { - return !ele.visible(); - } -}; -elesfn$4.isBundledBezier = cachePrototypeStyleFunction('isBundledBezier', function () { - if (!this.cy().styleEnabled()) { - return false; - } - return !this.removed() && this.pstyle('curve-style').value === 'bezier' && this.takesUpSpace(); -}); -elesfn$4.bypass = elesfn$4.css = elesfn$4.style; -elesfn$4.renderedCss = elesfn$4.renderedStyle; -elesfn$4.removeBypass = elesfn$4.removeCss = elesfn$4.removeStyle; -elesfn$4.pstyle = elesfn$4.parsedStyle; - -var elesfn$3 = {}; -function defineSwitchFunction(params) { - return function () { - var args = arguments; - var changedEles = []; - - // e.g. cy.nodes().select( data, handler ) - if (args.length === 2) { - var data = args[0]; - var handler = args[1]; - this.on(params.event, data, handler); - } - - // e.g. cy.nodes().select( handler ) - else if (args.length === 1 && fn$6(args[0])) { - var _handler = args[0]; - this.on(params.event, _handler); - } - - // e.g. cy.nodes().select() - // e.g. (private) cy.nodes().select(['tapselect']) - else if (args.length === 0 || args.length === 1 && array(args[0])) { - var addlEvents = args.length === 1 ? args[0] : null; - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - var able = !params.ableField || ele._private[params.ableField]; - var changed = ele._private[params.field] != params.value; - if (params.overrideAble) { - var overrideAble = params.overrideAble(ele); - if (overrideAble !== undefined) { - able = overrideAble; - if (!overrideAble) { - return this; - } // to save cycles assume not able for all on override - } - } - - if (able) { - ele._private[params.field] = params.value; - if (changed) { - changedEles.push(ele); - } - } - } - var changedColl = this.spawn(changedEles); - changedColl.updateStyle(); // change of state => possible change of style - changedColl.emit(params.event); - if (addlEvents) { - changedColl.emit(addlEvents); - } - } - return this; - }; -} -function defineSwitchSet(params) { - elesfn$3[params.field] = function () { - var ele = this[0]; - if (ele) { - if (params.overrideField) { - var val = params.overrideField(ele); - if (val !== undefined) { - return val; - } - } - return ele._private[params.field]; - } - }; - elesfn$3[params.on] = defineSwitchFunction({ - event: params.on, - field: params.field, - ableField: params.ableField, - overrideAble: params.overrideAble, - value: true - }); - elesfn$3[params.off] = defineSwitchFunction({ - event: params.off, - field: params.field, - ableField: params.ableField, - overrideAble: params.overrideAble, - value: false - }); -} -defineSwitchSet({ - field: 'locked', - overrideField: function overrideField(ele) { - return ele.cy().autolock() ? true : undefined; - }, - on: 'lock', - off: 'unlock' -}); -defineSwitchSet({ - field: 'grabbable', - overrideField: function overrideField(ele) { - return ele.cy().autoungrabify() || ele.pannable() ? false : undefined; - }, - on: 'grabify', - off: 'ungrabify' -}); -defineSwitchSet({ - field: 'selected', - ableField: 'selectable', - overrideAble: function overrideAble(ele) { - return ele.cy().autounselectify() ? false : undefined; - }, - on: 'select', - off: 'unselect' -}); -defineSwitchSet({ - field: 'selectable', - overrideField: function overrideField(ele) { - return ele.cy().autounselectify() ? false : undefined; - }, - on: 'selectify', - off: 'unselectify' -}); -elesfn$3.deselect = elesfn$3.unselect; -elesfn$3.grabbed = function () { - var ele = this[0]; - if (ele) { - return ele._private.grabbed; - } -}; -defineSwitchSet({ - field: 'active', - on: 'activate', - off: 'unactivate' -}); -defineSwitchSet({ - field: 'pannable', - on: 'panify', - off: 'unpanify' -}); -elesfn$3.inactive = function () { - var ele = this[0]; - if (ele) { - return !ele._private.active; - } -}; - -var elesfn$2 = {}; - -// DAG functions -//////////////// - -var defineDagExtremity = function defineDagExtremity(params) { - return function dagExtremityImpl(selector) { - var eles = this; - var ret = []; - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - if (!ele.isNode()) { - continue; - } - var disqualified = false; - var edges = ele.connectedEdges(); - for (var j = 0; j < edges.length; j++) { - var edge = edges[j]; - var src = edge.source(); - var tgt = edge.target(); - if (params.noIncomingEdges && tgt === ele && src !== ele || params.noOutgoingEdges && src === ele && tgt !== ele) { - disqualified = true; - break; - } - } - if (!disqualified) { - ret.push(ele); - } - } - return this.spawn(ret, true).filter(selector); - }; -}; -var defineDagOneHop = function defineDagOneHop(params) { - return function (selector) { - var eles = this; - var oEles = []; - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - if (!ele.isNode()) { - continue; - } - var edges = ele.connectedEdges(); - for (var j = 0; j < edges.length; j++) { - var edge = edges[j]; - var src = edge.source(); - var tgt = edge.target(); - if (params.outgoing && src === ele) { - oEles.push(edge); - oEles.push(tgt); - } else if (params.incoming && tgt === ele) { - oEles.push(edge); - oEles.push(src); - } - } - } - return this.spawn(oEles, true).filter(selector); - }; -}; -var defineDagAllHops = function defineDagAllHops(params) { - return function (selector) { - var eles = this; - var sEles = []; - var sElesIds = {}; - for (;;) { - var next = params.outgoing ? eles.outgoers() : eles.incomers(); - if (next.length === 0) { - break; - } // done if none left - - var newNext = false; - for (var i = 0; i < next.length; i++) { - var n = next[i]; - var nid = n.id(); - if (!sElesIds[nid]) { - sElesIds[nid] = true; - sEles.push(n); - newNext = true; - } - } - if (!newNext) { - break; - } // done if touched all outgoers already - - eles = next; - } - return this.spawn(sEles, true).filter(selector); - }; -}; -elesfn$2.clearTraversalCache = function () { - for (var i = 0; i < this.length; i++) { - this[i]._private.traversalCache = null; - } -}; -extend(elesfn$2, { - // get the root nodes in the DAG - roots: defineDagExtremity({ - noIncomingEdges: true - }), - // get the leaf nodes in the DAG - leaves: defineDagExtremity({ - noOutgoingEdges: true - }), - // normally called children in graph theory - // these nodes =edges=> outgoing nodes - outgoers: cache(defineDagOneHop({ - outgoing: true - }), 'outgoers'), - // aka DAG descendants - successors: defineDagAllHops({ - outgoing: true - }), - // normally called parents in graph theory - // these nodes <=edges= incoming nodes - incomers: cache(defineDagOneHop({ - incoming: true - }), 'incomers'), - // aka DAG ancestors - predecessors: defineDagAllHops({ - incoming: true - }) -}); - -// Neighbourhood functions -////////////////////////// - -extend(elesfn$2, { - neighborhood: cache(function (selector) { - var elements = []; - var nodes = this.nodes(); - for (var i = 0; i < nodes.length; i++) { - // for all nodes - var node = nodes[i]; - var connectedEdges = node.connectedEdges(); - - // for each connected edge, add the edge and the other node - for (var j = 0; j < connectedEdges.length; j++) { - var edge = connectedEdges[j]; - var src = edge.source(); - var tgt = edge.target(); - var otherNode = node === src ? tgt : src; - - // need check in case of loop - if (otherNode.length > 0) { - elements.push(otherNode[0]); // add node 1 hop away - } - - // add connected edge - elements.push(edge[0]); - } - } - return this.spawn(elements, true).filter(selector); - }, 'neighborhood'), - closedNeighborhood: function closedNeighborhood(selector) { - return this.neighborhood().add(this).filter(selector); - }, - openNeighborhood: function openNeighborhood(selector) { - return this.neighborhood(selector); - } -}); - -// aliases -elesfn$2.neighbourhood = elesfn$2.neighborhood; -elesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood; -elesfn$2.openNeighbourhood = elesfn$2.openNeighborhood; - -// Edge functions -///////////////// - -extend(elesfn$2, { - source: cache(function sourceImpl(selector) { - var ele = this[0]; - var src; - if (ele) { - src = ele._private.source || ele.cy().collection(); - } - return src && selector ? src.filter(selector) : src; - }, 'source'), - target: cache(function targetImpl(selector) { - var ele = this[0]; - var tgt; - if (ele) { - tgt = ele._private.target || ele.cy().collection(); - } - return tgt && selector ? tgt.filter(selector) : tgt; - }, 'target'), - sources: defineSourceFunction({ - attr: 'source' - }), - targets: defineSourceFunction({ - attr: 'target' - }) -}); -function defineSourceFunction(params) { - return function sourceImpl(selector) { - var sources = []; - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - var src = ele._private[params.attr]; - if (src) { - sources.push(src); - } - } - return this.spawn(sources, true).filter(selector); - }; -} -extend(elesfn$2, { - edgesWith: cache(defineEdgesWithFunction(), 'edgesWith'), - edgesTo: cache(defineEdgesWithFunction({ - thisIsSrc: true - }), 'edgesTo') -}); -function defineEdgesWithFunction(params) { - return function edgesWithImpl(otherNodes) { - var elements = []; - var cy = this._private.cy; - var p = params || {}; - - // get elements if a selector is specified - if (string(otherNodes)) { - otherNodes = cy.$(otherNodes); - } - for (var h = 0; h < otherNodes.length; h++) { - var edges = otherNodes[h]._private.edges; - for (var i = 0; i < edges.length; i++) { - var edge = edges[i]; - var edgeData = edge._private.data; - var thisToOther = this.hasElementWithId(edgeData.source) && otherNodes.hasElementWithId(edgeData.target); - var otherToThis = otherNodes.hasElementWithId(edgeData.source) && this.hasElementWithId(edgeData.target); - var edgeConnectsThisAndOther = thisToOther || otherToThis; - if (!edgeConnectsThisAndOther) { - continue; - } - if (p.thisIsSrc || p.thisIsTgt) { - if (p.thisIsSrc && !thisToOther) { - continue; - } - if (p.thisIsTgt && !otherToThis) { - continue; - } - } - elements.push(edge); - } - } - return this.spawn(elements, true); - }; -} -extend(elesfn$2, { - connectedEdges: cache(function (selector) { - var retEles = []; - var eles = this; - for (var i = 0; i < eles.length; i++) { - var node = eles[i]; - if (!node.isNode()) { - continue; - } - var edges = node._private.edges; - for (var j = 0; j < edges.length; j++) { - var edge = edges[j]; - retEles.push(edge); - } - } - return this.spawn(retEles, true).filter(selector); - }, 'connectedEdges'), - connectedNodes: cache(function (selector) { - var retEles = []; - var eles = this; - for (var i = 0; i < eles.length; i++) { - var edge = eles[i]; - if (!edge.isEdge()) { - continue; - } - retEles.push(edge.source()[0]); - retEles.push(edge.target()[0]); - } - return this.spawn(retEles, true).filter(selector); - }, 'connectedNodes'), - parallelEdges: cache(defineParallelEdgesFunction(), 'parallelEdges'), - codirectedEdges: cache(defineParallelEdgesFunction({ - codirected: true - }), 'codirectedEdges') -}); -function defineParallelEdgesFunction(params) { - var defaults = { - codirected: false - }; - params = extend({}, defaults, params); - return function parallelEdgesImpl(selector) { - // micro-optimised for renderer - var elements = []; - var edges = this.edges(); - var p = params; - - // look at all the edges in the collection - for (var i = 0; i < edges.length; i++) { - var edge1 = edges[i]; - var edge1_p = edge1._private; - var src1 = edge1_p.source; - var srcid1 = src1._private.data.id; - var tgtid1 = edge1_p.data.target; - var srcEdges1 = src1._private.edges; - - // look at edges connected to the src node of this edge - for (var j = 0; j < srcEdges1.length; j++) { - var edge2 = srcEdges1[j]; - var edge2data = edge2._private.data; - var tgtid2 = edge2data.target; - var srcid2 = edge2data.source; - var codirected = tgtid2 === tgtid1 && srcid2 === srcid1; - var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2; - if (p.codirected && codirected || !p.codirected && (codirected || oppdirected)) { - elements.push(edge2); - } - } - } - return this.spawn(elements, true).filter(selector); - }; -} - -// Misc functions -///////////////// - -extend(elesfn$2, { - components: function components(root) { - var self = this; - var cy = self.cy(); - var visited = cy.collection(); - var unvisited = root == null ? self.nodes() : root.nodes(); - var components = []; - if (root != null && unvisited.empty()) { - // root may contain only edges - unvisited = root.sources(); // doesn't matter which node to use (undirected), so just use the source sides - } - - var visitInComponent = function visitInComponent(node, component) { - visited.merge(node); - unvisited.unmerge(node); - component.merge(node); - }; - if (unvisited.empty()) { - return self.spawn(); - } - var _loop = function _loop() { - // each iteration yields a component - var cmpt = cy.collection(); - components.push(cmpt); - var root = unvisited[0]; - visitInComponent(root, cmpt); - self.bfs({ - directed: false, - roots: root, - visit: function visit(v) { - return visitInComponent(v, cmpt); - } - }); - cmpt.forEach(function (node) { - node.connectedEdges().forEach(function (e) { - // connectedEdges() usually cached - if (self.has(e) && cmpt.has(e.source()) && cmpt.has(e.target())) { - // has() is cheap - cmpt.merge(e); // forEach() only considers nodes -- sets N at call time - } - }); - }); - }; - do { - _loop(); - } while (unvisited.length > 0); - return components; - }, - component: function component() { - var ele = this[0]; - return ele.cy().mutableElements().components(ele)[0]; - } -}); -elesfn$2.componentsOf = elesfn$2.components; - -// represents a set of nodes, edges, or both together -var Collection = function Collection(cy, elements) { - var unique = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var removed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - if (cy === undefined) { - error('A collection must have a reference to the core'); - return; - } - var map = new Map$1(); - var createdElements = false; - if (!elements) { - elements = []; - } else if (elements.length > 0 && plainObject(elements[0]) && !element(elements[0])) { - createdElements = true; - - // make elements from json and restore all at once later - var eles = []; - var elesIds = new Set$1(); - for (var i = 0, l = elements.length; i < l; i++) { - var json = elements[i]; - if (json.data == null) { - json.data = {}; - } - var _data = json.data; - - // make sure newly created elements have valid ids - if (_data.id == null) { - _data.id = uuid(); - } else if (cy.hasElementWithId(_data.id) || elesIds.has(_data.id)) { - continue; // can't create element if prior id already exists - } - - var ele = new Element(cy, json, false); - eles.push(ele); - elesIds.add(_data.id); - } - elements = eles; - } - this.length = 0; - for (var _i = 0, _l = elements.length; _i < _l; _i++) { - var element$1 = elements[_i][0]; // [0] in case elements is an array of collections, rather than array of elements - if (element$1 == null) { - continue; - } - var id = element$1._private.data.id; - if (!unique || !map.has(id)) { - if (unique) { - map.set(id, { - index: this.length, - ele: element$1 - }); - } - this[this.length] = element$1; - this.length++; - } - } - this._private = { - eles: this, - cy: cy, - get map() { - if (this.lazyMap == null) { - this.rebuildMap(); - } - return this.lazyMap; - }, - set map(m) { - this.lazyMap = m; - }, - rebuildMap: function rebuildMap() { - var m = this.lazyMap = new Map$1(); - var eles = this.eles; - for (var _i2 = 0; _i2 < eles.length; _i2++) { - var _ele = eles[_i2]; - m.set(_ele.id(), { - index: _i2, - ele: _ele - }); - } - } - }; - if (unique) { - this._private.map = map; - } - - // restore the elements if we created them from json - if (createdElements && !removed) { - this.restore(); - } -}; - -// Functions -//////////////////////////////////////////////////////////////////////////////////////////////////// - -// keep the prototypes in sync (an element has the same functions as a collection) -// and use elefn and elesfn as shorthands to the prototypes -var elesfn$1 = Element.prototype = Collection.prototype = Object.create(Array.prototype); -elesfn$1.instanceString = function () { - return 'collection'; -}; -elesfn$1.spawn = function (eles, unique) { - return new Collection(this.cy(), eles, unique); -}; -elesfn$1.spawnSelf = function () { - return this.spawn(this); -}; -elesfn$1.cy = function () { - return this._private.cy; -}; -elesfn$1.renderer = function () { - return this._private.cy.renderer(); -}; -elesfn$1.element = function () { - return this[0]; -}; -elesfn$1.collection = function () { - if (collection(this)) { - return this; - } else { - // an element - return new Collection(this._private.cy, [this]); - } -}; -elesfn$1.unique = function () { - return new Collection(this._private.cy, this, true); -}; -elesfn$1.hasElementWithId = function (id) { - id = '' + id; // id must be string - - return this._private.map.has(id); -}; -elesfn$1.getElementById = function (id) { - id = '' + id; // id must be string - - var cy = this._private.cy; - var entry = this._private.map.get(id); - return entry ? entry.ele : new Collection(cy); // get ele or empty collection -}; - -elesfn$1.$id = elesfn$1.getElementById; -elesfn$1.poolIndex = function () { - var cy = this._private.cy; - var eles = cy._private.elements; - var id = this[0]._private.data.id; - return eles._private.map.get(id).index; -}; -elesfn$1.indexOf = function (ele) { - var id = ele[0]._private.data.id; - return this._private.map.get(id).index; -}; -elesfn$1.indexOfId = function (id) { - id = '' + id; // id must be string - - return this._private.map.get(id).index; -}; -elesfn$1.json = function (obj) { - var ele = this.element(); - var cy = this.cy(); - if (ele == null && obj) { - return this; - } // can't set to no eles - - if (ele == null) { - return undefined; - } // can't get from no eles - - var p = ele._private; - if (plainObject(obj)) { - // set - - cy.startBatch(); - if (obj.data) { - ele.data(obj.data); - var _data2 = p.data; - if (ele.isEdge()) { - // source and target are immutable via data() - var move = false; - var spec = {}; - var src = obj.data.source; - var tgt = obj.data.target; - if (src != null && src != _data2.source) { - spec.source = '' + src; // id must be string - move = true; - } - if (tgt != null && tgt != _data2.target) { - spec.target = '' + tgt; // id must be string - move = true; - } - if (move) { - ele = ele.move(spec); - } - } else { - // parent is immutable via data() - var newParentValSpecd = ('parent' in obj.data); - var parent = obj.data.parent; - if (newParentValSpecd && (parent != null || _data2.parent != null) && parent != _data2.parent) { - if (parent === undefined) { - // can't set undefined imperatively, so use null - parent = null; - } - if (parent != null) { - parent = '' + parent; // id must be string - } - - ele = ele.move({ - parent: parent - }); - } - } - } - if (obj.position) { - ele.position(obj.position); - } - - // ignore group -- immutable - - var checkSwitch = function checkSwitch(k, trueFnName, falseFnName) { - var obj_k = obj[k]; - if (obj_k != null && obj_k !== p[k]) { - if (obj_k) { - ele[trueFnName](); - } else { - ele[falseFnName](); - } - } - }; - checkSwitch('removed', 'remove', 'restore'); - checkSwitch('selected', 'select', 'unselect'); - checkSwitch('selectable', 'selectify', 'unselectify'); - checkSwitch('locked', 'lock', 'unlock'); - checkSwitch('grabbable', 'grabify', 'ungrabify'); - checkSwitch('pannable', 'panify', 'unpanify'); - if (obj.classes != null) { - ele.classes(obj.classes); - } - cy.endBatch(); - return this; - } else if (obj === undefined) { - // get - - var json = { - data: copy(p.data), - position: copy(p.position), - group: p.group, - removed: p.removed, - selected: p.selected, - selectable: p.selectable, - locked: p.locked, - grabbable: p.grabbable, - pannable: p.pannable, - classes: null - }; - json.classes = ''; - var i = 0; - p.classes.forEach(function (cls) { - return json.classes += i++ === 0 ? cls : ' ' + cls; - }); - return json; - } -}; -elesfn$1.jsons = function () { - var jsons = []; - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - var json = ele.json(); - jsons.push(json); - } - return jsons; -}; -elesfn$1.clone = function () { - var cy = this.cy(); - var elesArr = []; - for (var i = 0; i < this.length; i++) { - var ele = this[i]; - var json = ele.json(); - var clone = new Element(cy, json, false); // NB no restore - - elesArr.push(clone); - } - return new Collection(cy, elesArr); -}; -elesfn$1.copy = elesfn$1.clone; -elesfn$1.restore = function () { - var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - var addToPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var self = this; - var cy = self.cy(); - var cy_p = cy._private; - - // create arrays of nodes and edges, since we need to - // restore the nodes first - var nodes = []; - var edges = []; - var elements; - for (var _i3 = 0, l = self.length; _i3 < l; _i3++) { - var ele = self[_i3]; - if (addToPool && !ele.removed()) { - // don't need to handle this ele - continue; - } - - // keep nodes first in the array and edges after - if (ele.isNode()) { - // put to front of array if node - nodes.push(ele); - } else { - // put to end of array if edge - edges.push(ele); - } - } - elements = nodes.concat(edges); - var i; - var removeFromElements = function removeFromElements() { - elements.splice(i, 1); - i--; - }; - - // now, restore each element - for (i = 0; i < elements.length; i++) { - var _ele2 = elements[i]; - var _private = _ele2._private; - var _data3 = _private.data; - - // the traversal cache should start fresh when ele is added - _ele2.clearTraversalCache(); - - // set id and validate - if (!addToPool && !_private.removed) ; else if (_data3.id === undefined) { - _data3.id = uuid(); - } else if (number$1(_data3.id)) { - _data3.id = '' + _data3.id; // now it's a string - } else if (emptyString(_data3.id) || !string(_data3.id)) { - error('Can not create element with invalid string ID `' + _data3.id + '`'); - - // can't create element if it has empty string as id or non-string id - removeFromElements(); - continue; - } else if (cy.hasElementWithId(_data3.id)) { - error('Can not create second element with ID `' + _data3.id + '`'); - - // can't create element if one already has that id - removeFromElements(); - continue; - } - var id = _data3.id; // id is finalised, now let's keep a ref - - if (_ele2.isNode()) { - // extra checks for nodes - var pos = _private.position; - - // make sure the nodes have a defined position - - if (pos.x == null) { - pos.x = 0; - } - if (pos.y == null) { - pos.y = 0; - } - } - if (_ele2.isEdge()) { - // extra checks for edges - - var edge = _ele2; - var fields = ['source', 'target']; - var fieldsLength = fields.length; - var badSourceOrTarget = false; - for (var j = 0; j < fieldsLength; j++) { - var field = fields[j]; - var val = _data3[field]; - if (number$1(val)) { - val = _data3[field] = '' + _data3[field]; // now string - } - - if (val == null || val === '') { - // can't create if source or target is not defined properly - error('Can not create edge `' + id + '` with unspecified ' + field); - badSourceOrTarget = true; - } else if (!cy.hasElementWithId(val)) { - // can't create edge if one of its nodes doesn't exist - error('Can not create edge `' + id + '` with nonexistant ' + field + ' `' + val + '`'); - badSourceOrTarget = true; - } - } - if (badSourceOrTarget) { - removeFromElements(); - continue; - } // can't create this - - var src = cy.getElementById(_data3.source); - var tgt = cy.getElementById(_data3.target); - - // only one edge in node if loop - if (src.same(tgt)) { - src._private.edges.push(edge); - } else { - src._private.edges.push(edge); - tgt._private.edges.push(edge); - } - edge._private.source = src; - edge._private.target = tgt; - } // if is edge - - // create mock ids / indexes maps for element so it can be used like collections - _private.map = new Map$1(); - _private.map.set(id, { - ele: _ele2, - index: 0 - }); - _private.removed = false; - if (addToPool) { - cy.addToPool(_ele2); - } - } // for each element - - // do compound node sanity checks - for (var _i4 = 0; _i4 < nodes.length; _i4++) { - // each node - var node = nodes[_i4]; - var _data4 = node._private.data; - if (number$1(_data4.parent)) { - // then automake string - _data4.parent = '' + _data4.parent; - } - var parentId = _data4.parent; - var specifiedParent = parentId != null; - if (specifiedParent || node._private.parent) { - var parent = node._private.parent ? cy.collection().merge(node._private.parent) : cy.getElementById(parentId); - if (parent.empty()) { - // non-existant parent; just remove it - _data4.parent = undefined; - } else if (parent[0].removed()) { - warn('Node added with missing parent, reference to parent removed'); - _data4.parent = undefined; - node._private.parent = null; - } else { - var selfAsParent = false; - var ancestor = parent; - while (!ancestor.empty()) { - if (node.same(ancestor)) { - // mark self as parent and remove from data - selfAsParent = true; - _data4.parent = undefined; // remove parent reference - - // exit or we loop forever - break; - } - ancestor = ancestor.parent(); - } - if (!selfAsParent) { - // connect with children - parent[0]._private.children.push(node); - node._private.parent = parent[0]; - - // let the core know we have a compound graph - cy_p.hasCompoundNodes = true; - } - } // else - } // if specified parent - } // for each node - - if (elements.length > 0) { - var restored = elements.length === self.length ? self : new Collection(cy, elements); - for (var _i5 = 0; _i5 < restored.length; _i5++) { - var _ele3 = restored[_i5]; - if (_ele3.isNode()) { - continue; - } - - // adding an edge invalidates the traversal caches for the parallel edges - _ele3.parallelEdges().clearTraversalCache(); - - // adding an edge invalidates the traversal cache for the connected nodes - _ele3.source().clearTraversalCache(); - _ele3.target().clearTraversalCache(); - } - var toUpdateStyle; - if (cy_p.hasCompoundNodes) { - toUpdateStyle = cy.collection().merge(restored).merge(restored.connectedNodes()).merge(restored.parent()); - } else { - toUpdateStyle = restored; - } - toUpdateStyle.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(notifyRenderer); - if (notifyRenderer) { - restored.emitAndNotify('add'); - } else if (addToPool) { - restored.emit('add'); - } - } - return self; // chainability -}; - -elesfn$1.removed = function () { - var ele = this[0]; - return ele && ele._private.removed; -}; -elesfn$1.inside = function () { - var ele = this[0]; - return ele && !ele._private.removed; -}; -elesfn$1.remove = function () { - var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - var removeFromPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var self = this; - var elesToRemove = []; - var elesToRemoveIds = {}; - var cy = self._private.cy; - - // add connected edges - function addConnectedEdges(node) { - var edges = node._private.edges; - for (var i = 0; i < edges.length; i++) { - add(edges[i]); - } - } - - // add descendant nodes - function addChildren(node) { - var children = node._private.children; - for (var i = 0; i < children.length; i++) { - add(children[i]); - } - } - function add(ele) { - var alreadyAdded = elesToRemoveIds[ele.id()]; - if (removeFromPool && ele.removed() || alreadyAdded) { - return; - } else { - elesToRemoveIds[ele.id()] = true; - } - if (ele.isNode()) { - elesToRemove.push(ele); // nodes are removed last - - addConnectedEdges(ele); - addChildren(ele); - } else { - elesToRemove.unshift(ele); // edges are removed first - } - } - - // make the list of elements to remove - // (may be removing more than specified due to connected edges etc) - - for (var i = 0, l = self.length; i < l; i++) { - var ele = self[i]; - add(ele); - } - function removeEdgeRef(node, edge) { - var connectedEdges = node._private.edges; - removeFromArray(connectedEdges, edge); - - // removing an edges invalidates the traversal cache for its nodes - node.clearTraversalCache(); - } - function removeParallelRef(pllEdge) { - // removing an edge invalidates the traversal caches for the parallel edges - pllEdge.clearTraversalCache(); - } - var alteredParents = []; - alteredParents.ids = {}; - function removeChildRef(parent, ele) { - ele = ele[0]; - parent = parent[0]; - var children = parent._private.children; - var pid = parent.id(); - removeFromArray(children, ele); // remove parent => child ref - - ele._private.parent = null; // remove child => parent ref - - if (!alteredParents.ids[pid]) { - alteredParents.ids[pid] = true; - alteredParents.push(parent); - } - } - self.dirtyCompoundBoundsCache(); - if (removeFromPool) { - cy.removeFromPool(elesToRemove); // remove from core pool - } - - for (var _i6 = 0; _i6 < elesToRemove.length; _i6++) { - var _ele4 = elesToRemove[_i6]; - if (_ele4.isEdge()) { - // remove references to this edge in its connected nodes - var src = _ele4.source()[0]; - var tgt = _ele4.target()[0]; - removeEdgeRef(src, _ele4); - removeEdgeRef(tgt, _ele4); - var pllEdges = _ele4.parallelEdges(); - for (var j = 0; j < pllEdges.length; j++) { - var pllEdge = pllEdges[j]; - removeParallelRef(pllEdge); - if (pllEdge.isBundledBezier()) { - pllEdge.dirtyBoundingBoxCache(); - } - } - } else { - // remove reference to parent - var parent = _ele4.parent(); - if (parent.length !== 0) { - removeChildRef(parent, _ele4); - } - } - if (removeFromPool) { - // mark as removed - _ele4._private.removed = true; - } - } - - // check to see if we have a compound graph or not - var elesStillInside = cy._private.elements; - cy._private.hasCompoundNodes = false; - for (var _i7 = 0; _i7 < elesStillInside.length; _i7++) { - var _ele5 = elesStillInside[_i7]; - if (_ele5.isParent()) { - cy._private.hasCompoundNodes = true; - break; - } - } - var removedElements = new Collection(this.cy(), elesToRemove); - if (removedElements.size() > 0) { - // must manually notify since trigger won't do this automatically once removed - - if (notifyRenderer) { - removedElements.emitAndNotify('remove'); - } else if (removeFromPool) { - removedElements.emit('remove'); - } - } - - // the parents who were modified by the removal need their style updated - for (var _i8 = 0; _i8 < alteredParents.length; _i8++) { - var _ele6 = alteredParents[_i8]; - if (!removeFromPool || !_ele6.removed()) { - _ele6.updateStyle(); - } - } - return removedElements; -}; -elesfn$1.move = function (struct) { - var cy = this._private.cy; - var eles = this; - - // just clean up refs, caches, etc. in the same way as when removing and then restoring - // (our calls to remove/restore do not remove from the graph or make events) - var notifyRenderer = false; - var modifyPool = false; - var toString = function toString(id) { - return id == null ? id : '' + id; - }; // id must be string - - if (struct.source !== undefined || struct.target !== undefined) { - var srcId = toString(struct.source); - var tgtId = toString(struct.target); - var srcExists = srcId != null && cy.hasElementWithId(srcId); - var tgtExists = tgtId != null && cy.hasElementWithId(tgtId); - if (srcExists || tgtExists) { - cy.batch(function () { - // avoid duplicate style updates - eles.remove(notifyRenderer, modifyPool); // clean up refs etc. - eles.emitAndNotify('moveout'); - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - var _data5 = ele._private.data; - if (ele.isEdge()) { - if (srcExists) { - _data5.source = srcId; - } - if (tgtExists) { - _data5.target = tgtId; - } - } - } - eles.restore(notifyRenderer, modifyPool); // make new refs, style, etc. - }); - - eles.emitAndNotify('move'); - } - } else if (struct.parent !== undefined) { - // move node to new parent - var parentId = toString(struct.parent); - var parentExists = parentId === null || cy.hasElementWithId(parentId); - if (parentExists) { - var pidToAssign = parentId === null ? undefined : parentId; - cy.batch(function () { - // avoid duplicate style updates - var updated = eles.remove(notifyRenderer, modifyPool); // clean up refs etc. - updated.emitAndNotify('moveout'); - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - var _data6 = ele._private.data; - if (ele.isNode()) { - _data6.parent = pidToAssign; - } - } - updated.restore(notifyRenderer, modifyPool); // make new refs, style, etc. - }); - - eles.emitAndNotify('move'); - } - } - return this; -}; -[elesfn$j, elesfn$i, elesfn$h, elesfn$g, elesfn$f, data, elesfn$d, dimensions, elesfn$9, elesfn$8, elesfn$7, elesfn$6, elesfn$5, elesfn$4, elesfn$3, elesfn$2].forEach(function (props) { - extend(elesfn$1, props); -}); - -var corefn$9 = { - add: function add(opts) { - var elements; - var cy = this; - - // add the elements - if (elementOrCollection(opts)) { - var eles = opts; - if (eles._private.cy === cy) { - // same instance => just restore - elements = eles.restore(); - } else { - // otherwise, copy from json - var jsons = []; - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - jsons.push(ele.json()); - } - elements = new Collection(cy, jsons); - } - } - - // specify an array of options - else if (array(opts)) { - var _jsons = opts; - elements = new Collection(cy, _jsons); - } - - // specify via opts.nodes and opts.edges - else if (plainObject(opts) && (array(opts.nodes) || array(opts.edges))) { - var elesByGroup = opts; - var _jsons2 = []; - var grs = ['nodes', 'edges']; - for (var _i = 0, il = grs.length; _i < il; _i++) { - var group = grs[_i]; - var elesArray = elesByGroup[group]; - if (array(elesArray)) { - for (var j = 0, jl = elesArray.length; j < jl; j++) { - var json = extend({ - group: group - }, elesArray[j]); - _jsons2.push(json); - } - } - } - elements = new Collection(cy, _jsons2); - } - - // specify options for one element - else { - var _json = opts; - elements = new Element(cy, _json).collection(); - } - return elements; - }, - remove: function remove(collection) { - if (elementOrCollection(collection)) ; else if (string(collection)) { - var selector = collection; - collection = this.$(selector); - } - return collection.remove(); - } -}; - -/* global Float32Array */ - -/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ -function generateCubicBezier(mX1, mY1, mX2, mY2) { - var NEWTON_ITERATIONS = 4, - NEWTON_MIN_SLOPE = 0.001, - SUBDIVISION_PRECISION = 0.0000001, - SUBDIVISION_MAX_ITERATIONS = 10, - kSplineTableSize = 11, - kSampleStepSize = 1.0 / (kSplineTableSize - 1.0), - float32ArraySupported = typeof Float32Array !== 'undefined'; - - /* Must contain four arguments. */ - if (arguments.length !== 4) { - return false; - } - - /* Arguments must be numbers. */ - for (var i = 0; i < 4; ++i) { - if (typeof arguments[i] !== "number" || isNaN(arguments[i]) || !isFinite(arguments[i])) { - return false; - } - } - - /* X values must be in the [0, 1] range. */ - mX1 = Math.min(mX1, 1); - mX2 = Math.min(mX2, 1); - mX1 = Math.max(mX1, 0); - mX2 = Math.max(mX2, 0); - var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); - function A(aA1, aA2) { - return 1.0 - 3.0 * aA2 + 3.0 * aA1; - } - function B(aA1, aA2) { - return 3.0 * aA2 - 6.0 * aA1; - } - function C(aA1) { - return 3.0 * aA1; - } - function calcBezier(aT, aA1, aA2) { - return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; - } - function getSlope(aT, aA1, aA2) { - return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); - } - function newtonRaphsonIterate(aX, aGuessT) { - for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) { - var currentSlope = getSlope(aGuessT, mX1, mX2); - if (currentSlope === 0.0) { - return aGuessT; - } - var currentX = calcBezier(aGuessT, mX1, mX2) - aX; - aGuessT -= currentX / currentSlope; - } - return aGuessT; - } - function calcSampleValues() { - for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) { - mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2); - } - } - function binarySubdivide(aX, aA, aB) { - var currentX, - currentT, - i = 0; - do { - currentT = aA + (aB - aA) / 2.0; - currentX = calcBezier(currentT, mX1, mX2) - aX; - if (currentX > 0.0) { - aB = currentT; - } else { - aA = currentT; - } - } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); - return currentT; - } - function getTForX(aX) { - var intervalStart = 0.0, - currentSample = 1, - lastSample = kSplineTableSize - 1; - for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) { - intervalStart += kSampleStepSize; - } - --currentSample; - var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]), - guessForT = intervalStart + dist * kSampleStepSize, - initialSlope = getSlope(guessForT, mX1, mX2); - if (initialSlope >= NEWTON_MIN_SLOPE) { - return newtonRaphsonIterate(aX, guessForT); - } else if (initialSlope === 0.0) { - return guessForT; - } else { - return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize); - } - } - var _precomputed = false; - function precompute() { - _precomputed = true; - if (mX1 !== mY1 || mX2 !== mY2) { - calcSampleValues(); - } - } - var f = function f(aX) { - if (!_precomputed) { - precompute(); - } - if (mX1 === mY1 && mX2 === mY2) { - return aX; - } - if (aX === 0) { - return 0; - } - if (aX === 1) { - return 1; - } - return calcBezier(getTForX(aX), mY1, mY2); - }; - f.getControlPoints = function () { - return [{ - x: mX1, - y: mY1 - }, { - x: mX2, - y: mY2 - }]; - }; - var str = "generateBezier(" + [mX1, mY1, mX2, mY2] + ")"; - f.toString = function () { - return str; - }; - return f; -} - -/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ -/* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass - then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */ -var generateSpringRK4 = function () { - function springAccelerationForState(state) { - return -state.tension * state.x - state.friction * state.v; - } - function springEvaluateStateWithDerivative(initialState, dt, derivative) { - var state = { - x: initialState.x + derivative.dx * dt, - v: initialState.v + derivative.dv * dt, - tension: initialState.tension, - friction: initialState.friction - }; - return { - dx: state.v, - dv: springAccelerationForState(state) - }; - } - function springIntegrateState(state, dt) { - var a = { - dx: state.v, - dv: springAccelerationForState(state) - }, - b = springEvaluateStateWithDerivative(state, dt * 0.5, a), - c = springEvaluateStateWithDerivative(state, dt * 0.5, b), - d = springEvaluateStateWithDerivative(state, dt, c), - dxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx), - dvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv); - state.x = state.x + dxdt * dt; - state.v = state.v + dvdt * dt; - return state; - } - return function springRK4Factory(tension, friction, duration) { - var initState = { - x: -1, - v: 0, - tension: null, - friction: null - }, - path = [0], - time_lapsed = 0, - tolerance = 1 / 10000, - DT = 16 / 1000, - have_duration, - dt, - last_state; - tension = parseFloat(tension) || 500; - friction = parseFloat(friction) || 20; - duration = duration || null; - initState.tension = tension; - initState.friction = friction; - have_duration = duration !== null; - - /* Calculate the actual time it takes for this animation to complete with the provided conditions. */ - if (have_duration) { - /* Run the simulation without a duration. */ - time_lapsed = springRK4Factory(tension, friction); - /* Compute the adjusted time delta. */ - dt = time_lapsed / duration * DT; - } else { - dt = DT; - } - for (;;) { - /* Next/step function .*/ - last_state = springIntegrateState(last_state || initState, dt); - /* Store the position. */ - path.push(1 + last_state.x); - time_lapsed += 16; - /* If the change threshold is reached, break. */ - if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) { - break; - } - } - - /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the - computed path and returns a snapshot of the position according to a given percentComplete. */ - return !have_duration ? time_lapsed : function (percentComplete) { - return path[percentComplete * (path.length - 1) | 0]; - }; - }; -}(); - -var cubicBezier = function cubicBezier(t1, p1, t2, p2) { - var bezier = generateCubicBezier(t1, p1, t2, p2); - return function (start, end, percent) { - return start + (end - start) * bezier(percent); - }; -}; -var easings = { - 'linear': function linear(start, end, percent) { - return start + (end - start) * percent; - }, - // default easings - 'ease': cubicBezier(0.25, 0.1, 0.25, 1), - 'ease-in': cubicBezier(0.42, 0, 1, 1), - 'ease-out': cubicBezier(0, 0, 0.58, 1), - 'ease-in-out': cubicBezier(0.42, 0, 0.58, 1), - // sine - 'ease-in-sine': cubicBezier(0.47, 0, 0.745, 0.715), - 'ease-out-sine': cubicBezier(0.39, 0.575, 0.565, 1), - 'ease-in-out-sine': cubicBezier(0.445, 0.05, 0.55, 0.95), - // quad - 'ease-in-quad': cubicBezier(0.55, 0.085, 0.68, 0.53), - 'ease-out-quad': cubicBezier(0.25, 0.46, 0.45, 0.94), - 'ease-in-out-quad': cubicBezier(0.455, 0.03, 0.515, 0.955), - // cubic - 'ease-in-cubic': cubicBezier(0.55, 0.055, 0.675, 0.19), - 'ease-out-cubic': cubicBezier(0.215, 0.61, 0.355, 1), - 'ease-in-out-cubic': cubicBezier(0.645, 0.045, 0.355, 1), - // quart - 'ease-in-quart': cubicBezier(0.895, 0.03, 0.685, 0.22), - 'ease-out-quart': cubicBezier(0.165, 0.84, 0.44, 1), - 'ease-in-out-quart': cubicBezier(0.77, 0, 0.175, 1), - // quint - 'ease-in-quint': cubicBezier(0.755, 0.05, 0.855, 0.06), - 'ease-out-quint': cubicBezier(0.23, 1, 0.32, 1), - 'ease-in-out-quint': cubicBezier(0.86, 0, 0.07, 1), - // expo - 'ease-in-expo': cubicBezier(0.95, 0.05, 0.795, 0.035), - 'ease-out-expo': cubicBezier(0.19, 1, 0.22, 1), - 'ease-in-out-expo': cubicBezier(1, 0, 0, 1), - // circ - 'ease-in-circ': cubicBezier(0.6, 0.04, 0.98, 0.335), - 'ease-out-circ': cubicBezier(0.075, 0.82, 0.165, 1), - 'ease-in-out-circ': cubicBezier(0.785, 0.135, 0.15, 0.86), - // user param easings... - - 'spring': function spring(tension, friction, duration) { - if (duration === 0) { - // can't get a spring w/ duration 0 - return easings.linear; // duration 0 => jump to end so impl doesn't matter - } - - var spring = generateSpringRK4(tension, friction, duration); - return function (start, end, percent) { - return start + (end - start) * spring(percent); - }; - }, - 'cubic-bezier': cubicBezier -}; - -function getEasedValue(type, start, end, percent, easingFn) { - if (percent === 1) { - return end; - } - if (start === end) { - return end; - } - var val = easingFn(start, end, percent); - if (type == null) { - return val; - } - if (type.roundValue || type.color) { - val = Math.round(val); - } - if (type.min !== undefined) { - val = Math.max(val, type.min); - } - if (type.max !== undefined) { - val = Math.min(val, type.max); - } - return val; -} -function getValue(prop, spec) { - if (prop.pfValue != null || prop.value != null) { - if (prop.pfValue != null && (spec == null || spec.type.units !== '%')) { - return prop.pfValue; - } else { - return prop.value; - } - } else { - return prop; - } -} -function ease(startProp, endProp, percent, easingFn, propSpec) { - var type = propSpec != null ? propSpec.type : null; - if (percent < 0) { - percent = 0; - } else if (percent > 1) { - percent = 1; - } - var start = getValue(startProp, propSpec); - var end = getValue(endProp, propSpec); - if (number$1(start) && number$1(end)) { - return getEasedValue(type, start, end, percent, easingFn); - } else if (array(start) && array(end)) { - var easedArr = []; - for (var i = 0; i < end.length; i++) { - var si = start[i]; - var ei = end[i]; - if (si != null && ei != null) { - var val = getEasedValue(type, si, ei, percent, easingFn); - easedArr.push(val); - } else { - easedArr.push(ei); - } - } - return easedArr; - } - return undefined; -} - -function step$1(self, ani, now, isCore) { - var isEles = !isCore; - var _p = self._private; - var ani_p = ani._private; - var pEasing = ani_p.easing; - var startTime = ani_p.startTime; - var cy = isCore ? self : self.cy(); - var style = cy.style(); - if (!ani_p.easingImpl) { - if (pEasing == null) { - // use default - ani_p.easingImpl = easings['linear']; - } else { - // then define w/ name - var easingVals; - if (string(pEasing)) { - var easingProp = style.parse('transition-timing-function', pEasing); - easingVals = easingProp.value; - } else { - // then assume preparsed array - easingVals = pEasing; - } - var name, args; - if (string(easingVals)) { - name = easingVals; - args = []; - } else { - name = easingVals[1]; - args = easingVals.slice(2).map(function (n) { - return +n; - }); - } - if (args.length > 0) { - // create with args - if (name === 'spring') { - args.push(ani_p.duration); // need duration to generate spring - } - - ani_p.easingImpl = easings[name].apply(null, args); - } else { - // static impl by name - ani_p.easingImpl = easings[name]; - } - } - } - var easing = ani_p.easingImpl; - var percent; - if (ani_p.duration === 0) { - percent = 1; - } else { - percent = (now - startTime) / ani_p.duration; - } - if (ani_p.applying) { - percent = ani_p.progress; - } - if (percent < 0) { - percent = 0; - } else if (percent > 1) { - percent = 1; - } - if (ani_p.delay == null) { - // then update - - var startPos = ani_p.startPosition; - var endPos = ani_p.position; - if (endPos && isEles && !self.locked()) { - var newPos = {}; - if (valid(startPos.x, endPos.x)) { - newPos.x = ease(startPos.x, endPos.x, percent, easing); - } - if (valid(startPos.y, endPos.y)) { - newPos.y = ease(startPos.y, endPos.y, percent, easing); - } - self.position(newPos); - } - var startPan = ani_p.startPan; - var endPan = ani_p.pan; - var pan = _p.pan; - var animatingPan = endPan != null && isCore; - if (animatingPan) { - if (valid(startPan.x, endPan.x)) { - pan.x = ease(startPan.x, endPan.x, percent, easing); - } - if (valid(startPan.y, endPan.y)) { - pan.y = ease(startPan.y, endPan.y, percent, easing); - } - self.emit('pan'); - } - var startZoom = ani_p.startZoom; - var endZoom = ani_p.zoom; - var animatingZoom = endZoom != null && isCore; - if (animatingZoom) { - if (valid(startZoom, endZoom)) { - _p.zoom = bound(_p.minZoom, ease(startZoom, endZoom, percent, easing), _p.maxZoom); - } - self.emit('zoom'); - } - if (animatingPan || animatingZoom) { - self.emit('viewport'); - } - var props = ani_p.style; - if (props && props.length > 0 && isEles) { - for (var i = 0; i < props.length; i++) { - var prop = props[i]; - var _name = prop.name; - var end = prop; - var start = ani_p.startStyle[_name]; - var propSpec = style.properties[start.name]; - var easedVal = ease(start, end, percent, easing, propSpec); - style.overrideBypass(self, _name, easedVal); - } // for props - - self.emit('style'); - } // if - } - - ani_p.progress = percent; - return percent; -} -function valid(start, end) { - if (start == null || end == null) { - return false; - } - if (number$1(start) && number$1(end)) { - return true; - } else if (start && end) { - return true; - } - return false; -} - -function startAnimation(self, ani, now, isCore) { - var ani_p = ani._private; - ani_p.started = true; - ani_p.startTime = now - ani_p.progress * ani_p.duration; -} - -function stepAll(now, cy) { - var eles = cy._private.aniEles; - var doneEles = []; - function stepOne(ele, isCore) { - var _p = ele._private; - var current = _p.animation.current; - var queue = _p.animation.queue; - var ranAnis = false; - - // if nothing currently animating, get something from the queue - if (current.length === 0) { - var next = queue.shift(); - if (next) { - current.push(next); - } - } - var callbacks = function callbacks(_callbacks) { - for (var j = _callbacks.length - 1; j >= 0; j--) { - var cb = _callbacks[j]; - cb(); - } - _callbacks.splice(0, _callbacks.length); - }; - - // step and remove if done - for (var i = current.length - 1; i >= 0; i--) { - var ani = current[i]; - var ani_p = ani._private; - if (ani_p.stopped) { - current.splice(i, 1); - ani_p.hooked = false; - ani_p.playing = false; - ani_p.started = false; - callbacks(ani_p.frames); - continue; - } - if (!ani_p.playing && !ani_p.applying) { - continue; - } - - // an apply() while playing shouldn't do anything - if (ani_p.playing && ani_p.applying) { - ani_p.applying = false; - } - if (!ani_p.started) { - startAnimation(ele, ani, now); - } - step$1(ele, ani, now, isCore); - if (ani_p.applying) { - ani_p.applying = false; - } - callbacks(ani_p.frames); - if (ani_p.step != null) { - ani_p.step(now); - } - if (ani.completed()) { - current.splice(i, 1); - ani_p.hooked = false; - ani_p.playing = false; - ani_p.started = false; - callbacks(ani_p.completes); - } - ranAnis = true; - } - if (!isCore && current.length === 0 && queue.length === 0) { - doneEles.push(ele); - } - return ranAnis; - } // stepElement - - // handle all eles - var ranEleAni = false; - for (var e = 0; e < eles.length; e++) { - var ele = eles[e]; - var handledThisEle = stepOne(ele); - ranEleAni = ranEleAni || handledThisEle; - } // each element - - var ranCoreAni = stepOne(cy, true); - - // notify renderer - if (ranEleAni || ranCoreAni) { - if (eles.length > 0) { - cy.notify('draw', eles); - } else { - cy.notify('draw'); - } - } - - // remove elements from list of currently animating if its queues are empty - eles.unmerge(doneEles); - cy.emit('step'); -} // stepAll - -var corefn$8 = { - // pull in animation functions - animate: define.animate(), - animation: define.animation(), - animated: define.animated(), - clearQueue: define.clearQueue(), - delay: define.delay(), - delayAnimation: define.delayAnimation(), - stop: define.stop(), - addToAnimationPool: function addToAnimationPool(eles) { - var cy = this; - if (!cy.styleEnabled()) { - return; - } // save cycles when no style used - - cy._private.aniEles.merge(eles); - }, - stopAnimationLoop: function stopAnimationLoop() { - this._private.animationsRunning = false; - }, - startAnimationLoop: function startAnimationLoop() { - var cy = this; - cy._private.animationsRunning = true; - if (!cy.styleEnabled()) { - return; - } // save cycles when no style used - - // NB the animation loop will exec in headless environments if style enabled - // and explicit cy.destroy() is necessary to stop the loop - - function headlessStep() { - if (!cy._private.animationsRunning) { - return; - } - requestAnimationFrame(function animationStep(now) { - stepAll(now, cy); - headlessStep(); - }); - } - var renderer = cy.renderer(); - if (renderer && renderer.beforeRender) { - // let the renderer schedule animations - renderer.beforeRender(function rendererAnimationStep(willDraw, now) { - stepAll(now, cy); - }, renderer.beforeRenderPriorities.animations); - } else { - // manage the animation loop ourselves - headlessStep(); // first call - } - } -}; - -var emitterOptions = { - qualifierCompare: function qualifierCompare(selector1, selector2) { - if (selector1 == null || selector2 == null) { - return selector1 == null && selector2 == null; - } else { - return selector1.sameText(selector2); - } - }, - eventMatches: function eventMatches(cy, listener, eventObj) { - var selector = listener.qualifier; - if (selector != null) { - return cy !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); - } - return true; - }, - addEventFields: function addEventFields(cy, evt) { - evt.cy = cy; - evt.target = cy; - }, - callbackContext: function callbackContext(cy, listener, eventObj) { - return listener.qualifier != null ? eventObj.target : cy; - } -}; -var argSelector = function argSelector(arg) { - if (string(arg)) { - return new Selector(arg); - } else { - return arg; - } -}; -var elesfn = { - createEmitter: function createEmitter() { - var _p = this._private; - if (!_p.emitter) { - _p.emitter = new Emitter(emitterOptions, this); - } - return this; - }, - emitter: function emitter() { - return this._private.emitter; - }, - on: function on(events, selector, callback) { - this.emitter().on(events, argSelector(selector), callback); - return this; - }, - removeListener: function removeListener(events, selector, callback) { - this.emitter().removeListener(events, argSelector(selector), callback); - return this; - }, - removeAllListeners: function removeAllListeners() { - this.emitter().removeAllListeners(); - return this; - }, - one: function one(events, selector, callback) { - this.emitter().one(events, argSelector(selector), callback); - return this; - }, - once: function once(events, selector, callback) { - this.emitter().one(events, argSelector(selector), callback); - return this; - }, - emit: function emit(events, extraParams) { - this.emitter().emit(events, extraParams); - return this; - }, - emitAndNotify: function emitAndNotify(event, eles) { - this.emit(event); - this.notify(event, eles); - return this; - } -}; -define.eventAliasesOn(elesfn); - -var corefn$7 = { - png: function png(options) { - var renderer = this._private.renderer; - options = options || {}; - return renderer.png(options); - }, - jpg: function jpg(options) { - var renderer = this._private.renderer; - options = options || {}; - options.bg = options.bg || '#fff'; - return renderer.jpg(options); - } -}; -corefn$7.jpeg = corefn$7.jpg; - -var corefn$6 = { - layout: function layout(options) { - var cy = this; - if (options == null) { - error('Layout options must be specified to make a layout'); - return; - } - if (options.name == null) { - error('A `name` must be specified to make a layout'); - return; - } - var name = options.name; - var Layout = cy.extension('layout', name); - if (Layout == null) { - error('No such layout `' + name + '` found. Did you forget to import it and `cytoscape.use()` it?'); - return; - } - var eles; - if (string(options.eles)) { - eles = cy.$(options.eles); - } else { - eles = options.eles != null ? options.eles : cy.$(); - } - var layout = new Layout(extend({}, options, { - cy: cy, - eles: eles - })); - return layout; - } -}; -corefn$6.createLayout = corefn$6.makeLayout = corefn$6.layout; - -var corefn$5 = { - notify: function notify(eventName, eventEles) { - var _p = this._private; - if (this.batching()) { - _p.batchNotifications = _p.batchNotifications || {}; - var eles = _p.batchNotifications[eventName] = _p.batchNotifications[eventName] || this.collection(); - if (eventEles != null) { - eles.merge(eventEles); - } - return; // notifications are disabled during batching - } - - if (!_p.notificationsEnabled) { - return; - } // exit on disabled - - var renderer = this.renderer(); - - // exit if destroy() called on core or renderer in between frames #1499 #1528 - if (this.destroyed() || !renderer) { - return; - } - renderer.notify(eventName, eventEles); - }, - notifications: function notifications(bool) { - var p = this._private; - if (bool === undefined) { - return p.notificationsEnabled; - } else { - p.notificationsEnabled = bool ? true : false; - } - return this; - }, - noNotifications: function noNotifications(callback) { - this.notifications(false); - callback(); - this.notifications(true); - }, - batching: function batching() { - return this._private.batchCount > 0; - }, - startBatch: function startBatch() { - var _p = this._private; - if (_p.batchCount == null) { - _p.batchCount = 0; - } - if (_p.batchCount === 0) { - _p.batchStyleEles = this.collection(); - _p.batchNotifications = {}; - } - _p.batchCount++; - return this; - }, - endBatch: function endBatch() { - var _p = this._private; - if (_p.batchCount === 0) { - return this; - } - _p.batchCount--; - if (_p.batchCount === 0) { - // update style for dirty eles - _p.batchStyleEles.updateStyle(); - var renderer = this.renderer(); - - // notify the renderer of queued eles and event types - Object.keys(_p.batchNotifications).forEach(function (eventName) { - var eles = _p.batchNotifications[eventName]; - if (eles.empty()) { - renderer.notify(eventName); - } else { - renderer.notify(eventName, eles); - } - }); - } - return this; - }, - batch: function batch(callback) { - this.startBatch(); - callback(); - this.endBatch(); - return this; - }, - // for backwards compatibility - batchData: function batchData(map) { - var cy = this; - return this.batch(function () { - var ids = Object.keys(map); - for (var i = 0; i < ids.length; i++) { - var id = ids[i]; - var data = map[id]; - var ele = cy.getElementById(id); - ele.data(data); - } - }); - } -}; - -var rendererDefaults = defaults$g({ - hideEdgesOnViewport: false, - textureOnViewport: false, - motionBlur: false, - motionBlurOpacity: 0.05, - pixelRatio: undefined, - desktopTapThreshold: 4, - touchTapThreshold: 8, - wheelSensitivity: 1, - debug: false, - showFps: false -}); -var corefn$4 = { - renderTo: function renderTo(context, zoom, pan, pxRatio) { - var r = this._private.renderer; - r.renderTo(context, zoom, pan, pxRatio); - return this; - }, - renderer: function renderer() { - return this._private.renderer; - }, - forceRender: function forceRender() { - this.notify('draw'); - return this; - }, - resize: function resize() { - this.invalidateSize(); - this.emitAndNotify('resize'); - return this; - }, - initRenderer: function initRenderer(options) { - var cy = this; - var RendererProto = cy.extension('renderer', options.name); - if (RendererProto == null) { - error("Can not initialise: No such renderer `".concat(options.name, "` found. Did you forget to import it and `cytoscape.use()` it?")); - return; - } - if (options.wheelSensitivity !== undefined) { - warn("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine."); - } - var rOpts = rendererDefaults(options); - rOpts.cy = cy; - cy._private.renderer = new RendererProto(rOpts); - this.notify('init'); - }, - destroyRenderer: function destroyRenderer() { - var cy = this; - cy.notify('destroy'); // destroy the renderer - - var domEle = cy.container(); - if (domEle) { - domEle._cyreg = null; - while (domEle.childNodes.length > 0) { - domEle.removeChild(domEle.childNodes[0]); - } - } - cy._private.renderer = null; // to be extra safe, remove the ref - cy.mutableElements().forEach(function (ele) { - var _p = ele._private; - _p.rscratch = {}; - _p.rstyle = {}; - _p.animation.current = []; - _p.animation.queue = []; - }); - }, - onRender: function onRender(fn) { - return this.on('render', fn); - }, - offRender: function offRender(fn) { - return this.off('render', fn); - } -}; -corefn$4.invalidateDimensions = corefn$4.resize; - -var corefn$3 = { - // get a collection - // - empty collection on no args - // - collection of elements in the graph on selector arg - // - guarantee a returned collection when elements or collection specified - collection: function collection(eles, opts) { - if (string(eles)) { - return this.$(eles); - } else if (elementOrCollection(eles)) { - return eles.collection(); - } else if (array(eles)) { - if (!opts) { - opts = {}; - } - return new Collection(this, eles, opts.unique, opts.removed); - } - return new Collection(this); - }, - nodes: function nodes(selector) { - var nodes = this.$(function (ele) { - return ele.isNode(); - }); - if (selector) { - return nodes.filter(selector); - } - return nodes; - }, - edges: function edges(selector) { - var edges = this.$(function (ele) { - return ele.isEdge(); - }); - if (selector) { - return edges.filter(selector); - } - return edges; - }, - // search the graph like jQuery - $: function $(selector) { - var eles = this._private.elements; - if (selector) { - return eles.filter(selector); - } else { - return eles.spawnSelf(); - } - }, - mutableElements: function mutableElements() { - return this._private.elements; - } -}; - -// aliases -corefn$3.elements = corefn$3.filter = corefn$3.$; - -var styfn$8 = {}; - -// keys for style blocks, e.g. ttfftt -var TRUE = 't'; -var FALSE = 'f'; - -// (potentially expensive calculation) -// apply the style to the element based on -// - its bypass -// - what selectors match it -styfn$8.apply = function (eles) { - var self = this; - var _p = self._private; - var cy = _p.cy; - var updatedEles = cy.collection(); - for (var ie = 0; ie < eles.length; ie++) { - var ele = eles[ie]; - var cxtMeta = self.getContextMeta(ele); - if (cxtMeta.empty) { - continue; - } - var cxtStyle = self.getContextStyle(cxtMeta); - var app = self.applyContextStyle(cxtMeta, cxtStyle, ele); - if (ele._private.appliedInitStyle) { - self.updateTransitions(ele, app.diffProps); - } else { - ele._private.appliedInitStyle = true; - } - var hintsDiff = self.updateStyleHints(ele); - if (hintsDiff) { - updatedEles.push(ele); - } - } // for elements - - return updatedEles; -}; -styfn$8.getPropertiesDiff = function (oldCxtKey, newCxtKey) { - var self = this; - var cache = self._private.propDiffs = self._private.propDiffs || {}; - var dualCxtKey = oldCxtKey + '-' + newCxtKey; - var cachedVal = cache[dualCxtKey]; - if (cachedVal) { - return cachedVal; - } - var diffProps = []; - var addedProp = {}; - for (var i = 0; i < self.length; i++) { - var cxt = self[i]; - var oldHasCxt = oldCxtKey[i] === TRUE; - var newHasCxt = newCxtKey[i] === TRUE; - var cxtHasDiffed = oldHasCxt !== newHasCxt; - var cxtHasMappedProps = cxt.mappedProperties.length > 0; - if (cxtHasDiffed || newHasCxt && cxtHasMappedProps) { - var props = void 0; - if (cxtHasDiffed && cxtHasMappedProps) { - props = cxt.properties; // suffices b/c mappedProperties is a subset of properties - } else if (cxtHasDiffed) { - props = cxt.properties; // need to check them all - } else if (cxtHasMappedProps) { - props = cxt.mappedProperties; // only need to check mapped - } - - for (var j = 0; j < props.length; j++) { - var prop = props[j]; - var name = prop.name; - - // if a later context overrides this property, then the fact that this context has switched/diffed doesn't matter - // (semi expensive check since it makes this function O(n^2) on context length, but worth it since overall result - // is cached) - var laterCxtOverrides = false; - for (var k = i + 1; k < self.length; k++) { - var laterCxt = self[k]; - var hasLaterCxt = newCxtKey[k] === TRUE; - if (!hasLaterCxt) { - continue; - } // can't override unless the context is active - - laterCxtOverrides = laterCxt.properties[prop.name] != null; - if (laterCxtOverrides) { - break; - } // exit early as long as one later context overrides - } - - if (!addedProp[name] && !laterCxtOverrides) { - addedProp[name] = true; - diffProps.push(name); - } - } // for props - } // if - } // for contexts - - cache[dualCxtKey] = diffProps; - return diffProps; -}; -styfn$8.getContextMeta = function (ele) { - var self = this; - var cxtKey = ''; - var diffProps; - var prevKey = ele._private.styleCxtKey || ''; - - // get the cxt key - for (var i = 0; i < self.length; i++) { - var context = self[i]; - var contextSelectorMatches = context.selector && context.selector.matches(ele); // NB: context.selector may be null for 'core' - - if (contextSelectorMatches) { - cxtKey += TRUE; - } else { - cxtKey += FALSE; - } - } // for context - - diffProps = self.getPropertiesDiff(prevKey, cxtKey); - ele._private.styleCxtKey = cxtKey; - return { - key: cxtKey, - diffPropNames: diffProps, - empty: diffProps.length === 0 - }; -}; - -// gets a computed ele style object based on matched contexts -styfn$8.getContextStyle = function (cxtMeta) { - var cxtKey = cxtMeta.key; - var self = this; - var cxtStyles = this._private.contextStyles = this._private.contextStyles || {}; - - // if already computed style, returned cached copy - if (cxtStyles[cxtKey]) { - return cxtStyles[cxtKey]; - } - var style = { - _private: { - key: cxtKey - } - }; - for (var i = 0; i < self.length; i++) { - var cxt = self[i]; - var hasCxt = cxtKey[i] === TRUE; - if (!hasCxt) { - continue; - } - for (var j = 0; j < cxt.properties.length; j++) { - var prop = cxt.properties[j]; - style[prop.name] = prop; - } - } - cxtStyles[cxtKey] = style; - return style; -}; -styfn$8.applyContextStyle = function (cxtMeta, cxtStyle, ele) { - var self = this; - var diffProps = cxtMeta.diffPropNames; - var retDiffProps = {}; - var types = self.types; - for (var i = 0; i < diffProps.length; i++) { - var diffPropName = diffProps[i]; - var cxtProp = cxtStyle[diffPropName]; - var eleProp = ele.pstyle(diffPropName); - if (!cxtProp) { - // no context prop means delete - if (!eleProp) { - continue; // no existing prop means nothing needs to be removed - // nb affects initial application on mapped values like control-point-distances - } else if (eleProp.bypass) { - cxtProp = { - name: diffPropName, - deleteBypassed: true - }; - } else { - cxtProp = { - name: diffPropName, - "delete": true - }; - } - } - - // save cycles when the context prop doesn't need to be applied - if (eleProp === cxtProp) { - continue; - } - - // save cycles when a mapped context prop doesn't need to be applied - if (cxtProp.mapped === types.fn // context prop is function mapper - && eleProp != null // some props can be null even by default (e.g. a prop that overrides another one) - && eleProp.mapping != null // ele prop is a concrete value from from a mapper - && eleProp.mapping.value === cxtProp.value // the current prop on the ele is a flat prop value for the function mapper - ) { - // NB don't write to cxtProp, as it's shared among eles (stored in stylesheet) - var mapping = eleProp.mapping; // can write to mapping, as it's a per-ele copy - var fnValue = mapping.fnValue = cxtProp.value(ele); // temporarily cache the value in case of a miss - - if (fnValue === mapping.prevFnValue) { - continue; - } - } - var retDiffProp = retDiffProps[diffPropName] = { - prev: eleProp - }; - self.applyParsedProperty(ele, cxtProp); - retDiffProp.next = ele.pstyle(diffPropName); - if (retDiffProp.next && retDiffProp.next.bypass) { - retDiffProp.next = retDiffProp.next.bypassed; - } - } - return { - diffProps: retDiffProps - }; -}; -styfn$8.updateStyleHints = function (ele) { - var _p = ele._private; - var self = this; - var propNames = self.propertyGroupNames; - var propGrKeys = self.propertyGroupKeys; - var propHash = function propHash(ele, propNames, seedKey) { - return self.getPropertiesHash(ele, propNames, seedKey); - }; - var oldStyleKey = _p.styleKey; - if (ele.removed()) { - return false; - } - var isNode = _p.group === 'nodes'; - - // get the style key hashes per prop group - // but lazily -- only use non-default prop values to reduce the number of hashes - // - - var overriddenStyles = ele._private.style; - propNames = Object.keys(overriddenStyles); - for (var i = 0; i < propGrKeys.length; i++) { - var grKey = propGrKeys[i]; - _p.styleKeys[grKey] = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; - } - var updateGrKey1 = function updateGrKey1(val, grKey) { - return _p.styleKeys[grKey][0] = hashInt(val, _p.styleKeys[grKey][0]); - }; - var updateGrKey2 = function updateGrKey2(val, grKey) { - return _p.styleKeys[grKey][1] = hashIntAlt(val, _p.styleKeys[grKey][1]); - }; - var updateGrKey = function updateGrKey(val, grKey) { - updateGrKey1(val, grKey); - updateGrKey2(val, grKey); - }; - var updateGrKeyWStr = function updateGrKeyWStr(strVal, grKey) { - for (var j = 0; j < strVal.length; j++) { - var ch = strVal.charCodeAt(j); - updateGrKey1(ch, grKey); - updateGrKey2(ch, grKey); - } - }; - - // - hashing works on 32 bit ints b/c we use bitwise ops - // - small numbers get cut off (e.g. 0.123 is seen as 0 by the hashing function) - // - raise up small numbers so more significant digits are seen by hashing - // - make small numbers larger than a normal value to avoid collisions - // - works in practice and it's relatively cheap - var N = 2000000000; - var cleanNum = function cleanNum(val) { - return -128 < val && val < 128 && Math.floor(val) !== val ? N - (val * 1024 | 0) : val; - }; - for (var _i = 0; _i < propNames.length; _i++) { - var name = propNames[_i]; - var parsedProp = overriddenStyles[name]; - if (parsedProp == null) { - continue; - } - var propInfo = this.properties[name]; - var type = propInfo.type; - var _grKey = propInfo.groupKey; - var normalizedNumberVal = void 0; - if (propInfo.hashOverride != null) { - normalizedNumberVal = propInfo.hashOverride(ele, parsedProp); - } else if (parsedProp.pfValue != null) { - normalizedNumberVal = parsedProp.pfValue; - } - - // might not be a number if it allows enums - var numberVal = propInfo.enums == null ? parsedProp.value : null; - var haveNormNum = normalizedNumberVal != null; - var haveUnitedNum = numberVal != null; - var haveNum = haveNormNum || haveUnitedNum; - var units = parsedProp.units; - - // numbers are cheaper to hash than strings - // 1 hash op vs n hash ops (for length n string) - if (type.number && haveNum && !type.multiple) { - var v = haveNormNum ? normalizedNumberVal : numberVal; - updateGrKey(cleanNum(v), _grKey); - if (!haveNormNum && units != null) { - updateGrKeyWStr(units, _grKey); - } - } else { - updateGrKeyWStr(parsedProp.strValue, _grKey); - } - } - - // overall style key - // - - var hash = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; - for (var _i2 = 0; _i2 < propGrKeys.length; _i2++) { - var _grKey2 = propGrKeys[_i2]; - var grHash = _p.styleKeys[_grKey2]; - hash[0] = hashInt(grHash[0], hash[0]); - hash[1] = hashIntAlt(grHash[1], hash[1]); - } - _p.styleKey = combineHashes(hash[0], hash[1]); - - // label dims - // - - var sk = _p.styleKeys; - _p.labelDimsKey = combineHashesArray(sk.labelDimensions); - var labelKeys = propHash(ele, ['label'], sk.labelDimensions); - _p.labelKey = combineHashesArray(labelKeys); - _p.labelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, labelKeys)); - if (!isNode) { - var sourceLabelKeys = propHash(ele, ['source-label'], sk.labelDimensions); - _p.sourceLabelKey = combineHashesArray(sourceLabelKeys); - _p.sourceLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, sourceLabelKeys)); - var targetLabelKeys = propHash(ele, ['target-label'], sk.labelDimensions); - _p.targetLabelKey = combineHashesArray(targetLabelKeys); - _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys)); - } - - // node - // - - if (isNode) { - var _p$styleKeys = _p.styleKeys, - nodeBody = _p$styleKeys.nodeBody, - nodeBorder = _p$styleKeys.nodeBorder, - nodeOutline = _p$styleKeys.nodeOutline, - backgroundImage = _p$styleKeys.backgroundImage, - compound = _p$styleKeys.compound, - pie = _p$styleKeys.pie; - var nodeKeys = [nodeBody, nodeBorder, nodeOutline, backgroundImage, compound, pie].filter(function (k) { - return k != null; - }).reduce(hashArrays, [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]); - _p.nodeKey = combineHashesArray(nodeKeys); - _p.hasPie = pie != null && pie[0] !== DEFAULT_HASH_SEED && pie[1] !== DEFAULT_HASH_SEED_ALT; - } - return oldStyleKey !== _p.styleKey; -}; -styfn$8.clearStyleHints = function (ele) { - var _p = ele._private; - _p.styleCxtKey = ''; - _p.styleKeys = {}; - _p.styleKey = null; - _p.labelKey = null; - _p.labelStyleKey = null; - _p.sourceLabelKey = null; - _p.sourceLabelStyleKey = null; - _p.targetLabelKey = null; - _p.targetLabelStyleKey = null; - _p.nodeKey = null; - _p.hasPie = null; -}; - -// apply a property to the style (for internal use) -// returns whether application was successful -// -// now, this function flattens the property, and here's how: -// -// for parsedProp:{ bypass: true, deleteBypass: true } -// no property is generated, instead the bypass property in the -// element's style is replaced by what's pointed to by the `bypassed` -// field in the bypass property (i.e. restoring the property the -// bypass was overriding) -// -// for parsedProp:{ mapped: truthy } -// the generated flattenedProp:{ mapping: prop } -// -// for parsedProp:{ bypass: true } -// the generated flattenedProp:{ bypassed: parsedProp } -styfn$8.applyParsedProperty = function (ele, parsedProp) { - var self = this; - var prop = parsedProp; - var style = ele._private.style; - var flatProp; - var types = self.types; - var type = self.properties[prop.name].type; - var propIsBypass = prop.bypass; - var origProp = style[prop.name]; - var origPropIsBypass = origProp && origProp.bypass; - var _p = ele._private; - var flatPropMapping = 'mapping'; - var getVal = function getVal(p) { - if (p == null) { - return null; - } else if (p.pfValue != null) { - return p.pfValue; - } else { - return p.value; - } - }; - var checkTriggers = function checkTriggers() { - var fromVal = getVal(origProp); - var toVal = getVal(prop); - self.checkTriggers(ele, prop.name, fromVal, toVal); - }; - - // edge sanity checks to prevent the client from making serious mistakes - if (parsedProp.name === 'curve-style' && ele.isEdge() && ( - // loops must be bundled beziers - parsedProp.value !== 'bezier' && ele.isLoop() || - // edges connected to compound nodes can not be haystacks - parsedProp.value === 'haystack' && (ele.source().isParent() || ele.target().isParent()))) { - prop = parsedProp = this.parse(parsedProp.name, 'bezier', propIsBypass); - } - if (prop["delete"]) { - // delete the property and use the default value on falsey value - style[prop.name] = undefined; - checkTriggers(); - return true; - } - if (prop.deleteBypassed) { - // delete the property that the - if (!origProp) { - checkTriggers(); - return true; // can't delete if no prop - } else if (origProp.bypass) { - // delete bypassed - origProp.bypassed = undefined; - checkTriggers(); - return true; - } else { - return false; // we're unsuccessful deleting the bypassed - } - } - - // check if we need to delete the current bypass - if (prop.deleteBypass) { - // then this property is just here to indicate we need to delete - if (!origProp) { - checkTriggers(); - return true; // property is already not defined - } else if (origProp.bypass) { - // then replace the bypass property with the original - // because the bypassed property was already applied (and therefore parsed), we can just replace it (no reapplying necessary) - style[prop.name] = origProp.bypassed; - checkTriggers(); - return true; - } else { - return false; // we're unsuccessful deleting the bypass - } - } - - var printMappingErr = function printMappingErr() { - warn('Do not assign mappings to elements without corresponding data (i.e. ele `' + ele.id() + '` has no mapping for property `' + prop.name + '` with data field `' + prop.field + '`); try a `[' + prop.field + ']` selector to limit scope to elements with `' + prop.field + '` defined'); - }; - - // put the property in the style objects - switch (prop.mapped) { - // flatten the property if mapped - case types.mapData: - { - // flatten the field (e.g. data.foo.bar) - var fields = prop.field.split('.'); - var fieldVal = _p.data; - for (var i = 0; i < fields.length && fieldVal; i++) { - var field = fields[i]; - fieldVal = fieldVal[field]; - } - if (fieldVal == null) { - printMappingErr(); - return false; - } - var percent; - if (!number$1(fieldVal)) { - // then don't apply and fall back on the existing style - warn('Do not use continuous mappers without specifying numeric data (i.e. `' + prop.field + ': ' + fieldVal + '` for `' + ele.id() + '` is non-numeric)'); - return false; - } else { - var fieldWidth = prop.fieldMax - prop.fieldMin; - if (fieldWidth === 0) { - // safety check -- not strictly necessary as no props of zero range should be passed here - percent = 0; - } else { - percent = (fieldVal - prop.fieldMin) / fieldWidth; - } - } - - // make sure to bound percent value - if (percent < 0) { - percent = 0; - } else if (percent > 1) { - percent = 1; - } - if (type.color) { - var r1 = prop.valueMin[0]; - var r2 = prop.valueMax[0]; - var g1 = prop.valueMin[1]; - var g2 = prop.valueMax[1]; - var b1 = prop.valueMin[2]; - var b2 = prop.valueMax[2]; - var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3]; - var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3]; - var clr = [Math.round(r1 + (r2 - r1) * percent), Math.round(g1 + (g2 - g1) * percent), Math.round(b1 + (b2 - b1) * percent), Math.round(a1 + (a2 - a1) * percent)]; - flatProp = { - // colours are simple, so just create the flat property instead of expensive string parsing - bypass: prop.bypass, - // we're a bypass if the mapping property is a bypass - name: prop.name, - value: clr, - strValue: 'rgb(' + clr[0] + ', ' + clr[1] + ', ' + clr[2] + ')' - }; - } else if (type.number) { - var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent; - flatProp = this.parse(prop.name, calcValue, prop.bypass, flatPropMapping); - } else { - return false; // can only map to colours and numbers - } - - if (!flatProp) { - // if we can't flatten the property, then don't apply the property and fall back on the existing style - printMappingErr(); - return false; - } - flatProp.mapping = prop; // keep a reference to the mapping - prop = flatProp; // the flattened (mapped) property is the one we want - - break; - } - - // direct mapping - case types.data: - { - // flatten the field (e.g. data.foo.bar) - var _fields = prop.field.split('.'); - var _fieldVal = _p.data; - for (var _i3 = 0; _i3 < _fields.length && _fieldVal; _i3++) { - var _field = _fields[_i3]; - _fieldVal = _fieldVal[_field]; - } - if (_fieldVal != null) { - flatProp = this.parse(prop.name, _fieldVal, prop.bypass, flatPropMapping); - } - if (!flatProp) { - // if we can't flatten the property, then don't apply and fall back on the existing style - printMappingErr(); - return false; - } - flatProp.mapping = prop; // keep a reference to the mapping - prop = flatProp; // the flattened (mapped) property is the one we want - - break; - } - case types.fn: - { - var fn = prop.value; - var fnRetVal = prop.fnValue != null ? prop.fnValue : fn(ele); // check for cached value before calling function - - prop.prevFnValue = fnRetVal; - if (fnRetVal == null) { - warn('Custom function mappers may not return null (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is null)'); - return false; - } - flatProp = this.parse(prop.name, fnRetVal, prop.bypass, flatPropMapping); - if (!flatProp) { - warn('Custom function mappers may not return invalid values for the property type (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is invalid)'); - return false; - } - flatProp.mapping = copy(prop); // keep a reference to the mapping - prop = flatProp; // the flattened (mapped) property is the one we want - - break; - } - case undefined: - break; - // just set the property - - default: - return false; - // not a valid mapping - } - - // if the property is a bypass property, then link the resultant property to the original one - if (propIsBypass) { - if (origPropIsBypass) { - // then this bypass overrides the existing one - prop.bypassed = origProp.bypassed; // steal bypassed prop from old bypass - } else { - // then link the orig prop to the new bypass - prop.bypassed = origProp; - } - style[prop.name] = prop; // and set - } else { - // prop is not bypass - if (origPropIsBypass) { - // then keep the orig prop (since it's a bypass) and link to the new prop - origProp.bypassed = prop; - } else { - // then just replace the old prop with the new one - style[prop.name] = prop; - } - } - checkTriggers(); - return true; -}; -styfn$8.cleanElements = function (eles, keepBypasses) { - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - this.clearStyleHints(ele); - ele.dirtyCompoundBoundsCache(); - ele.dirtyBoundingBoxCache(); - if (!keepBypasses) { - ele._private.style = {}; - } else { - var style = ele._private.style; - var propNames = Object.keys(style); - for (var j = 0; j < propNames.length; j++) { - var propName = propNames[j]; - var eleProp = style[propName]; - if (eleProp != null) { - if (eleProp.bypass) { - eleProp.bypassed = null; - } else { - style[propName] = null; - } - } - } - } - } -}; - -// updates the visual style for all elements (useful for manual style modification after init) -styfn$8.update = function () { - var cy = this._private.cy; - var eles = cy.mutableElements(); - eles.updateStyle(); -}; - -// diffProps : { name => { prev, next } } -styfn$8.updateTransitions = function (ele, diffProps) { - var self = this; - var _p = ele._private; - var props = ele.pstyle('transition-property').value; - var duration = ele.pstyle('transition-duration').pfValue; - var delay = ele.pstyle('transition-delay').pfValue; - if (props.length > 0 && duration > 0) { - var style = {}; - - // build up the style to animate towards - var anyPrev = false; - for (var i = 0; i < props.length; i++) { - var prop = props[i]; - var styProp = ele.pstyle(prop); - var diffProp = diffProps[prop]; - if (!diffProp) { - continue; - } - var prevProp = diffProp.prev; - var fromProp = prevProp; - var toProp = diffProp.next != null ? diffProp.next : styProp; - var diff = false; - var initVal = void 0; - var initDt = 0.000001; // delta time % value for initVal (allows animating out of init zero opacity) - - if (!fromProp) { - continue; - } - - // consider px values - if (number$1(fromProp.pfValue) && number$1(toProp.pfValue)) { - diff = toProp.pfValue - fromProp.pfValue; // nonzero is truthy - initVal = fromProp.pfValue + initDt * diff; - - // consider numerical values - } else if (number$1(fromProp.value) && number$1(toProp.value)) { - diff = toProp.value - fromProp.value; // nonzero is truthy - initVal = fromProp.value + initDt * diff; - - // consider colour values - } else if (array(fromProp.value) && array(toProp.value)) { - diff = fromProp.value[0] !== toProp.value[0] || fromProp.value[1] !== toProp.value[1] || fromProp.value[2] !== toProp.value[2]; - initVal = fromProp.strValue; - } - - // the previous value is good for an animation only if it's different - if (diff) { - style[prop] = toProp.strValue; // to val - this.applyBypass(ele, prop, initVal); // from val - anyPrev = true; - } - } // end if props allow ani - - // can't transition if there's nothing previous to transition from - if (!anyPrev) { - return; - } - _p.transitioning = true; - new Promise$1(function (resolve) { - if (delay > 0) { - ele.delayAnimation(delay).play().promise().then(resolve); - } else { - resolve(); - } - }).then(function () { - return ele.animation({ - style: style, - duration: duration, - easing: ele.pstyle('transition-timing-function').value, - queue: false - }).play().promise(); - }).then(function () { - // if( !isBypass ){ - self.removeBypasses(ele, props); - ele.emitAndNotify('style'); - // } - - _p.transitioning = false; - }); - } else if (_p.transitioning) { - this.removeBypasses(ele, props); - ele.emitAndNotify('style'); - _p.transitioning = false; - } -}; -styfn$8.checkTrigger = function (ele, name, fromValue, toValue, getTrigger, onTrigger) { - var prop = this.properties[name]; - var triggerCheck = getTrigger(prop); - if (triggerCheck != null && triggerCheck(fromValue, toValue)) { - onTrigger(prop); - } -}; -styfn$8.checkZOrderTrigger = function (ele, name, fromValue, toValue) { - var _this = this; - this.checkTrigger(ele, name, fromValue, toValue, function (prop) { - return prop.triggersZOrder; - }, function () { - _this._private.cy.notify('zorder', ele); - }); -}; -styfn$8.checkBoundsTrigger = function (ele, name, fromValue, toValue) { - this.checkTrigger(ele, name, fromValue, toValue, function (prop) { - return prop.triggersBounds; - }, function (prop) { - ele.dirtyCompoundBoundsCache(); - ele.dirtyBoundingBoxCache(); - - // if the prop change makes the bb of pll bezier edges invalid, - // then dirty the pll edge bb cache as well - if ( - // only for beziers -- so performance of other edges isn't affected - prop.triggersBoundsOfParallelBeziers && name === 'curve-style' && (fromValue === 'bezier' || toValue === 'bezier')) { - ele.parallelEdges().forEach(function (pllEdge) { - if (pllEdge.isBundledBezier()) { - pllEdge.dirtyBoundingBoxCache(); - } - }); - } - if (prop.triggersBoundsOfConnectedEdges && name === 'display' && (fromValue === 'none' || toValue === 'none')) { - ele.connectedEdges().forEach(function (edge) { - edge.dirtyBoundingBoxCache(); - }); - } - }); -}; -styfn$8.checkTriggers = function (ele, name, fromValue, toValue) { - ele.dirtyStyleCache(); - this.checkZOrderTrigger(ele, name, fromValue, toValue); - this.checkBoundsTrigger(ele, name, fromValue, toValue); -}; - -var styfn$7 = {}; - -// bypasses are applied to an existing style on an element, and just tacked on temporarily -// returns true iff application was successful for at least 1 specified property -styfn$7.applyBypass = function (eles, name, value, updateTransitions) { - var self = this; - var props = []; - var isBypass = true; - - // put all the properties (can specify one or many) in an array after parsing them - if (name === '*' || name === '**') { - // apply to all property names - - if (value !== undefined) { - for (var i = 0; i < self.properties.length; i++) { - var prop = self.properties[i]; - var _name = prop.name; - var parsedProp = this.parse(_name, value, true); - if (parsedProp) { - props.push(parsedProp); - } - } - } - } else if (string(name)) { - // then parse the single property - var _parsedProp = this.parse(name, value, true); - if (_parsedProp) { - props.push(_parsedProp); - } - } else if (plainObject(name)) { - // then parse each property - var specifiedProps = name; - updateTransitions = value; - var names = Object.keys(specifiedProps); - for (var _i = 0; _i < names.length; _i++) { - var _name2 = names[_i]; - var _value = specifiedProps[_name2]; - if (_value === undefined) { - // try camel case name too - _value = specifiedProps[dash2camel(_name2)]; - } - if (_value !== undefined) { - var _parsedProp2 = this.parse(_name2, _value, true); - if (_parsedProp2) { - props.push(_parsedProp2); - } - } - } - } else { - // can't do anything without well defined properties - return false; - } - - // we've failed if there are no valid properties - if (props.length === 0) { - return false; - } - - // now, apply the bypass properties on the elements - var ret = false; // return true if at least one succesful bypass applied - for (var _i2 = 0; _i2 < eles.length; _i2++) { - // for each ele - var ele = eles[_i2]; - var diffProps = {}; - var diffProp = void 0; - for (var j = 0; j < props.length; j++) { - // for each prop - var _prop = props[j]; - if (updateTransitions) { - var prevProp = ele.pstyle(_prop.name); - diffProp = diffProps[_prop.name] = { - prev: prevProp - }; - } - ret = this.applyParsedProperty(ele, copy(_prop)) || ret; - if (updateTransitions) { - diffProp.next = ele.pstyle(_prop.name); - } - } // for props - - if (ret) { - this.updateStyleHints(ele); - } - if (updateTransitions) { - this.updateTransitions(ele, diffProps, isBypass); - } - } // for eles - - return ret; -}; - -// only useful in specific cases like animation -styfn$7.overrideBypass = function (eles, name, value) { - name = camel2dash(name); - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - var prop = ele._private.style[name]; - var type = this.properties[name].type; - var isColor = type.color; - var isMulti = type.mutiple; - var oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value; - if (!prop || !prop.bypass) { - // need a bypass if one doesn't exist - this.applyBypass(ele, name, value); - } else { - prop.value = value; - if (prop.pfValue != null) { - prop.pfValue = value; - } - if (isColor) { - prop.strValue = 'rgb(' + value.join(',') + ')'; - } else if (isMulti) { - prop.strValue = value.join(' '); - } else { - prop.strValue = '' + value; - } - this.updateStyleHints(ele); - } - this.checkTriggers(ele, name, oldValue, value); - } -}; -styfn$7.removeAllBypasses = function (eles, updateTransitions) { - return this.removeBypasses(eles, this.propertyNames, updateTransitions); -}; -styfn$7.removeBypasses = function (eles, props, updateTransitions) { - var isBypass = true; - for (var j = 0; j < eles.length; j++) { - var ele = eles[j]; - var diffProps = {}; - for (var i = 0; i < props.length; i++) { - var name = props[i]; - var prop = this.properties[name]; - var prevProp = ele.pstyle(prop.name); - if (!prevProp || !prevProp.bypass) { - // if a bypass doesn't exist for the prop, nothing needs to be removed - continue; - } - var value = ''; // empty => remove bypass - var parsedProp = this.parse(name, value, true); - var diffProp = diffProps[prop.name] = { - prev: prevProp - }; - this.applyParsedProperty(ele, parsedProp); - diffProp.next = ele.pstyle(prop.name); - } // for props - - this.updateStyleHints(ele); - if (updateTransitions) { - this.updateTransitions(ele, diffProps, isBypass); - } - } // for eles -}; - -var styfn$6 = {}; - -// gets what an em size corresponds to in pixels relative to a dom element -styfn$6.getEmSizeInPixels = function () { - var px = this.containerCss('font-size'); - if (px != null) { - return parseFloat(px); - } else { - return 1; // for headless - } -}; - -// gets css property from the core container -styfn$6.containerCss = function (propName) { - var cy = this._private.cy; - var domElement = cy.container(); - var containerWindow = cy.window(); - if (containerWindow && domElement && containerWindow.getComputedStyle) { - return containerWindow.getComputedStyle(domElement).getPropertyValue(propName); - } -}; - -var styfn$5 = {}; - -// gets the rendered style for an element -styfn$5.getRenderedStyle = function (ele, prop) { - if (prop) { - return this.getStylePropertyValue(ele, prop, true); - } else { - return this.getRawStyle(ele, true); - } -}; - -// gets the raw style for an element -styfn$5.getRawStyle = function (ele, isRenderedVal) { - var self = this; - ele = ele[0]; // insure it's an element - - if (ele) { - var rstyle = {}; - for (var i = 0; i < self.properties.length; i++) { - var prop = self.properties[i]; - var val = self.getStylePropertyValue(ele, prop.name, isRenderedVal); - if (val != null) { - rstyle[prop.name] = val; - rstyle[dash2camel(prop.name)] = val; - } - } - return rstyle; - } -}; -styfn$5.getIndexedStyle = function (ele, property, subproperty, index) { - var pstyle = ele.pstyle(property)[subproperty][index]; - return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property)[subproperty][0]; -}; -styfn$5.getStylePropertyValue = function (ele, propName, isRenderedVal) { - var self = this; - ele = ele[0]; // insure it's an element - - if (ele) { - var prop = self.properties[propName]; - if (prop.alias) { - prop = prop.pointsTo; - } - var type = prop.type; - var styleProp = ele.pstyle(prop.name); - if (styleProp) { - var value = styleProp.value, - units = styleProp.units, - strValue = styleProp.strValue; - if (isRenderedVal && type.number && value != null && number$1(value)) { - var zoom = ele.cy().zoom(); - var getRenderedValue = function getRenderedValue(val) { - return val * zoom; - }; - var getValueStringWithUnits = function getValueStringWithUnits(val, units) { - return getRenderedValue(val) + units; - }; - var isArrayValue = array(value); - var haveUnits = isArrayValue ? units.every(function (u) { - return u != null; - }) : units != null; - if (haveUnits) { - if (isArrayValue) { - return value.map(function (v, i) { - return getValueStringWithUnits(v, units[i]); - }).join(' '); - } else { - return getValueStringWithUnits(value, units); - } - } else { - if (isArrayValue) { - return value.map(function (v) { - return string(v) ? v : '' + getRenderedValue(v); - }).join(' '); - } else { - return '' + getRenderedValue(value); - } - } - } else if (strValue != null) { - return strValue; - } - } - return null; - } -}; -styfn$5.getAnimationStartStyle = function (ele, aniProps) { - var rstyle = {}; - for (var i = 0; i < aniProps.length; i++) { - var aniProp = aniProps[i]; - var name = aniProp.name; - var styleProp = ele.pstyle(name); - if (styleProp !== undefined) { - // then make a prop of it - if (plainObject(styleProp)) { - styleProp = this.parse(name, styleProp.strValue); - } else { - styleProp = this.parse(name, styleProp); - } - } - if (styleProp) { - rstyle[name] = styleProp; - } - } - return rstyle; -}; -styfn$5.getPropsList = function (propsObj) { - var self = this; - var rstyle = []; - var style = propsObj; - var props = self.properties; - if (style) { - var names = Object.keys(style); - for (var i = 0; i < names.length; i++) { - var name = names[i]; - var val = style[name]; - var prop = props[name] || props[camel2dash(name)]; - var styleProp = this.parse(prop.name, val); - if (styleProp) { - rstyle.push(styleProp); - } - } - } - return rstyle; -}; -styfn$5.getNonDefaultPropertiesHash = function (ele, propNames, seed) { - var hash = seed.slice(); - var name, val, strVal, chVal; - var i, j; - for (i = 0; i < propNames.length; i++) { - name = propNames[i]; - val = ele.pstyle(name, false); - if (val == null) { - continue; - } else if (val.pfValue != null) { - hash[0] = hashInt(chVal, hash[0]); - hash[1] = hashIntAlt(chVal, hash[1]); - } else { - strVal = val.strValue; - for (j = 0; j < strVal.length; j++) { - chVal = strVal.charCodeAt(j); - hash[0] = hashInt(chVal, hash[0]); - hash[1] = hashIntAlt(chVal, hash[1]); - } - } - } - return hash; -}; -styfn$5.getPropertiesHash = styfn$5.getNonDefaultPropertiesHash; - -var styfn$4 = {}; -styfn$4.appendFromJson = function (json) { - var style = this; - for (var i = 0; i < json.length; i++) { - var context = json[i]; - var selector = context.selector; - var props = context.style || context.css; - var names = Object.keys(props); - style.selector(selector); // apply selector - - for (var j = 0; j < names.length; j++) { - var name = names[j]; - var value = props[name]; - style.css(name, value); // apply property - } - } - - return style; -}; - -// accessible cy.style() function -styfn$4.fromJson = function (json) { - var style = this; - style.resetToDefault(); - style.appendFromJson(json); - return style; -}; - -// get json from cy.style() api -styfn$4.json = function () { - var json = []; - for (var i = this.defaultLength; i < this.length; i++) { - var cxt = this[i]; - var selector = cxt.selector; - var props = cxt.properties; - var css = {}; - for (var j = 0; j < props.length; j++) { - var prop = props[j]; - css[prop.name] = prop.strValue; - } - json.push({ - selector: !selector ? 'core' : selector.toString(), - style: css - }); - } - return json; -}; - -var styfn$3 = {}; -styfn$3.appendFromString = function (string) { - var self = this; - var style = this; - var remaining = '' + string; - var selAndBlockStr; - var blockRem; - var propAndValStr; - - // remove comments from the style string - remaining = remaining.replace(/[/][*](\s|.)+?[*][/]/g, ''); - function removeSelAndBlockFromRemaining() { - // remove the parsed selector and block from the remaining text to parse - if (remaining.length > selAndBlockStr.length) { - remaining = remaining.substr(selAndBlockStr.length); - } else { - remaining = ''; - } - } - function removePropAndValFromRem() { - // remove the parsed property and value from the remaining block text to parse - if (blockRem.length > propAndValStr.length) { - blockRem = blockRem.substr(propAndValStr.length); - } else { - blockRem = ''; - } - } - for (;;) { - var nothingLeftToParse = remaining.match(/^\s*$/); - if (nothingLeftToParse) { - break; - } - var selAndBlock = remaining.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/); - if (!selAndBlock) { - warn('Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: ' + remaining); - break; - } - selAndBlockStr = selAndBlock[0]; - - // parse the selector - var selectorStr = selAndBlock[1]; - if (selectorStr !== 'core') { - var selector = new Selector(selectorStr); - if (selector.invalid) { - warn('Skipping parsing of block: Invalid selector found in string stylesheet: ' + selectorStr); - - // skip this selector and block - removeSelAndBlockFromRemaining(); - continue; - } - } - - // parse the block of properties and values - var blockStr = selAndBlock[2]; - var invalidBlock = false; - blockRem = blockStr; - var props = []; - for (;;) { - var _nothingLeftToParse = blockRem.match(/^\s*$/); - if (_nothingLeftToParse) { - break; - } - var propAndVal = blockRem.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/); - if (!propAndVal) { - warn('Skipping parsing of block: Invalid formatting of style property and value definitions found in:' + blockStr); - invalidBlock = true; - break; - } - propAndValStr = propAndVal[0]; - var propStr = propAndVal[1]; - var valStr = propAndVal[2]; - var prop = self.properties[propStr]; - if (!prop) { - warn('Skipping property: Invalid property name in: ' + propAndValStr); - - // skip this property in the block - removePropAndValFromRem(); - continue; - } - var parsedProp = style.parse(propStr, valStr); - if (!parsedProp) { - warn('Skipping property: Invalid property definition in: ' + propAndValStr); - - // skip this property in the block - removePropAndValFromRem(); - continue; - } - props.push({ - name: propStr, - val: valStr - }); - removePropAndValFromRem(); - } - if (invalidBlock) { - removeSelAndBlockFromRemaining(); - break; - } - - // put the parsed block in the style - style.selector(selectorStr); - for (var i = 0; i < props.length; i++) { - var _prop = props[i]; - style.css(_prop.name, _prop.val); - } - removeSelAndBlockFromRemaining(); - } - return style; -}; -styfn$3.fromString = function (string) { - var style = this; - style.resetToDefault(); - style.appendFromString(string); - return style; -}; - -var styfn$2 = {}; -(function () { - var number$1 = number; - var rgba = rgbaNoBackRefs; - var hsla = hslaNoBackRefs; - var hex3$1 = hex3; - var hex6$1 = hex6; - var data = function data(prefix) { - return '^' + prefix + '\\s*\\(\\s*([\\w\\.]+)\\s*\\)$'; - }; - var mapData = function mapData(prefix) { - var mapArg = number$1 + '|\\w+|' + rgba + '|' + hsla + '|' + hex3$1 + '|' + hex6$1; - return '^' + prefix + '\\s*\\(([\\w\\.]+)\\s*\\,\\s*(' + number$1 + ')\\s*\\,\\s*(' + number$1 + ')\\s*,\\s*(' + mapArg + ')\\s*\\,\\s*(' + mapArg + ')\\)$'; - }; - var urlRegexes = ['^url\\s*\\(\\s*[\'"]?(.+?)[\'"]?\\s*\\)$', '^(none)$', '^(.+)$']; - - // each visual style property has a type and needs to be validated according to it - styfn$2.types = { - time: { - number: true, - min: 0, - units: 's|ms', - implicitUnits: 'ms' - }, - percent: { - number: true, - min: 0, - max: 100, - units: '%', - implicitUnits: '%' - }, - percentages: { - number: true, - min: 0, - max: 100, - units: '%', - implicitUnits: '%', - multiple: true - }, - zeroOneNumber: { - number: true, - min: 0, - max: 1, - unitless: true - }, - zeroOneNumbers: { - number: true, - min: 0, - max: 1, - unitless: true, - multiple: true - }, - nOneOneNumber: { - number: true, - min: -1, - max: 1, - unitless: true - }, - nonNegativeInt: { - number: true, - min: 0, - integer: true, - unitless: true - }, - nonNegativeNumber: { - number: true, - min: 0, - unitless: true - }, - position: { - enums: ['parent', 'origin'] - }, - nodeSize: { - number: true, - min: 0, - enums: ['label'] - }, - number: { - number: true, - unitless: true - }, - numbers: { - number: true, - unitless: true, - multiple: true - }, - positiveNumber: { - number: true, - unitless: true, - min: 0, - strictMin: true - }, - size: { - number: true, - min: 0 - }, - bidirectionalSize: { - number: true - }, - // allows negative - bidirectionalSizeMaybePercent: { - number: true, - allowPercent: true - }, - // allows negative - bidirectionalSizes: { - number: true, - multiple: true - }, - // allows negative - sizeMaybePercent: { - number: true, - min: 0, - allowPercent: true - }, - axisDirection: { - enums: ['horizontal', 'leftward', 'rightward', 'vertical', 'upward', 'downward', 'auto'] - }, - paddingRelativeTo: { - enums: ['width', 'height', 'average', 'min', 'max'] - }, - bgWH: { - number: true, - min: 0, - allowPercent: true, - enums: ['auto'], - multiple: true - }, - bgPos: { - number: true, - allowPercent: true, - multiple: true - }, - bgRelativeTo: { - enums: ['inner', 'include-padding'], - multiple: true - }, - bgRepeat: { - enums: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'], - multiple: true - }, - bgFit: { - enums: ['none', 'contain', 'cover'], - multiple: true - }, - bgCrossOrigin: { - enums: ['anonymous', 'use-credentials', 'null'], - multiple: true - }, - bgClip: { - enums: ['none', 'node'], - multiple: true - }, - bgContainment: { - enums: ['inside', 'over'], - multiple: true - }, - color: { - color: true - }, - colors: { - color: true, - multiple: true - }, - fill: { - enums: ['solid', 'linear-gradient', 'radial-gradient'] - }, - bool: { - enums: ['yes', 'no'] - }, - bools: { - enums: ['yes', 'no'], - multiple: true - }, - lineStyle: { - enums: ['solid', 'dotted', 'dashed'] - }, - lineCap: { - enums: ['butt', 'round', 'square'] - }, - borderStyle: { - enums: ['solid', 'dotted', 'dashed', 'double'] - }, - curveStyle: { - enums: ['bezier', 'unbundled-bezier', 'haystack', 'segments', 'straight', 'straight-triangle', 'taxi'] - }, - fontFamily: { - regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$' - }, - fontStyle: { - enums: ['italic', 'normal', 'oblique'] - }, - fontWeight: { - enums: ['normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900] - }, - textDecoration: { - enums: ['none', 'underline', 'overline', 'line-through'] - }, - textTransform: { - enums: ['none', 'uppercase', 'lowercase'] - }, - textWrap: { - enums: ['none', 'wrap', 'ellipsis'] - }, - textOverflowWrap: { - enums: ['whitespace', 'anywhere'] - }, - textBackgroundShape: { - enums: ['rectangle', 'roundrectangle', 'round-rectangle'] - }, - nodeShape: { - enums: ['rectangle', 'roundrectangle', 'round-rectangle', 'cutrectangle', 'cut-rectangle', 'bottomroundrectangle', 'bottom-round-rectangle', 'barrel', 'ellipse', 'triangle', 'round-triangle', 'square', 'pentagon', 'round-pentagon', 'hexagon', 'round-hexagon', 'concavehexagon', 'concave-hexagon', 'heptagon', 'round-heptagon', 'octagon', 'round-octagon', 'tag', 'round-tag', 'star', 'diamond', 'round-diamond', 'vee', 'rhomboid', 'right-rhomboid', 'polygon'] - }, - overlayShape: { - enums: ['roundrectangle', 'round-rectangle', 'ellipse'] - }, - compoundIncludeLabels: { - enums: ['include', 'exclude'] - }, - arrowShape: { - enums: ['tee', 'triangle', 'triangle-tee', 'circle-triangle', 'triangle-cross', 'triangle-backcurve', 'vee', 'square', 'circle', 'diamond', 'chevron', 'none'] - }, - arrowFill: { - enums: ['filled', 'hollow'] - }, - arrowWidth: { - number: true, - units: '%|px|em', - implicitUnits: 'px', - enums: ['match-line'] - }, - display: { - enums: ['element', 'none'] - }, - visibility: { - enums: ['hidden', 'visible'] - }, - zCompoundDepth: { - enums: ['bottom', 'orphan', 'auto', 'top'] - }, - zIndexCompare: { - enums: ['auto', 'manual'] - }, - valign: { - enums: ['top', 'center', 'bottom'] - }, - halign: { - enums: ['left', 'center', 'right'] - }, - justification: { - enums: ['left', 'center', 'right', 'auto'] - }, - text: { - string: true - }, - data: { - mapping: true, - regex: data('data') - }, - layoutData: { - mapping: true, - regex: data('layoutData') - }, - scratch: { - mapping: true, - regex: data('scratch') - }, - mapData: { - mapping: true, - regex: mapData('mapData') - }, - mapLayoutData: { - mapping: true, - regex: mapData('mapLayoutData') - }, - mapScratch: { - mapping: true, - regex: mapData('mapScratch') - }, - fn: { - mapping: true, - fn: true - }, - url: { - regexes: urlRegexes, - singleRegexMatchValue: true - }, - urls: { - regexes: urlRegexes, - singleRegexMatchValue: true, - multiple: true - }, - propList: { - propList: true - }, - angle: { - number: true, - units: 'deg|rad', - implicitUnits: 'rad' - }, - textRotation: { - number: true, - units: 'deg|rad', - implicitUnits: 'rad', - enums: ['none', 'autorotate'] - }, - polygonPointList: { - number: true, - multiple: true, - evenMultiple: true, - min: -1, - max: 1, - unitless: true - }, - edgeDistances: { - enums: ['intersection', 'node-position', 'endpoints'] - }, - edgeEndpoint: { - number: true, - multiple: true, - units: '%|px|em|deg|rad', - implicitUnits: 'px', - enums: ['inside-to-node', 'outside-to-node', 'outside-to-node-or-label', 'outside-to-line', 'outside-to-line-or-label'], - singleEnum: true, - validate: function validate(valArr, unitsArr) { - switch (valArr.length) { - case 2: - // can be % or px only - return unitsArr[0] !== 'deg' && unitsArr[0] !== 'rad' && unitsArr[1] !== 'deg' && unitsArr[1] !== 'rad'; - case 1: - // can be enum, deg, or rad only - return string(valArr[0]) || unitsArr[0] === 'deg' || unitsArr[0] === 'rad'; - default: - return false; - } - } - }, - easing: { - regexes: ['^(spring)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$', '^(cubic-bezier)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$'], - enums: ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out', 'ease-in-sine', 'ease-out-sine', 'ease-in-out-sine', 'ease-in-quad', 'ease-out-quad', 'ease-in-out-quad', 'ease-in-cubic', 'ease-out-cubic', 'ease-in-out-cubic', 'ease-in-quart', 'ease-out-quart', 'ease-in-out-quart', 'ease-in-quint', 'ease-out-quint', 'ease-in-out-quint', 'ease-in-expo', 'ease-out-expo', 'ease-in-out-expo', 'ease-in-circ', 'ease-out-circ', 'ease-in-out-circ'] - }, - gradientDirection: { - enums: ['to-bottom', 'to-top', 'to-left', 'to-right', 'to-bottom-right', 'to-bottom-left', 'to-top-right', 'to-top-left', 'to-right-bottom', 'to-left-bottom', 'to-right-top', 'to-left-top' // different order - ] - }, - - boundsExpansion: { - number: true, - multiple: true, - min: 0, - validate: function validate(valArr) { - var length = valArr.length; - return length === 1 || length === 2 || length === 4; - } - } - }; - var diff = { - zeroNonZero: function zeroNonZero(val1, val2) { - if ((val1 == null || val2 == null) && val1 !== val2) { - return true; // null cases could represent any value - } - if (val1 == 0 && val2 != 0) { - return true; - } else if (val1 != 0 && val2 == 0) { - return true; - } else { - return false; - } - }, - any: function any(val1, val2) { - return val1 != val2; - }, - emptyNonEmpty: function emptyNonEmpty(str1, str2) { - var empty1 = emptyString(str1); - var empty2 = emptyString(str2); - return empty1 && !empty2 || !empty1 && empty2; - } - }; - - // define visual style properties - // - // - n.b. adding a new group of props may require updates to updateStyleHints() - // - adding new props to an existing group gets handled automatically - - var t = styfn$2.types; - var mainLabel = [{ - name: 'label', - type: t.text, - triggersBounds: diff.any, - triggersZOrder: diff.emptyNonEmpty - }, { - name: 'text-rotation', - type: t.textRotation, - triggersBounds: diff.any - }, { - name: 'text-margin-x', - type: t.bidirectionalSize, - triggersBounds: diff.any - }, { - name: 'text-margin-y', - type: t.bidirectionalSize, - triggersBounds: diff.any - }]; - var sourceLabel = [{ - name: 'source-label', - type: t.text, - triggersBounds: diff.any - }, { - name: 'source-text-rotation', - type: t.textRotation, - triggersBounds: diff.any - }, { - name: 'source-text-margin-x', - type: t.bidirectionalSize, - triggersBounds: diff.any - }, { - name: 'source-text-margin-y', - type: t.bidirectionalSize, - triggersBounds: diff.any - }, { - name: 'source-text-offset', - type: t.size, - triggersBounds: diff.any - }]; - var targetLabel = [{ - name: 'target-label', - type: t.text, - triggersBounds: diff.any - }, { - name: 'target-text-rotation', - type: t.textRotation, - triggersBounds: diff.any - }, { - name: 'target-text-margin-x', - type: t.bidirectionalSize, - triggersBounds: diff.any - }, { - name: 'target-text-margin-y', - type: t.bidirectionalSize, - triggersBounds: diff.any - }, { - name: 'target-text-offset', - type: t.size, - triggersBounds: diff.any - }]; - var labelDimensions = [{ - name: 'font-family', - type: t.fontFamily, - triggersBounds: diff.any - }, { - name: 'font-style', - type: t.fontStyle, - triggersBounds: diff.any - }, { - name: 'font-weight', - type: t.fontWeight, - triggersBounds: diff.any - }, { - name: 'font-size', - type: t.size, - triggersBounds: diff.any - }, { - name: 'text-transform', - type: t.textTransform, - triggersBounds: diff.any - }, { - name: 'text-wrap', - type: t.textWrap, - triggersBounds: diff.any - }, { - name: 'text-overflow-wrap', - type: t.textOverflowWrap, - triggersBounds: diff.any - }, { - name: 'text-max-width', - type: t.size, - triggersBounds: diff.any - }, { - name: 'text-outline-width', - type: t.size, - triggersBounds: diff.any - }, { - name: 'line-height', - type: t.positiveNumber, - triggersBounds: diff.any - }]; - var commonLabel = [{ - name: 'text-valign', - type: t.valign, - triggersBounds: diff.any - }, { - name: 'text-halign', - type: t.halign, - triggersBounds: diff.any - }, { - name: 'color', - type: t.color - }, { - name: 'text-outline-color', - type: t.color - }, { - name: 'text-outline-opacity', - type: t.zeroOneNumber - }, { - name: 'text-background-color', - type: t.color - }, { - name: 'text-background-opacity', - type: t.zeroOneNumber - }, { - name: 'text-background-padding', - type: t.size, - triggersBounds: diff.any - }, { - name: 'text-border-opacity', - type: t.zeroOneNumber - }, { - name: 'text-border-color', - type: t.color - }, { - name: 'text-border-width', - type: t.size, - triggersBounds: diff.any - }, { - name: 'text-border-style', - type: t.borderStyle, - triggersBounds: diff.any - }, { - name: 'text-background-shape', - type: t.textBackgroundShape, - triggersBounds: diff.any - }, { - name: 'text-justification', - type: t.justification - }]; - var behavior = [{ - name: 'events', - type: t.bool, - triggersZOrder: diff.any - }, { - name: 'text-events', - type: t.bool, - triggersZOrder: diff.any - }]; - var visibility = [{ - name: 'display', - type: t.display, - triggersZOrder: diff.any, - triggersBounds: diff.any, - triggersBoundsOfConnectedEdges: true - }, { - name: 'visibility', - type: t.visibility, - triggersZOrder: diff.any - }, { - name: 'opacity', - type: t.zeroOneNumber, - triggersZOrder: diff.zeroNonZero - }, { - name: 'text-opacity', - type: t.zeroOneNumber - }, { - name: 'min-zoomed-font-size', - type: t.size - }, { - name: 'z-compound-depth', - type: t.zCompoundDepth, - triggersZOrder: diff.any - }, { - name: 'z-index-compare', - type: t.zIndexCompare, - triggersZOrder: diff.any - }, { - name: 'z-index', - type: t.number, - triggersZOrder: diff.any - }]; - var overlay = [{ - name: 'overlay-padding', - type: t.size, - triggersBounds: diff.any - }, { - name: 'overlay-color', - type: t.color - }, { - name: 'overlay-opacity', - type: t.zeroOneNumber, - triggersBounds: diff.zeroNonZero - }, { - name: 'overlay-shape', - type: t.overlayShape, - triggersBounds: diff.any - }]; - var underlay = [{ - name: 'underlay-padding', - type: t.size, - triggersBounds: diff.any - }, { - name: 'underlay-color', - type: t.color - }, { - name: 'underlay-opacity', - type: t.zeroOneNumber, - triggersBounds: diff.zeroNonZero - }, { - name: 'underlay-shape', - type: t.overlayShape, - triggersBounds: diff.any - }]; - var transition = [{ - name: 'transition-property', - type: t.propList - }, { - name: 'transition-duration', - type: t.time - }, { - name: 'transition-delay', - type: t.time - }, { - name: 'transition-timing-function', - type: t.easing - }]; - var nodeSizeHashOverride = function nodeSizeHashOverride(ele, parsedProp) { - if (parsedProp.value === 'label') { - return -ele.poolIndex(); // no hash key hits is using label size (hitrate for perf probably low anyway) - } else { - return parsedProp.pfValue; - } - }; - var nodeBody = [{ - name: 'height', - type: t.nodeSize, - triggersBounds: diff.any, - hashOverride: nodeSizeHashOverride - }, { - name: 'width', - type: t.nodeSize, - triggersBounds: diff.any, - hashOverride: nodeSizeHashOverride - }, { - name: 'shape', - type: t.nodeShape, - triggersBounds: diff.any - }, { - name: 'shape-polygon-points', - type: t.polygonPointList, - triggersBounds: diff.any - }, { - name: 'background-color', - type: t.color - }, { - name: 'background-fill', - type: t.fill - }, { - name: 'background-opacity', - type: t.zeroOneNumber - }, { - name: 'background-blacken', - type: t.nOneOneNumber - }, { - name: 'background-gradient-stop-colors', - type: t.colors - }, { - name: 'background-gradient-stop-positions', - type: t.percentages - }, { - name: 'background-gradient-direction', - type: t.gradientDirection - }, { - name: 'padding', - type: t.sizeMaybePercent, - triggersBounds: diff.any - }, { - name: 'padding-relative-to', - type: t.paddingRelativeTo, - triggersBounds: diff.any - }, { - name: 'bounds-expansion', - type: t.boundsExpansion, - triggersBounds: diff.any - }]; - var nodeBorder = [{ - name: 'border-color', - type: t.color - }, { - name: 'border-opacity', - type: t.zeroOneNumber - }, { - name: 'border-width', - type: t.size, - triggersBounds: diff.any - }, { - name: 'border-style', - type: t.borderStyle - }]; - var nodeOutline = [{ - name: 'outline-color', - type: t.color - }, { - name: 'outline-opacity', - type: t.zeroOneNumber - }, { - name: 'outline-width', - type: t.size, - triggersBounds: diff.any - }, { - name: 'outline-style', - type: t.borderStyle - }, { - name: 'outline-offset', - type: t.size, - triggersBounds: diff.any - }]; - var backgroundImage = [{ - name: 'background-image', - type: t.urls - }, { - name: 'background-image-crossorigin', - type: t.bgCrossOrigin - }, { - name: 'background-image-opacity', - type: t.zeroOneNumbers - }, { - name: 'background-image-containment', - type: t.bgContainment - }, { - name: 'background-image-smoothing', - type: t.bools - }, { - name: 'background-position-x', - type: t.bgPos - }, { - name: 'background-position-y', - type: t.bgPos - }, { - name: 'background-width-relative-to', - type: t.bgRelativeTo - }, { - name: 'background-height-relative-to', - type: t.bgRelativeTo - }, { - name: 'background-repeat', - type: t.bgRepeat - }, { - name: 'background-fit', - type: t.bgFit - }, { - name: 'background-clip', - type: t.bgClip - }, { - name: 'background-width', - type: t.bgWH - }, { - name: 'background-height', - type: t.bgWH - }, { - name: 'background-offset-x', - type: t.bgPos - }, { - name: 'background-offset-y', - type: t.bgPos - }]; - var compound = [{ - name: 'position', - type: t.position, - triggersBounds: diff.any - }, { - name: 'compound-sizing-wrt-labels', - type: t.compoundIncludeLabels, - triggersBounds: diff.any - }, { - name: 'min-width', - type: t.size, - triggersBounds: diff.any - }, { - name: 'min-width-bias-left', - type: t.sizeMaybePercent, - triggersBounds: diff.any - }, { - name: 'min-width-bias-right', - type: t.sizeMaybePercent, - triggersBounds: diff.any - }, { - name: 'min-height', - type: t.size, - triggersBounds: diff.any - }, { - name: 'min-height-bias-top', - type: t.sizeMaybePercent, - triggersBounds: diff.any - }, { - name: 'min-height-bias-bottom', - type: t.sizeMaybePercent, - triggersBounds: diff.any - }]; - var edgeLine = [{ - name: 'line-style', - type: t.lineStyle - }, { - name: 'line-color', - type: t.color - }, { - name: 'line-fill', - type: t.fill - }, { - name: 'line-cap', - type: t.lineCap - }, { - name: 'line-opacity', - type: t.zeroOneNumber - }, { - name: 'line-dash-pattern', - type: t.numbers - }, { - name: 'line-dash-offset', - type: t.number - }, { - name: 'line-gradient-stop-colors', - type: t.colors - }, { - name: 'line-gradient-stop-positions', - type: t.percentages - }, { - name: 'curve-style', - type: t.curveStyle, - triggersBounds: diff.any, - triggersBoundsOfParallelBeziers: true - }, { - name: 'haystack-radius', - type: t.zeroOneNumber, - triggersBounds: diff.any - }, { - name: 'source-endpoint', - type: t.edgeEndpoint, - triggersBounds: diff.any - }, { - name: 'target-endpoint', - type: t.edgeEndpoint, - triggersBounds: diff.any - }, { - name: 'control-point-step-size', - type: t.size, - triggersBounds: diff.any - }, { - name: 'control-point-distances', - type: t.bidirectionalSizes, - triggersBounds: diff.any - }, { - name: 'control-point-weights', - type: t.numbers, - triggersBounds: diff.any - }, { - name: 'segment-distances', - type: t.bidirectionalSizes, - triggersBounds: diff.any - }, { - name: 'segment-weights', - type: t.numbers, - triggersBounds: diff.any - }, { - name: 'taxi-turn', - type: t.bidirectionalSizeMaybePercent, - triggersBounds: diff.any - }, { - name: 'taxi-turn-min-distance', - type: t.size, - triggersBounds: diff.any - }, { - name: 'taxi-direction', - type: t.axisDirection, - triggersBounds: diff.any - }, { - name: 'edge-distances', - type: t.edgeDistances, - triggersBounds: diff.any - }, { - name: 'arrow-scale', - type: t.positiveNumber, - triggersBounds: diff.any - }, { - name: 'loop-direction', - type: t.angle, - triggersBounds: diff.any - }, { - name: 'loop-sweep', - type: t.angle, - triggersBounds: diff.any - }, { - name: 'source-distance-from-node', - type: t.size, - triggersBounds: diff.any - }, { - name: 'target-distance-from-node', - type: t.size, - triggersBounds: diff.any - }]; - var ghost = [{ - name: 'ghost', - type: t.bool, - triggersBounds: diff.any - }, { - name: 'ghost-offset-x', - type: t.bidirectionalSize, - triggersBounds: diff.any - }, { - name: 'ghost-offset-y', - type: t.bidirectionalSize, - triggersBounds: diff.any - }, { - name: 'ghost-opacity', - type: t.zeroOneNumber - }]; - var core = [{ - name: 'selection-box-color', - type: t.color - }, { - name: 'selection-box-opacity', - type: t.zeroOneNumber - }, { - name: 'selection-box-border-color', - type: t.color - }, { - name: 'selection-box-border-width', - type: t.size - }, { - name: 'active-bg-color', - type: t.color - }, { - name: 'active-bg-opacity', - type: t.zeroOneNumber - }, { - name: 'active-bg-size', - type: t.size - }, { - name: 'outside-texture-bg-color', - type: t.color - }, { - name: 'outside-texture-bg-opacity', - type: t.zeroOneNumber - }]; - - // pie backgrounds for nodes - var pie = []; - styfn$2.pieBackgroundN = 16; // because the pie properties are numbered, give access to a constant N (for renderer use) - pie.push({ - name: 'pie-size', - type: t.sizeMaybePercent - }); - for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { - pie.push({ - name: 'pie-' + i + '-background-color', - type: t.color - }); - pie.push({ - name: 'pie-' + i + '-background-size', - type: t.percent - }); - pie.push({ - name: 'pie-' + i + '-background-opacity', - type: t.zeroOneNumber - }); - } - - // edge arrows - var edgeArrow = []; - var arrowPrefixes = styfn$2.arrowPrefixes = ['source', 'mid-source', 'target', 'mid-target']; - [{ - name: 'arrow-shape', - type: t.arrowShape, - triggersBounds: diff.any - }, { - name: 'arrow-color', - type: t.color - }, { - name: 'arrow-fill', - type: t.arrowFill - }, { - name: 'arrow-width', - type: t.arrowWidth - }].forEach(function (prop) { - arrowPrefixes.forEach(function (prefix) { - var name = prefix + '-' + prop.name; - var type = prop.type, - triggersBounds = prop.triggersBounds; - edgeArrow.push({ - name: name, - type: type, - triggersBounds: triggersBounds - }); - }); - }, {}); - var props = styfn$2.properties = [].concat(behavior, transition, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, nodeOutline, backgroundImage, pie, compound, edgeLine, edgeArrow, core); - var propGroups = styfn$2.propertyGroups = { - // common to all eles - behavior: behavior, - transition: transition, - visibility: visibility, - overlay: overlay, - underlay: underlay, - ghost: ghost, - // labels - commonLabel: commonLabel, - labelDimensions: labelDimensions, - mainLabel: mainLabel, - sourceLabel: sourceLabel, - targetLabel: targetLabel, - // node props - nodeBody: nodeBody, - nodeBorder: nodeBorder, - nodeOutline: nodeOutline, - backgroundImage: backgroundImage, - pie: pie, - compound: compound, - // edge props - edgeLine: edgeLine, - edgeArrow: edgeArrow, - core: core - }; - var propGroupNames = styfn$2.propertyGroupNames = {}; - var propGroupKeys = styfn$2.propertyGroupKeys = Object.keys(propGroups); - propGroupKeys.forEach(function (key) { - propGroupNames[key] = propGroups[key].map(function (prop) { - return prop.name; - }); - propGroups[key].forEach(function (prop) { - return prop.groupKey = key; - }); - }); - - // define aliases - var aliases = styfn$2.aliases = [{ - name: 'content', - pointsTo: 'label' - }, { - name: 'control-point-distance', - pointsTo: 'control-point-distances' - }, { - name: 'control-point-weight', - pointsTo: 'control-point-weights' - }, { - name: 'edge-text-rotation', - pointsTo: 'text-rotation' - }, { - name: 'padding-left', - pointsTo: 'padding' - }, { - name: 'padding-right', - pointsTo: 'padding' - }, { - name: 'padding-top', - pointsTo: 'padding' - }, { - name: 'padding-bottom', - pointsTo: 'padding' - }]; - - // list of property names - styfn$2.propertyNames = props.map(function (p) { - return p.name; - }); - - // allow access of properties by name ( e.g. style.properties.height ) - for (var _i = 0; _i < props.length; _i++) { - var prop = props[_i]; - props[prop.name] = prop; // allow lookup by name - } - - // map aliases - for (var _i2 = 0; _i2 < aliases.length; _i2++) { - var alias = aliases[_i2]; - var pointsToProp = props[alias.pointsTo]; - var aliasProp = { - name: alias.name, - alias: true, - pointsTo: pointsToProp - }; - - // add alias prop for parsing - props.push(aliasProp); - props[alias.name] = aliasProp; // allow lookup by name - } -})(); - -styfn$2.getDefaultProperty = function (name) { - return this.getDefaultProperties()[name]; -}; -styfn$2.getDefaultProperties = function () { - var _p = this._private; - if (_p.defaultProperties != null) { - return _p.defaultProperties; - } - var rawProps = extend({ - // core props - 'selection-box-color': '#ddd', - 'selection-box-opacity': 0.65, - 'selection-box-border-color': '#aaa', - 'selection-box-border-width': 1, - 'active-bg-color': 'black', - 'active-bg-opacity': 0.15, - 'active-bg-size': 30, - 'outside-texture-bg-color': '#000', - 'outside-texture-bg-opacity': 0.125, - // common node/edge props - 'events': 'yes', - 'text-events': 'no', - 'text-valign': 'top', - 'text-halign': 'center', - 'text-justification': 'auto', - 'line-height': 1, - 'color': '#000', - 'text-outline-color': '#000', - 'text-outline-width': 0, - 'text-outline-opacity': 1, - 'text-opacity': 1, - 'text-decoration': 'none', - 'text-transform': 'none', - 'text-wrap': 'none', - 'text-overflow-wrap': 'whitespace', - 'text-max-width': 9999, - 'text-background-color': '#000', - 'text-background-opacity': 0, - 'text-background-shape': 'rectangle', - 'text-background-padding': 0, - 'text-border-opacity': 0, - 'text-border-width': 0, - 'text-border-style': 'solid', - 'text-border-color': '#000', - 'font-family': 'Helvetica Neue, Helvetica, sans-serif', - 'font-style': 'normal', - 'font-weight': 'normal', - 'font-size': 16, - 'min-zoomed-font-size': 0, - 'text-rotation': 'none', - 'source-text-rotation': 'none', - 'target-text-rotation': 'none', - 'visibility': 'visible', - 'display': 'element', - 'opacity': 1, - 'z-compound-depth': 'auto', - 'z-index-compare': 'auto', - 'z-index': 0, - 'label': '', - 'text-margin-x': 0, - 'text-margin-y': 0, - 'source-label': '', - 'source-text-offset': 0, - 'source-text-margin-x': 0, - 'source-text-margin-y': 0, - 'target-label': '', - 'target-text-offset': 0, - 'target-text-margin-x': 0, - 'target-text-margin-y': 0, - 'overlay-opacity': 0, - 'overlay-color': '#000', - 'overlay-padding': 10, - 'overlay-shape': 'round-rectangle', - 'underlay-opacity': 0, - 'underlay-color': '#000', - 'underlay-padding': 10, - 'underlay-shape': 'round-rectangle', - 'transition-property': 'none', - 'transition-duration': 0, - 'transition-delay': 0, - 'transition-timing-function': 'linear', - // node props - 'background-blacken': 0, - 'background-color': '#999', - 'background-fill': 'solid', - 'background-opacity': 1, - 'background-image': 'none', - 'background-image-crossorigin': 'anonymous', - 'background-image-opacity': 1, - 'background-image-containment': 'inside', - 'background-image-smoothing': 'yes', - 'background-position-x': '50%', - 'background-position-y': '50%', - 'background-offset-x': 0, - 'background-offset-y': 0, - 'background-width-relative-to': 'include-padding', - 'background-height-relative-to': 'include-padding', - 'background-repeat': 'no-repeat', - 'background-fit': 'none', - 'background-clip': 'node', - 'background-width': 'auto', - 'background-height': 'auto', - 'border-color': '#000', - 'border-opacity': 1, - 'border-width': 0, - 'border-style': 'solid', - 'outline-color': '#999', - 'outline-opacity': 1, - 'outline-width': 0, - 'outline-offset': 0, - 'outline-style': 'solid', - 'height': 30, - 'width': 30, - 'shape': 'ellipse', - 'shape-polygon-points': '-1, -1, 1, -1, 1, 1, -1, 1', - 'bounds-expansion': 0, - // node gradient - 'background-gradient-direction': 'to-bottom', - 'background-gradient-stop-colors': '#999', - 'background-gradient-stop-positions': '0%', - // ghost props - 'ghost': 'no', - 'ghost-offset-y': 0, - 'ghost-offset-x': 0, - 'ghost-opacity': 0, - // compound props - 'padding': 0, - 'padding-relative-to': 'width', - 'position': 'origin', - 'compound-sizing-wrt-labels': 'include', - 'min-width': 0, - 'min-width-bias-left': 0, - 'min-width-bias-right': 0, - 'min-height': 0, - 'min-height-bias-top': 0, - 'min-height-bias-bottom': 0 - }, { - // node pie bg - 'pie-size': '100%' - }, [{ - name: 'pie-{{i}}-background-color', - value: 'black' - }, { - name: 'pie-{{i}}-background-size', - value: '0%' - }, { - name: 'pie-{{i}}-background-opacity', - value: 1 - }].reduce(function (css, prop) { - for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { - var name = prop.name.replace('{{i}}', i); - var val = prop.value; - css[name] = val; - } - return css; - }, {}), { - // edge props - 'line-style': 'solid', - 'line-color': '#999', - 'line-fill': 'solid', - 'line-cap': 'butt', - 'line-opacity': 1, - 'line-gradient-stop-colors': '#999', - 'line-gradient-stop-positions': '0%', - 'control-point-step-size': 40, - 'control-point-weights': 0.5, - 'segment-weights': 0.5, - 'segment-distances': 20, - 'taxi-turn': '50%', - 'taxi-turn-min-distance': 10, - 'taxi-direction': 'auto', - 'edge-distances': 'intersection', - 'curve-style': 'haystack', - 'haystack-radius': 0, - 'arrow-scale': 1, - 'loop-direction': '-45deg', - 'loop-sweep': '-90deg', - 'source-distance-from-node': 0, - 'target-distance-from-node': 0, - 'source-endpoint': 'outside-to-node', - 'target-endpoint': 'outside-to-node', - 'line-dash-pattern': [6, 3], - 'line-dash-offset': 0 - }, [{ - name: 'arrow-shape', - value: 'none' - }, { - name: 'arrow-color', - value: '#999' - }, { - name: 'arrow-fill', - value: 'filled' - }, { - name: 'arrow-width', - value: 1 - }].reduce(function (css, prop) { - styfn$2.arrowPrefixes.forEach(function (prefix) { - var name = prefix + '-' + prop.name; - var val = prop.value; - css[name] = val; - }); - return css; - }, {})); - var parsedProps = {}; - for (var i = 0; i < this.properties.length; i++) { - var prop = this.properties[i]; - if (prop.pointsTo) { - continue; - } - var name = prop.name; - var val = rawProps[name]; - var parsedProp = this.parse(name, val); - parsedProps[name] = parsedProp; - } - _p.defaultProperties = parsedProps; - return _p.defaultProperties; -}; -styfn$2.addDefaultStylesheet = function () { - this.selector(':parent').css({ - 'shape': 'rectangle', - 'padding': 10, - 'background-color': '#eee', - 'border-color': '#ccc', - 'border-width': 1 - }).selector('edge').css({ - 'width': 3 - }).selector(':loop').css({ - 'curve-style': 'bezier' - }).selector('edge:compound').css({ - 'curve-style': 'bezier', - 'source-endpoint': 'outside-to-line', - 'target-endpoint': 'outside-to-line' - }).selector(':selected').css({ - 'background-color': '#0169D9', - 'line-color': '#0169D9', - 'source-arrow-color': '#0169D9', - 'target-arrow-color': '#0169D9', - 'mid-source-arrow-color': '#0169D9', - 'mid-target-arrow-color': '#0169D9' - }).selector(':parent:selected').css({ - 'background-color': '#CCE1F9', - 'border-color': '#aec8e5' - }).selector(':active').css({ - 'overlay-color': 'black', - 'overlay-padding': 10, - 'overlay-opacity': 0.25 - }); - this.defaultLength = this.length; -}; - -var styfn$1 = {}; - -// a caching layer for property parsing -styfn$1.parse = function (name, value, propIsBypass, propIsFlat) { - var self = this; - - // function values can't be cached in all cases, and there isn't much benefit of caching them anyway - if (fn$6(value)) { - return self.parseImplWarn(name, value, propIsBypass, propIsFlat); - } - var flatKey = propIsFlat === 'mapping' || propIsFlat === true || propIsFlat === false || propIsFlat == null ? 'dontcare' : propIsFlat; - var bypassKey = propIsBypass ? 't' : 'f'; - var valueKey = '' + value; - var argHash = hashStrings(name, valueKey, bypassKey, flatKey); - var propCache = self.propCache = self.propCache || []; - var ret; - if (!(ret = propCache[argHash])) { - ret = propCache[argHash] = self.parseImplWarn(name, value, propIsBypass, propIsFlat); - } - - // - bypasses can't be shared b/c the value can be changed by animations or otherwise overridden - // - mappings can't be shared b/c mappings are per-element - if (propIsBypass || propIsFlat === 'mapping') { - // need a copy since props are mutated later in their lifecycles - ret = copy(ret); - if (ret) { - ret.value = copy(ret.value); // because it could be an array, e.g. colour - } - } - - return ret; -}; -styfn$1.parseImplWarn = function (name, value, propIsBypass, propIsFlat) { - var prop = this.parseImpl(name, value, propIsBypass, propIsFlat); - if (!prop && value != null) { - warn("The style property `".concat(name, ": ").concat(value, "` is invalid")); - } - if (prop && (prop.name === 'width' || prop.name === 'height') && value === 'label') { - warn('The style value of `label` is deprecated for `' + prop.name + '`'); - } - return prop; -}; - -// parse a property; return null on invalid; return parsed property otherwise -// fields : -// - name : the name of the property -// - value : the parsed, native-typed value of the property -// - strValue : a string value that represents the property value in valid css -// - bypass : true iff the property is a bypass property -styfn$1.parseImpl = function (name, value, propIsBypass, propIsFlat) { - var self = this; - name = camel2dash(name); // make sure the property name is in dash form (e.g. 'property-name' not 'propertyName') - - var property = self.properties[name]; - var passedValue = value; - var types = self.types; - if (!property) { - return null; - } // return null on property of unknown name - if (value === undefined) { - return null; - } // can't assign undefined - - // the property may be an alias - if (property.alias) { - property = property.pointsTo; - name = property.name; - } - var valueIsString = string(value); - if (valueIsString) { - // trim the value to make parsing easier - value = value.trim(); - } - var type = property.type; - if (!type) { - return null; - } // no type, no luck - - // check if bypass is null or empty string (i.e. indication to delete bypass property) - if (propIsBypass && (value === '' || value === null)) { - return { - name: name, - value: value, - bypass: true, - deleteBypass: true - }; - } - - // check if value is a function used as a mapper - if (fn$6(value)) { - return { - name: name, - value: value, - strValue: 'fn', - mapped: types.fn, - bypass: propIsBypass - }; - } - - // check if value is mapped - var data, mapData; - if (!valueIsString || propIsFlat || value.length < 7 || value[1] !== 'a') ; else if (value.length >= 7 && value[0] === 'd' && (data = new RegExp(types.data.regex).exec(value))) { - if (propIsBypass) { - return false; - } // mappers not allowed in bypass - - var mapped = types.data; - return { - name: name, - value: data, - strValue: '' + value, - mapped: mapped, - field: data[1], - bypass: propIsBypass - }; - } else if (value.length >= 10 && value[0] === 'm' && (mapData = new RegExp(types.mapData.regex).exec(value))) { - if (propIsBypass) { - return false; - } // mappers not allowed in bypass - if (type.multiple) { - return false; - } // impossible to map to num - - var _mapped = types.mapData; - - // we can map only if the type is a colour or a number - if (!(type.color || type.number)) { - return false; - } - var valueMin = this.parse(name, mapData[4]); // parse to validate - if (!valueMin || valueMin.mapped) { - return false; - } // can't be invalid or mapped - - var valueMax = this.parse(name, mapData[5]); // parse to validate - if (!valueMax || valueMax.mapped) { - return false; - } // can't be invalid or mapped - - // check if valueMin and valueMax are the same - if (valueMin.pfValue === valueMax.pfValue || valueMin.strValue === valueMax.strValue) { - warn('`' + name + ': ' + value + '` is not a valid mapper because the output range is zero; converting to `' + name + ': ' + valueMin.strValue + '`'); - return this.parse(name, valueMin.strValue); // can't make much of a mapper without a range - } else if (type.color) { - var c1 = valueMin.value; - var c2 = valueMax.value; - var same = c1[0] === c2[0] // red - && c1[1] === c2[1] // green - && c1[2] === c2[2] // blue - && ( - // optional alpha - c1[3] === c2[3] // same alpha outright - || (c1[3] == null || c1[3] === 1 // full opacity for colour 1? - ) && (c2[3] == null || c2[3] === 1) // full opacity for colour 2? - ); - - if (same) { - return false; - } // can't make a mapper without a range - } - - return { - name: name, - value: mapData, - strValue: '' + value, - mapped: _mapped, - field: mapData[1], - fieldMin: parseFloat(mapData[2]), - // min & max are numeric - fieldMax: parseFloat(mapData[3]), - valueMin: valueMin.value, - valueMax: valueMax.value, - bypass: propIsBypass - }; - } - if (type.multiple && propIsFlat !== 'multiple') { - var vals; - if (valueIsString) { - vals = value.split(/\s+/); - } else if (array(value)) { - vals = value; - } else { - vals = [value]; - } - if (type.evenMultiple && vals.length % 2 !== 0) { - return null; - } - var valArr = []; - var unitsArr = []; - var pfValArr = []; - var strVal = ''; - var hasEnum = false; - for (var i = 0; i < vals.length; i++) { - var p = self.parse(name, vals[i], propIsBypass, 'multiple'); - hasEnum = hasEnum || string(p.value); - valArr.push(p.value); - pfValArr.push(p.pfValue != null ? p.pfValue : p.value); - unitsArr.push(p.units); - strVal += (i > 0 ? ' ' : '') + p.strValue; - } - if (type.validate && !type.validate(valArr, unitsArr)) { - return null; - } - if (type.singleEnum && hasEnum) { - if (valArr.length === 1 && string(valArr[0])) { - return { - name: name, - value: valArr[0], - strValue: valArr[0], - bypass: propIsBypass - }; - } else { - return null; - } - } - return { - name: name, - value: valArr, - pfValue: pfValArr, - strValue: strVal, - bypass: propIsBypass, - units: unitsArr - }; - } - - // several types also allow enums - var checkEnums = function checkEnums() { - for (var _i = 0; _i < type.enums.length; _i++) { - var en = type.enums[_i]; - if (en === value) { - return { - name: name, - value: value, - strValue: '' + value, - bypass: propIsBypass - }; - } - } - return null; - }; - - // check the type and return the appropriate object - if (type.number) { - var units; - var implicitUnits = 'px'; // not set => px - - if (type.units) { - // use specified units if set - units = type.units; - } - if (type.implicitUnits) { - implicitUnits = type.implicitUnits; - } - if (!type.unitless) { - if (valueIsString) { - var unitsRegex = 'px|em' + (type.allowPercent ? '|\\%' : ''); - if (units) { - unitsRegex = units; - } // only allow explicit units if so set - var match = value.match('^(' + number + ')(' + unitsRegex + ')?' + '$'); - if (match) { - value = match[1]; - units = match[2] || implicitUnits; - } - } else if (!units || type.implicitUnits) { - units = implicitUnits; // implicitly px if unspecified - } - } - - value = parseFloat(value); - - // if not a number and enums not allowed, then the value is invalid - if (isNaN(value) && type.enums === undefined) { - return null; - } - - // check if this number type also accepts special keywords in place of numbers - // (i.e. `left`, `auto`, etc) - if (isNaN(value) && type.enums !== undefined) { - value = passedValue; - return checkEnums(); - } - - // check if value must be an integer - if (type.integer && !integer(value)) { - return null; - } - - // check value is within range - if (type.min !== undefined && (value < type.min || type.strictMin && value === type.min) || type.max !== undefined && (value > type.max || type.strictMax && value === type.max)) { - return null; - } - var ret = { - name: name, - value: value, - strValue: '' + value + (units ? units : ''), - units: units, - bypass: propIsBypass - }; - - // normalise value in pixels - if (type.unitless || units !== 'px' && units !== 'em') { - ret.pfValue = value; - } else { - ret.pfValue = units === 'px' || !units ? value : this.getEmSizeInPixels() * value; - } - - // normalise value in ms - if (units === 'ms' || units === 's') { - ret.pfValue = units === 'ms' ? value : 1000 * value; - } - - // normalise value in rad - if (units === 'deg' || units === 'rad') { - ret.pfValue = units === 'rad' ? value : deg2rad(value); - } - - // normalize value in % - if (units === '%') { - ret.pfValue = value / 100; - } - return ret; - } else if (type.propList) { - var props = []; - var propsStr = '' + value; - if (propsStr === 'none') ; else { - // go over each prop - - var propsSplit = propsStr.split(/\s*,\s*|\s+/); - for (var _i2 = 0; _i2 < propsSplit.length; _i2++) { - var propName = propsSplit[_i2].trim(); - if (self.properties[propName]) { - props.push(propName); - } else { - warn('`' + propName + '` is not a valid property name'); - } - } - if (props.length === 0) { - return null; - } - } - return { - name: name, - value: props, - strValue: props.length === 0 ? 'none' : props.join(' '), - bypass: propIsBypass - }; - } else if (type.color) { - var tuple = color2tuple(value); - if (!tuple) { - return null; - } - return { - name: name, - value: tuple, - pfValue: tuple, - strValue: 'rgb(' + tuple[0] + ',' + tuple[1] + ',' + tuple[2] + ')', - // n.b. no spaces b/c of multiple support - bypass: propIsBypass - }; - } else if (type.regex || type.regexes) { - // first check enums - if (type.enums) { - var enumProp = checkEnums(); - if (enumProp) { - return enumProp; - } - } - var regexes = type.regexes ? type.regexes : [type.regex]; - for (var _i3 = 0; _i3 < regexes.length; _i3++) { - var regex = new RegExp(regexes[_i3]); // make a regex from the type string - var m = regex.exec(value); - if (m) { - // regex matches - return { - name: name, - value: type.singleRegexMatchValue ? m[1] : m, - strValue: '' + value, - bypass: propIsBypass - }; - } - } - return null; // didn't match any - } else if (type.string) { - // just return - return { - name: name, - value: '' + value, - strValue: '' + value, - bypass: propIsBypass - }; - } else if (type.enums) { - // check enums last because it's a combo type in others - return checkEnums(); - } else { - return null; // not a type we can handle - } -}; - -var Style = function Style(cy) { - if (!(this instanceof Style)) { - return new Style(cy); - } - if (!core(cy)) { - error('A style must have a core reference'); - return; - } - this._private = { - cy: cy, - coreStyle: {} - }; - this.length = 0; - this.resetToDefault(); -}; -var styfn = Style.prototype; -styfn.instanceString = function () { - return 'style'; -}; - -// remove all contexts -styfn.clear = function () { - var _p = this._private; - var cy = _p.cy; - var eles = cy.elements(); - for (var i = 0; i < this.length; i++) { - this[i] = undefined; - } - this.length = 0; - _p.contextStyles = {}; - _p.propDiffs = {}; - this.cleanElements(eles, true); - eles.forEach(function (ele) { - var ele_p = ele[0]._private; - ele_p.styleDirty = true; - ele_p.appliedInitStyle = false; - }); - return this; // chaining -}; - -styfn.resetToDefault = function () { - this.clear(); - this.addDefaultStylesheet(); - return this; -}; - -// builds a style object for the 'core' selector -styfn.core = function (propName) { - return this._private.coreStyle[propName] || this.getDefaultProperty(propName); -}; - -// create a new context from the specified selector string and switch to that context -styfn.selector = function (selectorStr) { - // 'core' is a special case and does not need a selector - var selector = selectorStr === 'core' ? null : new Selector(selectorStr); - var i = this.length++; // new context means new index - this[i] = { - selector: selector, - properties: [], - mappedProperties: [], - index: i - }; - return this; // chaining -}; - -// add one or many css rules to the current context -styfn.css = function () { - var self = this; - var args = arguments; - if (args.length === 1) { - var map = args[0]; - for (var i = 0; i < self.properties.length; i++) { - var prop = self.properties[i]; - var mapVal = map[prop.name]; - if (mapVal === undefined) { - mapVal = map[dash2camel(prop.name)]; - } - if (mapVal !== undefined) { - this.cssRule(prop.name, mapVal); - } - } - } else if (args.length === 2) { - this.cssRule(args[0], args[1]); - } - - // do nothing if args are invalid - - return this; // chaining -}; - -styfn.style = styfn.css; - -// add a single css rule to the current context -styfn.cssRule = function (name, value) { - // name-value pair - var property = this.parse(name, value); - - // add property to current context if valid - if (property) { - var i = this.length - 1; - this[i].properties.push(property); - this[i].properties[property.name] = property; // allow access by name as well - - if (property.name.match(/pie-(\d+)-background-size/) && property.value) { - this._private.hasPie = true; - } - if (property.mapped) { - this[i].mappedProperties.push(property); - } - - // add to core style if necessary - var currentSelectorIsCore = !this[i].selector; - if (currentSelectorIsCore) { - this._private.coreStyle[property.name] = property; - } - } - return this; // chaining -}; - -styfn.append = function (style) { - if (stylesheet(style)) { - style.appendToStyle(this); - } else if (array(style)) { - this.appendFromJson(style); - } else if (string(style)) { - this.appendFromString(style); - } // you probably wouldn't want to append a Style, since you'd duplicate the default parts - - return this; -}; - -// static function -Style.fromJson = function (cy, json) { - var style = new Style(cy); - style.fromJson(json); - return style; -}; -Style.fromString = function (cy, string) { - return new Style(cy).fromString(string); -}; -[styfn$8, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1].forEach(function (props) { - extend(styfn, props); -}); -Style.types = styfn.types; -Style.properties = styfn.properties; -Style.propertyGroups = styfn.propertyGroups; -Style.propertyGroupNames = styfn.propertyGroupNames; -Style.propertyGroupKeys = styfn.propertyGroupKeys; - -var corefn$2 = { - style: function style(newStyle) { - if (newStyle) { - var s = this.setStyle(newStyle); - s.update(); - } - return this._private.style; - }, - setStyle: function setStyle(style) { - var _p = this._private; - if (stylesheet(style)) { - _p.style = style.generateStyle(this); - } else if (array(style)) { - _p.style = Style.fromJson(this, style); - } else if (string(style)) { - _p.style = Style.fromString(this, style); - } else { - _p.style = Style(this); - } - return _p.style; - }, - // e.g. cy.data() changed => recalc ele mappers - updateStyle: function updateStyle() { - this.mutableElements().updateStyle(); // just send to all eles - } -}; - -var defaultSelectionType = 'single'; -var corefn$1 = { - autolock: function autolock(bool) { - if (bool !== undefined) { - this._private.autolock = bool ? true : false; - } else { - return this._private.autolock; - } - return this; // chaining - }, - - autoungrabify: function autoungrabify(bool) { - if (bool !== undefined) { - this._private.autoungrabify = bool ? true : false; - } else { - return this._private.autoungrabify; - } - return this; // chaining - }, - - autounselectify: function autounselectify(bool) { - if (bool !== undefined) { - this._private.autounselectify = bool ? true : false; - } else { - return this._private.autounselectify; - } - return this; // chaining - }, - - selectionType: function selectionType(selType) { - var _p = this._private; - if (_p.selectionType == null) { - _p.selectionType = defaultSelectionType; - } - if (selType !== undefined) { - if (selType === 'additive' || selType === 'single') { - _p.selectionType = selType; - } - } else { - return _p.selectionType; - } - return this; - }, - panningEnabled: function panningEnabled(bool) { - if (bool !== undefined) { - this._private.panningEnabled = bool ? true : false; - } else { - return this._private.panningEnabled; - } - return this; // chaining - }, - - userPanningEnabled: function userPanningEnabled(bool) { - if (bool !== undefined) { - this._private.userPanningEnabled = bool ? true : false; - } else { - return this._private.userPanningEnabled; - } - return this; // chaining - }, - - zoomingEnabled: function zoomingEnabled(bool) { - if (bool !== undefined) { - this._private.zoomingEnabled = bool ? true : false; - } else { - return this._private.zoomingEnabled; - } - return this; // chaining - }, - - userZoomingEnabled: function userZoomingEnabled(bool) { - if (bool !== undefined) { - this._private.userZoomingEnabled = bool ? true : false; - } else { - return this._private.userZoomingEnabled; - } - return this; // chaining - }, - - boxSelectionEnabled: function boxSelectionEnabled(bool) { - if (bool !== undefined) { - this._private.boxSelectionEnabled = bool ? true : false; - } else { - return this._private.boxSelectionEnabled; - } - return this; // chaining - }, - - pan: function pan() { - var args = arguments; - var pan = this._private.pan; - var dim, val, dims, x, y; - switch (args.length) { - case 0: - // .pan() - return pan; - case 1: - if (string(args[0])) { - // .pan('x') - dim = args[0]; - return pan[dim]; - } else if (plainObject(args[0])) { - // .pan({ x: 0, y: 100 }) - if (!this._private.panningEnabled) { - return this; - } - dims = args[0]; - x = dims.x; - y = dims.y; - if (number$1(x)) { - pan.x = x; - } - if (number$1(y)) { - pan.y = y; - } - this.emit('pan viewport'); - } - break; - case 2: - // .pan('x', 100) - if (!this._private.panningEnabled) { - return this; - } - dim = args[0]; - val = args[1]; - if ((dim === 'x' || dim === 'y') && number$1(val)) { - pan[dim] = val; - } - this.emit('pan viewport'); - break; - // invalid - } - - this.notify('viewport'); - return this; // chaining - }, - - panBy: function panBy(arg0, arg1) { - var args = arguments; - var pan = this._private.pan; - var dim, val, dims, x, y; - if (!this._private.panningEnabled) { - return this; - } - switch (args.length) { - case 1: - if (plainObject(arg0)) { - // .panBy({ x: 0, y: 100 }) - dims = args[0]; - x = dims.x; - y = dims.y; - if (number$1(x)) { - pan.x += x; - } - if (number$1(y)) { - pan.y += y; - } - this.emit('pan viewport'); - } - break; - case 2: - // .panBy('x', 100) - dim = arg0; - val = arg1; - if ((dim === 'x' || dim === 'y') && number$1(val)) { - pan[dim] += val; - } - this.emit('pan viewport'); - break; - // invalid - } - - this.notify('viewport'); - return this; // chaining - }, - - fit: function fit(elements, padding) { - var viewportState = this.getFitViewport(elements, padding); - if (viewportState) { - var _p = this._private; - _p.zoom = viewportState.zoom; - _p.pan = viewportState.pan; - this.emit('pan zoom viewport'); - this.notify('viewport'); - } - return this; // chaining - }, - - getFitViewport: function getFitViewport(elements, padding) { - if (number$1(elements) && padding === undefined) { - // elements is optional - padding = elements; - elements = undefined; - } - if (!this._private.panningEnabled || !this._private.zoomingEnabled) { - return; - } - var bb; - if (string(elements)) { - var sel = elements; - elements = this.$(sel); - } else if (boundingBox(elements)) { - // assume bb - var bbe = elements; - bb = { - x1: bbe.x1, - y1: bbe.y1, - x2: bbe.x2, - y2: bbe.y2 - }; - bb.w = bb.x2 - bb.x1; - bb.h = bb.y2 - bb.y1; - } else if (!elementOrCollection(elements)) { - elements = this.mutableElements(); - } - if (elementOrCollection(elements) && elements.empty()) { - return; - } // can't fit to nothing - - bb = bb || elements.boundingBox(); - var w = this.width(); - var h = this.height(); - var zoom; - padding = number$1(padding) ? padding : 0; - if (!isNaN(w) && !isNaN(h) && w > 0 && h > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) { - zoom = Math.min((w - 2 * padding) / bb.w, (h - 2 * padding) / bb.h); - - // crop zoom - zoom = zoom > this._private.maxZoom ? this._private.maxZoom : zoom; - zoom = zoom < this._private.minZoom ? this._private.minZoom : zoom; - var pan = { - // now pan to middle - x: (w - zoom * (bb.x1 + bb.x2)) / 2, - y: (h - zoom * (bb.y1 + bb.y2)) / 2 - }; - return { - zoom: zoom, - pan: pan - }; - } - return; - }, - zoomRange: function zoomRange(min, max) { - var _p = this._private; - if (max == null) { - var opts = min; - min = opts.min; - max = opts.max; - } - if (number$1(min) && number$1(max) && min <= max) { - _p.minZoom = min; - _p.maxZoom = max; - } else if (number$1(min) && max === undefined && min <= _p.maxZoom) { - _p.minZoom = min; - } else if (number$1(max) && min === undefined && max >= _p.minZoom) { - _p.maxZoom = max; - } - return this; - }, - minZoom: function minZoom(zoom) { - if (zoom === undefined) { - return this._private.minZoom; - } else { - return this.zoomRange({ - min: zoom - }); - } - }, - maxZoom: function maxZoom(zoom) { - if (zoom === undefined) { - return this._private.maxZoom; - } else { - return this.zoomRange({ - max: zoom - }); - } - }, - getZoomedViewport: function getZoomedViewport(params) { - var _p = this._private; - var currentPan = _p.pan; - var currentZoom = _p.zoom; - var pos; // in rendered px - var zoom; - var bail = false; - if (!_p.zoomingEnabled) { - // zooming disabled - bail = true; - } - if (number$1(params)) { - // then set the zoom - zoom = params; - } else if (plainObject(params)) { - // then zoom about a point - zoom = params.level; - if (params.position != null) { - pos = modelToRenderedPosition(params.position, currentZoom, currentPan); - } else if (params.renderedPosition != null) { - pos = params.renderedPosition; - } - if (pos != null && !_p.panningEnabled) { - // panning disabled - bail = true; - } - } - - // crop zoom - zoom = zoom > _p.maxZoom ? _p.maxZoom : zoom; - zoom = zoom < _p.minZoom ? _p.minZoom : zoom; - - // can't zoom with invalid params - if (bail || !number$1(zoom) || zoom === currentZoom || pos != null && (!number$1(pos.x) || !number$1(pos.y))) { - return null; - } - if (pos != null) { - // set zoom about position - var pan1 = currentPan; - var zoom1 = currentZoom; - var zoom2 = zoom; - var pan2 = { - x: -zoom2 / zoom1 * (pos.x - pan1.x) + pos.x, - y: -zoom2 / zoom1 * (pos.y - pan1.y) + pos.y - }; - return { - zoomed: true, - panned: true, - zoom: zoom2, - pan: pan2 - }; - } else { - // just set the zoom - return { - zoomed: true, - panned: false, - zoom: zoom, - pan: currentPan - }; - } - }, - zoom: function zoom(params) { - if (params === undefined) { - // get - return this._private.zoom; - } else { - // set - var vp = this.getZoomedViewport(params); - var _p = this._private; - if (vp == null || !vp.zoomed) { - return this; - } - _p.zoom = vp.zoom; - if (vp.panned) { - _p.pan.x = vp.pan.x; - _p.pan.y = vp.pan.y; - } - this.emit('zoom' + (vp.panned ? ' pan' : '') + ' viewport'); - this.notify('viewport'); - return this; // chaining - } - }, - - viewport: function viewport(opts) { - var _p = this._private; - var zoomDefd = true; - var panDefd = true; - var events = []; // to trigger - var zoomFailed = false; - var panFailed = false; - if (!opts) { - return this; - } - if (!number$1(opts.zoom)) { - zoomDefd = false; - } - if (!plainObject(opts.pan)) { - panDefd = false; - } - if (!zoomDefd && !panDefd) { - return this; - } - if (zoomDefd) { - var z = opts.zoom; - if (z < _p.minZoom || z > _p.maxZoom || !_p.zoomingEnabled) { - zoomFailed = true; - } else { - _p.zoom = z; - events.push('zoom'); - } - } - if (panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled) { - var p = opts.pan; - if (number$1(p.x)) { - _p.pan.x = p.x; - panFailed = false; - } - if (number$1(p.y)) { - _p.pan.y = p.y; - panFailed = false; - } - if (!panFailed) { - events.push('pan'); - } - } - if (events.length > 0) { - events.push('viewport'); - this.emit(events.join(' ')); - this.notify('viewport'); - } - return this; // chaining - }, - - center: function center(elements) { - var pan = this.getCenterPan(elements); - if (pan) { - this._private.pan = pan; - this.emit('pan viewport'); - this.notify('viewport'); - } - return this; // chaining - }, - - getCenterPan: function getCenterPan(elements, zoom) { - if (!this._private.panningEnabled) { - return; - } - if (string(elements)) { - var selector = elements; - elements = this.mutableElements().filter(selector); - } else if (!elementOrCollection(elements)) { - elements = this.mutableElements(); - } - if (elements.length === 0) { - return; - } // can't centre pan to nothing - - var bb = elements.boundingBox(); - var w = this.width(); - var h = this.height(); - zoom = zoom === undefined ? this._private.zoom : zoom; - var pan = { - // middle - x: (w - zoom * (bb.x1 + bb.x2)) / 2, - y: (h - zoom * (bb.y1 + bb.y2)) / 2 - }; - return pan; - }, - reset: function reset() { - if (!this._private.panningEnabled || !this._private.zoomingEnabled) { - return this; - } - this.viewport({ - pan: { - x: 0, - y: 0 - }, - zoom: 1 - }); - return this; // chaining - }, - - invalidateSize: function invalidateSize() { - this._private.sizeCache = null; - }, - size: function size() { - var _p = this._private; - var container = _p.container; - var cy = this; - return _p.sizeCache = _p.sizeCache || (container ? function () { - var style = cy.window().getComputedStyle(container); - var val = function val(name) { - return parseFloat(style.getPropertyValue(name)); - }; - return { - width: container.clientWidth - val('padding-left') - val('padding-right'), - height: container.clientHeight - val('padding-top') - val('padding-bottom') - }; - }() : { - // fallback if no container (not 0 b/c can be used for dividing etc) - width: 1, - height: 1 - }); - }, - width: function width() { - return this.size().width; - }, - height: function height() { - return this.size().height; - }, - extent: function extent() { - var pan = this._private.pan; - var zoom = this._private.zoom; - var rb = this.renderedExtent(); - var b = { - x1: (rb.x1 - pan.x) / zoom, - x2: (rb.x2 - pan.x) / zoom, - y1: (rb.y1 - pan.y) / zoom, - y2: (rb.y2 - pan.y) / zoom - }; - b.w = b.x2 - b.x1; - b.h = b.y2 - b.y1; - return b; - }, - renderedExtent: function renderedExtent() { - var width = this.width(); - var height = this.height(); - return { - x1: 0, - y1: 0, - x2: width, - y2: height, - w: width, - h: height - }; - }, - multiClickDebounceTime: function multiClickDebounceTime(_int) { - if (_int) this._private.multiClickDebounceTime = _int;else return this._private.multiClickDebounceTime; - return this; // chaining - } -}; - -// aliases -corefn$1.centre = corefn$1.center; - -// backwards compatibility -corefn$1.autolockNodes = corefn$1.autolock; -corefn$1.autoungrabifyNodes = corefn$1.autoungrabify; - -var fn = { - data: define.data({ - field: 'data', - bindingEvent: 'data', - allowBinding: true, - allowSetting: true, - settingEvent: 'data', - settingTriggersEvent: true, - triggerFnName: 'trigger', - allowGetting: true, - updateStyle: true - }), - removeData: define.removeData({ - field: 'data', - event: 'data', - triggerFnName: 'trigger', - triggerEvent: true, - updateStyle: true - }), - scratch: define.data({ - field: 'scratch', - bindingEvent: 'scratch', - allowBinding: true, - allowSetting: true, - settingEvent: 'scratch', - settingTriggersEvent: true, - triggerFnName: 'trigger', - allowGetting: true, - updateStyle: true - }), - removeScratch: define.removeData({ - field: 'scratch', - event: 'scratch', - triggerFnName: 'trigger', - triggerEvent: true, - updateStyle: true - }) -}; - -// aliases -fn.attr = fn.data; -fn.removeAttr = fn.removeData; - -var Core = function Core(opts) { - var cy = this; - opts = extend({}, opts); - var container = opts.container; - - // allow for passing a wrapped jquery object - // e.g. cytoscape({ container: $('#cy') }) - if (container && !htmlElement(container) && htmlElement(container[0])) { - container = container[0]; - } - var reg = container ? container._cyreg : null; // e.g. already registered some info (e.g. readies) via jquery - reg = reg || {}; - if (reg && reg.cy) { - reg.cy.destroy(); - reg = {}; // old instance => replace reg completely - } - - var readies = reg.readies = reg.readies || []; - if (container) { - container._cyreg = reg; - } // make sure container assoc'd reg points to this cy - reg.cy = cy; - var head = _window !== undefined && container !== undefined && !opts.headless; - var options = opts; - options.layout = extend({ - name: head ? 'grid' : 'null' - }, options.layout); - options.renderer = extend({ - name: head ? 'canvas' : 'null' - }, options.renderer); - var defVal = function defVal(def, val, altVal) { - if (val !== undefined) { - return val; - } else if (altVal !== undefined) { - return altVal; - } else { - return def; - } - }; - var _p = this._private = { - container: container, - // html dom ele container - ready: false, - // whether ready has been triggered - options: options, - // cached options - elements: new Collection(this), - // elements in the graph - listeners: [], - // list of listeners - aniEles: new Collection(this), - // elements being animated - data: options.data || {}, - // data for the core - scratch: {}, - // scratch object for core - layout: null, - renderer: null, - destroyed: false, - // whether destroy was called - notificationsEnabled: true, - // whether notifications are sent to the renderer - minZoom: 1e-50, - maxZoom: 1e50, - zoomingEnabled: defVal(true, options.zoomingEnabled), - userZoomingEnabled: defVal(true, options.userZoomingEnabled), - panningEnabled: defVal(true, options.panningEnabled), - userPanningEnabled: defVal(true, options.userPanningEnabled), - boxSelectionEnabled: defVal(true, options.boxSelectionEnabled), - autolock: defVal(false, options.autolock, options.autolockNodes), - autoungrabify: defVal(false, options.autoungrabify, options.autoungrabifyNodes), - autounselectify: defVal(false, options.autounselectify), - styleEnabled: options.styleEnabled === undefined ? head : options.styleEnabled, - zoom: number$1(options.zoom) ? options.zoom : 1, - pan: { - x: plainObject(options.pan) && number$1(options.pan.x) ? options.pan.x : 0, - y: plainObject(options.pan) && number$1(options.pan.y) ? options.pan.y : 0 - }, - animation: { - // object for currently-running animations - current: [], - queue: [] - }, - hasCompoundNodes: false, - multiClickDebounceTime: defVal(250, options.multiClickDebounceTime) - }; - this.createEmitter(); - - // set selection type - this.selectionType(options.selectionType); - - // init zoom bounds - this.zoomRange({ - min: options.minZoom, - max: options.maxZoom - }); - var loadExtData = function loadExtData(extData, next) { - var anyIsPromise = extData.some(promise); - if (anyIsPromise) { - return Promise$1.all(extData).then(next); // load all data asynchronously, then exec rest of init - } else { - next(extData); // exec synchronously for convenience - } - }; - - // start with the default stylesheet so we have something before loading an external stylesheet - if (_p.styleEnabled) { - cy.setStyle([]); - } - - // create the renderer - var rendererOptions = extend({}, options, options.renderer); // allow rendering hints in top level options - cy.initRenderer(rendererOptions); - var setElesAndLayout = function setElesAndLayout(elements, onload, ondone) { - cy.notifications(false); - - // remove old elements - var oldEles = cy.mutableElements(); - if (oldEles.length > 0) { - oldEles.remove(); - } - if (elements != null) { - if (plainObject(elements) || array(elements)) { - cy.add(elements); - } - } - cy.one('layoutready', function (e) { - cy.notifications(true); - cy.emit(e); // we missed this event by turning notifications off, so pass it on - - cy.one('load', onload); - cy.emitAndNotify('load'); - }).one('layoutstop', function () { - cy.one('done', ondone); - cy.emit('done'); - }); - var layoutOpts = extend({}, cy._private.options.layout); - layoutOpts.eles = cy.elements(); - cy.layout(layoutOpts).run(); - }; - loadExtData([options.style, options.elements], function (thens) { - var initStyle = thens[0]; - var initEles = thens[1]; - - // init style - if (_p.styleEnabled) { - cy.style().append(initStyle); - } - - // initial load - setElesAndLayout(initEles, function () { - // onready - cy.startAnimationLoop(); - _p.ready = true; - - // if a ready callback is specified as an option, the bind it - if (fn$6(options.ready)) { - cy.on('ready', options.ready); - } - - // bind all the ready handlers registered before creating this instance - for (var i = 0; i < readies.length; i++) { - var fn = readies[i]; - cy.on('ready', fn); - } - if (reg) { - reg.readies = []; - } // clear b/c we've bound them all and don't want to keep it around in case a new core uses the same div etc - - cy.emit('ready'); - }, options.done); - }); -}; -var corefn = Core.prototype; // short alias - -extend(corefn, { - instanceString: function instanceString() { - return 'core'; - }, - isReady: function isReady() { - return this._private.ready; - }, - destroyed: function destroyed() { - return this._private.destroyed; - }, - ready: function ready(fn) { - if (this.isReady()) { - this.emitter().emit('ready', [], fn); // just calls fn as though triggered via ready event - } else { - this.on('ready', fn); - } - return this; - }, - destroy: function destroy() { - var cy = this; - if (cy.destroyed()) return; - cy.stopAnimationLoop(); - cy.destroyRenderer(); - this.emit('destroy'); - cy._private.destroyed = true; - return cy; - }, - hasElementWithId: function hasElementWithId(id) { - return this._private.elements.hasElementWithId(id); - }, - getElementById: function getElementById(id) { - return this._private.elements.getElementById(id); - }, - hasCompoundNodes: function hasCompoundNodes() { - return this._private.hasCompoundNodes; - }, - headless: function headless() { - return this._private.renderer.isHeadless(); - }, - styleEnabled: function styleEnabled() { - return this._private.styleEnabled; - }, - addToPool: function addToPool(eles) { - this._private.elements.merge(eles); - return this; // chaining - }, - - removeFromPool: function removeFromPool(eles) { - this._private.elements.unmerge(eles); - return this; - }, - container: function container() { - return this._private.container || null; - }, - window: function window() { - var container = this._private.container; - if (container == null) return _window; - var ownerDocument = this._private.container.ownerDocument; - if (ownerDocument === undefined || ownerDocument == null) { - return _window; - } - return ownerDocument.defaultView || _window; - }, - mount: function mount(container) { - if (container == null) { - return; - } - var cy = this; - var _p = cy._private; - var options = _p.options; - if (!htmlElement(container) && htmlElement(container[0])) { - container = container[0]; - } - cy.stopAnimationLoop(); - cy.destroyRenderer(); - _p.container = container; - _p.styleEnabled = true; - cy.invalidateSize(); - cy.initRenderer(extend({}, options, options.renderer, { - // allow custom renderer name to be re-used, otherwise use canvas - name: options.renderer.name === 'null' ? 'canvas' : options.renderer.name - })); - cy.startAnimationLoop(); - cy.style(options.style); - cy.emit('mount'); - return cy; - }, - unmount: function unmount() { - var cy = this; - cy.stopAnimationLoop(); - cy.destroyRenderer(); - cy.initRenderer({ - name: 'null' - }); - cy.emit('unmount'); - return cy; - }, - options: function options() { - return copy(this._private.options); - }, - json: function json(obj) { - var cy = this; - var _p = cy._private; - var eles = cy.mutableElements(); - var getFreshRef = function getFreshRef(ele) { - return cy.getElementById(ele.id()); - }; - if (plainObject(obj)) { - // set - - cy.startBatch(); - if (obj.elements) { - var idInJson = {}; - var updateEles = function updateEles(jsons, gr) { - var toAdd = []; - var toMod = []; - for (var i = 0; i < jsons.length; i++) { - var json = jsons[i]; - if (!json.data.id) { - warn('cy.json() cannot handle elements without an ID attribute'); - continue; - } - var id = '' + json.data.id; // id must be string - var ele = cy.getElementById(id); - idInJson[id] = true; - if (ele.length !== 0) { - // existing element should be updated - toMod.push({ - ele: ele, - json: json - }); - } else { - // otherwise should be added - if (gr) { - json.group = gr; - toAdd.push(json); - } else { - toAdd.push(json); - } - } - } - cy.add(toAdd); - for (var _i = 0; _i < toMod.length; _i++) { - var _toMod$_i = toMod[_i], - _ele = _toMod$_i.ele, - _json = _toMod$_i.json; - _ele.json(_json); - } - }; - if (array(obj.elements)) { - // elements: [] - updateEles(obj.elements); - } else { - // elements: { nodes: [], edges: [] } - var grs = ['nodes', 'edges']; - for (var i = 0; i < grs.length; i++) { - var gr = grs[i]; - var elements = obj.elements[gr]; - if (array(elements)) { - updateEles(elements, gr); - } - } - } - var parentsToRemove = cy.collection(); - eles.filter(function (ele) { - return !idInJson[ele.id()]; - }).forEach(function (ele) { - if (ele.isParent()) { - parentsToRemove.merge(ele); - } else { - ele.remove(); - } - }); - - // so that children are not removed w/parent - parentsToRemove.forEach(function (ele) { - return ele.children().move({ - parent: null - }); - }); - - // intermediate parents may be moved by prior line, so make sure we remove by fresh refs - parentsToRemove.forEach(function (ele) { - return getFreshRef(ele).remove(); - }); - } - if (obj.style) { - cy.style(obj.style); - } - if (obj.zoom != null && obj.zoom !== _p.zoom) { - cy.zoom(obj.zoom); - } - if (obj.pan) { - if (obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y) { - cy.pan(obj.pan); - } - } - if (obj.data) { - cy.data(obj.data); - } - var fields = ['minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'panningEnabled', 'userPanningEnabled', 'boxSelectionEnabled', 'autolock', 'autoungrabify', 'autounselectify', 'multiClickDebounceTime']; - for (var _i2 = 0; _i2 < fields.length; _i2++) { - var f = fields[_i2]; - if (obj[f] != null) { - cy[f](obj[f]); - } - } - cy.endBatch(); - return this; // chaining - } else { - // get - var flat = !!obj; - var json = {}; - if (flat) { - json.elements = this.elements().map(function (ele) { - return ele.json(); - }); - } else { - json.elements = {}; - eles.forEach(function (ele) { - var group = ele.group(); - if (!json.elements[group]) { - json.elements[group] = []; - } - json.elements[group].push(ele.json()); - }); - } - if (this._private.styleEnabled) { - json.style = cy.style().json(); - } - json.data = copy(cy.data()); - var options = _p.options; - json.zoomingEnabled = _p.zoomingEnabled; - json.userZoomingEnabled = _p.userZoomingEnabled; - json.zoom = _p.zoom; - json.minZoom = _p.minZoom; - json.maxZoom = _p.maxZoom; - json.panningEnabled = _p.panningEnabled; - json.userPanningEnabled = _p.userPanningEnabled; - json.pan = copy(_p.pan); - json.boxSelectionEnabled = _p.boxSelectionEnabled; - json.renderer = copy(options.renderer); - json.hideEdgesOnViewport = options.hideEdgesOnViewport; - json.textureOnViewport = options.textureOnViewport; - json.wheelSensitivity = options.wheelSensitivity; - json.motionBlur = options.motionBlur; - json.multiClickDebounceTime = options.multiClickDebounceTime; - return json; - } - } -}); -corefn.$id = corefn.getElementById; -[corefn$9, corefn$8, elesfn, corefn$7, corefn$6, corefn$5, corefn$4, corefn$3, corefn$2, corefn$1, fn].forEach(function (props) { - extend(corefn, props); -}); - -/* eslint-disable no-unused-vars */ -var defaults$7 = { - fit: true, - // whether to fit the viewport to the graph - directed: false, - // whether the tree is directed downwards (or edges can point in any direction if false) - padding: 30, - // padding on fit - circle: false, - // put depths in concentric circles if true, put depths top down if false - grid: false, - // whether to create an even grid into which the DAG is placed (circle:false only) - spacingFactor: 1.75, - // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap) - boundingBox: undefined, - // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } - avoidOverlap: true, - // prevents node overlap, may overflow boundingBox if not enough space - nodeDimensionsIncludeLabels: false, - // Excludes the label when calculating node bounding boxes for the layout algorithm - roots: undefined, - // the roots of the trees - depthSort: undefined, - // a sorting function to order nodes at equal depth. e.g. function(a, b){ return a.data('weight') - b.data('weight') } - animate: false, - // whether to transition the node positions - animationDuration: 500, - // duration of animation in ms if enabled - animationEasing: undefined, - // easing of animation if enabled, - animateFilter: function animateFilter(node, i) { - return true; - }, - // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts - ready: undefined, - // callback on layoutready - stop: undefined, - // callback on layoutstop - transform: function transform(node, position) { - return position; - } // transform a given node position. Useful for changing flow direction in discrete layouts -}; - -var deprecatedOptionDefaults = { - maximal: false, - // whether to shift nodes down their natural BFS depths in order to avoid upwards edges (DAGS only); setting acyclic to true sets maximal to true also - acyclic: false // whether the tree is acyclic and thus a node could be shifted (due to the maximal option) multiple times without causing an infinite loop; setting to true sets maximal to true also; if you are uncertain whether a tree is acyclic, set to false to avoid potential infinite loops -}; - -/* eslint-enable */ - -var getInfo = function getInfo(ele) { - return ele.scratch('breadthfirst'); -}; -var setInfo = function setInfo(ele, obj) { - return ele.scratch('breadthfirst', obj); -}; -function BreadthFirstLayout(options) { - this.options = extend({}, defaults$7, deprecatedOptionDefaults, options); -} -BreadthFirstLayout.prototype.run = function () { - var params = this.options; - var options = params; - var cy = params.cy; - var eles = options.eles; - var nodes = eles.nodes().filter(function (n) { - return !n.isParent(); - }); - var graph = eles; - var directed = options.directed; - var maximal = options.acyclic || options.maximal || options.maximalAdjustments > 0; // maximalAdjustments for compat. w/ old code; also, setting acyclic to true sets maximal to true - - var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { - x1: 0, - y1: 0, - w: cy.width(), - h: cy.height() - }); - var roots; - if (elementOrCollection(options.roots)) { - roots = options.roots; - } else if (array(options.roots)) { - var rootsArray = []; - for (var i = 0; i < options.roots.length; i++) { - var id = options.roots[i]; - var ele = cy.getElementById(id); - rootsArray.push(ele); - } - roots = cy.collection(rootsArray); - } else if (string(options.roots)) { - roots = cy.$(options.roots); - } else { - if (directed) { - roots = nodes.roots(); - } else { - var components = eles.components(); - roots = cy.collection(); - var _loop = function _loop(_i) { - var comp = components[_i]; - var maxDegree = comp.maxDegree(false); - var compRoots = comp.filter(function (ele) { - return ele.degree(false) === maxDegree; - }); - roots = roots.add(compRoots); - }; - for (var _i = 0; _i < components.length; _i++) { - _loop(_i); - } - } - } - var depths = []; - var foundByBfs = {}; - var addToDepth = function addToDepth(ele, d) { - if (depths[d] == null) { - depths[d] = []; - } - var i = depths[d].length; - depths[d].push(ele); - setInfo(ele, { - index: i, - depth: d - }); - }; - var changeDepth = function changeDepth(ele, newDepth) { - var _getInfo = getInfo(ele), - depth = _getInfo.depth, - index = _getInfo.index; - depths[depth][index] = null; - addToDepth(ele, newDepth); - }; - - // find the depths of the nodes - graph.bfs({ - roots: roots, - directed: options.directed, - visit: function visit(node, edge, pNode, i, depth) { - var ele = node[0]; - var id = ele.id(); - addToDepth(ele, depth); - foundByBfs[id] = true; - } - }); - - // check for nodes not found by bfs - var orphanNodes = []; - for (var _i2 = 0; _i2 < nodes.length; _i2++) { - var _ele = nodes[_i2]; - if (foundByBfs[_ele.id()]) { - continue; - } else { - orphanNodes.push(_ele); - } - } - - // assign the nodes a depth and index - - var assignDepthsAt = function assignDepthsAt(i) { - var eles = depths[i]; - for (var j = 0; j < eles.length; j++) { - var _ele2 = eles[j]; - if (_ele2 == null) { - eles.splice(j, 1); - j--; - continue; - } - setInfo(_ele2, { - depth: i, - index: j - }); - } - }; - var assignDepths = function assignDepths() { - for (var _i3 = 0; _i3 < depths.length; _i3++) { - assignDepthsAt(_i3); - } - }; - var adjustMaximally = function adjustMaximally(ele, shifted) { - var eInfo = getInfo(ele); - var incomers = ele.incomers().filter(function (el) { - return el.isNode() && eles.has(el); - }); - var maxDepth = -1; - var id = ele.id(); - for (var k = 0; k < incomers.length; k++) { - var incmr = incomers[k]; - var iInfo = getInfo(incmr); - maxDepth = Math.max(maxDepth, iInfo.depth); - } - if (eInfo.depth <= maxDepth) { - if (!options.acyclic && shifted[id]) { - return null; - } - var newDepth = maxDepth + 1; - changeDepth(ele, newDepth); - shifted[id] = newDepth; - return true; - } - return false; - }; - - // for the directed case, try to make the edges all go down (i.e. depth i => depth i + 1) - if (directed && maximal) { - var Q = []; - var shifted = {}; - var enqueue = function enqueue(n) { - return Q.push(n); - }; - var dequeue = function dequeue() { - return Q.shift(); - }; - nodes.forEach(function (n) { - return Q.push(n); - }); - while (Q.length > 0) { - var _ele3 = dequeue(); - var didShift = adjustMaximally(_ele3, shifted); - if (didShift) { - _ele3.outgoers().filter(function (el) { - return el.isNode() && eles.has(el); - }).forEach(enqueue); - } else if (didShift === null) { - warn('Detected double maximal shift for node `' + _ele3.id() + '`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.'); - break; // exit on failure - } - } - } - - assignDepths(); // clear holes - - // find min distance we need to leave between nodes - var minDistance = 0; - if (options.avoidOverlap) { - for (var _i4 = 0; _i4 < nodes.length; _i4++) { - var n = nodes[_i4]; - var nbb = n.layoutDimensions(options); - var w = nbb.w; - var h = nbb.h; - minDistance = Math.max(minDistance, w, h); - } - } - - // get the weighted percent for an element based on its connectivity to other levels - var cachedWeightedPercent = {}; - var getWeightedPercent = function getWeightedPercent(ele) { - if (cachedWeightedPercent[ele.id()]) { - return cachedWeightedPercent[ele.id()]; - } - var eleDepth = getInfo(ele).depth; - var neighbors = ele.neighborhood(); - var percent = 0; - var samples = 0; - for (var _i5 = 0; _i5 < neighbors.length; _i5++) { - var neighbor = neighbors[_i5]; - if (neighbor.isEdge() || neighbor.isParent() || !nodes.has(neighbor)) { - continue; - } - var bf = getInfo(neighbor); - if (bf == null) { - continue; - } - var index = bf.index; - var depth = bf.depth; - - // unassigned neighbours shouldn't affect the ordering - if (index == null || depth == null) { - continue; - } - var nDepth = depths[depth].length; - if (depth < eleDepth) { - // only get influenced by elements above - percent += index / nDepth; - samples++; - } - } - samples = Math.max(1, samples); - percent = percent / samples; - if (samples === 0) { - // put lone nodes at the start - percent = 0; - } - cachedWeightedPercent[ele.id()] = percent; - return percent; - }; - - // rearrange the indices in each depth level based on connectivity - - var sortFn = function sortFn(a, b) { - var apct = getWeightedPercent(a); - var bpct = getWeightedPercent(b); - var diff = apct - bpct; - if (diff === 0) { - return ascending(a.id(), b.id()); // make sure sort doesn't have don't-care comparisons - } else { - return diff; - } - }; - if (options.depthSort !== undefined) { - sortFn = options.depthSort; - } - - // sort each level to make connected nodes closer - for (var _i6 = 0; _i6 < depths.length; _i6++) { - depths[_i6].sort(sortFn); - assignDepthsAt(_i6); - } - - // assign orphan nodes to a new top-level depth - var orphanDepth = []; - for (var _i7 = 0; _i7 < orphanNodes.length; _i7++) { - orphanDepth.push(orphanNodes[_i7]); - } - depths.unshift(orphanDepth); - assignDepths(); - var biggestDepthSize = 0; - for (var _i8 = 0; _i8 < depths.length; _i8++) { - biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize); - } - var center = { - x: bb.x1 + bb.w / 2, - y: bb.x1 + bb.h / 2 - }; - var maxDepthSize = depths.reduce(function (max, eles) { - return Math.max(max, eles.length); - }, 0); - var getPosition = function getPosition(ele) { - var _getInfo2 = getInfo(ele), - depth = _getInfo2.depth, - index = _getInfo2.index; - var depthSize = depths[depth].length; - var distanceX = Math.max(bb.w / ((options.grid ? maxDepthSize : depthSize) + 1), minDistance); - var distanceY = Math.max(bb.h / (depths.length + 1), minDistance); - var radiusStepSize = Math.min(bb.w / 2 / depths.length, bb.h / 2 / depths.length); - radiusStepSize = Math.max(radiusStepSize, minDistance); - if (!options.circle) { - var epos = { - x: center.x + (index + 1 - (depthSize + 1) / 2) * distanceX, - y: (depth + 1) * distanceY - }; - return epos; - } else { - var radius = radiusStepSize * depth + radiusStepSize - (depths.length > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0); - var theta = 2 * Math.PI / depths[depth].length * index; - if (depth === 0 && depths[0].length === 1) { - radius = 1; - } - return { - x: center.x + radius * Math.cos(theta), - y: center.y + radius * Math.sin(theta) - }; - } - }; - eles.nodes().layoutPositions(this, options, getPosition); - return this; // chaining -}; - -var defaults$6 = { - fit: true, - // whether to fit the viewport to the graph - padding: 30, - // the padding on fit - boundingBox: undefined, - // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } - avoidOverlap: true, - // prevents node overlap, may overflow boundingBox and radius if not enough space - nodeDimensionsIncludeLabels: false, - // Excludes the label when calculating node bounding boxes for the layout algorithm - spacingFactor: undefined, - // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up - radius: undefined, - // the radius of the circle - startAngle: 3 / 2 * Math.PI, - // where nodes start in radians - sweep: undefined, - // how many radians should be between the first and last node (defaults to full circle) - clockwise: true, - // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) - sort: undefined, - // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } - animate: false, - // whether to transition the node positions - animationDuration: 500, - // duration of animation in ms if enabled - animationEasing: undefined, - // easing of animation if enabled - animateFilter: function animateFilter(node, i) { - return true; - }, - // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts - ready: undefined, - // callback on layoutready - stop: undefined, - // callback on layoutstop - transform: function transform(node, position) { - return position; - } // transform a given node position. Useful for changing flow direction in discrete layouts -}; - -function CircleLayout(options) { - this.options = extend({}, defaults$6, options); -} -CircleLayout.prototype.run = function () { - var params = this.options; - var options = params; - var cy = params.cy; - var eles = options.eles; - var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; - var nodes = eles.nodes().not(':parent'); - if (options.sort) { - nodes = nodes.sort(options.sort); - } - var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { - x1: 0, - y1: 0, - w: cy.width(), - h: cy.height() - }); - var center = { - x: bb.x1 + bb.w / 2, - y: bb.y1 + bb.h / 2 - }; - var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / nodes.length : options.sweep; - var dTheta = sweep / Math.max(1, nodes.length - 1); - var r; - var minDistance = 0; - for (var i = 0; i < nodes.length; i++) { - var n = nodes[i]; - var nbb = n.layoutDimensions(options); - var w = nbb.w; - var h = nbb.h; - minDistance = Math.max(minDistance, w, h); - } - if (number$1(options.radius)) { - r = options.radius; - } else if (nodes.length <= 1) { - r = 0; - } else { - r = Math.min(bb.h, bb.w) / 2 - minDistance; - } - - // calculate the radius - if (nodes.length > 1 && options.avoidOverlap) { - // but only if more than one node (can't overlap) - minDistance *= 1.75; // just to have some nice spacing - - var dcos = Math.cos(dTheta) - Math.cos(0); - var dsin = Math.sin(dTheta) - Math.sin(0); - var rMin = Math.sqrt(minDistance * minDistance / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping - r = Math.max(rMin, r); - } - var getPos = function getPos(ele, i) { - var theta = options.startAngle + i * dTheta * (clockwise ? 1 : -1); - var rx = r * Math.cos(theta); - var ry = r * Math.sin(theta); - var pos = { - x: center.x + rx, - y: center.y + ry - }; - return pos; - }; - eles.nodes().layoutPositions(this, options, getPos); - return this; // chaining -}; - -var defaults$5 = { - fit: true, - // whether to fit the viewport to the graph - padding: 30, - // the padding on fit - startAngle: 3 / 2 * Math.PI, - // where nodes start in radians - sweep: undefined, - // how many radians should be between the first and last node (defaults to full circle) - clockwise: true, - // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) - equidistant: false, - // whether levels have an equal radial distance betwen them, may cause bounding box overflow - minNodeSpacing: 10, - // min spacing between outside of nodes (used for radius adjustment) - boundingBox: undefined, - // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } - avoidOverlap: true, - // prevents node overlap, may overflow boundingBox if not enough space - nodeDimensionsIncludeLabels: false, - // Excludes the label when calculating node bounding boxes for the layout algorithm - height: undefined, - // height of layout area (overrides container height) - width: undefined, - // width of layout area (overrides container width) - spacingFactor: undefined, - // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up - concentric: function concentric(node) { - // returns numeric value for each node, placing higher nodes in levels towards the centre - return node.degree(); - }, - levelWidth: function levelWidth(nodes) { - // the variation of concentric values in each level - return nodes.maxDegree() / 4; - }, - animate: false, - // whether to transition the node positions - animationDuration: 500, - // duration of animation in ms if enabled - animationEasing: undefined, - // easing of animation if enabled - animateFilter: function animateFilter(node, i) { - return true; - }, - // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts - ready: undefined, - // callback on layoutready - stop: undefined, - // callback on layoutstop - transform: function transform(node, position) { - return position; - } // transform a given node position. Useful for changing flow direction in discrete layouts -}; - -function ConcentricLayout(options) { - this.options = extend({}, defaults$5, options); -} -ConcentricLayout.prototype.run = function () { - var params = this.options; - var options = params; - var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; - var cy = params.cy; - var eles = options.eles; - var nodes = eles.nodes().not(':parent'); - var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { - x1: 0, - y1: 0, - w: cy.width(), - h: cy.height() - }); - var center = { - x: bb.x1 + bb.w / 2, - y: bb.y1 + bb.h / 2 - }; - var nodeValues = []; // { node, value } - var maxNodeSize = 0; - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - var value = void 0; - - // calculate the node value - value = options.concentric(node); - nodeValues.push({ - value: value, - node: node - }); - - // for style mapping - node._private.scratch.concentric = value; - } - - // in case we used the `concentric` in style - nodes.updateStyle(); - - // calculate max size now based on potentially updated mappers - for (var _i = 0; _i < nodes.length; _i++) { - var _node = nodes[_i]; - var nbb = _node.layoutDimensions(options); - maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h); - } - - // sort node values in descreasing order - nodeValues.sort(function (a, b) { - return b.value - a.value; - }); - var levelWidth = options.levelWidth(nodes); - - // put the values into levels - var levels = [[]]; - var currentLevel = levels[0]; - for (var _i2 = 0; _i2 < nodeValues.length; _i2++) { - var val = nodeValues[_i2]; - if (currentLevel.length > 0) { - var diff = Math.abs(currentLevel[0].value - val.value); - if (diff >= levelWidth) { - currentLevel = []; - levels.push(currentLevel); - } - } - currentLevel.push(val); - } - - // create positions from levels - - var minDist = maxNodeSize + options.minNodeSpacing; // min dist between nodes - - if (!options.avoidOverlap) { - // then strictly constrain to bb - var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1; - var maxR = Math.min(bb.w, bb.h) / 2 - minDist; - var rStep = maxR / (levels.length + firstLvlHasMulti ? 1 : 0); - minDist = Math.min(minDist, rStep); - } - - // find the metrics for each level - var r = 0; - for (var _i3 = 0; _i3 < levels.length; _i3++) { - var level = levels[_i3]; - var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / level.length : options.sweep; - var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1); - - // calculate the radius - if (level.length > 1 && options.avoidOverlap) { - // but only if more than one node (can't overlap) - var dcos = Math.cos(dTheta) - Math.cos(0); - var dsin = Math.sin(dTheta) - Math.sin(0); - var rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping - - r = Math.max(rMin, r); - } - level.r = r; - r += minDist; - } - if (options.equidistant) { - var rDeltaMax = 0; - var _r = 0; - for (var _i4 = 0; _i4 < levels.length; _i4++) { - var _level = levels[_i4]; - var rDelta = _level.r - _r; - rDeltaMax = Math.max(rDeltaMax, rDelta); - } - _r = 0; - for (var _i5 = 0; _i5 < levels.length; _i5++) { - var _level2 = levels[_i5]; - if (_i5 === 0) { - _r = _level2.r; - } - _level2.r = _r; - _r += rDeltaMax; - } - } - - // calculate the node positions - var pos = {}; // id => position - for (var _i6 = 0; _i6 < levels.length; _i6++) { - var _level3 = levels[_i6]; - var _dTheta = _level3.dTheta; - var _r2 = _level3.r; - for (var j = 0; j < _level3.length; j++) { - var _val = _level3[j]; - var theta = options.startAngle + (clockwise ? 1 : -1) * _dTheta * j; - var p = { - x: center.x + _r2 * Math.cos(theta), - y: center.y + _r2 * Math.sin(theta) - }; - pos[_val.node.id()] = p; - } - } - - // position the nodes - eles.nodes().layoutPositions(this, options, function (ele) { - var id = ele.id(); - return pos[id]; - }); - return this; // chaining -}; - -/* -The CoSE layout was written by Gerardo Huck. -https://www.linkedin.com/in/gerardohuck/ - -Based on the following article: -http://dl.acm.org/citation.cfm?id=1498047 - -Modifications tracked on Github. -*/ -var DEBUG; - -/** - * @brief : default layout options - */ -var defaults$4 = { - // Called on `layoutready` - ready: function ready() {}, - // Called on `layoutstop` - stop: function stop() {}, - // Whether to animate while running the layout - // true : Animate continuously as the layout is running - // false : Just show the end result - // 'end' : Animate with the end result, from the initial positions to the end positions - animate: true, - // Easing of the animation for animate:'end' - animationEasing: undefined, - // The duration of the animation for animate:'end' - animationDuration: undefined, - // A function that determines whether the node should be animated - // All nodes animated by default on animate enabled - // Non-animated nodes are positioned immediately when the layout starts - animateFilter: function animateFilter(node, i) { - return true; - }, - // The layout animates only after this many milliseconds for animate:true - // (prevents flashing on fast runs) - animationThreshold: 250, - // Number of iterations between consecutive screen positions update - refresh: 20, - // Whether to fit the network view after when done - fit: true, - // Padding on fit - padding: 30, - // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } - boundingBox: undefined, - // Excludes the label when calculating node bounding boxes for the layout algorithm - nodeDimensionsIncludeLabels: false, - // Randomize the initial positions of the nodes (true) or use existing positions (false) - randomize: false, - // Extra spacing between components in non-compound graphs - componentSpacing: 40, - // Node repulsion (non overlapping) multiplier - nodeRepulsion: function nodeRepulsion(node) { - return 2048; - }, - // Node repulsion (overlapping) multiplier - nodeOverlap: 4, - // Ideal edge (non nested) length - idealEdgeLength: function idealEdgeLength(edge) { - return 32; - }, - // Divisor to compute edge forces - edgeElasticity: function edgeElasticity(edge) { - return 32; - }, - // Nesting factor (multiplier) to compute ideal edge length for nested edges - nestingFactor: 1.2, - // Gravity force (constant) - gravity: 1, - // Maximum number of iterations to perform - numIter: 1000, - // Initial temperature (maximum node displacement) - initialTemp: 1000, - // Cooling factor (how the temperature is reduced between consecutive iterations - coolingFactor: 0.99, - // Lower temperature threshold (below this point the layout will end) - minTemp: 1.0 -}; - -/** - * @brief : constructor - * @arg options : object containing layout options - */ -function CoseLayout(options) { - this.options = extend({}, defaults$4, options); - this.options.layout = this; - - // Exclude any edge that has a source or target node that is not in the set of passed-in nodes - var nodes = this.options.eles.nodes(); - var edges = this.options.eles.edges(); - var notEdges = edges.filter(function (e) { - var sourceId = e.source().data('id'); - var targetId = e.target().data('id'); - var hasSource = nodes.some(function (n) { - return n.data('id') === sourceId; - }); - var hasTarget = nodes.some(function (n) { - return n.data('id') === targetId; - }); - return !hasSource || !hasTarget; - }); - this.options.eles = this.options.eles.not(notEdges); -} - -/** - * @brief : runs the layout - */ -CoseLayout.prototype.run = function () { - var options = this.options; - var cy = options.cy; - var layout = this; - layout.stopped = false; - if (options.animate === true || options.animate === false) { - layout.emit({ - type: 'layoutstart', - layout: layout - }); - } - - // Set DEBUG - Global variable - if (true === options.debug) { - DEBUG = true; - } else { - DEBUG = false; - } - - // Initialize layout info - var layoutInfo = createLayoutInfo(cy, layout, options); - - // Show LayoutInfo contents if debugging - if (DEBUG) { - printLayoutInfo(layoutInfo); - } - - // If required, randomize node positions - if (options.randomize) { - randomizePositions(layoutInfo); - } - var startTime = performanceNow(); - var refresh = function refresh() { - refreshPositions(layoutInfo, cy, options); - - // Fit the graph if necessary - if (true === options.fit) { - cy.fit(options.padding); - } - }; - var mainLoop = function mainLoop(i) { - if (layout.stopped || i >= options.numIter) { - // logDebug("Layout manually stopped. Stopping computation in step " + i); - return false; - } - - // Do one step in the phisical simulation - step(layoutInfo, options); - - // Update temperature - layoutInfo.temperature = layoutInfo.temperature * options.coolingFactor; - // logDebug("New temperature: " + layoutInfo.temperature); - - if (layoutInfo.temperature < options.minTemp) { - // logDebug("Temperature drop below minimum threshold. Stopping computation in step " + i); - return false; - } - return true; - }; - var done = function done() { - if (options.animate === true || options.animate === false) { - refresh(); - - // Layout has finished - layout.one('layoutstop', options.stop); - layout.emit({ - type: 'layoutstop', - layout: layout - }); - } else { - var nodes = options.eles.nodes(); - var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); - nodes.layoutPositions(layout, options, getScaledPos); - } - }; - var i = 0; - var loopRet = true; - if (options.animate === true) { - var frame = function frame() { - var f = 0; - while (loopRet && f < options.refresh) { - loopRet = mainLoop(i); - i++; - f++; - } - if (!loopRet) { - // it's done - separateComponents(layoutInfo, options); - done(); - } else { - var now = performanceNow(); - if (now - startTime >= options.animationThreshold) { - refresh(); - } - requestAnimationFrame(frame); - } - }; - frame(); - } else { - while (loopRet) { - loopRet = mainLoop(i); - i++; - } - separateComponents(layoutInfo, options); - done(); - } - return this; // chaining -}; - -/** - * @brief : called on continuous layouts to stop them before they finish - */ -CoseLayout.prototype.stop = function () { - this.stopped = true; - if (this.thread) { - this.thread.stop(); - } - this.emit('layoutstop'); - return this; // chaining -}; - -CoseLayout.prototype.destroy = function () { - if (this.thread) { - this.thread.stop(); - } - return this; // chaining -}; - -/** - * @brief : Creates an object which is contains all the data - * used in the layout process - * @arg cy : cytoscape.js object - * @return : layoutInfo object initialized - */ -var createLayoutInfo = function createLayoutInfo(cy, layout, options) { - // Shortcut - var edges = options.eles.edges(); - var nodes = options.eles.nodes(); - var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { - x1: 0, - y1: 0, - w: cy.width(), - h: cy.height() - }); - var layoutInfo = { - isCompound: cy.hasCompoundNodes(), - layoutNodes: [], - idToIndex: {}, - nodeSize: nodes.size(), - graphSet: [], - indexToGraph: [], - layoutEdges: [], - edgeSize: edges.size(), - temperature: options.initialTemp, - clientWidth: bb.w, - clientHeight: bb.h, - boundingBox: bb - }; - var components = options.eles.components(); - var id2cmptId = {}; - for (var i = 0; i < components.length; i++) { - var component = components[i]; - for (var j = 0; j < component.length; j++) { - var node = component[j]; - id2cmptId[node.id()] = i; - } - } - - // Iterate over all nodes, creating layout nodes - for (var i = 0; i < layoutInfo.nodeSize; i++) { - var n = nodes[i]; - var nbb = n.layoutDimensions(options); - var tempNode = {}; - tempNode.isLocked = n.locked(); - tempNode.id = n.data('id'); - tempNode.parentId = n.data('parent'); - tempNode.cmptId = id2cmptId[n.id()]; - tempNode.children = []; - tempNode.positionX = n.position('x'); - tempNode.positionY = n.position('y'); - tempNode.offsetX = 0; - tempNode.offsetY = 0; - tempNode.height = nbb.w; - tempNode.width = nbb.h; - tempNode.maxX = tempNode.positionX + tempNode.width / 2; - tempNode.minX = tempNode.positionX - tempNode.width / 2; - tempNode.maxY = tempNode.positionY + tempNode.height / 2; - tempNode.minY = tempNode.positionY - tempNode.height / 2; - tempNode.padLeft = parseFloat(n.style('padding')); - tempNode.padRight = parseFloat(n.style('padding')); - tempNode.padTop = parseFloat(n.style('padding')); - tempNode.padBottom = parseFloat(n.style('padding')); - - // forces - tempNode.nodeRepulsion = fn$6(options.nodeRepulsion) ? options.nodeRepulsion(n) : options.nodeRepulsion; - - // Add new node - layoutInfo.layoutNodes.push(tempNode); - // Add entry to id-index map - layoutInfo.idToIndex[tempNode.id] = i; - } - - // Inline implementation of a queue, used for traversing the graph in BFS order - var queue = []; - var start = 0; // Points to the start the queue - var end = -1; // Points to the end of the queue - - var tempGraph = []; - - // Second pass to add child information and - // initialize queue for hierarchical traversal - for (var i = 0; i < layoutInfo.nodeSize; i++) { - var n = layoutInfo.layoutNodes[i]; - var p_id = n.parentId; - // Check if node n has a parent node - if (null != p_id) { - // Add node Id to parent's list of children - layoutInfo.layoutNodes[layoutInfo.idToIndex[p_id]].children.push(n.id); - } else { - // If a node doesn't have a parent, then it's in the root graph - queue[++end] = n.id; - tempGraph.push(n.id); - } - } - - // Add root graph to graphSet - layoutInfo.graphSet.push(tempGraph); - - // Traverse the graph, level by level, - while (start <= end) { - // Get the node to visit and remove it from queue - var node_id = queue[start++]; - var node_ix = layoutInfo.idToIndex[node_id]; - var node = layoutInfo.layoutNodes[node_ix]; - var children = node.children; - if (children.length > 0) { - // Add children nodes as a new graph to graph set - layoutInfo.graphSet.push(children); - // Add children to que queue to be visited - for (var i = 0; i < children.length; i++) { - queue[++end] = children[i]; - } - } - } - - // Create indexToGraph map - for (var i = 0; i < layoutInfo.graphSet.length; i++) { - var graph = layoutInfo.graphSet[i]; - for (var j = 0; j < graph.length; j++) { - var index = layoutInfo.idToIndex[graph[j]]; - layoutInfo.indexToGraph[index] = i; - } - } - - // Iterate over all edges, creating Layout Edges - for (var i = 0; i < layoutInfo.edgeSize; i++) { - var e = edges[i]; - var tempEdge = {}; - tempEdge.id = e.data('id'); - tempEdge.sourceId = e.data('source'); - tempEdge.targetId = e.data('target'); - - // Compute ideal length - var idealLength = fn$6(options.idealEdgeLength) ? options.idealEdgeLength(e) : options.idealEdgeLength; - var elasticity = fn$6(options.edgeElasticity) ? options.edgeElasticity(e) : options.edgeElasticity; - - // Check if it's an inter graph edge - var sourceIx = layoutInfo.idToIndex[tempEdge.sourceId]; - var targetIx = layoutInfo.idToIndex[tempEdge.targetId]; - var sourceGraph = layoutInfo.indexToGraph[sourceIx]; - var targetGraph = layoutInfo.indexToGraph[targetIx]; - if (sourceGraph != targetGraph) { - // Find lowest common graph ancestor - var lca = findLCA(tempEdge.sourceId, tempEdge.targetId, layoutInfo); - - // Compute sum of node depths, relative to lca graph - var lcaGraph = layoutInfo.graphSet[lca]; - var depth = 0; - - // Source depth - var tempNode = layoutInfo.layoutNodes[sourceIx]; - while (-1 === lcaGraph.indexOf(tempNode.id)) { - tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; - depth++; - } - - // Target depth - tempNode = layoutInfo.layoutNodes[targetIx]; - while (-1 === lcaGraph.indexOf(tempNode.id)) { - tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; - depth++; - } - - // logDebug('LCA of nodes ' + tempEdge.sourceId + ' and ' + tempEdge.targetId + - // ". Index: " + lca + " Contents: " + lcaGraph.toString() + - // ". Depth: " + depth); - - // Update idealLength - idealLength *= depth * options.nestingFactor; - } - tempEdge.idealLength = idealLength; - tempEdge.elasticity = elasticity; - layoutInfo.layoutEdges.push(tempEdge); - } - - // Finally, return layoutInfo object - return layoutInfo; -}; - -/** - * @brief : This function finds the index of the lowest common - * graph ancestor between 2 nodes in the subtree - * (from the graph hierarchy induced tree) whose - * root is graphIx - * - * @arg node1: node1's ID - * @arg node2: node2's ID - * @arg layoutInfo: layoutInfo object - * - */ -var findLCA = function findLCA(node1, node2, layoutInfo) { - // Find their common ancester, starting from the root graph - var res = findLCA_aux(node1, node2, 0, layoutInfo); - if (2 > res.count) { - // If aux function couldn't find the common ancester, - // then it is the root graph - return 0; - } else { - return res.graph; - } -}; - -/** - * @brief : Auxiliary function used for LCA computation - * - * @arg node1 : node1's ID - * @arg node2 : node2's ID - * @arg graphIx : subgraph index - * @arg layoutInfo : layoutInfo object - * - * @return : object of the form {count: X, graph: Y}, where: - * X is the number of ancestors (max: 2) found in - * graphIx (and it's subgraphs), - * Y is the graph index of the lowest graph containing - * all X nodes - */ -var findLCA_aux = function findLCA_aux(node1, node2, graphIx, layoutInfo) { - var graph = layoutInfo.graphSet[graphIx]; - // If both nodes belongs to graphIx - if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) { - return { - count: 2, - graph: graphIx - }; - } - - // Make recursive calls for all subgraphs - var c = 0; - for (var i = 0; i < graph.length; i++) { - var nodeId = graph[i]; - var nodeIx = layoutInfo.idToIndex[nodeId]; - var children = layoutInfo.layoutNodes[nodeIx].children; - - // If the node has no child, skip it - if (0 === children.length) { - continue; - } - var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children[0]]]; - var result = findLCA_aux(node1, node2, childGraphIx, layoutInfo); - if (0 === result.count) { - // Neither node1 nor node2 are present in this subgraph - continue; - } else if (1 === result.count) { - // One of (node1, node2) is present in this subgraph - c++; - if (2 === c) { - // We've already found both nodes, no need to keep searching - break; - } - } else { - // Both nodes are present in this subgraph - return result; - } - } - return { - count: c, - graph: graphIx - }; -}; - -/** - * @brief: printsLayoutInfo into js console - * Only used for debbuging - */ -var printLayoutInfo; - -/** - * @brief : Randomizes the position of all nodes - */ -var randomizePositions = function randomizePositions(layoutInfo, cy) { - var width = layoutInfo.clientWidth; - var height = layoutInfo.clientHeight; - for (var i = 0; i < layoutInfo.nodeSize; i++) { - var n = layoutInfo.layoutNodes[i]; - - // No need to randomize compound nodes or locked nodes - if (0 === n.children.length && !n.isLocked) { - n.positionX = Math.random() * width; - n.positionY = Math.random() * height; - } - } -}; -var getScaleInBoundsFn = function getScaleInBoundsFn(layoutInfo, options, nodes) { - var bb = layoutInfo.boundingBox; - var coseBB = { - x1: Infinity, - x2: -Infinity, - y1: Infinity, - y2: -Infinity - }; - if (options.boundingBox) { - nodes.forEach(function (node) { - var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node.data('id')]]; - coseBB.x1 = Math.min(coseBB.x1, lnode.positionX); - coseBB.x2 = Math.max(coseBB.x2, lnode.positionX); - coseBB.y1 = Math.min(coseBB.y1, lnode.positionY); - coseBB.y2 = Math.max(coseBB.y2, lnode.positionY); - }); - coseBB.w = coseBB.x2 - coseBB.x1; - coseBB.h = coseBB.y2 - coseBB.y1; - } - return function (ele, i) { - var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[ele.data('id')]]; - if (options.boundingBox) { - // then add extra bounding box constraint - var pctX = (lnode.positionX - coseBB.x1) / coseBB.w; - var pctY = (lnode.positionY - coseBB.y1) / coseBB.h; - return { - x: bb.x1 + pctX * bb.w, - y: bb.y1 + pctY * bb.h - }; - } else { - return { - x: lnode.positionX, - y: lnode.positionY - }; - } - }; -}; - -/** - * @brief : Updates the positions of nodes in the network - * @arg layoutInfo : LayoutInfo object - * @arg cy : Cytoscape object - * @arg options : Layout options - */ -var refreshPositions = function refreshPositions(layoutInfo, cy, options) { - // var s = 'Refreshing positions'; - // logDebug(s); - - var layout = options.layout; - var nodes = options.eles.nodes(); - var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); - nodes.positions(getScaledPos); - - // Trigger layoutReady only on first call - if (true !== layoutInfo.ready) { - // s = 'Triggering layoutready'; - // logDebug(s); - layoutInfo.ready = true; - layout.one('layoutready', options.ready); - layout.emit({ - type: 'layoutready', - layout: this - }); - } -}; - -/** - * @brief : Logs a debug message in JS console, if DEBUG is ON - */ -// var logDebug = function(text) { -// if (DEBUG) { -// console.debug(text); -// } -// }; - -/** - * @brief : Performs one iteration of the physical simulation - * @arg layoutInfo : LayoutInfo object already initialized - * @arg cy : Cytoscape object - * @arg options : Layout options - */ -var step = function step(layoutInfo, options, _step) { - // var s = "\n\n###############################"; - // s += "\nSTEP: " + step; - // s += "\n###############################\n"; - // logDebug(s); - - // Calculate node repulsions - calculateNodeForces(layoutInfo, options); - // Calculate edge forces - calculateEdgeForces(layoutInfo); - // Calculate gravity forces - calculateGravityForces(layoutInfo, options); - // Propagate forces from parent to child - propagateForces(layoutInfo); - // Update positions based on calculated forces - updatePositions(layoutInfo); -}; - -/** - * @brief : Computes the node repulsion forces - */ -var calculateNodeForces = function calculateNodeForces(layoutInfo, options) { - // Go through each of the graphs in graphSet - // Nodes only repel each other if they belong to the same graph - // var s = 'calculateNodeForces'; - // logDebug(s); - for (var i = 0; i < layoutInfo.graphSet.length; i++) { - var graph = layoutInfo.graphSet[i]; - var numNodes = graph.length; - - // s = "Set: " + graph.toString(); - // logDebug(s); - - // Now get all the pairs of nodes - // Only get each pair once, (A, B) = (B, A) - for (var j = 0; j < numNodes; j++) { - var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; - for (var k = j + 1; k < numNodes; k++) { - var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k]]]; - nodeRepulsion(node1, node2, layoutInfo, options); - } - } - } -}; -var randomDistance = function randomDistance(max) { - return -max + 2 * max * Math.random(); -}; - -/** - * @brief : Compute the node repulsion forces between a pair of nodes - */ -var nodeRepulsion = function nodeRepulsion(node1, node2, layoutInfo, options) { - // var s = "Node repulsion. Node1: " + node1.id + " Node2: " + node2.id; - - var cmptId1 = node1.cmptId; - var cmptId2 = node2.cmptId; - if (cmptId1 !== cmptId2 && !layoutInfo.isCompound) { - return; - } - - // Get direction of line connecting both node centers - var directionX = node2.positionX - node1.positionX; - var directionY = node2.positionY - node1.positionY; - var maxRandDist = 1; - // s += "\ndirectionX: " + directionX + ", directionY: " + directionY; - - // If both centers are the same, apply a random force - if (0 === directionX && 0 === directionY) { - directionX = randomDistance(maxRandDist); - directionY = randomDistance(maxRandDist); - } - var overlap = nodesOverlap(node1, node2, directionX, directionY); - if (overlap > 0) { - // s += "\nNodes DO overlap."; - // s += "\nOverlap: " + overlap; - // If nodes overlap, repulsion force is proportional - // to the overlap - var force = options.nodeOverlap * overlap; - - // Compute the module and components of the force vector - var distance = Math.sqrt(directionX * directionX + directionY * directionY); - // s += "\nDistance: " + distance; - var forceX = force * directionX / distance; - var forceY = force * directionY / distance; - } else { - // s += "\nNodes do NOT overlap."; - // If there's no overlap, force is inversely proportional - // to squared distance - - // Get clipping points for both nodes - var point1 = findClippingPoint(node1, directionX, directionY); - var point2 = findClippingPoint(node2, -1 * directionX, -1 * directionY); - - // Use clipping points to compute distance - var distanceX = point2.x - point1.x; - var distanceY = point2.y - point1.y; - var distanceSqr = distanceX * distanceX + distanceY * distanceY; - var distance = Math.sqrt(distanceSqr); - // s += "\nDistance: " + distance; - - // Compute the module and components of the force vector - var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr; - var forceX = force * distanceX / distance; - var forceY = force * distanceY / distance; - } - - // Apply force - if (!node1.isLocked) { - node1.offsetX -= forceX; - node1.offsetY -= forceY; - } - if (!node2.isLocked) { - node2.offsetX += forceX; - node2.offsetY += forceY; - } - - // s += "\nForceX: " + forceX + " ForceY: " + forceY; - // logDebug(s); - - return; -}; - -/** - * @brief : Determines whether two nodes overlap or not - * @return : Amount of overlapping (0 => no overlap) - */ -var nodesOverlap = function nodesOverlap(node1, node2, dX, dY) { - if (dX > 0) { - var overlapX = node1.maxX - node2.minX; - } else { - var overlapX = node2.maxX - node1.minX; - } - if (dY > 0) { - var overlapY = node1.maxY - node2.minY; - } else { - var overlapY = node2.maxY - node1.minY; - } - if (overlapX >= 0 && overlapY >= 0) { - return Math.sqrt(overlapX * overlapX + overlapY * overlapY); - } else { - return 0; - } -}; - -/** - * @brief : Finds the point in which an edge (direction dX, dY) intersects - * the rectangular bounding box of it's source/target node - */ -var findClippingPoint = function findClippingPoint(node, dX, dY) { - // Shorcuts - var X = node.positionX; - var Y = node.positionY; - var H = node.height || 1; - var W = node.width || 1; - var dirSlope = dY / dX; - var nodeSlope = H / W; - - // var s = 'Computing clipping point of node ' + node.id + - // " . Height: " + H + ", Width: " + W + - // "\nDirection " + dX + ", " + dY; - // - // Compute intersection - var res = {}; - - // Case: Vertical direction (up) - if (0 === dX && 0 < dY) { - res.x = X; - // s += "\nUp direction"; - res.y = Y + H / 2; - return res; - } - - // Case: Vertical direction (down) - if (0 === dX && 0 > dY) { - res.x = X; - res.y = Y + H / 2; - // s += "\nDown direction"; - - return res; - } - - // Case: Intersects the right border - if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { - res.x = X + W / 2; - res.y = Y + W * dY / 2 / dX; - // s += "\nRightborder"; - - return res; - } - - // Case: Intersects the left border - if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { - res.x = X - W / 2; - res.y = Y - W * dY / 2 / dX; - // s += "\nLeftborder"; - - return res; - } - - // Case: Intersects the top border - if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { - res.x = X + H * dX / 2 / dY; - res.y = Y + H / 2; - // s += "\nTop border"; - - return res; - } - - // Case: Intersects the bottom border - if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { - res.x = X - H * dX / 2 / dY; - res.y = Y - H / 2; - // s += "\nBottom border"; - - return res; - } - - // s += "\nClipping point found at " + res.x + ", " + res.y; - // logDebug(s); - return res; -}; - -/** - * @brief : Calculates all edge forces - */ -var calculateEdgeForces = function calculateEdgeForces(layoutInfo, options) { - // Iterate over all edges - for (var i = 0; i < layoutInfo.edgeSize; i++) { - // Get edge, source & target nodes - var edge = layoutInfo.layoutEdges[i]; - var sourceIx = layoutInfo.idToIndex[edge.sourceId]; - var source = layoutInfo.layoutNodes[sourceIx]; - var targetIx = layoutInfo.idToIndex[edge.targetId]; - var target = layoutInfo.layoutNodes[targetIx]; - - // Get direction of line connecting both node centers - var directionX = target.positionX - source.positionX; - var directionY = target.positionY - source.positionY; - - // If both centers are the same, do nothing. - // A random force has already been applied as node repulsion - if (0 === directionX && 0 === directionY) { - continue; - } - - // Get clipping points for both nodes - var point1 = findClippingPoint(source, directionX, directionY); - var point2 = findClippingPoint(target, -1 * directionX, -1 * directionY); - var lx = point2.x - point1.x; - var ly = point2.y - point1.y; - var l = Math.sqrt(lx * lx + ly * ly); - var force = Math.pow(edge.idealLength - l, 2) / edge.elasticity; - if (0 !== l) { - var forceX = force * lx / l; - var forceY = force * ly / l; - } else { - var forceX = 0; - var forceY = 0; - } - - // Add this force to target and source nodes - if (!source.isLocked) { - source.offsetX += forceX; - source.offsetY += forceY; - } - if (!target.isLocked) { - target.offsetX -= forceX; - target.offsetY -= forceY; - } - - // var s = 'Edge force between nodes ' + source.id + ' and ' + target.id; - // s += "\nDistance: " + l + " Force: (" + forceX + ", " + forceY + ")"; - // logDebug(s); - } -}; - -/** - * @brief : Computes gravity forces for all nodes - */ -var calculateGravityForces = function calculateGravityForces(layoutInfo, options) { - if (options.gravity === 0) { - return; - } - var distThreshold = 1; - - // var s = 'calculateGravityForces'; - // logDebug(s); - for (var i = 0; i < layoutInfo.graphSet.length; i++) { - var graph = layoutInfo.graphSet[i]; - var numNodes = graph.length; - - // s = "Set: " + graph.toString(); - // logDebug(s); - - // Compute graph center - if (0 === i) { - var centerX = layoutInfo.clientHeight / 2; - var centerY = layoutInfo.clientWidth / 2; - } else { - // Get Parent node for this graph, and use its position as center - var temp = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[0]]]; - var parent = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]]; - var centerX = parent.positionX; - var centerY = parent.positionY; - } - // s = "Center found at: " + centerX + ", " + centerY; - // logDebug(s); - - // Apply force to all nodes in graph - for (var j = 0; j < numNodes; j++) { - var node = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; - // s = "Node: " + node.id; - - if (node.isLocked) { - continue; - } - var dx = centerX - node.positionX; - var dy = centerY - node.positionY; - var d = Math.sqrt(dx * dx + dy * dy); - if (d > distThreshold) { - var fx = options.gravity * dx / d; - var fy = options.gravity * dy / d; - node.offsetX += fx; - node.offsetY += fy; - // s += ": Applied force: " + fx + ", " + fy; - } - // logDebug(s); - } - } -}; - -/** - * @brief : This function propagates the existing offsets from - * parent nodes to its descendents. - * @arg layoutInfo : layoutInfo Object - * @arg cy : cytoscape Object - * @arg options : Layout options - */ -var propagateForces = function propagateForces(layoutInfo, options) { - // Inline implementation of a queue, used for traversing the graph in BFS order - var queue = []; - var start = 0; // Points to the start the queue - var end = -1; // Points to the end of the queue - - // logDebug('propagateForces'); - - // Start by visiting the nodes in the root graph - queue.push.apply(queue, layoutInfo.graphSet[0]); - end += layoutInfo.graphSet[0].length; - - // Traverse the graph, level by level, - while (start <= end) { - // Get the node to visit and remove it from queue - var nodeId = queue[start++]; - var nodeIndex = layoutInfo.idToIndex[nodeId]; - var node = layoutInfo.layoutNodes[nodeIndex]; - var children = node.children; - - // We only need to process the node if it's compound - if (0 < children.length && !node.isLocked) { - var offX = node.offsetX; - var offY = node.offsetY; - - // var s = "Propagating offset from parent node : " + node.id + - // ". OffsetX: " + offX + ". OffsetY: " + offY; - // s += "\n Children: " + children.toString(); - // logDebug(s); - - for (var i = 0; i < children.length; i++) { - var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children[i]]]; - // Propagate offset - childNode.offsetX += offX; - childNode.offsetY += offY; - // Add children to queue to be visited - queue[++end] = children[i]; - } - - // Reset parent offsets - node.offsetX = 0; - node.offsetY = 0; - } - } -}; - -/** - * @brief : Updates the layout model positions, based on - * the accumulated forces - */ -var updatePositions = function updatePositions(layoutInfo, options) { - // var s = 'Updating positions'; - // logDebug(s); - - // Reset boundaries for compound nodes - for (var i = 0; i < layoutInfo.nodeSize; i++) { - var n = layoutInfo.layoutNodes[i]; - if (0 < n.children.length) { - // logDebug("Resetting boundaries of compound node: " + n.id); - n.maxX = undefined; - n.minX = undefined; - n.maxY = undefined; - n.minY = undefined; - } - } - for (var i = 0; i < layoutInfo.nodeSize; i++) { - var n = layoutInfo.layoutNodes[i]; - if (0 < n.children.length || n.isLocked) { - // No need to set compound or locked node position - // logDebug("Skipping position update of node: " + n.id); - continue; - } - // s = "Node: " + n.id + " Previous position: (" + - // n.positionX + ", " + n.positionY + ")."; - - // Limit displacement in order to improve stability - var tempForce = limitForce(n.offsetX, n.offsetY, layoutInfo.temperature); - n.positionX += tempForce.x; - n.positionY += tempForce.y; - n.offsetX = 0; - n.offsetY = 0; - n.minX = n.positionX - n.width; - n.maxX = n.positionX + n.width; - n.minY = n.positionY - n.height; - n.maxY = n.positionY + n.height; - // s += " New Position: (" + n.positionX + ", " + n.positionY + ")."; - // logDebug(s); - - // Update ancestry boudaries - updateAncestryBoundaries(n, layoutInfo); - } - - // Update size, position of compund nodes - for (var i = 0; i < layoutInfo.nodeSize; i++) { - var n = layoutInfo.layoutNodes[i]; - if (0 < n.children.length && !n.isLocked) { - n.positionX = (n.maxX + n.minX) / 2; - n.positionY = (n.maxY + n.minY) / 2; - n.width = n.maxX - n.minX; - n.height = n.maxY - n.minY; - // s = "Updating position, size of compound node " + n.id; - // s += "\nPositionX: " + n.positionX + ", PositionY: " + n.positionY; - // s += "\nWidth: " + n.width + ", Height: " + n.height; - // logDebug(s); - } - } -}; - -/** - * @brief : Limits a force (forceX, forceY) to be not - * greater (in modulo) than max. - 8 Preserves force direction. - */ -var limitForce = function limitForce(forceX, forceY, max) { - // var s = "Limiting force: (" + forceX + ", " + forceY + "). Max: " + max; - var force = Math.sqrt(forceX * forceX + forceY * forceY); - if (force > max) { - var res = { - x: max * forceX / force, - y: max * forceY / force - }; - } else { - var res = { - x: forceX, - y: forceY - }; - } - - // s += ".\nResult: (" + res.x + ", " + res.y + ")"; - // logDebug(s); - - return res; -}; - -/** - * @brief : Function used for keeping track of compound node - * sizes, since they should bound all their subnodes. - */ -var updateAncestryBoundaries = function updateAncestryBoundaries(node, layoutInfo) { - // var s = "Propagating new position/size of node " + node.id; - var parentId = node.parentId; - if (null == parentId) { - // If there's no parent, we are done - // s += ". No parent node."; - // logDebug(s); - return; - } - - // Get Parent Node - var p = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]]; - var flag = false; - - // MaxX - if (null == p.maxX || node.maxX + p.padRight > p.maxX) { - p.maxX = node.maxX + p.padRight; - flag = true; - // s += "\nNew maxX for parent node " + p.id + ": " + p.maxX; - } - - // MinX - if (null == p.minX || node.minX - p.padLeft < p.minX) { - p.minX = node.minX - p.padLeft; - flag = true; - // s += "\nNew minX for parent node " + p.id + ": " + p.minX; - } - - // MaxY - if (null == p.maxY || node.maxY + p.padBottom > p.maxY) { - p.maxY = node.maxY + p.padBottom; - flag = true; - // s += "\nNew maxY for parent node " + p.id + ": " + p.maxY; - } - - // MinY - if (null == p.minY || node.minY - p.padTop < p.minY) { - p.minY = node.minY - p.padTop; - flag = true; - // s += "\nNew minY for parent node " + p.id + ": " + p.minY; - } - - // If updated boundaries, propagate changes upward - if (flag) { - // logDebug(s); - return updateAncestryBoundaries(p, layoutInfo); - } - - // s += ". No changes in boundaries/position of parent node " + p.id; - // logDebug(s); - return; -}; -var separateComponents = function separateComponents(layoutInfo, options) { - var nodes = layoutInfo.layoutNodes; - var components = []; - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - var cid = node.cmptId; - var component = components[cid] = components[cid] || []; - component.push(node); - } - var totalA = 0; - for (var i = 0; i < components.length; i++) { - var c = components[i]; - if (!c) { - continue; - } - c.x1 = Infinity; - c.x2 = -Infinity; - c.y1 = Infinity; - c.y2 = -Infinity; - for (var j = 0; j < c.length; j++) { - var n = c[j]; - c.x1 = Math.min(c.x1, n.positionX - n.width / 2); - c.x2 = Math.max(c.x2, n.positionX + n.width / 2); - c.y1 = Math.min(c.y1, n.positionY - n.height / 2); - c.y2 = Math.max(c.y2, n.positionY + n.height / 2); - } - c.w = c.x2 - c.x1; - c.h = c.y2 - c.y1; - totalA += c.w * c.h; - } - components.sort(function (c1, c2) { - return c2.w * c2.h - c1.w * c1.h; - }); - var x = 0; - var y = 0; - var usedW = 0; - var rowH = 0; - var maxRowW = Math.sqrt(totalA) * layoutInfo.clientWidth / layoutInfo.clientHeight; - for (var i = 0; i < components.length; i++) { - var c = components[i]; - if (!c) { - continue; - } - for (var j = 0; j < c.length; j++) { - var n = c[j]; - if (!n.isLocked) { - n.positionX += x - c.x1; - n.positionY += y - c.y1; - } - } - x += c.w + options.componentSpacing; - usedW += c.w + options.componentSpacing; - rowH = Math.max(rowH, c.h); - if (usedW > maxRowW) { - y += rowH + options.componentSpacing; - x = 0; - usedW = 0; - rowH = 0; - } - } -}; - -var defaults$3 = { - fit: true, - // whether to fit the viewport to the graph - padding: 30, - // padding used on fit - boundingBox: undefined, - // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } - avoidOverlap: true, - // prevents node overlap, may overflow boundingBox if not enough space - avoidOverlapPadding: 10, - // extra spacing around nodes when avoidOverlap: true - nodeDimensionsIncludeLabels: false, - // Excludes the label when calculating node bounding boxes for the layout algorithm - spacingFactor: undefined, - // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up - condense: false, - // uses all available space on false, uses minimal space on true - rows: undefined, - // force num of rows in the grid - cols: undefined, - // force num of columns in the grid - position: function position(node) {}, - // returns { row, col } for element - sort: undefined, - // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } - animate: false, - // whether to transition the node positions - animationDuration: 500, - // duration of animation in ms if enabled - animationEasing: undefined, - // easing of animation if enabled - animateFilter: function animateFilter(node, i) { - return true; - }, - // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts - ready: undefined, - // callback on layoutready - stop: undefined, - // callback on layoutstop - transform: function transform(node, position) { - return position; - } // transform a given node position. Useful for changing flow direction in discrete layouts -}; - -function GridLayout(options) { - this.options = extend({}, defaults$3, options); -} -GridLayout.prototype.run = function () { - var params = this.options; - var options = params; - var cy = params.cy; - var eles = options.eles; - var nodes = eles.nodes().not(':parent'); - if (options.sort) { - nodes = nodes.sort(options.sort); - } - var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { - x1: 0, - y1: 0, - w: cy.width(), - h: cy.height() - }); - if (bb.h === 0 || bb.w === 0) { - eles.nodes().layoutPositions(this, options, function (ele) { - return { - x: bb.x1, - y: bb.y1 - }; - }); - } else { - // width/height * splits^2 = cells where splits is number of times to split width - var cells = nodes.size(); - var splits = Math.sqrt(cells * bb.h / bb.w); - var rows = Math.round(splits); - var cols = Math.round(bb.w / bb.h * splits); - var small = function small(val) { - if (val == null) { - return Math.min(rows, cols); - } else { - var min = Math.min(rows, cols); - if (min == rows) { - rows = val; - } else { - cols = val; - } - } - }; - var large = function large(val) { - if (val == null) { - return Math.max(rows, cols); - } else { - var max = Math.max(rows, cols); - if (max == rows) { - rows = val; - } else { - cols = val; - } - } - }; - var oRows = options.rows; - var oCols = options.cols != null ? options.cols : options.columns; - - // if rows or columns were set in options, use those values - if (oRows != null && oCols != null) { - rows = oRows; - cols = oCols; - } else if (oRows != null && oCols == null) { - rows = oRows; - cols = Math.ceil(cells / rows); - } else if (oRows == null && oCols != null) { - cols = oCols; - rows = Math.ceil(cells / cols); - } - - // otherwise use the automatic values and adjust accordingly - - // if rounding was up, see if we can reduce rows or columns - else if (cols * rows > cells) { - var sm = small(); - var lg = large(); - - // reducing the small side takes away the most cells, so try it first - if ((sm - 1) * lg >= cells) { - small(sm - 1); - } else if ((lg - 1) * sm >= cells) { - large(lg - 1); - } - } else { - // if rounding was too low, add rows or columns - while (cols * rows < cells) { - var _sm = small(); - var _lg = large(); - - // try to add to larger side first (adds less in multiplication) - if ((_lg + 1) * _sm >= cells) { - large(_lg + 1); - } else { - small(_sm + 1); - } - } - } - var cellWidth = bb.w / cols; - var cellHeight = bb.h / rows; - if (options.condense) { - cellWidth = 0; - cellHeight = 0; - } - if (options.avoidOverlap) { - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - var pos = node._private.position; - if (pos.x == null || pos.y == null) { - // for bb - pos.x = 0; - pos.y = 0; - } - var nbb = node.layoutDimensions(options); - var p = options.avoidOverlapPadding; - var w = nbb.w + p; - var h = nbb.h + p; - cellWidth = Math.max(cellWidth, w); - cellHeight = Math.max(cellHeight, h); - } - } - var cellUsed = {}; // e.g. 'c-0-2' => true - - var used = function used(row, col) { - return cellUsed['c-' + row + '-' + col] ? true : false; - }; - var use = function use(row, col) { - cellUsed['c-' + row + '-' + col] = true; - }; - - // to keep track of current cell position - var row = 0; - var col = 0; - var moveToNextCell = function moveToNextCell() { - col++; - if (col >= cols) { - col = 0; - row++; - } - }; - - // get a cache of all the manual positions - var id2manPos = {}; - for (var _i = 0; _i < nodes.length; _i++) { - var _node = nodes[_i]; - var rcPos = options.position(_node); - if (rcPos && (rcPos.row !== undefined || rcPos.col !== undefined)) { - // must have at least row or col def'd - var _pos = { - row: rcPos.row, - col: rcPos.col - }; - if (_pos.col === undefined) { - // find unused col - _pos.col = 0; - while (used(_pos.row, _pos.col)) { - _pos.col++; - } - } else if (_pos.row === undefined) { - // find unused row - _pos.row = 0; - while (used(_pos.row, _pos.col)) { - _pos.row++; - } - } - id2manPos[_node.id()] = _pos; - use(_pos.row, _pos.col); - } - } - var getPos = function getPos(element, i) { - var x, y; - if (element.locked() || element.isParent()) { - return false; - } - - // see if we have a manual position set - var rcPos = id2manPos[element.id()]; - if (rcPos) { - x = rcPos.col * cellWidth + cellWidth / 2 + bb.x1; - y = rcPos.row * cellHeight + cellHeight / 2 + bb.y1; - } else { - // otherwise set automatically - - while (used(row, col)) { - moveToNextCell(); - } - x = col * cellWidth + cellWidth / 2 + bb.x1; - y = row * cellHeight + cellHeight / 2 + bb.y1; - use(row, col); - moveToNextCell(); - } - return { - x: x, - y: y - }; - }; - nodes.layoutPositions(this, options, getPos); - } - return this; // chaining -}; - -// default layout options -var defaults$2 = { - ready: function ready() {}, - // on layoutready - stop: function stop() {} // on layoutstop -}; - -// constructor -// options : object containing layout options -function NullLayout(options) { - this.options = extend({}, defaults$2, options); -} - -// runs the layout -NullLayout.prototype.run = function () { - var options = this.options; - var eles = options.eles; // elements to consider in the layout - var layout = this; - - // cy is automatically populated for us in the constructor - // (disable eslint for next line as this serves as example layout code to external developers) - // eslint-disable-next-line no-unused-vars - options.cy; - layout.emit('layoutstart'); - - // puts all nodes at (0, 0) - // n.b. most layouts would use layoutPositions(), instead of positions() and manual events - eles.nodes().positions(function () { - return { - x: 0, - y: 0 - }; - }); - - // trigger layoutready when each node has had its position set at least once - layout.one('layoutready', options.ready); - layout.emit('layoutready'); - - // trigger layoutstop when the layout stops (e.g. finishes) - layout.one('layoutstop', options.stop); - layout.emit('layoutstop'); - return this; // chaining -}; - -// called on continuous layouts to stop them before they finish -NullLayout.prototype.stop = function () { - return this; // chaining -}; - -var defaults$1 = { - positions: undefined, - // map of (node id) => (position obj); or function(node){ return somPos; } - zoom: undefined, - // the zoom level to set (prob want fit = false if set) - pan: undefined, - // the pan level to set (prob want fit = false if set) - fit: true, - // whether to fit to viewport - padding: 30, - // padding on fit - spacingFactor: undefined, - // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up - animate: false, - // whether to transition the node positions - animationDuration: 500, - // duration of animation in ms if enabled - animationEasing: undefined, - // easing of animation if enabled - animateFilter: function animateFilter(node, i) { - return true; - }, - // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts - ready: undefined, - // callback on layoutready - stop: undefined, - // callback on layoutstop - transform: function transform(node, position) { - return position; - } // transform a given node position. Useful for changing flow direction in discrete layouts -}; - -function PresetLayout(options) { - this.options = extend({}, defaults$1, options); -} -PresetLayout.prototype.run = function () { - var options = this.options; - var eles = options.eles; - var nodes = eles.nodes(); - var posIsFn = fn$6(options.positions); - function getPosition(node) { - if (options.positions == null) { - return copyPosition(node.position()); - } - if (posIsFn) { - return options.positions(node); - } - var pos = options.positions[node._private.data.id]; - if (pos == null) { - return null; - } - return pos; - } - nodes.layoutPositions(this, options, function (node, i) { - var position = getPosition(node); - if (node.locked() || position == null) { - return false; - } - return position; - }); - return this; // chaining -}; - -var defaults = { - fit: true, - // whether to fit to viewport - padding: 30, - // fit padding - boundingBox: undefined, - // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } - animate: false, - // whether to transition the node positions - animationDuration: 500, - // duration of animation in ms if enabled - animationEasing: undefined, - // easing of animation if enabled - animateFilter: function animateFilter(node, i) { - return true; - }, - // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts - ready: undefined, - // callback on layoutready - stop: undefined, - // callback on layoutstop - transform: function transform(node, position) { - return position; - } // transform a given node position. Useful for changing flow direction in discrete layouts -}; - -function RandomLayout(options) { - this.options = extend({}, defaults, options); -} -RandomLayout.prototype.run = function () { - var options = this.options; - var cy = options.cy; - var eles = options.eles; - var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { - x1: 0, - y1: 0, - w: cy.width(), - h: cy.height() - }); - var getPos = function getPos(node, i) { - return { - x: bb.x1 + Math.round(Math.random() * bb.w), - y: bb.y1 + Math.round(Math.random() * bb.h) - }; - }; - eles.nodes().layoutPositions(this, options, getPos); - return this; // chaining -}; - -var layout = [{ - name: 'breadthfirst', - impl: BreadthFirstLayout -}, { - name: 'circle', - impl: CircleLayout -}, { - name: 'concentric', - impl: ConcentricLayout -}, { - name: 'cose', - impl: CoseLayout -}, { - name: 'grid', - impl: GridLayout -}, { - name: 'null', - impl: NullLayout -}, { - name: 'preset', - impl: PresetLayout -}, { - name: 'random', - impl: RandomLayout -}]; - -function NullRenderer(options) { - this.options = options; - this.notifications = 0; // for testing -} - -var noop = function noop() {}; -var throwImgErr = function throwImgErr() { - throw new Error('A headless instance can not render images'); -}; -NullRenderer.prototype = { - recalculateRenderedStyle: noop, - notify: function notify() { - this.notifications++; - }, - init: noop, - isHeadless: function isHeadless() { - return true; - }, - png: throwImgErr, - jpg: throwImgErr -}; - -var BRp$f = {}; -BRp$f.arrowShapeWidth = 0.3; -BRp$f.registerArrowShapes = function () { - var arrowShapes = this.arrowShapes = {}; - var renderer = this; - - // Contract for arrow shapes: - // 0, 0 is arrow tip - // (0, 1) is direction towards node - // (1, 0) is right - // - // functional api: - // collide: check x, y in shape - // roughCollide: called before collide, no false negatives - // draw: draw - // spacing: dist(arrowTip, nodeBoundary) - // gap: dist(edgeTip, nodeBoundary), edgeTip may != arrowTip - - var bbCollide = function bbCollide(x, y, size, angle, translation, edgeWidth, padding) { - var x1 = translation.x - size / 2 - padding; - var x2 = translation.x + size / 2 + padding; - var y1 = translation.y - size / 2 - padding; - var y2 = translation.y + size / 2 + padding; - var inside = x1 <= x && x <= x2 && y1 <= y && y <= y2; - return inside; - }; - var transform = function transform(x, y, size, angle, translation) { - var xRotated = x * Math.cos(angle) - y * Math.sin(angle); - var yRotated = x * Math.sin(angle) + y * Math.cos(angle); - var xScaled = xRotated * size; - var yScaled = yRotated * size; - var xTranslated = xScaled + translation.x; - var yTranslated = yScaled + translation.y; - return { - x: xTranslated, - y: yTranslated - }; - }; - var transformPoints = function transformPoints(pts, size, angle, translation) { - var retPts = []; - for (var i = 0; i < pts.length; i += 2) { - var x = pts[i]; - var y = pts[i + 1]; - retPts.push(transform(x, y, size, angle, translation)); - } - return retPts; - }; - var pointsToArr = function pointsToArr(pts) { - var ret = []; - for (var i = 0; i < pts.length; i++) { - var p = pts[i]; - ret.push(p.x, p.y); - } - return ret; - }; - var standardGap = function standardGap(edge) { - return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').pfValue * 2; - }; - var defineArrowShape = function defineArrowShape(name, defn) { - if (string(defn)) { - defn = arrowShapes[defn]; - } - arrowShapes[name] = extend({ - name: name, - points: [-0.15, -0.3, 0.15, -0.3, 0.15, 0.3, -0.15, 0.3], - collide: function collide(x, y, size, angle, translation, padding) { - var points = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); - var inside = pointInsidePolygonPoints(x, y, points); - return inside; - }, - roughCollide: bbCollide, - draw: function draw(context, size, angle, translation) { - var points = transformPoints(this.points, size, angle, translation); - renderer.arrowShapeImpl('polygon')(context, points); - }, - spacing: function spacing(edge) { - return 0; - }, - gap: standardGap - }, defn); - }; - defineArrowShape('none', { - collide: falsify, - roughCollide: falsify, - draw: noop$1, - spacing: zeroify, - gap: zeroify - }); - defineArrowShape('triangle', { - points: [-0.15, -0.3, 0, 0, 0.15, -0.3] - }); - defineArrowShape('arrow', 'triangle'); - defineArrowShape('triangle-backcurve', { - points: arrowShapes['triangle'].points, - controlPoint: [0, -0.15], - roughCollide: bbCollide, - draw: function draw(context, size, angle, translation, edgeWidth) { - var ptsTrans = transformPoints(this.points, size, angle, translation); - var ctrlPt = this.controlPoint; - var ctrlPtTrans = transform(ctrlPt[0], ctrlPt[1], size, angle, translation); - renderer.arrowShapeImpl(this.name)(context, ptsTrans, ctrlPtTrans); - }, - gap: function gap(edge) { - return standardGap(edge) * 0.8; - } - }); - defineArrowShape('triangle-tee', { - points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], - pointsTee: [-0.15, -0.4, -0.15, -0.5, 0.15, -0.5, 0.15, -0.4], - collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { - var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); - var teePts = pointsToArr(transformPoints(this.pointsTee, size + 2 * padding, angle, translation)); - var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); - return inside; - }, - draw: function draw(context, size, angle, translation, edgeWidth) { - var triPts = transformPoints(this.points, size, angle, translation); - var teePts = transformPoints(this.pointsTee, size, angle, translation); - renderer.arrowShapeImpl(this.name)(context, triPts, teePts); - } - }); - defineArrowShape('circle-triangle', { - radius: 0.15, - pointsTr: [0, -0.15, 0.15, -0.45, -0.15, -0.45, 0, -0.15], - collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { - var t = translation; - var circleInside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); - var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); - return pointInsidePolygonPoints(x, y, triPts) || circleInside; - }, - draw: function draw(context, size, angle, translation, edgeWidth) { - var triPts = transformPoints(this.pointsTr, size, angle, translation); - renderer.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size); - }, - spacing: function spacing(edge) { - return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; - } - }); - defineArrowShape('triangle-cross', { - points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], - baseCrossLinePts: [-0.15, -0.4, - // first half of the rectangle - -0.15, -0.4, 0.15, -0.4, - // second half of the rectangle - 0.15, -0.4], - crossLinePts: function crossLinePts(size, edgeWidth) { - // shift points so that the distance between the cross points matches edge width - var p = this.baseCrossLinePts.slice(); - var shiftFactor = edgeWidth / size; - var y0 = 3; - var y1 = 5; - p[y0] = p[y0] - shiftFactor; - p[y1] = p[y1] - shiftFactor; - return p; - }, - collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { - var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); - var teePts = pointsToArr(transformPoints(this.crossLinePts(size, edgeWidth), size + 2 * padding, angle, translation)); - var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); - return inside; - }, - draw: function draw(context, size, angle, translation, edgeWidth) { - var triPts = transformPoints(this.points, size, angle, translation); - var crossLinePts = transformPoints(this.crossLinePts(size, edgeWidth), size, angle, translation); - renderer.arrowShapeImpl(this.name)(context, triPts, crossLinePts); - } - }); - defineArrowShape('vee', { - points: [-0.15, -0.3, 0, 0, 0.15, -0.3, 0, -0.15], - gap: function gap(edge) { - return standardGap(edge) * 0.525; - } - }); - defineArrowShape('circle', { - radius: 0.15, - collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { - var t = translation; - var inside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); - return inside; - }, - draw: function draw(context, size, angle, translation, edgeWidth) { - renderer.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size); - }, - spacing: function spacing(edge) { - return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; - } - }); - defineArrowShape('tee', { - points: [-0.15, 0, -0.15, -0.1, 0.15, -0.1, 0.15, 0], - spacing: function spacing(edge) { - return 1; - }, - gap: function gap(edge) { - return 1; - } - }); - defineArrowShape('square', { - points: [-0.15, 0.00, 0.15, 0.00, 0.15, -0.3, -0.15, -0.3] - }); - defineArrowShape('diamond', { - points: [-0.15, -0.15, 0, -0.3, 0.15, -0.15, 0, 0], - gap: function gap(edge) { - return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; - } - }); - defineArrowShape('chevron', { - points: [0, 0, -0.15, -0.15, -0.1, -0.2, 0, -0.1, 0.1, -0.2, 0.15, -0.15], - gap: function gap(edge) { - return 0.95 * edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; - } - }); -}; - -var BRp$e = {}; - -// Project mouse -BRp$e.projectIntoViewport = function (clientX, clientY) { - var cy = this.cy; - var offsets = this.findContainerClientCoords(); - var offsetLeft = offsets[0]; - var offsetTop = offsets[1]; - var scale = offsets[4]; - var pan = cy.pan(); - var zoom = cy.zoom(); - var x = ((clientX - offsetLeft) / scale - pan.x) / zoom; - var y = ((clientY - offsetTop) / scale - pan.y) / zoom; - return [x, y]; -}; -BRp$e.findContainerClientCoords = function () { - if (this.containerBB) { - return this.containerBB; - } - var container = this.container; - var rect = container.getBoundingClientRect(); - var style = this.cy.window().getComputedStyle(container); - var styleValue = function styleValue(name) { - return parseFloat(style.getPropertyValue(name)); - }; - var padding = { - left: styleValue('padding-left'), - right: styleValue('padding-right'), - top: styleValue('padding-top'), - bottom: styleValue('padding-bottom') - }; - var border = { - left: styleValue('border-left-width'), - right: styleValue('border-right-width'), - top: styleValue('border-top-width'), - bottom: styleValue('border-bottom-width') - }; - var clientWidth = container.clientWidth; - var clientHeight = container.clientHeight; - var paddingHor = padding.left + padding.right; - var paddingVer = padding.top + padding.bottom; - var borderHor = border.left + border.right; - var scale = rect.width / (clientWidth + borderHor); - var unscaledW = clientWidth - paddingHor; - var unscaledH = clientHeight - paddingVer; - var left = rect.left + padding.left + border.left; - var top = rect.top + padding.top + border.top; - return this.containerBB = [left, top, unscaledW, unscaledH, scale]; -}; -BRp$e.invalidateContainerClientCoordsCache = function () { - this.containerBB = null; -}; -BRp$e.findNearestElement = function (x, y, interactiveElementsOnly, isTouch) { - return this.findNearestElements(x, y, interactiveElementsOnly, isTouch)[0]; -}; -BRp$e.findNearestElements = function (x, y, interactiveElementsOnly, isTouch) { - var self = this; - var r = this; - var eles = r.getCachedZSortedEles(); - var near = []; // 1 node max, 1 edge max - var zoom = r.cy.zoom(); - var hasCompounds = r.cy.hasCompoundNodes(); - var edgeThreshold = (isTouch ? 24 : 8) / zoom; - var nodeThreshold = (isTouch ? 8 : 2) / zoom; - var labelThreshold = (isTouch ? 8 : 2) / zoom; - var minSqDist = Infinity; - var nearEdge; - var nearNode; - if (interactiveElementsOnly) { - eles = eles.interactive; - } - function addEle(ele, sqDist) { - if (ele.isNode()) { - if (nearNode) { - return; // can't replace node - } else { - nearNode = ele; - near.push(ele); - } - } - if (ele.isEdge() && (sqDist == null || sqDist < minSqDist)) { - if (nearEdge) { - // then replace existing edge - // can replace only if same z-index - if (nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value && nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value) { - for (var i = 0; i < near.length; i++) { - if (near[i].isEdge()) { - near[i] = ele; - nearEdge = ele; - minSqDist = sqDist != null ? sqDist : minSqDist; - break; - } - } - } - } else { - near.push(ele); - nearEdge = ele; - minSqDist = sqDist != null ? sqDist : minSqDist; - } - } - } - function checkNode(node) { - var width = node.outerWidth() + 2 * nodeThreshold; - var height = node.outerHeight() + 2 * nodeThreshold; - var hw = width / 2; - var hh = height / 2; - var pos = node.position(); - if (pos.x - hw <= x && x <= pos.x + hw // bb check x - && pos.y - hh <= y && y <= pos.y + hh // bb check y - ) { - var shape = r.nodeShapes[self.getNodeShape(node)]; - if (shape.checkPoint(x, y, 0, width, height, pos.x, pos.y)) { - addEle(node, 0); - return true; - } - } - } - function checkEdge(edge) { - var _p = edge._private; - var rs = _p.rscratch; - var styleWidth = edge.pstyle('width').pfValue; - var scale = edge.pstyle('arrow-scale').value; - var width = styleWidth / 2 + edgeThreshold; // more like a distance radius from centre - var widthSq = width * width; - var width2 = width * 2; - var src = _p.source; - var tgt = _p.target; - var sqDist; - if (rs.edgeType === 'segments' || rs.edgeType === 'straight' || rs.edgeType === 'haystack') { - var pts = rs.allpts; - for (var i = 0; i + 3 < pts.length; i += 2) { - if (inLineVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], width2) && widthSq > (sqDist = sqdistToFiniteLine(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3]))) { - addEle(edge, sqDist); - return true; - } - } - } else if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { - var pts = rs.allpts; - for (var i = 0; i + 5 < rs.allpts.length; i += 4) { - if (inBezierVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5], width2) && widthSq > (sqDist = sqdistToQuadraticBezier(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5]))) { - addEle(edge, sqDist); - return true; - } - } - } - - // if we're close to the edge but didn't hit it, maybe we hit its arrows - - var src = src || _p.source; - var tgt = tgt || _p.target; - var arSize = self.getArrowWidth(styleWidth, scale); - var arrows = [{ - name: 'source', - x: rs.arrowStartX, - y: rs.arrowStartY, - angle: rs.srcArrowAngle - }, { - name: 'target', - x: rs.arrowEndX, - y: rs.arrowEndY, - angle: rs.tgtArrowAngle - }, { - name: 'mid-source', - x: rs.midX, - y: rs.midY, - angle: rs.midsrcArrowAngle - }, { - name: 'mid-target', - x: rs.midX, - y: rs.midY, - angle: rs.midtgtArrowAngle - }]; - for (var i = 0; i < arrows.length; i++) { - var ar = arrows[i]; - var shape = r.arrowShapes[edge.pstyle(ar.name + '-arrow-shape').value]; - var edgeWidth = edge.pstyle('width').pfValue; - if (shape.roughCollide(x, y, arSize, ar.angle, { - x: ar.x, - y: ar.y - }, edgeWidth, edgeThreshold) && shape.collide(x, y, arSize, ar.angle, { - x: ar.x, - y: ar.y - }, edgeWidth, edgeThreshold)) { - addEle(edge); - return true; - } - } - - // for compound graphs, hitting edge may actually want a connected node instead (b/c edge may have greater z-index precedence) - if (hasCompounds && near.length > 0) { - checkNode(src); - checkNode(tgt); - } - } - function preprop(obj, name, pre) { - return getPrefixedProperty(obj, name, pre); - } - function checkLabel(ele, prefix) { - var _p = ele._private; - var th = labelThreshold; - var prefixDash; - if (prefix) { - prefixDash = prefix + '-'; - } else { - prefixDash = ''; - } - ele.boundingBox(); - var bb = _p.labelBounds[prefix || 'main']; - var text = ele.pstyle(prefixDash + 'label').value; - var eventsEnabled = ele.pstyle('text-events').strValue === 'yes'; - if (!eventsEnabled || !text) { - return; - } - var lx = preprop(_p.rscratch, 'labelX', prefix); - var ly = preprop(_p.rscratch, 'labelY', prefix); - var theta = preprop(_p.rscratch, 'labelAngle', prefix); - var ox = ele.pstyle(prefixDash + 'text-margin-x').pfValue; - var oy = ele.pstyle(prefixDash + 'text-margin-y').pfValue; - var lx1 = bb.x1 - th - ox; // (-ox, -oy) as bb already includes margin - var lx2 = bb.x2 + th - ox; // and rotation is about (lx, ly) - var ly1 = bb.y1 - th - oy; - var ly2 = bb.y2 + th - oy; - if (theta) { - var cos = Math.cos(theta); - var sin = Math.sin(theta); - var rotate = function rotate(x, y) { - x = x - lx; - y = y - ly; - return { - x: x * cos - y * sin + lx, - y: x * sin + y * cos + ly - }; - }; - var px1y1 = rotate(lx1, ly1); - var px1y2 = rotate(lx1, ly2); - var px2y1 = rotate(lx2, ly1); - var px2y2 = rotate(lx2, ly2); - var points = [ - // with the margin added after the rotation is applied - px1y1.x + ox, px1y1.y + oy, px2y1.x + ox, px2y1.y + oy, px2y2.x + ox, px2y2.y + oy, px1y2.x + ox, px1y2.y + oy]; - if (pointInsidePolygonPoints(x, y, points)) { - addEle(ele); - return true; - } - } else { - // do a cheaper bb check - if (inBoundingBox(bb, x, y)) { - addEle(ele); - return true; - } - } - } - for (var i = eles.length - 1; i >= 0; i--) { - // reverse order for precedence - var ele = eles[i]; - if (ele.isNode()) { - checkNode(ele) || checkLabel(ele); - } else { - // then edge - checkEdge(ele) || checkLabel(ele) || checkLabel(ele, 'source') || checkLabel(ele, 'target'); - } - } - return near; -}; - -// 'Give me everything from this box' -BRp$e.getAllInBox = function (x1, y1, x2, y2) { - var eles = this.getCachedZSortedEles().interactive; - var box = []; - var x1c = Math.min(x1, x2); - var x2c = Math.max(x1, x2); - var y1c = Math.min(y1, y2); - var y2c = Math.max(y1, y2); - x1 = x1c; - x2 = x2c; - y1 = y1c; - y2 = y2c; - var boxBb = makeBoundingBox({ - x1: x1, - y1: y1, - x2: x2, - y2: y2 - }); - for (var e = 0; e < eles.length; e++) { - var ele = eles[e]; - if (ele.isNode()) { - var node = ele; - var nodeBb = node.boundingBox({ - includeNodes: true, - includeEdges: false, - includeLabels: false - }); - if (boundingBoxesIntersect(boxBb, nodeBb) && !boundingBoxInBoundingBox(nodeBb, boxBb)) { - box.push(node); - } - } else { - var edge = ele; - var _p = edge._private; - var rs = _p.rscratch; - if (rs.startX != null && rs.startY != null && !inBoundingBox(boxBb, rs.startX, rs.startY)) { - continue; - } - if (rs.endX != null && rs.endY != null && !inBoundingBox(boxBb, rs.endX, rs.endY)) { - continue; - } - if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' || rs.edgeType === 'segments' || rs.edgeType === 'haystack') { - var pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts; - var allInside = true; - for (var i = 0; i < pts.length; i++) { - if (!pointInBoundingBox(boxBb, pts[i])) { - allInside = false; - break; - } - } - if (allInside) { - box.push(edge); - } - } else if (rs.edgeType === 'haystack' || rs.edgeType === 'straight') { - box.push(edge); - } - } - } - return box; -}; - -var BRp$d = {}; -BRp$d.calculateArrowAngles = function (edge) { - var rs = edge._private.rscratch; - var isHaystack = rs.edgeType === 'haystack'; - var isBezier = rs.edgeType === 'bezier'; - var isMultibezier = rs.edgeType === 'multibezier'; - var isSegments = rs.edgeType === 'segments'; - var isCompound = rs.edgeType === 'compound'; - var isSelf = rs.edgeType === 'self'; - - // Displacement gives direction for arrowhead orientation - var dispX, dispY; - var startX, startY, endX, endY, midX, midY; - if (isHaystack) { - startX = rs.haystackPts[0]; - startY = rs.haystackPts[1]; - endX = rs.haystackPts[2]; - endY = rs.haystackPts[3]; - } else { - startX = rs.arrowStartX; - startY = rs.arrowStartY; - endX = rs.arrowEndX; - endY = rs.arrowEndY; - } - midX = rs.midX; - midY = rs.midY; - - // source - // - - if (isSegments) { - dispX = startX - rs.segpts[0]; - dispY = startY - rs.segpts[1]; - } else if (isMultibezier || isCompound || isSelf || isBezier) { - var pts = rs.allpts; - var bX = qbezierAt(pts[0], pts[2], pts[4], 0.1); - var bY = qbezierAt(pts[1], pts[3], pts[5], 0.1); - dispX = startX - bX; - dispY = startY - bY; - } else { - dispX = startX - midX; - dispY = startY - midY; - } - rs.srcArrowAngle = getAngleFromDisp(dispX, dispY); - - // mid target - // - - var midX = rs.midX; - var midY = rs.midY; - if (isHaystack) { - midX = (startX + endX) / 2; - midY = (startY + endY) / 2; - } - dispX = endX - startX; - dispY = endY - startY; - if (isSegments) { - var pts = rs.allpts; - if (pts.length / 2 % 2 === 0) { - var i2 = pts.length / 2; - var i1 = i2 - 2; - dispX = pts[i2] - pts[i1]; - dispY = pts[i2 + 1] - pts[i1 + 1]; - } else { - var i2 = pts.length / 2 - 1; - var i1 = i2 - 2; - var i3 = i2 + 2; - dispX = pts[i2] - pts[i1]; - dispY = pts[i2 + 1] - pts[i1 + 1]; - } - } else if (isMultibezier || isCompound || isSelf) { - var pts = rs.allpts; - var cpts = rs.ctrlpts; - var bp0x, bp0y; - var bp1x, bp1y; - if (cpts.length / 2 % 2 === 0) { - var p0 = pts.length / 2 - 1; // startpt - var ic = p0 + 2; - var p1 = ic + 2; - bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0); - bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0); - bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0001); - bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0001); - } else { - var ic = pts.length / 2 - 1; // ctrpt - var p0 = ic - 2; // startpt - var p1 = ic + 2; // endpt - - bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.4999); - bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.4999); - bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.5); - bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.5); - } - dispX = bp1x - bp0x; - dispY = bp1y - bp0y; - } - rs.midtgtArrowAngle = getAngleFromDisp(dispX, dispY); - rs.midDispX = dispX; - rs.midDispY = dispY; - - // mid source - // - - dispX *= -1; - dispY *= -1; - if (isSegments) { - var pts = rs.allpts; - if (pts.length / 2 % 2 === 0) ; else { - var i2 = pts.length / 2 - 1; - var i3 = i2 + 2; - dispX = -(pts[i3] - pts[i2]); - dispY = -(pts[i3 + 1] - pts[i2 + 1]); - } - } - rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY); - - // target - // - - if (isSegments) { - dispX = endX - rs.segpts[rs.segpts.length - 2]; - dispY = endY - rs.segpts[rs.segpts.length - 1]; - } else if (isMultibezier || isCompound || isSelf || isBezier) { - var pts = rs.allpts; - var l = pts.length; - var bX = qbezierAt(pts[l - 6], pts[l - 4], pts[l - 2], 0.9); - var bY = qbezierAt(pts[l - 5], pts[l - 3], pts[l - 1], 0.9); - dispX = endX - bX; - dispY = endY - bY; - } else { - dispX = endX - midX; - dispY = endY - midY; - } - rs.tgtArrowAngle = getAngleFromDisp(dispX, dispY); -}; -BRp$d.getArrowWidth = BRp$d.getArrowHeight = function (edgeWidth, scale) { - var cache = this.arrowWidthCache = this.arrowWidthCache || {}; - var cachedVal = cache[edgeWidth + ', ' + scale]; - if (cachedVal) { - return cachedVal; - } - cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale; - cache[edgeWidth + ', ' + scale] = cachedVal; - return cachedVal; -}; - -var BRp$c = {}; -BRp$c.findMidptPtsEtc = function (edge, pairInfo) { - var posPts = pairInfo.posPts, - intersectionPts = pairInfo.intersectionPts, - vectorNormInverse = pairInfo.vectorNormInverse; - var midptPts; - - // n.b. assumes all edges in bezier bundle have same endpoints specified - var srcManEndpt = edge.pstyle('source-endpoint'); - var tgtManEndpt = edge.pstyle('target-endpoint'); - var haveManualEndPts = srcManEndpt.units != null && tgtManEndpt.units != null; - var recalcVectorNormInverse = function recalcVectorNormInverse(x1, y1, x2, y2) { - var dy = y2 - y1; - var dx = x2 - x1; - var l = Math.sqrt(dx * dx + dy * dy); - return { - x: -dy / l, - y: dx / l - }; - }; - var edgeDistances = edge.pstyle('edge-distances').value; - switch (edgeDistances) { - case 'node-position': - midptPts = posPts; - break; - case 'intersection': - midptPts = intersectionPts; - break; - case 'endpoints': - { - if (haveManualEndPts) { - var _this$manualEndptToPx = this.manualEndptToPx(edge.source()[0], srcManEndpt), - _this$manualEndptToPx2 = _slicedToArray(_this$manualEndptToPx, 2), - x1 = _this$manualEndptToPx2[0], - y1 = _this$manualEndptToPx2[1]; - var _this$manualEndptToPx3 = this.manualEndptToPx(edge.target()[0], tgtManEndpt), - _this$manualEndptToPx4 = _slicedToArray(_this$manualEndptToPx3, 2), - x2 = _this$manualEndptToPx4[0], - y2 = _this$manualEndptToPx4[1]; - var endPts = { - x1: x1, - y1: y1, - x2: x2, - y2: y2 - }; - vectorNormInverse = recalcVectorNormInverse(x1, y1, x2, y2); - midptPts = endPts; - } else { - warn("Edge ".concat(edge.id(), " has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")); - midptPts = intersectionPts; // back to default - } - - break; - } - } - return { - midptPts: midptPts, - vectorNormInverse: vectorNormInverse - }; -}; -BRp$c.findHaystackPoints = function (edges) { - for (var i = 0; i < edges.length; i++) { - var edge = edges[i]; - var _p = edge._private; - var rs = _p.rscratch; - if (!rs.haystack) { - var angle = Math.random() * 2 * Math.PI; - rs.source = { - x: Math.cos(angle), - y: Math.sin(angle) - }; - angle = Math.random() * 2 * Math.PI; - rs.target = { - x: Math.cos(angle), - y: Math.sin(angle) - }; - } - var src = _p.source; - var tgt = _p.target; - var srcPos = src.position(); - var tgtPos = tgt.position(); - var srcW = src.width(); - var tgtW = tgt.width(); - var srcH = src.height(); - var tgtH = tgt.height(); - var radius = edge.pstyle('haystack-radius').value; - var halfRadius = radius / 2; // b/c have to half width/height - - rs.haystackPts = rs.allpts = [rs.source.x * srcW * halfRadius + srcPos.x, rs.source.y * srcH * halfRadius + srcPos.y, rs.target.x * tgtW * halfRadius + tgtPos.x, rs.target.y * tgtH * halfRadius + tgtPos.y]; - rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2; - rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2; - - // always override as haystack in case set to different type previously - rs.edgeType = 'haystack'; - rs.haystack = true; - this.storeEdgeProjections(edge); - this.calculateArrowAngles(edge); - this.recalculateEdgeLabelProjections(edge); - this.calculateLabelAngles(edge); - } -}; -BRp$c.findSegmentsPoints = function (edge, pairInfo) { - // Segments (multiple straight lines) - - var rs = edge._private.rscratch; - var segmentWs = edge.pstyle('segment-weights'); - var segmentDs = edge.pstyle('segment-distances'); - var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length); - rs.edgeType = 'segments'; - rs.segpts = []; - for (var s = 0; s < segmentsN; s++) { - var w = segmentWs.pfValue[s]; - var d = segmentDs.pfValue[s]; - var w1 = 1 - w; - var w2 = w; - var _this$findMidptPtsEtc = this.findMidptPtsEtc(edge, pairInfo), - midptPts = _this$findMidptPtsEtc.midptPts, - vectorNormInverse = _this$findMidptPtsEtc.vectorNormInverse; - var adjustedMidpt = { - x: midptPts.x1 * w1 + midptPts.x2 * w2, - y: midptPts.y1 * w1 + midptPts.y2 * w2 - }; - rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d, adjustedMidpt.y + vectorNormInverse.y * d); - } -}; -BRp$c.findLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { - // Self-edge - - var rs = edge._private.rscratch; - var dirCounts = pairInfo.dirCounts, - srcPos = pairInfo.srcPos; - var ctrlptDists = edge.pstyle('control-point-distances'); - var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; - var loopDir = edge.pstyle('loop-direction').pfValue; - var loopSwp = edge.pstyle('loop-sweep').pfValue; - var stepSize = edge.pstyle('control-point-step-size').pfValue; - rs.edgeType = 'self'; - var j = i; - var loopDist = stepSize; - if (edgeIsUnbundled) { - j = 0; - loopDist = ctrlptDist; - } - var loopAngle = loopDir - Math.PI / 2; - var outAngle = loopAngle - loopSwp / 2; - var inAngle = loopAngle + loopSwp / 2; - - // increase by step size for overlapping loops, keyed on direction and sweep values - var dc = String(loopDir + '_' + loopSwp); - j = dirCounts[dc] === undefined ? dirCounts[dc] = 0 : ++dirCounts[dc]; - rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j / 3 + 1)]; -}; -BRp$c.findCompoundLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { - // Compound edge - - var rs = edge._private.rscratch; - rs.edgeType = 'compound'; - var srcPos = pairInfo.srcPos, - tgtPos = pairInfo.tgtPos, - srcW = pairInfo.srcW, - srcH = pairInfo.srcH, - tgtW = pairInfo.tgtW, - tgtH = pairInfo.tgtH; - var stepSize = edge.pstyle('control-point-step-size').pfValue; - var ctrlptDists = edge.pstyle('control-point-distances'); - var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; - var j = i; - var loopDist = stepSize; - if (edgeIsUnbundled) { - j = 0; - loopDist = ctrlptDist; - } - var loopW = 50; - var loopaPos = { - x: srcPos.x - srcW / 2, - y: srcPos.y - srcH / 2 - }; - var loopbPos = { - x: tgtPos.x - tgtW / 2, - y: tgtPos.y - tgtH / 2 - }; - var loopPos = { - x: Math.min(loopaPos.x, loopbPos.x), - y: Math.min(loopaPos.y, loopbPos.y) - }; - - // avoids cases with impossible beziers - var minCompoundStretch = 0.5; - var compoundStretchA = Math.max(minCompoundStretch, Math.log(srcW * 0.01)); - var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * 0.01)); - rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchB, loopPos.y]; -}; -BRp$c.findStraightEdgePoints = function (edge) { - // Straight edge within bundle - - edge._private.rscratch.edgeType = 'straight'; -}; -BRp$c.findBezierPoints = function (edge, pairInfo, i, edgeIsUnbundled, edgeIsSwapped) { - var rs = edge._private.rscratch; - var stepSize = edge.pstyle('control-point-step-size').pfValue; - var ctrlptDists = edge.pstyle('control-point-distances'); - var ctrlptWs = edge.pstyle('control-point-weights'); - var bezierN = ctrlptDists && ctrlptWs ? Math.min(ctrlptDists.value.length, ctrlptWs.value.length) : 1; - var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; - var ctrlptWeight = ctrlptWs.value[0]; - - // (Multi)bezier - - var multi = edgeIsUnbundled; - rs.edgeType = multi ? 'multibezier' : 'bezier'; - rs.ctrlpts = []; - for (var b = 0; b < bezierN; b++) { - var normctrlptDist = (0.5 - pairInfo.eles.length / 2 + i) * stepSize * (edgeIsSwapped ? -1 : 1); - var manctrlptDist = void 0; - var sign = signum(normctrlptDist); - if (multi) { - ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[b] : stepSize; // fall back on step size - ctrlptWeight = ctrlptWs.value[b]; - } - if (edgeIsUnbundled) { - // multi or single unbundled - manctrlptDist = ctrlptDist; - } else { - manctrlptDist = ctrlptDist !== undefined ? sign * ctrlptDist : undefined; - } - var distanceFromMidpoint = manctrlptDist !== undefined ? manctrlptDist : normctrlptDist; - var w1 = 1 - ctrlptWeight; - var w2 = ctrlptWeight; - var _this$findMidptPtsEtc2 = this.findMidptPtsEtc(edge, pairInfo), - midptPts = _this$findMidptPtsEtc2.midptPts, - vectorNormInverse = _this$findMidptPtsEtc2.vectorNormInverse; - var adjustedMidpt = { - x: midptPts.x1 * w1 + midptPts.x2 * w2, - y: midptPts.y1 * w1 + midptPts.y2 * w2 - }; - rs.ctrlpts.push(adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint, adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint); - } -}; -BRp$c.findTaxiPoints = function (edge, pairInfo) { - // Taxicab geometry with two turns maximum - - var rs = edge._private.rscratch; - rs.edgeType = 'segments'; - var VERTICAL = 'vertical'; - var HORIZONTAL = 'horizontal'; - var LEFTWARD = 'leftward'; - var RIGHTWARD = 'rightward'; - var DOWNWARD = 'downward'; - var UPWARD = 'upward'; - var AUTO = 'auto'; - var posPts = pairInfo.posPts, - srcW = pairInfo.srcW, - srcH = pairInfo.srcH, - tgtW = pairInfo.tgtW, - tgtH = pairInfo.tgtH; - var edgeDistances = edge.pstyle('edge-distances').value; - var dIncludesNodeBody = edgeDistances !== 'node-position'; - var taxiDir = edge.pstyle('taxi-direction').value; - var rawTaxiDir = taxiDir; // unprocessed value - var taxiTurn = edge.pstyle('taxi-turn'); - var turnIsPercent = taxiTurn.units === '%'; - var taxiTurnPfVal = taxiTurn.pfValue; - var turnIsNegative = taxiTurnPfVal < 0; // i.e. from target side - var minD = edge.pstyle('taxi-turn-min-distance').pfValue; - var dw = dIncludesNodeBody ? (srcW + tgtW) / 2 : 0; - var dh = dIncludesNodeBody ? (srcH + tgtH) / 2 : 0; - var pdx = posPts.x2 - posPts.x1; - var pdy = posPts.y2 - posPts.y1; - - // take away the effective w/h from the magnitude of the delta value - var subDWH = function subDWH(dxy, dwh) { - if (dxy > 0) { - return Math.max(dxy - dwh, 0); - } else { - return Math.min(dxy + dwh, 0); - } - }; - var dx = subDWH(pdx, dw); - var dy = subDWH(pdy, dh); - var isExplicitDir = false; - if (rawTaxiDir === AUTO) { - taxiDir = Math.abs(dx) > Math.abs(dy) ? HORIZONTAL : VERTICAL; - } else if (rawTaxiDir === UPWARD || rawTaxiDir === DOWNWARD) { - taxiDir = VERTICAL; - isExplicitDir = true; - } else if (rawTaxiDir === LEFTWARD || rawTaxiDir === RIGHTWARD) { - taxiDir = HORIZONTAL; - isExplicitDir = true; - } - var isVert = taxiDir === VERTICAL; - var l = isVert ? dy : dx; - var pl = isVert ? pdy : pdx; - var sgnL = signum(pl); - var forcedDir = false; - if (!(isExplicitDir && (turnIsPercent || turnIsNegative)) // forcing in this case would cause weird growing in the opposite direction - && (rawTaxiDir === DOWNWARD && pl < 0 || rawTaxiDir === UPWARD && pl > 0 || rawTaxiDir === LEFTWARD && pl > 0 || rawTaxiDir === RIGHTWARD && pl < 0)) { - sgnL *= -1; - l = sgnL * Math.abs(l); - forcedDir = true; - } - var d; - if (turnIsPercent) { - var p = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal; - d = p * l; - } else { - var k = taxiTurnPfVal < 0 ? l : 0; - d = k + taxiTurnPfVal * sgnL; - } - var getIsTooClose = function getIsTooClose(d) { - return Math.abs(d) < minD || Math.abs(d) >= Math.abs(l); - }; - var isTooCloseSrc = getIsTooClose(d); - var isTooCloseTgt = getIsTooClose(Math.abs(l) - Math.abs(d)); - var isTooClose = isTooCloseSrc || isTooCloseTgt; - if (isTooClose && !forcedDir) { - // non-ideal routing - if (isVert) { - // vertical fallbacks - var lShapeInsideSrc = Math.abs(pl) <= srcH / 2; - var lShapeInsideTgt = Math.abs(pdx) <= tgtW / 2; - if (lShapeInsideSrc) { - // horizontal Z-shape (direction not respected) - var x = (posPts.x1 + posPts.x2) / 2; - var y1 = posPts.y1, - y2 = posPts.y2; - rs.segpts = [x, y1, x, y2]; - } else if (lShapeInsideTgt) { - // vertical Z-shape (distance not respected) - var y = (posPts.y1 + posPts.y2) / 2; - var x1 = posPts.x1, - x2 = posPts.x2; - rs.segpts = [x1, y, x2, y]; - } else { - // L-shape fallback (turn distance not respected, but works well with tree siblings) - rs.segpts = [posPts.x1, posPts.y2]; - } - } else { - // horizontal fallbacks - var _lShapeInsideSrc = Math.abs(pl) <= srcW / 2; - var _lShapeInsideTgt = Math.abs(pdy) <= tgtH / 2; - if (_lShapeInsideSrc) { - // vertical Z-shape (direction not respected) - var _y = (posPts.y1 + posPts.y2) / 2; - var _x = posPts.x1, - _x2 = posPts.x2; - rs.segpts = [_x, _y, _x2, _y]; - } else if (_lShapeInsideTgt) { - // horizontal Z-shape (turn distance not respected) - var _x3 = (posPts.x1 + posPts.x2) / 2; - var _y2 = posPts.y1, - _y3 = posPts.y2; - rs.segpts = [_x3, _y2, _x3, _y3]; - } else { - // L-shape (turn distance not respected, but works well for tree siblings) - rs.segpts = [posPts.x2, posPts.y1]; - } - } - } else { - // ideal routing - if (isVert) { - var _y4 = posPts.y1 + d + (dIncludesNodeBody ? srcH / 2 * sgnL : 0); - var _x4 = posPts.x1, - _x5 = posPts.x2; - rs.segpts = [_x4, _y4, _x5, _y4]; - } else { - // horizontal - var _x6 = posPts.x1 + d + (dIncludesNodeBody ? srcW / 2 * sgnL : 0); - var _y5 = posPts.y1, - _y6 = posPts.y2; - rs.segpts = [_x6, _y5, _x6, _y6]; - } - } -}; -BRp$c.tryToCorrectInvalidPoints = function (edge, pairInfo) { - var rs = edge._private.rscratch; - - // can only correct beziers for now... - if (rs.edgeType === 'bezier') { - var srcPos = pairInfo.srcPos, - tgtPos = pairInfo.tgtPos, - srcW = pairInfo.srcW, - srcH = pairInfo.srcH, - tgtW = pairInfo.tgtW, - tgtH = pairInfo.tgtH, - srcShape = pairInfo.srcShape, - tgtShape = pairInfo.tgtShape; - var badStart = !number$1(rs.startX) || !number$1(rs.startY); - var badAStart = !number$1(rs.arrowStartX) || !number$1(rs.arrowStartY); - var badEnd = !number$1(rs.endX) || !number$1(rs.endY); - var badAEnd = !number$1(rs.arrowEndX) || !number$1(rs.arrowEndY); - var minCpADistFactor = 3; - var arrowW = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; - var minCpADist = minCpADistFactor * arrowW; - var startACpDist = dist({ - x: rs.ctrlpts[0], - y: rs.ctrlpts[1] - }, { - x: rs.startX, - y: rs.startY - }); - var closeStartACp = startACpDist < minCpADist; - var endACpDist = dist({ - x: rs.ctrlpts[0], - y: rs.ctrlpts[1] - }, { - x: rs.endX, - y: rs.endY - }); - var closeEndACp = endACpDist < minCpADist; - var overlapping = false; - if (badStart || badAStart || closeStartACp) { - overlapping = true; - - // project control point along line from src centre to outside the src shape - // (otherwise intersection will yield nothing) - var cpD = { - // delta - x: rs.ctrlpts[0] - srcPos.x, - y: rs.ctrlpts[1] - srcPos.y - }; - var cpL = Math.sqrt(cpD.x * cpD.x + cpD.y * cpD.y); // length of line - var cpM = { - // normalised delta - x: cpD.x / cpL, - y: cpD.y / cpL - }; - var radius = Math.max(srcW, srcH); - var cpProj = { - // *2 radius guarantees outside shape - x: rs.ctrlpts[0] + cpM.x * 2 * radius, - y: rs.ctrlpts[1] + cpM.y * 2 * radius - }; - var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0); - if (closeStartACp) { - rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist); - rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist); - } else { - rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist; - rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist; - } - } - if (badEnd || badAEnd || closeEndACp) { - overlapping = true; - - // project control point along line from tgt centre to outside the tgt shape - // (otherwise intersection will yield nothing) - var _cpD = { - // delta - x: rs.ctrlpts[0] - tgtPos.x, - y: rs.ctrlpts[1] - tgtPos.y - }; - var _cpL = Math.sqrt(_cpD.x * _cpD.x + _cpD.y * _cpD.y); // length of line - var _cpM = { - // normalised delta - x: _cpD.x / _cpL, - y: _cpD.y / _cpL - }; - var _radius = Math.max(srcW, srcH); - var _cpProj = { - // *2 radius guarantees outside shape - x: rs.ctrlpts[0] + _cpM.x * 2 * _radius, - y: rs.ctrlpts[1] + _cpM.y * 2 * _radius - }; - var tgtCtrlPtIntn = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, _cpProj.x, _cpProj.y, 0); - if (closeEndACp) { - rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist); - rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist); - } else { - rs.ctrlpts[0] = tgtCtrlPtIntn[0] + _cpM.x * minCpADist; - rs.ctrlpts[1] = tgtCtrlPtIntn[1] + _cpM.y * minCpADist; - } - } - if (overlapping) { - // recalc endpts - this.findEndpoints(edge); - } - } -}; -BRp$c.storeAllpts = function (edge) { - var rs = edge._private.rscratch; - if (rs.edgeType === 'multibezier' || rs.edgeType === 'bezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { - rs.allpts = []; - rs.allpts.push(rs.startX, rs.startY); - for (var b = 0; b + 1 < rs.ctrlpts.length; b += 2) { - // ctrl pt itself - rs.allpts.push(rs.ctrlpts[b], rs.ctrlpts[b + 1]); - - // the midpt between ctrlpts as intermediate destination pts - if (b + 3 < rs.ctrlpts.length) { - rs.allpts.push((rs.ctrlpts[b] + rs.ctrlpts[b + 2]) / 2, (rs.ctrlpts[b + 1] + rs.ctrlpts[b + 3]) / 2); - } - } - rs.allpts.push(rs.endX, rs.endY); - var m, mt; - if (rs.ctrlpts.length / 2 % 2 === 0) { - m = rs.allpts.length / 2 - 1; - rs.midX = rs.allpts[m]; - rs.midY = rs.allpts[m + 1]; - } else { - m = rs.allpts.length / 2 - 3; - mt = 0.5; - rs.midX = qbezierAt(rs.allpts[m], rs.allpts[m + 2], rs.allpts[m + 4], mt); - rs.midY = qbezierAt(rs.allpts[m + 1], rs.allpts[m + 3], rs.allpts[m + 5], mt); - } - } else if (rs.edgeType === 'straight') { - // need to calc these after endpts - rs.allpts = [rs.startX, rs.startY, rs.endX, rs.endY]; - - // default midpt for labels etc - rs.midX = (rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX) / 4; - rs.midY = (rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY) / 4; - } else if (rs.edgeType === 'segments') { - rs.allpts = []; - rs.allpts.push(rs.startX, rs.startY); - rs.allpts.push.apply(rs.allpts, rs.segpts); - rs.allpts.push(rs.endX, rs.endY); - if (rs.segpts.length % 4 === 0) { - var i2 = rs.segpts.length / 2; - var i1 = i2 - 2; - rs.midX = (rs.segpts[i1] + rs.segpts[i2]) / 2; - rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i2 + 1]) / 2; - } else { - var _i = rs.segpts.length / 2 - 1; - rs.midX = rs.segpts[_i]; - rs.midY = rs.segpts[_i + 1]; - } - } -}; -BRp$c.checkForInvalidEdgeWarning = function (edge) { - var rs = edge[0]._private.rscratch; - if (rs.nodesOverlap || number$1(rs.startX) && number$1(rs.startY) && number$1(rs.endX) && number$1(rs.endY)) { - rs.loggedErr = false; - } else { - if (!rs.loggedErr) { - rs.loggedErr = true; - warn('Edge `' + edge.id() + '` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap.'); - } - } -}; -BRp$c.findEdgeControlPoints = function (edges) { - var _this = this; - if (!edges || edges.length === 0) { - return; - } - var r = this; - var cy = r.cy; - var hasCompounds = cy.hasCompoundNodes(); - var hashTable = { - map: new Map$1(), - get: function get(pairId) { - var map2 = this.map.get(pairId[0]); - if (map2 != null) { - return map2.get(pairId[1]); - } else { - return null; - } - }, - set: function set(pairId, val) { - var map2 = this.map.get(pairId[0]); - if (map2 == null) { - map2 = new Map$1(); - this.map.set(pairId[0], map2); - } - map2.set(pairId[1], val); - } - }; - var pairIds = []; - var haystackEdges = []; - - // create a table of edge (src, tgt) => list of edges between them - for (var i = 0; i < edges.length; i++) { - var edge = edges[i]; - var _p = edge._private; - var curveStyle = edge.pstyle('curve-style').value; - - // ignore edges who are not to be displayed - // they shouldn't take up space - if (edge.removed() || !edge.takesUpSpace()) { - continue; - } - if (curveStyle === 'haystack') { - haystackEdges.push(edge); - continue; - } - var edgeIsUnbundled = curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'straight' || curveStyle === 'straight-triangle' || curveStyle === 'taxi'; - var edgeIsBezier = curveStyle === 'unbundled-bezier' || curveStyle === 'bezier'; - var src = _p.source; - var tgt = _p.target; - var srcIndex = src.poolIndex(); - var tgtIndex = tgt.poolIndex(); - var pairId = [srcIndex, tgtIndex].sort(); - var tableEntry = hashTable.get(pairId); - if (tableEntry == null) { - tableEntry = { - eles: [] - }; - hashTable.set(pairId, tableEntry); - pairIds.push(pairId); - } - tableEntry.eles.push(edge); - if (edgeIsUnbundled) { - tableEntry.hasUnbundled = true; - } - if (edgeIsBezier) { - tableEntry.hasBezier = true; - } - } - - // for each pair (src, tgt), create the ctrl pts - // Nested for loop is OK; total number of iterations for both loops = edgeCount - var _loop = function _loop(p) { - var pairId = pairIds[p]; - var pairInfo = hashTable.get(pairId); - var swappedpairInfo = void 0; - if (!pairInfo.hasUnbundled) { - var pllEdges = pairInfo.eles[0].parallelEdges().filter(function (e) { - return e.isBundledBezier(); - }); - clearArray(pairInfo.eles); - pllEdges.forEach(function (edge) { - return pairInfo.eles.push(edge); - }); - - // for each pair id, the edges should be sorted by index - pairInfo.eles.sort(function (edge1, edge2) { - return edge1.poolIndex() - edge2.poolIndex(); - }); - } - var firstEdge = pairInfo.eles[0]; - var src = firstEdge.source(); - var tgt = firstEdge.target(); - - // make sure src/tgt distinction is consistent w.r.t. pairId - if (src.poolIndex() > tgt.poolIndex()) { - var temp = src; - src = tgt; - tgt = temp; - } - var srcPos = pairInfo.srcPos = src.position(); - var tgtPos = pairInfo.tgtPos = tgt.position(); - var srcW = pairInfo.srcW = src.outerWidth(); - var srcH = pairInfo.srcH = src.outerHeight(); - var tgtW = pairInfo.tgtW = tgt.outerWidth(); - var tgtH = pairInfo.tgtH = tgt.outerHeight(); - var srcShape = pairInfo.srcShape = r.nodeShapes[_this.getNodeShape(src)]; - var tgtShape = pairInfo.tgtShape = r.nodeShapes[_this.getNodeShape(tgt)]; - pairInfo.dirCounts = { - 'north': 0, - 'west': 0, - 'south': 0, - 'east': 0, - 'northwest': 0, - 'southwest': 0, - 'northeast': 0, - 'southeast': 0 - }; - for (var _i2 = 0; _i2 < pairInfo.eles.length; _i2++) { - var _edge = pairInfo.eles[_i2]; - var rs = _edge[0]._private.rscratch; - var _curveStyle = _edge.pstyle('curve-style').value; - var _edgeIsUnbundled = _curveStyle === 'unbundled-bezier' || _curveStyle === 'segments' || _curveStyle === 'taxi'; - - // whether the normalised pair order is the reverse of the edge's src-tgt order - var edgeIsSwapped = !src.same(_edge.source()); - if (!pairInfo.calculatedIntersection && src !== tgt && (pairInfo.hasBezier || pairInfo.hasUnbundled)) { - pairInfo.calculatedIntersection = true; - - // pt outside src shape to calc distance/displacement from src to tgt - var srcOutside = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, tgtPos.x, tgtPos.y, 0); - var srcIntn = pairInfo.srcIntn = srcOutside; - - // pt outside tgt shape to calc distance/displacement from src to tgt - var tgtOutside = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, srcPos.x, srcPos.y, 0); - var tgtIntn = pairInfo.tgtIntn = tgtOutside; - var intersectionPts = pairInfo.intersectionPts = { - x1: srcOutside[0], - x2: tgtOutside[0], - y1: srcOutside[1], - y2: tgtOutside[1] - }; - var posPts = pairInfo.posPts = { - x1: srcPos.x, - x2: tgtPos.x, - y1: srcPos.y, - y2: tgtPos.y - }; - var dy = tgtOutside[1] - srcOutside[1]; - var dx = tgtOutside[0] - srcOutside[0]; - var l = Math.sqrt(dx * dx + dy * dy); - var vector = pairInfo.vector = { - x: dx, - y: dy - }; - var vectorNorm = pairInfo.vectorNorm = { - x: vector.x / l, - y: vector.y / l - }; - var vectorNormInverse = { - x: -vectorNorm.y, - y: vectorNorm.x - }; - - // if node shapes overlap, then no ctrl pts to draw - pairInfo.nodesOverlap = !number$1(l) || tgtShape.checkPoint(srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y); - pairInfo.vectorNormInverse = vectorNormInverse; - swappedpairInfo = { - nodesOverlap: pairInfo.nodesOverlap, - dirCounts: pairInfo.dirCounts, - calculatedIntersection: true, - hasBezier: pairInfo.hasBezier, - hasUnbundled: pairInfo.hasUnbundled, - eles: pairInfo.eles, - srcPos: tgtPos, - tgtPos: srcPos, - srcW: tgtW, - srcH: tgtH, - tgtW: srcW, - tgtH: srcH, - srcIntn: tgtIntn, - tgtIntn: srcIntn, - srcShape: tgtShape, - tgtShape: srcShape, - posPts: { - x1: posPts.x2, - y1: posPts.y2, - x2: posPts.x1, - y2: posPts.y1 - }, - intersectionPts: { - x1: intersectionPts.x2, - y1: intersectionPts.y2, - x2: intersectionPts.x1, - y2: intersectionPts.y1 - }, - vector: { - x: -vector.x, - y: -vector.y - }, - vectorNorm: { - x: -vectorNorm.x, - y: -vectorNorm.y - }, - vectorNormInverse: { - x: -vectorNormInverse.x, - y: -vectorNormInverse.y - } - }; - } - var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo; - rs.nodesOverlap = passedPairInfo.nodesOverlap; - rs.srcIntn = passedPairInfo.srcIntn; - rs.tgtIntn = passedPairInfo.tgtIntn; - if (hasCompounds && (src.isParent() || src.isChild() || tgt.isParent() || tgt.isChild()) && (src.parents().anySame(tgt) || tgt.parents().anySame(src) || src.same(tgt) && src.isParent())) { - _this.findCompoundLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); - } else if (src === tgt) { - _this.findLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); - } else if (_curveStyle === 'segments') { - _this.findSegmentsPoints(_edge, passedPairInfo); - } else if (_curveStyle === 'taxi') { - _this.findTaxiPoints(_edge, passedPairInfo); - } else if (_curveStyle === 'straight' || !_edgeIsUnbundled && pairInfo.eles.length % 2 === 1 && _i2 === Math.floor(pairInfo.eles.length / 2)) { - _this.findStraightEdgePoints(_edge); - } else { - _this.findBezierPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled, edgeIsSwapped); - } - _this.findEndpoints(_edge); - _this.tryToCorrectInvalidPoints(_edge, passedPairInfo); - _this.checkForInvalidEdgeWarning(_edge); - _this.storeAllpts(_edge); - _this.storeEdgeProjections(_edge); - _this.calculateArrowAngles(_edge); - _this.recalculateEdgeLabelProjections(_edge); - _this.calculateLabelAngles(_edge); - } // for pair edges - }; - for (var p = 0; p < pairIds.length; p++) { - _loop(p); - } // for pair ids - - // haystacks avoid the expense of pairInfo stuff (intersections etc.) - this.findHaystackPoints(haystackEdges); -}; -function getPts(pts) { - var retPts = []; - if (pts == null) { - return; - } - for (var i = 0; i < pts.length; i += 2) { - var x = pts[i]; - var y = pts[i + 1]; - retPts.push({ - x: x, - y: y - }); - } - return retPts; -} -BRp$c.getSegmentPoints = function (edge) { - var rs = edge[0]._private.rscratch; - var type = rs.edgeType; - if (type === 'segments') { - this.recalculateRenderedStyle(edge); - return getPts(rs.segpts); - } -}; -BRp$c.getControlPoints = function (edge) { - var rs = edge[0]._private.rscratch; - var type = rs.edgeType; - if (type === 'bezier' || type === 'multibezier' || type === 'self' || type === 'compound') { - this.recalculateRenderedStyle(edge); - return getPts(rs.ctrlpts); - } -}; -BRp$c.getEdgeMidpoint = function (edge) { - var rs = edge[0]._private.rscratch; - this.recalculateRenderedStyle(edge); - return { - x: rs.midX, - y: rs.midY - }; -}; - -var BRp$b = {}; -BRp$b.manualEndptToPx = function (node, prop) { - var r = this; - var npos = node.position(); - var w = node.outerWidth(); - var h = node.outerHeight(); - if (prop.value.length === 2) { - var p = [prop.pfValue[0], prop.pfValue[1]]; - if (prop.units[0] === '%') { - p[0] = p[0] * w; - } - if (prop.units[1] === '%') { - p[1] = p[1] * h; - } - p[0] += npos.x; - p[1] += npos.y; - return p; - } else { - var angle = prop.pfValue[0]; - angle = -Math.PI / 2 + angle; // start at 12 o'clock - - var l = 2 * Math.max(w, h); - var _p = [npos.x + Math.cos(angle) * l, npos.y + Math.sin(angle) * l]; - return r.nodeShapes[this.getNodeShape(node)].intersectLine(npos.x, npos.y, w, h, _p[0], _p[1], 0); - } -}; -BRp$b.findEndpoints = function (edge) { - var r = this; - var intersect; - var source = edge.source()[0]; - var target = edge.target()[0]; - var srcPos = source.position(); - var tgtPos = target.position(); - var tgtArShape = edge.pstyle('target-arrow-shape').value; - var srcArShape = edge.pstyle('source-arrow-shape').value; - var tgtDist = edge.pstyle('target-distance-from-node').pfValue; - var srcDist = edge.pstyle('source-distance-from-node').pfValue; - var curveStyle = edge.pstyle('curve-style').value; - var rs = edge._private.rscratch; - var et = rs.edgeType; - var taxi = curveStyle === 'taxi'; - var self = et === 'self' || et === 'compound'; - var bezier = et === 'bezier' || et === 'multibezier' || self; - var multi = et !== 'bezier'; - var lines = et === 'straight' || et === 'segments'; - var segments = et === 'segments'; - var hasEndpts = bezier || multi || lines; - var overrideEndpts = self || taxi; - var srcManEndpt = edge.pstyle('source-endpoint'); - var srcManEndptVal = overrideEndpts ? 'outside-to-node' : srcManEndpt.value; - var tgtManEndpt = edge.pstyle('target-endpoint'); - var tgtManEndptVal = overrideEndpts ? 'outside-to-node' : tgtManEndpt.value; - rs.srcManEndpt = srcManEndpt; - rs.tgtManEndpt = tgtManEndpt; - var p1; // last known point of edge on target side - var p2; // last known point of edge on source side - - var p1_i; // point to intersect with target shape - var p2_i; // point to intersect with source shape - - if (bezier) { - var cpStart = [rs.ctrlpts[0], rs.ctrlpts[1]]; - var cpEnd = multi ? [rs.ctrlpts[rs.ctrlpts.length - 2], rs.ctrlpts[rs.ctrlpts.length - 1]] : cpStart; - p1 = cpEnd; - p2 = cpStart; - } else if (lines) { - var srcArrowFromPt = !segments ? [tgtPos.x, tgtPos.y] : rs.segpts.slice(0, 2); - var tgtArrowFromPt = !segments ? [srcPos.x, srcPos.y] : rs.segpts.slice(rs.segpts.length - 2); - p1 = tgtArrowFromPt; - p2 = srcArrowFromPt; - } - if (tgtManEndptVal === 'inside-to-node') { - intersect = [tgtPos.x, tgtPos.y]; - } else if (tgtManEndpt.units) { - intersect = this.manualEndptToPx(target, tgtManEndpt); - } else if (tgtManEndptVal === 'outside-to-line') { - intersect = rs.tgtIntn; // use cached value from ctrlpt calc - } else { - if (tgtManEndptVal === 'outside-to-node' || tgtManEndptVal === 'outside-to-node-or-label') { - p1_i = p1; - } else if (tgtManEndptVal === 'outside-to-line' || tgtManEndptVal === 'outside-to-line-or-label') { - p1_i = [srcPos.x, srcPos.y]; - } - intersect = r.nodeShapes[this.getNodeShape(target)].intersectLine(tgtPos.x, tgtPos.y, target.outerWidth(), target.outerHeight(), p1_i[0], p1_i[1], 0); - if (tgtManEndptVal === 'outside-to-node-or-label' || tgtManEndptVal === 'outside-to-line-or-label') { - var trs = target._private.rscratch; - var lw = trs.labelWidth; - var lh = trs.labelHeight; - var lx = trs.labelX; - var ly = trs.labelY; - var lw2 = lw / 2; - var lh2 = lh / 2; - var va = target.pstyle('text-valign').value; - if (va === 'top') { - ly -= lh2; - } else if (va === 'bottom') { - ly += lh2; - } - var ha = target.pstyle('text-halign').value; - if (ha === 'left') { - lx -= lw2; - } else if (ha === 'right') { - lx += lw2; - } - var labelIntersect = polygonIntersectLine(p1_i[0], p1_i[1], [lx - lw2, ly - lh2, lx + lw2, ly - lh2, lx + lw2, ly + lh2, lx - lw2, ly + lh2], tgtPos.x, tgtPos.y); - if (labelIntersect.length > 0) { - var refPt = srcPos; - var intSqdist = sqdist(refPt, array2point(intersect)); - var labIntSqdist = sqdist(refPt, array2point(labelIntersect)); - var minSqDist = intSqdist; - if (labIntSqdist < intSqdist) { - intersect = labelIntersect; - minSqDist = labIntSqdist; - } - if (labelIntersect.length > 2) { - var labInt2SqDist = sqdist(refPt, { - x: labelIntersect[2], - y: labelIntersect[3] - }); - if (labInt2SqDist < minSqDist) { - intersect = [labelIntersect[2], labelIntersect[3]]; - } - } - } - } - } - var arrowEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].spacing(edge) + tgtDist); - var edgeEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].gap(edge) + tgtDist); - rs.endX = edgeEnd[0]; - rs.endY = edgeEnd[1]; - rs.arrowEndX = arrowEnd[0]; - rs.arrowEndY = arrowEnd[1]; - if (srcManEndptVal === 'inside-to-node') { - intersect = [srcPos.x, srcPos.y]; - } else if (srcManEndpt.units) { - intersect = this.manualEndptToPx(source, srcManEndpt); - } else if (srcManEndptVal === 'outside-to-line') { - intersect = rs.srcIntn; // use cached value from ctrlpt calc - } else { - if (srcManEndptVal === 'outside-to-node' || srcManEndptVal === 'outside-to-node-or-label') { - p2_i = p2; - } else if (srcManEndptVal === 'outside-to-line' || srcManEndptVal === 'outside-to-line-or-label') { - p2_i = [tgtPos.x, tgtPos.y]; - } - intersect = r.nodeShapes[this.getNodeShape(source)].intersectLine(srcPos.x, srcPos.y, source.outerWidth(), source.outerHeight(), p2_i[0], p2_i[1], 0); - if (srcManEndptVal === 'outside-to-node-or-label' || srcManEndptVal === 'outside-to-line-or-label') { - var srs = source._private.rscratch; - var _lw = srs.labelWidth; - var _lh = srs.labelHeight; - var _lx = srs.labelX; - var _ly = srs.labelY; - var _lw2 = _lw / 2; - var _lh2 = _lh / 2; - var _va = source.pstyle('text-valign').value; - if (_va === 'top') { - _ly -= _lh2; - } else if (_va === 'bottom') { - _ly += _lh2; - } - var _ha = source.pstyle('text-halign').value; - if (_ha === 'left') { - _lx -= _lw2; - } else if (_ha === 'right') { - _lx += _lw2; - } - var _labelIntersect = polygonIntersectLine(p2_i[0], p2_i[1], [_lx - _lw2, _ly - _lh2, _lx + _lw2, _ly - _lh2, _lx + _lw2, _ly + _lh2, _lx - _lw2, _ly + _lh2], srcPos.x, srcPos.y); - if (_labelIntersect.length > 0) { - var _refPt = tgtPos; - var _intSqdist = sqdist(_refPt, array2point(intersect)); - var _labIntSqdist = sqdist(_refPt, array2point(_labelIntersect)); - var _minSqDist = _intSqdist; - if (_labIntSqdist < _intSqdist) { - intersect = [_labelIntersect[0], _labelIntersect[1]]; - _minSqDist = _labIntSqdist; - } - if (_labelIntersect.length > 2) { - var _labInt2SqDist = sqdist(_refPt, { - x: _labelIntersect[2], - y: _labelIntersect[3] - }); - if (_labInt2SqDist < _minSqDist) { - intersect = [_labelIntersect[2], _labelIntersect[3]]; - } - } - } - } - } - var arrowStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].spacing(edge) + srcDist); - var edgeStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].gap(edge) + srcDist); - rs.startX = edgeStart[0]; - rs.startY = edgeStart[1]; - rs.arrowStartX = arrowStart[0]; - rs.arrowStartY = arrowStart[1]; - if (hasEndpts) { - if (!number$1(rs.startX) || !number$1(rs.startY) || !number$1(rs.endX) || !number$1(rs.endY)) { - rs.badLine = true; - } else { - rs.badLine = false; - } - } -}; -BRp$b.getSourceEndpoint = function (edge) { - var rs = edge[0]._private.rscratch; - this.recalculateRenderedStyle(edge); - switch (rs.edgeType) { - case 'haystack': - return { - x: rs.haystackPts[0], - y: rs.haystackPts[1] - }; - default: - return { - x: rs.arrowStartX, - y: rs.arrowStartY - }; - } -}; -BRp$b.getTargetEndpoint = function (edge) { - var rs = edge[0]._private.rscratch; - this.recalculateRenderedStyle(edge); - switch (rs.edgeType) { - case 'haystack': - return { - x: rs.haystackPts[2], - y: rs.haystackPts[3] - }; - default: - return { - x: rs.arrowEndX, - y: rs.arrowEndY - }; - } -}; - -var BRp$a = {}; -function pushBezierPts(r, edge, pts) { - var qbezierAt$1 = function qbezierAt$1(p1, p2, p3, t) { - return qbezierAt(p1, p2, p3, t); - }; - var _p = edge._private; - var bpts = _p.rstyle.bezierPts; - for (var i = 0; i < r.bezierProjPcts.length; i++) { - var p = r.bezierProjPcts[i]; - bpts.push({ - x: qbezierAt$1(pts[0], pts[2], pts[4], p), - y: qbezierAt$1(pts[1], pts[3], pts[5], p) - }); - } -} -BRp$a.storeEdgeProjections = function (edge) { - var _p = edge._private; - var rs = _p.rscratch; - var et = rs.edgeType; - - // clear the cached points state - _p.rstyle.bezierPts = null; - _p.rstyle.linePts = null; - _p.rstyle.haystackPts = null; - if (et === 'multibezier' || et === 'bezier' || et === 'self' || et === 'compound') { - _p.rstyle.bezierPts = []; - for (var i = 0; i + 5 < rs.allpts.length; i += 4) { - pushBezierPts(this, edge, rs.allpts.slice(i, i + 6)); - } - } else if (et === 'segments') { - var lpts = _p.rstyle.linePts = []; - for (var i = 0; i + 1 < rs.allpts.length; i += 2) { - lpts.push({ - x: rs.allpts[i], - y: rs.allpts[i + 1] - }); - } - } else if (et === 'haystack') { - var hpts = rs.haystackPts; - _p.rstyle.haystackPts = [{ - x: hpts[0], - y: hpts[1] - }, { - x: hpts[2], - y: hpts[3] - }]; - } - _p.rstyle.arrowWidth = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; -}; -BRp$a.recalculateEdgeProjections = function (edges) { - this.findEdgeControlPoints(edges); -}; - -/* global document */ - -var BRp$9 = {}; -BRp$9.recalculateNodeLabelProjection = function (node) { - var content = node.pstyle('label').strValue; - if (emptyString(content)) { - return; - } - var textX, textY; - var _p = node._private; - var nodeWidth = node.width(); - var nodeHeight = node.height(); - var padding = node.padding(); - var nodePos = node.position(); - var textHalign = node.pstyle('text-halign').strValue; - var textValign = node.pstyle('text-valign').strValue; - var rs = _p.rscratch; - var rstyle = _p.rstyle; - switch (textHalign) { - case 'left': - textX = nodePos.x - nodeWidth / 2 - padding; - break; - case 'right': - textX = nodePos.x + nodeWidth / 2 + padding; - break; - default: - // e.g. center - textX = nodePos.x; - } - switch (textValign) { - case 'top': - textY = nodePos.y - nodeHeight / 2 - padding; - break; - case 'bottom': - textY = nodePos.y + nodeHeight / 2 + padding; - break; - default: - // e.g. middle - textY = nodePos.y; - } - rs.labelX = textX; - rs.labelY = textY; - rstyle.labelX = textX; - rstyle.labelY = textY; - this.calculateLabelAngles(node); - this.applyLabelDimensions(node); -}; -var lineAngleFromDelta = function lineAngleFromDelta(dx, dy) { - var angle = Math.atan(dy / dx); - if (dx === 0 && angle < 0) { - angle = angle * -1; - } - return angle; -}; -var lineAngle = function lineAngle(p0, p1) { - var dx = p1.x - p0.x; - var dy = p1.y - p0.y; - return lineAngleFromDelta(dx, dy); -}; -var bezierAngle = function bezierAngle(p0, p1, p2, t) { - var t0 = bound(0, t - 0.001, 1); - var t1 = bound(0, t + 0.001, 1); - var lp0 = qbezierPtAt(p0, p1, p2, t0); - var lp1 = qbezierPtAt(p0, p1, p2, t1); - return lineAngle(lp0, lp1); -}; -BRp$9.recalculateEdgeLabelProjections = function (edge) { - var p; - var _p = edge._private; - var rs = _p.rscratch; - var r = this; - var content = { - mid: edge.pstyle('label').strValue, - source: edge.pstyle('source-label').strValue, - target: edge.pstyle('target-label').strValue - }; - if (content.mid || content.source || content.target) ; else { - return; // no labels => no calcs - } - - // add center point to style so bounding box calculations can use it - // - p = { - x: rs.midX, - y: rs.midY - }; - var setRs = function setRs(propName, prefix, value) { - setPrefixedProperty(_p.rscratch, propName, prefix, value); - setPrefixedProperty(_p.rstyle, propName, prefix, value); - }; - setRs('labelX', null, p.x); - setRs('labelY', null, p.y); - var midAngle = lineAngleFromDelta(rs.midDispX, rs.midDispY); - setRs('labelAutoAngle', null, midAngle); - var createControlPointInfo = function createControlPointInfo() { - if (createControlPointInfo.cache) { - return createControlPointInfo.cache; - } // use cache so only 1x per edge - - var ctrlpts = []; - - // store each ctrlpt info init - for (var i = 0; i + 5 < rs.allpts.length; i += 4) { - var p0 = { - x: rs.allpts[i], - y: rs.allpts[i + 1] - }; - var p1 = { - x: rs.allpts[i + 2], - y: rs.allpts[i + 3] - }; // ctrlpt - var p2 = { - x: rs.allpts[i + 4], - y: rs.allpts[i + 5] - }; - ctrlpts.push({ - p0: p0, - p1: p1, - p2: p2, - startDist: 0, - length: 0, - segments: [] - }); - } - var bpts = _p.rstyle.bezierPts; - var nProjs = r.bezierProjPcts.length; - function addSegment(cp, p0, p1, t0, t1) { - var length = dist(p0, p1); - var prevSegment = cp.segments[cp.segments.length - 1]; - var segment = { - p0: p0, - p1: p1, - t0: t0, - t1: t1, - startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0, - length: length - }; - cp.segments.push(segment); - cp.length += length; - } - - // update each ctrlpt with segment info - for (var _i = 0; _i < ctrlpts.length; _i++) { - var cp = ctrlpts[_i]; - var prevCp = ctrlpts[_i - 1]; - if (prevCp) { - cp.startDist = prevCp.startDist + prevCp.length; - } - addSegment(cp, cp.p0, bpts[_i * nProjs], 0, r.bezierProjPcts[0]); // first - - for (var j = 0; j < nProjs - 1; j++) { - addSegment(cp, bpts[_i * nProjs + j], bpts[_i * nProjs + j + 1], r.bezierProjPcts[j], r.bezierProjPcts[j + 1]); - } - addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r.bezierProjPcts[nProjs - 1], 1); // last - } - - return createControlPointInfo.cache = ctrlpts; - }; - var calculateEndProjection = function calculateEndProjection(prefix) { - var angle; - var isSrc = prefix === 'source'; - if (!content[prefix]) { - return; - } - var offset = edge.pstyle(prefix + '-text-offset').pfValue; - switch (rs.edgeType) { - case 'self': - case 'compound': - case 'bezier': - case 'multibezier': - { - var cps = createControlPointInfo(); - var selected; - var startDist = 0; - var totalDist = 0; - - // find the segment we're on - for (var i = 0; i < cps.length; i++) { - var _cp = cps[isSrc ? i : cps.length - 1 - i]; - for (var j = 0; j < _cp.segments.length; j++) { - var _seg = _cp.segments[isSrc ? j : _cp.segments.length - 1 - j]; - var lastSeg = i === cps.length - 1 && j === _cp.segments.length - 1; - startDist = totalDist; - totalDist += _seg.length; - if (totalDist >= offset || lastSeg) { - selected = { - cp: _cp, - segment: _seg - }; - break; - } - } - if (selected) { - break; - } - } - var cp = selected.cp; - var seg = selected.segment; - var tSegment = (offset - startDist) / seg.length; - var segDt = seg.t1 - seg.t0; - var t = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment; - t = bound(0, t, 1); - p = qbezierPtAt(cp.p0, cp.p1, cp.p2, t); - angle = bezierAngle(cp.p0, cp.p1, cp.p2, t); - break; - } - case 'straight': - case 'segments': - case 'haystack': - { - var d = 0, - di, - d0; - var p0, p1; - var l = rs.allpts.length; - for (var _i2 = 0; _i2 + 3 < l; _i2 += 2) { - if (isSrc) { - p0 = { - x: rs.allpts[_i2], - y: rs.allpts[_i2 + 1] - }; - p1 = { - x: rs.allpts[_i2 + 2], - y: rs.allpts[_i2 + 3] - }; - } else { - p0 = { - x: rs.allpts[l - 2 - _i2], - y: rs.allpts[l - 1 - _i2] - }; - p1 = { - x: rs.allpts[l - 4 - _i2], - y: rs.allpts[l - 3 - _i2] - }; - } - di = dist(p0, p1); - d0 = d; - d += di; - if (d >= offset) { - break; - } - } - var pD = offset - d0; - var _t = pD / di; - _t = bound(0, _t, 1); - p = lineAt(p0, p1, _t); - angle = lineAngle(p0, p1); - break; - } - } - setRs('labelX', prefix, p.x); - setRs('labelY', prefix, p.y); - setRs('labelAutoAngle', prefix, angle); - }; - calculateEndProjection('source'); - calculateEndProjection('target'); - this.applyLabelDimensions(edge); -}; -BRp$9.applyLabelDimensions = function (ele) { - this.applyPrefixedLabelDimensions(ele); - if (ele.isEdge()) { - this.applyPrefixedLabelDimensions(ele, 'source'); - this.applyPrefixedLabelDimensions(ele, 'target'); - } -}; -BRp$9.applyPrefixedLabelDimensions = function (ele, prefix) { - var _p = ele._private; - var text = this.getLabelText(ele, prefix); - var labelDims = this.calculateLabelDimensions(ele, text); - var lineHeight = ele.pstyle('line-height').pfValue; - var textWrap = ele.pstyle('text-wrap').strValue; - var lines = getPrefixedProperty(_p.rscratch, 'labelWrapCachedLines', prefix) || []; - var numLines = textWrap !== 'wrap' ? 1 : Math.max(lines.length, 1); - var normPerLineHeight = labelDims.height / numLines; - var labelLineHeight = normPerLineHeight * lineHeight; - var width = labelDims.width; - var height = labelDims.height + (numLines - 1) * (lineHeight - 1) * normPerLineHeight; - setPrefixedProperty(_p.rstyle, 'labelWidth', prefix, width); - setPrefixedProperty(_p.rscratch, 'labelWidth', prefix, width); - setPrefixedProperty(_p.rstyle, 'labelHeight', prefix, height); - setPrefixedProperty(_p.rscratch, 'labelHeight', prefix, height); - setPrefixedProperty(_p.rscratch, 'labelLineHeight', prefix, labelLineHeight); -}; -BRp$9.getLabelText = function (ele, prefix) { - var _p = ele._private; - var pfd = prefix ? prefix + '-' : ''; - var text = ele.pstyle(pfd + 'label').strValue; - var textTransform = ele.pstyle('text-transform').value; - var rscratch = function rscratch(propName, value) { - if (value) { - setPrefixedProperty(_p.rscratch, propName, prefix, value); - return value; - } else { - return getPrefixedProperty(_p.rscratch, propName, prefix); - } - }; - - // for empty text, skip all processing - if (!text) { - return ''; - } - if (textTransform == 'none') ; else if (textTransform == 'uppercase') { - text = text.toUpperCase(); - } else if (textTransform == 'lowercase') { - text = text.toLowerCase(); - } - var wrapStyle = ele.pstyle('text-wrap').value; - if (wrapStyle === 'wrap') { - var labelKey = rscratch('labelKey'); - - // save recalc if the label is the same as before - if (labelKey != null && rscratch('labelWrapKey') === labelKey) { - return rscratch('labelWrapCachedText'); - } - var zwsp = "\u200B"; - var lines = text.split('\n'); - var maxW = ele.pstyle('text-max-width').pfValue; - var overflow = ele.pstyle('text-overflow-wrap').value; - var overflowAny = overflow === 'anywhere'; - var wrappedLines = []; - var wordsRegex = /[\s\u200b]+/; - var wordSeparator = overflowAny ? '' : ' '; - for (var l = 0; l < lines.length; l++) { - var line = lines[l]; - var lineDims = this.calculateLabelDimensions(ele, line); - var lineW = lineDims.width; - if (overflowAny) { - var processedLine = line.split('').join(zwsp); - line = processedLine; - } - if (lineW > maxW) { - // line is too long - var words = line.split(wordsRegex); - var subline = ''; - for (var w = 0; w < words.length; w++) { - var word = words[w]; - var testLine = subline.length === 0 ? word : subline + wordSeparator + word; - var testDims = this.calculateLabelDimensions(ele, testLine); - var testW = testDims.width; - if (testW <= maxW) { - // word fits on current line - subline += word + wordSeparator; - } else { - // word starts new line - if (subline) { - wrappedLines.push(subline); - } - subline = word + wordSeparator; - } - } - - // if there's remaining text, put it in a wrapped line - if (!subline.match(/^[\s\u200b]+$/)) { - wrappedLines.push(subline); - } - } else { - // line is already short enough - wrappedLines.push(line); - } - } // for - - rscratch('labelWrapCachedLines', wrappedLines); - text = rscratch('labelWrapCachedText', wrappedLines.join('\n')); - rscratch('labelWrapKey', labelKey); - } else if (wrapStyle === 'ellipsis') { - var _maxW = ele.pstyle('text-max-width').pfValue; - var ellipsized = ''; - var ellipsis = "\u2026"; - var incLastCh = false; - if (this.calculateLabelDimensions(ele, text).width < _maxW) { - // the label already fits - return text; - } - for (var i = 0; i < text.length; i++) { - var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text[i] + ellipsis).width; - if (widthWithNextCh > _maxW) { - break; - } - ellipsized += text[i]; - if (i === text.length - 1) { - incLastCh = true; - } - } - if (!incLastCh) { - ellipsized += ellipsis; - } - return ellipsized; - } // if ellipsize - - return text; -}; -BRp$9.getLabelJustification = function (ele) { - var justification = ele.pstyle('text-justification').strValue; - var textHalign = ele.pstyle('text-halign').strValue; - if (justification === 'auto') { - if (ele.isNode()) { - switch (textHalign) { - case 'left': - return 'right'; - case 'right': - return 'left'; - default: - return 'center'; - } - } else { - return 'center'; - } - } else { - return justification; - } -}; -BRp$9.calculateLabelDimensions = function (ele, text) { - var r = this; - var cacheKey = hashString(text, ele._private.labelDimsKey); - var cache = r.labelDimCache || (r.labelDimCache = []); - var existingVal = cache[cacheKey]; - if (existingVal != null) { - return existingVal; - } - var padding = 0; // add padding around text dims, as the measurement isn't that accurate - var fStyle = ele.pstyle('font-style').strValue; - var size = ele.pstyle('font-size').pfValue; - var family = ele.pstyle('font-family').strValue; - var weight = ele.pstyle('font-weight').strValue; - var canvas = this.labelCalcCanvas; - var c2d = this.labelCalcCanvasContext; - if (!canvas) { - canvas = this.labelCalcCanvas = document.createElement('canvas'); - c2d = this.labelCalcCanvasContext = canvas.getContext('2d'); - var ds = canvas.style; - ds.position = 'absolute'; - ds.left = '-9999px'; - ds.top = '-9999px'; - ds.zIndex = '-1'; - ds.visibility = 'hidden'; - ds.pointerEvents = 'none'; - } - c2d.font = "".concat(fStyle, " ").concat(weight, " ").concat(size, "px ").concat(family); - var width = 0; - var height = 0; - var lines = text.split('\n'); - for (var i = 0; i < lines.length; i++) { - var line = lines[i]; - var metrics = c2d.measureText(line); - var w = Math.ceil(metrics.width); - var h = size; - width = Math.max(w, width); - height += h; - } - width += padding; - height += padding; - return cache[cacheKey] = { - width: width, - height: height - }; -}; -BRp$9.calculateLabelAngle = function (ele, prefix) { - var _p = ele._private; - var rs = _p.rscratch; - var isEdge = ele.isEdge(); - var prefixDash = prefix ? prefix + '-' : ''; - var rot = ele.pstyle(prefixDash + 'text-rotation'); - var rotStr = rot.strValue; - if (rotStr === 'none') { - return 0; - } else if (isEdge && rotStr === 'autorotate') { - return rs.labelAutoAngle; - } else if (rotStr === 'autorotate') { - return 0; - } else { - return rot.pfValue; - } -}; -BRp$9.calculateLabelAngles = function (ele) { - var r = this; - var isEdge = ele.isEdge(); - var _p = ele._private; - var rs = _p.rscratch; - rs.labelAngle = r.calculateLabelAngle(ele); - if (isEdge) { - rs.sourceLabelAngle = r.calculateLabelAngle(ele, 'source'); - rs.targetLabelAngle = r.calculateLabelAngle(ele, 'target'); - } -}; - -var BRp$8 = {}; -var TOO_SMALL_CUT_RECT = 28; -var warnedCutRect = false; -BRp$8.getNodeShape = function (node) { - var r = this; - var shape = node.pstyle('shape').value; - if (shape === 'cutrectangle' && (node.width() < TOO_SMALL_CUT_RECT || node.height() < TOO_SMALL_CUT_RECT)) { - if (!warnedCutRect) { - warn('The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead'); - warnedCutRect = true; - } - return 'rectangle'; - } - if (node.isParent()) { - if (shape === 'rectangle' || shape === 'roundrectangle' || shape === 'round-rectangle' || shape === 'cutrectangle' || shape === 'cut-rectangle' || shape === 'barrel') { - return shape; - } else { - return 'rectangle'; - } - } - if (shape === 'polygon') { - var points = node.pstyle('shape-polygon-points').value; - return r.nodeShapes.makePolygon(points).name; - } - return shape; -}; - -var BRp$7 = {}; -BRp$7.registerCalculationListeners = function () { - var cy = this.cy; - var elesToUpdate = cy.collection(); - var r = this; - var enqueue = function enqueue(eles) { - var dirtyStyleCaches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - elesToUpdate.merge(eles); - if (dirtyStyleCaches) { - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - var _p = ele._private; - var rstyle = _p.rstyle; - rstyle.clean = false; - rstyle.cleanConnected = false; - } - } - }; - r.binder(cy).on('bounds.* dirty.*', function onDirtyBounds(e) { - var ele = e.target; - enqueue(ele); - }).on('style.* background.*', function onDirtyStyle(e) { - var ele = e.target; - enqueue(ele, false); - }); - var updateEleCalcs = function updateEleCalcs(willDraw) { - if (willDraw) { - var fns = r.onUpdateEleCalcsFns; - - // because we need to have up-to-date style (e.g. stylesheet mappers) - // before calculating rendered style (and pstyle might not be called yet) - elesToUpdate.cleanStyle(); - for (var i = 0; i < elesToUpdate.length; i++) { - var ele = elesToUpdate[i]; - var rstyle = ele._private.rstyle; - if (ele.isNode() && !rstyle.cleanConnected) { - enqueue(ele.connectedEdges()); - rstyle.cleanConnected = true; - } - } - if (fns) { - for (var _i = 0; _i < fns.length; _i++) { - var fn = fns[_i]; - fn(willDraw, elesToUpdate); - } - } - r.recalculateRenderedStyle(elesToUpdate); - elesToUpdate = cy.collection(); - } - }; - r.flushRenderedStyleQueue = function () { - updateEleCalcs(true); - }; - r.beforeRender(updateEleCalcs, r.beforeRenderPriorities.eleCalcs); -}; -BRp$7.onUpdateEleCalcs = function (fn) { - var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || []; - fns.push(fn); -}; -BRp$7.recalculateRenderedStyle = function (eles, useCache) { - var isCleanConnected = function isCleanConnected(ele) { - return ele._private.rstyle.cleanConnected; - }; - var edges = []; - var nodes = []; - - // the renderer can't be used for calcs when destroyed, e.g. ele.boundingBox() - if (this.destroyed) { - return; - } - - // use cache by default for perf - if (useCache === undefined) { - useCache = true; - } - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - var _p = ele._private; - var rstyle = _p.rstyle; - - // an edge may be implicitly dirty b/c of one of its connected nodes - // (and a request for recalc may come in between frames) - if (ele.isEdge() && (!isCleanConnected(ele.source()) || !isCleanConnected(ele.target()))) { - rstyle.clean = false; - } - - // only update if dirty and in graph - if (useCache && rstyle.clean || ele.removed()) { - continue; - } - - // only update if not display: none - if (ele.pstyle('display').value === 'none') { - continue; - } - if (_p.group === 'nodes') { - nodes.push(ele); - } else { - // edges - edges.push(ele); - } - rstyle.clean = true; - } - - // update node data from projections - for (var _i2 = 0; _i2 < nodes.length; _i2++) { - var _ele = nodes[_i2]; - var _p2 = _ele._private; - var _rstyle = _p2.rstyle; - var pos = _ele.position(); - this.recalculateNodeLabelProjection(_ele); - _rstyle.nodeX = pos.x; - _rstyle.nodeY = pos.y; - _rstyle.nodeW = _ele.pstyle('width').pfValue; - _rstyle.nodeH = _ele.pstyle('height').pfValue; - } - this.recalculateEdgeProjections(edges); - - // update edge data from projections - for (var _i3 = 0; _i3 < edges.length; _i3++) { - var _ele2 = edges[_i3]; - var _p3 = _ele2._private; - var _rstyle2 = _p3.rstyle; - var rs = _p3.rscratch; - - // update rstyle positions - _rstyle2.srcX = rs.arrowStartX; - _rstyle2.srcY = rs.arrowStartY; - _rstyle2.tgtX = rs.arrowEndX; - _rstyle2.tgtY = rs.arrowEndY; - _rstyle2.midX = rs.midX; - _rstyle2.midY = rs.midY; - _rstyle2.labelAngle = rs.labelAngle; - _rstyle2.sourceLabelAngle = rs.sourceLabelAngle; - _rstyle2.targetLabelAngle = rs.targetLabelAngle; - } -}; - -var BRp$6 = {}; -BRp$6.updateCachedGrabbedEles = function () { - var eles = this.cachedZSortedEles; - if (!eles) { - // just let this be recalculated on the next z sort tick - return; - } - eles.drag = []; - eles.nondrag = []; - var grabTargets = []; - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - var rs = ele._private.rscratch; - if (ele.grabbed() && !ele.isParent()) { - grabTargets.push(ele); - } else if (rs.inDragLayer) { - eles.drag.push(ele); - } else { - eles.nondrag.push(ele); - } - } - - // put the grab target nodes last so it's on top of its neighbourhood - for (var i = 0; i < grabTargets.length; i++) { - var ele = grabTargets[i]; - eles.drag.push(ele); - } -}; -BRp$6.invalidateCachedZSortedEles = function () { - this.cachedZSortedEles = null; -}; -BRp$6.getCachedZSortedEles = function (forceRecalc) { - if (forceRecalc || !this.cachedZSortedEles) { - var eles = this.cy.mutableElements().toArray(); - eles.sort(zIndexSort); - eles.interactive = eles.filter(function (ele) { - return ele.interactive(); - }); - this.cachedZSortedEles = eles; - this.updateCachedGrabbedEles(); - } else { - eles = this.cachedZSortedEles; - } - return eles; -}; - -var BRp$5 = {}; -[BRp$e, BRp$d, BRp$c, BRp$b, BRp$a, BRp$9, BRp$8, BRp$7, BRp$6].forEach(function (props) { - extend(BRp$5, props); -}); - -var BRp$4 = {}; -BRp$4.getCachedImage = function (url, crossOrigin, onLoad) { - var r = this; - var imageCache = r.imageCache = r.imageCache || {}; - var cache = imageCache[url]; - if (cache) { - if (!cache.image.complete) { - cache.image.addEventListener('load', onLoad); - } - return cache.image; - } else { - cache = imageCache[url] = imageCache[url] || {}; - var image = cache.image = new Image(); // eslint-disable-line no-undef - - image.addEventListener('load', onLoad); - image.addEventListener('error', function () { - image.error = true; - }); - - // #1582 safari doesn't load data uris with crossOrigin properly - // https://bugs.webkit.org/show_bug.cgi?id=123978 - var dataUriPrefix = 'data:'; - var isDataUri = url.substring(0, dataUriPrefix.length).toLowerCase() === dataUriPrefix; - if (!isDataUri) { - // if crossorigin is 'null'(stringified), then manually set it to null - crossOrigin = crossOrigin === 'null' ? null : crossOrigin; - image.crossOrigin = crossOrigin; // prevent tainted canvas - } - - image.src = url; - return image; - } -}; - -var BRp$3 = {}; - -/* global document, window, ResizeObserver, MutationObserver */ - -BRp$3.registerBinding = function (target, event, handler, useCapture) { - // eslint-disable-line no-unused-vars - var args = Array.prototype.slice.apply(arguments, [1]); // copy - var b = this.binder(target); - return b.on.apply(b, args); -}; -BRp$3.binder = function (tgt) { - var r = this; - var containerWindow = r.cy.window(); - var tgtIsDom = tgt === containerWindow || tgt === containerWindow.document || tgt === containerWindow.document.body || domElement(tgt); - if (r.supportsPassiveEvents == null) { - // from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection - var supportsPassive = false; - try { - var opts = Object.defineProperty({}, 'passive', { - get: function get() { - supportsPassive = true; - return true; - } - }); - containerWindow.addEventListener('test', null, opts); - } catch (err) { - // not supported - } - r.supportsPassiveEvents = supportsPassive; - } - var on = function on(event, handler, useCapture) { - var args = Array.prototype.slice.call(arguments); - if (tgtIsDom && r.supportsPassiveEvents) { - // replace useCapture w/ opts obj - args[2] = { - capture: useCapture != null ? useCapture : false, - passive: false, - once: false - }; - } - r.bindings.push({ - target: tgt, - args: args - }); - (tgt.addEventListener || tgt.on).apply(tgt, args); - return this; - }; - return { - on: on, - addEventListener: on, - addListener: on, - bind: on - }; -}; -BRp$3.nodeIsDraggable = function (node) { - return node && node.isNode() && !node.locked() && node.grabbable(); -}; -BRp$3.nodeIsGrabbable = function (node) { - return this.nodeIsDraggable(node) && node.interactive(); -}; -BRp$3.load = function () { - var r = this; - var containerWindow = r.cy.window(); - var isSelected = function isSelected(ele) { - return ele.selected(); - }; - var triggerEvents = function triggerEvents(target, names, e, position) { - if (target == null) { - target = r.cy; - } - for (var i = 0; i < names.length; i++) { - var name = names[i]; - target.emit({ - originalEvent: e, - type: name, - position: position - }); - } - }; - var isMultSelKeyDown = function isMultSelKeyDown(e) { - return e.shiftKey || e.metaKey || e.ctrlKey; // maybe e.altKey - }; - - var allowPanningPassthrough = function allowPanningPassthrough(down, downs) { - var allowPassthrough = true; - if (r.cy.hasCompoundNodes() && down && down.pannable()) { - // a grabbable compound node below the ele => no passthrough panning - for (var i = 0; downs && i < downs.length; i++) { - var down = downs[i]; - - //if any parent node in event hierarchy isn't pannable, reject passthrough - if (down.isNode() && down.isParent() && !down.pannable()) { - allowPassthrough = false; - break; - } - } - } else { - allowPassthrough = true; - } - return allowPassthrough; - }; - var setGrabbed = function setGrabbed(ele) { - ele[0]._private.grabbed = true; - }; - var setFreed = function setFreed(ele) { - ele[0]._private.grabbed = false; - }; - var setInDragLayer = function setInDragLayer(ele) { - ele[0]._private.rscratch.inDragLayer = true; - }; - var setOutDragLayer = function setOutDragLayer(ele) { - ele[0]._private.rscratch.inDragLayer = false; - }; - var setGrabTarget = function setGrabTarget(ele) { - ele[0]._private.rscratch.isGrabTarget = true; - }; - var removeGrabTarget = function removeGrabTarget(ele) { - ele[0]._private.rscratch.isGrabTarget = false; - }; - var addToDragList = function addToDragList(ele, opts) { - var list = opts.addToList; - var listHasEle = list.has(ele); - if (!listHasEle && ele.grabbable() && !ele.locked()) { - list.merge(ele); - setGrabbed(ele); - } - }; - - // helper function to determine which child nodes and inner edges - // of a compound node to be dragged as well as the grabbed and selected nodes - var addDescendantsToDrag = function addDescendantsToDrag(node, opts) { - if (!node.cy().hasCompoundNodes()) { - return; - } - if (opts.inDragLayer == null && opts.addToList == null) { - return; - } // nothing to do - - var innerNodes = node.descendants(); - if (opts.inDragLayer) { - innerNodes.forEach(setInDragLayer); - innerNodes.connectedEdges().forEach(setInDragLayer); - } - if (opts.addToList) { - addToDragList(innerNodes, opts); - } - }; - - // adds the given nodes and its neighbourhood to the drag layer - var addNodesToDrag = function addNodesToDrag(nodes, opts) { - opts = opts || {}; - var hasCompoundNodes = nodes.cy().hasCompoundNodes(); - if (opts.inDragLayer) { - nodes.forEach(setInDragLayer); - nodes.neighborhood().stdFilter(function (ele) { - return !hasCompoundNodes || ele.isEdge(); - }).forEach(setInDragLayer); - } - if (opts.addToList) { - nodes.forEach(function (ele) { - addToDragList(ele, opts); - }); - } - addDescendantsToDrag(nodes, opts); // always add to drag - - // also add nodes and edges related to the topmost ancestor - updateAncestorsInDragLayer(nodes, { - inDragLayer: opts.inDragLayer - }); - r.updateCachedGrabbedEles(); - }; - var addNodeToDrag = addNodesToDrag; - var freeDraggedElements = function freeDraggedElements(grabbedEles) { - if (!grabbedEles) { - return; - } - - // just go over all elements rather than doing a bunch of (possibly expensive) traversals - r.getCachedZSortedEles().forEach(function (ele) { - setFreed(ele); - setOutDragLayer(ele); - removeGrabTarget(ele); - }); - r.updateCachedGrabbedEles(); - }; - - // helper function to determine which ancestor nodes and edges should go - // to the drag layer (or should be removed from drag layer). - var updateAncestorsInDragLayer = function updateAncestorsInDragLayer(node, opts) { - if (opts.inDragLayer == null && opts.addToList == null) { - return; - } // nothing to do - - if (!node.cy().hasCompoundNodes()) { - return; - } - - // find top-level parent - var parent = node.ancestors().orphans(); - - // no parent node: no nodes to add to the drag layer - if (parent.same(node)) { - return; - } - var nodes = parent.descendants().spawnSelf().merge(parent).unmerge(node).unmerge(node.descendants()); - var edges = nodes.connectedEdges(); - if (opts.inDragLayer) { - edges.forEach(setInDragLayer); - nodes.forEach(setInDragLayer); - } - if (opts.addToList) { - nodes.forEach(function (ele) { - addToDragList(ele, opts); - }); - } - }; - var blurActiveDomElement = function blurActiveDomElement() { - if (document.activeElement != null && document.activeElement.blur != null) { - document.activeElement.blur(); - } - }; - var haveMutationsApi = typeof MutationObserver !== 'undefined'; - var haveResizeObserverApi = typeof ResizeObserver !== 'undefined'; - - // watch for when the cy container is removed from the dom - if (haveMutationsApi) { - r.removeObserver = new MutationObserver(function (mutns) { - // eslint-disable-line no-undef - for (var i = 0; i < mutns.length; i++) { - var mutn = mutns[i]; - var rNodes = mutn.removedNodes; - if (rNodes) { - for (var j = 0; j < rNodes.length; j++) { - var rNode = rNodes[j]; - if (rNode === r.container) { - r.destroy(); - break; - } - } - } - } - }); - if (r.container.parentNode) { - r.removeObserver.observe(r.container.parentNode, { - childList: true - }); - } - } else { - r.registerBinding(r.container, 'DOMNodeRemoved', function (e) { - // eslint-disable-line no-unused-vars - r.destroy(); - }); - } - var onResize = debounce__default["default"](function () { - r.cy.resize(); - }, 100); - if (haveMutationsApi) { - r.styleObserver = new MutationObserver(onResize); // eslint-disable-line no-undef - - r.styleObserver.observe(r.container, { - attributes: true - }); - } - - // auto resize - r.registerBinding(containerWindow, 'resize', onResize); // eslint-disable-line no-undef - - if (haveResizeObserverApi) { - r.resizeObserver = new ResizeObserver(onResize); // eslint-disable-line no-undef - - r.resizeObserver.observe(r.container); - } - var forEachUp = function forEachUp(domEle, fn) { - while (domEle != null) { - fn(domEle); - domEle = domEle.parentNode; - } - }; - var invalidateCoords = function invalidateCoords() { - r.invalidateContainerClientCoordsCache(); - }; - forEachUp(r.container, function (domEle) { - r.registerBinding(domEle, 'transitionend', invalidateCoords); - r.registerBinding(domEle, 'animationend', invalidateCoords); - r.registerBinding(domEle, 'scroll', invalidateCoords); - }); - - // stop right click menu from appearing on cy - r.registerBinding(r.container, 'contextmenu', function (e) { - e.preventDefault(); - }); - var inBoxSelection = function inBoxSelection() { - return r.selection[4] !== 0; - }; - var eventInContainer = function eventInContainer(e) { - // save cycles if mouse events aren't to be captured - var containerPageCoords = r.findContainerClientCoords(); - var x = containerPageCoords[0]; - var y = containerPageCoords[1]; - var width = containerPageCoords[2]; - var height = containerPageCoords[3]; - var positions = e.touches ? e.touches : [e]; - var atLeastOnePosInside = false; - for (var i = 0; i < positions.length; i++) { - var p = positions[i]; - if (x <= p.clientX && p.clientX <= x + width && y <= p.clientY && p.clientY <= y + height) { - atLeastOnePosInside = true; - break; - } - } - if (!atLeastOnePosInside) { - return false; - } - var container = r.container; - var target = e.target; - var tParent = target.parentNode; - var containerIsTarget = false; - while (tParent) { - if (tParent === container) { - containerIsTarget = true; - break; - } - tParent = tParent.parentNode; - } - if (!containerIsTarget) { - return false; - } // if target is outisde cy container, then this event is not for us - - return true; - }; - - // Primary key - r.registerBinding(r.container, 'mousedown', function mousedownHandler(e) { - if (!eventInContainer(e)) { - return; - } - e.preventDefault(); - blurActiveDomElement(); - r.hoverData.capture = true; - r.hoverData.which = e.which; - var cy = r.cy; - var gpos = [e.clientX, e.clientY]; - var pos = r.projectIntoViewport(gpos[0], gpos[1]); - var select = r.selection; - var nears = r.findNearestElements(pos[0], pos[1], true, false); - var near = nears[0]; - var draggedElements = r.dragData.possibleDragElements; - r.hoverData.mdownPos = pos; - r.hoverData.mdownGPos = gpos; - var checkForTaphold = function checkForTaphold() { - r.hoverData.tapholdCancelled = false; - clearTimeout(r.hoverData.tapholdTimeout); - r.hoverData.tapholdTimeout = setTimeout(function () { - if (r.hoverData.tapholdCancelled) { - return; - } else { - var ele = r.hoverData.down; - if (ele) { - ele.emit({ - originalEvent: e, - type: 'taphold', - position: { - x: pos[0], - y: pos[1] - } - }); - } else { - cy.emit({ - originalEvent: e, - type: 'taphold', - position: { - x: pos[0], - y: pos[1] - } - }); - } - } - }, r.tapholdDuration); - }; - - // Right click button - if (e.which == 3) { - r.hoverData.cxtStarted = true; - var cxtEvt = { - originalEvent: e, - type: 'cxttapstart', - position: { - x: pos[0], - y: pos[1] - } - }; - if (near) { - near.activate(); - near.emit(cxtEvt); - r.hoverData.down = near; - } else { - cy.emit(cxtEvt); - } - r.hoverData.downTime = new Date().getTime(); - r.hoverData.cxtDragged = false; - - // Primary button - } else if (e.which == 1) { - if (near) { - near.activate(); - } - - // Element dragging - { - // If something is under the cursor and it is draggable, prepare to grab it - if (near != null) { - if (r.nodeIsGrabbable(near)) { - var makeEvent = function makeEvent(type) { - return { - originalEvent: e, - type: type, - position: { - x: pos[0], - y: pos[1] - } - }; - }; - var triggerGrab = function triggerGrab(ele) { - ele.emit(makeEvent('grab')); - }; - setGrabTarget(near); - if (!near.selected()) { - draggedElements = r.dragData.possibleDragElements = cy.collection(); - addNodeToDrag(near, { - addToList: draggedElements - }); - near.emit(makeEvent('grabon')).emit(makeEvent('grab')); - } else { - draggedElements = r.dragData.possibleDragElements = cy.collection(); - var selectedNodes = cy.$(function (ele) { - return ele.isNode() && ele.selected() && r.nodeIsGrabbable(ele); - }); - addNodesToDrag(selectedNodes, { - addToList: draggedElements - }); - near.emit(makeEvent('grabon')); - selectedNodes.forEach(triggerGrab); - } - r.redrawHint('eles', true); - r.redrawHint('drag', true); - } - } - r.hoverData.down = near; - r.hoverData.downs = nears; - r.hoverData.downTime = new Date().getTime(); - } - triggerEvents(near, ['mousedown', 'tapstart', 'vmousedown'], e, { - x: pos[0], - y: pos[1] - }); - if (near == null) { - select[4] = 1; - r.data.bgActivePosistion = { - x: pos[0], - y: pos[1] - }; - r.redrawHint('select', true); - r.redraw(); - } else if (near.pannable()) { - select[4] = 1; // for future pan - } - - checkForTaphold(); - } - - // Initialize selection box coordinates - select[0] = select[2] = pos[0]; - select[1] = select[3] = pos[1]; - }, false); - r.registerBinding(containerWindow, 'mousemove', function mousemoveHandler(e) { - // eslint-disable-line no-undef - var capture = r.hoverData.capture; - if (!capture && !eventInContainer(e)) { - return; - } - var preventDefault = false; - var cy = r.cy; - var zoom = cy.zoom(); - var gpos = [e.clientX, e.clientY]; - var pos = r.projectIntoViewport(gpos[0], gpos[1]); - var mdownPos = r.hoverData.mdownPos; - var mdownGPos = r.hoverData.mdownGPos; - var select = r.selection; - var near = null; - if (!r.hoverData.draggingEles && !r.hoverData.dragging && !r.hoverData.selecting) { - near = r.findNearestElement(pos[0], pos[1], true, false); - } - var last = r.hoverData.last; - var down = r.hoverData.down; - var disp = [pos[0] - select[2], pos[1] - select[3]]; - var draggedElements = r.dragData.possibleDragElements; - var isOverThresholdDrag; - if (mdownGPos) { - var dx = gpos[0] - mdownGPos[0]; - var dx2 = dx * dx; - var dy = gpos[1] - mdownGPos[1]; - var dy2 = dy * dy; - var dist2 = dx2 + dy2; - r.hoverData.isOverThresholdDrag = isOverThresholdDrag = dist2 >= r.desktopTapThreshold2; - } - var multSelKeyDown = isMultSelKeyDown(e); - if (isOverThresholdDrag) { - r.hoverData.tapholdCancelled = true; - } - var updateDragDelta = function updateDragDelta() { - var dragDelta = r.hoverData.dragDelta = r.hoverData.dragDelta || []; - if (dragDelta.length === 0) { - dragDelta.push(disp[0]); - dragDelta.push(disp[1]); - } else { - dragDelta[0] += disp[0]; - dragDelta[1] += disp[1]; - } - }; - preventDefault = true; - triggerEvents(near, ['mousemove', 'vmousemove', 'tapdrag'], e, { - x: pos[0], - y: pos[1] - }); - var goIntoBoxMode = function goIntoBoxMode() { - r.data.bgActivePosistion = undefined; - if (!r.hoverData.selecting) { - cy.emit({ - originalEvent: e, - type: 'boxstart', - position: { - x: pos[0], - y: pos[1] - } - }); - } - select[4] = 1; - r.hoverData.selecting = true; - r.redrawHint('select', true); - r.redraw(); - }; - - // trigger context drag if rmouse down - if (r.hoverData.which === 3) { - // but only if over threshold - if (isOverThresholdDrag) { - var cxtEvt = { - originalEvent: e, - type: 'cxtdrag', - position: { - x: pos[0], - y: pos[1] - } - }; - if (down) { - down.emit(cxtEvt); - } else { - cy.emit(cxtEvt); - } - r.hoverData.cxtDragged = true; - if (!r.hoverData.cxtOver || near !== r.hoverData.cxtOver) { - if (r.hoverData.cxtOver) { - r.hoverData.cxtOver.emit({ - originalEvent: e, - type: 'cxtdragout', - position: { - x: pos[0], - y: pos[1] - } - }); - } - r.hoverData.cxtOver = near; - if (near) { - near.emit({ - originalEvent: e, - type: 'cxtdragover', - position: { - x: pos[0], - y: pos[1] - } - }); - } - } - } - - // Check if we are drag panning the entire graph - } else if (r.hoverData.dragging) { - preventDefault = true; - if (cy.panningEnabled() && cy.userPanningEnabled()) { - var deltaP; - if (r.hoverData.justStartedPan) { - var mdPos = r.hoverData.mdownPos; - deltaP = { - x: (pos[0] - mdPos[0]) * zoom, - y: (pos[1] - mdPos[1]) * zoom - }; - r.hoverData.justStartedPan = false; - } else { - deltaP = { - x: disp[0] * zoom, - y: disp[1] * zoom - }; - } - cy.panBy(deltaP); - cy.emit('dragpan'); - r.hoverData.dragged = true; - } - - // Needs reproject due to pan changing viewport - pos = r.projectIntoViewport(e.clientX, e.clientY); - - // Checks primary button down & out of time & mouse not moved much - } else if (select[4] == 1 && (down == null || down.pannable())) { - if (isOverThresholdDrag) { - if (!r.hoverData.dragging && cy.boxSelectionEnabled() && (multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled())) { - goIntoBoxMode(); - } else if (!r.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled()) { - var allowPassthrough = allowPanningPassthrough(down, r.hoverData.downs); - if (allowPassthrough) { - r.hoverData.dragging = true; - r.hoverData.justStartedPan = true; - select[4] = 0; - r.data.bgActivePosistion = array2point(mdownPos); - r.redrawHint('select', true); - r.redraw(); - } - } - if (down && down.pannable() && down.active()) { - down.unactivate(); - } - } - } else { - if (down && down.pannable() && down.active()) { - down.unactivate(); - } - if ((!down || !down.grabbed()) && near != last) { - if (last) { - triggerEvents(last, ['mouseout', 'tapdragout'], e, { - x: pos[0], - y: pos[1] - }); - } - if (near) { - triggerEvents(near, ['mouseover', 'tapdragover'], e, { - x: pos[0], - y: pos[1] - }); - } - r.hoverData.last = near; - } - if (down) { - if (isOverThresholdDrag) { - // then we can take action - - if (cy.boxSelectionEnabled() && multSelKeyDown) { - // then selection overrides - if (down && down.grabbed()) { - freeDraggedElements(draggedElements); - down.emit('freeon'); - draggedElements.emit('free'); - if (r.dragData.didDrag) { - down.emit('dragfreeon'); - draggedElements.emit('dragfree'); - } - } - goIntoBoxMode(); - } else if (down && down.grabbed() && r.nodeIsDraggable(down)) { - // drag node - var justStartedDrag = !r.dragData.didDrag; - if (justStartedDrag) { - r.redrawHint('eles', true); - } - r.dragData.didDrag = true; // indicate that we actually did drag the node - - // now, add the elements to the drag layer if not done already - if (!r.hoverData.draggingEles) { - addNodesToDrag(draggedElements, { - inDragLayer: true - }); - } - var totalShift = { - x: 0, - y: 0 - }; - if (number$1(disp[0]) && number$1(disp[1])) { - totalShift.x += disp[0]; - totalShift.y += disp[1]; - if (justStartedDrag) { - var dragDelta = r.hoverData.dragDelta; - if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { - totalShift.x += dragDelta[0]; - totalShift.y += dragDelta[1]; - } - } - } - r.hoverData.draggingEles = true; - draggedElements.silentShift(totalShift).emit('position drag'); - r.redrawHint('drag', true); - r.redraw(); - } - } else { - // otherwise save drag delta for when we actually start dragging so the relative grab pos is constant - updateDragDelta(); - } - } - - // prevent the dragging from triggering text selection on the page - preventDefault = true; - } - select[2] = pos[0]; - select[3] = pos[1]; - if (preventDefault) { - if (e.stopPropagation) e.stopPropagation(); - if (e.preventDefault) e.preventDefault(); - return false; - } - }, false); - var clickTimeout, didDoubleClick, prevClickTimeStamp; - r.registerBinding(containerWindow, 'mouseup', function mouseupHandler(e) { - // eslint-disable-line no-undef - var capture = r.hoverData.capture; - if (!capture) { - return; - } - r.hoverData.capture = false; - var cy = r.cy; - var pos = r.projectIntoViewport(e.clientX, e.clientY); - var select = r.selection; - var near = r.findNearestElement(pos[0], pos[1], true, false); - var draggedElements = r.dragData.possibleDragElements; - var down = r.hoverData.down; - var multSelKeyDown = isMultSelKeyDown(e); - if (r.data.bgActivePosistion) { - r.redrawHint('select', true); - r.redraw(); - } - r.hoverData.tapholdCancelled = true; - r.data.bgActivePosistion = undefined; // not active bg now - - if (down) { - down.unactivate(); - } - if (r.hoverData.which === 3) { - var cxtEvt = { - originalEvent: e, - type: 'cxttapend', - position: { - x: pos[0], - y: pos[1] - } - }; - if (down) { - down.emit(cxtEvt); - } else { - cy.emit(cxtEvt); - } - if (!r.hoverData.cxtDragged) { - var cxtTap = { - originalEvent: e, - type: 'cxttap', - position: { - x: pos[0], - y: pos[1] - } - }; - if (down) { - down.emit(cxtTap); - } else { - cy.emit(cxtTap); - } - } - r.hoverData.cxtDragged = false; - r.hoverData.which = null; - } else if (r.hoverData.which === 1) { - triggerEvents(near, ['mouseup', 'tapend', 'vmouseup'], e, { - x: pos[0], - y: pos[1] - }); - if (!r.dragData.didDrag && - // didn't move a node around - !r.hoverData.dragged && - // didn't pan - !r.hoverData.selecting && - // not box selection - !r.hoverData.isOverThresholdDrag // didn't move too much - ) { - triggerEvents(down, ["click", "tap", "vclick"], e, { - x: pos[0], - y: pos[1] - }); - didDoubleClick = false; - if (e.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) { - clickTimeout && clearTimeout(clickTimeout); - didDoubleClick = true; - prevClickTimeStamp = null; - triggerEvents(down, ["dblclick", "dbltap", "vdblclick"], e, { - x: pos[0], - y: pos[1] - }); - } else { - clickTimeout = setTimeout(function () { - if (didDoubleClick) return; - triggerEvents(down, ["oneclick", "onetap", "voneclick"], e, { - x: pos[0], - y: pos[1] - }); - }, cy.multiClickDebounceTime()); - prevClickTimeStamp = e.timeStamp; - } - } - - // Deselect all elements if nothing is currently under the mouse cursor and we aren't dragging something - if (down == null // not mousedown on node - && !r.dragData.didDrag // didn't move the node around - && !r.hoverData.selecting // not box selection - && !r.hoverData.dragged // didn't pan - && !isMultSelKeyDown(e)) { - cy.$(isSelected).unselect(['tapunselect']); - if (draggedElements.length > 0) { - r.redrawHint('eles', true); - } - r.dragData.possibleDragElements = draggedElements = cy.collection(); - } - - // Single selection - if (near == down && !r.dragData.didDrag && !r.hoverData.selecting) { - if (near != null && near._private.selectable) { - if (r.hoverData.dragging) ; else if (cy.selectionType() === 'additive' || multSelKeyDown) { - if (near.selected()) { - near.unselect(['tapunselect']); - } else { - near.select(['tapselect']); - } - } else { - if (!multSelKeyDown) { - cy.$(isSelected).unmerge(near).unselect(['tapunselect']); - near.select(['tapselect']); - } - } - r.redrawHint('eles', true); - } - } - if (r.hoverData.selecting) { - var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); - r.redrawHint('select', true); - if (box.length > 0) { - r.redrawHint('eles', true); - } - cy.emit({ - type: 'boxend', - originalEvent: e, - position: { - x: pos[0], - y: pos[1] - } - }); - var eleWouldBeSelected = function eleWouldBeSelected(ele) { - return ele.selectable() && !ele.selected(); - }; - if (cy.selectionType() === 'additive') { - box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); - } else { - if (!multSelKeyDown) { - cy.$(isSelected).unmerge(box).unselect(); - } - box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); - } - - // always need redraw in case eles unselectable - r.redraw(); - } - - // Cancel drag pan - if (r.hoverData.dragging) { - r.hoverData.dragging = false; - r.redrawHint('select', true); - r.redrawHint('eles', true); - r.redraw(); - } - if (!select[4]) { - r.redrawHint('drag', true); - r.redrawHint('eles', true); - var downWasGrabbed = down && down.grabbed(); - freeDraggedElements(draggedElements); - if (downWasGrabbed) { - down.emit('freeon'); - draggedElements.emit('free'); - if (r.dragData.didDrag) { - down.emit('dragfreeon'); - draggedElements.emit('dragfree'); - } - } - } - } // else not right mouse - - select[4] = 0; - r.hoverData.down = null; - r.hoverData.cxtStarted = false; - r.hoverData.draggingEles = false; - r.hoverData.selecting = false; - r.hoverData.isOverThresholdDrag = false; - r.dragData.didDrag = false; - r.hoverData.dragged = false; - r.hoverData.dragDelta = []; - r.hoverData.mdownPos = null; - r.hoverData.mdownGPos = null; - }, false); - var wheelHandler = function wheelHandler(e) { - if (r.scrollingPage) { - return; - } // while scrolling, ignore wheel-to-zoom - - var cy = r.cy; - var zoom = cy.zoom(); - var pan = cy.pan(); - var pos = r.projectIntoViewport(e.clientX, e.clientY); - var rpos = [pos[0] * zoom + pan.x, pos[1] * zoom + pan.y]; - if (r.hoverData.draggingEles || r.hoverData.dragging || r.hoverData.cxtStarted || inBoxSelection()) { - // if pan dragging or cxt dragging, wheel movements make no zoom - e.preventDefault(); - return; - } - if (cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled()) { - e.preventDefault(); - r.data.wheelZooming = true; - clearTimeout(r.data.wheelTimeout); - r.data.wheelTimeout = setTimeout(function () { - r.data.wheelZooming = false; - r.redrawHint('eles', true); - r.redraw(); - }, 150); - var diff; - if (e.deltaY != null) { - diff = e.deltaY / -250; - } else if (e.wheelDeltaY != null) { - diff = e.wheelDeltaY / 1000; - } else { - diff = e.wheelDelta / 1000; - } - diff = diff * r.wheelSensitivity; - var needsWheelFix = e.deltaMode === 1; - if (needsWheelFix) { - // fixes slow wheel events on ff/linux and ff/windows - diff *= 33; - } - var newZoom = cy.zoom() * Math.pow(10, diff); - if (e.type === 'gesturechange') { - newZoom = r.gestureStartZoom * e.scale; - } - cy.zoom({ - level: newZoom, - renderedPosition: { - x: rpos[0], - y: rpos[1] - } - }); - cy.emit(e.type === 'gesturechange' ? 'pinchzoom' : 'scrollzoom'); - } - }; - - // Functions to help with whether mouse wheel should trigger zooming - // -- - r.registerBinding(r.container, 'wheel', wheelHandler, true); - - // disable nonstandard wheel events - // r.registerBinding(r.container, 'mousewheel', wheelHandler, true); - // r.registerBinding(r.container, 'DOMMouseScroll', wheelHandler, true); - // r.registerBinding(r.container, 'MozMousePixelScroll', wheelHandler, true); // older firefox - - r.registerBinding(containerWindow, 'scroll', function scrollHandler(e) { - // eslint-disable-line no-unused-vars - r.scrollingPage = true; - clearTimeout(r.scrollingPageTimeout); - r.scrollingPageTimeout = setTimeout(function () { - r.scrollingPage = false; - }, 250); - }, true); - - // desktop safari pinch to zoom start - r.registerBinding(r.container, 'gesturestart', function gestureStartHandler(e) { - r.gestureStartZoom = r.cy.zoom(); - if (!r.hasTouchStarted) { - // don't affect touch devices like iphone - e.preventDefault(); - } - }, true); - r.registerBinding(r.container, 'gesturechange', function (e) { - if (!r.hasTouchStarted) { - // don't affect touch devices like iphone - wheelHandler(e); - } - }, true); - - // Functions to help with handling mouseout/mouseover on the Cytoscape container - // Handle mouseout on Cytoscape container - r.registerBinding(r.container, 'mouseout', function mouseOutHandler(e) { - var pos = r.projectIntoViewport(e.clientX, e.clientY); - r.cy.emit({ - originalEvent: e, - type: 'mouseout', - position: { - x: pos[0], - y: pos[1] - } - }); - }, false); - r.registerBinding(r.container, 'mouseover', function mouseOverHandler(e) { - var pos = r.projectIntoViewport(e.clientX, e.clientY); - r.cy.emit({ - originalEvent: e, - type: 'mouseover', - position: { - x: pos[0], - y: pos[1] - } - }); - }, false); - var f1x1, f1y1, f2x1, f2y1; // starting points for pinch-to-zoom - var distance1, distance1Sq; // initial distance between finger 1 and finger 2 for pinch-to-zoom - var center1, modelCenter1; // center point on start pinch to zoom - var offsetLeft, offsetTop; - var containerWidth, containerHeight; - var twoFingersStartInside; - var distance = function distance(x1, y1, x2, y2) { - return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); - }; - var distanceSq = function distanceSq(x1, y1, x2, y2) { - return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); - }; - var touchstartHandler; - r.registerBinding(r.container, 'touchstart', touchstartHandler = function touchstartHandler(e) { - r.hasTouchStarted = true; - if (!eventInContainer(e)) { - return; - } - blurActiveDomElement(); - r.touchData.capture = true; - r.data.bgActivePosistion = undefined; - var cy = r.cy; - var now = r.touchData.now; - var earlier = r.touchData.earlier; - if (e.touches[0]) { - var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); - now[0] = pos[0]; - now[1] = pos[1]; - } - if (e.touches[1]) { - var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); - now[2] = pos[0]; - now[3] = pos[1]; - } - if (e.touches[2]) { - var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); - now[4] = pos[0]; - now[5] = pos[1]; - } - - // record starting points for pinch-to-zoom - if (e.touches[1]) { - r.touchData.singleTouchMoved = true; - freeDraggedElements(r.dragData.touchDragEles); - var offsets = r.findContainerClientCoords(); - offsetLeft = offsets[0]; - offsetTop = offsets[1]; - containerWidth = offsets[2]; - containerHeight = offsets[3]; - f1x1 = e.touches[0].clientX - offsetLeft; - f1y1 = e.touches[0].clientY - offsetTop; - f2x1 = e.touches[1].clientX - offsetLeft; - f2y1 = e.touches[1].clientY - offsetTop; - twoFingersStartInside = 0 <= f1x1 && f1x1 <= containerWidth && 0 <= f2x1 && f2x1 <= containerWidth && 0 <= f1y1 && f1y1 <= containerHeight && 0 <= f2y1 && f2y1 <= containerHeight; - var pan = cy.pan(); - var zoom = cy.zoom(); - distance1 = distance(f1x1, f1y1, f2x1, f2y1); - distance1Sq = distanceSq(f1x1, f1y1, f2x1, f2y1); - center1 = [(f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2]; - modelCenter1 = [(center1[0] - pan.x) / zoom, (center1[1] - pan.y) / zoom]; - - // consider context tap - var cxtDistThreshold = 200; - var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold; - if (distance1Sq < cxtDistThresholdSq && !e.touches[2]) { - var near1 = r.findNearestElement(now[0], now[1], true, true); - var near2 = r.findNearestElement(now[2], now[3], true, true); - if (near1 && near1.isNode()) { - near1.activate().emit({ - originalEvent: e, - type: 'cxttapstart', - position: { - x: now[0], - y: now[1] - } - }); - r.touchData.start = near1; - } else if (near2 && near2.isNode()) { - near2.activate().emit({ - originalEvent: e, - type: 'cxttapstart', - position: { - x: now[0], - y: now[1] - } - }); - r.touchData.start = near2; - } else { - cy.emit({ - originalEvent: e, - type: 'cxttapstart', - position: { - x: now[0], - y: now[1] - } - }); - } - if (r.touchData.start) { - r.touchData.start._private.grabbed = false; - } - r.touchData.cxt = true; - r.touchData.cxtDragged = false; - r.data.bgActivePosistion = undefined; - r.redraw(); - return; - } - } - if (e.touches[2]) { - // ignore - - // safari on ios pans the page otherwise (normally you should be able to preventdefault on touchmove...) - if (cy.boxSelectionEnabled()) { - e.preventDefault(); - } - } else if (e.touches[1]) ; else if (e.touches[0]) { - var nears = r.findNearestElements(now[0], now[1], true, true); - var near = nears[0]; - if (near != null) { - near.activate(); - r.touchData.start = near; - r.touchData.starts = nears; - if (r.nodeIsGrabbable(near)) { - var draggedEles = r.dragData.touchDragEles = cy.collection(); - var selectedNodes = null; - r.redrawHint('eles', true); - r.redrawHint('drag', true); - if (near.selected()) { - // reset drag elements, since near will be added again - - selectedNodes = cy.$(function (ele) { - return ele.selected() && r.nodeIsGrabbable(ele); - }); - addNodesToDrag(selectedNodes, { - addToList: draggedEles - }); - } else { - addNodeToDrag(near, { - addToList: draggedEles - }); - } - setGrabTarget(near); - var makeEvent = function makeEvent(type) { - return { - originalEvent: e, - type: type, - position: { - x: now[0], - y: now[1] - } - }; - }; - near.emit(makeEvent('grabon')); - if (selectedNodes) { - selectedNodes.forEach(function (n) { - n.emit(makeEvent('grab')); - }); - } else { - near.emit(makeEvent('grab')); - } - } - } - triggerEvents(near, ['touchstart', 'tapstart', 'vmousedown'], e, { - x: now[0], - y: now[1] - }); - if (near == null) { - r.data.bgActivePosistion = { - x: pos[0], - y: pos[1] - }; - r.redrawHint('select', true); - r.redraw(); - } - - // Tap, taphold - // ----- - - r.touchData.singleTouchMoved = false; - r.touchData.singleTouchStartTime = +new Date(); - clearTimeout(r.touchData.tapholdTimeout); - r.touchData.tapholdTimeout = setTimeout(function () { - if (r.touchData.singleTouchMoved === false && !r.pinching // if pinching, then taphold unselect shouldn't take effect - && !r.touchData.selecting // box selection shouldn't allow taphold through - ) { - triggerEvents(r.touchData.start, ['taphold'], e, { - x: now[0], - y: now[1] - }); - } - }, r.tapholdDuration); - } - if (e.touches.length >= 1) { - var sPos = r.touchData.startPosition = [null, null, null, null, null, null]; - for (var i = 0; i < now.length; i++) { - sPos[i] = earlier[i] = now[i]; - } - var touch0 = e.touches[0]; - r.touchData.startGPosition = [touch0.clientX, touch0.clientY]; - } - }, false); - var touchmoveHandler; - r.registerBinding(window, 'touchmove', touchmoveHandler = function touchmoveHandler(e) { - // eslint-disable-line no-undef - var capture = r.touchData.capture; - if (!capture && !eventInContainer(e)) { - return; - } - var select = r.selection; - var cy = r.cy; - var now = r.touchData.now; - var earlier = r.touchData.earlier; - var zoom = cy.zoom(); - if (e.touches[0]) { - var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); - now[0] = pos[0]; - now[1] = pos[1]; - } - if (e.touches[1]) { - var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); - now[2] = pos[0]; - now[3] = pos[1]; - } - if (e.touches[2]) { - var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); - now[4] = pos[0]; - now[5] = pos[1]; - } - var startGPos = r.touchData.startGPosition; - var isOverThresholdDrag; - if (capture && e.touches[0] && startGPos) { - var disp = []; - for (var j = 0; j < now.length; j++) { - disp[j] = now[j] - earlier[j]; - } - var dx = e.touches[0].clientX - startGPos[0]; - var dx2 = dx * dx; - var dy = e.touches[0].clientY - startGPos[1]; - var dy2 = dy * dy; - var dist2 = dx2 + dy2; - isOverThresholdDrag = dist2 >= r.touchTapThreshold2; - } - - // context swipe cancelling - if (capture && r.touchData.cxt) { - e.preventDefault(); - var f1x2 = e.touches[0].clientX - offsetLeft, - f1y2 = e.touches[0].clientY - offsetTop; - var f2x2 = e.touches[1].clientX - offsetLeft, - f2y2 = e.touches[1].clientY - offsetTop; - // var distance2 = distance( f1x2, f1y2, f2x2, f2y2 ); - var distance2Sq = distanceSq(f1x2, f1y2, f2x2, f2y2); - var factorSq = distance2Sq / distance1Sq; - var distThreshold = 150; - var distThresholdSq = distThreshold * distThreshold; - var factorThreshold = 1.5; - var factorThresholdSq = factorThreshold * factorThreshold; - - // cancel ctx gestures if the distance b/t the fingers increases - if (factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq) { - r.touchData.cxt = false; - r.data.bgActivePosistion = undefined; - r.redrawHint('select', true); - var cxtEvt = { - originalEvent: e, - type: 'cxttapend', - position: { - x: now[0], - y: now[1] - } - }; - if (r.touchData.start) { - r.touchData.start.unactivate().emit(cxtEvt); - r.touchData.start = null; - } else { - cy.emit(cxtEvt); - } - } - } - - // context swipe - if (capture && r.touchData.cxt) { - var cxtEvt = { - originalEvent: e, - type: 'cxtdrag', - position: { - x: now[0], - y: now[1] - } - }; - r.data.bgActivePosistion = undefined; - r.redrawHint('select', true); - if (r.touchData.start) { - r.touchData.start.emit(cxtEvt); - } else { - cy.emit(cxtEvt); - } - if (r.touchData.start) { - r.touchData.start._private.grabbed = false; - } - r.touchData.cxtDragged = true; - var near = r.findNearestElement(now[0], now[1], true, true); - if (!r.touchData.cxtOver || near !== r.touchData.cxtOver) { - if (r.touchData.cxtOver) { - r.touchData.cxtOver.emit({ - originalEvent: e, - type: 'cxtdragout', - position: { - x: now[0], - y: now[1] - } - }); - } - r.touchData.cxtOver = near; - if (near) { - near.emit({ - originalEvent: e, - type: 'cxtdragover', - position: { - x: now[0], - y: now[1] - } - }); - } - } - - // box selection - } else if (capture && e.touches[2] && cy.boxSelectionEnabled()) { - e.preventDefault(); - r.data.bgActivePosistion = undefined; - this.lastThreeTouch = +new Date(); - if (!r.touchData.selecting) { - cy.emit({ - originalEvent: e, - type: 'boxstart', - position: { - x: now[0], - y: now[1] - } - }); - } - r.touchData.selecting = true; - r.touchData.didSelect = true; - select[4] = 1; - if (!select || select.length === 0 || select[0] === undefined) { - select[0] = (now[0] + now[2] + now[4]) / 3; - select[1] = (now[1] + now[3] + now[5]) / 3; - select[2] = (now[0] + now[2] + now[4]) / 3 + 1; - select[3] = (now[1] + now[3] + now[5]) / 3 + 1; - } else { - select[2] = (now[0] + now[2] + now[4]) / 3; - select[3] = (now[1] + now[3] + now[5]) / 3; - } - r.redrawHint('select', true); - r.redraw(); - - // pinch to zoom - } else if (capture && e.touches[1] && !r.touchData.didSelect // don't allow box selection to degrade to pinch-to-zoom - && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled()) { - // two fingers => pinch to zoom - e.preventDefault(); - r.data.bgActivePosistion = undefined; - r.redrawHint('select', true); - var draggedEles = r.dragData.touchDragEles; - if (draggedEles) { - r.redrawHint('drag', true); - for (var i = 0; i < draggedEles.length; i++) { - var de_p = draggedEles[i]._private; - de_p.grabbed = false; - de_p.rscratch.inDragLayer = false; - } - } - var _start = r.touchData.start; - - // (x2, y2) for fingers 1 and 2 - var f1x2 = e.touches[0].clientX - offsetLeft, - f1y2 = e.touches[0].clientY - offsetTop; - var f2x2 = e.touches[1].clientX - offsetLeft, - f2y2 = e.touches[1].clientY - offsetTop; - var distance2 = distance(f1x2, f1y2, f2x2, f2y2); - // var distance2Sq = distanceSq( f1x2, f1y2, f2x2, f2y2 ); - // var factor = Math.sqrt( distance2Sq ) / Math.sqrt( distance1Sq ); - var factor = distance2 / distance1; - if (twoFingersStartInside) { - // delta finger1 - var df1x = f1x2 - f1x1; - var df1y = f1y2 - f1y1; - - // delta finger 2 - var df2x = f2x2 - f2x1; - var df2y = f2y2 - f2y1; - - // translation is the normalised vector of the two fingers movement - // i.e. so pinching cancels out and moving together pans - var tx = (df1x + df2x) / 2; - var ty = (df1y + df2y) / 2; - - // now calculate the zoom - var zoom1 = cy.zoom(); - var zoom2 = zoom1 * factor; - var pan1 = cy.pan(); - - // the model center point converted to the current rendered pos - var ctrx = modelCenter1[0] * zoom1 + pan1.x; - var ctry = modelCenter1[1] * zoom1 + pan1.y; - var pan2 = { - x: -zoom2 / zoom1 * (ctrx - pan1.x - tx) + ctrx, - y: -zoom2 / zoom1 * (ctry - pan1.y - ty) + ctry - }; - - // remove dragged eles - if (_start && _start.active()) { - var draggedEles = r.dragData.touchDragEles; - freeDraggedElements(draggedEles); - r.redrawHint('drag', true); - r.redrawHint('eles', true); - _start.unactivate().emit('freeon'); - draggedEles.emit('free'); - if (r.dragData.didDrag) { - _start.emit('dragfreeon'); - draggedEles.emit('dragfree'); - } - } - cy.viewport({ - zoom: zoom2, - pan: pan2, - cancelOnFailedZoom: true - }); - cy.emit('pinchzoom'); - distance1 = distance2; - f1x1 = f1x2; - f1y1 = f1y2; - f2x1 = f2x2; - f2y1 = f2y2; - r.pinching = true; - } - - // Re-project - if (e.touches[0]) { - var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); - now[0] = pos[0]; - now[1] = pos[1]; - } - if (e.touches[1]) { - var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); - now[2] = pos[0]; - now[3] = pos[1]; - } - if (e.touches[2]) { - var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); - now[4] = pos[0]; - now[5] = pos[1]; - } - } else if (e.touches[0] && !r.touchData.didSelect // don't allow box selection to degrade to single finger events like panning - ) { - var start = r.touchData.start; - var last = r.touchData.last; - var near; - if (!r.hoverData.draggingEles && !r.swipePanning) { - near = r.findNearestElement(now[0], now[1], true, true); - } - if (capture && start != null) { - e.preventDefault(); - } - - // dragging nodes - if (capture && start != null && r.nodeIsDraggable(start)) { - if (isOverThresholdDrag) { - // then dragging can happen - var draggedEles = r.dragData.touchDragEles; - var justStartedDrag = !r.dragData.didDrag; - if (justStartedDrag) { - addNodesToDrag(draggedEles, { - inDragLayer: true - }); - } - r.dragData.didDrag = true; - var totalShift = { - x: 0, - y: 0 - }; - if (number$1(disp[0]) && number$1(disp[1])) { - totalShift.x += disp[0]; - totalShift.y += disp[1]; - if (justStartedDrag) { - r.redrawHint('eles', true); - var dragDelta = r.touchData.dragDelta; - if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { - totalShift.x += dragDelta[0]; - totalShift.y += dragDelta[1]; - } - } - } - r.hoverData.draggingEles = true; - draggedEles.silentShift(totalShift).emit('position drag'); - r.redrawHint('drag', true); - if (r.touchData.startPosition[0] == earlier[0] && r.touchData.startPosition[1] == earlier[1]) { - r.redrawHint('eles', true); - } - r.redraw(); - } else { - // otherwise keep track of drag delta for later - var dragDelta = r.touchData.dragDelta = r.touchData.dragDelta || []; - if (dragDelta.length === 0) { - dragDelta.push(disp[0]); - dragDelta.push(disp[1]); - } else { - dragDelta[0] += disp[0]; - dragDelta[1] += disp[1]; - } - } - } - - // touchmove - { - triggerEvents(start || near, ['touchmove', 'tapdrag', 'vmousemove'], e, { - x: now[0], - y: now[1] - }); - if ((!start || !start.grabbed()) && near != last) { - if (last) { - last.emit({ - originalEvent: e, - type: 'tapdragout', - position: { - x: now[0], - y: now[1] - } - }); - } - if (near) { - near.emit({ - originalEvent: e, - type: 'tapdragover', - position: { - x: now[0], - y: now[1] - } - }); - } - } - r.touchData.last = near; - } - - // check to cancel taphold - if (capture) { - for (var i = 0; i < now.length; i++) { - if (now[i] && r.touchData.startPosition[i] && isOverThresholdDrag) { - r.touchData.singleTouchMoved = true; - } - } - } - - // panning - if (capture && (start == null || start.pannable()) && cy.panningEnabled() && cy.userPanningEnabled()) { - var allowPassthrough = allowPanningPassthrough(start, r.touchData.starts); - if (allowPassthrough) { - e.preventDefault(); - if (!r.data.bgActivePosistion) { - r.data.bgActivePosistion = array2point(r.touchData.startPosition); - } - if (r.swipePanning) { - cy.panBy({ - x: disp[0] * zoom, - y: disp[1] * zoom - }); - cy.emit('dragpan'); - } else if (isOverThresholdDrag) { - r.swipePanning = true; - cy.panBy({ - x: dx * zoom, - y: dy * zoom - }); - cy.emit('dragpan'); - if (start) { - start.unactivate(); - r.redrawHint('select', true); - r.touchData.start = null; - } - } - } - - // Re-project - var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); - now[0] = pos[0]; - now[1] = pos[1]; - } - } - for (var j = 0; j < now.length; j++) { - earlier[j] = now[j]; - } - - // the active bg indicator should be removed when making a swipe that is neither for dragging nodes or panning - if (capture && e.touches.length > 0 && !r.hoverData.draggingEles && !r.swipePanning && r.data.bgActivePosistion != null) { - r.data.bgActivePosistion = undefined; - r.redrawHint('select', true); - r.redraw(); - } - }, false); - var touchcancelHandler; - r.registerBinding(containerWindow, 'touchcancel', touchcancelHandler = function touchcancelHandler(e) { - // eslint-disable-line no-unused-vars - var start = r.touchData.start; - r.touchData.capture = false; - if (start) { - start.unactivate(); - } - }); - var touchendHandler, didDoubleTouch, touchTimeout, prevTouchTimeStamp; - r.registerBinding(containerWindow, 'touchend', touchendHandler = function touchendHandler(e) { - // eslint-disable-line no-unused-vars - var start = r.touchData.start; - var capture = r.touchData.capture; - if (capture) { - if (e.touches.length === 0) { - r.touchData.capture = false; - } - e.preventDefault(); - } else { - return; - } - var select = r.selection; - r.swipePanning = false; - r.hoverData.draggingEles = false; - var cy = r.cy; - var zoom = cy.zoom(); - var now = r.touchData.now; - var earlier = r.touchData.earlier; - if (e.touches[0]) { - var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); - now[0] = pos[0]; - now[1] = pos[1]; - } - if (e.touches[1]) { - var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); - now[2] = pos[0]; - now[3] = pos[1]; - } - if (e.touches[2]) { - var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); - now[4] = pos[0]; - now[5] = pos[1]; - } - if (start) { - start.unactivate(); - } - var ctxTapend; - if (r.touchData.cxt) { - ctxTapend = { - originalEvent: e, - type: 'cxttapend', - position: { - x: now[0], - y: now[1] - } - }; - if (start) { - start.emit(ctxTapend); - } else { - cy.emit(ctxTapend); - } - if (!r.touchData.cxtDragged) { - var ctxTap = { - originalEvent: e, - type: 'cxttap', - position: { - x: now[0], - y: now[1] - } - }; - if (start) { - start.emit(ctxTap); - } else { - cy.emit(ctxTap); - } - } - if (r.touchData.start) { - r.touchData.start._private.grabbed = false; - } - r.touchData.cxt = false; - r.touchData.start = null; - r.redraw(); - return; - } - - // no more box selection if we don't have three fingers - if (!e.touches[2] && cy.boxSelectionEnabled() && r.touchData.selecting) { - r.touchData.selecting = false; - var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); - select[0] = undefined; - select[1] = undefined; - select[2] = undefined; - select[3] = undefined; - select[4] = 0; - r.redrawHint('select', true); - cy.emit({ - type: 'boxend', - originalEvent: e, - position: { - x: now[0], - y: now[1] - } - }); - var eleWouldBeSelected = function eleWouldBeSelected(ele) { - return ele.selectable() && !ele.selected(); - }; - box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); - if (box.nonempty()) { - r.redrawHint('eles', true); - } - r.redraw(); - } - if (start != null) { - start.unactivate(); - } - if (e.touches[2]) { - r.data.bgActivePosistion = undefined; - r.redrawHint('select', true); - } else if (e.touches[1]) ; else if (e.touches[0]) ; else if (!e.touches[0]) { - r.data.bgActivePosistion = undefined; - r.redrawHint('select', true); - var draggedEles = r.dragData.touchDragEles; - if (start != null) { - var startWasGrabbed = start._private.grabbed; - freeDraggedElements(draggedEles); - r.redrawHint('drag', true); - r.redrawHint('eles', true); - if (startWasGrabbed) { - start.emit('freeon'); - draggedEles.emit('free'); - if (r.dragData.didDrag) { - start.emit('dragfreeon'); - draggedEles.emit('dragfree'); - } - } - triggerEvents(start, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { - x: now[0], - y: now[1] - }); - start.unactivate(); - r.touchData.start = null; - } else { - var near = r.findNearestElement(now[0], now[1], true, true); - triggerEvents(near, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { - x: now[0], - y: now[1] - }); - } - var dx = r.touchData.startPosition[0] - now[0]; - var dx2 = dx * dx; - var dy = r.touchData.startPosition[1] - now[1]; - var dy2 = dy * dy; - var dist2 = dx2 + dy2; - var rdist2 = dist2 * zoom * zoom; - - // Tap event, roughly same as mouse click event for touch - if (!r.touchData.singleTouchMoved) { - if (!start) { - cy.$(':selected').unselect(['tapunselect']); - } - triggerEvents(start, ['tap', 'vclick'], e, { - x: now[0], - y: now[1] - }); - didDoubleTouch = false; - if (e.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) { - touchTimeout && clearTimeout(touchTimeout); - didDoubleTouch = true; - prevTouchTimeStamp = null; - triggerEvents(start, ['dbltap', 'vdblclick'], e, { - x: now[0], - y: now[1] - }); - } else { - touchTimeout = setTimeout(function () { - if (didDoubleTouch) return; - triggerEvents(start, ['onetap', 'voneclick'], e, { - x: now[0], - y: now[1] - }); - }, cy.multiClickDebounceTime()); - prevTouchTimeStamp = e.timeStamp; - } - } - - // Prepare to select the currently touched node, only if it hasn't been dragged past a certain distance - if (start != null && !r.dragData.didDrag // didn't drag nodes around - && start._private.selectable && rdist2 < r.touchTapThreshold2 && !r.pinching // pinch to zoom should not affect selection - ) { - if (cy.selectionType() === 'single') { - cy.$(isSelected).unmerge(start).unselect(['tapunselect']); - start.select(['tapselect']); - } else { - if (start.selected()) { - start.unselect(['tapunselect']); - } else { - start.select(['tapselect']); - } - } - r.redrawHint('eles', true); - } - r.touchData.singleTouchMoved = true; - } - for (var j = 0; j < now.length; j++) { - earlier[j] = now[j]; - } - r.dragData.didDrag = false; // reset for next touchstart - - if (e.touches.length === 0) { - r.touchData.dragDelta = []; - r.touchData.startPosition = [null, null, null, null, null, null]; - r.touchData.startGPosition = null; - r.touchData.didSelect = false; - } - if (e.touches.length < 2) { - if (e.touches.length === 1) { - // the old start global pos'n may not be the same finger that remains - r.touchData.startGPosition = [e.touches[0].clientX, e.touches[0].clientY]; - } - r.pinching = false; - r.redrawHint('eles', true); - r.redraw(); - } - - //r.redraw(); - }, false); - - // fallback compatibility layer for ms pointer events - if (typeof TouchEvent === 'undefined') { - var pointers = []; - var makeTouch = function makeTouch(e) { - return { - clientX: e.clientX, - clientY: e.clientY, - force: 1, - identifier: e.pointerId, - pageX: e.pageX, - pageY: e.pageY, - radiusX: e.width / 2, - radiusY: e.height / 2, - screenX: e.screenX, - screenY: e.screenY, - target: e.target - }; - }; - var makePointer = function makePointer(e) { - return { - event: e, - touch: makeTouch(e) - }; - }; - var addPointer = function addPointer(e) { - pointers.push(makePointer(e)); - }; - var removePointer = function removePointer(e) { - for (var i = 0; i < pointers.length; i++) { - var p = pointers[i]; - if (p.event.pointerId === e.pointerId) { - pointers.splice(i, 1); - return; - } - } - }; - var updatePointer = function updatePointer(e) { - var p = pointers.filter(function (p) { - return p.event.pointerId === e.pointerId; - })[0]; - p.event = e; - p.touch = makeTouch(e); - }; - var addTouchesToEvent = function addTouchesToEvent(e) { - e.touches = pointers.map(function (p) { - return p.touch; - }); - }; - var pointerIsMouse = function pointerIsMouse(e) { - return e.pointerType === 'mouse' || e.pointerType === 4; - }; - r.registerBinding(r.container, 'pointerdown', function (e) { - if (pointerIsMouse(e)) { - return; - } // mouse already handled - - e.preventDefault(); - addPointer(e); - addTouchesToEvent(e); - touchstartHandler(e); - }); - r.registerBinding(r.container, 'pointerup', function (e) { - if (pointerIsMouse(e)) { - return; - } // mouse already handled - - removePointer(e); - addTouchesToEvent(e); - touchendHandler(e); - }); - r.registerBinding(r.container, 'pointercancel', function (e) { - if (pointerIsMouse(e)) { - return; - } // mouse already handled - - removePointer(e); - addTouchesToEvent(e); - touchcancelHandler(e); - }); - r.registerBinding(r.container, 'pointermove', function (e) { - if (pointerIsMouse(e)) { - return; - } // mouse already handled - - e.preventDefault(); - updatePointer(e); - addTouchesToEvent(e); - touchmoveHandler(e); - }); - } -}; - -var BRp$2 = {}; -BRp$2.generatePolygon = function (name, points) { - return this.nodeShapes[name] = { - renderer: this, - name: name, - points: points, - draw: function draw(context, centerX, centerY, width, height) { - this.renderer.nodeShapeImpl('polygon', context, centerX, centerY, width, height, this.points); - }, - intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { - return polygonIntersectLine(x, y, this.points, nodeX, nodeY, width / 2, height / 2, padding); - }, - checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { - return pointInsidePolygon(x, y, this.points, centerX, centerY, width, height, [0, -1], padding); - } - }; -}; -BRp$2.generateEllipse = function () { - return this.nodeShapes['ellipse'] = { - renderer: this, - name: 'ellipse', - draw: function draw(context, centerX, centerY, width, height) { - this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); - }, - intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { - return intersectLineEllipse(x, y, nodeX, nodeY, width / 2 + padding, height / 2 + padding); - }, - checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { - return checkInEllipse(x, y, width, height, centerX, centerY, padding); - } - }; -}; -BRp$2.generateRoundPolygon = function (name, points) { - // Pre-compute control points - // Since these points depend on the radius length (which in turns depend on the width/height of the node) we will only pre-compute - // the unit vectors. - // For simplicity the layout will be: - // [ p0, UnitVectorP0P1, p1, UniVectorP1P2, ..., pn, UnitVectorPnP0 ] - var allPoints = new Array(points.length * 2); - for (var i = 0; i < points.length / 2; i++) { - var sourceIndex = i * 2; - var destIndex = void 0; - if (i < points.length / 2 - 1) { - destIndex = (i + 1) * 2; - } else { - destIndex = 0; - } - allPoints[i * 4] = points[sourceIndex]; - allPoints[i * 4 + 1] = points[sourceIndex + 1]; - var xDest = points[destIndex] - points[sourceIndex]; - var yDest = points[destIndex + 1] - points[sourceIndex + 1]; - var norm = Math.sqrt(xDest * xDest + yDest * yDest); - allPoints[i * 4 + 2] = xDest / norm; - allPoints[i * 4 + 3] = yDest / norm; - } - return this.nodeShapes[name] = { - renderer: this, - name: name, - points: allPoints, - draw: function draw(context, centerX, centerY, width, height) { - this.renderer.nodeShapeImpl('round-polygon', context, centerX, centerY, width, height, this.points); - }, - intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { - return roundPolygonIntersectLine(x, y, this.points, nodeX, nodeY, width, height); - }, - checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { - return pointInsideRoundPolygon(x, y, this.points, centerX, centerY, width, height); - } - }; -}; -BRp$2.generateRoundRectangle = function () { - return this.nodeShapes['round-rectangle'] = this.nodeShapes['roundrectangle'] = { - renderer: this, - name: 'round-rectangle', - points: generateUnitNgonPointsFitToSquare(4, 0), - draw: function draw(context, centerX, centerY, width, height) { - this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); - }, - intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { - return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding); - }, - checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { - var cornerRadius = getRoundRectangleRadius(width, height); - var diam = cornerRadius * 2; - - // Check hBox - if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { - return true; - } - - // Check vBox - if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { - return true; - } - - // Check top left quarter circle - if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY - height / 2 + cornerRadius, padding)) { - return true; - } - - // Check top right quarter circle - if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY - height / 2 + cornerRadius, padding)) { - return true; - } - - // Check bottom right quarter circle - if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { - return true; - } - - // Check bottom left quarter circle - if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { - return true; - } - return false; - } - }; -}; -BRp$2.generateCutRectangle = function () { - return this.nodeShapes['cut-rectangle'] = this.nodeShapes['cutrectangle'] = { - renderer: this, - name: 'cut-rectangle', - cornerLength: getCutRectangleCornerLength(), - points: generateUnitNgonPointsFitToSquare(4, 0), - draw: function draw(context, centerX, centerY, width, height) { - this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); - }, - generateCutTrianglePts: function generateCutTrianglePts(width, height, centerX, centerY) { - var cl = this.cornerLength; - var hh = height / 2; - var hw = width / 2; - var xBegin = centerX - hw; - var xEnd = centerX + hw; - var yBegin = centerY - hh; - var yEnd = centerY + hh; - - // points are in clockwise order, inner (imaginary) triangle pt on [4, 5] - return { - topLeft: [xBegin, yBegin + cl, xBegin + cl, yBegin, xBegin + cl, yBegin + cl], - topRight: [xEnd - cl, yBegin, xEnd, yBegin + cl, xEnd - cl, yBegin + cl], - bottomRight: [xEnd, yEnd - cl, xEnd - cl, yEnd, xEnd - cl, yEnd - cl], - bottomLeft: [xBegin + cl, yEnd, xBegin, yEnd - cl, xBegin + cl, yEnd - cl] - }; - }, - intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { - var cPts = this.generateCutTrianglePts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); - var pts = [].concat.apply([], [cPts.topLeft.splice(0, 4), cPts.topRight.splice(0, 4), cPts.bottomRight.splice(0, 4), cPts.bottomLeft.splice(0, 4)]); - return polygonIntersectLine(x, y, pts, nodeX, nodeY); - }, - checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { - // Check hBox - if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * this.cornerLength, [0, -1], padding)) { - return true; - } - - // Check vBox - if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * this.cornerLength, height, [0, -1], padding)) { - return true; - } - var cutTrianglePts = this.generateCutTrianglePts(width, height, centerX, centerY); - return pointInsidePolygonPoints(x, y, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x, y, cutTrianglePts.topRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomLeft); - } - }; -}; -BRp$2.generateBarrel = function () { - return this.nodeShapes['barrel'] = { - renderer: this, - name: 'barrel', - points: generateUnitNgonPointsFitToSquare(4, 0), - draw: function draw(context, centerX, centerY, width, height) { - this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); - }, - intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { - // use two fixed t values for the bezier curve approximation - - var t0 = 0.15; - var t1 = 0.5; - var t2 = 0.85; - var bPts = this.generateBarrelBezierPts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); - var approximateBarrelCurvePts = function approximateBarrelCurvePts(pts) { - // approximate curve pts based on the two t values - var m0 = qbezierPtAt({ - x: pts[0], - y: pts[1] - }, { - x: pts[2], - y: pts[3] - }, { - x: pts[4], - y: pts[5] - }, t0); - var m1 = qbezierPtAt({ - x: pts[0], - y: pts[1] - }, { - x: pts[2], - y: pts[3] - }, { - x: pts[4], - y: pts[5] - }, t1); - var m2 = qbezierPtAt({ - x: pts[0], - y: pts[1] - }, { - x: pts[2], - y: pts[3] - }, { - x: pts[4], - y: pts[5] - }, t2); - return [pts[0], pts[1], m0.x, m0.y, m1.x, m1.y, m2.x, m2.y, pts[4], pts[5]]; - }; - var pts = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft)); - return polygonIntersectLine(x, y, pts, nodeX, nodeY); - }, - generateBarrelBezierPts: function generateBarrelBezierPts(width, height, centerX, centerY) { - var hh = height / 2; - var hw = width / 2; - var xBegin = centerX - hw; - var xEnd = centerX + hw; - var yBegin = centerY - hh; - var yEnd = centerY + hh; - var curveConstants = getBarrelCurveConstants(width, height); - var hOffset = curveConstants.heightOffset; - var wOffset = curveConstants.widthOffset; - var ctrlPtXOffset = curveConstants.ctrlPtOffsetPct * width; - - // points are in clockwise order, inner (imaginary) control pt on [4, 5] - var pts = { - topLeft: [xBegin, yBegin + hOffset, xBegin + ctrlPtXOffset, yBegin, xBegin + wOffset, yBegin], - topRight: [xEnd - wOffset, yBegin, xEnd - ctrlPtXOffset, yBegin, xEnd, yBegin + hOffset], - bottomRight: [xEnd, yEnd - hOffset, xEnd - ctrlPtXOffset, yEnd, xEnd - wOffset, yEnd], - bottomLeft: [xBegin + wOffset, yEnd, xBegin + ctrlPtXOffset, yEnd, xBegin, yEnd - hOffset] - }; - pts.topLeft.isTop = true; - pts.topRight.isTop = true; - pts.bottomLeft.isBottom = true; - pts.bottomRight.isBottom = true; - return pts; - }, - checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { - var curveConstants = getBarrelCurveConstants(width, height); - var hOffset = curveConstants.heightOffset; - var wOffset = curveConstants.widthOffset; - - // Check hBox - if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * hOffset, [0, -1], padding)) { - return true; - } - - // Check vBox - if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * wOffset, height, [0, -1], padding)) { - return true; - } - var barrelCurvePts = this.generateBarrelBezierPts(width, height, centerX, centerY); - var getCurveT = function getCurveT(x, y, curvePts) { - var x0 = curvePts[4]; - var x1 = curvePts[2]; - var x2 = curvePts[0]; - var y0 = curvePts[5]; - // var y1 = curvePts[ 3 ]; - var y2 = curvePts[1]; - var xMin = Math.min(x0, x2); - var xMax = Math.max(x0, x2); - var yMin = Math.min(y0, y2); - var yMax = Math.max(y0, y2); - if (xMin <= x && x <= xMax && yMin <= y && y <= yMax) { - var coeff = bezierPtsToQuadCoeff(x0, x1, x2); - var roots = solveQuadratic(coeff[0], coeff[1], coeff[2], x); - var validRoots = roots.filter(function (r) { - return 0 <= r && r <= 1; - }); - if (validRoots.length > 0) { - return validRoots[0]; - } - } - return null; - }; - var curveRegions = Object.keys(barrelCurvePts); - for (var i = 0; i < curveRegions.length; i++) { - var corner = curveRegions[i]; - var cornerPts = barrelCurvePts[corner]; - var t = getCurveT(x, y, cornerPts); - if (t == null) { - continue; - } - var y0 = cornerPts[5]; - var y1 = cornerPts[3]; - var y2 = cornerPts[1]; - var bezY = qbezierAt(y0, y1, y2, t); - if (cornerPts.isTop && bezY <= y) { - return true; - } - if (cornerPts.isBottom && y <= bezY) { - return true; - } - } - return false; - } - }; -}; -BRp$2.generateBottomRoundrectangle = function () { - return this.nodeShapes['bottom-round-rectangle'] = this.nodeShapes['bottomroundrectangle'] = { - renderer: this, - name: 'bottom-round-rectangle', - points: generateUnitNgonPointsFitToSquare(4, 0), - draw: function draw(context, centerX, centerY, width, height) { - this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); - }, - intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { - var topStartX = nodeX - (width / 2 + padding); - var topStartY = nodeY - (height / 2 + padding); - var topEndY = topStartY; - var topEndX = nodeX + (width / 2 + padding); - var topIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); - if (topIntersections.length > 0) { - return topIntersections; - } - return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding); - }, - checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { - var cornerRadius = getRoundRectangleRadius(width, height); - var diam = 2 * cornerRadius; - - // Check hBox - if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { - return true; - } - - // Check vBox - if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { - return true; - } - - // check non-rounded top side - var outerWidth = width / 2 + 2 * padding; - var outerHeight = height / 2 + 2 * padding; - var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight]; - if (pointInsidePolygonPoints(x, y, points)) { - return true; - } - - // Check bottom right quarter circle - if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { - return true; - } - - // Check bottom left quarter circle - if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { - return true; - } - return false; - } - }; -}; -BRp$2.registerNodeShapes = function () { - var nodeShapes = this.nodeShapes = {}; - var renderer = this; - this.generateEllipse(); - this.generatePolygon('triangle', generateUnitNgonPointsFitToSquare(3, 0)); - this.generateRoundPolygon('round-triangle', generateUnitNgonPointsFitToSquare(3, 0)); - this.generatePolygon('rectangle', generateUnitNgonPointsFitToSquare(4, 0)); - nodeShapes['square'] = nodeShapes['rectangle']; - this.generateRoundRectangle(); - this.generateCutRectangle(); - this.generateBarrel(); - this.generateBottomRoundrectangle(); - { - var diamondPoints = [0, 1, 1, 0, 0, -1, -1, 0]; - this.generatePolygon('diamond', diamondPoints); - this.generateRoundPolygon('round-diamond', diamondPoints); - } - this.generatePolygon('pentagon', generateUnitNgonPointsFitToSquare(5, 0)); - this.generateRoundPolygon('round-pentagon', generateUnitNgonPointsFitToSquare(5, 0)); - this.generatePolygon('hexagon', generateUnitNgonPointsFitToSquare(6, 0)); - this.generateRoundPolygon('round-hexagon', generateUnitNgonPointsFitToSquare(6, 0)); - this.generatePolygon('heptagon', generateUnitNgonPointsFitToSquare(7, 0)); - this.generateRoundPolygon('round-heptagon', generateUnitNgonPointsFitToSquare(7, 0)); - this.generatePolygon('octagon', generateUnitNgonPointsFitToSquare(8, 0)); - this.generateRoundPolygon('round-octagon', generateUnitNgonPointsFitToSquare(8, 0)); - var star5Points = new Array(20); - { - var outerPoints = generateUnitNgonPoints(5, 0); - var innerPoints = generateUnitNgonPoints(5, Math.PI / 5); - - // Outer radius is 1; inner radius of star is smaller - var innerRadius = 0.5 * (3 - Math.sqrt(5)); - innerRadius *= 1.57; - for (var i = 0; i < innerPoints.length / 2; i++) { - innerPoints[i * 2] *= innerRadius; - innerPoints[i * 2 + 1] *= innerRadius; - } - for (var i = 0; i < 20 / 4; i++) { - star5Points[i * 4] = outerPoints[i * 2]; - star5Points[i * 4 + 1] = outerPoints[i * 2 + 1]; - star5Points[i * 4 + 2] = innerPoints[i * 2]; - star5Points[i * 4 + 3] = innerPoints[i * 2 + 1]; - } - } - star5Points = fitPolygonToSquare(star5Points); - this.generatePolygon('star', star5Points); - this.generatePolygon('vee', [-1, -1, 0, -0.333, 1, -1, 0, 1]); - this.generatePolygon('rhomboid', [-1, -1, 0.333, -1, 1, 1, -0.333, 1]); - this.generatePolygon('right-rhomboid', [-0.333, -1, 1, -1, 0.333, 1, -1, 1]); - this.nodeShapes['concavehexagon'] = this.generatePolygon('concave-hexagon', [-1, -0.95, -0.75, 0, -1, 0.95, 1, 0.95, 0.75, 0, 1, -0.95]); - { - var tagPoints = [-1, -1, 0.25, -1, 1, 0, 0.25, 1, -1, 1]; - this.generatePolygon('tag', tagPoints); - this.generateRoundPolygon('round-tag', tagPoints); - } - nodeShapes.makePolygon = function (points) { - // use caching on user-specified polygons so they are as fast as native shapes - - var key = points.join('$'); - var name = 'polygon-' + key; - var shape; - if (shape = this[name]) { - // got cached shape - return shape; - } - - // create and cache new shape - return renderer.generatePolygon(name, points); - }; -}; - -var BRp$1 = {}; -BRp$1.timeToRender = function () { - return this.redrawTotalTime / this.redrawCount; -}; -BRp$1.redraw = function (options) { - options = options || staticEmptyObject(); - var r = this; - if (r.averageRedrawTime === undefined) { - r.averageRedrawTime = 0; - } - if (r.lastRedrawTime === undefined) { - r.lastRedrawTime = 0; - } - if (r.lastDrawTime === undefined) { - r.lastDrawTime = 0; - } - r.requestedFrame = true; - r.renderOptions = options; -}; -BRp$1.beforeRender = function (fn, priority) { - // the renderer can't add tick callbacks when destroyed - if (this.destroyed) { - return; - } - if (priority == null) { - error('Priority is not optional for beforeRender'); - } - var cbs = this.beforeRenderCallbacks; - cbs.push({ - fn: fn, - priority: priority - }); - - // higher priority callbacks executed first - cbs.sort(function (a, b) { - return b.priority - a.priority; - }); -}; -var beforeRenderCallbacks = function beforeRenderCallbacks(r, willDraw, startTime) { - var cbs = r.beforeRenderCallbacks; - for (var i = 0; i < cbs.length; i++) { - cbs[i].fn(willDraw, startTime); - } -}; -BRp$1.startRenderLoop = function () { - var r = this; - var cy = r.cy; - if (r.renderLoopStarted) { - return; - } else { - r.renderLoopStarted = true; - } - var renderFn = function renderFn(requestTime) { - if (r.destroyed) { - return; - } - if (cy.batching()) ; else if (r.requestedFrame && !r.skipFrame) { - beforeRenderCallbacks(r, true, requestTime); - var startTime = performanceNow(); - r.render(r.renderOptions); - var endTime = r.lastDrawTime = performanceNow(); - if (r.averageRedrawTime === undefined) { - r.averageRedrawTime = endTime - startTime; - } - if (r.redrawCount === undefined) { - r.redrawCount = 0; - } - r.redrawCount++; - if (r.redrawTotalTime === undefined) { - r.redrawTotalTime = 0; - } - var duration = endTime - startTime; - r.redrawTotalTime += duration; - r.lastRedrawTime = duration; - - // use a weighted average with a bias from the previous average so we don't spike so easily - r.averageRedrawTime = r.averageRedrawTime / 2 + duration / 2; - r.requestedFrame = false; - } else { - beforeRenderCallbacks(r, false, requestTime); - } - r.skipFrame = false; - requestAnimationFrame(renderFn); - }; - requestAnimationFrame(renderFn); -}; - -var BaseRenderer = function BaseRenderer(options) { - this.init(options); -}; -var BR = BaseRenderer; -var BRp = BR.prototype; -BRp.clientFunctions = ['redrawHint', 'render', 'renderTo', 'matchCanvasSize', 'nodeShapeImpl', 'arrowShapeImpl']; -BRp.init = function (options) { - var r = this; - r.options = options; - r.cy = options.cy; - var ctr = r.container = options.cy.container(); - var containerWindow = r.cy.window(); - - // prepend a stylesheet in the head such that - if (containerWindow) { - var document = containerWindow.document; - var head = document.head; - var stylesheetId = '__________cytoscape_stylesheet'; - var className = '__________cytoscape_container'; - var stylesheetAlreadyExists = document.getElementById(stylesheetId) != null; - if (ctr.className.indexOf(className) < 0) { - ctr.className = (ctr.className || '') + ' ' + className; - } - if (!stylesheetAlreadyExists) { - var stylesheet = document.createElement('style'); - stylesheet.id = stylesheetId; - stylesheet.textContent = '.' + className + ' { position: relative; }'; - head.insertBefore(stylesheet, head.children[0]); // first so lowest priority - } - - var computedStyle = containerWindow.getComputedStyle(ctr); - var position = computedStyle.getPropertyValue('position'); - if (position === 'static') { - warn('A Cytoscape container has style position:static and so can not use UI extensions properly'); - } - } - r.selection = [undefined, undefined, undefined, undefined, 0]; // Coordinates for selection box, plus enabled flag - - r.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95]; - - //--Pointer-related data - r.hoverData = { - down: null, - last: null, - downTime: null, - triggerMode: null, - dragging: false, - initialPan: [null, null], - capture: false - }; - r.dragData = { - possibleDragElements: [] - }; - r.touchData = { - start: null, - capture: false, - // These 3 fields related to tap, taphold events - startPosition: [null, null, null, null, null, null], - singleTouchStartTime: null, - singleTouchMoved: true, - now: [null, null, null, null, null, null], - earlier: [null, null, null, null, null, null] - }; - r.redraws = 0; - r.showFps = options.showFps; - r.debug = options.debug; - r.hideEdgesOnViewport = options.hideEdgesOnViewport; - r.textureOnViewport = options.textureOnViewport; - r.wheelSensitivity = options.wheelSensitivity; - r.motionBlurEnabled = options.motionBlur; // on by default - r.forcedPixelRatio = number$1(options.pixelRatio) ? options.pixelRatio : null; - r.motionBlur = options.motionBlur; // for initial kick off - r.motionBlurOpacity = options.motionBlurOpacity; - r.motionBlurTransparency = 1 - r.motionBlurOpacity; - r.motionBlurPxRatio = 1; - r.mbPxRBlurry = 1; //0.8; - r.minMbLowQualFrames = 4; - r.fullQualityMb = false; - r.clearedForMotionBlur = []; - r.desktopTapThreshold = options.desktopTapThreshold; - r.desktopTapThreshold2 = options.desktopTapThreshold * options.desktopTapThreshold; - r.touchTapThreshold = options.touchTapThreshold; - r.touchTapThreshold2 = options.touchTapThreshold * options.touchTapThreshold; - r.tapholdDuration = 500; - r.bindings = []; - r.beforeRenderCallbacks = []; - r.beforeRenderPriorities = { - // higher priority execs before lower one - animations: 400, - eleCalcs: 300, - eleTxrDeq: 200, - lyrTxrDeq: 150, - lyrTxrSkip: 100 - }; - r.registerNodeShapes(); - r.registerArrowShapes(); - r.registerCalculationListeners(); -}; -BRp.notify = function (eventName, eles) { - var r = this; - var cy = r.cy; - - // the renderer can't be notified after it's destroyed - if (this.destroyed) { - return; - } - if (eventName === 'init') { - r.load(); - return; - } - if (eventName === 'destroy') { - r.destroy(); - return; - } - if (eventName === 'add' || eventName === 'remove' || eventName === 'move' && cy.hasCompoundNodes() || eventName === 'load' || eventName === 'zorder' || eventName === 'mount') { - r.invalidateCachedZSortedEles(); - } - if (eventName === 'viewport') { - r.redrawHint('select', true); - } - if (eventName === 'load' || eventName === 'resize' || eventName === 'mount') { - r.invalidateContainerClientCoordsCache(); - r.matchCanvasSize(r.container); - } - r.redrawHint('eles', true); - r.redrawHint('drag', true); - this.startRenderLoop(); - this.redraw(); -}; -BRp.destroy = function () { - var r = this; - r.destroyed = true; - r.cy.stopAnimationLoop(); - for (var i = 0; i < r.bindings.length; i++) { - var binding = r.bindings[i]; - var b = binding; - var tgt = b.target; - (tgt.off || tgt.removeEventListener).apply(tgt, b.args); - } - r.bindings = []; - r.beforeRenderCallbacks = []; - r.onUpdateEleCalcsFns = []; - if (r.removeObserver) { - r.removeObserver.disconnect(); - } - if (r.styleObserver) { - r.styleObserver.disconnect(); - } - if (r.resizeObserver) { - r.resizeObserver.disconnect(); - } - if (r.labelCalcDiv) { - try { - document.body.removeChild(r.labelCalcDiv); // eslint-disable-line no-undef - } catch (e) { - // ie10 issue #1014 - } - } -}; -BRp.isHeadless = function () { - return false; -}; -[BRp$f, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1].forEach(function (props) { - extend(BRp, props); -}); - -var fullFpsTime = 1000 / 60; // assume 60 frames per second - -var defs = { - setupDequeueing: function setupDequeueing(opts) { - return function setupDequeueingImpl() { - var self = this; - var r = this.renderer; - if (self.dequeueingSetup) { - return; - } else { - self.dequeueingSetup = true; - } - var queueRedraw = debounce__default["default"](function () { - r.redrawHint('eles', true); - r.redrawHint('drag', true); - r.redraw(); - }, opts.deqRedrawThreshold); - var dequeue = function dequeue(willDraw, frameStartTime) { - var startTime = performanceNow(); - var avgRenderTime = r.averageRedrawTime; - var renderTime = r.lastRedrawTime; - var deqd = []; - var extent = r.cy.extent(); - var pixelRatio = r.getPixelRatio(); - - // if we aren't in a tick that causes a draw, then the rendered style - // queue won't automatically be flushed before dequeueing starts - if (!willDraw) { - r.flushRenderedStyleQueue(); - } - while (true) { - // eslint-disable-line no-constant-condition - var now = performanceNow(); - var duration = now - startTime; - var frameDuration = now - frameStartTime; - if (renderTime < fullFpsTime) { - // if we're rendering faster than the ideal fps, then do dequeueing - // during all of the remaining frame time - - var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0); - if (frameDuration >= opts.deqFastCost * timeAvailable) { - break; - } - } else { - if (willDraw) { - if (duration >= opts.deqCost * renderTime || duration >= opts.deqAvgCost * avgRenderTime) { - break; - } - } else if (frameDuration >= opts.deqNoDrawCost * fullFpsTime) { - break; - } - } - var thisDeqd = opts.deq(self, pixelRatio, extent); - if (thisDeqd.length > 0) { - for (var i = 0; i < thisDeqd.length; i++) { - deqd.push(thisDeqd[i]); - } - } else { - break; - } - } - - // callbacks on dequeue - if (deqd.length > 0) { - opts.onDeqd(self, deqd); - if (!willDraw && opts.shouldRedraw(self, deqd, pixelRatio, extent)) { - queueRedraw(); - } - } - }; - var priority = opts.priority || noop$1; - r.beforeRender(dequeue, priority(self)); - }; - } -}; - -// Allows lookups for (ele, lvl) => cache. -// Uses keys so elements may share the same cache. -var ElementTextureCacheLookup = /*#__PURE__*/function () { - function ElementTextureCacheLookup(getKey) { - var doesEleInvalidateKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : falsify; - _classCallCheck(this, ElementTextureCacheLookup); - this.idsByKey = new Map$1(); - this.keyForId = new Map$1(); - this.cachesByLvl = new Map$1(); - this.lvls = []; - this.getKey = getKey; - this.doesEleInvalidateKey = doesEleInvalidateKey; - } - _createClass(ElementTextureCacheLookup, [{ - key: "getIdsFor", - value: function getIdsFor(key) { - if (key == null) { - error("Can not get id list for null key"); - } - var idsByKey = this.idsByKey; - var ids = this.idsByKey.get(key); - if (!ids) { - ids = new Set$1(); - idsByKey.set(key, ids); - } - return ids; - } - }, { - key: "addIdForKey", - value: function addIdForKey(key, id) { - if (key != null) { - this.getIdsFor(key).add(id); - } - } - }, { - key: "deleteIdForKey", - value: function deleteIdForKey(key, id) { - if (key != null) { - this.getIdsFor(key)["delete"](id); - } - } - }, { - key: "getNumberOfIdsForKey", - value: function getNumberOfIdsForKey(key) { - if (key == null) { - return 0; - } else { - return this.getIdsFor(key).size; - } - } - }, { - key: "updateKeyMappingFor", - value: function updateKeyMappingFor(ele) { - var id = ele.id(); - var prevKey = this.keyForId.get(id); - var currKey = this.getKey(ele); - this.deleteIdForKey(prevKey, id); - this.addIdForKey(currKey, id); - this.keyForId.set(id, currKey); - } - }, { - key: "deleteKeyMappingFor", - value: function deleteKeyMappingFor(ele) { - var id = ele.id(); - var prevKey = this.keyForId.get(id); - this.deleteIdForKey(prevKey, id); - this.keyForId["delete"](id); - } - }, { - key: "keyHasChangedFor", - value: function keyHasChangedFor(ele) { - var id = ele.id(); - var prevKey = this.keyForId.get(id); - var newKey = this.getKey(ele); - return prevKey !== newKey; - } - }, { - key: "isInvalid", - value: function isInvalid(ele) { - return this.keyHasChangedFor(ele) || this.doesEleInvalidateKey(ele); - } - }, { - key: "getCachesAt", - value: function getCachesAt(lvl) { - var cachesByLvl = this.cachesByLvl, - lvls = this.lvls; - var caches = cachesByLvl.get(lvl); - if (!caches) { - caches = new Map$1(); - cachesByLvl.set(lvl, caches); - lvls.push(lvl); - } - return caches; - } - }, { - key: "getCache", - value: function getCache(key, lvl) { - return this.getCachesAt(lvl).get(key); - } - }, { - key: "get", - value: function get(ele, lvl) { - var key = this.getKey(ele); - var cache = this.getCache(key, lvl); - - // getting for an element may need to add to the id list b/c eles can share keys - if (cache != null) { - this.updateKeyMappingFor(ele); - } - return cache; - } - }, { - key: "getForCachedKey", - value: function getForCachedKey(ele, lvl) { - var key = this.keyForId.get(ele.id()); // n.b. use cached key, not newly computed key - var cache = this.getCache(key, lvl); - return cache; - } - }, { - key: "hasCache", - value: function hasCache(key, lvl) { - return this.getCachesAt(lvl).has(key); - } - }, { - key: "has", - value: function has(ele, lvl) { - var key = this.getKey(ele); - return this.hasCache(key, lvl); - } - }, { - key: "setCache", - value: function setCache(key, lvl, cache) { - cache.key = key; - this.getCachesAt(lvl).set(key, cache); - } - }, { - key: "set", - value: function set(ele, lvl, cache) { - var key = this.getKey(ele); - this.setCache(key, lvl, cache); - this.updateKeyMappingFor(ele); - } - }, { - key: "deleteCache", - value: function deleteCache(key, lvl) { - this.getCachesAt(lvl)["delete"](key); - } - }, { - key: "delete", - value: function _delete(ele, lvl) { - var key = this.getKey(ele); - this.deleteCache(key, lvl); - } - }, { - key: "invalidateKey", - value: function invalidateKey(key) { - var _this = this; - this.lvls.forEach(function (lvl) { - return _this.deleteCache(key, lvl); - }); - } - - // returns true if no other eles reference the invalidated cache (n.b. other eles may need the cache with the same key) - }, { - key: "invalidate", - value: function invalidate(ele) { - var id = ele.id(); - var key = this.keyForId.get(id); // n.b. use stored key rather than current (potential key) - - this.deleteKeyMappingFor(ele); - var entireKeyInvalidated = this.doesEleInvalidateKey(ele); - if (entireKeyInvalidated) { - // clear mapping for current key - this.invalidateKey(key); - } - return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0; - } - }]); - return ElementTextureCacheLookup; -}(); - -var minTxrH = 25; // the size of the texture cache for small height eles (special case) -var txrStepH = 50; // the min size of the regular cache, and the size it increases with each step up -var minLvl$1 = -4; // when scaling smaller than that we don't need to re-render -var maxLvl$1 = 3; // when larger than this scale just render directly (caching is not helpful) -var maxZoom$1 = 7.99; // beyond this zoom level, layered textures are not used -var eleTxrSpacing = 8; // spacing between elements on textures to avoid blitting overlaps -var defTxrWidth = 1024; // default/minimum texture width -var maxTxrW = 1024; // the maximum width of a texture -var maxTxrH = 1024; // the maximum height of a texture -var minUtility = 0.2; // if usage of texture is less than this, it is retired -var maxFullness = 0.8; // fullness of texture after which queue removal is checked -var maxFullnessChecks = 10; // dequeued after this many checks -var deqCost$1 = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame -var deqAvgCost$1 = 0.1; // % of add'l rendering cost compared to average overall redraw time -var deqNoDrawCost$1 = 0.9; // % of avg frame time that can be used for dequeueing when not drawing -var deqFastCost$1 = 0.9; // % of frame time to be used when >60fps -var deqRedrawThreshold$1 = 100; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile -var maxDeqSize$1 = 1; // number of eles to dequeue and render at higher texture in each batch - -var getTxrReasons = { - dequeue: 'dequeue', - downscale: 'downscale', - highQuality: 'highQuality' -}; -var initDefaults = defaults$g({ - getKey: null, - doesEleInvalidateKey: falsify, - drawElement: null, - getBoundingBox: null, - getRotationPoint: null, - getRotationOffset: null, - isVisible: trueify, - allowEdgeTxrCaching: true, - allowParentTxrCaching: true -}); -var ElementTextureCache = function ElementTextureCache(renderer, initOptions) { - var self = this; - self.renderer = renderer; - self.onDequeues = []; - var opts = initDefaults(initOptions); - extend(self, opts); - self.lookup = new ElementTextureCacheLookup(opts.getKey, opts.doesEleInvalidateKey); - self.setupDequeueing(); -}; -var ETCp = ElementTextureCache.prototype; -ETCp.reasons = getTxrReasons; - -// the list of textures in which new subtextures for elements can be placed -ETCp.getTextureQueue = function (txrH) { - var self = this; - self.eleImgCaches = self.eleImgCaches || {}; - return self.eleImgCaches[txrH] = self.eleImgCaches[txrH] || []; -}; - -// the list of usused textures which can be recycled (in use in texture queue) -ETCp.getRetiredTextureQueue = function (txrH) { - var self = this; - var rtxtrQs = self.eleImgCaches.retired = self.eleImgCaches.retired || {}; - var rtxtrQ = rtxtrQs[txrH] = rtxtrQs[txrH] || []; - return rtxtrQ; -}; - -// queue of element draw requests at different scale levels -ETCp.getElementQueue = function () { - var self = this; - var q = self.eleCacheQueue = self.eleCacheQueue || new Heap__default["default"](function (a, b) { - return b.reqs - a.reqs; - }); - return q; -}; - -// queue of element draw requests at different scale levels (element id lookup) -ETCp.getElementKeyToQueue = function () { - var self = this; - var k2q = self.eleKeyToCacheQueue = self.eleKeyToCacheQueue || {}; - return k2q; -}; -ETCp.getElement = function (ele, bb, pxRatio, lvl, reason) { - var self = this; - var r = this.renderer; - var zoom = r.cy.zoom(); - var lookup = this.lookup; - if (!bb || bb.w === 0 || bb.h === 0 || isNaN(bb.w) || isNaN(bb.h) || !ele.visible() || ele.removed()) { - return null; - } - if (!self.allowEdgeTxrCaching && ele.isEdge() || !self.allowParentTxrCaching && ele.isParent()) { - return null; - } - if (lvl == null) { - lvl = Math.ceil(log2(zoom * pxRatio)); - } - if (lvl < minLvl$1) { - lvl = minLvl$1; - } else if (zoom >= maxZoom$1 || lvl > maxLvl$1) { - return null; - } - var scale = Math.pow(2, lvl); - var eleScaledH = bb.h * scale; - var eleScaledW = bb.w * scale; - var scaledLabelShown = r.eleTextBiggerThanMin(ele, scale); - if (!this.isVisible(ele, scaledLabelShown)) { - return null; - } - var eleCache = lookup.get(ele, lvl); - - // if this get was on an unused/invalidated cache, then restore the texture usage metric - if (eleCache && eleCache.invalidated) { - eleCache.invalidated = false; - eleCache.texture.invalidatedWidth -= eleCache.width; - } - if (eleCache) { - return eleCache; - } - var txrH; // which texture height this ele belongs to - - if (eleScaledH <= minTxrH) { - txrH = minTxrH; - } else if (eleScaledH <= txrStepH) { - txrH = txrStepH; - } else { - txrH = Math.ceil(eleScaledH / txrStepH) * txrStepH; - } - if (eleScaledH > maxTxrH || eleScaledW > maxTxrW) { - return null; // caching large elements is not efficient - } - - var txrQ = self.getTextureQueue(txrH); - - // first try the second last one in case it has space at the end - var txr = txrQ[txrQ.length - 2]; - var addNewTxr = function addNewTxr() { - return self.recycleTexture(txrH, eleScaledW) || self.addTexture(txrH, eleScaledW); - }; - - // try the last one if there is no second last one - if (!txr) { - txr = txrQ[txrQ.length - 1]; - } - - // if the last one doesn't exist, we need a first one - if (!txr) { - txr = addNewTxr(); - } - - // if there's no room in the current texture, we need a new one - if (txr.width - txr.usedWidth < eleScaledW) { - txr = addNewTxr(); - } - var scalableFrom = function scalableFrom(otherCache) { - return otherCache && otherCache.scaledLabelShown === scaledLabelShown; - }; - var deqing = reason && reason === getTxrReasons.dequeue; - var highQualityReq = reason && reason === getTxrReasons.highQuality; - var downscaleReq = reason && reason === getTxrReasons.downscale; - var higherCache; // the nearest cache with a higher level - for (var l = lvl + 1; l <= maxLvl$1; l++) { - var c = lookup.get(ele, l); - if (c) { - higherCache = c; - break; - } - } - var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null; - var downscale = function downscale() { - txr.context.drawImage(oneUpCache.texture.canvas, oneUpCache.x, 0, oneUpCache.width, oneUpCache.height, txr.usedWidth, 0, eleScaledW, eleScaledH); - }; - - // reset ele area in texture - txr.context.setTransform(1, 0, 0, 1, 0, 0); - txr.context.clearRect(txr.usedWidth, 0, eleScaledW, txrH); - if (scalableFrom(oneUpCache)) { - // then we can relatively cheaply rescale the existing image w/o rerendering - downscale(); - } else if (scalableFrom(higherCache)) { - // then use the higher cache for now and queue the next level down - // to cheaply scale towards the smaller level - - if (highQualityReq) { - for (var _l = higherCache.level; _l > lvl; _l--) { - oneUpCache = self.getElement(ele, bb, pxRatio, _l, getTxrReasons.downscale); - } - downscale(); - } else { - self.queueElement(ele, higherCache.level - 1); - return higherCache; - } - } else { - var lowerCache; // the nearest cache with a lower level - if (!deqing && !highQualityReq && !downscaleReq) { - for (var _l2 = lvl - 1; _l2 >= minLvl$1; _l2--) { - var _c = lookup.get(ele, _l2); - if (_c) { - lowerCache = _c; - break; - } - } - } - if (scalableFrom(lowerCache)) { - // then use the lower quality cache for now and queue the better one for later - - self.queueElement(ele, lvl); - return lowerCache; - } - txr.context.translate(txr.usedWidth, 0); - txr.context.scale(scale, scale); - this.drawElement(txr.context, ele, bb, scaledLabelShown, false); - txr.context.scale(1 / scale, 1 / scale); - txr.context.translate(-txr.usedWidth, 0); - } - eleCache = { - x: txr.usedWidth, - texture: txr, - level: lvl, - scale: scale, - width: eleScaledW, - height: eleScaledH, - scaledLabelShown: scaledLabelShown - }; - txr.usedWidth += Math.ceil(eleScaledW + eleTxrSpacing); - txr.eleCaches.push(eleCache); - lookup.set(ele, lvl, eleCache); - self.checkTextureFullness(txr); - return eleCache; -}; -ETCp.invalidateElements = function (eles) { - for (var i = 0; i < eles.length; i++) { - this.invalidateElement(eles[i]); - } -}; -ETCp.invalidateElement = function (ele) { - var self = this; - var lookup = self.lookup; - var caches = []; - var invalid = lookup.isInvalid(ele); - if (!invalid) { - return; // override the invalidation request if the element key has not changed - } - - for (var lvl = minLvl$1; lvl <= maxLvl$1; lvl++) { - var cache = lookup.getForCachedKey(ele, lvl); - if (cache) { - caches.push(cache); - } - } - var noOtherElesUseCache = lookup.invalidate(ele); - if (noOtherElesUseCache) { - for (var i = 0; i < caches.length; i++) { - var _cache = caches[i]; - var txr = _cache.texture; - - // remove space from the texture it belongs to - txr.invalidatedWidth += _cache.width; - - // mark the cache as invalidated - _cache.invalidated = true; - - // retire the texture if its utility is low - self.checkTextureUtility(txr); - } - } - - // remove from queue since the old req was for the old state - self.removeFromQueue(ele); -}; -ETCp.checkTextureUtility = function (txr) { - // invalidate all entries in the cache if the cache size is small - if (txr.invalidatedWidth >= minUtility * txr.width) { - this.retireTexture(txr); - } -}; -ETCp.checkTextureFullness = function (txr) { - // if texture has been mostly filled and passed over several times, remove - // it from the queue so we don't need to waste time looking at it to put new things - - var self = this; - var txrQ = self.getTextureQueue(txr.height); - if (txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks) { - removeFromArray(txrQ, txr); - } else { - txr.fullnessChecks++; - } -}; -ETCp.retireTexture = function (txr) { - var self = this; - var txrH = txr.height; - var txrQ = self.getTextureQueue(txrH); - var lookup = this.lookup; - - // retire the texture from the active / searchable queue: - - removeFromArray(txrQ, txr); - txr.retired = true; - - // remove the refs from the eles to the caches: - - var eleCaches = txr.eleCaches; - for (var i = 0; i < eleCaches.length; i++) { - var eleCache = eleCaches[i]; - lookup.deleteCache(eleCache.key, eleCache.level); - } - clearArray(eleCaches); - - // add the texture to a retired queue so it can be recycled in future: - - var rtxtrQ = self.getRetiredTextureQueue(txrH); - rtxtrQ.push(txr); -}; -ETCp.addTexture = function (txrH, minW) { - var self = this; - var txrQ = self.getTextureQueue(txrH); - var txr = {}; - txrQ.push(txr); - txr.eleCaches = []; - txr.height = txrH; - txr.width = Math.max(defTxrWidth, minW); - txr.usedWidth = 0; - txr.invalidatedWidth = 0; - txr.fullnessChecks = 0; - txr.canvas = self.renderer.makeOffscreenCanvas(txr.width, txr.height); - txr.context = txr.canvas.getContext('2d'); - return txr; -}; -ETCp.recycleTexture = function (txrH, minW) { - var self = this; - var txrQ = self.getTextureQueue(txrH); - var rtxtrQ = self.getRetiredTextureQueue(txrH); - for (var i = 0; i < rtxtrQ.length; i++) { - var txr = rtxtrQ[i]; - if (txr.width >= minW) { - txr.retired = false; - txr.usedWidth = 0; - txr.invalidatedWidth = 0; - txr.fullnessChecks = 0; - clearArray(txr.eleCaches); - txr.context.setTransform(1, 0, 0, 1, 0, 0); - txr.context.clearRect(0, 0, txr.width, txr.height); - removeFromArray(rtxtrQ, txr); - txrQ.push(txr); - return txr; - } - } -}; -ETCp.queueElement = function (ele, lvl) { - var self = this; - var q = self.getElementQueue(); - var k2q = self.getElementKeyToQueue(); - var key = this.getKey(ele); - var existingReq = k2q[key]; - if (existingReq) { - // use the max lvl b/c in between lvls are cheap to make - existingReq.level = Math.max(existingReq.level, lvl); - existingReq.eles.merge(ele); - existingReq.reqs++; - q.updateItem(existingReq); - } else { - var req = { - eles: ele.spawn().merge(ele), - level: lvl, - reqs: 1, - key: key - }; - q.push(req); - k2q[key] = req; - } -}; -ETCp.dequeue = function (pxRatio /*, extent*/) { - var self = this; - var q = self.getElementQueue(); - var k2q = self.getElementKeyToQueue(); - var dequeued = []; - var lookup = self.lookup; - for (var i = 0; i < maxDeqSize$1; i++) { - if (q.size() > 0) { - var req = q.pop(); - var key = req.key; - var ele = req.eles[0]; // all eles have the same key - var cacheExists = lookup.hasCache(ele, req.level); - - // clear out the key to req lookup - k2q[key] = null; - - // dequeueing isn't necessary with an existing cache - if (cacheExists) { - continue; - } - dequeued.push(req); - var bb = self.getBoundingBox(ele); - self.getElement(ele, bb, pxRatio, req.level, getTxrReasons.dequeue); - } else { - break; - } - } - return dequeued; -}; -ETCp.removeFromQueue = function (ele) { - var self = this; - var q = self.getElementQueue(); - var k2q = self.getElementKeyToQueue(); - var key = this.getKey(ele); - var req = k2q[key]; - if (req != null) { - if (req.eles.length === 1) { - // remove if last ele in the req - // bring to front of queue - req.reqs = MAX_INT$1; - q.updateItem(req); - q.pop(); // remove from queue - - k2q[key] = null; // remove from lookup map - } else { - // otherwise just remove ele from req - req.eles.unmerge(ele); - } - } -}; -ETCp.onDequeue = function (fn) { - this.onDequeues.push(fn); -}; -ETCp.offDequeue = function (fn) { - removeFromArray(this.onDequeues, fn); -}; -ETCp.setupDequeueing = defs.setupDequeueing({ - deqRedrawThreshold: deqRedrawThreshold$1, - deqCost: deqCost$1, - deqAvgCost: deqAvgCost$1, - deqNoDrawCost: deqNoDrawCost$1, - deqFastCost: deqFastCost$1, - deq: function deq(self, pxRatio, extent) { - return self.dequeue(pxRatio, extent); - }, - onDeqd: function onDeqd(self, deqd) { - for (var i = 0; i < self.onDequeues.length; i++) { - var fn = self.onDequeues[i]; - fn(deqd); - } - }, - shouldRedraw: function shouldRedraw(self, deqd, pxRatio, extent) { - for (var i = 0; i < deqd.length; i++) { - var eles = deqd[i].eles; - for (var j = 0; j < eles.length; j++) { - var bb = eles[j].boundingBox(); - if (boundingBoxesIntersect(bb, extent)) { - return true; - } - } - } - return false; - }, - priority: function priority(self) { - return self.renderer.beforeRenderPriorities.eleTxrDeq; - } -}); - -var defNumLayers = 1; // default number of layers to use -var minLvl = -4; // when scaling smaller than that we don't need to re-render -var maxLvl = 2; // when larger than this scale just render directly (caching is not helpful) -var maxZoom = 3.99; // beyond this zoom level, layered textures are not used -var deqRedrawThreshold = 50; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile -var refineEleDebounceTime = 50; // time to debounce sharper ele texture updates -var deqCost = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame -var deqAvgCost = 0.1; // % of add'l rendering cost compared to average overall redraw time -var deqNoDrawCost = 0.9; // % of avg frame time that can be used for dequeueing when not drawing -var deqFastCost = 0.9; // % of frame time to be used when >60fps -var maxDeqSize = 1; // number of eles to dequeue and render at higher texture in each batch -var invalidThreshold = 250; // time threshold for disabling b/c of invalidations -var maxLayerArea = 4000 * 4000; // layers can't be bigger than this -var useHighQualityEleTxrReqs = true; // whether to use high quality ele txr requests (generally faster and cheaper in the longterm) - -// var log = function(){ console.log.apply( console, arguments ); }; - -var LayeredTextureCache = function LayeredTextureCache(renderer) { - var self = this; - var r = self.renderer = renderer; - var cy = r.cy; - self.layersByLevel = {}; // e.g. 2 => [ layer1, layer2, ..., layerN ] - - self.firstGet = true; - self.lastInvalidationTime = performanceNow() - 2 * invalidThreshold; - self.skipping = false; - self.eleTxrDeqs = cy.collection(); - self.scheduleElementRefinement = debounce__default["default"](function () { - self.refineElementTextures(self.eleTxrDeqs); - self.eleTxrDeqs.unmerge(self.eleTxrDeqs); - }, refineEleDebounceTime); - r.beforeRender(function (willDraw, now) { - if (now - self.lastInvalidationTime <= invalidThreshold) { - self.skipping = true; - } else { - self.skipping = false; - } - }, r.beforeRenderPriorities.lyrTxrSkip); - var qSort = function qSort(a, b) { - return b.reqs - a.reqs; - }; - self.layersQueue = new Heap__default["default"](qSort); - self.setupDequeueing(); -}; -var LTCp = LayeredTextureCache.prototype; -var layerIdPool = 0; -var MAX_INT = Math.pow(2, 53) - 1; -LTCp.makeLayer = function (bb, lvl) { - var scale = Math.pow(2, lvl); - var w = Math.ceil(bb.w * scale); - var h = Math.ceil(bb.h * scale); - var canvas = this.renderer.makeOffscreenCanvas(w, h); - var layer = { - id: layerIdPool = ++layerIdPool % MAX_INT, - bb: bb, - level: lvl, - width: w, - height: h, - canvas: canvas, - context: canvas.getContext('2d'), - eles: [], - elesQueue: [], - reqs: 0 - }; - - // log('make layer %s with w %s and h %s and lvl %s', layer.id, layer.width, layer.height, layer.level); - - var cxt = layer.context; - var dx = -layer.bb.x1; - var dy = -layer.bb.y1; - - // do the transform on creation to save cycles (it's the same for all eles) - cxt.scale(scale, scale); - cxt.translate(dx, dy); - return layer; -}; -LTCp.getLayers = function (eles, pxRatio, lvl) { - var self = this; - var r = self.renderer; - var cy = r.cy; - var zoom = cy.zoom(); - var firstGet = self.firstGet; - self.firstGet = false; - - // log('--\nget layers with %s eles', eles.length); - //log eles.map(function(ele){ return ele.id() }) ); - - if (lvl == null) { - lvl = Math.ceil(log2(zoom * pxRatio)); - if (lvl < minLvl) { - lvl = minLvl; - } else if (zoom >= maxZoom || lvl > maxLvl) { - return null; - } - } - self.validateLayersElesOrdering(lvl, eles); - var layersByLvl = self.layersByLevel; - var scale = Math.pow(2, lvl); - var layers = layersByLvl[lvl] = layersByLvl[lvl] || []; - var bb; - var lvlComplete = self.levelIsComplete(lvl, eles); - var tmpLayers; - var checkTempLevels = function checkTempLevels() { - var canUseAsTmpLvl = function canUseAsTmpLvl(l) { - self.validateLayersElesOrdering(l, eles); - if (self.levelIsComplete(l, eles)) { - tmpLayers = layersByLvl[l]; - return true; - } - }; - var checkLvls = function checkLvls(dir) { - if (tmpLayers) { - return; - } - for (var l = lvl + dir; minLvl <= l && l <= maxLvl; l += dir) { - if (canUseAsTmpLvl(l)) { - break; - } - } - }; - checkLvls(+1); - checkLvls(-1); - - // remove the invalid layers; they will be replaced as needed later in this function - for (var i = layers.length - 1; i >= 0; i--) { - var layer = layers[i]; - if (layer.invalid) { - removeFromArray(layers, layer); - } - } - }; - if (!lvlComplete) { - // if the current level is incomplete, then use the closest, best quality layerset temporarily - // and later queue the current layerset so we can get the proper quality level soon - - checkTempLevels(); - } else { - // log('level complete, using existing layers\n--'); - return layers; - } - var getBb = function getBb() { - if (!bb) { - bb = makeBoundingBox(); - for (var i = 0; i < eles.length; i++) { - updateBoundingBox(bb, eles[i].boundingBox()); - } - } - return bb; - }; - var makeLayer = function makeLayer(opts) { - opts = opts || {}; - var after = opts.after; - getBb(); - var area = bb.w * scale * (bb.h * scale); - if (area > maxLayerArea) { - return null; - } - var layer = self.makeLayer(bb, lvl); - if (after != null) { - var index = layers.indexOf(after) + 1; - layers.splice(index, 0, layer); - } else if (opts.insert === undefined || opts.insert) { - // no after specified => first layer made so put at start - layers.unshift(layer); - } - - // if( tmpLayers ){ - //self.queueLayer( layer ); - // } - - return layer; - }; - if (self.skipping && !firstGet) { - // log('skip layers'); - return null; - } - - // log('do layers'); - - var layer = null; - var maxElesPerLayer = eles.length / defNumLayers; - var allowLazyQueueing = !firstGet; - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - var rs = ele._private.rscratch; - var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; - - // log('look at ele', ele.id()); - - var existingLayer = caches[lvl]; - if (existingLayer) { - // reuse layer for later eles - // log('reuse layer for', ele.id()); - layer = existingLayer; - continue; - } - if (!layer || layer.eles.length >= maxElesPerLayer || !boundingBoxInBoundingBox(layer.bb, ele.boundingBox())) { - // log('make new layer for ele %s', ele.id()); - - layer = makeLayer({ - insert: true, - after: layer - }); - - // if now layer can be built then we can't use layers at this level - if (!layer) { - return null; - } - - // log('new layer with id %s', layer.id); - } - - if (tmpLayers || allowLazyQueueing) { - // log('queue ele %s in layer %s', ele.id(), layer.id); - self.queueLayer(layer, ele); - } else { - // log('draw ele %s in layer %s', ele.id(), layer.id); - self.drawEleInLayer(layer, ele, lvl, pxRatio); - } - layer.eles.push(ele); - caches[lvl] = layer; - } - - // log('--'); - - if (tmpLayers) { - // then we only queued the current layerset and can't draw it yet - return tmpLayers; - } - if (allowLazyQueueing) { - // log('lazy queue level', lvl); - return null; - } - return layers; -}; - -// a layer may want to use an ele cache of a higher level to avoid blurriness -// so the layer level might not equal the ele level -LTCp.getEleLevelForLayerLevel = function (lvl, pxRatio) { - return lvl; -}; -LTCp.drawEleInLayer = function (layer, ele, lvl, pxRatio) { - var self = this; - var r = this.renderer; - var context = layer.context; - var bb = ele.boundingBox(); - if (bb.w === 0 || bb.h === 0 || !ele.visible()) { - return; - } - lvl = self.getEleLevelForLayerLevel(lvl, pxRatio); - { - r.setImgSmoothing(context, false); - } - { - r.drawCachedElement(context, ele, null, null, lvl, useHighQualityEleTxrReqs); - } - { - r.setImgSmoothing(context, true); - } -}; -LTCp.levelIsComplete = function (lvl, eles) { - var self = this; - var layers = self.layersByLevel[lvl]; - if (!layers || layers.length === 0) { - return false; - } - var numElesInLayers = 0; - for (var i = 0; i < layers.length; i++) { - var layer = layers[i]; - - // if there are any eles needed to be drawn yet, the level is not complete - if (layer.reqs > 0) { - return false; - } - - // if the layer is invalid, the level is not complete - if (layer.invalid) { - return false; - } - numElesInLayers += layer.eles.length; - } - - // we should have exactly the number of eles passed in to be complete - if (numElesInLayers !== eles.length) { - return false; - } - return true; -}; -LTCp.validateLayersElesOrdering = function (lvl, eles) { - var layers = this.layersByLevel[lvl]; - if (!layers) { - return; - } - - // if in a layer the eles are not in the same order, then the layer is invalid - // (i.e. there is an ele in between the eles in the layer) - - for (var i = 0; i < layers.length; i++) { - var layer = layers[i]; - var offset = -1; - - // find the offset - for (var j = 0; j < eles.length; j++) { - if (layer.eles[0] === eles[j]) { - offset = j; - break; - } - } - if (offset < 0) { - // then the layer has nonexistent elements and is invalid - this.invalidateLayer(layer); - continue; - } - - // the eles in the layer must be in the same continuous order, else the layer is invalid - - var o = offset; - for (var j = 0; j < layer.eles.length; j++) { - if (layer.eles[j] !== eles[o + j]) { - // log('invalidate based on ordering', layer.id); - - this.invalidateLayer(layer); - break; - } - } - } -}; -LTCp.updateElementsInLayers = function (eles, update) { - var self = this; - var isEles = element(eles[0]); - - // collect udpated elements (cascaded from the layers) and update each - // layer itself along the way - for (var i = 0; i < eles.length; i++) { - var req = isEles ? null : eles[i]; - var ele = isEles ? eles[i] : eles[i].ele; - var rs = ele._private.rscratch; - var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; - for (var l = minLvl; l <= maxLvl; l++) { - var layer = caches[l]; - if (!layer) { - continue; - } - - // if update is a request from the ele cache, then it affects only - // the matching level - if (req && self.getEleLevelForLayerLevel(layer.level) !== req.level) { - continue; - } - update(layer, ele, req); - } - } -}; -LTCp.haveLayers = function () { - var self = this; - var haveLayers = false; - for (var l = minLvl; l <= maxLvl; l++) { - var layers = self.layersByLevel[l]; - if (layers && layers.length > 0) { - haveLayers = true; - break; - } - } - return haveLayers; -}; -LTCp.invalidateElements = function (eles) { - var self = this; - if (eles.length === 0) { - return; - } - self.lastInvalidationTime = performanceNow(); - - // log('update invalidate layer time from eles'); - - if (eles.length === 0 || !self.haveLayers()) { - return; - } - self.updateElementsInLayers(eles, function invalAssocLayers(layer, ele, req) { - self.invalidateLayer(layer); - }); -}; -LTCp.invalidateLayer = function (layer) { - // log('update invalidate layer time'); - - this.lastInvalidationTime = performanceNow(); - if (layer.invalid) { - return; - } // save cycles - - var lvl = layer.level; - var eles = layer.eles; - var layers = this.layersByLevel[lvl]; - - // log('invalidate layer', layer.id ); - - removeFromArray(layers, layer); - // layer.eles = []; - - layer.elesQueue = []; - layer.invalid = true; - if (layer.replacement) { - layer.replacement.invalid = true; - } - for (var i = 0; i < eles.length; i++) { - var caches = eles[i]._private.rscratch.imgLayerCaches; - if (caches) { - caches[lvl] = null; - } - } -}; -LTCp.refineElementTextures = function (eles) { - var self = this; - - // log('refine', eles.length); - - self.updateElementsInLayers(eles, function refineEachEle(layer, ele, req) { - var rLyr = layer.replacement; - if (!rLyr) { - rLyr = layer.replacement = self.makeLayer(layer.bb, layer.level); - rLyr.replaces = layer; - rLyr.eles = layer.eles; - - // log('make replacement layer %s for %s with level %s', rLyr.id, layer.id, rLyr.level); - } - - if (!rLyr.reqs) { - for (var i = 0; i < rLyr.eles.length; i++) { - self.queueLayer(rLyr, rLyr.eles[i]); - } - - // log('queue replacement layer refinement', rLyr.id); - } - }); -}; - -LTCp.enqueueElementRefinement = function (ele) { - this.eleTxrDeqs.merge(ele); - this.scheduleElementRefinement(); -}; -LTCp.queueLayer = function (layer, ele) { - var self = this; - var q = self.layersQueue; - var elesQ = layer.elesQueue; - var hasId = elesQ.hasId = elesQ.hasId || {}; - - // if a layer is going to be replaced, queuing is a waste of time - if (layer.replacement) { - return; - } - if (ele) { - if (hasId[ele.id()]) { - return; - } - elesQ.push(ele); - hasId[ele.id()] = true; - } - if (layer.reqs) { - layer.reqs++; - q.updateItem(layer); - } else { - layer.reqs = 1; - q.push(layer); - } -}; -LTCp.dequeue = function (pxRatio) { - var self = this; - var q = self.layersQueue; - var deqd = []; - var eleDeqs = 0; - while (eleDeqs < maxDeqSize) { - if (q.size() === 0) { - break; - } - var layer = q.peek(); - - // if a layer has been or will be replaced, then don't waste time with it - if (layer.replacement) { - // log('layer %s in queue skipped b/c it already has a replacement', layer.id); - q.pop(); - continue; - } - - // if this is a replacement layer that has been superceded, then forget it - if (layer.replaces && layer !== layer.replaces.replacement) { - // log('layer is no longer the most uptodate replacement; dequeued', layer.id) - q.pop(); - continue; - } - if (layer.invalid) { - // log('replacement layer %s is invalid; dequeued', layer.id); - q.pop(); - continue; - } - var ele = layer.elesQueue.shift(); - if (ele) { - // log('dequeue layer %s', layer.id); - - self.drawEleInLayer(layer, ele, layer.level, pxRatio); - eleDeqs++; - } - if (deqd.length === 0) { - // we need only one entry in deqd to queue redrawing etc - deqd.push(true); - } - - // if the layer has all its eles done, then remove from the queue - if (layer.elesQueue.length === 0) { - q.pop(); - layer.reqs = 0; - - // log('dequeue of layer %s complete', layer.id); - - // when a replacement layer is dequeued, it replaces the old layer in the level - if (layer.replaces) { - self.applyLayerReplacement(layer); - } - self.requestRedraw(); - } - } - return deqd; -}; -LTCp.applyLayerReplacement = function (layer) { - var self = this; - var layersInLevel = self.layersByLevel[layer.level]; - var replaced = layer.replaces; - var index = layersInLevel.indexOf(replaced); - - // if the replaced layer is not in the active list for the level, then replacing - // refs would be a mistake (i.e. overwriting the true active layer) - if (index < 0 || replaced.invalid) { - // log('replacement layer would have no effect', layer.id); - return; - } - layersInLevel[index] = layer; // replace level ref - - // replace refs in eles - for (var i = 0; i < layer.eles.length; i++) { - var _p = layer.eles[i]._private; - var cache = _p.imgLayerCaches = _p.imgLayerCaches || {}; - if (cache) { - cache[layer.level] = layer; - } - } - - // log('apply replacement layer %s over %s', layer.id, replaced.id); - - self.requestRedraw(); -}; -LTCp.requestRedraw = debounce__default["default"](function () { - var r = this.renderer; - r.redrawHint('eles', true); - r.redrawHint('drag', true); - r.redraw(); -}, 100); -LTCp.setupDequeueing = defs.setupDequeueing({ - deqRedrawThreshold: deqRedrawThreshold, - deqCost: deqCost, - deqAvgCost: deqAvgCost, - deqNoDrawCost: deqNoDrawCost, - deqFastCost: deqFastCost, - deq: function deq(self, pxRatio) { - return self.dequeue(pxRatio); - }, - onDeqd: noop$1, - shouldRedraw: trueify, - priority: function priority(self) { - return self.renderer.beforeRenderPriorities.lyrTxrDeq; - } -}); - -var CRp$a = {}; -var impl; -function polygon(context, points) { - for (var i = 0; i < points.length; i++) { - var pt = points[i]; - context.lineTo(pt.x, pt.y); - } -} -function triangleBackcurve(context, points, controlPoint) { - var firstPt; - for (var i = 0; i < points.length; i++) { - var pt = points[i]; - if (i === 0) { - firstPt = pt; - } - context.lineTo(pt.x, pt.y); - } - context.quadraticCurveTo(controlPoint.x, controlPoint.y, firstPt.x, firstPt.y); -} -function triangleTee(context, trianglePoints, teePoints) { - if (context.beginPath) { - context.beginPath(); - } - var triPts = trianglePoints; - for (var i = 0; i < triPts.length; i++) { - var pt = triPts[i]; - context.lineTo(pt.x, pt.y); - } - var teePts = teePoints; - var firstTeePt = teePoints[0]; - context.moveTo(firstTeePt.x, firstTeePt.y); - for (var i = 1; i < teePts.length; i++) { - var pt = teePts[i]; - context.lineTo(pt.x, pt.y); - } - if (context.closePath) { - context.closePath(); - } -} -function circleTriangle(context, trianglePoints, rx, ry, r) { - if (context.beginPath) { - context.beginPath(); - } - context.arc(rx, ry, r, 0, Math.PI * 2, false); - var triPts = trianglePoints; - var firstTrPt = triPts[0]; - context.moveTo(firstTrPt.x, firstTrPt.y); - for (var i = 0; i < triPts.length; i++) { - var pt = triPts[i]; - context.lineTo(pt.x, pt.y); - } - if (context.closePath) { - context.closePath(); - } -} -function circle(context, rx, ry, r) { - context.arc(rx, ry, r, 0, Math.PI * 2, false); -} -CRp$a.arrowShapeImpl = function (name) { - return (impl || (impl = { - 'polygon': polygon, - 'triangle-backcurve': triangleBackcurve, - 'triangle-tee': triangleTee, - 'circle-triangle': circleTriangle, - 'triangle-cross': triangleTee, - 'circle': circle - }))[name]; -}; - -var CRp$9 = {}; -CRp$9.drawElement = function (context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity) { - var r = this; - if (ele.isNode()) { - r.drawNode(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); - } else { - r.drawEdge(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); - } -}; -CRp$9.drawElementOverlay = function (context, ele) { - var r = this; - if (ele.isNode()) { - r.drawNodeOverlay(context, ele); - } else { - r.drawEdgeOverlay(context, ele); - } -}; -CRp$9.drawElementUnderlay = function (context, ele) { - var r = this; - if (ele.isNode()) { - r.drawNodeUnderlay(context, ele); - } else { - r.drawEdgeUnderlay(context, ele); - } -}; -CRp$9.drawCachedElementPortion = function (context, ele, eleTxrCache, pxRatio, lvl, reason, getRotation, getOpacity) { - var r = this; - var bb = eleTxrCache.getBoundingBox(ele); - if (bb.w === 0 || bb.h === 0) { - return; - } // ignore zero size case - - var eleCache = eleTxrCache.getElement(ele, bb, pxRatio, lvl, reason); - if (eleCache != null) { - var opacity = getOpacity(r, ele); - if (opacity === 0) { - return; - } - var theta = getRotation(r, ele); - var x1 = bb.x1, - y1 = bb.y1, - w = bb.w, - h = bb.h; - var x, y, sx, sy, smooth; - if (theta !== 0) { - var rotPt = eleTxrCache.getRotationPoint(ele); - sx = rotPt.x; - sy = rotPt.y; - context.translate(sx, sy); - context.rotate(theta); - smooth = r.getImgSmoothing(context); - if (!smooth) { - r.setImgSmoothing(context, true); - } - var off = eleTxrCache.getRotationOffset(ele); - x = off.x; - y = off.y; - } else { - x = x1; - y = y1; - } - var oldGlobalAlpha; - if (opacity !== 1) { - oldGlobalAlpha = context.globalAlpha; - context.globalAlpha = oldGlobalAlpha * opacity; - } - context.drawImage(eleCache.texture.canvas, eleCache.x, 0, eleCache.width, eleCache.height, x, y, w, h); - if (opacity !== 1) { - context.globalAlpha = oldGlobalAlpha; - } - if (theta !== 0) { - context.rotate(-theta); - context.translate(-sx, -sy); - if (!smooth) { - r.setImgSmoothing(context, false); - } - } - } else { - eleTxrCache.drawElement(context, ele); // direct draw fallback - } -}; - -var getZeroRotation = function getZeroRotation() { - return 0; -}; -var getLabelRotation = function getLabelRotation(r, ele) { - return r.getTextAngle(ele, null); -}; -var getSourceLabelRotation = function getSourceLabelRotation(r, ele) { - return r.getTextAngle(ele, 'source'); -}; -var getTargetLabelRotation = function getTargetLabelRotation(r, ele) { - return r.getTextAngle(ele, 'target'); -}; -var getOpacity = function getOpacity(r, ele) { - return ele.effectiveOpacity(); -}; -var getTextOpacity = function getTextOpacity(e, ele) { - return ele.pstyle('text-opacity').pfValue * ele.effectiveOpacity(); -}; -CRp$9.drawCachedElement = function (context, ele, pxRatio, extent, lvl, requestHighQuality) { - var r = this; - var _r$data = r.data, - eleTxrCache = _r$data.eleTxrCache, - lblTxrCache = _r$data.lblTxrCache, - slbTxrCache = _r$data.slbTxrCache, - tlbTxrCache = _r$data.tlbTxrCache; - var bb = ele.boundingBox(); - var reason = requestHighQuality === true ? eleTxrCache.reasons.highQuality : null; - if (bb.w === 0 || bb.h === 0 || !ele.visible()) { - return; - } - if (!extent || boundingBoxesIntersect(bb, extent)) { - var isEdge = ele.isEdge(); - var badLine = ele.element()._private.rscratch.badLine; - r.drawElementUnderlay(context, ele); - r.drawCachedElementPortion(context, ele, eleTxrCache, pxRatio, lvl, reason, getZeroRotation, getOpacity); - if (!isEdge || !badLine) { - r.drawCachedElementPortion(context, ele, lblTxrCache, pxRatio, lvl, reason, getLabelRotation, getTextOpacity); - } - if (isEdge && !badLine) { - r.drawCachedElementPortion(context, ele, slbTxrCache, pxRatio, lvl, reason, getSourceLabelRotation, getTextOpacity); - r.drawCachedElementPortion(context, ele, tlbTxrCache, pxRatio, lvl, reason, getTargetLabelRotation, getTextOpacity); - } - r.drawElementOverlay(context, ele); - } -}; -CRp$9.drawElements = function (context, eles) { - var r = this; - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - r.drawElement(context, ele); - } -}; -CRp$9.drawCachedElements = function (context, eles, pxRatio, extent) { - var r = this; - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - r.drawCachedElement(context, ele, pxRatio, extent); - } -}; -CRp$9.drawCachedNodes = function (context, eles, pxRatio, extent) { - var r = this; - for (var i = 0; i < eles.length; i++) { - var ele = eles[i]; - if (!ele.isNode()) { - continue; - } - r.drawCachedElement(context, ele, pxRatio, extent); - } -}; -CRp$9.drawLayeredElements = function (context, eles, pxRatio, extent) { - var r = this; - var layers = r.data.lyrTxrCache.getLayers(eles, pxRatio); - if (layers) { - for (var i = 0; i < layers.length; i++) { - var layer = layers[i]; - var bb = layer.bb; - if (bb.w === 0 || bb.h === 0) { - continue; - } - context.drawImage(layer.canvas, bb.x1, bb.y1, bb.w, bb.h); - } - } else { - // fall back on plain caching if no layers - r.drawCachedElements(context, eles, pxRatio, extent); - } -}; - -/* global Path2D */ -var CRp$8 = {}; -CRp$8.drawEdge = function (context, edge, shiftToOriginWithBb) { - var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; - var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; - var r = this; - var rs = edge._private.rscratch; - if (shouldDrawOpacity && !edge.visible()) { - return; - } - - // if bezier ctrl pts can not be calculated, then die - if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) { - // isNaN in case edge is impossible and browser bugs (e.g. safari) - return; - } - var bb; - if (shiftToOriginWithBb) { - bb = shiftToOriginWithBb; - context.translate(-bb.x1, -bb.y1); - } - var opacity = shouldDrawOpacity ? edge.pstyle('opacity').value : 1; - var lineOpacity = shouldDrawOpacity ? edge.pstyle('line-opacity').value : 1; - var curveStyle = edge.pstyle('curve-style').value; - var lineStyle = edge.pstyle('line-style').value; - var edgeWidth = edge.pstyle('width').pfValue; - var lineCap = edge.pstyle('line-cap').value; - var effectiveLineOpacity = opacity * lineOpacity; - // separate arrow opacity would require arrow-opacity property - var effectiveArrowOpacity = opacity * lineOpacity; - var drawLine = function drawLine() { - var strokeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveLineOpacity; - if (curveStyle === 'straight-triangle') { - r.eleStrokeStyle(context, edge, strokeOpacity); - r.drawEdgeTrianglePath(edge, context, rs.allpts); - } else { - context.lineWidth = edgeWidth; - context.lineCap = lineCap; - r.eleStrokeStyle(context, edge, strokeOpacity); - r.drawEdgePath(edge, context, rs.allpts, lineStyle); - context.lineCap = 'butt'; // reset for other drawing functions - } - }; - - var drawOverlay = function drawOverlay() { - if (!shouldDrawOverlay) { - return; - } - r.drawEdgeOverlay(context, edge); - }; - var drawUnderlay = function drawUnderlay() { - if (!shouldDrawOverlay) { - return; - } - r.drawEdgeUnderlay(context, edge); - }; - var drawArrows = function drawArrows() { - var arrowOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveArrowOpacity; - r.drawArrowheads(context, edge, arrowOpacity); - }; - var drawText = function drawText() { - r.drawElementText(context, edge, null, drawLabel); - }; - context.lineJoin = 'round'; - var ghost = edge.pstyle('ghost').value === 'yes'; - if (ghost) { - var gx = edge.pstyle('ghost-offset-x').pfValue; - var gy = edge.pstyle('ghost-offset-y').pfValue; - var ghostOpacity = edge.pstyle('ghost-opacity').value; - var effectiveGhostOpacity = effectiveLineOpacity * ghostOpacity; - context.translate(gx, gy); - drawLine(effectiveGhostOpacity); - drawArrows(effectiveGhostOpacity); - context.translate(-gx, -gy); - } - drawUnderlay(); - drawLine(); - drawArrows(); - drawOverlay(); - drawText(); - if (shiftToOriginWithBb) { - context.translate(bb.x1, bb.y1); - } -}; -var drawEdgeOverlayUnderlay = function drawEdgeOverlayUnderlay(overlayOrUnderlay) { - if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { - throw new Error('Invalid state'); - } - return function (context, edge) { - if (!edge.visible()) { - return; - } - var opacity = edge.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; - if (opacity === 0) { - return; - } - var r = this; - var usePaths = r.usePaths(); - var rs = edge._private.rscratch; - var padding = edge.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; - var width = 2 * padding; - var color = edge.pstyle("".concat(overlayOrUnderlay, "-color")).value; - context.lineWidth = width; - if (rs.edgeType === 'self' && !usePaths) { - context.lineCap = 'butt'; - } else { - context.lineCap = 'round'; - } - r.colorStrokeStyle(context, color[0], color[1], color[2], opacity); - r.drawEdgePath(edge, context, rs.allpts, 'solid'); - }; -}; -CRp$8.drawEdgeOverlay = drawEdgeOverlayUnderlay('overlay'); -CRp$8.drawEdgeUnderlay = drawEdgeOverlayUnderlay('underlay'); -CRp$8.drawEdgePath = function (edge, context, pts, type) { - var rs = edge._private.rscratch; - var canvasCxt = context; - var path; - var pathCacheHit = false; - var usePaths = this.usePaths(); - var lineDashPattern = edge.pstyle('line-dash-pattern').pfValue; - var lineDashOffset = edge.pstyle('line-dash-offset').pfValue; - if (usePaths) { - var pathCacheKey = pts.join('$'); - var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey; - if (keyMatches) { - path = context = rs.pathCache; - pathCacheHit = true; - } else { - path = context = new Path2D(); - rs.pathCacheKey = pathCacheKey; - rs.pathCache = path; - } - } - if (canvasCxt.setLineDash) { - // for very outofdate browsers - switch (type) { - case 'dotted': - canvasCxt.setLineDash([1, 1]); - break; - case 'dashed': - canvasCxt.setLineDash(lineDashPattern); - canvasCxt.lineDashOffset = lineDashOffset; - break; - case 'solid': - canvasCxt.setLineDash([]); - break; - } - } - if (!pathCacheHit && !rs.badLine) { - if (context.beginPath) { - context.beginPath(); - } - context.moveTo(pts[0], pts[1]); - switch (rs.edgeType) { - case 'bezier': - case 'self': - case 'compound': - case 'multibezier': - for (var i = 2; i + 3 < pts.length; i += 4) { - context.quadraticCurveTo(pts[i], pts[i + 1], pts[i + 2], pts[i + 3]); - } - break; - case 'straight': - case 'segments': - case 'haystack': - for (var _i = 2; _i + 1 < pts.length; _i += 2) { - context.lineTo(pts[_i], pts[_i + 1]); - } - break; - } - } - context = canvasCxt; - if (usePaths) { - context.stroke(path); - } else { - context.stroke(); - } - - // reset any line dashes - if (context.setLineDash) { - // for very outofdate browsers - context.setLineDash([]); - } -}; -CRp$8.drawEdgeTrianglePath = function (edge, context, pts) { - // use line stroke style for triangle fill style - context.fillStyle = context.strokeStyle; - var edgeWidth = edge.pstyle('width').pfValue; - for (var i = 0; i + 1 < pts.length; i += 2) { - var vector = [pts[i + 2] - pts[i], pts[i + 3] - pts[i + 1]]; - var length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]); - var normal = [vector[1] / length, -vector[0] / length]; - var triangleHead = [normal[0] * edgeWidth / 2, normal[1] * edgeWidth / 2]; - context.beginPath(); - context.moveTo(pts[i] - triangleHead[0], pts[i + 1] - triangleHead[1]); - context.lineTo(pts[i] + triangleHead[0], pts[i + 1] + triangleHead[1]); - context.lineTo(pts[i + 2], pts[i + 3]); - context.closePath(); - context.fill(); - } -}; -CRp$8.drawArrowheads = function (context, edge, opacity) { - var rs = edge._private.rscratch; - var isHaystack = rs.edgeType === 'haystack'; - if (!isHaystack) { - this.drawArrowhead(context, edge, 'source', rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle, opacity); - } - this.drawArrowhead(context, edge, 'mid-target', rs.midX, rs.midY, rs.midtgtArrowAngle, opacity); - this.drawArrowhead(context, edge, 'mid-source', rs.midX, rs.midY, rs.midsrcArrowAngle, opacity); - if (!isHaystack) { - this.drawArrowhead(context, edge, 'target', rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle, opacity); - } -}; -CRp$8.drawArrowhead = function (context, edge, prefix, x, y, angle, opacity) { - if (isNaN(x) || x == null || isNaN(y) || y == null || isNaN(angle) || angle == null) { - return; - } - var self = this; - var arrowShape = edge.pstyle(prefix + '-arrow-shape').value; - if (arrowShape === 'none') { - return; - } - var arrowClearFill = edge.pstyle(prefix + '-arrow-fill').value === 'hollow' ? 'both' : 'filled'; - var arrowFill = edge.pstyle(prefix + '-arrow-fill').value; - var edgeWidth = edge.pstyle('width').pfValue; - var pArrowWidth = edge.pstyle(prefix + '-arrow-width'); - var arrowWidth = pArrowWidth.value === 'match-line' ? edgeWidth : pArrowWidth.pfValue; - if (pArrowWidth.units === '%') arrowWidth *= edgeWidth; - var edgeOpacity = edge.pstyle('opacity').value; - if (opacity === undefined) { - opacity = edgeOpacity; - } - var gco = context.globalCompositeOperation; - if (opacity !== 1 || arrowFill === 'hollow') { - // then extra clear is needed - context.globalCompositeOperation = 'destination-out'; - self.colorFillStyle(context, 255, 255, 255, 1); - self.colorStrokeStyle(context, 255, 255, 255, 1); - self.drawArrowShape(edge, context, arrowClearFill, edgeWidth, arrowShape, arrowWidth, x, y, angle); - context.globalCompositeOperation = gco; - } // otherwise, the opaque arrow clears it for free :) - - var color = edge.pstyle(prefix + '-arrow-color').value; - self.colorFillStyle(context, color[0], color[1], color[2], opacity); - self.colorStrokeStyle(context, color[0], color[1], color[2], opacity); - self.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, arrowWidth, x, y, angle); -}; -CRp$8.drawArrowShape = function (edge, context, fill, edgeWidth, shape, shapeWidth, x, y, angle) { - var r = this; - var usePaths = this.usePaths() && shape !== 'triangle-cross'; - var pathCacheHit = false; - var path; - var canvasContext = context; - var translation = { - x: x, - y: y - }; - var scale = edge.pstyle('arrow-scale').value; - var size = this.getArrowWidth(edgeWidth, scale); - var shapeImpl = r.arrowShapes[shape]; - if (usePaths) { - var cache = r.arrowPathCache = r.arrowPathCache || []; - var key = hashString(shape); - var cachedPath = cache[key]; - if (cachedPath != null) { - path = context = cachedPath; - pathCacheHit = true; - } else { - path = context = new Path2D(); - cache[key] = path; - } - } - if (!pathCacheHit) { - if (context.beginPath) { - context.beginPath(); - } - if (usePaths) { - // store in the path cache with values easily manipulated later - shapeImpl.draw(context, 1, 0, { - x: 0, - y: 0 - }, 1); - } else { - shapeImpl.draw(context, size, angle, translation, edgeWidth); - } - if (context.closePath) { - context.closePath(); - } - } - context = canvasContext; - if (usePaths) { - // set transform to arrow position/orientation - context.translate(x, y); - context.rotate(angle); - context.scale(size, size); - } - if (fill === 'filled' || fill === 'both') { - if (usePaths) { - context.fill(path); - } else { - context.fill(); - } - } - if (fill === 'hollow' || fill === 'both') { - context.lineWidth = shapeWidth / (usePaths ? size : 1); - context.lineJoin = 'miter'; - if (usePaths) { - context.stroke(path); - } else { - context.stroke(); - } - } - if (usePaths) { - // reset transform by applying inverse - context.scale(1 / size, 1 / size); - context.rotate(-angle); - context.translate(-x, -y); - } -}; - -var CRp$7 = {}; -CRp$7.safeDrawImage = function (context, img, ix, iy, iw, ih, x, y, w, h) { - // detect problematic cases for old browsers with bad images (cheaper than try-catch) - if (iw <= 0 || ih <= 0 || w <= 0 || h <= 0) { - return; - } - try { - context.drawImage(img, ix, iy, iw, ih, x, y, w, h); - } catch (e) { - warn(e); - } -}; -CRp$7.drawInscribedImage = function (context, img, node, index, nodeOpacity) { - var r = this; - var pos = node.position(); - var nodeX = pos.x; - var nodeY = pos.y; - var styleObj = node.cy().style(); - var getIndexedStyle = styleObj.getIndexedStyle.bind(styleObj); - var fit = getIndexedStyle(node, 'background-fit', 'value', index); - var repeat = getIndexedStyle(node, 'background-repeat', 'value', index); - var nodeW = node.width(); - var nodeH = node.height(); - var paddingX2 = node.padding() * 2; - var nodeTW = nodeW + (getIndexedStyle(node, 'background-width-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); - var nodeTH = nodeH + (getIndexedStyle(node, 'background-height-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); - var rs = node._private.rscratch; - var clip = getIndexedStyle(node, 'background-clip', 'value', index); - var shouldClip = clip === 'node'; - var imgOpacity = getIndexedStyle(node, 'background-image-opacity', 'value', index) * nodeOpacity; - var smooth = getIndexedStyle(node, 'background-image-smoothing', 'value', index); - var imgW = img.width || img.cachedW; - var imgH = img.height || img.cachedH; - - // workaround for broken browsers like ie - if (null == imgW || null == imgH) { - document.body.appendChild(img); // eslint-disable-line no-undef - - imgW = img.cachedW = img.width || img.offsetWidth; - imgH = img.cachedH = img.height || img.offsetHeight; - document.body.removeChild(img); // eslint-disable-line no-undef - } - - var w = imgW; - var h = imgH; - if (getIndexedStyle(node, 'background-width', 'value', index) !== 'auto') { - if (getIndexedStyle(node, 'background-width', 'units', index) === '%') { - w = getIndexedStyle(node, 'background-width', 'pfValue', index) * nodeTW; - } else { - w = getIndexedStyle(node, 'background-width', 'pfValue', index); - } - } - if (getIndexedStyle(node, 'background-height', 'value', index) !== 'auto') { - if (getIndexedStyle(node, 'background-height', 'units', index) === '%') { - h = getIndexedStyle(node, 'background-height', 'pfValue', index) * nodeTH; - } else { - h = getIndexedStyle(node, 'background-height', 'pfValue', index); - } - } - if (w === 0 || h === 0) { - return; // no point in drawing empty image (and chrome is broken in this case) - } - - if (fit === 'contain') { - var scale = Math.min(nodeTW / w, nodeTH / h); - w *= scale; - h *= scale; - } else if (fit === 'cover') { - var scale = Math.max(nodeTW / w, nodeTH / h); - w *= scale; - h *= scale; - } - var x = nodeX - nodeTW / 2; // left - var posXUnits = getIndexedStyle(node, 'background-position-x', 'units', index); - var posXPfVal = getIndexedStyle(node, 'background-position-x', 'pfValue', index); - if (posXUnits === '%') { - x += (nodeTW - w) * posXPfVal; - } else { - x += posXPfVal; - } - var offXUnits = getIndexedStyle(node, 'background-offset-x', 'units', index); - var offXPfVal = getIndexedStyle(node, 'background-offset-x', 'pfValue', index); - if (offXUnits === '%') { - x += (nodeTW - w) * offXPfVal; - } else { - x += offXPfVal; - } - var y = nodeY - nodeTH / 2; // top - var posYUnits = getIndexedStyle(node, 'background-position-y', 'units', index); - var posYPfVal = getIndexedStyle(node, 'background-position-y', 'pfValue', index); - if (posYUnits === '%') { - y += (nodeTH - h) * posYPfVal; - } else { - y += posYPfVal; - } - var offYUnits = getIndexedStyle(node, 'background-offset-y', 'units', index); - var offYPfVal = getIndexedStyle(node, 'background-offset-y', 'pfValue', index); - if (offYUnits === '%') { - y += (nodeTH - h) * offYPfVal; - } else { - y += offYPfVal; - } - if (rs.pathCache) { - x -= nodeX; - y -= nodeY; - nodeX = 0; - nodeY = 0; - } - var gAlpha = context.globalAlpha; - context.globalAlpha = imgOpacity; - var smoothingEnabled = r.getImgSmoothing(context); - var isSmoothingSwitched = false; - if (smooth === 'no' && smoothingEnabled) { - r.setImgSmoothing(context, false); - isSmoothingSwitched = true; - } else if (smooth === 'yes' && !smoothingEnabled) { - r.setImgSmoothing(context, true); - isSmoothingSwitched = true; - } - if (repeat === 'no-repeat') { - if (shouldClip) { - context.save(); - if (rs.pathCache) { - context.clip(rs.pathCache); - } else { - r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH); - context.clip(); - } - } - r.safeDrawImage(context, img, 0, 0, imgW, imgH, x, y, w, h); - if (shouldClip) { - context.restore(); - } - } else { - var pattern = context.createPattern(img, repeat); - context.fillStyle = pattern; - r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH); - context.translate(x, y); - context.fill(); - context.translate(-x, -y); - } - context.globalAlpha = gAlpha; - if (isSmoothingSwitched) { - r.setImgSmoothing(context, smoothingEnabled); - } -}; - -var CRp$6 = {}; -CRp$6.eleTextBiggerThanMin = function (ele, scale) { - if (!scale) { - var zoom = ele.cy().zoom(); - var pxRatio = this.getPixelRatio(); - var lvl = Math.ceil(log2(zoom * pxRatio)); // the effective texture level - - scale = Math.pow(2, lvl); - } - var computedSize = ele.pstyle('font-size').pfValue * scale; - var minSize = ele.pstyle('min-zoomed-font-size').pfValue; - if (computedSize < minSize) { - return false; - } - return true; -}; -CRp$6.drawElementText = function (context, ele, shiftToOriginWithBb, force, prefix) { - var useEleOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; - var r = this; - if (force == null) { - if (useEleOpacity && !r.eleTextBiggerThanMin(ele)) { - return; - } - } else if (force === false) { - return; - } - if (ele.isNode()) { - var label = ele.pstyle('label'); - if (!label || !label.value) { - return; - } - var justification = r.getLabelJustification(ele); - context.textAlign = justification; - context.textBaseline = 'bottom'; - } else { - var badLine = ele.element()._private.rscratch.badLine; - var _label = ele.pstyle('label'); - var srcLabel = ele.pstyle('source-label'); - var tgtLabel = ele.pstyle('target-label'); - if (badLine || (!_label || !_label.value) && (!srcLabel || !srcLabel.value) && (!tgtLabel || !tgtLabel.value)) { - return; - } - context.textAlign = 'center'; - context.textBaseline = 'bottom'; - } - var applyRotation = !shiftToOriginWithBb; - var bb; - if (shiftToOriginWithBb) { - bb = shiftToOriginWithBb; - context.translate(-bb.x1, -bb.y1); - } - if (prefix == null) { - r.drawText(context, ele, null, applyRotation, useEleOpacity); - if (ele.isEdge()) { - r.drawText(context, ele, 'source', applyRotation, useEleOpacity); - r.drawText(context, ele, 'target', applyRotation, useEleOpacity); - } - } else { - r.drawText(context, ele, prefix, applyRotation, useEleOpacity); - } - if (shiftToOriginWithBb) { - context.translate(bb.x1, bb.y1); - } -}; -CRp$6.getFontCache = function (context) { - var cache; - this.fontCaches = this.fontCaches || []; - for (var i = 0; i < this.fontCaches.length; i++) { - cache = this.fontCaches[i]; - if (cache.context === context) { - return cache; - } - } - cache = { - context: context - }; - this.fontCaches.push(cache); - return cache; -}; - -// set up canvas context with font -// returns transformed text string -CRp$6.setupTextStyle = function (context, ele) { - var useEleOpacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - // Font style - var labelStyle = ele.pstyle('font-style').strValue; - var labelSize = ele.pstyle('font-size').pfValue + 'px'; - var labelFamily = ele.pstyle('font-family').strValue; - var labelWeight = ele.pstyle('font-weight').strValue; - var opacity = useEleOpacity ? ele.effectiveOpacity() * ele.pstyle('text-opacity').value : 1; - var outlineOpacity = ele.pstyle('text-outline-opacity').value * opacity; - var color = ele.pstyle('color').value; - var outlineColor = ele.pstyle('text-outline-color').value; - context.font = labelStyle + ' ' + labelWeight + ' ' + labelSize + ' ' + labelFamily; - context.lineJoin = 'round'; // so text outlines aren't jagged - - this.colorFillStyle(context, color[0], color[1], color[2], opacity); - this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity); -}; - -// TODO ensure re-used -function roundRect(ctx, x, y, width, height) { - var radius = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 5; - var stroke = arguments.length > 6 ? arguments[6] : undefined; - ctx.beginPath(); - ctx.moveTo(x + radius, y); - ctx.lineTo(x + width - radius, y); - ctx.quadraticCurveTo(x + width, y, x + width, y + radius); - ctx.lineTo(x + width, y + height - radius); - ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); - ctx.lineTo(x + radius, y + height); - ctx.quadraticCurveTo(x, y + height, x, y + height - radius); - ctx.lineTo(x, y + radius); - ctx.quadraticCurveTo(x, y, x + radius, y); - ctx.closePath(); - if (stroke) ctx.stroke();else ctx.fill(); -} -CRp$6.getTextAngle = function (ele, prefix) { - var theta; - var _p = ele._private; - var rscratch = _p.rscratch; - var pdash = prefix ? prefix + '-' : ''; - var rotation = ele.pstyle(pdash + 'text-rotation'); - var textAngle = getPrefixedProperty(rscratch, 'labelAngle', prefix); - if (rotation.strValue === 'autorotate') { - theta = ele.isEdge() ? textAngle : 0; - } else if (rotation.strValue === 'none') { - theta = 0; - } else { - theta = rotation.pfValue; - } - return theta; -}; -CRp$6.drawText = function (context, ele, prefix) { - var applyRotation = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var useEleOpacity = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; - var _p = ele._private; - var rscratch = _p.rscratch; - var parentOpacity = useEleOpacity ? ele.effectiveOpacity() : 1; - if (useEleOpacity && (parentOpacity === 0 || ele.pstyle('text-opacity').value === 0)) { - return; - } - - // use 'main' as an alias for the main label (i.e. null prefix) - if (prefix === 'main') { - prefix = null; - } - var textX = getPrefixedProperty(rscratch, 'labelX', prefix); - var textY = getPrefixedProperty(rscratch, 'labelY', prefix); - var orgTextX, orgTextY; // used for rotation - var text = this.getLabelText(ele, prefix); - if (text != null && text !== '' && !isNaN(textX) && !isNaN(textY)) { - this.setupTextStyle(context, ele, useEleOpacity); - var pdash = prefix ? prefix + '-' : ''; - var textW = getPrefixedProperty(rscratch, 'labelWidth', prefix); - var textH = getPrefixedProperty(rscratch, 'labelHeight', prefix); - var marginX = ele.pstyle(pdash + 'text-margin-x').pfValue; - var marginY = ele.pstyle(pdash + 'text-margin-y').pfValue; - var isEdge = ele.isEdge(); - var halign = ele.pstyle('text-halign').value; - var valign = ele.pstyle('text-valign').value; - if (isEdge) { - halign = 'center'; - valign = 'center'; - } - textX += marginX; - textY += marginY; - var theta; - if (!applyRotation) { - theta = 0; - } else { - theta = this.getTextAngle(ele, prefix); - } - if (theta !== 0) { - orgTextX = textX; - orgTextY = textY; - context.translate(orgTextX, orgTextY); - context.rotate(theta); - textX = 0; - textY = 0; - } - switch (valign) { - case 'top': - break; - case 'center': - textY += textH / 2; - break; - case 'bottom': - textY += textH; - break; - } - var backgroundOpacity = ele.pstyle('text-background-opacity').value; - var borderOpacity = ele.pstyle('text-border-opacity').value; - var textBorderWidth = ele.pstyle('text-border-width').pfValue; - var backgroundPadding = ele.pstyle('text-background-padding').pfValue; - var styleShape = ele.pstyle('text-background-shape').strValue; - var rounded = styleShape.indexOf('round') === 0; - var roundRadius = 2; - if (backgroundOpacity > 0 || textBorderWidth > 0 && borderOpacity > 0) { - var bgX = textX - backgroundPadding; - switch (halign) { - case 'left': - bgX -= textW; - break; - case 'center': - bgX -= textW / 2; - break; - } - var bgY = textY - textH - backgroundPadding; - var bgW = textW + 2 * backgroundPadding; - var bgH = textH + 2 * backgroundPadding; - if (backgroundOpacity > 0) { - var textFill = context.fillStyle; - var textBackgroundColor = ele.pstyle('text-background-color').value; - context.fillStyle = 'rgba(' + textBackgroundColor[0] + ',' + textBackgroundColor[1] + ',' + textBackgroundColor[2] + ',' + backgroundOpacity * parentOpacity + ')'; - if (rounded) { - roundRect(context, bgX, bgY, bgW, bgH, roundRadius); - } else { - context.fillRect(bgX, bgY, bgW, bgH); - } - context.fillStyle = textFill; - } - if (textBorderWidth > 0 && borderOpacity > 0) { - var textStroke = context.strokeStyle; - var textLineWidth = context.lineWidth; - var textBorderColor = ele.pstyle('text-border-color').value; - var textBorderStyle = ele.pstyle('text-border-style').value; - context.strokeStyle = 'rgba(' + textBorderColor[0] + ',' + textBorderColor[1] + ',' + textBorderColor[2] + ',' + borderOpacity * parentOpacity + ')'; - context.lineWidth = textBorderWidth; - if (context.setLineDash) { - // for very outofdate browsers - switch (textBorderStyle) { - case 'dotted': - context.setLineDash([1, 1]); - break; - case 'dashed': - context.setLineDash([4, 2]); - break; - case 'double': - context.lineWidth = textBorderWidth / 4; // 50% reserved for white between the two borders - context.setLineDash([]); - break; - case 'solid': - context.setLineDash([]); - break; - } - } - if (rounded) { - roundRect(context, bgX, bgY, bgW, bgH, roundRadius, 'stroke'); - } else { - context.strokeRect(bgX, bgY, bgW, bgH); - } - if (textBorderStyle === 'double') { - var whiteWidth = textBorderWidth / 2; - if (rounded) { - roundRect(context, bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2, roundRadius, 'stroke'); - } else { - context.strokeRect(bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2); - } - } - if (context.setLineDash) { - // for very outofdate browsers - context.setLineDash([]); - } - context.lineWidth = textLineWidth; - context.strokeStyle = textStroke; - } - } - var lineWidth = 2 * ele.pstyle('text-outline-width').pfValue; // *2 b/c the stroke is drawn centred on the middle - - if (lineWidth > 0) { - context.lineWidth = lineWidth; - } - if (ele.pstyle('text-wrap').value === 'wrap') { - var lines = getPrefixedProperty(rscratch, 'labelWrapCachedLines', prefix); - var lineHeight = getPrefixedProperty(rscratch, 'labelLineHeight', prefix); - var halfTextW = textW / 2; - var justification = this.getLabelJustification(ele); - if (justification === 'auto') ; else if (halign === 'left') { - // auto justification : right - if (justification === 'left') { - textX += -textW; - } else if (justification === 'center') { - textX += -halfTextW; - } // else same as auto - } else if (halign === 'center') { - // auto justfication : center - if (justification === 'left') { - textX += -halfTextW; - } else if (justification === 'right') { - textX += halfTextW; - } // else same as auto - } else if (halign === 'right') { - // auto justification : left - if (justification === 'center') { - textX += halfTextW; - } else if (justification === 'right') { - textX += textW; - } // else same as auto - } - - switch (valign) { - case 'top': - textY -= (lines.length - 1) * lineHeight; - break; - case 'center': - case 'bottom': - textY -= (lines.length - 1) * lineHeight; - break; - } - for (var l = 0; l < lines.length; l++) { - if (lineWidth > 0) { - context.strokeText(lines[l], textX, textY); - } - context.fillText(lines[l], textX, textY); - textY += lineHeight; - } - } else { - if (lineWidth > 0) { - context.strokeText(text, textX, textY); - } - context.fillText(text, textX, textY); - } - if (theta !== 0) { - context.rotate(-theta); - context.translate(-orgTextX, -orgTextY); - } - } -}; - -/* global Path2D */ -var CRp$5 = {}; -CRp$5.drawNode = function (context, node, shiftToOriginWithBb) { - var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; - var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; - var r = this; - var nodeWidth, nodeHeight; - var _p = node._private; - var rs = _p.rscratch; - var pos = node.position(); - if (!number$1(pos.x) || !number$1(pos.y)) { - return; // can't draw node with undefined position - } - - if (shouldDrawOpacity && !node.visible()) { - return; - } - var eleOpacity = shouldDrawOpacity ? node.effectiveOpacity() : 1; - var usePaths = r.usePaths(); - var path; - var pathCacheHit = false; - var padding = node.padding(); - nodeWidth = node.width() + 2 * padding; - nodeHeight = node.height() + 2 * padding; - - // - // setup shift - - var bb; - if (shiftToOriginWithBb) { - bb = shiftToOriginWithBb; - context.translate(-bb.x1, -bb.y1); - } - - // - // load bg image - - var bgImgProp = node.pstyle('background-image'); - var urls = bgImgProp.value; - var urlDefined = new Array(urls.length); - var image = new Array(urls.length); - var numImages = 0; - for (var i = 0; i < urls.length; i++) { - var url = urls[i]; - var defd = urlDefined[i] = url != null && url !== 'none'; - if (defd) { - var bgImgCrossOrigin = node.cy().style().getIndexedStyle(node, 'background-image-crossorigin', 'value', i); - numImages++; - - // get image, and if not loaded then ask to redraw when later loaded - image[i] = r.getCachedImage(url, bgImgCrossOrigin, function () { - _p.backgroundTimestamp = Date.now(); - node.emitAndNotify('background'); - }); - } - } - - // - // setup styles - - var darkness = node.pstyle('background-blacken').value; - var borderWidth = node.pstyle('border-width').pfValue; - var bgOpacity = node.pstyle('background-opacity').value * eleOpacity; - var borderColor = node.pstyle('border-color').value; - var borderStyle = node.pstyle('border-style').value; - var borderOpacity = node.pstyle('border-opacity').value * eleOpacity; - var outlineWidth = node.pstyle('outline-width').pfValue; - var outlineColor = node.pstyle('outline-color').value; - var outlineStyle = node.pstyle('outline-style').value; - var outlineOpacity = node.pstyle('outline-opacity').value * eleOpacity; - var outlineOffset = node.pstyle('outline-offset').value; - context.lineJoin = 'miter'; // so borders are square with the node shape - - var setupShapeColor = function setupShapeColor() { - var bgOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bgOpacity; - r.eleFillStyle(context, node, bgOpy); - }; - var setupBorderColor = function setupBorderColor() { - var bdrOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : borderOpacity; - r.colorStrokeStyle(context, borderColor[0], borderColor[1], borderColor[2], bdrOpy); - }; - var setupOutlineColor = function setupOutlineColor() { - var otlnOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : outlineOpacity; - r.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], otlnOpy); - }; - - // - // setup shape - - var getPath = function getPath(width, height, shape, points) { - var pathCache = r.nodePathCache = r.nodePathCache || []; - var key = hashStrings(shape === 'polygon' ? shape + ',' + points.join(',') : shape, '' + height, '' + width); - var cachedPath = pathCache[key]; - var path; - var cacheHit = false; - if (cachedPath != null) { - path = cachedPath; - cacheHit = true; - rs.pathCache = path; - } else { - path = new Path2D(); - pathCache[key] = rs.pathCache = path; - } - return { - path: path, - cacheHit: cacheHit - }; - }; - var styleShape = node.pstyle('shape').strValue; - var shapePts = node.pstyle('shape-polygon-points').pfValue; - if (usePaths) { - context.translate(pos.x, pos.y); - var shapePath = getPath(nodeWidth, nodeHeight, styleShape, shapePts); - path = shapePath.path; - pathCacheHit = shapePath.cacheHit; - } - var drawShape = function drawShape() { - if (!pathCacheHit) { - var npos = pos; - if (usePaths) { - npos = { - x: 0, - y: 0 - }; - } - r.nodeShapes[r.getNodeShape(node)].draw(path || context, npos.x, npos.y, nodeWidth, nodeHeight); - } - if (usePaths) { - context.fill(path); - } else { - context.fill(); - } - }; - var drawImages = function drawImages() { - var nodeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; - var inside = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var prevBging = _p.backgrounding; - var totalCompleted = 0; - for (var _i = 0; _i < image.length; _i++) { - var bgContainment = node.cy().style().getIndexedStyle(node, 'background-image-containment', 'value', _i); - if (inside && bgContainment === 'over' || !inside && bgContainment === 'inside') { - totalCompleted++; - continue; - } - if (urlDefined[_i] && image[_i].complete && !image[_i].error) { - totalCompleted++; - r.drawInscribedImage(context, image[_i], node, _i, nodeOpacity); - } - } - _p.backgrounding = !(totalCompleted === numImages); - if (prevBging !== _p.backgrounding) { - // update style b/c :backgrounding state changed - node.updateStyle(false); - } - }; - var drawPie = function drawPie() { - var redrawShape = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var pieOpacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : eleOpacity; - if (r.hasPie(node)) { - r.drawPie(context, node, pieOpacity); - - // redraw/restore path if steps after pie need it - if (redrawShape) { - if (!usePaths) { - r.nodeShapes[r.getNodeShape(node)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight); - } - } - } - }; - var darken = function darken() { - var darkenOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; - var opacity = (darkness > 0 ? darkness : -darkness) * darkenOpacity; - var c = darkness > 0 ? 0 : 255; - if (darkness !== 0) { - r.colorFillStyle(context, c, c, c, opacity); - if (usePaths) { - context.fill(path); - } else { - context.fill(); - } - } - }; - var drawBorder = function drawBorder() { - if (borderWidth > 0) { - context.lineWidth = borderWidth; - context.lineCap = 'butt'; - if (context.setLineDash) { - // for very outofdate browsers - switch (borderStyle) { - case 'dotted': - context.setLineDash([1, 1]); - break; - case 'dashed': - context.setLineDash([4, 2]); - break; - case 'solid': - case 'double': - context.setLineDash([]); - break; - } - } - if (usePaths) { - context.stroke(path); - } else { - context.stroke(); - } - if (borderStyle === 'double') { - context.lineWidth = borderWidth / 3; - var gco = context.globalCompositeOperation; - context.globalCompositeOperation = 'destination-out'; - if (usePaths) { - context.stroke(path); - } else { - context.stroke(); - } - context.globalCompositeOperation = gco; - } - - // reset in case we changed the border style - if (context.setLineDash) { - // for very outofdate browsers - context.setLineDash([]); - } - } - }; - var drawOutline = function drawOutline() { - if (outlineWidth > 0) { - context.lineWidth = outlineWidth; - context.lineCap = 'butt'; - if (context.setLineDash) { - // for very outofdate browsers - switch (outlineStyle) { - case 'dotted': - context.setLineDash([1, 1]); - break; - case 'dashed': - context.setLineDash([4, 2]); - break; - case 'solid': - case 'double': - context.setLineDash([]); - break; - } - } - var npos = pos; - if (usePaths) { - npos = { - x: 0, - y: 0 - }; - } - var shape = r.getNodeShape(node); - var scaleX = (nodeWidth + borderWidth + (outlineWidth + outlineOffset)) / nodeWidth; - var scaleY = (nodeHeight + borderWidth + (outlineWidth + outlineOffset)) / nodeHeight; - var sWidth = nodeWidth * scaleX; - var sHeight = nodeHeight * scaleY; - var points = r.nodeShapes[shape].points; - var _path; - if (usePaths) { - var outlinePath = getPath(sWidth, sHeight, shape, points); - _path = outlinePath.path; - } - - // draw the outline path, either by using expanded points or by scaling - // the dimensions, depending on shape - if (shape === "ellipse") { - r.drawEllipsePath(_path || context, npos.x, npos.y, sWidth, sHeight); - } else if (['round-diamond', 'round-heptagon', 'round-hexagon', 'round-octagon', 'round-pentagon', 'round-polygon', 'round-triangle', 'round-tag'].includes(shape)) { - var sMult = 0; - var offsetX = 0; - var offsetY = 0; - if (shape === 'round-diamond') { - sMult = (borderWidth + outlineOffset + outlineWidth) * 1.4; - } else if (shape === 'round-heptagon') { - sMult = (borderWidth + outlineOffset + outlineWidth) * 1.075; - offsetY = -(borderWidth / 2 + outlineOffset + outlineWidth) / 35; - } else if (shape === 'round-hexagon') { - sMult = (borderWidth + outlineOffset + outlineWidth) * 1.12; - } else if (shape === 'round-pentagon') { - sMult = (borderWidth + outlineOffset + outlineWidth) * 1.13; - offsetY = -(borderWidth / 2 + outlineOffset + outlineWidth) / 15; - } else if (shape === 'round-tag') { - sMult = (borderWidth + outlineOffset + outlineWidth) * 1.12; - offsetX = (borderWidth / 2 + outlineWidth + outlineOffset) * .07; - } else if (shape === 'round-triangle') { - sMult = (borderWidth + outlineOffset + outlineWidth) * (Math.PI / 2); - offsetY = -(borderWidth + outlineOffset / 2 + outlineWidth) / Math.PI; - } - if (sMult !== 0) { - scaleX = (nodeWidth + sMult) / nodeWidth; - scaleY = (nodeHeight + sMult) / nodeHeight; - } - r.drawRoundPolygonPath(_path || context, npos.x + offsetX, npos.y + offsetY, nodeWidth * scaleX, nodeHeight * scaleY, points); - } else if (['roundrectangle', 'round-rectangle'].includes(shape)) { - r.drawRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight); - } else if (['cutrectangle', 'cut-rectangle'].includes(shape)) { - r.drawCutRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight); - } else if (['bottomroundrectangle', 'bottom-round-rectangle'].includes(shape)) { - r.drawBottomRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight); - } else if (shape === "barrel") { - r.drawBarrelPath(_path || context, npos.x, npos.y, sWidth, sHeight); - } else if (shape.startsWith("polygon") || ['rhomboid', 'right-rhomboid', 'round-tag', 'tag', 'vee'].includes(shape)) { - var pad = (borderWidth + outlineWidth + outlineOffset) / nodeWidth; - points = joinLines(expandPolygon(points, pad)); - r.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points); - } else { - var _pad = (borderWidth + outlineWidth + outlineOffset) / nodeWidth; - points = joinLines(expandPolygon(points, -_pad)); - r.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points); - } - if (usePaths) { - context.stroke(_path); - } else { - context.stroke(); - } - if (outlineStyle === 'double') { - context.lineWidth = borderWidth / 3; - var gco = context.globalCompositeOperation; - context.globalCompositeOperation = 'destination-out'; - if (usePaths) { - context.stroke(_path); - } else { - context.stroke(); - } - context.globalCompositeOperation = gco; - } - - // reset in case we changed the border style - if (context.setLineDash) { - // for very outofdate browsers - context.setLineDash([]); - } - } - }; - var drawOverlay = function drawOverlay() { - if (shouldDrawOverlay) { - r.drawNodeOverlay(context, node, pos, nodeWidth, nodeHeight); - } - }; - var drawUnderlay = function drawUnderlay() { - if (shouldDrawOverlay) { - r.drawNodeUnderlay(context, node, pos, nodeWidth, nodeHeight); - } - }; - var drawText = function drawText() { - r.drawElementText(context, node, null, drawLabel); - }; - var ghost = node.pstyle('ghost').value === 'yes'; - if (ghost) { - var gx = node.pstyle('ghost-offset-x').pfValue; - var gy = node.pstyle('ghost-offset-y').pfValue; - var ghostOpacity = node.pstyle('ghost-opacity').value; - var effGhostOpacity = ghostOpacity * eleOpacity; - context.translate(gx, gy); - setupOutlineColor(); - drawOutline(); - setupShapeColor(ghostOpacity * bgOpacity); - drawShape(); - drawImages(effGhostOpacity, true); - setupBorderColor(ghostOpacity * borderOpacity); - drawBorder(); - drawPie(darkness !== 0 || borderWidth !== 0); - drawImages(effGhostOpacity, false); - darken(effGhostOpacity); - context.translate(-gx, -gy); - } - if (usePaths) { - context.translate(-pos.x, -pos.y); - } - drawUnderlay(); - if (usePaths) { - context.translate(pos.x, pos.y); - } - setupOutlineColor(); - drawOutline(); - setupShapeColor(); - drawShape(); - drawImages(eleOpacity, true); - setupBorderColor(); - drawBorder(); - drawPie(darkness !== 0 || borderWidth !== 0); - drawImages(eleOpacity, false); - darken(); - if (usePaths) { - context.translate(-pos.x, -pos.y); - } - drawText(); - drawOverlay(); - - // - // clean up shift - - if (shiftToOriginWithBb) { - context.translate(bb.x1, bb.y1); - } -}; -var drawNodeOverlayUnderlay = function drawNodeOverlayUnderlay(overlayOrUnderlay) { - if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { - throw new Error('Invalid state'); - } - return function (context, node, pos, nodeWidth, nodeHeight) { - var r = this; - if (!node.visible()) { - return; - } - var padding = node.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; - var opacity = node.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; - var color = node.pstyle("".concat(overlayOrUnderlay, "-color")).value; - var shape = node.pstyle("".concat(overlayOrUnderlay, "-shape")).value; - if (opacity > 0) { - pos = pos || node.position(); - if (nodeWidth == null || nodeHeight == null) { - var _padding = node.padding(); - nodeWidth = node.width() + 2 * _padding; - nodeHeight = node.height() + 2 * _padding; - } - r.colorFillStyle(context, color[0], color[1], color[2], opacity); - r.nodeShapes[shape].draw(context, pos.x, pos.y, nodeWidth + padding * 2, nodeHeight + padding * 2); - context.fill(); - } - }; -}; -CRp$5.drawNodeOverlay = drawNodeOverlayUnderlay('overlay'); -CRp$5.drawNodeUnderlay = drawNodeOverlayUnderlay('underlay'); - -// does the node have at least one pie piece? -CRp$5.hasPie = function (node) { - node = node[0]; // ensure ele ref - - return node._private.hasPie; -}; -CRp$5.drawPie = function (context, node, nodeOpacity, pos) { - node = node[0]; // ensure ele ref - pos = pos || node.position(); - var cyStyle = node.cy().style(); - var pieSize = node.pstyle('pie-size'); - var x = pos.x; - var y = pos.y; - var nodeW = node.width(); - var nodeH = node.height(); - var radius = Math.min(nodeW, nodeH) / 2; // must fit in node - var lastPercent = 0; // what % to continue drawing pie slices from on [0, 1] - var usePaths = this.usePaths(); - if (usePaths) { - x = 0; - y = 0; - } - if (pieSize.units === '%') { - radius = radius * pieSize.pfValue; - } else if (pieSize.pfValue !== undefined) { - radius = pieSize.pfValue / 2; - } - for (var i = 1; i <= cyStyle.pieBackgroundN; i++) { - // 1..N - var size = node.pstyle('pie-' + i + '-background-size').value; - var color = node.pstyle('pie-' + i + '-background-color').value; - var opacity = node.pstyle('pie-' + i + '-background-opacity').value * nodeOpacity; - var percent = size / 100; // map integer range [0, 100] to [0, 1] - - // percent can't push beyond 1 - if (percent + lastPercent > 1) { - percent = 1 - lastPercent; - } - var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; // start at 12 o'clock and go clockwise - var angleDelta = 2 * Math.PI * percent; - var angleEnd = angleStart + angleDelta; - - // ignore if - // - zero size - // - we're already beyond the full circle - // - adding the current slice would go beyond the full circle - if (size === 0 || lastPercent >= 1 || lastPercent + percent > 1) { - continue; - } - context.beginPath(); - context.moveTo(x, y); - context.arc(x, y, radius, angleStart, angleEnd); - context.closePath(); - this.colorFillStyle(context, color[0], color[1], color[2], opacity); - context.fill(); - lastPercent += percent; - } -}; - -var CRp$4 = {}; -var motionBlurDelay = 100; - -// var isFirefox = typeof InstallTrigger !== 'undefined'; - -CRp$4.getPixelRatio = function () { - var context = this.data.contexts[0]; - if (this.forcedPixelRatio != null) { - return this.forcedPixelRatio; - } - var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; - return (window.devicePixelRatio || 1) / backingStore; // eslint-disable-line no-undef -}; - -CRp$4.paintCache = function (context) { - var caches = this.paintCaches = this.paintCaches || []; - var needToCreateCache = true; - var cache; - for (var i = 0; i < caches.length; i++) { - cache = caches[i]; - if (cache.context === context) { - needToCreateCache = false; - break; - } - } - if (needToCreateCache) { - cache = { - context: context - }; - caches.push(cache); - } - return cache; -}; -CRp$4.createGradientStyleFor = function (context, shapeStyleName, ele, fill, opacity) { - var gradientStyle; - var usePaths = this.usePaths(); - var colors = ele.pstyle(shapeStyleName + '-gradient-stop-colors').value, - positions = ele.pstyle(shapeStyleName + '-gradient-stop-positions').pfValue; - if (fill === 'radial-gradient') { - if (ele.isEdge()) { - var start = ele.sourceEndpoint(), - end = ele.targetEndpoint(), - mid = ele.midpoint(); - var d1 = dist(start, mid); - var d2 = dist(end, mid); - gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d2)); - } else { - var pos = usePaths ? { - x: 0, - y: 0 - } : ele.position(), - width = ele.paddedWidth(), - height = ele.paddedHeight(); - gradientStyle = context.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, Math.max(width, height)); - } - } else { - if (ele.isEdge()) { - var _start = ele.sourceEndpoint(), - _end = ele.targetEndpoint(); - gradientStyle = context.createLinearGradient(_start.x, _start.y, _end.x, _end.y); - } else { - var _pos = usePaths ? { - x: 0, - y: 0 - } : ele.position(), - _width = ele.paddedWidth(), - _height = ele.paddedHeight(), - halfWidth = _width / 2, - halfHeight = _height / 2; - var direction = ele.pstyle('background-gradient-direction').value; - switch (direction) { - case 'to-bottom': - gradientStyle = context.createLinearGradient(_pos.x, _pos.y - halfHeight, _pos.x, _pos.y + halfHeight); - break; - case 'to-top': - gradientStyle = context.createLinearGradient(_pos.x, _pos.y + halfHeight, _pos.x, _pos.y - halfHeight); - break; - case 'to-left': - gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y, _pos.x - halfWidth, _pos.y); - break; - case 'to-right': - gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y, _pos.x + halfWidth, _pos.y); - break; - case 'to-bottom-right': - case 'to-right-bottom': - gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y - halfHeight, _pos.x + halfWidth, _pos.y + halfHeight); - break; - case 'to-top-right': - case 'to-right-top': - gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y + halfHeight, _pos.x + halfWidth, _pos.y - halfHeight); - break; - case 'to-bottom-left': - case 'to-left-bottom': - gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y - halfHeight, _pos.x - halfWidth, _pos.y + halfHeight); - break; - case 'to-top-left': - case 'to-left-top': - gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y + halfHeight, _pos.x - halfWidth, _pos.y - halfHeight); - break; - } - } - } - if (!gradientStyle) return null; // invalid gradient style - - var hasPositions = positions.length === colors.length; - var length = colors.length; - for (var i = 0; i < length; i++) { - gradientStyle.addColorStop(hasPositions ? positions[i] : i / (length - 1), 'rgba(' + colors[i][0] + ',' + colors[i][1] + ',' + colors[i][2] + ',' + opacity + ')'); - } - return gradientStyle; -}; -CRp$4.gradientFillStyle = function (context, ele, fill, opacity) { - var gradientStyle = this.createGradientStyleFor(context, 'background', ele, fill, opacity); - if (!gradientStyle) return null; // error - context.fillStyle = gradientStyle; -}; -CRp$4.colorFillStyle = function (context, r, g, b, a) { - context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; - // turn off for now, seems context does its own caching - - // var cache = this.paintCache(context); - - // var fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; - - // if( cache.fillStyle !== fillStyle ){ - // context.fillStyle = cache.fillStyle = fillStyle; - // } -}; - -CRp$4.eleFillStyle = function (context, ele, opacity) { - var backgroundFill = ele.pstyle('background-fill').value; - if (backgroundFill === 'linear-gradient' || backgroundFill === 'radial-gradient') { - this.gradientFillStyle(context, ele, backgroundFill, opacity); - } else { - var backgroundColor = ele.pstyle('background-color').value; - this.colorFillStyle(context, backgroundColor[0], backgroundColor[1], backgroundColor[2], opacity); - } -}; -CRp$4.gradientStrokeStyle = function (context, ele, fill, opacity) { - var gradientStyle = this.createGradientStyleFor(context, 'line', ele, fill, opacity); - if (!gradientStyle) return null; // error - context.strokeStyle = gradientStyle; -}; -CRp$4.colorStrokeStyle = function (context, r, g, b, a) { - context.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; - // turn off for now, seems context does its own caching - - // var cache = this.paintCache(context); - - // var strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; - - // if( cache.strokeStyle !== strokeStyle ){ - // context.strokeStyle = cache.strokeStyle = strokeStyle; - // } -}; - -CRp$4.eleStrokeStyle = function (context, ele, opacity) { - var lineFill = ele.pstyle('line-fill').value; - if (lineFill === 'linear-gradient' || lineFill === 'radial-gradient') { - this.gradientStrokeStyle(context, ele, lineFill, opacity); - } else { - var lineColor = ele.pstyle('line-color').value; - this.colorStrokeStyle(context, lineColor[0], lineColor[1], lineColor[2], opacity); - } -}; - -// Resize canvas -CRp$4.matchCanvasSize = function (container) { - var r = this; - var data = r.data; - var bb = r.findContainerClientCoords(); - var width = bb[2]; - var height = bb[3]; - var pixelRatio = r.getPixelRatio(); - var mbPxRatio = r.motionBlurPxRatio; - if (container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE] || container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]) { - pixelRatio = mbPxRatio; - } - var canvasWidth = width * pixelRatio; - var canvasHeight = height * pixelRatio; - var canvas; - if (canvasWidth === r.canvasWidth && canvasHeight === r.canvasHeight) { - return; // save cycles if same - } - - r.fontCaches = null; // resizing resets the style - - var canvasContainer = data.canvasContainer; - canvasContainer.style.width = width + 'px'; - canvasContainer.style.height = height + 'px'; - for (var i = 0; i < r.CANVAS_LAYERS; i++) { - canvas = data.canvases[i]; - canvas.width = canvasWidth; - canvas.height = canvasHeight; - canvas.style.width = width + 'px'; - canvas.style.height = height + 'px'; - } - for (var i = 0; i < r.BUFFER_COUNT; i++) { - canvas = data.bufferCanvases[i]; - canvas.width = canvasWidth; - canvas.height = canvasHeight; - canvas.style.width = width + 'px'; - canvas.style.height = height + 'px'; - } - r.textureMult = 1; - if (pixelRatio <= 1) { - canvas = data.bufferCanvases[r.TEXTURE_BUFFER]; - r.textureMult = 2; - canvas.width = canvasWidth * r.textureMult; - canvas.height = canvasHeight * r.textureMult; - } - r.canvasWidth = canvasWidth; - r.canvasHeight = canvasHeight; -}; -CRp$4.renderTo = function (cxt, zoom, pan, pxRatio) { - this.render({ - forcedContext: cxt, - forcedZoom: zoom, - forcedPan: pan, - drawAllLayers: true, - forcedPxRatio: pxRatio - }); -}; -CRp$4.render = function (options) { - options = options || staticEmptyObject(); - var forcedContext = options.forcedContext; - var drawAllLayers = options.drawAllLayers; - var drawOnlyNodeLayer = options.drawOnlyNodeLayer; - var forcedZoom = options.forcedZoom; - var forcedPan = options.forcedPan; - var r = this; - var pixelRatio = options.forcedPxRatio === undefined ? this.getPixelRatio() : options.forcedPxRatio; - var cy = r.cy; - var data = r.data; - var needDraw = data.canvasNeedsRedraw; - var textureDraw = r.textureOnViewport && !forcedContext && (r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming); - var motionBlur = options.motionBlur !== undefined ? options.motionBlur : r.motionBlur; - var mbPxRatio = r.motionBlurPxRatio; - var hasCompoundNodes = cy.hasCompoundNodes(); - var inNodeDragGesture = r.hoverData.draggingEles; - var inBoxSelection = r.hoverData.selecting || r.touchData.selecting ? true : false; - motionBlur = motionBlur && !forcedContext && r.motionBlurEnabled && !inBoxSelection; - var motionBlurFadeEffect = motionBlur; - if (!forcedContext) { - if (r.prevPxRatio !== pixelRatio) { - r.invalidateContainerClientCoordsCache(); - r.matchCanvasSize(r.container); - r.redrawHint('eles', true); - r.redrawHint('drag', true); - } - r.prevPxRatio = pixelRatio; - } - if (!forcedContext && r.motionBlurTimeout) { - clearTimeout(r.motionBlurTimeout); - } - if (motionBlur) { - if (r.mbFrames == null) { - r.mbFrames = 0; - } - r.mbFrames++; - if (r.mbFrames < 3) { - // need several frames before even high quality motionblur - motionBlurFadeEffect = false; - } - - // go to lower quality blurry frames when several m/b frames have been rendered (avoids flashing) - if (r.mbFrames > r.minMbLowQualFrames) { - //r.fullQualityMb = false; - r.motionBlurPxRatio = r.mbPxRBlurry; - } - } - if (r.clearingMotionBlur) { - r.motionBlurPxRatio = 1; - } - - // b/c drawToContext() may be async w.r.t. redraw(), keep track of last texture frame - // because a rogue async texture frame would clear needDraw - if (r.textureDrawLastFrame && !textureDraw) { - needDraw[r.NODE] = true; - needDraw[r.SELECT_BOX] = true; - } - var style = cy.style(); - var zoom = cy.zoom(); - var effectiveZoom = forcedZoom !== undefined ? forcedZoom : zoom; - var pan = cy.pan(); - var effectivePan = { - x: pan.x, - y: pan.y - }; - var vp = { - zoom: zoom, - pan: { - x: pan.x, - y: pan.y - } - }; - var prevVp = r.prevViewport; - var viewportIsDiff = prevVp === undefined || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y; - - // we want the low quality motionblur only when the viewport is being manipulated etc (where it's not noticed) - if (!viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes)) { - r.motionBlurPxRatio = 1; - } - if (forcedPan) { - effectivePan = forcedPan; - } - - // apply pixel ratio - - effectiveZoom *= pixelRatio; - effectivePan.x *= pixelRatio; - effectivePan.y *= pixelRatio; - var eles = r.getCachedZSortedEles(); - function mbclear(context, x, y, w, h) { - var gco = context.globalCompositeOperation; - context.globalCompositeOperation = 'destination-out'; - r.colorFillStyle(context, 255, 255, 255, r.motionBlurTransparency); - context.fillRect(x, y, w, h); - context.globalCompositeOperation = gco; - } - function setContextTransform(context, clear) { - var ePan, eZoom, w, h; - if (!r.clearingMotionBlur && (context === data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] || context === data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG])) { - ePan = { - x: pan.x * mbPxRatio, - y: pan.y * mbPxRatio - }; - eZoom = zoom * mbPxRatio; - w = r.canvasWidth * mbPxRatio; - h = r.canvasHeight * mbPxRatio; - } else { - ePan = effectivePan; - eZoom = effectiveZoom; - w = r.canvasWidth; - h = r.canvasHeight; - } - context.setTransform(1, 0, 0, 1, 0, 0); - if (clear === 'motionBlur') { - mbclear(context, 0, 0, w, h); - } else if (!forcedContext && (clear === undefined || clear)) { - context.clearRect(0, 0, w, h); - } - if (!drawAllLayers) { - context.translate(ePan.x, ePan.y); - context.scale(eZoom, eZoom); - } - if (forcedPan) { - context.translate(forcedPan.x, forcedPan.y); - } - if (forcedZoom) { - context.scale(forcedZoom, forcedZoom); - } - } - if (!textureDraw) { - r.textureDrawLastFrame = false; - } - if (textureDraw) { - r.textureDrawLastFrame = true; - if (!r.textureCache) { - r.textureCache = {}; - r.textureCache.bb = cy.mutableElements().boundingBox(); - r.textureCache.texture = r.data.bufferCanvases[r.TEXTURE_BUFFER]; - var cxt = r.data.bufferContexts[r.TEXTURE_BUFFER]; - cxt.setTransform(1, 0, 0, 1, 0, 0); - cxt.clearRect(0, 0, r.canvasWidth * r.textureMult, r.canvasHeight * r.textureMult); - r.render({ - forcedContext: cxt, - drawOnlyNodeLayer: true, - forcedPxRatio: pixelRatio * r.textureMult - }); - var vp = r.textureCache.viewport = { - zoom: cy.zoom(), - pan: cy.pan(), - width: r.canvasWidth, - height: r.canvasHeight - }; - vp.mpan = { - x: (0 - vp.pan.x) / vp.zoom, - y: (0 - vp.pan.y) / vp.zoom - }; - } - needDraw[r.DRAG] = false; - needDraw[r.NODE] = false; - var context = data.contexts[r.NODE]; - var texture = r.textureCache.texture; - var vp = r.textureCache.viewport; - context.setTransform(1, 0, 0, 1, 0, 0); - if (motionBlur) { - mbclear(context, 0, 0, vp.width, vp.height); - } else { - context.clearRect(0, 0, vp.width, vp.height); - } - var outsideBgColor = style.core('outside-texture-bg-color').value; - var outsideBgOpacity = style.core('outside-texture-bg-opacity').value; - r.colorFillStyle(context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity); - context.fillRect(0, 0, vp.width, vp.height); - var zoom = cy.zoom(); - setContextTransform(context, false); - context.clearRect(vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); - context.drawImage(texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); - } else if (r.textureOnViewport && !forcedContext) { - // clear the cache since we don't need it - r.textureCache = null; - } - var extent = cy.extent(); - var vpManip = r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming || r.hoverData.draggingEles || r.cy.animated(); - var hideEdges = r.hideEdgesOnViewport && vpManip; - var needMbClear = []; - needMbClear[r.NODE] = !needDraw[r.NODE] && motionBlur && !r.clearedForMotionBlur[r.NODE] || r.clearingMotionBlur; - if (needMbClear[r.NODE]) { - r.clearedForMotionBlur[r.NODE] = true; - } - needMbClear[r.DRAG] = !needDraw[r.DRAG] && motionBlur && !r.clearedForMotionBlur[r.DRAG] || r.clearingMotionBlur; - if (needMbClear[r.DRAG]) { - r.clearedForMotionBlur[r.DRAG] = true; - } - if (needDraw[r.NODE] || drawAllLayers || drawOnlyNodeLayer || needMbClear[r.NODE]) { - var useBuffer = motionBlur && !needMbClear[r.NODE] && mbPxRatio !== 1; - var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] : data.contexts[r.NODE]); - var clear = motionBlur && !useBuffer ? 'motionBlur' : undefined; - setContextTransform(context, clear); - if (hideEdges) { - r.drawCachedNodes(context, eles.nondrag, pixelRatio, extent); - } else { - r.drawLayeredElements(context, eles.nondrag, pixelRatio, extent); - } - if (r.debug) { - r.drawDebugPoints(context, eles.nondrag); - } - if (!drawAllLayers && !motionBlur) { - needDraw[r.NODE] = false; - } - } - if (!drawOnlyNodeLayer && (needDraw[r.DRAG] || drawAllLayers || needMbClear[r.DRAG])) { - var useBuffer = motionBlur && !needMbClear[r.DRAG] && mbPxRatio !== 1; - var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG] : data.contexts[r.DRAG]); - setContextTransform(context, motionBlur && !useBuffer ? 'motionBlur' : undefined); - if (hideEdges) { - r.drawCachedNodes(context, eles.drag, pixelRatio, extent); - } else { - r.drawCachedElements(context, eles.drag, pixelRatio, extent); - } - if (r.debug) { - r.drawDebugPoints(context, eles.drag); - } - if (!drawAllLayers && !motionBlur) { - needDraw[r.DRAG] = false; - } - } - if (r.showFps || !drawOnlyNodeLayer && needDraw[r.SELECT_BOX] && !drawAllLayers) { - var context = forcedContext || data.contexts[r.SELECT_BOX]; - setContextTransform(context); - if (r.selection[4] == 1 && (r.hoverData.selecting || r.touchData.selecting)) { - var zoom = r.cy.zoom(); - var borderWidth = style.core('selection-box-border-width').value / zoom; - context.lineWidth = borderWidth; - context.fillStyle = 'rgba(' + style.core('selection-box-color').value[0] + ',' + style.core('selection-box-color').value[1] + ',' + style.core('selection-box-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; - context.fillRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); - if (borderWidth > 0) { - context.strokeStyle = 'rgba(' + style.core('selection-box-border-color').value[0] + ',' + style.core('selection-box-border-color').value[1] + ',' + style.core('selection-box-border-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; - context.strokeRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); - } - } - if (data.bgActivePosistion && !r.hoverData.selecting) { - var zoom = r.cy.zoom(); - var pos = data.bgActivePosistion; - context.fillStyle = 'rgba(' + style.core('active-bg-color').value[0] + ',' + style.core('active-bg-color').value[1] + ',' + style.core('active-bg-color').value[2] + ',' + style.core('active-bg-opacity').value + ')'; - context.beginPath(); - context.arc(pos.x, pos.y, style.core('active-bg-size').pfValue / zoom, 0, 2 * Math.PI); - context.fill(); - } - var timeToRender = r.lastRedrawTime; - if (r.showFps && timeToRender) { - timeToRender = Math.round(timeToRender); - var fps = Math.round(1000 / timeToRender); - context.setTransform(1, 0, 0, 1, 0, 0); - context.fillStyle = 'rgba(255, 0, 0, 0.75)'; - context.strokeStyle = 'rgba(255, 0, 0, 0.75)'; - context.lineWidth = 1; - context.fillText('1 frame = ' + timeToRender + ' ms = ' + fps + ' fps', 0, 20); - var maxFps = 60; - context.strokeRect(0, 30, 250, 20); - context.fillRect(0, 30, 250 * Math.min(fps / maxFps, 1), 20); - } - if (!drawAllLayers) { - needDraw[r.SELECT_BOX] = false; - } - } - - // motionblur: blit rendered blurry frames - if (motionBlur && mbPxRatio !== 1) { - var cxtNode = data.contexts[r.NODE]; - var txtNode = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE]; - var cxtDrag = data.contexts[r.DRAG]; - var txtDrag = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]; - var drawMotionBlur = function drawMotionBlur(cxt, txt, needClear) { - cxt.setTransform(1, 0, 0, 1, 0, 0); - if (needClear || !motionBlurFadeEffect) { - cxt.clearRect(0, 0, r.canvasWidth, r.canvasHeight); - } else { - mbclear(cxt, 0, 0, r.canvasWidth, r.canvasHeight); - } - var pxr = mbPxRatio; - cxt.drawImage(txt, - // img - 0, 0, - // sx, sy - r.canvasWidth * pxr, r.canvasHeight * pxr, - // sw, sh - 0, 0, - // x, y - r.canvasWidth, r.canvasHeight // w, h - ); - }; - - if (needDraw[r.NODE] || needMbClear[r.NODE]) { - drawMotionBlur(cxtNode, txtNode, needMbClear[r.NODE]); - needDraw[r.NODE] = false; - } - if (needDraw[r.DRAG] || needMbClear[r.DRAG]) { - drawMotionBlur(cxtDrag, txtDrag, needMbClear[r.DRAG]); - needDraw[r.DRAG] = false; - } - } - r.prevViewport = vp; - if (r.clearingMotionBlur) { - r.clearingMotionBlur = false; - r.motionBlurCleared = true; - r.motionBlur = true; - } - if (motionBlur) { - r.motionBlurTimeout = setTimeout(function () { - r.motionBlurTimeout = null; - r.clearedForMotionBlur[r.NODE] = false; - r.clearedForMotionBlur[r.DRAG] = false; - r.motionBlur = false; - r.clearingMotionBlur = !textureDraw; - r.mbFrames = 0; - needDraw[r.NODE] = true; - needDraw[r.DRAG] = true; - r.redraw(); - }, motionBlurDelay); - } - if (!forcedContext) { - cy.emit('render'); - } -}; - -var CRp$3 = {}; - -// @O Polygon drawing -CRp$3.drawPolygonPath = function (context, x, y, width, height, points) { - var halfW = width / 2; - var halfH = height / 2; - if (context.beginPath) { - context.beginPath(); - } - context.moveTo(x + halfW * points[0], y + halfH * points[1]); - for (var i = 1; i < points.length / 2; i++) { - context.lineTo(x + halfW * points[i * 2], y + halfH * points[i * 2 + 1]); - } - context.closePath(); -}; -CRp$3.drawRoundPolygonPath = function (context, x, y, width, height, points) { - var halfW = width / 2; - var halfH = height / 2; - var cornerRadius = getRoundPolygonRadius(width, height); - if (context.beginPath) { - context.beginPath(); - } - for (var _i = 0; _i < points.length / 4; _i++) { - var sourceUv = void 0, - destUv = void 0; - if (_i === 0) { - sourceUv = points.length - 2; - } else { - sourceUv = _i * 4 - 2; - } - destUv = _i * 4 + 2; - var px = x + halfW * points[_i * 4]; - var py = y + halfH * points[_i * 4 + 1]; - var cosTheta = -points[sourceUv] * points[destUv] - points[sourceUv + 1] * points[destUv + 1]; - var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); - var cp0x = px - offset * points[sourceUv]; - var cp0y = py - offset * points[sourceUv + 1]; - var cp1x = px + offset * points[destUv]; - var cp1y = py + offset * points[destUv + 1]; - if (_i === 0) { - context.moveTo(cp0x, cp0y); - } else { - context.lineTo(cp0x, cp0y); - } - context.arcTo(px, py, cp1x, cp1y, cornerRadius); - } - context.closePath(); -}; - -// Round rectangle drawing -CRp$3.drawRoundRectanglePath = function (context, x, y, width, height) { - var halfWidth = width / 2; - var halfHeight = height / 2; - var cornerRadius = getRoundRectangleRadius(width, height); - if (context.beginPath) { - context.beginPath(); - } - - // Start at top middle - context.moveTo(x, y - halfHeight); - // Arc from middle top to right side - context.arcTo(x + halfWidth, y - halfHeight, x + halfWidth, y, cornerRadius); - // Arc from right side to bottom - context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); - // Arc from bottom to left side - context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); - // Arc from left side to topBorder - context.arcTo(x - halfWidth, y - halfHeight, x, y - halfHeight, cornerRadius); - // Join line - context.lineTo(x, y - halfHeight); - context.closePath(); -}; -CRp$3.drawBottomRoundRectanglePath = function (context, x, y, width, height) { - var halfWidth = width / 2; - var halfHeight = height / 2; - var cornerRadius = getRoundRectangleRadius(width, height); - if (context.beginPath) { - context.beginPath(); - } - - // Start at top middle - context.moveTo(x, y - halfHeight); - context.lineTo(x + halfWidth, y - halfHeight); - context.lineTo(x + halfWidth, y); - context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); - context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); - context.lineTo(x - halfWidth, y - halfHeight); - context.lineTo(x, y - halfHeight); - context.closePath(); -}; -CRp$3.drawCutRectanglePath = function (context, x, y, width, height) { - var halfWidth = width / 2; - var halfHeight = height / 2; - var cornerLength = getCutRectangleCornerLength(); - if (context.beginPath) { - context.beginPath(); - } - context.moveTo(x - halfWidth + cornerLength, y - halfHeight); - context.lineTo(x + halfWidth - cornerLength, y - halfHeight); - context.lineTo(x + halfWidth, y - halfHeight + cornerLength); - context.lineTo(x + halfWidth, y + halfHeight - cornerLength); - context.lineTo(x + halfWidth - cornerLength, y + halfHeight); - context.lineTo(x - halfWidth + cornerLength, y + halfHeight); - context.lineTo(x - halfWidth, y + halfHeight - cornerLength); - context.lineTo(x - halfWidth, y - halfHeight + cornerLength); - context.closePath(); -}; -CRp$3.drawBarrelPath = function (context, x, y, width, height) { - var halfWidth = width / 2; - var halfHeight = height / 2; - var xBegin = x - halfWidth; - var xEnd = x + halfWidth; - var yBegin = y - halfHeight; - var yEnd = y + halfHeight; - var barrelCurveConstants = getBarrelCurveConstants(width, height); - var wOffset = barrelCurveConstants.widthOffset; - var hOffset = barrelCurveConstants.heightOffset; - var ctrlPtXOffset = barrelCurveConstants.ctrlPtOffsetPct * wOffset; - if (context.beginPath) { - context.beginPath(); - } - context.moveTo(xBegin, yBegin + hOffset); - context.lineTo(xBegin, yEnd - hOffset); - context.quadraticCurveTo(xBegin + ctrlPtXOffset, yEnd, xBegin + wOffset, yEnd); - context.lineTo(xEnd - wOffset, yEnd); - context.quadraticCurveTo(xEnd - ctrlPtXOffset, yEnd, xEnd, yEnd - hOffset); - context.lineTo(xEnd, yBegin + hOffset); - context.quadraticCurveTo(xEnd - ctrlPtXOffset, yBegin, xEnd - wOffset, yBegin); - context.lineTo(xBegin + wOffset, yBegin); - context.quadraticCurveTo(xBegin + ctrlPtXOffset, yBegin, xBegin, yBegin + hOffset); - context.closePath(); -}; -var sin0 = Math.sin(0); -var cos0 = Math.cos(0); -var sin = {}; -var cos = {}; -var ellipseStepSize = Math.PI / 40; -for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { - sin[i] = Math.sin(i); - cos[i] = Math.cos(i); -} -CRp$3.drawEllipsePath = function (context, centerX, centerY, width, height) { - if (context.beginPath) { - context.beginPath(); - } - if (context.ellipse) { - context.ellipse(centerX, centerY, width / 2, height / 2, 0, 0, 2 * Math.PI); - } else { - var xPos, yPos; - var rw = width / 2; - var rh = height / 2; - for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { - xPos = centerX - rw * sin[i] * sin0 + rw * cos[i] * cos0; - yPos = centerY + rh * cos[i] * sin0 + rh * sin[i] * cos0; - if (i === 0) { - context.moveTo(xPos, yPos); - } else { - context.lineTo(xPos, yPos); - } - } - } - context.closePath(); -}; - -/* global atob, ArrayBuffer, Uint8Array, Blob */ -var CRp$2 = {}; -CRp$2.createBuffer = function (w, h) { - var buffer = document.createElement('canvas'); // eslint-disable-line no-undef - buffer.width = w; - buffer.height = h; - return [buffer, buffer.getContext('2d')]; -}; -CRp$2.bufferCanvasImage = function (options) { - var cy = this.cy; - var eles = cy.mutableElements(); - var bb = eles.boundingBox(); - var ctrRect = this.findContainerClientCoords(); - var width = options.full ? Math.ceil(bb.w) : ctrRect[2]; - var height = options.full ? Math.ceil(bb.h) : ctrRect[3]; - var specdMaxDims = number$1(options.maxWidth) || number$1(options.maxHeight); - var pxRatio = this.getPixelRatio(); - var scale = 1; - if (options.scale !== undefined) { - width *= options.scale; - height *= options.scale; - scale = options.scale; - } else if (specdMaxDims) { - var maxScaleW = Infinity; - var maxScaleH = Infinity; - if (number$1(options.maxWidth)) { - maxScaleW = scale * options.maxWidth / width; - } - if (number$1(options.maxHeight)) { - maxScaleH = scale * options.maxHeight / height; - } - scale = Math.min(maxScaleW, maxScaleH); - width *= scale; - height *= scale; - } - if (!specdMaxDims) { - width *= pxRatio; - height *= pxRatio; - scale *= pxRatio; - } - var buffCanvas = document.createElement('canvas'); // eslint-disable-line no-undef - - buffCanvas.width = width; - buffCanvas.height = height; - buffCanvas.style.width = width + 'px'; - buffCanvas.style.height = height + 'px'; - var buffCxt = buffCanvas.getContext('2d'); - - // Rasterize the layers, but only if container has nonzero size - if (width > 0 && height > 0) { - buffCxt.clearRect(0, 0, width, height); - buffCxt.globalCompositeOperation = 'source-over'; - var zsortedEles = this.getCachedZSortedEles(); - if (options.full) { - // draw the full bounds of the graph - buffCxt.translate(-bb.x1 * scale, -bb.y1 * scale); - buffCxt.scale(scale, scale); - this.drawElements(buffCxt, zsortedEles); - buffCxt.scale(1 / scale, 1 / scale); - buffCxt.translate(bb.x1 * scale, bb.y1 * scale); - } else { - // draw the current view - var pan = cy.pan(); - var translation = { - x: pan.x * scale, - y: pan.y * scale - }; - scale *= cy.zoom(); - buffCxt.translate(translation.x, translation.y); - buffCxt.scale(scale, scale); - this.drawElements(buffCxt, zsortedEles); - buffCxt.scale(1 / scale, 1 / scale); - buffCxt.translate(-translation.x, -translation.y); - } - - // need to fill bg at end like this in order to fill cleared transparent pixels in jpgs - if (options.bg) { - buffCxt.globalCompositeOperation = 'destination-over'; - buffCxt.fillStyle = options.bg; - buffCxt.rect(0, 0, width, height); - buffCxt.fill(); - } - } - return buffCanvas; -}; -function b64ToBlob(b64, mimeType) { - var bytes = atob(b64); - var buff = new ArrayBuffer(bytes.length); - var buffUint8 = new Uint8Array(buff); - for (var i = 0; i < bytes.length; i++) { - buffUint8[i] = bytes.charCodeAt(i); - } - return new Blob([buff], { - type: mimeType - }); -} -function b64UriToB64(b64uri) { - var i = b64uri.indexOf(','); - return b64uri.substr(i + 1); -} -function output(options, canvas, mimeType) { - var getB64Uri = function getB64Uri() { - return canvas.toDataURL(mimeType, options.quality); - }; - switch (options.output) { - case 'blob-promise': - return new Promise$1(function (resolve, reject) { - try { - canvas.toBlob(function (blob) { - if (blob != null) { - resolve(blob); - } else { - reject(new Error('`canvas.toBlob()` sent a null value in its callback')); - } - }, mimeType, options.quality); - } catch (err) { - reject(err); - } - }); - case 'blob': - return b64ToBlob(b64UriToB64(getB64Uri()), mimeType); - case 'base64': - return b64UriToB64(getB64Uri()); - case 'base64uri': - default: - return getB64Uri(); - } -} -CRp$2.png = function (options) { - return output(options, this.bufferCanvasImage(options), 'image/png'); -}; -CRp$2.jpg = function (options) { - return output(options, this.bufferCanvasImage(options), 'image/jpeg'); -}; - -var CRp$1 = {}; -CRp$1.nodeShapeImpl = function (name, context, centerX, centerY, width, height, points) { - switch (name) { - case 'ellipse': - return this.drawEllipsePath(context, centerX, centerY, width, height); - case 'polygon': - return this.drawPolygonPath(context, centerX, centerY, width, height, points); - case 'round-polygon': - return this.drawRoundPolygonPath(context, centerX, centerY, width, height, points); - case 'roundrectangle': - case 'round-rectangle': - return this.drawRoundRectanglePath(context, centerX, centerY, width, height); - case 'cutrectangle': - case 'cut-rectangle': - return this.drawCutRectanglePath(context, centerX, centerY, width, height); - case 'bottomroundrectangle': - case 'bottom-round-rectangle': - return this.drawBottomRoundRectanglePath(context, centerX, centerY, width, height); - case 'barrel': - return this.drawBarrelPath(context, centerX, centerY, width, height); - } -}; - -var CR = CanvasRenderer; -var CRp = CanvasRenderer.prototype; -CRp.CANVAS_LAYERS = 3; -// -CRp.SELECT_BOX = 0; -CRp.DRAG = 1; -CRp.NODE = 2; -CRp.BUFFER_COUNT = 3; -// -CRp.TEXTURE_BUFFER = 0; -CRp.MOTIONBLUR_BUFFER_NODE = 1; -CRp.MOTIONBLUR_BUFFER_DRAG = 2; -function CanvasRenderer(options) { - var r = this; - r.data = { - canvases: new Array(CRp.CANVAS_LAYERS), - contexts: new Array(CRp.CANVAS_LAYERS), - canvasNeedsRedraw: new Array(CRp.CANVAS_LAYERS), - bufferCanvases: new Array(CRp.BUFFER_COUNT), - bufferContexts: new Array(CRp.CANVAS_LAYERS) - }; - var tapHlOffAttr = '-webkit-tap-highlight-color'; - var tapHlOffStyle = 'rgba(0,0,0,0)'; - r.data.canvasContainer = document.createElement('div'); // eslint-disable-line no-undef - var containerStyle = r.data.canvasContainer.style; - r.data.canvasContainer.style[tapHlOffAttr] = tapHlOffStyle; - containerStyle.position = 'relative'; - containerStyle.zIndex = '0'; - containerStyle.overflow = 'hidden'; - var container = options.cy.container(); - container.appendChild(r.data.canvasContainer); - container.style[tapHlOffAttr] = tapHlOffStyle; - var styleMap = { - '-webkit-user-select': 'none', - '-moz-user-select': '-moz-none', - 'user-select': 'none', - '-webkit-tap-highlight-color': 'rgba(0,0,0,0)', - 'outline-style': 'none' - }; - if (ms()) { - styleMap['-ms-touch-action'] = 'none'; - styleMap['touch-action'] = 'none'; - } - for (var i = 0; i < CRp.CANVAS_LAYERS; i++) { - var canvas = r.data.canvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef - r.data.contexts[i] = canvas.getContext('2d'); - Object.keys(styleMap).forEach(function (k) { - canvas.style[k] = styleMap[k]; - }); - canvas.style.position = 'absolute'; - canvas.setAttribute('data-id', 'layer' + i); - canvas.style.zIndex = String(CRp.CANVAS_LAYERS - i); - r.data.canvasContainer.appendChild(canvas); - r.data.canvasNeedsRedraw[i] = false; - } - r.data.topCanvas = r.data.canvases[0]; - r.data.canvases[CRp.NODE].setAttribute('data-id', 'layer' + CRp.NODE + '-node'); - r.data.canvases[CRp.SELECT_BOX].setAttribute('data-id', 'layer' + CRp.SELECT_BOX + '-selectbox'); - r.data.canvases[CRp.DRAG].setAttribute('data-id', 'layer' + CRp.DRAG + '-drag'); - for (var i = 0; i < CRp.BUFFER_COUNT; i++) { - r.data.bufferCanvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef - r.data.bufferContexts[i] = r.data.bufferCanvases[i].getContext('2d'); - r.data.bufferCanvases[i].style.position = 'absolute'; - r.data.bufferCanvases[i].setAttribute('data-id', 'buffer' + i); - r.data.bufferCanvases[i].style.zIndex = String(-i - 1); - r.data.bufferCanvases[i].style.visibility = 'hidden'; - //r.data.canvasContainer.appendChild(r.data.bufferCanvases[i]); - } - - r.pathsEnabled = true; - var emptyBb = makeBoundingBox(); - var getBoxCenter = function getBoxCenter(bb) { - return { - x: (bb.x1 + bb.x2) / 2, - y: (bb.y1 + bb.y2) / 2 - }; - }; - var getCenterOffset = function getCenterOffset(bb) { - return { - x: -bb.w / 2, - y: -bb.h / 2 - }; - }; - var backgroundTimestampHasChanged = function backgroundTimestampHasChanged(ele) { - var _p = ele[0]._private; - var same = _p.oldBackgroundTimestamp === _p.backgroundTimestamp; - return !same; - }; - var getStyleKey = function getStyleKey(ele) { - return ele[0]._private.nodeKey; - }; - var getLabelKey = function getLabelKey(ele) { - return ele[0]._private.labelStyleKey; - }; - var getSourceLabelKey = function getSourceLabelKey(ele) { - return ele[0]._private.sourceLabelStyleKey; - }; - var getTargetLabelKey = function getTargetLabelKey(ele) { - return ele[0]._private.targetLabelStyleKey; - }; - var drawElement = function drawElement(context, ele, bb, scaledLabelShown, useEleOpacity) { - return r.drawElement(context, ele, bb, false, false, useEleOpacity); - }; - var drawLabel = function drawLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { - return r.drawElementText(context, ele, bb, scaledLabelShown, 'main', useEleOpacity); - }; - var drawSourceLabel = function drawSourceLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { - return r.drawElementText(context, ele, bb, scaledLabelShown, 'source', useEleOpacity); - }; - var drawTargetLabel = function drawTargetLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { - return r.drawElementText(context, ele, bb, scaledLabelShown, 'target', useEleOpacity); - }; - var getElementBox = function getElementBox(ele) { - ele.boundingBox(); - return ele[0]._private.bodyBounds; - }; - var getLabelBox = function getLabelBox(ele) { - ele.boundingBox(); - return ele[0]._private.labelBounds.main || emptyBb; - }; - var getSourceLabelBox = function getSourceLabelBox(ele) { - ele.boundingBox(); - return ele[0]._private.labelBounds.source || emptyBb; - }; - var getTargetLabelBox = function getTargetLabelBox(ele) { - ele.boundingBox(); - return ele[0]._private.labelBounds.target || emptyBb; - }; - var isLabelVisibleAtScale = function isLabelVisibleAtScale(ele, scaledLabelShown) { - return scaledLabelShown; - }; - var getElementRotationPoint = function getElementRotationPoint(ele) { - return getBoxCenter(getElementBox(ele)); - }; - var addTextMargin = function addTextMargin(prefix, pt, ele) { - var pre = prefix ? prefix + '-' : ''; - return { - x: pt.x + ele.pstyle(pre + 'text-margin-x').pfValue, - y: pt.y + ele.pstyle(pre + 'text-margin-y').pfValue - }; - }; - var getRsPt = function getRsPt(ele, x, y) { - var rs = ele[0]._private.rscratch; - return { - x: rs[x], - y: rs[y] - }; - }; - var getLabelRotationPoint = function getLabelRotationPoint(ele) { - return addTextMargin('', getRsPt(ele, 'labelX', 'labelY'), ele); - }; - var getSourceLabelRotationPoint = function getSourceLabelRotationPoint(ele) { - return addTextMargin('source', getRsPt(ele, 'sourceLabelX', 'sourceLabelY'), ele); - }; - var getTargetLabelRotationPoint = function getTargetLabelRotationPoint(ele) { - return addTextMargin('target', getRsPt(ele, 'targetLabelX', 'targetLabelY'), ele); - }; - var getElementRotationOffset = function getElementRotationOffset(ele) { - return getCenterOffset(getElementBox(ele)); - }; - var getSourceLabelRotationOffset = function getSourceLabelRotationOffset(ele) { - return getCenterOffset(getSourceLabelBox(ele)); - }; - var getTargetLabelRotationOffset = function getTargetLabelRotationOffset(ele) { - return getCenterOffset(getTargetLabelBox(ele)); - }; - var getLabelRotationOffset = function getLabelRotationOffset(ele) { - var bb = getLabelBox(ele); - var p = getCenterOffset(getLabelBox(ele)); - if (ele.isNode()) { - switch (ele.pstyle('text-halign').value) { - case 'left': - p.x = -bb.w; - break; - case 'right': - p.x = 0; - break; - } - switch (ele.pstyle('text-valign').value) { - case 'top': - p.y = -bb.h; - break; - case 'bottom': - p.y = 0; - break; - } - } - return p; - }; - var eleTxrCache = r.data.eleTxrCache = new ElementTextureCache(r, { - getKey: getStyleKey, - doesEleInvalidateKey: backgroundTimestampHasChanged, - drawElement: drawElement, - getBoundingBox: getElementBox, - getRotationPoint: getElementRotationPoint, - getRotationOffset: getElementRotationOffset, - allowEdgeTxrCaching: false, - allowParentTxrCaching: false - }); - var lblTxrCache = r.data.lblTxrCache = new ElementTextureCache(r, { - getKey: getLabelKey, - drawElement: drawLabel, - getBoundingBox: getLabelBox, - getRotationPoint: getLabelRotationPoint, - getRotationOffset: getLabelRotationOffset, - isVisible: isLabelVisibleAtScale - }); - var slbTxrCache = r.data.slbTxrCache = new ElementTextureCache(r, { - getKey: getSourceLabelKey, - drawElement: drawSourceLabel, - getBoundingBox: getSourceLabelBox, - getRotationPoint: getSourceLabelRotationPoint, - getRotationOffset: getSourceLabelRotationOffset, - isVisible: isLabelVisibleAtScale - }); - var tlbTxrCache = r.data.tlbTxrCache = new ElementTextureCache(r, { - getKey: getTargetLabelKey, - drawElement: drawTargetLabel, - getBoundingBox: getTargetLabelBox, - getRotationPoint: getTargetLabelRotationPoint, - getRotationOffset: getTargetLabelRotationOffset, - isVisible: isLabelVisibleAtScale - }); - var lyrTxrCache = r.data.lyrTxrCache = new LayeredTextureCache(r); - r.onUpdateEleCalcs(function invalidateTextureCaches(willDraw, eles) { - // each cache should check for sub-key diff to see that the update affects that cache particularly - eleTxrCache.invalidateElements(eles); - lblTxrCache.invalidateElements(eles); - slbTxrCache.invalidateElements(eles); - tlbTxrCache.invalidateElements(eles); - - // any change invalidates the layers - lyrTxrCache.invalidateElements(eles); - - // update the old bg timestamp so diffs can be done in the ele txr caches - for (var _i = 0; _i < eles.length; _i++) { - var _p = eles[_i]._private; - _p.oldBackgroundTimestamp = _p.backgroundTimestamp; - } - }); - var refineInLayers = function refineInLayers(reqs) { - for (var i = 0; i < reqs.length; i++) { - lyrTxrCache.enqueueElementRefinement(reqs[i].ele); - } - }; - eleTxrCache.onDequeue(refineInLayers); - lblTxrCache.onDequeue(refineInLayers); - slbTxrCache.onDequeue(refineInLayers); - tlbTxrCache.onDequeue(refineInLayers); -} -CRp.redrawHint = function (group, bool) { - var r = this; - switch (group) { - case 'eles': - r.data.canvasNeedsRedraw[CRp.NODE] = bool; - break; - case 'drag': - r.data.canvasNeedsRedraw[CRp.DRAG] = bool; - break; - case 'select': - r.data.canvasNeedsRedraw[CRp.SELECT_BOX] = bool; - break; - } -}; - -// whether to use Path2D caching for drawing -var pathsImpld = typeof Path2D !== 'undefined'; -CRp.path2dEnabled = function (on) { - if (on === undefined) { - return this.pathsEnabled; - } - this.pathsEnabled = on ? true : false; -}; -CRp.usePaths = function () { - return pathsImpld && this.pathsEnabled; -}; -CRp.setImgSmoothing = function (context, bool) { - if (context.imageSmoothingEnabled != null) { - context.imageSmoothingEnabled = bool; - } else { - context.webkitImageSmoothingEnabled = bool; - context.mozImageSmoothingEnabled = bool; - context.msImageSmoothingEnabled = bool; - } -}; -CRp.getImgSmoothing = function (context) { - if (context.imageSmoothingEnabled != null) { - return context.imageSmoothingEnabled; - } else { - return context.webkitImageSmoothingEnabled || context.mozImageSmoothingEnabled || context.msImageSmoothingEnabled; - } -}; -CRp.makeOffscreenCanvas = function (width, height) { - var canvas; - if ((typeof OffscreenCanvas === "undefined" ? "undefined" : _typeof(OffscreenCanvas)) !== ("undefined" )) { - canvas = new OffscreenCanvas(width, height); - } else { - canvas = document.createElement('canvas'); // eslint-disable-line no-undef - canvas.width = width; - canvas.height = height; - } - return canvas; -}; -[CRp$a, CRp$9, CRp$8, CRp$7, CRp$6, CRp$5, CRp$4, CRp$3, CRp$2, CRp$1].forEach(function (props) { - extend(CRp, props); -}); - -var renderer = [{ - name: 'null', - impl: NullRenderer -}, { - name: 'base', - impl: BR -}, { - name: 'canvas', - impl: CR -}]; - -var incExts = [{ - type: 'layout', - extensions: layout -}, { - type: 'renderer', - extensions: renderer -}]; - -// registered extensions to cytoscape, indexed by name -var extensions = {}; - -// registered modules for extensions, indexed by name -var modules = {}; -function setExtension(type, name, registrant) { - var ext = registrant; - var overrideErr = function overrideErr(field) { - warn('Can not register `' + name + '` for `' + type + '` since `' + field + '` already exists in the prototype and can not be overridden'); - }; - if (type === 'core') { - if (Core.prototype[name]) { - return overrideErr(name); - } else { - Core.prototype[name] = registrant; - } - } else if (type === 'collection') { - if (Collection.prototype[name]) { - return overrideErr(name); - } else { - Collection.prototype[name] = registrant; - } - } else if (type === 'layout') { - // fill in missing layout functions in the prototype - - var Layout = function Layout(options) { - this.options = options; - registrant.call(this, options); - - // make sure layout has _private for use w/ std apis like .on() - if (!plainObject(this._private)) { - this._private = {}; - } - this._private.cy = options.cy; - this._private.listeners = []; - this.createEmitter(); - }; - var layoutProto = Layout.prototype = Object.create(registrant.prototype); - var optLayoutFns = []; - for (var i = 0; i < optLayoutFns.length; i++) { - var fnName = optLayoutFns[i]; - layoutProto[fnName] = layoutProto[fnName] || function () { - return this; - }; - } - - // either .start() or .run() is defined, so autogen the other - if (layoutProto.start && !layoutProto.run) { - layoutProto.run = function () { - this.start(); - return this; - }; - } else if (!layoutProto.start && layoutProto.run) { - layoutProto.start = function () { - this.run(); - return this; - }; - } - var regStop = registrant.prototype.stop; - layoutProto.stop = function () { - var opts = this.options; - if (opts && opts.animate) { - var anis = this.animations; - if (anis) { - for (var _i = 0; _i < anis.length; _i++) { - anis[_i].stop(); - } - } - } - if (regStop) { - regStop.call(this); - } else { - this.emit('layoutstop'); - } - return this; - }; - if (!layoutProto.destroy) { - layoutProto.destroy = function () { - return this; - }; - } - layoutProto.cy = function () { - return this._private.cy; - }; - var getCy = function getCy(layout) { - return layout._private.cy; - }; - var emitterOpts = { - addEventFields: function addEventFields(layout, evt) { - evt.layout = layout; - evt.cy = getCy(layout); - evt.target = layout; - }, - bubble: function bubble() { - return true; - }, - parent: function parent(layout) { - return getCy(layout); - } - }; - extend(layoutProto, { - createEmitter: function createEmitter() { - this._private.emitter = new Emitter(emitterOpts, this); - return this; - }, - emitter: function emitter() { - return this._private.emitter; - }, - on: function on(evt, cb) { - this.emitter().on(evt, cb); - return this; - }, - one: function one(evt, cb) { - this.emitter().one(evt, cb); - return this; - }, - once: function once(evt, cb) { - this.emitter().one(evt, cb); - return this; - }, - removeListener: function removeListener(evt, cb) { - this.emitter().removeListener(evt, cb); - return this; - }, - removeAllListeners: function removeAllListeners() { - this.emitter().removeAllListeners(); - return this; - }, - emit: function emit(evt, params) { - this.emitter().emit(evt, params); - return this; - } - }); - define.eventAliasesOn(layoutProto); - ext = Layout; // replace with our wrapped layout - } else if (type === 'renderer' && name !== 'null' && name !== 'base') { - // user registered renderers inherit from base - - var BaseRenderer = getExtension('renderer', 'base'); - var bProto = BaseRenderer.prototype; - var RegistrantRenderer = registrant; - var rProto = registrant.prototype; - var Renderer = function Renderer() { - BaseRenderer.apply(this, arguments); - RegistrantRenderer.apply(this, arguments); - }; - var proto = Renderer.prototype; - for (var pName in bProto) { - var pVal = bProto[pName]; - var existsInR = rProto[pName] != null; - if (existsInR) { - return overrideErr(pName); - } - proto[pName] = pVal; // take impl from base - } - - for (var _pName in rProto) { - proto[_pName] = rProto[_pName]; // take impl from registrant - } - - bProto.clientFunctions.forEach(function (name) { - proto[name] = proto[name] || function () { - error('Renderer does not implement `renderer.' + name + '()` on its prototype'); - }; - }); - ext = Renderer; - } else if (type === '__proto__' || type === 'constructor' || type === 'prototype') { - // to avoid potential prototype pollution - return error(type + ' is an illegal type to be registered, possibly lead to prototype pollutions'); - } - return setMap({ - map: extensions, - keys: [type, name], - value: ext - }); -} -function getExtension(type, name) { - return getMap({ - map: extensions, - keys: [type, name] - }); -} -function setModule(type, name, moduleType, moduleName, registrant) { - return setMap({ - map: modules, - keys: [type, name, moduleType, moduleName], - value: registrant - }); -} -function getModule(type, name, moduleType, moduleName) { - return getMap({ - map: modules, - keys: [type, name, moduleType, moduleName] - }); -} -var extension = function extension() { - // e.g. extension('renderer', 'svg') - if (arguments.length === 2) { - return getExtension.apply(null, arguments); - } - - // e.g. extension('renderer', 'svg', { ... }) - else if (arguments.length === 3) { - return setExtension.apply(null, arguments); - } - - // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse') - else if (arguments.length === 4) { - return getModule.apply(null, arguments); - } - - // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse', { ... }) - else if (arguments.length === 5) { - return setModule.apply(null, arguments); - } else { - error('Invalid extension access syntax'); - } -}; - -// allows a core instance to access extensions internally -Core.prototype.extension = extension; - -// included extensions -incExts.forEach(function (group) { - group.extensions.forEach(function (ext) { - setExtension(group.type, ext.name, ext.impl); - }); -}); - -// a dummy stylesheet object that doesn't need a reference to the core -// (useful for init) -var Stylesheet = function Stylesheet() { - if (!(this instanceof Stylesheet)) { - return new Stylesheet(); - } - this.length = 0; -}; -var sheetfn = Stylesheet.prototype; -sheetfn.instanceString = function () { - return 'stylesheet'; -}; - -// just store the selector to be parsed later -sheetfn.selector = function (selector) { - var i = this.length++; - this[i] = { - selector: selector, - properties: [] - }; - return this; // chaining -}; - -// just store the property to be parsed later -sheetfn.css = function (name, value) { - var i = this.length - 1; - if (string(name)) { - this[i].properties.push({ - name: name, - value: value - }); - } else if (plainObject(name)) { - var map = name; - var propNames = Object.keys(map); - for (var j = 0; j < propNames.length; j++) { - var key = propNames[j]; - var mapVal = map[key]; - if (mapVal == null) { - continue; - } - var prop = Style.properties[key] || Style.properties[dash2camel(key)]; - if (prop == null) { - continue; - } - var _name = prop.name; - var _value = mapVal; - this[i].properties.push({ - name: _name, - value: _value - }); - } - } - return this; // chaining -}; - -sheetfn.style = sheetfn.css; - -// generate a real style object from the dummy stylesheet -sheetfn.generateStyle = function (cy) { - var style = new Style(cy); - return this.appendToStyle(style); -}; - -// append a dummy stylesheet object on a real style object -sheetfn.appendToStyle = function (style) { - for (var i = 0; i < this.length; i++) { - var context = this[i]; - var selector = context.selector; - var props = context.properties; - style.selector(selector); // apply selector - - for (var j = 0; j < props.length; j++) { - var prop = props[j]; - style.css(prop.name, prop.value); // apply property - } - } - - return style; -}; - -var version = "3.28.1"; - -var cytoscape = function cytoscape(options) { - // if no options specified, use default - if (options === undefined) { - options = {}; - } - - // create instance - if (plainObject(options)) { - return new Core(options); - } - - // allow for registration of extensions - else if (string(options)) { - return extension.apply(extension, arguments); - } -}; - -// e.g. cytoscape.use( require('cytoscape-foo'), bar ) -cytoscape.use = function (ext) { - var args = Array.prototype.slice.call(arguments, 1); // args to pass to ext - - args.unshift(cytoscape); // cytoscape is first arg to ext - - ext.apply(null, args); - return this; -}; -cytoscape.warnings = function (bool) { - return warnings(bool); -}; - -// replaced by build system -cytoscape.version = version; - -// expose public apis (mostly for extensions) -cytoscape.stylesheet = cytoscape.Stylesheet = Stylesheet; - -module.exports = cytoscape; - - -/***/ }), - -/***/ 65731: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -module.exports = __webpack_require__(34297); - - -/***/ }), - -/***/ 34297: -/***/ (function(module, exports) { - -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Generated by CoffeeScript 1.8.0 -(function() { - var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup; - - floor = Math.floor, min = Math.min; - - - /* - Default comparison function to be used - */ - - defaultCmp = function(x, y) { - if (x < y) { - return -1; - } - if (x > y) { - return 1; - } - return 0; - }; - - - /* - Insert item x in list a, and keep it sorted assuming a is sorted. - - If x is already in a, insert it to the right of the rightmost x. - - Optional args lo (default 0) and hi (default a.length) bound the slice - of a to be searched. - */ - - insort = function(a, x, lo, hi, cmp) { - var mid; - if (lo == null) { - lo = 0; - } - if (cmp == null) { - cmp = defaultCmp; - } - if (lo < 0) { - throw new Error('lo must be non-negative'); - } - if (hi == null) { - hi = a.length; - } - while (lo < hi) { - mid = floor((lo + hi) / 2); - if (cmp(x, a[mid]) < 0) { - hi = mid; - } else { - lo = mid + 1; - } - } - return ([].splice.apply(a, [lo, lo - lo].concat(x)), x); - }; - - - /* - Push item onto heap, maintaining the heap invariant. - */ - - heappush = function(array, item, cmp) { - if (cmp == null) { - cmp = defaultCmp; - } - array.push(item); - return _siftdown(array, 0, array.length - 1, cmp); - }; - - - /* - Pop the smallest item off the heap, maintaining the heap invariant. - */ - - heappop = function(array, cmp) { - var lastelt, returnitem; - if (cmp == null) { - cmp = defaultCmp; - } - lastelt = array.pop(); - if (array.length) { - returnitem = array[0]; - array[0] = lastelt; - _siftup(array, 0, cmp); - } else { - returnitem = lastelt; - } - return returnitem; - }; - - - /* - Pop and return the current smallest value, and add the new item. - - This is more efficient than heappop() followed by heappush(), and can be - more appropriate when using a fixed size heap. Note that the value - returned may be larger than item! That constrains reasonable use of - this routine unless written as part of a conditional replacement: - if item > array[0] - item = heapreplace(array, item) - */ - - heapreplace = function(array, item, cmp) { - var returnitem; - if (cmp == null) { - cmp = defaultCmp; - } - returnitem = array[0]; - array[0] = item; - _siftup(array, 0, cmp); - return returnitem; - }; - - - /* - Fast version of a heappush followed by a heappop. - */ - - heappushpop = function(array, item, cmp) { - var _ref; - if (cmp == null) { - cmp = defaultCmp; - } - if (array.length && cmp(array[0], item) < 0) { - _ref = [array[0], item], item = _ref[0], array[0] = _ref[1]; - _siftup(array, 0, cmp); - } - return item; - }; - - - /* - Transform list into a heap, in-place, in O(array.length) time. - */ - - heapify = function(array, cmp) { - var i, _i, _j, _len, _ref, _ref1, _results, _results1; - if (cmp == null) { - cmp = defaultCmp; - } - _ref1 = (function() { - _results1 = []; - for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); } - return _results1; - }).apply(this).reverse(); - _results = []; - for (_i = 0, _len = _ref1.length; _i < _len; _i++) { - i = _ref1[_i]; - _results.push(_siftup(array, i, cmp)); - } - return _results; - }; - - - /* - Update the position of the given item in the heap. - This function should be called every time the item is being modified. - */ - - updateItem = function(array, item, cmp) { - var pos; - if (cmp == null) { - cmp = defaultCmp; - } - pos = array.indexOf(item); - if (pos === -1) { - return; - } - _siftdown(array, 0, pos, cmp); - return _siftup(array, pos, cmp); - }; - - - /* - Find the n largest elements in a dataset. - */ - - nlargest = function(array, n, cmp) { - var elem, result, _i, _len, _ref; - if (cmp == null) { - cmp = defaultCmp; - } - result = array.slice(0, n); - if (!result.length) { - return result; - } - heapify(result, cmp); - _ref = array.slice(n); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - elem = _ref[_i]; - heappushpop(result, elem, cmp); - } - return result.sort(cmp).reverse(); - }; - - - /* - Find the n smallest elements in a dataset. - */ - - nsmallest = function(array, n, cmp) { - var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results; - if (cmp == null) { - cmp = defaultCmp; - } - if (n * 10 <= array.length) { - result = array.slice(0, n).sort(cmp); - if (!result.length) { - return result; - } - los = result[result.length - 1]; - _ref = array.slice(n); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - elem = _ref[_i]; - if (cmp(elem, los) < 0) { - insort(result, elem, 0, null, cmp); - result.pop(); - los = result[result.length - 1]; - } - } - return result; - } - heapify(array, cmp); - _results = []; - for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) { - _results.push(heappop(array, cmp)); - } - return _results; - }; - - _siftdown = function(array, startpos, pos, cmp) { - var newitem, parent, parentpos; - if (cmp == null) { - cmp = defaultCmp; - } - newitem = array[pos]; - while (pos > startpos) { - parentpos = (pos - 1) >> 1; - parent = array[parentpos]; - if (cmp(newitem, parent) < 0) { - array[pos] = parent; - pos = parentpos; - continue; - } - break; - } - return array[pos] = newitem; - }; - - _siftup = function(array, pos, cmp) { - var childpos, endpos, newitem, rightpos, startpos; - if (cmp == null) { - cmp = defaultCmp; - } - endpos = array.length; - startpos = pos; - newitem = array[pos]; - childpos = 2 * pos + 1; - while (childpos < endpos) { - rightpos = childpos + 1; - if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) { - childpos = rightpos; - } - array[pos] = array[childpos]; - pos = childpos; - childpos = 2 * pos + 1; - } - array[pos] = newitem; - return _siftdown(array, startpos, pos, cmp); - }; - - Heap = (function() { - Heap.push = heappush; - - Heap.pop = heappop; - - Heap.replace = heapreplace; - - Heap.pushpop = heappushpop; - - Heap.heapify = heapify; - - Heap.updateItem = updateItem; - - Heap.nlargest = nlargest; - - Heap.nsmallest = nsmallest; - - function Heap(cmp) { - this.cmp = cmp != null ? cmp : defaultCmp; - this.nodes = []; - } - - Heap.prototype.push = function(x) { - return heappush(this.nodes, x, this.cmp); - }; - - Heap.prototype.pop = function() { - return heappop(this.nodes, this.cmp); - }; - - Heap.prototype.peek = function() { - return this.nodes[0]; - }; - - Heap.prototype.contains = function(x) { - return this.nodes.indexOf(x) !== -1; - }; - - Heap.prototype.replace = function(x) { - return heapreplace(this.nodes, x, this.cmp); - }; - - Heap.prototype.pushpop = function(x) { - return heappushpop(this.nodes, x, this.cmp); - }; - - Heap.prototype.heapify = function() { - return heapify(this.nodes, this.cmp); - }; - - Heap.prototype.updateItem = function(x) { - return updateItem(this.nodes, x, this.cmp); - }; - - Heap.prototype.clear = function() { - return this.nodes = []; - }; - - Heap.prototype.empty = function() { - return this.nodes.length === 0; - }; - - Heap.prototype.size = function() { - return this.nodes.length; - }; - - Heap.prototype.clone = function() { - var heap; - heap = new Heap(); - heap.nodes = this.nodes.slice(0); - return heap; - }; - - Heap.prototype.toArray = function() { - return this.nodes.slice(0); - }; - - Heap.prototype.insert = Heap.prototype.push; - - Heap.prototype.top = Heap.prototype.peek; - - Heap.prototype.front = Heap.prototype.peek; - - Heap.prototype.has = Heap.prototype.contains; - - Heap.prototype.copy = Heap.prototype.clone; - - return Heap; - - })(); - - (function(root, factory) { - if (true) { - return !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), - __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? - (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else {} - })(this, function() { - return Heap; - }); - -}).call(this); - - -/***/ }), - -/***/ 23143: -/***/ (function(module) { - -(function webpackUniversalModuleDefinition(root, factory) { - if(true) - module.exports = factory(); - else {} -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __nested_webpack_require_543__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_543__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __nested_webpack_require_543__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __nested_webpack_require_543__.c = installedModules; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __nested_webpack_require_543__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __nested_webpack_require_543__.d = function(exports, name, getter) { -/******/ if(!__nested_webpack_require_543__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __nested_webpack_require_543__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __nested_webpack_require_543__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __nested_webpack_require_543__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __nested_webpack_require_543__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __nested_webpack_require_543__(__nested_webpack_require_543__.s = 26); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function LayoutConstants() {} - -/** - * Layout Quality: 0:draft, 1:default, 2:proof - */ -LayoutConstants.QUALITY = 1; - -/** - * Default parameters - */ -LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false; -LayoutConstants.DEFAULT_INCREMENTAL = false; -LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true; -LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false; -LayoutConstants.DEFAULT_ANIMATION_PERIOD = 50; -LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false; - -// ----------------------------------------------------------------------------- -// Section: General other constants -// ----------------------------------------------------------------------------- -/* - * Margins of a graph to be applied on bouding rectangle of its contents. We - * assume margins on all four sides to be uniform. - */ -LayoutConstants.DEFAULT_GRAPH_MARGIN = 15; - -/* - * Whether to consider labels in node dimensions or not - */ -LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false; - -/* - * Default dimension of a non-compound node. - */ -LayoutConstants.SIMPLE_NODE_SIZE = 40; - -/* - * Default dimension of a non-compound node. - */ -LayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2; - -/* - * Empty compound node size. When a compound node is empty, its both - * dimensions should be of this value. - */ -LayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40; - -/* - * Minimum length that an edge should take during layout - */ -LayoutConstants.MIN_EDGE_LENGTH = 1; - -/* - * World boundaries that layout operates on - */ -LayoutConstants.WORLD_BOUNDARY = 1000000; - -/* - * World boundaries that random positioning can be performed with - */ -LayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000; - -/* - * Coordinates of the world center - */ -LayoutConstants.WORLD_CENTER_X = 1200; -LayoutConstants.WORLD_CENTER_Y = 900; - -module.exports = LayoutConstants; - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __nested_webpack_require_4947__) { - -"use strict"; - - -var LGraphObject = __nested_webpack_require_4947__(2); -var IGeometry = __nested_webpack_require_4947__(8); -var IMath = __nested_webpack_require_4947__(9); - -function LEdge(source, target, vEdge) { - LGraphObject.call(this, vEdge); - - this.isOverlapingSourceAndTarget = false; - this.vGraphObject = vEdge; - this.bendpoints = []; - this.source = source; - this.target = target; -} - -LEdge.prototype = Object.create(LGraphObject.prototype); - -for (var prop in LGraphObject) { - LEdge[prop] = LGraphObject[prop]; -} - -LEdge.prototype.getSource = function () { - return this.source; -}; - -LEdge.prototype.getTarget = function () { - return this.target; -}; - -LEdge.prototype.isInterGraph = function () { - return this.isInterGraph; -}; - -LEdge.prototype.getLength = function () { - return this.length; -}; - -LEdge.prototype.isOverlapingSourceAndTarget = function () { - return this.isOverlapingSourceAndTarget; -}; - -LEdge.prototype.getBendpoints = function () { - return this.bendpoints; -}; - -LEdge.prototype.getLca = function () { - return this.lca; -}; - -LEdge.prototype.getSourceInLca = function () { - return this.sourceInLca; -}; - -LEdge.prototype.getTargetInLca = function () { - return this.targetInLca; -}; - -LEdge.prototype.getOtherEnd = function (node) { - if (this.source === node) { - return this.target; - } else if (this.target === node) { - return this.source; - } else { - throw "Node is not incident with this edge"; - } -}; - -LEdge.prototype.getOtherEndInGraph = function (node, graph) { - var otherEnd = this.getOtherEnd(node); - var root = graph.getGraphManager().getRoot(); - - while (true) { - if (otherEnd.getOwner() == graph) { - return otherEnd; - } - - if (otherEnd.getOwner() == root) { - break; - } - - otherEnd = otherEnd.getOwner().getParent(); - } - - return null; -}; - -LEdge.prototype.updateLength = function () { - var clipPointCoordinates = new Array(4); - - this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates); - - if (!this.isOverlapingSourceAndTarget) { - this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2]; - this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3]; - - if (Math.abs(this.lengthX) < 1.0) { - this.lengthX = IMath.sign(this.lengthX); - } - - if (Math.abs(this.lengthY) < 1.0) { - this.lengthY = IMath.sign(this.lengthY); - } - - this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); - } -}; - -LEdge.prototype.updateLengthSimple = function () { - this.lengthX = this.target.getCenterX() - this.source.getCenterX(); - this.lengthY = this.target.getCenterY() - this.source.getCenterY(); - - if (Math.abs(this.lengthX) < 1.0) { - this.lengthX = IMath.sign(this.lengthX); - } - - if (Math.abs(this.lengthY) < 1.0) { - this.lengthY = IMath.sign(this.lengthY); - } - - this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); -}; - -module.exports = LEdge; - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function LGraphObject(vGraphObject) { - this.vGraphObject = vGraphObject; -} - -module.exports = LGraphObject; - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __nested_webpack_require_8167__) { - -"use strict"; - - -var LGraphObject = __nested_webpack_require_8167__(2); -var Integer = __nested_webpack_require_8167__(10); -var RectangleD = __nested_webpack_require_8167__(13); -var LayoutConstants = __nested_webpack_require_8167__(0); -var RandomSeed = __nested_webpack_require_8167__(16); -var PointD = __nested_webpack_require_8167__(4); - -function LNode(gm, loc, size, vNode) { - //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode) - if (size == null && vNode == null) { - vNode = loc; - } - - LGraphObject.call(this, vNode); - - //Alternative constructor 2 : LNode(Layout layout, Object vNode) - if (gm.graphManager != null) gm = gm.graphManager; - - this.estimatedSize = Integer.MIN_VALUE; - this.inclusionTreeDepth = Integer.MAX_VALUE; - this.vGraphObject = vNode; - this.edges = []; - this.graphManager = gm; - - if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD(); -} - -LNode.prototype = Object.create(LGraphObject.prototype); -for (var prop in LGraphObject) { - LNode[prop] = LGraphObject[prop]; -} - -LNode.prototype.getEdges = function () { - return this.edges; -}; - -LNode.prototype.getChild = function () { - return this.child; -}; - -LNode.prototype.getOwner = function () { - // if (this.owner != null) { - // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) { - // throw "assert failed"; - // } - // } - - return this.owner; -}; - -LNode.prototype.getWidth = function () { - return this.rect.width; -}; - -LNode.prototype.setWidth = function (width) { - this.rect.width = width; -}; - -LNode.prototype.getHeight = function () { - return this.rect.height; -}; - -LNode.prototype.setHeight = function (height) { - this.rect.height = height; -}; - -LNode.prototype.getCenterX = function () { - return this.rect.x + this.rect.width / 2; -}; - -LNode.prototype.getCenterY = function () { - return this.rect.y + this.rect.height / 2; -}; - -LNode.prototype.getCenter = function () { - return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2); -}; - -LNode.prototype.getLocation = function () { - return new PointD(this.rect.x, this.rect.y); -}; - -LNode.prototype.getRect = function () { - return this.rect; -}; - -LNode.prototype.getDiagonal = function () { - return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height); -}; - -/** - * This method returns half the diagonal length of this node. - */ -LNode.prototype.getHalfTheDiagonal = function () { - return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2; -}; - -LNode.prototype.setRect = function (upperLeft, dimension) { - this.rect.x = upperLeft.x; - this.rect.y = upperLeft.y; - this.rect.width = dimension.width; - this.rect.height = dimension.height; -}; - -LNode.prototype.setCenter = function (cx, cy) { - this.rect.x = cx - this.rect.width / 2; - this.rect.y = cy - this.rect.height / 2; -}; - -LNode.prototype.setLocation = function (x, y) { - this.rect.x = x; - this.rect.y = y; -}; - -LNode.prototype.moveBy = function (dx, dy) { - this.rect.x += dx; - this.rect.y += dy; -}; - -LNode.prototype.getEdgeListToNode = function (to) { - var edgeList = []; - var edge; - var self = this; - - self.edges.forEach(function (edge) { - - if (edge.target == to) { - if (edge.source != self) throw "Incorrect edge source!"; - - edgeList.push(edge); - } - }); - - return edgeList; -}; - -LNode.prototype.getEdgesBetween = function (other) { - var edgeList = []; - var edge; - - var self = this; - self.edges.forEach(function (edge) { - - if (!(edge.source == self || edge.target == self)) throw "Incorrect edge source and/or target"; - - if (edge.target == other || edge.source == other) { - edgeList.push(edge); - } - }); - - return edgeList; -}; - -LNode.prototype.getNeighborsList = function () { - var neighbors = new Set(); - - var self = this; - self.edges.forEach(function (edge) { - - if (edge.source == self) { - neighbors.add(edge.target); - } else { - if (edge.target != self) { - throw "Incorrect incidency!"; - } - - neighbors.add(edge.source); - } - }); - - return neighbors; -}; - -LNode.prototype.withChildren = function () { - var withNeighborsList = new Set(); - var childNode; - var children; - - withNeighborsList.add(this); - - if (this.child != null) { - var nodes = this.child.getNodes(); - for (var i = 0; i < nodes.length; i++) { - childNode = nodes[i]; - children = childNode.withChildren(); - children.forEach(function (node) { - withNeighborsList.add(node); - }); - } - } - - return withNeighborsList; -}; - -LNode.prototype.getNoOfChildren = function () { - var noOfChildren = 0; - var childNode; - - if (this.child == null) { - noOfChildren = 1; - } else { - var nodes = this.child.getNodes(); - for (var i = 0; i < nodes.length; i++) { - childNode = nodes[i]; - - noOfChildren += childNode.getNoOfChildren(); - } - } - - if (noOfChildren == 0) { - noOfChildren = 1; - } - return noOfChildren; -}; - -LNode.prototype.getEstimatedSize = function () { - if (this.estimatedSize == Integer.MIN_VALUE) { - throw "assert failed"; - } - return this.estimatedSize; -}; - -LNode.prototype.calcEstimatedSize = function () { - if (this.child == null) { - return this.estimatedSize = (this.rect.width + this.rect.height) / 2; - } else { - this.estimatedSize = this.child.calcEstimatedSize(); - this.rect.width = this.estimatedSize; - this.rect.height = this.estimatedSize; - - return this.estimatedSize; - } -}; - -LNode.prototype.scatter = function () { - var randomCenterX; - var randomCenterY; - - var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY; - var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY; - randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX; - - var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY; - var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY; - randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY; - - this.rect.x = randomCenterX; - this.rect.y = randomCenterY; -}; - -LNode.prototype.updateBounds = function () { - if (this.getChild() == null) { - throw "assert failed"; - } - if (this.getChild().getNodes().length != 0) { - // wrap the children nodes by re-arranging the boundaries - var childGraph = this.getChild(); - childGraph.updateBounds(true); - - this.rect.x = childGraph.getLeft(); - this.rect.y = childGraph.getTop(); - - this.setWidth(childGraph.getRight() - childGraph.getLeft()); - this.setHeight(childGraph.getBottom() - childGraph.getTop()); - - // Update compound bounds considering its label properties - if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) { - - var width = childGraph.getRight() - childGraph.getLeft(); - var height = childGraph.getBottom() - childGraph.getTop(); - - if (this.labelWidth > width) { - this.rect.x -= (this.labelWidth - width) / 2; - this.setWidth(this.labelWidth); - } - - if (this.labelHeight > height) { - if (this.labelPos == "center") { - this.rect.y -= (this.labelHeight - height) / 2; - } else if (this.labelPos == "top") { - this.rect.y -= this.labelHeight - height; - } - this.setHeight(this.labelHeight); - } - } - } -}; - -LNode.prototype.getInclusionTreeDepth = function () { - if (this.inclusionTreeDepth == Integer.MAX_VALUE) { - throw "assert failed"; - } - return this.inclusionTreeDepth; -}; - -LNode.prototype.transform = function (trans) { - var left = this.rect.x; - - if (left > LayoutConstants.WORLD_BOUNDARY) { - left = LayoutConstants.WORLD_BOUNDARY; - } else if (left < -LayoutConstants.WORLD_BOUNDARY) { - left = -LayoutConstants.WORLD_BOUNDARY; - } - - var top = this.rect.y; - - if (top > LayoutConstants.WORLD_BOUNDARY) { - top = LayoutConstants.WORLD_BOUNDARY; - } else if (top < -LayoutConstants.WORLD_BOUNDARY) { - top = -LayoutConstants.WORLD_BOUNDARY; - } - - var leftTop = new PointD(left, top); - var vLeftTop = trans.inverseTransformPoint(leftTop); - - this.setLocation(vLeftTop.x, vLeftTop.y); -}; - -LNode.prototype.getLeft = function () { - return this.rect.x; -}; - -LNode.prototype.getRight = function () { - return this.rect.x + this.rect.width; -}; - -LNode.prototype.getTop = function () { - return this.rect.y; -}; - -LNode.prototype.getBottom = function () { - return this.rect.y + this.rect.height; -}; - -LNode.prototype.getParent = function () { - if (this.owner == null) { - return null; - } - - return this.owner.getParent(); -}; - -module.exports = LNode; - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function PointD(x, y) { - if (x == null && y == null) { - this.x = 0; - this.y = 0; - } else { - this.x = x; - this.y = y; - } -} - -PointD.prototype.getX = function () { - return this.x; -}; - -PointD.prototype.getY = function () { - return this.y; -}; - -PointD.prototype.setX = function (x) { - this.x = x; -}; - -PointD.prototype.setY = function (y) { - this.y = y; -}; - -PointD.prototype.getDifference = function (pt) { - return new DimensionD(this.x - pt.x, this.y - pt.y); -}; - -PointD.prototype.getCopy = function () { - return new PointD(this.x, this.y); -}; - -PointD.prototype.translate = function (dim) { - this.x += dim.width; - this.y += dim.height; - return this; -}; - -module.exports = PointD; - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __nested_webpack_require_17549__) { - -"use strict"; - - -var LGraphObject = __nested_webpack_require_17549__(2); -var Integer = __nested_webpack_require_17549__(10); -var LayoutConstants = __nested_webpack_require_17549__(0); -var LGraphManager = __nested_webpack_require_17549__(6); -var LNode = __nested_webpack_require_17549__(3); -var LEdge = __nested_webpack_require_17549__(1); -var RectangleD = __nested_webpack_require_17549__(13); -var Point = __nested_webpack_require_17549__(12); -var LinkedList = __nested_webpack_require_17549__(11); - -function LGraph(parent, obj2, vGraph) { - LGraphObject.call(this, vGraph); - this.estimatedSize = Integer.MIN_VALUE; - this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN; - this.edges = []; - this.nodes = []; - this.isConnected = false; - this.parent = parent; - - if (obj2 != null && obj2 instanceof LGraphManager) { - this.graphManager = obj2; - } else if (obj2 != null && obj2 instanceof Layout) { - this.graphManager = obj2.graphManager; - } -} - -LGraph.prototype = Object.create(LGraphObject.prototype); -for (var prop in LGraphObject) { - LGraph[prop] = LGraphObject[prop]; -} - -LGraph.prototype.getNodes = function () { - return this.nodes; -}; - -LGraph.prototype.getEdges = function () { - return this.edges; -}; - -LGraph.prototype.getGraphManager = function () { - return this.graphManager; -}; - -LGraph.prototype.getParent = function () { - return this.parent; -}; - -LGraph.prototype.getLeft = function () { - return this.left; -}; - -LGraph.prototype.getRight = function () { - return this.right; -}; - -LGraph.prototype.getTop = function () { - return this.top; -}; - -LGraph.prototype.getBottom = function () { - return this.bottom; -}; - -LGraph.prototype.isConnected = function () { - return this.isConnected; -}; - -LGraph.prototype.add = function (obj1, sourceNode, targetNode) { - if (sourceNode == null && targetNode == null) { - var newNode = obj1; - if (this.graphManager == null) { - throw "Graph has no graph mgr!"; - } - if (this.getNodes().indexOf(newNode) > -1) { - throw "Node already in graph!"; - } - newNode.owner = this; - this.getNodes().push(newNode); - - return newNode; - } else { - var newEdge = obj1; - if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) { - throw "Source or target not in graph!"; - } - - if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) { - throw "Both owners must be this graph!"; - } - - if (sourceNode.owner != targetNode.owner) { - return null; - } - - // set source and target - newEdge.source = sourceNode; - newEdge.target = targetNode; - - // set as intra-graph edge - newEdge.isInterGraph = false; - - // add to graph edge list - this.getEdges().push(newEdge); - - // add to incidency lists - sourceNode.edges.push(newEdge); - - if (targetNode != sourceNode) { - targetNode.edges.push(newEdge); - } - - return newEdge; - } -}; - -LGraph.prototype.remove = function (obj) { - var node = obj; - if (obj instanceof LNode) { - if (node == null) { - throw "Node is null!"; - } - if (!(node.owner != null && node.owner == this)) { - throw "Owner graph is invalid!"; - } - if (this.graphManager == null) { - throw "Owner graph manager is invalid!"; - } - // remove incident edges first (make a copy to do it safely) - var edgesToBeRemoved = node.edges.slice(); - var edge; - var s = edgesToBeRemoved.length; - for (var i = 0; i < s; i++) { - edge = edgesToBeRemoved[i]; - - if (edge.isInterGraph) { - this.graphManager.remove(edge); - } else { - edge.source.owner.remove(edge); - } - } - - // now the node itself - var index = this.nodes.indexOf(node); - if (index == -1) { - throw "Node not in owner node list!"; - } - - this.nodes.splice(index, 1); - } else if (obj instanceof LEdge) { - var edge = obj; - if (edge == null) { - throw "Edge is null!"; - } - if (!(edge.source != null && edge.target != null)) { - throw "Source and/or target is null!"; - } - if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) { - throw "Source and/or target owner is invalid!"; - } - - var sourceIndex = edge.source.edges.indexOf(edge); - var targetIndex = edge.target.edges.indexOf(edge); - if (!(sourceIndex > -1 && targetIndex > -1)) { - throw "Source and/or target doesn't know this edge!"; - } - - edge.source.edges.splice(sourceIndex, 1); - - if (edge.target != edge.source) { - edge.target.edges.splice(targetIndex, 1); - } - - var index = edge.source.owner.getEdges().indexOf(edge); - if (index == -1) { - throw "Not in owner's edge list!"; - } - - edge.source.owner.getEdges().splice(index, 1); - } -}; - -LGraph.prototype.updateLeftTop = function () { - var top = Integer.MAX_VALUE; - var left = Integer.MAX_VALUE; - var nodeTop; - var nodeLeft; - var margin; - - var nodes = this.getNodes(); - var s = nodes.length; - - for (var i = 0; i < s; i++) { - var lNode = nodes[i]; - nodeTop = lNode.getTop(); - nodeLeft = lNode.getLeft(); - - if (top > nodeTop) { - top = nodeTop; - } - - if (left > nodeLeft) { - left = nodeLeft; - } - } - - // Do we have any nodes in this graph? - if (top == Integer.MAX_VALUE) { - return null; - } - - if (nodes[0].getParent().paddingLeft != undefined) { - margin = nodes[0].getParent().paddingLeft; - } else { - margin = this.margin; - } - - this.left = left - margin; - this.top = top - margin; - - // Apply the margins and return the result - return new Point(this.left, this.top); -}; - -LGraph.prototype.updateBounds = function (recursive) { - // calculate bounds - var left = Integer.MAX_VALUE; - var right = -Integer.MAX_VALUE; - var top = Integer.MAX_VALUE; - var bottom = -Integer.MAX_VALUE; - var nodeLeft; - var nodeRight; - var nodeTop; - var nodeBottom; - var margin; - - var nodes = this.nodes; - var s = nodes.length; - for (var i = 0; i < s; i++) { - var lNode = nodes[i]; - - if (recursive && lNode.child != null) { - lNode.updateBounds(); - } - nodeLeft = lNode.getLeft(); - nodeRight = lNode.getRight(); - nodeTop = lNode.getTop(); - nodeBottom = lNode.getBottom(); - - if (left > nodeLeft) { - left = nodeLeft; - } - - if (right < nodeRight) { - right = nodeRight; - } - - if (top > nodeTop) { - top = nodeTop; - } - - if (bottom < nodeBottom) { - bottom = nodeBottom; - } - } - - var boundingRect = new RectangleD(left, top, right - left, bottom - top); - if (left == Integer.MAX_VALUE) { - this.left = this.parent.getLeft(); - this.right = this.parent.getRight(); - this.top = this.parent.getTop(); - this.bottom = this.parent.getBottom(); - } - - if (nodes[0].getParent().paddingLeft != undefined) { - margin = nodes[0].getParent().paddingLeft; - } else { - margin = this.margin; - } - - this.left = boundingRect.x - margin; - this.right = boundingRect.x + boundingRect.width + margin; - this.top = boundingRect.y - margin; - this.bottom = boundingRect.y + boundingRect.height + margin; -}; - -LGraph.calculateBounds = function (nodes) { - var left = Integer.MAX_VALUE; - var right = -Integer.MAX_VALUE; - var top = Integer.MAX_VALUE; - var bottom = -Integer.MAX_VALUE; - var nodeLeft; - var nodeRight; - var nodeTop; - var nodeBottom; - - var s = nodes.length; - - for (var i = 0; i < s; i++) { - var lNode = nodes[i]; - nodeLeft = lNode.getLeft(); - nodeRight = lNode.getRight(); - nodeTop = lNode.getTop(); - nodeBottom = lNode.getBottom(); - - if (left > nodeLeft) { - left = nodeLeft; - } - - if (right < nodeRight) { - right = nodeRight; - } - - if (top > nodeTop) { - top = nodeTop; - } - - if (bottom < nodeBottom) { - bottom = nodeBottom; - } - } - - var boundingRect = new RectangleD(left, top, right - left, bottom - top); - - return boundingRect; -}; - -LGraph.prototype.getInclusionTreeDepth = function () { - if (this == this.graphManager.getRoot()) { - return 1; - } else { - return this.parent.getInclusionTreeDepth(); - } -}; - -LGraph.prototype.getEstimatedSize = function () { - if (this.estimatedSize == Integer.MIN_VALUE) { - throw "assert failed"; - } - return this.estimatedSize; -}; - -LGraph.prototype.calcEstimatedSize = function () { - var size = 0; - var nodes = this.nodes; - var s = nodes.length; - - for (var i = 0; i < s; i++) { - var lNode = nodes[i]; - size += lNode.calcEstimatedSize(); - } - - if (size == 0) { - this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE; - } else { - this.estimatedSize = size / Math.sqrt(this.nodes.length); - } - - return this.estimatedSize; -}; - -LGraph.prototype.updateConnected = function () { - var self = this; - if (this.nodes.length == 0) { - this.isConnected = true; - return; - } - - var queue = new LinkedList(); - var visited = new Set(); - var currentNode = this.nodes[0]; - var neighborEdges; - var currentNeighbor; - var childrenOfNode = currentNode.withChildren(); - childrenOfNode.forEach(function (node) { - queue.push(node); - visited.add(node); - }); - - while (queue.length !== 0) { - currentNode = queue.shift(); - - // Traverse all neighbors of this node - neighborEdges = currentNode.getEdges(); - var size = neighborEdges.length; - for (var i = 0; i < size; i++) { - var neighborEdge = neighborEdges[i]; - currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this); - - // Add unvisited neighbors to the list to visit - if (currentNeighbor != null && !visited.has(currentNeighbor)) { - var childrenOfNeighbor = currentNeighbor.withChildren(); - - childrenOfNeighbor.forEach(function (node) { - queue.push(node); - visited.add(node); - }); - } - } - } - - this.isConnected = false; - - if (visited.size >= this.nodes.length) { - var noOfVisitedInThisGraph = 0; - - visited.forEach(function (visitedNode) { - if (visitedNode.owner == self) { - noOfVisitedInThisGraph++; - } - }); - - if (noOfVisitedInThisGraph == this.nodes.length) { - this.isConnected = true; - } - } -}; - -module.exports = LGraph; - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __nested_webpack_require_27617__) { - -"use strict"; - - -var LGraph; -var LEdge = __nested_webpack_require_27617__(1); - -function LGraphManager(layout) { - LGraph = __nested_webpack_require_27617__(5); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now. - this.layout = layout; - - this.graphs = []; - this.edges = []; -} - -LGraphManager.prototype.addRoot = function () { - var ngraph = this.layout.newGraph(); - var nnode = this.layout.newNode(null); - var root = this.add(ngraph, nnode); - this.setRootGraph(root); - return this.rootGraph; -}; - -LGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) { - //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge - if (newEdge == null && sourceNode == null && targetNode == null) { - if (newGraph == null) { - throw "Graph is null!"; - } - if (parentNode == null) { - throw "Parent node is null!"; - } - if (this.graphs.indexOf(newGraph) > -1) { - throw "Graph already in this graph mgr!"; - } - - this.graphs.push(newGraph); - - if (newGraph.parent != null) { - throw "Already has a parent!"; - } - if (parentNode.child != null) { - throw "Already has a child!"; - } - - newGraph.parent = parentNode; - parentNode.child = newGraph; - - return newGraph; - } else { - //change the order of the parameters - targetNode = newEdge; - sourceNode = parentNode; - newEdge = newGraph; - var sourceGraph = sourceNode.getOwner(); - var targetGraph = targetNode.getOwner(); - - if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) { - throw "Source not in this graph mgr!"; - } - if (!(targetGraph != null && targetGraph.getGraphManager() == this)) { - throw "Target not in this graph mgr!"; - } - - if (sourceGraph == targetGraph) { - newEdge.isInterGraph = false; - return sourceGraph.add(newEdge, sourceNode, targetNode); - } else { - newEdge.isInterGraph = true; - - // set source and target - newEdge.source = sourceNode; - newEdge.target = targetNode; - - // add edge to inter-graph edge list - if (this.edges.indexOf(newEdge) > -1) { - throw "Edge already in inter-graph edge list!"; - } - - this.edges.push(newEdge); - - // add edge to source and target incidency lists - if (!(newEdge.source != null && newEdge.target != null)) { - throw "Edge source and/or target is null!"; - } - - if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) { - throw "Edge already in source and/or target incidency list!"; - } - - newEdge.source.edges.push(newEdge); - newEdge.target.edges.push(newEdge); - - return newEdge; - } - } -}; - -LGraphManager.prototype.remove = function (lObj) { - if (lObj instanceof LGraph) { - var graph = lObj; - if (graph.getGraphManager() != this) { - throw "Graph not in this graph mgr"; - } - if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) { - throw "Invalid parent node!"; - } - - // first the edges (make a copy to do it safely) - var edgesToBeRemoved = []; - - edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges()); - - var edge; - var s = edgesToBeRemoved.length; - for (var i = 0; i < s; i++) { - edge = edgesToBeRemoved[i]; - graph.remove(edge); - } - - // then the nodes (make a copy to do it safely) - var nodesToBeRemoved = []; - - nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes()); - - var node; - s = nodesToBeRemoved.length; - for (var i = 0; i < s; i++) { - node = nodesToBeRemoved[i]; - graph.remove(node); - } - - // check if graph is the root - if (graph == this.rootGraph) { - this.setRootGraph(null); - } - - // now remove the graph itself - var index = this.graphs.indexOf(graph); - this.graphs.splice(index, 1); - - // also reset the parent of the graph - graph.parent = null; - } else if (lObj instanceof LEdge) { - edge = lObj; - if (edge == null) { - throw "Edge is null!"; - } - if (!edge.isInterGraph) { - throw "Not an inter-graph edge!"; - } - if (!(edge.source != null && edge.target != null)) { - throw "Source and/or target is null!"; - } - - // remove edge from source and target nodes' incidency lists - - if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) { - throw "Source and/or target doesn't know this edge!"; - } - - var index = edge.source.edges.indexOf(edge); - edge.source.edges.splice(index, 1); - index = edge.target.edges.indexOf(edge); - edge.target.edges.splice(index, 1); - - // remove edge from owner graph manager's inter-graph edge list - - if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) { - throw "Edge owner graph or owner graph manager is null!"; - } - if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) { - throw "Not in owner graph manager's edge list!"; - } - - var index = edge.source.owner.getGraphManager().edges.indexOf(edge); - edge.source.owner.getGraphManager().edges.splice(index, 1); - } -}; - -LGraphManager.prototype.updateBounds = function () { - this.rootGraph.updateBounds(true); -}; - -LGraphManager.prototype.getGraphs = function () { - return this.graphs; -}; - -LGraphManager.prototype.getAllNodes = function () { - if (this.allNodes == null) { - var nodeList = []; - var graphs = this.getGraphs(); - var s = graphs.length; - for (var i = 0; i < s; i++) { - nodeList = nodeList.concat(graphs[i].getNodes()); - } - this.allNodes = nodeList; - } - return this.allNodes; -}; - -LGraphManager.prototype.resetAllNodes = function () { - this.allNodes = null; -}; - -LGraphManager.prototype.resetAllEdges = function () { - this.allEdges = null; -}; - -LGraphManager.prototype.resetAllNodesToApplyGravitation = function () { - this.allNodesToApplyGravitation = null; -}; - -LGraphManager.prototype.getAllEdges = function () { - if (this.allEdges == null) { - var edgeList = []; - var graphs = this.getGraphs(); - var s = graphs.length; - for (var i = 0; i < graphs.length; i++) { - edgeList = edgeList.concat(graphs[i].getEdges()); - } - - edgeList = edgeList.concat(this.edges); - - this.allEdges = edgeList; - } - return this.allEdges; -}; - -LGraphManager.prototype.getAllNodesToApplyGravitation = function () { - return this.allNodesToApplyGravitation; -}; - -LGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) { - if (this.allNodesToApplyGravitation != null) { - throw "assert failed"; - } - - this.allNodesToApplyGravitation = nodeList; -}; - -LGraphManager.prototype.getRoot = function () { - return this.rootGraph; -}; - -LGraphManager.prototype.setRootGraph = function (graph) { - if (graph.getGraphManager() != this) { - throw "Root not in this graph mgr!"; - } - - this.rootGraph = graph; - // root graph must have a root node associated with it for convenience - if (graph.parent == null) { - graph.parent = this.layout.newNode("Root node"); - } -}; - -LGraphManager.prototype.getLayout = function () { - return this.layout; -}; - -LGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) { - if (!(firstNode != null && secondNode != null)) { - throw "assert failed"; - } - - if (firstNode == secondNode) { - return true; - } - // Is second node an ancestor of the first one? - var ownerGraph = firstNode.getOwner(); - var parentNode; - - do { - parentNode = ownerGraph.getParent(); - - if (parentNode == null) { - break; - } - - if (parentNode == secondNode) { - return true; - } - - ownerGraph = parentNode.getOwner(); - if (ownerGraph == null) { - break; - } - } while (true); - // Is first node an ancestor of the second one? - ownerGraph = secondNode.getOwner(); - - do { - parentNode = ownerGraph.getParent(); - - if (parentNode == null) { - break; - } - - if (parentNode == firstNode) { - return true; - } - - ownerGraph = parentNode.getOwner(); - if (ownerGraph == null) { - break; - } - } while (true); - - return false; -}; - -LGraphManager.prototype.calcLowestCommonAncestors = function () { - var edge; - var sourceNode; - var targetNode; - var sourceAncestorGraph; - var targetAncestorGraph; - - var edges = this.getAllEdges(); - var s = edges.length; - for (var i = 0; i < s; i++) { - edge = edges[i]; - - sourceNode = edge.source; - targetNode = edge.target; - edge.lca = null; - edge.sourceInLca = sourceNode; - edge.targetInLca = targetNode; - - if (sourceNode == targetNode) { - edge.lca = sourceNode.getOwner(); - continue; - } - - sourceAncestorGraph = sourceNode.getOwner(); - - while (edge.lca == null) { - edge.targetInLca = targetNode; - targetAncestorGraph = targetNode.getOwner(); - - while (edge.lca == null) { - if (targetAncestorGraph == sourceAncestorGraph) { - edge.lca = targetAncestorGraph; - break; - } - - if (targetAncestorGraph == this.rootGraph) { - break; - } - - if (edge.lca != null) { - throw "assert failed"; - } - edge.targetInLca = targetAncestorGraph.getParent(); - targetAncestorGraph = edge.targetInLca.getOwner(); - } - - if (sourceAncestorGraph == this.rootGraph) { - break; - } - - if (edge.lca == null) { - edge.sourceInLca = sourceAncestorGraph.getParent(); - sourceAncestorGraph = edge.sourceInLca.getOwner(); - } - } - - if (edge.lca == null) { - throw "assert failed"; - } - } -}; - -LGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) { - if (firstNode == secondNode) { - return firstNode.getOwner(); - } - var firstOwnerGraph = firstNode.getOwner(); - - do { - if (firstOwnerGraph == null) { - break; - } - var secondOwnerGraph = secondNode.getOwner(); - - do { - if (secondOwnerGraph == null) { - break; - } - - if (secondOwnerGraph == firstOwnerGraph) { - return secondOwnerGraph; - } - secondOwnerGraph = secondOwnerGraph.getParent().getOwner(); - } while (true); - - firstOwnerGraph = firstOwnerGraph.getParent().getOwner(); - } while (true); - - return firstOwnerGraph; -}; - -LGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) { - if (graph == null && depth == null) { - graph = this.rootGraph; - depth = 1; - } - var node; - - var nodes = graph.getNodes(); - var s = nodes.length; - for (var i = 0; i < s; i++) { - node = nodes[i]; - node.inclusionTreeDepth = depth; - - if (node.child != null) { - this.calcInclusionTreeDepths(node.child, depth + 1); - } - } -}; - -LGraphManager.prototype.includesInvalidEdge = function () { - var edge; - - var s = this.edges.length; - for (var i = 0; i < s; i++) { - edge = this.edges[i]; - - if (this.isOneAncestorOfOther(edge.source, edge.target)) { - return true; - } - } - return false; -}; - -module.exports = LGraphManager; - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __nested_webpack_require_38707__) { - -"use strict"; - - -var LayoutConstants = __nested_webpack_require_38707__(0); - -function FDLayoutConstants() {} - -//FDLayoutConstants inherits static props in LayoutConstants -for (var prop in LayoutConstants) { - FDLayoutConstants[prop] = LayoutConstants[prop]; -} - -FDLayoutConstants.MAX_ITERATIONS = 2500; - -FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50; -FDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45; -FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0; -FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4; -FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0; -FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8; -FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5; -FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true; -FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true; -FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3; -FDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33; -FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000; -FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000; -FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0; -FDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3; -FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0; -FDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100; -FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1; -FDLayoutConstants.MIN_EDGE_LENGTH = 1; -FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10; - -module.exports = FDLayoutConstants; - -/***/ }), -/* 8 */ -/***/ (function(module, exports, __nested_webpack_require_40298__) { - -"use strict"; - - -/** - * This class maintains a list of static geometry related utility methods. - * - * - * Copyright: i-Vis Research Group, Bilkent University, 2007 - present - */ - -var Point = __nested_webpack_require_40298__(12); - -function IGeometry() {} - -/** - * This method calculates *half* the amount in x and y directions of the two - * input rectangles needed to separate them keeping their respective - * positioning, and returns the result in the input array. An input - * separation buffer added to the amount in both directions. We assume that - * the two rectangles do intersect. - */ -IGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) { - if (!rectA.intersects(rectB)) { - throw "assert failed"; - } - - var directions = new Array(2); - - this.decideDirectionsForOverlappingNodes(rectA, rectB, directions); - - overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x); - overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y); - - // update the overlapping amounts for the following cases: - if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) { - /* Case x.1: - * - * rectA - * | | - * | _________ | - * | | | | - * |________|_______|______| - * | | - * | | - * rectB - */ - overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight()); - } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) { - /* Case x.2: - * - * rectB - * | | - * | _________ | - * | | | | - * |________|_______|______| - * | | - * | | - * rectA - */ - overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight()); - } - if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) { - /* Case y.1: - * ________ rectA - * | - * | - * ______|____ rectB - * | | - * | | - * ______|____| - * | - * | - * |________ - * - */ - overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom()); - } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) { - /* Case y.2: - * ________ rectB - * | - * | - * ______|____ rectA - * | | - * | | - * ______|____| - * | - * | - * |________ - * - */ - overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom()); - } - - // find slope of the line passes two centers - var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX())); - // if centers are overlapped - if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) { - // assume the slope is 1 (45 degree) - slope = 1.0; - } - - var moveByY = slope * overlapAmount[0]; - var moveByX = overlapAmount[1] / slope; - if (overlapAmount[0] < moveByX) { - moveByX = overlapAmount[0]; - } else { - moveByY = overlapAmount[1]; - } - // return half the amount so that if each rectangle is moved by these - // amounts in opposite directions, overlap will be resolved - overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer); - overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer); -}; - -/** - * This method decides the separation direction of overlapping nodes - * - * if directions[0] = -1, then rectA goes left - * if directions[0] = 1, then rectA goes right - * if directions[1] = -1, then rectA goes up - * if directions[1] = 1, then rectA goes down - */ -IGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) { - if (rectA.getCenterX() < rectB.getCenterX()) { - directions[0] = -1; - } else { - directions[0] = 1; - } - - if (rectA.getCenterY() < rectB.getCenterY()) { - directions[1] = -1; - } else { - directions[1] = 1; - } -}; - -/** - * This method calculates the intersection (clipping) points of the two - * input rectangles with line segment defined by the centers of these two - * rectangles. The clipping points are saved in the input double array and - * whether or not the two rectangles overlap is returned. - */ -IGeometry.getIntersection2 = function (rectA, rectB, result) { - //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB - var p1x = rectA.getCenterX(); - var p1y = rectA.getCenterY(); - var p2x = rectB.getCenterX(); - var p2y = rectB.getCenterY(); - - //if two rectangles intersect, then clipping points are centers - if (rectA.intersects(rectB)) { - result[0] = p1x; - result[1] = p1y; - result[2] = p2x; - result[3] = p2y; - return true; - } - //variables for rectA - var topLeftAx = rectA.getX(); - var topLeftAy = rectA.getY(); - var topRightAx = rectA.getRight(); - var bottomLeftAx = rectA.getX(); - var bottomLeftAy = rectA.getBottom(); - var bottomRightAx = rectA.getRight(); - var halfWidthA = rectA.getWidthHalf(); - var halfHeightA = rectA.getHeightHalf(); - //variables for rectB - var topLeftBx = rectB.getX(); - var topLeftBy = rectB.getY(); - var topRightBx = rectB.getRight(); - var bottomLeftBx = rectB.getX(); - var bottomLeftBy = rectB.getBottom(); - var bottomRightBx = rectB.getRight(); - var halfWidthB = rectB.getWidthHalf(); - var halfHeightB = rectB.getHeightHalf(); - - //flag whether clipping points are found - var clipPointAFound = false; - var clipPointBFound = false; - - // line is vertical - if (p1x === p2x) { - if (p1y > p2y) { - result[0] = p1x; - result[1] = topLeftAy; - result[2] = p2x; - result[3] = bottomLeftBy; - return false; - } else if (p1y < p2y) { - result[0] = p1x; - result[1] = bottomLeftAy; - result[2] = p2x; - result[3] = topLeftBy; - return false; - } else { - //not line, return null; - } - } - // line is horizontal - else if (p1y === p2y) { - if (p1x > p2x) { - result[0] = topLeftAx; - result[1] = p1y; - result[2] = topRightBx; - result[3] = p2y; - return false; - } else if (p1x < p2x) { - result[0] = topRightAx; - result[1] = p1y; - result[2] = topLeftBx; - result[3] = p2y; - return false; - } else { - //not valid line, return null; - } - } else { - //slopes of rectA's and rectB's diagonals - var slopeA = rectA.height / rectA.width; - var slopeB = rectB.height / rectB.width; - - //slope of line between center of rectA and center of rectB - var slopePrime = (p2y - p1y) / (p2x - p1x); - var cardinalDirectionA = void 0; - var cardinalDirectionB = void 0; - var tempPointAx = void 0; - var tempPointAy = void 0; - var tempPointBx = void 0; - var tempPointBy = void 0; - - //determine whether clipping point is the corner of nodeA - if (-slopeA === slopePrime) { - if (p1x > p2x) { - result[0] = bottomLeftAx; - result[1] = bottomLeftAy; - clipPointAFound = true; - } else { - result[0] = topRightAx; - result[1] = topLeftAy; - clipPointAFound = true; - } - } else if (slopeA === slopePrime) { - if (p1x > p2x) { - result[0] = topLeftAx; - result[1] = topLeftAy; - clipPointAFound = true; - } else { - result[0] = bottomRightAx; - result[1] = bottomLeftAy; - clipPointAFound = true; - } - } - - //determine whether clipping point is the corner of nodeB - if (-slopeB === slopePrime) { - if (p2x > p1x) { - result[2] = bottomLeftBx; - result[3] = bottomLeftBy; - clipPointBFound = true; - } else { - result[2] = topRightBx; - result[3] = topLeftBy; - clipPointBFound = true; - } - } else if (slopeB === slopePrime) { - if (p2x > p1x) { - result[2] = topLeftBx; - result[3] = topLeftBy; - clipPointBFound = true; - } else { - result[2] = bottomRightBx; - result[3] = bottomLeftBy; - clipPointBFound = true; - } - } - - //if both clipping points are corners - if (clipPointAFound && clipPointBFound) { - return false; - } - - //determine Cardinal Direction of rectangles - if (p1x > p2x) { - if (p1y > p2y) { - cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4); - cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2); - } else { - cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3); - cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1); - } - } else { - if (p1y > p2y) { - cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1); - cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3); - } else { - cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2); - cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4); - } - } - //calculate clipping Point if it is not found before - if (!clipPointAFound) { - switch (cardinalDirectionA) { - case 1: - tempPointAy = topLeftAy; - tempPointAx = p1x + -halfHeightA / slopePrime; - result[0] = tempPointAx; - result[1] = tempPointAy; - break; - case 2: - tempPointAx = bottomRightAx; - tempPointAy = p1y + halfWidthA * slopePrime; - result[0] = tempPointAx; - result[1] = tempPointAy; - break; - case 3: - tempPointAy = bottomLeftAy; - tempPointAx = p1x + halfHeightA / slopePrime; - result[0] = tempPointAx; - result[1] = tempPointAy; - break; - case 4: - tempPointAx = bottomLeftAx; - tempPointAy = p1y + -halfWidthA * slopePrime; - result[0] = tempPointAx; - result[1] = tempPointAy; - break; - } - } - if (!clipPointBFound) { - switch (cardinalDirectionB) { - case 1: - tempPointBy = topLeftBy; - tempPointBx = p2x + -halfHeightB / slopePrime; - result[2] = tempPointBx; - result[3] = tempPointBy; - break; - case 2: - tempPointBx = bottomRightBx; - tempPointBy = p2y + halfWidthB * slopePrime; - result[2] = tempPointBx; - result[3] = tempPointBy; - break; - case 3: - tempPointBy = bottomLeftBy; - tempPointBx = p2x + halfHeightB / slopePrime; - result[2] = tempPointBx; - result[3] = tempPointBy; - break; - case 4: - tempPointBx = bottomLeftBx; - tempPointBy = p2y + -halfWidthB * slopePrime; - result[2] = tempPointBx; - result[3] = tempPointBy; - break; - } - } - } - return false; -}; - -/** - * This method returns in which cardinal direction does input point stays - * 1: North - * 2: East - * 3: South - * 4: West - */ -IGeometry.getCardinalDirection = function (slope, slopePrime, line) { - if (slope > slopePrime) { - return line; - } else { - return 1 + line % 4; - } -}; - -/** - * This method calculates the intersection of the two lines defined by - * point pairs (s1,s2) and (f1,f2). - */ -IGeometry.getIntersection = function (s1, s2, f1, f2) { - if (f2 == null) { - return this.getIntersection2(s1, s2, f1); - } - - var x1 = s1.x; - var y1 = s1.y; - var x2 = s2.x; - var y2 = s2.y; - var x3 = f1.x; - var y3 = f1.y; - var x4 = f2.x; - var y4 = f2.y; - var x = void 0, - y = void 0; // intersection point - var a1 = void 0, - a2 = void 0, - b1 = void 0, - b2 = void 0, - c1 = void 0, - c2 = void 0; // coefficients of line eqns. - var denom = void 0; - - a1 = y2 - y1; - b1 = x1 - x2; - c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 } - - a2 = y4 - y3; - b2 = x3 - x4; - c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 } - - denom = a1 * b2 - a2 * b1; - - if (denom === 0) { - return null; - } - - x = (b1 * c2 - b2 * c1) / denom; - y = (a2 * c1 - a1 * c2) / denom; - - return new Point(x, y); -}; - -/** - * This method finds and returns the angle of the vector from the + x-axis - * in clockwise direction (compatible w/ Java coordinate system!). - */ -IGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) { - var C_angle = void 0; - - if (Cx !== Nx) { - C_angle = Math.atan((Ny - Cy) / (Nx - Cx)); - - if (Nx < Cx) { - C_angle += Math.PI; - } else if (Ny < Cy) { - C_angle += this.TWO_PI; - } - } else if (Ny < Cy) { - C_angle = this.ONE_AND_HALF_PI; // 270 degrees - } else { - C_angle = this.HALF_PI; // 90 degrees - } - - return C_angle; -}; - -/** - * This method checks whether the given two line segments (one with point - * p1 and p2, the other with point p3 and p4) intersect at a point other - * than these points. - */ -IGeometry.doIntersect = function (p1, p2, p3, p4) { - var a = p1.x; - var b = p1.y; - var c = p2.x; - var d = p2.y; - var p = p3.x; - var q = p3.y; - var r = p4.x; - var s = p4.y; - var det = (c - a) * (s - q) - (r - p) * (d - b); - - if (det === 0) { - return false; - } else { - var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det; - var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det; - return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1; - } -}; - -// ----------------------------------------------------------------------------- -// Section: Class Constants -// ----------------------------------------------------------------------------- -/** - * Some useful pre-calculated constants - */ -IGeometry.HALF_PI = 0.5 * Math.PI; -IGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI; -IGeometry.TWO_PI = 2.0 * Math.PI; -IGeometry.THREE_PI = 3.0 * Math.PI; - -module.exports = IGeometry; - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function IMath() {} - -/** - * This method returns the sign of the input value. - */ -IMath.sign = function (value) { - if (value > 0) { - return 1; - } else if (value < 0) { - return -1; - } else { - return 0; - } -}; - -IMath.floor = function (value) { - return value < 0 ? Math.ceil(value) : Math.floor(value); -}; - -IMath.ceil = function (value) { - return value < 0 ? Math.floor(value) : Math.ceil(value); -}; - -module.exports = IMath; - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function Integer() {} - -Integer.MAX_VALUE = 2147483647; -Integer.MIN_VALUE = -2147483648; - -module.exports = Integer; - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var nodeFrom = function nodeFrom(value) { - return { value: value, next: null, prev: null }; -}; - -var add = function add(prev, node, next, list) { - if (prev !== null) { - prev.next = node; - } else { - list.head = node; - } - - if (next !== null) { - next.prev = node; - } else { - list.tail = node; - } - - node.prev = prev; - node.next = next; - - list.length++; - - return node; -}; - -var _remove = function _remove(node, list) { - var prev = node.prev, - next = node.next; - - - if (prev !== null) { - prev.next = next; - } else { - list.head = next; - } - - if (next !== null) { - next.prev = prev; - } else { - list.tail = prev; - } - - node.prev = node.next = null; - - list.length--; - - return node; -}; - -var LinkedList = function () { - function LinkedList(vals) { - var _this = this; - - _classCallCheck(this, LinkedList); - - this.length = 0; - this.head = null; - this.tail = null; - - if (vals != null) { - vals.forEach(function (v) { - return _this.push(v); - }); - } - } - - _createClass(LinkedList, [{ - key: "size", - value: function size() { - return this.length; - } - }, { - key: "insertBefore", - value: function insertBefore(val, otherNode) { - return add(otherNode.prev, nodeFrom(val), otherNode, this); - } - }, { - key: "insertAfter", - value: function insertAfter(val, otherNode) { - return add(otherNode, nodeFrom(val), otherNode.next, this); - } - }, { - key: "insertNodeBefore", - value: function insertNodeBefore(newNode, otherNode) { - return add(otherNode.prev, newNode, otherNode, this); - } - }, { - key: "insertNodeAfter", - value: function insertNodeAfter(newNode, otherNode) { - return add(otherNode, newNode, otherNode.next, this); - } - }, { - key: "push", - value: function push(val) { - return add(this.tail, nodeFrom(val), null, this); - } - }, { - key: "unshift", - value: function unshift(val) { - return add(null, nodeFrom(val), this.head, this); - } - }, { - key: "remove", - value: function remove(node) { - return _remove(node, this); - } - }, { - key: "pop", - value: function pop() { - return _remove(this.tail, this).value; - } - }, { - key: "popNode", - value: function popNode() { - return _remove(this.tail, this); - } - }, { - key: "shift", - value: function shift() { - return _remove(this.head, this).value; - } - }, { - key: "shiftNode", - value: function shiftNode() { - return _remove(this.head, this); - } - }, { - key: "get_object_at", - value: function get_object_at(index) { - if (index <= this.length()) { - var i = 1; - var current = this.head; - while (i < index) { - current = current.next; - i++; - } - return current.value; - } - } - }, { - key: "set_object_at", - value: function set_object_at(index, value) { - if (index <= this.length()) { - var i = 1; - var current = this.head; - while (i < index) { - current = current.next; - i++; - } - current.value = value; - } - } - }]); - - return LinkedList; -}(); - -module.exports = LinkedList; - -/***/ }), -/* 12 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/* - *This class is the javascript implementation of the Point.java class in jdk - */ -function Point(x, y, p) { - this.x = null; - this.y = null; - if (x == null && y == null && p == null) { - this.x = 0; - this.y = 0; - } else if (typeof x == 'number' && typeof y == 'number' && p == null) { - this.x = x; - this.y = y; - } else if (x.constructor.name == 'Point' && y == null && p == null) { - p = x; - this.x = p.x; - this.y = p.y; - } -} - -Point.prototype.getX = function () { - return this.x; -}; - -Point.prototype.getY = function () { - return this.y; -}; - -Point.prototype.getLocation = function () { - return new Point(this.x, this.y); -}; - -Point.prototype.setLocation = function (x, y, p) { - if (x.constructor.name == 'Point' && y == null && p == null) { - p = x; - this.setLocation(p.x, p.y); - } else if (typeof x == 'number' && typeof y == 'number' && p == null) { - //if both parameters are integer just move (x,y) location - if (parseInt(x) == x && parseInt(y) == y) { - this.move(x, y); - } else { - this.x = Math.floor(x + 0.5); - this.y = Math.floor(y + 0.5); - } - } -}; - -Point.prototype.move = function (x, y) { - this.x = x; - this.y = y; -}; - -Point.prototype.translate = function (dx, dy) { - this.x += dx; - this.y += dy; -}; - -Point.prototype.equals = function (obj) { - if (obj.constructor.name == "Point") { - var pt = obj; - return this.x == pt.x && this.y == pt.y; - } - return this == obj; -}; - -Point.prototype.toString = function () { - return new Point().constructor.name + "[x=" + this.x + ",y=" + this.y + "]"; -}; - -module.exports = Point; - -/***/ }), -/* 13 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function RectangleD(x, y, width, height) { - this.x = 0; - this.y = 0; - this.width = 0; - this.height = 0; - - if (x != null && y != null && width != null && height != null) { - this.x = x; - this.y = y; - this.width = width; - this.height = height; - } -} - -RectangleD.prototype.getX = function () { - return this.x; -}; - -RectangleD.prototype.setX = function (x) { - this.x = x; -}; - -RectangleD.prototype.getY = function () { - return this.y; -}; - -RectangleD.prototype.setY = function (y) { - this.y = y; -}; - -RectangleD.prototype.getWidth = function () { - return this.width; -}; - -RectangleD.prototype.setWidth = function (width) { - this.width = width; -}; - -RectangleD.prototype.getHeight = function () { - return this.height; -}; - -RectangleD.prototype.setHeight = function (height) { - this.height = height; -}; - -RectangleD.prototype.getRight = function () { - return this.x + this.width; -}; - -RectangleD.prototype.getBottom = function () { - return this.y + this.height; -}; - -RectangleD.prototype.intersects = function (a) { - if (this.getRight() < a.x) { - return false; - } - - if (this.getBottom() < a.y) { - return false; - } - - if (a.getRight() < this.x) { - return false; - } - - if (a.getBottom() < this.y) { - return false; - } - - return true; -}; - -RectangleD.prototype.getCenterX = function () { - return this.x + this.width / 2; -}; - -RectangleD.prototype.getMinX = function () { - return this.getX(); -}; - -RectangleD.prototype.getMaxX = function () { - return this.getX() + this.width; -}; - -RectangleD.prototype.getCenterY = function () { - return this.y + this.height / 2; -}; - -RectangleD.prototype.getMinY = function () { - return this.getY(); -}; - -RectangleD.prototype.getMaxY = function () { - return this.getY() + this.height; -}; - -RectangleD.prototype.getWidthHalf = function () { - return this.width / 2; -}; - -RectangleD.prototype.getHeightHalf = function () { - return this.height / 2; -}; - -module.exports = RectangleD; - -/***/ }), -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -function UniqueIDGeneretor() {} - -UniqueIDGeneretor.lastID = 0; - -UniqueIDGeneretor.createID = function (obj) { - if (UniqueIDGeneretor.isPrimitive(obj)) { - return obj; - } - if (obj.uniqueID != null) { - return obj.uniqueID; - } - obj.uniqueID = UniqueIDGeneretor.getString(); - UniqueIDGeneretor.lastID++; - return obj.uniqueID; -}; - -UniqueIDGeneretor.getString = function (id) { - if (id == null) id = UniqueIDGeneretor.lastID; - return "Object#" + id + ""; -}; - -UniqueIDGeneretor.isPrimitive = function (arg) { - var type = typeof arg === "undefined" ? "undefined" : _typeof(arg); - return arg == null || type != "object" && type != "function"; -}; - -module.exports = UniqueIDGeneretor; - -/***/ }), -/* 15 */ -/***/ (function(module, exports, __nested_webpack_require_64072__) { - -"use strict"; - - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -var LayoutConstants = __nested_webpack_require_64072__(0); -var LGraphManager = __nested_webpack_require_64072__(6); -var LNode = __nested_webpack_require_64072__(3); -var LEdge = __nested_webpack_require_64072__(1); -var LGraph = __nested_webpack_require_64072__(5); -var PointD = __nested_webpack_require_64072__(4); -var Transform = __nested_webpack_require_64072__(17); -var Emitter = __nested_webpack_require_64072__(27); - -function Layout(isRemoteUse) { - Emitter.call(this); - - //Layout Quality: 0:draft, 1:default, 2:proof - this.layoutQuality = LayoutConstants.QUALITY; - //Whether layout should create bendpoints as needed or not - this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; - //Whether layout should be incremental or not - this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; - //Whether we animate from before to after layout node positions - this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; - //Whether we animate the layout process or not - this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; - //Number iterations that should be done between two successive animations - this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; - /** - * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When - * they are, both spring and repulsion forces between two leaf nodes can be - * calculated without the expensive clipping point calculations, resulting - * in major speed-up. - */ - this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; - /** - * This is used for creation of bendpoints by using dummy nodes and edges. - * Maps an LEdge to its dummy bendpoint path. - */ - this.edgeToDummyNodes = new Map(); - this.graphManager = new LGraphManager(this); - this.isLayoutFinished = false; - this.isSubLayout = false; - this.isRemoteUse = false; - - if (isRemoteUse != null) { - this.isRemoteUse = isRemoteUse; - } -} - -Layout.RANDOM_SEED = 1; - -Layout.prototype = Object.create(Emitter.prototype); - -Layout.prototype.getGraphManager = function () { - return this.graphManager; -}; - -Layout.prototype.getAllNodes = function () { - return this.graphManager.getAllNodes(); -}; - -Layout.prototype.getAllEdges = function () { - return this.graphManager.getAllEdges(); -}; - -Layout.prototype.getAllNodesToApplyGravitation = function () { - return this.graphManager.getAllNodesToApplyGravitation(); -}; - -Layout.prototype.newGraphManager = function () { - var gm = new LGraphManager(this); - this.graphManager = gm; - return gm; -}; - -Layout.prototype.newGraph = function (vGraph) { - return new LGraph(null, this.graphManager, vGraph); -}; - -Layout.prototype.newNode = function (vNode) { - return new LNode(this.graphManager, vNode); -}; - -Layout.prototype.newEdge = function (vEdge) { - return new LEdge(null, null, vEdge); -}; - -Layout.prototype.checkLayoutSuccess = function () { - return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge(); -}; - -Layout.prototype.runLayout = function () { - this.isLayoutFinished = false; - - if (this.tilingPreLayout) { - this.tilingPreLayout(); - } - - this.initParameters(); - var isLayoutSuccessfull; - - if (this.checkLayoutSuccess()) { - isLayoutSuccessfull = false; - } else { - isLayoutSuccessfull = this.layout(); - } - - if (LayoutConstants.ANIMATE === 'during') { - // If this is a 'during' layout animation. Layout is not finished yet. - // We need to perform these in index.js when layout is really finished. - return false; - } - - if (isLayoutSuccessfull) { - if (!this.isSubLayout) { - this.doPostLayout(); - } - } - - if (this.tilingPostLayout) { - this.tilingPostLayout(); - } - - this.isLayoutFinished = true; - - return isLayoutSuccessfull; -}; - -/** - * This method performs the operations required after layout. - */ -Layout.prototype.doPostLayout = function () { - //assert !isSubLayout : "Should not be called on sub-layout!"; - // Propagate geometric changes to v-level objects - if (!this.incremental) { - this.transform(); - } - this.update(); -}; - -/** - * This method updates the geometry of the target graph according to - * calculated layout. - */ -Layout.prototype.update2 = function () { - // update bend points - if (this.createBendsAsNeeded) { - this.createBendpointsFromDummyNodes(); - - // reset all edges, since the topology has changed - this.graphManager.resetAllEdges(); - } - - // perform edge, node and root updates if layout is not called - // remotely - if (!this.isRemoteUse) { - // update all edges - var edge; - var allEdges = this.graphManager.getAllEdges(); - for (var i = 0; i < allEdges.length; i++) { - edge = allEdges[i]; - // this.update(edge); - } - - // recursively update nodes - var node; - var nodes = this.graphManager.getRoot().getNodes(); - for (var i = 0; i < nodes.length; i++) { - node = nodes[i]; - // this.update(node); - } - - // update root graph - this.update(this.graphManager.getRoot()); - } -}; - -Layout.prototype.update = function (obj) { - if (obj == null) { - this.update2(); - } else if (obj instanceof LNode) { - var node = obj; - if (node.getChild() != null) { - // since node is compound, recursively update child nodes - var nodes = node.getChild().getNodes(); - for (var i = 0; i < nodes.length; i++) { - update(nodes[i]); - } - } - - // if the l-level node is associated with a v-level graph object, - // then it is assumed that the v-level node implements the - // interface Updatable. - if (node.vGraphObject != null) { - // cast to Updatable without any type check - var vNode = node.vGraphObject; - - // call the update method of the interface - vNode.update(node); - } - } else if (obj instanceof LEdge) { - var edge = obj; - // if the l-level edge is associated with a v-level graph object, - // then it is assumed that the v-level edge implements the - // interface Updatable. - - if (edge.vGraphObject != null) { - // cast to Updatable without any type check - var vEdge = edge.vGraphObject; - - // call the update method of the interface - vEdge.update(edge); - } - } else if (obj instanceof LGraph) { - var graph = obj; - // if the l-level graph is associated with a v-level graph object, - // then it is assumed that the v-level object implements the - // interface Updatable. - - if (graph.vGraphObject != null) { - // cast to Updatable without any type check - var vGraph = graph.vGraphObject; - - // call the update method of the interface - vGraph.update(graph); - } - } -}; - -/** - * This method is used to set all layout parameters to default values - * determined at compile time. - */ -Layout.prototype.initParameters = function () { - if (!this.isSubLayout) { - this.layoutQuality = LayoutConstants.QUALITY; - this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; - this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; - this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; - this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; - this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; - this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; - } - - if (this.animationDuringLayout) { - this.animationOnLayout = false; - } -}; - -Layout.prototype.transform = function (newLeftTop) { - if (newLeftTop == undefined) { - this.transform(new PointD(0, 0)); - } else { - // create a transformation object (from Eclipse to layout). When an - // inverse transform is applied, we get upper-left coordinate of the - // drawing or the root graph at given input coordinate (some margins - // already included in calculation of left-top). - - var trans = new Transform(); - var leftTop = this.graphManager.getRoot().updateLeftTop(); - - if (leftTop != null) { - trans.setWorldOrgX(newLeftTop.x); - trans.setWorldOrgY(newLeftTop.y); - - trans.setDeviceOrgX(leftTop.x); - trans.setDeviceOrgY(leftTop.y); - - var nodes = this.getAllNodes(); - var node; - - for (var i = 0; i < nodes.length; i++) { - node = nodes[i]; - node.transform(trans); - } - } - } -}; - -Layout.prototype.positionNodesRandomly = function (graph) { - - if (graph == undefined) { - //assert !this.incremental; - this.positionNodesRandomly(this.getGraphManager().getRoot()); - this.getGraphManager().getRoot().updateBounds(true); - } else { - var lNode; - var childGraph; - - var nodes = graph.getNodes(); - for (var i = 0; i < nodes.length; i++) { - lNode = nodes[i]; - childGraph = lNode.getChild(); - - if (childGraph == null) { - lNode.scatter(); - } else if (childGraph.getNodes().length == 0) { - lNode.scatter(); - } else { - this.positionNodesRandomly(childGraph); - lNode.updateBounds(); - } - } - } -}; - -/** - * This method returns a list of trees where each tree is represented as a - * list of l-nodes. The method returns a list of size 0 when: - * - The graph is not flat or - * - One of the component(s) of the graph is not a tree. - */ -Layout.prototype.getFlatForest = function () { - var flatForest = []; - var isForest = true; - - // Quick reference for all nodes in the graph manager associated with - // this layout. The list should not be changed. - var allNodes = this.graphManager.getRoot().getNodes(); - - // First be sure that the graph is flat - var isFlat = true; - - for (var i = 0; i < allNodes.length; i++) { - if (allNodes[i].getChild() != null) { - isFlat = false; - } - } - - // Return empty forest if the graph is not flat. - if (!isFlat) { - return flatForest; - } - - // Run BFS for each component of the graph. - - var visited = new Set(); - var toBeVisited = []; - var parents = new Map(); - var unProcessedNodes = []; - - unProcessedNodes = unProcessedNodes.concat(allNodes); - - // Each iteration of this loop finds a component of the graph and - // decides whether it is a tree or not. If it is a tree, adds it to the - // forest and continued with the next component. - - while (unProcessedNodes.length > 0 && isForest) { - toBeVisited.push(unProcessedNodes[0]); - - // Start the BFS. Each iteration of this loop visits a node in a - // BFS manner. - while (toBeVisited.length > 0 && isForest) { - //pool operation - var currentNode = toBeVisited[0]; - toBeVisited.splice(0, 1); - visited.add(currentNode); - - // Traverse all neighbors of this node - var neighborEdges = currentNode.getEdges(); - - for (var i = 0; i < neighborEdges.length; i++) { - var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode); - - // If BFS is not growing from this neighbor. - if (parents.get(currentNode) != currentNeighbor) { - // We haven't previously visited this neighbor. - if (!visited.has(currentNeighbor)) { - toBeVisited.push(currentNeighbor); - parents.set(currentNeighbor, currentNode); - } - // Since we have previously visited this neighbor and - // this neighbor is not parent of currentNode, given - // graph contains a component that is not tree, hence - // it is not a forest. - else { - isForest = false; - break; - } - } - } - } - - // The graph contains a component that is not a tree. Empty - // previously found trees. The method will end. - if (!isForest) { - flatForest = []; - } - // Save currently visited nodes as a tree in our forest. Reset - // visited and parents lists. Continue with the next component of - // the graph, if any. - else { - var temp = [].concat(_toConsumableArray(visited)); - flatForest.push(temp); - //flatForest = flatForest.concat(temp); - //unProcessedNodes.removeAll(visited); - for (var i = 0; i < temp.length; i++) { - var value = temp[i]; - var index = unProcessedNodes.indexOf(value); - if (index > -1) { - unProcessedNodes.splice(index, 1); - } - } - visited = new Set(); - parents = new Map(); - } - } - - return flatForest; -}; - -/** - * This method creates dummy nodes (an l-level node with minimal dimensions) - * for the given edge (one per bendpoint). The existing l-level structure - * is updated accordingly. - */ -Layout.prototype.createDummyNodesForBendpoints = function (edge) { - var dummyNodes = []; - var prev = edge.source; - - var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target); - - for (var i = 0; i < edge.bendpoints.length; i++) { - // create new dummy node - var dummyNode = this.newNode(null); - dummyNode.setRect(new Point(0, 0), new Dimension(1, 1)); - - graph.add(dummyNode); - - // create new dummy edge between prev and dummy node - var dummyEdge = this.newEdge(null); - this.graphManager.add(dummyEdge, prev, dummyNode); - - dummyNodes.add(dummyNode); - prev = dummyNode; - } - - var dummyEdge = this.newEdge(null); - this.graphManager.add(dummyEdge, prev, edge.target); - - this.edgeToDummyNodes.set(edge, dummyNodes); - - // remove real edge from graph manager if it is inter-graph - if (edge.isInterGraph()) { - this.graphManager.remove(edge); - } - // else, remove the edge from the current graph - else { - graph.remove(edge); - } - - return dummyNodes; -}; - -/** - * This method creates bendpoints for edges from the dummy nodes - * at l-level. - */ -Layout.prototype.createBendpointsFromDummyNodes = function () { - var edges = []; - edges = edges.concat(this.graphManager.getAllEdges()); - edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges); - - for (var k = 0; k < edges.length; k++) { - var lEdge = edges[k]; - - if (lEdge.bendpoints.length > 0) { - var path = this.edgeToDummyNodes.get(lEdge); - - for (var i = 0; i < path.length; i++) { - var dummyNode = path[i]; - var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY()); - - // update bendpoint's location according to dummy node - var ebp = lEdge.bendpoints.get(i); - ebp.x = p.x; - ebp.y = p.y; - - // remove the dummy node, dummy edges incident with this - // dummy node is also removed (within the remove method) - dummyNode.getOwner().remove(dummyNode); - } - - // add the real edge to graph - this.graphManager.add(lEdge, lEdge.source, lEdge.target); - } - } -}; - -Layout.transform = function (sliderValue, defaultValue, minDiv, maxMul) { - if (minDiv != undefined && maxMul != undefined) { - var value = defaultValue; - - if (sliderValue <= 50) { - var minValue = defaultValue / minDiv; - value -= (defaultValue - minValue) / 50 * (50 - sliderValue); - } else { - var maxValue = defaultValue * maxMul; - value += (maxValue - defaultValue) / 50 * (sliderValue - 50); - } - - return value; - } else { - var a, b; - - if (sliderValue <= 50) { - a = 9.0 * defaultValue / 500.0; - b = defaultValue / 10.0; - } else { - a = 9.0 * defaultValue / 50.0; - b = -8 * defaultValue; - } - - return a * sliderValue + b; - } -}; - -/** - * This method finds and returns the center of the given nodes, assuming - * that the given nodes form a tree in themselves. - */ -Layout.findCenterOfTree = function (nodes) { - var list = []; - list = list.concat(nodes); - - var removedNodes = []; - var remainingDegrees = new Map(); - var foundCenter = false; - var centerNode = null; - - if (list.length == 1 || list.length == 2) { - foundCenter = true; - centerNode = list[0]; - } - - for (var i = 0; i < list.length; i++) { - var node = list[i]; - var degree = node.getNeighborsList().size; - remainingDegrees.set(node, node.getNeighborsList().size); - - if (degree == 1) { - removedNodes.push(node); - } - } - - var tempList = []; - tempList = tempList.concat(removedNodes); - - while (!foundCenter) { - var tempList2 = []; - tempList2 = tempList2.concat(tempList); - tempList = []; - - for (var i = 0; i < list.length; i++) { - var node = list[i]; - - var index = list.indexOf(node); - if (index >= 0) { - list.splice(index, 1); - } - - var neighbours = node.getNeighborsList(); - - neighbours.forEach(function (neighbour) { - if (removedNodes.indexOf(neighbour) < 0) { - var otherDegree = remainingDegrees.get(neighbour); - var newDegree = otherDegree - 1; - - if (newDegree == 1) { - tempList.push(neighbour); - } - - remainingDegrees.set(neighbour, newDegree); - } - }); - } - - removedNodes = removedNodes.concat(tempList); - - if (list.length == 1 || list.length == 2) { - foundCenter = true; - centerNode = list[0]; - } - } - - return centerNode; -}; - -/** - * During the coarsening process, this layout may be referenced by two graph managers - * this setter function grants access to change the currently being used graph manager - */ -Layout.prototype.setGraphManager = function (gm) { - this.graphManager = gm; -}; - -module.exports = Layout; - -/***/ }), -/* 16 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function RandomSeed() {} -// adapted from: https://stackoverflow.com/a/19303725 -RandomSeed.seed = 1; -RandomSeed.x = 0; - -RandomSeed.nextDouble = function () { - RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000; - return RandomSeed.x - Math.floor(RandomSeed.x); -}; - -module.exports = RandomSeed; - -/***/ }), -/* 17 */ -/***/ (function(module, exports, __nested_webpack_require_81860__) { - -"use strict"; - - -var PointD = __nested_webpack_require_81860__(4); - -function Transform(x, y) { - this.lworldOrgX = 0.0; - this.lworldOrgY = 0.0; - this.ldeviceOrgX = 0.0; - this.ldeviceOrgY = 0.0; - this.lworldExtX = 1.0; - this.lworldExtY = 1.0; - this.ldeviceExtX = 1.0; - this.ldeviceExtY = 1.0; -} - -Transform.prototype.getWorldOrgX = function () { - return this.lworldOrgX; -}; - -Transform.prototype.setWorldOrgX = function (wox) { - this.lworldOrgX = wox; -}; - -Transform.prototype.getWorldOrgY = function () { - return this.lworldOrgY; -}; - -Transform.prototype.setWorldOrgY = function (woy) { - this.lworldOrgY = woy; -}; - -Transform.prototype.getWorldExtX = function () { - return this.lworldExtX; -}; - -Transform.prototype.setWorldExtX = function (wex) { - this.lworldExtX = wex; -}; - -Transform.prototype.getWorldExtY = function () { - return this.lworldExtY; -}; - -Transform.prototype.setWorldExtY = function (wey) { - this.lworldExtY = wey; -}; - -/* Device related */ - -Transform.prototype.getDeviceOrgX = function () { - return this.ldeviceOrgX; -}; - -Transform.prototype.setDeviceOrgX = function (dox) { - this.ldeviceOrgX = dox; -}; - -Transform.prototype.getDeviceOrgY = function () { - return this.ldeviceOrgY; -}; - -Transform.prototype.setDeviceOrgY = function (doy) { - this.ldeviceOrgY = doy; -}; - -Transform.prototype.getDeviceExtX = function () { - return this.ldeviceExtX; -}; - -Transform.prototype.setDeviceExtX = function (dex) { - this.ldeviceExtX = dex; -}; - -Transform.prototype.getDeviceExtY = function () { - return this.ldeviceExtY; -}; - -Transform.prototype.setDeviceExtY = function (dey) { - this.ldeviceExtY = dey; -}; - -Transform.prototype.transformX = function (x) { - var xDevice = 0.0; - var worldExtX = this.lworldExtX; - if (worldExtX != 0.0) { - xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX; - } - - return xDevice; -}; - -Transform.prototype.transformY = function (y) { - var yDevice = 0.0; - var worldExtY = this.lworldExtY; - if (worldExtY != 0.0) { - yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY; - } - - return yDevice; -}; - -Transform.prototype.inverseTransformX = function (x) { - var xWorld = 0.0; - var deviceExtX = this.ldeviceExtX; - if (deviceExtX != 0.0) { - xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX; - } - - return xWorld; -}; - -Transform.prototype.inverseTransformY = function (y) { - var yWorld = 0.0; - var deviceExtY = this.ldeviceExtY; - if (deviceExtY != 0.0) { - yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY; - } - return yWorld; -}; - -Transform.prototype.inverseTransformPoint = function (inPoint) { - var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y)); - return outPoint; -}; - -module.exports = Transform; - -/***/ }), -/* 18 */ -/***/ (function(module, exports, __nested_webpack_require_84747__) { - -"use strict"; - - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -var Layout = __nested_webpack_require_84747__(15); -var FDLayoutConstants = __nested_webpack_require_84747__(7); -var LayoutConstants = __nested_webpack_require_84747__(0); -var IGeometry = __nested_webpack_require_84747__(8); -var IMath = __nested_webpack_require_84747__(9); - -function FDLayout() { - Layout.call(this); - - this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; - this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; - this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; - this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; - this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; - this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; - this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; - this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; - this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100; - this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; - this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; - this.totalDisplacement = 0.0; - this.oldTotalDisplacement = 0.0; - this.maxIterations = FDLayoutConstants.MAX_ITERATIONS; -} - -FDLayout.prototype = Object.create(Layout.prototype); - -for (var prop in Layout) { - FDLayout[prop] = Layout[prop]; -} - -FDLayout.prototype.initParameters = function () { - Layout.prototype.initParameters.call(this, arguments); - - this.totalIterations = 0; - this.notAnimatedIterations = 0; - - this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION; - - this.grid = []; -}; - -FDLayout.prototype.calcIdealEdgeLengths = function () { - var edge; - var lcaDepth; - var source; - var target; - var sizeOfSourceInLca; - var sizeOfTargetInLca; - - var allEdges = this.getGraphManager().getAllEdges(); - for (var i = 0; i < allEdges.length; i++) { - edge = allEdges[i]; - - edge.idealLength = this.idealEdgeLength; - - if (edge.isInterGraph) { - source = edge.getSource(); - target = edge.getTarget(); - - sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize(); - sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize(); - - if (this.useSmartIdealEdgeLengthCalculation) { - edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE; - } - - lcaDepth = edge.getLca().getInclusionTreeDepth(); - - edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth); - } - } -}; - -FDLayout.prototype.initSpringEmbedder = function () { - - var s = this.getAllNodes().length; - if (this.incremental) { - if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { - this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); - } - this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL; - } else { - if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { - this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); - } else { - this.coolingFactor = 1.0; - } - this.initialCoolingFactor = this.coolingFactor; - this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT; - } - - this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations); - - this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length; - - this.repulsionRange = this.calcRepulsionRange(); -}; - -FDLayout.prototype.calcSpringForces = function () { - var lEdges = this.getAllEdges(); - var edge; - - for (var i = 0; i < lEdges.length; i++) { - edge = lEdges[i]; - - this.calcSpringForce(edge, edge.idealLength); - } -}; - -FDLayout.prototype.calcRepulsionForces = function () { - var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var i, j; - var nodeA, nodeB; - var lNodes = this.getAllNodes(); - var processedNodeSet; - - if (this.useFRGridVariant) { - if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) { - this.updateGrid(); - } - - processedNodeSet = new Set(); - - // calculate repulsion forces between each nodes and its surrounding - for (i = 0; i < lNodes.length; i++) { - nodeA = lNodes[i]; - this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate); - processedNodeSet.add(nodeA); - } - } else { - for (i = 0; i < lNodes.length; i++) { - nodeA = lNodes[i]; - - for (j = i + 1; j < lNodes.length; j++) { - nodeB = lNodes[j]; - - // If both nodes are not members of the same graph, skip. - if (nodeA.getOwner() != nodeB.getOwner()) { - continue; - } - - this.calcRepulsionForce(nodeA, nodeB); - } - } - } -}; - -FDLayout.prototype.calcGravitationalForces = function () { - var node; - var lNodes = this.getAllNodesToApplyGravitation(); - - for (var i = 0; i < lNodes.length; i++) { - node = lNodes[i]; - this.calcGravitationalForce(node); - } -}; - -FDLayout.prototype.moveNodes = function () { - var lNodes = this.getAllNodes(); - var node; - - for (var i = 0; i < lNodes.length; i++) { - node = lNodes[i]; - node.move(); - } -}; - -FDLayout.prototype.calcSpringForce = function (edge, idealLength) { - var sourceNode = edge.getSource(); - var targetNode = edge.getTarget(); - - var length; - var springForce; - var springForceX; - var springForceY; - - // Update edge length - if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) { - edge.updateLengthSimple(); - } else { - edge.updateLength(); - - if (edge.isOverlapingSourceAndTarget) { - return; - } - } - - length = edge.getLength(); - - if (length == 0) return; - - // Calculate spring forces - springForce = this.springConstant * (length - idealLength); - - // Project force onto x and y axes - springForceX = springForce * (edge.lengthX / length); - springForceY = springForce * (edge.lengthY / length); - - // Apply forces on the end nodes - sourceNode.springForceX += springForceX; - sourceNode.springForceY += springForceY; - targetNode.springForceX -= springForceX; - targetNode.springForceY -= springForceY; -}; - -FDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) { - var rectA = nodeA.getRect(); - var rectB = nodeB.getRect(); - var overlapAmount = new Array(2); - var clipPoints = new Array(4); - var distanceX; - var distanceY; - var distanceSquared; - var distance; - var repulsionForce; - var repulsionForceX; - var repulsionForceY; - - if (rectA.intersects(rectB)) // two nodes overlap - { - // calculate separation amount in x and y directions - IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0); - - repulsionForceX = 2 * overlapAmount[0]; - repulsionForceY = 2 * overlapAmount[1]; - - var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren); - - // Apply forces on the two nodes - nodeA.repulsionForceX -= childrenConstant * repulsionForceX; - nodeA.repulsionForceY -= childrenConstant * repulsionForceY; - nodeB.repulsionForceX += childrenConstant * repulsionForceX; - nodeB.repulsionForceY += childrenConstant * repulsionForceY; - } else // no overlap - { - // calculate distance - - if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers - { - distanceX = rectB.getCenterX() - rectA.getCenterX(); - distanceY = rectB.getCenterY() - rectA.getCenterY(); - } else // use clipping points - { - IGeometry.getIntersection(rectA, rectB, clipPoints); - - distanceX = clipPoints[2] - clipPoints[0]; - distanceY = clipPoints[3] - clipPoints[1]; - } - - // No repulsion range. FR grid variant should take care of this. - if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) { - distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST; - } - - if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) { - distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST; - } - - distanceSquared = distanceX * distanceX + distanceY * distanceY; - distance = Math.sqrt(distanceSquared); - - repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared; - - // Project force onto x and y axes - repulsionForceX = repulsionForce * distanceX / distance; - repulsionForceY = repulsionForce * distanceY / distance; - - // Apply forces on the two nodes - nodeA.repulsionForceX -= repulsionForceX; - nodeA.repulsionForceY -= repulsionForceY; - nodeB.repulsionForceX += repulsionForceX; - nodeB.repulsionForceY += repulsionForceY; - } -}; - -FDLayout.prototype.calcGravitationalForce = function (node) { - var ownerGraph; - var ownerCenterX; - var ownerCenterY; - var distanceX; - var distanceY; - var absDistanceX; - var absDistanceY; - var estimatedSize; - ownerGraph = node.getOwner(); - - ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2; - ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2; - distanceX = node.getCenterX() - ownerCenterX; - distanceY = node.getCenterY() - ownerCenterY; - absDistanceX = Math.abs(distanceX) + node.getWidth() / 2; - absDistanceY = Math.abs(distanceY) + node.getHeight() / 2; - - if (node.getOwner() == this.graphManager.getRoot()) // in the root graph - { - estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor; - - if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { - node.gravitationForceX = -this.gravityConstant * distanceX; - node.gravitationForceY = -this.gravityConstant * distanceY; - } - } else // inside a compound - { - estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor; - - if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { - node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant; - node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant; - } - } -}; - -FDLayout.prototype.isConverged = function () { - var converged; - var oscilating = false; - - if (this.totalIterations > this.maxIterations / 3) { - oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2; - } - - converged = this.totalDisplacement < this.totalDisplacementThreshold; - - this.oldTotalDisplacement = this.totalDisplacement; - - return converged || oscilating; -}; - -FDLayout.prototype.animate = function () { - if (this.animationDuringLayout && !this.isSubLayout) { - if (this.notAnimatedIterations == this.animationPeriod) { - this.update(); - this.notAnimatedIterations = 0; - } else { - this.notAnimatedIterations++; - } - } -}; - -//This method calculates the number of children (weight) for all nodes -FDLayout.prototype.calcNoOfChildrenForAllNodes = function () { - var node; - var allNodes = this.graphManager.getAllNodes(); - - for (var i = 0; i < allNodes.length; i++) { - node = allNodes[i]; - node.noOfChildren = node.getNoOfChildren(); - } -}; - -// ----------------------------------------------------------------------------- -// Section: FR-Grid Variant Repulsion Force Calculation -// ----------------------------------------------------------------------------- - -FDLayout.prototype.calcGrid = function (graph) { - - var sizeX = 0; - var sizeY = 0; - - sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange)); - sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange)); - - var grid = new Array(sizeX); - - for (var i = 0; i < sizeX; i++) { - grid[i] = new Array(sizeY); - } - - for (var i = 0; i < sizeX; i++) { - for (var j = 0; j < sizeY; j++) { - grid[i][j] = new Array(); - } - } - - return grid; -}; - -FDLayout.prototype.addNodeToGrid = function (v, left, top) { - - var startX = 0; - var finishX = 0; - var startY = 0; - var finishY = 0; - - startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange)); - finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange)); - startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange)); - finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange)); - - for (var i = startX; i <= finishX; i++) { - for (var j = startY; j <= finishY; j++) { - this.grid[i][j].push(v); - v.setGridCoordinates(startX, finishX, startY, finishY); - } - } -}; - -FDLayout.prototype.updateGrid = function () { - var i; - var nodeA; - var lNodes = this.getAllNodes(); - - this.grid = this.calcGrid(this.graphManager.getRoot()); - - // put all nodes to proper grid cells - for (i = 0; i < lNodes.length; i++) { - nodeA = lNodes[i]; - this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop()); - } -}; - -FDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) { - - if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) { - var surrounding = new Set(); - nodeA.surrounding = new Array(); - var nodeB; - var grid = this.grid; - - for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) { - for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) { - if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) { - for (var k = 0; k < grid[i][j].length; k++) { - nodeB = grid[i][j][k]; - - // If both nodes are not members of the same graph, - // or both nodes are the same, skip. - if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) { - continue; - } - - // check if the repulsion force between - // nodeA and nodeB has already been calculated - if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) { - var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2); - var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2); - - // if the distance between nodeA and nodeB - // is less then calculation range - if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) { - //then add nodeB to surrounding of nodeA - surrounding.add(nodeB); - } - } - } - } - } - } - - nodeA.surrounding = [].concat(_toConsumableArray(surrounding)); - } - for (i = 0; i < nodeA.surrounding.length; i++) { - this.calcRepulsionForce(nodeA, nodeA.surrounding[i]); - } -}; - -FDLayout.prototype.calcRepulsionRange = function () { - return 0.0; -}; - -module.exports = FDLayout; - -/***/ }), -/* 19 */ -/***/ (function(module, exports, __nested_webpack_require_100902__) { - -"use strict"; - - -var LEdge = __nested_webpack_require_100902__(1); -var FDLayoutConstants = __nested_webpack_require_100902__(7); - -function FDLayoutEdge(source, target, vEdge) { - LEdge.call(this, source, target, vEdge); - this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; -} - -FDLayoutEdge.prototype = Object.create(LEdge.prototype); - -for (var prop in LEdge) { - FDLayoutEdge[prop] = LEdge[prop]; -} - -module.exports = FDLayoutEdge; - -/***/ }), -/* 20 */ -/***/ (function(module, exports, __nested_webpack_require_101387__) { - -"use strict"; - - -var LNode = __nested_webpack_require_101387__(3); - -function FDLayoutNode(gm, loc, size, vNode) { - // alternative constructor is handled inside LNode - LNode.call(this, gm, loc, size, vNode); - //Spring, repulsion and gravitational forces acting on this node - this.springForceX = 0; - this.springForceY = 0; - this.repulsionForceX = 0; - this.repulsionForceY = 0; - this.gravitationForceX = 0; - this.gravitationForceY = 0; - //Amount by which this node is to be moved in this iteration - this.displacementX = 0; - this.displacementY = 0; - - //Start and finish grid coordinates that this node is fallen into - this.startX = 0; - this.finishX = 0; - this.startY = 0; - this.finishY = 0; - - //Geometric neighbors of this node - this.surrounding = []; -} - -FDLayoutNode.prototype = Object.create(LNode.prototype); - -for (var prop in LNode) { - FDLayoutNode[prop] = LNode[prop]; -} - -FDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) { - this.startX = _startX; - this.finishX = _finishX; - this.startY = _startY; - this.finishY = _finishY; -}; - -module.exports = FDLayoutNode; - -/***/ }), -/* 21 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function DimensionD(width, height) { - this.width = 0; - this.height = 0; - if (width !== null && height !== null) { - this.height = height; - this.width = width; - } -} - -DimensionD.prototype.getWidth = function () { - return this.width; -}; - -DimensionD.prototype.setWidth = function (width) { - this.width = width; -}; - -DimensionD.prototype.getHeight = function () { - return this.height; -}; - -DimensionD.prototype.setHeight = function (height) { - this.height = height; -}; - -module.exports = DimensionD; - -/***/ }), -/* 22 */ -/***/ (function(module, exports, __nested_webpack_require_103173__) { - -"use strict"; - - -var UniqueIDGeneretor = __nested_webpack_require_103173__(14); - -function HashMap() { - this.map = {}; - this.keys = []; -} - -HashMap.prototype.put = function (key, value) { - var theId = UniqueIDGeneretor.createID(key); - if (!this.contains(theId)) { - this.map[theId] = value; - this.keys.push(key); - } -}; - -HashMap.prototype.contains = function (key) { - var theId = UniqueIDGeneretor.createID(key); - return this.map[key] != null; -}; - -HashMap.prototype.get = function (key) { - var theId = UniqueIDGeneretor.createID(key); - return this.map[theId]; -}; - -HashMap.prototype.keySet = function () { - return this.keys; -}; - -module.exports = HashMap; - -/***/ }), -/* 23 */ -/***/ (function(module, exports, __nested_webpack_require_103901__) { - -"use strict"; - - -var UniqueIDGeneretor = __nested_webpack_require_103901__(14); - -function HashSet() { - this.set = {}; -} -; - -HashSet.prototype.add = function (obj) { - var theId = UniqueIDGeneretor.createID(obj); - if (!this.contains(theId)) this.set[theId] = obj; -}; - -HashSet.prototype.remove = function (obj) { - delete this.set[UniqueIDGeneretor.createID(obj)]; -}; - -HashSet.prototype.clear = function () { - this.set = {}; -}; - -HashSet.prototype.contains = function (obj) { - return this.set[UniqueIDGeneretor.createID(obj)] == obj; -}; - -HashSet.prototype.isEmpty = function () { - return this.size() === 0; -}; - -HashSet.prototype.size = function () { - return Object.keys(this.set).length; -}; - -//concats this.set to the given list -HashSet.prototype.addAllTo = function (list) { - var keys = Object.keys(this.set); - var length = keys.length; - for (var i = 0; i < length; i++) { - list.push(this.set[keys[i]]); - } -}; - -HashSet.prototype.size = function () { - return Object.keys(this.set).length; -}; - -HashSet.prototype.addAll = function (list) { - var s = list.length; - for (var i = 0; i < s; i++) { - var v = list[i]; - this.add(v); - } -}; - -module.exports = HashSet; - -/***/ }), -/* 24 */ -/***/ (function(module, exports, __nested_webpack_require_105138__) { - -"use strict"; - - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * A classic Quicksort algorithm with Hoare's partition - * - Works also on LinkedList objects - * - * Copyright: i-Vis Research Group, Bilkent University, 2007 - present - */ - -var LinkedList = __nested_webpack_require_105138__(11); - -var Quicksort = function () { - function Quicksort(A, compareFunction) { - _classCallCheck(this, Quicksort); - - if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction; - - var length = void 0; - if (A instanceof LinkedList) length = A.size();else length = A.length; - - this._quicksort(A, 0, length - 1); - } - - _createClass(Quicksort, [{ - key: '_quicksort', - value: function _quicksort(A, p, r) { - if (p < r) { - var q = this._partition(A, p, r); - this._quicksort(A, p, q); - this._quicksort(A, q + 1, r); - } - } - }, { - key: '_partition', - value: function _partition(A, p, r) { - var x = this._get(A, p); - var i = p; - var j = r; - while (true) { - while (this.compareFunction(x, this._get(A, j))) { - j--; - }while (this.compareFunction(this._get(A, i), x)) { - i++; - }if (i < j) { - this._swap(A, i, j); - i++; - j--; - } else return j; - } - } - }, { - key: '_get', - value: function _get(object, index) { - if (object instanceof LinkedList) return object.get_object_at(index);else return object[index]; - } - }, { - key: '_set', - value: function _set(object, index, value) { - if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value; - } - }, { - key: '_swap', - value: function _swap(A, i, j) { - var temp = this._get(A, i); - this._set(A, i, this._get(A, j)); - this._set(A, j, temp); - } - }, { - key: '_defaultCompareFunction', - value: function _defaultCompareFunction(a, b) { - return b > a; - } - }]); - - return Quicksort; -}(); - -module.exports = Quicksort; - -/***/ }), -/* 25 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string - * sequences by S.B.Needleman and C.D.Wunsch (1970). - * - * Aside from the inputs, you can assign the scores for, - * - Match: The two characters at the current index are same. - * - Mismatch: The two characters at the current index are different. - * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string. - */ - -var NeedlemanWunsch = function () { - function NeedlemanWunsch(sequence1, sequence2) { - var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; - var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1; - var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1; - - _classCallCheck(this, NeedlemanWunsch); - - this.sequence1 = sequence1; - this.sequence2 = sequence2; - this.match_score = match_score; - this.mismatch_penalty = mismatch_penalty; - this.gap_penalty = gap_penalty; - - // Just the remove redundancy - this.iMax = sequence1.length + 1; - this.jMax = sequence2.length + 1; - - // Grid matrix of scores - this.grid = new Array(this.iMax); - for (var i = 0; i < this.iMax; i++) { - this.grid[i] = new Array(this.jMax); - - for (var j = 0; j < this.jMax; j++) { - this.grid[i][j] = 0; - } - } - - // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions) - this.tracebackGrid = new Array(this.iMax); - for (var _i = 0; _i < this.iMax; _i++) { - this.tracebackGrid[_i] = new Array(this.jMax); - - for (var _j = 0; _j < this.jMax; _j++) { - this.tracebackGrid[_i][_j] = [null, null, null]; - } - } - - // The aligned sequences (return multiple possibilities) - this.alignments = []; - - // Final alignment score - this.score = -1; - - // Calculate scores and tracebacks - this.computeGrids(); - } - - _createClass(NeedlemanWunsch, [{ - key: "getScore", - value: function getScore() { - return this.score; - } - }, { - key: "getAlignments", - value: function getAlignments() { - return this.alignments; - } - - // Main dynamic programming procedure - - }, { - key: "computeGrids", - value: function computeGrids() { - // Fill in the first row - for (var j = 1; j < this.jMax; j++) { - this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty; - this.tracebackGrid[0][j] = [false, false, true]; - } - - // Fill in the first column - for (var i = 1; i < this.iMax; i++) { - this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty; - this.tracebackGrid[i][0] = [false, true, false]; - } - - // Fill the rest of the grid - for (var _i2 = 1; _i2 < this.iMax; _i2++) { - for (var _j2 = 1; _j2 < this.jMax; _j2++) { - // Find the max score(s) among [`Diag`, `Up`, `Left`] - var diag = void 0; - if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty; - - var up = this.grid[_i2 - 1][_j2] + this.gap_penalty; - var left = this.grid[_i2][_j2 - 1] + this.gap_penalty; - - // If there exists multiple max values, capture them for multiple paths - var maxOf = [diag, up, left]; - var indices = this.arrayAllMaxIndexes(maxOf); - - // Update Grids - this.grid[_i2][_j2] = maxOf[indices[0]]; - this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)]; - } - } - - // Update alignment score - this.score = this.grid[this.iMax - 1][this.jMax - 1]; - } - - // Gets all possible valid sequence combinations - - }, { - key: "alignmentTraceback", - value: function alignmentTraceback() { - var inProcessAlignments = []; - - inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length], - seq1: "", - seq2: "" - }); - - while (inProcessAlignments[0]) { - var current = inProcessAlignments[0]; - var directions = this.tracebackGrid[current.pos[0]][current.pos[1]]; - - if (directions[0]) { - inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1], - seq1: this.sequence1[current.pos[0] - 1] + current.seq1, - seq2: this.sequence2[current.pos[1] - 1] + current.seq2 - }); - } - if (directions[1]) { - inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]], - seq1: this.sequence1[current.pos[0] - 1] + current.seq1, - seq2: '-' + current.seq2 - }); - } - if (directions[2]) { - inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1], - seq1: '-' + current.seq1, - seq2: this.sequence2[current.pos[1] - 1] + current.seq2 - }); - } - - if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1, - sequence2: current.seq2 - }); - - inProcessAlignments.shift(); - } - - return this.alignments; - } - - // Helper Functions - - }, { - key: "getAllIndexes", - value: function getAllIndexes(arr, val) { - var indexes = [], - i = -1; - while ((i = arr.indexOf(val, i + 1)) !== -1) { - indexes.push(i); - } - return indexes; - } - }, { - key: "arrayAllMaxIndexes", - value: function arrayAllMaxIndexes(array) { - return this.getAllIndexes(array, Math.max.apply(null, array)); - } - }]); - - return NeedlemanWunsch; -}(); - -module.exports = NeedlemanWunsch; - -/***/ }), -/* 26 */ -/***/ (function(module, exports, __nested_webpack_require_115611__) { - -"use strict"; - - -var layoutBase = function layoutBase() { - return; -}; - -layoutBase.FDLayout = __nested_webpack_require_115611__(18); -layoutBase.FDLayoutConstants = __nested_webpack_require_115611__(7); -layoutBase.FDLayoutEdge = __nested_webpack_require_115611__(19); -layoutBase.FDLayoutNode = __nested_webpack_require_115611__(20); -layoutBase.DimensionD = __nested_webpack_require_115611__(21); -layoutBase.HashMap = __nested_webpack_require_115611__(22); -layoutBase.HashSet = __nested_webpack_require_115611__(23); -layoutBase.IGeometry = __nested_webpack_require_115611__(8); -layoutBase.IMath = __nested_webpack_require_115611__(9); -layoutBase.Integer = __nested_webpack_require_115611__(10); -layoutBase.Point = __nested_webpack_require_115611__(12); -layoutBase.PointD = __nested_webpack_require_115611__(4); -layoutBase.RandomSeed = __nested_webpack_require_115611__(16); -layoutBase.RectangleD = __nested_webpack_require_115611__(13); -layoutBase.Transform = __nested_webpack_require_115611__(17); -layoutBase.UniqueIDGeneretor = __nested_webpack_require_115611__(14); -layoutBase.Quicksort = __nested_webpack_require_115611__(24); -layoutBase.LinkedList = __nested_webpack_require_115611__(11); -layoutBase.LGraphObject = __nested_webpack_require_115611__(2); -layoutBase.LGraph = __nested_webpack_require_115611__(5); -layoutBase.LEdge = __nested_webpack_require_115611__(1); -layoutBase.LGraphManager = __nested_webpack_require_115611__(6); -layoutBase.LNode = __nested_webpack_require_115611__(3); -layoutBase.Layout = __nested_webpack_require_115611__(15); -layoutBase.LayoutConstants = __nested_webpack_require_115611__(0); -layoutBase.NeedlemanWunsch = __nested_webpack_require_115611__(25); - -module.exports = layoutBase; - -/***/ }), -/* 27 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function Emitter() { - this.listeners = []; -} - -var p = Emitter.prototype; - -p.addListener = function (event, callback) { - this.listeners.push({ - event: event, - callback: callback - }); -}; - -p.removeListener = function (event, callback) { - for (var i = this.listeners.length; i >= 0; i--) { - var l = this.listeners[i]; - - if (l.event === event && l.callback === callback) { - this.listeners.splice(i, 1); - } - } -}; - -p.emit = function (event, data) { - for (var i = 0; i < this.listeners.length; i++) { - var l = this.listeners[i]; - - if (event === l.event) { - l.callback(data); - } - } -}; - -module.exports = Emitter; - -/***/ }) -/******/ ]); -}); - -/***/ }), - -/***/ 21549: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var hashClear = __webpack_require__(22032), - hashDelete = __webpack_require__(63862), - hashGet = __webpack_require__(66721), - hashHas = __webpack_require__(12749), - hashSet = __webpack_require__(35749); - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -module.exports = Hash; - - -/***/ }), - -/***/ 80079: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var listCacheClear = __webpack_require__(63702), - listCacheDelete = __webpack_require__(70080), - listCacheGet = __webpack_require__(24739), - listCacheHas = __webpack_require__(48655), - listCacheSet = __webpack_require__(31175); - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -module.exports = ListCache; - - -/***/ }), - -/***/ 68223: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var getNative = __webpack_require__(56110), - root = __webpack_require__(9325); - -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'); - -module.exports = Map; - - -/***/ }), - -/***/ 53661: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var mapCacheClear = __webpack_require__(63040), - mapCacheDelete = __webpack_require__(17670), - mapCacheGet = __webpack_require__(90289), - mapCacheHas = __webpack_require__(4509), - mapCacheSet = __webpack_require__(72949); - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -module.exports = MapCache; - - -/***/ }), - -/***/ 51873: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var root = __webpack_require__(9325); - -/** Built-in value references. */ -var Symbol = root.Symbol; - -module.exports = Symbol; - - -/***/ }), - -/***/ 34932: -/***/ ((module) => { - -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -module.exports = arrayMap; - - -/***/ }), - -/***/ 16547: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var baseAssignValue = __webpack_require__(43360), - eq = __webpack_require__(75288); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -module.exports = assignValue; - - -/***/ }), - -/***/ 26025: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var eq = __webpack_require__(75288); - -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; -} - -module.exports = assocIndexOf; - - -/***/ }), - -/***/ 43360: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var defineProperty = __webpack_require__(93243); - -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -module.exports = baseAssignValue; - - -/***/ }), - -/***/ 47422: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var castPath = __webpack_require__(31769), - toKey = __webpack_require__(77797); - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = castPath(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -module.exports = baseGet; - - -/***/ }), - -/***/ 72552: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var Symbol = __webpack_require__(51873), - getRawTag = __webpack_require__(659), - objectToString = __webpack_require__(59350); - -/** `Object#toString` result references. */ -var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - -/** Built-in value references. */ -var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - -/** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); -} - -module.exports = baseGetTag; - - -/***/ }), - -/***/ 45083: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var isFunction = __webpack_require__(1882), - isMasked = __webpack_require__(87296), - isObject = __webpack_require__(23805), - toSource = __webpack_require__(47473); - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -module.exports = baseIsNative; - - -/***/ }), - -/***/ 73170: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var assignValue = __webpack_require__(16547), - castPath = __webpack_require__(31769), - isIndex = __webpack_require__(30361), - isObject = __webpack_require__(23805), - toKey = __webpack_require__(77797); - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = castPath(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -module.exports = baseSet; - - -/***/ }), - -/***/ 77556: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var Symbol = __webpack_require__(51873), - arrayMap = __webpack_require__(34932), - isArray = __webpack_require__(56449), - isSymbol = __webpack_require__(44394); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -module.exports = baseToString; - - -/***/ }), - -/***/ 54128: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var trimmedEndIndex = __webpack_require__(31800); - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -module.exports = baseTrim; - - -/***/ }), - -/***/ 31769: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var isArray = __webpack_require__(56449), - isKey = __webpack_require__(28586), - stringToPath = __webpack_require__(61802), - toString = __webpack_require__(13222); - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); -} - -module.exports = castPath; - - -/***/ }), - -/***/ 23007: -/***/ ((module) => { - -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -module.exports = copyArray; - - -/***/ }), - -/***/ 55481: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var root = __webpack_require__(9325); - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -module.exports = coreJsData; - - -/***/ }), - -/***/ 93243: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var getNative = __webpack_require__(56110); - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); - -module.exports = defineProperty; - - -/***/ }), - -/***/ 34840: -/***/ ((module) => { - -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -module.exports = freeGlobal; - - -/***/ }), - -/***/ 12651: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var isKeyable = __webpack_require__(74218); - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} - -module.exports = getMapData; - - -/***/ }), - -/***/ 56110: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var baseIsNative = __webpack_require__(45083), - getValue = __webpack_require__(10392); - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -module.exports = getNative; - - -/***/ }), - -/***/ 659: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var Symbol = __webpack_require__(51873); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; - -/** Built-in value references. */ -var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - -/** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ -function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; - - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; -} - -module.exports = getRawTag; - - -/***/ }), - -/***/ 10392: -/***/ ((module) => { - -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -module.exports = getValue; - - -/***/ }), - -/***/ 22032: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var nativeCreate = __webpack_require__(81042); - -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; -} - -module.exports = hashClear; - - -/***/ }), - -/***/ 63862: -/***/ ((module) => { - -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; -} - -module.exports = hashDelete; - - -/***/ }), - -/***/ 66721: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var nativeCreate = __webpack_require__(81042); - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; -} - -module.exports = hashGet; - - -/***/ }), - -/***/ 12749: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var nativeCreate = __webpack_require__(81042); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); -} - -module.exports = hashHas; - - -/***/ }), - -/***/ 35749: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var nativeCreate = __webpack_require__(81042); - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; -} - -module.exports = hashSet; - - -/***/ }), - -/***/ 30361: -/***/ ((module) => { - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} - -module.exports = isIndex; - - -/***/ }), - -/***/ 28586: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var isArray = __webpack_require__(56449), - isSymbol = __webpack_require__(44394); - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -module.exports = isKey; - - -/***/ }), - -/***/ 74218: -/***/ ((module) => { - -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} - -module.exports = isKeyable; - - -/***/ }), - -/***/ 87296: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var coreJsData = __webpack_require__(55481); - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -module.exports = isMasked; - - -/***/ }), - -/***/ 63702: -/***/ ((module) => { - -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; - this.size = 0; -} - -module.exports = listCacheClear; - - -/***/ }), - -/***/ 70080: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var assocIndexOf = __webpack_require__(26025); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; -} - -module.exports = listCacheDelete; - - -/***/ }), - -/***/ 24739: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var assocIndexOf = __webpack_require__(26025); - -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; -} - -module.exports = listCacheGet; - - -/***/ }), - -/***/ 48655: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var assocIndexOf = __webpack_require__(26025); - -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} - -module.exports = listCacheHas; - - -/***/ }), - -/***/ 31175: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var assocIndexOf = __webpack_require__(26025); - -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} - -module.exports = listCacheSet; - - -/***/ }), - -/***/ 63040: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var Hash = __webpack_require__(21549), - ListCache = __webpack_require__(80079), - Map = __webpack_require__(68223); - -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; -} - -module.exports = mapCacheClear; - - -/***/ }), - -/***/ 17670: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var getMapData = __webpack_require__(12651); - -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; -} - -module.exports = mapCacheDelete; - - -/***/ }), - -/***/ 90289: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var getMapData = __webpack_require__(12651); - -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} - -module.exports = mapCacheGet; - - -/***/ }), - -/***/ 4509: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var getMapData = __webpack_require__(12651); - -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} - -module.exports = mapCacheHas; - - -/***/ }), - -/***/ 72949: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var getMapData = __webpack_require__(12651); - -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; -} - -module.exports = mapCacheSet; - - -/***/ }), - -/***/ 62224: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var memoize = __webpack_require__(50104); - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -module.exports = memoizeCapped; - - -/***/ }), - -/***/ 81042: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var getNative = __webpack_require__(56110); - -/* Built-in method references that are verified to be native. */ -var nativeCreate = getNative(Object, 'create'); - -module.exports = nativeCreate; - - -/***/ }), - -/***/ 59350: -/***/ ((module) => { - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; - -/** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ -function objectToString(value) { - return nativeObjectToString.call(value); -} - -module.exports = objectToString; - - -/***/ }), - -/***/ 9325: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var freeGlobal = __webpack_require__(34840); - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -module.exports = root; - - -/***/ }), - -/***/ 61802: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var memoizeCapped = __webpack_require__(62224); - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -module.exports = stringToPath; - - -/***/ }), - -/***/ 77797: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var isSymbol = __webpack_require__(44394); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -module.exports = toKey; - - -/***/ }), - -/***/ 47473: -/***/ ((module) => { - -/** Used for built-in method references. */ -var funcProto = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -module.exports = toSource; - - -/***/ }), - -/***/ 31800: -/***/ ((module) => { - -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -module.exports = trimmedEndIndex; - - -/***/ }), - -/***/ 38221: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var isObject = __webpack_require__(23805), - now = __webpack_require__(10124), - toNumber = __webpack_require__(99374); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ -function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - timeWaiting = wait - timeSinceLastCall; - - return maxing - ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) - : timeWaiting; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - clearTimeout(timerId); - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; -} - -module.exports = debounce; - - -/***/ }), - -/***/ 75288: -/***/ ((module) => { - -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -module.exports = eq; - - -/***/ }), - -/***/ 58156: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var baseGet = __webpack_require__(47422); - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; -} - -module.exports = get; - - -/***/ }), - -/***/ 56449: -/***/ ((module) => { - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -module.exports = isArray; - - -/***/ }), - -/***/ 1882: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var baseGetTag = __webpack_require__(72552), - isObject = __webpack_require__(23805); - -/** `Object#toString` result references. */ -var asyncTag = '[object AsyncFunction]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; -} - -module.exports = isFunction; - - -/***/ }), - -/***/ 23805: -/***/ ((module) => { - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} - -module.exports = isObject; - - -/***/ }), - -/***/ 40346: -/***/ ((module) => { - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -module.exports = isObjectLike; - - -/***/ }), - -/***/ 44394: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var baseGetTag = __webpack_require__(72552), - isObjectLike = __webpack_require__(40346); - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); -} - -module.exports = isSymbol; - - -/***/ }), - -/***/ 50104: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var MapCache = __webpack_require__(53661); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `clear`, `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ -function memoize(func, resolver) { - if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; -} - -// Expose `MapCache`. -memoize.Cache = MapCache; - -module.exports = memoize; - - -/***/ }), - -/***/ 10124: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var root = __webpack_require__(9325); - -/** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ -var now = function() { - return root.Date.now(); -}; - -module.exports = now; - - -/***/ }), - -/***/ 63560: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var baseSet = __webpack_require__(73170); - -/** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ -function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); -} - -module.exports = set; - - -/***/ }), - -/***/ 99374: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var baseTrim = __webpack_require__(54128), - isObject = __webpack_require__(23805), - isSymbol = __webpack_require__(44394); - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -module.exports = toNumber; - - -/***/ }), - -/***/ 42072: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var arrayMap = __webpack_require__(34932), - copyArray = __webpack_require__(23007), - isArray = __webpack_require__(56449), - isSymbol = __webpack_require__(44394), - stringToPath = __webpack_require__(61802), - toKey = __webpack_require__(77797), - toString = __webpack_require__(13222); - -/** - * Converts `value` to a property path array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Util - * @param {*} value The value to convert. - * @returns {Array} Returns the new property path array. - * @example - * - * _.toPath('a.b.c'); - * // => ['a', 'b', 'c'] - * - * _.toPath('a[0].b.c'); - * // => ['a', '0', 'b', 'c'] - */ -function toPath(value) { - if (isArray(value)) { - return arrayMap(value, toKey); - } - return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); -} - -module.exports = toPath; - - -/***/ }), - -/***/ 13222: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var baseToString = __webpack_require__(77556); - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString(value) { - return value == null ? '' : baseToString(value); -} - -module.exports = toString; - - -/***/ }), - -/***/ 18897: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - a: () => (/* binding */ createText), - c: () => (/* binding */ computeDimensionOfText) -}); - -// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -var constructs_namespaceObject = {}; -__webpack_require__.r(constructs_namespaceObject); -__webpack_require__.d(constructs_namespaceObject, { - attentionMarkers: () => (attentionMarkers), - contentInitial: () => (contentInitial), - disable: () => (disable), - document: () => (constructs_document), - flow: () => (constructs_flow), - flowInitial: () => (flowInitial), - insideSpan: () => (insideSpan), - string: () => (constructs_string), - text: () => (constructs_text) -}); - -// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules -var mermaid_6dc72991 = __webpack_require__(99702); -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js -/** - * @typedef {import('mdast').Root|import('mdast').Content} Node - * - * @typedef Options - * Configuration (optional). - * @property {boolean | null | undefined} [includeImageAlt=true] - * Whether to use `alt` for `image`s. - * @property {boolean | null | undefined} [includeHtml=true] - * Whether to use `value` of HTML. - */ - -/** @type {Options} */ -const emptyOptions = {} - -/** - * Get the text content of a node or list of nodes. - * - * Prefers the node’s plain-text fields, otherwise serializes its children, - * and if the given value is an array, serialize the nodes in it. - * - * @param {unknown} value - * Thing to serialize, typically `Node`. - * @param {Options | null | undefined} [options] - * Configuration (optional). - * @returns {string} - * Serialized `value`. - */ -function lib_toString(value, options) { - const settings = options || emptyOptions - const includeImageAlt = - typeof settings.includeImageAlt === 'boolean' - ? settings.includeImageAlt - : true - const includeHtml = - typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true - - return one(value, includeImageAlt, includeHtml) -} - -/** - * One node or several nodes. - * - * @param {unknown} value - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized node. - */ -function one(value, includeImageAlt, includeHtml) { - if (node(value)) { - if ('value' in value) { - return value.type === 'html' && !includeHtml ? '' : value.value - } - - if (includeImageAlt && 'alt' in value && value.alt) { - return value.alt - } - - if ('children' in value) { - return lib_all(value.children, includeImageAlt, includeHtml) - } - } - - if (Array.isArray(value)) { - return lib_all(value, includeImageAlt, includeHtml) - } - - return '' -} - -/** - * Serialize a list of nodes. - * - * @param {Array} values - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized nodes. - */ -function lib_all(values, includeImageAlt, includeHtml) { - /** @type {Array} */ - const result = [] - let index = -1 - - while (++index < values.length) { - result[index] = one(values[index], includeImageAlt, includeHtml) - } - - return result.join('') -} - -/** - * Check if `value` looks like a node. - * - * @param {unknown} value - * Thing. - * @returns {value is Node} - * Whether `value` is a node. - */ -function node(value) { - return Boolean(value && typeof value === 'object') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array} items - * Items to inject into `list`. - * @returns {void} - * Nothing. - */ -function splice(list, start, remove, items) { - const end = list.length - let chunkStart = 0 - /** @type {Array} */ - let parameters - - // Make start between zero and `end` (included). - if (start < 0) { - start = -start > end ? 0 : end + start - } else { - start = start > end ? end : start - } - remove = remove > 0 ? remove : 0 - - // No need to chunk the items if there’s only a couple (10k) items. - if (items.length < 10000) { - parameters = Array.from(items) - parameters.unshift(start, remove) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - } else { - // Delete `remove` items starting from `start` - if (remove) list.splice(start, remove) - - // Insert the items in chunks to not cause stack overflows. - while (chunkStart < items.length) { - parameters = items.slice(chunkStart, chunkStart + 10000) - parameters.unshift(start, 0) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - chunkStart += 10000 - start += 10000 - } - } -} - -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {Array} items - * Items to add to `list`. - * @returns {Array} - * Either `list` or `items`. - */ -function push(list, items) { - if (list.length > 0) { - splice(list, list.length, 0, items) - return list - } - return items -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - * @typedef {import('micromark-util-types').Handles} Handles - * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension - * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension - */ - - - -const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty - -/** - * Combine multiple syntax extensions into one. - * - * @param {Array} extensions - * List of syntax extensions. - * @returns {NormalizedExtension} - * A single combined extension. - */ -function combineExtensions(extensions) { - /** @type {NormalizedExtension} */ - const all = {} - let index = -1 - - while (++index < extensions.length) { - syntaxExtension(all, extensions[index]) - } - - return all -} - -/** - * Merge `extension` into `all`. - * - * @param {NormalizedExtension} all - * Extension to merge into. - * @param {Extension} extension - * Extension to merge. - * @returns {void} - */ -function syntaxExtension(all, extension) { - /** @type {keyof Extension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - /** @type {Record} */ - const left = maybe || (all[hook] = {}) - /** @type {Record | undefined} */ - const right = extension[hook] - /** @type {string} */ - let code - - if (right) { - for (code in right) { - if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] - const value = right[code] - constructs( - // @ts-expect-error Looks like a list. - left[code], - Array.isArray(value) ? value : value ? [value] : [] - ) - } - } - } -} - -/** - * Merge `list` into `existing` (both lists of constructs). - * Mutates `existing`. - * - * @param {Array} existing - * @param {Array} list - * @returns {void} - */ -function constructs(existing, list) { - let index = -1 - /** @type {Array} */ - const before = [] - - while (++index < list.length) { - // @ts-expect-error Looks like an object. - ;(list[index].add === 'after' ? existing : before).push(list[index]) - } - - splice(existing, 0, 0, before) -} - -/** - * Combine multiple HTML extensions into one. - * - * @param {Array} htmlExtensions - * List of HTML extensions. - * @returns {HtmlExtension} - * A single combined HTML extension. - */ -function combineHtmlExtensions(htmlExtensions) { - /** @type {HtmlExtension} */ - const handlers = {} - let index = -1 - - while (++index < htmlExtensions.length) { - htmlExtension(handlers, htmlExtensions[index]) - } - - return handlers -} - -/** - * Merge `extension` into `all`. - * - * @param {HtmlExtension} all - * Extension to merge into. - * @param {HtmlExtension} extension - * Extension to merge. - * @returns {void} - */ -function htmlExtension(all, extension) { - /** @type {keyof HtmlExtension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - const left = maybe || (all[hook] = {}) - const right = extension[hook] - /** @type {keyof Handles} */ - let type - - if (right) { - for (type in right) { - // @ts-expect-error assume document vs regular handler are managed correctly. - left[type] = right[type] - } - } - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js -// This module is generated by `script/`. -// -// CommonMark handles attention (emphasis, strong) markers based on what comes -// before or after them. -// One such difference is if those characters are Unicode punctuation. -// This script is generated from the Unicode data. - -/** - * Regular expression that matches a unicode punctuation character. - */ -const unicodePunctuationRegex = - /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - - -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlpha = regexCheck(/[A-Za-z]/) - -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) - -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) - -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function asciiControl(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code !== null && (code < 32 || code === 127) - ) -} - -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiDigit = regexCheck(/\d/) - -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) - -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) - -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEnding(code) { - return code !== null && code < -2 -} - -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEndingOrSpace(code) { - return code !== null && (code < 0 || code === 32) -} - -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownSpace(code) { - return code === -2 || code === -1 || code === 32 -} - -// Size note: removing ASCII from the regex and using `asciiPunctuation` here -// In fact adds to the bundle size. -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodePunctuation = regexCheck(unicodePunctuationRegex) - -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodeWhitespace = regexCheck(/\s/) - -/** - * Create a code check from a regex. - * - * @param {RegExp} regex - * @returns {(code: Code) => boolean} - */ -function regexCheck(regex) { - return check - - /** - * Check whether a code matches the bound regex. - * - * @param {Code} code - * Character code. - * @returns {boolean} - * Whether the character code matches the bound regex. - */ - function check(code) { - return code !== null && regex.test(String.fromCharCode(code)) - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns - * Start state. - */ -function factorySpace(effects, ok, type, max) { - const limit = max ? max - 1 : Number.POSITIVE_INFINITY - let size = 0 - return start - - /** @type {State} */ - function start(code) { - if (markdownSpace(code)) { - effects.enter(type) - return prefix(code) - } - return ok(code) - } - - /** @type {State} */ - function prefix(code) { - if (markdownSpace(code) && size++ < limit) { - effects.consume(code) - return prefix - } - effects.exit(type) - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - -/** @type {InitialConstruct} */ -const content = { - tokenize: initializeContent -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeContent(effects) { - const contentStart = effects.attempt( - this.parser.constructs.contentInitial, - afterContentStartConstruct, - paragraphInitial - ) - /** @type {Token} */ - let previous - return contentStart - - /** @type {State} */ - function afterContentStartConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, contentStart, 'linePrefix') - } - - /** @type {State} */ - function paragraphInitial(code) { - effects.enter('paragraph') - return lineStart(code) - } - - /** @type {State} */ - function lineStart(code) { - const token = effects.enter('chunkText', { - contentType: 'text', - previous - }) - if (previous) { - previous.next = token - } - previous = token - return data(code) - } - - /** @type {State} */ - function data(code) { - if (code === null) { - effects.exit('chunkText') - effects.exit('paragraph') - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - effects.exit('chunkText') - return lineStart - } - - // Data. - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - -/** - * @typedef {[Construct, ContainerState]} StackItem - */ - - - - -/** @type {InitialConstruct} */ -const document_document = { - tokenize: initializeDocument -} - -/** @type {Construct} */ -const containerConstruct = { - tokenize: tokenizeContainer -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeDocument(effects) { - const self = this - /** @type {Array} */ - const stack = [] - let continued = 0 - /** @type {TokenizeContext | undefined} */ - let childFlow - /** @type {Token | undefined} */ - let childToken - /** @type {number} */ - let lineStartOffset - return start - - /** @type {State} */ - function start(code) { - // First we iterate through the open blocks, starting with the root - // document, and descending through last children down to the last open - // block. - // Each block imposes a condition that the line must satisfy if the block is - // to remain open. - // For example, a block quote requires a `>` character. - // A paragraph requires a non-blank line. - // In this phase we may match all or just some of the open blocks. - // But we cannot close unmatched blocks yet, because we may have a lazy - // continuation line. - if (continued < stack.length) { - const item = stack[continued] - self.containerState = item[1] - return effects.attempt( - item[0].continuation, - documentContinue, - checkNewContainers - )(code) - } - - // Done. - return checkNewContainers(code) - } - - /** @type {State} */ - function documentContinue(code) { - continued++ - - // Note: this field is called `_closeFlow` but it also closes containers. - // Perhaps a good idea to rename it but it’s already used in the wild by - // extensions. - if (self.containerState._closeFlow) { - self.containerState._closeFlow = undefined - if (childFlow) { - closeFlow() - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when dealing with lazy lines in `writeToChild`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {Point | undefined} */ - let point - - // Find the flow chunk. - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - point = self.events[indexBeforeFlow][1].end - break - } - } - exitContainers(continued) - - // Fix positions. - let index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - return checkNewContainers(code) - } - return start(code) - } - - /** @type {State} */ - function checkNewContainers(code) { - // Next, after consuming the continuation markers for existing blocks, we - // look for new block starts (e.g. `>` for a block quote). - // If we encounter a new block start, we close any blocks unmatched in - // step 1 before creating the new block as a child of the last matched - // block. - if (continued === stack.length) { - // No need to `check` whether there’s a container, of `exitContainers` - // would be moot. - // We can instead immediately `attempt` to parse one. - if (!childFlow) { - return documentContinued(code) - } - - // If we have concrete content, such as block HTML or fenced code, - // we can’t have containers “pierce” into them, so we can immediately - // start. - if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { - return flowStart(code) - } - - // If we do have flow, it could still be a blank line, - // but we’d be interrupting it w/ a new container if there’s a current - // construct. - // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer - // needed in micromark-extension-gfm-table@1.0.6). - self.interrupt = Boolean( - childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack - ) - } - - // Check if there is a new container. - self.containerState = {} - return effects.check( - containerConstruct, - thereIsANewContainer, - thereIsNoNewContainer - )(code) - } - - /** @type {State} */ - function thereIsANewContainer(code) { - if (childFlow) closeFlow() - exitContainers(continued) - return documentContinued(code) - } - - /** @type {State} */ - function thereIsNoNewContainer(code) { - self.parser.lazy[self.now().line] = continued !== stack.length - lineStartOffset = self.now().offset - return flowStart(code) - } - - /** @type {State} */ - function documentContinued(code) { - // Try new containers. - self.containerState = {} - return effects.attempt( - containerConstruct, - containerContinue, - flowStart - )(code) - } - - /** @type {State} */ - function containerContinue(code) { - continued++ - stack.push([self.currentConstruct, self.containerState]) - // Try another. - return documentContinued(code) - } - - /** @type {State} */ - function flowStart(code) { - if (code === null) { - if (childFlow) closeFlow() - exitContainers(0) - effects.consume(code) - return - } - childFlow = childFlow || self.parser.flow(self.now()) - effects.enter('chunkFlow', { - contentType: 'flow', - previous: childToken, - _tokenizer: childFlow - }) - return flowContinue(code) - } - - /** @type {State} */ - function flowContinue(code) { - if (code === null) { - writeToChild(effects.exit('chunkFlow'), true) - exitContainers(0) - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - writeToChild(effects.exit('chunkFlow')) - // Get ready for the next line. - continued = 0 - self.interrupt = undefined - return start - } - effects.consume(code) - return flowContinue - } - - /** - * @param {Token} token - * @param {boolean | undefined} [eof] - * @returns {void} - */ - function writeToChild(token, eof) { - const stream = self.sliceStream(token) - if (eof) stream.push(null) - token.previous = childToken - if (childToken) childToken.next = token - childToken = token - childFlow.defineSkip(token.start) - childFlow.write(stream) - - // Alright, so we just added a lazy line: - // - // ```markdown - // > a - // b. - // - // Or: - // - // > ~~~c - // d - // - // Or: - // - // > | e | - // f - // ``` - // - // The construct in the second example (fenced code) does not accept lazy - // lines, so it marked itself as done at the end of its first line, and - // then the content construct parses `d`. - // Most constructs in markdown match on the first line: if the first line - // forms a construct, a non-lazy line can’t “unmake” it. - // - // The construct in the third example is potentially a GFM table, and - // those are *weird*. - // It *could* be a table, from the first line, if the following line - // matches a condition. - // In this case, that second line is lazy, which “unmakes” the first line - // and turns the whole into one content block. - // - // We’ve now parsed the non-lazy and the lazy line, and can figure out - // whether the lazy line started a new flow block. - // If it did, we exit the current containers between the two flow blocks. - if (self.parser.lazy[token.start.line]) { - let index = childFlow.events.length - while (index--) { - if ( - // The token starts before the line ending… - childFlow.events[index][1].start.offset < lineStartOffset && - // …and either is not ended yet… - (!childFlow.events[index][1].end || - // …or ends after it. - childFlow.events[index][1].end.offset > lineStartOffset) - ) { - // Exit: there’s still something open, which means it’s a lazy line - // part of something. - return - } - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when closing flow in `documentContinue`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {boolean | undefined} */ - let seen - /** @type {Point | undefined} */ - let point - - // Find the previous chunk (the one before the lazy line). - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - if (seen) { - point = self.events[indexBeforeFlow][1].end - break - } - seen = true - } - } - exitContainers(continued) - - // Fix positions. - index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - } - } - - /** - * @param {number} size - * @returns {void} - */ - function exitContainers(size) { - let index = stack.length - - // Exit open containers. - while (index-- > size) { - const entry = stack[index] - self.containerState = entry[1] - entry[0].exit.call(self, effects) - } - stack.length = size - } - function closeFlow() { - childFlow.write([null]) - childToken = undefined - childFlow = undefined - self.containerState._closeFlow = undefined - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContainer(effects, ok, nok) { - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(this.parser.constructs.document, ok, nok), - 'linePrefix', - this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blankLine = { - tokenize: tokenizeBlankLine, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLine(effects, ok, nok) { - return start - - /** - * Start of blank line. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - return markdownSpace(code) - ? factorySpace(effects, after, 'linePrefix')(code) - : after(code) - } - - /** - * At eof/eol, after optional whitespace. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Token} Token - */ - - -/** - * Tokenize subcontent. - * - * @param {Array} events - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -function subtokenize(events) { - /** @type {Record} */ - const jumps = {} - let index = -1 - /** @type {Event} */ - let event - /** @type {number | undefined} */ - let lineIndex - /** @type {number} */ - let otherIndex - /** @type {Event} */ - let otherEvent - /** @type {Array} */ - let parameters - /** @type {Array} */ - let subevents - /** @type {boolean | undefined} */ - let more - while (++index < events.length) { - while (index in jumps) { - index = jumps[index] - } - event = events[index] - - // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. - if ( - index && - event[1].type === 'chunkFlow' && - events[index - 1][1].type === 'listItemPrefix' - ) { - subevents = event[1]._tokenizer.events - otherIndex = 0 - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'lineEndingBlank' - ) { - otherIndex += 2 - } - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'content' - ) { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === 'content') { - break - } - if (subevents[otherIndex][1].type === 'chunkText') { - subevents[otherIndex][1]._isInFirstContentOfListItem = true - otherIndex++ - } - } - } - } - - // Enter. - if (event[0] === 'enter') { - if (event[1].contentType) { - Object.assign(jumps, subcontent(events, index)) - index = jumps[index] - more = true - } - } - // Exit. - else if (event[1]._container) { - otherIndex = index - lineIndex = undefined - while (otherIndex--) { - otherEvent = events[otherIndex] - if ( - otherEvent[1].type === 'lineEnding' || - otherEvent[1].type === 'lineEndingBlank' - ) { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - } - otherEvent[1].type = 'lineEnding' - lineIndex = otherIndex - } - } else { - break - } - } - if (lineIndex) { - // Fix position. - event[1].end = Object.assign({}, events[lineIndex][1].start) - - // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index) - parameters.unshift(event) - splice(events, lineIndex, index - lineIndex + 1, parameters) - } - } - } - return !more -} - -/** - * Tokenize embedded tokens. - * - * @param {Array} events - * @param {number} eventIndex - * @returns {Record} - */ -function subcontent(events, eventIndex) { - const token = events[eventIndex][1] - const context = events[eventIndex][2] - let startPosition = eventIndex - 1 - /** @type {Array} */ - const startPositions = [] - const tokenizer = - token._tokenizer || context.parser[token.contentType](token.start) - const childEvents = tokenizer.events - /** @type {Array<[number, number]>} */ - const jumps = [] - /** @type {Record} */ - const gaps = {} - /** @type {Array} */ - let stream - /** @type {Token | undefined} */ - let previous - let index = -1 - /** @type {Token | undefined} */ - let current = token - let adjust = 0 - let start = 0 - const breaks = [start] - - // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. - while (current) { - // Find the position of the event for this token. - while (events[++startPosition][1] !== current) { - // Empty. - } - startPositions.push(startPosition) - if (!current._tokenizer) { - stream = context.sliceStream(current) - if (!current.next) { - stream.push(null) - } - if (previous) { - tokenizer.defineSkip(current.start) - } - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true - } - tokenizer.write(stream) - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined - } - } - - // Unravel the next token. - previous = current - current = current.next - } - - // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. - current = token - while (++index < childEvents.length) { - if ( - // Find a void token that includes a break. - childEvents[index][0] === 'exit' && - childEvents[index - 1][0] === 'enter' && - childEvents[index][1].type === childEvents[index - 1][1].type && - childEvents[index][1].start.line !== childEvents[index][1].end.line - ) { - start = index + 1 - breaks.push(start) - // Help GC. - current._tokenizer = undefined - current.previous = undefined - current = current.next - } - } - - // Help GC. - tokenizer.events = [] - - // If there’s one more token (which is the cases for lines that end in an - // EOF), that’s perfect: the last point we found starts it. - // If there isn’t then make sure any remaining content is added to it. - if (current) { - // Help GC. - current._tokenizer = undefined - current.previous = undefined - } else { - breaks.pop() - } - - // Now splice the events from the subtokenizer into the current events, - // moving back to front so that splice indices aren’t affected. - index = breaks.length - while (index--) { - const slice = childEvents.slice(breaks[index], breaks[index + 1]) - const start = startPositions.pop() - jumps.unshift([start, start + slice.length - 1]) - splice(events, start, 2, slice) - } - index = -1 - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] - adjust += jumps[index][1] - jumps[index][0] - 1 - } - return gaps -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** - * No name because it must not be turned off. - * @type {Construct} - */ -const content_content = { - tokenize: tokenizeContent, - resolve: resolveContent -} - -/** @type {Construct} */ -const continuationConstruct = { - tokenize: tokenizeContinuation, - partial: true -} - -/** - * Content is transparent: it’s parsed right now. That way, definitions are also - * parsed right now: before text in paragraphs (specifically, media) are parsed. - * - * @type {Resolver} - */ -function resolveContent(events) { - subtokenize(events) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContent(effects, ok) { - /** @type {Token | undefined} */ - let previous - return chunkStart - - /** - * Before a content chunk. - * - * ```markdown - * > | abc - * ^ - * ``` - * - * @type {State} - */ - function chunkStart(code) { - effects.enter('content') - previous = effects.enter('chunkContent', { - contentType: 'content' - }) - return chunkInside(code) - } - - /** - * In a content chunk. - * - * ```markdown - * > | abc - * ^^^ - * ``` - * - * @type {State} - */ - function chunkInside(code) { - if (code === null) { - return contentEnd(code) - } - - // To do: in `markdown-rs`, each line is parsed on its own, and everything - // is stitched together resolving. - if (markdownLineEnding(code)) { - return effects.check( - continuationConstruct, - contentContinue, - contentEnd - )(code) - } - - // Data. - effects.consume(code) - return chunkInside - } - - /** - * - * - * @type {State} - */ - function contentEnd(code) { - effects.exit('chunkContent') - effects.exit('content') - return ok(code) - } - - /** - * - * - * @type {State} - */ - function contentContinue(code) { - effects.consume(code) - effects.exit('chunkContent') - previous.next = effects.enter('chunkContent', { - contentType: 'content', - previous - }) - previous = previous.next - return chunkInside - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContinuation(effects, ok, nok) { - const self = this - return startLookahead - - /** - * - * - * @type {State} - */ - function startLookahead(code) { - effects.exit('chunkContent') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, prefixed, 'linePrefix') - } - - /** - * - * - * @type {State} - */ - function prefixed(code) { - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - - // Always populated by defaults. - - const tail = self.events[self.events.length - 1] - if ( - !self.parser.constructs.disable.null.includes('codeIndented') && - tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ) { - return ok(code) - } - return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - - -/** @type {InitialConstruct} */ -const flow = { - tokenize: initializeFlow -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeFlow(effects) { - const self = this - const initial = effects.attempt( - // Try to parse a blank line. - blankLine, - atBlankEnding, - // Try to parse initial flow (essentially, only code). - effects.attempt( - this.parser.constructs.flowInitial, - afterConstruct, - factorySpace( - effects, - effects.attempt( - this.parser.constructs.flow, - afterConstruct, - effects.attempt(content_content, afterConstruct) - ), - 'linePrefix' - ) - ) - ) - return initial - - /** @type {State} */ - function atBlankEnding(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEndingBlank') - effects.consume(code) - effects.exit('lineEndingBlank') - self.currentConstruct = undefined - return initial - } - - /** @type {State} */ - function afterConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - self.currentConstruct = undefined - return initial - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -const resolver = { - resolveAll: createResolver() -} -const string = initializeFactory('string') -const text_text = initializeFactory('text') - -/** - * @param {'string' | 'text'} field - * @returns {InitialConstruct} - */ -function initializeFactory(field) { - return { - tokenize: initializeText, - resolveAll: createResolver( - field === 'text' ? resolveAllLineSuffixes : undefined - ) - } - - /** - * @this {TokenizeContext} - * @type {Initializer} - */ - function initializeText(effects) { - const self = this - const constructs = this.parser.constructs[field] - const text = effects.attempt(constructs, start, notText) - return start - - /** @type {State} */ - function start(code) { - return atBreak(code) ? text(code) : notText(code) - } - - /** @type {State} */ - function notText(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('data') - effects.consume(code) - return data - } - - /** @type {State} */ - function data(code) { - if (atBreak(code)) { - effects.exit('data') - return text(code) - } - - // Data. - effects.consume(code) - return data - } - - /** - * @param {Code} code - * @returns {boolean} - */ - function atBreak(code) { - if (code === null) { - return true - } - const list = constructs[code] - let index = -1 - if (list) { - // Always populated by defaults. - - while (++index < list.length) { - const item = list[index] - if (!item.previous || item.previous.call(self, self.previous)) { - return true - } - } - } - return false - } - } -} - -/** - * @param {Resolver | undefined} [extraResolver] - * @returns {Resolver} - */ -function createResolver(extraResolver) { - return resolveAllText - - /** @type {Resolver} */ - function resolveAllText(events, context) { - let index = -1 - /** @type {number | undefined} */ - let enter - - // A rather boring computation (to merge adjacent `data` events) which - // improves mm performance by 29%. - while (++index <= events.length) { - if (enter === undefined) { - if (events[index] && events[index][1].type === 'data') { - enter = index - index++ - } - } else if (!events[index] || events[index][1].type !== 'data') { - // Don’t do anything if there is one data token. - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - index = enter + 2 - } - enter = undefined - } - } - return extraResolver ? extraResolver(events, context) : events - } -} - -/** - * A rather ugly set of instructions which again looks at chunks in the input - * stream. - * The reason to do this here is that it is *much* faster to parse in reverse. - * And that we can’t hook into `null` to split the line suffix before an EOF. - * To do: figure out if we can make this into a clean utility, or even in core. - * As it will be useful for GFMs literal autolink extension (and maybe even - * tables?) - * - * @type {Resolver} - */ -function resolveAllLineSuffixes(events, context) { - let eventIndex = 0 // Skip first. - - while (++eventIndex <= events.length) { - if ( - (eventIndex === events.length || - events[eventIndex][1].type === 'lineEnding') && - events[eventIndex - 1][1].type === 'data' - ) { - const data = events[eventIndex - 1][1] - const chunks = context.sliceStream(data) - let index = chunks.length - let bufferIndex = -1 - let size = 0 - /** @type {boolean | undefined} */ - let tabs - while (index--) { - const chunk = chunks[index] - if (typeof chunk === 'string') { - bufferIndex = chunk.length - while (chunk.charCodeAt(bufferIndex - 1) === 32) { - size++ - bufferIndex-- - } - if (bufferIndex) break - bufferIndex = -1 - } - // Number - else if (chunk === -2) { - tabs = true - size++ - } else if (chunk === -1) { - // Empty - } else { - // Replacement character, exit. - index++ - break - } - } - if (size) { - const token = { - type: - eventIndex === events.length || tabs || size < 2 - ? 'lineSuffix' - : 'hardBreakTrailing', - start: { - line: data.end.line, - column: data.end.column - size, - offset: data.end.offset - size, - _index: data.start._index + index, - _bufferIndex: index - ? bufferIndex - : data.start._bufferIndex + bufferIndex - }, - end: Object.assign({}, data.end) - } - data.end = Object.assign({}, token.start) - if (data.start.offset === data.end.offset) { - Object.assign(data, token) - } else { - events.splice( - eventIndex, - 0, - ['enter', token, context], - ['exit', token, context] - ) - eventIndex += 2 - } - } - eventIndex++ - } - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js -/** - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * Call all `resolveAll`s. - * - * @param {Array<{resolveAll?: Resolver | undefined}>} constructs - * List of constructs, optionally with `resolveAll`s. - * @param {Array} events - * List of events. - * @param {TokenizeContext} context - * Context used by `tokenize`. - * @returns {Array} - * Changed events. - */ -function resolveAll(constructs, events, context) { - /** @type {Array} */ - const called = [] - let index = -1 - - while (++index < constructs.length) { - const resolve = constructs[index].resolveAll - - if (resolve && !called.includes(resolve)) { - events = resolve(events, context) - called.push(resolve) - } - } - - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenType} TokenType - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * @callback Restore - * @returns {void} - * - * @typedef Info - * @property {Restore} restore - * @property {number} from - * - * @callback ReturnHandle - * Handle a successful run. - * @param {Construct} construct - * @param {Info} info - * @returns {void} - */ - - - - -/** - * Create a tokenizer. - * Tokenizers deal with one type of data (e.g., containers, flow, text). - * The parser is the object dealing with it all. - * `initialize` works like other constructs, except that only its `tokenize` - * function is used, in which case it doesn’t receive an `ok` or `nok`. - * `from` can be given to set the point before the first character, although - * when further lines are indented, they must be set with `defineSkip`. - * - * @param {ParseContext} parser - * @param {InitialConstruct} initialize - * @param {Omit | undefined} [from] - * @returns {TokenizeContext} - */ -function createTokenizer(parser, initialize, from) { - /** @type {Point} */ - let point = Object.assign( - from - ? Object.assign({}, from) - : { - line: 1, - column: 1, - offset: 0 - }, - { - _index: 0, - _bufferIndex: -1 - } - ) - /** @type {Record} */ - const columnStart = {} - /** @type {Array} */ - const resolveAllConstructs = [] - /** @type {Array} */ - let chunks = [] - /** @type {Array} */ - let stack = [] - /** @type {boolean | undefined} */ - let consumed = true - - /** - * Tools used for tokenizing. - * - * @type {Effects} - */ - const effects = { - consume, - enter, - exit, - attempt: constructFactory(onsuccessfulconstruct), - check: constructFactory(onsuccessfulcheck), - interrupt: constructFactory(onsuccessfulcheck, { - interrupt: true - }) - } - - /** - * State and tools for resolving and serializing. - * - * @type {TokenizeContext} - */ - const context = { - previous: null, - code: null, - containerState: {}, - events: [], - parser, - sliceStream, - sliceSerialize, - now, - defineSkip, - write - } - - /** - * The state function. - * - * @type {State | void} - */ - let state = initialize.tokenize.call(context, effects) - - /** - * Track which character we expect to be consumed, to catch bugs. - * - * @type {Code} - */ - let expectedCode - if (initialize.resolveAll) { - resolveAllConstructs.push(initialize) - } - return context - - /** @type {TokenizeContext['write']} */ - function write(slice) { - chunks = push(chunks, slice) - main() - - // Exit if we’re not done, resolve might change stuff. - if (chunks[chunks.length - 1] !== null) { - return [] - } - addResult(initialize, 0) - - // Otherwise, resolve, and exit. - context.events = resolveAll(resolveAllConstructs, context.events, context) - return context.events - } - - // - // Tools. - // - - /** @type {TokenizeContext['sliceSerialize']} */ - function sliceSerialize(token, expandTabs) { - return serializeChunks(sliceStream(token), expandTabs) - } - - /** @type {TokenizeContext['sliceStream']} */ - function sliceStream(token) { - return sliceChunks(chunks, token) - } - - /** @type {TokenizeContext['now']} */ - function now() { - // This is a hot path, so we clone manually instead of `Object.assign({}, point)` - const {line, column, offset, _index, _bufferIndex} = point - return { - line, - column, - offset, - _index, - _bufferIndex - } - } - - /** @type {TokenizeContext['defineSkip']} */ - function defineSkip(value) { - columnStart[value.line] = value.column - accountForPotentialSkip() - } - - // - // State management. - // - - /** - * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by - * `consume`). - * Here is where we walk through the chunks, which either include strings of - * several characters, or numerical character codes. - * The reason to do this in a loop instead of a call is so the stack can - * drain. - * - * @returns {void} - */ - function main() { - /** @type {number} */ - let chunkIndex - while (point._index < chunks.length) { - const chunk = chunks[point._index] - - // If we’re in a buffer chunk, loop through it. - if (typeof chunk === 'string') { - chunkIndex = point._index - if (point._bufferIndex < 0) { - point._bufferIndex = 0 - } - while ( - point._index === chunkIndex && - point._bufferIndex < chunk.length - ) { - go(chunk.charCodeAt(point._bufferIndex)) - } - } else { - go(chunk) - } - } - } - - /** - * Deal with one code. - * - * @param {Code} code - * @returns {void} - */ - function go(code) { - consumed = undefined - expectedCode = code - state = state(code) - } - - /** @type {Effects['consume']} */ - function consume(code) { - if (markdownLineEnding(code)) { - point.line++ - point.column = 1 - point.offset += code === -3 ? 2 : 1 - accountForPotentialSkip() - } else if (code !== -1) { - point.column++ - point.offset++ - } - - // Not in a string chunk. - if (point._bufferIndex < 0) { - point._index++ - } else { - point._bufferIndex++ - - // At end of string chunk. - // @ts-expect-error Points w/ non-negative `_bufferIndex` reference - // strings. - if (point._bufferIndex === chunks[point._index].length) { - point._bufferIndex = -1 - point._index++ - } - } - - // Expose the previous character. - context.previous = code - - // Mark as consumed. - consumed = true - } - - /** @type {Effects['enter']} */ - function enter(type, fields) { - /** @type {Token} */ - // @ts-expect-error Patch instead of assign required fields to help GC. - const token = fields || {} - token.type = type - token.start = now() - context.events.push(['enter', token, context]) - stack.push(token) - return token - } - - /** @type {Effects['exit']} */ - function exit(type) { - const token = stack.pop() - token.end = now() - context.events.push(['exit', token, context]) - return token - } - - /** - * Use results. - * - * @type {ReturnHandle} - */ - function onsuccessfulconstruct(construct, info) { - addResult(construct, info.from) - } - - /** - * Discard results. - * - * @type {ReturnHandle} - */ - function onsuccessfulcheck(_, info) { - info.restore() - } - - /** - * Factory to attempt/check/interrupt. - * - * @param {ReturnHandle} onreturn - * @param {{interrupt?: boolean | undefined} | undefined} [fields] - */ - function constructFactory(onreturn, fields) { - return hook - - /** - * Handle either an object mapping codes to constructs, a list of - * constructs, or a single construct. - * - * @param {Array | Construct | ConstructRecord} constructs - * @param {State} returnState - * @param {State | undefined} [bogusState] - * @returns {State} - */ - function hook(constructs, returnState, bogusState) { - /** @type {Array} */ - let listOfConstructs - /** @type {number} */ - let constructIndex - /** @type {Construct} */ - let currentConstruct - /** @type {Info} */ - let info - return Array.isArray(constructs) /* c8 ignore next 1 */ - ? handleListOfConstructs(constructs) - : 'tokenize' in constructs - ? // @ts-expect-error Looks like a construct. - handleListOfConstructs([constructs]) - : handleMapOfConstructs(constructs) - - /** - * Handle a list of construct. - * - * @param {ConstructRecord} map - * @returns {State} - */ - function handleMapOfConstructs(map) { - return start - - /** @type {State} */ - function start(code) { - const def = code !== null && map[code] - const all = code !== null && map.null - const list = [ - // To do: add more extension tests. - /* c8 ignore next 2 */ - ...(Array.isArray(def) ? def : def ? [def] : []), - ...(Array.isArray(all) ? all : all ? [all] : []) - ] - return handleListOfConstructs(list)(code) - } - } - - /** - * Handle a list of construct. - * - * @param {Array} list - * @returns {State} - */ - function handleListOfConstructs(list) { - listOfConstructs = list - constructIndex = 0 - if (list.length === 0) { - return bogusState - } - return handleConstruct(list[constructIndex]) - } - - /** - * Handle a single construct. - * - * @param {Construct} construct - * @returns {State} - */ - function handleConstruct(construct) { - return start - - /** @type {State} */ - function start(code) { - // To do: not needed to store if there is no bogus state, probably? - // Currently doesn’t work because `inspect` in document does a check - // w/o a bogus, which doesn’t make sense. But it does seem to help perf - // by not storing. - info = store() - currentConstruct = construct - if (!construct.partial) { - context.currentConstruct = construct - } - - // Always populated by defaults. - - if ( - construct.name && - context.parser.constructs.disable.null.includes(construct.name) - ) { - return nok(code) - } - return construct.tokenize.call( - // If we do have fields, create an object w/ `context` as its - // prototype. - // This allows a “live binding”, which is needed for `interrupt`. - fields ? Object.assign(Object.create(context), fields) : context, - effects, - ok, - nok - )(code) - } - } - - /** @type {State} */ - function ok(code) { - consumed = true - onreturn(currentConstruct, info) - return returnState - } - - /** @type {State} */ - function nok(code) { - consumed = true - info.restore() - if (++constructIndex < listOfConstructs.length) { - return handleConstruct(listOfConstructs[constructIndex]) - } - return bogusState - } - } - } - - /** - * @param {Construct} construct - * @param {number} from - * @returns {void} - */ - function addResult(construct, from) { - if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { - resolveAllConstructs.push(construct) - } - if (construct.resolve) { - splice( - context.events, - from, - context.events.length - from, - construct.resolve(context.events.slice(from), context) - ) - } - if (construct.resolveTo) { - context.events = construct.resolveTo(context.events, context) - } - } - - /** - * Store state. - * - * @returns {Info} - */ - function store() { - const startPoint = now() - const startPrevious = context.previous - const startCurrentConstruct = context.currentConstruct - const startEventsIndex = context.events.length - const startStack = Array.from(stack) - return { - restore, - from: startEventsIndex - } - - /** - * Restore state. - * - * @returns {void} - */ - function restore() { - point = startPoint - context.previous = startPrevious - context.currentConstruct = startCurrentConstruct - context.events.length = startEventsIndex - stack = startStack - accountForPotentialSkip() - } - } - - /** - * Move the current point a bit forward in the line when it’s on a column - * skip. - * - * @returns {void} - */ - function accountForPotentialSkip() { - if (point.line in columnStart && point.column < 2) { - point.column = columnStart[point.line] - point.offset += columnStart[point.line] - 1 - } - } -} - -/** - * Get the chunks from a slice of chunks in the range of a token. - * - * @param {Array} chunks - * @param {Pick} token - * @returns {Array} - */ -function sliceChunks(chunks, token) { - const startIndex = token.start._index - const startBufferIndex = token.start._bufferIndex - const endIndex = token.end._index - const endBufferIndex = token.end._bufferIndex - /** @type {Array} */ - let view - if (startIndex === endIndex) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] - } else { - view = chunks.slice(startIndex, endIndex) - if (startBufferIndex > -1) { - const head = view[0] - if (typeof head === 'string') { - view[0] = head.slice(startBufferIndex) - } else { - view.shift() - } - } - if (endBufferIndex > 0) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view.push(chunks[endIndex].slice(0, endBufferIndex)) - } - } - return view -} - -/** - * Get the string value of a slice of chunks. - * - * @param {Array} chunks - * @param {boolean | undefined} [expandTabs=false] - * @returns {string} - */ -function serializeChunks(chunks, expandTabs) { - let index = -1 - /** @type {Array} */ - const result = [] - /** @type {boolean | undefined} */ - let atTab - while (++index < chunks.length) { - const chunk = chunks[index] - /** @type {string} */ - let value - if (typeof chunk === 'string') { - value = chunk - } else - switch (chunk) { - case -5: { - value = '\r' - break - } - case -4: { - value = '\n' - break - } - case -3: { - value = '\r' + '\n' - break - } - case -2: { - value = expandTabs ? ' ' : '\t' - break - } - case -1: { - if (!expandTabs && atTab) continue - value = ' ' - break - } - default: { - // Currently only replacement character. - value = String.fromCharCode(chunk) - } - } - atTab = chunk === -2 - result.push(value) - } - return result.join('') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const thematicBreak = { - name: 'thematicBreak', - tokenize: tokenizeThematicBreak -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeThematicBreak(effects, ok, nok) { - let size = 0 - /** @type {NonNullable} */ - let marker - return start - - /** - * Start of thematic break. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('thematicBreak') - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * After optional whitespace, at marker. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - marker = code - return atBreak(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.enter('thematicBreakSequence') - return sequence(code) - } - if (size >= 3 && (code === null || markdownLineEnding(code))) { - effects.exit('thematicBreak') - return ok(code) - } - return nok(code) - } - - /** - * In sequence. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function sequence(code) { - if (code === marker) { - effects.consume(code) - size++ - return sequence - } - effects.exit('thematicBreakSequence') - return markdownSpace(code) - ? factorySpace(effects, atBreak, 'whitespace')(code) - : atBreak(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - -/** @type {Construct} */ -const list = { - name: 'list', - tokenize: tokenizeListStart, - continuation: { - tokenize: tokenizeListContinuation - }, - exit: tokenizeListEnd -} - -/** @type {Construct} */ -const listItemPrefixWhitespaceConstruct = { - tokenize: tokenizeListItemPrefixWhitespace, - partial: true -} - -/** @type {Construct} */ -const indentConstruct = { - tokenize: tokenizeIndent, - partial: true -} - -// To do: `markdown-rs` parses list items on their own and later stitches them -// together. - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListStart(effects, ok, nok) { - const self = this - const tail = self.events[self.events.length - 1] - let initialSize = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - let size = 0 - return start - - /** @type {State} */ - function start(code) { - const kind = - self.containerState.type || - (code === 42 || code === 43 || code === 45 - ? 'listUnordered' - : 'listOrdered') - if ( - kind === 'listUnordered' - ? !self.containerState.marker || code === self.containerState.marker - : asciiDigit(code) - ) { - if (!self.containerState.type) { - self.containerState.type = kind - effects.enter(kind, { - _container: true - }) - } - if (kind === 'listUnordered') { - effects.enter('listItemPrefix') - return code === 42 || code === 45 - ? effects.check(thematicBreak, nok, atMarker)(code) - : atMarker(code) - } - if (!self.interrupt || code === 49) { - effects.enter('listItemPrefix') - effects.enter('listItemValue') - return inside(code) - } - } - return nok(code) - } - - /** @type {State} */ - function inside(code) { - if (asciiDigit(code) && ++size < 10) { - effects.consume(code) - return inside - } - if ( - (!self.interrupt || size < 2) && - (self.containerState.marker - ? code === self.containerState.marker - : code === 41 || code === 46) - ) { - effects.exit('listItemValue') - return atMarker(code) - } - return nok(code) - } - - /** - * @type {State} - **/ - function atMarker(code) { - effects.enter('listItemMarker') - effects.consume(code) - effects.exit('listItemMarker') - self.containerState.marker = self.containerState.marker || code - return effects.check( - blankLine, - // Can’t be empty when interrupting. - self.interrupt ? nok : onBlank, - effects.attempt( - listItemPrefixWhitespaceConstruct, - endOfPrefix, - otherPrefix - ) - ) - } - - /** @type {State} */ - function onBlank(code) { - self.containerState.initialBlankLine = true - initialSize++ - return endOfPrefix(code) - } - - /** @type {State} */ - function otherPrefix(code) { - if (markdownSpace(code)) { - effects.enter('listItemPrefixWhitespace') - effects.consume(code) - effects.exit('listItemPrefixWhitespace') - return endOfPrefix - } - return nok(code) - } - - /** @type {State} */ - function endOfPrefix(code) { - self.containerState.size = - initialSize + - self.sliceSerialize(effects.exit('listItemPrefix'), true).length - return ok(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListContinuation(effects, ok, nok) { - const self = this - self.containerState._closeFlow = undefined - return effects.check(blankLine, onBlank, notBlank) - - /** @type {State} */ - function onBlank(code) { - self.containerState.furtherBlankLines = - self.containerState.furtherBlankLines || - self.containerState.initialBlankLine - - // We have a blank line. - // Still, try to consume at most the items size. - return factorySpace( - effects, - ok, - 'listItemIndent', - self.containerState.size + 1 - )(code) - } - - /** @type {State} */ - function notBlank(code) { - if (self.containerState.furtherBlankLines || !markdownSpace(code)) { - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return notInCurrentItem(code) - } - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) - } - - /** @type {State} */ - function notInCurrentItem(code) { - // While we do continue, we signal that the flow should be closed. - self.containerState._closeFlow = true - // As we’re closing flow, we’re no longer interrupting. - self.interrupt = undefined - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(list, ok, nok), - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeIndent(effects, ok, nok) { - const self = this - return factorySpace( - effects, - afterPrefix, - 'listItemIndent', - self.containerState.size + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'listItemIndent' && - tail[2].sliceSerialize(tail[1], true).length === self.containerState.size - ? ok(code) - : nok(code) - } -} - -/** - * @type {Exiter} - * @this {TokenizeContext} - */ -function tokenizeListEnd(effects) { - effects.exit(this.containerState.type) -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListItemPrefixWhitespace(effects, ok, nok) { - const self = this - - // Always populated by defaults. - - return factorySpace( - effects, - afterPrefix, - 'listItemPrefixWhitespace', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return !markdownSpace(code) && - tail && - tail[1].type === 'listItemPrefixWhitespace' - ? ok(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blockQuote = { - name: 'blockQuote', - tokenize: tokenizeBlockQuoteStart, - continuation: { - tokenize: tokenizeBlockQuoteContinuation - }, - exit -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteStart(effects, ok, nok) { - const self = this - return start - - /** - * Start of block quote. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 62) { - const state = self.containerState - if (!state.open) { - effects.enter('blockQuote', { - _container: true - }) - state.open = true - } - effects.enter('blockQuotePrefix') - effects.enter('blockQuoteMarker') - effects.consume(code) - effects.exit('blockQuoteMarker') - return after - } - return nok(code) - } - - /** - * After `>`, before optional whitespace. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownSpace(code)) { - effects.enter('blockQuotePrefixWhitespace') - effects.consume(code) - effects.exit('blockQuotePrefixWhitespace') - effects.exit('blockQuotePrefix') - return ok - } - effects.exit('blockQuotePrefix') - return ok(code) - } -} - -/** - * Start of block quote continuation. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteContinuation(effects, ok, nok) { - const self = this - return contStart - - /** - * Start of block quote continuation. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contStart(code) { - if (markdownSpace(code)) { - // Always populated by defaults. - - return factorySpace( - effects, - contBefore, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } - return contBefore(code) - } - - /** - * At `>`, after optional whitespace. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contBefore(code) { - return effects.attempt(blockQuote, ok, nok)(code) - } -} - -/** @type {Exiter} */ -function exit(effects) { - effects.exit('blockQuote') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * - * b> - * - * - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`` or `b`). - * @param {TokenType} literalType - * Type when enclosed (``). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryDestination( - effects, - ok, - nok, - type, - literalType, - literalMarkerType, - rawType, - stringType, - max -) { - const limit = max || Number.POSITIVE_INFINITY - let balance = 0 - return start - - /** - * Start of destination. - * - * ```markdown - * > | - * ^ - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 60) { - effects.enter(type) - effects.enter(literalType) - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - return enclosedBefore - } - - // ASCII control, space, closing paren. - if (code === null || code === 32 || code === 41 || asciiControl(code)) { - return nok(code) - } - effects.enter(type) - effects.enter(rawType) - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return raw(code) - } - - /** - * After `<`, at an enclosed destination. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosedBefore(code) { - if (code === 62) { - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - effects.exit(literalType) - effects.exit(type) - return ok - } - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return enclosed(code) - } - - /** - * In enclosed destination. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosed(code) { - if (code === 62) { - effects.exit('chunkString') - effects.exit(stringType) - return enclosedBefore(code) - } - if (code === null || code === 60 || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? enclosedEscape : enclosed - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosedEscape(code) { - if (code === 60 || code === 62 || code === 92) { - effects.consume(code) - return enclosed - } - return enclosed(code) - } - - /** - * In raw destination. - * - * ```markdown - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function raw(code) { - if ( - !balance && - (code === null || code === 41 || markdownLineEndingOrSpace(code)) - ) { - effects.exit('chunkString') - effects.exit(stringType) - effects.exit(rawType) - effects.exit(type) - return ok(code) - } - if (balance < limit && code === 40) { - effects.consume(code) - balance++ - return raw - } - if (code === 41) { - effects.consume(code) - balance-- - return raw - } - - // ASCII control (but *not* `\0`) and space and `(`. - // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it - // doesn’t. - if (code === null || code === 32 || code === 40 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? rawEscape : raw - } - - /** - * After `\`, at special character. - * - * ```markdown - * > | a\*a - * ^ - * ``` - * - * @type {State} - */ - function rawEscape(code) { - if (code === 40 || code === 41 || code === 92) { - effects.consume(code) - return raw - } - return raw(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryLabel(effects, ok, nok, type, markerType, stringType) { - const self = this - let size = 0 - /** @type {boolean} */ - let seen - return start - - /** - * Start of label. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.enter(stringType) - return atBreak - } - - /** - * In label, at something, before something else. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if ( - size > 999 || - code === null || - code === 91 || - (code === 93 && !seen) || - // To do: remove in the future once we’ve switched from - // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, - // which doesn’t need this. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - (code === 94 && - !size && - '_hiddenFootnoteSupport' in self.parser.constructs) - ) { - return nok(code) - } - if (code === 93) { - effects.exit(stringType) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - - // To do: indent? Link chunks and EOLs together? - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return atBreak - } - effects.enter('chunkString', { - contentType: 'string' - }) - return labelInside(code) - } - - /** - * In label, in text. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function labelInside(code) { - if ( - code === null || - code === 91 || - code === 93 || - markdownLineEnding(code) || - size++ > 999 - ) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - if (!seen) seen = !markdownSpace(code) - return code === 92 ? labelEscape : labelInside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | [a\*a] - * ^ - * ``` - * - * @type {State} - */ - function labelEscape(code) { - if (code === 91 || code === 92 || code === 93) { - effects.consume(code) - size++ - return labelInside - } - return labelInside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryTitle(effects, ok, nok, type, markerType, stringType) { - /** @type {NonNullable} */ - let marker - return start - - /** - * Start of title. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 34 || code === 39 || code === 40) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - marker = code === 40 ? 41 : code - return begin - } - return nok(code) - } - - /** - * After opening marker. - * - * This is also used at the closing marker. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function begin(code) { - if (code === marker) { - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - effects.enter(stringType) - return atBreak(code) - } - - /** - * At something, before something else. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.exit(stringType) - return begin(marker) - } - if (code === null) { - return nok(code) - } - - // Note: blank lines can’t exist in content. - if (markdownLineEnding(code)) { - // To do: use `space_or_tab_eol_with_options`, connect. - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, atBreak, 'linePrefix') - } - effects.enter('chunkString', { - contentType: 'string' - }) - return inside(code) - } - - /** - * - * - * @type {State} - */ - function inside(code) { - if (code === marker || code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - return code === 92 ? escape : inside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | "a\*b" - * ^ - * ``` - * - * @type {State} - */ - function escape(code) { - if (code === marker || code === 92) { - effects.consume(code) - return inside - } - return inside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - */ - - - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns - * Start state. - */ -function factoryWhitespace(effects, ok) { - /** @type {boolean} */ - let seen - return start - - /** @type {State} */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - seen = true - return start - } - if (markdownSpace(code)) { - return factorySpace( - effects, - start, - seen ? 'linePrefix' : 'lineSuffix' - )(code) - } - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -function normalizeIdentifier(value) { - return ( - value - // Collapse markdown whitespace. - .replace(/[\t\n\r ]+/g, ' ') - // Trim. - .replace(/^ | $/g, '') - // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase() - .toUpperCase() - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - -/** @type {Construct} */ -const definition = { - name: 'definition', - tokenize: tokenizeDefinition -} - -/** @type {Construct} */ -const titleBefore = { - tokenize: tokenizeTitleBefore, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeDefinition(effects, ok, nok) { - const self = this - /** @type {string} */ - let identifier - return start - - /** - * At start of a definition. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Do not interrupt paragraphs (but do follow definitions). - // To do: do `interrupt` the way `markdown-rs` does. - // To do: parse whitespace the way `markdown-rs` does. - effects.enter('definition') - return before(code) - } - - /** - * After optional whitespace, at `[`. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - // To do: parse whitespace the way `markdown-rs` does. - - return factoryLabel.call( - self, - effects, - labelAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionLabel', - 'definitionLabelMarker', - 'definitionLabelString' - )(code) - } - - /** - * After label. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function labelAfter(code) { - identifier = normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - if (code === 58) { - effects.enter('definitionMarker') - effects.consume(code) - effects.exit('definitionMarker') - return markerAfter - } - return nok(code) - } - - /** - * After marker. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function markerAfter(code) { - // Note: whitespace is optional. - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, destinationBefore)(code) - : destinationBefore(code) - } - - /** - * Before destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationBefore(code) { - return factoryDestination( - effects, - destinationAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionDestination', - 'definitionDestinationLiteral', - 'definitionDestinationLiteralMarker', - 'definitionDestinationRaw', - 'definitionDestinationString' - )(code) - } - - /** - * After destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationAfter(code) { - return effects.attempt(titleBefore, after, after)(code) - } - - /** - * After definition. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return markdownSpace(code) - ? factorySpace(effects, afterWhitespace, 'whitespace')(code) - : afterWhitespace(code) - } - - /** - * After definition, after optional whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function afterWhitespace(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('definition') - - // Note: we don’t care about uniqueness. - // It’s likely that that doesn’t happen very frequently. - // It is more likely that it wastes precious time. - self.parser.defined.push(identifier) - - // To do: `markdown-rs` interrupt. - // // You’d be interrupting. - // tokenizer.interrupt = true - return ok(code) - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeTitleBefore(effects, ok, nok) { - return titleBefore - - /** - * After destination, at whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, beforeMarker)(code) - : nok(code) - } - - /** - * At title. - * - * ```markdown - * | [a]: b - * > | "c" - * ^ - * ``` - * - * @type {State} - */ - function beforeMarker(code) { - return factoryTitle( - effects, - titleAfter, - nok, - 'definitionTitle', - 'definitionTitleMarker', - 'definitionTitleString' - )(code) - } - - /** - * After title. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfter(code) { - return markdownSpace(code) - ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) - : titleAfterOptionalWhitespace(code) - } - - /** - * After title, after optional whitespace. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfterOptionalWhitespace(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const codeIndented = { - name: 'codeIndented', - tokenize: tokenizeCodeIndented -} - -/** @type {Construct} */ -const furtherStart = { - tokenize: tokenizeFurtherStart, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeIndented(effects, ok, nok) { - const self = this - return start - - /** - * Start of code (indented). - * - * > **Parsing note**: it is not needed to check if this first line is a - * > filled line (that it has a non-whitespace character), because blank lines - * > are parsed already, so we never run into that. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: manually check if interrupting like `markdown-rs`. - - effects.enter('codeIndented') - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? atBreak(code) - : nok(code) - } - - /** - * At a break. - * - * ```markdown - * > | aaa - * ^ ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === null) { - return after(code) - } - if (markdownLineEnding(code)) { - return effects.attempt(furtherStart, atBreak, after)(code) - } - effects.enter('codeFlowValue') - return inside(code) - } - - /** - * In code content. - * - * ```markdown - * > | aaa - * ^^^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return atBreak(code) - } - effects.consume(code) - return inside - } - - /** @type {State} */ - function after(code) { - effects.exit('codeIndented') - // To do: allow interrupting like `markdown-rs`. - // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeFurtherStart(effects, ok, nok) { - const self = this - return furtherStart - - /** - * At eol, trying to parse another indent. - * - * ```markdown - * > | aaa - * ^ - * | bbb - * ``` - * - * @type {State} - */ - function furtherStart(code) { - // To do: improve `lazy` / `pierce` handling. - // If this is a lazy line, it can’t be code. - if (self.parser.lazy[self.now().line]) { - return nok(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return furtherStart - } - - // To do: the code here in `micromark-js` is a bit different from - // `markdown-rs` because there it can attempt spaces. - // We can’t yet. - // - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? ok(code) - : markdownLineEnding(code) - ? furtherStart(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const headingAtx = { - name: 'headingAtx', - tokenize: tokenizeHeadingAtx, - resolve: resolveHeadingAtx -} - -/** @type {Resolver} */ -function resolveHeadingAtx(events, context) { - let contentEnd = events.length - 2 - let contentStart = 3 - /** @type {Token} */ - let content - /** @type {Token} */ - let text - - // Prefix whitespace, part of the opening. - if (events[contentStart][1].type === 'whitespace') { - contentStart += 2 - } - - // Suffix whitespace, part of the closing. - if ( - contentEnd - 2 > contentStart && - events[contentEnd][1].type === 'whitespace' - ) { - contentEnd -= 2 - } - if ( - events[contentEnd][1].type === 'atxHeadingSequence' && - (contentStart === contentEnd - 1 || - (contentEnd - 4 > contentStart && - events[contentEnd - 2][1].type === 'whitespace')) - ) { - contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 - } - if (contentEnd > contentStart) { - content = { - type: 'atxHeadingText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end - } - text = { - type: 'chunkText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end, - contentType: 'text' - } - splice(events, contentStart, contentEnd - contentStart + 1, [ - ['enter', content, context], - ['enter', text, context], - ['exit', text, context], - ['exit', content, context] - ]) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHeadingAtx(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of a heading (atx). - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - effects.enter('atxHeading') - return before(code) - } - - /** - * After optional whitespace, at `#`. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('atxHeadingSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 35 && size++ < 6) { - effects.consume(code) - return sequenceOpen - } - - // Always at least one `#`. - if (code === null || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingSequence') - return atBreak(code) - } - return nok(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === 35) { - effects.enter('atxHeadingSequence') - return sequenceFurther(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('atxHeading') - // To do: interrupt like `markdown-rs`. - // // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } - if (markdownSpace(code)) { - return factorySpace(effects, atBreak, 'whitespace')(code) - } - - // To do: generate `data` tokens, add the `text` token later. - // Needs edit map, see: `markdown.rs`. - effects.enter('atxHeadingText') - return data(code) - } - - /** - * In further sequence (after whitespace). - * - * Could be normal “visible” hashes in the heading or a final sequence. - * - * ```markdown - * > | ## aa ## - * ^ - * ``` - * - * @type {State} - */ - function sequenceFurther(code) { - if (code === 35) { - effects.consume(code) - return sequenceFurther - } - effects.exit('atxHeadingSequence') - return atBreak(code) - } - - /** - * In text. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingText') - return atBreak(code) - } - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const setextUnderline = { - name: 'setextUnderline', - tokenize: tokenizeSetextUnderline, - resolveTo: resolveToSetextUnderline -} - -/** @type {Resolver} */ -function resolveToSetextUnderline(events, context) { - // To do: resolve like `markdown-rs`. - let index = events.length - /** @type {number | undefined} */ - let content - /** @type {number | undefined} */ - let text - /** @type {number | undefined} */ - let definition - - // Find the opening of the content. - // It’ll always exist: we don’t tokenize if it isn’t there. - while (index--) { - if (events[index][0] === 'enter') { - if (events[index][1].type === 'content') { - content = index - break - } - if (events[index][1].type === 'paragraph') { - text = index - } - } - // Exit - else { - if (events[index][1].type === 'content') { - // Remove the content end (if needed we’ll add it later) - events.splice(index, 1) - } - if (!definition && events[index][1].type === 'definition') { - definition = index - } - } - } - const heading = { - type: 'setextHeading', - start: Object.assign({}, events[text][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - - // Change the paragraph to setext heading text. - events[text][1].type = 'setextHeadingText' - - // If we have definitions in the content, we’ll keep on having content, - // but we need move it. - if (definition) { - events.splice(text, 0, ['enter', heading, context]) - events.splice(definition + 1, 0, ['exit', events[content][1], context]) - events[content][1].end = Object.assign({}, events[definition][1].end) - } else { - events[content][1] = heading - } - - // Add the heading exit at the end. - events.push(['exit', heading, context]) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeSetextUnderline(effects, ok, nok) { - const self = this - /** @type {NonNullable} */ - let marker - return start - - /** - * At start of heading (setext) underline. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - let index = self.events.length - /** @type {boolean | undefined} */ - let paragraph - // Find an opening. - while (index--) { - // Skip enter/exit of line ending, line prefix, and content. - // We can now either have a definition or a paragraph. - if ( - self.events[index][1].type !== 'lineEnding' && - self.events[index][1].type !== 'linePrefix' && - self.events[index][1].type !== 'content' - ) { - paragraph = self.events[index][1].type === 'paragraph' - break - } - } - - // To do: handle lazy/pierce like `markdown-rs`. - // To do: parse indent like `markdown-rs`. - if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { - effects.enter('setextHeadingLine') - marker = code - return before(code) - } - return nok(code) - } - - /** - * After optional whitespace, at `-` or `=`. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('setextHeadingLineSequence') - return inside(code) - } - - /** - * In sequence. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - effects.exit('setextHeadingLineSequence') - return markdownSpace(code) - ? factorySpace(effects, after, 'lineSuffix')(code) - : after(code) - } - - /** - * After sequence, after optional whitespace. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('setextHeadingLine') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js -/** - * List of lowercase HTML “block” tag names. - * - * The list, when parsing HTML (flow), results in more relaxed rules (condition - * 6). - * Because they are known blocks, the HTML-like syntax doesn’t have to be - * strictly parsed. - * For tag names not in this list, a more strict algorithm (condition 7) is used - * to detect whether the HTML-like syntax is seen as HTML (flow) or not. - * - * This is copied from: - * . - * - * > 👉 **Note**: `search` was added in `CommonMark@0.31`. - */ -const htmlBlockNames = [ - 'address', - 'article', - 'aside', - 'base', - 'basefont', - 'blockquote', - 'body', - 'caption', - 'center', - 'col', - 'colgroup', - 'dd', - 'details', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'frame', - 'frameset', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hr', - 'html', - 'iframe', - 'legend', - 'li', - 'link', - 'main', - 'menu', - 'menuitem', - 'nav', - 'noframes', - 'ol', - 'optgroup', - 'option', - 'p', - 'param', - 'search', - 'section', - 'summary', - 'table', - 'tbody', - 'td', - 'tfoot', - 'th', - 'thead', - 'title', - 'tr', - 'track', - 'ul' -] - -/** - * List of lowercase HTML “raw” tag names. - * - * The list, when parsing HTML (flow), results in HTML that can include lines - * without exiting, until a closing tag also in this list is found (condition - * 1). - * - * This module is copied from: - * . - * - * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - */ -const htmlRawNames = ['pre', 'script', 'style', 'textarea'] - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - -/** @type {Construct} */ -const htmlFlow = { - name: 'htmlFlow', - tokenize: tokenizeHtmlFlow, - resolveTo: resolveToHtmlFlow, - concrete: true -} - -/** @type {Construct} */ -const blankLineBefore = { - tokenize: tokenizeBlankLineBefore, - partial: true -} -const nonLazyContinuationStart = { - tokenize: tokenizeNonLazyContinuationStart, - partial: true -} - -/** @type {Resolver} */ -function resolveToHtmlFlow(events) { - let index = events.length - while (index--) { - if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { - break - } - } - if (index > 1 && events[index - 2][1].type === 'linePrefix') { - // Add the prefix start to the HTML token. - events[index][1].start = events[index - 2][1].start - // Add the prefix start to the HTML line token. - events[index + 1][1].start = events[index - 2][1].start - // Remove the line prefix. - events.splice(index - 2, 2) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlFlow(effects, ok, nok) { - const self = this - /** @type {number} */ - let marker - /** @type {boolean} */ - let closingTag - /** @type {string} */ - let buffer - /** @type {number} */ - let index - /** @type {Code} */ - let markerB - return start - - /** - * Start of HTML (flow). - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * At `<`, after optional whitespace. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('htmlFlow') - effects.enter('htmlFlowData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * > | - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - closingTag = true - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - marker = 3 - // To do: - // tokenizer.concrete = true - // To do: use `markdown-rs` style interrupt. - // While we’re in an instruction instead of a declaration, we’re on a `?` - // right now, so we do need to search for `>`, similar to declarations. - return self.interrupt ? ok : continuationDeclarationInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After ` | - * ^ - * > | - * ^ - * > | &<]]> - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - marker = 2 - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - marker = 5 - index = 0 - return cdataOpenInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - marker = 4 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After ` | - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After ` | &<]]> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - if (index === value.length) { - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return cdataOpenInside - } - return nok(code) - } - - /** - * After ` | - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * In tag name. - * - * ```markdown - * > | - * ^^ - * > | - * ^^ - * ``` - * - * @type {State} - */ - function tagName(code) { - if ( - code === null || - code === 47 || - code === 62 || - markdownLineEndingOrSpace(code) - ) { - const slash = code === 47 - const name = buffer.toLowerCase() - if (!slash && !closingTag && htmlRawNames.includes(name)) { - marker = 1 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - if (htmlBlockNames.includes(buffer.toLowerCase())) { - marker = 6 - if (slash) { - effects.consume(code) - return basicSelfClosing - } - - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - marker = 7 - // Do not support complete HTML when interrupting. - return self.interrupt && !self.parser.lazy[self.now().line] - ? nok(code) - : closingTag - ? completeClosingTagAfter(code) - : completeAttributeNameBefore(code) - } - - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - buffer += String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After closing slash of a basic tag name. - * - * ```markdown - * > |
      - * ^ - * ``` - * - * @type {State} - */ - function basicSelfClosing(code) { - if (code === 62) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return nok(code) - } - - /** - * After closing slash of a complete tag name. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeClosingTagAfter(code) { - if (markdownSpace(code)) { - effects.consume(code) - return completeClosingTagAfter - } - return completeEnd(code) - } - - /** - * At an attribute name. - * - * At first, this state is used after a complete tag name, after whitespace, - * where it expects optional attributes or the end of the tag. - * It is also reused after attributes, when expecting more optional - * attributes. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * > | - * ^ - * > | - * ^ - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameBefore(code) { - if (code === 47) { - effects.consume(code) - return completeEnd - } - - // ASCII alphanumerical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return completeAttributeName - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameBefore - } - return completeEnd(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeName(code) { - // ASCII alphanumerical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return completeAttributeName - } - return completeAttributeNameAfter(code) - } - - /** - * After attribute name, at an optional initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return completeAttributeValueBefore - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameAfter - } - return completeAttributeNameBefore(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - markerB = code - return completeAttributeValueQuoted - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeValueBefore - } - return completeAttributeValueUnquoted(code) - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuoted(code) { - if (code === markerB) { - effects.consume(code) - markerB = null - return completeAttributeValueQuotedAfter - } - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return completeAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 47 || - code === 60 || - code === 61 || - code === 62 || - code === 96 || - markdownLineEndingOrSpace(code) - ) { - return completeAttributeNameAfter(code) - } - effects.consume(code) - return completeAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the - * end of the tag. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownSpace(code)) { - return completeAttributeNameBefore(code) - } - return nok(code) - } - - /** - * In certain circumstances of a complete tag where only an `>` is allowed. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeEnd(code) { - if (code === 62) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * After `>` in a complete tag. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function completeAfter(code) { - if (code === null || markdownLineEnding(code)) { - // // Do not form containers. - // tokenizer.concrete = true - return continuation(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * In continuation of any HTML kind. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function continuation(code) { - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationCommentInside - } - if (code === 60 && marker === 1) { - effects.consume(code) - return continuationRawTagOpen - } - if (code === 62 && marker === 4) { - effects.consume(code) - return continuationClose - } - if (code === 63 && marker === 3) { - effects.consume(code) - return continuationDeclarationInside - } - if (code === 93 && marker === 5) { - effects.consume(code) - return continuationCdataInside - } - if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { - effects.exit('htmlFlowData') - return effects.check( - blankLineBefore, - continuationAfter, - continuationStart - )(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationStart(code) - } - effects.consume(code) - return continuation - } - - /** - * In continuation, at eol. - * - * ```markdown - * > | - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStart(code) { - return effects.check( - nonLazyContinuationStart, - continuationStartNonLazy, - continuationAfter - )(code) - } - - /** - * In continuation, at eol, before non-lazy content. - * - * ```markdown - * > | - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStartNonLazy(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return continuationBefore - } - - /** - * In continuation, before non-lazy content. - * - * ```markdown - * | - * > | asd - * ^ - * ``` - * - * @type {State} - */ - function continuationBefore(code) { - if (code === null || markdownLineEnding(code)) { - return continuationStart(code) - } - effects.enter('htmlFlowData') - return continuation(code) - } - - /** - * In comment continuation, after one `-`, expecting another. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function continuationCommentInside(code) { - if (code === 45) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In raw continuation, after `<`, at `/`. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function continuationRawTagOpen(code) { - if (code === 47) { - effects.consume(code) - buffer = '' - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In raw continuation, after ` | - * ^^^^^^ - * ``` - * - * @type {State} - */ - function continuationRawEndTag(code) { - if (code === 62) { - const name = buffer.toLowerCase() - if (htmlRawNames.includes(name)) { - effects.consume(code) - return continuationClose - } - return continuation(code) - } - if (asciiAlpha(code) && buffer.length < 8) { - effects.consume(code) - // @ts-expect-error: not null. - buffer += String.fromCharCode(code) - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In cdata continuation, after `]`, expecting `]>`. - * - * ```markdown - * > | &<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationCdataInside(code) { - if (code === 93) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In declaration or instruction continuation, at `>`. - * - * ```markdown - * > | - * ^ - * > | - * ^ - * > | - * ^ - * > | - * ^ - * > | &<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationDeclarationInside(code) { - if (code === 62) { - effects.consume(code) - return continuationClose - } - - // More dashes. - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In closed continuation: everything we get until the eol/eof is part of it. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function continuationClose(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationAfter(code) - } - effects.consume(code) - return continuationClose - } - - /** - * Done. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function continuationAfter(code) { - effects.exit('htmlFlow') - // // Feel free to interrupt. - // tokenizer.interrupt = false - // // No longer concrete. - // tokenizer.concrete = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuationStart(effects, ok, nok) { - const self = this - return start - - /** - * At eol, before continuation. - * - * ```markdown - * > | * ```js - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return after - } - return nok(code) - } - - /** - * A continuation. - * - * ```markdown - * | * ```js - * > | b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLineBefore(effects, ok, nok) { - return start - - /** - * Before eol, expecting blank line. - * - * ```markdown - * > |
      - * ^ - * | - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return effects.attempt(blankLine, ok, nok) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const nonLazyContinuation = { - tokenize: tokenizeNonLazyContinuation, - partial: true -} - -/** @type {Construct} */ -const codeFenced = { - name: 'codeFenced', - tokenize: tokenizeCodeFenced, - concrete: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeFenced(effects, ok, nok) { - const self = this - /** @type {Construct} */ - const closeStart = { - tokenize: tokenizeCloseStart, - partial: true - } - let initialPrefix = 0 - let sizeOpen = 0 - /** @type {NonNullable} */ - let marker - return start - - /** - * Start of code. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse whitespace like `markdown-rs`. - return beforeSequenceOpen(code) - } - - /** - * In opening fence, after prefix, at sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeSequenceOpen(code) { - const tail = self.events[self.events.length - 1] - initialPrefix = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - marker = code - effects.enter('codeFenced') - effects.enter('codeFencedFence') - effects.enter('codeFencedFenceSequence') - return sequenceOpen(code) - } - - /** - * In opening fence sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === marker) { - sizeOpen++ - effects.consume(code) - return sequenceOpen - } - if (sizeOpen < 3) { - return nok(code) - } - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, infoBefore, 'whitespace')(code) - : infoBefore(code) - } - - /** - * In opening fence, after the sequence (and optional whitespace), before info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function infoBefore(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return self.interrupt - ? ok(code) - : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFencedFenceInfo') - effects.enter('chunkString', { - contentType: 'string' - }) - return info(code) - } - - /** - * In info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function info(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return infoBefore(code) - } - if (markdownSpace(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return factorySpace(effects, metaBefore, 'whitespace')(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return info - } - - /** - * In opening fence, after info and whitespace, before meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function metaBefore(code) { - if (code === null || markdownLineEnding(code)) { - return infoBefore(code) - } - effects.enter('codeFencedFenceMeta') - effects.enter('chunkString', { - contentType: 'string' - }) - return meta(code) - } - - /** - * In meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function meta(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceMeta') - return infoBefore(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return meta - } - - /** - * At eol/eof in code, before a non-lazy closing fence or content. - * - * ```markdown - * > | ~~~js - * ^ - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function atNonLazyBreak(code) { - return effects.attempt(closeStart, after, contentBefore)(code) - } - - /** - * Before code content, not a closing fence, at eol. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return contentStart - } - - /** - * Before code content, not a closing fence. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentStart(code) { - return initialPrefix > 0 && markdownSpace(code) - ? factorySpace( - effects, - beforeContentChunk, - 'linePrefix', - initialPrefix + 1 - )(code) - : beforeContentChunk(code) - } - - /** - * Before code content, after optional prefix. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeContentChunk(code) { - if (code === null || markdownLineEnding(code)) { - return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFlowValue') - return contentChunk(code) - } - - /** - * In code content. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^^^^^^^^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentChunk(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return beforeContentChunk(code) - } - effects.consume(code) - return contentChunk - } - - /** - * After code. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - effects.exit('codeFenced') - return ok(code) - } - - /** - * @this {TokenizeContext} - * @type {Tokenizer} - */ - function tokenizeCloseStart(effects, ok, nok) { - let size = 0 - return startBefore - - /** - * - * - * @type {State} - */ - function startBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return start - } - - /** - * Before closing fence, at optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Always populated by defaults. - - // To do: `enter` here or in next state? - effects.enter('codeFencedFence') - return markdownSpace(code) - ? factorySpace( - effects, - beforeSequenceClose, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : beforeSequenceClose(code) - } - - /** - * In closing fence, after optional whitespace, at sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function beforeSequenceClose(code) { - if (code === marker) { - effects.enter('codeFencedFenceSequence') - return sequenceClose(code) - } - return nok(code) - } - - /** - * In closing fence sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - if (code === marker) { - size++ - effects.consume(code) - return sequenceClose - } - if (size >= sizeOpen) { - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) - : sequenceCloseAfter(code) - } - return nok(code) - } - - /** - * After closing fence sequence, after optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceCloseAfter(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return ok(code) - } - return nok(code) - } - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuation(effects, ok, nok) { - const self = this - return start - - /** - * - * - * @type {State} - */ - function start(code) { - if (code === null) { - return nok(code) - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineStart - } - - /** - * - * - * @type {State} - */ - function lineStart(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/character-entities/index.js -/** - * Map of named character references. - * - * @type {Record} - */ -const characterEntities = { - AElig: 'Æ', - AMP: '&', - Aacute: 'Á', - Abreve: 'Ă', - Acirc: 'Â', - Acy: 'А', - Afr: '𝔄', - Agrave: 'À', - Alpha: 'Α', - Amacr: 'Ā', - And: '⩓', - Aogon: 'Ą', - Aopf: '𝔸', - ApplyFunction: '⁡', - Aring: 'Å', - Ascr: '𝒜', - Assign: '≔', - Atilde: 'Ã', - Auml: 'Ä', - Backslash: '∖', - Barv: '⫧', - Barwed: '⌆', - Bcy: 'Б', - Because: '∵', - Bernoullis: 'ℬ', - Beta: 'Β', - Bfr: '𝔅', - Bopf: '𝔹', - Breve: '˘', - Bscr: 'ℬ', - Bumpeq: '≎', - CHcy: 'Ч', - COPY: '©', - Cacute: 'Ć', - Cap: '⋒', - CapitalDifferentialD: 'ⅅ', - Cayleys: 'ℭ', - Ccaron: 'Č', - Ccedil: 'Ç', - Ccirc: 'Ĉ', - Cconint: '∰', - Cdot: 'Ċ', - Cedilla: '¸', - CenterDot: '·', - Cfr: 'ℭ', - Chi: 'Χ', - CircleDot: '⊙', - CircleMinus: '⊖', - CirclePlus: '⊕', - CircleTimes: '⊗', - ClockwiseContourIntegral: '∲', - CloseCurlyDoubleQuote: '”', - CloseCurlyQuote: '’', - Colon: '∷', - Colone: '⩴', - Congruent: '≡', - Conint: '∯', - ContourIntegral: '∮', - Copf: 'ℂ', - Coproduct: '∐', - CounterClockwiseContourIntegral: '∳', - Cross: '⨯', - Cscr: '𝒞', - Cup: '⋓', - CupCap: '≍', - DD: 'ⅅ', - DDotrahd: '⤑', - DJcy: 'Ђ', - DScy: 'Ѕ', - DZcy: 'Џ', - Dagger: '‡', - Darr: '↡', - Dashv: '⫤', - Dcaron: 'Ď', - Dcy: 'Д', - Del: '∇', - Delta: 'Δ', - Dfr: '𝔇', - DiacriticalAcute: '´', - DiacriticalDot: '˙', - DiacriticalDoubleAcute: '˝', - DiacriticalGrave: '`', - DiacriticalTilde: '˜', - Diamond: '⋄', - DifferentialD: 'ⅆ', - Dopf: '𝔻', - Dot: '¨', - DotDot: '⃜', - DotEqual: '≐', - DoubleContourIntegral: '∯', - DoubleDot: '¨', - DoubleDownArrow: '⇓', - DoubleLeftArrow: '⇐', - DoubleLeftRightArrow: '⇔', - DoubleLeftTee: '⫤', - DoubleLongLeftArrow: '⟸', - DoubleLongLeftRightArrow: '⟺', - DoubleLongRightArrow: '⟹', - DoubleRightArrow: '⇒', - DoubleRightTee: '⊨', - DoubleUpArrow: '⇑', - DoubleUpDownArrow: '⇕', - DoubleVerticalBar: '∥', - DownArrow: '↓', - DownArrowBar: '⤓', - DownArrowUpArrow: '⇵', - DownBreve: '̑', - DownLeftRightVector: '⥐', - DownLeftTeeVector: '⥞', - DownLeftVector: '↽', - DownLeftVectorBar: '⥖', - DownRightTeeVector: '⥟', - DownRightVector: '⇁', - DownRightVectorBar: '⥗', - DownTee: '⊤', - DownTeeArrow: '↧', - Downarrow: '⇓', - Dscr: '𝒟', - Dstrok: 'Đ', - ENG: 'Ŋ', - ETH: 'Ð', - Eacute: 'É', - Ecaron: 'Ě', - Ecirc: 'Ê', - Ecy: 'Э', - Edot: 'Ė', - Efr: '𝔈', - Egrave: 'È', - Element: '∈', - Emacr: 'Ē', - EmptySmallSquare: '◻', - EmptyVerySmallSquare: '▫', - Eogon: 'Ę', - Eopf: '𝔼', - Epsilon: 'Ε', - Equal: '⩵', - EqualTilde: '≂', - Equilibrium: '⇌', - Escr: 'ℰ', - Esim: '⩳', - Eta: 'Η', - Euml: 'Ë', - Exists: '∃', - ExponentialE: 'ⅇ', - Fcy: 'Ф', - Ffr: '𝔉', - FilledSmallSquare: '◼', - FilledVerySmallSquare: '▪', - Fopf: '𝔽', - ForAll: '∀', - Fouriertrf: 'ℱ', - Fscr: 'ℱ', - GJcy: 'Ѓ', - GT: '>', - Gamma: 'Γ', - Gammad: 'Ϝ', - Gbreve: 'Ğ', - Gcedil: 'Ģ', - Gcirc: 'Ĝ', - Gcy: 'Г', - Gdot: 'Ġ', - Gfr: '𝔊', - Gg: '⋙', - Gopf: '𝔾', - GreaterEqual: '≥', - GreaterEqualLess: '⋛', - GreaterFullEqual: '≧', - GreaterGreater: '⪢', - GreaterLess: '≷', - GreaterSlantEqual: '⩾', - GreaterTilde: '≳', - Gscr: '𝒢', - Gt: '≫', - HARDcy: 'Ъ', - Hacek: 'ˇ', - Hat: '^', - Hcirc: 'Ĥ', - Hfr: 'ℌ', - HilbertSpace: 'ℋ', - Hopf: 'ℍ', - HorizontalLine: '─', - Hscr: 'ℋ', - Hstrok: 'Ħ', - HumpDownHump: '≎', - HumpEqual: '≏', - IEcy: 'Е', - IJlig: 'IJ', - IOcy: 'Ё', - Iacute: 'Í', - Icirc: 'Î', - Icy: 'И', - Idot: 'İ', - Ifr: 'ℑ', - Igrave: 'Ì', - Im: 'ℑ', - Imacr: 'Ī', - ImaginaryI: 'ⅈ', - Implies: '⇒', - Int: '∬', - Integral: '∫', - Intersection: '⋂', - InvisibleComma: '⁣', - InvisibleTimes: '⁢', - Iogon: 'Į', - Iopf: '𝕀', - Iota: 'Ι', - Iscr: 'ℐ', - Itilde: 'Ĩ', - Iukcy: 'І', - Iuml: 'Ï', - Jcirc: 'Ĵ', - Jcy: 'Й', - Jfr: '𝔍', - Jopf: '𝕁', - Jscr: '𝒥', - Jsercy: 'Ј', - Jukcy: 'Є', - KHcy: 'Х', - KJcy: 'Ќ', - Kappa: 'Κ', - Kcedil: 'Ķ', - Kcy: 'К', - Kfr: '𝔎', - Kopf: '𝕂', - Kscr: '𝒦', - LJcy: 'Љ', - LT: '<', - Lacute: 'Ĺ', - Lambda: 'Λ', - Lang: '⟪', - Laplacetrf: 'ℒ', - Larr: '↞', - Lcaron: 'Ľ', - Lcedil: 'Ļ', - Lcy: 'Л', - LeftAngleBracket: '⟨', - LeftArrow: '←', - LeftArrowBar: '⇤', - LeftArrowRightArrow: '⇆', - LeftCeiling: '⌈', - LeftDoubleBracket: '⟦', - LeftDownTeeVector: '⥡', - LeftDownVector: '⇃', - LeftDownVectorBar: '⥙', - LeftFloor: '⌊', - LeftRightArrow: '↔', - LeftRightVector: '⥎', - LeftTee: '⊣', - LeftTeeArrow: '↤', - LeftTeeVector: '⥚', - LeftTriangle: '⊲', - LeftTriangleBar: '⧏', - LeftTriangleEqual: '⊴', - LeftUpDownVector: '⥑', - LeftUpTeeVector: '⥠', - LeftUpVector: '↿', - LeftUpVectorBar: '⥘', - LeftVector: '↼', - LeftVectorBar: '⥒', - Leftarrow: '⇐', - Leftrightarrow: '⇔', - LessEqualGreater: '⋚', - LessFullEqual: '≦', - LessGreater: '≶', - LessLess: '⪡', - LessSlantEqual: '⩽', - LessTilde: '≲', - Lfr: '𝔏', - Ll: '⋘', - Lleftarrow: '⇚', - Lmidot: 'Ŀ', - LongLeftArrow: '⟵', - LongLeftRightArrow: '⟷', - LongRightArrow: '⟶', - Longleftarrow: '⟸', - Longleftrightarrow: '⟺', - Longrightarrow: '⟹', - Lopf: '𝕃', - LowerLeftArrow: '↙', - LowerRightArrow: '↘', - Lscr: 'ℒ', - Lsh: '↰', - Lstrok: 'Ł', - Lt: '≪', - Map: '⤅', - Mcy: 'М', - MediumSpace: ' ', - Mellintrf: 'ℳ', - Mfr: '𝔐', - MinusPlus: '∓', - Mopf: '𝕄', - Mscr: 'ℳ', - Mu: 'Μ', - NJcy: 'Њ', - Nacute: 'Ń', - Ncaron: 'Ň', - Ncedil: 'Ņ', - Ncy: 'Н', - NegativeMediumSpace: '​', - NegativeThickSpace: '​', - NegativeThinSpace: '​', - NegativeVeryThinSpace: '​', - NestedGreaterGreater: '≫', - NestedLessLess: '≪', - NewLine: '\n', - Nfr: '𝔑', - NoBreak: '⁠', - NonBreakingSpace: ' ', - Nopf: 'ℕ', - Not: '⫬', - NotCongruent: '≢', - NotCupCap: '≭', - NotDoubleVerticalBar: '∦', - NotElement: '∉', - NotEqual: '≠', - NotEqualTilde: '≂̸', - NotExists: '∄', - NotGreater: '≯', - NotGreaterEqual: '≱', - NotGreaterFullEqual: '≧̸', - NotGreaterGreater: '≫̸', - NotGreaterLess: '≹', - NotGreaterSlantEqual: '⩾̸', - NotGreaterTilde: '≵', - NotHumpDownHump: '≎̸', - NotHumpEqual: '≏̸', - NotLeftTriangle: '⋪', - NotLeftTriangleBar: '⧏̸', - NotLeftTriangleEqual: '⋬', - NotLess: '≮', - NotLessEqual: '≰', - NotLessGreater: '≸', - NotLessLess: '≪̸', - NotLessSlantEqual: '⩽̸', - NotLessTilde: '≴', - NotNestedGreaterGreater: '⪢̸', - NotNestedLessLess: '⪡̸', - NotPrecedes: '⊀', - NotPrecedesEqual: '⪯̸', - NotPrecedesSlantEqual: '⋠', - NotReverseElement: '∌', - NotRightTriangle: '⋫', - NotRightTriangleBar: '⧐̸', - NotRightTriangleEqual: '⋭', - NotSquareSubset: '⊏̸', - NotSquareSubsetEqual: '⋢', - NotSquareSuperset: '⊐̸', - NotSquareSupersetEqual: '⋣', - NotSubset: '⊂⃒', - NotSubsetEqual: '⊈', - NotSucceeds: '⊁', - NotSucceedsEqual: '⪰̸', - NotSucceedsSlantEqual: '⋡', - NotSucceedsTilde: '≿̸', - NotSuperset: '⊃⃒', - NotSupersetEqual: '⊉', - NotTilde: '≁', - NotTildeEqual: '≄', - NotTildeFullEqual: '≇', - NotTildeTilde: '≉', - NotVerticalBar: '∤', - Nscr: '𝒩', - Ntilde: 'Ñ', - Nu: 'Ν', - OElig: 'Œ', - Oacute: 'Ó', - Ocirc: 'Ô', - Ocy: 'О', - Odblac: 'Ő', - Ofr: '𝔒', - Ograve: 'Ò', - Omacr: 'Ō', - Omega: 'Ω', - Omicron: 'Ο', - Oopf: '𝕆', - OpenCurlyDoubleQuote: '“', - OpenCurlyQuote: '‘', - Or: '⩔', - Oscr: '𝒪', - Oslash: 'Ø', - Otilde: 'Õ', - Otimes: '⨷', - Ouml: 'Ö', - OverBar: '‾', - OverBrace: '⏞', - OverBracket: '⎴', - OverParenthesis: '⏜', - PartialD: '∂', - Pcy: 'П', - Pfr: '𝔓', - Phi: 'Φ', - Pi: 'Π', - PlusMinus: '±', - Poincareplane: 'ℌ', - Popf: 'ℙ', - Pr: '⪻', - Precedes: '≺', - PrecedesEqual: '⪯', - PrecedesSlantEqual: '≼', - PrecedesTilde: '≾', - Prime: '″', - Product: '∏', - Proportion: '∷', - Proportional: '∝', - Pscr: '𝒫', - Psi: 'Ψ', - QUOT: '"', - Qfr: '𝔔', - Qopf: 'ℚ', - Qscr: '𝒬', - RBarr: '⤐', - REG: '®', - Racute: 'Ŕ', - Rang: '⟫', - Rarr: '↠', - Rarrtl: '⤖', - Rcaron: 'Ř', - Rcedil: 'Ŗ', - Rcy: 'Р', - Re: 'ℜ', - ReverseElement: '∋', - ReverseEquilibrium: '⇋', - ReverseUpEquilibrium: '⥯', - Rfr: 'ℜ', - Rho: 'Ρ', - RightAngleBracket: '⟩', - RightArrow: '→', - RightArrowBar: '⇥', - RightArrowLeftArrow: '⇄', - RightCeiling: '⌉', - RightDoubleBracket: '⟧', - RightDownTeeVector: '⥝', - RightDownVector: '⇂', - RightDownVectorBar: '⥕', - RightFloor: '⌋', - RightTee: '⊢', - RightTeeArrow: '↦', - RightTeeVector: '⥛', - RightTriangle: '⊳', - RightTriangleBar: '⧐', - RightTriangleEqual: '⊵', - RightUpDownVector: '⥏', - RightUpTeeVector: '⥜', - RightUpVector: '↾', - RightUpVectorBar: '⥔', - RightVector: '⇀', - RightVectorBar: '⥓', - Rightarrow: '⇒', - Ropf: 'ℝ', - RoundImplies: '⥰', - Rrightarrow: '⇛', - Rscr: 'ℛ', - Rsh: '↱', - RuleDelayed: '⧴', - SHCHcy: 'Щ', - SHcy: 'Ш', - SOFTcy: 'Ь', - Sacute: 'Ś', - Sc: '⪼', - Scaron: 'Š', - Scedil: 'Ş', - Scirc: 'Ŝ', - Scy: 'С', - Sfr: '𝔖', - ShortDownArrow: '↓', - ShortLeftArrow: '←', - ShortRightArrow: '→', - ShortUpArrow: '↑', - Sigma: 'Σ', - SmallCircle: '∘', - Sopf: '𝕊', - Sqrt: '√', - Square: '□', - SquareIntersection: '⊓', - SquareSubset: '⊏', - SquareSubsetEqual: '⊑', - SquareSuperset: '⊐', - SquareSupersetEqual: '⊒', - SquareUnion: '⊔', - Sscr: '𝒮', - Star: '⋆', - Sub: '⋐', - Subset: '⋐', - SubsetEqual: '⊆', - Succeeds: '≻', - SucceedsEqual: '⪰', - SucceedsSlantEqual: '≽', - SucceedsTilde: '≿', - SuchThat: '∋', - Sum: '∑', - Sup: '⋑', - Superset: '⊃', - SupersetEqual: '⊇', - Supset: '⋑', - THORN: 'Þ', - TRADE: '™', - TSHcy: 'Ћ', - TScy: 'Ц', - Tab: '\t', - Tau: 'Τ', - Tcaron: 'Ť', - Tcedil: 'Ţ', - Tcy: 'Т', - Tfr: '𝔗', - Therefore: '∴', - Theta: 'Θ', - ThickSpace: '  ', - ThinSpace: ' ', - Tilde: '∼', - TildeEqual: '≃', - TildeFullEqual: '≅', - TildeTilde: '≈', - Topf: '𝕋', - TripleDot: '⃛', - Tscr: '𝒯', - Tstrok: 'Ŧ', - Uacute: 'Ú', - Uarr: '↟', - Uarrocir: '⥉', - Ubrcy: 'Ў', - Ubreve: 'Ŭ', - Ucirc: 'Û', - Ucy: 'У', - Udblac: 'Ű', - Ufr: '𝔘', - Ugrave: 'Ù', - Umacr: 'Ū', - UnderBar: '_', - UnderBrace: '⏟', - UnderBracket: '⎵', - UnderParenthesis: '⏝', - Union: '⋃', - UnionPlus: '⊎', - Uogon: 'Ų', - Uopf: '𝕌', - UpArrow: '↑', - UpArrowBar: '⤒', - UpArrowDownArrow: '⇅', - UpDownArrow: '↕', - UpEquilibrium: '⥮', - UpTee: '⊥', - UpTeeArrow: '↥', - Uparrow: '⇑', - Updownarrow: '⇕', - UpperLeftArrow: '↖', - UpperRightArrow: '↗', - Upsi: 'ϒ', - Upsilon: 'Υ', - Uring: 'Ů', - Uscr: '𝒰', - Utilde: 'Ũ', - Uuml: 'Ü', - VDash: '⊫', - Vbar: '⫫', - Vcy: 'В', - Vdash: '⊩', - Vdashl: '⫦', - Vee: '⋁', - Verbar: '‖', - Vert: '‖', - VerticalBar: '∣', - VerticalLine: '|', - VerticalSeparator: '❘', - VerticalTilde: '≀', - VeryThinSpace: ' ', - Vfr: '𝔙', - Vopf: '𝕍', - Vscr: '𝒱', - Vvdash: '⊪', - Wcirc: 'Ŵ', - Wedge: '⋀', - Wfr: '𝔚', - Wopf: '𝕎', - Wscr: '𝒲', - Xfr: '𝔛', - Xi: 'Ξ', - Xopf: '𝕏', - Xscr: '𝒳', - YAcy: 'Я', - YIcy: 'Ї', - YUcy: 'Ю', - Yacute: 'Ý', - Ycirc: 'Ŷ', - Ycy: 'Ы', - Yfr: '𝔜', - Yopf: '𝕐', - Yscr: '𝒴', - Yuml: 'Ÿ', - ZHcy: 'Ж', - Zacute: 'Ź', - Zcaron: 'Ž', - Zcy: 'З', - Zdot: 'Ż', - ZeroWidthSpace: '​', - Zeta: 'Ζ', - Zfr: 'ℨ', - Zopf: 'ℤ', - Zscr: '𝒵', - aacute: 'á', - abreve: 'ă', - ac: '∾', - acE: '∾̳', - acd: '∿', - acirc: 'â', - acute: '´', - acy: 'а', - aelig: 'æ', - af: '⁡', - afr: '𝔞', - agrave: 'à', - alefsym: 'ℵ', - aleph: 'ℵ', - alpha: 'α', - amacr: 'ā', - amalg: '⨿', - amp: '&', - and: '∧', - andand: '⩕', - andd: '⩜', - andslope: '⩘', - andv: '⩚', - ang: '∠', - ange: '⦤', - angle: '∠', - angmsd: '∡', - angmsdaa: '⦨', - angmsdab: '⦩', - angmsdac: '⦪', - angmsdad: '⦫', - angmsdae: '⦬', - angmsdaf: '⦭', - angmsdag: '⦮', - angmsdah: '⦯', - angrt: '∟', - angrtvb: '⊾', - angrtvbd: '⦝', - angsph: '∢', - angst: 'Å', - angzarr: '⍼', - aogon: 'ą', - aopf: '𝕒', - ap: '≈', - apE: '⩰', - apacir: '⩯', - ape: '≊', - apid: '≋', - apos: "'", - approx: '≈', - approxeq: '≊', - aring: 'å', - ascr: '𝒶', - ast: '*', - asymp: '≈', - asympeq: '≍', - atilde: 'ã', - auml: 'ä', - awconint: '∳', - awint: '⨑', - bNot: '⫭', - backcong: '≌', - backepsilon: '϶', - backprime: '‵', - backsim: '∽', - backsimeq: '⋍', - barvee: '⊽', - barwed: '⌅', - barwedge: '⌅', - bbrk: '⎵', - bbrktbrk: '⎶', - bcong: '≌', - bcy: 'б', - bdquo: '„', - becaus: '∵', - because: '∵', - bemptyv: '⦰', - bepsi: '϶', - bernou: 'ℬ', - beta: 'β', - beth: 'ℶ', - between: '≬', - bfr: '𝔟', - bigcap: '⋂', - bigcirc: '◯', - bigcup: '⋃', - bigodot: '⨀', - bigoplus: '⨁', - bigotimes: '⨂', - bigsqcup: '⨆', - bigstar: '★', - bigtriangledown: '▽', - bigtriangleup: '△', - biguplus: '⨄', - bigvee: '⋁', - bigwedge: '⋀', - bkarow: '⤍', - blacklozenge: '⧫', - blacksquare: '▪', - blacktriangle: '▴', - blacktriangledown: '▾', - blacktriangleleft: '◂', - blacktriangleright: '▸', - blank: '␣', - blk12: '▒', - blk14: '░', - blk34: '▓', - block: '█', - bne: '=⃥', - bnequiv: '≡⃥', - bnot: '⌐', - bopf: '𝕓', - bot: '⊥', - bottom: '⊥', - bowtie: '⋈', - boxDL: '╗', - boxDR: '╔', - boxDl: '╖', - boxDr: '╓', - boxH: '═', - boxHD: '╦', - boxHU: '╩', - boxHd: '╤', - boxHu: '╧', - boxUL: '╝', - boxUR: '╚', - boxUl: '╜', - boxUr: '╙', - boxV: '║', - boxVH: '╬', - boxVL: '╣', - boxVR: '╠', - boxVh: '╫', - boxVl: '╢', - boxVr: '╟', - boxbox: '⧉', - boxdL: '╕', - boxdR: '╒', - boxdl: '┐', - boxdr: '┌', - boxh: '─', - boxhD: '╥', - boxhU: '╨', - boxhd: '┬', - boxhu: '┴', - boxminus: '⊟', - boxplus: '⊞', - boxtimes: '⊠', - boxuL: '╛', - boxuR: '╘', - boxul: '┘', - boxur: '└', - boxv: '│', - boxvH: '╪', - boxvL: '╡', - boxvR: '╞', - boxvh: '┼', - boxvl: '┤', - boxvr: '├', - bprime: '‵', - breve: '˘', - brvbar: '¦', - bscr: '𝒷', - bsemi: '⁏', - bsim: '∽', - bsime: '⋍', - bsol: '\\', - bsolb: '⧅', - bsolhsub: '⟈', - bull: '•', - bullet: '•', - bump: '≎', - bumpE: '⪮', - bumpe: '≏', - bumpeq: '≏', - cacute: 'ć', - cap: '∩', - capand: '⩄', - capbrcup: '⩉', - capcap: '⩋', - capcup: '⩇', - capdot: '⩀', - caps: '∩︀', - caret: '⁁', - caron: 'ˇ', - ccaps: '⩍', - ccaron: 'č', - ccedil: 'ç', - ccirc: 'ĉ', - ccups: '⩌', - ccupssm: '⩐', - cdot: 'ċ', - cedil: '¸', - cemptyv: '⦲', - cent: '¢', - centerdot: '·', - cfr: '𝔠', - chcy: 'ч', - check: '✓', - checkmark: '✓', - chi: 'χ', - cir: '○', - cirE: '⧃', - circ: 'ˆ', - circeq: '≗', - circlearrowleft: '↺', - circlearrowright: '↻', - circledR: '®', - circledS: 'Ⓢ', - circledast: '⊛', - circledcirc: '⊚', - circleddash: '⊝', - cire: '≗', - cirfnint: '⨐', - cirmid: '⫯', - cirscir: '⧂', - clubs: '♣', - clubsuit: '♣', - colon: ':', - colone: '≔', - coloneq: '≔', - comma: ',', - commat: '@', - comp: '∁', - compfn: '∘', - complement: '∁', - complexes: 'ℂ', - cong: '≅', - congdot: '⩭', - conint: '∮', - copf: '𝕔', - coprod: '∐', - copy: '©', - copysr: '℗', - crarr: '↵', - cross: '✗', - cscr: '𝒸', - csub: '⫏', - csube: '⫑', - csup: '⫐', - csupe: '⫒', - ctdot: '⋯', - cudarrl: '⤸', - cudarrr: '⤵', - cuepr: '⋞', - cuesc: '⋟', - cularr: '↶', - cularrp: '⤽', - cup: '∪', - cupbrcap: '⩈', - cupcap: '⩆', - cupcup: '⩊', - cupdot: '⊍', - cupor: '⩅', - cups: '∪︀', - curarr: '↷', - curarrm: '⤼', - curlyeqprec: '⋞', - curlyeqsucc: '⋟', - curlyvee: '⋎', - curlywedge: '⋏', - curren: '¤', - curvearrowleft: '↶', - curvearrowright: '↷', - cuvee: '⋎', - cuwed: '⋏', - cwconint: '∲', - cwint: '∱', - cylcty: '⌭', - dArr: '⇓', - dHar: '⥥', - dagger: '†', - daleth: 'ℸ', - darr: '↓', - dash: '‐', - dashv: '⊣', - dbkarow: '⤏', - dblac: '˝', - dcaron: 'ď', - dcy: 'д', - dd: 'ⅆ', - ddagger: '‡', - ddarr: '⇊', - ddotseq: '⩷', - deg: '°', - delta: 'δ', - demptyv: '⦱', - dfisht: '⥿', - dfr: '𝔡', - dharl: '⇃', - dharr: '⇂', - diam: '⋄', - diamond: '⋄', - diamondsuit: '♦', - diams: '♦', - die: '¨', - digamma: 'ϝ', - disin: '⋲', - div: '÷', - divide: '÷', - divideontimes: '⋇', - divonx: '⋇', - djcy: 'ђ', - dlcorn: '⌞', - dlcrop: '⌍', - dollar: '$', - dopf: '𝕕', - dot: '˙', - doteq: '≐', - doteqdot: '≑', - dotminus: '∸', - dotplus: '∔', - dotsquare: '⊡', - doublebarwedge: '⌆', - downarrow: '↓', - downdownarrows: '⇊', - downharpoonleft: '⇃', - downharpoonright: '⇂', - drbkarow: '⤐', - drcorn: '⌟', - drcrop: '⌌', - dscr: '𝒹', - dscy: 'ѕ', - dsol: '⧶', - dstrok: 'đ', - dtdot: '⋱', - dtri: '▿', - dtrif: '▾', - duarr: '⇵', - duhar: '⥯', - dwangle: '⦦', - dzcy: 'џ', - dzigrarr: '⟿', - eDDot: '⩷', - eDot: '≑', - eacute: 'é', - easter: '⩮', - ecaron: 'ě', - ecir: '≖', - ecirc: 'ê', - ecolon: '≕', - ecy: 'э', - edot: 'ė', - ee: 'ⅇ', - efDot: '≒', - efr: '𝔢', - eg: '⪚', - egrave: 'è', - egs: '⪖', - egsdot: '⪘', - el: '⪙', - elinters: '⏧', - ell: 'ℓ', - els: '⪕', - elsdot: '⪗', - emacr: 'ē', - empty: '∅', - emptyset: '∅', - emptyv: '∅', - emsp13: ' ', - emsp14: ' ', - emsp: ' ', - eng: 'ŋ', - ensp: ' ', - eogon: 'ę', - eopf: '𝕖', - epar: '⋕', - eparsl: '⧣', - eplus: '⩱', - epsi: 'ε', - epsilon: 'ε', - epsiv: 'ϵ', - eqcirc: '≖', - eqcolon: '≕', - eqsim: '≂', - eqslantgtr: '⪖', - eqslantless: '⪕', - equals: '=', - equest: '≟', - equiv: '≡', - equivDD: '⩸', - eqvparsl: '⧥', - erDot: '≓', - erarr: '⥱', - escr: 'ℯ', - esdot: '≐', - esim: '≂', - eta: 'η', - eth: 'ð', - euml: 'ë', - euro: '€', - excl: '!', - exist: '∃', - expectation: 'ℰ', - exponentiale: 'ⅇ', - fallingdotseq: '≒', - fcy: 'ф', - female: '♀', - ffilig: 'ffi', - fflig: 'ff', - ffllig: 'ffl', - ffr: '𝔣', - filig: 'fi', - fjlig: 'fj', - flat: '♭', - fllig: 'fl', - fltns: '▱', - fnof: 'ƒ', - fopf: '𝕗', - forall: '∀', - fork: '⋔', - forkv: '⫙', - fpartint: '⨍', - frac12: '½', - frac13: '⅓', - frac14: '¼', - frac15: '⅕', - frac16: '⅙', - frac18: '⅛', - frac23: '⅔', - frac25: '⅖', - frac34: '¾', - frac35: '⅗', - frac38: '⅜', - frac45: '⅘', - frac56: '⅚', - frac58: '⅝', - frac78: '⅞', - frasl: '⁄', - frown: '⌢', - fscr: '𝒻', - gE: '≧', - gEl: '⪌', - gacute: 'ǵ', - gamma: 'γ', - gammad: 'ϝ', - gap: '⪆', - gbreve: 'ğ', - gcirc: 'ĝ', - gcy: 'г', - gdot: 'ġ', - ge: '≥', - gel: '⋛', - geq: '≥', - geqq: '≧', - geqslant: '⩾', - ges: '⩾', - gescc: '⪩', - gesdot: '⪀', - gesdoto: '⪂', - gesdotol: '⪄', - gesl: '⋛︀', - gesles: '⪔', - gfr: '𝔤', - gg: '≫', - ggg: '⋙', - gimel: 'ℷ', - gjcy: 'ѓ', - gl: '≷', - glE: '⪒', - gla: '⪥', - glj: '⪤', - gnE: '≩', - gnap: '⪊', - gnapprox: '⪊', - gne: '⪈', - gneq: '⪈', - gneqq: '≩', - gnsim: '⋧', - gopf: '𝕘', - grave: '`', - gscr: 'ℊ', - gsim: '≳', - gsime: '⪎', - gsiml: '⪐', - gt: '>', - gtcc: '⪧', - gtcir: '⩺', - gtdot: '⋗', - gtlPar: '⦕', - gtquest: '⩼', - gtrapprox: '⪆', - gtrarr: '⥸', - gtrdot: '⋗', - gtreqless: '⋛', - gtreqqless: '⪌', - gtrless: '≷', - gtrsim: '≳', - gvertneqq: '≩︀', - gvnE: '≩︀', - hArr: '⇔', - hairsp: ' ', - half: '½', - hamilt: 'ℋ', - hardcy: 'ъ', - harr: '↔', - harrcir: '⥈', - harrw: '↭', - hbar: 'ℏ', - hcirc: 'ĥ', - hearts: '♥', - heartsuit: '♥', - hellip: '…', - hercon: '⊹', - hfr: '𝔥', - hksearow: '⤥', - hkswarow: '⤦', - hoarr: '⇿', - homtht: '∻', - hookleftarrow: '↩', - hookrightarrow: '↪', - hopf: '𝕙', - horbar: '―', - hscr: '𝒽', - hslash: 'ℏ', - hstrok: 'ħ', - hybull: '⁃', - hyphen: '‐', - iacute: 'í', - ic: '⁣', - icirc: 'î', - icy: 'и', - iecy: 'е', - iexcl: '¡', - iff: '⇔', - ifr: '𝔦', - igrave: 'ì', - ii: 'ⅈ', - iiiint: '⨌', - iiint: '∭', - iinfin: '⧜', - iiota: '℩', - ijlig: 'ij', - imacr: 'ī', - image: 'ℑ', - imagline: 'ℐ', - imagpart: 'ℑ', - imath: 'ı', - imof: '⊷', - imped: 'Ƶ', - in: '∈', - incare: '℅', - infin: '∞', - infintie: '⧝', - inodot: 'ı', - int: '∫', - intcal: '⊺', - integers: 'ℤ', - intercal: '⊺', - intlarhk: '⨗', - intprod: '⨼', - iocy: 'ё', - iogon: 'į', - iopf: '𝕚', - iota: 'ι', - iprod: '⨼', - iquest: '¿', - iscr: '𝒾', - isin: '∈', - isinE: '⋹', - isindot: '⋵', - isins: '⋴', - isinsv: '⋳', - isinv: '∈', - it: '⁢', - itilde: 'ĩ', - iukcy: 'і', - iuml: 'ï', - jcirc: 'ĵ', - jcy: 'й', - jfr: '𝔧', - jmath: 'ȷ', - jopf: '𝕛', - jscr: '𝒿', - jsercy: 'ј', - jukcy: 'є', - kappa: 'κ', - kappav: 'ϰ', - kcedil: 'ķ', - kcy: 'к', - kfr: '𝔨', - kgreen: 'ĸ', - khcy: 'х', - kjcy: 'ќ', - kopf: '𝕜', - kscr: '𝓀', - lAarr: '⇚', - lArr: '⇐', - lAtail: '⤛', - lBarr: '⤎', - lE: '≦', - lEg: '⪋', - lHar: '⥢', - lacute: 'ĺ', - laemptyv: '⦴', - lagran: 'ℒ', - lambda: 'λ', - lang: '⟨', - langd: '⦑', - langle: '⟨', - lap: '⪅', - laquo: '«', - larr: '←', - larrb: '⇤', - larrbfs: '⤟', - larrfs: '⤝', - larrhk: '↩', - larrlp: '↫', - larrpl: '⤹', - larrsim: '⥳', - larrtl: '↢', - lat: '⪫', - latail: '⤙', - late: '⪭', - lates: '⪭︀', - lbarr: '⤌', - lbbrk: '❲', - lbrace: '{', - lbrack: '[', - lbrke: '⦋', - lbrksld: '⦏', - lbrkslu: '⦍', - lcaron: 'ľ', - lcedil: 'ļ', - lceil: '⌈', - lcub: '{', - lcy: 'л', - ldca: '⤶', - ldquo: '“', - ldquor: '„', - ldrdhar: '⥧', - ldrushar: '⥋', - ldsh: '↲', - le: '≤', - leftarrow: '←', - leftarrowtail: '↢', - leftharpoondown: '↽', - leftharpoonup: '↼', - leftleftarrows: '⇇', - leftrightarrow: '↔', - leftrightarrows: '⇆', - leftrightharpoons: '⇋', - leftrightsquigarrow: '↭', - leftthreetimes: '⋋', - leg: '⋚', - leq: '≤', - leqq: '≦', - leqslant: '⩽', - les: '⩽', - lescc: '⪨', - lesdot: '⩿', - lesdoto: '⪁', - lesdotor: '⪃', - lesg: '⋚︀', - lesges: '⪓', - lessapprox: '⪅', - lessdot: '⋖', - lesseqgtr: '⋚', - lesseqqgtr: '⪋', - lessgtr: '≶', - lesssim: '≲', - lfisht: '⥼', - lfloor: '⌊', - lfr: '𝔩', - lg: '≶', - lgE: '⪑', - lhard: '↽', - lharu: '↼', - lharul: '⥪', - lhblk: '▄', - ljcy: 'љ', - ll: '≪', - llarr: '⇇', - llcorner: '⌞', - llhard: '⥫', - lltri: '◺', - lmidot: 'ŀ', - lmoust: '⎰', - lmoustache: '⎰', - lnE: '≨', - lnap: '⪉', - lnapprox: '⪉', - lne: '⪇', - lneq: '⪇', - lneqq: '≨', - lnsim: '⋦', - loang: '⟬', - loarr: '⇽', - lobrk: '⟦', - longleftarrow: '⟵', - longleftrightarrow: '⟷', - longmapsto: '⟼', - longrightarrow: '⟶', - looparrowleft: '↫', - looparrowright: '↬', - lopar: '⦅', - lopf: '𝕝', - loplus: '⨭', - lotimes: '⨴', - lowast: '∗', - lowbar: '_', - loz: '◊', - lozenge: '◊', - lozf: '⧫', - lpar: '(', - lparlt: '⦓', - lrarr: '⇆', - lrcorner: '⌟', - lrhar: '⇋', - lrhard: '⥭', - lrm: '‎', - lrtri: '⊿', - lsaquo: '‹', - lscr: '𝓁', - lsh: '↰', - lsim: '≲', - lsime: '⪍', - lsimg: '⪏', - lsqb: '[', - lsquo: '‘', - lsquor: '‚', - lstrok: 'ł', - lt: '<', - ltcc: '⪦', - ltcir: '⩹', - ltdot: '⋖', - lthree: '⋋', - ltimes: '⋉', - ltlarr: '⥶', - ltquest: '⩻', - ltrPar: '⦖', - ltri: '◃', - ltrie: '⊴', - ltrif: '◂', - lurdshar: '⥊', - luruhar: '⥦', - lvertneqq: '≨︀', - lvnE: '≨︀', - mDDot: '∺', - macr: '¯', - male: '♂', - malt: '✠', - maltese: '✠', - map: '↦', - mapsto: '↦', - mapstodown: '↧', - mapstoleft: '↤', - mapstoup: '↥', - marker: '▮', - mcomma: '⨩', - mcy: 'м', - mdash: '—', - measuredangle: '∡', - mfr: '𝔪', - mho: '℧', - micro: 'µ', - mid: '∣', - midast: '*', - midcir: '⫰', - middot: '·', - minus: '−', - minusb: '⊟', - minusd: '∸', - minusdu: '⨪', - mlcp: '⫛', - mldr: '…', - mnplus: '∓', - models: '⊧', - mopf: '𝕞', - mp: '∓', - mscr: '𝓂', - mstpos: '∾', - mu: 'μ', - multimap: '⊸', - mumap: '⊸', - nGg: '⋙̸', - nGt: '≫⃒', - nGtv: '≫̸', - nLeftarrow: '⇍', - nLeftrightarrow: '⇎', - nLl: '⋘̸', - nLt: '≪⃒', - nLtv: '≪̸', - nRightarrow: '⇏', - nVDash: '⊯', - nVdash: '⊮', - nabla: '∇', - nacute: 'ń', - nang: '∠⃒', - nap: '≉', - napE: '⩰̸', - napid: '≋̸', - napos: 'ʼn', - napprox: '≉', - natur: '♮', - natural: '♮', - naturals: 'ℕ', - nbsp: ' ', - nbump: '≎̸', - nbumpe: '≏̸', - ncap: '⩃', - ncaron: 'ň', - ncedil: 'ņ', - ncong: '≇', - ncongdot: '⩭̸', - ncup: '⩂', - ncy: 'н', - ndash: '–', - ne: '≠', - neArr: '⇗', - nearhk: '⤤', - nearr: '↗', - nearrow: '↗', - nedot: '≐̸', - nequiv: '≢', - nesear: '⤨', - nesim: '≂̸', - nexist: '∄', - nexists: '∄', - nfr: '𝔫', - ngE: '≧̸', - nge: '≱', - ngeq: '≱', - ngeqq: '≧̸', - ngeqslant: '⩾̸', - nges: '⩾̸', - ngsim: '≵', - ngt: '≯', - ngtr: '≯', - nhArr: '⇎', - nharr: '↮', - nhpar: '⫲', - ni: '∋', - nis: '⋼', - nisd: '⋺', - niv: '∋', - njcy: 'њ', - nlArr: '⇍', - nlE: '≦̸', - nlarr: '↚', - nldr: '‥', - nle: '≰', - nleftarrow: '↚', - nleftrightarrow: '↮', - nleq: '≰', - nleqq: '≦̸', - nleqslant: '⩽̸', - nles: '⩽̸', - nless: '≮', - nlsim: '≴', - nlt: '≮', - nltri: '⋪', - nltrie: '⋬', - nmid: '∤', - nopf: '𝕟', - not: '¬', - notin: '∉', - notinE: '⋹̸', - notindot: '⋵̸', - notinva: '∉', - notinvb: '⋷', - notinvc: '⋶', - notni: '∌', - notniva: '∌', - notnivb: '⋾', - notnivc: '⋽', - npar: '∦', - nparallel: '∦', - nparsl: '⫽⃥', - npart: '∂̸', - npolint: '⨔', - npr: '⊀', - nprcue: '⋠', - npre: '⪯̸', - nprec: '⊀', - npreceq: '⪯̸', - nrArr: '⇏', - nrarr: '↛', - nrarrc: '⤳̸', - nrarrw: '↝̸', - nrightarrow: '↛', - nrtri: '⋫', - nrtrie: '⋭', - nsc: '⊁', - nsccue: '⋡', - nsce: '⪰̸', - nscr: '𝓃', - nshortmid: '∤', - nshortparallel: '∦', - nsim: '≁', - nsime: '≄', - nsimeq: '≄', - nsmid: '∤', - nspar: '∦', - nsqsube: '⋢', - nsqsupe: '⋣', - nsub: '⊄', - nsubE: '⫅̸', - nsube: '⊈', - nsubset: '⊂⃒', - nsubseteq: '⊈', - nsubseteqq: '⫅̸', - nsucc: '⊁', - nsucceq: '⪰̸', - nsup: '⊅', - nsupE: '⫆̸', - nsupe: '⊉', - nsupset: '⊃⃒', - nsupseteq: '⊉', - nsupseteqq: '⫆̸', - ntgl: '≹', - ntilde: 'ñ', - ntlg: '≸', - ntriangleleft: '⋪', - ntrianglelefteq: '⋬', - ntriangleright: '⋫', - ntrianglerighteq: '⋭', - nu: 'ν', - num: '#', - numero: '№', - numsp: ' ', - nvDash: '⊭', - nvHarr: '⤄', - nvap: '≍⃒', - nvdash: '⊬', - nvge: '≥⃒', - nvgt: '>⃒', - nvinfin: '⧞', - nvlArr: '⤂', - nvle: '≤⃒', - nvlt: '<⃒', - nvltrie: '⊴⃒', - nvrArr: '⤃', - nvrtrie: '⊵⃒', - nvsim: '∼⃒', - nwArr: '⇖', - nwarhk: '⤣', - nwarr: '↖', - nwarrow: '↖', - nwnear: '⤧', - oS: 'Ⓢ', - oacute: 'ó', - oast: '⊛', - ocir: '⊚', - ocirc: 'ô', - ocy: 'о', - odash: '⊝', - odblac: 'ő', - odiv: '⨸', - odot: '⊙', - odsold: '⦼', - oelig: 'œ', - ofcir: '⦿', - ofr: '𝔬', - ogon: '˛', - ograve: 'ò', - ogt: '⧁', - ohbar: '⦵', - ohm: 'Ω', - oint: '∮', - olarr: '↺', - olcir: '⦾', - olcross: '⦻', - oline: '‾', - olt: '⧀', - omacr: 'ō', - omega: 'ω', - omicron: 'ο', - omid: '⦶', - ominus: '⊖', - oopf: '𝕠', - opar: '⦷', - operp: '⦹', - oplus: '⊕', - or: '∨', - orarr: '↻', - ord: '⩝', - order: 'ℴ', - orderof: 'ℴ', - ordf: 'ª', - ordm: 'º', - origof: '⊶', - oror: '⩖', - orslope: '⩗', - orv: '⩛', - oscr: 'ℴ', - oslash: 'ø', - osol: '⊘', - otilde: 'õ', - otimes: '⊗', - otimesas: '⨶', - ouml: 'ö', - ovbar: '⌽', - par: '∥', - para: '¶', - parallel: '∥', - parsim: '⫳', - parsl: '⫽', - part: '∂', - pcy: 'п', - percnt: '%', - period: '.', - permil: '‰', - perp: '⊥', - pertenk: '‱', - pfr: '𝔭', - phi: 'φ', - phiv: 'ϕ', - phmmat: 'ℳ', - phone: '☎', - pi: 'π', - pitchfork: '⋔', - piv: 'ϖ', - planck: 'ℏ', - planckh: 'ℎ', - plankv: 'ℏ', - plus: '+', - plusacir: '⨣', - plusb: '⊞', - pluscir: '⨢', - plusdo: '∔', - plusdu: '⨥', - pluse: '⩲', - plusmn: '±', - plussim: '⨦', - plustwo: '⨧', - pm: '±', - pointint: '⨕', - popf: '𝕡', - pound: '£', - pr: '≺', - prE: '⪳', - prap: '⪷', - prcue: '≼', - pre: '⪯', - prec: '≺', - precapprox: '⪷', - preccurlyeq: '≼', - preceq: '⪯', - precnapprox: '⪹', - precneqq: '⪵', - precnsim: '⋨', - precsim: '≾', - prime: '′', - primes: 'ℙ', - prnE: '⪵', - prnap: '⪹', - prnsim: '⋨', - prod: '∏', - profalar: '⌮', - profline: '⌒', - profsurf: '⌓', - prop: '∝', - propto: '∝', - prsim: '≾', - prurel: '⊰', - pscr: '𝓅', - psi: 'ψ', - puncsp: ' ', - qfr: '𝔮', - qint: '⨌', - qopf: '𝕢', - qprime: '⁗', - qscr: '𝓆', - quaternions: 'ℍ', - quatint: '⨖', - quest: '?', - questeq: '≟', - quot: '"', - rAarr: '⇛', - rArr: '⇒', - rAtail: '⤜', - rBarr: '⤏', - rHar: '⥤', - race: '∽̱', - racute: 'ŕ', - radic: '√', - raemptyv: '⦳', - rang: '⟩', - rangd: '⦒', - range: '⦥', - rangle: '⟩', - raquo: '»', - rarr: '→', - rarrap: '⥵', - rarrb: '⇥', - rarrbfs: '⤠', - rarrc: '⤳', - rarrfs: '⤞', - rarrhk: '↪', - rarrlp: '↬', - rarrpl: '⥅', - rarrsim: '⥴', - rarrtl: '↣', - rarrw: '↝', - ratail: '⤚', - ratio: '∶', - rationals: 'ℚ', - rbarr: '⤍', - rbbrk: '❳', - rbrace: '}', - rbrack: ']', - rbrke: '⦌', - rbrksld: '⦎', - rbrkslu: '⦐', - rcaron: 'ř', - rcedil: 'ŗ', - rceil: '⌉', - rcub: '}', - rcy: 'р', - rdca: '⤷', - rdldhar: '⥩', - rdquo: '”', - rdquor: '”', - rdsh: '↳', - real: 'ℜ', - realine: 'ℛ', - realpart: 'ℜ', - reals: 'ℝ', - rect: '▭', - reg: '®', - rfisht: '⥽', - rfloor: '⌋', - rfr: '𝔯', - rhard: '⇁', - rharu: '⇀', - rharul: '⥬', - rho: 'ρ', - rhov: 'ϱ', - rightarrow: '→', - rightarrowtail: '↣', - rightharpoondown: '⇁', - rightharpoonup: '⇀', - rightleftarrows: '⇄', - rightleftharpoons: '⇌', - rightrightarrows: '⇉', - rightsquigarrow: '↝', - rightthreetimes: '⋌', - ring: '˚', - risingdotseq: '≓', - rlarr: '⇄', - rlhar: '⇌', - rlm: '‏', - rmoust: '⎱', - rmoustache: '⎱', - rnmid: '⫮', - roang: '⟭', - roarr: '⇾', - robrk: '⟧', - ropar: '⦆', - ropf: '𝕣', - roplus: '⨮', - rotimes: '⨵', - rpar: ')', - rpargt: '⦔', - rppolint: '⨒', - rrarr: '⇉', - rsaquo: '›', - rscr: '𝓇', - rsh: '↱', - rsqb: ']', - rsquo: '’', - rsquor: '’', - rthree: '⋌', - rtimes: '⋊', - rtri: '▹', - rtrie: '⊵', - rtrif: '▸', - rtriltri: '⧎', - ruluhar: '⥨', - rx: '℞', - sacute: 'ś', - sbquo: '‚', - sc: '≻', - scE: '⪴', - scap: '⪸', - scaron: 'š', - sccue: '≽', - sce: '⪰', - scedil: 'ş', - scirc: 'ŝ', - scnE: '⪶', - scnap: '⪺', - scnsim: '⋩', - scpolint: '⨓', - scsim: '≿', - scy: 'с', - sdot: '⋅', - sdotb: '⊡', - sdote: '⩦', - seArr: '⇘', - searhk: '⤥', - searr: '↘', - searrow: '↘', - sect: '§', - semi: ';', - seswar: '⤩', - setminus: '∖', - setmn: '∖', - sext: '✶', - sfr: '𝔰', - sfrown: '⌢', - sharp: '♯', - shchcy: 'щ', - shcy: 'ш', - shortmid: '∣', - shortparallel: '∥', - shy: '­', - sigma: 'σ', - sigmaf: 'ς', - sigmav: 'ς', - sim: '∼', - simdot: '⩪', - sime: '≃', - simeq: '≃', - simg: '⪞', - simgE: '⪠', - siml: '⪝', - simlE: '⪟', - simne: '≆', - simplus: '⨤', - simrarr: '⥲', - slarr: '←', - smallsetminus: '∖', - smashp: '⨳', - smeparsl: '⧤', - smid: '∣', - smile: '⌣', - smt: '⪪', - smte: '⪬', - smtes: '⪬︀', - softcy: 'ь', - sol: '/', - solb: '⧄', - solbar: '⌿', - sopf: '𝕤', - spades: '♠', - spadesuit: '♠', - spar: '∥', - sqcap: '⊓', - sqcaps: '⊓︀', - sqcup: '⊔', - sqcups: '⊔︀', - sqsub: '⊏', - sqsube: '⊑', - sqsubset: '⊏', - sqsubseteq: '⊑', - sqsup: '⊐', - sqsupe: '⊒', - sqsupset: '⊐', - sqsupseteq: '⊒', - squ: '□', - square: '□', - squarf: '▪', - squf: '▪', - srarr: '→', - sscr: '𝓈', - ssetmn: '∖', - ssmile: '⌣', - sstarf: '⋆', - star: '☆', - starf: '★', - straightepsilon: 'ϵ', - straightphi: 'ϕ', - strns: '¯', - sub: '⊂', - subE: '⫅', - subdot: '⪽', - sube: '⊆', - subedot: '⫃', - submult: '⫁', - subnE: '⫋', - subne: '⊊', - subplus: '⪿', - subrarr: '⥹', - subset: '⊂', - subseteq: '⊆', - subseteqq: '⫅', - subsetneq: '⊊', - subsetneqq: '⫋', - subsim: '⫇', - subsub: '⫕', - subsup: '⫓', - succ: '≻', - succapprox: '⪸', - succcurlyeq: '≽', - succeq: '⪰', - succnapprox: '⪺', - succneqq: '⪶', - succnsim: '⋩', - succsim: '≿', - sum: '∑', - sung: '♪', - sup1: '¹', - sup2: '²', - sup3: '³', - sup: '⊃', - supE: '⫆', - supdot: '⪾', - supdsub: '⫘', - supe: '⊇', - supedot: '⫄', - suphsol: '⟉', - suphsub: '⫗', - suplarr: '⥻', - supmult: '⫂', - supnE: '⫌', - supne: '⊋', - supplus: '⫀', - supset: '⊃', - supseteq: '⊇', - supseteqq: '⫆', - supsetneq: '⊋', - supsetneqq: '⫌', - supsim: '⫈', - supsub: '⫔', - supsup: '⫖', - swArr: '⇙', - swarhk: '⤦', - swarr: '↙', - swarrow: '↙', - swnwar: '⤪', - szlig: 'ß', - target: '⌖', - tau: 'τ', - tbrk: '⎴', - tcaron: 'ť', - tcedil: 'ţ', - tcy: 'т', - tdot: '⃛', - telrec: '⌕', - tfr: '𝔱', - there4: '∴', - therefore: '∴', - theta: 'θ', - thetasym: 'ϑ', - thetav: 'ϑ', - thickapprox: '≈', - thicksim: '∼', - thinsp: ' ', - thkap: '≈', - thksim: '∼', - thorn: 'þ', - tilde: '˜', - times: '×', - timesb: '⊠', - timesbar: '⨱', - timesd: '⨰', - tint: '∭', - toea: '⤨', - top: '⊤', - topbot: '⌶', - topcir: '⫱', - topf: '𝕥', - topfork: '⫚', - tosa: '⤩', - tprime: '‴', - trade: '™', - triangle: '▵', - triangledown: '▿', - triangleleft: '◃', - trianglelefteq: '⊴', - triangleq: '≜', - triangleright: '▹', - trianglerighteq: '⊵', - tridot: '◬', - trie: '≜', - triminus: '⨺', - triplus: '⨹', - trisb: '⧍', - tritime: '⨻', - trpezium: '⏢', - tscr: '𝓉', - tscy: 'ц', - tshcy: 'ћ', - tstrok: 'ŧ', - twixt: '≬', - twoheadleftarrow: '↞', - twoheadrightarrow: '↠', - uArr: '⇑', - uHar: '⥣', - uacute: 'ú', - uarr: '↑', - ubrcy: 'ў', - ubreve: 'ŭ', - ucirc: 'û', - ucy: 'у', - udarr: '⇅', - udblac: 'ű', - udhar: '⥮', - ufisht: '⥾', - ufr: '𝔲', - ugrave: 'ù', - uharl: '↿', - uharr: '↾', - uhblk: '▀', - ulcorn: '⌜', - ulcorner: '⌜', - ulcrop: '⌏', - ultri: '◸', - umacr: 'ū', - uml: '¨', - uogon: 'ų', - uopf: '𝕦', - uparrow: '↑', - updownarrow: '↕', - upharpoonleft: '↿', - upharpoonright: '↾', - uplus: '⊎', - upsi: 'υ', - upsih: 'ϒ', - upsilon: 'υ', - upuparrows: '⇈', - urcorn: '⌝', - urcorner: '⌝', - urcrop: '⌎', - uring: 'ů', - urtri: '◹', - uscr: '𝓊', - utdot: '⋰', - utilde: 'ũ', - utri: '▵', - utrif: '▴', - uuarr: '⇈', - uuml: 'ü', - uwangle: '⦧', - vArr: '⇕', - vBar: '⫨', - vBarv: '⫩', - vDash: '⊨', - vangrt: '⦜', - varepsilon: 'ϵ', - varkappa: 'ϰ', - varnothing: '∅', - varphi: 'ϕ', - varpi: 'ϖ', - varpropto: '∝', - varr: '↕', - varrho: 'ϱ', - varsigma: 'ς', - varsubsetneq: '⊊︀', - varsubsetneqq: '⫋︀', - varsupsetneq: '⊋︀', - varsupsetneqq: '⫌︀', - vartheta: 'ϑ', - vartriangleleft: '⊲', - vartriangleright: '⊳', - vcy: 'в', - vdash: '⊢', - vee: '∨', - veebar: '⊻', - veeeq: '≚', - vellip: '⋮', - verbar: '|', - vert: '|', - vfr: '𝔳', - vltri: '⊲', - vnsub: '⊂⃒', - vnsup: '⊃⃒', - vopf: '𝕧', - vprop: '∝', - vrtri: '⊳', - vscr: '𝓋', - vsubnE: '⫋︀', - vsubne: '⊊︀', - vsupnE: '⫌︀', - vsupne: '⊋︀', - vzigzag: '⦚', - wcirc: 'ŵ', - wedbar: '⩟', - wedge: '∧', - wedgeq: '≙', - weierp: '℘', - wfr: '𝔴', - wopf: '𝕨', - wp: '℘', - wr: '≀', - wreath: '≀', - wscr: '𝓌', - xcap: '⋂', - xcirc: '◯', - xcup: '⋃', - xdtri: '▽', - xfr: '𝔵', - xhArr: '⟺', - xharr: '⟷', - xi: 'ξ', - xlArr: '⟸', - xlarr: '⟵', - xmap: '⟼', - xnis: '⋻', - xodot: '⨀', - xopf: '𝕩', - xoplus: '⨁', - xotime: '⨂', - xrArr: '⟹', - xrarr: '⟶', - xscr: '𝓍', - xsqcup: '⨆', - xuplus: '⨄', - xutri: '△', - xvee: '⋁', - xwedge: '⋀', - yacute: 'ý', - yacy: 'я', - ycirc: 'ŷ', - ycy: 'ы', - yen: '¥', - yfr: '𝔶', - yicy: 'ї', - yopf: '𝕪', - yscr: '𝓎', - yucy: 'ю', - yuml: 'ÿ', - zacute: 'ź', - zcaron: 'ž', - zcy: 'з', - zdot: 'ż', - zeetrf: 'ℨ', - zeta: 'ζ', - zfr: '𝔷', - zhcy: 'ж', - zigrarr: '⇝', - zopf: '𝕫', - zscr: '𝓏', - zwj: '‍', - zwnj: '‌' -} - -;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js - - -const own = {}.hasOwnProperty - -/** - * Decode a single character reference (without the `&` or `;`). - * You probably only need this when you’re building parsers yourself that follow - * different rules compared to HTML. - * This is optimized to be tiny in browsers. - * - * @param {string} value - * `notin` (named), `#123` (deci), `#x123` (hexa). - * @returns {string|false} - * Decoded reference. - */ -function decodeNamedCharacterReference(value) { - return own.call(characterEntities, value) ? characterEntities[value] : false -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const characterReference = { - name: 'characterReference', - tokenize: tokenizeCharacterReference -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterReference(effects, ok, nok) { - const self = this - let size = 0 - /** @type {number} */ - let max - /** @type {(code: Code) => boolean} */ - let test - return start - - /** - * Start of character reference. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterReference') - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - return open - } - - /** - * After `&`, at `#` for numeric references or alphanumeric for named - * references. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 35) { - effects.enter('characterReferenceMarkerNumeric') - effects.consume(code) - effects.exit('characterReferenceMarkerNumeric') - return numeric - } - effects.enter('characterReferenceValue') - max = 31 - test = asciiAlphanumeric - return value(code) - } - - /** - * After `#`, at `x` for hexadecimals or digit for decimals. - * - * ```markdown - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function numeric(code) { - if (code === 88 || code === 120) { - effects.enter('characterReferenceMarkerHexadecimal') - effects.consume(code) - effects.exit('characterReferenceMarkerHexadecimal') - effects.enter('characterReferenceValue') - max = 6 - test = asciiHexDigit - return value - } - effects.enter('characterReferenceValue') - max = 7 - test = asciiDigit - return value(code) - } - - /** - * After markers (`&#x`, `&#`, or `&`), in value, before `;`. - * - * The character reference kind defines what and how many characters are - * allowed. - * - * ```markdown - * > | a&b - * ^^^ - * > | a{b - * ^^^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function value(code) { - if (code === 59 && size) { - const token = effects.exit('characterReferenceValue') - if ( - test === asciiAlphanumeric && - !decodeNamedCharacterReference(self.sliceSerialize(token)) - ) { - return nok(code) - } - - // To do: `markdown-rs` uses a different name: - // `CharacterReferenceMarkerSemi`. - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - effects.exit('characterReference') - return ok - } - if (test(code) && size++ < max) { - effects.consume(code) - return value - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const characterEscape = { - name: 'characterEscape', - tokenize: tokenizeCharacterEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterEscape(effects, ok, nok) { - return start - - /** - * Start of character escape. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterEscape') - effects.enter('escapeMarker') - effects.consume(code) - effects.exit('escapeMarker') - return inside - } - - /** - * After `\`, at punctuation. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - // ASCII punctuation. - if (asciiPunctuation(code)) { - effects.enter('characterEscapeValue') - effects.consume(code) - effects.exit('characterEscapeValue') - effects.exit('characterEscape') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const lineEnding = { - name: 'lineEnding', - tokenize: tokenizeLineEnding -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLineEnding(effects, ok) { - return start - - /** @type {State} */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, ok, 'linePrefix') - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - - -/** @type {Construct} */ -const labelEnd = { - name: 'labelEnd', - tokenize: tokenizeLabelEnd, - resolveTo: resolveToLabelEnd, - resolveAll: resolveAllLabelEnd -} - -/** @type {Construct} */ -const resourceConstruct = { - tokenize: tokenizeResource -} -/** @type {Construct} */ -const referenceFullConstruct = { - tokenize: tokenizeReferenceFull -} -/** @type {Construct} */ -const referenceCollapsedConstruct = { - tokenize: tokenizeReferenceCollapsed -} - -/** @type {Resolver} */ -function resolveAllLabelEnd(events) { - let index = -1 - while (++index < events.length) { - const token = events[index][1] - if ( - token.type === 'labelImage' || - token.type === 'labelLink' || - token.type === 'labelEnd' - ) { - // Remove the marker. - events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) - token.type = 'data' - index++ - } - } - return events -} - -/** @type {Resolver} */ -function resolveToLabelEnd(events, context) { - let index = events.length - let offset = 0 - /** @type {Token} */ - let token - /** @type {number | undefined} */ - let open - /** @type {number | undefined} */ - let close - /** @type {Array} */ - let media - - // Find an opening. - while (index--) { - token = events[index][1] - if (open) { - // If we see another link, or inactive link label, we’ve been here before. - if ( - token.type === 'link' || - (token.type === 'labelLink' && token._inactive) - ) { - break - } - - // Mark other link openings as inactive, as we can’t have links in - // links. - if (events[index][0] === 'enter' && token.type === 'labelLink') { - token._inactive = true - } - } else if (close) { - if ( - events[index][0] === 'enter' && - (token.type === 'labelImage' || token.type === 'labelLink') && - !token._balanced - ) { - open = index - if (token.type !== 'labelLink') { - offset = 2 - break - } - } - } else if (token.type === 'labelEnd') { - close = index - } - } - const group = { - type: events[open][1].type === 'labelLink' ? 'link' : 'image', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - const label = { - type: 'label', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[close][1].end) - } - const text = { - type: 'labelText', - start: Object.assign({}, events[open + offset + 2][1].end), - end: Object.assign({}, events[close - 2][1].start) - } - media = [ - ['enter', group, context], - ['enter', label, context] - ] - - // Opening marker. - media = push(media, events.slice(open + 1, open + offset + 3)) - - // Text open. - media = push(media, [['enter', text, context]]) - - // Always populated by defaults. - - // Between. - media = push( - media, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + offset + 4, close - 3), - context - ) - ) - - // Text close, marker close, label close. - media = push(media, [ - ['exit', text, context], - events[close - 2], - events[close - 1], - ['exit', label, context] - ]) - - // Reference, resource, or so. - media = push(media, events.slice(close + 1)) - - // Media close. - media = push(media, [['exit', group, context]]) - splice(events, open, events.length, media) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelEnd(effects, ok, nok) { - const self = this - let index = self.events.length - /** @type {Token} */ - let labelStart - /** @type {boolean} */ - let defined - - // Find an opening. - while (index--) { - if ( - (self.events[index][1].type === 'labelImage' || - self.events[index][1].type === 'labelLink') && - !self.events[index][1]._balanced - ) { - labelStart = self.events[index][1] - break - } - } - return start - - /** - * Start of label end. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ``` - * - * @type {State} - */ - function start(code) { - // If there is not an okay opening. - if (!labelStart) { - return nok(code) - } - - // If the corresponding label (link) start is marked as inactive, - // it means we’d be wrapping a link, like this: - // - // ```markdown - // > | a [b [c](d) e](f) g. - // ^ - // ``` - // - // We can’t have that, so it’s just balanced brackets. - if (labelStart._inactive) { - return labelEndNok(code) - } - defined = self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize({ - start: labelStart.end, - end: self.now() - }) - ) - ) - effects.enter('labelEnd') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelEnd') - return after - } - - /** - * After `]`. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - // Note: `markdown-rs` also parses GFM footnotes here, which for us is in - // an extension. - - // Resource (`[asd](fgh)`)? - if (code === 40) { - return effects.attempt( - resourceConstruct, - labelEndOk, - defined ? labelEndOk : labelEndNok - )(code) - } - - // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? - if (code === 91) { - return effects.attempt( - referenceFullConstruct, - labelEndOk, - defined ? referenceNotFull : labelEndNok - )(code) - } - - // Shortcut (`[asd]`) reference? - return defined ? labelEndOk(code) : labelEndNok(code) - } - - /** - * After `]`, at `[`, but not at a full reference. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function referenceNotFull(code) { - return effects.attempt( - referenceCollapsedConstruct, - labelEndOk, - labelEndNok - )(code) - } - - /** - * Done, we found something. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndOk(code) { - // Note: `markdown-rs` does a bunch of stuff here. - return ok(code) - } - - /** - * Done, it’s nothing. - * - * There was an okay opening, but we didn’t match anything. - * - * ```markdown - * > | [a](b c - * ^ - * > | [a][b c - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndNok(code) { - labelStart._balanced = true - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeResource(effects, ok, nok) { - return resourceStart - - /** - * At a resource. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceStart(code) { - effects.enter('resource') - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - return resourceBefore - } - - /** - * In resource, after `(`, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceOpen)(code) - : resourceOpen(code) - } - - /** - * In resource, after optional whitespace, at `)` or a destination. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceOpen(code) { - if (code === 41) { - return resourceEnd(code) - } - return factoryDestination( - effects, - resourceDestinationAfter, - resourceDestinationMissing, - 'resourceDestination', - 'resourceDestinationLiteral', - 'resourceDestinationLiteralMarker', - 'resourceDestinationRaw', - 'resourceDestinationString', - 32 - )(code) - } - - /** - * In resource, after destination, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceBetween)(code) - : resourceEnd(code) - } - - /** - * At invalid destination. - * - * ```markdown - * > | [a](<<) b - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationMissing(code) { - return nok(code) - } - - /** - * In resource, after destination and whitespace, at `(` or title. - * - * ```markdown - * > | [a](b ) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBetween(code) { - if (code === 34 || code === 39 || code === 40) { - return factoryTitle( - effects, - resourceTitleAfter, - nok, - 'resourceTitle', - 'resourceTitleMarker', - 'resourceTitleString' - )(code) - } - return resourceEnd(code) - } - - /** - * In resource, after title, at optional whitespace. - * - * ```markdown - * > | [a](b "c") d - * ^ - * ``` - * - * @type {State} - */ - function resourceTitleAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceEnd)(code) - : resourceEnd(code) - } - - /** - * In resource, at `)`. - * - * ```markdown - * > | [a](b) d - * ^ - * ``` - * - * @type {State} - */ - function resourceEnd(code) { - if (code === 41) { - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - effects.exit('resource') - return ok - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceFull(effects, ok, nok) { - const self = this - return referenceFull - - /** - * In a reference (full), at the `[`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFull(code) { - return factoryLabel.call( - self, - effects, - referenceFullAfter, - referenceFullMissing, - 'reference', - 'referenceMarker', - 'referenceString' - )(code) - } - - /** - * In a reference (full), after `]`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullAfter(code) { - return self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - ) - ? ok(code) - : nok(code) - } - - /** - * In reference (full) that was missing. - * - * ```markdown - * > | [a][b d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullMissing(code) { - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceCollapsed(effects, ok, nok) { - return referenceCollapsedStart - - /** - * In reference (collapsed), at `[`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedStart(code) { - // We only attempt a collapsed label if there’s a `[`. - - effects.enter('reference') - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - return referenceCollapsedOpen - } - - /** - * In reference (collapsed), at `]`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedOpen(code) { - if (code === 93) { - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - effects.exit('reference') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartImage = { - name: 'labelStartImage', - tokenize: tokenizeLabelStartImage, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartImage(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (image) start. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelImage') - effects.enter('labelImageMarker') - effects.consume(code) - effects.exit('labelImageMarker') - return open - } - - /** - * After `!`, at `[`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 91) { - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelImage') - return after - } - return nok(code) - } - - /** - * After `![`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * This is needed in because, when GFM footnotes are enabled, images never - * form when started with a `^`. - * Instead, links form: - * - * ```markdown - * ![^a](b) - * - * ![^a][b] - * - * [b]: c - * ``` - * - * ```html - *

      !^a

      - *

      !^a

      - * ``` - * - * @type {State} - */ - function after(code) { - // To do: use a new field to do this, this is still needed for - // `micromark-extension-gfm-footnote`, but the `label-start-link` - // behavior isn’t. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -function classifyCharacter(code) { - if ( - code === null || - markdownLineEndingOrSpace(code) || - unicodeWhitespace(code) - ) { - return 1 - } - if (unicodePunctuation(code)) { - return 2 - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const attention = { - name: 'attention', - tokenize: tokenizeAttention, - resolveAll: resolveAllAttention -} - -/** - * Take all events and resolve attention to emphasis or strong. - * - * @type {Resolver} - */ -function resolveAllAttention(events, context) { - let index = -1 - /** @type {number} */ - let open - /** @type {Token} */ - let group - /** @type {Token} */ - let text - /** @type {Token} */ - let openingSequence - /** @type {Token} */ - let closingSequence - /** @type {number} */ - let use - /** @type {Array} */ - let nextEvents - /** @type {number} */ - let offset - - // Walk through all events. - // - // Note: performance of this is fine on an mb of normal markdown, but it’s - // a bottleneck for malicious stuff. - while (++index < events.length) { - // Find a token that can close. - if ( - events[index][0] === 'enter' && - events[index][1].type === 'attentionSequence' && - events[index][1]._close - ) { - open = index - - // Now walk back to find an opener. - while (open--) { - // Find a token that can open the closer. - if ( - events[open][0] === 'exit' && - events[open][1].type === 'attentionSequence' && - events[open][1]._open && - // If the markers are the same: - context.sliceSerialize(events[open][1]).charCodeAt(0) === - context.sliceSerialize(events[index][1]).charCodeAt(0) - ) { - // If the opening can close or the closing can open, - // and the close size *is not* a multiple of three, - // but the sum of the opening and closing size *is* multiple of three, - // then don’t match. - if ( - (events[open][1]._close || events[index][1]._open) && - (events[index][1].end.offset - events[index][1].start.offset) % 3 && - !( - (events[open][1].end.offset - - events[open][1].start.offset + - events[index][1].end.offset - - events[index][1].start.offset) % - 3 - ) - ) { - continue - } - - // Number of markers to use from the sequence. - use = - events[open][1].end.offset - events[open][1].start.offset > 1 && - events[index][1].end.offset - events[index][1].start.offset > 1 - ? 2 - : 1 - const start = Object.assign({}, events[open][1].end) - const end = Object.assign({}, events[index][1].start) - movePoint(start, -use) - movePoint(end, use) - openingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start, - end: Object.assign({}, events[open][1].end) - } - closingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start: Object.assign({}, events[index][1].start), - end - } - text = { - type: use > 1 ? 'strongText' : 'emphasisText', - start: Object.assign({}, events[open][1].end), - end: Object.assign({}, events[index][1].start) - } - group = { - type: use > 1 ? 'strong' : 'emphasis', - start: Object.assign({}, openingSequence.start), - end: Object.assign({}, closingSequence.end) - } - events[open][1].end = Object.assign({}, openingSequence.start) - events[index][1].start = Object.assign({}, closingSequence.end) - nextEvents = [] - - // If there are more markers in the opening, add them before. - if (events[open][1].end.offset - events[open][1].start.offset) { - nextEvents = push(nextEvents, [ - ['enter', events[open][1], context], - ['exit', events[open][1], context] - ]) - } - - // Opening. - nextEvents = push(nextEvents, [ - ['enter', group, context], - ['enter', openingSequence, context], - ['exit', openingSequence, context], - ['enter', text, context] - ]) - - // Always populated by defaults. - - // Between. - nextEvents = push( - nextEvents, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + 1, index), - context - ) - ) - - // Closing. - nextEvents = push(nextEvents, [ - ['exit', text, context], - ['enter', closingSequence, context], - ['exit', closingSequence, context], - ['exit', group, context] - ]) - - // If there are more markers in the closing, add them after. - if (events[index][1].end.offset - events[index][1].start.offset) { - offset = 2 - nextEvents = push(nextEvents, [ - ['enter', events[index][1], context], - ['exit', events[index][1], context] - ]) - } else { - offset = 0 - } - splice(events, open - 1, index - open + 3, nextEvents) - index = open + nextEvents.length - offset - 2 - break - } - } - } - } - - // Remove remaining sequences. - index = -1 - while (++index < events.length) { - if (events[index][1].type === 'attentionSequence') { - events[index][1].type = 'data' - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAttention(effects, ok) { - const attentionMarkers = this.parser.constructs.attentionMarkers.null - const previous = this.previous - const before = classifyCharacter(previous) - - /** @type {NonNullable} */ - let marker - return start - - /** - * Before a sequence. - * - * ```markdown - * > | ** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - marker = code - effects.enter('attentionSequence') - return inside(code) - } - - /** - * In a sequence. - * - * ```markdown - * > | ** - * ^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - const token = effects.exit('attentionSequence') - - // To do: next major: move this to resolver, just like `markdown-rs`. - const after = classifyCharacter(code) - - // Always populated by defaults. - - const open = - !after || (after === 2 && before) || attentionMarkers.includes(code) - const close = - !before || (before === 2 && after) || attentionMarkers.includes(previous) - token._open = Boolean(marker === 42 ? open : open && (before || !close)) - token._close = Boolean(marker === 42 ? close : close && (after || !open)) - return ok(code) - } -} - -/** - * Move a point a bit. - * - * Note: `move` only works inside lines! It’s not possible to move past other - * chunks (replacement characters, tabs, or line endings). - * - * @param {Point} point - * @param {number} offset - * @returns {void} - */ -function movePoint(point, offset) { - point.column += offset - point.offset += offset - point._bufferIndex += offset -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const autolink = { - name: 'autolink', - tokenize: tokenizeAutolink -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAutolink(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of an autolink. - * - * ```markdown - * > | ab - * ^ - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('autolink') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.enter('autolinkProtocol') - return open - } - - /** - * After `<`, at protocol or atext. - * - * ```markdown - * > | ab - * ^ - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (asciiAlpha(code)) { - effects.consume(code) - return schemeOrEmailAtext - } - return emailAtext(code) - } - - /** - * At second byte of protocol or atext. - * - * ```markdown - * > | ab - * ^ - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function schemeOrEmailAtext(code) { - // ASCII alphanumeric and `+`, `-`, and `.`. - if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { - // Count the previous alphabetical from `open` too. - size = 1 - return schemeInsideOrEmailAtext(code) - } - return emailAtext(code) - } - - /** - * In ambiguous protocol or atext. - * - * ```markdown - * > | ab - * ^ - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function schemeInsideOrEmailAtext(code) { - if (code === 58) { - effects.consume(code) - size = 0 - return urlInside - } - - // ASCII alphanumeric and `+`, `-`, and `.`. - if ( - (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && - size++ < 32 - ) { - effects.consume(code) - return schemeInsideOrEmailAtext - } - size = 0 - return emailAtext(code) - } - - /** - * After protocol, in URL. - * - * ```markdown - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function urlInside(code) { - if (code === 62) { - effects.exit('autolinkProtocol') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - - // ASCII control, space, or `<`. - if (code === null || code === 32 || code === 60 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return urlInside - } - - /** - * In email atext. - * - * ```markdown - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function emailAtext(code) { - if (code === 64) { - effects.consume(code) - return emailAtSignOrDot - } - if (asciiAtext(code)) { - effects.consume(code) - return emailAtext - } - return nok(code) - } - - /** - * In label, after at-sign or dot. - * - * ```markdown - * > | ab - * ^ ^ - * ``` - * - * @type {State} - */ - function emailAtSignOrDot(code) { - return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) - } - - /** - * In label, where `.` and `>` are allowed. - * - * ```markdown - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function emailLabel(code) { - if (code === 46) { - effects.consume(code) - size = 0 - return emailAtSignOrDot - } - if (code === 62) { - // Exit, then change the token type. - effects.exit('autolinkProtocol').type = 'autolinkEmail' - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - return emailValue(code) - } - - /** - * In label, where `.` and `>` are *not* allowed. - * - * Though, this is also used in `emailLabel` to parse other values. - * - * ```markdown - * > | ab - * ^ - * ``` - * - * @type {State} - */ - function emailValue(code) { - // ASCII alphanumeric or `-`. - if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { - const next = code === 45 ? emailValue : emailLabel - effects.consume(code) - return next - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const htmlText = { - name: 'htmlText', - tokenize: tokenizeHtmlText -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlText(effects, ok, nok) { - const self = this - /** @type {NonNullable | undefined} */ - let marker - /** @type {number} */ - let index - /** @type {State} */ - let returnState - return start - - /** - * Start of HTML (text). - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('htmlText') - effects.enter('htmlTextData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | a c - * ^ - * > | a c - * ^ - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - return instruction - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagOpen - } - return nok(code) - } - - /** - * After ` | a c - * ^ - * > | a c - * ^ - * > | a &<]]> c - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - index = 0 - return cdataOpenInside - } - if (asciiAlpha(code)) { - effects.consume(code) - return declaration - } - return nok(code) - } - - /** - * In a comment, after ` | a c - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return nok(code) - } - - /** - * In comment. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function comment(code) { - if (code === null) { - return nok(code) - } - if (code === 45) { - effects.consume(code) - return commentClose - } - if (markdownLineEnding(code)) { - returnState = comment - return lineEndingBefore(code) - } - effects.consume(code) - return comment - } - - /** - * In comment, after `-`. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function commentClose(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return comment(code) - } - - /** - * In comment, after `--`. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function commentEnd(code) { - return code === 62 - ? end(code) - : code === 45 - ? commentClose(code) - : comment(code) - } - - /** - * After ` | a &<]]> b - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - return index === value.length ? cdata : cdataOpenInside - } - return nok(code) - } - - /** - * In CDATA. - * - * ```markdown - * > | a &<]]> b - * ^^^ - * ``` - * - * @type {State} - */ - function cdata(code) { - if (code === null) { - return nok(code) - } - if (code === 93) { - effects.consume(code) - return cdataClose - } - if (markdownLineEnding(code)) { - returnState = cdata - return lineEndingBefore(code) - } - effects.consume(code) - return cdata - } - - /** - * In CDATA, after `]`, at another `]`. - * - * ```markdown - * > | a &<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataClose(code) { - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In CDATA, after `]]`, at `>`. - * - * ```markdown - * > | a &<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataEnd(code) { - if (code === 62) { - return end(code) - } - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In declaration. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function declaration(code) { - if (code === null || code === 62) { - return end(code) - } - if (markdownLineEnding(code)) { - returnState = declaration - return lineEndingBefore(code) - } - effects.consume(code) - return declaration - } - - /** - * In instruction. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function instruction(code) { - if (code === null) { - return nok(code) - } - if (code === 63) { - effects.consume(code) - return instructionClose - } - if (markdownLineEnding(code)) { - returnState = instruction - return lineEndingBefore(code) - } - effects.consume(code) - return instruction - } - - /** - * In instruction, after `?`, at `>`. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function instructionClose(code) { - return code === 62 ? end(code) : instruction(code) - } - - /** - * After ` | a c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagClose - } - return nok(code) - } - - /** - * After ` | a c - * ^ - * ``` - * - * @type {State} - */ - function tagClose(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagClose - } - return tagCloseBetween(code) - } - - /** - * In closing tag, after tag name. - * - * ```markdown - * > | a
      c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseBetween(code) { - if (markdownLineEnding(code)) { - returnState = tagCloseBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagCloseBetween - } - return end(code) - } - - /** - * After ` | a c - * ^ - * ``` - * - * @type {State} - */ - function tagOpen(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagOpen - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In opening tag, after tag name. - * - * ```markdown - * > | a c - * ^ - * ``` - * - * @type {State} - */ - function tagOpenBetween(code) { - if (code === 47) { - effects.consume(code) - return end - } - - // ASCII alphabetical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return tagOpenAttributeName - } - if (markdownLineEnding(code)) { - returnState = tagOpenBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenBetween - } - return end(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | a d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeName(code) { - // ASCII alphabetical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return tagOpenAttributeName - } - return tagOpenAttributeNameAfter(code) - } - - /** - * After attribute name, before initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | a d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeNameAfter - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeNameAfter - } - return tagOpenBetween(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | a e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - marker = code - return tagOpenAttributeValueQuoted - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueBefore - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | a e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuoted(code) { - if (code === marker) { - effects.consume(code) - marker = undefined - return tagOpenAttributeValueQuotedAfter - } - if (code === null) { - return nok(code) - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueQuoted - return lineEndingBefore(code) - } - effects.consume(code) - return tagOpenAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | a e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 60 || - code === 61 || - code === 96 - ) { - return nok(code) - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the end - * of the tag. - * - * ```markdown - * > | a e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In certain circumstances of a tag where only an `>` is allowed. - * - * ```markdown - * > | a e - * ^ - * ``` - * - * @type {State} - */ - function end(code) { - if (code === 62) { - effects.consume(code) - effects.exit('htmlTextData') - effects.exit('htmlText') - return ok - } - return nok(code) - } - - /** - * At eol. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * > | a - * ``` - * - * @type {State} - */ - function lineEndingBefore(code) { - effects.exit('htmlTextData') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineEndingAfter - } - - /** - * After eol, at optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfter(code) { - // Always populated by defaults. - - return markdownSpace(code) - ? factorySpace( - effects, - lineEndingAfterPrefix, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : lineEndingAfterPrefix(code) - } - - /** - * After eol, after optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfterPrefix(code) { - effects.enter('htmlTextData') - return returnState(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartLink = { - name: 'labelStartLink', - tokenize: tokenizeLabelStartLink, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartLink(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (link) start. - * - * ```markdown - * > | a [b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelLink') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelLink') - return after - } - - /** @type {State} */ - function after(code) { - // To do: this isn’t needed in `micromark-extension-gfm-footnote`, - // remove. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const hardBreakEscape = { - name: 'hardBreakEscape', - tokenize: tokenizeHardBreakEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHardBreakEscape(effects, ok, nok) { - return start - - /** - * Start of a hard break (escape). - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('hardBreakEscape') - effects.consume(code) - return after - } - - /** - * After `\`, at eol. - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownLineEnding(code)) { - effects.exit('hardBreakEscape') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Previous} Previous - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const codeText = { - name: 'codeText', - tokenize: tokenizeCodeText, - resolve: resolveCodeText, - previous -} - -// To do: next major: don’t resolve, like `markdown-rs`. -/** @type {Resolver} */ -function resolveCodeText(events) { - let tailExitIndex = events.length - 4 - let headEnterIndex = 3 - /** @type {number} */ - let index - /** @type {number | undefined} */ - let enter - - // If we start and end with an EOL or a space. - if ( - (events[headEnterIndex][1].type === 'lineEnding' || - events[headEnterIndex][1].type === 'space') && - (events[tailExitIndex][1].type === 'lineEnding' || - events[tailExitIndex][1].type === 'space') - ) { - index = headEnterIndex - - // And we have data. - while (++index < tailExitIndex) { - if (events[index][1].type === 'codeTextData') { - // Then we have padding. - events[headEnterIndex][1].type = 'codeTextPadding' - events[tailExitIndex][1].type = 'codeTextPadding' - headEnterIndex += 2 - tailExitIndex -= 2 - break - } - } - } - - // Merge adjacent spaces and data. - index = headEnterIndex - 1 - tailExitIndex++ - while (++index <= tailExitIndex) { - if (enter === undefined) { - if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { - enter = index - } - } else if ( - index === tailExitIndex || - events[index][1].type === 'lineEnding' - ) { - events[enter][1].type = 'codeTextData' - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - tailExitIndex -= index - enter - 2 - index = enter + 2 - } - enter = undefined - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Previous} - */ -function previous(code) { - // If there is a previous code, there will always be a tail. - return ( - code !== 96 || - this.events[this.events.length - 1][1].type === 'characterEscape' - ) -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeText(effects, ok, nok) { - const self = this - let sizeOpen = 0 - /** @type {number} */ - let size - /** @type {Token} */ - let token - return start - - /** - * Start of code (text). - * - * ```markdown - * > | `a` - * ^ - * > | \`a` - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('codeText') - effects.enter('codeTextSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 96) { - effects.consume(code) - sizeOpen++ - return sequenceOpen - } - effects.exit('codeTextSequence') - return between(code) - } - - /** - * Between something and something else. - * - * ```markdown - * > | `a` - * ^^ - * ``` - * - * @type {State} - */ - function between(code) { - // EOF. - if (code === null) { - return nok(code) - } - - // To do: next major: don’t do spaces in resolve, but when compiling, - // like `markdown-rs`. - // Tabs don’t work, and virtual spaces don’t make sense. - if (code === 32) { - effects.enter('space') - effects.consume(code) - effects.exit('space') - return between - } - - // Closing fence? Could also be data. - if (code === 96) { - token = effects.enter('codeTextSequence') - size = 0 - return sequenceClose(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return between - } - - // Data. - effects.enter('codeTextData') - return data(code) - } - - /** - * In data. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if ( - code === null || - code === 32 || - code === 96 || - markdownLineEnding(code) - ) { - effects.exit('codeTextData') - return between(code) - } - effects.consume(code) - return data - } - - /** - * In closing sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - // More. - if (code === 96) { - effects.consume(code) - size++ - return sequenceClose - } - - // Done! - if (size === sizeOpen) { - effects.exit('codeTextSequence') - effects.exit('codeText') - return ok(code) - } - - // More or less accents: mark as data. - token.type = 'codeTextData' - return data(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - */ - - - - -/** @satisfies {Extension['document']} */ -const constructs_document = { - [42]: list, - [43]: list, - [45]: list, - [48]: list, - [49]: list, - [50]: list, - [51]: list, - [52]: list, - [53]: list, - [54]: list, - [55]: list, - [56]: list, - [57]: list, - [62]: blockQuote -} - -/** @satisfies {Extension['contentInitial']} */ -const contentInitial = { - [91]: definition -} - -/** @satisfies {Extension['flowInitial']} */ -const flowInitial = { - [-2]: codeIndented, - [-1]: codeIndented, - [32]: codeIndented -} - -/** @satisfies {Extension['flow']} */ -const constructs_flow = { - [35]: headingAtx, - [42]: thematicBreak, - [45]: [setextUnderline, thematicBreak], - [60]: htmlFlow, - [61]: setextUnderline, - [95]: thematicBreak, - [96]: codeFenced, - [126]: codeFenced -} - -/** @satisfies {Extension['string']} */ -const constructs_string = { - [38]: characterReference, - [92]: characterEscape -} - -/** @satisfies {Extension['text']} */ -const constructs_text = { - [-5]: lineEnding, - [-4]: lineEnding, - [-3]: lineEnding, - [33]: labelStartImage, - [38]: characterReference, - [42]: attention, - [60]: [autolink, htmlText], - [91]: labelStartLink, - [92]: [hardBreakEscape, characterEscape], - [93]: labelEnd, - [95]: attention, - [96]: codeText -} - -/** @satisfies {Extension['insideSpan']} */ -const insideSpan = { - null: [attention, resolver] -} - -/** @satisfies {Extension['attentionMarkers']} */ -const attentionMarkers = { - null: [42, 95] -} - -/** @satisfies {Extension['disable']} */ -const disable = { - null: [] -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js -/** - * @typedef {import('micromark-util-types').Create} Create - * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - */ - - - - - - - - - -/** - * @param {ParseOptions | null | undefined} [options] - * @returns {ParseContext} - */ -function parse(options) { - const settings = options || {} - const constructs = - /** @type {FullNormalizedExtension} */ - combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) - - /** @type {ParseContext} */ - const parser = { - defined: [], - lazy: {}, - constructs, - content: create(content), - document: create(document_document), - flow: create(flow), - string: create(string), - text: create(text_text) - } - return parser - - /** - * @param {InitialConstruct} initial - */ - function create(initial) { - return creator - /** @type {Create} */ - function creator(from) { - return createTokenizer(parser, initial, from) - } - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Value} Value - */ - -/** - * @callback Preprocessor - * @param {Value} value - * @param {Encoding | null | undefined} [encoding] - * @param {boolean | null | undefined} [end=false] - * @returns {Array} - */ - -const search = /[\0\t\n\r]/g - -/** - * @returns {Preprocessor} - */ -function preprocess() { - let column = 1 - let buffer = '' - /** @type {boolean | undefined} */ - let start = true - /** @type {boolean | undefined} */ - let atCarriageReturn - return preprocessor - - /** @type {Preprocessor} */ - function preprocessor(value, encoding, end) { - /** @type {Array} */ - const chunks = [] - /** @type {RegExpMatchArray | null} */ - let match - /** @type {number} */ - let next - /** @type {number} */ - let startPosition - /** @type {number} */ - let endPosition - /** @type {Code} */ - let code - - // @ts-expect-error `Buffer` does allow an encoding. - value = buffer + value.toString(encoding) - startPosition = 0 - buffer = '' - if (start) { - // To do: `markdown-rs` actually parses BOMs (byte order mark). - if (value.charCodeAt(0) === 65279) { - startPosition++ - } - start = undefined - } - while (startPosition < value.length) { - search.lastIndex = startPosition - match = search.exec(value) - endPosition = - match && match.index !== undefined ? match.index : value.length - code = value.charCodeAt(endPosition) - if (!match) { - buffer = value.slice(startPosition) - break - } - if (code === 10 && startPosition === endPosition && atCarriageReturn) { - chunks.push(-3) - atCarriageReturn = undefined - } else { - if (atCarriageReturn) { - chunks.push(-5) - atCarriageReturn = undefined - } - if (startPosition < endPosition) { - chunks.push(value.slice(startPosition, endPosition)) - column += endPosition - startPosition - } - switch (code) { - case 0: { - chunks.push(65533) - column++ - break - } - case 9: { - next = Math.ceil(column / 4) * 4 - chunks.push(-2) - while (column++ < next) chunks.push(-1) - break - } - case 10: { - chunks.push(-4) - column = 1 - break - } - default: { - atCarriageReturn = true - column = 1 - } - } - } - startPosition = endPosition + 1 - } - if (end) { - if (atCarriageReturn) chunks.push(-5) - if (buffer) chunks.push(buffer) - chunks.push(null) - } - return chunks - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js -/** - * @typedef {import('micromark-util-types').Event} Event - */ - - - -/** - * @param {Array} events - * @returns {Array} - */ -function postprocess(events) { - while (!subtokenize(events)) { - // Empty - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -function decodeNumericCharacterReference(value, base) { - const code = Number.parseInt(value, base) - if ( - // C0 except for HT, LF, FF, CR, space. - code < 9 || - code === 11 || - (code > 13 && code < 32) || - // Control character (DEL) of C0, and C1 controls. - (code > 126 && code < 160) || - // Lone high surrogates and low surrogates. - (code > 55295 && code < 57344) || - // Noncharacters. - (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || - (code & 65535) === 65535 || - (code & 65535) === 65534 /* eslint-enable no-bitwise */ || - // Out of range - code > 1114111 - ) { - return '\uFFFD' - } - return String.fromCharCode(code) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js - - -const characterEscapeOrReference = - /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi - -/** - * Decode markdown strings (which occur in places such as fenced code info - * strings, destinations, labels, and titles). - * - * The “string” content type allows character escapes and -references. - * This decodes those. - * - * @param {string} value - * Value to decode. - * @returns {string} - * Decoded value. - */ -function decodeString(value) { - return value.replace(characterEscapeOrReference, decode) -} - -/** - * @param {string} $0 - * @param {string} $1 - * @param {string} $2 - * @returns {string} - */ -function decode($0, $1, $2) { - if ($1) { - // Escape. - return $1 - } - - // Reference. - const head = $2.charCodeAt(0) - if (head === 35) { - const head = $2.charCodeAt(1) - const hex = head === 120 || head === 88 - return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) - } - return decodeNamedCharacterReference($2) || $0 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Point} Point - * @typedef {import('unist').Position} Position - */ - -/** - * @typedef NodeLike - * @property {string} type - * @property {PositionLike | null | undefined} [position] - * - * @typedef PositionLike - * @property {PointLike | null | undefined} [start] - * @property {PointLike | null | undefined} [end] - * - * @typedef PointLike - * @property {number | null | undefined} [line] - * @property {number | null | undefined} [column] - * @property {number | null | undefined} [offset] - */ - -/** - * Serialize the positional info of a point, position (start and end points), - * or node. - * - * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] - * Node, position, or point. - * @returns {string} - * Pretty printed positional info of a node (`string`). - * - * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) - * or a point `l:c` (when given `point`), where `l` stands for line, `c` for - * column, `s` for `start`, and `e` for end. - * An empty string (`''`) is returned if the given value is neither `node`, - * `position`, nor `point`. - */ -function stringifyPosition(value) { - // Nothing. - if (!value || typeof value !== 'object') { - return '' - } - - // Node. - if ('position' in value || 'type' in value) { - return position(value.position) - } - - // Position. - if ('start' in value || 'end' in value) { - return position(value) - } - - // Point. - if ('line' in value || 'column' in value) { - return point(value) - } - - // ? - return '' -} - -/** - * @param {Point | PointLike | null | undefined} point - * @returns {string} - */ -function point(point) { - return index(point && point.line) + ':' + index(point && point.column) -} - -/** - * @param {Position | PositionLike | null | undefined} pos - * @returns {string} - */ -function position(pos) { - return point(pos && pos.start) + '-' + point(pos && pos.end) -} - -/** - * @param {number | null | undefined} value - * @returns {number} - */ -function index(value) { - return value && typeof value === 'number' ? value : 1 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js -/** - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Value} Value - * - * @typedef {import('unist').Parent} UnistParent - * @typedef {import('unist').Point} Point - * - * @typedef {import('mdast').PhrasingContent} PhrasingContent - * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent - * @typedef {import('mdast').Content} Content - * @typedef {import('mdast').Break} Break - * @typedef {import('mdast').Blockquote} Blockquote - * @typedef {import('mdast').Code} Code - * @typedef {import('mdast').Definition} Definition - * @typedef {import('mdast').Emphasis} Emphasis - * @typedef {import('mdast').Heading} Heading - * @typedef {import('mdast').HTML} HTML - * @typedef {import('mdast').Image} Image - * @typedef {import('mdast').ImageReference} ImageReference - * @typedef {import('mdast').InlineCode} InlineCode - * @typedef {import('mdast').Link} Link - * @typedef {import('mdast').LinkReference} LinkReference - * @typedef {import('mdast').List} List - * @typedef {import('mdast').ListItem} ListItem - * @typedef {import('mdast').Paragraph} Paragraph - * @typedef {import('mdast').Root} Root - * @typedef {import('mdast').Strong} Strong - * @typedef {import('mdast').Text} Text - * @typedef {import('mdast').ThematicBreak} ThematicBreak - * @typedef {import('mdast').ReferenceType} ReferenceType - * @typedef {import('../index.js').CompileData} CompileData - */ - -/** - * @typedef {Root | Content} Node - * @typedef {Extract} Parent - * - * @typedef {Omit & {type: 'fragment', children: Array}} Fragment - */ - -/** - * @callback Transform - * Extra transform, to change the AST afterwards. - * @param {Root} tree - * Tree to transform. - * @returns {Root | undefined | null | void} - * New tree or nothing (in which case the current tree is used). - * - * @callback Handle - * Handle a token. - * @param {CompileContext} this - * Context. - * @param {Token} token - * Current token. - * @returns {void} - * Nothing. - * - * @typedef {Record} Handles - * Token types mapping to handles - * - * @callback OnEnterError - * Handle the case where the `right` token is open, but it is closed (by the - * `left` token) or because we reached the end of the document. - * @param {Omit} this - * Context. - * @param {Token | undefined} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @callback OnExitError - * Handle the case where the `right` token is open but it is closed by - * exiting the `left` token. - * @param {Omit} this - * Context. - * @param {Token} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @typedef {[Token, OnEnterError | undefined]} TokenTuple - * Open token on the stack, with an optional error handler for when - * that token isn’t closed properly. - */ - -/** - * @typedef Config - * Configuration. - * - * We have our defaults, but extensions will add more. - * @property {Array} canContainEols - * Token types where line endings are used. - * @property {Handles} enter - * Opening handles. - * @property {Handles} exit - * Closing handles. - * @property {Array} transforms - * Tree transforms. - * - * @typedef {Partial} Extension - * Change how markdown tokens from micromark are turned into mdast. - * - * @typedef CompileContext - * mdast compiler context. - * @property {Array} stack - * Stack of nodes. - * @property {Array} tokenStack - * Stack of tokens. - * @property {(key: Key) => CompileData[Key]} getData - * Get data from the key/value store. - * @property {(key: Key, value?: CompileData[Key]) => void} setData - * Set data into the key/value store. - * @property {(this: CompileContext) => void} buffer - * Capture some of the output data. - * @property {(this: CompileContext) => string} resume - * Stop capturing and access the output data. - * @property {(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter - * Enter a token. - * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit - * Exit a token. - * @property {TokenizeContext['sliceSerialize']} sliceSerialize - * Get the string value of a token. - * @property {Config} config - * Configuration. - * - * @typedef FromMarkdownOptions - * Configuration for how to build mdast. - * @property {Array> | null | undefined} [mdastExtensions] - * Extensions for this utility to change how tokens are turned into a tree. - * - * @typedef {ParseOptions & FromMarkdownOptions} Options - * Configuration. - */ - -// To do: micromark: create a registry of tokens? -// To do: next major: don’t return given `Node` from `enter`. -// To do: next major: remove setter/getter. - - - - - - - - - - -const lib_own = {}.hasOwnProperty - -/** - * @param value - * Markdown to parse. - * @param encoding - * Character encoding for when `value` is `Buffer`. - * @param options - * Configuration. - * @returns - * mdast tree. - */ -const fromMarkdown = - /** - * @type {( - * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & - * ((value: Value, options?: Options | null | undefined) => Root) - * )} - */ - - /** - * @param {Value} value - * @param {Encoding | Options | null | undefined} [encoding] - * @param {Options | null | undefined} [options] - * @returns {Root} - */ - function (value, encoding, options) { - if (typeof encoding !== 'string') { - options = encoding - encoding = undefined - } - return compiler(options)( - postprocess( - parse(options).document().write(preprocess()(value, encoding, true)) - ) - ) - } - -/** - * Note this compiler only understand complete buffering, not streaming. - * - * @param {Options | null | undefined} [options] - */ -function compiler(options) { - /** @type {Config} */ - const config = { - transforms: [], - canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], - enter: { - autolink: opener(link), - autolinkProtocol: onenterdata, - autolinkEmail: onenterdata, - atxHeading: opener(heading), - blockQuote: opener(blockQuote), - characterEscape: onenterdata, - characterReference: onenterdata, - codeFenced: opener(codeFlow), - codeFencedFenceInfo: buffer, - codeFencedFenceMeta: buffer, - codeIndented: opener(codeFlow, buffer), - codeText: opener(codeText, buffer), - codeTextData: onenterdata, - data: onenterdata, - codeFlowValue: onenterdata, - definition: opener(definition), - definitionDestinationString: buffer, - definitionLabelString: buffer, - definitionTitleString: buffer, - emphasis: opener(emphasis), - hardBreakEscape: opener(hardBreak), - hardBreakTrailing: opener(hardBreak), - htmlFlow: opener(html, buffer), - htmlFlowData: onenterdata, - htmlText: opener(html, buffer), - htmlTextData: onenterdata, - image: opener(image), - label: buffer, - link: opener(link), - listItem: opener(listItem), - listItemValue: onenterlistitemvalue, - listOrdered: opener(list, onenterlistordered), - listUnordered: opener(list), - paragraph: opener(paragraph), - reference: onenterreference, - referenceString: buffer, - resourceDestinationString: buffer, - resourceTitleString: buffer, - setextHeading: opener(heading), - strong: opener(strong), - thematicBreak: opener(thematicBreak) - }, - exit: { - atxHeading: closer(), - atxHeadingSequence: onexitatxheadingsequence, - autolink: closer(), - autolinkEmail: onexitautolinkemail, - autolinkProtocol: onexitautolinkprotocol, - blockQuote: closer(), - characterEscapeValue: onexitdata, - characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, - characterReferenceMarkerNumeric: onexitcharacterreferencemarker, - characterReferenceValue: onexitcharacterreferencevalue, - codeFenced: closer(onexitcodefenced), - codeFencedFence: onexitcodefencedfence, - codeFencedFenceInfo: onexitcodefencedfenceinfo, - codeFencedFenceMeta: onexitcodefencedfencemeta, - codeFlowValue: onexitdata, - codeIndented: closer(onexitcodeindented), - codeText: closer(onexitcodetext), - codeTextData: onexitdata, - data: onexitdata, - definition: closer(), - definitionDestinationString: onexitdefinitiondestinationstring, - definitionLabelString: onexitdefinitionlabelstring, - definitionTitleString: onexitdefinitiontitlestring, - emphasis: closer(), - hardBreakEscape: closer(onexithardbreak), - hardBreakTrailing: closer(onexithardbreak), - htmlFlow: closer(onexithtmlflow), - htmlFlowData: onexitdata, - htmlText: closer(onexithtmltext), - htmlTextData: onexitdata, - image: closer(onexitimage), - label: onexitlabel, - labelText: onexitlabeltext, - lineEnding: onexitlineending, - link: closer(onexitlink), - listItem: closer(), - listOrdered: closer(), - listUnordered: closer(), - paragraph: closer(), - referenceString: onexitreferencestring, - resourceDestinationString: onexitresourcedestinationstring, - resourceTitleString: onexitresourcetitlestring, - resource: onexitresource, - setextHeading: closer(onexitsetextheading), - setextHeadingLineSequence: onexitsetextheadinglinesequence, - setextHeadingText: onexitsetextheadingtext, - strong: closer(), - thematicBreak: closer() - } - } - configure(config, (options || {}).mdastExtensions || []) - - /** @type {CompileData} */ - const data = {} - return compile - - /** - * Turn micromark events into an mdast tree. - * - * @param {Array} events - * Events. - * @returns {Root} - * mdast tree. - */ - function compile(events) { - /** @type {Root} */ - let tree = { - type: 'root', - children: [] - } - /** @type {Omit} */ - const context = { - stack: [tree], - tokenStack: [], - config, - enter, - exit, - buffer, - resume, - setData, - getData - } - /** @type {Array} */ - const listStack = [] - let index = -1 - while (++index < events.length) { - // We preprocess lists to add `listItem` tokens, and to infer whether - // items the list itself are spread out. - if ( - events[index][1].type === 'listOrdered' || - events[index][1].type === 'listUnordered' - ) { - if (events[index][0] === 'enter') { - listStack.push(index) - } else { - const tail = listStack.pop() - index = prepareList(events, tail, index) - } - } - } - index = -1 - while (++index < events.length) { - const handler = config[events[index][0]] - if (lib_own.call(handler, events[index][1].type)) { - handler[events[index][1].type].call( - Object.assign( - { - sliceSerialize: events[index][2].sliceSerialize - }, - context - ), - events[index][1] - ) - } - } - - // Handle tokens still being open. - if (context.tokenStack.length > 0) { - const tail = context.tokenStack[context.tokenStack.length - 1] - const handler = tail[1] || defaultOnError - handler.call(context, undefined, tail[0]) - } - - // Figure out `root` position. - tree.position = { - start: lib_point( - events.length > 0 - ? events[0][1].start - : { - line: 1, - column: 1, - offset: 0 - } - ), - end: lib_point( - events.length > 0 - ? events[events.length - 2][1].end - : { - line: 1, - column: 1, - offset: 0 - } - ) - } - - // Call transforms. - index = -1 - while (++index < config.transforms.length) { - tree = config.transforms[index](tree) || tree - } - return tree - } - - /** - * @param {Array} events - * @param {number} start - * @param {number} length - * @returns {number} - */ - function prepareList(events, start, length) { - let index = start - 1 - let containerBalance = -1 - let listSpread = false - /** @type {Token | undefined} */ - let listItem - /** @type {number | undefined} */ - let lineIndex - /** @type {number | undefined} */ - let firstBlankLineIndex - /** @type {boolean | undefined} */ - let atMarker - while (++index <= length) { - const event = events[index] - if ( - event[1].type === 'listUnordered' || - event[1].type === 'listOrdered' || - event[1].type === 'blockQuote' - ) { - if (event[0] === 'enter') { - containerBalance++ - } else { - containerBalance-- - } - atMarker = undefined - } else if (event[1].type === 'lineEndingBlank') { - if (event[0] === 'enter') { - if ( - listItem && - !atMarker && - !containerBalance && - !firstBlankLineIndex - ) { - firstBlankLineIndex = index - } - atMarker = undefined - } - } else if ( - event[1].type === 'linePrefix' || - event[1].type === 'listItemValue' || - event[1].type === 'listItemMarker' || - event[1].type === 'listItemPrefix' || - event[1].type === 'listItemPrefixWhitespace' - ) { - // Empty. - } else { - atMarker = undefined - } - if ( - (!containerBalance && - event[0] === 'enter' && - event[1].type === 'listItemPrefix') || - (containerBalance === -1 && - event[0] === 'exit' && - (event[1].type === 'listUnordered' || - event[1].type === 'listOrdered')) - ) { - if (listItem) { - let tailIndex = index - lineIndex = undefined - while (tailIndex--) { - const tailEvent = events[tailIndex] - if ( - tailEvent[1].type === 'lineEnding' || - tailEvent[1].type === 'lineEndingBlank' - ) { - if (tailEvent[0] === 'exit') continue - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - listSpread = true - } - tailEvent[1].type = 'lineEnding' - lineIndex = tailIndex - } else if ( - tailEvent[1].type === 'linePrefix' || - tailEvent[1].type === 'blockQuotePrefix' || - tailEvent[1].type === 'blockQuotePrefixWhitespace' || - tailEvent[1].type === 'blockQuoteMarker' || - tailEvent[1].type === 'listItemIndent' - ) { - // Empty - } else { - break - } - } - if ( - firstBlankLineIndex && - (!lineIndex || firstBlankLineIndex < lineIndex) - ) { - listItem._spread = true - } - - // Fix position. - listItem.end = Object.assign( - {}, - lineIndex ? events[lineIndex][1].start : event[1].end - ) - events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) - index++ - length++ - } - - // Create a new list item. - if (event[1].type === 'listItemPrefix') { - listItem = { - type: 'listItem', - _spread: false, - start: Object.assign({}, event[1].start), - // @ts-expect-error: we’ll add `end` in a second. - end: undefined - } - // @ts-expect-error: `listItem` is most definitely defined, TS... - events.splice(index, 0, ['enter', listItem, event[2]]) - index++ - length++ - firstBlankLineIndex = undefined - atMarker = true - } - } - } - events[start][1]._spread = listSpread - return length - } - - /** - * Set data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @param {CompileData[Key]} [value] - * New value. - * @returns {void} - * Nothing. - */ - function setData(key, value) { - data[key] = value - } - - /** - * Get data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @returns {CompileData[Key]} - * Value. - */ - function getData(key) { - return data[key] - } - - /** - * Create an opener handle. - * - * @param {(token: Token) => Node} create - * Create a node. - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function opener(create, and) { - return open - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function open(token) { - enter.call(this, create(token), token) - if (and) and.call(this, token) - } - } - - /** - * @this {CompileContext} - * @returns {void} - */ - function buffer() { - this.stack.push({ - type: 'fragment', - children: [] - }) - } - - /** - * @template {Node} Kind - * Node type. - * @this {CompileContext} - * Context. - * @param {Kind} node - * Node to enter. - * @param {Token} token - * Corresponding token. - * @param {OnEnterError | undefined} [errorHandler] - * Handle the case where this token is open, but it is closed by something else. - * @returns {Kind} - * The given node. - */ - function enter(node, token, errorHandler) { - const parent = this.stack[this.stack.length - 1] - // @ts-expect-error: Assume `Node` can exist as a child of `parent`. - parent.children.push(node) - this.stack.push(node) - this.tokenStack.push([token, errorHandler]) - // @ts-expect-error: `end` will be patched later. - node.position = { - start: lib_point(token.start) - } - return node - } - - /** - * Create a closer handle. - * - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function closer(and) { - return close - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function close(token) { - if (and) and.call(this, token) - exit.call(this, token) - } - } - - /** - * @this {CompileContext} - * Context. - * @param {Token} token - * Corresponding token. - * @param {OnExitError | undefined} [onExitError] - * Handle the case where another token is open. - * @returns {Node} - * The closed node. - */ - function exit(token, onExitError) { - const node = this.stack.pop() - const open = this.tokenStack.pop() - if (!open) { - throw new Error( - 'Cannot close `' + - token.type + - '` (' + - stringifyPosition({ - start: token.start, - end: token.end - }) + - '): it’s not open' - ) - } else if (open[0].type !== token.type) { - if (onExitError) { - onExitError.call(this, token, open[0]) - } else { - const handler = open[1] || defaultOnError - handler.call(this, token, open[0]) - } - } - node.position.end = lib_point(token.end) - return node - } - - /** - * @this {CompileContext} - * @returns {string} - */ - function resume() { - return lib_toString(this.stack.pop()) - } - - // - // Handlers. - // - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistordered() { - setData('expectingFirstListItemValue', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistitemvalue(token) { - if (getData('expectingFirstListItemValue')) { - const ancestor = this.stack[this.stack.length - 2] - ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) - setData('expectingFirstListItemValue') - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfenceinfo() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.lang = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfencemeta() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.meta = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfence() { - // Exit if this is the closing fence. - if (getData('flowCodeInside')) return - this.buffer() - setData('flowCodeInside', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefenced() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') - setData('flowCodeInside') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodeindented() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/(\r?\n|\r)$/g, '') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitionlabelstring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - node.label = label - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiontitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiondestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitatxheadingsequence(token) { - const node = this.stack[this.stack.length - 1] - if (!node.depth) { - const depth = this.sliceSerialize(token).length - node.depth = depth - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadingtext() { - setData('setextHeadingSlurpLineEnding', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadinglinesequence(token) { - const node = this.stack[this.stack.length - 1] - node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheading() { - setData('setextHeadingSlurpLineEnding') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterdata(token) { - const node = this.stack[this.stack.length - 1] - let tail = node.children[node.children.length - 1] - if (!tail || tail.type !== 'text') { - // Add a new text node. - tail = text() - // @ts-expect-error: we’ll add `end` later. - tail.position = { - start: lib_point(token.start) - } - // @ts-expect-error: Assume `parent` accepts `text`. - node.children.push(tail) - } - this.stack.push(tail) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitdata(token) { - const tail = this.stack.pop() - tail.value += this.sliceSerialize(token) - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlineending(token) { - const context = this.stack[this.stack.length - 1] - // If we’re at a hard break, include the line ending in there. - if (getData('atHardBreak')) { - const tail = context.children[context.children.length - 1] - tail.position.end = lib_point(token.end) - setData('atHardBreak') - return - } - if ( - !getData('setextHeadingSlurpLineEnding') && - config.canContainEols.includes(context.type) - ) { - onenterdata.call(this, token) - onexitdata.call(this, token) - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithardbreak() { - setData('atHardBreak', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmlflow() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmltext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcodetext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlink() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitimage() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabeltext(token) { - const string = this.sliceSerialize(token) - const ancestor = this.stack[this.stack.length - 2] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - ancestor.label = decodeString(string) - // @ts-expect-error: same as above. - ancestor.identifier = normalizeIdentifier(string).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabel() { - const fragment = this.stack[this.stack.length - 1] - const value = this.resume() - const node = this.stack[this.stack.length - 1] - // Assume a reference. - setData('inReference', true) - if (node.type === 'link') { - /** @type {Array} */ - // @ts-expect-error: Assume static phrasing content. - const children = fragment.children - node.children = children - } else { - node.alt = value - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcedestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcetitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresource() { - setData('inReference') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterreference() { - setData('referenceType', 'collapsed') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitreferencestring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - node.label = label - // @ts-expect-error: same as above. - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - setData('referenceType', 'full') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcharacterreferencemarker(token) { - setData('characterReferenceType', token.type) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcharacterreferencevalue(token) { - const data = this.sliceSerialize(token) - const type = getData('characterReferenceType') - /** @type {string} */ - let value - if (type) { - value = decodeNumericCharacterReference( - data, - type === 'characterReferenceMarkerNumeric' ? 10 : 16 - ) - setData('characterReferenceType') - } else { - const result = decodeNamedCharacterReference(data) - value = result - } - const tail = this.stack.pop() - tail.value += value - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkprotocol(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = this.sliceSerialize(token) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkemail(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = 'mailto:' + this.sliceSerialize(token) - } - - // - // Creaters. - // - - /** @returns {Blockquote} */ - function blockQuote() { - return { - type: 'blockquote', - children: [] - } - } - - /** @returns {Code} */ - function codeFlow() { - return { - type: 'code', - lang: null, - meta: null, - value: '' - } - } - - /** @returns {InlineCode} */ - function codeText() { - return { - type: 'inlineCode', - value: '' - } - } - - /** @returns {Definition} */ - function definition() { - return { - type: 'definition', - identifier: '', - label: null, - title: null, - url: '' - } - } - - /** @returns {Emphasis} */ - function emphasis() { - return { - type: 'emphasis', - children: [] - } - } - - /** @returns {Heading} */ - function heading() { - // @ts-expect-error `depth` will be set later. - return { - type: 'heading', - depth: undefined, - children: [] - } - } - - /** @returns {Break} */ - function hardBreak() { - return { - type: 'break' - } - } - - /** @returns {HTML} */ - function html() { - return { - type: 'html', - value: '' - } - } - - /** @returns {Image} */ - function image() { - return { - type: 'image', - title: null, - url: '', - alt: null - } - } - - /** @returns {Link} */ - function link() { - return { - type: 'link', - title: null, - url: '', - children: [] - } - } - - /** - * @param {Token} token - * @returns {List} - */ - function list(token) { - return { - type: 'list', - ordered: token.type === 'listOrdered', - start: null, - spread: token._spread, - children: [] - } - } - - /** - * @param {Token} token - * @returns {ListItem} - */ - function listItem(token) { - return { - type: 'listItem', - spread: token._spread, - checked: null, - children: [] - } - } - - /** @returns {Paragraph} */ - function paragraph() { - return { - type: 'paragraph', - children: [] - } - } - - /** @returns {Strong} */ - function strong() { - return { - type: 'strong', - children: [] - } - } - - /** @returns {Text} */ - function text() { - return { - type: 'text', - value: '' - } - } - - /** @returns {ThematicBreak} */ - function thematicBreak() { - return { - type: 'thematicBreak' - } - } -} - -/** - * Copy a point-like value. - * - * @param {Point} d - * Point-like value. - * @returns {Point} - * unist point. - */ -function lib_point(d) { - return { - line: d.line, - column: d.column, - offset: d.offset - } -} - -/** - * @param {Config} combined - * @param {Array>} extensions - * @returns {void} - */ -function configure(combined, extensions) { - let index = -1 - while (++index < extensions.length) { - const value = extensions[index] - if (Array.isArray(value)) { - configure(combined, value) - } else { - extension(combined, value) - } - } -} - -/** - * @param {Config} combined - * @param {Extension} extension - * @returns {void} - */ -function extension(combined, extension) { - /** @type {keyof Extension} */ - let key - for (key in extension) { - if (lib_own.call(extension, key)) { - if (key === 'canContainEols') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'transforms') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'enter' || key === 'exit') { - const right = extension[key] - if (right) { - Object.assign(combined[key], right) - } - } - } - } -} - -/** @type {OnEnterError} */ -function defaultOnError(left, right) { - if (left) { - throw new Error( - 'Cannot close `' + - left.type + - '` (' + - stringifyPosition({ - start: left.start, - end: left.end - }) + - '): a different token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is open' - ) - } else { - throw new Error( - 'Cannot close document, a token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is still open' - ) - } -} - -// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js -var esm = __webpack_require__(60513); -;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-ca0c5216.js - - - -function preprocessMarkdown(markdown) { - const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); - const withoutExtraSpaces = (0,esm/* dedent */.T)(withoutMultipleNewlines); - return withoutExtraSpaces; -} -function markdownToLines(markdown) { - const preprocessedMarkdown = preprocessMarkdown(markdown); - const { children } = fromMarkdown(preprocessedMarkdown); - const lines = [[]]; - let currentLine = 0; - function processNode(node, parentType = "normal") { - if (node.type === "text") { - const textLines = node.value.split("\n"); - textLines.forEach((textLine, index) => { - if (index !== 0) { - currentLine++; - lines.push([]); - } - textLine.split(" ").forEach((word) => { - if (word) { - lines[currentLine].push({ content: word, type: parentType }); - } - }); - }); - } else if (node.type === "strong" || node.type === "emphasis") { - node.children.forEach((contentNode) => { - processNode(contentNode, node.type); - }); - } - } - children.forEach((treeNode) => { - if (treeNode.type === "paragraph") { - treeNode.children.forEach((contentNode) => { - processNode(contentNode); - }); - } - }); - return lines; -} -function markdownToHTML(markdown) { - const { children } = fromMarkdown(markdown); - function output(node) { - if (node.type === "text") { - return node.value.replace(/\n/g, "
      "); - } else if (node.type === "strong") { - return `${node.children.map(output).join("")}`; - } else if (node.type === "emphasis") { - return `${node.children.map(output).join("")}`; - } else if (node.type === "paragraph") { - return `

      ${node.children.map(output).join("")}

      `; - } - return `Unsupported markdown: ${node.type}`; - } - return children.map(output).join(""); -} -function splitTextToChars(text) { - if (Intl.Segmenter) { - return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); - } - return [...text]; -} -function splitWordToFitWidth(checkFit, word) { - const characters = splitTextToChars(word.content); - return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); -} -function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { - if (remainingChars.length === 0) { - return [ - { content: usedChars.join(""), type }, - { content: "", type } - ]; - } - const [nextChar, ...rest] = remainingChars; - const newWord = [...usedChars, nextChar]; - if (checkFit([{ content: newWord.join(""), type }])) { - return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); - } - if (usedChars.length === 0 && nextChar) { - usedChars.push(nextChar); - remainingChars.shift(); - } - return [ - { content: usedChars.join(""), type }, - { content: remainingChars.join(""), type } - ]; -} -function splitLineToFitWidth(line, checkFit) { - if (line.some(({ content }) => content.includes("\n"))) { - throw new Error("splitLineToFitWidth does not support newlines in the line"); - } - return splitLineToFitWidthRecursion(line, checkFit); -} -function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { - if (words.length === 0) { - if (newLine.length > 0) { - lines.push(newLine); - } - return lines.length > 0 ? lines : []; - } - let joiner = ""; - if (words[0].content === " ") { - joiner = " "; - words.shift(); - } - const nextWord = words.shift() ?? { content: " ", type: "normal" }; - const lineWithNextWord = [...newLine]; - if (joiner !== "") { - lineWithNextWord.push({ content: joiner, type: "normal" }); - } - lineWithNextWord.push(nextWord); - if (checkFit(lineWithNextWord)) { - return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); - } - if (newLine.length > 0) { - lines.push(newLine); - words.unshift(nextWord); - } else if (nextWord.content) { - const [line, rest] = splitWordToFitWidth(checkFit, nextWord); - lines.push([line]); - if (rest.content) { - words.unshift(rest); - } - } - return splitLineToFitWidthRecursion(words, checkFit, lines); -} -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlSpan(element, node, width, classes, addBackground = false) { - const fo = element.append("foreignObject"); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - ` - " + label + "" - ); - applyStyle(div, node.labelStyle); - div.style("display", "table-cell"); - div.style("white-space", "nowrap"); - div.style("max-width", width + "px"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - if (addBackground) { - div.attr("class", "labelBkg"); - } - let bbox = div.node().getBoundingClientRect(); - if (bbox.width === width) { - div.style("display", "table"); - div.style("white-space", "break-spaces"); - div.style("width", width + "px"); - bbox = div.node().getBoundingClientRect(); - } - fo.style("width", bbox.width); - fo.style("height", bbox.height); - return fo.node(); -} -function createTspan(textElement, lineIndex, lineHeight) { - return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); -} -function computeWidthOfText(parentNode, lineHeight, line) { - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, line); - const textLength = testSpan.node().getComputedTextLength(); - testElement.remove(); - return textLength; -} -function computeDimensionOfText(parentNode, lineHeight, text) { - var _a; - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); - const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); - if (textDimension) { - testElement.remove(); - } - return textDimension; -} -function createFormattedText(width, g, structuredText, addBackground = false) { - const lineHeight = 1.1; - const labelGroup = g.append("g"); - const bkg = labelGroup.insert("rect").attr("class", "background"); - const textElement = labelGroup.append("text").attr("y", "-10.1"); - let lineIndex = 0; - for (const line of structuredText) { - const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; - const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); - for (const preparedLine of linesUnderWidth) { - const tspan = createTspan(textElement, lineIndex, lineHeight); - updateTextContentAndStyles(tspan, preparedLine); - lineIndex++; - } - } - if (addBackground) { - const bbox = textElement.node().getBBox(); - const padding = 2; - bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); - return labelGroup.node(); - } else { - return textElement.node(); - } -} -function updateTextContentAndStyles(tspan, wrappedLine) { - tspan.text(""); - wrappedLine.forEach((word, index) => { - const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); - if (index === 0) { - innerTspan.text(word.content); - } else { - innerTspan.text(" " + word.content); - } - }); -} -const createText = (el, text = "", { - style = "", - isTitle = false, - classes = "", - useHtmlLabels = true, - isNode = true, - width = 200, - addSvgBackground = false -} = {}) => { - mermaid_6dc72991.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); - if (useHtmlLabels) { - const htmlText = markdownToHTML(text); - const node = { - isNode, - label: (0,mermaid_6dc72991.M)(htmlText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `` - ), - labelStyle: style.replace("fill:", "color:") - }; - const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); - return vertexNode; - } else { - const structuredText = markdownToLines(text); - const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); - return svgLabel; - } -}; - - - -/***/ }), - -/***/ 99309: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99702); -/* harmony import */ var cytoscape__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(44726); -/* harmony import */ var cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43457); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(26312); -/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(18897); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(3219); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(78041); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(75263); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99418); - - - - - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 4], $V1 = [1, 13], $V2 = [1, 12], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 20], $V6 = [1, 19], $V7 = [6, 7, 8], $V8 = [1, 26], $V9 = [1, 24], $Va = [1, 25], $Vb = [6, 7, 11], $Vc = [1, 6, 13, 15, 16, 19, 22], $Vd = [1, 33], $Ve = [1, 34], $Vf = [1, 6, 7, 11, 13, 15, 16, 19, 22]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "mindMap": 4, "spaceLines": 5, "SPACELINE": 6, "NL": 7, "MINDMAP": 8, "document": 9, "stop": 10, "EOF": 11, "statement": 12, "SPACELIST": 13, "node": 14, "ICON": 15, "CLASS": 16, "nodeWithId": 17, "nodeWithoutId": 18, "NODE_DSTART": 19, "NODE_DESCR": 20, "NODE_DEND": 21, "NODE_ID": 22, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 6: "SPACELINE", 7: "NL", 8: "MINDMAP", 11: "EOF", 13: "SPACELIST", 15: "ICON", 16: "CLASS", 19: "NODE_DSTART", 20: "NODE_DESCR", 21: "NODE_DEND", 22: "NODE_ID" }, - productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 2], [12, 2], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [14, 1], [14, 1], [18, 3], [17, 1], [17, 4]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 6: - case 7: - return yy; - case 8: - yy.getLogger().trace("Stop NL "); - break; - case 9: - yy.getLogger().trace("Stop EOF "); - break; - case 11: - yy.getLogger().trace("Stop NL2 "); - break; - case 12: - yy.getLogger().trace("Stop EOF2 "); - break; - case 15: - yy.getLogger().info("Node: ", $$[$0].id); - yy.addNode($$[$0 - 1].length, $$[$0].id, $$[$0].descr, $$[$0].type); - break; - case 16: - yy.getLogger().trace("Icon: ", $$[$0]); - yy.decorateNode({ icon: $$[$0] }); - break; - case 17: - case 21: - yy.decorateNode({ class: $$[$0] }); - break; - case 18: - yy.getLogger().trace("SPACELIST"); - break; - case 19: - yy.getLogger().trace("Node: ", $$[$0].id); - yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type); - break; - case 20: - yy.decorateNode({ icon: $$[$0] }); - break; - case 25: - yy.getLogger().trace("node found ..", $$[$0 - 2]); - this.$ = { id: $$[$0 - 1], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; - break; - case 26: - this.$ = { id: $$[$0], descr: $$[$0], type: yy.nodeType.DEFAULT }; - break; - case 27: - yy.getLogger().trace("node found ..", $$[$0 - 3]); - this.$ = { id: $$[$0 - 3], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; - break; - } - }, - table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($V7, [2, 3]), { 1: [2, 2] }, o($V7, [2, 4]), o($V7, [2, 5]), { 1: [2, 6], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V1, 9: 22, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V8, 7: $V9, 10: 23, 11: $Va }, o($Vb, [2, 22], { 17: 17, 18: 18, 14: 27, 15: [1, 28], 16: [1, 29], 19: $V5, 22: $V6 }), o($Vb, [2, 18]), o($Vb, [2, 19]), o($Vb, [2, 20]), o($Vb, [2, 21]), o($Vb, [2, 23]), o($Vb, [2, 24]), o($Vb, [2, 26], { 19: [1, 30] }), { 20: [1, 31] }, { 6: $V8, 7: $V9, 10: 32, 11: $Va }, { 1: [2, 7], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($Vc, [2, 14], { 7: $Vd, 11: $Ve }), o($Vf, [2, 8]), o($Vf, [2, 9]), o($Vf, [2, 10]), o($Vb, [2, 15]), o($Vb, [2, 16]), o($Vb, [2, 17]), { 20: [1, 35] }, { 21: [1, 36] }, o($Vc, [2, 13], { 7: $Vd, 11: $Ve }), o($Vf, [2, 11]), o($Vf, [2, 12]), { 21: [1, 37] }, o($Vb, [2, 25]), o($Vb, [2, 27])], - defaultActions: { 2: [2, 1], 6: [2, 2] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - yy.getLogger().trace("Found comment", yy_.yytext); - return 6; - case 1: - return 8; - case 2: - this.begin("CLASS"); - break; - case 3: - this.popState(); - return 16; - case 4: - this.popState(); - break; - case 5: - yy.getLogger().trace("Begin icon"); - this.begin("ICON"); - break; - case 6: - yy.getLogger().trace("SPACELINE"); - return 6; - case 7: - return 7; - case 8: - return 15; - case 9: - yy.getLogger().trace("end icon"); - this.popState(); - break; - case 10: - yy.getLogger().trace("Exploding node"); - this.begin("NODE"); - return 19; - case 11: - yy.getLogger().trace("Cloud"); - this.begin("NODE"); - return 19; - case 12: - yy.getLogger().trace("Explosion Bang"); - this.begin("NODE"); - return 19; - case 13: - yy.getLogger().trace("Cloud Bang"); - this.begin("NODE"); - return 19; - case 14: - this.begin("NODE"); - return 19; - case 15: - this.begin("NODE"); - return 19; - case 16: - this.begin("NODE"); - return 19; - case 17: - this.begin("NODE"); - return 19; - case 18: - return 13; - case 19: - return 22; - case 20: - return 11; - case 21: - this.begin("NSTR2"); - break; - case 22: - return "NODE_DESCR"; - case 23: - this.popState(); - break; - case 24: - yy.getLogger().trace("Starting NSTR"); - this.begin("NSTR"); - break; - case 25: - yy.getLogger().trace("description:", yy_.yytext); - return "NODE_DESCR"; - case 26: - this.popState(); - break; - case 27: - this.popState(); - yy.getLogger().trace("node end ))"); - return "NODE_DEND"; - case 28: - this.popState(); - yy.getLogger().trace("node end )"); - return "NODE_DEND"; - case 29: - this.popState(); - yy.getLogger().trace("node end ...", yy_.yytext); - return "NODE_DEND"; - case 30: - this.popState(); - yy.getLogger().trace("node end (("); - return "NODE_DEND"; - case 31: - this.popState(); - yy.getLogger().trace("node end (-"); - return "NODE_DEND"; - case 32: - this.popState(); - yy.getLogger().trace("node end (-"); - return "NODE_DEND"; - case 33: - this.popState(); - yy.getLogger().trace("node end (("); - return "NODE_DEND"; - case 34: - this.popState(); - yy.getLogger().trace("node end (("); - return "NODE_DEND"; - case 35: - yy.getLogger().trace("Long description:", yy_.yytext); - return 20; - case 36: - yy.getLogger().trace("Long description:", yy_.yytext); - return 20; - } - }, - rules: [/^(?:\s*%%.*)/i, /^(?:mindmap\b)/i, /^(?::::)/i, /^(?:.+)/i, /^(?:\n)/i, /^(?:::icon\()/i, /^(?:[\s]+[\n])/i, /^(?:[\n]+)/i, /^(?:[^\)]+)/i, /^(?:\))/i, /^(?:-\))/i, /^(?:\(-)/i, /^(?:\)\))/i, /^(?:\))/i, /^(?:\(\()/i, /^(?:\{\{)/i, /^(?:\()/i, /^(?:\[)/i, /^(?:[\s]+)/i, /^(?:[^\(\[\n\)\{\}]+)/i, /^(?:$)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:[^"]+)/i, /^(?:["])/i, /^(?:[\)]\))/i, /^(?:[\)])/i, /^(?:[\]])/i, /^(?:\}\})/i, /^(?:\(-)/i, /^(?:-\))/i, /^(?:\(\()/i, /^(?:\()/i, /^(?:[^\)\]\(\}]+)/i, /^(?:.+(?!\(\())/i], - conditions: { "CLASS": { "rules": [3, 4], "inclusive": false }, "ICON": { "rules": [8, 9], "inclusive": false }, "NSTR2": { "rules": [22, 23], "inclusive": false }, "NSTR": { "rules": [25, 26], "inclusive": false }, "NODE": { "rules": [21, 24, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -let nodes = []; -let cnt = 0; -let elements = {}; -const clear = () => { - nodes = []; - cnt = 0; - elements = {}; -}; -const getParent = function(level) { - for (let i = nodes.length - 1; i >= 0; i--) { - if (nodes[i].level < level) { - return nodes[i]; - } - } - return null; -}; -const getMindmap = () => { - return nodes.length > 0 ? nodes[0] : null; -}; -const addNode = (level, id, descr, type) => { - var _a, _b; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("addNode", level, id, descr, type); - const conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)(); - let padding = ((_a = conf.mindmap) == null ? void 0 : _a.padding) ?? _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.B.mindmap.padding; - switch (type) { - case nodeType.ROUNDED_RECT: - case nodeType.RECT: - case nodeType.HEXAGON: - padding *= 2; - } - const node = { - id: cnt++, - nodeId: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.d)(id, conf), - level, - descr: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.d)(descr, conf), - type, - children: [], - width: ((_b = conf.mindmap) == null ? void 0 : _b.maxNodeWidth) ?? _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.B.mindmap.maxNodeWidth, - padding - }; - const parent = getParent(level); - if (parent) { - parent.children.push(node); - nodes.push(node); - } else { - if (nodes.length === 0) { - nodes.push(node); - } else { - throw new Error( - 'There can be only one root. No parent could be found for ("' + node.descr + '")' - ); - } - } -}; -const nodeType = { - DEFAULT: 0, - NO_BORDER: 0, - ROUNDED_RECT: 1, - RECT: 2, - CIRCLE: 3, - CLOUD: 4, - BANG: 5, - HEXAGON: 6 -}; -const getType = (startStr, endStr) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("In get type", startStr, endStr); - switch (startStr) { - case "[": - return nodeType.RECT; - case "(": - return endStr === ")" ? nodeType.ROUNDED_RECT : nodeType.CLOUD; - case "((": - return nodeType.CIRCLE; - case ")": - return nodeType.CLOUD; - case "))": - return nodeType.BANG; - case "{{": - return nodeType.HEXAGON; - default: - return nodeType.DEFAULT; - } -}; -const setElementForId = (id, element) => { - elements[id] = element; -}; -const decorateNode = (decoration) => { - if (!decoration) { - return; - } - const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)(); - const node = nodes[nodes.length - 1]; - if (decoration.icon) { - node.icon = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.d)(decoration.icon, config); - } - if (decoration.class) { - node.class = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.d)(decoration.class, config); - } -}; -const type2Str = (type) => { - switch (type) { - case nodeType.DEFAULT: - return "no-border"; - case nodeType.RECT: - return "rect"; - case nodeType.ROUNDED_RECT: - return "rounded-rect"; - case nodeType.CIRCLE: - return "circle"; - case nodeType.CLOUD: - return "cloud"; - case nodeType.BANG: - return "bang"; - case nodeType.HEXAGON: - return "hexgon"; - default: - return "no-border"; - } -}; -const getLogger = () => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l; -const getElementById = (id) => elements[id]; -const db = { - clear, - addNode, - getMindmap, - nodeType, - getType, - setElementForId, - decorateNode, - type2Str, - getLogger, - getElementById -}; -const db$1 = db; -const MAX_SECTIONS = 12; -const defaultBkg = function(db2, elem, node, section) { - const rd = 5; - elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr( - "d", - `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` - ); - elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); -}; -const rectBkg = function(db2, elem, node) { - elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr("height", node.height).attr("width", node.width); -}; -const cloudBkg = function(db2, elem, node) { - const w = node.width; - const h = node.height; - const r1 = 0.15 * w; - const r2 = 0.25 * w; - const r3 = 0.35 * w; - const r4 = 0.2 * w; - elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr( - "d", - `M0 0 a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1} - a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1} - a${r2},${r2} 1 0,1 ${w * 0.35},${1 * w * 0.2} - - a${r1},${r1} 1 0,1 ${w * 0.15},${1 * h * 0.35} - a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${1 * h * 0.65} - - a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15} - a${r3},${r3} 1 0,1 ${-1 * w * 0.5},${0} - a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15} - - a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35} - a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65} - - H0 V0 Z` - ); -}; -const bangBkg = function(db2, elem, node) { - const w = node.width; - const h = node.height; - const r = 0.15 * w; - elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr( - "d", - `M0 0 a${r},${r} 1 0,0 ${w * 0.25},${-1 * h * 0.1} - a${r},${r} 1 0,0 ${w * 0.25},${0} - a${r},${r} 1 0,0 ${w * 0.25},${0} - a${r},${r} 1 0,0 ${w * 0.25},${1 * h * 0.1} - - a${r},${r} 1 0,0 ${w * 0.15},${1 * h * 0.33} - a${r * 0.8},${r * 0.8} 1 0,0 ${0},${1 * h * 0.34} - a${r},${r} 1 0,0 ${-1 * w * 0.15},${1 * h * 0.33} - - a${r},${r} 1 0,0 ${-1 * w * 0.25},${h * 0.15} - a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} - a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} - a${r},${r} 1 0,0 ${-1 * w * 0.25},${-1 * h * 0.15} - - a${r},${r} 1 0,0 ${-1 * w * 0.1},${-1 * h * 0.33} - a${r * 0.8},${r * 0.8} 1 0,0 ${0},${-1 * h * 0.34} - a${r},${r} 1 0,0 ${w * 0.1},${-1 * h * 0.33} - - H0 V0 Z` - ); -}; -const circleBkg = function(db2, elem, node) { - elem.append("circle").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr("r", node.width / 2); -}; -function insertPolygonShape(parent, w, h, points, node) { - return parent.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ).attr("transform", "translate(" + (node.width - w) / 2 + ", " + h + ")"); -} -const hexagonBkg = function(_db, elem, node) { - const h = node.height; - const f = 4; - const m = h / f; - const w = node.width - node.padding + 2 * m; - const points = [ - { x: m, y: 0 }, - { x: w - m, y: 0 }, - { x: w, y: -h / 2 }, - { x: w - m, y: -h }, - { x: m, y: -h }, - { x: 0, y: -h / 2 } - ]; - insertPolygonShape(elem, w, h, points, node); -}; -const roundedRectBkg = function(db2, elem, node) { - elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr("height", node.height).attr("rx", node.padding).attr("ry", node.padding).attr("width", node.width); -}; -const drawNode = function(db2, elem, node, fullSection, conf) { - const htmlLabels = conf.htmlLabels; - const section = fullSection % (MAX_SECTIONS - 1); - const nodeElem = elem.append("g"); - node.section = section; - let sectionClass = "section-" + section; - if (section < 0) { - sectionClass += " section-root"; - } - nodeElem.attr("class", (node.class ? node.class + " " : "") + "mindmap-node " + sectionClass); - const bkgElem = nodeElem.append("g"); - const textElem = nodeElem.append("g"); - const description = node.descr.replace(/()/g, "\n"); - (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_7__.a)(textElem, description, { - useHtmlLabels: htmlLabels, - width: node.width, - classes: "mindmap-node-label" - }); - if (!htmlLabels) { - textElem.attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle"); - } - const bbox = textElem.node().getBBox(); - const [fontSize] = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.D)(conf.fontSize); - node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; - node.width = bbox.width + 2 * node.padding; - if (node.icon) { - if (node.type === db2.nodeType.CIRCLE) { - node.height += 50; - node.width += 50; - const icon = nodeElem.append("foreignObject").attr("height", "50px").attr("width", node.width).attr("style", "text-align: center;"); - icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); - textElem.attr( - "transform", - "translate(" + node.width / 2 + ", " + (node.height / 2 - 1.5 * node.padding) + ")" - ); - } else { - node.width += 50; - const orgHeight = node.height; - node.height = Math.max(orgHeight, 60); - const heightDiff = Math.abs(node.height - orgHeight); - const icon = nodeElem.append("foreignObject").attr("width", "60px").attr("height", node.height).attr("style", "text-align: center;margin-top:" + heightDiff / 2 + "px;"); - icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); - textElem.attr( - "transform", - "translate(" + (25 + node.width / 2) + ", " + (heightDiff / 2 + node.padding / 2) + ")" - ); - } - } else { - if (!htmlLabels) { - const dx = node.width / 2; - const dy = node.padding / 2; - textElem.attr("transform", "translate(" + dx + ", " + dy + ")"); - } else { - const dx = (node.width - bbox.width) / 2; - const dy = (node.height - bbox.height) / 2; - textElem.attr("transform", "translate(" + dx + ", " + dy + ")"); - } - } - switch (node.type) { - case db2.nodeType.DEFAULT: - defaultBkg(db2, bkgElem, node, section); - break; - case db2.nodeType.ROUNDED_RECT: - roundedRectBkg(db2, bkgElem, node); - break; - case db2.nodeType.RECT: - rectBkg(db2, bkgElem, node); - break; - case db2.nodeType.CIRCLE: - bkgElem.attr("transform", "translate(" + node.width / 2 + ", " + +node.height / 2 + ")"); - circleBkg(db2, bkgElem, node); - break; - case db2.nodeType.CLOUD: - cloudBkg(db2, bkgElem, node); - break; - case db2.nodeType.BANG: - bangBkg(db2, bkgElem, node); - break; - case db2.nodeType.HEXAGON: - hexagonBkg(db2, bkgElem, node); - break; - } - db2.setElementForId(node.id, nodeElem); - return node.height; -}; -const positionNode = function(db2, node) { - const nodeElem = db2.getElementById(node.id); - const x = node.x || 0; - const y = node.y || 0; - nodeElem.attr("transform", "translate(" + x + "," + y + ")"); -}; -cytoscape__WEBPACK_IMPORTED_MODULE_0__.use(cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_1__); -function drawNodes(db2, svg, mindmap, section, conf) { - drawNode(db2, svg, mindmap, section, conf); - if (mindmap.children) { - mindmap.children.forEach((child, index) => { - drawNodes(db2, svg, child, section < 0 ? index : section, conf); - }); - } -} -function drawEdges(edgesEl, cy) { - cy.edges().map((edge, id) => { - const data = edge.data(); - if (edge[0]._private.bodyBounds) { - const bounds = edge[0]._private.rscratch; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.trace("Edge: ", id, data); - edgesEl.insert("path").attr( - "d", - `M ${bounds.startX},${bounds.startY} L ${bounds.midX},${bounds.midY} L${bounds.endX},${bounds.endY} ` - ).attr("class", "edge section-edge-" + data.section + " edge-depth-" + data.depth); - } - }); -} -function addNodes(mindmap, cy, conf, level) { - cy.add({ - group: "nodes", - data: { - id: mindmap.id.toString(), - labelText: mindmap.descr, - height: mindmap.height, - width: mindmap.width, - level, - nodeId: mindmap.id, - padding: mindmap.padding, - type: mindmap.type - }, - position: { - x: mindmap.x, - y: mindmap.y - } - }); - if (mindmap.children) { - mindmap.children.forEach((child) => { - addNodes(child, cy, conf, level + 1); - cy.add({ - group: "edges", - data: { - id: `${mindmap.id}_${child.id}`, - source: mindmap.id, - target: child.id, - depth: level, - section: child.section - } - }); - }); - } -} -function layoutMindmap(node, conf) { - return new Promise((resolve) => { - const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_2__/* .select */ .Ltv)("body").append("div").attr("id", "cy").attr("style", "display:none"); - const cy = cytoscape__WEBPACK_IMPORTED_MODULE_0__({ - container: document.getElementById("cy"), - // container to render in - style: [ - { - selector: "edge", - style: { - "curve-style": "bezier" - } - } - ] - }); - renderEl.remove(); - addNodes(node, cy, conf, 0); - cy.nodes().forEach(function(n) { - n.layoutDimensions = () => { - const data = n.data(); - return { w: data.width, h: data.height }; - }; - }); - cy.layout({ - name: "cose-bilkent", - // @ts-ignore Types for cose-bilkent are not correct? - quality: "proof", - styleEnabled: false, - animate: false - }).run(); - cy.ready((e) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Ready", e); - resolve(cy); - }); - }); -} -function positionNodes(db2, cy) { - cy.nodes().map((node, id) => { - const data = node.data(); - data.x = node.position().x; - data.y = node.position().y; - positionNode(db2, data); - const el = db2.getElementById(data.nodeId); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Id:", id, "Position: (", node.position().x, ", ", node.position().y, ")", data); - el.attr( - "transform", - `translate(${node.position().x - data.width / 2}, ${node.position().y - data.height / 2})` - ); - el.attr("attr", `apa-${id})`); - }); -} -const draw = async (text, id, _version, diagObj) => { - var _a, _b; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering mindmap diagram\n" + text); - const db2 = diagObj.db; - const mm = db2.getMindmap(); - if (!mm) { - return; - } - const conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)(); - conf.htmlLabels = false; - const svg = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.A)(id); - const edgesElem = svg.append("g"); - edgesElem.attr("class", "mindmap-edges"); - const nodesElem = svg.append("g"); - nodesElem.attr("class", "mindmap-nodes"); - drawNodes(db2, nodesElem, mm, -1, conf); - const cy = await layoutMindmap(mm, conf); - drawEdges(edgesElem, cy); - positionNodes(db2, cy); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.o)( - void 0, - svg, - ((_a = conf.mindmap) == null ? void 0 : _a.padding) ?? _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.B.mindmap.padding, - ((_b = conf.mindmap) == null ? void 0 : _b.useMaxWidth) ?? _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.B.mindmap.useMaxWidth - ); -}; -const renderer = { - draw -}; -const genSections = (options) => { - let sections = ""; - for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { - options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; - if ((0,khroma__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(options["lineColor" + i])) { - options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(options["lineColor" + i], 20); - } else { - options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .A)(options["lineColor" + i], 20); - } - } - for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { - const sw = "" + (17 - 3 * i); - sections += ` - .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} polygon, .section-${i - 1} path { - fill: ${options["cScale" + i]}; - } - .section-${i - 1} text { - fill: ${options["cScaleLabel" + i]}; - } - .node-icon-${i - 1} { - font-size: 40px; - color: ${options["cScaleLabel" + i]}; - } - .section-edge-${i - 1}{ - stroke: ${options["cScale" + i]}; - } - .edge-depth-${i - 1}{ - stroke-width: ${sw}; - } - .section-${i - 1} line { - stroke: ${options["cScaleInv" + i]} ; - stroke-width: 3; - } - - .disabled, .disabled circle, .disabled text { - fill: lightgray; - } - .disabled text { - fill: #efefef; - } - `; - } - return sections; -}; -const getStyles = (options) => ` - .edge { - stroke-width: 3; - } - ${genSections(options)} - .section-root rect, .section-root path, .section-root circle, .section-root polygon { - fill: ${options.git0}; - } - .section-root text { - fill: ${options.gitBranchLabel0}; - } - .icon-container { - height:100%; - display: flex; - justify-content: center; - align-items: center; - } - .edge { - fill: none; - } - .mindmap-node-label { - dy: 1em; - alignment-baseline: middle; - text-anchor: middle; - dominant-baseline: middle; - text-align: center; - } -`; -const styles = getStyles; -const diagram = { - db: db$1, - renderer, - parser: parser$1, - styles -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/31570a90.2a22eeaa.js b/pr-preview/pr-1594/assets/js/31570a90.2a22eeaa.js deleted file mode 100644 index 8a4ee2daf8..0000000000 --- a/pr-preview/pr-1594/assets/js/31570a90.2a22eeaa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1181],{64939:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>h});var n=i(74848),s=i(28453),a=i(61114);const r={sidebar_position:6},o="Web application",l={id:"concepts/web-app",title:"Web application",description:"Flow's web application is at dashboard.estuary.dev.",source:"@site/docs/concepts/web-app.md",sourceDirName:"concepts",slug:"/concepts/web-app",permalink:"/pr-preview/pr-1594/concepts/web-app",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/web-app.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Derivations",permalink:"/pr-preview/pr-1594/concepts/derivations"},next:{title:"flowctl",permalink:"/pr-preview/pr-1594/concepts/flowctl"}},c={},h=[{value:"When to use the web app",id:"when-to-use-the-web-app",level:2},{value:"Signing in",id:"signing-in",level:2},{value:"Navigating the web app",id:"navigating-the-web-app",level:2},{value:"Captures page",id:"captures-page",level:2},{value:"Editing captures and collections",id:"editing-captures-and-collections",level:3},{value:"Creating a capture",id:"creating-a-capture",level:3},{value:"Collections page",id:"collections-page",level:2},{value:"Materializations page",id:"materializations-page",level:2},{value:"Editing materializations",id:"editing-materializations",level:3},{value:"Creating a materialization",id:"creating-a-materialization",level:3},{value:"Capture Details page",id:"capture-details-page",level:2},{value:"Overview Tab",id:"overview-tab",level:3},{value:"Spec Tab",id:"spec-tab",level:3},{value:"Collection Details page",id:"collection-details-page",level:2},{value:"Overview Tab",id:"overview-tab-1",level:3},{value:"Spec Tab",id:"spec-tab-1",level:3},{value:"Materialization Details Page",id:"materialization-details-page",level:2},{value:"Overview Tab",id:"overview-tab-2",level:3},{value:"Spec Tab",id:"spec-tab-2",level:3},{value:"Admin page",id:"admin-page",level:2},{value:"Users",id:"users",level:4},{value:"Storage Mappings",id:"storage-mappings",level:4},{value:"Connectors",id:"connectors",level:4},{value:"CLI-API",id:"cli-api",level:4},{value:"Cookie Preferences",id:"cookie-preferences",level:4}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"web-application",children:"Web application"}),"\n",(0,n.jsxs)(t.p,{children:["Flow's web application is at ",(0,n.jsx)(t.a,{href:"https://dashboard.estuary.dev",children:"dashboard.estuary.dev"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"The web app is the central, low-code environment for creating, managing, and monitoring Data Flows."}),"\n",(0,n.jsx)(t.h2,{id:"when-to-use-the-web-app",children:"When to use the web app"}),"\n",(0,n.jsxs)(t.p,{children:["The web app and ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/flowctl",children:"flowctl"})," are designed to work together as a complete platform.\nYou can use either, or both, to work on your Data Flows, depending on your preference."]}),"\n",(0,n.jsx)(t.p,{children:"With the Flow web app, you can perform most common workflows, including:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Creating end-to-end Data Flows: ",(0,n.jsx)(t.strong,{children:"capturing"})," data from source systems and ",(0,n.jsx)(t.strong,{children:"materializing"})," it to destinations."]}),"\n",(0,n.jsx)(t.li,{children:"Creating, viewing, and editing individual captures and materializations."}),"\n",(0,n.jsx)(t.li,{children:"Monitor the amount of data being processed by the system."}),"\n",(0,n.jsxs)(t.li,{children:["Viewing data ",(0,n.jsx)(t.strong,{children:"collections"}),"."]}),"\n",(0,n.jsx)(t.li,{children:"Viewing users and permissions."}),"\n",(0,n.jsx)(t.li,{children:"Granting permissions to other users."}),"\n",(0,n.jsx)(t.li,{children:"Authenticating with the flowctl CLI."}),"\n",(0,n.jsx)(t.li,{children:"Manage billing details."}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Some advanced workflows, like transforming data with ",(0,n.jsx)(t.strong,{children:"derivations"}),", aren't fully available in the web app."]}),"\n",(0,n.jsx)(t.p,{children:"Even if you prefer the command line or plan to perform a task that's only available through flowctl, we recommend you begin your work in the web app;\nit provides a quicker and easier path to create captures and materializations. You can then switch to flowctl to continue working."}),"\n",(0,n.jsx)(t.h2,{id:"signing-in",children:"Signing in"}),"\n",(0,n.jsx)(t.p,{children:"You use a Google, Microsoft, or GitHub account to sign into Flow."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:i(26181).A+"",width:"1140",height:"664"})}),"\n",(0,n.jsxs)(t.p,{children:["If you've never used Flow before, you'll be prompted to register before being issued a trial account. If you want to use Flow for production workflows or collaborate with team members, you'll need an organizational account.\n",(0,n.jsx)(t.a,{href:"mailto:support@estuary.dev",children:"Contact Estuary"})," to create a new organizational account or join an existing organization."]}),"\n",(0,n.jsx)(t.h2,{id:"navigating-the-web-app",children:"Navigating the web app"}),"\n",(0,n.jsxs)(t.p,{children:["When you log into the web app, you land on the ",(0,n.jsx)(t.strong,{children:"Welcome"})," page.\nThere are four additional pages visible as tabs in the side navigation: ",(0,n.jsx)(t.strong,{children:"Sources (captures)"}),", ",(0,n.jsx)(t.strong,{children:"Collections"}),", ",(0,n.jsx)(t.strong,{children:"Destinations (materializations)"}),", and ",(0,n.jsx)(t.strong,{children:"Admin"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"The order of the tabs mirrors the order of a basic Data Flow:"}),"\n","\n",(0,n.jsx)(a.A,{chart:"\n\tgraph LR;\n\t\tCapture--\x3eCollection;\n Collection--\x3eMaterialization;\n"}),"\n",(0,n.jsxs)(t.p,{children:["While you may choose to ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"use the tabs in this sequence"}),", it's not necessary.\nAll Flow entities exist individually, outside of the context of complete Data Flow.\nYou can use the different pages in the web app to monitor and manage your items in a number of other ways, as described below."]}),"\n",(0,n.jsx)(t.h2,{id:"captures-page",children:"Captures page"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Captures"})," page shows you a table of existing Flow ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/captures",children:"captures"})," to which you have ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/authentication",children:"access"}),".\nThe ",(0,n.jsx)(t.strong,{children:"New Capture"})," button is also visible.\nYou use the table to monitor your captures."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:i(70727).A+"",width:"1510",height:"437"})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"1:"})," Select all or deselect all."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"2:"})," Enable, Disable, and Delete buttons. These actions will be applied to the selected table rows. Choose ",(0,n.jsx)(t.strong,{children:"Disable"})," to temporarily pause the flow of data, ",(0,n.jsx)(t.strong,{children:"Enable"})," to resume, and ",(0,n.jsx)(t.strong,{children:"Delete"})," to permanently remove the capture(s)."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"3:"})," Materialize button. When you click this button, you're directed to the ",(0,n.jsx)(t.strong,{children:"Create Materializations"})," page.\nAll the collections of the selected capture(s) will be added to the materialization."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"4:"})," Filter captures. Type a catalog prefix, unique capture name, or connector name to return captures that match your query."]}),"\n",(0,n.jsxs)(t.p,{children:["Capture names follow the pattern ",(0,n.jsx)(t.code,{children:"prefix/unique-identifier/connector-name"}),", with ",(0,n.jsx)(t.code,{children:"prefix"})," supporting multiple layers of nesting.\nYou can search for any part of this full capture name. You can also use the ",(0,n.jsx)(t.code,{children:"*"})," wildcard.\nFor example, if you have a capture called ",(0,n.jsx)(t.code,{children:"acmeCo/logistics/anvil-locations/source-postgres"}),",\nyou can find it by filtering for ",(0,n.jsx)(t.code,{children:"acmeCo*source-postgres"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"5:"})," Status indicator. Shows the status of the primary task ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards",children:"shard"})," that backs this capture."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Primary (Green)"}),": Data is actively flowing through the capture."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Pending (Yellow)"}),": The capture is attempting to re-connect. Often, you'll see this after you re-enable the capture as Flow backfills historical data."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Failed (Red)"}),": The capture has failed with an unrecoverable error."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Disabled (Hollow circle)"}),": The capture is disabled."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Unknown (Black when app is in light mode; white when app is in dark mode)"}),": The web app is unable to determine shard status. Usually, this is due to a temporary connection error."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"6:"})," Capture name. The full name is shown, including all ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/catalogs#namespace",children:"prefixes"}),". It is also a link to the ",(0,n.jsx)(t.a,{href:"#capture-details-page",children:"details page"})," of the capture."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"7:"})," Capture type. The icon shows the type of source system data is captured from."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"8:"})," Capture ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/logs-stats#statistics",children:"statistics"}),". The ",(0,n.jsx)(t.strong,{children:"Data Written"})," column shows the total amount of data, in bytes and in ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections#documents",children:"documents"}),",\nthat the capture has written to its associated collections within a configurable time interval.\nClick the time interval in the header to select from ",(0,n.jsx)(t.strong,{children:"Today"}),", ",(0,n.jsx)(t.strong,{children:"Yesterday"}),", ",(0,n.jsx)(t.strong,{children:"This Week"}),", ",(0,n.jsx)(t.strong,{children:"Last Week"}),", ",(0,n.jsx)(t.strong,{children:"This Month"}),", or ",(0,n.jsx)(t.strong,{children:"Last Month"}),".\nNote that the time intervals are in UTC."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"9:"})," Associated collections. The ",(0,n.jsx)(t.strong,{children:"Writes to"})," column shows all the collections to which the capture writes data. For captures with a large number of collections, there is a chip stating how many collections are hidden. Clicking on this will all you to hover over this column and scroll to view the full list. These are also links to the details page of the collection."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"10:"})," Publish time. Hover over this value to see the exact UTC time the capture was last published."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"11:"})," Options. Click to open the menu to ",(0,n.jsx)(t.strong,{children:"Edit Specification"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"editing-captures-and-collections",children:"Editing captures and collections"}),"\n",(0,n.jsxs)(t.p,{children:["When you click ",(0,n.jsx)(t.strong,{children:"Edit specification"})," for a capture, you're taken to the ",(0,n.jsx)(t.strong,{children:"Edit Capture"})," page."]}),"\n",(0,n.jsxs)(t.p,{children:["This page is similar to the ",(0,n.jsx)(t.a,{href:"#creating-a-capture",children:(0,n.jsx)(t.strong,{children:"Create Capture"})})," page as it was filled out just before the capture was published."]}),"\n",(0,n.jsxs)(t.p,{children:["For detailed steps to edit a capture, see the ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/edit-data-flows#edit-a-capture",children:"guide"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"creating-a-capture",children:"Creating a capture"}),"\n",(0,n.jsxs)(t.p,{children:["When you click ",(0,n.jsx)(t.strong,{children:"Create Capture"}),", you're taken to the Create Capture page.\nIn the first view, all available capture connectors are displayed."]}),"\n",(0,n.jsx)(t.p,{children:"Select the tile of the system from which you want to capture data to show the full capture form.\nThe form details are specific to the connector you chose."}),"\n",(0,n.jsxs)(t.p,{children:["For detailed steps to create a capture, see the ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-capture",children:"guide"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"After you successfully publish a capture, you're given the option to materialize the collections you just captured.\nYou can proceed to the materialization, or opt to exit to a different page of the web app."}),"\n",(0,n.jsx)(t.h2,{id:"collections-page",children:"Collections page"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Collections"})," page shows a read-only table of ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections",children:"collections"})," to which you have access.\nThe table has nearly all of the same features as the ",(0,n.jsx)(t.strong,{children:"Captures"})," table, with several important distinctions\nthat are called out in the image below."]}),"\n",(0,n.jsx)(t.p,{children:"You can use the table to view each collection's specification and see a sample of its data.\nThis can help you verify that collection data was captured as expected and that you'll be able to materialize it how you want, and troubleshoot if necessary."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:i(11112).A+"",width:"1691",height:"346"})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"1:"})," Select all or deselect all."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"2:"})," Enable, Disable, and Delete buttons. These actions will be applied to the selected table rows. Choose ",(0,n.jsx)(t.strong,{children:"Disable"})," to temporarily pause the flow of data, ",(0,n.jsx)(t.strong,{children:"Enable"})," to resume, and ",(0,n.jsx)(t.strong,{children:"Delete"})," to permanently remove the collection(s)."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"3:"})," Filter collections by name. Type a catalog prefix, unique collection name to return collections that match your query."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"4:"})," Status indicator. If the collection does not contain a ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/#derivations",children:"derivation"}),', the indicator should always show green, and hover text will say "Collection."\nIn the event that the server cannot be reached, the indicator will show "Unknown" status (black in light mode and white in dark mode).']}),"\n",(0,n.jsxs)(t.p,{children:["If the collection contains a derivation, the status of the derivation's primary task ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards",children:"shard"})," will be indicated:"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Primary (Green)"}),": Data is actively flowing through the derivation."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Pending (Yellow)"}),": The derivation is attempting to re-connect."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Failed (Red)"}),": The derivation has failed with an unrecoverable error."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Disabled (Hollow circle)"}),": The derivation is disabled."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Unknown (Black when app is in light mode; white when app is in dark mode)"}),": The web app is unable to determine shard status. Usually, this is due to a temporary connection error."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"5:"})," Collection name. The full name is shown, including all ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/catalogs#namespace",children:"prefixes"}),". It is also a link to the ",(0,n.jsx)(t.a,{href:"#collection-details-page",children:"details page"})," of the collection."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"6:"})," Collection ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/logs-stats#statistics",children:"statistics"}),". The ",(0,n.jsx)(t.strong,{children:"Data Written"})," column shows the total amount of data, in bytes and in ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections#documents",children:"documents"}),",\nthat has been written to each collection from its associated capture or derivation within a configurable time interval.\nClick the time interval in the header to select from ",(0,n.jsx)(t.strong,{children:"Today"}),", ",(0,n.jsx)(t.strong,{children:"Yesterday"}),", ",(0,n.jsx)(t.strong,{children:"This Week"}),", ",(0,n.jsx)(t.strong,{children:"Last Week"}),", ",(0,n.jsx)(t.strong,{children:"This Month"}),", or ",(0,n.jsx)(t.strong,{children:"Last Month"}),".\nNote that the time intervals are in UTC."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"7:"})," Publish time. Hover over this value to see the exact UTC time the collection was last published."]}),"\n",(0,n.jsx)(t.h2,{id:"materializations-page",children:"Materializations page"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Materializations"})," page shows you a table of existing Flow ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization",children:"materializations"})," to which you have ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/authentication",children:"access"}),".\nThe ",(0,n.jsx)(t.strong,{children:"New Materialization"})," button is also visible."]}),"\n",(0,n.jsxs)(t.p,{children:["You use the table to monitor your materializations. It's nearly identical to the table on the ",(0,n.jsx)(t.a,{href:"#captures-page",children:"Captures page"}),", with a few exceptions."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:i(83706).A+"",width:"1462",height:"433"})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"1:"})," Select all or deselect all."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"2:"})," Enable, Disable, and Delete buttons. These actions will be applied to the selected table rows. Choose ",(0,n.jsx)(t.strong,{children:"Disable"})," to temporarily pause the flow of data, ",(0,n.jsx)(t.strong,{children:"Enable"})," to resume, and ",(0,n.jsx)(t.strong,{children:"Delete"})," to permanently remove the materialization(s)."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"3:"})," Filter materializations by name. Type a catalog prefix, unique materialization name, or connector name to return materializations that match your query."]}),"\n",(0,n.jsxs)(t.p,{children:["Materialization names follow the pattern ",(0,n.jsx)(t.code,{children:"prefix/unique-identifier/connector-name"}),", with ",(0,n.jsx)(t.code,{children:"prefix"})," supporting multiple layers of nesting.\nYou can search for any part of this full materialization name. You can also use the ",(0,n.jsx)(t.code,{children:"*"})," wildcard.\nFor example, if you have a materialization called ",(0,n.jsx)(t.code,{children:"acmeCo/anvil-locations/materialize-mysql"}),",\nyou can find it by filtering for ",(0,n.jsx)(t.code,{children:"acmeCo*mysql"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"4:"})," Status indicator. Shows the status of the primary task ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards",children:"shard"})," that backs this materialization."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Primary (Green)"}),": Data is actively flowing through the materialization."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Pending (Yellow)"}),": The materialization is attempting to re-connect. Often, you'll see this after you re-enable the materialization as Flow backfills historical data."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Failed (Red)"}),": The materialization has failed with an unrecoverable error."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Disabled (Hollow circle)"}),": The materialization is disabled."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Unknown (Black when app is in light mode; white when app is in dark mode)"}),": The web app is unable to determine shard status. Usually, this is due to a temporary connection error."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"5:"})," Materialization name. The full name is shown, including all ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/catalogs#namespace",children:"prefixes"}),". It is also a link to the ",(0,n.jsx)(t.a,{href:"#materialization-details-page",children:"details page"})," of the materialization."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"6:"})," Materialization type. The icon shows the type of destination system data is materialized to."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"7:"})," Materialization ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/logs-stats#statistics",children:"statistics"}),". The ",(0,n.jsx)(t.strong,{children:"Data Read"})," column shows the total amount of data, in bytes and in ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections#documents",children:"documents"}),",\nthat the materialization has read from its associated collections within a configurable time interval.\nClick the time interval in the header to select from ",(0,n.jsx)(t.strong,{children:"Today"}),", ",(0,n.jsx)(t.strong,{children:"Yesterday"}),", ",(0,n.jsx)(t.strong,{children:"This Week"}),", ",(0,n.jsx)(t.strong,{children:"Last Week"}),", ",(0,n.jsx)(t.strong,{children:"This Month"}),", or ",(0,n.jsx)(t.strong,{children:"Last Month"}),".\nNote that the time intervals are in UTC."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"8:"})," Associated collections. The ",(0,n.jsx)(t.strong,{children:"Reads from"})," column shows all the collections from which the materialization reads data. For materializations with a large number of collections, there is a chip stating how many collections are hidden. Clicking on this will all you to hover over this column and scroll to view the full list. These are also links to the details page of the collection."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"9:"})," Publish time. Hover over this value to see the exact UTC time the materialization was last published."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"10:"})," Options. Click to open the menu to ",(0,n.jsx)(t.strong,{children:"Edit Specification"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"editing-materializations",children:"Editing materializations"}),"\n",(0,n.jsxs)(t.p,{children:["When you click ",(0,n.jsx)(t.strong,{children:"Edit specification"})," for a materialization, you're taken to the ",(0,n.jsx)(t.strong,{children:"Edit Materialization"})," page."]}),"\n",(0,n.jsxs)(t.p,{children:["This page is similar to the ",(0,n.jsx)(t.a,{href:"#creating-a-materialization",children:(0,n.jsx)(t.strong,{children:"Create Materialization"})})," page as it was filled out just before the materialization was published."]}),"\n",(0,n.jsxs)(t.p,{children:["For detailed steps to edit a materialization, see the ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/edit-data-flows#edit-a-materialization",children:"guide"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"creating-a-materialization",children:"Creating a materialization"}),"\n",(0,n.jsx)(t.p,{children:"There are three ways to begin creating a materialization:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Clicking ",(0,n.jsx)(t.strong,{children:"New Materialization"})," on the Materializations page."]}),"\n",(0,n.jsxs)(t.li,{children:["Selecting one or more captures from the Captures page and clicking ",(0,n.jsx)(t.strong,{children:"Materialize"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Clicking ",(0,n.jsx)(t.strong,{children:"Materialize Collections"})," immediately after publishing a capture."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"When you initiate the workflow in any of these ways, all available materialization connectors are displayed.\nSelect a connector to reveal the full form with configuration options specific to your desired destination."}),"\n",(0,n.jsxs)(t.p,{children:["Fill out the ",(0,n.jsx)(t.strong,{children:"Endpoint Config"})," form and in the ",(0,n.jsx)(t.strong,{children:"Source Collections"})," section use the ",(0,n.jsx)(t.strong,{children:"Collection Selector"})," to map Flow collections to resources in the destination system."]}),"\n",(0,n.jsx)(t.p,{children:"Note that if you entered the workflow from the Captures page or after publishing a capture, collections will be pre-populated for you."}),"\n",(0,n.jsxs)(t.p,{children:["For detailed steps to create a materialization, see the ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-materialization",children:"guide"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"capture-details-page",children:"Capture Details page"}),"\n",(0,n.jsxs)(t.p,{children:["When you click on the ",(0,n.jsx)(t.strong,{children:"name"})," of a capture on the ",(0,n.jsx)(t.a,{href:"#captures-page",children:"captures page"})," you will be taken to the capture details page to view data stats, sharding information, and general details."]}),"\n",(0,n.jsx)(t.h3,{id:"overview-tab",children:"Overview Tab"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:i(14179).A+"",width:"943",height:"616"})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"1:"})," The full name of the capture."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"2:"})," Capture ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/logs-stats#statistics",children:"statistics"}),". The ",(0,n.jsx)(t.strong,{children:"Usage"})," section displays the total amount of data, in bytes and in ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections#documents",children:"documents"})," written by the capture, per hour. The number of hours being displayed in the chart can be changed by clicking the time interval in the header to select from ",(0,n.jsx)(t.strong,{children:"6 hours"}),", ",(0,n.jsx)(t.strong,{children:"12 hours"}),", ",(0,n.jsx)(t.strong,{children:"24 hours"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"3:"})," The ",(0,n.jsx)(t.strong,{children:"Details"})," section shows different pieces of information about the capture. When it was last updated, when it was created, the connector being used, and the collections to which the capture writes data."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"4:"})," Detailed tooltip. You can hover over a section in the graph to see the specific data of that hour."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"5:"})," The most recent hour. This will automatically update every 15 seconds with the most recent data and docs."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"6:"})," Associated collections. Shows all the collections to which the capture writes data and when clicked will take you to the collection's ",(0,n.jsx)(t.a,{href:"#collection-details-page",children:"detail page"})]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"7:"})," The ",(0,n.jsx)(t.strong,{children:"Shard Information"})," section shows the full identifier of the shard(s) that back your capture. If there's an error, you'll see an alert identifying the failing shard(s). Use the drop-down to open an expanded view of the failed shard's logs."]}),"\n",(0,n.jsx)(t.h3,{id:"spec-tab",children:"Spec Tab"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:i(86411).A+"",width:"933",height:"456"})}),"\n",(0,n.jsxs)(t.p,{children:["In the ",(0,n.jsx)(t.strong,{children:"Spec"})," tab, you can view the specification of the capture itself."]}),"\n",(0,n.jsx)(t.h2,{id:"collection-details-page",children:"Collection Details page"}),"\n",(0,n.jsxs)(t.p,{children:["When you click on the ",(0,n.jsx)(t.strong,{children:"name"})," of a collection on the ",(0,n.jsx)(t.a,{href:"#collections-page",children:"collections page"})," you will be taken to the collection details page to view data stats, sharding information, preview of data, and general details."]}),"\n",(0,n.jsx)(t.h3,{id:"overview-tab-1",children:"Overview Tab"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:i(84597).A+"",width:"927",height:"867"})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"1:"})," The full name of the collection."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"2:"})," Collection ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/logs-stats#statistics",children:"statistics"}),". The ",(0,n.jsx)(t.strong,{children:"Usage"})," section shows the total amount of data, in bytes and in ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections#documents",children:"documents"})," passing through a collection, per hour. The number of hours being displayed in the chart can be changed by clicking the time interval in the header to select from ",(0,n.jsx)(t.strong,{children:"6 hours"}),", ",(0,n.jsx)(t.strong,{children:"12 hours"}),", ",(0,n.jsx)(t.strong,{children:"24 hours"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"3:"})," The ",(0,n.jsx)(t.strong,{children:"Details"})," section shows different pieces of information about the collection. When it was last updated, when it was created, and the associated collections (if any)."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"4:"})," Detailed tooltip. You can hover over a section in the graph to see the specific data of that hour."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"5:"})," The most recent hour. This will automatically update every 15 seconds with the most recent data and docs."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"6:"})," Associated collections. Shows all the collections to which the capture writes data and when clicked will take you to the collection's ",(0,n.jsx)(t.a,{href:"#collection-details-page",children:"detail page"})]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"7:"})," The ",(0,n.jsx)(t.strong,{children:"Shard Information"})," section (for derivations) shows the full identifier of the shard(s) that back your derivation. If there's an error, you'll see an alert identifying the failing shard(s). Use the drop-down to open an expanded view of the failed shard's logs."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"8:"})," The ",(0,n.jsx)(t.strong,{children:"Data Preview"})," section shows a sample of collection ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections#documents",children:"documents"}),": the individual JSON files that comprise the collection.\nDocuments are organized by their collection key value. Click a key from the list to view its document."]}),"\n",(0,n.jsx)(t.h3,{id:"spec-tab-1",children:"Spec Tab"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:i(28673).A+"",width:"920",height:"470"})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"1:"})," The collection's ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections#keys",children:"key"})," of the collection."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"2:"})," The collection's ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/schemas",children:"schema"})," displayed in a read only table. The table columns can be sorted to more easily find what you need."]}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["If you need to modify a collection, edit the ",(0,n.jsx)(t.a,{href:"#editing-captures",children:"capture"})," that it came from."]})}),"\n",(0,n.jsx)(t.h2,{id:"materialization-details-page",children:"Materialization Details Page"}),"\n",(0,n.jsxs)(t.p,{children:["When you click on the ",(0,n.jsx)(t.strong,{children:"name"})," of a materialization on the ",(0,n.jsx)(t.a,{href:"#materializations-page",children:"materializations page"})," you will be taken to the detail page to view data stats, sharding information, and general details."]}),"\n",(0,n.jsx)(t.h3,{id:"overview-tab-2",children:"Overview Tab"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:i(6746).A+"",width:"936",height:"614"})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"1:"})," The full name of the materialization."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"2:"})," Materialization ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/logs-stats#statistics",children:"statistics"}),". The ",(0,n.jsx)(t.strong,{children:"Usage"})," section shows the total amount of data, in bytes and in ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections#documents",children:"documents"})," read by a materialization, per hour. The number of hours being displayed in the chart can be changed by clicking the time interval in the header to select from ",(0,n.jsx)(t.strong,{children:"6 hours"}),", ",(0,n.jsx)(t.strong,{children:"12 hours"}),", ",(0,n.jsx)(t.strong,{children:"24 hours"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"3:"})," The ",(0,n.jsx)(t.strong,{children:"Details"})," section shows different pieces of information about the materialization. When it was last updated, when it was created, and the associated collections."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"4:"})," Detailed tooltip. You can hover over a section in the graph to see the specific data of that hour."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"5:"})," The most recent hour. This will automatically update every 15 seconds with the most recent data and docs."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"6:"})," Associated collections. Shows all the collections to which the capture writes data and when clicked will take you to the collection's ",(0,n.jsx)(t.a,{href:"#collection-details-page",children:"detail page"})]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"7:"})," The ",(0,n.jsx)(t.strong,{children:"Shard Information"})," section shows the full identifier of the shard(s) that back your materialization. If there's an error, you'll see an alert identifying the failing shard(s). Use the drop-down to open an expanded view of the failed shard's logs."]}),"\n",(0,n.jsx)(t.h3,{id:"spec-tab-2",children:"Spec Tab"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:i(90026).A+"",width:"935",height:"447"})}),"\n",(0,n.jsxs)(t.p,{children:["In the ",(0,n.jsx)(t.strong,{children:"Spec"})," tab, you can view the specification of the materialization itself."]}),"\n",(0,n.jsx)(t.h2,{id:"admin-page",children:"Admin page"}),"\n",(0,n.jsxs)(t.p,{children:["On the ",(0,n.jsx)(t.strong,{children:"Admin"})," page, you can view users' access grants, your organization's cloud storage locations, and a complete list of connectors.\nYou can also get an access token to authenticate with flowctl and update your cookie preferences."]}),"\n",(0,n.jsx)(t.h4,{id:"users",children:"Users"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Users"})," tab shows you all provisioned access grants on objects to which you also have access.\nBoth users and catalog prefixes can receive access grants.\nThese are split up into two tables called ",(0,n.jsx)(t.strong,{children:"Users"})," and ",(0,n.jsx)(t.strong,{children:"Prefixes"}),".\nEach access grant has its own row, so a given user or prefix may have multiple rows."]}),"\n",(0,n.jsxs)(t.p,{children:["For example, if you had read access to ",(0,n.jsx)(t.code,{children:"foo/"})," and write access to ",(0,n.jsx)(t.code,{children:"bar/"}),", you'd have a separate table row in the ",(0,n.jsx)(t.strong,{children:"Users"})," table for each of these capabilities.\nIf users Alice, Bob, and Carol each had write access on ",(0,n.jsx)(t.code,{children:"foo/"}),", you'd see three more table rows representing these access grants."]}),"\n",(0,n.jsxs)(t.p,{children:["Taking this a step further, the prefix ",(0,n.jsx)(t.code,{children:"foo/"})," could have read access to ",(0,n.jsx)(t.code,{children:"buz/"}),". You'd see this in the ",(0,n.jsx)(t.strong,{children:"Prefixes"})," table,\nand it'd signify that everyone who has access to ",(0,n.jsx)(t.code,{children:"foo/"})," also inherits read access to ",(0,n.jsx)(t.code,{children:"buz/"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"Use the search boxes to filter by username, prefix, or object."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/authentication",children:"Learn more about capabilities and access."})}),"\n",(0,n.jsx)(t.h4,{id:"storage-mappings",children:"Storage Mappings"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Storage Mappings"})," tab includes a table of the cloud storage locations that back your Flow collections.\nYou're able to view the table if you're an admin."]}),"\n",(0,n.jsxs)(t.p,{children:["Each top-level Flow ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/catalogs#namespace",children:"prefix"})," is backed by one or more cloud storage bucket that you own.\nYou typically have just one prefix: your organization name, which you provided when configuring your Flow organizational account.\nIf you're a trial user, your prefix is ",(0,n.jsx)(t.code,{children:"trial/"}),", and this tab isn't applicable to you;\nyour data is stored temporarily in Estuary's cloud storage bucket for your trial period."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/storage-mappings",children:"Learn more about storage mappings."})}),"\n",(0,n.jsx)(t.h4,{id:"connectors",children:"Connectors"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Connectors"})," tab offers a complete view of all connectors that are currently available through the web application, including both capture and materialization connectors.\nIf a connector you need is missing, you can request it."]}),"\n",(0,n.jsx)(t.h4,{id:"cli-api",children:"CLI-API"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"CLI-API"})," tab provides the access token required to ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/authentication#authenticating-flow-using-the-cli",children:"authenticate with flowctl"}),"."]}),"\n",(0,n.jsx)(t.h4,{id:"cookie-preferences",children:"Cookie Preferences"}),"\n",(0,n.jsxs)(t.p,{children:["You use the ",(0,n.jsx)(t.strong,{children:"Cookie Preferences"})," tab to view and modify cookie settings."]})]})}function p(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},61114:(e,t,i)=>{i.d(t,{A:()=>r});var n=i(96540),s=i(99702),a=i(74848);s.N.initialize({startOnLoad:!0});const r=e=>{let{chart:t}=e;return(0,n.useEffect)((()=>{s.N.contentLoaded()}),[]),(0,a.jsx)("div",{className:"mermaid",children:t})}},14179:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/capture-details-page--overview-f9b94a89b40a2b4e9b4b000d76a5fd64.png"},86411:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/capture-details-page--spec-1ab774883c35c141ebb72ed8c82df94a.png"},70727:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/capture-page-8d3387cfc38707280bb54a2e42c4c999.png"},84597:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/collection-details-page--overview-84393a8d4246d9e8d218c4f8344c4c15.png"},28673:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/collection-details-page--spec-f934385ed9eb953ef06a24ca45692df3.png"},11112:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/collections-page-8f653c98f00bf99ffd1a7ab351735fa6.png"},26181:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/login-screen-d4dd6652cdd8a1c64997b2ae85a00050.png"},6746:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/materialization-details-page--overview-3d6549a0a57b21fa5c7917a7980ee7ba.png"},90026:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/materialization-details-page--spec-e72c1f5f9d360e2787575a35687e3e1d.png"},83706:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/materialization-page-e2b7070883f3db0f1bf3add85e3a9f86.png"}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/331.9e748e5c.js b/pr-preview/pr-1594/assets/js/331.9e748e5c.js deleted file mode 100644 index 530a960024..0000000000 --- a/pr-preview/pr-1594/assets/js/331.9e748e5c.js +++ /dev/null @@ -1,10814 +0,0 @@ -"use strict"; -exports.id = 331; -exports.ids = [331]; -exports.modules = { - -/***/ 21176: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - Zp: () => (/* reexport */ layout) -}); - -// UNUSED EXPORTS: acyclic, normalize, rank - -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js -var uniqueId = __webpack_require__(5664); -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/map.js -var map = __webpack_require__(74722); -// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules -var range = __webpack_require__(91395); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js -var graphlib = __webpack_require__(697); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js -/* - * Simple doubly linked list implementation derived from Cormen, et al., - * "Introduction to Algorithms". - */ - - - -class List { - constructor() { - var sentinel = {}; - sentinel._next = sentinel._prev = sentinel; - this._sentinel = sentinel; - } - dequeue() { - var sentinel = this._sentinel; - var entry = sentinel._prev; - if (entry !== sentinel) { - unlink(entry); - return entry; - } - } - enqueue(entry) { - var sentinel = this._sentinel; - if (entry._prev && entry._next) { - unlink(entry); - } - entry._next = sentinel._next; - sentinel._next._prev = entry; - sentinel._next = entry; - entry._prev = sentinel; - } - toString() { - var strs = []; - var sentinel = this._sentinel; - var curr = sentinel._prev; - while (curr !== sentinel) { - strs.push(JSON.stringify(curr, filterOutLinks)); - curr = curr._prev; - } - return '[' + strs.join(', ') + ']'; - } -} - -function unlink(entry) { - entry._prev._next = entry._next; - entry._next._prev = entry._prev; - delete entry._next; - delete entry._prev; -} - -function filterOutLinks(k, v) { - if (k !== '_next' && k !== '_prev') { - return v; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js - - - - -/* - * A greedy heuristic for finding a feedback arc set for a graph. A feedback - * arc set is a set of edges that can be removed to make a graph acyclic. - * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and - * effective heuristic for the feedback arc set problem." This implementation - * adjusts that from the paper to allow for weighted edges. - */ - - -var DEFAULT_WEIGHT_FN = constant/* default */.A(1); - -function greedyFAS(g, weightFn) { - if (g.nodeCount() <= 1) { - return []; - } - var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); - var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); - - // Expand multi-edges - return flatten/* default */.A( - map/* default */.A(results, function (e) { - return g.outEdges(e.v, e.w); - }) - ); -} - -function doGreedyFAS(g, buckets, zeroIdx) { - var results = []; - var sources = buckets[buckets.length - 1]; - var sinks = buckets[0]; - - var entry; - while (g.nodeCount()) { - while ((entry = sinks.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - while ((entry = sources.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - if (g.nodeCount()) { - for (var i = buckets.length - 2; i > 0; --i) { - entry = buckets[i].dequeue(); - if (entry) { - results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); - break; - } - } - } - } - - return results; -} - -function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { - var results = collectPredecessors ? [] : undefined; - - forEach/* default */.A(g.inEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var uEntry = g.node(edge.v); - - if (collectPredecessors) { - results.push({ v: edge.v, w: edge.w }); - } - - uEntry.out -= weight; - assignBucket(buckets, zeroIdx, uEntry); - }); - - forEach/* default */.A(g.outEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var w = edge.w; - var wEntry = g.node(w); - wEntry['in'] -= weight; - assignBucket(buckets, zeroIdx, wEntry); - }); - - g.removeNode(entry.v); - - return results; -} - -function buildState(g, weightFn) { - var fasGraph = new graphlib/* Graph */.T(); - var maxIn = 0; - var maxOut = 0; - - forEach/* default */.A(g.nodes(), function (v) { - fasGraph.setNode(v, { v: v, in: 0, out: 0 }); - }); - - // Aggregate weights on nodes, but also sum the weights across multi-edges - // into a single edge for the fasGraph. - forEach/* default */.A(g.edges(), function (e) { - var prevWeight = fasGraph.edge(e.v, e.w) || 0; - var weight = weightFn(e); - var edgeWeight = prevWeight + weight; - fasGraph.setEdge(e.v, e.w, edgeWeight); - maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); - maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); - }); - - var buckets = range/* default */.A(maxOut + maxIn + 3).map(function () { - return new List(); - }); - var zeroIdx = maxIn + 1; - - forEach/* default */.A(fasGraph.nodes(), function (v) { - assignBucket(buckets, zeroIdx, fasGraph.node(v)); - }); - - return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; -} - -function assignBucket(buckets, zeroIdx, entry) { - if (!entry.out) { - buckets[0].enqueue(entry); - } else if (!entry['in']) { - buckets[buckets.length - 1].enqueue(entry); - } else { - buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js - - - - - -function run(g) { - var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); - forEach/* default */.A(fas, function (e) { - var label = g.edge(e); - g.removeEdge(e); - label.forwardName = e.name; - label.reversed = true; - g.setEdge(e.w, e.v, label, uniqueId/* default */.A('rev')); - }); - - function weightFn(g) { - return function (e) { - return g.edge(e).weight; - }; - } -} - -function dfsFAS(g) { - var fas = []; - var stack = {}; - var visited = {}; - - function dfs(v) { - if (has/* default */.A(visited, v)) { - return; - } - visited[v] = true; - stack[v] = true; - forEach/* default */.A(g.outEdges(v), function (e) { - if (has/* default */.A(stack, e.w)) { - fas.push(e); - } else { - dfs(e.w); - } - }); - delete stack[v]; - } - - forEach/* default */.A(g.nodes(), dfs); - return fas; -} - -function undo(g) { - forEach/* default */.A(g.edges(), function (e) { - var label = g.edge(e); - if (label.reversed) { - g.removeEdge(e); - - var forwardName = label.forwardName; - delete label.reversed; - delete label.forwardName; - g.setEdge(e.w, e.v, label, forwardName); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules -var merge = __webpack_require__(98879); -// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules -var pick = __webpack_require__(81942); -// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js -var defaults = __webpack_require__(23068); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js - - -/** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ -function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !(0,isSymbol/* default */.A)(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; -} - -/* harmony default export */ const _baseExtremum = (baseExtremum); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js -/** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ -function baseGt(value, other) { - return value > other; -} - -/* harmony default export */ const _baseGt = (baseGt); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js - - - - -/** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ -function max(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseGt) - : undefined; -} - -/* harmony default export */ const lodash_es_max = (max); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; -} - -/* harmony default export */ const lodash_es_last = (last); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js -var _baseAssignValue = __webpack_require__(52528); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js - - - - -/** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ -function mapValues(object, iteratee) { - var result = {}; - iteratee = (0,_baseIteratee/* default */.A)(iteratee, 3); - - (0,_baseForOwn/* default */.A)(object, function(value, key, object) { - (0,_baseAssignValue/* default */.A)(result, key, iteratee(value, key, object)); - }); - return result; -} - -/* harmony default export */ const lodash_es_mapValues = (mapValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js -/** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ -function baseLt(value, other) { - return value < other; -} - -/* harmony default export */ const _baseLt = (baseLt); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js - - - - -/** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ -function min(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_min = (min); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js -var _root = __webpack_require__(41917); -;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js - - -/** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ -var now = function() { - return _root/* default */.A.Date.now(); -}; - -/* harmony default export */ const lodash_es_now = (now); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js - - - - - -/* - * Adds a dummy node to the graph and return v. - */ -function addDummyNode(g, type, attrs, name) { - var v; - do { - v = uniqueId/* default */.A(name); - } while (g.hasNode(v)); - - attrs.dummy = type; - g.setNode(v, attrs); - return v; -} - -/* - * Returns a new graph with only simple edges. Handles aggregation of data - * associated with multi-edges. - */ -function simplify(g) { - var simplified = new graphlib/* Graph */.T().setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - simplified.setNode(v, g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; - var label = g.edge(e); - simplified.setEdge(e.v, e.w, { - weight: simpleLabel.weight + label.weight, - minlen: Math.max(simpleLabel.minlen, label.minlen), - }); - }); - return simplified; -} - -function asNonCompoundGraph(g) { - var simplified = new graphlib/* Graph */.T({ multigraph: g.isMultigraph() }).setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - if (!g.children(v).length) { - simplified.setNode(v, g.node(v)); - } - }); - forEach/* default */.A(g.edges(), function (e) { - simplified.setEdge(e, g.edge(e)); - }); - return simplified; -} - -function successorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var sucs = {}; - _.forEach(g.outEdges(v), function (e) { - sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; - }); - return sucs; - }); - return _.zipObject(g.nodes(), weightMap); -} - -function predecessorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var preds = {}; - _.forEach(g.inEdges(v), function (e) { - preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; - }); - return preds; - }); - return _.zipObject(g.nodes(), weightMap); -} - -/* - * Finds where a line starting at point ({x, y}) would intersect a rectangle - * ({x, y, width, height}) if it were pointing at the rectangle's center. - */ -function intersectRect(rect, point) { - var x = rect.x; - var y = rect.y; - - // Rectangle intersection algorithm from: - // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes - var dx = point.x - x; - var dy = point.y - y; - var w = rect.width / 2; - var h = rect.height / 2; - - if (!dx && !dy) { - throw new Error('Not possible to find intersection inside of the rectangle'); - } - - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - // Intersection is top or bottom of rect. - if (dy < 0) { - h = -h; - } - sx = (h * dx) / dy; - sy = h; - } else { - // Intersection is left or right of rect. - if (dx < 0) { - w = -w; - } - sx = w; - sy = (w * dy) / dx; - } - - return { x: x + sx, y: y + sy }; -} - -/* - * Given a DAG with each node assigned "rank" and "order" properties, this - * function will produce a matrix with the ids of each node. - */ -function buildLayerMatrix(g) { - var layering = map/* default */.A(range/* default */.A(util_maxRank(g) + 1), function () { - return []; - }); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - var rank = node.rank; - if (!isUndefined/* default */.A(rank)) { - layering[rank][node.order] = v; - } - }); - return layering; -} - -/* - * Adjusts the ranks for all nodes in the graph such that all nodes v have - * rank(v) >= 0 and at least one node w has rank(w) = 0. - */ -function normalizeRanks(g) { - var min = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (has/* default */.A(node, 'rank')) { - node.rank -= min; - } - }); -} - -function removeEmptyRanks(g) { - // Ranks may not start at 0, so we need to offset them - var offset = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - - var layers = []; - forEach/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank - offset; - if (!layers[rank]) { - layers[rank] = []; - } - layers[rank].push(v); - }); - - var delta = 0; - var nodeRankFactor = g.graph().nodeRankFactor; - forEach/* default */.A(layers, function (vs, i) { - if (isUndefined/* default */.A(vs) && i % nodeRankFactor !== 0) { - --delta; - } else if (delta) { - forEach/* default */.A(vs, function (v) { - g.node(v).rank += delta; - }); - } - }); -} - -function addBorderNode(g, prefix, rank, order) { - var node = { - width: 0, - height: 0, - }; - if (arguments.length >= 4) { - node.rank = rank; - node.order = order; - } - return addDummyNode(g, 'border', node, prefix); -} - -function util_maxRank(g) { - return lodash_es_max( - map/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank; - if (!isUndefined/* default */.A(rank)) { - return rank; - } - }) - ); -} - -/* - * Partition a collection into two groups: `lhs` and `rhs`. If the supplied - * function returns true for an entry it goes into `lhs`. Otherwise it goes - * into `rhs. - */ -function partition(collection, fn) { - var result = { lhs: [], rhs: [] }; - forEach/* default */.A(collection, function (value) { - if (fn(value)) { - result.lhs.push(value); - } else { - result.rhs.push(value); - } - }); - return result; -} - -/* - * Returns a new function that wraps `fn` with a timer. The wrapper logs the - * time it takes to execute the function. - */ -function util_time(name, fn) { - var start = lodash_es_now(); - try { - return fn(); - } finally { - console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); - } -} - -function notime(name, fn) { - return fn(); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js - - - - - -function addBorderSegments(g) { - function dfs(v) { - var children = g.children(v); - var node = g.node(v); - if (children.length) { - forEach/* default */.A(children, dfs); - } - - if (has/* default */.A(node, 'minRank')) { - node.borderLeft = []; - node.borderRight = []; - for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { - add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); - add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); - } - } - } - - forEach/* default */.A(g.children(), dfs); -} - -function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { - var label = { width: 0, height: 0, rank: rank, borderType: prop }; - var prev = sgNode[prop][rank - 1]; - var curr = addDummyNode(g, 'border', label, prefix); - sgNode[prop][rank] = curr; - g.setParent(curr, sg); - if (prev) { - g.setEdge(prev, curr, { weight: 1 }); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js - - - - -function adjust(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'lr' || rankDir === 'rl') { - swapWidthHeight(g); - } -} - -function coordinate_system_undo(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'bt' || rankDir === 'rl') { - reverseY(g); - } - - if (rankDir === 'lr' || rankDir === 'rl') { - swapXY(g); - swapWidthHeight(g); - } -} - -function swapWidthHeight(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapWidthHeightOne(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - swapWidthHeightOne(g.edge(e)); - }); -} - -function swapWidthHeightOne(attrs) { - var w = attrs.width; - attrs.width = attrs.height; - attrs.height = w; -} - -function reverseY(g) { - forEach/* default */.A(g.nodes(), function (v) { - reverseYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, reverseYOne); - if (has/* default */.A(edge, 'y')) { - reverseYOne(edge); - } - }); -} - -function reverseYOne(attrs) { - attrs.y = -attrs.y; -} - -function swapXY(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapXYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, swapXYOne); - if (has/* default */.A(edge, 'x')) { - swapXYOne(edge); - } - }); -} - -function swapXYOne(attrs) { - var x = attrs.x; - attrs.x = attrs.y; - attrs.y = x; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js - - - - - -/* - * Breaks any long edges in the graph into short segments that span 1 layer - * each. This operation is undoable with the denormalize function. - * - * Pre-conditions: - * - * 1. The input graph is a DAG. - * 2. Each node in the graph has a "rank" property. - * - * Post-condition: - * - * 1. All edges in the graph have a length of 1. - * 2. Dummy nodes are added where edges have been split into segments. - * 3. The graph is augmented with a "dummyChains" attribute which contains - * the first dummy in each chain of dummy nodes produced. - */ -function normalize_run(g) { - g.graph().dummyChains = []; - forEach/* default */.A(g.edges(), function (edge) { - normalizeEdge(g, edge); - }); -} - -function normalizeEdge(g, e) { - var v = e.v; - var vRank = g.node(v).rank; - var w = e.w; - var wRank = g.node(w).rank; - var name = e.name; - var edgeLabel = g.edge(e); - var labelRank = edgeLabel.labelRank; - - if (wRank === vRank + 1) return; - - g.removeEdge(e); - - var dummy, attrs, i; - for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { - edgeLabel.points = []; - attrs = { - width: 0, - height: 0, - edgeLabel: edgeLabel, - edgeObj: e, - rank: vRank, - }; - dummy = addDummyNode(g, 'edge', attrs, '_d'); - if (vRank === labelRank) { - attrs.width = edgeLabel.width; - attrs.height = edgeLabel.height; - // @ts-expect-error - attrs.dummy = 'edge-label'; - // @ts-expect-error - attrs.labelpos = edgeLabel.labelpos; - } - g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); - if (i === 0) { - g.graph().dummyChains.push(dummy); - } - v = dummy; - } - - g.setEdge(v, w, { weight: edgeLabel.weight }, name); -} - -function normalize_undo(g) { - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var origLabel = node.edgeLabel; - var w; - g.setEdge(node.edgeObj, origLabel); - while (node.dummy) { - w = g.successors(v)[0]; - g.removeNode(v); - origLabel.points.push({ x: node.x, y: node.y }); - if (node.dummy === 'edge-label') { - origLabel.x = node.x; - origLabel.y = node.y; - origLabel.width = node.width; - origLabel.height = node.height; - } - v = w; - node = g.node(v); - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js - - - - -/** - * This method is like `_.min` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * the value is ranked. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Math - * @param {Array} array The array to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {*} Returns the minimum value. - * @example - * - * var objects = [{ 'n': 1 }, { 'n': 2 }]; - * - * _.minBy(objects, function(o) { return o.n; }); - * // => { 'n': 1 } - * - * // The `_.property` iteratee shorthand. - * _.minBy(objects, 'n'); - * // => { 'n': 1 } - */ -function minBy(array, iteratee) { - return (array && array.length) - ? _baseExtremum(array, (0,_baseIteratee/* default */.A)(iteratee, 2), _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_minBy = (minBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js - - - - -/* - * Initializes ranks for the input graph using the longest path algorithm. This - * algorithm scales well and is fast in practice, it yields rather poor - * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom - * ranks wide and leaving edges longer than necessary. However, due to its - * speed, this algorithm is good for getting an initial ranking that can be fed - * into other algorithms. - * - * This algorithm does not normalize layers because it will be used by other - * algorithms in most cases. If using this algorithm directly, be sure to - * run normalize at the end. - * - * Pre-conditions: - * - * 1. Input graph is a DAG. - * 2. Input graph node labels can be assigned properties. - * - * Post-conditions: - * - * 1. Each node will be assign an (unnormalized) "rank" property. - */ -function longestPath(g) { - var visited = {}; - - function dfs(v) { - var label = g.node(v); - if (has/* default */.A(visited, v)) { - return label.rank; - } - visited[v] = true; - - var rank = lodash_es_min( - map/* default */.A(g.outEdges(v), function (e) { - return dfs(e.w) - g.edge(e).minlen; - }) - ); - - if ( - rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 - rank === undefined || // return value of _.map([]) for Lodash 4 - rank === null - ) { - // return value of _.map([null]) - rank = 0; - } - - return (label.rank = rank); - } - - forEach/* default */.A(g.sources(), dfs); -} - -/* - * Returns the amount of slack for the given edge. The slack is defined as the - * difference between the length of the edge and its minimum length. - */ -function slack(g, e) { - return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js - - - - - - -/* - * Constructs a spanning tree with tight edges and adjusted the input node's - * ranks to achieve this. A tight edge is one that is has a length that matches - * its "minlen" attribute. - * - * The basic structure for this function is derived from Gansner, et al., "A - * Technique for Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a DAG. - * 2. Graph must be connected. - * 3. Graph must have at least one node. - * 5. Graph nodes must have been previously assigned a "rank" property that - * respects the "minlen" property of incident edges. - * 6. Graph edges must have a "minlen" property. - * - * Post-conditions: - * - * - Graph nodes will have their rank adjusted to ensure that all edges are - * tight. - * - * Returns a tree (undirected graph) that is constructed using only "tight" - * edges. - */ -function feasibleTree(g) { - var t = new graphlib/* Graph */.T({ directed: false }); - - // Choose arbitrary node from which to start our tree - var start = g.nodes()[0]; - var size = g.nodeCount(); - t.setNode(start, {}); - - var edge, delta; - while (tightTree(t, g) < size) { - edge = findMinSlackEdge(t, g); - delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); - shiftRanks(t, g, delta); - } - - return t; -} - -/* - * Finds a maximal tree of tight edges and returns the number of nodes in the - * tree. - */ -function tightTree(t, g) { - function dfs(v) { - forEach/* default */.A(g.nodeEdges(v), function (e) { - var edgeV = e.v, - w = v === edgeV ? e.w : edgeV; - if (!t.hasNode(w) && !slack(g, e)) { - t.setNode(w, {}); - t.setEdge(v, w, {}); - dfs(w); - } - }); - } - - forEach/* default */.A(t.nodes(), dfs); - return t.nodeCount(); -} - -/* - * Finds the edge with the smallest slack that is incident on tree and returns - * it. - */ -function findMinSlackEdge(t, g) { - return lodash_es_minBy(g.edges(), function (e) { - if (t.hasNode(e.v) !== t.hasNode(e.w)) { - return slack(g, e); - } - }); -} - -function shiftRanks(t, g, delta) { - forEach/* default */.A(t.nodes(), function (v) { - g.node(v).rank += delta; - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js - - - - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!(0,isArrayLike/* default */.A)(collection)) { - var iteratee = (0,_baseIteratee/* default */.A)(predicate, 3); - collection = (0,keys/* default */.A)(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; -} - -/* harmony default export */ const _createFind = (createFind); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js - - -/** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ -function toInteger(value) { - var result = (0,toFinite/* default */.A)(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; -} - -/* harmony default export */ const lodash_es_toInteger = (toInteger); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return (0,_baseFindIndex/* default */.A)(array, (0,_baseIteratee/* default */.A)(predicate, 3), index); -} - -/* harmony default export */ const lodash_es_findIndex = (findIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js - - - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = _createFind(lodash_es_findIndex); - -/* harmony default export */ const lodash_es_find = (find); - -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js - - - - - -var DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function dijkstra_dijkstra(g, source, weightFn, edgeFn) { - return runDijkstra( - g, - String(source), - weightFn || DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runDijkstra(g, source, weightFn, edgeFn) { - var results = {}; - var pq = new PriorityQueue(); - var v, vEntry; - - var updateNeighbors = function (edge) { - var w = edge.v !== v ? edge.v : edge.w; - var wEntry = results[w]; - var weight = weightFn(edge); - var distance = vEntry.distance + weight; - - if (weight < 0) { - throw new Error( - 'dijkstra does not allow negative edge weights. ' + - 'Bad edge: ' + - edge + - ' Weight: ' + - weight - ); - } - - if (distance < wEntry.distance) { - wEntry.distance = distance; - wEntry.predecessor = v; - pq.decrease(w, distance); - } - }; - - g.nodes().forEach(function (v) { - var distance = v === source ? 0 : Number.POSITIVE_INFINITY; - results[v] = { distance: distance }; - pq.add(v, distance); - }); - - while (pq.size() > 0) { - v = pq.removeMin(); - vEntry = results[v]; - if (vEntry.distance === Number.POSITIVE_INFINITY) { - break; - } - - edgeFn(v).forEach(updateNeighbors); - } - - return results; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js - - - - - -function dijkstraAll(g, weightFunc, edgeFunc) { - return _.transform( - g.nodes(), - function (acc, v) { - acc[v] = dijkstra(g, v, weightFunc, edgeFunc); - }, - {} - ); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js - - - - -var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function floydWarshall(g, weightFn, edgeFn) { - return runFloydWarshall( - g, - weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runFloydWarshall(g, weightFn, edgeFn) { - var results = {}; - var nodes = g.nodes(); - - nodes.forEach(function (v) { - results[v] = {}; - results[v][v] = { distance: 0 }; - nodes.forEach(function (w) { - if (v !== w) { - results[v][w] = { distance: Number.POSITIVE_INFINITY }; - } - }); - edgeFn(v).forEach(function (edge) { - var w = edge.v === v ? edge.w : edge.v; - var d = weightFn(edge); - results[v][w] = { distance: d, predecessor: v }; - }); - }); - - nodes.forEach(function (k) { - var rowK = results[k]; - nodes.forEach(function (i) { - var rowI = results[i]; - nodes.forEach(function (j) { - var ik = rowI[k]; - var kj = rowK[j]; - var ij = rowI[j]; - var altDistance = ik.distance + kj.distance; - if (altDistance < ij.distance) { - ij.distance = altDistance; - ij.predecessor = kj.predecessor; - } - }); - }); - }); - - return results; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules -var _baseKeys = __webpack_require__(69471); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules -var _baseGetTag = __webpack_require__(88496); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js - - - - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!(0,isArray/* default */.A)(value) && (0,isObjectLike/* default */.A)(value) && (0,_baseGetTag/* default */.A)(value) == stringTag); -} - -/* harmony default export */ const lodash_es_isString = (isString); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js - - -/** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -var asciiSize = (0,_baseProperty/* default */.A)('length'); - -/* harmony default export */ const _asciiSize = (asciiSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -/* harmony default export */ const _hasUnicode = (hasUnicode); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js -/** Used to compose unicode character classes. */ -var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', - _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', - _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', - _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', - _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, - _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', - rsCombo = '[' + _unicodeSize_rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - _unicodeSize_rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', - rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; -} - -/* harmony default export */ const _unicodeSize = (unicodeSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js - - - - -/** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ -function stringSize(string) { - return _hasUnicode(string) - ? _unicodeSize(string) - : _asciiSize(string); -} - -/* harmony default export */ const _stringSize = (stringSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js - - - - - - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ -function size(collection) { - if (collection == null) { - return 0; - } - if ((0,isArrayLike/* default */.A)(collection)) { - return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; - } - var tag = (0,_getTag/* default */.A)(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return (0,_baseKeys/* default */.A)(collection).length; -} - -/* harmony default export */ const lodash_es_size = (size); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js - - - - -topsort_topsort.CycleException = topsort_CycleException; - -function topsort_topsort(g) { - var visited = {}; - var stack = {}; - var results = []; - - function visit(node) { - if (has/* default */.A(stack, node)) { - throw new topsort_CycleException(); - } - - if (!has/* default */.A(visited, node)) { - stack[node] = true; - visited[node] = true; - forEach/* default */.A(g.predecessors(node), visit); - delete stack[node]; - results.push(node); - } - } - - forEach/* default */.A(g.sinks(), visit); - - if (lodash_es_size(visited) !== g.nodeCount()) { - throw new topsort_CycleException(); - } - - return results; -} - -function topsort_CycleException() {} -topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js - - - - -function isAcyclic(g) { - try { - topsort(g); - } catch (e) { - if (e instanceof CycleException) { - return false; - } - throw e; - } - return true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js - - - - -/* - * A helper that preforms a pre- or post-order traversal on the input graph - * and returns the nodes in the order they were visited. If the graph is - * undirected then this algorithm will navigate using neighbors. If the graph - * is directed then this algorithm will navigate using successors. - * - * Order must be one of "pre" or "post". - */ -function dfs(g, vs, order) { - if (!isArray/* default */.A(vs)) { - vs = [vs]; - } - - var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); - - var acc = []; - var visited = {}; - forEach/* default */.A(vs, function (v) { - if (!g.hasNode(v)) { - throw new Error('Graph does not have node: ' + v); - } - - doDfs(g, v, order === 'post', visited, navigation, acc); - }); - return acc; -} - -function doDfs(g, v, postorder, visited, navigation, acc) { - if (!has/* default */.A(visited, v)) { - visited[v] = true; - - if (!postorder) { - acc.push(v); - } - forEach/* default */.A(navigation(v), function (w) { - doDfs(g, w, postorder, visited, navigation, acc); - }); - if (postorder) { - acc.push(v); - } - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js - - - - -function postorder(g, vs) { - return dfs(g, vs, 'post'); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js - - - - -function preorder(g, vs) { - return dfs(g, vs, 'pre'); -} - -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules -var graph = __webpack_require__(73046); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js - - - - - - -function prim(g, weightFunc) { - var result = new Graph(); - var parents = {}; - var pq = new PriorityQueue(); - var v; - - function updateNeighbors(edge) { - var w = edge.v === v ? edge.w : edge.v; - var pri = pq.priority(w); - if (pri !== undefined) { - var edgeWeight = weightFunc(edge); - if (edgeWeight < pri) { - parents[w] = v; - pq.decrease(w, edgeWeight); - } - } - } - - if (g.nodeCount() === 0) { - return result; - } - - _.each(g.nodes(), function (v) { - pq.add(v, Number.POSITIVE_INFINITY); - result.setNode(v); - }); - - // Start from an arbitrary node - pq.decrease(g.nodes()[0], 0); - - var init = false; - while (pq.size() > 0) { - v = pq.removeMin(); - if (_.has(parents, v)) { - result.setEdge(v, parents[v]); - } else if (init) { - throw new Error('Input graph is not connected: ' + g); - } else { - init = true; - } - - g.nodeEdges(v).forEach(updateNeighbors); - } - - return result; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js - - - - - - - - - - - - - - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js - - - - - - - - -// Expose some internals for testing purposes -networkSimplex.initLowLimValues = initLowLimValues; -networkSimplex.initCutValues = initCutValues; -networkSimplex.calcCutValue = calcCutValue; -networkSimplex.leaveEdge = leaveEdge; -networkSimplex.enterEdge = enterEdge; -networkSimplex.exchangeEdges = exchangeEdges; - -/* - * The network simplex algorithm assigns ranks to each node in the input graph - * and iteratively improves the ranking to reduce the length of edges. - * - * Preconditions: - * - * 1. The input graph must be a DAG. - * 2. All nodes in the graph must have an object value. - * 3. All edges in the graph must have "minlen" and "weight" attributes. - * - * Postconditions: - * - * 1. All nodes in the graph will have an assigned "rank" attribute that has - * been optimized by the network simplex algorithm. Ranks start at 0. - * - * - * A rough sketch of the algorithm is as follows: - * - * 1. Assign initial ranks to each node. We use the longest path algorithm, - * which assigns ranks to the lowest position possible. In general this - * leads to very wide bottom ranks and unnecessarily long edges. - * 2. Construct a feasible tight tree. A tight tree is one such that all - * edges in the tree have no slack (difference between length of edge - * and minlen for the edge). This by itself greatly improves the assigned - * rankings by shorting edges. - * 3. Iteratively find edges that have negative cut values. Generally a - * negative cut value indicates that the edge could be removed and a new - * tree edge could be added to produce a more compact graph. - * - * Much of the algorithms here are derived from Gansner, et al., "A Technique - * for Drawing Directed Graphs." The structure of the file roughly follows the - * structure of the overall algorithm. - */ -function networkSimplex(g) { - g = simplify(g); - longestPath(g); - var t = feasibleTree(g); - initLowLimValues(t); - initCutValues(t, g); - - var e, f; - while ((e = leaveEdge(t))) { - f = enterEdge(t, g, e); - exchangeEdges(t, g, e, f); - } -} - -/* - * Initializes cut values for all edges in the tree. - */ -function initCutValues(t, g) { - var vs = postorder(t, t.nodes()); - vs = vs.slice(0, vs.length - 1); - forEach/* default */.A(vs, function (v) { - assignCutValue(t, g, v); - }); -} - -function assignCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - t.edge(child, parent).cutvalue = calcCutValue(t, g, child); -} - -/* - * Given the tight tree, its graph, and a child in the graph calculate and - * return the cut value for the edge between the child and its parent. - */ -function calcCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - // True if the child is on the tail end of the edge in the directed graph - var childIsTail = true; - // The graph's view of the tree edge we're inspecting - var graphEdge = g.edge(child, parent); - // The accumulated cut value for the edge between this node and its parent - var cutValue = 0; - - if (!graphEdge) { - childIsTail = false; - graphEdge = g.edge(parent, child); - } - - cutValue = graphEdge.weight; - - forEach/* default */.A(g.nodeEdges(child), function (e) { - var isOutEdge = e.v === child, - other = isOutEdge ? e.w : e.v; - - if (other !== parent) { - var pointsToHead = isOutEdge === childIsTail, - otherWeight = g.edge(e).weight; - - cutValue += pointsToHead ? otherWeight : -otherWeight; - if (isTreeEdge(t, child, other)) { - var otherCutValue = t.edge(child, other).cutvalue; - cutValue += pointsToHead ? -otherCutValue : otherCutValue; - } - } - }); - - return cutValue; -} - -function initLowLimValues(tree, root) { - if (arguments.length < 2) { - root = tree.nodes()[0]; - } - dfsAssignLowLim(tree, {}, 1, root); -} - -function dfsAssignLowLim(tree, visited, nextLim, v, parent) { - var low = nextLim; - var label = tree.node(v); - - visited[v] = true; - forEach/* default */.A(tree.neighbors(v), function (w) { - if (!has/* default */.A(visited, w)) { - nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); - } - }); - - label.low = low; - label.lim = nextLim++; - if (parent) { - label.parent = parent; - } else { - // TODO should be able to remove this when we incrementally update low lim - delete label.parent; - } - - return nextLim; -} - -function leaveEdge(tree) { - return lodash_es_find(tree.edges(), function (e) { - return tree.edge(e).cutvalue < 0; - }); -} - -function enterEdge(t, g, edge) { - var v = edge.v; - var w = edge.w; - - // For the rest of this function we assume that v is the tail and w is the - // head, so if we don't have this edge in the graph we should flip it to - // match the correct orientation. - if (!g.hasEdge(v, w)) { - v = edge.w; - w = edge.v; - } - - var vLabel = t.node(v); - var wLabel = t.node(w); - var tailLabel = vLabel; - var flip = false; - - // If the root is in the tail of the edge then we need to flip the logic that - // checks for the head and tail nodes in the candidates function below. - if (vLabel.lim > wLabel.lim) { - tailLabel = wLabel; - flip = true; - } - - var candidates = filter/* default */.A(g.edges(), function (edge) { - return ( - flip === isDescendant(t, t.node(edge.v), tailLabel) && - flip !== isDescendant(t, t.node(edge.w), tailLabel) - ); - }); - - return lodash_es_minBy(candidates, function (edge) { - return slack(g, edge); - }); -} - -function exchangeEdges(t, g, e, f) { - var v = e.v; - var w = e.w; - t.removeEdge(v, w); - t.setEdge(f.v, f.w, {}); - initLowLimValues(t); - initCutValues(t, g); - updateRanks(t, g); -} - -function updateRanks(t, g) { - var root = lodash_es_find(t.nodes(), function (v) { - return !g.node(v).parent; - }); - var vs = preorder(t, root); - vs = vs.slice(1); - forEach/* default */.A(vs, function (v) { - var parent = t.node(v).parent, - edge = g.edge(v, parent), - flipped = false; - - if (!edge) { - edge = g.edge(parent, v); - flipped = true; - } - - g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); - }); -} - -/* - * Returns true if the edge is in the tree. - */ -function isTreeEdge(tree, u, v) { - return tree.hasEdge(u, v); -} - -/* - * Returns true if the specified node is descendant of the root node per the - * assigned low and lim attributes in the tree. - */ -function isDescendant(tree, vLabel, rootLabel) { - return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js - - - - - - -/* - * Assigns a rank to each node in the input graph that respects the "minlen" - * constraint specified on edges between nodes. - * - * This basic structure is derived from Gansner, et al., "A Technique for - * Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a connected DAG - * 2. Graph nodes must be objects - * 3. Graph edges must have "weight" and "minlen" attributes - * - * Post-conditions: - * - * 1. Graph nodes will have a "rank" attribute based on the results of the - * algorithm. Ranks can start at any index (including negative), we'll - * fix them up later. - */ -function rank(g) { - switch (g.graph().ranker) { - case 'network-simplex': - networkSimplexRanker(g); - break; - case 'tight-tree': - tightTreeRanker(g); - break; - case 'longest-path': - longestPathRanker(g); - break; - default: - networkSimplexRanker(g); - } -} - -// A fast and simple ranker, but results are far from optimal. -var longestPathRanker = longestPath; - -function tightTreeRanker(g) { - longestPath(g); - feasibleTree(g); -} - -function networkSimplexRanker(g) { - networkSimplex(g); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js - - - - - -/* - * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, - * adds appropriate edges to ensure that all cluster nodes are placed between - * these boundries, and ensures that the graph is connected. - * - * In addition we ensure, through the use of the minlen property, that nodes - * and subgraph border nodes to not end up on the same rank. - * - * Preconditions: - * - * 1. Input graph is a DAG - * 2. Nodes in the input graph has a minlen attribute - * - * Postconditions: - * - * 1. Input graph is connected. - * 2. Dummy nodes are added for the tops and bottoms of subgraphs. - * 3. The minlen attribute for nodes is adjusted to ensure nodes do not - * get placed on the same rank as subgraph border nodes. - * - * The nesting graph idea comes from Sander, "Layout of Compound Directed - * Graphs." - */ -function nesting_graph_run(g) { - var root = addDummyNode(g, 'root', {}, '_root'); - var depths = treeDepths(g); - var height = lodash_es_max(values/* default */.A(depths)) - 1; // Note: depths is an Object not an array - var nodeSep = 2 * height + 1; - - g.graph().nestingRoot = root; - - // Multiply minlen by nodeSep to align nodes on non-border ranks. - forEach/* default */.A(g.edges(), function (e) { - g.edge(e).minlen *= nodeSep; - }); - - // Calculate a weight that is sufficient to keep subgraphs vertically compact - var weight = sumWeights(g) + 1; - - // Create border nodes and link them up - forEach/* default */.A(g.children(), function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - }); - - // Save the multiplier for node layers for later removal of empty border - // layers. - g.graph().nodeRankFactor = nodeSep; -} - -function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { - var children = g.children(v); - if (!children.length) { - if (v !== root) { - g.setEdge(root, v, { weight: 0, minlen: nodeSep }); - } - return; - } - - var top = addBorderNode(g, '_bt'); - var bottom = addBorderNode(g, '_bb'); - var label = g.node(v); - - g.setParent(top, v); - label.borderTop = top; - g.setParent(bottom, v); - label.borderBottom = bottom; - - forEach/* default */.A(children, function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - - var childNode = g.node(child); - var childTop = childNode.borderTop ? childNode.borderTop : child; - var childBottom = childNode.borderBottom ? childNode.borderBottom : child; - var thisWeight = childNode.borderTop ? weight : 2 * weight; - var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; - - g.setEdge(top, childTop, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - - g.setEdge(childBottom, bottom, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - }); - - if (!g.parent(v)) { - g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); - } -} - -function treeDepths(g) { - var depths = {}; - function dfs(v, depth) { - var children = g.children(v); - if (children && children.length) { - forEach/* default */.A(children, function (child) { - dfs(child, depth + 1); - }); - } - depths[v] = depth; - } - forEach/* default */.A(g.children(), function (v) { - dfs(v, 1); - }); - return depths; -} - -function sumWeights(g) { - return reduce/* default */.A( - g.edges(), - function (acc, e) { - return acc + g.edge(e).weight; - }, - 0 - ); -} - -function cleanup(g) { - var graphLabel = g.graph(); - g.removeNode(graphLabel.nestingRoot); - delete graphLabel.nestingRoot; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.nestingEdge) { - g.removeEdge(e); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules -var _baseClone = __webpack_require__(91641); -;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return (0,_baseClone/* default */.A)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js - - - - -function addSubgraphConstraints(g, cg, vs) { - var prev = {}, - rootPrev; - - forEach/* default */.A(vs, function (v) { - var child = g.parent(v), - parent, - prevChild; - while (child) { - parent = g.parent(child); - if (parent) { - prevChild = prev[parent]; - prev[parent] = child; - } else { - prevChild = rootPrev; - rootPrev = child; - } - if (prevChild && prevChild !== child) { - cg.setEdge(prevChild, child); - return; - } - child = parent; - } - }); - - /* - function dfs(v) { - var children = v ? g.children(v) : g.children(); - if (children.length) { - var min = Number.POSITIVE_INFINITY, - subgraphs = []; - _.each(children, function(child) { - var childMin = dfs(child); - if (g.children(child).length) { - subgraphs.push({ v: child, order: childMin }); - } - min = Math.min(min, childMin); - }); - _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { - cg.setEdge(prev.v, curr.v); - return curr; - }); - return min; - } - return g.node(v).order; - } - dfs(undefined); - */ -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js - - - - - -/* - * Constructs a graph that can be used to sort a layer of nodes. The graph will - * contain all base and subgraph nodes from the request layer in their original - * hierarchy and any edges that are incident on these nodes and are of the type - * requested by the "relationship" parameter. - * - * Nodes from the requested rank that do not have parents are assigned a root - * node in the output graph, which is set in the root graph attribute. This - * makes it easy to walk the hierarchy of movable nodes during ordering. - * - * Pre-conditions: - * - * 1. Input graph is a DAG - * 2. Base nodes in the input graph have a rank attribute - * 3. Subgraph nodes in the input graph has minRank and maxRank attributes - * 4. Edges have an assigned weight - * - * Post-conditions: - * - * 1. Output graph has all nodes in the movable rank with preserved - * hierarchy. - * 2. Root nodes in the movable layer are made children of the node - * indicated by the root attribute of the graph. - * 3. Non-movable nodes incident on movable nodes, selected by the - * relationship parameter, are included in the graph (without hierarchy). - * 4. Edges incident on movable nodes, selected by the relationship - * parameter, are added to the output graph. - * 5. The weights for copied edges are aggregated as need, since the output - * graph is not a multi-graph. - */ -function buildLayerGraph(g, rank, relationship) { - var root = createRootNode(g), - result = new graphlib/* Graph */.T({ compound: true }) - .setGraph({ root: root }) - .setDefaultNodeLabel(function (v) { - return g.node(v); - }); - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v), - parent = g.parent(v); - - if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { - result.setNode(v); - result.setParent(v, parent || root); - - // This assumes we have only short edges! - forEach/* default */.A(g[relationship](v), function (e) { - var u = e.v === v ? e.w : e.v, - edge = result.edge(u, v), - weight = !isUndefined/* default */.A(edge) ? edge.weight : 0; - result.setEdge(u, v, { weight: g.edge(e).weight + weight }); - }); - - if (has/* default */.A(node, 'minRank')) { - result.setNode(v, { - borderLeft: node.borderLeft[rank], - borderRight: node.borderRight[rank], - }); - } - } - }); - - return result; -} - -function createRootNode(g) { - var v; - while (g.hasNode((v = uniqueId/* default */.A('_root')))); - return v; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js -/** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ -function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; -} - -/* harmony default export */ const _baseZipObject = (baseZipObject); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js - - - -/** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ -function zipObject(props, values) { - return _baseZipObject(props || [], values || [], _assignValue/* default */.A); -} - -/* harmony default export */ const lodash_es_zipObject = (zipObject); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js -var _baseMap = __webpack_require__(52568); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js -/** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ -function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; -} - -/* harmony default export */ const _baseSortBy = (baseSortBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js - - -/** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ -function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = (0,isSymbol/* default */.A)(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = (0,isSymbol/* default */.A)(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; -} - -/* harmony default export */ const _compareAscending = (compareAscending); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js - - -/** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ -function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = _compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; -} - -/* harmony default export */ const _compareMultiple = (compareMultiple); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js - - - - - - - - - - -/** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ -function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - if ((0,isArray/* default */.A)(iteratee)) { - return function(value) { - return (0,_baseGet/* default */.A)(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } - } - return iteratee; - }); - } else { - iteratees = [identity/* default */.A]; - } - - var index = -1; - iteratees = (0,_arrayMap/* default */.A)(iteratees, (0,_baseUnary/* default */.A)(_baseIteratee/* default */.A)); - - var result = (0,_baseMap/* default */.A)(collection, function(value, key, collection) { - var criteria = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return _baseSortBy(result, function(object, other) { - return _compareMultiple(object, other, orders); - }); -} - -/* harmony default export */ const _baseOrderBy = (baseOrderBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js - - - - - -/** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 30 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] - */ -var sortBy = (0,_baseRest/* default */.A)(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && (0,_isIterateeCall/* default */.A)(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && (0,_isIterateeCall/* default */.A)(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return _baseOrderBy(collection, (0,_baseFlatten/* default */.A)(iteratees, 1), []); -}); - -/* harmony default export */ const lodash_es_sortBy = (sortBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js - - - - -/* - * A function that takes a layering (an array of layers, each with an array of - * ordererd nodes) and a graph and returns a weighted crossing count. - * - * Pre-conditions: - * - * 1. Input graph must be simple (not a multigraph), directed, and include - * only simple edges. - * 2. Edges in the input graph must have assigned weights. - * - * Post-conditions: - * - * 1. The graph and layering matrix are left unchanged. - * - * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." - */ -function crossCount(g, layering) { - var cc = 0; - for (var i = 1; i < layering.length; ++i) { - cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); - } - return cc; -} - -function twoLayerCrossCount(g, northLayer, southLayer) { - // Sort all of the edges between the north and south layers by their position - // in the north layer and then the south. Map these edges to the position of - // their head in the south layer. - var southPos = lodash_es_zipObject( - southLayer, - map/* default */.A(southLayer, function (v, i) { - return i; - }) - ); - var southEntries = flatten/* default */.A( - map/* default */.A(northLayer, function (v) { - return lodash_es_sortBy( - map/* default */.A(g.outEdges(v), function (e) { - return { pos: southPos[e.w], weight: g.edge(e).weight }; - }), - 'pos' - ); - }) - ); - - // Build the accumulator tree - var firstIndex = 1; - while (firstIndex < southLayer.length) firstIndex <<= 1; - var treeSize = 2 * firstIndex - 1; - firstIndex -= 1; - var tree = map/* default */.A(new Array(treeSize), function () { - return 0; - }); - - // Calculate the weighted crossings - var cc = 0; - forEach/* default */.A( - // @ts-expect-error - southEntries.forEach(function (entry) { - var index = entry.pos + firstIndex; - tree[index] += entry.weight; - var weightSum = 0; - // @ts-expect-error - while (index > 0) { - // @ts-expect-error - if (index % 2) { - weightSum += tree[index + 1]; - } - // @ts-expect-error - index = (index - 1) >> 1; - tree[index] += entry.weight; - } - cc += entry.weight * weightSum; - }) - ); - - return cc; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js - - - - -/* - * Assigns an initial order value for each node by performing a DFS search - * starting from nodes in the first rank. Nodes are assigned an order in their - * rank as they are first visited. - * - * This approach comes from Gansner, et al., "A Technique for Drawing Directed - * Graphs." - * - * Returns a layering matrix with an array per layer and each layer sorted by - * the order of its nodes. - */ -function initOrder(g) { - var visited = {}; - var simpleNodes = filter/* default */.A(g.nodes(), function (v) { - return !g.children(v).length; - }); - var maxRank = lodash_es_max( - map/* default */.A(simpleNodes, function (v) { - return g.node(v).rank; - }) - ); - var layers = map/* default */.A(range/* default */.A(maxRank + 1), function () { - return []; - }); - - function dfs(v) { - if (has/* default */.A(visited, v)) return; - visited[v] = true; - var node = g.node(v); - layers[node.rank].push(v); - forEach/* default */.A(g.successors(v), dfs); - } - - var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { - return g.node(v).rank; - }); - forEach/* default */.A(orderedVs, dfs); - - return layers; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js - - - - -function barycenter(g, movable) { - return map/* default */.A(movable, function (v) { - var inV = g.inEdges(v); - if (!inV.length) { - return { v: v }; - } else { - var result = reduce/* default */.A( - inV, - function (acc, e) { - var edge = g.edge(e), - nodeU = g.node(e.v); - return { - sum: acc.sum + edge.weight * nodeU.order, - weight: acc.weight + edge.weight, - }; - }, - { sum: 0, weight: 0 } - ); - - return { - v: v, - barycenter: result.sum / result.weight, - weight: result.weight, - }; - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js - - - - -/* - * Given a list of entries of the form {v, barycenter, weight} and a - * constraint graph this function will resolve any conflicts between the - * constraint graph and the barycenters for the entries. If the barycenters for - * an entry would violate a constraint in the constraint graph then we coalesce - * the nodes in the conflict into a new node that respects the contraint and - * aggregates barycenter and weight information. - * - * This implementation is based on the description in Forster, "A Fast and - * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it - * differs in some specific details. - * - * Pre-conditions: - * - * 1. Each entry has the form {v, barycenter, weight}, or if the node has - * no barycenter, then {v}. - * - * Returns: - * - * A new list of entries of the form {vs, i, barycenter, weight}. The list - * `vs` may either be a singleton or it may be an aggregation of nodes - * ordered such that they do not violate constraints from the constraint - * graph. The property `i` is the lowest original index of any of the - * elements in `vs`. - */ -function resolveConflicts(entries, cg) { - var mappedEntries = {}; - forEach/* default */.A(entries, function (entry, i) { - var tmp = (mappedEntries[entry.v] = { - indegree: 0, - in: [], - out: [], - vs: [entry.v], - i: i, - }); - if (!isUndefined/* default */.A(entry.barycenter)) { - // @ts-expect-error - tmp.barycenter = entry.barycenter; - // @ts-expect-error - tmp.weight = entry.weight; - } - }); - - forEach/* default */.A(cg.edges(), function (e) { - var entryV = mappedEntries[e.v]; - var entryW = mappedEntries[e.w]; - if (!isUndefined/* default */.A(entryV) && !isUndefined/* default */.A(entryW)) { - entryW.indegree++; - entryV.out.push(mappedEntries[e.w]); - } - }); - - var sourceSet = filter/* default */.A(mappedEntries, function (entry) { - // @ts-expect-error - return !entry.indegree; - }); - - return doResolveConflicts(sourceSet); -} - -function doResolveConflicts(sourceSet) { - var entries = []; - - function handleIn(vEntry) { - return function (uEntry) { - if (uEntry.merged) { - return; - } - if ( - isUndefined/* default */.A(uEntry.barycenter) || - isUndefined/* default */.A(vEntry.barycenter) || - uEntry.barycenter >= vEntry.barycenter - ) { - mergeEntries(vEntry, uEntry); - } - }; - } - - function handleOut(vEntry) { - return function (wEntry) { - wEntry['in'].push(vEntry); - if (--wEntry.indegree === 0) { - sourceSet.push(wEntry); - } - }; - } - - while (sourceSet.length) { - var entry = sourceSet.pop(); - entries.push(entry); - forEach/* default */.A(entry['in'].reverse(), handleIn(entry)); - forEach/* default */.A(entry.out, handleOut(entry)); - } - - return map/* default */.A( - filter/* default */.A(entries, function (entry) { - return !entry.merged; - }), - function (entry) { - return pick/* default */.A(entry, ['vs', 'i', 'barycenter', 'weight']); - } - ); -} - -function mergeEntries(target, source) { - var sum = 0; - var weight = 0; - - if (target.weight) { - sum += target.barycenter * target.weight; - weight += target.weight; - } - - if (source.weight) { - sum += source.barycenter * source.weight; - weight += source.weight; - } - - target.vs = source.vs.concat(target.vs); - target.barycenter = sum / weight; - target.weight = weight; - target.i = Math.min(source.i, target.i); - source.merged = true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js - - - - - -function sort(entries, biasRight) { - var parts = partition(entries, function (entry) { - return has/* default */.A(entry, 'barycenter'); - }); - var sortable = parts.lhs, - unsortable = lodash_es_sortBy(parts.rhs, function (entry) { - return -entry.i; - }), - vs = [], - sum = 0, - weight = 0, - vsIndex = 0; - - sortable.sort(compareWithBias(!!biasRight)); - - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - - forEach/* default */.A(sortable, function (entry) { - vsIndex += entry.vs.length; - vs.push(entry.vs); - sum += entry.barycenter * entry.weight; - weight += entry.weight; - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - }); - - var result = { vs: flatten/* default */.A(vs) }; - if (weight) { - result.barycenter = sum / weight; - result.weight = weight; - } - return result; -} - -function consumeUnsortable(vs, unsortable, index) { - var last; - while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { - unsortable.pop(); - vs.push(last.vs); - index++; - } - return index; -} - -function compareWithBias(bias) { - return function (entryV, entryW) { - if (entryV.barycenter < entryW.barycenter) { - return -1; - } else if (entryV.barycenter > entryW.barycenter) { - return 1; - } - - return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; - }; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js - - - - - - - -function sortSubgraph(g, v, cg, biasRight) { - var movable = g.children(v); - var node = g.node(v); - var bl = node ? node.borderLeft : undefined; - var br = node ? node.borderRight : undefined; - var subgraphs = {}; - - if (bl) { - movable = filter/* default */.A(movable, function (w) { - return w !== bl && w !== br; - }); - } - - var barycenters = barycenter(g, movable); - forEach/* default */.A(barycenters, function (entry) { - if (g.children(entry.v).length) { - var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); - subgraphs[entry.v] = subgraphResult; - if (has/* default */.A(subgraphResult, 'barycenter')) { - mergeBarycenters(entry, subgraphResult); - } - } - }); - - var entries = resolveConflicts(barycenters, cg); - expandSubgraphs(entries, subgraphs); - - var result = sort(entries, biasRight); - - if (bl) { - result.vs = flatten/* default */.A([bl, result.vs, br]); - if (g.predecessors(bl).length) { - var blPred = g.node(g.predecessors(bl)[0]), - brPred = g.node(g.predecessors(br)[0]); - if (!has/* default */.A(result, 'barycenter')) { - result.barycenter = 0; - result.weight = 0; - } - result.barycenter = - (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); - result.weight += 2; - } - } - - return result; -} - -function expandSubgraphs(entries, subgraphs) { - forEach/* default */.A(entries, function (entry) { - entry.vs = flatten/* default */.A( - entry.vs.map(function (v) { - if (subgraphs[v]) { - return subgraphs[v].vs; - } - return v; - }) - ); - }); -} - -function mergeBarycenters(target, other) { - if (!isUndefined/* default */.A(target.barycenter)) { - target.barycenter = - (target.barycenter * target.weight + other.barycenter * other.weight) / - (target.weight + other.weight); - target.weight += other.weight; - } else { - target.barycenter = other.barycenter; - target.weight = other.weight; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js - - - - - - - - - - - -/* - * Applies heuristics to minimize edge crossings in the graph and sets the best - * order solution as an order attribute on each node. - * - * Pre-conditions: - * - * 1. Graph must be DAG - * 2. Graph nodes must be objects with a "rank" attribute - * 3. Graph edges must have the "weight" attribute - * - * Post-conditions: - * - * 1. Graph nodes will have an "order" attribute based on the results of the - * algorithm. - */ -function order(g) { - var maxRank = util_maxRank(g), - downLayerGraphs = buildLayerGraphs(g, range/* default */.A(1, maxRank + 1), 'inEdges'), - upLayerGraphs = buildLayerGraphs(g, range/* default */.A(maxRank - 1, -1, -1), 'outEdges'); - - var layering = initOrder(g); - assignOrder(g, layering); - - var bestCC = Number.POSITIVE_INFINITY, - best; - - for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { - sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); - - layering = buildLayerMatrix(g); - var cc = crossCount(g, layering); - if (cc < bestCC) { - lastBest = 0; - best = lodash_es_cloneDeep(layering); - bestCC = cc; - } - } - - assignOrder(g, best); -} - -function buildLayerGraphs(g, ranks, relationship) { - return map/* default */.A(ranks, function (rank) { - return buildLayerGraph(g, rank, relationship); - }); -} - -function sweepLayerGraphs(layerGraphs, biasRight) { - var cg = new graphlib/* Graph */.T(); - forEach/* default */.A(layerGraphs, function (lg) { - var root = lg.graph().root; - var sorted = sortSubgraph(lg, root, cg, biasRight); - forEach/* default */.A(sorted.vs, function (v, i) { - lg.node(v).order = i; - }); - addSubgraphConstraints(lg, cg, sorted.vs); - }); -} - -function assignOrder(g, layering) { - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, i) { - g.node(v).order = i; - }); - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js - - - - -function parentDummyChains(g) { - var postorderNums = parent_dummy_chains_postorder(g); - - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var edgeObj = node.edgeObj; - var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); - var path = pathData.path; - var lca = pathData.lca; - var pathIdx = 0; - var pathV = path[pathIdx]; - var ascending = true; - - while (v !== edgeObj.w) { - node = g.node(v); - - if (ascending) { - while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { - pathIdx++; - } - - if (pathV === lca) { - ascending = false; - } - } - - if (!ascending) { - while ( - pathIdx < path.length - 1 && - g.node((pathV = path[pathIdx + 1])).minRank <= node.rank - ) { - pathIdx++; - } - pathV = path[pathIdx]; - } - - g.setParent(v, pathV); - v = g.successors(v)[0]; - } - }); -} - -// Find a path from v to w through the lowest common ancestor (LCA). Return the -// full path and the LCA. -function findPath(g, postorderNums, v, w) { - var vPath = []; - var wPath = []; - var low = Math.min(postorderNums[v].low, postorderNums[w].low); - var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); - var parent; - var lca; - - // Traverse up from v to find the LCA - parent = v; - do { - parent = g.parent(parent); - vPath.push(parent); - } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); - lca = parent; - - // Traverse from w to LCA - parent = w; - while ((parent = g.parent(parent)) !== lca) { - wPath.push(parent); - } - - return { path: vPath.concat(wPath.reverse()), lca: lca }; -} - -function parent_dummy_chains_postorder(g) { - var result = {}; - var lim = 0; - - function dfs(v) { - var low = lim; - forEach/* default */.A(g.children(v), dfs); - result[v] = { low: low, lim: lim++ }; - } - forEach/* default */.A(g.children(), dfs); - - return result; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js -var _castFunction = __webpack_require__(99922); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js - - - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && (0,_baseForOwn/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee)); -} - -/* harmony default export */ const lodash_es_forOwn = (forOwn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules -var _baseFor = __webpack_require__(4574); -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js - - - - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : (0,_baseFor/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee), keysIn/* default */.A); -} - -/* harmony default export */ const lodash_es_forIn = (forIn); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js - - - - -/* - * This module provides coordinate assignment based on Brandes and Köpf, "Fast - * and Simple Horizontal Coordinate Assignment." - */ - - - -/* - * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" - * property. A type-1 conflict is one where a non-inner segment crosses an - * inner segment. An inner segment is an edge with both incident nodes marked - * with the "dummy" property. - * - * This algorithm scans layer by layer, starting with the second, for type-1 - * conflicts between the current layer and the previous layer. For each layer - * it scans the nodes from left to right until it reaches one that is incident - * on an inner segment. It then scans predecessors to determine if they have - * edges that cross that inner segment. At the end a final scan is done for all - * nodes on the current rank to see if they cross the last visited inner - * segment. - * - * This algorithm (safely) assumes that a dummy node will only be incident on a - * single node in the layers being scanned. - */ -function findType1Conflicts(g, layering) { - var conflicts = {}; - - function visitLayer(prevLayer, layer) { - var // last visited node in the previous layer that is incident on an inner - // segment. - k0 = 0, - // Tracks the last node in this layer scanned for crossings with a type-1 - // segment. - scanPos = 0, - prevLayerLength = prevLayer.length, - lastNode = lodash_es_last(layer); - - forEach/* default */.A(layer, function (v, i) { - var w = findOtherInnerSegmentNode(g, v), - k1 = w ? g.node(w).order : prevLayerLength; - - if (w || v === lastNode) { - forEach/* default */.A(layer.slice(scanPos, i + 1), function (scanNode) { - forEach/* default */.A(g.predecessors(scanNode), function (u) { - var uLabel = g.node(u), - uPos = uLabel.order; - if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { - addConflict(conflicts, u, scanNode); - } - }); - }); - // @ts-expect-error - scanPos = i + 1; - k0 = k1; - } - }); - - return layer; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findType2Conflicts(g, layering) { - var conflicts = {}; - - function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { - var v; - forEach/* default */.A(range/* default */.A(southPos, southEnd), function (i) { - v = south[i]; - if (g.node(v).dummy) { - forEach/* default */.A(g.predecessors(v), function (u) { - var uNode = g.node(u); - if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { - addConflict(conflicts, u, v); - } - }); - } - }); - } - - function visitLayer(north, south) { - var prevNorthPos = -1, - nextNorthPos, - southPos = 0; - - forEach/* default */.A(south, function (v, southLookahead) { - if (g.node(v).dummy === 'border') { - var predecessors = g.predecessors(v); - if (predecessors.length) { - nextNorthPos = g.node(predecessors[0]).order; - scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); - // @ts-expect-error - southPos = southLookahead; - prevNorthPos = nextNorthPos; - } - } - scan(south, southPos, south.length, nextNorthPos, north.length); - }); - - return south; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findOtherInnerSegmentNode(g, v) { - if (g.node(v).dummy) { - return lodash_es_find(g.predecessors(v), function (u) { - return g.node(u).dummy; - }); - } -} - -function addConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - - var conflictsV = conflicts[v]; - if (!conflictsV) { - conflicts[v] = conflictsV = {}; - } - conflictsV[w] = true; -} - -function hasConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - return has/* default */.A(conflicts[v], w); -} - -/* - * Try to align nodes into vertical "blocks" where possible. This algorithm - * attempts to align a node with one of its median neighbors. If the edge - * connecting a neighbor is a type-1 conflict then we ignore that possibility. - * If a previous node has already formed a block with a node after the node - * we're trying to form a block with, we also ignore that possibility - our - * blocks would be split in that scenario. - */ -function verticalAlignment(g, layering, conflicts, neighborFn) { - var root = {}, - align = {}, - pos = {}; - - // We cache the position here based on the layering because the graph and - // layering may be out of sync. The layering matrix is manipulated to - // generate different extreme alignments. - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, order) { - root[v] = v; - align[v] = v; - pos[v] = order; - }); - }); - - forEach/* default */.A(layering, function (layer) { - var prevIdx = -1; - forEach/* default */.A(layer, function (v) { - var ws = neighborFn(v); - if (ws.length) { - ws = lodash_es_sortBy(ws, function (w) { - return pos[w]; - }); - var mp = (ws.length - 1) / 2; - for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { - var w = ws[i]; - if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { - align[w] = v; - align[v] = root[v] = root[w]; - prevIdx = pos[w]; - } - } - } - }); - }); - - return { root: root, align: align }; -} - -function horizontalCompaction(g, layering, root, align, reverseSep) { - // This portion of the algorithm differs from BK due to a number of problems. - // Instead of their algorithm we construct a new block graph and do two - // sweeps. The first sweep places blocks with the smallest possible - // coordinates. The second sweep removes unused space by moving blocks to the - // greatest coordinates without violating separation. - var xs = {}, - blockG = buildBlockGraph(g, layering, root, reverseSep), - borderType = reverseSep ? 'borderLeft' : 'borderRight'; - - function iterate(setXsFunc, nextNodesFunc) { - var stack = blockG.nodes(); - var elem = stack.pop(); - var visited = {}; - while (elem) { - if (visited[elem]) { - setXsFunc(elem); - } else { - visited[elem] = true; - stack.push(elem); - stack = stack.concat(nextNodesFunc(elem)); - } - - elem = stack.pop(); - } - } - - // First pass, assign smallest coordinates - function pass1(elem) { - xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { - return Math.max(acc, xs[e.v] + blockG.edge(e)); - }, 0); - } - - // Second pass, assign greatest coordinates - function pass2(elem) { - var min = blockG.outEdges(elem).reduce(function (acc, e) { - return Math.min(acc, xs[e.w] - blockG.edge(e)); - }, Number.POSITIVE_INFINITY); - - var node = g.node(elem); - if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { - xs[elem] = Math.max(xs[elem], min); - } - } - - iterate(pass1, blockG.predecessors.bind(blockG)); - iterate(pass2, blockG.successors.bind(blockG)); - - // Assign x coordinates to all nodes - forEach/* default */.A(align, function (v) { - xs[v] = xs[root[v]]; - }); - - return xs; -} - -function buildBlockGraph(g, layering, root, reverseSep) { - var blockGraph = new graphlib/* Graph */.T(), - graphLabel = g.graph(), - sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); - - forEach/* default */.A(layering, function (layer) { - var u; - forEach/* default */.A(layer, function (v) { - var vRoot = root[v]; - blockGraph.setNode(vRoot); - if (u) { - var uRoot = root[u], - prevMax = blockGraph.edge(uRoot, vRoot); - blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); - } - u = v; - }); - }); - - return blockGraph; -} - -/* - * Returns the alignment that has the smallest width of the given alignments. - */ -function findSmallestWidthAlignment(g, xss) { - return lodash_es_minBy(values/* default */.A(xss), function (xs) { - var max = Number.NEGATIVE_INFINITY; - var min = Number.POSITIVE_INFINITY; - - lodash_es_forIn(xs, function (x, v) { - var halfWidth = width(g, v) / 2; - - max = Math.max(x + halfWidth, max); - min = Math.min(x - halfWidth, min); - }); - - return max - min; - }); -} - -/* - * Align the coordinates of each of the layout alignments such that - * left-biased alignments have their minimum coordinate at the same point as - * the minimum coordinate of the smallest width alignment and right-biased - * alignments have their maximum coordinate at the same point as the maximum - * coordinate of the smallest width alignment. - */ -function alignCoordinates(xss, alignTo) { - var alignToVals = values/* default */.A(alignTo), - alignToMin = lodash_es_min(alignToVals), - alignToMax = lodash_es_max(alignToVals); - - forEach/* default */.A(['u', 'd'], function (vert) { - forEach/* default */.A(['l', 'r'], function (horiz) { - var alignment = vert + horiz, - xs = xss[alignment], - delta; - if (xs === alignTo) return; - - var xsVals = values/* default */.A(xs); - delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); - - if (delta) { - xss[alignment] = lodash_es_mapValues(xs, function (x) { - return x + delta; - }); - } - }); - }); -} - -function balance(xss, align) { - return lodash_es_mapValues(xss.ul, function (ignore, v) { - if (align) { - return xss[align.toLowerCase()][v]; - } else { - var xs = lodash_es_sortBy(map/* default */.A(xss, v)); - return (xs[1] + xs[2]) / 2; - } - }); -} - -function positionX(g) { - var layering = buildLayerMatrix(g); - var conflicts = merge/* default */.A(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); - - var xss = {}; - var adjustedLayering; - forEach/* default */.A(['u', 'd'], function (vert) { - adjustedLayering = vert === 'u' ? layering : values/* default */.A(layering).reverse(); - forEach/* default */.A(['l', 'r'], function (horiz) { - if (horiz === 'r') { - adjustedLayering = map/* default */.A(adjustedLayering, function (inner) { - return values/* default */.A(inner).reverse(); - }); - } - - var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); - var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); - var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); - if (horiz === 'r') { - xs = lodash_es_mapValues(xs, function (x) { - return -x; - }); - } - xss[vert + horiz] = xs; - }); - }); - - var smallestWidth = findSmallestWidthAlignment(g, xss); - alignCoordinates(xss, smallestWidth); - return balance(xss, g.graph().align); -} - -function sep(nodeSep, edgeSep, reverseSep) { - return function (g, v, w) { - var vLabel = g.node(v); - var wLabel = g.node(w); - var sum = 0; - var delta; - - sum += vLabel.width / 2; - if (has/* default */.A(vLabel, 'labelpos')) { - switch (vLabel.labelpos.toLowerCase()) { - case 'l': - delta = -vLabel.width / 2; - break; - case 'r': - delta = vLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; - sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; - - sum += wLabel.width / 2; - if (has/* default */.A(wLabel, 'labelpos')) { - switch (wLabel.labelpos.toLowerCase()) { - case 'l': - delta = wLabel.width / 2; - break; - case 'r': - delta = -wLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - return sum; - }; -} - -function width(g, v) { - return g.node(v).width; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js - - - - - - -function position(g) { - g = asNonCompoundGraph(g); - - positionY(g); - lodash_es_forOwn(positionX(g), function (x, v) { - g.node(v).x = x; - }); -} - -function positionY(g) { - var layering = buildLayerMatrix(g); - var rankSep = g.graph().ranksep; - var prevY = 0; - forEach/* default */.A(layering, function (layer) { - var maxHeight = lodash_es_max( - map/* default */.A(layer, function (v) { - return g.node(v).height; - }) - ); - forEach/* default */.A(layer, function (v) { - g.node(v).y = prevY + maxHeight / 2; - }); - prevY += maxHeight + rankSep; - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js - - - - - - - - - - - - - - - -function layout(g, opts) { - var time = opts && opts.debugTiming ? util_time : notime; - time('layout', function () { - var layoutGraph = time(' buildLayoutGraph', function () { - return buildLayoutGraph(g); - }); - time(' runLayout', function () { - runLayout(layoutGraph, time); - }); - time(' updateInputGraph', function () { - updateInputGraph(g, layoutGraph); - }); - }); -} - -function runLayout(g, time) { - time(' makeSpaceForEdgeLabels', function () { - makeSpaceForEdgeLabels(g); - }); - time(' removeSelfEdges', function () { - removeSelfEdges(g); - }); - time(' acyclic', function () { - run(g); - }); - time(' nestingGraph.run', function () { - nesting_graph_run(g); - }); - time(' rank', function () { - rank(asNonCompoundGraph(g)); - }); - time(' injectEdgeLabelProxies', function () { - injectEdgeLabelProxies(g); - }); - time(' removeEmptyRanks', function () { - removeEmptyRanks(g); - }); - time(' nestingGraph.cleanup', function () { - cleanup(g); - }); - time(' normalizeRanks', function () { - normalizeRanks(g); - }); - time(' assignRankMinMax', function () { - assignRankMinMax(g); - }); - time(' removeEdgeLabelProxies', function () { - removeEdgeLabelProxies(g); - }); - time(' normalize.run', function () { - normalize_run(g); - }); - time(' parentDummyChains', function () { - parentDummyChains(g); - }); - time(' addBorderSegments', function () { - addBorderSegments(g); - }); - time(' order', function () { - order(g); - }); - time(' insertSelfEdges', function () { - insertSelfEdges(g); - }); - time(' adjustCoordinateSystem', function () { - adjust(g); - }); - time(' position', function () { - position(g); - }); - time(' positionSelfEdges', function () { - positionSelfEdges(g); - }); - time(' removeBorderNodes', function () { - removeBorderNodes(g); - }); - time(' normalize.undo', function () { - normalize_undo(g); - }); - time(' fixupEdgeLabelCoords', function () { - fixupEdgeLabelCoords(g); - }); - time(' undoCoordinateSystem', function () { - coordinate_system_undo(g); - }); - time(' translateGraph', function () { - translateGraph(g); - }); - time(' assignNodeIntersects', function () { - assignNodeIntersects(g); - }); - time(' reversePoints', function () { - reversePointsForReversedEdges(g); - }); - time(' acyclic.undo', function () { - undo(g); - }); -} - -/* - * Copies final layout information from the layout graph back to the input - * graph. This process only copies whitelisted attributes from the layout graph - * to the input graph, so it serves as a good place to determine what - * attributes can influence layout. - */ -function updateInputGraph(inputGraph, layoutGraph) { - forEach/* default */.A(inputGraph.nodes(), function (v) { - var inputLabel = inputGraph.node(v); - var layoutLabel = layoutGraph.node(v); - - if (inputLabel) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - - if (layoutGraph.children(v).length) { - inputLabel.width = layoutLabel.width; - inputLabel.height = layoutLabel.height; - } - } - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var inputLabel = inputGraph.edge(e); - var layoutLabel = layoutGraph.edge(e); - - inputLabel.points = layoutLabel.points; - if (has/* default */.A(layoutLabel, 'x')) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - } - }); - - inputGraph.graph().width = layoutGraph.graph().width; - inputGraph.graph().height = layoutGraph.graph().height; -} - -var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; -var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; -var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; -var nodeNumAttrs = ['width', 'height']; -var nodeDefaults = { width: 0, height: 0 }; -var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; -var edgeDefaults = { - minlen: 1, - weight: 1, - width: 0, - height: 0, - labeloffset: 10, - labelpos: 'r', -}; -var edgeAttrs = ['labelpos']; - -/* - * Constructs a new graph from the input graph, which can be used for layout. - * This process copies only whitelisted attributes from the input graph to the - * layout graph. Thus this function serves as a good place to determine what - * attributes can influence layout. - */ -function buildLayoutGraph(inputGraph) { - var g = new graphlib/* Graph */.T({ multigraph: true, compound: true }); - var graph = canonicalize(inputGraph.graph()); - - g.setGraph( - merge/* default */.A({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.A(graph, graphAttrs)) - ); - - forEach/* default */.A(inputGraph.nodes(), function (v) { - var node = canonicalize(inputGraph.node(v)); - g.setNode(v, defaults/* default */.A(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); - g.setParent(v, inputGraph.parent(v)); - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var edge = canonicalize(inputGraph.edge(e)); - g.setEdge( - e, - merge/* default */.A({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.A(edge, edgeAttrs)) - ); - }); - - return g; -} - -/* - * This idea comes from the Gansner paper: to account for edge labels in our - * layout we split each rank in half by doubling minlen and halving ranksep. - * Then we can place labels at these mid-points between nodes. - * - * We also add some minimal padding to the width to push the label for the edge - * away from the edge itself a bit. - */ -function makeSpaceForEdgeLabels(g) { - var graph = g.graph(); - graph.ranksep /= 2; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - edge.minlen *= 2; - if (edge.labelpos.toLowerCase() !== 'c') { - if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { - edge.width += edge.labeloffset; - } else { - edge.height += edge.labeloffset; - } - } - }); -} - -/* - * Creates temporary dummy nodes that capture the rank in which each edge's - * label is going to, if it has one of non-zero width and height. We do this - * so that we can safely remove empty ranks while preserving balance for the - * label's position. - */ -function injectEdgeLabelProxies(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.width && edge.height) { - var v = g.node(e.v); - var w = g.node(e.w); - var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; - addDummyNode(g, 'edge-proxy', label, '_ep'); - } - }); -} - -function assignRankMinMax(g) { - var maxRank = 0; - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.borderTop) { - node.minRank = g.node(node.borderTop).rank; - node.maxRank = g.node(node.borderBottom).rank; - // @ts-expect-error - maxRank = lodash_es_max(maxRank, node.maxRank); - } - }); - g.graph().maxRank = maxRank; -} - -function removeEdgeLabelProxies(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'edge-proxy') { - g.edge(node.e).labelRank = node.rank; - g.removeNode(v); - } - }); -} - -function translateGraph(g) { - var minX = Number.POSITIVE_INFINITY; - var maxX = 0; - var minY = Number.POSITIVE_INFINITY; - var maxY = 0; - var graphLabel = g.graph(); - var marginX = graphLabel.marginx || 0; - var marginY = graphLabel.marginy || 0; - - function getExtremes(attrs) { - var x = attrs.x; - var y = attrs.y; - var w = attrs.width; - var h = attrs.height; - minX = Math.min(minX, x - w / 2); - maxX = Math.max(maxX, x + w / 2); - minY = Math.min(minY, y - h / 2); - maxY = Math.max(maxY, y + h / 2); - } - - forEach/* default */.A(g.nodes(), function (v) { - getExtremes(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - getExtremes(edge); - } - }); - - minX -= marginX; - minY -= marginY; - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - node.x -= minX; - node.y -= minY; - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, function (p) { - p.x -= minX; - p.y -= minY; - }); - if (has/* default */.A(edge, 'x')) { - edge.x -= minX; - } - if (has/* default */.A(edge, 'y')) { - edge.y -= minY; - } - }); - - graphLabel.width = maxX - minX + marginX; - graphLabel.height = maxY - minY + marginY; -} - -function assignNodeIntersects(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - var nodeV = g.node(e.v); - var nodeW = g.node(e.w); - var p1, p2; - if (!edge.points) { - edge.points = []; - p1 = nodeW; - p2 = nodeV; - } else { - p1 = edge.points[0]; - p2 = edge.points[edge.points.length - 1]; - } - edge.points.unshift(intersectRect(nodeV, p1)); - edge.points.push(intersectRect(nodeW, p2)); - }); -} - -function fixupEdgeLabelCoords(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - if (edge.labelpos === 'l' || edge.labelpos === 'r') { - edge.width -= edge.labeloffset; - } - switch (edge.labelpos) { - case 'l': - edge.x -= edge.width / 2 + edge.labeloffset; - break; - case 'r': - edge.x += edge.width / 2 + edge.labeloffset; - break; - } - } - }); -} - -function reversePointsForReversedEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.reversed) { - edge.points.reverse(); - } - }); -} - -function removeBorderNodes(g) { - forEach/* default */.A(g.nodes(), function (v) { - if (g.children(v).length) { - var node = g.node(v); - var t = g.node(node.borderTop); - var b = g.node(node.borderBottom); - var l = g.node(lodash_es_last(node.borderLeft)); - var r = g.node(lodash_es_last(node.borderRight)); - - node.width = Math.abs(r.x - l.x); - node.height = Math.abs(b.y - t.y); - node.x = l.x + node.width / 2; - node.y = t.y + node.height / 2; - } - }); - - forEach/* default */.A(g.nodes(), function (v) { - if (g.node(v).dummy === 'border') { - g.removeNode(v); - } - }); -} - -function removeSelfEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - if (e.v === e.w) { - var node = g.node(e.v); - if (!node.selfEdges) { - node.selfEdges = []; - } - node.selfEdges.push({ e: e, label: g.edge(e) }); - g.removeEdge(e); - } - }); -} - -function insertSelfEdges(g) { - var layers = buildLayerMatrix(g); - forEach/* default */.A(layers, function (layer) { - var orderShift = 0; - forEach/* default */.A(layer, function (v, i) { - var node = g.node(v); - node.order = i + orderShift; - forEach/* default */.A(node.selfEdges, function (selfEdge) { - addDummyNode( - g, - 'selfedge', - { - width: selfEdge.label.width, - height: selfEdge.label.height, - rank: node.rank, - order: i + ++orderShift, - e: selfEdge.e, - label: selfEdge.label, - }, - '_se' - ); - }); - delete node.selfEdges; - }); - }); -} - -function positionSelfEdges(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'selfedge') { - var selfNode = g.node(node.e.v); - var x = selfNode.x + selfNode.width / 2; - var y = selfNode.y; - var dx = node.x - x; - var dy = selfNode.height / 2; - g.setEdge(node.e, node.label); - g.removeNode(v); - node.label.points = [ - { x: x + (2 * dx) / 3, y: y - dy }, - { x: x + (5 * dx) / 6, y: y - dy }, - { x: x + dx, y: y }, - { x: x + (5 * dx) / 6, y: y + dy }, - { x: x + (2 * dx) / 3, y: y + dy }, - ]; - node.label.x = node.x; - node.label.y = node.y; - } - }); -} - -function selectNumberAttrs(obj, attrs) { - return lodash_es_mapValues(pick/* default */.A(obj, attrs), Number); -} - -function canonicalize(attrs) { - var newAttrs = {}; - forEach/* default */.A(attrs, function (v, k) { - newAttrs[k.toLowerCase()] = v; - }); - return newAttrs; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js - - - - - - - - -/***/ }), - -/***/ 73046: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - T: () => (/* binding */ Graph) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js -var isFunction = __webpack_require__(89610); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js -var isEmpty = __webpack_require__(66401); -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -/* harmony default export */ const _baseIsNaN = (baseIsNaN); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -/* harmony default export */ const _strictIndexOf = (strictIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js - - - - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? _strictIndexOf(array, value, fromIndex) - : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); -} - -/* harmony default export */ const _baseIndexOf = (baseIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js - - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && _baseIndexOf(array, value, 0) > -1; -} - -/* harmony default export */ const _arrayIncludes = (arrayIncludes); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js -var _Set = __webpack_require__(39857); -;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js -/** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ -function noop() { - // No operation performed. -} - -/* harmony default export */ const lodash_es_noop = (noop); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { - return new _Set/* default */.A(values); -}; - -/* harmony default export */ const _createSet = (createSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js - - - - - - - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = _arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = _arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : _createSet(array); - if (set) { - return (0,_setToArray/* default */.A)(set); - } - isCommon = false; - includes = _cacheHas/* default */.A; - seen = new _SetCache/* default */.A; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -/* harmony default export */ const _baseUniq = (baseUniq); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js -var isArrayLikeObject = __webpack_require__(53533); -;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js - - - - - -/** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ -var union = (0,_baseRest/* default */.A)(function(arrays) { - return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); -}); - -/* harmony default export */ const lodash_es_union = (union); - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js - - -var DEFAULT_EDGE_NAME = '\x00'; -var GRAPH_NODE = '\x00'; -var EDGE_KEY_DELIM = '\x01'; - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. -class Graph { - constructor(opts = {}) { - this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; - this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; - this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; - - // Label for the graph itself - this._label = undefined; - - // Defaults to be set when creating a new node - this._defaultNodeLabelFn = constant/* default */.A(undefined); - - // Defaults to be set when creating a new edge - this._defaultEdgeLabelFn = constant/* default */.A(undefined); - - // v -> label - this._nodes = {}; - - if (this._isCompound) { - // v -> parent - this._parent = {}; - - // v -> children - this._children = {}; - this._children[GRAPH_NODE] = {}; - } - - // v -> edgeObj - this._in = {}; - - // u -> v -> Number - this._preds = {}; - - // v -> edgeObj - this._out = {}; - - // v -> w -> Number - this._sucs = {}; - - // e -> edgeObj - this._edgeObjs = {}; - - // e -> label - this._edgeLabels = {}; - } - /* === Graph functions ========= */ - isDirected() { - return this._isDirected; - } - isMultigraph() { - return this._isMultigraph; - } - isCompound() { - return this._isCompound; - } - setGraph(label) { - this._label = label; - return this; - } - graph() { - return this._label; - } - /* === Node functions ========== */ - setDefaultNodeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultNodeLabelFn = newDefault; - return this; - } - nodeCount() { - return this._nodeCount; - } - nodes() { - return keys/* default */.A(this._nodes); - } - sources() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._in[v]); - }); - } - sinks() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._out[v]); - }); - } - setNodes(vs, value) { - var args = arguments; - var self = this; - forEach/* default */.A(vs, function (v) { - if (args.length > 1) { - self.setNode(v, value); - } else { - self.setNode(v); - } - }); - return this; - } - setNode(v, value) { - if (has/* default */.A(this._nodes, v)) { - if (arguments.length > 1) { - this._nodes[v] = value; - } - return this; - } - - // @ts-expect-error - this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); - if (this._isCompound) { - this._parent[v] = GRAPH_NODE; - this._children[v] = {}; - this._children[GRAPH_NODE][v] = true; - } - this._in[v] = {}; - this._preds[v] = {}; - this._out[v] = {}; - this._sucs[v] = {}; - ++this._nodeCount; - return this; - } - node(v) { - return this._nodes[v]; - } - hasNode(v) { - return has/* default */.A(this._nodes, v); - } - removeNode(v) { - var self = this; - if (has/* default */.A(this._nodes, v)) { - var removeEdge = function (e) { - self.removeEdge(self._edgeObjs[e]); - }; - delete this._nodes[v]; - if (this._isCompound) { - this._removeFromParentsChildList(v); - delete this._parent[v]; - forEach/* default */.A(this.children(v), function (child) { - self.setParent(child); - }); - delete this._children[v]; - } - forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); - delete this._in[v]; - delete this._preds[v]; - forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); - delete this._out[v]; - delete this._sucs[v]; - --this._nodeCount; - } - return this; - } - setParent(v, parent) { - if (!this._isCompound) { - throw new Error('Cannot set parent in a non-compound graph'); - } - - if (isUndefined/* default */.A(parent)) { - parent = GRAPH_NODE; - } else { - // Coerce parent to string - parent += ''; - for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { - if (ancestor === v) { - throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); - } - } - - this.setNode(parent); - } - - this.setNode(v); - this._removeFromParentsChildList(v); - this._parent[v] = parent; - this._children[parent][v] = true; - return this; - } - _removeFromParentsChildList(v) { - delete this._children[this._parent[v]][v]; - } - parent(v) { - if (this._isCompound) { - var parent = this._parent[v]; - if (parent !== GRAPH_NODE) { - return parent; - } - } - } - children(v) { - if (isUndefined/* default */.A(v)) { - v = GRAPH_NODE; - } - - if (this._isCompound) { - var children = this._children[v]; - if (children) { - return keys/* default */.A(children); - } - } else if (v === GRAPH_NODE) { - return this.nodes(); - } else if (this.hasNode(v)) { - return []; - } - } - predecessors(v) { - var predsV = this._preds[v]; - if (predsV) { - return keys/* default */.A(predsV); - } - } - successors(v) { - var sucsV = this._sucs[v]; - if (sucsV) { - return keys/* default */.A(sucsV); - } - } - neighbors(v) { - var preds = this.predecessors(v); - if (preds) { - return lodash_es_union(preds, this.successors(v)); - } - } - isLeaf(v) { - var neighbors; - if (this.isDirected()) { - neighbors = this.successors(v); - } else { - neighbors = this.neighbors(v); - } - return neighbors.length === 0; - } - filterNodes(filter) { - // @ts-expect-error - var copy = new this.constructor({ - directed: this._isDirected, - multigraph: this._isMultigraph, - compound: this._isCompound, - }); - - copy.setGraph(this.graph()); - - var self = this; - forEach/* default */.A(this._nodes, function (value, v) { - if (filter(v)) { - copy.setNode(v, value); - } - }); - - forEach/* default */.A(this._edgeObjs, function (e) { - // @ts-expect-error - if (copy.hasNode(e.v) && copy.hasNode(e.w)) { - copy.setEdge(e, self.edge(e)); - } - }); - - var parents = {}; - function findParent(v) { - var parent = self.parent(v); - if (parent === undefined || copy.hasNode(parent)) { - parents[v] = parent; - return parent; - } else if (parent in parents) { - return parents[parent]; - } else { - return findParent(parent); - } - } - - if (this._isCompound) { - forEach/* default */.A(copy.nodes(), function (v) { - copy.setParent(v, findParent(v)); - }); - } - - return copy; - } - /* === Edge functions ========== */ - setDefaultEdgeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultEdgeLabelFn = newDefault; - return this; - } - edgeCount() { - return this._edgeCount; - } - edges() { - return values/* default */.A(this._edgeObjs); - } - setPath(vs, value) { - var self = this; - var args = arguments; - reduce/* default */.A(vs, function (v, w) { - if (args.length > 1) { - self.setEdge(v, w, value); - } else { - self.setEdge(v, w); - } - return w; - }); - return this; - } - /* - * setEdge(v, w, [value, [name]]) - * setEdge({ v, w, [name] }, [value]) - */ - setEdge() { - var v, w, name, value; - var valueSpecified = false; - var arg0 = arguments[0]; - - if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { - v = arg0.v; - w = arg0.w; - name = arg0.name; - if (arguments.length === 2) { - value = arguments[1]; - valueSpecified = true; - } - } else { - v = arg0; - w = arguments[1]; - name = arguments[3]; - if (arguments.length > 2) { - value = arguments[2]; - valueSpecified = true; - } - } - - v = '' + v; - w = '' + w; - if (!isUndefined/* default */.A(name)) { - name = '' + name; - } - - var e = edgeArgsToId(this._isDirected, v, w, name); - if (has/* default */.A(this._edgeLabels, e)) { - if (valueSpecified) { - this._edgeLabels[e] = value; - } - return this; - } - - if (!isUndefined/* default */.A(name) && !this._isMultigraph) { - throw new Error('Cannot set a named edge when isMultigraph = false'); - } - - // It didn't exist, so we need to create it. - // First ensure the nodes exist. - this.setNode(v); - this.setNode(w); - - // @ts-expect-error - this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); - - var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); - // Ensure we add undirected edges in a consistent way. - v = edgeObj.v; - w = edgeObj.w; - - Object.freeze(edgeObj); - this._edgeObjs[e] = edgeObj; - incrementOrInitEntry(this._preds[w], v); - incrementOrInitEntry(this._sucs[v], w); - this._in[w][e] = edgeObj; - this._out[v][e] = edgeObj; - this._edgeCount++; - return this; - } - edge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return this._edgeLabels[e]; - } - hasEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return has/* default */.A(this._edgeLabels, e); - } - removeEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - var edge = this._edgeObjs[e]; - if (edge) { - v = edge.v; - w = edge.w; - delete this._edgeLabels[e]; - delete this._edgeObjs[e]; - decrementOrRemoveEntry(this._preds[w], v); - decrementOrRemoveEntry(this._sucs[v], w); - delete this._in[w][e]; - delete this._out[v][e]; - this._edgeCount--; - } - return this; - } - inEdges(v, u) { - var inV = this._in[v]; - if (inV) { - var edges = values/* default */.A(inV); - if (!u) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.v === u; - }); - } - } - outEdges(v, w) { - var outV = this._out[v]; - if (outV) { - var edges = values/* default */.A(outV); - if (!w) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.w === w; - }); - } - } - nodeEdges(v, w) { - var inEdges = this.inEdges(v, w); - if (inEdges) { - return inEdges.concat(this.outEdges(v, w)); - } - } -} - -/* Number of nodes in the graph. Should only be changed by the implementation. */ -Graph.prototype._nodeCount = 0; - -/* Number of edges in the graph. Should only be changed by the implementation. */ -Graph.prototype._edgeCount = 0; - -function incrementOrInitEntry(map, k) { - if (map[k]) { - map[k]++; - } else { - map[k] = 1; - } -} - -function decrementOrRemoveEntry(map, k) { - if (!--map[k]) { - delete map[k]; - } -} - -function edgeArgsToId(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); -} - -function edgeArgsToObj(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - var edgeObj = { v: v, w: w }; - if (name) { - edgeObj.name = name; - } - return edgeObj; -} - -function edgeObjToId(isDirected, edgeObj) { - return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); -} - - -/***/ }), - -/***/ 697: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) -/* harmony export */ }); -/* unused harmony export version */ -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); -// Includes only the "core" of graphlib - - - -const version = '2.1.9-pre'; - - - - -/***/ }), - -/***/ 62062: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _SetCache) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules -var _MapCache = __webpack_require__(29471); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -/* harmony default export */ const _setCacheAdd = (setCacheAdd); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -/* harmony default export */ const _setCacheHas = (setCacheHas); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js - - - - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new _MapCache/* default */.A; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; -SetCache.prototype.has = _setCacheHas; - -/* harmony default export */ const _SetCache = (SetCache); - - -/***/ }), - -/***/ 72641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); - - -/***/ }), - -/***/ 2634: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); - - -/***/ }), - -/***/ 45572: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); - - -/***/ }), - -/***/ 76912: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); - - -/***/ }), - -/***/ 91641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseClone) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js -var _arrayEach = __webpack_require__(72641); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js -var _copyObject = __webpack_require__(22031); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js - - - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssign = (baseAssign); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js - - - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssignIn = (baseAssignIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js -var _cloneBuffer = __webpack_require__(80154); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js -var _copyArray = __webpack_require__(39759); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js -var _getSymbols = __webpack_require__(14792); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js - - - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); -} - -/* harmony default export */ const _copySymbols = (copySymbols); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js -var _getPrototype = __webpack_require__(15647); -// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js -var stubArray = __webpack_require__(13153); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js - - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { - var result = []; - while (object) { - (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); - object = (0,_getPrototype/* default */.A)(object); - } - return result; -}; - -/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js - - - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); -} - -/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js -var _baseGetAllKeys = __webpack_require__(33831); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js - - - - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); -} - -/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/* harmony default export */ const _initCloneArray = (initCloneArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js -var _cloneArrayBuffer = __webpack_require__(90565); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js - - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -/* harmony default export */ const _cloneDataView = (cloneDataView); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -/* harmony default export */ const _cloneRegExp = (cloneRegExp); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js - - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -/* harmony default export */ const _cloneSymbol = (cloneSymbol); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js -var _cloneTypedArray = __webpack_require__(1801); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js - - - - - - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return (0,_cloneArrayBuffer/* default */.A)(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return _cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return (0,_cloneTypedArray/* default */.A)(object, isDeep); - - case mapTag: - return new Ctor; - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return _cloneRegExp(object); - - case setTag: - return new Ctor; - - case symbolTag: - return _cloneSymbol(object); - } -} - -/* harmony default export */ const _initCloneByTag = (initCloneByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules -var _initCloneObject = __webpack_require__(18598); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js - - - -/** `Object#toString` result references. */ -var _baseIsMap_mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; -} - -/* harmony default export */ const _baseIsMap = (baseIsMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js -var _nodeUtil = __webpack_require__(64841); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js - - - - -/* Node.js helper references. */ -var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; - -/* harmony default export */ const lodash_es_isMap = (isMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js - - - -/** `Object#toString` result references. */ -var _baseIsSet_setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; -} - -/* harmony default export */ const _baseIsSet = (baseIsSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js - - - - -/* Node.js helper references. */ -var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; - -/* harmony default export */ const lodash_es_isSet = (isSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js - - - - - - - - - - - - - - - - - - - - - - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - _baseClone_boolTag = '[object Boolean]', - _baseClone_dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - _baseClone_mapTag = '[object Map]', - _baseClone_numberTag = '[object Number]', - objectTag = '[object Object]', - _baseClone_regexpTag = '[object RegExp]', - _baseClone_setTag = '[object Set]', - _baseClone_stringTag = '[object String]', - _baseClone_symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var _baseClone_arrayBufferTag = '[object ArrayBuffer]', - _baseClone_dataViewTag = '[object DataView]', - _baseClone_float32Tag = '[object Float32Array]', - _baseClone_float64Tag = '[object Float64Array]', - _baseClone_int8Tag = '[object Int8Array]', - _baseClone_int16Tag = '[object Int16Array]', - _baseClone_int32Tag = '[object Int32Array]', - _baseClone_uint8Tag = '[object Uint8Array]', - _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', - _baseClone_uint16Tag = '[object Uint16Array]', - _baseClone_uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = -cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = -cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = -cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = -cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = -cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = -cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = -cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = -cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = -cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!(0,isObject/* default */.A)(value)) { - return value; - } - var isArr = (0,isArray/* default */.A)(value); - if (isArr) { - result = _initCloneArray(value); - if (!isDeep) { - return (0,_copyArray/* default */.A)(value, result); - } - } else { - var tag = (0,_getTag/* default */.A)(value), - isFunc = tag == funcTag || tag == genTag; - - if ((0,isBuffer/* default */.A)(value)) { - return (0,_cloneBuffer/* default */.A)(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); - if (!isDeep) { - return isFlat - ? _copySymbolsIn(value, _baseAssignIn(result, value)) - : _copySymbols(value, _baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = _initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new _Stack/* default */.A); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (lodash_es_isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (lodash_es_isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } - - var keysFunc = isFull - ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) - : (isFlat ? keysIn/* default */.A : keys/* default */.A); - - var props = isArr ? undefined : keysFunc(value); - (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -/* harmony default export */ const _baseClone = (baseClone); - - -/***/ }), - -/***/ 6240: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseEach) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js - - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!(0,isArrayLike/* default */.A)(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -/* harmony default export */ const _createBaseEach = (createBaseEach); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js - - - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = _createBaseEach(_baseForOwn/* default */.A); - -/* harmony default export */ const _baseEach = (baseEach); - - -/***/ }), - -/***/ 25707: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); - - -/***/ }), - -/***/ 13588: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseFlatten) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules -var isArguments = __webpack_require__(52274); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js - - - - -/** Built-in value references. */ -var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -/* harmony default export */ const _isFlattenable = (isFlattenable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js - - - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = _isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - (0,_arrayPush/* default */.A)(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -/* harmony default export */ const _baseFlatten = (baseFlatten); - - -/***/ }), - -/***/ 79841: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); - - -/***/ }), - -/***/ 66318: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); - - -/***/ }), - -/***/ 33831: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); - - -/***/ }), - -/***/ 49574: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseIteratee) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arraySome = (arraySome); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js - - - - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!_arraySome(other, function(othValue, othIndex) { - if (!(0,_cacheHas/* default */.A)(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalArrays = (equalArrays); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js -var _Uint8Array = __webpack_require__(43988); -// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js -var eq = __webpack_require__(66984); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -/* harmony default export */ const _mapToArray = (mapToArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _equalByTag_COMPARE_PARTIAL_FLAG = 1, - _equalByTag_COMPARE_UNORDERED_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return (0,eq/* default */.A)(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = _mapToArray; - - case setTag: - var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; - convert || (convert = _setToArray/* default */.A); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -/* harmony default export */ const _equalByTag = (equalByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js - - -/** Used to compose bitmasks for value comparisons. */ -var _equalObjects_COMPARE_PARTIAL_FLAG = 1; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, - objProps = (0,_getAllKeys/* default */.A)(object), - objLength = objProps.length, - othProps = (0,_getAllKeys/* default */.A)(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalObjects = (equalObjects); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules -var isTypedArray = __webpack_require__(33858); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js - - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var _baseIsEqualDeep_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = (0,isArray/* default */.A)(object), - othIsArr = (0,isArray/* default */.A)(other), - objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), - othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && (0,isBuffer/* default */.A)(object)) { - if (!(0,isBuffer/* default */.A)(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new _Stack/* default */.A); - return (objIsArr || (0,isTypedArray/* default */.A)(object)) - ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new _Stack/* default */.A); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new _Stack/* default */.A); - return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js - - - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { - return value !== value && other !== other; - } - return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -/* harmony default export */ const _baseIsEqual = (baseIsEqual); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, - _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new _Stack/* default */.A; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -/* harmony default export */ const _baseIsMatch = (baseIsMatch); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js - - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !(0,isObject/* default */.A)(value); -} - -/* harmony default export */ const _isStrictComparable = (isStrictComparable); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js - - - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = (0,keys/* default */.A)(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, _isStrictComparable(value)]; - } - return result; -} - -/* harmony default export */ const _getMatchData = (getMatchData); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js - - - - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = _getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return _matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || _baseIsMatch(object, source, matchData); - }; -} - -/* harmony default export */ const _baseMatches = (baseMatches); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js - - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); - return result === undefined ? defaultValue : result; -} - -/* harmony default export */ const lodash_es_get = (get); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, - _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { - return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); - } - return function(object) { - var objValue = lodash_es_get(object, path); - return (objValue === undefined && objValue === srcValue) - ? (0,hasIn/* default */.A)(object, path) - : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); - }; -} - -/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js - - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return (0,_baseGet/* default */.A)(object, path); - }; -} - -/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js - - - - - -/** - * Creates a function that returns the value at `path` of a given object. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - * @example - * - * var objects = [ - * { 'a': { 'b': 2 } }, - * { 'a': { 'b': 1 } } - * ]; - * - * _.map(objects, _.property('a.b')); - * // => [2, 1] - * - * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); - * // => [1, 2] - */ -function property(path) { - return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); -} - -/* harmony default export */ const lodash_es_property = (property); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js - - - - - - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity/* default */.A; - } - if (typeof value == 'object') { - return (0,isArray/* default */.A)(value) - ? _baseMatchesProperty(value[0], value[1]) - : _baseMatches(value); - } - return lodash_es_property(value); -} - -/* harmony default export */ const _baseIteratee = (baseIteratee); - - -/***/ }), - -/***/ 52568: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6240); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? Array(collection.length) : []; - - (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); - - -/***/ }), - -/***/ 70805: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); - - -/***/ }), - -/***/ 64099: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); - - -/***/ }), - -/***/ 99922: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); - - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); - - -/***/ }), - -/***/ 7819: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _castPath) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js -var memoize = __webpack_require__(46632); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js - - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = (0,memoize/* default */.A)(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -/* harmony default export */ const _memoizeCapped = (memoizeCapped); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js - - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = _memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/* harmony default export */ const _stringToPath = (stringToPath); - -// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules -var lodash_es_toString = __webpack_require__(28894); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js - - - - - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if ((0,isArray/* default */.A)(value)) { - return value; - } - return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); -} - -/* harmony default export */ const _castPath = (castPath); - - -/***/ }), - -/***/ 19042: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); -/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); - - -/***/ }), - -/***/ 14792: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); -/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); - - -/***/ }), - -/***/ 85054: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); -/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); -/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - - - - - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && - ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); - - -/***/ }), - -/***/ 86586: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); - - - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); - - -/***/ }), - -/***/ 29959: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); - - -/***/ }), - -/***/ 30901: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); - - -/***/ }), - -/***/ 23068: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24326); -/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66984); -/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832); -/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55615); - - - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); - - -/***/ }), - -/***/ 11662: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_filter) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js -var _arrayFilter = __webpack_require__(2634); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js - - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - (0,_baseEach/* default */.A)(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -/* harmony default export */ const _baseFilter = (baseFilter); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js - - - - - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ -function filter(collection, predicate) { - var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; - return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); -} - -/* harmony default export */ const lodash_es_filter = (filter); - - -/***/ }), - -/***/ 34098: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13588); - - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(array, 1) : []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); - - -/***/ }), - -/***/ 8058: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); -/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); - - -/***/ }), - -/***/ 48585: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_has) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && _baseHas_hasOwnProperty.call(object, key); -} - -/* harmony default export */ const _baseHas = (baseHas); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js - - - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); -} - -/* harmony default export */ const lodash_es_has = (has); - - -/***/ }), - -/***/ 39188: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_hasIn) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -/* harmony default export */ const _baseHasIn = (baseHasIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js - - - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); -} - -/* harmony default export */ const lodash_es_hasIn = (hasIn); - - -/***/ }), - -/***/ 61882: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); -/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); - - - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); - - -/***/ }), - -/***/ 69592: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); - - -/***/ }), - -/***/ 27422: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); -/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); - - -/***/ }), - -/***/ 74722: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45572); -/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574); -/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52568); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ -function map(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee, 3)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); - - -/***/ }), - -/***/ 81942: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_pick) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules -var _castPath = __webpack_require__(7819); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js -var _isIndex = __webpack_require__(25353); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js - - - - - - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!(0,isObject/* default */.A)(object)) { - return object; - } - path = (0,_castPath/* default */.A)(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = (0,_toKey/* default */.A)(path[index]), - newValue = value; - - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = (0,isObject/* default */.A)(objValue) - ? objValue - : ((0,_isIndex/* default */.A)(path[index + 1]) ? [] : {}); - } - } - (0,_assignValue/* default */.A)(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -/* harmony default export */ const _baseSet = (baseSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js - - - - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = (0,_baseGet/* default */.A)(object, path); - - if (predicate(value, path)) { - _baseSet(result, (0,_castPath/* default */.A)(path, object), value); - } - } - return result; -} - -/* harmony default export */ const _basePickBy = (basePickBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js - - - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, paths) { - return _basePickBy(object, paths, function(value, path) { - return (0,hasIn/* default */.A)(object, path); - }); -} - -/* harmony default export */ const _basePick = (basePick); - -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules -var _overRest = __webpack_require__(76875); -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules -var _setToString = __webpack_require__(67525); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js - - - - -/** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -function flatRest(func) { - return (0,_setToString/* default */.A)((0,_overRest/* default */.A)(func, undefined, flatten/* default */.A), func + ''); -} - -/* harmony default export */ const _flatRest = (flatRest); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js - - - -/** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ -var pick = _flatRest(function(object, paths) { - return object == null ? {} : _basePick(object, paths); -}); - -/* harmony default export */ const lodash_es_pick = (pick); - - -/***/ }), - -/***/ 91395: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_range) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -/* harmony default export */ const _baseRange = (baseRange); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js - - - - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.A)(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = (0,toFinite/* default */.A)(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = (0,toFinite/* default */.A)(end); - } - step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.A)(step); - return _baseRange(start, end, step, fromRight); - }; -} - -/* harmony default export */ const _createRange = (createRange); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js - - -/** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ -var range = _createRange(); - -/* harmony default export */ const lodash_es_range = (range); - - -/***/ }), - -/***/ 89463: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_reduce) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -/* harmony default export */ const _arrayReduce = (arrayReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -/* harmony default export */ const _baseReduce = (baseReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js - - - - - - -/** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ -function reduce(collection, iteratee, accumulator) { - var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, - initAccum = arguments.length < 3; - - return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); -} - -/* harmony default export */ const lodash_es_reduce = (reduce); - - -/***/ }), - -/***/ 13153: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ -function stubArray() { - return []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); - - -/***/ }), - -/***/ 74342: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toFinite) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js - - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/* harmony default export */ const _baseTrim = (baseTrim); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js - - - - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if ((0,isSymbol/* default */.A)(value)) { - return NAN; - } - if ((0,isObject/* default */.A)(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = (0,isObject/* default */.A)(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = _baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/* harmony default export */ const lodash_es_toNumber = (toNumber); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = lodash_es_toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/* harmony default export */ const lodash_es_toFinite = (toFinite); - - -/***/ }), - -/***/ 28894: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toString) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js - - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if ((0,isArray/* default */.A)(value)) { - // Recursively convert values (susceptible to call stack limits). - return (0,_arrayMap/* default */.A)(value, baseToString) + ''; - } - if ((0,isSymbol/* default */.A)(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const _baseToString = (baseToString); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js - - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString_toString(value) { - return value == null ? '' : _baseToString(value); -} - -/* harmony default export */ const lodash_es_toString = (toString_toString); - - -/***/ }), - -/***/ 5664: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28894); - - -/** Used to generate unique IDs. */ -var idCounter = 0; - -/** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ -function uniqueId(prefix) { - var id = ++idCounter; - return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(prefix) + id; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); - - -/***/ }), - -/***/ 38207: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_values) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js - - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return (0,_arrayMap/* default */.A)(props, function(key) { - return object[key]; - }); -} - -/* harmony default export */ const _baseValues = (baseValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js - - - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values(object) { - return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); -} - -/* harmony default export */ const lodash_es_values = (values); - - -/***/ }), - -/***/ 31331: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(91245); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21176); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(697); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99702); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99418); - - - - - - - - - - - - - - -const idCache = {}; -const set = (key, val) => { - idCache[key] = val; -}; -const get = (k) => idCache[k]; -const keys = () => Object.keys(idCache); -const size = () => keys().length; -const idCache$1 = { - get, - set, - keys, - size -}; -const drawStartState = (g) => g.append("circle").attr("class", "start-state").attr("r", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cx", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cy", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit); -const drawDivider = (g) => g.append("line").style("stroke", "grey").style("stroke-dasharray", "3").attr("x1", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight).attr("class", "divider").attr("x2", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight * 2).attr("y1", 0).attr("y2", 0); -const drawSimpleState = (g, stateDef) => { - const state = g.append("text").attr("x", 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("font-size", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.fontSize).attr("class", "state-title").text(stateDef.id); - const classBox = state.node().getBBox(); - g.insert("rect", ":first-child").attr("x", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("width", classBox.width + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", classBox.height + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("rx", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); - return state; -}; -const drawDescrState = (g, stateDef) => { - const addTspan = function(textEl, txt, isFirst2) { - const tSpan = textEl.append("tspan").attr("x", 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).text(txt); - if (!isFirst2) { - tSpan.attr("dy", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight); - } - }; - const title = g.append("text").attr("x", 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + 1.3 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("font-size", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.fontSize).attr("class", "state-title").text(stateDef.descriptions[0]); - const titleBox = title.node().getBBox(); - const titleHeight = titleBox.height; - const description = g.append("text").attr("x", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr( - "y", - titleHeight + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding * 0.4 + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight - ).attr("class", "state-description"); - let isFirst = true; - let isSecond = true; - stateDef.descriptions.forEach(function(descr) { - if (!isFirst) { - addTspan(description, descr, isSecond); - isSecond = false; - } - isFirst = false; - }); - const descrLine = g.append("line").attr("x1", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y1", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + titleHeight + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin / 2).attr("y2", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + titleHeight + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin / 2).attr("class", "descr-divider"); - const descrBox = description.node().getBBox(); - const width = Math.max(descrBox.width, titleBox.width); - descrLine.attr("x2", width + 3 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); - g.insert("rect", ":first-child").attr("x", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("width", width + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", descrBox.height + titleHeight + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("rx", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); - return g; -}; -const addTitleAndBox = (g, stateDef, altBkg) => { - const pad = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; - const dblPad = 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; - const orgBox = g.node().getBBox(); - const orgWidth = orgBox.width; - const orgX = orgBox.x; - const title = g.append("text").attr("x", 0).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift).attr("font-size", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.fontSize).attr("class", "state-title").text(stateDef.id); - const titleBox = title.node().getBBox(); - const titleWidth = titleBox.width + dblPad; - let width = Math.max(titleWidth, orgWidth); - if (width === orgWidth) { - width = width + dblPad; - } - let startX; - const graphBox = g.node().getBBox(); - if (stateDef.doc) - ; - startX = orgX - pad; - if (titleWidth > orgWidth) { - startX = (orgWidth - width) / 2 + pad; - } - if (Math.abs(orgX - graphBox.x) < pad && titleWidth > orgWidth) { - startX = orgX - (titleWidth - orgWidth) / 2; - } - const lineY = 1 - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight; - g.insert("rect", ":first-child").attr("x", startX).attr("y", lineY).attr("class", altBkg ? "alt-composit" : "composit").attr("width", width).attr( - "height", - graphBox.height + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift + 1 - ).attr("rx", "0"); - title.attr("x", startX + pad); - if (titleWidth <= orgWidth) { - title.attr("x", orgX + (width - dblPad) / 2 - titleWidth / 2 + pad); - } - g.insert("rect", ":first-child").attr("x", startX).attr( - "y", - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding - ).attr("width", width).attr("height", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight * 3).attr("rx", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); - g.insert("rect", ":first-child").attr("x", startX).attr( - "y", - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding - ).attr("width", width).attr("height", graphBox.height + 3 + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight).attr("rx", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); - return g; -}; -const drawEndState = (g) => { - g.append("circle").attr("class", "end-state-outer").attr("r", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding).attr( - "cx", - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding - ).attr( - "cy", - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding - ); - return g.append("circle").attr("class", "end-state-inner").attr("r", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cx", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + 2).attr("cy", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + 2); -}; -const drawForkJoinState = (g, stateDef) => { - let width = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.forkWidth; - let height = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.forkHeight; - if (stateDef.parentId) { - let tmp = width; - width = height; - height = tmp; - } - return g.append("rect").style("stroke", "black").style("fill", "black").attr("width", width).attr("height", height).attr("x", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); -}; -const _drawLongText = (_text, x, y, g) => { - let textHeight = 0; - const textElem = g.append("text"); - textElem.style("text-anchor", "start"); - textElem.attr("class", "noteText"); - let text = _text.replace(/\r\n/g, "
      "); - text = text.replace(/\n/g, "
      "); - const lines = text.split(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.e.lineBreakRegex); - let tHeight = 1.25 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin; - for (const line2 of lines) { - const txt = line2.trim(); - if (txt.length > 0) { - const span = textElem.append("tspan"); - span.text(txt); - if (tHeight === 0) { - const textBounds = span.node().getBBox(); - tHeight += textBounds.height; - } - textHeight += tHeight; - span.attr("x", x + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); - span.attr("y", y + textHeight + 1.25 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); - } - } - return { textWidth: textElem.node().getBBox().width, textHeight }; -}; -const drawNote = (text, g) => { - g.attr("class", "state-note"); - const note = g.append("rect").attr("x", 0).attr("y", (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); - const rectElem = g.append("g"); - const { textWidth, textHeight } = _drawLongText(text, 0, 0, rectElem); - note.attr("height", textHeight + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); - note.attr("width", textWidth + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin * 2); - return note; -}; -const drawState = function(elem, stateDef) { - const id = stateDef.id; - const stateInfo = { - id, - label: stateDef.id, - width: 0, - height: 0 - }; - const g = elem.append("g").attr("id", id).attr("class", "stateGroup"); - if (stateDef.type === "start") { - drawStartState(g); - } - if (stateDef.type === "end") { - drawEndState(g); - } - if (stateDef.type === "fork" || stateDef.type === "join") { - drawForkJoinState(g, stateDef); - } - if (stateDef.type === "note") { - drawNote(stateDef.note.text, g); - } - if (stateDef.type === "divider") { - drawDivider(g); - } - if (stateDef.type === "default" && stateDef.descriptions.length === 0) { - drawSimpleState(g, stateDef); - } - if (stateDef.type === "default" && stateDef.descriptions.length > 0) { - drawDescrState(g, stateDef); - } - const stateBox = g.node().getBBox(); - stateInfo.width = stateBox.width + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; - stateInfo.height = stateBox.height + 2 * (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; - idCache$1.set(id, stateInfo); - return stateInfo; -}; -let edgeCount = 0; -const drawEdge = function(elem, path, relation) { - const getRelationType = function(type) { - switch (type) { - case _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.AGGREGATION: - return "aggregation"; - case _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.EXTENSION: - return "extension"; - case _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.COMPOSITION: - return "composition"; - case _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.DEPENDENCY: - return "dependency"; - } - }; - path.points = path.points.filter((p) => !Number.isNaN(p.y)); - const lineData = path.points; - const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(function(d) { - return d.x; - }).y(function(d) { - return d.y; - }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .qrM); - const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "transition"); - let url = ""; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.arrowMarkerAbsolute) { - url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; - url = url.replace(/\(/g, "\\("); - url = url.replace(/\)/g, "\\)"); - } - svgPath.attr( - "marker-end", - "url(" + url + "#" + getRelationType(_styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.DEPENDENCY) + "End)" - ); - if (relation.title !== void 0) { - const label = elem.append("g").attr("class", "stateLabel"); - const { x, y } = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.u.calcLabelPosition(path.points); - const rows = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.e.getRows(relation.title); - let titleHeight = 0; - const titleRows = []; - let maxWidth = 0; - let minX = 0; - for (let i = 0; i <= rows.length; i++) { - const title = label.append("text").attr("text-anchor", "middle").text(rows[i]).attr("x", x).attr("y", y + titleHeight); - const boundsTmp = title.node().getBBox(); - maxWidth = Math.max(maxWidth, boundsTmp.width); - minX = Math.min(minX, boundsTmp.x); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info(boundsTmp.x, x, y + titleHeight); - if (titleHeight === 0) { - const titleBox = title.node().getBBox(); - titleHeight = titleBox.height; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Title height", titleHeight, y); - } - titleRows.push(title); - } - let boxHeight = titleHeight * rows.length; - if (rows.length > 1) { - const heightAdj = (rows.length - 1) * titleHeight * 0.5; - titleRows.forEach((title, i) => title.attr("y", y + i * titleHeight - heightAdj)); - boxHeight = titleHeight * rows.length; - } - const bounds = label.node().getBBox(); - label.insert("rect", ":first-child").attr("class", "box").attr("x", x - maxWidth / 2 - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding / 2).attr("y", y - boxHeight / 2 - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding / 2 - 3.5).attr("width", maxWidth + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", boxHeight + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info(bounds); - } - edgeCount++; -}; -let conf; -const transformationLog = {}; -const setConf = function() { -}; -const insertMarkers = function(elem) { - elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); -}; -const draw = function(text, id, _version, diagObj) { - conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().state; - const securityLevel = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().securityLevel; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); - const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering diagram " + text); - const diagram2 = root.select(`[id='${id}']`); - insertMarkers(diagram2); - const rootDoc = diagObj.db.getRootDoc(); - renderDoc(rootDoc, diagram2, void 0, false, root, doc, diagObj); - const padding = conf.padding; - const bounds = diagram2.node().getBBox(); - const width = bounds.width + padding * 2; - const height = bounds.height + padding * 2; - const svgWidth = width * 1.75; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.i)(diagram2, height, svgWidth, conf.useMaxWidth); - diagram2.attr( - "viewBox", - `${bounds.x - conf.padding} ${bounds.y - conf.padding} ` + width + " " + height - ); -}; -const getLabelWidth = (text) => { - return text ? text.length * conf.fontSizeFactor : 1; -}; -const renderDoc = (doc, diagram2, parentId, altBkg, root, domDocument, diagObj) => { - const graph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .T({ - compound: true, - multigraph: true - }); - let i; - let edgeFreeDoc = true; - for (i = 0; i < doc.length; i++) { - if (doc[i].stmt === "relation") { - edgeFreeDoc = false; - break; - } - } - if (parentId) { - graph.setGraph({ - rankdir: "LR", - multigraph: true, - compound: true, - // acyclicer: 'greedy', - ranker: "tight-tree", - ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor, - nodeSep: edgeFreeDoc ? 1 : 50, - isMultiGraph: true - // ranksep: 5, - // nodesep: 1 - }); - } else { - graph.setGraph({ - rankdir: "TB", - multigraph: true, - compound: true, - // isCompound: true, - // acyclicer: 'greedy', - // ranker: 'longest-path' - ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor, - nodeSep: edgeFreeDoc ? 1 : 50, - ranker: "tight-tree", - // ranker: 'network-simplex' - isMultiGraph: true - }); - } - graph.setDefaultEdgeLabel(function() { - return {}; - }); - diagObj.db.extract(doc); - const states = diagObj.db.getStates(); - const relations = diagObj.db.getRelations(); - const keys2 = Object.keys(states); - for (const key of keys2) { - const stateDef = states[key]; - if (parentId) { - stateDef.parentId = parentId; - } - let node; - if (stateDef.doc) { - let sub = diagram2.append("g").attr("id", stateDef.id).attr("class", "stateGroup"); - node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument, diagObj); - { - sub = addTitleAndBox(sub, stateDef, altBkg); - let boxBounds = sub.node().getBBox(); - node.width = boxBounds.width; - node.height = boxBounds.height + conf.padding / 2; - transformationLog[stateDef.id] = { y: conf.compositTitleSize }; - } - } else { - node = drawState(diagram2, stateDef); - } - if (stateDef.note) { - const noteDef = { - descriptions: [], - id: stateDef.id + "-note", - note: stateDef.note, - type: "note" - }; - const note = drawState(diagram2, noteDef); - if (stateDef.note.position === "left of") { - graph.setNode(node.id + "-note", note); - graph.setNode(node.id, node); - } else { - graph.setNode(node.id, node); - graph.setNode(node.id + "-note", note); - } - graph.setParent(node.id, node.id + "-group"); - graph.setParent(node.id + "-note", node.id + "-group"); - } else { - graph.setNode(node.id, node); - } - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Count=", graph.nodeCount(), graph); - let cnt = 0; - relations.forEach(function(relation) { - cnt++; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Setting edge", relation); - graph.setEdge( - relation.id1, - relation.id2, - { - relation, - width: getLabelWidth(relation.title), - height: conf.labelHeight * _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.e.getRows(relation.title).length, - labelpos: "c" - }, - "id" + cnt - ); - }); - (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .Zp)(graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Graph after layout", graph.nodes()); - const svgElem = diagram2.node(); - graph.nodes().forEach(function(v) { - if (v !== void 0 && graph.node(v) !== void 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.warn("Node " + v + ": " + JSON.stringify(graph.node(v))); - root.select("#" + svgElem.id + " #" + v).attr( - "transform", - "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y + (transformationLog[v] ? transformationLog[v].y : 0) - graph.node(v).height / 2) + " )" - ); - root.select("#" + svgElem.id + " #" + v).attr("data-x-shift", graph.node(v).x - graph.node(v).width / 2); - const dividers = domDocument.querySelectorAll("#" + svgElem.id + " #" + v + " .divider"); - dividers.forEach((divider) => { - const parent = divider.parentElement; - let pWidth = 0; - let pShift = 0; - if (parent) { - if (parent.parentElement) { - pWidth = parent.parentElement.getBBox().width; - } - pShift = parseInt(parent.getAttribute("data-x-shift"), 10); - if (Number.isNaN(pShift)) { - pShift = 0; - } - } - divider.setAttribute("x1", 0 - pShift + 8); - divider.setAttribute("x2", pWidth - pShift - 8); - }); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("No Node " + v + ": " + JSON.stringify(graph.node(v))); - } - }); - let stateBox = svgElem.getBBox(); - graph.edges().forEach(function(e) { - if (e !== void 0 && graph.edge(e) !== void 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); - drawEdge(diagram2, graph.edge(e), graph.edge(e).relation); - } - }); - stateBox = svgElem.getBBox(); - const stateInfo = { - id: parentId ? parentId : "root", - label: parentId ? parentId : "root", - width: 0, - height: 0 - }; - stateInfo.width = stateBox.width + 2 * conf.padding; - stateInfo.height = stateBox.height + 2 * conf.padding; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Doc rendered", stateInfo, graph); - return stateInfo; -}; -const renderer = { - setConf, - draw -}; -const diagram = { - parser: _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.p, - db: _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d, - renderer, - styles: _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.s, - init: (cnf) => { - if (!cnf.state) { - cnf.state = {}; - } - cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; - _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); - } -}; - - - -/***/ }), - -/***/ 91245: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ D: () => (/* binding */ DEFAULT_STATE_TYPE), -/* harmony export */ S: () => (/* binding */ STMT_RELATION), -/* harmony export */ a: () => (/* binding */ DIVIDER_TYPE), -/* harmony export */ b: () => (/* binding */ STMT_STATE), -/* harmony export */ c: () => (/* binding */ DEFAULT_NESTED_DOC_DIR), -/* harmony export */ d: () => (/* binding */ db), -/* harmony export */ p: () => (/* binding */ parser$1), -/* harmony export */ s: () => (/* binding */ styles) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99702); - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 15], $V7 = [1, 16], $V8 = [1, 17], $V9 = [1, 18], $Va = [1, 30], $Vb = [1, 19], $Vc = [1, 20], $Vd = [1, 21], $Ve = [1, 22], $Vf = [1, 23], $Vg = [1, 25], $Vh = [1, 26], $Vi = [1, 27], $Vj = [1, 28], $Vk = [1, 29], $Vl = [1, 32], $Vm = [1, 33], $Vn = [1, 34], $Vo = [1, 35], $Vp = [1, 31], $Vq = [1, 4, 5, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $Vr = [1, 4, 5, 13, 14, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $Vs = [4, 5, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "SPACE": 4, "NL": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "classDefStatement": 10, "cssClassStatement": 11, "idStatement": 12, "DESCR": 13, "-->": 14, "HIDE_EMPTY": 15, "scale": 16, "WIDTH": 17, "COMPOSIT_STATE": 18, "STRUCT_START": 19, "STRUCT_STOP": 20, "STATE_DESCR": 21, "AS": 22, "ID": 23, "FORK": 24, "JOIN": 25, "CHOICE": 26, "CONCURRENT": 27, "note": 28, "notePosition": 29, "NOTE_TEXT": 30, "direction": 31, "acc_title": 32, "acc_title_value": 33, "acc_descr": 34, "acc_descr_value": 35, "acc_descr_multiline_value": 36, "classDef": 37, "CLASSDEF_ID": 38, "CLASSDEF_STYLEOPTS": 39, "DEFAULT": 40, "class": 41, "CLASSENTITY_IDS": 42, "STYLECLASS": 43, "direction_tb": 44, "direction_bt": 45, "direction_rl": 46, "direction_lr": 47, "eol": 48, ";": 49, "EDGE_STATE": 50, "STYLE_SEPARATOR": 51, "left_of": 52, "right_of": 53, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 4: "SPACE", 5: "NL", 6: "SD", 13: "DESCR", 14: "-->", 15: "HIDE_EMPTY", 16: "scale", 17: "WIDTH", 18: "COMPOSIT_STATE", 19: "STRUCT_START", 20: "STRUCT_STOP", 21: "STATE_DESCR", 22: "AS", 23: "ID", 24: "FORK", 25: "JOIN", 26: "CHOICE", 27: "CONCURRENT", 28: "note", 30: "NOTE_TEXT", 32: "acc_title", 33: "acc_title_value", 34: "acc_descr", 35: "acc_descr_value", 36: "acc_descr_multiline_value", 37: "classDef", 38: "CLASSDEF_ID", 39: "CLASSDEF_STYLEOPTS", 40: "DEFAULT", 41: "class", 42: "CLASSENTITY_IDS", 43: "STYLECLASS", 44: "direction_tb", 45: "direction_bt", 46: "direction_rl", 47: "direction_lr", 49: ";", 50: "EDGE_STATE", 51: "STYLE_SEPARATOR", 52: "left_of", 53: "right_of" }, - productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 3], [9, 4], [9, 1], [9, 2], [9, 1], [9, 4], [9, 3], [9, 6], [9, 1], [9, 1], [9, 1], [9, 1], [9, 4], [9, 4], [9, 1], [9, 2], [9, 2], [9, 1], [10, 3], [10, 3], [11, 3], [31, 1], [31, 1], [31, 1], [31, 1], [48, 1], [48, 1], [12, 1], [12, 1], [12, 3], [12, 3], [29, 1], [29, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 3: - yy.setRootDoc($$[$0]); - return $$[$0]; - case 4: - this.$ = []; - break; - case 5: - if ($$[$0] != "nl") { - $$[$0 - 1].push($$[$0]); - this.$ = $$[$0 - 1]; - } - break; - case 6: - case 7: - this.$ = $$[$0]; - break; - case 8: - this.$ = "nl"; - break; - case 11: - this.$ = $$[$0]; - break; - case 12: - const stateStmt = $$[$0 - 1]; - stateStmt.description = yy.trimColon($$[$0]); - this.$ = stateStmt; - break; - case 13: - this.$ = { stmt: "relation", state1: $$[$0 - 2], state2: $$[$0] }; - break; - case 14: - const relDescription = yy.trimColon($$[$0]); - this.$ = { stmt: "relation", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription }; - break; - case 18: - this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: "", doc: $$[$0 - 1] }; - break; - case 19: - var id = $$[$0]; - var description = $$[$0 - 2].trim(); - if ($$[$0].match(":")) { - var parts = $$[$0].split(":"); - id = parts[0]; - description = [description, parts[1]]; - } - this.$ = { stmt: "state", id, type: "default", description }; - break; - case 20: - this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: $$[$0 - 5], doc: $$[$0 - 1] }; - break; - case 21: - this.$ = { stmt: "state", id: $$[$0], type: "fork" }; - break; - case 22: - this.$ = { stmt: "state", id: $$[$0], type: "join" }; - break; - case 23: - this.$ = { stmt: "state", id: $$[$0], type: "choice" }; - break; - case 24: - this.$ = { stmt: "state", id: yy.getDividerId(), type: "divider" }; - break; - case 25: - this.$ = { stmt: "state", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } }; - break; - case 28: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 29: - case 30: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 31: - case 32: - this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() }; - break; - case 33: - this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; - break; - case 34: - yy.setDirection("TB"); - this.$ = { stmt: "dir", value: "TB" }; - break; - case 35: - yy.setDirection("BT"); - this.$ = { stmt: "dir", value: "BT" }; - break; - case 36: - yy.setDirection("RL"); - this.$ = { stmt: "dir", value: "RL" }; - break; - case 37: - yy.setDirection("LR"); - this.$ = { stmt: "dir", value: "LR" }; - break; - case 40: - case 41: - this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" }; - break; - case 42: - this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; - break; - case 43: - this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; - break; - } - }, - table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o([1, 4, 5, 15, 16, 18, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 5]), { 9: 36, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 7]), o($Vq, [2, 8]), o($Vq, [2, 9]), o($Vq, [2, 10]), o($Vq, [2, 11], { 13: [1, 37], 14: [1, 38] }), o($Vq, [2, 15]), { 17: [1, 39] }, o($Vq, [2, 17], { 19: [1, 40] }), { 22: [1, 41] }, o($Vq, [2, 21]), o($Vq, [2, 22]), o($Vq, [2, 23]), o($Vq, [2, 24]), { 29: 42, 30: [1, 43], 52: [1, 44], 53: [1, 45] }, o($Vq, [2, 27]), { 33: [1, 46] }, { 35: [1, 47] }, o($Vq, [2, 30]), { 38: [1, 48], 40: [1, 49] }, { 42: [1, 50] }, o($Vr, [2, 40], { 51: [1, 51] }), o($Vr, [2, 41], { 51: [1, 52] }), o($Vq, [2, 34]), o($Vq, [2, 35]), o($Vq, [2, 36]), o($Vq, [2, 37]), o($Vq, [2, 6]), o($Vq, [2, 12]), { 12: 53, 23: $Va, 50: $Vp }, o($Vq, [2, 16]), o($Vs, $V3, { 7: 54 }), { 23: [1, 55] }, { 23: [1, 56] }, { 22: [1, 57] }, { 23: [2, 44] }, { 23: [2, 45] }, o($Vq, [2, 28]), o($Vq, [2, 29]), { 39: [1, 58] }, { 39: [1, 59] }, { 43: [1, 60] }, { 23: [1, 61] }, { 23: [1, 62] }, o($Vq, [2, 13], { 13: [1, 63] }), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 20: [1, 64], 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 19], { 19: [1, 65] }), { 30: [1, 66] }, { 23: [1, 67] }, o($Vq, [2, 31]), o($Vq, [2, 32]), o($Vq, [2, 33]), o($Vr, [2, 42]), o($Vr, [2, 43]), o($Vq, [2, 14]), o($Vq, [2, 18]), o($Vs, $V3, { 7: 68 }), o($Vq, [2, 25]), o($Vq, [2, 26]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 20: [1, 69], 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 20])], - defaultActions: { 5: [2, 1], 6: [2, 2], 44: [2, 44], 45: [2, 45] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - return 40; - case 1: - return 44; - case 2: - return 45; - case 3: - return 46; - case 4: - return 47; - case 5: - break; - case 6: - break; - case 7: - return 5; - case 8: - break; - case 9: - break; - case 10: - break; - case 11: - break; - case 12: - this.pushState("SCALE"); - return 16; - case 13: - return 17; - case 14: - this.popState(); - break; - case 15: - this.begin("acc_title"); - return 32; - case 16: - this.popState(); - return "acc_title_value"; - case 17: - this.begin("acc_descr"); - return 34; - case 18: - this.popState(); - return "acc_descr_value"; - case 19: - this.begin("acc_descr_multiline"); - break; - case 20: - this.popState(); - break; - case 21: - return "acc_descr_multiline_value"; - case 22: - this.pushState("CLASSDEF"); - return 37; - case 23: - this.popState(); - this.pushState("CLASSDEFID"); - return "DEFAULT_CLASSDEF_ID"; - case 24: - this.popState(); - this.pushState("CLASSDEFID"); - return 38; - case 25: - this.popState(); - return 39; - case 26: - this.pushState("CLASS"); - return 41; - case 27: - this.popState(); - this.pushState("CLASS_STYLE"); - return 42; - case 28: - this.popState(); - return 43; - case 29: - this.pushState("SCALE"); - return 16; - case 30: - return 17; - case 31: - this.popState(); - break; - case 32: - this.pushState("STATE"); - break; - case 33: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -8).trim(); - return 24; - case 34: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -8).trim(); - return 25; - case 35: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -10).trim(); - return 26; - case 36: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -8).trim(); - return 24; - case 37: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -8).trim(); - return 25; - case 38: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -10).trim(); - return 26; - case 39: - return 44; - case 40: - return 45; - case 41: - return 46; - case 42: - return 47; - case 43: - this.pushState("STATE_STRING"); - break; - case 44: - this.pushState("STATE_ID"); - return "AS"; - case 45: - this.popState(); - return "ID"; - case 46: - this.popState(); - break; - case 47: - return "STATE_DESCR"; - case 48: - return 18; - case 49: - this.popState(); - break; - case 50: - this.popState(); - this.pushState("struct"); - return 19; - case 51: - break; - case 52: - this.popState(); - return 20; - case 53: - break; - case 54: - this.begin("NOTE"); - return 28; - case 55: - this.popState(); - this.pushState("NOTE_ID"); - return 52; - case 56: - this.popState(); - this.pushState("NOTE_ID"); - return 53; - case 57: - this.popState(); - this.pushState("FLOATING_NOTE"); - break; - case 58: - this.popState(); - this.pushState("FLOATING_NOTE_ID"); - return "AS"; - case 59: - break; - case 60: - return "NOTE_TEXT"; - case 61: - this.popState(); - return "ID"; - case 62: - this.popState(); - this.pushState("NOTE_TEXT"); - return 23; - case 63: - this.popState(); - yy_.yytext = yy_.yytext.substr(2).trim(); - return 30; - case 64: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -8).trim(); - return 30; - case 65: - return 6; - case 66: - return 6; - case 67: - return 15; - case 68: - return 50; - case 69: - return 23; - case 70: - yy_.yytext = yy_.yytext.trim(); - return 13; - case 71: - return 14; - case 72: - return 27; - case 73: - return 51; - case 74: - return 5; - case 75: - return "INVALID"; - } - }, - rules: [/^(?:default\b)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:classDef\s+)/i, /^(?:DEFAULT\s+)/i, /^(?:\w+\s+)/i, /^(?:[^\n]*)/i, /^(?:class\s+)/i, /^(?:(\w+)+((,\s*\w+)*))/i, /^(?:[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:state\s+)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*\[\[fork\]\])/i, /^(?:.*\[\[join\]\])/i, /^(?:.*\[\[choice\]\])/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:["])/i, /^(?:\s*as\s+)/i, /^(?:[^\n\{]*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:\})/i, /^(?:[\n])/i, /^(?:note\s+)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:")/i, /^(?:\s*as\s*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n]*)/i, /^(?:\s*[^:\n\s\-]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:[\s\S]*?end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i], - conditions: { "LINE": { "rules": [9, 10], "inclusive": false }, "struct": { "rules": [9, 10, 22, 26, 32, 39, 40, 41, 42, 51, 52, 53, 54, 68, 69, 70, 71, 72], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [61], "inclusive": false }, "FLOATING_NOTE": { "rules": [58, 59, 60], "inclusive": false }, "NOTE_TEXT": { "rules": [63, 64], "inclusive": false }, "NOTE_ID": { "rules": [62], "inclusive": false }, "NOTE": { "rules": [55, 56, 57], "inclusive": false }, "CLASS_STYLE": { "rules": [28], "inclusive": false }, "CLASS": { "rules": [27], "inclusive": false }, "CLASSDEFID": { "rules": [25], "inclusive": false }, "CLASSDEF": { "rules": [23, 24], "inclusive": false }, "acc_descr_multiline": { "rules": [20, 21], "inclusive": false }, "acc_descr": { "rules": [18], "inclusive": false }, "acc_title": { "rules": [16], "inclusive": false }, "SCALE": { "rules": [13, 14, 30, 31], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [45], "inclusive": false }, "STATE_STRING": { "rules": [46, 47], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [9, 10, 33, 34, 35, 36, 37, 38, 43, 44, 48, 49, 50], "inclusive": false }, "ID": { "rules": [9, 10], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 15, 17, 19, 22, 26, 29, 32, 50, 54, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -const DEFAULT_DIAGRAM_DIRECTION = "LR"; -const DEFAULT_NESTED_DOC_DIR = "TB"; -const STMT_STATE = "state"; -const STMT_RELATION = "relation"; -const STMT_CLASSDEF = "classDef"; -const STMT_APPLYCLASS = "applyClass"; -const DEFAULT_STATE_TYPE = "default"; -const DIVIDER_TYPE = "divider"; -const START_NODE = "[*]"; -const START_TYPE = "start"; -const END_NODE = START_NODE; -const END_TYPE = "end"; -const COLOR_KEYWORD = "color"; -const FILL_KEYWORD = "fill"; -const BG_FILL = "bgFill"; -const STYLECLASS_SEP = ","; -function newClassesList() { - return {}; -} -let direction = DEFAULT_DIAGRAM_DIRECTION; -let rootDoc = []; -let classes = newClassesList(); -const newDoc = () => { - return { - relations: [], - states: {}, - documents: {} - }; -}; -let documents = { - root: newDoc() -}; -let currentDocument = documents.root; -let startEndCount = 0; -let dividerCnt = 0; -const lineType = { - LINE: 0, - DOTTED_LINE: 1 -}; -const relationType = { - AGGREGATION: 0, - EXTENSION: 1, - COMPOSITION: 2, - DEPENDENCY: 3 -}; -const clone = (o) => JSON.parse(JSON.stringify(o)); -const setRootDoc = (o) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting root doc", o); - rootDoc = o; -}; -const getRootDoc = () => rootDoc; -const docTranslator = (parent, node, first) => { - if (node.stmt === STMT_RELATION) { - docTranslator(parent, node.state1, true); - docTranslator(parent, node.state2, false); - } else { - if (node.stmt === STMT_STATE) { - if (node.id === "[*]") { - node.id = first ? parent.id + "_start" : parent.id + "_end"; - node.start = first; - } else { - node.id = node.id.trim(); - } - } - if (node.doc) { - const doc = []; - let currentDoc = []; - let i; - for (i = 0; i < node.doc.length; i++) { - if (node.doc[i].type === DIVIDER_TYPE) { - const newNode = clone(node.doc[i]); - newNode.doc = clone(currentDoc); - doc.push(newNode); - currentDoc = []; - } else { - currentDoc.push(node.doc[i]); - } - } - if (doc.length > 0 && currentDoc.length > 0) { - const newNode = { - stmt: STMT_STATE, - id: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.I)(), - type: "divider", - doc: clone(currentDoc) - }; - doc.push(clone(newNode)); - node.doc = doc; - } - node.doc.forEach((docNode) => docTranslator(node, docNode, true)); - } - } -}; -const getRootDocV2 = () => { - docTranslator({ id: "root" }, { id: "root", doc: rootDoc }, true); - return { id: "root", doc: rootDoc }; -}; -const extract = (_doc) => { - let doc; - if (_doc.doc) { - doc = _doc.doc; - } else { - doc = _doc; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info(doc); - clear(true); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Extract", doc); - doc.forEach((item) => { - switch (item.stmt) { - case STMT_STATE: - addState( - item.id.trim(), - item.type, - item.doc, - item.description, - item.note, - item.classes, - item.styles, - item.textStyles - ); - break; - case STMT_RELATION: - addRelation(item.state1, item.state2, item.description); - break; - case STMT_CLASSDEF: - addStyleClass(item.id.trim(), item.classes); - break; - case STMT_APPLYCLASS: - setCssClass(item.id.trim(), item.styleClass); - break; - } - }); -}; -const addState = function(id, type = DEFAULT_STATE_TYPE, doc = null, descr = null, note = null, classes2 = null, styles2 = null, textStyles = null) { - const trimmedId = id == null ? void 0 : id.trim(); - if (currentDocument.states[trimmedId] === void 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Adding state ", trimmedId, descr); - currentDocument.states[trimmedId] = { - id: trimmedId, - descriptions: [], - type, - doc, - note, - classes: [], - styles: [], - textStyles: [] - }; - } else { - if (!currentDocument.states[trimmedId].doc) { - currentDocument.states[trimmedId].doc = doc; - } - if (!currentDocument.states[trimmedId].type) { - currentDocument.states[trimmedId].type = type; - } - } - if (descr) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state description", trimmedId, descr); - if (typeof descr === "string") { - addDescription(trimmedId, descr.trim()); - } - if (typeof descr === "object") { - descr.forEach((des) => addDescription(trimmedId, des.trim())); - } - } - if (note) { - currentDocument.states[trimmedId].note = note; - currentDocument.states[trimmedId].note.text = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText( - currentDocument.states[trimmedId].note.text, - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)() - ); - } - if (classes2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state classes", trimmedId, classes2); - const classesList = typeof classes2 === "string" ? [classes2] : classes2; - classesList.forEach((cssClass) => setCssClass(trimmedId, cssClass.trim())); - } - if (styles2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); - const stylesList = typeof styles2 === "string" ? [styles2] : styles2; - stylesList.forEach((style) => setStyle(trimmedId, style.trim())); - } - if (textStyles) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); - const textStylesList = typeof textStyles === "string" ? [textStyles] : textStyles; - textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim())); - } -}; -const clear = function(saveCommon) { - documents = { - root: newDoc() - }; - currentDocument = documents.root; - startEndCount = 0; - classes = newClassesList(); - if (!saveCommon) { - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.v)(); - } -}; -const getState = function(id) { - return currentDocument.states[id]; -}; -const getStates = function() { - return currentDocument.states; -}; -const logDocuments = function() { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Documents = ", documents); -}; -const getRelations = function() { - return currentDocument.relations; -}; -function startIdIfNeeded(id = "") { - let fixedId = id; - if (id === START_NODE) { - startEndCount++; - fixedId = `${START_TYPE}${startEndCount}`; - } - return fixedId; -} -function startTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { - return id === START_NODE ? START_TYPE : type; -} -function endIdIfNeeded(id = "") { - let fixedId = id; - if (id === END_NODE) { - startEndCount++; - fixedId = `${END_TYPE}${startEndCount}`; - } - return fixedId; -} -function endTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { - return id === END_NODE ? END_TYPE : type; -} -function addRelationObjs(item1, item2, relationTitle) { - let id1 = startIdIfNeeded(item1.id.trim()); - let type1 = startTypeIfNeeded(item1.id.trim(), item1.type); - let id2 = startIdIfNeeded(item2.id.trim()); - let type2 = startTypeIfNeeded(item2.id.trim(), item2.type); - addState( - id1, - type1, - item1.doc, - item1.description, - item1.note, - item1.classes, - item1.styles, - item1.textStyles - ); - addState( - id2, - type2, - item2.doc, - item2.description, - item2.note, - item2.classes, - item2.styles, - item2.textStyles - ); - currentDocument.relations.push({ - id1, - id2, - relationTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(relationTitle, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)()) - }); -} -const addRelation = function(item1, item2, title) { - if (typeof item1 === "object") { - addRelationObjs(item1, item2, title); - } else { - const id1 = startIdIfNeeded(item1.trim()); - const type1 = startTypeIfNeeded(item1); - const id2 = endIdIfNeeded(item2.trim()); - const type2 = endTypeIfNeeded(item2); - addState(id1, type1); - addState(id2, type2); - currentDocument.relations.push({ - id1, - id2, - title: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(title, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)()) - }); - } -}; -const addDescription = function(id, descr) { - const theState = currentDocument.states[id]; - const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr; - theState.descriptions.push(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(_descr, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)())); -}; -const cleanupLabel = function(label) { - if (label.substring(0, 1) === ":") { - return label.substr(2).trim(); - } else { - return label.trim(); - } -}; -const getDividerId = () => { - dividerCnt++; - return "divider-id-" + dividerCnt; -}; -const addStyleClass = function(id, styleAttributes = "") { - if (classes[id] === void 0) { - classes[id] = { id, styles: [], textStyles: [] }; - } - const foundClass = classes[id]; - if (styleAttributes !== void 0 && styleAttributes !== null) { - styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { - const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); - if (attrib.match(COLOR_KEYWORD)) { - const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); - const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); - foundClass.textStyles.push(newStyle2); - } - foundClass.styles.push(fixedAttrib); - }); - } -}; -const getClasses = function() { - return classes; -}; -const setCssClass = function(itemIds, cssClassName) { - itemIds.split(",").forEach(function(id) { - let foundState = getState(id); - if (foundState === void 0) { - const trimmedId = id.trim(); - addState(trimmedId); - foundState = getState(trimmedId); - } - foundState.classes.push(cssClassName); - }); -}; -const setStyle = function(itemId, styleText) { - const item = getState(itemId); - if (item !== void 0) { - item.textStyles.push(styleText); - } -}; -const setTextStyle = function(itemId, cssClassName) { - const item = getState(itemId); - if (item !== void 0) { - item.textStyles.push(cssClassName); - } -}; -const getDirection = () => direction; -const setDirection = (dir) => { - direction = dir; -}; -const trimColon = (str) => str && str[0] === ":" ? str.substr(1).trim() : str.trim(); -const db = { - getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)().state, - addState, - clear, - getState, - getStates, - getRelations, - getClasses, - getDirection, - addRelation, - getDividerId, - setDirection, - cleanupLabel, - lineType, - relationType, - logDocuments, - getRootDoc, - setRootDoc, - getRootDocV2, - extract, - trimColon, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.g, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.s, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.a, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.b, - addStyleClass, - setCssClass, - addDescription, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.t -}; -const getStyles = (options) => ` -defs #statediagram-barbEnd { - fill: ${options.transitionColor}; - stroke: ${options.transitionColor}; - } -g.stateGroup text { - fill: ${options.nodeBorder}; - stroke: none; - font-size: 10px; -} -g.stateGroup text { - fill: ${options.textColor}; - stroke: none; - font-size: 10px; - -} -g.stateGroup .state-title { - font-weight: bolder; - fill: ${options.stateLabelColor}; -} - -g.stateGroup rect { - fill: ${options.mainBkg}; - stroke: ${options.nodeBorder}; -} - -g.stateGroup line { - stroke: ${options.lineColor}; - stroke-width: 1; -} - -.transition { - stroke: ${options.transitionColor}; - stroke-width: 1; - fill: none; -} - -.stateGroup .composit { - fill: ${options.background}; - border-bottom: 1px -} - -.stateGroup .alt-composit { - fill: #e0e0e0; - border-bottom: 1px -} - -.state-note { - stroke: ${options.noteBorderColor}; - fill: ${options.noteBkgColor}; - - text { - fill: ${options.noteTextColor}; - stroke: none; - font-size: 10px; - } -} - -.stateLabel .box { - stroke: none; - stroke-width: 0; - fill: ${options.mainBkg}; - opacity: 0.5; -} - -.edgeLabel .label rect { - fill: ${options.labelBackgroundColor}; - opacity: 0.5; -} -.edgeLabel .label text { - fill: ${options.transitionLabelColor || options.tertiaryTextColor}; -} -.label div .edgeLabel { - color: ${options.transitionLabelColor || options.tertiaryTextColor}; -} - -.stateLabel text { - fill: ${options.stateLabelColor}; - font-size: 10px; - font-weight: bold; -} - -.node circle.state-start { - fill: ${options.specialStateColor}; - stroke: ${options.specialStateColor}; -} - -.node .fork-join { - fill: ${options.specialStateColor}; - stroke: ${options.specialStateColor}; -} - -.node circle.state-end { - fill: ${options.innerEndBackground}; - stroke: ${options.background}; - stroke-width: 1.5 -} -.end-state-inner { - fill: ${options.compositeBackground || options.background}; - // stroke: ${options.background}; - stroke-width: 1.5 -} - -.node rect { - fill: ${options.stateBkg || options.mainBkg}; - stroke: ${options.stateBorder || options.nodeBorder}; - stroke-width: 1px; -} -.node polygon { - fill: ${options.mainBkg}; - stroke: ${options.stateBorder || options.nodeBorder};; - stroke-width: 1px; -} -#statediagram-barbEnd { - fill: ${options.lineColor}; -} - -.statediagram-cluster rect { - fill: ${options.compositeTitleBackground}; - stroke: ${options.stateBorder || options.nodeBorder}; - stroke-width: 1px; -} - -.cluster-label, .nodeLabel { - color: ${options.stateLabelColor}; -} - -.statediagram-cluster rect.outer { - rx: 5px; - ry: 5px; -} -.statediagram-state .divider { - stroke: ${options.stateBorder || options.nodeBorder}; -} - -.statediagram-state .title-state { - rx: 5px; - ry: 5px; -} -.statediagram-cluster.statediagram-cluster .inner { - fill: ${options.compositeBackground || options.background}; -} -.statediagram-cluster.statediagram-cluster-alt .inner { - fill: ${options.altBackground ? options.altBackground : "#efefef"}; -} - -.statediagram-cluster .inner { - rx:0; - ry:0; -} - -.statediagram-state rect.basic { - rx: 5px; - ry: 5px; -} -.statediagram-state rect.divider { - stroke-dasharray: 10,10; - fill: ${options.altBackground ? options.altBackground : "#efefef"}; -} - -.note-edge { - stroke-dasharray: 5; -} - -.statediagram-note rect { - fill: ${options.noteBkgColor}; - stroke: ${options.noteBorderColor}; - stroke-width: 1px; - rx: 0; - ry: 0; -} -.statediagram-note rect { - fill: ${options.noteBkgColor}; - stroke: ${options.noteBorderColor}; - stroke-width: 1px; - rx: 0; - ry: 0; -} - -.statediagram-note text { - fill: ${options.noteTextColor}; -} - -.statediagram-note .nodeLabel { - color: ${options.noteTextColor}; -} -.statediagram .edgeLabel { - color: red; // ${options.noteTextColor}; -} - -#dependencyStart, #dependencyEnd { - fill: ${options.lineColor}; - stroke: ${options.lineColor}; - stroke-width: 1; -} - -.statediagramTitleText { - text-anchor: middle; - font-size: 18px; - fill: ${options.textColor}; -} -`; -const styles = getStyles; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/3626.1692bd06.js b/pr-preview/pr-1594/assets/js/3626.1692bd06.js deleted file mode 100644 index 9c1455b1d2..0000000000 --- a/pr-preview/pr-1594/assets/js/3626.1692bd06.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3626],{63626:(t,e,s)=>{s.d(e,{d:()=>D,p:()=>r,s:()=>_});var n=s(26312),i=s(99702),u=function(){var t=function(t,e,s,n){for(s=s||{},n=t.length;n--;s[t[n]]=e);return s},e=[1,17],s=[1,18],n=[1,19],i=[1,39],u=[1,40],r=[1,25],a=[1,23],c=[1,24],o=[1,31],l=[1,32],h=[1,33],A=[1,34],p=[1,35],d=[1,36],y=[1,26],E=[1,27],C=[1,28],m=[1,29],f=[1,43],b=[1,30],F=[1,42],g=[1,44],k=[1,41],T=[1,45],B=[1,9],D=[1,8,9],_=[1,56],S=[1,57],N=[1,58],L=[1,59],$=[1,60],v=[1,61],O=[1,62],x=[1,8,9,39],I=[1,74],R=[1,8,9,12,13,21,37,39,42,59,60,61,62,63,64,65,70,72],w=[1,8,9,12,13,19,21,37,39,42,46,59,60,61,62,63,64,65,70,72,74,80,95,97,98],P=[13,74,80,95,97,98],M=[13,64,65,74,80,95,97,98],G=[13,59,60,61,62,63,74,80,95,97,98],U=[1,93],z=[1,110],K=[1,108],Y=[1,102],j=[1,103],Q=[1,104],X=[1,105],W=[1,106],q=[1,107],H=[1,109],J=[1,8,9,37,39,42],V=[1,8,9,21],Z=[1,8,9,78],tt=[1,8,9,21,73,74,78,80,81,82,83,84,85],et={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,styleStatement:27,cssClassStatement:28,noteStatement:29,direction:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,namespaceIdentifier:36,STRUCT_START:37,classStatements:38,STRUCT_STOP:39,NAMESPACE:40,classIdentifier:41,STYLE_SEPARATOR:42,members:43,CLASS:44,ANNOTATION_START:45,ANNOTATION_END:46,MEMBER:47,SEPARATOR:48,relation:49,NOTE_FOR:50,noteText:51,NOTE:52,direction_tb:53,direction_bt:54,direction_rl:55,direction_lr:56,relationType:57,lineType:58,AGGREGATION:59,EXTENSION:60,COMPOSITION:61,DEPENDENCY:62,LOLLIPOP:63,LINE:64,DOTTED_LINE:65,CALLBACK:66,LINK:67,LINK_TARGET:68,CLICK:69,CALLBACK_NAME:70,CALLBACK_ARGS:71,HREF:72,STYLE:73,ALPHA:74,stylesOpt:75,CSSCLASS:76,style:77,COMMA:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,commentToken:86,textToken:87,graphCodeTokens:88,textNoTagsToken:89,TAGSTART:90,TAGEND:91,"==":92,"--":93,DEFAULT:94,MINUS:95,keywords:96,UNICODE_TEXT:97,BQUOTE_STR:98,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",37:"STRUCT_START",39:"STRUCT_STOP",40:"NAMESPACE",42:"STYLE_SEPARATOR",44:"CLASS",45:"ANNOTATION_START",46:"ANNOTATION_END",47:"MEMBER",48:"SEPARATOR",50:"NOTE_FOR",52:"NOTE",53:"direction_tb",54:"direction_bt",55:"direction_rl",56:"direction_lr",59:"AGGREGATION",60:"EXTENSION",61:"COMPOSITION",62:"DEPENDENCY",63:"LOLLIPOP",64:"LINE",65:"DOTTED_LINE",66:"CALLBACK",67:"LINK",68:"LINK_TARGET",69:"CLICK",70:"CALLBACK_NAME",71:"CALLBACK_ARGS",72:"HREF",73:"STYLE",74:"ALPHA",76:"CSSCLASS",78:"COMMA",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",88:"graphCodeTokens",90:"TAGSTART",91:"TAGEND",92:"==",93:"--",94:"DEFAULT",95:"MINUS",96:"keywords",97:"UNICODE_TEXT",98:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[36,2],[38,1],[38,2],[38,3],[23,1],[23,3],[23,4],[23,6],[41,2],[41,3],[25,4],[43,1],[43,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[29,3],[29,2],[30,1],[30,1],[30,1],[30,1],[49,3],[49,2],[49,2],[49,1],[57,1],[57,1],[57,1],[57,1],[57,1],[58,1],[58,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[28,3],[75,1],[75,3],[77,1],[77,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[86,1],[86,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[89,1],[89,1],[89,1],[89,1],[16,1],[16,1],[16,1],[16,1],[18,1],[51,1]],performAction:function(t,e,s,n,i,u,r){var a=u.length-1;switch(i){case 8:this.$=u[a-1];break;case 9:case 11:case 12:this.$=u[a];break;case 10:case 13:case 89:this.$=u[a-1]+u[a];break;case 14:case 15:this.$=u[a-1]+"~"+u[a]+"~";break;case 16:n.addRelation(u[a]);break;case 17:u[a-1].title=n.cleanupLabel(u[a]),n.addRelation(u[a-1]);break;case 27:this.$=u[a].trim(),n.setAccTitle(this.$);break;case 28:case 29:this.$=u[a].trim(),n.setAccDescription(this.$);break;case 30:n.addClassesToNamespace(u[a-3],u[a-1]);break;case 31:n.addClassesToNamespace(u[a-4],u[a-1]);break;case 32:this.$=u[a],n.addNamespace(u[a]);break;case 33:case 43:case 86:this.$=[u[a]];break;case 34:this.$=[u[a-1]];break;case 35:u[a].unshift(u[a-2]),this.$=u[a];break;case 37:n.setCssClass(u[a-2],u[a]);break;case 38:n.addMembers(u[a-3],u[a-1]);break;case 39:n.setCssClass(u[a-5],u[a-3]),n.addMembers(u[a-5],u[a-1]);break;case 40:this.$=u[a],n.addClass(u[a]);break;case 41:this.$=u[a-1],n.addClass(u[a-1]),n.setClassLabel(u[a-1],u[a]);break;case 42:n.addAnnotation(u[a],u[a-2]);break;case 44:u[a].push(u[a-1]),this.$=u[a];break;case 45:case 47:case 48:break;case 46:n.addMember(u[a-1],n.cleanupLabel(u[a]));break;case 49:this.$={id1:u[a-2],id2:u[a],relation:u[a-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:u[a-3],id2:u[a],relation:u[a-1],relationTitle1:u[a-2],relationTitle2:"none"};break;case 51:this.$={id1:u[a-3],id2:u[a],relation:u[a-2],relationTitle1:"none",relationTitle2:u[a-1]};break;case 52:this.$={id1:u[a-4],id2:u[a],relation:u[a-2],relationTitle1:u[a-3],relationTitle2:u[a-1]};break;case 53:n.addNote(u[a],u[a-1]);break;case 54:n.addNote(u[a]);break;case 55:n.setDirection("TB");break;case 56:n.setDirection("BT");break;case 57:n.setDirection("RL");break;case 58:n.setDirection("LR");break;case 59:this.$={type1:u[a-2],type2:u[a],lineType:u[a-1]};break;case 60:this.$={type1:"none",type2:u[a],lineType:u[a-1]};break;case 61:this.$={type1:u[a-1],type2:"none",lineType:u[a]};break;case 62:this.$={type1:"none",type2:"none",lineType:u[a]};break;case 63:this.$=n.relationType.AGGREGATION;break;case 64:this.$=n.relationType.EXTENSION;break;case 65:this.$=n.relationType.COMPOSITION;break;case 66:this.$=n.relationType.DEPENDENCY;break;case 67:this.$=n.relationType.LOLLIPOP;break;case 68:this.$=n.lineType.LINE;break;case 69:this.$=n.lineType.DOTTED_LINE;break;case 70:case 76:this.$=u[a-2],n.setClickEvent(u[a-1],u[a]);break;case 71:case 77:this.$=u[a-3],n.setClickEvent(u[a-2],u[a-1]),n.setTooltip(u[a-2],u[a]);break;case 72:this.$=u[a-2],n.setLink(u[a-1],u[a]);break;case 73:this.$=u[a-3],n.setLink(u[a-2],u[a-1],u[a]);break;case 74:this.$=u[a-3],n.setLink(u[a-2],u[a-1]),n.setTooltip(u[a-2],u[a]);break;case 75:this.$=u[a-4],n.setLink(u[a-3],u[a-2],u[a]),n.setTooltip(u[a-3],u[a-1]);break;case 78:this.$=u[a-3],n.setClickEvent(u[a-2],u[a-1],u[a]);break;case 79:this.$=u[a-4],n.setClickEvent(u[a-3],u[a-2],u[a-1]),n.setTooltip(u[a-3],u[a]);break;case 80:this.$=u[a-3],n.setLink(u[a-2],u[a]);break;case 81:this.$=u[a-4],n.setLink(u[a-3],u[a-1],u[a]);break;case 82:this.$=u[a-4],n.setLink(u[a-3],u[a-1]),n.setTooltip(u[a-3],u[a]);break;case 83:this.$=u[a-5],n.setLink(u[a-4],u[a-2],u[a]),n.setTooltip(u[a-4],u[a-1]);break;case 84:this.$=u[a-2],n.setCssStyle(u[a-1],u[a]);break;case 85:n.setCssClass(u[a-1],u[a]);break;case 87:u[a-2].push(u[a]),this.$=u[a-2]}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:e,33:s,35:n,36:21,40:i,41:22,44:u,45:r,47:a,48:c,50:o,52:l,53:h,54:A,55:p,56:d,66:y,67:E,69:C,73:m,74:f,76:b,80:F,95:g,97:k,98:T},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(B,[2,5],{8:[1,46]}),{8:[1,47]},t(D,[2,16],{21:[1,48]}),t(D,[2,18]),t(D,[2,19]),t(D,[2,20]),t(D,[2,21]),t(D,[2,22]),t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),{32:[1,49]},{34:[1,50]},t(D,[2,29]),t(D,[2,45],{49:51,57:54,58:55,13:[1,52],21:[1,53],59:_,60:S,61:N,62:L,63:$,64:v,65:O}),{37:[1,63]},t(x,[2,36],{37:[1,65],42:[1,64]}),t(D,[2,47]),t(D,[2,48]),{16:66,74:f,80:F,95:g,97:k},{16:37,17:67,18:38,74:f,80:F,95:g,97:k,98:T},{16:37,17:68,18:38,74:f,80:F,95:g,97:k,98:T},{16:37,17:69,18:38,74:f,80:F,95:g,97:k,98:T},{74:[1,70]},{13:[1,71]},{16:37,17:72,18:38,74:f,80:F,95:g,97:k,98:T},{13:I,51:73},t(D,[2,55]),t(D,[2,56]),t(D,[2,57]),t(D,[2,58]),t(R,[2,11],{16:37,18:38,17:75,19:[1,76],74:f,80:F,95:g,97:k,98:T}),t(R,[2,12],{19:[1,77]}),{15:78,16:79,74:f,80:F,95:g,97:k},{16:37,17:80,18:38,74:f,80:F,95:g,97:k,98:T},t(w,[2,112]),t(w,[2,113]),t(w,[2,114]),t(w,[2,115]),t([1,8,9,12,13,19,21,37,39,42,59,60,61,62,63,64,65,70,72],[2,116]),t(B,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,17:20,36:21,41:22,16:37,18:38,5:81,31:e,33:s,35:n,40:i,44:u,45:r,47:a,48:c,50:o,52:l,53:h,54:A,55:p,56:d,66:y,67:E,69:C,73:m,74:f,76:b,80:F,95:g,97:k,98:T}),{5:82,10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:e,33:s,35:n,36:21,40:i,41:22,44:u,45:r,47:a,48:c,50:o,52:l,53:h,54:A,55:p,56:d,66:y,67:E,69:C,73:m,74:f,76:b,80:F,95:g,97:k,98:T},t(D,[2,17]),t(D,[2,27]),t(D,[2,28]),{13:[1,84],16:37,17:83,18:38,74:f,80:F,95:g,97:k,98:T},{49:85,57:54,58:55,59:_,60:S,61:N,62:L,63:$,64:v,65:O},t(D,[2,46]),{58:86,64:v,65:O},t(P,[2,62],{57:87,59:_,60:S,61:N,62:L,63:$}),t(M,[2,63]),t(M,[2,64]),t(M,[2,65]),t(M,[2,66]),t(M,[2,67]),t(G,[2,68]),t(G,[2,69]),{8:[1,89],23:90,38:88,41:22,44:u},{16:91,74:f,80:F,95:g,97:k},{43:92,47:U},{46:[1,94]},{13:[1,95]},{13:[1,96]},{70:[1,97],72:[1,98]},{21:z,73:K,74:Y,75:99,77:100,79:101,80:j,81:Q,82:X,83:W,84:q,85:H},{74:[1,111]},{13:I,51:112},t(D,[2,54]),t(D,[2,117]),t(R,[2,13]),t(R,[2,14]),t(R,[2,15]),{37:[2,32]},{15:113,16:79,37:[2,9],74:f,80:F,95:g,97:k},t(J,[2,40],{11:114,12:[1,115]}),t(B,[2,7]),{9:[1,116]},t(V,[2,49]),{16:37,17:117,18:38,74:f,80:F,95:g,97:k,98:T},{13:[1,119],16:37,17:118,18:38,74:f,80:F,95:g,97:k,98:T},t(P,[2,61],{57:120,59:_,60:S,61:N,62:L,63:$}),t(P,[2,60]),{39:[1,121]},{23:90,38:122,41:22,44:u},{8:[1,123],39:[2,33]},t(x,[2,37],{37:[1,124]}),{39:[1,125]},{39:[2,43],43:126,47:U},{16:37,17:127,18:38,74:f,80:F,95:g,97:k,98:T},t(D,[2,70],{13:[1,128]}),t(D,[2,72],{13:[1,130],68:[1,129]}),t(D,[2,76],{13:[1,131],71:[1,132]}),{13:[1,133]},t(D,[2,84],{78:[1,134]}),t(Z,[2,86],{79:135,21:z,73:K,74:Y,80:j,81:Q,82:X,83:W,84:q,85:H}),t(tt,[2,88]),t(tt,[2,90]),t(tt,[2,91]),t(tt,[2,92]),t(tt,[2,93]),t(tt,[2,94]),t(tt,[2,95]),t(tt,[2,96]),t(tt,[2,97]),t(tt,[2,98]),t(D,[2,85]),t(D,[2,53]),{37:[2,10]},t(J,[2,41]),{13:[1,136]},{1:[2,4]},t(V,[2,51]),t(V,[2,50]),{16:37,17:137,18:38,74:f,80:F,95:g,97:k,98:T},t(P,[2,59]),t(D,[2,30]),{39:[1,138]},{23:90,38:139,39:[2,34],41:22,44:u},{43:140,47:U},t(x,[2,38]),{39:[2,44]},t(D,[2,42]),t(D,[2,71]),t(D,[2,73]),t(D,[2,74],{68:[1,141]}),t(D,[2,77]),t(D,[2,78],{13:[1,142]}),t(D,[2,80],{13:[1,144],68:[1,143]}),{21:z,73:K,74:Y,77:145,79:101,80:j,81:Q,82:X,83:W,84:q,85:H},t(tt,[2,89]),{14:[1,146]},t(V,[2,52]),t(D,[2,31]),{39:[2,35]},{39:[1,147]},t(D,[2,75]),t(D,[2,79]),t(D,[2,81]),t(D,[2,82],{68:[1,148]}),t(Z,[2,87],{79:135,21:z,73:K,74:Y,80:j,81:Q,82:X,83:W,84:q,85:H}),t(J,[2,8]),t(x,[2,39]),t(D,[2,83])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],78:[2,32],113:[2,10],116:[2,4],126:[2,44],139:[2,35]},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],n=[],i=[null],u=[],r=this.table,a="",c=0,o=0,l=u.slice.call(arguments,1),h=Object.create(this.lexer),A={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(A.yy[p]=this.yy[p]);h.setInput(t,A.yy),A.yy.lexer=h,A.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var d=h.yylloc;u.push(d);var y=h.options&&h.options.ranges;"function"==typeof A.yy.parseError?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,C,m,f,b,F,g,k,T,B={};;){if(C=s[s.length-1],this.defaultActions[C]?m=this.defaultActions[C]:(null==E&&(T=void 0,"number"!=typeof(T=n.pop()||h.lex()||1)&&(T instanceof Array&&(T=(n=T).pop()),T=e.symbols_[T]||T),E=T),m=r[C]&&r[C][E]),void 0===m||!m.length||!m[0]){var D="";for(b in k=[],r[C])this.terminals_[b]&&b>2&&k.push("'"+this.terminals_[b]+"'");D=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[E]||E,line:h.yylineno,loc:d,expected:k})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+C+", token: "+E);switch(m[0]){case 1:s.push(E),i.push(h.yytext),u.push(h.yylloc),s.push(m[1]),E=null,o=h.yyleng,a=h.yytext,c=h.yylineno,d=h.yylloc;break;case 2:if(F=this.productions_[m[1]][1],B.$=i[i.length-F],B._$={first_line:u[u.length-(F||1)].first_line,last_line:u[u.length-1].last_line,first_column:u[u.length-(F||1)].first_column,last_column:u[u.length-1].last_column},y&&(B._$.range=[u[u.length-(F||1)].range[0],u[u.length-1].range[1]]),void 0!==(f=this.performAction.apply(B,[a,o,c,A.yy,m[1],i,u].concat(l))))return f;F&&(s=s.slice(0,-1*F*2),i=i.slice(0,-1*F),u=u.slice(0,-1*F)),s.push(this.productions_[m[1]][0]),i.push(B.$),u.push(B._$),g=r[s[s.length-2]][s[s.length-1]],s.push(g);break;case 3:return!0}}return!0}},st={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===n.length?this.yylloc.first_column:0)+n[n.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var s,n,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var u in i)this[u]=i[u];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),u=0;ue[0].length)){if(e=s,n=u,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,i[u])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,s,n){switch(s){case 0:return 53;case 1:return 54;case 2:return 55;case 3:return 56;case 4:case 5:case 14:case 30:case 35:case 39:case 46:break;case 6:return this.begin("acc_title"),31;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),33;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 19:case 22:case 24:case 57:case 60:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:case 34:return 8;case 15:case 16:return 7;case 17:case 36:case 44:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 70;case 23:return 71;case 25:return"STR";case 26:this.begin("string");break;case 27:return 73;case 28:return this.begin("namespace"),40;case 29:case 38:return this.popState(),8;case 31:return this.begin("namespace-body"),37;case 32:case 42:return this.popState(),39;case 33:case 43:return"EOF_IN_STRUCT";case 37:return this.begin("class"),44;case 40:return this.popState(),this.popState(),39;case 41:return this.begin("class-body"),37;case 45:return"OPEN_IN_STRUCT";case 47:return"MEMBER";case 48:return 76;case 49:return 66;case 50:return 67;case 51:return 69;case 52:return 50;case 53:return 52;case 54:return 45;case 55:return 46;case 56:return 72;case 58:return"GENERICTYPE";case 59:this.begin("generic");break;case 61:return"BQUOTE_STR";case 62:this.begin("bqstring");break;case 63:case 64:case 65:case 66:return 68;case 67:case 68:return 60;case 69:case 70:return 62;case 71:return 61;case 72:return 59;case 73:return 63;case 74:return 64;case 75:return 65;case 76:return 21;case 77:return 42;case 78:return 95;case 79:return"DOT";case 80:return"PLUS";case 81:return 81;case 82:return 78;case 83:case 84:return 84;case 85:return 85;case 86:case 87:return"EQUALS";case 88:return 74;case 89:return 12;case 90:return 14;case 91:return"PUNCTUATION";case 92:return 80;case 93:return 97;case 94:case 95:return 83;case 96:return 9}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,32,33,34,35,36,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},namespace:{rules:[26,28,29,30,31,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},"class-body":{rules:[26,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},class:{rules:[26,38,39,40,41,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr:{rules:[9,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_title:{rules:[7,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_args:{rules:[22,23,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_name:{rules:[19,20,21,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},href:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},struct:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},generic:{rules:[26,48,49,50,51,52,53,54,55,56,57,58,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},bqstring:{rules:[26,48,49,50,51,52,53,54,55,56,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},string:{rules:[24,25,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96],inclusive:!0}}};function nt(){this.yy={}}return et.lexer=st,nt.prototype=et,et.Parser=nt,new nt}();u.parser=u;const r=u,a=["#","+","~","-",""];class c{constructor(t,e){this.memberType=e,this.visibility="",this.classifier="";const s=(0,i.d)(t,(0,i.c)());this.parseMember(s)}getDisplayDetails(){let t=this.visibility+(0,i.x)(this.id);"method"===this.memberType&&(t+=`(${(0,i.x)(this.parameters.trim())})`,this.returnType&&(t+=" : "+(0,i.x)(this.returnType))),t=t.trim();return{displayText:t,cssStyle:this.parseClassifier()}}parseMember(t){let e="";if("method"===this.memberType){const s=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/,n=t.match(s);if(n){const t=n[1]?n[1].trim():"";if(a.includes(t)&&(this.visibility=t),this.id=n[2].trim(),this.parameters=n[3]?n[3].trim():"",e=n[4]?n[4].trim():"",this.returnType=n[5]?n[5].trim():"",""===e){const t=this.returnType.substring(this.returnType.length-1);t.match(/[$*]/)&&(e=t,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{const s=t.length,n=t.substring(0,1),i=t.substring(s-1);a.includes(n)&&(this.visibility=n),i.match(/[$*]/)&&(e=i),this.id=t.substring(""===this.visibility?0:1,""===e?s:s-1)}this.classifier=e}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}const o="classId-";let l=[],h={},A=[],p=0,d={},y=0,E=[];const C=t=>i.e.sanitizeText(t,(0,i.c)()),m=function(t){const e=i.e.sanitizeText(t,(0,i.c)());let s="",n=e;if(e.indexOf("~")>0){const t=e.split("~");n=C(t[0]),s=C(t[1])}return{className:n,type:s}},f=function(t){const e=i.e.sanitizeText(t,(0,i.c)()),{className:s,type:n}=m(e);if(Object.hasOwn(h,s))return;const u=i.e.sanitizeText(s,(0,i.c)());h[u]={id:u,type:n,label:u,cssClasses:[],methods:[],members:[],annotations:[],styles:[],domId:o+u+"-"+p},p++},b=function(t){const e=i.e.sanitizeText(t,(0,i.c)());if(e in h)return h[e].domId;throw new Error("Class not found: "+e)},F=function(t,e){f(t);const s=m(t).className,n=h[s];if("string"==typeof e){const t=e.trim();t.startsWith("<<")&&t.endsWith(">>")?n.annotations.push(C(t.substring(2,t.length-2))):t.indexOf(")")>0?n.methods.push(new c(t,"method")):t&&n.members.push(new c(t,"attribute"))}},g=function(t,e){t.split(",").forEach((function(t){let s=t;t[0].match(/\d/)&&(s=o+s),void 0!==h[s]&&h[s].cssClasses.push(e)}))},k=function(t,e,s){const n=i.e.sanitizeText(t,(0,i.c)());if("loose"!==(0,i.c)().securityLevel)return;if(void 0===e)return;const u=n;if(void 0!==h[u]){const t=b(u);let n=[];if("string"==typeof s){n=s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,n.Ltv)(this).classed("hover",!1)}))};E.push(T);let B="TB";const D={setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,getConfig:()=>(0,i.c)().class,addClass:f,bindFunctions:function(t){E.forEach((function(e){e(t)}))},clear:function(){l=[],h={},A=[],E=[],E.push(T),d={},y=0,(0,i.v)()},getClass:function(t){return h[t]},getClasses:function(){return h},getNotes:function(){return A},addAnnotation:function(t,e){const s=m(t).className;h[s].annotations.push(e)},addNote:function(t,e){const s={id:`note${A.length}`,class:e,text:t};A.push(s)},getRelations:function(){return l},addRelation:function(t){i.l.debug("Adding relation: "+JSON.stringify(t)),f(t.id1),f(t.id2),t.id1=m(t.id1).className,t.id2=m(t.id2).className,t.relationTitle1=i.e.sanitizeText(t.relationTitle1.trim(),(0,i.c)()),t.relationTitle2=i.e.sanitizeText(t.relationTitle2.trim(),(0,i.c)()),l.push(t)},getDirection:()=>B,setDirection:t=>{B=t},addMember:F,addMembers:function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach((e=>F(t,e))))},cleanupLabel:function(t){return t.startsWith(":")&&(t=t.substring(1)),C(t.trim())},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},setClickEvent:function(t,e,s){t.split(",").forEach((function(t){k(t,e,s),h[t].haveCallback=!0})),g(t,"clickable")},setCssClass:g,setLink:function(t,e,s){const n=(0,i.c)();t.split(",").forEach((function(t){let u=t;t[0].match(/\d/)&&(u=o+u),void 0!==h[u]&&(h[u].link=i.u.formatUrl(e,n),"sandbox"===n.securityLevel?h[u].linkTarget="_top":h[u].linkTarget="string"==typeof s?C(s):"_blank")})),g(t,"clickable")},getTooltip:function(t,e){return e?d[e].classes[t].tooltip:h[t].tooltip},setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(h[t].tooltip=C(e))}))},lookUpDomId:b,setDiagramTitle:i.q,getDiagramTitle:i.t,setClassLabel:function(t,e){const s=i.e.sanitizeText(t,(0,i.c)());e&&(e=C(e));const{className:n}=m(s);h[n].label=e},addNamespace:function(t){void 0===d[t]&&(d[t]={id:t,classes:{},children:{},domId:o+t+"-"+y},y++)},addClassesToNamespace:function(t,e){if(void 0!==d[t])for(const s of e){const{className:e}=m(s);h[e].parent=t,d[t].classes[e]=h[e]}},getNamespace:function(t){return d[t]},getNamespaces:function(){return d},setCssStyle:function(t,e){const s=h[t];if(e&&s)for(const n of e)n.includes(",")?s.styles.push(...n.split(",")):s.styles.push(n)}},_=t=>`g.classGroup text {\n fill: ${t.nodeBorder||t.classText};\n stroke: none;\n font-family: ${t.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${t.classText};\n}\n.edgeLabel .label rect {\n fill: ${t.mainBkg};\n}\n.label text {\n fill: ${t.classText};\n}\n.edgeLabel .label span {\n background: ${t.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${t.nodeBorder};\n stroke-width: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${t.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${t.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${t.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n line-height: initial;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/3658.0c8f3c0c.js b/pr-preview/pr-1594/assets/js/3658.0c8f3c0c.js deleted file mode 100644 index 8d38c6936d..0000000000 --- a/pr-preview/pr-1594/assets/js/3658.0c8f3c0c.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[3658],{27293:(e,t,n)=>{"use strict";n.d(t,{A:()=>E});var s=n(96540),o=n(74848);function a(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),a=t.filter((e=>e!==n)),i=n?.props.children;return{mdxAdmonitionTitle:i,rest:a.length>0?(0,o.jsx)(o.Fragment,{children:a}):null}}(e.children),a=e.title??t;return{...e,...a&&{title:a},children:n}}var i=n(34164),c=n(21312),r=n(17559);const l={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:t,className:n,children:s}=e;return(0,o.jsx)("div",{className:(0,i.A)(r.G.common.admonition,r.G.common.admonitionType(t),l.admonition,n),children:s})}function u(e){let{icon:t,title:n}=e;return(0,o.jsxs)("div",{className:l.admonitionHeading,children:[(0,o.jsx)("span",{className:l.admonitionIcon,children:t}),n]})}function m(e){let{children:t}=e;return t?(0,o.jsx)("div",{className:l.admonitionContent,children:t}):null}function h(e){const{type:t,icon:n,title:s,children:a,className:i}=e;return(0,o.jsxs)(d,{type:t,className:i,children:[s||n?(0,o.jsx)(u,{title:s,icon:n}):null,(0,o.jsx)(m,{children:a})]})}function f(e){return(0,o.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const p={icon:(0,o.jsx)(f,{}),title:(0,o.jsx)(c.A,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function x(e){return(0,o.jsx)(h,{...p,...e,className:(0,i.A)("alert alert--secondary",e.className),children:e.children})}function g(e){return(0,o.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const b={icon:(0,o.jsx)(g,{}),title:(0,o.jsx)(c.A,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function v(e){return(0,o.jsx)(h,{...b,...e,className:(0,i.A)("alert alert--success",e.className),children:e.children})}function j(e){return(0,o.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const N={icon:(0,o.jsx)(j,{}),title:(0,o.jsx)(c.A,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function y(e){return(0,o.jsx)(h,{...N,...e,className:(0,i.A)("alert alert--info",e.className),children:e.children})}function A(e){return(0,o.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const C={icon:(0,o.jsx)(A,{}),title:(0,o.jsx)(c.A,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function k(e){return(0,o.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const B={icon:(0,o.jsx)(k,{}),title:(0,o.jsx)(c.A,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const w={icon:(0,o.jsx)(A,{}),title:(0,o.jsx)(c.A,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const L={...{note:x,tip:v,info:y,warning:function(e){return(0,o.jsx)(h,{...C,...e,className:(0,i.A)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,o.jsx)(h,{...B,...e,className:(0,i.A)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,o.jsx)(x,{title:"secondary",...e}),important:e=>(0,o.jsx)(y,{title:"important",...e}),success:e=>(0,o.jsx)(v,{title:"success",...e}),caution:function(e){return(0,o.jsx)(h,{...w,...e,className:(0,i.A)("alert alert--warning",e.className),children:e.children})}}};function E(e){const t=a(e),n=(s=t.type,L[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),L.info));var s;return(0,o.jsx)(n,{...t})}},12153:(e,t,n)=>{"use strict";n.d(t,{A:()=>g});n(96540);var s=n(34164),o=n(21312),a=n(17559),i=n(28774);const c={iconEdit:"iconEdit_Z9Sw"};var r=n(74848);function l(e){let{className:t,...n}=e;return(0,r.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.A)(c.iconEdit,t),"aria-hidden":"true",...n,children:(0,r.jsx)("g",{children:(0,r.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d(e){let{editUrl:t}=e;return(0,r.jsxs)(i.A,{to:t,className:a.G.common.editThisPage,children:[(0,r.jsx)(l,{}),(0,r.jsx)(o.A,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var u=n(44586);function m(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,u.A)(),n=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,u.A)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}function h(e){let{lastUpdatedAt:t}=e;const n=new Date(t),s=m({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(n);return(0,r.jsx)(o.A,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,r.jsx)("b",{children:(0,r.jsx)("time",{dateTime:n.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function f(e){let{lastUpdatedBy:t}=e;return(0,r.jsx)(o.A,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,r.jsx)("b",{children:t})},children:" by {user}"})}function p(e){let{lastUpdatedAt:t,lastUpdatedBy:n}=e;return(0,r.jsxs)("span",{className:a.G.common.lastUpdated,children:[(0,r.jsx)(o.A,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,r.jsx)(h,{lastUpdatedAt:t}):"",byUser:n?(0,r.jsx)(f,{lastUpdatedBy:n}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const x={lastUpdated:"lastUpdated_JAkA"};function g(e){let{className:t,editUrl:n,lastUpdatedAt:o,lastUpdatedBy:a}=e;return(0,r.jsxs)("div",{className:(0,s.A)("row",t),children:[(0,r.jsx)("div",{className:"col",children:n&&(0,r.jsx)(d,{editUrl:n})}),(0,r.jsx)("div",{className:(0,s.A)("col",x.lastUpdated),children:(o||a)&&(0,r.jsx)(p,{lastUpdatedAt:o,lastUpdatedBy:a})})]})}},15533:(e,t,n)=>{"use strict";n.d(t,{A:()=>re});var s=n(96540),o=n(28453),a=n(5260),i=n(92303),c=n(34164),r=n(95293),l=n(6342);function d(){const{prism:e}=(0,l.p)(),{colorMode:t}=(0,r.G)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var u=n(17559),m=n(18426),h=n.n(m);const f=/title=(?["'])(?.*?)\1/,p=/\{(?<range>[\d,-]+)\}/,x={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},g={...x,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},b=Object.keys(x);function v(e,t){const n=e.map((e=>{const{start:n,end:s}=g[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function j(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:o,metastring:a}=t;if(a&&p.test(a)){const e=a.match(p).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${a}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,s=h()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const i=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return v(["js","jsBlock"],t);case"jsx":case"tsx":return v(["js","jsBlock","jsx"],t);case"html":return v(["js","jsBlock","html"],t);case"python":case"py":case"bash":return v(["bash"],t);case"markdown":case"md":return v(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return v(["tex"],t);case"lua":case"haskell":case"sql":return v(["lua"],t);case"wasm":return v(["wasm"],t);case"vb":case"vba":case"visual-basic":return v(["vb","rem"],t);case"vbnet":return v(["vbnet","rem"],t);case"batch":return v(["rem"],t);case"basic":return v(["rem","f90"],t);case"fsharp":return v(["js","ml"],t);case"ocaml":case"sml":return v(["ml"],t);case"fortran":return v(["f90"],t);case"cobol":return v(["cobol"],t);default:return v(b,t)}}(s,o),c=n.split("\n"),r=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;h<c.length;){const e=c[h].match(i);if(!e){h+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?r[l[t]].range+=`${h},`:d[t]?r[d[t]].start=h:u[t]&&(r[u[t]].range+=`${r[u[t]].start}-${h-1},`),c.splice(h,1)}n=c.join("\n");const m={};return Object.entries(r).forEach((e=>{let[t,{range:n}]=e;h()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const N={codeBlockContainer:"codeBlockContainer_Ckt0"};var y=n(74848);function A(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,o]=e;const a=t[s];a&&"string"==typeof o&&(n[a]=o)})),n}(d());return(0,y.jsx)(t,{...n,style:s,className:(0,c.A)(n.className,N.codeBlockContainer,u.G.common.codeBlock)})}const C={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function k(e){let{children:t,className:n}=e;return(0,y.jsx)(A,{as:"pre",tabIndex:0,className:(0,c.A)(C.codeBlockStandalone,"thin-scrollbar",n),children:(0,y.jsx)("code",{className:C.codeBlockLines,children:t})})}var B=n(89532);const w={attributes:!0,characterData:!0,childList:!0,subtree:!0};function L(e,t){const[n,o]=(0,s.useState)(),a=(0,s.useCallback)((()=>{o(e.current?.closest("[role=tabpanel][hidden]"))}),[e,o]);(0,s.useEffect)((()=>{a()}),[a]),function(e,t,n){void 0===n&&(n=w);const o=(0,B._q)(t),a=(0,B.Be)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(o);return e&&t.observe(e,a),()=>t.disconnect()}),[e,o,a])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var E=n(71765);const T={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function H(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:o,getTokenProps:a}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const i=o({line:t,className:(0,c.A)(n,s&&T.codeLine)}),r=t.map(((e,t)=>(0,y.jsx)("span",{...a({token:e})},t)));return(0,y.jsxs)("span",{...i,children:[s?(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)("span",{className:T.codeLineNumber}),(0,y.jsx)("span",{className:T.codeLineContent,children:r})]}):r,(0,y.jsx)("br",{})]})}var _=n(21312);function S(e){return(0,y.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,y.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function I(e){return(0,y.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,y.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const M={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function U(e){let{code:t,className:n}=e;const[o,a]=(0,s.useState)(!1),i=(0,s.useRef)(void 0),r=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const s=document.createElement("textarea"),o=document.activeElement;s.value=e,s.setAttribute("readonly",""),s.style.contain="strict",s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt";const a=document.getSelection(),i=a.rangeCount>0&&a.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let c=!1;try{c=document.execCommand("copy")}catch{}s.remove(),i&&(a.removeAllRanges(),a.addRange(i)),o&&o.focus()}(t),a(!0),i.current=window.setTimeout((()=>{a(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,y.jsx)("button",{type:"button","aria-label":o?(0,_.T)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,_.T)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,_.T)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.A)("clean-btn",n,M.copyButton,o&&M.copyButtonCopied),onClick:r,children:(0,y.jsxs)("span",{className:M.copyButtonIcons,"aria-hidden":"true",children:[(0,y.jsx)(S,{className:M.copyButtonIcon}),(0,y.jsx)(I,{className:M.copyButtonSuccessIcon})]})})}function z(e){return(0,y.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,y.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const R={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function O(e){let{className:t,onClick:n,isEnabled:s}=e;const o=(0,_.T)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,y.jsx)("button",{type:"button",onClick:n,className:(0,c.A)("clean-btn",t,s&&R.wordWrapButtonEnabled),"aria-label":o,title:o,children:(0,y.jsx)(z,{className:R.wordWrapButtonIcon,"aria-hidden":"true"})})}function $(e){let{children:t,className:n="",metastring:o,title:a,showLineNumbers:i,language:r}=e;const{prism:{defaultLanguage:u,magicComments:m}}=(0,l.p)(),h=function(e){return e?.toLowerCase()}(r??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??u),p=d(),x=function(){const[e,t]=(0,s.useState)(!1),[n,o]=(0,s.useState)(!1),a=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const n=a.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[a,e]),c=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=a.current,n=e>t||a.current.querySelector("code").hasAttribute("style");o(n)}),[a]);return L(a,c),(0,s.useEffect)((()=>{c()}),[e,c]),(0,s.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:a,isEnabled:e,isCodeScrollable:n,toggle:i}}(),g=function(e){return e?.match(f)?.groups.title??""}(o)||a,{lineClassNames:b,code:v}=j(t,{metastring:o,language:h,magicComments:m}),N=i??function(e){return Boolean(e?.includes("showLineNumbers"))}(o);return(0,y.jsxs)(A,{as:"div",className:(0,c.A)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[g&&(0,y.jsx)("div",{className:C.codeBlockTitle,children:g}),(0,y.jsxs)("div",{className:C.codeBlockContent,children:[(0,y.jsx)(E.f4,{theme:p,code:v,language:h??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:o,getTokenProps:a}=e;return(0,y.jsx)("pre",{tabIndex:0,ref:x.codeBlockRef,className:(0,c.A)(t,C.codeBlock,"thin-scrollbar"),style:n,children:(0,y.jsx)("code",{className:(0,c.A)(C.codeBlockLines,N&&C.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,y.jsx)(H,{line:e,getLineProps:o,getTokenProps:a,classNames:b[t],showLineNumbers:N},t)))})})}}),(0,y.jsxs)("div",{className:C.buttonGroup,children:[(x.isEnabled||x.isCodeScrollable)&&(0,y.jsx)(O,{className:C.codeButton,onClick:()=>x.toggle(),isEnabled:x.isEnabled}),(0,y.jsx)(U,{className:C.codeButton,code:v})]})]})]})}function V(e){let{children:t,...n}=e;const o=(0,i.A)(),a=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),c="string"==typeof a?$:k;return(0,y.jsx)(c,{...n,children:a},String(o))}function W(e){return(0,y.jsx)("code",{...e})}var D=n(28774);var q=n(63427),P=n(41422);const G={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function F(e){return!!e&&("SUMMARY"===e.tagName||F(e.parentElement))}function Z(e,t){return!!e&&(e===t||Z(e.parentElement,t))}function J(e){let{summary:t,children:n,...o}=e;(0,q.A)().collectAnchor(o.id);const a=(0,i.A)(),r=(0,s.useRef)(null),{collapsed:l,setCollapsed:d}=(0,P.u)({initialState:!o.open}),[u,m]=(0,s.useState)(o.open),h=s.isValidElement(t)?t:(0,y.jsx)("summary",{children:t??"Details"});return(0,y.jsxs)("details",{...o,ref:r,open:u,"data-collapsed":l,className:(0,c.A)(G.details,a&&G.isBrowser,o.className),onMouseDown:e=>{F(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;F(t)&&Z(t,r.current)&&(e.preventDefault(),l?(d(!1),m(!0)):d(!0))},children:[h,(0,y.jsx)(P.N,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{d(e),m(!e)},children:(0,y.jsx)("div",{className:G.collapsibleContent,children:n})})]})}const Y={details:"details_b_Ee"},K="alert alert--info";function Q(e){let{...t}=e;return(0,y.jsx)(J,{...t,className:(0,c.A)(K,Y.details,t.className)})}function X(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),o=(0,y.jsx)(y.Fragment,{children:t.filter((e=>e!==n))});return(0,y.jsx)(Q,{...e,summary:n,children:o})}var ee=n(51107);function te(e){return(0,y.jsx)(ee.A,{...e})}const ne={containsTaskList:"containsTaskList_mC6p"};function se(e){if(void 0!==e)return(0,c.A)(e,e?.includes("contains-task-list")&&ne.containsTaskList)}const oe={img:"img_ev3q"};var ae=n(27293),ie=n(61114);const ce={Head:a.A,details:X,Details:X,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,y.jsx)(W,{...e}):(0,y.jsx)(V,{...e})},a:function(e){return(0,y.jsx)(D.A,{...e})},pre:function(e){return(0,y.jsx)(y.Fragment,{children:e.children})},ul:function(e){return(0,y.jsx)("ul",{...e,className:se(e.className)})},li:function(e){return(0,q.A)().collectAnchor(e.id),(0,y.jsx)("li",{...e})},img:function(e){return(0,y.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,c.A)(t,oe.img))});var t},h1:e=>(0,y.jsx)(te,{as:"h1",...e}),h2:e=>(0,y.jsx)(te,{as:"h2",...e}),h3:e=>(0,y.jsx)(te,{as:"h3",...e}),h4:e=>(0,y.jsx)(te,{as:"h4",...e}),h5:e=>(0,y.jsx)(te,{as:"h5",...e}),h6:e=>(0,y.jsx)(te,{as:"h6",...e}),admonition:ae.A,mermaid:ie.A};function re(e){let{children:t}=e;return(0,y.jsx)(o.x,{components:ce,children:t})}},67763:(e,t,n)=>{"use strict";n.d(t,{A:()=>l});n(96540);var s=n(34164),o=n(65195);const a={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var i=n(74848);const c="table-of-contents__link toc-highlight",r="table-of-contents__link--active";function l(e){let{className:t,...n}=e;return(0,i.jsx)("div",{className:(0,s.A)(a.tableOfContents,"thin-scrollbar",t),children:(0,i.jsx)(o.A,{...n,linkClassName:c,linkActiveClassName:r})})}},65195:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var s=n(96540),o=n(6342);function a(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const s=n.slice(2,e.level);e.parentIndex=Math.max(...s),n[e.level]=t}));const s=[];return t.forEach((e=>{const{parentIndex:n,...o}=e;n>=0?t[n].children.push(o):s.push(o)})),s}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return t.flatMap((e=>{const t=i({toc:e.children,minHeadingLevel:n,maxHeadingLevel:s});return function(e){return e.level>=n&&e.level<=s}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function r(e,t){let{anchorTopOffset:n}=t;const s=e.find((e=>c(e).top>=n));if(s){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(c(s))?s:e[e.indexOf(s)-1]??null}return e[e.length-1]??null}function l(){const e=(0,s.useRef)(0),{navbar:{hideOnScroll:t}}=(0,o.p)();return(0,s.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,s.useRef)(void 0),n=l();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:o,minHeadingLevel:a,maxHeadingLevel:i}=e;function c(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),c=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const s=[];for(let o=t;o<=n;o+=1)s.push(`h${o}.anchor`);return Array.from(document.querySelectorAll(s.join()))}({minHeadingLevel:a,maxHeadingLevel:i}),l=r(c,{anchorTopOffset:n.current}),d=e.find((e=>l&&l.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(o),e.classList.add(o),t.current=e):e.classList.remove(o)}(e,e===d)}))}return document.addEventListener("scroll",c),document.addEventListener("resize",c),c(),()=>{document.removeEventListener("scroll",c),document.removeEventListener("resize",c)}}),[e,n])}var u=n(28774),m=n(74848);function h(e){let{toc:t,className:n,linkClassName:s,isChild:o}=e;return t.length?(0,m.jsx)("ul",{className:o?void 0:n,children:t.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.A,{to:`#${e.id}`,className:s??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(h,{isChild:!0,toc:e.children,className:n,linkClassName:s})]},e.id)))}):null}const f=s.memo(h);function p(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:l,maxHeadingLevel:u,...h}=e;const p=(0,o.p)(),x=l??p.tableOfContents.minHeadingLevel,g=u??p.tableOfContents.maxHeadingLevel,b=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:o}=e;return(0,s.useMemo)((()=>i({toc:a(t),minHeadingLevel:n,maxHeadingLevel:o})),[t,n,o])}({toc:t,minHeadingLevel:x,maxHeadingLevel:g});return d((0,s.useMemo)((()=>{if(c&&r)return{linkClassName:c,linkActiveClassName:r,minHeadingLevel:x,maxHeadingLevel:g}}),[c,r,x,g])),(0,m.jsx)(f,{toc:b,className:n,linkClassName:c,...h})}},50996:(e,t,n)=>{"use strict";n.d(t,{A:()=>h});n(96540);var s=n(34164),o=n(21312),a=n(5260),i=n(74848);function c(){return(0,i.jsx)(o.A,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,i.jsx)(o.A,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function l(){return(0,i.jsx)(a.A,{children:(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=n(17559),u=n(27293);function m(e){let{className:t}=e;return(0,i.jsx)(u.A,{type:"caution",title:(0,i.jsx)(c,{}),className:(0,s.A)(t,d.G.common.unlistedBanner),children:(0,i.jsx)(r,{})})}function h(e){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(l,{}),(0,i.jsx)(m,{...e})]})}},18426:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,o,a]=t;if(s&&a){s=parseInt(s),a=parseInt(a);const e=s<a?1:-1;"-"!==o&&".."!==o&&"\u2025"!==o||(a+=e);for(let t=s;t!==a;t+=e)n.push(t)}}return n}t.default=n,e.exports=n}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/3706.4e7ba6f2.js b/pr-preview/pr-1594/assets/js/3706.4e7ba6f2.js deleted file mode 100644 index 74ec82c640..0000000000 --- a/pr-preview/pr-1594/assets/js/3706.4e7ba6f2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3706],{43706:(t,e,i)=>{i.d(e,{diagram:()=>T});var n=i(99702),r=i(26312),s=i(21176),a=i(697),l=(i(74353),i(16750),i(42838),function(){var t=function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},e=[1,3],i=[1,4],n=[1,5],r=[1,6],s=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],a=[1,18],l=[2,7],c=[1,22],o=[1,23],h=[1,24],u=[1,25],y=[1,26],d=[1,27],p=[1,20],_=[1,28],E=[1,29],g=[62,63],R=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],m=[1,47],f=[1,48],I=[1,49],b=[1,50],k=[1,51],S=[1,52],T=[1,53],N=[53,54],x=[1,64],A=[1,60],v=[1,61],q=[1,62],$=[1,63],O=[1,65],w=[1,69],C=[1,70],L=[1,67],F=[1,68],M=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],D={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:function(t,e,i,n,r,s,a){var l=s.length-1;switch(r){case 4:this.$=s[l].trim(),n.setAccTitle(this.$);break;case 5:case 6:this.$=s[l].trim(),n.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:n.addRequirement(s[l-3],s[l-4]);break;case 14:n.setNewReqId(s[l-2]);break;case 15:n.setNewReqText(s[l-2]);break;case 16:n.setNewReqRisk(s[l-2]);break;case 17:n.setNewReqVerifyMethod(s[l-2]);break;case 20:this.$=n.RequirementType.REQUIREMENT;break;case 21:this.$=n.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=n.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=n.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=n.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=n.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=n.RiskLevel.LOW_RISK;break;case 27:this.$=n.RiskLevel.MED_RISK;break;case 28:this.$=n.RiskLevel.HIGH_RISK;break;case 29:this.$=n.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=n.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=n.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=n.VerifyType.VERIFY_TEST;break;case 33:n.addElement(s[l-3]);break;case 34:n.setNewElementType(s[l-2]);break;case 35:n.setNewElementDocRef(s[l-2]);break;case 38:n.addRelationship(s[l-2],s[l],s[l-4]);break;case 39:n.addRelationship(s[l-2],s[l-4],s[l]);break;case 40:this.$=n.Relationships.CONTAINS;break;case 41:this.$=n.Relationships.COPIES;break;case 42:this.$=n.Relationships.DERIVES;break;case 43:this.$=n.Relationships.SATISFIES;break;case 44:this.$=n.Relationships.VERIFIES;break;case 45:this.$=n.Relationships.REFINES;break;case 46:this.$=n.Relationships.TRACES}},table:[{3:1,4:2,6:e,9:i,11:n,13:r},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:i,11:n,13:r},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(s,[2,6]),{3:12,4:2,6:e,9:i,11:n,13:r},{1:[2,2]},{4:17,5:a,7:13,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},t(s,[2,4]),t(s,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:a,7:31,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:32,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:33,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:34,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:35,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},t(g,[2,20]),t(g,[2,21]),t(g,[2,22]),t(g,[2,23]),t(g,[2,24]),t(g,[2,25]),t(R,[2,49]),t(R,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:m,56:f,57:I,58:b,59:k,60:S,61:T},{52:54,55:m,56:f,57:I,58:b,59:k,60:S,61:T},{5:[1,55]},{5:[1,56]},{53:[1,57]},t(N,[2,40]),t(N,[2,41]),t(N,[2,42]),t(N,[2,43]),t(N,[2,44]),t(N,[2,45]),t(N,[2,46]),{54:[1,58]},{5:x,20:59,21:A,24:v,26:q,28:$,30:O},{5:w,30:C,46:66,47:L,49:F},{23:71,62:_,63:E},{23:72,62:_,63:E},t(M,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:x,20:77,21:A,24:v,26:q,28:$,30:O},t(M,[2,19]),t(M,[2,33]),{22:[1,78]},{22:[1,79]},{5:w,30:C,46:80,47:L,49:F},t(M,[2,37]),t(M,[2,38]),t(M,[2,39]),{23:81,62:_,63:E},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},t(M,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},t(M,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:x,20:106,21:A,24:v,26:q,28:$,30:O},{5:x,20:107,21:A,24:v,26:q,28:$,30:O},{5:x,20:108,21:A,24:v,26:q,28:$,30:O},{5:x,20:109,21:A,24:v,26:q,28:$,30:O},{5:w,30:C,46:110,47:L,49:F},{5:w,30:C,46:111,47:L,49:F},t(M,[2,14]),t(M,[2,15]),t(M,[2,16]),t(M,[2,17]),t(M,[2,34]),t(M,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],n=[],r=[null],s=[],a=this.table,l="",c=0,o=0,h=s.slice.call(arguments,1),u=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);u.setInput(t,y.yy),y.yy.lexer=u,y.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var p=u.yylloc;s.push(p);var _=u.options&&u.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,g,R,m,f,I,b,k,S,T={};;){if(g=i[i.length-1],this.defaultActions[g]?R=this.defaultActions[g]:(null==E&&(S=void 0,"number"!=typeof(S=n.pop()||u.lex()||1)&&(S instanceof Array&&(S=(n=S).pop()),S=e.symbols_[S]||S),E=S),R=a[g]&&a[g][E]),void 0===R||!R.length||!R[0]){var N="";for(f in k=[],a[g])this.terminals_[f]&&f>2&&k.push("'"+this.terminals_[f]+"'");N=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(N,{text:u.match,token:this.terminals_[E]||E,line:u.yylineno,loc:p,expected:k})}if(R[0]instanceof Array&&R.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+E);switch(R[0]){case 1:i.push(E),r.push(u.yytext),s.push(u.yylloc),i.push(R[1]),E=null,o=u.yyleng,l=u.yytext,c=u.yylineno,p=u.yylloc;break;case 2:if(I=this.productions_[R[1]][1],T.$=r[r.length-I],T._$={first_line:s[s.length-(I||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(I||1)].first_column,last_column:s[s.length-1].last_column},_&&(T._$.range=[s[s.length-(I||1)].range[0],s[s.length-1].range[1]]),void 0!==(m=this.performAction.apply(T,[l,o,c,y.yy,R[1],r,s].concat(h))))return m;I&&(i=i.slice(0,-1*I*2),r=r.slice(0,-1*I),s=s.slice(0,-1*I)),i.push(this.productions_[R[1]][0]),r.push(T.$),s.push(T._$),b=a[i[i.length-2]][i[i.length-1]],i.push(b);break;case 3:return!0}}return!0}},P={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===n.length?this.yylloc.first_column:0)+n[n.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,n,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var s in r)this[s]=r[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),s=0;s<r.length;s++)if((i=this._input.match(this.rules[r[s]]))&&(!e||i[0].length>e[0].length)){if(e=i,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,r[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,i,n){switch(i){case 0:return"title";case 1:return this.begin("acc_title"),9;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),11;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:case 48:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:case 10:case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 49:return"qString";case 50:return e.yytext=e.yytext.trim(),62}},rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};function V(){this.yy={}}return D.lexer=P,V.prototype=D,D.Parser=V,new V}());l.parser=l;const c=l;let o=[],h={},u={},y={},d={};const p={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},getConfig:()=>(0,n.c)().req,addRequirement:(t,e)=>(void 0===u[t]&&(u[t]={name:t,type:e,id:h.id,text:h.text,risk:h.risk,verifyMethod:h.verifyMethod}),h={},u[t]),getRequirements:()=>u,setNewReqId:t=>{void 0!==h&&(h.id=t)},setNewReqText:t=>{void 0!==h&&(h.text=t)},setNewReqRisk:t=>{void 0!==h&&(h.risk=t)},setNewReqVerifyMethod:t=>{void 0!==h&&(h.verifyMethod=t)},setAccTitle:n.s,getAccTitle:n.g,setAccDescription:n.b,getAccDescription:n.a,addElement:t=>(void 0===d[t]&&(d[t]={name:t,type:y.type,docRef:y.docRef},n.l.info("Added new requirement: ",t)),y={},d[t]),getElements:()=>d,setNewElementType:t=>{void 0!==y&&(y.type=t)},setNewElementDocRef:t=>{void 0!==y&&(y.docRef=t)},addRelationship:(t,e,i)=>{o.push({type:t,src:e,dst:i})},getRelationships:()=>o,clear:()=>{o=[],h={},u={},y={},d={},(0,n.v)()}},_={CONTAINS:"contains",ARROW:"arrow"},E=_,g=(t,e)=>{let i=t.append("defs").append("marker").attr("id",_.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");i.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),i.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),i.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",_.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d",`M0,0\n L${e.line_height},${e.line_height/2}\n M${e.line_height},${e.line_height/2}\n L0,${e.line_height}`).attr("stroke-width",1)};let R={},m=0;const f=(t,e)=>t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",R.rect_min_width+"px").attr("height",R.rect_min_height+"px"),I=(t,e,i)=>{let n=R.rect_min_width/2,r=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",n).attr("y",R.rect_padding).attr("dominant-baseline","hanging"),s=0;i.forEach((t=>{0==s?r.append("tspan").attr("text-anchor","middle").attr("x",R.rect_min_width/2).attr("dy",0).text(t):r.append("tspan").attr("text-anchor","middle").attr("x",R.rect_min_width/2).attr("dy",.75*R.line_height).text(t),s++}));let a=1.5*R.rect_padding+s*R.line_height*.75;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",R.rect_min_width).attr("y1",a).attr("y2",a),{titleNode:r,y:a}},b=(t,e,i,n)=>{let r=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",R.rect_padding).attr("y",n).attr("dominant-baseline","hanging"),s=0;let a=[];return i.forEach((t=>{let e=t.length;for(;e>30&&s<3;){let i=t.substring(0,30);e=(t=t.substring(30,t.length)).length,a[a.length]=i,s++}if(3==s){let t=a[a.length-1];a[a.length-1]=t.substring(0,t.length-4)+"..."}else a[a.length]=t;s=0})),a.forEach((t=>{r.append("tspan").attr("x",R.rect_padding).attr("dy",R.line_height).text(t)})),r},k=function(t,e,i,s,a){const l=i.edge(S(e.src),S(e.dst)),c=(0,r.n8j)().x((function(t){return t.x})).y((function(t){return t.y})),o=t.insert("path","#"+s).attr("class","er relationshipLine").attr("d",c(l.points)).attr("fill","none");e.type==a.db.Relationships.CONTAINS?o.attr("marker-start","url("+n.e.getUrl(R.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(o.attr("stroke-dasharray","10,7"),o.attr("marker-end","url("+n.e.getUrl(R.arrowMarkerAbsolute)+"#"+E.ARROW+"_line_ending)")),((t,e,i,n)=>{const r=e.node().getTotalLength(),s=e.node().getPointAtLength(.5*r),a="rel"+m;m++;const l=t.append("text").attr("class","req relationshipLabel").attr("id",a).attr("x",s.x).attr("y",s.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(n).node().getBBox();t.insert("rect","#"+a).attr("class","req reqLabelBox").attr("x",s.x-l.width/2).attr("y",s.y-l.height/2).attr("width",l.width).attr("height",l.height).attr("fill","white").attr("fill-opacity","85%")})(t,o,0,`<<${e.type}>>`)},S=t=>t.replace(/\s/g,"").replace(/\./g,"_"),T={parser:c,db:p,renderer:{draw:(t,e,i,l)=>{R=(0,n.c)().requirement;const c=R.securityLevel;let o;"sandbox"===c&&(o=(0,r.Ltv)("#i"+e));const h=("sandbox"===c?(0,r.Ltv)(o.nodes()[0].contentDocument.body):(0,r.Ltv)("body")).select(`[id='${e}']`);g(h,R);const u=new a.T({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:R.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));let y=l.db.getRequirements(),d=l.db.getElements(),p=l.db.getRelationships();var _,E,m;_=y,E=u,m=h,Object.keys(_).forEach((t=>{let e=_[t];t=S(t),n.l.info("Added new requirement: ",t);const i=m.append("g").attr("id",t),r=f(i,"req-"+t);let s=I(i,t+"_title",[`<<${e.type}>>`,`${e.name}`]);b(i,t+"_body",[`Id: ${e.id}`,`Text: ${e.text}`,`Risk: ${e.risk}`,`Verification: ${e.verifyMethod}`],s.y);const a=r.node().getBBox();E.setNode(t,{width:a.width,height:a.height,shape:"rect",id:t})})),((t,e,i)=>{Object.keys(t).forEach((n=>{let r=t[n];const s=S(n),a=i.append("g").attr("id",s),l="element-"+s,c=f(a,l);let o=I(a,l+"_title",["<<Element>>",`${n}`]);b(a,l+"_body",[`Type: ${r.type||"Not Specified"}`,`Doc Ref: ${r.docRef||"None"}`],o.y);const h=c.node().getBBox();e.setNode(s,{width:h.width,height:h.height,shape:"rect",id:s})}))})(d,u,h),((t,e)=>{t.forEach((function(t){let i=S(t.src),n=S(t.dst);e.setEdge(i,n,{relationship:t})}))})(p,u),(0,s.Zp)(u),function(t,e){e.nodes().forEach((function(i){void 0!==i&&void 0!==e.node(i)&&(t.select("#"+i),t.select("#"+i).attr("transform","translate("+(e.node(i).x-e.node(i).width/2)+","+(e.node(i).y-e.node(i).height/2)+" )"))}))}(h,u),p.forEach((function(t){k(h,t,u,e,l)}));const T=R.rect_padding,N=h.node().getBBox(),x=N.width+2*T,A=N.height+2*T;(0,n.i)(h,A,x,R.useMaxWidth),h.attr("viewBox",`${N.x-T} ${N.y-T} ${x} ${A}`)}},styles:t=>`\n\n marker {\n fill: ${t.relationColor};\n stroke: ${t.relationColor};\n }\n\n marker.cross {\n stroke: ${t.lineColor};\n }\n\n svg {\n font-family: ${t.fontFamily};\n font-size: ${t.fontSize};\n }\n\n .reqBox {\n fill: ${t.requirementBackground};\n fill-opacity: 1.0;\n stroke: ${t.requirementBorderColor};\n stroke-width: ${t.requirementBorderSize};\n }\n \n .reqTitle, .reqLabel{\n fill: ${t.requirementTextColor};\n }\n .reqLabelBox {\n fill: ${t.relationLabelBackground};\n fill-opacity: 1.0;\n }\n\n .req-title-line {\n stroke: ${t.requirementBorderColor};\n stroke-width: ${t.requirementBorderSize};\n }\n .relationshipLine {\n stroke: ${t.relationColor};\n stroke-width: 1;\n }\n .relationshipLabel {\n fill: ${t.relationLabelColor};\n }\n\n`}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/375ba1d8.fab37c6c.js b/pr-preview/pr-1594/assets/js/375ba1d8.fab37c6c.js deleted file mode 100644 index 5d4ea19dda..0000000000 --- a/pr-preview/pr-1594/assets/js/375ba1d8.fab37c6c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6386],{46101:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>o});var t=r(74848),s=r(28453);const i={},c="Salesforce \u2014 Historical data",l={id:"reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data",title:"Salesforce \u2014 Historical data",description:"This connector captures data from Salesforce objects into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data.md",sourceDirName:"reference/Connectors/capture-connectors/Salesforce",slug:"/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Salesforce",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/"},next:{title:"Salesforce \u2014 Real-time data",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time"}},a={},o=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with Salesforce in the Flow web app",id:"using-oauth2-to-authenticate-with-salesforce-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually",id:"configuring-the-connector-specification-manually",level:3},{value:"Setup",id:"setup",level:3},{value:"Create a read-only Salesforce user",id:"create-a-read-only-salesforce-user",level:4},{value:"Create a developer application and generate authorization tokens",id:"create-a-developer-application-and-generate-authorization-tokens",level:4},{value:"Configuration",id:"configuration",level:2},{value:"Formula Fields",id:"formula-fields",level:3},{value:"Slowly Changing Dimensions Type 2",id:"slowly-changing-dimensions-type-2",level:3},{value:"Merging Real Time and Batch Data",id:"merging-real-time-and-batch-data",level:3},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"salesforce--historical-data",children:"Salesforce \u2014 Historical data"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from Salesforce objects into Flow collections.\nIt uses batch processing and is ideal for syncing your historical Salesforce data."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time",children:"A separate connector is available for real-time Salesforce data capture"}),".\nFor help using both connectors in parallel, ",(0,t.jsx)(n.a,{href:"mailto:info@estuary.dev",children:"contact your Estuary account manager"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is available for use in the Flow web application.\nFor local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-salesforce:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-salesforce:dev"})})," provides the latest connector image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/salesforce/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsxs)(n.p,{children:["This connector can capture the following Salesforce ",(0,t.jsx)(n.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_list.htm",children:"standard objects"}),", if present in your account:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Account"}),"\n",(0,t.jsx)(n.li,{children:"Contact"}),"\n",(0,t.jsx)(n.li,{children:"User"}),"\n",(0,t.jsx)(n.li,{children:"OpportunityFilledHistory"}),"\n",(0,t.jsx)(n.li,{children:"LeadHistory"}),"\n",(0,t.jsx)(n.li,{children:"Opportunity"}),"\n",(0,t.jsx)(n.li,{children:"Campaign"}),"\n",(0,t.jsx)(n.li,{children:"Case"}),"\n",(0,t.jsx)(n.li,{children:"ContactLineItem"}),"\n",(0,t.jsx)(n.li,{children:"Entitlement"}),"\n",(0,t.jsx)(n.li,{children:"Lead"}),"\n",(0,t.jsx)(n.li,{children:"LiveChatTranscript"}),"\n",(0,t.jsx)(n.li,{children:"MessagingSession"}),"\n",(0,t.jsx)(n.li,{children:"Quote"}),"\n",(0,t.jsx)(n.li,{children:"QuoteLineItem"}),"\n",(0,t.jsx)(n.li,{children:"ServiceAppointment"}),"\n",(0,t.jsx)(n.li,{children:"ServiceContract"}),"\n",(0,t.jsx)(n.li,{children:"Task"}),"\n",(0,t.jsx)(n.li,{children:"UserServicePresence"}),"\n",(0,t.jsx)(n.li,{children:"WorkOrder"}),"\n",(0,t.jsx)(n.li,{children:"WorkOrderLineItem"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"The Salesforce connector has the ability to capture all standard Salesforce objects as well as custom objects. All available objects will appear after connecting to Salesforce."}),"\n",(0,t.jsx)(n.p,{children:"Because most Salesforce accounts contain large volumes of data, you may only want to capture a subset of the available objects.\nThere are several ways to control this:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create a ",(0,t.jsx)(n.a,{href:"#create-a-read-only-salesforce-user",children:"dedicated Salesforce user"})," with access only to the objects you'd like to capture."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Apply a filter when you ",(0,t.jsx)(n.a,{href:"#endpoint",children:"configure"})," the connector. If you don't apply a filter, the connector captures all objects available to the user."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["During ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-capture",children:"capture creation in the web application"}),",\nremove the bindings for objects you don't want to capture."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.h3,{id:"using-oauth2-to-authenticate-with-salesforce-in-the-flow-web-app",children:"Using OAuth2 to authenticate with Salesforce in the Flow web app"}),"\n",(0,t.jsx)(n.p,{children:"If you're using the Flow web app, you'll be prompted to authenticate with Salesforce using OAuth. You'll need the following:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A Salesforce organization on the Enterprise tier, or with an equivalent ",(0,t.jsx)(n.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_api.htm",children:"API request allocation"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Salesforce user credentials. We recommend creating a dedicated read-only ",(0,t.jsx)(n.a,{href:"#create-a-read-only-salesforce-user",children:"Salesforce user"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"configuring-the-connector-specification-manually",children:"Configuring the connector specification manually"}),"\n",(0,t.jsx)(n.p,{children:"If you're working with flowctl and writing specifications in a local development environment,\nyou'll need to manually supply OAuth credentials. You'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The items required to ",(0,t.jsx)(n.a,{href:"#using-oauth2-to-authenticate-with-salesforce-in-the-flow-web-app",children:"set up with OAuth2"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A Salesforce developer application with a generated client ID, client secret, and refresh token. ",(0,t.jsx)(n.a,{href:"#create-a-developer-application-and-generate-authorization-tokens",children:"See setup steps."})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"setup",children:"Setup"}),"\n",(0,t.jsx)(n.h4,{id:"create-a-read-only-salesforce-user",children:"Create a read-only Salesforce user"}),"\n",(0,t.jsx)(n.p,{children:"Creating a dedicated read-only Salesforce user is a simple way to specify which objects Flow will capture.\nThis is useful if you have a large amount of data in your Salesforce organization."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["While signed in as an administrator, create a ",(0,t.jsx)(n.a,{href:"https://help.salesforce.com/s/articleView?id=sf.users_profiles_cloning.htm&type=5",children:"new profile"})," by cloning the standard ",(0,t.jsx)(n.a,{href:"https://help.salesforce.com/s/articleView?id=sf.standard_profiles.htm&type=5",children:"Minimum Access"})," profile."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://help.salesforce.com/s/articleView?id=sf.perm_sets_object_perms_edit.htm&type=5",children:"Edit the new profile's permissions"}),". Grant it read access to all the standard and custom objects you'd like to capture with Flow."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://help.salesforce.com/s/articleView?id=sf.adding_new_users.htm&type=5",children:"Create a new user"}),", applying the profile you just created.\nYou'll use this user's email address and password to authenticate Salesforce in Flow."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"create-a-developer-application-and-generate-authorization-tokens",children:"Create a developer application and generate authorization tokens"}),"\n",(0,t.jsx)(n.p,{children:"To manually write a capture specification for Salesforce, you need to create and configure a developer application.\nThrough this process, you'll obtain the client ID, client secret, and refresh token."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create a ",(0,t.jsx)(n.a,{href:"https://help.salesforce.com/s/articleView?id=sf.connected_app_create_api_integration.htm&type=5",children:"new developer application"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["a. When selecting ",(0,t.jsx)(n.strong,{children:"Scopes"})," for your app, select ",(0,t.jsxs)(n.strong,{children:["Manage user data via APIs ",(0,t.jsx)(n.code,{children:"(api)"})]}),", ",(0,t.jsxs)(n.strong,{children:["Perform requests at any time ",(0,t.jsx)(n.code,{children:"(refresh_token, offline_access)"})]}),", and ",(0,t.jsxs)(n.strong,{children:["Manage user data via Web browsers ",(0,t.jsx)(n.code,{children:"(web)"})]}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Edit the app to ensure that ",(0,t.jsx)(n.strong,{children:"Permitted users"})," is set to ",(0,t.jsx)(n.a,{href:"https://help.salesforce.com/s/articleView?id=sf.connected_app_manage_oauth.htm&type=5",children:"All users may self-authorize"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Locate the ",(0,t.jsx)(n.a,{href:"https://help.salesforce.com/s/articleView?id=sf.remoteaccess_oauth_web_server_flow.htm&type=5",children:"Consumer Key and Consumer Secret"}),". These are equivalent to the client id and client secret, respectively."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Follow the ",(0,t.jsx)(n.a,{href:"https://help.salesforce.com/s/articleView?id=sf.remoteaccess_oauth_web_server_flow.htm&type=5",children:"Salesforce Web Server Flow"}),". The final POST response will include your refresh token."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the Flow specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the batch Salesforce source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"formula-fields",children:"Formula Fields"}),"\n",(0,t.jsx)(n.p,{children:"Estuary is able to capture Salesforce formula fields, however, regular full syncs must be configured in order to ensure up to date formula fields. Given the batch processing of this connector, if formula field values are updated in between syncs, Estuary will not be aware of any changes."}),"\n",(0,t.jsx)(n.p,{children:"In order to ensure data freshness, it is recommended that you configure your capture to regularly initiate full refreshes of your source. Once a historical backfill is complete, updated formula field values will be reflected within Estuary."}),"\n",(0,t.jsx)(n.h3,{id:"slowly-changing-dimensions-type-2",children:"Slowly Changing Dimensions Type 2"}),"\n",(0,t.jsxs)(n.p,{children:["Estuary is capable of capturing a stream of your Salesforce data as it changes through a feature called Delta Updates. To read more about how Delta Updates works visit our ",(0,t.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/materialization/#delta-updates",children:"docs"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"merging-real-time-and-batch-data",children:"Merging Real Time and Batch Data"}),"\n",(0,t.jsx)(n.p,{children:"Estuary offers connectors for both batch and real time capture. It is possible to create collections that reflect both batch and real time data capture using the following steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create a new capture using the batch capture connector."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create a new capture using the real time capture connector."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Both captures should share the same namespace in order to write to the same collection. For example, you would end up with a batch connector named ",(0,t.jsx)(n.code,{children:"Tenant/Salesforce/source-salesforce"})," and a real time capture named ",(0,t.jsx)(n.code,{children:"Tenant/Salesforce/source-salesforce-real-time"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If configured correctly, both captures will read data into the same collections that are titled ",(0,t.jsx)(n.code,{children:"Tenant/Salesforce/your-stream"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Estuary should automatically merge your documents, ensuring that duplicates are not produced when pulling from two captures with the same source. Before continuing, it is important to make sure that a reduction strategy has been implemented for your collections."}),"\n",(0,t.jsxs)(n.p,{children:["This step requires using ",(0,t.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/flowctl/",children:"flowctl"}),", please visit our documentation for more information."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Pull down your active specifications into your local environment using the command ",(0,t.jsx)(n.code,{children:"flowctl catalog pull-specs --prefix Tenant/Salesforce"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"This command will generate a folder for each subtree of your tenant. Using the above example tenant, you would end up with a top level folder structure named Tenant and a sub folder named Salesforce."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Within the sub folder for your Salesforce capture you will find yaml specification files for your each of your collections that follow the naming convention ",(0,t.jsx)(n.code,{children:"BindingName.schema.yaml"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"For each newly created collection, make sure that it contains the following reduction strategy:"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"---\ntype: object\nadditionalProperties: true\nproperties:\n Id:\n type:\n - string\n ...\nrequired:\n - Id\n# Your collection must include this line. If missing, please add below\nreduce:\n strategy: merge\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"5",children:["\n",(0,t.jsxs)(n.li,{children:["If the above line was missing you must also run the command ",(0,t.jsx)(n.code,{children:"flowctl catalog publish --source flow.yaml"})," at the root level of your local folder structure to publish the changes to Flow."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.p,{children:["The properties in the table below reflect the manual authentication method.\nIf you're working in the Flow web app, you'll use ",(0,t.jsx)(n.a,{href:"#using-oauth2-to-authenticate-with-salesforce-in-the-flow-web-app",children:"OAuth2"}),",\nso you won't need the ",(0,t.jsx)(n.code,{children:"/credentials"})," values listed here."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials"})})}),(0,t.jsx)(n.td,{}),(0,t.jsx)(n.td,{}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/credentials/auth_type"})}),(0,t.jsx)(n.td,{children:"Authorization type"}),(0,t.jsxs)(n.td,{children:["Set to ",(0,t.jsx)(n.code,{children:"Client"})]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/client_id"})})}),(0,t.jsx)(n.td,{children:"Client ID"}),(0,t.jsx)(n.td,{children:"The Salesforce Client ID, also known as a Consumer Key, for your developer application."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/client_secret"})})}),(0,t.jsx)(n.td,{children:"Client Secret"}),(0,t.jsx)(n.td,{children:"The Salesforce Client Secret, also known as a Consumer Secret, for your developer application."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/refresh_token"})})}),(0,t.jsx)(n.td,{children:"Refresh Token"}),(0,t.jsx)(n.td,{children:"The refresh token generated by your developer application."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/is_sandbox"})}),(0,t.jsx)(n.td,{children:"Sandbox"}),(0,t.jsxs)(n.td,{children:["Whether you're using a ",(0,t.jsx)(n.a,{href:"https://help.salesforce.com/s/articleView?id=sf.deploy_sandboxes_parent.htm&type=5",children:"Salesforce Sandbox"}),"."]}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/start_date"})}),(0,t.jsx)(n.td,{children:"Start Date"}),(0,t.jsx)(n.td,{children:"Start date in the format YYYY-MM-DD. Data added on and after this date will be captured. If this field is blank, all data will be captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/streams_criteria"})}),(0,t.jsx)(n.td,{children:"Filter Salesforce Objects (Optional)"}),(0,t.jsx)(n.td,{children:"Filter Salesforce objects for capture."}),(0,t.jsx)(n.td,{children:"array"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"/streams_criteria/-/criteria"})})}),(0,t.jsx)(n.td,{children:"Search criteria"}),(0,t.jsxs)(n.td,{children:["Possible criteria are ",(0,t.jsx)(n.code,{children:'"starts with"'}),", ",(0,t.jsx)(n.code,{children:'"ends with"'}),", ",(0,t.jsx)(n.code,{children:'"contains"'}),", ",(0,t.jsx)(n.code,{children:'"exacts"'}),", ",(0,t.jsx)(n.code,{children:'"starts not with"'}),", ",(0,t.jsx)(n.code,{children:'"ends not with"'}),", ",(0,t.jsx)(n.code,{children:'"not contains"'}),", and ",(0,t.jsx)(n.code,{children:'"not exacts"'}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'"contains"'})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"/streams_criteria/-/value"})})}),(0,t.jsx)(n.td,{children:"Search value"}),(0,t.jsx)(n.td,{children:"Search term used with the selected criterion to filter objects."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/cursorField"})}),(0,t.jsx)(n.td,{children:"Cursor field"}),(0,t.jsx)(n.td,{children:"Field used as a cursor to track data replication; typically a timestamp field."}),(0,t.jsx)(n.td,{children:"array, null"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Salesforce object from which a collection is captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.p,{children:"This sample specification reflects the manual authentication method."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-salesforce:dev\n config:\n credentials:\n auth_type: Client\n client_id: {your_client_id}\n client_secret: {secret}\n refresh_token: {XXXXXXXX}\n is_sandbox: false\n start_date: 2022-01-01\n streams_criteria:\n - criteria: "starts with"\n value: "Work"\n bindings:\n - resource:\n cursorField: [SystemModstamp]\n stream: WorkOrder\n syncMode: incremental\n target: ${PREFIX}/WorkOrder\n - resource:\n cursorField: [SystemModstamp]\n stream: WorkOrderLineItem\n syncMode: incremental\n target: ${PREFIX}/WorkOrderLineItem\n'})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>l});var t=r(96540);const s={},i=t.createContext(s);function c(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/376.dedd6ca6.js b/pr-preview/pr-1594/assets/js/376.dedd6ca6.js deleted file mode 100644 index 7c19cb3ba3..0000000000 --- a/pr-preview/pr-1594/assets/js/376.dedd6ca6.js +++ /dev/null @@ -1,1242 +0,0 @@ -"use strict"; -exports.id = 376; -exports.ids = [376]; -exports.modules = { - -/***/ 42376: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3219); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(78041); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(75263); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99418); - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [6, 8, 10, 11, 12, 14, 16, 17, 20, 21], $V1 = [1, 9], $V2 = [1, 10], $V3 = [1, 11], $V4 = [1, 12], $V5 = [1, 13], $V6 = [1, 16], $V7 = [1, 17]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "timeline": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "title": 11, "acc_title": 12, "acc_title_value": 13, "acc_descr": 14, "acc_descr_value": 15, "acc_descr_multiline_value": 16, "section": 17, "period_statement": 18, "event_statement": 19, "period": 20, "event": 21, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 4: "timeline", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 11: "title", 12: "acc_title", 13: "acc_title_value", 14: "acc_descr", 15: "acc_descr_value", 16: "acc_descr_multiline_value", 17: "section", 20: "period", 21: "event" }, - productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 1], [18, 1], [19, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 1: - return $$[$0 - 1]; - case 2: - this.$ = []; - break; - case 3: - $$[$0 - 1].push($$[$0]); - this.$ = $$[$0 - 1]; - break; - case 4: - case 5: - this.$ = $$[$0]; - break; - case 6: - case 7: - this.$ = []; - break; - case 8: - yy.getCommonDb().setDiagramTitle($$[$0].substr(6)); - this.$ = $$[$0].substr(6); - break; - case 9: - this.$ = $$[$0].trim(); - yy.getCommonDb().setAccTitle(this.$); - break; - case 10: - case 11: - this.$ = $$[$0].trim(); - yy.getCommonDb().setAccDescription(this.$); - break; - case 12: - yy.addSection($$[$0].substr(8)); - this.$ = $$[$0].substr(8); - break; - case 15: - yy.addTask($$[$0], 0, ""); - this.$ = $$[$0]; - break; - case 16: - yy.addEvent($$[$0].substr(2)); - this.$ = $$[$0]; - break; - } - }, - table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: 14, 19: 15, 20: $V6, 21: $V7 }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 18, 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: 14, 19: 15, 20: $V6, 21: $V7 }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 8]), { 13: [1, 19] }, { 15: [1, 20] }, o($V0, [2, 11]), o($V0, [2, 12]), o($V0, [2, 13]), o($V0, [2, 14]), o($V0, [2, 15]), o($V0, [2, 16]), o($V0, [2, 4]), o($V0, [2, 9]), o($V0, [2, 10])], - defaultActions: {}, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - break; - case 1: - break; - case 2: - return 10; - case 3: - break; - case 4: - break; - case 5: - return 4; - case 6: - return 11; - case 7: - this.begin("acc_title"); - return 12; - case 8: - this.popState(); - return "acc_title_value"; - case 9: - this.begin("acc_descr"); - return 14; - case 10: - this.popState(); - return "acc_descr_value"; - case 11: - this.begin("acc_descr_multiline"); - break; - case 12: - this.popState(); - break; - case 13: - return "acc_descr_multiline_value"; - case 14: - return 17; - case 15: - return 21; - case 16: - return 20; - case 17: - return 6; - case 18: - return "INVALID"; - } - }, - rules: [/^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:timeline\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?::\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?:$)/i, /^(?:.)/i], - conditions: { "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -let currentSection = ""; -let currentTaskId = 0; -const sections = []; -const tasks = []; -const rawTasks = []; -const getCommonDb = () => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.L; -const clear = function() { - sections.length = 0; - tasks.length = 0; - currentSection = ""; - rawTasks.length = 0; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.v)(); -}; -const addSection = function(txt) { - currentSection = txt; - sections.push(txt); -}; -const getSections = function() { - return sections; -}; -const getTasks = function() { - let allItemsProcessed = compileTasks(); - const maxDepth = 100; - let iterationCount = 0; - while (!allItemsProcessed && iterationCount < maxDepth) { - allItemsProcessed = compileTasks(); - iterationCount++; - } - tasks.push(...rawTasks); - return tasks; -}; -const addTask = function(period, length, event) { - const rawTask = { - id: currentTaskId++, - section: currentSection, - type: currentSection, - task: period, - score: length ? length : 0, - //if event is defined, then add it the events array - events: event ? [event] : [] - }; - rawTasks.push(rawTask); -}; -const addEvent = function(event) { - const currentTask = rawTasks.find((task) => task.id === currentTaskId - 1); - currentTask.events.push(event); -}; -const addTaskOrg = function(descr) { - const newTask = { - section: currentSection, - type: currentSection, - description: descr, - task: descr, - classes: [] - }; - tasks.push(newTask); -}; -const compileTasks = function() { - const compileTask = function(pos) { - return rawTasks[pos].processed; - }; - let allProcessed = true; - for (const [i, rawTask] of rawTasks.entries()) { - compileTask(i); - allProcessed = allProcessed && rawTask.processed; - } - return allProcessed; -}; -const timelineDb = { - clear, - getCommonDb, - addSection, - getSections, - getTasks, - addTask, - addTaskOrg, - addEvent -}; -const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ - __proto__: null, - addEvent, - addSection, - addTask, - addTaskOrg, - clear, - default: timelineDb, - getCommonDb, - getSections, - getTasks -}, Symbol.toStringTag, { value: "Module" })); -const MAX_SECTIONS = 12; -const drawRect = function(elem, rectData) { - const rectElem = elem.append("rect"); - rectElem.attr("x", rectData.x); - rectElem.attr("y", rectData.y); - rectElem.attr("fill", rectData.fill); - rectElem.attr("stroke", rectData.stroke); - rectElem.attr("width", rectData.width); - rectElem.attr("height", rectData.height); - rectElem.attr("rx", rectData.rx); - rectElem.attr("ry", rectData.ry); - if (rectData.class !== void 0) { - rectElem.attr("class", rectData.class); - } - return rectElem; -}; -const drawFace = function(element, faceData) { - const radius = 15; - const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible"); - const face = element.append("g"); - face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); - face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); - function smile(face2) { - const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .JLW)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); - face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); - } - function sad(face2) { - const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .JLW)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); - face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); - } - function ambivalent(face2) { - face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); - } - if (faceData.score > 3) { - smile(face); - } else if (faceData.score < 3) { - sad(face); - } else { - ambivalent(face); - } - return circleElement; -}; -const drawCircle = function(element, circleData) { - const circleElement = element.append("circle"); - circleElement.attr("cx", circleData.cx); - circleElement.attr("cy", circleData.cy); - circleElement.attr("class", "actor-" + circleData.pos); - circleElement.attr("fill", circleData.fill); - circleElement.attr("stroke", circleData.stroke); - circleElement.attr("r", circleData.r); - if (circleElement.class !== void 0) { - circleElement.attr("class", circleElement.class); - } - if (circleData.title !== void 0) { - circleElement.append("title").text(circleData.title); - } - return circleElement; -}; -const drawText = function(elem, textData) { - const nText = textData.text.replace(/<br\s*\/?>/gi, " "); - const textElem = elem.append("text"); - textElem.attr("x", textData.x); - textElem.attr("y", textData.y); - textElem.attr("class", "legend"); - textElem.style("text-anchor", textData.anchor); - if (textData.class !== void 0) { - textElem.attr("class", textData.class); - } - const span = textElem.append("tspan"); - span.attr("x", textData.x + textData.textMargin * 2); - span.text(nText); - return textElem; -}; -const drawLabel = function(elem, txtObject) { - function genPoints(x, y, width, height, cut) { - return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); - } - const polygon = elem.append("polygon"); - polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); - polygon.attr("class", "labelBox"); - txtObject.y = txtObject.y + txtObject.labelMargin; - txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; - drawText(elem, txtObject); -}; -const drawSection = function(elem, section, conf) { - const g = elem.append("g"); - const rect = getNoteRect(); - rect.x = section.x; - rect.y = section.y; - rect.fill = section.fill; - rect.width = conf.width; - rect.height = conf.height; - rect.class = "journey-section section-type-" + section.num; - rect.rx = 3; - rect.ry = 3; - drawRect(g, rect); - _drawTextCandidateFunc(conf)( - section.text, - g, - rect.x, - rect.y, - rect.width, - rect.height, - { class: "journey-section section-type-" + section.num }, - conf, - section.colour - ); -}; -let taskCount = -1; -const drawTask = function(elem, task, conf) { - const center = task.x + conf.width / 2; - const g = elem.append("g"); - taskCount++; - const maxHeight = 300 + 5 * 30; - g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); - drawFace(g, { - cx: center, - cy: 300 + (5 - task.score) * 30, - score: task.score - }); - const rect = getNoteRect(); - rect.x = task.x; - rect.y = task.y; - rect.fill = task.fill; - rect.width = conf.width; - rect.height = conf.height; - rect.class = "task task-type-" + task.num; - rect.rx = 3; - rect.ry = 3; - drawRect(g, rect); - task.x + 14; - _drawTextCandidateFunc(conf)( - task.task, - g, - rect.x, - rect.y, - rect.width, - rect.height, - { class: "task" }, - conf, - task.colour - ); -}; -const drawBackgroundRect = function(elem, bounds) { - const rectElem = drawRect(elem, { - x: bounds.startx, - y: bounds.starty, - width: bounds.stopx - bounds.startx, - height: bounds.stopy - bounds.starty, - fill: bounds.fill, - class: "rect" - }); - rectElem.lower(); -}; -const getTextObj = function() { - return { - x: 0, - y: 0, - fill: void 0, - "text-anchor": "start", - width: 100, - height: 100, - textMargin: 0, - rx: 0, - ry: 0 - }; -}; -const getNoteRect = function() { - return { - x: 0, - y: 0, - width: 100, - anchor: "start", - height: 100, - rx: 0, - ry: 0 - }; -}; -const _drawTextCandidateFunc = function() { - function byText(content, g, x, y, width, height, textAttrs, colour) { - const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); - _setTextAttrs(text, textAttrs); - } - function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) { - const { taskFontSize, taskFontFamily } = conf; - const lines = content.split(/<br\s*\/?>/gi); - for (let i = 0; i < lines.length; i++) { - const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; - const text = g.append("text").attr("x", x + width / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); - text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); - text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); - _setTextAttrs(text, textAttrs); - } - } - function byFo(content, g, x, y, width, height, textAttrs, conf) { - const body = g.append("switch"); - const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("position", "fixed"); - const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); - text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); - byTspan(content, body, x, y, width, height, textAttrs, conf); - _setTextAttrs(text, textAttrs); - } - function _setTextAttrs(toText, fromTextAttrsDict) { - for (const key in fromTextAttrsDict) { - if (key in fromTextAttrsDict) { - toText.attr(key, fromTextAttrsDict[key]); - } - } - } - return function(conf) { - return conf.textPlacement === "fo" ? byFo : conf.textPlacement === "old" ? byText : byTspan; - }; -}(); -const initGraphics = function(graphics) { - graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); -}; -function wrap(text, width) { - text.each(function() { - var text2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this), words = text2.text().split(/(\s+|<br>)/).reverse(), word, line = [], lineHeight = 1.1, y = text2.attr("y"), dy = parseFloat(text2.attr("dy")), tspan = text2.text(null).append("tspan").attr("x", 0).attr("y", y).attr("dy", dy + "em"); - for (let j = 0; j < words.length; j++) { - word = words[words.length - 1 - j]; - line.push(word); - tspan.text(line.join(" ").trim()); - if (tspan.node().getComputedTextLength() > width || word === "<br>") { - line.pop(); - tspan.text(line.join(" ").trim()); - if (word === "<br>") { - line = [""]; - } else { - line = [word]; - } - tspan = text2.append("tspan").attr("x", 0).attr("y", y).attr("dy", lineHeight + "em").text(word); - } - } - }); -} -const drawNode = function(elem, node, fullSection, conf) { - const section = fullSection % MAX_SECTIONS - 1; - const nodeElem = elem.append("g"); - node.section = section; - nodeElem.attr( - "class", - (node.class ? node.class + " " : "") + "timeline-node " + ("section-" + section) - ); - const bkgElem = nodeElem.append("g"); - const textElem = nodeElem.append("g"); - const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); - const bbox = txt.node().getBBox(); - const fontSize = conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; - node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; - node.height = Math.max(node.height, node.maxHeight); - node.width = node.width + 2 * node.padding; - textElem.attr("transform", "translate(" + node.width / 2 + ", " + node.padding / 2 + ")"); - defaultBkg(bkgElem, node, section); - return node; -}; -const getVirtualNodeHeight = function(elem, node, conf) { - const textElem = elem.append("g"); - const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); - const bbox = txt.node().getBBox(); - const fontSize = conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; - textElem.remove(); - return bbox.height + fontSize * 1.1 * 0.5 + node.padding; -}; -const defaultBkg = function(elem, node, section) { - const rd = 5; - elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + node.type).attr( - "d", - `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` - ); - elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); -}; -const svgDraw = { - drawRect, - drawCircle, - drawSection, - drawText, - drawLabel, - drawTask, - drawBackgroundRect, - getTextObj, - getNoteRect, - initGraphics, - drawNode, - getVirtualNodeHeight -}; -const draw = function(text, id, version, diagObj) { - var _a, _b; - const conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - const LEFT_MARGIN = conf.leftMargin ?? 50; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("timeline", diagObj.db); - const securityLevel = conf.securityLevel; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); - const svg = root.select("#" + id); - svg.append("g"); - const tasks2 = diagObj.db.getTasks(); - const title = diagObj.db.getCommonDb().getDiagramTitle(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("task", tasks2); - svgDraw.initGraphics(svg); - const sections2 = diagObj.db.getSections(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sections", sections2); - let maxSectionHeight = 0; - let maxTaskHeight = 0; - let depthY = 0; - let sectionBeginY = 0; - let masterX = 50 + LEFT_MARGIN; - let masterY = 50; - sectionBeginY = 50; - let sectionNumber = 0; - let hasSections = true; - sections2.forEach(function(section) { - const sectionNode = { - number: sectionNumber, - descr: section, - section: sectionNumber, - width: 150, - padding: 20, - maxHeight: maxSectionHeight - }; - const sectionHeight = svgDraw.getVirtualNodeHeight(svg, sectionNode, conf); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionHeight before draw", sectionHeight); - maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20); - }); - let maxEventCount = 0; - let maxEventLineLength = 0; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("tasks.length", tasks2.length); - for (const [i, task] of tasks2.entries()) { - const taskNode = { - number: i, - descr: task, - section: task.section, - width: 150, - padding: 20, - maxHeight: maxTaskHeight - }; - const taskHeight = svgDraw.getVirtualNodeHeight(svg, taskNode, conf); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskHeight before draw", taskHeight); - maxTaskHeight = Math.max(maxTaskHeight, taskHeight + 20); - maxEventCount = Math.max(maxEventCount, task.events.length); - let maxEventLineLengthTemp = 0; - for (let j = 0; j < task.events.length; j++) { - const event = task.events[j]; - const eventNode = { - descr: event, - section: task.section, - number: task.section, - width: 150, - padding: 20, - maxHeight: 50 - }; - maxEventLineLengthTemp += svgDraw.getVirtualNodeHeight(svg, eventNode, conf); - } - maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxSectionHeight before draw", maxSectionHeight); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxTaskHeight before draw", maxTaskHeight); - if (sections2 && sections2.length > 0) { - sections2.forEach((section) => { - const tasksForSection = tasks2.filter((task) => task.section === section); - const sectionNode = { - number: sectionNumber, - descr: section, - section: sectionNumber, - width: 200 * Math.max(tasksForSection.length, 1) - 50, - padding: 20, - maxHeight: maxSectionHeight - }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionNode", sectionNode); - const sectionNodeWrapper = svg.append("g"); - const node = svgDraw.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionNode output", node); - sectionNodeWrapper.attr("transform", `translate(${masterX}, ${sectionBeginY})`); - masterY += maxSectionHeight + 50; - if (tasksForSection.length > 0) { - drawTasks( - svg, - tasksForSection, - sectionNumber, - masterX, - masterY, - maxTaskHeight, - conf, - maxEventCount, - maxEventLineLength, - maxSectionHeight, - false - ); - } - masterX += 200 * Math.max(tasksForSection.length, 1); - masterY = sectionBeginY; - sectionNumber++; - }); - } else { - hasSections = false; - drawTasks( - svg, - tasks2, - sectionNumber, - masterX, - masterY, - maxTaskHeight, - conf, - maxEventCount, - maxEventLineLength, - maxSectionHeight, - true - ); - } - const box = svg.node().getBBox(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("bounds", box); - if (title) { - svg.append("text").text(title).attr("x", box.width / 2 - LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20); - } - depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100; - const lineWrapper = svg.append("g").attr("class", "lineWrapper"); - lineWrapper.append("line").attr("x1", LEFT_MARGIN).attr("y1", depthY).attr("x2", box.width + 3 * LEFT_MARGIN).attr("y2", depthY).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.o)( - void 0, - svg, - ((_a = conf.timeline) == null ? void 0 : _a.padding) ?? 50, - ((_b = conf.timeline) == null ? void 0 : _b.useMaxWidth) ?? false - ); -}; -const drawTasks = function(diagram2, tasks2, sectionColor, masterX, masterY, maxTaskHeight, conf, maxEventCount, maxEventLineLength, maxSectionHeight, isWithoutSections) { - var _a; - for (const task of tasks2) { - const taskNode = { - descr: task.task, - section: sectionColor, - number: sectionColor, - width: 150, - padding: 20, - maxHeight: maxTaskHeight - }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskNode", taskNode); - const taskWrapper = diagram2.append("g").attr("class", "taskWrapper"); - const node = svgDraw.drawNode(taskWrapper, taskNode, sectionColor, conf); - const taskHeight = node.height; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskHeight after draw", taskHeight); - taskWrapper.attr("transform", `translate(${masterX}, ${masterY})`); - maxTaskHeight = Math.max(maxTaskHeight, taskHeight); - if (task.events) { - const lineWrapper = diagram2.append("g").attr("class", "lineWrapper"); - let lineLength = maxTaskHeight; - masterY += 100; - lineLength = lineLength + drawEvents(diagram2, task.events, sectionColor, masterX, masterY, conf); - masterY -= 100; - lineWrapper.append("line").attr("x1", masterX + 190 / 2).attr("y1", masterY + maxTaskHeight).attr("x2", masterX + 190 / 2).attr( - "y2", - masterY + maxTaskHeight + (isWithoutSections ? maxTaskHeight : maxSectionHeight) + maxEventLineLength + 120 - ).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", "url(#arrowhead)").attr("stroke-dasharray", "5,5"); - } - masterX = masterX + 200; - if (isWithoutSections && !((_a = conf.timeline) == null ? void 0 : _a.disableMulticolor)) { - sectionColor++; - } - } - masterY = masterY - 10; -}; -const drawEvents = function(diagram2, events, sectionColor, masterX, masterY, conf) { - let maxEventHeight = 0; - const eventBeginY = masterY; - masterY = masterY + 100; - for (const event of events) { - const eventNode = { - descr: event, - section: sectionColor, - number: sectionColor, - width: 150, - padding: 20, - maxHeight: 50 - }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("eventNode", eventNode); - const eventWrapper = diagram2.append("g").attr("class", "eventWrapper"); - const node = svgDraw.drawNode(eventWrapper, eventNode, sectionColor, conf); - const eventHeight = node.height; - maxEventHeight = maxEventHeight + eventHeight; - eventWrapper.attr("transform", `translate(${masterX}, ${masterY})`); - masterY = masterY + 10 + eventHeight; - } - masterY = eventBeginY; - return maxEventHeight; -}; -const renderer = { - setConf: () => { - }, - draw -}; -const genSections = (options) => { - let sections2 = ""; - for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { - options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; - if ((0,khroma__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(options["lineColor" + i])) { - options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)(options["lineColor" + i], 20); - } else { - options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)(options["lineColor" + i], 20); - } - } - for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { - const sw = "" + (17 - 3 * i); - sections2 += ` - .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} path { - fill: ${options["cScale" + i]}; - } - .section-${i - 1} text { - fill: ${options["cScaleLabel" + i]}; - } - .node-icon-${i - 1} { - font-size: 40px; - color: ${options["cScaleLabel" + i]}; - } - .section-edge-${i - 1}{ - stroke: ${options["cScale" + i]}; - } - .edge-depth-${i - 1}{ - stroke-width: ${sw}; - } - .section-${i - 1} line { - stroke: ${options["cScaleInv" + i]} ; - stroke-width: 3; - } - - .lineWrapper line{ - stroke: ${options["cScaleLabel" + i]} ; - } - - .disabled, .disabled circle, .disabled text { - fill: lightgray; - } - .disabled text { - fill: #efefef; - } - `; - } - return sections2; -}; -const getStyles = (options) => ` - .edge { - stroke-width: 3; - } - ${genSections(options)} - .section-root rect, .section-root path, .section-root circle { - fill: ${options.git0}; - } - .section-root text { - fill: ${options.gitBranchLabel0}; - } - .icon-container { - height:100%; - display: flex; - justify-content: center; - align-items: center; - } - .edge { - fill: none; - } - .eventWrapper { - filter: brightness(120%); - } -`; -const styles = getStyles; -const diagram = { - db, - renderer, - parser: parser$1, - styles -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/37788a03.8ee42d0e.js b/pr-preview/pr-1594/assets/js/37788a03.8ee42d0e.js deleted file mode 100644 index eb3ff9342e..0000000000 --- a/pr-preview/pr-1594/assets/js/37788a03.8ee42d0e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1874],{53759:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>i,contentTitle:()=>s,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var o=t(74848),n=t(28453);const a={},s="Salesforce",c={id:"reference/Connectors/capture-connectors/Salesforce/salesforce",title:"Salesforce",description:"Overview",source:"@site/docs/reference/Connectors/capture-connectors/Salesforce/salesforce.md",sourceDirName:"reference/Connectors/capture-connectors/Salesforce",slug:"/reference/Connectors/capture-connectors/Salesforce/",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/Salesforce/salesforce.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Recharge",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge"},next:{title:"Salesforce \u2014 Historical data",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data"}},i={},l=[{value:"Overview",id:"overview",level:2},{value:"Salesforce Historical Data",id:"salesforce-historical-data",level:2},{value:"Salesforce Real Time Data",id:"salesforce-real-time-data",level:2},{value:"Running Both Connectors in Parallel",id:"running-both-connectors-in-parallel",level:2}];function h(e){const r={a:"a",h1:"h1",h2:"h2",p:"p",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.h1,{id:"salesforce",children:"Salesforce"}),"\n",(0,o.jsx)(r.h2,{id:"overview",children:"Overview"}),"\n",(0,o.jsx)(r.p,{children:"The Estuary Salesforce Connector facilitates seamless integration between Salesforce and Estuary's data processing framework. With this connector, users can effortlessly sync data from Salesforce objects into Estuary Flow collections. There are two primary types of connectors available: the Realtime Connector and the Historical Connector."}),"\n",(0,o.jsx)(r.h2,{id:"salesforce-historical-data",children:"Salesforce Historical Data"}),"\n",(0,o.jsxs)(r.p,{children:["The ",(0,o.jsx)(r.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data",children:"Historical Data Connector"})," is designed to capture data from Salesforce objects into Flow collections using batch processing methods. This connector is particularly suited for synchronizing historical Salesforce data. By leveraging batch processing capabilities, it efficiently retrieves and syncs large volumes of historical data, ensuring comprehensive integration with Estuary's data processing workflows."]}),"\n",(0,o.jsx)(r.h2,{id:"salesforce-real-time-data",children:"Salesforce Real Time Data"}),"\n",(0,o.jsxs)(r.p,{children:["The ",(0,o.jsx)(r.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time",children:"Real-time Connector"})," provides a mechanism to capture data from Salesforce objects into Flow collections in real time. It utilizes the Salesforce PushTopic API, which enables the streaming of data changes from Salesforce to Estuary. Leveraging the real-time capabilities of the PushTopic API, this connector ensures that updates and modifications in Salesforce objects are promptly reflected in the corresponding Estuary Flow collections."]}),"\n",(0,o.jsx)(r.h2,{id:"running-both-connectors-in-parallel",children:"Running Both Connectors in Parallel"}),"\n",(0,o.jsx)(r.p,{children:"To combine the capabilities of both connectors, users can create two separate captures: one using the Historical Connector to capture historical data, and the other using the Realtime Connector to capture real-time updates. Both captures can be configured to point to the same Flow collection, effectively merging historical and real-time data within the same destination."}),"\n",(0,o.jsx)(r.p,{children:"This approach provides a comprehensive solution, allowing users to maintain an up-to-date representation of their Salesforce data while also preserving historical context. By seamlessly integrating historical and real-time data updates, users can leverage the combined power of batch processing and real-time streaming for enhanced data analysis and insights."}),"\n",(0,o.jsxs)(r.p,{children:["For help using both connectors in parallel, ",(0,o.jsx)(r.a,{href:"mailto:info@estuary.dev",children:"contact Estuary's support team"}),"."]})]})}function p(e={}){const{wrapper:r}={...(0,n.R)(),...e.components};return r?(0,o.jsx)(r,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},28453:(e,r,t)=>{t.d(r,{R:()=>s,x:()=>c});var o=t(96540);const n={},a=o.createContext(n);function s(e){const r=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),o.createElement(a.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/38a516ae.4ac9c90c.js b/pr-preview/pr-1594/assets/js/38a516ae.4ac9c90c.js deleted file mode 100644 index 459f2a4265..0000000000 --- a/pr-preview/pr-1594/assets/js/38a516ae.4ac9c90c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[383],{60634:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var i=t(74848),o=t(28453),a=t(11470),s=t(19365);const l={sidebar_position:3},r="Collections",c={id:"concepts/collections",title:"Collections",description:"The documents of your Data Flows are stored in collections:",source:"@site/docs/concepts/collections.md",sourceDirName:"concepts",slug:"/concepts/collections",permalink:"/pr-preview/pr-1594/concepts/collections",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/collections.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Captures",permalink:"/pr-preview/pr-1594/concepts/captures"},next:{title:"Materializations",permalink:"/pr-preview/pr-1594/concepts/materialization"}},d={},h=[{value:"Documents",id:"documents",level:2},{value:"System Fields and Metadata",id:"system-fields-and-metadata",level:3},{value:"_meta/uuid",id:"_metauuid",level:4},{value:"flow_published_at",id:"flow_published_at",level:4},{value:"Viewing collection documents",id:"viewing-collection-documents",level:2},{value:"In the web application",id:"in-the-web-application",level:4},{value:"Using the flowctl CLI",id:"using-the-flowctl-cli",level:4},{value:"Specification",id:"specification",level:2},{value:"Schemas",id:"schemas",level:2},{value:"Keys",id:"keys",level:2},{value:"Schema restrictions",id:"schema-restrictions",level:3},{value:"Composite Keys",id:"composite-keys",level:3},{value:"Key behaviors",id:"key-behaviors",level:3},{value:"Empty keys",id:"empty-keys",level:3},{value:"Projections",id:"projections",level:2},{value:"Storage",id:"storage",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"collections",children:"Collections"}),"\n",(0,i.jsxs)(n.p,{children:["The documents of your Data Flows are stored in ",(0,i.jsx)(n.strong,{children:"collections"}),":\nreal-time data lakes of JSON documents in cloud storage."]}),"\n",(0,i.jsxs)(n.p,{children:["The data in a collection may be ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures",children:"captured"})," from an external system,\nor ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derived"})," as a transformation of one or more other collections.\nWhen you ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-capture",children:"create a new capture in a typical workflow"}),",\nyou define one or more new collections as part of that process.\n",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization",children:"Materializations"})," then read data from collections."]}),"\n",(0,i.jsxs)(n.p,{children:["Every collection has a key and an associated ",(0,i.jsx)(n.a,{href:"#schemas",children:"schema"}),"\nthat its documents must validate against."]}),"\n",(0,i.jsx)(n.h2,{id:"documents",children:"Documents"}),"\n",(0,i.jsx)(n.p,{children:"Flow processes and stores data in terms of documents: JSON files that consist of multiple key-value pair objects. Collections are comprised of documents; Flow tasks (captures, materializations, and derivations) process data in terms of documents."}),"\n",(0,i.jsxs)(n.p,{children:["A Flow document corresponds to different units of data in different types of endpoint systems.\nFor example, it might map to a table row, a pub/sub message, or an API response.\nThe structure of a given collection\u2019s documents is determined by that collection\u2019s ",(0,i.jsx)(n.a,{href:"#schemas",children:"schema"})," and the way in which tasks handle documents is determined by the collection ",(0,i.jsx)(n.a,{href:"#keys",children:"key"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"The size of a document depends on the complexity of the source data.\nFlow allows documents up to 16 MB in size, but it's rare for documents to approach this limit."}),"\n",(0,i.jsxs)(n.p,{children:["An example document for a collection with two fields, ",(0,i.jsx)(n.code,{children:"name"})," and ",(0,i.jsx)(n.code,{children:"count"})," is shown below."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "_meta": {\n "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"\n },\n "count": 5954,\n "message": "Hello #5954"\n}\n'})}),"\n",(0,i.jsx)(n.h3,{id:"system-fields-and-metadata",children:"System Fields and Metadata"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"_meta"})," object is present in all Flow documents, and contains metadata added by Flow.\nMinimally, every document ",(0,i.jsx)(n.code,{children:"_meta"})," always has a ",(0,i.jsx)(n.code,{children:"uuid"}),", which is a globally unique id for each document.\nSome capture connectors may add additional ",(0,i.jsx)(n.code,{children:"_meta"})," properties to tie each document to a specific record\nwithin the source system. Documents that were captured from cloud storage connectors, for example,\nwill contain ",(0,i.jsx)(n.code,{children:"/_meta/file"})," and ",(0,i.jsx)(n.code,{children:"/_meta/offset"})," properties that tell you where the document came from\nwithin your cloud storage bucket."]}),"\n",(0,i.jsx)(n.h4,{id:"_metauuid",children:"_meta/uuid"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"_meta/uuid"})," field is a system-generated globally unique identifier for each document within Estuary Flow."]}),"\n",(0,i.jsx)(n.h4,{id:"flow_published_at",children:"flow_published_at"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"flow_published_at"})," field is a system-generated timestamp within Estuary Flow,\nderived from the runtime environment. It captures the exact moment a document is published to a collection,\noffering a reliable proxy for when the document was last modified or inserted."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Source: The ",(0,i.jsx)(n.code,{children:"flow_published_at"})," field is generated by the runtime environment of Estuary Flow."]}),"\n",(0,i.jsxs)(n.li,{children:["Definition: This field represents the timestamp when a document is captured and subsequently published\nto a collection. Essentially, it is a projection of the ",(0,i.jsx)(n.code,{children:"_meta/uuid"})," field, where the UUID contains an\nencoded timestamp component."]}),"\n",(0,i.jsxs)(n.li,{children:["Availability: The ",(0,i.jsx)(n.code,{children:"flow_published_at"})," field is available in every collection, as it is a derived\nprojection from the ",(0,i.jsx)(n.code,{children:"_meta/uuid"})," field."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For a given document identified by a unique key, the ",(0,i.jsx)(n.code,{children:"flow_published_at"})," field can be used as a proxy for\nthe last time the document was modified. This is particularly useful when performing incremental updates\nor transformations, such as in a data warehouse environment."]}),"\n",(0,i.jsxs)(n.p,{children:["When dealing with materializations that are ",(0,i.jsx)(n.em,{children:"not"})," delta updates:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A document in Estuary Flow is any JSON object emitted by a capture connector.\nThe ",(0,i.jsx)(n.code,{children:"flow_published_at"})," field provides the timestamp for when this JSON object was captured and inserted\ninto the collection."]}),"\n",(0,i.jsxs)(n.li,{children:["If the collection is reduced with a strategy like ",(0,i.jsx)(n.code,{children:"lastWriteWins"})," or ",(0,i.jsx)(n.code,{children:"merge"})," on the\ncapture side, ",(0,i.jsx)(n.code,{children:"flow_published_at"})," becomes the timestamp for the last event that updated the document."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"viewing-collection-documents",children:"Viewing collection documents"}),"\n",(0,i.jsxs)(n.p,{children:["In many cases, it's not necessary to view your collection data \u2014 you're able to materialize it directly to a destination in the correct shape using a ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/#connectors",children:"connector"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"However, it can be helpful to view collection documents to confirm the source data was captured as expected, or verify a schema change."}),"\n",(0,i.jsx)(n.h4,{id:"in-the-web-application",children:"In the web application"}),"\n",(0,i.jsxs)(n.p,{children:["Sign into the Flow web application and click the ",(0,i.jsx)(n.strong,{children:"Collections"})," tab. The collections to which you have access are listed.\nClick the ",(0,i.jsx)(n.strong,{children:"Details"})," drop down to show a sample of collection documents as well as the collection ",(0,i.jsx)(n.a,{href:"#specification",children:"specification"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"The collection documents are displayed by key. Click the desired key to preview it in its native JSON format."}),"\n",(0,i.jsx)(n.h4,{id:"using-the-flowctl-cli",children:"Using the flowctl CLI"}),"\n",(0,i.jsxs)(n.p,{children:["In your ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/authentication#authenticating-flow-using-the-cli",children:"authenticated flowctl session"}),", issue the command ",(0,i.jsx)(n.code,{children:"flowctl collections read --collection <full/collection-name> --uncommitted"}),". For example, ",(0,i.jsx)(n.code,{children:"flowctl collections read --collection acmeCo/inventory/anvils --uncommitted"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Options are available to read a subset of data from collections.\nFor example, ",(0,i.jsx)(n.code,{children:"--since"})," allows you to specify an approximate start time from which to read data, and\n",(0,i.jsx)(n.code,{children:"--include-partition"})," allows you to read only data from a specified ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections#logical-partitions",children:"logical partition"}),".\nUse ",(0,i.jsx)(n.code,{children:"flowctl collections read --help"})," to see documentation for all options."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Beta",type:"info",children:[(0,i.jsx)(n.p,{children:"While in beta, this command currently has the following limitations. They will be removed in a later release:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"--uncommitted"})," flag is required. This means that all collection documents are read, regardless of whether they were successfully committed or not.\nIn the future, reads of committed documents will be the default."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Only reads of a single ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections#logical-partitions",children:"partition"})," are supported. If you need to read from a partitioned collection, use ",(0,i.jsx)(n.code,{children:"--include-partition"})," or ",(0,i.jsx)(n.code,{children:"--exclude-partition"})," to narrow down to a single partition."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"--output"})," flag is not usable for this command. Only JSON data can be read from collections."]}),"\n"]}),"\n"]})]}),"\n",(0,i.jsx)(n.h2,{id:"specification",children:"Specification"}),"\n",(0,i.jsx)(n.p,{children:"Collections are defined in Flow specification files per the following format:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'# A set of collections to include in the catalog.\n# Optional, type: object\ncollections:\n # The unique name of the collection.\n acmeCo/products/anvils:\n\n # The schema of the collection, against which collection documents\n # are validated. This may be an inline definition or a relative URI\n # reference.\n # Required, type: string (relative URI form) or object (inline form)\n schema: anvils.schema.yaml\n\n # The key of the collection, specified as JSON pointers of one or more\n # locations within collection documents. If multiple fields are given,\n # they act as a composite key, equivalent to a SQL table PRIMARY KEY\n # with multiple table columns.\n # Required, type: array\n key: [/product/id]\n\n # Projections and logical partitions for this collection.\n # Optional, type: object\n projections:\n\n # Derivation that builds this collection from others through transformations.\n # See the "Derivations" concept page to learn more.\n # Optional, type: object\n derive: ~\n'})}),"\n",(0,i.jsx)(n.h2,{id:"schemas",children:"Schemas"}),"\n",(0,i.jsxs)(n.p,{children:["Every Flow collection must declare a schema,\nand will never accept documents\nthat do not validate against the schema.\nThis helps ensure the quality of your data products\nand the reliability of your derivations and materializations.\nSchema specifications are flexible:\nyours could be exactingly strict, extremely permissive, or somewhere in between.\nFor many source types, Flow is able to generate a basic schema during ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#discovery",children:"discovery"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Schemas may either be declared inline, or provided as a reference to a file.\nReferences can also include JSON pointers as a URL fragment to name a specific schema of a larger schema document:"}),"\n","\n",(0,i.jsxs)(a.A,{children:[(0,i.jsx)(s.A,{value:"Inline",default:!0,children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/collection:\n schema:\n type: object\n required: [id]\n properties:\n id: string\n key: [/id]\n"})})}),(0,i.jsx)(s.A,{value:"File reference",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/collection:\n schema: ../path/to/collection.schema.yaml\n key: [/id]\n"})})}),(0,i.jsx)(s.A,{value:"Reference with pointer",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/collection:\n schema: ../path/to/collection.schema.yaml#/definitions/mySchema\n key: [/id]\n"})})})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas",children:"Learn more about schemas"})}),"\n",(0,i.jsx)(n.h2,{id:"keys",children:"Keys"}),"\n",(0,i.jsxs)(n.p,{children:["Every Flow collection must declare a ",(0,i.jsx)(n.code,{children:"key"})," which is used to group its documents.\nKeys are specified as an array of JSON pointers to document locations. For example:"]}),"\n",(0,i.jsxs)(a.A,{children:[(0,i.jsx)(s.A,{value:"flow.yaml",default:!0,children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/users:\n schema: schema.yaml\n key: [/userId]\n"})})}),(0,i.jsx)(s.A,{value:"schema.yaml",default:!0,children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"type: object\n properties:\n userId: {type: integer}\n name: {type: string}\n required: [userId, name]\n"})})})]}),"\n",(0,i.jsxs)(n.p,{children:["Suppose the following JSON documents are captured into ",(0,i.jsx)(n.code,{children:"acmeCo/users"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{"userId": 1, "name": "Will"}\n{"userId": 1, "name": "William"}\n{"userId": 1, "name": "Will"}\n'})}),"\n",(0,i.jsxs)(n.p,{children:["As its key is ",(0,i.jsx)(n.code,{children:"[/userId]"}),", a materialization of the collection into a database table will reduce to a single row:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"userId | name\n1 | Will\n"})}),"\n",(0,i.jsxs)(n.p,{children:["If its key were instead ",(0,i.jsx)(n.code,{children:"[/name]"}),", there would be two rows in the table:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"userId | name\n1 | Will\n1 | William\n"})}),"\n",(0,i.jsx)(n.h3,{id:"schema-restrictions",children:"Schema restrictions"}),"\n",(0,i.jsx)(n.p,{children:"Keyed document locations may be of a limited set of allowed types:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"boolean"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"integer"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"string"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Excluded types are:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"array"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"null"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"object"})}),"\n",(0,i.jsxs)(n.li,{children:["Fractional ",(0,i.jsx)(n.code,{children:"number"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Keyed fields also must always exist in collection documents.\nFlow performs static inference of the collection schema to verify the existence\nand types of all keyed document locations, and will report an error if the\nlocation could not exist, or could exist with the wrong type."}),"\n",(0,i.jsxs)(n.p,{children:["Flow itself doesn't mind if a keyed location has multiple types,\nso long as they're each of the allowed types: an ",(0,i.jsx)(n.code,{children:"integer"})," or ",(0,i.jsx)(n.code,{children:"string"})," for example.\nSome materialization ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors",children:"connectors"}),", however, may impose further type\nrestrictions as required by the endpoint.\nFor example, SQL databases do not support multiple types for a primary key."]}),"\n",(0,i.jsx)(n.h3,{id:"composite-keys",children:"Composite Keys"}),"\n",(0,i.jsx)(n.p,{children:"A collection may have multiple locations which collectively form a composite key.\nThis can include locations within nested objects and arrays:"}),"\n",(0,i.jsxs)(a.A,{children:[(0,i.jsx)(s.A,{value:"flow.yaml",default:!0,children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/compound-key:\n schema: schema.yaml\n key: [/foo/a, /foo/b, /foo/c/0, /foo/c/1]\n"})})}),(0,i.jsx)(s.A,{value:"schema.yaml",default:!0,children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"type: object\nrequired: [foo]\nproperties:\n foo:\n type: object\n required: [a, b, c]\n properties:\n a: {type: integer}\n b: {type: string}\n c:\n type: array\n items: {type: boolean}\n minItems: 2\n"})})})]}),"\n",(0,i.jsx)(n.h3,{id:"key-behaviors",children:"Key behaviors"}),"\n",(0,i.jsx)(n.p,{children:"A collection key instructs Flow how documents of a collection are to be\nreduced, such as while being materialized to an endpoint.\nFlow also performs opportunistic local reductions over windows of documents\nto improve its performance and reduce the volumes\nof data at each processing stage."}),"\n",(0,i.jsxs)(n.p,{children:["An important subtlety is that the underlying storage of a collection\nwill potentially retain ",(0,i.jsx)(n.em,{children:"many"})," documents of a given key."]}),"\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.a,{href:"#keys",children:"acmeCo/users example"}),', each of the "Will" or "William" variants\nis likely represented in the collection\'s storage \u2014 so long as they didn\'t\narrive so closely together that they were locally combined by Flow.\nIf desired, a derivation could re-key the collection\non ',(0,i.jsx)(n.code,{children:"[/userId, /name]"})," to materialize the various ",(0,i.jsx)(n.code,{children:"/name"}),"s seen for a ",(0,i.jsx)(n.code,{children:"/userId"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["This property makes keys less lossy than they might otherwise appear,\nand it is generally good practice to chose a key that reflects how\nyou wish to ",(0,i.jsx)(n.em,{children:"query"})," a collection, rather than an exhaustive key\nthat's certain to be unique for every document."]}),"\n",(0,i.jsx)(n.h3,{id:"empty-keys",children:"Empty keys"}),"\n",(0,i.jsx)(n.p,{children:"When a specification is automatically generated, there may not be an unambiguously correct key for all collections. This could occur, for example, when a SQL database doesn't have a primary key defined for some table."}),"\n",(0,i.jsx)(n.p,{children:"In cases like this, the generated specification will contain an empty collection key. However, every collection must have a non-empty key, so you'll need to manually edit the generated specification and specify keys for those collections before publishing to the catalog."}),"\n",(0,i.jsx)(n.h2,{id:"projections",children:"Projections"}),"\n",(0,i.jsx)(n.p,{children:"Projections are named locations within a collection document that may be used for\nlogical partitioning or directly exposed to databases into which collections are\nmaterialized."}),"\n",(0,i.jsxs)(n.p,{children:["Many projections are automatically inferred from the collection schema.\nThe ",(0,i.jsx)(n.code,{children:"projections"})," stanza can be used to provide additional projections,\nand to declare logical partitions:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'collections:\n acmeCo/products/anvils:\n schema: anvils.schema.yaml\n key: [/product/id]\n\n # Projections and logical partitions for this collection.\n # Keys name the unique projection field, and values are its JSON Pointer\n # location within the document and configure logical partitioning.\n # Optional, type: object\n projections:\n # Short form: define a field "product_id" with document pointer /product/id.\n product_id: "/product/id"\n\n # Long form: define a field "metal" with document pointer /metal_type\n # which is a logical partition of the collection.\n metal:\n location: "/metal_type"\n partition: true\n\n'})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections",children:"Learn more about projections"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"storage",children:"Storage"}),"\n",(0,i.jsx)(n.p,{children:"Collections are real-time data lakes.\nHistorical documents of the collection\nare stored as an organized layout of\nregular JSON files in your cloud storage bucket.\nReads of that history are served by\ndirectly reading files from your bucket."}),"\n",(0,i.jsxs)(n.p,{children:["Your ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/storage-mappings",children:"storage mappings"}),"\ndetermine how Flow collections are mapped into\nyour cloud storage buckets."]}),"\n",(0,i.jsx)(n.p,{children:"Unlike a traditional data lake, however,\nit's very efficient to read collection documents as they are written.\nDerivations and materializations that source from a collection\nare notified of its new documents within milliseconds of their being published."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/journals",children:"Learn more about journals, which provide storage for collections"})})]})}function p(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>s});t(96540);var i=t(34164);const o={tabItem:"tabItem_Ymn6"};var a=t(74848);function s(e){let{children:n,hidden:t,className:s}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,i.A)(o.tabItem,s),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>g});var i=t(96540),o=t(34164),a=t(23104),s=t(56347),l=t(205),r=t(57485),c=t(31682),d=t(70679);function h(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:t}=e;return(0,i.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:i,default:o}}=e;return{value:n,label:t,attributes:i,default:o}}))}(t);return function(e){const n=(0,c.X)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:t}=e;const o=(0,s.W6)(),a=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,r.aZ)(a),(0,i.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(o.location.search);n.set(a,e),o.replace({...o.location,search:n.toString()})}),[a,o])]}function f(e){const{defaultValue:n,queryString:t=!1,groupId:o}=e,a=u(e),[s,r]=(0,i.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const i=t.find((e=>e.default))??t[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:n,tabValues:a}))),[c,h]=m({queryString:t,groupId:o}),[f,x]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,a]=(0,d.Dv)(t);return[o,(0,i.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:o}),y=(()=>{const e=c??f;return p({value:e,tabValues:a})?e:null})();(0,l.A)((()=>{y&&r(y)}),[y]);return{selectedValue:s,selectValue:(0,i.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);r(e),h(e),x(e)}),[h,x,a]),tabValues:a}}var x=t(92303);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=t(74848);function w(e){let{className:n,block:t,selectedValue:i,selectValue:s,tabValues:l}=e;const r=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.a_)(),d=e=>{const n=e.currentTarget,t=r.indexOf(n),o=l[t].value;o!==i&&(c(n),s(o))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=r.indexOf(e.currentTarget)+1;n=r[t]??r[0];break}case"ArrowLeft":{const t=r.indexOf(e.currentTarget)-1;n=r[t]??r[r.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.A)("tabs",{"tabs--block":t},n),children:l.map((e=>{let{value:n,label:t,attributes:a}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,ref:e=>r.push(e),onKeyDown:h,onClick:d,...a,className:(0,o.A)("tabs__item",y.tabItem,a?.className,{"tabs__item--active":i===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:o}=e;const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===o));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==o})))})}function b(e){const n=f(e);return(0,j.jsxs)("div",{className:(0,o.A)("tabs-container",y.tabList),children:[(0,j.jsx)(w,{...n,...e}),(0,j.jsx)(v,{...n,...e})]})}function g(e){const n=(0,x.A)();return(0,j.jsx)(b,{...e,children:h(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>l});var i=t(96540);const o={},a=i.createContext(o);function s(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/38fdfb5b.40732ef4.js b/pr-preview/pr-1594/assets/js/38fdfb5b.40732ef4.js deleted file mode 100644 index f5ce5b83e4..0000000000 --- a/pr-preview/pr-1594/assets/js/38fdfb5b.40732ef4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9729],{65949:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var a=s(74848),t=s(28453);const r={},o="Connecting to Estuary Flow from Kafka using Dekaf",i={id:"guides/dekaf_reading_collections_from_kafka",title:"Connecting to Estuary Flow from Kafka using Dekaf",description:"Reporting is not yet supported for Dekaf, but is coming.",source:"@site/docs/guides/dekaf_reading_collections_from_kafka.md",sourceDirName:"guides",slug:"/guides/dekaf_reading_collections_from_kafka",permalink:"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/dekaf_reading_collections_from_kafka.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Customize materialized fields",permalink:"/pr-preview/pr-1594/guides/customize-materialization-fields"},next:{title:"How to transform data using SQL",permalink:"/pr-preview/pr-1594/guides/derivation_tutorial_sql"}},l={},c=[{value:"Overview",id:"overview",level:2},{value:"Key Features",id:"key-features",level:2},{value:"Connection Details",id:"connection-details",level:2},{value:"How to Connect to Dekaf",id:"how-to-connect-to-dekaf",level:2},{value:"1. Generate an Estuary Refresh Token:",id:"1-generate-an-estuary-refresh-token",level:3},{value:"2. Set Up Your Kafka Client",id:"2-set-up-your-kafka-client",level:3},{value:"Example Kafka Client Configuration",id:"example-kafka-client-configuration",level:4}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"connecting-to-estuary-flow-from-kafka-using-dekaf",children:"Connecting to Estuary Flow from Kafka using Dekaf"}),"\n",(0,a.jsxs)(n.admonition,{title:"Dekaf is currently in beta.",type:"note",children:[(0,a.jsx)(n.p,{children:"Reporting is not yet supported for Dekaf, but is coming."}),(0,a.jsx)(n.p,{children:"We're currently not charging for use of Dekaf, but will eventually charge under our standard data movement pricing"}),(0,a.jsx)(n.p,{children:"We appreciate your feedback as we continue to refine and enhance this feature."})]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"Dekaf"})," is Estuary Flow's Kafka API compatibility layer, allowing consumers to read data from Estuary Flow collections\nas if they were Kafka topics. Additionally, Dekaf provides a schema registry API for managing schemas. This guide will\nwalk you through the steps to connect to Estuary Flow using Dekaf and its schema registry."]}),"\n",(0,a.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Collections"})," represent datasets within Estuary Flow. All captured documents are written to a collection, and all\nmaterialized documents are read from a collection."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Dekaf"})," enables you to interact with these collections as though they were Kafka topics, providing seamless\nintegration with existing Kafka-based tools and workflows."]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"key-features",children:"Key Features"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Kafka Topic Emulation"}),": Access Estuary Flow collections as if they were Kafka topics."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Schema Registry Emulation"}),": Manage and retrieve schemas assigned to Estuary Flow collections, emulating Confluent's\nSchema Registry."]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"connection-details",children:"Connection Details"}),"\n",(0,a.jsx)(n.p,{children:"To connect to Estuary Flow via Dekaf, you need the following connection details:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Broker Address"}),": ",(0,a.jsx)(n.code,{children:"dekaf.estuary.dev"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Schema Registry Address"}),": ",(0,a.jsx)(n.code,{children:"https://dekaf.estuary.dev"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Security Protocol"}),": ",(0,a.jsx)(n.code,{children:"SASL_SSL"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"SASL Mechanism"}),": ",(0,a.jsx)(n.code,{children:"PLAIN"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"SASL Username"}),": ",(0,a.jsx)(n.code,{children:"{}"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"SASL Password"}),": Estuary Refresh Token (Generate your token in\nthe ",(0,a.jsx)(n.a,{href:"https://dashboard.estuary.dev/admin/api",children:"Estuary Admin Dashboard"}),")"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Schema Registry Username"}),": ",(0,a.jsx)(n.code,{children:"{}"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Schema Registry Password"}),": The same Estuary Refresh Token as above"]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"how-to-connect-to-dekaf",children:"How to Connect to Dekaf"}),"\n",(0,a.jsx)(n.h3,{id:"1-generate-an-estuary-refresh-token",children:"1. Generate an Estuary Refresh Token:"}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsx)(n.li,{children:"Log in to the Estuary Admin Dashboard."}),"\n",(0,a.jsx)(n.li,{children:"Navigate to the section where you can generate tokens."}),"\n",(0,a.jsx)(n.li,{children:"Generate a new refresh token and note it down securely."}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"2-set-up-your-kafka-client",children:"2. Set Up Your Kafka Client"}),"\n",(0,a.jsx)(n.p,{children:"Configure your Kafka client using the connection details provided."}),"\n",(0,a.jsx)(n.h4,{id:"example-kafka-client-configuration",children:"Example Kafka Client Configuration"}),"\n",(0,a.jsxs)(n.p,{children:["Below is an example configuration for a Kafka client using Python\u2019s ",(0,a.jsx)(n.code,{children:"kafka-python"})," library:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-python",children:"from kafka import KafkaConsumer\n\n# Configuration details\nconf = {\n 'bootstrap_servers': 'dekaf.estuary.dev:9092',\n 'security_protocol': 'SASL_SSL',\n 'sasl_mechanism': 'PLAIN',\n 'sasl_plain_username': '{}',\n 'sasl_plain_password': 'Your_Estuary_Refresh_Token',\n 'group_id': 'your_group_id',\n 'auto_offset_reset': 'earliest'\n}\n\n# Create Consumer instance\nconsumer = KafkaConsumer(\n 'your_topic_name',\n bootstrap_servers=conf['bootstrap_servers'],\n security_protocol=conf['security_protocol'],\n sasl_mechanism=conf['sasl_mechanism'],\n sasl_plain_username=conf['sasl_plain_username'],\n sasl_plain_password=conf['sasl_plain_password'],\n group_id=conf['group_id'],\n auto_offset_reset=conf['auto_offset_reset'],\n enable_auto_commit=True,\n value_deserializer=lambda x: x.decode('utf-8')\n)\n\n# Poll for messages\ntry:\n for msg in consumer:\n print(f\"Received message: {msg.value}\")\nexcept KeyboardInterrupt:\n pass\nfinally:\n consumer.close()\n"})}),"\n",(0,a.jsxs)(n.p,{children:["You can also use ",(0,a.jsx)(n.a,{href:"https://github.com/edenhill/kcat",children:"kcat"})," (formerly known as kafkacat) to test reading messages from an\nEstuary Flow collection as if it were a Kafka topic."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-shell",children:'kcat -C \\\n -X broker.address.family=v4 \\\n -X security.protocol=SASL_SSL \\\n -X sasl.mechanism=PLAIN \\\n -X sasl.username="{}" \\\n -X sasl.password="Your_Estuary_Refresh_Token" \\\n -b dekaf.estuary.dev:9092 \\\n -t "full/nameof/estuarycolletion" \\\n -p 0 \\\n -o beginning \\\n -s avro \\\n -r https://{}:{Your_Estuary_Refresh_Token}@dekaf.estuary.dev\n'})})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>i});var a=s(96540);const t={},r=a.createContext(t);function o(e){const n=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/397210d6.7624d70a.js b/pr-preview/pr-1594/assets/js/397210d6.7624d70a.js deleted file mode 100644 index 1aaf551dfc..0000000000 --- a/pr-preview/pr-1594/assets/js/397210d6.7624d70a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9065],{89333:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>h});var a=n(74848),o=n(28453),i=n(13554),s=n.n(i);const r={id:"real_time_cdc_with_mongodb",title:"Real-time CDC with MongoDB",sidebar_position:2},l="Real-time CDC with MongoDB",c={id:"getting-started/tutorials/real_time_cdc_with_mongodb",title:"Real-time CDC with MongoDB",description:"A step-by-step guide to setting up Change Data Capture (CDC) from MongoDB with Estuary Flow.",source:"@site/docs/getting-started/tutorials/real-time-cdc-with-mongodb.md",sourceDirName:"getting-started/tutorials",slug:"/getting-started/tutorials/real_time_cdc_with_mongodb",permalink:"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/getting-started/tutorials/real-time-cdc-with-mongodb.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{id:"real_time_cdc_with_mongodb",title:"Real-time CDC with MongoDB",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"PostgreSQL CDC streaming to Snowflake",permalink:"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake"},next:{title:"Create your first dataflow with Amazon S3 and Snowflake",permalink:"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake"}},d={},h=[{value:"Video tutorial",id:"video-tutorial",level:2},{value:"What is CDC?<a></a>",id:"what-is-cdc",level:2},{value:"Understanding Change Events in MongoDB<a></a>",id:"understanding-change-events-in-mongodb",level:2},{value:"Introduction to Estuary Flow<a></a>",id:"introduction-to-estuary-flow",level:2},{value:"Prerequisites<a></a>",id:"prerequisites",level:2},{value:"Setting up MongoDB<a></a>",id:"setting-up-mongodb",level:2},{value:"Credentials<a></a>",id:"credentials",level:3},{value:"Read Access<a></a>",id:"read-access",level:3},{value:"Configuration Considerations<a></a>",id:"configuration-considerations",level:3},{value:"Configure MongoDB<a></a>",id:"configure-mongodb",level:3},{value:"Setting up Estuary Flow<a></a>",id:"setting-up-estuary-flow",level:2},{value:"MongoDB Capture Configuration<a></a>",id:"mongodb-capture-configuration",level:3},{value:"Documents and Collections<a></a>",id:"documents-and-collections",level:3},{value:"Automating schema evolution<a></a>",id:"automating-schema-evolution",level:3},{value:"Publishing the Capture<a></a>",id:"publishing-the-capture",level:3},{value:"Real-time CDC<a></a>",id:"real-time-cdc",level:2},{value:"Wrapping up<a></a>",id:"wrapping-up",level:2},{value:"Next Steps<a></a>",id:"next-steps",level:2}];function u(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components},{Head:n}=t;return n||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Head",!0),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n,{children:(0,a.jsx)("meta",{property:"og:image",content:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image4_5c651b17d6/image4_5c651b17d6.png"})}),"\n",(0,a.jsxs)(t.h1,{id:"real-time-cdc-with-mongodb",children:["Real-time CDC with MongoDB",(0,a.jsx)("a",{id:"real-time-cdc-with-mongodb"})]}),"\n",(0,a.jsx)(t.p,{children:"A step-by-step guide to setting up Change Data Capture (CDC) from MongoDB with Estuary Flow."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image4_5c651b17d6/image4_5c651b17d6.png",alt:"High level architecture"})}),"\n",(0,a.jsx)(t.p,{children:"MongoDB is still one of the most popular document stores powering web applications today. Due to its flexible schema handling and tight integration with JSON-based libraries developers love working with it. It\u2019s easy to set up, painless to maintain, and works at scale."}),"\n",(0,a.jsx)(t.p,{children:"Because it\u2019s the centerpiece of so many applications, it\u2019s a common data engineering challenge to extract data out of MongoDB in order to power a data warehouse or enable other downstream use cases, like AI or operational analytics."}),"\n",(0,a.jsx)(t.p,{children:"This tutorial will guide you through using Estuary Flow to capture data from MongoDB using change data capture (CDC), requiring minimal configuration. By following these steps, you can empower your organization to leverage its application data in just a few minutes."}),"\n",(0,a.jsx)(t.h2,{id:"video-tutorial",children:"Video tutorial"}),"\n",(0,a.jsx)(s(),{controls:!0,url:"https://www.youtube.com/watch?v=kpF-YCxtArk"}),"\n",(0,a.jsxs)(t.h2,{id:"what-is-cdc",children:["What is CDC?",(0,a.jsx)("a",{id:"what-is-cdc"})]}),"\n",(0,a.jsx)(t.p,{children:"CDC, or Change Data Capture, is a method used to track and capture changes made to data in a database. It enables the real-time capture of insertions, updates, and deletions, providing a continuous stream of changes."}),"\n",(0,a.jsx)(t.p,{children:"This stream of data is invaluable for keeping downstream systems synchronized and up-to-date with the source database, facilitating real-time analytics, replication, and data integration. In essence, CDC allows organizations to capture and react to data changes as they occur, ensuring data accuracy and timeliness across their systems."}),"\n",(0,a.jsxs)(t.p,{children:["Optionally, if you are interested in the intricacies of change data capture, head over to ",(0,a.jsx)(t.a,{href:"https://estuary.dev/cdc-done-correctly/",children:"this"})," article, where we explain the theory behind it - this is not a requirement for this tutorial, so if you want to dive in head first, keep on reading!"]}),"\n",(0,a.jsxs)(t.h2,{id:"understanding-change-events-in-mongodb",children:["Understanding Change Events in MongoDB",(0,a.jsx)("a",{id:"understanding-change-events-in-mongodb"})]}),"\n",(0,a.jsxs)(t.p,{children:["Change events in MongoDB are notifications triggered by modifications to the database's data, configuration, or structure through a mechanism called ",(0,a.jsx)(t.a,{href:"https://www.mongodb.com/docs/manual/changeStreams/",children:"change streams"}),"."]}),"\n",(0,a.jsx)(t.p,{children:"Change Streams in MongoDB are a convenient way for CDC, enabling real-time monitoring of data changes without having to directly interact with the underlying oplog. CDC processes leverage Change Streams to subscribe to data changes, capturing detailed events promptly as insertions, updates, or deletions occur."}),"\n",(0,a.jsx)(t.p,{children:"This approach ensures efficient data propagation to downstream systems, scalability for high-throughput environments, and robust error handling for operations."}),"\n",(0,a.jsx)(t.p,{children:"MongoDB supports various types of change events, each catering to different aspects of database operations. For data synchronization, the following three events are the only ones that matter:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Insert Events: Triggered when new documents are inserted into a collection."}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image5_b1229ced25/image5_b1229ced25.png",alt:"Create event"})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Update Events: Fired upon modifications to existing documents, including field updates and replacements."}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image6_e1604c59d7/image6_e1604c59d7.png",alt:"Update event"})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Delete Events: Signaled when documents are removed from a collection."}),"\n"]}),"\n",(0,a.jsx)(t.admonition,{title:'In MongoDB, if you delete a key from a document, the corresponding change event that gets fired is an "update" event. This may seem counterintuitive at first, but in MongoDB, updates are atomic operations that can modify specific fields within a document, including removing keys. So, when a key is deleted from a document, MongoDB interprets it as an update operation where the specific field (i.e., the key) is being removed, resulting in an "update" event being generated in the oplog.',type:"note"}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image3_5dc8c9ea52/image3_5dc8c9ea52.png",alt:"Delete event"})}),"\n",(0,a.jsxs)(t.h2,{id:"introduction-to-estuary-flow",children:["Introduction to Estuary Flow",(0,a.jsx)("a",{id:"introduction-to-estuary-flow"})]}),"\n",(0,a.jsx)(t.p,{children:"Estuary is the best tool for integrating CDC streams from MongoDB. Here are a few reasons why:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"Unlike ELT vendors, Estuary does streaming CDC and incremental snapshots, not full snapshots or batch change data extraction. This puts less of a load on the source database and lowers latency."}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"Estuary also extracts exactly-and-only-once. As it streams snapshots and changes data it also stores it as a collection for later reuse, such as for backfilling or stream replay. ELT vendors require you to re-extract every time to want to resend the data or restart a change data stream."}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"Estuary supports both real-time and batch. Its streaming latency is within 100ms, and it always extracts in real-time. But it supports any latency from real-time to hours or days for destinations."}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"Estuary guarantees change data is delivered exactly once."}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"Estuary can also maintain type I and type II slowly changing dimensions directly into a target."}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"Estuary streaming has 50MB/sec per connection per table throughput rates, which is 5-10x any other benchmarks for CDC. It also scales horizontally to increase throughput."}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Time to build a real-time CDC pipeline!"}),"\n",(0,a.jsxs)(t.h2,{id:"prerequisites",children:["Prerequisites",(0,a.jsx)("a",{id:"prerequisites"})]}),"\n",(0,a.jsx)(t.p,{children:"To follow along with the tutorial, you\u2019ll need the following:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsxs)(t.p,{children:["An Estuary Flow account. If you haven\u2019t yet, sign up for free ",(0,a.jsx)(t.a,{href:"https://dashboard.estuary.dev/register",children:"here"}),". A fully-managed MongoDB Capture connector is ready for you to get started."]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"A MongoDB Atlas cluster: This tutorial uses Atlas as the source database, but Estuary supports other types of MongoDB deployments as well."}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"setting-up-mongodb",children:["Setting up MongoDB",(0,a.jsx)("a",{id:"setting-up-mongodb"})]}),"\n",(0,a.jsx)(t.p,{children:"To prepare MongoDB for Estuary Flow, you need to ensure the following prerequisites are met:"}),"\n",(0,a.jsxs)(t.h3,{id:"credentials",children:["Credentials",(0,a.jsx)("a",{id:"credentials"})]}),"\n",(0,a.jsx)(t.p,{children:"Obtain the necessary credentials for connecting to your MongoDB instance and database. This includes credentials for authentication purposes, typically a username and password."}),"\n",(0,a.jsxs)(t.h3,{id:"read-access",children:["Read Access",(0,a.jsx)("a",{id:"read-access"})]}),"\n",(0,a.jsx)(t.p,{children:"Ensure that you have read access to the MongoDB database(s) from which you intend to capture data. MongoDB utilizes Role-Based Access Control (RBAC), so make sure your user account has the appropriate permissions to read data."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image15_627fe98d52/image15_627fe98d52.png",alt:"MongoDB built-in roles"})}),"\n",(0,a.jsx)(t.p,{children:"In MongoDB Atlas, any of the built-in Roles will work for the tutorial, but Flow needs at least read permissions over the data you wish to capture if you wish to set up more granular, restricted permissions."}),"\n",(0,a.jsxs)(t.h3,{id:"configuration-considerations",children:["Configuration Considerations",(0,a.jsx)("a",{id:"configuration-considerations"})]}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsxs)(t.p,{children:["If you haven't already, make sure you deploy a Replica Set-type MongoDB cluster. ",(0,a.jsx)(t.strong,{children:"Change streams"})," require a replica set in order to work. A replica set is a group of MongoDB deployments that maintain the same data set. If you are working following along with a fresh MongoDB Atlas project, you shouldn\u2019t need to configure anything manually for this, as the default free-tier instance is a cluster of 3 replicas. To learn more about replica sets, see the Replication Introduction in the ",(0,a.jsx)(t.a,{href:"https://www.mongodb.com/docs/manual/replication/",children:"MongoDB manual"}),"."]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsxs)(t.p,{children:["Ensure that ",(0,a.jsx)(t.a,{href:"/reference/allow-ip-addresses",children:"Estuary's IP addresses are allowlisted"})," to allow access. We\u2019ll show you how to do this in the next section."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.h3,{id:"configure-mongodb",children:["Configure MongoDB",(0,a.jsx)("a",{id:"configure-mongodb"})]}),"\n",(0,a.jsx)(t.p,{children:"Let\u2019s start by provisioning our database. As you can see, for this tutorial, you can just deploy an M0-category cluster, which is free to use."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image12_664e3a1404/image12_664e3a1404.png",alt:"MongoDB deployment options"})}),"\n",(0,a.jsxs)(t.p,{children:["After the cluster has finished provisioning, we\u2019ll need to make sure that Estuary Flow is able to connect to the database. For this, the only requirement with MongoDB Atlas is allowlisting the ",(0,a.jsx)(t.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n",(0,a.jsx)(t.p,{children:"Navigate to the \u201cNetwork Access\u201d page using the left hand sidebar, and using the \u201cAdd new IP address\u201d button, create the list entry which enables the communication between the two services."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image13_3294633b1f/image13_3294633b1f.png",alt:"Allowlisting Estuary Flow's IP"})}),"\n",(0,a.jsxs)(t.p,{children:["Next, find your connection string by navigating to the ",(0,a.jsx)(t.code,{children:"mongosh"})," setup page by clicking the \u201cConnect\u201d button on the database overview section, then choosing the \u201cShell\u201d option."]}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.mdxAdmonitionTitle,{children:["You\u2019re not going to set up ",(0,a.jsx)(t.code,{children:"mongosh"})," for this tutorial, but this is the easiest way to get ahold of the connection string we\u2019ll be using."]})}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image9_81fdbf1a20/image9_81fdbf1a20.png",alt:"Grab your MongoDB connection string"})}),"\n",(0,a.jsxs)(t.p,{children:["Copy the connection string and head over to your ",(0,a.jsx)(t.a,{href:"https://dashboard.estuary.dev/",children:"Estuary Flow dashboard"})," to continue the tutorial."]}),"\n",(0,a.jsxs)(t.h2,{id:"setting-up-estuary-flow",children:["Setting up Estuary Flow",(0,a.jsx)("a",{id:"setting-up-estuary-flow"})]}),"\n",(0,a.jsx)(t.p,{children:"On the dashboard, create a new capture by navigating to the \u201cSources\u201d menu using the sidebar, then pressing the \u201cNew Capture\u201d button. In the list of available connectors, search for \u201cMongoDB\u201d, then press \u201cCapture\u201d."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image7_4cd384d7bd/image7_4cd384d7bd.png",alt:"Create a Source Capture"})}),"\n",(0,a.jsx)(t.p,{children:"Pressing this button will bring you to the connector configuration page, where you\u2019ll be able to provision your fully managed real-time Data Flow."}),"\n",(0,a.jsxs)(t.h3,{id:"mongodb-capture-configuration",children:["MongoDB Capture Configuration",(0,a.jsx)("a",{id:"mongodb-capture-configuration"})]}),"\n",(0,a.jsx)(t.p,{children:"As a first step, in the Capture Details section, name your capture and optionally add a description for it."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image14_17211852c9/image14_17211852c9.png",alt:"Capture details configuration"})}),"\n",(0,a.jsx)(t.p,{children:"Once you are finished, step down to the second configuration section, called \u201cEndpoint Config\u201d. Here you have to use the address for the database you took a note of in the MongoDB setup section, along with your username and password which you configured when setting up MongoDB Atlas."}),"\n",(0,a.jsxs)(t.p,{children:["If your user has access to all databases, ensure that in your MongoDB address, you specify the ",(0,a.jsx)(t.code,{children:"?authSource=admin"})," parameter in the connection address. In this case, authentication is performed through your admin database."]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image17_80203a1a77/image17_80203a1a77.png",alt:"Capture endpoint configuration"})}),"\n",(0,a.jsx)(t.p,{children:'As for the "Database" option, feel free to leave it empty, that way the automated discovery process of Flow will make sure every available database is ready for data extraction.'}),"\n",(0,a.jsx)(t.p,{children:"After you press the blue \u201cNext\u201d button in the top right corner, Flow will automatically crawl through the connection to discover available resources. Next up, you\u2019ll see the third, and final configuration section, where you are able to view and choose from all the databases and collections which are discovered by Flow."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image18_77d0afe861/image18_77d0afe861.png",alt:"Capture output collections confuration"})}),"\n",(0,a.jsxs)(t.h3,{id:"documents-and-collections",children:["Documents and Collections",(0,a.jsx)("a",{id:"documents-and-collections"})]}),"\n",(0,a.jsx)(t.p,{children:"Before we initialize the connector, let\u2019s talk a little bit about how incoming data is represented in Flow."}),"\n",(0,a.jsxs)(t.p,{children:["The ",(0,a.jsx)(t.strong,{children:"documents"})," of your flows are stored in ",(0,a.jsx)(t.strong,{children:"collections"}),": real-time data lakes of JSON documents in cloud storage."]}),"\n",(0,a.jsx)(t.admonition,{title:"Keep in mind, these are not the same documents and collections as the ones in MongoDB, only the names are similar, but we are talking about separate systems.",type:"note"}),"\n",(0,a.jsxs)(t.p,{children:["Collections being stored in an object storage mean that once you start capturing data, you won\u2019t have to worry about it not being available to replay \u2013 object stores such as S3 can be configured to cheaply store data forever. See ",(0,a.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/collections/#documents",children:"docs page"})," for more information about documents."]}),"\n",(0,a.jsx)(t.p,{children:"To see how Flow parsed the incoming records, click on the \u201cCollection\u201d tab on the UI."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image16_aa92057159/image16_aa92057159.png",alt:"Capture bindings configuration"})}),"\n",(0,a.jsx)(t.p,{children:"When you set up a capture from MongoDB using the Flow web app, the underlying collection specifications will look something like this:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-yaml",children:"key: [ /_id ]\nwriteSchema:\n\xa0\xa0type: object\n\xa0\xa0properties:\n\xa0\xa0\xa0\xa0_id: { type: string }\n\xa0\xa0required: [ _id ]\nreadSchema:\n\xa0\xa0allOf:\n\xa0\xa0\xa0\xa0- $ref: flow://write-schema\n\xa0\xa0\xa0\xa0- $ref: flow://inferred-schema\n"})}),"\n",(0,a.jsxs)(t.p,{children:["This specification uses separate ",(0,a.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/schemas/#write-and-read-schemas",children:"read and write schemas"}),". The ",(0,a.jsx)(t.code,{children:"writeSchema"})," is extremely permissive, and only requires an ",(0,a.jsx)(t.code,{children:"_id"})," property with a string value. The ",(0,a.jsx)(t.code,{children:"readSchema"})," references ",(0,a.jsx)(t.code,{children:"flow://inferred-schema"}),", which expands to the current inferred schema when the collection is published."]}),"\n",(0,a.jsxs)(t.p,{children:["MongoDB documents have a mandatory ",(0,a.jsx)(t.code,{children:"_id"})," field that is used as the key of the collection. But that is essentially the only requirement. You can't know what other fields may exist on MongoDB documents until you've read them.\xa0 On the UI, for this reason, only three fields are visible initially in the collection schema tab."]}),"\n",(0,a.jsxs)(t.h3,{id:"automating-schema-evolution",children:["Automating schema evolution",(0,a.jsx)("a",{id:"automating-schema-evolution"})]}),"\n",(0,a.jsxs)(t.p,{children:["In addition to selecting the collections for capture, this interface provides access to three settings that govern schema evolution. In a NoSQL database environment like MongoDB, schema alterations are frequent occurrences. Manually synchronizing source and destination schemas can end up being a lot of maintenance. To help with this, Estuary introduces a more ",(0,a.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/advanced/evolutions/#what-do-schema-evolutions-do",children:"sophisticated schema evolution strategy"}),"."]}),"\n",(0,a.jsxs)(t.p,{children:["With Estuary Flow, teams can opt to suspend the Data Flow using data contracts, automate the update of the target schema with the new MongoDB schema, or create a new table in the destination to maintain separation between old and new schemas. Details can be found in our ",(0,a.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/advanced/evolutions/",children:"schema evolution"})," docs."]}),"\n",(0,a.jsx)(t.p,{children:"Schema evolutions serve to prevent errors stemming from discrepancies between specifications in a number of ways:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"Materializations will automatically apply backward-compatible schema changes, like adding a new column. This doesn't require re-backfilling the target tables or re-creating the Flow collection."}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"For more complex scenarios, the evolution adjusts the affected materialization bindings to increment their backfill counter, prompting the materialization process to reconstruct the resource (such as a database table) and backfill it from the offset."}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsxs)(t.p,{children:["In instances where necessary, such as when the collection key or logical partitioning undergoes changes, the evolution generates a completely new collection with a numerical suffix (e.g., ",(0,a.jsx)(t.code,{children:"_v2"}),"). This new collection initializes as empty and undergoes backfilling from the source. Moreover, the evolution updates all captures and materializations referencing the old collection to point to the new collection, incrementing their backfill counters accordingly. This method is more intricate and is only invoked when essential alterations are identified."]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"In these scenarios, the names of destination resources remain unaltered. For instance, a materialization to Postgres would drop and re-establish the affected tables with their original names."}),"\n",(0,a.jsxs)(t.h3,{id:"publishing-the-capture",children:["Publishing the Capture",(0,a.jsx)("a",{id:"publishing-the-capture"})]}),"\n",(0,a.jsx)(t.p,{children:"To finalize the connector configuration and kick it off, press the \u201cSave and Publish\u201d button. Flow will test, save and publish your capture. You\u2019ll see a similar screen if everything went well or if there were any issues setting up the connector, you\u2019ll see detailed error messages instead."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image2_b4e6afde4d/image2_b4e6afde4d.png",alt:"Successful capture publish screen"})}),"\n",(0,a.jsx)(t.p,{children:"During the initial database snapshot \u2013 which is triggered automatically \u2013 the connector seamlessly captures change events by continuously monitoring change streams while concurrently executing collection scans to backfill pre-existing documents. Following the initial snapshot, the connector perpetually monitors change streams to capture all subsequent changes in real-time."}),"\n",(0,a.jsx)(t.p,{children:"Incremental backfills in the MongoDB connector follow a straightforward approach to ensure comprehensive data capture with minimal latency. Initially, all tracked change streams are synchronized to maintain data integrity. Then, a targeted backfilling effort occurs across MongoDB collections until all are up to date. Continuous monitoring via change streams ensures ongoing data capture and means there is no need to pause replication during an ongoing backfill."}),"\n",(0,a.jsx)(t.p,{children:"In the event of a pause in the connector's process, it resumes capturing change events from the point of interruption. However, the connector's ability to accomplish this depends on the size of the replica set oplog. In certain scenarios where the pause duration is significant enough for the oplog to purge old change events, the connector may necessitate redoing the backfill to maintain data consistency."}),"\n",(0,a.jsx)(t.admonition,{type:"tip",children:(0,a.jsxs)(t.mdxAdmonitionTitle,{children:["To ensure reliable data capture, it is recommended to ",(0,a.jsx)(t.a,{href:"https://www.mongodb.com/docs/manual/tutorial/change-oplog-size/#c.-change-the-oplog-size-of-the-replica-set-member",children:"adjust the oplog size"})," or set a ",(0,a.jsx)(t.a,{href:"https://www.mongodb.com/docs/manual/reference/command/replSetResizeOplog/#minimum-oplog-retention-period",children:"minimum retention period"}),". A recommended minimum retention period of at least 24 hours is sufficient for most cases."]})}),"\n",(0,a.jsxs)(t.h2,{id:"real-time-cdc",children:["Real-time CDC",(0,a.jsx)("a",{id:"real-time-cdc"})]}),"\n",(0,a.jsx)(t.p,{children:"Let\u2019s head over to the collections page to see our arriving documents."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image8_515f331796/image8_515f331796.png",alt:"Collections"})}),"\n",(0,a.jsx)(t.p,{children:"Looks like all of the selected MongoDB collections have been fully replicated into Flow by the initial backfill."}),"\n",(0,a.jsxs)(t.p,{children:["Let\u2019s take a look at the ",(0,a.jsx)(t.code,{children:"movies"})," collection to see what details Flow can tell us about the documents. You can see some statistics about the integration throughput and you can also take a look at the actual documents in a preview window."]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image10_77731295df/image10_77731295df.png",alt:"Collection details"})}),"\n",(0,a.jsx)(t.p,{children:"You can also check out the generated specification, which is the Flow\u2019s behind-the-scenes declarative way of representing the Collection resource."}),"\n",(0,a.jsxs)(t.p,{children:["For the ",(0,a.jsx)(t.code,{children:"movies"})," collection, this is what it looks like:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-json",children:'{\n "writeSchema": {\n "type": "object",\n "required": ["_id"],\n "properties": {\n "_id": {\n "type": "string"\n },\n "_meta": {\n "$schema": "http://json-schema.org/draft/2020-12/schema",\n "properties": {\n "op": {\n "type": "string",\n "enum": ["c", "u", "d"],\n "title": "Change Operation",\n "description": "Change operation type: \'c\' Create/Insert \'u\' Update \'d\' Delete."\n }\n },\n "type": "object"\n }\n },\n "x-infer-schema": true\n },\n "readSchema": {\n "allOf": [\n {\n "$ref": "flow://write-schema"\n },\n {\n "$ref": "flow://inferred-schema"\n }\n ]\n },\n "key": ["/_id"]\n}\n'})}),"\n",(0,a.jsxs)(t.p,{children:["You can see the flexible ",(0,a.jsx)(t.code,{children:"readSchema"})," configuration in action we mentioned above."]}),"\n",(0,a.jsxs)(t.p,{children:["You can use the preview window on the collections \u201cOverview\u201d page to quickly test how change events propagate from MongoDB. Head over to the MongoDB Atlas UI and insert a new document into the ",(0,a.jsx)(t.code,{children:"movies"})," collection."]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image1_0a5fb197d3/image1_0a5fb197d3.png",alt:"Insert new document"})}),"\n",(0,a.jsx)(t.p,{children:"Here\u2019s a sample JSON (describing non-existent but very intriguing movie) you can copy paste into the pop-up modal to spare you the trouble."}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-json",children:'{\n "title": "Dataflow",\n "fullplot": "In a near-future world driven by data, a team of maverick engineers and programmers set out to revolutionize the way information is processed and transmitted. As they delve deeper into the complexities of real-time data streaming, they uncover dark secrets and face moral dilemmas that threaten to unravel their ambitious project.",\n "plot": "A team of brilliant engineers embark on a groundbreaking project to develop a real-time data streaming platform, but they soon discover unexpected challenges and threats lurking in the digital realm.",\n "genres": ["Drama", "Sci-Fi", "Thriller"],\n "runtime": 135,\n "cast": [\n "Emily Blunt",\n "Michael B. Jordan",\n "Idris Elba",\n "Zendaya",\n "Oscar Isaac"\n ],\n "poster": "https://example.com/posters/real-time-data-streaming.jpg",\n "languages": ["English"],\n "released": 1739808000000,\n "directors": ["Christopher Nolan"],\n "rated": "PG-13",\n "awards": {\n "wins": 3,\n "nominations": 8,\n "text": "3 wins, 8 nominations"\n },\n "lastupdated": "2024-04-30 10:15:00.000000",\n "year": 2024,\n "imdb": {\n "rating": 8.5,\n "votes": 15234,\n "id": 1001\n },\n "countries": ["USA", "United Kingdom"],\n "type": "movie",\n "tomatoes": {\n "viewer": {\n "rating": 4.2,\n "numReviews": 3856,\n "meter": 82\n },\n "fresh": 34,\n "critic": {\n "rating": 8.0,\n "numReviews": 22,\n "meter": 91\n },\n "rotten": 2,\n "lastUpdated": 1739894400000\n },\n "num_mflix_comments": 120\n}\n'})}),"\n",(0,a.jsx)(t.p,{children:"After you insert the document, check out the collection preview on the Flow UI to verify it has indeed arrived. The process for updating and deleting collections in MongoDB works similarly."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//image11_772715227c/image11_772715227c.png",alt:"CDC event verification"})}),"\n",(0,a.jsxs)(t.h2,{id:"wrapping-up",children:["Wrapping up",(0,a.jsx)("a",{id:"wrapping-up"})]}),"\n",(0,a.jsx)(t.p,{children:"In this tutorial, you set up a MongoDB Change Data Capture (CDC) integration using Estuary Flow. Throughout the process, you learned about the technical nuances of capturing and synchronizing data changes from MongoDB collections in real-time."}),"\n",(0,a.jsx)(t.p,{children:"Key takeaways from this tutorial:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"MongoDB's document-based approach and schema flexibility present unique challenges and opportunities for Change Data Capture workflows."}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"You explored the prerequisites and configuration settings required to establish a seamless connection between MongoDB and Estuary, ensuring efficient data capture and synchronization."}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"Estuary's schema evolution capabilities enable data teams to manage schema changes effectively, ensuring data consistency and integrity across source and destination systems."}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"You learned how Flow continuously monitors MongoDB change streams and executes backfilling processes to capture changes accurately, even in the event of interruptions or schema alterations."}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.h2,{id:"next-steps",children:["Next Steps",(0,a.jsx)("a",{id:"next-steps"})]}),"\n",(0,a.jsx)(t.p,{children:"That\u2019s it! You should have everything you need to know to create your own data pipeline for capturing change events from MongoDB!"}),"\n",(0,a.jsx)(t.p,{children:"Now try it out on your own CloudSQL database or other sources."}),"\n",(0,a.jsxs)(t.p,{children:["If you want to learn more, make sure you read through the ",(0,a.jsx)(t.a,{href:"https://docs.estuary.dev/",children:"Estuary documentation"}),"."]}),"\n",(0,a.jsxs)(t.p,{children:["You\u2019ll find instructions on how to use other connectors ",(0,a.jsx)(t.a,{href:"https://docs.estuary.dev/",children:"here"}),". There are more tutorials ",(0,a.jsx)(t.a,{href:"https://docs.estuary.dev/guides/",children:"here"}),"."]}),"\n",(0,a.jsxs)(t.p,{children:["Also, don\u2019t forget to join the ",(0,a.jsx)(t.a,{href:"https://estuary-dev.slack.com/ssb/redirect#/shared-invite/email",children:"Estuary Slack Community"}),"!"]})]})}function p(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/3bada45e.c4a4a13c.js b/pr-preview/pr-1594/assets/js/3bada45e.c4a4a13c.js deleted file mode 100644 index 7547879f21..0000000000 --- a/pr-preview/pr-1594/assets/js/3bada45e.c4a4a13c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4226],{67707:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var r=t(74848),i=t(28453);const s={sidebar_position:3},a="MariaDB",o={id:"reference/Connectors/capture-connectors/MariaDB/MariaDB",title:"MariaDB",description:"This is a change data capture (CDC) connector that captures change events from a MariaDB database via the Binary Log.",source:"@site/docs/reference/Connectors/capture-connectors/MariaDB/MariaDB.md",sourceDirName:"reference/Connectors/capture-connectors/MariaDB",slug:"/reference/Connectors/capture-connectors/MariaDB/",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/MariaDB/MariaDB.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Mailchimp",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp"},next:{title:"Amazon RDS for MariaDB",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb"}},c={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Self Hosted MariaDB",id:"self-hosted-mariadb",level:3},{value:"Azure Database for MariaDB",id:"azure-database-for-mariadb",level:3},{value:"Setting the MariaDB time zone",id:"setting-the-mariadb-time-zone",level:3},{value:"Backfills and performance considerations",id:"backfills-and-performance-considerations",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Troubleshooting Capture Errors",id:"troubleshooting-capture-errors",level:2},{value:"Unsupported Operations",id:"unsupported-operations",level:3},{value:"Data Manipulation Queries",id:"data-manipulation-queries",level:3},{value:"Unhandled Queries",id:"unhandled-queries",level:3},{value:"Metadata Errors",id:"metadata-errors",level:3},{value:"Insufficient Binlog Retention",id:"insufficient-binlog-retention",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"mariadb",children:"MariaDB"}),"\n",(0,r.jsxs)(n.p,{children:["This is a change data capture (CDC) connector that captures change events from a MariaDB database via the ",(0,r.jsx)(n.a,{href:"https://mariadb.com/kb/en/overview-of-the-binary-log/",children:"Binary Log"}),".\nIt's derived from the ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/",children:"MySQL capture connector"}),",\nso the same configuration applies, but the setup steps look somewhat different."]}),"\n",(0,r.jsxs)(n.p,{children:["This connector is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://github.com/estuary/connectors/pkgs/container/source-mariadb",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-mariadb:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"To use this connector, you'll need a MariaDB database setup with the following."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://mariadb.com/kb/en/binary-log-formats/",children:(0,r.jsx)(n.code,{children:"binlog_format"})}),"\nsystem variable set to ",(0,r.jsx)(n.code,{children:"ROW"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://mariadb.com/kb/en/using-and-maintaining-the-binary-log/#purging-log-files",children:"Binary log expiration period"})," set to at least 30 days (2592000 seconds) if at all possible.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["This value may be set lower if necessary, but we ",(0,r.jsx)(n.a,{href:"#insufficient-binlog-retention",children:"strongly discourage"})," going below 7 days as this may increase the likelihood of unrecoverable failures.\nMariaDB's default value is 0 (no expiration)."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:['A watermarks table. The watermarks table is a small "scratch space"\nto which the connector occasionally writes a small amount of data (a UUID,\nspecifically) to ensure accuracy when backfilling preexisting table contents.',"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The default name is ",(0,r.jsx)(n.code,{children:'"flow.watermarks"'}),", but this can be overridden in ",(0,r.jsx)(n.code,{children:"config.json"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["A database user with appropriate permissions:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"REPLICATION CLIENT"})," and ",(0,r.jsx)(n.code,{children:"REPLICATION SLAVE"})," ",(0,r.jsx)(n.a,{href:"https://mariadb.com/docs/skysql/ref/es10.6/privileges/",children:"privileges"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Permission to insert, update, and delete on the watermarks table."}),"\n",(0,r.jsx)(n.li,{children:"Permission to read the tables being captured."}),"\n",(0,r.jsxs)(n.li,{children:["Permission to read from ",(0,r.jsx)(n.code,{children:"information_schema"})," tables, if automatic discovery is used."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["If the table(s) to be captured include columns of type ",(0,r.jsx)(n.code,{children:"DATETIME"}),", the ",(0,r.jsx)(n.code,{children:"time_zone"})," system variable\nmust be set to an IANA zone name or numerical offset or the capture configured with a ",(0,r.jsx)(n.code,{children:"timezone"})," to use by default."]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{title:"Configuration Tip",type:"tip",children:(0,r.jsxs)(n.p,{children:["To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see ",(0,r.jsx)(n.a,{href:"/guides/connect-network/",children:"configure connections with SSH tunneling"}),"."]})}),"\n",(0,r.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,r.jsx)(n.h3,{id:"self-hosted-mariadb",children:"Self Hosted MariaDB"}),"\n",(0,r.jsx)(n.p,{children:"To meet these requirements, do the following:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Create the watermarks table. This table can have any name and be in any database, so long as the capture's ",(0,r.jsx)(n.code,{children:"config.json"})," file is modified accordingly."]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"CREATE DATABASE IF NOT EXISTS flow;\nCREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsxs)(n.li,{children:["Create the ",(0,r.jsx)(n.code,{children:"flow_capture"})," user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"SELECT"})," permission can be restricted to just the tables that need to be\ncaptured, but automatic discovery requires ",(0,r.jsx)(n.code,{children:"information_schema"})," access as well."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"CREATE USER IF NOT EXISTS flow_capture\n IDENTIFIED BY 'secret'\nGRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';\nGRANT SELECT ON *.* TO 'flow_capture';\nGRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"3",children:["\n",(0,r.jsx)(n.li,{children:"Configure the binary log to retain data for 30 days, if previously set lower."}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"SET PERSIST binlog_expire_logs_seconds = 2592000;\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"4",children:["\n",(0,r.jsxs)(n.li,{children:["Configure the database's time zone. See ",(0,r.jsx)(n.a,{href:"#setting-the-mariadb-time-zone",children:"below"})," for more information."]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"SET PERSIST time_zone = '-05:00'\n"})}),"\n",(0,r.jsx)(n.h3,{id:"azure-database-for-mariadb",children:"Azure Database for MariaDB"}),"\n",(0,r.jsx)(n.p,{children:"You can use this connector for MariaDB instances on Azure Database for MariaDB using the following setup instructions."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Allow connections to the database from the Estuary Flow IP address."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Create a new ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/mariadb/howto-manage-firewall-portal",children:"firewall rule"}),"\nthat grants access to the ",(0,r.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsx)(n.p,{children:"Alternatively, you can allow secure connections via SSH tunneling. To do so:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Follow the guide to ",(0,r.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,r.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,r.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above,\nincluding the additional ",(0,r.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"}),"\nfor additional details and a sample."]}),"\n"]})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Set the ",(0,r.jsx)(n.code,{children:"binlog_expire_logs_seconds"})," ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/mariadb/howto-server-parameters#configure-server-parameters",children:"server perameter"}),"\nto ",(0,r.jsx)(n.code,{children:"2592000"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Using your preferred MariaDB client, create the watermarks table."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Your username must be specified in the format ",(0,r.jsx)(n.code,{children:"username@servername"}),"."]})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"CREATE DATABASE IF NOT EXISTS flow;\nCREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"4",children:["\n",(0,r.jsxs)(n.li,{children:["Create the ",(0,r.jsx)(n.code,{children:"flow_capture"})," user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"SELECT"})," permission can be restricted to just the tables that need to be\ncaptured, but automatic discovery requires ",(0,r.jsx)(n.code,{children:"information_schema"})," access as well."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"CREATE USER IF NOT EXISTS flow_capture\n IDENTIFIED BY 'secret'\nGRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';\nGRANT SELECT ON *.* TO 'flow_capture';\nGRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"5",children:["\n",(0,r.jsxs)(n.li,{children:["Note the instance's host under Server name, and the port under Connection Strings (usually ",(0,r.jsx)(n.code,{children:"3306"}),").\nTogether, you'll use the host",":port"," as the ",(0,r.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"setting-the-mariadb-time-zone",children:"Setting the MariaDB time zone"}),"\n",(0,r.jsxs)(n.p,{children:["MariaDB's ",(0,r.jsxs)(n.a,{href:"https://mariadb.com/kb/en/server-system-variables/#system_time_zone",children:[(0,r.jsx)(n.code,{children:"time_zone"})," server system variable"]})," is set to ",(0,r.jsx)(n.code,{children:"SYSTEM"})," by default.\nFlow is not able to detect your time zone when it's set this way, so you must explicitly set the variable for your database."]}),"\n",(0,r.jsxs)(n.p,{children:["If you intend to capture tables including columns of the type ",(0,r.jsx)(n.code,{children:"DATETIME"}),",\nand ",(0,r.jsx)(n.code,{children:"time_zone"})," is set to ",(0,r.jsx)(n.code,{children:"SYSTEM"}),",\nFlow won't be able to detect the time zone and convert the column to ",(0,r.jsx)(n.a,{href:"https://www.rfc-editor.org/rfc/rfc3339",children:"RFC3339 format"}),".\nTo avoid this, you must explicitly set the time zone for your database."]}),"\n",(0,r.jsx)(n.p,{children:"You can:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Specify a numerical offset from UTC."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Specify a named timezone in ",(0,r.jsx)(n.a,{href:"https://www.iana.org/time-zones",children:"IANA timezone format"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For example, if you're located in New Jersey, USA, you could set ",(0,r.jsx)(n.code,{children:"time_zone"})," to ",(0,r.jsx)(n.code,{children:"-05:00"})," or ",(0,r.jsx)(n.code,{children:"-04:00"}),", depending on the time of year.\nBecause this region observes daylight savings time, you'd be responsible for changing the offset.\nAlternatively, you could set ",(0,r.jsx)(n.code,{children:"time_zone"})," to ",(0,r.jsx)(n.code,{children:"America/New_York"}),", and time changes would occur automatically."]}),"\n",(0,r.jsxs)(n.p,{children:["If using IANA time zones, your database must include time zone tables. ",(0,r.jsx)(n.a,{href:"https://mariadb.com/kb/en/time-zones/",children:"Learn more in the MariaDB docs"}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"Capture Timezone Configuration",type:"tip",children:(0,r.jsxs)(n.p,{children:["If you are unable to set the ",(0,r.jsx)(n.code,{children:"time_zone"})," in the database and need to capture tables with ",(0,r.jsx)(n.code,{children:"DATETIME"})," columns, the capture can be configured to assume a time zone using the ",(0,r.jsx)(n.code,{children:"timezone"})," configuration property (see below). The ",(0,r.jsx)(n.code,{children:"timezone"})," configuration property can be set as a numerical offset or IANA timezone format."]})}),"\n",(0,r.jsx)(n.h2,{id:"backfills-and-performance-considerations",children:"Backfills and performance considerations"}),"\n",(0,r.jsxs)(n.p,{children:["When the a MariaDB capture is initiated, by default, the connector first ",(0,r.jsx)(n.em,{children:"backfills"}),", or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis."]}),"\n",(0,r.jsx)(n.p,{children:"This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow.\nHowever, you may find it appropriate to skip the backfill, especially for extremely large tables."}),"\n",(0,r.jsxs)(n.p,{children:["In this case, you may turn of backfilling on a per-table basis. See ",(0,r.jsx)(n.a,{href:"#properties",children:"properties"})," for details."]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the MariaDB source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/address"})})}),(0,r.jsx)(n.td,{children:"Server Address"}),(0,r.jsxs)(n.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/user"})})}),(0,r.jsx)(n.td,{children:"Login User"}),(0,r.jsx)(n.td,{children:"The database user to authenticate as."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsxs)(n.td,{children:["Required, ",(0,r.jsx)(n.code,{children:'"flow_capture"'})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/password"})})}),(0,r.jsx)(n.td,{children:"Login Password"}),(0,r.jsx)(n.td,{children:"Password for the specified database user."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/timezone"})}),(0,r.jsx)(n.td,{children:"Timezone"}),(0,r.jsxs)(n.td,{children:["Timezone to use when capturing datetime columns. Should normally be left blank to use the database's ",(0,r.jsx)(n.code,{children:"'time_zone'"})," system variable. Only required if the ",(0,r.jsx)(n.code,{children:"'time_zone'"})," system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH",":MM"," offset. Takes precedence over the ",(0,r.jsx)(n.code,{children:"'time_zone'"})," system variable if both are set."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/watermarks_table"})}),(0,r.jsx)(n.td,{children:"Watermarks Table Name"}),(0,r.jsx)(n.td,{children:"The name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"flow.watermarks"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/dbname"})}),(0,r.jsx)(n.td,{children:"Database Name"}),(0,r.jsx)(n.td,{children:"The name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"mysql"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/node_id"})}),(0,r.jsx)(n.td,{children:"Node ID"}),(0,r.jsx)(n.td,{children:"Node ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/skip_backfills"})}),(0,r.jsx)(n.td,{children:"Skip Backfills"}),(0,r.jsx)(n.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,r.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,r.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"131072"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/skip_binlog_retention_check"})}),(0,r.jsx)(n.td,{children:"Skip Binlog Retention Sanity Check"}),(0,r.jsx)(n.td,{children:"Bypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need."}),(0,r.jsx)(n.td,{children:"boolean"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/namespace"})})}),(0,r.jsx)(n.td,{children:"Namespace"}),(0,r.jsxs)(n.td,{children:["The ",(0,r.jsx)(n.a,{href:"https://mariadb.com/kb/en/understanding-mariadb-architecture/#databases",children:"database"})," in which the table resides."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Name of the table to be captured from the database."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync mode"}),(0,r.jsxs)(n.td,{children:["Connection method. Always set to ",(0,r.jsx)(n.code,{children:"incremental"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsxs)(n.p,{children:["When you configure this connector in the web application, the automatic ",(0,r.jsx)(n.strong,{children:"discovery"})," process sets up a binding for ",(0,r.jsx)(n.em,{children:"most"})," tables it finds in your database, but there are exceptions."]}),(0,r.jsxs)(n.p,{children:["Tables in the MariaDB system databases ",(0,r.jsx)(n.code,{children:"information_schema"}),", ",(0,r.jsx)(n.code,{children:"mysql"}),", and ",(0,r.jsx)(n.code,{children:"performance_schema"})," will not be discovered.\nYou can add bindings for such tables manually."]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-mariadb:dev\n config:\n address: "127.0.0.1:3306"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n namespace: ${TABLE_NAMESPACE}\n stream: ${TABLE_NAME}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,r.jsx)(n.h2,{id:"troubleshooting-capture-errors",children:"Troubleshooting Capture Errors"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"source-mariadb"})," connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations:"]}),"\n",(0,r.jsx)(n.h3,{id:"unsupported-operations",children:"Unsupported Operations"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture is failing with an ",(0,r.jsx)(n.code,{children:'"unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE"'})," error, this indicates that such an operation has taken place impacting a table which is currently being captured."]}),"\n",(0,r.jsxs)(n.p,{children:["In the case of ",(0,r.jsx)(n.code,{children:"DROP TABLE"})," and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety)."]}),"\n",(0,r.jsxs)(n.p,{children:["In the case of ",(0,r.jsx)(n.code,{children:"ALTER TABLE"})," we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a ",(0,r.jsx)(n.code,{children:"DROP"})," or ",(0,r.jsx)(n.code,{children:"TRUNCATE TABLE"}),", but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did."]}),"\n",(0,r.jsx)(n.h3,{id:"data-manipulation-queries",children:"Data Manipulation Queries"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture is failing with an ",(0,r.jsx)(n.code,{children:'"unsupported DML query"'})," error, this means that an ",(0,r.jsx)(n.code,{children:"INSERT"}),", ",(0,r.jsx)(n.code,{children:"UPDATE"}),", ",(0,r.jsx)(n.code,{children:"DELETE"})," or other data manipulation query is present in the binlog. This should generally not happen if ",(0,r.jsx)(n.code,{children:"binlog_format = 'ROW'"})," as described in the ",(0,r.jsx)(n.a,{href:"#prerequisites",children:"Prerequisites"})," section."]}),"\n",(0,r.jsxs)(n.p,{children:["Resolving this error requires fixing the ",(0,r.jsx)(n.code,{children:"binlog_format"})," system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an ",(0,r.jsx)(n.code,{children:"INSERT"}),"/",(0,r.jsx)(n.code,{children:"DELETE"})," query it may suffice to remove the capture binding for the offending table and then re-add it."]}),"\n",(0,r.jsx)(n.h3,{id:"unhandled-queries",children:"Unhandled Queries"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture is failing with an ",(0,r.jsx)(n.code,{children:'"unhandled query"'})," error, some SQL query is present in the binlog which the connector does not (currently) understand."]}),"\n",(0,r.jsxs)(n.p,{children:["In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported ",(0,r.jsx)(n.a,{href:"#data-manipulation-queries",children:"DML Query"}),", an unsupported ",(0,r.jsx)(n.a,{href:"#unsupported-operations",children:"Table Operation"}),", or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog."]}),"\n",(0,r.jsx)(n.h3,{id:"metadata-errors",children:"Metadata Errors"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture is failing with a ",(0,r.jsx)(n.code,{children:'"metadata error"'})," then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes."]}),"\n",(0,r.jsx)(n.p,{children:"This should never happen, and most likely means that the binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety)."}),"\n",(0,r.jsx)(n.h3,{id:"insufficient-binlog-retention",children:"Insufficient Binlog Retention"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture fails with a ",(0,r.jsx)(n.code,{children:'"binlog retention period is too short"'})," error, it is informing you that the MariaDB binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from."]}),"\n",(0,r.jsx)(n.p,{children:"(If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.)"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:'"binlog retention period is too short"'})," error should normally be fixed by setting ",(0,r.jsx)(n.code,{children:"binlog_expire_logs_seconds = 2592000"})," as described in the ",(0,r.jsx)(n.a,{href:"#prerequisites",children:"Prerequisites"})," section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the ",(0,r.jsx)(n.code,{children:"skip_binlog_retention_check"})," configuration option to disable this safety."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var r=t(96540);const i={},s=r.createContext(i);function a(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/3c6e6542.17a2c4da.js b/pr-preview/pr-1594/assets/js/3c6e6542.17a2c4da.js deleted file mode 100644 index dc7e30639c..0000000000 --- a/pr-preview/pr-1594/assets/js/3c6e6542.17a2c4da.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9779],{84065:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var t=s(74848),r=s(28453);const i={},a="OracleDB",c={id:"reference/Connectors/capture-connectors/OracleDB/OracleDB",title:"OracleDB",description:"This connector captures data from OracleDB into Flow collections using Oracle Logminer.",source:"@site/docs/reference/Connectors/capture-connectors/OracleDB/OracleDB.md",sourceDirName:"reference/Connectors/capture-connectors/OracleDB",slug:"/reference/Connectors/capture-connectors/OracleDB/",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/OracleDB/OracleDB.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Notion",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion"},next:{title:"OracleDB (Flashback)",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback"}},o={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Create a Dedicated User",id:"create-a-dedicated-user",level:3},{value:"Include Schemas for Discovery",id:"include-schemas-for-discovery",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Dictionary Modes",id:"dictionary-modes",level:3},{value:"Incremental SCN Range and Events Rate",id:"incremental-scn-range-and-events-rate",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2},{value:"Known Limitations",id:"known-limitations",level:2}];function l(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"oracledb",children:"OracleDB"}),"\n",(0,t.jsxs)(n.p,{children:["This connector captures data from OracleDB into Flow collections using ",(0,t.jsx)(n.a,{href:"https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-logminer-utility.html#GUID-2555A155-01E3-483E-9FC6-2BDC2D8A4093",children:"Oracle Logminer"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-oracle:dev"})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Oracle 11g or above"}),"\n",(0,t.jsx)(n.li,{children:"Allow connections from Estuary Flow to your Oracle database (if they exist in separate VPCs)"}),"\n",(0,t.jsx)(n.li,{children:"Create a dedicated read-only Estuary Flow user with access to all tables needed for replication"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsx)(n.p,{children:"Follow the steps below to set up the OracleDB connector."}),"\n",(0,t.jsx)(n.h3,{id:"create-a-dedicated-user",children:"Create a Dedicated User"}),"\n",(0,t.jsx)(n.p,{children:"Creating a dedicated database user with read-only access is recommended for better permission control and auditing."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"To create the user, run the following commands against your database:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE USER estuary_flow_user IDENTIFIED BY <your_password_here>;\nGRANT CREATE SESSION TO estuary_flow_user;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsx)(n.li,{children:"Next, grant the user read-only access to the relevant tables. The simplest way is to grant read access to all tables in the schema as follows:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"GRANT SELECT ANY TABLE TO estuary_flow_user;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsx)(n.li,{children:"Alternatively, you can be more granular and grant access to specific tables in different schemas:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:'GRANT SELECT ON "<schema_a>"."<table_1>" TO estuary_flow_user;\nGRANT SELECT ON "<schema_b>"."<table_2>" TO estuary_flow_user;\n'})}),"\n",(0,t.jsxs)(n.ol,{start:"4",children:["\n",(0,t.jsx)(n.li,{children:"Create a watermarks table:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE TABLE estuary_flow_user.FLOW_WATERMARKS(SLOT varchar(1000) PRIMARY KEY, WATERMARK varchar(4000));\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"5",children:["\n",(0,t.jsx)(n.li,{children:"Finally you need to grant the user access to use logminer, read metadata from the database and write to the watermarks table:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"GRANT SELECT_CATALOG_ROLE TO estuary_flow_user;\nGRANT EXECUTE_CATALOG_ROLE TO estuary_flow_user;\nGRANT SELECT ON V$DATABASE TO estuary_flow_user;\nGRANT SELECT ANY TABLE TO estuary_flow_user;\nGRANT SELECT ON V$LOG TO estuary_flow_user;\nGRANT LOGMINING TO estuary_flow_user;\n\nGRANT INSERT, UPDATE ON estuary_flow_user.FLOW_WATERMARKS TO estuary_flow_user;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"5",children:["\n",(0,t.jsx)(n.li,{children:"Enable supplemental logging:"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"For normal instances use:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;\n"})}),"\n",(0,t.jsx)(n.p,{children:"For Amazon RDS instances use:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"BEGIN rdsadmin.rdsadmin_util.alter_supplemental_logging(p_action => 'ADD', p_type => 'ALL'); end;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"6",children:["\n",(0,t.jsx)(n.li,{children:"Your database user should now be ready for use with Estuary Flow."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"include-schemas-for-discovery",children:"Include Schemas for Discovery"}),"\n",(0,t.jsx)(n.p,{children:"In your Oracle configuration, you can specify the schemas that Flow should look at when discovering tables. The schema names are case-sensitive. If the user does not have access to a certain schema, no tables from that schema will be discovered."}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See ",(0,t.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the OracleDB source connector."]}),"\n",(0,t.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Follow the guide to ",(0,t.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,t.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/address"})}),(0,t.jsx)(n.td,{children:"Address"}),(0,t.jsxs)(n.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/user"})}),(0,t.jsx)(n.td,{children:"Username"}),(0,t.jsx)(n.td,{children:"The database user to authenticate as."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/password"})}),(0,t.jsx)(n.td,{children:"Password"}),(0,t.jsx)(n.td,{children:"Password for the specified database user."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/database"})}),(0,t.jsx)(n.td,{children:"Database"}),(0,t.jsx)(n.td,{children:"Logical database name to capture from. Defaults to ORCL."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/historyMode"})}),(0,t.jsx)(n.td,{children:"History Mode"}),(0,t.jsx)(n.td,{children:"Capture change events without reducing them to a final state."}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/skip_backfills"})}),(0,t.jsx)(n.td,{children:"Skip Backfills"}),(0,t.jsx)(n.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/watermarksTable"})}),(0,t.jsx)(n.td,{children:"Watermarks Table"}),(0,t.jsx)(n.td,{children:"The name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.table' form."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"<USER>.FLOW_WATERMARKS"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,t.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,t.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"50000"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/incremental_chunk_size"})}),(0,t.jsx)(n.td,{children:"Incremental Chunk Size"}),(0,t.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single incremental query."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"10000"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/incremental_scn_range"})}),(0,t.jsx)(n.td,{children:"Incremental SCN Range"}),(0,t.jsx)(n.td,{children:"The SCN range captured at every iteration."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"50000"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/dictionary_mode"})}),(0,t.jsx)(n.td,{children:"Dictionary Mode"}),(0,t.jsx)(n.td,{children:"How should dictionaries be used in Logminer: one of online or extract. When using online mode schema changes to the table may break the capture but resource usage is limited. When using extract mode schema changes are handled gracefully but more resources of your database (including disk) are used by the process. Defaults to extract."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"extract"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/discover_schemas"})}),(0,t.jsx)(n.td,{children:"Discover Schemas"}),(0,t.jsx)(n.td,{children:"If this is specified only tables in the selected schema(s) will be automatically discovered. Omit all entries to discover tables from all schemas."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/node_id"})}),(0,t.jsx)(n.td,{children:"Node ID"}),(0,t.jsx)(n.td,{children:"Node ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/namespace"})})}),(0,t.jsx)(n.td,{children:"Namespace"}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.a,{href:"https://docs.oracle.com/database/121/CNCPT/intro.htm#CNCPT940",children:"owner/schema"})," of the table."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Table name."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-oracle:dev\n config:\n address: database-1.ukqdmzdqvvsz.us-east-2.rds.amazonaws.com:1521\n user: "flow_capture"\n password: secret\n database: ORCL\n historyMode: false\n advanced:\n incremental_scn_range: 50000\n dictionary_mode: extract\n networkTunnel:\n sshForwarding:\n privateKey: -----BEGIN RSA PRIVATE KEY-----\\n...\n sshEndpoint: ssh://ec2-user@19.220.21.33:22\n \n bindings:\n - resource:\n namespace: ${TABLE_NAMESPACE}\n stream: ${TABLE_NAME}\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"dictionary-modes",children:"Dictionary Modes"}),"\n",(0,t.jsxs)(n.p,{children:['Oracle writes redo log files using triplet object ID, data object ID and object versions to identify different objects in the database, rather than their name. This applies to table names as well as column names. When reading data from the redo log files using Logminer, a "dictionary" is used to translate the object identification data into user-facing names of those objects. When interacting with the database directly an ',(0,t.jsx)(n.em,{children:"online"})," dictionary, which is essentially the latest dictionary that knows how to translate currently existing table and column names is used by the database and by Logminer, however when capturing historical data, it is possible that the names of these objects or even their identifiers have changed (due to an ",(0,t.jsx)(n.code,{children:"ALTER TABLE"})," statement for example). In these instances the ",(0,t.jsx)(n.em,{children:"online"})," dictionary will be insufficient for translating the object identifiers into names and Logminer will complain about a dictionary mismatch."]}),"\n",(0,t.jsxs)(n.p,{children:["To resolve this issue, it is possible to ",(0,t.jsx)(n.em,{children:"extract"})," a dictionary into the redo log files themselves, so that when there are schema changes, Logminer can automatically handle using the appropriate dictionary for the time period an event is from. This operation however uses CPU and RAM, as well as consuming disk over time."]}),"\n",(0,t.jsx)(n.p,{children:"Using Estuary's Oracle connector you get to choose which mode to operate it:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["To extract the dictionary into the redo log files, the ",(0,t.jsx)(n.code,{children:"extract"})," mode can be used (this is the default mode). Be aware that this mode leads to more resource usage (CPU, RAM and disk)."]}),"\n",(0,t.jsxs)(n.li,{children:["To always use the online dictionary, the ",(0,t.jsx)(n.code,{children:"online"})," mode can be used. This mode is more efficient, but it cannot handle schema changes in tables, so only use this mode with caution and when table schemas are known not to change."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"incremental-scn-range-and-events-rate",children:"Incremental SCN Range and Events Rate"}),"\n",(0,t.jsxs)(n.p,{children:["At every iteration, the connector fetches changes in a specific SCN (System Change Number) range, this is roughly equivalent to a specific time range. Depending on how many events happen on the captured tables in a database (by default, a 50,000 range is captured in each iteration), the ",(0,t.jsx)(n.code,{children:"advanced.incremental_scn_range"})," option can be updated to fit your needs:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["If the database processes a large amount of events per unit of time, the connector and/or the database may experience resource shortages while trying to process the data. For example you may see the error ",(0,t.jsx)(n.code,{children:"PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT"})," which indicates that the memory usage of the database instance has hit a limit. This can happen if too many events are being processed in one iteration. In these cases we recommend lowering the SCN range until the database and the connector are able to handle the load."]}),"\n",(0,t.jsx)(n.li,{children:"If the database does not have many events per time unit, a higher value can help with faster processing, although this is usually not necessary."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"If you see the following error when trying to connect:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"ORA-01950: no privileges on tablespace 'USERS'\n"})}),"\n",(0,t.jsx)(n.p,{children:"The SQL command below may resolve the issue:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"ALTER USER estuary_flow_user QUOTA UNLIMITED ON USERS;\n"})}),"\n",(0,t.jsx)(n.h2,{id:"known-limitations",children:"Known Limitations"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Table and column names longer than 30 characters are not supported by Logminer, and thus they are also not supported by this connector."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>c});var t=s(96540);const r={},i=t.createContext(r);function a(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/3c6ed59c.234f75b7.js b/pr-preview/pr-1594/assets/js/3c6ed59c.234f75b7.js deleted file mode 100644 index 2d407b068b..0000000000 --- a/pr-preview/pr-1594/assets/js/3c6ed59c.234f75b7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4787],{30146:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>d});var t=i(74848),s=i(28453);const l={},o="Customize materialized fields",r={id:"guides/customize-materialization-fields",title:"Customize materialized fields",description:"When you first materialize a collection to an endpoint like a database or data warehouse,",source:"@site/docs/guides/customize-materialization-fields.md",sourceDirName:"guides",slug:"/guides/customize-materialization-fields",permalink:"/pr-preview/pr-1594/guides/customize-materialization-fields",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/customize-materialization-fields.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Configure connections with SSH tunneling",permalink:"/pr-preview/pr-1594/guides/connect-network"},next:{title:"Connecting to Estuary Flow from Kafka using Dekaf",permalink:"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka"}},c={},d=[{value:"Capture desired fields and generate projections",id:"capture-desired-fields-and-generate-projections",level:2},{value:"Captured collections",id:"captured-collections",level:3},{value:"Derived collections",id:"derived-collections",level:3},{value:"Include desired fields in your materialization",id:"include-desired-fields-in-your-materialization",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"customize-materialized-fields",children:"Customize materialized fields"}),"\n",(0,t.jsx)(n.p,{children:"When you first materialize a collection to an endpoint like a database or data warehouse,\nthe resulting table columns might not be formatted how you want.\nYou might notice missing columns, extra columns, or columns with names you don't like.\nThis happens when the collection's JSON schema doesn't map to a table schema appropriate for your use case."}),"\n",(0,t.jsx)(n.p,{children:"You can control the shape and appearance of materialized tables using a two-step process."}),"\n",(0,t.jsxs)(n.p,{children:["First, you modify the source collection ",(0,t.jsx)(n.strong,{children:"schema"}),".\nYou can change column names by adding ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections",children:"projections"})}),":\nJSON pointers that turn locations in a document's JSON structure into custom named fields."]}),"\n",(0,t.jsxs)(n.p,{children:["Then, you add the ",(0,t.jsx)(n.code,{children:"fields"})," stanza to the materialization specification, telling Flow which fields to materialize."]}),"\n",(0,t.jsx)(n.p,{children:"The following sections break down the process in more detail."}),"\n",(0,t.jsx)(n.admonition,{title:"Hint",type:"info",children:(0,t.jsxs)(n.p,{children:["If you just need to add a field that isn't included by default and it's already present in the schema\nwith a name you like, skip ahead to ",(0,t.jsx)(n.a,{href:"#include-desired-fields-in-your-materialization",children:"include desired fields in your materialization"}),"."]})}),"\n",(0,t.jsx)(n.h2,{id:"capture-desired-fields-and-generate-projections",children:"Capture desired fields and generate projections"}),"\n",(0,t.jsxs)(n.p,{children:["Any field you eventually want to materialize must be included in the collection's schema.\nIt's ok if the field is nested in the JSON structure; you'll flatten the structure with ",(0,t.jsx)(n.strong,{children:"projections"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsx)(n.p,{children:"In this workflow, you'll edit a collection. This change can impact other downstream materializations and derivations.\nUse caution and be mindful of any edit's consequences before publishing."})}),"\n",(0,t.jsx)(n.h3,{id:"captured-collections",children:"Captured collections"}),"\n",(0,t.jsx)(n.p,{children:"If the collection you're using was captured directly, follow these steps."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to the ",(0,t.jsx)(n.a,{href:"https://dashboard.estuary.dev/captures",children:"Captures"})," page of the Flow web app\nand locate the capture that produced the collection."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click the ",(0,t.jsx)(n.strong,{children:"Options"})," button and choose ",(0,t.jsx)(n.strong,{children:"Edit Specification"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Under ",(0,t.jsx)(n.strong,{children:"Output Collections"}),", choose the binding that corresponds to the collection.\nThen, click the ",(0,t.jsx)(n.strong,{children:"Collection"})," tab."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the list of fields, look for the fields you want to materialize.\nIf they're present and correctly named, you can skip to\n",(0,t.jsx)(n.a,{href:"#include-desired-fields-in-your-materialization",children:"including them in the materialization"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"hint:",type:"info",children:(0,t.jsx)(n.p,{children:"Compare the field name and pointer.\nFor nested pointers, you'll probably want to change the field name to omit slashes."})}),"\n",(0,t.jsxs)(n.ol,{start:"5",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If your desired fields aren't present or need to be re-named, edit the collection schema manually:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Edit"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add missing fields to the schema in the correct location based on the source data structure."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Close"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Generate projections for new or incorrectly named fields."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If available, click the ",(0,t.jsx)(n.strong,{children:"Schema Inference"})," button. The Schema Inference Window appears. Flow cleans up your schema and adds projections for new fields."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Manually change the names of projected fields. These names will be used by the materialization and shown in the endpoint system as column names or the equivalent."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Next"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["Schema Inference isn't available for all capture types.\nYou can also add projections manually with ",(0,t.jsx)(n.code,{children:"flowctl"}),".\nRefer to the guide to ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally",children:"editing with flowctl"})," and\n",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#projections",children:"how to format projections"}),"."]})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Repeat steps 3 through 6 with other collections, if necessary."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Save and Publish"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"derived-collections",children:"Derived collections"}),"\n",(0,t.jsx)(n.p,{children:"If the collection you're using came from a derivation, follow these steps."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally#pull-specifications-locally",children:"Pull the derived collection's specification locally"})," using ",(0,t.jsx)(n.code,{children:"flowctl"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"flowctl catalog pull-specs --name <yourOrg/full/collectionName>\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Review the collection's schema to see if the fields of interest are included. If they're present, you can skip to\n",(0,t.jsx)(n.a,{href:"#include-desired-fields-in-your-materialization",children:"including them in the materialization"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If your desired fields aren't present or are incorrectly named, add any missing fields to the schema in the correct location based on the source data structure."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Use schema inference to generate projections for the fields."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"flowctl preview --infer-schema --source <full\\path\\to\\flow.yaml> --collection <yourOrg/full/collectionName>\n\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"5",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Review the updated schema. Manually change the names of projected fields. These names will be used by the materialization and shown in the endpoint system as column names or the equivalent."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally#edit-source-files-and-re-publish-specifications",children:"Re-publish the collection specification"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"include-desired-fields-in-your-materialization",children:"Include desired fields in your materialization"}),"\n",(0,t.jsx)(n.p,{children:"Now that all your fields are present in the collection schema as projections,\nyou can choose which ones to include in the materialization."}),"\n",(0,t.jsx)(n.p,{children:"Every included field will be mapped to a table column or equivalent in the endpoint system."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If you haven't created the materialization, ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-materialization",children:"begin the process"}),". Pause once you've selected the collections to materialize."]}),"\n",(0,t.jsxs)(n.p,{children:["If your materialization already exists, navigate to the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/edit-data-flows#edit-a-materialization",children:"edit materialization"})," page."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the Collection Selector, choose the collection whose output fields you want to change. Click its ",(0,t.jsx)(n.strong,{children:"Collection"})," tab."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Review the listed field."}),"\n",(0,t.jsx)(n.p,{children:"In most cases, Flow automatically detects all fields to materialize, projected or otherwise. However, a projected field may still be missing, or you may want to exclude other fields."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If you want to make changes, click ",(0,t.jsx)(n.strong,{children:"Edit"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Use the editor to add the ",(0,t.jsx)(n.code,{children:"fields"})," stanza to the collection's binding specification."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsxs)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#projected-fields",children:["Learn more about configuring ",(0,t.jsx)(n.code,{children:"fields"})," and view a sample specification"]}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Choose whether to start with Flow's recommended fields. Under ",(0,t.jsx)(n.code,{children:"fields"}),", set ",(0,t.jsx)(n.code,{children:"recommended"})," to ",(0,t.jsx)(n.code,{children:"true"})," or ",(0,t.jsx)(n.code,{children:"false"}),". If you choose ",(0,t.jsx)(n.code,{children:"true"}),", you can exclude fields later."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.code,{children:"include"})," to add missing projections, or ",(0,t.jsx)(n.code,{children:"exclude"})," to remove fields."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Close"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Repeat steps 2 through 8 with other collections, if necessary."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Save and Publish"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"The named, included fields will be reflected in the endpoint system."})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>r});var t=i(96540);const s={},l=t.createContext(s);function o(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/3c711bdb.54e664af.js b/pr-preview/pr-1594/assets/js/3c711bdb.54e664af.js deleted file mode 100644 index 0d8a786179..0000000000 --- a/pr-preview/pr-1594/assets/js/3c711bdb.54e664af.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5934],{39260:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var t=i(74848),s=i(28453);const o={sidebar_position:3},r="Edit Data Flows in the web app",a={id:"guides/edit-data-flows",title:"Edit Data Flows in the web app",description:"You can edit existing captures, collection schemas, and materializations in the Flow web app.",source:"@site/docs/guides/edit-data-flows.md",sourceDirName:"guides",slug:"/guides/edit-data-flows",permalink:"/pr-preview/pr-1594/guides/edit-data-flows",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/edit-data-flows.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Amazon S3 to Snowflake",permalink:"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake"},next:{title:"flowctl guides",permalink:"/pr-preview/pr-1594/guides/flowctl/"}},c={},l=[{value:"Edit a capture",id:"edit-a-capture",level:2},{value:"Advanced editing",id:"advanced-editing",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"edit-data-flows-in-the-web-app",children:"Edit Data Flows in the web app"}),"\n",(0,t.jsxs)(n.p,{children:["You can edit existing captures, collection schemas, and materializations in the Flow web app.\nFor a tour of the web app, ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/web-app",children:"start here"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["There are separate workflows for editing ",(0,t.jsx)(n.a,{href:"#edit-a-capture",children:"captures"})," and ",(0,t.jsx)(n.a,{href:"#edit-a-materialization",children:"materializations"}),".\nYou can edit a collection schema using Flow's ",(0,t.jsx)(n.strong,{children:"Schema Inference"})," tool by editing either a capture or materialization associated\nwith that collection."]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsxs)(n.p,{children:["Although you edit components of your Data Flows separately, they are all connected.\nFlow's ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/evolutions",children:"schema evolution"})," and ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#automatically-update-captures",children:"AutoDiscover"})," features help prevent common errors, but it's still important to be mindful of your edits' potential effects."]})}),"\n",(0,t.jsx)(n.h2,{id:"edit-a-capture",children:"Edit a capture"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to the ",(0,t.jsx)(n.a,{href:"https://dashboard.estuary.dev/captures",children:"Sources page"})," of the web app."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Locate the capture you'd like to edit. Click the ",(0,t.jsx)(n.strong,{children:"Options"})," button in its table row, then click ",(0,t.jsx)(n.strong,{children:"Edit specification"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The Edit Capture page opens."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Edit the connection to the destination system, if desired. You can either update fields in the Endpoint Config section or manually update the JSON in the Advanced Specification Editor."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsx)(n.p,{children:"You may have to re-authenticate with the source system. Be sure to have current credentials on hand before editing the endpoint configuration."})}),"\n",(0,t.jsxs)(n.ol,{start:"4",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.strong,{children:"Output Collections"})," browser to add or remove collections from the capture, if desired."]}),"\n",(0,t.jsxs)(n.p,{children:["To refresh your connection with the source and see an updated list of possible collections, click the ",(0,t.jsx)(n.strong,{children:"Refresh"})," button,\nbut be aware that it will overwrite all existing collection selections."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.strong,{children:"Schema Inference"})," tool, if desired."]}),"\n",(0,t.jsx)(n.p,{children:"This option is available for source systems with permissive schemas, such as NoSQL databases and cloud storage.\nFlow can help you tighten up the schema to be used for downstream tasks in your Data Flow."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the Output Collections browser, choose a collection and click its ",(0,t.jsx)(n.strong,{children:"Collection"})," tab."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Schema Inference"})]}),"\n",(0,t.jsxs)(n.p,{children:["The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas#write-and-read-schemas",children:(0,t.jsx)(n.code,{children:"readSchema"})}),", to use for\ndownstream tasks like materializations and derivations."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Review the new schema and click ",(0,t.jsx)(n.strong,{children:"Apply Inferred Schema"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["When you're done making changes, click ",(0,t.jsx)(n.strong,{children:"Next."})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Save and Publish"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Editing a capture only affects how it will work going forward.\nData that was captured before editing will reflect the original configuration."}),"\n",(0,t.jsx)(n.h1,{id:"edit-a-materialization",children:"Edit a materialization"}),"\n",(0,t.jsx)(n.p,{children:"To edit a materialization:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to the ",(0,t.jsx)(n.a,{href:"https://dashboard.estuary.dev/materializations",children:"Destinations page"})," of the web app."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Locate the materialization you'd like to edit. Click the ",(0,t.jsx)(n.strong,{children:"Options"})," button in its table row, then click ",(0,t.jsx)(n.strong,{children:"Edit specification"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The Edit Materialization page opens."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Edit the connection to the destination system, if desired. You can either update fields in the Endpoint Config section or manually update the JSON in the Advanced Specification Editor."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsx)(n.p,{children:"You may have to re-authenticate with the destination system. Be sure to have current credentials on hand before editing the endpoint configuration."})}),"\n",(0,t.jsxs)(n.ol,{start:"4",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.strong,{children:"Source Collections"})," browser to add or remove collections from the materialization, if desired."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Optionally apply a stricter schema to each collection to use for the materialization."}),"\n",(0,t.jsx)(n.p,{children:"This option is available for collections captured from source systems with permissive schemas, such as NoSQL databases and cloud storage.\nFlow can help you tighten up the schema to be used for downstream tasks in your Data Flow."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the Source Collections browser, choose a collection and click its ",(0,t.jsx)(n.strong,{children:"Collection"})," tab."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Schema Inference"})]}),"\n",(0,t.jsxs)(n.p,{children:["The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas#write-and-read-schemas",children:(0,t.jsx)(n.code,{children:"readSchema"})}),", to use for the materialization."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Review the new schema and click ",(0,t.jsx)(n.strong,{children:"Apply Inferred Schema"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["When you're done making changes, click ",(0,t.jsx)(n.strong,{children:"Next."})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Save and Publish"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Editing a materialization only affects how it will work going forward.\nData that was materialized before editing will reflect the original configuration."}),"\n",(0,t.jsx)(n.h2,{id:"advanced-editing",children:"Advanced editing"}),"\n",(0,t.jsxs)(n.p,{children:["For more fine-grain control over editing, you can use flowctl and work directly on specification files in your local environment.\n",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally",children:"View the tutorial."})]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>a});var t=i(96540);const s={},o=t.createContext(s);function r(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/405f2d9a.b8852ea3.js b/pr-preview/pr-1594/assets/js/405f2d9a.b8852ea3.js deleted file mode 100644 index 24d4d1a4ad..0000000000 --- a/pr-preview/pr-1594/assets/js/405f2d9a.b8852ea3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4882],{8749:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>c,contentTitle:()=>a,default:()=>l,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var t=n(74848),s=n(28453);const i={description:"Using the merge reduction strategy",sidebar_position:3},a="merge",o={id:"reference/reduction-strategies/merge",title:"merge",description:"Using the merge reduction strategy",source:"@site/docs/reference/reduction-strategies/merge.md",sourceDirName:"reference/reduction-strategies",slug:"/reference/reduction-strategies/merge",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/merge",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/reduction-strategies/merge.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{description:"Using the merge reduction strategy",sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"firstWriteWins and lastWriteWins",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins"},next:{title:"minimize and maximize",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize"}},c={},d=[];function m(e){const r={code:"code",em:"em",h1:"h1",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"merge",children:"merge"}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.code,{children:"merge"})," reduces the left-hand side and right-hand side by recursively reducing shared document locations. The LHS and RHS must either both be objects, or both be arrays."]}),"\n",(0,t.jsxs)(r.p,{children:["If both sides are objects, ",(0,t.jsx)(r.code,{children:"merge"})," performs a deep merge of each property. If LHS and RHS are both arrays, items at each index of both sides are merged together, extending the shorter of the two sides by taking items off the longer:"]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:'collections:\n - name: example/reductions/merge\n schema:\n type: object\n reduce: { strategy: merge }\n properties:\n key: { type: string }\n value:\n # Merge only works with types "array" or "object".\n # Others will throw an error at build time.\n type: [array, object]\n reduce: { strategy: merge }\n # Deeply merge sub-locations (items or properties) by summing them.\n items:\n type: number\n reduce: { strategy: sum }\n additionalProperties:\n type: number\n reduce: { strategy: sum }\n required: [key]\n key: [/key]\n\ntests:\n "Expect we can merge arrays by index":\n - ingest:\n collection: example/reductions/merge\n documents:\n - { key: "key", value: [1, 1] }\n - { key: "key", value: [2, 2, 2] }\n - verify:\n collection: example/reductions/merge\n documents:\n - { key: "key", value: [3, 3, 2] }\n\n "Expect we can merge objects by property":\n - ingest:\n collection: example/reductions/merge\n documents:\n - { key: "key", value: { "a": 1, "b": 1 } }\n - { key: "key", value: { "a": 1, "c": 1 } }\n - verify:\n collection: example/reductions/merge\n documents:\n - { key: "key", value: { "a": 2, "b": 1, "c": 1 } }\n'})}),"\n",(0,t.jsxs)(r.p,{children:["Merge may also take a ",(0,t.jsx)(r.code,{children:"key"}),", which is one or more JSON pointers that are relative to the reduced location. If both sides are arrays and a merge key is present, then a deep sorted merge of the respective items is done, as ordered by the key. Arrays must be pre-sorted and de-duplicated by the key, and ",(0,t.jsx)(r.code,{children:"merge"})," itself always maintains this invariant."]}),"\n",(0,t.jsx)(r.p,{children:"Note that you can use a key of [\u201c\u201d] for natural item ordering, such as merging sorted arrays of scalars."}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:'collections:\n - name: example/reductions/merge-key\n schema:\n type: object\n reduce: { strategy: merge }\n properties:\n key: { type: string }\n value:\n type: array\n reduce:\n strategy: merge\n key: [/k]\n items: { reduce: { strategy: firstWriteWins } }\n required: [key]\n key: [/key]\n\ntests:\n "Expect we can merge sorted arrays":\n - ingest:\n collection: example/reductions/merge-key\n documents:\n - { key: "key", value: [{ k: "a", v: 1 }, { k: "b", v: 1 }] }\n - { key: "key", value: [{ k: "a", v: 2 }, { k: "c", v: 2 }] }\n - verify:\n collection: example/reductions/merge-key\n documents:\n - {\n key: "key",\n value: [{ k: "a", v: 1 }, { k: "b", v: 1 }, { k: "c", v: 2 }],\n }\n'})}),"\n",(0,t.jsxs)(r.p,{children:["As with ",(0,t.jsx)(r.code,{children:"append"}),", the LHS of ",(0,t.jsx)(r.code,{children:"merge"})," ",(0,t.jsx)(r.em,{children:"may"})," be null, in which case the reduction is treated as a no-op and its result remains null."]})]})}function l(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(m,{...e})}):m(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>a,x:()=>o});var t=n(96540);const s={},i=t.createContext(s);function a(e){const r=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4132.adc4137b.js b/pr-preview/pr-1594/assets/js/4132.adc4137b.js deleted file mode 100644 index e91abe886d..0000000000 --- a/pr-preview/pr-1594/assets/js/4132.adc4137b.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[4132],{14744:e=>{"use strict";var t=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===r}(e)}(e)};var r="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function n(e,t){return!1!==t.clone&&t.isMergeableObject(e)?s((r=e,Array.isArray(r)?[]:{}),e,t):e;var r}function a(e,t,r){return e.concat(t).map((function(e){return n(e,r)}))}function o(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function i(e,t){try{return t in e}catch(r){return!1}}function l(e,t,r){var a={};return r.isMergeableObject(e)&&o(e).forEach((function(t){a[t]=n(e[t],r)})),o(t).forEach((function(o){(function(e,t){return i(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,o)||(i(e,o)&&r.isMergeableObject(t[o])?a[o]=function(e,t){if(!t.customMerge)return s;var r=t.customMerge(e);return"function"==typeof r?r:s}(o,r)(e[o],t[o],r):a[o]=n(t[o],r))})),a}function s(e,r,o){(o=o||{}).arrayMerge=o.arrayMerge||a,o.isMergeableObject=o.isMergeableObject||t,o.cloneUnlessOtherwiseSpecified=n;var i=Array.isArray(r);return i===Array.isArray(e)?i?o.arrayMerge(e,r,o):l(e,r,o):n(r,o)}s.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,r){return s(e,r,t)}),{})};var u=s;e.exports=u},6147:e=>{function t(e,t){e.onload=function(){this.onerror=this.onload=null,t(null,e)},e.onerror=function(){this.onerror=this.onload=null,t(new Error("Failed to load "+this.src),e)}}function r(e,t){e.onreadystatechange=function(){"complete"!=this.readyState&&"loaded"!=this.readyState||(this.onreadystatechange=null,t(null,e))}}e.exports=function(e,n,a){var o=document.head||document.getElementsByTagName("head")[0],i=document.createElement("script");"function"==typeof n&&(a=n,n={}),n=n||{},a=a||function(){},i.type=n.type||"text/javascript",i.charset=n.charset||"utf8",i.async=!("async"in n)||!!n.async,i.src=e,n.attrs&&function(e,t){for(var r in t)e.setAttribute(r,t[r])}(i,n.attrs),n.text&&(i.text=""+n.text),("onload"in i?t:r)(i,a),i.onload||t(i,a),o.appendChild(i)}},41811:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=Number.isNaN||function(e){return"number"==typeof e&&e!=e};function a(e,t){if(e.length!==t.length)return!1;for(var r=0;r<e.length;r++)if(a=e[r],o=t[r],!(a===o||n(a)&&n(o)))return!1;var a,o;return!0}const o=function(e,t){var r;void 0===t&&(t=a);var n,o=[],i=!1;return function(){for(var a=[],l=0;l<arguments.length;l++)a[l]=arguments[l];return i&&r===this&&t(a,o)||(n=e.apply(this,a),i=!0,r=this,o=a),n}}},88021:(e,t,r)=>{var n,a=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,s=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,c=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of l(t))u.call(e,a)||a===r||o(e,a,{get:()=>t[a],enumerable:!(n=i(t,a))||n.enumerable});return e},d=(e,t,r)=>(r=null!=e?a(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)),p=(e,t,r)=>(((e,t,r)=>{t in e?o(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r})(e,"symbol"!=typeof t?t+"":t,r),r),y={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(y,{default:()=>P}),e.exports=(n=y,c(o({},"__esModule",{value:!0}),n));var h=d(r(96540)),f=d(r(30115)),m=r(7604),b=r(75635);class P extends h.Component{constructor(){super(...arguments),p(this,"mounted",!1),p(this,"isReady",!1),p(this,"isPlaying",!1),p(this,"isLoading",!0),p(this,"loadOnReady",null),p(this,"startOnPlay",!0),p(this,"seekOnPlay",null),p(this,"onDurationCalled",!1),p(this,"handlePlayerMount",(e=>{this.player||(this.player=e,this.player.load(this.props.url)),this.progress()})),p(this,"getInternalPlayer",(e=>this.player?this.player[e]:null)),p(this,"progress",(()=>{if(this.props.url&&this.player&&this.isReady){const e=this.getCurrentTime()||0,t=this.getSecondsLoaded(),r=this.getDuration();if(r){const n={playedSeconds:e,played:e/r};null!==t&&(n.loadedSeconds=t,n.loaded=t/r),n.playedSeconds===this.prevPlayed&&n.loadedSeconds===this.prevLoaded||this.props.onProgress(n),this.prevPlayed=n.playedSeconds,this.prevLoaded=n.loadedSeconds}}this.progressTimeout=setTimeout(this.progress,this.props.progressFrequency||this.props.progressInterval)})),p(this,"handleReady",(()=>{if(!this.mounted)return;this.isReady=!0,this.isLoading=!1;const{onReady:e,playing:t,volume:r,muted:n}=this.props;e(),n||null===r||this.player.setVolume(r),this.loadOnReady?(this.player.load(this.loadOnReady,!0),this.loadOnReady=null):t&&this.player.play(),this.handleDurationCheck()})),p(this,"handlePlay",(()=>{this.isPlaying=!0,this.isLoading=!1;const{onStart:e,onPlay:t,playbackRate:r}=this.props;this.startOnPlay&&(this.player.setPlaybackRate&&1!==r&&this.player.setPlaybackRate(r),e(),this.startOnPlay=!1),t(),this.seekOnPlay&&(this.seekTo(this.seekOnPlay),this.seekOnPlay=null),this.handleDurationCheck()})),p(this,"handlePause",(e=>{this.isPlaying=!1,this.isLoading||this.props.onPause(e)})),p(this,"handleEnded",(()=>{const{activePlayer:e,loop:t,onEnded:r}=this.props;e.loopOnEnded&&t&&this.seekTo(0),t||(this.isPlaying=!1,r())})),p(this,"handleError",((...e)=>{this.isLoading=!1,this.props.onError(...e)})),p(this,"handleDurationCheck",(()=>{clearTimeout(this.durationCheckTimeout);const e=this.getDuration();e?this.onDurationCalled||(this.props.onDuration(e),this.onDurationCalled=!0):this.durationCheckTimeout=setTimeout(this.handleDurationCheck,100)})),p(this,"handleLoaded",(()=>{this.isLoading=!1}))}componentDidMount(){this.mounted=!0}componentWillUnmount(){clearTimeout(this.progressTimeout),clearTimeout(this.durationCheckTimeout),this.isReady&&this.props.stopOnUnmount&&(this.player.stop(),this.player.disablePIP&&this.player.disablePIP()),this.mounted=!1}componentDidUpdate(e){if(!this.player)return;const{url:t,playing:r,volume:n,muted:a,playbackRate:o,pip:i,loop:l,activePlayer:s,disableDeferredLoading:u}=this.props;if(!(0,f.default)(e.url,t)){if(this.isLoading&&!s.forceLoad&&!u&&!(0,b.isMediaStream)(t))return console.warn(`ReactPlayer: the attempt to load ${t} is being deferred until the player has loaded`),void(this.loadOnReady=t);this.isLoading=!0,this.startOnPlay=!0,this.onDurationCalled=!1,this.player.load(t,this.isReady)}e.playing||!r||this.isPlaying||this.player.play(),e.playing&&!r&&this.isPlaying&&this.player.pause(),!e.pip&&i&&this.player.enablePIP&&this.player.enablePIP(),e.pip&&!i&&this.player.disablePIP&&this.player.disablePIP(),e.volume!==n&&null!==n&&this.player.setVolume(n),e.muted!==a&&(a?this.player.mute():(this.player.unmute(),null!==n&&setTimeout((()=>this.player.setVolume(n))))),e.playbackRate!==o&&this.player.setPlaybackRate&&this.player.setPlaybackRate(o),e.loop!==l&&this.player.setLoop&&this.player.setLoop(l)}getDuration(){return this.isReady?this.player.getDuration():null}getCurrentTime(){return this.isReady?this.player.getCurrentTime():null}getSecondsLoaded(){return this.isReady?this.player.getSecondsLoaded():null}seekTo(e,t,r){if(!this.isReady)return void(0!==e&&(this.seekOnPlay=e,setTimeout((()=>{this.seekOnPlay=null}),5e3)));if(t?"fraction"===t:e>0&&e<1){const t=this.player.getDuration();return t?void this.player.seekTo(t*e,r):void console.warn("ReactPlayer: could not seek using fraction \u2013\xa0duration not yet available")}this.player.seekTo(e,r)}render(){const e=this.props.activePlayer;return e?h.default.createElement(e,{...this.props,onMount:this.handlePlayerMount,onReady:this.handleReady,onPlay:this.handlePlay,onPause:this.handlePause,onEnded:this.handleEnded,onLoaded:this.handleLoaded,onError:this.handleError}):null}}p(P,"displayName","Player"),p(P,"propTypes",m.propTypes),p(P,"defaultProps",m.defaultProps)},15580:(e,t,r)=>{var n,a=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,s=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,c=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of l(t))u.call(e,a)||a===r||o(e,a,{get:()=>t[a],enumerable:!(n=i(t,a))||n.enumerable});return e},d=(e,t,r)=>(r=null!=e?a(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)),p=(e,t,r)=>(((e,t,r)=>{t in e?o(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r})(e,"symbol"!=typeof t?t+"":t,r),r),y={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(y,{createReactPlayer:()=>S}),e.exports=(n=y,c(o({},"__esModule",{value:!0}),n));var h=d(r(96540)),f=d(r(14744)),m=d(r(41811)),b=d(r(30115)),P=r(7604),g=r(75635),w=d(r(88021));const v=(0,g.lazy)((()=>r.e(6353).then(r.t.bind(r,66734,23)))),O="undefined"!=typeof window&&window.document&&"undefined"!=typeof document,k=void 0!==r.g&&r.g.window&&r.g.window.document,_=Object.keys(P.propTypes),T=O||k?h.Suspense:()=>null,j=[],S=(e,t)=>{var r;return r=class extends h.Component{constructor(){super(...arguments),p(this,"state",{showPreview:!!this.props.light}),p(this,"references",{wrapper:e=>{this.wrapper=e},player:e=>{this.player=e}}),p(this,"handleClickPreview",(e=>{this.setState({showPreview:!1}),this.props.onClickPreview(e)})),p(this,"showPreview",(()=>{this.setState({showPreview:!0})})),p(this,"getDuration",(()=>this.player?this.player.getDuration():null)),p(this,"getCurrentTime",(()=>this.player?this.player.getCurrentTime():null)),p(this,"getSecondsLoaded",(()=>this.player?this.player.getSecondsLoaded():null)),p(this,"getInternalPlayer",((e="player")=>this.player?this.player.getInternalPlayer(e):null)),p(this,"seekTo",((e,t,r)=>{if(!this.player)return null;this.player.seekTo(e,t,r)})),p(this,"handleReady",(()=>{this.props.onReady(this)})),p(this,"getActivePlayer",(0,m.default)((r=>{for(const t of[...j,...e])if(t.canPlay(r))return t;return t||null}))),p(this,"getConfig",(0,m.default)(((e,t)=>{const{config:r}=this.props;return f.default.all([P.defaultProps.config,P.defaultProps.config[t]||{},r,r[t]||{}])}))),p(this,"getAttributes",(0,m.default)((e=>(0,g.omit)(this.props,_)))),p(this,"renderActivePlayer",(e=>{if(!e)return null;const t=this.getActivePlayer(e);if(!t)return null;const r=this.getConfig(e,t.key);return h.default.createElement(w.default,{...this.props,key:t.key,ref:this.references.player,config:r,activePlayer:t.lazyPlayer||t,onReady:this.handleReady})}))}shouldComponentUpdate(e,t){return!(0,b.default)(this.props,e)||!(0,b.default)(this.state,t)}componentDidUpdate(e){const{light:t}=this.props;!e.light&&t&&this.setState({showPreview:!0}),e.light&&!t&&this.setState({showPreview:!1})}renderPreview(e){if(!e)return null;const{light:t,playIcon:r,previewTabIndex:n,oEmbedUrl:a,previewAriaLabel:o}=this.props;return h.default.createElement(v,{url:e,light:t,playIcon:r,previewTabIndex:n,previewAriaLabel:o,oEmbedUrl:a,onClick:this.handleClickPreview})}render(){const{url:e,style:t,width:r,height:n,fallback:a,wrapper:o}=this.props,{showPreview:i}=this.state,l=this.getAttributes(e),s="string"==typeof o?this.references.wrapper:void 0;return h.default.createElement(o,{ref:s,style:{...t,width:r,height:n},...l},h.default.createElement(T,{fallback:a},i?this.renderPreview(e):this.renderActivePlayer(e)))}},p(r,"displayName","ReactPlayer"),p(r,"propTypes",P.propTypes),p(r,"defaultProps",P.defaultProps),p(r,"addCustomPlayer",(e=>{j.push(e)})),p(r,"removeCustomPlayers",(()=>{j.length=0})),p(r,"canPlay",(t=>{for(const r of[...j,...e])if(r.canPlay(t))return!0;return!1})),p(r,"canEnablePIP",(t=>{for(const r of[...j,...e])if(r.canEnablePIP&&r.canEnablePIP(t))return!0;return!1})),r}},13554:(e,t,r)=>{var n,a=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,s=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,c=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of l(t))u.call(e,a)||a===r||o(e,a,{get:()=>t[a],enumerable:!(n=i(t,a))||n.enumerable});return e},d={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(d,{default:()=>f}),e.exports=(n=d,c(o({},"__esModule",{value:!0}),n));var p=((e,t,r)=>(r=null!=e?a(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)))(r(97015)),y=r(15580);const h=p.default[p.default.length-1];var f=(0,y.createReactPlayer)(p.default,h)},50327:(e,t,r)=>{var n,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,l=Object.prototype.hasOwnProperty,s={};((e,t)=>{for(var r in t)a(e,r,{get:t[r],enumerable:!0})})(s,{AUDIO_EXTENSIONS:()=>_,DASH_EXTENSIONS:()=>S,FLV_EXTENSIONS:()=>E,HLS_EXTENSIONS:()=>j,MATCH_URL_DAILYMOTION:()=>w,MATCH_URL_FACEBOOK:()=>h,MATCH_URL_FACEBOOK_WATCH:()=>f,MATCH_URL_KALTURA:()=>k,MATCH_URL_MIXCLOUD:()=>v,MATCH_URL_MUX:()=>y,MATCH_URL_SOUNDCLOUD:()=>d,MATCH_URL_STREAMABLE:()=>m,MATCH_URL_TWITCH_CHANNEL:()=>g,MATCH_URL_TWITCH_VIDEO:()=>P,MATCH_URL_VIDYARD:()=>O,MATCH_URL_VIMEO:()=>p,MATCH_URL_WISTIA:()=>b,MATCH_URL_YOUTUBE:()=>c,VIDEO_EXTENSIONS:()=>T,canPlay:()=>I}),e.exports=(n=s,((e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of i(t))l.call(e,s)||s===r||a(e,s,{get:()=>t[s],enumerable:!(n=o(t,s))||n.enumerable});return e})(a({},"__esModule",{value:!0}),n));var u=r(75635);const c=/(?:youtu\.be\/|youtube(?:-nocookie|education)?\.com\/(?:embed\/|v\/|watch\/|watch\?v=|watch\?.+&v=|shorts\/|live\/))((\w|-){11})|youtube\.com\/playlist\?list=|youtube\.com\/user\//,d=/(?:soundcloud\.com|snd\.sc)\/[^.]+$/,p=/vimeo\.com\/(?!progressive_redirect).+/,y=/stream\.mux\.com\/(?!\w+\.m3u8)(\w+)/,h=/^https?:\/\/(www\.)?facebook\.com.*\/(video(s)?|watch|story)(\.php?|\/).+$/,f=/^https?:\/\/fb\.watch\/.+$/,m=/streamable\.com\/([a-z0-9]+)$/,b=/(?:wistia\.(?:com|net)|wi\.st)\/(?:medias|embed)\/(?:iframe\/)?([^?]+)/,P=/(?:www\.|go\.)?twitch\.tv\/videos\/(\d+)($|\?)/,g=/(?:www\.|go\.)?twitch\.tv\/([a-zA-Z0-9_]+)($|\?)/,w=/^(?:(?:https?):)?(?:\/\/)?(?:www\.)?(?:(?:dailymotion\.com(?:\/embed)?\/video)|dai\.ly)\/([a-zA-Z0-9]+)(?:_[\w_-]+)?(?:[\w.#_-]+)?/,v=/mixcloud\.com\/([^/]+\/[^/]+)/,O=/vidyard.com\/(?:watch\/)?([a-zA-Z0-9-_]+)/,k=/^https?:\/\/[a-zA-Z]+\.kaltura.(com|org)\/p\/([0-9]+)\/sp\/([0-9]+)00\/embedIframeJs\/uiconf_id\/([0-9]+)\/partner_id\/([0-9]+)(.*)entry_id.([a-zA-Z0-9-_].*)$/,_=/\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\?)/i,T=/\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\d+]+)?($|\?)/i,j=/\.(m3u8)($|\?)/i,S=/\.(mpd)($|\?)/i,E=/\.(flv)($|\?)/i,C=e=>{if(e instanceof Array){for(const t of e){if("string"==typeof t&&C(t))return!0;if(C(t.src))return!0}return!1}return!(!(0,u.isMediaStream)(e)&&!(0,u.isBlobUrl)(e))||(_.test(e)||T.test(e)||j.test(e)||S.test(e)||E.test(e))},I={youtube:e=>e instanceof Array?e.every((e=>c.test(e))):c.test(e),soundcloud:e=>d.test(e)&&!_.test(e),vimeo:e=>p.test(e)&&!T.test(e)&&!j.test(e),mux:e=>y.test(e),facebook:e=>h.test(e)||f.test(e),streamable:e=>m.test(e),wistia:e=>b.test(e),twitch:e=>P.test(e)||g.test(e),dailymotion:e=>w.test(e),mixcloud:e=>v.test(e),vidyard:e=>O.test(e),kaltura:e=>k.test(e),file:C}},97015:(e,t,r)=>{Object.create;var n,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,l=(Object.getPrototypeOf,Object.prototype.hasOwnProperty),s=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of i(t))l.call(e,s)||s===r||a(e,s,{get:()=>t[s],enumerable:!(n=o(t,s))||n.enumerable});return e},u={};((e,t)=>{for(var r in t)a(e,r,{get:t[r],enumerable:!0})})(u,{default:()=>p}),e.exports=(n=u,s(a({},"__esModule",{value:!0}),n));var c=r(75635),d=r(50327),p=[{key:"youtube",name:"YouTube",canPlay:d.canPlay.youtube,lazyPlayer:(0,c.lazy)((()=>r.e(8446).then(r.t.bind(r,82910,23))))},{key:"soundcloud",name:"SoundCloud",canPlay:d.canPlay.soundcloud,lazyPlayer:(0,c.lazy)((()=>r.e(9979).then(r.t.bind(r,93127,23))))},{key:"vimeo",name:"Vimeo",canPlay:d.canPlay.vimeo,lazyPlayer:(0,c.lazy)((()=>r.e(6173).then(r.t.bind(r,91423,23))))},{key:"mux",name:"Mux",canPlay:d.canPlay.mux,lazyPlayer:(0,c.lazy)((()=>r.e(2723).then(r.t.bind(r,47553,23))))},{key:"facebook",name:"Facebook",canPlay:d.canPlay.facebook,lazyPlayer:(0,c.lazy)((()=>r.e(6887).then(r.t.bind(r,61343,23))))},{key:"streamable",name:"Streamable",canPlay:d.canPlay.streamable,lazyPlayer:(0,c.lazy)((()=>r.e(7627).then(r.t.bind(r,9643,23))))},{key:"wistia",name:"Wistia",canPlay:d.canPlay.wistia,lazyPlayer:(0,c.lazy)((()=>r.e(9340).then(r.t.bind(r,23330,23))))},{key:"twitch",name:"Twitch",canPlay:d.canPlay.twitch,lazyPlayer:(0,c.lazy)((()=>r.e(2042).then(r.t.bind(r,21400,23))))},{key:"dailymotion",name:"DailyMotion",canPlay:d.canPlay.dailymotion,lazyPlayer:(0,c.lazy)((()=>r.e(6328).then(r.t.bind(r,39348,23))))},{key:"mixcloud",name:"Mixcloud",canPlay:d.canPlay.mixcloud,lazyPlayer:(0,c.lazy)((()=>r.e(7570).then(r.t.bind(r,3276,23))))},{key:"vidyard",name:"Vidyard",canPlay:d.canPlay.vidyard,lazyPlayer:(0,c.lazy)((()=>r.e(3392).then(r.t.bind(r,53552,23))))},{key:"kaltura",name:"Kaltura",canPlay:d.canPlay.kaltura,lazyPlayer:(0,c.lazy)((()=>r.e(6463).then(r.t.bind(r,97945,23))))},{key:"file",name:"FilePlayer",canPlay:d.canPlay.file,canEnablePIP:e=>d.canPlay.file(e)&&(document.pictureInPictureEnabled||(0,c.supportsWebKitPresentationMode)())&&!d.AUDIO_EXTENSIONS.test(e),lazyPlayer:(0,c.lazy)((()=>r.e(7458).then(r.t.bind(r,20688,23))))}]},7604:(e,t,r)=>{var n,a=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,s=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,c=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of l(t))u.call(e,a)||a===r||o(e,a,{get:()=>t[a],enumerable:!(n=i(t,a))||n.enumerable});return e},d={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(d,{defaultProps:()=>_,propTypes:()=>O}),e.exports=(n=d,c(o({},"__esModule",{value:!0}),n));var p=((e,t,r)=>(r=null!=e?a(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)))(r(5556));const{string:y,bool:h,number:f,array:m,oneOfType:b,shape:P,object:g,func:w,node:v}=p.default,O={url:b([y,m,g]),playing:h,loop:h,controls:h,volume:f,muted:h,playbackRate:f,width:b([y,f]),height:b([y,f]),style:g,progressInterval:f,playsinline:h,pip:h,stopOnUnmount:h,light:b([h,y,g]),playIcon:v,previewTabIndex:f,previewAriaLabel:y,fallback:v,oEmbedUrl:y,wrapper:b([y,w,P({render:w.isRequired})]),config:P({soundcloud:P({options:g}),youtube:P({playerVars:g,embedOptions:g,onUnstarted:w}),facebook:P({appId:y,version:y,playerId:y,attributes:g}),dailymotion:P({params:g}),vimeo:P({playerOptions:g,title:y}),mux:P({attributes:g,version:y}),file:P({attributes:g,tracks:m,forceVideo:h,forceAudio:h,forceHLS:h,forceSafariHLS:h,forceDisableHls:h,forceDASH:h,forceFLV:h,hlsOptions:g,hlsVersion:y,dashVersion:y,flvVersion:y}),wistia:P({options:g,playerId:y,customControls:m}),mixcloud:P({options:g}),twitch:P({options:g,playerId:y}),vidyard:P({options:g})}),onReady:w,onStart:w,onPlay:w,onPause:w,onBuffer:w,onBufferEnd:w,onEnded:w,onError:w,onDuration:w,onSeek:w,onPlaybackRateChange:w,onPlaybackQualityChange:w,onProgress:w,onClickPreview:w,onEnablePIP:w,onDisablePIP:w},k=()=>{},_={playing:!1,loop:!1,controls:!1,volume:null,muted:!1,playbackRate:1,width:"640px",height:"360px",style:{},progressInterval:1e3,playsinline:!1,pip:!1,stopOnUnmount:!0,light:!1,fallback:null,wrapper:"div",previewTabIndex:0,previewAriaLabel:"",oEmbedUrl:"https://noembed.com/embed?url={url}",config:{soundcloud:{options:{visual:!0,buying:!1,liking:!1,download:!1,sharing:!1,show_comments:!1,show_playcount:!1}},youtube:{playerVars:{playsinline:1,showinfo:0,rel:0,iv_load_policy:3,modestbranding:1},embedOptions:{},onUnstarted:k},facebook:{appId:"1309697205772819",version:"v3.3",playerId:null,attributes:{}},dailymotion:{params:{api:1,"endscreen-enable":!1}},vimeo:{playerOptions:{autopause:!1,byline:!1,portrait:!1,title:!1},title:null},mux:{attributes:{},version:"2"},file:{attributes:{},tracks:[],forceVideo:!1,forceAudio:!1,forceHLS:!1,forceDASH:!1,forceFLV:!1,hlsOptions:{},hlsVersion:"1.1.4",dashVersion:"3.1.3",flvVersion:"1.5.0",forceDisableHls:!1},wistia:{options:{},playerId:null,customControls:null},mixcloud:{options:{hide_cover:1}},twitch:{options:{},playerId:null},vidyard:{options:{}}},onReady:k,onStart:k,onPlay:k,onPause:k,onBuffer:k,onBufferEnd:k,onEnded:k,onError:k,onDuration:k,onSeek:k,onPlaybackRateChange:k,onPlaybackQualityChange:k,onProgress:k,onClickPreview:k,onEnablePIP:k,onDisablePIP:k}},75635:(e,t,r)=>{var n,a=Object.create,o=Object.defineProperty,i=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,s=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,c=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of l(t))u.call(e,a)||a===r||o(e,a,{get:()=>t[a],enumerable:!(n=i(t,a))||n.enumerable});return e},d=(e,t,r)=>(r=null!=e?a(s(e)):{},c(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)),p={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(p,{callPlayer:()=>R,getConfig:()=>C,getSDK:()=>E,isBlobUrl:()=>M,isMediaStream:()=>A,lazy:()=>m,omit:()=>I,parseEndTime:()=>k,parseStartTime:()=>O,queryString:()=>T,randomString:()=>_,supportsWebKitPresentationMode:()=>L}),e.exports=(n=p,c(o({},"__esModule",{value:!0}),n));var y=d(r(96540)),h=d(r(6147)),f=d(r(14744));const m=e=>y.default.lazy((async()=>{const t=await e();return"function"==typeof t.default?t:t.default})),b=/[?&#](?:start|t)=([0-9hms]+)/,P=/[?&#]end=([0-9hms]+)/,g=/(\d+)(h|m|s)/g,w=/^\d+$/;function v(e,t){if(e instanceof Array)return;const r=e.match(t);if(r){const e=r[1];if(e.match(g))return function(e){let t=0,r=g.exec(e);for(;null!==r;){const[,n,a]=r;"h"===a&&(t+=60*parseInt(n,10)*60),"m"===a&&(t+=60*parseInt(n,10)),"s"===a&&(t+=parseInt(n,10)),r=g.exec(e)}return t}(e);if(w.test(e))return parseInt(e)}}function O(e){return v(e,b)}function k(e){return v(e,P)}function _(){return Math.random().toString(36).substr(2,5)}function T(e){return Object.keys(e).map((t=>`${t}=${e[t]}`)).join("&")}function j(e){return window[e]?window[e]:window.exports&&window.exports[e]?window.exports[e]:window.module&&window.module.exports&&window.module.exports[e]?window.module.exports[e]:null}const S={},E=function(e){0;return e}((function(e,t,r=null,n=(()=>!0),a=h.default){const o=j(t);return o&&n(o)?Promise.resolve(o):new Promise(((n,o)=>{if(S[e])return void S[e].push({resolve:n,reject:o});S[e]=[{resolve:n,reject:o}];const i=t=>{S[e].forEach((e=>e.resolve(t)))};if(r){const e=window[r];window[r]=function(){e&&e(),i(j(t))}}a(e,(n=>{n?(S[e].forEach((e=>e.reject(n))),S[e]=null):r||i(j(t))}))}))}));function C(e,t){return(0,f.default)(t.config,e.config)}function I(e,...t){const r=[].concat(...t),n={},a=Object.keys(e);for(const o of a)-1===r.indexOf(o)&&(n[o]=e[o]);return n}function R(e,...t){if(!this.player||!this.player[e]){let t=`ReactPlayer: ${this.constructor.displayName} player could not call %c${e}%c \u2013 `;return this.player?this.player[e]||(t+="The method was not available"):t+="The player was not available",console.warn(t,"font-weight: bold",""),null}return this.player[e](...t)}function A(e){return"undefined"!=typeof window&&void 0!==window.MediaStream&&e instanceof window.MediaStream}function M(e){return/^blob:/.test(e)}function L(e=document.createElement("video")){const t=!1===/iPhone|iPod/.test(navigator.userAgent);return e.webkitSupportsPresentationMode&&"function"==typeof e.webkitSetPresentationMode&&t}},28453:(e,t,r)=>{"use strict";r.d(t,{R:()=>i,x:()=>l});var n=r(96540);const a={},o=n.createContext(a);function i(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4162.aab6f778.js b/pr-preview/pr-1594/assets/js/4162.aab6f778.js deleted file mode 100644 index fc272c6c12..0000000000 --- a/pr-preview/pr-1594/assets/js/4162.aab6f778.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4162],{75937:(e,t,i)=>{i.d(t,{A:()=>r});var s=i(72453),n=i(74886);const r=(e,t)=>s.A.lang.round(n.A.parse(e)[t])},50053:(e,t,i)=>{i.d(t,{A:()=>n});var s=i(91641);const n=function(e){return(0,s.A)(e,4)}},14162:(e,t,i)=>{i.d(t,{diagram:()=>X});var s,n,r=i(99702),l=i(50053),o=i(75937),a=i(25582),c=i(98055),h=i(697),u=i(26312),d=(i(74353),i(16750),i(42838),function(){var e=function(e,t,i,s){for(i=i||{},s=e.length;s--;i[e[s]]=t);return i},t=[1,7],i=[1,13],s=[1,14],n=[1,15],r=[1,19],l=[1,16],o=[1,17],a=[1,18],c=[8,30],h=[8,21,28,29,30,31,32,40,44,47],u=[1,23],d=[1,24],g=[8,15,16,21,28,29,30,31,32,40,44,47],y=[8,15,16,21,27,28,29,30,31,32,40,44,47],p=[1,49],b={trace:function(){},yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:function(e,t,i,s,n,r,l){var o=r.length-1;switch(n){case 4:s.getLogger().debug("Rule: separator (NL) ");break;case 5:s.getLogger().debug("Rule: separator (Space) ");break;case 6:s.getLogger().debug("Rule: separator (EOF) ");break;case 7:s.getLogger().debug("Rule: hierarchy: ",r[o-1]),s.setHierarchy(r[o-1]);break;case 8:s.getLogger().debug("Stop NL ");break;case 9:s.getLogger().debug("Stop EOF ");break;case 10:s.getLogger().debug("Stop NL2 ");break;case 11:s.getLogger().debug("Stop EOF2 ");break;case 12:s.getLogger().debug("Rule: statement: ",r[o]),"number"==typeof r[o].length?this.$=r[o]:this.$=[r[o]];break;case 13:s.getLogger().debug("Rule: statement #2: ",r[o-1]),this.$=[r[o-1]].concat(r[o]);break;case 14:s.getLogger().debug("Rule: link: ",r[o],e),this.$={edgeTypeStr:r[o],label:""};break;case 15:s.getLogger().debug("Rule: LABEL link: ",r[o-3],r[o-1],r[o]),this.$={edgeTypeStr:r[o],label:r[o-1]};break;case 18:const t=parseInt(r[o]),i=s.generateId();this.$={id:i,type:"space",label:"",width:t,children:[]};break;case 23:s.getLogger().debug("Rule: (nodeStatement link node) ",r[o-2],r[o-1],r[o]," typestr: ",r[o-1].edgeTypeStr);const n=s.edgeStrToEdgeData(r[o-1].edgeTypeStr);this.$=[{id:r[o-2].id,label:r[o-2].label,type:r[o-2].type,directions:r[o-2].directions},{id:r[o-2].id+"-"+r[o].id,start:r[o-2].id,end:r[o].id,label:r[o-1].label,type:"edge",directions:r[o].directions,arrowTypeEnd:n,arrowTypeStart:"arrow_open"},{id:r[o].id,label:r[o].label,type:s.typeStr2Type(r[o].typeStr),directions:r[o].directions}];break;case 24:s.getLogger().debug("Rule: nodeStatement (abc88 node size) ",r[o-1],r[o]),this.$={id:r[o-1].id,label:r[o-1].label,type:s.typeStr2Type(r[o-1].typeStr),directions:r[o-1].directions,widthInColumns:parseInt(r[o],10)};break;case 25:s.getLogger().debug("Rule: nodeStatement (node) ",r[o]),this.$={id:r[o].id,label:r[o].label,type:s.typeStr2Type(r[o].typeStr),directions:r[o].directions,widthInColumns:1};break;case 26:s.getLogger().debug("APA123",this?this:"na"),s.getLogger().debug("COLUMNS: ",r[o]),this.$={type:"column-setting",columns:"auto"===r[o]?-1:parseInt(r[o])};break;case 27:s.getLogger().debug("Rule: id-block statement : ",r[o-2],r[o-1]),s.generateId(),this.$={...r[o-2],type:"composite",children:r[o-1]};break;case 28:s.getLogger().debug("Rule: blockStatement : ",r[o-2],r[o-1],r[o]);const l=s.generateId();this.$={id:l,type:"composite",label:"",children:r[o-1]};break;case 29:s.getLogger().debug("Rule: node (NODE_ID separator): ",r[o]),this.$={id:r[o]};break;case 30:s.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",r[o-1],r[o]),this.$={id:r[o-1],label:r[o].label,typeStr:r[o].typeStr,directions:r[o].directions};break;case 31:s.getLogger().debug("Rule: dirList: ",r[o]),this.$=[r[o]];break;case 32:s.getLogger().debug("Rule: dirList: ",r[o-1],r[o]),this.$=[r[o-1]].concat(r[o]);break;case 33:s.getLogger().debug("Rule: nodeShapeNLabel: ",r[o-2],r[o-1],r[o]),this.$={typeStr:r[o-2]+r[o],label:r[o-1]};break;case 34:s.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",r[o-3],r[o-2]," #3:",r[o-1],r[o]),this.$={typeStr:r[o-3]+r[o],label:r[o-2],directions:r[o-1]};break;case 35:case 36:this.$={type:"classDef",id:r[o-1].trim(),css:r[o].trim()};break;case 37:this.$={type:"applyClass",id:r[o-1].trim(),styleClass:r[o].trim()};break;case 38:this.$={type:"applyStyles",id:r[o-1].trim(),stylesStr:r[o].trim()}}},table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:i,29:s,31:n,32:r,40:l,44:o,47:a},{8:[1,20]},e(c,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:t,28:i,29:s,31:n,32:r,40:l,44:o,47:a}),e(h,[2,16],{14:22,15:u,16:d}),e(h,[2,17]),e(h,[2,18]),e(h,[2,19]),e(h,[2,20]),e(h,[2,21]),e(h,[2,22]),e(g,[2,25],{27:[1,25]}),e(h,[2,26]),{19:26,26:12,32:r},{11:27,13:4,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:i,29:s,31:n,32:r,40:l,44:o,47:a},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},e(y,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},e(c,[2,13]),{26:35,32:r},{32:[2,14]},{17:[1,36]},e(g,[2,24]),{11:37,13:4,14:22,15:u,16:d,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:i,29:s,31:n,32:r,40:l,44:o,47:a},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},e(y,[2,30]),{18:[1,43]},{18:[1,44]},e(g,[2,23]),{18:[1,45]},{30:[1,46]},e(h,[2,28]),e(h,[2,35]),e(h,[2,36]),e(h,[2,37]),e(h,[2,38]),{37:[1,47]},{34:48,35:p},{15:[1,50]},e(h,[2,27]),e(y,[2,33]),{39:[1,51]},{34:52,35:p,39:[2,31]},{32:[2,15]},e(y,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:function(e,t){if(!t.recoverable){var i=new Error(e);throw i.hash=t,i}this.trace(e)},parse:function(e){var t=this,i=[0],s=[],n=[null],r=[],l=this.table,o="",a=0,c=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(d.yy[g]=this.yy[g]);u.setInput(e,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var p=u.options&&u.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,x,L,S,f,m,_,k,E,w={};;){if(x=i[i.length-1],this.defaultActions[x]?L=this.defaultActions[x]:(null==b&&(E=void 0,"number"!=typeof(E=s.pop()||u.lex()||1)&&(E instanceof Array&&(E=(s=E).pop()),E=t.symbols_[E]||E),b=E),L=l[x]&&l[x][b]),void 0===L||!L.length||!L[0]){var v="";for(f in k=[],l[x])this.terminals_[f]&&f>2&&k.push("'"+this.terminals_[f]+"'");v=u.showPosition?"Parse error on line "+(a+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(a+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(v,{text:u.match,token:this.terminals_[b]||b,line:u.yylineno,loc:y,expected:k})}if(L[0]instanceof Array&&L.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+b);switch(L[0]){case 1:i.push(b),n.push(u.yytext),r.push(u.yylloc),i.push(L[1]),b=null,c=u.yyleng,o=u.yytext,a=u.yylineno,y=u.yylloc;break;case 2:if(m=this.productions_[L[1]][1],w.$=n[n.length-m],w._$={first_line:r[r.length-(m||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(m||1)].first_column,last_column:r[r.length-1].last_column},p&&(w._$.range=[r[r.length-(m||1)].range[0],r[r.length-1].range[1]]),void 0!==(S=this.performAction.apply(w,[o,c,a,d.yy,L[1],n,r].concat(h))))return S;m&&(i=i.slice(0,-1*m*2),n=n.slice(0,-1*m),r=r.slice(0,-1*m)),i.push(this.productions_[L[1]][0]),n.push(w.$),r.push(w._$),_=l[i[i.length-2]][i[i.length-1]],i.push(_);break;case 3:return!0}}return!0}},x={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,i=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===s.length?this.yylloc.first_column:0)+s[s.length-i.length].length-i[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var i,s,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(s=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],i=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,i,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if((i=this._input.match(this.rules[n[r]]))&&(!t||i[0].length>t[0].length)){if(t=i,s=r,this.options.backtrack_lexer){if(!1!==(e=this.test_match(i,n[r])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,n[s]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,i,s){switch(i){case 0:return 10;case 1:return e.getLogger().debug("Found space-block"),31;case 2:return e.getLogger().debug("Found nl-block"),31;case 3:return e.getLogger().debug("Found space-block"),29;case 4:e.getLogger().debug(".",t.yytext);break;case 5:e.getLogger().debug("_",t.yytext);break;case 6:return 5;case 7:return t.yytext=-1,28;case 8:return t.yytext=t.yytext.replace(/columns\s+/,""),e.getLogger().debug("COLUMNS (LEX)",t.yytext),28;case 9:case 77:case 78:case 100:this.pushState("md_string");break;case 10:return"MD_STR";case 11:case 35:case 80:this.popState();break;case 12:this.pushState("string");break;case 13:e.getLogger().debug("LEX: POPPING STR:",t.yytext),this.popState();break;case 14:return e.getLogger().debug("LEX: STR end:",t.yytext),"STR";case 15:return t.yytext=t.yytext.replace(/space\:/,""),e.getLogger().debug("SPACE NUM (LEX)",t.yytext),21;case 16:return t.yytext="1",e.getLogger().debug("COLUMNS (LEX)",t.yytext),21;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 22:return this.popState(),this.pushState("CLASSDEFID"),41;case 23:return this.popState(),42;case 24:return this.pushState("CLASS"),44;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;case 26:return this.popState(),46;case 27:return this.pushState("STYLE_STMNT"),47;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;case 29:return this.popState(),49;case 30:return this.pushState("acc_title"),"acc_title";case 31:return this.popState(),"acc_title_value";case 32:return this.pushState("acc_descr"),"acc_descr";case 33:return this.popState(),"acc_descr_value";case 34:this.pushState("acc_descr_multiline");break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:case 39:case 41:case 42:case 45:return this.popState(),e.getLogger().debug("Lex: (("),"NODE_DEND";case 40:return this.popState(),e.getLogger().debug("Lex: ))"),"NODE_DEND";case 43:return this.popState(),e.getLogger().debug("Lex: (-"),"NODE_DEND";case 44:return this.popState(),e.getLogger().debug("Lex: -)"),"NODE_DEND";case 46:return this.popState(),e.getLogger().debug("Lex: ]]"),"NODE_DEND";case 47:return this.popState(),e.getLogger().debug("Lex: ("),"NODE_DEND";case 48:return this.popState(),e.getLogger().debug("Lex: ])"),"NODE_DEND";case 49:case 50:return this.popState(),e.getLogger().debug("Lex: /]"),"NODE_DEND";case 51:return this.popState(),e.getLogger().debug("Lex: )]"),"NODE_DEND";case 52:return this.popState(),e.getLogger().debug("Lex: )"),"NODE_DEND";case 53:return this.popState(),e.getLogger().debug("Lex: ]>"),"NODE_DEND";case 54:return this.popState(),e.getLogger().debug("Lex: ]"),"NODE_DEND";case 55:return e.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;case 56:return e.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;case 57:return e.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;case 58:case 60:case 61:case 62:case 65:return e.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 59:return e.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;case 63:return e.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;case 64:return e.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;case 66:case 67:case 68:case 69:case 70:case 71:case 72:return this.pushState("NODE"),36;case 73:return e.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;case 74:return this.pushState("BLOCK_ARROW"),e.getLogger().debug("LEX ARR START"),38;case 75:return e.getLogger().debug("Lex: NODE_ID",t.yytext),32;case 76:return e.getLogger().debug("Lex: EOF",t.yytext),8;case 79:return"NODE_DESCR";case 81:e.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:e.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return e.getLogger().debug("LEX: NODE_DESCR:",t.yytext),"NODE_DESCR";case 84:e.getLogger().debug("LEX POPPING"),this.popState();break;case 85:e.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (right): dir:",t.yytext),"DIR";case 87:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (left):",t.yytext),"DIR";case 88:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (x):",t.yytext),"DIR";case 89:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (y):",t.yytext),"DIR";case 90:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (up):",t.yytext),"DIR";case 91:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (down):",t.yytext),"DIR";case 92:return t.yytext="]>",e.getLogger().debug("Lex (ARROW_DIR end):",t.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";case 93:return e.getLogger().debug("Lex: LINK","#"+t.yytext+"#"),15;case 94:case 95:case 96:return e.getLogger().debug("Lex: LINK",t.yytext),15;case 97:case 98:case 99:return e.getLogger().debug("Lex: START_LINK",t.yytext),this.pushState("LLABEL"),16;case 101:return e.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";case 102:return this.popState(),e.getLogger().debug("Lex: LINK","#"+t.yytext+"#"),15;case 103:case 104:return this.popState(),e.getLogger().debug("Lex: LINK",t.yytext),15;case 105:return e.getLogger().debug("Lex: COLON",t.yytext),t.yytext=t.yytext.slice(1),27}},rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};function L(){this.yy={}}return b.lexer=x,L.prototype=b,b.Parser=L,new L}());d.parser=d;const g=d;let y={},p=[],b={};const x="color",L="fill",S=(0,r.c)();let f={};const m=function(e,t=""){void 0===f[e]&&(f[e]={id:e,styles:[],textStyles:[]});const i=f[e];null!=t&&t.split(",").forEach((e=>{const t=e.replace(/([^;]*);/,"$1").trim();if(e.match(x)){const e=t.replace(L,"bgFill").replace(x,L);i.textStyles.push(e)}i.styles.push(t)}))},_=function(e,t=""){const i=y[e];null!=t&&(i.styles=t.split(","))},k=function(e,t){e.split(",").forEach((function(e){let i=y[e];if(void 0===i){const t=e.trim();y[t]={id:t,type:"na",children:[]},i=y[t]}i.classes||(i.classes=[]),i.classes.push(t)}))},E=(e,t)=>{const i=e.flat(),s=[];for(const o of i)if(o.label&&(o.label=(n=o.label,r.e.sanitizeText(n,S))),"classDef"!==o.type)if("applyClass"!==o.type)if("applyStyles"!==o.type)if("column-setting"===o.type)t.columns=o.columns||-1;else if("edge"===o.type)b[o.id]?b[o.id]++:b[o.id]=1,o.id=b[o.id]+"-"+o.id,p.push(o);else{o.label||("composite"===o.type?o.label="":o.label=o.id);const e=!y[o.id];if(e?y[o.id]=o:("na"!==o.type&&(y[o.id].type=o.type),o.label!==o.id&&(y[o.id].label=o.label)),o.children&&E(o.children,o),"space"===o.type){const e=o.width||1;for(let t=0;t<e;t++){const e=(0,l.A)(o);e.id=e.id+"-"+t,y[e.id]=e,s.push(e)}}else e&&s.push(o)}else(null==o?void 0:o.stylesStr)&&_(o.id,null==o?void 0:o.stylesStr);else k(o.id,(null==o?void 0:o.styleClass)||"");else m(o.id,o.css);var n;t.children=s};let w=[],v={id:"root",type:"composite",children:[],columns:-1};let D=0;const $={getConfig:()=>(0,r.F)().block,typeStr2Type:function(e){switch(r.l.debug("typeStr2Type",e),e){case"[]":return"square";case"()":return r.l.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}},edgeTypeStr2Type:function(e){return r.l.debug("typeStr2Type",e),"=="===e?"thick":"normal"},edgeStrToEdgeData:function(e){switch(e.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}},getLogger:()=>console,getBlocksFlat:()=>[...Object.values(y)],getBlocks:()=>w||[],getEdges:()=>p,setHierarchy:e=>{v.children=e,E(e,v),w=v.children},getBlock:e=>y[e],setBlock:e=>{y[e.id]=e},getColumns:e=>{const t=y[e];return t?t.columns?t.columns:t.children?t.children.length:-1:-1},getClasses:function(){return f},clear:()=>{r.l.debug("Clear called"),(0,r.v)(),v={id:"root",type:"composite",children:[],columns:-1},y={root:v},w=[],f={},p=[],b={}},generateId:()=>(D++,"id-"+Math.random().toString(36).substr(2,12)+"-"+D)},N=(e,t)=>{const i=o.A,s=i(e,"r"),n=i(e,"g"),r=i(e,"b");return a.A(s,n,r,t)},I=e=>`.label {\n font-family: ${e.fontFamily};\n color: ${e.nodeTextColor||e.textColor};\n }\n .cluster-label text {\n fill: ${e.titleColor};\n }\n .cluster-label span,p {\n color: ${e.titleColor};\n }\n\n\n\n .label text,span,p {\n fill: ${e.nodeTextColor||e.textColor};\n color: ${e.nodeTextColor||e.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${e.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${e.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${e.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${e.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${e.edgeLabelBackground};\n fill: ${e.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${N(e.edgeLabelBackground,.5)};\n // background-color:\n }\n\n .node .cluster {\n // fill: ${N(e.mainBkg,.5)};\n fill: ${N(e.clusterBkg,.5)};\n stroke: ${N(e.clusterBorder,.2)};\n box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${e.titleColor};\n }\n\n .cluster span,p {\n color: ${e.titleColor};\n }\n /* .cluster div {\n color: ${e.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${e.fontFamily};\n font-size: 12px;\n background: ${e.tertiaryColor};\n border: 1px solid ${e.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n }\n`;function T(e,t,i=!1){var s,n,l;const o=e;let a="default";((null==(s=null==o?void 0:o.classes)?void 0:s.length)||0)>0&&(a=((null==o?void 0:o.classes)||[]).join(" ")),a+=" flowchart-label";let c,h=0,u="";switch(o.type){case"round":h=5,u="rect";break;case"composite":h=0,u="composite",c=0;break;case"square":case"group":default:u="rect";break;case"diamond":u="question";break;case"hexagon":u="hexagon";break;case"block_arrow":u="block_arrow";break;case"odd":case"rect_left_inv_arrow":u="rect_left_inv_arrow";break;case"lean_right":u="lean_right";break;case"lean_left":u="lean_left";break;case"trapezoid":u="trapezoid";break;case"inv_trapezoid":u="inv_trapezoid";break;case"circle":u="circle";break;case"ellipse":u="ellipse";break;case"stadium":u="stadium";break;case"subroutine":u="subroutine";break;case"cylinder":u="cylinder";break;case"doublecircle":u="doublecircle"}const d=(0,r.k)((null==o?void 0:o.styles)||[]),g=o.label,y=o.size||{width:0,height:0,x:0,y:0};return{labelStyle:d.labelStyle,shape:u,labelText:g,rx:h,ry:h,class:a,style:d.style,id:o.id,directions:o.directions,width:y.width,height:y.height,x:y.x,y:y.y,positioned:i,intersect:void 0,type:o.type,padding:c??((null==(l=null==(n=(0,r.F)())?void 0:n.block)?void 0:l.padding)||0)}}async function z(e,t,i){const s=T(t,0,!1);if("group"===s.type)return;const n=await(0,c.e)(e,s),r=n.node().getBBox(),l=i.getBlock(s.id);l.size={width:r.width,height:r.height,x:0,y:0,node:n},i.setBlock(l),n.remove()}async function A(e,t,i){const s=T(t,0,!0);"space"!==i.getBlock(s.id).type&&(await(0,c.e)(e,s),t.intersect=null==s?void 0:s.intersect,(0,c.p)(s))}async function C(e,t,i,s){for(const n of t)await s(e,n,i),n.children&&await C(e,n.children,i,s)}const O=(null==(n=null==(s=(0,r.c)())?void 0:s.block)?void 0:n.padding)||8;function R(e,t){if(0===e||!Number.isInteger(e))throw new Error("Columns must be an integer !== 0.");if(t<0||!Number.isInteger(t))throw new Error("Position must be a non-negative integer."+t);if(e<0)return{px:t,py:0};if(1===e)return{px:0,py:t};return{px:t%e,py:Math.floor(t/e)}}const B=e=>{let t=0,i=0;for(const s of e.children){const{width:n,height:l,x:o,y:a}=s.size||{width:0,height:0,x:0,y:0};r.l.debug("getMaxChildSize abc95 child:",s.id,"width:",n,"height:",l,"x:",o,"y:",a,s.type),"space"!==s.type&&(n>t&&(t=n/(e.widthInColumns||1)),l>i&&(i=l))}return{width:t,height:i}};function F(e,t,i=0,s=0){var n,l,o,a,c,h,u,d,g,y,p;r.l.debug("setBlockSizes abc95 (start)",e.id,null==(n=null==e?void 0:e.size)?void 0:n.x,"block width =",null==e?void 0:e.size,"sieblingWidth",i),(null==(l=null==e?void 0:e.size)?void 0:l.width)||(e.size={width:i,height:s,x:0,y:0});let b=0,x=0;if((null==(o=e.children)?void 0:o.length)>0){for(const i of e.children)F(i,t);const n=B(e);b=n.width,x=n.height,r.l.debug("setBlockSizes abc95 maxWidth of",e.id,":s children is ",b,x);for(const t of e.children)t.size&&(r.l.debug(`abc95 Setting size of children of ${e.id} id=${t.id} ${b} ${x} ${t.size}`),t.size.width=b*(t.widthInColumns||1)+O*((t.widthInColumns||1)-1),t.size.height=x,t.size.x=0,t.size.y=0,r.l.debug(`abc95 updating size of ${e.id} children child:${t.id} maxWidth:${b} maxHeight:${x}`));for(const i of e.children)F(i,t,b,x);const l=e.columns||-1;let o=0;for(const t of e.children)o+=t.widthInColumns||1;let d=e.children.length;l>0&&l<o&&(d=l),e.widthInColumns;const g=Math.ceil(o/d);let y=d*(b+O)+O,p=g*(x+O)+O;if(y<i){r.l.debug(`Detected to small siebling: abc95 ${e.id} sieblingWidth ${i} sieblingHeight ${s} width ${y}`),y=i,p=s;const t=(i-d*O-O)/d,n=(s-g*O-O)/g;r.l.debug("Size indata abc88",e.id,"childWidth",t,"maxWidth",b),r.l.debug("Size indata abc88",e.id,"childHeight",n,"maxHeight",x),r.l.debug("Size indata abc88 xSize",d,"padding",O);for(const i of e.children)i.size&&(i.size.width=t,i.size.height=n,i.size.x=0,i.size.y=0)}if(r.l.debug(`abc95 (finale calc) ${e.id} xSize ${d} ySize ${g} columns ${l}${e.children.length} width=${Math.max(y,(null==(a=e.size)?void 0:a.width)||0)}`),y<((null==(c=null==e?void 0:e.size)?void 0:c.width)||0)){y=(null==(h=null==e?void 0:e.size)?void 0:h.width)||0;const t=l>0?Math.min(e.children.length,l):e.children.length;if(t>0){const i=(y-t*O-O)/t;r.l.debug("abc95 (growing to fit) width",e.id,y,null==(u=e.size)?void 0:u.width,i);for(const t of e.children)t.size&&(t.size.width=i)}}e.size={width:y,height:p,x:0,y:0}}r.l.debug("setBlockSizes abc94 (done)",e.id,null==(d=null==e?void 0:e.size)?void 0:d.x,null==(g=null==e?void 0:e.size)?void 0:g.width,null==(y=null==e?void 0:e.size)?void 0:y.y,null==(p=null==e?void 0:e.size)?void 0:p.height)}function P(e,t){var i,s,n,l,o,a,c,h,u,d,g,y,p,b,x,L,S;r.l.debug(`abc85 layout blocks (=>layoutBlocks) ${e.id} x: ${null==(i=null==e?void 0:e.size)?void 0:i.x} y: ${null==(s=null==e?void 0:e.size)?void 0:s.y} width: ${null==(n=null==e?void 0:e.size)?void 0:n.width}`);const f=e.columns||-1;if(r.l.debug("layoutBlocks columns abc95",e.id,"=>",f,e),e.children&&e.children.length>0){const t=(null==(o=null==(l=null==e?void 0:e.children[0])?void 0:l.size)?void 0:o.width)||0,i=e.children.length*t+(e.children.length-1)*O;r.l.debug("widthOfChildren 88",i,"posX");let s=0;r.l.debug("abc91 block?.size?.x",e.id,null==(a=null==e?void 0:e.size)?void 0:a.x);let n=(null==(c=null==e?void 0:e.size)?void 0:c.x)?(null==(h=null==e?void 0:e.size)?void 0:h.x)+(-(null==(u=null==e?void 0:e.size)?void 0:u.width)/2||0):-O,x=0;for(const l of e.children){const t=e;if(!l.size)continue;const{width:i,height:o}=l.size,{px:a,py:c}=R(f,s);if(c!=x&&(x=c,n=(null==(d=null==e?void 0:e.size)?void 0:d.x)?(null==(g=null==e?void 0:e.size)?void 0:g.x)+(-(null==(y=null==e?void 0:e.size)?void 0:y.width)/2||0):-O,r.l.debug("New row in layout for block",e.id," and child ",l.id,x)),r.l.debug(`abc89 layout blocks (child) id: ${l.id} Pos: ${s} (px, py) ${a},${c} (${null==(p=null==t?void 0:t.size)?void 0:p.x},${null==(b=null==t?void 0:t.size)?void 0:b.y}) parent: ${t.id} width: ${i}${O}`),t.size){const e=i/2;l.size.x=n+O+e,r.l.debug(`abc91 layout blocks (calc) px, pyid:${l.id} startingPos=X${n} new startingPosX${l.size.x} ${e} padding=${O} width=${i} halfWidth=${e} => x:${l.size.x} y:${l.size.y} ${l.widthInColumns} (width * (child?.w || 1)) / 2 ${i*((null==l?void 0:l.widthInColumns)||1)/2}`),n=l.size.x+e,l.size.y=t.size.y-t.size.height/2+c*(o+O)+o/2+O,r.l.debug(`abc88 layout blocks (calc) px, pyid:${l.id}startingPosX${n}${O}${e}=>x:${l.size.x}y:${l.size.y}${l.widthInColumns}(width * (child?.w || 1)) / 2${i*((null==l?void 0:l.widthInColumns)||1)/2}`)}l.children&&P(l),s+=(null==l?void 0:l.widthInColumns)||1,r.l.debug("abc88 columnsPos",l,s)}}r.l.debug(`layout blocks (<==layoutBlocks) ${e.id} x: ${null==(x=null==e?void 0:e.size)?void 0:x.x} y: ${null==(L=null==e?void 0:e.size)?void 0:L.y} width: ${null==(S=null==e?void 0:e.size)?void 0:S.width}`)}function Y(e,{minX:t,minY:i,maxX:s,maxY:n}={minX:0,minY:0,maxX:0,maxY:0}){if(e.size&&"root"!==e.id){const{x:r,y:l,width:o,height:a}=e.size;r-o/2<t&&(t=r-o/2),l-a/2<i&&(i=l-a/2),r+o/2>s&&(s=r+o/2),l+a/2>n&&(n=l+a/2)}if(e.children)for(const r of e.children)({minX:t,minY:i,maxX:s,maxY:n}=Y(r,{minX:t,minY:i,maxX:s,maxY:n}));return{minX:t,minY:i,maxX:s,maxY:n}}function K(e){const t=e.getBlock("root");if(!t)return;F(t,e,0,0),P(t),r.l.debug("getBlocks",JSON.stringify(t,null,2));const{minX:i,minY:s,maxX:n,maxY:l}=Y(t);return{x:i,y:s,width:n-i,height:l-s}}const X={parser:g,db:$,renderer:{draw:async function(e,t,i,s){const{securityLevel:n,block:l}=(0,r.F)(),o=s.db;let a;"sandbox"===n&&(a=(0,u.Ltv)("#i"+t));const d="sandbox"===n?(0,u.Ltv)(a.nodes()[0].contentDocument.body):(0,u.Ltv)("body"),g="sandbox"===n?d.select(`[id="${t}"]`):(0,u.Ltv)(`[id="${t}"]`);(0,c.a)(g,["point","circle","cross"],s.type,t);const y=o.getBlocks(),p=o.getBlocksFlat(),b=o.getEdges(),x=g.insert("g").attr("class","block");await async function(e,t,i){await C(e,t,i,z)}(x,y,o);const L=K(o);if(await async function(e,t,i){await C(e,t,i,A)}(x,y,o),await async function(e,t,i,s,n){const r=new h.T({multigraph:!0,compound:!0});r.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(const l of i)l.size&&r.setNode(l.id,{width:l.size.width,height:l.size.height,intersect:l.intersect});for(const l of t)if(l.start&&l.end){const t=s.getBlock(l.start),i=s.getBlock(l.end);if((null==t?void 0:t.size)&&(null==i?void 0:i.size)){const s=t.size,o=i.size,a=[{x:s.x,y:s.y},{x:s.x+(o.x-s.x)/2,y:s.y+(o.y-s.y)/2},{x:o.x,y:o.y}];await(0,c.h)(e,{v:l.start,w:l.end,name:l.id},{...l,arrowTypeEnd:l.arrowTypeEnd,arrowTypeStart:l.arrowTypeStart,points:a,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",r,n),l.label&&(await(0,c.f)(e,{...l,label:l.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:l.arrowTypeEnd,arrowTypeStart:l.arrowTypeStart,points:a,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),await(0,c.j)({...l,x:a[1].x,y:a[1].y},{originalPath:a}))}}}(x,b,p,o,t),L){const e=L,t=Math.max(1,Math.round(e.width/e.height*.125)),i=e.height+t+10,s=e.width+10,{useMaxWidth:n}=l;(0,r.i)(g,i,s,!!n),r.l.debug("Here Bounds",L,e),g.attr("viewBox",`${e.x-5} ${e.y-5} ${e.width+10} ${e.height+10}`)}(0,u.UMr)(u.zt)},getClasses:function(e,t){return t.db.getClasses()}},styles:I}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/41d993a6.6eb7edc2.js b/pr-preview/pr-1594/assets/js/41d993a6.6eb7edc2.js deleted file mode 100644 index 3afc03646a..0000000000 --- a/pr-preview/pr-1594/assets/js/41d993a6.6eb7edc2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4018],{26037:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=n(74848),i=n(28453);const o={},c="BigQuery Batch Query Connector",s={id:"reference/Connectors/capture-connectors/bigquery-batch",title:"BigQuery Batch Query Connector",description:"This connector captures data from BigQuery into Flow collections by periodically",source:"@site/docs/reference/Connectors/capture-connectors/bigquery-batch.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/bigquery-batch",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/bigquery-batch.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Azure Blob Storage",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage"},next:{title:"Bing Ads",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Service Account",id:"service-account",level:3},{value:"Service Account Key",id:"service-account-key",level:3},{value:"Set up the BigQuery connector in Estuary Flow",id:"set-up-the-bigquery-connector-in-estuary-flow",level:3},{value:"Specifying Cursor Columns",id:"specifying-cursor-columns",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Query Templates",id:"query-templates",level:3}];function a(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"bigquery-batch-query-connector",children:"BigQuery Batch Query Connector"}),"\n",(0,r.jsx)(t.p,{children:"This connector captures data from BigQuery into Flow collections by periodically\nexecuting queries and translating the results into JSON documents."}),"\n",(0,r.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(t.p,{children:"To use this connector, you will need the following prerequisites:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"A Google Cloud Project with BigQuery enabled"}),"\n",(0,r.jsx)(t.li,{children:'A Google Cloud Service Account with the "BigQuery User" and "BigQuery Data Viewer" roles in your GCP project'}),"\n",(0,r.jsx)(t.li,{children:"A Service Account Key to authenticate into your Service Account"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"See the setup guide for more information about how to create the required resources."}),"\n",(0,r.jsx)(t.h2,{id:"setup",children:"Setup"}),"\n",(0,r.jsx)(t.p,{children:"Follow the steps below to set up the BigQuery connector."}),"\n",(0,r.jsx)(t.h3,{id:"service-account",children:"Service Account"}),"\n",(0,r.jsx)(t.p,{children:'To sync data from BigQuery, you need credentials for a Service Account with the "BigQuery User" and "BigQuery Data Viewer" roles. These roles grant the necessary permissions to run BigQuery jobs, discover tables within the dataset, and read the contents of those tables. It is recommended to create a dedicated Service Account to facilitate permission management and auditing. However, if you already have a Service Account with the correct permissions, you can use it.'}),"\n",(0,r.jsx)(t.p,{children:"Here's how to provision a suitable service account:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Follow Google Cloud Platform's instructions for ",(0,r.jsx)(t.a,{href:"https://cloud.google.com/iam/docs/service-accounts-create#creating",children:"Creating a Service Account"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Note down the ID of the service account you just created. Service Account IDs typically follow the format ",(0,r.jsx)(t.code,{children:"<account-name>@<project-name>.iam.gserviceaccount.com"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Follow Google Cloud Platform's instructions for ",(0,r.jsx)(t.a,{href:"https://cloud.google.com/iam/docs/grant-role-console#grant_an_iam_role",children:"Granting IAM Roles"}),' to the new service account. The "principal" email address should be the ID of the service account you just created, and the roles granted should be "BigQuery User" and "BigQuery Data Viewer".']}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"service-account-key",children:"Service Account Key"}),"\n",(0,r.jsx)(t.p,{children:"Service Account Keys are used to authenticate as Google Service Accounts. To be able to utilize the permissions granted to the Service Account in the previous step, you'll need to provide its Service Account Key when creating the capture. It is a good practice, though not required, to create a new key for Flow even if you're reusing a preexisting account."}),"\n",(0,r.jsxs)(t.p,{children:["To create a new key for a service account, follow Google Cloud Platform's instructions for ",(0,r.jsx)(t.a,{href:"https://cloud.google.com/iam/docs/keys-create-delete#creating",children:"Creating a Service Account Key"}),". Be sure to create the key in JSON format. Once the linked instructions have been followed you should have a key file, which will need to be uploaded to Flow when setting up your capture."]}),"\n",(0,r.jsx)(t.h3,{id:"set-up-the-bigquery-connector-in-estuary-flow",children:"Set up the BigQuery connector in Estuary Flow"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Log into your Estuary Flow account."}),"\n",(0,r.jsx)(t.li,{children:'In the left navigation bar, click on "Sources". In the top-left corner, click "New Capture".'}),"\n",(0,r.jsx)(t.li,{children:'Locate and select the "BigQuery" connector.'}),"\n",(0,r.jsx)(t.li,{children:"Enter a name and optional description for the capture task."}),"\n",(0,r.jsx)(t.li,{children:"Enter the Project ID and Dataset name that you intend to capture from, and paste or upload the service account key in the appropriate field."}),"\n",(0,r.jsx)(t.li,{children:'Click the "Next" button and wait while the connector automatically discovers the available tables in the specified project and dataset.'}),"\n",(0,r.jsx)(t.li,{children:"Select the tables you wish to capture from the bindings list."}),"\n",(0,r.jsxs)(t.li,{children:["For each binding you selected, you will likely wish to ",(0,r.jsx)(t.a,{href:"#specifying-cursor-columns",children:"specify cursor columns"}),' and a shorter "Poll Interval" setting. Otherwise the default behavior will be to recapture the entire contents of the table, once per day.']}),"\n",(0,r.jsx)(t.li,{children:'Once you are satisfied with your binding selection, click the "Save and Publish" button.'}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"specifying-cursor-columns",children:"Specifying Cursor Columns"}),"\n",(0,r.jsxs)(t.p,{children:["This connector operates by periodically executing a ",(0,r.jsx)(t.code,{children:"SELECT * FROM table"})," query and\noutputting the resulting rows as JSON documents into a Flow collection. In some cases\ndoing this once or twice a day is entirely sufficient, but when working with larger\ntables (or if a faster update rate is desired) it pays to manually configure cursor\ncolumns."]}),"\n",(0,r.jsx)(t.p,{children:"The cursor must be a column (or ordered tuple of columns) which is expected to strictly\nincrease for newly added or updated rows. Common examples of suitable cursors include:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Update timestamps, which are often the best choice if available since they can\noften be used to identify changed rows as well as new insertions."}),"\n",(0,r.jsx)(t.li,{children:"Creation timestamps, which can be used to identify newly added rows in append-only\ndatasets but won't help to identify changes to preexisting rows."}),"\n",(0,r.jsx)(t.li,{children:"Monotonically increasing IDs, which are another way of identifying newly added rows\nbut often don't help with update detection."}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["When a cursor is specified, the update query will take the form ",(0,r.jsx)(t.code,{children:"SELECT * FROM $table WHERE $cursorName > $lastCursorValue ORDER BY $cursorName"}),"\nand the capture connector will keep track of the highest observed cursor value between polling intervals.\nIf multiple cursor columns are specified, they will be treated as an ordered tuple of columns which\ncollectively form the cursor, and the obvious lexicographic tuple ordering will apply."]}),"\n",(0,r.jsxs)(t.p,{children:["Once you have specified a suitable cursor for a table, you will likely want to lower the\npolling interval for that binding. The default polling interval is ",(0,r.jsx)(t.code,{children:'"24h"'})," to keep data\nvolumes low, but once a cursor is specified there is usually no downside to frequent\npolling, so you may wish to lower the interval to ",(0,r.jsx)(t.code,{children:'"5m'}),'" or even ',(0,r.jsx)(t.code,{children:'"5s"'})," for that table."]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(t.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See ",(0,r.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the BigQuery source connector."]}),"\n",(0,r.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/project_id"})}),(0,r.jsx)(t.td,{children:"Project ID"}),(0,r.jsx)(t.td,{children:"The GCP project ID for the project containing the source BigQuery dataset"}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/dataset"})}),(0,r.jsx)(t.td,{children:"Dataset"}),(0,r.jsx)(t.td,{children:"The BigQuery dataset to discover tables within"}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/credentials_json"})}),(0,r.jsx)(t.td,{children:"Credentials JSON"}),(0,r.jsx)(t.td,{children:"The contents of your Service Account Key JSON file"}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/advanced/poll"})}),(0,r.jsx)(t.td,{children:"Poll Interval"}),(0,r.jsx)(t.td,{children:"How often to poll bindings (may be overridden for a specific binding)"}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:'"24h"'})})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/name"})})}),(0,r.jsx)(t.td,{children:"Name"}),(0,r.jsx)(t.td,{children:"A name which uniquely identifies this binding."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/cursor"})})}),(0,r.jsx)(t.td,{children:"Cursor"}),(0,r.jsx)(t.td,{children:"The column name(s) which should be used as the incremental capture cursor"}),(0,r.jsx)(t.td,{children:"array"}),(0,r.jsx)(t.td,{children:"[]"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/template"})})}),(0,r.jsx)(t.td,{children:"Template"}),(0,r.jsx)(t.td,{children:"The query (template) which will be executed every polling interval"}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/poll"})})}),(0,r.jsx)(t.td,{children:"Poll Interval"}),(0,r.jsx)(t.td,{children:"Override the global polling interval for this binding."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:'""'})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"query-templates",children:"Query Templates"}),"\n",(0,r.jsxs)(t.p,{children:["The query template property of a binding defines what query will be executed against\nthe database, given inputs describing the configured cursor columns and whether any prior\ncursor state exists. The default template implements the behavior described in\n",(0,r.jsx)(t.a,{href:"#specifying-cursor-columns",children:"specifying cursor columns"}),"."]}),"\n",(0,r.jsx)(t.p,{children:'In principle you are free to modify this template to implement whatever query you need.\nYou could for instance create a new binding which queries a view, or which performs a\nmore complex analytics query. However this should not be combined with table auto-discovery\nin a single capture, as this can produce some counterintuitive results. Instead create two\nseparate capture tasks from the same database, one for autodiscovered tables and a separate\none with the setting "Automatically Add New Collections" disabled for your custom bindings.'})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>s});var r=n(96540);const i={},o=r.createContext(i);function c(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/420.011125cd.js b/pr-preview/pr-1594/assets/js/420.011125cd.js deleted file mode 100644 index dbf4b10ace..0000000000 --- a/pr-preview/pr-1594/assets/js/420.011125cd.js +++ /dev/null @@ -1,1323 +0,0 @@ -"use strict"; -exports.id = 420; -exports.ids = [420]; -exports.modules = { - -/***/ 26420: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(28259); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99418); - - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [6, 8, 10, 11, 12, 14, 16, 17, 18], $V1 = [1, 9], $V2 = [1, 10], $V3 = [1, 11], $V4 = [1, 12], $V5 = [1, 13], $V6 = [1, 14]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "journey": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "title": 11, "acc_title": 12, "acc_title_value": 13, "acc_descr": 14, "acc_descr_value": 15, "acc_descr_multiline_value": 16, "section": 17, "taskName": 18, "taskData": 19, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 4: "journey", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 11: "title", 12: "acc_title", 13: "acc_title_value", 14: "acc_descr", 15: "acc_descr_value", 16: "acc_descr_multiline_value", 17: "section", 18: "taskName", 19: "taskData" }, - productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 2]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 1: - return $$[$0 - 1]; - case 2: - this.$ = []; - break; - case 3: - $$[$0 - 1].push($$[$0]); - this.$ = $$[$0 - 1]; - break; - case 4: - case 5: - this.$ = $$[$0]; - break; - case 6: - case 7: - this.$ = []; - break; - case 8: - yy.setDiagramTitle($$[$0].substr(6)); - this.$ = $$[$0].substr(6); - break; - case 9: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 10: - case 11: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 12: - yy.addSection($$[$0].substr(8)); - this.$ = $$[$0].substr(8); - break; - case 13: - yy.addTask($$[$0 - 1], $$[$0]); - this.$ = "task"; - break; - } - }, - table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: $V6 }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 15, 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: $V6 }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 8]), { 13: [1, 16] }, { 15: [1, 17] }, o($V0, [2, 11]), o($V0, [2, 12]), { 19: [1, 18] }, o($V0, [2, 4]), o($V0, [2, 9]), o($V0, [2, 10]), o($V0, [2, 13])], - defaultActions: {}, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - break; - case 1: - break; - case 2: - return 10; - case 3: - break; - case 4: - break; - case 5: - return 4; - case 6: - return 11; - case 7: - this.begin("acc_title"); - return 12; - case 8: - this.popState(); - return "acc_title_value"; - case 9: - this.begin("acc_descr"); - return 14; - case 10: - this.popState(); - return "acc_descr_value"; - case 11: - this.begin("acc_descr_multiline"); - break; - case 12: - this.popState(); - break; - case 13: - return "acc_descr_multiline_value"; - case 14: - return 17; - case 15: - return 18; - case 16: - return 19; - case 17: - return ":"; - case 18: - return 6; - case 19: - return "INVALID"; - } - }, - rules: [/^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:journey\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], - conditions: { "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 19], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -let currentSection = ""; -const sections = []; -const tasks = []; -const rawTasks = []; -const clear = function() { - sections.length = 0; - tasks.length = 0; - currentSection = ""; - rawTasks.length = 0; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.v)(); -}; -const addSection = function(txt) { - currentSection = txt; - sections.push(txt); -}; -const getSections = function() { - return sections; -}; -const getTasks = function() { - let allItemsProcessed = compileTasks(); - const maxDepth = 100; - let iterationCount = 0; - while (!allItemsProcessed && iterationCount < maxDepth) { - allItemsProcessed = compileTasks(); - iterationCount++; - } - tasks.push(...rawTasks); - return tasks; -}; -const updateActors = function() { - const tempActors = []; - tasks.forEach((task) => { - if (task.people) { - tempActors.push(...task.people); - } - }); - const unique = new Set(tempActors); - return [...unique].sort(); -}; -const addTask = function(descr, taskData) { - const pieces = taskData.substr(1).split(":"); - let score = 0; - let peeps = []; - if (pieces.length === 1) { - score = Number(pieces[0]); - peeps = []; - } else { - score = Number(pieces[0]); - peeps = pieces[1].split(","); - } - const peopleList = peeps.map((s) => s.trim()); - const rawTask = { - section: currentSection, - type: currentSection, - people: peopleList, - task: descr, - score - }; - rawTasks.push(rawTask); -}; -const addTaskOrg = function(descr) { - const newTask = { - section: currentSection, - type: currentSection, - description: descr, - task: descr, - classes: [] - }; - tasks.push(newTask); -}; -const compileTasks = function() { - const compileTask = function(pos) { - return rawTasks[pos].processed; - }; - let allProcessed = true; - for (const [i, rawTask] of rawTasks.entries()) { - compileTask(i); - allProcessed = allProcessed && rawTask.processed; - } - return allProcessed; -}; -const getActors = function() { - return updateActors(); -}; -const db = { - getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey, - clear, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.t, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.g, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.b, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.a, - addSection, - getSections, - getTasks, - addTask, - addTaskOrg, - getActors -}; -const getStyles = (options) => `.label { - font-family: 'trebuchet ms', verdana, arial, sans-serif; - font-family: var(--mermaid-font-family); - color: ${options.textColor}; - } - .mouth { - stroke: #666; - } - - line { - stroke: ${options.textColor} - } - - .legend { - fill: ${options.textColor}; - } - - .label text { - fill: #333; - } - .label { - color: ${options.textColor} - } - - .face { - ${options.faceColor ? `fill: ${options.faceColor}` : "fill: #FFF8DC"}; - stroke: #999; - } - - .node rect, - .node circle, - .node ellipse, - .node polygon, - .node path { - fill: ${options.mainBkg}; - stroke: ${options.nodeBorder}; - stroke-width: 1px; - } - - .node .label { - text-align: center; - } - .node.clickable { - cursor: pointer; - } - - .arrowheadPath { - fill: ${options.arrowheadColor}; - } - - .edgePath .path { - stroke: ${options.lineColor}; - stroke-width: 1.5px; - } - - .flowchart-link { - stroke: ${options.lineColor}; - fill: none; - } - - .edgeLabel { - background-color: ${options.edgeLabelBackground}; - rect { - opacity: 0.5; - } - text-align: center; - } - - .cluster rect { - } - - .cluster text { - fill: ${options.titleColor}; - } - - div.mermaidTooltip { - position: absolute; - text-align: center; - max-width: 200px; - padding: 2px; - font-family: 'trebuchet ms', verdana, arial, sans-serif; - font-family: var(--mermaid-font-family); - font-size: 12px; - background: ${options.tertiaryColor}; - border: 1px solid ${options.border2}; - border-radius: 2px; - pointer-events: none; - z-index: 100; - } - - .task-type-0, .section-type-0 { - ${options.fillType0 ? `fill: ${options.fillType0}` : ""}; - } - .task-type-1, .section-type-1 { - ${options.fillType0 ? `fill: ${options.fillType1}` : ""}; - } - .task-type-2, .section-type-2 { - ${options.fillType0 ? `fill: ${options.fillType2}` : ""}; - } - .task-type-3, .section-type-3 { - ${options.fillType0 ? `fill: ${options.fillType3}` : ""}; - } - .task-type-4, .section-type-4 { - ${options.fillType0 ? `fill: ${options.fillType4}` : ""}; - } - .task-type-5, .section-type-5 { - ${options.fillType0 ? `fill: ${options.fillType5}` : ""}; - } - .task-type-6, .section-type-6 { - ${options.fillType0 ? `fill: ${options.fillType6}` : ""}; - } - .task-type-7, .section-type-7 { - ${options.fillType0 ? `fill: ${options.fillType7}` : ""}; - } - - .actor-0 { - ${options.actor0 ? `fill: ${options.actor0}` : ""}; - } - .actor-1 { - ${options.actor1 ? `fill: ${options.actor1}` : ""}; - } - .actor-2 { - ${options.actor2 ? `fill: ${options.actor2}` : ""}; - } - .actor-3 { - ${options.actor3 ? `fill: ${options.actor3}` : ""}; - } - .actor-4 { - ${options.actor4 ? `fill: ${options.actor4}` : ""}; - } - .actor-5 { - ${options.actor5 ? `fill: ${options.actor5}` : ""}; - } -`; -const styles = getStyles; -const drawRect = function(elem, rectData) { - return (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData); -}; -const drawFace = function(element, faceData) { - const radius = 15; - const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible"); - const face = element.append("g"); - face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); - face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); - function smile(face2) { - const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .JLW)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); - face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); - } - function sad(face2) { - const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .JLW)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); - face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); - } - function ambivalent(face2) { - face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); - } - if (faceData.score > 3) { - smile(face); - } else if (faceData.score < 3) { - sad(face); - } else { - ambivalent(face); - } - return circleElement; -}; -const drawCircle = function(element, circleData) { - const circleElement = element.append("circle"); - circleElement.attr("cx", circleData.cx); - circleElement.attr("cy", circleData.cy); - circleElement.attr("class", "actor-" + circleData.pos); - circleElement.attr("fill", circleData.fill); - circleElement.attr("stroke", circleData.stroke); - circleElement.attr("r", circleData.r); - if (circleElement.class !== void 0) { - circleElement.attr("class", circleElement.class); - } - if (circleData.title !== void 0) { - circleElement.append("title").text(circleData.title); - } - return circleElement; -}; -const drawText = function(elem, textData) { - return (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.f)(elem, textData); -}; -const drawLabel = function(elem, txtObject) { - function genPoints(x, y, width, height, cut) { - return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); - } - const polygon = elem.append("polygon"); - polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); - polygon.attr("class", "labelBox"); - txtObject.y = txtObject.y + txtObject.labelMargin; - txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; - drawText(elem, txtObject); -}; -const drawSection = function(elem, section, conf2) { - const g = elem.append("g"); - const rect = (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.g)(); - rect.x = section.x; - rect.y = section.y; - rect.fill = section.fill; - rect.width = conf2.width * section.taskCount + // width of the tasks - conf2.diagramMarginX * (section.taskCount - 1); - rect.height = conf2.height; - rect.class = "journey-section section-type-" + section.num; - rect.rx = 3; - rect.ry = 3; - drawRect(g, rect); - _drawTextCandidateFunc(conf2)( - section.text, - g, - rect.x, - rect.y, - rect.width, - rect.height, - { class: "journey-section section-type-" + section.num }, - conf2, - section.colour - ); -}; -let taskCount = -1; -const drawTask = function(elem, task, conf2) { - const center = task.x + conf2.width / 2; - const g = elem.append("g"); - taskCount++; - const maxHeight = 300 + 5 * 30; - g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); - drawFace(g, { - cx: center, - cy: 300 + (5 - task.score) * 30, - score: task.score - }); - const rect = (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.g)(); - rect.x = task.x; - rect.y = task.y; - rect.fill = task.fill; - rect.width = conf2.width; - rect.height = conf2.height; - rect.class = "task task-type-" + task.num; - rect.rx = 3; - rect.ry = 3; - drawRect(g, rect); - let xPos = task.x + 14; - task.people.forEach((person) => { - const colour = task.actors[person].color; - const circle = { - cx: xPos, - cy: task.y, - r: 7, - fill: colour, - stroke: "#000", - title: person, - pos: task.actors[person].position - }; - drawCircle(g, circle); - xPos += 10; - }); - _drawTextCandidateFunc(conf2)( - task.task, - g, - rect.x, - rect.y, - rect.width, - rect.height, - { class: "task" }, - conf2, - task.colour - ); -}; -const drawBackgroundRect = function(elem, bounds2) { - (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.a)(elem, bounds2); -}; -const _drawTextCandidateFunc = function() { - function byText(content, g, x, y, width, height, textAttrs, colour) { - const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); - _setTextAttrs(text, textAttrs); - } - function byTspan(content, g, x, y, width, height, textAttrs, conf2, colour) { - const { taskFontSize, taskFontFamily } = conf2; - const lines = content.split(/<br\s*\/?>/gi); - for (let i = 0; i < lines.length; i++) { - const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; - const text = g.append("text").attr("x", x + width / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); - text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); - text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); - _setTextAttrs(text, textAttrs); - } - } - function byFo(content, g, x, y, width, height, textAttrs, conf2) { - const body = g.append("switch"); - const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("position", "fixed"); - const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); - text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); - byTspan(content, body, x, y, width, height, textAttrs, conf2); - _setTextAttrs(text, textAttrs); - } - function _setTextAttrs(toText, fromTextAttrsDict) { - for (const key in fromTextAttrsDict) { - if (key in fromTextAttrsDict) { - toText.attr(key, fromTextAttrsDict[key]); - } - } - } - return function(conf2) { - return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; - }; -}(); -const initGraphics = function(graphics) { - graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); -}; -const svgDraw = { - drawRect, - drawCircle, - drawSection, - drawText, - drawLabel, - drawTask, - drawBackgroundRect, - initGraphics -}; -const setConf = function(cnf) { - const keys = Object.keys(cnf); - keys.forEach(function(key) { - conf[key] = cnf[key]; - }); -}; -const actors = {}; -function drawActorLegend(diagram2) { - const conf2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; - let yPos = 60; - Object.keys(actors).forEach((person) => { - const colour = actors[person].color; - const circleData = { - cx: 20, - cy: yPos, - r: 7, - fill: colour, - stroke: "#000", - pos: actors[person].position - }; - svgDraw.drawCircle(diagram2, circleData); - const labelData = { - x: 40, - y: yPos + 7, - fill: "#666", - text: person, - textMargin: conf2.boxTextMargin | 5 - }; - svgDraw.drawText(diagram2, labelData); - yPos += 20; - }); -} -const conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; -const LEFT_MARGIN = conf.leftMargin; -const draw = function(text, id, version, diagObj) { - const conf2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; - const securityLevel = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().securityLevel; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); - bounds.init(); - const diagram2 = root.select("#" + id); - svgDraw.initGraphics(diagram2); - const tasks2 = diagObj.db.getTasks(); - const title = diagObj.db.getDiagramTitle(); - const actorNames = diagObj.db.getActors(); - for (const member in actors) { - delete actors[member]; - } - let actorPos = 0; - actorNames.forEach((actorName) => { - actors[actorName] = { - color: conf2.actorColours[actorPos % conf2.actorColours.length], - position: actorPos - }; - actorPos++; - }); - drawActorLegend(diagram2); - bounds.insert(0, 0, LEFT_MARGIN, Object.keys(actors).length * 50); - drawTasks(diagram2, tasks2, 0); - const box = bounds.getBounds(); - if (title) { - diagram2.append("text").text(title).attr("x", LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 25); - } - const height = box.stopy - box.starty + 2 * conf2.diagramMarginY; - const width = LEFT_MARGIN + box.stopx + 2 * conf2.diagramMarginX; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf2.useMaxWidth); - diagram2.append("line").attr("x1", LEFT_MARGIN).attr("y1", conf2.height * 4).attr("x2", width - LEFT_MARGIN - 4).attr("y2", conf2.height * 4).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); - const extraVertForTitle = title ? 70 : 0; - diagram2.attr("viewBox", `${box.startx} -25 ${width} ${height + extraVertForTitle}`); - diagram2.attr("preserveAspectRatio", "xMinYMin meet"); - diagram2.attr("height", height + extraVertForTitle + 25); -}; -const bounds = { - data: { - startx: void 0, - stopx: void 0, - starty: void 0, - stopy: void 0 - }, - verticalPos: 0, - sequenceItems: [], - init: function() { - this.sequenceItems = []; - this.data = { - startx: void 0, - stopx: void 0, - starty: void 0, - stopy: void 0 - }; - this.verticalPos = 0; - }, - updateVal: function(obj, key, val, fun) { - if (obj[key] === void 0) { - obj[key] = val; - } else { - obj[key] = fun(val, obj[key]); - } - }, - updateBounds: function(startx, starty, stopx, stopy) { - const conf2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; - const _self = this; - let cnt = 0; - function updateFn(type) { - return function updateItemBounds(item) { - cnt++; - const n = _self.sequenceItems.length - cnt + 1; - _self.updateVal(item, "starty", starty - n * conf2.boxMargin, Math.min); - _self.updateVal(item, "stopy", stopy + n * conf2.boxMargin, Math.max); - _self.updateVal(bounds.data, "startx", startx - n * conf2.boxMargin, Math.min); - _self.updateVal(bounds.data, "stopx", stopx + n * conf2.boxMargin, Math.max); - if (!(type === "activation")) { - _self.updateVal(item, "startx", startx - n * conf2.boxMargin, Math.min); - _self.updateVal(item, "stopx", stopx + n * conf2.boxMargin, Math.max); - _self.updateVal(bounds.data, "starty", starty - n * conf2.boxMargin, Math.min); - _self.updateVal(bounds.data, "stopy", stopy + n * conf2.boxMargin, Math.max); - } - }; - } - this.sequenceItems.forEach(updateFn()); - }, - insert: function(startx, starty, stopx, stopy) { - const _startx = Math.min(startx, stopx); - const _stopx = Math.max(startx, stopx); - const _starty = Math.min(starty, stopy); - const _stopy = Math.max(starty, stopy); - this.updateVal(bounds.data, "startx", _startx, Math.min); - this.updateVal(bounds.data, "starty", _starty, Math.min); - this.updateVal(bounds.data, "stopx", _stopx, Math.max); - this.updateVal(bounds.data, "stopy", _stopy, Math.max); - this.updateBounds(_startx, _starty, _stopx, _stopy); - }, - bumpVerticalPos: function(bump) { - this.verticalPos = this.verticalPos + bump; - this.data.stopy = this.verticalPos; - }, - getVerticalPos: function() { - return this.verticalPos; - }, - getBounds: function() { - return this.data; - } -}; -const fills = conf.sectionFills; -const textColours = conf.sectionColours; -const drawTasks = function(diagram2, tasks2, verticalPos) { - const conf2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; - let lastSection = ""; - const sectionVHeight = conf2.height * 2 + conf2.diagramMarginY; - const taskPos = verticalPos + sectionVHeight; - let sectionNumber = 0; - let fill = "#CCC"; - let colour = "black"; - let num = 0; - for (const [i, task] of tasks2.entries()) { - if (lastSection !== task.section) { - fill = fills[sectionNumber % fills.length]; - num = sectionNumber % fills.length; - colour = textColours[sectionNumber % textColours.length]; - let taskInSectionCount = 0; - const currentSection2 = task.section; - for (let taskIndex = i; taskIndex < tasks2.length; taskIndex++) { - if (tasks2[taskIndex].section == currentSection2) { - taskInSectionCount = taskInSectionCount + 1; - } else { - break; - } - } - const section = { - x: i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN, - y: 50, - text: task.section, - fill, - num, - colour, - taskCount: taskInSectionCount - }; - svgDraw.drawSection(diagram2, section, conf2); - lastSection = task.section; - sectionNumber++; - } - const taskActors = task.people.reduce((acc, actorName) => { - if (actors[actorName]) { - acc[actorName] = actors[actorName]; - } - return acc; - }, {}); - task.x = i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN; - task.y = taskPos; - task.width = conf2.diagramMarginX; - task.height = conf2.diagramMarginY; - task.colour = colour; - task.fill = fill; - task.num = num; - task.actors = taskActors; - svgDraw.drawTask(diagram2, task, conf2); - bounds.insert(task.x, task.y, task.x + task.width + conf2.taskMargin, 300 + 5 * 30); - } -}; -const renderer = { - setConf, - draw -}; -const diagram = { - parser: parser$1, - db, - renderer, - styles, - init: (cnf) => { - renderer.setConf(cnf.journey); - db.clear(); - } -}; - - - -/***/ }), - -/***/ 28259: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ a: () => (/* binding */ drawBackgroundRect), -/* harmony export */ b: () => (/* binding */ drawEmbeddedImage), -/* harmony export */ c: () => (/* binding */ drawImage), -/* harmony export */ d: () => (/* binding */ drawRect), -/* harmony export */ e: () => (/* binding */ getTextObj), -/* harmony export */ f: () => (/* binding */ drawText), -/* harmony export */ g: () => (/* binding */ getNoteRect) -/* harmony export */ }); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16750); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); - - -const drawRect = (element, rectData) => { - const rectElement = element.append("rect"); - rectElement.attr("x", rectData.x); - rectElement.attr("y", rectData.y); - rectElement.attr("fill", rectData.fill); - rectElement.attr("stroke", rectData.stroke); - rectElement.attr("width", rectData.width); - rectElement.attr("height", rectData.height); - if (rectData.name) { - rectElement.attr("name", rectData.name); - } - rectData.rx !== void 0 && rectElement.attr("rx", rectData.rx); - rectData.ry !== void 0 && rectElement.attr("ry", rectData.ry); - if (rectData.attrs !== void 0) { - for (const attrKey in rectData.attrs) { - rectElement.attr(attrKey, rectData.attrs[attrKey]); - } - } - rectData.class !== void 0 && rectElement.attr("class", rectData.class); - return rectElement; -}; -const drawBackgroundRect = (element, bounds) => { - const rectData = { - x: bounds.startx, - y: bounds.starty, - width: bounds.stopx - bounds.startx, - height: bounds.stopy - bounds.starty, - fill: bounds.fill, - stroke: bounds.stroke, - class: "rect" - }; - const rectElement = drawRect(element, rectData); - rectElement.lower(); -}; -const drawText = (element, textData) => { - const nText = textData.text.replace(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.J, " "); - const textElem = element.append("text"); - textElem.attr("x", textData.x); - textElem.attr("y", textData.y); - textElem.attr("class", "legend"); - textElem.style("text-anchor", textData.anchor); - textData.class !== void 0 && textElem.attr("class", textData.class); - const tspan = textElem.append("tspan"); - tspan.attr("x", textData.x + textData.textMargin * 2); - tspan.text(nText); - return textElem; -}; -const drawImage = (elem, x, y, link) => { - const imageElement = elem.append("image"); - imageElement.attr("x", x); - imageElement.attr("y", y); - const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Jf)(link); - imageElement.attr("xlink:href", sanitizedLink); -}; -const drawEmbeddedImage = (element, x, y, link) => { - const imageElement = element.append("use"); - imageElement.attr("x", x); - imageElement.attr("y", y); - const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Jf)(link); - imageElement.attr("xlink:href", `#${sanitizedLink}`); -}; -const getNoteRect = () => { - const noteRectData = { - x: 0, - y: 0, - width: 100, - height: 100, - fill: "#EDF2AE", - stroke: "#666", - anchor: "start", - rx: 0, - ry: 0 - }; - return noteRectData; -}; -const getTextObj = () => { - const testObject = { - x: 0, - y: 0, - width: 100, - height: 100, - "text-anchor": "start", - style: "#666", - textMargin: 0, - rx: 0, - ry: 0, - tspan: true - }; - return testObject; -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/426.ae7a4e4d.js b/pr-preview/pr-1594/assets/js/426.ae7a4e4d.js deleted file mode 100644 index a88fb01bb6..0000000000 --- a/pr-preview/pr-1594/assets/js/426.ae7a4e4d.js +++ /dev/null @@ -1,10825 +0,0 @@ -"use strict"; -exports.id = 426; -exports.ids = [426]; -exports.modules = { - -/***/ 21176: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - Zp: () => (/* reexport */ layout) -}); - -// UNUSED EXPORTS: acyclic, normalize, rank - -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js -var uniqueId = __webpack_require__(5664); -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/map.js -var map = __webpack_require__(74722); -// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules -var range = __webpack_require__(91395); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js -var graphlib = __webpack_require__(697); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js -/* - * Simple doubly linked list implementation derived from Cormen, et al., - * "Introduction to Algorithms". - */ - - - -class List { - constructor() { - var sentinel = {}; - sentinel._next = sentinel._prev = sentinel; - this._sentinel = sentinel; - } - dequeue() { - var sentinel = this._sentinel; - var entry = sentinel._prev; - if (entry !== sentinel) { - unlink(entry); - return entry; - } - } - enqueue(entry) { - var sentinel = this._sentinel; - if (entry._prev && entry._next) { - unlink(entry); - } - entry._next = sentinel._next; - sentinel._next._prev = entry; - sentinel._next = entry; - entry._prev = sentinel; - } - toString() { - var strs = []; - var sentinel = this._sentinel; - var curr = sentinel._prev; - while (curr !== sentinel) { - strs.push(JSON.stringify(curr, filterOutLinks)); - curr = curr._prev; - } - return '[' + strs.join(', ') + ']'; - } -} - -function unlink(entry) { - entry._prev._next = entry._next; - entry._next._prev = entry._prev; - delete entry._next; - delete entry._prev; -} - -function filterOutLinks(k, v) { - if (k !== '_next' && k !== '_prev') { - return v; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js - - - - -/* - * A greedy heuristic for finding a feedback arc set for a graph. A feedback - * arc set is a set of edges that can be removed to make a graph acyclic. - * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and - * effective heuristic for the feedback arc set problem." This implementation - * adjusts that from the paper to allow for weighted edges. - */ - - -var DEFAULT_WEIGHT_FN = constant/* default */.A(1); - -function greedyFAS(g, weightFn) { - if (g.nodeCount() <= 1) { - return []; - } - var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); - var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); - - // Expand multi-edges - return flatten/* default */.A( - map/* default */.A(results, function (e) { - return g.outEdges(e.v, e.w); - }) - ); -} - -function doGreedyFAS(g, buckets, zeroIdx) { - var results = []; - var sources = buckets[buckets.length - 1]; - var sinks = buckets[0]; - - var entry; - while (g.nodeCount()) { - while ((entry = sinks.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - while ((entry = sources.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - if (g.nodeCount()) { - for (var i = buckets.length - 2; i > 0; --i) { - entry = buckets[i].dequeue(); - if (entry) { - results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); - break; - } - } - } - } - - return results; -} - -function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { - var results = collectPredecessors ? [] : undefined; - - forEach/* default */.A(g.inEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var uEntry = g.node(edge.v); - - if (collectPredecessors) { - results.push({ v: edge.v, w: edge.w }); - } - - uEntry.out -= weight; - assignBucket(buckets, zeroIdx, uEntry); - }); - - forEach/* default */.A(g.outEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var w = edge.w; - var wEntry = g.node(w); - wEntry['in'] -= weight; - assignBucket(buckets, zeroIdx, wEntry); - }); - - g.removeNode(entry.v); - - return results; -} - -function buildState(g, weightFn) { - var fasGraph = new graphlib/* Graph */.T(); - var maxIn = 0; - var maxOut = 0; - - forEach/* default */.A(g.nodes(), function (v) { - fasGraph.setNode(v, { v: v, in: 0, out: 0 }); - }); - - // Aggregate weights on nodes, but also sum the weights across multi-edges - // into a single edge for the fasGraph. - forEach/* default */.A(g.edges(), function (e) { - var prevWeight = fasGraph.edge(e.v, e.w) || 0; - var weight = weightFn(e); - var edgeWeight = prevWeight + weight; - fasGraph.setEdge(e.v, e.w, edgeWeight); - maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); - maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); - }); - - var buckets = range/* default */.A(maxOut + maxIn + 3).map(function () { - return new List(); - }); - var zeroIdx = maxIn + 1; - - forEach/* default */.A(fasGraph.nodes(), function (v) { - assignBucket(buckets, zeroIdx, fasGraph.node(v)); - }); - - return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; -} - -function assignBucket(buckets, zeroIdx, entry) { - if (!entry.out) { - buckets[0].enqueue(entry); - } else if (!entry['in']) { - buckets[buckets.length - 1].enqueue(entry); - } else { - buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js - - - - - -function run(g) { - var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); - forEach/* default */.A(fas, function (e) { - var label = g.edge(e); - g.removeEdge(e); - label.forwardName = e.name; - label.reversed = true; - g.setEdge(e.w, e.v, label, uniqueId/* default */.A('rev')); - }); - - function weightFn(g) { - return function (e) { - return g.edge(e).weight; - }; - } -} - -function dfsFAS(g) { - var fas = []; - var stack = {}; - var visited = {}; - - function dfs(v) { - if (has/* default */.A(visited, v)) { - return; - } - visited[v] = true; - stack[v] = true; - forEach/* default */.A(g.outEdges(v), function (e) { - if (has/* default */.A(stack, e.w)) { - fas.push(e); - } else { - dfs(e.w); - } - }); - delete stack[v]; - } - - forEach/* default */.A(g.nodes(), dfs); - return fas; -} - -function undo(g) { - forEach/* default */.A(g.edges(), function (e) { - var label = g.edge(e); - if (label.reversed) { - g.removeEdge(e); - - var forwardName = label.forwardName; - delete label.reversed; - delete label.forwardName; - g.setEdge(e.w, e.v, label, forwardName); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules -var merge = __webpack_require__(98879); -// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules -var pick = __webpack_require__(81942); -// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js -var defaults = __webpack_require__(23068); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js - - -/** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ -function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !(0,isSymbol/* default */.A)(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; -} - -/* harmony default export */ const _baseExtremum = (baseExtremum); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js -/** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ -function baseGt(value, other) { - return value > other; -} - -/* harmony default export */ const _baseGt = (baseGt); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js - - - - -/** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ -function max(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseGt) - : undefined; -} - -/* harmony default export */ const lodash_es_max = (max); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; -} - -/* harmony default export */ const lodash_es_last = (last); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js -var _baseAssignValue = __webpack_require__(52528); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js - - - - -/** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ -function mapValues(object, iteratee) { - var result = {}; - iteratee = (0,_baseIteratee/* default */.A)(iteratee, 3); - - (0,_baseForOwn/* default */.A)(object, function(value, key, object) { - (0,_baseAssignValue/* default */.A)(result, key, iteratee(value, key, object)); - }); - return result; -} - -/* harmony default export */ const lodash_es_mapValues = (mapValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js -/** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ -function baseLt(value, other) { - return value < other; -} - -/* harmony default export */ const _baseLt = (baseLt); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js - - - - -/** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ -function min(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_min = (min); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js -var _root = __webpack_require__(41917); -;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js - - -/** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ -var now = function() { - return _root/* default */.A.Date.now(); -}; - -/* harmony default export */ const lodash_es_now = (now); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js - - - - - -/* - * Adds a dummy node to the graph and return v. - */ -function addDummyNode(g, type, attrs, name) { - var v; - do { - v = uniqueId/* default */.A(name); - } while (g.hasNode(v)); - - attrs.dummy = type; - g.setNode(v, attrs); - return v; -} - -/* - * Returns a new graph with only simple edges. Handles aggregation of data - * associated with multi-edges. - */ -function simplify(g) { - var simplified = new graphlib/* Graph */.T().setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - simplified.setNode(v, g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; - var label = g.edge(e); - simplified.setEdge(e.v, e.w, { - weight: simpleLabel.weight + label.weight, - minlen: Math.max(simpleLabel.minlen, label.minlen), - }); - }); - return simplified; -} - -function asNonCompoundGraph(g) { - var simplified = new graphlib/* Graph */.T({ multigraph: g.isMultigraph() }).setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - if (!g.children(v).length) { - simplified.setNode(v, g.node(v)); - } - }); - forEach/* default */.A(g.edges(), function (e) { - simplified.setEdge(e, g.edge(e)); - }); - return simplified; -} - -function successorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var sucs = {}; - _.forEach(g.outEdges(v), function (e) { - sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; - }); - return sucs; - }); - return _.zipObject(g.nodes(), weightMap); -} - -function predecessorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var preds = {}; - _.forEach(g.inEdges(v), function (e) { - preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; - }); - return preds; - }); - return _.zipObject(g.nodes(), weightMap); -} - -/* - * Finds where a line starting at point ({x, y}) would intersect a rectangle - * ({x, y, width, height}) if it were pointing at the rectangle's center. - */ -function intersectRect(rect, point) { - var x = rect.x; - var y = rect.y; - - // Rectangle intersection algorithm from: - // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes - var dx = point.x - x; - var dy = point.y - y; - var w = rect.width / 2; - var h = rect.height / 2; - - if (!dx && !dy) { - throw new Error('Not possible to find intersection inside of the rectangle'); - } - - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - // Intersection is top or bottom of rect. - if (dy < 0) { - h = -h; - } - sx = (h * dx) / dy; - sy = h; - } else { - // Intersection is left or right of rect. - if (dx < 0) { - w = -w; - } - sx = w; - sy = (w * dy) / dx; - } - - return { x: x + sx, y: y + sy }; -} - -/* - * Given a DAG with each node assigned "rank" and "order" properties, this - * function will produce a matrix with the ids of each node. - */ -function buildLayerMatrix(g) { - var layering = map/* default */.A(range/* default */.A(util_maxRank(g) + 1), function () { - return []; - }); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - var rank = node.rank; - if (!isUndefined/* default */.A(rank)) { - layering[rank][node.order] = v; - } - }); - return layering; -} - -/* - * Adjusts the ranks for all nodes in the graph such that all nodes v have - * rank(v) >= 0 and at least one node w has rank(w) = 0. - */ -function normalizeRanks(g) { - var min = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (has/* default */.A(node, 'rank')) { - node.rank -= min; - } - }); -} - -function removeEmptyRanks(g) { - // Ranks may not start at 0, so we need to offset them - var offset = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - - var layers = []; - forEach/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank - offset; - if (!layers[rank]) { - layers[rank] = []; - } - layers[rank].push(v); - }); - - var delta = 0; - var nodeRankFactor = g.graph().nodeRankFactor; - forEach/* default */.A(layers, function (vs, i) { - if (isUndefined/* default */.A(vs) && i % nodeRankFactor !== 0) { - --delta; - } else if (delta) { - forEach/* default */.A(vs, function (v) { - g.node(v).rank += delta; - }); - } - }); -} - -function addBorderNode(g, prefix, rank, order) { - var node = { - width: 0, - height: 0, - }; - if (arguments.length >= 4) { - node.rank = rank; - node.order = order; - } - return addDummyNode(g, 'border', node, prefix); -} - -function util_maxRank(g) { - return lodash_es_max( - map/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank; - if (!isUndefined/* default */.A(rank)) { - return rank; - } - }) - ); -} - -/* - * Partition a collection into two groups: `lhs` and `rhs`. If the supplied - * function returns true for an entry it goes into `lhs`. Otherwise it goes - * into `rhs. - */ -function partition(collection, fn) { - var result = { lhs: [], rhs: [] }; - forEach/* default */.A(collection, function (value) { - if (fn(value)) { - result.lhs.push(value); - } else { - result.rhs.push(value); - } - }); - return result; -} - -/* - * Returns a new function that wraps `fn` with a timer. The wrapper logs the - * time it takes to execute the function. - */ -function util_time(name, fn) { - var start = lodash_es_now(); - try { - return fn(); - } finally { - console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); - } -} - -function notime(name, fn) { - return fn(); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js - - - - - -function addBorderSegments(g) { - function dfs(v) { - var children = g.children(v); - var node = g.node(v); - if (children.length) { - forEach/* default */.A(children, dfs); - } - - if (has/* default */.A(node, 'minRank')) { - node.borderLeft = []; - node.borderRight = []; - for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { - add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); - add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); - } - } - } - - forEach/* default */.A(g.children(), dfs); -} - -function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { - var label = { width: 0, height: 0, rank: rank, borderType: prop }; - var prev = sgNode[prop][rank - 1]; - var curr = addDummyNode(g, 'border', label, prefix); - sgNode[prop][rank] = curr; - g.setParent(curr, sg); - if (prev) { - g.setEdge(prev, curr, { weight: 1 }); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js - - - - -function adjust(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'lr' || rankDir === 'rl') { - swapWidthHeight(g); - } -} - -function coordinate_system_undo(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'bt' || rankDir === 'rl') { - reverseY(g); - } - - if (rankDir === 'lr' || rankDir === 'rl') { - swapXY(g); - swapWidthHeight(g); - } -} - -function swapWidthHeight(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapWidthHeightOne(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - swapWidthHeightOne(g.edge(e)); - }); -} - -function swapWidthHeightOne(attrs) { - var w = attrs.width; - attrs.width = attrs.height; - attrs.height = w; -} - -function reverseY(g) { - forEach/* default */.A(g.nodes(), function (v) { - reverseYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, reverseYOne); - if (has/* default */.A(edge, 'y')) { - reverseYOne(edge); - } - }); -} - -function reverseYOne(attrs) { - attrs.y = -attrs.y; -} - -function swapXY(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapXYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, swapXYOne); - if (has/* default */.A(edge, 'x')) { - swapXYOne(edge); - } - }); -} - -function swapXYOne(attrs) { - var x = attrs.x; - attrs.x = attrs.y; - attrs.y = x; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js - - - - - -/* - * Breaks any long edges in the graph into short segments that span 1 layer - * each. This operation is undoable with the denormalize function. - * - * Pre-conditions: - * - * 1. The input graph is a DAG. - * 2. Each node in the graph has a "rank" property. - * - * Post-condition: - * - * 1. All edges in the graph have a length of 1. - * 2. Dummy nodes are added where edges have been split into segments. - * 3. The graph is augmented with a "dummyChains" attribute which contains - * the first dummy in each chain of dummy nodes produced. - */ -function normalize_run(g) { - g.graph().dummyChains = []; - forEach/* default */.A(g.edges(), function (edge) { - normalizeEdge(g, edge); - }); -} - -function normalizeEdge(g, e) { - var v = e.v; - var vRank = g.node(v).rank; - var w = e.w; - var wRank = g.node(w).rank; - var name = e.name; - var edgeLabel = g.edge(e); - var labelRank = edgeLabel.labelRank; - - if (wRank === vRank + 1) return; - - g.removeEdge(e); - - var dummy, attrs, i; - for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { - edgeLabel.points = []; - attrs = { - width: 0, - height: 0, - edgeLabel: edgeLabel, - edgeObj: e, - rank: vRank, - }; - dummy = addDummyNode(g, 'edge', attrs, '_d'); - if (vRank === labelRank) { - attrs.width = edgeLabel.width; - attrs.height = edgeLabel.height; - // @ts-expect-error - attrs.dummy = 'edge-label'; - // @ts-expect-error - attrs.labelpos = edgeLabel.labelpos; - } - g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); - if (i === 0) { - g.graph().dummyChains.push(dummy); - } - v = dummy; - } - - g.setEdge(v, w, { weight: edgeLabel.weight }, name); -} - -function normalize_undo(g) { - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var origLabel = node.edgeLabel; - var w; - g.setEdge(node.edgeObj, origLabel); - while (node.dummy) { - w = g.successors(v)[0]; - g.removeNode(v); - origLabel.points.push({ x: node.x, y: node.y }); - if (node.dummy === 'edge-label') { - origLabel.x = node.x; - origLabel.y = node.y; - origLabel.width = node.width; - origLabel.height = node.height; - } - v = w; - node = g.node(v); - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js - - - - -/** - * This method is like `_.min` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * the value is ranked. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Math - * @param {Array} array The array to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {*} Returns the minimum value. - * @example - * - * var objects = [{ 'n': 1 }, { 'n': 2 }]; - * - * _.minBy(objects, function(o) { return o.n; }); - * // => { 'n': 1 } - * - * // The `_.property` iteratee shorthand. - * _.minBy(objects, 'n'); - * // => { 'n': 1 } - */ -function minBy(array, iteratee) { - return (array && array.length) - ? _baseExtremum(array, (0,_baseIteratee/* default */.A)(iteratee, 2), _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_minBy = (minBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js - - - - -/* - * Initializes ranks for the input graph using the longest path algorithm. This - * algorithm scales well and is fast in practice, it yields rather poor - * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom - * ranks wide and leaving edges longer than necessary. However, due to its - * speed, this algorithm is good for getting an initial ranking that can be fed - * into other algorithms. - * - * This algorithm does not normalize layers because it will be used by other - * algorithms in most cases. If using this algorithm directly, be sure to - * run normalize at the end. - * - * Pre-conditions: - * - * 1. Input graph is a DAG. - * 2. Input graph node labels can be assigned properties. - * - * Post-conditions: - * - * 1. Each node will be assign an (unnormalized) "rank" property. - */ -function longestPath(g) { - var visited = {}; - - function dfs(v) { - var label = g.node(v); - if (has/* default */.A(visited, v)) { - return label.rank; - } - visited[v] = true; - - var rank = lodash_es_min( - map/* default */.A(g.outEdges(v), function (e) { - return dfs(e.w) - g.edge(e).minlen; - }) - ); - - if ( - rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 - rank === undefined || // return value of _.map([]) for Lodash 4 - rank === null - ) { - // return value of _.map([null]) - rank = 0; - } - - return (label.rank = rank); - } - - forEach/* default */.A(g.sources(), dfs); -} - -/* - * Returns the amount of slack for the given edge. The slack is defined as the - * difference between the length of the edge and its minimum length. - */ -function slack(g, e) { - return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js - - - - - - -/* - * Constructs a spanning tree with tight edges and adjusted the input node's - * ranks to achieve this. A tight edge is one that is has a length that matches - * its "minlen" attribute. - * - * The basic structure for this function is derived from Gansner, et al., "A - * Technique for Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a DAG. - * 2. Graph must be connected. - * 3. Graph must have at least one node. - * 5. Graph nodes must have been previously assigned a "rank" property that - * respects the "minlen" property of incident edges. - * 6. Graph edges must have a "minlen" property. - * - * Post-conditions: - * - * - Graph nodes will have their rank adjusted to ensure that all edges are - * tight. - * - * Returns a tree (undirected graph) that is constructed using only "tight" - * edges. - */ -function feasibleTree(g) { - var t = new graphlib/* Graph */.T({ directed: false }); - - // Choose arbitrary node from which to start our tree - var start = g.nodes()[0]; - var size = g.nodeCount(); - t.setNode(start, {}); - - var edge, delta; - while (tightTree(t, g) < size) { - edge = findMinSlackEdge(t, g); - delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); - shiftRanks(t, g, delta); - } - - return t; -} - -/* - * Finds a maximal tree of tight edges and returns the number of nodes in the - * tree. - */ -function tightTree(t, g) { - function dfs(v) { - forEach/* default */.A(g.nodeEdges(v), function (e) { - var edgeV = e.v, - w = v === edgeV ? e.w : edgeV; - if (!t.hasNode(w) && !slack(g, e)) { - t.setNode(w, {}); - t.setEdge(v, w, {}); - dfs(w); - } - }); - } - - forEach/* default */.A(t.nodes(), dfs); - return t.nodeCount(); -} - -/* - * Finds the edge with the smallest slack that is incident on tree and returns - * it. - */ -function findMinSlackEdge(t, g) { - return lodash_es_minBy(g.edges(), function (e) { - if (t.hasNode(e.v) !== t.hasNode(e.w)) { - return slack(g, e); - } - }); -} - -function shiftRanks(t, g, delta) { - forEach/* default */.A(t.nodes(), function (v) { - g.node(v).rank += delta; - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js - - - - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!(0,isArrayLike/* default */.A)(collection)) { - var iteratee = (0,_baseIteratee/* default */.A)(predicate, 3); - collection = (0,keys/* default */.A)(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; -} - -/* harmony default export */ const _createFind = (createFind); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js - - -/** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ -function toInteger(value) { - var result = (0,toFinite/* default */.A)(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; -} - -/* harmony default export */ const lodash_es_toInteger = (toInteger); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return (0,_baseFindIndex/* default */.A)(array, (0,_baseIteratee/* default */.A)(predicate, 3), index); -} - -/* harmony default export */ const lodash_es_findIndex = (findIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js - - - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = _createFind(lodash_es_findIndex); - -/* harmony default export */ const lodash_es_find = (find); - -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js - - - - - -var DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function dijkstra_dijkstra(g, source, weightFn, edgeFn) { - return runDijkstra( - g, - String(source), - weightFn || DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runDijkstra(g, source, weightFn, edgeFn) { - var results = {}; - var pq = new PriorityQueue(); - var v, vEntry; - - var updateNeighbors = function (edge) { - var w = edge.v !== v ? edge.v : edge.w; - var wEntry = results[w]; - var weight = weightFn(edge); - var distance = vEntry.distance + weight; - - if (weight < 0) { - throw new Error( - 'dijkstra does not allow negative edge weights. ' + - 'Bad edge: ' + - edge + - ' Weight: ' + - weight - ); - } - - if (distance < wEntry.distance) { - wEntry.distance = distance; - wEntry.predecessor = v; - pq.decrease(w, distance); - } - }; - - g.nodes().forEach(function (v) { - var distance = v === source ? 0 : Number.POSITIVE_INFINITY; - results[v] = { distance: distance }; - pq.add(v, distance); - }); - - while (pq.size() > 0) { - v = pq.removeMin(); - vEntry = results[v]; - if (vEntry.distance === Number.POSITIVE_INFINITY) { - break; - } - - edgeFn(v).forEach(updateNeighbors); - } - - return results; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js - - - - - -function dijkstraAll(g, weightFunc, edgeFunc) { - return _.transform( - g.nodes(), - function (acc, v) { - acc[v] = dijkstra(g, v, weightFunc, edgeFunc); - }, - {} - ); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js - - - - -var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function floydWarshall(g, weightFn, edgeFn) { - return runFloydWarshall( - g, - weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runFloydWarshall(g, weightFn, edgeFn) { - var results = {}; - var nodes = g.nodes(); - - nodes.forEach(function (v) { - results[v] = {}; - results[v][v] = { distance: 0 }; - nodes.forEach(function (w) { - if (v !== w) { - results[v][w] = { distance: Number.POSITIVE_INFINITY }; - } - }); - edgeFn(v).forEach(function (edge) { - var w = edge.v === v ? edge.w : edge.v; - var d = weightFn(edge); - results[v][w] = { distance: d, predecessor: v }; - }); - }); - - nodes.forEach(function (k) { - var rowK = results[k]; - nodes.forEach(function (i) { - var rowI = results[i]; - nodes.forEach(function (j) { - var ik = rowI[k]; - var kj = rowK[j]; - var ij = rowI[j]; - var altDistance = ik.distance + kj.distance; - if (altDistance < ij.distance) { - ij.distance = altDistance; - ij.predecessor = kj.predecessor; - } - }); - }); - }); - - return results; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules -var _baseKeys = __webpack_require__(69471); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules -var _baseGetTag = __webpack_require__(88496); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js - - - - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!(0,isArray/* default */.A)(value) && (0,isObjectLike/* default */.A)(value) && (0,_baseGetTag/* default */.A)(value) == stringTag); -} - -/* harmony default export */ const lodash_es_isString = (isString); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js - - -/** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -var asciiSize = (0,_baseProperty/* default */.A)('length'); - -/* harmony default export */ const _asciiSize = (asciiSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -/* harmony default export */ const _hasUnicode = (hasUnicode); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js -/** Used to compose unicode character classes. */ -var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', - _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', - _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', - _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', - _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, - _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', - rsCombo = '[' + _unicodeSize_rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - _unicodeSize_rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', - rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; -} - -/* harmony default export */ const _unicodeSize = (unicodeSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js - - - - -/** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ -function stringSize(string) { - return _hasUnicode(string) - ? _unicodeSize(string) - : _asciiSize(string); -} - -/* harmony default export */ const _stringSize = (stringSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js - - - - - - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ -function size(collection) { - if (collection == null) { - return 0; - } - if ((0,isArrayLike/* default */.A)(collection)) { - return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; - } - var tag = (0,_getTag/* default */.A)(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return (0,_baseKeys/* default */.A)(collection).length; -} - -/* harmony default export */ const lodash_es_size = (size); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js - - - - -topsort_topsort.CycleException = topsort_CycleException; - -function topsort_topsort(g) { - var visited = {}; - var stack = {}; - var results = []; - - function visit(node) { - if (has/* default */.A(stack, node)) { - throw new topsort_CycleException(); - } - - if (!has/* default */.A(visited, node)) { - stack[node] = true; - visited[node] = true; - forEach/* default */.A(g.predecessors(node), visit); - delete stack[node]; - results.push(node); - } - } - - forEach/* default */.A(g.sinks(), visit); - - if (lodash_es_size(visited) !== g.nodeCount()) { - throw new topsort_CycleException(); - } - - return results; -} - -function topsort_CycleException() {} -topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js - - - - -function isAcyclic(g) { - try { - topsort(g); - } catch (e) { - if (e instanceof CycleException) { - return false; - } - throw e; - } - return true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js - - - - -/* - * A helper that preforms a pre- or post-order traversal on the input graph - * and returns the nodes in the order they were visited. If the graph is - * undirected then this algorithm will navigate using neighbors. If the graph - * is directed then this algorithm will navigate using successors. - * - * Order must be one of "pre" or "post". - */ -function dfs(g, vs, order) { - if (!isArray/* default */.A(vs)) { - vs = [vs]; - } - - var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); - - var acc = []; - var visited = {}; - forEach/* default */.A(vs, function (v) { - if (!g.hasNode(v)) { - throw new Error('Graph does not have node: ' + v); - } - - doDfs(g, v, order === 'post', visited, navigation, acc); - }); - return acc; -} - -function doDfs(g, v, postorder, visited, navigation, acc) { - if (!has/* default */.A(visited, v)) { - visited[v] = true; - - if (!postorder) { - acc.push(v); - } - forEach/* default */.A(navigation(v), function (w) { - doDfs(g, w, postorder, visited, navigation, acc); - }); - if (postorder) { - acc.push(v); - } - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js - - - - -function postorder(g, vs) { - return dfs(g, vs, 'post'); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js - - - - -function preorder(g, vs) { - return dfs(g, vs, 'pre'); -} - -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules -var graph = __webpack_require__(73046); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js - - - - - - -function prim(g, weightFunc) { - var result = new Graph(); - var parents = {}; - var pq = new PriorityQueue(); - var v; - - function updateNeighbors(edge) { - var w = edge.v === v ? edge.w : edge.v; - var pri = pq.priority(w); - if (pri !== undefined) { - var edgeWeight = weightFunc(edge); - if (edgeWeight < pri) { - parents[w] = v; - pq.decrease(w, edgeWeight); - } - } - } - - if (g.nodeCount() === 0) { - return result; - } - - _.each(g.nodes(), function (v) { - pq.add(v, Number.POSITIVE_INFINITY); - result.setNode(v); - }); - - // Start from an arbitrary node - pq.decrease(g.nodes()[0], 0); - - var init = false; - while (pq.size() > 0) { - v = pq.removeMin(); - if (_.has(parents, v)) { - result.setEdge(v, parents[v]); - } else if (init) { - throw new Error('Input graph is not connected: ' + g); - } else { - init = true; - } - - g.nodeEdges(v).forEach(updateNeighbors); - } - - return result; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js - - - - - - - - - - - - - - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js - - - - - - - - -// Expose some internals for testing purposes -networkSimplex.initLowLimValues = initLowLimValues; -networkSimplex.initCutValues = initCutValues; -networkSimplex.calcCutValue = calcCutValue; -networkSimplex.leaveEdge = leaveEdge; -networkSimplex.enterEdge = enterEdge; -networkSimplex.exchangeEdges = exchangeEdges; - -/* - * The network simplex algorithm assigns ranks to each node in the input graph - * and iteratively improves the ranking to reduce the length of edges. - * - * Preconditions: - * - * 1. The input graph must be a DAG. - * 2. All nodes in the graph must have an object value. - * 3. All edges in the graph must have "minlen" and "weight" attributes. - * - * Postconditions: - * - * 1. All nodes in the graph will have an assigned "rank" attribute that has - * been optimized by the network simplex algorithm. Ranks start at 0. - * - * - * A rough sketch of the algorithm is as follows: - * - * 1. Assign initial ranks to each node. We use the longest path algorithm, - * which assigns ranks to the lowest position possible. In general this - * leads to very wide bottom ranks and unnecessarily long edges. - * 2. Construct a feasible tight tree. A tight tree is one such that all - * edges in the tree have no slack (difference between length of edge - * and minlen for the edge). This by itself greatly improves the assigned - * rankings by shorting edges. - * 3. Iteratively find edges that have negative cut values. Generally a - * negative cut value indicates that the edge could be removed and a new - * tree edge could be added to produce a more compact graph. - * - * Much of the algorithms here are derived from Gansner, et al., "A Technique - * for Drawing Directed Graphs." The structure of the file roughly follows the - * structure of the overall algorithm. - */ -function networkSimplex(g) { - g = simplify(g); - longestPath(g); - var t = feasibleTree(g); - initLowLimValues(t); - initCutValues(t, g); - - var e, f; - while ((e = leaveEdge(t))) { - f = enterEdge(t, g, e); - exchangeEdges(t, g, e, f); - } -} - -/* - * Initializes cut values for all edges in the tree. - */ -function initCutValues(t, g) { - var vs = postorder(t, t.nodes()); - vs = vs.slice(0, vs.length - 1); - forEach/* default */.A(vs, function (v) { - assignCutValue(t, g, v); - }); -} - -function assignCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - t.edge(child, parent).cutvalue = calcCutValue(t, g, child); -} - -/* - * Given the tight tree, its graph, and a child in the graph calculate and - * return the cut value for the edge between the child and its parent. - */ -function calcCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - // True if the child is on the tail end of the edge in the directed graph - var childIsTail = true; - // The graph's view of the tree edge we're inspecting - var graphEdge = g.edge(child, parent); - // The accumulated cut value for the edge between this node and its parent - var cutValue = 0; - - if (!graphEdge) { - childIsTail = false; - graphEdge = g.edge(parent, child); - } - - cutValue = graphEdge.weight; - - forEach/* default */.A(g.nodeEdges(child), function (e) { - var isOutEdge = e.v === child, - other = isOutEdge ? e.w : e.v; - - if (other !== parent) { - var pointsToHead = isOutEdge === childIsTail, - otherWeight = g.edge(e).weight; - - cutValue += pointsToHead ? otherWeight : -otherWeight; - if (isTreeEdge(t, child, other)) { - var otherCutValue = t.edge(child, other).cutvalue; - cutValue += pointsToHead ? -otherCutValue : otherCutValue; - } - } - }); - - return cutValue; -} - -function initLowLimValues(tree, root) { - if (arguments.length < 2) { - root = tree.nodes()[0]; - } - dfsAssignLowLim(tree, {}, 1, root); -} - -function dfsAssignLowLim(tree, visited, nextLim, v, parent) { - var low = nextLim; - var label = tree.node(v); - - visited[v] = true; - forEach/* default */.A(tree.neighbors(v), function (w) { - if (!has/* default */.A(visited, w)) { - nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); - } - }); - - label.low = low; - label.lim = nextLim++; - if (parent) { - label.parent = parent; - } else { - // TODO should be able to remove this when we incrementally update low lim - delete label.parent; - } - - return nextLim; -} - -function leaveEdge(tree) { - return lodash_es_find(tree.edges(), function (e) { - return tree.edge(e).cutvalue < 0; - }); -} - -function enterEdge(t, g, edge) { - var v = edge.v; - var w = edge.w; - - // For the rest of this function we assume that v is the tail and w is the - // head, so if we don't have this edge in the graph we should flip it to - // match the correct orientation. - if (!g.hasEdge(v, w)) { - v = edge.w; - w = edge.v; - } - - var vLabel = t.node(v); - var wLabel = t.node(w); - var tailLabel = vLabel; - var flip = false; - - // If the root is in the tail of the edge then we need to flip the logic that - // checks for the head and tail nodes in the candidates function below. - if (vLabel.lim > wLabel.lim) { - tailLabel = wLabel; - flip = true; - } - - var candidates = filter/* default */.A(g.edges(), function (edge) { - return ( - flip === isDescendant(t, t.node(edge.v), tailLabel) && - flip !== isDescendant(t, t.node(edge.w), tailLabel) - ); - }); - - return lodash_es_minBy(candidates, function (edge) { - return slack(g, edge); - }); -} - -function exchangeEdges(t, g, e, f) { - var v = e.v; - var w = e.w; - t.removeEdge(v, w); - t.setEdge(f.v, f.w, {}); - initLowLimValues(t); - initCutValues(t, g); - updateRanks(t, g); -} - -function updateRanks(t, g) { - var root = lodash_es_find(t.nodes(), function (v) { - return !g.node(v).parent; - }); - var vs = preorder(t, root); - vs = vs.slice(1); - forEach/* default */.A(vs, function (v) { - var parent = t.node(v).parent, - edge = g.edge(v, parent), - flipped = false; - - if (!edge) { - edge = g.edge(parent, v); - flipped = true; - } - - g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); - }); -} - -/* - * Returns true if the edge is in the tree. - */ -function isTreeEdge(tree, u, v) { - return tree.hasEdge(u, v); -} - -/* - * Returns true if the specified node is descendant of the root node per the - * assigned low and lim attributes in the tree. - */ -function isDescendant(tree, vLabel, rootLabel) { - return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js - - - - - - -/* - * Assigns a rank to each node in the input graph that respects the "minlen" - * constraint specified on edges between nodes. - * - * This basic structure is derived from Gansner, et al., "A Technique for - * Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a connected DAG - * 2. Graph nodes must be objects - * 3. Graph edges must have "weight" and "minlen" attributes - * - * Post-conditions: - * - * 1. Graph nodes will have a "rank" attribute based on the results of the - * algorithm. Ranks can start at any index (including negative), we'll - * fix them up later. - */ -function rank(g) { - switch (g.graph().ranker) { - case 'network-simplex': - networkSimplexRanker(g); - break; - case 'tight-tree': - tightTreeRanker(g); - break; - case 'longest-path': - longestPathRanker(g); - break; - default: - networkSimplexRanker(g); - } -} - -// A fast and simple ranker, but results are far from optimal. -var longestPathRanker = longestPath; - -function tightTreeRanker(g) { - longestPath(g); - feasibleTree(g); -} - -function networkSimplexRanker(g) { - networkSimplex(g); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js - - - - - -/* - * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, - * adds appropriate edges to ensure that all cluster nodes are placed between - * these boundries, and ensures that the graph is connected. - * - * In addition we ensure, through the use of the minlen property, that nodes - * and subgraph border nodes to not end up on the same rank. - * - * Preconditions: - * - * 1. Input graph is a DAG - * 2. Nodes in the input graph has a minlen attribute - * - * Postconditions: - * - * 1. Input graph is connected. - * 2. Dummy nodes are added for the tops and bottoms of subgraphs. - * 3. The minlen attribute for nodes is adjusted to ensure nodes do not - * get placed on the same rank as subgraph border nodes. - * - * The nesting graph idea comes from Sander, "Layout of Compound Directed - * Graphs." - */ -function nesting_graph_run(g) { - var root = addDummyNode(g, 'root', {}, '_root'); - var depths = treeDepths(g); - var height = lodash_es_max(values/* default */.A(depths)) - 1; // Note: depths is an Object not an array - var nodeSep = 2 * height + 1; - - g.graph().nestingRoot = root; - - // Multiply minlen by nodeSep to align nodes on non-border ranks. - forEach/* default */.A(g.edges(), function (e) { - g.edge(e).minlen *= nodeSep; - }); - - // Calculate a weight that is sufficient to keep subgraphs vertically compact - var weight = sumWeights(g) + 1; - - // Create border nodes and link them up - forEach/* default */.A(g.children(), function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - }); - - // Save the multiplier for node layers for later removal of empty border - // layers. - g.graph().nodeRankFactor = nodeSep; -} - -function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { - var children = g.children(v); - if (!children.length) { - if (v !== root) { - g.setEdge(root, v, { weight: 0, minlen: nodeSep }); - } - return; - } - - var top = addBorderNode(g, '_bt'); - var bottom = addBorderNode(g, '_bb'); - var label = g.node(v); - - g.setParent(top, v); - label.borderTop = top; - g.setParent(bottom, v); - label.borderBottom = bottom; - - forEach/* default */.A(children, function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - - var childNode = g.node(child); - var childTop = childNode.borderTop ? childNode.borderTop : child; - var childBottom = childNode.borderBottom ? childNode.borderBottom : child; - var thisWeight = childNode.borderTop ? weight : 2 * weight; - var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; - - g.setEdge(top, childTop, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - - g.setEdge(childBottom, bottom, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - }); - - if (!g.parent(v)) { - g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); - } -} - -function treeDepths(g) { - var depths = {}; - function dfs(v, depth) { - var children = g.children(v); - if (children && children.length) { - forEach/* default */.A(children, function (child) { - dfs(child, depth + 1); - }); - } - depths[v] = depth; - } - forEach/* default */.A(g.children(), function (v) { - dfs(v, 1); - }); - return depths; -} - -function sumWeights(g) { - return reduce/* default */.A( - g.edges(), - function (acc, e) { - return acc + g.edge(e).weight; - }, - 0 - ); -} - -function cleanup(g) { - var graphLabel = g.graph(); - g.removeNode(graphLabel.nestingRoot); - delete graphLabel.nestingRoot; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.nestingEdge) { - g.removeEdge(e); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules -var _baseClone = __webpack_require__(91641); -;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return (0,_baseClone/* default */.A)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js - - - - -function addSubgraphConstraints(g, cg, vs) { - var prev = {}, - rootPrev; - - forEach/* default */.A(vs, function (v) { - var child = g.parent(v), - parent, - prevChild; - while (child) { - parent = g.parent(child); - if (parent) { - prevChild = prev[parent]; - prev[parent] = child; - } else { - prevChild = rootPrev; - rootPrev = child; - } - if (prevChild && prevChild !== child) { - cg.setEdge(prevChild, child); - return; - } - child = parent; - } - }); - - /* - function dfs(v) { - var children = v ? g.children(v) : g.children(); - if (children.length) { - var min = Number.POSITIVE_INFINITY, - subgraphs = []; - _.each(children, function(child) { - var childMin = dfs(child); - if (g.children(child).length) { - subgraphs.push({ v: child, order: childMin }); - } - min = Math.min(min, childMin); - }); - _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { - cg.setEdge(prev.v, curr.v); - return curr; - }); - return min; - } - return g.node(v).order; - } - dfs(undefined); - */ -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js - - - - - -/* - * Constructs a graph that can be used to sort a layer of nodes. The graph will - * contain all base and subgraph nodes from the request layer in their original - * hierarchy and any edges that are incident on these nodes and are of the type - * requested by the "relationship" parameter. - * - * Nodes from the requested rank that do not have parents are assigned a root - * node in the output graph, which is set in the root graph attribute. This - * makes it easy to walk the hierarchy of movable nodes during ordering. - * - * Pre-conditions: - * - * 1. Input graph is a DAG - * 2. Base nodes in the input graph have a rank attribute - * 3. Subgraph nodes in the input graph has minRank and maxRank attributes - * 4. Edges have an assigned weight - * - * Post-conditions: - * - * 1. Output graph has all nodes in the movable rank with preserved - * hierarchy. - * 2. Root nodes in the movable layer are made children of the node - * indicated by the root attribute of the graph. - * 3. Non-movable nodes incident on movable nodes, selected by the - * relationship parameter, are included in the graph (without hierarchy). - * 4. Edges incident on movable nodes, selected by the relationship - * parameter, are added to the output graph. - * 5. The weights for copied edges are aggregated as need, since the output - * graph is not a multi-graph. - */ -function buildLayerGraph(g, rank, relationship) { - var root = createRootNode(g), - result = new graphlib/* Graph */.T({ compound: true }) - .setGraph({ root: root }) - .setDefaultNodeLabel(function (v) { - return g.node(v); - }); - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v), - parent = g.parent(v); - - if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { - result.setNode(v); - result.setParent(v, parent || root); - - // This assumes we have only short edges! - forEach/* default */.A(g[relationship](v), function (e) { - var u = e.v === v ? e.w : e.v, - edge = result.edge(u, v), - weight = !isUndefined/* default */.A(edge) ? edge.weight : 0; - result.setEdge(u, v, { weight: g.edge(e).weight + weight }); - }); - - if (has/* default */.A(node, 'minRank')) { - result.setNode(v, { - borderLeft: node.borderLeft[rank], - borderRight: node.borderRight[rank], - }); - } - } - }); - - return result; -} - -function createRootNode(g) { - var v; - while (g.hasNode((v = uniqueId/* default */.A('_root')))); - return v; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js -/** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ -function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; -} - -/* harmony default export */ const _baseZipObject = (baseZipObject); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js - - - -/** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ -function zipObject(props, values) { - return _baseZipObject(props || [], values || [], _assignValue/* default */.A); -} - -/* harmony default export */ const lodash_es_zipObject = (zipObject); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js -var _baseMap = __webpack_require__(52568); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js -/** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ -function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; -} - -/* harmony default export */ const _baseSortBy = (baseSortBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js - - -/** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ -function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = (0,isSymbol/* default */.A)(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = (0,isSymbol/* default */.A)(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; -} - -/* harmony default export */ const _compareAscending = (compareAscending); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js - - -/** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ -function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = _compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; -} - -/* harmony default export */ const _compareMultiple = (compareMultiple); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js - - - - - - - - - - -/** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ -function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - if ((0,isArray/* default */.A)(iteratee)) { - return function(value) { - return (0,_baseGet/* default */.A)(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } - } - return iteratee; - }); - } else { - iteratees = [identity/* default */.A]; - } - - var index = -1; - iteratees = (0,_arrayMap/* default */.A)(iteratees, (0,_baseUnary/* default */.A)(_baseIteratee/* default */.A)); - - var result = (0,_baseMap/* default */.A)(collection, function(value, key, collection) { - var criteria = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return _baseSortBy(result, function(object, other) { - return _compareMultiple(object, other, orders); - }); -} - -/* harmony default export */ const _baseOrderBy = (baseOrderBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js - - - - - -/** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 30 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] - */ -var sortBy = (0,_baseRest/* default */.A)(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && (0,_isIterateeCall/* default */.A)(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && (0,_isIterateeCall/* default */.A)(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return _baseOrderBy(collection, (0,_baseFlatten/* default */.A)(iteratees, 1), []); -}); - -/* harmony default export */ const lodash_es_sortBy = (sortBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js - - - - -/* - * A function that takes a layering (an array of layers, each with an array of - * ordererd nodes) and a graph and returns a weighted crossing count. - * - * Pre-conditions: - * - * 1. Input graph must be simple (not a multigraph), directed, and include - * only simple edges. - * 2. Edges in the input graph must have assigned weights. - * - * Post-conditions: - * - * 1. The graph and layering matrix are left unchanged. - * - * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." - */ -function crossCount(g, layering) { - var cc = 0; - for (var i = 1; i < layering.length; ++i) { - cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); - } - return cc; -} - -function twoLayerCrossCount(g, northLayer, southLayer) { - // Sort all of the edges between the north and south layers by their position - // in the north layer and then the south. Map these edges to the position of - // their head in the south layer. - var southPos = lodash_es_zipObject( - southLayer, - map/* default */.A(southLayer, function (v, i) { - return i; - }) - ); - var southEntries = flatten/* default */.A( - map/* default */.A(northLayer, function (v) { - return lodash_es_sortBy( - map/* default */.A(g.outEdges(v), function (e) { - return { pos: southPos[e.w], weight: g.edge(e).weight }; - }), - 'pos' - ); - }) - ); - - // Build the accumulator tree - var firstIndex = 1; - while (firstIndex < southLayer.length) firstIndex <<= 1; - var treeSize = 2 * firstIndex - 1; - firstIndex -= 1; - var tree = map/* default */.A(new Array(treeSize), function () { - return 0; - }); - - // Calculate the weighted crossings - var cc = 0; - forEach/* default */.A( - // @ts-expect-error - southEntries.forEach(function (entry) { - var index = entry.pos + firstIndex; - tree[index] += entry.weight; - var weightSum = 0; - // @ts-expect-error - while (index > 0) { - // @ts-expect-error - if (index % 2) { - weightSum += tree[index + 1]; - } - // @ts-expect-error - index = (index - 1) >> 1; - tree[index] += entry.weight; - } - cc += entry.weight * weightSum; - }) - ); - - return cc; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js - - - - -/* - * Assigns an initial order value for each node by performing a DFS search - * starting from nodes in the first rank. Nodes are assigned an order in their - * rank as they are first visited. - * - * This approach comes from Gansner, et al., "A Technique for Drawing Directed - * Graphs." - * - * Returns a layering matrix with an array per layer and each layer sorted by - * the order of its nodes. - */ -function initOrder(g) { - var visited = {}; - var simpleNodes = filter/* default */.A(g.nodes(), function (v) { - return !g.children(v).length; - }); - var maxRank = lodash_es_max( - map/* default */.A(simpleNodes, function (v) { - return g.node(v).rank; - }) - ); - var layers = map/* default */.A(range/* default */.A(maxRank + 1), function () { - return []; - }); - - function dfs(v) { - if (has/* default */.A(visited, v)) return; - visited[v] = true; - var node = g.node(v); - layers[node.rank].push(v); - forEach/* default */.A(g.successors(v), dfs); - } - - var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { - return g.node(v).rank; - }); - forEach/* default */.A(orderedVs, dfs); - - return layers; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js - - - - -function barycenter(g, movable) { - return map/* default */.A(movable, function (v) { - var inV = g.inEdges(v); - if (!inV.length) { - return { v: v }; - } else { - var result = reduce/* default */.A( - inV, - function (acc, e) { - var edge = g.edge(e), - nodeU = g.node(e.v); - return { - sum: acc.sum + edge.weight * nodeU.order, - weight: acc.weight + edge.weight, - }; - }, - { sum: 0, weight: 0 } - ); - - return { - v: v, - barycenter: result.sum / result.weight, - weight: result.weight, - }; - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js - - - - -/* - * Given a list of entries of the form {v, barycenter, weight} and a - * constraint graph this function will resolve any conflicts between the - * constraint graph and the barycenters for the entries. If the barycenters for - * an entry would violate a constraint in the constraint graph then we coalesce - * the nodes in the conflict into a new node that respects the contraint and - * aggregates barycenter and weight information. - * - * This implementation is based on the description in Forster, "A Fast and - * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it - * differs in some specific details. - * - * Pre-conditions: - * - * 1. Each entry has the form {v, barycenter, weight}, or if the node has - * no barycenter, then {v}. - * - * Returns: - * - * A new list of entries of the form {vs, i, barycenter, weight}. The list - * `vs` may either be a singleton or it may be an aggregation of nodes - * ordered such that they do not violate constraints from the constraint - * graph. The property `i` is the lowest original index of any of the - * elements in `vs`. - */ -function resolveConflicts(entries, cg) { - var mappedEntries = {}; - forEach/* default */.A(entries, function (entry, i) { - var tmp = (mappedEntries[entry.v] = { - indegree: 0, - in: [], - out: [], - vs: [entry.v], - i: i, - }); - if (!isUndefined/* default */.A(entry.barycenter)) { - // @ts-expect-error - tmp.barycenter = entry.barycenter; - // @ts-expect-error - tmp.weight = entry.weight; - } - }); - - forEach/* default */.A(cg.edges(), function (e) { - var entryV = mappedEntries[e.v]; - var entryW = mappedEntries[e.w]; - if (!isUndefined/* default */.A(entryV) && !isUndefined/* default */.A(entryW)) { - entryW.indegree++; - entryV.out.push(mappedEntries[e.w]); - } - }); - - var sourceSet = filter/* default */.A(mappedEntries, function (entry) { - // @ts-expect-error - return !entry.indegree; - }); - - return doResolveConflicts(sourceSet); -} - -function doResolveConflicts(sourceSet) { - var entries = []; - - function handleIn(vEntry) { - return function (uEntry) { - if (uEntry.merged) { - return; - } - if ( - isUndefined/* default */.A(uEntry.barycenter) || - isUndefined/* default */.A(vEntry.barycenter) || - uEntry.barycenter >= vEntry.barycenter - ) { - mergeEntries(vEntry, uEntry); - } - }; - } - - function handleOut(vEntry) { - return function (wEntry) { - wEntry['in'].push(vEntry); - if (--wEntry.indegree === 0) { - sourceSet.push(wEntry); - } - }; - } - - while (sourceSet.length) { - var entry = sourceSet.pop(); - entries.push(entry); - forEach/* default */.A(entry['in'].reverse(), handleIn(entry)); - forEach/* default */.A(entry.out, handleOut(entry)); - } - - return map/* default */.A( - filter/* default */.A(entries, function (entry) { - return !entry.merged; - }), - function (entry) { - return pick/* default */.A(entry, ['vs', 'i', 'barycenter', 'weight']); - } - ); -} - -function mergeEntries(target, source) { - var sum = 0; - var weight = 0; - - if (target.weight) { - sum += target.barycenter * target.weight; - weight += target.weight; - } - - if (source.weight) { - sum += source.barycenter * source.weight; - weight += source.weight; - } - - target.vs = source.vs.concat(target.vs); - target.barycenter = sum / weight; - target.weight = weight; - target.i = Math.min(source.i, target.i); - source.merged = true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js - - - - - -function sort(entries, biasRight) { - var parts = partition(entries, function (entry) { - return has/* default */.A(entry, 'barycenter'); - }); - var sortable = parts.lhs, - unsortable = lodash_es_sortBy(parts.rhs, function (entry) { - return -entry.i; - }), - vs = [], - sum = 0, - weight = 0, - vsIndex = 0; - - sortable.sort(compareWithBias(!!biasRight)); - - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - - forEach/* default */.A(sortable, function (entry) { - vsIndex += entry.vs.length; - vs.push(entry.vs); - sum += entry.barycenter * entry.weight; - weight += entry.weight; - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - }); - - var result = { vs: flatten/* default */.A(vs) }; - if (weight) { - result.barycenter = sum / weight; - result.weight = weight; - } - return result; -} - -function consumeUnsortable(vs, unsortable, index) { - var last; - while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { - unsortable.pop(); - vs.push(last.vs); - index++; - } - return index; -} - -function compareWithBias(bias) { - return function (entryV, entryW) { - if (entryV.barycenter < entryW.barycenter) { - return -1; - } else if (entryV.barycenter > entryW.barycenter) { - return 1; - } - - return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; - }; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js - - - - - - - -function sortSubgraph(g, v, cg, biasRight) { - var movable = g.children(v); - var node = g.node(v); - var bl = node ? node.borderLeft : undefined; - var br = node ? node.borderRight : undefined; - var subgraphs = {}; - - if (bl) { - movable = filter/* default */.A(movable, function (w) { - return w !== bl && w !== br; - }); - } - - var barycenters = barycenter(g, movable); - forEach/* default */.A(barycenters, function (entry) { - if (g.children(entry.v).length) { - var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); - subgraphs[entry.v] = subgraphResult; - if (has/* default */.A(subgraphResult, 'barycenter')) { - mergeBarycenters(entry, subgraphResult); - } - } - }); - - var entries = resolveConflicts(barycenters, cg); - expandSubgraphs(entries, subgraphs); - - var result = sort(entries, biasRight); - - if (bl) { - result.vs = flatten/* default */.A([bl, result.vs, br]); - if (g.predecessors(bl).length) { - var blPred = g.node(g.predecessors(bl)[0]), - brPred = g.node(g.predecessors(br)[0]); - if (!has/* default */.A(result, 'barycenter')) { - result.barycenter = 0; - result.weight = 0; - } - result.barycenter = - (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); - result.weight += 2; - } - } - - return result; -} - -function expandSubgraphs(entries, subgraphs) { - forEach/* default */.A(entries, function (entry) { - entry.vs = flatten/* default */.A( - entry.vs.map(function (v) { - if (subgraphs[v]) { - return subgraphs[v].vs; - } - return v; - }) - ); - }); -} - -function mergeBarycenters(target, other) { - if (!isUndefined/* default */.A(target.barycenter)) { - target.barycenter = - (target.barycenter * target.weight + other.barycenter * other.weight) / - (target.weight + other.weight); - target.weight += other.weight; - } else { - target.barycenter = other.barycenter; - target.weight = other.weight; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js - - - - - - - - - - - -/* - * Applies heuristics to minimize edge crossings in the graph and sets the best - * order solution as an order attribute on each node. - * - * Pre-conditions: - * - * 1. Graph must be DAG - * 2. Graph nodes must be objects with a "rank" attribute - * 3. Graph edges must have the "weight" attribute - * - * Post-conditions: - * - * 1. Graph nodes will have an "order" attribute based on the results of the - * algorithm. - */ -function order(g) { - var maxRank = util_maxRank(g), - downLayerGraphs = buildLayerGraphs(g, range/* default */.A(1, maxRank + 1), 'inEdges'), - upLayerGraphs = buildLayerGraphs(g, range/* default */.A(maxRank - 1, -1, -1), 'outEdges'); - - var layering = initOrder(g); - assignOrder(g, layering); - - var bestCC = Number.POSITIVE_INFINITY, - best; - - for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { - sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); - - layering = buildLayerMatrix(g); - var cc = crossCount(g, layering); - if (cc < bestCC) { - lastBest = 0; - best = lodash_es_cloneDeep(layering); - bestCC = cc; - } - } - - assignOrder(g, best); -} - -function buildLayerGraphs(g, ranks, relationship) { - return map/* default */.A(ranks, function (rank) { - return buildLayerGraph(g, rank, relationship); - }); -} - -function sweepLayerGraphs(layerGraphs, biasRight) { - var cg = new graphlib/* Graph */.T(); - forEach/* default */.A(layerGraphs, function (lg) { - var root = lg.graph().root; - var sorted = sortSubgraph(lg, root, cg, biasRight); - forEach/* default */.A(sorted.vs, function (v, i) { - lg.node(v).order = i; - }); - addSubgraphConstraints(lg, cg, sorted.vs); - }); -} - -function assignOrder(g, layering) { - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, i) { - g.node(v).order = i; - }); - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js - - - - -function parentDummyChains(g) { - var postorderNums = parent_dummy_chains_postorder(g); - - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var edgeObj = node.edgeObj; - var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); - var path = pathData.path; - var lca = pathData.lca; - var pathIdx = 0; - var pathV = path[pathIdx]; - var ascending = true; - - while (v !== edgeObj.w) { - node = g.node(v); - - if (ascending) { - while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { - pathIdx++; - } - - if (pathV === lca) { - ascending = false; - } - } - - if (!ascending) { - while ( - pathIdx < path.length - 1 && - g.node((pathV = path[pathIdx + 1])).minRank <= node.rank - ) { - pathIdx++; - } - pathV = path[pathIdx]; - } - - g.setParent(v, pathV); - v = g.successors(v)[0]; - } - }); -} - -// Find a path from v to w through the lowest common ancestor (LCA). Return the -// full path and the LCA. -function findPath(g, postorderNums, v, w) { - var vPath = []; - var wPath = []; - var low = Math.min(postorderNums[v].low, postorderNums[w].low); - var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); - var parent; - var lca; - - // Traverse up from v to find the LCA - parent = v; - do { - parent = g.parent(parent); - vPath.push(parent); - } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); - lca = parent; - - // Traverse from w to LCA - parent = w; - while ((parent = g.parent(parent)) !== lca) { - wPath.push(parent); - } - - return { path: vPath.concat(wPath.reverse()), lca: lca }; -} - -function parent_dummy_chains_postorder(g) { - var result = {}; - var lim = 0; - - function dfs(v) { - var low = lim; - forEach/* default */.A(g.children(v), dfs); - result[v] = { low: low, lim: lim++ }; - } - forEach/* default */.A(g.children(), dfs); - - return result; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js -var _castFunction = __webpack_require__(99922); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js - - - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && (0,_baseForOwn/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee)); -} - -/* harmony default export */ const lodash_es_forOwn = (forOwn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules -var _baseFor = __webpack_require__(4574); -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js - - - - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : (0,_baseFor/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee), keysIn/* default */.A); -} - -/* harmony default export */ const lodash_es_forIn = (forIn); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js - - - - -/* - * This module provides coordinate assignment based on Brandes and Köpf, "Fast - * and Simple Horizontal Coordinate Assignment." - */ - - - -/* - * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" - * property. A type-1 conflict is one where a non-inner segment crosses an - * inner segment. An inner segment is an edge with both incident nodes marked - * with the "dummy" property. - * - * This algorithm scans layer by layer, starting with the second, for type-1 - * conflicts between the current layer and the previous layer. For each layer - * it scans the nodes from left to right until it reaches one that is incident - * on an inner segment. It then scans predecessors to determine if they have - * edges that cross that inner segment. At the end a final scan is done for all - * nodes on the current rank to see if they cross the last visited inner - * segment. - * - * This algorithm (safely) assumes that a dummy node will only be incident on a - * single node in the layers being scanned. - */ -function findType1Conflicts(g, layering) { - var conflicts = {}; - - function visitLayer(prevLayer, layer) { - var // last visited node in the previous layer that is incident on an inner - // segment. - k0 = 0, - // Tracks the last node in this layer scanned for crossings with a type-1 - // segment. - scanPos = 0, - prevLayerLength = prevLayer.length, - lastNode = lodash_es_last(layer); - - forEach/* default */.A(layer, function (v, i) { - var w = findOtherInnerSegmentNode(g, v), - k1 = w ? g.node(w).order : prevLayerLength; - - if (w || v === lastNode) { - forEach/* default */.A(layer.slice(scanPos, i + 1), function (scanNode) { - forEach/* default */.A(g.predecessors(scanNode), function (u) { - var uLabel = g.node(u), - uPos = uLabel.order; - if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { - addConflict(conflicts, u, scanNode); - } - }); - }); - // @ts-expect-error - scanPos = i + 1; - k0 = k1; - } - }); - - return layer; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findType2Conflicts(g, layering) { - var conflicts = {}; - - function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { - var v; - forEach/* default */.A(range/* default */.A(southPos, southEnd), function (i) { - v = south[i]; - if (g.node(v).dummy) { - forEach/* default */.A(g.predecessors(v), function (u) { - var uNode = g.node(u); - if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { - addConflict(conflicts, u, v); - } - }); - } - }); - } - - function visitLayer(north, south) { - var prevNorthPos = -1, - nextNorthPos, - southPos = 0; - - forEach/* default */.A(south, function (v, southLookahead) { - if (g.node(v).dummy === 'border') { - var predecessors = g.predecessors(v); - if (predecessors.length) { - nextNorthPos = g.node(predecessors[0]).order; - scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); - // @ts-expect-error - southPos = southLookahead; - prevNorthPos = nextNorthPos; - } - } - scan(south, southPos, south.length, nextNorthPos, north.length); - }); - - return south; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findOtherInnerSegmentNode(g, v) { - if (g.node(v).dummy) { - return lodash_es_find(g.predecessors(v), function (u) { - return g.node(u).dummy; - }); - } -} - -function addConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - - var conflictsV = conflicts[v]; - if (!conflictsV) { - conflicts[v] = conflictsV = {}; - } - conflictsV[w] = true; -} - -function hasConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - return has/* default */.A(conflicts[v], w); -} - -/* - * Try to align nodes into vertical "blocks" where possible. This algorithm - * attempts to align a node with one of its median neighbors. If the edge - * connecting a neighbor is a type-1 conflict then we ignore that possibility. - * If a previous node has already formed a block with a node after the node - * we're trying to form a block with, we also ignore that possibility - our - * blocks would be split in that scenario. - */ -function verticalAlignment(g, layering, conflicts, neighborFn) { - var root = {}, - align = {}, - pos = {}; - - // We cache the position here based on the layering because the graph and - // layering may be out of sync. The layering matrix is manipulated to - // generate different extreme alignments. - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, order) { - root[v] = v; - align[v] = v; - pos[v] = order; - }); - }); - - forEach/* default */.A(layering, function (layer) { - var prevIdx = -1; - forEach/* default */.A(layer, function (v) { - var ws = neighborFn(v); - if (ws.length) { - ws = lodash_es_sortBy(ws, function (w) { - return pos[w]; - }); - var mp = (ws.length - 1) / 2; - for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { - var w = ws[i]; - if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { - align[w] = v; - align[v] = root[v] = root[w]; - prevIdx = pos[w]; - } - } - } - }); - }); - - return { root: root, align: align }; -} - -function horizontalCompaction(g, layering, root, align, reverseSep) { - // This portion of the algorithm differs from BK due to a number of problems. - // Instead of their algorithm we construct a new block graph and do two - // sweeps. The first sweep places blocks with the smallest possible - // coordinates. The second sweep removes unused space by moving blocks to the - // greatest coordinates without violating separation. - var xs = {}, - blockG = buildBlockGraph(g, layering, root, reverseSep), - borderType = reverseSep ? 'borderLeft' : 'borderRight'; - - function iterate(setXsFunc, nextNodesFunc) { - var stack = blockG.nodes(); - var elem = stack.pop(); - var visited = {}; - while (elem) { - if (visited[elem]) { - setXsFunc(elem); - } else { - visited[elem] = true; - stack.push(elem); - stack = stack.concat(nextNodesFunc(elem)); - } - - elem = stack.pop(); - } - } - - // First pass, assign smallest coordinates - function pass1(elem) { - xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { - return Math.max(acc, xs[e.v] + blockG.edge(e)); - }, 0); - } - - // Second pass, assign greatest coordinates - function pass2(elem) { - var min = blockG.outEdges(elem).reduce(function (acc, e) { - return Math.min(acc, xs[e.w] - blockG.edge(e)); - }, Number.POSITIVE_INFINITY); - - var node = g.node(elem); - if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { - xs[elem] = Math.max(xs[elem], min); - } - } - - iterate(pass1, blockG.predecessors.bind(blockG)); - iterate(pass2, blockG.successors.bind(blockG)); - - // Assign x coordinates to all nodes - forEach/* default */.A(align, function (v) { - xs[v] = xs[root[v]]; - }); - - return xs; -} - -function buildBlockGraph(g, layering, root, reverseSep) { - var blockGraph = new graphlib/* Graph */.T(), - graphLabel = g.graph(), - sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); - - forEach/* default */.A(layering, function (layer) { - var u; - forEach/* default */.A(layer, function (v) { - var vRoot = root[v]; - blockGraph.setNode(vRoot); - if (u) { - var uRoot = root[u], - prevMax = blockGraph.edge(uRoot, vRoot); - blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); - } - u = v; - }); - }); - - return blockGraph; -} - -/* - * Returns the alignment that has the smallest width of the given alignments. - */ -function findSmallestWidthAlignment(g, xss) { - return lodash_es_minBy(values/* default */.A(xss), function (xs) { - var max = Number.NEGATIVE_INFINITY; - var min = Number.POSITIVE_INFINITY; - - lodash_es_forIn(xs, function (x, v) { - var halfWidth = width(g, v) / 2; - - max = Math.max(x + halfWidth, max); - min = Math.min(x - halfWidth, min); - }); - - return max - min; - }); -} - -/* - * Align the coordinates of each of the layout alignments such that - * left-biased alignments have their minimum coordinate at the same point as - * the minimum coordinate of the smallest width alignment and right-biased - * alignments have their maximum coordinate at the same point as the maximum - * coordinate of the smallest width alignment. - */ -function alignCoordinates(xss, alignTo) { - var alignToVals = values/* default */.A(alignTo), - alignToMin = lodash_es_min(alignToVals), - alignToMax = lodash_es_max(alignToVals); - - forEach/* default */.A(['u', 'd'], function (vert) { - forEach/* default */.A(['l', 'r'], function (horiz) { - var alignment = vert + horiz, - xs = xss[alignment], - delta; - if (xs === alignTo) return; - - var xsVals = values/* default */.A(xs); - delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); - - if (delta) { - xss[alignment] = lodash_es_mapValues(xs, function (x) { - return x + delta; - }); - } - }); - }); -} - -function balance(xss, align) { - return lodash_es_mapValues(xss.ul, function (ignore, v) { - if (align) { - return xss[align.toLowerCase()][v]; - } else { - var xs = lodash_es_sortBy(map/* default */.A(xss, v)); - return (xs[1] + xs[2]) / 2; - } - }); -} - -function positionX(g) { - var layering = buildLayerMatrix(g); - var conflicts = merge/* default */.A(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); - - var xss = {}; - var adjustedLayering; - forEach/* default */.A(['u', 'd'], function (vert) { - adjustedLayering = vert === 'u' ? layering : values/* default */.A(layering).reverse(); - forEach/* default */.A(['l', 'r'], function (horiz) { - if (horiz === 'r') { - adjustedLayering = map/* default */.A(adjustedLayering, function (inner) { - return values/* default */.A(inner).reverse(); - }); - } - - var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); - var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); - var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); - if (horiz === 'r') { - xs = lodash_es_mapValues(xs, function (x) { - return -x; - }); - } - xss[vert + horiz] = xs; - }); - }); - - var smallestWidth = findSmallestWidthAlignment(g, xss); - alignCoordinates(xss, smallestWidth); - return balance(xss, g.graph().align); -} - -function sep(nodeSep, edgeSep, reverseSep) { - return function (g, v, w) { - var vLabel = g.node(v); - var wLabel = g.node(w); - var sum = 0; - var delta; - - sum += vLabel.width / 2; - if (has/* default */.A(vLabel, 'labelpos')) { - switch (vLabel.labelpos.toLowerCase()) { - case 'l': - delta = -vLabel.width / 2; - break; - case 'r': - delta = vLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; - sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; - - sum += wLabel.width / 2; - if (has/* default */.A(wLabel, 'labelpos')) { - switch (wLabel.labelpos.toLowerCase()) { - case 'l': - delta = wLabel.width / 2; - break; - case 'r': - delta = -wLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - return sum; - }; -} - -function width(g, v) { - return g.node(v).width; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js - - - - - - -function position(g) { - g = asNonCompoundGraph(g); - - positionY(g); - lodash_es_forOwn(positionX(g), function (x, v) { - g.node(v).x = x; - }); -} - -function positionY(g) { - var layering = buildLayerMatrix(g); - var rankSep = g.graph().ranksep; - var prevY = 0; - forEach/* default */.A(layering, function (layer) { - var maxHeight = lodash_es_max( - map/* default */.A(layer, function (v) { - return g.node(v).height; - }) - ); - forEach/* default */.A(layer, function (v) { - g.node(v).y = prevY + maxHeight / 2; - }); - prevY += maxHeight + rankSep; - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js - - - - - - - - - - - - - - - -function layout(g, opts) { - var time = opts && opts.debugTiming ? util_time : notime; - time('layout', function () { - var layoutGraph = time(' buildLayoutGraph', function () { - return buildLayoutGraph(g); - }); - time(' runLayout', function () { - runLayout(layoutGraph, time); - }); - time(' updateInputGraph', function () { - updateInputGraph(g, layoutGraph); - }); - }); -} - -function runLayout(g, time) { - time(' makeSpaceForEdgeLabels', function () { - makeSpaceForEdgeLabels(g); - }); - time(' removeSelfEdges', function () { - removeSelfEdges(g); - }); - time(' acyclic', function () { - run(g); - }); - time(' nestingGraph.run', function () { - nesting_graph_run(g); - }); - time(' rank', function () { - rank(asNonCompoundGraph(g)); - }); - time(' injectEdgeLabelProxies', function () { - injectEdgeLabelProxies(g); - }); - time(' removeEmptyRanks', function () { - removeEmptyRanks(g); - }); - time(' nestingGraph.cleanup', function () { - cleanup(g); - }); - time(' normalizeRanks', function () { - normalizeRanks(g); - }); - time(' assignRankMinMax', function () { - assignRankMinMax(g); - }); - time(' removeEdgeLabelProxies', function () { - removeEdgeLabelProxies(g); - }); - time(' normalize.run', function () { - normalize_run(g); - }); - time(' parentDummyChains', function () { - parentDummyChains(g); - }); - time(' addBorderSegments', function () { - addBorderSegments(g); - }); - time(' order', function () { - order(g); - }); - time(' insertSelfEdges', function () { - insertSelfEdges(g); - }); - time(' adjustCoordinateSystem', function () { - adjust(g); - }); - time(' position', function () { - position(g); - }); - time(' positionSelfEdges', function () { - positionSelfEdges(g); - }); - time(' removeBorderNodes', function () { - removeBorderNodes(g); - }); - time(' normalize.undo', function () { - normalize_undo(g); - }); - time(' fixupEdgeLabelCoords', function () { - fixupEdgeLabelCoords(g); - }); - time(' undoCoordinateSystem', function () { - coordinate_system_undo(g); - }); - time(' translateGraph', function () { - translateGraph(g); - }); - time(' assignNodeIntersects', function () { - assignNodeIntersects(g); - }); - time(' reversePoints', function () { - reversePointsForReversedEdges(g); - }); - time(' acyclic.undo', function () { - undo(g); - }); -} - -/* - * Copies final layout information from the layout graph back to the input - * graph. This process only copies whitelisted attributes from the layout graph - * to the input graph, so it serves as a good place to determine what - * attributes can influence layout. - */ -function updateInputGraph(inputGraph, layoutGraph) { - forEach/* default */.A(inputGraph.nodes(), function (v) { - var inputLabel = inputGraph.node(v); - var layoutLabel = layoutGraph.node(v); - - if (inputLabel) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - - if (layoutGraph.children(v).length) { - inputLabel.width = layoutLabel.width; - inputLabel.height = layoutLabel.height; - } - } - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var inputLabel = inputGraph.edge(e); - var layoutLabel = layoutGraph.edge(e); - - inputLabel.points = layoutLabel.points; - if (has/* default */.A(layoutLabel, 'x')) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - } - }); - - inputGraph.graph().width = layoutGraph.graph().width; - inputGraph.graph().height = layoutGraph.graph().height; -} - -var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; -var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; -var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; -var nodeNumAttrs = ['width', 'height']; -var nodeDefaults = { width: 0, height: 0 }; -var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; -var edgeDefaults = { - minlen: 1, - weight: 1, - width: 0, - height: 0, - labeloffset: 10, - labelpos: 'r', -}; -var edgeAttrs = ['labelpos']; - -/* - * Constructs a new graph from the input graph, which can be used for layout. - * This process copies only whitelisted attributes from the input graph to the - * layout graph. Thus this function serves as a good place to determine what - * attributes can influence layout. - */ -function buildLayoutGraph(inputGraph) { - var g = new graphlib/* Graph */.T({ multigraph: true, compound: true }); - var graph = canonicalize(inputGraph.graph()); - - g.setGraph( - merge/* default */.A({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.A(graph, graphAttrs)) - ); - - forEach/* default */.A(inputGraph.nodes(), function (v) { - var node = canonicalize(inputGraph.node(v)); - g.setNode(v, defaults/* default */.A(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); - g.setParent(v, inputGraph.parent(v)); - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var edge = canonicalize(inputGraph.edge(e)); - g.setEdge( - e, - merge/* default */.A({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.A(edge, edgeAttrs)) - ); - }); - - return g; -} - -/* - * This idea comes from the Gansner paper: to account for edge labels in our - * layout we split each rank in half by doubling minlen and halving ranksep. - * Then we can place labels at these mid-points between nodes. - * - * We also add some minimal padding to the width to push the label for the edge - * away from the edge itself a bit. - */ -function makeSpaceForEdgeLabels(g) { - var graph = g.graph(); - graph.ranksep /= 2; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - edge.minlen *= 2; - if (edge.labelpos.toLowerCase() !== 'c') { - if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { - edge.width += edge.labeloffset; - } else { - edge.height += edge.labeloffset; - } - } - }); -} - -/* - * Creates temporary dummy nodes that capture the rank in which each edge's - * label is going to, if it has one of non-zero width and height. We do this - * so that we can safely remove empty ranks while preserving balance for the - * label's position. - */ -function injectEdgeLabelProxies(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.width && edge.height) { - var v = g.node(e.v); - var w = g.node(e.w); - var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; - addDummyNode(g, 'edge-proxy', label, '_ep'); - } - }); -} - -function assignRankMinMax(g) { - var maxRank = 0; - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.borderTop) { - node.minRank = g.node(node.borderTop).rank; - node.maxRank = g.node(node.borderBottom).rank; - // @ts-expect-error - maxRank = lodash_es_max(maxRank, node.maxRank); - } - }); - g.graph().maxRank = maxRank; -} - -function removeEdgeLabelProxies(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'edge-proxy') { - g.edge(node.e).labelRank = node.rank; - g.removeNode(v); - } - }); -} - -function translateGraph(g) { - var minX = Number.POSITIVE_INFINITY; - var maxX = 0; - var minY = Number.POSITIVE_INFINITY; - var maxY = 0; - var graphLabel = g.graph(); - var marginX = graphLabel.marginx || 0; - var marginY = graphLabel.marginy || 0; - - function getExtremes(attrs) { - var x = attrs.x; - var y = attrs.y; - var w = attrs.width; - var h = attrs.height; - minX = Math.min(minX, x - w / 2); - maxX = Math.max(maxX, x + w / 2); - minY = Math.min(minY, y - h / 2); - maxY = Math.max(maxY, y + h / 2); - } - - forEach/* default */.A(g.nodes(), function (v) { - getExtremes(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - getExtremes(edge); - } - }); - - minX -= marginX; - minY -= marginY; - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - node.x -= minX; - node.y -= minY; - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, function (p) { - p.x -= minX; - p.y -= minY; - }); - if (has/* default */.A(edge, 'x')) { - edge.x -= minX; - } - if (has/* default */.A(edge, 'y')) { - edge.y -= minY; - } - }); - - graphLabel.width = maxX - minX + marginX; - graphLabel.height = maxY - minY + marginY; -} - -function assignNodeIntersects(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - var nodeV = g.node(e.v); - var nodeW = g.node(e.w); - var p1, p2; - if (!edge.points) { - edge.points = []; - p1 = nodeW; - p2 = nodeV; - } else { - p1 = edge.points[0]; - p2 = edge.points[edge.points.length - 1]; - } - edge.points.unshift(intersectRect(nodeV, p1)); - edge.points.push(intersectRect(nodeW, p2)); - }); -} - -function fixupEdgeLabelCoords(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - if (edge.labelpos === 'l' || edge.labelpos === 'r') { - edge.width -= edge.labeloffset; - } - switch (edge.labelpos) { - case 'l': - edge.x -= edge.width / 2 + edge.labeloffset; - break; - case 'r': - edge.x += edge.width / 2 + edge.labeloffset; - break; - } - } - }); -} - -function reversePointsForReversedEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.reversed) { - edge.points.reverse(); - } - }); -} - -function removeBorderNodes(g) { - forEach/* default */.A(g.nodes(), function (v) { - if (g.children(v).length) { - var node = g.node(v); - var t = g.node(node.borderTop); - var b = g.node(node.borderBottom); - var l = g.node(lodash_es_last(node.borderLeft)); - var r = g.node(lodash_es_last(node.borderRight)); - - node.width = Math.abs(r.x - l.x); - node.height = Math.abs(b.y - t.y); - node.x = l.x + node.width / 2; - node.y = t.y + node.height / 2; - } - }); - - forEach/* default */.A(g.nodes(), function (v) { - if (g.node(v).dummy === 'border') { - g.removeNode(v); - } - }); -} - -function removeSelfEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - if (e.v === e.w) { - var node = g.node(e.v); - if (!node.selfEdges) { - node.selfEdges = []; - } - node.selfEdges.push({ e: e, label: g.edge(e) }); - g.removeEdge(e); - } - }); -} - -function insertSelfEdges(g) { - var layers = buildLayerMatrix(g); - forEach/* default */.A(layers, function (layer) { - var orderShift = 0; - forEach/* default */.A(layer, function (v, i) { - var node = g.node(v); - node.order = i + orderShift; - forEach/* default */.A(node.selfEdges, function (selfEdge) { - addDummyNode( - g, - 'selfedge', - { - width: selfEdge.label.width, - height: selfEdge.label.height, - rank: node.rank, - order: i + ++orderShift, - e: selfEdge.e, - label: selfEdge.label, - }, - '_se' - ); - }); - delete node.selfEdges; - }); - }); -} - -function positionSelfEdges(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'selfedge') { - var selfNode = g.node(node.e.v); - var x = selfNode.x + selfNode.width / 2; - var y = selfNode.y; - var dx = node.x - x; - var dy = selfNode.height / 2; - g.setEdge(node.e, node.label); - g.removeNode(v); - node.label.points = [ - { x: x + (2 * dx) / 3, y: y - dy }, - { x: x + (5 * dx) / 6, y: y - dy }, - { x: x + dx, y: y }, - { x: x + (5 * dx) / 6, y: y + dy }, - { x: x + (2 * dx) / 3, y: y + dy }, - ]; - node.label.x = node.x; - node.label.y = node.y; - } - }); -} - -function selectNumberAttrs(obj, attrs) { - return lodash_es_mapValues(pick/* default */.A(obj, attrs), Number); -} - -function canonicalize(attrs) { - var newAttrs = {}; - forEach/* default */.A(attrs, function (v, k) { - newAttrs[k.toLowerCase()] = v; - }); - return newAttrs; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js - - - - - - - - -/***/ }), - -/***/ 73046: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - T: () => (/* binding */ Graph) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js -var isFunction = __webpack_require__(89610); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js -var isEmpty = __webpack_require__(66401); -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -/* harmony default export */ const _baseIsNaN = (baseIsNaN); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -/* harmony default export */ const _strictIndexOf = (strictIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js - - - - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? _strictIndexOf(array, value, fromIndex) - : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); -} - -/* harmony default export */ const _baseIndexOf = (baseIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js - - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && _baseIndexOf(array, value, 0) > -1; -} - -/* harmony default export */ const _arrayIncludes = (arrayIncludes); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js -var _Set = __webpack_require__(39857); -;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js -/** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ -function noop() { - // No operation performed. -} - -/* harmony default export */ const lodash_es_noop = (noop); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { - return new _Set/* default */.A(values); -}; - -/* harmony default export */ const _createSet = (createSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js - - - - - - - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = _arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = _arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : _createSet(array); - if (set) { - return (0,_setToArray/* default */.A)(set); - } - isCommon = false; - includes = _cacheHas/* default */.A; - seen = new _SetCache/* default */.A; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -/* harmony default export */ const _baseUniq = (baseUniq); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js -var isArrayLikeObject = __webpack_require__(53533); -;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js - - - - - -/** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ -var union = (0,_baseRest/* default */.A)(function(arrays) { - return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); -}); - -/* harmony default export */ const lodash_es_union = (union); - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js - - -var DEFAULT_EDGE_NAME = '\x00'; -var GRAPH_NODE = '\x00'; -var EDGE_KEY_DELIM = '\x01'; - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. -class Graph { - constructor(opts = {}) { - this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; - this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; - this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; - - // Label for the graph itself - this._label = undefined; - - // Defaults to be set when creating a new node - this._defaultNodeLabelFn = constant/* default */.A(undefined); - - // Defaults to be set when creating a new edge - this._defaultEdgeLabelFn = constant/* default */.A(undefined); - - // v -> label - this._nodes = {}; - - if (this._isCompound) { - // v -> parent - this._parent = {}; - - // v -> children - this._children = {}; - this._children[GRAPH_NODE] = {}; - } - - // v -> edgeObj - this._in = {}; - - // u -> v -> Number - this._preds = {}; - - // v -> edgeObj - this._out = {}; - - // v -> w -> Number - this._sucs = {}; - - // e -> edgeObj - this._edgeObjs = {}; - - // e -> label - this._edgeLabels = {}; - } - /* === Graph functions ========= */ - isDirected() { - return this._isDirected; - } - isMultigraph() { - return this._isMultigraph; - } - isCompound() { - return this._isCompound; - } - setGraph(label) { - this._label = label; - return this; - } - graph() { - return this._label; - } - /* === Node functions ========== */ - setDefaultNodeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultNodeLabelFn = newDefault; - return this; - } - nodeCount() { - return this._nodeCount; - } - nodes() { - return keys/* default */.A(this._nodes); - } - sources() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._in[v]); - }); - } - sinks() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._out[v]); - }); - } - setNodes(vs, value) { - var args = arguments; - var self = this; - forEach/* default */.A(vs, function (v) { - if (args.length > 1) { - self.setNode(v, value); - } else { - self.setNode(v); - } - }); - return this; - } - setNode(v, value) { - if (has/* default */.A(this._nodes, v)) { - if (arguments.length > 1) { - this._nodes[v] = value; - } - return this; - } - - // @ts-expect-error - this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); - if (this._isCompound) { - this._parent[v] = GRAPH_NODE; - this._children[v] = {}; - this._children[GRAPH_NODE][v] = true; - } - this._in[v] = {}; - this._preds[v] = {}; - this._out[v] = {}; - this._sucs[v] = {}; - ++this._nodeCount; - return this; - } - node(v) { - return this._nodes[v]; - } - hasNode(v) { - return has/* default */.A(this._nodes, v); - } - removeNode(v) { - var self = this; - if (has/* default */.A(this._nodes, v)) { - var removeEdge = function (e) { - self.removeEdge(self._edgeObjs[e]); - }; - delete this._nodes[v]; - if (this._isCompound) { - this._removeFromParentsChildList(v); - delete this._parent[v]; - forEach/* default */.A(this.children(v), function (child) { - self.setParent(child); - }); - delete this._children[v]; - } - forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); - delete this._in[v]; - delete this._preds[v]; - forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); - delete this._out[v]; - delete this._sucs[v]; - --this._nodeCount; - } - return this; - } - setParent(v, parent) { - if (!this._isCompound) { - throw new Error('Cannot set parent in a non-compound graph'); - } - - if (isUndefined/* default */.A(parent)) { - parent = GRAPH_NODE; - } else { - // Coerce parent to string - parent += ''; - for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { - if (ancestor === v) { - throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); - } - } - - this.setNode(parent); - } - - this.setNode(v); - this._removeFromParentsChildList(v); - this._parent[v] = parent; - this._children[parent][v] = true; - return this; - } - _removeFromParentsChildList(v) { - delete this._children[this._parent[v]][v]; - } - parent(v) { - if (this._isCompound) { - var parent = this._parent[v]; - if (parent !== GRAPH_NODE) { - return parent; - } - } - } - children(v) { - if (isUndefined/* default */.A(v)) { - v = GRAPH_NODE; - } - - if (this._isCompound) { - var children = this._children[v]; - if (children) { - return keys/* default */.A(children); - } - } else if (v === GRAPH_NODE) { - return this.nodes(); - } else if (this.hasNode(v)) { - return []; - } - } - predecessors(v) { - var predsV = this._preds[v]; - if (predsV) { - return keys/* default */.A(predsV); - } - } - successors(v) { - var sucsV = this._sucs[v]; - if (sucsV) { - return keys/* default */.A(sucsV); - } - } - neighbors(v) { - var preds = this.predecessors(v); - if (preds) { - return lodash_es_union(preds, this.successors(v)); - } - } - isLeaf(v) { - var neighbors; - if (this.isDirected()) { - neighbors = this.successors(v); - } else { - neighbors = this.neighbors(v); - } - return neighbors.length === 0; - } - filterNodes(filter) { - // @ts-expect-error - var copy = new this.constructor({ - directed: this._isDirected, - multigraph: this._isMultigraph, - compound: this._isCompound, - }); - - copy.setGraph(this.graph()); - - var self = this; - forEach/* default */.A(this._nodes, function (value, v) { - if (filter(v)) { - copy.setNode(v, value); - } - }); - - forEach/* default */.A(this._edgeObjs, function (e) { - // @ts-expect-error - if (copy.hasNode(e.v) && copy.hasNode(e.w)) { - copy.setEdge(e, self.edge(e)); - } - }); - - var parents = {}; - function findParent(v) { - var parent = self.parent(v); - if (parent === undefined || copy.hasNode(parent)) { - parents[v] = parent; - return parent; - } else if (parent in parents) { - return parents[parent]; - } else { - return findParent(parent); - } - } - - if (this._isCompound) { - forEach/* default */.A(copy.nodes(), function (v) { - copy.setParent(v, findParent(v)); - }); - } - - return copy; - } - /* === Edge functions ========== */ - setDefaultEdgeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultEdgeLabelFn = newDefault; - return this; - } - edgeCount() { - return this._edgeCount; - } - edges() { - return values/* default */.A(this._edgeObjs); - } - setPath(vs, value) { - var self = this; - var args = arguments; - reduce/* default */.A(vs, function (v, w) { - if (args.length > 1) { - self.setEdge(v, w, value); - } else { - self.setEdge(v, w); - } - return w; - }); - return this; - } - /* - * setEdge(v, w, [value, [name]]) - * setEdge({ v, w, [name] }, [value]) - */ - setEdge() { - var v, w, name, value; - var valueSpecified = false; - var arg0 = arguments[0]; - - if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { - v = arg0.v; - w = arg0.w; - name = arg0.name; - if (arguments.length === 2) { - value = arguments[1]; - valueSpecified = true; - } - } else { - v = arg0; - w = arguments[1]; - name = arguments[3]; - if (arguments.length > 2) { - value = arguments[2]; - valueSpecified = true; - } - } - - v = '' + v; - w = '' + w; - if (!isUndefined/* default */.A(name)) { - name = '' + name; - } - - var e = edgeArgsToId(this._isDirected, v, w, name); - if (has/* default */.A(this._edgeLabels, e)) { - if (valueSpecified) { - this._edgeLabels[e] = value; - } - return this; - } - - if (!isUndefined/* default */.A(name) && !this._isMultigraph) { - throw new Error('Cannot set a named edge when isMultigraph = false'); - } - - // It didn't exist, so we need to create it. - // First ensure the nodes exist. - this.setNode(v); - this.setNode(w); - - // @ts-expect-error - this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); - - var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); - // Ensure we add undirected edges in a consistent way. - v = edgeObj.v; - w = edgeObj.w; - - Object.freeze(edgeObj); - this._edgeObjs[e] = edgeObj; - incrementOrInitEntry(this._preds[w], v); - incrementOrInitEntry(this._sucs[v], w); - this._in[w][e] = edgeObj; - this._out[v][e] = edgeObj; - this._edgeCount++; - return this; - } - edge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return this._edgeLabels[e]; - } - hasEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return has/* default */.A(this._edgeLabels, e); - } - removeEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - var edge = this._edgeObjs[e]; - if (edge) { - v = edge.v; - w = edge.w; - delete this._edgeLabels[e]; - delete this._edgeObjs[e]; - decrementOrRemoveEntry(this._preds[w], v); - decrementOrRemoveEntry(this._sucs[v], w); - delete this._in[w][e]; - delete this._out[v][e]; - this._edgeCount--; - } - return this; - } - inEdges(v, u) { - var inV = this._in[v]; - if (inV) { - var edges = values/* default */.A(inV); - if (!u) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.v === u; - }); - } - } - outEdges(v, w) { - var outV = this._out[v]; - if (outV) { - var edges = values/* default */.A(outV); - if (!w) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.w === w; - }); - } - } - nodeEdges(v, w) { - var inEdges = this.inEdges(v, w); - if (inEdges) { - return inEdges.concat(this.outEdges(v, w)); - } - } -} - -/* Number of nodes in the graph. Should only be changed by the implementation. */ -Graph.prototype._nodeCount = 0; - -/* Number of edges in the graph. Should only be changed by the implementation. */ -Graph.prototype._edgeCount = 0; - -function incrementOrInitEntry(map, k) { - if (map[k]) { - map[k]++; - } else { - map[k] = 1; - } -} - -function decrementOrRemoveEntry(map, k) { - if (!--map[k]) { - delete map[k]; - } -} - -function edgeArgsToId(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); -} - -function edgeArgsToObj(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - var edgeObj = { v: v, w: w }; - if (name) { - edgeObj.name = name; - } - return edgeObj; -} - -function edgeObjToId(isDirected, edgeObj) { - return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); -} - - -/***/ }), - -/***/ 697: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) -/* harmony export */ }); -/* unused harmony export version */ -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); -// Includes only the "core" of graphlib - - - -const version = '2.1.9-pre'; - - - - -/***/ }), - -/***/ 62062: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _SetCache) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules -var _MapCache = __webpack_require__(29471); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -/* harmony default export */ const _setCacheAdd = (setCacheAdd); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -/* harmony default export */ const _setCacheHas = (setCacheHas); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js - - - - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new _MapCache/* default */.A; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; -SetCache.prototype.has = _setCacheHas; - -/* harmony default export */ const _SetCache = (SetCache); - - -/***/ }), - -/***/ 72641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); - - -/***/ }), - -/***/ 2634: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); - - -/***/ }), - -/***/ 45572: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); - - -/***/ }), - -/***/ 76912: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); - - -/***/ }), - -/***/ 91641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseClone) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js -var _arrayEach = __webpack_require__(72641); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js -var _copyObject = __webpack_require__(22031); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js - - - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssign = (baseAssign); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js - - - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssignIn = (baseAssignIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js -var _cloneBuffer = __webpack_require__(80154); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js -var _copyArray = __webpack_require__(39759); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js -var _getSymbols = __webpack_require__(14792); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js - - - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); -} - -/* harmony default export */ const _copySymbols = (copySymbols); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js -var _getPrototype = __webpack_require__(15647); -// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js -var stubArray = __webpack_require__(13153); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js - - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { - var result = []; - while (object) { - (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); - object = (0,_getPrototype/* default */.A)(object); - } - return result; -}; - -/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js - - - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); -} - -/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js -var _baseGetAllKeys = __webpack_require__(33831); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js - - - - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); -} - -/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/* harmony default export */ const _initCloneArray = (initCloneArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js -var _cloneArrayBuffer = __webpack_require__(90565); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js - - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -/* harmony default export */ const _cloneDataView = (cloneDataView); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -/* harmony default export */ const _cloneRegExp = (cloneRegExp); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js - - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -/* harmony default export */ const _cloneSymbol = (cloneSymbol); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js -var _cloneTypedArray = __webpack_require__(1801); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js - - - - - - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return (0,_cloneArrayBuffer/* default */.A)(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return _cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return (0,_cloneTypedArray/* default */.A)(object, isDeep); - - case mapTag: - return new Ctor; - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return _cloneRegExp(object); - - case setTag: - return new Ctor; - - case symbolTag: - return _cloneSymbol(object); - } -} - -/* harmony default export */ const _initCloneByTag = (initCloneByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules -var _initCloneObject = __webpack_require__(18598); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js - - - -/** `Object#toString` result references. */ -var _baseIsMap_mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; -} - -/* harmony default export */ const _baseIsMap = (baseIsMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js -var _nodeUtil = __webpack_require__(64841); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js - - - - -/* Node.js helper references. */ -var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; - -/* harmony default export */ const lodash_es_isMap = (isMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js - - - -/** `Object#toString` result references. */ -var _baseIsSet_setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; -} - -/* harmony default export */ const _baseIsSet = (baseIsSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js - - - - -/* Node.js helper references. */ -var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; - -/* harmony default export */ const lodash_es_isSet = (isSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js - - - - - - - - - - - - - - - - - - - - - - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - _baseClone_boolTag = '[object Boolean]', - _baseClone_dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - _baseClone_mapTag = '[object Map]', - _baseClone_numberTag = '[object Number]', - objectTag = '[object Object]', - _baseClone_regexpTag = '[object RegExp]', - _baseClone_setTag = '[object Set]', - _baseClone_stringTag = '[object String]', - _baseClone_symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var _baseClone_arrayBufferTag = '[object ArrayBuffer]', - _baseClone_dataViewTag = '[object DataView]', - _baseClone_float32Tag = '[object Float32Array]', - _baseClone_float64Tag = '[object Float64Array]', - _baseClone_int8Tag = '[object Int8Array]', - _baseClone_int16Tag = '[object Int16Array]', - _baseClone_int32Tag = '[object Int32Array]', - _baseClone_uint8Tag = '[object Uint8Array]', - _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', - _baseClone_uint16Tag = '[object Uint16Array]', - _baseClone_uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = -cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = -cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = -cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = -cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = -cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = -cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = -cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = -cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = -cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!(0,isObject/* default */.A)(value)) { - return value; - } - var isArr = (0,isArray/* default */.A)(value); - if (isArr) { - result = _initCloneArray(value); - if (!isDeep) { - return (0,_copyArray/* default */.A)(value, result); - } - } else { - var tag = (0,_getTag/* default */.A)(value), - isFunc = tag == funcTag || tag == genTag; - - if ((0,isBuffer/* default */.A)(value)) { - return (0,_cloneBuffer/* default */.A)(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); - if (!isDeep) { - return isFlat - ? _copySymbolsIn(value, _baseAssignIn(result, value)) - : _copySymbols(value, _baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = _initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new _Stack/* default */.A); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (lodash_es_isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (lodash_es_isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } - - var keysFunc = isFull - ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) - : (isFlat ? keysIn/* default */.A : keys/* default */.A); - - var props = isArr ? undefined : keysFunc(value); - (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -/* harmony default export */ const _baseClone = (baseClone); - - -/***/ }), - -/***/ 6240: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseEach) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js - - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!(0,isArrayLike/* default */.A)(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -/* harmony default export */ const _createBaseEach = (createBaseEach); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js - - - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = _createBaseEach(_baseForOwn/* default */.A); - -/* harmony default export */ const _baseEach = (baseEach); - - -/***/ }), - -/***/ 25707: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); - - -/***/ }), - -/***/ 13588: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseFlatten) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules -var isArguments = __webpack_require__(52274); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js - - - - -/** Built-in value references. */ -var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -/* harmony default export */ const _isFlattenable = (isFlattenable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js - - - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = _isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - (0,_arrayPush/* default */.A)(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -/* harmony default export */ const _baseFlatten = (baseFlatten); - - -/***/ }), - -/***/ 79841: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); - - -/***/ }), - -/***/ 66318: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); - - -/***/ }), - -/***/ 33831: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); - - -/***/ }), - -/***/ 49574: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseIteratee) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arraySome = (arraySome); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js - - - - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!_arraySome(other, function(othValue, othIndex) { - if (!(0,_cacheHas/* default */.A)(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalArrays = (equalArrays); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js -var _Uint8Array = __webpack_require__(43988); -// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js -var eq = __webpack_require__(66984); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -/* harmony default export */ const _mapToArray = (mapToArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _equalByTag_COMPARE_PARTIAL_FLAG = 1, - _equalByTag_COMPARE_UNORDERED_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return (0,eq/* default */.A)(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = _mapToArray; - - case setTag: - var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; - convert || (convert = _setToArray/* default */.A); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -/* harmony default export */ const _equalByTag = (equalByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js - - -/** Used to compose bitmasks for value comparisons. */ -var _equalObjects_COMPARE_PARTIAL_FLAG = 1; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, - objProps = (0,_getAllKeys/* default */.A)(object), - objLength = objProps.length, - othProps = (0,_getAllKeys/* default */.A)(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalObjects = (equalObjects); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules -var isTypedArray = __webpack_require__(33858); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js - - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var _baseIsEqualDeep_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = (0,isArray/* default */.A)(object), - othIsArr = (0,isArray/* default */.A)(other), - objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), - othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && (0,isBuffer/* default */.A)(object)) { - if (!(0,isBuffer/* default */.A)(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new _Stack/* default */.A); - return (objIsArr || (0,isTypedArray/* default */.A)(object)) - ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new _Stack/* default */.A); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new _Stack/* default */.A); - return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js - - - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { - return value !== value && other !== other; - } - return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -/* harmony default export */ const _baseIsEqual = (baseIsEqual); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, - _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new _Stack/* default */.A; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -/* harmony default export */ const _baseIsMatch = (baseIsMatch); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js - - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !(0,isObject/* default */.A)(value); -} - -/* harmony default export */ const _isStrictComparable = (isStrictComparable); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js - - - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = (0,keys/* default */.A)(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, _isStrictComparable(value)]; - } - return result; -} - -/* harmony default export */ const _getMatchData = (getMatchData); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js - - - - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = _getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return _matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || _baseIsMatch(object, source, matchData); - }; -} - -/* harmony default export */ const _baseMatches = (baseMatches); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js - - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); - return result === undefined ? defaultValue : result; -} - -/* harmony default export */ const lodash_es_get = (get); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, - _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { - return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); - } - return function(object) { - var objValue = lodash_es_get(object, path); - return (objValue === undefined && objValue === srcValue) - ? (0,hasIn/* default */.A)(object, path) - : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); - }; -} - -/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js - - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return (0,_baseGet/* default */.A)(object, path); - }; -} - -/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js - - - - - -/** - * Creates a function that returns the value at `path` of a given object. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - * @example - * - * var objects = [ - * { 'a': { 'b': 2 } }, - * { 'a': { 'b': 1 } } - * ]; - * - * _.map(objects, _.property('a.b')); - * // => [2, 1] - * - * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); - * // => [1, 2] - */ -function property(path) { - return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); -} - -/* harmony default export */ const lodash_es_property = (property); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js - - - - - - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity/* default */.A; - } - if (typeof value == 'object') { - return (0,isArray/* default */.A)(value) - ? _baseMatchesProperty(value[0], value[1]) - : _baseMatches(value); - } - return lodash_es_property(value); -} - -/* harmony default export */ const _baseIteratee = (baseIteratee); - - -/***/ }), - -/***/ 52568: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6240); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? Array(collection.length) : []; - - (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); - - -/***/ }), - -/***/ 70805: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); - - -/***/ }), - -/***/ 64099: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); - - -/***/ }), - -/***/ 99922: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); - - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); - - -/***/ }), - -/***/ 7819: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _castPath) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js -var memoize = __webpack_require__(46632); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js - - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = (0,memoize/* default */.A)(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -/* harmony default export */ const _memoizeCapped = (memoizeCapped); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js - - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = _memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/* harmony default export */ const _stringToPath = (stringToPath); - -// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules -var lodash_es_toString = __webpack_require__(28894); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js - - - - - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if ((0,isArray/* default */.A)(value)) { - return value; - } - return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); -} - -/* harmony default export */ const _castPath = (castPath); - - -/***/ }), - -/***/ 19042: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); -/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); - - -/***/ }), - -/***/ 14792: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); -/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); - - -/***/ }), - -/***/ 85054: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); -/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); -/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - - - - - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && - ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); - - -/***/ }), - -/***/ 86586: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); - - - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); - - -/***/ }), - -/***/ 29959: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); - - -/***/ }), - -/***/ 30901: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); - - -/***/ }), - -/***/ 23068: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24326); -/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66984); -/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832); -/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55615); - - - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); - - -/***/ }), - -/***/ 11662: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_filter) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js -var _arrayFilter = __webpack_require__(2634); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js - - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - (0,_baseEach/* default */.A)(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -/* harmony default export */ const _baseFilter = (baseFilter); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js - - - - - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ -function filter(collection, predicate) { - var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; - return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); -} - -/* harmony default export */ const lodash_es_filter = (filter); - - -/***/ }), - -/***/ 34098: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13588); - - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(array, 1) : []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); - - -/***/ }), - -/***/ 8058: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); -/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); - - -/***/ }), - -/***/ 48585: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_has) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && _baseHas_hasOwnProperty.call(object, key); -} - -/* harmony default export */ const _baseHas = (baseHas); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js - - - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); -} - -/* harmony default export */ const lodash_es_has = (has); - - -/***/ }), - -/***/ 39188: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_hasIn) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -/* harmony default export */ const _baseHasIn = (baseHasIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js - - - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); -} - -/* harmony default export */ const lodash_es_hasIn = (hasIn); - - -/***/ }), - -/***/ 61882: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); -/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); - - - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); - - -/***/ }), - -/***/ 69592: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); - - -/***/ }), - -/***/ 27422: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); -/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); - - -/***/ }), - -/***/ 74722: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45572); -/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574); -/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52568); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ -function map(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee, 3)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); - - -/***/ }), - -/***/ 81942: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_pick) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules -var _castPath = __webpack_require__(7819); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js -var _isIndex = __webpack_require__(25353); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js - - - - - - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!(0,isObject/* default */.A)(object)) { - return object; - } - path = (0,_castPath/* default */.A)(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = (0,_toKey/* default */.A)(path[index]), - newValue = value; - - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = (0,isObject/* default */.A)(objValue) - ? objValue - : ((0,_isIndex/* default */.A)(path[index + 1]) ? [] : {}); - } - } - (0,_assignValue/* default */.A)(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -/* harmony default export */ const _baseSet = (baseSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js - - - - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = (0,_baseGet/* default */.A)(object, path); - - if (predicate(value, path)) { - _baseSet(result, (0,_castPath/* default */.A)(path, object), value); - } - } - return result; -} - -/* harmony default export */ const _basePickBy = (basePickBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js - - - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, paths) { - return _basePickBy(object, paths, function(value, path) { - return (0,hasIn/* default */.A)(object, path); - }); -} - -/* harmony default export */ const _basePick = (basePick); - -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules -var _overRest = __webpack_require__(76875); -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules -var _setToString = __webpack_require__(67525); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js - - - - -/** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -function flatRest(func) { - return (0,_setToString/* default */.A)((0,_overRest/* default */.A)(func, undefined, flatten/* default */.A), func + ''); -} - -/* harmony default export */ const _flatRest = (flatRest); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js - - - -/** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ -var pick = _flatRest(function(object, paths) { - return object == null ? {} : _basePick(object, paths); -}); - -/* harmony default export */ const lodash_es_pick = (pick); - - -/***/ }), - -/***/ 91395: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_range) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -/* harmony default export */ const _baseRange = (baseRange); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js - - - - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.A)(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = (0,toFinite/* default */.A)(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = (0,toFinite/* default */.A)(end); - } - step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.A)(step); - return _baseRange(start, end, step, fromRight); - }; -} - -/* harmony default export */ const _createRange = (createRange); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js - - -/** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ -var range = _createRange(); - -/* harmony default export */ const lodash_es_range = (range); - - -/***/ }), - -/***/ 89463: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_reduce) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -/* harmony default export */ const _arrayReduce = (arrayReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -/* harmony default export */ const _baseReduce = (baseReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js - - - - - - -/** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ -function reduce(collection, iteratee, accumulator) { - var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, - initAccum = arguments.length < 3; - - return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); -} - -/* harmony default export */ const lodash_es_reduce = (reduce); - - -/***/ }), - -/***/ 13153: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ -function stubArray() { - return []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); - - -/***/ }), - -/***/ 74342: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toFinite) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js - - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/* harmony default export */ const _baseTrim = (baseTrim); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js - - - - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if ((0,isSymbol/* default */.A)(value)) { - return NAN; - } - if ((0,isObject/* default */.A)(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = (0,isObject/* default */.A)(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = _baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/* harmony default export */ const lodash_es_toNumber = (toNumber); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = lodash_es_toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/* harmony default export */ const lodash_es_toFinite = (toFinite); - - -/***/ }), - -/***/ 28894: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toString) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js - - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if ((0,isArray/* default */.A)(value)) { - // Recursively convert values (susceptible to call stack limits). - return (0,_arrayMap/* default */.A)(value, baseToString) + ''; - } - if ((0,isSymbol/* default */.A)(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const _baseToString = (baseToString); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js - - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString_toString(value) { - return value == null ? '' : _baseToString(value); -} - -/* harmony default export */ const lodash_es_toString = (toString_toString); - - -/***/ }), - -/***/ 5664: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28894); - - -/** Used to generate unique IDs. */ -var idCounter = 0; - -/** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ -function uniqueId(prefix) { - var id = ++idCounter; - return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(prefix) + id; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); - - -/***/ }), - -/***/ 38207: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_values) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js - - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return (0,_arrayMap/* default */.A)(props, function(key) { - return object[key]; - }); -} - -/* harmony default export */ const _baseValues = (baseValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js - - - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values(object) { - return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); -} - -/* harmony default export */ const lodash_es_values = (values); - - -/***/ }), - -/***/ 87426: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(63626); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21176); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(697); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99702); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99418); - - - - - - - - - - - - - - -let edgeCount = 0; -const drawEdge = function(elem, path, relation, conf, diagObj) { - const getRelationType = function(type) { - switch (type) { - case diagObj.db.relationType.AGGREGATION: - return "aggregation"; - case diagObj.db.relationType.EXTENSION: - return "extension"; - case diagObj.db.relationType.COMPOSITION: - return "composition"; - case diagObj.db.relationType.DEPENDENCY: - return "dependency"; - case diagObj.db.relationType.LOLLIPOP: - return "lollipop"; - } - }; - path.points = path.points.filter((p) => !Number.isNaN(p.y)); - const lineData = path.points; - const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(function(d) { - return d.x; - }).y(function(d) { - return d.y; - }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .qrM); - const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); - let url = ""; - if (conf.arrowMarkerAbsolute) { - url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; - url = url.replace(/\(/g, "\\("); - url = url.replace(/\)/g, "\\)"); - } - if (relation.relation.lineType == 1) { - svgPath.attr("class", "relation dashed-line"); - } - if (relation.relation.lineType == 10) { - svgPath.attr("class", "relation dotted-line"); - } - if (relation.relation.type1 !== "none") { - svgPath.attr( - "marker-start", - "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" - ); - } - if (relation.relation.type2 !== "none") { - svgPath.attr( - "marker-end", - "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" - ); - } - let x, y; - const l = path.points.length; - let labelPosition = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.u.calcLabelPosition(path.points); - x = labelPosition.x; - y = labelPosition.y; - let p1_card_x, p1_card_y; - let p2_card_x, p2_card_y; - if (l % 2 !== 0 && l > 1) { - let cardinality_1_point = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.u.calcCardinalityPosition( - relation.relation.type1 !== "none", - path.points, - path.points[0] - ); - let cardinality_2_point = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.u.calcCardinalityPosition( - relation.relation.type2 !== "none", - path.points, - path.points[l - 1] - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); - p1_card_x = cardinality_1_point.x; - p1_card_y = cardinality_1_point.y; - p2_card_x = cardinality_2_point.x; - p2_card_y = cardinality_2_point.y; - } - if (relation.title !== void 0) { - const g = elem.append("g").attr("class", "classLabel"); - const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); - window.label = label; - const bounds = label.node().getBBox(); - g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Rendering relation " + JSON.stringify(relation)); - if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { - const g = elem.append("g").attr("class", "cardinality"); - g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); - } - if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { - const g = elem.append("g").attr("class", "cardinality"); - g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); - } - edgeCount++; -}; -const drawClass = function(elem, classDef, conf, diagObj) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering class ", classDef, conf); - const id = classDef.id; - const classInfo = { - id, - label: classDef.id, - width: 0, - height: 0 - }; - const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); - let title; - if (classDef.link) { - title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); - } else { - title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); - } - let isFirst = true; - classDef.annotations.forEach(function(member) { - const titleText2 = title.append("tspan").text("«" + member + "»"); - if (!isFirst) { - titleText2.attr("dy", conf.textHeight); - } - isFirst = false; - }); - let classTitleString = getClassTitleString(classDef); - const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); - if (!isFirst) { - classTitle.attr("dy", conf.textHeight); - } - const titleHeight = title.node().getBBox().height; - let membersLine; - let membersBox; - let methodsLine; - if (classDef.members.length > 0) { - membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); - const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); - isFirst = true; - classDef.members.forEach(function(member) { - addTspan(members, member, isFirst, conf); - isFirst = false; - }); - membersBox = members.node().getBBox(); - } - if (classDef.methods.length > 0) { - methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); - const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); - isFirst = true; - classDef.methods.forEach(function(method) { - addTspan(methods, method, isFirst, conf); - isFirst = false; - }); - } - const classBox = g.node().getBBox(); - var cssClassStr = " "; - if (classDef.cssClasses.length > 0) { - cssClassStr = cssClassStr + classDef.cssClasses.join(" "); - } - const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); - const rectWidth = rect.node().getBBox().width; - title.node().childNodes.forEach(function(x) { - x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); - }); - if (classDef.tooltip) { - title.insert("title").text(classDef.tooltip); - } - if (membersLine) { - membersLine.attr("x2", rectWidth); - } - if (methodsLine) { - methodsLine.attr("x2", rectWidth); - } - classInfo.width = rectWidth; - classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; - return classInfo; -}; -const getClassTitleString = function(classDef) { - let classTitleString = classDef.id; - if (classDef.type) { - classTitleString += "<" + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.x)(classDef.type) + ">"; - } - return classTitleString; -}; -const drawNote = function(elem, note, conf, diagObj) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering note ", note, conf); - const id = note.id; - const noteInfo = { - id, - text: note.text, - width: 0, - height: 0 - }; - const g = elem.append("g").attr("id", id).attr("class", "classGroup"); - let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); - const lines = JSON.parse(`"${note.text}"`).split("\n"); - lines.forEach(function(line2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`Adding line: ${line2}`); - text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); - }); - const noteBox = g.node().getBBox(); - const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( - "height", - noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin - ); - const rectWidth = rect.node().getBBox().width; - text.node().childNodes.forEach(function(x) { - x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); - }); - noteInfo.width = rectWidth; - noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; - return noteInfo; -}; -const addTspan = function(textEl, member, isFirst, conf) { - const { displayText, cssStyle } = member.getDisplayDetails(); - const tSpan = textEl.append("tspan").attr("x", conf.padding).text(displayText); - if (cssStyle !== "") { - tSpan.attr("style", member.cssStyle); - } - if (!isFirst) { - tSpan.attr("dy", conf.textHeight); - } -}; -const svgDraw = { - getClassTitleString, - drawClass, - drawEdge, - drawNote -}; -let idCache = {}; -const padding = 20; -const getGraphId = function(label) { - const foundEntry = Object.entries(idCache).find((entry) => entry[1].label === label); - if (foundEntry) { - return foundEntry[0]; - } -}; -const insertMarkers = function(elem) { - elem.append("defs").append("marker").attr("id", "extensionStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); - elem.append("defs").append("marker").attr("id", "extensionEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); - elem.append("defs").append("marker").attr("id", "compositionStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", "compositionEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", "aggregationStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", "aggregationEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", "dependencyStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); -}; -const draw = function(text, id, _version, diagObj) { - const conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().class; - idCache = {}; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Rendering diagram " + text); - const securityLevel = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().securityLevel; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); - const diagram2 = root.select(`[id='${id}']`); - insertMarkers(diagram2); - const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .T({ - multigraph: true - }); - g.setGraph({ - isMultiGraph: true - }); - g.setDefaultEdgeLabel(function() { - return {}; - }); - const classes = diagObj.db.getClasses(); - const keys = Object.keys(classes); - for (const key of keys) { - const classDef = classes[key]; - const node = svgDraw.drawClass(diagram2, classDef, conf, diagObj); - idCache[node.id] = node; - g.setNode(node.id, node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Org height: " + node.height); - } - const relations = diagObj.db.getRelations(); - relations.forEach(function(relation) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info( - // cspell:ignore tjoho - "tjoho" + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation) - ); - g.setEdge( - getGraphId(relation.id1), - getGraphId(relation.id2), - { - relation - }, - relation.title || "DEFAULT" - ); - }); - const notes = diagObj.db.getNotes(); - notes.forEach(function(note) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`Adding note: ${JSON.stringify(note)}`); - const node = svgDraw.drawNote(diagram2, note, conf, diagObj); - idCache[node.id] = node; - g.setNode(node.id, node); - if (note.class && note.class in classes) { - g.setEdge( - note.id, - getGraphId(note.class), - { - relation: { - id1: note.id, - id2: note.class, - relation: { - type1: "none", - type2: "none", - lineType: 10 - } - } - }, - "DEFAULT" - ); - } - }); - (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .Zp)(g); - g.nodes().forEach(function(v) { - if (v !== void 0 && g.node(v) !== void 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Node " + v + ": " + JSON.stringify(g.node(v))); - root.select("#" + (diagObj.db.lookUpDomId(v) || v)).attr( - "transform", - "translate(" + (g.node(v).x - g.node(v).width / 2) + "," + (g.node(v).y - g.node(v).height / 2) + " )" - ); - } - }); - g.edges().forEach(function(e) { - if (e !== void 0 && g.edge(e) !== void 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(g.edge(e))); - svgDraw.drawEdge(diagram2, g.edge(e), g.edge(e).relation, conf, diagObj); - } - }); - const svgBounds = diagram2.node().getBBox(); - const width = svgBounds.width + padding * 2; - const height = svgBounds.height + padding * 2; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.i)(diagram2, height, width, conf.useMaxWidth); - const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`viewBox ${vBox}`); - diagram2.attr("viewBox", vBox); -}; -const renderer = { - draw -}; -const diagram = { - parser: _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_7__.p, - db: _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_7__.d, - renderer, - styles: _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_7__.s, - init: (cnf) => { - if (!cnf.class) { - cnf.class = {}; - } - cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; - _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); - } -}; - - - -/***/ }), - -/***/ 63626: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ d: () => (/* binding */ db), -/* harmony export */ p: () => (/* binding */ parser$1), -/* harmony export */ s: () => (/* binding */ styles) -/* harmony export */ }); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 17], $V1 = [1, 18], $V2 = [1, 19], $V3 = [1, 39], $V4 = [1, 40], $V5 = [1, 25], $V6 = [1, 23], $V7 = [1, 24], $V8 = [1, 31], $V9 = [1, 32], $Va = [1, 33], $Vb = [1, 34], $Vc = [1, 35], $Vd = [1, 36], $Ve = [1, 26], $Vf = [1, 27], $Vg = [1, 28], $Vh = [1, 29], $Vi = [1, 43], $Vj = [1, 30], $Vk = [1, 42], $Vl = [1, 44], $Vm = [1, 41], $Vn = [1, 45], $Vo = [1, 9], $Vp = [1, 8, 9], $Vq = [1, 56], $Vr = [1, 57], $Vs = [1, 58], $Vt = [1, 59], $Vu = [1, 60], $Vv = [1, 61], $Vw = [1, 62], $Vx = [1, 8, 9, 39], $Vy = [1, 74], $Vz = [1, 8, 9, 12, 13, 21, 37, 39, 42, 59, 60, 61, 62, 63, 64, 65, 70, 72], $VA = [1, 8, 9, 12, 13, 19, 21, 37, 39, 42, 46, 59, 60, 61, 62, 63, 64, 65, 70, 72, 74, 80, 95, 97, 98], $VB = [13, 74, 80, 95, 97, 98], $VC = [13, 64, 65, 74, 80, 95, 97, 98], $VD = [13, 59, 60, 61, 62, 63, 74, 80, 95, 97, 98], $VE = [1, 93], $VF = [1, 110], $VG = [1, 108], $VH = [1, 102], $VI = [1, 103], $VJ = [1, 104], $VK = [1, 105], $VL = [1, 106], $VM = [1, 107], $VN = [1, 109], $VO = [1, 8, 9, 37, 39, 42], $VP = [1, 8, 9, 21], $VQ = [1, 8, 9, 78], $VR = [1, 8, 9, 21, 73, 74, 78, 80, 81, 82, 83, 84, 85]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "statements": 5, "graphConfig": 6, "CLASS_DIAGRAM": 7, "NEWLINE": 8, "EOF": 9, "statement": 10, "classLabel": 11, "SQS": 12, "STR": 13, "SQE": 14, "namespaceName": 15, "alphaNumToken": 16, "className": 17, "classLiteralName": 18, "GENERICTYPE": 19, "relationStatement": 20, "LABEL": 21, "namespaceStatement": 22, "classStatement": 23, "memberStatement": 24, "annotationStatement": 25, "clickStatement": 26, "styleStatement": 27, "cssClassStatement": 28, "noteStatement": 29, "direction": 30, "acc_title": 31, "acc_title_value": 32, "acc_descr": 33, "acc_descr_value": 34, "acc_descr_multiline_value": 35, "namespaceIdentifier": 36, "STRUCT_START": 37, "classStatements": 38, "STRUCT_STOP": 39, "NAMESPACE": 40, "classIdentifier": 41, "STYLE_SEPARATOR": 42, "members": 43, "CLASS": 44, "ANNOTATION_START": 45, "ANNOTATION_END": 46, "MEMBER": 47, "SEPARATOR": 48, "relation": 49, "NOTE_FOR": 50, "noteText": 51, "NOTE": 52, "direction_tb": 53, "direction_bt": 54, "direction_rl": 55, "direction_lr": 56, "relationType": 57, "lineType": 58, "AGGREGATION": 59, "EXTENSION": 60, "COMPOSITION": 61, "DEPENDENCY": 62, "LOLLIPOP": 63, "LINE": 64, "DOTTED_LINE": 65, "CALLBACK": 66, "LINK": 67, "LINK_TARGET": 68, "CLICK": 69, "CALLBACK_NAME": 70, "CALLBACK_ARGS": 71, "HREF": 72, "STYLE": 73, "ALPHA": 74, "stylesOpt": 75, "CSSCLASS": 76, "style": 77, "COMMA": 78, "styleComponent": 79, "NUM": 80, "COLON": 81, "UNIT": 82, "SPACE": 83, "BRKT": 84, "PCT": 85, "commentToken": 86, "textToken": 87, "graphCodeTokens": 88, "textNoTagsToken": 89, "TAGSTART": 90, "TAGEND": 91, "==": 92, "--": 93, "DEFAULT": 94, "MINUS": 95, "keywords": 96, "UNICODE_TEXT": 97, "BQUOTE_STR": 98, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 7: "CLASS_DIAGRAM", 8: "NEWLINE", 9: "EOF", 12: "SQS", 13: "STR", 14: "SQE", 19: "GENERICTYPE", 21: "LABEL", 31: "acc_title", 32: "acc_title_value", 33: "acc_descr", 34: "acc_descr_value", 35: "acc_descr_multiline_value", 37: "STRUCT_START", 39: "STRUCT_STOP", 40: "NAMESPACE", 42: "STYLE_SEPARATOR", 44: "CLASS", 45: "ANNOTATION_START", 46: "ANNOTATION_END", 47: "MEMBER", 48: "SEPARATOR", 50: "NOTE_FOR", 52: "NOTE", 53: "direction_tb", 54: "direction_bt", 55: "direction_rl", 56: "direction_lr", 59: "AGGREGATION", 60: "EXTENSION", 61: "COMPOSITION", 62: "DEPENDENCY", 63: "LOLLIPOP", 64: "LINE", 65: "DOTTED_LINE", 66: "CALLBACK", 67: "LINK", 68: "LINK_TARGET", 69: "CLICK", 70: "CALLBACK_NAME", 71: "CALLBACK_ARGS", 72: "HREF", 73: "STYLE", 74: "ALPHA", 76: "CSSCLASS", 78: "COMMA", 80: "NUM", 81: "COLON", 82: "UNIT", 83: "SPACE", 84: "BRKT", 85: "PCT", 88: "graphCodeTokens", 90: "TAGSTART", 91: "TAGEND", 92: "==", 93: "--", 94: "DEFAULT", 95: "MINUS", 96: "keywords", 97: "UNICODE_TEXT", 98: "BQUOTE_STR" }, - productions_: [0, [3, 1], [3, 1], [4, 1], [6, 4], [5, 1], [5, 2], [5, 3], [11, 3], [15, 1], [15, 2], [17, 1], [17, 1], [17, 2], [17, 2], [17, 2], [10, 1], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [22, 4], [22, 5], [36, 2], [38, 1], [38, 2], [38, 3], [23, 1], [23, 3], [23, 4], [23, 6], [41, 2], [41, 3], [25, 4], [43, 1], [43, 2], [24, 1], [24, 2], [24, 1], [24, 1], [20, 3], [20, 4], [20, 4], [20, 5], [29, 3], [29, 2], [30, 1], [30, 1], [30, 1], [30, 1], [49, 3], [49, 2], [49, 2], [49, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [58, 1], [58, 1], [26, 3], [26, 4], [26, 3], [26, 4], [26, 4], [26, 5], [26, 3], [26, 4], [26, 4], [26, 5], [26, 4], [26, 5], [26, 5], [26, 6], [27, 3], [28, 3], [75, 1], [75, 3], [77, 1], [77, 2], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [86, 1], [86, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [89, 1], [89, 1], [89, 1], [89, 1], [16, 1], [16, 1], [16, 1], [16, 1], [18, 1], [51, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 8: - this.$ = $$[$0 - 1]; - break; - case 9: - case 11: - case 12: - this.$ = $$[$0]; - break; - case 10: - case 13: - this.$ = $$[$0 - 1] + $$[$0]; - break; - case 14: - case 15: - this.$ = $$[$0 - 1] + "~" + $$[$0] + "~"; - break; - case 16: - yy.addRelation($$[$0]); - break; - case 17: - $$[$0 - 1].title = yy.cleanupLabel($$[$0]); - yy.addRelation($$[$0 - 1]); - break; - case 27: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 28: - case 29: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 30: - yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]); - break; - case 31: - yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]); - break; - case 32: - this.$ = $$[$0]; - yy.addNamespace($$[$0]); - break; - case 33: - this.$ = [$$[$0]]; - break; - case 34: - this.$ = [$$[$0 - 1]]; - break; - case 35: - $$[$0].unshift($$[$0 - 2]); - this.$ = $$[$0]; - break; - case 37: - yy.setCssClass($$[$0 - 2], $$[$0]); - break; - case 38: - yy.addMembers($$[$0 - 3], $$[$0 - 1]); - break; - case 39: - yy.setCssClass($$[$0 - 5], $$[$0 - 3]); - yy.addMembers($$[$0 - 5], $$[$0 - 1]); - break; - case 40: - this.$ = $$[$0]; - yy.addClass($$[$0]); - break; - case 41: - this.$ = $$[$0 - 1]; - yy.addClass($$[$0 - 1]); - yy.setClassLabel($$[$0 - 1], $$[$0]); - break; - case 42: - yy.addAnnotation($$[$0], $$[$0 - 2]); - break; - case 43: - this.$ = [$$[$0]]; - break; - case 44: - $$[$0].push($$[$0 - 1]); - this.$ = $$[$0]; - break; - case 45: - break; - case 46: - yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); - break; - case 47: - break; - case 48: - break; - case 49: - this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" }; - break; - case 50: - this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" }; - break; - case 51: - this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] }; - break; - case 52: - this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] }; - break; - case 53: - yy.addNote($$[$0], $$[$0 - 1]); - break; - case 54: - yy.addNote($$[$0]); - break; - case 55: - yy.setDirection("TB"); - break; - case 56: - yy.setDirection("BT"); - break; - case 57: - yy.setDirection("RL"); - break; - case 58: - yy.setDirection("LR"); - break; - case 59: - this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] }; - break; - case 60: - this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] }; - break; - case 61: - this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] }; - break; - case 62: - this.$ = { type1: "none", type2: "none", lineType: $$[$0] }; - break; - case 63: - this.$ = yy.relationType.AGGREGATION; - break; - case 64: - this.$ = yy.relationType.EXTENSION; - break; - case 65: - this.$ = yy.relationType.COMPOSITION; - break; - case 66: - this.$ = yy.relationType.DEPENDENCY; - break; - case 67: - this.$ = yy.relationType.LOLLIPOP; - break; - case 68: - this.$ = yy.lineType.LINE; - break; - case 69: - this.$ = yy.lineType.DOTTED_LINE; - break; - case 70: - case 76: - this.$ = $$[$0 - 2]; - yy.setClickEvent($$[$0 - 1], $$[$0]); - break; - case 71: - case 77: - this.$ = $$[$0 - 3]; - yy.setClickEvent($$[$0 - 2], $$[$0 - 1]); - yy.setTooltip($$[$0 - 2], $$[$0]); - break; - case 72: - this.$ = $$[$0 - 2]; - yy.setLink($$[$0 - 1], $$[$0]); - break; - case 73: - this.$ = $$[$0 - 3]; - yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); - break; - case 74: - this.$ = $$[$0 - 3]; - yy.setLink($$[$0 - 2], $$[$0 - 1]); - yy.setTooltip($$[$0 - 2], $$[$0]); - break; - case 75: - this.$ = $$[$0 - 4]; - yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); - yy.setTooltip($$[$0 - 3], $$[$0 - 1]); - break; - case 78: - this.$ = $$[$0 - 3]; - yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); - break; - case 79: - this.$ = $$[$0 - 4]; - yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); - yy.setTooltip($$[$0 - 3], $$[$0]); - break; - case 80: - this.$ = $$[$0 - 3]; - yy.setLink($$[$0 - 2], $$[$0]); - break; - case 81: - this.$ = $$[$0 - 4]; - yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]); - break; - case 82: - this.$ = $$[$0 - 4]; - yy.setLink($$[$0 - 3], $$[$0 - 1]); - yy.setTooltip($$[$0 - 3], $$[$0]); - break; - case 83: - this.$ = $$[$0 - 5]; - yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); - yy.setTooltip($$[$0 - 4], $$[$0 - 1]); - break; - case 84: - this.$ = $$[$0 - 2]; - yy.setCssStyle($$[$0 - 1], $$[$0]); - break; - case 85: - yy.setCssClass($$[$0 - 1], $$[$0]); - break; - case 86: - this.$ = [$$[$0]]; - break; - case 87: - $$[$0 - 2].push($$[$0]); - this.$ = $$[$0 - 2]; - break; - case 89: - this.$ = $$[$0 - 1] + $$[$0]; - break; - } - }, - table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: [1, 6], 10: 5, 16: 37, 17: 20, 18: 38, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 31: $V0, 33: $V1, 35: $V2, 36: 21, 40: $V3, 41: 22, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, o($Vo, [2, 5], { 8: [1, 46] }), { 8: [1, 47] }, o($Vp, [2, 16], { 21: [1, 48] }), o($Vp, [2, 18]), o($Vp, [2, 19]), o($Vp, [2, 20]), o($Vp, [2, 21]), o($Vp, [2, 22]), o($Vp, [2, 23]), o($Vp, [2, 24]), o($Vp, [2, 25]), o($Vp, [2, 26]), { 32: [1, 49] }, { 34: [1, 50] }, o($Vp, [2, 29]), o($Vp, [2, 45], { 49: 51, 57: 54, 58: 55, 13: [1, 52], 21: [1, 53], 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw }), { 37: [1, 63] }, o($Vx, [2, 36], { 37: [1, 65], 42: [1, 64] }), o($Vp, [2, 47]), o($Vp, [2, 48]), { 16: 66, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 16: 37, 17: 67, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 16: 37, 17: 68, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 16: 37, 17: 69, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 74: [1, 70] }, { 13: [1, 71] }, { 16: 37, 17: 72, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 13: $Vy, 51: 73 }, o($Vp, [2, 55]), o($Vp, [2, 56]), o($Vp, [2, 57]), o($Vp, [2, 58]), o($Vz, [2, 11], { 16: 37, 18: 38, 17: 75, 19: [1, 76], 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }), o($Vz, [2, 12], { 19: [1, 77] }), { 15: 78, 16: 79, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 16: 37, 17: 80, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VA, [2, 112]), o($VA, [2, 113]), o($VA, [2, 114]), o($VA, [2, 115]), o([1, 8, 9, 12, 13, 19, 21, 37, 39, 42, 59, 60, 61, 62, 63, 64, 65, 70, 72], [2, 116]), o($Vo, [2, 6], { 10: 5, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 17: 20, 36: 21, 41: 22, 16: 37, 18: 38, 5: 81, 31: $V0, 33: $V1, 35: $V2, 40: $V3, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }), { 5: 82, 10: 5, 16: 37, 17: 20, 18: 38, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 31: $V0, 33: $V1, 35: $V2, 36: 21, 40: $V3, 41: 22, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($Vp, [2, 17]), o($Vp, [2, 27]), o($Vp, [2, 28]), { 13: [1, 84], 16: 37, 17: 83, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 49: 85, 57: 54, 58: 55, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw }, o($Vp, [2, 46]), { 58: 86, 64: $Vv, 65: $Vw }, o($VB, [2, 62], { 57: 87, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu }), o($VC, [2, 63]), o($VC, [2, 64]), o($VC, [2, 65]), o($VC, [2, 66]), o($VC, [2, 67]), o($VD, [2, 68]), o($VD, [2, 69]), { 8: [1, 89], 23: 90, 38: 88, 41: 22, 44: $V4 }, { 16: 91, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 43: 92, 47: $VE }, { 46: [1, 94] }, { 13: [1, 95] }, { 13: [1, 96] }, { 70: [1, 97], 72: [1, 98] }, { 21: $VF, 73: $VG, 74: $VH, 75: 99, 77: 100, 79: 101, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }, { 74: [1, 111] }, { 13: $Vy, 51: 112 }, o($Vp, [2, 54]), o($Vp, [2, 117]), o($Vz, [2, 13]), o($Vz, [2, 14]), o($Vz, [2, 15]), { 37: [2, 32] }, { 15: 113, 16: 79, 37: [2, 9], 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, o($VO, [2, 40], { 11: 114, 12: [1, 115] }), o($Vo, [2, 7]), { 9: [1, 116] }, o($VP, [2, 49]), { 16: 37, 17: 117, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 13: [1, 119], 16: 37, 17: 118, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VB, [2, 61], { 57: 120, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu }), o($VB, [2, 60]), { 39: [1, 121] }, { 23: 90, 38: 122, 41: 22, 44: $V4 }, { 8: [1, 123], 39: [2, 33] }, o($Vx, [2, 37], { 37: [1, 124] }), { 39: [1, 125] }, { 39: [2, 43], 43: 126, 47: $VE }, { 16: 37, 17: 127, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($Vp, [2, 70], { 13: [1, 128] }), o($Vp, [2, 72], { 13: [1, 130], 68: [1, 129] }), o($Vp, [2, 76], { 13: [1, 131], 71: [1, 132] }), { 13: [1, 133] }, o($Vp, [2, 84], { 78: [1, 134] }), o($VQ, [2, 86], { 79: 135, 21: $VF, 73: $VG, 74: $VH, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }), o($VR, [2, 88]), o($VR, [2, 90]), o($VR, [2, 91]), o($VR, [2, 92]), o($VR, [2, 93]), o($VR, [2, 94]), o($VR, [2, 95]), o($VR, [2, 96]), o($VR, [2, 97]), o($VR, [2, 98]), o($Vp, [2, 85]), o($Vp, [2, 53]), { 37: [2, 10] }, o($VO, [2, 41]), { 13: [1, 136] }, { 1: [2, 4] }, o($VP, [2, 51]), o($VP, [2, 50]), { 16: 37, 17: 137, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VB, [2, 59]), o($Vp, [2, 30]), { 39: [1, 138] }, { 23: 90, 38: 139, 39: [2, 34], 41: 22, 44: $V4 }, { 43: 140, 47: $VE }, o($Vx, [2, 38]), { 39: [2, 44] }, o($Vp, [2, 42]), o($Vp, [2, 71]), o($Vp, [2, 73]), o($Vp, [2, 74], { 68: [1, 141] }), o($Vp, [2, 77]), o($Vp, [2, 78], { 13: [1, 142] }), o($Vp, [2, 80], { 13: [1, 144], 68: [1, 143] }), { 21: $VF, 73: $VG, 74: $VH, 77: 145, 79: 101, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }, o($VR, [2, 89]), { 14: [1, 146] }, o($VP, [2, 52]), o($Vp, [2, 31]), { 39: [2, 35] }, { 39: [1, 147] }, o($Vp, [2, 75]), o($Vp, [2, 79]), o($Vp, [2, 81]), o($Vp, [2, 82], { 68: [1, 148] }), o($VQ, [2, 87], { 79: 135, 21: $VF, 73: $VG, 74: $VH, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }), o($VO, [2, 8]), o($Vx, [2, 39]), o($Vp, [2, 83])], - defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 78: [2, 32], 113: [2, 10], 116: [2, 4], 126: [2, 44], 139: [2, 35] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: {}, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - return 53; - case 1: - return 54; - case 2: - return 55; - case 3: - return 56; - case 4: - break; - case 5: - break; - case 6: - this.begin("acc_title"); - return 31; - case 7: - this.popState(); - return "acc_title_value"; - case 8: - this.begin("acc_descr"); - return 33; - case 9: - this.popState(); - return "acc_descr_value"; - case 10: - this.begin("acc_descr_multiline"); - break; - case 11: - this.popState(); - break; - case 12: - return "acc_descr_multiline_value"; - case 13: - return 8; - case 14: - break; - case 15: - return 7; - case 16: - return 7; - case 17: - return "EDGE_STATE"; - case 18: - this.begin("callback_name"); - break; - case 19: - this.popState(); - break; - case 20: - this.popState(); - this.begin("callback_args"); - break; - case 21: - return 70; - case 22: - this.popState(); - break; - case 23: - return 71; - case 24: - this.popState(); - break; - case 25: - return "STR"; - case 26: - this.begin("string"); - break; - case 27: - return 73; - case 28: - this.begin("namespace"); - return 40; - case 29: - this.popState(); - return 8; - case 30: - break; - case 31: - this.begin("namespace-body"); - return 37; - case 32: - this.popState(); - return 39; - case 33: - return "EOF_IN_STRUCT"; - case 34: - return 8; - case 35: - break; - case 36: - return "EDGE_STATE"; - case 37: - this.begin("class"); - return 44; - case 38: - this.popState(); - return 8; - case 39: - break; - case 40: - this.popState(); - this.popState(); - return 39; - case 41: - this.begin("class-body"); - return 37; - case 42: - this.popState(); - return 39; - case 43: - return "EOF_IN_STRUCT"; - case 44: - return "EDGE_STATE"; - case 45: - return "OPEN_IN_STRUCT"; - case 46: - break; - case 47: - return "MEMBER"; - case 48: - return 76; - case 49: - return 66; - case 50: - return 67; - case 51: - return 69; - case 52: - return 50; - case 53: - return 52; - case 54: - return 45; - case 55: - return 46; - case 56: - return 72; - case 57: - this.popState(); - break; - case 58: - return "GENERICTYPE"; - case 59: - this.begin("generic"); - break; - case 60: - this.popState(); - break; - case 61: - return "BQUOTE_STR"; - case 62: - this.begin("bqstring"); - break; - case 63: - return 68; - case 64: - return 68; - case 65: - return 68; - case 66: - return 68; - case 67: - return 60; - case 68: - return 60; - case 69: - return 62; - case 70: - return 62; - case 71: - return 61; - case 72: - return 59; - case 73: - return 63; - case 74: - return 64; - case 75: - return 65; - case 76: - return 21; - case 77: - return 42; - case 78: - return 95; - case 79: - return "DOT"; - case 80: - return "PLUS"; - case 81: - return 81; - case 82: - return 78; - case 83: - return 84; - case 84: - return 84; - case 85: - return 85; - case 86: - return "EQUALS"; - case 87: - return "EQUALS"; - case 88: - return 74; - case 89: - return 12; - case 90: - return 14; - case 91: - return "PUNCTUATION"; - case 92: - return 80; - case 93: - return 97; - case 94: - return 83; - case 95: - return 83; - case 96: - return 9; - } - }, - rules: [/^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:classDiagram-v2\b)/, /^(?:classDiagram\b)/, /^(?:\[\*\])/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:["])/, /^(?:[^"]*)/, /^(?:["])/, /^(?:style\b)/, /^(?:namespace\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:\[\*\])/, /^(?:class\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\[\*\])/, /^(?:[{])/, /^(?:[\n])/, /^(?:[^{}\n]*)/, /^(?:cssClass\b)/, /^(?:callback\b)/, /^(?:link\b)/, /^(?:click\b)/, /^(?:note for\b)/, /^(?:note\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href\b)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:~)/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:\s*\(\))/, /^(?:--)/, /^(?:\.\.)/, /^(?::{1}[^:\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?::)/, /^(?:,)/, /^(?:#)/, /^(?:#)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\w+)/, /^(?:\[)/, /^(?:\])/, /^(?:[!"#$%&'*+,-.`?\\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:\s)/, /^(?:$)/], - conditions: { "namespace-body": { "rules": [26, 32, 33, 34, 35, 36, 37, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "namespace": { "rules": [26, 28, 29, 30, 31, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "class-body": { "rules": [26, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "class": { "rules": [26, 38, 39, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_descr": { "rules": [9, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_title": { "rules": [7, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "callback_args": { "rules": [22, 23, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "callback_name": { "rules": [19, 20, 21, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "href": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "struct": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "generic": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "bqstring": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "string": { "rules": [24, 25, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 26, 27, 28, 37, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -const visibilityValues = ["#", "+", "~", "-", ""]; -class ClassMember { - constructor(input, memberType) { - this.memberType = memberType; - this.visibility = ""; - this.classifier = ""; - const sanitizedInput = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)(input, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - this.parseMember(sanitizedInput); - } - getDisplayDetails() { - let displayText = this.visibility + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.x)(this.id); - if (this.memberType === "method") { - displayText += `(${(0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.x)(this.parameters.trim())})`; - if (this.returnType) { - displayText += " : " + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.x)(this.returnType); - } - } - displayText = displayText.trim(); - const cssStyle = this.parseClassifier(); - return { - displayText, - cssStyle - }; - } - parseMember(input) { - let potentialClassifier = ""; - if (this.memberType === "method") { - const methodRegEx = /([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/; - const match = input.match(methodRegEx); - if (match) { - const detectedVisibility = match[1] ? match[1].trim() : ""; - if (visibilityValues.includes(detectedVisibility)) { - this.visibility = detectedVisibility; - } - this.id = match[2].trim(); - this.parameters = match[3] ? match[3].trim() : ""; - potentialClassifier = match[4] ? match[4].trim() : ""; - this.returnType = match[5] ? match[5].trim() : ""; - if (potentialClassifier === "") { - const lastChar = this.returnType.substring(this.returnType.length - 1); - if (lastChar.match(/[$*]/)) { - potentialClassifier = lastChar; - this.returnType = this.returnType.substring(0, this.returnType.length - 1); - } - } - } - } else { - const length = input.length; - const firstChar = input.substring(0, 1); - const lastChar = input.substring(length - 1); - if (visibilityValues.includes(firstChar)) { - this.visibility = firstChar; - } - if (lastChar.match(/[$*]/)) { - potentialClassifier = lastChar; - } - this.id = input.substring( - this.visibility === "" ? 0 : 1, - potentialClassifier === "" ? length : length - 1 - ); - } - this.classifier = potentialClassifier; - } - parseClassifier() { - switch (this.classifier) { - case "*": - return "font-style:italic;"; - case "$": - return "text-decoration:underline;"; - default: - return ""; - } - } -} -const MERMAID_DOM_ID_PREFIX = "classId-"; -let relations = []; -let classes = {}; -let notes = []; -let classCounter = 0; -let namespaces = {}; -let namespaceCounter = 0; -let functions = []; -const sanitizeText = (txt) => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); -const splitClassNameAndType = function(_id) { - const id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - let genericType = ""; - let className = id; - if (id.indexOf("~") > 0) { - const split = id.split("~"); - className = sanitizeText(split[0]); - genericType = sanitizeText(split[1]); - } - return { className, type: genericType }; -}; -const setClassLabel = function(_id, label) { - const id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - if (label) { - label = sanitizeText(label); - } - const { className } = splitClassNameAndType(id); - classes[className].label = label; -}; -const addClass = function(_id) { - const id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - const { className, type } = splitClassNameAndType(id); - if (Object.hasOwn(classes, className)) { - return; - } - const name = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(className, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - classes[name] = { - id: name, - type, - label: name, - cssClasses: [], - methods: [], - members: [], - annotations: [], - styles: [], - domId: MERMAID_DOM_ID_PREFIX + name + "-" + classCounter - }; - classCounter++; -}; -const lookUpDomId = function(_id) { - const id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - if (id in classes) { - return classes[id].domId; - } - throw new Error("Class not found: " + id); -}; -const clear = function() { - relations = []; - classes = {}; - notes = []; - functions = []; - functions.push(setupToolTips); - namespaces = {}; - namespaceCounter = 0; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.v)(); -}; -const getClass = function(id) { - return classes[id]; -}; -const getClasses = function() { - return classes; -}; -const getRelations = function() { - return relations; -}; -const getNotes = function() { - return notes; -}; -const addRelation = function(relation) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Adding relation: " + JSON.stringify(relation)); - addClass(relation.id1); - addClass(relation.id2); - relation.id1 = splitClassNameAndType(relation.id1).className; - relation.id2 = splitClassNameAndType(relation.id2).className; - relation.relationTitle1 = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle1.trim(), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - relation.relationTitle2 = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle2.trim(), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - relations.push(relation); -}; -const addAnnotation = function(className, annotation) { - const validatedClassName = splitClassNameAndType(className).className; - classes[validatedClassName].annotations.push(annotation); -}; -const addMember = function(className, member) { - addClass(className); - const validatedClassName = splitClassNameAndType(className).className; - const theClass = classes[validatedClassName]; - if (typeof member === "string") { - const memberString = member.trim(); - if (memberString.startsWith("<<") && memberString.endsWith(">>")) { - theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2))); - } else if (memberString.indexOf(")") > 0) { - theClass.methods.push(new ClassMember(memberString, "method")); - } else if (memberString) { - theClass.members.push(new ClassMember(memberString, "attribute")); - } - } -}; -const addMembers = function(className, members) { - if (Array.isArray(members)) { - members.reverse(); - members.forEach((member) => addMember(className, member)); - } -}; -const addNote = function(text, className) { - const note = { - id: `note${notes.length}`, - class: className, - text - }; - notes.push(note); -}; -const cleanupLabel = function(label) { - if (label.startsWith(":")) { - label = label.substring(1); - } - return sanitizeText(label.trim()); -}; -const setCssClass = function(ids, className) { - ids.split(",").forEach(function(_id) { - let id = _id; - if (_id[0].match(/\d/)) { - id = MERMAID_DOM_ID_PREFIX + id; - } - if (classes[id] !== void 0) { - classes[id].cssClasses.push(className); - } - }); -}; -const setTooltip = function(ids, tooltip) { - ids.split(",").forEach(function(id) { - if (tooltip !== void 0) { - classes[id].tooltip = sanitizeText(tooltip); - } - }); -}; -const getTooltip = function(id, namespace) { - if (namespace) { - return namespaces[namespace].classes[id].tooltip; - } - return classes[id].tooltip; -}; -const setLink = function(ids, linkStr, target) { - const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - ids.split(",").forEach(function(_id) { - let id = _id; - if (_id[0].match(/\d/)) { - id = MERMAID_DOM_ID_PREFIX + id; - } - if (classes[id] !== void 0) { - classes[id].link = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); - if (config.securityLevel === "sandbox") { - classes[id].linkTarget = "_top"; - } else if (typeof target === "string") { - classes[id].linkTarget = sanitizeText(target); - } else { - classes[id].linkTarget = "_blank"; - } - } - }); - setCssClass(ids, "clickable"); -}; -const setClickEvent = function(ids, functionName, functionArgs) { - ids.split(",").forEach(function(id) { - setClickFunc(id, functionName, functionArgs); - classes[id].haveCallback = true; - }); - setCssClass(ids, "clickable"); -}; -const setClickFunc = function(_domId, functionName, functionArgs) { - const domId = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_domId, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - if (config.securityLevel !== "loose") { - return; - } - if (functionName === void 0) { - return; - } - const id = domId; - if (classes[id] !== void 0) { - const elemId = lookUpDomId(id); - let argList = []; - if (typeof functionArgs === "string") { - argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); - for (let i = 0; i < argList.length; i++) { - let item = argList[i].trim(); - if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { - item = item.substr(1, item.length - 2); - } - argList[i] = item; - } - } - if (argList.length === 0) { - argList.push(elemId); - } - functions.push(function() { - const elem = document.querySelector(`[id="${elemId}"]`); - if (elem !== null) { - elem.addEventListener( - "click", - function() { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); - }, - false - ); - } - }); - } -}; -const bindFunctions = function(element) { - functions.forEach(function(fun) { - fun(element); - }); -}; -const lineType = { - LINE: 0, - DOTTED_LINE: 1 -}; -const relationType = { - AGGREGATION: 0, - EXTENSION: 1, - COMPOSITION: 2, - DEPENDENCY: 3, - LOLLIPOP: 4 -}; -const setupToolTips = function(element) { - let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(".mermaidTooltip"); - if ((tooltipElem._groups || tooltipElem)[0][0] === null) { - tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); - } - const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(element).select("svg"); - const nodes = svg.selectAll("g.node"); - nodes.on("mouseover", function() { - const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); - const title = el.attr("title"); - if (title === null) { - return; - } - const rect = this.getBoundingClientRect(); - tooltipElem.transition().duration(200).style("opacity", ".9"); - tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); - tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); - el.classed("hover", true); - }).on("mouseout", function() { - tooltipElem.transition().duration(500).style("opacity", 0); - const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); - el.classed("hover", false); - }); -}; -functions.push(setupToolTips); -let direction = "TB"; -const getDirection = () => direction; -const setDirection = (dir) => { - direction = dir; -}; -const addNamespace = function(id) { - if (namespaces[id] !== void 0) { - return; - } - namespaces[id] = { - id, - classes: {}, - children: {}, - domId: MERMAID_DOM_ID_PREFIX + id + "-" + namespaceCounter - }; - namespaceCounter++; -}; -const getNamespace = function(name) { - return namespaces[name]; -}; -const getNamespaces = function() { - return namespaces; -}; -const addClassesToNamespace = function(id, classNames) { - if (namespaces[id] === void 0) { - return; - } - for (const name of classNames) { - const { className } = splitClassNameAndType(name); - classes[className].parent = id; - namespaces[id].classes[className] = classes[className]; - } -}; -const setCssStyle = function(id, styles2) { - const thisClass = classes[id]; - if (!styles2 || !thisClass) { - return; - } - for (const s of styles2) { - if (s.includes(",")) { - thisClass.styles.push(...s.split(",")); - } else { - thisClass.styles.push(s); - } - } -}; -const db = { - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.g, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.a, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.b, - getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().class, - addClass, - bindFunctions, - clear, - getClass, - getClasses, - getNotes, - addAnnotation, - addNote, - getRelations, - addRelation, - getDirection, - setDirection, - addMember, - addMembers, - cleanupLabel, - lineType, - relationType, - setClickEvent, - setCssClass, - setLink, - getTooltip, - setTooltip, - lookUpDomId, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.t, - setClassLabel, - addNamespace, - addClassesToNamespace, - getNamespace, - getNamespaces, - setCssStyle -}; -const getStyles = (options) => `g.classGroup text { - fill: ${options.nodeBorder || options.classText}; - stroke: none; - font-family: ${options.fontFamily}; - font-size: 10px; - - .title { - font-weight: bolder; - } - -} - -.nodeLabel, .edgeLabel { - color: ${options.classText}; -} -.edgeLabel .label rect { - fill: ${options.mainBkg}; -} -.label text { - fill: ${options.classText}; -} -.edgeLabel .label span { - background: ${options.mainBkg}; -} - -.classTitle { - font-weight: bolder; -} -.node rect, - .node circle, - .node ellipse, - .node polygon, - .node path { - fill: ${options.mainBkg}; - stroke: ${options.nodeBorder}; - stroke-width: 1px; - } - - -.divider { - stroke: ${options.nodeBorder}; - stroke-width: 1; -} - -g.clickable { - cursor: pointer; -} - -g.classGroup rect { - fill: ${options.mainBkg}; - stroke: ${options.nodeBorder}; -} - -g.classGroup line { - stroke: ${options.nodeBorder}; - stroke-width: 1; -} - -.classLabel .box { - stroke: none; - stroke-width: 0; - fill: ${options.mainBkg}; - opacity: 0.5; -} - -.classLabel .label { - fill: ${options.nodeBorder}; - font-size: 10px; -} - -.relation { - stroke: ${options.lineColor}; - stroke-width: 1; - fill: none; -} - -.dashed-line{ - stroke-dasharray: 3; -} - -.dotted-line{ - stroke-dasharray: 1 2; -} - -#compositionStart, .composition { - fill: ${options.lineColor} !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#compositionEnd, .composition { - fill: ${options.lineColor} !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#dependencyStart, .dependency { - fill: ${options.lineColor} !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#dependencyStart, .dependency { - fill: ${options.lineColor} !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#extensionStart, .extension { - fill: transparent !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#extensionEnd, .extension { - fill: transparent !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#aggregationStart, .aggregation { - fill: transparent !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#aggregationEnd, .aggregation { - fill: transparent !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#lollipopStart, .lollipop { - fill: ${options.mainBkg} !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#lollipopEnd, .lollipop { - fill: ${options.mainBkg} !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -.edgeTerminals { - font-size: 11px; - line-height: initial; -} - -.classTitleText { - text-anchor: middle; - font-size: 18px; - fill: ${options.textColor}; -} -`; -const styles = getStyles; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/42e3560a.c10d6b08.js b/pr-preview/pr-1594/assets/js/42e3560a.c10d6b08.js deleted file mode 100644 index 7ceabb3f04..0000000000 --- a/pr-preview/pr-1594/assets/js/42e3560a.c10d6b08.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1021],{95464:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var i=n(74848),s=n(28453);const r={},o=void 0,c={id:"reference/Connectors/materialization-connectors/Rockset",title:"Rockset",description:"This Flow connector materializes delta updates of your Flow collections into Rockset collections.",source:"@site/docs/reference/Connectors/materialization-connectors/Rockset.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/Rockset",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/Rockset.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Cloud SQL for PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres"},next:{title:"Slack",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Delta updates and reduction strategies",id:"delta-updates-and-reduction-strategies",level:2},{value:"Changelog",id:"changelog",level:2},{value:"V2: 2022-12-06",id:"v2-2022-12-06",level:4}];function a(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:["This Flow connector materializes ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})," of your Flow collections into Rockset collections."]}),"\n",(0,i.jsxs)(t.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,i.jsx)(t.a,{href:"https://github.com/estuary/connectors/pkgs/container/materialize-rockset",children:(0,i.jsx)(t.code,{children:"ghcr.io/estuary/materialize-rockset:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(t.p,{children:"To use this connector, you'll need:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["A Rockset ",(0,i.jsx)(t.a,{href:"https://rockset.com/docs/rest-api/#createapikey",children:"API key generated"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["The API key must have the ",(0,i.jsx)(t.strong,{children:"Member"})," or ",(0,i.jsx)(t.strong,{children:"Admin"})," ",(0,i.jsx)(t.a,{href:"https://rockset.com/docs/iam/#users-api-keys-and-roles",children:"role"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["A Rockset workspace","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Optional; if none exist, one will be created by the connector."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["A Rockset collection","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Optional; if none exist, one will be created by the connector."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsxs)(t.p,{children:["If you haven't yet captured your data from its external source, start at the beginning of the ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"guide to create a dataflow"}),". You'll be referred back to this connector-specific documentation at the appropriate steps."]})}),"\n",(0,i.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsx)(t.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a Rockset materialization, which will direct one or more of your Flow collections to your desired Rockset collections."}),"\n",(0,i.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,i.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Property"}),(0,i.jsx)(t.th,{children:"Title"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Required/Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/api_key"})})}),(0,i.jsx)(t.td,{children:"Rockset API Key"}),(0,i.jsx)(t.td,{children:"The key used to authenticate to the Rockset API. Must have role of admin or member."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/region_base_url"})})}),(0,i.jsx)(t.td,{children:"Region Base URL"}),(0,i.jsxs)(t.td,{children:["The base URL to connect to your Rockset deployment. Example: api.usw2a1.rockset.com (do not include the protocol). ",(0,i.jsx)(t.a,{href:"https://rockset.com/docs/rest-api/",children:"See supported options and how to find yours"}),"."]}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,i.jsxs)(t.p,{children:["The binding configuration includes the optional ",(0,i.jsx)(t.strong,{children:"Advanced collection settings"})," section.\nThese settings can help optimize your output Rockset collections:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Clustering fields"}),": You can specify clustering fields\nfor your Rockset collection's columnar index to help optimize specific query patterns.\nSee the ",(0,i.jsx)(t.a,{href:"https://rockset.com/docs/query-composition/#data-clustering",children:"Rockset docs"})," for more information."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Retention period"}),": Amount of time before data is purged, in seconds.\nA low value will keep the amount of data indexed in Rockset smaller."]}),"\n"]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Property"}),(0,i.jsx)(t.th,{children:"Title"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Required/Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/advancedCollectionSettings"})}),(0,i.jsx)(t.td,{children:"Advanced Collection Settings"}),(0,i.jsx)(t.td,{}),(0,i.jsx)(t.td,{children:"object"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/advancedCollectionSettings/clustering_key"})}),(0,i.jsx)(t.td,{children:"Clustering Key"}),(0,i.jsx)(t.td,{children:"List of clustering fields"}),(0,i.jsx)(t.td,{children:"array"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.em,{children:(0,i.jsx)(t.code,{children:"/advancedCollectionSettings/clustering_key/-/field_name"})})}),(0,i.jsx)(t.td,{children:"Field Name"}),(0,i.jsx)(t.td,{children:"The name of a field"}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/advancedCollectionSettings/retention_secs"})}),(0,i.jsx)(t.td,{children:"Retention Period"}),(0,i.jsx)(t.td,{children:"Number of seconds after which data is purged based on event time"}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/collection"})})}),(0,i.jsx)(t.td,{children:"Rockset Collection"}),(0,i.jsx)(t.td,{children:"The name of the Rockset collection (will be created if it does not exist)"}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/workspace"})})}),(0,i.jsx)(t.td,{children:"Workspace"}),(0,i.jsx)(t.td,{children:"The name of the Rockset workspace (will be created if it does not exist)"}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n\t endpoint:\n \t connector:\n \t config:\n region_base_url: api.usw2a1.rockset.com\n api_key: supersecret\n # Path to the latest version of the connector, provided as a Docker image\n \t image: ghcr.io/estuary/materialize-rockset:dev\n\t# If you have multiple collections you need to materialize, add a binding for each one\n # to ensure complete data flow-through\n bindings:\n \t- resource:\n \tworkspace: ${namespace_name}\n \tcollection: ${table_name}\n source: ${PREFIX}/${source_collection}\n"})}),"\n",(0,i.jsx)(t.h2,{id:"delta-updates-and-reduction-strategies",children:"Delta updates and reduction strategies"}),"\n",(0,i.jsxs)(t.p,{children:["The Rockset connector operates only in ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})," mode.\nThis means that Rockset, rather than Flow, performs the document merge.\nIn some cases, this will affect how materialized views look in Rockset compared to other systems that use standard updates."]}),"\n",(0,i.jsxs)(t.p,{children:["Rockset merges documents by the key defined in the Flow collection schema, and always uses the semantics of ",(0,i.jsx)(t.a,{href:"https://datatracker.ietf.org/doc/html/rfc7396",children:"RFC 7396 - JSON merge"}),".\nThis differs from how Flow would reduce documents, most notably in that Rockset will ",(0,i.jsx)(t.em,{children:"not"})," honor any reduction strategies defined in your Flow schema.\nFor consistent output of a given collection across Rockset and other materialization endpoints, it's important that that collection's reduction annotations\nin Flow mirror Rockset's semantics."]}),"\n",(0,i.jsxs)(t.p,{children:["To accomplish this, ensure that your collection schema has the following ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"data reductions"})," defined in its schema:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["A top-level reduction strategy of ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/merge",children:"merge"})]}),"\n",(0,i.jsxs)(t.li,{children:["A strategy of ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins",children:"lastWriteWins"})," for all nested values (this is the default)"]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"changelog",children:"Changelog"}),"\n",(0,i.jsx)(t.p,{children:"The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Proceed with caution when editing materializations created with previous versions of this connector;\nediting always upgrades your materialization to the latest connector version."})}),"\n",(0,i.jsx)(t.h4,{id:"v2-2022-12-06",children:"V2: 2022-12-06"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Region Base URL was added and is now required as part of the endpoint configuration."}),"\n",(0,i.jsx)(t.li,{children:"Event Time fields and the Insert Only option were removed from the advanced collection settings."}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>c});var i=n(96540);const s={},r=i.createContext(s);function o(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/432d7d66.1e8d1f70.js b/pr-preview/pr-1594/assets/js/432d7d66.1e8d1f70.js deleted file mode 100644 index 0309ea0301..0000000000 --- a/pr-preview/pr-1594/assets/js/432d7d66.1e8d1f70.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6519],{19789:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var t=i(74848),r=i(28453);const s={},o="LinkedIn Pages",c={id:"reference/Connectors/capture-connectors/linkedin-pages",title:"LinkedIn Pages",description:"This connector captures data from one LinkedIn Page into Flow collections via the LinkedIn Marketing API.",source:"@site/docs/reference/Connectors/capture-connectors/linkedin-pages.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/linkedin-pages",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/linkedin-pages.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"LinkedIn Ads",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads"},next:{title:"Mailchimp",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp"}},a={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Authentication",id:"authentication",level:3},{value:"Access Token Authentication",id:"access-token-authentication",level:3},{value:"Oauth Authentication",id:"oauth-authentication",level:3},{value:"Create a LinkedIn OAuth App",id:"create-a-linkedin-oauth-app",level:4},{value:"Create a Refresh Token",id:"create-a-refresh-token",level:4},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Supported Streams",id:"supported-streams",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"linkedin-pages",children:"LinkedIn Pages"}),"\n",(0,t.jsxs)(n.p,{children:["This connector captures data from one LinkedIn Page into Flow collections via the ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/linkedin/marketing/integrations/marketing-integrations-overview?view=li-lms-2024-03",children:"LinkedIn Marketing API"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/linkedin-pages",children:"here"}),", but keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"An existing LinkedIn Account"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The API user account should be assigned the ",(0,t.jsx)(n.code,{children:"ADMIN"})," role and the following permissions for the API endpoints.\nEndpoints such as: ",(0,t.jsx)(n.code,{children:"Organization Lookup API"}),", ",(0,t.jsx)(n.code,{children:"Follower Statistics"})," and ",(0,t.jsx)(n.code,{children:"Share Statistics"})," require these permissions:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"r_organization_social"}),": Read the organization's posts, comments, reactions, etc."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"rw_organization_admin"}),": Write and read the organization's pages and read reporting data."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"authentication",children:"Authentication"}),"\n",(0,t.jsx)(n.p,{children:"This connector's authentication can be configured by either passing a LinkedIn access token or using Oauth to connect to your source. Oauth requires the additional setup of verifying your application with LinkedIn in order to use the required scopes."}),"\n",(0,t.jsxs)(n.p,{children:["You can see more details about the Community Management App Review in ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/linkedin/marketing/community-management-app-review?view=li-lms-2024-03",children:"LinkedIn's Docs"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsx)(n.p,{children:"LinkedIn access tokens expire in 60 days.\nYou must manually update your capture configuration to continue to capture data from LinkedIn."}),(0,t.jsxs)(n.p,{children:["Refresh tokens expire after 365 days from their creation date. If you receive a ",(0,t.jsx)(n.code,{children:"401 invalid token response"})," error, it means that the access token has expired and you need to generate a new token. You can see more details about it in ",(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow",children:"LinkedIn's Docs"}),"."]})]}),"\n",(0,t.jsx)(n.h3,{id:"access-token-authentication",children:"Access Token Authentication"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Go to the LinkedIn Developers' ",(0,t.jsx)(n.a,{href:"https://www.linkedin.com/developers/tools/oauth",children:"OAuth Token Tools"})," and click ",(0,t.jsx)(n.strong,{children:"Create token"})]}),"\n",(0,t.jsxs)(n.li,{children:["Your app will need the ",(0,t.jsx)(n.code,{children:"r_organization_social"})," and ",(0,t.jsx)(n.code,{children:"rw_organization_admin"})," scopes:"]}),"\n",(0,t.jsx)(n.li,{children:'Click "Request access token" and save the token.'}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"oauth-authentication",children:"Oauth Authentication"}),"\n",(0,t.jsx)(n.h4,{id:"create-a-linkedin-oauth-app",children:"Create a LinkedIn OAuth App"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a ",(0,t.jsx)(n.a,{href:"https://www.linkedin.com/help/linkedin/answer/a543852",children:"LinkedIn Page"})," if you don't have one."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://www.linkedin.com/developers/apps/new",children:"Create"})," a developer application in LinkedIn's Developer Portal."]}),"\n",(0,t.jsxs)(n.li,{children:["Ensure your application complies with the ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/linkedin/marketing/restricted-use-cases?view=li-lms-2024-03",children:"Restricted Uses of LinkedIn Marketing APIs and Data"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/linkedin/marketing/increasing-access?view=li-lms-2024-03#increasing-access",children:"Apply"})," to the Community Management API under the Products tab of your LinkedIn app and complete the form."]}),"\n",(0,t.jsxs)(n.li,{children:["Save your ",(0,t.jsx)(n.code,{children:"client_id"})," and ",(0,t.jsx)(n.code,{children:"client_secret"})," from the Auth tab."]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"create-a-refresh-token",children:"Create a Refresh Token"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Go to the LinkedIn Developers' ",(0,t.jsx)(n.a,{href:"https://www.linkedin.com/developers/tools/oauth",children:"OAuth Token Tools"})," and click ",(0,t.jsx)(n.strong,{children:"Create token"})]}),"\n",(0,t.jsxs)(n.li,{children:["Your app will need the ",(0,t.jsx)(n.code,{children:"r_organization_social"})," and ",(0,t.jsx)(n.code,{children:"rw_organization_admin"})," scopes:"]}),"\n",(0,t.jsx)(n.li,{children:'Click "Request access token" and save the token.'}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the LinkedIn Pages source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/organization_id"})}),(0,t.jsx)(n.td,{children:"Organization ID"}),(0,t.jsx)(n.td,{children:"Your unique organization's id, found in the url of your bussiness' Organization Page"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/client_id"})}),(0,t.jsx)(n.td,{children:"Client ID"}),(0,t.jsx)(n.td,{children:"Your Oauth app's client id."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/client_secret"})}),(0,t.jsx)(n.td,{children:"Client Secret"}),(0,t.jsx)(n.td,{children:"Your Oauth app's client secret."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/refresh_token"})}),(0,t.jsx)(n.td,{children:"Refresh Token"}),(0,t.jsxs)(n.td,{children:["The token value generated using the LinkedIn Developers ",(0,t.jsx)(n.a,{href:"https://www.linkedin.com/developers/tools/oauth",children:"OAuth Token Tools"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/access_token"})}),(0,t.jsx)(n.td,{children:"Access Token"}),(0,t.jsxs)(n.td,{children:["The token value generated using the LinkedIn Developers ",(0,t.jsx)(n.a,{href:"https://www.linkedin.com/developers/tools/oauth",children:"OAuth Token Tools"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"supported-streams",children:"Supported Streams"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/organization-lookup-api?tabs=http#retrieve-organizations",children:"Organization Lookup"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/follower-statistics?tabs=http#retrieve-lifetime-follower-statistics",children:"Follower Statistics"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/share-statistics?tabs=http#retrieve-lifetime-share-statistics",children:"Share Statistics"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/organization-lookup-api?tabs=http#retrieve-organization-follower-count",children:"Total Follower Count"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>c});var t=i(96540);const r={},s=t.createContext(r);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4434a8b7.1fe1ee28.js b/pr-preview/pr-1594/assets/js/4434a8b7.1fe1ee28.js deleted file mode 100644 index 89dfdea663..0000000000 --- a/pr-preview/pr-1594/assets/js/4434a8b7.1fe1ee28.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7972],{51791:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>a,frontMatter:()=>o,metadata:()=>d,toc:()=>l});var r=n(74848),i=n(28453);const o={},s="HTTP Webhook",d={id:"reference/Connectors/materialization-connectors/http-webhook",title:"HTTP Webhook",description:"This connector lets you materialize data from Estuary Flow directly to specified HTTP endpoints via webhooks.",source:"@site/docs/reference/Connectors/materialization-connectors/http-webhook.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/http-webhook",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/http-webhook.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Sheets",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets"},next:{title:"Microsoft SQLServer",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:2},{value:"Endpoint",id:"endpoint",level:3},{value:"Bindings",id:"bindings",level:3},{value:"Sample",id:"sample",level:2}];function h(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"http-webhook",children:"HTTP Webhook"}),"\n",(0,r.jsx)(t.p,{children:"This connector lets you materialize data from Estuary Flow directly to specified HTTP endpoints via webhooks."}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://ghcr.io/estuary/materialize-webhook:v1",children:(0,r.jsx)(t.code,{children:"ghcr.io/estuary/materialize-webhook:v1"})})," provides the latest connector image. For earlier versions, please follow the link in your browser."]}),"\n",(0,r.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(t.p,{children:"To use this materialization connector, you\u2019ll need the following:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"A server or service that can accept HTTP requests at the target endpoint."}),"\n",(0,r.jsx)(t.li,{children:"At least one Flow collection."}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(t.p,{children:["The Webhooks connector is available for use in the Flow web application. To learn more about connectors and setting them up, visit our guide on ",(0,r.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"using connectors"}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(t.h3,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/address"})})}),(0,r.jsx)(t.td,{children:"Address"}),(0,r.jsx)(t.td,{children:"The URL of the endpoint to send data to."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/method"})})}),(0,r.jsx)(t.td,{children:"HTTP Method"}),(0,r.jsxs)(t.td,{children:["HTTP method to use (e.g., ",(0,r.jsx)(t.code,{children:"POST"})," or ",(0,r.jsx)(t.code,{children:"PUT"}),")."]}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsxs)(t.td,{children:["default: ",(0,r.jsx)(t.code,{children:"POST"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/headers"})})}),(0,r.jsx)(t.td,{children:"Headers"}),(0,r.jsx)(t.td,{children:"Additional headers to include in the HTTP request."}),(0,r.jsx)(t.td,{children:"object"}),(0,r.jsx)(t.td,{})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/relativePath"})})}),(0,r.jsx)(t.td,{children:"Relative Path"}),(0,r.jsx)(t.td,{children:"The relative path on the server where data will be sent."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"bindings:\n- source: ProductionData/orders/orderDetails\n resource:\n relativePath: webhook/estuary\nendpoint:\n connector:\n image: ghcr.io/estuary/materialize-webhook:v1\n config:\n address: http://192.168.1.100:3000/\n method: POST\n headers:\n Content-Type: application/json\n Authorization: Bearer <your_token>\n"})})]})}function a(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>d});var r=n(96540);const i={},o=r.createContext(i);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/44386d1b.cfce857c.js b/pr-preview/pr-1594/assets/js/44386d1b.cfce857c.js deleted file mode 100644 index e51626d093..0000000000 --- a/pr-preview/pr-1594/assets/js/44386d1b.cfce857c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7749],{86959:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=t(74848),i=t(28453);const s={},o="Google Cloud Storage",c={id:"reference/Connectors/capture-connectors/gcs",title:"Google Cloud Storage",description:"This connector captures data from a Google Cloud Storage (GCS) bucket.",source:"@site/docs/reference/Connectors/capture-connectors/gcs.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/gcs",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/gcs.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Freshdesk",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk"},next:{title:"GitHub",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Advanced: Parsing cloud storage data",id:"advanced-parsing-cloud-storage-data",level:3},{value:"CSV configuration",id:"csv-configuration",level:4},{value:"Advanced: Configure Google service account impersonation",id:"advanced-configure-google-service-account-impersonation",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"google-cloud-storage",children:"Google Cloud Storage"}),"\n",(0,r.jsx)(n.p,{children:"This connector captures data from a Google Cloud Storage (GCS) bucket."}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://ghcr.io/estuary/source-gcs:dev",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-gcs:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"To use this connector, either your GCS bucket must be public, or you must have access via a Google service account."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["For public buckets, verify that objects in the bucket are ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/storage/docs/access-control/making-data-public",children:"publicly readable"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["For buckets accessed by a Google Service Account:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Ensure that the user has been assigned a ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/iam/docs/understanding-roles",children:"role"})," with read access."]}),"\n",(0,r.jsxs)(n.li,{children:["Create a ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating",children:"JSON service account key"}),". Google's ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/docs/authentication/production",children:"Application Default Credentials"})," will use this file for authentication."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the GCS source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced"})}),(0,r.jsx)(n.td,{}),(0,r.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/ascendingKeys"})}),(0,r.jsx)(n.td,{children:"Ascending Keys"}),(0,r.jsx)(n.td,{children:"Improve sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors."}),(0,r.jsx)(n.td,{children:"boolean"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/bucket"})})}),(0,r.jsx)(n.td,{children:"Bucket"}),(0,r.jsx)(n.td,{children:"Name of the Google Cloud Storage bucket"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/googleCredentials"})}),(0,r.jsx)(n.td,{children:"Google Service Account"}),(0,r.jsx)(n.td,{children:"Service account JSON key to use as Application Default Credentials"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/matchKeys"})}),(0,r.jsx)(n.td,{children:"Match Keys"}),(0,r.jsx)(n.td,{children:'Filter applied to all object keys under the prefix. If provided, only objects whose key (relative to the prefix) matches this regex will be read. For example, you can use ".*\\.json" to only capture json files.'}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/parser"})}),(0,r.jsx)(n.td,{children:"Parser Configuration"}),(0,r.jsx)(n.td,{children:"Configures how files are parsed"}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/parser/compression"})}),(0,r.jsx)(n.td,{children:"Compression"}),(0,r.jsx)(n.td,{children:"Determines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically."}),(0,r.jsx)(n.td,{children:"null, string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"null"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/parser/format"})}),(0,r.jsx)(n.td,{children:"Format"}),(0,r.jsx)(n.td,{children:"Determines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available."}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'{"type":"auto"}'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/parser/format/type"})}),(0,r.jsx)(n.td,{children:"Type"}),(0,r.jsx)(n.td,{}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/prefix"})}),(0,r.jsx)(n.td,{children:"Prefix"}),(0,r.jsx)(n.td,{children:"Prefix within the bucket to capture from. Use this to limit the data in your capture."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Prefix"}),(0,r.jsxs)(n.td,{children:["Path to dataset in the bucket, formatted as ",(0,r.jsx)(n.code,{children:"bucket-name/prefix-name"})]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-gcs:dev\n config:\n bucket: my-bucket\n googleCredentials:\n "type": "service_account",\n "project_id": "project-id",\n "private_key_id": "key-id",\n "private_key": "-----BEGIN PRIVATE KEY-----\\nprivate-key\\n-----END PRIVATE KEY-----\\n",\n "client_email": "service-account-email",\n "client_id": "client-id",\n "auth_uri": "https://accounts.google.com/o/oauth2/auth",\n "token_uri": "https://accounts.google.com/o/oauth2/token",\n "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",\n "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email"\n parser:\n compression: zip\n format:\n type: csv\n config:\n delimiter: ","\n encoding: UTF-8\n errorThreshold: 5\n headers: [ID, username, first_name, last_name]\n lineEnding: "\\\\r"\n quote: "\\""\n bindings:\n - resource:\n stream: my-bucket/${PREFIX}\n target: ${PREFIX}/${COLLECTION_NAME}\n\n'})}),"\n",(0,r.jsx)(n.p,{children:"Your capture definition may be more complex, with additional bindings for different GCS prefixes within the same bucket."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,r.jsx)(n.h3,{id:"advanced-parsing-cloud-storage-data",children:"Advanced: Parsing cloud storage data"}),"\n",(0,r.jsx)(n.p,{children:"Cloud storage platforms like GCS can support a wider variety of file types\nthan other data source systems. For each of these file types, Flow must parse\nand translate data into collections with defined fields and JSON schemas."}),"\n",(0,r.jsx)(n.p,{children:"By default, the parser will automatically detect the type and shape of the data in your bucket,\nso you won't need to change the parser configuration for most captures."}),"\n",(0,r.jsx)(n.p,{children:"However, the automatic detection may be incorrect in some cases.\nTo fix or prevent this, you can provide explicit information in the parser configuration,\nwhich is part of the endpoint configuration for this connector."}),"\n",(0,r.jsx)(n.p,{children:"The parser configuration includes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Compression"}),": Specify how the bucket contents are compressed.\nIf no compression type is specified, the connector will try to determine the compression type automatically.\nOptions are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"zip"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"gzip"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"zstd"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"none"})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Format"}),": Specify the data format, which determines how it will be parsed.\nOptions are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Auto"}),": If no format is specified, the connector will try to determine it automatically."]}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Avro"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"CSV"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"JSON"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Protobuf"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"W3C Extended Log"})}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsx)(n.p,{children:"At this time, Flow only supports GCS captures with data of a single file type.\nSupport for multiple file types, which can be configured on a per-binding basis,\nwill be added in the future."}),(0,r.jsx)(n.p,{children:"For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type."})]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"csv-configuration",children:"CSV configuration"}),"\n",(0,r.jsx)(n.p,{children:"CSV files include several additional properties that are important to the parser.\nIn most cases, Flow is able to automatically determine the correct values,\nbut you may need to specify for unusual datasets. These properties are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Delimiter"}),". Options are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Comma (",(0,r.jsx)(n.code,{children:'","'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Pipe (",(0,r.jsx)(n.code,{children:'"|"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Space (",(0,r.jsx)(n.code,{children:'"0x20"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Semicolon (",(0,r.jsx)(n.code,{children:'";"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Tab (",(0,r.jsx)(n.code,{children:'"0x09"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Vertical tab (",(0,r.jsx)(n.code,{children:'"0x0B"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Unit separator (",(0,r.jsx)(n.code,{children:'"0x1F"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["SOH (",(0,r.jsx)(n.code,{children:'"0x01"'}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Encoding"})," type, specified by its ",(0,r.jsx)(n.a,{href:"https://encoding.spec.whatwg.org/#names-and-labels",children:"WHATWG label"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optionally, an ",(0,r.jsx)(n.strong,{children:"Error threshold"}),", as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Escape characters"}),". Options are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Backslash (",(0,r.jsx)(n.code,{children:'"\\\\"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Disable escapes (",(0,r.jsx)(n.code,{children:'""'}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optionally, a list of column ",(0,r.jsx)(n.strong,{children:"Headers"}),", if not already included in the first row of the CSV file."]}),"\n",(0,r.jsx)(n.p,{children:"If any headers are provided, it is assumed that the provided list of headers is complete and authoritative.\nThe first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Line ending"})," values"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["CRLF (",(0,r.jsx)(n.code,{children:'"\\\\r\\\\n"'}),") (Windows)"]}),"\n",(0,r.jsxs)(n.li,{children:["CR (",(0,r.jsx)(n.code,{children:'"\\\\r"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["LF (",(0,r.jsx)(n.code,{children:'"\\\\n"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Record Separator (",(0,r.jsx)(n.code,{children:'"0x1E"'}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Quote character"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Double Quote (",(0,r.jsx)(n.code,{children:'"\\""'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Single Quote (",(0,r.jsx)(n.code,{children:'"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Disable Quoting (",(0,r.jsx)(n.code,{children:'""'}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The sample specification ",(0,r.jsx)(n.a,{href:"#sample",children:"above"})," includes these fields."]}),"\n",(0,r.jsx)(n.h3,{id:"advanced-configure-google-service-account-impersonation",children:"Advanced: Configure Google service account impersonation"}),"\n",(0,r.jsxs)(n.p,{children:["As part of your Google IAM management, you may have configured one service account to ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/iam/docs/impersonating-service-accounts",children:"impersonate another service account"}),".\nYou may find this useful when you want to easily control access to multiple service accounts with only one set of keys."]}),"\n",(0,r.jsx)(n.p,{children:"If necessary, you can configure this authorization model for a GCS capture in Flow using the GitOps workflow.\nTo do so, you'll enable sops encryption and impersonate the target account with JSON credentials."}),"\n",(0,r.jsxs)(n.p,{children:["Before you begin, make sure you're familiar with ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#protecting-secrets",children:"how to encrypt credentials in Flow using sops"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Use the following sample as a guide to add the credentials JSON to the capture's endpoint configuration.\nThe sample uses the ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#example-protect-portions-of-a-configuration",children:"encrypted suffix feature"})," of sops to encrypt only the sensitive credentials, but you may choose to encrypt the entire configuration."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"config:\n bucket: <bucket-name>\n googleCredentials_sops:\n # URL containing the account to impersonate and the associated project\n service_account_impersonation_url: https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<target-account>@<project>.iam.gserviceaccount.com:generateAccessToken\n # Credentials for the account that has been configured to impersonate the target.\n source_credentials:\n # In addition to the listed fields, copy and paste the rest of your JSON key file as your normally would\n # for the `googleCredentials` field\n client_email: <origin-account>@<anotherproject>.iam.gserviceaccount.com\n token_uri: https://oauth2.googleapis.com/token\n type: service_account\n type: impersonated_service_account\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>c});var r=t(96540);const i={},s=r.createContext(i);function o(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/44b1e2f5.3eccbccd.js b/pr-preview/pr-1594/assets/js/44b1e2f5.3eccbccd.js deleted file mode 100644 index d8072d7b66..0000000000 --- a/pr-preview/pr-1594/assets/js/44b1e2f5.3eccbccd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4578],{4858:(e,r,i)=>{i.r(r),i.d(r,{assets:()=>l,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var n=i(74848),s=i(28453);const o={},t="Twilio",c={id:"reference/Connectors/capture-connectors/twilio",title:"Twilio",description:"This connector captures data from Twilio into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/twilio.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/twilio",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/twilio.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"TikTok Marketing",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok"},next:{title:"WooCommerce",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce"}},l={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h1,{id:"twilio",children:"Twilio"}),"\n",(0,n.jsx)(r.p,{children:"This connector captures data from Twilio into Flow collections."}),"\n",(0,n.jsxs)(r.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,n.jsx)(r.a,{href:"https://ghcr.io/estuary/source-twilio:dev",children:(0,n.jsx)(r.code,{children:"ghcr.io/estuary/source-twilio:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,n.jsxs)(r.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,n.jsx)(r.a,{href:"https://docs.airbyte.com/integrations/sources/twilio/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,n.jsx)(r.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,n.jsx)(r.p,{children:"The following data resources are supported through the Twilio APIs:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/usage/api/account#read-multiple-account-resources",children:"Accounts"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/usage/api/address#read-multiple-address-resources",children:"Addresses"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/usage/monitor-alert#read-multiple-alert-resources",children:"Alerts"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/usage/api/applications#read-multiple-application-resources",children:"Applications"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/phone-numbers/api/availablephonenumber-resource#read-a-list-of-countries",children:"Available Phone Number Countries"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/phone-numbers/api/availablephonenumberlocal-resource#read-multiple-availablephonenumberlocal-resources",children:"Available Phone Numbers Local"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/phone-numbers/api/availablephonenumber-mobile-resource#read-multiple-availablephonenumbermobile-resources",children:"Available Phone Numbers Mobile"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/phone-numbers/api/availablephonenumber-tollfree-resource#read-multiple-availablephonenumbertollfree-resources",children:"Available Phone Numbers Toll Free"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/voice/api/call-resource#create-a-call-resource",children:"Calls"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/voice/api/conference-participant-resource#read-multiple-participant-resources",children:"Conference Participants"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/voice/api/conference-resource#read-multiple-conference-resources",children:"Conferences"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/conversations/api/conversation-resource#read-multiple-conversation-resources",children:"Conversations"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/conversations/api/conversation-message-resource#list-all-conversation-messages",children:"Conversation Messages"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/conversations/api/conversation-participant-resource",children:"Conversation Participants"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/usage/api/address?code-sample=code-list-dependent-pns-subresources&code-language=curl&code-sdk-version=json#instance-subresources",children:"Dependent Phone Numbers"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/phone-numbers/api/incomingphonenumber-resource#read-multiple-incomingphonenumber-resources",children:"Executions"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/phone-numbers/api/incomingphonenumber-resource#read-multiple-incomingphonenumber-resources",children:"Incoming Phone Numbers"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/studio/rest-api/flow#read-a-list-of-flows",children:"Flows"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/usage/api/keys#read-a-key-resource",children:"Keys"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/sms/api/media-resource#read-multiple-media-resources",children:"Message Media"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/sms/api/message-resource#read-multiple-message-resources",children:"Messages"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/voice/api/outgoing-caller-ids#outgoingcallerids-list-resource",children:"Outgoing Caller Ids"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/voice/api/queue-resource#read-multiple-queue-resources",children:"Queues"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/voice/api/recording#read-multiple-recording-resources",children:"Recordings"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/voice/api/recording-transcription?code-sample=code-read-list-all-transcriptions&code-language=curl&code-sdk-version=json#read-multiple-transcription-resources",children:"Transcriptions"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/usage/api/usage-record#read-multiple-usagerecord-resources",children:"Usage Records"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://www.twilio.com/docs/usage/api/usage-trigger#read-multiple-usagetrigger-resources",children:"Usage Triggers"})}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,n.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"Twilio Auth Token for authentication."}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsxs)(r.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,n.jsx)(r.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Twilio source connector."]}),"\n",(0,n.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,n.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Property"}),(0,n.jsx)(r.th,{children:"Title"}),(0,n.jsx)(r.th,{children:"Description"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Required/Default"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"/account_sid"})}),(0,n.jsx)(r.td,{children:"Account ID"}),(0,n.jsx)(r.td,{children:"Twilio account SID"}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"/auth_token"})}),(0,n.jsx)(r.td,{children:"Auth Token"}),(0,n.jsx)(r.td,{children:"Twilio Auth Token."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"/start_date"})}),(0,n.jsx)(r.td,{children:"Replication Start Date"}),(0,n.jsx)(r.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"/lookback_window"})}),(0,n.jsx)(r.td,{children:"Lookback window"}),(0,n.jsx)(r.td,{children:"How far into the past to look for records. (in minutes)"}),(0,n.jsx)(r.td,{children:"integer"}),(0,n.jsx)(r.td,{children:"Default"})]})]})]}),"\n",(0,n.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Property"}),(0,n.jsx)(r.th,{children:"Title"}),(0,n.jsx)(r.th,{children:"Description"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Required/Default"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/stream"})})}),(0,n.jsx)(r.td,{children:"Stream"}),(0,n.jsx)(r.td,{children:"Resource of your Twilio project from which collections are captured."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/syncMode"})})}),(0,n.jsx)(r.td,{children:"Sync Mode"}),(0,n.jsx)(r.td,{children:"Connection method."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,n.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-twilio:dev\n config:\n account_sid: <your account ID>\n auth_token: <secret>\n start_date: 2017-01-25T00:00:00Z\n lookback_window: 7\n bindings:\n - resource:\n stream: accounts\n syncMode: full_refresh\n target: ${PREFIX}/accounts\n {...}\n"})})]})}function h(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},28453:(e,r,i)=>{i.d(r,{R:()=>t,x:()=>c});var n=i(96540);const s={},o=n.createContext(s);function t(e){const r=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),n.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/453.3f16938b.js b/pr-preview/pr-1594/assets/js/453.3f16938b.js deleted file mode 100644 index 535d2e62db..0000000000 --- a/pr-preview/pr-1594/assets/js/453.3f16938b.js +++ /dev/null @@ -1,26805 +0,0 @@ -"use strict"; -exports.id = 453; -exports.ids = [453]; -exports.modules = { - -/***/ 10646: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ H: () => (/* binding */ addHtmlLabel) -/* harmony export */ }); -/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82933); - - - - -function addHtmlLabel(root, node) { - var fo = root.append('foreignObject').attr('width', '100000'); - - var div = fo.append('xhtml:div'); - div.attr('xmlns', 'http://www.w3.org/1999/xhtml'); - - var label = node.label; - switch (typeof label) { - case 'function': - div.insert(label); - break; - case 'object': - // Currently we assume this is a DOM object. - div.insert(function () { - return label; - }); - break; - default: - div.html(label); - } - - _util_js__WEBPACK_IMPORTED_MODULE_0__/* .applyStyle */ .AV(div, node.labelStyle); - div.style('display', 'inline-block'); - // Fix for firefox - div.style('white-space', 'nowrap'); - - var client = div.node().getBoundingClientRect(); - fo.attr('width', client.width).attr('height', client.height); - - return fo; -} - - -/***/ }), - -/***/ 82933: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ AV: () => (/* binding */ applyStyle), -/* harmony export */ De: () => (/* binding */ isSubgraph), -/* harmony export */ c$: () => (/* binding */ applyTransition), -/* harmony export */ gh: () => (/* binding */ edgeToId), -/* harmony export */ nh: () => (/* binding */ applyClass) -/* harmony export */ }); -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(34963); -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(89610); - - -// Public utility functions - - -/* - * Returns true if the specified node in the graph is a subgraph node. A - * subgraph node is one that contains other nodes. - */ -function isSubgraph(g, v) { - return !!g.children(v).length; -} - -function edgeToId(e) { - return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name); -} - -var ID_DELIM = /:/g; -function escapeId(str) { - return str ? String(str).replace(ID_DELIM, '\\:') : ''; -} - -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr('style', styleFn); - } -} - -function applyClass(dom, classFn, otherClasses) { - if (classFn) { - dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class')); - } -} - -function applyTransition(selection, g) { - var graph = g.graph(); - - if (lodash_es__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A(graph)) { - var transition = graph.transition; - if (lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(transition)) { - return transition(selection); - } - } - - return selection; -} - - -/***/ }), - -/***/ 21176: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - Zp: () => (/* reexport */ layout) -}); - -// UNUSED EXPORTS: acyclic, normalize, rank - -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js -var uniqueId = __webpack_require__(5664); -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/map.js -var map = __webpack_require__(74722); -// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules -var range = __webpack_require__(91395); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js -var graphlib = __webpack_require__(697); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js -/* - * Simple doubly linked list implementation derived from Cormen, et al., - * "Introduction to Algorithms". - */ - - - -class List { - constructor() { - var sentinel = {}; - sentinel._next = sentinel._prev = sentinel; - this._sentinel = sentinel; - } - dequeue() { - var sentinel = this._sentinel; - var entry = sentinel._prev; - if (entry !== sentinel) { - unlink(entry); - return entry; - } - } - enqueue(entry) { - var sentinel = this._sentinel; - if (entry._prev && entry._next) { - unlink(entry); - } - entry._next = sentinel._next; - sentinel._next._prev = entry; - sentinel._next = entry; - entry._prev = sentinel; - } - toString() { - var strs = []; - var sentinel = this._sentinel; - var curr = sentinel._prev; - while (curr !== sentinel) { - strs.push(JSON.stringify(curr, filterOutLinks)); - curr = curr._prev; - } - return '[' + strs.join(', ') + ']'; - } -} - -function unlink(entry) { - entry._prev._next = entry._next; - entry._next._prev = entry._prev; - delete entry._next; - delete entry._prev; -} - -function filterOutLinks(k, v) { - if (k !== '_next' && k !== '_prev') { - return v; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js - - - - -/* - * A greedy heuristic for finding a feedback arc set for a graph. A feedback - * arc set is a set of edges that can be removed to make a graph acyclic. - * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and - * effective heuristic for the feedback arc set problem." This implementation - * adjusts that from the paper to allow for weighted edges. - */ - - -var DEFAULT_WEIGHT_FN = constant/* default */.A(1); - -function greedyFAS(g, weightFn) { - if (g.nodeCount() <= 1) { - return []; - } - var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); - var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); - - // Expand multi-edges - return flatten/* default */.A( - map/* default */.A(results, function (e) { - return g.outEdges(e.v, e.w); - }) - ); -} - -function doGreedyFAS(g, buckets, zeroIdx) { - var results = []; - var sources = buckets[buckets.length - 1]; - var sinks = buckets[0]; - - var entry; - while (g.nodeCount()) { - while ((entry = sinks.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - while ((entry = sources.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - if (g.nodeCount()) { - for (var i = buckets.length - 2; i > 0; --i) { - entry = buckets[i].dequeue(); - if (entry) { - results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); - break; - } - } - } - } - - return results; -} - -function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { - var results = collectPredecessors ? [] : undefined; - - forEach/* default */.A(g.inEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var uEntry = g.node(edge.v); - - if (collectPredecessors) { - results.push({ v: edge.v, w: edge.w }); - } - - uEntry.out -= weight; - assignBucket(buckets, zeroIdx, uEntry); - }); - - forEach/* default */.A(g.outEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var w = edge.w; - var wEntry = g.node(w); - wEntry['in'] -= weight; - assignBucket(buckets, zeroIdx, wEntry); - }); - - g.removeNode(entry.v); - - return results; -} - -function buildState(g, weightFn) { - var fasGraph = new graphlib/* Graph */.T(); - var maxIn = 0; - var maxOut = 0; - - forEach/* default */.A(g.nodes(), function (v) { - fasGraph.setNode(v, { v: v, in: 0, out: 0 }); - }); - - // Aggregate weights on nodes, but also sum the weights across multi-edges - // into a single edge for the fasGraph. - forEach/* default */.A(g.edges(), function (e) { - var prevWeight = fasGraph.edge(e.v, e.w) || 0; - var weight = weightFn(e); - var edgeWeight = prevWeight + weight; - fasGraph.setEdge(e.v, e.w, edgeWeight); - maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); - maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); - }); - - var buckets = range/* default */.A(maxOut + maxIn + 3).map(function () { - return new List(); - }); - var zeroIdx = maxIn + 1; - - forEach/* default */.A(fasGraph.nodes(), function (v) { - assignBucket(buckets, zeroIdx, fasGraph.node(v)); - }); - - return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; -} - -function assignBucket(buckets, zeroIdx, entry) { - if (!entry.out) { - buckets[0].enqueue(entry); - } else if (!entry['in']) { - buckets[buckets.length - 1].enqueue(entry); - } else { - buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js - - - - - -function run(g) { - var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); - forEach/* default */.A(fas, function (e) { - var label = g.edge(e); - g.removeEdge(e); - label.forwardName = e.name; - label.reversed = true; - g.setEdge(e.w, e.v, label, uniqueId/* default */.A('rev')); - }); - - function weightFn(g) { - return function (e) { - return g.edge(e).weight; - }; - } -} - -function dfsFAS(g) { - var fas = []; - var stack = {}; - var visited = {}; - - function dfs(v) { - if (has/* default */.A(visited, v)) { - return; - } - visited[v] = true; - stack[v] = true; - forEach/* default */.A(g.outEdges(v), function (e) { - if (has/* default */.A(stack, e.w)) { - fas.push(e); - } else { - dfs(e.w); - } - }); - delete stack[v]; - } - - forEach/* default */.A(g.nodes(), dfs); - return fas; -} - -function undo(g) { - forEach/* default */.A(g.edges(), function (e) { - var label = g.edge(e); - if (label.reversed) { - g.removeEdge(e); - - var forwardName = label.forwardName; - delete label.reversed; - delete label.forwardName; - g.setEdge(e.w, e.v, label, forwardName); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules -var merge = __webpack_require__(98879); -// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules -var pick = __webpack_require__(81942); -// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js -var defaults = __webpack_require__(23068); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js - - -/** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ -function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !(0,isSymbol/* default */.A)(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; -} - -/* harmony default export */ const _baseExtremum = (baseExtremum); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js -/** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ -function baseGt(value, other) { - return value > other; -} - -/* harmony default export */ const _baseGt = (baseGt); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js - - - - -/** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ -function max(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseGt) - : undefined; -} - -/* harmony default export */ const lodash_es_max = (max); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; -} - -/* harmony default export */ const lodash_es_last = (last); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js -var _baseAssignValue = __webpack_require__(52528); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js - - - - -/** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ -function mapValues(object, iteratee) { - var result = {}; - iteratee = (0,_baseIteratee/* default */.A)(iteratee, 3); - - (0,_baseForOwn/* default */.A)(object, function(value, key, object) { - (0,_baseAssignValue/* default */.A)(result, key, iteratee(value, key, object)); - }); - return result; -} - -/* harmony default export */ const lodash_es_mapValues = (mapValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js -/** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ -function baseLt(value, other) { - return value < other; -} - -/* harmony default export */ const _baseLt = (baseLt); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js - - - - -/** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ -function min(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_min = (min); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js -var _root = __webpack_require__(41917); -;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js - - -/** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ -var now = function() { - return _root/* default */.A.Date.now(); -}; - -/* harmony default export */ const lodash_es_now = (now); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js - - - - - -/* - * Adds a dummy node to the graph and return v. - */ -function addDummyNode(g, type, attrs, name) { - var v; - do { - v = uniqueId/* default */.A(name); - } while (g.hasNode(v)); - - attrs.dummy = type; - g.setNode(v, attrs); - return v; -} - -/* - * Returns a new graph with only simple edges. Handles aggregation of data - * associated with multi-edges. - */ -function simplify(g) { - var simplified = new graphlib/* Graph */.T().setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - simplified.setNode(v, g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; - var label = g.edge(e); - simplified.setEdge(e.v, e.w, { - weight: simpleLabel.weight + label.weight, - minlen: Math.max(simpleLabel.minlen, label.minlen), - }); - }); - return simplified; -} - -function asNonCompoundGraph(g) { - var simplified = new graphlib/* Graph */.T({ multigraph: g.isMultigraph() }).setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - if (!g.children(v).length) { - simplified.setNode(v, g.node(v)); - } - }); - forEach/* default */.A(g.edges(), function (e) { - simplified.setEdge(e, g.edge(e)); - }); - return simplified; -} - -function successorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var sucs = {}; - _.forEach(g.outEdges(v), function (e) { - sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; - }); - return sucs; - }); - return _.zipObject(g.nodes(), weightMap); -} - -function predecessorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var preds = {}; - _.forEach(g.inEdges(v), function (e) { - preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; - }); - return preds; - }); - return _.zipObject(g.nodes(), weightMap); -} - -/* - * Finds where a line starting at point ({x, y}) would intersect a rectangle - * ({x, y, width, height}) if it were pointing at the rectangle's center. - */ -function intersectRect(rect, point) { - var x = rect.x; - var y = rect.y; - - // Rectangle intersection algorithm from: - // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes - var dx = point.x - x; - var dy = point.y - y; - var w = rect.width / 2; - var h = rect.height / 2; - - if (!dx && !dy) { - throw new Error('Not possible to find intersection inside of the rectangle'); - } - - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - // Intersection is top or bottom of rect. - if (dy < 0) { - h = -h; - } - sx = (h * dx) / dy; - sy = h; - } else { - // Intersection is left or right of rect. - if (dx < 0) { - w = -w; - } - sx = w; - sy = (w * dy) / dx; - } - - return { x: x + sx, y: y + sy }; -} - -/* - * Given a DAG with each node assigned "rank" and "order" properties, this - * function will produce a matrix with the ids of each node. - */ -function buildLayerMatrix(g) { - var layering = map/* default */.A(range/* default */.A(util_maxRank(g) + 1), function () { - return []; - }); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - var rank = node.rank; - if (!isUndefined/* default */.A(rank)) { - layering[rank][node.order] = v; - } - }); - return layering; -} - -/* - * Adjusts the ranks for all nodes in the graph such that all nodes v have - * rank(v) >= 0 and at least one node w has rank(w) = 0. - */ -function normalizeRanks(g) { - var min = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (has/* default */.A(node, 'rank')) { - node.rank -= min; - } - }); -} - -function removeEmptyRanks(g) { - // Ranks may not start at 0, so we need to offset them - var offset = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - - var layers = []; - forEach/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank - offset; - if (!layers[rank]) { - layers[rank] = []; - } - layers[rank].push(v); - }); - - var delta = 0; - var nodeRankFactor = g.graph().nodeRankFactor; - forEach/* default */.A(layers, function (vs, i) { - if (isUndefined/* default */.A(vs) && i % nodeRankFactor !== 0) { - --delta; - } else if (delta) { - forEach/* default */.A(vs, function (v) { - g.node(v).rank += delta; - }); - } - }); -} - -function addBorderNode(g, prefix, rank, order) { - var node = { - width: 0, - height: 0, - }; - if (arguments.length >= 4) { - node.rank = rank; - node.order = order; - } - return addDummyNode(g, 'border', node, prefix); -} - -function util_maxRank(g) { - return lodash_es_max( - map/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank; - if (!isUndefined/* default */.A(rank)) { - return rank; - } - }) - ); -} - -/* - * Partition a collection into two groups: `lhs` and `rhs`. If the supplied - * function returns true for an entry it goes into `lhs`. Otherwise it goes - * into `rhs. - */ -function partition(collection, fn) { - var result = { lhs: [], rhs: [] }; - forEach/* default */.A(collection, function (value) { - if (fn(value)) { - result.lhs.push(value); - } else { - result.rhs.push(value); - } - }); - return result; -} - -/* - * Returns a new function that wraps `fn` with a timer. The wrapper logs the - * time it takes to execute the function. - */ -function util_time(name, fn) { - var start = lodash_es_now(); - try { - return fn(); - } finally { - console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); - } -} - -function notime(name, fn) { - return fn(); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js - - - - - -function addBorderSegments(g) { - function dfs(v) { - var children = g.children(v); - var node = g.node(v); - if (children.length) { - forEach/* default */.A(children, dfs); - } - - if (has/* default */.A(node, 'minRank')) { - node.borderLeft = []; - node.borderRight = []; - for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { - add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); - add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); - } - } - } - - forEach/* default */.A(g.children(), dfs); -} - -function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { - var label = { width: 0, height: 0, rank: rank, borderType: prop }; - var prev = sgNode[prop][rank - 1]; - var curr = addDummyNode(g, 'border', label, prefix); - sgNode[prop][rank] = curr; - g.setParent(curr, sg); - if (prev) { - g.setEdge(prev, curr, { weight: 1 }); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js - - - - -function adjust(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'lr' || rankDir === 'rl') { - swapWidthHeight(g); - } -} - -function coordinate_system_undo(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'bt' || rankDir === 'rl') { - reverseY(g); - } - - if (rankDir === 'lr' || rankDir === 'rl') { - swapXY(g); - swapWidthHeight(g); - } -} - -function swapWidthHeight(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapWidthHeightOne(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - swapWidthHeightOne(g.edge(e)); - }); -} - -function swapWidthHeightOne(attrs) { - var w = attrs.width; - attrs.width = attrs.height; - attrs.height = w; -} - -function reverseY(g) { - forEach/* default */.A(g.nodes(), function (v) { - reverseYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, reverseYOne); - if (has/* default */.A(edge, 'y')) { - reverseYOne(edge); - } - }); -} - -function reverseYOne(attrs) { - attrs.y = -attrs.y; -} - -function swapXY(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapXYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, swapXYOne); - if (has/* default */.A(edge, 'x')) { - swapXYOne(edge); - } - }); -} - -function swapXYOne(attrs) { - var x = attrs.x; - attrs.x = attrs.y; - attrs.y = x; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js - - - - - -/* - * Breaks any long edges in the graph into short segments that span 1 layer - * each. This operation is undoable with the denormalize function. - * - * Pre-conditions: - * - * 1. The input graph is a DAG. - * 2. Each node in the graph has a "rank" property. - * - * Post-condition: - * - * 1. All edges in the graph have a length of 1. - * 2. Dummy nodes are added where edges have been split into segments. - * 3. The graph is augmented with a "dummyChains" attribute which contains - * the first dummy in each chain of dummy nodes produced. - */ -function normalize_run(g) { - g.graph().dummyChains = []; - forEach/* default */.A(g.edges(), function (edge) { - normalizeEdge(g, edge); - }); -} - -function normalizeEdge(g, e) { - var v = e.v; - var vRank = g.node(v).rank; - var w = e.w; - var wRank = g.node(w).rank; - var name = e.name; - var edgeLabel = g.edge(e); - var labelRank = edgeLabel.labelRank; - - if (wRank === vRank + 1) return; - - g.removeEdge(e); - - var dummy, attrs, i; - for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { - edgeLabel.points = []; - attrs = { - width: 0, - height: 0, - edgeLabel: edgeLabel, - edgeObj: e, - rank: vRank, - }; - dummy = addDummyNode(g, 'edge', attrs, '_d'); - if (vRank === labelRank) { - attrs.width = edgeLabel.width; - attrs.height = edgeLabel.height; - // @ts-expect-error - attrs.dummy = 'edge-label'; - // @ts-expect-error - attrs.labelpos = edgeLabel.labelpos; - } - g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); - if (i === 0) { - g.graph().dummyChains.push(dummy); - } - v = dummy; - } - - g.setEdge(v, w, { weight: edgeLabel.weight }, name); -} - -function normalize_undo(g) { - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var origLabel = node.edgeLabel; - var w; - g.setEdge(node.edgeObj, origLabel); - while (node.dummy) { - w = g.successors(v)[0]; - g.removeNode(v); - origLabel.points.push({ x: node.x, y: node.y }); - if (node.dummy === 'edge-label') { - origLabel.x = node.x; - origLabel.y = node.y; - origLabel.width = node.width; - origLabel.height = node.height; - } - v = w; - node = g.node(v); - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js - - - - -/** - * This method is like `_.min` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * the value is ranked. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Math - * @param {Array} array The array to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {*} Returns the minimum value. - * @example - * - * var objects = [{ 'n': 1 }, { 'n': 2 }]; - * - * _.minBy(objects, function(o) { return o.n; }); - * // => { 'n': 1 } - * - * // The `_.property` iteratee shorthand. - * _.minBy(objects, 'n'); - * // => { 'n': 1 } - */ -function minBy(array, iteratee) { - return (array && array.length) - ? _baseExtremum(array, (0,_baseIteratee/* default */.A)(iteratee, 2), _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_minBy = (minBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js - - - - -/* - * Initializes ranks for the input graph using the longest path algorithm. This - * algorithm scales well and is fast in practice, it yields rather poor - * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom - * ranks wide and leaving edges longer than necessary. However, due to its - * speed, this algorithm is good for getting an initial ranking that can be fed - * into other algorithms. - * - * This algorithm does not normalize layers because it will be used by other - * algorithms in most cases. If using this algorithm directly, be sure to - * run normalize at the end. - * - * Pre-conditions: - * - * 1. Input graph is a DAG. - * 2. Input graph node labels can be assigned properties. - * - * Post-conditions: - * - * 1. Each node will be assign an (unnormalized) "rank" property. - */ -function longestPath(g) { - var visited = {}; - - function dfs(v) { - var label = g.node(v); - if (has/* default */.A(visited, v)) { - return label.rank; - } - visited[v] = true; - - var rank = lodash_es_min( - map/* default */.A(g.outEdges(v), function (e) { - return dfs(e.w) - g.edge(e).minlen; - }) - ); - - if ( - rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 - rank === undefined || // return value of _.map([]) for Lodash 4 - rank === null - ) { - // return value of _.map([null]) - rank = 0; - } - - return (label.rank = rank); - } - - forEach/* default */.A(g.sources(), dfs); -} - -/* - * Returns the amount of slack for the given edge. The slack is defined as the - * difference between the length of the edge and its minimum length. - */ -function slack(g, e) { - return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js - - - - - - -/* - * Constructs a spanning tree with tight edges and adjusted the input node's - * ranks to achieve this. A tight edge is one that is has a length that matches - * its "minlen" attribute. - * - * The basic structure for this function is derived from Gansner, et al., "A - * Technique for Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a DAG. - * 2. Graph must be connected. - * 3. Graph must have at least one node. - * 5. Graph nodes must have been previously assigned a "rank" property that - * respects the "minlen" property of incident edges. - * 6. Graph edges must have a "minlen" property. - * - * Post-conditions: - * - * - Graph nodes will have their rank adjusted to ensure that all edges are - * tight. - * - * Returns a tree (undirected graph) that is constructed using only "tight" - * edges. - */ -function feasibleTree(g) { - var t = new graphlib/* Graph */.T({ directed: false }); - - // Choose arbitrary node from which to start our tree - var start = g.nodes()[0]; - var size = g.nodeCount(); - t.setNode(start, {}); - - var edge, delta; - while (tightTree(t, g) < size) { - edge = findMinSlackEdge(t, g); - delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); - shiftRanks(t, g, delta); - } - - return t; -} - -/* - * Finds a maximal tree of tight edges and returns the number of nodes in the - * tree. - */ -function tightTree(t, g) { - function dfs(v) { - forEach/* default */.A(g.nodeEdges(v), function (e) { - var edgeV = e.v, - w = v === edgeV ? e.w : edgeV; - if (!t.hasNode(w) && !slack(g, e)) { - t.setNode(w, {}); - t.setEdge(v, w, {}); - dfs(w); - } - }); - } - - forEach/* default */.A(t.nodes(), dfs); - return t.nodeCount(); -} - -/* - * Finds the edge with the smallest slack that is incident on tree and returns - * it. - */ -function findMinSlackEdge(t, g) { - return lodash_es_minBy(g.edges(), function (e) { - if (t.hasNode(e.v) !== t.hasNode(e.w)) { - return slack(g, e); - } - }); -} - -function shiftRanks(t, g, delta) { - forEach/* default */.A(t.nodes(), function (v) { - g.node(v).rank += delta; - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js - - - - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!(0,isArrayLike/* default */.A)(collection)) { - var iteratee = (0,_baseIteratee/* default */.A)(predicate, 3); - collection = (0,keys/* default */.A)(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; -} - -/* harmony default export */ const _createFind = (createFind); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js - - -/** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ -function toInteger(value) { - var result = (0,toFinite/* default */.A)(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; -} - -/* harmony default export */ const lodash_es_toInteger = (toInteger); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return (0,_baseFindIndex/* default */.A)(array, (0,_baseIteratee/* default */.A)(predicate, 3), index); -} - -/* harmony default export */ const lodash_es_findIndex = (findIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js - - - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = _createFind(lodash_es_findIndex); - -/* harmony default export */ const lodash_es_find = (find); - -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js - - - - - -var DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function dijkstra_dijkstra(g, source, weightFn, edgeFn) { - return runDijkstra( - g, - String(source), - weightFn || DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runDijkstra(g, source, weightFn, edgeFn) { - var results = {}; - var pq = new PriorityQueue(); - var v, vEntry; - - var updateNeighbors = function (edge) { - var w = edge.v !== v ? edge.v : edge.w; - var wEntry = results[w]; - var weight = weightFn(edge); - var distance = vEntry.distance + weight; - - if (weight < 0) { - throw new Error( - 'dijkstra does not allow negative edge weights. ' + - 'Bad edge: ' + - edge + - ' Weight: ' + - weight - ); - } - - if (distance < wEntry.distance) { - wEntry.distance = distance; - wEntry.predecessor = v; - pq.decrease(w, distance); - } - }; - - g.nodes().forEach(function (v) { - var distance = v === source ? 0 : Number.POSITIVE_INFINITY; - results[v] = { distance: distance }; - pq.add(v, distance); - }); - - while (pq.size() > 0) { - v = pq.removeMin(); - vEntry = results[v]; - if (vEntry.distance === Number.POSITIVE_INFINITY) { - break; - } - - edgeFn(v).forEach(updateNeighbors); - } - - return results; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js - - - - - -function dijkstraAll(g, weightFunc, edgeFunc) { - return _.transform( - g.nodes(), - function (acc, v) { - acc[v] = dijkstra(g, v, weightFunc, edgeFunc); - }, - {} - ); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js - - - - -var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function floydWarshall(g, weightFn, edgeFn) { - return runFloydWarshall( - g, - weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runFloydWarshall(g, weightFn, edgeFn) { - var results = {}; - var nodes = g.nodes(); - - nodes.forEach(function (v) { - results[v] = {}; - results[v][v] = { distance: 0 }; - nodes.forEach(function (w) { - if (v !== w) { - results[v][w] = { distance: Number.POSITIVE_INFINITY }; - } - }); - edgeFn(v).forEach(function (edge) { - var w = edge.v === v ? edge.w : edge.v; - var d = weightFn(edge); - results[v][w] = { distance: d, predecessor: v }; - }); - }); - - nodes.forEach(function (k) { - var rowK = results[k]; - nodes.forEach(function (i) { - var rowI = results[i]; - nodes.forEach(function (j) { - var ik = rowI[k]; - var kj = rowK[j]; - var ij = rowI[j]; - var altDistance = ik.distance + kj.distance; - if (altDistance < ij.distance) { - ij.distance = altDistance; - ij.predecessor = kj.predecessor; - } - }); - }); - }); - - return results; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules -var _baseKeys = __webpack_require__(69471); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules -var _baseGetTag = __webpack_require__(88496); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js - - - - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!(0,isArray/* default */.A)(value) && (0,isObjectLike/* default */.A)(value) && (0,_baseGetTag/* default */.A)(value) == stringTag); -} - -/* harmony default export */ const lodash_es_isString = (isString); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js - - -/** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -var asciiSize = (0,_baseProperty/* default */.A)('length'); - -/* harmony default export */ const _asciiSize = (asciiSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -/* harmony default export */ const _hasUnicode = (hasUnicode); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js -/** Used to compose unicode character classes. */ -var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', - _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', - _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', - _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', - _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, - _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', - rsCombo = '[' + _unicodeSize_rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - _unicodeSize_rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', - rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; -} - -/* harmony default export */ const _unicodeSize = (unicodeSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js - - - - -/** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ -function stringSize(string) { - return _hasUnicode(string) - ? _unicodeSize(string) - : _asciiSize(string); -} - -/* harmony default export */ const _stringSize = (stringSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js - - - - - - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ -function size(collection) { - if (collection == null) { - return 0; - } - if ((0,isArrayLike/* default */.A)(collection)) { - return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; - } - var tag = (0,_getTag/* default */.A)(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return (0,_baseKeys/* default */.A)(collection).length; -} - -/* harmony default export */ const lodash_es_size = (size); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js - - - - -topsort_topsort.CycleException = topsort_CycleException; - -function topsort_topsort(g) { - var visited = {}; - var stack = {}; - var results = []; - - function visit(node) { - if (has/* default */.A(stack, node)) { - throw new topsort_CycleException(); - } - - if (!has/* default */.A(visited, node)) { - stack[node] = true; - visited[node] = true; - forEach/* default */.A(g.predecessors(node), visit); - delete stack[node]; - results.push(node); - } - } - - forEach/* default */.A(g.sinks(), visit); - - if (lodash_es_size(visited) !== g.nodeCount()) { - throw new topsort_CycleException(); - } - - return results; -} - -function topsort_CycleException() {} -topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js - - - - -function isAcyclic(g) { - try { - topsort(g); - } catch (e) { - if (e instanceof CycleException) { - return false; - } - throw e; - } - return true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js - - - - -/* - * A helper that preforms a pre- or post-order traversal on the input graph - * and returns the nodes in the order they were visited. If the graph is - * undirected then this algorithm will navigate using neighbors. If the graph - * is directed then this algorithm will navigate using successors. - * - * Order must be one of "pre" or "post". - */ -function dfs(g, vs, order) { - if (!isArray/* default */.A(vs)) { - vs = [vs]; - } - - var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); - - var acc = []; - var visited = {}; - forEach/* default */.A(vs, function (v) { - if (!g.hasNode(v)) { - throw new Error('Graph does not have node: ' + v); - } - - doDfs(g, v, order === 'post', visited, navigation, acc); - }); - return acc; -} - -function doDfs(g, v, postorder, visited, navigation, acc) { - if (!has/* default */.A(visited, v)) { - visited[v] = true; - - if (!postorder) { - acc.push(v); - } - forEach/* default */.A(navigation(v), function (w) { - doDfs(g, w, postorder, visited, navigation, acc); - }); - if (postorder) { - acc.push(v); - } - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js - - - - -function postorder(g, vs) { - return dfs(g, vs, 'post'); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js - - - - -function preorder(g, vs) { - return dfs(g, vs, 'pre'); -} - -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules -var graph = __webpack_require__(73046); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js - - - - - - -function prim(g, weightFunc) { - var result = new Graph(); - var parents = {}; - var pq = new PriorityQueue(); - var v; - - function updateNeighbors(edge) { - var w = edge.v === v ? edge.w : edge.v; - var pri = pq.priority(w); - if (pri !== undefined) { - var edgeWeight = weightFunc(edge); - if (edgeWeight < pri) { - parents[w] = v; - pq.decrease(w, edgeWeight); - } - } - } - - if (g.nodeCount() === 0) { - return result; - } - - _.each(g.nodes(), function (v) { - pq.add(v, Number.POSITIVE_INFINITY); - result.setNode(v); - }); - - // Start from an arbitrary node - pq.decrease(g.nodes()[0], 0); - - var init = false; - while (pq.size() > 0) { - v = pq.removeMin(); - if (_.has(parents, v)) { - result.setEdge(v, parents[v]); - } else if (init) { - throw new Error('Input graph is not connected: ' + g); - } else { - init = true; - } - - g.nodeEdges(v).forEach(updateNeighbors); - } - - return result; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js - - - - - - - - - - - - - - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js - - - - - - - - -// Expose some internals for testing purposes -networkSimplex.initLowLimValues = initLowLimValues; -networkSimplex.initCutValues = initCutValues; -networkSimplex.calcCutValue = calcCutValue; -networkSimplex.leaveEdge = leaveEdge; -networkSimplex.enterEdge = enterEdge; -networkSimplex.exchangeEdges = exchangeEdges; - -/* - * The network simplex algorithm assigns ranks to each node in the input graph - * and iteratively improves the ranking to reduce the length of edges. - * - * Preconditions: - * - * 1. The input graph must be a DAG. - * 2. All nodes in the graph must have an object value. - * 3. All edges in the graph must have "minlen" and "weight" attributes. - * - * Postconditions: - * - * 1. All nodes in the graph will have an assigned "rank" attribute that has - * been optimized by the network simplex algorithm. Ranks start at 0. - * - * - * A rough sketch of the algorithm is as follows: - * - * 1. Assign initial ranks to each node. We use the longest path algorithm, - * which assigns ranks to the lowest position possible. In general this - * leads to very wide bottom ranks and unnecessarily long edges. - * 2. Construct a feasible tight tree. A tight tree is one such that all - * edges in the tree have no slack (difference between length of edge - * and minlen for the edge). This by itself greatly improves the assigned - * rankings by shorting edges. - * 3. Iteratively find edges that have negative cut values. Generally a - * negative cut value indicates that the edge could be removed and a new - * tree edge could be added to produce a more compact graph. - * - * Much of the algorithms here are derived from Gansner, et al., "A Technique - * for Drawing Directed Graphs." The structure of the file roughly follows the - * structure of the overall algorithm. - */ -function networkSimplex(g) { - g = simplify(g); - longestPath(g); - var t = feasibleTree(g); - initLowLimValues(t); - initCutValues(t, g); - - var e, f; - while ((e = leaveEdge(t))) { - f = enterEdge(t, g, e); - exchangeEdges(t, g, e, f); - } -} - -/* - * Initializes cut values for all edges in the tree. - */ -function initCutValues(t, g) { - var vs = postorder(t, t.nodes()); - vs = vs.slice(0, vs.length - 1); - forEach/* default */.A(vs, function (v) { - assignCutValue(t, g, v); - }); -} - -function assignCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - t.edge(child, parent).cutvalue = calcCutValue(t, g, child); -} - -/* - * Given the tight tree, its graph, and a child in the graph calculate and - * return the cut value for the edge between the child and its parent. - */ -function calcCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - // True if the child is on the tail end of the edge in the directed graph - var childIsTail = true; - // The graph's view of the tree edge we're inspecting - var graphEdge = g.edge(child, parent); - // The accumulated cut value for the edge between this node and its parent - var cutValue = 0; - - if (!graphEdge) { - childIsTail = false; - graphEdge = g.edge(parent, child); - } - - cutValue = graphEdge.weight; - - forEach/* default */.A(g.nodeEdges(child), function (e) { - var isOutEdge = e.v === child, - other = isOutEdge ? e.w : e.v; - - if (other !== parent) { - var pointsToHead = isOutEdge === childIsTail, - otherWeight = g.edge(e).weight; - - cutValue += pointsToHead ? otherWeight : -otherWeight; - if (isTreeEdge(t, child, other)) { - var otherCutValue = t.edge(child, other).cutvalue; - cutValue += pointsToHead ? -otherCutValue : otherCutValue; - } - } - }); - - return cutValue; -} - -function initLowLimValues(tree, root) { - if (arguments.length < 2) { - root = tree.nodes()[0]; - } - dfsAssignLowLim(tree, {}, 1, root); -} - -function dfsAssignLowLim(tree, visited, nextLim, v, parent) { - var low = nextLim; - var label = tree.node(v); - - visited[v] = true; - forEach/* default */.A(tree.neighbors(v), function (w) { - if (!has/* default */.A(visited, w)) { - nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); - } - }); - - label.low = low; - label.lim = nextLim++; - if (parent) { - label.parent = parent; - } else { - // TODO should be able to remove this when we incrementally update low lim - delete label.parent; - } - - return nextLim; -} - -function leaveEdge(tree) { - return lodash_es_find(tree.edges(), function (e) { - return tree.edge(e).cutvalue < 0; - }); -} - -function enterEdge(t, g, edge) { - var v = edge.v; - var w = edge.w; - - // For the rest of this function we assume that v is the tail and w is the - // head, so if we don't have this edge in the graph we should flip it to - // match the correct orientation. - if (!g.hasEdge(v, w)) { - v = edge.w; - w = edge.v; - } - - var vLabel = t.node(v); - var wLabel = t.node(w); - var tailLabel = vLabel; - var flip = false; - - // If the root is in the tail of the edge then we need to flip the logic that - // checks for the head and tail nodes in the candidates function below. - if (vLabel.lim > wLabel.lim) { - tailLabel = wLabel; - flip = true; - } - - var candidates = filter/* default */.A(g.edges(), function (edge) { - return ( - flip === isDescendant(t, t.node(edge.v), tailLabel) && - flip !== isDescendant(t, t.node(edge.w), tailLabel) - ); - }); - - return lodash_es_minBy(candidates, function (edge) { - return slack(g, edge); - }); -} - -function exchangeEdges(t, g, e, f) { - var v = e.v; - var w = e.w; - t.removeEdge(v, w); - t.setEdge(f.v, f.w, {}); - initLowLimValues(t); - initCutValues(t, g); - updateRanks(t, g); -} - -function updateRanks(t, g) { - var root = lodash_es_find(t.nodes(), function (v) { - return !g.node(v).parent; - }); - var vs = preorder(t, root); - vs = vs.slice(1); - forEach/* default */.A(vs, function (v) { - var parent = t.node(v).parent, - edge = g.edge(v, parent), - flipped = false; - - if (!edge) { - edge = g.edge(parent, v); - flipped = true; - } - - g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); - }); -} - -/* - * Returns true if the edge is in the tree. - */ -function isTreeEdge(tree, u, v) { - return tree.hasEdge(u, v); -} - -/* - * Returns true if the specified node is descendant of the root node per the - * assigned low and lim attributes in the tree. - */ -function isDescendant(tree, vLabel, rootLabel) { - return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js - - - - - - -/* - * Assigns a rank to each node in the input graph that respects the "minlen" - * constraint specified on edges between nodes. - * - * This basic structure is derived from Gansner, et al., "A Technique for - * Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a connected DAG - * 2. Graph nodes must be objects - * 3. Graph edges must have "weight" and "minlen" attributes - * - * Post-conditions: - * - * 1. Graph nodes will have a "rank" attribute based on the results of the - * algorithm. Ranks can start at any index (including negative), we'll - * fix them up later. - */ -function rank(g) { - switch (g.graph().ranker) { - case 'network-simplex': - networkSimplexRanker(g); - break; - case 'tight-tree': - tightTreeRanker(g); - break; - case 'longest-path': - longestPathRanker(g); - break; - default: - networkSimplexRanker(g); - } -} - -// A fast and simple ranker, but results are far from optimal. -var longestPathRanker = longestPath; - -function tightTreeRanker(g) { - longestPath(g); - feasibleTree(g); -} - -function networkSimplexRanker(g) { - networkSimplex(g); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js - - - - - -/* - * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, - * adds appropriate edges to ensure that all cluster nodes are placed between - * these boundries, and ensures that the graph is connected. - * - * In addition we ensure, through the use of the minlen property, that nodes - * and subgraph border nodes to not end up on the same rank. - * - * Preconditions: - * - * 1. Input graph is a DAG - * 2. Nodes in the input graph has a minlen attribute - * - * Postconditions: - * - * 1. Input graph is connected. - * 2. Dummy nodes are added for the tops and bottoms of subgraphs. - * 3. The minlen attribute for nodes is adjusted to ensure nodes do not - * get placed on the same rank as subgraph border nodes. - * - * The nesting graph idea comes from Sander, "Layout of Compound Directed - * Graphs." - */ -function nesting_graph_run(g) { - var root = addDummyNode(g, 'root', {}, '_root'); - var depths = treeDepths(g); - var height = lodash_es_max(values/* default */.A(depths)) - 1; // Note: depths is an Object not an array - var nodeSep = 2 * height + 1; - - g.graph().nestingRoot = root; - - // Multiply minlen by nodeSep to align nodes on non-border ranks. - forEach/* default */.A(g.edges(), function (e) { - g.edge(e).minlen *= nodeSep; - }); - - // Calculate a weight that is sufficient to keep subgraphs vertically compact - var weight = sumWeights(g) + 1; - - // Create border nodes and link them up - forEach/* default */.A(g.children(), function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - }); - - // Save the multiplier for node layers for later removal of empty border - // layers. - g.graph().nodeRankFactor = nodeSep; -} - -function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { - var children = g.children(v); - if (!children.length) { - if (v !== root) { - g.setEdge(root, v, { weight: 0, minlen: nodeSep }); - } - return; - } - - var top = addBorderNode(g, '_bt'); - var bottom = addBorderNode(g, '_bb'); - var label = g.node(v); - - g.setParent(top, v); - label.borderTop = top; - g.setParent(bottom, v); - label.borderBottom = bottom; - - forEach/* default */.A(children, function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - - var childNode = g.node(child); - var childTop = childNode.borderTop ? childNode.borderTop : child; - var childBottom = childNode.borderBottom ? childNode.borderBottom : child; - var thisWeight = childNode.borderTop ? weight : 2 * weight; - var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; - - g.setEdge(top, childTop, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - - g.setEdge(childBottom, bottom, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - }); - - if (!g.parent(v)) { - g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); - } -} - -function treeDepths(g) { - var depths = {}; - function dfs(v, depth) { - var children = g.children(v); - if (children && children.length) { - forEach/* default */.A(children, function (child) { - dfs(child, depth + 1); - }); - } - depths[v] = depth; - } - forEach/* default */.A(g.children(), function (v) { - dfs(v, 1); - }); - return depths; -} - -function sumWeights(g) { - return reduce/* default */.A( - g.edges(), - function (acc, e) { - return acc + g.edge(e).weight; - }, - 0 - ); -} - -function cleanup(g) { - var graphLabel = g.graph(); - g.removeNode(graphLabel.nestingRoot); - delete graphLabel.nestingRoot; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.nestingEdge) { - g.removeEdge(e); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules -var _baseClone = __webpack_require__(91641); -;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return (0,_baseClone/* default */.A)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js - - - - -function addSubgraphConstraints(g, cg, vs) { - var prev = {}, - rootPrev; - - forEach/* default */.A(vs, function (v) { - var child = g.parent(v), - parent, - prevChild; - while (child) { - parent = g.parent(child); - if (parent) { - prevChild = prev[parent]; - prev[parent] = child; - } else { - prevChild = rootPrev; - rootPrev = child; - } - if (prevChild && prevChild !== child) { - cg.setEdge(prevChild, child); - return; - } - child = parent; - } - }); - - /* - function dfs(v) { - var children = v ? g.children(v) : g.children(); - if (children.length) { - var min = Number.POSITIVE_INFINITY, - subgraphs = []; - _.each(children, function(child) { - var childMin = dfs(child); - if (g.children(child).length) { - subgraphs.push({ v: child, order: childMin }); - } - min = Math.min(min, childMin); - }); - _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { - cg.setEdge(prev.v, curr.v); - return curr; - }); - return min; - } - return g.node(v).order; - } - dfs(undefined); - */ -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js - - - - - -/* - * Constructs a graph that can be used to sort a layer of nodes. The graph will - * contain all base and subgraph nodes from the request layer in their original - * hierarchy and any edges that are incident on these nodes and are of the type - * requested by the "relationship" parameter. - * - * Nodes from the requested rank that do not have parents are assigned a root - * node in the output graph, which is set in the root graph attribute. This - * makes it easy to walk the hierarchy of movable nodes during ordering. - * - * Pre-conditions: - * - * 1. Input graph is a DAG - * 2. Base nodes in the input graph have a rank attribute - * 3. Subgraph nodes in the input graph has minRank and maxRank attributes - * 4. Edges have an assigned weight - * - * Post-conditions: - * - * 1. Output graph has all nodes in the movable rank with preserved - * hierarchy. - * 2. Root nodes in the movable layer are made children of the node - * indicated by the root attribute of the graph. - * 3. Non-movable nodes incident on movable nodes, selected by the - * relationship parameter, are included in the graph (without hierarchy). - * 4. Edges incident on movable nodes, selected by the relationship - * parameter, are added to the output graph. - * 5. The weights for copied edges are aggregated as need, since the output - * graph is not a multi-graph. - */ -function buildLayerGraph(g, rank, relationship) { - var root = createRootNode(g), - result = new graphlib/* Graph */.T({ compound: true }) - .setGraph({ root: root }) - .setDefaultNodeLabel(function (v) { - return g.node(v); - }); - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v), - parent = g.parent(v); - - if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { - result.setNode(v); - result.setParent(v, parent || root); - - // This assumes we have only short edges! - forEach/* default */.A(g[relationship](v), function (e) { - var u = e.v === v ? e.w : e.v, - edge = result.edge(u, v), - weight = !isUndefined/* default */.A(edge) ? edge.weight : 0; - result.setEdge(u, v, { weight: g.edge(e).weight + weight }); - }); - - if (has/* default */.A(node, 'minRank')) { - result.setNode(v, { - borderLeft: node.borderLeft[rank], - borderRight: node.borderRight[rank], - }); - } - } - }); - - return result; -} - -function createRootNode(g) { - var v; - while (g.hasNode((v = uniqueId/* default */.A('_root')))); - return v; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js -/** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ -function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; -} - -/* harmony default export */ const _baseZipObject = (baseZipObject); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js - - - -/** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ -function zipObject(props, values) { - return _baseZipObject(props || [], values || [], _assignValue/* default */.A); -} - -/* harmony default export */ const lodash_es_zipObject = (zipObject); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js -var _baseMap = __webpack_require__(52568); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js -/** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ -function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; -} - -/* harmony default export */ const _baseSortBy = (baseSortBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js - - -/** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ -function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = (0,isSymbol/* default */.A)(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = (0,isSymbol/* default */.A)(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; -} - -/* harmony default export */ const _compareAscending = (compareAscending); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js - - -/** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ -function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = _compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; -} - -/* harmony default export */ const _compareMultiple = (compareMultiple); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js - - - - - - - - - - -/** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ -function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - if ((0,isArray/* default */.A)(iteratee)) { - return function(value) { - return (0,_baseGet/* default */.A)(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } - } - return iteratee; - }); - } else { - iteratees = [identity/* default */.A]; - } - - var index = -1; - iteratees = (0,_arrayMap/* default */.A)(iteratees, (0,_baseUnary/* default */.A)(_baseIteratee/* default */.A)); - - var result = (0,_baseMap/* default */.A)(collection, function(value, key, collection) { - var criteria = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return _baseSortBy(result, function(object, other) { - return _compareMultiple(object, other, orders); - }); -} - -/* harmony default export */ const _baseOrderBy = (baseOrderBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js - - - - - -/** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 30 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] - */ -var sortBy = (0,_baseRest/* default */.A)(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && (0,_isIterateeCall/* default */.A)(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && (0,_isIterateeCall/* default */.A)(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return _baseOrderBy(collection, (0,_baseFlatten/* default */.A)(iteratees, 1), []); -}); - -/* harmony default export */ const lodash_es_sortBy = (sortBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js - - - - -/* - * A function that takes a layering (an array of layers, each with an array of - * ordererd nodes) and a graph and returns a weighted crossing count. - * - * Pre-conditions: - * - * 1. Input graph must be simple (not a multigraph), directed, and include - * only simple edges. - * 2. Edges in the input graph must have assigned weights. - * - * Post-conditions: - * - * 1. The graph and layering matrix are left unchanged. - * - * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." - */ -function crossCount(g, layering) { - var cc = 0; - for (var i = 1; i < layering.length; ++i) { - cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); - } - return cc; -} - -function twoLayerCrossCount(g, northLayer, southLayer) { - // Sort all of the edges between the north and south layers by their position - // in the north layer and then the south. Map these edges to the position of - // their head in the south layer. - var southPos = lodash_es_zipObject( - southLayer, - map/* default */.A(southLayer, function (v, i) { - return i; - }) - ); - var southEntries = flatten/* default */.A( - map/* default */.A(northLayer, function (v) { - return lodash_es_sortBy( - map/* default */.A(g.outEdges(v), function (e) { - return { pos: southPos[e.w], weight: g.edge(e).weight }; - }), - 'pos' - ); - }) - ); - - // Build the accumulator tree - var firstIndex = 1; - while (firstIndex < southLayer.length) firstIndex <<= 1; - var treeSize = 2 * firstIndex - 1; - firstIndex -= 1; - var tree = map/* default */.A(new Array(treeSize), function () { - return 0; - }); - - // Calculate the weighted crossings - var cc = 0; - forEach/* default */.A( - // @ts-expect-error - southEntries.forEach(function (entry) { - var index = entry.pos + firstIndex; - tree[index] += entry.weight; - var weightSum = 0; - // @ts-expect-error - while (index > 0) { - // @ts-expect-error - if (index % 2) { - weightSum += tree[index + 1]; - } - // @ts-expect-error - index = (index - 1) >> 1; - tree[index] += entry.weight; - } - cc += entry.weight * weightSum; - }) - ); - - return cc; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js - - - - -/* - * Assigns an initial order value for each node by performing a DFS search - * starting from nodes in the first rank. Nodes are assigned an order in their - * rank as they are first visited. - * - * This approach comes from Gansner, et al., "A Technique for Drawing Directed - * Graphs." - * - * Returns a layering matrix with an array per layer and each layer sorted by - * the order of its nodes. - */ -function initOrder(g) { - var visited = {}; - var simpleNodes = filter/* default */.A(g.nodes(), function (v) { - return !g.children(v).length; - }); - var maxRank = lodash_es_max( - map/* default */.A(simpleNodes, function (v) { - return g.node(v).rank; - }) - ); - var layers = map/* default */.A(range/* default */.A(maxRank + 1), function () { - return []; - }); - - function dfs(v) { - if (has/* default */.A(visited, v)) return; - visited[v] = true; - var node = g.node(v); - layers[node.rank].push(v); - forEach/* default */.A(g.successors(v), dfs); - } - - var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { - return g.node(v).rank; - }); - forEach/* default */.A(orderedVs, dfs); - - return layers; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js - - - - -function barycenter(g, movable) { - return map/* default */.A(movable, function (v) { - var inV = g.inEdges(v); - if (!inV.length) { - return { v: v }; - } else { - var result = reduce/* default */.A( - inV, - function (acc, e) { - var edge = g.edge(e), - nodeU = g.node(e.v); - return { - sum: acc.sum + edge.weight * nodeU.order, - weight: acc.weight + edge.weight, - }; - }, - { sum: 0, weight: 0 } - ); - - return { - v: v, - barycenter: result.sum / result.weight, - weight: result.weight, - }; - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js - - - - -/* - * Given a list of entries of the form {v, barycenter, weight} and a - * constraint graph this function will resolve any conflicts between the - * constraint graph and the barycenters for the entries. If the barycenters for - * an entry would violate a constraint in the constraint graph then we coalesce - * the nodes in the conflict into a new node that respects the contraint and - * aggregates barycenter and weight information. - * - * This implementation is based on the description in Forster, "A Fast and - * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it - * differs in some specific details. - * - * Pre-conditions: - * - * 1. Each entry has the form {v, barycenter, weight}, or if the node has - * no barycenter, then {v}. - * - * Returns: - * - * A new list of entries of the form {vs, i, barycenter, weight}. The list - * `vs` may either be a singleton or it may be an aggregation of nodes - * ordered such that they do not violate constraints from the constraint - * graph. The property `i` is the lowest original index of any of the - * elements in `vs`. - */ -function resolveConflicts(entries, cg) { - var mappedEntries = {}; - forEach/* default */.A(entries, function (entry, i) { - var tmp = (mappedEntries[entry.v] = { - indegree: 0, - in: [], - out: [], - vs: [entry.v], - i: i, - }); - if (!isUndefined/* default */.A(entry.barycenter)) { - // @ts-expect-error - tmp.barycenter = entry.barycenter; - // @ts-expect-error - tmp.weight = entry.weight; - } - }); - - forEach/* default */.A(cg.edges(), function (e) { - var entryV = mappedEntries[e.v]; - var entryW = mappedEntries[e.w]; - if (!isUndefined/* default */.A(entryV) && !isUndefined/* default */.A(entryW)) { - entryW.indegree++; - entryV.out.push(mappedEntries[e.w]); - } - }); - - var sourceSet = filter/* default */.A(mappedEntries, function (entry) { - // @ts-expect-error - return !entry.indegree; - }); - - return doResolveConflicts(sourceSet); -} - -function doResolveConflicts(sourceSet) { - var entries = []; - - function handleIn(vEntry) { - return function (uEntry) { - if (uEntry.merged) { - return; - } - if ( - isUndefined/* default */.A(uEntry.barycenter) || - isUndefined/* default */.A(vEntry.barycenter) || - uEntry.barycenter >= vEntry.barycenter - ) { - mergeEntries(vEntry, uEntry); - } - }; - } - - function handleOut(vEntry) { - return function (wEntry) { - wEntry['in'].push(vEntry); - if (--wEntry.indegree === 0) { - sourceSet.push(wEntry); - } - }; - } - - while (sourceSet.length) { - var entry = sourceSet.pop(); - entries.push(entry); - forEach/* default */.A(entry['in'].reverse(), handleIn(entry)); - forEach/* default */.A(entry.out, handleOut(entry)); - } - - return map/* default */.A( - filter/* default */.A(entries, function (entry) { - return !entry.merged; - }), - function (entry) { - return pick/* default */.A(entry, ['vs', 'i', 'barycenter', 'weight']); - } - ); -} - -function mergeEntries(target, source) { - var sum = 0; - var weight = 0; - - if (target.weight) { - sum += target.barycenter * target.weight; - weight += target.weight; - } - - if (source.weight) { - sum += source.barycenter * source.weight; - weight += source.weight; - } - - target.vs = source.vs.concat(target.vs); - target.barycenter = sum / weight; - target.weight = weight; - target.i = Math.min(source.i, target.i); - source.merged = true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js - - - - - -function sort(entries, biasRight) { - var parts = partition(entries, function (entry) { - return has/* default */.A(entry, 'barycenter'); - }); - var sortable = parts.lhs, - unsortable = lodash_es_sortBy(parts.rhs, function (entry) { - return -entry.i; - }), - vs = [], - sum = 0, - weight = 0, - vsIndex = 0; - - sortable.sort(compareWithBias(!!biasRight)); - - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - - forEach/* default */.A(sortable, function (entry) { - vsIndex += entry.vs.length; - vs.push(entry.vs); - sum += entry.barycenter * entry.weight; - weight += entry.weight; - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - }); - - var result = { vs: flatten/* default */.A(vs) }; - if (weight) { - result.barycenter = sum / weight; - result.weight = weight; - } - return result; -} - -function consumeUnsortable(vs, unsortable, index) { - var last; - while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { - unsortable.pop(); - vs.push(last.vs); - index++; - } - return index; -} - -function compareWithBias(bias) { - return function (entryV, entryW) { - if (entryV.barycenter < entryW.barycenter) { - return -1; - } else if (entryV.barycenter > entryW.barycenter) { - return 1; - } - - return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; - }; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js - - - - - - - -function sortSubgraph(g, v, cg, biasRight) { - var movable = g.children(v); - var node = g.node(v); - var bl = node ? node.borderLeft : undefined; - var br = node ? node.borderRight : undefined; - var subgraphs = {}; - - if (bl) { - movable = filter/* default */.A(movable, function (w) { - return w !== bl && w !== br; - }); - } - - var barycenters = barycenter(g, movable); - forEach/* default */.A(barycenters, function (entry) { - if (g.children(entry.v).length) { - var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); - subgraphs[entry.v] = subgraphResult; - if (has/* default */.A(subgraphResult, 'barycenter')) { - mergeBarycenters(entry, subgraphResult); - } - } - }); - - var entries = resolveConflicts(barycenters, cg); - expandSubgraphs(entries, subgraphs); - - var result = sort(entries, biasRight); - - if (bl) { - result.vs = flatten/* default */.A([bl, result.vs, br]); - if (g.predecessors(bl).length) { - var blPred = g.node(g.predecessors(bl)[0]), - brPred = g.node(g.predecessors(br)[0]); - if (!has/* default */.A(result, 'barycenter')) { - result.barycenter = 0; - result.weight = 0; - } - result.barycenter = - (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); - result.weight += 2; - } - } - - return result; -} - -function expandSubgraphs(entries, subgraphs) { - forEach/* default */.A(entries, function (entry) { - entry.vs = flatten/* default */.A( - entry.vs.map(function (v) { - if (subgraphs[v]) { - return subgraphs[v].vs; - } - return v; - }) - ); - }); -} - -function mergeBarycenters(target, other) { - if (!isUndefined/* default */.A(target.barycenter)) { - target.barycenter = - (target.barycenter * target.weight + other.barycenter * other.weight) / - (target.weight + other.weight); - target.weight += other.weight; - } else { - target.barycenter = other.barycenter; - target.weight = other.weight; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js - - - - - - - - - - - -/* - * Applies heuristics to minimize edge crossings in the graph and sets the best - * order solution as an order attribute on each node. - * - * Pre-conditions: - * - * 1. Graph must be DAG - * 2. Graph nodes must be objects with a "rank" attribute - * 3. Graph edges must have the "weight" attribute - * - * Post-conditions: - * - * 1. Graph nodes will have an "order" attribute based on the results of the - * algorithm. - */ -function order(g) { - var maxRank = util_maxRank(g), - downLayerGraphs = buildLayerGraphs(g, range/* default */.A(1, maxRank + 1), 'inEdges'), - upLayerGraphs = buildLayerGraphs(g, range/* default */.A(maxRank - 1, -1, -1), 'outEdges'); - - var layering = initOrder(g); - assignOrder(g, layering); - - var bestCC = Number.POSITIVE_INFINITY, - best; - - for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { - sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); - - layering = buildLayerMatrix(g); - var cc = crossCount(g, layering); - if (cc < bestCC) { - lastBest = 0; - best = lodash_es_cloneDeep(layering); - bestCC = cc; - } - } - - assignOrder(g, best); -} - -function buildLayerGraphs(g, ranks, relationship) { - return map/* default */.A(ranks, function (rank) { - return buildLayerGraph(g, rank, relationship); - }); -} - -function sweepLayerGraphs(layerGraphs, biasRight) { - var cg = new graphlib/* Graph */.T(); - forEach/* default */.A(layerGraphs, function (lg) { - var root = lg.graph().root; - var sorted = sortSubgraph(lg, root, cg, biasRight); - forEach/* default */.A(sorted.vs, function (v, i) { - lg.node(v).order = i; - }); - addSubgraphConstraints(lg, cg, sorted.vs); - }); -} - -function assignOrder(g, layering) { - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, i) { - g.node(v).order = i; - }); - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js - - - - -function parentDummyChains(g) { - var postorderNums = parent_dummy_chains_postorder(g); - - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var edgeObj = node.edgeObj; - var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); - var path = pathData.path; - var lca = pathData.lca; - var pathIdx = 0; - var pathV = path[pathIdx]; - var ascending = true; - - while (v !== edgeObj.w) { - node = g.node(v); - - if (ascending) { - while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { - pathIdx++; - } - - if (pathV === lca) { - ascending = false; - } - } - - if (!ascending) { - while ( - pathIdx < path.length - 1 && - g.node((pathV = path[pathIdx + 1])).minRank <= node.rank - ) { - pathIdx++; - } - pathV = path[pathIdx]; - } - - g.setParent(v, pathV); - v = g.successors(v)[0]; - } - }); -} - -// Find a path from v to w through the lowest common ancestor (LCA). Return the -// full path and the LCA. -function findPath(g, postorderNums, v, w) { - var vPath = []; - var wPath = []; - var low = Math.min(postorderNums[v].low, postorderNums[w].low); - var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); - var parent; - var lca; - - // Traverse up from v to find the LCA - parent = v; - do { - parent = g.parent(parent); - vPath.push(parent); - } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); - lca = parent; - - // Traverse from w to LCA - parent = w; - while ((parent = g.parent(parent)) !== lca) { - wPath.push(parent); - } - - return { path: vPath.concat(wPath.reverse()), lca: lca }; -} - -function parent_dummy_chains_postorder(g) { - var result = {}; - var lim = 0; - - function dfs(v) { - var low = lim; - forEach/* default */.A(g.children(v), dfs); - result[v] = { low: low, lim: lim++ }; - } - forEach/* default */.A(g.children(), dfs); - - return result; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js -var _castFunction = __webpack_require__(99922); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js - - - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && (0,_baseForOwn/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee)); -} - -/* harmony default export */ const lodash_es_forOwn = (forOwn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules -var _baseFor = __webpack_require__(4574); -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js - - - - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : (0,_baseFor/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee), keysIn/* default */.A); -} - -/* harmony default export */ const lodash_es_forIn = (forIn); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js - - - - -/* - * This module provides coordinate assignment based on Brandes and Köpf, "Fast - * and Simple Horizontal Coordinate Assignment." - */ - - - -/* - * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" - * property. A type-1 conflict is one where a non-inner segment crosses an - * inner segment. An inner segment is an edge with both incident nodes marked - * with the "dummy" property. - * - * This algorithm scans layer by layer, starting with the second, for type-1 - * conflicts between the current layer and the previous layer. For each layer - * it scans the nodes from left to right until it reaches one that is incident - * on an inner segment. It then scans predecessors to determine if they have - * edges that cross that inner segment. At the end a final scan is done for all - * nodes on the current rank to see if they cross the last visited inner - * segment. - * - * This algorithm (safely) assumes that a dummy node will only be incident on a - * single node in the layers being scanned. - */ -function findType1Conflicts(g, layering) { - var conflicts = {}; - - function visitLayer(prevLayer, layer) { - var // last visited node in the previous layer that is incident on an inner - // segment. - k0 = 0, - // Tracks the last node in this layer scanned for crossings with a type-1 - // segment. - scanPos = 0, - prevLayerLength = prevLayer.length, - lastNode = lodash_es_last(layer); - - forEach/* default */.A(layer, function (v, i) { - var w = findOtherInnerSegmentNode(g, v), - k1 = w ? g.node(w).order : prevLayerLength; - - if (w || v === lastNode) { - forEach/* default */.A(layer.slice(scanPos, i + 1), function (scanNode) { - forEach/* default */.A(g.predecessors(scanNode), function (u) { - var uLabel = g.node(u), - uPos = uLabel.order; - if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { - addConflict(conflicts, u, scanNode); - } - }); - }); - // @ts-expect-error - scanPos = i + 1; - k0 = k1; - } - }); - - return layer; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findType2Conflicts(g, layering) { - var conflicts = {}; - - function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { - var v; - forEach/* default */.A(range/* default */.A(southPos, southEnd), function (i) { - v = south[i]; - if (g.node(v).dummy) { - forEach/* default */.A(g.predecessors(v), function (u) { - var uNode = g.node(u); - if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { - addConflict(conflicts, u, v); - } - }); - } - }); - } - - function visitLayer(north, south) { - var prevNorthPos = -1, - nextNorthPos, - southPos = 0; - - forEach/* default */.A(south, function (v, southLookahead) { - if (g.node(v).dummy === 'border') { - var predecessors = g.predecessors(v); - if (predecessors.length) { - nextNorthPos = g.node(predecessors[0]).order; - scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); - // @ts-expect-error - southPos = southLookahead; - prevNorthPos = nextNorthPos; - } - } - scan(south, southPos, south.length, nextNorthPos, north.length); - }); - - return south; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findOtherInnerSegmentNode(g, v) { - if (g.node(v).dummy) { - return lodash_es_find(g.predecessors(v), function (u) { - return g.node(u).dummy; - }); - } -} - -function addConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - - var conflictsV = conflicts[v]; - if (!conflictsV) { - conflicts[v] = conflictsV = {}; - } - conflictsV[w] = true; -} - -function hasConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - return has/* default */.A(conflicts[v], w); -} - -/* - * Try to align nodes into vertical "blocks" where possible. This algorithm - * attempts to align a node with one of its median neighbors. If the edge - * connecting a neighbor is a type-1 conflict then we ignore that possibility. - * If a previous node has already formed a block with a node after the node - * we're trying to form a block with, we also ignore that possibility - our - * blocks would be split in that scenario. - */ -function verticalAlignment(g, layering, conflicts, neighborFn) { - var root = {}, - align = {}, - pos = {}; - - // We cache the position here based on the layering because the graph and - // layering may be out of sync. The layering matrix is manipulated to - // generate different extreme alignments. - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, order) { - root[v] = v; - align[v] = v; - pos[v] = order; - }); - }); - - forEach/* default */.A(layering, function (layer) { - var prevIdx = -1; - forEach/* default */.A(layer, function (v) { - var ws = neighborFn(v); - if (ws.length) { - ws = lodash_es_sortBy(ws, function (w) { - return pos[w]; - }); - var mp = (ws.length - 1) / 2; - for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { - var w = ws[i]; - if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { - align[w] = v; - align[v] = root[v] = root[w]; - prevIdx = pos[w]; - } - } - } - }); - }); - - return { root: root, align: align }; -} - -function horizontalCompaction(g, layering, root, align, reverseSep) { - // This portion of the algorithm differs from BK due to a number of problems. - // Instead of their algorithm we construct a new block graph and do two - // sweeps. The first sweep places blocks with the smallest possible - // coordinates. The second sweep removes unused space by moving blocks to the - // greatest coordinates without violating separation. - var xs = {}, - blockG = buildBlockGraph(g, layering, root, reverseSep), - borderType = reverseSep ? 'borderLeft' : 'borderRight'; - - function iterate(setXsFunc, nextNodesFunc) { - var stack = blockG.nodes(); - var elem = stack.pop(); - var visited = {}; - while (elem) { - if (visited[elem]) { - setXsFunc(elem); - } else { - visited[elem] = true; - stack.push(elem); - stack = stack.concat(nextNodesFunc(elem)); - } - - elem = stack.pop(); - } - } - - // First pass, assign smallest coordinates - function pass1(elem) { - xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { - return Math.max(acc, xs[e.v] + blockG.edge(e)); - }, 0); - } - - // Second pass, assign greatest coordinates - function pass2(elem) { - var min = blockG.outEdges(elem).reduce(function (acc, e) { - return Math.min(acc, xs[e.w] - blockG.edge(e)); - }, Number.POSITIVE_INFINITY); - - var node = g.node(elem); - if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { - xs[elem] = Math.max(xs[elem], min); - } - } - - iterate(pass1, blockG.predecessors.bind(blockG)); - iterate(pass2, blockG.successors.bind(blockG)); - - // Assign x coordinates to all nodes - forEach/* default */.A(align, function (v) { - xs[v] = xs[root[v]]; - }); - - return xs; -} - -function buildBlockGraph(g, layering, root, reverseSep) { - var blockGraph = new graphlib/* Graph */.T(), - graphLabel = g.graph(), - sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); - - forEach/* default */.A(layering, function (layer) { - var u; - forEach/* default */.A(layer, function (v) { - var vRoot = root[v]; - blockGraph.setNode(vRoot); - if (u) { - var uRoot = root[u], - prevMax = blockGraph.edge(uRoot, vRoot); - blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); - } - u = v; - }); - }); - - return blockGraph; -} - -/* - * Returns the alignment that has the smallest width of the given alignments. - */ -function findSmallestWidthAlignment(g, xss) { - return lodash_es_minBy(values/* default */.A(xss), function (xs) { - var max = Number.NEGATIVE_INFINITY; - var min = Number.POSITIVE_INFINITY; - - lodash_es_forIn(xs, function (x, v) { - var halfWidth = width(g, v) / 2; - - max = Math.max(x + halfWidth, max); - min = Math.min(x - halfWidth, min); - }); - - return max - min; - }); -} - -/* - * Align the coordinates of each of the layout alignments such that - * left-biased alignments have their minimum coordinate at the same point as - * the minimum coordinate of the smallest width alignment and right-biased - * alignments have their maximum coordinate at the same point as the maximum - * coordinate of the smallest width alignment. - */ -function alignCoordinates(xss, alignTo) { - var alignToVals = values/* default */.A(alignTo), - alignToMin = lodash_es_min(alignToVals), - alignToMax = lodash_es_max(alignToVals); - - forEach/* default */.A(['u', 'd'], function (vert) { - forEach/* default */.A(['l', 'r'], function (horiz) { - var alignment = vert + horiz, - xs = xss[alignment], - delta; - if (xs === alignTo) return; - - var xsVals = values/* default */.A(xs); - delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); - - if (delta) { - xss[alignment] = lodash_es_mapValues(xs, function (x) { - return x + delta; - }); - } - }); - }); -} - -function balance(xss, align) { - return lodash_es_mapValues(xss.ul, function (ignore, v) { - if (align) { - return xss[align.toLowerCase()][v]; - } else { - var xs = lodash_es_sortBy(map/* default */.A(xss, v)); - return (xs[1] + xs[2]) / 2; - } - }); -} - -function positionX(g) { - var layering = buildLayerMatrix(g); - var conflicts = merge/* default */.A(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); - - var xss = {}; - var adjustedLayering; - forEach/* default */.A(['u', 'd'], function (vert) { - adjustedLayering = vert === 'u' ? layering : values/* default */.A(layering).reverse(); - forEach/* default */.A(['l', 'r'], function (horiz) { - if (horiz === 'r') { - adjustedLayering = map/* default */.A(adjustedLayering, function (inner) { - return values/* default */.A(inner).reverse(); - }); - } - - var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); - var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); - var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); - if (horiz === 'r') { - xs = lodash_es_mapValues(xs, function (x) { - return -x; - }); - } - xss[vert + horiz] = xs; - }); - }); - - var smallestWidth = findSmallestWidthAlignment(g, xss); - alignCoordinates(xss, smallestWidth); - return balance(xss, g.graph().align); -} - -function sep(nodeSep, edgeSep, reverseSep) { - return function (g, v, w) { - var vLabel = g.node(v); - var wLabel = g.node(w); - var sum = 0; - var delta; - - sum += vLabel.width / 2; - if (has/* default */.A(vLabel, 'labelpos')) { - switch (vLabel.labelpos.toLowerCase()) { - case 'l': - delta = -vLabel.width / 2; - break; - case 'r': - delta = vLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; - sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; - - sum += wLabel.width / 2; - if (has/* default */.A(wLabel, 'labelpos')) { - switch (wLabel.labelpos.toLowerCase()) { - case 'l': - delta = wLabel.width / 2; - break; - case 'r': - delta = -wLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - return sum; - }; -} - -function width(g, v) { - return g.node(v).width; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js - - - - - - -function position(g) { - g = asNonCompoundGraph(g); - - positionY(g); - lodash_es_forOwn(positionX(g), function (x, v) { - g.node(v).x = x; - }); -} - -function positionY(g) { - var layering = buildLayerMatrix(g); - var rankSep = g.graph().ranksep; - var prevY = 0; - forEach/* default */.A(layering, function (layer) { - var maxHeight = lodash_es_max( - map/* default */.A(layer, function (v) { - return g.node(v).height; - }) - ); - forEach/* default */.A(layer, function (v) { - g.node(v).y = prevY + maxHeight / 2; - }); - prevY += maxHeight + rankSep; - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js - - - - - - - - - - - - - - - -function layout(g, opts) { - var time = opts && opts.debugTiming ? util_time : notime; - time('layout', function () { - var layoutGraph = time(' buildLayoutGraph', function () { - return buildLayoutGraph(g); - }); - time(' runLayout', function () { - runLayout(layoutGraph, time); - }); - time(' updateInputGraph', function () { - updateInputGraph(g, layoutGraph); - }); - }); -} - -function runLayout(g, time) { - time(' makeSpaceForEdgeLabels', function () { - makeSpaceForEdgeLabels(g); - }); - time(' removeSelfEdges', function () { - removeSelfEdges(g); - }); - time(' acyclic', function () { - run(g); - }); - time(' nestingGraph.run', function () { - nesting_graph_run(g); - }); - time(' rank', function () { - rank(asNonCompoundGraph(g)); - }); - time(' injectEdgeLabelProxies', function () { - injectEdgeLabelProxies(g); - }); - time(' removeEmptyRanks', function () { - removeEmptyRanks(g); - }); - time(' nestingGraph.cleanup', function () { - cleanup(g); - }); - time(' normalizeRanks', function () { - normalizeRanks(g); - }); - time(' assignRankMinMax', function () { - assignRankMinMax(g); - }); - time(' removeEdgeLabelProxies', function () { - removeEdgeLabelProxies(g); - }); - time(' normalize.run', function () { - normalize_run(g); - }); - time(' parentDummyChains', function () { - parentDummyChains(g); - }); - time(' addBorderSegments', function () { - addBorderSegments(g); - }); - time(' order', function () { - order(g); - }); - time(' insertSelfEdges', function () { - insertSelfEdges(g); - }); - time(' adjustCoordinateSystem', function () { - adjust(g); - }); - time(' position', function () { - position(g); - }); - time(' positionSelfEdges', function () { - positionSelfEdges(g); - }); - time(' removeBorderNodes', function () { - removeBorderNodes(g); - }); - time(' normalize.undo', function () { - normalize_undo(g); - }); - time(' fixupEdgeLabelCoords', function () { - fixupEdgeLabelCoords(g); - }); - time(' undoCoordinateSystem', function () { - coordinate_system_undo(g); - }); - time(' translateGraph', function () { - translateGraph(g); - }); - time(' assignNodeIntersects', function () { - assignNodeIntersects(g); - }); - time(' reversePoints', function () { - reversePointsForReversedEdges(g); - }); - time(' acyclic.undo', function () { - undo(g); - }); -} - -/* - * Copies final layout information from the layout graph back to the input - * graph. This process only copies whitelisted attributes from the layout graph - * to the input graph, so it serves as a good place to determine what - * attributes can influence layout. - */ -function updateInputGraph(inputGraph, layoutGraph) { - forEach/* default */.A(inputGraph.nodes(), function (v) { - var inputLabel = inputGraph.node(v); - var layoutLabel = layoutGraph.node(v); - - if (inputLabel) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - - if (layoutGraph.children(v).length) { - inputLabel.width = layoutLabel.width; - inputLabel.height = layoutLabel.height; - } - } - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var inputLabel = inputGraph.edge(e); - var layoutLabel = layoutGraph.edge(e); - - inputLabel.points = layoutLabel.points; - if (has/* default */.A(layoutLabel, 'x')) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - } - }); - - inputGraph.graph().width = layoutGraph.graph().width; - inputGraph.graph().height = layoutGraph.graph().height; -} - -var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; -var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; -var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; -var nodeNumAttrs = ['width', 'height']; -var nodeDefaults = { width: 0, height: 0 }; -var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; -var edgeDefaults = { - minlen: 1, - weight: 1, - width: 0, - height: 0, - labeloffset: 10, - labelpos: 'r', -}; -var edgeAttrs = ['labelpos']; - -/* - * Constructs a new graph from the input graph, which can be used for layout. - * This process copies only whitelisted attributes from the input graph to the - * layout graph. Thus this function serves as a good place to determine what - * attributes can influence layout. - */ -function buildLayoutGraph(inputGraph) { - var g = new graphlib/* Graph */.T({ multigraph: true, compound: true }); - var graph = canonicalize(inputGraph.graph()); - - g.setGraph( - merge/* default */.A({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.A(graph, graphAttrs)) - ); - - forEach/* default */.A(inputGraph.nodes(), function (v) { - var node = canonicalize(inputGraph.node(v)); - g.setNode(v, defaults/* default */.A(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); - g.setParent(v, inputGraph.parent(v)); - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var edge = canonicalize(inputGraph.edge(e)); - g.setEdge( - e, - merge/* default */.A({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.A(edge, edgeAttrs)) - ); - }); - - return g; -} - -/* - * This idea comes from the Gansner paper: to account for edge labels in our - * layout we split each rank in half by doubling minlen and halving ranksep. - * Then we can place labels at these mid-points between nodes. - * - * We also add some minimal padding to the width to push the label for the edge - * away from the edge itself a bit. - */ -function makeSpaceForEdgeLabels(g) { - var graph = g.graph(); - graph.ranksep /= 2; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - edge.minlen *= 2; - if (edge.labelpos.toLowerCase() !== 'c') { - if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { - edge.width += edge.labeloffset; - } else { - edge.height += edge.labeloffset; - } - } - }); -} - -/* - * Creates temporary dummy nodes that capture the rank in which each edge's - * label is going to, if it has one of non-zero width and height. We do this - * so that we can safely remove empty ranks while preserving balance for the - * label's position. - */ -function injectEdgeLabelProxies(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.width && edge.height) { - var v = g.node(e.v); - var w = g.node(e.w); - var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; - addDummyNode(g, 'edge-proxy', label, '_ep'); - } - }); -} - -function assignRankMinMax(g) { - var maxRank = 0; - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.borderTop) { - node.minRank = g.node(node.borderTop).rank; - node.maxRank = g.node(node.borderBottom).rank; - // @ts-expect-error - maxRank = lodash_es_max(maxRank, node.maxRank); - } - }); - g.graph().maxRank = maxRank; -} - -function removeEdgeLabelProxies(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'edge-proxy') { - g.edge(node.e).labelRank = node.rank; - g.removeNode(v); - } - }); -} - -function translateGraph(g) { - var minX = Number.POSITIVE_INFINITY; - var maxX = 0; - var minY = Number.POSITIVE_INFINITY; - var maxY = 0; - var graphLabel = g.graph(); - var marginX = graphLabel.marginx || 0; - var marginY = graphLabel.marginy || 0; - - function getExtremes(attrs) { - var x = attrs.x; - var y = attrs.y; - var w = attrs.width; - var h = attrs.height; - minX = Math.min(minX, x - w / 2); - maxX = Math.max(maxX, x + w / 2); - minY = Math.min(minY, y - h / 2); - maxY = Math.max(maxY, y + h / 2); - } - - forEach/* default */.A(g.nodes(), function (v) { - getExtremes(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - getExtremes(edge); - } - }); - - minX -= marginX; - minY -= marginY; - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - node.x -= minX; - node.y -= minY; - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, function (p) { - p.x -= minX; - p.y -= minY; - }); - if (has/* default */.A(edge, 'x')) { - edge.x -= minX; - } - if (has/* default */.A(edge, 'y')) { - edge.y -= minY; - } - }); - - graphLabel.width = maxX - minX + marginX; - graphLabel.height = maxY - minY + marginY; -} - -function assignNodeIntersects(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - var nodeV = g.node(e.v); - var nodeW = g.node(e.w); - var p1, p2; - if (!edge.points) { - edge.points = []; - p1 = nodeW; - p2 = nodeV; - } else { - p1 = edge.points[0]; - p2 = edge.points[edge.points.length - 1]; - } - edge.points.unshift(intersectRect(nodeV, p1)); - edge.points.push(intersectRect(nodeW, p2)); - }); -} - -function fixupEdgeLabelCoords(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - if (edge.labelpos === 'l' || edge.labelpos === 'r') { - edge.width -= edge.labeloffset; - } - switch (edge.labelpos) { - case 'l': - edge.x -= edge.width / 2 + edge.labeloffset; - break; - case 'r': - edge.x += edge.width / 2 + edge.labeloffset; - break; - } - } - }); -} - -function reversePointsForReversedEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.reversed) { - edge.points.reverse(); - } - }); -} - -function removeBorderNodes(g) { - forEach/* default */.A(g.nodes(), function (v) { - if (g.children(v).length) { - var node = g.node(v); - var t = g.node(node.borderTop); - var b = g.node(node.borderBottom); - var l = g.node(lodash_es_last(node.borderLeft)); - var r = g.node(lodash_es_last(node.borderRight)); - - node.width = Math.abs(r.x - l.x); - node.height = Math.abs(b.y - t.y); - node.x = l.x + node.width / 2; - node.y = t.y + node.height / 2; - } - }); - - forEach/* default */.A(g.nodes(), function (v) { - if (g.node(v).dummy === 'border') { - g.removeNode(v); - } - }); -} - -function removeSelfEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - if (e.v === e.w) { - var node = g.node(e.v); - if (!node.selfEdges) { - node.selfEdges = []; - } - node.selfEdges.push({ e: e, label: g.edge(e) }); - g.removeEdge(e); - } - }); -} - -function insertSelfEdges(g) { - var layers = buildLayerMatrix(g); - forEach/* default */.A(layers, function (layer) { - var orderShift = 0; - forEach/* default */.A(layer, function (v, i) { - var node = g.node(v); - node.order = i + orderShift; - forEach/* default */.A(node.selfEdges, function (selfEdge) { - addDummyNode( - g, - 'selfedge', - { - width: selfEdge.label.width, - height: selfEdge.label.height, - rank: node.rank, - order: i + ++orderShift, - e: selfEdge.e, - label: selfEdge.label, - }, - '_se' - ); - }); - delete node.selfEdges; - }); - }); -} - -function positionSelfEdges(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'selfedge') { - var selfNode = g.node(node.e.v); - var x = selfNode.x + selfNode.width / 2; - var y = selfNode.y; - var dx = node.x - x; - var dy = selfNode.height / 2; - g.setEdge(node.e, node.label); - g.removeNode(v); - node.label.points = [ - { x: x + (2 * dx) / 3, y: y - dy }, - { x: x + (5 * dx) / 6, y: y - dy }, - { x: x + dx, y: y }, - { x: x + (5 * dx) / 6, y: y + dy }, - { x: x + (2 * dx) / 3, y: y + dy }, - ]; - node.label.x = node.x; - node.label.y = node.y; - } - }); -} - -function selectNumberAttrs(obj, attrs) { - return lodash_es_mapValues(pick/* default */.A(obj, attrs), Number); -} - -function canonicalize(attrs) { - var newAttrs = {}; - forEach/* default */.A(attrs, function (v, k) { - newAttrs[k.toLowerCase()] = v; - }); - return newAttrs; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js - - - - - - - - -/***/ }), - -/***/ 73046: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - T: () => (/* binding */ Graph) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js -var isFunction = __webpack_require__(89610); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js -var isEmpty = __webpack_require__(66401); -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -/* harmony default export */ const _baseIsNaN = (baseIsNaN); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -/* harmony default export */ const _strictIndexOf = (strictIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js - - - - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? _strictIndexOf(array, value, fromIndex) - : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); -} - -/* harmony default export */ const _baseIndexOf = (baseIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js - - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && _baseIndexOf(array, value, 0) > -1; -} - -/* harmony default export */ const _arrayIncludes = (arrayIncludes); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js -var _Set = __webpack_require__(39857); -;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js -/** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ -function noop() { - // No operation performed. -} - -/* harmony default export */ const lodash_es_noop = (noop); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { - return new _Set/* default */.A(values); -}; - -/* harmony default export */ const _createSet = (createSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js - - - - - - - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = _arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = _arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : _createSet(array); - if (set) { - return (0,_setToArray/* default */.A)(set); - } - isCommon = false; - includes = _cacheHas/* default */.A; - seen = new _SetCache/* default */.A; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -/* harmony default export */ const _baseUniq = (baseUniq); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js -var isArrayLikeObject = __webpack_require__(53533); -;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js - - - - - -/** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ -var union = (0,_baseRest/* default */.A)(function(arrays) { - return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); -}); - -/* harmony default export */ const lodash_es_union = (union); - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js - - -var DEFAULT_EDGE_NAME = '\x00'; -var GRAPH_NODE = '\x00'; -var EDGE_KEY_DELIM = '\x01'; - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. -class Graph { - constructor(opts = {}) { - this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; - this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; - this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; - - // Label for the graph itself - this._label = undefined; - - // Defaults to be set when creating a new node - this._defaultNodeLabelFn = constant/* default */.A(undefined); - - // Defaults to be set when creating a new edge - this._defaultEdgeLabelFn = constant/* default */.A(undefined); - - // v -> label - this._nodes = {}; - - if (this._isCompound) { - // v -> parent - this._parent = {}; - - // v -> children - this._children = {}; - this._children[GRAPH_NODE] = {}; - } - - // v -> edgeObj - this._in = {}; - - // u -> v -> Number - this._preds = {}; - - // v -> edgeObj - this._out = {}; - - // v -> w -> Number - this._sucs = {}; - - // e -> edgeObj - this._edgeObjs = {}; - - // e -> label - this._edgeLabels = {}; - } - /* === Graph functions ========= */ - isDirected() { - return this._isDirected; - } - isMultigraph() { - return this._isMultigraph; - } - isCompound() { - return this._isCompound; - } - setGraph(label) { - this._label = label; - return this; - } - graph() { - return this._label; - } - /* === Node functions ========== */ - setDefaultNodeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultNodeLabelFn = newDefault; - return this; - } - nodeCount() { - return this._nodeCount; - } - nodes() { - return keys/* default */.A(this._nodes); - } - sources() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._in[v]); - }); - } - sinks() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._out[v]); - }); - } - setNodes(vs, value) { - var args = arguments; - var self = this; - forEach/* default */.A(vs, function (v) { - if (args.length > 1) { - self.setNode(v, value); - } else { - self.setNode(v); - } - }); - return this; - } - setNode(v, value) { - if (has/* default */.A(this._nodes, v)) { - if (arguments.length > 1) { - this._nodes[v] = value; - } - return this; - } - - // @ts-expect-error - this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); - if (this._isCompound) { - this._parent[v] = GRAPH_NODE; - this._children[v] = {}; - this._children[GRAPH_NODE][v] = true; - } - this._in[v] = {}; - this._preds[v] = {}; - this._out[v] = {}; - this._sucs[v] = {}; - ++this._nodeCount; - return this; - } - node(v) { - return this._nodes[v]; - } - hasNode(v) { - return has/* default */.A(this._nodes, v); - } - removeNode(v) { - var self = this; - if (has/* default */.A(this._nodes, v)) { - var removeEdge = function (e) { - self.removeEdge(self._edgeObjs[e]); - }; - delete this._nodes[v]; - if (this._isCompound) { - this._removeFromParentsChildList(v); - delete this._parent[v]; - forEach/* default */.A(this.children(v), function (child) { - self.setParent(child); - }); - delete this._children[v]; - } - forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); - delete this._in[v]; - delete this._preds[v]; - forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); - delete this._out[v]; - delete this._sucs[v]; - --this._nodeCount; - } - return this; - } - setParent(v, parent) { - if (!this._isCompound) { - throw new Error('Cannot set parent in a non-compound graph'); - } - - if (isUndefined/* default */.A(parent)) { - parent = GRAPH_NODE; - } else { - // Coerce parent to string - parent += ''; - for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { - if (ancestor === v) { - throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); - } - } - - this.setNode(parent); - } - - this.setNode(v); - this._removeFromParentsChildList(v); - this._parent[v] = parent; - this._children[parent][v] = true; - return this; - } - _removeFromParentsChildList(v) { - delete this._children[this._parent[v]][v]; - } - parent(v) { - if (this._isCompound) { - var parent = this._parent[v]; - if (parent !== GRAPH_NODE) { - return parent; - } - } - } - children(v) { - if (isUndefined/* default */.A(v)) { - v = GRAPH_NODE; - } - - if (this._isCompound) { - var children = this._children[v]; - if (children) { - return keys/* default */.A(children); - } - } else if (v === GRAPH_NODE) { - return this.nodes(); - } else if (this.hasNode(v)) { - return []; - } - } - predecessors(v) { - var predsV = this._preds[v]; - if (predsV) { - return keys/* default */.A(predsV); - } - } - successors(v) { - var sucsV = this._sucs[v]; - if (sucsV) { - return keys/* default */.A(sucsV); - } - } - neighbors(v) { - var preds = this.predecessors(v); - if (preds) { - return lodash_es_union(preds, this.successors(v)); - } - } - isLeaf(v) { - var neighbors; - if (this.isDirected()) { - neighbors = this.successors(v); - } else { - neighbors = this.neighbors(v); - } - return neighbors.length === 0; - } - filterNodes(filter) { - // @ts-expect-error - var copy = new this.constructor({ - directed: this._isDirected, - multigraph: this._isMultigraph, - compound: this._isCompound, - }); - - copy.setGraph(this.graph()); - - var self = this; - forEach/* default */.A(this._nodes, function (value, v) { - if (filter(v)) { - copy.setNode(v, value); - } - }); - - forEach/* default */.A(this._edgeObjs, function (e) { - // @ts-expect-error - if (copy.hasNode(e.v) && copy.hasNode(e.w)) { - copy.setEdge(e, self.edge(e)); - } - }); - - var parents = {}; - function findParent(v) { - var parent = self.parent(v); - if (parent === undefined || copy.hasNode(parent)) { - parents[v] = parent; - return parent; - } else if (parent in parents) { - return parents[parent]; - } else { - return findParent(parent); - } - } - - if (this._isCompound) { - forEach/* default */.A(copy.nodes(), function (v) { - copy.setParent(v, findParent(v)); - }); - } - - return copy; - } - /* === Edge functions ========== */ - setDefaultEdgeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultEdgeLabelFn = newDefault; - return this; - } - edgeCount() { - return this._edgeCount; - } - edges() { - return values/* default */.A(this._edgeObjs); - } - setPath(vs, value) { - var self = this; - var args = arguments; - reduce/* default */.A(vs, function (v, w) { - if (args.length > 1) { - self.setEdge(v, w, value); - } else { - self.setEdge(v, w); - } - return w; - }); - return this; - } - /* - * setEdge(v, w, [value, [name]]) - * setEdge({ v, w, [name] }, [value]) - */ - setEdge() { - var v, w, name, value; - var valueSpecified = false; - var arg0 = arguments[0]; - - if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { - v = arg0.v; - w = arg0.w; - name = arg0.name; - if (arguments.length === 2) { - value = arguments[1]; - valueSpecified = true; - } - } else { - v = arg0; - w = arguments[1]; - name = arguments[3]; - if (arguments.length > 2) { - value = arguments[2]; - valueSpecified = true; - } - } - - v = '' + v; - w = '' + w; - if (!isUndefined/* default */.A(name)) { - name = '' + name; - } - - var e = edgeArgsToId(this._isDirected, v, w, name); - if (has/* default */.A(this._edgeLabels, e)) { - if (valueSpecified) { - this._edgeLabels[e] = value; - } - return this; - } - - if (!isUndefined/* default */.A(name) && !this._isMultigraph) { - throw new Error('Cannot set a named edge when isMultigraph = false'); - } - - // It didn't exist, so we need to create it. - // First ensure the nodes exist. - this.setNode(v); - this.setNode(w); - - // @ts-expect-error - this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); - - var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); - // Ensure we add undirected edges in a consistent way. - v = edgeObj.v; - w = edgeObj.w; - - Object.freeze(edgeObj); - this._edgeObjs[e] = edgeObj; - incrementOrInitEntry(this._preds[w], v); - incrementOrInitEntry(this._sucs[v], w); - this._in[w][e] = edgeObj; - this._out[v][e] = edgeObj; - this._edgeCount++; - return this; - } - edge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return this._edgeLabels[e]; - } - hasEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return has/* default */.A(this._edgeLabels, e); - } - removeEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - var edge = this._edgeObjs[e]; - if (edge) { - v = edge.v; - w = edge.w; - delete this._edgeLabels[e]; - delete this._edgeObjs[e]; - decrementOrRemoveEntry(this._preds[w], v); - decrementOrRemoveEntry(this._sucs[v], w); - delete this._in[w][e]; - delete this._out[v][e]; - this._edgeCount--; - } - return this; - } - inEdges(v, u) { - var inV = this._in[v]; - if (inV) { - var edges = values/* default */.A(inV); - if (!u) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.v === u; - }); - } - } - outEdges(v, w) { - var outV = this._out[v]; - if (outV) { - var edges = values/* default */.A(outV); - if (!w) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.w === w; - }); - } - } - nodeEdges(v, w) { - var inEdges = this.inEdges(v, w); - if (inEdges) { - return inEdges.concat(this.outEdges(v, w)); - } - } -} - -/* Number of nodes in the graph. Should only be changed by the implementation. */ -Graph.prototype._nodeCount = 0; - -/* Number of edges in the graph. Should only be changed by the implementation. */ -Graph.prototype._edgeCount = 0; - -function incrementOrInitEntry(map, k) { - if (map[k]) { - map[k]++; - } else { - map[k] = 1; - } -} - -function decrementOrRemoveEntry(map, k) { - if (!--map[k]) { - delete map[k]; - } -} - -function edgeArgsToId(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); -} - -function edgeArgsToObj(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - var edgeObj = { v: v, w: w }; - if (name) { - edgeObj.name = name; - } - return edgeObj; -} - -function edgeObjToId(isDirected, edgeObj) { - return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); -} - - -/***/ }), - -/***/ 697: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) -/* harmony export */ }); -/* unused harmony export version */ -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); -// Includes only the "core" of graphlib - - - -const version = '2.1.9-pre'; - - - - -/***/ }), - -/***/ 14075: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ M: () => (/* binding */ write) -/* harmony export */ }); -/* unused harmony export read */ -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69592); -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(50053); -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74722); -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); - - - - - -function write(g) { - var json = { - options: { - directed: g.isDirected(), - multigraph: g.isMultigraph(), - compound: g.isCompound(), - }, - nodes: writeNodes(g), - edges: writeEdges(g), - }; - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(g.graph())) { - json.value = lodash_es__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A(g.graph()); - } - return json; -} - -function writeNodes(g) { - return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A(g.nodes(), function (v) { - var nodeValue = g.node(v); - var parent = g.parent(v); - var node = { v: v }; - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(nodeValue)) { - node.value = nodeValue; - } - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(parent)) { - node.parent = parent; - } - return node; - }); -} - -function writeEdges(g) { - return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A(g.edges(), function (e) { - var edgeValue = g.edge(e); - var edge = { v: e.v, w: e.w }; - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(e.name)) { - edge.name = e.name; - } - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(edgeValue)) { - edge.value = edgeValue; - } - return edge; - }); -} - -function read(json) { - var g = new Graph(json.options).setGraph(json.value); - _.each(json.nodes, function (entry) { - g.setNode(entry.v, entry.value); - if (entry.parent) { - g.setParent(entry.v, entry.parent); - } - }); - _.each(json.edges, function (entry) { - g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); - }); - return g; -} - - -/***/ }), - -/***/ 75937: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72453); -/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74886); -/* IMPORT */ - - -/* MAIN */ -const channel = (color, channel) => { - return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.lang.round(_color_index_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.parse(color)[channel]); -}; -/* EXPORT */ -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (channel); - - -/***/ }), - -/***/ 62062: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _SetCache) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules -var _MapCache = __webpack_require__(29471); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -/* harmony default export */ const _setCacheAdd = (setCacheAdd); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -/* harmony default export */ const _setCacheHas = (setCacheHas); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js - - - - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new _MapCache/* default */.A; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; -SetCache.prototype.has = _setCacheHas; - -/* harmony default export */ const _SetCache = (SetCache); - - -/***/ }), - -/***/ 72641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); - - -/***/ }), - -/***/ 2634: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); - - -/***/ }), - -/***/ 45572: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); - - -/***/ }), - -/***/ 76912: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); - - -/***/ }), - -/***/ 91641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseClone) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js -var _arrayEach = __webpack_require__(72641); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js -var _copyObject = __webpack_require__(22031); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js - - - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssign = (baseAssign); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js - - - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssignIn = (baseAssignIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js -var _cloneBuffer = __webpack_require__(80154); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js -var _copyArray = __webpack_require__(39759); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js -var _getSymbols = __webpack_require__(14792); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js - - - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); -} - -/* harmony default export */ const _copySymbols = (copySymbols); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js -var _getPrototype = __webpack_require__(15647); -// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js -var stubArray = __webpack_require__(13153); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js - - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { - var result = []; - while (object) { - (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); - object = (0,_getPrototype/* default */.A)(object); - } - return result; -}; - -/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js - - - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); -} - -/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js -var _baseGetAllKeys = __webpack_require__(33831); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js - - - - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); -} - -/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/* harmony default export */ const _initCloneArray = (initCloneArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js -var _cloneArrayBuffer = __webpack_require__(90565); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js - - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -/* harmony default export */ const _cloneDataView = (cloneDataView); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -/* harmony default export */ const _cloneRegExp = (cloneRegExp); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js - - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -/* harmony default export */ const _cloneSymbol = (cloneSymbol); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js -var _cloneTypedArray = __webpack_require__(1801); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js - - - - - - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return (0,_cloneArrayBuffer/* default */.A)(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return _cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return (0,_cloneTypedArray/* default */.A)(object, isDeep); - - case mapTag: - return new Ctor; - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return _cloneRegExp(object); - - case setTag: - return new Ctor; - - case symbolTag: - return _cloneSymbol(object); - } -} - -/* harmony default export */ const _initCloneByTag = (initCloneByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules -var _initCloneObject = __webpack_require__(18598); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js - - - -/** `Object#toString` result references. */ -var _baseIsMap_mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; -} - -/* harmony default export */ const _baseIsMap = (baseIsMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js -var _nodeUtil = __webpack_require__(64841); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js - - - - -/* Node.js helper references. */ -var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; - -/* harmony default export */ const lodash_es_isMap = (isMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js - - - -/** `Object#toString` result references. */ -var _baseIsSet_setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; -} - -/* harmony default export */ const _baseIsSet = (baseIsSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js - - - - -/* Node.js helper references. */ -var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; - -/* harmony default export */ const lodash_es_isSet = (isSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js - - - - - - - - - - - - - - - - - - - - - - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - _baseClone_boolTag = '[object Boolean]', - _baseClone_dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - _baseClone_mapTag = '[object Map]', - _baseClone_numberTag = '[object Number]', - objectTag = '[object Object]', - _baseClone_regexpTag = '[object RegExp]', - _baseClone_setTag = '[object Set]', - _baseClone_stringTag = '[object String]', - _baseClone_symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var _baseClone_arrayBufferTag = '[object ArrayBuffer]', - _baseClone_dataViewTag = '[object DataView]', - _baseClone_float32Tag = '[object Float32Array]', - _baseClone_float64Tag = '[object Float64Array]', - _baseClone_int8Tag = '[object Int8Array]', - _baseClone_int16Tag = '[object Int16Array]', - _baseClone_int32Tag = '[object Int32Array]', - _baseClone_uint8Tag = '[object Uint8Array]', - _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', - _baseClone_uint16Tag = '[object Uint16Array]', - _baseClone_uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = -cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = -cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = -cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = -cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = -cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = -cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = -cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = -cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = -cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!(0,isObject/* default */.A)(value)) { - return value; - } - var isArr = (0,isArray/* default */.A)(value); - if (isArr) { - result = _initCloneArray(value); - if (!isDeep) { - return (0,_copyArray/* default */.A)(value, result); - } - } else { - var tag = (0,_getTag/* default */.A)(value), - isFunc = tag == funcTag || tag == genTag; - - if ((0,isBuffer/* default */.A)(value)) { - return (0,_cloneBuffer/* default */.A)(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); - if (!isDeep) { - return isFlat - ? _copySymbolsIn(value, _baseAssignIn(result, value)) - : _copySymbols(value, _baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = _initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new _Stack/* default */.A); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (lodash_es_isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (lodash_es_isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } - - var keysFunc = isFull - ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) - : (isFlat ? keysIn/* default */.A : keys/* default */.A); - - var props = isArr ? undefined : keysFunc(value); - (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -/* harmony default export */ const _baseClone = (baseClone); - - -/***/ }), - -/***/ 6240: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseEach) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js - - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!(0,isArrayLike/* default */.A)(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -/* harmony default export */ const _createBaseEach = (createBaseEach); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js - - - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = _createBaseEach(_baseForOwn/* default */.A); - -/* harmony default export */ const _baseEach = (baseEach); - - -/***/ }), - -/***/ 25707: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); - - -/***/ }), - -/***/ 13588: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseFlatten) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules -var isArguments = __webpack_require__(52274); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js - - - - -/** Built-in value references. */ -var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -/* harmony default export */ const _isFlattenable = (isFlattenable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js - - - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = _isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - (0,_arrayPush/* default */.A)(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -/* harmony default export */ const _baseFlatten = (baseFlatten); - - -/***/ }), - -/***/ 79841: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); - - -/***/ }), - -/***/ 66318: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); - - -/***/ }), - -/***/ 33831: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); - - -/***/ }), - -/***/ 49574: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseIteratee) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arraySome = (arraySome); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js - - - - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!_arraySome(other, function(othValue, othIndex) { - if (!(0,_cacheHas/* default */.A)(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalArrays = (equalArrays); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js -var _Uint8Array = __webpack_require__(43988); -// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js -var eq = __webpack_require__(66984); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -/* harmony default export */ const _mapToArray = (mapToArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _equalByTag_COMPARE_PARTIAL_FLAG = 1, - _equalByTag_COMPARE_UNORDERED_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return (0,eq/* default */.A)(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = _mapToArray; - - case setTag: - var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; - convert || (convert = _setToArray/* default */.A); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -/* harmony default export */ const _equalByTag = (equalByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js - - -/** Used to compose bitmasks for value comparisons. */ -var _equalObjects_COMPARE_PARTIAL_FLAG = 1; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, - objProps = (0,_getAllKeys/* default */.A)(object), - objLength = objProps.length, - othProps = (0,_getAllKeys/* default */.A)(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalObjects = (equalObjects); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules -var isTypedArray = __webpack_require__(33858); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js - - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var _baseIsEqualDeep_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = (0,isArray/* default */.A)(object), - othIsArr = (0,isArray/* default */.A)(other), - objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), - othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && (0,isBuffer/* default */.A)(object)) { - if (!(0,isBuffer/* default */.A)(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new _Stack/* default */.A); - return (objIsArr || (0,isTypedArray/* default */.A)(object)) - ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new _Stack/* default */.A); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new _Stack/* default */.A); - return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js - - - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { - return value !== value && other !== other; - } - return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -/* harmony default export */ const _baseIsEqual = (baseIsEqual); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, - _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new _Stack/* default */.A; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -/* harmony default export */ const _baseIsMatch = (baseIsMatch); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js - - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !(0,isObject/* default */.A)(value); -} - -/* harmony default export */ const _isStrictComparable = (isStrictComparable); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js - - - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = (0,keys/* default */.A)(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, _isStrictComparable(value)]; - } - return result; -} - -/* harmony default export */ const _getMatchData = (getMatchData); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js - - - - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = _getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return _matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || _baseIsMatch(object, source, matchData); - }; -} - -/* harmony default export */ const _baseMatches = (baseMatches); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js - - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); - return result === undefined ? defaultValue : result; -} - -/* harmony default export */ const lodash_es_get = (get); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, - _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { - return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); - } - return function(object) { - var objValue = lodash_es_get(object, path); - return (objValue === undefined && objValue === srcValue) - ? (0,hasIn/* default */.A)(object, path) - : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); - }; -} - -/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js - - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return (0,_baseGet/* default */.A)(object, path); - }; -} - -/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js - - - - - -/** - * Creates a function that returns the value at `path` of a given object. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - * @example - * - * var objects = [ - * { 'a': { 'b': 2 } }, - * { 'a': { 'b': 1 } } - * ]; - * - * _.map(objects, _.property('a.b')); - * // => [2, 1] - * - * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); - * // => [1, 2] - */ -function property(path) { - return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); -} - -/* harmony default export */ const lodash_es_property = (property); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js - - - - - - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity/* default */.A; - } - if (typeof value == 'object') { - return (0,isArray/* default */.A)(value) - ? _baseMatchesProperty(value[0], value[1]) - : _baseMatches(value); - } - return lodash_es_property(value); -} - -/* harmony default export */ const _baseIteratee = (baseIteratee); - - -/***/ }), - -/***/ 52568: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6240); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? Array(collection.length) : []; - - (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); - - -/***/ }), - -/***/ 70805: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); - - -/***/ }), - -/***/ 64099: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); - - -/***/ }), - -/***/ 99922: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); - - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); - - -/***/ }), - -/***/ 7819: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _castPath) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js -var memoize = __webpack_require__(46632); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js - - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = (0,memoize/* default */.A)(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -/* harmony default export */ const _memoizeCapped = (memoizeCapped); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js - - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = _memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/* harmony default export */ const _stringToPath = (stringToPath); - -// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules -var lodash_es_toString = __webpack_require__(28894); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js - - - - - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if ((0,isArray/* default */.A)(value)) { - return value; - } - return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); -} - -/* harmony default export */ const _castPath = (castPath); - - -/***/ }), - -/***/ 19042: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); -/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); - - -/***/ }), - -/***/ 14792: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); -/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); - - -/***/ }), - -/***/ 85054: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); -/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); -/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - - - - - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && - ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); - - -/***/ }), - -/***/ 86586: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); - - - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); - - -/***/ }), - -/***/ 29959: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); - - -/***/ }), - -/***/ 30901: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); - - -/***/ }), - -/***/ 50053: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(91641); - - -/** Used to compose bitmasks for cloning. */ -var CLONE_SYMBOLS_FLAG = 4; - -/** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ -function clone(value) { - return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value, CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone); - - -/***/ }), - -/***/ 23068: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24326); -/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66984); -/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832); -/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55615); - - - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); - - -/***/ }), - -/***/ 11662: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_filter) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js -var _arrayFilter = __webpack_require__(2634); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js - - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - (0,_baseEach/* default */.A)(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -/* harmony default export */ const _baseFilter = (baseFilter); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js - - - - - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ -function filter(collection, predicate) { - var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; - return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); -} - -/* harmony default export */ const lodash_es_filter = (filter); - - -/***/ }), - -/***/ 34098: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13588); - - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(array, 1) : []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); - - -/***/ }), - -/***/ 8058: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); -/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); - - -/***/ }), - -/***/ 48585: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_has) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && _baseHas_hasOwnProperty.call(object, key); -} - -/* harmony default export */ const _baseHas = (baseHas); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js - - - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); -} - -/* harmony default export */ const lodash_es_has = (has); - - -/***/ }), - -/***/ 39188: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_hasIn) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -/* harmony default export */ const _baseHasIn = (baseHasIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js - - - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); -} - -/* harmony default export */ const lodash_es_hasIn = (hasIn); - - -/***/ }), - -/***/ 61882: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); -/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); - - - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); - - -/***/ }), - -/***/ 69592: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); - - -/***/ }), - -/***/ 27422: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); -/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); - - -/***/ }), - -/***/ 74722: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45572); -/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574); -/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52568); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ -function map(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee, 3)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); - - -/***/ }), - -/***/ 81942: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_pick) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules -var _castPath = __webpack_require__(7819); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js -var _isIndex = __webpack_require__(25353); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js - - - - - - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!(0,isObject/* default */.A)(object)) { - return object; - } - path = (0,_castPath/* default */.A)(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = (0,_toKey/* default */.A)(path[index]), - newValue = value; - - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = (0,isObject/* default */.A)(objValue) - ? objValue - : ((0,_isIndex/* default */.A)(path[index + 1]) ? [] : {}); - } - } - (0,_assignValue/* default */.A)(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -/* harmony default export */ const _baseSet = (baseSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js - - - - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = (0,_baseGet/* default */.A)(object, path); - - if (predicate(value, path)) { - _baseSet(result, (0,_castPath/* default */.A)(path, object), value); - } - } - return result; -} - -/* harmony default export */ const _basePickBy = (basePickBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js - - - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, paths) { - return _basePickBy(object, paths, function(value, path) { - return (0,hasIn/* default */.A)(object, path); - }); -} - -/* harmony default export */ const _basePick = (basePick); - -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules -var _overRest = __webpack_require__(76875); -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules -var _setToString = __webpack_require__(67525); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js - - - - -/** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -function flatRest(func) { - return (0,_setToString/* default */.A)((0,_overRest/* default */.A)(func, undefined, flatten/* default */.A), func + ''); -} - -/* harmony default export */ const _flatRest = (flatRest); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js - - - -/** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ -var pick = _flatRest(function(object, paths) { - return object == null ? {} : _basePick(object, paths); -}); - -/* harmony default export */ const lodash_es_pick = (pick); - - -/***/ }), - -/***/ 91395: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_range) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -/* harmony default export */ const _baseRange = (baseRange); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js - - - - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.A)(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = (0,toFinite/* default */.A)(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = (0,toFinite/* default */.A)(end); - } - step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.A)(step); - return _baseRange(start, end, step, fromRight); - }; -} - -/* harmony default export */ const _createRange = (createRange); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js - - -/** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ -var range = _createRange(); - -/* harmony default export */ const lodash_es_range = (range); - - -/***/ }), - -/***/ 89463: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_reduce) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -/* harmony default export */ const _arrayReduce = (arrayReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -/* harmony default export */ const _baseReduce = (baseReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js - - - - - - -/** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ -function reduce(collection, iteratee, accumulator) { - var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, - initAccum = arguments.length < 3; - - return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); -} - -/* harmony default export */ const lodash_es_reduce = (reduce); - - -/***/ }), - -/***/ 13153: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ -function stubArray() { - return []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); - - -/***/ }), - -/***/ 74342: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toFinite) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js - - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/* harmony default export */ const _baseTrim = (baseTrim); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js - - - - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if ((0,isSymbol/* default */.A)(value)) { - return NAN; - } - if ((0,isObject/* default */.A)(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = (0,isObject/* default */.A)(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = _baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/* harmony default export */ const lodash_es_toNumber = (toNumber); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = lodash_es_toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/* harmony default export */ const lodash_es_toFinite = (toFinite); - - -/***/ }), - -/***/ 28894: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toString) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js - - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if ((0,isArray/* default */.A)(value)) { - // Recursively convert values (susceptible to call stack limits). - return (0,_arrayMap/* default */.A)(value, baseToString) + ''; - } - if ((0,isSymbol/* default */.A)(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const _baseToString = (baseToString); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js - - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString_toString(value) { - return value == null ? '' : _baseToString(value); -} - -/* harmony default export */ const lodash_es_toString = (toString_toString); - - -/***/ }), - -/***/ 5664: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28894); - - -/** Used to generate unique IDs. */ -var idCounter = 0; - -/** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ -function uniqueId(prefix) { - var id = ++idCounter; - return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(prefix) + id; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); - - -/***/ }), - -/***/ 38207: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_values) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js - - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return (0,_arrayMap/* default */.A)(props, function(key) { - return object[key]; - }); -} - -/* harmony default export */ const _baseValues = (baseValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js - - - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values(object) { - return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); -} - -/* harmony default export */ const lodash_es_values = (values); - - -/***/ }), - -/***/ 18897: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - a: () => (/* binding */ createText), - c: () => (/* binding */ computeDimensionOfText) -}); - -// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -var constructs_namespaceObject = {}; -__webpack_require__.r(constructs_namespaceObject); -__webpack_require__.d(constructs_namespaceObject, { - attentionMarkers: () => (attentionMarkers), - contentInitial: () => (contentInitial), - disable: () => (disable), - document: () => (constructs_document), - flow: () => (constructs_flow), - flowInitial: () => (flowInitial), - insideSpan: () => (insideSpan), - string: () => (constructs_string), - text: () => (constructs_text) -}); - -// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules -var mermaid_6dc72991 = __webpack_require__(99702); -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js -/** - * @typedef {import('mdast').Root|import('mdast').Content} Node - * - * @typedef Options - * Configuration (optional). - * @property {boolean | null | undefined} [includeImageAlt=true] - * Whether to use `alt` for `image`s. - * @property {boolean | null | undefined} [includeHtml=true] - * Whether to use `value` of HTML. - */ - -/** @type {Options} */ -const emptyOptions = {} - -/** - * Get the text content of a node or list of nodes. - * - * Prefers the node’s plain-text fields, otherwise serializes its children, - * and if the given value is an array, serialize the nodes in it. - * - * @param {unknown} value - * Thing to serialize, typically `Node`. - * @param {Options | null | undefined} [options] - * Configuration (optional). - * @returns {string} - * Serialized `value`. - */ -function lib_toString(value, options) { - const settings = options || emptyOptions - const includeImageAlt = - typeof settings.includeImageAlt === 'boolean' - ? settings.includeImageAlt - : true - const includeHtml = - typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true - - return one(value, includeImageAlt, includeHtml) -} - -/** - * One node or several nodes. - * - * @param {unknown} value - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized node. - */ -function one(value, includeImageAlt, includeHtml) { - if (node(value)) { - if ('value' in value) { - return value.type === 'html' && !includeHtml ? '' : value.value - } - - if (includeImageAlt && 'alt' in value && value.alt) { - return value.alt - } - - if ('children' in value) { - return lib_all(value.children, includeImageAlt, includeHtml) - } - } - - if (Array.isArray(value)) { - return lib_all(value, includeImageAlt, includeHtml) - } - - return '' -} - -/** - * Serialize a list of nodes. - * - * @param {Array<unknown>} values - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized nodes. - */ -function lib_all(values, includeImageAlt, includeHtml) { - /** @type {Array<string>} */ - const result = [] - let index = -1 - - while (++index < values.length) { - result[index] = one(values[index], includeImageAlt, includeHtml) - } - - return result.join('') -} - -/** - * Check if `value` looks like a node. - * - * @param {unknown} value - * Thing. - * @returns {value is Node} - * Whether `value` is a node. - */ -function node(value) { - return Boolean(value && typeof value === 'object') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array<T>} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array<T>} items - * Items to inject into `list`. - * @returns {void} - * Nothing. - */ -function splice(list, start, remove, items) { - const end = list.length - let chunkStart = 0 - /** @type {Array<unknown>} */ - let parameters - - // Make start between zero and `end` (included). - if (start < 0) { - start = -start > end ? 0 : end + start - } else { - start = start > end ? end : start - } - remove = remove > 0 ? remove : 0 - - // No need to chunk the items if there’s only a couple (10k) items. - if (items.length < 10000) { - parameters = Array.from(items) - parameters.unshift(start, remove) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - } else { - // Delete `remove` items starting from `start` - if (remove) list.splice(start, remove) - - // Insert the items in chunks to not cause stack overflows. - while (chunkStart < items.length) { - parameters = items.slice(chunkStart, chunkStart + 10000) - parameters.unshift(start, 0) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - chunkStart += 10000 - start += 10000 - } - } -} - -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array<T>} list - * List to operate on. - * @param {Array<T>} items - * Items to add to `list`. - * @returns {Array<T>} - * Either `list` or `items`. - */ -function push(list, items) { - if (list.length > 0) { - splice(list, list.length, 0, items) - return list - } - return items -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - * @typedef {import('micromark-util-types').Handles} Handles - * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension - * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension - */ - - - -const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty - -/** - * Combine multiple syntax extensions into one. - * - * @param {Array<Extension>} extensions - * List of syntax extensions. - * @returns {NormalizedExtension} - * A single combined extension. - */ -function combineExtensions(extensions) { - /** @type {NormalizedExtension} */ - const all = {} - let index = -1 - - while (++index < extensions.length) { - syntaxExtension(all, extensions[index]) - } - - return all -} - -/** - * Merge `extension` into `all`. - * - * @param {NormalizedExtension} all - * Extension to merge into. - * @param {Extension} extension - * Extension to merge. - * @returns {void} - */ -function syntaxExtension(all, extension) { - /** @type {keyof Extension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - /** @type {Record<string, unknown>} */ - const left = maybe || (all[hook] = {}) - /** @type {Record<string, unknown> | undefined} */ - const right = extension[hook] - /** @type {string} */ - let code - - if (right) { - for (code in right) { - if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] - const value = right[code] - constructs( - // @ts-expect-error Looks like a list. - left[code], - Array.isArray(value) ? value : value ? [value] : [] - ) - } - } - } -} - -/** - * Merge `list` into `existing` (both lists of constructs). - * Mutates `existing`. - * - * @param {Array<unknown>} existing - * @param {Array<unknown>} list - * @returns {void} - */ -function constructs(existing, list) { - let index = -1 - /** @type {Array<unknown>} */ - const before = [] - - while (++index < list.length) { - // @ts-expect-error Looks like an object. - ;(list[index].add === 'after' ? existing : before).push(list[index]) - } - - splice(existing, 0, 0, before) -} - -/** - * Combine multiple HTML extensions into one. - * - * @param {Array<HtmlExtension>} htmlExtensions - * List of HTML extensions. - * @returns {HtmlExtension} - * A single combined HTML extension. - */ -function combineHtmlExtensions(htmlExtensions) { - /** @type {HtmlExtension} */ - const handlers = {} - let index = -1 - - while (++index < htmlExtensions.length) { - htmlExtension(handlers, htmlExtensions[index]) - } - - return handlers -} - -/** - * Merge `extension` into `all`. - * - * @param {HtmlExtension} all - * Extension to merge into. - * @param {HtmlExtension} extension - * Extension to merge. - * @returns {void} - */ -function htmlExtension(all, extension) { - /** @type {keyof HtmlExtension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - const left = maybe || (all[hook] = {}) - const right = extension[hook] - /** @type {keyof Handles} */ - let type - - if (right) { - for (type in right) { - // @ts-expect-error assume document vs regular handler are managed correctly. - left[type] = right[type] - } - } - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js -// This module is generated by `script/`. -// -// CommonMark handles attention (emphasis, strong) markers based on what comes -// before or after them. -// One such difference is if those characters are Unicode punctuation. -// This script is generated from the Unicode data. - -/** - * Regular expression that matches a unicode punctuation character. - */ -const unicodePunctuationRegex = - /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - - -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlpha = regexCheck(/[A-Za-z]/) - -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) - -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) - -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function asciiControl(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code !== null && (code < 32 || code === 127) - ) -} - -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiDigit = regexCheck(/\d/) - -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) - -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) - -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEnding(code) { - return code !== null && code < -2 -} - -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEndingOrSpace(code) { - return code !== null && (code < 0 || code === 32) -} - -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownSpace(code) { - return code === -2 || code === -1 || code === 32 -} - -// Size note: removing ASCII from the regex and using `asciiPunctuation` here -// In fact adds to the bundle size. -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodePunctuation = regexCheck(unicodePunctuationRegex) - -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodeWhitespace = regexCheck(/\s/) - -/** - * Create a code check from a regex. - * - * @param {RegExp} regex - * @returns {(code: Code) => boolean} - */ -function regexCheck(regex) { - return check - - /** - * Check whether a code matches the bound regex. - * - * @param {Code} code - * Character code. - * @returns {boolean} - * Whether the character code matches the bound regex. - */ - function check(code) { - return code !== null && regex.test(String.fromCharCode(code)) - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns - * Start state. - */ -function factorySpace(effects, ok, type, max) { - const limit = max ? max - 1 : Number.POSITIVE_INFINITY - let size = 0 - return start - - /** @type {State} */ - function start(code) { - if (markdownSpace(code)) { - effects.enter(type) - return prefix(code) - } - return ok(code) - } - - /** @type {State} */ - function prefix(code) { - if (markdownSpace(code) && size++ < limit) { - effects.consume(code) - return prefix - } - effects.exit(type) - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - -/** @type {InitialConstruct} */ -const content = { - tokenize: initializeContent -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeContent(effects) { - const contentStart = effects.attempt( - this.parser.constructs.contentInitial, - afterContentStartConstruct, - paragraphInitial - ) - /** @type {Token} */ - let previous - return contentStart - - /** @type {State} */ - function afterContentStartConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, contentStart, 'linePrefix') - } - - /** @type {State} */ - function paragraphInitial(code) { - effects.enter('paragraph') - return lineStart(code) - } - - /** @type {State} */ - function lineStart(code) { - const token = effects.enter('chunkText', { - contentType: 'text', - previous - }) - if (previous) { - previous.next = token - } - previous = token - return data(code) - } - - /** @type {State} */ - function data(code) { - if (code === null) { - effects.exit('chunkText') - effects.exit('paragraph') - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - effects.exit('chunkText') - return lineStart - } - - // Data. - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - -/** - * @typedef {[Construct, ContainerState]} StackItem - */ - - - - -/** @type {InitialConstruct} */ -const document_document = { - tokenize: initializeDocument -} - -/** @type {Construct} */ -const containerConstruct = { - tokenize: tokenizeContainer -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeDocument(effects) { - const self = this - /** @type {Array<StackItem>} */ - const stack = [] - let continued = 0 - /** @type {TokenizeContext | undefined} */ - let childFlow - /** @type {Token | undefined} */ - let childToken - /** @type {number} */ - let lineStartOffset - return start - - /** @type {State} */ - function start(code) { - // First we iterate through the open blocks, starting with the root - // document, and descending through last children down to the last open - // block. - // Each block imposes a condition that the line must satisfy if the block is - // to remain open. - // For example, a block quote requires a `>` character. - // A paragraph requires a non-blank line. - // In this phase we may match all or just some of the open blocks. - // But we cannot close unmatched blocks yet, because we may have a lazy - // continuation line. - if (continued < stack.length) { - const item = stack[continued] - self.containerState = item[1] - return effects.attempt( - item[0].continuation, - documentContinue, - checkNewContainers - )(code) - } - - // Done. - return checkNewContainers(code) - } - - /** @type {State} */ - function documentContinue(code) { - continued++ - - // Note: this field is called `_closeFlow` but it also closes containers. - // Perhaps a good idea to rename it but it’s already used in the wild by - // extensions. - if (self.containerState._closeFlow) { - self.containerState._closeFlow = undefined - if (childFlow) { - closeFlow() - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when dealing with lazy lines in `writeToChild`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {Point | undefined} */ - let point - - // Find the flow chunk. - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - point = self.events[indexBeforeFlow][1].end - break - } - } - exitContainers(continued) - - // Fix positions. - let index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - return checkNewContainers(code) - } - return start(code) - } - - /** @type {State} */ - function checkNewContainers(code) { - // Next, after consuming the continuation markers for existing blocks, we - // look for new block starts (e.g. `>` for a block quote). - // If we encounter a new block start, we close any blocks unmatched in - // step 1 before creating the new block as a child of the last matched - // block. - if (continued === stack.length) { - // No need to `check` whether there’s a container, of `exitContainers` - // would be moot. - // We can instead immediately `attempt` to parse one. - if (!childFlow) { - return documentContinued(code) - } - - // If we have concrete content, such as block HTML or fenced code, - // we can’t have containers “pierce” into them, so we can immediately - // start. - if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { - return flowStart(code) - } - - // If we do have flow, it could still be a blank line, - // but we’d be interrupting it w/ a new container if there’s a current - // construct. - // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer - // needed in micromark-extension-gfm-table@1.0.6). - self.interrupt = Boolean( - childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack - ) - } - - // Check if there is a new container. - self.containerState = {} - return effects.check( - containerConstruct, - thereIsANewContainer, - thereIsNoNewContainer - )(code) - } - - /** @type {State} */ - function thereIsANewContainer(code) { - if (childFlow) closeFlow() - exitContainers(continued) - return documentContinued(code) - } - - /** @type {State} */ - function thereIsNoNewContainer(code) { - self.parser.lazy[self.now().line] = continued !== stack.length - lineStartOffset = self.now().offset - return flowStart(code) - } - - /** @type {State} */ - function documentContinued(code) { - // Try new containers. - self.containerState = {} - return effects.attempt( - containerConstruct, - containerContinue, - flowStart - )(code) - } - - /** @type {State} */ - function containerContinue(code) { - continued++ - stack.push([self.currentConstruct, self.containerState]) - // Try another. - return documentContinued(code) - } - - /** @type {State} */ - function flowStart(code) { - if (code === null) { - if (childFlow) closeFlow() - exitContainers(0) - effects.consume(code) - return - } - childFlow = childFlow || self.parser.flow(self.now()) - effects.enter('chunkFlow', { - contentType: 'flow', - previous: childToken, - _tokenizer: childFlow - }) - return flowContinue(code) - } - - /** @type {State} */ - function flowContinue(code) { - if (code === null) { - writeToChild(effects.exit('chunkFlow'), true) - exitContainers(0) - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - writeToChild(effects.exit('chunkFlow')) - // Get ready for the next line. - continued = 0 - self.interrupt = undefined - return start - } - effects.consume(code) - return flowContinue - } - - /** - * @param {Token} token - * @param {boolean | undefined} [eof] - * @returns {void} - */ - function writeToChild(token, eof) { - const stream = self.sliceStream(token) - if (eof) stream.push(null) - token.previous = childToken - if (childToken) childToken.next = token - childToken = token - childFlow.defineSkip(token.start) - childFlow.write(stream) - - // Alright, so we just added a lazy line: - // - // ```markdown - // > a - // b. - // - // Or: - // - // > ~~~c - // d - // - // Or: - // - // > | e | - // f - // ``` - // - // The construct in the second example (fenced code) does not accept lazy - // lines, so it marked itself as done at the end of its first line, and - // then the content construct parses `d`. - // Most constructs in markdown match on the first line: if the first line - // forms a construct, a non-lazy line can’t “unmake” it. - // - // The construct in the third example is potentially a GFM table, and - // those are *weird*. - // It *could* be a table, from the first line, if the following line - // matches a condition. - // In this case, that second line is lazy, which “unmakes” the first line - // and turns the whole into one content block. - // - // We’ve now parsed the non-lazy and the lazy line, and can figure out - // whether the lazy line started a new flow block. - // If it did, we exit the current containers between the two flow blocks. - if (self.parser.lazy[token.start.line]) { - let index = childFlow.events.length - while (index--) { - if ( - // The token starts before the line ending… - childFlow.events[index][1].start.offset < lineStartOffset && - // …and either is not ended yet… - (!childFlow.events[index][1].end || - // …or ends after it. - childFlow.events[index][1].end.offset > lineStartOffset) - ) { - // Exit: there’s still something open, which means it’s a lazy line - // part of something. - return - } - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when closing flow in `documentContinue`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {boolean | undefined} */ - let seen - /** @type {Point | undefined} */ - let point - - // Find the previous chunk (the one before the lazy line). - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - if (seen) { - point = self.events[indexBeforeFlow][1].end - break - } - seen = true - } - } - exitContainers(continued) - - // Fix positions. - index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - } - } - - /** - * @param {number} size - * @returns {void} - */ - function exitContainers(size) { - let index = stack.length - - // Exit open containers. - while (index-- > size) { - const entry = stack[index] - self.containerState = entry[1] - entry[0].exit.call(self, effects) - } - stack.length = size - } - function closeFlow() { - childFlow.write([null]) - childToken = undefined - childFlow = undefined - self.containerState._closeFlow = undefined - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContainer(effects, ok, nok) { - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(this.parser.constructs.document, ok, nok), - 'linePrefix', - this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blankLine = { - tokenize: tokenizeBlankLine, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLine(effects, ok, nok) { - return start - - /** - * Start of blank line. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - return markdownSpace(code) - ? factorySpace(effects, after, 'linePrefix')(code) - : after(code) - } - - /** - * At eof/eol, after optional whitespace. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Token} Token - */ - - -/** - * Tokenize subcontent. - * - * @param {Array<Event>} events - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -function subtokenize(events) { - /** @type {Record<string, number>} */ - const jumps = {} - let index = -1 - /** @type {Event} */ - let event - /** @type {number | undefined} */ - let lineIndex - /** @type {number} */ - let otherIndex - /** @type {Event} */ - let otherEvent - /** @type {Array<Event>} */ - let parameters - /** @type {Array<Event>} */ - let subevents - /** @type {boolean | undefined} */ - let more - while (++index < events.length) { - while (index in jumps) { - index = jumps[index] - } - event = events[index] - - // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. - if ( - index && - event[1].type === 'chunkFlow' && - events[index - 1][1].type === 'listItemPrefix' - ) { - subevents = event[1]._tokenizer.events - otherIndex = 0 - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'lineEndingBlank' - ) { - otherIndex += 2 - } - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'content' - ) { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === 'content') { - break - } - if (subevents[otherIndex][1].type === 'chunkText') { - subevents[otherIndex][1]._isInFirstContentOfListItem = true - otherIndex++ - } - } - } - } - - // Enter. - if (event[0] === 'enter') { - if (event[1].contentType) { - Object.assign(jumps, subcontent(events, index)) - index = jumps[index] - more = true - } - } - // Exit. - else if (event[1]._container) { - otherIndex = index - lineIndex = undefined - while (otherIndex--) { - otherEvent = events[otherIndex] - if ( - otherEvent[1].type === 'lineEnding' || - otherEvent[1].type === 'lineEndingBlank' - ) { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - } - otherEvent[1].type = 'lineEnding' - lineIndex = otherIndex - } - } else { - break - } - } - if (lineIndex) { - // Fix position. - event[1].end = Object.assign({}, events[lineIndex][1].start) - - // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index) - parameters.unshift(event) - splice(events, lineIndex, index - lineIndex + 1, parameters) - } - } - } - return !more -} - -/** - * Tokenize embedded tokens. - * - * @param {Array<Event>} events - * @param {number} eventIndex - * @returns {Record<string, number>} - */ -function subcontent(events, eventIndex) { - const token = events[eventIndex][1] - const context = events[eventIndex][2] - let startPosition = eventIndex - 1 - /** @type {Array<number>} */ - const startPositions = [] - const tokenizer = - token._tokenizer || context.parser[token.contentType](token.start) - const childEvents = tokenizer.events - /** @type {Array<[number, number]>} */ - const jumps = [] - /** @type {Record<string, number>} */ - const gaps = {} - /** @type {Array<Chunk>} */ - let stream - /** @type {Token | undefined} */ - let previous - let index = -1 - /** @type {Token | undefined} */ - let current = token - let adjust = 0 - let start = 0 - const breaks = [start] - - // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. - while (current) { - // Find the position of the event for this token. - while (events[++startPosition][1] !== current) { - // Empty. - } - startPositions.push(startPosition) - if (!current._tokenizer) { - stream = context.sliceStream(current) - if (!current.next) { - stream.push(null) - } - if (previous) { - tokenizer.defineSkip(current.start) - } - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true - } - tokenizer.write(stream) - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined - } - } - - // Unravel the next token. - previous = current - current = current.next - } - - // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. - current = token - while (++index < childEvents.length) { - if ( - // Find a void token that includes a break. - childEvents[index][0] === 'exit' && - childEvents[index - 1][0] === 'enter' && - childEvents[index][1].type === childEvents[index - 1][1].type && - childEvents[index][1].start.line !== childEvents[index][1].end.line - ) { - start = index + 1 - breaks.push(start) - // Help GC. - current._tokenizer = undefined - current.previous = undefined - current = current.next - } - } - - // Help GC. - tokenizer.events = [] - - // If there’s one more token (which is the cases for lines that end in an - // EOF), that’s perfect: the last point we found starts it. - // If there isn’t then make sure any remaining content is added to it. - if (current) { - // Help GC. - current._tokenizer = undefined - current.previous = undefined - } else { - breaks.pop() - } - - // Now splice the events from the subtokenizer into the current events, - // moving back to front so that splice indices aren’t affected. - index = breaks.length - while (index--) { - const slice = childEvents.slice(breaks[index], breaks[index + 1]) - const start = startPositions.pop() - jumps.unshift([start, start + slice.length - 1]) - splice(events, start, 2, slice) - } - index = -1 - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] - adjust += jumps[index][1] - jumps[index][0] - 1 - } - return gaps -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** - * No name because it must not be turned off. - * @type {Construct} - */ -const content_content = { - tokenize: tokenizeContent, - resolve: resolveContent -} - -/** @type {Construct} */ -const continuationConstruct = { - tokenize: tokenizeContinuation, - partial: true -} - -/** - * Content is transparent: it’s parsed right now. That way, definitions are also - * parsed right now: before text in paragraphs (specifically, media) are parsed. - * - * @type {Resolver} - */ -function resolveContent(events) { - subtokenize(events) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContent(effects, ok) { - /** @type {Token | undefined} */ - let previous - return chunkStart - - /** - * Before a content chunk. - * - * ```markdown - * > | abc - * ^ - * ``` - * - * @type {State} - */ - function chunkStart(code) { - effects.enter('content') - previous = effects.enter('chunkContent', { - contentType: 'content' - }) - return chunkInside(code) - } - - /** - * In a content chunk. - * - * ```markdown - * > | abc - * ^^^ - * ``` - * - * @type {State} - */ - function chunkInside(code) { - if (code === null) { - return contentEnd(code) - } - - // To do: in `markdown-rs`, each line is parsed on its own, and everything - // is stitched together resolving. - if (markdownLineEnding(code)) { - return effects.check( - continuationConstruct, - contentContinue, - contentEnd - )(code) - } - - // Data. - effects.consume(code) - return chunkInside - } - - /** - * - * - * @type {State} - */ - function contentEnd(code) { - effects.exit('chunkContent') - effects.exit('content') - return ok(code) - } - - /** - * - * - * @type {State} - */ - function contentContinue(code) { - effects.consume(code) - effects.exit('chunkContent') - previous.next = effects.enter('chunkContent', { - contentType: 'content', - previous - }) - previous = previous.next - return chunkInside - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContinuation(effects, ok, nok) { - const self = this - return startLookahead - - /** - * - * - * @type {State} - */ - function startLookahead(code) { - effects.exit('chunkContent') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, prefixed, 'linePrefix') - } - - /** - * - * - * @type {State} - */ - function prefixed(code) { - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - - // Always populated by defaults. - - const tail = self.events[self.events.length - 1] - if ( - !self.parser.constructs.disable.null.includes('codeIndented') && - tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ) { - return ok(code) - } - return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - - -/** @type {InitialConstruct} */ -const flow = { - tokenize: initializeFlow -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeFlow(effects) { - const self = this - const initial = effects.attempt( - // Try to parse a blank line. - blankLine, - atBlankEnding, - // Try to parse initial flow (essentially, only code). - effects.attempt( - this.parser.constructs.flowInitial, - afterConstruct, - factorySpace( - effects, - effects.attempt( - this.parser.constructs.flow, - afterConstruct, - effects.attempt(content_content, afterConstruct) - ), - 'linePrefix' - ) - ) - ) - return initial - - /** @type {State} */ - function atBlankEnding(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEndingBlank') - effects.consume(code) - effects.exit('lineEndingBlank') - self.currentConstruct = undefined - return initial - } - - /** @type {State} */ - function afterConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - self.currentConstruct = undefined - return initial - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -const resolver = { - resolveAll: createResolver() -} -const string = initializeFactory('string') -const text_text = initializeFactory('text') - -/** - * @param {'string' | 'text'} field - * @returns {InitialConstruct} - */ -function initializeFactory(field) { - return { - tokenize: initializeText, - resolveAll: createResolver( - field === 'text' ? resolveAllLineSuffixes : undefined - ) - } - - /** - * @this {TokenizeContext} - * @type {Initializer} - */ - function initializeText(effects) { - const self = this - const constructs = this.parser.constructs[field] - const text = effects.attempt(constructs, start, notText) - return start - - /** @type {State} */ - function start(code) { - return atBreak(code) ? text(code) : notText(code) - } - - /** @type {State} */ - function notText(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('data') - effects.consume(code) - return data - } - - /** @type {State} */ - function data(code) { - if (atBreak(code)) { - effects.exit('data') - return text(code) - } - - // Data. - effects.consume(code) - return data - } - - /** - * @param {Code} code - * @returns {boolean} - */ - function atBreak(code) { - if (code === null) { - return true - } - const list = constructs[code] - let index = -1 - if (list) { - // Always populated by defaults. - - while (++index < list.length) { - const item = list[index] - if (!item.previous || item.previous.call(self, self.previous)) { - return true - } - } - } - return false - } - } -} - -/** - * @param {Resolver | undefined} [extraResolver] - * @returns {Resolver} - */ -function createResolver(extraResolver) { - return resolveAllText - - /** @type {Resolver} */ - function resolveAllText(events, context) { - let index = -1 - /** @type {number | undefined} */ - let enter - - // A rather boring computation (to merge adjacent `data` events) which - // improves mm performance by 29%. - while (++index <= events.length) { - if (enter === undefined) { - if (events[index] && events[index][1].type === 'data') { - enter = index - index++ - } - } else if (!events[index] || events[index][1].type !== 'data') { - // Don’t do anything if there is one data token. - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - index = enter + 2 - } - enter = undefined - } - } - return extraResolver ? extraResolver(events, context) : events - } -} - -/** - * A rather ugly set of instructions which again looks at chunks in the input - * stream. - * The reason to do this here is that it is *much* faster to parse in reverse. - * And that we can’t hook into `null` to split the line suffix before an EOF. - * To do: figure out if we can make this into a clean utility, or even in core. - * As it will be useful for GFMs literal autolink extension (and maybe even - * tables?) - * - * @type {Resolver} - */ -function resolveAllLineSuffixes(events, context) { - let eventIndex = 0 // Skip first. - - while (++eventIndex <= events.length) { - if ( - (eventIndex === events.length || - events[eventIndex][1].type === 'lineEnding') && - events[eventIndex - 1][1].type === 'data' - ) { - const data = events[eventIndex - 1][1] - const chunks = context.sliceStream(data) - let index = chunks.length - let bufferIndex = -1 - let size = 0 - /** @type {boolean | undefined} */ - let tabs - while (index--) { - const chunk = chunks[index] - if (typeof chunk === 'string') { - bufferIndex = chunk.length - while (chunk.charCodeAt(bufferIndex - 1) === 32) { - size++ - bufferIndex-- - } - if (bufferIndex) break - bufferIndex = -1 - } - // Number - else if (chunk === -2) { - tabs = true - size++ - } else if (chunk === -1) { - // Empty - } else { - // Replacement character, exit. - index++ - break - } - } - if (size) { - const token = { - type: - eventIndex === events.length || tabs || size < 2 - ? 'lineSuffix' - : 'hardBreakTrailing', - start: { - line: data.end.line, - column: data.end.column - size, - offset: data.end.offset - size, - _index: data.start._index + index, - _bufferIndex: index - ? bufferIndex - : data.start._bufferIndex + bufferIndex - }, - end: Object.assign({}, data.end) - } - data.end = Object.assign({}, token.start) - if (data.start.offset === data.end.offset) { - Object.assign(data, token) - } else { - events.splice( - eventIndex, - 0, - ['enter', token, context], - ['exit', token, context] - ) - eventIndex += 2 - } - } - eventIndex++ - } - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js -/** - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * Call all `resolveAll`s. - * - * @param {Array<{resolveAll?: Resolver | undefined}>} constructs - * List of constructs, optionally with `resolveAll`s. - * @param {Array<Event>} events - * List of events. - * @param {TokenizeContext} context - * Context used by `tokenize`. - * @returns {Array<Event>} - * Changed events. - */ -function resolveAll(constructs, events, context) { - /** @type {Array<Resolver>} */ - const called = [] - let index = -1 - - while (++index < constructs.length) { - const resolve = constructs[index].resolveAll - - if (resolve && !called.includes(resolve)) { - events = resolve(events, context) - called.push(resolve) - } - } - - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenType} TokenType - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * @callback Restore - * @returns {void} - * - * @typedef Info - * @property {Restore} restore - * @property {number} from - * - * @callback ReturnHandle - * Handle a successful run. - * @param {Construct} construct - * @param {Info} info - * @returns {void} - */ - - - - -/** - * Create a tokenizer. - * Tokenizers deal with one type of data (e.g., containers, flow, text). - * The parser is the object dealing with it all. - * `initialize` works like other constructs, except that only its `tokenize` - * function is used, in which case it doesn’t receive an `ok` or `nok`. - * `from` can be given to set the point before the first character, although - * when further lines are indented, they must be set with `defineSkip`. - * - * @param {ParseContext} parser - * @param {InitialConstruct} initialize - * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] - * @returns {TokenizeContext} - */ -function createTokenizer(parser, initialize, from) { - /** @type {Point} */ - let point = Object.assign( - from - ? Object.assign({}, from) - : { - line: 1, - column: 1, - offset: 0 - }, - { - _index: 0, - _bufferIndex: -1 - } - ) - /** @type {Record<string, number>} */ - const columnStart = {} - /** @type {Array<Construct>} */ - const resolveAllConstructs = [] - /** @type {Array<Chunk>} */ - let chunks = [] - /** @type {Array<Token>} */ - let stack = [] - /** @type {boolean | undefined} */ - let consumed = true - - /** - * Tools used for tokenizing. - * - * @type {Effects} - */ - const effects = { - consume, - enter, - exit, - attempt: constructFactory(onsuccessfulconstruct), - check: constructFactory(onsuccessfulcheck), - interrupt: constructFactory(onsuccessfulcheck, { - interrupt: true - }) - } - - /** - * State and tools for resolving and serializing. - * - * @type {TokenizeContext} - */ - const context = { - previous: null, - code: null, - containerState: {}, - events: [], - parser, - sliceStream, - sliceSerialize, - now, - defineSkip, - write - } - - /** - * The state function. - * - * @type {State | void} - */ - let state = initialize.tokenize.call(context, effects) - - /** - * Track which character we expect to be consumed, to catch bugs. - * - * @type {Code} - */ - let expectedCode - if (initialize.resolveAll) { - resolveAllConstructs.push(initialize) - } - return context - - /** @type {TokenizeContext['write']} */ - function write(slice) { - chunks = push(chunks, slice) - main() - - // Exit if we’re not done, resolve might change stuff. - if (chunks[chunks.length - 1] !== null) { - return [] - } - addResult(initialize, 0) - - // Otherwise, resolve, and exit. - context.events = resolveAll(resolveAllConstructs, context.events, context) - return context.events - } - - // - // Tools. - // - - /** @type {TokenizeContext['sliceSerialize']} */ - function sliceSerialize(token, expandTabs) { - return serializeChunks(sliceStream(token), expandTabs) - } - - /** @type {TokenizeContext['sliceStream']} */ - function sliceStream(token) { - return sliceChunks(chunks, token) - } - - /** @type {TokenizeContext['now']} */ - function now() { - // This is a hot path, so we clone manually instead of `Object.assign({}, point)` - const {line, column, offset, _index, _bufferIndex} = point - return { - line, - column, - offset, - _index, - _bufferIndex - } - } - - /** @type {TokenizeContext['defineSkip']} */ - function defineSkip(value) { - columnStart[value.line] = value.column - accountForPotentialSkip() - } - - // - // State management. - // - - /** - * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by - * `consume`). - * Here is where we walk through the chunks, which either include strings of - * several characters, or numerical character codes. - * The reason to do this in a loop instead of a call is so the stack can - * drain. - * - * @returns {void} - */ - function main() { - /** @type {number} */ - let chunkIndex - while (point._index < chunks.length) { - const chunk = chunks[point._index] - - // If we’re in a buffer chunk, loop through it. - if (typeof chunk === 'string') { - chunkIndex = point._index - if (point._bufferIndex < 0) { - point._bufferIndex = 0 - } - while ( - point._index === chunkIndex && - point._bufferIndex < chunk.length - ) { - go(chunk.charCodeAt(point._bufferIndex)) - } - } else { - go(chunk) - } - } - } - - /** - * Deal with one code. - * - * @param {Code} code - * @returns {void} - */ - function go(code) { - consumed = undefined - expectedCode = code - state = state(code) - } - - /** @type {Effects['consume']} */ - function consume(code) { - if (markdownLineEnding(code)) { - point.line++ - point.column = 1 - point.offset += code === -3 ? 2 : 1 - accountForPotentialSkip() - } else if (code !== -1) { - point.column++ - point.offset++ - } - - // Not in a string chunk. - if (point._bufferIndex < 0) { - point._index++ - } else { - point._bufferIndex++ - - // At end of string chunk. - // @ts-expect-error Points w/ non-negative `_bufferIndex` reference - // strings. - if (point._bufferIndex === chunks[point._index].length) { - point._bufferIndex = -1 - point._index++ - } - } - - // Expose the previous character. - context.previous = code - - // Mark as consumed. - consumed = true - } - - /** @type {Effects['enter']} */ - function enter(type, fields) { - /** @type {Token} */ - // @ts-expect-error Patch instead of assign required fields to help GC. - const token = fields || {} - token.type = type - token.start = now() - context.events.push(['enter', token, context]) - stack.push(token) - return token - } - - /** @type {Effects['exit']} */ - function exit(type) { - const token = stack.pop() - token.end = now() - context.events.push(['exit', token, context]) - return token - } - - /** - * Use results. - * - * @type {ReturnHandle} - */ - function onsuccessfulconstruct(construct, info) { - addResult(construct, info.from) - } - - /** - * Discard results. - * - * @type {ReturnHandle} - */ - function onsuccessfulcheck(_, info) { - info.restore() - } - - /** - * Factory to attempt/check/interrupt. - * - * @param {ReturnHandle} onreturn - * @param {{interrupt?: boolean | undefined} | undefined} [fields] - */ - function constructFactory(onreturn, fields) { - return hook - - /** - * Handle either an object mapping codes to constructs, a list of - * constructs, or a single construct. - * - * @param {Array<Construct> | Construct | ConstructRecord} constructs - * @param {State} returnState - * @param {State | undefined} [bogusState] - * @returns {State} - */ - function hook(constructs, returnState, bogusState) { - /** @type {Array<Construct>} */ - let listOfConstructs - /** @type {number} */ - let constructIndex - /** @type {Construct} */ - let currentConstruct - /** @type {Info} */ - let info - return Array.isArray(constructs) /* c8 ignore next 1 */ - ? handleListOfConstructs(constructs) - : 'tokenize' in constructs - ? // @ts-expect-error Looks like a construct. - handleListOfConstructs([constructs]) - : handleMapOfConstructs(constructs) - - /** - * Handle a list of construct. - * - * @param {ConstructRecord} map - * @returns {State} - */ - function handleMapOfConstructs(map) { - return start - - /** @type {State} */ - function start(code) { - const def = code !== null && map[code] - const all = code !== null && map.null - const list = [ - // To do: add more extension tests. - /* c8 ignore next 2 */ - ...(Array.isArray(def) ? def : def ? [def] : []), - ...(Array.isArray(all) ? all : all ? [all] : []) - ] - return handleListOfConstructs(list)(code) - } - } - - /** - * Handle a list of construct. - * - * @param {Array<Construct>} list - * @returns {State} - */ - function handleListOfConstructs(list) { - listOfConstructs = list - constructIndex = 0 - if (list.length === 0) { - return bogusState - } - return handleConstruct(list[constructIndex]) - } - - /** - * Handle a single construct. - * - * @param {Construct} construct - * @returns {State} - */ - function handleConstruct(construct) { - return start - - /** @type {State} */ - function start(code) { - // To do: not needed to store if there is no bogus state, probably? - // Currently doesn’t work because `inspect` in document does a check - // w/o a bogus, which doesn’t make sense. But it does seem to help perf - // by not storing. - info = store() - currentConstruct = construct - if (!construct.partial) { - context.currentConstruct = construct - } - - // Always populated by defaults. - - if ( - construct.name && - context.parser.constructs.disable.null.includes(construct.name) - ) { - return nok(code) - } - return construct.tokenize.call( - // If we do have fields, create an object w/ `context` as its - // prototype. - // This allows a “live binding”, which is needed for `interrupt`. - fields ? Object.assign(Object.create(context), fields) : context, - effects, - ok, - nok - )(code) - } - } - - /** @type {State} */ - function ok(code) { - consumed = true - onreturn(currentConstruct, info) - return returnState - } - - /** @type {State} */ - function nok(code) { - consumed = true - info.restore() - if (++constructIndex < listOfConstructs.length) { - return handleConstruct(listOfConstructs[constructIndex]) - } - return bogusState - } - } - } - - /** - * @param {Construct} construct - * @param {number} from - * @returns {void} - */ - function addResult(construct, from) { - if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { - resolveAllConstructs.push(construct) - } - if (construct.resolve) { - splice( - context.events, - from, - context.events.length - from, - construct.resolve(context.events.slice(from), context) - ) - } - if (construct.resolveTo) { - context.events = construct.resolveTo(context.events, context) - } - } - - /** - * Store state. - * - * @returns {Info} - */ - function store() { - const startPoint = now() - const startPrevious = context.previous - const startCurrentConstruct = context.currentConstruct - const startEventsIndex = context.events.length - const startStack = Array.from(stack) - return { - restore, - from: startEventsIndex - } - - /** - * Restore state. - * - * @returns {void} - */ - function restore() { - point = startPoint - context.previous = startPrevious - context.currentConstruct = startCurrentConstruct - context.events.length = startEventsIndex - stack = startStack - accountForPotentialSkip() - } - } - - /** - * Move the current point a bit forward in the line when it’s on a column - * skip. - * - * @returns {void} - */ - function accountForPotentialSkip() { - if (point.line in columnStart && point.column < 2) { - point.column = columnStart[point.line] - point.offset += columnStart[point.line] - 1 - } - } -} - -/** - * Get the chunks from a slice of chunks in the range of a token. - * - * @param {Array<Chunk>} chunks - * @param {Pick<Token, 'end' | 'start'>} token - * @returns {Array<Chunk>} - */ -function sliceChunks(chunks, token) { - const startIndex = token.start._index - const startBufferIndex = token.start._bufferIndex - const endIndex = token.end._index - const endBufferIndex = token.end._bufferIndex - /** @type {Array<Chunk>} */ - let view - if (startIndex === endIndex) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] - } else { - view = chunks.slice(startIndex, endIndex) - if (startBufferIndex > -1) { - const head = view[0] - if (typeof head === 'string') { - view[0] = head.slice(startBufferIndex) - } else { - view.shift() - } - } - if (endBufferIndex > 0) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view.push(chunks[endIndex].slice(0, endBufferIndex)) - } - } - return view -} - -/** - * Get the string value of a slice of chunks. - * - * @param {Array<Chunk>} chunks - * @param {boolean | undefined} [expandTabs=false] - * @returns {string} - */ -function serializeChunks(chunks, expandTabs) { - let index = -1 - /** @type {Array<string>} */ - const result = [] - /** @type {boolean | undefined} */ - let atTab - while (++index < chunks.length) { - const chunk = chunks[index] - /** @type {string} */ - let value - if (typeof chunk === 'string') { - value = chunk - } else - switch (chunk) { - case -5: { - value = '\r' - break - } - case -4: { - value = '\n' - break - } - case -3: { - value = '\r' + '\n' - break - } - case -2: { - value = expandTabs ? ' ' : '\t' - break - } - case -1: { - if (!expandTabs && atTab) continue - value = ' ' - break - } - default: { - // Currently only replacement character. - value = String.fromCharCode(chunk) - } - } - atTab = chunk === -2 - result.push(value) - } - return result.join('') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const thematicBreak = { - name: 'thematicBreak', - tokenize: tokenizeThematicBreak -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeThematicBreak(effects, ok, nok) { - let size = 0 - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of thematic break. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('thematicBreak') - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * After optional whitespace, at marker. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - marker = code - return atBreak(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.enter('thematicBreakSequence') - return sequence(code) - } - if (size >= 3 && (code === null || markdownLineEnding(code))) { - effects.exit('thematicBreak') - return ok(code) - } - return nok(code) - } - - /** - * In sequence. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function sequence(code) { - if (code === marker) { - effects.consume(code) - size++ - return sequence - } - effects.exit('thematicBreakSequence') - return markdownSpace(code) - ? factorySpace(effects, atBreak, 'whitespace')(code) - : atBreak(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - -/** @type {Construct} */ -const list = { - name: 'list', - tokenize: tokenizeListStart, - continuation: { - tokenize: tokenizeListContinuation - }, - exit: tokenizeListEnd -} - -/** @type {Construct} */ -const listItemPrefixWhitespaceConstruct = { - tokenize: tokenizeListItemPrefixWhitespace, - partial: true -} - -/** @type {Construct} */ -const indentConstruct = { - tokenize: tokenizeIndent, - partial: true -} - -// To do: `markdown-rs` parses list items on their own and later stitches them -// together. - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListStart(effects, ok, nok) { - const self = this - const tail = self.events[self.events.length - 1] - let initialSize = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - let size = 0 - return start - - /** @type {State} */ - function start(code) { - const kind = - self.containerState.type || - (code === 42 || code === 43 || code === 45 - ? 'listUnordered' - : 'listOrdered') - if ( - kind === 'listUnordered' - ? !self.containerState.marker || code === self.containerState.marker - : asciiDigit(code) - ) { - if (!self.containerState.type) { - self.containerState.type = kind - effects.enter(kind, { - _container: true - }) - } - if (kind === 'listUnordered') { - effects.enter('listItemPrefix') - return code === 42 || code === 45 - ? effects.check(thematicBreak, nok, atMarker)(code) - : atMarker(code) - } - if (!self.interrupt || code === 49) { - effects.enter('listItemPrefix') - effects.enter('listItemValue') - return inside(code) - } - } - return nok(code) - } - - /** @type {State} */ - function inside(code) { - if (asciiDigit(code) && ++size < 10) { - effects.consume(code) - return inside - } - if ( - (!self.interrupt || size < 2) && - (self.containerState.marker - ? code === self.containerState.marker - : code === 41 || code === 46) - ) { - effects.exit('listItemValue') - return atMarker(code) - } - return nok(code) - } - - /** - * @type {State} - **/ - function atMarker(code) { - effects.enter('listItemMarker') - effects.consume(code) - effects.exit('listItemMarker') - self.containerState.marker = self.containerState.marker || code - return effects.check( - blankLine, - // Can’t be empty when interrupting. - self.interrupt ? nok : onBlank, - effects.attempt( - listItemPrefixWhitespaceConstruct, - endOfPrefix, - otherPrefix - ) - ) - } - - /** @type {State} */ - function onBlank(code) { - self.containerState.initialBlankLine = true - initialSize++ - return endOfPrefix(code) - } - - /** @type {State} */ - function otherPrefix(code) { - if (markdownSpace(code)) { - effects.enter('listItemPrefixWhitespace') - effects.consume(code) - effects.exit('listItemPrefixWhitespace') - return endOfPrefix - } - return nok(code) - } - - /** @type {State} */ - function endOfPrefix(code) { - self.containerState.size = - initialSize + - self.sliceSerialize(effects.exit('listItemPrefix'), true).length - return ok(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListContinuation(effects, ok, nok) { - const self = this - self.containerState._closeFlow = undefined - return effects.check(blankLine, onBlank, notBlank) - - /** @type {State} */ - function onBlank(code) { - self.containerState.furtherBlankLines = - self.containerState.furtherBlankLines || - self.containerState.initialBlankLine - - // We have a blank line. - // Still, try to consume at most the items size. - return factorySpace( - effects, - ok, - 'listItemIndent', - self.containerState.size + 1 - )(code) - } - - /** @type {State} */ - function notBlank(code) { - if (self.containerState.furtherBlankLines || !markdownSpace(code)) { - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return notInCurrentItem(code) - } - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) - } - - /** @type {State} */ - function notInCurrentItem(code) { - // While we do continue, we signal that the flow should be closed. - self.containerState._closeFlow = true - // As we’re closing flow, we’re no longer interrupting. - self.interrupt = undefined - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(list, ok, nok), - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeIndent(effects, ok, nok) { - const self = this - return factorySpace( - effects, - afterPrefix, - 'listItemIndent', - self.containerState.size + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'listItemIndent' && - tail[2].sliceSerialize(tail[1], true).length === self.containerState.size - ? ok(code) - : nok(code) - } -} - -/** - * @type {Exiter} - * @this {TokenizeContext} - */ -function tokenizeListEnd(effects) { - effects.exit(this.containerState.type) -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListItemPrefixWhitespace(effects, ok, nok) { - const self = this - - // Always populated by defaults. - - return factorySpace( - effects, - afterPrefix, - 'listItemPrefixWhitespace', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return !markdownSpace(code) && - tail && - tail[1].type === 'listItemPrefixWhitespace' - ? ok(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blockQuote = { - name: 'blockQuote', - tokenize: tokenizeBlockQuoteStart, - continuation: { - tokenize: tokenizeBlockQuoteContinuation - }, - exit -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteStart(effects, ok, nok) { - const self = this - return start - - /** - * Start of block quote. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 62) { - const state = self.containerState - if (!state.open) { - effects.enter('blockQuote', { - _container: true - }) - state.open = true - } - effects.enter('blockQuotePrefix') - effects.enter('blockQuoteMarker') - effects.consume(code) - effects.exit('blockQuoteMarker') - return after - } - return nok(code) - } - - /** - * After `>`, before optional whitespace. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownSpace(code)) { - effects.enter('blockQuotePrefixWhitespace') - effects.consume(code) - effects.exit('blockQuotePrefixWhitespace') - effects.exit('blockQuotePrefix') - return ok - } - effects.exit('blockQuotePrefix') - return ok(code) - } -} - -/** - * Start of block quote continuation. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteContinuation(effects, ok, nok) { - const self = this - return contStart - - /** - * Start of block quote continuation. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contStart(code) { - if (markdownSpace(code)) { - // Always populated by defaults. - - return factorySpace( - effects, - contBefore, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } - return contBefore(code) - } - - /** - * At `>`, after optional whitespace. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contBefore(code) { - return effects.attempt(blockQuote, ok, nok)(code) - } -} - -/** @type {Exiter} */ -function exit(effects) { - effects.exit('blockQuote') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * <a> - * <a\>b> - * <a b> - * <a)> - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`<a>` or `b`). - * @param {TokenType} literalType - * Type when enclosed (`<a>`). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryDestination( - effects, - ok, - nok, - type, - literalType, - literalMarkerType, - rawType, - stringType, - max -) { - const limit = max || Number.POSITIVE_INFINITY - let balance = 0 - return start - - /** - * Start of destination. - * - * ```markdown - * > | <aa> - * ^ - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 60) { - effects.enter(type) - effects.enter(literalType) - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - return enclosedBefore - } - - // ASCII control, space, closing paren. - if (code === null || code === 32 || code === 41 || asciiControl(code)) { - return nok(code) - } - effects.enter(type) - effects.enter(rawType) - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return raw(code) - } - - /** - * After `<`, at an enclosed destination. - * - * ```markdown - * > | <aa> - * ^ - * ``` - * - * @type {State} - */ - function enclosedBefore(code) { - if (code === 62) { - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - effects.exit(literalType) - effects.exit(type) - return ok - } - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return enclosed(code) - } - - /** - * In enclosed destination. - * - * ```markdown - * > | <aa> - * ^ - * ``` - * - * @type {State} - */ - function enclosed(code) { - if (code === 62) { - effects.exit('chunkString') - effects.exit(stringType) - return enclosedBefore(code) - } - if (code === null || code === 60 || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? enclosedEscape : enclosed - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | <a\*a> - * ^ - * ``` - * - * @type {State} - */ - function enclosedEscape(code) { - if (code === 60 || code === 62 || code === 92) { - effects.consume(code) - return enclosed - } - return enclosed(code) - } - - /** - * In raw destination. - * - * ```markdown - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function raw(code) { - if ( - !balance && - (code === null || code === 41 || markdownLineEndingOrSpace(code)) - ) { - effects.exit('chunkString') - effects.exit(stringType) - effects.exit(rawType) - effects.exit(type) - return ok(code) - } - if (balance < limit && code === 40) { - effects.consume(code) - balance++ - return raw - } - if (code === 41) { - effects.consume(code) - balance-- - return raw - } - - // ASCII control (but *not* `\0`) and space and `(`. - // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it - // doesn’t. - if (code === null || code === 32 || code === 40 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? rawEscape : raw - } - - /** - * After `\`, at special character. - * - * ```markdown - * > | a\*a - * ^ - * ``` - * - * @type {State} - */ - function rawEscape(code) { - if (code === 40 || code === 41 || code === 92) { - effects.consume(code) - return raw - } - return raw(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryLabel(effects, ok, nok, type, markerType, stringType) { - const self = this - let size = 0 - /** @type {boolean} */ - let seen - return start - - /** - * Start of label. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.enter(stringType) - return atBreak - } - - /** - * In label, at something, before something else. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if ( - size > 999 || - code === null || - code === 91 || - (code === 93 && !seen) || - // To do: remove in the future once we’ve switched from - // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, - // which doesn’t need this. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - (code === 94 && - !size && - '_hiddenFootnoteSupport' in self.parser.constructs) - ) { - return nok(code) - } - if (code === 93) { - effects.exit(stringType) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - - // To do: indent? Link chunks and EOLs together? - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return atBreak - } - effects.enter('chunkString', { - contentType: 'string' - }) - return labelInside(code) - } - - /** - * In label, in text. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function labelInside(code) { - if ( - code === null || - code === 91 || - code === 93 || - markdownLineEnding(code) || - size++ > 999 - ) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - if (!seen) seen = !markdownSpace(code) - return code === 92 ? labelEscape : labelInside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | [a\*a] - * ^ - * ``` - * - * @type {State} - */ - function labelEscape(code) { - if (code === 91 || code === 92 || code === 93) { - effects.consume(code) - size++ - return labelInside - } - return labelInside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryTitle(effects, ok, nok, type, markerType, stringType) { - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of title. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 34 || code === 39 || code === 40) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - marker = code === 40 ? 41 : code - return begin - } - return nok(code) - } - - /** - * After opening marker. - * - * This is also used at the closing marker. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function begin(code) { - if (code === marker) { - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - effects.enter(stringType) - return atBreak(code) - } - - /** - * At something, before something else. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.exit(stringType) - return begin(marker) - } - if (code === null) { - return nok(code) - } - - // Note: blank lines can’t exist in content. - if (markdownLineEnding(code)) { - // To do: use `space_or_tab_eol_with_options`, connect. - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, atBreak, 'linePrefix') - } - effects.enter('chunkString', { - contentType: 'string' - }) - return inside(code) - } - - /** - * - * - * @type {State} - */ - function inside(code) { - if (code === marker || code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - return code === 92 ? escape : inside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | "a\*b" - * ^ - * ``` - * - * @type {State} - */ - function escape(code) { - if (code === marker || code === 92) { - effects.consume(code) - return inside - } - return inside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - */ - - - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns - * Start state. - */ -function factoryWhitespace(effects, ok) { - /** @type {boolean} */ - let seen - return start - - /** @type {State} */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - seen = true - return start - } - if (markdownSpace(code)) { - return factorySpace( - effects, - start, - seen ? 'linePrefix' : 'lineSuffix' - )(code) - } - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -function normalizeIdentifier(value) { - return ( - value - // Collapse markdown whitespace. - .replace(/[\t\n\r ]+/g, ' ') - // Trim. - .replace(/^ | $/g, '') - // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase() - .toUpperCase() - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - -/** @type {Construct} */ -const definition = { - name: 'definition', - tokenize: tokenizeDefinition -} - -/** @type {Construct} */ -const titleBefore = { - tokenize: tokenizeTitleBefore, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeDefinition(effects, ok, nok) { - const self = this - /** @type {string} */ - let identifier - return start - - /** - * At start of a definition. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Do not interrupt paragraphs (but do follow definitions). - // To do: do `interrupt` the way `markdown-rs` does. - // To do: parse whitespace the way `markdown-rs` does. - effects.enter('definition') - return before(code) - } - - /** - * After optional whitespace, at `[`. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - // To do: parse whitespace the way `markdown-rs` does. - - return factoryLabel.call( - self, - effects, - labelAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionLabel', - 'definitionLabelMarker', - 'definitionLabelString' - )(code) - } - - /** - * After label. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function labelAfter(code) { - identifier = normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - if (code === 58) { - effects.enter('definitionMarker') - effects.consume(code) - effects.exit('definitionMarker') - return markerAfter - } - return nok(code) - } - - /** - * After marker. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function markerAfter(code) { - // Note: whitespace is optional. - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, destinationBefore)(code) - : destinationBefore(code) - } - - /** - * Before destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationBefore(code) { - return factoryDestination( - effects, - destinationAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionDestination', - 'definitionDestinationLiteral', - 'definitionDestinationLiteralMarker', - 'definitionDestinationRaw', - 'definitionDestinationString' - )(code) - } - - /** - * After destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationAfter(code) { - return effects.attempt(titleBefore, after, after)(code) - } - - /** - * After definition. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return markdownSpace(code) - ? factorySpace(effects, afterWhitespace, 'whitespace')(code) - : afterWhitespace(code) - } - - /** - * After definition, after optional whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function afterWhitespace(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('definition') - - // Note: we don’t care about uniqueness. - // It’s likely that that doesn’t happen very frequently. - // It is more likely that it wastes precious time. - self.parser.defined.push(identifier) - - // To do: `markdown-rs` interrupt. - // // You’d be interrupting. - // tokenizer.interrupt = true - return ok(code) - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeTitleBefore(effects, ok, nok) { - return titleBefore - - /** - * After destination, at whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, beforeMarker)(code) - : nok(code) - } - - /** - * At title. - * - * ```markdown - * | [a]: b - * > | "c" - * ^ - * ``` - * - * @type {State} - */ - function beforeMarker(code) { - return factoryTitle( - effects, - titleAfter, - nok, - 'definitionTitle', - 'definitionTitleMarker', - 'definitionTitleString' - )(code) - } - - /** - * After title. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfter(code) { - return markdownSpace(code) - ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) - : titleAfterOptionalWhitespace(code) - } - - /** - * After title, after optional whitespace. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfterOptionalWhitespace(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const codeIndented = { - name: 'codeIndented', - tokenize: tokenizeCodeIndented -} - -/** @type {Construct} */ -const furtherStart = { - tokenize: tokenizeFurtherStart, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeIndented(effects, ok, nok) { - const self = this - return start - - /** - * Start of code (indented). - * - * > **Parsing note**: it is not needed to check if this first line is a - * > filled line (that it has a non-whitespace character), because blank lines - * > are parsed already, so we never run into that. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: manually check if interrupting like `markdown-rs`. - - effects.enter('codeIndented') - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? atBreak(code) - : nok(code) - } - - /** - * At a break. - * - * ```markdown - * > | aaa - * ^ ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === null) { - return after(code) - } - if (markdownLineEnding(code)) { - return effects.attempt(furtherStart, atBreak, after)(code) - } - effects.enter('codeFlowValue') - return inside(code) - } - - /** - * In code content. - * - * ```markdown - * > | aaa - * ^^^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return atBreak(code) - } - effects.consume(code) - return inside - } - - /** @type {State} */ - function after(code) { - effects.exit('codeIndented') - // To do: allow interrupting like `markdown-rs`. - // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeFurtherStart(effects, ok, nok) { - const self = this - return furtherStart - - /** - * At eol, trying to parse another indent. - * - * ```markdown - * > | aaa - * ^ - * | bbb - * ``` - * - * @type {State} - */ - function furtherStart(code) { - // To do: improve `lazy` / `pierce` handling. - // If this is a lazy line, it can’t be code. - if (self.parser.lazy[self.now().line]) { - return nok(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return furtherStart - } - - // To do: the code here in `micromark-js` is a bit different from - // `markdown-rs` because there it can attempt spaces. - // We can’t yet. - // - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? ok(code) - : markdownLineEnding(code) - ? furtherStart(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const headingAtx = { - name: 'headingAtx', - tokenize: tokenizeHeadingAtx, - resolve: resolveHeadingAtx -} - -/** @type {Resolver} */ -function resolveHeadingAtx(events, context) { - let contentEnd = events.length - 2 - let contentStart = 3 - /** @type {Token} */ - let content - /** @type {Token} */ - let text - - // Prefix whitespace, part of the opening. - if (events[contentStart][1].type === 'whitespace') { - contentStart += 2 - } - - // Suffix whitespace, part of the closing. - if ( - contentEnd - 2 > contentStart && - events[contentEnd][1].type === 'whitespace' - ) { - contentEnd -= 2 - } - if ( - events[contentEnd][1].type === 'atxHeadingSequence' && - (contentStart === contentEnd - 1 || - (contentEnd - 4 > contentStart && - events[contentEnd - 2][1].type === 'whitespace')) - ) { - contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 - } - if (contentEnd > contentStart) { - content = { - type: 'atxHeadingText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end - } - text = { - type: 'chunkText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end, - contentType: 'text' - } - splice(events, contentStart, contentEnd - contentStart + 1, [ - ['enter', content, context], - ['enter', text, context], - ['exit', text, context], - ['exit', content, context] - ]) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHeadingAtx(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of a heading (atx). - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - effects.enter('atxHeading') - return before(code) - } - - /** - * After optional whitespace, at `#`. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('atxHeadingSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 35 && size++ < 6) { - effects.consume(code) - return sequenceOpen - } - - // Always at least one `#`. - if (code === null || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingSequence') - return atBreak(code) - } - return nok(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === 35) { - effects.enter('atxHeadingSequence') - return sequenceFurther(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('atxHeading') - // To do: interrupt like `markdown-rs`. - // // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } - if (markdownSpace(code)) { - return factorySpace(effects, atBreak, 'whitespace')(code) - } - - // To do: generate `data` tokens, add the `text` token later. - // Needs edit map, see: `markdown.rs`. - effects.enter('atxHeadingText') - return data(code) - } - - /** - * In further sequence (after whitespace). - * - * Could be normal “visible” hashes in the heading or a final sequence. - * - * ```markdown - * > | ## aa ## - * ^ - * ``` - * - * @type {State} - */ - function sequenceFurther(code) { - if (code === 35) { - effects.consume(code) - return sequenceFurther - } - effects.exit('atxHeadingSequence') - return atBreak(code) - } - - /** - * In text. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingText') - return atBreak(code) - } - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const setextUnderline = { - name: 'setextUnderline', - tokenize: tokenizeSetextUnderline, - resolveTo: resolveToSetextUnderline -} - -/** @type {Resolver} */ -function resolveToSetextUnderline(events, context) { - // To do: resolve like `markdown-rs`. - let index = events.length - /** @type {number | undefined} */ - let content - /** @type {number | undefined} */ - let text - /** @type {number | undefined} */ - let definition - - // Find the opening of the content. - // It’ll always exist: we don’t tokenize if it isn’t there. - while (index--) { - if (events[index][0] === 'enter') { - if (events[index][1].type === 'content') { - content = index - break - } - if (events[index][1].type === 'paragraph') { - text = index - } - } - // Exit - else { - if (events[index][1].type === 'content') { - // Remove the content end (if needed we’ll add it later) - events.splice(index, 1) - } - if (!definition && events[index][1].type === 'definition') { - definition = index - } - } - } - const heading = { - type: 'setextHeading', - start: Object.assign({}, events[text][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - - // Change the paragraph to setext heading text. - events[text][1].type = 'setextHeadingText' - - // If we have definitions in the content, we’ll keep on having content, - // but we need move it. - if (definition) { - events.splice(text, 0, ['enter', heading, context]) - events.splice(definition + 1, 0, ['exit', events[content][1], context]) - events[content][1].end = Object.assign({}, events[definition][1].end) - } else { - events[content][1] = heading - } - - // Add the heading exit at the end. - events.push(['exit', heading, context]) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeSetextUnderline(effects, ok, nok) { - const self = this - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * At start of heading (setext) underline. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - let index = self.events.length - /** @type {boolean | undefined} */ - let paragraph - // Find an opening. - while (index--) { - // Skip enter/exit of line ending, line prefix, and content. - // We can now either have a definition or a paragraph. - if ( - self.events[index][1].type !== 'lineEnding' && - self.events[index][1].type !== 'linePrefix' && - self.events[index][1].type !== 'content' - ) { - paragraph = self.events[index][1].type === 'paragraph' - break - } - } - - // To do: handle lazy/pierce like `markdown-rs`. - // To do: parse indent like `markdown-rs`. - if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { - effects.enter('setextHeadingLine') - marker = code - return before(code) - } - return nok(code) - } - - /** - * After optional whitespace, at `-` or `=`. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('setextHeadingLineSequence') - return inside(code) - } - - /** - * In sequence. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - effects.exit('setextHeadingLineSequence') - return markdownSpace(code) - ? factorySpace(effects, after, 'lineSuffix')(code) - : after(code) - } - - /** - * After sequence, after optional whitespace. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('setextHeadingLine') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js -/** - * List of lowercase HTML “block” tag names. - * - * The list, when parsing HTML (flow), results in more relaxed rules (condition - * 6). - * Because they are known blocks, the HTML-like syntax doesn’t have to be - * strictly parsed. - * For tag names not in this list, a more strict algorithm (condition 7) is used - * to detect whether the HTML-like syntax is seen as HTML (flow) or not. - * - * This is copied from: - * <https://spec.commonmark.org/0.30/#html-blocks>. - * - * > 👉 **Note**: `search` was added in `CommonMark@0.31`. - */ -const htmlBlockNames = [ - 'address', - 'article', - 'aside', - 'base', - 'basefont', - 'blockquote', - 'body', - 'caption', - 'center', - 'col', - 'colgroup', - 'dd', - 'details', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'frame', - 'frameset', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hr', - 'html', - 'iframe', - 'legend', - 'li', - 'link', - 'main', - 'menu', - 'menuitem', - 'nav', - 'noframes', - 'ol', - 'optgroup', - 'option', - 'p', - 'param', - 'search', - 'section', - 'summary', - 'table', - 'tbody', - 'td', - 'tfoot', - 'th', - 'thead', - 'title', - 'tr', - 'track', - 'ul' -] - -/** - * List of lowercase HTML “raw” tag names. - * - * The list, when parsing HTML (flow), results in HTML that can include lines - * without exiting, until a closing tag also in this list is found (condition - * 1). - * - * This module is copied from: - * <https://spec.commonmark.org/0.30/#html-blocks>. - * - * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - */ -const htmlRawNames = ['pre', 'script', 'style', 'textarea'] - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - -/** @type {Construct} */ -const htmlFlow = { - name: 'htmlFlow', - tokenize: tokenizeHtmlFlow, - resolveTo: resolveToHtmlFlow, - concrete: true -} - -/** @type {Construct} */ -const blankLineBefore = { - tokenize: tokenizeBlankLineBefore, - partial: true -} -const nonLazyContinuationStart = { - tokenize: tokenizeNonLazyContinuationStart, - partial: true -} - -/** @type {Resolver} */ -function resolveToHtmlFlow(events) { - let index = events.length - while (index--) { - if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { - break - } - } - if (index > 1 && events[index - 2][1].type === 'linePrefix') { - // Add the prefix start to the HTML token. - events[index][1].start = events[index - 2][1].start - // Add the prefix start to the HTML line token. - events[index + 1][1].start = events[index - 2][1].start - // Remove the line prefix. - events.splice(index - 2, 2) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlFlow(effects, ok, nok) { - const self = this - /** @type {number} */ - let marker - /** @type {boolean} */ - let closingTag - /** @type {string} */ - let buffer - /** @type {number} */ - let index - /** @type {Code} */ - let markerB - return start - - /** - * Start of HTML (flow). - * - * ```markdown - * > | <x /> - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * At `<`, after optional whitespace. - * - * ```markdown - * > | <x /> - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('htmlFlow') - effects.enter('htmlFlowData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | <x /> - * ^ - * > | <!doctype> - * ^ - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - closingTag = true - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - marker = 3 - // To do: - // tokenizer.concrete = true - // To do: use `markdown-rs` style interrupt. - // While we’re in an instruction instead of a declaration, we’re on a `?` - // right now, so we do need to search for `>`, similar to declarations. - return self.interrupt ? ok : continuationDeclarationInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After `<!`, at declaration, comment, or CDATA. - * - * ```markdown - * > | <!doctype> - * ^ - * > | <!--xxx--> - * ^ - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - marker = 2 - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - marker = 5 - index = 0 - return cdataOpenInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - marker = 4 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After `<!-`, inside a comment, at another `-`. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After `<![`, inside CDATA, expecting `CDATA[`. - * - * ```markdown - * > | <![CDATA[>&<]]> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - if (index === value.length) { - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return cdataOpenInside - } - return nok(code) - } - - /** - * After `</`, in closing tag, at tag name. - * - * ```markdown - * > | </x> - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * In tag name. - * - * ```markdown - * > | <ab> - * ^^ - * > | </ab> - * ^^ - * ``` - * - * @type {State} - */ - function tagName(code) { - if ( - code === null || - code === 47 || - code === 62 || - markdownLineEndingOrSpace(code) - ) { - const slash = code === 47 - const name = buffer.toLowerCase() - if (!slash && !closingTag && htmlRawNames.includes(name)) { - marker = 1 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - if (htmlBlockNames.includes(buffer.toLowerCase())) { - marker = 6 - if (slash) { - effects.consume(code) - return basicSelfClosing - } - - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - marker = 7 - // Do not support complete HTML when interrupting. - return self.interrupt && !self.parser.lazy[self.now().line] - ? nok(code) - : closingTag - ? completeClosingTagAfter(code) - : completeAttributeNameBefore(code) - } - - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - buffer += String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After closing slash of a basic tag name. - * - * ```markdown - * > | <div/> - * ^ - * ``` - * - * @type {State} - */ - function basicSelfClosing(code) { - if (code === 62) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return nok(code) - } - - /** - * After closing slash of a complete tag name. - * - * ```markdown - * > | <x/> - * ^ - * ``` - * - * @type {State} - */ - function completeClosingTagAfter(code) { - if (markdownSpace(code)) { - effects.consume(code) - return completeClosingTagAfter - } - return completeEnd(code) - } - - /** - * At an attribute name. - * - * At first, this state is used after a complete tag name, after whitespace, - * where it expects optional attributes or the end of the tag. - * It is also reused after attributes, when expecting more optional - * attributes. - * - * ```markdown - * > | <a /> - * ^ - * > | <a :b> - * ^ - * > | <a _b> - * ^ - * > | <a b> - * ^ - * > | <a > - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameBefore(code) { - if (code === 47) { - effects.consume(code) - return completeEnd - } - - // ASCII alphanumerical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return completeAttributeName - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameBefore - } - return completeEnd(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | <a :b> - * ^ - * > | <a _b> - * ^ - * > | <a b> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeName(code) { - // ASCII alphanumerical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return completeAttributeName - } - return completeAttributeNameAfter(code) - } - - /** - * After attribute name, at an optional initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | <a b> - * ^ - * > | <a b=c> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return completeAttributeValueBefore - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameAfter - } - return completeAttributeNameBefore(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | <a b=c> - * ^ - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - markerB = code - return completeAttributeValueQuoted - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeValueBefore - } - return completeAttributeValueUnquoted(code) - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | <a b="c"> - * ^ - * > | <a b='c'> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuoted(code) { - if (code === markerB) { - effects.consume(code) - markerB = null - return completeAttributeValueQuotedAfter - } - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return completeAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | <a b=c> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 47 || - code === 60 || - code === 61 || - code === 62 || - code === 96 || - markdownLineEndingOrSpace(code) - ) { - return completeAttributeNameAfter(code) - } - effects.consume(code) - return completeAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the - * end of the tag. - * - * ```markdown - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownSpace(code)) { - return completeAttributeNameBefore(code) - } - return nok(code) - } - - /** - * In certain circumstances of a complete tag where only an `>` is allowed. - * - * ```markdown - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeEnd(code) { - if (code === 62) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * After `>` in a complete tag. - * - * ```markdown - * > | <x> - * ^ - * ``` - * - * @type {State} - */ - function completeAfter(code) { - if (code === null || markdownLineEnding(code)) { - // // Do not form containers. - // tokenizer.concrete = true - return continuation(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * In continuation of any HTML kind. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function continuation(code) { - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationCommentInside - } - if (code === 60 && marker === 1) { - effects.consume(code) - return continuationRawTagOpen - } - if (code === 62 && marker === 4) { - effects.consume(code) - return continuationClose - } - if (code === 63 && marker === 3) { - effects.consume(code) - return continuationDeclarationInside - } - if (code === 93 && marker === 5) { - effects.consume(code) - return continuationCdataInside - } - if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { - effects.exit('htmlFlowData') - return effects.check( - blankLineBefore, - continuationAfter, - continuationStart - )(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationStart(code) - } - effects.consume(code) - return continuation - } - - /** - * In continuation, at eol. - * - * ```markdown - * > | <x> - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStart(code) { - return effects.check( - nonLazyContinuationStart, - continuationStartNonLazy, - continuationAfter - )(code) - } - - /** - * In continuation, at eol, before non-lazy content. - * - * ```markdown - * > | <x> - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStartNonLazy(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return continuationBefore - } - - /** - * In continuation, before non-lazy content. - * - * ```markdown - * | <x> - * > | asd - * ^ - * ``` - * - * @type {State} - */ - function continuationBefore(code) { - if (code === null || markdownLineEnding(code)) { - return continuationStart(code) - } - effects.enter('htmlFlowData') - return continuation(code) - } - - /** - * In comment continuation, after one `-`, expecting another. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function continuationCommentInside(code) { - if (code === 45) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In raw continuation, after `<`, at `/`. - * - * ```markdown - * > | <script>console.log(1)</script> - * ^ - * ``` - * - * @type {State} - */ - function continuationRawTagOpen(code) { - if (code === 47) { - effects.consume(code) - buffer = '' - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In raw continuation, after `</`, in a raw tag name. - * - * ```markdown - * > | <script>console.log(1)</script> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function continuationRawEndTag(code) { - if (code === 62) { - const name = buffer.toLowerCase() - if (htmlRawNames.includes(name)) { - effects.consume(code) - return continuationClose - } - return continuation(code) - } - if (asciiAlpha(code) && buffer.length < 8) { - effects.consume(code) - // @ts-expect-error: not null. - buffer += String.fromCharCode(code) - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In cdata continuation, after `]`, expecting `]>`. - * - * ```markdown - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationCdataInside(code) { - if (code === 93) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In declaration or instruction continuation, at `>`. - * - * ```markdown - * > | <!--> - * ^ - * > | <?> - * ^ - * > | <!q> - * ^ - * > | <!--ab--> - * ^ - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationDeclarationInside(code) { - if (code === 62) { - effects.consume(code) - return continuationClose - } - - // More dashes. - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In closed continuation: everything we get until the eol/eof is part of it. - * - * ```markdown - * > | <!doctype> - * ^ - * ``` - * - * @type {State} - */ - function continuationClose(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationAfter(code) - } - effects.consume(code) - return continuationClose - } - - /** - * Done. - * - * ```markdown - * > | <!doctype> - * ^ - * ``` - * - * @type {State} - */ - function continuationAfter(code) { - effects.exit('htmlFlow') - // // Feel free to interrupt. - // tokenizer.interrupt = false - // // No longer concrete. - // tokenizer.concrete = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuationStart(effects, ok, nok) { - const self = this - return start - - /** - * At eol, before continuation. - * - * ```markdown - * > | * ```js - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return after - } - return nok(code) - } - - /** - * A continuation. - * - * ```markdown - * | * ```js - * > | b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLineBefore(effects, ok, nok) { - return start - - /** - * Before eol, expecting blank line. - * - * ```markdown - * > | <div> - * ^ - * | - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return effects.attempt(blankLine, ok, nok) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const nonLazyContinuation = { - tokenize: tokenizeNonLazyContinuation, - partial: true -} - -/** @type {Construct} */ -const codeFenced = { - name: 'codeFenced', - tokenize: tokenizeCodeFenced, - concrete: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeFenced(effects, ok, nok) { - const self = this - /** @type {Construct} */ - const closeStart = { - tokenize: tokenizeCloseStart, - partial: true - } - let initialPrefix = 0 - let sizeOpen = 0 - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of code. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse whitespace like `markdown-rs`. - return beforeSequenceOpen(code) - } - - /** - * In opening fence, after prefix, at sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeSequenceOpen(code) { - const tail = self.events[self.events.length - 1] - initialPrefix = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - marker = code - effects.enter('codeFenced') - effects.enter('codeFencedFence') - effects.enter('codeFencedFenceSequence') - return sequenceOpen(code) - } - - /** - * In opening fence sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === marker) { - sizeOpen++ - effects.consume(code) - return sequenceOpen - } - if (sizeOpen < 3) { - return nok(code) - } - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, infoBefore, 'whitespace')(code) - : infoBefore(code) - } - - /** - * In opening fence, after the sequence (and optional whitespace), before info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function infoBefore(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return self.interrupt - ? ok(code) - : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFencedFenceInfo') - effects.enter('chunkString', { - contentType: 'string' - }) - return info(code) - } - - /** - * In info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function info(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return infoBefore(code) - } - if (markdownSpace(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return factorySpace(effects, metaBefore, 'whitespace')(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return info - } - - /** - * In opening fence, after info and whitespace, before meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function metaBefore(code) { - if (code === null || markdownLineEnding(code)) { - return infoBefore(code) - } - effects.enter('codeFencedFenceMeta') - effects.enter('chunkString', { - contentType: 'string' - }) - return meta(code) - } - - /** - * In meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function meta(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceMeta') - return infoBefore(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return meta - } - - /** - * At eol/eof in code, before a non-lazy closing fence or content. - * - * ```markdown - * > | ~~~js - * ^ - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function atNonLazyBreak(code) { - return effects.attempt(closeStart, after, contentBefore)(code) - } - - /** - * Before code content, not a closing fence, at eol. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return contentStart - } - - /** - * Before code content, not a closing fence. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentStart(code) { - return initialPrefix > 0 && markdownSpace(code) - ? factorySpace( - effects, - beforeContentChunk, - 'linePrefix', - initialPrefix + 1 - )(code) - : beforeContentChunk(code) - } - - /** - * Before code content, after optional prefix. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeContentChunk(code) { - if (code === null || markdownLineEnding(code)) { - return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFlowValue') - return contentChunk(code) - } - - /** - * In code content. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^^^^^^^^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentChunk(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return beforeContentChunk(code) - } - effects.consume(code) - return contentChunk - } - - /** - * After code. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - effects.exit('codeFenced') - return ok(code) - } - - /** - * @this {TokenizeContext} - * @type {Tokenizer} - */ - function tokenizeCloseStart(effects, ok, nok) { - let size = 0 - return startBefore - - /** - * - * - * @type {State} - */ - function startBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return start - } - - /** - * Before closing fence, at optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Always populated by defaults. - - // To do: `enter` here or in next state? - effects.enter('codeFencedFence') - return markdownSpace(code) - ? factorySpace( - effects, - beforeSequenceClose, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : beforeSequenceClose(code) - } - - /** - * In closing fence, after optional whitespace, at sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function beforeSequenceClose(code) { - if (code === marker) { - effects.enter('codeFencedFenceSequence') - return sequenceClose(code) - } - return nok(code) - } - - /** - * In closing fence sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - if (code === marker) { - size++ - effects.consume(code) - return sequenceClose - } - if (size >= sizeOpen) { - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) - : sequenceCloseAfter(code) - } - return nok(code) - } - - /** - * After closing fence sequence, after optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceCloseAfter(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return ok(code) - } - return nok(code) - } - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuation(effects, ok, nok) { - const self = this - return start - - /** - * - * - * @type {State} - */ - function start(code) { - if (code === null) { - return nok(code) - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineStart - } - - /** - * - * - * @type {State} - */ - function lineStart(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/character-entities/index.js -/** - * Map of named character references. - * - * @type {Record<string, string>} - */ -const characterEntities = { - AElig: 'Æ', - AMP: '&', - Aacute: 'Á', - Abreve: 'Ă', - Acirc: 'Â', - Acy: 'А', - Afr: '𝔄', - Agrave: 'À', - Alpha: 'Α', - Amacr: 'Ā', - And: '⩓', - Aogon: 'Ą', - Aopf: '𝔸', - ApplyFunction: '⁡', - Aring: 'Å', - Ascr: '𝒜', - Assign: '≔', - Atilde: 'Ã', - Auml: 'Ä', - Backslash: '∖', - Barv: '⫧', - Barwed: '⌆', - Bcy: 'Б', - Because: '∵', - Bernoullis: 'ℬ', - Beta: 'Β', - Bfr: '𝔅', - Bopf: '𝔹', - Breve: '˘', - Bscr: 'ℬ', - Bumpeq: '≎', - CHcy: 'Ч', - COPY: '©', - Cacute: 'Ć', - Cap: '⋒', - CapitalDifferentialD: 'ⅅ', - Cayleys: 'ℭ', - Ccaron: 'Č', - Ccedil: 'Ç', - Ccirc: 'Ĉ', - Cconint: '∰', - Cdot: 'Ċ', - Cedilla: '¸', - CenterDot: '·', - Cfr: 'ℭ', - Chi: 'Χ', - CircleDot: '⊙', - CircleMinus: '⊖', - CirclePlus: '⊕', - CircleTimes: '⊗', - ClockwiseContourIntegral: '∲', - CloseCurlyDoubleQuote: '”', - CloseCurlyQuote: '’', - Colon: '∷', - Colone: '⩴', - Congruent: '≡', - Conint: '∯', - ContourIntegral: '∮', - Copf: 'ℂ', - Coproduct: '∐', - CounterClockwiseContourIntegral: '∳', - Cross: '⨯', - Cscr: '𝒞', - Cup: '⋓', - CupCap: '≍', - DD: 'ⅅ', - DDotrahd: '⤑', - DJcy: 'Ђ', - DScy: 'Ѕ', - DZcy: 'Џ', - Dagger: '‡', - Darr: '↡', - Dashv: '⫤', - Dcaron: 'Ď', - Dcy: 'Д', - Del: '∇', - Delta: 'Δ', - Dfr: '𝔇', - DiacriticalAcute: '´', - DiacriticalDot: '˙', - DiacriticalDoubleAcute: '˝', - DiacriticalGrave: '`', - DiacriticalTilde: '˜', - Diamond: '⋄', - DifferentialD: 'ⅆ', - Dopf: '𝔻', - Dot: '¨', - DotDot: '⃜', - DotEqual: '≐', - DoubleContourIntegral: '∯', - DoubleDot: '¨', - DoubleDownArrow: '⇓', - DoubleLeftArrow: '⇐', - DoubleLeftRightArrow: '⇔', - DoubleLeftTee: '⫤', - DoubleLongLeftArrow: '⟸', - DoubleLongLeftRightArrow: '⟺', - DoubleLongRightArrow: '⟹', - DoubleRightArrow: '⇒', - DoubleRightTee: '⊨', - DoubleUpArrow: '⇑', - DoubleUpDownArrow: '⇕', - DoubleVerticalBar: '∥', - DownArrow: '↓', - DownArrowBar: '⤓', - DownArrowUpArrow: '⇵', - DownBreve: '̑', - DownLeftRightVector: '⥐', - DownLeftTeeVector: '⥞', - DownLeftVector: '↽', - DownLeftVectorBar: '⥖', - DownRightTeeVector: '⥟', - DownRightVector: '⇁', - DownRightVectorBar: '⥗', - DownTee: '⊤', - DownTeeArrow: '↧', - Downarrow: '⇓', - Dscr: '𝒟', - Dstrok: 'Đ', - ENG: 'Ŋ', - ETH: 'Ð', - Eacute: 'É', - Ecaron: 'Ě', - Ecirc: 'Ê', - Ecy: 'Э', - Edot: 'Ė', - Efr: '𝔈', - Egrave: 'È', - Element: '∈', - Emacr: 'Ē', - EmptySmallSquare: '◻', - EmptyVerySmallSquare: '▫', - Eogon: 'Ę', - Eopf: '𝔼', - Epsilon: 'Ε', - Equal: '⩵', - EqualTilde: '≂', - Equilibrium: '⇌', - Escr: 'ℰ', - Esim: '⩳', - Eta: 'Η', - Euml: 'Ë', - Exists: '∃', - ExponentialE: 'ⅇ', - Fcy: 'Ф', - Ffr: '𝔉', - FilledSmallSquare: '◼', - FilledVerySmallSquare: '▪', - Fopf: '𝔽', - ForAll: '∀', - Fouriertrf: 'ℱ', - Fscr: 'ℱ', - GJcy: 'Ѓ', - GT: '>', - Gamma: 'Γ', - Gammad: 'Ϝ', - Gbreve: 'Ğ', - Gcedil: 'Ģ', - Gcirc: 'Ĝ', - Gcy: 'Г', - Gdot: 'Ġ', - Gfr: '𝔊', - Gg: '⋙', - Gopf: '𝔾', - GreaterEqual: '≥', - GreaterEqualLess: '⋛', - GreaterFullEqual: '≧', - GreaterGreater: '⪢', - GreaterLess: '≷', - GreaterSlantEqual: '⩾', - GreaterTilde: '≳', - Gscr: '𝒢', - Gt: '≫', - HARDcy: 'Ъ', - Hacek: 'ˇ', - Hat: '^', - Hcirc: 'Ĥ', - Hfr: 'ℌ', - HilbertSpace: 'ℋ', - Hopf: 'ℍ', - HorizontalLine: '─', - Hscr: 'ℋ', - Hstrok: 'Ħ', - HumpDownHump: '≎', - HumpEqual: '≏', - IEcy: 'Е', - IJlig: 'IJ', - IOcy: 'Ё', - Iacute: 'Í', - Icirc: 'Î', - Icy: 'И', - Idot: 'İ', - Ifr: 'ℑ', - Igrave: 'Ì', - Im: 'ℑ', - Imacr: 'Ī', - ImaginaryI: 'ⅈ', - Implies: '⇒', - Int: '∬', - Integral: '∫', - Intersection: '⋂', - InvisibleComma: '⁣', - InvisibleTimes: '⁢', - Iogon: 'Į', - Iopf: '𝕀', - Iota: 'Ι', - Iscr: 'ℐ', - Itilde: 'Ĩ', - Iukcy: 'І', - Iuml: 'Ï', - Jcirc: 'Ĵ', - Jcy: 'Й', - Jfr: '𝔍', - Jopf: '𝕁', - Jscr: '𝒥', - Jsercy: 'Ј', - Jukcy: 'Є', - KHcy: 'Х', - KJcy: 'Ќ', - Kappa: 'Κ', - Kcedil: 'Ķ', - Kcy: 'К', - Kfr: '𝔎', - Kopf: '𝕂', - Kscr: '𝒦', - LJcy: 'Љ', - LT: '<', - Lacute: 'Ĺ', - Lambda: 'Λ', - Lang: '⟪', - Laplacetrf: 'ℒ', - Larr: '↞', - Lcaron: 'Ľ', - Lcedil: 'Ļ', - Lcy: 'Л', - LeftAngleBracket: '⟨', - LeftArrow: '←', - LeftArrowBar: '⇤', - LeftArrowRightArrow: '⇆', - LeftCeiling: '⌈', - LeftDoubleBracket: '⟦', - LeftDownTeeVector: '⥡', - LeftDownVector: '⇃', - LeftDownVectorBar: '⥙', - LeftFloor: '⌊', - LeftRightArrow: '↔', - LeftRightVector: '⥎', - LeftTee: '⊣', - LeftTeeArrow: '↤', - LeftTeeVector: '⥚', - LeftTriangle: '⊲', - LeftTriangleBar: '⧏', - LeftTriangleEqual: '⊴', - LeftUpDownVector: '⥑', - LeftUpTeeVector: '⥠', - LeftUpVector: '↿', - LeftUpVectorBar: '⥘', - LeftVector: '↼', - LeftVectorBar: '⥒', - Leftarrow: '⇐', - Leftrightarrow: '⇔', - LessEqualGreater: '⋚', - LessFullEqual: '≦', - LessGreater: '≶', - LessLess: '⪡', - LessSlantEqual: '⩽', - LessTilde: '≲', - Lfr: '𝔏', - Ll: '⋘', - Lleftarrow: '⇚', - Lmidot: 'Ŀ', - LongLeftArrow: '⟵', - LongLeftRightArrow: '⟷', - LongRightArrow: '⟶', - Longleftarrow: '⟸', - Longleftrightarrow: '⟺', - Longrightarrow: '⟹', - Lopf: '𝕃', - LowerLeftArrow: '↙', - LowerRightArrow: '↘', - Lscr: 'ℒ', - Lsh: '↰', - Lstrok: 'Ł', - Lt: '≪', - Map: '⤅', - Mcy: 'М', - MediumSpace: ' ', - Mellintrf: 'ℳ', - Mfr: '𝔐', - MinusPlus: '∓', - Mopf: '𝕄', - Mscr: 'ℳ', - Mu: 'Μ', - NJcy: 'Њ', - Nacute: 'Ń', - Ncaron: 'Ň', - Ncedil: 'Ņ', - Ncy: 'Н', - NegativeMediumSpace: '​', - NegativeThickSpace: '​', - NegativeThinSpace: '​', - NegativeVeryThinSpace: '​', - NestedGreaterGreater: '≫', - NestedLessLess: '≪', - NewLine: '\n', - Nfr: '𝔑', - NoBreak: '⁠', - NonBreakingSpace: ' ', - Nopf: 'ℕ', - Not: '⫬', - NotCongruent: '≢', - NotCupCap: '≭', - NotDoubleVerticalBar: '∦', - NotElement: '∉', - NotEqual: '≠', - NotEqualTilde: '≂̸', - NotExists: '∄', - NotGreater: '≯', - NotGreaterEqual: '≱', - NotGreaterFullEqual: '≧̸', - NotGreaterGreater: '≫̸', - NotGreaterLess: '≹', - NotGreaterSlantEqual: '⩾̸', - NotGreaterTilde: '≵', - NotHumpDownHump: '≎̸', - NotHumpEqual: '≏̸', - NotLeftTriangle: '⋪', - NotLeftTriangleBar: '⧏̸', - NotLeftTriangleEqual: '⋬', - NotLess: '≮', - NotLessEqual: '≰', - NotLessGreater: '≸', - NotLessLess: '≪̸', - NotLessSlantEqual: '⩽̸', - NotLessTilde: '≴', - NotNestedGreaterGreater: '⪢̸', - NotNestedLessLess: '⪡̸', - NotPrecedes: '⊀', - NotPrecedesEqual: '⪯̸', - NotPrecedesSlantEqual: '⋠', - NotReverseElement: '∌', - NotRightTriangle: '⋫', - NotRightTriangleBar: '⧐̸', - NotRightTriangleEqual: '⋭', - NotSquareSubset: '⊏̸', - NotSquareSubsetEqual: '⋢', - NotSquareSuperset: '⊐̸', - NotSquareSupersetEqual: '⋣', - NotSubset: '⊂⃒', - NotSubsetEqual: '⊈', - NotSucceeds: '⊁', - NotSucceedsEqual: '⪰̸', - NotSucceedsSlantEqual: '⋡', - NotSucceedsTilde: '≿̸', - NotSuperset: '⊃⃒', - NotSupersetEqual: '⊉', - NotTilde: '≁', - NotTildeEqual: '≄', - NotTildeFullEqual: '≇', - NotTildeTilde: '≉', - NotVerticalBar: '∤', - Nscr: '𝒩', - Ntilde: 'Ñ', - Nu: 'Ν', - OElig: 'Œ', - Oacute: 'Ó', - Ocirc: 'Ô', - Ocy: 'О', - Odblac: 'Ő', - Ofr: '𝔒', - Ograve: 'Ò', - Omacr: 'Ō', - Omega: 'Ω', - Omicron: 'Ο', - Oopf: '𝕆', - OpenCurlyDoubleQuote: '“', - OpenCurlyQuote: '‘', - Or: '⩔', - Oscr: '𝒪', - Oslash: 'Ø', - Otilde: 'Õ', - Otimes: '⨷', - Ouml: 'Ö', - OverBar: '‾', - OverBrace: '⏞', - OverBracket: '⎴', - OverParenthesis: '⏜', - PartialD: '∂', - Pcy: 'П', - Pfr: '𝔓', - Phi: 'Φ', - Pi: 'Π', - PlusMinus: '±', - Poincareplane: 'ℌ', - Popf: 'ℙ', - Pr: '⪻', - Precedes: '≺', - PrecedesEqual: '⪯', - PrecedesSlantEqual: '≼', - PrecedesTilde: '≾', - Prime: '″', - Product: '∏', - Proportion: '∷', - Proportional: '∝', - Pscr: '𝒫', - Psi: 'Ψ', - QUOT: '"', - Qfr: '𝔔', - Qopf: 'ℚ', - Qscr: '𝒬', - RBarr: '⤐', - REG: '®', - Racute: 'Ŕ', - Rang: '⟫', - Rarr: '↠', - Rarrtl: '⤖', - Rcaron: 'Ř', - Rcedil: 'Ŗ', - Rcy: 'Р', - Re: 'ℜ', - ReverseElement: '∋', - ReverseEquilibrium: '⇋', - ReverseUpEquilibrium: '⥯', - Rfr: 'ℜ', - Rho: 'Ρ', - RightAngleBracket: '⟩', - RightArrow: '→', - RightArrowBar: '⇥', - RightArrowLeftArrow: '⇄', - RightCeiling: '⌉', - RightDoubleBracket: '⟧', - RightDownTeeVector: '⥝', - RightDownVector: '⇂', - RightDownVectorBar: '⥕', - RightFloor: '⌋', - RightTee: '⊢', - RightTeeArrow: '↦', - RightTeeVector: '⥛', - RightTriangle: '⊳', - RightTriangleBar: '⧐', - RightTriangleEqual: '⊵', - RightUpDownVector: '⥏', - RightUpTeeVector: '⥜', - RightUpVector: '↾', - RightUpVectorBar: '⥔', - RightVector: '⇀', - RightVectorBar: '⥓', - Rightarrow: '⇒', - Ropf: 'ℝ', - RoundImplies: '⥰', - Rrightarrow: '⇛', - Rscr: 'ℛ', - Rsh: '↱', - RuleDelayed: '⧴', - SHCHcy: 'Щ', - SHcy: 'Ш', - SOFTcy: 'Ь', - Sacute: 'Ś', - Sc: '⪼', - Scaron: 'Š', - Scedil: 'Ş', - Scirc: 'Ŝ', - Scy: 'С', - Sfr: '𝔖', - ShortDownArrow: '↓', - ShortLeftArrow: '←', - ShortRightArrow: '→', - ShortUpArrow: '↑', - Sigma: 'Σ', - SmallCircle: '∘', - Sopf: '𝕊', - Sqrt: '√', - Square: '□', - SquareIntersection: '⊓', - SquareSubset: '⊏', - SquareSubsetEqual: '⊑', - SquareSuperset: '⊐', - SquareSupersetEqual: '⊒', - SquareUnion: '⊔', - Sscr: '𝒮', - Star: '⋆', - Sub: '⋐', - Subset: '⋐', - SubsetEqual: '⊆', - Succeeds: '≻', - SucceedsEqual: '⪰', - SucceedsSlantEqual: '≽', - SucceedsTilde: '≿', - SuchThat: '∋', - Sum: '∑', - Sup: '⋑', - Superset: '⊃', - SupersetEqual: '⊇', - Supset: '⋑', - THORN: 'Þ', - TRADE: '™', - TSHcy: 'Ћ', - TScy: 'Ц', - Tab: '\t', - Tau: 'Τ', - Tcaron: 'Ť', - Tcedil: 'Ţ', - Tcy: 'Т', - Tfr: '𝔗', - Therefore: '∴', - Theta: 'Θ', - ThickSpace: '  ', - ThinSpace: ' ', - Tilde: '∼', - TildeEqual: '≃', - TildeFullEqual: '≅', - TildeTilde: '≈', - Topf: '𝕋', - TripleDot: '⃛', - Tscr: '𝒯', - Tstrok: 'Ŧ', - Uacute: 'Ú', - Uarr: '↟', - Uarrocir: '⥉', - Ubrcy: 'Ў', - Ubreve: 'Ŭ', - Ucirc: 'Û', - Ucy: 'У', - Udblac: 'Ű', - Ufr: '𝔘', - Ugrave: 'Ù', - Umacr: 'Ū', - UnderBar: '_', - UnderBrace: '⏟', - UnderBracket: '⎵', - UnderParenthesis: '⏝', - Union: '⋃', - UnionPlus: '⊎', - Uogon: 'Ų', - Uopf: '𝕌', - UpArrow: '↑', - UpArrowBar: '⤒', - UpArrowDownArrow: '⇅', - UpDownArrow: '↕', - UpEquilibrium: '⥮', - UpTee: '⊥', - UpTeeArrow: '↥', - Uparrow: '⇑', - Updownarrow: '⇕', - UpperLeftArrow: '↖', - UpperRightArrow: '↗', - Upsi: 'ϒ', - Upsilon: 'Υ', - Uring: 'Ů', - Uscr: '𝒰', - Utilde: 'Ũ', - Uuml: 'Ü', - VDash: '⊫', - Vbar: '⫫', - Vcy: 'В', - Vdash: '⊩', - Vdashl: '⫦', - Vee: '⋁', - Verbar: '‖', - Vert: '‖', - VerticalBar: '∣', - VerticalLine: '|', - VerticalSeparator: '❘', - VerticalTilde: '≀', - VeryThinSpace: ' ', - Vfr: '𝔙', - Vopf: '𝕍', - Vscr: '𝒱', - Vvdash: '⊪', - Wcirc: 'Ŵ', - Wedge: '⋀', - Wfr: '𝔚', - Wopf: '𝕎', - Wscr: '𝒲', - Xfr: '𝔛', - Xi: 'Ξ', - Xopf: '𝕏', - Xscr: '𝒳', - YAcy: 'Я', - YIcy: 'Ї', - YUcy: 'Ю', - Yacute: 'Ý', - Ycirc: 'Ŷ', - Ycy: 'Ы', - Yfr: '𝔜', - Yopf: '𝕐', - Yscr: '𝒴', - Yuml: 'Ÿ', - ZHcy: 'Ж', - Zacute: 'Ź', - Zcaron: 'Ž', - Zcy: 'З', - Zdot: 'Ż', - ZeroWidthSpace: '​', - Zeta: 'Ζ', - Zfr: 'ℨ', - Zopf: 'ℤ', - Zscr: '𝒵', - aacute: 'á', - abreve: 'ă', - ac: '∾', - acE: '∾̳', - acd: '∿', - acirc: 'â', - acute: '´', - acy: 'а', - aelig: 'æ', - af: '⁡', - afr: '𝔞', - agrave: 'à', - alefsym: 'ℵ', - aleph: 'ℵ', - alpha: 'α', - amacr: 'ā', - amalg: '⨿', - amp: '&', - and: '∧', - andand: '⩕', - andd: '⩜', - andslope: '⩘', - andv: '⩚', - ang: '∠', - ange: '⦤', - angle: '∠', - angmsd: '∡', - angmsdaa: '⦨', - angmsdab: '⦩', - angmsdac: '⦪', - angmsdad: '⦫', - angmsdae: '⦬', - angmsdaf: '⦭', - angmsdag: '⦮', - angmsdah: '⦯', - angrt: '∟', - angrtvb: '⊾', - angrtvbd: '⦝', - angsph: '∢', - angst: 'Å', - angzarr: '⍼', - aogon: 'ą', - aopf: '𝕒', - ap: '≈', - apE: '⩰', - apacir: '⩯', - ape: '≊', - apid: '≋', - apos: "'", - approx: '≈', - approxeq: '≊', - aring: 'å', - ascr: '𝒶', - ast: '*', - asymp: '≈', - asympeq: '≍', - atilde: 'ã', - auml: 'ä', - awconint: '∳', - awint: '⨑', - bNot: '⫭', - backcong: '≌', - backepsilon: '϶', - backprime: '‵', - backsim: '∽', - backsimeq: '⋍', - barvee: '⊽', - barwed: '⌅', - barwedge: '⌅', - bbrk: '⎵', - bbrktbrk: '⎶', - bcong: '≌', - bcy: 'б', - bdquo: '„', - becaus: '∵', - because: '∵', - bemptyv: '⦰', - bepsi: '϶', - bernou: 'ℬ', - beta: 'β', - beth: 'ℶ', - between: '≬', - bfr: '𝔟', - bigcap: '⋂', - bigcirc: '◯', - bigcup: '⋃', - bigodot: '⨀', - bigoplus: '⨁', - bigotimes: '⨂', - bigsqcup: '⨆', - bigstar: '★', - bigtriangledown: '▽', - bigtriangleup: '△', - biguplus: '⨄', - bigvee: '⋁', - bigwedge: '⋀', - bkarow: '⤍', - blacklozenge: '⧫', - blacksquare: '▪', - blacktriangle: '▴', - blacktriangledown: '▾', - blacktriangleleft: '◂', - blacktriangleright: '▸', - blank: '␣', - blk12: '▒', - blk14: '░', - blk34: '▓', - block: '█', - bne: '=⃥', - bnequiv: '≡⃥', - bnot: '⌐', - bopf: '𝕓', - bot: '⊥', - bottom: '⊥', - bowtie: '⋈', - boxDL: '╗', - boxDR: '╔', - boxDl: '╖', - boxDr: '╓', - boxH: '═', - boxHD: '╦', - boxHU: '╩', - boxHd: '╤', - boxHu: '╧', - boxUL: '╝', - boxUR: '╚', - boxUl: '╜', - boxUr: '╙', - boxV: '║', - boxVH: '╬', - boxVL: '╣', - boxVR: '╠', - boxVh: '╫', - boxVl: '╢', - boxVr: '╟', - boxbox: '⧉', - boxdL: '╕', - boxdR: '╒', - boxdl: '┐', - boxdr: '┌', - boxh: '─', - boxhD: '╥', - boxhU: '╨', - boxhd: '┬', - boxhu: '┴', - boxminus: '⊟', - boxplus: '⊞', - boxtimes: '⊠', - boxuL: '╛', - boxuR: '╘', - boxul: '┘', - boxur: '└', - boxv: '│', - boxvH: '╪', - boxvL: '╡', - boxvR: '╞', - boxvh: '┼', - boxvl: '┤', - boxvr: '├', - bprime: '‵', - breve: '˘', - brvbar: '¦', - bscr: '𝒷', - bsemi: '⁏', - bsim: '∽', - bsime: '⋍', - bsol: '\\', - bsolb: '⧅', - bsolhsub: '⟈', - bull: '•', - bullet: '•', - bump: '≎', - bumpE: '⪮', - bumpe: '≏', - bumpeq: '≏', - cacute: 'ć', - cap: '∩', - capand: '⩄', - capbrcup: '⩉', - capcap: '⩋', - capcup: '⩇', - capdot: '⩀', - caps: '∩︀', - caret: '⁁', - caron: 'ˇ', - ccaps: '⩍', - ccaron: 'č', - ccedil: 'ç', - ccirc: 'ĉ', - ccups: '⩌', - ccupssm: '⩐', - cdot: 'ċ', - cedil: '¸', - cemptyv: '⦲', - cent: '¢', - centerdot: '·', - cfr: '𝔠', - chcy: 'ч', - check: '✓', - checkmark: '✓', - chi: 'χ', - cir: '○', - cirE: '⧃', - circ: 'ˆ', - circeq: '≗', - circlearrowleft: '↺', - circlearrowright: '↻', - circledR: '®', - circledS: 'Ⓢ', - circledast: '⊛', - circledcirc: '⊚', - circleddash: '⊝', - cire: '≗', - cirfnint: '⨐', - cirmid: '⫯', - cirscir: '⧂', - clubs: '♣', - clubsuit: '♣', - colon: ':', - colone: '≔', - coloneq: '≔', - comma: ',', - commat: '@', - comp: '∁', - compfn: '∘', - complement: '∁', - complexes: 'ℂ', - cong: '≅', - congdot: '⩭', - conint: '∮', - copf: '𝕔', - coprod: '∐', - copy: '©', - copysr: '℗', - crarr: '↵', - cross: '✗', - cscr: '𝒸', - csub: '⫏', - csube: '⫑', - csup: '⫐', - csupe: '⫒', - ctdot: '⋯', - cudarrl: '⤸', - cudarrr: '⤵', - cuepr: '⋞', - cuesc: '⋟', - cularr: '↶', - cularrp: '⤽', - cup: '∪', - cupbrcap: '⩈', - cupcap: '⩆', - cupcup: '⩊', - cupdot: '⊍', - cupor: '⩅', - cups: '∪︀', - curarr: '↷', - curarrm: '⤼', - curlyeqprec: '⋞', - curlyeqsucc: '⋟', - curlyvee: '⋎', - curlywedge: '⋏', - curren: '¤', - curvearrowleft: '↶', - curvearrowright: '↷', - cuvee: '⋎', - cuwed: '⋏', - cwconint: '∲', - cwint: '∱', - cylcty: '⌭', - dArr: '⇓', - dHar: '⥥', - dagger: '†', - daleth: 'ℸ', - darr: '↓', - dash: '‐', - dashv: '⊣', - dbkarow: '⤏', - dblac: '˝', - dcaron: 'ď', - dcy: 'д', - dd: 'ⅆ', - ddagger: '‡', - ddarr: '⇊', - ddotseq: '⩷', - deg: '°', - delta: 'δ', - demptyv: '⦱', - dfisht: '⥿', - dfr: '𝔡', - dharl: '⇃', - dharr: '⇂', - diam: '⋄', - diamond: '⋄', - diamondsuit: '♦', - diams: '♦', - die: '¨', - digamma: 'ϝ', - disin: '⋲', - div: '÷', - divide: '÷', - divideontimes: '⋇', - divonx: '⋇', - djcy: 'ђ', - dlcorn: '⌞', - dlcrop: '⌍', - dollar: '$', - dopf: '𝕕', - dot: '˙', - doteq: '≐', - doteqdot: '≑', - dotminus: '∸', - dotplus: '∔', - dotsquare: '⊡', - doublebarwedge: '⌆', - downarrow: '↓', - downdownarrows: '⇊', - downharpoonleft: '⇃', - downharpoonright: '⇂', - drbkarow: '⤐', - drcorn: '⌟', - drcrop: '⌌', - dscr: '𝒹', - dscy: 'ѕ', - dsol: '⧶', - dstrok: 'đ', - dtdot: '⋱', - dtri: '▿', - dtrif: '▾', - duarr: '⇵', - duhar: '⥯', - dwangle: '⦦', - dzcy: 'џ', - dzigrarr: '⟿', - eDDot: '⩷', - eDot: '≑', - eacute: 'é', - easter: '⩮', - ecaron: 'ě', - ecir: '≖', - ecirc: 'ê', - ecolon: '≕', - ecy: 'э', - edot: 'ė', - ee: 'ⅇ', - efDot: '≒', - efr: '𝔢', - eg: '⪚', - egrave: 'è', - egs: '⪖', - egsdot: '⪘', - el: '⪙', - elinters: '⏧', - ell: 'ℓ', - els: '⪕', - elsdot: '⪗', - emacr: 'ē', - empty: '∅', - emptyset: '∅', - emptyv: '∅', - emsp13: ' ', - emsp14: ' ', - emsp: ' ', - eng: 'ŋ', - ensp: ' ', - eogon: 'ę', - eopf: '𝕖', - epar: '⋕', - eparsl: '⧣', - eplus: '⩱', - epsi: 'ε', - epsilon: 'ε', - epsiv: 'ϵ', - eqcirc: '≖', - eqcolon: '≕', - eqsim: '≂', - eqslantgtr: '⪖', - eqslantless: '⪕', - equals: '=', - equest: '≟', - equiv: '≡', - equivDD: '⩸', - eqvparsl: '⧥', - erDot: '≓', - erarr: '⥱', - escr: 'ℯ', - esdot: '≐', - esim: '≂', - eta: 'η', - eth: 'ð', - euml: 'ë', - euro: '€', - excl: '!', - exist: '∃', - expectation: 'ℰ', - exponentiale: 'ⅇ', - fallingdotseq: '≒', - fcy: 'ф', - female: '♀', - ffilig: 'ffi', - fflig: 'ff', - ffllig: 'ffl', - ffr: '𝔣', - filig: 'fi', - fjlig: 'fj', - flat: '♭', - fllig: 'fl', - fltns: '▱', - fnof: 'ƒ', - fopf: '𝕗', - forall: '∀', - fork: '⋔', - forkv: '⫙', - fpartint: '⨍', - frac12: '½', - frac13: '⅓', - frac14: '¼', - frac15: '⅕', - frac16: '⅙', - frac18: '⅛', - frac23: '⅔', - frac25: '⅖', - frac34: '¾', - frac35: '⅗', - frac38: '⅜', - frac45: '⅘', - frac56: '⅚', - frac58: '⅝', - frac78: '⅞', - frasl: '⁄', - frown: '⌢', - fscr: '𝒻', - gE: '≧', - gEl: '⪌', - gacute: 'ǵ', - gamma: 'γ', - gammad: 'ϝ', - gap: '⪆', - gbreve: 'ğ', - gcirc: 'ĝ', - gcy: 'г', - gdot: 'ġ', - ge: '≥', - gel: '⋛', - geq: '≥', - geqq: '≧', - geqslant: '⩾', - ges: '⩾', - gescc: '⪩', - gesdot: '⪀', - gesdoto: '⪂', - gesdotol: '⪄', - gesl: '⋛︀', - gesles: '⪔', - gfr: '𝔤', - gg: '≫', - ggg: '⋙', - gimel: 'ℷ', - gjcy: 'ѓ', - gl: '≷', - glE: '⪒', - gla: '⪥', - glj: '⪤', - gnE: '≩', - gnap: '⪊', - gnapprox: '⪊', - gne: '⪈', - gneq: '⪈', - gneqq: '≩', - gnsim: '⋧', - gopf: '𝕘', - grave: '`', - gscr: 'ℊ', - gsim: '≳', - gsime: '⪎', - gsiml: '⪐', - gt: '>', - gtcc: '⪧', - gtcir: '⩺', - gtdot: '⋗', - gtlPar: '⦕', - gtquest: '⩼', - gtrapprox: '⪆', - gtrarr: '⥸', - gtrdot: '⋗', - gtreqless: '⋛', - gtreqqless: '⪌', - gtrless: '≷', - gtrsim: '≳', - gvertneqq: '≩︀', - gvnE: '≩︀', - hArr: '⇔', - hairsp: ' ', - half: '½', - hamilt: 'ℋ', - hardcy: 'ъ', - harr: '↔', - harrcir: '⥈', - harrw: '↭', - hbar: 'ℏ', - hcirc: 'ĥ', - hearts: '♥', - heartsuit: '♥', - hellip: '…', - hercon: '⊹', - hfr: '𝔥', - hksearow: '⤥', - hkswarow: '⤦', - hoarr: '⇿', - homtht: '∻', - hookleftarrow: '↩', - hookrightarrow: '↪', - hopf: '𝕙', - horbar: '―', - hscr: '𝒽', - hslash: 'ℏ', - hstrok: 'ħ', - hybull: '⁃', - hyphen: '‐', - iacute: 'í', - ic: '⁣', - icirc: 'î', - icy: 'и', - iecy: 'е', - iexcl: '¡', - iff: '⇔', - ifr: '𝔦', - igrave: 'ì', - ii: 'ⅈ', - iiiint: '⨌', - iiint: '∭', - iinfin: '⧜', - iiota: '℩', - ijlig: 'ij', - imacr: 'ī', - image: 'ℑ', - imagline: 'ℐ', - imagpart: 'ℑ', - imath: 'ı', - imof: '⊷', - imped: 'Ƶ', - in: '∈', - incare: '℅', - infin: '∞', - infintie: '⧝', - inodot: 'ı', - int: '∫', - intcal: '⊺', - integers: 'ℤ', - intercal: '⊺', - intlarhk: '⨗', - intprod: '⨼', - iocy: 'ё', - iogon: 'į', - iopf: '𝕚', - iota: 'ι', - iprod: '⨼', - iquest: '¿', - iscr: '𝒾', - isin: '∈', - isinE: '⋹', - isindot: '⋵', - isins: '⋴', - isinsv: '⋳', - isinv: '∈', - it: '⁢', - itilde: 'ĩ', - iukcy: 'і', - iuml: 'ï', - jcirc: 'ĵ', - jcy: 'й', - jfr: '𝔧', - jmath: 'ȷ', - jopf: '𝕛', - jscr: '𝒿', - jsercy: 'ј', - jukcy: 'є', - kappa: 'κ', - kappav: 'ϰ', - kcedil: 'ķ', - kcy: 'к', - kfr: '𝔨', - kgreen: 'ĸ', - khcy: 'х', - kjcy: 'ќ', - kopf: '𝕜', - kscr: '𝓀', - lAarr: '⇚', - lArr: '⇐', - lAtail: '⤛', - lBarr: '⤎', - lE: '≦', - lEg: '⪋', - lHar: '⥢', - lacute: 'ĺ', - laemptyv: '⦴', - lagran: 'ℒ', - lambda: 'λ', - lang: '⟨', - langd: '⦑', - langle: '⟨', - lap: '⪅', - laquo: '«', - larr: '←', - larrb: '⇤', - larrbfs: '⤟', - larrfs: '⤝', - larrhk: '↩', - larrlp: '↫', - larrpl: '⤹', - larrsim: '⥳', - larrtl: '↢', - lat: '⪫', - latail: '⤙', - late: '⪭', - lates: '⪭︀', - lbarr: '⤌', - lbbrk: '❲', - lbrace: '{', - lbrack: '[', - lbrke: '⦋', - lbrksld: '⦏', - lbrkslu: '⦍', - lcaron: 'ľ', - lcedil: 'ļ', - lceil: '⌈', - lcub: '{', - lcy: 'л', - ldca: '⤶', - ldquo: '“', - ldquor: '„', - ldrdhar: '⥧', - ldrushar: '⥋', - ldsh: '↲', - le: '≤', - leftarrow: '←', - leftarrowtail: '↢', - leftharpoondown: '↽', - leftharpoonup: '↼', - leftleftarrows: '⇇', - leftrightarrow: '↔', - leftrightarrows: '⇆', - leftrightharpoons: '⇋', - leftrightsquigarrow: '↭', - leftthreetimes: '⋋', - leg: '⋚', - leq: '≤', - leqq: '≦', - leqslant: '⩽', - les: '⩽', - lescc: '⪨', - lesdot: '⩿', - lesdoto: '⪁', - lesdotor: '⪃', - lesg: '⋚︀', - lesges: '⪓', - lessapprox: '⪅', - lessdot: '⋖', - lesseqgtr: '⋚', - lesseqqgtr: '⪋', - lessgtr: '≶', - lesssim: '≲', - lfisht: '⥼', - lfloor: '⌊', - lfr: '𝔩', - lg: '≶', - lgE: '⪑', - lhard: '↽', - lharu: '↼', - lharul: '⥪', - lhblk: '▄', - ljcy: 'љ', - ll: '≪', - llarr: '⇇', - llcorner: '⌞', - llhard: '⥫', - lltri: '◺', - lmidot: 'ŀ', - lmoust: '⎰', - lmoustache: '⎰', - lnE: '≨', - lnap: '⪉', - lnapprox: '⪉', - lne: '⪇', - lneq: '⪇', - lneqq: '≨', - lnsim: '⋦', - loang: '⟬', - loarr: '⇽', - lobrk: '⟦', - longleftarrow: '⟵', - longleftrightarrow: '⟷', - longmapsto: '⟼', - longrightarrow: '⟶', - looparrowleft: '↫', - looparrowright: '↬', - lopar: '⦅', - lopf: '𝕝', - loplus: '⨭', - lotimes: '⨴', - lowast: '∗', - lowbar: '_', - loz: '◊', - lozenge: '◊', - lozf: '⧫', - lpar: '(', - lparlt: '⦓', - lrarr: '⇆', - lrcorner: '⌟', - lrhar: '⇋', - lrhard: '⥭', - lrm: '‎', - lrtri: '⊿', - lsaquo: '‹', - lscr: '𝓁', - lsh: '↰', - lsim: '≲', - lsime: '⪍', - lsimg: '⪏', - lsqb: '[', - lsquo: '‘', - lsquor: '‚', - lstrok: 'ł', - lt: '<', - ltcc: '⪦', - ltcir: '⩹', - ltdot: '⋖', - lthree: '⋋', - ltimes: '⋉', - ltlarr: '⥶', - ltquest: '⩻', - ltrPar: '⦖', - ltri: '◃', - ltrie: '⊴', - ltrif: '◂', - lurdshar: '⥊', - luruhar: '⥦', - lvertneqq: '≨︀', - lvnE: '≨︀', - mDDot: '∺', - macr: '¯', - male: '♂', - malt: '✠', - maltese: '✠', - map: '↦', - mapsto: '↦', - mapstodown: '↧', - mapstoleft: '↤', - mapstoup: '↥', - marker: '▮', - mcomma: '⨩', - mcy: 'м', - mdash: '—', - measuredangle: '∡', - mfr: '𝔪', - mho: '℧', - micro: 'µ', - mid: '∣', - midast: '*', - midcir: '⫰', - middot: '·', - minus: '−', - minusb: '⊟', - minusd: '∸', - minusdu: '⨪', - mlcp: '⫛', - mldr: '…', - mnplus: '∓', - models: '⊧', - mopf: '𝕞', - mp: '∓', - mscr: '𝓂', - mstpos: '∾', - mu: 'μ', - multimap: '⊸', - mumap: '⊸', - nGg: '⋙̸', - nGt: '≫⃒', - nGtv: '≫̸', - nLeftarrow: '⇍', - nLeftrightarrow: '⇎', - nLl: '⋘̸', - nLt: '≪⃒', - nLtv: '≪̸', - nRightarrow: '⇏', - nVDash: '⊯', - nVdash: '⊮', - nabla: '∇', - nacute: 'ń', - nang: '∠⃒', - nap: '≉', - napE: '⩰̸', - napid: '≋̸', - napos: 'ʼn', - napprox: '≉', - natur: '♮', - natural: '♮', - naturals: 'ℕ', - nbsp: ' ', - nbump: '≎̸', - nbumpe: '≏̸', - ncap: '⩃', - ncaron: 'ň', - ncedil: 'ņ', - ncong: '≇', - ncongdot: '⩭̸', - ncup: '⩂', - ncy: 'н', - ndash: '–', - ne: '≠', - neArr: '⇗', - nearhk: '⤤', - nearr: '↗', - nearrow: '↗', - nedot: '≐̸', - nequiv: '≢', - nesear: '⤨', - nesim: '≂̸', - nexist: '∄', - nexists: '∄', - nfr: '𝔫', - ngE: '≧̸', - nge: '≱', - ngeq: '≱', - ngeqq: '≧̸', - ngeqslant: '⩾̸', - nges: '⩾̸', - ngsim: '≵', - ngt: '≯', - ngtr: '≯', - nhArr: '⇎', - nharr: '↮', - nhpar: '⫲', - ni: '∋', - nis: '⋼', - nisd: '⋺', - niv: '∋', - njcy: 'њ', - nlArr: '⇍', - nlE: '≦̸', - nlarr: '↚', - nldr: '‥', - nle: '≰', - nleftarrow: '↚', - nleftrightarrow: '↮', - nleq: '≰', - nleqq: '≦̸', - nleqslant: '⩽̸', - nles: '⩽̸', - nless: '≮', - nlsim: '≴', - nlt: '≮', - nltri: '⋪', - nltrie: '⋬', - nmid: '∤', - nopf: '𝕟', - not: '¬', - notin: '∉', - notinE: '⋹̸', - notindot: '⋵̸', - notinva: '∉', - notinvb: '⋷', - notinvc: '⋶', - notni: '∌', - notniva: '∌', - notnivb: '⋾', - notnivc: '⋽', - npar: '∦', - nparallel: '∦', - nparsl: '⫽⃥', - npart: '∂̸', - npolint: '⨔', - npr: '⊀', - nprcue: '⋠', - npre: '⪯̸', - nprec: '⊀', - npreceq: '⪯̸', - nrArr: '⇏', - nrarr: '↛', - nrarrc: '⤳̸', - nrarrw: '↝̸', - nrightarrow: '↛', - nrtri: '⋫', - nrtrie: '⋭', - nsc: '⊁', - nsccue: '⋡', - nsce: '⪰̸', - nscr: '𝓃', - nshortmid: '∤', - nshortparallel: '∦', - nsim: '≁', - nsime: '≄', - nsimeq: '≄', - nsmid: '∤', - nspar: '∦', - nsqsube: '⋢', - nsqsupe: '⋣', - nsub: '⊄', - nsubE: '⫅̸', - nsube: '⊈', - nsubset: '⊂⃒', - nsubseteq: '⊈', - nsubseteqq: '⫅̸', - nsucc: '⊁', - nsucceq: '⪰̸', - nsup: '⊅', - nsupE: '⫆̸', - nsupe: '⊉', - nsupset: '⊃⃒', - nsupseteq: '⊉', - nsupseteqq: '⫆̸', - ntgl: '≹', - ntilde: 'ñ', - ntlg: '≸', - ntriangleleft: '⋪', - ntrianglelefteq: '⋬', - ntriangleright: '⋫', - ntrianglerighteq: '⋭', - nu: 'ν', - num: '#', - numero: '№', - numsp: ' ', - nvDash: '⊭', - nvHarr: '⤄', - nvap: '≍⃒', - nvdash: '⊬', - nvge: '≥⃒', - nvgt: '>⃒', - nvinfin: '⧞', - nvlArr: '⤂', - nvle: '≤⃒', - nvlt: '<⃒', - nvltrie: '⊴⃒', - nvrArr: '⤃', - nvrtrie: '⊵⃒', - nvsim: '∼⃒', - nwArr: '⇖', - nwarhk: '⤣', - nwarr: '↖', - nwarrow: '↖', - nwnear: '⤧', - oS: 'Ⓢ', - oacute: 'ó', - oast: '⊛', - ocir: '⊚', - ocirc: 'ô', - ocy: 'о', - odash: '⊝', - odblac: 'ő', - odiv: '⨸', - odot: '⊙', - odsold: '⦼', - oelig: 'œ', - ofcir: '⦿', - ofr: '𝔬', - ogon: '˛', - ograve: 'ò', - ogt: '⧁', - ohbar: '⦵', - ohm: 'Ω', - oint: '∮', - olarr: '↺', - olcir: '⦾', - olcross: '⦻', - oline: '‾', - olt: '⧀', - omacr: 'ō', - omega: 'ω', - omicron: 'ο', - omid: '⦶', - ominus: '⊖', - oopf: '𝕠', - opar: '⦷', - operp: '⦹', - oplus: '⊕', - or: '∨', - orarr: '↻', - ord: '⩝', - order: 'ℴ', - orderof: 'ℴ', - ordf: 'ª', - ordm: 'º', - origof: '⊶', - oror: '⩖', - orslope: '⩗', - orv: '⩛', - oscr: 'ℴ', - oslash: 'ø', - osol: '⊘', - otilde: 'õ', - otimes: '⊗', - otimesas: '⨶', - ouml: 'ö', - ovbar: '⌽', - par: '∥', - para: '¶', - parallel: '∥', - parsim: '⫳', - parsl: '⫽', - part: '∂', - pcy: 'п', - percnt: '%', - period: '.', - permil: '‰', - perp: '⊥', - pertenk: '‱', - pfr: '𝔭', - phi: 'φ', - phiv: 'ϕ', - phmmat: 'ℳ', - phone: '☎', - pi: 'π', - pitchfork: '⋔', - piv: 'ϖ', - planck: 'ℏ', - planckh: 'ℎ', - plankv: 'ℏ', - plus: '+', - plusacir: '⨣', - plusb: '⊞', - pluscir: '⨢', - plusdo: '∔', - plusdu: '⨥', - pluse: '⩲', - plusmn: '±', - plussim: '⨦', - plustwo: '⨧', - pm: '±', - pointint: '⨕', - popf: '𝕡', - pound: '£', - pr: '≺', - prE: '⪳', - prap: '⪷', - prcue: '≼', - pre: '⪯', - prec: '≺', - precapprox: '⪷', - preccurlyeq: '≼', - preceq: '⪯', - precnapprox: '⪹', - precneqq: '⪵', - precnsim: '⋨', - precsim: '≾', - prime: '′', - primes: 'ℙ', - prnE: '⪵', - prnap: '⪹', - prnsim: '⋨', - prod: '∏', - profalar: '⌮', - profline: '⌒', - profsurf: '⌓', - prop: '∝', - propto: '∝', - prsim: '≾', - prurel: '⊰', - pscr: '𝓅', - psi: 'ψ', - puncsp: ' ', - qfr: '𝔮', - qint: '⨌', - qopf: '𝕢', - qprime: '⁗', - qscr: '𝓆', - quaternions: 'ℍ', - quatint: '⨖', - quest: '?', - questeq: '≟', - quot: '"', - rAarr: '⇛', - rArr: '⇒', - rAtail: '⤜', - rBarr: '⤏', - rHar: '⥤', - race: '∽̱', - racute: 'ŕ', - radic: '√', - raemptyv: '⦳', - rang: '⟩', - rangd: '⦒', - range: '⦥', - rangle: '⟩', - raquo: '»', - rarr: '→', - rarrap: '⥵', - rarrb: '⇥', - rarrbfs: '⤠', - rarrc: '⤳', - rarrfs: '⤞', - rarrhk: '↪', - rarrlp: '↬', - rarrpl: '⥅', - rarrsim: '⥴', - rarrtl: '↣', - rarrw: '↝', - ratail: '⤚', - ratio: '∶', - rationals: 'ℚ', - rbarr: '⤍', - rbbrk: '❳', - rbrace: '}', - rbrack: ']', - rbrke: '⦌', - rbrksld: '⦎', - rbrkslu: '⦐', - rcaron: 'ř', - rcedil: 'ŗ', - rceil: '⌉', - rcub: '}', - rcy: 'р', - rdca: '⤷', - rdldhar: '⥩', - rdquo: '”', - rdquor: '”', - rdsh: '↳', - real: 'ℜ', - realine: 'ℛ', - realpart: 'ℜ', - reals: 'ℝ', - rect: '▭', - reg: '®', - rfisht: '⥽', - rfloor: '⌋', - rfr: '𝔯', - rhard: '⇁', - rharu: '⇀', - rharul: '⥬', - rho: 'ρ', - rhov: 'ϱ', - rightarrow: '→', - rightarrowtail: '↣', - rightharpoondown: '⇁', - rightharpoonup: '⇀', - rightleftarrows: '⇄', - rightleftharpoons: '⇌', - rightrightarrows: '⇉', - rightsquigarrow: '↝', - rightthreetimes: '⋌', - ring: '˚', - risingdotseq: '≓', - rlarr: '⇄', - rlhar: '⇌', - rlm: '‏', - rmoust: '⎱', - rmoustache: '⎱', - rnmid: '⫮', - roang: '⟭', - roarr: '⇾', - robrk: '⟧', - ropar: '⦆', - ropf: '𝕣', - roplus: '⨮', - rotimes: '⨵', - rpar: ')', - rpargt: '⦔', - rppolint: '⨒', - rrarr: '⇉', - rsaquo: '›', - rscr: '𝓇', - rsh: '↱', - rsqb: ']', - rsquo: '’', - rsquor: '’', - rthree: '⋌', - rtimes: '⋊', - rtri: '▹', - rtrie: '⊵', - rtrif: '▸', - rtriltri: '⧎', - ruluhar: '⥨', - rx: '℞', - sacute: 'ś', - sbquo: '‚', - sc: '≻', - scE: '⪴', - scap: '⪸', - scaron: 'š', - sccue: '≽', - sce: '⪰', - scedil: 'ş', - scirc: 'ŝ', - scnE: '⪶', - scnap: '⪺', - scnsim: '⋩', - scpolint: '⨓', - scsim: '≿', - scy: 'с', - sdot: '⋅', - sdotb: '⊡', - sdote: '⩦', - seArr: '⇘', - searhk: '⤥', - searr: '↘', - searrow: '↘', - sect: '§', - semi: ';', - seswar: '⤩', - setminus: '∖', - setmn: '∖', - sext: '✶', - sfr: '𝔰', - sfrown: '⌢', - sharp: '♯', - shchcy: 'щ', - shcy: 'ш', - shortmid: '∣', - shortparallel: '∥', - shy: '­', - sigma: 'σ', - sigmaf: 'ς', - sigmav: 'ς', - sim: '∼', - simdot: '⩪', - sime: '≃', - simeq: '≃', - simg: '⪞', - simgE: '⪠', - siml: '⪝', - simlE: '⪟', - simne: '≆', - simplus: '⨤', - simrarr: '⥲', - slarr: '←', - smallsetminus: '∖', - smashp: '⨳', - smeparsl: '⧤', - smid: '∣', - smile: '⌣', - smt: '⪪', - smte: '⪬', - smtes: '⪬︀', - softcy: 'ь', - sol: '/', - solb: '⧄', - solbar: '⌿', - sopf: '𝕤', - spades: '♠', - spadesuit: '♠', - spar: '∥', - sqcap: '⊓', - sqcaps: '⊓︀', - sqcup: '⊔', - sqcups: '⊔︀', - sqsub: '⊏', - sqsube: '⊑', - sqsubset: '⊏', - sqsubseteq: '⊑', - sqsup: '⊐', - sqsupe: '⊒', - sqsupset: '⊐', - sqsupseteq: '⊒', - squ: '□', - square: '□', - squarf: '▪', - squf: '▪', - srarr: '→', - sscr: '𝓈', - ssetmn: '∖', - ssmile: '⌣', - sstarf: '⋆', - star: '☆', - starf: '★', - straightepsilon: 'ϵ', - straightphi: 'ϕ', - strns: '¯', - sub: '⊂', - subE: '⫅', - subdot: '⪽', - sube: '⊆', - subedot: '⫃', - submult: '⫁', - subnE: '⫋', - subne: '⊊', - subplus: '⪿', - subrarr: '⥹', - subset: '⊂', - subseteq: '⊆', - subseteqq: '⫅', - subsetneq: '⊊', - subsetneqq: '⫋', - subsim: '⫇', - subsub: '⫕', - subsup: '⫓', - succ: '≻', - succapprox: '⪸', - succcurlyeq: '≽', - succeq: '⪰', - succnapprox: '⪺', - succneqq: '⪶', - succnsim: '⋩', - succsim: '≿', - sum: '∑', - sung: '♪', - sup1: '¹', - sup2: '²', - sup3: '³', - sup: '⊃', - supE: '⫆', - supdot: '⪾', - supdsub: '⫘', - supe: '⊇', - supedot: '⫄', - suphsol: '⟉', - suphsub: '⫗', - suplarr: '⥻', - supmult: '⫂', - supnE: '⫌', - supne: '⊋', - supplus: '⫀', - supset: '⊃', - supseteq: '⊇', - supseteqq: '⫆', - supsetneq: '⊋', - supsetneqq: '⫌', - supsim: '⫈', - supsub: '⫔', - supsup: '⫖', - swArr: '⇙', - swarhk: '⤦', - swarr: '↙', - swarrow: '↙', - swnwar: '⤪', - szlig: 'ß', - target: '⌖', - tau: 'τ', - tbrk: '⎴', - tcaron: 'ť', - tcedil: 'ţ', - tcy: 'т', - tdot: '⃛', - telrec: '⌕', - tfr: '𝔱', - there4: '∴', - therefore: '∴', - theta: 'θ', - thetasym: 'ϑ', - thetav: 'ϑ', - thickapprox: '≈', - thicksim: '∼', - thinsp: ' ', - thkap: '≈', - thksim: '∼', - thorn: 'þ', - tilde: '˜', - times: '×', - timesb: '⊠', - timesbar: '⨱', - timesd: '⨰', - tint: '∭', - toea: '⤨', - top: '⊤', - topbot: '⌶', - topcir: '⫱', - topf: '𝕥', - topfork: '⫚', - tosa: '⤩', - tprime: '‴', - trade: '™', - triangle: '▵', - triangledown: '▿', - triangleleft: '◃', - trianglelefteq: '⊴', - triangleq: '≜', - triangleright: '▹', - trianglerighteq: '⊵', - tridot: '◬', - trie: '≜', - triminus: '⨺', - triplus: '⨹', - trisb: '⧍', - tritime: '⨻', - trpezium: '⏢', - tscr: '𝓉', - tscy: 'ц', - tshcy: 'ћ', - tstrok: 'ŧ', - twixt: '≬', - twoheadleftarrow: '↞', - twoheadrightarrow: '↠', - uArr: '⇑', - uHar: '⥣', - uacute: 'ú', - uarr: '↑', - ubrcy: 'ў', - ubreve: 'ŭ', - ucirc: 'û', - ucy: 'у', - udarr: '⇅', - udblac: 'ű', - udhar: '⥮', - ufisht: '⥾', - ufr: '𝔲', - ugrave: 'ù', - uharl: '↿', - uharr: '↾', - uhblk: '▀', - ulcorn: '⌜', - ulcorner: '⌜', - ulcrop: '⌏', - ultri: '◸', - umacr: 'ū', - uml: '¨', - uogon: 'ų', - uopf: '𝕦', - uparrow: '↑', - updownarrow: '↕', - upharpoonleft: '↿', - upharpoonright: '↾', - uplus: '⊎', - upsi: 'υ', - upsih: 'ϒ', - upsilon: 'υ', - upuparrows: '⇈', - urcorn: '⌝', - urcorner: '⌝', - urcrop: '⌎', - uring: 'ů', - urtri: '◹', - uscr: '𝓊', - utdot: '⋰', - utilde: 'ũ', - utri: '▵', - utrif: '▴', - uuarr: '⇈', - uuml: 'ü', - uwangle: '⦧', - vArr: '⇕', - vBar: '⫨', - vBarv: '⫩', - vDash: '⊨', - vangrt: '⦜', - varepsilon: 'ϵ', - varkappa: 'ϰ', - varnothing: '∅', - varphi: 'ϕ', - varpi: 'ϖ', - varpropto: '∝', - varr: '↕', - varrho: 'ϱ', - varsigma: 'ς', - varsubsetneq: '⊊︀', - varsubsetneqq: '⫋︀', - varsupsetneq: '⊋︀', - varsupsetneqq: '⫌︀', - vartheta: 'ϑ', - vartriangleleft: '⊲', - vartriangleright: '⊳', - vcy: 'в', - vdash: '⊢', - vee: '∨', - veebar: '⊻', - veeeq: '≚', - vellip: '⋮', - verbar: '|', - vert: '|', - vfr: '𝔳', - vltri: '⊲', - vnsub: '⊂⃒', - vnsup: '⊃⃒', - vopf: '𝕧', - vprop: '∝', - vrtri: '⊳', - vscr: '𝓋', - vsubnE: '⫋︀', - vsubne: '⊊︀', - vsupnE: '⫌︀', - vsupne: '⊋︀', - vzigzag: '⦚', - wcirc: 'ŵ', - wedbar: '⩟', - wedge: '∧', - wedgeq: '≙', - weierp: '℘', - wfr: '𝔴', - wopf: '𝕨', - wp: '℘', - wr: '≀', - wreath: '≀', - wscr: '𝓌', - xcap: '⋂', - xcirc: '◯', - xcup: '⋃', - xdtri: '▽', - xfr: '𝔵', - xhArr: '⟺', - xharr: '⟷', - xi: 'ξ', - xlArr: '⟸', - xlarr: '⟵', - xmap: '⟼', - xnis: '⋻', - xodot: '⨀', - xopf: '𝕩', - xoplus: '⨁', - xotime: '⨂', - xrArr: '⟹', - xrarr: '⟶', - xscr: '𝓍', - xsqcup: '⨆', - xuplus: '⨄', - xutri: '△', - xvee: '⋁', - xwedge: '⋀', - yacute: 'ý', - yacy: 'я', - ycirc: 'ŷ', - ycy: 'ы', - yen: '¥', - yfr: '𝔶', - yicy: 'ї', - yopf: '𝕪', - yscr: '𝓎', - yucy: 'ю', - yuml: 'ÿ', - zacute: 'ź', - zcaron: 'ž', - zcy: 'з', - zdot: 'ż', - zeetrf: 'ℨ', - zeta: 'ζ', - zfr: '𝔷', - zhcy: 'ж', - zigrarr: '⇝', - zopf: '𝕫', - zscr: '𝓏', - zwj: '‍', - zwnj: '‌' -} - -;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js - - -const own = {}.hasOwnProperty - -/** - * Decode a single character reference (without the `&` or `;`). - * You probably only need this when you’re building parsers yourself that follow - * different rules compared to HTML. - * This is optimized to be tiny in browsers. - * - * @param {string} value - * `notin` (named), `#123` (deci), `#x123` (hexa). - * @returns {string|false} - * Decoded reference. - */ -function decodeNamedCharacterReference(value) { - return own.call(characterEntities, value) ? characterEntities[value] : false -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const characterReference = { - name: 'characterReference', - tokenize: tokenizeCharacterReference -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterReference(effects, ok, nok) { - const self = this - let size = 0 - /** @type {number} */ - let max - /** @type {(code: Code) => boolean} */ - let test - return start - - /** - * Start of character reference. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterReference') - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - return open - } - - /** - * After `&`, at `#` for numeric references or alphanumeric for named - * references. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 35) { - effects.enter('characterReferenceMarkerNumeric') - effects.consume(code) - effects.exit('characterReferenceMarkerNumeric') - return numeric - } - effects.enter('characterReferenceValue') - max = 31 - test = asciiAlphanumeric - return value(code) - } - - /** - * After `#`, at `x` for hexadecimals or digit for decimals. - * - * ```markdown - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function numeric(code) { - if (code === 88 || code === 120) { - effects.enter('characterReferenceMarkerHexadecimal') - effects.consume(code) - effects.exit('characterReferenceMarkerHexadecimal') - effects.enter('characterReferenceValue') - max = 6 - test = asciiHexDigit - return value - } - effects.enter('characterReferenceValue') - max = 7 - test = asciiDigit - return value(code) - } - - /** - * After markers (`&#x`, `&#`, or `&`), in value, before `;`. - * - * The character reference kind defines what and how many characters are - * allowed. - * - * ```markdown - * > | a&b - * ^^^ - * > | a{b - * ^^^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function value(code) { - if (code === 59 && size) { - const token = effects.exit('characterReferenceValue') - if ( - test === asciiAlphanumeric && - !decodeNamedCharacterReference(self.sliceSerialize(token)) - ) { - return nok(code) - } - - // To do: `markdown-rs` uses a different name: - // `CharacterReferenceMarkerSemi`. - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - effects.exit('characterReference') - return ok - } - if (test(code) && size++ < max) { - effects.consume(code) - return value - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const characterEscape = { - name: 'characterEscape', - tokenize: tokenizeCharacterEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterEscape(effects, ok, nok) { - return start - - /** - * Start of character escape. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterEscape') - effects.enter('escapeMarker') - effects.consume(code) - effects.exit('escapeMarker') - return inside - } - - /** - * After `\`, at punctuation. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - // ASCII punctuation. - if (asciiPunctuation(code)) { - effects.enter('characterEscapeValue') - effects.consume(code) - effects.exit('characterEscapeValue') - effects.exit('characterEscape') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const lineEnding = { - name: 'lineEnding', - tokenize: tokenizeLineEnding -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLineEnding(effects, ok) { - return start - - /** @type {State} */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, ok, 'linePrefix') - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - - -/** @type {Construct} */ -const labelEnd = { - name: 'labelEnd', - tokenize: tokenizeLabelEnd, - resolveTo: resolveToLabelEnd, - resolveAll: resolveAllLabelEnd -} - -/** @type {Construct} */ -const resourceConstruct = { - tokenize: tokenizeResource -} -/** @type {Construct} */ -const referenceFullConstruct = { - tokenize: tokenizeReferenceFull -} -/** @type {Construct} */ -const referenceCollapsedConstruct = { - tokenize: tokenizeReferenceCollapsed -} - -/** @type {Resolver} */ -function resolveAllLabelEnd(events) { - let index = -1 - while (++index < events.length) { - const token = events[index][1] - if ( - token.type === 'labelImage' || - token.type === 'labelLink' || - token.type === 'labelEnd' - ) { - // Remove the marker. - events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) - token.type = 'data' - index++ - } - } - return events -} - -/** @type {Resolver} */ -function resolveToLabelEnd(events, context) { - let index = events.length - let offset = 0 - /** @type {Token} */ - let token - /** @type {number | undefined} */ - let open - /** @type {number | undefined} */ - let close - /** @type {Array<Event>} */ - let media - - // Find an opening. - while (index--) { - token = events[index][1] - if (open) { - // If we see another link, or inactive link label, we’ve been here before. - if ( - token.type === 'link' || - (token.type === 'labelLink' && token._inactive) - ) { - break - } - - // Mark other link openings as inactive, as we can’t have links in - // links. - if (events[index][0] === 'enter' && token.type === 'labelLink') { - token._inactive = true - } - } else if (close) { - if ( - events[index][0] === 'enter' && - (token.type === 'labelImage' || token.type === 'labelLink') && - !token._balanced - ) { - open = index - if (token.type !== 'labelLink') { - offset = 2 - break - } - } - } else if (token.type === 'labelEnd') { - close = index - } - } - const group = { - type: events[open][1].type === 'labelLink' ? 'link' : 'image', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - const label = { - type: 'label', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[close][1].end) - } - const text = { - type: 'labelText', - start: Object.assign({}, events[open + offset + 2][1].end), - end: Object.assign({}, events[close - 2][1].start) - } - media = [ - ['enter', group, context], - ['enter', label, context] - ] - - // Opening marker. - media = push(media, events.slice(open + 1, open + offset + 3)) - - // Text open. - media = push(media, [['enter', text, context]]) - - // Always populated by defaults. - - // Between. - media = push( - media, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + offset + 4, close - 3), - context - ) - ) - - // Text close, marker close, label close. - media = push(media, [ - ['exit', text, context], - events[close - 2], - events[close - 1], - ['exit', label, context] - ]) - - // Reference, resource, or so. - media = push(media, events.slice(close + 1)) - - // Media close. - media = push(media, [['exit', group, context]]) - splice(events, open, events.length, media) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelEnd(effects, ok, nok) { - const self = this - let index = self.events.length - /** @type {Token} */ - let labelStart - /** @type {boolean} */ - let defined - - // Find an opening. - while (index--) { - if ( - (self.events[index][1].type === 'labelImage' || - self.events[index][1].type === 'labelLink') && - !self.events[index][1]._balanced - ) { - labelStart = self.events[index][1] - break - } - } - return start - - /** - * Start of label end. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ``` - * - * @type {State} - */ - function start(code) { - // If there is not an okay opening. - if (!labelStart) { - return nok(code) - } - - // If the corresponding label (link) start is marked as inactive, - // it means we’d be wrapping a link, like this: - // - // ```markdown - // > | a [b [c](d) e](f) g. - // ^ - // ``` - // - // We can’t have that, so it’s just balanced brackets. - if (labelStart._inactive) { - return labelEndNok(code) - } - defined = self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize({ - start: labelStart.end, - end: self.now() - }) - ) - ) - effects.enter('labelEnd') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelEnd') - return after - } - - /** - * After `]`. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - // Note: `markdown-rs` also parses GFM footnotes here, which for us is in - // an extension. - - // Resource (`[asd](fgh)`)? - if (code === 40) { - return effects.attempt( - resourceConstruct, - labelEndOk, - defined ? labelEndOk : labelEndNok - )(code) - } - - // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? - if (code === 91) { - return effects.attempt( - referenceFullConstruct, - labelEndOk, - defined ? referenceNotFull : labelEndNok - )(code) - } - - // Shortcut (`[asd]`) reference? - return defined ? labelEndOk(code) : labelEndNok(code) - } - - /** - * After `]`, at `[`, but not at a full reference. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function referenceNotFull(code) { - return effects.attempt( - referenceCollapsedConstruct, - labelEndOk, - labelEndNok - )(code) - } - - /** - * Done, we found something. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndOk(code) { - // Note: `markdown-rs` does a bunch of stuff here. - return ok(code) - } - - /** - * Done, it’s nothing. - * - * There was an okay opening, but we didn’t match anything. - * - * ```markdown - * > | [a](b c - * ^ - * > | [a][b c - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndNok(code) { - labelStart._balanced = true - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeResource(effects, ok, nok) { - return resourceStart - - /** - * At a resource. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceStart(code) { - effects.enter('resource') - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - return resourceBefore - } - - /** - * In resource, after `(`, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceOpen)(code) - : resourceOpen(code) - } - - /** - * In resource, after optional whitespace, at `)` or a destination. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceOpen(code) { - if (code === 41) { - return resourceEnd(code) - } - return factoryDestination( - effects, - resourceDestinationAfter, - resourceDestinationMissing, - 'resourceDestination', - 'resourceDestinationLiteral', - 'resourceDestinationLiteralMarker', - 'resourceDestinationRaw', - 'resourceDestinationString', - 32 - )(code) - } - - /** - * In resource, after destination, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceBetween)(code) - : resourceEnd(code) - } - - /** - * At invalid destination. - * - * ```markdown - * > | [a](<<) b - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationMissing(code) { - return nok(code) - } - - /** - * In resource, after destination and whitespace, at `(` or title. - * - * ```markdown - * > | [a](b ) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBetween(code) { - if (code === 34 || code === 39 || code === 40) { - return factoryTitle( - effects, - resourceTitleAfter, - nok, - 'resourceTitle', - 'resourceTitleMarker', - 'resourceTitleString' - )(code) - } - return resourceEnd(code) - } - - /** - * In resource, after title, at optional whitespace. - * - * ```markdown - * > | [a](b "c") d - * ^ - * ``` - * - * @type {State} - */ - function resourceTitleAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceEnd)(code) - : resourceEnd(code) - } - - /** - * In resource, at `)`. - * - * ```markdown - * > | [a](b) d - * ^ - * ``` - * - * @type {State} - */ - function resourceEnd(code) { - if (code === 41) { - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - effects.exit('resource') - return ok - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceFull(effects, ok, nok) { - const self = this - return referenceFull - - /** - * In a reference (full), at the `[`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFull(code) { - return factoryLabel.call( - self, - effects, - referenceFullAfter, - referenceFullMissing, - 'reference', - 'referenceMarker', - 'referenceString' - )(code) - } - - /** - * In a reference (full), after `]`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullAfter(code) { - return self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - ) - ? ok(code) - : nok(code) - } - - /** - * In reference (full) that was missing. - * - * ```markdown - * > | [a][b d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullMissing(code) { - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceCollapsed(effects, ok, nok) { - return referenceCollapsedStart - - /** - * In reference (collapsed), at `[`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedStart(code) { - // We only attempt a collapsed label if there’s a `[`. - - effects.enter('reference') - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - return referenceCollapsedOpen - } - - /** - * In reference (collapsed), at `]`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedOpen(code) { - if (code === 93) { - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - effects.exit('reference') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartImage = { - name: 'labelStartImage', - tokenize: tokenizeLabelStartImage, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartImage(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (image) start. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelImage') - effects.enter('labelImageMarker') - effects.consume(code) - effects.exit('labelImageMarker') - return open - } - - /** - * After `!`, at `[`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 91) { - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelImage') - return after - } - return nok(code) - } - - /** - * After `![`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * This is needed in because, when GFM footnotes are enabled, images never - * form when started with a `^`. - * Instead, links form: - * - * ```markdown - * ![^a](b) - * - * ![^a][b] - * - * [b]: c - * ``` - * - * ```html - * <p>!<a href=\"b\">^a</a></p> - * <p>!<a href=\"c\">^a</a></p> - * ``` - * - * @type {State} - */ - function after(code) { - // To do: use a new field to do this, this is still needed for - // `micromark-extension-gfm-footnote`, but the `label-start-link` - // behavior isn’t. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -function classifyCharacter(code) { - if ( - code === null || - markdownLineEndingOrSpace(code) || - unicodeWhitespace(code) - ) { - return 1 - } - if (unicodePunctuation(code)) { - return 2 - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const attention = { - name: 'attention', - tokenize: tokenizeAttention, - resolveAll: resolveAllAttention -} - -/** - * Take all events and resolve attention to emphasis or strong. - * - * @type {Resolver} - */ -function resolveAllAttention(events, context) { - let index = -1 - /** @type {number} */ - let open - /** @type {Token} */ - let group - /** @type {Token} */ - let text - /** @type {Token} */ - let openingSequence - /** @type {Token} */ - let closingSequence - /** @type {number} */ - let use - /** @type {Array<Event>} */ - let nextEvents - /** @type {number} */ - let offset - - // Walk through all events. - // - // Note: performance of this is fine on an mb of normal markdown, but it’s - // a bottleneck for malicious stuff. - while (++index < events.length) { - // Find a token that can close. - if ( - events[index][0] === 'enter' && - events[index][1].type === 'attentionSequence' && - events[index][1]._close - ) { - open = index - - // Now walk back to find an opener. - while (open--) { - // Find a token that can open the closer. - if ( - events[open][0] === 'exit' && - events[open][1].type === 'attentionSequence' && - events[open][1]._open && - // If the markers are the same: - context.sliceSerialize(events[open][1]).charCodeAt(0) === - context.sliceSerialize(events[index][1]).charCodeAt(0) - ) { - // If the opening can close or the closing can open, - // and the close size *is not* a multiple of three, - // but the sum of the opening and closing size *is* multiple of three, - // then don’t match. - if ( - (events[open][1]._close || events[index][1]._open) && - (events[index][1].end.offset - events[index][1].start.offset) % 3 && - !( - (events[open][1].end.offset - - events[open][1].start.offset + - events[index][1].end.offset - - events[index][1].start.offset) % - 3 - ) - ) { - continue - } - - // Number of markers to use from the sequence. - use = - events[open][1].end.offset - events[open][1].start.offset > 1 && - events[index][1].end.offset - events[index][1].start.offset > 1 - ? 2 - : 1 - const start = Object.assign({}, events[open][1].end) - const end = Object.assign({}, events[index][1].start) - movePoint(start, -use) - movePoint(end, use) - openingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start, - end: Object.assign({}, events[open][1].end) - } - closingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start: Object.assign({}, events[index][1].start), - end - } - text = { - type: use > 1 ? 'strongText' : 'emphasisText', - start: Object.assign({}, events[open][1].end), - end: Object.assign({}, events[index][1].start) - } - group = { - type: use > 1 ? 'strong' : 'emphasis', - start: Object.assign({}, openingSequence.start), - end: Object.assign({}, closingSequence.end) - } - events[open][1].end = Object.assign({}, openingSequence.start) - events[index][1].start = Object.assign({}, closingSequence.end) - nextEvents = [] - - // If there are more markers in the opening, add them before. - if (events[open][1].end.offset - events[open][1].start.offset) { - nextEvents = push(nextEvents, [ - ['enter', events[open][1], context], - ['exit', events[open][1], context] - ]) - } - - // Opening. - nextEvents = push(nextEvents, [ - ['enter', group, context], - ['enter', openingSequence, context], - ['exit', openingSequence, context], - ['enter', text, context] - ]) - - // Always populated by defaults. - - // Between. - nextEvents = push( - nextEvents, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + 1, index), - context - ) - ) - - // Closing. - nextEvents = push(nextEvents, [ - ['exit', text, context], - ['enter', closingSequence, context], - ['exit', closingSequence, context], - ['exit', group, context] - ]) - - // If there are more markers in the closing, add them after. - if (events[index][1].end.offset - events[index][1].start.offset) { - offset = 2 - nextEvents = push(nextEvents, [ - ['enter', events[index][1], context], - ['exit', events[index][1], context] - ]) - } else { - offset = 0 - } - splice(events, open - 1, index - open + 3, nextEvents) - index = open + nextEvents.length - offset - 2 - break - } - } - } - } - - // Remove remaining sequences. - index = -1 - while (++index < events.length) { - if (events[index][1].type === 'attentionSequence') { - events[index][1].type = 'data' - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAttention(effects, ok) { - const attentionMarkers = this.parser.constructs.attentionMarkers.null - const previous = this.previous - const before = classifyCharacter(previous) - - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Before a sequence. - * - * ```markdown - * > | ** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - marker = code - effects.enter('attentionSequence') - return inside(code) - } - - /** - * In a sequence. - * - * ```markdown - * > | ** - * ^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - const token = effects.exit('attentionSequence') - - // To do: next major: move this to resolver, just like `markdown-rs`. - const after = classifyCharacter(code) - - // Always populated by defaults. - - const open = - !after || (after === 2 && before) || attentionMarkers.includes(code) - const close = - !before || (before === 2 && after) || attentionMarkers.includes(previous) - token._open = Boolean(marker === 42 ? open : open && (before || !close)) - token._close = Boolean(marker === 42 ? close : close && (after || !open)) - return ok(code) - } -} - -/** - * Move a point a bit. - * - * Note: `move` only works inside lines! It’s not possible to move past other - * chunks (replacement characters, tabs, or line endings). - * - * @param {Point} point - * @param {number} offset - * @returns {void} - */ -function movePoint(point, offset) { - point.column += offset - point.offset += offset - point._bufferIndex += offset -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const autolink = { - name: 'autolink', - tokenize: tokenizeAutolink -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAutolink(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of an autolink. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('autolink') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.enter('autolinkProtocol') - return open - } - - /** - * After `<`, at protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (asciiAlpha(code)) { - effects.consume(code) - return schemeOrEmailAtext - } - return emailAtext(code) - } - - /** - * At second byte of protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function schemeOrEmailAtext(code) { - // ASCII alphanumeric and `+`, `-`, and `.`. - if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { - // Count the previous alphabetical from `open` too. - size = 1 - return schemeInsideOrEmailAtext(code) - } - return emailAtext(code) - } - - /** - * In ambiguous protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function schemeInsideOrEmailAtext(code) { - if (code === 58) { - effects.consume(code) - size = 0 - return urlInside - } - - // ASCII alphanumeric and `+`, `-`, and `.`. - if ( - (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && - size++ < 32 - ) { - effects.consume(code) - return schemeInsideOrEmailAtext - } - size = 0 - return emailAtext(code) - } - - /** - * After protocol, in URL. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * ``` - * - * @type {State} - */ - function urlInside(code) { - if (code === 62) { - effects.exit('autolinkProtocol') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - - // ASCII control, space, or `<`. - if (code === null || code === 32 || code === 60 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return urlInside - } - - /** - * In email atext. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailAtext(code) { - if (code === 64) { - effects.consume(code) - return emailAtSignOrDot - } - if (asciiAtext(code)) { - effects.consume(code) - return emailAtext - } - return nok(code) - } - - /** - * In label, after at-sign or dot. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ ^ - * ``` - * - * @type {State} - */ - function emailAtSignOrDot(code) { - return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) - } - - /** - * In label, where `.` and `>` are allowed. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailLabel(code) { - if (code === 46) { - effects.consume(code) - size = 0 - return emailAtSignOrDot - } - if (code === 62) { - // Exit, then change the token type. - effects.exit('autolinkProtocol').type = 'autolinkEmail' - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - return emailValue(code) - } - - /** - * In label, where `.` and `>` are *not* allowed. - * - * Though, this is also used in `emailLabel` to parse other values. - * - * ```markdown - * > | a<user.name@ex-ample.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailValue(code) { - // ASCII alphanumeric or `-`. - if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { - const next = code === 45 ? emailValue : emailLabel - effects.consume(code) - return next - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const htmlText = { - name: 'htmlText', - tokenize: tokenizeHtmlText -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlText(effects, ok, nok) { - const self = this - /** @type {NonNullable<Code> | undefined} */ - let marker - /** @type {number} */ - let index - /** @type {State} */ - let returnState - return start - - /** - * Start of HTML (text). - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('htmlText') - effects.enter('htmlTextData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | a <b> c - * ^ - * > | a <!doctype> c - * ^ - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - return instruction - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagOpen - } - return nok(code) - } - - /** - * After `<!`, at declaration, comment, or CDATA. - * - * ```markdown - * > | a <!doctype> c - * ^ - * > | a <!--b--> c - * ^ - * > | a <![CDATA[>&<]]> c - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - index = 0 - return cdataOpenInside - } - if (asciiAlpha(code)) { - effects.consume(code) - return declaration - } - return nok(code) - } - - /** - * In a comment, after `<!-`, at another `-`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return nok(code) - } - - /** - * In comment. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function comment(code) { - if (code === null) { - return nok(code) - } - if (code === 45) { - effects.consume(code) - return commentClose - } - if (markdownLineEnding(code)) { - returnState = comment - return lineEndingBefore(code) - } - effects.consume(code) - return comment - } - - /** - * In comment, after `-`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentClose(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return comment(code) - } - - /** - * In comment, after `--`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentEnd(code) { - return code === 62 - ? end(code) - : code === 45 - ? commentClose(code) - : comment(code) - } - - /** - * After `<![`, in CDATA, expecting `CDATA[`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - return index === value.length ? cdata : cdataOpenInside - } - return nok(code) - } - - /** - * In CDATA. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^^^ - * ``` - * - * @type {State} - */ - function cdata(code) { - if (code === null) { - return nok(code) - } - if (code === 93) { - effects.consume(code) - return cdataClose - } - if (markdownLineEnding(code)) { - returnState = cdata - return lineEndingBefore(code) - } - effects.consume(code) - return cdata - } - - /** - * In CDATA, after `]`, at another `]`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataClose(code) { - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In CDATA, after `]]`, at `>`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataEnd(code) { - if (code === 62) { - return end(code) - } - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In declaration. - * - * ```markdown - * > | a <!b> c - * ^ - * ``` - * - * @type {State} - */ - function declaration(code) { - if (code === null || code === 62) { - return end(code) - } - if (markdownLineEnding(code)) { - returnState = declaration - return lineEndingBefore(code) - } - effects.consume(code) - return declaration - } - - /** - * In instruction. - * - * ```markdown - * > | a <?b?> c - * ^ - * ``` - * - * @type {State} - */ - function instruction(code) { - if (code === null) { - return nok(code) - } - if (code === 63) { - effects.consume(code) - return instructionClose - } - if (markdownLineEnding(code)) { - returnState = instruction - return lineEndingBefore(code) - } - effects.consume(code) - return instruction - } - - /** - * In instruction, after `?`, at `>`. - * - * ```markdown - * > | a <?b?> c - * ^ - * ``` - * - * @type {State} - */ - function instructionClose(code) { - return code === 62 ? end(code) : instruction(code) - } - - /** - * After `</`, in closing tag, at tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagClose - } - return nok(code) - } - - /** - * After `</x`, in a tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagClose(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagClose - } - return tagCloseBetween(code) - } - - /** - * In closing tag, after tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseBetween(code) { - if (markdownLineEnding(code)) { - returnState = tagCloseBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagCloseBetween - } - return end(code) - } - - /** - * After `<x`, in opening tag name. - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function tagOpen(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagOpen - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In opening tag, after tag name. - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function tagOpenBetween(code) { - if (code === 47) { - effects.consume(code) - return end - } - - // ASCII alphabetical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return tagOpenAttributeName - } - if (markdownLineEnding(code)) { - returnState = tagOpenBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenBetween - } - return end(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | a <b c> d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeName(code) { - // ASCII alphabetical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return tagOpenAttributeName - } - return tagOpenAttributeNameAfter(code) - } - - /** - * After attribute name, before initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | a <b c> d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeNameAfter - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeNameAfter - } - return tagOpenBetween(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | a <b c=d> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - marker = code - return tagOpenAttributeValueQuoted - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueBefore - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuoted(code) { - if (code === marker) { - effects.consume(code) - marker = undefined - return tagOpenAttributeValueQuotedAfter - } - if (code === null) { - return nok(code) - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueQuoted - return lineEndingBefore(code) - } - effects.consume(code) - return tagOpenAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | a <b c=d> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 60 || - code === 61 || - code === 96 - ) { - return nok(code) - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the end - * of the tag. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In certain circumstances of a tag where only an `>` is allowed. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function end(code) { - if (code === 62) { - effects.consume(code) - effects.exit('htmlTextData') - effects.exit('htmlText') - return ok - } - return nok(code) - } - - /** - * At eol. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * > | a <!--a - * ^ - * | b--> - * ``` - * - * @type {State} - */ - function lineEndingBefore(code) { - effects.exit('htmlTextData') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineEndingAfter - } - - /** - * After eol, at optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a <!--a - * > | b--> - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfter(code) { - // Always populated by defaults. - - return markdownSpace(code) - ? factorySpace( - effects, - lineEndingAfterPrefix, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : lineEndingAfterPrefix(code) - } - - /** - * After eol, after optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a <!--a - * > | b--> - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfterPrefix(code) { - effects.enter('htmlTextData') - return returnState(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartLink = { - name: 'labelStartLink', - tokenize: tokenizeLabelStartLink, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartLink(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (link) start. - * - * ```markdown - * > | a [b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelLink') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelLink') - return after - } - - /** @type {State} */ - function after(code) { - // To do: this isn’t needed in `micromark-extension-gfm-footnote`, - // remove. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const hardBreakEscape = { - name: 'hardBreakEscape', - tokenize: tokenizeHardBreakEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHardBreakEscape(effects, ok, nok) { - return start - - /** - * Start of a hard break (escape). - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('hardBreakEscape') - effects.consume(code) - return after - } - - /** - * After `\`, at eol. - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownLineEnding(code)) { - effects.exit('hardBreakEscape') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Previous} Previous - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const codeText = { - name: 'codeText', - tokenize: tokenizeCodeText, - resolve: resolveCodeText, - previous -} - -// To do: next major: don’t resolve, like `markdown-rs`. -/** @type {Resolver} */ -function resolveCodeText(events) { - let tailExitIndex = events.length - 4 - let headEnterIndex = 3 - /** @type {number} */ - let index - /** @type {number | undefined} */ - let enter - - // If we start and end with an EOL or a space. - if ( - (events[headEnterIndex][1].type === 'lineEnding' || - events[headEnterIndex][1].type === 'space') && - (events[tailExitIndex][1].type === 'lineEnding' || - events[tailExitIndex][1].type === 'space') - ) { - index = headEnterIndex - - // And we have data. - while (++index < tailExitIndex) { - if (events[index][1].type === 'codeTextData') { - // Then we have padding. - events[headEnterIndex][1].type = 'codeTextPadding' - events[tailExitIndex][1].type = 'codeTextPadding' - headEnterIndex += 2 - tailExitIndex -= 2 - break - } - } - } - - // Merge adjacent spaces and data. - index = headEnterIndex - 1 - tailExitIndex++ - while (++index <= tailExitIndex) { - if (enter === undefined) { - if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { - enter = index - } - } else if ( - index === tailExitIndex || - events[index][1].type === 'lineEnding' - ) { - events[enter][1].type = 'codeTextData' - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - tailExitIndex -= index - enter - 2 - index = enter + 2 - } - enter = undefined - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Previous} - */ -function previous(code) { - // If there is a previous code, there will always be a tail. - return ( - code !== 96 || - this.events[this.events.length - 1][1].type === 'characterEscape' - ) -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeText(effects, ok, nok) { - const self = this - let sizeOpen = 0 - /** @type {number} */ - let size - /** @type {Token} */ - let token - return start - - /** - * Start of code (text). - * - * ```markdown - * > | `a` - * ^ - * > | \`a` - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('codeText') - effects.enter('codeTextSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 96) { - effects.consume(code) - sizeOpen++ - return sequenceOpen - } - effects.exit('codeTextSequence') - return between(code) - } - - /** - * Between something and something else. - * - * ```markdown - * > | `a` - * ^^ - * ``` - * - * @type {State} - */ - function between(code) { - // EOF. - if (code === null) { - return nok(code) - } - - // To do: next major: don’t do spaces in resolve, but when compiling, - // like `markdown-rs`. - // Tabs don’t work, and virtual spaces don’t make sense. - if (code === 32) { - effects.enter('space') - effects.consume(code) - effects.exit('space') - return between - } - - // Closing fence? Could also be data. - if (code === 96) { - token = effects.enter('codeTextSequence') - size = 0 - return sequenceClose(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return between - } - - // Data. - effects.enter('codeTextData') - return data(code) - } - - /** - * In data. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if ( - code === null || - code === 32 || - code === 96 || - markdownLineEnding(code) - ) { - effects.exit('codeTextData') - return between(code) - } - effects.consume(code) - return data - } - - /** - * In closing sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - // More. - if (code === 96) { - effects.consume(code) - size++ - return sequenceClose - } - - // Done! - if (size === sizeOpen) { - effects.exit('codeTextSequence') - effects.exit('codeText') - return ok(code) - } - - // More or less accents: mark as data. - token.type = 'codeTextData' - return data(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - */ - - - - -/** @satisfies {Extension['document']} */ -const constructs_document = { - [42]: list, - [43]: list, - [45]: list, - [48]: list, - [49]: list, - [50]: list, - [51]: list, - [52]: list, - [53]: list, - [54]: list, - [55]: list, - [56]: list, - [57]: list, - [62]: blockQuote -} - -/** @satisfies {Extension['contentInitial']} */ -const contentInitial = { - [91]: definition -} - -/** @satisfies {Extension['flowInitial']} */ -const flowInitial = { - [-2]: codeIndented, - [-1]: codeIndented, - [32]: codeIndented -} - -/** @satisfies {Extension['flow']} */ -const constructs_flow = { - [35]: headingAtx, - [42]: thematicBreak, - [45]: [setextUnderline, thematicBreak], - [60]: htmlFlow, - [61]: setextUnderline, - [95]: thematicBreak, - [96]: codeFenced, - [126]: codeFenced -} - -/** @satisfies {Extension['string']} */ -const constructs_string = { - [38]: characterReference, - [92]: characterEscape -} - -/** @satisfies {Extension['text']} */ -const constructs_text = { - [-5]: lineEnding, - [-4]: lineEnding, - [-3]: lineEnding, - [33]: labelStartImage, - [38]: characterReference, - [42]: attention, - [60]: [autolink, htmlText], - [91]: labelStartLink, - [92]: [hardBreakEscape, characterEscape], - [93]: labelEnd, - [95]: attention, - [96]: codeText -} - -/** @satisfies {Extension['insideSpan']} */ -const insideSpan = { - null: [attention, resolver] -} - -/** @satisfies {Extension['attentionMarkers']} */ -const attentionMarkers = { - null: [42, 95] -} - -/** @satisfies {Extension['disable']} */ -const disable = { - null: [] -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js -/** - * @typedef {import('micromark-util-types').Create} Create - * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - */ - - - - - - - - - -/** - * @param {ParseOptions | null | undefined} [options] - * @returns {ParseContext} - */ -function parse(options) { - const settings = options || {} - const constructs = - /** @type {FullNormalizedExtension} */ - combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) - - /** @type {ParseContext} */ - const parser = { - defined: [], - lazy: {}, - constructs, - content: create(content), - document: create(document_document), - flow: create(flow), - string: create(string), - text: create(text_text) - } - return parser - - /** - * @param {InitialConstruct} initial - */ - function create(initial) { - return creator - /** @type {Create} */ - function creator(from) { - return createTokenizer(parser, initial, from) - } - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Value} Value - */ - -/** - * @callback Preprocessor - * @param {Value} value - * @param {Encoding | null | undefined} [encoding] - * @param {boolean | null | undefined} [end=false] - * @returns {Array<Chunk>} - */ - -const search = /[\0\t\n\r]/g - -/** - * @returns {Preprocessor} - */ -function preprocess() { - let column = 1 - let buffer = '' - /** @type {boolean | undefined} */ - let start = true - /** @type {boolean | undefined} */ - let atCarriageReturn - return preprocessor - - /** @type {Preprocessor} */ - function preprocessor(value, encoding, end) { - /** @type {Array<Chunk>} */ - const chunks = [] - /** @type {RegExpMatchArray | null} */ - let match - /** @type {number} */ - let next - /** @type {number} */ - let startPosition - /** @type {number} */ - let endPosition - /** @type {Code} */ - let code - - // @ts-expect-error `Buffer` does allow an encoding. - value = buffer + value.toString(encoding) - startPosition = 0 - buffer = '' - if (start) { - // To do: `markdown-rs` actually parses BOMs (byte order mark). - if (value.charCodeAt(0) === 65279) { - startPosition++ - } - start = undefined - } - while (startPosition < value.length) { - search.lastIndex = startPosition - match = search.exec(value) - endPosition = - match && match.index !== undefined ? match.index : value.length - code = value.charCodeAt(endPosition) - if (!match) { - buffer = value.slice(startPosition) - break - } - if (code === 10 && startPosition === endPosition && atCarriageReturn) { - chunks.push(-3) - atCarriageReturn = undefined - } else { - if (atCarriageReturn) { - chunks.push(-5) - atCarriageReturn = undefined - } - if (startPosition < endPosition) { - chunks.push(value.slice(startPosition, endPosition)) - column += endPosition - startPosition - } - switch (code) { - case 0: { - chunks.push(65533) - column++ - break - } - case 9: { - next = Math.ceil(column / 4) * 4 - chunks.push(-2) - while (column++ < next) chunks.push(-1) - break - } - case 10: { - chunks.push(-4) - column = 1 - break - } - default: { - atCarriageReturn = true - column = 1 - } - } - } - startPosition = endPosition + 1 - } - if (end) { - if (atCarriageReturn) chunks.push(-5) - if (buffer) chunks.push(buffer) - chunks.push(null) - } - return chunks - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js -/** - * @typedef {import('micromark-util-types').Event} Event - */ - - - -/** - * @param {Array<Event>} events - * @returns {Array<Event>} - */ -function postprocess(events) { - while (!subtokenize(events)) { - // Empty - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -function decodeNumericCharacterReference(value, base) { - const code = Number.parseInt(value, base) - if ( - // C0 except for HT, LF, FF, CR, space. - code < 9 || - code === 11 || - (code > 13 && code < 32) || - // Control character (DEL) of C0, and C1 controls. - (code > 126 && code < 160) || - // Lone high surrogates and low surrogates. - (code > 55295 && code < 57344) || - // Noncharacters. - (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || - (code & 65535) === 65535 || - (code & 65535) === 65534 /* eslint-enable no-bitwise */ || - // Out of range - code > 1114111 - ) { - return '\uFFFD' - } - return String.fromCharCode(code) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js - - -const characterEscapeOrReference = - /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi - -/** - * Decode markdown strings (which occur in places such as fenced code info - * strings, destinations, labels, and titles). - * - * The “string” content type allows character escapes and -references. - * This decodes those. - * - * @param {string} value - * Value to decode. - * @returns {string} - * Decoded value. - */ -function decodeString(value) { - return value.replace(characterEscapeOrReference, decode) -} - -/** - * @param {string} $0 - * @param {string} $1 - * @param {string} $2 - * @returns {string} - */ -function decode($0, $1, $2) { - if ($1) { - // Escape. - return $1 - } - - // Reference. - const head = $2.charCodeAt(0) - if (head === 35) { - const head = $2.charCodeAt(1) - const hex = head === 120 || head === 88 - return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) - } - return decodeNamedCharacterReference($2) || $0 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Point} Point - * @typedef {import('unist').Position} Position - */ - -/** - * @typedef NodeLike - * @property {string} type - * @property {PositionLike | null | undefined} [position] - * - * @typedef PositionLike - * @property {PointLike | null | undefined} [start] - * @property {PointLike | null | undefined} [end] - * - * @typedef PointLike - * @property {number | null | undefined} [line] - * @property {number | null | undefined} [column] - * @property {number | null | undefined} [offset] - */ - -/** - * Serialize the positional info of a point, position (start and end points), - * or node. - * - * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] - * Node, position, or point. - * @returns {string} - * Pretty printed positional info of a node (`string`). - * - * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) - * or a point `l:c` (when given `point`), where `l` stands for line, `c` for - * column, `s` for `start`, and `e` for end. - * An empty string (`''`) is returned if the given value is neither `node`, - * `position`, nor `point`. - */ -function stringifyPosition(value) { - // Nothing. - if (!value || typeof value !== 'object') { - return '' - } - - // Node. - if ('position' in value || 'type' in value) { - return position(value.position) - } - - // Position. - if ('start' in value || 'end' in value) { - return position(value) - } - - // Point. - if ('line' in value || 'column' in value) { - return point(value) - } - - // ? - return '' -} - -/** - * @param {Point | PointLike | null | undefined} point - * @returns {string} - */ -function point(point) { - return index(point && point.line) + ':' + index(point && point.column) -} - -/** - * @param {Position | PositionLike | null | undefined} pos - * @returns {string} - */ -function position(pos) { - return point(pos && pos.start) + '-' + point(pos && pos.end) -} - -/** - * @param {number | null | undefined} value - * @returns {number} - */ -function index(value) { - return value && typeof value === 'number' ? value : 1 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js -/** - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Value} Value - * - * @typedef {import('unist').Parent} UnistParent - * @typedef {import('unist').Point} Point - * - * @typedef {import('mdast').PhrasingContent} PhrasingContent - * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent - * @typedef {import('mdast').Content} Content - * @typedef {import('mdast').Break} Break - * @typedef {import('mdast').Blockquote} Blockquote - * @typedef {import('mdast').Code} Code - * @typedef {import('mdast').Definition} Definition - * @typedef {import('mdast').Emphasis} Emphasis - * @typedef {import('mdast').Heading} Heading - * @typedef {import('mdast').HTML} HTML - * @typedef {import('mdast').Image} Image - * @typedef {import('mdast').ImageReference} ImageReference - * @typedef {import('mdast').InlineCode} InlineCode - * @typedef {import('mdast').Link} Link - * @typedef {import('mdast').LinkReference} LinkReference - * @typedef {import('mdast').List} List - * @typedef {import('mdast').ListItem} ListItem - * @typedef {import('mdast').Paragraph} Paragraph - * @typedef {import('mdast').Root} Root - * @typedef {import('mdast').Strong} Strong - * @typedef {import('mdast').Text} Text - * @typedef {import('mdast').ThematicBreak} ThematicBreak - * @typedef {import('mdast').ReferenceType} ReferenceType - * @typedef {import('../index.js').CompileData} CompileData - */ - -/** - * @typedef {Root | Content} Node - * @typedef {Extract<Node, UnistParent>} Parent - * - * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment - */ - -/** - * @callback Transform - * Extra transform, to change the AST afterwards. - * @param {Root} tree - * Tree to transform. - * @returns {Root | undefined | null | void} - * New tree or nothing (in which case the current tree is used). - * - * @callback Handle - * Handle a token. - * @param {CompileContext} this - * Context. - * @param {Token} token - * Current token. - * @returns {void} - * Nothing. - * - * @typedef {Record<string, Handle>} Handles - * Token types mapping to handles - * - * @callback OnEnterError - * Handle the case where the `right` token is open, but it is closed (by the - * `left` token) or because we reached the end of the document. - * @param {Omit<CompileContext, 'sliceSerialize'>} this - * Context. - * @param {Token | undefined} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @callback OnExitError - * Handle the case where the `right` token is open but it is closed by - * exiting the `left` token. - * @param {Omit<CompileContext, 'sliceSerialize'>} this - * Context. - * @param {Token} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @typedef {[Token, OnEnterError | undefined]} TokenTuple - * Open token on the stack, with an optional error handler for when - * that token isn’t closed properly. - */ - -/** - * @typedef Config - * Configuration. - * - * We have our defaults, but extensions will add more. - * @property {Array<string>} canContainEols - * Token types where line endings are used. - * @property {Handles} enter - * Opening handles. - * @property {Handles} exit - * Closing handles. - * @property {Array<Transform>} transforms - * Tree transforms. - * - * @typedef {Partial<Config>} Extension - * Change how markdown tokens from micromark are turned into mdast. - * - * @typedef CompileContext - * mdast compiler context. - * @property {Array<Node | Fragment>} stack - * Stack of nodes. - * @property {Array<TokenTuple>} tokenStack - * Stack of tokens. - * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData - * Get data from the key/value store. - * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData - * Set data into the key/value store. - * @property {(this: CompileContext) => void} buffer - * Capture some of the output data. - * @property {(this: CompileContext) => string} resume - * Stop capturing and access the output data. - * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter - * Enter a token. - * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit - * Exit a token. - * @property {TokenizeContext['sliceSerialize']} sliceSerialize - * Get the string value of a token. - * @property {Config} config - * Configuration. - * - * @typedef FromMarkdownOptions - * Configuration for how to build mdast. - * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] - * Extensions for this utility to change how tokens are turned into a tree. - * - * @typedef {ParseOptions & FromMarkdownOptions} Options - * Configuration. - */ - -// To do: micromark: create a registry of tokens? -// To do: next major: don’t return given `Node` from `enter`. -// To do: next major: remove setter/getter. - - - - - - - - - - -const lib_own = {}.hasOwnProperty - -/** - * @param value - * Markdown to parse. - * @param encoding - * Character encoding for when `value` is `Buffer`. - * @param options - * Configuration. - * @returns - * mdast tree. - */ -const fromMarkdown = - /** - * @type {( - * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & - * ((value: Value, options?: Options | null | undefined) => Root) - * )} - */ - - /** - * @param {Value} value - * @param {Encoding | Options | null | undefined} [encoding] - * @param {Options | null | undefined} [options] - * @returns {Root} - */ - function (value, encoding, options) { - if (typeof encoding !== 'string') { - options = encoding - encoding = undefined - } - return compiler(options)( - postprocess( - parse(options).document().write(preprocess()(value, encoding, true)) - ) - ) - } - -/** - * Note this compiler only understand complete buffering, not streaming. - * - * @param {Options | null | undefined} [options] - */ -function compiler(options) { - /** @type {Config} */ - const config = { - transforms: [], - canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], - enter: { - autolink: opener(link), - autolinkProtocol: onenterdata, - autolinkEmail: onenterdata, - atxHeading: opener(heading), - blockQuote: opener(blockQuote), - characterEscape: onenterdata, - characterReference: onenterdata, - codeFenced: opener(codeFlow), - codeFencedFenceInfo: buffer, - codeFencedFenceMeta: buffer, - codeIndented: opener(codeFlow, buffer), - codeText: opener(codeText, buffer), - codeTextData: onenterdata, - data: onenterdata, - codeFlowValue: onenterdata, - definition: opener(definition), - definitionDestinationString: buffer, - definitionLabelString: buffer, - definitionTitleString: buffer, - emphasis: opener(emphasis), - hardBreakEscape: opener(hardBreak), - hardBreakTrailing: opener(hardBreak), - htmlFlow: opener(html, buffer), - htmlFlowData: onenterdata, - htmlText: opener(html, buffer), - htmlTextData: onenterdata, - image: opener(image), - label: buffer, - link: opener(link), - listItem: opener(listItem), - listItemValue: onenterlistitemvalue, - listOrdered: opener(list, onenterlistordered), - listUnordered: opener(list), - paragraph: opener(paragraph), - reference: onenterreference, - referenceString: buffer, - resourceDestinationString: buffer, - resourceTitleString: buffer, - setextHeading: opener(heading), - strong: opener(strong), - thematicBreak: opener(thematicBreak) - }, - exit: { - atxHeading: closer(), - atxHeadingSequence: onexitatxheadingsequence, - autolink: closer(), - autolinkEmail: onexitautolinkemail, - autolinkProtocol: onexitautolinkprotocol, - blockQuote: closer(), - characterEscapeValue: onexitdata, - characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, - characterReferenceMarkerNumeric: onexitcharacterreferencemarker, - characterReferenceValue: onexitcharacterreferencevalue, - codeFenced: closer(onexitcodefenced), - codeFencedFence: onexitcodefencedfence, - codeFencedFenceInfo: onexitcodefencedfenceinfo, - codeFencedFenceMeta: onexitcodefencedfencemeta, - codeFlowValue: onexitdata, - codeIndented: closer(onexitcodeindented), - codeText: closer(onexitcodetext), - codeTextData: onexitdata, - data: onexitdata, - definition: closer(), - definitionDestinationString: onexitdefinitiondestinationstring, - definitionLabelString: onexitdefinitionlabelstring, - definitionTitleString: onexitdefinitiontitlestring, - emphasis: closer(), - hardBreakEscape: closer(onexithardbreak), - hardBreakTrailing: closer(onexithardbreak), - htmlFlow: closer(onexithtmlflow), - htmlFlowData: onexitdata, - htmlText: closer(onexithtmltext), - htmlTextData: onexitdata, - image: closer(onexitimage), - label: onexitlabel, - labelText: onexitlabeltext, - lineEnding: onexitlineending, - link: closer(onexitlink), - listItem: closer(), - listOrdered: closer(), - listUnordered: closer(), - paragraph: closer(), - referenceString: onexitreferencestring, - resourceDestinationString: onexitresourcedestinationstring, - resourceTitleString: onexitresourcetitlestring, - resource: onexitresource, - setextHeading: closer(onexitsetextheading), - setextHeadingLineSequence: onexitsetextheadinglinesequence, - setextHeadingText: onexitsetextheadingtext, - strong: closer(), - thematicBreak: closer() - } - } - configure(config, (options || {}).mdastExtensions || []) - - /** @type {CompileData} */ - const data = {} - return compile - - /** - * Turn micromark events into an mdast tree. - * - * @param {Array<Event>} events - * Events. - * @returns {Root} - * mdast tree. - */ - function compile(events) { - /** @type {Root} */ - let tree = { - type: 'root', - children: [] - } - /** @type {Omit<CompileContext, 'sliceSerialize'>} */ - const context = { - stack: [tree], - tokenStack: [], - config, - enter, - exit, - buffer, - resume, - setData, - getData - } - /** @type {Array<number>} */ - const listStack = [] - let index = -1 - while (++index < events.length) { - // We preprocess lists to add `listItem` tokens, and to infer whether - // items the list itself are spread out. - if ( - events[index][1].type === 'listOrdered' || - events[index][1].type === 'listUnordered' - ) { - if (events[index][0] === 'enter') { - listStack.push(index) - } else { - const tail = listStack.pop() - index = prepareList(events, tail, index) - } - } - } - index = -1 - while (++index < events.length) { - const handler = config[events[index][0]] - if (lib_own.call(handler, events[index][1].type)) { - handler[events[index][1].type].call( - Object.assign( - { - sliceSerialize: events[index][2].sliceSerialize - }, - context - ), - events[index][1] - ) - } - } - - // Handle tokens still being open. - if (context.tokenStack.length > 0) { - const tail = context.tokenStack[context.tokenStack.length - 1] - const handler = tail[1] || defaultOnError - handler.call(context, undefined, tail[0]) - } - - // Figure out `root` position. - tree.position = { - start: lib_point( - events.length > 0 - ? events[0][1].start - : { - line: 1, - column: 1, - offset: 0 - } - ), - end: lib_point( - events.length > 0 - ? events[events.length - 2][1].end - : { - line: 1, - column: 1, - offset: 0 - } - ) - } - - // Call transforms. - index = -1 - while (++index < config.transforms.length) { - tree = config.transforms[index](tree) || tree - } - return tree - } - - /** - * @param {Array<Event>} events - * @param {number} start - * @param {number} length - * @returns {number} - */ - function prepareList(events, start, length) { - let index = start - 1 - let containerBalance = -1 - let listSpread = false - /** @type {Token | undefined} */ - let listItem - /** @type {number | undefined} */ - let lineIndex - /** @type {number | undefined} */ - let firstBlankLineIndex - /** @type {boolean | undefined} */ - let atMarker - while (++index <= length) { - const event = events[index] - if ( - event[1].type === 'listUnordered' || - event[1].type === 'listOrdered' || - event[1].type === 'blockQuote' - ) { - if (event[0] === 'enter') { - containerBalance++ - } else { - containerBalance-- - } - atMarker = undefined - } else if (event[1].type === 'lineEndingBlank') { - if (event[0] === 'enter') { - if ( - listItem && - !atMarker && - !containerBalance && - !firstBlankLineIndex - ) { - firstBlankLineIndex = index - } - atMarker = undefined - } - } else if ( - event[1].type === 'linePrefix' || - event[1].type === 'listItemValue' || - event[1].type === 'listItemMarker' || - event[1].type === 'listItemPrefix' || - event[1].type === 'listItemPrefixWhitespace' - ) { - // Empty. - } else { - atMarker = undefined - } - if ( - (!containerBalance && - event[0] === 'enter' && - event[1].type === 'listItemPrefix') || - (containerBalance === -1 && - event[0] === 'exit' && - (event[1].type === 'listUnordered' || - event[1].type === 'listOrdered')) - ) { - if (listItem) { - let tailIndex = index - lineIndex = undefined - while (tailIndex--) { - const tailEvent = events[tailIndex] - if ( - tailEvent[1].type === 'lineEnding' || - tailEvent[1].type === 'lineEndingBlank' - ) { - if (tailEvent[0] === 'exit') continue - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - listSpread = true - } - tailEvent[1].type = 'lineEnding' - lineIndex = tailIndex - } else if ( - tailEvent[1].type === 'linePrefix' || - tailEvent[1].type === 'blockQuotePrefix' || - tailEvent[1].type === 'blockQuotePrefixWhitespace' || - tailEvent[1].type === 'blockQuoteMarker' || - tailEvent[1].type === 'listItemIndent' - ) { - // Empty - } else { - break - } - } - if ( - firstBlankLineIndex && - (!lineIndex || firstBlankLineIndex < lineIndex) - ) { - listItem._spread = true - } - - // Fix position. - listItem.end = Object.assign( - {}, - lineIndex ? events[lineIndex][1].start : event[1].end - ) - events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) - index++ - length++ - } - - // Create a new list item. - if (event[1].type === 'listItemPrefix') { - listItem = { - type: 'listItem', - _spread: false, - start: Object.assign({}, event[1].start), - // @ts-expect-error: we’ll add `end` in a second. - end: undefined - } - // @ts-expect-error: `listItem` is most definitely defined, TS... - events.splice(index, 0, ['enter', listItem, event[2]]) - index++ - length++ - firstBlankLineIndex = undefined - atMarker = true - } - } - } - events[start][1]._spread = listSpread - return length - } - - /** - * Set data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @param {CompileData[Key]} [value] - * New value. - * @returns {void} - * Nothing. - */ - function setData(key, value) { - data[key] = value - } - - /** - * Get data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @returns {CompileData[Key]} - * Value. - */ - function getData(key) { - return data[key] - } - - /** - * Create an opener handle. - * - * @param {(token: Token) => Node} create - * Create a node. - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function opener(create, and) { - return open - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function open(token) { - enter.call(this, create(token), token) - if (and) and.call(this, token) - } - } - - /** - * @this {CompileContext} - * @returns {void} - */ - function buffer() { - this.stack.push({ - type: 'fragment', - children: [] - }) - } - - /** - * @template {Node} Kind - * Node type. - * @this {CompileContext} - * Context. - * @param {Kind} node - * Node to enter. - * @param {Token} token - * Corresponding token. - * @param {OnEnterError | undefined} [errorHandler] - * Handle the case where this token is open, but it is closed by something else. - * @returns {Kind} - * The given node. - */ - function enter(node, token, errorHandler) { - const parent = this.stack[this.stack.length - 1] - // @ts-expect-error: Assume `Node` can exist as a child of `parent`. - parent.children.push(node) - this.stack.push(node) - this.tokenStack.push([token, errorHandler]) - // @ts-expect-error: `end` will be patched later. - node.position = { - start: lib_point(token.start) - } - return node - } - - /** - * Create a closer handle. - * - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function closer(and) { - return close - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function close(token) { - if (and) and.call(this, token) - exit.call(this, token) - } - } - - /** - * @this {CompileContext} - * Context. - * @param {Token} token - * Corresponding token. - * @param {OnExitError | undefined} [onExitError] - * Handle the case where another token is open. - * @returns {Node} - * The closed node. - */ - function exit(token, onExitError) { - const node = this.stack.pop() - const open = this.tokenStack.pop() - if (!open) { - throw new Error( - 'Cannot close `' + - token.type + - '` (' + - stringifyPosition({ - start: token.start, - end: token.end - }) + - '): it’s not open' - ) - } else if (open[0].type !== token.type) { - if (onExitError) { - onExitError.call(this, token, open[0]) - } else { - const handler = open[1] || defaultOnError - handler.call(this, token, open[0]) - } - } - node.position.end = lib_point(token.end) - return node - } - - /** - * @this {CompileContext} - * @returns {string} - */ - function resume() { - return lib_toString(this.stack.pop()) - } - - // - // Handlers. - // - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistordered() { - setData('expectingFirstListItemValue', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistitemvalue(token) { - if (getData('expectingFirstListItemValue')) { - const ancestor = this.stack[this.stack.length - 2] - ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) - setData('expectingFirstListItemValue') - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfenceinfo() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.lang = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfencemeta() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.meta = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfence() { - // Exit if this is the closing fence. - if (getData('flowCodeInside')) return - this.buffer() - setData('flowCodeInside', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefenced() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') - setData('flowCodeInside') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodeindented() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/(\r?\n|\r)$/g, '') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitionlabelstring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - node.label = label - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiontitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiondestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitatxheadingsequence(token) { - const node = this.stack[this.stack.length - 1] - if (!node.depth) { - const depth = this.sliceSerialize(token).length - node.depth = depth - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadingtext() { - setData('setextHeadingSlurpLineEnding', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadinglinesequence(token) { - const node = this.stack[this.stack.length - 1] - node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheading() { - setData('setextHeadingSlurpLineEnding') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterdata(token) { - const node = this.stack[this.stack.length - 1] - let tail = node.children[node.children.length - 1] - if (!tail || tail.type !== 'text') { - // Add a new text node. - tail = text() - // @ts-expect-error: we’ll add `end` later. - tail.position = { - start: lib_point(token.start) - } - // @ts-expect-error: Assume `parent` accepts `text`. - node.children.push(tail) - } - this.stack.push(tail) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitdata(token) { - const tail = this.stack.pop() - tail.value += this.sliceSerialize(token) - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlineending(token) { - const context = this.stack[this.stack.length - 1] - // If we’re at a hard break, include the line ending in there. - if (getData('atHardBreak')) { - const tail = context.children[context.children.length - 1] - tail.position.end = lib_point(token.end) - setData('atHardBreak') - return - } - if ( - !getData('setextHeadingSlurpLineEnding') && - config.canContainEols.includes(context.type) - ) { - onenterdata.call(this, token) - onexitdata.call(this, token) - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithardbreak() { - setData('atHardBreak', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmlflow() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmltext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcodetext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlink() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitimage() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabeltext(token) { - const string = this.sliceSerialize(token) - const ancestor = this.stack[this.stack.length - 2] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - ancestor.label = decodeString(string) - // @ts-expect-error: same as above. - ancestor.identifier = normalizeIdentifier(string).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabel() { - const fragment = this.stack[this.stack.length - 1] - const value = this.resume() - const node = this.stack[this.stack.length - 1] - // Assume a reference. - setData('inReference', true) - if (node.type === 'link') { - /** @type {Array<StaticPhrasingContent>} */ - // @ts-expect-error: Assume static phrasing content. - const children = fragment.children - node.children = children - } else { - node.alt = value - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcedestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcetitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresource() { - setData('inReference') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterreference() { - setData('referenceType', 'collapsed') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitreferencestring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - node.label = label - // @ts-expect-error: same as above. - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - setData('referenceType', 'full') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcharacterreferencemarker(token) { - setData('characterReferenceType', token.type) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcharacterreferencevalue(token) { - const data = this.sliceSerialize(token) - const type = getData('characterReferenceType') - /** @type {string} */ - let value - if (type) { - value = decodeNumericCharacterReference( - data, - type === 'characterReferenceMarkerNumeric' ? 10 : 16 - ) - setData('characterReferenceType') - } else { - const result = decodeNamedCharacterReference(data) - value = result - } - const tail = this.stack.pop() - tail.value += value - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkprotocol(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = this.sliceSerialize(token) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkemail(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = 'mailto:' + this.sliceSerialize(token) - } - - // - // Creaters. - // - - /** @returns {Blockquote} */ - function blockQuote() { - return { - type: 'blockquote', - children: [] - } - } - - /** @returns {Code} */ - function codeFlow() { - return { - type: 'code', - lang: null, - meta: null, - value: '' - } - } - - /** @returns {InlineCode} */ - function codeText() { - return { - type: 'inlineCode', - value: '' - } - } - - /** @returns {Definition} */ - function definition() { - return { - type: 'definition', - identifier: '', - label: null, - title: null, - url: '' - } - } - - /** @returns {Emphasis} */ - function emphasis() { - return { - type: 'emphasis', - children: [] - } - } - - /** @returns {Heading} */ - function heading() { - // @ts-expect-error `depth` will be set later. - return { - type: 'heading', - depth: undefined, - children: [] - } - } - - /** @returns {Break} */ - function hardBreak() { - return { - type: 'break' - } - } - - /** @returns {HTML} */ - function html() { - return { - type: 'html', - value: '' - } - } - - /** @returns {Image} */ - function image() { - return { - type: 'image', - title: null, - url: '', - alt: null - } - } - - /** @returns {Link} */ - function link() { - return { - type: 'link', - title: null, - url: '', - children: [] - } - } - - /** - * @param {Token} token - * @returns {List} - */ - function list(token) { - return { - type: 'list', - ordered: token.type === 'listOrdered', - start: null, - spread: token._spread, - children: [] - } - } - - /** - * @param {Token} token - * @returns {ListItem} - */ - function listItem(token) { - return { - type: 'listItem', - spread: token._spread, - checked: null, - children: [] - } - } - - /** @returns {Paragraph} */ - function paragraph() { - return { - type: 'paragraph', - children: [] - } - } - - /** @returns {Strong} */ - function strong() { - return { - type: 'strong', - children: [] - } - } - - /** @returns {Text} */ - function text() { - return { - type: 'text', - value: '' - } - } - - /** @returns {ThematicBreak} */ - function thematicBreak() { - return { - type: 'thematicBreak' - } - } -} - -/** - * Copy a point-like value. - * - * @param {Point} d - * Point-like value. - * @returns {Point} - * unist point. - */ -function lib_point(d) { - return { - line: d.line, - column: d.column, - offset: d.offset - } -} - -/** - * @param {Config} combined - * @param {Array<Extension | Array<Extension>>} extensions - * @returns {void} - */ -function configure(combined, extensions) { - let index = -1 - while (++index < extensions.length) { - const value = extensions[index] - if (Array.isArray(value)) { - configure(combined, value) - } else { - extension(combined, value) - } - } -} - -/** - * @param {Config} combined - * @param {Extension} extension - * @returns {void} - */ -function extension(combined, extension) { - /** @type {keyof Extension} */ - let key - for (key in extension) { - if (lib_own.call(extension, key)) { - if (key === 'canContainEols') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'transforms') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'enter' || key === 'exit') { - const right = extension[key] - if (right) { - Object.assign(combined[key], right) - } - } - } - } -} - -/** @type {OnEnterError} */ -function defaultOnError(left, right) { - if (left) { - throw new Error( - 'Cannot close `' + - left.type + - '` (' + - stringifyPosition({ - start: left.start, - end: left.end - }) + - '): a different token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is open' - ) - } else { - throw new Error( - 'Cannot close document, a token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is still open' - ) - } -} - -// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js -var esm = __webpack_require__(60513); -;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-ca0c5216.js - - - -function preprocessMarkdown(markdown) { - const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); - const withoutExtraSpaces = (0,esm/* dedent */.T)(withoutMultipleNewlines); - return withoutExtraSpaces; -} -function markdownToLines(markdown) { - const preprocessedMarkdown = preprocessMarkdown(markdown); - const { children } = fromMarkdown(preprocessedMarkdown); - const lines = [[]]; - let currentLine = 0; - function processNode(node, parentType = "normal") { - if (node.type === "text") { - const textLines = node.value.split("\n"); - textLines.forEach((textLine, index) => { - if (index !== 0) { - currentLine++; - lines.push([]); - } - textLine.split(" ").forEach((word) => { - if (word) { - lines[currentLine].push({ content: word, type: parentType }); - } - }); - }); - } else if (node.type === "strong" || node.type === "emphasis") { - node.children.forEach((contentNode) => { - processNode(contentNode, node.type); - }); - } - } - children.forEach((treeNode) => { - if (treeNode.type === "paragraph") { - treeNode.children.forEach((contentNode) => { - processNode(contentNode); - }); - } - }); - return lines; -} -function markdownToHTML(markdown) { - const { children } = fromMarkdown(markdown); - function output(node) { - if (node.type === "text") { - return node.value.replace(/\n/g, "<br/>"); - } else if (node.type === "strong") { - return `<strong>${node.children.map(output).join("")}</strong>`; - } else if (node.type === "emphasis") { - return `<em>${node.children.map(output).join("")}</em>`; - } else if (node.type === "paragraph") { - return `<p>${node.children.map(output).join("")}</p>`; - } - return `Unsupported markdown: ${node.type}`; - } - return children.map(output).join(""); -} -function splitTextToChars(text) { - if (Intl.Segmenter) { - return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); - } - return [...text]; -} -function splitWordToFitWidth(checkFit, word) { - const characters = splitTextToChars(word.content); - return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); -} -function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { - if (remainingChars.length === 0) { - return [ - { content: usedChars.join(""), type }, - { content: "", type } - ]; - } - const [nextChar, ...rest] = remainingChars; - const newWord = [...usedChars, nextChar]; - if (checkFit([{ content: newWord.join(""), type }])) { - return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); - } - if (usedChars.length === 0 && nextChar) { - usedChars.push(nextChar); - remainingChars.shift(); - } - return [ - { content: usedChars.join(""), type }, - { content: remainingChars.join(""), type } - ]; -} -function splitLineToFitWidth(line, checkFit) { - if (line.some(({ content }) => content.includes("\n"))) { - throw new Error("splitLineToFitWidth does not support newlines in the line"); - } - return splitLineToFitWidthRecursion(line, checkFit); -} -function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { - if (words.length === 0) { - if (newLine.length > 0) { - lines.push(newLine); - } - return lines.length > 0 ? lines : []; - } - let joiner = ""; - if (words[0].content === " ") { - joiner = " "; - words.shift(); - } - const nextWord = words.shift() ?? { content: " ", type: "normal" }; - const lineWithNextWord = [...newLine]; - if (joiner !== "") { - lineWithNextWord.push({ content: joiner, type: "normal" }); - } - lineWithNextWord.push(nextWord); - if (checkFit(lineWithNextWord)) { - return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); - } - if (newLine.length > 0) { - lines.push(newLine); - words.unshift(nextWord); - } else if (nextWord.content) { - const [line, rest] = splitWordToFitWidth(checkFit, nextWord); - lines.push([line]); - if (rest.content) { - words.unshift(rest); - } - } - return splitLineToFitWidthRecursion(words, checkFit, lines); -} -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlSpan(element, node, width, classes, addBackground = false) { - const fo = element.append("foreignObject"); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - ` - <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" - ); - applyStyle(div, node.labelStyle); - div.style("display", "table-cell"); - div.style("white-space", "nowrap"); - div.style("max-width", width + "px"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - if (addBackground) { - div.attr("class", "labelBkg"); - } - let bbox = div.node().getBoundingClientRect(); - if (bbox.width === width) { - div.style("display", "table"); - div.style("white-space", "break-spaces"); - div.style("width", width + "px"); - bbox = div.node().getBoundingClientRect(); - } - fo.style("width", bbox.width); - fo.style("height", bbox.height); - return fo.node(); -} -function createTspan(textElement, lineIndex, lineHeight) { - return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); -} -function computeWidthOfText(parentNode, lineHeight, line) { - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, line); - const textLength = testSpan.node().getComputedTextLength(); - testElement.remove(); - return textLength; -} -function computeDimensionOfText(parentNode, lineHeight, text) { - var _a; - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); - const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); - if (textDimension) { - testElement.remove(); - } - return textDimension; -} -function createFormattedText(width, g, structuredText, addBackground = false) { - const lineHeight = 1.1; - const labelGroup = g.append("g"); - const bkg = labelGroup.insert("rect").attr("class", "background"); - const textElement = labelGroup.append("text").attr("y", "-10.1"); - let lineIndex = 0; - for (const line of structuredText) { - const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; - const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); - for (const preparedLine of linesUnderWidth) { - const tspan = createTspan(textElement, lineIndex, lineHeight); - updateTextContentAndStyles(tspan, preparedLine); - lineIndex++; - } - } - if (addBackground) { - const bbox = textElement.node().getBBox(); - const padding = 2; - bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); - return labelGroup.node(); - } else { - return textElement.node(); - } -} -function updateTextContentAndStyles(tspan, wrappedLine) { - tspan.text(""); - wrappedLine.forEach((word, index) => { - const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); - if (index === 0) { - innerTspan.text(word.content); - } else { - innerTspan.text(" " + word.content); - } - }); -} -const createText = (el, text = "", { - style = "", - isTitle = false, - classes = "", - useHtmlLabels = true, - isNode = true, - width = 200, - addSvgBackground = false -} = {}) => { - mermaid_6dc72991.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); - if (useHtmlLabels) { - const htmlText = markdownToHTML(text); - const node = { - isNode, - label: (0,mermaid_6dc72991.M)(htmlText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - labelStyle: style.replace("fill:", "color:") - }; - const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); - return vertexNode; - } else { - const structuredText = markdownToLines(text); - const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); - return svgLabel; - } -}; - - - -/***/ }), - -/***/ 98055: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ a: () => (/* binding */ insertMarkers$1), -/* harmony export */ b: () => (/* binding */ clear$1), -/* harmony export */ c: () => (/* binding */ createLabel$1), -/* harmony export */ d: () => (/* binding */ clear), -/* harmony export */ e: () => (/* binding */ insertNode), -/* harmony export */ f: () => (/* binding */ insertEdgeLabel), -/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), -/* harmony export */ h: () => (/* binding */ insertEdge), -/* harmony export */ i: () => (/* binding */ intersectRect$1), -/* harmony export */ j: () => (/* binding */ positionEdgeLabel), -/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), -/* harmony export */ l: () => (/* binding */ labelHelper), -/* harmony export */ m: () => (/* binding */ addEdgeMarkers), -/* harmony export */ p: () => (/* binding */ positionNode), -/* harmony export */ s: () => (/* binding */ setNodeElem), -/* harmony export */ u: () => (/* binding */ updateNodeBounds) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(18897); - - - -const insertMarkers = (elem, markerArray, type, id) => { - markerArray.forEach((markerName) => { - markers[markerName](elem, type, id); - }); -}; -const extension = (elem, type, id) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); -}; -const composition = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); -}; -const aggregation = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); -}; -const dependency = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); -}; -const lollipop = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); -}; -const point = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); -}; -const circle$1 = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); -}; -const cross = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); -}; -const barb = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); -}; -const markers = { - extension, - composition, - aggregation, - dependency, - lollipop, - point, - circle: circle$1, - cross, - barb -}; -const insertMarkers$1 = insertMarkers; -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlLabel(node) { - const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" - ); - applyStyle(div, node.labelStyle); - div.style("display", "inline-block"); - div.style("white-space", "nowrap"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - return fo.node(); -} -const createLabel = (_vertexText, style, isTitle, isNode) => { - let vertexText = _vertexText || ""; - if (typeof vertexText === "object") { - vertexText = vertexText[0]; - } - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - vertexText = vertexText.replace(/\\n|\n/g, "<br />"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); - const node = { - isNode, - label: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(vertexText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - labelStyle: style.replace("fill:", "color:") - }; - let vertexNode = addHtmlLabel(node); - return vertexNode; - } else { - const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); - svgLabel.setAttribute("style", style.replace("color:", "fill:")); - let rows = []; - if (typeof vertexText === "string") { - rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); - } else if (Array.isArray(vertexText)) { - rows = vertexText; - } else { - rows = []; - } - for (const row of rows) { - const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); - tspan.setAttribute("dy", "1em"); - tspan.setAttribute("x", "0"); - if (isTitle) { - tspan.setAttribute("class", "title-row"); - } else { - tspan.setAttribute("class", "row"); - } - tspan.textContent = row.trim(); - svgLabel.appendChild(tspan); - } - return svgLabel; - } -}; -const createLabel$1 = createLabel; -const labelHelper = async (parent, node, _classes, isNode) => { - let classes; - const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); - if (!_classes) { - classes = "node default"; - } else { - classes = _classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); - let labelText; - if (node.labelText === void 0) { - labelText = ""; - } else { - labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; - } - const textNode = label.node(); - let text; - if (node.labelType === "markdown") { - text = (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { - useHtmlLabels, - width: node.width || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, - classes: "markdown-node-label" - }); - } else { - text = textNode.appendChild( - createLabel$1( - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), - node.labelStyle, - false, - isNode - ) - ); - } - let bbox = text.getBBox(); - const halfPadding = node.padding / 2; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); - const images = div.getElementsByTagName("img"); - if (images) { - const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; - await Promise.all( - [...images].map( - (img) => new Promise((res) => { - function setupImage() { - img.style.display = "flex"; - img.style.flexDirection = "column"; - if (noImgText) { - const bodyFontSize = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; - const enlargingFactor = 5; - const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; - img.style.minWidth = width; - img.style.maxWidth = width; - } else { - img.style.width = "100%"; - } - res(img); - } - setTimeout(() => { - if (img.complete) { - setupImage(); - } - }); - img.addEventListener("error", setupImage); - img.addEventListener("load", setupImage); - }) - ) - ); - } - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (useHtmlLabels) { - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - } else { - label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); - } - if (node.centerLabel) { - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - } - label.insert("rect", ":first-child"); - return { shapeSvg, bbox, halfPadding, label }; -}; -const updateNodeBounds = (node, element) => { - const bbox = element.node().getBBox(); - node.width = bbox.width; - node.height = bbox.height; -}; -function insertPolygonShape(parent, w, h, points) { - return parent.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); -} -function intersectNode(node, point2) { - return node.intersect(point2); -} -function intersectEllipse(node, rx, ry, point2) { - var cx = node.x; - var cy = node.y; - var px = cx - point2.x; - var py = cy - point2.y; - var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); - var dx = Math.abs(rx * ry * px / det); - if (point2.x < cx) { - dx = -dx; - } - var dy = Math.abs(rx * ry * py / det); - if (point2.y < cy) { - dy = -dy; - } - return { x: cx + dx, y: cy + dy }; -} -function intersectCircle(node, rx, point2) { - return intersectEllipse(node, rx, rx, point2); -} -function intersectLine(p1, p2, q1, q2) { - var a1, a2, b1, b2, c1, c2; - var r1, r2, r3, r4; - var denom, offset, num; - var x, y; - a1 = p2.y - p1.y; - b1 = p1.x - p2.x; - c1 = p2.x * p1.y - p1.x * p2.y; - r3 = a1 * q1.x + b1 * q1.y + c1; - r4 = a1 * q2.x + b1 * q2.y + c1; - if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { - return; - } - a2 = q2.y - q1.y; - b2 = q1.x - q2.x; - c2 = q2.x * q1.y - q1.x * q2.y; - r1 = a2 * p1.x + b2 * p1.y + c2; - r2 = a2 * p2.x + b2 * p2.y + c2; - if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { - return; - } - denom = a1 * b2 - a2 * b1; - if (denom === 0) { - return; - } - offset = Math.abs(denom / 2); - num = b1 * c2 - b2 * c1; - x = num < 0 ? (num - offset) / denom : (num + offset) / denom; - num = a2 * c1 - a1 * c2; - y = num < 0 ? (num - offset) / denom : (num + offset) / denom; - return { x, y }; -} -function sameSign(r1, r2) { - return r1 * r2 > 0; -} -function intersectPolygon(node, polyPoints, point2) { - var x1 = node.x; - var y1 = node.y; - var intersections = []; - var minX = Number.POSITIVE_INFINITY; - var minY = Number.POSITIVE_INFINITY; - if (typeof polyPoints.forEach === "function") { - polyPoints.forEach(function(entry) { - minX = Math.min(minX, entry.x); - minY = Math.min(minY, entry.y); - }); - } else { - minX = Math.min(minX, polyPoints.x); - minY = Math.min(minY, polyPoints.y); - } - var left = x1 - node.width / 2 - minX; - var top = y1 - node.height / 2 - minY; - for (var i = 0; i < polyPoints.length; i++) { - var p1 = polyPoints[i]; - var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; - var intersect2 = intersectLine( - node, - point2, - { x: left + p1.x, y: top + p1.y }, - { x: left + p2.x, y: top + p2.y } - ); - if (intersect2) { - intersections.push(intersect2); - } - } - if (!intersections.length) { - return node; - } - if (intersections.length > 1) { - intersections.sort(function(p, q) { - var pdx = p.x - point2.x; - var pdy = p.y - point2.y; - var distp = Math.sqrt(pdx * pdx + pdy * pdy); - var qdx = q.x - point2.x; - var qdy = q.y - point2.y; - var distq = Math.sqrt(qdx * qdx + qdy * qdy); - return distp < distq ? -1 : distp === distq ? 0 : 1; - }); - } - return intersections[0]; -} -const intersectRect = (node, point2) => { - var x = node.x; - var y = node.y; - var dx = point2.x - x; - var dy = point2.y - y; - var w = node.width / 2; - var h = node.height / 2; - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - if (dy < 0) { - h = -h; - } - sx = dy === 0 ? 0 : h * dx / dy; - sy = h; - } else { - if (dx < 0) { - w = -w; - } - sx = w; - sy = dx === 0 ? 0 : w * dy / dx; - } - return { x: x + sx, y: y + sy }; -}; -const intersectRect$1 = intersectRect; -const intersect = { - node: intersectNode, - circle: intersectCircle, - ellipse: intersectEllipse, - polygon: intersectPolygon, - rect: intersectRect$1 -}; -const note = async (parent, node) => { - const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; - if (!useHtmlLabels) { - node.centerLabel = true; - } - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes, - true - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); - const rect2 = shapeSvg.insert("rect", ":first-child"); - rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const note$1 = note; -const expandAndDeduplicateDirections = (directions) => { - const uniqueDirections = /* @__PURE__ */ new Set(); - for (const direction of directions) { - switch (direction) { - case "x": - uniqueDirections.add("right"); - uniqueDirections.add("left"); - break; - case "y": - uniqueDirections.add("up"); - uniqueDirections.add("down"); - break; - default: - uniqueDirections.add(direction); - break; - } - } - return uniqueDirections; -}; -const getArrowPoints = (duplicatedDirections, bbox, node) => { - const directions = expandAndDeduplicateDirections(duplicatedDirections); - const f = 2; - const height = bbox.height + 2 * node.padding; - const midpoint = height / f; - const width = bbox.width + 2 * midpoint + node.padding; - const padding = node.padding / 2; - if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { - return [ - // Bottom - { x: 0, y: 0 }, - { x: midpoint, y: 0 }, - { x: width / 2, y: 2 * padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: 0 }, - // Right - { x: width, y: -height / 3 }, - { x: width + 2 * padding, y: -height / 2 }, - { x: width, y: -2 * height / 3 }, - { x: width, y: -height }, - // Top - { x: width - midpoint, y: -height }, - { x: width / 2, y: -height - 2 * padding }, - { x: midpoint, y: -height }, - // Left - { x: 0, y: -height }, - { x: 0, y: -2 * height / 3 }, - { x: -2 * padding, y: -height / 2 }, - { x: 0, y: -height / 3 } - ]; - } - if (directions.has("right") && directions.has("left") && directions.has("up")) { - return [ - { x: midpoint, y: 0 }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("right") && directions.has("left") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: midpoint, y: -height }, - { x: width - midpoint, y: -height }, - { x: width, y: 0 } - ]; - } - if (directions.has("right") && directions.has("up") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: width, y: -midpoint }, - { x: width, y: -height + midpoint }, - { x: 0, y: -height } - ]; - } - if (directions.has("left") && directions.has("up") && directions.has("down")) { - return [ - { x: width, y: 0 }, - { x: 0, y: -midpoint }, - { x: 0, y: -height + midpoint }, - { x: width, y: -height } - ]; - } - if (directions.has("right") && directions.has("left")) { - return [ - { x: midpoint, y: 0 }, - { x: midpoint, y: -padding }, - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: width - midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("up") && directions.has("down")) { - return [ - // Bottom center - { x: width / 2, y: 0 }, - // Left pont of bottom arrow - { x: 0, y: -padding }, - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: 0, y: -height + padding }, - // Top of arrow - { x: width / 2, y: -height }, - { x: width, y: -height + padding }, - // Top of right vertical bar - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding }, - { x: width, y: -padding } - ]; - } - if (directions.has("right") && directions.has("up")) { - return [ - { x: 0, y: 0 }, - { x: width, y: -midpoint }, - { x: 0, y: -height } - ]; - } - if (directions.has("right") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: width, y: 0 }, - { x: 0, y: -height } - ]; - } - if (directions.has("left") && directions.has("up")) { - return [ - { x: width, y: 0 }, - { x: 0, y: -midpoint }, - { x: width, y: -height } - ]; - } - if (directions.has("left") && directions.has("down")) { - return [ - { x: width, y: 0 }, - { x: 0, y: 0 }, - { x: width, y: -height } - ]; - } - if (directions.has("right")) { - return [ - { x: midpoint, y: -padding }, - { x: midpoint, y: -padding }, - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: width - midpoint, y: -height + padding }, - // top left corner of arrow - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding } - ]; - } - if (directions.has("left")) { - return [ - { x: midpoint, y: 0 }, - { x: midpoint, y: -padding }, - // Two points, the right corners - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("up")) { - return [ - // Bottom center - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: 0, y: -height + padding }, - // Top of arrow - { x: width / 2, y: -height }, - { x: width, y: -height + padding }, - // Top of right vertical bar - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding } - ]; - } - if (directions.has("down")) { - return [ - // Bottom center - { x: width / 2, y: 0 }, - // Left pont of bottom arrow - { x: 0, y: -padding }, - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding }, - { x: width, y: -padding } - ]; - } - return [{ x: 0, y: 0 }]; -}; -const formatClass = (str) => { - if (str) { - return " " + str; - } - return ""; -}; -const getClassesFromNode = (node, otherClasses) => { - return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( - node.class - )}`; -}; -const question = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const s = w + h; - const points = [ - { x: s / 2, y: 0 }, - { x: s, y: -s / 2 }, - { x: s / 2, y: -s }, - { x: 0, y: -s / 2 } - ]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); - const questionElem = insertPolygonShape(shapeSvg, s, s, points); - questionElem.attr("style", node.style); - updateNodeBounds(node, questionElem); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const choice = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const s = 28; - const points = [ - { x: 0, y: s / 2 }, - { x: s / 2, y: 0 }, - { x: 0, y: -s / 2 }, - { x: -s / 2, y: 0 } - ]; - const choice2 = shapeSvg.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ); - choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); - node.width = 28; - node.height = 28; - node.intersect = function(point2) { - return intersect.circle(node, 14, point2); - }; - return shapeSvg; -}; -const hexagon = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const f = 4; - const h = bbox.height + node.padding; - const m = h / f; - const w = bbox.width + 2 * m + node.padding; - const points = [ - { x: m, y: 0 }, - { x: w - m, y: 0 }, - { x: w, y: -h / 2 }, - { x: w - m, y: -h }, - { x: m, y: -h }, - { x: 0, y: -h / 2 } - ]; - const hex = insertPolygonShape(shapeSvg, w, h, points); - hex.attr("style", node.style); - updateNodeBounds(node, hex); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const block_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); - const f = 2; - const h = bbox.height + 2 * node.padding; - const m = h / f; - const w = bbox.width + 2 * m + node.padding; - const points = getArrowPoints(node.directions, bbox, node); - const blockArrow = insertPolygonShape(shapeSvg, w, h, points); - blockArrow.attr("style", node.style); - updateNodeBounds(node, blockArrow); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const rect_left_inv_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -h / 2, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: -h / 2, y: -h }, - { x: 0, y: -h / 2 } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - node.width = w + h; - node.height = h; - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const lean_right = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const lean_left = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 2 * h / 6, y: 0 }, - { x: w + h / 6, y: 0 }, - { x: w - 2 * h / 6, y: -h }, - { x: -h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const trapezoid = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w + 2 * h / 6, y: 0 }, - { x: w - h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const inv_trapezoid = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: -2 * h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const rect_right_inv_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 0, y: 0 }, - { x: w + h / 2, y: 0 }, - { x: w, y: -h / 2 }, - { x: w + h / 2, y: -h }, - { x: 0, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const cylinder = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const rx = w / 2; - const ry = rx / (2.5 + w / 50); - const h = bbox.height + ry + node.padding; - const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; - const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); - updateNodeBounds(node, el); - node.intersect = function(point2) { - const pos = intersect.rect(node, point2); - const x = pos.x - node.x; - if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { - let y = ry * ry * (1 - x * x / (rx * rx)); - if (y != 0) { - y = Math.sqrt(y); - } - y = ry - y; - if (point2.y - node.y > 0) { - y = -y; - } - pos.y += y; - } - return pos; - }; - return shapeSvg; -}; -const rect = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes + " " + node.class, - true - ); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = node.positioned ? node.width : bbox.width + node.padding; - const totalHeight = node.positioned ? node.height : bbox.height + node.padding; - const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; - const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; - rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const composite = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes, - true - ); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = node.positioned ? node.width : bbox.width + node.padding; - const totalHeight = node.positioned ? node.height : bbox.height + node.padding; - const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; - const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; - rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const labelRect = async (parent, node) => { - const { shapeSvg } = await labelHelper(parent, node, "label", true); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = 0; - const totalHeight = 0; - rect2.attr("width", totalWidth).attr("height", totalHeight); - shapeSvg.attr("class", "label edgeLabel"); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { - const strokeDashArray = []; - const addBorder = (length) => { - strokeDashArray.push(length, 0); - }; - const skipBorder = (length) => { - strokeDashArray.push(0, length); - }; - if (borders.includes("t")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); - addBorder(totalWidth); - } else { - skipBorder(totalWidth); - } - if (borders.includes("r")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); - addBorder(totalHeight); - } else { - skipBorder(totalHeight); - } - if (borders.includes("b")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); - addBorder(totalWidth); - } else { - skipBorder(totalWidth); - } - if (borders.includes("l")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); - addBorder(totalHeight); - } else { - skipBorder(totalHeight); - } - rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); -} -const rectWithTitle = (parent, node) => { - let classes; - if (!node.classes) { - classes = "node default"; - } else { - classes = "node " + node.classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const innerLine = shapeSvg.insert("line"); - const label = shapeSvg.insert("g").attr("class", "label"); - const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; - let title = ""; - if (typeof text2 === "object") { - title = text2[0]; - } else { - title = text2; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); - const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); - let bbox = { width: 0, height: 0 }; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); - const textRows = text2.slice(1, text2.length); - let titleBox = text.getBBox(); - const descr = label.node().appendChild( - createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) - ); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = descr.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - const halfPadding = node.padding / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr).attr( - "transform", - "translate( " + // (titleBox.width - bbox.width) / 2 + - (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" - ); - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text).attr( - "transform", - "translate( " + // (titleBox.width - bbox.width) / 2 + - (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" - ); - bbox = label.node().getBBox(); - label.attr( - "transform", - "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" - ); - rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const stadium = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const h = bbox.height + node.padding; - const w = bbox.width + h / 4 + node.padding; - const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const circle = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); - return intersect.circle(node, bbox.width / 2 + halfPadding, point2); - }; - return shapeSvg; -}; -const doublecircle = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const gap = 5; - const circleGroup = shapeSvg.insert("g", ":first-child"); - const outerCircle = circleGroup.insert("circle"); - const innerCircle = circleGroup.insert("circle"); - circleGroup.attr("class", node.class); - outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); - innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); - updateNodeBounds(node, outerCircle); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); - return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); - }; - return shapeSvg; -}; -const subroutine = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 0, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: 0, y: -h }, - { x: 0, y: 0 }, - { x: -8, y: 0 }, - { x: w + 8, y: 0 }, - { x: w + 8, y: -h }, - { x: -8, y: -h }, - { x: -8, y: 0 } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const start = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - return intersect.circle(node, 7, point2); - }; - return shapeSvg; -}; -const forkJoin = (parent, node, dir) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - let width = 70; - let height = 10; - if (dir === "LR") { - width = 10; - height = 70; - } - const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); - updateNodeBounds(node, shape); - node.height = node.height + node.padding / 2; - node.width = node.width + node.padding / 2; - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const end = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const innerCircle = shapeSvg.insert("circle", ":first-child"); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); - innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - return intersect.circle(node, 7, point2); - }; - return shapeSvg; -}; -const class_box = (parent, node) => { - const halfPadding = node.padding / 2; - const rowPadding = 4; - const lineHeight = 8; - let classes; - if (!node.classes) { - classes = "node default"; - } else { - classes = "node " + node.classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const topLine = shapeSvg.insert("line"); - const bottomLine = shapeSvg.insert("line"); - let maxWidth = 0; - let maxHeight = rowPadding; - const labelContainer = shapeSvg.insert("g").attr("class", "label"); - let verticalPos = 0; - const hasInterface = node.classData.annotations && node.classData.annotations[0]; - const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; - const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); - let interfaceBBox = interfaceLabel.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = interfaceLabel.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel); - interfaceBBox = div.getBoundingClientRect(); - dv.attr("width", interfaceBBox.width); - dv.attr("height", interfaceBBox.height); - } - if (node.classData.annotations[0]) { - maxHeight += interfaceBBox.height + rowPadding; - maxWidth += interfaceBBox.width; - } - let classTitleString = node.classData.label; - if (node.classData.type !== void 0 && node.classData.type !== "") { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - classTitleString += "<" + node.classData.type + ">"; - } else { - classTitleString += "<" + node.classData.type + ">"; - } - } - const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr("class", "classTitle"); - let classTitleBBox = classTitleLabel.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = classTitleLabel.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel); - classTitleBBox = div.getBoundingClientRect(); - dv.attr("width", classTitleBBox.width); - dv.attr("height", classTitleBBox.height); - } - maxHeight += classTitleBBox.height + rowPadding; - if (classTitleBBox.width > maxWidth) { - maxWidth = classTitleBBox.width; - } - const classAttributes = []; - node.classData.members.forEach((member) => { - const parsedInfo = member.getDisplayDetails(); - let parsedText = parsedInfo.displayText; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); - } - const lbl = labelContainer.node().appendChild( - createLabel$1( - parsedText, - parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, - true, - true - ) - ); - let bbox = lbl.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = lbl.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (bbox.width > maxWidth) { - maxWidth = bbox.width; - } - maxHeight += bbox.height + rowPadding; - classAttributes.push(lbl); - }); - maxHeight += lineHeight; - const classMethods = []; - node.classData.methods.forEach((member) => { - const parsedInfo = member.getDisplayDetails(); - let displayText = parsedInfo.displayText; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); - } - const lbl = labelContainer.node().appendChild( - createLabel$1( - displayText, - parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, - true, - true - ) - ); - let bbox = lbl.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = lbl.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (bbox.width > maxWidth) { - maxWidth = bbox.width; - } - maxHeight += bbox.height + rowPadding; - classMethods.push(lbl); - }); - maxHeight += lineHeight; - if (hasInterface) { - let diffX2 = (maxWidth - interfaceBBox.width) / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel).attr( - "transform", - "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" - ); - verticalPos = interfaceBBox.height + rowPadding; - } - let diffX = (maxWidth - classTitleBBox.width) / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr( - "transform", - "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" - ); - verticalPos += classTitleBBox.height + rowPadding; - topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); - verticalPos += lineHeight; - classAttributes.forEach((lbl) => { - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( - "transform", - "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" - ); - const memberBBox = lbl == null ? void 0 : lbl.getBBox(); - verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; - }); - verticalPos += lineHeight; - bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); - verticalPos += lineHeight; - classMethods.forEach((lbl) => { - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( - "transform", - "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" - ); - const memberBBox = lbl == null ? void 0 : lbl.getBBox(); - verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; - }); - rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const shapes = { - rhombus: question, - composite, - question, - rect, - labelRect, - rectWithTitle, - choice, - circle, - doublecircle, - stadium, - hexagon, - block_arrow, - rect_left_inv_arrow, - lean_right, - lean_left, - trapezoid, - inv_trapezoid, - rect_right_inv_arrow, - cylinder, - start, - end, - note: note$1, - subroutine, - fork: forkJoin, - join: forkJoin, - class_box -}; -let nodeElems = {}; -const insertNode = async (elem, node, dir) => { - let newEl; - let el; - if (node.link) { - let target; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { - target = "_top"; - } else if (node.linkTarget) { - target = node.linkTarget || "_blank"; - } - newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); - el = await shapes[node.shape](newEl, node, dir); - } else { - el = await shapes[node.shape](elem, node, dir); - newEl = el; - } - if (node.tooltip) { - el.attr("title", node.tooltip); - } - if (node.class) { - el.attr("class", "node default " + node.class); - } - newEl.attr("data-node", "true"); - newEl.attr("data-id", node.id); - nodeElems[node.id] = newEl; - if (node.haveCallback) { - nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); - } - return newEl; -}; -const setNodeElem = (elem, node) => { - nodeElems[node.id] = elem; -}; -const clear$1 = () => { - nodeElems = {}; -}; -const positionNode = (node) => { - const el = nodeElems[node.id]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( - "Transforming node", - node.diff, - node, - "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" - ); - const padding = 8; - const diff = node.diff || 0; - if (node.clusterNode) { - el.attr( - "transform", - "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" - ); - } else { - el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); - } - return diff; -}; -const getSubGraphTitleMargins = ({ - flowchart -}) => { - var _a, _b; - const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; - const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; - const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; - return { - subGraphTitleTopMargin, - subGraphTitleBottomMargin, - subGraphTitleTotalMargin - }; -}; -const markerOffsets = { - aggregation: 18, - extension: 18, - composition: 18, - dependency: 6, - lollipop: 13.5, - arrow_point: 5.3 -}; -function calculateDeltaAndAngle(point1, point2) { - if (point1 === void 0 || point2 === void 0) { - return { angle: 0, deltaX: 0, deltaY: 0 }; - } - point1 = pointTransformer(point1); - point2 = pointTransformer(point2); - const [x1, y1] = [point1.x, point1.y]; - const [x2, y2] = [point2.x, point2.y]; - const deltaX = x2 - x1; - const deltaY = y2 - y1; - return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; -} -const pointTransformer = (data) => { - if (Array.isArray(data)) { - return { x: data[0], y: data[1] }; - } - return data; -}; -const getLineFunctionsWithOffset = (edge) => { - return { - x: function(d, i, data) { - let offset = 0; - if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { - const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); - offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); - } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { - const { angle, deltaX } = calculateDeltaAndAngle( - data[data.length - 1], - data[data.length - 2] - ); - offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); - } - return pointTransformer(d).x + offset; - }, - y: function(d, i, data) { - let offset = 0; - if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { - const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); - offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); - } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { - const { angle, deltaY } = calculateDeltaAndAngle( - data[data.length - 1], - data[data.length - 2] - ); - offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); - } - return pointTransformer(d).y + offset; - } - }; -}; -const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { - if (edge.arrowTypeStart) { - addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); - } - if (edge.arrowTypeEnd) { - addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); - } -}; -const arrowTypesMap = { - arrow_cross: "cross", - arrow_point: "point", - arrow_barb: "barb", - arrow_circle: "circle", - aggregation: "aggregation", - extension: "extension", - composition: "composition", - dependency: "dependency", - lollipop: "lollipop" -}; -const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { - const endMarkerType = arrowTypesMap[arrowType]; - if (!endMarkerType) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); - return; - } - const suffix = position === "start" ? "Start" : "End"; - svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); -}; -let edgeLabels = {}; -let terminalLabels = {}; -const clear = () => { - edgeLabels = {}; - terminalLabels = {}; -}; -const insertEdgeLabel = (elem, edge) => { - const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); - const labelElement = edge.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { - style: edge.labelStyle, - useHtmlLabels, - addSvgBackground: true - }) : createLabel$1(edge.label, edge.labelStyle); - const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); - const label = edgeLabel.insert("g").attr("class", "label"); - label.node().appendChild(labelElement); - let bbox = labelElement.getBBox(); - if (useHtmlLabels) { - const div = labelElement.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(labelElement); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - edgeLabels[edge.id] = edgeLabel; - edge.width = bbox.width; - edge.height = bbox.height; - let fo; - if (edge.startLabelLeft) { - const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); - const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); - const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(startLabelElement); - const slBox = startLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].startLeft = startEdgeLabelLeft; - setTerminalWidth(fo, edge.startLabelLeft); - } - if (edge.startLabelRight) { - const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); - const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); - const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); - fo = startEdgeLabelRight.node().appendChild(startLabelElement); - inner.node().appendChild(startLabelElement); - const slBox = startLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].startRight = startEdgeLabelRight; - setTerminalWidth(fo, edge.startLabelRight); - } - if (edge.endLabelLeft) { - const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); - const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); - const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(endLabelElement); - const slBox = endLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - endEdgeLabelLeft.node().appendChild(endLabelElement); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].endLeft = endEdgeLabelLeft; - setTerminalWidth(fo, edge.endLabelLeft); - } - if (edge.endLabelRight) { - const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); - const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); - const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(endLabelElement); - const slBox = endLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - endEdgeLabelRight.node().appendChild(endLabelElement); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].endRight = endEdgeLabelRight; - setTerminalWidth(fo, edge.endLabelRight); - } - return labelElement; -}; -function setTerminalWidth(fo, value) { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { - fo.style.width = value.length * 9 + "px"; - fo.style.height = "12px"; - } -} -const positionEdgeLabel = (edge, paths) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); - let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); - if (edge.label) { - const el = edgeLabels[edge.id]; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( - "Moving label " + edge.label + " from (", - x, - ",", - y, - ") to (", - pos.x, - ",", - pos.y, - ") abc88" - ); - if (paths.updatedPath) { - x = pos.x; - y = pos.y; - } - } - el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); - } - if (edge.startLabelLeft) { - const el = terminalLabels[edge.id].startLeft; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.startLabelRight) { - const el = terminalLabels[edge.id].startRight; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( - edge.arrowTypeStart ? 10 : 0, - "start_right", - path - ); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.endLabelLeft) { - const el = terminalLabels[edge.id].endLeft; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.endLabelRight) { - const el = terminalLabels[edge.id].endRight; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } -}; -const outsideNode = (node, point2) => { - const x = node.x; - const y = node.y; - const dx = Math.abs(point2.x - x); - const dy = Math.abs(point2.y - y); - const w = node.width / 2; - const h = node.height / 2; - if (dx >= w || dy >= h) { - return true; - } - return false; -}; -const intersection = (node, outsidePoint, insidePoint) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: - outsidePoint: ${JSON.stringify(outsidePoint)} - insidePoint : ${JSON.stringify(insidePoint)} - node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); - const x = node.x; - const y = node.y; - const dx = Math.abs(x - insidePoint.x); - const w = node.width / 2; - let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; - const h = node.height / 2; - const Q = Math.abs(outsidePoint.y - insidePoint.y); - const R = Math.abs(outsidePoint.x - insidePoint.x); - if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { - let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; - r = R * q / Q; - const res = { - x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, - y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q - }; - if (r === 0) { - res.x = outsidePoint.x; - res.y = outsidePoint.y; - } - if (R === 0) { - res.x = outsidePoint.x; - } - if (Q === 0) { - res.y = outsidePoint.y; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); - return res; - } else { - if (insidePoint.x < outsidePoint.x) { - r = outsidePoint.x - w - x; - } else { - r = x - w - outsidePoint.x; - } - let q = Q * r / R; - let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; - let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); - if (r === 0) { - _x = outsidePoint.x; - _y = outsidePoint.y; - } - if (R === 0) { - _x = outsidePoint.x; - } - if (Q === 0) { - _y = outsidePoint.y; - } - return { x: _x, y: _y }; - } -}; -const cutPathAtIntersect = (_points, boundaryNode) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundaryNode); - let points = []; - let lastPointOutside = _points[0]; - let isInside = false; - _points.forEach((point2) => { - if (!outsideNode(boundaryNode, point2) && !isInside) { - const inter = intersection(boundaryNode, lastPointOutside, point2); - let pointPresent = false; - points.forEach((p) => { - pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; - }); - if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { - points.push(inter); - } - isInside = true; - } else { - lastPointOutside = point2; - if (!isInside) { - points.push(point2); - } - } - }); - return points; -}; -const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { - let points = edge.points; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); - let pointsHasChanged = false; - const tail = graph.node(e.v); - var head = graph.node(e.w); - if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { - points = points.slice(1, edge.points.length - 1); - points.unshift(tail.intersect(points[0])); - points.push(head.intersect(points[points.length - 1])); - } - if (edge.toCluster) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); - points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); - pointsHasChanged = true; - } - if (edge.fromCluster) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); - points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); - pointsHasChanged = true; - } - const lineData = points.filter((p) => !Number.isNaN(p.y)); - let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .qrM; - if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { - curve = edge.curve; - } - const { x, y } = getLineFunctionsWithOffset(edge); - const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(x).y(y).curve(curve); - let strokeClasses; - switch (edge.thickness) { - case "normal": - strokeClasses = "edge-thickness-normal"; - break; - case "thick": - strokeClasses = "edge-thickness-thick"; - break; - case "invisible": - strokeClasses = "edge-thickness-thick"; - break; - default: - strokeClasses = ""; - } - switch (edge.pattern) { - case "solid": - strokeClasses += " edge-pattern-solid"; - break; - case "dotted": - strokeClasses += " edge-pattern-dotted"; - break; - case "dashed": - strokeClasses += " edge-pattern-dashed"; - break; - } - const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); - let url = ""; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { - url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; - url = url.replace(/\(/g, "\\("); - url = url.replace(/\)/g, "\\)"); - } - addEdgeMarkers(svgPath, edge, url, id, diagramType); - let paths = {}; - if (pointsHasChanged) { - paths.updatedPath = points; - } - paths.originalPath = edge.points; - return paths; -}; - - - -/***/ }), - -/***/ 32548: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ d: () => (/* binding */ db), -/* harmony export */ f: () => (/* binding */ flowDb), -/* harmony export */ p: () => (/* binding */ parser$1) -/* harmony export */ }); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 27, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $V4 = [2, 2], $V5 = [1, 13], $V6 = [1, 14], $V7 = [1, 15], $V8 = [1, 16], $V9 = [1, 23], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 49], $Ve = [1, 48], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 44], $Vl = [1, 46], $Vm = [1, 42], $Vn = [1, 47], $Vo = [1, 43], $Vp = [1, 50], $Vq = [1, 45], $Vr = [1, 51], $Vs = [1, 52], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 57], $Vy = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vz = [1, 61], $VA = [1, 60], $VB = [1, 62], $VC = [8, 9, 11, 73, 75], $VD = [1, 88], $VE = [1, 93], $VF = [1, 92], $VG = [1, 89], $VH = [1, 85], $VI = [1, 91], $VJ = [1, 87], $VK = [1, 94], $VL = [1, 90], $VM = [1, 95], $VN = [1, 86], $VO = [8, 9, 10, 11, 73, 75], $VP = [8, 9, 10, 11, 44, 73, 75], $VQ = [8, 9, 10, 11, 29, 42, 44, 46, 48, 50, 52, 54, 56, 58, 61, 63, 65, 66, 68, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VR = [8, 9, 11, 42, 58, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VS = [42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VT = [1, 121], $VU = [1, 120], $VV = [1, 128], $VW = [1, 142], $VX = [1, 143], $VY = [1, 144], $VZ = [1, 145], $V_ = [1, 130], $V$ = [1, 132], $V01 = [1, 136], $V11 = [1, 137], $V21 = [1, 138], $V31 = [1, 139], $V41 = [1, 140], $V51 = [1, 141], $V61 = [1, 146], $V71 = [1, 147], $V81 = [1, 126], $V91 = [1, 127], $Va1 = [1, 134], $Vb1 = [1, 129], $Vc1 = [1, 133], $Vd1 = [1, 131], $Ve1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vf1 = [1, 149], $Vg1 = [8, 9, 11], $Vh1 = [8, 9, 10, 11, 14, 42, 58, 86, 102, 103, 106, 108, 111, 112, 113], $Vi1 = [1, 169], $Vj1 = [1, 165], $Vk1 = [1, 166], $Vl1 = [1, 170], $Vm1 = [1, 167], $Vn1 = [1, 168], $Vo1 = [75, 113, 116], $Vp1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 42, 58, 73, 81, 82, 83, 84, 85, 86, 87, 102, 106, 108, 111, 112, 113], $Vq1 = [10, 103], $Vr1 = [31, 47, 49, 51, 53, 55, 60, 62, 64, 65, 67, 69, 113, 114, 115], $Vs1 = [1, 235], $Vt1 = [1, 233], $Vu1 = [1, 237], $Vv1 = [1, 231], $Vw1 = [1, 232], $Vx1 = [1, 234], $Vy1 = [1, 236], $Vz1 = [1, 238], $VA1 = [1, 255], $VB1 = [8, 9, 11, 103], $VC1 = [8, 9, 10, 11, 58, 81, 102, 103, 106, 107, 108, 109]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "graphConfig": 4, "document": 5, "line": 6, "statement": 7, "SEMI": 8, "NEWLINE": 9, "SPACE": 10, "EOF": 11, "GRAPH": 12, "NODIR": 13, "DIR": 14, "FirstStmtSeparator": 15, "ending": 16, "endToken": 17, "spaceList": 18, "spaceListNewline": 19, "vertexStatement": 20, "separator": 21, "styleStatement": 22, "linkStyleStatement": 23, "classDefStatement": 24, "classStatement": 25, "clickStatement": 26, "subgraph": 27, "textNoTags": 28, "SQS": 29, "text": 30, "SQE": 31, "end": 32, "direction": 33, "acc_title": 34, "acc_title_value": 35, "acc_descr": 36, "acc_descr_value": 37, "acc_descr_multiline_value": 38, "link": 39, "node": 40, "styledVertex": 41, "AMP": 42, "vertex": 43, "STYLE_SEPARATOR": 44, "idString": 45, "DOUBLECIRCLESTART": 46, "DOUBLECIRCLEEND": 47, "PS": 48, "PE": 49, "(-": 50, "-)": 51, "STADIUMSTART": 52, "STADIUMEND": 53, "SUBROUTINESTART": 54, "SUBROUTINEEND": 55, "VERTEX_WITH_PROPS_START": 56, "NODE_STRING[field]": 57, "COLON": 58, "NODE_STRING[value]": 59, "PIPE": 60, "CYLINDERSTART": 61, "CYLINDEREND": 62, "DIAMOND_START": 63, "DIAMOND_STOP": 64, "TAGEND": 65, "TRAPSTART": 66, "TRAPEND": 67, "INVTRAPSTART": 68, "INVTRAPEND": 69, "linkStatement": 70, "arrowText": 71, "TESTSTR": 72, "START_LINK": 73, "edgeText": 74, "LINK": 75, "edgeTextToken": 76, "STR": 77, "MD_STR": 78, "textToken": 79, "keywords": 80, "STYLE": 81, "LINKSTYLE": 82, "CLASSDEF": 83, "CLASS": 84, "CLICK": 85, "DOWN": 86, "UP": 87, "textNoTagsToken": 88, "stylesOpt": 89, "idString[vertex]": 90, "idString[class]": 91, "CALLBACKNAME": 92, "CALLBACKARGS": 93, "HREF": 94, "LINK_TARGET": 95, "STR[link]": 96, "STR[tooltip]": 97, "alphaNum": 98, "DEFAULT": 99, "numList": 100, "INTERPOLATE": 101, "NUM": 102, "COMMA": 103, "style": 104, "styleComponent": 105, "NODE_STRING": 106, "UNIT": 107, "BRKT": 108, "PCT": 109, "idStringToken": 110, "MINUS": 111, "MULT": 112, "UNICODE_TEXT": 113, "TEXT": 114, "TAGSTART": 115, "EDGE_TEXT": 116, "alphaNumToken": 117, "direction_tb": 118, "direction_bt": 119, "direction_rl": 120, "direction_lr": 121, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 8: "SEMI", 9: "NEWLINE", 10: "SPACE", 11: "EOF", 12: "GRAPH", 13: "NODIR", 14: "DIR", 27: "subgraph", 29: "SQS", 31: "SQE", 32: "end", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 42: "AMP", 44: "STYLE_SEPARATOR", 46: "DOUBLECIRCLESTART", 47: "DOUBLECIRCLEEND", 48: "PS", 49: "PE", 50: "(-", 51: "-)", 52: "STADIUMSTART", 53: "STADIUMEND", 54: "SUBROUTINESTART", 55: "SUBROUTINEEND", 56: "VERTEX_WITH_PROPS_START", 57: "NODE_STRING[field]", 58: "COLON", 59: "NODE_STRING[value]", 60: "PIPE", 61: "CYLINDERSTART", 62: "CYLINDEREND", 63: "DIAMOND_START", 64: "DIAMOND_STOP", 65: "TAGEND", 66: "TRAPSTART", 67: "TRAPEND", 68: "INVTRAPSTART", 69: "INVTRAPEND", 72: "TESTSTR", 73: "START_LINK", 75: "LINK", 77: "STR", 78: "MD_STR", 81: "STYLE", 82: "LINKSTYLE", 83: "CLASSDEF", 84: "CLASS", 85: "CLICK", 86: "DOWN", 87: "UP", 90: "idString[vertex]", 91: "idString[class]", 92: "CALLBACKNAME", 93: "CALLBACKARGS", 94: "HREF", 95: "LINK_TARGET", 96: "STR[link]", 97: "STR[tooltip]", 99: "DEFAULT", 101: "INTERPOLATE", 102: "NUM", 103: "COMMA", 106: "NODE_STRING", 107: "UNIT", 108: "BRKT", 109: "PCT", 111: "MINUS", 112: "MULT", 113: "UNICODE_TEXT", 114: "TEXT", 115: "TAGSTART", 116: "EDGE_TEXT", 118: "direction_tb", 119: "direction_bt", 120: "direction_rl", 121: "direction_lr" }, - productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [20, 3], [20, 4], [20, 2], [20, 1], [40, 1], [40, 5], [41, 1], [41, 3], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 8], [43, 4], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 4], [43, 4], [43, 1], [39, 2], [39, 3], [39, 3], [39, 1], [39, 3], [74, 1], [74, 2], [74, 1], [74, 1], [70, 1], [71, 3], [30, 1], [30, 2], [30, 1], [30, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [100, 1], [100, 3], [89, 1], [89, 3], [104, 1], [104, 2], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [79, 1], [79, 1], [79, 1], [79, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [76, 1], [76, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [45, 1], [45, 2], [98, 1], [98, 2], [33, 1], [33, 1], [33, 1], [33, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 2: - this.$ = []; - break; - case 3: - if (!Array.isArray($$[$0]) || $$[$0].length > 0) { - $$[$0 - 1].push($$[$0]); - } - this.$ = $$[$0 - 1]; - break; - case 4: - case 176: - this.$ = $$[$0]; - break; - case 11: - yy.setDirection("TB"); - this.$ = "TB"; - break; - case 12: - yy.setDirection($$[$0 - 1]); - this.$ = $$[$0 - 1]; - break; - case 27: - this.$ = $$[$0 - 1].nodes; - break; - case 28: - case 29: - case 30: - case 31: - case 32: - this.$ = []; - break; - case 33: - this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); - break; - case 34: - this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); - break; - case 35: - this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); - break; - case 37: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 38: - case 39: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 43: - yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); - this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; - break; - case 44: - yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); - this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; - break; - case 45: - this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; - break; - case 46: - this.$ = { stmt: $$[$0], nodes: $$[$0] }; - break; - case 47: - this.$ = [$$[$0]]; - break; - case 48: - this.$ = $$[$0 - 4].concat($$[$0]); - break; - case 49: - this.$ = $$[$0]; - break; - case 50: - this.$ = $$[$0 - 2]; - yy.setClass($$[$0 - 2], $$[$0]); - break; - case 51: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); - break; - case 52: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); - break; - case 53: - this.$ = $$[$0 - 5]; - yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); - break; - case 54: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); - break; - case 55: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); - break; - case 56: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); - break; - case 57: - this.$ = $$[$0 - 7]; - yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); - break; - case 58: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); - break; - case 59: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); - break; - case 60: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); - break; - case 61: - this.$ = $$[$0 - 5]; - yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); - break; - case 62: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); - break; - case 63: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); - break; - case 64: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); - break; - case 65: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); - break; - case 66: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); - break; - case 67: - this.$ = $$[$0]; - yy.addVertex($$[$0]); - break; - case 68: - $$[$0 - 1].text = $$[$0]; - this.$ = $$[$0 - 1]; - break; - case 69: - case 70: - $$[$0 - 2].text = $$[$0 - 1]; - this.$ = $$[$0 - 2]; - break; - case 71: - this.$ = $$[$0]; - break; - case 72: - var inf = yy.destructLink($$[$0], $$[$0 - 2]); - this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; - break; - case 73: - this.$ = { text: $$[$0], type: "text" }; - break; - case 74: - this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; - break; - case 75: - this.$ = { text: $$[$0], type: "string" }; - break; - case 76: - this.$ = { text: $$[$0], type: "markdown" }; - break; - case 77: - var inf = yy.destructLink($$[$0]); - this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; - break; - case 78: - this.$ = $$[$0 - 1]; - break; - case 79: - this.$ = { text: $$[$0], type: "text" }; - break; - case 80: - this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; - break; - case 81: - this.$ = { text: $$[$0], type: "string" }; - break; - case 82: - case 97: - this.$ = { text: $$[$0], type: "markdown" }; - break; - case 94: - this.$ = { text: $$[$0], type: "text" }; - break; - case 95: - this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; - break; - case 96: - this.$ = { text: $$[$0], type: "text" }; - break; - case 98: - this.$ = $$[$0 - 4]; - yy.addClass($$[$0 - 2], $$[$0]); - break; - case 99: - this.$ = $$[$0 - 4]; - yy.setClass($$[$0 - 2], $$[$0]); - break; - case 100: - case 108: - this.$ = $$[$0 - 1]; - yy.setClickEvent($$[$0 - 1], $$[$0]); - break; - case 101: - case 109: - this.$ = $$[$0 - 3]; - yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); - yy.setTooltip($$[$0 - 3], $$[$0]); - break; - case 102: - this.$ = $$[$0 - 2]; - yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); - break; - case 103: - this.$ = $$[$0 - 4]; - yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); - yy.setTooltip($$[$0 - 4], $$[$0]); - break; - case 104: - this.$ = $$[$0 - 2]; - yy.setLink($$[$0 - 2], $$[$0]); - break; - case 105: - this.$ = $$[$0 - 4]; - yy.setLink($$[$0 - 4], $$[$0 - 2]); - yy.setTooltip($$[$0 - 4], $$[$0]); - break; - case 106: - this.$ = $$[$0 - 4]; - yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); - break; - case 107: - this.$ = $$[$0 - 6]; - yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]); - yy.setTooltip($$[$0 - 6], $$[$0 - 2]); - break; - case 110: - this.$ = $$[$0 - 1]; - yy.setLink($$[$0 - 1], $$[$0]); - break; - case 111: - this.$ = $$[$0 - 3]; - yy.setLink($$[$0 - 3], $$[$0 - 2]); - yy.setTooltip($$[$0 - 3], $$[$0]); - break; - case 112: - this.$ = $$[$0 - 3]; - yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); - break; - case 113: - this.$ = $$[$0 - 5]; - yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); - yy.setTooltip($$[$0 - 5], $$[$0 - 2]); - break; - case 114: - this.$ = $$[$0 - 4]; - yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); - break; - case 115: - this.$ = $$[$0 - 4]; - yy.updateLink([$$[$0 - 2]], $$[$0]); - break; - case 116: - this.$ = $$[$0 - 4]; - yy.updateLink($$[$0 - 2], $$[$0]); - break; - case 117: - this.$ = $$[$0 - 8]; - yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); - yy.updateLink([$$[$0 - 6]], $$[$0]); - break; - case 118: - this.$ = $$[$0 - 8]; - yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); - yy.updateLink($$[$0 - 6], $$[$0]); - break; - case 119: - this.$ = $$[$0 - 6]; - yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); - break; - case 120: - this.$ = $$[$0 - 6]; - yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); - break; - case 121: - case 123: - this.$ = [$$[$0]]; - break; - case 122: - case 124: - $$[$0 - 2].push($$[$0]); - this.$ = $$[$0 - 2]; - break; - case 126: - this.$ = $$[$0 - 1] + $$[$0]; - break; - case 174: - this.$ = $$[$0]; - break; - case 175: - this.$ = $$[$0 - 1] + "" + $$[$0]; - break; - case 177: - this.$ = $$[$0 - 1] + "" + $$[$0]; - break; - case 178: - this.$ = { stmt: "dir", value: "TB" }; - break; - case 179: - this.$ = { stmt: "dir", value: "BT" }; - break; - case 180: - this.$ = { stmt: "dir", value: "RL" }; - break; - case 181: - this.$ = { stmt: "dir", value: "LR" }; - break; - } - }, - table: [{ 3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2 }, { 1: [3] }, o($V3, $V4, { 5: 6 }), { 4: 7, 9: $V0, 10: $V1, 12: $V2 }, { 4: 8, 9: $V0, 10: $V1, 12: $V2 }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($V3, [2, 9]), o($V3, [2, 10]), o($V3, [2, 11]), { 8: [1, 54], 9: [1, 55], 10: $Vx, 15: 53, 18: 56 }, o($Vy, [2, 3]), o($Vy, [2, 4]), o($Vy, [2, 5]), o($Vy, [2, 6]), o($Vy, [2, 7]), o($Vy, [2, 8]), { 8: $Vz, 9: $VA, 11: $VB, 21: 58, 39: 59, 70: 63, 73: [1, 64], 75: [1, 65] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 66 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 67 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 68 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 69 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 70 }, { 8: $Vz, 9: $VA, 10: [1, 71], 11: $VB, 21: 72 }, o($Vy, [2, 36]), { 35: [1, 73] }, { 37: [1, 74] }, o($Vy, [2, 39]), o($VC, [2, 46], { 18: 75, 10: $Vx }), { 10: [1, 76] }, { 10: [1, 77] }, { 10: [1, 78] }, { 10: [1, 79] }, { 14: $VD, 42: $VE, 58: $VF, 77: [1, 83], 86: $VG, 92: [1, 80], 94: [1, 81], 98: 82, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, o($Vy, [2, 178]), o($Vy, [2, 179]), o($Vy, [2, 180]), o($Vy, [2, 181]), o($VO, [2, 47]), o($VO, [2, 49], { 44: [1, 96] }), o($VP, [2, 67], { 110: 109, 29: [1, 97], 42: $Vd, 46: [1, 98], 48: [1, 99], 50: [1, 100], 52: [1, 101], 54: [1, 102], 56: [1, 103], 58: $Ve, 61: [1, 104], 63: [1, 105], 65: [1, 106], 66: [1, 107], 68: [1, 108], 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($VQ, [2, 174]), o($VQ, [2, 135]), o($VQ, [2, 136]), o($VQ, [2, 137]), o($VQ, [2, 138]), o($VQ, [2, 139]), o($VQ, [2, 140]), o($VQ, [2, 141]), o($VQ, [2, 142]), o($VQ, [2, 143]), o($VQ, [2, 144]), o($VQ, [2, 145]), o($V3, [2, 12]), o($V3, [2, 18]), o($V3, [2, 19]), { 9: [1, 110] }, o($VR, [2, 26], { 18: 111, 10: $Vx }), o($Vy, [2, 27]), { 40: 112, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vy, [2, 40]), o($Vy, [2, 41]), o($Vy, [2, 42]), o($VS, [2, 71], { 71: 113, 60: [1, 115], 72: [1, 114] }), { 74: 116, 76: 117, 77: [1, 118], 78: [1, 119], 113: $VT, 116: $VU }, o([42, 58, 60, 72, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 77]), o($Vy, [2, 28]), o($Vy, [2, 29]), o($Vy, [2, 30]), o($Vy, [2, 31]), o($Vy, [2, 32]), { 10: $VV, 12: $VW, 14: $VX, 27: $VY, 28: 122, 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 77: [1, 124], 78: [1, 125], 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 123, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Ve1, $V4, { 5: 148 }), o($Vy, [2, 37]), o($Vy, [2, 38]), o($VC, [2, 45], { 42: $Vf1 }), { 42: $Vd, 45: 150, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 99: [1, 151], 100: 152, 102: [1, 153] }, { 42: $Vd, 45: 154, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 42: $Vd, 45: 155, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 100], { 10: [1, 156], 93: [1, 157] }), { 77: [1, 158] }, o($Vg1, [2, 108], { 117: 160, 10: [1, 159], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 110], { 10: [1, 161] }), o($Vh1, [2, 176]), o($Vh1, [2, 163]), o($Vh1, [2, 164]), o($Vh1, [2, 165]), o($Vh1, [2, 166]), o($Vh1, [2, 167]), o($Vh1, [2, 168]), o($Vh1, [2, 169]), o($Vh1, [2, 170]), o($Vh1, [2, 171]), o($Vh1, [2, 172]), o($Vh1, [2, 173]), { 42: $Vd, 45: 162, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 30: 163, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 171, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 173, 48: [1, 172], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 174, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 175, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 176, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 106: [1, 177] }, { 30: 178, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 179, 63: [1, 180], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 181, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 182, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 183, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VQ, [2, 175]), o($V3, [2, 20]), o($VR, [2, 25]), o($VC, [2, 43], { 18: 184, 10: $Vx }), o($VS, [2, 68], { 10: [1, 185] }), { 10: [1, 186] }, { 30: 187, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 75: [1, 188], 76: 189, 113: $VT, 116: $VU }, o($Vo1, [2, 73]), o($Vo1, [2, 75]), o($Vo1, [2, 76]), o($Vo1, [2, 161]), o($Vo1, [2, 162]), { 8: $Vz, 9: $VA, 10: $VV, 11: $VB, 12: $VW, 14: $VX, 21: 191, 27: $VY, 29: [1, 190], 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 192, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Vp1, [2, 94]), o($Vp1, [2, 96]), o($Vp1, [2, 97]), o($Vp1, [2, 150]), o($Vp1, [2, 151]), o($Vp1, [2, 152]), o($Vp1, [2, 153]), o($Vp1, [2, 154]), o($Vp1, [2, 155]), o($Vp1, [2, 156]), o($Vp1, [2, 157]), o($Vp1, [2, 158]), o($Vp1, [2, 159]), o($Vp1, [2, 160]), o($Vp1, [2, 83]), o($Vp1, [2, 84]), o($Vp1, [2, 85]), o($Vp1, [2, 86]), o($Vp1, [2, 87]), o($Vp1, [2, 88]), o($Vp1, [2, 89]), o($Vp1, [2, 90]), o($Vp1, [2, 91]), o($Vp1, [2, 92]), o($Vp1, [2, 93]), { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 193], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vx, 18: 194 }, { 10: [1, 195], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 196] }, { 10: [1, 197], 103: [1, 198] }, o($Vq1, [2, 121]), { 10: [1, 199], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 200], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 77: [1, 201] }, o($Vg1, [2, 102], { 10: [1, 202] }), o($Vg1, [2, 104], { 10: [1, 203] }), { 77: [1, 204] }, o($Vh1, [2, 177]), { 77: [1, 205], 95: [1, 206] }, o($VO, [2, 50], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), { 31: [1, 207], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Vr1, [2, 79]), o($Vr1, [2, 81]), o($Vr1, [2, 82]), o($Vr1, [2, 146]), o($Vr1, [2, 147]), o($Vr1, [2, 148]), o($Vr1, [2, 149]), { 47: [1, 209], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 210, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 49: [1, 211], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 51: [1, 212], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 53: [1, 213], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 55: [1, 214], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 58: [1, 215] }, { 62: [1, 216], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 64: [1, 217], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 218, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 31: [1, 219], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 220], 69: [1, 221], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 223], 69: [1, 222], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VC, [2, 44], { 42: $Vf1 }), o($VS, [2, 70]), o($VS, [2, 69]), { 60: [1, 224], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VS, [2, 72]), o($Vo1, [2, 74]), { 30: 225, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Ve1, $V4, { 5: 226 }), o($Vp1, [2, 95]), o($Vy, [2, 35]), { 41: 227, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 228, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 239, 101: [1, 240], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 241, 101: [1, 242], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 102: [1, 243] }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 244, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 42: $Vd, 45: 245, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 101]), { 77: [1, 246] }, { 77: [1, 247], 95: [1, 248] }, o($Vg1, [2, 109]), o($Vg1, [2, 111], { 10: [1, 249] }), o($Vg1, [2, 112]), o($VP, [2, 51]), o($Vr1, [2, 80]), o($VP, [2, 52]), { 49: [1, 250], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 59]), o($VP, [2, 54]), o($VP, [2, 55]), o($VP, [2, 56]), { 106: [1, 251] }, o($VP, [2, 58]), o($VP, [2, 60]), { 64: [1, 252], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 62]), o($VP, [2, 63]), o($VP, [2, 65]), o($VP, [2, 64]), o($VP, [2, 66]), o([10, 42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 78]), { 31: [1, 253], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 254], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($VO, [2, 48]), o($Vg1, [2, 114], { 103: $VA1 }), o($VB1, [2, 123], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($VC1, [2, 125]), o($VC1, [2, 127]), o($VC1, [2, 128]), o($VC1, [2, 129]), o($VC1, [2, 130]), o($VC1, [2, 131]), o($VC1, [2, 132]), o($VC1, [2, 133]), o($VC1, [2, 134]), o($Vg1, [2, 115], { 103: $VA1 }), { 10: [1, 257] }, o($Vg1, [2, 116], { 103: $VA1 }), { 10: [1, 258] }, o($Vq1, [2, 122]), o($Vg1, [2, 98], { 103: $VA1 }), o($Vg1, [2, 99], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($Vg1, [2, 103]), o($Vg1, [2, 105], { 10: [1, 259] }), o($Vg1, [2, 106]), { 95: [1, 260] }, { 49: [1, 261] }, { 60: [1, 262] }, { 64: [1, 263] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 264 }, o($Vy, [2, 34]), { 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 104: 265, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VC1, [2, 126]), { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 266, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 267, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 95: [1, 268] }, o($Vg1, [2, 113]), o($VP, [2, 53]), { 30: 269, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 61]), o($Ve1, $V4, { 5: 270 }), o($VB1, [2, 124], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($Vg1, [2, 119], { 117: 160, 10: [1, 271], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 120], { 117: 160, 10: [1, 272], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 107]), { 31: [1, 273], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 274], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 275, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 276, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VP, [2, 57]), o($Vy, [2, 33]), o($Vg1, [2, 117], { 103: $VA1 }), o($Vg1, [2, 118], { 103: $VA1 })], - defaultActions: {}, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex2() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex2(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex2() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: {}, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - this.begin("acc_title"); - return 34; - case 1: - this.popState(); - return "acc_title_value"; - case 2: - this.begin("acc_descr"); - return 36; - case 3: - this.popState(); - return "acc_descr_value"; - case 4: - this.begin("acc_descr_multiline"); - break; - case 5: - this.popState(); - break; - case 6: - return "acc_descr_multiline_value"; - case 7: - this.begin("callbackname"); - break; - case 8: - this.popState(); - break; - case 9: - this.popState(); - this.begin("callbackargs"); - break; - case 10: - return 92; - case 11: - this.popState(); - break; - case 12: - return 93; - case 13: - return "MD_STR"; - case 14: - this.popState(); - break; - case 15: - this.begin("md_string"); - break; - case 16: - return "STR"; - case 17: - this.popState(); - break; - case 18: - this.pushState("string"); - break; - case 19: - return 81; - case 20: - return 99; - case 21: - return 82; - case 22: - return 101; - case 23: - return 83; - case 24: - return 84; - case 25: - return 94; - case 26: - this.begin("click"); - break; - case 27: - this.popState(); - break; - case 28: - return 85; - case 29: - if (yy.lex.firstGraph()) { - this.begin("dir"); - } - return 12; - case 30: - if (yy.lex.firstGraph()) { - this.begin("dir"); - } - return 12; - case 31: - if (yy.lex.firstGraph()) { - this.begin("dir"); - } - return 12; - case 32: - return 27; - case 33: - return 32; - case 34: - return 95; - case 35: - return 95; - case 36: - return 95; - case 37: - return 95; - case 38: - this.popState(); - return 13; - case 39: - this.popState(); - return 14; - case 40: - this.popState(); - return 14; - case 41: - this.popState(); - return 14; - case 42: - this.popState(); - return 14; - case 43: - this.popState(); - return 14; - case 44: - this.popState(); - return 14; - case 45: - this.popState(); - return 14; - case 46: - this.popState(); - return 14; - case 47: - this.popState(); - return 14; - case 48: - this.popState(); - return 14; - case 49: - return 118; - case 50: - return 119; - case 51: - return 120; - case 52: - return 121; - case 53: - return 102; - case 54: - return 108; - case 55: - return 44; - case 56: - return 58; - case 57: - return 42; - case 58: - return 8; - case 59: - return 103; - case 60: - return 112; - case 61: - this.popState(); - return 75; - case 62: - this.pushState("edgeText"); - return 73; - case 63: - return 116; - case 64: - this.popState(); - return 75; - case 65: - this.pushState("thickEdgeText"); - return 73; - case 66: - return 116; - case 67: - this.popState(); - return 75; - case 68: - this.pushState("dottedEdgeText"); - return 73; - case 69: - return 116; - case 70: - return 75; - case 71: - this.popState(); - return 51; - case 72: - return "TEXT"; - case 73: - this.pushState("ellipseText"); - return 50; - case 74: - this.popState(); - return 53; - case 75: - this.pushState("text"); - return 52; - case 76: - this.popState(); - return 55; - case 77: - this.pushState("text"); - return 54; - case 78: - return 56; - case 79: - this.pushState("text"); - return 65; - case 80: - this.popState(); - return 62; - case 81: - this.pushState("text"); - return 61; - case 82: - this.popState(); - return 47; - case 83: - this.pushState("text"); - return 46; - case 84: - this.popState(); - return 67; - case 85: - this.popState(); - return 69; - case 86: - return 114; - case 87: - this.pushState("trapText"); - return 66; - case 88: - this.pushState("trapText"); - return 68; - case 89: - return 115; - case 90: - return 65; - case 91: - return 87; - case 92: - return "SEP"; - case 93: - return 86; - case 94: - return 112; - case 95: - return 108; - case 96: - return 42; - case 97: - return 106; - case 98: - return 111; - case 99: - return 113; - case 100: - this.popState(); - return 60; - case 101: - this.pushState("text"); - return 60; - case 102: - this.popState(); - return 49; - case 103: - this.pushState("text"); - return 48; - case 104: - this.popState(); - return 31; - case 105: - this.pushState("text"); - return 29; - case 106: - this.popState(); - return 64; - case 107: - this.pushState("text"); - return 63; - case 108: - return "TEXT"; - case 109: - return "QUOTE"; - case 110: - return 9; - case 111: - return 10; - case 112: - return 11; - } - }, - rules: [/^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["][`])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:["])/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s])/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:[^=]|=(?!))/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:[^\.]|\.(?!))/, /^(?:\s*~~[\~]+\s*)/, /^(?:[-/\)][\)])/, /^(?:[^\(\)\[\]\{\}]|!\)+)/, /^(?:\(-)/, /^(?:\]\))/, /^(?:\(\[)/, /^(?:\]\])/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:>)/, /^(?:\)\])/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\(\(\()/, /^(?:[\\(?=\])][\]])/, /^(?:\/(?=\])\])/, /^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/, /^(?:-)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\|)/, /^(?:\))/, /^(?:\()/, /^(?:\])/, /^(?:\[)/, /^(?:(\}))/, /^(?:\{)/, /^(?:[^\[\]\(\)\{\}\|\"]+)/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], - conditions: { "callbackargs": { "rules": [11, 12, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "callbackname": { "rules": [8, 9, 10, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "href": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "click": { "rules": [15, 18, 27, 28, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dottedEdgeText": { "rules": [15, 18, 67, 69, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "thickEdgeText": { "rules": [15, 18, 64, 66, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "edgeText": { "rules": [15, 18, 61, 63, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "trapText": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 84, 85, 86, 87, 88, 101, 103, 105, 107], "inclusive": false }, "ellipseText": { "rules": [15, 18, 70, 71, 72, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "text": { "rules": [15, 18, 70, 73, 74, 75, 76, 77, 80, 81, 82, 83, 87, 88, 100, 101, 102, 103, 104, 105, 106, 107, 108], "inclusive": false }, "vertex": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dir": { "rules": [15, 18, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr_multiline": { "rules": [5, 6, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr": { "rules": [3, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_title": { "rules": [1, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "md_string": { "rules": [13, 14, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "string": { "rules": [15, 16, 17, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 67, 68, 70, 73, 75, 77, 78, 79, 81, 83, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 105, 107, 109, 110, 111, 112], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -const MERMAID_DOM_ID_PREFIX = "flowchart-"; -let vertexCounter = 0; -let config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); -let vertices = {}; -let edges = []; -let classes = {}; -let subGraphs = []; -let subGraphLookup = {}; -let tooltips = {}; -let subCount = 0; -let firstGraphFlag = true; -let direction; -let version; -let funs = []; -const sanitizeText = (txt) => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); -const lookUpDomId = function(id) { - const vertexKeys = Object.keys(vertices); - for (const vertexKey of vertexKeys) { - if (vertices[vertexKey].id === id) { - return vertices[vertexKey].domId; - } - } - return id; -}; -const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { - let txt; - let id = _id; - if (id === void 0) { - return; - } - if (id.trim().length === 0) { - return; - } - if (vertices[id] === void 0) { - vertices[id] = { - id, - labelType: "text", - domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, - styles: [], - classes: [] - }; - } - vertexCounter++; - if (textObj !== void 0) { - config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - txt = sanitizeText(textObj.text.trim()); - vertices[id].labelType = textObj.type; - if (txt[0] === '"' && txt[txt.length - 1] === '"') { - txt = txt.substring(1, txt.length - 1); - } - vertices[id].text = txt; - } else { - if (vertices[id].text === void 0) { - vertices[id].text = _id; - } - } - if (type !== void 0) { - vertices[id].type = type; - } - if (style !== void 0 && style !== null) { - style.forEach(function(s) { - vertices[id].styles.push(s); - }); - } - if (classes2 !== void 0 && classes2 !== null) { - classes2.forEach(function(s) { - vertices[id].classes.push(s); - }); - } - if (dir !== void 0) { - vertices[id].dir = dir; - } - if (vertices[id].props === void 0) { - vertices[id].props = props; - } else if (props !== void 0) { - Object.assign(vertices[id].props, props); - } -}; -const addSingleLink = function(_start, _end, type) { - let start = _start; - let end = _end; - const edge = { start, end, type: void 0, text: "", labelType: "text" }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); - const linkTextObj = type.text; - if (linkTextObj !== void 0) { - edge.text = sanitizeText(linkTextObj.text.trim()); - if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { - edge.text = edge.text.substring(1, edge.text.length - 1); - } - edge.labelType = linkTextObj.type; - } - if (type !== void 0) { - edge.type = type.type; - edge.stroke = type.stroke; - edge.length = type.length; - } - if ((edge == null ? void 0 : edge.length) > 10) { - edge.length = 10; - } - if (edges.length < (config.maxEdges ?? 500)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 pushing edge..."); - edges.push(edge); - } else { - throw new Error( - `Edge limit exceeded. ${edges.length} edges found, but the limit is ${config.maxEdges}. - -Initialize mermaid with maxEdges set to a higher number to allow more edges. -You cannot set this config via configuration inside the diagram as it is a secure config. -You have to call mermaid.initialize.` - ); - } -}; -const addLink = function(_start, _end, type) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); - let i, j; - for (i = 0; i < _start.length; i++) { - for (j = 0; j < _end.length; j++) { - addSingleLink(_start[i], _end[j], type); - } - } -}; -const updateLinkInterpolate = function(positions, interp) { - positions.forEach(function(pos) { - if (pos === "default") { - edges.defaultInterpolate = interp; - } else { - edges[pos].interpolate = interp; - } - }); -}; -const updateLink = function(positions, style) { - positions.forEach(function(pos) { - if (pos >= edges.length) { - throw new Error( - `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)` - ); - } - if (pos === "default") { - edges.defaultStyle = style; - } else { - if (_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.isSubstringInArray("fill", style) === -1) { - style.push("fill:none"); - } - edges[pos].style = style; - } - }); -}; -const addClass = function(ids, style) { - ids.split(",").forEach(function(id) { - if (classes[id] === void 0) { - classes[id] = { id, styles: [], textStyles: [] }; - } - if (style !== void 0 && style !== null) { - style.forEach(function(s) { - if (s.match("color")) { - const newStyle = s.replace("fill", "bgFill").replace("color", "fill"); - classes[id].textStyles.push(newStyle); - } - classes[id].styles.push(s); - }); - } - }); -}; -const setDirection = function(dir) { - direction = dir; - if (direction.match(/.*</)) { - direction = "RL"; - } - if (direction.match(/.*\^/)) { - direction = "BT"; - } - if (direction.match(/.*>/)) { - direction = "LR"; - } - if (direction.match(/.*v/)) { - direction = "TB"; - } - if (direction === "TD") { - direction = "TB"; - } -}; -const setClass = function(ids, className) { - ids.split(",").forEach(function(_id) { - let id = _id; - if (vertices[id] !== void 0) { - vertices[id].classes.push(className); - } - if (subGraphLookup[id] !== void 0) { - subGraphLookup[id].classes.push(className); - } - }); -}; -const setTooltip = function(ids, tooltip) { - ids.split(",").forEach(function(id) { - if (tooltip !== void 0) { - tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); - } - }); -}; -const setClickFun = function(id, functionName, functionArgs) { - let domId = lookUpDomId(id); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel !== "loose") { - return; - } - if (functionName === void 0) { - return; - } - let argList = []; - if (typeof functionArgs === "string") { - argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); - for (let i = 0; i < argList.length; i++) { - let item = argList[i].trim(); - if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { - item = item.substr(1, item.length - 2); - } - argList[i] = item; - } - } - if (argList.length === 0) { - argList.push(id); - } - if (vertices[id] !== void 0) { - vertices[id].haveCallback = true; - funs.push(function() { - const elem = document.querySelector(`[id="${domId}"]`); - if (elem !== null) { - elem.addEventListener( - "click", - function() { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); - }, - false - ); - } - }); - } -}; -const setLink = function(ids, linkStr, target) { - ids.split(",").forEach(function(id) { - if (vertices[id] !== void 0) { - vertices[id].link = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); - vertices[id].linkTarget = target; - } - }); - setClass(ids, "clickable"); -}; -const getTooltip = function(id) { - if (tooltips.hasOwnProperty(id)) { - return tooltips[id]; - } - return void 0; -}; -const setClickEvent = function(ids, functionName, functionArgs) { - ids.split(",").forEach(function(id) { - setClickFun(id, functionName, functionArgs); - }); - setClass(ids, "clickable"); -}; -const bindFunctions = function(element) { - funs.forEach(function(fun) { - fun(element); - }); -}; -const getDirection = function() { - return direction.trim(); -}; -const getVertices = function() { - return vertices; -}; -const getEdges = function() { - return edges; -}; -const getClasses = function() { - return classes; -}; -const setupToolTips = function(element) { - let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(".mermaidTooltip"); - if ((tooltipElem._groups || tooltipElem)[0][0] === null) { - tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); - } - const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(element).select("svg"); - const nodes = svg.selectAll("g.node"); - nodes.on("mouseover", function() { - const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); - const title = el.attr("title"); - if (title === null) { - return; - } - const rect = this.getBoundingClientRect(); - tooltipElem.transition().duration(200).style("opacity", ".9"); - tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.bottom + "px"); - tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); - el.classed("hover", true); - }).on("mouseout", function() { - tooltipElem.transition().duration(500).style("opacity", 0); - const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); - el.classed("hover", false); - }); -}; -funs.push(setupToolTips); -const clear = function(ver = "gen-1") { - vertices = {}; - classes = {}; - edges = []; - funs = [setupToolTips]; - subGraphs = []; - subGraphLookup = {}; - subCount = 0; - tooltips = {}; - firstGraphFlag = true; - version = ver; - config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.v)(); -}; -const setGen = (ver) => { - version = ver || "gen-2"; -}; -const defaultStyle = function() { - return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; -}; -const addSubGraph = function(_id, list, _title) { - let id = _id.text.trim(); - let title = _title.text; - if (_id === _title && _title.text.match(/\s/)) { - id = void 0; - } - function uniq(a) { - const prims = { boolean: {}, number: {}, string: {} }; - const objs = []; - let dir2; - const nodeList2 = a.filter(function(item) { - const type = typeof item; - if (item.stmt && item.stmt === "dir") { - dir2 = item.value; - return false; - } - if (item.trim() === "") { - return false; - } - if (type in prims) { - return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; - } else { - return objs.includes(item) ? false : objs.push(item); - } - }); - return { nodeList: nodeList2, dir: dir2 }; - } - let nodeList = []; - const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); - nodeList = nl; - if (version === "gen-1") { - for (let i = 0; i < nodeList.length; i++) { - nodeList[i] = lookUpDomId(nodeList[i]); - } - } - id = id || "subGraph" + subCount; - title = title || ""; - title = sanitizeText(title); - subCount = subCount + 1; - const subGraph = { - id, - nodes: nodeList, - title: title.trim(), - classes: [], - dir, - labelType: _title.type - }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); - subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; - subGraphs.push(subGraph); - subGraphLookup[id] = subGraph; - return id; -}; -const getPosForId = function(id) { - for (const [i, subGraph] of subGraphs.entries()) { - if (subGraph.id === id) { - return i; - } - } - return -1; -}; -let secCount = -1; -const posCrossRef = []; -const indexNodes2 = function(id, pos) { - const nodes = subGraphs[pos].nodes; - secCount = secCount + 1; - if (secCount > 2e3) { - return; - } - posCrossRef[secCount] = pos; - if (subGraphs[pos].id === id) { - return { - result: true, - count: 0 - }; - } - let count = 0; - let posCount = 1; - while (count < nodes.length) { - const childPos = getPosForId(nodes[count]); - if (childPos >= 0) { - const res = indexNodes2(id, childPos); - if (res.result) { - return { - result: true, - count: posCount + res.count - }; - } else { - posCount = posCount + res.count; - } - } - count = count + 1; - } - return { - result: false, - count: posCount - }; -}; -const getDepthFirstPos = function(pos) { - return posCrossRef[pos]; -}; -const indexNodes = function() { - secCount = -1; - if (subGraphs.length > 0) { - indexNodes2("none", subGraphs.length - 1); - } -}; -const getSubGraphs = function() { - return subGraphs; -}; -const firstGraph = () => { - if (firstGraphFlag) { - firstGraphFlag = false; - return true; - } - return false; -}; -const destructStartLink = (_str) => { - let str = _str.trim(); - let type = "arrow_open"; - switch (str[0]) { - case "<": - type = "arrow_point"; - str = str.slice(1); - break; - case "x": - type = "arrow_cross"; - str = str.slice(1); - break; - case "o": - type = "arrow_circle"; - str = str.slice(1); - break; - } - let stroke = "normal"; - if (str.includes("=")) { - stroke = "thick"; - } - if (str.includes(".")) { - stroke = "dotted"; - } - return { type, stroke }; -}; -const countChar = (char, str) => { - const length = str.length; - let count = 0; - for (let i = 0; i < length; ++i) { - if (str[i] === char) { - ++count; - } - } - return count; -}; -const destructEndLink = (_str) => { - const str = _str.trim(); - let line = str.slice(0, -1); - let type = "arrow_open"; - switch (str.slice(-1)) { - case "x": - type = "arrow_cross"; - if (str[0] === "x") { - type = "double_" + type; - line = line.slice(1); - } - break; - case ">": - type = "arrow_point"; - if (str[0] === "<") { - type = "double_" + type; - line = line.slice(1); - } - break; - case "o": - type = "arrow_circle"; - if (str[0] === "o") { - type = "double_" + type; - line = line.slice(1); - } - break; - } - let stroke = "normal"; - let length = line.length - 1; - if (line[0] === "=") { - stroke = "thick"; - } - if (line[0] === "~") { - stroke = "invisible"; - } - let dots = countChar(".", line); - if (dots) { - stroke = "dotted"; - length = dots; - } - return { type, stroke, length }; -}; -const destructLink = (_str, _startStr) => { - const info = destructEndLink(_str); - let startInfo; - if (_startStr) { - startInfo = destructStartLink(_startStr); - if (startInfo.stroke !== info.stroke) { - return { type: "INVALID", stroke: "INVALID" }; - } - if (startInfo.type === "arrow_open") { - startInfo.type = info.type; - } else { - if (startInfo.type !== info.type) { - return { type: "INVALID", stroke: "INVALID" }; - } - startInfo.type = "double_" + startInfo.type; - } - if (startInfo.type === "double_arrow") { - startInfo.type = "double_arrow_point"; - } - startInfo.length = info.length; - return startInfo; - } - return info; -}; -const exists = (allSgs, _id) => { - let res = false; - allSgs.forEach((sg) => { - const pos = sg.nodes.indexOf(_id); - if (pos >= 0) { - res = true; - } - }); - return res; -}; -const makeUniq = (sg, allSubgraphs) => { - const res = []; - sg.nodes.forEach((_id, pos) => { - if (!exists(allSubgraphs, _id)) { - res.push(sg.nodes[pos]); - } - }); - return { nodes: res }; -}; -const lex = { - firstGraph -}; -const flowDb = { - defaultConfig: () => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.K.flowchart, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.g, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.a, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.b, - addVertex, - lookUpDomId, - addLink, - updateLinkInterpolate, - updateLink, - addClass, - setDirection, - setClass, - setTooltip, - getTooltip, - setClickEvent, - setLink, - bindFunctions, - getDirection, - getVertices, - getEdges, - getClasses, - clear, - setGen, - defaultStyle, - addSubGraph, - getDepthFirstPos, - indexNodes, - getSubGraphs, - destructLink, - lex, - exists, - makeUniq, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.t -}; -const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ - __proto__: null, - addClass, - addLink, - addSingleLink, - addSubGraph, - addVertex, - bindFunctions, - clear, - default: flowDb, - defaultStyle, - destructLink, - firstGraph, - getClasses, - getDepthFirstPos, - getDirection, - getEdges, - getSubGraphs, - getTooltip, - getVertices, - indexNodes, - lex, - lookUpDomId, - setClass, - setClickEvent, - setDirection, - setGen, - setLink, - updateLink, - updateLinkInterpolate -}, Symbol.toStringTag, { value: "Module" })); - - - -/***/ }), - -/***/ 22453: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(32548); -/* harmony import */ var _styles_483fbfea_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(65382); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(697); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21176); -/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14075); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99418); - - - - - - - - - - - - - - - - - - - - - -const diagram = { - parser: _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__.p, - db: _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__.f, - renderer: _styles_483fbfea_js__WEBPACK_IMPORTED_MODULE_8__.f, - styles: _styles_483fbfea_js__WEBPACK_IMPORTED_MODULE_8__.a, - init: (cnf) => { - if (!cnf.flowchart) { - cnf.flowchart = {}; - } - cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_9__.p)({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } }); - _styles_483fbfea_js__WEBPACK_IMPORTED_MODULE_8__.f.setConf(cnf.flowchart); - _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__.f.clear(); - _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__.f.setGen("gen-2"); - } -}; - - - -/***/ }), - -/***/ 35364: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ r: () => (/* binding */ render) -/* harmony export */ }); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(21176); -/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14075); -/* harmony import */ var _edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(98055); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(697); -/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(18897); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(26312); - - - - - - - -let clusterDb = {}; -let descendants = {}; -let parents = {}; -const clear$1 = () => { - descendants = {}; - parents = {}; - clusterDb = {}; -}; -const isDescendant = (id, ancestorId) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDescendant", ancestorId, " ", id, " = ", descendants[ancestorId].includes(id)); - if (descendants[ancestorId].includes(id)) { - return true; - } - return false; -}; -const edgeInCluster = (edge, clusterId) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Descendants of ", clusterId, " is ", descendants[clusterId]); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); - if (edge.v === clusterId) { - return false; - } - if (edge.w === clusterId) { - return false; - } - if (!descendants[clusterId]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in descendants"); - return false; - } - return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); -}; -const copy = (clusterId, graph, newGraph, rootId) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Copying children of ", - clusterId, - "root", - rootId, - "data", - graph.node(clusterId), - rootId - ); - const nodes = graph.children(clusterId) || []; - if (clusterId !== rootId) { - nodes.push(clusterId); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); - nodes.forEach((node) => { - if (graph.children(node).length > 0) { - copy(node, graph, newGraph, rootId); - } else { - const data = graph.node(node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); - newGraph.setNode(node, data); - if (rootId !== graph.parent(node)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); - newGraph.setParent(node, graph.parent(node)); - } - if (clusterId !== rootId && node !== clusterId) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); - newGraph.setParent(node, clusterId); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( - "Not Setting parent for node=", - node, - "cluster!==rootId", - clusterId !== rootId, - "node!==clusterId", - node !== clusterId - ); - } - const edges = graph.edges(node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); - edges.forEach((edge) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); - const data2 = graph.edge(edge.v, edge.w, edge.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); - try { - if (edgeInCluster(edge, rootId)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); - newGraph.setEdge(edge.v, edge.w, data2, edge.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info( - "Skipping copy of edge ", - edge.v, - "-->", - edge.w, - " rootId: ", - rootId, - " clusterId:", - clusterId - ); - } - } catch (e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); - } - }); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); - graph.removeNode(node); - }); -}; -const extractDescendants = (id, graph) => { - const children = graph.children(id); - let res = [...children]; - for (const child of children) { - parents[child] = id; - res = [...res, ...extractDescendants(child, graph)]; - } - return res; -}; -const findNonClusterChild = (id, graph) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); - const children = graph.children(id); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); - if (children.length < 1) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); - return id; - } - for (const child of children) { - const _id = findNonClusterChild(child, graph); - if (_id) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); - return _id; - } - } -}; -const getAnchorId = (id) => { - if (!clusterDb[id]) { - return id; - } - if (!clusterDb[id].externalConnections) { - return id; - } - if (clusterDb[id]) { - return clusterDb[id].id; - } - return id; -}; -const adjustClustersAndEdges = (graph, depth) => { - if (!graph || depth > 10) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); - return; - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); - } - graph.nodes().forEach(function(id) { - const children = graph.children(id); - if (children.length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Cluster identified", - id, - " Replacement id in edges: ", - findNonClusterChild(id, graph) - ); - descendants[id] = extractDescendants(id, graph); - clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; - } - }); - graph.nodes().forEach(function(id) { - const children = graph.children(id); - const edges = graph.edges(); - if (children.length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); - edges.forEach((edge) => { - if (edge.v !== id && edge.w !== id) { - const d1 = isDescendant(edge.v, id); - const d2 = isDescendant(edge.w, id); - if (d1 ^ d2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Descendants of XXX ", id, ": ", descendants[id]); - clusterDb[id].externalConnections = true; - } - } - }); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); - } - }); - for (let id of Object.keys(clusterDb)) { - const nonClusterChild = clusterDb[id].id; - const parent = graph.parent(nonClusterChild); - if (parent !== id && clusterDb[parent] && !clusterDb[parent].externalConnections) { - clusterDb[id].id = parent; - } - } - graph.edges().forEach(function(e) { - const edge = graph.edge(e); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); - let v = e.v; - let w = e.w; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Fix XXX", - clusterDb, - "ids:", - e.v, - e.w, - "Translating: ", - clusterDb[e.v], - " --- ", - clusterDb[e.w] - ); - if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); - v = getAnchorId(e.v); - w = getAnchorId(e.w); - graph.removeEdge(e.v, e.w, e.name); - const specialId = e.w + "---" + e.v; - graph.setNode(specialId, { - domId: specialId, - id: specialId, - labelStyle: "", - labelText: edge.label, - padding: 0, - shape: "labelRect", - style: "" - }); - const edge1 = structuredClone(edge); - const edge2 = structuredClone(edge); - edge1.label = ""; - edge1.arrowTypeEnd = "none"; - edge2.label = ""; - edge1.fromCluster = e.v; - edge2.toCluster = e.v; - graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); - graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); - } else if (clusterDb[e.v] || clusterDb[e.w]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); - v = getAnchorId(e.v); - w = getAnchorId(e.w); - graph.removeEdge(e.v, e.w, e.name); - if (v !== e.v) { - const parent = graph.parent(v); - clusterDb[parent].externalConnections = true; - edge.fromCluster = e.v; - } - if (w !== e.w) { - const parent = graph.parent(w); - clusterDb[parent].externalConnections = true; - edge.toCluster = e.w; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); - graph.setEdge(v, w, edge, e.name); - } - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - extractor(graph, 0); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); -}; -const extractor = (graph, depth) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph), graph.children("D")); - if (depth > 10) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); - return; - } - let nodes = graph.nodes(); - let hasChildren = false; - for (const node of nodes) { - const children = graph.children(node); - hasChildren = hasChildren || children.length > 0; - } - if (!hasChildren) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); - return; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); - for (const node of nodes) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( - "Extracting node", - node, - clusterDb, - clusterDb[node] && !clusterDb[node].externalConnections, - !graph.parent(node), - graph.node(node), - graph.children("D"), - " Depth ", - depth - ); - if (!clusterDb[node]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); - } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && - graph.children(node) && graph.children(node).length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Cluster without external connections, without a parent and with children", - node, - depth - ); - const graphSettings = graph.graph(); - let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; - if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { - dir = clusterDb[node].clusterData.dir; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); - } - const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .T({ - multigraph: true, - compound: true - }).setGraph({ - rankdir: dir, - // Todo: set proper spacing - nodesep: 50, - ranksep: 50, - marginx: 8, - marginy: 8 - }).setDefaultEdgeLabel(function() { - return {}; - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - copy(node, graph, clusterGraph, node); - graph.setNode(node, { - clusterNode: true, - id: node, - clusterData: clusterDb[node].clusterData, - labelText: clusterDb[node].labelText, - graph: clusterGraph - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(clusterGraph)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Cluster ** ", - node, - " **not meeting the criteria !externalConnections:", - !clusterDb[node].externalConnections, - " no parent: ", - !graph.parent(node), - " children ", - graph.children(node) && graph.children(node).length > 0, - graph.children("D"), - depth - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); - } - } - nodes = graph.nodes(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); - for (const node of nodes) { - const data = graph.node(node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); - if (data.clusterNode) { - extractor(data.graph, depth + 1); - } - } -}; -const sorter = (graph, nodes) => { - if (nodes.length === 0) { - return []; - } - let result = Object.assign(nodes); - nodes.forEach((node) => { - const children = graph.children(node); - const sorted = sorter(graph, children); - result = [...result, ...sorted]; - }); - return result; -}; -const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); -const rect = (parent, node) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels); - const label = shapeSvg.insert("g").attr("class", "cluster-label"); - const text = node.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); - let bbox = text.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - const padding = 0 * node.padding; - const halfPadding = padding / 2; - const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; - if (node.width <= bbox.width + padding) { - node.diff = (bbox.width - node.width) / 2 - node.padding / 2; - } else { - node.diff = -node.padding / 2; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); - rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); - const { subGraphTitleTopMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); - if (useHtmlLabels) { - label.attr( - "transform", - // This puts the label on top of the box instead of inside it - `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` - ); - } else { - label.attr( - "transform", - // This puts the label on top of the box instead of inside it - `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` - ); - } - const rectBox = rect2.node().getBBox(); - node.width = rectBox.width; - node.height = rectBox.height; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const noteGroup = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const padding = 0 * node.padding; - const halfPadding = padding / 2; - rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); - const rectBox = rect2.node().getBBox(); - node.width = rectBox.width; - node.height = rectBox.height; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const roundedWithTitle = (parent, node) => { - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const label = shapeSvg.insert("g").attr("class", "cluster-label"); - const innerRect = shapeSvg.append("rect"); - const text = label.node().appendChild((0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); - let bbox = text.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - bbox = text.getBBox(); - const padding = 0 * node.padding; - const halfPadding = padding / 2; - const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; - if (node.width <= bbox.width + node.padding) { - node.diff = (bbox.width + node.padding * 0 - node.width) / 2; - } else { - node.diff = -node.padding / 2; - } - rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); - innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); - const { subGraphTitleTopMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); - label.attr( - "transform", - `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels) ? 5 : 3) + subGraphTitleTopMargin})` - ); - const rectBox = rect2.node().getBBox(); - node.height = rectBox.height; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const divider = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const padding = 0 * node.padding; - const halfPadding = padding / 2; - rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); - const rectBox = rect2.node().getBBox(); - node.width = rectBox.width; - node.height = rectBox.height; - node.diff = -node.padding / 2; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const shapes = { rect, roundedWithTitle, noteGroup, divider }; -let clusterElems = {}; -const insertCluster = (elem, node) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); - const shape = node.shape || "rect"; - clusterElems[node.id] = shapes[shape](elem, node); -}; -const clear = () => { - clusterElems = {}; -}; -const recursiveRender = async (_elem, graph, diagramType, id, parentCluster, siteConfig) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph), parentCluster); - const dir = graph.graph().rankdir; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); - const elem = _elem.insert("g").attr("class", "root"); - if (!graph.nodes()) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); - } - if (graph.edges().length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); - } - const clusters = elem.insert("g").attr("class", "clusters"); - const edgePaths = elem.insert("g").attr("class", "edgePaths"); - const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); - const nodes = elem.insert("g").attr("class", "nodes"); - await Promise.all( - graph.nodes().map(async function(v) { - const node = graph.node(v); - if (parentCluster !== void 0) { - const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); - graph.setNode(parentCluster.id, data); - if (!graph.parent(v)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); - graph.setParent(v, parentCluster.id, data); - } - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); - if (node && node.clusterNode) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); - const o = await recursiveRender( - nodes, - node.graph, - diagramType, - id, - graph.node(v), - siteConfig - ); - const newEl = o.elem; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); - node.diff = o.diff || 0; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); - } else { - if (graph.children(v).length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); - clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); - await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); - } - } - }) - ); - graph.edges().forEach(function(e) { - const edge = graph.edge(e.v, e.w, e.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translating: ", clusterDb[e.v], clusterDb[e.w]); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); - }); - graph.edges().forEach(function(e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); - (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .Zp)(graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - let diff = 0; - const { subGraphTitleTotalMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); - sortNodesByHierarchy(graph).forEach(function(v) { - const node = graph.node(v); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info( - "Position " + v + ": (" + node.x, - "," + node.y, - ") width: ", - node.width, - " height: ", - node.height - ); - if (node && node.clusterNode) { - node.y += subGraphTitleTotalMargin; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); - } else { - if (graph.children(v).length > 0) { - node.height += subGraphTitleTotalMargin; - insertCluster(clusters, node); - clusterDb[node.id].node = node; - } else { - node.y += subGraphTitleTotalMargin / 2; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); - } - } - }); - graph.edges().forEach(function(e) { - const edge = graph.edge(e); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); - edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2); - const paths = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.h)(edgePaths, e, edge, clusterDb, diagramType, graph, id); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.j)(edge, paths); - }); - graph.nodes().forEach(function(v) { - const n = graph.node(v); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); - if (n.type === "group") { - diff = n.diff; - } - }); - return { elem, diff }; -}; -const render = async (elem, graph, markers, diagramType, id) => { - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramType, id); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.b)(); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.d)(); - clear(); - clear$1(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph))); - adjustClustersAndEdges(graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph))); - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - await recursiveRender(elem, graph, diagramType, id, void 0, siteConfig); -}; - - - -/***/ }), - -/***/ 65382: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ a: () => (/* binding */ flowStyles), -/* harmony export */ f: () => (/* binding */ flowRendererV2) -/* harmony export */ }); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(697); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26312); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(99702); -/* harmony import */ var _index_01f381cb_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(35364); -/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10646); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(75937); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(25582); - - - - - - -const conf = {}; -const setConf = function(cnf) { - const keys = Object.keys(cnf); - for (const key of keys) { - conf[key] = cnf[key]; - } -}; -const addVertices = async function(vert, g, svgId, root, doc, diagObj) { - const svg = root.select(`[id="${svgId}"]`); - const keys = Object.keys(vert); - for (const id of keys) { - const vertex = vert[id]; - let classStr = "default"; - if (vertex.classes.length > 0) { - classStr = vertex.classes.join(" "); - } - classStr = classStr + " flowchart-label"; - const styles = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.k)(vertex.styles); - let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; - let vertexNode; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("vertex", vertex, vertex.labelType); - if (vertex.labelType === "markdown") { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("vertex", vertex, vertex.labelType); - } else { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.htmlLabels)) { - const node = { - label: vertexText - }; - vertexNode = (0,dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_3__/* .addHtmlLabel */ .H)(svg, node).node(); - vertexNode.parentNode.removeChild(vertexNode); - } else { - const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); - svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); - const rows = vertexText.split(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.e.lineBreakRegex); - for (const row of rows) { - const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); - tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); - tspan.setAttribute("dy", "1em"); - tspan.setAttribute("x", "1"); - tspan.textContent = row; - svgLabel.appendChild(tspan); - } - vertexNode = svgLabel; - } - } - let radius = 0; - let _shape = ""; - switch (vertex.type) { - case "round": - radius = 5; - _shape = "rect"; - break; - case "square": - _shape = "rect"; - break; - case "diamond": - _shape = "question"; - break; - case "hexagon": - _shape = "hexagon"; - break; - case "odd": - _shape = "rect_left_inv_arrow"; - break; - case "lean_right": - _shape = "lean_right"; - break; - case "lean_left": - _shape = "lean_left"; - break; - case "trapezoid": - _shape = "trapezoid"; - break; - case "inv_trapezoid": - _shape = "inv_trapezoid"; - break; - case "odd_right": - _shape = "rect_left_inv_arrow"; - break; - case "circle": - _shape = "circle"; - break; - case "ellipse": - _shape = "ellipse"; - break; - case "stadium": - _shape = "stadium"; - break; - case "subroutine": - _shape = "subroutine"; - break; - case "cylinder": - _shape = "cylinder"; - break; - case "group": - _shape = "rect"; - break; - case "doublecircle": - _shape = "doublecircle"; - break; - default: - _shape = "rect"; - } - const labelText = await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.r)(vertexText, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)()); - g.setNode(vertex.id, { - labelStyle: styles.labelStyle, - shape: _shape, - labelText, - labelType: vertex.labelType, - rx: radius, - ry: radius, - class: classStr, - style: styles.style, - id: vertex.id, - link: vertex.link, - linkTarget: vertex.linkTarget, - tooltip: diagObj.db.getTooltip(vertex.id) || "", - domId: diagObj.db.lookUpDomId(vertex.id), - haveCallback: vertex.haveCallback, - width: vertex.type === "group" ? 500 : void 0, - dir: vertex.dir, - type: vertex.type, - props: vertex.props, - padding: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.padding - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("setNode", { - labelStyle: styles.labelStyle, - labelType: vertex.labelType, - shape: _shape, - labelText, - rx: radius, - ry: radius, - class: classStr, - style: styles.style, - id: vertex.id, - domId: diagObj.db.lookUpDomId(vertex.id), - width: vertex.type === "group" ? 500 : void 0, - type: vertex.type, - dir: vertex.dir, - props: vertex.props, - padding: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.padding - }); - } -}; -const addEdges = async function(edges, g, diagObj) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 edges = ", edges); - let cnt = 0; - let linkIdCnt = {}; - let defaultStyle; - let defaultLabelStyle; - if (edges.defaultStyle !== void 0) { - const defaultStyles = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.k)(edges.defaultStyle); - defaultStyle = defaultStyles.style; - defaultLabelStyle = defaultStyles.labelStyle; - } - for (const edge of edges) { - cnt++; - const linkIdBase = "L-" + edge.start + "-" + edge.end; - if (linkIdCnt[linkIdBase] === void 0) { - linkIdCnt[linkIdBase] = 0; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); - } else { - linkIdCnt[linkIdBase]++; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); - } - let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); - const linkNameStart = "LS-" + edge.start; - const linkNameEnd = "LE-" + edge.end; - const edgeData = { style: "", labelStyle: "" }; - edgeData.minlen = edge.length || 1; - if (edge.type === "arrow_open") { - edgeData.arrowhead = "none"; - } else { - edgeData.arrowhead = "normal"; - } - edgeData.arrowTypeStart = "arrow_open"; - edgeData.arrowTypeEnd = "arrow_open"; - switch (edge.type) { - case "double_arrow_cross": - edgeData.arrowTypeStart = "arrow_cross"; - case "arrow_cross": - edgeData.arrowTypeEnd = "arrow_cross"; - break; - case "double_arrow_point": - edgeData.arrowTypeStart = "arrow_point"; - case "arrow_point": - edgeData.arrowTypeEnd = "arrow_point"; - break; - case "double_arrow_circle": - edgeData.arrowTypeStart = "arrow_circle"; - case "arrow_circle": - edgeData.arrowTypeEnd = "arrow_circle"; - break; - } - let style = ""; - let labelStyle = ""; - switch (edge.stroke) { - case "normal": - style = "fill:none;"; - if (defaultStyle !== void 0) { - style = defaultStyle; - } - if (defaultLabelStyle !== void 0) { - labelStyle = defaultLabelStyle; - } - edgeData.thickness = "normal"; - edgeData.pattern = "solid"; - break; - case "dotted": - edgeData.thickness = "normal"; - edgeData.pattern = "dotted"; - edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; - break; - case "thick": - edgeData.thickness = "thick"; - edgeData.pattern = "solid"; - edgeData.style = "stroke-width: 3.5px;fill:none;"; - break; - case "invisible": - edgeData.thickness = "invisible"; - edgeData.pattern = "solid"; - edgeData.style = "stroke-width: 0;fill:none;"; - break; - } - if (edge.style !== void 0) { - const styles = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.k)(edge.style); - style = styles.style; - labelStyle = styles.labelStyle; - } - edgeData.style = edgeData.style += style; - edgeData.labelStyle = edgeData.labelStyle += labelStyle; - if (edge.interpolate !== void 0) { - edgeData.curve = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.n)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .lUB); - } else if (edges.defaultInterpolate !== void 0) { - edgeData.curve = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.n)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .lUB); - } else { - edgeData.curve = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.n)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .lUB); - } - if (edge.text === void 0) { - if (edge.style !== void 0) { - edgeData.arrowheadStyle = "fill: #333"; - } - } else { - edgeData.arrowheadStyle = "fill: #333"; - edgeData.labelpos = "c"; - } - edgeData.labelType = edge.labelType; - edgeData.label = await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.r)(edge.text.replace(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.e.lineBreakRegex, "\n"), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)()); - if (edge.style === void 0) { - edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; - } - edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); - edgeData.id = linkId; - edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; - g.setEdge(edge.start, edge.end, edgeData, cnt); - } -}; -const getClasses = function(text, diagObj) { - return diagObj.db.getClasses(); -}; -const draw = async function(text, id, _version, diagObj) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Drawing flowchart"); - let dir = diagObj.db.getDirection(); - if (dir === void 0) { - dir = "TD"; - } - const { securityLevel, flowchart: conf2 } = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)(); - const nodeSpacing = conf2.nodeSpacing || 50; - const rankSpacing = conf2.rankSpacing || 50; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("body"); - const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; - const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .T({ - multigraph: true, - compound: true - }).setGraph({ - rankdir: dir, - nodesep: nodeSpacing, - ranksep: rankSpacing, - marginx: 0, - marginy: 0 - }).setDefaultEdgeLabel(function() { - return {}; - }); - let subG; - const subGraphs = diagObj.db.getSubGraphs(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Subgraphs - ", subGraphs); - for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { - subG = subGraphs[i2]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Subgraph - ", subG); - diagObj.db.addVertex( - subG.id, - { text: subG.title, type: subG.labelType }, - "group", - void 0, - subG.classes, - subG.dir - ); - } - const vert = diagObj.db.getVertices(); - const edges = diagObj.db.getEdges(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Edges", edges); - let i = 0; - for (i = subGraphs.length - 1; i >= 0; i--) { - subG = subGraphs[i]; - (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .selectAll */ .Ubm)("cluster").append("text"); - for (let j = 0; j < subG.nodes.length; j++) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Setting up subgraphs", subG.nodes[j], subG.id); - g.setParent(subG.nodes[j], subG.id); - } - } - await addVertices(vert, g, id, root, doc, diagObj); - await addEdges(edges, g); - const svg = root.select(`[id="${id}"]`); - const element = root.select("#" + id + " g"); - await (0,_index_01f381cb_js__WEBPACK_IMPORTED_MODULE_4__.r)(element, g, ["point", "circle", "cross"], "flowchart", id); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.u.insertTitle(svg, "flowchartTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle()); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.o)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); - diagObj.db.indexNodes("subGraph" + i); - if (!conf2.htmlLabels) { - const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); - for (const label of labels) { - const dim = label.getBBox(); - const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); - rect.setAttribute("rx", 0); - rect.setAttribute("ry", 0); - rect.setAttribute("width", dim.width); - rect.setAttribute("height", dim.height); - label.insertBefore(rect, label.firstChild); - } - } - const keys = Object.keys(vert); - keys.forEach(function(key) { - const vertex = vert[key]; - if (vertex.link) { - const node = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("#" + id + ' [id="' + key + '"]'); - if (node) { - const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); - link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); - link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); - link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); - if (securityLevel === "sandbox") { - link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); - } else if (vertex.linkTarget) { - link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); - } - const linkNode = node.insert(function() { - return link; - }, ":first-child"); - const shape = node.select(".label-container"); - if (shape) { - linkNode.append(function() { - return shape.node(); - }); - } - const label = node.select(".label"); - if (label) { - linkNode.append(function() { - return label.node(); - }); - } - } - } - }); -}; -const flowRendererV2 = { - setConf, - addVertices, - addEdges, - getClasses, - draw -}; -const fade = (color, opacity) => { - const channel = khroma__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A; - const r = channel(color, "r"); - const g = channel(color, "g"); - const b = channel(color, "b"); - return khroma__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A(r, g, b, opacity); -}; -const getStyles = (options) => `.label { - font-family: ${options.fontFamily}; - color: ${options.nodeTextColor || options.textColor}; - } - .cluster-label text { - fill: ${options.titleColor}; - } - .cluster-label span,p { - color: ${options.titleColor}; - } - - .label text,span,p { - fill: ${options.nodeTextColor || options.textColor}; - color: ${options.nodeTextColor || options.textColor}; - } - - .node rect, - .node circle, - .node ellipse, - .node polygon, - .node path { - fill: ${options.mainBkg}; - stroke: ${options.nodeBorder}; - stroke-width: 1px; - } - .flowchart-label text { - text-anchor: middle; - } - // .flowchart-label .text-outer-tspan { - // text-anchor: middle; - // } - // .flowchart-label .text-inner-tspan { - // text-anchor: start; - // } - - .node .katex path { - fill: #000; - stroke: #000; - stroke-width: 1px; - } - - .node .label { - text-align: center; - } - .node.clickable { - cursor: pointer; - } - - .arrowheadPath { - fill: ${options.arrowheadColor}; - } - - .edgePath .path { - stroke: ${options.lineColor}; - stroke-width: 2.0px; - } - - .flowchart-link { - stroke: ${options.lineColor}; - fill: none; - } - - .edgeLabel { - background-color: ${options.edgeLabelBackground}; - rect { - opacity: 0.5; - background-color: ${options.edgeLabelBackground}; - fill: ${options.edgeLabelBackground}; - } - text-align: center; - } - - /* For html labels only */ - .labelBkg { - background-color: ${fade(options.edgeLabelBackground, 0.5)}; - // background-color: - } - - .cluster rect { - fill: ${options.clusterBkg}; - stroke: ${options.clusterBorder}; - stroke-width: 1px; - } - - .cluster text { - fill: ${options.titleColor}; - } - - .cluster span,p { - color: ${options.titleColor}; - } - /* .cluster div { - color: ${options.titleColor}; - } */ - - div.mermaidTooltip { - position: absolute; - text-align: center; - max-width: 200px; - padding: 2px; - font-family: ${options.fontFamily}; - font-size: 12px; - background: ${options.tertiaryColor}; - border: 1px solid ${options.border2}; - border-radius: 2px; - pointer-events: none; - z-index: 100; - } - - .flowchartTitleText { - text-anchor: middle; - font-size: 18px; - fill: ${options.textColor}; - } -`; -const flowStyles = getStyles; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/45462f11.9c7c6de5.js b/pr-preview/pr-1594/assets/js/45462f11.9c7c6de5.js deleted file mode 100644 index b45376b9b8..0000000000 --- a/pr-preview/pr-1594/assets/js/45462f11.9c7c6de5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3214],{34152:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var s=r(74848),t=r(28453);const i={},c="Slack",o={id:"reference/Connectors/capture-connectors/slack",title:"Slack",description:"This connector captures data from Slack into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/slack.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/slack",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/slack.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"SFTP",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp"},next:{title:"Snapchat Marketing",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat"}},l={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"slack",children:"Slack"}),"\n",(0,s.jsx)(n.p,{children:"This connector captures data from Slack into Flow collections."}),"\n",(0,s.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/source-slack:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/source-slack:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,s.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/slack/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,s.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,s.jsx)(n.p,{children:"The following data resources are supported through the Slack APIs:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://api.slack.com/methods/conversations.list",children:"Channels (Conversations)"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://api.slack.com/methods/conversations.members",children:"Channel Members (Conversation Members)"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://api.slack.com/methods/conversations.history",children:"Messages (Conversation History)"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://api.slack.com/methods/users.list",children:"Users"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://api.slack.com/methods/conversations.replies",children:"Threads (Conversation Replies)"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://api.slack.com/methods/usergroups.list",children:"User Groups"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://api.slack.com/methods/files.list",children:"Files"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://api.slack.com/methods/files.remote.list",children:"Remote Files"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Slack workspace URL or API token for authentication."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Slack source connector."]}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/join_channels"})}),(0,s.jsx)(n.td,{children:"Join Channels"}),(0,s.jsx)(n.td,{children:"Whether to join all channels"}),(0,s.jsx)(n.td,{children:"boolean"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"true"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/lookback_window"})}),(0,s.jsx)(n.td,{children:"Threads Lookback window (Days)"}),(0,s.jsx)(n.td,{children:"How far into the past to look for messages in threads."}),(0,s.jsx)(n.td,{children:"integer"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/start_date"})}),(0,s.jsx)(n.td,{children:"Start Date"}),(0,s.jsx)(n.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/stream"})})}),(0,s.jsx)(n.td,{children:"Stream"}),(0,s.jsx)(n.td,{children:"Resource of your Slack project from which collections are captured."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/syncMode"})})}),(0,s.jsx)(n.td,{children:"Sync Mode"}),(0,s.jsx)(n.td,{children:"Connection method."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-slack:dev\n config:\n credentials:\n auth_type: OAuth\n access_token: {secret}\n client_id: {your_client_id}\n client_secret: {secret}\n join_channels: true\n lookback_window: 7\n start_date: 2017-01-25T00:00:00Z\n bindings:\n - resource:\n stream: channel_members\n syncMode: full_refresh\n target: ${PREFIX}/channel_members\n {...}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>o});var s=r(96540);const t={},i=s.createContext(t);function c(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4648c831.3dbeef75.js b/pr-preview/pr-1594/assets/js/4648c831.3dbeef75.js deleted file mode 100644 index dbca876ca3..0000000000 --- a/pr-preview/pr-1594/assets/js/4648c831.3dbeef75.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6040],{90170:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var r=s(74848),t=s(28453);const i={},o="Amazon SQS",c={id:"reference/Connectors/capture-connectors/amazon-sqs",title:"Amazon SQS",description:"This connector captures data from Amazon Simple Queue Service (SQS) into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/amazon-sqs.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/amazon-sqs",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/amazon-sqs.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amazon S3",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3"},next:{title:"Amplitude",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude"}},d={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Performance Considerations",id:"performance-considerations",level:3},{value:"Data Loss Warning",id:"data-loss-warning",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"amazon-sqs",children:"Amazon SQS"}),"\n",(0,r.jsx)(n.p,{children:"This connector captures data from Amazon Simple Queue Service (SQS) into Flow collections."}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-amazon-sqs",":dev"," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"AWS IAM Access Key"}),"\n",(0,r.jsx)(n.li,{children:"AWS IAM Secret Key"}),"\n",(0,r.jsx)(n.li,{children:"AWS SQS Queue"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,r.jsx)(n.p,{children:"Follow these steps to set up the Amazon SQS connector:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/",children:"Create AWS IAM Keys"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.html#step-create-queue",children:"Create an SQS Queue"})}),"\n",(0,r.jsx)(n.li,{children:"Enter a Primary Key and Cursor Field using the standard form editor. Note that these values currently have to be a string or timestamp."}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"If Delete Messages After Read is false"}),", the IAM User only requires sqs",":ReceiveMessage"," permission in the AWS IAM Policy.\n",(0,r.jsx)(n.strong,{children:"If Delete Messages After Read is true"}),", both sqs",":ReceiveMessage"," and sqs",":DeleteMessage"," permissions are needed in the AWS IAM Policy."]})}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See ",(0,r.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the AmazonSQS source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/queue_url"})}),(0,r.jsx)(n.td,{children:"Queue URL"}),(0,r.jsx)(n.td,{children:"URL of the SQS Queue"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/region"})}),(0,r.jsx)(n.td,{children:"AWS Region"}),(0,r.jsx)(n.td,{children:"AWS Region of the SQS Queue"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/access_key"})}),(0,r.jsx)(n.td,{children:"AWS IAM Access Key ID"}),(0,r.jsx)(n.td,{children:"The Access Key ID of the AWS IAM Role to use for pulling messages"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/secret_key"})}),(0,r.jsx)(n.td,{children:"AWS IAM Secret Key"}),(0,r.jsx)(n.td,{children:"The Secret Key of the AWS IAM Role to use for pulling messages"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/delete_messages"})}),(0,r.jsx)(n.td,{children:"Delete Messages After Read"}),(0,r.jsx)(n.td,{children:"Delete messages from the SQS Queue after reading them"}),(0,r.jsx)(n.td,{children:"boolean"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Resource of your Amazon SQS project from which collections are captured."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync Mode"}),(0,r.jsx)(n.td,{children:"Connection method."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "properties": {\n "queue_url": {\n "order": 0\n },\n "region": {\n "order": 1\n },\n "access_key": {\n "order": 2\n },\n "secret_key": {\n "order": 3\n },\n "delete_messages": {\n "order": 4\n }\n }\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"performance-considerations",children:"Performance Considerations"}),"\n",(0,r.jsx)(n.p,{children:"Consider the following performance aspects:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Max Batch Size:"})," Set the maximum number of messages to consume in a single poll."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Max Wait Time:"})," Define the maximum time (in seconds) to poll for messages before committing a batch."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Message Visibility Timeout:"})," Determine how long a message should be hidden from other consumers after being read."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"data-loss-warning",children:"Data Loss Warning"}),"\n",(0,r.jsx)(n.p,{children:"When enabling Delete Messages After Read, messages are deleted from the SQS Queue after being read. However, there is no guarantee that the downstream destination has committed or persisted the message. Exercise caution before enabling this option to avoid permanent message loss."})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>c});var r=s(96540);const t={},i=r.createContext(t);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/46cf1090.eef6ac79.js b/pr-preview/pr-1594/assets/js/46cf1090.eef6ac79.js deleted file mode 100644 index 069f9b8b83..0000000000 --- a/pr-preview/pr-1594/assets/js/46cf1090.eef6ac79.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5970],{64126:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>a});var t=o(74848),s=o(28453);const r={},i="MongoDB",c={id:"reference/Connectors/capture-connectors/mongodb",title:"MongoDB",description:"This connector captures data from your MongoDB collections into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/mongodb.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/mongodb",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/mongodb.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"MixPanel",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel"},next:{title:"MySQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/"}},d={},a=[{value:"Data model",id:"data-model",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"SSH Tunneling",id:"ssh-tunneling",level:2},{value:"Backfill and real-time updates",id:"backfill-and-real-time-updates",level:2},{value:"Change Event Pre- and Post-Images",id:"change-event-pre--and-post-images",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"mongodb",children:"MongoDB"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from your MongoDB collections into Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-mongodb:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-mongodb:dev"})})," provides the\nlatest connector image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"data-model",children:"Data model"}),"\n",(0,t.jsxs)(n.p,{children:["MongoDB is a NoSQL database. Its ",(0,t.jsx)(n.a,{href:"https://www.mongodb.com/docs/manual/core/data-modeling-introduction/",children:"data\nmodel"})," consists of\n",(0,t.jsx)(n.strong,{children:"documents"})," (lightweight records that contain mappings of fields and values) organized in\n",(0,t.jsx)(n.strong,{children:"collections"}),". MongoDB documents have a mandatory ",(0,t.jsx)(n.code,{children:"_id"})," field that is used as the key of the\ncollection."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"You'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Credentials for connecting to your MongoDB instance and database"}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Read access to your MongoDB database(s), see ",(0,t.jsx)(n.a,{href:"https://www.mongodb.com/docs/manual/core/authorization/",children:"Role-Based Access\nControl"})," for more information."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"Configuration Tip",type:"tip",children:(0,t.jsxs)(n.p,{children:["If you are using a user with access to all databases, then in your mongodb address, you must specify\n",(0,t.jsx)(n.code,{children:"?authSource=admin"})," parameter so that authentication is done through your admin database."]})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["ReplicaSet enabled on your database, see ",(0,t.jsx)(n.a,{href:"https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/",children:"Deploy a Replica\nSet"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If you are using MongoDB Atlas, or your MongoDB provider requires allowlisting of IPs, you need to\n",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"allowlist the Estuary IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the Flow specification\nfile. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using\nconnectors. The values and specification sample below provide configuration details specific to the\nMongoDB source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/address"})})}),(0,t.jsx)(n.td,{children:"Address"}),(0,t.jsx)(n.td,{children:"Host and port of the database. Optionally can specify scheme for the URL such as mongodb+srv://host."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/user"})})}),(0,t.jsx)(n.td,{children:"User"}),(0,t.jsx)(n.td,{children:"Database user to connect as."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/password"})})}),(0,t.jsx)(n.td,{children:"Password"}),(0,t.jsx)(n.td,{children:"Password for the specified database user."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/database"})}),(0,t.jsx)(n.td,{children:"Database"}),(0,t.jsx)(n.td,{children:"Optional comma-separated list of the databases to discover. If not provided will discover all available databases in the instance."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/database"})})}),(0,t.jsx)(n.td,{children:"Database"}),(0,t.jsx)(n.td,{children:"Database name"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/collection"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Collection name"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-mongodb:dev\n config:\n address: "mongo:27017"\n password: "flow"\n user: "flow"\n bindings:\n - resource:\n collection: users\n database: test\n target: ${PREFIX}/users\n'})}),"\n",(0,t.jsx)(n.h2,{id:"ssh-tunneling",children:"SSH Tunneling"}),"\n",(0,t.jsx)(n.p,{children:"As an alternative to connecting to your MongoDB instance directly, you can allow secure connections via SSH tunneling. To do so:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Refer to the ",(0,t.jsx)(n.a,{href:"../../../../guides/connect-network/",children:"guide"})," to configure an SSH server on the cloud platform of your choice."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, with the addition of the ",(0,t.jsx)(n.code,{children:"networkTunnel"})," stanza to enable the SSH tunnel, if using. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"backfill-and-real-time-updates",children:"Backfill and real-time updates"}),"\n",(0,t.jsxs)(n.p,{children:["When performing the initial database snapshot, the connector continuously reads from ",(0,t.jsx)(n.a,{href:"https://www.mongodb.com/docs/manual/changeStreams/",children:(0,t.jsx)(n.strong,{children:"change\nstreams"})})," to capture change events while\nexecuting collection scans to backfill pre-existing documents. After the initial snapshot, the\nconnector continues to read from the change streams indefinitely to capture all changes going\nforward."]}),"\n",(0,t.jsxs)(n.p,{children:["If the connector's process is paused for a while, it will attempt to resume capturing change events\nfrom where it left off, however the connector's ability to do this depends on the size of the\n",(0,t.jsx)(n.a,{href:"https://www.mongodb.com/docs/manual/core/replica-set-oplog/",children:"replica set oplog"}),", and in certain\ncircumstances, when the pause has been long enough for the oplog to have evicted old change events,\nthe connector will need to re-do the backfill to ensure data consistency. In these cases it is\nnecessary to ",(0,t.jsx)(n.a,{href:"https://www.mongodb.com/docs/manual/tutorial/change-oplog-size/#c.-change-the-oplog-size-of-the-replica-set-member",children:"resize your\noplog"}),"\nor ",(0,t.jsx)(n.a,{href:"https://www.mongodb.com/docs/manual/reference/command/replSetResizeOplog/#minimum-oplog-retention-period",children:"set a minimum retention\nperiod"}),"\nfor your oplog to be able to reliably capture data. The recommended minimum retention period is at\nleast 24 hours, but we recommend higher values to improve reliability."]}),"\n",(0,t.jsx)(n.h2,{id:"change-event-pre--and-post-images",children:"Change Event Pre- and Post-Images"}),"\n",(0,t.jsxs)(n.p,{children:["Captured documents for change events from ",(0,t.jsx)(n.code,{children:"update"})," operations will always\ninclude a full post-image, since the change stream is configured with the ",(0,t.jsxs)(n.a,{href:"https://www.mongodb.com/docs/manual/changeStreams/#lookup-full-document-for-update-operations",children:[(0,t.jsx)(n.code,{children:"{ fullDocument: 'updateLookup' }"}),"\nsetting"]}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Pre-images for ",(0,t.jsx)(n.code,{children:"update"}),", ",(0,t.jsx)(n.code,{children:"replace"}),", and ",(0,t.jsx)(n.code,{children:"delete"})," operations will be captured if\nthey are available. For these pre-images to be captured, the source MongoDB\ncollection must have ",(0,t.jsx)(n.code,{children:"changeStreamPreAndPostImages"})," enabled. See the ",(0,t.jsx)(n.a,{href:"https://www.mongodb.com/docs/manual/changeStreams/#change-streams-with-document-pre--and-post-images",children:"official\nMongoDB\ndocumentation"}),"\nfor more information on how to enable this setting."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>i,x:()=>c});var t=o(96540);const s={},r=t.createContext(s);function i(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4741.460f6e7f.js b/pr-preview/pr-1594/assets/js/4741.460f6e7f.js deleted file mode 100644 index 314af222a0..0000000000 --- a/pr-preview/pr-1594/assets/js/4741.460f6e7f.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[4741],{62954:(n,t,e)=>{n.exports=function(){function n(t,e,i){function r(a,o){if(!e[a]){if(!t[a]){if(c)return c(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var s=e[a]={exports:{}};t[a][0].call(s.exports,(function(n){return r(t[a][1][n]||n)}),s,s.exports,n,t,e,i)}return e[a].exports}for(var c=void 0,a=0;a<i.length;a++)r(i[a]);return r}return n}()({1:[function(n,t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function n(n,t){for(var e=0;e<t.length;e++){var i=t[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(n,i.key,i)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();function r(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}var c=function(){function n(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=e.defaultLayoutOptions,c=void 0===i?{}:i,o=e.algorithms,u=void 0===o?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:o,s=e.workerFactory,h=e.workerUrl;if(r(this,n),this.defaultLayoutOptions=c,this.initialized=!1,void 0===h&&void 0===s)throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var f=s;void 0!==h&&void 0===s&&(f=function(n){return new Worker(n)});var l=f(h);if("function"!=typeof l.postMessage)throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new a(l),this.worker.postMessage({cmd:"register",algorithms:u}).then((function(n){return t.initialized=!0})).catch(console.err)}return i(n,[{key:"layout",value:function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=t.layoutOptions,i=void 0===e?this.defaultLayoutOptions:e,r=t.logging,c=void 0!==r&&r,a=t.measureExecutionTime,o=void 0!==a&&a;return n?this.worker.postMessage({cmd:"layout",graph:n,layoutOptions:i,options:{logging:c,measureExecutionTime:o}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),n}();e.default=c;var a=function(){function n(t){var e=this;if(r(this,n),void 0===t)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=t,this.worker.onmessage=function(n){setTimeout((function(){e.receive(e,n)}),0)}}return i(n,[{key:"postMessage",value:function(n){var t=this.id||0;this.id=t+1,n.id=t;var e=this;return new Promise((function(i,r){e.resolvers[t]=function(n,t){n?(e.convertGwtStyleError(n),r(n)):i(t)},e.worker.postMessage(n)}))}},{key:"receive",value:function(n,t){var e=t.data,i=n.resolvers[e.id];i&&(delete n.resolvers[e.id],e.error?i(e.error):i(null,e.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(n){if(n){var t=n.__java$exception;t&&(t.cause&&t.cause.backingJsObject&&(n.cause=t.cause.backingJsObject,this.convertGwtStyleError(n.cause)),delete n.__java$exception)}}}]),n}()},{}],2:[function(n,t,i){(function(n){(function(){"use strict";var e;function r(){}function c(){}function a(){}function o(){}function u(){}function s(){}function h(){}function f(){}function l(){}function b(){}function w(){}function d(){}function g(){}function p(){}function m(){}function v(){}function k(){}function y(){}function M(){}function T(){}function j(){}function E(){}function S(){}function P(){}function C(){}function I(){}function O(){}function A(){}function L(){}function N(){}function $(){}function D(){}function x(){}function R(){}function K(){}function F(){}function _(){}function B(){}function H(){}function U(){}function G(){}function q(){}function X(){}function z(){}function V(){}function W(){}function Q(){}function J(){}function Y(){}function Z(){}function nn(){}function tn(){}function en(){}function rn(){}function cn(){}function an(){}function on(){}function un(){}function sn(){}function hn(){}function fn(){}function ln(){}function bn(){}function wn(){}function dn(){}function gn(){}function pn(){}function mn(){}function vn(){}function kn(){}function yn(){}function Mn(){}function Tn(){}function jn(){}function En(){}function Sn(){}function Pn(){}function Cn(){}function In(){}function On(){}function An(){}function Ln(){}function Nn(){}function $n(){}function Dn(){}function xn(){}function Rn(){}function Kn(){}function Fn(){}function _n(){}function Bn(){}function Hn(){}function Un(){}function Gn(){}function qn(){}function Xn(){}function zn(){}function Vn(){}function Wn(){}function Qn(){}function Jn(){}function Yn(){}function Zn(){}function nt(){}function tt(){}function et(){}function it(){}function rt(){}function ct(){}function at(){}function ot(){}function ut(){}function st(){}function ht(){}function ft(){}function lt(){}function bt(){}function wt(){}function dt(){}function gt(){}function pt(){}function mt(){}function vt(){}function kt(){}function yt(){}function Mt(){}function Tt(){}function jt(){}function Et(){}function St(){}function Pt(){}function Ct(){}function It(){}function Ot(){}function At(){}function Lt(){}function Nt(){}function $t(){}function Dt(){}function xt(){}function Rt(){}function Kt(){}function Ft(){}function _t(){}function Bt(){}function Ht(){}function Ut(){}function Gt(){}function qt(){}function Xt(){}function zt(){}function Vt(){}function Wt(){}function Qt(){}function Jt(){}function Yt(){}function Zt(){}function ne(){}function te(){}function ee(){}function ie(){}function re(){}function ce(){}function ae(){}function oe(){}function ue(){}function se(){}function he(){}function fe(){}function le(){}function be(){}function we(){}function de(){}function ge(){}function pe(){}function me(){}function ve(){}function ke(){}function ye(){}function Me(){}function Te(){}function je(){}function Ee(){}function Se(){}function Pe(){}function Ce(){}function Ie(){}function Oe(){}function Ae(){}function Le(){}function Ne(){}function $e(){}function De(){}function xe(){}function Re(){}function Ke(){}function Fe(){}function _e(){}function Be(){}function He(){}function Ue(){}function Ge(){}function qe(){}function Xe(){}function ze(){}function Ve(){}function We(){}function Qe(){}function Je(){}function Ye(){}function Ze(){}function ni(){}function ti(){}function ei(){}function ii(){}function ri(){}function ci(){}function ai(){}function oi(){}function ui(){}function si(){}function hi(){}function fi(){}function li(){}function bi(){}function wi(){}function di(){}function gi(){}function pi(){}function mi(){}function vi(){}function ki(){}function yi(){}function Mi(){}function Ti(){}function ji(){}function Ei(){}function Si(){}function Pi(){}function Ci(){}function Ii(){}function Oi(){}function Ai(){}function Li(){}function Ni(){}function $i(){}function Di(){}function xi(){}function Ri(){}function Ki(){}function Fi(){}function _i(){}function Bi(){}function Hi(){}function Ui(){}function Gi(){}function qi(){}function Xi(){}function zi(){}function Vi(){}function Wi(){}function Qi(){}function Ji(){}function Yi(){}function Zi(){}function nr(){}function tr(){}function er(){}function ir(){}function rr(){}function cr(){}function ar(){}function or(){}function ur(){}function sr(){}function hr(){}function fr(){}function lr(){}function br(){}function wr(){}function dr(){}function gr(){}function pr(){}function mr(){}function vr(){}function kr(){}function yr(){}function Mr(){}function Tr(){}function jr(){}function Er(){}function Sr(){}function Pr(){}function Cr(){}function Ir(){}function Or(){}function Ar(){}function Lr(){}function Nr(){}function $r(){}function Dr(){}function xr(){}function Rr(){}function Kr(){}function Fr(){}function _r(){}function Br(){}function Hr(){}function Ur(){}function Gr(){}function qr(){}function Xr(){}function zr(){}function Vr(){}function Wr(){}function Qr(){}function Jr(){}function Yr(){}function Zr(){}function nc(){}function tc(){}function ec(){}function ic(){}function rc(){}function cc(){}function ac(){}function oc(){}function uc(){}function sc(){}function hc(){}function fc(){}function lc(){}function bc(){}function wc(){}function dc(){}function gc(){}function pc(){}function mc(){}function vc(){}function kc(){}function yc(){}function Mc(){}function Tc(){}function jc(){}function Ec(){}function Sc(){}function Pc(){}function Cc(){}function Ic(){}function Oc(){}function Ac(){}function Lc(){}function Nc(){}function $c(){}function Dc(){}function xc(){}function Rc(){}function Kc(){}function Fc(){}function _c(){}function Bc(){}function Hc(){}function Uc(){}function Gc(){}function qc(){}function Xc(){}function zc(){}function Vc(){}function Wc(){}function Qc(){}function Jc(){}function Yc(){}function Zc(){}function na(){}function ta(){}function ea(){}function ia(){}function ra(){}function ca(){}function aa(){}function oa(){}function ua(){}function sa(){}function ha(){}function fa(){}function la(){}function ba(){}function wa(){}function da(){}function ga(){}function pa(){}function ma(){}function va(){}function ka(){}function ya(){}function Ma(){}function Ta(){}function ja(){}function Ea(){}function Sa(){}function Pa(){}function Ca(){}function Ia(){}function Oa(){}function Aa(){}function La(){}function Na(){}function $a(){}function Da(){}function xa(){}function Ra(){}function Ka(){}function Fa(){}function _a(){}function Ba(){}function Ha(){}function Ua(){}function Ga(){}function qa(){}function Xa(){}function za(){}function Va(){}function Wa(){}function Qa(){}function Ja(){}function Ya(){}function Za(){}function no(){}function to(){}function eo(){}function io(){}function ro(){}function co(){}function ao(){}function oo(){}function uo(){}function so(){}function ho(){}function fo(){}function lo(){}function bo(){}function wo(){}function go(){}function po(){}function mo(){}function vo(){}function ko(){}function yo(){}function Mo(){}function To(){}function jo(){}function Eo(){}function So(){}function Po(){}function Co(){}function Io(){}function Oo(){}function Ao(){}function Lo(){}function No(){}function $o(){}function Do(){}function xo(){}function Ro(){}function Ko(){}function Fo(){}function _o(){}function Bo(){}function Ho(){}function Uo(){}function Go(){}function qo(){}function Xo(){}function zo(){}function Vo(){}function Wo(){}function Qo(){}function Jo(){}function Yo(){}function Zo(){}function nu(){}function tu(){}function eu(){}function iu(){}function ru(){}function cu(){}function au(){}function ou(){}function uu(){}function su(){}function hu(){}function fu(){}function lu(){}function bu(){}function wu(){}function du(){}function gu(){}function pu(){}function mu(){}function vu(){}function ku(){}function yu(){}function Mu(){}function Tu(){}function ju(){}function Eu(){}function Su(){}function Pu(){}function Cu(){}function Iu(){}function Ou(){}function Au(){}function Lu(){}function Nu(){}function $u(){}function Du(){}function xu(){}function Ru(){}function Ku(){}function Fu(){}function _u(){}function Bu(){}function Hu(){}function Uu(){}function Gu(){}function qu(){}function Xu(){}function zu(){}function Vu(){}function Wu(){}function Qu(){}function Ju(){}function Yu(){}function Zu(){}function ns(){}function ts(){}function es(){}function is(){}function rs(){}function cs(){}function as(){}function os(){}function us(){}function ss(){}function hs(){}function fs(){}function ls(){}function bs(){}function ws(){}function ds(){}function gs(){}function ps(){}function ms(){}function vs(){}function ks(){}function ys(){}function Ms(){}function Ts(){}function js(){}function Es(){}function Ss(){}function Ps(){}function Cs(){}function Is(){}function Os(){}function As(){}function Ls(){}function Ns(){}function $s(){}function Ds(){}function xs(){}function Rs(){}function Ks(){}function Fs(){}function _s(){}function Bs(){}function Hs(){}function Us(){}function Gs(){}function qs(){}function Xs(){}function zs(){}function Vs(){}function Ws(){}function Qs(){}function Js(){}function Ys(){}function Zs(){}function nh(){}function th(){}function eh(){}function ih(){}function rh(){}function ch(){}function ah(){}function oh(){}function uh(){}function sh(){}function hh(){}function fh(){}function lh(){}function bh(){}function wh(){}function dh(){}function gh(){}function ph(){}function mh(){}function vh(){}function kh(){}function yh(){}function Mh(){}function Th(){}function jh(){}function Eh(){}function Sh(){}function Ph(){}function Ch(){}function Ih(){}function Oh(){}function Ah(){}function Lh(){}function Nh(){}function $h(){}function Dh(){}function xh(){}function Rh(){}function Kh(){}function Fh(){}function _h(){}function Bh(){}function Hh(){}function Uh(){}function Gh(){}function qh(){}function Xh(){}function zh(){}function Vh(){}function Wh(){}function Qh(){}function Jh(){}function Yh(){}function Zh(){}function nf(){}function tf(){}function ef(){}function rf(){}function cf(){}function af(){}function of(){}function uf(){}function sf(){}function hf(){}function ff(){}function lf(){}function bf(){}function wf(){}function df(){}function gf(){}function pf(){}function mf(){}function vf(){}function kf(){}function yf(){}function Mf(){}function Tf(){}function jf(){}function Ef(){}function Sf(){}function Pf(){}function Cf(){}function If(){}function Of(){}function Af(){}function Lf(){}function Nf(){}function $f(){}function Df(){}function xf(){}function Rf(n){}function Kf(n){}function Ff(){gy()}function _f(){VS()}function Bf(){MEn()}function Hf(){pbn()}function Uf(){ryn()}function Gf(){oOn()}function qf(){cGn()}function Xf(){yjn()}function zf(){Bjn()}function Vf(){WS()}function Wf(){HB()}function Qf(){QS()}function Jf(){Pun()}function Yf(){F7()}function Zf(){Ean()}function nl(){Y0()}function tl(){Pan()}function el(){Unn()}function il(){Q0()}function rl(){Cln()}function cl(){Ian()}function al(){Can()}function ol(){c6()}function ul(){Oan()}function sl(){jIn()}function hl(){YS()}function fl(){VYn()}function ll(){jYn()}function bl(){Aan()}function wl(){Iun()}function dl(){Z0()}function gl(){Pjn()}function pl(){t2()}function ml(){gUn()}function vl(){eDn()}function kl(){tcn()}function yl(){Kdn()}function Ml(){QGn()}function Tl(){e3()}function jl(){ncn()}function El(){EHn()}function Sl(){jOn()}function Pl(){IHn()}function Cl(){S_n()}function Il(){fIn()}function Ol(){uBn()}function Al(){jMn()}function Ll(){oB()}function Nl(){Stn()}function $l(){lIn()}function Dl(){XYn()}function xl(){Iln()}function Rl(){Wmn()}function Kl(){Oun()}function Fl(){tXn()}function _l(){vGn()}function Bl(n){tJ(n)}function Hl(n){this.a=n}function Ul(n){this.a=n}function Gl(n){this.a=n}function ql(n){this.a=n}function Xl(n){this.a=n}function zl(n){this.a=n}function Vl(n){this.a=n}function Wl(n){this.a=n}function Ql(n){this.a=n}function Jl(n){this.a=n}function Yl(n){this.a=n}function Zl(n){this.a=n}function nb(n){this.a=n}function tb(n){this.a=n}function eb(n){this.a=n}function ib(n){this.a=n}function rb(n){this.a=n}function cb(n){this.a=n}function ab(n){this.a=n}function ob(n){this.a=n}function ub(n){this.a=n}function sb(n){this.a=n}function hb(n){this.b=n}function fb(n){this.c=n}function lb(n){this.a=n}function bb(n){this.a=n}function wb(n){this.a=n}function db(n){this.a=n}function gb(n){this.a=n}function pb(n){this.a=n}function mb(n){this.a=n}function vb(n){this.a=n}function kb(n){this.a=n}function yb(n){this.a=n}function Mb(n){this.a=n}function Tb(n){this.a=n}function jb(n){this.a=n}function Eb(n){this.a=n}function Sb(n){this.a=n}function Pb(n){this.a=n}function Cb(n){this.a=n}function Ib(){this.a=[]}function Ob(n,t){n.a=t}function Ab(n,t){n.a=t}function Lb(n,t){n.b=t}function Nb(n,t){n.b=t}function $b(n,t){n.b=t}function Db(n,t){n.j=t}function xb(n,t){n.g=t}function Rb(n,t){n.i=t}function Kb(n,t){n.c=t}function Fb(n,t){n.c=t}function _b(n,t){n.d=t}function Bb(n,t){n.d=t}function Hb(n,t){n.k=t}function Ub(n,t){n.c=t}function Gb(n,t){n.c=t}function qb(n,t){n.a=t}function Xb(n,t){n.a=t}function zb(n,t){n.f=t}function Vb(n,t){n.a=t}function Wb(n,t){n.b=t}function Qb(n,t){n.d=t}function Jb(n,t){n.i=t}function Yb(n,t){n.o=t}function Zb(n,t){n.r=t}function nw(n,t){n.a=t}function tw(n,t){n.b=t}function ew(n,t){n.e=t}function iw(n,t){n.f=t}function rw(n,t){n.g=t}function cw(n,t){n.e=t}function aw(n,t){n.f=t}function ow(n,t){n.f=t}function uw(n,t){n.a=t}function sw(n,t){n.b=t}function hw(n,t){n.n=t}function fw(n,t){n.a=t}function lw(n,t){n.c=t}function bw(n,t){n.c=t}function ww(n,t){n.c=t}function dw(n,t){n.a=t}function gw(n,t){n.a=t}function pw(n,t){n.d=t}function mw(n,t){n.d=t}function vw(n,t){n.e=t}function kw(n,t){n.e=t}function yw(n,t){n.g=t}function Mw(n,t){n.f=t}function Tw(n,t){n.j=t}function jw(n,t){n.a=t}function Ew(n,t){n.a=t}function Sw(n,t){n.b=t}function Pw(n){n.b=n.a}function Cw(n){n.c=n.d.d}function Iw(n){this.a=n}function Ow(n){this.a=n}function Aw(n){this.a=n}function Lw(n){this.a=n}function Nw(n){this.a=n}function $w(n){this.a=n}function Dw(n){this.a=n}function xw(n){this.a=n}function Rw(n){this.a=n}function Kw(n){this.a=n}function Fw(n){this.a=n}function _w(n){this.a=n}function Bw(n){this.a=n}function Hw(n){this.a=n}function Uw(n){this.b=n}function Gw(n){this.b=n}function qw(n){this.b=n}function Xw(n){this.a=n}function zw(n){this.a=n}function Vw(n){this.c=n}function Ww(n){this.c=n}function Qw(n){this.c=n}function Jw(n){this.d=n}function Yw(n){this.a=n}function Zw(n){this.a=n}function nd(n){this.a=n}function td(n){this.a=n}function ed(n){this.a=n}function id(n){this.a=n}function rd(n){this.a=n}function cd(n){this.a=n}function ad(n){this.a=n}function od(n){this.a=n}function ud(n){this.a=n}function sd(n){this.a=n}function hd(n){this.a=n}function fd(n){this.a=n}function ld(n){this.a=n}function bd(n){this.a=n}function wd(n){this.a=n}function dd(n){this.a=n}function gd(n){this.a=n}function pd(n){this.a=n}function md(n){this.a=n}function vd(n){this.a=n}function kd(n){this.a=n}function yd(n){this.a=n}function Md(n){this.a=n}function Td(n){this.a=n}function jd(n){this.a=n}function Ed(n){this.a=n}function Sd(n){this.a=n}function Pd(n){this.a=n}function Cd(n){this.a=n}function Id(n){this.a=n}function Od(n){this.a=n}function Ad(n){this.a=n}function Ld(n){this.a=n}function Nd(n){this.a=n}function $d(n){this.a=n}function Dd(n){this.a=n}function xd(n){this.a=n}function Rd(n){this.a=n}function Kd(n){this.a=n}function Fd(n){this.a=n}function _d(n){this.a=n}function Bd(n){this.a=n}function Hd(n){this.a=n}function Ud(n){this.a=n}function Gd(n){this.a=n}function qd(n){this.a=n}function Xd(n){this.e=n}function zd(n){this.a=n}function Vd(n){this.a=n}function Wd(n){this.a=n}function Qd(n){this.a=n}function Jd(n){this.a=n}function Yd(n){this.a=n}function Zd(n){this.a=n}function ng(n){this.a=n}function tg(n){this.a=n}function eg(n){this.a=n}function ig(n){this.a=n}function rg(n){this.a=n}function cg(n){this.a=n}function ag(n){this.a=n}function og(n){this.a=n}function ug(n){this.a=n}function sg(n){this.a=n}function hg(n){this.a=n}function fg(n){this.a=n}function lg(n){this.a=n}function bg(n){this.a=n}function wg(n){this.a=n}function dg(n){this.a=n}function gg(n){this.a=n}function pg(n){this.a=n}function mg(n){this.a=n}function vg(n){this.a=n}function kg(n){this.a=n}function yg(n){this.a=n}function Mg(n){this.a=n}function Tg(n){this.a=n}function jg(n){this.a=n}function Eg(n){this.a=n}function Sg(n){this.a=n}function Pg(n){this.a=n}function Cg(n){this.a=n}function Ig(n){this.a=n}function Og(n){this.a=n}function Ag(n){this.a=n}function Lg(n){this.a=n}function Ng(n){this.a=n}function $g(n){this.a=n}function Dg(n){this.a=n}function xg(n){this.a=n}function Rg(n){this.a=n}function Kg(n){this.a=n}function Fg(n){this.a=n}function _g(n){this.a=n}function Bg(n){this.a=n}function Hg(n){this.a=n}function Ug(n){this.a=n}function Gg(n){this.a=n}function qg(n){this.a=n}function Xg(n){this.a=n}function zg(n){this.c=n}function Vg(n){this.b=n}function Wg(n){this.a=n}function Qg(n){this.a=n}function Jg(n){this.a=n}function Yg(n){this.a=n}function Zg(n){this.a=n}function np(n){this.a=n}function tp(n){this.a=n}function ep(n){this.a=n}function ip(n){this.a=n}function rp(n){this.a=n}function cp(n){this.a=n}function ap(n){this.a=n}function op(n){this.a=n}function up(n){this.a=n}function sp(n){this.a=n}function hp(n){this.a=n}function fp(n){this.a=n}function lp(n){this.a=n}function bp(n){this.a=n}function wp(n){this.a=n}function dp(n){this.a=n}function gp(n){this.a=n}function pp(n){this.a=n}function mp(n){this.a=n}function vp(n){this.a=n}function kp(n){this.a=n}function yp(n){this.a=n}function Mp(n){this.a=n}function Tp(n){this.a=n}function jp(n){this.a=n}function Ep(n){this.a=n}function Sp(n){this.a=n}function Pp(n){this.a=n}function Cp(n){this.a=n}function Ip(n){this.a=n}function Op(n){this.a=n}function Ap(n){this.a=n}function Lp(n){this.a=n}function Np(n){this.a=n}function $p(n){this.a=n}function Dp(n){this.a=n}function xp(n){this.a=n}function Rp(n){this.a=n}function Kp(n){this.a=n}function Fp(n){this.a=n}function _p(n){this.a=n}function Bp(n){this.a=n}function Hp(n){this.a=n}function Up(n){this.a=n}function Gp(n){this.a=n}function qp(n){this.a=n}function Xp(n){this.a=n}function zp(n){this.a=n}function Vp(n){this.a=n}function Wp(n){this.a=n}function Qp(n){this.a=n}function Jp(n){this.f=n}function Yp(n){this.a=n}function Zp(n){this.a=n}function nm(n){this.a=n}function tm(n){this.a=n}function em(n){this.a=n}function im(n){this.a=n}function rm(n){this.a=n}function cm(n){this.a=n}function am(n){this.a=n}function om(n){this.a=n}function um(n){this.a=n}function sm(n){this.a=n}function hm(n){this.a=n}function fm(n){this.a=n}function lm(n){this.a=n}function bm(n){this.a=n}function wm(n){this.a=n}function dm(n){this.a=n}function gm(n){this.a=n}function pm(n){this.a=n}function mm(n){this.a=n}function vm(n){this.a=n}function km(n){this.a=n}function ym(n){this.a=n}function Mm(n){this.a=n}function Tm(n){this.a=n}function jm(n){this.a=n}function Em(n){this.a=n}function Sm(n){this.a=n}function Pm(n){this.a=n}function Cm(n){this.b=n}function Im(n){this.a=n}function Om(n){this.a=n}function Am(n){this.a=n}function Lm(n){this.a=n}function Nm(n){this.a=n}function $m(n){this.a=n}function Dm(n){this.a=n}function xm(n){this.b=n}function Rm(n){this.a=n}function Km(n){this.a=n}function Fm(n){this.a=n}function _m(n){this.a=n}function Bm(n){this.c=n}function Hm(n){this.e=n}function Um(n){this.a=n}function Gm(n){this.a=n}function qm(n){this.a=n}function Xm(n){this.d=n}function zm(n){this.a=n}function Vm(n){this.a=n}function Wm(n){this.a=n}function Qm(n){this.e=n}function Jm(){this.a=0}function Ym(){$V(this)}function Zm(){IN(this)}function nv(){XQ(this)}function tv(){Rf(this)}function ev(){this.c=nBt}function iv(n,t){n.b+=t}function rv(n,t){t.Wb(n)}function cv(n){return n.a}function av(n){return n.a}function ov(n){return n.a}function uv(n){return n.a}function sv(n){return n.a}function hv(n){return n.e}function fv(){return null}function lv(){return null}function bv(){mj(),xJn()}function wv(n){n.b.Of(n.e)}function dv(n){n.b=new rT}function gv(n,t){n.b=t-n.b}function pv(n,t){n.a=t-n.a}function mv(n,t){n.push(t)}function vv(n,t){n.sort(t)}function kv(n,t){t.jd(n.a)}function yv(n,t){NLn(t,n)}function Mv(n,t,e){n.Yd(e,t)}function Tv(n,t){n.e=t,t.b=n}function jv(n){sB(),this.a=n}function Ev(n){sB(),this.a=n}function Sv(n){sB(),this.a=n}function Pv(n){ZW(),this.a=n}function Cv(n){EZ(),_at.le(n)}function Iv(){Iv=E,new Ym}function Ov(){vx.call(this)}function Av(){vx.call(this)}function Lv(){Ov.call(this)}function Nv(){Ov.call(this)}function $v(){Ov.call(this)}function Dv(){Ov.call(this)}function xv(){Ov.call(this)}function Rv(){Ov.call(this)}function Kv(){Ov.call(this)}function Fv(){Ov.call(this)}function _v(){Ov.call(this)}function Bv(){Ov.call(this)}function Hv(){Ov.call(this)}function Uv(){this.a=this}function Gv(){this.Bb|=256}function qv(){this.b=new hL}function Xv(n,t){n.length=t}function zv(n,t){kD(n.a,t)}function Vv(n,t){LOn(n.c,t)}function Wv(n,t){FV(n.b,t)}function Qv(n,t){bMn(n.a,t)}function Jv(n,t){Vdn(n.a,t)}function Yv(n,t){Msn(n.e,t)}function Zv(n){C$n(n.c,n.b)}function nk(n,t){n.kc().Nb(t)}function tk(n){this.a=Agn(n)}function ek(){this.a=new Ym}function ik(){this.a=new Ym}function rk(){this.a=new hS}function ck(){this.a=new Zm}function ak(){this.a=new Zm}function ok(){this.a=new Zm}function uk(){this.a=new kn}function sk(){this.a=new g7}function hk(){this.a=new lt}function fk(){this.a=new V0}function lk(){this.a=new NF}function bk(){this.a=new Zm}function wk(){this.a=new Zm}function dk(){this.a=new Zm}function gk(){this.a=new Zm}function pk(){this.d=new Zm}function mk(){this.a=new i4}function vk(){this.a=new ek}function kk(){this.a=new Ym}function yk(){this.b=new Ym}function Mk(){this.b=new Zm}function Tk(){this.e=new Zm}function jk(){this.a=new sl}function Ek(){this.d=new Zm}function Sk(){BZ.call(this)}function Pk(){BZ.call(this)}function Ck(){Zm.call(this)}function Ik(){Lv.call(this)}function Ok(){ck.call(this)}function Ak(){HF.call(this)}function Lk(){gk.call(this)}function Nk(){tv.call(this)}function $k(){Nk.call(this)}function Dk(){tv.call(this)}function xk(){Dk.call(this)}function Rk(){oy.call(this)}function Kk(){oy.call(this)}function Fk(){oy.call(this)}function _k(){hy.call(this)}function Bk(){ts.call(this)}function Hk(){ts.call(this)}function Uk(){lS.call(this)}function Gk(){wy.call(this)}function qk(){wy.call(this)}function Xk(){Ym.call(this)}function zk(){Ym.call(this)}function Vk(){Ym.call(this)}function Wk(){Kan.call(this)}function Qk(){ek.call(this)}function Jk(){Gv.call(this)}function Yk(){$D.call(this)}function Zk(){Ym.call(this)}function ny(){$D.call(this)}function ty(){Ym.call(this)}function ey(){Ym.call(this)}function iy(){ps.call(this)}function ry(){iy.call(this)}function cy(){ps.call(this)}function ay(){$f.call(this)}function oy(){this.a=new ek}function uy(){this.a=new Ym}function sy(){this.a=new Zm}function hy(){this.a=new Ym}function fy(){this.a=new lS}function ly(){this.j=new Zm}function by(){this.a=new zj}function wy(){this.a=new gs}function dy(){this.a=new Do}function gy(){gy=E,wat=new c}function py(){py=E,Mat=new ky}function my(){my=E,Tat=new vy}function vy(){ib.call(this,"")}function ky(){ib.call(this,"")}function yy(n){Arn.call(this,n)}function My(n){Arn.call(this,n)}function Ty(n){Ql.call(this,n)}function jy(n){HE.call(this,n)}function Ey(n){HE.call(this,n)}function Sy(n){jy.call(this,n)}function Py(n){jy.call(this,n)}function Cy(n){jy.call(this,n)}function Iy(n){c8.call(this,n)}function Oy(n){c8.call(this,n)}function Ay(n){K_.call(this,n)}function Ly(n){XE.call(this,n)}function Ny(n){WE.call(this,n)}function $y(n){WE.call(this,n)}function Dy(n){WE.call(this,n)}function xy(n){cOn.call(this,n)}function Ry(n){xy.call(this,n)}function Ky(n){Uz.call(this,n)}function Fy(n){Ky.call(this,n)}function _y(){Cb.call(this,{})}function By(){By=E,Vat=new T}function Hy(){Hy=E,Iat=new X$}function Uy(){Uy=E,Dat=new r}function Gy(){Gy=E,Fat=new p}function qy(){qy=E,Hat=new k}function Xy(n){UD(),this.a=n}function zy(n){Cun(),this.a=n}function Vy(n){rz(),this.f=n}function Wy(n){rz(),this.f=n}function Qy(n){aB(),this.a=n}function Jy(n){n.b=null,n.c=0}function Yy(n,t){n.e=t,yFn(n,t)}function Zy(n,t){n.a=t,WAn(n)}function nM(n,t,e){n.a[t.g]=e}function tM(n,t,e){nSn(e,n,t)}function eM(n,t){F_(t.i,n.n)}function iM(n,t){yln(n).Cd(t)}function rM(n,t){n.a.ec().Mc(t)}function cM(n,t){return n.g-t.g}function aM(n,t){return n*n/t}function oM(n){return tJ(n),n}function uM(n){return tJ(n),n}function sM(n){return tJ(n),n}function hM(n){return new Pb(n)}function fM(n){return new QW(n)}function lM(n){return tJ(n),n}function bM(n){return tJ(n),n}function wM(n){Ky.call(this,n)}function dM(n){Ky.call(this,n)}function gM(n){Ky.call(this,n)}function pM(n){Uz.call(this,n)}function mM(n){Ky.call(this,n)}function vM(n){Ky.call(this,n)}function kM(n){Ky.call(this,n)}function yM(n){Ky.call(this,n)}function MM(n){Ky.call(this,n)}function TM(n){Ky.call(this,n)}function jM(n){Ky.call(this,n)}function EM(n){Ky.call(this,n)}function SM(n){Ky.call(this,n)}function PM(n){Ky.call(this,n)}function CM(n){Ky.call(this,n)}function IM(n){tJ(n),this.a=n}function OM(n){return hln(n),n}function AM(n){zV(n,n.length)}function LM(n){return n.b==n.c}function NM(n){return!!n&&n.b}function $M(n){return!!n&&n.k}function DM(n){return!!n&&n.j}function xM(n,t,e){n.c.Ef(t,e)}function RM(n,t){n.be(t),t.ae(n)}function KM(n){sB(),this.a=WW(n)}function FM(){this.a=mK(WW(TZn))}function _M(){throw hv(new Kv)}function BM(){throw hv(new Kv)}function HM(){throw hv(new Kv)}function UM(){throw hv(new Kv)}function GM(){throw hv(new Kv)}function qM(){throw hv(new Kv)}function XM(){XM=E,EZ()}function zM(){$w.call(this,"")}function VM(){$w.call(this,"")}function WM(){$w.call(this,"")}function QM(){$w.call(this,"")}function JM(n){dM.call(this,n)}function YM(n){dM.call(this,n)}function ZM(n){vM.call(this,n)}function nT(n){qw.call(this,n)}function tT(n){nT.call(this,n)}function eT(n){gx.call(this,n)}function iT(n){Qx.call(this,n,0)}function rT(){L2.call(this,12,3)}function cT(n,t){return B0(n,t)}function aT(n,t){return Ltn(n,t)}function oT(n,t){return n.a-t.a}function uT(n,t){return n.a-t.a}function sT(n,t){return n.a-t.a}function hT(n,t){return t in n.a}function fT(n){return n.a?n.b:0}function lT(n){return n.a?n.b:0}function bT(n,t,e){t.Cd(n.a[e])}function wT(n,t,e){t.Pe(n.a[e])}function dT(n,t){n.b=new eN(t)}function gT(n,t){return n.b=t,n}function pT(n,t){return n.c=t,n}function mT(n,t){return n.f=t,n}function vT(n,t){return n.g=t,n}function kT(n,t){return n.a=t,n}function yT(n,t){return n.f=t,n}function MT(n,t){return n.k=t,n}function TT(n,t){return n.a=t,n}function jT(n,t){return n.e=t,n}function ET(n,t){return n.e=t,n}function ST(n,t){return n.f=t,n}function PT(n,t){n.b=!0,n.d=t}function CT(n,t){return n.b-t.b}function IT(n,t){return n.g-t.g}function OT(n,t){return n?0:t-1}function AT(n,t){return n?0:t-1}function LT(n,t){return n?t-1:0}function NT(n,t){return n.s-t.s}function $T(n,t){return t.rg(n)}function DT(n,t){return n.b=t,n}function xT(n,t){return n.a=t,n}function RT(n,t){return n.c=t,n}function KT(n,t){return n.d=t,n}function FT(n,t){return n.e=t,n}function _T(n,t){return n.f=t,n}function BT(n,t){return n.a=t,n}function HT(n,t){return n.b=t,n}function UT(n,t){return n.c=t,n}function GT(n,t){return n.c=t,n}function qT(n,t){return n.b=t,n}function XT(n,t){return n.d=t,n}function zT(n,t){return n.e=t,n}function VT(n,t){return n.f=t,n}function WT(n,t){return n.g=t,n}function QT(n,t){return n.a=t,n}function JT(n,t){return n.i=t,n}function YT(n,t){return n.j=t,n}function ZT(n,t){jIn(),o2(t,n)}function nj(n,t,e){az(n.a,t,e)}function tj(n){Y_.call(this,n)}function ej(n){dpn.call(this,n)}function ij(n){TY.call(this,n)}function rj(n){TY.call(this,n)}function cj(n){Drn.call(this,n)}function aj(n){HY.call(this,n)}function oj(n){HY.call(this,n)}function uj(){S$.call(this,"")}function sj(){this.a=0,this.b=0}function hj(){this.b=0,this.a=0}function fj(n,t){n.b=0,Ccn(n,t)}function lj(n,t){return n.k=t,n}function bj(n,t){return n.j=t,n}function wj(n,t){n.c=t,n.b=!0}function dj(){dj=E,rut=ePn()}function gj(){gj=E,xKt=AEn()}function pj(){pj=E,RKt=VPn()}function mj(){mj=E,NFt=aan()}function vj(){vj=E,y_t=LEn()}function kj(){kj=E,xBt=NEn()}function yj(){yj=E,RBt=qAn()}function Mj(n){return n.e&&n.e()}function Tj(n){return n.l|n.m<<22}function jj(n,t){return n.c._b(t)}function Ej(n,t){return Uwn(n.b,t)}function Sj(n){return n?n.d:null}function Pj(n){return n?n.g:null}function Cj(n){return n?n.i:null}function Ij(n){return vK(n),n.o}function Oj(n,t){return n.a+=t,n}function Aj(n,t){return n.a+=t,n}function Lj(n,t){return n.a+=t,n}function Nj(n,t){return n.a+=t,n}function $j(n,t){for(;n.Bd(t););}function Dj(n){this.a=new sS(n)}function xj(){throw hv(new Kv)}function Rj(){throw hv(new Kv)}function Kj(){throw hv(new Kv)}function Fj(){throw hv(new Kv)}function _j(){throw hv(new Kv)}function Bj(){throw hv(new Kv)}function Hj(n){this.a=new Hz(n)}function Uj(){this.a=new mKn(iIt)}function Gj(){this.b=new mKn(ZSt)}function qj(){this.a=new mKn(dOt)}function Xj(){this.b=new mKn(VAt)}function zj(){this.b=new mKn(VAt)}function Vj(n){this.a=0,this.b=n}function Wj(n){CQn(),uYn(this,n)}function Qj(n){return GQ(n),n.a}function Jj(n){return n.b!=n.d.c}function Yj(n,t){return n.d[t.p]}function Zj(n,t){return vFn(n,t)}function nE(n,t,e){n.splice(t,e)}function tE(n,t){for(;n.Re(t););}function eE(n){n.c?P_n(n):C_n(n)}function iE(){throw hv(new Kv)}function rE(){throw hv(new Kv)}function cE(){throw hv(new Kv)}function aE(){throw hv(new Kv)}function oE(){throw hv(new Kv)}function uE(){throw hv(new Kv)}function sE(){throw hv(new Kv)}function hE(){throw hv(new Kv)}function fE(){throw hv(new Kv)}function lE(){throw hv(new Kv)}function bE(){throw hv(new Bv)}function wE(){throw hv(new Bv)}function dE(n){this.a=new gE(n)}function gE(n){Zan(this,n,fOn())}function pE(n){return!n||FQ(n)}function mE(n){return-1!=dHt[n]}function vE(){0!=Uat&&(Uat=0),qat=-1}function kE(){null==hZn&&(hZn=[])}function yE(n,t){RD.call(this,n,t)}function ME(n,t){yE.call(this,n,t)}function TE(n,t){this.a=n,this.b=t}function jE(n,t){this.a=n,this.b=t}function EE(n,t){this.a=n,this.b=t}function SE(n,t){this.a=n,this.b=t}function PE(n,t){this.a=n,this.b=t}function CE(n,t){this.a=n,this.b=t}function IE(n,t){this.a=n,this.b=t}function OE(n,t){this.e=n,this.d=t}function AE(n,t){this.b=n,this.c=t}function LE(n,t){this.b=n,this.a=t}function NE(n,t){this.b=n,this.a=t}function $E(n,t){this.b=n,this.a=t}function DE(n,t){this.b=n,this.a=t}function xE(n,t){this.a=n,this.b=t}function RE(n,t){this.a=n,this.b=t}function KE(n,t){this.a=n,this.f=t}function FE(n,t){this.g=n,this.i=t}function _E(n,t){this.f=n,this.g=t}function BE(n,t){this.b=n,this.c=t}function HE(n){FD(n.dc()),this.c=n}function UE(n,t){this.a=n,this.b=t}function GE(n,t){this.a=n,this.b=t}function qE(n){this.a=uG(WW(n),15)}function XE(n){this.a=uG(WW(n),15)}function zE(n){this.a=uG(WW(n),85)}function VE(n){this.b=uG(WW(n),85)}function WE(n){this.b=uG(WW(n),51)}function QE(){this.q=new e.Date}function JE(n,t){this.a=n,this.b=t}function YE(n,t){return PV(n.b,t)}function ZE(n,t){return n.b.Hc(t)}function nS(n,t){return n.b.Ic(t)}function tS(n,t){return n.b.Qc(t)}function eS(n,t){return n.b.Hc(t)}function iS(n,t){return n.c.uc(t)}function rS(n,t){return udn(n.c,t)}function cS(n,t){return n.a._b(t)}function aS(n,t){return n>t&&t<d1n}function oS(n){return n.f.c+n.i.c}function uS(n){return xW(),n?zat:Xat}function sS(n){Nfn.call(this,n,0)}function hS(){Hz.call(this,null)}function fS(n){this.c=n,Sin(this)}function lS(){O$(this),BY(this)}function bS(){bS=E,Eot=new S}function wS(){wS=E,Qot=new I}function dS(){dS=E,hut=new uL}function gS(){gS=E,fut=new sL}function pS(){pS=E,Eut=new U}function mS(){Fnn.call(this,null)}function vS(){vS=E,Kut=new sn}function kS(n,t){GQ(n),n.a.Nb(t)}function yS(n,t){return n.a.Xc(t)}function MS(n,t){return n.a.Yc(t)}function TS(n,t){return n.a.$c(t)}function jS(n,t){return n.a._c(t)}function ES(n,t){return n.Gc(t),n}function SS(n,t){return Qon(n,t),n}function PS(n,t){V$n(gZ(n.a),t)}function CS(n,t){V$n(gZ(n.a),t)}function IS(n,t){return n.Gc(t),n}function OS(n,t){return n.a.f=t,n}function AS(n,t){return n.a.d=t,n}function LS(n,t){return n.a.g=t,n}function NS(n,t){return n.a.j=t,n}function $S(n,t){return n.a.a=t,n}function DS(n,t){return n.a.d=t,n}function xS(n,t){return n.a.e=t,n}function RS(n,t){return n.a.g=t,n}function KS(n,t){return n.a.f=t,n}function FS(n){return n.b=!1,n}function _S(){_S=E,Uut=new wn}function BS(){BS=E,Kht=new qR}function HS(){HS=E,Olt=new wt}function US(){US=E,Alt=new Mt}function GS(){GS=E,Dlt=new nz}function qS(){qS=E,Qlt=new St}function XS(){XS=E,cbt=new Rt}function zS(){zS=E,ubt=new Kt}function VS(){VS=E,Cbt=new be}function WS(){WS=E,Pbt=new sj}function QS(){QS=E,Bwt=new Je}function JS(){JS=E,idt=new Nr}function YS(){YS=E,Fdt=new rc}function ZS(){ZS=E,VTt=new Gu}function nP(){nP=E,zAt=new rP}function tP(){tP=E,QAt=new GR}function eP(){eP=E,GLt=new pJ}function iP(){San(),this.c=new rT}function rP(){_E.call(this,R6n,0)}function cP(n,t,e){r2(n.d,t.f,e)}function aP(n,t,e,i){xyn(n,i,t,e)}function oP(n,t,e,i){QRn(i,n,t,e)}function uP(n,t,e,i){jQn(i,n,t,e)}function sP(n,t){Akn(n.c.c,t.b,t)}function hP(n,t){Akn(n.c.b,t.c,t)}function fP(n){return n.e.b+n.f.b}function lP(n){return n.e.a+n.f.a}function bP(n){return n.b?n.b:n.a}function wP(n){return(n.c+n.a)/2}function dP(n,t){return Fjn(n.a,t)}function gP(n,t){return n.a=t.g,n}function pP(){pP=E,k_t=new ey}function mP(){mP=E,b_t=new Vk}function vP(){vP=E,NKt=new qu}function kP(){kP=E,WKt=new os}function yP(){yP=E,r_t=new zk}function MP(){MP=E,l_t=new Zk}function TP(){TP=E,_Ft=new Ym}function jP(){jP=E,tBt=new G$}function EP(){EP=E,eBt=new q$}function SP(){SP=E,EBt=new Ah}function PP(){PP=E,PBt=new Lh}function CP(){CP=E,XHt=new xf}function IP(){IP=E,gBt=new Zm}function OP(n){return uG(n,44).ld()}function AP(n){return n.b<n.d.gc()}function LP(n,t){return t.split(n)}function NP(n,t){return dwn(n,t)>0}function $P(n,t){return dwn(n,t)<0}function DP(n,t){return RX(n.a,t)}function xP(n,t){U0.call(this,n,t)}function RP(n){nQ(),K_.call(this,n)}function KP(n,t){zX(n,n.length,t)}function FP(n,t){dW(n,n.length,t)}function _P(n,t){return n.a.get(t)}function BP(n,t){return PV(n.e,t)}function HP(n){return tJ(n),!1}function UP(n){this.a=uG(WW(n),229)}function GP(n){h3.call(this,n,21)}function qP(n,t){_E.call(this,n,t)}function XP(n,t){_E.call(this,n,t)}function zP(n,t){this.b=n,this.a=t}function VP(n,t){this.d=n,this.e=t}function WP(n,t){this.a=n,this.b=t}function QP(n,t){this.a=n,this.b=t}function JP(n,t){this.a=n,this.b=t}function YP(n,t){this.a=n,this.b=t}function ZP(n,t){this.a=n,this.b=t}function nC(n,t){this.b=n,this.a=t}function tC(n,t){this.b=n,this.a=t}function eC(n,t){_E.call(this,n,t)}function iC(n,t){_E.call(this,n,t)}function rC(n,t){_E.call(this,n,t)}function cC(n,t){_E.call(this,n,t)}function aC(n,t){_E.call(this,n,t)}function oC(n,t){_E.call(this,n,t)}function uC(n,t){_E.call(this,n,t)}function sC(n,t){this.b=n,this.a=t}function hC(n,t){_E.call(this,n,t)}function fC(n,t){this.b=n,this.a=t}function lC(n,t){_E.call(this,n,t)}function bC(n,t){this.b=n,this.a=t}function wC(n,t){_E.call(this,n,t)}function dC(n,t){_E.call(this,n,t)}function gC(n,t){_E.call(this,n,t)}function pC(n,t,e){n.splice(t,0,e)}function mC(n,t,e){n.Mb(e)&&t.Cd(e)}function vC(n,t,e){t.Pe(n.a.Ye(e))}function kC(n,t,e){t.Dd(n.a.Ze(e))}function yC(n,t,e){t.Cd(n.a.Kb(e))}function MC(n,t){return $x(n.c,t)}function TC(n,t){return $x(n.e,t)}function jC(n,t){_E.call(this,n,t)}function EC(n,t){_E.call(this,n,t)}function SC(n,t){_E.call(this,n,t)}function PC(n,t){_E.call(this,n,t)}function CC(n,t){_E.call(this,n,t)}function IC(n,t){_E.call(this,n,t)}function OC(n,t){this.a=n,this.b=t}function AC(n,t){this.a=n,this.b=t}function LC(n,t){this.a=n,this.b=t}function NC(n,t){this.a=n,this.b=t}function $C(n,t){this.a=n,this.b=t}function DC(n,t){this.a=n,this.b=t}function xC(n,t){this.b=n,this.a=t}function RC(n,t){this.b=n,this.a=t}function KC(n,t){this.b=n,this.a=t}function FC(n,t){this.c=n,this.d=t}function _C(n,t){this.e=n,this.d=t}function BC(n,t){this.a=n,this.b=t}function HC(n,t){this.a=n,this.b=t}function UC(n,t){this.a=n,this.b=t}function GC(n,t){this.b=n,this.a=t}function qC(n,t){this.b=t,this.c=n}function XC(n,t){_E.call(this,n,t)}function zC(n,t){_E.call(this,n,t)}function VC(n,t){_E.call(this,n,t)}function WC(n,t){_E.call(this,n,t)}function QC(n,t){_E.call(this,n,t)}function JC(n,t){_E.call(this,n,t)}function YC(n,t){_E.call(this,n,t)}function ZC(n,t){_E.call(this,n,t)}function nI(n,t){_E.call(this,n,t)}function tI(n,t){_E.call(this,n,t)}function eI(n,t){_E.call(this,n,t)}function iI(n,t){_E.call(this,n,t)}function rI(n,t){_E.call(this,n,t)}function cI(n,t){_E.call(this,n,t)}function aI(n,t){_E.call(this,n,t)}function oI(n,t){_E.call(this,n,t)}function uI(n,t){_E.call(this,n,t)}function sI(n,t){_E.call(this,n,t)}function hI(n,t){_E.call(this,n,t)}function fI(n,t){_E.call(this,n,t)}function lI(n,t){_E.call(this,n,t)}function bI(n,t){_E.call(this,n,t)}function wI(n,t){_E.call(this,n,t)}function dI(n,t){_E.call(this,n,t)}function gI(n,t){_E.call(this,n,t)}function pI(n,t){_E.call(this,n,t)}function mI(n,t){_E.call(this,n,t)}function vI(n,t){_E.call(this,n,t)}function kI(n,t){_E.call(this,n,t)}function yI(n,t){_E.call(this,n,t)}function MI(n,t){_E.call(this,n,t)}function TI(n,t){_E.call(this,n,t)}function jI(n,t){_E.call(this,n,t)}function EI(n,t){this.b=n,this.a=t}function SI(n,t){_E.call(this,n,t)}function PI(n,t){this.a=n,this.b=t}function CI(n,t){this.a=n,this.b=t}function II(n,t){this.a=n,this.b=t}function OI(n,t){_E.call(this,n,t)}function AI(n,t){_E.call(this,n,t)}function LI(n,t){this.a=n,this.b=t}function NI(n,t){return PU(),t!=n}function $I(n){return MK(n.a),n.b}function DI(n){return K$n(n,n.c),n}function xI(){return dj(),new rut}function RI(){UB(),this.a=new xF}function KI(){oFn(),this.a=new ek}function FI(){e2(),this.b=new ek}function _I(n,t){this.b=n,this.d=t}function BI(n,t){this.a=n,this.b=t}function HI(n,t){this.a=n,this.b=t}function UI(n,t){this.a=n,this.b=t}function GI(n,t){this.b=n,this.a=t}function qI(n,t){_E.call(this,n,t)}function XI(n,t){_E.call(this,n,t)}function zI(n,t){_E.call(this,n,t)}function VI(n,t){_E.call(this,n,t)}function WI(n,t){_E.call(this,n,t)}function QI(n,t){_E.call(this,n,t)}function JI(n,t){_E.call(this,n,t)}function YI(n,t){_E.call(this,n,t)}function ZI(n,t){_E.call(this,n,t)}function nO(n,t){_E.call(this,n,t)}function tO(n,t){_E.call(this,n,t)}function eO(n,t){_E.call(this,n,t)}function iO(n,t){_E.call(this,n,t)}function rO(n,t){_E.call(this,n,t)}function cO(n,t){_E.call(this,n,t)}function aO(n,t){_E.call(this,n,t)}function oO(n,t){_E.call(this,n,t)}function uO(n,t){_E.call(this,n,t)}function sO(n,t){_E.call(this,n,t)}function hO(n,t){_E.call(this,n,t)}function fO(n,t){_E.call(this,n,t)}function lO(n,t){_E.call(this,n,t)}function bO(n,t){_E.call(this,n,t)}function wO(n,t){_E.call(this,n,t)}function dO(n,t){this.b=n,this.a=t}function gO(n,t){this.b=n,this.a=t}function pO(n,t){this.b=n,this.a=t}function mO(n,t){this.b=n,this.a=t}function vO(n,t){this.a=n,this.b=t}function kO(n,t){this.a=n,this.b=t}function yO(n,t){this.a=n,this.b=t}function MO(n,t){this.a=n,this.b=t}function TO(n,t){_E.call(this,n,t)}function jO(n,t){_E.call(this,n,t)}function EO(n,t){_E.call(this,n,t)}function SO(n,t){_E.call(this,n,t)}function PO(n,t){_E.call(this,n,t)}function CO(n,t){_E.call(this,n,t)}function IO(n,t){_E.call(this,n,t)}function OO(n,t){_E.call(this,n,t)}function AO(n,t){_E.call(this,n,t)}function LO(n,t){_E.call(this,n,t)}function NO(n,t){_E.call(this,n,t)}function $O(n,t){_E.call(this,n,t)}function DO(n,t){_E.call(this,n,t)}function xO(n,t){_E.call(this,n,t)}function RO(n,t){_E.call(this,n,t)}function KO(n,t){_E.call(this,n,t)}function FO(n,t){_E.call(this,n,t)}function _O(n,t){_E.call(this,n,t)}function BO(n,t){_E.call(this,n,t)}function HO(n,t){_E.call(this,n,t)}function UO(n,t){this.a=n,this.b=t}function GO(n,t){this.a=n,this.b=t}function qO(n,t){this.a=n,this.b=t}function XO(n,t){this.a=n,this.b=t}function zO(n,t){this.a=n,this.b=t}function VO(n,t){this.a=n,this.b=t}function WO(n,t){this.a=n,this.b=t}function QO(n,t){this.a=n,this.b=t}function JO(n,t){this.a=n,this.b=t}function YO(n,t){this.a=n,this.b=t}function ZO(n,t){this.a=n,this.b=t}function nA(n,t){this.a=n,this.b=t}function tA(n,t){this.a=n,this.b=t}function eA(n,t){this.b=n,this.a=t}function iA(n,t){this.b=n,this.a=t}function rA(n,t){this.b=n,this.a=t}function cA(n,t){this.b=n,this.a=t}function aA(n,t){this.a=n,this.b=t}function oA(n,t){this.a=n,this.b=t}function uA(n,t){_E.call(this,n,t)}function sA(n,t){this.a=n,this.b=t}function hA(n,t){this.a=n,this.b=t}function fA(n,t){_E.call(this,n,t)}function lA(n,t){this.f=n,this.c=t}function bA(n,t){return $x(n.g,t)}function wA(n,t){return $x(t.b,n)}function dA(n,t){return ymn(n.a,t)}function gA(n,t){return-n.b.af(t)}function pA(n,t){n&&vJ(AFt,n,t)}function mA(n,t){n.i=null,lon(n,t)}function vA(n,t,e){MSn(t,jAn(n,e))}function kA(n,t,e){MSn(t,jAn(n,e))}function yA(n,t){BRn(n.a,uG(t,58))}function MA(n,t){aen(n.a,uG(t,12))}function TA(n,t){this.a=n,this.b=t}function jA(n,t){this.a=n,this.b=t}function EA(n,t){this.a=n,this.b=t}function SA(n,t){this.a=n,this.b=t}function PA(n,t){this.a=n,this.b=t}function CA(n,t){this.d=n,this.b=t}function IA(n,t){this.e=n,this.a=t}function OA(n,t){this.b=n,this.c=t}function AA(n,t){this.i=n,this.g=t}function LA(n,t){this.d=n,this.e=t}function NA(n,t){Iin(new DD(n),t)}function $A(n){return kmn(n.c,n.b)}function DA(n){return n?n.md():null}function xA(n){return null==n?null:n}function RA(n){return typeof n===pZn}function KA(n){return typeof n===dZn}function FA(n){return typeof n===gZn}function _A(n,t){return 0==dwn(n,t)}function BA(n,t){return dwn(n,t)>=0}function HA(n,t){return 0!=dwn(n,t)}function UA(n,t){return Zun(n.Kc(),t)}function GA(n,t){return n.Rd().Xb(t)}function qA(n){return bpn(n),n.d.gc()}function XA(n){return Fq(null==n),n}function zA(n,t){return n.a+=""+t,n}function VA(n,t){return n.a+=""+t,n}function WA(n,t){return n.a+=""+t,n}function QA(n,t){return n.a+=""+t,n}function JA(n,t){return n.a+=""+t,n}function YA(n,t){return n.a+=""+t,n}function ZA(n){return""+(tJ(n),n)}function nL(n){$V(this),xun(this,n)}function tL(){J0(),ez.call(this)}function eL(n,t){Bz.call(this,n,t)}function iL(n,t){Bz.call(this,n,t)}function rL(n,t){Bz.call(this,n,t)}function cL(n,t){s8(n,t,n.c.b,n.c)}function aL(n,t){s8(n,t,n.a,n.a.a)}function oL(n){return u3(n,0),null}function uL(){this.b=0,this.a=!1}function sL(){this.b=0,this.a=!1}function hL(){this.b=new sS(orn(12))}function fL(){fL=E,fht=Abn(Nkn())}function lL(){lL=E,_wt=Abn(bKn())}function bL(){bL=E,bPt=Abn(usn())}function wL(){wL=E,Iv(),Bat=new Ym}function dL(n){return n.a=0,n.b=0,n}function gL(n,t){return n.a=t.g+1,n}function pL(n,t){w_.call(this,n,t)}function mL(n,t){uF.call(this,n,t)}function vL(n,t){AA.call(this,n,t)}function kL(n,t){zx.call(this,n,t)}function yL(n,t){Zsn.call(this,n,t)}function ML(n,t){TP(),vJ(_Ft,n,t)}function TL(n,t){n.q.setTime(W4(t))}function jL(n){e.clearTimeout(n)}function EL(n){return WW(n),new iN(n)}function SL(n,t){return xA(n)===xA(t)}function PL(n,t){return n.a.a.a.cc(t)}function CL(n,t){return r1(n.a,0,t)}function IL(n){return jW(uG(n,74))}function OL(n){return t0((tJ(n),n))}function AL(n){return t0((tJ(n),n))}function LL(n){return p$(n.l,n.m,n.h)}function NL(n,t){return d$(n.a,t.a)}function $L(n,t){return rW(n.a,t.a)}function DL(n,t){return ugn(n.a,t.a)}function xL(n,t){return n.indexOf(t)}function RL(n,t){return 2==n.j[t.p]}function KL(n,t){return n==t?0:n?1:-1}function FL(n){return n<10?"0"+n:""+n}function _L(n){return typeof n===gZn}function BL(n){return n==Flt||n==Hlt}function HL(n){return n==Flt||n==_lt}function UL(n,t){return d$(n.g,t.g)}function GL(n){return Ten(n.b.b,n,0)}function qL(){lX.call(this,0,0,0,0)}function XL(){td.call(this,new u8)}function zL(n,t){Ntn(n,0,n.length,t)}function VL(n,t){return kD(n.a,t),t}function WL(n,t){return GB(),t.a+=n}function QL(n,t){return GB(),t.a+=n}function JL(n,t){return GB(),t.c+=n}function YL(n,t){return kD(n.c,t),n}function ZL(n,t){return gsn(n.a,t),n}function nN(n){this.a=xI(),this.b=n}function tN(n){this.a=xI(),this.b=n}function eN(n){this.a=n.a,this.b=n.b}function iN(n){this.a=n,Ff.call(this)}function rN(n){this.a=n,Ff.call(this)}function cN(){gY.call(this,0,0,0,0)}function aN(n){return gsn(new wJ,n)}function oN(n){return xJ(uG(n,123))}function uN(n){return n.vh()&&n.wh()}function sN(n){return n!=uRt&&n!=sRt}function hN(n){return n==JDt||n==YDt}function fN(n){return n==nxt||n==QDt}function lN(n){return n==wjt||n==bjt}function bN(n,t){return d$(n.g,t.g)}function wN(n,t){return new Zsn(t,n)}function dN(n,t){return new Zsn(t,n)}function gN(n){return nG(n.b.Kc(),n.a)}function pN(n,t){sbn(n,t),Ocn(n,n.D)}function mN(n,t,e){Scn(n,t),pcn(n,e)}function vN(n,t,e){kcn(n,t),vcn(n,e)}function kN(n,t,e){ycn(n,t),Mcn(n,e)}function yN(n,t,e){mcn(n,t),jcn(n,e)}function MN(n,t,e){Tcn(n,t),Ecn(n,e)}function TN(n,t,e){AK.call(this,n,t,e)}function jN(n){lA.call(this,n,!0)}function EN(){qP.call(this,"Tail",3)}function SN(){qP.call(this,"Head",1)}function PN(n){cHn(),Bun.call(this,n)}function CN(n){lX.call(this,n,n,n,n)}function IN(n){n.c=Inn(dat,EZn,1,0,5,1)}function ON(n){return n.b&&sXn(n),n.a}function AN(n){return n.b&&sXn(n),n.c}function LN(n,t){Nut||(n.b=t)}function NN(n,t){return n[n.length]=t}function $N(n,t){return n[n.length]=t}function DN(n,t){return Ern(t,h0(n))}function xN(n,t){return Ern(t,h0(n))}function RN(n,t){return kan(UW(n.d),t)}function KN(n,t){return kan(UW(n.g),t)}function FN(n,t){return kan(UW(n.j),t)}function _N(n,t){uF.call(this,n.b,t)}function BN(n,t){ttn(z5(n.a),v2(t))}function HN(n,t){ttn(Aen(n.a),k2(t))}function UN(n,t,e){kN(e,e.i+n,e.j+t)}function GN(n,t,e){uQ(n.c[t.g],t.g,e)}function qN(n,t,e){uG(n.c,71).Gi(t,e)}function XN(n,t,e){return uQ(n,t,e),e}function zN(n){Prn(n.Sf(),new Od(n))}function VN(n){return null!=n?Hon(n):0}function WN(n){return null==n?0:Hon(n)}function QN(n){QYn(),Qm.call(this,n)}function JN(n){this.a=n,WU.call(this,n)}function YN(){YN=E,e.Math.log(2)}function ZN(){ZN=E,kP(),rBt=WKt}function n$(){n$=E,vSt=new rpn(kxt)}function t$(){t$=E,new e$,new Zm}function e$(){new Ym,new Ym,new Ym}function i$(){throw hv(new TM(hat))}function r$(){throw hv(new TM(hat))}function c$(){throw hv(new TM(fat))}function a$(){throw hv(new TM(fat))}function o$(n){this.a=n,VE.call(this,n)}function u$(n){this.a=n,VE.call(this,n)}function s$(n,t){ZW(),this.a=n,this.b=t}function h$(n,t){WW(t),uY(n).Jc(new b)}function f$(n,t){UX(n.c,n.c.length,t)}function l$(n){return n.a<n.c.c.length}function b$(n){return n.a<n.c.a.length}function w$(n,t){return n.a?n.b:t.We()}function d$(n,t){return n<t?-1:n>t?1:0}function g$(n,t){return dwn(n,t)>0?n:t}function p$(n,t,e){return{l:n,m:t,h:e}}function m$(n,t){null!=n.a&&MA(t,n.a)}function v$(n){c2(n,null),u2(n,null)}function k$(n,t,e){return vJ(n.g,e,t)}function y$(n,t,e){return avn(t,e,n.c)}function M$(n,t,e){return vJ(n.k,e,t)}function T$(n,t,e){return gWn(n,t,e),e}function j$(n,t){return n2(),t.n.b+=n}function E$(n){HZ.call(this),this.b=n}function S$(n){LF.call(this),this.a=n}function P$(){qP.call(this,"Range",2)}function C$(n){this.b=n,this.a=new Zm}function I$(n){this.b=new tt,this.a=n}function O$(n){n.a=new R,n.c=new R}function A$(n){n.a=new Ym,n.d=new Ym}function L$(n){s2(n,null),h2(n,null)}function N$(n,t){return kWn(n.a,t,null)}function $$(n,t){return vJ(n.a,t.a,t)}function D$(n){return new MO(n.a,n.b)}function x$(n){return new MO(n.c,n.d)}function R$(n){return new MO(n.c,n.d)}function K$(n,t){return rVn(n.c,n.b,t)}function F$(n,t){return null!=n&&Eyn(n,t)}function _$(n,t){return-1!=Yhn(n.Kc(),t)}function B$(n){return n.Ob()?n.Pb():null}function H$(n){this.b=(hZ(),new Vw(n))}function U$(n){this.a=n,Ym.call(this)}function G$(){zx.call(this,null,null)}function q$(){Vx.call(this,null,null)}function X$(){_E.call(this,"INSTANCE",0)}function z$(){FEn(),this.a=new mKn(Llt)}function V$(n){return mvn(n,0,n.length)}function W$(n,t){return new ex(n.Kc(),t)}function Q$(n,t){return null!=n.a.Bc(t)}function J$(n,t){Czn(n),n.Gc(uG(t,15))}function Y$(n,t,e){n.c.bd(t,uG(e,136))}function Z$(n,t,e){n.c.Ui(t,uG(e,136))}function nD(n,t){n.c&&(cq(t),B1(t))}function tD(n,t){n.q.setHours(t),Iqn(n,t)}function eD(n,t){KR(t,n.a.a.a,n.a.a.b)}function iD(n,t,e,i){uQ(n.a[t.g],e.g,i)}function rD(n,t,e){return n.a[t.g][e.g]}function cD(n,t){return n.e[t.c.p][t.p]}function aD(n,t){return n.c[t.c.p][t.p]}function oD(n,t){return n.a[t.c.p][t.p]}function uD(n,t){return n.j[t.p]=oRn(t)}function sD(n,t){return null!=n.a.Bc(t)}function hD(n,t){return uM(pK(t.a))<=n}function fD(n,t){return uM(pK(t.a))>=n}function lD(n,t){return r7(n.f,t.Pg())}function bD(n,t){return n.a*t.a+n.b*t.b}function wD(n,t){return n.a<Q_(t)?-1:1}function dD(n,t){return r7(n.b,t.Pg())}function gD(n,t,e){return e?0!=t:t!=n-1}function pD(n,t,e){n.a=1502^t,n.b=e^X0n}function mD(n,t,e){return n.a=t,n.b=e,n}function vD(n,t){return n.a*=t,n.b*=t,n}function kD(n,t){return mv(n.c,t),!0}function yD(n,t,e){return uQ(n.g,t,e),e}function MD(n,t,e){FG.call(this,n,t,e)}function TD(n,t,e){MD.call(this,n,t,e)}function jD(n,t,e){_G.call(this,n,t,e)}function ED(n,t,e){_G.call(this,n,t,e)}function SD(n,t,e){jD.call(this,n,t,e)}function PD(n,t,e){MD.call(this,n,t,e)}function CD(n,t,e){TD.call(this,n,t,e)}function ID(n,t,e){FG.call(this,n,t,e)}function OD(n,t,e){FG.call(this,n,t,e)}function AD(n,t,e){ID.call(this,n,t,e)}function LD(n){n.j=Inn(jot,zZn,319,0,0,1)}function ND(){this.a=Inn(dat,EZn,1,8,5,1)}function $D(){this.Bb|=256,this.Bb|=512}function DD(n){this.i=n,this.f=this.i.j}function xD(n){this.c=n,this.a=this.c.a}function RD(n,t){this.a=n,VE.call(this,t)}function KD(n,t){return Hgn(n,new WM,t).a}function FD(n){if(!n)throw hv(new Dv)}function _D(n){if(!n)throw hv(new xv)}function BD(){(BD=E)(),dut=new _}function HD(){HD=E,SP(),SBt=new _l}function UD(){UD=E,sut=new Xy(null)}function GD(n){ZZ(n,Uet),ARn(n,zQn(n))}function qD(n){n.a=uG(Lsn(n.b.a,4),129)}function XD(n){n.a=uG(Lsn(n.b.a,4),129)}function zD(n){n.b.Qb(),--n.d.f.d,DX(n.d)}function VD(n){this.a=n,fb.call(this,n.d)}function WD(n,t){this.a=n,iT.call(this,t)}function QD(n,t){this.a=n,iT.call(this,t)}function JD(n,t){this.a=n,iT.call(this,t)}function YD(n,t){this.a=t,iT.call(this,n)}function ZD(n,t){this.a=t,c8.call(this,n)}function nx(n,t){this.a=n,c8.call(this,t)}function tx(n,t){this.a=t,WE.call(this,n)}function ex(n,t){this.a=t,WE.call(this,n)}function ix(n,t){return WW(t),new tx(n,t)}function rx(n,t){return new EAn(n.a,n.b,t)}function cx(n,t,e){return n.indexOf(t,e)}function ax(n,t){return n.lastIndexOf(t)}function ox(n){return null==n?IZn:cpn(n)}function ux(n){return null==n?null:n.name}function sx(n){return n.l+n.m*w0n+n.h*d0n}function hx(n){return Jj(n.a)?y2(n):null}function fx(n){$w.call(this,(tJ(n),n))}function lx(n){$w.call(this,(tJ(n),n))}function bx(n){ib.call(this,uG(WW(n),34))}function wx(n){ib.call(this,uG(WW(n),34))}function dx(n){td.call(this,new Bnn(n))}function gx(n){qw.call(this,n),this.a=n}function px(n){Gw.call(this,n),this.a=n}function mx(n){nT.call(this,n),this.a=n}function vx(){LD(this),KY(this),this.je()}function kx(n){this.a=n,Uw.call(this,n)}function yx(n){return MK(null!=n.a),n.a}function Mx(n,t){return kD(t.a,n.a),n.a}function Tx(n,t){return kD(t.b,n.a),n.a}function jx(n,t){return kD(t.a,n.a),n.a}function Ex(n,t,e){return psn(n,t,t,e),n}function Sx(n,t){return++n.b,kD(n.a,t)}function Px(n,t){return++n.b,men(n.a,t)}function Cx(n,t){return ugn(n.c.d,t.c.d)}function Ix(n,t){return ugn(n.c.c,t.c.c)}function Ox(n,t){return ugn(n.n.a,t.n.a)}function Ax(n,t){return uG(Y9(n.b,t),15)}function Lx(n,t){return n.n.b=(tJ(t),t)}function Nx(n,t){return n.n.b=(tJ(t),t)}function $x(n,t){return!!t&&n.b[t.g]==t}function Dx(n){return l$(n.a)||l$(n.b)}function xx(n){return n.$H||(n.$H=++_ut)}function Rx(n){return null!=n.a?n.a:null}function Kx(n,t){return ugn(n.e.b,t.e.b)}function Fx(n,t){return ugn(n.e.a,t.e.a)}function _x(n,t,e){return m5(n,t,e,n.b)}function Bx(n,t,e){return m5(n,t,e,n.c)}function Hx(n){return GB(),!!n&&!n.dc()}function Ux(){JS(),this.b=new Eg(this)}function Gx(){Gx=E,bht=new uF(i3n,0)}function qx(){qx=E,tot=!1,eot=!0}function Xx(n){var t;t=n.a,n.a=n.b,n.b=t}function zx(n,t){jP(),this.a=n,this.b=t}function Vx(n,t){EP(),this.b=n,this.c=t}function Wx(n,t){rz(),this.f=t,this.d=n}function Qx(n,t){e7(t,n),this.d=n,this.c=t}function Jx(n,t){Yvn.call(this,n,t,null)}function Yx(n,t,e,i){qz.call(this,n,t,e,i)}function Zx(n){this.d=n,DD.call(this,n)}function nR(n){this.c=n,DD.call(this,n)}function tR(n){this.c=n,Zx.call(this,n)}function eR(n){return new n8(3,n)}function iR(n){return man(n,g1n),new R7(n)}function rR(n){return EZ(),parseInt(n)||-1}function cR(n){return Hy(),Fcn((d0(),Aat),n)}function aR(n,t,e){return cx(n,$Cn(t),e)}function oR(n,t){return new $_(n,n.gc(),t)}function uR(n,t){return Tz(n.c).Md().Xb(t)}function sR(n,t,e){n.fd(t).Rb(e)}function hR(n,t,e){uG(xen(n,t),21).Fc(e)}function fR(n,t,e){Vdn(n.a,e),bMn(n.a,t)}function lR(n){F$(n,158)&&uG(n,158).pi()}function bR(n){bG.call(this,n,null,null)}function wR(n){dS(),this.b=n,this.a=!0}function dR(n){gS(),this.b=n,this.a=!0}function gR(n){return MK(0!=n.b),n.a.a.c}function pR(n){return MK(0!=n.b),n.c.b.c}function mR(n,t){return psn(n,t,t+1,""),n}function vR(n,t){return!!n.q&&PV(n.q,t)}function kR(n){return n.b=uG(_Y(n.a),44)}function yR(n){return null!=n.f?n.f:""+n.g}function MR(n){return null!=n.f?n.f:""+n.g}function TR(n,t){return n>0?t/(n*n):100*t}function jR(n,t){return n>0?t*t/n:t*t*100}function ER(n,t){return uG(ain(n.a,t),34)}function SR(n,t){return jIn(),UNn(n,t.e,t)}function PR(n,t,e){return ZS(),e.Mg(n,t)}function CR(n){return tcn(),n.e.a+n.f.a/2}function IR(n,t,e){return tcn(),e.e.a-n*t}function OR(n){return tcn(),n.e.b+n.f.b/2}function AR(n,t,e){return tcn(),e.e.b-n*t}function LR(n){n.d=new bR(n),n.e=new Ym}function NR(){this.a=new K1,this.b=new K1}function $R(n){this.c=n,this.a=1,this.b=1}function DR(n){aYn(),dv(this),this.Ff(n)}function xR(n,t,e){Stn(),n.pf(t)&&e.Cd(n)}function RR(n,t,e){return kD(t,xpn(n,e))}function KR(n,t,e){return n.a+=t,n.b+=e,n}function FR(n,t,e){return n.a*=t,n.b*=e,n}function _R(n,t){return n.a=t.a,n.b=t.b,n}function BR(n){return n.a=-n.a,n.b=-n.b,n}function HR(n,t,e){return n.a-=t,n.b-=e,n}function UR(n){lS.call(this),dan(this,n)}function GR(){_E.call(this,"GROW_TREE",0)}function qR(){_E.call(this,"POLYOMINO",0)}function XR(n,t,e){ltn.call(this,n,t,e,2)}function zR(n,t,e){$dn(z5(n.a),t,v2(e))}function VR(n,t){jP(),zx.call(this,n,t)}function WR(n,t){EP(),Vx.call(this,n,t)}function QR(n,t){EP(),WR.call(this,n,t)}function JR(n,t){EP(),Vx.call(this,n,t)}function YR(n,t){return n.c.Fc(uG(t,136))}function ZR(n,t,e){$dn(Aen(n.a),t,k2(e))}function nK(n){this.c=n,ycn(n,0),Mcn(n,0)}function tK(n,t){ZN(),OX.call(this,n,t)}function eK(n,t){ZN(),tK.call(this,n,t)}function iK(n,t){ZN(),tK.call(this,n,t)}function rK(n,t){ZN(),OX.call(this,n,t)}function cK(n,t){ZN(),iK.call(this,n,t)}function aK(n,t){ZN(),rK.call(this,n,t)}function oK(n,t){ZN(),OX.call(this,n,t)}function uK(n,t,e){return t.zl(n.e,n.c,e)}function sK(n,t,e){return t.Al(n.e,n.c,e)}function hK(n,t,e){return JXn(Len(n,t),e)}function fK(n,t){return mwn(n.e,uG(t,54))}function lK(n){return null==n?null:AQn(n)}function bK(n){return null==n?null:mOn(n)}function wK(n){return null==n?null:cpn(n)}function dK(n){return null==n?null:cpn(n)}function gK(n){return Fq(null==n||KA(n)),n}function pK(n){return Fq(null==n||FA(n)),n}function mK(n){return Fq(null==n||RA(n)),n}function vK(n){null==n.o&&axn(n)}function kK(n){if(!n)throw hv(new Dv)}function yK(n){if(!n)throw hv(new Nv)}function MK(n){if(!n)throw hv(new Bv)}function TK(n){if(!n)throw hv(new xv)}function jK(n){if(!n)throw hv(new Fv)}function EK(){EK=E,KFt=new Gk,new qk}function SK(){SK=E,zCt=new Cm("root")}function PK(){Kan.call(this),this.Bb|=P0n}function CK(n,t){this.d=n,Cw(this),this.b=t}function IK(n,t){Fnn.call(this,n),this.a=t}function OK(n,t){Fnn.call(this,n),this.a=t}function AK(n,t,e){A7.call(this,n,t,e,null)}function LK(n,t,e){A7.call(this,n,t,e,null)}function NK(n,t){this.c=n,OE.call(this,n,t)}function $K(n,t){this.a=n,NK.call(this,n,t)}function DK(n){this.q=new e.Date(W4(n))}function xK(n){return n>8?0:n+1}function RK(n,t){Nut||kD(n.a,t)}function KK(n,t){return WS(),jsn(t.d.i,n)}function FK(n,t){return Pun(),new oHn(t,n)}function _K(n,t,e){return n.Ne(t,e)<=0?e:t}function BK(n,t,e){return n.Ne(t,e)<=0?t:e}function HK(n,t){return uG(ain(n.b,t),143)}function UK(n,t){return uG(ain(n.c,t),233)}function GK(n){return uG(zq(n.a,n.b),293)}function qK(n){return new MO(n.c,n.d+n.a)}function XK(n){return tJ(n),n?1231:1237}function zK(n){return n2(),lN(uG(n,203))}function VK(){VK=E,lht=ggn((Qmn(),JRt))}function WK(n,t){t.a?W$n(n,t):sD(n.a,t.b)}function QK(n,t,e){++n.j,n.tj(),Ann(n,t,e)}function JK(n,t,e){++n.j,n.qj(t,n.Zi(t,e))}function YK(n,t,e){n.fd(t).Rb(e)}function ZK(n,t,e){return e=DUn(n,t,6,e)}function nF(n,t,e){return e=DUn(n,t,3,e)}function tF(n,t,e){return e=DUn(n,t,9,e)}function eF(n,t){return ZZ(t,W2n),n.f=t,n}function iF(n,t){return(t&vZn)%n.d.length}function rF(n,t,e){return fXn(n.c,n.b,t,e)}function cF(n,t){this.c=n,Drn.call(this,t)}function aF(n,t){this.a=n,xm.call(this,t)}function oF(n,t){this.a=n,xm.call(this,t)}function uF(n,t){Cm.call(this,n),this.a=t}function sF(n,t){Bm.call(this,n),this.a=t}function hF(n,t){Bm.call(this,n),this.a=t}function fF(n){smn.call(this,0,0),this.f=n}function lF(n,t,e){return n.a+=mvn(t,0,e),n}function bF(n){return!n.a&&(n.a=new M),n.a}function wF(n,t){var e;return e=n.e,n.e=t,e}function dF(n,t){var e;return e=t,!!n.Fe(e)}function gF(n,t){return qx(),n==t?0:n?1:-1}function pF(n,t){n.a.bd(n.b,t),++n.b,n.c=-1}function mF(n){n.b?mF(n.b):n.f.c.zc(n.e,n.d)}function vF(n){$V(n.e),n.d.b=n.d,n.d.a=n.d}function kF(n,t,e){vS(),Ob(n,t.Ve(n.a,e))}function yF(n,t,e){return UV(n,uG(t,22),e)}function MF(n,t){return aT(new Array(t),n)}function TF(n){return pz(Dz(n,32))^pz(n)}function jF(n){return String.fromCharCode(n)}function EF(n){return null==n?null:n.message}function SF(n,t,e){return n.apply(t,e)}function PF(n,t){n[U0n].call(n,t)}function CF(n,t){n[U0n].call(n,t)}function IF(n,t){return WS(),!jsn(t.d.i,n)}function OF(n,t,e,i){lX.call(this,n,t,e,i)}function AF(){HF.call(this),this.a=new sj}function LF(){this.n=new sj,this.o=new sj}function NF(){this.b=new sj,this.c=new Zm}function $F(){this.a=new Zm,this.b=new Zm}function DF(){this.a=new lt,this.b=new qv}function xF(){this.b=new u8,this.a=new u8}function RF(){this.b=new ek,this.a=new ek}function KF(){this.b=new Ym,this.a=new Ym}function FF(){this.b=new Gj,this.a=new Ma}function _F(){this.a=new hl,this.b=new oc}function BF(){this.a=new Zm,this.d=new Zm}function HF(){this.n=new Dk,this.i=new cN}function UF(n){this.a=(man(n,g1n),new R7(n))}function GF(n){this.a=(man(n,g1n),new R7(n))}function qF(n){return n<100?null:new cj(n)}function XF(n,t){return n.n.a=(tJ(t),t+10)}function zF(n,t){return n.n.a=(tJ(t),t+10)}function VF(n,t){return t==n||sSn(mRn(t),n)}function WF(n,t){return null==vJ(n.a,t,"")}function QF(n,t){return t.qi(n.a)}function JF(n,t){return n.a+=t.a,n.b+=t.b,n}function YF(n,t){return n.a-=t.a,n.b-=t.b,n}function ZF(n){return Xv(n.j.c,0),n.a=-1,n}function n_(n,t,e){return e=DUn(n,t,11,e)}function t_(n,t,e){null!=e&&Xan(t,gTn(n,e))}function e_(n,t,e){null!=e&&zan(t,gTn(n,e))}function i_(n,t,e,i){fV.call(this,n,t,e,i)}function r_(n,t,e,i){fV.call(this,n,t,e,i)}function c_(n,t,e,i){r_.call(this,n,t,e,i)}function a_(n,t,e,i){wV.call(this,n,t,e,i)}function o_(n,t,e,i){wV.call(this,n,t,e,i)}function u_(n,t,e,i){wV.call(this,n,t,e,i)}function s_(n,t,e,i){o_.call(this,n,t,e,i)}function h_(n,t,e,i){o_.call(this,n,t,e,i)}function f_(n,t,e,i){u_.call(this,n,t,e,i)}function l_(n,t,e,i){h_.call(this,n,t,e,i)}function b_(n,t,e,i){kV.call(this,n,t,e,i)}function w_(n,t){dM.call(this,Hit+n+Vet+t)}function d_(n,t){return n.jk().wi().ri(n,t)}function g_(n,t){return n.jk().wi().ti(n,t)}function p_(n,t){return tJ(n),xA(n)===xA(t)}function m_(n,t){return tJ(n),xA(n)===xA(t)}function v_(n,t){return n.b.Bd(new QP(n,t))}function k_(n,t){return n.b.Bd(new JP(n,t))}function y_(n,t){return n.b.Bd(new YP(n,t))}function M_(n,t){return n.e=uG(n.d.Kb(t),159)}function T_(n,t,e){return n.lastIndexOf(t,e)}function j_(n,t,e){return ugn(n[t.a],n[e.a])}function E_(n,t){return kfn(t,(jYn(),Oyt),n)}function S_(n,t){return d$(t.a.d.p,n.a.d.p)}function P_(n,t){return d$(n.a.d.p,t.a.d.p)}function C_(n,t){return ugn(n.c-n.s,t.c-t.s)}function I_(n,t){return ugn(n.b.e.a,t.b.e.a)}function O_(n,t){return ugn(n.c.e.a,t.c.e.a)}function A_(n){return n.c?Ten(n.c.a,n,0):-1}function L_(n){return n==rRt||n==aRt||n==cRt}function N_(n,t){this.c=n,QV.call(this,n,t)}function $_(n,t,e){this.a=n,Qx.call(this,t,e)}function D_(n){this.c=n,rL.call(this,YZn,0)}function x_(n,t,e){this.c=t,this.b=e,this.a=n}function R_(n){PU(),this.d=n,this.a=new ND}function K_(n){sB(),this.a=(hZ(),new nT(n))}function F_(n,t){hN(n.f)?JDn(n,t):wCn(n,t)}function __(n,t){sG.call(this,n,n.length,t)}function B_(n,t){Nut||t&&(n.d=t)}function H_(n,t){return F$(t,15)&&G_n(n.c,t)}function U_(n,t,e){return uG(n.c,71).Wk(t,e)}function G_(n,t,e){return uG(n.c,71).Xk(t,e)}function q_(n,t,e){return uK(n,uG(t,343),e)}function X_(n,t,e){return sK(n,uG(t,343),e)}function z_(n,t,e){return yPn(n,uG(t,343),e)}function V_(n,t,e){return FCn(n,uG(t,343),e)}function W_(n,t){return null==t?null:Xwn(n.b,t)}function Q_(n){return FA(n)?(tJ(n),n):n.ue()}function J_(n){return!isNaN(n)&&!isFinite(n)}function Y_(n){O$(this),BY(this),Qon(this,n)}function Z_(n){IN(this),dG(this.c,0,n.Pc())}function nB(n,t,e){this.a=n,this.b=t,this.c=e}function tB(n,t,e){this.a=n,this.b=t,this.c=e}function eB(n,t,e){this.d=n,this.b=e,this.a=t}function iB(n){this.a=n,bS(),Bsn(Date.now())}function rB(n){LQ(n.a),Lnn(n.c,n.b),n.b=null}function cB(){cB=E,out=new K,uut=new F}function aB(){aB=E,DFt=Inn(dat,EZn,1,0,5,1)}function oB(){oB=E,X_t=Inn(dat,EZn,1,0,5,1)}function uB(){uB=E,z_t=Inn(dat,EZn,1,0,5,1)}function sB(){sB=E,new jv((hZ(),hZ(),zot))}function hB(n){return Rtn(),Fcn((xtn(),Mut),n)}function fB(n){return ybn(),Fcn((bnn(),xut),n)}function lB(n){return _kn(),Fcn((k8(),Jut),n)}function bB(n){return Xin(),Fcn((y8(),tst),n)}function wB(n){return W_n(),Fcn((uhn(),kst),n)}function dB(n){return Yrn(),Fcn((fnn(),Cst),n)}function gB(n){return Ktn(),Fcn((hnn(),Dst),n)}function pB(n){return Yen(),Fcn((lnn(),Bst),n)}function mB(n){return JYn(),Fcn((fL(),fht),n)}function vB(n){return ehn(),Fcn((_tn(),vht),n)}function kB(n){return vyn(),Fcn((Htn(),Eht),n)}function yB(n){return myn(),Fcn((Btn(),Rht),n)}function MB(n){return BS(),Fcn((r6(),_ht),n)}function TB(n){return zin(),Fcn((M8(),vft),n)}function jB(n){return Jen(),Fcn((wnn(),vlt),n)}function EB(n){return uIn(),Fcn(($in(),Ilt),n)}function SB(n){return Xhn(),Fcn((Gtn(),Glt),n)}function PB(n){return Uvn(),Fcn((Utn(),ibt),n)}function CB(n,t){if(!n)throw hv(new vM(t))}function IB(n){if(!n)throw hv(new kM(PZn))}function OB(n,t){if(n!=t)throw hv(new Fv)}function AB(n,t,e){this.a=n,this.b=t,this.c=e}function LB(n,t,e){this.a=n,this.b=t,this.c=e}function NB(n,t,e){this.a=n,this.b=t,this.c=e}function $B(n,t,e){this.b=n,this.a=t,this.c=e}function DB(n,t,e){this.b=n,this.c=t,this.a=e}function xB(n,t,e){this.a=n,this.b=t,this.c=e}function RB(n,t,e){this.e=t,this.b=n,this.d=e}function KB(n,t,e){this.b=n,this.a=t,this.c=e}function FB(n,t,e){return vS(),n.a.Yd(t,e),t}function _B(n){var t;return(t=new yn).e=n,t}function BB(n){var t;return(t=new pk).b=n,t}function HB(){HB=E,Nbt=new $e,$bt=new De}function UB(){UB=E,Jwt=new ui,Qwt=new si}function GB(){GB=E,rdt=new mr,cdt=new vr}function qB(n){return gon(),Fcn((X7(),Cdt),n)}function XB(n){return zYn(),Fcn((lL(),_wt),n)}function zB(n){return Ghn(),Fcn((Xtn(),Wwt),n)}function VB(n){return qhn(),Fcn((qtn(),ldt),n)}function WB(n){return gPn(),Fcn((Din(),vdt),n)}function QB(n){return h_n(),Fcn((osn(),Kdt),n)}function JB(n){return vAn(),Fcn((ecn(),zdt),n)}function YB(n){return H7(),Fcn((S8(),Jdt),n)}function ZB(n){return jan(),Fcn((U7(),egt),n)}function nH(n){return ran(),Fcn((G7(),ogt),n)}function tH(n){return kvn(),Fcn((xin(),wgt),n)}function eH(n){return Vin(),Fcn((E8(),mgt),n)}function iH(n){return RIn(),Fcn((ccn(),Jgt),n)}function rH(n){return r_n(),Fcn((Efn(),spt),n)}function cH(n){return ihn(),Fcn((V7(),wpt),n)}function aH(n){return Zen(),Fcn((z7(),vpt),n)}function oH(n){return Y6(),Fcn((L8(),Tpt),n)}function uH(n){return ESn(),Fcn((rcn(),Ugt),n)}function sH(n){return Pfn(),Fcn((q7(),Tgt),n)}function hH(n){return tOn(),Fcn((icn(),Agt),n)}function fH(n){return Wtn(),Fcn((j8(),Dgt),n)}function lH(n){return Gpn(),Fcn((Kin(),$mt),n)}function bH(n){return MKn(),Fcn((chn(),ojt),n)}function wH(n){return Cwn(),Fcn((W7(),ljt),n)}function dH(n){return Yyn(),Fcn((ztn(),mjt),n)}function gH(n){return pyn(),Fcn((Rin(),Ejt),n)}function pH(n){return THn(),Fcn((Sfn(),Rjt),n)}function mH(n){return yvn(),Fcn((Vtn(),Ujt),n)}function vH(n){return nin(),Fcn((P8(),zjt),n)}function kH(n){return can(),Fcn((Y7(),Yjt),n)}function yH(n){return isn(),Fcn((Q7(),iEt),n)}function MH(n){return Sln(),Fcn((J7(),uEt),n)}function TH(n){return kbn(),Fcn((nnn(),bEt),n)}function jH(n){return ian(),Fcn((Z7(),mEt),n)}function EH(n){return zhn(),Fcn((tnn(),TEt),n)}function SH(n){return ean(),Fcn((snn(),GEt),n)}function PH(n){return Z6(),Fcn((C8(),nSt),n)}function CH(n){return b0(),Fcn((I8(),bSt),n)}function IH(n){return w0(),Fcn((O8(),pSt),n)}function OH(n){return _7(),Fcn((A8(),RSt),n)}function AH(n){return l0(),Fcn((N8(),XSt),n)}function LH(n){return Cjn(),Fcn((sen(),YSt),n)}function NH(n){return OHn(),Fcn((bL(),bPt),n)}function $H(n){return Pln(),Fcn((enn(),mPt),n)}function DH(n){return mbn(),Fcn((uen(),KCt),n)}function xH(n){return i3(),Fcn((D8(),HCt),n)}function RH(n){return pon(),Fcn((x8(),JCt),n)}function KH(n){return zPn(),Fcn((Fin(),rIt),n)}function FH(n){return vbn(),Fcn((inn(),bIt),n)}function _H(n){return Ptn(),Fcn(($8(),uIt),n)}function BH(n){return dTn(),Fcn((oen(),tOt),n)}function HH(n){return esn(),Fcn((rnn(),aOt),n)}function UH(n){return Jmn(),Fcn((cnn(),fOt),n)}function GH(n){return Zyn(),Fcn((ann(),gOt),n)}function qH(n){return Bgn(),Fcn((onn(),LOt),n)}function XH(n){return a9(),Fcn((R8(),jAt),n)}function zH(n){return Aun(),Fcn((T8(),Lbt),n)}function VH(n){return zIn(),Fcn((acn(),mbt),n)}function WH(n){return den(),Fcn((unn(),IAt),n)}function QH(n){return rhn(),Fcn((K8(),NAt),n)}function JH(n){return _Rn(),Fcn((_in(),BAt),n)}function YH(n){return nP(),Fcn(($6(),WAt),n)}function ZH(n){return Rdn(),Fcn((gnn(),XAt),n)}function nU(n){return tP(),Fcn((D6(),YAt),n)}function tU(n){return B7(),Fcn((F8(),eLt),n)}function eU(n){return pOn(),Fcn((Bin(),sLt),n)}function iU(n){return eP(),Fcn((x6(),XLt),n)}function rU(n){return Vhn(),Fcn((_8(),QLt),n)}function cU(n){return Rkn(),Fcn((Uin(),bNt),n)}function aU(n){return lAn(),Fcn((csn(),TNt),n)}function oU(n){return nMn(),Fcn((ocn(),DNt),n)}function uU(n){return ZSn(),Fcn((ucn(),t$t),n)}function sU(n){return xdn(),Fcn((Hin(),ext),n)}function hU(n){return Zrn(),Fcn((pnn(),oxt),n)}function fU(n){return _gn(),Fcn((hen(),bxt),n)}function lU(n){return RCn(),Fcn((scn(),yxt),n)}function bU(n){return Own(),Fcn((dnn(),Nxt),n)}function wU(n){return Ajn(),Fcn((fen(),Fxt),n)}function dU(n){return VDn(),Fcn((ohn(),Qxt),n)}function gU(n){return Vkn(),Fcn((Gin(),iRt),n)}function pU(n){return $Pn(),Fcn((hcn(),fRt),n)}function mU(n){return eNn(),Fcn((fcn(),vRt),n)}function vU(n){return KQn(),Fcn((qin(),HRt),n)}function kU(n){return Qmn(),Fcn((len(),ZRt),n)}function yU(n){return oUn(),Fcn((ahn(),hKt),n)}function MU(n){return Iwn(),Fcn((mnn(),dKt),n)}function TU(n,t){return tJ(n),n+(tJ(t),t)}function jU(n){return CU(),Fcn((B8(),vKt),n)}function EU(n){return qpn(),Fcn((ben(),EKt),n)}function SU(n){return Eln(),Fcn((wen(),LKt),n)}function PU(){PU=E,KQn(),zEt=_Rt,VEt=kRt}function CU(){CU=E,gKt=new Pq,pKt=new gV}function IU(n){return!n.e&&(n.e=new Zm),n.e}function OU(n,t){this.c=n,this.a=t,this.b=t-n}function AU(n,t,e){this.a=n,this.b=t,this.c=e}function LU(n,t,e){this.a=n,this.b=t,this.c=e}function NU(n,t,e){this.a=n,this.b=t,this.c=e}function $U(n,t,e){this.a=n,this.b=t,this.c=e}function DU(n,t,e){this.a=n,this.b=t,this.c=e}function xU(n,t,e){this.a=n,this.b=t,this.c=e}function RU(n,t,e){this.e=n,this.a=t,this.c=e}function KU(n,t,e){ZN(),_1.call(this,n,t,e)}function FU(n,t,e){ZN(),CQ.call(this,n,t,e)}function _U(n,t,e){ZN(),CQ.call(this,n,t,e)}function BU(n,t,e){ZN(),CQ.call(this,n,t,e)}function HU(n,t,e){ZN(),FU.call(this,n,t,e)}function UU(n,t,e){ZN(),FU.call(this,n,t,e)}function GU(n,t,e){ZN(),UU.call(this,n,t,e)}function qU(n,t,e){ZN(),_U.call(this,n,t,e)}function XU(n,t,e){ZN(),BU.call(this,n,t,e)}function zU(n){lX.call(this,n.d,n.c,n.a,n.b)}function VU(n){lX.call(this,n.d,n.c,n.a,n.b)}function WU(n){this.d=n,Cw(this),this.b=Ez(n.d)}function QU(n){return rDn(),Fcn((asn(),SFt),n)}function JU(n,t){return WW(n),WW(t),new jE(n,t)}function YU(n,t){return WW(n),WW(t),new WG(n,t)}function ZU(n,t){return WW(n),WW(t),new QG(n,t)}function nG(n,t){return WW(n),WW(t),new DE(n,t)}function tG(n){return MK(0!=n.b),Lrn(n,n.a.a)}function eG(n){return MK(0!=n.b),Lrn(n,n.c.b)}function iG(n){return!n.c&&(n.c=new Ks),n.c}function rG(n){var t;return cin(t=new Zm,n),t}function cG(n){var t;return cin(t=new ek,n),t}function aG(n){var t;return Fon(t=new rk,n),t}function oG(n){var t;return Fon(t=new lS,n),t}function uG(n,t){return Fq(null==n||Eyn(n,t)),n}function sG(n,t,e){_z.call(this,t,e),this.a=n}function hG(n,t){this.c=n,this.b=t,this.a=!1}function fG(){this.a=";,;",this.b="",this.c=""}function lG(n,t,e){this.b=n,eL.call(this,t,e)}function bG(n,t,e){this.c=n,VP.call(this,t,e)}function wG(n,t,e){FC.call(this,n,t),this.b=e}function dG(n,t,e){b$n(e,0,n,t,e.length,!1)}function gG(n,t,e,i,r){n.b=t,n.c=e,n.d=i,n.a=r}function pG(n,t,e,i,r){n.d=t,n.c=e,n.a=i,n.b=r}function mG(n,t){t&&(n.b=t,n.a=(GQ(t),t.a))}function vG(n,t){if(!n)throw hv(new vM(t))}function kG(n,t){if(!n)throw hv(new kM(t))}function yG(n,t){if(!n)throw hv(new gM(t))}function MG(n,t){return YS(),d$(n.d.p,t.d.p)}function TG(n,t){return tcn(),ugn(n.e.b,t.e.b)}function jG(n,t){return tcn(),ugn(n.e.a,t.e.a)}function EG(n,t){return d$(wq(n.d),wq(t.d))}function SG(n,t){return t&&$Q(n,t.d)?t:null}function PG(n,t){return t==(KQn(),_Rt)?n.c:n.d}function CG(n){return Esn(LV(_L(n)?Gsn(n):n))}function IG(n){return new MO(n.c+n.b,n.d+n.a)}function OG(n){return null!=n&&!mpn(n,n_t,t_t)}function AG(n,t){return(ldn(n)<<4|ldn(t))&D1n}function LG(n,t,e,i,r){n.c=t,n.d=e,n.b=i,n.a=r}function NG(n){var t,e;t=n.b,e=n.c,n.b=e,n.c=t}function $G(n){var t,e;e=n.d,t=n.a,n.d=t,n.a=e}function DG(n,t){var e;return e=n.c,Jan(n,t),e}function xG(n,t){return n.g=t<0?-1:t,n}function RG(n,t){return Brn(n),n.a*=t,n.b*=t,n}function KG(n,t,e){Orn.call(this,t,e),this.d=n}function FG(n,t,e){LA.call(this,n,t),this.c=e}function _G(n,t,e){LA.call(this,n,t),this.c=e}function BG(n){uB(),ps.call(this),this.ci(n)}function HG(){N7(),OQ.call(this,(MP(),l_t))}function UG(n){return QYn(),new IX(0,n)}function GG(){GG=E,hZ(),CBt=new Xw(bct)}function qG(){qG=E,new Gyn((my(),Tat),(py(),Mat))}function XG(){XG=E,bot=Inn(dot,zZn,17,256,0,1)}function zG(){this.b=uM(pK(Jkn((cGn(),Bft))))}function VG(n){this.b=n,this.a=Mz(this.b.a).Od()}function WG(n,t){this.b=n,this.a=t,Ff.call(this)}function QG(n,t){this.a=n,this.b=t,Ff.call(this)}function JG(n,t,e){this.a=n,vL.call(this,t,e)}function YG(n,t,e){this.a=n,vL.call(this,t,e)}function ZG(n,t,e){nrn(n,t,new QW(e))}function nq(n,t,e){var i;return i=n[t],n[t]=e,i}function tq(n){return Ltn(n.slice(),n)}function eq(n){var t;return t=n.n,n.a.b+t.d+t.a}function iq(n){var t;return t=n.n,n.e.b+t.d+t.a}function rq(n){var t;return t=n.n,n.e.a+t.b+t.c}function cq(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function aq(n,t){return s8(n,t,n.c.b,n.c),!0}function oq(n){return n.a?n.a:sY(n)}function uq(n){return lZ(),bIn(n)==R0(gIn(n))}function sq(n){return lZ(),gIn(n)==R0(bIn(n))}function hq(n,t){return CEn(n,new FC(t.a,t.b))}function fq(n,t){return TJ(),IMn(n,t),new bJ(n,t)}function lq(n,t){return n.c<t.c?-1:n.c==t.c?0:1}function bq(n){return n.b.c.length-n.e.c.length}function wq(n){return n.e.c.length-n.g.c.length}function dq(n){return n.e.c.length+n.g.c.length}function gq(n){return 0==n||isNaN(n)?n:n<0?-1:1}function pq(n){return!v9(n)&&n.c.i.c==n.d.i.c}function mq(n){return n2(),(KQn(),ERt).Hc(n.j)}function vq(n,t,e){return tcn(),e.e.a+e.f.a+n*t}function kq(n,t,e){return tcn(),e.e.b+e.f.b+n*t}function yq(n,t,e){return vJ(n.b,uG(e.b,18),t)}function Mq(n,t,e){return vJ(n.b,uG(e.b,18),t)}function Tq(n,t,e){eQn(n.a,n.b,n.c,uG(t,166),e)}function jq(n,t,e,i){Mvn.call(this,n,t,e,i,0,0)}function Eq(n){uB(),BG.call(this,n),this.a=-1}function Sq(n,t){_z.call(this,t,1040),this.a=n}function Pq(){BO.call(this,"COUNT_CHILDREN",0)}function Cq(n,t){OA.call(this,n,t),this.a=this}function Iq(n,t){var e;return(e=VW(n,t)).i=2,e}function Oq(n,t){return++n.j,n.Cj(t)}function Aq(n,t,e){return n.a=-1,hR(n,t.g,e),n}function Lq(n,t){return kD(n,new MO(t.a,t.b))}function Nq(n){return ncn(),Inn(lPt,z9n,39,n,0,1)}function $q(n){return n.e.Rd().gc()*n.c.Rd().gc()}function Dq(n,t,e){return new x_(BQ(n)._e(),e,t)}function xq(n,t){Yan(n,null==t?null:(tJ(t),t))}function Rq(n,t){Qan(n,null==t?null:(tJ(t),t))}function Kq(n,t){Qan(n,null==t?null:(tJ(t),t))}function Fq(n){if(!n)throw hv(new mM(null))}function _q(n){if(n.c.e!=n.a)throw hv(new Fv)}function Bq(n){if(n.e.c!=n.b)throw hv(new Fv)}function Hq(n){for(WW(n);n.Ob();)n.Pb(),n.Qb()}function Uq(n){ZW(),this.a=(hZ(),new Xw(WW(n)))}function Gq(n){this.c=n,this.b=this.c.d.vc().Kc()}function qq(n){n.a.ld(),uG(n.a.md(),16).gc(),HM()}function Xq(n,t){return n.a+=mvn(t,0,t.length),n}function zq(n,t){return u3(t,n.c.length),n.c[t]}function Vq(n,t){return u3(t,n.a.length),n.a[t]}function Wq(n,t){return tJ(t),Dun(t,(tJ(n),n))}function Qq(n,t){return tJ(n),Dun(n,(tJ(t),t))}function Jq(n,t,e,i,r,c){return NSn(n,t,e,i,r,0,c)}function Yq(n,t){return uQ(t,0,nX(t[0],Hvn(1)))}function Zq(n,t){return Hvn(Lgn(Hvn(n.a).a,t.a))}function nX(n,t){return Zq(uG(n,168),uG(t,168))}function tX(){tX=E,got=Inn(yot,zZn,168,256,0,1)}function eX(){eX=E,Mot=Inn(Tot,zZn,191,256,0,1)}function iX(){iX=E,aot=Inn(uot,zZn,222,256,0,1)}function rX(){rX=E,sot=Inn(hot,zZn,180,128,0,1)}function cX(){gG(this,!1,!1,!1,!1)}function aX(n){td.call(this,new u8),Qon(this,n)}function oX(n){this.a=new sS(n.gc()),Qon(this,n)}function uX(n){this.c=n,this.a=new fS(this.c.a)}function sX(n){this.a=n,this.c=new Ym,jfn(this)}function hX(){this.d=new MO(0,0),this.e=new ek}function fX(n,t){vS(),Fnn.call(this,n),this.a=t}function lX(n,t,e,i){Rf(this),pG(this,n,t,e,i)}function bX(n,t,e){return d$(t.d[n.g],e.d[n.g])}function wX(n,t,e){return d$(n.d[t.p],n.d[e.p])}function dX(n,t,e){return d$(n.d[t.p],n.d[e.p])}function gX(n,t,e){return d$(n.d[t.p],n.d[e.p])}function pX(n,t,e){return d$(n.d[t.p],n.d[e.p])}function mX(n,t,i){return e.Math.min(i/n,1/t)}function vX(n,t){return n?0:e.Math.max(0,t-1)}function kX(n,t){return null==n?null==t:m_(n,t)}function yX(n,t){return null==n?null==t:Bvn(n,t)}function MX(n){return n.q?n.q:(hZ(),hZ(),Vot)}function TX(n){return n.c-uG(zq(n.a,n.b),293).b}function jX(n){return n.c?n.c.f:n.e.b}function EX(n){return n.c?n.c.g:n.e.a}function SX(n,t){return null==n.a&&fBn(n),n.a[t]}function PX(n){var t;return(t=GSn(n))?PX(t):n}function CX(n,t){return QYn(),new eW(n,t)}function IX(n,t){QYn(),Qm.call(this,n),this.a=t}function OX(n,t){ZN(),Hm.call(this,t),this.a=n}function AX(n,t,e){this.a=n,MD.call(this,t,e,2)}function LX(n){this.b=new lS,this.a=n,this.c=-1}function NX(n){Qx.call(this,0,0),this.a=n,this.b=0}function $X(n){Drn.call(this,n.gc()),CW(this,n)}function DX(n){n.b?DX(n.b):n.d.dc()&&n.f.c.Bc(n.e)}function xX(n){return Array.isArray(n)&&n.Tm===j}function RX(n,t){return F$(t,22)&&$x(n,uG(t,22))}function KX(n,t){return F$(t,22)&&Nrn(n,uG(t,22))}function FX(n,t){return Ibn(n,t,A9(n,n.b.Ce(t)))}function _X(n,t){return!(void 0===n.a.get(t))}function BX(n){return uRn(n,26)*G0n+uRn(n,27)*q0n}function HX(n,t){return yan(new Z,new fd(n),t)}function UX(n,t,e){ubn(0,t,n.length),Ntn(n,0,t,e)}function GX(n,t,e){o3(t,n.c.length),pC(n.c,t,e)}function qX(n,t,e){var i;n&&((i=n.i).c=t,i.b=e)}function XX(n,t,e){var i;n&&((i=n.i).d=t,i.a=e)}function zX(n,t,e){var i;for(i=0;i<t;++i)n[i]=e}function VX(n,t){var e;for(e=0;e<t;++e)n[e]=-1}function WX(n,t){var e;return Dfn(e=ggn(n),t),e}function QX(n,t){return!n&&(n=[]),n[n.length]=t,n}function JX(n,t){JF(n.c,t),n.b.c+=t.a,n.b.d+=t.b}function YX(n,t){JX(n,YF(new MO(t.a,t.b),n.c))}function ZX(n,t){this.b=new lS,this.a=n,this.c=t}function nz(){this.b=new Et,this.c=new FZ(this)}function tz(){this.d=new mn,this.e=new KZ(this)}function ez(){J0(),this.f=new lS,this.e=new lS}function iz(){n2(),this.k=new Ym,this.d=new ek}function rz(){rz=E,$Kt=new _N((XYn(),uDt),0)}function cz(){cz=E,Pat=new NX(Inn(dat,EZn,1,0,5,1))}function az(n,t,e){return FV(n,new ZP(t.a,e.a))}function oz(n,t,e){return-d$(n.f[t.p],n.f[e.p])}function uz(n,t,e){HDn(e,n,1),kD(t,new $C(e,n))}function sz(n,t,e){TEn(e,n,1),kD(t,new RC(e,n))}function hz(n,t,e){this.a=n,TD.call(this,t,e,22)}function fz(n,t,e){this.a=n,TD.call(this,t,e,14)}function lz(n,t,e,i){ZN(),d4.call(this,n,t,e,i)}function bz(n,t,e,i){ZN(),d4.call(this,n,t,e,i)}function wz(n,t,e){return n.a=-1,hR(n,t.g+1,e),n}function dz(n,t,e){return e=DUn(n,uG(t,54),7,e)}function gz(n,t,e){return e=DUn(n,uG(t,54),3,e)}function pz(n){return _L(n)?0|n:Tj(n)}function mz(n){return QYn(),new F1(10,n,0)}function vz(n){return n.f||(n.f=n.Dc())}function kz(n){return n.i||(n.i=n.bc())}function yz(n){if(n.e.j!=n.d)throw hv(new Fv)}function Mz(n){return n.c?n.c:n.c=n.Sd()}function Tz(n){return n.d?n.d:n.d=n.Td()}function jz(n,t){return Gvn(Len(n,t))?t.zi():null}function Ez(n){return F$(n,15)?uG(n,15).ed():n.Kc()}function Sz(n){return n.Qc(Inn(dat,EZn,1,n.gc(),5,1))}function Pz(n){return null!=n&&NV(n)&&!(n.Tm===j)}function Cz(n){return!Array.isArray(n)&&n.Tm===j}function Iz(n,t){return WW(t),n.a.Jd(t)&&!n.b.Jd(t)}function Oz(n,t){return p$(n.l&t.l,n.m&t.m,n.h&t.h)}function Az(n,t){return p$(n.l|t.l,n.m|t.m,n.h|t.h)}function Lz(n,t){return p$(n.l^t.l,n.m^t.m,n.h^t.h)}function Nz(n,t){return Esn(JIn(_L(n)?Gsn(n):n,t))}function $z(n,t){return Esn(gDn(_L(n)?Gsn(n):n,t))}function Dz(n,t){return Esn(FOn(_L(n)?Gsn(n):n,t))}function xz(n,t){return gF((tJ(n),n),(tJ(t),t))}function Rz(n,t){return ugn((tJ(n),n),(tJ(t),t))}function Kz(n){this.b=new R7(11),this.a=(sZ(),n)}function Fz(n){this.a=(cz(),Pat),this.d=uG(WW(n),51)}function _z(n,t){this.c=0,this.d=n,this.b=64|t|VZn}function Bz(n,t){this.e=n,this.d=0!=(64&t)?t|VZn:t}function Hz(n){this.b=null,this.a=(sZ(),n||Jot)}function Uz(n){LD(this),this.g=n,KY(this),this.je()}function Gz(n){CP(),this.a=0,this.b=n-1,this.c=1}function qz(n,t,e,i){this.a=n,A7.call(this,n,t,e,i)}function Xz(n,t,e){n.a.Mb(e)&&(n.b=!0,t.Cd(e))}function zz(n){n.d||(n.d=n.b.Kc(),n.c=n.b.gc())}function Vz(n,t){if(n<0||n>=t)throw hv(new Ik)}function Wz(n,t){return cdn(n,(tJ(t),new ud(t)))}function Qz(n,t){return cdn(n,(tJ(t),new sd(t)))}function Jz(n,t,e){return BYn(n,uG(t,12),uG(e,12))}function Yz(n){return Lun(),0!=uG(n,12).g.c.length}function Zz(n){return Lun(),0!=uG(n,12).e.c.length}function nV(n,t){return Pun(),ugn(t.a.o.a,n.a.o.a)}function tV(n,t){0!=(t.Bb&Qtt)&&!n.a.o&&(n.a.o=t)}function eV(n,t){t.Ug("General 'Rotator",1),lQn(n)}function iV(n,t,e){t.qf(e,uM(pK(cQ(n.b,e)))*n.a)}function rV(n,t,e){return l_n(),qun(n,t)&&qun(n,e)}function cV(n){return eNn(),!n.Hc(wRt)&&!n.Hc(gRt)}function aV(n){return n.e?T7(n.e):null}function oV(n){return _L(n)?""+n:K_n(n)}function uV(n){var t;for(t=n;t.f;)t=t.f;return t}function sV(n,t,e){return uQ(t,0,nX(t[0],e[0])),t}function hV(n,t,e,i){var r;(r=n.i).i=t,r.a=e,r.b=i}function fV(n,t,e,i){MD.call(this,n,t,e),this.b=i}function lV(n,t,e,i,r){btn.call(this,n,t,e,i,r,-1)}function bV(n,t,e,i,r){wtn.call(this,n,t,e,i,r,-1)}function wV(n,t,e,i){FG.call(this,n,t,e),this.b=i}function dV(n){lA.call(this,n,!1),this.a=!1}function gV(){BO.call(this,"LOOKAHEAD_LAYOUT",1)}function pV(n){this.b=n,Zx.call(this,n),qD(this)}function mV(n){this.b=n,tR.call(this,n),XD(this)}function vV(n,t,e){this.a=n,i_.call(this,t,e,5,6)}function kV(n,t,e,i){this.b=n,MD.call(this,t,e,i)}function yV(n,t){this.b=n,fb.call(this,n.b),this.a=t}function MV(n){this.a=Fyn(n.a),this.b=new Z_(n.b)}function TV(n,t){ZW(),UE.call(this,n,Dwn(new IM(t)))}function jV(n,t){return QYn(),new PQ(n,t,0)}function EV(n,t){return QYn(),new PQ(6,n,t)}function SV(n,t){for(tJ(t);n.Ob();)t.Cd(n.Pb())}function PV(n,t){return RA(t)?AZ(n,t):!!FX(n.f,t)}function CV(n,t){return t.Vh()?mwn(n.b,uG(t,54)):t}function IV(n,t){return m_(n.substr(0,t.length),t)}function OV(n){return new Fz(new YD(n.a.length,n.a))}function AV(n){return new MO(n.c+n.b/2,n.d+n.a/2)}function LV(n){return p$(~n.l&f0n,~n.m&f0n,~n.h&l0n)}function NV(n){return typeof n===wZn||typeof n===mZn}function $V(n){n.f=new nN(n),n.i=new tN(n),++n.g}function DV(n){if(!n)throw hv(new Bv);return n.d}function xV(n){var t;return MK(null!=(t=Rfn(n))),t}function RV(n){var t;return MK(null!=(t=sgn(n))),t}function KV(n,t){var e;return e7(t,e=n.a.gc()),e-t}function FV(n,t){return null==n.a.zc(t,n)}function _V(n,t){return null==n.a.zc(t,(qx(),tot))}function BV(n){return new fX(null,oW(n,n.length))}function HV(n,t,e){return HXn(n,uG(t,42),uG(e,176))}function UV(n,t,e){return Mon(n.a,t),nq(n.b,t.g,e)}function GV(n,t,e){Vz(e,n.a.c.length),Y8(n.a,e,t)}function qV(n,t,e,i){ubn(t,e,n.length),XV(n,t,e,i)}function XV(n,t,e,i){var r;for(r=t;r<e;++r)n[r]=i}function zV(n,t){var e;for(e=0;e<t;++e)n[e]=!1}function VV(n,t,e){cHn(),this.e=n,this.d=t,this.a=e}function WV(n,t,e){this.c=n,this.a=t,hZ(),this.b=e}function QV(n,t){this.d=n,DD.call(this,n),this.e=t}function JV(n,t,e){return bbn(n,t.g,e),Mon(n.c,t),n}function YV(n){return qWn(n,(xdn(),JDt)),n.d=!0,n}function ZV(n){return!n.j&&Tw(n,FHn(n.g,n.b)),n.j}function nW(n){n.a=null,n.e=null,$V(n.b),n.d=0,++n.c}function tW(n){TK(-1!=n.b),i7(n.c,n.a=n.b),n.b=-1}function eW(n,t){Qm.call(this,1),this.a=n,this.b=t}function iW(n,t){return n>0?e.Math.log(n/t):-100}function rW(n,t){return dwn(n,t)<0?-1:dwn(n,t)>0?1:0}function cW(n,t){J$(n,F$(t,160)?t:uG(t,2036).Rl())}function aW(n,t){if(null==n)throw hv(new MM(t))}function oW(n,t){return $rn(t,n.length),new Sq(n,t)}function uW(n,t){return!!t&&Qon(n,t)}function sW(){return Hy(),Uhn(cT(Lat,1),p1n,549,0,[Iat])}function hW(n){return 0==n.e?n:new VV(-n.e,n.d,n.a)}function fW(n,t){return ugn(n.c.c+n.c.b,t.c.c+t.c.b)}function lW(n,t){s8(n.d,t,n.b.b,n.b),++n.a,n.c=null}function bW(n,t){return n.c?bW(n.c,t):kD(n.b,t),n}function wW(n,t,e){var i;return i=uin(n,t),W5(n,t,e),i}function dW(n,t,e){var i;for(i=0;i<t;++i)uQ(n,i,e)}function gW(n,t,e,i,r){for(;t<e;)i[r++]=VJ(n,t++)}function pW(n,t,e,i,r){TCn(n,uG(Y9(t.k,e),15),e,i,r)}function mW(n,t){kS(YJ(n.Oc(),new Kr),new $g(t))}function vW(n,t){return ugn(n.e.a+n.f.a,t.e.a+t.f.a)}function kW(n,t){return ugn(n.e.b+n.f.b,t.e.b+t.f.b)}function yW(n){return e.Math.abs(n.d.e-n.e.e)-n.a}function MW(n){return n==M0n?yct:n==T0n?"-INF":""+n}function TW(n){return n==M0n?yct:n==T0n?"-INF":""+n}function jW(n){return lZ(),R0(bIn(n))==R0(gIn(n))}function EW(n,t,e){return uG(n.c.hd(t,uG(e,136)),44)}function SW(n,t){pQ(n,new QW(null!=t.f?t.f:""+t.g))}function PW(n,t){pQ(n,new QW(null!=t.f?t.f:""+t.g))}function CW(n,t){return n.Si()&&(t=A0(n,t)),n.Fi(t)}function IW(n,t){return t=n.Yk(null,t),pCn(n,null,t)}function OW(n,t){++n.j,WPn(n,n.i,t),xNn(n,uG(t,343))}function AW(n){n?UPn(n,(bS(),Eot),""):a1((bS(),n))}function LW(n){this.d=(tJ(n),n),this.a=0,this.c=YZn}function NW(n,t){this.d=_dn(n),this.c=t,this.a=.5*t}function $W(n){HZ.call(this),this.a=n,kD(n.a,this)}function DW(){u8.call(this),this.a=!0,this.b=!0}function xW(){xW=E,Xat=new Sb(!1),zat=new Sb(!0)}function RW(n){return n.g||(n.g=new Ql(n))}function KW(n){return n.k||(n.k=new Jl(n))}function FW(n){return n.k||(n.k=new Jl(n))}function _W(n){return n.i||(n.i=new tb(n))}function BW(n){return n.f||(n.f=new VD(n))}function HW(n){return n.j||(n.j=new mb(n))}function UW(n){return n.d||(n.d=new rb(n))}function GW(n,t,e){return QYn(),new R3(n,t,e)}function qW(n,t){return q4(t,n.c.b.c.gc()),new TE(n,t)}function XW(n,t){var e;return q4(t,e=n.a.gc()),e-1-t}function zW(n,t,e){var i;return Rcn(e,i=VW(n,t)),i}function VW(n,t){var e;return(e=new Ifn).j=n,e.d=t,e}function WW(n){if(null==n)throw hv(new Rv);return n}function QW(n){if(null==n)throw hv(new Rv);this.a=n}function JW(n){Iv(),this.b=new Zm,this.a=n,xVn(this,n)}function YW(n){this.b=n,this.a=uG(nJ(this.b.a.e),227)}function ZW(){ZW=E,sB(),jat=new t1((hZ(),hZ(),zot))}function nQ(){nQ=E,sB(),Nat=new RP((hZ(),hZ(),Wot))}function tQ(){tQ=E,M_t=DNn(),YYn(),j_t&&kEn()}function eQ(n){n.s=NaN,n.c=NaN,X$n(n,n.e),X$n(n,n.j)}function iQ(n){return(null==n.i&&eqn(n),n.i).length}function rQ(n,t){return uG(Mz(n.a).Md().Xb(t),44).ld()}function cQ(n,t){return RA(t)?U1(n,t):DA(FX(n.f,t))}function aQ(n,t){return lZ(),n==bIn(t)?gIn(t):bIn(t)}function oQ(n,t,e,i){return 0==e||(e-i)/e<n.e||t>=n.g}function uQ(n,t,e){return yK(null==e||aGn(n,e)),n[t]=e}function sQ(n,t){return s3(t,n.length+1),n.substr(t)}function hQ(n,t){for(tJ(t);n.c<n.d;)n.Se(t,n.c++)}function fQ(n){this.d=n,this.c=n.a.d.a,this.b=n.a.e.g}function lQ(n){this.c=n,this.a=new lS,this.b=new lS}function bQ(n){this.c=new sj,this.a=new Zm,this.b=n}function wQ(n){this.b=new Zm,this.a=new Zm,this.c=n}function dQ(n,t,e){uG(t.b,68),Prn(t.a,new NU(n,e,t))}function gQ(n,t){return Pun(),uG(AJ(n,t.d),15).Fc(t)}function pQ(n,t){var e;uin(n,e=n.a.length),W5(n,e,t)}function mQ(n,t){console[n].call(console,t)}function vQ(n,t){var e;++n.j,e=n.Ej(),n.rj(n.Zi(e,t))}function kQ(n,t,e){return NBn(n,Aon(n,t,e))}function yQ(n){return!n.d&&(n.d=new MD(g_t,n,1)),n.d}function MQ(n){return!n.a&&(n.a=new MD(nFt,n,4)),n.a}function TQ(n,t){return n.a+=String.fromCharCode(t),n}function jQ(n,t){return n.a+=String.fromCharCode(t),n}function EQ(n,t,e){this.a=n,Bm.call(this,t),this.b=e}function SQ(n,t,e){this.a=n,E6.call(this,8,t,null,e)}function PQ(n,t,e){Qm.call(this,n),this.a=t,this.b=e}function CQ(n,t,e){Hm.call(this,t),this.a=n,this.b=e}function IQ(n){this.c=n,this.b=this.c.a,this.a=this.c.e}function OQ(n){this.a=(tJ(Ert),Ert),this.b=n,new Zk}function AQ(n){oY(n.a),n.b=Inn(dat,EZn,1,n.b.length,5,1)}function LQ(n){TK(-1!=n.c),n.d.gd(n.c),n.b=n.c,n.c=-1}function NQ(n){return e.Math.sqrt(n.a*n.a+n.b*n.b)}function $Q(n,t){return ljn(n.c,n.f,t,n.b,n.a,n.e,n.d)}function DQ(n,t){return Vz(t,n.a.c.length),zq(n.a,t)}function xQ(n,t){return xA(n)===xA(t)||null!=n&&udn(n,t)}function RQ(n){return F$(n,102)&&0!=(uG(n,19).Bb&Qtt)}function KQ(n){return nJ(n),F$(n,483)?uG(n,483):cpn(n)}function FQ(n){return n?n.dc():!n.Kc().Ob()}function _Q(n){return!!zHt&&AZ(zHt,n)}function BQ(n){return 0>=n?new mS:ton(n-1)}function HQ(n){return!n.a&&n.c?n.c.b:n.a}function UQ(n){return F$(n,616)?n:new e0(n)}function GQ(n){n.c?GQ(n.c):(vgn(n),n.d=!0)}function qQ(n){n.c?n.c.$e():(n.d=!0,uKn(n))}function XQ(n){n.b=!1,n.c=!1,n.d=!1,n.a=!1}function zQ(n){return n.c.i.c==n.d.i.c}function VQ(n,t){var e;(e=n.Ih(t))>=0?n.ki(e):zLn(n,t)}function WQ(n,t){n.c<0||n.b.b<n.c?cL(n.b,t):n.a.tf(t)}function QQ(n,t){ttn((!n.a&&(n.a=new oF(n,n)),n.a),t)}function JQ(n,t){JX(uG(t.b,68),n),Prn(t.a,new Dd(n))}function YQ(n,t){return d$(t.j.c.length,n.j.c.length)}function ZQ(n,t,e){return Whn(),e.Lg(n,uG(t.ld(),149))}function nJ(n){if(null==n)throw hv(new Rv);return n}function tJ(n){if(null==n)throw hv(new Rv);return n}function eJ(n){if(4!=n.p)throw hv(new xv);return n.e}function iJ(n){if(3!=n.p)throw hv(new xv);return n.e}function rJ(n){if(3!=n.p)throw hv(new xv);return n.j}function cJ(n){if(4!=n.p)throw hv(new xv);return n.j}function aJ(n){if(6!=n.p)throw hv(new xv);return n.f}function oJ(n){if(6!=n.p)throw hv(new xv);return n.k}function uJ(n){return!n.b&&(n.b=new Um(new ty)),n.b}function sJ(n){return-2==n.c&&ww(n,XCn(n.g,n.b)),n.c}function hJ(n,t){var e;return(e=VW("",n)).n=t,e.i=1,e}function fJ(n,t,e,i){FE.call(this,n,e),this.a=t,this.f=i}function lJ(n,t,e,i){FE.call(this,n,t),this.d=e,this.a=i}function bJ(n,t){H$.call(this,eon(WW(n),WW(t))),this.a=t}function wJ(){ly.call(this),Xv(this.j.c,0),this.a=-1}function dJ(){iIn.call(this,Drt,(vj(),y_t)),zXn(this)}function gJ(){iIn.call(this,lct,(kj(),xBt)),hVn(this)}function pJ(){_E.call(this,"DELAUNAY_TRIANGULATION",0)}function mJ(n){return String.fromCharCode.apply(null,n)}function vJ(n,t,e){return RA(t)?r2(n,t,e):VAn(n.f,t,e)}function kJ(n){return hZ(),n?n.Oe():(sZ(),sZ(),Zot)}function yJ(n){return man(n,v1n),arn(Lgn(Lgn(5,n),n/10|0))}function MJ(n,t){return qG(),new Gyn(new wx(n),new bx(t))}function TJ(){TJ=E,Eat=new Ry(Uhn(cT(Sat,1),c1n,44,0,[]))}function jJ(n){return!n.d&&(n.d=new qw(n.c.Cc())),n.d}function EJ(n){return!n.a&&(n.a=new tT(n.c.vc())),n.a}function SJ(n){return!n.b&&(n.b=new nT(n.c.ec())),n.b}function PJ(n,t){for(;t-- >0;)n=n<<1|(n<0?1:0);return n}function CJ(n,t){var e;return e=new bQ(n),mv(t.c,e),e}function IJ(n,t){n.u.Hc((eNn(),wRt))&&vNn(n,t),knn(n,t)}function OJ(n,t){return xA(n)===xA(t)||null!=n&&udn(n,t)}function AJ(n,t){return RX(n.a,t)?n.b[uG(t,22).g]:null}function LJ(){return BS(),Uhn(cT(oft,1),p1n,488,0,[Kht])}function NJ(){return nP(),Uhn(cT(JAt,1),p1n,489,0,[zAt])}function $J(){return tP(),Uhn(cT(tLt,1),p1n,558,0,[QAt])}function DJ(){return eP(),Uhn(cT(WLt,1),p1n,539,0,[GLt])}function xJ(n){return!n.n&&(n.n=new fV(lFt,n,1,7)),n.n}function RJ(n){return!n.c&&(n.c=new fV(wFt,n,9,9)),n.c}function KJ(n){return!n.c&&(n.c=new f_(cFt,n,5,8)),n.c}function FJ(n){return!n.b&&(n.b=new f_(cFt,n,4,7)),n.b}function _J(n){return n.j.c.length=0,oY(n.c),ZF(n.a),n}function BJ(n){return n.e==wct&&kw(n,akn(n.g,n.b)),n.e}function HJ(n){return n.f==wct&&Mw(n,tEn(n.g,n.b)),n.f}function UJ(n,t,e,i){return Dsn(n,t,e,!1),pdn(n,i),n}function GJ(n,t){this.b=n,QV.call(this,n,t),qD(this)}function qJ(n,t){this.b=n,N_.call(this,n,t),XD(this)}function XJ(n){this.d=n,this.a=this.d.b,this.b=this.d.c}function zJ(n,t){this.b=n,this.c=t,this.a=new fS(this.b)}function VJ(n,t){return s3(t,n.length),n.charCodeAt(t)}function WJ(n,t){jgn(n,uM($cn(t,"x")),uM($cn(t,"y")))}function QJ(n,t){jgn(n,uM($cn(t,"x")),uM($cn(t,"y")))}function JJ(n,t){return vgn(n),new fX(n,new ien(t,n.a))}function YJ(n,t){return vgn(n),new fX(n,new f7(t,n.a))}function ZJ(n,t){return vgn(n),new IK(n,new s7(t,n.a))}function nY(n,t){return vgn(n),new OK(n,new h7(t,n.a))}function tY(n,t){return new MZ(uG(WW(n),50),uG(WW(t),50))}function eY(n,t){return ugn(n.d.c+n.d.b/2,t.d.c+t.d.b/2)}function iY(n,t,e){e.a?Mcn(n,t.b-n.f/2):ycn(n,t.a-n.g/2)}function rY(n,t){return ugn(n.g.c+n.g.b/2,t.g.c+t.g.b/2)}function cY(n,t){return qS(),ugn((tJ(n),n),(tJ(t),t))}function aY(n){return null!=n&&ZE(UFt,n.toLowerCase())}function oY(n){var t;for(t=n.Kc();t.Ob();)t.Pb(),t.Qb()}function uY(n){var t;return!(t=n.b)&&(n.b=t=new Yl(n)),t}function sY(n){return con(n)||null}function hY(n,t){var e,i;return(e=n/t)>(i=t0(e))&&++i,i}function fY(n,t,e){var i;(i=uG(n.d.Kb(e),159))&&i.Nb(t)}function lY(n,t,e){KXn(n.a,e),jhn(e),EDn(n.b,e),Tzn(t,e)}function bY(n,t,e,i){this.a=n,this.c=t,this.b=e,this.d=i}function wY(n,t,e,i){this.c=n,this.b=t,this.a=e,this.d=i}function dY(n,t,e,i){this.c=n,this.b=t,this.d=e,this.a=i}function gY(n,t,e,i){this.c=n,this.d=t,this.b=e,this.a=i}function pY(n,t,e,i){this.a=n,this.d=t,this.c=e,this.b=i}function mY(n,t,e,i){this.a=n,this.e=t,this.d=e,this.c=i}function vY(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function kY(n,t,e){this.a=L1n,this.d=n,this.b=t,this.c=e}function yY(n,t,e,i){_E.call(this,n,t),this.a=e,this.b=i}function MY(n,t){this.d=(tJ(n),n),this.a=16449,this.c=t}function TY(n){this.a=new Zm,this.e=Inn(YHt,zZn,53,n,0,2)}function jY(n){n.Ug("No crossing minimization",1),n.Vg()}function EY(){Ky.call(this,"There is no more element.")}function SY(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function PY(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function CY(n,t,e,i){this.e=n,this.a=t,this.c=e,this.d=i}function IY(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function OY(n,t,e,i){ZN(),l7.call(this,t,e,i),this.a=n}function AY(n,t,e,i){ZN(),l7.call(this,t,e,i),this.a=n}function LY(n,t,e){var i;return i=eJn(n),t.ti(e,i)}function NY(n){var t;return Urn(t=new ev,n),t}function $Y(n){var t;return MIn(t=new ev,n),t}function DY(n,t){return Qun(t,cQ(n.f,t)),null}function xY(n){return!n.b&&(n.b=new fV(aFt,n,12,3)),n.b}function RY(n){return Fq(null==n||NV(n)&&!(n.Tm===j)),n}function KY(n){return n.n&&(n.e!==E1n&&n.je(),n.j=null),n}function FY(n){if(bpn(n.d),n.d.d!=n.c)throw hv(new Fv)}function _Y(n){return MK(n.b<n.d.gc()),n.d.Xb(n.c=n.b++)}function BY(n){n.a.a=n.c,n.c.b=n.a,n.a.b=n.c.a=null,n.b=0}function HY(n){this.f=n,this.c=this.f.e,n.f>0&&XEn(this)}function UY(n,t){this.a=n,CK.call(this,n,uG(n.d,15).fd(t))}function GY(n,t){return ugn(EX(n)*jX(n),EX(t)*jX(t))}function qY(n,t){return ugn(EX(n)*jX(n),EX(t)*jX(t))}function XY(n){return BNn(n)&&oM(gK(zDn(n,(jYn(),hMt))))}function zY(n,t){return UNn(n,uG(oIn(t,(jYn(),UMt)),17),t)}function VY(n,t){return uG(oIn(n,(GYn(),Vpt)),15).Fc(t),t}function WY(n,t){return n.b=t.b,n.c=t.c,n.d=t.d,n.a=t.a,n}function QY(n,t,e,i){this.b=n,this.c=i,rL.call(this,t,e)}function JY(n,t,e){n.i=0,n.e=0,t!=e&&tln(n,t,e)}function YY(n,t,e){n.i=0,n.e=0,t!=e&&eln(n,t,e)}function ZY(n,t,e){return JS(),opn(uG(cQ(n.e,t),529),e)}function nZ(n){return n.f||(n.f=new OE(n,n.c))}function tZ(n,t){return Hwn(n.j,t.s,t.c)+Hwn(t.e,n.s,n.c)}function eZ(n,t){n.e&&!n.e.a&&(iv(n.e,t),eZ(n.e,t))}function iZ(n,t){n.d&&!n.d.a&&(iv(n.d,t),iZ(n.d,t))}function rZ(n,t){return-ugn(EX(n)*jX(n),EX(t)*jX(t))}function cZ(n){return uG(n.ld(),149).Pg()+":"+cpn(n.md())}function aZ(){HIn(this,new Fl),this.wb=(tQ(),M_t),vj()}function oZ(n){this.b=new Zm,Ohn(this.b,this.b),this.a=n}function uZ(n,t){new lS,this.a=new Uk,this.b=n,this.c=t}function sZ(){sZ=E,Jot=new N,Yot=new N,Zot=new $}function hZ(){hZ=E,zot=new C,Vot=new O,Wot=new A}function fZ(){fZ=E,Gut=new dn,Xut=new tz,qut=new gn}function lZ(){lZ=E,aft=new Zm,cft=new Ym,rft=new Zm}function bZ(n,t){if(null==n)throw hv(new MM(t));return n}function wZ(n){return!n.a&&(n.a=new fV(bFt,n,10,11)),n.a}function dZ(n){return!n.q&&(n.q=new fV(p_t,n,11,10)),n.q}function gZ(n){return!n.s&&(n.s=new fV(o_t,n,21,17)),n.s}function pZ(n){return WW(n),KMn(new Fz(ix(n.a.Kc(),new h)))}function mZ(n,t){return Tbn(n),Tbn(t),cM(uG(n,22),uG(t,22))}function vZ(n,t,e){nrn(n,t,new Pb(Q_(e)))}function kZ(n,t,e,i,r,c){wtn.call(this,n,t,e,i,r,c?-2:-1)}function yZ(n,t,e,i){LA.call(this,t,e),this.b=n,this.a=i}function MZ(n,t){Sy.call(this,new Hz(n)),this.a=n,this.b=t}function TZ(n){this.b=n,this.c=n,n.e=null,n.c=null,this.a=1}function jZ(n){var t;GB(),(t=uG(n.g,10)).n.a=n.d.c+t.d.b}function EZ(){var n,t;EZ=E,t=!ovn(),n=new v,_at=t?new m:n}function SZ(n){return hZ(),F$(n,59)?new eT(n):new gx(n)}function PZ(n){return F$(n,16)?new oX(uG(n,16)):cG(n.Kc())}function CZ(n){return new WD(n,n.e.Rd().gc()*n.c.Rd().gc())}function IZ(n){return new QD(n,n.e.Rd().gc()*n.c.Rd().gc())}function OZ(n){return n&&n.hashCode?n.hashCode():xx(n)}function AZ(n,t){return null==t?!!FX(n.f,null):_X(n.i,t)}function LZ(n,t){var e;return(e=Q$(n.a,t))&&(t.d=null),e}function NZ(n,t,e){return!!n.f&&n.f.ef(t,e)}function $Z(n,t,e,i){uQ(n.c[t.g],e.g,i),uQ(n.c[e.g],t.g,i)}function DZ(n,t,e,i){uQ(n.c[t.g],t.g,e),uQ(n.b[t.g],t.g,i)}function xZ(n,t,e){return uM(pK(e.a))<=n&&uM(pK(e.b))>=t}function RZ(n,t){this.g=n,this.d=Uhn(cT(pbt,1),e6n,10,0,[t])}function KZ(n){this.c=n,this.b=new Hj(uG(WW(new pn),50))}function FZ(n){this.c=n,this.b=new Hj(uG(WW(new jt),50))}function _Z(n){this.b=n,this.a=new Hj(uG(WW(new nt),50))}function BZ(){this.b=new ek,this.d=new lS,this.e=new Ok}function HZ(){this.c=new sj,this.d=new sj,this.e=new sj}function UZ(){this.a=new Uk,this.b=(man(3,g1n),new R7(3))}function GZ(n,t){this.e=n,this.a=dat,this.b=$Bn(t),this.c=t}function qZ(n){this.c=n.c,this.d=n.d,this.b=n.b,this.a=n.a}function XZ(n,t,e,i,r,c){this.a=n,Ran.call(this,t,e,i,r,c)}function zZ(n,t,e,i,r,c){this.a=n,Ran.call(this,t,e,i,r,c)}function VZ(n,t,e,i,r,c,a){return new i8(n.e,t,e,i,r,c,a)}function WZ(n,t,e){return e>=0&&m_(n.substr(e,t.length),t)}function QZ(n,t){return F$(t,149)&&m_(n.b,uG(t,149).Pg())}function JZ(n,t){return n.a?t.Gh().Kc():uG(t.Gh(),71).Ii()}function YZ(n,t){var e;return w8(e=n.b.Qc(t),n.b.gc()),e}function ZZ(n,t){if(null==n)throw hv(new MM(t));return n}function n1(n){return n.u||(y9(n),n.u=new aF(n,n)),n.u}function t1(n){this.a=(hZ(),F$(n,59)?new eT(n):new gx(n))}function e1(n){return uG(Lsn(n,16),29)||n.ii()}function i1(n,t){var e;return e=Ij(n.Rm),null==t?e:e+": "+t}function r1(n,t,e){return Knn(t,e,n.length),n.substr(t,e-t)}function c1(n,t){HF.call(this),Qrn(this),this.a=n,this.c=t}function a1(n){n&&i1(n,n.ie()),String.fromCharCode(10)}function o1(n){XM(),e.setTimeout((function(){throw n}),0)}function u1(){return _kn(),Uhn(cT(nst,1),p1n,436,0,[Wut,Vut])}function s1(){return Xin(),Uhn(cT(mst,1),p1n,435,0,[Yut,Zut])}function h1(){return zin(),Uhn(cT(mlt,1),p1n,432,0,[gft,pft])}function f1(){return Aun(),Uhn(cT(Dbt,1),p1n,517,0,[Obt,Ibt])}function l1(){return Wtn(),Uhn(cT(Hgt,1),p1n,487,0,[Ngt,Lgt])}function b1(){return Vin(),Uhn(cT(Mgt,1),p1n,428,0,[dgt,ggt])}function w1(){return H7(),Uhn(cT(tgt,1),p1n,431,0,[Vdt,Wdt])}function d1(){return nin(),Uhn(cT(Jjt,1),p1n,430,0,[Gjt,qjt])}function g1(){return Z6(),Uhn(cT(cSt,1),p1n,531,0,[YEt,JEt])}function p1(){return b0(),Uhn(cT(gSt,1),p1n,523,0,[fSt,hSt])}function m1(){return w0(),Uhn(cT(xSt,1),p1n,522,0,[wSt,dSt])}function v1(){return _7(),Uhn(cT(qSt,1),p1n,528,0,[DSt,$St])}function k1(){return Y6(),Uhn(cT(Nmt,1),p1n,429,0,[kpt,ypt])}function y1(){return a9(),Uhn(cT(CAt,1),p1n,490,0,[yAt,MAt])}function M1(){return rhn(),Uhn(cT($At,1),p1n,491,0,[OAt,AAt])}function T1(){return i3(),Uhn(cT(QCt,1),p1n,433,0,[_Ct,FCt])}function j1(){return Ptn(),Uhn(cT(lIt,1),p1n,434,0,[cIt,aIt])}function E1(){return l0(),Uhn(cT(JSt,1),p1n,464,0,[USt,GSt])}function S1(){return pon(),Uhn(cT(iIt,1),p1n,500,0,[VCt,WCt])}function P1(){return B7(),Uhn(cT(uLt,1),p1n,438,0,[nLt,ZAt])}function C1(){return Vhn(),Uhn(cT(JLt,1),p1n,437,0,[VLt,zLt])}function I1(){return CU(),Uhn(cT(jKt,1),p1n,347,0,[gKt,pKt])}function O1(n,t,e,i){return e>=0?n.Uh(t,e,i):n.Ch(null,e,i)}function A1(n){return 0==n.b.b?n.a.sf():tG(n.b)}function L1(n){if(5!=n.p)throw hv(new xv);return pz(n.f)}function N1(n){if(5!=n.p)throw hv(new xv);return pz(n.k)}function $1(n){return xA(n.a)===xA((Oun(),Q_t))&&eVn(n),n.a}function D1(n,t){n.b=t,n.c>0&&n.b>0&&(n.g=mX(n.c,n.b,n.a))}function x1(n,t){n.c=t,n.c>0&&n.b>0&&(n.g=mX(n.c,n.b,n.a))}function R1(n,t){nw(this,new MO(n.a,n.b)),tw(this,oG(t))}function K1(){Py.call(this,new sS(orn(12))),FD(!0),this.a=2}function F1(n,t,e){QYn(),Qm.call(this,n),this.b=t,this.a=e}function _1(n,t,e){ZN(),Hm.call(this,t),this.a=n,this.b=e}function B1(n){var t;t=n.c.d.b,n.b=t,n.a=n.c.d,t.a=n.c.d.b=n}function H1(n){return 0==n.b?null:(MK(0!=n.b),Lrn(n,n.a.a))}function U1(n,t){return null==t?DA(FX(n.f,null)):_P(n.i,t)}function G1(n,t,e,i,r){return new AOn(n,(Rtn(),vut),t,e,i,r)}function q1(n,t){return V5(t),Jcn(n,Inn(YHt,W1n,28,t,15,1),t)}function X1(n,t){return bZ(n,"set1"),bZ(t,"set2"),new GE(n,t)}function z1(n,t){var e=Rat[n.charCodeAt(0)];return null==e?n:e}function V1(n,t){var e;return pWn(n,t,e=new B),e.d}function W1(n,t,e,i){var r;r=new AF,t.a[e.g]=r,UV(n.b,i,r)}function Q1(n,t){return JF(BR(Lcn(n.f,t)),n.f.d)}function J1(n){Lan(n.a),zN(n.a),Apn(new Ad(n.a))}function Y1(n,t){iBn(n,!0),Prn(n.e.Rf(),new DB(n,!0,t))}function Z1(n,t){return lZ(),n==R0(bIn(t))||n==R0(gIn(t))}function n0(n,t){return tcn(),uG(oIn(t,(QGn(),ACt)),17).a==n}function t0(n){return 0|Math.max(Math.min(n,vZn),-2147483648)}function e0(n){this.a=uG(WW(n),277),this.b=(hZ(),new mx(n))}function i0(n,t,e){this.i=new Zm,this.b=n,this.g=t,this.a=e}function r0(n,t,e){this.a=new Zm,this.e=n,this.f=t,this.c=e}function c0(n,t,e){this.c=new Zm,this.e=n,this.f=t,this.b=e}function a0(n){HF.call(this),Qrn(this),this.a=n,this.c=!0}function o0(n){function t(){}return t.prototype=n||{},new t}function u0(n){if(n.Ae())return null;var t=n.n;return sZn[t]}function s0(n){return n.Db>>16!=3?null:uG(n.Cb,27)}function h0(n){return n.Db>>16!=9?null:uG(n.Cb,27)}function f0(n){return n.Db>>16!=6?null:uG(n.Cb,74)}function l0(){l0=E,USt=new XI(z2n,0),GSt=new XI(V2n,1)}function b0(){b0=E,fSt=new OI(V2n,0),hSt=new OI(z2n,1)}function w0(){w0=E,wSt=new AI(c3n,0),dSt=new AI("UP",1)}function d0(){d0=E,Aat=Abn((Hy(),Uhn(cT(Lat,1),p1n,549,0,[Iat])))}function g0(n){var t;return Dfn(t=new Dj(orn(n.length)),n),t}function p0(n,t){return n.b+=t.b,n.c+=t.c,n.d+=t.d,n.a+=t.a,n}function m0(n,t){return!!Chn(n,t)&&(lan(n),!0)}function v0(n,t){if(null==t)throw hv(new Rv);return Tvn(n,t)}function k0(n,t){var e;e=n.q.getHours(),n.q.setDate(t),Iqn(n,e)}function y0(n,t,e){var i;(i=n.Ih(t))>=0?n.bi(i,e):lRn(n,t,e)}function M0(n,t){var e;return(e=n.Ih(t))>=0?n.Wh(e):$Nn(n,t)}function T0(n,t){var e;for(WW(t),e=n.a;e;e=e.c)t.Yd(e.g,e.i)}function j0(n,t,e){var i;i=Ufn(n,t,e),n.b=new Don(i.c.length)}function E0(n,t,e){W0(),n&&vJ(LFt,n,t),n&&vJ(AFt,n,e)}function S0(n,t){return UB(),qx(),uG(t.a,17).a<n}function P0(n,t){return UB(),qx(),uG(t.b,17).a<n}function C0(n,t){return e.Math.abs(n)<e.Math.abs(t)?n:t}function I0(n){return!n.a&&(n.a=new fV(bFt,n,10,11)),n.a.i>0}function O0(n){var t;return t=n.d,t=n.bj(n.f),ttn(n,t),t.Ob()}function A0(n,t){var e;return zCn(e=new aX(t),n),new Z_(e)}function L0(n){if(0!=n.p)throw hv(new xv);return HA(n.f,0)}function N0(n){if(0!=n.p)throw hv(new xv);return HA(n.k,0)}function $0(n){return n.Db>>16!=7?null:uG(n.Cb,241)}function D0(n){return n.Db>>16!=6?null:uG(n.Cb,241)}function x0(n){return n.Db>>16!=7?null:uG(n.Cb,167)}function R0(n){return n.Db>>16!=11?null:uG(n.Cb,27)}function K0(n){return n.Db>>16!=17?null:uG(n.Cb,29)}function F0(n){return n.Db>>16!=3?null:uG(n.Cb,155)}function _0(n){return vgn(n),JJ(n,new Md(new ek))}function B0(n,t){var e=n.a=n.a||[];return e[t]||(e[t]=n.ve(t))}function H0(n,t){var e;e=n.q.getHours(),n.q.setMonth(t),Iqn(n,e)}function U0(n,t){LD(this),this.f=t,this.g=n,KY(this),this.je()}function G0(n,t){this.a=n,this.c=D$(this.a),this.b=new qZ(t)}function q0(n,t,e){this.a=t,this.c=n,this.b=(WW(e),new Z_(e))}function X0(n,t,e){this.a=t,this.c=n,this.b=(WW(e),new Z_(e))}function z0(n){this.a=n,this.b=Inn(WEt,zZn,2043,n.e.length,0,2)}function V0(){this.a=new XL,this.e=new ek,this.g=0,this.i=0}function W0(){W0=E,LFt=new Ym,AFt=new Ym,pA(iut,new fs)}function Q0(){Q0=E,jEt=wz(new wJ,(uIn(),Plt),(zYn(),Owt))}function J0(){J0=E,EEt=wz(new wJ,(uIn(),Plt),(zYn(),Owt))}function Y0(){Y0=E,PEt=wz(new wJ,(uIn(),Plt),(zYn(),Owt))}function Z0(){Z0=E,tSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function n2(){n2=E,aSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function t2(){t2=E,sSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function e2(){e2=E,mSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function i2(n,t,e,i,r,c){return new Ken(n.e,t,n.Lj(),e,i,r,c)}function r2(n,t,e){return null==t?VAn(n.f,null,e):kgn(n.i,t,e)}function c2(n,t){n.c&&men(n.c.g,n),n.c=t,n.c&&kD(n.c.g,n)}function a2(n,t){n.c&&men(n.c.a,n),n.c=t,n.c&&kD(n.c.a,n)}function o2(n,t){n.i&&men(n.i.j,n),n.i=t,n.i&&kD(n.i.j,n)}function u2(n,t){n.d&&men(n.d.e,n),n.d=t,n.d&&kD(n.d.e,n)}function s2(n,t){n.a&&men(n.a.k,n),n.a=t,n.a&&kD(n.a.k,n)}function h2(n,t){n.b&&men(n.b.f,n),n.b=t,n.b&&kD(n.b.f,n)}function f2(n,t){dQ(n,n.b,n.c),uG(n.b.b,68),t&&uG(t.b,68).b}function l2(n,t){return ugn(uG(n.c,65).c.e.b,uG(t.c,65).c.e.b)}function b2(n,t){return ugn(uG(n.c,65).c.e.a,uG(t.c,65).c.e.a)}function w2(n){return Mbn(),qx(),0!=uG(n.a,86).d.e}function d2(n,t){F$(n.Cb,184)&&(uG(n.Cb,184).tb=null),qon(n,t)}function g2(n,t){F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),4),qon(n,t)}function p2(n,t){Pgn(n,t),F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),2)}function m2(n,t){null!=t.c&&pQ(n,new QW(t.c))}function v2(n){var t;return vj(),Urn(t=new ev,n),t}function k2(n){var t;return vj(),Urn(t=new ev,n),t}function y2(n){for(var t;;)if(t=n.Pb(),!n.Ob())return t}function M2(n,t,e){return kD(n.a,(TJ(),IMn(t,e),new FE(t,e))),n}function T2(n,t){return PP(),ein(t)?new Cq(t,n):new OA(t,n)}function j2(n){return cHn(),dwn(n,0)>=0?Rmn(n):hW(Rmn(Men(n)))}function E2(n){var t;return t=uG(tq(n.b),9),new nB(n.a,t,n.c)}function S2(n,t){var e;return(e=uG(Xwn(nZ(n.a),t),16))?e.gc():0}function P2(n,t,e){var i;hdn(t,e,n.c.length),i=e-t,nE(n.c,t,i)}function C2(n,t,e){hdn(t,e,n.gc()),this.c=n,this.a=t,this.b=e-t}function I2(n){this.c=new lS,this.b=n.b,this.d=n.c,this.a=n.a}function O2(n){this.a=e.Math.cos(n),this.b=e.Math.sin(n)}function A2(n,t,e,i){this.c=n,this.d=i,s2(this,t),h2(this,e)}function L2(n,t){Ey.call(this,new sS(orn(n))),man(t,XZn),this.a=t}function N2(n,t,e){return new AOn(n,(Rtn(),mut),null,!1,t,e)}function $2(n,t,e){return new AOn(n,(Rtn(),kut),t,e,null,!1)}function D2(){return ybn(),Uhn(cT(Rut,1),p1n,108,0,[Cut,Iut,Out])}function x2(){return Yen(),Uhn(cT(hht,1),p1n,471,0,[Fst,Kst,Rst])}function R2(){return Ktn(),Uhn(cT(xst,1),p1n,470,0,[Ast,Ost,Lst])}function K2(){return Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])}function F2(){return Jen(),Uhn(cT(Clt,1),p1n,391,0,[glt,dlt,plt])}function _2(){return gon(),Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])}function B2(){return jan(),Uhn(cT(agt,1),p1n,322,0,[Zdt,Ydt,ngt])}function H2(){return ran(),Uhn(cT(bgt,1),p1n,351,0,[igt,cgt,rgt])}function U2(){return Pfn(),Uhn(cT(Ogt,1),p1n,459,0,[kgt,vgt,ygt])}function G2(){return ihn(),Uhn(cT(mpt,1),p1n,298,0,[fpt,lpt,hpt])}function q2(){return Zen(),Uhn(cT(Mpt,1),p1n,311,0,[gpt,ppt,dpt])}function X2(){return Cwn(),Uhn(cT(pjt,1),p1n,390,0,[ujt,sjt,hjt])}function z2(){return can(),Uhn(cT(eEt,1),p1n,462,0,[Qjt,Vjt,Wjt])}function V2(){return isn(),Uhn(cT(oEt,1),p1n,387,0,[Zjt,nEt,tEt])}function W2(){return Sln(),Uhn(cT(lEt,1),p1n,349,0,[aEt,rEt,cEt])}function Q2(){return kbn(),Uhn(cT(pEt,1),p1n,350,0,[sEt,hEt,fEt])}function J2(){return ian(),Uhn(cT(MEt,1),p1n,352,0,[gEt,wEt,dEt])}function Y2(){return zhn(),Uhn(cT(xEt,1),p1n,388,0,[kEt,yEt,vEt])}function Z2(){return ean(),Uhn(cT(qEt,1),p1n,463,0,[_Et,BEt,HEt])}function n3(n){return Gfn(Uhn(cT(PNt,1),zZn,8,0,[n.i.n,n.n,n.a]))}function t3(){return Pln(),Uhn(cT(RCt,1),p1n,392,0,[gPt,dPt,wPt])}function e3(){e3=E,UCt=wz(new wJ,(Cjn(),WSt),(OHn(),ePt))}function i3(){i3=E,_Ct=new JI("DFS",0),FCt=new JI("BFS",1)}function r3(n,t,e){var i;(i=new ia).b=t,i.a=e,++t.b,kD(n.d,i)}function c3(n,t,e){var i;JF(i=new eN(e.d),n),jgn(t,i.a,i.b)}function a3(n,t){pD(n,pz(E3($z(t,24),W0n)),pz(E3(t,W0n)))}function o3(n,t){if(n<0||n>t)throw hv(new dM(h2n+n+f2n+t))}function u3(n,t){if(n<0||n>=t)throw hv(new dM(h2n+n+f2n+t))}function s3(n,t){if(n<0||n>=t)throw hv(new JM(h2n+n+f2n+t))}function h3(n,t){this.b=(tJ(n),n),this.a=0==(t&j0n)?64|t|VZn:t}function f3(n){return vgn(n),sZ(),sZ(),krn(n,Yot)}function l3(n,t,e){var i;return(i=uXn(n,t,!1)).b<=t&&i.a<=e}function b3(){return den(),Uhn(cT(LAt,1),p1n,439,0,[EAt,PAt,SAt])}function w3(){return Bgn(),Uhn(cT(kAt,1),p1n,394,0,[IOt,OOt,COt])}function d3(){return Jmn(),Uhn(cT(dOt,1),p1n,445,0,[oOt,uOt,sOt])}function g3(){return Zyn(),Uhn(cT(AOt,1),p1n,455,0,[lOt,wOt,bOt])}function p3(){return vbn(),Uhn(cT(nOt,1),p1n,393,0,[sIt,hIt,fIt])}function m3(){return esn(),Uhn(cT(hOt,1),p1n,299,0,[iOt,rOt,eOt])}function v3(){return Zrn(),Uhn(cT(lxt,1),p1n,278,0,[ixt,rxt,cxt])}function k3(){return Iwn(),Uhn(cT(mKt,1),p1n,280,0,[lKt,fKt,bKt])}function y3(){return Own(),Uhn(cT(Kxt,1),p1n,346,0,[Oxt,Ixt,Axt])}function M3(){return Rdn(),Uhn(cT(VAt,1),p1n,444,0,[HAt,UAt,GAt])}function T3(n){return WW(n),F$(n,16)?new Z_(uG(n,16)):rG(n.Kc())}function j3(n,t){return n&&n.equals?n.equals(t):xA(n)===xA(t)}function E3(n,t){return Esn(Oz(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function S3(n,t){return Esn(Az(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function P3(n,t){return Esn(Lz(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function C3(n,t){var e;return kK(!!(e=(tJ(n),n).g)),tJ(t),e(t)}function I3(n,t){var e,i;return i=KV(n,t),e=n.a.fd(i),new BE(n,e)}function O3(n){return n.Db>>16!=6?null:uG(J$n(n),241)}function A3(n){if(2!=n.p)throw hv(new xv);return pz(n.f)&D1n}function L3(n){if(2!=n.p)throw hv(new xv);return pz(n.k)&D1n}function N3(n){return MK(n.a<n.c.c.length),n.b=n.a++,n.c.c[n.b]}function $3(n,t){n.b=n.b|t.b,n.c=n.c|t.c,n.d=n.d|t.d,n.a=n.a|t.a}function D3(n,t){var e;e=uM(pK(n.a.of((XYn(),LDt)))),pJn(n,t,e)}function x3(n,t){VV.call(this,1,2,Uhn(cT(YHt,1),W1n,28,15,[n,t]))}function R3(n,t,e){Qm.call(this,25),this.b=n,this.a=t,this.c=e}function K3(n){QYn(),Qm.call(this,n),this.c=!1,this.a=!1}function F3(n){return n.a==(N7(),TBt)&&gw(n,X_n(n.g,n.b)),n.a}function _3(n){return n.d==(N7(),TBt)&&mw(n,oqn(n.g,n.b)),n.d}function B3(n,t){return Win(),n.c==t.c?ugn(t.d,n.d):ugn(t.c,n.c)}function H3(n,t){return Win(),n.c==t.c?ugn(t.d,n.d):ugn(n.c,t.c)}function U3(n,t){return Win(),n.c==t.c?ugn(n.d,t.d):ugn(n.c,t.c)}function G3(n,t){return Win(),n.c==t.c?ugn(n.d,t.d):ugn(t.c,n.c)}function q3(n,t){return KX(n.a,t)?nq(n.b,uG(t,22).g,null):null}function X3(n){return Lgn(Nz(Bsn(uRn(n,32)),32),Bsn(uRn(n,32)))}function z3(n){return null==n.b||0==n.b.length?"n_"+n.a:"n_"+n.b}function V3(n){return null==n.c||0==n.c.length?"n_"+n.g:"n_"+n.c}function W3(n,t){var e;for(e=n+"";e.length<t;)e="0"+e;return e}function Q3(n,t){var e;e=uG(cQ(n.g,t),60),Prn(t.d,new HC(n,e))}function J3(n,t){var e,i;return(e=qTn(n))<(i=qTn(t))?-1:e>i?1:0}function Y3(n,t){var e;return e=jen(t),uG(cQ(n.c,e),17).a}function Z3(n,t,e){var i;i=n.d[t.p],n.d[t.p]=n.d[e.p],n.d[e.p]=i}function n4(n,t,e){var i;n.n&&t&&e&&(i=new Yu,kD(n.e,i))}function t4(n,t){if(FV(n.a,t),t.d)throw hv(new Ky(p2n));t.d=n}function e4(n,t){this.a=new Zm,this.d=new Zm,this.f=n,this.c=t}function i4(){this.c=new z$,this.a=new p7,this.b=new yk,XS()}function r4(){Whn(),this.b=new Ym,this.a=new Ym,this.c=new Zm}function c4(n,t,e){this.d=n,this.j=t,this.e=e,this.o=-1,this.p=3}function a4(n,t,e){this.d=n,this.k=t,this.f=e,this.o=-1,this.p=5}function o4(n,t,e,i,r,c){Bcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function u4(n,t,e,i,r,c){Hcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function s4(n,t,e,i,r,c){E9.call(this,n,t,e,i,r),c&&(this.o=-2)}function h4(n,t,e,i,r,c){qcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function f4(n,t,e,i,r,c){S9.call(this,n,t,e,i,r),c&&(this.o=-2)}function l4(n,t,e,i,r,c){Ucn.call(this,n,t,e,i,r),c&&(this.o=-2)}function b4(n,t,e,i,r,c){Gcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function w4(n,t,e,i,r,c){P9.call(this,n,t,e,i,r),c&&(this.o=-2)}function d4(n,t,e,i){Hm.call(this,e),this.b=n,this.c=t,this.d=i}function g4(n,t){this.f=n,this.a=(N7(),MBt),this.c=MBt,this.b=t}function p4(n,t){this.g=n,this.d=(N7(),TBt),this.a=TBt,this.b=t}function m4(n,t){!n.c&&(n.c=new wsn(n,0)),BXn(n.c,(uVn(),nHt),t)}function v4(n,t){return lxn(n,t,F$(t,102)&&0!=(uG(t,19).Bb&P0n))}function k4(n,t){return rW(Bsn(n.q.getTime()),Bsn(t.q.getTime()))}function y4(n){return Dq(n.e.Rd().gc()*n.c.Rd().gc(),16,new zl(n))}function M4(n){return!(!n.u||0==z5(n.u.a).i||n.n&&yMn(n.n))}function T4(n){return!(!n.a||0==Aen(n.a.a).i||n.b&&MMn(n.b))}function j4(n,t){return 0==t?!!n.o&&0!=n.o.f:Wkn(n,t)}function E4(n,t,e){var i;return!!(i=uG(n.Zb().xc(t),16))&&i.Hc(e)}function S4(n,t,e){var i;return!!(i=uG(n.Zb().xc(t),16))&&i.Mc(e)}function P4(n,t){var e;return e=1-t,n.a[e]=Ton(n.a[e],e),Ton(n,t)}function C4(n,t){var e;return e=E3(n,L0n),S3(Nz(t,32),e)}function I4(n,t,e){WW(n),mjn(new q0(new Z_(n),t,e))}function O4(n,t,e){WW(n),vjn(new X0(new Z_(n),t,e))}function A4(n,t,e,i,r,c){return Dsn(n,t,e,c),gdn(n,i),vdn(n,r),n}function L4(n,t,e,i){return n.a+=""+r1(null==t?IZn:cpn(t),e,i),n}function N4(n,t){this.a=n,Jw.call(this,n),o3(t,n.gc()),this.b=t}function $4(n){this.a=Inn(dat,EZn,1,pfn(e.Math.max(8,n))<<1,5,1)}function D4(n){return uG(Ekn(n,Inn(pbt,e6n,10,n.c.length,0,1)),199)}function x4(n){return uG(Ekn(n,Inn(obt,t6n,18,n.c.length,0,1)),482)}function R4(n){return n.a?0==n.e.length?n.a.a:n.a.a+""+n.e:n.c}function K4(n){for(;n.d>0&&0==n.a[--n.d];);0==n.a[n.d++]&&(n.e=0)}function F4(n){return MK(n.b.b!=n.d.a),n.c=n.b=n.b.b,--n.a,n.c.c}function _4(n,t,e){n.a=t,n.c=e,n.b.a.$b(),BY(n.d),Xv(n.e.a.c,0)}function B4(n,t){var e;n.e=new dy,f$(e=GFn(t),n.c),T_n(n,e,0)}function H4(n,t,e,i){var r;(r=new gu).a=t,r.b=e,r.c=i,aq(n.a,r)}function U4(n,t,e,i){var r;(r=new gu).a=t,r.b=e,r.c=i,aq(n.b,r)}function G4(n,t,e){if(n<0||t<n||t>e)throw hv(new dM(QOn(n,t,e)))}function q4(n,t){if(n<0||n>=t)throw hv(new dM(TLn(n,t)));return n}function X4(n){if(!("stack"in n))try{throw n}catch(t){}return n}function z4(n){return JS(),F$(n.g,10)?uG(n.g,10):null}function V4(n){return!uY(n).dc()&&(h$(n,new w),!0)}function W4(n){var t;return _L(n)?-0==(t=n)?0:t:Gen(n)}function Q4(n,t){return!!F$(t,44)&&sTn(n.a,uG(t,44))}function J4(n,t){return!!F$(t,44)&&sTn(n.a,uG(t,44))}function Y4(n,t){return!!F$(t,44)&&sTn(n.a,uG(t,44))}function Z4(n){var t;return GQ(n),t=new D,tE(n.a,new vd(t)),t}function n6(){var n,t;return n=new ev,kD(gBt,t=n),t}function t6(n){var t;return GQ(n),t=new x,tE(n.a,new kd(t)),t}function e6(n,t){return n.a<=n.b&&(t.Dd(n.a++),!0)}function i6(n){dun.call(this,n,(Rtn(),put),null,!1,null,!1)}function r6(){r6=E,_ht=Abn((BS(),Uhn(cT(oft,1),p1n,488,0,[Kht])))}function c6(){c6=E,$Et=MJ(xwn(1),xwn(4)),NEt=MJ(xwn(1),xwn(2))}function a6(n,t){return new LU(t,HR(D$(t.e),n,n),(qx(),!0))}function o6(n){return new R7((man(n,v1n),arn(Lgn(Lgn(5,n),n/10|0))))}function u6(n){return Dq(n.e.Rd().gc()*n.c.Rd().gc(),273,new Xl(n))}function s6(n){return uG(Ekn(n,Inn(Abt,i6n,12,n.c.length,0,1)),2042)}function h6(n){return n2(),!(v9(n)||!v9(n)&&n.c.i.c==n.d.i.c)}function f6(n,t){return ncn(),uG(oIn(t,(QGn(),kCt)),17).a>=n.gc()}function l6(n,t){_Jn(t,n),NG(n.d),NG(uG(oIn(n,(jYn(),SMt)),214))}function b6(n,t){BJn(t,n),$G(n.d),$G(uG(oIn(n,(jYn(),SMt)),214))}function w6(n,t,e){n.d&&men(n.d.e,n),n.d=t,n.d&&GX(n.d.e,e,n)}function d6(n,t,e){return e.f.c.length>0?HV(n.a,t,e):HV(n.b,t,e)}function g6(n,t,e){var i;i=bkn();try{return SF(n,t,e)}finally{m8(i)}}function p6(n,t){var e,i;return i=null,(e=v0(n,t))&&(i=e.pe()),i}function m6(n,t){var e,i;return i=null,(e=v0(n,t))&&(i=e.se()),i}function v6(n,t){var e,i;return i=null,(e=uin(n,t))&&(i=e.se()),i}function k6(n,t){var e,i;return i=null,(e=v0(n,t))&&(i=uAn(e)),i}function y6(n,t,e){var i;return i=jvn(e),yHn(n.g,i,t),yHn(n.i,t,e),t}function M6(n,t,e){this.d=new qg(this),this.e=n,this.i=t,this.f=e}function T6(n,t,e,i){this.e=null,this.c=n,this.d=t,this.a=e,this.b=i}function j6(n,t,e,i){A$(this),this.c=n,this.e=t,this.f=e,this.b=i}function E6(n,t,e,i){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1}function S6(n,t,e,i){return F$(e,59)?new Yx(n,t,e,i):new qz(n,t,e,i)}function P6(n){return F$(n,16)?uG(n,16).dc():!n.Kc().Ob()}function C6(n){if(n.e.g!=n.b)throw hv(new Fv);return!!n.c&&n.d>0}function I6(n){return MK(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function O6(n,t){tJ(t),uQ(n.a,n.c,t),n.c=n.c+1&n.a.length-1,JTn(n)}function A6(n,t){tJ(t),n.b=n.b-1&n.a.length-1,uQ(n.a,n.b,t),JTn(n)}function L6(n){var t;t=n.Gh(),this.a=F$(t,71)?uG(t,71).Ii():t.Kc()}function N6(n){return new h3(Vrn(uG(n.a.md(),16).gc(),n.a.ld()),16)}function $6(){$6=E,WAt=Abn((nP(),Uhn(cT(JAt,1),p1n,489,0,[zAt])))}function D6(){D6=E,YAt=Abn((tP(),Uhn(cT(tLt,1),p1n,558,0,[QAt])))}function x6(){x6=E,XLt=Abn((eP(),Uhn(cT(WLt,1),p1n,539,0,[GLt])))}function R6(){return Uvn(),Uhn(cT(abt,1),p1n,389,0,[tbt,Zlt,Ylt,nbt])}function K6(){return Rtn(),Uhn(cT(Tut,1),p1n,303,0,[put,mut,vut,kut])}function F6(){return vyn(),Uhn(cT(Sht,1),p1n,332,0,[yht,kht,Mht,Tht])}function _6(){return myn(),Uhn(cT(Fht,1),p1n,406,0,[Nht,Lht,$ht,Dht])}function B6(){return ehn(),Uhn(cT(jht,1),p1n,417,0,[pht,wht,dht,ght])}function H6(){return Xhn(),Uhn(cT(ebt,1),p1n,416,0,[Flt,Hlt,_lt,Blt])}function U6(){return qhn(),Uhn(cT(mdt,1),p1n,421,0,[odt,udt,sdt,hdt])}function G6(){return Ghn(),Uhn(cT(adt,1),p1n,371,0,[zwt,qwt,Xwt,Gwt])}function q6(){return Yyn(),Uhn(cT(jjt,1),p1n,203,0,[djt,gjt,wjt,bjt])}function X6(){return yvn(),Uhn(cT(Xjt,1),p1n,284,0,[Fjt,Kjt,_jt,Bjt])}function z6(n){return n.j==(KQn(),KRt)&&$x(_$n(n),kRt)}function V6(n,t){var e;c2(e=t.a,t.c.d),u2(e,t.d.d),Xun(e.a,n.n)}function W6(n,t){var e;return!(e=uG(ain(n.b,t),67))&&(e=new lS),e}function Q6(n){return JS(),F$(n.g,154)?uG(n.g,154):null}function J6(n){n.a=null,n.e=null,Xv(n.b.c,0),Xv(n.f.c,0),n.c=null}function Y6(){Y6=E,kpt=new sI(G2n,0),ypt=new sI("TOP_LEFT",1)}function Z6(){Z6=E,YEt=new SI("UPPER",0),JEt=new SI("LOWER",1)}function n5(n,t){return bD(new MO(t.e.a+t.f.a/2,t.e.b+t.f.b/2),n)}function t5(n,t){return uG(yx(Wz(uG(Y9(n.k,t),15).Oc(),Fdt)),113)}function e5(n,t){return uG(yx(Qz(uG(Y9(n.k,t),15).Oc(),Fdt)),113)}function i5(){return Cjn(),Uhn(cT(ZSt,1),p1n,405,0,[zSt,VSt,WSt,QSt])}function r5(){return mbn(),Uhn(cT(BCt,1),p1n,353,0,[xCt,$Ct,DCt,NCt])}function c5(){return dTn(),Uhn(cT(cOt,1),p1n,354,0,[ZIt,JIt,YIt,QIt])}function a5(){return Qmn(),Uhn(cT(sKt,1),p1n,386,0,[QRt,JRt,WRt,VRt])}function o5(){return Ajn(),Uhn(cT(Wxt,1),p1n,290,0,[Rxt,$xt,Dxt,xxt])}function u5(){return _gn(),Uhn(cT(kxt,1),p1n,223,0,[fxt,sxt,uxt,hxt])}function s5(){return qpn(),Uhn(cT(SKt,1),p1n,320,0,[TKt,kKt,MKt,yKt])}function h5(){return Eln(),Uhn(cT(DKt,1),p1n,415,0,[CKt,IKt,PKt,OKt])}function f5(n){return W0(),PV(LFt,n)?uG(cQ(LFt,n),341).Qg():null}function l5(n,t,e){return t<0?$Nn(n,e):uG(e,69).wk().Bk(n,n.hi(),t)}function b5(n,t,e){var i;return i=jvn(e),yHn(n.j,i,t),vJ(n.k,t,e),t}function w5(n,t,e){var i;return i=jvn(e),yHn(n.d,i,t),vJ(n.e,t,e),t}function d5(n){var t;return gj(),t=new es,n&&ARn(t,n),t}function g5(n){var t;return t=n.aj(n.i),n.i>0&&qGn(n.g,0,t,0,n.i),t}function p5(n,t){var e;for(e=n.j.c.length;e<t;e++)kD(n.j,n.Ng())}function m5(n,t,e,i){var r;return r=i[t.g][e.g],uM(pK(oIn(n.a,r)))}function v5(n,t){var e;return TP(),!(e=uG(cQ(_Ft,n),57))||e.fk(t)}function k5(n){if(1!=n.p)throw hv(new xv);return pz(n.f)<<24>>24}function y5(n){if(1!=n.p)throw hv(new xv);return pz(n.k)<<24>>24}function M5(n){if(7!=n.p)throw hv(new xv);return pz(n.k)<<16>>16}function T5(n){if(7!=n.p)throw hv(new xv);return pz(n.f)<<16>>16}function j5(n,t){return 0==t.e||0==n.e?_ot:(b_n(),yKn(n,t))}function E5(n,t){return xA(t)===xA(n)?"(this Map)":null==t?IZn:cpn(t)}function S5(n,t,e){return Rz(pK(DA(FX(n.f,t))),pK(DA(FX(n.f,e))))}function P5(n,t,e){var i;i=uG(cQ(n.g,e),60),kD(n.a.c,new WO(t,i))}function C5(n,t,e){n.i=0,n.e=0,t!=e&&(eln(n,t,e),tln(n,t,e))}function I5(n,t,e,i,r){kD(t,uLn(r,Bxn(r,e,i))),LIn(n,r,t)}function O5(n,t,e,i,r){this.i=n,this.a=t,this.e=e,this.j=i,this.f=r}function A5(n,t){HZ.call(this),this.a=n,this.b=t,kD(this.a.b,this)}function L5(n){this.b=new Ym,this.c=new Ym,this.d=new Ym,this.a=n}function N5(n,t){var e;return e=new QM,n.Gd(e),e.a+="..",t.Hd(e),e.a}function $5(n,t){var e;for(e=t;e;)KR(n,e.i,e.j),e=R0(e);return n}function D5(n,t,e){var i;return i=jvn(e),vJ(n.b,i,t),vJ(n.c,t,e),t}function x5(n){var t;for(t=0;n.Ob();)n.Pb(),t=Lgn(t,1);return arn(t)}function R5(n,t){var e;return PP(),uOn(e=uG(n,69).vk(),t),e.xl(t)}function K5(n,t,e){if(e){var i=e.oe();n.a[t]=i(e)}else delete n.a[t]}function F5(n,t){var e;e=n.q.getHours(),n.q.setFullYear(t+V1n),Iqn(n,e)}function _5(n,t){return uG(null==t?DA(FX(n.f,null)):_P(n.i,t),288)}function B5(n,t){return n==(zIn(),dbt)&&t==dbt?4:n==dbt||t==dbt?8:32}function H5(n,t,e){return aqn(n,t,e,F$(t,102)&&0!=(uG(t,19).Bb&P0n))}function U5(n,t,e){return Dqn(n,t,e,F$(t,102)&&0!=(uG(t,19).Bb&P0n))}function G5(n,t,e){return Cxn(n,t,e,F$(t,102)&&0!=(uG(t,19).Bb&P0n))}function q5(n){n.b!=n.c&&(n.a=Inn(dat,EZn,1,8,5,1),n.b=0,n.c=0)}function X5(n){return MK(n.a<n.c.a.length),n.b=n.a,Sin(n),n.c.b[n.b]}function z5(n){return n.n||(y9(n),n.n=new hz(n,g_t,n),n1(n)),n.n}function V5(n){if(n<0)throw hv(new yM("Negative array size: "+n))}function W5(n,t,e){if(e){var i=e.oe();e=i(e)}else e=void 0;n.a[t]=e}function Q5(n,t){var e;return Cln(),0!=(e=n.j.g-t.j.g)?e:0}function J5(n,t){return bS(),String.fromCharCode(10),ttn(gZ(n.a),t)}function Y5(n,t){return bS(),String.fromCharCode(10),ttn(gZ(n.a),t)}function Z5(n,t){cHn(),VV.call(this,n,1,Uhn(cT(YHt,1),W1n,28,15,[t]))}function n8(n,t){QYn(),Qm.call(this,n),this.a=t,this.c=-1,this.b=-1}function t8(n,t,e,i){c4.call(this,1,e,i),Kf(this),this.c=n,this.b=t}function e8(n,t,e,i){a4.call(this,1,e,i),Kf(this),this.c=n,this.b=t}function i8(n,t,e,i,r,c,a){Ran.call(this,t,i,r,c,a),this.c=n,this.a=e}function r8(n,t,e){this.e=n,this.a=dat,this.b=$Bn(t),this.c=t,this.d=e}function c8(n){this.e=n,this.c=this.e.a,this.b=this.e.g,this.d=this.e.i}function a8(n){this.d=n,this.b=this.d.a.entries(),this.a=this.b.next()}function o8(n){this.c=n,this.a=uG(bEn(n),156),this.b=this.a.jk().wi()}function u8(){Ym.call(this),LR(this),this.d.b=this.d,this.d.a=this.d}function s8(n,t,e,i){var r;(r=new R).c=t,r.b=e,r.a=i,i.b=e.a=r,++n.b}function h8(n,t){return XA(null!=t?U1(n,t):DA(FX(n.f,t)))}function f8(n,t){return XA(null!=t?U1(n,t):DA(FX(n.f,t)))}function l8(n,t){return t.b.Kb(ven(n,t.c.Xe(),new jd(t)))}function b8(n,t){var e;return V5(t),(e=n.slice(0,t)).length=t,Ltn(e,n)}function w8(n,t){var e;for(e=0;e<t;++e)uQ(n,e,new Yw(uG(n[e],44)))}function d8(n,t){var e;for(e=n.d-1;e>=0&&n.a[e]===t[e];e--);return e<0}function g8(n){var t;return n?new aX(n):(Fon(t=new XL,n),t)}function p8(n,t){var e,i;i=!1;do{i|=e=Tfn(n,t)}while(e);return i}function m8(n){n&&Cin((Gy(),Fat)),--Uat,n&&-1!=qat&&(jL(qat),qat=-1)}function v8(n){aCn(),pD(this,pz(E3($z(n,24),W0n)),pz(E3(n,W0n)))}function k8(){k8=E,Jut=Abn((_kn(),Uhn(cT(nst,1),p1n,436,0,[Wut,Vut])))}function y8(){y8=E,tst=Abn((Xin(),Uhn(cT(mst,1),p1n,435,0,[Yut,Zut])))}function M8(){M8=E,vft=Abn((zin(),Uhn(cT(mlt,1),p1n,432,0,[gft,pft])))}function T8(){T8=E,Lbt=Abn((Aun(),Uhn(cT(Dbt,1),p1n,517,0,[Obt,Ibt])))}function j8(){j8=E,Dgt=Abn((Wtn(),Uhn(cT(Hgt,1),p1n,487,0,[Ngt,Lgt])))}function E8(){E8=E,mgt=Abn((Vin(),Uhn(cT(Mgt,1),p1n,428,0,[dgt,ggt])))}function S8(){S8=E,Jdt=Abn((H7(),Uhn(cT(tgt,1),p1n,431,0,[Vdt,Wdt])))}function P8(){P8=E,zjt=Abn((nin(),Uhn(cT(Jjt,1),p1n,430,0,[Gjt,qjt])))}function C8(){C8=E,nSt=Abn((Z6(),Uhn(cT(cSt,1),p1n,531,0,[YEt,JEt])))}function I8(){I8=E,bSt=Abn((b0(),Uhn(cT(gSt,1),p1n,523,0,[fSt,hSt])))}function O8(){O8=E,pSt=Abn((w0(),Uhn(cT(xSt,1),p1n,522,0,[wSt,dSt])))}function A8(){A8=E,RSt=Abn((_7(),Uhn(cT(qSt,1),p1n,528,0,[DSt,$St])))}function L8(){L8=E,Tpt=Abn((Y6(),Uhn(cT(Nmt,1),p1n,429,0,[kpt,ypt])))}function N8(){N8=E,XSt=Abn((l0(),Uhn(cT(JSt,1),p1n,464,0,[USt,GSt])))}function $8(){$8=E,uIt=Abn((Ptn(),Uhn(cT(lIt,1),p1n,434,0,[cIt,aIt])))}function D8(){D8=E,HCt=Abn((i3(),Uhn(cT(QCt,1),p1n,433,0,[_Ct,FCt])))}function x8(){x8=E,JCt=Abn((pon(),Uhn(cT(iIt,1),p1n,500,0,[VCt,WCt])))}function R8(){R8=E,jAt=Abn((a9(),Uhn(cT(CAt,1),p1n,490,0,[yAt,MAt])))}function K8(){K8=E,NAt=Abn((rhn(),Uhn(cT($At,1),p1n,491,0,[OAt,AAt])))}function F8(){F8=E,eLt=Abn((B7(),Uhn(cT(uLt,1),p1n,438,0,[nLt,ZAt])))}function _8(){_8=E,QLt=Abn((Vhn(),Uhn(cT(JLt,1),p1n,437,0,[VLt,zLt])))}function B8(){B8=E,vKt=Abn((CU(),Uhn(cT(jKt,1),p1n,347,0,[gKt,pKt])))}function H8(){return xdn(),Uhn(cT(axt,1),p1n,88,0,[ZDt,YDt,JDt,QDt,nxt])}function U8(){return KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])}function G8(n,t,e){return uG(null==t?VAn(n.f,null,e):kgn(n.i,t,e),288)}function q8(n){return(n.k==(zIn(),dbt)||n.k==lbt)&&vR(n,(GYn(),$pt))}function X8(n){return n.c&&n.d?z3(n.c)+"->"+z3(n.d):"e_"+xx(n)}function z8(n,t){var e,i;for(tJ(t),i=n.Kc();i.Ob();)e=i.Pb(),t.Cd(e)}function V8(n,t){var e;vZ(e=new _y,"x",t.a),vZ(e,"y",t.b),pQ(n,e)}function W8(n,t){var e;vZ(e=new _y,"x",t.a),vZ(e,"y",t.b),pQ(n,e)}function Q8(n,t){var e;for(e=t;e;)KR(n,-e.i,-e.j),e=R0(e);return n}function J8(n,t){var e,i;for(e=t,i=0;e>0;)i+=n.a[e],e-=e&-e;return i}function Y8(n,t,e){var i;return u3(t,n.c.length),i=n.c[t],n.c[t]=e,i}function Z8(n,t,e){n.a.c.length=0,sVn(n,t,e),0==n.a.c.length||mUn(n,t)}function n9(n){n.i=0,FP(n.b,null),FP(n.c,null),n.a=null,n.e=null,++n.g}function t9(){t9=E,Nut=!0,Aut=!1,Lut=!1,Dut=!1,$ut=!1}function e9(n){t9(),Nut||(this.c=n,this.e=!0,this.a=new Zm)}function i9(n,t){this.c=0,this.b=t,iL.call(this,n,17493),this.a=this.c}function r9(n){NYn(),dv(this),this.a=new lS,Lln(this,n),aq(this.a,n)}function c9(){IN(this),this.b=new MO(M0n,M0n),this.a=new MO(T0n,T0n)}function a9(){a9=E,yAt=new oO(x6n,0),MAt=new oO("TARGET_WIDTH",1)}function o9(n,t){return(vgn(n),Qj(new fX(n,new ien(t,n.a)))).Bd(Kut)}function u9(){return uIn(),Uhn(cT(Llt,1),p1n,367,0,[Tlt,jlt,Elt,Slt,Plt])}function s9(){return gPn(),Uhn(cT(Pdt,1),p1n,375,0,[wdt,gdt,pdt,ddt,bdt])}function h9(){return kvn(),Uhn(cT(pgt,1),p1n,348,0,[sgt,ugt,fgt,lgt,hgt])}function f9(){return pyn(),Uhn(cT(xjt,1),p1n,323,0,[Tjt,kjt,yjt,vjt,Mjt])}function l9(){return Gpn(),Uhn(cT(ajt,1),p1n,171,0,[Lmt,Cmt,Imt,Omt,Amt])}function b9(){return zPn(),Uhn(cT(oIt,1),p1n,368,0,[tIt,YCt,eIt,ZCt,nIt])}function w9(){return _Rn(),Uhn(cT(qAt,1),p1n,373,0,[xAt,DAt,KAt,RAt,FAt])}function d9(){return pOn(),Uhn(cT(qLt,1),p1n,324,0,[iLt,rLt,oLt,cLt,aLt])}function g9(){return Rkn(),Uhn(cT(MNt,1),p1n,170,0,[hNt,sNt,oNt,fNt,uNt])}function p9(){return Vkn(),Uhn(cT(hRt,1),p1n,256,0,[Zxt,tRt,Jxt,Yxt,nRt])}function m9(n){return XM(),function(){return g6(n,this,arguments)}}function v9(n){return!(!n.c||!n.d||!n.c.i||n.c.i!=n.d.i)}function k9(n,t){return!!F$(t,143)&&m_(n.c,uG(t,143).c)}function y9(n){return n.t||(n.t=new $m(n),$dn(new Qy(n),0,n.t)),n.t}function M9(n){this.b=n,DD.call(this,n),this.a=uG(Lsn(this.b.a,4),129)}function T9(n){this.b=n,nR.call(this,n),this.a=uG(Lsn(this.b.a,4),129)}function j9(n,t,e,i,r){b7.call(this,t,i,r),Kf(this),this.c=n,this.b=e}function E9(n,t,e,i,r){c4.call(this,t,i,r),Kf(this),this.c=n,this.a=e}function S9(n,t,e,i,r){a4.call(this,t,i,r),Kf(this),this.c=n,this.a=e}function P9(n,t,e,i,r){b7.call(this,t,i,r),Kf(this),this.c=n,this.a=e}function C9(n,t){return uG(ain(n.d,t),23)||uG(ain(n.e,t),23)}function I9(n,t){var e,i;return e=t.ld(),!!(i=n.Fe(e))&&OJ(i.e,t.md())}function O9(n,t){var e;return new FE(e=t.ld(),n.e.pc(e,uG(t.md(),16)))}function A9(n,t){var e;return null==(e=n.a.get(t))?Inn(dat,EZn,1,0,5,1):e}function L9(n){var t;return t=n.length,m_(S0n.substr(S0n.length-t,t),n)}function N9(n){if(hDn(n))return n.c=n.a,n.a.Pb();throw hv(new Bv)}function $9(n,t){return 0==t||0==n.e?n:t>0?MFn(n,t):rvn(n,-t)}function D9(n,t){return 0==t||0==n.e?n:t>0?rvn(n,t):MFn(n,-t)}function x9(n){xP.call(this,null==n?IZn:cpn(n),F$(n,82)?uG(n,82):null)}function R9(n){var t;return n.c||F$(t=n.r,90)&&(n.c=uG(t,29)),n.c}function K9(n){var t;return zsn(t=new UZ,n),kfn(t,(jYn(),bMt),null),t}function F9(n){var t,e;return t=n.c.i,e=n.d.i,t.k==(zIn(),lbt)&&e.k==lbt}function _9(n){return p$(n&f0n,n>>22&f0n,n<0?l0n:0)}function B9(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)qQ(t[e])}function H9(n,t){var e,i;(e=uG(zwn(n.c,t),16))&&(i=e.gc(),e.$b(),n.d-=i)}function U9(n,t,e){var i;return(i=n.Ih(t))>=0?n.Lh(i,e,!0):YNn(n,t,e)}function G9(n,t,e){return ugn(bD($kn(n),D$(t.b)),bD($kn(n),D$(e.b)))}function q9(n,t,e){return ugn(bD($kn(n),D$(t.e)),bD($kn(n),D$(e.e)))}function X9(n,t){return e.Math.min(atn(t.a,n.d.d.c),atn(t.b,n.d.d.c))}function z9(n,t){n._i(n.i+1),yD(n,n.i,n.Zi(n.i,t)),n.Mi(n.i++,t),n.Ni()}function V9(n){var t,e;++n.j,t=n.g,e=n.i,n.g=null,n.i=0,n.Oi(e,t),n.Ni()}function W9(n,t,e){var i;xun(i=new U$(n.a),n.a.a),VAn(i.f,t,e),n.a.a=i}function Q9(n,t,e,i){var r;for(r=0;r<$st;r++)qX(n.a[r][t.g],e,i[t.g])}function J9(n,t,e,i){var r;for(r=0;r<Nst;r++)XX(n.a[t.g][r],e,i[t.g])}function Y9(n,t){var e;return!(e=uG(n.c.xc(t),16))&&(e=n.ic(t)),n.pc(t,e)}function Z9(n){var t;return WW(n),_An(t=n?new Z_(n):rG(n.Kc())),Dwn(t)}function n7(n){var t;return WW(n),Dfn(t=new R7(yJ(n.length)),n),t}function t7(n,t,e,i){var r;return rCn(r=Inn(YHt,W1n,28,t,15,1),n,t,e,i),r}function e7(n,t){if(n<0||n>t)throw hv(new dM(iLn(n,t,"index")));return n}function i7(n,t){var e;return u3(t,n.c.length),e=n.c[t],nE(n.c,t,1),e}function r7(n,t){var e,i;return tJ(n),e=n,tJ(t),e==(i=t)?0:e<i?-1:1}function c7(n){var t;return t=n.e+n.f,isNaN(t)&&J_(n.d)?n.d:t}function a7(n){return n.e=3,n.d=n.Yb(),2!=n.e&&(n.e=0,!0)}function o7(n,t){return n.a?JA(n.a,n.b):n.a=new lx(n.d),WA(n.a,t),n}function u7(n,t){return RA(t)?null==t?Y$n(n.f,null):Vsn(n.i,t):Y$n(n.f,t)}function s7(n,t){eL.call(this,t.zd(),-6&t.yd()),tJ(n),this.a=n,this.b=t}function h7(n,t){iL.call(this,t.zd(),-6&t.yd()),tJ(n),this.a=n,this.b=t}function f7(n,t){rL.call(this,t.zd(),-6&t.yd()),tJ(n),this.a=n,this.b=t}function l7(n,t,e){Hm.call(this,e),this.b=n,this.c=t,this.d=(Pmn(),lBt)}function b7(n,t,e){this.d=n,this.k=t?1:0,this.f=e?1:0,this.o=-1,this.p=0}function w7(n){this.c=n,this.a=new Ww(this.c.a),this.b=new Ww(this.c.b)}function d7(){this.e=new Zm,this.c=new Zm,this.d=new Zm,this.b=new Zm}function g7(){this.g=new ok,this.b=new ok,this.a=new Zm,this.k=new Zm}function p7(){this.a=new gk,this.b=new Lk,this.d=new Ct,this.e=new Dt}function m7(n,t,e){this.a=n,this.c=t,this.d=e,kD(t.e,this),kD(e.b,this)}function v7(n,t,e){var i,r;for(i=0,r=0;r<t.length;r++)i+=n.tg(t[r],i,e)}function k7(n,t){var e;return e=$Vn(n,t),n.b=new Don(e.c.length),$zn(n,e)}function y7(n,t){var e;e=n.q.getHours()+(t/60|0),n.q.setMinutes(t),Iqn(n,e)}function M7(n){var t;return 0==(t=n.b).b?null:uG(hyn(t,0),65).b}function T7(n){return n.a?n.e?T7(n.e):null:n}function j7(n,t){return n.p<t.p?1:n.p>t.p?-1:0}function E7(n){var t;return n.a||F$(t=n.r,156)&&(n.a=uG(t,156)),n.a}function S7(n,t,e){return++n.e,--n.f,uG(n.d[t].gd(e),136).md()}function P7(n){var t;return t=n.ld(),JU(uG(n.md(),16).Nc(),new Wl(t))}function C7(n,t){return!!PV(n.a,t)&&(u7(n.a,t),!0)}function I7(n,t,e){return q4(t,n.e.Rd().gc()),q4(e,n.c.Rd().gc()),n.a[t][e]}function O7(n,t,e){this.a=n,this.b=t,this.c=e,kD(n.t,this),kD(t.i,this)}function A7(n,t,e,i){this.f=n,this.e=t,this.d=e,this.b=i,this.c=i?i.d:null}function L7(){this.b=new lS,this.a=new lS,this.b=new lS,this.a=new lS}function N7(){var n,t;N7=E,vj(),t=new Gv,MBt=t,n=new Wk,TBt=n}function $7(n){return vgn(n),new IK(n,new lG(n,n.a.e,4|n.a.d))}function D7(n){var t;for(GQ(n),t=0;n.a.Bd(new hn);)t=Lgn(t,1);return t}function x7(n,t){return tJ(t),n.c<n.d&&(n.Se(t,n.c++),!0)}function R7(n){IN(this),vG(n>=0,"Initial capacity must not be negative")}function K7(){K7=E,jNt=new Cm("org.eclipse.elk.labels.labelManager")}function F7(){F7=E,Uwt=new uF("separateLayerConnections",(Ghn(),zwt))}function _7(){_7=E,DSt=new qI("REGULAR",0),$St=new qI("CRITICAL",1)}function B7(){B7=E,nLt=new lO("FIXED",0),ZAt=new lO("CENTER_NODE",1)}function H7(){H7=E,Vdt=new WC("QUADRATIC",0),Wdt=new WC("SCANLINE",1)}function U7(){U7=E,egt=Abn((jan(),Uhn(cT(agt,1),p1n,322,0,[Zdt,Ydt,ngt])))}function G7(){G7=E,ogt=Abn((ran(),Uhn(cT(bgt,1),p1n,351,0,[igt,cgt,rgt])))}function q7(){q7=E,Tgt=Abn((Pfn(),Uhn(cT(Ogt,1),p1n,459,0,[kgt,vgt,ygt])))}function X7(){X7=E,Cdt=Abn((gon(),Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])))}function z7(){z7=E,vpt=Abn((Zen(),Uhn(cT(Mpt,1),p1n,311,0,[gpt,ppt,dpt])))}function V7(){V7=E,wpt=Abn((ihn(),Uhn(cT(mpt,1),p1n,298,0,[fpt,lpt,hpt])))}function W7(){W7=E,ljt=Abn((Cwn(),Uhn(cT(pjt,1),p1n,390,0,[ujt,sjt,hjt])))}function Q7(){Q7=E,iEt=Abn((isn(),Uhn(cT(oEt,1),p1n,387,0,[Zjt,nEt,tEt])))}function J7(){J7=E,uEt=Abn((Sln(),Uhn(cT(lEt,1),p1n,349,0,[aEt,rEt,cEt])))}function Y7(){Y7=E,Yjt=Abn((can(),Uhn(cT(eEt,1),p1n,462,0,[Qjt,Vjt,Wjt])))}function Z7(){Z7=E,mEt=Abn((ian(),Uhn(cT(MEt,1),p1n,352,0,[gEt,wEt,dEt])))}function nnn(){nnn=E,bEt=Abn((kbn(),Uhn(cT(pEt,1),p1n,350,0,[sEt,hEt,fEt])))}function tnn(){tnn=E,TEt=Abn((zhn(),Uhn(cT(xEt,1),p1n,388,0,[kEt,yEt,vEt])))}function enn(){enn=E,mPt=Abn((Pln(),Uhn(cT(RCt,1),p1n,392,0,[gPt,dPt,wPt])))}function inn(){inn=E,bIt=Abn((vbn(),Uhn(cT(nOt,1),p1n,393,0,[sIt,hIt,fIt])))}function rnn(){rnn=E,aOt=Abn((esn(),Uhn(cT(hOt,1),p1n,299,0,[iOt,rOt,eOt])))}function cnn(){cnn=E,fOt=Abn((Jmn(),Uhn(cT(dOt,1),p1n,445,0,[oOt,uOt,sOt])))}function ann(){ann=E,gOt=Abn((Zyn(),Uhn(cT(AOt,1),p1n,455,0,[lOt,wOt,bOt])))}function onn(){onn=E,LOt=Abn((Bgn(),Uhn(cT(kAt,1),p1n,394,0,[IOt,OOt,COt])))}function unn(){unn=E,IAt=Abn((den(),Uhn(cT(LAt,1),p1n,439,0,[EAt,PAt,SAt])))}function snn(){snn=E,GEt=Abn((ean(),Uhn(cT(qEt,1),p1n,463,0,[_Et,BEt,HEt])))}function hnn(){hnn=E,Dst=Abn((Ktn(),Uhn(cT(xst,1),p1n,470,0,[Ast,Ost,Lst])))}function fnn(){fnn=E,Cst=Abn((Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])))}function lnn(){lnn=E,Bst=Abn((Yen(),Uhn(cT(hht,1),p1n,471,0,[Fst,Kst,Rst])))}function bnn(){bnn=E,xut=Abn((ybn(),Uhn(cT(Rut,1),p1n,108,0,[Cut,Iut,Out])))}function wnn(){wnn=E,vlt=Abn((Jen(),Uhn(cT(Clt,1),p1n,391,0,[glt,dlt,plt])))}function dnn(){dnn=E,Nxt=Abn((Own(),Uhn(cT(Kxt,1),p1n,346,0,[Oxt,Ixt,Axt])))}function gnn(){gnn=E,XAt=Abn((Rdn(),Uhn(cT(VAt,1),p1n,444,0,[HAt,UAt,GAt])))}function pnn(){pnn=E,oxt=Abn((Zrn(),Uhn(cT(lxt,1),p1n,278,0,[ixt,rxt,cxt])))}function mnn(){mnn=E,dKt=Abn((Iwn(),Uhn(cT(mKt,1),p1n,280,0,[lKt,fKt,bKt])))}function vnn(n,t){return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),ymn(n.o,t)}function knn(n,t){var e;n.C&&((e=uG(AJ(n.b,t),127).n).d=n.C.d,e.a=n.C.a)}function ynn(n){var t,e,i,r;r=n.d,t=n.a,e=n.b,i=n.c,n.d=e,n.a=i,n.b=r,n.c=t}function Mnn(n){return!n.g&&(n.g=new ds),!n.g.b&&(n.g.b=new Om(n)),n.g.b}function Tnn(n){return!n.g&&(n.g=new ds),!n.g.c&&(n.g.c=new Nm(n)),n.g.c}function jnn(n){return!n.g&&(n.g=new ds),!n.g.d&&(n.g.d=new Am(n)),n.g.d}function Enn(n){return!n.g&&(n.g=new ds),!n.g.a&&(n.g.a=new Lm(n)),n.g.a}function Snn(n,t,e,i){return e&&(i=e.Rh(t,emn(e.Dh(),n.c.uk()),null,i)),i}function Pnn(n,t,e,i){return e&&(i=e.Th(t,emn(e.Dh(),n.c.uk()),null,i)),i}function Cnn(n,t,e,i){var r;return KGn(r=Inn(YHt,W1n,28,t+1,15,1),n,t,e,i),r}function Inn(n,t,e,i,r,c){var a;return a=PTn(r,i),10!=r&&Uhn(cT(n,c),t,e,r,a),a}function Onn(n,t,e){var i,r;for(r=new Zsn(t,n),i=0;i<e;++i)_yn(r);return r}function Ann(n,t,e){var i,r;if(null!=e)for(i=0;i<t;++i)r=e[i],n.Qi(i,r)}function Lnn(n,t){var e;return(e=new B).c=!0,e.d=t.md(),pWn(n,t.ld(),e)}function Nnn(n,t){var e;e=n.q.getHours()+(t/3600|0),n.q.setSeconds(t),Iqn(n,e)}function $nn(n,t){var e,i;return i=SZ(rG(new Een(n,e=t))),Hq(new Een(n,e)),i}function Dnn(n,t){t.Ug("Label management",1),XA(oIn(n,(K7(),jNt))),t.Vg()}function xnn(n,t,e,i){EGn(n,t,e,Dqn(n,t,i,F$(t,102)&&0!=(uG(t,19).Bb&P0n)))}function Rnn(n,t,e){uG(n.b,68),uG(n.b,68),uG(n.b,68),Prn(n.a,new AB(e,t,n))}function Knn(n,t,e){if(n<0||t>e||t<n)throw hv(new JM(o2n+n+s2n+t+Q0n+e))}function Fnn(n){n?(this.c=n,this.b=null):(this.c=null,this.b=new Zm)}function _nn(n,t){VP.call(this,n,t),this.a=Inn(yut,c1n,447,2,0,1),this.b=!0}function Bnn(n){Nfn.call(this,n,0),LR(this),this.d.b=this.d,this.d.a=this.d}function Hnn(n){this.e=n,this.b=this.e.a.entries(),this.a=Inn(dat,EZn,1,0,5,1)}function Unn(){Unn=E,SEt=wz(Aq(new wJ,(uIn(),Tlt),(zYn(),uwt)),Plt,Owt)}function Gnn(){return tOn(),Uhn(cT($gt,1),p1n,283,0,[Egt,jgt,Pgt,Sgt,Igt,Cgt])}function qnn(){return ESn(),Uhn(cT(Qgt,1),p1n,281,0,[Fgt,Kgt,Bgt,Rgt,_gt,xgt])}function Xnn(){return RIn(),Uhn(cT(upt,1),p1n,282,0,[Vgt,qgt,Wgt,zgt,Xgt,Ggt])}function znn(){return vAn(),Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])}function Vnn(){return zIn(),Uhn(cT(vbt,1),p1n,273,0,[dbt,wbt,lbt,gbt,bbt,fbt])}function Wnn(){return eNn(),Uhn(cT(BRt,1),p1n,279,0,[gRt,wRt,dRt,bRt,lRt,pRt])}function Qnn(){return $Pn(),Uhn(cT(mRt,1),p1n,101,0,[sRt,uRt,oRt,rRt,aRt,cRt])}function Jnn(){return RCn(),Uhn(cT(Lxt,1),p1n,321,0,[mxt,gxt,vxt,wxt,pxt,dxt])}function Ynn(){return nMn(),Uhn(cT(n$t,1),p1n,255,0,[CNt,ANt,LNt,NNt,INt,ONt])}function Znn(){return ZSn(),Uhn(cT(txt,1),p1n,297,0,[ZNt,YNt,JNt,WNt,VNt,QNt])}function ntn(n){var t;return n.a||-1==n.b||(t=n.c.Dh(),n.a=ern(t,n.b)),n.a}function ttn(n,t){return!(n.Si()&&n.Hc(t)||(n.Hi(t),0))}function etn(n,t){return ZZ(t,"Horizontal alignment cannot be null"),n.b=t,n}function itn(n,t,e){var i;return QYn(),i=kJn(n,t),e&&i&&_Q(n)&&(i=null),i}function rtn(n,t,e){var i;(i=n.b[e.c.p][e.p]).b+=t.b,i.c+=t.c,i.a+=t.a,++i.a}function ctn(n,t,i){var r;n.d[t.g]=i,(r=n.g.c)[t.g]=e.Math.max(r[t.g],i+1)}function atn(n,t){var i,r;return i=n.a-t.a,r=n.b-t.b,e.Math.sqrt(i*i+r*r)}function otn(n,t){var e;for(e=t.Kc();e.Ob();)_Hn(n,uG(e.Pb(),36),0,0)}function utn(n,t,e){var i;for(i=n.Kc();i.Ob();)tHn(uG(i.Pb(),36),t,e)}function stn(n){var t;for(t=Fkn(n.a,0);t.b!=t.d.c;)hNn(uG(I6(t),65))}function htn(n,t){return BP(n.e,t)||Akn(n.e,t,new Bkn(t)),uG(ain(n.e,t),113)}function ftn(n,t,e,i){return tJ(n),tJ(t),tJ(e),tJ(i),new WV(n,t,new H)}function ltn(n,t,e,i){this.ak(),this.a=t,this.b=n,this.c=new kV(this,t,e,i)}function btn(n,t,e,i,r,c){E6.call(this,t,i,r,c),Kf(this),this.c=n,this.b=e}function wtn(n,t,e,i,r,c){E6.call(this,t,i,r,c),Kf(this),this.c=n,this.a=e}function dtn(n,t){var e,i,r;return r=n.r,i=n.d,(e=uXn(n,t,!0)).b!=r||e.a!=i}function gtn(n,t,e){var i;return(i=jxn(n.b,t))?JXn(Len(n,i),e):null}function ptn(n,t,e){var i,r;r=null,(i=v0(n,e))&&(r=uAn(i)),Tkn(t,e,r)}function mtn(n,t,e){var i,r;r=null,(i=v0(n,e))&&(r=uAn(i)),Tkn(t,e,r)}function vtn(n,t){var e;return(e=n.Ih(t))>=0?n.Lh(e,!0,!0):YNn(n,t,!0)}function ktn(n,t,e){var i;return i=Ufn(n,t,e),n.b=new Don(i.c.length),ZFn(n,i)}function ytn(n){if(n.b<=0)throw hv(new Bv);return--n.b,n.a-=n.c.c,xwn(n.a)}function Mtn(n){var t;if(!n.a)throw hv(new EY);return t=n.a,n.a=R0(n.a),t}function Ttn(n){for(;!n.a;)if(!y_(n.c,new yd(n)))return!1;return!0}function jtn(n){return WW(n),F$(n,204)?uG(n,204):new sb(n)}function Etn(n){Stn(),uG(n.of((XYn(),bDt)),181).Fc((eNn(),dRt)),n.qf(lDt,null)}function Stn(){Stn=E,tNt=new hu,iNt=new fu,eNt=Rln((XYn(),lDt),tNt,q$t,iNt)}function Ptn(){Ptn=E,cIt=new nO("LEAF_NUMBER",0),aIt=new nO("NODE_SIZE",1)}function Ctn(n){n.a=Inn(YHt,W1n,28,n.b+1,15,1),n.c=Inn(YHt,W1n,28,n.b,15,1),n.d=0}function Itn(n,t){n.a.Ne(t.d,n.b)>0&&(kD(n.c,new wG(t.c,t.d,n.d)),n.b=t.d)}function Otn(n,t){if(null==n.g||t>=n.i)throw hv(new pL(t,n.i));return n.g[t]}function Atn(n,t,e){if(gln(n,e),null!=e&&!n.fk(e))throw hv(new Nv);return e}function Ltn(n,t){return 10!=Min(t)&&Uhn(Tbn(t),t.Sm,t.__elementTypeId$,Min(t),n),n}function Ntn(n,t,e,i){sZ(),i=i||Jot,rLn(n.slice(t,e),n,t,e,-t,i)}function $tn(n,t,e,i,r){return t<0?YNn(n,e,i):uG(e,69).wk().yk(n,n.hi(),t,i,r)}function Dtn(n,t){return ugn(uM(pK(oIn(n,(GYn(),bmt)))),uM(pK(oIn(t,bmt))))}function xtn(){xtn=E,Mut=Abn((Rtn(),Uhn(cT(Tut,1),p1n,303,0,[put,mut,vut,kut])))}function Rtn(){Rtn=E,put=new qP("All",0),mut=new SN,vut=new P$,kut=new EN}function Ktn(){Ktn=E,Ast=new aC(z2n,0),Ost=new aC(G2n,1),Lst=new aC(V2n,2)}function Ftn(){Ftn=E,tXn(),sHt=M0n,uHt=T0n,fHt=new Rw(M0n),hHt=new Rw(T0n)}function _tn(){_tn=E,vht=Abn((ehn(),Uhn(cT(jht,1),p1n,417,0,[pht,wht,dht,ght])))}function Btn(){Btn=E,Rht=Abn((myn(),Uhn(cT(Fht,1),p1n,406,0,[Nht,Lht,$ht,Dht])))}function Htn(){Htn=E,Eht=Abn((vyn(),Uhn(cT(Sht,1),p1n,332,0,[yht,kht,Mht,Tht])))}function Utn(){Utn=E,ibt=Abn((Uvn(),Uhn(cT(abt,1),p1n,389,0,[tbt,Zlt,Ylt,nbt])))}function Gtn(){Gtn=E,Glt=Abn((Xhn(),Uhn(cT(ebt,1),p1n,416,0,[Flt,Hlt,_lt,Blt])))}function qtn(){qtn=E,ldt=Abn((qhn(),Uhn(cT(mdt,1),p1n,421,0,[odt,udt,sdt,hdt])))}function Xtn(){Xtn=E,Wwt=Abn((Ghn(),Uhn(cT(adt,1),p1n,371,0,[zwt,qwt,Xwt,Gwt])))}function ztn(){ztn=E,mjt=Abn((Yyn(),Uhn(cT(jjt,1),p1n,203,0,[djt,gjt,wjt,bjt])))}function Vtn(){Vtn=E,Ujt=Abn((yvn(),Uhn(cT(Xjt,1),p1n,284,0,[Fjt,Kjt,_jt,Bjt])))}function Wtn(){Wtn=E,Ngt=new iI(q4n,0),Lgt=new iI("IMPROVE_STRAIGHTNESS",1)}function Qtn(n,t){var e,i;return i=t/n.c.Rd().gc()|0,e=t%n.c.Rd().gc(),I7(n,i,e)}function Jtn(n){var t;if(n.nl())for(t=n.i-1;t>=0;--t)zrn(n,t);return g5(n)}function Ytn(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[0];)e=t;return e}function Ztn(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[1];)e=t;return e}function nen(n){return F$(n,180)?""+uG(n,180).a:null==n?null:cpn(n)}function ten(n){return F$(n,180)?""+uG(n,180).a:null==n?null:cpn(n)}function een(n,t){if(t.a)throw hv(new Ky(p2n));FV(n.a,t),t.a=n,!n.j&&(n.j=t)}function ien(n,t){rL.call(this,t.zd(),-16449&t.yd()),tJ(n),this.a=n,this.c=t}function ren(n,t){return new LU(t,KR(D$(t.e),t.f.a+n,t.f.b+n),(qx(),!1))}function cen(n,t){return PU(),kD(n,new WO(t,xwn(t.e.c.length+t.g.c.length)))}function aen(n,t){return PU(),kD(n,new WO(t,xwn(t.e.c.length+t.g.c.length)))}function oen(){oen=E,tOt=Abn((dTn(),Uhn(cT(cOt,1),p1n,354,0,[ZIt,JIt,YIt,QIt])))}function uen(){uen=E,KCt=Abn((mbn(),Uhn(cT(BCt,1),p1n,353,0,[xCt,$Ct,DCt,NCt])))}function sen(){sen=E,YSt=Abn((Cjn(),Uhn(cT(ZSt,1),p1n,405,0,[zSt,VSt,WSt,QSt])))}function hen(){hen=E,bxt=Abn((_gn(),Uhn(cT(kxt,1),p1n,223,0,[fxt,sxt,uxt,hxt])))}function fen(){fen=E,Fxt=Abn((Ajn(),Uhn(cT(Wxt,1),p1n,290,0,[Rxt,$xt,Dxt,xxt])))}function len(){len=E,ZRt=Abn((Qmn(),Uhn(cT(sKt,1),p1n,386,0,[QRt,JRt,WRt,VRt])))}function ben(){ben=E,EKt=Abn((qpn(),Uhn(cT(SKt,1),p1n,320,0,[TKt,kKt,MKt,yKt])))}function wen(){wen=E,LKt=Abn((Eln(),Uhn(cT(DKt,1),p1n,415,0,[CKt,IKt,PKt,OKt])))}function den(){den=E,EAt=new uO(g7n,0),PAt=new uO(k9n,1),SAt=new uO(q4n,2)}function gen(n,t,e,i,r){return tJ(n),tJ(t),tJ(e),tJ(i),tJ(r),new WV(n,t,i)}function pen(n,t){var e;return(e=uG(u7(n.e,t),400))?(cq(e),e.e):null}function men(n,t){var e;return-1!=(e=Ten(n,t,0))&&(i7(n,e),!0)}function ven(n,t,e){var i;return GQ(n),(i=new un).a=t,n.a.Nb(new nC(i,e)),i.a}function ken(n){var t;return GQ(n),t=Inn(eUt,I0n,28,0,15,1),tE(n.a,new md(t)),t}function yen(n){var t;if(!oon(n))throw hv(new Bv);return n.e=1,t=n.d,n.d=null,t}function Men(n){var t;return _L(n)&&(t=0-n,!isNaN(t))?t:Esn(gfn(n))}function Ten(n,t,e){for(;e<n.c.length;++e)if(OJ(t,n.c[e]))return e;return-1}function jen(n){var t;return t=uG(zq(n.j,0),12),uG(oIn(t,(GYn(),rmt)),12)}function Een(n,t){var e;this.f=n,this.b=t,e=uG(cQ(n.b,t),260),this.c=e?e.b:null}function Sen(){GB(),this.b=new Ym,this.f=new Ym,this.g=new Ym,this.e=new Ym}function Pen(n){LD(this),this.g=n?i1(n,n.ie()):null,this.f=n,KY(this),this.je()}function Cen(n){var t;null!=(t=n.jj())&&-1!=n.d&&uG(t,94).xh(n),n.i&&n.i.oj()}function Ien(n){var t;for(t=n.p+1;t<n.c.a.c.length;++t)--uG(zq(n.c.a,t),10).p}function Oen(n){TK(!!n.c),OB(n.f.g,n.d),n.c.Qb(),n.c=null,n.b=Phn(n),n.d=n.f.g}function Aen(n){return n.b||(n.b=new fz(n,g_t,n),!n.a&&(n.a=new oF(n,n))),n.b}function Len(n,t){var e,i;return!(i=(e=uG(t,690)).xi())&&e.Ai(i=new IA(n,t)),i}function Nen(n,t){var e,i;return!(i=(e=uG(t,692)).$k())&&e.cl(i=new p4(n,t)),i}function $en(n,t){var e,i;return JS(),e=Q6(n),i=Q6(t),!!e&&!!i&&!Tyn(e.k,i.k)}function Den(n,t){return OJ(t,zq(n.f,0))||OJ(t,zq(n.f,1))||OJ(t,zq(n.f,2))}function xen(n,t){if(t<0)throw hv(new dM(Nnt+t));return p5(n,t+1),zq(n.j,t)}function Ren(n,t,e,i){if(!n)throw hv(new vM(LBn(t,Uhn(cT(dat,1),EZn,1,5,[e,i]))))}function Ken(n,t,e,i,r,c,a){Ran.call(this,t,i,r,c,a),Kf(this),this.c=n,this.b=e}function Fen(n,t,e){var i,r;for(i=10,r=0;r<e-1;r++)t<i&&(n.a+="0"),i*=10;n.a+=t}function _en(n){var t,e;return gW(n,0,e=n.length,t=Inn(JHt,N1n,28,e,15,1),0),t}function Ben(n){var t,e;return iX(),!(e=aot[t=n+128])&&(e=aot[t]=new Dw(n)),e}function Hen(n){return OB(n.d.a.e.g,n.b),MK(n.c!=n.d.a.d),n.a=n.c,n.c=n.c.a,n.a}function Uen(n){switch(n.g){case 0:return vZn;case 1:return-1;default:return 0}}function Gen(n){return yEn(n,(tin(),not))<0?-sx(gfn(n)):n.l+n.m*w0n+n.h*d0n}function qen(n){(this.q?this.q:(hZ(),hZ(),Vot)).Ac(n.q?n.q:(hZ(),hZ(),Vot))}function Xen(n,t){L_(uG(uG(n.f,27).of((XYn(),sDt)),101))&&ppn(RJ(uG(n.f,27)),t)}function zen(n,t){var e;return(e=emn(n.d,t))>=0?Dyn(n,e,!0,!0):YNn(n,t,!0)}function Ven(n){var t;return null==(t=Kcn(Lsn(n,32)))&&($vn(n),t=Kcn(Lsn(n,32))),t}function Wen(n){var t;return n.Oh()||(t=iQ(n.Dh())-n.ji(),n.$h().Mk(t)),n.zh()}function Qen(n,t){Iht=new et,xht=t,uG((Cht=n).b,68),Rnn(Cht,Iht,null),Szn(Cht)}function Jen(){Jen=E,glt=new dC("XY",0),dlt=new dC("X",1),plt=new dC("Y",2)}function Yen(){Yen=E,Fst=new oC("TOP",0),Kst=new oC(G2n,1),Rst=new oC(Q2n,2)}function Zen(){Zen=E,gpt=new uI(q4n,0),ppt=new uI("TOP",1),dpt=new uI(Q2n,2)}function nin(){nin=E,Gjt=new pI("INPUT_ORDER",0),qjt=new pI("PORT_DEGREE",1)}function tin(){tin=E,Jat=p$(f0n,f0n,524287),Yat=p$(0,0,b0n),Zat=_9(1),_9(2),not=_9(0)}function ein(n){var t;return n.d!=n.r&&(t=bEn(n),n.e=!!t&&t.lk()==srt,n.d=t),n.e}function iin(n,t,e){var i;return i=n.g[t],yD(n,t,n.Zi(t,e)),n.Ri(t,e,i),n.Ni(),i}function rin(n,t){var e;return(e=n.dd(t))>=0&&(n.gd(e),!0)}function cin(n,t){var e;for(WW(n),WW(t),e=!1;t.Ob();)e|=n.Fc(t.Pb());return e}function ain(n,t){var e;return(e=uG(cQ(n.e,t),400))?(nD(n,e),e.e):null}function oin(n){var t,e;return t=n/60|0,0==(e=n%60)?""+t:t+":"+e}function uin(n,t){var e=n.a[t],i=(Cfn(),Wat)[typeof e];return i?i(e):Vbn(typeof e)}function sin(n,t){return vgn(n),new fX(n,new D_(new f7(t,n.a)))}function hin(n){var t;return null!=(t=0==n.b.c.length?null:zq(n.b,0))&&Con(n,0),t}function fin(n,t){var e,i,r;r=t.c.i,i=(e=uG(cQ(n.f,r),60)).d.c-e.e.c,fun(t.a,i,0)}function lin(n,t){var e;for(++n.d,++n.c[t],e=t+1;e<n.a.length;)++n.a[e],e+=e&-e}function bin(n,t,e,i){QYn(),Qm.call(this,26),this.c=n,this.a=t,this.d=e,this.b=i}function win(n,t){for(;t[0]<n.length&&xL(" \t\r\n",$Cn(VJ(n,t[0])))>=0;)++t[0]}function din(n,t){ycn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function gin(n,t){Mcn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function pin(n,t){kcn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function min(n,t){vcn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function vin(n,t,e){return bD(new MO(e.e.a+e.f.a/2,e.e.b+e.f.b/2),n)==(tJ(t),t)}function kin(n,t){return F$(t,102)&&0!=(uG(t,19).Bb&P0n)?new yL(t,n):new Zsn(t,n)}function yin(n,t){return F$(t,102)&&0!=(uG(t,19).Bb&P0n)?new yL(t,n):new Zsn(t,n)}function Min(n){return null==n.__elementTypeCategory$?10:n.__elementTypeCategory$}function Tin(n,t){return t==(cB(),cB(),uut)?n.toLocaleLowerCase():n.toLowerCase()}function jin(n){if(!n.e)throw hv(new Bv);return n.c=n.a=n.e,n.e=n.e.e,--n.d,n.a.f}function Ein(n){if(!n.c)throw hv(new Bv);return n.e=n.a=n.c,n.c=n.c.c,++n.d,n.a.f}function Sin(n){var t;for(++n.a,t=n.c.a.length;n.a<t;++n.a)if(n.c.b[n.a])return}function Pin(n){var t,e;if(n.a){e=null;do{t=n.a,n.a=null,e=JOn(t,e)}while(n.a);n.a=e}}function Cin(n){var t,e;if(n.b){e=null;do{t=n.b,n.b=null,e=JOn(t,e)}while(n.b);n.b=e}}function Iin(n,t){var e;for(e=0;n.e!=n.i.gc();)Tq(t,Zkn(n),xwn(e)),e!=vZn&&++e}function Oin(n,t){var e;return 0==(e=Fgn(n.e.c,t.e.c))?ugn(n.e.d,t.e.d):e}function Ain(n,t){var e,i;for(e=(i=t.c)+1;e<=t.f;e++)n.a[e]>n.a[i]&&(i=e);return i}function Lin(n){var t;return!!(t=uG(oIn(n,(GYn(),Spt)),313))&&t.a==n}function Nin(n){var t;return!!(t=uG(oIn(n,(GYn(),Spt)),313))&&t.i==n}function $in(){$in=E,Ilt=Abn((uIn(),Uhn(cT(Llt,1),p1n,367,0,[Tlt,jlt,Elt,Slt,Plt])))}function Din(){Din=E,vdt=Abn((gPn(),Uhn(cT(Pdt,1),p1n,375,0,[wdt,gdt,pdt,ddt,bdt])))}function xin(){xin=E,wgt=Abn((kvn(),Uhn(cT(pgt,1),p1n,348,0,[sgt,ugt,fgt,lgt,hgt])))}function Rin(){Rin=E,Ejt=Abn((pyn(),Uhn(cT(xjt,1),p1n,323,0,[Tjt,kjt,yjt,vjt,Mjt])))}function Kin(){Kin=E,$mt=Abn((Gpn(),Uhn(cT(ajt,1),p1n,171,0,[Lmt,Cmt,Imt,Omt,Amt])))}function Fin(){Fin=E,rIt=Abn((zPn(),Uhn(cT(oIt,1),p1n,368,0,[tIt,YCt,eIt,ZCt,nIt])))}function _in(){_in=E,BAt=Abn((_Rn(),Uhn(cT(qAt,1),p1n,373,0,[xAt,DAt,KAt,RAt,FAt])))}function Bin(){Bin=E,sLt=Abn((pOn(),Uhn(cT(qLt,1),p1n,324,0,[iLt,rLt,oLt,cLt,aLt])))}function Hin(){Hin=E,ext=Abn((xdn(),Uhn(cT(axt,1),p1n,88,0,[ZDt,YDt,JDt,QDt,nxt])))}function Uin(){Uin=E,bNt=Abn((Rkn(),Uhn(cT(MNt,1),p1n,170,0,[hNt,sNt,oNt,fNt,uNt])))}function Gin(){Gin=E,iRt=Abn((Vkn(),Uhn(cT(hRt,1),p1n,256,0,[Zxt,tRt,Jxt,Yxt,nRt])))}function qin(){qin=E,HRt=Abn((KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])))}function Xin(){Xin=E,Yut=new iC("BY_SIZE",0),Zut=new iC("BY_SIZE_AND_SHAPE",1)}function zin(){zin=E,gft=new wC("EADES",0),pft=new wC("FRUCHTERMAN_REINGOLD",1)}function Vin(){Vin=E,dgt=new nI("READING_DIRECTION",0),ggt=new nI("ROTATION",1)}function Win(){Win=E,zlt=new Pt,Vlt=new At,qlt=new Lt,Xlt=new Ot,Wlt=new Nt}function Qin(n){this.b=new Zm,this.a=new Zm,this.c=new Zm,this.d=new Zm,this.e=n}function Jin(n){this.g=n,this.f=new Zm,this.a=e.Math.min(this.g.c.c,this.g.d.c)}function Yin(n,t,e){HF.call(this),Qrn(this),this.a=n,this.c=e,this.b=t.d,this.f=t.e}function Zin(n,t,e){var i;for(i=new Ww(e);i.a<i.c.c.length;)PPn(n,t,N3(i))}function nrn(n,t,e){var i;if(null==t)throw hv(new Rv);return i=v0(n,t),K5(n,t,e),i}function trn(n,t){var e;return(e=uG(cQ(n.a,t),137))||(e=new Yn,vJ(n.a,t,e)),e}function ern(n,t){var e;return null==n.i&&eqn(n),e=n.i,t>=0&&t<e.length?e[t]:null}function irn(n,t){var e;return e=t>0?t-1:t,lj(bj(xcn(xG(new fy,e),n.n),n.j),n.k)}function rrn(n){var t;t=new Yk,ttn((!n.q&&(n.q=new fV(p_t,n,11,10)),n.q),t)}function crn(n){return(0!=(2&n.i)?"interface ":0!=(1&n.i)?"":"class ")+(vK(n),n.o)}function arn(n){return dwn(n,vZn)>0?vZn:dwn(n,j1n)<0?j1n:pz(n)}function orn(n){return n<3?(man(n,b1n),n+1):n<d1n?t0(n/.75+1):vZn}function urn(n,t){return tJ(t),zz(n),!!n.d.Ob()&&(t.Cd(n.d.Pb()),!0)}function srn(n,t){var e,i;return(e=uG(Xwn(n.d,t),16))?(i=t,n.e.pc(i,e)):null}function hrn(n,t,e,i){n.j=-1,P$n(n,sAn(n,t,e),(PP(),uG(t,69).vk().xl(i)))}function frn(n,t){return ncn(),-d$(uG(oIn(n,(QGn(),kCt)),17).a,uG(oIn(t,kCt),17).a)}function lrn(n,t){return!!bun(n,t,pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))))}function brn(){return rDn(),Uhn(cT(PFt,1),p1n,245,0,[jFt,yFt,MFt,kFt,TFt,mFt,pFt,vFt])}function wrn(){return lAn(),Uhn(cT(SNt,1),p1n,285,0,[yNt,wNt,mNt,kNt,dNt,gNt,pNt,vNt])}function drn(){return h_n(),Uhn(cT(Xdt,1),p1n,276,0,[Odt,Ndt,Idt,xdt,Ldt,Adt,Ddt,$dt])}function grn(n){var t;return(t=uM(pK(oIn(n,(jYn(),tMt)))))<0&&kfn(n,tMt,t=0),t}function prn(n,t){var e;for(e=n.Kc();e.Ob();)kfn(uG(e.Pb(),72),(GYn(),Qpt),t)}function mrn(n,t,i){var r;TEn(i,r=e.Math.max(0,n.b/2-.5),1),kD(t,new AC(i,r))}function vrn(n,t,e){return t0(gq(n.a.e[uG(t.a,10).p]-n.a.e[uG(e.a,10).p]))}function krn(n,t){var e;return vgn(n),e=new QY(n,n.a.zd(),4|n.a.yd(),t),new fX(n,e)}function yrn(n){var t;TK(!!n.c),t=n.c.a,Lrn(n.d,n.c),n.b==n.c?n.b=t:--n.a,n.c=null}function Mrn(n){return n.a>=-.01&&n.a<=Z2n&&(n.a=0),n.b>=-.01&&n.b<=Z2n&&(n.b=0),n}function Trn(n){var t,e;for(l_n(),e=G9n,t=0;t<n.length;t++)n[t]>e&&(e=n[t]);return e}function jrn(n,t){var e;if(!(e=EKn(n.Dh(),t)))throw hv(new vM(Gtt+t+ztt));return e}function Ern(n,t){var e;for(e=n;R0(e);)if((e=R0(e))==t)return!0;return!1}function Srn(n,t){var e,i,r;for(i=t.a.ld(),e=uG(t.a.md(),16).gc(),r=0;r<e;r++)n.Cd(i)}function Prn(n,t){var e,i,r,c;for(tJ(t),r=0,c=(i=n.c).length;r<c;++r)e=i[r],t.Cd(e)}function Crn(n,t,e,i,r,c){var a;c2(a=K9(i),r),u2(a,c),UNn(n.a,i,new $B(a,t,e.f))}function Irn(n,t){Myn(n,(lBn(),jOt),t.f),Myn(n,yOt,t.e),Myn(n,TOt,t.d),Myn(n,kOt,t.c)}function Orn(n,t){this.a=new Ym,this.e=new Ym,this.b=(Cwn(),hjt),this.c=n,this.b=t}function Arn(n){this.d=n,this.c=n.c.vc().Kc(),this.b=null,this.a=null,this.e=(Hy(),Iat)}function Lrn(n,t){var e;return e=t.c,t.a.b=t.b,t.b.a=t.a,t.a=t.b=null,t.c=null,--n.b,e}function Nrn(n,t){return!(!t||n.b[t.g]!=t||(uQ(n.b,t.g,null),--n.c,0))}function $rn(n,t){if(0>n||n>t)throw hv(new YM("fromIndex: 0, toIndex: "+n+Q0n+t))}function Drn(n){if(n<0)throw hv(new vM("Illegal Capacity: "+n));this.g=this.aj(n)}function xrn(n,t){return YN(),oan(T1n),e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)}function Rrn(n,t){var e,i,r,c;for(r=0,c=(i=n.d).length;r<c;++r)e=i[r],oD(n.g,e).a=t}function Krn(n,t,e){var i,r,c;for(r=t[e],i=0;i<r.length;i++)c=r[i],n.e[c.c.p][c.p]=i}function Frn(n){var t;for(t=0;t<n.c.length;t++)(u3(t,n.c.length),uG(n.c[t],12)).p=t}function _rn(n){var t,e;for(t=n.a.d.j,e=n.c.d.j;t!=e;)Mon(n.b,t),t=qdn(t);Mon(n.b,t)}function Brn(n){var t;return(t=e.Math.sqrt(n.a*n.a+n.b*n.b))>0&&(n.a/=t,n.b/=t),n}function Hrn(n){var t;return n.w?n.w:((t=O3(n))&&!t.Vh()&&(n.w=t),t)}function Urn(n,t){var e,i;i=n.a,e=kdn(n,t,null),i!=t&&!n.e&&(e=PWn(n,t,e)),e&&e.oj()}function Grn(n,t,e){var i,r;i=t;do{r=uM(n.p[i.p])+e,n.p[i.p]=r,i=n.a[i.p]}while(i!=t)}function qrn(n,t,e){var i=function(){return n.apply(i,arguments)};return t.apply(i,e),i}function Xrn(n){var t;return null==n?null:NCn(t=uG(n,195),t.length)}function zrn(n,t){if(null==n.g||t>=n.i)throw hv(new pL(t,n.i));return n.Wi(t,n.g[t])}function Vrn(n,t){var e,i;for(hZ(),i=new Zm,e=0;e<n;++e)mv(i.c,t);return new eT(i)}function Wrn(n){return vgn(n),kG(!0,"n may not be negative"),new fX(n,new Fan(n.a))}function Qrn(n){n.b=(Ktn(),Ost),n.f=(Yen(),Kst),n.d=(man(2,g1n),new R7(2)),n.e=new sj}function Jrn(n){this.b=(WW(n),new Z_(n)),this.a=new Zm,this.d=new Zm,this.e=new sj}function Yrn(){Yrn=E,jst=new cC("BEGIN",0),Est=new cC(G2n,1),Sst=new cC("END",2)}function Zrn(){Zrn=E,ixt=new CO(G2n,0),rxt=new CO("HEAD",1),cxt=new CO("TAIL",2)}function ncn(){ncn=E,GCt=Lvn(Lvn(Lvn(gP(new wJ,(Cjn(),VSt)),(OHn(),fPt)),rPt),uPt)}function tcn(){tcn=E,XCt=Lvn(Lvn(Lvn(gP(new wJ,(Cjn(),QSt)),(OHn(),aPt)),tPt),cPt)}function ecn(){ecn=E,zdt=Abn((vAn(),Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])))}function icn(){icn=E,Agt=Abn((tOn(),Uhn(cT($gt,1),p1n,283,0,[Egt,jgt,Pgt,Sgt,Igt,Cgt])))}function rcn(){rcn=E,Ugt=Abn((ESn(),Uhn(cT(Qgt,1),p1n,281,0,[Fgt,Kgt,Bgt,Rgt,_gt,xgt])))}function ccn(){ccn=E,Jgt=Abn((RIn(),Uhn(cT(upt,1),p1n,282,0,[Vgt,qgt,Wgt,zgt,Xgt,Ggt])))}function acn(){acn=E,mbt=Abn((zIn(),Uhn(cT(vbt,1),p1n,273,0,[dbt,wbt,lbt,gbt,bbt,fbt])))}function ocn(){ocn=E,DNt=Abn((nMn(),Uhn(cT(n$t,1),p1n,255,0,[CNt,ANt,LNt,NNt,INt,ONt])))}function ucn(){ucn=E,t$t=Abn((ZSn(),Uhn(cT(txt,1),p1n,297,0,[ZNt,YNt,JNt,WNt,VNt,QNt])))}function scn(){scn=E,yxt=Abn((RCn(),Uhn(cT(Lxt,1),p1n,321,0,[mxt,gxt,vxt,wxt,pxt,dxt])))}function hcn(){hcn=E,fRt=Abn(($Pn(),Uhn(cT(mRt,1),p1n,101,0,[sRt,uRt,oRt,rRt,aRt,cRt])))}function fcn(){fcn=E,vRt=Abn((eNn(),Uhn(cT(BRt,1),p1n,279,0,[gRt,wRt,dRt,bRt,lRt,pRt])))}function lcn(){lcn=E,$st=(Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length,Nst=$st}function bcn(){return VDn(),Uhn(cT(eRt,1),p1n,95,0,[Bxt,_xt,Uxt,Vxt,zxt,Xxt,Gxt,qxt,Hxt])}function wcn(n,t){return jIn(),d$(n.b.c.length-n.e.c.length,t.b.c.length-t.e.c.length)}function dcn(n,t){return Cj(lun(n,t,pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15)))))}function gcn(n,t){return YN(),oan(T1n),e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)}function pcn(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,1,e,n.b))}function mcn(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,3,e,n.b))}function vcn(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,3,e,n.f))}function kcn(n,t){var e;e=n.g,n.g=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,4,e,n.g))}function ycn(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,5,e,n.i))}function Mcn(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,6,e,n.j))}function Tcn(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,1,e,n.j))}function jcn(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,4,e,n.c))}function Ecn(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,2,e,n.k))}function Scn(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,0,e,n.a))}function Pcn(n,t){var e;e=n.s,n.s=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new e8(n,4,e,n.s))}function Ccn(n,t){var e;e=n.t,n.t=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new e8(n,5,e,n.t))}function Icn(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new e8(n,2,e,n.d))}function Ocn(n,t){var e;e=n.F,n.F=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,5,e,t))}function Acn(n,t){var e;return(e=uG(cQ((TP(),_Ft),n),57))?e.gk(t):Inn(dat,EZn,1,t,5,1)}function Lcn(n,t){return YF(D$(uG(cQ(n.g,t),8)),x$(uG(cQ(n.f,t),469).b))}function Ncn(n,t){var e,i;return gj(),i=new cs,!!t&&vKn(i,t),Van(e=i,n),e}function $cn(n,t){var e;return t in n.a&&(e=v0(n,t).re())?e.a:null}function Dcn(n,t,e){if(gln(n,e),!n.kl()&&null!=e&&!n.fk(e))throw hv(new Nv);return e}function xcn(n,t){return n.n=t,n.n?(n.f=new Zm,n.e=new Zm):(n.f=null,n.e=null),n}function Rcn(n,t){if(n){t.n=n;var e=u0(t);e?e.Rm=t:sZn[n]=[t]}}function Kcn(n){var t;return Fq(null==n||Array.isArray(n)&&!((t=Min(n))>=14&&t<=16)),n}function Fcn(n,t){var e;return tJ(t),vG(!!(e=n[":"+t]),"Enum constant undefined: "+t),e}function _cn(n,t,e,i,r,c){var a;return Rcn(e,a=VW(n,t)),a.i=r?8:0,a.f=i,a.e=r,a.g=c,a}function Bcn(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=1,this.c=n,this.a=e}function Hcn(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=2,this.c=n,this.a=e}function Ucn(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=6,this.c=n,this.a=e}function Gcn(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=7,this.c=n,this.a=e}function qcn(n,t,e,i,r){this.d=t,this.j=i,this.e=r,this.o=-1,this.p=4,this.c=n,this.a=e}function Xcn(n,t){var e,i,r,c;for(r=0,c=(i=t).length;r<c;++r)e=i[r],een(n.a,e);return n}function zcn(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)WW(t[e]);return new rN(n)}function Vcn(n){var t;return OEn(t=YF(D$(n.d.d),n.c.d),n.c.e.a,n.c.e.b),JF(t,n.c.d)}function Wcn(n){var t;return OEn(t=YF(D$(n.c.d),n.d.d),n.d.e.a,n.d.e.b),JF(t,n.d.d)}function Qcn(n){var t=/function(?:\s+([\w$]+))?\s*\(/.exec(n);return t&&t[1]||O1n}function Jcn(n,t,i){var r;return r=n.length,b$n(n,0,t,0,e.Math.min(i,r),!0),t}function Ycn(n,t,e){var i,r;for(r=t.Kc();r.Ob();)i=uG(r.Pb(),74),FV(n,uG(e.Kb(i),27))}function Zcn(n,t){L_(uG(oIn(uG(n.e,10),(jYn(),JMt)),101))&&(hZ(),f$(uG(n.e,10).j,t))}function nan(){return W_n(),Uhn(cT(yst,1),p1n,257,0,[pst,lst,bst,fst,dst,gst,wst,hst,sst])}function tan(){return MKn(),Uhn(cT(fjt,1),p1n,265,0,[rjt,tjt,ejt,YTt,njt,cjt,ijt,JTt,ZTt])}function ean(){ean=E,_Et=new jI("BARYCENTER",0),BEt=new jI(p6n,1),HEt=new jI(m6n,2)}function ian(){ian=E,gEt=new MI("NO",0),wEt=new MI(x6n,1),dEt=new MI("LOOK_BACK",2)}function ran(){ran=E,igt=new YC("ARD",0),cgt=new YC("MSD",1),rgt=new YC("MANUAL",2)}function can(){can=E,Qjt=new mI(Y2n,0),Vjt=new mI("INPUT",1),Wjt=new mI("OUTPUT",2)}function aan(){return cNt||Oln(cNt=new ABn,Uhn(cT(vst,1),EZn,134,0,[new Dl])),cNt}function oan(n){if(!(n>=0))throw hv(new vM("tolerance ("+n+") must be >= 0"));return n}function uan(n,t){var e;return F$(t,44)?n.c.Mc(t):(e=ymn(n,t),Svn(n,t),e)}function san(n,t,e){return Kbn(n,t),qon(n,e),Pcn(n,0),Ccn(n,1),mdn(n,!0),ddn(n,!0),n}function han(n,t){var e;if(e=n.gc(),t<0||t>e)throw hv(new w_(t,e));return new N_(n,t)}function fan(n,t){n.b=e.Math.max(n.b,t.d),n.e+=t.r+(0==n.a.c.length?0:n.c),kD(n.a,t)}function lan(n){TK(n.c>=0),Rvn(n.d,n.c)<0&&(n.a=n.a-1&n.d.a.length-1,n.b=n.d.c),n.c=-1}function ban(n){var t;for(t=n.c.Cc().Kc();t.Ob();)uG(t.Pb(),16).$b();n.c.$b(),n.d=0}function wan(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)dW(t=e[i],t.length,null)}function dan(n,t){var e,i,r;for(i=0,r=(e=t).length;i<r;++i)s8(n,e[i],n.c.b,n.c)}function gan(n,t){var e,i;for(e=0,i=n.gc();e<i;++e)if(OJ(t,n.Xb(e)))return e;return-1}function pan(n){var t,e;if(0==n)return 32;for(e=0,t=1;0==(t&n);t<<=1)++e;return e}function man(n,t){if(n<0)throw hv(new vM(t+" cannot be negative but was: "+n));return n}function van(n,t){typeof window===wZn&&typeof window.$gwt===wZn&&(window.$gwt[n]=t)}function kan(n,t){return Pj(bun(n.a,t,pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15)))))}function yan(n,t,e){return gen(n,new dd(t),new an,new gd(e),Uhn(cT(Rut,1),p1n,108,0,[]))}function Man(){return oUn(),Uhn(cT(wKt,1),p1n,264,0,[eKt,rKt,tKt,cKt,aKt,uKt,oKt,iKt,nKt])}function Tan(){Tan=E,wot=Uhn(cT(YHt,1),W1n,28,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])}function jan(){jan=E,Zdt=new JC("LAYER_SWEEP",0),Ydt=new JC(D6n,1),ngt=new JC(q4n,2)}function Ean(){Ean=E,CEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function San(){San=E,IEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Pan(){Pan=E,OEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Can(){Can=E,AEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Ian(){Ian=E,LEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Oan(){Oan=E,DEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Aan(){Aan=E,KEt=wz(Aq(Aq(new wJ,(uIn(),Elt),(zYn(),kwt)),Slt,hwt),Plt,vwt)}function Lan(n){var t;for(t=new Ww(FTn(n));t.a<t.c.c.length;)uG(N3(t),695)._f()}function Nan(){kE();for(var n=hZn,t=0;t<arguments.length;t++)n.push(arguments[t])}function $an(n){HS(),this.g=new Ym,this.f=new Ym,this.b=new Ym,this.c=new K1,this.i=n}function Dan(){this.f=new sj,this.d=new xk,this.c=new sj,this.a=new Zm,this.b=new Zm}function xan(n,t,e,i){this.ak(),this.a=t,this.b=n,this.c=null,this.c=new b_(this,t,e,i)}function Ran(n,t,e,i,r){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1,r||(this.o=-2-i-1)}function Kan(){$D.call(this),this.n=-1,this.g=null,this.i=null,this.j=null,this.Bb|=w1n}function Fan(n){rL.call(this,n.Ad(64)?g$(0,$gn(n.zd(),1)):YZn,n.yd()),this.b=1,this.a=n}function _an(n,t){return ncn(),uG(oIn(t,(QGn(),kCt)),17).a<n.gc()&&uG(oIn(t,kCt),17).a>=0}function Ban(n,t){n.r>0&&n.c<n.r&&(n.c+=t,n.i&&n.i.d>0&&0!=n.g&&Ban(n.i,t/n.r*n.i.d))}function Han(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.c))}function Uan(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,4,e,n.c))}function Gan(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,2,e,n.k))}function qan(n,t){var e;e=n.D,n.D=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,2,e,n.D))}function Xan(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,8,e,n.f))}function zan(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,7,e,n.i))}function Van(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,8,e,n.a))}function Wan(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,0,e,n.b))}function Qan(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,0,e,n.b))}function Jan(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.c))}function Yan(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.d))}function Zan(n,t,e){var i;n.b=t,n.a=e,i=512==(512&n.a)?new ay:new $f,n.c=qFn(i,n.b,n.a)}function non(n,t){return EFn(n.e,t)?(PP(),ein(t)?new Cq(t,n):new OA(t,n)):new PA(t,n)}function ton(n){return 0>n?new mS:new OK(null,new i9(n+1,n))}function eon(n,t){var e;return hZ(),e=new sS(1),RA(n)?r2(e,n,t):VAn(e.f,n,t),new Vw(e)}function ion(n,t){var e,i;return e=n.c,(i=t.e[n.p])>0?uG(zq(e.a,i-1),10):null}function ron(n,t){var e,i;return(e=n.o+n.p)<(i=t.o+t.p)?-1:e==i?0:1}function con(n){var t;return F$(t=oIn(n,(GYn(),rmt)),167)?Qpn(uG(t,167)):null}function aon(n){var t;return(n=e.Math.max(n,2))>(t=pfn(n))?(t<<=1)>0?t:d1n:t}function oon(n){switch(_D(3!=n.e),n.e){case 2:return!1;case 0:return!0}return a7(n)}function uon(n,t){var e;return!!F$(t,8)&&(e=uG(t,8),n.a==e.a&&n.b==e.b)}function son(n,t){var e;e=new et,uG(t.b,68),uG(t.b,68),uG(t.b,68),Prn(t.a,new $U(n,e,t))}function hon(n,t){var e,i;for(i=t.vc().Kc();i.Ob();)rSn(n,(e=uG(i.Pb(),44)).ld(),e.md())}function fon(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,11,e,n.d))}function lon(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,13,e,n.j))}function bon(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,21,e,n.b))}function won(n,t){0==(t9(),Nut?null:t.c).length&&RK(t,new G),r2(n.a,Nut?null:t.c,t)}function don(n,t){t.Ug("Hierarchical port constraint processing",1),ayn(n),yYn(n),t.Vg()}function gon(){gon=E,Sdt=new VC("START",0),Edt=new VC("MIDDLE",1),jdt=new VC("END",2)}function pon(){pon=E,VCt=new YI("P1_NODE_PLACEMENT",0),WCt=new YI("P2_EDGE_ROUTING",1)}function mon(){mon=E,Wft=new Cm(E4n),Qft=new Cm(S4n),Vft=new Cm(P4n),zft=new Cm(C4n)}function von(n){var t;return OB(n.f.g,n.d),MK(n.b),n.c=n.a,t=uG(n.a.Pb(),44),n.b=Phn(n),t}function kon(n){return null==n.b?(EP(),EP(),eBt):n.ul()?n.tl():n.sl()}function yon(n,t){var e;return!((e=null==t?-1:Ten(n.b,t,0))<0||(Con(n,e),0))}function Mon(n,t){var e;return tJ(t),e=t.g,!n.b[e]&&(uQ(n.b,e,t),++n.c,!0)}function Ton(n,t){var e,i;return e=1-t,i=n.a[e],n.a[e]=i.a[t],i.a[t]=n,n.b=!0,i.b=!1,i}function jon(n,t){var e,i;for(i=t.Kc();i.Ob();)e=uG(i.Pb(),272),n.b=!0,FV(n.e,e),e.b=n}function Eon(n,t){var e,i;return e=uG(oIn(n,(jYn(),rTt)),8),i=uG(oIn(t,rTt),8),ugn(e.b,i.b)}function Son(n,t,e){var i,r;return r=t>>5,i=31&t,E3(Dz(n.n[e][r],pz(Nz(i,1))),3)}function Pon(n,t,e){var i,r,c;for(c=n.a.length-1,r=n.b,i=0;i<e;r=r+1&c,++i)uQ(t,i,n.a[r])}function Con(n,t){var e;e=i7(n.b,n.b.c.length-1),t<n.b.c.length&&(Y8(n.b,t,e),CLn(n,t))}function Ion(n,t){var e;return(e=uG(cQ(n.c,t),466))||((e=new Ek).c=t,vJ(n.c,e.c,e)),e}function Oon(n,t){var e,i;i=new Zm,e=t;do{mv(i.c,e),e=uG(cQ(n.k,e),18)}while(e);return i}function Aon(n,t,e){var i;return gFn(n,t,i=new Zm,e,!0,!0),n.b=new Don(i.c.length),i}function Lon(n,t){var e,i;for(Ntn(e=n.Pc(),0,e.length,t),i=0;i<e.length;i++)n.hd(i,e[i])}function Non(n){var t,e;for(e=new DD(n);e.e!=e.i.gc();)ycn(t=uG(Zkn(e),27),0),Mcn(t,0)}function $on(n){this.e=n,this.d=new Dj(orn(kz(this.e).gc())),this.c=this.e.a,this.b=this.e.c}function Don(n){this.b=n,this.a=Inn(YHt,W1n,28,n+1,15,1),this.c=Inn(YHt,W1n,28,n,15,1),this.d=0}function xon(n,t,e){Orn.call(this,t,e),this.d=Inn(pbt,e6n,10,n.a.c.length,0,1),Ekn(n.a,this.d)}function Ron(n,t,e){M6.call(this,n,t,e),this.a=new Ym,this.b=new Ym,this.d=new Zg(this)}function Kon(n){tz.call(this),this.b=uM(pK(oIn(n,(jYn(),dTt)))),this.a=uG(oIn(n,Vyt),223)}function Fon(n,t){var e;return F$(t,16)?(e=uG(t,16),n.Gc(e)):cin(n,uG(WW(t),20).Kc())}function _on(n,t){kS(JJ(new fX(null,new h3(new Lw(n.b),1)),new UO(n,t)),new qO(n,t))}function Bon(n,t){t.Ug(g6n,1),kS(sin(new fX(null,new h3(n.b,16)),new Zt),new ne),t.Vg()}function Hon(n){return RA(n)?pln(n):FA(n)?OL(n):KA(n)?XK(n):Cz(n)?n.Hb():xX(n)?xx(n):OZ(n)}function Uon(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)Xb(t=uG(e.Pb(),219),new MV(t.f))}function Gon(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)zb(t=uG(e.Pb(),219),new PIn(t.e))}function qon(n,t){var e;e=n.zb,n.zb=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.zb))}function Xon(n,t){var e;e=n.xb,n.xb=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,3,e,n.xb))}function zon(n,t){var e;e=n.yb,n.yb=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,2,e,n.yb))}function Von(n,t){var e;(e=new Wk).n=t,ttn((!n.s&&(n.s=new fV(o_t,n,21,17)),n.s),e)}function Won(n,t){var e;(e=new PK).n=t,ttn((!n.s&&(n.s=new fV(o_t,n,21,17)),n.s),e)}function Qon(n,t){var e,i,r;for(tJ(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),e|=n.Fc(i);return e}function Jon(n){var t,e,i;for(t=0,i=n.Kc();i.Ob();)t=~~(t+=null!=(e=i.Pb())?Hon(e):0);return t}function Yon(n,t){var e=n.a,i=0;for(var r in e)e.hasOwnProperty(r)&&(t[i++]=r);return t}function Zon(n){var t;return 0==n?"UTC":(n<0?(n=-n,t="UTC+"):t="UTC-",t+oin(n))}function nun(n){return n.a<54?n.f<0?-1:n.f>0?1:0:(!n.c&&(n.c=j2(Bsn(n.f))),n.c).e}function tun(n,t){t?null==n.B&&(n.B=n.D,n.D=null):null!=n.B&&(n.D=n.B,n.B=null)}function eun(n,t){return Xhn(),n==Flt&&t==Hlt||n==Hlt&&t==Flt||n==Blt&&t==_lt||n==_lt&&t==Blt}function iun(n,t){return Xhn(),n==Flt&&t==_lt||n==Flt&&t==Blt||n==Hlt&&t==Blt||n==Hlt&&t==_lt}function run(n,t){return YN(),oan(Z2n),e.Math.abs(0-t)<=Z2n||0==t||isNaN(0)&&isNaN(t)?0:n/t}function cun(n,t){return uM(pK(yx(cdn(YJ(new fX(null,new h3(n.c.b,16)),new _g(n)),t))))}function aun(n,t){return uM(pK(yx(cdn(YJ(new fX(null,new h3(n.c.b,16)),new Fg(n)),t))))}function oun(){return r_n(),Uhn(cT(bpt,1),p1n,259,0,[Zgt,tpt,ept,ipt,rpt,cpt,opt,Ygt,npt,apt])}function uun(){return THn(),Uhn(cT(Hjt,1),p1n,243,0,[$jt,Ijt,Ljt,Ojt,Ajt,Sjt,Njt,Djt,Pjt,Cjt])}function sun(n,t){t.Ug("General Compactor",1),Bpn(uG(zDn(n,(jOn(),LIt)),393)).Cg(n)}function hun(n,t){var e,i;return e=uG(zDn(n,(jOn(),FIt)),17),i=uG(zDn(t,FIt),17),d$(e.a,i.a)}function fun(n,t,e){var i,r;for(r=Fkn(n,0);r.b!=r.d.c;)(i=uG(I6(r),8)).a+=t,i.b+=e;return n}function lun(n,t,e){var i;for(i=n.b[e&n.f];i;i=i.b)if(e==i.a&&xQ(t,i.g))return i;return null}function bun(n,t,e){var i;for(i=n.c[e&n.f];i;i=i.d)if(e==i.f&&xQ(t,i.i))return i;return null}function wun(n,t,e){var i,r,c;for(i=0,r=0;r<e;r++)c=t[r],n[r]=c<<1|i,i=c>>>31;0!=i&&(n[e]=i)}function dun(n,t,e,i,r,c){var a;this.c=n,tTn(n,a=new Zm,t,n.b,e,i,r,c),this.a=new N4(a,0)}function gun(){this.c=new Vj(0),this.b=new Vj(F9n),this.d=new Vj(K9n),this.a=new Vj(_3n)}function pun(n,t,e,i,r,c,a){_E.call(this,n,t),this.d=e,this.e=i,this.c=r,this.b=c,this.a=n7(a)}function mun(n,t,e,i,r,c,a,o,u,s,h,f,l){return eLn(n,t,e,i,r,c,a,o,u,s,h,f,l),Sgn(n,!1),n}function vun(n){return n.b.c.i.k==(zIn(),lbt)?uG(oIn(n.b.c.i,(GYn(),rmt)),12):n.b.c}function kun(n){return n.b.d.i.k==(zIn(),lbt)?uG(oIn(n.b.d.i,(GYn(),rmt)),12):n.b.d}function yun(n){var t;return _A((t=t6(n)).a,0)?(gS(),gS(),fut):(gS(),new dR(t.b))}function Mun(n){var t;return _A((t=Z4(n)).a,0)?(dS(),dS(),hut):(dS(),new wR(t.b))}function Tun(n){var t;return _A((t=Z4(n)).a,0)?(dS(),dS(),hut):(dS(),new wR(t.c))}function jun(n){switch(n.g){case 2:return KQn(),_Rt;case 4:return KQn(),kRt;default:return n}}function Eun(n){switch(n.g){case 1:return KQn(),KRt;case 3:return KQn(),yRt;default:return n}}function Sun(n){switch(n.g){case 0:return new Wo;case 1:return new Qo;default:return null}}function Pun(){Pun=E,Hwt=new uF("edgelabelcenterednessanalysis.includelabel",(qx(),tot))}function Cun(){Cun=E,FEt=Lvn(gL(Aq(Aq(new wJ,(uIn(),Elt),(zYn(),kwt)),Slt,hwt),Plt),vwt)}function Iun(){Iun=E,XEt=Lvn(gL(Aq(Aq(new wJ,(uIn(),Elt),(zYn(),kwt)),Slt,hwt),Plt),vwt)}function Oun(){Oun=E,V_t=new Qk,Q_t=Uhn(cT(o_t,1),krt,179,0,[]),W_t=Uhn(cT(p_t,1),yrt,62,0,[])}function Aun(){Aun=E,Obt=new PC("TO_INTERNAL_LTR",0),Ibt=new PC("TO_INPUT_DIRECTION",1)}function Lun(){Lun=E,Tbt=new Bt,ybt=new Ht,Mbt=new Ut,kbt=new Gt,jbt=new qt,Ebt=new Xt}function Nun(n,t){t.Ug(g6n,1),Apn(FS(new Ad((zS(),new mY(n,!1,!1,new Ft))))),t.Vg()}function $un(n,t,e){e.Ug("DFS Treeifying phase",1),qmn(n,t),qKn(n,t),n.a=null,n.b=null,e.Vg()}function Dun(n,t){return qx(),RA(n)?r7(n,mK(t)):FA(n)?Rz(n,pK(t)):KA(n)?xz(n,gK(t)):n.Fd(t)}function xun(n,t){var e,i;for(tJ(t),i=t.vc().Kc();i.Ob();)e=uG(i.Pb(),44),n.zc(e.ld(),e.md())}function Run(n,t,e){var i;for(i=e.Kc();i.Ob();)if(!H5(n,t,i.Pb()))return!1;return!0}function Kun(n,t,e,i,r){var c;return e&&(c=emn(t.Dh(),n.c),r=e.Rh(t,-1-(-1==c?i:c),null,r)),r}function Fun(n,t,e,i,r){var c;return e&&(c=emn(t.Dh(),n.c),r=e.Th(t,-1-(-1==c?i:c),null,r)),r}function _un(n){var t;if(-2==n.b){if(0==n.e)t=-1;else for(t=0;0==n.a[t];t++);n.b=t}return n.b}function Bun(n){if(tJ(n),0==n.length)throw hv(new ZM("Zero length BigInteger"));XHn(this,n)}function Hun(n){this.i=n.gc(),this.i>0&&(this.g=this.aj(this.i+(this.i/8|0)+1),n.Qc(this.g))}function Uun(n,t,e){this.g=n,this.d=t,this.e=e,this.a=new Zm,RLn(this),hZ(),f$(this.a,null)}function Gun(n,t){t.q=n,n.d=e.Math.max(n.d,t.r),n.b+=t.d+(0==n.a.c.length?0:n.c),kD(n.a,t)}function qun(n,t){var e,i,r,c;return r=n.c,e=n.c+n.b,c=n.d,i=n.d+n.a,t.a>r&&t.a<e&&t.b>c&&t.b<i}function Xun(n,t){var e,i;for(i=Fkn(n,0);i.b!=i.d.c;)(e=uG(I6(i),8)).a+=t.a,e.b+=t.b;return n}function zun(n){var t,e;for(e=0,t=new Ww(n.b);t.a<t.c.c.length;)uG(N3(t),30).p=e,++e}function Vun(n){var t,e,i;return n.j==(KQn(),yRt)&&(e=$x(t=_$n(n),kRt),(i=$x(t,_Rt))||i&&e)}function Wun(n,t){var e;return jNn(new MO((e=ECn(n)).c,e.d),new MO(e.b,e.a),n.Mf(),t,n.ag())}function Qun(n,t){var e;vZ(e=uG(t,190),"x",n.i),vZ(e,"y",n.j),vZ(e,wet,n.g),vZ(e,bet,n.f)}function Jun(n,t){F$(t,85)?(uG(n.c,79).Gk(),hon(n,uG(t,85))):uG(n.c,79).Wb(t)}function Yun(n,t){var e,i;for(tJ(t),i=n.vc().Kc();i.Ob();)e=uG(i.Pb(),44),t.Yd(e.ld(),e.md())}function Zun(n,t){for(WW(t);n.Ob();)if(!shn(uG(n.Pb(),10)))return!1;return!0}function nsn(){var n;return Sut||(Sut=new ik,LN(n=new e9(""),(pS(),Eut)),won(Sut,n)),Sut}function tsn(n,t){return gen(new ld(n),new bd(t),new wd(t),new nn,Uhn(cT(Rut,1),p1n,108,0,[]))}function esn(){esn=E,iOt=new iO(q4n,0),rOt=new iO("POLAR_COORDINATE",1),eOt=new iO("ID",2)}function isn(){isn=E,Zjt=new vI("EQUALLY",0),nEt=new vI(o3n,1),tEt=new vI("NORTH_SOUTH",2)}function rsn(){rsn=E,Oht=new uF("debugSVG",(qx(),!1)),Aht=new uF("overlapsExisted",!0)}function csn(){csn=E,TNt=Abn((lAn(),Uhn(cT(SNt,1),p1n,285,0,[yNt,wNt,mNt,kNt,dNt,gNt,pNt,vNt])))}function asn(){asn=E,SFt=Abn((rDn(),Uhn(cT(PFt,1),p1n,245,0,[jFt,yFt,MFt,kFt,TFt,mFt,pFt,vFt])))}function osn(){osn=E,Kdt=Abn((h_n(),Uhn(cT(Xdt,1),p1n,276,0,[Odt,Ndt,Idt,xdt,Ldt,Adt,Ddt,$dt])))}function usn(){return OHn(),Uhn(cT(pPt,1),p1n,262,0,[fPt,rPt,uPt,sPt,oPt,iPt,hPt,tPt,aPt,cPt,ePt])}function ssn(n,t,e){var i,r;return r=uG(W_(n.d,t),17),i=uG(W_(n.b,e),17),r&&i?I7(n,r.a,i.a):null}function hsn(n,t){var e;return!!(e=QBn(aan(),n))&&(Myn(t,(XYn(),yDt),e),!0)}function fsn(n){return VK(),n.A.Hc((Qmn(),VRt))&&!n.B.Hc((oUn(),rKt))?xmn(n):null}function lsn(){this.a=uG(Jkn((cGn(),Tft)),17).a,this.c=uM(pK(Jkn(_ft))),this.b=uM(pK(Jkn(xft)))}function bsn(n){this.f=n,this.e=new a8(this.f.i),this.a=this.e,this.b=Phn(this),this.d=this.f.g}function wsn(n,t){_G.call(this,dBt,n,t),this.b=this,this.a=VKn(n.Dh(),ern(this.e.Dh(),this.c))}function dsn(n,t){var e,i;for(i=new Ww(t.b);i.a<i.c.c.length;)e=uG(N3(i),30),n.a[e.p]=OIn(e)}function gsn(n,t){var e;for(e=0;e<t.j.c.length;e++)uG(xen(n,e),21).Gc(uG(xen(t,e),16));return n}function psn(n,t,e,i){var r;e>(r=n.a.length)?e=r:s3(t,e+1),n.a=r1(n.a,0,t)+""+i+sQ(n.a,e)}function msn(n,t){n.a=Lgn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d=Lgn(n.d,t)}function vsn(n,t){return t<n.b.gc()?uG(n.b.Xb(t),10):t==n.b.gc()?n.a:uG(zq(n.e,t-n.b.gc()-1),10)}function ksn(n,t,e){return ugn(bD($kn(n),new MO(t.e.a,t.e.b)),bD($kn(n),new MO(e.e.a,e.e.b)))}function ysn(n,t,e){return n==(ean(),HEt)?new Cc:0!=uRn(t,1)?new rj(e.length):new ij(e.length)}function Msn(n,t){var e,i,r;if(null!=(e=n.th())&&n.wh())for(i=0,r=e.length;i<r;++i)e[i].dj(t)}function Tsn(n,t){var e,i,r;for(e=n.c.Xe(),r=t.Kc();r.Ob();)i=r.Pb(),n.a.Yd(e,i);return n.b.Kb(e)}function jsn(n,t){var e,i;for(i=HQ(e=n).e;i;){if((e=i)==t)return!0;i=HQ(e).e}return!1}function Esn(n){var t;return 0==(t=n.h)?n.l+n.m*w0n:t==l0n?n.l+n.m*w0n-d0n:n}function Ssn(n,t,e){var i,r;return(i=n.a.f[t.p])<(r=n.a.f[e.p])?-1:i==r?0:1}function Psn(n,t){var e,i;for(i=new Ww(t);i.a<i.c.c.length;)e=uG(N3(i),72),kD(n.d,e),TIn(n,e)}function Csn(n,t){t.Ug("Edge and layer constraint edge reversal",1),cQn(pBn(n)),t.Vg()}function Isn(n,t){var e,i;for(i=new DD(n);i.e!=i.i.gc();)kN(e=uG(Zkn(i),27),e.i+t.b,e.j+t.d)}function Osn(n){var t;null==n.d?(++n.e,n.f=0,Mwn(null)):(++n.e,t=n.d,n.d=null,n.f=0,Mwn(t))}function Asn(n){var t;if(n.a==n.b.a)throw hv(new Bv);return t=n.a,n.c=t,n.a=uG(nJ(n.a.e),227),t}function Lsn(n,t){var e;return 0!=(n.Db&t)?-1==(e=jTn(n,t))?n.Eb:Kcn(n.Eb)[e]:null}function Nsn(n,t){var e;return(e=new Kl).G=t,!n.rb&&(n.rb=new vV(n,s_t,n)),ttn(n.rb,e),e}function $sn(n,t){var e;return(e=new Gv).G=t,!n.rb&&(n.rb=new vV(n,s_t,n)),ttn(n.rb,e),e}function Dsn(n,t,e,i){F$(n.Cb,184)&&(uG(n.Cb,184).tb=null),qon(n,e),t&&INn(n,t),i&&n.gl(!0)}function xsn(n,t){n.c&&(vHn(n,t,!0),kS(new fX(null,new h3(t,16)),new Xg(n))),vHn(n,t,!1)}function Rsn(n){var t;return n$(),DP(vSt,n)||((t=new ca).a=n,yF(vSt,n,t)),uG(AJ(vSt,n),645)}function Ksn(n){var t;if(n.g>1||n.Ob())return++n.a,n.g=0,t=n.i,n.Ob(),t;throw hv(new Bv)}function Fsn(n){switch(n.a.g){case 1:return new KI;case 3:return new zTn;default:return new ml}}function _sn(n,t){switch(t){case 1:return!!n.n&&0!=n.n.i;case 2:return null!=n.k}return j4(n,t)}function Bsn(n){return p0n<n&&n<d0n?n<0?e.Math.ceil(n):e.Math.floor(n):Esn(oKn(n))}function Hsn(n){var t;return n<128?(rX(),!(t=sot[n])&&(t=sot[n]=new xw(n)),t):new xw(n)}function Usn(n,t){var e;try{t.de()}catch(i){if(!F$(i=Ehn(i),82))throw hv(i);e=i,mv(n.c,e)}}function Gsn(n){var t,e,i;return e=0,(i=n)<0&&(i+=d0n,e=l0n),t=t0(i/w0n),p$(t0(i-t*w0n),t,e)}function qsn(n){var t,e,i;for(i=0,e=new fS(n.a);e.a<e.c.a.length;)t=X5(e),n.b.Hc(t)&&++i;return i}function Xsn(n){var t,e,i;for(t=1,i=n.Kc();i.Ob();)t=~~(t=31*t+(null==(e=i.Pb())?0:Hon(e)));return t}function zsn(n,t){var e;return t?((e=t.nf()).dc()||(n.q?xun(n.q,e):n.q=new nL(e)),n):n}function Vsn(n,t){var e;return void 0===(e=n.a.get(t))?++n.d:(CF(n.a,t),--n.c,++n.b.g),e}function Wsn(n,t){var e;return 0==(e=t.p-n.p)?ugn(n.f.a*n.f.b,t.f.a*t.f.b):e}function Qsn(n,t){var e,i;return(e=n.j)!=(i=t.j)?e.g-i.g:n.p==t.p?0:e==(KQn(),yRt)?n.p-t.p:t.p-n.p}function Jsn(n,t,e,i,r){uQ(n.c[t.g],e.g,i),uQ(n.c[e.g],t.g,i),uQ(n.b[t.g],e.g,r),uQ(n.b[e.g],t.g,r)}function Ysn(n,t,e){this.b=(tJ(n),n),this.d=(tJ(t),t),this.e=(tJ(e),e),this.c=this.d+""+this.e}function Zsn(n,t){this.b=n,this.e=t,this.d=t.j,this.f=(PP(),uG(n,69).xk()),this.k=VKn(t.e.Dh(),n)}function nhn(n){this.n=new Zm,this.e=new lS,this.j=new lS,this.k=new Zm,this.f=new Zm,this.p=n}function thn(n){n.r=new ek,n.w=new ek,n.t=new Zm,n.i=new Zm,n.d=new ek,n.a=new cN,n.c=new Ym}function ehn(){ehn=E,pht=new uC("UP",0),wht=new uC(c3n,1),dht=new uC(z2n,2),ght=new uC(V2n,3)}function ihn(){ihn=E,fpt=new oI("ONE_SIDED",0),lpt=new oI("TWO_SIDED",1),hpt=new oI("OFF",2)}function rhn(){rhn=E,OAt=new sO("EQUAL_BETWEEN_STRUCTURES",0),AAt=new sO("TO_ASPECT_RATIO",1)}function chn(){chn=E,ojt=Abn((MKn(),Uhn(cT(fjt,1),p1n,265,0,[rjt,tjt,ejt,YTt,njt,cjt,ijt,JTt,ZTt])))}function ahn(){ahn=E,hKt=Abn((oUn(),Uhn(cT(wKt,1),p1n,264,0,[eKt,rKt,tKt,cKt,aKt,uKt,oKt,iKt,nKt])))}function ohn(){ohn=E,Qxt=Abn((VDn(),Uhn(cT(eRt,1),p1n,95,0,[Bxt,_xt,Uxt,Vxt,zxt,Xxt,Gxt,qxt,Hxt])))}function uhn(){uhn=E,kst=Abn((W_n(),Uhn(cT(yst,1),p1n,257,0,[pst,lst,bst,fst,dst,gst,wst,hst,sst])))}function shn(n){var t;return t=uG(oIn(n,(GYn(),Fpt)),64),n.k==(zIn(),lbt)&&(t==(KQn(),_Rt)||t==kRt)}function hhn(n,t,e){var i,r;(r=uG(oIn(n,(jYn(),bMt)),75))&&(rbn(i=new Uk,0,r),Xun(i,e),Qon(t,i))}function fhn(n,t,e){var i,r,c,a;i=(a=HQ(n)).d,r=a.c,c=n.n,t&&(c.a=c.a-i.b-r.a),e&&(c.b=c.b-i.d-r.b)}function lhn(n,t){var e,i;return(e=n.f.c.length)<(i=t.f.c.length)?-1:e==i?0:1}function bhn(n){return 0!=n.b.c.length&&uG(zq(n.b,0),72).a?uG(zq(n.b,0),72).a:sY(n)}function whn(n){var t;if(n){if((t=n).dc())throw hv(new Bv);return t.Xb(t.gc()-1)}return y2(n.Kc())}function dhn(n){var t;return dwn(n,0)<0&&(n=CG(n)),64-(0!=(t=pz(Dz(n,32)))?GNn(t):GNn(pz(n))+32)}function ghn(){return t9(),Nut?new e9(null):$$n(nsn(),"com.google.common.base.Strings")}function phn(n,t,e,i){return 1==e?(!n.n&&(n.n=new fV(lFt,n,1,7)),Nyn(n.n,t,i)):BIn(n,t,e,i)}function mhn(n,t){var e;return qon(e=new Fs,t),ttn((!n.A&&(n.A=new PD(J_t,n,7)),n.A),e),e}function vhn(n,t,e){var i,r;return r=p6(t,pet),iSn((i=new QO(n,e)).a,i.b,r),r}function khn(n){var t;return(!n.a||0==(1&n.Bb)&&n.a.Vh())&&F$(t=bEn(n),156)&&(n.a=uG(t,156)),n.a}function yhn(n,t){var e,i;for(tJ(t),i=t.Kc();i.Ob();)if(e=i.Pb(),!n.Hc(e))return!1;return!0}function Mhn(n,t){var e,i,r;return e=n.l+t.l,i=n.m+t.m+(e>>22),r=n.h+t.h+(i>>22),p$(e&f0n,i&f0n,r&l0n)}function Thn(n,t){var e,i,r;return e=n.l-t.l,i=n.m-t.m+(e>>22),r=n.h-t.h+(i>>22),p$(e&f0n,i&f0n,r&l0n)}function jhn(n){var t,e;for(BQn(n),e=new Ww(n.d);e.a<e.c.c.length;)(t=uG(N3(e),105)).i&&NOn(t)}function Ehn(n){var t;return F$(n,82)?n:((t=n&&n.__java$exception)||Cv(t=new qbn(n)),t)}function Shn(n){if(F$(n,193))return uG(n,123);if(n)return null;throw hv(new MM(Het))}function Phn(n){return!!n.a.Ob()||n.a==n.e&&(n.a=new Hnn(n.f.f),n.a.Ob())}function Chn(n,t){if(null==t)return!1;for(;n.a!=n.b;)if(udn(t,rwn(n)))return!0;return!1}function Ihn(n,t){return!(!n||!t||n==t)&&hvn(n.d.c,t.d.c+t.d.b)&&hvn(t.d.c,n.d.c+n.d.b)}function Ohn(n,t){var e;return 0!=(e=t.Pc()).length&&(dG(n.c,n.c.length,e),!0)}function Ahn(n,t,e){var i,r;for(r=t.vc().Kc();r.Ob();)i=uG(r.Pb(),44),n.yc(i.ld(),i.md(),e);return n}function Lhn(n){var t,e;for(t=new lS,e=Fkn(n.d,0);e.b!=e.d.c;)aq(t,uG(I6(e),65).c);return t}function Nhn(n,t){var e;for(e=new Ww(n.b);e.a<e.c.c.length;)kfn(uG(N3(e),72),(GYn(),Qpt),t)}function $hn(n,t,e){var i,r;for(r=new Ww(n.b);r.a<r.c.c.length;)kN(i=uG(N3(r),27),i.i+t,i.j+e)}function Dhn(n,t){if(!n)throw hv(new vM(LBn("value already present: %s",Uhn(cT(dat,1),EZn,1,5,[t]))))}function xhn(n,t,i,r,c){return l_n(),e.Math.min(uWn(n,t,i,r,c),uWn(i,r,n,t,BR(new MO(c.a,c.b))))}function Rhn(n,t,e,i){uG(e.b,68),uG(e.b,68),uG(i.b,68),uG(i.b,68),uG(i.b,68),Prn(i.a,new NU(n,t,i))}function Khn(n,t){n.d==(xdn(),JDt)||n.d==nxt?uG(t.a,60).c.Fc(uG(t.b,60)):uG(t.b,60).c.Fc(uG(t.a,60))}function Fhn(n,t){var e;return e=iR(t.a.gc()),kS(krn(new fX(null,new h3(t,1)),n.i),new yO(n,e)),e}function _hn(n){var t;return qon(t=new Fs,"T"),ttn((!n.d&&(n.d=new PD(J_t,n,11)),n.d),t),t}function Bhn(n){var t,e,i,r;for(t=1,e=0,r=n.gc();e<r;++e)t=31*t+(null==(i=n.Vi(e))?0:Hon(i));return t}function Hhn(n,t,e,i){var r;return q4(t,n.e.Rd().gc()),q4(e,n.c.Rd().gc()),r=n.a[t][e],uQ(n.a[t],e,i),r}function Uhn(n,t,e,i,r){return r.Rm=n,r.Sm=t,r.Tm=j,r.__elementTypeId$=e,r.__elementTypeCategory$=i,r}function Ghn(){Ghn=E,zwt=new IC(q4n,0),qwt=new IC(M6n,1),Xwt=new IC(T6n,2),Gwt=new IC("BOTH",3)}function qhn(){qhn=E,odt=new XC(G2n,0),udt=new XC(z2n,1),sdt=new XC(V2n,2),hdt=new XC("TOP",3)}function Xhn(){Xhn=E,Flt=new jC("Q1",0),Hlt=new jC("Q4",1),_lt=new jC("Q2",2),Blt=new jC("Q3",3)}function zhn(){zhn=E,kEt=new TI("OFF",0),yEt=new TI("SINGLE_EDGE",1),vEt=new TI("MULTI_EDGE",2)}function Vhn(){Vhn=E,VLt=new wO("MINIMUM_SPANNING_TREE",0),zLt=new wO("MAXIMUM_SPANNING_TREE",1)}function Whn(){Whn=E,new Cm("org.eclipse.elk.addLayoutConfig"),ZLt=new ru,YLt=new iu,new cu}function Qhn(n){var t;return gj(),t=new is,n&&ttn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),t),t}function Jhn(n){var t,e;for(e=new Zm,t=n.Kc();t.Ob();)Ohn(e,GFn(uG(t.Pb(),27)));return e}function Yhn(n,t){var e,i;for(bZ(t,"predicate"),i=0;n.Ob();i++)if(e=n.Pb(),t.Lb(e))return i;return-1}function Zhn(n,t){var e,i;if(i=0,n<64&&n<=t)for(t=t<64?t:63,e=n;e<=t;e++)i=S3(i,Nz(1,e));return i}function nfn(n,t){var e,i;return e=n.c,(i=t.e[n.p])<e.a.c.length-1?uG(zq(e.a,i+1),10):null}function tfn(n){var t,e,i;for(hZ(),i=0,e=n.Kc();e.Ob();)i+=null!=(t=e.Pb())?Hon(t):0,i|=0;return i}function efn(n){var t,e;return e=(t=uG(n.e&&n.e(),9)).slice(),new nB(t,uG(Ltn(e,t),9),t.length)}function ifn(n,t,e){var i;$V(n.a),Prn(e.i,new Bp(n)),Wvn(n,i=new C$(uG(cQ(n.a,t.b),68)),t),e.f=i}function rfn(n){var t;pqn(n,!0),t=$1n,vR(n,(jYn(),aTt))&&(t+=uG(oIn(n,aTt),17).a),kfn(n,aTt,xwn(t))}function cfn(n){var t;return(t=new y).a=n,t.b=Qfn(n),t.c=Inn($ot,zZn,2,2,6,1),t.c[0]=Zon(n),t.c[1]=Zon(n),t}function afn(n){var t,e,i;return e=n.n,i=n.o,t=n.d,new gY(e.a-t.b,e.b-t.d,i.a+(t.b+t.c),i.b+(t.d+t.a))}function ofn(n,t){return!(!n||!t||n==t)&&Fgn(n.b.c,t.b.c+t.b.b)<0&&Fgn(t.b.c,n.b.c+n.b.b)<0}function ufn(n){switch(n.g){case 1:return Dxt;case 2:return $xt;case 3:return xxt;default:return Rxt}}function sfn(n){switch(uG(oIn(n,(jYn(),gMt)),171).g){case 2:case 4:return!0;default:return!1}}function hfn(n,t,e){switch(e.g){case 2:n.b=t;break;case 1:n.c=t;break;case 4:n.d=t;break;case 3:n.a=t}}function ffn(n,t){if(0===t)return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),void n.o.c.$b();oAn(n,t)}function lfn(n,t){return OGn(uG(uG(cQ(n.g,t.a),42).a,68),uG(uG(cQ(n.g,t.b),42).a,68))}function bfn(n,t,e){var i;if(t>(i=n.gc()))throw hv(new w_(t,i));return n.Si()&&(e=A0(n,e)),n.Ei(t,e)}function wfn(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)eTn(n,c,a)||HBn(n,c,a,!0,!1)}function dfn(n){var t,e,i;for(l_n(),e=Inn(PNt,zZn,8,2,0,1),i=0,t=0;t<2;t++)i+=.5,e[t]=WMn(i,n);return e}function gfn(n){var t,e;return p$(t=1+~n.l&f0n,e=~n.m+(0==t?1:0)&f0n,~n.h+(0==t&&0==e?1:0)&l0n)}function pfn(n){var t;if(n<0)return j1n;if(0==n)return 0;for(t=d1n;0==(t&n);t>>=1);return t}function mfn(n,t,e){return!(n>=128)&&HA(n<64?E3(Nz(1,n),e):E3(Nz(1,n-64),t),0)}function vfn(n,t,e){return null==e?(!n.q&&(n.q=new Ym),u7(n.q,t)):(!n.q&&(n.q=new Ym),vJ(n.q,t,e)),n}function kfn(n,t,e){return null==e?(!n.q&&(n.q=new Ym),u7(n.q,t)):(!n.q&&(n.q=new Ym),vJ(n.q,t,e)),n}function yfn(n){var t,e;return zsn(e=new d7,n),kfn(e,(mon(),Wft),n),kqn(n,e,t=new Ym),zWn(n,e,t),e}function Mfn(n){var t,e;return t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p]>n.f,e=n.u+n.e[n.o.p]*n.d>n.f*n.s*n.d,t||e}function Tfn(n,t){var e,i,r;for(e=!1,i=n.a[t].length,r=0;r<i-1;r++)e|=tvn(n,t,r,r+1);return e}function jfn(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)Hfn(n,t=e[i],(KQn(),KRt)),Hfn(n,t,yRt)}function Efn(){Efn=E,spt=Abn((r_n(),Uhn(cT(bpt,1),p1n,259,0,[Zgt,tpt,ept,ipt,rpt,cpt,opt,Ygt,npt,apt])))}function Sfn(){Sfn=E,Rjt=Abn((THn(),Uhn(cT(Hjt,1),p1n,243,0,[$jt,Ijt,Ljt,Ojt,Ajt,Sjt,Njt,Djt,Pjt,Cjt])))}function Pfn(){Pfn=E,kgt=new tI(q4n,0),vgt=new tI("INCOMING_ONLY",1),ygt=new tI("OUTGOING_ONLY",2)}function Cfn(){Cfn=E,Wat={boolean:uS,number:hM,string:fM,object:wLn,function:wLn,undefined:lv}}function Ifn(){this.o=null,this.k=null,this.j=null,this.d=null,this.b=null,this.n=null,this.a=null}function Ofn(n,t){this.c=n,this.d=t,this.b=this.d/this.c.c.Rd().gc()|0,this.a=this.d%this.c.c.Rd().gc()}function Afn(n,t){this.b=n,vL.call(this,(uG(zrn(gZ((tQ(),M_t).o),10),19),t.i),t.g),this.a=(Oun(),Q_t)}function Lfn(n,t,i){this.q=new e.Date,this.q.setFullYear(n+V1n,t,i),this.q.setHours(0,0,0,0),Iqn(this,0)}function Nfn(n,t){vG(n>=0,"Negative initial capacity"),vG(t>=0,"Non-positive load factor"),$V(this)}function $fn(n,t,e,i,r){var c,a;if(a=n.length,c=e.length,t<0||i<0||r<0||t+r>a||i+r>c)throw hv(new Lv)}function Dfn(n,t){var e,i,r,c,a;for(hZ(),a=!1,r=0,c=(i=t).length;r<c;++r)e=i[r],a|=n.Fc(e);return a}function xfn(n,t,e){var i,r;return i=new _nn(t,e),r=new B,n.b=FFn(n,n.b,i,r),r.b||++n.c,n.b.b=!1,r.d}function Rfn(n){var t;return null==(t=n.a[n.b])?null:(uQ(n.a,n.b,null),n.b=n.b+1&n.a.length-1,t)}function Kfn(n){var t,e;return 32==(e=GNn(n.h))?32==(t=GNn(n.m))?GNn(n.l)+32:t+20-10:e-12}function Ffn(n){var t;return(!n.c||0==(1&n.Bb)&&0!=(64&n.c.Db))&&F$(t=bEn(n),90)&&(n.c=uG(t,29)),n.c}function _fn(n){var t,e;for(e=new Ww(n.a.b);e.a<e.c.c.length;)(t=uG(N3(e),60)).d.c=-t.d.c-t.d.b;hKn(n)}function Bfn(n){var t,e;for(e=new Ww(n.a.b);e.a<e.c.c.length;)(t=uG(N3(e),86)).g.c=-t.g.c-t.g.b;fKn(n)}function Hfn(n,t,e){var i,r,c;for(c=0,r=Vwn(t,e).Kc();r.Ob();)i=uG(r.Pb(),12),vJ(n.c,i,xwn(c++))}function Ufn(n,t,e){var i;return gFn(n,t,i=new Zm,(KQn(),kRt),!0,!1),gFn(n,e,i,_Rt,!1,!1),i}function Gfn(n){var t,e,i,r,c;for(t=new sj,r=0,c=(i=n).length;r<c;++r)e=i[r],t.a+=e.a,t.b+=e.b;return t}function qfn(n,t,e){var i,r;return r=p6(t,"labels"),_Dn((i=new aA(n,e)).a,i.b,r),r}function Xfn(n,t,e,i){var r;return(r=hxn(n,t,e,i))||!(r=Odn(n,e,i))||iVn(n,t,r)?r:null}function zfn(n,t,e,i){var r;return(r=fxn(n,t,e,i))||!(r=Adn(n,e,i))||iVn(n,t,r)?r:null}function Vfn(n,t,e){if(WW(t),e.Ob())for(YA(t,KQ(e.Pb()));e.Ob();)YA(t,n.a),YA(t,KQ(e.Pb()));return t}function Wfn(n,t){var e;for(e=0;e<n.a.a.length;e++)if(!uG(Vq(n.a,e),178).Lb(t))return!1;return!0}function Qfn(n){var t;return 0==n?"Etc/GMT":(n<0?(n=-n,t="Etc/GMT-"):t="Etc/GMT+",t+oin(n))}function Jfn(n){var t;return!(n.b<=0)&&((t=xL("MLydhHmsSDkK",$Cn(VJ(n.c,0))))>1||t>=0&&n.b<3)}function Yfn(n){var t,e,i;t=1+~n.l&f0n,e=~n.m+(0==t?1:0)&f0n,i=~n.h+(0==t&&0==e?1:0)&l0n,n.l=t,n.m=e,n.h=i}function Zfn(n){var t,e,i;for(hZ(),i=1,e=n.Kc();e.Ob();)i=31*i+(null!=(t=e.Pb())?Hon(t):0),i|=0;return i}function nln(n,t,e,i,r){var c;return c=gDn(n,t),e&&Yfn(c),r&&(n=hTn(n,t),Qat=i?gfn(n):p$(n.l,n.m,n.h)),c}function tln(n,t,e){n.g=mAn(n,t,(KQn(),kRt),n.b),n.d=mAn(n,e,kRt,n.b),0!=n.g.c&&0!=n.d.c&&AIn(n)}function eln(n,t,e){n.g=mAn(n,t,(KQn(),_Rt),n.j),n.d=mAn(n,e,_Rt,n.j),0!=n.g.c&&0!=n.d.c&&AIn(n)}function iln(n,t){switch(t){case 7:return!!n.e&&0!=n.e.i;case 8:return!!n.d&&0!=n.d.i}return Kpn(n,t)}function rln(n,t){switch(t.g){case 0:F$(n.b,641)||(n.b=new lsn);break;case 1:F$(n.b,642)||(n.b=new zG)}}function cln(n){if(0===n.g)return new eu;throw hv(new vM(lnt+(null!=n.f?n.f:""+n.g)))}function aln(n){if(0===n.g)return new nu;throw hv(new vM(lnt+(null!=n.f?n.f:""+n.g)))}function oln(n,t,e){return!Qj(JJ(new fX(null,new h3(n.c,16)),new hd(new GO(t,e)))).Bd((vS(),Kut))}function uln(n,t){return bD($kn(uG(oIn(t,(QGn(),cCt)),88)),new MO(n.c.e.a-n.b.e.a,n.c.e.b-n.b.e.b))<=0}function sln(n,t){for(;null!=n.g||n.c?null==n.g||0!=n.i&&uG(n.g[n.i-1],51).Ob():O0(n);)yA(t,Wxn(n))}function hln(n){var t;for(t=new Ww(n.a.b);t.a<t.c.c.length;)uG(N3(t),86).f.$b();Zy(n.b,n),LKn(n)}function fln(n){var t,e;for(t=new Uk,e=Fkn(n,0);e.b!=e.d.c;)sR(t,0,new eN(uG(I6(e),8)));return t}function lln(n){var t;return GQ(n),t=new un,n.a.Bd(t)?(UD(),new Xy(tJ(t.a))):(UD(),UD(),sut)}function bln(n,t,e){if(0===t)return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),void Jun(n.o,e);sLn(n,t,e)}function wln(n,t,e){this.g=n,this.e=new sj,this.f=new sj,this.d=new lS,this.b=new lS,this.a=t,this.c=e}function dln(n,t,e,i){this.b=new Zm,this.n=new Zm,this.i=i,this.j=e,this.s=n,this.t=t,this.r=0,this.d=0}function gln(n,t){if(!n.Li()&&null==t)throw hv(new vM("The 'no null' constraint is violated"));return t}function pln(n){var t,e;for(t=0,e=0;e<n.length;e++)t=(t<<5)-t+(s3(e,n.length),n.charCodeAt(e))|0;return t}function mln(n,t){var e,i,r;for(r=n.b;r;){if(0==(e=n.a.Ne(t,r.d)))return r;i=e<0?0:1,r=r.a[i]}return null}function vln(n,t,e){var i,r;qx(),i=!!IL(e),(r=uG(t.xc(i),15))||(r=new Zm,t.zc(i,r)),r.Fc(e)}function kln(n,t){var e,i;return(e=uG(zDn(n,(S_n(),JOt)),17).a)==(i=uG(zDn(t,JOt),17).a)||e<i?-1:e>i?1:0}function yln(n){return kD(n.c,(Whn(),ZLt)),xrn(n.a,uM(pK(Jkn((lmn(),WTt)))))?new zu:new zp(n)}function Mln(n){for(;!n.d||!n.d.Ob();){if(!n.b||LM(n.b))return null;n.d=uG(xV(n.b),51)}return n.d}function Tln(n){switch(n.g){case 1:return K9n;default:case 2:return 0;case 3:return _3n;case 4:return F9n}}function jln(){var n;return QYn(),VHt||(n=eR(kJn("M",!0)),n=CX(kJn("M",!1),n),VHt=n)}function Eln(){Eln=E,CKt=new uA("ELK",0),IKt=new uA("JSON",1),PKt=new uA("DOT",2),OKt=new uA("SVG",3)}function Sln(){Sln=E,aEt=new kI("STACKED",0),rEt=new kI("REVERSE_STACKED",1),cEt=new kI("SEQUENCED",2)}function Pln(){Pln=E,gPt=new WI(q4n,0),dPt=new WI("MIDDLE_TO_MIDDLE",1),wPt=new WI("AVOID_OVERLAP",2)}function Cln(){Cln=E,tdt=new ji,edt=new Ei,ndt=new Mi,Zwt=new Si,tJ(new Ti),Ywt=new L}function Iln(){Iln=E,Pxt=new CN(15),Sxt=new _N((XYn(),W$t),Pxt),Cxt=mDt,Mxt=a$t,Txt=_$t,Ext=U$t,jxt=H$t}function Oln(n,t){var e,i,r,c,a;for(r=0,c=(i=t).length;r<c;++r)e=i[r],a=new lQ(n),e.hf(a),zqn(a);$V(n.f)}function Aln(n,t){var e;return t===n||!!F$(t,229)&&(e=uG(t,229),udn(n.Zb(),e.Zb()))}function Lln(n,t){return!!rKn(n,t)&&(UNn(n.b,uG(oIn(t,(GYn(),xpt)),21),t),aq(n.a,t),!0)}function Nln(n){var t,e;(t=uG(oIn(n,(GYn(),lmt)),10))&&(men((e=t.c).a,t),0==e.a.c.length&&men(HQ(t).b,e))}function $ln(n,t){return vR(n,(GYn(),imt))&&vR(t,imt)?uG(oIn(t,imt),17).a-uG(oIn(n,imt),17).a:0}function Dln(n,t){return vR(n,(GYn(),imt))&&vR(t,imt)?uG(oIn(n,imt),17).a-uG(oIn(t,imt),17).a:0}function xln(n){return Nut?Inn(Put,i2n,581,0,0,1):uG(Ekn(n.a,Inn(Put,i2n,581,n.a.c.length,0,1)),856)}function Rln(n,t,e,i){return TJ(),new Ry(Uhn(cT(Sat,1),c1n,44,0,[(IMn(n,t),new FE(n,t)),(IMn(e,i),new FE(e,i))]))}function Kln(n,t,e){var i;return san(i=new Yk,t,e),ttn((!n.q&&(n.q=new fV(p_t,n,11,10)),n.q),i),i}function Fln(n){var t,e,i,r;for(e=(r=LP(YKt,n)).length,i=Inn($ot,zZn,2,e,6,1),t=0;t<e;++t)i[t]=r[t];return i}function _ln(n,t){var e;2*t+1>=n.b.c.length||(_ln(n,2*t+1),(e=2*t+2)<n.b.c.length&&_ln(n,e),CLn(n,t))}function Bln(n,t){var e,i;for(i=Fkn(n,0);i.b!=i.d.c;)(e=uG(I6(i),219)).e.length>0&&(t.Cd(e),e.i&&Zdn(e))}function Hln(n,t,e){var i;for(i=e-1;i>=0&&n[i]===t[i];i--);return i<0?0:$P(E3(n[i],L0n),E3(t[i],L0n))?-1:1}function Uln(n,t,e){var i,r;this.g=n,this.c=t,this.a=this,this.d=this,r=aon(e),i=Inn($at,l1n,227,r,0,1),this.b=i}function Gln(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)if(eTn(n,c,a))return!0;return!1}function qln(n,t){var e;for(e=n.Zb().Cc().Kc();e.Ob();)if(uG(e.Pb(),16).Hc(t))return!0;return!1}function Xln(n,t,e){var i,r,c,a;for(tJ(e),a=!1,c=n.fd(t),r=e.Kc();r.Ob();)i=r.Pb(),c.Rb(i),a=!0;return a}function zln(n,t){var e,i;return i=uG(Lsn(n.a,4),129),e=Inn(xFt,Uit,424,t,0,1),null!=i&&qGn(i,0,e,0,i.length),e}function Vln(n,t){var e;return e=new Z_n(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,t),null!=n.e||(e.c=n),e}function Wln(n,t){var e;return n===t||!!F$(t,85)&&(e=uG(t,85),OOn(Mz(n),e.vc()))}function Qln(n,t,e){var i,r;for(r=e.Kc();r.Ob();)if(i=uG(r.Pb(),44),n.Be(t,i.md()))return!0;return!1}function Jln(n,t,e){return n.d[t.p][e.p]||(Kyn(n,t,e),n.d[t.p][e.p]=!0,n.d[e.p][t.p]=!0),n.a[t.p][e.p]}function Yln(n,t){return!(!n||n==t||!vR(t,(GYn(),zpt)))&&uG(oIn(t,(GYn(),zpt)),10)!=n}function Zln(n){switch(n.i){case 2:return!0;case 1:return!1;case-1:++n.c;default:return n.$l()}}function nbn(n){switch(n.i){case-2:return!0;case-1:return!1;case 1:--n.c;default:return n._l()}}function tbn(n){U0.call(this,"The given string does not match the expected format for individual spacings.",n)}function ebn(n,t){var e;t.Ug("Min Size Preprocessing",1),e=xAn(n),Myn(n,(lBn(),EOt),e.a),Myn(n,MOt,e.b),t.Vg()}function ibn(n){var t,e,i;for(t=0,i=Inn(PNt,zZn,8,n.b,0,1),e=Fkn(n,0);e.b!=e.d.c;)i[t++]=uG(I6(e),8);return i}function rbn(n,t,e){var i,r;for(i=new lS,r=Fkn(e,0);r.b!=r.d.c;)aq(i,new eN(uG(I6(r),8)));Xln(n,t,i)}function cbn(n,t){var e;return e=Lgn(n,t),$P(P3(n,t),0)|BA(P3(n,e),0)?e:Lgn(YZn,P3(Dz(e,63),1))}function abn(n,t){var e,i;return(e=uG(n.d.Bc(t),16))?((i=n.e.hc()).Gc(e),n.e.d-=e.gc(),e.$b(),i):null}function obn(n){var t;if((t=n.a.c.length)>0)return Vz(t-1,n.a.c.length),i7(n.a,t-1);throw hv(new _v)}function ubn(n,t,e){if(n>t)throw hv(new vM(o2n+n+u2n+t));if(n<0||t>e)throw hv(new YM(o2n+n+s2n+t+Q0n+e))}function sbn(n,t){null==n.D&&null!=n.B&&(n.D=n.B,n.B=null),qan(n,null==t?null:(tJ(t),t)),n.C&&n.hl(null)}function hbn(n,t){var e;e=null!=Jkn((lmn(),WTt))&&null!=t.Sg()?uM(pK(t.Sg()))/uM(pK(Jkn(WTt))):1,vJ(n.b,t,e)}function fbn(n,t){var e,i;if(0!=(i=n.c[t]))for(n.c[t]=0,n.d-=i,e=t+1;e<n.a.length;)n.a[e]-=i,e+=e&-e}function lbn(n){var t;++n.j,0==n.i?n.g=null:n.i<n.g.length&&(t=n.g,n.g=n.aj(n.i),qGn(t,0,n.g,0,n.i))}function bbn(n,t,e){if(t<0)throw hv(new dM(Nnt+t));t<n.j.c.length?Y8(n.j,t,e):(p5(n,t),kD(n.j,e))}function wbn(n){if(!n.a||0==(8&n.a.i))throw hv(new kM("Enumeration class expected for layout option "+n.f))}function dbn(n){var t;return!n.a&&(n.a=new fV(d_t,n,9,5)),0!=(t=n.a).i?bP(uG(zrn(t,0),694)):null}function gbn(n){var t;for(WW(n),CB(!0,"numberToAdvance must be nonnegative"),t=0;t<0&&hDn(n);t++)N9(n);return t}function pbn(){pbn=E,BS(),Hht=new mL(I3n,Uht=Kht),Bht=new Cm(O3n),Ght=new Cm(A3n),qht=new Cm(L3n)}function mbn(){mbn=E,xCt=new QI(X4n,0),$Ct=new QI(Q9n,1),DCt=new QI("FAN",2),NCt=new QI("CONSTRAINT",3)}function vbn(){vbn=E,sIt=new tO(q4n,0),hIt=new tO("RADIAL_COMPACTION",1),fIt=new tO("WEDGE_COMPACTION",2)}function kbn(){kbn=E,sEt=new yI("CONSERVATIVE",0),hEt=new yI("CONSERVATIVE_SOFT",1),fEt=new yI("SLOPPY",2)}function ybn(){ybn=E,Cut=new XP("CONCURRENT",0),Iut=new XP("IDENTITY_FINISH",1),Out=new XP("UNORDERED",2)}function Mbn(){Mbn=E,Nlt=g0(Uhn(cT(axt,1),p1n,88,0,[(xdn(),JDt),YDt])),$lt=g0(Uhn(cT(axt,1),p1n,88,0,[nxt,QDt]))}function Tbn(n){return RA(n)?$ot:FA(n)?fot:KA(n)?cot:Cz(n)||xX(n)?n.Rm:n.Rm||Array.isArray(n)&&cT(Kat,1)||Kat}function jbn(n){return n?0!=(1&n.i)?n==ZHt?cot:n==YHt?dot:n==iUt?lot:n==eUt?fot:n==nUt?yot:n==rUt?Tot:n==tUt?uot:hot:n:null}function Ebn(n){return n.c==n.b.b&&n.i==n.g.b||(Xv(n.a.c,0),Ohn(n.a,n.b),Ohn(n.a,n.g),n.c=n.b.b,n.i=n.g.b),n.a}function Sbn(n,t){var e,i;for(e=n.a.length-1;t!=n.b;)i=t-1&e,uQ(n.a,t,n.a[i]),t=i;uQ(n.a,n.b,null),n.b=n.b+1&e}function Pbn(n,t){var e,i;for(e=n.a.length-1,n.c=n.c-1&e;t!=n.c;)i=t+1&e,uQ(n.a,t,n.a[i]),t=i;uQ(n.a,n.c,null)}function Cbn(n,t,e){var i;return o3(t,n.c.length),0!=(i=e.Pc()).length&&(dG(n.c,t,i),!0)}function Ibn(n,t,e){var i,r,c,a;for(c=0,a=(r=e).length;c<a;++c)if(i=r[c],n.b.Be(t,i.ld()))return i;return null}function Obn(n){var t,e,i,r,c;for(c=1,i=0,r=(e=n).length;i<r;++i)c=31*c+(null!=(t=e[i])?Hon(t):0),c|=0;return c}function Abn(n){var t,e,i,r,c;for(t={},r=0,c=(i=n).length;r<c;++r)t[":"+(null!=(e=i[r]).f?e.f:""+e.g)]=e;return t}function Lbn(n){var t,e;if(null==n)return null;for(t=0,e=n.length;t<e;t++)if(!OG(n[t]))return n[t];return null}function Nbn(n,t){return n?t&&!n.j||F$(n,127)&&0==uG(n,127).a.b?0:n.jf():0}function $bn(n,t){return n?t&&!n.k||F$(n,127)&&0==uG(n,127).a.a?0:n.kf():0}function Dbn(n,t){return vR(n,(GYn(),imt))&&vR(t,imt)?d$(uG(oIn(n,imt),17).a,uG(oIn(t,imt),17).a):0}function xbn(n){var t,e,i;for(i=0,e=new Fz(ix(n.a.Kc(),new h));hDn(e);)(t=uG(N9(e),18)).c.i==t.d.i||++i;return i}function Rbn(n,t){var e,i,r;for(r=t-n.f,i=new Ww(n.d);i.a<i.c.c.length;)Xmn(e=uG(N3(i),315),e.e,e.f+r);n.f=t}function Kbn(n,t){var e,i;e=n.Yk(t,null),i=null,t&&(vj(),Urn(i=new ev,n.r)),(e=CCn(n,i,e))&&e.oj()}function Fbn(n,t){var e,i,r;for(e=n,r=0;;){if(e==t)return r;if(!(i=e.e))throw hv(new Dv);e=HQ(i),++r}}function _bn(n){var t,e;for(t=n.b.a.a.ec().Kc();t.Ob();)e=new Uxn(uG(t.Pb(),567),n.e,n.f),kD(n.g,e)}function Bbn(n){var t;return t=new Jin(n),O4(n.a,Wlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[t]))),t.d&&kD(t.f,t.d),t.f}function Hbn(n,t){var e;for(e=0;e<t.length;e++)if(n==(s3(e,t.length),t.charCodeAt(e)))return!0;return!1}function Ubn(n,t){return t<n.length&&(s3(t,n.length),63!=n.charCodeAt(t))&&(s3(t,n.length),35!=n.charCodeAt(t))}function Gbn(n,t,e,i){A$(this),this.c=Inn(pbt,e6n,10,n.a.c.length,0,1),this.e=t,Ekn(n.a,this.c),this.f=e,this.b=i}function qbn(n){Uy(),LD(this),KY(this),this.e=n,yFn(this,n),this.g=null==n?IZn:cpn(n),this.a="",this.b=n,this.a=""}function Xbn(){this.a=new Jo,this.f=new $p(this),this.b=new Dp(this),this.i=new xp(this),this.e=new Rp(this)}function zbn(){Cy.call(this,new Bnn(orn(16))),man(2,XZn),this.b=2,this.a=new lJ(null,null,0,null),Tv(this.a,this.a)}function Vbn(n){throw Cfn(),hv(new Fy("Unexpected typeof result '"+n+"'; please report this bug to the GWT team"))}function Wbn(n,t,i){return e.Math.abs(t-n)<R9n||e.Math.abs(i-n)<R9n||(t-n>R9n?n-i>R9n:i-n>R9n)}function Qbn(n,t){var e;for(e=0;e<t.length;e++)if(n==(s3(e,t.length),t.charCodeAt(e)))return!0;return!1}function Jbn(n){var t,e;if(null==n)return!1;for(t=0,e=n.length;t<e;t++)if(!OG(n[t]))return!1;return!0}function Ybn(n,t){var e,i,r;return i=!1,e=t.q.d,t.d<n.b&&(r=cKn(t.q,n.b),t.q.d>r&&(USn(t.q,r),i=e!=t.q.d)),i}function Zbn(n,t){var i,r,c,a,o;return a=t.i,o=t.j,r=a-(i=n.f).i,c=o-i.j,e.Math.sqrt(r*r+c*c)}function nwn(n,t){var e;return(e=Kvn(n))||(!ZKt&&(ZKt=new Ps),ZXn(),ttn((e=new Xm(sxn(t))).El(),n)),e}function twn(n,t){var e,i;return(e=uG(n.c.Bc(t),16))?((i=n.hc()).Gc(e),n.d-=e.gc(),e.$b(),n.mc(i)):n.jc()}function ewn(n,t){var e,i;for(i=0!=uRn(n.d,1),e=!0;e;)e=!1,e=t.c.mg(t.e,i),e|=PKn(n,t,i,!1),i=!i;Gon(n)}function iwn(n,t,e,i){var r,c;n.a=t,c=i?0:1,n.f=(r=new _On(n.c,n.a,e,c),new eBn(e,n.a,r,n.e,n.b,n.c==(ean(),BEt)))}function rwn(n){var t;return MK(n.a!=n.b),t=n.d.a[n.a],jK(n.b==n.d.c&&null!=t),n.c=n.a,n.a=n.a+1&n.d.a.length-1,t}function cwn(n){var t;if(0!=n.c)return n.c;for(t=0;t<n.a.length;t++)n.c=33*n.c+(-1&n.a[t]);return n.c=n.c*n.e,n.c}function awn(n){var t;if(!(n.c.c<0?n.a>=n.c.b:n.a<=n.c.b))throw hv(new Bv);return t=n.a,n.a+=n.c.c,++n.b,xwn(t)}function own(n){var t;return zsn(t=new S$(n.a),n),kfn(t,(GYn(),rmt),n),t.o.a=n.g,t.o.b=n.f,t.n.a=n.i,t.n.b=n.j,t}function uwn(n){return(KQn(),LRt).Hc(n.j)?uM(pK(oIn(n,(GYn(),Mmt)))):Gfn(Uhn(cT(PNt,1),zZn,8,0,[n.i.n,n.n,n.a])).b}function swn(n){var t;return t=aN(KEt),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),rpt))&&Aq(t,(uIn(),Elt),(zYn(),Cwt)),t}function hwn(n){var t,e;for(e=new ek,t=new Ww(n);t.a<t.c.c.length;)Qon(e,f_n(uG(N3(t),27)));return e}function fwn(n){var t,e;for(e=new Ww(n.r);e.a<e.c.c.length;)if(t=uG(N3(e),10),n.n[t.p]<=0)return t;return null}function lwn(n,t,e){var i;for(i=t.a.a.ec().Kc();i.Ob();)if(NZ(n,uG(i.Pb(),60),e))return!0;return!1}function bwn(n,t,e,i){var r,c;for(c=n.Kc();c.Ob();)(r=uG(c.Pb(),72)).n.a=t.a+(i.a-r.o.a)/2,r.n.b=t.b,t.b+=r.o.b+e}function wwn(n,t,e){var i;i=new v$n(n,t),UNn(n.r,t.ag(),i),e&&!cV(n.u)&&(i.c=new a0(n.d),Prn(t.Rf(),new Ld(i)))}function dwn(n,t){var e;return _L(n)&&_L(t)&&(e=n-t,!isNaN(e))?e:yEn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t)}function gwn(n,t){var e,i,r;for(r=1,e=n,i=t>=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function pwn(n,t){var e,i,r;for(r=1,e=n,i=t>=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function mwn(n,t){var e,i,r,c;return(c=fLn((i=t,(r=n?Kvn(n):null)&&r.Gl(),i)))==t&&(e=Kvn(n))&&e.Gl(),c}function vwn(n,t,e){var i,r;return r=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,0,r,t),e?e.nj(i):e=i),e}function kwn(n,t,e){var i,r;return r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,3,r,t),e?e.nj(i):e=i),e}function ywn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,1,r,t),e?e.nj(i):e=i),e}function Mwn(n){var t,e,i,r;if(null!=n)for(e=0;e<n.length;++e)if(t=n[e])for(uG(t.g,379),r=t.i,i=0;i<r;++i);}function Twn(n,t,e,i,r,c,a,o){var u;for(u=e;c<a;)u>=i||t<e&&o.Ne(n[t],n[u])<=0?uQ(r,c++,n[t++]):uQ(r,c++,n[u++])}function jwn(n,t,e,i,r){0!=t&&0!=i&&(1==t?r[i]=tMn(r,e,i,n[0]):1==i?r[t]=tMn(r,n,t,e[0]):G$n(n,e,r,t,i))}function Ewn(n,t,e){var i,r,c,a;for(i=e/n.gc(),r=0,a=n.Kc();a.Ob();)Rbn(c=uG(a.Pb(),186),c.f+i*r),qEn(c,t,i),++r}function Swn(n){var t,i,r;for(r=0,i=new Ww(n.a);i.a<i.c.c.length;)t=uG(N3(i),172),r=e.Math.max(r,t.g);return r}function Pwn(n){var t,e,i;for(i=new Ww(n.b);i.a<i.c.c.length;)(t=(e=uG(N3(i),219)).c.kg()?e.f:e.a)&&wzn(t,e.j)}function Cwn(){Cwn=E,ujt=new lI("DUMMY_NODE_OVER",0),sjt=new lI("DUMMY_NODE_UNDER",1),hjt=new lI("EQUAL",2)}function Iwn(){Iwn=E,lKt=new _O("PARALLEL_NODE",0),fKt=new _O("HIERARCHICAL_NODE",1),bKt=new _O("ROOT_NODE",2)}function Own(){Own=E,Oxt=new AO("INHERIT",0),Ixt=new AO("INCLUDE_CHILDREN",1),Axt=new AO("SEPARATE_CHILDREN",2)}function Awn(n,t){switch(t){case 1:return!n.n&&(n.n=new fV(lFt,n,1,7)),void Czn(n.n);case 2:return void Gan(n,null)}ffn(n,t)}function Lwn(n){switch(n.g){case 0:return new Xo;case 1:return new Vo;case 2:return new zo;default:return null}}function Nwn(n){switch(sB(),n.c){case 0:return nQ(),Nat;case 1:return new KM(ULn(new fS(n)));default:return new Ay(n)}}function $wn(n){switch(sB(),n.gc()){case 0:return nQ(),Nat;case 1:return new KM(n.Kc().Pb());default:return new RP(n)}}function Dwn(n){switch(n.gc()){case 0:return jat;case 1:return new Uq(WW(n.Xb(0)));default:return new t1(n)}}function xwn(n){var t,e;return n>-129&&n<128?(XG(),!(e=bot[t=n+128])&&(e=bot[t]=new Iw(n)),e):new Iw(n)}function Rwn(n){var t,e;return n>-129&&n<128?(eX(),!(e=Mot[t=n+128])&&(e=Mot[t]=new Aw(n)),e):new Aw(n)}function Kwn(n,t){n.a.c.length>0&&Lln(uG(zq(n.a,n.a.c.length-1),579),t)||kD(n.a,new r9(t))}function Fwn(n){var t,e;GB(),t=n.d.c-n.e.c,Prn((e=uG(n.g,154)).b,new Pg(t)),Prn(e.c,new Cg(t)),z8(e.i,new Ig(t))}function _wn(n){var t;return(t=new WM).a+="VerticalSegment ",QA(t,n.e),t.a+=" ",JA(t,KD(new FM,new Ww(n.k))),t.a}function Bwn(n,t){var e,i;for(e=0,i=Dgn(n,t).Kc();i.Ob();)e+=null!=oIn(uG(i.Pb(),12),(GYn(),lmt))?1:0;return e}function Hwn(n,t,e){var i,r,c;for(i=0,c=Fkn(n,0);c.b!=c.d.c&&!((r=uM(pK(I6(c))))>e);)r>=t&&++i;return i}function Uwn(n,t){WW(n);try{return n._b(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return!1;throw hv(e)}}function Gwn(n,t){WW(n);try{return n.Hc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return!1;throw hv(e)}}function qwn(n,t){WW(n);try{return n.Mc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return!1;throw hv(e)}}function Xwn(n,t){WW(n);try{return n.xc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return null;throw hv(e)}}function zwn(n,t){WW(n);try{return n.Bc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return null;throw hv(e)}}function Vwn(n,t){switch(t.g){case 2:case 1:return Dgn(n,t);case 3:case 4:return Spn(Dgn(n,t))}return hZ(),hZ(),zot}function Wwn(n){var t;return 0!=(64&n.Db)?vxn(n):((t=new fx(vxn(n))).a+=" (name: ",VA(t,n.zb),t.a+=")",t.a)}function Qwn(n){var t;return(t=uG(ain(n.c.c,""),233))||(t=new I2(UT(HT(new du,""),"Other")),Akn(n.c.c,"",t)),t}function Jwn(n,t,e){var i,r;return r=n.sb,n.sb=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,4,r,t),e?e.nj(i):e=i),e}function Ywn(n,t,e){var i,r;return r=n.r,n.r=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,8,r,n.r),e?e.nj(i):e=i),e}function Zwn(n,t,e){var i;return i=new Ken(n.e,4,13,t.c||(YYn(),N_t),null,Hyn(n,t),!1),e?e.nj(i):e=i,e}function ndn(n,t,e){var i;return i=new Ken(n.e,3,13,null,t.c||(YYn(),N_t),Hyn(n,t),!1),e?e.nj(i):e=i,e}function tdn(n,t){var e,i;return!(i=(e=uG(t,691)).el())&&e.fl(i=F$(t,90)?new CA(n,uG(t,29)):new g4(n,uG(t,156))),i}function edn(n,t,e){var i;n._i(n.i+1),i=n.Zi(t,e),t!=n.i&&qGn(n.g,t,n.g,t+1,n.i-t),uQ(n.g,t,i),++n.i,n.Mi(t,e),n.Ni()}function idn(n,t){var e;return t.a&&(e=t.a.a.length,n.a?JA(n.a,n.b):n.a=new lx(n.d),L4(n.a,t.a,t.d.length,e)),n}function rdn(n,t){var e;n.c=t,n.a=Jpn(t),n.a<54&&(n.f=(e=t.d>1?C4(t.a[0],t.a[1]):C4(t.a[0],0),W4(t.e>0?e:Men(e))))}function cdn(n,t){var e;return e=new un,n.a.Bd(e)?(UD(),new Xy(tJ(ven(n,e.a,t)))):(GQ(n),UD(),UD(),sut)}function adn(n,t){var e;0!=n.c.length&&(zL(e=uG(Ekn(n,Inn(pbt,e6n,10,n.c.length,0,1)),199),new Oe),WNn(e,t))}function odn(n,t){var e;0!=n.c.length&&(zL(e=uG(Ekn(n,Inn(pbt,e6n,10,n.c.length,0,1)),199),new Ae),WNn(e,t))}function udn(n,t){return RA(n)?m_(n,t):FA(n)?p_(n,t):KA(n)?(tJ(n),xA(n)===xA(t)):Cz(n)?n.Fb(t):xX(n)?SL(n,t):j3(n,t)}function sdn(n,t,e){if(t<0)zLn(n,e);else{if(!e.rk())throw hv(new vM(Gtt+e.xe()+qtt));uG(e,69).wk().Ek(n,n.hi(),t)}}function hdn(n,t,e){if(n<0||t>e)throw hv(new dM(o2n+n+s2n+t+", size: "+e));if(n>t)throw hv(new vM(o2n+n+u2n+t))}function fdn(n){var t;return 0!=(64&n.Db)?vxn(n):((t=new fx(vxn(n))).a+=" (source: ",VA(t,n.d),t.a+=")",t.a)}function ldn(n){return n>=65&&n<=70?n-65+10:n>=97&&n<=102?n-97+10:n>=48&&n<=57?n-48:0}function bdn(n){var t,e,i,r;for(JYn(),i=0,r=(e=Nkn()).length;i<r;++i)if(-1!=Ten((t=e[i]).a,n,0))return t;return sht}function wdn(n,t){var e,i,r;if(t.ej(n.a),null!=(r=uG(Lsn(n.a,8),2035)))for(e=0,i=r.length;e<i;++e)null.Um()}function ddn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,2,e,t))}function gdn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,8,e,t))}function pdn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,8,e,t))}function mdn(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,3,e,t))}function vdn(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,9,e,t))}function kdn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,5,r,n.a),e?kPn(e,i):e=i),e}function ydn(n,t){var e;return-1==n.b&&n.a&&(e=n.a.pk(),n.b=e?n.c.Hh(n.a.Lj(),e):emn(n.c.Dh(),n.a)),n.c.yh(n.b,t)}function Mdn(n,t){var e,i;for(i=new DD(n);i.e!=i.i.gc();)if(e=uG(Zkn(i),29),xA(t)===xA(e))return!0;return!1}function Tdn(n){var t;return n.k==(zIn(),lbt)&&((t=uG(oIn(n,(GYn(),Fpt)),64))==(KQn(),yRt)||t==KRt)}function jdn(n){var t;return _A((t=Z4(n)).a,0)?(dS(),dS(),hut):(dS(),new wR(NP(t.a,0)?c7(t)/W4(t.a):0))}function Edn(n,t){this.e=t,this.a=dhn(n),this.a<54?this.f=W4(n):this.c=(cHn(),dwn(n,0)>=0?Rmn(n):hW(Rmn(Men(n))))}function Sdn(n,t,e,i,r,c){this.e=new Zm,this.f=(can(),Qjt),kD(this.e,n),this.d=t,this.a=e,this.b=i,this.f=r,this.c=c}function Pdn(n,t,i){n.n=Jq(nUt,[zZn,E0n],[376,28],14,[i,t0(e.Math.ceil(t/32))],2),n.o=t,n.p=i,n.j=t-1>>1,n.k=i-1>>1}function Cdn(n){return n=((n=((n-=n>>1&1431655765)>>2&858993459)+(858993459&n))>>4)+n&252645135,n+=n>>8,63&(n+=n>>16)}function Idn(n,t){var e,i;for(i=new DD(n);i.e!=i.i.gc();)if(e=uG(Zkn(i),142),xA(t)===xA(e))return!0;return!1}function Odn(n,t,e){var i,r;return(r=jxn(n.b,t))&&(i=uG(JXn(Len(n,r),""),29))?hxn(n,i,t,e):null}function Adn(n,t,e){var i,r;return(r=jxn(n.b,t))&&(i=uG(JXn(Len(n,r),""),29))?fxn(n,i,t,e):null}function Ldn(n,t){var e;if(null==(e=dcn(n.i,t)))throw hv(new SM("Node did not exist in input."));return Qun(t,e),null}function Ndn(n,t){var e;if(F$(e=EKn(n,t),331))return uG(e,35);throw hv(new vM(Gtt+t+"' is not a valid attribute"))}function $dn(n,t,e){var i;if(t>(i=n.gc()))throw hv(new w_(t,i));if(n.Si()&&n.Hc(e))throw hv(new vM(Xet));n.Gi(t,e)}function Ddn(n,t){t.Ug("Sort end labels",1),kS(JJ(sin(new fX(null,new h3(n.b,16)),new we),new de),new ge),t.Vg()}function xdn(){xdn=E,ZDt=new PO(Y2n,0),YDt=new PO(V2n,1),JDt=new PO(z2n,2),QDt=new PO(c3n,3),nxt=new PO("UP",4)}function Rdn(){Rdn=E,HAt=new fO("P1_STRUCTURE",0),UAt=new fO("P2_PROCESSING_ORDER",1),GAt=new fO("P3_EXECUTION",2)}function Kdn(){Kdn=E,qCt=Lvn(Lvn(gP(Lvn(Lvn(gP(Aq(new wJ,(Cjn(),VSt),(OHn(),fPt)),WSt),oPt),sPt),QSt),iPt),hPt)}function Fdn(n){switch(uG(oIn(n,(GYn(),Xpt)),311).g){case 1:kfn(n,Xpt,(Zen(),dpt));break;case 2:kfn(n,Xpt,(Zen(),ppt))}}function _dn(n){switch(n){case 0:return new Fk;case 1:return new Rk;case 2:return new Kk;default:throw hv(new Dv)}}function Bdn(n){switch(n.g){case 2:return YDt;case 1:return JDt;case 4:return QDt;case 3:return nxt;default:return ZDt}}function Hdn(n,t){switch(n.b.g){case 0:case 1:return t;case 2:case 3:return new gY(t.d,0,t.a,t.b);default:return null}}function Udn(n){switch(n.g){case 1:return _Rt;case 2:return yRt;case 3:return kRt;case 4:return KRt;default:return FRt}}function Gdn(n){switch(n.g){case 1:return KRt;case 2:return _Rt;case 3:return yRt;case 4:return kRt;default:return FRt}}function qdn(n){switch(n.g){case 1:return kRt;case 2:return KRt;case 3:return _Rt;case 4:return yRt;default:return FRt}}function Xdn(n,t,e,i){switch(t){case 1:return!n.n&&(n.n=new fV(lFt,n,1,7)),n.n;case 2:return n.k}return ajn(n,t,e,i)}function zdn(n,t,e){var i,r;return n.Pj()?(r=n.Qj(),i=HNn(n,t,e),n.Jj(n.Ij(7,xwn(e),i,t,r)),i):HNn(n,t,e)}function Vdn(n,t){var e,i,r;null==n.d?(++n.e,--n.f):(r=t.ld(),S7(n,i=((e=t.Bi())&vZn)%n.d.length,Txn(n,i,e,r)))}function Wdn(n,t){var e;e=0!=(n.Bb&w1n),t?n.Bb|=w1n:n.Bb&=-1025,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,10,e,t))}function Qdn(n,t){var e;e=0!=(n.Bb&j0n),t?n.Bb|=j0n:n.Bb&=-4097,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,12,e,t))}function Jdn(n,t){var e;e=0!=(n.Bb&hrt),t?n.Bb|=hrt:n.Bb&=-8193,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,15,e,t))}function Ydn(n,t){var e;e=0!=(n.Bb&frt),t?n.Bb|=frt:n.Bb&=-2049,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,11,e,t))}function Zdn(n){var t;n.g&&(CFn((t=n.c.kg()?n.f:n.a).a,n.o,!0),CFn(t.a,n.o,!1),kfn(n.o,(jYn(),JMt),($Pn(),rRt)))}function ngn(n){var t;if(!n.a)throw hv(new kM("Cannot offset an unassigned cut."));t=n.c-n.b,n.b+=t,iZ(n,t),eZ(n,t)}function tgn(n,t){var e;if(null==(e=cQ(n.k,t)))throw hv(new SM("Port did not exist in input."));return Qun(t,e),null}function egn(n){var t,e;for(e=bxn(Hrn(n)).Kc();e.Ob();)if(qUn(n,t=mK(e.Pb())))return h8((yP(),r_t),t);return null}function ign(n){var t,e;for(e=n.p.a.ec().Kc();e.Ob();)if((t=uG(e.Pb(),218)).f&&n.b[t.c]<-1e-10)return t;return null}function rgn(n){var t,e;for(e=jQ(new WM,91),t=!0;n.Ob();)t||(e.a+=TZn),t=!1,QA(e,n.Pb());return(e.a+="]",e).a}function cgn(n){var t,e,i;for(t=new Zm,i=new Ww(n.b);i.a<i.c.c.length;)e=uG(N3(i),602),Ohn(t,uG(e.Cf(),16));return t}function agn(n,t){var e,i;for(i=new Ww(t);i.a<i.c.c.length;)e=uG(N3(i),42),men(n.b.b,e.b),LZ(uG(e.a,194),uG(e.b,86))}function ogn(n,t){var e;return 0!=(e=ugn(n.b.c,t.b.c))||0!=(e=ugn(n.a.a,t.a.a))?e:ugn(n.a.b,t.a.b)}function ugn(n,t){return n<t?-1:n>t?1:n==t?0==n?ugn(1/n,1/t):0:isNaN(n)?isNaN(t)?0:1:-1}function sgn(n){var t;return null==(t=n.a[n.c-1&n.a.length-1])?null:(n.c=n.c-1&n.a.length-1,uQ(n.a,n.c,null),t)}function hgn(n){var t,e,i;for(i=0,e=n.length,t=0;t<e;t++)32==n[t]||13==n[t]||10==n[t]||9==n[t]||(n[i++]=n[t]);return i}function fgn(n,t){var e,i,r,c,a;for(a=VKn(n.e.Dh(),t),c=0,e=uG(n.g,124),r=0;r<n.i;++r)i=e[r],a.am(i.Lk())&&++c;return c}function lgn(n,t,e){var i,r;for(r=F$(t,102)&&0!=(uG(t,19).Bb&P0n)?new yL(t,n):new Zsn(t,n),i=0;i<e;++i)_yn(r);return r}function bgn(n,t,e){var i;if(n.c)JCn(n.c,t,e);else for(i=new Ww(n.b);i.a<i.c.c.length;)bgn(uG(N3(i),163),t,e)}function wgn(n,t,e){var i,r;return i=uG(t.of(n.a),34),r=uG(e.of(n.a),34),null!=i&&null!=r?Dun(i,r):null!=i?-1:null!=r?1:0}function dgn(n,t){var e,i,r;for(tJ(t),e=!1,i=new Ww(n);i.a<i.c.c.length;)r=N3(i),t.Hc(r)&&(tW(i),e=!0);return e}function ggn(n){var t,e,i,r;return Mon(e=new nB(t=uG(Mj((r=(i=n.Rm).f)==Oat?i:r),9),uG(MF(t,t.length),9),0),n),e}function pgn(n){var t;return(t=uG(oIn(n,(jYn(),Byt)),88))==(xdn(),ZDt)?uM(pK(oIn(n,dyt)))>=1?YDt:QDt:t}function mgn(n){switch(uG(oIn(n,(jYn(),Vyt)),223).g){case 1:return new ic;case 3:return new uc;default:return new ec}}function vgn(n){if(n.c)vgn(n.c);else if(n.d)throw hv(new kM("Stream already terminated, can't be modified or used"))}function kgn(n,t,e){var i;return i=n.a.get(t),n.a.set(t,void 0===e?null:e),void 0===i?(++n.c,++n.b.g):++n.d,i}function ygn(n,t,e){var i,r;for(r=n.a.ec().Kc();r.Ob();)if(i=uG(r.Pb(),10),yhn(e,uG(zq(t,i.p),16)))return i;return null}function Mgn(n,t,e){var i;return i=0,t&&(fN(n.a)?i+=t.f.a/2:i+=t.f.b/2),e&&(fN(n.a)?i+=e.f.a/2:i+=e.f.b/2),i}function Tgn(n,t,e){var i;!(i=e)&&(i=xG(new fy,0)),i.Ug(K4n,2),zyn(n.b,t,i.eh(1)),Xzn(n,t,i.eh(1)),hJn(t,i.eh(1)),i.Vg()}function jgn(n,t,e){var i;return gj(),Scn(i=new ns,t),pcn(i,e),n&&ttn((!n.a&&(n.a=new MD(eFt,n,5)),n.a),i),i}function Egn(n){var t;return 0!=(64&n.Db)?vxn(n):((t=new fx(vxn(n))).a+=" (identifier: ",VA(t,n.k),t.a+=")",t.a)}function Sgn(n,t){var e;e=0!=(n.Bb&Qtt),t?n.Bb|=Qtt:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,18,e,t))}function Pgn(n,t){var e;e=0!=(n.Bb&Qtt),t?n.Bb|=Qtt:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,18,e,t))}function Cgn(n,t){var e;e=0!=(n.Bb&VZn),t?n.Bb|=VZn:n.Bb&=-16385,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,16,e,t))}function Ign(n,t){var e;e=0!=(n.Bb&P0n),t?n.Bb|=P0n:n.Bb&=-65537,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,20,e,t))}function Ogn(n){var t;return t=Inn(JHt,N1n,28,2,15,1),n-=P0n,t[0]=(n>>10)+C0n&D1n,t[1]=56320+(1023&n)&D1n,mvn(t,0,t.length)}function Agn(n){var t;return(t=YIn(n))>34028234663852886e22?M0n:t<-34028234663852886e22?T0n:t}function Lgn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n+t)&&e<d0n?e:Esn(Mhn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function Ngn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n*t)&&e<d0n?e:Esn(Ozn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function $gn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n-t)&&e<d0n?e:Esn(Thn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function Dgn(n,t){var e;return n.i||qLn(n),(e=uG(AJ(n.g,t),42))?new C2(n.j,uG(e.a,17).a,uG(e.b,17).a):(hZ(),hZ(),zot)}function xgn(n){return Mbn(),qx(),!!(upn(uG(n.a,86).j,uG(n.b,88))||0!=uG(n.a,86).d.e&&upn(uG(n.a,86).j,uG(n.b,88)))}function Rgn(n,t){return m_(t.b&&t.c?V3(t.b)+"->"+V3(t.c):"e_"+Hon(t),n.b&&n.c?V3(n.b)+"->"+V3(n.c):"e_"+Hon(n))}function Kgn(n,t){return m_(t.b&&t.c?V3(t.b)+"->"+V3(t.c):"e_"+Hon(t),n.b&&n.c?V3(n.b)+"->"+V3(n.c):"e_"+Hon(n))}function Fgn(n,t){return YN(),oan(T1n),e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:KL(isNaN(n),isNaN(t))}function _gn(){_gn=E,fxt=new IO(Y2n,0),sxt=new IO("POLYLINE",1),uxt=new IO("ORTHOGONAL",2),hxt=new IO("SPLINES",3)}function Bgn(){Bgn=E,IOt=new aO("ASPECT_RATIO_DRIVEN",0),OOt=new aO("MAX_SCALE_DRIVEN",1),COt=new aO("AREA_DRIVEN",2)}function Hgn(n,t,e){try{Vfn(n,t,e)}catch(i){throw F$(i=Ehn(i),606)?hv(new x9(i)):hv(i)}return t}function Ugn(n){var t,e;for(t=0,e=n.length;t<e;t++)if(null==n[t])throw hv(new MM("at index "+t));return new IM(n)}function Ggn(n){var t,e;for(t=new Zm,e=new Ww(n.j);e.a<e.c.c.length;)kD(t,uG(N3(e),12).b);return WW(t),new iN(t)}function qgn(n){var t,e;for(t=new Zm,e=new Ww(n.j);e.a<e.c.c.length;)kD(t,uG(N3(e),12).e);return WW(t),new iN(t)}function Xgn(n){var t,e;for(t=new Zm,e=new Ww(n.j);e.a<e.c.c.length;)kD(t,uG(N3(e),12).g);return WW(t),new iN(t)}function zgn(n,t){var e,i,r;for(r=new Ym,i=t.vc().Kc();i.Ob();)vJ(r,(e=uG(i.Pb(),44)).ld(),Tsn(n,uG(e.md(),15)));return r}function Vgn(n){var t,e;for(e=TDn(Hrn(K0(n))).Kc();e.Ob();)if(qUn(n,t=mK(e.Pb())))return f8((mP(),b_t),t);return null}function Wgn(n,t){var e,i;for(i=0,e=uG(t.Kb(n),20).Kc();e.Ob();)oM(gK(oIn(uG(e.Pb(),18),(GYn(),pmt))))||++i;return i}function Qgn(n){var t,e,i;for(t=new GF(n.Rd().gc()),i=0,e=jtn(n.Rd().Kc());e.Ob();)M2(t,e.Pb(),xwn(i++));return vOn(t.a)}function Jgn(n,t,e,i){var r,c;return tJ(i),tJ(e),null==(c=null==(r=n.xc(t))?e:IS(uG(r,15),uG(e,16)))?n.Bc(t):n.zc(t,c),c}function Ygn(n,t,e,i){var r,c,a;for(r=t+1;r<e;++r)for(c=r;c>t&&i.Ne(n[c-1],n[c])>0;--c)a=n[c],uQ(n,c,n[c-1]),uQ(n,c-1,a)}function Zgn(n,t){var e,i,r,c,a;if(e=t.f,Akn(n.c.d,e,t),null!=t.g)for(c=0,a=(r=t.g).length;c<a;++c)i=r[c],Akn(n.c.e,i,t)}function npn(n,t){var e,i;for(e=Fkn(n,0);e.b!=e.d.c;){if((i=sM(pK(I6(e))))==t)return;if(i>t){F4(e);break}}lW(e,t)}function tpn(n,t){var i,r;r=uM(pK(Omn(z4(t),(jYn(),dTt)))),TEn(t,i=e.Math.max(0,r/2-.5),1),kD(n,new xC(t,i))}function epn(n,t,e){e.Ug("Straight Line Edge Routing",1),e.dh(t,l7n),DXn(n,uG(zDn(t,(SK(),zCt)),27)),e.dh(t,w7n)}function ipn(n,t){0==n.n.c.length&&kD(n.n,new c0(n.s,n.t,n.i)),kD(n.b,t),zMn(uG(zq(n.n,n.n.c.length-1),209),t),nqn(n,t)}function rpn(n){var t;this.a=new nB(t=uG(n.e&&n.e(),9),uG(MF(t,t.length),9),0),this.b=Inn(dat,EZn,1,this.a.a.length,5,1)}function cpn(n){return Array.isArray(n)&&n.Tm===j?Ij(Tbn(n))+"@"+(Hon(n)>>>0).toString(16):n.toString()}function apn(n,t){return n.h==b0n&&0==n.m&&0==n.l?(t&&(Qat=p$(0,0,0)),LL((tin(),Zat))):(t&&(Qat=p$(n.l,n.m,n.h)),p$(0,0,0))}function opn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function upn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function spn(n,t,e,i){switch(t){case 3:return n.f;case 4:return n.g;case 5:return n.i;case 6:return n.j}return Xdn(n,t,e,i)}function hpn(n,t){if(t==n.d)return n.e;if(t==n.e)return n.d;throw hv(new vM("Node "+t+" not part of edge "+n))}function fpn(n,t){var e;if(F$(e=EKn(n.Dh(),t),102))return uG(e,19);throw hv(new vM(Gtt+t+"' is not a valid reference"))}function lpn(n,t,e,i){if(t<0)lRn(n,e,i);else{if(!e.rk())throw hv(new vM(Gtt+e.xe()+qtt));uG(e,69).wk().Ck(n,n.hi(),t,i)}}function bpn(n){var t;if(n.b){if(bpn(n.b),n.b.d!=n.c)throw hv(new Fv)}else n.d.dc()&&(t=uG(n.f.c.xc(n.e),16))&&(n.d=t)}function wpn(n){var t,e;for(VK(),t=n.o.b,e=uG(uG(Y9(n.r,(KQn(),KRt)),21),87).Kc();e.Ob();)uG(e.Pb(),117).e.b+=t}function dpn(n){var t,e,i;for(this.a=new XL,i=new Ww(n);i.a<i.c.c.length;)e=uG(N3(i),16),jon(t=new hX,e),FV(this.a,t)}function gpn(n,t){var e,i,r;for(r=(i=qBn(n,t))[i.length-1]/2,e=0;e<i.length;e++)if(i[e]>=r)return t.c+e;return t.c+t.b.gc()}function ppn(n,t){var e,i,r,c;for(EK(),r=t,Ntn(i=Jtn(n),0,i.length,r),e=0;e<i.length;e++)e!=(c=nEn(n,i[e],e))&&zdn(n,e,c)}function mpn(n,t,e){var i,r;for(i=0,r=n.length;i<r;i++)if(mfn((s3(i,n.length),n.charCodeAt(i)),t,e))return!0;return!1}function vpn(n,t){var e,i;for(i=n.e.a.ec().Kc();i.Ob();)if(_In(t,(e=uG(i.Pb(),272)).d)||vLn(t,e.d))return!0;return!1}function kpn(n,t,e,i,r){var c,a,o;for(a=r;t.b!=t.c;)c=uG(xV(t),10),o=uG(Dgn(c,i).Xb(0),12),n.d[o.p]=a++,mv(e.c,o);return a}function ypn(n,t){var e,i,r,c,a,o;for(i=0,e=0,a=0,o=(c=t).length;a<o;++a)(r=c[a])>0&&(i+=r,++e);return e>1&&(i+=n.d*(e-1)),i}function Mpn(n){var t,e,i;return i=gCn(n),!pE(n.c)&&(nrn(i,"knownLayouters",e=new Ib),t=new jm(e),z8(n.c,t)),i}function Tpn(n){var t,e,i;for((i=new zM).a+="[",t=0,e=n.gc();t<e;)VA(i,ox(n.Vi(t))),++t<e&&(i.a+=TZn);return i.a+="]",i.a}function jpn(n){return null==n.e?n:(!n.c&&(n.c=new Z_n(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,null)),n.c)}function Epn(n){return n.k==(zIn(),dbt)&&o9(new fX(null,new LW(new Fz(ix(Xgn(n).a.Kc(),new h)))),new qr)}function Spn(n){return F$(n,306)?Z9(uG(n,306)):F$(n,441)?uG(n,441).a:F$(n,59)?new Ly(n):new XE(n)}function Ppn(n){var t;return null==n||(t=n.length)>0&&(s3(t-1,n.length),58==n.charCodeAt(t-1))&&!mpn(n,n_t,t_t)}function Cpn(n,t){var e;return xA(n)===xA(t)||!!F$(t,92)&&(e=uG(t,92),n.e==e.e&&n.d==e.d&&d8(n,e.a))}function Ipn(n){switch(KQn(),n.g){case 4:return yRt;case 1:return kRt;case 3:return KRt;case 2:return _Rt;default:return FRt}}function Opn(n){var t,e;if(n.b)return n.b;for(e=Nut?null:n.d;e;){if(t=Nut?null:e.b)return t;e=Nut?null:e.d}return pS(),Eut}function Apn(n){var t,e;for(e=uM(pK(n.a.of((XYn(),LDt)))),t=new Ww(n.a.Sf());t.a<t.c.c.length;)pJn(n,uG(N3(t),695),e)}function Lpn(n){var t,e;for(null==n.j&&(n.j=(EZ(),lSn(_at.me(n)))),t=0,e=n.j.length;t<e;++t)String.fromCharCode(10)}function Npn(n,t){var e,i;for(i=new Ww(t);i.a<i.c.c.length;)e=uG(N3(i),42),kD(n.b.b,uG(e.b,86)),t4(uG(e.a,194),uG(e.b,86))}function $pn(n,t,e){var i,r;for(i=(r=n.a.b).c.length;i<e;i++)GX(r,0,new bQ(n.a));a2(t,uG(zq(r,r.c.length-e),30)),n.b[t.p]=e}function Dpn(n,t,e,i,r){n2(),RKn(xS(DS($S(RS(new uk,0),r.d.e-n),t),r.d)),RKn(xS(DS($S(RS(new uk,0),e-r.a.e),r.a),i))}function xpn(n,t){var e;return n.d?PV(n.b,t)?uG(cQ(n.b,t),47):(e=t.dg(),vJ(n.b,t,e),e):t.dg()}function Rpn(n){var t=n.e;function e(n){return n&&0!=n.length?"\t"+n.join("\n\t"):""}return t&&(t.stack||e(n[A1n]))}function Kpn(n,t){switch(t){case 3:return 0!=n.f;case 4:return 0!=n.g;case 5:return 0!=n.i;case 6:return 0!=n.j}return _sn(n,t)}function Fpn(n){switch(n.g){case 0:return new Ao;case 1:return new $o;default:throw hv(new vM(v6n+(null!=n.f?n.f:""+n.g)))}}function _pn(n){switch(n.g){case 0:return new Lo;case 1:return new No;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function Bpn(n){switch(n.g){case 1:return new jo;case 2:return new NR;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function Hpn(n){switch(n.g){case 0:return new hy;case 1:return new _k;default:throw hv(new vM(lnt+(null!=n.f?n.f:""+n.g)))}}function Upn(){var n,t,i;aCn(),i=gut+++Date.now(),n=t0(e.Math.floor(i*z0n))&W0n,t=t0(i-n*V0n),this.a=1502^n,this.b=t^X0n}function Gpn(){Gpn=E,Lmt=new hI(q4n,0),Cmt=new hI("FIRST",1),Imt=new hI(M6n,2),Omt=new hI("LAST",3),Amt=new hI(T6n,4)}function qpn(){qpn=E,TKt=new HO(k9n,0),kKt=new HO("GROUP_DEC",1),MKt=new HO("GROUP_MIXED",2),yKt=new HO("GROUP_INC",3)}function Xpn(n,t){var e,i;t&&(e=$cn(t,"x"),Tcn(new dm(n).a,(tJ(e),e)),i=$cn(t,"y"),Ecn(new pm(n).a,(tJ(i),i)))}function zpn(n,t){var e,i;t&&(e=$cn(t,"x"),mcn(new vm(n).a,(tJ(e),e)),i=$cn(t,"y"),jcn(new km(n).a,(tJ(i),i)))}function Vpn(n,t){var e,i,r;for(i=new R7(t.gc()),e=t.Kc();e.Ob();)(r=uUn(n,uG(e.Pb(),58)))&&mv(i.c,r);return i}function Wpn(n,t,e){var i,r;for(r=n.Kc();r.Ob();)if(i=r.Pb(),xA(t)===xA(i)||null!=t&&udn(t,i))return e&&r.Qb(),!0;return!1}function Qpn(n){var t,e,i;return(e=n.jh())?F$(t=n.Eh(),167)&&null!=(i=Qpn(uG(t,167)))?i+"."+e:e:null}function Jpn(n){var t,e;return 0==n.e?0:(t=n.d<<5,e=n.a[n.d-1],n.e<0&&_un(n)==n.d-1&&(--e,e|=0),t-=GNn(e))}function Ypn(n){var t,e,i;return n<Fot.length?Fot[n]:(t=31&n,(i=Inn(YHt,W1n,28,1+(e=n>>5),15,1))[e]=1<<t,new VV(1,e+1,i))}function Zpn(n,t){var e;if(t){for(e=0;e<n.i;++e)if(uG(n.g[e],378).mj(t))return!1;return ttn(n,t)}return!1}function nmn(n,t,e){var i,r;if(++n.j,e.dc())return!1;for(r=e.Kc();r.Ob();)i=r.Pb(),n.qj(t,n.Zi(t,i)),++t;return!0}function tmn(n,t,e,i){var r,c;if((c=e-t)<3)for(;c<3;)n*=10,++c;else{for(r=1;c>3;)r*=10,--c;n=(n+(r>>1))/r|0}return i.i=n,!0}function emn(n,t){var e,i,r;if(null==n.i&&eqn(n),e=n.i,-1!=(i=t.Lj()))for(r=e.length;i<r;++i)if(e[i]==t)return i;return-1}function imn(n){var t,e,i,r;for(e=uG(n.g,689),i=n.i-1;i>=0;--i)for(t=e[i],r=0;r<i;++r)if(jGn(n,t,e[r])){gjn(n,i);break}}function rmn(n){var t,e,i;for(t=new Ib,i=new Gw(n.b.Kc());i.b.Ob();)e=xOn(uG(i.b.Pb(),701)),wW(t,t.a.length,e);return t.a}function cmn(n){var t;return!n.c&&(n.c=new Ln),f$(n.d,new $n),v_n(n),t=i_n(n),kS(new fX(null,new h3(n.d,16)),new Nd(n)),t}function amn(n,t){t.Ug("End label post-processing",1),kS(JJ(sin(new fX(null,new h3(n.b,16)),new ae),new oe),new ue),t.Vg()}function omn(n){lmn(),this.c=n7(Uhn(cT(rNt,1),EZn,845,0,[VTt])),this.b=new Ym,this.a=n,vJ(this.b,WTt,1),Prn(QTt,new Xp(this))}function umn(n,t,e){lcn(),Ak.call(this),this.a=Jq(Pst,[zZn,X2n],[603,217],0,[$st,Nst],2),this.c=new cN,this.g=n,this.f=t,this.d=e}function smn(n,t){this.n=Jq(nUt,[zZn,E0n],[376,28],14,[t,t0(e.Math.ceil(n/32))],2),this.o=n,this.p=t,this.j=n-1>>1,this.k=t-1>>1}function hmn(n){Stn(),uG(n.of((XYn(),q$t)),181).Hc((oUn(),oKt))&&(uG(n.of(bDt),181).Fc((eNn(),pRt)),uG(n.of(q$t),181).Mc(oKt))}function fmn(n){var t,e;t=n.d==(vAn(),Bdt),e=dPn(n),kfn(n.a,(jYn(),byt),t&&!e||!t&&e?(nMn(),LNt):(nMn(),ANt))}function lmn(){lmn=E,ZS(),jYn(),WTt=ETt,QTt=n7(Uhn(cT(lNt,1),m9n,149,0,[wTt,dTt,pTt,mTt,yTt,MTt,TTt,jTt,PTt,ITt,gTt,vTt,STt]))}function bmn(n,t){var e;return(e=uG(l8(n,ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)).Qc(Nq(e.gc()))}function wmn(n,t){var e,i;if((i=new od(n.a.ad(t,!0))).a.gc()<=1)throw hv(new Rv);return(e=i.a.ec().Kc()).Pb(),uG(e.Pb(),39)}function dmn(n,t,e){var i;return i=uM(n.p[t.i.p])+uM(n.d[t.i.p])+t.n.b+t.a.b,uM(n.p[e.i.p])+uM(n.d[e.i.p])+e.n.b+e.a.b-i}function gmn(n,t){return n.i>0&&(t.length<n.i&&(t=Acn(Tbn(t).c,n.i)),qGn(n.g,0,t,0,n.i)),t.length>n.i&&uQ(t,n.i,null),t}function pmn(n){var t;return 0!=(64&n.Db)?Wwn(n):((t=new fx(Wwn(n))).a+=" (instanceClassName: ",VA(t,n.D),t.a+=")",t.a)}function mmn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)s3(e,n.length),(t=n.charCodeAt(e))<64&&(r=S3(r,Nz(1,t)));return r}function vmn(n,t,e){var i,r;for(i=E3(e,L0n),r=0;0!=dwn(i,0)&&r<t;r++)i=Lgn(i,E3(n[r],L0n)),n[r]=pz(i),i=$z(i,32);return pz(i)}function kmn(n,t){var e,i,r,c;for(c=VKn(n.e.Dh(),t),e=uG(n.g,124),r=0;r<n.i;++r)if(i=e[r],c.am(i.Lk()))return!1;return!0}function ymn(n,t){var e;return n.f>0&&(n._j(),-1!=Txn(n,((e=null==t?0:Hon(t))&vZn)%n.d.length,e,t))}function Mmn(n,t){var i,r;n.a=Lgn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d+=t,i=t-n.f,r=n.e+i,n.f=r-n.e-i,n.e=r}function Tmn(n,t){switch(t){case 3:return void vcn(n,0);case 4:return void kcn(n,0);case 5:return void ycn(n,0);case 6:return void Mcn(n,0)}Awn(n,t)}function jmn(n,t){switch(t.g){case 1:return YU(n.j,(Lun(),ybt));case 2:return YU(n.j,(Lun(),Tbt));default:return hZ(),hZ(),zot}}function Emn(n){var t;switch(ZW(),(t=n.Pc()).length){case 0:return jat;case 1:return new Uq(WW(t[0]));default:return new t1(Ugn(t))}}function Smn(n,t){n.Xj();try{n.d.bd(n.e++,t),n.f=n.d.j,n.g=-1}catch(e){throw F$(e=Ehn(e),77)?hv(new Fv):hv(e)}}function Pmn(){Pmn=E,lBt=new Is,cBt=new Os,aBt=new As,oBt=new Ls,uBt=new Ns,sBt=new $s,hBt=new Ds,fBt=new xs,bBt=new Rs}function Cmn(n,t){var e,i;return wL(),i=null,t==(e=bF((qy(),qy(),Hat)))&&(i=uG(U1(Bat,n),624)),i||(i=new JW(n),t==e&&r2(Bat,n,i)),i}function Imn(n){return Yyn(),(n.q?n.q:(hZ(),hZ(),Vot))._b((jYn(),LMt))?uG(oIn(n,LMt),203):uG(oIn(HQ(n),NMt),203)}function Omn(n,t){var e,i;return i=null,vR(n,(jYn(),kTt))&&(e=uG(oIn(n,kTt),96)).pf(t)&&(i=e.of(t)),null==i&&(i=oIn(HQ(n),t)),i}function Amn(n,t){var e,i,r;return!!F$(t,44)&&(i=(e=uG(t,44)).ld(),xQ(r=Xwn(n.Rc(),i),e.md())&&(null!=r||n.Rc()._b(i)))}function Lmn(n,t){var e,i;return n.f>0&&(n._j(),e=ZNn(n,((i=null==t?0:Hon(t))&vZn)%n.d.length,i,t))?e.md():null}function Nmn(n,t,e){var i,r,c;return n.Pj()?(i=n.i,c=n.Qj(),edn(n,i,t),r=n.Ij(3,null,t,i,c),e?e.nj(r):e=r):edn(n,n.i,t),e}function $mn(n,t,e){var i,r;return i=new Ken(n.e,4,10,F$(r=t.c,90)?uG(r,29):(YYn(),x_t),null,Hyn(n,t),!1),e?e.nj(i):e=i,e}function Dmn(n,t,e){var i,r;return i=new Ken(n.e,3,10,null,F$(r=t.c,90)?uG(r,29):(YYn(),x_t),Hyn(n,t),!1),e?e.nj(i):e=i,e}function xmn(n){var t;return VK(),t=new eN(uG(n.e.of((XYn(),U$t)),8)),n.B.Hc((oUn(),eKt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t}function Rmn(n){var t,e;return cHn(),e=pz(n),0!=(t=pz(Dz(n,32)))?new x3(e,t):e>10||e<0?new Z5(1,e):Rot[e]}function Kmn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n%t)&&e<d0n?e:Esn((Yzn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t,!0),Qat))}function Fmn(n,t){var e;tQn(t),(e=uG(oIn(n,(jYn(),zyt)),283))&&kfn(n,zyt,wjn(e)),Xx(n.c),Xx(n.f),ynn(n.d),ynn(uG(oIn(n,SMt),214))}function _mn(n){var t,e,i;for(f$(e=JAn(n),Cbt),(i=n.d).c.length=0,t=new Ww(e);t.a<t.c.c.length;)Ohn(i,uG(N3(t),465).b)}function Bmn(n){var t;0!=n.c&&(1==(t=uG(zq(n.a,n.b),293)).b?(++n.b,n.b<n.a.c.length&&Pw(uG(zq(n.a,n.b),293))):--t.b,--n.c)}function Hmn(n){var t;t=n.a;do{(t=uG(N9(new Fz(ix(Xgn(t).a.Kc(),new h))),18).d.i).k==(zIn(),wbt)&&kD(n.e,t)}while(t.k==(zIn(),wbt))}function Umn(n){this.e=Inn(YHt,W1n,28,n.length,15,1),this.c=Inn(ZHt,B2n,28,n.length,16,1),this.b=Inn(ZHt,B2n,28,n.length,16,1),this.f=0}function Gmn(n){var t,e;for(n.j=Inn(eUt,I0n,28,n.p.c.length,15,1),e=new Ww(n.p);e.a<e.c.c.length;)t=uG(N3(e),10),n.j[t.p]=t.o.b/n.i}function qmn(n,t){var e,i,r;for(r=t.b.b,n.a=new lS,n.b=Inn(YHt,W1n,28,r,15,1),e=0,i=Fkn(t.b,0);i.b!=i.d.c;)uG(I6(i),39).g=e++}function Xmn(n,t,e){var i,r,c,a;for(c=t-n.e,a=e-n.f,r=new Ww(n.a);r.a<r.c.c.length;)oMn(i=uG(N3(r),172),i.s+c,i.t+a);n.e=t,n.f=e}function zmn(n,t){var e,i;for(i=t.length,e=0;e<i;e+=2)HFn(n,(s3(e,t.length),t.charCodeAt(e)),(s3(e+1,t.length),t.charCodeAt(e+1)))}function Vmn(n,t){t.Ug("Min Size Postprocessing",1),Myn(n,(lBn(),POt),e.Math.max(uM(pK(zDn(n,POt))),uM(pK(zDn(n,EOt))))),t.Vg()}function Wmn(){Wmn=E,qRt=new CN(15),GRt=new _N((XYn(),W$t),qRt),zRt=new _N(DDt,15),XRt=new _N(kDt,xwn(0)),URt=new _N(c$t,r4n)}function Qmn(){Qmn=E,QRt=new KO("PORTS",0),JRt=new KO("PORT_LABELS",1),WRt=new KO("NODE_LABELS",2),VRt=new KO("MINIMUM_SIZE",3)}function Jmn(){Jmn=E,oOt=new rO("P1_WIDTH_APPROXIMATION",0),uOt=new rO("P2_PACKING",1),sOt=new rO("P3_WHITESPACE_ELIMINATION",2)}function Ymn(n){if(null==n.b){for(;n.a.Ob();)if(n.b=n.a.Pb(),!uG(n.b,54).Jh())return!0;return n.b=null,!1}return!0}function Zmn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.Ne(t,c.d),e&&0==i)return c;i>=0?c=c.a[1]:(r=c,c=c.a[0])}return r}function nvn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.Ne(t,c.d),e&&0==i)return c;i<=0?c=c.a[0]:(r=c,c=c.a[1])}return r}function tvn(n,t,e,i){var r,c,a;return r=!1,nWn(n.f,e,i)&&(hkn(n.f,n.a[t][e],n.a[t][i]),a=(c=n.a[t])[i],c[i]=c[e],c[e]=a,r=!0),r}function evn(n,t,e){var i,r,c;for(r=uG(cQ(n.b,e),183),i=0,c=new Ww(t.j);c.a<c.c.c.length;)r[uG(N3(c),113).d.p]&&++i;return i}function ivn(n,t,e){var i,r;i=uG(U1(jHt,t),122),r=uG(U1(EHt,t),122),e?(r2(jHt,n,i),r2(EHt,n,r)):(r2(EHt,n,i),r2(jHt,n,r))}function rvn(n,t){var e,i,r,c;return e=t>>5,t&=31,r=n.d+e+(0==t?0:1),kCn(i=Inn(YHt,W1n,28,r,15,1),n.a,e,t),K4(c=new VV(n.e,r,i)),c}function cvn(n,t){var e;for(e=new Fz(ix(Xgn(n).a.Kc(),new h));hDn(e);)if(uG(N9(e),18).d.i.c==t)return!1;return!0}function avn(n,t,i){var r,c,a,o,u;return o=n.k,u=t.k,c=pK(Omn(n,r=i[o.g][u.g])),a=pK(Omn(t,r)),e.Math.max((tJ(c),c),(tJ(a),a))}function ovn(){return Error.stackTraceLimit>0?(e.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function uvn(n,t){return YN(),YN(),oan(T1n),(e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:KL(isNaN(n),isNaN(t)))>0}function svn(n,t){return YN(),YN(),oan(T1n),(e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:KL(isNaN(n),isNaN(t)))<0}function hvn(n,t){return YN(),YN(),oan(T1n),(e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:KL(isNaN(n),isNaN(t)))<=0}function fvn(n,t){for(var e=0;!t[e]||""==t[e];)e++;for(var i=t[e++];e<t.length;e++)t[e]&&""!=t[e]&&(i+=n+t[e]);return i}function lvn(n){var t,e;return null!=(t=uG(Lsn(n.a,4),129))?(qGn(t,0,e=Inn(xFt,Uit,424,t.length,0,1),0,t.length),e):DFt}function bvn(n){var t,e,i,r;if(null==n)return null;for(r=new Zm,e=0,i=(t=Fln(n)).length;e<i;++e)kD(r,yXn(t[e],!0));return r}function wvn(n){var t,e,i,r;if(null==n)return null;for(r=new Zm,e=0,i=(t=Fln(n)).length;e<i;++e)kD(r,yXn(t[e],!0));return r}function dvn(n){var t,e,i,r;if(null==n)return null;for(r=new Zm,e=0,i=(t=Fln(n)).length;e<i;++e)kD(r,yXn(t[e],!0));return r}function gvn(n,t){var e,i,r;if(n.c)vcn(n.c,t);else for(e=t-jX(n),r=new Ww(n.a);r.a<r.c.c.length;)gvn(i=uG(N3(r),163),jX(i)+e)}function pvn(n,t){var e,i,r;if(n.c)kcn(n.c,t);else for(e=t-EX(n),r=new Ww(n.d);r.a<r.c.c.length;)pvn(i=uG(N3(r),163),EX(i)+e)}function mvn(n,t,i){var r,c,a,o;for(Knn(t,a=t+i,n.length),o="",c=t;c<a;)r=e.Math.min(c+1e4,a),o+=mJ(n.slice(c,r)),c=r;return o}function vvn(n){switch(n.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return!0;default:return!1}}function kvn(){kvn=E,sgt=new ZC(x6n,0),ugt=new ZC(R6n,1),fgt=new ZC(D6n,2),lgt=new ZC(X4n,3),hgt=new ZC("GREEDY_MODEL_ORDER",4)}function yvn(){yvn=E,Fjt=new gI(q4n,0),Kjt=new gI("NODES_AND_EDGES",1),_jt=new gI("PREFER_EDGES",2),Bjt=new gI("PREFER_NODES",3)}function Mvn(n,t,e,i,r,c){this.a=n,this.c=t,this.b=e,this.f=i,this.d=r,this.e=c,this.c>0&&this.b>0&&(this.g=mX(this.c,this.b,this.a))}function Tvn(n,t){var e,i=n.a;t=String(t),i.hasOwnProperty(t)&&(e=i[t]);var r=(Cfn(),Wat)[typeof e];return r?r(e):Vbn(typeof e)}function jvn(n){if(!(Iet in n.a))throw hv(new SM("Every element must have an id."));return fNn(v0(n,Iet))}function Evn(n){var t,e;for(e=WOn(n),t=null;2==n.c;)EYn(n),t||(QYn(),QYn(),kzn(t=new QN(2),e),e=t),e.Jm(WOn(n));return e}function Svn(n,t){var e,i;return n._j(),(e=ZNn(n,((i=null==t?0:Hon(t))&vZn)%n.d.length,i,t))?(uan(n,e),e.md()):null}function Pvn(n,t){return n.e>t.e?1:n.e<t.e?-1:n.d>t.d?n.e:n.d<t.d?-t.e:n.e*Hln(n.a,t.a,n.d)}function Cvn(n){return n>=48&&n<48+e.Math.min(10,10)?n-48:n>=97&&n<97?n-97+10:n>=65&&n<65?n-65+10:-1}function Ivn(n,t){if(t.c==n)return t.d;if(t.d==n)return t.c;throw hv(new vM("Input edge is not connected to the input port."))}function Ovn(n){if(Bvn(Fnt,n))return qx(),eot;if(Bvn(_nt,n))return qx(),tot;throw hv(new vM("Expecting true or false"))}function Avn(n){switch(typeof n){case pZn:return pln(n);case gZn:return OL(n);case dZn:return XK(n);default:return null==n?0:xx(n)}}function Lvn(n,t){if(n.a<0)throw hv(new kM("Did not call before(...) or after(...) before calling add(...)."));return hR(n,n.a,t),n}function Nvn(n){return W0(),F$(n,162)?uG(cQ(AFt,iut),294).Rg(n):PV(AFt,Tbn(n))?uG(cQ(AFt,Tbn(n)),294).Rg(n):null}function $vn(n){var t;return 0==(32&n.Db)&&0!=(t=iQ(uG(Lsn(n,16),29)||n.ii())-iQ(n.ii()))&&Dvn(n,32,Inn(dat,EZn,1,t,5,1)),n}function Dvn(n,t,e){var i;0!=(n.Db&t)?null==e?H$n(n,t):-1==(i=jTn(n,t))?n.Eb=e:uQ(Kcn(n.Eb),i,e):null!=e&&lFn(n,t,e)}function xvn(n,t,e,i){var r;0!=t.c.length&&(r=gRn(e,i),kS(krn(new fX(null,new h3(WLn(t),1)),new ba),new pY(n,e,r,i)))}function Rvn(n,t){var e,i,r;return i=n.a.length-1,e=t-n.b&i,r=n.c-t&i,jK(e<(n.c-n.b&i)),e>=r?(Pbn(n,t),-1):(Sbn(n,t),1)}function Kvn(n){var t,e,i;if(!(i=n.Jh()))for(t=0,e=n.Ph();e;e=e.Ph()){if(++t>O0n)return e.Qh();if((i=e.Jh())||e==n)break}return i}function Fvn(n,t){var e;return xA(t)===xA(n)||!!F$(t,21)&&(e=uG(t,21)).gc()==n.gc()&&n.Ic(e)}function _vn(n,t){return n.e<t.e?-1:n.e>t.e?1:n.f<t.f?-1:n.f>t.f?1:Hon(n)-Hon(t)}function Bvn(n,t){return tJ(n),null!=t&&(!!m_(n,t)||n.length==t.length&&m_(n.toLowerCase(),t.toLowerCase()))}function Hvn(n){var t,e;return dwn(n,-129)>0&&dwn(n,128)<0?(tX(),t=pz(n)+128,!(e=got[t])&&(e=got[t]=new Ow(n)),e):new Ow(n)}function Uvn(){Uvn=E,tbt=new EC(q4n,0),Zlt=new EC("INSIDE_PORT_SIDE_GROUPS",1),Ylt=new EC("GROUP_MODEL_ORDER",2),nbt=new EC(X4n,3)}function Gvn(n){var t;return n.b||wj(n,!(t=QF(n.e,n.a))||!m_(_nt,Lmn((!t.b&&(t.b=new XR((YYn(),H_t),wBt,t)),t.b),"qualified"))),n.c}function qvn(n,t){var e,i;for(s3(t,n.length),e=n.charCodeAt(t),i=t+1;i<n.length&&(s3(i,n.length),n.charCodeAt(i)==e);)++i;return i-t}function Xvn(n,t){(t||null==console.groupCollapsed?null!=console.group?console.group:console.log:console.groupCollapsed).call(console,n)}function zvn(n,t,e,i){uG(e.b,68),uG(e.b,68),uG(i.b,68),uG(i.b,68).c.b,Rnn(i,t,n)}function Vvn(n){var t,e;for(t=new Ww(n.g);t.a<t.c.c.length;)uG(N3(t),568);hQn(e=new bFn(n.g,uM(n.a),n.c)),n.g=e.b,n.d=e.a}function Wvn(n,t,e){var i,r,c;for(c=new Ww(e.a);c.a<c.c.c.length;)r=uG(N3(c),225),i=new C$(uG(cQ(n.a,r.b),68)),kD(t.a,i),Wvn(n,i,r)}function Qvn(n,t,e){var i,r;return((r=(i=uG(zrn(Aen(n.a),t),89)).c||(YYn(),N_t)).Vh()?mwn(n.b,uG(r,54)):r)==e?MGn(i):Urn(i,e),r}function Jvn(n,t,i){t.b=e.Math.max(t.b,-i.a),t.c=e.Math.max(t.c,i.a-n.a),t.d=e.Math.max(t.d,-i.b),t.a=e.Math.max(t.a,i.b-n.b)}function Yvn(n,t,e){this.c=n,this.f=new Zm,this.e=new sj,this.j=new cX,this.n=new cX,this.b=t,this.g=new gY(t.c,t.d,t.b,t.a),this.a=e}function Zvn(n){var t,e,i,r;for(this.a=new XL,this.d=new ek,this.e=0,i=0,r=(e=n).length;i<r;++i)t=e[i],!this.f&&(this.f=t),t4(this,t)}function nkn(n){cHn(),0==n.length?(this.e=0,this.d=1,this.a=Uhn(cT(YHt,1),W1n,28,15,[0])):(this.e=1,this.d=n.length,this.a=n,K4(this))}function tkn(n,t,e){Ak.call(this),this.a=Inn(Pst,X2n,217,(Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length,0,1),this.b=n,this.d=t,this.c=e}function ekn(n){var t,e,i,r;for(kfn(r=uG(oIn(n,(GYn(),rmt)),12),Mmt,n.i.n.b),e=0,i=(t=x4(n.e)).length;e<i;++e)u2(t[e],r)}function ikn(n){var t,e,i,r;for(kfn(t=uG(oIn(n,(GYn(),rmt)),12),Mmt,n.i.n.b),i=0,r=(e=x4(n.g)).length;i<r;++i)c2(e[i],t)}function rkn(n,t){var e,i;for(e2(),i=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(i);)if((e=uG(N9(i),18)).d.i==t||e.c.i==t)return e;return null}function ckn(n,t){var e,i;return(e=t.qi(n.a))&&null!=(i=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Bet)))?i:t.xe()}function akn(n,t){var e,i;return(e=t.qi(n.a))&&null!=(i=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Bet)))?i:t.xe()}function okn(n,t){var e,i;return 0!=(e=d$(n.a.c.p,t.a.c.p))?e:0!=(i=d$(n.a.d.i.p,t.a.d.i.p))?i:d$(t.a.d.p,n.a.d.p)}function ukn(n,t){var e,i,r,c;for(i=0,r=t.gc();i<r;++i)F$(e=t.Tl(i),102)&&0!=(uG(e,19).Bb&Qtt)&&null!=(c=t.Ul(i))&&uUn(n,uG(c,58))}function skn(n,t){var e,i,r;if(kD(aft,n),t.Fc(n),e=uG(cQ(cft,n),21))for(r=e.Kc();r.Ob();)i=uG(r.Pb(),27),-1!=Ten(aft,i,0)||skn(i,t)}function hkn(n,t,e){var i,r;QCn(n.e,t,e,(KQn(),_Rt)),QCn(n.i,t,e,kRt),n.a&&(r=uG(oIn(t,(GYn(),rmt)),12),i=uG(oIn(e,rmt),12),Z3(n.g,r,i))}function fkn(n,t,e){var i,r,c;i=t.c.p,c=t.p,n.b[i][c]=new RZ(n,t),e&&(n.a[i][c]=new zg(t),(r=uG(oIn(t,(GYn(),zpt)),10))&&UNn(n.d,r,t))}function lkn(n,t,e){var i,r,c,a;return(c=t.j)!=(a=e.j)?c.g-a.g:(i=n.f[t.p],r=n.f[e.p],0==i&&0==r?0:0==i?-1:0==r?1:ugn(i,r))}function bkn(){var n;return 0!=Uat&&(n=Date.now())-Gat>2e3&&(Gat=n,qat=e.setTimeout(vE,10)),0==Uat++&&(Pin((Gy(),Fat)),!0)}function wkn(n,t,e){var i;(Aut?(Opn(n),1):Lut||Dut?(pS(),1):$ut&&(pS(),0))&&((i=new iB(t)).b=e,qIn(n,i))}function dkn(n,t){var e;e=!n.A.Hc((Qmn(),JRt))||n.q==($Pn(),cRt),n.u.Hc((eNn(),wRt))?e?QQn(n,t):TQn(n,t):n.u.Hc(gRt)&&(e?YWn(n,t):MJn(n,t))}function gkn(n){var t;xA(zDn(n,(XYn(),E$t)))===xA((Own(),Oxt))&&(R0(n)?(t=uG(zDn(R0(n),E$t),346),Myn(n,E$t,t)):Myn(n,E$t,Axt))}function pkn(n){var t,e;return!!vR(n.d.i,(jYn(),UMt))&&(t=uG(oIn(n.c.i,UMt),17),e=uG(oIn(n.d.i,UMt),17),d$(t.a,e.a)>0)}function mkn(n,t,i){return new gY(e.Math.min(n.a,t.a)-i/2,e.Math.min(n.b,t.b)-i/2,e.Math.abs(n.a-t.a)+i,e.Math.abs(n.b-t.b)+i)}function vkn(n){var t;this.d=new Zm,this.j=new sj,this.g=new sj,t=n.g.b,this.f=uG(oIn(HQ(t),(jYn(),Byt)),88),this.e=uM(pK(eyn(t,yTt)))}function kkn(n){this.d=new Zm,this.e=new u8,this.c=Inn(YHt,W1n,28,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,15,1),this.b=n}function ykn(n,t,e){var i;switch(i=e[n.g][t],n.g){case 1:case 3:return new MO(0,i);case 2:case 4:return new MO(i,0);default:return null}}function Mkn(n,t,e){var i;i=uG(A1(t.f),205);try{i.rf(n,e),WQ(t.f,i)}catch(r){throw F$(r=Ehn(r),103),hv(r)}}function Tkn(n,t,e){var i,r,c,a;return i=null,(c=DVn(aan(),t))&&(r=null,null!=(a=vVn(c,e))&&(r=n.qf(c,a)),i=r),i}function jkn(n,t,e,i){var r;if(t>=(r=n.length))return r;for(t=t>0?t:0;t<r&&!mfn((s3(t,n.length),n.charCodeAt(t)),e,i);t++);return t}function Ekn(n,t){var e,i;for(i=n.c.length,t.length<i&&(t=aT(new Array(i),t)),e=0;e<i;++e)uQ(t,e,n.c[e]);return t.length>i&&uQ(t,i,null),t}function Skn(n,t){var e,i;for(i=n.a.length,t.length<i&&(t=aT(new Array(i),t)),e=0;e<i;++e)uQ(t,e,n.a[e]);return t.length>i&&uQ(t,i,null),t}function Pkn(n,t){var e,i;++n.j,null!=t&&e$n(t,e=F$(i=n.a.Cb,99)?uG(i,99).th():null)?Dvn(n.a,4,e):Dvn(n.a,4,uG(t,129))}function Ckn(n){var t;if(null==n)return null;if(null==(t=Exn(yXn(n,!0))))throw hv(new PM("Invalid hexBinary value: '"+n+"'"));return t}function Ikn(n,t,e){var i;t.a.length>0&&(kD(n.b,new hG(t.a,e)),0<(i=t.a.length)?t.a=r1(t.a,0,0):0>i&&(t.a+=V$(Inn(JHt,N1n,28,-i,15,1))))}function Okn(n,t,e){var i;if(!e[t.d])for(e[t.d]=!0,i=new Ww(Ebn(t));i.a<i.c.c.length;)Okn(n,hpn(uG(N3(i),218),t),e)}function Akn(n,t,e){var i,r,c;return(r=uG(cQ(n.e,t),400))?(c=wF(r,e),nD(n,r),c):(i=new bG(n,t,e),vJ(n.e,t,i),B1(i),null)}function Lkn(n,t,e,i){var r;return r=new Ken(n.e,1,13,t.c||(YYn(),N_t),e.c||(YYn(),N_t),Hyn(n,t),!1),i?i.nj(r):i=r,i}function Nkn(){return JYn(),Uhn(cT(mht,1),p1n,164,0,[oht,aht,uht,Yst,Jst,Zst,eht,tht,nht,cht,rht,iht,Wst,Vst,Qst,Xst,qst,zst,Ust,Hst,Gst,sht])}function $kn(n){switch(n.g){case 4:return new MO(0,-1);case 1:return new MO(1,0);case 2:return new MO(-1,0);default:return new MO(0,1)}}function Dkn(n){switch(n.g){case 1:return xdn(),nxt;case 4:return xdn(),JDt;case 2:return xdn(),YDt;case 3:return xdn(),QDt}return xdn(),ZDt}function xkn(n){switch(n.hj(null)){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function Rkn(){Rkn=E,hNt=new jO("PARENTS",0),sNt=new jO("NODES",1),oNt=new jO("EDGES",2),fNt=new jO("PORTS",3),uNt=new jO("LABELS",4)}function Kkn(n,t,e){var i;switch((i=e.q.getFullYear()-V1n+V1n)<0&&(i=-i),t){case 1:n.a+=i;break;case 2:Fen(n,i%100,2);break;default:Fen(n,i,t)}}function Fkn(n,t){var e,i;if(o3(t,n.b),t>=n.b>>1)for(i=n.c,e=n.b;e>t;--e)i=i.b;else for(i=n.a.a,e=0;e<t;++e)i=i.a;return new eB(n,t,i)}function _kn(){_kn=E,Wut=new eC("NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST",0),Vut=new eC("CORNER_CASES_THAN_SINGLE_SIDE_LAST",1)}function Bkn(n){this.b=new Zm,this.e=new Zm,this.d=n,this.a=!Qj(JJ(new fX(null,new LW(new w7(n.b))),new hd(new Xr))).Bd((vS(),Kut))}function Hkn(n,t){var i,r,c,a;for(i=0,c=new Ww(t.a);c.a<c.c.c.length;)a=(r=uG(N3(c),10)).o.a+r.d.c+r.d.b+n.j,i=e.Math.max(i,a);return i}function Ukn(n,t){var e,i,r;(i=(r=t.d.i).k)!=(zIn(),dbt)&&i!=fbt&&hDn(e=new Fz(ix(Xgn(r).a.Kc(),new h)))&&vJ(n.k,t,uG(N9(e),18))}function Gkn(n,t){return tcn(),ugn((0==n.a.b?new MO(n.c.e.a,n.c.e.b):uG(gR(n.a),8)).b,(0==t.a.b?new MO(t.c.e.a,t.c.e.b):uG(gR(t.a),8)).b)}function qkn(n,t){return tcn(),ugn((0==n.a.b?new MO(n.c.e.a,n.c.e.b):uG(gR(n.a),8)).a,(0==t.a.b?new MO(t.c.e.a,t.c.e.b):uG(gR(t.a),8)).a)}function Xkn(n,t){return tcn(),ugn((0==n.a.b?new MO(n.b.e.a,n.b.e.b):uG(pR(n.a),8)).a,(0==t.a.b?new MO(t.b.e.a,t.b.e.b):uG(pR(t.a),8)).a)}function zkn(n,t){return tcn(),ugn((0==n.a.b?new MO(n.b.e.a,n.b.e.b):uG(pR(n.a),8)).b,(0==t.a.b?new MO(t.b.e.a,t.b.e.b):uG(pR(t.a),8)).b)}function Vkn(){Vkn=E,Zxt=new $O("DISTRIBUTED",0),tRt=new $O("JUSTIFIED",1),Jxt=new $O("BEGIN",2),Yxt=new $O(G2n,3),nRt=new $O("END",4)}function Wkn(n,t){var e,i,r;return i=ern(n.Dh(),t),(e=t-n.ji())<0?(r=n.Ih(i))>=0?n.Wh(r):$Nn(n,i):e<0?$Nn(n,i):uG(i,69).wk().Bk(n,n.hi(),e)}function Qkn(n){var t,e;for(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),t=(e=n.o).c.Kc();t.e!=t.i.gc();)uG(t.Yj(),44).md();return Tnn(e)}function Jkn(n){var t;if(F$(n.a,4)){if(null==(t=Nvn(n.a)))throw hv(new kM(Bnt+n.b+"'. "+Rnt+(vK($Ft),$Ft.k)+Knt));return t}return n.a}function Ykn(n,t){var e,i;if(n.j.length!=t.j.length)return!1;for(e=0,i=n.j.length;e<i;e++)if(!m_(n.j[e],t.j[e]))return!1;return!0}function Zkn(n){var t;try{return t=n.i.Xb(n.e),n.Xj(),n.g=n.e++,t}catch(e){throw F$(e=Ehn(e),77)?(n.Xj(),hv(new Bv)):hv(e)}}function nyn(n){var t;try{return t=n.c.Vi(n.e),n.Xj(),n.g=n.e++,t}catch(e){throw F$(e=Ehn(e),77)?(n.Xj(),hv(new Bv)):hv(e)}}function tyn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)s3(e,n.length),(t=n.charCodeAt(e))>=64&&t<128&&(r=S3(r,Nz(1,t-64)));return r}function eyn(n,t){var e,i;return i=null,vR(n,(XYn(),ODt))&&(e=uG(oIn(n,ODt),96)).pf(t)&&(i=e.of(t)),null==i&&HQ(n)&&(i=oIn(HQ(n),t)),i}function iyn(n,t){var e;return e=uG(oIn(n,(jYn(),bMt)),75),_$(t,cbt)?e?BY(e):(e=new Uk,kfn(n,bMt,e)):e&&kfn(n,bMt,null),e}function ryn(){ryn=E,XYn(),ift=SDt,Jht=M$t,Xht=c$t,Yht=W$t,MEn(),tft=cst,nft=ist,eft=ost,Zht=est,pbn(),Vht=Hht,zht=Bht,Wht=Ght,Qht=qht}function cyn(n){switch(qS(),this.c=new Zm,this.d=n,n.g){case 0:case 2:this.a=kJ(Qlt),this.b=M0n;break;case 3:case 1:this.a=Qlt,this.b=T0n}}function ayn(n){var t;L_(uG(oIn(n,(jYn(),JMt)),101))&&(c$n((u3(0,(t=n.b).c.length),uG(t.c[0],30))),c$n(uG(zq(t,t.c.length-1),30)))}function oyn(n,t){t.Ug("Self-Loop post-processing",1),kS(JJ(JJ(sin(new fX(null,new h3(n.b,16)),new Di),new xi),new Ri),new Ki),t.Vg()}function uyn(n,t,e){var i;if(n.c)ycn(n.c,n.c.i+t),Mcn(n.c,n.c.j+e);else for(i=new Ww(n.b);i.a<i.c.c.length;)uyn(uG(N3(i),163),t,e)}function syn(n){var t;if(null==n)return null;if(null==(t=bJn(yXn(n,!0))))throw hv(new PM("Invalid base64Binary value: '"+n+"'"));return t}function hyn(n,t){var e;e=n.fd(t);try{return e.Pb()}catch(i){throw F$(i=Ehn(i),112)?hv(new dM("Can't get element "+t)):hv(i)}}function fyn(n,t){var e,i,r;for(e=n.o,r=uG(uG(Y9(n.r,t),21),87).Kc();r.Ob();)(i=uG(r.Pb(),117)).e.a=YTn(i,e.a),i.e.b=e.b*uM(pK(i.b.of(bht)))}function lyn(n,t){var e,i,r;for(r=new R7(t.gc()),i=t.Kc();i.Ob();)(e=uG(i.Pb(),292)).c==e.f?YOn(n,e,e.c):qOn(n,e)||mv(r.c,e);return r}function byn(n){var t;return(t=new WM).a+="n",n.k!=(zIn(),dbt)&&JA(JA((t.a+="(",t),MR(n.k).toLowerCase()),")"),JA((t.a+="_",t),ZTn(n)),t.a}function wyn(n,t){var e,i,r,c;return r=n.k,e=uM(pK(oIn(n,(GYn(),bmt)))),c=t.k,i=uM(pK(oIn(t,bmt))),c!=(zIn(),lbt)?-1:r!=lbt?1:e==i?0:e<i?-1:1}function dyn(n,t){var e,i;return e=uG(uG(cQ(n.g,t.a),42).a,68),i=uG(uG(cQ(n.g,t.b),42).a,68),atn(t.a,t.b)-atn(t.a,x$(e.b))-atn(t.b,x$(i.b))}function gyn(n,t){var e;switch(e=uG(AJ(n.b,t),127).n,t.g){case 1:n.t>=0&&(e.d=n.t);break;case 3:n.t>=0&&(e.a=n.t)}n.C&&(e.b=n.C.b,e.c=n.C.c)}function pyn(){pyn=E,Tjt=new wI(k9n,0),kjt=new wI(D6n,1),yjt=new wI("LINEAR_SEGMENTS",2),vjt=new wI("BRANDES_KOEPF",3),Mjt=new wI(v9n,4)}function myn(){myn=E,Nht=new lC(o3n,0),Lht=new lC(u3n,1),$ht=new lC(s3n,2),Dht=new lC(h3n,3),Nht.a=!1,Lht.a=!0,$ht.a=!1,Dht.a=!0}function vyn(){vyn=E,yht=new hC(o3n,0),kht=new hC(u3n,1),Mht=new hC(s3n,2),Tht=new hC(h3n,3),yht.a=!1,kht.a=!0,Mht.a=!1,Tht.a=!0}function kyn(n,t,e,i){var r;return e>=0?n.Sh(t,e,i):(n.Ph()&&(i=(r=n.Fh())>=0?n.Ah(i):n.Ph().Th(n,-1-r,null,i)),n.Ch(t,e,i))}function yyn(n,t){switch(t){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),void Czn(n.e);case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),void Czn(n.d)}Tmn(n,t)}function Myn(n,t,e){return null==e?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),Svn(n.o,t)):(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),rSn(n.o,t,e)),n}function Tyn(n,t){var e,i,r,c;for(hZ(),e=n,c=t,F$(n,21)&&!F$(t,21)&&(e=t,c=n),r=e.Kc();r.Ob();)if(i=r.Pb(),c.Hc(i))return!1;return!0}function jyn(n,t,e,i){if(t.a<i.a)return!0;if(t.a==i.a){if(t.b<i.b)return!0;if(t.b==i.b&&n.b>e.b)return!0}return!1}function Eyn(n,t){return RA(n)?!!bZn[t]:n.Sm?!!n.Sm[t]:FA(n)?!!lZn[t]:!!KA(n)&&!!fZn[t]}function Syn(n){var t;t=n.a;do{(t=uG(N9(new Fz(ix(qgn(t).a.Kc(),new h))),18).c.i).k==(zIn(),wbt)&&n.b.Fc(t)}while(t.k==(zIn(),wbt));n.b=Spn(n.b)}function Pyn(n,t){var i,r,c;for(c=n,r=new Fz(ix(qgn(t).a.Kc(),new h));hDn(r);)(i=uG(N9(r),18)).c.i.c&&(c=e.Math.max(c,i.c.i.c.p));return c}function Cyn(n,t){var e,i,r;for(r=0,i=uG(uG(Y9(n.r,t),21),87).Kc();i.Ob();)r+=(e=uG(i.Pb(),117)).d.d+e.b.Mf().b+e.d.a,i.Ob()&&(r+=n.w);return r}function Iyn(n,t){var e,i,r;for(r=0,i=uG(uG(Y9(n.r,t),21),87).Kc();i.Ob();)r+=(e=uG(i.Pb(),117)).d.b+e.b.Mf().a+e.d.c,i.Ob()&&(r+=n.w);return r}function Oyn(n){var t,e,i;if(e=0,0==(i=GFn(n)).c.length)return 1;for(t=new Ww(i);t.a<t.c.c.length;)e+=Oyn(uG(N3(t),27));return e}function Ayn(n){var t,e,i;for(i=n.c.a,n.p=(WW(i),new Z_(i)),e=new Ww(i);e.a<e.c.c.length;)(t=uG(N3(e),10)).p=nLn(t).a;hZ(),f$(n.p,new Pc)}function Lyn(n,t,e){var i,r,c,a;return-1!=(i=n.dd(t))&&(n.Pj()?(c=n.Qj(),a=Oq(n,i),r=n.Ij(4,a,null,i,c),e?e.nj(r):e=r):Oq(n,i)),e}function Nyn(n,t,e){var i,r,c,a;return-1!=(i=n.dd(t))&&(n.Pj()?(c=n.Qj(),a=gjn(n,i),r=n.Ij(4,a,null,i,c),e?e.nj(r):e=r):gjn(n,i)),e}function $yn(n,t,e,i){var r,c;e.Xh(t)&&(PP(),ein(t)?ukn(n,uG(e.Mh(t),160)):(r=(c=t)?uG(i,54).gi(c):null)&&rv(e.Mh(t),r))}function Dyn(n,t,e,i){var r,c,a;return c=ern(n.Dh(),t),(r=t-n.ji())<0?(a=n.Ih(c))>=0?n.Lh(a,e,!0):YNn(n,c,e):uG(c,69).wk().yk(n,n.hi(),r,e,i)}function xyn(n,t,e,i){var r;(r=bdn(t.pf((XYn(),K$t))?uG(t.of(K$t),21):n.j))!=(JYn(),sht)&&(e&&!vvn(r)||LOn(Sxn(n,r,i),t))}function Ryn(n){switch(n.g){case 1:return ehn(),pht;case 3:return ehn(),wht;case 2:return ehn(),ght;case 4:return ehn(),dht;default:return null}}function Kyn(n,t,e){if(n.e)switch(n.b){case 1:JY(n.c,t,e);break;case 0:YY(n.c,t,e)}else C5(n.c,t,e);n.a[t.p][e.p]=n.c.i,n.a[e.p][t.p]=n.c.e}function Fyn(n){var t,e;if(null==n)return null;for(e=Inn(pbt,zZn,199,n.length,0,2),t=0;t<e.length;t++)e[t]=uG(b8(n[t],n[t].length),199);return e}function _yn(n){var t;if(Zln(n))return yz(n),n.ul()&&(t=ONn(n.e,n.b,n.c,n.a,n.j),n.j=t),n.g=n.a,++n.a,++n.c,n.i=0,n.j;throw hv(new Bv)}function Byn(n,t){var e,i,r,c;return(c=n.o)<(e=n.p)?c*=c:e*=e,i=c+e,(c=t.o)<(e=t.p)?c*=c:e*=e,i<(r=c+e)?-1:i==r?0:1}function Hyn(n,t){var e,i;if((i=Ljn(n,t))>=0)return i;if(n.ol())for(e=0;e<n.i;++e)if(xA(n.pl(uG(n.g[e],58)))===xA(t))return e;return-1}function Uyn(n,t,e){var i,r;if(t>=(r=n.gc()))throw hv(new w_(t,r));if(n.Si()&&(i=n.dd(e))>=0&&i!=t)throw hv(new vM(Xet));return n.Xi(t,e)}function Gyn(n,t){if(this.a=uG(WW(n),253),this.b=uG(WW(t),253),n.Ed(t)>0||n==(py(),Mat)||t==(my(),Tat))throw hv(new vM("Invalid range: "+N5(n,t)))}function qyn(n){var t,e;for(this.b=new Zm,this.c=n,this.a=!1,e=new Ww(n.a);e.a<e.c.c.length;)t=uG(N3(e),10),this.a=this.a|t.k==(zIn(),dbt)}function Xyn(n,t){var e,i,r;for(e=jx(new sk,n),r=new Ww(t);r.a<r.c.c.length;)i=uG(N3(r),125),RKn(xS(DS(RS($S(new uk,0),0),e),i));return e}function zyn(n,t,e){e.Ug("Compound graph preprocessor",1),n.a=new K1,ZWn(n,t,null),hzn(n,t),qRn(n),kfn(t,(GYn(),Apt),n.a),n.a=null,$V(n.b),e.Vg()}function Vyn(n,t,e){var i,r,c;for(r=new Fz(ix((t?qgn(n):Xgn(n)).a.Kc(),new h));hDn(r);)i=uG(N9(r),18),(c=t?i.c.i:i.d.i).k==(zIn(),bbt)&&a2(c,e)}function Wyn(n,t){var e,i;for(t.Ug("Untreeify",1),i=uG(oIn(n,(OQn(),_Pt)),15).Kc();i.Ob();)aq((e=uG(i.Pb(),65)).b.d,e),aq(e.c.b,e);t.Vg()}function Qyn(n){var t,e,i;for(i=uG(Y9(n.a,(gPn(),gdt)),15).Kc();i.Ob();)pW(n,e=uG(i.Pb(),105),(t=Ejn(e))[0],(gon(),jdt),0),pW(n,e,t[1],Sdt,1)}function Jyn(n){var t,e,i;for(i=uG(Y9(n.a,(gPn(),pdt)),15).Kc();i.Ob();)pW(n,e=uG(i.Pb(),105),(t=Ejn(e))[0],(gon(),jdt),0),pW(n,e,t[1],Sdt,1)}function Yyn(){Yyn=E,djt=new bI(q4n,0),gjt=new bI("PORT_POSITION",1),wjt=new bI("NODE_SIZE_WHERE_SPACE_PERMITS",2),bjt=new bI("NODE_SIZE",3)}function Zyn(){Zyn=E,lOt=new cO("INTERACTIVE_NODE_REORDERER",0),wOt=new cO("MIN_SIZE_PRE_PROCESSOR",1),bOt=new cO("MIN_SIZE_POST_PROCESSOR",2)}function nMn(){nMn=E,CNt=new TO("AUTOMATIC",0),ANt=new TO(z2n,1),LNt=new TO(V2n,2),NNt=new TO("TOP",3),INt=new TO(Q2n,4),ONt=new TO(G2n,5)}function tMn(n,t,e,i){var r,c;for(b_n(),r=0,c=0;c<e;c++)r=Lgn(Ngn(E3(t[c],L0n),E3(i,L0n)),E3(pz(r),L0n)),n[c]=pz(r),r=Dz(r,32);return pz(r)}function eMn(n,t,i){var r,c;for(c=0,r=0;r<Nst;r++)c=e.Math.max(c,Nbn(n.a[t.g][r],i));return t==(Yrn(),Est)&&n.b&&(c=e.Math.max(c,n.b.b)),c}function iMn(n,t){var e,i;if(kK(t>0),(t&-t)==t)return t0(t*uRn(n,31)*4.656612873077393e-10);do{i=(e=uRn(n,31))%t}while(e-i+(t-1)<0);return t0(i)}function rMn(n,t,e){switch(e.g){case 1:n.a=t.a/2,n.b=0;break;case 2:n.a=t.a,n.b=t.b/2;break;case 3:n.a=t.a/2,n.b=t.b;break;case 4:n.a=0,n.b=t.b/2}}function cMn(n,t,e,i){var r,c;for(r=t;r<n.c.length;r++){if(u3(r,n.c.length),c=uG(n.c[r],12),!e.Mb(c))return r;mv(i.c,c)}return n.c.length}function aMn(n){switch(n.g){case 0:return null;case 1:return new gun;case 2:return new dy;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function oMn(n,t,e){var i,r;for($hn(n,t-n.s,e-n.t),r=new Ww(n.n);r.a<r.c.c.length;)cw(i=uG(N3(r),209),i.e+t-n.s),aw(i,i.f+e-n.t);n.s=t,n.t=e}function uMn(n){var t,e,i,r;for(e=0,i=new Ww(n.a);i.a<i.c.c.length;)uG(N3(i),125).d=e++;return r=null,(t=ZCn(n)).c.length>1&&(r=Xyn(n,t)),r}function sMn(n){var t;return new MO(t=uM(pK(zDn(n,(XYn(),BDt))))*e.Math.sqrt((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i),t/uM(pK(zDn(n,_Dt))))}function hMn(n){var t;return n.f&&n.f.Vh()&&(t=uG(n.f,54),n.f=uG(mwn(n,t),84),n.f!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,8,t,n.f))),n.f}function fMn(n){var t;return n.i&&n.i.Vh()&&(t=uG(n.i,54),n.i=uG(mwn(n,t),84),n.i!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,7,t,n.i))),n.i}function lMn(n){var t;return n.b&&0!=(64&n.b.Db)&&(t=n.b,n.b=uG(mwn(n,t),19),n.b!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,21,t,n.b))),n.b}function bMn(n,t){var e,i,r;null==n.d?(++n.e,++n.f):(i=t.Bi(),eKn(n,n.f+1),r=(i&vZn)%n.d.length,!(e=n.d[r])&&(e=n.d[r]=n.dk()),e.Fc(t),++n.f)}function wMn(n,t,e){var i;return!t.tk()&&(-2!=t.Ik()?null==(i=t.ik())?null==e:udn(i,e):t.qk()==n.e.Dh()&&null==e)}function dMn(){var n;man(16,b1n),n=aon(16),this.b=Inn(Cat,l1n,302,n,0,1),this.c=Inn(Cat,l1n,302,n,0,1),this.a=null,this.e=null,this.i=0,this.f=n-1,this.g=0}function gMn(n){LF.call(this),this.k=(zIn(),dbt),this.j=(man(6,g1n),new R7(6)),this.b=(man(2,g1n),new R7(2)),this.d=new $k,this.f=new xk,this.a=n}function pMn(n){var t,e;n.c.length<=1||(iAn(n,uG((t=w_n(n,(KQn(),KRt))).a,17).a,uG(t.b,17).a),iAn(n,uG((e=w_n(n,_Rt)).a,17).a,uG(e.b,17).a))}function mMn(n,t,e){var i,r;for(i=(r=n.a.b).c.length;i<e;i++)GX(r,r.c.length,new bQ(n.a));a2(t,(u3(e-1,r.c.length),uG(r.c[e-1],30))),n.b[t.p]=e}function vMn(n,t){var e,i,r;for(n.b[t.g]=1,i=Fkn(t.d,0);i.b!=i.d.c;)r=(e=uG(I6(i),65)).c,1==n.b[r.g]?aq(n.a,e):2==n.b[r.g]?n.b[r.g]=1:vMn(n,r)}function kMn(n,t,e,i){var r;for(r=uG(Y9(i?n.a:n.b,t),21).Kc();r.Ob();)if(p_n(n,e,uG(r.Pb(),27)))return!0;return!1}function yMn(n){var t,e;for(e=new DD(n);e.e!=e.i.gc();)if((t=uG(Zkn(e),89)).e||0!=(!t.d&&(t.d=new MD(g_t,t,1)),t.d).i)return!0;return!1}function MMn(n){var t,e;for(e=new DD(n);e.e!=e.i.gc();)if((t=uG(Zkn(e),89)).e||0!=(!t.d&&(t.d=new MD(g_t,t,1)),t.d).i)return!0;return!1}function TMn(n){var t,e;for(t=0,e=new Ww(n.c.a);e.a<e.c.c.length;)t+=x5(new Fz(ix(Xgn(uG(N3(e),10)).a.Kc(),new h)));return t/n.c.a.c.length}function jMn(){jMn=E,uBn(),ULt=RLt,BLt=new CN(8),new _N((XYn(),W$t),BLt),new _N(DDt,8),HLt=DLt,FLt=ELt,_Lt=SLt,KLt=new _N(w$t,(qx(),!1))}function EMn(n,t,e){e.Ug("Shrinking tree compaction",1),oM(gK(oIn(t,(rsn(),Oht))))?(son(n,t.f),Qen(t.f,t.c)):Qen(t.f,t.c),e.Vg()}function SMn(n,t,e,i){switch(t){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),n.e;case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),n.d}return spn(n,t,e,i)}function PMn(n){var t;return n.a&&n.a.Vh()&&(t=uG(n.a,54),n.a=uG(mwn(n,t),142),n.a!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,5,t,n.a))),n.a}function CMn(n){return n<48||n>102?-1:n<=57?n-48:n<65?-1:n<=70?n-65+10:n<97?-1:n-97+10}function IMn(n,t){if(null==n)throw hv(new MM("null key in entry: null="+t));if(null==t)throw hv(new MM("null value in entry: "+n+"=null"))}function OMn(n,t){for(var e,i;n.Ob();){if(!t.Ob())return!1;if(e=n.Pb(),i=t.Pb(),!(xA(e)===xA(i)||null!=e&&udn(e,i)))return!1}return!t.Ob()}function AMn(n,t){var i;return i=Uhn(cT(eUt,1),I0n,28,15,[Nbn(n.a[0],t),Nbn(n.a[1],t),Nbn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function LMn(n,t){var i;return i=Uhn(cT(eUt,1),I0n,28,15,[$bn(n.a[0],t),$bn(n.a[1],t),$bn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function NMn(n,t,e){L_(uG(oIn(t,(jYn(),JMt)),101))||(Z8(n,t,yOn(t,e)),Z8(n,t,yOn(t,(KQn(),KRt))),Z8(n,t,yOn(t,yRt)),hZ(),f$(t.j,new Gg(n)))}function $Mn(n){var t,e;for(n.c||oVn(n),e=new Uk,N3(t=new Ww(n.a));t.a<t.c.c.length;)aq(e,uG(N3(t),418).a);return MK(0!=e.b),Lrn(e,e.c.b),e}function DMn(n,t,e){var i,r,c,a;for(a=n.r+t,n.r+=t,n.d+=e,i=e/n.n.c.length,r=0,c=new Ww(n.n);c.a<c.c.c.length;)rxn(uG(N3(c),209),a,i,r),++r}function xMn(n){var t,e;for(n.b.a.$b(),n.a=Inn(zut,EZn,60,n.c.c.a.b.c.length,0,1),t=0,e=new Ww(n.c.c.a.b);e.a<e.c.c.length;)uG(N3(e),60).f=t++}function RMn(n){var t,e;for(n.b.a.$b(),n.a=Inn(xlt,EZn,86,n.c.a.a.b.c.length,0,1),t=0,e=new Ww(n.c.a.a.b);e.a<e.c.c.length;)uG(N3(e),86).i=t++}function KMn(n){var t;if(t=gbn(n),!hDn(n))throw hv(new dM("position (0) must be less than the number of elements that remained ("+t+")"));return N9(n)}function FMn(n,t){var e;return n.a||(e=Inn(eUt,I0n,28,0,15,1),tE(n.b.a,new pd(e)),vv(e,qrn(P.prototype.Me,P,[])),n.a=new __(e,n.d)),x7(n.a,t)}function _Mn(n,t,e){try{return eTn(n,t+n.j,e+n.k)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function BMn(n,t,e){try{return iTn(n,t+n.j,e+n.k)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function HMn(n,t,e){try{return rTn(n,t+n.j,e+n.k)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function UMn(n){switch(n.g){case 1:return KQn(),_Rt;case 4:return KQn(),yRt;case 3:return KQn(),kRt;case 2:return KQn(),KRt;default:return KQn(),FRt}}function GMn(n,t,e){t.k==(zIn(),dbt)&&e.k==wbt&&(n.d=Bwn(t,(KQn(),KRt)),n.b=Bwn(t,yRt)),e.k==dbt&&t.k==wbt&&(n.d=Bwn(e,(KQn(),yRt)),n.b=Bwn(e,KRt))}function qMn(n,t){var e,i;for(i=Dgn(n,t).Kc();i.Ob();)if(null!=oIn(e=uG(i.Pb(),12),(GYn(),lmt))||Dx(new w7(e.b)))return!0;return!1}function XMn(n,t,e){e.Ug("Linear segments node placement",1),n.b=uG(oIn(t,(GYn(),kmt)),312),MYn(n,t),$Xn(n,t),gzn(n,t),LJn(n),n.a=null,n.b=null,e.Vg()}function zMn(n,t){return ycn(t,n.e+n.d+(0==n.c.c.length?0:n.b)),Mcn(t,n.f),n.a=e.Math.max(n.a,t.f),n.d+=t.g+(0==n.c.c.length?0:n.b),kD(n.c,t),!0}function VMn(n,t,e){var i,r,c,a;for(a=0,i=e/n.a.c.length,c=new Ww(n.a);c.a<c.c.c.length;)oMn(r=uG(N3(c),172),r.s,r.t+a*i),DMn(r,n.d-r.r+t,i),++a}function WMn(n,t){var e,i,r,c,a,o;for(r=t.length-1,a=0,o=0,i=0;i<=r;i++)c=t[i],e=eOn(r,i)*gwn(1-n,r-i)*gwn(n,i),a+=c.a*e,o+=c.b*e;return new MO(a,o)}function QMn(n,t){var e,i,r,c,a;for(e=t.gc(),n._i(n.i+e),c=t.Kc(),a=n.i,n.i+=e,i=a;i<n.i;++i)r=c.Pb(),yD(n,i,n.Zi(i,r)),n.Mi(i,r),n.Ni();return 0!=e}function JMn(n,t,e){var i,r,c;return n.Pj()?(i=n.Ej(),c=n.Qj(),++n.j,n.qj(i,n.Zi(i,t)),r=n.Ij(3,null,t,i,c),e?e.nj(r):e=r):JK(n,n.Ej(),t),e}function YMn(n,t,e){var i,r,c;return(0!=(64&(c=F$(r=(i=uG(zrn(z5(n.a),t),89)).c,90)?uG(r,29):(YYn(),x_t)).Db)?mwn(n.b,c):c)==e?MGn(i):Urn(i,e),c}function ZMn(n){var t;return null==n?null:new PN((t=yXn(n,!0)).length>0&&(s3(0,t.length),43==t.charCodeAt(0))?(s3(1,t.length+1),t.substr(1)):t)}function nTn(n){var t;return null==n?null:new PN((t=yXn(n,!0)).length>0&&(s3(0,t.length),43==t.charCodeAt(0))?(s3(1,t.length+1),t.substr(1)):t)}function tTn(n,t,e,i,r,c,a,o){var u,s;i&&((u=i.a[0])&&tTn(n,t,e,u,r,c,a,o),ljn(n,e,i.d,r,c,a,o)&&t.Fc(i),(s=i.a[1])&&tTn(n,t,e,s,r,c,a,o))}function eTn(n,t,e){try{return _A(Son(n,t,e),1)}catch(i){throw F$(i=Ehn(i),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(i)}}function iTn(n,t,e){try{return _A(Son(n,t,e),0)}catch(i){throw F$(i=Ehn(i),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(i)}}function rTn(n,t,e){try{return _A(Son(n,t,e),2)}catch(i){throw F$(i=Ehn(i),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(i)}}function cTn(n,t){if(-1==n.g)throw hv(new xv);n.Xj();try{n.d.hd(n.g,t),n.f=n.d.j}catch(e){throw F$(e=Ehn(e),77)?hv(new Fv):hv(e)}}function aTn(n){var t,e,i;for(e=new Ww(n.b);e.a<e.c.c.length;)for(t=0,i=new Ww(uG(N3(e),30).a);i.a<i.c.c.length;)uG(N3(i),10).p=t++}function oTn(n,t){var e,i,r,c;for(c=n.gc(),t.length<c&&(t=aT(new Array(c),t)),r=t,i=n.Kc(),e=0;e<c;++e)uQ(r,e,i.Pb());return t.length>c&&uQ(t,c,null),t}function uTn(n,t){var e,i;if(i=n.gc(),null==t){for(e=0;e<i;e++)if(null==n.Xb(e))return e}else for(e=0;e<i;e++)if(udn(t,n.Xb(e)))return e;return-1}function sTn(n,t){var e,i,r;return e=t.ld(),r=t.md(),i=n.xc(e),!(!(xA(r)===xA(i)||null!=r&&udn(r,i))||null==i&&!n._b(e))}function hTn(n,t){var e,i,r;return t<=22?(e=n.l&(1<<t)-1,i=r=0):t<=44?(e=n.l,i=n.m&(1<<t-22)-1,r=0):(e=n.l,i=n.m,r=n.h&(1<<t-44)-1),p$(e,i,r)}function fTn(n,t){switch(t.g){case 1:return n.f.n.d+n.t;case 3:return n.f.n.a+n.t;case 2:return n.f.n.c+n.s;case 4:return n.f.n.b+n.s;default:return 0}}function lTn(n,t){var e,i;switch(i=t.c,e=t.a,n.b.g){case 0:e.d=n.e-i.a-i.d;break;case 1:e.d+=n.e;break;case 2:e.c=n.e-i.a-i.d;break;case 3:e.c=n.e+i.d}}function bTn(n,t,e,i){var r,c;this.a=t,this.c=i,Nb(this,new MO(-(r=n.a).c,-r.d)),JF(this.b,e),c=i/2,t.a?HR(this.b,0,c):HR(this.b,c,0),kD(n.c,this)}function wTn(n,t,e,i){var r;this.c=n,this.d=t,s8(r=new lS,e,r.c.b,r.c),this.a=r,this.b=uG(oIn(i,(QGn(),cCt)),88),this.e=uM(pK(oIn(i,jCt))),RYn(this)}function dTn(){dTn=E,ZIt=new eO(q4n,0),JIt=new eO(K6n,1),YIt=new eO("EDGE_LENGTH_BY_POSITION",2),QIt=new eO("CROSSING_MINIMIZATION_BY_POSITION",3)}function gTn(n,t){var e,i;if(e=uG(dcn(n.g,t),27))return e;if(i=uG(dcn(n.j,t),123))return i;throw hv(new SM("Referenced shape does not exist: "+t))}function pTn(n,t){var e;if(F$(t,253)){e=uG(t,253);try{return 0==n.Ed(e)}catch(i){if(F$(i=Ehn(i),212))return!1;throw hv(i)}}return!1}function mTn(n,t){if(n.c==t)return n.d;if(n.d==t)return n.c;throw hv(new vM("Node 'one' must be either source or target of edge 'edge'."))}function vTn(n,t){if(n.c.i==t)return n.d.i;if(n.d.i==t)return n.c.i;throw hv(new vM("Node "+t+" is neither source nor target of edge "+n))}function kTn(n,t,e){e.Ug("Self-Loop ordering",1),kS(YJ(JJ(JJ(sin(new fX(null,new h3(t.b,16)),new Ii),new Oi),new Ai),new Li),new gg(n)),e.Vg()}function yTn(n,t){var e;switch(t.g){case 2:case 4:e=n.a,n.c.d.n.b<e.d.n.b&&(e=n.c),hV(n,t,(qhn(),hdt),e);break;case 1:case 3:hV(n,t,(qhn(),odt),null)}}function MTn(n,t,e,i,r,c){var a,o,u,s,h;for(a=BEn(t,e,c),o=e==(KQn(),yRt)||e==_Rt?-1:1,s=n[e.g],h=0;h<s.length;h++)(u=s[h])>0&&(u+=r),s[h]=a,a+=o*(u+i)}function TTn(n){var t,e,i;for(i=n.f,n.n=Inn(eUt,I0n,28,i,15,1),n.d=Inn(eUt,I0n,28,i,15,1),t=0;t<i;t++)e=uG(zq(n.c.b,t),30),n.n[t]=Hkn(n,e),n.d[t]=FRn(n,e)}function jTn(n,t){var e,i,r;for(r=0,i=2;i<t;i<<=1)0!=(n.Db&i)&&++r;if(0==r){for(e=t<<=1;e<=128;e<<=1)if(0!=(n.Db&e))return 0;return-1}return r}function ETn(n,t){var e,i,r,c,a;for(a=VKn(n.e.Dh(),t),c=null,e=uG(n.g,124),r=0;r<n.i;++r)i=e[r],a.am(i.Lk())&&(!c&&(c=new ls),ttn(c,i));c&&PJn(n,c)}function STn(n){var t,e;if(!n)return null;if(n.dc())return"";for(e=new zM,t=n.Kc();t.Ob();)VA(e,mK(t.Pb())),e.a+=" ";return CL(e,e.a.length-1)}function PTn(n,t){var e,i=new Array(t);switch(n){case 14:case 15:e=0;break;case 16:e=!1;break;default:return i}for(var r=0;r<t;++r)i[r]=e;return i}function CTn(n){var t;for(t=new Ww(n.a.b);t.a<t.c.c.length;)uG(N3(t),60).c.$b();Prn(hN(n.d)?n.a.c:n.a.d,new Id(n)),n.c.df(n),NFn(n)}function ITn(n){var t,e,i;for(e=new Ww(n.e.c);e.a<e.c.c.length;){for(i=new Ww((t=uG(N3(e),289)).b);i.a<i.c.c.length;)Yqn(uG(N3(i),453));CNn(t)}}function OTn(n){var t,i,r,c,a;for(r=0,a=0,c=0,i=new Ww(n.a);i.a<i.c.c.length;)t=uG(N3(i),172),a=e.Math.max(a,t.r),r+=t.d+(c>0?n.c:0),++c;n.b=r,n.d=a}function ATn(n,t){var i;return i=Uhn(cT(eUt,1),I0n,28,15,[eMn(n,(Yrn(),jst),t),eMn(n,Est,t),eMn(n,Sst,t)]),n.f&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function LTn(n,t,e){try{HBn(n,t+n.j,e+n.k,!1,!0)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function NTn(n,t,e){try{HBn(n,t+n.j,e+n.k,!0,!1)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function $Tn(n){var t;vR(n,(jYn(),PMt))&&((t=uG(oIn(n,PMt),21)).Hc((VDn(),Bxt))?(t.Mc(Bxt),t.Fc(Uxt)):t.Hc(Uxt)&&(t.Mc(Uxt),t.Fc(Bxt)))}function DTn(n){var t;vR(n,(jYn(),PMt))&&((t=uG(oIn(n,PMt),21)).Hc((VDn(),Vxt))?(t.Mc(Vxt),t.Fc(Xxt)):t.Hc(Xxt)&&(t.Mc(Xxt),t.Fc(Vxt)))}function xTn(n,t,e,i){var r,c,a;return null==n.a&&nOn(n,t),a=t.b.j.c.length,c=e.d.p,(r=i.d.p-1)<0&&(r=a-1),c<=r?n.a[r]-n.a[c]:n.a[a-1]-n.a[c]+n.a[r]}function RTn(n){var t,e;if(!n.b)for(n.b=o6(uG(n.f,27).kh().i),e=new DD(uG(n.f,27).kh());e.e!=e.i.gc();)t=uG(Zkn(e),135),kD(n.b,new Wy(t));return n.b}function KTn(n){var t,e;if(!n.e)for(n.e=o6(RJ(uG(n.f,27)).i),e=new DD(RJ(uG(n.f,27)));e.e!=e.i.gc();)t=uG(Zkn(e),123),kD(n.e,new Jp(t));return n.e}function FTn(n){var t,e;if(!n.a)for(n.a=o6(wZ(uG(n.f,27)).i),e=new DD(wZ(uG(n.f,27)));e.e!=e.i.gc();)t=uG(Zkn(e),27),kD(n.a,new Wx(n,t));return n.a}function _Tn(n){var t;if(!n.C&&(null!=n.D||null!=n.B))if(t=KWn(n))n.hl(t);else try{n.hl(null)}catch(e){if(!F$(e=Ehn(e),63))throw hv(e)}return n.C}function BTn(n){switch(n.q.g){case 5:QEn(n,(KQn(),yRt)),QEn(n,KRt);break;case 4:TVn(n,(KQn(),yRt)),TVn(n,KRt);break;default:PAn(n,(KQn(),yRt)),PAn(n,KRt)}}function HTn(n){switch(n.q.g){case 5:JEn(n,(KQn(),kRt)),JEn(n,_Rt);break;case 4:jVn(n,(KQn(),kRt)),jVn(n,_Rt);break;default:CAn(n,(KQn(),kRt)),CAn(n,_Rt)}}function UTn(n,t){var i,r,c;for(c=new sj,r=n.Kc();r.Ob();)tHn(i=uG(r.Pb(),36),c.a,0),c.a+=i.f.a+t,c.b=e.Math.max(c.b,i.f.b);return c.b>0&&(c.b+=t),c}function GTn(n,t){var i,r,c;for(c=new sj,r=n.Kc();r.Ob();)tHn(i=uG(r.Pb(),36),0,c.b),c.b+=i.f.b+t,c.a=e.Math.max(c.a,i.f.a);return c.a>0&&(c.a+=t),c}function qTn(n){var t,i,r;for(r=vZn,i=new Ww(n.a);i.a<i.c.c.length;)vR(t=uG(N3(i),10),(GYn(),imt))&&(r=e.Math.min(r,uG(oIn(t,imt),17).a));return r}function XTn(n,t){var e,i;if(0==t.length)return 0;for(e=kQ(n.a,t[0],(KQn(),_Rt)),e+=kQ(n.a,t[t.length-1],kRt),i=0;i<t.length;i++)e+=CIn(n,i,t);return e}function zTn(){uFn(),this.c=new Zm,this.i=new Zm,this.e=new XL,this.f=new XL,this.g=new XL,this.j=new Zm,this.a=new Zm,this.b=new Ym,this.k=new Ym}function VTn(n,t){var e;return n.Db>>16==6?n.Cb.Th(n,5,fFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||n.ii(),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function WTn(n){EZ();var t=n.e;if(t&&t.stack){var e=t.stack,i=t+"\n";return e.substring(0,i.length)==i&&(e=e.substring(i.length)),e.split("\n")}return[]}function QTn(n){var t;return Tan(),(t=wot)[n>>>28]|t[n>>24&15]<<4|t[n>>20&15]<<8|t[n>>16&15]<<12|t[n>>12&15]<<16|t[n>>8&15]<<20|t[n>>4&15]<<24|t[15&n]<<28}function JTn(n){var t,i,r;n.b==n.c&&(r=n.a.length,i=pfn(e.Math.max(8,r))<<1,0!=n.b?(Pon(n,t=MF(n.a,i),r),n.a=t,n.b=0):Xv(n.a,i),n.c=r)}function YTn(n,t){var e;return(e=n.b).pf((XYn(),uDt))?e.ag()==(KQn(),_Rt)?-e.Mf().a-uM(pK(e.of(uDt))):t+uM(pK(e.of(uDt))):e.ag()==(KQn(),_Rt)?-e.Mf().a:t}function ZTn(n){var t;return 0!=n.b.c.length&&uG(zq(n.b,0),72).a?uG(zq(n.b,0),72).a:null!=(t=sY(n))?t:""+(n.c?Ten(n.c.a,n,0):-1)}function njn(n){var t;return 0!=n.f.c.length&&uG(zq(n.f,0),72).a?uG(zq(n.f,0),72).a:null!=(t=sY(n))?t:""+(n.i?Ten(n.i.j,n,0):-1)}function tjn(n,t){var e,i;if(t<0||t>=n.gc())return null;for(e=t;e<n.gc();++e)if(i=uG(n.Xb(e),131),e==n.gc()-1||!i.o)return new WO(xwn(e),i);return null}function ejn(n,t,e){var i,r,c,a;for(c=n.c,i=e?n:t,r=(e?t:n).p+1;r<i.p;++r)if((a=uG(zq(c.a,r),10)).k!=(zIn(),fbt)&&!pEn(a))return!1;return!0}function ijn(n){var t,i,r,c,a;for(a=0,c=T0n,r=0,i=new Ww(n.a);i.a<i.c.c.length;)a+=(t=uG(N3(i),172)).r+(r>0?n.c:0),c=e.Math.max(c,t.d),++r;n.e=a,n.b=c}function rjn(n){var t,e;if(!n.b)for(n.b=o6(uG(n.f,123).kh().i),e=new DD(uG(n.f,123).kh());e.e!=e.i.gc();)t=uG(Zkn(e),135),kD(n.b,new Wy(t));return n.b}function cjn(n,t){var e,i,r;if(t.dc())return EK(),EK(),KFt;for(e=new cF(n,t.gc()),r=new DD(n);r.e!=r.i.gc();)i=Zkn(r),t.Hc(i)&&ttn(e,i);return e}function ajn(n,t,e,i){return 0==t?i?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),n.o):(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),Tnn(n.o)):Dyn(n,t,e,i)}function ojn(n){var t,e;if(n.rb)for(t=0,e=n.rb.i;t<e;++t)lR(zrn(n.rb,t));if(n.vb)for(t=0,e=n.vb.i;t<e;++t)lR(zrn(n.vb,t));jz((gAn(),kBt),n),n.Bb|=1}function ujn(n,t,e,i,r,c,a,o,u,s,h,f,l,b){return eLn(n,t,i,null,r,c,a,o,u,s,l,!0,b),Pgn(n,h),F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),2),e&&bon(n,e),Ign(n,f),n}function sjn(n){var t;if(null==n)return null;t=0;try{t=vUn(n,j1n,vZn)&D1n}catch(e){if(!F$(e=Ehn(e),130))throw hv(e);t=_en(n)[0]}return Hsn(t)}function hjn(n){var t;if(null==n)return null;t=0;try{t=vUn(n,j1n,vZn)&D1n}catch(e){if(!F$(e=Ehn(e),130))throw hv(e);t=_en(n)[0]}return Hsn(t)}function fjn(n,t){var e,i,r;return!((r=n.h-t.h)<0||(e=n.l-t.l,(r+=(i=n.m-t.m+(e>>22))>>22)<0||(n.l=e&f0n,n.m=i&f0n,n.h=r&l0n,0)))}function ljn(n,t,e,i,r,c,a){var o,u;return!(t.Te()&&(u=n.a.Ne(e,i),u<0||!r&&0==u)||t.Ue()&&(o=n.a.Ne(e,c),o>0||!a&&0==o))}function bjn(n,t){if(Cln(),0!=n.j.g-t.j.g)return 0;switch(n.j.g){case 2:return Wgn(t,edt)-Wgn(n,edt);case 4:return Wgn(n,tdt)-Wgn(t,tdt)}return 0}function wjn(n){switch(n.g){case 0:return jgt;case 1:return Egt;case 2:return Sgt;case 3:return Pgt;case 4:return Cgt;case 5:return Igt;default:return null}}function djn(n,t,e){var i,r;return Kbn(r=new ny,t),qon(r,e),ttn((!n.c&&(n.c=new fV(m_t,n,12,10)),n.c),r),Pcn(i=r,0),Ccn(i,1),mdn(i,!0),ddn(i,!0),i}function gjn(n,t){var e,i;if(t>=n.i)throw hv(new pL(t,n.i));return++n.j,e=n.g[t],(i=n.i-t-1)>0&&qGn(n.g,t+1,n.g,t,i),uQ(n.g,--n.i,null),n.Qi(t,e),n.Ni(),e}function pjn(n,t){var e;return n.Db>>16==17?n.Cb.Th(n,21,h_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||n.ii(),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function mjn(n){var t,e,i;for(hZ(),f$(n.c,n.a),i=new Ww(n.c);i.a<i.c.c.length;)for(e=N3(i),t=new Ww(n.b);t.a<t.c.c.length;)uG(N3(t),693).bf(e)}function vjn(n){var t,e,i;for(hZ(),f$(n.c,n.a),i=new Ww(n.c);i.a<i.c.c.length;)for(e=N3(i),t=new Ww(n.b);t.a<t.c.c.length;)uG(N3(t),382).bf(e)}function kjn(n){var t,e,i,r,c;for(r=vZn,c=null,i=new Ww(n.d);i.a<i.c.c.length;)(e=uG(N3(i),218)).d.j^e.e.j&&(t=e.e.e-e.d.e-e.a)<r&&(r=t,c=e);return c}function yjn(){yjn=E,tlt=new mL(I4n,(qx(),!1)),Jft=new mL(O4n,100),Jen(),Yft=new mL(A4n,Zft=glt),nlt=new mL(L4n,t4n),elt=new mL(N4n,xwn(vZn))}function Mjn(n,t,e){var i,r,c,a,o,u;for(u=0,r=0,c=(i=n.a[t]).length;r<c;++r)for(o=Vwn(i[r],e).Kc();o.Ob();)a=uG(o.Pb(),12),vJ(n.f,a,xwn(u++))}function Tjn(n,t,e){var i,r;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)UNn(n,t,fNn(uin(e,uG(r.Pb(),17).a)))}function jjn(n,t,e){var i,r;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)UNn(n,t,fNn(uin(e,uG(r.Pb(),17).a)))}function Ejn(n){var t;return jIn(),Ntn(t=uG(oTn(kz(n.k),Inn(YRt,z4n,64,2,0,1)),126),0,t.length,null),t[0]==(KQn(),yRt)&&t[1]==_Rt&&(uQ(t,0,_Rt),uQ(t,1,yRt)),t}function Sjn(n,t,e){var i,r,c;return c=ZFn(n,r=xKn(n,t,e)),Ctn(n.b),Z3(n,t,e),hZ(),f$(r,new np(n)),i=ZFn(n,r),Ctn(n.b),Z3(n,e,t),new WO(xwn(c),xwn(i))}function Pjn(){Pjn=E,eSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt)),iSt=new uF("linearSegments.inputPrio",xwn(0)),rSt=new uF("linearSegments.outputPrio",xwn(0))}function Cjn(){Cjn=E,zSt=new zI("P1_TREEIFICATION",0),VSt=new zI("P2_NODE_ORDERING",1),WSt=new zI("P3_NODE_PLACEMENT",2),QSt=new zI("P4_EDGE_ROUTING",3)}function Ijn(n){var t,i,r,c;for(i=0,t=0,c=new DD(n);c.e!=c.i.gc();)r=uG(Zkn(c),27),i=e.Math.max(r.g+r.i,i),t=e.Math.max(r.f+r.j,t);return new MO(i,t)}function Ojn(n,t){var i,r,c;for(c=0,r=new Ww(n);r.a<r.c.c.length;)i=uG(N3(r),27),c+=e.Math.pow(i.g*i.f-t,2);return e.Math.sqrt(c/(n.c.length-1))}function Ajn(){Ajn=E,Rxt=new LO("UNKNOWN",0),$xt=new LO("ABOVE",1),Dxt=new LO("BELOW",2),xxt=new LO("INLINE",3),new uF("org.eclipse.elk.labelSide",Rxt)}function Ljn(n,t){var e;if(n.Yi()&&null!=t){for(e=0;e<n.i;++e)if(udn(t,n.g[e]))return e}else for(e=0;e<n.i;++e)if(xA(n.g[e])===xA(t))return e;return-1}function Njn(n,t,e){var i,r;return t.c==(can(),Wjt)&&e.c==Vjt?-1:t.c==Vjt&&e.c==Wjt?1:(i=Fbn(t.a,n.a),r=Fbn(e.a,n.a),t.c==Wjt?r-i:i-r)}function $jn(n,t,e){if(e&&(t<0||t>e.a.c.length))throw hv(new vM("index must be >= 0 and <= layer node count"));n.c&&men(n.c.a,n),n.c=e,e&&GX(e.a,t,n)}function Djn(n,t){var e,i,r;for(i=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(i);)return e=uG(N9(i),18),new Ul(WW((r=uG(t.Kb(e),10)).n.b+r.o.b/2));return gy(),gy(),wat}function xjn(n,t){this.c=new Ym,this.a=n,this.b=t,this.d=uG(oIn(n,(GYn(),kmt)),312),xA(oIn(n,(jYn(),CMt)))===xA((Wtn(),Lgt))?this.e=new Pk:this.e=new Sk}function Rjn(n,t){var e,i;return i=null,n.pf((XYn(),ODt))&&(e=uG(n.of(ODt),96)).pf(t)&&(i=e.of(t)),null==i&&n.Tf()&&(i=n.Tf().of(t)),null==i&&(i=Jkn(t)),i}function Kjn(n,t){var e,i;e=n.fd(t);try{return i=e.Pb(),e.Qb(),i}catch(r){throw F$(r=Ehn(r),112)?hv(new dM("Can't remove element "+t)):hv(r)}}function Fjn(n,t){var e,i,r;if(0==(e=Wqn(n,t,r=new Lfn((i=new QE).q.getFullYear()-V1n,i.q.getMonth(),i.q.getDate())))||e<t.length)throw hv(new vM(t));return r}function _jn(n,t){var e,i,r;for(tJ(t),kK(t!=n),r=n.b.c.length,i=t.Kc();i.Ob();)e=i.Pb(),kD(n.b,tJ(e));return r!=n.b.c.length&&(_ln(n,0),!0)}function Bjn(){Bjn=E,XYn(),olt=O$t,new _N(p$t,(qx(),!0)),hlt=_$t,flt=U$t,llt=q$t,slt=K$t,blt=V$t,wlt=bDt,yjn(),alt=tlt,rlt=Yft,clt=nlt,ult=elt,ilt=Jft}function Hjn(n,t){if(t==n.c)return n.d;if(t==n.d)return n.c;throw hv(new vM("'port' must be either the source port or target port of the edge."))}function Ujn(n,t,e){var i,r;switch(r=n.o,i=n.d,t.g){case 1:return-i.d-e;case 3:return r.b+i.a+e;case 2:return r.a+i.c+e;case 4:return-i.b-e;default:return 0}}function Gjn(n,t,e,i){var r,c,a;for(a2(t,uG(i.Xb(0),30)),a=i.kd(1,i.gc()),c=uG(e.Kb(t),20).Kc();c.Ob();)Gjn(n,(r=uG(c.Pb(),18)).c.i==t?r.d.i:r.c.i,e,a)}function qjn(n){var t;return t=new Ym,vR(n,(GYn(),Emt))?uG(oIn(n,Emt),85):(kS(JJ(new fX(null,new h3(n.j,16)),new tr),new yg(t)),kfn(n,Emt,t),t)}function Xjn(n,t){var i,r,c,a,o;for(r=0,c=0,i=0,o=new Ww(n);o.a<o.c.c.length;)a=uG(N3(o),186),r=e.Math.max(r,a.e),c+=a.b+(i>0?t:0),++i;return new MO(r,c)}function zjn(n,t){var e;return n.Db>>16==6?n.Cb.Th(n,6,aFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),BKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Vjn(n,t){var e;return n.Db>>16==7?n.Cb.Th(n,1,iFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),UKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Wjn(n,t){var e;return n.Db>>16==9?n.Cb.Th(n,9,bFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),qKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Qjn(n,t){var e;return n.Db>>16==5?n.Cb.Th(n,9,w_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),O_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Jjn(n,t){var e;return n.Db>>16==7?n.Cb.Th(n,6,fFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),F_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Yjn(n,t){var e;return n.Db>>16==3?n.Cb.Th(n,0,uFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),T_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Zjn(){this.a=new ss,this.g=new dMn,this.j=new dMn,this.b=new Ym,this.d=new dMn,this.i=new dMn,this.k=new Ym,this.c=new Ym,this.e=new Ym,this.f=new Ym}function nEn(n,t,e){var i,r,c;for(e<0&&(e=0),c=n.i,r=e;r<c;r++)if(i=zrn(n,r),null==t){if(null==i)return r}else if(xA(t)===xA(i)||udn(t,i))return r;return-1}function tEn(n,t){var e,i;return(e=t.qi(n.a))?(i=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),uct)),m_(sct,i)?jz(n,Hrn(t.qk())):i):null}function eEn(n,t){var e,i;if(t){if(t==n)return!0;for(e=0,i=uG(t,54).Ph();i&&i!=t;i=i.Ph()){if(++e>O0n)return eEn(n,i);if(i==n)return!0}}return!1}function iEn(n){switch(Gx(),n.q.g){case 5:uNn(n,(KQn(),yRt)),uNn(n,KRt);break;case 4:Kxn(n,(KQn(),yRt)),Kxn(n,KRt);break;default:$Qn(n,(KQn(),yRt)),$Qn(n,KRt)}}function rEn(n){switch(Gx(),n.q.g){case 5:k$n(n,(KQn(),kRt)),k$n(n,_Rt);break;case 4:fyn(n,(KQn(),kRt)),fyn(n,_Rt);break;default:DQn(n,(KQn(),kRt)),DQn(n,_Rt)}}function cEn(n){var t,e;(t=uG(oIn(n,(cGn(),Dft)),17))?(e=t.a,kfn(n,(mon(),Qft),0==e?new Upn:new v8(e))):kfn(n,(mon(),Qft),new v8(1))}function aEn(n,t){var e;switch(e=n.i,t.g){case 1:return-(n.n.b+n.o.b);case 2:return n.n.a-e.o.a;case 3:return n.n.b-e.o.b;case 4:return-(n.n.a+n.o.a)}return 0}function oEn(n,t){switch(n.g){case 0:return t==(Gpn(),Imt)?qwt:Xwt;case 1:return t==(Gpn(),Imt)?qwt:Gwt;case 2:return t==(Gpn(),Imt)?Gwt:Xwt;default:return Gwt}}function uEn(n,t){var i,r,c;for(men(n.a,t),n.e-=t.r+(0==n.a.c.length?0:n.c),c=b7n,r=new Ww(n.a);r.a<r.c.c.length;)i=uG(N3(r),172),c=e.Math.max(c,i.d);n.b=c}function sEn(n,t){var e;return n.Db>>16==3?n.Cb.Th(n,12,bFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),_Kt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function hEn(n,t){var e;return n.Db>>16==11?n.Cb.Th(n,10,bFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),GKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function fEn(n,t){var e;return n.Db>>16==10?n.Cb.Th(n,11,h_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),R_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function lEn(n,t){var e;return n.Db>>16==10?n.Cb.Th(n,12,p_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),__t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function bEn(n){var t;return 0==(1&n.Bb)&&n.r&&n.r.Vh()&&(t=uG(n.r,54),n.r=uG(mwn(n,t),142),n.r!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,8,t,n.r))),n.r}function wEn(n,t,i){var r;return r=Uhn(cT(eUt,1),I0n,28,15,[BCn(n,(Yrn(),jst),t,i),BCn(n,Est,t,i),BCn(n,Sst,t,i)]),n.f&&(r[0]=e.Math.max(r[0],r[2]),r[2]=r[0]),r}function dEn(n,t){var e,i,r;if(0!=(r=lyn(n,t)).c.length)for(f$(r,new ti),e=r.c.length,i=0;i<e;i++)YOn(n,(u3(i,r.c.length),uG(r.c[i],292)),m_n(n,r,i))}function gEn(n){var t,e,i;for(i=uG(Y9(n.a,(gPn(),bdt)),15).Kc();i.Ob();)for(t=kz((e=uG(i.Pb(),105)).k).Kc();t.Ob();)pW(n,e,uG(t.Pb(),64),(gon(),Edt),1)}function pEn(n){var t,e;if(n.k==(zIn(),wbt))for(e=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(e);)if(!v9(t=uG(N9(e),18))&&n.c==wSn(t,n).c)return!0;return!1}function mEn(n){var t,e;if(n.k==(zIn(),wbt))for(e=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(e);)if(!v9(t=uG(N9(e),18))&&t.c.i.c==t.d.i.c)return!0;return!1}function vEn(n,t){var e,i,r;if(t)for(r=((e=new Gz(t.a.length)).b-e.a)*e.c<0?(CP(),XHt):new xD(e);r.Ob();)(i=v6(t,uG(r.Pb(),17).a))&&Mxn(n,i)}function kEn(){var n;for(IP(),OYn((tQ(),M_t)),sYn(M_t),ojn(M_t),YYn(),nBt=N_t,n=new Ww(gBt);n.a<n.c.c.length;)PWn(uG(N3(n),248),N_t,null);return!0}function yEn(n,t){var e,i,r,c,a,o;return(a=n.h>>19)!=(o=t.h>>19)?o-a:(i=n.h)!=(c=t.h)?i-c:(e=n.m)!=(r=t.m)?e-r:n.l-t.l}function MEn(){MEn=E,W_n(),ost=new mL($2n,ust=dst),Xin(),cst=new mL(D2n,ast=Zut),_kn(),ist=new mL(x2n,rst=Wut),est=new mL(R2n,(qx(),!0))}function TEn(n,t,e){var i,r;i=t*e,F$(n.g,154)?(r=Q6(n)).f.d?r.f.a||(n.d.a+=i+Z2n):(n.d.d-=i+Z2n,n.d.a+=i+Z2n):F$(n.g,10)&&(n.d.d-=i,n.d.a+=2*i)}function jEn(n,t,i){var r,c,a,o,u;for(c=n[i.g],u=new Ww(t.d);u.a<u.c.c.length;)(a=(o=uG(N3(u),105)).i)&&a.i==i&&(c[r=o.d[i.g]]=e.Math.max(c[r],a.j.b))}function EEn(n,t){var i,r,c,a,o;for(r=0,c=0,i=0,o=new Ww(t.d);o.a<o.c.c.length;)OTn(a=uG(N3(o),315)),r=e.Math.max(r,a.b),c+=a.d+(i>0?n.b:0),++i;t.b=r,t.e=c}function SEn(n){var t,e,i;if(i=n.b,aS(n.i,i.length)){for(e=2*i.length,n.b=Inn(Cat,l1n,302,e,0,1),n.c=Inn(Cat,l1n,302,e,0,1),n.f=e-1,n.i=0,t=n.a;t;t=t.c)HLn(n,t,t);++n.g}}function PEn(n,t,e,i){var r,c,a,o;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)o=a-t.k+i,eTn(t,r,a)?HMn(n,c,o)||LTn(n,c,o):rTn(t,r,a)&&(_Mn(n,c,o)||NTn(n,c,o))}function CEn(n,t){return n.b.a=e.Math.min(n.b.a,t.c),n.b.b=e.Math.min(n.b.b,t.d),n.a.a=e.Math.max(n.a.a,t.c),n.a.b=e.Math.max(n.a.b,t.d),mv(n.c,t),!0}function IEn(n,t,e){var i;(i=t.c.i).k==(zIn(),wbt)?(kfn(n,(GYn(),Zpt),uG(oIn(i,Zpt),12)),kfn(n,nmt,uG(oIn(i,nmt),12))):(kfn(n,(GYn(),Zpt),t.c),kfn(n,nmt,e.d))}function OEn(n,t,i){var r,c,a,o,u,s;return l_n(),o=t/2,a=i/2,u=1,s=1,(r=e.Math.abs(n.a))>o&&(u=o/r),(c=e.Math.abs(n.b))>a&&(s=a/c),vD(n,e.Math.min(u,s)),n}function AEn(){var n,t;tXn();try{if(t=uG(ASn((MP(),l_t),aet),2113))return t}catch(e){if(!F$(e=Ehn(e),103))throw hv(e);n=e,AW((t$(),n))}return new rs}function LEn(){var n,t;tXn();try{if(t=uG(ASn((MP(),l_t),Drt),2040))return t}catch(e){if(!F$(e=Ehn(e),103))throw hv(e);n=e,AW((t$(),n))}return new _s}function NEn(){var n,t;Ftn();try{if(t=uG(ASn((MP(),l_t),lct),2122))return t}catch(e){if(!F$(e=Ehn(e),103))throw hv(e);n=e,AW((t$(),n))}return new Nh}function $En(n,t,e){var i,r;return r=n.e,n.e=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,4,r,t),e?e.nj(i):e=i),r!=t&&(e=PWn(n,t?bRn(n,t):n.a,e)),e}function DEn(){QE.call(this),this.e=-1,this.a=!1,this.p=j1n,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=j1n}function xEn(n,t){var e,i,r;if(i=n.b.d.d,n.a||(i+=n.b.d.a),r=t.b.d.d,t.a||(r+=t.b.d.a),0==(e=ugn(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function REn(n,t){var e,i,r;if(i=n.b.b.d,n.a||(i+=n.b.b.a),r=t.b.b.d,t.a||(r+=t.b.b.a),0==(e=ugn(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function KEn(n,t){var e,i,r;if(i=n.b.g.d,n.a||(i+=n.b.g.a),r=t.b.g.d,t.a||(r+=t.b.g.a),0==(e=ugn(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function FEn(){FEn=E,klt=wz(Aq(Aq(Aq(new wJ,(uIn(),Slt),(zYn(),owt)),Slt,fwt),Plt,mwt),Plt,Wbt),Mlt=Aq(Aq(new wJ,Slt,Fbt),Slt,Qbt),ylt=wz(new wJ,Plt,Ybt)}function _En(n){var t,e,i,r,c;for(t=uG(oIn(n,(GYn(),$pt)),85),c=n.n,i=t.Cc().Kc();i.Ob();)(r=(e=uG(i.Pb(),314)).i).c+=c.a,r.d+=c.b,e.c?P_n(e):C_n(e);kfn(n,$pt,null)}function BEn(n,t,e){var i,r;switch(i=(r=n.b).d,t.g){case 1:return-i.d-e;case 2:return r.o.a+i.c+e;case 3:return r.o.b+i.a+e;case 4:return-i.b-e;default:return-1}}function HEn(n,t,e){var i;for(e.Ug("Interactive node placement",1),n.a=uG(oIn(t,(GYn(),kmt)),312),i=new Ww(t.b);i.a<i.c.c.length;)XFn(n,uG(N3(i),30));e.Vg()}function UEn(n){var t,e,i,r,c;if(i=0,r=B3n,n.b)for(t=0;t<360;t++)e=.017453292519943295*t,nUn(n,n.d,0,0,f7n,e),(c=n.b.Dg(n.d))<r&&(i=e,r=c);nUn(n,n.d,0,0,f7n,i)}function GEn(n,t){var e,i,r,c;for(c=new Ym,t.e=null,t.f=null,i=new Ww(t.i);i.a<i.c.c.length;)e=uG(N3(i),68),r=uG(cQ(n.g,e.a),42),e.a=AV(e.b),vJ(c,e.a,r);n.g=c}function qEn(n,t,e){var i,r,c,a,o;for(r=(t-n.e)/n.d.c.length,c=0,o=new Ww(n.d);o.a<o.c.c.length;)a=uG(N3(o),315),i=n.b-a.b+e,Xmn(a,a.e+c*r,a.f),VMn(a,r,i),++c}function XEn(n){var t;if(n.f._j(),-1!=n.b){if(++n.b,t=n.f.d[n.a],n.b<t.i)return;++n.a}for(;n.a<n.f.d.length;++n.a)if((t=n.f.d[n.a])&&0!=t.i)return void(n.b=0);n.b=-1}function zEn(n,t){var e,i,r;for(e=MLn(n,0==(r=t.c.length)?"":(u3(0,t.c.length),mK(t.c[0]))),i=1;i<r&&e;++i)e=uG(e,54).Zh((u3(i,t.c.length),mK(t.c[i])));return e}function VEn(n,t){var e,i;for(i=new Ww(t);i.a<i.c.c.length;)e=uG(N3(i),10),n.c[e.c.p][e.p].a=BX(n.i),n.c[e.c.p][e.p].d=uM(n.c[e.c.p][e.p].a),n.c[e.c.p][e.p].b=1}function WEn(n,t){var i,r,c;for(c=0,r=new Ww(n);r.a<r.c.c.length;)i=uG(N3(r),163),c+=e.Math.pow(EX(i)*jX(i)-t,2);return e.Math.sqrt(c/(n.c.length-1))}function QEn(n,t){var i,r,c,a;for(a=0,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)r=uG(c.Pb(),117),a=e.Math.max(a,r.e.a+r.b.Mf().a);(i=uG(AJ(n.b,t),127)).n.b=0,i.a.a=a}function JEn(n,t){var i,r,c,a;for(i=0,a=uG(uG(Y9(n.r,t),21),87).Kc();a.Ob();)c=uG(a.Pb(),117),i=e.Math.max(i,c.e.b+c.b.Mf().b);(r=uG(AJ(n.b,t),127)).n.d=0,r.a.b=i}function YEn(n,t,e,i){var r,c,a;return a=NBn(n,c=UBn(n,t,e,i)),QCn(n,t,e,i),Ctn(n.b),hZ(),f$(c,new tp(n)),r=NBn(n,c),QCn(n,e,t,i),Ctn(n.b),new WO(xwn(a),xwn(r))}function ZEn(n,t){var e;t.Ug("Delaunay triangulation",1),e=new Zm,Prn(n.i,new Fp(e)),oM(gK(oIn(n,(rsn(),Oht)))),n.e?Qon(n.e,nYn(e)):n.e=nYn(e),t.Vg()}function nSn(n,t,e){var i,r;for(MN(n,n.j+t,n.k+e),r=new DD((!n.a&&(n.a=new MD(eFt,n,5)),n.a));r.e!=r.i.gc();)mN(i=uG(Zkn(r),377),i.a+t,i.b+e);yN(n,n.b+t,n.c+e)}function tSn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),Nmn(n.e,t,i);case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),Nmn(n.d,t,i)}return SCn(n,t,e,i)}function eSn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),Nyn(n.e,t,i);case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),Nyn(n.d,t,i)}return phn(n,t,e,i)}function iSn(n,t,e){var i,r,c;if(e)for(c=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);c.Ob();)(r=v6(e,uG(c.Pb(),17).a))&&iNn(n,r,t)}function rSn(n,t,e){var i,r,c;return n._j(),c=null==t?0:Hon(t),n.f>0&&(r=ZNn(n,(c&vZn)%n.d.length,c,t))?r.nd(e):(i=n.ck(c,t,e),n.c.Fc(i),null)}function cSn(n,t){var e,i,r,c;switch(tdn(n,t).Kl()){case 3:case 2:for(r=0,c=(e=hXn(t)).i;r<c;++r)if(5==sJ(Nen(n,i=uG(zrn(e,r),35))))return i}return null}function aSn(n){var t,e,i,r,c;if(aS(n.f,n.b.length))for(i=Inn($at,l1n,227,2*n.b.length,0,1),n.b=i,r=i.length-1,e=n.a;e!=n;e=e._d())t=(c=uG(e,227)).d&r,c.a=i[t],i[t]=c}function oSn(n){var t,e;return e=uG(oIn(n,(GYn(),Hpt)),21),t=aN(CSt),e.Hc((r_n(),cpt))&&gsn(t,ASt),e.Hc(opt)&&gsn(t,NSt),e.Hc(Ygt)&&gsn(t,ISt),e.Hc(npt)&&gsn(t,OSt),t}function uSn(n){if(n<0)throw hv(new vM("The input must be positive"));return n<ENt.length?W4(ENt[n]):e.Math.sqrt(f7n*n)*(pwn(n,n)/gwn(2.718281828459045,n))}function sSn(n,t){var e;if(n.Yi()&&null!=t){for(e=0;e<n.i;++e)if(udn(t,n.g[e]))return!0}else for(e=0;e<n.i;++e)if(xA(n.g[e])===xA(t))return!0;return!1}function hSn(n,t){if(null==t){for(;n.a.Ob();)if(null==uG(n.a.Pb(),44).md())return!0}else for(;n.a.Ob();)if(udn(t,uG(n.a.Pb(),44).md()))return!0;return!1}function fSn(n,t){var e;return t===n||!!F$(t,678)&&(e=uG(t,2046),Fvn(n.g||(n.g=new nb(n)),e.g||(e.g=new nb(e))))}function lSn(n){var t,i,r;for(t="gA",i="vz",r=e.Math.min(n.length,5)-1;r>=0;r--)if(m_(n[r].d,t)||m_(n[r].d,i)){n.length>=r+1&&n.splice(0,r+1);break}return n}function bSn(n,t){var i;return _L(n)&&_L(t)&&p0n<(i=n/t)&&i<d0n?i<0?e.Math.ceil(i):e.Math.floor(i):Esn(Yzn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t,!1))}function wSn(n,t){if(t==n.c.i)return n.d.i;if(t==n.d.i)return n.c.i;throw hv(new vM("'node' must either be the source node or target node of the edge."))}function dSn(n){var t,e,i,r;if(r=uG(oIn(n,(GYn(),Ipt)),36)){for(i=new sj,t=HQ(n.c.i);t!=r;)t=HQ(e=t.e),KR(JF(JF(i,e.n),t.c),t.d.b,t.d.d);return i}return Pbt}function gSn(n){var t;kS(sin(new fX(null,new h3((t=uG(oIn(n,(GYn(),vmt)),337)).d,16)),new Fi),new dg(n)),kS(JJ(new fX(null,new h3(t.d,16)),new _i),new pg(n))}function pSn(n,t){var e,i;for(e=new Fz(ix((t?Xgn(n):qgn(n)).a.Kc(),new h));hDn(e);)if((i=wSn(uG(N9(e),18),n)).k==(zIn(),wbt)&&i.c!=n.c)return i;return null}function mSn(n){var t,i,r;for(i=new Ww(n.p);i.a<i.c.c.length;)(t=uG(N3(i),10)).k==(zIn(),dbt)&&(r=t.o.b,n.i=e.Math.min(n.i,r),n.g=e.Math.max(n.g,r))}function vSn(n,t,e){var i,r,c;for(c=new Ww(t);c.a<c.c.c.length;)i=uG(N3(c),10),n.c[i.c.p][i.p].e=!1;for(r=new Ww(t);r.a<r.c.c.length;)nQn(n,i=uG(N3(r),10),e)}function kSn(n,t,i){var r,c;(r=Hwn(t.j,i.s,i.c)+Hwn(i.e,t.s,t.c))==(c=Hwn(i.j,t.s,t.c)+Hwn(t.e,i.s,i.c))?r>0&&(n.b+=2,n.a+=r):(n.b+=1,n.a+=e.Math.min(r,c))}function ySn(n){var t;t=uG(oIn(uG(hyn(n.b,0),39),(QGn(),pCt)),107),kfn(n,(OQn(),kPt),new MO(0,0)),rUn(new L7,n,t.b+t.c-uM(pK(oIn(n,PPt))),t.d+t.a-uM(pK(oIn(n,IPt))))}function MSn(n,t){var e;if(e=!1,RA(t)&&(e=!0,pQ(n,new QW(mK(t)))),e||F$(t,242)&&(e=!0,pQ(n,new Pb(Q_(uG(t,242))))),!e)throw hv(new pM(Cet))}function TSn(n,t,e,i){var r,c,a;return r=new Ken(n.e,1,10,F$(a=t.c,90)?uG(a,29):(YYn(),x_t),F$(c=e.c,90)?uG(c,29):(YYn(),x_t),Hyn(n,t),!1),i?i.nj(r):i=r,i}function jSn(n){var t,e;switch(uG(oIn(HQ(n),(jYn(),lMt)),429).g){case 0:return t=n.n,e=n.o,new MO(t.a+e.a/2,t.b+e.b/2);case 1:return new eN(n.n);default:return null}}function ESn(){ESn=E,Fgt=new rI(q4n,0),Kgt=new rI("LEFTUP",1),Bgt=new rI("RIGHTUP",2),Rgt=new rI("LEFTDOWN",3),_gt=new rI("RIGHTDOWN",4),xgt=new rI("BALANCED",5)}function SSn(n,t,e){var i,r,c;if(0==(i=ugn(n.a[t.p],n.a[e.p]))){if(r=uG(oIn(t,(GYn(),Vpt)),15),c=uG(oIn(e,Vpt),15),r.Hc(e))return-1;if(c.Hc(t))return 1}return i}function PSn(n){switch(n.g){case 1:return new So;case 2:return new Po;case 3:return new Eo;case 0:return null;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function CSn(n,t,e){switch(t){case 1:return!n.n&&(n.n=new fV(lFt,n,1,7)),Czn(n.n),!n.n&&(n.n=new fV(lFt,n,1,7)),void CW(n.n,uG(e,16));case 2:return void Gan(n,mK(e))}bln(n,t,e)}function ISn(n,t,e){switch(t){case 3:return void vcn(n,uM(pK(e)));case 4:return void kcn(n,uM(pK(e)));case 5:return void ycn(n,uM(pK(e)));case 6:return void Mcn(n,uM(pK(e)))}CSn(n,t,e)}function OSn(n,t,e){var i,r;(i=CCn(r=new ny,t,null))&&i.oj(),qon(r,e),ttn((!n.c&&(n.c=new fV(m_t,n,12,10)),n.c),r),Pcn(r,0),Ccn(r,1),mdn(r,!0),ddn(r,!0)}function ASn(n,t){var e,i;return F$(e=_P(n.i,t),241)?((i=uG(e,241)).zi(),i.wi()):F$(e,507)?i=uG(e,2037).b:null}function LSn(n,t,e,i){var r,c;return WW(t),WW(e),Ren(!!(c=uG(W_(n.d,t),17)),"Row %s not in %s",t,n.e),Ren(!!(r=uG(W_(n.b,e),17)),"Column %s not in %s",e,n.c),Hhn(n,c.a,r.a,i)}function NSn(n,t,e,i,r,c,a){var o,u,s,h,f;if(f=PTn(o=(s=c==a-1)?i:0,h=r[c]),10!=i&&Uhn(cT(n,a-c),t[c],e[c],o,f),!s)for(++c,u=0;u<h;++u)f[u]=NSn(n,t,e,i,r,c,a);return f}function $Sn(n){if(-1==n.g)throw hv(new xv);n.Xj();try{n.i.gd(n.g),n.f=n.i.j,n.g<n.e&&--n.e,n.g=-1}catch(t){throw F$(t=Ehn(t),77)?hv(new Fv):hv(t)}}function DSn(n){var t,e,i;for(i=-1,e=0,t=new Ww(n);t.a<t.c.c.length;){if(uG(N3(t),249).c==(can(),Vjt)){i=0==e?0:e-1;break}e==n.c.length-1&&(i=e),e+=1}return i}function xSn(n){var t,i,r,c;for(c=0,t=0,r=new Ww(n.c);r.a<r.c.c.length;)ycn(i=uG(N3(r),27),n.e+c),Mcn(i,n.f),c+=i.g+n.b,t=e.Math.max(t,i.f+n.b);n.d=c-n.b,n.a=t-n.b}function RSn(n){var t,e,i;for(e=new Ww(n.a.b);e.a<e.c.c.length;)i=(t=uG(N3(e),60)).d.c,t.d.c=t.d.d,t.d.d=i,i=t.d.b,t.d.b=t.d.a,t.d.a=i,i=t.b.a,t.b.a=t.b.b,t.b.b=i;hKn(n)}function KSn(n){var t,e,i;for(e=new Ww(n.a.b);e.a<e.c.c.length;)i=(t=uG(N3(e),86)).g.c,t.g.c=t.g.d,t.g.d=i,i=t.g.b,t.g.b=t.g.a,t.g.a=i,i=t.e.a,t.e.a=t.e.b,t.e.b=i;fKn(n)}function FSn(n){var t,e,i,r,c;for(c=kz(n.k),KQn(),i=0,r=(e=Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length;i<r;++i)if((t=e[i])!=FRt&&!c.Hc(t))return t;return null}function _Sn(n,t){var e,i;return(i=uG(Rx(lln(JJ(new fX(null,new h3(t.j,16)),new sc))),12))&&(e=uG(zq(i.e,0),18))?uG(oIn(e,(GYn(),imt)),17).a:Uen(n.b)}function BSn(n,t){var e,i,r;for(r=new Ww(t.a);r.a<r.c.c.length;)for(i=uG(N3(r),10),AM(n.d),e=new Fz(ix(Xgn(i).a.Kc(),new h));hDn(e);)B$n(n,i,uG(N9(e),18).d.i)}function HSn(n,t){var e,i;for(men(n.b,t),i=new Ww(n.n);i.a<i.c.c.length;)if(-1!=Ten((e=uG(N3(i),209)).c,t,0)){men(e.c,t),xSn(e),0==e.c.c.length&&men(n.n,e);break}EXn(n)}function USn(n,t){var i,r,c,a,o;for(o=n.f,c=0,a=0,r=new Ww(n.a);r.a<r.c.c.length;)oMn(i=uG(N3(r),172),n.e,o),dtn(i,t),a=e.Math.max(a,i.r),c=o+=i.d+n.c;n.d=a,n.b=c}function GSn(n){var t,e;return P6(e=tRn(n))?null:(WW(e),t=uG(KMn(new Fz(ix(e.a.Kc(),new h))),74),lCn(uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84)))}function qSn(n){return n.o||(n.uk()?n.o=new EQ(n,n,null):n.al()?n.o=new sF(n,null):1==sJ(Nen((gAn(),kBt),n))?n.o=new o8(n):n.o=new hF(n,null)),n.o}function XSn(n,t,e,i){var r,c,a,o,u;e.Xh(t)&&(r=(a=t)?uG(i,54).gi(a):null)&&(u=e.Mh(t),(o=t.t)>1||-1==o?(c=uG(u,15),r.Wb(Vpn(n,c))):r.Wb(uUn(n,uG(u,58))))}function zSn(n,t,e,i){kE();var r=hZn;function c(){for(var n=0;n<r.length;n++)r[n]()}if(n)try{sUt(c)()}catch(a){n(t,a)}else sUt(c)()}function VSn(n,t){var e,i,r;for(r=new Kw(new Lw(n.b).a.vc().Kc());r.a.Ob();)if(e=uG(r.a.Pb(),44),i=uG(e.ld(),34),NL(t,uG(i,17))<0)return!1;return!0}function WSn(n,t){var e,i,r;for(r=new Kw(new Lw(n.b).a.vc().Kc());r.a.Ob();)if(e=uG(r.a.Pb(),44),i=uG(e.ld(),34),NL(t,uG(i,17))>0)return!1;return!0}function QSn(n){var t,e,i,r,c;for(i=new bsn(new Nw(n.b).a);i.b;)t=uG((e=von(i)).ld(),10),c=uG(uG(e.md(),42).a,10),r=uG(uG(e.md(),42).b,8),JF(dL(t.n),JF(D$(c.n),r))}function JSn(n){switch(uG(oIn(n.b,(jYn(),Jyt)),387).g){case 1:kS(YJ(sin(new fX(null,new h3(n.d,16)),new Vr),new Wr),new Qr);break;case 2:gBn(n);break;case 0:mLn(n)}}function YSn(n,t,e){var i,r,c;for(!(i=e)&&(i=new fy),i.Ug("Layout",n.a.c.length),c=new Ww(n.a);c.a<c.c.c.length;){if(r=uG(N3(c),47),i.$g())return;r.Kf(t,i.eh(1))}i.Vg()}function ZSn(){ZSn=E,ZNt=new SO("V_TOP",0),YNt=new SO("V_CENTER",1),JNt=new SO("V_BOTTOM",2),WNt=new SO("H_LEFT",3),VNt=new SO("H_CENTER",4),QNt=new SO("H_RIGHT",5)}function nPn(n){var t;return 0!=(64&n.Db)?pmn(n):((t=new fx(pmn(n))).a+=" (abstract: ",Lj(t,0!=(256&n.Bb)),t.a+=", interface: ",Lj(t,0!=(512&n.Bb)),t.a+=")",t.a)}function tPn(n){var t;null==n.c&&(t=xA(n.b)===xA(Dat)?null:n.b,n.d=null==t?IZn:Pz(t)?ux(RY(t)):RA(t)?C1n:Ij(Tbn(t)),n.a=n.a+": "+(Pz(t)?EF(RY(t)):t+""),n.c="("+n.d+") "+n.a)}function ePn(){function n(){try{return(new Map).entries().next().done}catch(n){return!1}}return typeof Map===mZn&&Map.prototype.entries&&n()?Map:IQn()}function iPn(n,t){var e,i,r;for(r=new N4(n.e,0),e=0;r.b<r.d.gc();){if((i=uM((MK(r.b<r.d.gc()),pK(r.d.Xb(r.c=r.b++))))-t)>$9n)return e;i>-1e-6&&++e}return e}function rPn(n,t){var e;t!=n.b?(e=null,n.b&&(e=O1(n.b,n,-4,e)),t&&(e=kyn(t,n,-4,e)),(e=kwn(n,t,e))&&e.oj()):0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,3,t,t))}function cPn(n,t){var e;t!=n.f?(e=null,n.f&&(e=O1(n.f,n,-1,e)),t&&(e=kyn(t,n,-1,e)),(e=vwn(n,t,e))&&e.oj()):0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,0,t,t))}function aPn(n,t,e,i){var r,c,a;return uN(n.e)&&(a=VZ(n,1,r=t.Lk(),t.md(),c=e.md(),r.Jk()?Dqn(n,r,c,F$(r,102)&&0!=(uG(r,19).Bb&P0n)):-1,!0),i?i.nj(a):i=a),i}function oPn(n){var t,e,i;if(null==n)return null;if((e=uG(n,15)).dc())return"";for(i=new zM,t=e.Kc();t.Ob();)VA(i,(uVn(),mK(t.Pb()))),i.a+=" ";return CL(i,i.a.length-1)}function uPn(n){var t,e,i;if(null==n)return null;if((e=uG(n,15)).dc())return"";for(i=new zM,t=e.Kc();t.Ob();)VA(i,(uVn(),mK(t.Pb()))),i.a+=" ";return CL(i,i.a.length-1)}function sPn(n,t,e){var i,r;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?Rz(i.a,r.a):null!=i.a?-1:null!=r.a?1:0}function hPn(n,t,e){return e.Ug("Tree layout",1),_J(n.b),JV(n.b,(Cjn(),zSt),zSt),JV(n.b,VSt,VSt),JV(n.b,WSt,WSt),JV(n.b,QSt,QSt),n.a=Qzn(n.b,t),YSn(n,t,e.eh(1)),e.Vg(),t}function fPn(n,t){var e,i,r;if(t)for(r=((e=new Gz(t.a.length)).b-e.a)*e.c<0?(CP(),XHt):new xD(e);r.Ob();)i=v6(t,uG(r.Pb(),17).a),QJ(new om(n).a,i)}function lPn(n,t){var e,i,r;if(t)for(r=((e=new Gz(t.a.length)).b-e.a)*e.c<0?(CP(),XHt):new xD(e);r.Ob();)i=v6(t,uG(r.Pb(),17).a),WJ(new Yp(n).a,i)}function bPn(n){if(null!=n&&n.length>0&&33==VJ(n,n.length-1))try{return null==sxn(r1(n,0,n.length-1)).e}catch(t){if(!F$(t=Ehn(t),33))throw hv(t)}return!1}function wPn(n,t,e){var i,r;switch(i=pgn(HQ(t)),o2(r=new lOn,t),e.g){case 1:NLn(r,Gdn(Ipn(i)));break;case 2:NLn(r,Ipn(i))}return kfn(r,(jYn(),QMt),pK(oIn(n,QMt))),r}function dPn(n){var t,e;return t=uG(N9(new Fz(ix(qgn(n.a).a.Kc(),new h))),18),e=uG(N9(new Fz(ix(Xgn(n.a).a.Kc(),new h))),18),oM(gK(oIn(t,(GYn(),pmt))))||oM(gK(oIn(e,pmt)))}function gPn(){gPn=E,wdt=new zC("ONE_SIDE",0),gdt=new zC("TWO_SIDES_CORNER",1),pdt=new zC("TWO_SIDES_OPPOSING",2),ddt=new zC("THREE_SIDES",3),bdt=new zC("FOUR_SIDES",4)}function pPn(n,t){var e,i,r,c;for(c=new Zm,r=0,i=t.Kc();i.Ob();){for(e=xwn(uG(i.Pb(),17).a+r);e.a<n.f&&!SX(n,e.a);)e=xwn(e.a+1),++r;if(e.a>=n.f)break;mv(c.c,e)}return c}function mPn(n,t){var e,i,r;for(i=new Ww(t.a);i.a<i.c.c.length;)for(e=new Fz(ix(qgn(uG(N3(i),10)).a.Kc(),new h));hDn(e);)r=uG(N9(e),18).c.i.p,n.n[r]=n.n[r]-1}function vPn(n){var t;for(t=new Ww(n.e.b);t.a<t.c.c.length;)AWn(n,uG(N3(t),30));kS(JJ(sin(sin(new fX(null,new h3(n.e.b,16)),new qc),new Jc),new Yc),new dp(n))}function kPn(n,t){return!!t&&!n.mj(t)&&(n.i?n.i.nj(t):F$(t,152)?(n.i=uG(t,152),!0):(n.i=new bs,n.i.nj(t)))}function yPn(n,t,e){var i,r,c;return i=t.Lk(),c=t.md(),r=i.Jk()?VZ(n,3,i,null,c,Dqn(n,i,c,F$(i,102)&&0!=(uG(i,19).Bb&P0n)),!0):VZ(n,1,i,i.ik(),c,-1,!0),e?e.nj(r):e=r,e}function MPn(n){if(n=yXn(n,!0),m_(Fnt,n)||m_("1",n))return qx(),eot;if(m_(_nt,n)||m_("0",n))return qx(),tot;throw hv(new PM("Invalid boolean value: '"+n+"'"))}function TPn(n,t,e){var i,r,c;for(r=n.vc().Kc();r.Ob();)if(c=(i=uG(r.Pb(),44)).ld(),xA(t)===xA(c)||null!=t&&udn(t,c))return e&&(i=new VP(i.ld(),i.md()),r.Qb()),i;return null}function jPn(n){var t,e,i;VK(),n.B.Hc((oUn(),tKt))&&(i=n.f.i,t=new qZ(n.a.c),(e=new Dk).b=t.c-i.c,e.d=t.d-i.d,e.c=i.c+i.b-(t.c+t.b),e.a=i.d+i.a-(t.d+t.a),n.e.$f(e))}function EPn(n,t,i,r){var c,a,o;for(o=e.Math.min(i,uqn(uG(n.b,68),t,i,r)),a=new Ww(n.a);a.a<a.c.c.length;)(c=uG(N3(a),225))!=t&&(o=e.Math.min(o,EPn(c,t,o,r)));return o}function SPn(n){var t,e,i;for(i=Inn(pbt,zZn,199,n.b.c.length,0,2),e=new N4(n.b,0);e.b<e.d.gc();)MK(e.b<e.d.gc()),t=uG(e.d.Xb(e.c=e.b++),30),i[e.b-1]=D4(t.a);return i}function PPn(n,t,e){var i,r;null!=(i=uG(ain(n.a,e),34))&&Wpn(uG(ain(n.b,i),67),e,!0),(r=uG(ain(n.b,t),67))||(r=new lS,Akn(n.b,t,r)),s8(r,e,r.c.b,r.c),Akn(n.a,e,t)}function CPn(n,t,e,i,r){var c,a,o,u;for(a=jT(TT(BB(Ryn(e)),i),Ujn(n,e,r)),u=yOn(n,e).Kc();u.Ob();)t[(o=uG(u.Pb(),12)).p]&&(c=t[o.p].i,kD(a.d,new ZX(c,Hdn(a,c))));cmn(a)}function IPn(n,t){this.f=new Ym,this.b=new Ym,this.j=new Ym,this.a=n,this.c=t,this.c>0&&Mjn(this,this.c-1,(KQn(),kRt)),this.c<this.a.length-1&&Mjn(this,this.c+1,(KQn(),_Rt))}function OPn(n,t){var e,i,r,c;for(r=new Ww(t.d);r.a<r.c.c.length;)for(i=uG(N3(r),105),c=uG(cQ(n.c,i),118).o,e=new fS(i.b);e.a<e.c.a.length;)ctn(i,uG(X5(e),64),c)}function APn(n){n.length>0&&n[0].length>0&&(this.c=oM(gK(oIn(HQ(n[0][0]),(GYn(),Wpt))))),this.a=Inn(REt,zZn,2117,n.length,0,2),this.b=Inn(UEt,zZn,2118,n.length,0,2),this.d=new zbn}function LPn(n){return 0!=n.c.length&&((u3(0,n.c.length),uG(n.c[0],18)).c.i.k==(zIn(),wbt)||o9(YJ(new fX(null,new h3(n,16)),new xc),new Rc))}function NPn(n,t){var i,r,c,a,o,u;for(o=GFn(t),c=t.f,u=t.g,a=e.Math.sqrt(c*c+u*u),r=0,i=new Ww(o);i.a<i.c.c.length;)r+=NPn(n,uG(N3(i),27));return e.Math.max(r,a)}function $Pn(){$Pn=E,sRt=new DO(Y2n,0),uRt=new DO("FREE",1),oRt=new DO("FIXED_SIDE",2),rRt=new DO("FIXED_ORDER",3),aRt=new DO("FIXED_RATIO",4),cRt=new DO("FIXED_POS",5)}function DPn(n,t){var e,i,r;if(e=t.qi(n.a))for(r=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),hct)),i=1;i<(gAn(),yBt).length;++i)if(m_(yBt[i],r))return i;return 0}function xPn(n){var t,e,i,r;if(null==n)return IZn;for(r=new Ysn(TZn,"[","]"),e=0,i=(t=n).length;e<i;++e)o7(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function RPn(n){var t,e,i,r;if(null==n)return IZn;for(r=new Ysn(TZn,"[","]"),e=0,i=(t=n).length;e<i;++e)o7(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function KPn(n){var t,e,i;for(i=new Ysn(TZn,"{","}"),e=n.vc().Kc();e.Ob();)o7(i,E5(n,(t=uG(e.Pb(),44)).ld())+"="+E5(n,t.md()));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function FPn(n){for(var t,e,i,r;!LM(n.o);)e=uG(xV(n.o),42),i=uG(e.a,125),r=hpn(t=uG(e.b,218),i),t.e==i?(Sx(r.g,t),i.e=r.e+t.a):(Sx(r.b,t),i.e=r.e-t.a),kD(n.e.a,i)}function _Pn(n,t){var e,i,r;for(e=null,r=uG(t.Kb(n),20).Kc();r.Ob();)if(i=uG(r.Pb(),18),e){if((i.c.i==n?i.d.i:i.c.i)!=e)return!1}else e=i.c.i==n?i.d.i:i.c.i;return!0}function BPn(n,t){var e,i,r;for(i=new Ww(sRn(n,!1,t));i.a<i.c.c.length;)0==(e=uG(N3(i),132)).d?(s2(e,null),h2(e,null)):(r=e.a,s2(e,e.b),h2(e,r))}function HPn(n){var t,e;return gsn(t=new wJ,KSt),(e=uG(oIn(n,(GYn(),Hpt)),21)).Hc((r_n(),opt))&&gsn(t,HSt),e.Hc(Ygt)&&gsn(t,FSt),e.Hc(cpt)&&gsn(t,BSt),e.Hc(npt)&&gsn(t,_St),t}function UPn(n,t,e){var i,r,c,a;for(String.fromCharCode(10),Lpn(n),null==n.k&&(n.k=Inn(xat,zZn,82,0,0,1)),r=0,c=(i=n.k).length;r<c;++r)UPn(i[r],t,"\t"+e);(a=n.f)&&UPn(a,t,e)}function GPn(n){var t,e,i,r;for(Wzn(n),e=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(e);)r=(i=(t=uG(N9(e),18)).c.i==n)?t.d:t.c,i?u2(t,null):c2(t,null),kfn(t,(GYn(),umt),r),nDn(n,r.i)}function qPn(n,t,e,i){var r,c;switch(r=e[(c=t.i).g][n.d[c.g]],c.g){case 1:r-=i+t.j.b,t.g.b=r;break;case 3:r+=i,t.g.b=r;break;case 4:r-=i+t.j.a,t.g.a=r;break;case 2:r+=i,t.g.a=r}}function XPn(n){var t,e;for(e=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));e.e!=e.i.gc();)if(!hDn(new Fz(ix(tRn(t=uG(Zkn(e),27)).a.Kc(),new h))))return t;return null}function zPn(){zPn=E,tIt=new ZI("OVERLAP_REMOVAL",0),YCt=new ZI(g7n,1),eIt=new ZI("ROTATION",2),ZCt=new ZI("GRAPH_SIZE_CALCULATION",3),nIt=new ZI("OUTGOING_EDGE_ANGLES",4)}function VPn(){var n;return dFt?uG(jxn((MP(),l_t),aet),2115):(n=uG(F$(U1((MP(),l_t),aet),569)?U1(l_t,aet):new iDn,569),dFt=!0,iWn(n),cZn(n),ojn(n),r2(l_t,aet,n),n)}function WPn(n,t,e){var i,r;if(0==n.j)return e;if(r=uG(Dcn(n,t,e),76),!(i=e.Lk()).rk()||!n.a.am(i))throw hv(new Ky("Invalid entry feature '"+i.qk().zb+"."+i.xe()+"'"));return r}function QPn(n,t){var e,i,r,c,a,o,u;for(o=0,u=(a=n.a).length;o<u;++o)for(r=0,c=(i=a[o]).length;r<c;++r)if(e=i[r],xA(t)===xA(e)||null!=t&&udn(t,e))return!0;return!1}function JPn(n){var t,e,i;return dwn(n,0)>=0?(e=bSn(n,g0n),i=Kmn(n,g0n)):(e=bSn(t=Dz(n,1),5e8),i=Lgn(Nz(i=Kmn(t,5e8),1),E3(n,1))),S3(Nz(i,32),E3(e,L0n))}function YPn(n,t,e){var i;switch(MK(0!=t.b),i=uG(Lrn(t,t.a.a),8),e.g){case 0:i.b=0;break;case 2:i.b=n.f;break;case 3:i.a=0;break;default:i.a=n.g}return lW(Fkn(t,0),i),t}function ZPn(n,t,e,i){var r,c,a,o,u;switch(u=n.b,o=ykn(a=(c=t.d).j,u.d[a.g],e),r=JF(D$(c.n),c.a),c.j.g){case 1:case 3:o.a+=r.a;break;case 2:case 4:o.b+=r.b}s8(i,o,i.c.b,i.c)}function nCn(n,t,e){var i,r,c,a;for(a=Ten(n.e,t,0),(c=new Tk).b=e,i=new N4(n.e,a);i.b<i.d.gc();)MK(i.b<i.d.gc()),(r=uG(i.d.Xb(i.c=i.b++),10)).p=e,kD(c.e,r),LQ(i);return c}function tCn(n,t,e,i){var r,c,a,o,u;for(r=null,c=0,o=new Ww(t);o.a<o.c.c.length;)u=(a=uG(N3(o),27)).i+a.g,n<a.j+a.f+i&&(r?e.i-u<e.i-c&&(r=a):r=a,c=r.i+r.g);return r?c+i:0}function eCn(n,t,e,i){var r,c,a,o,u;for(c=null,r=0,o=new Ww(t);o.a<o.c.c.length;)u=(a=uG(N3(o),27)).j+a.f,n<a.i+a.g+i&&(c?e.j-u<e.j-r&&(c=a):c=a,r=c.j+c.f);return c?r+i:0}function iCn(n){var t,e,i;for(t=!1,i=n.b.c.length,e=0;e<i;e++)Jfn(uG(zq(n.b,e),443))?!t&&e+1<i&&Jfn(uG(zq(n.b,e+1),443))&&(t=!0,uG(zq(n.b,e),443).a=!0):t=!1}function rCn(n,t,e,i,r){var c,a;for(c=0,a=0;a<r;a++)c=Lgn(c,$gn(E3(t[a],L0n),E3(i[a],L0n))),n[a]=pz(c),c=$z(c,32);for(;a<e;a++)c=Lgn(c,E3(t[a],L0n)),n[a]=pz(c),c=$z(c,32)}function cCn(n,t){var e,i;for(b_n(),cHn(),i=xot,e=n;t>1;t>>=1)0!=(1&t)&&(i=j5(i,e)),e=1==e.d?j5(e,e):new nkn(_Un(e.a,e.d,Inn(YHt,W1n,28,e.d<<1,15,1)));return i=j5(i,e)}function aCn(){var n,t,e,i;for(aCn=E,but=Inn(eUt,I0n,28,25,15,1),wut=Inn(eUt,I0n,28,33,15,1),i=152587890625e-16,t=32;t>=0;t--)wut[t]=i,i*=.5;for(e=1,n=24;n>=0;n--)but[n]=e,e*=.5}function oCn(n){var t,e;if(oM(gK(zDn(n,(jYn(),sMt)))))for(e=new Fz(ix(eRn(n).a.Kc(),new h));hDn(e);)if(BNn(t=uG(N9(e),74))&&oM(gK(zDn(t,hMt))))return!0;return!1}function uCn(n,t){var e,i,r;FV(n.f,t)&&(t.b=n,i=t.c,-1!=Ten(n.j,i,0)||kD(n.j,i),r=t.d,-1!=Ten(n.j,r,0)||kD(n.j,r),0!=(e=t.a.b).c.length&&(!n.i&&(n.i=new vkn(n)),Psn(n.i,e)))}function sCn(n){var t,e,i,r;return(e=(t=n.c.d).j)==(r=(i=n.d.d).j)?t.p<i.p?0:1:qdn(e)==r?0:Udn(e)==r?1:$x(n.b.b,qdn(e))?0:1}function hCn(n){var t;this.d=new Ym,this.c=n.c,this.e=n.d,this.b=n.b,this.f=new LX(n.e),this.a=n.a,n.f?this.g=n.f:this.g=new nB(t=uG(Mj(PFt),9),uG(MF(t,t.length),9),0)}function fCn(n,t){var e,i,r,c;!(r=m6(i=n,"layoutOptions"))&&(r=m6(i,het)),r&&(e=null,(c=r)&&(e=new JE(c,Yon(c,Inn($ot,zZn,2,0,6,1)))),e&&z8(e,new rA(c,t)))}function lCn(n){if(F$(n,207))return uG(n,27);if(F$(n,193))return h0(uG(n,123));throw hv(n?new TM("Only support nodes and ports."):new MM(Het))}function bCn(n,t,e,i){return t>=0&&m_(n.substr(t,3),"GMT")||t>=0&&m_(n.substr(t,3),"UTC")?(e[0]=t+3,PUn(n,e,i)):PUn(n,e,i)}function wCn(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Ww(n.d);i.a<i.c.c.length;)(r=(e=uG(N3(i),72)).n).a=c,n.i==(KQn(),yRt)?r.b=a+n.j.b-e.o.b:r.b=a,JF(r,t),c+=e.o.a+n.e}function dCn(n,t,e){if(n.b)throw hv(new kM("The task is already done."));return null==n.p&&(n.p=t,n.r=e,n.k&&(n.o=(bS(),Ngn(Bsn(Date.now()),$1n))),!0)}function gCn(n){var t;return t=new _y,null!=n.Pg()&&ZG(t,Iet,n.Pg()),null!=n.xe()&&ZG(t,Bet,n.xe()),null!=n.Og()&&ZG(t,"description",n.Og()),t}function pCn(n,t,e){var i,r,c;return c=n.q,n.q=t,0!=(4&n.Db)&&0==(1&n.Db)&&(r=new lV(n,1,9,c,t),e?e.nj(r):e=r),t?(i=t.c)!=n.r&&(e=n.Yk(i,e)):n.r&&(e=n.Yk(null,e)),e}function mCn(n,t,e){var i,r;for(e=kyn(t,n.e,-1-n.c,e),r=new Gm(new bsn(new Nw(uJ(n.a).a).a));r.a.b;)e=PWn(i=uG(von(r.a).ld(),89),bRn(i,n.a),e);return e}function vCn(n,t,e){var i,r;for(e=O1(t,n.e,-1-n.c,e),r=new Gm(new bsn(new Nw(uJ(n.a).a).a));r.a.b;)e=PWn(i=uG(von(r.a).ld(),89),bRn(i,n.a),e);return e}function kCn(n,t,e,i){var r,c,a;if(0==i)qGn(t,0,n,e,n.length-e);else for(a=32-i,n[n.length-1]=0,c=n.length-1;c>e;c--)n[c]|=t[c-e-1]>>>a,n[c-1]=t[c-e-1]<<i;for(r=0;r<e;r++)n[r]=0}function yCn(n){var t,i,r,c,a;for(t=0,i=0,a=n.Kc();a.Ob();)r=uG(a.Pb(),117),t=e.Math.max(t,r.d.b),i=e.Math.max(i,r.d.c);for(c=n.Kc();c.Ob();)(r=uG(c.Pb(),117)).d.b=t,r.d.c=i}function MCn(n){var t,i,r,c,a;for(i=0,t=0,a=n.Kc();a.Ob();)r=uG(a.Pb(),117),i=e.Math.max(i,r.d.d),t=e.Math.max(t,r.d.a);for(c=n.Kc();c.Ob();)(r=uG(c.Pb(),117)).d.d=i,r.d.a=t}function TCn(n,t,e,i,r){var c,a;_An(c=uG(l8(JJ(t.Oc(),new _r),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)),a=uG(ssn(n.b,e,i),15),0==r?a.cd(0,c):a.Gc(c)}function jCn(n,t,e){e.Ug("Grow Tree",1),n.b=t.f,oM(gK(oIn(t,(rsn(),Oht))))?(n.c=new et,f2(n,null)):n.c=new et,n.a=!1,AKn(n,t.f),kfn(t,Aht,(qx(),!!n.a)),e.Vg()}function ECn(n){var t,e,i,r;for(t=null,r=new Ww(n.Rf());r.a<r.c.c.length;)e=new gY((i=uG(N3(r),187)).Lf().a,i.Lf().b,i.Mf().a,i.Mf().b),t?bAn(t,e):t=e;return!t&&(t=new cN),t}function SCn(n,t,e,i){return 1==e?(!n.n&&(n.n=new fV(lFt,n,1,7)),Nmn(n.n,t,i)):uG(ern(uG(Lsn(n,16),29)||n.ii(),e),69).wk().zk(n,$vn(n),e-iQ(n.ii()),t,i)}function PCn(n,t,e){var i,r,c,a,o;for(i=e.gc(),n._i(n.i+i),(o=n.i-t)>0&&qGn(n.g,t,n.g,t+i,o),a=e.Kc(),n.i+=i,r=0;r<i;++r)c=a.Pb(),yD(n,t,n.Zi(t,c)),n.Mi(t,c),n.Ni(),++t;return 0!=i}function CCn(n,t,e){var i;return t!=n.q?(n.q&&(e=O1(n.q,n,-10,e)),t&&(e=kyn(t,n,-10,e)),e=pCn(n,t,e)):0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,9,t,t),e?e.nj(i):e=i),e}function ICn(n,t,e,i){return CB(0==(e&VZn),"flatMap does not support SUBSIZED characteristic"),CB(0==(4&e),"flatMap does not support SORTED characteristic"),WW(n),WW(t),new T6(n,t,e,i)}function OCn(n,t){aW(t,"Cannot suppress a null exception."),vG(t!=n,"Exception can not suppress itself."),n.i||(null==n.k?n.k=Uhn(cT(xat,1),zZn,82,0,[t]):n.k[n.k.length]=t)}function ACn(n,t){var e;if(0!=(e=UL(n.b.ag(),t.b.ag())))return e;switch(n.b.ag().g){case 1:case 2:return d$(n.b.Nf(),t.b.Nf());case 3:case 4:return d$(t.b.Nf(),n.b.Nf())}return 0}function LCn(n){var t,e,i;for(i=n.e.c.length,n.a=Jq(YHt,[zZn,W1n],[53,28],15,[i,i],2),e=new Ww(n.c);e.a<e.c.c.length;)t=uG(N3(e),289),n.a[t.c.a][t.d.a]+=uG(oIn(t,(cGn(),$ft)),17).a}function NCn(n,t){var e,i,r,c,a;if(null==n)return null;for(a=Inn(JHt,N1n,28,2*t,15,1),i=0,r=0;i<t;++i)e=n[i]>>4&15,c=15&n[i],a[r++]=JKt[e],a[r++]=JKt[c];return mvn(a,0,a.length)}function $Cn(n){var t,e;return n>=P0n?(t=C0n+(n-P0n>>10&1023)&D1n,e=56320+(n-P0n&1023)&D1n,String.fromCharCode(t)+""+String.fromCharCode(e)):String.fromCharCode(n&D1n)}function DCn(n,t){var e,i,r,c;return VK(),(r=uG(uG(Y9(n.r,t),21),87)).gc()>=2&&(i=uG(r.Kc().Pb(),117),e=n.u.Hc((eNn(),bRt)),c=n.u.Hc(pRt),!i.a&&!e&&(2==r.gc()||c))}function xCn(n,t,e,i,r){var c,a,o;for(c=zFn(n,t,e,i,r),o=!1;!c;)gxn(n,r,!0),o=!0,c=zFn(n,t,e,i,r);o&&gxn(n,r,!1),0!=(a=Jhn(r)).c.length&&(n.d&&n.d.Gg(a),xCn(n,r,e,i,a))}function RCn(){RCn=E,mxt=new OO(q4n,0),gxt=new OO("DIRECTED",1),vxt=new OO("UNDIRECTED",2),wxt=new OO("ASSOCIATION",3),pxt=new OO("GENERALIZATION",4),dxt=new OO("DEPENDENCY",5)}function KCn(n,t){var e;if(!h0(n))throw hv(new kM(Stt));switch(e=h0(n),t.g){case 1:return-(n.j+n.f);case 2:return n.i-e.g;case 3:return n.j-e.f;case 4:return-(n.i+n.g)}return 0}function FCn(n,t,e){var i,r,c;return i=t.Lk(),c=t.md(),r=i.Jk()?VZ(n,4,i,c,null,Dqn(n,i,c,F$(i,102)&&0!=(uG(i,19).Bb&P0n)),!0):VZ(n,i.tk()?2:1,i,c,i.ik(),-1,!0),e?e.nj(r):e=r,e}function _Cn(n,t){var e,i;for(tJ(t),i=n.b.c.length,kD(n.b,t);i>0;){if(e=i,i=(i-1)/2|0,n.a.Ne(zq(n.b,i),t)<=0)return Y8(n.b,e,t),!0;Y8(n.b,e,zq(n.b,i))}return Y8(n.b,i,t),!0}function BCn(n,t,i,r){var c,a;if(c=0,i)c=$bn(n.a[i.g][t.g],r);else for(a=0;a<$st;a++)c=e.Math.max(c,$bn(n.a[a][t.g],r));return t==(Yrn(),Est)&&n.b&&(c=e.Math.max(c,n.b.a)),c}function HCn(n,t){var e,i,r,c,a;return i=n.i,r=t.i,!(!i||!r)&&i.i==r.i&&i.i!=(KQn(),kRt)&&i.i!=(KQn(),_Rt)&&(e=(c=i.g.a)+i.j.a,c<=(a=r.g.a)+r.j.a&&e>=a)}function UCn(n){switch(n.g){case 0:return new Uo;case 1:return new qo;default:throw hv(new vM("No implementation is available for the width approximator "+(null!=n.f?n.f:""+n.g)))}}function GCn(n,t,e,i){var r;if(r=!1,RA(i)&&(r=!0,ZG(t,e,mK(i))),r||KA(i)&&(r=!0,GCn(n,t,e,i)),r||F$(i,242)&&(r=!0,vZ(t,e,uG(i,242))),!r)throw hv(new pM(Cet))}function qCn(n,t){var e,i,r;if((e=t.qi(n.a))&&null!=(r=Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Srt)))for(i=1;i<(gAn(),mBt).length;++i)if(m_(mBt[i],r))return i;return 0}function XCn(n,t){var e,i,r;if((e=t.qi(n.a))&&null!=(r=Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Srt)))for(i=1;i<(gAn(),vBt).length;++i)if(m_(vBt[i],r))return i;return 0}function zCn(n,t){var e,i,r,c;if(tJ(t),(c=n.a.gc())<t.gc())for(e=n.a.ec().Kc();e.Ob();)i=e.Pb(),t.Hc(i)&&e.Qb();else for(r=t.Kc();r.Ob();)i=r.Pb(),n.a.Bc(i);return c!=n.a.gc()}function VCn(n){var t,e;switch(e=D$(Gfn(Uhn(cT(PNt,1),zZn,8,0,[n.i.n,n.n,n.a]))),t=n.i.d,n.j.g){case 1:e.b-=t.d;break;case 2:e.a+=t.c;break;case 3:e.b+=t.a;break;case 4:e.a-=t.b}return e}function WCn(n){var t;for(Pun(),t=uG(N9(new Fz(ix(qgn(n).a.Kc(),new h))),18).c.i;t.k==(zIn(),wbt);)kfn(t,(GYn(),Jpt),(qx(),!0)),t=uG(N9(new Fz(ix(qgn(t).a.Kc(),new h))),18).c.i}function QCn(n,t,e,i){var r,c,a;for(a=Vwn(t,i).Kc();a.Ob();)r=uG(a.Pb(),12),n.d[r.p]=n.d[r.p]+n.c[e.p];for(c=Vwn(e,i).Kc();c.Ob();)r=uG(c.Pb(),12),n.d[r.p]=n.d[r.p]-n.c[t.p]}function JCn(n,t,e){var i,r;for(r=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));r.e!=r.i.gc();)kN(i=uG(Zkn(r),27),i.i+t,i.j+e);z8((!n.b&&(n.b=new fV(aFt,n,12,3)),n.b),new XO(t,e))}function YCn(n,t,e,i){var r,c;for(r=null==(c=t).d||n.a.Ne(e.d,c.d)>0?1:0;c.a[r]!=e;)c=c.a[r],r=n.a.Ne(e.d,c.d)>0?1:0;c.a[r]=i,i.b=e.b,i.a[0]=e.a[0],i.a[1]=e.a[1],e.a[0]=null,e.a[1]=null}function ZCn(n){var t,e,i,r;for(t=new Zm,zV(e=Inn(ZHt,B2n,28,n.a.c.length,16,1),e.length),r=new Ww(n.a);r.a<r.c.c.length;)e[(i=uG(N3(r),125)).d]||(mv(t.c,i),Okn(n,i,e));return t}function nIn(n,t){var e,i,r,c;for(i=(1==t?$lt:Nlt).a.ec().Kc();i.Ob();)for(e=uG(i.Pb(),88),c=uG(Y9(n.f.c,e),21).Kc();c.Ob();)r=uG(c.Pb(),42),men(n.b.b,r.b),men(n.b.a,uG(r.b,86).d)}function tIn(n,t){var e;t.Ug("Hierarchical port position processing",1),(e=n.b).c.length>0&&lUn((u3(0,e.c.length),uG(e.c[0],30)),n),e.c.length>1&&lUn(uG(zq(e,e.c.length-1),30),n),t.Vg()}function eIn(n){return eNn(),!(qsn(X1(WX(wRt,Uhn(cT(BRt,1),p1n,279,0,[gRt])),n))>1||qsn(X1(WX(bRt,Uhn(cT(BRt,1),p1n,279,0,[lRt,pRt])),n))>1)}function iIn(n,t){F$(U1((MP(),l_t),n),507)?r2(l_t,n,new EA(this,t)):r2(l_t,n,this),HIn(this,t),t==(vj(),y_t)?(this.wb=uG(this,2038),uG(t,2040)):this.wb=(tQ(),M_t)}function rIn(n){var t,e;if(null==n)return null;for(t=null,e=0;e<QKt.length;++e)try{return dP(QKt[e],n)}catch(i){if(!F$(i=Ehn(i),33))throw hv(i);t=i}throw hv(new Pen(t))}function cIn(){cIn=E,nut=Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),tut=Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])}function aIn(n){var t,e,i;(t=m_(typeof t,r2n)?null:new fn)&&(pS(),mQ(e=(i=900)>=$1n?"error":i>=900?"warn":i>=800?"info":"log",n.a),n.b&&SKn(t,e,n.b,"Exception: ",!0))}function oIn(n,t){var e,i;return!n.q&&(n.q=new Ym),null!=(i=cQ(n.q,t))?i:(F$(e=t.Sg(),4)&&(null==e?(!n.q&&(n.q=new Ym),u7(n.q,t)):(!n.q&&(n.q=new Ym),vJ(n.q,t,e))),e)}function uIn(){uIn=E,Tlt=new gC("P1_CYCLE_BREAKING",0),jlt=new gC("P2_LAYERING",1),Elt=new gC("P3_NODE_ORDERING",2),Slt=new gC("P4_NODE_PLACEMENT",3),Plt=new gC("P5_EDGE_ROUTING",4)}function sIn(n,t){var e;if(Win(),n.c==t.c){if(n.b==t.b||eun(n.b,t.b)){if(e=BL(n.b)?1:-1,n.a&&!t.a)return e;if(!n.a&&t.a)return-e}return d$(n.b.g,t.b.g)}return ugn(n.c,t.c)}function hIn(n,t){var e,i;if(kIn(n,t))return!0;for(i=new Ww(t);i.a<i.c.c.length;){if(p_n(n,e=uG(N3(i),27),GSn(e)))return!0;if(Zbn(n,e)-n.g<=n.a)return!0}return!1}function fIn(){fIn=E,uBn(),yLt=RLt,mLt=NLt,pLt=ALt,dLt=PLt,gLt=ILt,wLt=new CN(8),bLt=new _N((XYn(),W$t),wLt),vLt=new _N(DDt,8),kLt=DLt,hLt=MLt,fLt=jLt,lLt=new _N(w$t,(qx(),!1))}function lIn(){lIn=E,qNt=new CN(15),GNt=new _N((XYn(),W$t),qNt),zNt=new _N(DDt,15),XNt=new _N(vDt,xwn(0)),FNt=j$t,BNt=_$t,UNt=q$t,xNt=new _N(c$t,Gnt),_Nt=O$t,HNt=U$t,RNt=o$t,KNt=l$t}function bIn(n){if(1!=(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new vM(Get));return lCn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84))}function wIn(n){if(1!=(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new vM(Get));return Shn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84))}function dIn(n){if(1!=(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new vM(Get));return Shn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))}function gIn(n){if(1!=(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new vM(Get));return lCn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))}function pIn(n,t,e){var i,r,c;if(++n.j,t>=(r=n.Ej())||t<0)throw hv(new dM(zet+t+Vet+r));if(e>=r||e<0)throw hv(new dM(Wet+e+Vet+r));return t!=e?(c=n.Cj(e),n.qj(t,c),i=c):i=n.xj(e),i}function mIn(n){var t,e,i;if(i=n,n)for(t=0,e=n.Eh();e;e=e.Eh()){if(++t>O0n)return mIn(e);if(i=e,e==n)throw hv(new kM("There is a cycle in the containment hierarchy of "+n))}return i}function vIn(n){var t,e,i;for(i=new Ysn(TZn,"[","]"),e=n.Kc();e.Ob();)o7(i,xA(t=e.Pb())===xA(n)?"(this Collection)":null==t?IZn:cpn(t));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function kIn(n,t){var e,i;if(i=!1,t.gc()<2)return!1;for(e=0;e<t.gc();e++)e<t.gc()-1?i|=p_n(n,uG(t.Xb(e),27),uG(t.Xb(e+1),27)):i|=p_n(n,uG(t.Xb(e),27),uG(t.Xb(0),27));return i}function yIn(n,t){var e;t!=n.a?(e=null,n.a&&(e=uG(n.a,54).Th(n,4,fFt,e)),t&&(e=uG(t,54).Rh(n,4,fFt,e)),(e=ywn(n,t,e))&&e.oj()):0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,1,t,t))}function MIn(n,t){var e;t!=n.e?(n.e&&C7(uJ(n.e),n),t&&(!t.b&&(t.b=new Um(new ty)),WF(t.b,n)),(e=$En(n,t,null))&&e.oj()):0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,4,t,t))}function TIn(n,t){var i;i=t.o,hN(n.f)?(n.j.a=e.Math.max(n.j.a,i.a),n.j.b+=i.b,n.d.c.length>1&&(n.j.b+=n.e)):(n.j.a+=i.a,n.j.b=e.Math.max(n.j.b,i.b),n.d.c.length>1&&(n.j.a+=n.e))}function jIn(){jIn=E,ydt=Uhn(cT(YRt,1),z4n,64,0,[(KQn(),yRt),kRt,KRt]),kdt=Uhn(cT(YRt,1),z4n,64,0,[kRt,KRt,_Rt]),Mdt=Uhn(cT(YRt,1),z4n,64,0,[KRt,_Rt,yRt]),Tdt=Uhn(cT(YRt,1),z4n,64,0,[_Rt,yRt,kRt])}function EIn(n,t,e,i){var r,c,a,o,u;if(c=n.c.d,a=n.d.d,c.j!=a.j)for(u=n.b,r=c.j,o=null;r!=a.j;)o=0==t?qdn(r):Udn(r),aq(i,JF(ykn(r,u.d[r.g],e),ykn(o,u.d[o.g],e))),r=o}function SIn(n,t,e,i){var r,c,a,o,u;return o=uG((a=Sjn(n.a,t,e)).a,17).a,c=uG(a.b,17).a,i&&(u=uG(oIn(t,(GYn(),lmt)),10),r=uG(oIn(e,lmt),10),u&&r&&(C5(n.b,u,r),o+=n.b.i,c+=n.b.e)),o>c}function PIn(n){var t,e,i,r,c,a,o,u;for(this.a=Fyn(n),this.b=new Zm,i=0,r=(e=n).length;i<r;++i)for(t=e[i],c=new Zm,kD(this.b,c),o=0,u=(a=t).length;o<u;++o)kD(c,new Z_(a[o].j))}function CIn(n,t,e){var i,r,c;return c=0,i=e[t],t<e.length-1&&(r=e[t+1],n.b[t]?(c=WYn(n.d,i,r),c+=kQ(n.a,i,(KQn(),kRt)),c+=kQ(n.a,r,_Rt)):c=ktn(n.a,i,r)),n.c[t]&&(c+=k7(n.a,i)),c}function IIn(n,t,e,i,r){var c,a,o,u;for(u=null,o=new Ww(i);o.a<o.c.c.length;)if((a=uG(N3(o),452))!=e&&-1!=Ten(a.e,r,0)){u=a;break}c2(c=K9(r),e.b),u2(c,u.b),UNn(n.a,r,new $B(c,t,e.f))}function OIn(n){var t,i,r,c;if(fN(uG(oIn(n.b,(jYn(),Byt)),88)))return 0;for(t=0,r=new Ww(n.a);r.a<r.c.c.length;)(i=uG(N3(r),10)).k==(zIn(),dbt)&&(c=i.o.a,t=e.Math.max(t,c));return t}function AIn(n){for(;0!=n.g.c&&0!=n.d.c;)GK(n.g).c>GK(n.d).c?(n.i+=n.g.c,Bmn(n.d)):GK(n.d).c>GK(n.g).c?(n.e+=n.d.c,Bmn(n.g)):(n.i+=TX(n.g),n.e+=TX(n.d),Bmn(n.g),Bmn(n.d))}function LIn(n,t,e){var i,r,c,a;for(c=t.q,a=t.r,new A2((_7(),$St),t,c,1),new A2($St,c,a,1),r=new Ww(e);r.a<r.c.c.length;)(i=uG(N3(r),118))!=c&&i!=t&&i!=a&&(OXn(n.a,i,t),OXn(n.a,i,a))}function NIn(n,t,i,r){n.a.d=e.Math.min(t,i),n.a.a=e.Math.max(t,r)-n.a.d,t<i?(n.b=.5*(t+i),n.g=x9n*n.b+.9*t,n.f=x9n*n.b+.9*i):(n.b=.5*(t+r),n.g=x9n*n.b+.9*r,n.f=x9n*n.b+.9*t)}function $In(n){var t,e,i,r;if(0!=n.b){for(t=new lS,r=Fkn(n,0);r.b!=r.d.c;)Qon(t,Lhn(i=uG(I6(r),39))),(e=i.e).a=uG(oIn(i,(OQn(),GPt)),17).a,e.b=uG(oIn(i,qPt),17).a;return t}return new lS}function DIn(n){switch(uG(oIn(n,(jYn(),gMt)),171).g){case 1:kfn(n,gMt,(Gpn(),Omt));break;case 2:kfn(n,gMt,(Gpn(),Amt));break;case 3:kfn(n,gMt,(Gpn(),Cmt));break;case 4:kfn(n,gMt,(Gpn(),Imt))}}function xIn(n,t,e){var i;e.Ug("Self-Loop routing",1),i=mgn(t),XA(oIn(t,(K7(),jNt))),kS(YJ(JJ(JJ(sin(new fX(null,new h3(t.b,16)),new qi),new Xi),new zi),new Vi),new OC(n,i)),e.Vg()}function RIn(){RIn=E,Vgt=new cI(q4n,0),qgt=new cI(z2n,1),Wgt=new cI(V2n,2),zgt=new cI("LEFT_RIGHT_CONSTRAINT_LOCKING",3),Xgt=new cI("LEFT_RIGHT_CONNECTION_LOCKING",4),Ggt=new cI(K6n,5)}function KIn(n,t,i){var r,c,a,o,u,s,h;u=i.a/2,a=i.b/2,s=1,h=1,(r=e.Math.abs(t.a-n.a))>u&&(s=u/r),(c=e.Math.abs(t.b-n.b))>a&&(h=a/c),o=e.Math.min(s,h),n.a+=o*(t.a-n.a),n.b+=o*(t.b-n.b)}function FIn(n,t,e,i,r){var c,a;for(a=!1,c=uG(zq(e.b,0),27);Sqn(n,t,c,i,r)&&(a=!0,HSn(e,c),0!=e.b.c.length);)c=uG(zq(e.b,0),27);return 0==e.b.c.length&&uEn(e.j,e),a&&OTn(t.q),a}function _In(n,t){var e,i,r,c;if(l_n(),t.b<2)return!1;for(i=e=uG(I6(c=Fkn(t,0)),8);c.b!=c.d.c;){if(VRn(n,i,r=uG(I6(c),8)))return!0;i=r}return!!VRn(n,i,e)}function BIn(n,t,e,i){return 0==e?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),G_(n.o,t,i)):uG(ern(uG(Lsn(n,16),29)||n.ii(),e),69).wk().Ak(n,$vn(n),e-iQ(n.ii()),t,i)}function HIn(n,t){var e;t!=n.sb?(e=null,n.sb&&(e=uG(n.sb,54).Th(n,1,sFt,e)),t&&(e=uG(t,54).Rh(n,1,sFt,e)),(e=Jwn(n,t,e))&&e.oj()):0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,4,t,t))}function UIn(n,t){var e,i;if(!t)throw hv(new SM("All edge sections need an end point."));e=$cn(t,"x"),mcn(new rm(n).a,(tJ(e),e)),i=$cn(t,"y"),jcn(new cm(n).a,(tJ(i),i))}function GIn(n,t){var e,i;if(!t)throw hv(new SM("All edge sections need a start point."));e=$cn(t,"x"),Tcn(new tm(n).a,(tJ(e),e)),i=$cn(t,"y"),Ecn(new em(n).a,(tJ(i),i))}function qIn(n,t){var e,i,r,c,a;for(i=0,c=xln(n).length;i<c;++i)aIn(t);for(a=!Nut&&n.e?Nut?null:n.d:null;a;){for(e=0,r=xln(a).length;e<r;++e)aIn(t);a=!Nut&&a.e?Nut?null:a.d:null}}function XIn(n,t){var e,i;i=uG(oIn(t,(jYn(),JMt)),101),kfn(t,(GYn(),smt),i),(e=t.e)&&(kS(new fX(null,new h3(e.a,16)),new Hd(n)),kS(sin(new fX(null,new h3(e.b,16)),new dt),new Ud(n)))}function zIn(){zIn=E,dbt=new SC("NORMAL",0),wbt=new SC("LONG_EDGE",1),lbt=new SC("EXTERNAL_PORT",2),gbt=new SC("NORTH_SOUTH_PORT",3),bbt=new SC("LABEL",4),fbt=new SC("BREAKING_POINT",5)}function VIn(n){var t,e,i,r;if(t=!1,vR(n,(GYn(),$pt)))for(e=uG(oIn(n,$pt),85),r=new Ww(n.j);r.a<r.c.c.length;)qxn(i=uG(N3(r),12))&&(t||(XLn(HQ(n)),t=!0),_mn(uG(e.xc(i),314)))}function WIn(n){var t,e,i;return i=gCn(n),null!=n.e&&ZG(i,_et,n.e),!!n.k&&ZG(i,"type",MR(n.k)),!pE(n.j)&&(e=new Ib,nrn(i,ket,e),t=new Em(e),z8(n.j,t)),i}function QIn(n){var t,e,i,r;for(r=jQ((man(n.gc(),"size"),new QM),123),i=!0,e=Mz(n).Kc();e.Ob();)t=uG(e.Pb(),44),i||(r.a+=TZn),i=!1,QA(jQ(QA(r,t.ld()),61),t.md());return(r.a+="}",r).a}function JIn(n,t){var e,i,r;return(t&=63)<22?(e=n.l<<t,i=n.m<<t|n.l>>22-t,r=n.h<<t|n.m>>22-t):t<44?(e=0,i=n.l<<t-22,r=n.m<<t-22|n.l>>44-t):(e=0,i=0,r=n.l<<t-44),p$(e&f0n,i&f0n,r&l0n)}function YIn(n){if(null==rot&&(rot=new RegExp("^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$")),!rot.test(n))throw hv(new ZM(y0n+n+'"'));return parseFloat(n)}function ZIn(n,t){var e,i,r,c;for(i=(1==t?$lt:Nlt).a.ec().Kc();i.Ob();)for(e=uG(i.Pb(),88),c=uG(Y9(n.f.c,e),21).Kc();c.Ob();)r=uG(c.Pb(),42),kD(n.b.b,uG(r.b,86)),kD(n.b.a,uG(r.b,86).d)}function nOn(n,t){var e,i,r,c;for(c=t.b.j,n.a=Inn(YHt,W1n,28,c.c.length,15,1),r=0,i=0;i<c.c.length;i++)u3(i,c.c.length),0==(e=uG(c.c[i],12)).e.c.length&&0==e.g.c.length?r+=1:r+=3,n.a[i]=r}function tOn(){tOn=E,Egt=new eI("ALWAYS_UP",0),jgt=new eI("ALWAYS_DOWN",1),Pgt=new eI("DIRECTION_UP",2),Sgt=new eI("DIRECTION_DOWN",3),Igt=new eI("SMART_UP",4),Cgt=new eI("SMART_DOWN",5)}function eOn(n,t){if(n<0||t<0)throw hv(new vM("k and n must be positive"));if(t>n)throw hv(new vM("k must be smaller than n"));return 0==t||t==n?1:0==n?0:uSn(n)/(uSn(t)*uSn(n-t))}function iOn(n,t){var e,i,r,c;for(e=new jN(n);null!=e.g||e.c?null==e.g||0!=e.i&&uG(e.g[e.i-1],51).Ob():O0(e);)if(F$(c=uG(Wxn(e),58),167))for(i=uG(c,167),r=0;r<t.length;r++)t[r].Kg(i)}function rOn(n){var t;return 0!=(64&n.Db)?Egn(n):((t=new fx(Egn(n))).a+=" (height: ",Oj(t,n.f),t.a+=", width: ",Oj(t,n.g),t.a+=", x: ",Oj(t,n.i),t.a+=", y: ",Oj(t,n.j),t.a+=")",t.a)}function cOn(n){var t,e,i,r,c,a;for(t=new u8,r=0,c=(i=n).length;r<c;++r)if(null!=Akn(t,a=WW((e=i[r]).ld()),WW(e.md())))throw hv(new vM("duplicate key: "+a));this.b=(hZ(),new Vw(t))}function aOn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],o7(c,String.fromCharCode(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function oOn(){oOn=E,zin(),sft=new mL(J3n,hft=pft),xwn(1),uft=new mL(Y3n,xwn(300)),xwn(0),bft=new mL(Z3n,xwn(0)),new Jm,wft=new mL(n4n,t4n),new Jm,fft=new mL(e4n,5),dft=pft,lft=gft}function uOn(n,t){var e;if(null!=t&&!n.c.Hk().fk(t))throw e=F$(t,58)?uG(t,58).Dh().zb:Ij(Tbn(t)),hv(new mM(Gtt+n.c.xe()+"'s type '"+n.c.Hk().xe()+"' does not permit a value of type '"+e+"'"))}function sOn(n,t,e){var i,r;for(r=new N4(n.b,0);r.b<r.d.gc();)MK(r.b<r.d.gc()),xA(oIn(i=uG(r.d.Xb(r.c=r.b++),72),(GYn(),omt)))===xA(t)&&(pAn(i.n,HQ(n.c.i),e),LQ(r),kD(t.b,i))}function hOn(n){var t,i;return i=e.Math.sqrt((null==n.k&&(n.k=aun(n,new vc)),uM(n.k)/(n.b*(null==n.g&&(n.g=cun(n,new mc)),uM(n.g))))),t=pz(Bsn(e.Math.round(i))),t=e.Math.min(t,n.f)}function fOn(){var n,t,e;for(t=0,n=0;n<1;n++){if(0==(e=U$n((s3(n,1),"X".charCodeAt(n)))))throw hv(new CM((s3(n,2),"Unknown Option: "+"X".substr(n))));t|=e}return t}function lOn(){Lun(),LF.call(this),this.j=(KQn(),FRt),this.a=new sj,new $k,this.f=(man(2,g1n),new R7(2)),this.e=(man(4,g1n),new R7(4)),this.g=(man(4,g1n),new R7(4)),this.b=new LC(this.e,this.g)}function bOn(n,t){var e;return!oM(gK(oIn(t,(GYn(),pmt))))&&(e=t.c.i,(n!=(Gpn(),Cmt)||e.k!=(zIn(),bbt))&&uG(oIn(e,(jYn(),gMt)),171)!=Imt)}function wOn(n,t){var e;return!oM(gK(oIn(t,(GYn(),pmt))))&&(e=t.d.i,(n!=(Gpn(),Omt)||e.k!=(zIn(),bbt))&&uG(oIn(e,(jYn(),gMt)),171)!=Amt)}function dOn(n,t){var e,i,r,c,a,o,u;for(a=n.d,u=n.o,o=new gY(-a.b,-a.d,a.b+u.a+a.c,a.d+u.b+a.a),r=0,c=(i=t).length;r<c;++r)(e=i[r])&&bAn(o,e.i);a.b=-o.c,a.d=-o.d,a.c=o.b-a.b-u.a,a.a=o.a-a.d-u.b}function gOn(n,t){if(t.a)switch(uG(oIn(t.b,(GYn(),smt)),101).g){case 0:case 1:JSn(t);case 2:kS(new fX(null,new h3(t.d,16)),new Ni),tDn(n.a,t)}else kS(new fX(null,new h3(t.d,16)),new Ni)}function pOn(){pOn=E,iLt=new bO("CENTER_DISTANCE",0),rLt=new bO("CIRCLE_UNDERLAP",1),oLt=new bO("RECTANGLE_UNDERLAP",2),cLt=new bO("INVERTED_OVERLAP",3),aLt=new bO("MINIMUM_ROOT_DISTANCE",4)}function mOn(n){var t,e,i,r;if(L_n(),null==n)return null;for(i=n.length,t=Inn(JHt,N1n,28,2*i,15,1),e=0;e<i;e++)(r=n[e])<0&&(r+=256),t[2*e]=mHt[r>>4],t[2*e+1]=mHt[15&r];return mvn(t,0,t.length)}function vOn(n){var t;switch(TJ(),n.c.length){case 0:return Eat;case 1:return fq((t=uG(ULn(new Ww(n)),44)).ld(),t.md());default:return new xy(uG(Ekn(n,Inn(Sat,c1n,44,n.c.length,0,1)),173))}}function kOn(n){var t,e,i,r,c;for(t=new ND,e=new ND,A6(t,n),A6(e,n);e.b!=e.c;)for(c=new Ww(uG(xV(e),36).a);c.a<c.c.c.length;)(r=uG(N3(c),10)).e&&(A6(t,i=r.e),A6(e,i));return t}function yOn(n,t){switch(t.g){case 1:return YU(n.j,(Lun(),Mbt));case 2:return YU(n.j,(Lun(),kbt));case 3:return YU(n.j,(Lun(),jbt));case 4:return YU(n.j,(Lun(),Ebt));default:return hZ(),hZ(),zot}}function MOn(n,t){var e,i,r;e=PG(t,n.e),i=uG(cQ(n.g.f,e),17).a,r=n.a.c.length-1,0!=n.a.c.length&&uG(zq(n.a,r),293).c==i?(++uG(zq(n.a,r),293).a,++uG(zq(n.a,r),293).b):kD(n.a,new $R(i))}function TOn(n,t,e){var i,r;return 0!=(i=CBn(n,t,e))?i:vR(t,(GYn(),imt))&&vR(e,imt)?((r=d$(uG(oIn(t,imt),17).a,uG(oIn(e,imt),17).a))<0?sHn(n,t,e):r>0&&sHn(n,e,t),r):j$n(n,t,e)}function jOn(){jOn=E,XYn(),BIt=mDt,VIt=DDt,$It=_$t,DIt=U$t,xIt=q$t,NIt=K$t,RIt=V$t,_It=bDt,EHn(),AIt=dIt,LIt=gIt,UIt=MIt,XIt=EIt,GIt=TIt,qIt=jIt,KIt=mIt,FIt=kIt,HIt=yIt,zIt=SIt,WIt=CIt,OIt=wIt}function EOn(n,t){var e,i,r,c,a;if(n.e<=t)return n.g;if(l3(n,n.g,t))return n.g;for(c=n.r,i=n.g,a=n.r,r=(c-i)/2+i;i+1<c;)(e=uXn(n,r,!1)).b<=r&&e.a<=t?(a=r,c=r):i=r,r=(c-i)/2+i;return a}function SOn(n,t,e){dCn(e,"Recursive Graph Layout",t_n(n,t,!0)),iOn(t,Uhn(cT(nNt,1),EZn,536,0,[new Nl])),vnn(t,(XYn(),yDt))||iOn(t,Uhn(cT(nNt,1),EZn,536,0,[new wu])),nZn(n,t,null,e),POn(e)}function POn(n){var t;if(null==n.p)throw hv(new kM("The task has not begun yet."));n.b||(n.k&&(bS(),t=Ngn(Bsn(Date.now()),$1n),n.q=1e-9*W4($gn(t,n.o))),n.c<n.r&&Ban(n,n.r-n.c),n.b=!0)}function COn(n){var t,e,i;for(aq(i=new Uk,new MO(n.j,n.k)),e=new DD((!n.a&&(n.a=new MD(eFt,n,5)),n.a));e.e!=e.i.gc();)aq(i,new MO((t=uG(Zkn(e),377)).a,t.b));return aq(i,new MO(n.b,n.c)),i}function IOn(n,t,e,i,r){var c,a,o,u;if(r)for(u=((c=new Gz(r.a.length)).b-c.a)*c.c<0?(CP(),XHt):new xD(c);u.Ob();)o=v6(r,uG(u.Pb(),17).a),XUn((a=new PY(n,t,e,i)).a,a.b,a.c,a.d,o)}function OOn(n,t){var e;if(xA(n)===xA(t))return!0;if(F$(t,21)){e=uG(t,21);try{return n.gc()==e.gc()&&n.Ic(e)}catch(i){if(F$(i=Ehn(i),169)||F$(i,212))return!1;throw hv(i)}}return!1}function AOn(n,t,e,i,r,c){switch(this.c=n,t.g){case 2:if(n.a.Ne(r,e)<0)throw hv(new vM(Y0n+r+Z0n+e));break;case 1:n.a.Ne(r,r);break;case 3:n.a.Ne(e,e)}this.f=t,this.b=e,this.a=i,this.e=r,this.d=c}function LOn(n,t){var i;kD(n.d,t),i=t.Mf(),n.c?(n.e.a=e.Math.max(n.e.a,i.a),n.e.b+=i.b,n.d.c.length>1&&(n.e.b+=n.a)):(n.e.a+=i.a,n.e.b=e.Math.max(n.e.b,i.b),n.d.c.length>1&&(n.e.a+=n.a))}function NOn(n){var t,e,i,r;switch(t=(r=n.i).b,i=r.j,e=r.g,r.a.g){case 0:e.a=(n.g.b.o.a-i.a)/2;break;case 1:e.a=t.d.n.a+t.d.a.a;break;case 2:e.a=t.d.n.a+t.d.a.a-i.a;break;case 3:e.b=t.d.n.b+t.d.a.b}}function $On(n,t,e){var i,r,c;for(r=new Fz(ix(Ggn(e).a.Kc(),new h));hDn(r);)v9(i=uG(N9(r),18))||!v9(i)&&i.c.i.c==i.d.i.c||(c=aRn(n,i,e,new Ck)).c.length>1&&mv(t.c,c)}function DOn(n,t,e,i,r){if(i<t||r<e)throw hv(new vM("The highx must be bigger then lowx and the highy must be bigger then lowy"));return n.a<t?n.a=t:n.a>i&&(n.a=i),n.b<e?n.b=e:n.b>r&&(n.b=r),n}function xOn(n){if(F$(n,143))return dKn(uG(n,143));if(F$(n,233))return Mpn(uG(n,233));if(F$(n,23))return WIn(uG(n,23));throw hv(new vM(Aet+vIn(new IM(Uhn(cT(dat,1),EZn,1,5,[n])))))}function ROn(n,t,e,i,r){var c,a,o;for(c=!0,a=0;a<i;a++)c&=0==e[a];if(0==r)qGn(e,i,n,0,t),a=t;else{for(o=32-r,c&=e[a]<<o==0,a=0;a<t-1;a++)n[a]=e[a+i]>>>r|e[a+i+1]<<o;n[a]=e[a+i]>>>r,++a}return c}function KOn(n,t,e,i){var r,c;if(t.k==(zIn(),wbt))for(c=new Fz(ix(qgn(t).a.Kc(),new h));hDn(c);)if((r=uG(N9(c),18)).c.i.k==wbt&&n.c.a[r.c.i.c.p]==i&&n.c.a[t.c.p]==e)return!0;return!1}function FOn(n,t){var e,i,r,c;return t&=63,e=n.h&l0n,t<22?(c=e>>>t,r=n.m>>t|e<<22-t,i=n.l>>t|n.m<<22-t):t<44?(c=0,r=e>>>t-22,i=n.m>>t-22|n.h<<44-t):(c=0,r=0,i=e>>>t-44),p$(i&f0n,r&f0n,c&l0n)}function _On(n,t,e,i){var r;this.b=i,this.e=n==(ean(),BEt),r=t[e],this.d=Jq(ZHt,[zZn,B2n],[183,28],16,[r.length,r.length],2),this.a=Jq(YHt,[zZn,W1n],[53,28],15,[r.length,r.length],2),this.c=new IPn(t,e)}function BOn(n){var t,e,i;for(n.k=new L2((KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,n.j.c.length),i=new Ww(n.j);i.a<i.c.c.length;)t=(e=uG(N3(i),113)).d.j,UNn(n.k,t,e);n.e=zRn(kz(n.k))}function HOn(n,t){var e,i,r;FV(n.d,t),e=new ya,vJ(n.c,t,e),e.f=uwn(t.c),e.a=uwn(t.d),e.d=(uFn(),(r=t.c.i.k)==(zIn(),dbt)||r==fbt),e.e=(i=t.d.i.k)==dbt||i==fbt,e.b=t.c.j==(KQn(),_Rt),e.c=t.d.j==kRt}function UOn(n){var t,e,i,r,c;for(c=vZn,r=vZn,i=new Ww(Ebn(n));i.a<i.c.c.length;)t=(e=uG(N3(i),218)).e.e-e.d.e,e.e==n&&t<r?r=t:t<c&&(c=t);return r==vZn&&(r=-1),c==vZn&&(c=-1),new WO(xwn(r),xwn(c))}function GOn(n,t){var i,r,c;return c=B3n,myn(),r=Nht,c=e.Math.abs(n.b),(i=e.Math.abs(t.f-n.b))<c&&(c=i,r=$ht),(i=e.Math.abs(n.a))<c&&(c=i,r=Dht),(i=e.Math.abs(t.g-n.a))<c&&(c=i,r=Lht),r}function qOn(n,t){var e,i,r;for(e=t.a.o.a,r=new Jw(new C2(HQ(t.a).b,t.c,t.f+1));r.b<r.d.gc();)if(MK(r.b<r.d.gc()),(i=uG(r.d.Xb(r.c=r.b++),30)).c.a>=e)return YOn(n,t,i.p),!0;return!1}function XOn(n,t,e,i){var r,c,a,o,u,s;for(a=e.length,c=0,r=-1,s=Tin((s3(t,n.length+1),n.substr(t)),(cB(),out)),o=0;o<a;++o)(u=e[o].length)>c&&IV(s,Tin(e[o],out))&&(r=o,c=u);return r>=0&&(i[0]=t+c),r}function zOn(n){var t;return 0!=(64&n.Db)?rOn(n):(t=new lx(Ftt),!n.a||JA(JA((t.a+=' "',t),n.a),'"'),JA(Nj(JA(Nj(JA(Nj(JA(Nj((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function VOn(n,t,e){var i,r,c,a,o;for(o=VKn(n.e.Dh(),t),r=uG(n.g,124),i=0,a=0;a<n.i;++a)if(c=r[a],o.am(c.Lk())){if(i==e)return e_n(n,a),PP(),uG(t,69).xk()?c:c.md();++i}throw hv(new dM(Hit+e+Vet+i))}function WOn(n){var t,e,i;if(2==(t=n.c)||7==t||1==t)return QYn(),QYn(),OHt;for(i=eYn(n),e=null;2!=(t=n.c)&&7!=t&&1!=t;)e||(QYn(),QYn(),kzn(e=new QN(1),i),i=e),kzn(e,eYn(n));return i}function QOn(n,t,e){return n<0||n>e?iLn(n,e,"start index"):t<0||t>e?iLn(t,e,"end index"):LBn("end index (%s) must not be less than start index (%s)",Uhn(cT(dat,1),EZn,1,5,[xwn(t),xwn(n)]))}function JOn(n,t){var e,i,r,c;for(i=0,r=n.length;i<r;i++){c=n[i];try{c[1]?c[0].Um()&&(t=QX(t,c)):c[0].Um()}catch(a){if(!F$(a=Ehn(a),82))throw hv(a);e=a,XM(),o1(F$(e,485)?uG(e,485).ke():e)}}return t}function YOn(n,t,i){var r,c;for(i!=t.c+t.b.gc()&&PXn(t.a,vsn(t,i-t.c)),c=t.a.c.p,n.a[c]=e.Math.max(n.a[c],t.a.o.a),r=uG(oIn(t.a,(GYn(),gmt)),15).Kc();r.Ob();)kfn(uG(r.Pb(),72),Hwt,(qx(),!0))}function ZOn(n,t){var i,r,c;c=$Kn(t),kfn(t,(GYn(),tmt),c),c&&(r=vZn,FX(n.f,c)&&(r=uG(DA(FX(n.f,c)),17).a),oM(gK(oIn(i=uG(zq(t.g,0),18),pmt)))||vJ(n,c,xwn(e.Math.min(uG(oIn(i,imt),17).a,r))))}function nAn(n,t,e){var i,r,c,a;for(t.p=-1,a=jmn(t,(can(),Wjt)).Kc();a.Ob();)for(r=new Ww(uG(a.Pb(),12).g);r.a<r.c.c.length;)t!=(c=(i=uG(N3(r),18)).d.i)&&(c.p<0?e.Fc(i):c.p>0&&nAn(n,c,e));t.p=0}function tAn(n){var t;this.c=new lS,this.f=n.e,this.e=n.d,this.i=n.g,this.d=n.c,this.b=n.b,this.k=n.j,this.a=n.a,n.i?this.j=n.i:this.j=new nB(t=uG(Mj(MNt),9),uG(MF(t,t.length),9),0),this.g=n.f}function eAn(n){var t,e,i,r;for(t=jQ(JA(new lx("Predicates."),"and"),40),e=!0,r=new Jw(n);r.b<r.d.gc();)MK(r.b<r.d.gc()),i=r.d.Xb(r.c=r.b++),e||(t.a+=","),t.a+=""+i,e=!1;return(t.a+=")",t).a}function iAn(n,t,e){var i,r,c;if(!(e<=t+2))for(r=(e-t)/2|0,i=0;i<r;++i)u3(t+i,n.c.length),c=uG(n.c[t+i],12),Y8(n,t+i,(u3(e-i-1,n.c.length),uG(n.c[e-i-1],12))),u3(e-i-1,n.c.length),n.c[e-i-1]=c}function rAn(n,t,e){var i,r,c,a,o,u,s;o=(c=n.d.p).e,u=c.r,n.g=new R_(u),i=(a=n.d.o.c.p)>0?o[a-1]:Inn(pbt,e6n,10,0,0,1),r=o[a],s=a<o.length-1?o[a+1]:Inn(pbt,e6n,10,0,0,1),t==e-1?j0(n.g,r,s):j0(n.g,i,r)}function cAn(n){var t;this.j=new Zm,this.f=new ek,this.b=new nB(t=uG(Mj(YRt),9),uG(MF(t,t.length),9),0),this.d=Inn(YHt,W1n,28,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,15,1),this.g=n}function aAn(n,t){var e,i,r;if(0!=t.c.length){for(e=hIn(n,t),r=!1;!e;)gxn(n,t,!0),r=!0,e=hIn(n,t);r&&gxn(n,t,!1),i=Jhn(t),n.b&&n.b.Gg(i),n.a=Zbn(n,(u3(0,t.c.length),uG(t.c[0],27))),aAn(n,i)}}function oAn(n,t){var e,i,r;if(i=ern(n.Dh(),t),(e=t-n.ji())<0){if(!i)throw hv(new vM(Vtt+t+Wtt));if(!i.rk())throw hv(new vM(Gtt+i.xe()+qtt));(r=n.Ih(i))>=0?n.ki(r):zLn(n,i)}else sdn(n,e,i)}function uAn(n){var t,e;if(e=null,t=!1,F$(n,211)&&(t=!0,e=uG(n,211).a),t||F$(n,263)&&(t=!0,e=""+uG(n,263).a),t||F$(n,492)&&(t=!0,e=""+uG(n,492).a),!t)throw hv(new pM(Cet));return e}function sAn(n,t,e){var i,r,c,a,o,u;for(u=VKn(n.e.Dh(),t),i=0,o=n.i,r=uG(n.g,124),a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk())){if(e==i)return a;++i,o=a+1}if(e==i)return o;throw hv(new dM(Hit+e+Vet+i))}function hAn(n,t){var i,r,c;if(0==n.f.c.length)return null;for(c=new cN,i=new Ww(n.f);i.a<i.c.c.length;)r=uG(N3(i),72).o,c.b=e.Math.max(c.b,r.a),c.a+=r.b;return c.a+=(n.f.c.length-1)*t,c}function fAn(n){var t,e,i;for(Qon(e=new lS,n.o),i=new Ok;0!=e.b;)gJn(n,t=uG(0==e.b?null:(MK(0!=e.b),Lrn(e,e.a.a)),515),!0)&&kD(i.a,t);for(;0!=i.a.c.length;)gJn(n,t=uG(obn(i),515),!1)}function lAn(){lAn=E,yNt=new EO(Y2n,0),wNt=new EO("BOOLEAN",1),mNt=new EO("INT",2),kNt=new EO("STRING",3),dNt=new EO("DOUBLE",4),gNt=new EO("ENUM",5),pNt=new EO("ENUMSET",6),vNt=new EO("OBJECT",7)}function bAn(n,t){var i,r,c,a,o;r=e.Math.min(n.c,t.c),a=e.Math.min(n.d,t.d),(c=e.Math.max(n.c+n.b,t.c+t.b))<r&&(i=r,r=c,c=i),(o=e.Math.max(n.d+n.a,t.d+t.a))<a&&(i=a,a=o,o=i),LG(n,r,a,c-r,o-a)}function wAn(n,t){var e,i;if(n.f){for(;t.Ob();)if(F$(i=(e=uG(t.Pb(),76)).Lk(),102)&&0!=(uG(i,19).Bb&Qtt)&&(!n.e||i.pk()!=tFt||0!=i.Lj())&&null!=e.md())return t.Ub(),!0;return!1}return t.Ob()}function dAn(n,t){var e,i;if(n.f){for(;t.Sb();)if(F$(i=(e=uG(t.Ub(),76)).Lk(),102)&&0!=(uG(i,19).Bb&Qtt)&&(!n.e||i.pk()!=tFt||0!=i.Lj())&&null!=e.md())return t.Pb(),!0;return!1}return t.Sb()}function gAn(){gAn=E,vBt=Uhn(cT($ot,1),zZn,2,6,[nct,tct,ect,ict,rct,cct,_et]),mBt=Uhn(cT($ot,1),zZn,2,6,[nct,"empty",tct,jrt,"elementOnly"]),yBt=Uhn(cT($ot,1),zZn,2,6,[nct,"preserve","replace",act]),kBt=new HG}function pAn(n,t,e){var i,r,c;if(t!=e){i=t;do{JF(n,i.c),(r=i.e)&&(KR(n,(c=i.d).b,c.d),JF(n,r.n),i=HQ(r))}while(r);i=e;do{YF(n,i.c),(r=i.e)&&(HR(n,(c=i.d).b,c.d),YF(n,r.n),i=HQ(r))}while(r)}}function mAn(n,t,e,i){var r,c,a,o,u;if(i.f.c+i.i.c==0)for(o=0,u=(a=n.a[n.c]).length;o<u;++o)vJ(i,c=a[o],new Uun(n,c,e));return(r=uG(DA(FX(i.f,t)),677)).b=0,r.c=r.f,0==r.c||Pw(uG(zq(r.a,r.b),293)),r}function vAn(){vAn=E,Hdt=new QC("MEDIAN_LAYER",0),Gdt=new QC("TAIL_LAYER",1),Bdt=new QC("HEAD_LAYER",2),Udt=new QC("SPACE_EFFICIENT_LAYER",3),qdt=new QC("WIDEST_LAYER",4),_dt=new QC("CENTER_LAYER",5)}function kAn(n){var t,e,i,r;for(n.e=0,r=Fkn(n.f,0);r.b!=r.d.c;)(i=uG(I6(r),10)).p>=n.d.b.c.length&&((t=new bQ(n.d)).p=i.p-1,kD(n.d.b,t),(e=new bQ(n.d)).p=i.p,kD(n.d.b,e)),a2(i,uG(zq(n.d.b,i.p),30))}function yAn(n,t,e){var i,r,c;if(!n.b[t.g]){for(n.b[t.g]=!0,!(i=e)&&(i=new L7),aq(i.b,t),c=n.a[t.g].Kc();c.Ob();)(r=uG(c.Pb(),65)).b!=t&&yAn(n,r.b,i),r.c!=t&&yAn(n,r.c,i),aq(i.a,r);return i}return null}function MAn(n){switch(n.g){case 0:case 1:case 2:return KQn(),yRt;case 3:case 4:case 5:return KQn(),KRt;case 6:case 7:case 8:return KQn(),_Rt;case 9:case 10:case 11:return KQn(),kRt;default:return KQn(),FRt}}function TAn(n,t){var e;return 0!=n.c.length&&(e=Imn((u3(0,n.c.length),uG(n.c[0],18)).c.i),n2(),e==(Yyn(),wjt)||e==bjt||o9(YJ(new fX(null,new h3(n,16)),new Kc),new up(t)))}function jAn(n,t){if(F$(t,207))return KN(n,uG(t,27));if(F$(t,193))return FN(n,uG(t,123));if(F$(t,451))return RN(n,uG(t,166));throw hv(new vM(Aet+vIn(new IM(Uhn(cT(dat,1),EZn,1,5,[t])))))}function EAn(n,t,e){var i,r;if(this.f=n,e7(e,r=(i=uG(cQ(n.b,t),260))?i.a:0),e>=(r/2|0))for(this.e=i?i.c:null,this.d=r;e++<r;)jin(this);else for(this.c=i?i.b:null;e-- >0;)Ein(this);this.b=t,this.a=null}function SAn(n,t){var e,i;t.a?WKn(n,t):(!!(e=uG(jS(n.b,t.b),60))&&e==n.a[t.b.f]&&!!e.a&&e.a!=t.b.a&&e.c.Fc(t.b),!!(i=uG(TS(n.b,t.b),60))&&n.a[i.f]==t.b&&!!i.a&&i.a!=t.b.a&&t.b.c.Fc(i),sD(n.b,t.b))}function PAn(n,t){var e,i;if(e=uG(AJ(n.b,t),127),uG(uG(Y9(n.r,t),21),87).dc())return e.n.b=0,void(e.n.c=0);e.n.b=n.C.b,e.n.c=n.C.c,n.A.Hc((Qmn(),JRt))&&vBn(n,t),i=Iyn(n,t),M_n(n,t)==(Vkn(),Zxt)&&(i+=2*n.w),e.a.a=i}function CAn(n,t){var e,i;if(e=uG(AJ(n.b,t),127),uG(uG(Y9(n.r,t),21),87).dc())return e.n.d=0,void(e.n.a=0);e.n.d=n.C.d,e.n.a=n.C.a,n.A.Hc((Qmn(),JRt))&&kBn(n,t),i=Cyn(n,t),M_n(n,t)==(Vkn(),Zxt)&&(i+=2*n.w),e.a.b=i}function IAn(n,t){var e,i,r,c;for(c=new Zm,i=new Ww(t);i.a<i.c.c.length;)kD(c,new fC(e=uG(N3(i),68),!0)),kD(c,new fC(e,!1));(r=new _Z(n)).a.a.$b(),I4(c,n.b,new IM(Uhn(cT(Hut,1),EZn,693,0,[r])))}function OAn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w;return o=n.a,f=n.b,u=t.a,l=t.b,s=e.a,b=e.b,new MO(((c=o*l-f*u)*(s-(h=i.a))-(a=s*(w=i.b)-b*h)*(o-u))/(r=(o-u)*(b-w)-(f-l)*(s-h)),(c*(b-w)-a*(f-l))/r)}function AAn(n,t){var e,i,r;t.Ug("End label pre-processing",1),e=uM(pK(oIn(n,(jYn(),pTt)))),i=uM(pK(oIn(n,yTt))),r=fN(uG(oIn(n,Byt),88)),kS(sin(new fX(null,new h3(n.b,16)),new he),new NB(e,i,r)),t.Vg()}function LAn(n,t){var e,i,r;if(!n.d[t.p]){for(n.d[t.p]=!0,n.a[t.p]=!0,i=new Fz(ix(Xgn(t).a.Kc(),new h));hDn(i);)v9(e=uG(N9(i),18))||(r=e.d.i,n.a[r.p]?kD(n.b,e):LAn(n,r));n.a[t.p]=!1}}function NAn(n,t,e){var i;switch(i=0,uG(oIn(t,(jYn(),gMt)),171).g){case 2:i=2*-e+n.a,++n.a;break;case 1:i=-e;break;case 3:i=e;break;case 4:i=2*e+n.b,++n.b}return vR(t,(GYn(),imt))&&(i+=uG(oIn(t,imt),17).a),i}function $An(n,t,e){var i,r,c;for(e.zc(t,n),kD(n.n,t),c=n.p.zg(t),t.j==n.p.Ag()?npn(n.e,c):npn(n.j,c),eQ(n),r=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(t),new Wd(t)])));hDn(r);)i=uG(N9(r),12),e._b(i)||$An(n,i,e)}function DAn(n,t,e){var i,r,c;for(e.Ug("Processor set neighbors",1),n.a=0==t.b.b?1:t.b.b,r=null,i=Fkn(t.b,0);!r&&i.b!=i.d.c;)oM(gK(oIn(c=uG(I6(i),39),(OQn(),UPt))))&&(r=c);r&&k_n(n,new Mp(r),e),e.Vg()}function xAn(n){var t,e;return uG(zDn(n,(XYn(),_$t)),21).Hc((Qmn(),VRt))?(e=uG(zDn(n,q$t),21),t=new eN(uG(zDn(n,U$t),8)),e.Hc((oUn(),eKt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t):new sj}function RAn(n){var t,e,i;if(!n.b){for(i=new Es,e=new nR(Zqn(n));e.e!=e.i.gc();)0!=((t=uG(nyn(e),19)).Bb&Qtt)&&ttn(i,t);lbn(i),n.b=new vL((uG(zrn(gZ((tQ(),M_t).o),8),19),i.i),i.g),y9(n).b&=-9}return n.b}function KAn(n){var t,e,i;for(e=n.length,i=0;i<e&&(s3(i,n.length),n.charCodeAt(i)<=32);)++i;for(t=e;t>i&&(s3(t-1,n.length),n.charCodeAt(t-1)<=32);)--t;return i>0||t<e?(Knn(i,t,n.length),n.substr(i,t-i)):n}function FAn(n,t){var e,i,r,c,a,o;a=uG(oTn(kz(t.k),Inn(YRt,z4n,64,2,0,1)),126),xTn(n,o=t.g,e=e5(t,a[0]),i=t5(t,a[1]))<=xTn(n,o,r=e5(t,a[1]),c=t5(t,a[0]))?(t.a=e,t.c=i):(t.a=r,t.c=c)}function _An(n){var t,e,i,r,c,a,o;if(hZ(),F$(n,59))for(c=0,r=n.gc()-1;c<r;++c,--r)t=n.Xb(c),n.hd(c,n.Xb(r)),n.hd(r,t);else for(e=n.ed(),a=n.fd(n.gc());e.Tb()<a.Vb();)i=e.Pb(),o=a.Ub(),e.Wb(o),a.Wb(i)}function BAn(n,t){var e,i,r,c,a,o;for(o=0,A6(c=new ND,t);c.b!=c.c;)for(o+=XTn((a=uG(xV(c),219)).d,a.e),r=new Ww(a.b);r.a<r.c.c.length;)i=uG(N3(r),36),(e=uG(zq(n.b,i.p),219)).s||(o+=BAn(n,e));return o}function HAn(n,t,e,i,r){var c,a,o,u;if(t)for(a=t.Kc();a.Ob();)for(u=nBn(uG(a.Pb(),10),(can(),Wjt),e).Kc();u.Ob();)o=uG(u.Pb(),12),(c=uG(DA(FX(r.f,o)),118))||(c=new nhn(n.d),mv(i.c,c),$An(c,o,r))}function UAn(n,t,i){var r,c;thn(this),t==(l0(),USt)?FV(this.r,n.c):FV(this.w,n.c),FV(i==USt?this.r:this.w,n.d),HOn(this,n),NIn(this,r=uwn(n.c),c=uwn(n.d),c),this.o=(uFn(),e.Math.abs(r-c)<.2)}function GAn(n,t,e){var i,r,c,a,o;if(null!=(a=uG(Lsn(n.a,8),2035)))for(r=0,c=a.length;r<c;++r)null.Um();i=e,0==(1&n.a.Db)&&(o=new SQ(n,e,t),i.dj(o)),F$(i,686)?uG(i,686).fj(n.a):i.cj()==n.a&&i.ej(null)}function qAn(){var n;return kHt?uG(jxn((MP(),l_t),lct),2044):(SQn(),n=uG(F$(U1((MP(),l_t),lct),594)?U1(l_t,lct):new gJ,594),kHt=!0,FJn(n),ZYn(n),vJ((pP(),k_t),n,new $h),ojn(n),r2(l_t,lct,n),n)}function XAn(n,t,e,i){var r;return(r=XOn(n,e,Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n]),t))<0&&(r=XOn(n,e,Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function zAn(n,t,e,i){var r;return(r=XOn(n,e,Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n]),t))<0&&(r=XOn(n,e,Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function VAn(n,t,e){var i,r,c,a;if(a=n.b.Ce(t),0==(r=null==(i=n.a.get(a))?Inn(dat,EZn,1,0,5,1):i).length)n.a.set(a,r);else if(c=Ibn(n,t,r))return c.nd(e);return uQ(r,r.length,new VP(t,e)),++n.c,++n.b.g,null}function WAn(n){var t,e,i;for($xn(n),i=new Zm,e=new Ww(n.a.a.b);e.a<e.c.c.length;)kD(i,new KC(t=uG(N3(e),86),!0)),kD(i,new KC(t,!1));RMn(n.c),O4(i,n.b,new IM(Uhn(cT(Klt,1),EZn,382,0,[n.c]))),lDn(n)}function QAn(n,t){var e,i,r;for(r=new Zm,i=new Ww(n.c.a.b);i.a<i.c.c.length;)e=uG(N3(i),60),t.Lb(e)&&(kD(r,new tC(e,!0)),kD(r,new tC(e,!1)));xMn(n.e),I4(r,n.d,new IM(Uhn(cT(Hut,1),EZn,693,0,[n.e])))}function JAn(n){var t,e,i,r;for(e=new Ym,r=new Ww(n.d);r.a<r.c.c.length;)i=uG(N3(r),187),t=uG(i.of((GYn(),Dpt)),18),FX(e.f,t)||vJ(e,t,new oZ(t)),kD(uG(DA(FX(e.f,t)),465).b,i);return new Z_(new Fw(e))}function YAn(n,t){var e,i,r,c,a;for(i=new $4(n.j.c.length),e=null,c=new Ww(n.j);c.a<c.c.c.length;)(r=uG(N3(c),12)).j!=e&&(i.b==i.c||Dxn(i,e,t),q5(i),e=r.j),(a=bDn(r))&&O6(i,a);i.b==i.c||Dxn(i,e,t)}function ZAn(n,t){var e,i;for(i=new N4(n.b,0);i.b<i.d.gc();)MK(i.b<i.d.gc()),e=uG(i.d.Xb(i.c=i.b++),72),uG(oIn(e,(jYn(),Xyt)),278)==(Zrn(),rxt)&&(LQ(i),kD(t.b,e),vR(e,(GYn(),Dpt))||kfn(e,Dpt,n))}function nLn(n){var t,i,r;for(t=x5(new Fz(ix(Xgn(n).a.Kc(),new h))),i=new Fz(ix(qgn(n).a.Kc(),new h));hDn(i);)r=x5(new Fz(ix(Xgn(uG(N9(i),18).c.i).a.Kc(),new h))),t=e.Math.max(t,r);return xwn(t)}function tLn(n,t,e){var i,r,c;i=uG(zDn(n,(XYn(),l$t)),21),r=0,c=0,t.a>e.a&&(i.Hc((ZSn(),VNt))?r=(t.a-e.a)/2:i.Hc(QNt)&&(r=t.a-e.a)),t.b>e.b&&(i.Hc((ZSn(),YNt))?c=(t.b-e.b)/2:i.Hc(JNt)&&(c=t.b-e.b)),JCn(n,r,c)}function eLn(n,t,e,i,r,c,a,o,u,s,h,f,l){F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),4),qon(n,e),n.f=a,Qdn(n,o),Ydn(n,u),Wdn(n,s),Jdn(n,h),mdn(n,f),Cgn(n,l),ddn(n,!0),Pcn(n,r),n.Zk(c),Kbn(n,t),null!=i&&(n.i=null,lon(n,i))}function iLn(n,t,e){if(n<0)return LBn(jZn,Uhn(cT(dat,1),EZn,1,5,[e,xwn(n)]));if(t<0)throw hv(new vM(SZn+t));return LBn("%s (%s) must not be greater than size (%s)",Uhn(cT(dat,1),EZn,1,5,[e,xwn(n),xwn(t)]))}function rLn(n,t,e,i,r,c){var a,o,u;if(i-e<7)Ygn(t,e,i,c);else if(rLn(t,n,o=e+r,u=o+((a=i+r)-o>>1),-r,c),rLn(t,n,u,a,-r,c),c.Ne(n[u-1],n[u])<=0)for(;e<i;)uQ(t,e++,n[o++]);else Twn(n,o,u,a,t,e,i,c)}function cLn(n,t){var e,i,r,c,a,o,u;for(u=t.d,r=t.b.j,o=new Ww(u);o.a<o.c.c.length;)for(a=uG(N3(o),105),c=Inn(ZHt,B2n,28,r.c.length,16,1),vJ(n.b,a,c),e=a.a.d.p-1,i=a.c.d.p;e!=i;)c[e=(e+1)%r.c.length]=!0}function aLn(n,t){if(Ean(),vR(n,(GYn(),imt))&&vR(t,imt))return d$(uG(oIn(n,imt),17).a,uG(oIn(t,imt),17).a);throw hv(new EM("The BF model order layer assigner requires all real nodes to have a model order."))}function oLn(n,t){if(Pan(),vR(n,(GYn(),imt))&&vR(t,imt))return d$(uG(oIn(n,imt),17).a,uG(oIn(t,imt),17).a);throw hv(new EM("The DF model order layer assigner requires all real nodes to have a model order."))}function uLn(n,t){for(n.r=new nhn(n.p),Zb(n.r,n),Qon(n.r.j,n.j),BY(n.j),aq(n.j,t),aq(n.r.e,t),eQ(n),eQ(n.r);0!=n.f.c.length;)L$(uG(zq(n.f,0),132));for(;0!=n.k.c.length;)L$(uG(zq(n.k,0),132));return n.r}function sLn(n,t,e){var i,r,c;if(r=ern(n.Dh(),t),(i=t-n.ji())<0){if(!r)throw hv(new vM(Vtt+t+Wtt));if(!r.rk())throw hv(new vM(Gtt+r.xe()+qtt));(c=n.Ih(r))>=0?n.bi(c,e):lRn(n,r,e)}else lpn(n,i,r,e)}function hLn(n){var t,e;if(n.f){for(;n.n>0;){if(F$(e=(t=uG(n.k.Xb(n.n-1),76)).Lk(),102)&&0!=(uG(e,19).Bb&Qtt)&&(!n.e||e.pk()!=tFt||0!=e.Lj())&&null!=t.md())return!0;--n.n}return!1}return n.n>0}function fLn(n){var t,e,i,r;if(e=uG(n,54)._h())try{if(i=null,(t=jxn((MP(),l_t),xUn(jpn(e))))&&(r=t.ai())&&(i=r.Fl(bM(e.e))),i&&i!=n)return fLn(i)}catch(c){if(!F$(c=Ehn(c),63))throw hv(c)}return n}function lLn(n,t,e){var i,r;e.Ug("Remove overlaps",1),e.dh(t,l7n),i=uG(zDn(t,(SK(),zCt)),27),n.f=i,n.a=aMn(uG(zDn(t,(jOn(),zIt)),299)),rw(n,(tJ(r=pK(zDn(t,(XYn(),DDt)))),r)),xWn(n,t,GFn(i),e),e.dh(t,w7n)}function bLn(n){var t,e,i;if(oM(gK(zDn(n,(XYn(),C$t))))){for(i=new Zm,e=new Fz(ix(eRn(n).a.Kc(),new h));hDn(e);)BNn(t=uG(N9(e),74))&&oM(gK(zDn(t,I$t)))&&mv(i.c,t);return i}return hZ(),hZ(),zot}function wLn(n){if(!n)return By(),Vat;var t=n.valueOf?n.valueOf():n;if(t!==n){var i=Wat[typeof t];return i?i(t):Vbn(typeof t)}return n instanceof Array||n instanceof e.Array?new Eb(n):new Cb(n)}function dLn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=uG(AJ(n.p,i),252)).i).b=gNn(r),c.a=dNn(r),c.b=e.Math.max(c.b,a.a),c.b>a.a&&!t&&(c.b=a.a),c.c=-(c.b-a.a)/2,i.g){case 1:c.d=-c.a;break;case 3:c.d=a.b}YGn(r),rqn(r)}function gLn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=uG(AJ(n.p,i),252)).i).b=gNn(r),c.a=dNn(r),c.a=e.Math.max(c.a,a.b),c.a>a.b&&!t&&(c.a=a.b),c.d=-(c.a-a.b)/2,i.g){case 4:c.c=-c.b;break;case 2:c.c=a.a}YGn(r),rqn(r)}function pLn(n,t){var e,i,r,c,a;if(!t.dc())if(r=uG(t.Xb(0),131),1!=t.gc())for(e=1;e<t.gc();)!r.j&&r.o||(c=tjn(t,e))&&(i=uG(c.a,17).a,wFn(n,r,a=uG(c.b,131),e,i,t),e=i+1,r=a);else wFn(n,r,r,1,0,t)}function mLn(n){var t,e,i,r;for(f$(r=new Z_(n.d),new zr),h_n(),t=Uhn(cT(Xdt,1),p1n,276,0,[Odt,Ndt,Idt,xdt,Ldt,Adt,Ddt,$dt]),e=0,i=new Ww(r);i.a<i.c.c.length;)T$n(uG(N3(i),105),t[e%t.length]),++e}function vLn(n,t){var e,i,r,c;if(l_n(),t.b<2)return!1;for(i=e=uG(I6(c=Fkn(t,0)),8);c.b!=c.d.c;){if(r=uG(I6(c),8),!qun(n,i)||!qun(n,r))return!1;i=r}return!(!qun(n,i)||!qun(n,e))}function kLn(n,t){var e,i,r,c,a;return e=$cn(a=n,"x"),din(new sm(t).a,e),i=$cn(a,"y"),gin(new hm(t).a,i),r=$cn(a,wet),pin(new fm(t).a,r),c=$cn(a,bet),min(new lm(t).a,c),c}function yLn(n,t){bBn(n,t),0!=(1&n.b)&&(n.a.a=null),0!=(2&n.b)&&(n.a.f=null),0!=(4&n.b)&&(n.a.g=null,n.a.i=null),0!=(16&n.b)&&(n.a.d=null,n.a.e=null),0!=(8&n.b)&&(n.a.b=null),0!=(32&n.b)&&(n.a.j=null,n.a.c=null)}function MLn(n,t){var e,i;if(i=0,t.length>0)try{i=vUn(t,j1n,vZn)}catch(r){throw F$(r=Ehn(r),130)?hv(new Pen(r)):hv(r)}return!n.a&&(n.a=new qm(n)),i<(e=n.a).i&&i>=0?uG(zrn(e,i),58):null}function TLn(n,t){if(n<0)return LBn(jZn,Uhn(cT(dat,1),EZn,1,5,["index",xwn(n)]));if(t<0)throw hv(new vM(SZn+t));return LBn("%s (%s) must be less than size (%s)",Uhn(cT(dat,1),EZn,1,5,["index",xwn(n),xwn(t)]))}function jLn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function ELn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function SLn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function PLn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function CLn(n,t){var e,i,r,c,a,o;for(e=n.b.c.length,r=zq(n.b,t);2*t+1<e&&(o=c=2*t+1,(a=c+1)<e&&n.a.Ne(zq(n.b,a),zq(n.b,c))<0&&(o=a),i=o,!(n.a.Ne(r,zq(n.b,i))<0));)Y8(n.b,t,zq(n.b,i)),t=i;Y8(n.b,t,r)}function ILn(n,t,e){var i,r;return i=e.d,r=e.e,n.g[i.d]<=n.i[t.d]&&n.i[t.d]<=n.i[i.d]&&n.g[r.d]<=n.i[t.d]&&n.i[t.d]<=n.i[r.d]?!(n.i[i.d]<n.i[r.d]):n.i[i.d]<n.i[r.d]}function OLn(n,t){var e;if((e=uG(oIn(t,(jYn(),Kyt)),322))!=n)throw hv(new EM("The hierarchy aware processor "+e+" in child node "+t+" is only allowed if the root node specifies the same hierarchical processor."))}function ALn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new fV(o_t,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(sJ(Nen(n,e=uG(zrn(i,r),179)))){case 2:case 3:!c&&(c=new Zm),mv(c.c,e)}return c||(hZ(),hZ(),zot)}function LLn(n,t,i){var r,c,a,o,u,s;for(s=M0n,a=new Ww($Rn(n.b));a.a<a.c.c.length;)for(c=uG(N3(a),177),u=new Ww($Rn(t.b));u.a<u.c.c.length;)o=uG(N3(u),177),r=xhn(c.a,c.b,o.a,o.b,i),s=e.Math.min(s,r);return s}function NLn(n,t){if(!t)throw hv(new Rv);if(n.j=t,!n.d)switch(n.j.g){case 1:n.a.a=n.o.a/2,n.a.b=0;break;case 2:n.a.a=n.o.a,n.a.b=n.o.b/2;break;case 3:n.a.a=n.o.a/2,n.a.b=n.o.b;break;case 4:n.a.a=0,n.a.b=n.o.b/2}}function $Ln(n,t){var i,r;return F$(t.g,10)&&uG(t.g,10).k==(zIn(),lbt)?M0n:Q6(t)?e.Math.max(0,n.b/2-.5):(i=z4(t))?(r=uM(pK(Omn(i,(jYn(),ETt)))),e.Math.max(0,r/2-.5)):M0n}function DLn(n,t){var i,r;return F$(t.g,10)&&uG(t.g,10).k==(zIn(),lbt)?M0n:Q6(t)?e.Math.max(0,n.b/2-.5):(i=z4(t))?(r=uM(pK(Omn(i,(jYn(),ETt)))),e.Math.max(0,r/2-.5)):M0n}function xLn(n,t){var e,i,r,c;for(GB(),e=null,r=t.Kc();r.Ob();)(i=uG(r.Pb(),131)).o||(kD((c=new Hqn(R$(i.a),IG(i.a),null,uG(i.d.a.ec().Kc().Pb(),18))).c,i.a),mv(n.c,c),e&&kD(e.d,c),e=c)}function RLn(n){var t,e,i,r;for(r=Vwn(n.d,n.e).Kc();r.Ob();)for(i=uG(r.Pb(),12),e=new Ww(n.e==(KQn(),_Rt)?i.e:i.g);e.a<e.c.c.length;)v9(t=uG(N3(e),18))||t.c.i.c==t.d.i.c||(MOn(n,t),++n.f,++n.c)}function KLn(n,t){var e,i;if(t.dc())return hZ(),hZ(),zot;for(kD(i=new Zm,xwn(j1n)),e=1;e<n.f;++e)null==n.a&&fBn(n),n.a[e]&&kD(i,xwn(e));return 1==i.c.length?(hZ(),hZ(),zot):(kD(i,xwn(vZn)),Aqn(t,i))}function FLn(n,t){var e,i,r,c,a,o;e=Hjn(t,o=t.c.i.k!=(zIn(),dbt)?t.d:t.c).i,r=uG(cQ(n.k,o),125),i=n.i[e.p].a,A_(o.i)<(e.c?Ten(e.c.a,e,0):-1)?(c=r,a=i):(c=i,a=r),RKn(xS(DS(RS($S(new uk,0),4),c),a))}function _Ln(n,t,e){var i,r,c;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)(c=gTn(n,fNn(uin(e,uG(r.Pb(),17).a))))&&(!t.b&&(t.b=new f_(cFt,t,4,7)),ttn(t.b,c))}function BLn(n,t,e){var i,r,c;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)(c=gTn(n,fNn(uin(e,uG(r.Pb(),17).a))))&&(!t.c&&(t.c=new f_(cFt,t,5,8)),ttn(t.c,c))}function HLn(n,t,e){var i,r;i=t.a&n.f,t.b=n.b[i],n.b[i]=t,r=t.f&n.f,t.d=n.c[r],n.c[r]=t,e?(t.e=e.e,t.e?t.e.c=t:n.a=t,t.c=e.c,t.c?t.c.e=t:n.e=t):(t.e=n.e,t.c=null,n.e?n.e.c=t:n.a=t,n.e=t),++n.i,++n.g}function ULn(n){var t,e,i;if(t=n.Pb(),!n.Ob())return t;for(i=QA(JA(new WM,"expected one element but was: <"),t),e=0;e<4&&n.Ob();e++)QA((i.a+=TZn,i),n.Pb());throw n.Ob()&&(i.a+=", ..."),i.a+=">",hv(new vM(i.a))}function GLn(n){var t,e;return e=-n.a,t=Uhn(cT(JHt,1),N1n,28,15,[43,48,48,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&D1n,t[2]=t[2]+(e/60|0)%10&D1n,t[3]=t[3]+(e%60/10|0)&D1n,t[4]=t[4]+e%10&D1n,mvn(t,0,t.length)}function qLn(n){var t,e,i,r;for(n.g=new rpn(uG(WW(YRt),296)),i=0,KQn(),e=yRt,t=0;t<n.j.c.length;t++)(r=uG(zq(n.j,t),12)).j!=e&&(i!=t&&UV(n.g,e,new WO(xwn(i),xwn(t))),e=r.j,i=t);UV(n.g,e,new WO(xwn(i),xwn(t)))}function XLn(n){var t,e,i,r,c;for(e=0,t=new Ww(n.b);t.a<t.c.c.length;)for(r=new Ww(uG(N3(t),30).a);r.a<r.c.c.length;)for((i=uG(N3(r),10)).p=e++,c=new Ww(i.j);c.a<c.c.c.length;)uG(N3(c),12).p=e++}function zLn(n,t){var e,i,r;if(!(r=iVn((gAn(),kBt),n.Dh(),t)))throw hv(new vM(Gtt+t.xe()+qtt));PP(),uG(r,69).xk()||(r=_3(Nen(kBt,r))),i=uG((e=n.Ih(r))>=0?n.Lh(e,!0,!0):YNn(n,r,!0),160),uG(i,220).Zl(t)}function VLn(n){var t,i;return n>-0x800000000000&&n<0x800000000000?0==n?0:((t=n<0)&&(n=-n),i=t0(e.Math.floor(e.Math.log(n)/.6931471805599453)),(!t||n!=e.Math.pow(2,i))&&++i,i):dhn(Bsn(n))}function WLn(n){var t,e,i,r,c,a,o;for(c=new XL,e=new Ww(n);e.a<e.c.c.length;)a=(t=uG(N3(e),132)).a,o=t.b,c.a._b(a)||c.a._b(o)||(r=a,i=o,a.e.b+a.j.b>2&&o.e.b+o.j.b<=2&&(r=o,i=a),c.a.zc(r,c),r.q=i);return c}function QLn(n,t,e){e.Ug("Eades radial",1),e.dh(t,w7n),n.d=uG(zDn(t,(SK(),zCt)),27),n.c=uM(pK(zDn(t,(jOn(),HIt)))),n.e=aMn(uG(zDn(t,zIt),299)),n.a=_pn(uG(zDn(t,WIt),434)),n.b=PSn(uG(zDn(t,KIt),354)),UEn(n),e.dh(t,w7n)}function JLn(n,t){if(t.Ug("Target Width Setter",1),!vnn(n,(S_n(),vAt)))throw hv(new jM("A target width has to be set if the TargetWidthWidthApproximator should be used."));Myn(n,(lBn(),POt),pK(zDn(n,vAt))),t.Vg()}function YLn(n,t){var e,i,r;return zsn(i=new gMn(n),t),kfn(i,(GYn(),Kpt),t),kfn(i,(jYn(),JMt),($Pn(),cRt)),kfn(i,byt,(nMn(),ONt)),Hb(i,(zIn(),lbt)),o2(e=new lOn,i),NLn(e,(KQn(),_Rt)),o2(r=new lOn,i),NLn(r,kRt),i}function ZLn(n){switch(n.g){case 0:return new zy((ean(),_Et));case 1:return new bl;case 2:return new wl;default:throw hv(new vM("No implementation is available for the crossing minimizer "+(null!=n.f?n.f:""+n.g)))}}function nNn(n,t){var e,i,r,c;for(n.c[t.p]=!0,kD(n.a,t),c=new Ww(t.j);c.a<c.c.c.length;)for(e=new w7((r=uG(N3(c),12)).b);l$(e.a)||l$(e.b);)i=Ivn(r,uG(l$(e.a)?N3(e.a):N3(e.b),18)).i,n.c[i.p]||nNn(n,i)}function tNn(n){var t,i,r,c,a,o,u;for(o=0,i=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));i.e!=i.i.gc();)u=(t=uG(Zkn(i),27)).g,c=t.f,r=e.Math.sqrt(u*u+c*c),o=e.Math.max(r,o),a=tNn(t),o=e.Math.max(a,o);return o}function eNn(){eNn=E,gRt=new xO("OUTSIDE",0),wRt=new xO("INSIDE",1),dRt=new xO("NEXT_TO_PORT_IF_POSSIBLE",2),bRt=new xO("ALWAYS_SAME_SIDE",3),lRt=new xO("ALWAYS_OTHER_SAME_SIDE",4),pRt=new xO("SPACE_EFFICIENT",5)}function iNn(n,t,e){var i,r,c,a;return Gan(i=y6(n,(gj(),r=new Bk,!!e&&GRn(r,e),r),t),k6(t,Iet)),fCn(t,i),YDn(t,i),kLn(t,i),c=p6(t,"ports"),pRn((a=new oA(n,i)).a,a.b,c),qfn(n,t,i),vhn(n,t,i),i}function rNn(n){var t,e;return e=-n.a,t=Uhn(cT(JHt,1),N1n,28,15,[43,48,48,58,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&D1n,t[2]=t[2]+(e/60|0)%10&D1n,t[4]=t[4]+(e%60/10|0)&D1n,t[5]=t[5]+e%10&D1n,mvn(t,0,t.length)}function cNn(n){var t;return t=Uhn(cT(JHt,1),N1n,28,15,[71,77,84,45,48,48,58,48,48]),n<=0&&(t[3]=43,n=-n),t[4]=t[4]+((n/60|0)/10|0)&D1n,t[5]=t[5]+(n/60|0)%10&D1n,t[7]=t[7]+(n%60/10|0)&D1n,t[8]=t[8]+n%10&D1n,mvn(t,0,t.length)}function aNn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+oV(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function oNn(n,t){var i,r,c;for(c=vZn,r=new Ww(Ebn(t));r.a<r.c.c.length;)(i=uG(N3(r),218)).f&&!n.c[i.c]&&(n.c[i.c]=!0,c=e.Math.min(c,oNn(n,hpn(i,t))));return n.i[t.d]=n.j,n.g[t.d]=e.Math.min(c,n.j++),n.g[t.d]}function uNn(n,t){var e,i,r;for(r=uG(uG(Y9(n.r,t),21),87).Kc();r.Ob();)(i=uG(r.Pb(),117)).e.b=(e=i.b).pf((XYn(),uDt))?e.ag()==(KQn(),yRt)?-e.Mf().b-uM(pK(e.of(uDt))):uM(pK(e.of(uDt))):e.ag()==(KQn(),yRt)?-e.Mf().b:0}function sNn(n){var t,e,i,r,c,a,o;for(e=AN(n.e),c=vD(HR(D$(ON(n.e)),n.d*n.a,n.c*n.b),-.5),t=e.a-c.a,r=e.b-c.b,o=0;o<n.c;o++){for(i=t,a=0;a<n.d;a++)vpn(n.e,new gY(i,r,n.a,n.b))&&HBn(n,a,o,!1,!0),i+=n.a;r+=n.b}}function hNn(n){var t,e,i,r,c;t=n.a,e=n.b,r=n.c,i=new MO(e.e.a+e.f.a/2,e.e.b+e.f.b/2),c=new MO(r.e.a+r.f.a/2,r.e.b+r.f.b/2),s8(t,i,t.a,t.a.a),s8(t,c,t.c.b,t.c),KIn(i,uG(hyn(t,1),8),n.b.f),KIn(c,uG(hyn(t,t.b-2),8),n.c.f)}function fNn(n){var t;if(t=!1,F$(n,211))return t=!0,uG(n,211).a;if(!t&&F$(n,263)&&uG(n,263).a%1==0)return t=!0,xwn(AL(uG(n,263).a));throw hv(new SM("Id must be a string or an integer: '"+n+"'."))}function lNn(n,t){var e,i,r,c,a,o;for(c=null,r=new dV((!n.a&&(n.a=new qm(n)),n.a));u$n(r);)if(hXn(a=(e=uG(Wxn(r),58)).Dh()),null!=(i=(o=a.o)&&e.Xh(o)?d_(khn(o),e.Mh(o)):null)&&m_(i,t)){c=e;break}return c}function bNn(n,t,e){var i,r,c,a,o;if(man(e,"occurrences"),0==e)return(o=uG(Xwn(nZ(n.a),t),16))?o.gc():0;if(!(a=uG(Xwn(nZ(n.a),t),16)))return 0;if(e>=(c=a.gc()))a.$b();else for(r=a.Kc(),i=0;i<e;i++)r.Pb(),r.Qb();return c}function wNn(n,t,e){var i,r,c;return man(e,"oldCount"),man(0,"newCount"),((i=uG(Xwn(nZ(n.a),t),16))?i.gc():0)==e&&(man(0,"count"),(c=-((r=uG(Xwn(nZ(n.a),t),16))?r.gc():0))>0?HM():c<0&&bNn(n,t,-c),!0)}function dNn(n){var t,e,i,r,c,a;if(a=0,0==n.b){for(t=0,r=0,c=(i=AMn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}else a=fT(Mun(ZJ(JJ(BV(n.a),new jn),new En)));return a>0?a+n.n.d+n.n.a:0}function gNn(n){var t,e,i,r,c,a;if(a=0,0==n.b)a=fT(Mun(ZJ(JJ(BV(n.a),new Mn),new Tn)));else{for(t=0,r=0,c=(i=LMn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}return a>0?a+n.n.b+n.n.c:0}function pNn(n){var t,e;if(2!=n.c.length)throw hv(new kM("Order only allowed for two paths."));u3(0,n.c.length),t=uG(n.c[0],18),u3(1,n.c.length),e=uG(n.c[1],18),t.d.i!=e.c.i&&(n.c.length=0,mv(n.c,e),mv(n.c,t))}function mNn(n,t,e){var i;for(vN(e,t.g,t.f),kN(e,t.i,t.j),i=0;i<(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i;i++)mNn(n,uG(zrn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),i),27),uG(zrn((!e.a&&(e.a=new fV(bFt,e,10,11)),e.a),i),27))}function vNn(n,t){var i,r,c,a;for(i=(a=uG(AJ(n.b,t),127)).a,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)(r=uG(c.Pb(),117)).c&&(i.a=e.Math.max(i.a,rq(r.c)));if(i.a>0)switch(t.g){case 2:a.n.c=n.s;break;case 4:a.n.b=n.s}}function kNn(n,t){var e,i,r;return 0==(e=uG(oIn(t,(cGn(),$ft)),17).a-uG(oIn(n,$ft),17).a)?(i=YF(D$(uG(oIn(n,(mon(),zft)),8)),uG(oIn(n,Vft),8)),r=YF(D$(uG(oIn(t,zft),8)),uG(oIn(t,Vft),8)),ugn(i.a*i.b,r.a*r.b)):e}function yNn(n,t){var e,i,r;return 0==(e=uG(oIn(t,(QGn(),yCt)),17).a-uG(oIn(n,yCt),17).a)?(i=YF(D$(uG(oIn(n,(OQn(),vPt)),8)),uG(oIn(n,kPt),8)),r=YF(D$(uG(oIn(t,vPt),8)),uG(oIn(t,kPt),8)),ugn(i.a*i.b,r.a*r.b)):e}function MNn(n){var t,e;return(e=new WM).a+="e_",null!=(t=bhn(n))&&(e.a+=""+t),n.c&&n.d&&(JA((e.a+=" ",e),njn(n.c)),JA(QA((e.a+="[",e),n.c.i),"]"),JA((e.a+=Y4n,e),njn(n.d)),JA(QA((e.a+="[",e),n.d.i),"]")),e.a}function TNn(n){switch(n.g){case 0:return new Tl;case 1:return new jl;case 2:return new yl;case 3:return new kl;default:throw hv(new vM("No implementation is available for the layout phase "+(null!=n.f?n.f:""+n.g)))}}function jNn(n,t,i,r,c){var a;switch(a=0,c.g){case 1:a=e.Math.max(0,t.b+n.b-(i.b+r));break;case 3:a=e.Math.max(0,-n.b-r);break;case 2:a=e.Math.max(0,-n.a-r);break;case 4:a=e.Math.max(0,t.a+n.a-(i.a+r))}return a}function ENn(n,t,e){var i,r,c;if(e)for(c=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);c.Ob();)r=v6(e,uG(c.Pb(),17).a),vet in r.a||ket in r.a?bHn(n,r,t):JJn(n,r,t),GD(uG(cQ(n.b,jvn(r)),74))}function SNn(n){var t,e;switch(n.b){case-1:return!0;case 0:return(e=n.t)>1||-1==e||(t=bEn(n))&&(PP(),t.lk()==srt)?(n.b=-1,!0):(n.b=1,!1);default:return!1}}function PNn(n,t){var e,i,r,c;if(EYn(n),0!=n.c||123!=n.a)throw hv(new CM(rZn((t$(),bit))));if(c=112==t,i=n.d,(e=aR(n.i,125,i))<0)throw hv(new CM(rZn((t$(),wit))));return r=r1(n.i,i,e),n.d=e+1,itn(r,c,512==(512&n.e))}function CNn(n){var t,e,i,r,c,a,o;if((i=n.a.c.length)>0)for(a=n.c.d,r=vD(YF(new MO((o=n.d.d).a,o.b),a),1/(i+1)),c=new MO(a.a,a.b),e=new Ww(n.a);e.a<e.c.c.length;)(t=uG(N3(e),250)).d.a=c.a+r.a,t.d.b=c.b+r.b,JF(c,r)}function INn(n,t){var e,i,r;if(t)if(0!=(4&t.i))for(i="[]",e=t.c;;e=e.c){if(0==(4&e.i)){qan(n,r=lM((vK(e),e.o+i))),Ocn(n,r);break}i+="[]"}else qan(n,r=lM((vK(t),t.o))),Ocn(n,r);else qan(n,null),Ocn(n,null);n.hl(t)}function ONn(n,t,e,i,r){var c,a,o,u;return xA(u=fK(n,uG(r,58)))!==xA(r)?(o=uG(n.g[e],76),yD(n,e,WPn(n,e,c=R5(t,u))),uN(n.e)&&(kPn(a=VZ(n,9,c.Lk(),r,u,i,!1),new Ken(n.e,9,n.c,o,c,i,!1)),Cen(a)),u):r}function ANn(n,t,e){var i,r,c,a,o,u;for(i=uG(Y9(n.c,t),15),r=uG(Y9(n.c,e),15),c=i.fd(i.gc()),a=r.fd(r.gc());c.Sb()&&a.Sb();)if((o=uG(c.Ub(),17))!=(u=uG(a.Ub(),17)))return d$(o.a,u.a);return c.Ob()||a.Ob()?c.Ob()?1:-1:0}function LNn(n){var t,e,i,r,c,a;for(a=iR(n.c.length),r=new Ww(n);r.a<r.c.c.length;){for(i=uG(N3(r),10),c=new ek,e=new Fz(ix(Xgn(i).a.Kc(),new h));hDn(e);)(t=uG(N9(e),18)).c.i==t.d.i||FV(c,t.d.i);mv(a.c,c)}return a}function NNn(n,t){var e,i;try{return C3(n.a,t)}catch(r){if(F$(r=Ehn(r),33)){try{if(i=vUn(t,j1n,vZn),e=Mj(n.a),i>=0&&i<e.length)return e[i]}catch(c){if(!F$(c=Ehn(c),130))throw hv(c)}return null}throw hv(r)}}function $Nn(n,t){var e,i,r;if(r=iVn((gAn(),kBt),n.Dh(),t))return PP(),uG(r,69).xk()||(r=_3(Nen(kBt,r))),i=uG((e=n.Ih(r))>=0?n.Lh(e,!0,!0):YNn(n,r,!0),160),uG(i,220).Wl(t);throw hv(new vM(Gtt+t.xe()+ztt))}function DNn(){var n;return IP(),pBt?uG(jxn((MP(),l_t),Drt),2038):(ML(Sat,new Eh),yWn(),n=uG(F$(U1((MP(),l_t),Drt),560)?U1(l_t,Drt):new dJ,560),pBt=!0,HYn(n),oZn(n),vJ((pP(),k_t),n,new Bs),r2(l_t,Drt,n),n)}function xNn(n,t){var e,i,r,c;n.j=-1,uN(n.e)?(e=n.i,c=0!=n.i,z9(n,t),i=new Ken(n.e,3,n.c,null,t,e,c),r=t.zl(n.e,n.c,null),(r=yPn(n,t,r))?(r.nj(i),r.oj()):Msn(n.e,i)):(z9(n,t),(r=t.zl(n.e,n.c,null))&&r.oj())}function RNn(n,t){var e,i,r;if(r=0,(i=t[0])>=n.length)return-1;for(s3(i,n.length),e=n.charCodeAt(i);e>=48&&e<=57&&(r=10*r+(e-48),!(++i>=n.length));)s3(i,n.length),e=n.charCodeAt(i);return i>t[0]?t[0]=i:r=-1,r}function KNn(n){var t,i,r,c,a;return i=c=uG(n.a,17).a,r=a=uG(n.b,17).a,t=e.Math.max(e.Math.abs(c),e.Math.abs(a)),c<=0&&c==a?(i=0,r=a-1):c==-t&&a!=t?(i=a,r=c,a>=0&&++i):(i=-a,r=c),new WO(xwn(i),xwn(r))}function FNn(n,t,e,i){var r,c,a,o,u,s;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)if(u=c,s=o=a-t.k+i,u+=n.j,s+=n.k,u>=0&&s>=0&&u<n.o&&s<n.p&&(!iTn(t,r,a)&&_Mn(n,c,o)||eTn(t,r,a)&&!BMn(n,c,o)))return!0;return!1}function _Nn(n,t,e){var i,r,c,a;c=n.c,a=n.d,r=(Gfn(Uhn(cT(PNt,1),zZn,8,0,[c.i.n,c.n,c.a])).b+Gfn(Uhn(cT(PNt,1),zZn,8,0,[a.i.n,a.n,a.a])).b)/2,i=null,i=c.j==(KQn(),kRt)?new MO(t+c.i.c.c.a+e,r):new MO(t-e,r),sR(n.a,0,i)}function BNn(n){var t,e,i;for(t=null,e=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c)])));hDn(e);)if(i=lCn(uG(N9(e),84)),t){if(t!=i)return!1}else t=i;return!0}function HNn(n,t,e){var i;if(++n.j,t>=n.i)throw hv(new dM(zet+t+Vet+n.i));if(e>=n.i)throw hv(new dM(Wet+e+Vet+n.i));return i=n.g[e],t!=e&&(t<e?qGn(n.g,t,n.g,t+1,e-t):qGn(n.g,e+1,n.g,e,t-e),uQ(n.g,t,i),n.Pi(t,i,e),n.Ni()),i}function UNn(n,t,e){var i;if(i=uG(n.c.xc(t),16))return!!i.Fc(e)&&(++n.d,!0);if((i=n.ic(t)).Fc(e))return++n.d,n.c.zc(t,i),!0;throw hv(new x9("New Collection violated the Collection spec"))}function GNn(n){var t,e,i;return n<0?0:0==n?32:(e=16-(t=(i=-(n>>16))>>16&16),e+=t=(i=(n>>=t)-256)>>16&8,e+=t=(i=(n<<=t)-j0n)>>16&4,(e+=t=(i=(n<<=t)-VZn)>>16&2)+2-(t=(i=(n<<=t)>>14)&~(i>>1)))}function qNn(n){var t,e,i,r;for(lZ(),aft=new Zm,cft=new Ym,rft=new Zm,!n.a&&(n.a=new fV(bFt,n,10,11)),JQn(t=n.a),r=new DD(t);r.e!=r.i.gc();)i=uG(Zkn(r),27),-1==Ten(aft,i,0)&&(e=new Zm,kD(rft,e),skn(i,e));return rft}function XNn(n,t,e){var i,r,c,a;n.a=e.b.d,F$(t,326)?(z8(c=COn(r=JFn(uG(t,74),!1,!1)),i=new Kd(n)),sqn(c,r),null!=t.of((XYn(),L$t))&&z8(uG(t.of(L$t),75),i)):((a=uG(t,422)).rh(a.nh()+n.a.a),a.sh(a.oh()+n.a.b))}function zNn(n,t){var e,i,r;for(r=new Zm,i=Fkn(t.a,0);i.b!=i.d.c;)(e=uG(I6(i),65)).c.g==n.g&&xA(oIn(e.b,(QGn(),ACt)))!==xA(oIn(e.c,ACt))&&!o9(new fX(null,new h3(r,16)),new kp(e))&&mv(r.c,e);return f$(r,new ja),r}function VNn(n,t,e){var i,r,c,a;return F$(t,153)&&F$(e,153)?(c=uG(t,153),a=uG(e,153),n.a[c.a][a.a]+n.a[a.a][c.a]):F$(t,250)&&F$(e,250)&&(i=uG(t,250),r=uG(e,250),i.a==r.a)?uG(oIn(r.a,(cGn(),$ft)),17).a:0}function WNn(n,t){var i,r,c,a,o,u,s,h;for(h=uM(pK(oIn(t,(jYn(),ITt)))),s=n[0].n.a+n[0].o.a+n[0].d.c+h,u=1;u<n.length;u++)r=n[u].n,c=n[u].o,i=n[u].d,(a=r.a-i.b-s)<0&&(r.a-=a),(o=t.f).a=e.Math.max(o.a,r.a+c.a),s=r.a+c.a+i.c+h}function QNn(n,t){var e,i,r,c,a,o;return i=uG(uG(cQ(n.g,t.a),42).a,68),r=uG(uG(cQ(n.g,t.b),42).a,68),(e=vzn(c=i.b,a=r.b))>=0?e:(o=NQ(YF(new MO(a.c+a.b/2,a.d+a.a/2),new MO(c.c+c.b/2,c.d+c.a/2))),-(oGn(c,a)-1)*o)}function JNn(n,t,e){var i;kS(new fX(null,(!e.a&&(e.a=new fV(oFt,e,6,6)),new h3(e.a,16))),new zO(n,t)),kS(new fX(null,(!e.n&&(e.n=new fV(lFt,e,1,7)),new h3(e.n,16))),new VO(n,t)),(i=uG(zDn(e,(XYn(),L$t)),75))&&fun(i,n,t)}function YNn(n,t,e){var i,r,c;if(c=iVn((gAn(),kBt),n.Dh(),t))return PP(),uG(c,69).xk()||(c=_3(Nen(kBt,c))),r=uG((i=n.Ih(c))>=0?n.Lh(i,!0,!0):YNn(n,c,!0),160),uG(r,220).Sl(t,e);throw hv(new vM(Gtt+t.xe()+ztt))}function ZNn(n,t,e,i){var r,c,a,o,u;if(r=n.d[t])if(c=r.g,u=r.i,null!=i){for(o=0;o<u;++o)if((a=uG(c[o],136)).Bi()==e&&udn(i,a.ld()))return a}else for(o=0;o<u;++o)if(xA((a=uG(c[o],136)).ld())===xA(i))return a;return null}function n$n(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new fV(o_t,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(sJ(Nen(n,e=uG(zrn(i,r),179)))){case 4:case 5:case 6:!c&&(c=new Zm),mv(c.c,e)}return c||(hZ(),hZ(),zot)}function t$n(n,t){var e;if(t<0)throw hv(new wM("Negative exponent"));if(0==t)return xot;if(1==t||Cpn(n,xot)||Cpn(n,_ot))return n;if(!aDn(n,0)){for(e=1;!aDn(n,e);)++e;return j5(Ypn(e*t),t$n($9(n,e),t))}return cCn(n,t)}function e$n(n,t){var e,i,r;if(xA(n)===xA(t))return!0;if(null==n||null==t)return!1;if(n.length!=t.length)return!1;for(e=0;e<n.length;++e)if(i=n[e],r=t[e],!(xA(i)===xA(r)||null!=i&&udn(i,r)))return!1;return!0}function i$n(n){var t,e,i;for(GS(),this.b=Dlt,this.c=(xdn(),ZDt),this.f=(US(),Alt),this.a=n,ET(this,new Tt),fKn(this),i=new Ww(n.b);i.a<i.c.c.length;)(e=uG(N3(i),86)).d||(t=new Zvn(Uhn(cT(xlt,1),EZn,86,0,[e])),kD(n.a,t))}function r$n(n,t,e){var i,r,c,a,o,u;if(!n||0==n.c.length)return null;for(c=new c1(t,!e),r=new Ww(n);r.a<r.c.c.length;)i=uG(N3(r),72),LOn(c,(zS(),new Xd(i)));return(a=c.i).a=(u=c.n,c.e.b+u.d+u.a),a.b=(o=c.n,c.e.a+o.b+o.c),c}function c$n(n){var t,e,i,r,c,a,o;for(zL(o=D4(n.a),new Pe),e=null,c=0,a=(r=o).length;c<a&&(i=r[c]).k==(zIn(),lbt);++c)(t=uG(oIn(i,(GYn(),Fpt)),64))!=(KQn(),_Rt)&&t!=kRt||(e&&uG(oIn(e,Vpt),15).Fc(i),e=i)}function a$n(n,t,e){var i,r,c,a,o,u;u3(t,n.c.length),o=uG(n.c[t],339),i7(n,t),o.b/2>=e&&(i=t,c=(u=(o.c+o.a)/2)-e,o.c<=u-e&&GX(n,i++,new OU(o.c,c)),(a=u+e)<=o.a&&(r=new OU(a,o.a),o3(i,n.c.length),pC(n.c,i,r)))}function o$n(n,t,e){var i,r,c,a;if(!t.dc()){for(i=new lS,a=t.Kc();a.Ob();)for(c=uG(a.Pb(),39),vJ(n.a,xwn(c.g),xwn(e)),r=new Tp(Fkn(new Mp(c).a.d,0));Jj(r.a);)s8(i,uG(I6(r.a),65).c,i.c.b,i.c);o$n(n,i,e+1)}}function u$n(n){var t;if(n.c||null!=n.g){if(null==n.g)return!0;if(0==n.i)return!1;t=uG(n.g[n.i-1],51)}else n.d=n.bj(n.f),ttn(n,n.d),t=n.d;return t==n.b&&null.Vm>=null.Um()?(Wxn(n),u$n(n)):t.Ob()}function s$n(n){if(this.a=n,n.c.i.k==(zIn(),lbt))this.c=n.c,this.d=uG(oIn(n.c.i,(GYn(),Fpt)),64);else{if(n.d.i.k!=lbt)throw hv(new vM("Edge "+n+" is not an external edge."));this.c=n.d,this.d=uG(oIn(n.d.i,(GYn(),Fpt)),64)}}function h$n(n,t){var e,i,r;r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,3,r,n.b)),t?t!=n&&(qon(n,t.zb),Icn(n,t.d),Uan(n,null==(e=null==(i=t.c)?t.zb:i)||m_(e,t.zb)?null:e)):(qon(n,null),Icn(n,0),Uan(n,null))}function f$n(n,t){var e;this.e=(ZW(),WW(n),ZW(),Emn(n)),this.c=(WW(t),Emn(t)),FD(this.e.Rd().dc()==this.c.Rd().dc()),this.d=Qgn(this.e),this.b=Qgn(this.c),e=Jq(dat,[zZn,EZn],[5,1],5,[this.e.Rd().gc(),this.c.Rd().gc()],2),this.a=e,wan(this)}function l$n(n){var t=(!Rat&&(Rat=mJn()),Rat);return'"'+n.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,(function(n){return z1(n,t)}))+'"'}function b$n(n,t,i,r,c,a){var o,u,s,h,f;if(0!=c)for(xA(n)===xA(i)&&(n=n.slice(t,t+c),t=0),s=i,u=t,h=t+c;u<h;)c=(o=e.Math.min(u+1e4,h))-u,(f=n.slice(u,o)).splice(0,0,r,a?c:0),Array.prototype.splice.apply(s,f),u=o,r+=c}function w$n(n){var t,e;for(fZ(),this.b=Gut,this.c=Xut,this.g=(_S(),Uut),this.d=(xdn(),ZDt),this.a=n,hKn(this),e=new Ww(n.b);e.a<e.c.c.length;)!(t=uG(N3(e),60)).a&&Mx(Xcn(new fk,Uhn(cT(zut,1),EZn,60,0,[t])),n),t.e=new qZ(t.d)}function d$n(n){var t,e,i,r,c;for(r=n.e.c.length,i=Inn(yat,H3n,15,r,0,1),c=new Ww(n.e);c.a<c.c.c.length;)i[uG(N3(c),153).a]=new lS;for(e=new Ww(n.c);e.a<e.c.c.length;)i[(t=uG(N3(e),289)).c.a].Fc(t),i[t.d.a].Fc(t);return i}function g$n(n,t){var e,i,r,c,a;if(t>=(a=null==(e=uG(Lsn(n.a,4),129))?0:e.length))throw hv(new w_(t,a));return r=e[t],1==a?i=null:(qGn(e,0,i=Inn(xFt,Uit,424,a-1,0,1),0,t),(c=a-t-1)>0&&qGn(e,t+1,i,t,c)),Pkn(n,i),GAn(n,t,r),r}function p$n(n){var t,e;if(n.f){for(;n.n<n.o;){if(F$(e=(t=uG(n.j?n.j.$i(n.n):n.k.Xb(n.n),76)).Lk(),102)&&0!=(uG(e,19).Bb&Qtt)&&(!n.e||e.pk()!=tFt||0!=e.Lj())&&null!=t.md())return!0;++n.n}return!1}return n.n<n.o}function m$n(){m$n=E,NBt=uG(zrn(gZ((yj(),RBt).qb),6),35),OBt=uG(zrn(gZ(RBt.qb),3),35),ABt=uG(zrn(gZ(RBt.qb),4),35),LBt=uG(zrn(gZ(RBt.qb),5),19),qSn(NBt),qSn(OBt),qSn(ABt),qSn(LBt),$Bt=new IM(Uhn(cT(o_t,1),krt,179,0,[NBt,OBt]))}function v$n(n,t){var e;this.d=new Nk,this.b=t,this.e=new eN(t.Lf()),e=n.u.Hc((eNn(),dRt)),n.u.Hc(wRt)?n.D?this.a=e&&!t.bg():this.a=!0:n.u.Hc(gRt)?this.a=!!e&&!(t.Uf().Kc().Ob()||t.Wf().Kc().Ob()):this.a=!1}function k$n(n,t){var e,i,r,c;for(e=n.o.a,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)(r=uG(c.Pb(),117)).e.a=(i=r.b).pf((XYn(),uDt))?i.ag()==(KQn(),_Rt)?-i.Mf().a-uM(pK(i.of(uDt))):e+uM(pK(i.of(uDt))):i.ag()==(KQn(),_Rt)?-i.Mf().a:e}function y$n(n,t){var e,i,r;e=uG(oIn(n,(jYn(),Byt)),88),r=uG(zDn(t,eTt),64),(i=uG(oIn(n,JMt),101))!=($Pn(),uRt)&&i!=sRt?r==(KQn(),FRt)&&(r=RGn(t,e))==FRt&&(r=Ipn(e)):r=lzn(t)>0?Ipn(e):Gdn(Ipn(e)),Myn(t,eTt,r)}function M$n(n,t){t.Ug("Partition preprocessing",1),kS(uG(l8(JJ(sin(JJ(new fX(null,new h3(n.a,16)),new mi),new vi),new ki),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Oc(),new yi),t.Vg()}function T$n(n,t){var e,i,r,c,a;for(a=n.j,t.a!=t.b&&f$(a,new Yr),r=a.c.length/2|0,i=0;i<r;i++)u3(i,a.c.length),(c=uG(a.c[i],113)).c&&NLn(c.d,t.a);for(e=r;e<a.c.length;e++)u3(e,a.c.length),(c=uG(a.c[e],113)).c&&NLn(c.d,t.b)}function j$n(n,t,e){var i,r,c;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?((c=Rz(i.a,r.a))<0?sHn(n,t,e):c>0&&sHn(n,e,t),c):null!=i.a?(sHn(n,t,e),-1):null!=r.a?(sHn(n,e,t),1):0}function E$n(n,t){var e,i,r,c,a;for(r=t.b.b,n.a=Inn(yat,H3n,15,r,0,1),n.b=Inn(ZHt,B2n,28,r,16,1),a=Fkn(t.b,0);a.b!=a.d.c;)c=uG(I6(a),39),n.a[c.g]=new lS;for(i=Fkn(t.a,0);i.b!=i.d.c;)e=uG(I6(i),65),n.a[e.b.g].Fc(e),n.a[e.c.g].Fc(e)}function S$n(n,t){var e,i,r,c;n.Pj()?(e=n.Ej(),c=n.Qj(),++n.j,n.qj(e,n.Zi(e,t)),i=n.Ij(3,null,t,e,c),n.Mj()&&(r=n.Nj(t,null))?(r.nj(i),r.oj()):n.Jj(i)):(vQ(n,t),n.Mj()&&(r=n.Nj(t,null))&&r.oj())}function P$n(n,t,e){var i,r,c;n.Pj()?(c=n.Qj(),edn(n,t,e),i=n.Ij(3,null,e,t,c),n.Mj()?(r=n.Nj(e,null),n.Tj()&&(r=n.Uj(e,r)),r?(r.nj(i),r.oj()):n.Jj(i)):n.Jj(i)):(edn(n,t,e),n.Mj()&&(r=n.Nj(e,null))&&r.oj())}function C$n(n,t){var e,i,r,c,a;for(a=VKn(n.e.Dh(),t),r=new ls,e=uG(n.g,124),c=n.i;--c>=0;)i=e[c],a.am(i.Lk())&&ttn(r,i);!PJn(n,r)&&uN(n.e)&&Yv(n,t.Jk()?VZ(n,6,t,(hZ(),zot),null,-1,!1):VZ(n,t.tk()?2:1,t,null,null,-1,!1))}function I$n(n,t){var e,i,r,c;return n.a==(RIn(),Vgt)||(r=t.a.c,e=t.a.c+t.a.b,!(t.j&&(c=(i=t.A).c.c.a-i.o.a/2,r-(i.n.a+i.o.a)>c)||t.q&&(c=(i=t.C).c.c.a-i.o.a/2,i.n.a-e>c)))}function O$n(n){var t,e,i,r,c,a;for(e2(),e=new u8,i=new Ww(n.e.b);i.a<i.c.c.length;)for(c=new Ww(uG(N3(i),30).a);c.a<c.c.c.length;)r=uG(N3(c),10),(t=uG(ain(e,a=n.g[r.p]),15))||Akn(e,a,t=new Zm),t.Fc(r);return e}function A$n(n){var t;return 0!=(64&n.Db)?vxn(n):((t=new fx(vxn(n))).a+=" (startX: ",Oj(t,n.j),t.a+=", startY: ",Oj(t,n.k),t.a+=", endX: ",Oj(t,n.b),t.a+=", endY: ",Oj(t,n.c),t.a+=", identifier: ",VA(t,n.d),t.a+=")",t.a)}function L$n(n){var t;return 0!=(64&n.Db)?Wwn(n):((t=new fx(Wwn(n))).a+=" (ordered: ",Lj(t,0!=(256&n.Bb)),t.a+=", unique: ",Lj(t,0!=(512&n.Bb)),t.a+=", lowerBound: ",Aj(t,n.s),t.a+=", upperBound: ",Aj(t,n.t),t.a+=")",t.a)}function N$n(n,t,e,i,r,c,a,o){var u;return F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),4),qon(n,e),n.f=i,Qdn(n,r),Ydn(n,c),Wdn(n,a),Jdn(n,!1),mdn(n,!0),Cgn(n,o),ddn(n,!0),Pcn(n,0),n.b=0,Ccn(n,1),(u=CCn(n,t,null))&&u.oj(),Sgn(n,!1),n}function $$n(n,t){var i,r;return uG(U1(n.a,t),525)||(i=new e9(t),t9(),B_(i,$$n(n,r1(r=Nut?null:i.c,0,e.Math.max(0,ax(r,$Cn(46)))))),0==(Nut?null:i.c).length&&RK(i,new G),r2(n.a,Nut?null:i.c,i),i)}function D$n(n,t){var e;n.b=t,n.g=new Zm,e=q$n(n.b),n.e=e,n.f=e,n.c=oM(gK(oIn(n.b,(MEn(),est)))),n.a=pK(oIn(n.b,(XYn(),c$t))),null==n.a&&(n.a=1),uM(n.a)>1?n.e*=uM(n.a):n.f/=uM(n.a),_bn(n),Vvn(n),EBn(n),kfn(n.b,(ryn(),Qht),n.g)}function x$n(n,t,e){var i,r,c,a,o;for(i=0,o=e,t||(i=e*(n.c.length-1),o*=-1),c=new Ww(n);c.a<c.c.c.length;){for(kfn(r=uG(N3(c),10),(jYn(),byt),(nMn(),ONt)),r.o.a=i,a=yOn(r,(KQn(),kRt)).Kc();a.Ob();)uG(a.Pb(),12).n.a=i;i+=o}}function R$n(n,t,e){var i,r,c,a,o,u;return(o=n.pl(e))!=e?(a=n.g[t],u=o,yD(n,t,n.Zi(t,u)),c=a,n.Ri(t,u,c),n.al()&&(i=e,r=n.Oj(i,null),!uG(o,54).Ph()&&(r=n.Nj(u,r)),r&&r.oj()),uN(n.e)&&Yv(n,n.Ij(9,e,o,t,!1)),o):e}function K$n(n,t){var e,i,r;for(e=new Ww(n.a.a);e.a<e.c.c.length;)uG(N3(e),194).g=!0;for(r=new Ww(n.a.b);r.a<r.c.c.length;)(i=uG(N3(r),86)).k=oM(gK(n.e.Kb(new WO(i,t)))),i.d.g=i.d.g&oM(gK(n.e.Kb(new WO(i,t))));return n}function F$n(n,t){var e;if(0!=n.c.length){if(2==n.c.length)Gqn((u3(0,n.c.length),uG(n.c[0],10)),(Ajn(),$xt)),Gqn((u3(1,n.c.length),uG(n.c[1],10)),Dxt);else for(e=new Ww(n);e.a<e.c.c.length;)Gqn(uG(N3(e),10),t);n.c.length=0}}function _$n(n){var t,e,i,r,c;if(e=new nB(t=uG(Mj(YRt),9),uG(MF(t,t.length),9),0),c=uG(oIn(n,(GYn(),lmt)),10))for(r=new Ww(c.j);r.a<r.c.c.length;)xA(oIn(i=uG(N3(r),12),rmt))===xA(n)&&Dx(new w7(i.b))&&Mon(e,i.j);return e}function B$n(n,t,e){var i,r,c,a;if(!n.d[e.p]){for(i=new Fz(ix(Xgn(e).a.Kc(),new h));hDn(i);){for(c=new Fz(ix(qgn(a=uG(N9(i),18).d.i).a.Kc(),new h));hDn(c);)(r=uG(N9(c),18)).c.i==t&&(n.a[r.p]=!0);B$n(n,t,a)}n.d[e.p]=!0}}function H$n(n,t){var e,i,r,c,a,o,u;if(1==(i=Cdn(254&n.Db)))n.Eb=null;else if(c=Kcn(n.Eb),2==i)r=jTn(n,t),n.Eb=c[0==r?1:0];else{for(a=Inn(dat,EZn,1,i-1,5,1),e=2,o=0,u=0;e<=128;e<<=1)e==t?++o:0!=(n.Db&e)&&(a[u++]=c[o++]);n.Eb=a}n.Db&=~t}function U$n(n){var t;switch(t=0,n){case 105:t=2;break;case 109:t=8;break;case 115:t=4;break;case 120:t=16;break;case 117:t=32;break;case 119:t=64;break;case 70:t=256;break;case 72:t=128;break;case 88:t=512;break;case 44:t=w1n}return t}function G$n(n,t,e,i,r){var c,a,o,u;if(xA(n)!==xA(t)||i!=r)for(o=0;o<i;o++){for(a=0,c=n[o],u=0;u<r;u++)a=Lgn(Lgn(Ngn(E3(c,L0n),E3(t[u],L0n)),E3(e[o+u],L0n)),E3(pz(a),L0n)),e[o+u]=pz(a),a=Dz(a,32);e[o+r]=pz(a)}else _Un(n,i,e)}function q$n(n){var t,i,r,c,a,o,u,s,h,f,l;for(f=0,h=0,u=(c=n.a).a.gc(),r=c.a.ec().Kc();r.Ob();)(i=uG(r.Pb(),567)).b&&sXn(i),f+=(l=(t=i.a).a)+(o=t.b),h+=l*o;return s=e.Math.sqrt(400*u*h-4*h+f*f)+f,0==(a=2*(100*u-1))?s:s/a}function X$n(n,t){0!=t.b&&(isNaN(n.s)?n.s=uM((MK(0!=t.b),pK(t.a.a.c))):n.s=e.Math.min(n.s,uM((MK(0!=t.b),pK(t.a.a.c)))),isNaN(n.c)?n.c=uM((MK(0!=t.b),pK(t.c.b.c))):n.c=e.Math.max(n.c,uM((MK(0!=t.b),pK(t.c.b.c)))))}function z$n(n){var t,e,i;for(t=null,e=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c)])));hDn(e);)if(i=lCn(uG(N9(e),84)),t){if(t!=R0(i))return!0}else t=R0(i);return!1}function V$n(n,t){var e,i,r,c;n.Pj()?(e=n.i,c=n.Qj(),z9(n,t),i=n.Ij(3,null,t,e,c),n.Mj()?(r=n.Nj(t,null),n.Tj()&&(r=n.Uj(t,r)),r?(r.nj(i),r.oj()):n.Jj(i)):n.Jj(i)):(z9(n,t),n.Mj()&&(r=n.Nj(t,null))&&r.oj())}function W$n(n,t){var e,i,r;if(!_V(n.a,t.b))throw hv(new kM("Invalid hitboxes for scanline overlap calculation."));for(r=!1,i=n.a.a.ec().Kc();i.Ob();)if(e=uG(i.Pb(),68),ofn(t.b,e))nj(n.b.a,t.b,e),r=!0;else if(r)break}function Q$n(n){var t;if(!n.a)throw hv(new kM("IDataType class expected for layout option "+n.f));if(null==(t=f5(n.a)))throw hv(new kM("Couldn't create new instance of property '"+n.f+"'. "+Rnt+(vK($Ft),$Ft.k)+Knt));return uG(t,423)}function J$n(n){var t,e,i,r,c;return(c=n.Ph())&&c.Vh()&&(r=mwn(n,c))!=c?(e=n.Fh(),i=(t=n.Fh())>=0?n.Ah(null):n.Ph().Th(n,-1-t,null,null),n.Bh(uG(r,54),e),i&&i.oj(),n.vh()&&n.wh()&&e>-1&&Msn(n,new lV(n,9,e,c,r)),r):c}function Y$n(n,t){var e,i,r,c,a;for(c=n.b.Ce(t),i=null==(e=n.a.get(c))?Inn(dat,EZn,1,0,5,1):e,a=0;a<i.length;a++)if(r=i[a],n.b.Be(t,r.ld()))return 1==i.length?(i.length=0,PF(n.a,c)):i.splice(a,1),--n.c,++n.b.g,r.md();return null}function Z$n(n){var t,e,i,r,c,a,o;for(c=0,r=n.f.e,e=0;e<r.c.length;++e)for(u3(e,r.c.length),a=uG(r.c[e],153),i=e+1;i<r.c.length;++i)u3(i,r.c.length),o=uG(r.c[i],153),t=atn(a.d,o.d)-n.a[a.a][o.a],c+=n.i[a.a][o.a]*t*t;return c}function nDn(n,t){var e;if(!vR(t,(jYn(),gMt))&&(e=oEn(uG(oIn(t,Uwt),371),uG(oIn(n,gMt),171)),kfn(t,Uwt,e),!hDn(new Fz(ix(Ggn(t).a.Kc(),new h)))))switch(e.g){case 1:kfn(t,gMt,(Gpn(),Cmt));break;case 2:kfn(t,gMt,(Gpn(),Omt))}}function tDn(n,t){var e;mBn(n),n.a=(e=new rT,kS(new fX(null,new h3(t.d,16)),new Dg(e)),e),WBn(n,uG(oIn(t.b,(jYn(),Yyt)),349)),Qyn(n),jDn(n),gEn(n),Jyn(n),Hzn(n,t),kS(sin(new fX(null,y4(_W(n.b).a)),new Dr),new xr),t.a=!1,n.a=null}function eDn(){eDn=E,XPt=new mL(J9n,(qx(),!1)),zPt=new mL(Y9n,7),xwn(0),ZPt=new mL(Z9n,xwn(0)),QPt=new mL(n7n,xwn(-1)),mbn(),nCt=new mL(t7n,tCt=xCt),Pln(),VPt=new mL(e7n,WPt=wPt),i3(),JPt=new mL(i7n,YPt=_Ct)}function iDn(){iIn.call(this,aet,(gj(),xKt)),this.p=null,this.a=null,this.f=null,this.n=null,this.g=null,this.c=null,this.i=null,this.j=null,this.d=null,this.b=null,this.e=null,this.k=null,this.o=null,this.s=null,this.q=!1,this.r=!1}function rDn(){rDn=E,jFt=new fA(F6n,0),yFt=new fA("INSIDE_SELF_LOOPS",1),MFt=new fA("MULTI_EDGES",2),kFt=new fA("EDGE_LABELS",3),TFt=new fA("PORTS",4),mFt=new fA("COMPOUND",5),pFt=new fA("CLUSTERS",6),vFt=new fA("DISCONNECTED",7)}function cDn(n,t,e){var i,r,c;n.Pj()?(c=n.Qj(),++n.j,n.qj(t,n.Zi(t,e)),i=n.Ij(3,null,e,t,c),n.Mj()&&(r=n.Nj(e,null))?(r.nj(i),r.oj()):n.Jj(i)):(++n.j,n.qj(t,n.Zi(t,e)),n.Mj()&&(r=n.Nj(e,null))&&r.oj())}function aDn(n,t){var e,i,r;if(0==t)return 0!=(1&n.a[0]);if(t<0)throw hv(new wM("Negative bit address"));if((r=t>>5)>=n.d)return n.e<0;if(e=n.a[r],t=1<<(31&t),n.e<0){if(r<(i=_un(n)))return!1;e=i==r?-e:~e}return 0!=(e&t)}function oDn(n,t,e,i){var r;uG(e.b,68),uG(e.b,68),uG(i.b,68),uG(i.b,68),RG(r=YF(D$(uG(e.b,68).c),uG(i.b,68).c),LLn(uG(e.b,68),uG(i.b,68),r)),uG(i.b,68),uG(i.b,68),uG(i.b,68).c.a,r.a,uG(i.b,68).c.b,r.b,uG(i.b,68),Prn(i.a,new $U(n,t,i))}function uDn(n,t){var e,i,r,c,a,o,u;if(c=t.e)for(e=J$n(c),i=uG(n.g,689),a=0;a<n.i;++a)if(PMn(u=i[a])==e&&(!u.d&&(u.d=new MD(g_t,u,1)),r=u.d,(o=uG(e.Mh(PHn(c,c.Cb,c.Db>>16)),15).dd(c))<r.i))return uDn(n,uG(zrn(r,o),89));return t}function sDn(n,t,e){var i,r=sZn,c=r[n],a=c instanceof Array?c[0]:null;c&&!a?uZn=c:(!(i=t&&t.prototype)&&(i=sZn[t]),(uZn=o0(i)).Sm=e,!t&&(uZn.Tm=j),r[n]=uZn);for(var o=3;o<arguments.length;++o)arguments[o].prototype=uZn;a&&(uZn.Rm=a)}function hDn(n){for(var t;!uG(WW(n.a),51).Ob();){if(n.d=Mln(n),!n.d)return!1;if(n.a=uG(n.d.Pb(),51),F$(n.a,37)){if(t=uG(n.a,37),n.a=t.a,!n.b&&(n.b=new ND),A6(n.b,n.d),t.b)for(;!LM(t.b);)A6(n.b,uG(RV(t.b),51));n.d=t.d}}return!0}function fDn(n,t){var e,i,r,c;for(r=1,t.j=!0,c=null,i=new Ww(Ebn(t));i.a<i.c.c.length;)e=uG(N3(i),218),n.c[e.c]||(n.c[e.c]=!0,c=hpn(e,t),e.f?r+=fDn(n,c):c.j||e.a!=e.e.e-e.d.e||(e.f=!0,FV(n.p,e),r+=fDn(n,c)));return r}function lDn(n){var t,i,r;for(i=new Ww(n.a.a.b);i.a<i.c.c.length;)t=uG(N3(i),86),tJ(0),(r=0)>0&&((!hN(n.a.c)||!t.n.d)&&(!fN(n.a.c)||!t.n.b)&&(t.g.d+=e.Math.max(0,r/2-.5)),(!hN(n.a.c)||!t.n.a)&&(!fN(n.a.c)||!t.n.c)&&(t.g.a-=r-1))}function bDn(n){var t,i,r,c,a;if(a=VUn(n,c=new Zm),t=uG(oIn(n,(GYn(),lmt)),10))for(r=new Ww(t.j);r.a<r.c.c.length;)xA(oIn(i=uG(N3(r),12),rmt))===xA(n)&&(a=e.Math.max(a,VUn(i,c)));return 0==c.c.length||kfn(n,emt,a),-1!=a?c:null}function wDn(n,t,e){var i,r,c,a,o,u;r=(i=(c=uG(zq(t.e,0),18).c).i).k,o=(a=(u=uG(zq(e.g,0),18).d).i).k,r==(zIn(),wbt)?kfn(n,(GYn(),Zpt),uG(oIn(i,Zpt),12)):kfn(n,(GYn(),Zpt),c),kfn(n,(GYn(),nmt),o==wbt?uG(oIn(a,nmt),12):u)}function dDn(n){var t,e,i;this.c=n,i=uG(oIn(n,(jYn(),Byt)),88),t=uM(pK(oIn(n,dyt))),e=uM(pK(oIn(n,KTt))),i==(xdn(),JDt)||i==YDt||i==ZDt?this.b=t*e:this.b=1/(t*e),this.j=uM(pK(oIn(n,STt))),this.e=uM(pK(oIn(n,ETt))),this.f=n.b.c.length}function gDn(n,t){var e,i,r,c,a;return t&=63,(i=0!=((e=n.h)&b0n))&&(e|=-1048576),t<22?(a=e>>t,c=n.m>>t|e<<22-t,r=n.l>>t|n.m<<22-t):t<44?(a=i?l0n:0,c=e>>t-22,r=n.m>>t-22|e<<44-t):(a=i?l0n:0,c=i?f0n:0,r=e>>t-44),p$(r&f0n,c&f0n,a&l0n)}function pDn(n){var t,i,r,c,a,o;for(this.c=new Zm,this.d=n,r=M0n,c=M0n,t=T0n,i=T0n,o=Fkn(n,0);o.b!=o.d.c;)a=uG(I6(o),8),r=e.Math.min(r,a.a),c=e.Math.min(c,a.b),t=e.Math.max(t,a.a),i=e.Math.max(i,a.b);this.a=new gY(r,c,t-r,i-c)}function mDn(n,t){var e,i,r,c;for(i=new Ww(n.b);i.a<i.c.c.length;)for(c=new Ww(uG(N3(i),30).a);c.a<c.c.c.length;)for((r=uG(N3(c),10)).k==(zIn(),bbt)&&Gqn(r,t),e=new Fz(ix(Xgn(r).a.Kc(),new h));hDn(e);)Nhn(uG(N9(e),18),t)}function vDn(n,t){var e,i,r;for(t.Ug("Layer constraint preprocessing",1),e=new Zm,r=new N4(n.a,0);r.b<r.d.gc();)MK(r.b<r.d.gc()),sfn(i=uG(r.d.Xb(r.c=r.b++),10))&&(GPn(i),mv(e.c,i),LQ(r));0==e.c.length||kfn(n,(GYn(),Upt),e),t.Vg()}function kDn(n){var t,e;for(n.e=Inn(YHt,W1n,28,n.p.c.length,15,1),n.k=Inn(YHt,W1n,28,n.p.c.length,15,1),e=new Ww(n.p);e.a<e.c.c.length;)t=uG(N3(e),10),n.e[t.p]=x5(new Fz(ix(qgn(t).a.Kc(),new h))),n.k[t.p]=x5(new Fz(ix(Xgn(t).a.Kc(),new h)))}function yDn(n){var t,e,i,r,c;for(i=0,n.q=new Zm,t=new ek,c=new Ww(n.p);c.a<c.c.c.length;){for((r=uG(N3(c),10)).p=i,e=new Fz(ix(Xgn(r).a.Kc(),new h));hDn(e);)FV(t,uG(N9(e),18).d.i);t.a.Bc(r),kD(n.q,new oX(t)),t.a.$b(),++i}}function MDn(n,t){var e,i,r,c,a,o,u,s,h;if(n.a.f>0&&F$(t,44)&&(n.a._j(),c=null==(u=(s=uG(t,44)).ld())?0:Hon(u),a=iF(n.a,c),e=n.a.d[a]))for(i=uG(e.g,379),h=e.i,o=0;o<h;++o)if((r=i[o]).Bi()==c&&r.Fb(s))return MDn(n,s),!0;return!1}function TDn(n){var t,e,i,r,c,a,o;if((t=n.qi(Drt))&&null!=(o=mK(Lmn((!t.b&&(t.b=new XR((YYn(),H_t),wBt,t)),t.b),"settingDelegates")))){for(e=new Zm,c=0,a=(r=WGn(o,"\\w+")).length;c<a;++c)i=r[c],mv(e.c,i);return e}return hZ(),hZ(),zot}function jDn(n){var t,e,i,r;for(r=uG(Y9(n.a,(gPn(),ddt)),15).Kc();r.Ob();)pW(n,i=uG(r.Pb(),105),(e=(t=kz(i.k)).Hc((KQn(),yRt))?t.Hc(kRt)?t.Hc(KRt)?t.Hc(_Rt)?null:ydt:Tdt:Mdt:kdt)[0],(gon(),jdt),0),pW(n,i,e[1],Edt,1),pW(n,i,e[2],Sdt,1)}function EDn(n,t){var e,i;UFn(n,t,e=CHn(t)),BPn(n.a,uG(oIn(HQ(t.b),(GYn(),dmt)),234)),kUn(n),OPn(n,t),i=Inn(YHt,W1n,28,t.b.j.c.length,15,1),OWn(n,t,(KQn(),yRt),i,e),OWn(n,t,kRt,i,e),OWn(n,t,KRt,i,e),OWn(n,t,_Rt,i,e),n.a=null,n.c=null,n.b=null}function SDn(n,t,e){switch(t){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),Czn(n.e),!n.e&&(n.e=new f_(aFt,n,7,4)),void CW(n.e,uG(e,16));case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),Czn(n.d),!n.d&&(n.d=new f_(aFt,n,8,5)),void CW(n.d,uG(e,16))}ISn(n,t,e)}function PDn(n,t){var e,i,r,c,a;if(xA(t)===xA(n))return!0;if(!F$(t,15))return!1;if(a=uG(t,15),n.gc()!=a.gc())return!1;for(c=a.Kc(),i=n.Kc();i.Ob();)if(e=i.Pb(),r=c.Pb(),!(xA(e)===xA(r)||null!=e&&udn(e,r)))return!1;return!0}function CDn(n,t){var e,i,r,c;for((c=uG(l8(sin(sin(new fX(null,new h3(t.b,16)),new Re),new Ke),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)).Jc(new Fe),e=0,r=c.Kc();r.Ob();)-1==(i=uG(r.Pb(),12)).p&&NDn(n,i,e++)}function IDn(n){switch(n.g){case 0:return new pl;case 1:return new dl;case 2:return new gl;case 3:return new FI;case 4:return new iz;default:throw hv(new vM("No implementation is available for the node placer "+(null!=n.f?n.f:""+n.g)))}}function ODn(n){switch(n.g){case 0:return new ez;case 1:return new il;case 2:return new el;case 3:return new nl;case 4:return new tL;default:throw hv(new vM("No implementation is available for the cycle breaker "+(null!=n.f?n.f:""+n.g)))}}function ADn(n,t){var e,i,r,c,a;s8(i=new lS,t,i.c.b,i.c);do{for(MK(0!=i.b),e=uG(Lrn(i,i.a.a),39),n.b[e.g]=1,c=Fkn(e.d,0);c.b!=c.d.c;)a=(r=uG(I6(c),65)).c,1==n.b[a.g]?aq(n.a,r):2==n.b[a.g]?n.b[a.g]=1:s8(i,a,i.c.b,i.c)}while(0!=i.b)}function LDn(n,t,e){var i;i=null,t&&(i=t.d),CEn(n,new FC(t.n.a-i.b+e.a,t.n.b-i.d+e.b)),CEn(n,new FC(t.n.a-i.b+e.a,t.n.b+t.o.b+i.a+e.b)),CEn(n,new FC(t.n.a+t.o.a+i.c+e.a,t.n.b-i.d+e.b)),CEn(n,new FC(t.n.a+t.o.a+i.c+e.a,t.n.b+t.o.b+i.a+e.b))}function NDn(n,t,e){var i,r,c;for(t.p=e,c=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(t),new Wd(t)])));hDn(c);)-1==(i=uG(N9(c),12)).p&&NDn(n,i,e);if(t.i.k==(zIn(),wbt))for(r=new Ww(t.i.j);r.a<r.c.c.length;)(i=uG(N3(r),12))!=t&&-1==i.p&&NDn(n,i,e)}function $Dn(n,t){var e,i,r,c,a;for(i=new u8,c=g8(new IM(n.g)).a.ec().Kc();c.Ob();){if(!(r=uG(c.Pb(),10))){t.bh("There are no classes in a balanced layout.");break}(e=uG(ain(i,a=n.j[r.p]),15))||Akn(i,a,e=new Zm),e.Fc(r)}return i}function DDn(n){var t,i,r,c,a;if(c=uG(l8(_0(f3(n)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),r=B3n,c.gc()>=2)for(t=pK((i=c.Kc()).Pb());i.Ob();)a=t,t=pK(i.Pb()),r=e.Math.min(r,(tJ(t),t-(tJ(a),a)));return r}function xDn(n,t){var e,i,r;for(r=new Zm,i=Fkn(t.a,0);i.b!=i.d.c;)(e=uG(I6(i),65)).b.g==n.g&&!m_(e.b.c,H9n)&&xA(oIn(e.b,(QGn(),ACt)))!==xA(oIn(e.c,ACt))&&!o9(new fX(null,new h3(r,16)),new yp(e))&&mv(r.c,e);return f$(r,new Ca),r}function RDn(n,t){var e,i,r;if(xA(t)===xA(WW(n)))return!0;if(!F$(t,15))return!1;if(i=uG(t,15),(r=n.gc())!=i.gc())return!1;if(F$(i,59)){for(e=0;e<r;e++)if(!xQ(n.Xb(e),i.Xb(e)))return!1;return!0}return OMn(n.Kc(),i.Kc())}function KDn(n,t,e,i,r,c){var a,o,u,s;for(o=!Qj(JJ(n.Oc(),new hd(new Ye))).Bd((vS(),Kut)),a=n,c==(xdn(),nxt)&&(a=Spn(a)),s=a.Kc();s.Ob();)(u=uG(s.Pb(),72)).n.a=t.a,u.n.b=o?t.b+(i.b-u.o.b)/2:r?t.b:t.b+i.b-u.o.b,t.a+=u.o.a+e}function FDn(n,t){var e,i,r;for(t.Ug("Port side processing",1),r=new Ww(n.a);r.a<r.c.c.length;)Tqn(uG(N3(r),10));for(e=new Ww(n.b);e.a<e.c.c.length;)for(i=new Ww(uG(N3(e),30).a);i.a<i.c.c.length;)Tqn(uG(N3(i),10));t.Vg()}function _Dn(n,t,e){var i,r,c,a;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)(c=v6(e,uG(r.Pb(),17).a))&&(a=Ncn(k6(c,get),t),vJ(n.f,a,c),Iet in c.a&&Gan(a,k6(c,Iet)),fCn(c,a),kLn(c,a))}function BDn(n,t,e){var i,r,c,a,o;if(!(o=e)&&(o=xG(new fy,0)),o.Ug(K4n,1),JVn(n.c,t),1==(a=SWn(n.a,t)).gc())azn(uG(a.Xb(0),36),o);else for(c=1/a.gc(),r=a.Kc();r.Ob();){if(i=uG(r.Pb(),36),e.$g())return;azn(i,o.eh(c))}xM(n.a,a,t),$_n(t),o.Vg()}function HDn(n,t,e){var i,r,c,a,o;if(!(r=n.f)&&(r=uG(n.a.a.ec().Kc().Pb(),60)),TEn(r,t,e),1!=n.a.a.gc())for(i=t*e,a=n.a.a.ec().Kc();a.Ob();)(c=uG(a.Pb(),60))!=r&&((o=Q6(c)).f.d?(c.d.d+=i+Z2n,c.d.a-=i+Z2n):o.f.a&&(c.d.a-=i+Z2n))}function UDn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w;return o=i-n,u=r-t,s=(a=e.Math.atan2(o,u))+_3n,h=a-_3n,f=c*e.Math.sin(s)+n,b=c*e.Math.cos(s)+t,l=c*e.Math.sin(h)+n,w=c*e.Math.cos(h)+t,n7(Uhn(cT(PNt,1),zZn,8,0,[new MO(f,b),new MO(l,w)]))}function GDn(n,t,i,r){var c,a,o,u,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],u=uM(n.p[l.p])+uM(n.d[a.p])-a.d.d,(s=ion(a,r))&&(h=n.g[s.p],o=uM(n.p[h.p])+uM(n.d[s.p])+s.o.b+s.d.a,c=e.Math.min(c,u-(o+y$(n.k,a,s))))}while(f!=a);return c}function qDn(n,t,i,r){var c,a,o,u,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],o=uM(n.p[l.p])+uM(n.d[a.p])+a.o.b+a.d.a,(s=nfn(a,r))&&(h=n.g[s.p],u=uM(n.p[h.p])+uM(n.d[s.p])-s.d.d,c=e.Math.min(c,u-(o+y$(n.k,a,s))))}while(f!=a);return c}function XDn(n,t){var e;if(t.Ug("Equal Whitespace Eliminator",1),!vnn(n,(lBn(),SOt)))throw hv(new jM("The graph does not contain rows."));Ewn(uG(zDn(n,SOt),15),uM(pK(zDn(n,vOt))),(e=uM(pK(zDn(n,pOt))),uM(pK(zDn(n,(S_n(),bAt)))),e)),t.Vg()}function zDn(n,t){var e,i;return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),null!=(i=Lmn(n.o,t))?i:(F$(e=t.Sg(),4)&&(null==e?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),Svn(n.o,t)):(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),rSn(n.o,t,e))),e)}function VDn(){VDn=E,Bxt=new NO("H_LEFT",0),_xt=new NO("H_CENTER",1),Uxt=new NO("H_RIGHT",2),Vxt=new NO("V_TOP",3),zxt=new NO("V_CENTER",4),Xxt=new NO("V_BOTTOM",5),Gxt=new NO("INSIDE",6),qxt=new NO("OUTSIDE",7),Hxt=new NO("H_PRIORITY",8)}function WDn(n,t){var e,i,r,c,a,o,u;if(!t.f)throw hv(new vM("The input edge is not a tree edge."));for(c=null,r=vZn,i=new Ww(n.d);i.a<i.c.c.length;)o=(e=uG(N3(i),218)).d,u=e.e,ILn(n,o,t)&&!ILn(n,u,t)&&(a=u.e-o.e-e.a)<r&&(r=a,c=e);return c}function QDn(n){var t,e,i,r,c,a;if(!(n.f.e.c.length<=1)){t=0,r=Z$n(n),e=M0n;do{for(t>0&&(r=e),a=new Ww(n.f.e);a.a<a.c.c.length;)oM(gK(oIn(c=uG(N3(a),153),(Bjn(),alt))))||(i=uGn(n,c),JF(dL(c.d),i));e=Z$n(n)}while(!oQ(n,t++,r,e))}}function JDn(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Ww(n.d);i.a<i.c.c.length;)r=(e=uG(N3(i),72)).n,n.a==(qhn(),udt)||n.i==(KQn(),kRt)?r.a=c:n.a==sdt||n.i==(KQn(),_Rt)?r.a=c+n.j.a-e.o.a:r.a=c+(n.j.a-e.o.a)/2,r.b=a,JF(r,t),a+=e.o.b+n.e}function YDn(n,t){var e,i,r,c,a;(c=m6(n,"individualSpacings"))&&(!vnn(t,(XYn(),ODt))&&(e=new Qu,Myn(t,ODt,e)),r=uG(zDn(t,ODt),385),i=null,(a=c)&&(i=new JE(a,Yon(a,Inn($ot,zZn,2,0,6,1)))),i&&z8(i,new cA(a,r)))}function ZDn(n,t){var e,i,r,c,a,o;return c=null,(Ket in(a=n).a||Fet in a.a||Met in a.a)&&(o=Qhn(t),i=m6(a,Ket),Xpn(new um(o).a,i),r=m6(a,Fet),zpn(new mm(o).a,r),e=p6(a,Met),lPn(new ym(o).a,e),c=e),c}function nxn(n,t){var e,i,r;if(t===n)return!0;if(F$(t,552)){if(r=uG(t,849),n.a.d!=r.a.d||uY(n).gc()!=uY(r).gc())return!1;for(i=uY(r).Kc();i.Ob();)if(S2(n,(e=uG(i.Pb(),425)).a.ld())!=uG(e.a.md(),16).gc())return!1;return!0}return!1}function txn(n){var t,e,i,r;return t=i=uG(n.a,17).a,e=r=uG(n.b,17).a,0==i&&0==r?e-=1:-1==i&&r<=0?(t=0,e-=2):i<=0&&r>0?(t-=1,e-=1):i>=0&&r<0?(t+=1,e+=1):i>0&&r>=0?(t-=1,e+=1):(t+=1,e-=1),new WO(xwn(t),xwn(e))}function exn(n,t){return n.c<t.c?-1:n.c>t.c?1:n.b<t.b?-1:n.b>t.b?1:n.a!=t.a?Hon(n.a)-Hon(t.a):n.d==(Z6(),YEt)&&t.d==JEt?-1:n.d==JEt&&t.d==YEt?1:0}function ixn(n,t){var e,i,r,c,a;return a=(c=t.a).c.i==t.b?c.d:c.c,i=c.c.i==t.b?c.c:c.d,(r=dmn(n.a,a,i))>0&&r<B3n?(e=GDn(n.a,i.i,r,n.c),Grn(n.a,i.i,-e),e>0):r<0&&-r<B3n&&(e=qDn(n.a,i.i,-r,n.c),Grn(n.a,i.i,e),e>0)}function rxn(n,t,e,i){var r,c,a,o,u,s;for(r=(t-n.d)/n.c.c.length,c=0,n.a+=e,n.d=t,s=new Ww(n.c);s.a<s.c.c.length;)o=(u=uG(N3(s),27)).g,a=u.f,ycn(u,u.i+c*r),Mcn(u,u.j+i*e),kcn(u,u.g+r),vcn(u,n.a),++c,tLn(u,new MO(u.g,u.f),new MO(o,a))}function cxn(n){var t,e,i,r,c,a,o;if(null==n)return null;for(o=n.length,a=Inn(tUt,ret,28,r=(o+1)/2|0,15,1),o%2!=0&&(a[--r]=V_n((s3(o-1,n.length),n.charCodeAt(o-1)))),e=0,i=0;e<r;++e)t=V_n(VJ(n,i++)),c=V_n(VJ(n,i++)),a[e]=(t<<4|c)<<24>>24;return a}function axn(n){if(n.ze()){var t=n.c;return t.Ae()?n.o="["+t.n:t.ze()?n.o="["+t.xe():n.o="[L"+t.xe()+";",n.b=t.we()+"[]",void(n.k=t.ye()+"[]")}var e=n.j,i=n.d;i=i.split("/"),n.o=fvn(".",[e,fvn("$",i)]),n.b=fvn(".",[e,fvn(".",i)]),n.k=i[i.length-1]}function oxn(n,t){var e,i,r,c,a;for(a=null,c=new Ww(n.e.a);c.a<c.c.c.length;)if((r=uG(N3(c),125)).b.a.c.length==r.g.a.c.length){for(i=r.e,a=UOn(r),e=r.e-uG(a.a,17).a+1;e<r.e+uG(a.b,17).a;e++)t[e]<t[i]&&(i=e);t[i]<t[r.e]&&(--t[r.e],++t[i],r.e=i)}}function uxn(n){var t,i,r,c,a,o,u;for(r=M0n,i=T0n,t=new Ww(n.e.b);t.a<t.c.c.length;)for(a=new Ww(uG(N3(t),30).a);a.a<a.c.c.length;)c=uG(N3(a),10),o=(u=uM(n.p[c.p]))+uM(n.b[n.g[c.p].p]),r=e.Math.min(r,u),i=e.Math.max(i,o);return i-r}function sxn(n){var t,e,i,r;return ZXn(),t=-1==(i=xL(n,$Cn(35)))?n:(Knn(0,i,n.length),n.substr(0,i)),e=-1==i?null:(s3(i+1,n.length+1),n.substr(i+1)),(r=_5(GFt,t))?null!=e&&(r=Vln(r,(tJ(e),e))):(r=LYn(t),G8(GFt,t,r),null!=e&&(r=Vln(r,e))),r}function hxn(n,t,e,i){var r,c,a,o,u,s;for(u=null,o=0,s=(r=AHn(n,t)).gc();o<s;++o)if(m_(i,BJ(Nen(n,c=uG(r.Xb(o),179)))))if(a=HJ(Nen(n,c)),null==e){if(null==a)return c;!u&&(u=c)}else{if(m_(e,a))return c;null==a&&!u&&(u=c)}return null}function fxn(n,t,e,i){var r,c,a,o,u,s;for(u=null,o=0,s=(r=LHn(n,t)).gc();o<s;++o)if(m_(i,BJ(Nen(n,c=uG(r.Xb(o),179)))))if(a=HJ(Nen(n,c)),null==e){if(null==a)return c;!u&&(u=c)}else{if(m_(e,a))return c;null==a&&!u&&(u=c)}return null}function lxn(n,t,e){var i,r,c,a,o,u;if(a=new ls,o=VKn(n.e.Dh(),t),i=uG(n.g,124),PP(),uG(t,69).xk())for(c=0;c<n.i;++c)r=i[c],o.am(r.Lk())&&ttn(a,r);else for(c=0;c<n.i;++c)r=i[c],o.am(r.Lk())&&(u=r.md(),ttn(a,e?ONn(n,t,c,a.i,u):u));return g5(a)}function bxn(n){var t,e,i,r,c,a,o;if(n&&(t=n.qi(Drt))&&null!=(a=mK(Lmn((!t.b&&(t.b=new XR((YYn(),H_t),wBt,t)),t.b),"conversionDelegates")))){for(o=new Zm,r=0,c=(i=WGn(a,"\\w+")).length;r<c;++r)e=i[r],mv(o.c,e);return o}return hZ(),hZ(),zot}function wxn(n,t){var e,i,r,c,a,o;for(c=(1==t?$lt:Nlt).a.ec().Kc();c.Ob();)for(r=uG(c.Pb(),88),o=uG(Y9(n.f.c,r),21).Kc();o.Ob();)switch(a=uG(o.Pb(),42),i=uG(a.b,86),e=uG(a.a,194).c,r.g){case 2:case 1:i.g.d+=e;break;case 4:case 3:i.g.c+=e}}function dxn(n,t){var e,i,r,c;for(e=new rpn(Qdt),vAn(),r=0,c=(i=Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])).length;r<c;++r)yF(e,i[r],new Zm);return kS(YJ(JJ(sin(new fX(null,new h3(n.b,16)),new Ze),new ni),new bg(t)),new wg(e)),e}function gxn(n,t,i){var r,c,a,o,u,s,h,f;for(a=t.Kc();a.Ob();)s=(c=uG(a.Pb(),27)).i+c.g/2,f=c.j+c.f/2,u=s-((o=n.f).i+o.g/2),h=f-(o.j+o.f/2),r=e.Math.sqrt(u*u+h*h),u*=n.e/r,h*=n.e/r,i?(s-=u,f-=h):(s+=u,f+=h),ycn(c,s-c.g/2),Mcn(c,f-c.f/2)}function pxn(n){var t,e,i;if(!n.c&&null!=n.b){for(t=n.b.length-4;t>=0;t-=2)for(e=0;e<=t;e+=2)(n.b[e]>n.b[e+2]||n.b[e]===n.b[e+2]&&n.b[e+1]>n.b[e+3])&&(i=n.b[e+2],n.b[e+2]=n.b[e],n.b[e]=i,i=n.b[e+3],n.b[e+3]=n.b[e+1],n.b[e+1]=i);n.c=!0}}function mxn(n,t){var e,i,r,c,a,o,u,s,h;for(s=-1,h=0,o=0,u=(a=n).length;o<u;++o){for(c=a[o],e=new KG(-1==s?n[0]:n[s],t,(Cwn(),hjt)),i=0;i<c.length;i++)for(r=i+1;r<c.length;r++)vR(c[i],(GYn(),imt))&&vR(c[r],imt)&&rYn(e,c[i],c[r])>0&&++h;++s}return h}function vxn(n){var t;return(t=new lx(Ij(n.Rm))).a+="@",JA(t,(Hon(n)>>>0).toString(16)),n.Vh()?(t.a+=" (eProxyURI: ",QA(t,n._h()),n.Kh()&&(t.a+=" eClass: ",QA(t,n.Kh())),t.a+=")"):n.Kh()&&(t.a+=" (eClass: ",QA(t,n.Kh()),t.a+=")"),t.a}function kxn(n){var t,e,i;if(n.e)throw hv(new kM((vK(Qut),v2n+Qut.k+k2n)));for(n.d==(xdn(),ZDt)&&GWn(n,JDt),e=new Ww(n.a.a);e.a<e.c.c.length;)(t=uG(N3(e),316)).g=t.i;for(i=new Ww(n.a.b);i.a<i.c.c.length;)uG(N3(i),60).i=T0n;return n.b.cf(n),n}function yxn(n,t){var e,i,r,c,a;if(t<2*n.b)throw hv(new vM("The knot vector must have at least two time the dimension elements."));for(n.f=1,r=0;r<n.b;r++)kD(n.e,0);for(e=a=t+1-2*n.b,c=1;c<a;c++)kD(n.e,c/e);if(n.d)for(i=0;i<n.b;i++)kD(n.e,1)}function Mxn(n,t){var e,i,r,c,a;if(c=t,!(a=uG(kan(UW(n.i),c),27)))throw hv(new SM("Unable to find elk node for json object '"+k6(c,Iet)+"' Panic!"));i=p6(c,"edges"),ENn((e=new JO(n,a)).a,e.b,i),r=p6(c,pet),vEn(new nm(n).a,r)}function Txn(n,t,e,i){var r,c,a,o,u;if(null!=i){if(r=n.d[t])for(c=r.g,u=r.i,o=0;o<u;++o)if((a=uG(c[o],136)).Bi()==e&&udn(i,a.ld()))return o}else if(r=n.d[t])for(c=r.g,u=r.i,o=0;o<u;++o)if(xA((a=uG(c[o],136)).ld())===xA(i))return o;return-1}function jxn(n,t){var e,i;return F$(e=null==t?DA(FX(n.f,null)):_P(n.i,t),241)?((i=uG(e,241)).zi(),i):F$(e,507)?((i=uG(e,2037).a)&&(null==i.yb||(null==t?VAn(n.f,null,i):kgn(n.i,t,i))),i):null}function Exn(n){var t,e,i,r,c,a,o;if(L_n(),null==n)return null;if((r=n.length)%2!=0)return null;for(t=_en(n),e=Inn(tUt,ret,28,c=r/2|0,15,1),i=0;i<c;i++){if(-1==(a=pHt[t[2*i]]))return null;if(-1==(o=pHt[t[2*i+1]]))return null;e[i]=(a<<4|o)<<24>>24}return e}function Sxn(n,t,e){var i,r,c;if(!(r=uG(AJ(n.i,t),314)))if(r=new Yin(n.d,t,e),UV(n.i,t,r),vvn(t))iD(n.a,t.c,t.b,r);else switch(c=MAn(t),i=uG(AJ(n.p,c),252),c.g){case 1:case 3:r.j=!0,nM(i,t.b,r);break;case 4:case 2:r.k=!0,nM(i,t.c,r)}return r}function Pxn(n,t){var e,i,r,c,a,o,u,s,h;for(u=iR(n.c-n.b&n.a.length-1),s=null,h=null,c=new XJ(n);c.a!=c.b;)r=uG(rwn(c),10),e=(o=uG(oIn(r,(GYn(),Zpt)),12))?o.i:null,i=(a=uG(oIn(r,nmt),12))?a.i:null,s==e&&h==i||(F$n(u,t),s=e,h=i),mv(u.c,r);F$n(u,t)}function Cxn(n,t,e,i){var r,c,a,o,u,s;if(o=new ls,u=VKn(n.e.Dh(),t),r=uG(n.g,124),PP(),uG(t,69).xk())for(a=0;a<n.i;++a)c=r[a],u.am(c.Lk())&&ttn(o,c);else for(a=0;a<n.i;++a)c=r[a],u.am(c.Lk())&&(s=c.md(),ttn(o,i?ONn(n,t,a,o.i,s):s));return gmn(o,e)}function Ixn(n,t){var i,r,c,a,o,u;if((r=n.b[t.p])>=0)return r;for(c=1,a=new Ww(t.j);a.a<a.c.c.length;)for(i=new Ww(uG(N3(a),12).g);i.a<i.c.c.length;)t!=(u=uG(N3(i),18).d.i)&&(o=Ixn(n,u),c=e.Math.max(c,o+1));return $pn(n,t,c),c}function Oxn(n,t){var i,r,c,a,o,u;if((r=n.b[t.p])>=0)return r;for(c=1,a=new Ww(t.j);a.a<a.c.c.length;)for(i=new Ww(uG(N3(a),12).e);i.a<i.c.c.length;)t!=(u=uG(N3(i),18).c.i)&&(o=Oxn(n,u),c=e.Math.max(c,o+1));return mMn(n,t,c),c}function Axn(n,t,e){var i,r,c;for(i=1;i<n.c.length;i++){for(u3(i,n.c.length),c=uG(n.c[i],10),r=i;r>0&&t.Ne((u3(r-1,n.c.length),uG(n.c[r-1],10)),c)>0;)Y8(n,r,(u3(r-1,n.c.length),uG(n.c[r-1],10))),--r;u3(r,n.c.length),n.c[r]=c}e.a=new Ym,e.b=new Ym}function Lxn(n,t,e){var i,r,c,a,o,u,s;for(s=new nB(i=uG(t.e&&t.e(),9),uG(MF(i,i.length),9),0),a=0,o=(c=WGn(e,"[\\[\\]\\s,]+")).length;a<o;++a)if(0!=KAn(r=c[a]).length){if(null==(u=NNn(n,r)))return null;Mon(s,uG(u,22))}return s}function Nxn(n){var t,e,i,r;for(r=n.length,t=null,i=0;i<r;i++)s3(i,n.length),xL(".*+?{[()|\\^$",$Cn(e=n.charCodeAt(i)))>=0?(t||(t=new VM,i>0&&VA(t,(Knn(0,i,n.length),n.substr(0,i)))),t.a+="\\",TQ(t,e&D1n)):t&&TQ(t,e&D1n);return t?t.a:n}function $xn(n){var t,i,r;for(i=new Ww(n.a.a.b);i.a<i.c.c.length;)t=uG(N3(i),86),tJ(0),(r=0)>0&&((!hN(n.a.c)||!t.n.d)&&(!fN(n.a.c)||!t.n.b)&&(t.g.d-=e.Math.max(0,r/2-.5)),(!hN(n.a.c)||!t.n.a)&&(!fN(n.a.c)||!t.n.c)&&(t.g.a+=e.Math.max(0,r-1)))}function Dxn(n,t,e){var i;if(2==(n.c-n.b&n.a.length-1))t==(KQn(),yRt)||t==kRt?(prn(uG(Rfn(n),15),(Ajn(),$xt)),prn(uG(Rfn(n),15),Dxt)):(prn(uG(Rfn(n),15),(Ajn(),Dxt)),prn(uG(Rfn(n),15),$xt));else for(i=new XJ(n);i.a!=i.b;)prn(uG(rwn(i),15),e)}function xxn(n,t){var e,i,r,c,a,o;for(a=new N4(i=rG(new Pm(n)),i.c.length),o=new N4(r=rG(new Pm(t)),r.c.length),c=null;a.b>0&&o.b>0&&(MK(a.b>0),e=uG(a.a.Xb(a.c=--a.b),27),MK(o.b>0),e==uG(o.a.Xb(o.c=--o.b),27));)c=e;return c}function Rxn(n,t,e){var i,r,c,a;Y3(n,t)>Y3(n,e)?(i=Dgn(e,(KQn(),kRt)),n.d=i.dc()?0:dq(uG(i.Xb(0),12)),a=Dgn(t,_Rt),n.b=a.dc()?0:dq(uG(a.Xb(0),12))):(r=Dgn(e,(KQn(),_Rt)),n.d=r.dc()?0:dq(uG(r.Xb(0),12)),c=Dgn(t,kRt),n.b=c.dc()?0:dq(uG(c.Xb(0),12)))}function Kxn(n,t){var e,i,r,c;for(e=n.o.a,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)(r=uG(c.Pb(),117)).e.a=e*uM(pK(r.b.of(bht))),r.e.b=(i=r.b).pf((XYn(),uDt))?i.ag()==(KQn(),yRt)?-i.Mf().b-uM(pK(i.of(uDt))):uM(pK(i.of(uDt))):i.ag()==(KQn(),yRt)?-i.Mf().b:0}function Fxn(n,t){var e,i,r,c;for(t.Ug("Self-Loop pre-processing",1),i=new Ww(n.a);i.a<i.c.c.length;)Epn(e=uG(N3(i),10))&&(c=new kkn(e),kfn(e,(GYn(),vmt),c),CUn(c),kS(YJ(sin(new fX(null,new h3((r=c).d,16)),new Hi),new Ui),new Gi),nFn(r));t.Vg()}function _xn(n){var t,e,i,r,c,a,o,u;t=!0,r=null,c=null;n:for(u=new Ww(n.a);u.a<u.c.c.length;)for(i=new Fz(ix(qgn(o=uG(N3(u),10)).a.Kc(),new h));hDn(i);){if(e=uG(N9(i),18),r&&r!=o){t=!1;break n}if(r=o,a=e.c.i,c&&c!=a){t=!1;break n}c=a}return t}function Bxn(n,t,e){var i,r,c,a,o,u;for(c=-1,o=-1,a=0;a<t.c.length&&(u3(a,t.c.length),!((r=uG(t.c[a],339)).c>n.c));a++)r.a>=n.s&&(c<0&&(c=a),o=a);return u=(n.s+n.c)/2,c>=0&&(u=wP((u3(i=fHn(n,t,c,o),t.c.length),uG(t.c[i],339))),a$n(t,i,e)),u}function Hxn(n,t,e){var i,r,c,a,o;for(Yan(r=new vs,(tJ(t),t)),!r.b&&(r.b=new XR((YYn(),H_t),wBt,r)),o=r.b,a=1;a<e.length;a+=2)rSn(o,e[a-1],e[a]);for(!n.Ab&&(n.Ab=new fV(c_t,n,0,3)),i=n.Ab,c=0;c<0;++c)i=MQ(uG(zrn(i,i.i-1),598));ttn(i,r)}function Uxn(n,t,e){var i,r,c;for(fF.call(this,new Zm),this.a=t,this.b=e,this.e=n,n.b&&sXn(n),i=n.a,this.d=hY(i.a,this.a),this.c=hY(i.b,this.b),Pdn(this,this.d,this.c),sNn(this),c=this.e.e.a.ec().Kc();c.Ob();)(r=uG(c.Pb(),272)).c.c.length>0&&tVn(this,r)}function Gxn(n,t,e,i,r,c){var a,o,u;if(!r[t.a]){for(r[t.a]=!0,!(a=i)&&(a=new d7),kD(a.e,t),u=c[t.a].Kc();u.Ob();)(o=uG(u.Pb(),289)).d!=e&&o.c!=e&&(o.c!=t&&Gxn(n,o.c,t,a,r,c),o.d!=t&&Gxn(n,o.d,t,a,r,c),kD(a.c,o),Ohn(a.d,o.b));return a}return null}function qxn(n){var t,e,i;for(t=0,e=new Ww(n.e);e.a<e.c.c.length;)o9(new fX(null,new h3(uG(N3(e),18).b,16)),new pe)&&++t;for(i=new Ww(n.g);i.a<i.c.c.length;)o9(new fX(null,new h3(uG(N3(i),18).b,16)),new me)&&++t;return t>=2}function Xxn(n,t,e,i,r){var c,a,o,u,s;for(c=n.c.d.j,a=uG(hyn(e,0),8),s=1;s<e.b;s++)u=uG(hyn(e,s),8),s8(i,a,i.c.b,i.c),o=vD(JF(new eN(a),u),.5),JF(o,vD(new O2(Tln(c)),r)),s8(i,o,i.c.b,i.c),a=u,c=0==t?qdn(c):Udn(c);aq(i,(MK(0!=e.b),uG(e.c.b.c,8)))}function zxn(n){return VDn(),!(qsn(X1(WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[qxt])),n))>1||qsn(X1(WX(Bxt,Uhn(cT(eRt,1),p1n,95,0,[_xt,Uxt])),n))>1||qsn(X1(WX(Vxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Xxt])),n))>1)}function Vxn(n,t,e){var i,r,c;for(c=new Ww(n.t);c.a<c.c.c.length;)(i=uG(N3(c),274)).b.s<0&&i.c>0&&(i.b.n-=i.c,i.b.n<=0&&i.b.u>0&&aq(t,i.b));for(r=new Ww(n.i);r.a<r.c.c.length;)(i=uG(N3(r),274)).a.s<0&&i.c>0&&(i.a.u-=i.c,i.a.u<=0&&i.a.n>0&&aq(e,i.a))}function Wxn(n){var t,e,i;if(null==n.g&&(n.d=n.bj(n.f),ttn(n,n.d),n.c))return n.f;if(i=(t=uG(n.g[n.i-1],51)).Pb(),n.e=t,(e=n.bj(i)).Ob())n.d=e,ttn(n,e);else for(n.d=null;!t.Ob()&&(uQ(n.g,--n.i,null),0!=n.i);)t=uG(n.g[n.i-1],51);return i}function Qxn(n,t){var e,i,r,c,a,o;if(r=(i=t).Lk(),EFn(n.e,r)){if(r.Si()&&H5(n,r,i.md()))return!1}else for(o=VKn(n.e.Dh(),r),e=uG(n.g,124),c=0;c<n.i;++c)if(a=e[c],o.am(a.Lk()))return!udn(a,i)&&(uG(Uyn(n,c,t),76),!0);return ttn(n,t)}function Jxn(n,t,i,r){var c,a,o;for(Hb(c=new gMn(n),(zIn(),bbt)),kfn(c,(GYn(),rmt),t),kfn(c,gmt,r),kfn(c,(jYn(),JMt),($Pn(),cRt)),kfn(c,Zpt,t.c),kfn(c,nmt,t.d),xFn(t,c),o=e.Math.floor(i/2),a=new Ww(c.j);a.a<a.c.c.length;)uG(N3(a),12).n.b=o;return c}function Yxn(n){var t,i,r,c,a,o;for(t=0,i=new Ww(n.a);i.a<i.c.c.length;)for(c=new Fz(ix(Xgn(uG(N3(i),10)).a.Kc(),new h));hDn(c);)n==(r=uG(N9(c),18)).d.i.c&&r.c.j==(KQn(),_Rt)&&(a=n3(r.c).b,o=n3(r.d).b,t=e.Math.max(t,e.Math.abs(o-a)));return t}function Zxn(n,t,e){var i,r,c,a;for(e.Ug("ELK Force",1),oM(gK(zDn(t,(cGn(),Ift))))||J1(new Sd((vP(),new Vy(t)))),cEn(a=yfn(t)),rln(n,uG(oIn(a,jft),432)),r=(c=tqn(n.a,a)).Kc();r.Ob();)i=uG(r.Pb(),235),DGn(n.b,i,e.eh(1/c.gc()));YJn(a=lJn(c)),e.Vg()}function nRn(n,t,i){switch(i.g){case 1:return new MO(t.a,e.Math.min(n.d.b,t.b));case 2:return new MO(e.Math.max(n.c.a,t.a),t.b);case 3:return new MO(t.a,e.Math.max(n.c.b,t.b));case 4:return new MO(e.Math.min(t.a,n.d.a),t.b)}return new MO(t.a,t.b)}function tRn(n){var t,e,i;for(kD(t=iR(1+(!n.c&&(n.c=new fV(wFt,n,9,9)),n.c).i),(!n.d&&(n.d=new f_(aFt,n,8,5)),n.d)),i=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));i.e!=i.i.gc();)kD(t,(!(e=uG(Zkn(i),123)).d&&(e.d=new f_(aFt,e,8,5)),e.d));return WW(t),new iN(t)}function eRn(n){var t,e,i;for(kD(t=iR(1+(!n.c&&(n.c=new fV(wFt,n,9,9)),n.c).i),(!n.e&&(n.e=new f_(aFt,n,7,4)),n.e)),i=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));i.e!=i.i.gc();)kD(t,(!(e=uG(Zkn(i),123)).e&&(e.e=new f_(aFt,e,7,4)),e.e));return WW(t),new iN(t)}function iRn(n){var t,e,i,r;if(null==n)return null;if(i=yXn(n,!0),r=yct.length,m_(i.substr(i.length-r,r),yct))if(4==(e=i.length)){if(s3(0,i.length),43==(t=i.charCodeAt(0)))return sHt;if(45==t)return uHt}else if(3==e)return sHt;return YIn(i)}function rRn(n,t){var e,i,r;if(t.Ug("Breaking Point Processor",1),WWn(n),oM(gK(oIn(n,(jYn(),GTt))))){for(i=new Ww(n.b);i.a<i.c.c.length;)for(e=0,r=new Ww(uG(N3(i),30).a);r.a<r.c.c.length;)uG(N3(r),10).p=e++;kXn(n),dFn(n,!0),dFn(n,!1)}t.Vg()}function cRn(n,t,e,i){var r,c,a,o,u,s,h,f,l;for(f=i?(KQn(),_Rt):(KQn(),kRt),r=!1,s=0,h=(u=t[e]).length;s<h;++s)L_(uG(oIn(o=u[s],(jYn(),JMt)),101))||(a=o.e,(l=!Dgn(o,f).dc()&&!!a)&&(c=SPn(a),n.b=new IPn(c,i?0:c.length-1)),r|=d_n(n,o,f,l));return r}function aRn(n,t,e,i){var r,c,a;if(a=wSn(t,e),mv(i.c,t),-1==n.j[a.p]||2==n.j[a.p]||n.a[t.p])return i;for(n.j[a.p]=-1,c=new Fz(ix(Ggn(a).a.Kc(),new h));hDn(c);)if(!v9(r=uG(N9(c),18))&&(v9(r)||r.c.i.c!=r.d.i.c)&&r!=t)return aRn(n,r,a,i);return i}function oRn(n){var t,e,i,r;for(t=0,e=0,r=new Ww(n.j);r.a<r.c.c.length;)if(t=pz(Lgn(t,D7(JJ(new fX(null,new h3((i=uG(N3(r),12)).e,16)),new Wc)))),e=pz(Lgn(e,D7(JJ(new fX(null,new h3(i.g,16)),new Qc)))),t>1||e>1)return 2;return t+e==1?2:0}function uRn(n,t){var i,r,c,a;return c=n.a*X0n+1502*n.b,a=n.b*X0n+11,c+=i=e.Math.floor(a*z0n),a-=i*V0n,c%=V0n,n.a=c,n.b=a,t<=24?e.Math.floor(n.a*but[t]):((r=n.a*(1<<t-24)+e.Math.floor(n.b*wut[t]))>=2147483648&&(r-=4294967296),r)}function sRn(n,t,e){var i,r,c,a,o,u,s;for(c=new Zm,Uqn(n,s=new lS,a=new lS,t),RVn(n,s,a,t,e),u=new Ww(n);u.a<u.c.c.length;)for(r=new Ww((o=uG(N3(u),118)).k);r.a<r.c.c.length;)i=uG(N3(r),132),(!t||i.c==(_7(),$St))&&o.g>i.b.g&&mv(c.c,i);return c}function hRn(n,t,e){var i,r,c,a,o;for(a=n.c,c=(e.q?e.q:(hZ(),hZ(),Vot)).vc().Kc();c.Ob();)r=uG(c.Pb(),44),!Qj(JJ(new fX(null,new h3(a,16)),new hd(new kO(t,r)))).Bd((vS(),Kut))&&(F$(o=r.md(),4)&&null!=(i=Nvn(o))&&(o=i),t.qf(uG(r.ld(),149),o))}function fRn(n,t,e){var i;if(_J(n.b),JV(n.b,(Rdn(),HAt),(eP(),GLt)),JV(n.b,UAt,t.g),JV(n.b,GAt,t.a),n.a=Qzn(n.b,t),e.Ug("Compaction by shrinking a tree",n.a.c.length),t.i.c.length>1)for(i=new Ww(n.a);i.a<i.c.c.length;)uG(N3(i),47).Kf(t,e.eh(1));e.Vg()}function lRn(n,t,e){var i,r,c;if(!(c=iVn((gAn(),kBt),n.Dh(),t)))throw hv(new vM(Gtt+t.xe()+qtt));if(PP(),!uG(c,69).xk()&&!(c=_3(Nen(kBt,c))))throw hv(new vM(Gtt+t.xe()+qtt));r=uG((i=n.Ih(c))>=0?n.Lh(i,!0,!0):YNn(n,c,!0),160),uG(r,220).Xl(t,e)}function bRn(n,t){var e,i,r,c;if(t){for(c=!(r=F$(n.Cb,90)||F$(n.Cb,102))&&F$(n.Cb,331),e=new DD((!t.a&&(t.a=new AX(t,g_t,t)),t.a));e.e!=e.i.gc();)if(i=MGn(uG(Zkn(e),89)),r?F$(i,90):c?F$(i,156):i)return i;return r?(YYn(),x_t):(YYn(),N_t)}return null}function wRn(n,t){var e,i,r;for(t.Ug("Resize child graph to fit parent.",1),i=new Ww(n.b);i.a<i.c.c.length;)e=uG(N3(i),30),Ohn(n.a,e.a),e.a.c.length=0;for(r=new Ww(n.a);r.a<r.c.c.length;)a2(uG(N3(r),10),null);n.b.c.length=0,$Fn(n),n.e&&RUn(n.e,n),t.Vg()}function dRn(n,t){var e,i,r,c;for(t.Ug("Edge joining",1),e=oM(gK(oIn(n,(jYn(),xTt)))),i=new Ww(n.b);i.a<i.c.c.length;)for(c=new N4(uG(N3(i),30).a,0);c.b<c.d.gc();)MK(c.b<c.d.gc()),(r=uG(c.d.Xb(c.c=c.b++),10)).k==(zIn(),wbt)&&(pVn(r,e),LQ(c));t.Vg()}function gRn(n,t){var e,i,r,c,a;for(e=new Zm,r=sin(new fX(null,new h3(n,16)),new wa),c=sin(new fX(null,new h3(n,16)),new da),a=ken($7(ZJ(gKn(Uhn(cT(Fut,1),EZn,848,0,[r,c])),new ga))),i=1;i<a.length;i++)a[i]-a[i-1]>=2*t&&kD(e,new OU(a[i-1]+t,a[i]-t));return e}function pRn(n,t,e){var i,r,c,a,o;if(e)for(c=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);c.Ob();)(r=v6(e,uG(c.Pb(),17).a))&&(Gan(a=b5(n,(gj(),o=new Hk,!!t&&LRn(o,t),o),r),k6(r,Iet)),fCn(r,a),kLn(r,a),qfn(n,r,a))}function mRn(n){var t,e,i,r;if(!n.j){if(r=new Ss,null==(t=V_t).a.zc(n,t)){for(i=new DD(n1(n));i.e!=i.i.gc();)CW(r,mRn(e=uG(Zkn(i),29))),ttn(r,e);t.a.Bc(n)}lbn(r),n.j=new vL((uG(zrn(gZ((tQ(),M_t).o),11),19),r.i),r.g),y9(n).b&=-33}return n.j}function vRn(n){var t,e,i,r;if(null==n)return null;if(i=yXn(n,!0),r=yct.length,m_(i.substr(i.length-r,r),yct))if(4==(e=i.length)){if(s3(0,i.length),43==(t=i.charCodeAt(0)))return fHt;if(45==t)return hHt}else if(3==e)return fHt;return new tk(i)}function kRn(n){var t,e,i;return 0!=((e=n.l)&e-1)||0!=((i=n.m)&i-1)||0!=((t=n.h)&t-1)||0==t&&0==i&&0==e?-1:0==t&&0==i&&0!=e?pan(e):0==t&&0!=i&&0==e?pan(i)+22:0!=t&&0==i&&0==e?pan(t)+44:-1}function yRn(n,t){var e,i,r,c,a;for(r=t.a&n.f,c=null,i=n.b[r];;i=i.b){if(i==t){c?c.b=t.b:n.b[r]=t.b;break}c=i}for(a=t.f&n.f,c=null,e=n.c[a];;e=e.d){if(e==t){c?c.d=t.d:n.c[a]=t.d;break}c=e}t.e?t.e.c=t.c:n.a=t.c,t.c?t.c.e=t.e:n.e=t.e,--n.i,++n.g}function MRn(n,t){var e;t.d?t.d.b=t.b:n.a=t.b,t.b?t.b.d=t.d:n.e=t.d,t.e||t.c?(--(e=uG(nJ(uG(cQ(n.b,t.a),260)),260)).a,t.e?t.e.c=t.c:e.b=uG(nJ(t.c),511),t.c?t.c.e=t.e:e.c=uG(nJ(t.e),511)):((e=uG(nJ(uG(u7(n.b,t.a),260)),260)).a=0,++n.c),--n.d}function TRn(n){var t,i,r,c,a,o,u,s,h,f;for(i=n.o,t=n.p,o=vZn,c=j1n,u=vZn,a=j1n,h=0;h<i;++h)for(f=0;f<t;++f)eTn(n,h,f)&&(o=e.Math.min(o,h),c=e.Math.max(c,h),u=e.Math.min(u,f),a=e.Math.max(a,f));return s=c-o+1,r=a-u+1,new vY(xwn(o),xwn(u),xwn(s),xwn(r))}function jRn(n,t){var e,i,r,c;for(MK((c=new N4(n,0)).b<c.d.gc()),e=uG(c.d.Xb(c.c=c.b++),148);c.b<c.d.gc();)MK(c.b<c.d.gc()),r=new wG((i=uG(c.d.Xb(c.c=c.b++),148)).c,e.d,t),MK(c.b>0),c.a.Xb(c.c=--c.b),pF(c,r),MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),r.a=!1,e=i}function ERn(n){var t,e,i,r,c;for(i=uG(oIn(n,(GYn(),Ppt)),12),c=new Ww(n.j);c.a<c.c.c.length;){for(e=new Ww((r=uG(N3(c),12)).g);e.a<e.c.c.length;)return u2(uG(N3(e),18),i),r;for(t=new Ww(r.e);t.a<t.c.c.length;)return c2(uG(N3(t),18),i),r}return null}function SRn(n,t,e){var i,r,c,a,o;for(o=uG(ER(n.a,t),17).a,PPn(n.a,xwn(e?o+1:o-1),t),a=new XL,r=new Fz(ix((e?Xgn(t):qgn(t)).a.Kc(),new h));hDn(r);)i=uG(N9(r),18),c=e?i.d.i:i.c.i,xA(ER(n.a,c))===xA(ER(n.a,t))&&a.a.zc(c,a);return a}function PRn(n,t,i){var r,c;dwn(r=Bsn(i.q.getTime()),0)<0?(c=$1n-pz(Kmn(Men(r),$1n)))==$1n&&(c=0):c=pz(Kmn(r,$1n)),1==t?jQ(n,48+(c=e.Math.min((c+50)/100|0,9))&D1n):2==t?Fen(n,c=e.Math.min((c+5)/10|0,99),2):(Fen(n,c,3),t>3&&Fen(n,0,t-3))}function CRn(n){var t,e,i,r;return xA(oIn(n,(jYn(),rMt)))===xA((Own(),Ixt))?!n.e&&xA(oIn(n,Oyt))!==xA((ihn(),hpt)):(i=uG(oIn(n,Ayt),298),r=oM(gK(oIn(n,Ryt)))||xA(oIn(n,Kyt))===xA((jan(),Ydt)),t=uG(oIn(n,Iyt),17).a,e=n.a.c.length,!r&&i!=(ihn(),hpt)&&(0==t||t>e))}function IRn(n){var t,e;for(e=0;e<n.c.length&&!(bq((u3(e,n.c.length),uG(n.c[e],113)))>0);e++);if(e>0&&e<n.c.length-1)return e;for(t=0;t<n.c.length&&!(bq((u3(t,n.c.length),uG(n.c[t],113)))>0);t++);return t>0&&e<n.c.length-1?t:n.c.length/2|0}function ORn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=6&&t){if(eEn(n,t))throw hv(new vM(net+A$n(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?zjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,6,i)),(i=ZK(n,t,i))&&i.oj()}else 0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,6,t,t))}function ARn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(eEn(n,t))throw hv(new vM(net+SXn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?sEn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,12,i)),(i=nF(n,t,i))&&i.oj()}else 0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,3,t,t))}function LRn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=9&&t){if(eEn(n,t))throw hv(new vM(net+VBn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Wjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,9,i)),(i=tF(n,t,i))&&i.oj()}else 0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,9,t,t))}function NRn(n){var t,e,i,r,c;if(i=bEn(n),null==(c=n.j)&&i)return n.Jk()?null:i.ik();if(F$(i,156)){if((e=i.jk())&&(r=e.wi())!=n.i){if((t=uG(i,156)).nk())try{n.g=r.ti(t,c)}catch(a){if(!F$(a=Ehn(a),82))throw hv(a);n.g=null}n.i=r}return n.g}return null}function $Rn(n){var t;return kD(t=new Zm,new ZP(new MO(n.c,n.d),new MO(n.c+n.b,n.d))),kD(t,new ZP(new MO(n.c,n.d),new MO(n.c,n.d+n.a))),kD(t,new ZP(new MO(n.c+n.b,n.d+n.a),new MO(n.c+n.b,n.d))),kD(t,new ZP(new MO(n.c+n.b,n.d+n.a),new MO(n.c,n.d+n.a))),t}function DRn(n){var t,e;if(null==n)return IZn;try{return cpn(n)}catch(i){if(F$(i=Ehn(i),103))return t=i,e=Ij(Tbn(n))+"@"+(bS(),(Avn(n)>>>0).toString(16)),wkn(ghn(),(pS(),"Exception during lenientFormat for "+e),t),"<"+e+" threw "+Ij(t.Rm)+">";throw hv(i)}}function xRn(n,t,e){var i,r;for(r=t.a.ec().Kc();r.Ob();)i=uG(r.Pb(),74),!uG(cQ(n.b,i),272)&&(R0(bIn(i))==R0(gIn(i))?QKn(n,i,e):bIn(i)==R0(gIn(i))?null==cQ(n.c,i)&&null!=cQ(n.b,gIn(i))&&bWn(n,i,e,!1):null==cQ(n.d,i)&&null!=cQ(n.b,bIn(i))&&bWn(n,i,e,!0))}function RRn(n,t){var e,i,r,c,a,o,u;for(r=n.Kc();r.Ob();)for(i=uG(r.Pb(),10),o2(o=new lOn,i),NLn(o,(KQn(),kRt)),kfn(o,(GYn(),fmt),(qx(),!0)),a=t.Kc();a.Ob();)c=uG(a.Pb(),10),o2(u=new lOn,c),NLn(u,_Rt),kfn(u,fmt,!0),kfn(e=new UZ,fmt,!0),c2(e,o),u2(e,u)}function KRn(n,t,e,i){var r,c,a,o;r=evn(n,t,e),c=evn(n,e,t),a=uG(cQ(n.c,t),118),o=uG(cQ(n.c,e),118),r<c?new A2((_7(),DSt),a,o,c-r):c<r?new A2((_7(),DSt),o,a,r-c):(0!=r||t.i&&e.i&&i[t.i.c][e.i.c])&&(new A2((_7(),DSt),a,o,0),new A2(DSt,o,a,0))}function FRn(n,t){var e,i,r,c,a,o;for(r=0,a=new Ww(t.a);a.a<a.c.c.length;)for(r+=(c=uG(N3(a),10)).o.b+c.d.a+c.d.d+n.e,i=new Fz(ix(qgn(c).a.Kc(),new h));hDn(i);)(e=uG(N9(i),18)).c.i.k==(zIn(),gbt)&&(r+=(o=uG(oIn(e.c.i,(GYn(),rmt)),10)).o.b+o.d.a+o.d.d);return r}function _Rn(){_Rn=E,xAt=new hO("CANDIDATE_POSITION_LAST_PLACED_RIGHT",0),DAt=new hO("CANDIDATE_POSITION_LAST_PLACED_BELOW",1),KAt=new hO("CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT",2),RAt=new hO("CANDIDATE_POSITION_WHOLE_DRAWING_BELOW",3),FAt=new hO("WHOLE_DRAWING",4)}function BRn(n,t){if(F$(t,207))return Ldn(n,uG(t,27));if(F$(t,193))return tgn(n,uG(t,123));if(F$(t,366))return DY(n,uG(t,135));if(F$(t,326))return wqn(n,uG(t,74));if(t)return null;throw hv(new vM(Aet+vIn(new IM(Uhn(cT(dat,1),EZn,1,5,[t])))))}function HRn(n){var t,e,i,r,c,a,o;for(c=new lS,r=new Ww(n.d.a);r.a<r.c.c.length;)0==(i=uG(N3(r),125)).b.a.c.length&&s8(c,i,c.c.b,c.c);if(c.b>1)for(t=jx((e=new sk,++n.b,e),n.d),o=Fkn(c,0);o.b!=o.d.c;)a=uG(I6(o),125),RKn(xS(DS(RS($S(new uk,1),0),t),a))}function URn(n,t,e){var i,r,c,a;for(e.Ug("Breaking Point Removing",1),n.a=uG(oIn(t,(jYn(),Vyt)),223),r=new Ww(t.b);r.a<r.c.c.length;)for(a=new Ww(T3(uG(N3(r),30).a));a.a<a.c.c.length;)Lin(c=uG(N3(a),10))&&!(i=uG(oIn(c,(GYn(),Spt)),313)).d&&PQn(n,i);e.Vg()}function GRn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=11&&t){if(eEn(n,t))throw hv(new vM(net+zBn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?hEn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,10,i)),(i=n_(n,t,i))&&i.oj()}else 0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,11,t,t))}function qRn(n){var t,e,i,r;for(i=new bsn(new Nw(n.b).a);i.b;)r=uG((e=von(i)).ld(),12),kfn(t=uG(e.md(),10),(GYn(),rmt),r),kfn(r,lmt,t),kfn(r,qpt,(qx(),!0)),NLn(r,uG(oIn(t,Fpt),64)),oIn(t,Fpt),kfn(r.i,(jYn(),JMt),($Pn(),oRt)),uG(oIn(HQ(r.i),Hpt),21).Fc((r_n(),rpt))}function XRn(n,t,e){var i,r,c;if(i=0,r=0,n.c)for(c=new Ww(n.d.i.j);c.a<c.c.c.length;)i+=uG(N3(c),12).e.c.length;else i=1;if(n.d)for(c=new Ww(n.c.i.j);c.a<c.c.c.length;)r+=uG(N3(c),12).g.c.length;else r=1;return(e+t)/2+.4*t0(gq(r-i))*(e-t)}function zRn(n){var t,e;if(gPn(),n.Hc((KQn(),FRt)))throw hv(new vM("Port sides must not contain UNDEFINED"));switch(n.gc()){case 1:return wdt;case 2:return t=n.Hc(kRt)&&n.Hc(_Rt),e=n.Hc(yRt)&&n.Hc(KRt),t||e?pdt:gdt;case 3:return ddt;case 4:return bdt;default:return null}}function VRn(n,t,e){return l_n(),(!qun(n,t)||!qun(n,e))&&(RWn(new MO(n.c,n.d),new MO(n.c+n.b,n.d),t,e)||RWn(new MO(n.c+n.b,n.d),new MO(n.c+n.b,n.d+n.a),t,e)||RWn(new MO(n.c+n.b,n.d+n.a),new MO(n.c,n.d+n.a),t,e)||RWn(new MO(n.c,n.d+n.a),new MO(n.c,n.d),t,e))}function WRn(n,t){var e,i,r,c;if(!n.dc())for(e=0,i=n.gc();e<i;++e)if(null==(c=mK(n.Xb(e)))?null==t:m_(c.substr(0,3),"!##")?null!=t&&(r=t.length,!m_(c.substr(c.length-r,r),t)||c.length!=t.length+3)&&!m_(lct,t):m_(c,bct)&&!m_(lct,t)||m_(c,t))return!0;return!1}function QRn(n,t,e,i){var r,c,a,o,u,s;for(a=n.j.c.length,u=Inn(_st,X2n,314,a,0,1),o=0;o<a;o++)(c=uG(zq(n.j,o),12)).p=o,u[o]=r$n(bDn(c),e,i);for(BKn(n,u,e,t,i),s=new Ym,r=0;r<u.length;r++)u[r]&&vJ(s,uG(zq(n.j,r),12),u[r]);s.f.c+s.i.c!=0&&(kfn(n,(GYn(),$pt),s),dOn(n,u))}function JRn(n,t){var e,i,r;for(t.Ug("Partition postprocessing",1),e=new Ww(n.b);e.a<e.c.c.length;)for(i=new Ww(uG(N3(e),30).a);i.a<i.c.c.length;)for(r=new Ww(uG(N3(i),10).j);r.a<r.c.c.length;)oM(gK(oIn(uG(N3(r),12),(GYn(),fmt))))&&tW(r);t.Vg()}function YRn(n,t,e){var i,r;for(i=new Ww(n.a.b);i.a<i.c.c.length;)if((r=z4(uG(N3(i),60)))&&r.k==(zIn(),lbt))switch(uG(oIn(r,(GYn(),Fpt)),64).g){case 4:r.n.a=t.a;break;case 2:r.n.a=e.a-(r.o.a+r.d.c);break;case 1:r.n.b=t.b;break;case 3:r.n.b=e.b-(r.o.b+r.d.a)}}function ZRn(n,t,e){var i,r,c;for(e.Ug("Processor determine the height for each level",1),n.a=0==t.b.b?1:t.b.b,r=null,i=Fkn(t.b,0);!r&&i.b!=i.d.c;)oM(gK(oIn(c=uG(I6(i),39),(OQn(),UPt))))&&(r=c);r&&dqn(n,n7(Uhn(cT(lPt,1),z9n,39,0,[r])),e,uG(oIn(t,(QGn(),cCt)),88)),e.Vg()}function nKn(n){var t,e,i,r;for(gj(),aKn(i=new Bk,n),e=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));e.e!=e.i.gc();)t=uG(Zkn(e),27),GRn(r=new Bk,i),vN(r,t.g,t.f),Gan(r,t.k),kN(r,t.i,t.j),ttn((!i.a&&(i.a=new fV(bFt,i,10,11)),i.a),r),aKn(r,t);return i}function tKn(n,t,e){var i,r,c;if(!(r=uG(zDn(t,(lIn(),XNt)),17))&&(r=xwn(0)),!(c=uG(zDn(e,XNt),17))&&(c=xwn(0)),r.a>c.a)return-1;if(r.a<c.a)return 1;if(n.a){if(0!=(i=ugn(t.j,e.j)))return i;if(0!=(i=ugn(t.i,e.i)))return i}return ugn(t.g*t.f,e.g*e.f)}function eKn(n,t){var e,i,r,c,a,o,u,s,h,f;if(++n.e,t>(u=null==n.d?0:n.d.length)){for(h=n.d,n.d=Inn(IFt,qit,66,2*u+4,0,1),c=0;c<u;++c)if(s=h[c])for(i=s.g,f=s.i,o=0;o<f;++o)a=iF(n,(r=uG(i[o],136)).Bi()),!(e=n.d[a])&&(e=n.d[a]=n.dk()),e.Fc(r);return!0}return!1}function iKn(n,t,e){var i,r,c,a,o,u;if(c=(r=e).Lk(),EFn(n.e,c)){if(c.Si())for(i=uG(n.g,124),a=0;a<n.i;++a)if(udn(o=i[a],r)&&a!=t)throw hv(new vM(Xet))}else for(u=VKn(n.e.Dh(),c),i=uG(n.g,124),a=0;a<n.i;++a)if(o=i[a],u.am(o.Lk()))throw hv(new vM(dct));$dn(n,t,e)}function rKn(n,t){var e,i,r,c,a,o;for(e=uG(oIn(t,(GYn(),xpt)),21),a=uG(Y9((aYn(),Jlt),e),21),o=uG(Y9(rbt,e),21),c=a.Kc();c.Ob();)if(i=uG(c.Pb(),21),!uG(Y9(n.b,i),15).dc())return!1;for(r=o.Kc();r.Ob();)if(i=uG(r.Pb(),21),!uG(Y9(n.b,i),15).dc())return!1;return!0}function cKn(n,t){var e,i,r,c,a,o,u;if(1==n.a.c.length)return EOn(uG(zq(n.a,0),172),t);for(r=Swn(n),a=0,o=n.d,i=r,u=n.d,c=(o-i)/2+i;i+1<o;){for(a=0,e=new Ww(n.a);e.a<e.c.c.length;)a+=uXn(uG(N3(e),172),c,!1).a;a<t?(u=c,o=c):i=c,c=(o-i)/2+i}return u}function aKn(n,t){var e,i,r,c,a;if(!t)return n;if(F$(t,342))for(r=uG(t,342),!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),c=n.o,i=r.gh().c.Kc();i.e!=i.i.gc();)a=(e=uG(i.Yj(),44)).md(),rSn(c,uG(e.ld(),149),a);else!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),hon(n.o,t.nf());return n}function oKn(n){var t,e,i,r;return isNaN(n)?(tin(),not):n<-0x8000000000000000?(tin(),Yat):n>=0x8000000000000000?(tin(),Jat):(i=!1,n<0&&(i=!0,n=-n),e=0,n>=d0n&&(n-=(e=t0(n/d0n))*d0n),t=0,n>=w0n&&(n-=(t=t0(n/w0n))*w0n),r=p$(t0(n),t,e),i&&Yfn(r),r)}function uKn(n){var t,e,i,r,c;if(c=new Zm,Prn(n.b,new Ed(c)),n.b.c.length=0,0!=c.c.length){for(u3(0,c.c.length),t=uG(c.c[0],82),e=1,i=c.c.length;e<i;++e)u3(e,c.c.length),(r=uG(c.c[e],82))!=t&&OCn(t,r);if(F$(t,63))throw hv(uG(t,63));if(F$(t,295))throw hv(uG(t,295))}}function sKn(n,t){var e,i,r,c;for(e=!t||!n.u.Hc((eNn(),wRt)),c=0,r=new Ww(n.e.Xf());r.a<r.c.c.length;){if((i=uG(N3(r),852)).ag()==(KQn(),FRt))throw hv(new vM("Label and node size calculator can only be used with ports that have port sides assigned."));i.Qf(c++),wwn(n,i,e)}}function hKn(n){var t,e,i,r,c;for(e=new Ww(n.a.a);e.a<e.c.c.length;){for((t=uG(N3(e),316)).j=null,c=t.a.a.ec().Kc();c.Ob();)dL((i=uG(c.Pb(),60)).b),(!t.j||i.d.c<t.j.d.c)&&(t.j=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=uG(r.Pb(),60)).b.a=i.d.c-t.j.d.c,i.b.b=i.d.d-t.j.d.d}return n}function fKn(n){var t,e,i,r,c;for(e=new Ww(n.a.a);e.a<e.c.c.length;){for((t=uG(N3(e),194)).f=null,c=t.a.a.ec().Kc();c.Ob();)dL((i=uG(c.Pb(),86)).e),(!t.f||i.g.c<t.f.g.c)&&(t.f=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=uG(r.Pb(),86)).e.a=i.g.c-t.f.g.c,i.e.b=i.g.d-t.f.g.d}return n}function lKn(n){var t,i,r;return i=uG(n.a,17).a,r=uG(n.b,17).a,i<(t=e.Math.max(e.Math.abs(i),e.Math.abs(r)))&&r==-t?new WO(xwn(i+1),xwn(r)):i==t&&r<t?new WO(xwn(i),xwn(r+1)):i>=-t&&r==t?new WO(xwn(i-1),xwn(r)):new WO(xwn(i),xwn(r-1))}function bKn(){return zYn(),Uhn(cT(Vwt,1),p1n,81,0,[qbt,Hbt,Xbt,uwt,Pwt,lwt,Nwt,pwt,Ewt,iwt,ywt,gwt,Swt,Zbt,Dwt,xbt,kwt,Iwt,swt,Cwt,Rwt,Twt,Rbt,jwt,Kwt,Awt,xwt,hwt,Qbt,fwt,owt,$wt,_bt,Vbt,wwt,Fbt,dwt,cwt,nwt,mwt,ewt,Ubt,Bbt,awt,twt,vwt,Lwt,Kbt,Mwt,rwt,bwt,Jbt,Wbt,Owt,zbt,Ybt,Gbt])}function wKn(n,t,e){n.d=0,n.b=0,t.k==(zIn(),gbt)&&e.k==gbt&&uG(oIn(t,(GYn(),rmt)),10)==uG(oIn(e,rmt),10)&&(jen(t).j==(KQn(),yRt)?Rxn(n,t,e):Rxn(n,e,t)),t.k==gbt&&e.k==wbt?jen(t).j==(KQn(),yRt)?n.d=1:n.b=1:e.k==gbt&&t.k==wbt&&(jen(e).j==(KQn(),yRt)?n.b=1:n.d=1),GMn(n,t,e)}function dKn(n){var t,e,i,r,c;return c=gCn(n),null!=n.a&&ZG(c,"category",n.a),!pE(new Lw(n.d))&&(nrn(c,"knownOptions",i=new Ib),t=new Mm(i),z8(new Lw(n.d),t)),!pE(n.g)&&(nrn(c,"supportedFeatures",r=new Ib),e=new Tm(r),z8(n.g,e)),c}function gKn(n){var t,e,i,r,c,a,o,u;for(t=336,e=0,r=new UF(n.length),o=0,u=(a=n).length;o<u;++o)vgn(c=a[o]),GQ(c),i=c.a,kD(r.a,WW(i)),t&=i.yd(),e=cbn(e,i.zd());return uG(uG(bW(new fX(null,ICn(new h3((ZW(),Emn(r.a)),16),new g,t,e)),new jb(n)),687),848)}function pKn(n,t){var e;n.d&&(t.c!=n.e.c||iun(n.e.b,t.b))&&(kD(n.f,n.d),n.a=n.d.c+n.d.b,n.d=null,n.e=null),HL(t.b)?n.c=t:n.b=t,(t.b==(Xhn(),Flt)&&!t.a||t.b==_lt&&t.a||t.b==Blt&&t.a||t.b==Hlt&&!t.a)&&n.c&&n.b&&(e=new gY(n.a,n.c.d,t.c-n.a,n.b.d-n.c.d),n.d=e,n.e=t)}function mKn(n){var t;if(ly.call(this),this.i=new su,this.g=n,this.f=uG(n.e&&n.e(),9).length,0==this.f)throw hv(new vM("There must be at least one phase in the phase enumeration."));this.c=new nB(t=uG(Mj(this.g),9),uG(MF(t,t.length),9),0),this.a=new wJ,this.b=new Ym}function vKn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=7&&t){if(eEn(n,t))throw hv(new vM(net+zOn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Vjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=uG(t,54).Rh(n,1,iFt,i)),(i=dz(n,t,i))&&i.oj()}else 0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,7,t,t))}function kKn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(eEn(n,t))throw hv(new vM(net+fdn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Yjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=uG(t,54).Rh(n,0,uFt,i)),(i=gz(n,t,i))&&i.oj()}else 0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,3,t,t))}function yKn(n,t){var e,i,r,c,a,o,u,s,h;return b_n(),t.d>n.d&&(o=n,n=t,t=o),t.d<63?KFn(n,t):(s=$9(n,a=(-2&n.d)<<4),h=$9(t,a),i=mXn(n,D9(s,a)),r=mXn(t,D9(h,a)),u=yKn(s,h),e=yKn(i,r),c=D9(c=Zzn(Zzn(c=yKn(mXn(s,i),mXn(r,h)),u),e),a),Zzn(Zzn(u=D9(u,a<<1),c),e))}function MKn(){MKn=E,rjt=new fI(v9n,0),tjt=new fI("LONGEST_PATH",1),ejt=new fI("LONGEST_PATH_SOURCE",2),YTt=new fI("COFFMAN_GRAHAM",3),njt=new fI(D6n,4),cjt=new fI("STRETCH_WIDTH",5),ijt=new fI("MIN_WIDTH",6),JTt=new fI("BF_MODEL_ORDER",7),ZTt=new fI("DF_MODEL_ORDER",8)}function TKn(n,t,e){var i,r,c,a,o;for(a=Vwn(n,e),o=Inn(pbt,e6n,10,t.length,0,1),i=0,c=a.Kc();c.Ob();)oM(gK(oIn(r=uG(c.Pb(),12),(GYn(),qpt))))&&(o[i++]=uG(oIn(r,lmt),10));if(i<t.length)throw hv(new kM("Expected "+t.length+" hierarchical ports, but found only "+i+"."));return o}function jKn(n,t){var e,i,r,c,a,o;if(!n.tb){for(!n.rb&&(n.rb=new vV(n,s_t,n)),o=new sS((c=n.rb).i),r=new DD(c);r.e!=r.i.gc();)i=uG(Zkn(r),142),(e=uG(null==(a=i.xe())?VAn(o.f,null,i):kgn(o.i,a,i),142))&&(null==a?VAn(o.f,null,e):kgn(o.i,a,e));n.tb=o}return uG(U1(n.tb,t),142)}function EKn(n,t){var e,i,r,c,a;if((null==n.i&&eqn(n),n.i).length,!n.p){for(a=new sS(1+(3*n.g.i/2|0)),r=new nR(n.g);r.e!=r.i.gc();)i=uG(nyn(r),179),(e=uG(null==(c=i.xe())?VAn(a.f,null,i):kgn(a.i,c,i),179))&&(null==c?VAn(a.f,null,e):kgn(a.i,c,e));n.p=a}return uG(U1(n.p,t),179)}function SKn(n,t,e,i,r){var c,a,o,u;for(Xvn(i+i1(e,e.ie()),r),mQ(t,Rpn(e)),(c=e.f)&&SKn(n,t,c,"Caused by: ",!1),null==e.k&&(e.k=Inn(xat,zZn,82,0,0,1)),o=0,u=(a=e.k).length;o<u;++o)SKn(n,t,a[o],"Suppressed: ",!1);null!=console.groupEnd&&console.groupEnd.call(console)}function PKn(n,t,e,i){var r,c,a,o;for(a=(o=t.e).length,c=t.q.ug(o,e?0:a-1,e),c|=wBn(n,o[e?0:a-1],e,i),r=e?1:a-2;e?r<a:r>=0;r+=e?1:-1)c|=t.c.lg(o,r,e,i&&!oM(gK(oIn(t.j,(GYn(),Bpt))))&&!oM(gK(oIn(t.j,(GYn(),mmt))))),c|=t.q.ug(o,r,e),c|=wBn(n,o[r],e,i);return FV(n.c,t),c}function CKn(n,t,e){var i,r,c,a,o,u,s,h;for(s=0,h=(u=s6(n.j)).length;s<h;++s){if(o=u[s],e==(can(),Vjt)||e==Qjt)for(c=0,a=(r=x4(o.g)).length;c<a;++c)wOn(t,i=r[c])&&pqn(i,!0);if(e==Wjt||e==Qjt)for(c=0,a=(r=x4(o.e)).length;c<a;++c)bOn(t,i=r[c])&&pqn(i,!0)}}function IKn(n){var t,e;switch(t=null,e=null,FSn(n).g){case 1:KQn(),t=kRt,e=_Rt;break;case 2:KQn(),t=KRt,e=yRt;break;case 3:KQn(),t=_Rt,e=kRt;break;case 4:KQn(),t=yRt,e=KRt}qb(n,uG(yx(Qz(uG(Y9(n.k,t),15).Oc(),Fdt)),113)),Gb(n,uG(yx(Wz(uG(Y9(n.k,e),15).Oc(),Fdt)),113))}function OKn(n){var t,e,i,r,c,a;if((r=uG(zq(n.j,0),12)).e.c.length+r.g.c.length==0)n.n.a=0;else{for(a=0,i=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(r),new Wd(r)])));hDn(i);)a+=(e=uG(N9(i),12)).i.n.a+e.n.a+e.a.a;c=(t=uG(oIn(n,(jYn(),WMt)),8))?t.a:0,n.n.a=a/(r.e.c.length+r.g.c.length)-c}}function AKn(n,t){var e,i,r;for(i=new Ww(t.a);i.a<i.c.c.length;)e=uG(N3(i),225),JX(uG(e.b,68),YF(D$(uG(t.b,68).c),uG(t.b,68).a)),(r=oGn(uG(t.b,68).b,uG(e.b,68).b))>1&&(n.a=!0),YX(uG(e.b,68),JF(D$(uG(t.b,68).c),vD(YF(D$(uG(e.b,68).a),uG(t.b,68).a),r))),f2(n,t),AKn(n,e)}function LKn(n){var t,e,i,r,c,a;for(r=new Ww(n.a.a);r.a<r.c.c.length;)(e=uG(N3(r),194)).e=0,e.d.a.$b();for(i=new Ww(n.a.a);i.a<i.c.c.length;)for(t=(e=uG(N3(i),194)).a.a.ec().Kc();t.Ob();)for(a=uG(t.Pb(),86).f.Kc();a.Ob();)(c=uG(a.Pb(),86)).d!=e&&(FV(e.d,c),++c.d.e)}function NKn(n){var t,e,i,r,c,a,o,u;for(e=0,t=u=n.j.c.length,r=2*u,o=new Ww(n.j);o.a<o.c.c.length;)switch((a=uG(N3(o),12)).j.g){case 2:case 4:a.p=-1;break;case 1:case 3:i=a.e.c.length,c=a.g.c.length,a.p=i>0&&c>0?t++:i>0?e++:c>0?r++:e++}hZ(),f$(n.j,new bi)}function $Kn(n){var t,e;e=null,t=uG(zq(n.g,0),18);do{if(vR(e=t.d.i,(GYn(),nmt)))return uG(oIn(e,nmt),12).i;if(e.k!=(zIn(),dbt)&&hDn(new Fz(ix(Xgn(e).a.Kc(),new h))))t=uG(N9(new Fz(ix(Xgn(e).a.Kc(),new h))),18);else if(e.k!=dbt)return null}while(e&&e.k!=(zIn(),dbt));return e}function DKn(n,t){var e,i,r,c,a,o,u,s,h;for(o=t.j,a=t.g,u=uG(zq(o,o.c.length-1),113),u3(0,o.c.length),s=xTn(n,a,u,h=uG(o.c[0],113)),c=1;c<o.c.length;c++)u3(c-1,o.c.length),e=uG(o.c[c-1],113),u3(c,o.c.length),(i=xTn(n,a,e,r=uG(o.c[c],113)))>s&&(u=e,h=r,s=i);t.a=h,t.c=u}function xKn(n,t,e){var i,r,c,a,o,u,s;for(s=new Hj(new ip(n)),o=0,u=(a=Uhn(cT(Abt,1),i6n,12,0,[t,e])).length;o<u;++o)for(c=a[o],s.a.zc(c,(qx(),tot)),r=new w7(c.b);l$(r.a)||l$(r.b);)(i=uG(l$(r.a)?N3(r.a):N3(r.b),18)).c==i.d||_V(s,c==i.c?i.d:i.c);return WW(s),new Z_(s)}function RKn(n){if(!n.a.d||!n.a.e)throw hv(new kM((vK(Mst),Mst.k+" must have a source and target "+(vK(Tst),Tst.k+" specified."))));if(n.a.d==n.a.e)throw hv(new kM("Network simplex does not support self-loops: "+n.a+" "+n.a.d+" "+n.a.e));return Sx(n.a.d.g,n.a),Sx(n.a.e.b,n.a),n.a}function KKn(n,t){var e,i,r,c,a,o;for(t.Ug("Constraints Postprocessor",1),c=0,r=new Ww(n.b);r.a<r.c.c.length;){for(o=0,a=!1,i=new Ww(uG(N3(r),30).a);i.a<i.c.c.length;)(e=uG(N3(i),10)).k==(zIn(),dbt)&&(a=!0,kfn(e,(jYn(),pMt),xwn(c)),kfn(e,xyt,xwn(o)),++o);a&&++c}t.Vg()}function FKn(n,t,e){var i,r,c,a,o,u;if(i=0,0!=t.b&&0!=e.b){c=Fkn(t,0),a=Fkn(e,0),o=uM(pK(I6(c))),u=uM(pK(I6(a))),r=!0;do{if(o>u-n.b&&o<u+n.b)return-1;o>u-n.a&&o<u+n.a&&++i,o<=u&&c.b!=c.d.c?o=uM(pK(I6(c))):u<=o&&a.b!=a.d.c?u=uM(pK(I6(a))):r=!1}while(r)}return i}function _Kn(n,t){var e;return _J(n.a),JV(n.a,(pon(),VCt),VCt),JV(n.a,WCt,WCt),Aq(e=new wJ,WCt,(zPn(),tIt)),xA(zDn(t,(jOn(),LIt)))!==xA((vbn(),sIt))&&Aq(e,WCt,YCt),oM(gK(zDn(t,UIt)))&&Aq(e,WCt,eIt),Aq(e,WCt,ZCt),oM(gK(zDn(t,qIt)))&&wz(e,WCt,nIt),ZL(n.a,e),Qzn(n.a,t)}function BKn(n,t,e,i,r){var c,a,o,u;for(u=new nB(c=uG(Mj(YRt),9),uG(MF(c,c.length),9),0),o=new Ww(n.j);o.a<o.c.c.length;)t[(a=uG(N3(o),12)).p]&&(aJn(a,t[a.p],i),Mon(u,a.j));r?(CPn(n,t,(KQn(),kRt),2*e,i),CPn(n,t,_Rt,2*e,i)):(CPn(n,t,(KQn(),yRt),2*e,i),CPn(n,t,KRt,2*e,i))}function HKn(n){var t;for(t=new Fz(ix(Xgn(n).a.Kc(),new h));hDn(t);)if(uG(N9(t),18).d.i.k!=(zIn(),bbt))throw hv(new jM(y6n+ZTn(n)+"' has its layer constraint set to LAST, but has at least one outgoing edge that does not go to a LAST_SEPARATE node. That must not happen."))}function UKn(n,t,e){var i,r,c,a;for(e.Ug("Longest path layering",1),n.a=t,a=n.a.a,n.b=Inn(YHt,W1n,28,a.c.length,15,1),i=0,c=new Ww(a);c.a<c.c.c.length;)uG(N3(c),10).p=i,n.b[i]=-1,++i;for(r=new Ww(a);r.a<r.c.c.length;)Ixn(n,uG(N3(r),10));a.c.length=0,n.a=null,n.b=null,e.Vg()}function GKn(n,t,i,r){var c,a,o,u,s,f,l;for(u=0,s=new Ww(n.a);s.a<s.c.c.length;){for(o=0,a=new Fz(ix(qgn(uG(N3(s),10)).a.Kc(),new h));hDn(a);)f=n3((c=uG(N9(a),18)).c).b,l=n3(c.d).b,o=e.Math.max(o,e.Math.abs(l-f));u=e.Math.max(u,o)}return r*e.Math.min(1,t/i)*u}function qKn(n,t){var e,i,r,c,a;for(a=uG(oIn(t,(QGn(),MCt)),433),c=Fkn(t.b,0);c.b!=c.d.c;)if(r=uG(I6(c),39),0==n.b[r.g]){switch(a.g){case 0:vMn(n,r);break;case 1:ADn(n,r)}n.b[r.g]=2}for(i=Fkn(n.a,0);i.b!=i.d.c;)Wpn((e=uG(I6(i),65)).b.d,e,!0),Wpn(e.c.b,e,!0);kfn(t,(OQn(),_Pt),n.a)}function XKn(n){var t;return t=new VM,0!=(256&n)&&(t.a+="F"),0!=(128&n)&&(t.a+="H"),0!=(512&n)&&(t.a+="X"),0!=(2&n)&&(t.a+="i"),0!=(8&n)&&(t.a+="m"),0!=(4&n)&&(t.a+="s"),0!=(32&n)&&(t.a+="u"),0!=(64&n)&&(t.a+="w"),0!=(16&n)&&(t.a+="x"),0!=(n&w1n)&&(t.a+=","),lM(t.a)}function zKn(n,t){var i,r,c,a,o;t.Ug(snt,1),c=uG(zDn(n,(S_n(),hAt)),107),!n.a&&(n.a=new fV(bFt,n,10,11)),a=Ijn(n.a),o=e.Math.max(a.a,uM(pK(zDn(n,(lBn(),EOt))))-(c.b+c.c)),i=(r=e.Math.max(a.b,uM(pK(zDn(n,MOt)))-(c.d+c.a)))-a.b,Myn(n,pOt,i),Myn(n,vOt,o),Myn(n,mOt,r+i),t.Vg()}function VKn(n,t){var e,i,r,c;return PP(),t?t==(uVn(),cHt)||(t==BBt||t==FBt||t==_Bt)&&n!=KBt?new MQn(n,t):((e=(i=uG(t,692)).$k())||(BJ(Nen((gAn(),kBt),t)),e=i.$k()),!e.i&&(e.i=new Ym),!(r=uG(DA(FX((c=e.i).f,n)),2041))&&vJ(c,n,r=new MQn(n,t)),r):PBt}function WKn(n,t){var e;if(!_V(n.b,t.b))throw hv(new kM("Invalid hitboxes for scanline constraint calculation."));(Ihn(t.b,uG(MS(n.b,t.b),60))||Ihn(t.b,uG(yS(n.b,t.b),60)))&&(bS(),String.fromCharCode(10)),n.a[t.b.f]=uG(jS(n.b,t.b),60),(e=uG(TS(n.b,t.b),60))&&(n.a[e.f]=t.b)}function QKn(n,t,e){var i,r,c;for(zsn(c=new pDn(vYn(COn(JFn(t,!1,!1)),uM(pK(zDn(t,(ryn(),Jht))))+n.a)),t),vJ(n.b,t,c),mv(e.c,c),!t.n&&(t.n=new fV(lFt,t,1,7)),r=new DD(t.n);r.e!=r.i.gc();)i=nHn(n,uG(Zkn(r),135),!0,0,0),mv(e.c,i);return c}function JKn(n,t){var e,i,r,c,a,o;for(r=new Zm,e=0;e<=n.j;e++)(i=new bQ(t)).p=n.j-e,mv(r.c,i);for(o=new Ww(n.p);o.a<o.c.c.length;)a2(a=uG(N3(o),10),uG(zq(r,n.j-n.g[a.p]),30));for(c=new Ww(r);c.a<c.c.c.length;)0==uG(N3(c),30).a.c.length&&tW(c);t.b.c.length=0,Ohn(t.b,r)}function YKn(n,t){var e,i,r,c,a,o,u,s;for(o=uG(oIn(n,(GYn(),rmt)),12),u=Gfn(Uhn(cT(PNt,1),zZn,8,0,[o.i.n,o.n,o.a])).a,s=n.i.n.b,r=0,c=(i=x4(n.e)).length;r<c;++r)u2(e=i[r],o),cL(e.a,new MO(u,s)),t&&((a=uG(oIn(e,(jYn(),bMt)),75))||(a=new Uk,kfn(e,bMt,a)),aq(a,new MO(u,s)))}function ZKn(n,t){var e,i,r,c,a,o,u,s;for(i=uG(oIn(n,(GYn(),rmt)),12),u=Gfn(Uhn(cT(PNt,1),zZn,8,0,[i.i.n,i.n,i.a])).a,s=n.i.n.b,a=0,o=(c=x4(n.g)).length;a<o;++a)c2(r=c[a],i),aL(r.a,new MO(u,s)),t&&((e=uG(oIn(r,(jYn(),bMt)),75))||(e=new Uk,kfn(r,bMt,e)),aq(e,new MO(u,s)))}function nFn(n){var t,e,i,r,c,a,o;if(r=(i=n.b).e,c=L_(uG(oIn(i,(jYn(),JMt)),101)),e=!!r&&uG(oIn(r,(GYn(),Hpt)),21).Hc((r_n(),tpt)),!c&&!e)for(o=new _w(new Fw(n.e).a.vc().Kc());o.a.Ob();)t=uG(o.a.Pb(),44),(a=uG(t.md(),113)).a&&(o2(a.d,null),a.c=!0,n.a=!0)}function tFn(n,t){var e,i;for(t.Ug("Semi-Interactive Crossing Minimization Processor",1),e=!1,i=new Ww(n.b);i.a<i.c.c.length;)e|=null!=cdn(krn(JJ(JJ(new fX(null,new h3(uG(N3(i),30).a,16)),new Qi),new Ji),new Yi),new Zi).a;e&&kfn(n,(GYn(),Wpt),(qx(),!0)),t.Vg()}function eFn(n,t){var e,i,r,c,a;for(n.b=new Zm,n.d=uG(oIn(t,(GYn(),dmt)),234),n.e=X3(n.d),c=new lS,r=n7(Uhn(cT(sbt,1),V4n,36,0,[t])),a=0;a<r.c.length;)u3(a,r.c.length),(i=uG(r.c[a],36)).p=a++,Ohn(r,(e=new KVn(i,n.a,n.b)).b),kD(n.b,e),e.s&&lW(Fkn(c,0),e);return n.c=new ek,c}function iFn(n,t){var e,i,r,c,a,o;for(a=uG(uG(Y9(n.r,t),21),87).Kc();a.Ob();)(e=(c=uG(a.Pb(),117)).c?rq(c.c):0)>0?c.a?e>(o=c.b.Mf().a)&&(r=(e-o)/2,c.d.b=r,c.d.c=r):c.d.c=n.s+e:cV(n.u)&&((i=ECn(c.b)).c<0&&(c.d.b=-i.c),i.c+i.b>c.b.Mf().a&&(c.d.c=i.c+i.b-c.b.Mf().a))}function rFn(n,t){var e,i,r,c,a;a=new Zm,e=t;do{(c=uG(cQ(n.b,e),131)).B=e.c,c.D=e.d,mv(a.c,c),e=uG(cQ(n.k,e),18)}while(e);return u3(0,a.c.length),(i=uG(a.c[0],131)).j=!0,i.A=uG(i.d.a.ec().Kc().Pb(),18).c.i,(r=uG(zq(a,a.c.length-1),131)).q=!0,r.C=uG(r.d.a.ec().Kc().Pb(),18).d.i,a}function cFn(n){var t,i;if(t=uG(n.a,17).a,i=uG(n.b,17).a,t>=0){if(t==i)return new WO(xwn(-t-1),xwn(-t-1));if(t==-i)return new WO(xwn(-t),xwn(i+1))}return e.Math.abs(t)>e.Math.abs(i)?new WO(xwn(-t),xwn(t<0?i:i+1)):new WO(xwn(t+1),xwn(i))}function aFn(n){var t,e;e=uG(oIn(n,(jYn(),gMt)),171),t=uG(oIn(n,(GYn(),Xpt)),311),e==(Gpn(),Imt)?(kfn(n,gMt,Lmt),kfn(n,Xpt,(Zen(),ppt))):e==Amt?(kfn(n,gMt,Lmt),kfn(n,Xpt,(Zen(),dpt))):t==(Zen(),ppt)?(kfn(n,gMt,Imt),kfn(n,Xpt,gpt)):t==dpt&&(kfn(n,gMt,Amt),kfn(n,Xpt,gpt))}function oFn(){oFn=E,LSt=new oa,CSt=Aq(new wJ,(uIn(),Elt),(zYn(),swt)),ASt=wz(Aq(new wJ,Elt,Twt),Plt,Mwt),NSt=Lvn(Lvn(gP(wz(Aq(new wJ,Tlt,Nwt),Plt,Lwt),Slt),Awt),$wt),ISt=wz(Aq(Aq(Aq(new wJ,jlt,lwt),Slt,wwt),Slt,dwt),Plt,bwt),OSt=wz(Aq(Aq(new wJ,Slt,dwt),Slt,Vbt),Plt,zbt)}function uFn(){uFn=E,KSt=Aq(wz(new wJ,(uIn(),Plt),(zYn(),Jbt)),Elt,swt),HSt=Lvn(Lvn(gP(wz(Aq(new wJ,Tlt,Nwt),Plt,Lwt),Slt),Awt),$wt),FSt=wz(Aq(Aq(Aq(new wJ,jlt,lwt),Slt,wwt),Slt,dwt),Plt,bwt),BSt=Aq(Aq(new wJ,Elt,Twt),Plt,Mwt),_St=wz(Aq(Aq(new wJ,Slt,dwt),Slt,Vbt),Plt,zbt)}function sFn(n,t,e,i,r){var c,a;(v9(t)||t.c.i.c!=t.d.i.c)&&uon(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])),e)||v9(t)||(t.c==r?sR(t.a,0,new eN(e)):aq(t.a,new eN(e)),i&&!cS(n.a,e)&&((a=uG(oIn(t,(jYn(),bMt)),75))||(a=new Uk,kfn(t,bMt,a)),s8(a,c=new eN(e),a.c.b,a.c),FV(n.a,c)))}function hFn(n,t){var e,i,r,c;for(e=(c=pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))))&n.b.length-1,r=null,i=n.b[e];i;r=i,i=i.a)if(i.d==c&&xQ(i.i,t))return r?r.a=i.a:n.b[e]=i.a,RM(uG(nJ(i.c),604),uG(nJ(i.f),604)),Tv(uG(nJ(i.b),227),uG(nJ(i.e),227)),--n.f,++n.e,!0;return!1}function fFn(n){var t;for(t=new Fz(ix(qgn(n).a.Kc(),new h));hDn(t);)if(uG(N9(t),18).c.i.k!=(zIn(),bbt))throw hv(new jM(y6n+ZTn(n)+"' has its layer constraint set to FIRST, but has at least one incoming edge that does not come from a FIRST_SEPARATE node. That must not happen."))}function lFn(n,t,e){var i,r,c,a,o,u;if(0==(r=Cdn(254&n.Db)))n.Eb=e;else{if(1==r)a=Inn(dat,EZn,1,2,5,1),0==jTn(n,t)?(a[0]=e,a[1]=n.Eb):(a[0]=n.Eb,a[1]=e);else for(a=Inn(dat,EZn,1,r+1,5,1),c=Kcn(n.Eb),i=2,o=0,u=0;i<=128;i<<=1)i==t?a[u++]=e:0!=(n.Db&i)&&(a[u++]=c[o++]);n.Eb=a}n.Db|=t}function bFn(n,t,i){var r,c,a,o;for(this.b=new Zm,c=0,r=0,o=new Ww(n);o.a<o.c.c.length;)a=uG(N3(o),176),i&&Jqn(a),kD(this.b,a),c+=a.o,r+=a.p;this.b.c.length>0&&(c+=(a=uG(zq(this.b,0),176)).o,r+=a.p),c*=2,r*=2,t>1?c=t0(e.Math.ceil(c*t)):r=t0(e.Math.ceil(r/t)),this.a=new smn(c,r)}function wFn(n,t,i,r,c,a){var o,u,s,h,f,l,b,w,d,g;for(h=r,t.j&&t.o?(d=(b=uG(cQ(n.f,t.A),60)).d.c+b.d.b,--h):d=t.a.c+t.a.b,f=c,i.q&&i.o?(s=(b=uG(cQ(n.f,i.C),60)).d.c,++f):s=i.a.c,w=d+(u=(s-d)/e.Math.max(2,f-h)),l=h;l<f;++l)g=(o=uG(a.Xb(l),131)).a.b,o.a.c=w-g/2,w+=u}function dFn(n,t){var e,i,r,c,a,o,u,s;r=t?new bc:new wc,c=!1;do{for(c=!1,a=(t?Spn(n.b):n.b).Kc();a.Ob();)for(s=T3(uG(a.Pb(),30).a),t||Spn(s),u=new Ww(s);u.a<u.c.c.length;)o=uG(N3(u),10),r.Mb(o)&&(i=o,e=uG(oIn(o,(GYn(),Spt)),313),c=Q_n(i,t?e.b:e.k,t,!1))}while(c)}function gFn(n,t,e,i,r,c){var a,o,u,s,h,f;for(s=e.c.length,c&&(n.c=Inn(YHt,W1n,28,t.length,15,1)),a=r?0:t.length-1;r?a<t.length:a>=0;a+=r?1:-1){for(o=t[a],u=i==(KQn(),kRt)?r?Dgn(o,i):Spn(Dgn(o,i)):r?Spn(Dgn(o,i)):Dgn(o,i),c&&(n.c[o.p]=u.gc()),f=u.Kc();f.Ob();)h=uG(f.Pb(),12),n.d[h.p]=s++;Ohn(e,u)}}function pFn(n,t,e){var i,r,c,a,o,u,s,h;for(c=uM(pK(n.b.Kc().Pb())),s=uM(pK(whn(t.b))),i=vD(D$(n.a),s-e),r=vD(D$(t.a),e-c),vD(h=JF(i,r),1/(s-c)),this.a=h,this.b=new Zm,o=!0,(a=n.b.Kc()).Pb();a.Ob();)u=uM(pK(a.Pb())),o&&u-e>$9n&&(this.b.Fc(e),o=!1),this.b.Fc(u);o&&this.b.Fc(e)}function mFn(n){var t,e,i,r;if(wHn(n,n.n),n.d.c.length>0){for(AM(n.c);fDn(n,uG(N3(new Ww(n.e.a)),125))<n.e.a.c.length;){for(r=(t=kjn(n)).e.e-t.d.e-t.a,t.e.j&&(r=-r),i=new Ww(n.e.a);i.a<i.c.c.length;)(e=uG(N3(i),125)).j&&(e.e+=r);AM(n.c)}AM(n.c),oNn(n,uG(N3(new Ww(n.e.a)),125)),MVn(n)}}function vFn(n,t){var e,i;if(Whn(),e=C9(aan(),t.Pg())){if(i=e.j,F$(n,207))return I0(uG(n,27))?$x(i,(Rkn(),sNt))||$x(i,hNt):$x(i,(Rkn(),sNt));if(F$(n,326))return $x(i,(Rkn(),oNt));if(F$(n,193))return $x(i,(Rkn(),fNt));if(F$(n,366))return $x(i,(Rkn(),uNt))}return!0}function kFn(n,t,e){var i,r,c,a,o,u;if(c=(r=e).Lk(),EFn(n.e,c)){if(c.Si())for(i=uG(n.g,124),a=0;a<n.i;++a)if(udn(o=i[a],r)&&a!=t)throw hv(new vM(Xet))}else for(u=VKn(n.e.Dh(),c),i=uG(n.g,124),a=0;a<n.i;++a)if(o=i[a],u.am(o.Lk())&&a!=t)throw hv(new vM(dct));return uG(Uyn(n,t,e),76)}function yFn(n,t){if(t instanceof Object)try{if(t.__java$exception=n,-1!=navigator.userAgent.toLowerCase().indexOf("msie")&&$doc.documentMode<9)return;var e=n;Object.defineProperties(t,{cause:{get:function(){var n=e.he();return n&&n.fe()}},suppressed:{get:function(){return e.ge()}}})}catch(i){}}function MFn(n,t){var e,i,r,c,a;if(i=t>>5,t&=31,i>=n.d)return n.e<0?(cHn(),Dot):(cHn(),_ot);if(c=n.d-i,ROn(r=Inn(YHt,W1n,28,c+1,15,1),c,n.a,i,t),n.e<0){for(e=0;e<i&&0==n.a[e];e++);if(e<i||t>0&&n.a[e]<<32-t!=0){for(e=0;e<c&&-1==r[e];e++)r[e]=0;e==c&&++c,++r[e]}}return K4(a=new VV(n.e,c,r)),a}function TFn(n){var t,e,i,r;return e=new xd(r=h0(n)),i=new Rd(r),Ohn(t=new Zm,(!n.d&&(n.d=new f_(aFt,n,8,5)),n.d)),Ohn(t,(!n.e&&(n.e=new f_(aFt,n,7,4)),n.e)),uG(l8(YJ(JJ(new fX(null,new h3(t,16)),e),i),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21)}function jFn(n,t){var e;switch(e=uG(oIn(n,(jYn(),zyt)),283),t.Ug("Label side selection ("+e+")",1),e.g){case 0:mDn(n,(Ajn(),$xt));break;case 1:mDn(n,(Ajn(),Dxt));break;case 2:Eqn(n,(Ajn(),$xt));break;case 3:Eqn(n,(Ajn(),Dxt));break;case 4:YFn(n,(Ajn(),$xt));break;case 5:YFn(n,(Ajn(),Dxt))}t.Vg()}function EFn(n,t){var e,i,r;return PP(),!!t.Jk()||-2==t.Ik()&&(t==(m$n(),NBt)||t==OBt||t==ABt||t==LBt||!(emn(r=n.Dh(),t)>=0)&&(!(e=iVn((gAn(),kBt),r,t))||((i=e.Ik())>1||-1==i)&&3!=sJ(Nen(kBt,e))))}function SFn(n,t,e,i){var r,c,a,o,u;return o=lCn(uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84)),u=lCn(uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84)),R0(o)==R0(u)||Ern(u,o)?null:(a=s0(t))==e?i:(c=uG(cQ(n.a,a),10))&&(r=c.e)?r:null}function PFn(n,t,e){var i,r,c,a;for(e.Ug("Longest path to source layering",1),n.a=t,a=n.a.a,n.b=Inn(YHt,W1n,28,a.c.length,15,1),i=0,c=new Ww(a);c.a<c.c.c.length;)uG(N3(c),10).p=i,n.b[i]=-1,++i;for(r=new Ww(a);r.a<r.c.c.length;)Oxn(n,uG(N3(r),10));a.c.length=0,n.a=null,n.b=null,e.Vg()}function CFn(n,t,e){var i,r,c,a,o;if((c=n[LT(e,n.length)])[r=AT(e,c.length)].k==(zIn(),lbt))for(o=t.j,i=0;i<o.c.length;i++)u3(i,o.c.length),a=uG(o.c[i],12),(e?a.j==(KQn(),kRt):a.j==(KQn(),_Rt))&&oM(gK(oIn(a,(GYn(),qpt))))&&(Y8(o,i,uG(oIn(c[r],(GYn(),rmt)),12)),r+=e?1:-1)}function IFn(n,t){var e,i,r,c,a,o,u;t.Ug("Greedy Width Approximator",1),e=uM(pK(zDn(n,(S_n(),VOt)))),o=uG(zDn(n,hAt),107),r=uG(zDn(n,pAt),394),c=oM(gK(zDn(n,gAt))),a=uM(pK(zDn(n,bAt))),!n.a&&(n.a=new fV(bFt,n,10,11)),Non(u=n.a),i=lHn(new AU(e,r,c),u,a,o),Myn(n,(lBn(),POt),i.c),t.Vg()}function OFn(n){if(null==n.g)switch(n.p){case 0:n.g=L0(n)?(qx(),eot):(qx(),tot);break;case 1:n.g=Ben(k5(n));break;case 2:n.g=Hsn(A3(n));break;case 3:n.g=iJ(n);break;case 4:n.g=new Rw(eJ(n));break;case 6:n.g=Hvn(aJ(n));break;case 5:n.g=xwn(L1(n));break;case 7:n.g=Rwn(T5(n))}return n.g}function AFn(n){if(null==n.n)switch(n.p){case 0:n.n=N0(n)?(qx(),eot):(qx(),tot);break;case 1:n.n=Ben(y5(n));break;case 2:n.n=Hsn(L3(n));break;case 3:n.n=rJ(n);break;case 4:n.n=new Rw(cJ(n));break;case 6:n.n=Hvn(oJ(n));break;case 5:n.n=xwn(N1(n));break;case 7:n.n=Rwn(M5(n))}return n.n}function LFn(n,t,e,i){var r,c,a,o,u;if(PP(),o=uG(t,69).xk(),EFn(n.e,t)){if(t.Si()&&aqn(n,t,i,F$(t,102)&&0!=(uG(t,19).Bb&P0n)))throw hv(new vM(Xet))}else for(u=VKn(n.e.Dh(),t),r=uG(n.g,124),a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk()))throw hv(new vM(dct));$dn(n,sAn(n,t,e),o?uG(i,76):R5(t,i))}function NFn(n){var t,e,i,r,c,a;for(r=new Ww(n.a.a);r.a<r.c.c.length;)(e=uG(N3(r),316)).g=0,e.i=0,e.e.a.$b();for(i=new Ww(n.a.a);i.a<i.c.c.length;)for(t=(e=uG(N3(i),316)).a.a.ec().Kc();t.Ob();)for(a=uG(t.Pb(),60).c.Kc();a.Ob();)(c=uG(a.Pb(),60)).a!=e&&(FV(e.e,c),++c.a.g,++c.a.i)}function $Fn(n){var t,i,r,c,a;c=uG(oIn(n,(jYn(),DMt)),21),a=uG(oIn(n,KMt),21),t=new eN(i=new MO(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((Qmn(),VRt))&&(r=uG(oIn(n,RMt),8),a.Hc((oUn(),eKt))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=e.Math.max(i.a,r.a),t.b=e.Math.max(i.b,r.b)),aXn(n,i,t)}function DFn(n,t){var e,i,r;t.a?(_V(n.b,t.b),n.a[t.b.i]=uG(jS(n.b,t.b),86),(e=uG(TS(n.b,t.b),86))&&(n.a[e.i]=t.b)):(!!(i=uG(jS(n.b,t.b),86))&&i==n.a[t.b.i]&&!!i.d&&i.d!=t.b.d&&i.f.Fc(t.b),!!(r=uG(TS(n.b,t.b),86))&&n.a[r.i]==t.b&&!!r.d&&r.d!=t.b.d&&t.b.f.Fc(r),sD(n.b,t.b))}function xFn(n,t){var i,r,c,a,o,u;return a=n.d,(u=uM(pK(oIn(n,(jYn(),tMt)))))<0&&kfn(n,tMt,u=0),t.o.b=u,o=e.Math.floor(u/2),NLn(r=new lOn,(KQn(),_Rt)),o2(r,t),r.n.b=o,NLn(c=new lOn,kRt),o2(c,t),c.n.b=o,u2(n,r),zsn(i=new UZ,n),kfn(i,bMt,null),c2(i,c),u2(i,a),CGn(t,n,i),ZAn(n,i),i}function RFn(n){var t,e;return e=uG(oIn(n,(GYn(),Hpt)),21),t=new wJ,e.Hc((r_n(),ept))&&(gsn(t,TSt),gsn(t,ESt)),(e.Hc(rpt)||oM(gK(oIn(n,(jYn(),eMt)))))&&(gsn(t,ESt),e.Hc(cpt)&&gsn(t,SSt)),e.Hc(tpt)&&gsn(t,MSt),e.Hc(opt)&&gsn(t,PSt),e.Hc(ipt)&&gsn(t,jSt),e.Hc(Ygt)&&gsn(t,kSt),e.Hc(npt)&&gsn(t,ySt),t}function KFn(n,t){var e,i,r,c,a,o,u,s,h;return c=(e=n.d)+(i=t.d),a=n.e!=t.e?-1:1,2==c?(h=pz(u=Ngn(E3(n.a[0],L0n),E3(t.a[0],L0n))),0==(s=pz(Dz(u,32)))?new Z5(a,h):new VV(a,2,Uhn(cT(YHt,1),W1n,28,15,[h,s]))):(jwn(n.a,e,t.a,i,r=Inn(YHt,W1n,28,c,15,1)),K4(o=new VV(a,c,r)),o)}function FFn(n,t,e,i){var r,c;return t?0==(r=n.a.Ne(e.d,t.d))?(i.d=wF(t,e.e),i.b=!0,t):(c=r<0?0:1,t.a[c]=FFn(n,t.a[c],e,i),NM(t.a[c])&&(NM(t.a[1-c])?(t.b=!0,t.a[0].b=!1,t.a[1].b=!1):NM(t.a[c].a[c])?t=Ton(t,1-c):NM(t.a[c].a[1-c])&&(t=P4(t,1-c))),t):e}function _Fn(n,t,i){var r,c,a,o;c=n.i,r=n.n,Q9(n,(Yrn(),jst),c.c+r.b,i),Q9(n,Sst,c.c+c.b-r.c-i[2],i),o=c.b-r.b-r.c,i[0]>0&&(i[0]+=n.d,o-=i[0]),i[2]>0&&(i[2]+=n.d,o-=i[2]),a=e.Math.max(0,o),i[1]=e.Math.max(i[1],o),Q9(n,Est,c.c+r.b+i[0]-(i[1]-o)/2,i),t==Est&&(n.c.b=a,n.c.c=c.c+r.b+(a-o)/2)}function BFn(){this.c=Inn(eUt,I0n,28,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,15,1),this.b=Inn(eUt,I0n,28,Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt]).length,15,1),this.a=Inn(eUt,I0n,28,Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt]).length,15,1),KP(this.c,M0n),KP(this.b,T0n),KP(this.a,T0n)}function HFn(n,t,e){var i,r,c,a;if(t<=e?(r=t,c=e):(r=e,c=t),i=0,null==n.b)n.b=Inn(YHt,W1n,28,2,15,1),n.b[0]=r,n.b[1]=c,n.c=!0;else{if(i=n.b.length,n.b[i-1]+1==r)return void(n.b[i-1]=c);a=Inn(YHt,W1n,28,i+2,15,1),qGn(n.b,0,a,0,i),n.b=a,n.b[i-1]>=r&&(n.c=!1,n.a=!1),n.b[i++]=r,n.b[i]=c,n.c||pxn(n)}}function UFn(n,t,e){var i,r,c,a,o,u,s;for(s=t.d,n.a=new R7(s.c.length),n.c=new Ym,o=new Ww(s);o.a<o.c.c.length;)a=uG(N3(o),105),c=new nhn(null),kD(n.a,c),vJ(n.c,a,c);for(n.b=new Ym,cLn(n,t),i=0;i<s.c.length-1;i++)for(u=uG(zq(t.d,i),105),r=i+1;r<s.c.length;r++)KRn(n,u,uG(zq(t.d,r),105),e)}function GFn(n){var t,e,i,r,c;for(r=new Zm,t=new oX((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),i=new Fz(ix(eRn(n).a.Kc(),new h));hDn(i);)F$(zrn((!(e=uG(N9(i),74)).b&&(e.b=new f_(cFt,e,4,7)),e.b),0),193)||(c=lCn(uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84)),t.a._b(c)||mv(r.c,c));return r}function qFn(n,t,e){var i,r,c;if(n.e=e,n.d=0,n.b=0,n.f=1,n.i=t,16==(16&n.e)&&(n.i=jHn(n.i)),n.j=n.i.length,EYn(n),c=Evn(n),n.d!=n.j)throw hv(new CM(rZn((t$(),nit))));if(n.g){for(i=0;i<n.g.a.c.length;i++)if(r=uG(DQ(n.g,i),592),n.f<=r.a)throw hv(new CM(rZn((t$(),tit))));n.g.a.c.length=0}return c}function XFn(n,t){var i,r,c,a,o,u,s;for(i=T0n,zIn(),u=dbt,c=new Ww(t.a);c.a<c.c.c.length;)(a=(r=uG(N3(c),10)).k)!=dbt&&(null==(o=pK(oIn(r,(GYn(),amt))))?(i=e.Math.max(i,0),r.n.b=i+Bx(n.a,a,u)):r.n.b=(tJ(o),o)),s=Bx(n.a,a,u),r.n.b<i+s+r.d.d&&(r.n.b=i+s+r.d.d),i=r.n.b+r.o.b+r.d.a,u=a}function zFn(n,t,e,i,r){var c,a,o;if(n.d&&n.d.Gg(r),kMn(n,e,uG(r.Xb(0),27),!1))return!0;if(kMn(n,i,uG(r.Xb(r.gc()-1),27),!0))return!0;if(kIn(n,r))return!0;for(o=r.Kc();o.Ob();)for(a=uG(o.Pb(),27),c=t.Kc();c.Ob();)if(p_n(n,a,uG(c.Pb(),27)))return!0;return!1}function VFn(n,t,e){var i,r,c,a,o,u,s,h,f;f=t.c.length;n:for(c=uG((s=n.Ih(e))>=0?n.Lh(s,!1,!0):YNn(n,e,!1),61).Kc();c.Ob();){for(r=uG(c.Pb(),58),h=0;h<f;++h)if(u3(h,t.c.length),u=(a=uG(t.c[h],76)).md(),o=a.Lk(),i=r.Nh(o,!1),null==u?null!=i:!udn(u,i))continue n;return r}return null}function WFn(n,t){var e,i,r,c,a,o,u;for(t.Ug("Comment post-processing",1),c=new Ww(n.b);c.a<c.c.c.length;){for(r=uG(N3(c),30),i=new Zm,o=new Ww(r.a);o.a<o.c.c.length;)a=uG(N3(o),10),u=uG(oIn(a,(GYn(),Pmt)),15),e=uG(oIn(a,Ept),15),(u||e)&&(dQn(a,u,e),u&&Ohn(i,u),e&&Ohn(i,e));Ohn(r.a,i)}t.Vg()}function QFn(n,t,e,i){var r,c,a,o;for(r=uG(yOn(t,(KQn(),_Rt)).Kc().Pb(),12),c=uG(yOn(t,kRt).Kc().Pb(),12),o=new Ww(n.j);o.a<o.c.c.length;){for(a=uG(N3(o),12);0!=a.e.c.length;)u2(uG(zq(a.e,0),18),r);for(;0!=a.g.c.length;)c2(uG(zq(a.g,0),18),c)}e||kfn(t,(GYn(),Zpt),null),i||kfn(t,(GYn(),nmt),null)}function JFn(n,t,e){var i,r;if(0==(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)return Qhn(n);if(i=uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166),t&&(Czn((!i.a&&(i.a=new MD(eFt,i,5)),i.a)),Tcn(i,0),Ecn(i,0),mcn(i,0),jcn(i,0)),e)for(!n.a&&(n.a=new fV(oFt,n,6,6)),r=n.a;r.i>1;)e_n(r,r.i-1);return i}function YFn(n,t){var e,i,r,c,a,o;for(e=new ND,r=new Ww(n.b);r.a<r.c.c.length;){for(o=!0,i=0,a=new Ww(uG(N3(r),30).a);a.a<a.c.c.length;)switch((c=uG(N3(a),10)).k.g){case 4:++i;case 1:O6(e,c);break;case 0:YAn(c,t);default:e.b==e.c||jUn(e,i,o,!1,t),o=!1,i=0}e.b==e.c||jUn(e,i,o,!0,t)}}function ZFn(n,t){var e,i,r,c,a,o;for(e=0,o=new Ww(t);o.a<o.c.c.length;){for(a=uG(N3(o),12),fbn(n.b,n.d[a.p]),r=new w7(a.b);l$(r.a)||l$(r.b);)(c=Yj(n,a==(i=uG(l$(r.a)?N3(r.a):N3(r.b),18)).c?i.d:i.c))>n.d[a.p]&&(e+=J8(n.b,c),A6(n.a,xwn(c)));for(;!LM(n.a);)lin(n.b,uG(xV(n.a),17).a)}return e}function n_n(n){var t,e,i,r,c,a,o;for(n.a=new xF,o=0,r=0,i=new Ww(n.i.b);i.a<i.c.c.length;){for((t=uG(N3(i),30)).p=r,a=new Ww(t.a);a.a<a.c.c.length;)uG(N3(a),10).p=o,++o;++r}for(c=n.r==(THn(),Pjt)?Jwt:Qwt,e=new Ww(n.i.b);e.a<e.c.c.length;)f$((t=uG(N3(e),30)).a,c),Zin(n.a,xwn(t.p),t.a)}function t_n(n,t,e){var i,r,c,a;for(c=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i,r=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));r.e!=r.i.gc();)0==(!(i=uG(Zkn(r),27)).a&&(i.a=new fV(bFt,i,10,11)),i.a).i||(c+=t_n(n,i,!1));if(e)for(a=R0(t);a;)c+=(!a.a&&(a.a=new fV(bFt,a,10,11)),a.a).i,a=R0(a);return c}function e_n(n,t){var e,i,r,c;return n.Pj()?(i=null,r=n.Qj(),n.Tj()&&(i=n.Vj(n.$i(t),null)),e=n.Ij(4,c=gjn(n,t),null,t,r),n.Mj()&&null!=c?(i=n.Oj(c,i))?(i.nj(e),i.oj()):n.Jj(e):i?(i.nj(e),i.oj()):n.Jj(e),c):(c=gjn(n,t),n.Mj()&&null!=c&&(i=n.Oj(c,null))&&i.oj(),c)}function i_n(n){var t,i,r,c,a,o,u,s,h,f;for(h=n.a,t=new ek,s=0,r=new Ww(n.d);r.a<r.c.c.length;){for(f=0,Lon((i=uG(N3(r),226)).b,new Nn),o=Fkn(i.b,0);o.b!=o.d.c;)a=uG(I6(o),226),t.a._b(a)&&(c=i.c,f<(u=a.c).d+u.a+h&&f+c.a+h>u.d&&(f=u.d+u.a+h));i.c.d=f,t.a.zc(i,t),s=e.Math.max(s,i.c.d+i.c.a)}return s}function r_n(){r_n=E,Zgt=new aI("COMMENTS",0),tpt=new aI("EXTERNAL_PORTS",1),ept=new aI("HYPEREDGES",2),ipt=new aI("HYPERNODES",3),rpt=new aI("NON_FREE_PORTS",4),cpt=new aI("NORTH_SOUTH_PORTS",5),opt=new aI(F6n,6),Ygt=new aI("CENTER_LABELS",7),npt=new aI("END_LABELS",8),apt=new aI("PARTITIONS",9)}function c_n(n,t,e,i,r){return i<0?((i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n]),t))<0&&(i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function a_n(n,t,e,i,r){return i<0?((i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n]),t))<0&&(i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function o_n(n,t,e,i,r,c){var a,o,u;if(o=32,i<0){if(t[0]>=n.length)return!1;if(43!=(o=VJ(n,t[0]))&&45!=o)return!1;if(++t[0],(i=RNn(n,t))<0)return!1;45==o&&(i=-i)}return 32==o&&t[0]-e==2&&2==r.b&&(a=(u=(new QE).q.getFullYear()-V1n+V1n-80)%100,c.a=i==a,i+=100*(u/100|0)+(i<a?100:0)),c.p=i,!0}function u_n(n,t){var i,r,c;R0(n)&&(c=uG(oIn(t,(jYn(),DMt)),181),xA(zDn(n,JMt))===xA(($Pn(),sRt))&&Myn(n,JMt,uRt),vP(),r=uQn(new Vy(R0(n)),new Wx(R0(n)?new Vy(R0(n)):null,n),!1,!0),Mon(c,(Qmn(),VRt)),(i=uG(oIn(t,RMt),8)).a=e.Math.max(r.a,i.a),i.b=e.Math.max(r.b,i.b))}function s_n(n,t,e){var i,r,c,a,o,u;for(a=uG(oIn(n,(GYn(),Upt)),15).Kc();a.Ob();){switch(c=uG(a.Pb(),10),uG(oIn(c,(jYn(),gMt)),171).g){case 2:a2(c,t);break;case 4:a2(c,e)}for(r=new Fz(ix(Ggn(c).a.Kc(),new h));hDn(r);)(i=uG(N9(r),18)).c&&i.d||(o=!i.d,u=uG(oIn(i,umt),12),o?u2(i,u):c2(i,u))}}function h_n(){h_n=E,Odt=new yY(o3n,0,(KQn(),yRt),yRt),Ndt=new yY(s3n,1,KRt,KRt),Idt=new yY(u3n,2,kRt,kRt),xdt=new yY(h3n,3,_Rt,_Rt),Ldt=new yY("NORTH_WEST_CORNER",4,_Rt,yRt),Adt=new yY("NORTH_EAST_CORNER",5,yRt,kRt),Ddt=new yY("SOUTH_WEST_CORNER",6,KRt,_Rt),$dt=new yY("SOUTH_EAST_CORNER",7,kRt,KRt)}function f_n(n){var t,e,i,r,c;for(r=new ek,t=new oX((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),i=new Fz(ix(eRn(n).a.Kc(),new h));hDn(i);)F$(zrn((!(e=uG(N9(i),74)).b&&(e.b=new f_(cFt,e,4,7)),e.b),0),193)||(c=lCn(uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84)),t.a._b(c)||r.a.zc(c,r));return r}function l_n(){l_n=E,ENt=Uhn(cT(nUt,1),E0n,28,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368e3,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]),e.Math.pow(2,-65)}function b_n(){var n,t;for(b_n=E,Got=Inn(Xot,zZn,92,32,0,1),qot=Inn(Xot,zZn,92,32,0,1),n=1,t=0;t<=18;t++)Got[t]=(cHn(),dwn(n,0)>=0?Rmn(n):hW(Rmn(Men(n)))),qot[t]=BA(Nz(n,t),0)?Rmn(Nz(n,t)):hW(Rmn(Men(Nz(n,t)))),n=Ngn(n,5);for(;t<qot.length;t++)Got[t]=j5(Got[t-1],Got[1]),qot[t]=j5(qot[t-1],(cHn(),Kot))}function w_n(n,t){var e,i,r,c,a;if(0==n.c.length)return new WO(xwn(0),xwn(0));for(e=(u3(0,n.c.length),uG(n.c[0],12)).j,a=0,c=t.g,i=t.g+1;a<n.c.length-1&&e.g<c;)e=(u3(++a,n.c.length),uG(n.c[a],12)).j;for(r=a;r<n.c.length-1&&e.g<i;)++r,e=(u3(a,n.c.length),uG(n.c[a],12)).j;return new WO(xwn(a),xwn(r))}function d_n(n,t,e,i){var r,c,a,o,u;o=Dgn(t,e),(e==(KQn(),KRt)||e==_Rt)&&(o=Spn(o)),a=!1;do{for(r=!1,c=0;c<o.gc()-1;c++)SIn(n,uG(o.Xb(c),12),uG(o.Xb(c+1),12),i)&&(a=!0,Z3(n.a,uG(o.Xb(c),12),uG(o.Xb(c+1),12)),u=uG(o.Xb(c+1),12),o.hd(c+1,uG(o.Xb(c),12)),o.hd(c,u),r=!0)}while(r);return a}function g_n(n,t,e){var i,r,c;for(e.Ug(X9n,1),o$n(n,uG(l8(JJ(new fX(null,new h3(t.b,16)),new qa),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),0),c=Fkn(t.b,0);c.b!=c.d.c;)r=uG(I6(c),39),i=null!=cQ(n.a,xwn(r.g))?uG(cQ(n.a,xwn(r.g)),17).a:0,kfn(r,(QGn(),ACt),xwn(i));e.Vg()}function p_n(n,t,e){var i,r,c,a,o,u,s,h;return o=t.i-n.g/2,u=e.i-n.g/2,s=t.j-n.g/2,h=e.j-n.g/2,c=t.g+n.g,a=e.g+n.g,i=t.f+n.g,r=e.f+n.g,o<u+a&&u<o&&s<h+r&&h<s||u<o+c&&o<u&&h<s+i&&s<h||o<u+a&&u<o&&s<h&&h<s+i||u<o+c&&o<u&&s<h+r&&h<s}function m_n(n,t,i){var r,c,a,o,u,s,h,f,l,b;for(a=t.c.length,u3(i,t.c.length),u=(o=uG(t.c[i],292)).a.o.a,l=o.c,b=0,h=o.c;h<=o.f;h++){if(u<=n.a[h])return h;for(f=n.a[h],s=null,c=i+1;c<a;c++)u3(c,t.c.length),(r=uG(t.c[c],292)).c<=h&&r.f>=h&&(s=r);s&&(f=e.Math.max(f,s.a.o.a)),f>b&&(l=h,b=f)}return l}function v_n(n){var t,e,i,r,c,a,o;for(c=new Hj(uG(WW(new Dn),50)),o=T0n,e=new Ww(n.d);e.a<e.c.c.length;){for(o=(t=uG(N3(e),226)).c.c;0!=c.a.gc()&&(a=uG(c.a.Tc(),226)).c.c+a.c.b<o;)c.a.Bc(a);for(r=c.a.ec().Kc();r.Ob();)aq((i=uG(r.Pb(),226)).b,t),aq(t.b,i);c.a.zc(t,(qx(),tot))}}function k_n(n,t,e){var i,r,c,a,o;if(!P6(t)){for((o=e.eh((F$(t,16)?uG(t,16).gc():x5(t.Kc()))/n.a|0)).Ug(V9n,1),a=new za,c=null,r=t.Kc();r.Ob();)i=uG(r.Pb(),39),a=zcn(Uhn(cT(vat,1),EZn,20,0,[a,new Mp(i)])),c&&(kfn(c,(OQn(),BPt),i),kfn(i,APt,c),M7(i)==M7(c)&&(kfn(c,HPt,i),kfn(i,LPt,c))),c=i;o.Vg(),k_n(n,a,e)}}function y_n(n,t){var e,i,r;if(null==t){for(!n.a&&(n.a=new fV(d_t,n,9,5)),i=new DD(n.a);i.e!=i.i.gc();)if(null==(null==(r=(e=uG(Zkn(i),694)).c)?e.zb:r))return e}else for(!n.a&&(n.a=new fV(d_t,n,9,5)),i=new DD(n.a);i.e!=i.i.gc();)if(m_(t,null==(r=(e=uG(Zkn(i),694)).c)?e.zb:r))return e;return null}function M_n(n,t){var e;switch(e=null,t.g){case 1:n.e.pf((XYn(),rDt))&&(e=uG(n.e.of(rDt),256));break;case 3:n.e.pf((XYn(),cDt))&&(e=uG(n.e.of(cDt),256));break;case 2:n.e.pf((XYn(),iDt))&&(e=uG(n.e.of(iDt),256));break;case 4:n.e.pf((XYn(),aDt))&&(e=uG(n.e.of(aDt),256))}return!e&&(e=uG(n.e.of((XYn(),tDt)),256)),e}function T_n(n,t,i){var r,c,a,o,u,s;for(c=i,a=0,u=new Ww(t);u.a<u.c.c.length;)Myn(o=uG(N3(u),27),(jOn(),FIt),xwn(c++)),s=GFn(o),r=e.Math.atan2(o.j+o.f/2,o.i+o.g/2),(r+=r<0?f7n:0)<.7853981633974483||r>F7n?f$(s,n.b):r<=F7n&&r>_7n?f$(s,n.d):r<=_7n&&r>B7n?f$(s,n.c):r<=B7n&&f$(s,n.a),a=T_n(n,s,a);return c}function j_n(n,t,e,i){var r,c,a,o,u;for(r=(i.c+i.a)/2,BY(t.j),aq(t.j,r),BY(e.e),aq(e.e,r),u=new hj,a=new Ww(n.f);a.a<a.c.c.length;)kSn(u,t,o=uG(N3(a),132).a),kSn(u,e,o);for(c=new Ww(n.k);c.a<c.c.c.length;)kSn(u,t,o=uG(N3(c),132).b),kSn(u,e,o);return u.b+=2,u.a+=tZ(t,n.q),u.a+=tZ(n.q,e),u}function E_n(n,t,e){var i;e.Ug("Processor arrange node",1),oM(gK(oIn(t,(QGn(),rCt)))),i=uG(yx(lln(JJ(new fX(null,new h3(t.b,16)),new bo))),39),n.a=uG(oIn(t,LCt),353),n.a==(mbn(),DCt)||n.a==$Ct?fQn(n,new IM(Uhn(cT(lPt,1),z9n,39,0,[i])),e.eh(1)):n.a==NCt&&mYn(n,new IM(Uhn(cT(lPt,1),z9n,39,0,[i])),e.eh(1)),e.Vg()}function S_n(){S_n=E,VOt=new _N((XYn(),c$t),1.3),iAt=new _N(H$t,(qx(),!1)),fAt=new CN(15),hAt=new _N(W$t,fAt),bAt=new _N(DDt,15),WOt=l$t,eAt=_$t,rAt=U$t,cAt=q$t,tAt=K$t,aAt=V$t,lAt=bDt,IHn(),pAt=UOt,gAt=HOt,vAt=zOt,mAt=qOt,sAt=KOt,uAt=ROt,oAt=xOt,dAt=BOt,YOt=O$t,ZOt=A$t,JOt=$Ot,QOt=NOt,nAt=DOt,wAt=_Ot}function P_n(n){var t,e,i,r,c,a,o;for(e=n.i,t=n.n,o=e.d,n.f==(Yen(),Kst)?o+=(e.a-n.e.b)/2:n.f==Rst&&(o+=e.a-n.e.b),r=new Ww(n.d);r.a<r.c.c.length;){switch(a=(i=uG(N3(r),187)).Mf(),(c=new sj).b=o,o+=a.b+n.a,n.b.g){case 0:c.a=e.c+t.b;break;case 1:c.a=e.c+t.b+(e.b-a.a)/2;break;case 2:c.a=e.c+e.b-t.c-a.a}i.Of(c)}}function C_n(n){var t,e,i,r,c,a,o;for(e=n.i,t=n.n,o=e.c,n.b==(Ktn(),Ost)?o+=(e.b-n.e.a)/2:n.b==Lst&&(o+=e.b-n.e.a),r=new Ww(n.d);r.a<r.c.c.length;){switch(a=(i=uG(N3(r),187)).Mf(),(c=new sj).a=o,o+=a.a+n.a,n.f.g){case 0:c.b=e.d+t.d;break;case 1:c.b=e.d+t.d+(e.a-a.b)/2;break;case 2:c.b=e.d+e.a-t.a-a.b}i.Of(c)}}function I_n(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=uG(cQ(e.c,t),467)).f,b=c.a,o=new MO(s,l),h=new MO(a,b),r=s,e.p||(r+=n.c),u=new MO(r+=e.F+e.v*n.b,l),f=new MO(r,b),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[o,u])),e.d.a.gc()>1&&(i=new MO(r,e.b),aq(t.a,i)),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[f,h]))}function O_n(n,t,e){var i,r;for(t<n.d.b.c.length?(n.b=uG(zq(n.d.b,t),30),n.a=uG(zq(n.d.b,t-1),30),n.c=t):(n.a=new bQ(n.d),n.a.p=t-1,kD(n.d.b,n.a),n.b=new bQ(n.d),n.b.p=t,kD(n.d.b,n.b),n.c=t),a2(e,n.b),r=new Fz(ix(qgn(e).a.Kc(),new h));hDn(r);)!(i=uG(N9(r),18)).c.i.c&&i.c.i.k==(zIn(),bbt)&&a2(i.c.i,n.a)}function A_n(n){hP(n,new hCn(FT(DT(KT(RT(new bu,jtt),"ELK Randomizer"),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new Fu))),U4(n,jtt,K3n,qRt),U4(n,jtt,o4n,15),U4(n,jtt,s4n,xwn(0)),U4(n,jtt,R3n,r4n)}function L_n(){var n,t,e,i,r,c;for(L_n=E,pHt=Inn(tUt,ret,28,255,15,1),mHt=Inn(JHt,N1n,28,16,15,1),t=0;t<255;t++)pHt[t]=-1;for(e=57;e>=48;e--)pHt[e]=e-48<<24>>24;for(i=70;i>=65;i--)pHt[i]=i-65+10<<24>>24;for(r=102;r>=97;r--)pHt[r]=r-97+10<<24>>24;for(c=0;c<10;c++)mHt[c]=48+c&D1n;for(n=10;n<=15;n++)mHt[n]=65+n-10&D1n}function N_n(n,t){t.Ug("Process graph bounds",1),kfn(n,(OQn(),PPt),$I(Tun(ZJ(new fX(null,new h3(n.b,16)),new Ka)))),kfn(n,IPt,$I(Tun(ZJ(new fX(null,new h3(n.b,16)),new Fa)))),kfn(n,SPt,$I(Mun(ZJ(new fX(null,new h3(n.b,16)),new _a)))),kfn(n,CPt,$I(Mun(ZJ(new fX(null,new h3(n.b,16)),new Ba)))),t.Vg()}function $_n(n){var t,i,r,c,a;c=uG(oIn(n,(jYn(),DMt)),21),a=uG(oIn(n,KMt),21),t=new eN(i=new MO(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((Qmn(),VRt))&&(r=uG(oIn(n,RMt),8),a.Hc((oUn(),eKt))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=e.Math.max(i.a,r.a),t.b=e.Math.max(i.b,r.b)),oM(gK(oIn(n,xMt)))||cXn(n,i,t)}function D_n(n,t){var e,i,r,c;for(c=Dgn(t,(KQn(),KRt)).Kc();c.Ob();)i=uG(c.Pb(),12),(e=uG(oIn(i,(GYn(),lmt)),10))&&RKn(xS(DS(RS($S(new uk,0),.1),n.i[t.p].d),n.i[e.p].a));for(r=Dgn(t,yRt).Kc();r.Ob();)i=uG(r.Pb(),12),(e=uG(oIn(i,(GYn(),lmt)),10))&&RKn(xS(DS(RS($S(new uk,0),.1),n.i[e.p].d),n.i[t.p].a))}function x_n(n){var t,e,i,r,c;if(!n.c){if(c=new ks,null==(t=V_t).a.zc(n,t)){for(i=new DD(z5(n));i.e!=i.i.gc();)F$(r=MGn(e=uG(Zkn(i),89)),90)&&CW(c,x_n(uG(r,29))),ttn(c,e);t.a.Bc(n),t.a.gc()}imn(c),lbn(c),n.c=new vL((uG(zrn(gZ((tQ(),M_t).o),15),19),c.i),c.g),y9(n).b&=-33}return n.c}function R_n(n){var t;if(10!=n.c)throw hv(new CM(rZn((t$(),eit))));switch(t=n.a){case 110:t=10;break;case 114:t=13;break;case 116:t=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw hv(new CM(rZn((t$(),Lit))))}return t}function K_n(n){var t,e,i,r;if(0==n.l&&0==n.m&&0==n.h)return"0";if(n.h==b0n&&0==n.m&&0==n.l)return"-9223372036854775808";if(n.h>>19!=0)return"-"+K_n(gfn(n));for(e=n,i="";0!=e.l||0!=e.m||0!=e.h;){if(e=Yzn(e,_9(g0n),!0),t=""+Tj(Qat),0!=e.l||0!=e.m||0!=e.h)for(r=9-t.length;r>0;r--)t="0"+t;i=t+i}return i}function F_n(n){var t,e,i,r,c,a,o;for(t=!1,e=0,r=new Ww(n.d.b);r.a<r.c.c.length;)for((i=uG(N3(r),30)).p=e++,a=new Ww(i.a);a.a<a.c.c.length;)c=uG(N3(a),10),!t&&!P6(Ggn(c))&&(t=!0);o=WX((xdn(),ZDt),Uhn(cT(axt,1),p1n,88,0,[JDt,YDt])),t||(Mon(o,nxt),Mon(o,QDt)),n.a=new Qin(o),$V(n.f),$V(n.b),$V(n.e),$V(n.g)}function __n(){if(!Object.create||!Object.getOwnPropertyNames)return!1;var n="__proto__",t=Object.create(null);return void 0===t[n]&&0==Object.getOwnPropertyNames(t).length&&(t[n]=42,42===t[n]&&0!=Object.getOwnPropertyNames(t).length)}function B_n(n,t,e){var i,r,c,a,o,u,s,h,f;for(i=e.c,r=e.d,o=n3(t.c),u=n3(t.d),i==t.c?(o=nRn(n,o,r),u=VCn(t.d)):(o=VCn(t.c),u=nRn(n,u,r)),s8(s=new tj(t.a),o,s.a,s.a.a),s8(s,u,s.c.b,s.c),a=t.c==i,f=new wk,c=0;c<s.b-1;++c)h=new WO(uG(hyn(s,c),8),uG(hyn(s,c+1),8)),a&&0==c||!a&&c==s.b-2?f.b=h:kD(f.a,h);return f}function H_n(n,t){var e,i,r,c;if(0!=(c=n.j.g-t.j.g))return c;if(e=uG(oIn(n,(jYn(),YMt)),17),i=uG(oIn(t,YMt),17),e&&i&&0!=(r=e.a-i.a))return r;switch(n.j.g){case 1:return ugn(n.n.a,t.n.a);case 2:return ugn(n.n.b,t.n.b);case 3:return ugn(t.n.a,n.n.a);case 4:return ugn(t.n.b,n.n.b);default:throw hv(new kM(n6n))}}function U_n(n,t,i,r){var c,a,o,u;if(x5((HB(),new Fz(ix(Ggn(t).a.Kc(),new h))))>=n.a)return-1;if(!_Pn(t,i))return-1;if(P6(uG(r.Kb(t),20)))return 1;for(c=0,o=uG(r.Kb(t),20).Kc();o.Ob();){if(-1==(u=U_n(n,(a=uG(o.Pb(),18)).c.i==t?a.d.i:a.c.i,i,r)))return-1;if((c=e.Math.max(c,u))>n.c-1)return-1}return c+1}function G_n(n,t){var e,i,r,c,a,o;if(xA(t)===xA(n))return!0;if(!F$(t,15))return!1;if(i=uG(t,15),o=n.gc(),i.gc()!=o)return!1;if(a=i.Kc(),n.Yi()){for(e=0;e<o;++e)if(r=n.Vi(e),c=a.Pb(),null==r?null!=c:!udn(r,c))return!1}else for(e=0;e<o;++e)if(r=n.Vi(e),c=a.Pb(),xA(r)!==xA(c))return!1;return!0}function q_n(n,t){var e,i,r,c,a,o;if(n.f>0)if(n._j(),null!=t){for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=uG(e.g,379),o=e.i,a=0;a<o;++a)if(udn(t,(r=i[a]).md()))return!0}else for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=uG(e.g,379),o=e.i,a=0;a<o;++a)if(r=i[a],xA(t)===xA(r.md()))return!0;return!1}function X_n(n,t){var e,i,r;return(e=t.qi(n.a))&&null!=(r=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),"affiliation")))?-1==(i=ax(r,$Cn(35)))?Adn(n,jz(n,Hrn(t.qk())),r):0==i?Adn(n,null,(s3(1,r.length+1),r.substr(1))):Adn(n,(Knn(0,i,r.length),r.substr(0,i)),(s3(i+1,r.length+1),r.substr(i+1))):null}function z_n(n,t,e){var i,r,c,a;e.Ug("Orthogonally routing hierarchical port edges",1),n.a=0,XVn(t,i=ozn(t)),dVn(n,t,i),EQn(t),r=uG(oIn(t,(jYn(),JMt)),101),JWn((u3(0,(c=t.b).c.length),uG(c.c[0],30)),r,t),JWn(uG(zq(c,c.c.length-1),30),r,t),Bqn((u3(0,(a=t.b).c.length),uG(a.c[0],30))),Bqn(uG(zq(a,a.c.length-1),30)),e.Vg()}function V_n(n){switch(n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n-48<<24>>24;case 97:case 98:case 99:case 100:case 101:case 102:return n-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return n-65+10<<24>>24;default:throw hv(new ZM("Invalid hexadecimal"))}}function W_n(){W_n=E,pst=new rC("SPIRAL",0),lst=new rC("LINE_BY_LINE",1),bst=new rC("MANHATTAN",2),fst=new rC("JITTER",3),dst=new rC("QUADRANTS_LINE_BY_LINE",4),gst=new rC("QUADRANTS_MANHATTAN",5),wst=new rC("QUADRANTS_JITTER",6),hst=new rC("COMBINE_LINE_BY_LINE_MANHATTAN",7),sst=new rC("COMBINE_JITTER_MANHATTAN",8)}function Q_n(n,t,e,i){var r,c,a,o,u,s;for(u=pSn(n,e),s=pSn(t,e),r=!1;u&&s&&(i||ejn(u,s,e));)a=pSn(u,e),o=pSn(s,e),Ien(t),Ien(n),c=u.c,pVn(u,!1),pVn(s,!1),e?($jn(t,s.p,c),t.p=s.p,$jn(n,u.p+1,c),n.p=u.p):($jn(n,u.p,c),n.p=u.p,$jn(t,s.p+1,c),t.p=s.p),a2(u,null),a2(s,null),u=a,s=o,r=!0;return r}function J_n(n){switch(n.g){case 0:return new ul;case 1:return new al;case 3:return new iP;case 4:return new Sc;case 5:return new RF;case 6:return new ol;case 2:return new cl;case 7:return new Zf;case 8:return new tl;default:throw hv(new vM("No implementation is available for the layerer "+(null!=n.f?n.f:""+n.g)))}}function Y_n(n,t,e,i){var r,c,a,o,u;for(r=!1,c=!1,o=new Ww(i.j);o.a<o.c.c.length;)xA(oIn(a=uG(N3(o),12),(GYn(),rmt)))===xA(e)&&(0==a.g.c.length?0==a.e.c.length||(r=!0):c=!0);return u=0,r&&r^c?u=e.j==(KQn(),yRt)?-n.e[i.c.p][i.p]:t-n.e[i.c.p][i.p]:c&&r^c?u=n.e[i.c.p][i.p]+1:r&&c&&(u=e.j==(KQn(),yRt)?0:t/2),u}function Z_n(n,t,e,i,r,c,a,o){var u,s,h;for(u=0,null!=t&&(u^=pln(t.toLowerCase())),null!=e&&(u^=pln(e)),null!=i&&(u^=pln(i)),null!=a&&(u^=pln(a)),null!=o&&(u^=pln(o)),s=0,h=c.length;s<h;s++)u^=pln(c[s]);n?u|=256:u&=-257,r?u|=16:u&=-17,this.f=u,this.i=null==t?null:(tJ(t),t),this.a=e,this.d=i,this.j=c,this.g=a,this.e=o}function nBn(n,t,e){var i,r;switch(r=null,t.g){case 1:Lun(),r=ybt;break;case 2:Lun(),r=Tbt}switch(i=null,e.g){case 1:Lun(),i=Mbt;break;case 2:Lun(),i=kbt;break;case 3:Lun(),i=jbt;break;case 4:Lun(),i=Ebt}return r&&i?YU(n.j,new Hl(new IM(Uhn(cT(pat,1),EZn,178,0,[uG(WW(r),178),uG(WW(i),178)])))):(hZ(),hZ(),zot)}function tBn(n){var t,e,i;switch(t=uG(oIn(n,(jYn(),RMt)),8),kfn(n,RMt,new MO(t.b,t.a)),uG(oIn(n,byt),255).g){case 1:kfn(n,byt,(nMn(),NNt));break;case 2:kfn(n,byt,(nMn(),INt));break;case 3:kfn(n,byt,(nMn(),ANt));break;case 4:kfn(n,byt,(nMn(),LNt))}(n.q?n.q:(hZ(),hZ(),Vot))._b(rTt)&&(i=(e=uG(oIn(n,rTt),8)).a,e.a=e.b,e.b=i)}function eBn(n,t,e,i,r,c){if(this.b=e,this.d=r,n>=t.length)throw hv(new dM("Greedy SwitchDecider: Free layer not in graph."));this.c=t[n],this.e=new R_(i),Aon(this.e,this.c,(KQn(),_Rt)),this.i=new R_(i),Aon(this.i,this.c,kRt),this.f=new sX(this.c),this.a=!c&&r.i&&!r.s&&this.c[0].k==(zIn(),lbt),this.a&&rAn(this,n,t.length)}function iBn(n,t){var e,i,r,c,a,o;c=!n.B.Hc((oUn(),nKt)),a=n.B.Hc(iKt),n.a=new umn(a,c,n.c),n.n&&WY(n.a.n,n.n),nM(n.g,(Yrn(),Est),n.a),t||((i=new tkn(1,c,n.c)).n.a=n.k,UV(n.p,(KQn(),yRt),i),(r=new tkn(1,c,n.c)).n.d=n.k,UV(n.p,KRt,r),(o=new tkn(0,c,n.c)).n.c=n.k,UV(n.p,_Rt,o),(e=new tkn(0,c,n.c)).n.b=n.k,UV(n.p,kRt,e))}function rBn(n){var t,e,i;switch((t=uG(oIn(n.d,(jYn(),Vyt)),223)).g){case 2:e=UJn(n);break;case 3:i=new Zm,kS(JJ(YJ(sin(sin(new fX(null,new h3(n.d.b,16)),new Or),new Ar),new Lr),new pr),new Ng(i)),e=i;break;default:throw hv(new kM("Compaction not supported for "+t+" edges."))}xzn(n,e),z8(new Lw(n.g),new Ag(n))}function cBn(n,t){var e,i,r,c,a,o,u;if(t.Ug("Process directions",1),(e=uG(oIn(n,(QGn(),cCt)),88))!=(xdn(),QDt))for(r=Fkn(n.b,0);r.b!=r.d.c;){switch(i=uG(I6(r),39),o=uG(oIn(i,(OQn(),GPt)),17).a,u=uG(oIn(i,qPt),17).a,e.g){case 4:u*=-1;break;case 1:c=o,o=u,u=c;break;case 2:a=o,o=-u,u=a}kfn(i,GPt,xwn(o)),kfn(i,qPt,xwn(u))}t.Vg()}function aBn(n,t){var e;return e=new Yn,t&&zsn(e,uG(cQ(n.a,iFt),96)),F$(t,422)&&zsn(e,uG(cQ(n.a,rFt),96)),F$(t,366)?(zsn(e,uG(cQ(n.a,lFt),96)),e):(F$(t,84)&&zsn(e,uG(cQ(n.a,cFt),96)),F$(t,207)?(zsn(e,uG(cQ(n.a,bFt),96)),e):F$(t,193)?(zsn(e,uG(cQ(n.a,wFt),96)),e):(F$(t,326)&&zsn(e,uG(cQ(n.a,aFt),96)),e))}function oBn(n){var t,e,i,r,c,a,o;for(o=new c9,a=new Ww(n.a);a.a<a.c.c.length;)if((c=uG(N3(a),10)).k!=(zIn(),lbt))for(LDn(o,c,new sj),r=new Fz(ix(Xgn(c).a.Kc(),new h));hDn(r);)if((i=uG(N9(r),18)).c.i.k!=lbt&&i.d.i.k!=lbt)for(e=Fkn(i.a,0);e.b!=e.d.c;)CEn(o,new FC((t=uG(I6(e),8)).a,t.b));return o}function uBn(){uBn=E,RLt=new Cm(gnt),eP(),DLt=new mL(ynt,xLt=GLt),Vhn(),NLt=new mL(pnt,$Lt=VLt),pOn(),ALt=new mL(mnt,LLt=rLt),PLt=new mL(vnt,null),B7(),ILt=new mL(knt,OLt=ZAt),nP(),MLt=new mL(Mnt,TLt=zAt),jLt=new mL(Tnt,(qx(),!1)),ELt=new mL(jnt,xwn(64)),SLt=new mL(Ent,!0),CLt=nLt}function sBn(n,t){var e,i,r,c,a,o,u;for(n.p=1,i=n.c,u=new XL,o=jmn(n,(can(),Wjt)).Kc();o.Ob();)for(e=new Ww(uG(o.Pb(),12).g);e.a<e.c.c.length;)n!=(a=uG(N3(e),18).d.i)&&a.c.p<=i.p&&((r=i.p+1)==t.b.c.length?((c=new bQ(t)).p=r,kD(t.b,c),a2(a,c)):a2(a,c=uG(zq(t.b,r),30)),u.a.zc(a,u));return u}function hBn(n,t){var e,i;if(!(e=uG(oIn(n,(OQn(),yPt)),15))||e.gc()<1)return null;if(1==e.gc())return uG(e.Xb(0),39);switch(i=null,t.g){case 2:i=uG(yx(Qz(e.Oc(),new Da)),39);break;case 1:i=uG(yx(Wz(e.Oc(),new Aa)),39);break;case 4:i=uG(yx(Qz(e.Oc(),new La)),39);break;case 3:i=uG(yx(Wz(e.Oc(),new Na)),39)}return i}function fBn(n){var t,e,i,r,c;if(null==n.a)if(n.a=Inn(ZHt,B2n,28,n.c.b.c.length,16,1),n.a[0]=!1,vR(n.c,(jYn(),XTt)))for(e=uG(oIn(n.c,XTt),15).Kc();e.Ob();)(t=uG(e.Pb(),17).a)>0&&t<n.a.length&&(n.a[t]=!1);else for((c=new Ww(n.c.b)).a<c.c.c.length&&N3(c),i=1;c.a<c.c.c.length;)r=uG(N3(c),30),n.a[i++]=_xn(r)}function lBn(){lBn=E,pOt=new Cm("additionalHeight"),mOt=new Cm("drawingHeight"),vOt=new Cm("drawingWidth"),MOt=new Cm("minHeight"),EOt=new Cm("minWidth"),SOt=new Cm("rows"),POt=new Cm("targetWidth"),jOt=new uF("minRowIncrease",0),yOt=new uF("maxRowIncrease",0),TOt=new uF("minRowDecrease",0),kOt=new uF("maxRowDecrease",0)}function bBn(n,t){var e,i;switch(i=n.b,t){case 1:n.b|=1,n.b|=4,n.b|=8;break;case 2:n.b|=2,n.b|=4,n.b|=8;break;case 4:n.b|=1,n.b|=2,n.b|=4,n.b|=8;break;case 3:n.b|=16,n.b|=8;break;case 0:n.b|=32,n.b|=16,n.b|=8,n.b|=1,n.b|=2,n.b|=4}if(n.b!=i&&n.c)for(e=new DD(n.c);e.e!=e.i.gc();)yLn(y9(uG(Zkn(e),481)),t)}function wBn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b;for(r=!1,o=0,u=(a=t).length;o<u;++o)c=a[o],oM((qx(),!!c.e))&&!uG(zq(n.b,c.e.p),219).s&&(r|=(s=c.e,(f=(h=uG(zq(n.b,s.p),219)).e)[l=AT(e,f.length)][0].k==(zIn(),lbt)?f[l]=TKn(c,f[l],e?(KQn(),_Rt):(KQn(),kRt)):h.c.mg(f,e),b=PKn(n,h,e,i),CFn(h.e,h.o,e),b));return r}function dBn(n,t){var e,i,r,c,a;for(c=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i,r=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));r.e!=r.i.gc();)xA(zDn(i=uG(Zkn(r),27),(XYn(),E$t)))!==xA((Own(),Axt))&&((a=uG(zDn(t,yDt),143))==(e=uG(zDn(i,yDt),143))||a&&k9(a,e))&&0!=(!i.a&&(i.a=new fV(bFt,i,10,11)),i.a).i&&(c+=dBn(n,i));return c}function gBn(n){var t,e,i,r,c,a,o;for(i=0,o=0,a=new Ww(n.d);a.a<a.c.c.length;)c=uG(N3(a),105),r=uG(l8(JJ(new fX(null,new h3(c.j,16)),new Zr),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),e=null,i<=o?(KQn(),e=yRt,i+=r.gc()):o<i&&(KQn(),e=KRt,o+=r.gc()),t=e,kS(YJ(r.Oc(),new Jr),new xg(t))}function pBn(n){var t,e,i,r,c;for(c=new R7(n.a.c.length),r=new Ww(n.a);r.a<r.c.c.length;){switch(i=uG(N3(r),10),t=null,(e=uG(oIn(i,(jYn(),gMt)),171)).g){case 1:case 2:Pfn(),t=ygt;break;case 3:case 4:Pfn(),t=vgt}t?(kfn(i,(GYn(),Npt),(Pfn(),ygt)),t==vgt?CKn(i,e,(can(),Vjt)):t==ygt&&CKn(i,e,(can(),Wjt))):mv(c.c,i)}return c}function mBn(n){var t,e,i,r,c,a,o,u;for(n.b=new f$n(new IM((KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt]))),new IM((gon(),Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])))),o=0,u=(a=Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length;o<u;++o)for(c=a[o],i=0,r=(e=Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])).length;i<r;++i)t=e[i],LSn(n.b,c,t,new Zm)}function vBn(n,t){var e,i,r,c,a,o,u,s,h,f;if(a=uG(uG(Y9(n.r,t),21),87),o=n.u.Hc((eNn(),gRt)),e=n.u.Hc(bRt),i=n.u.Hc(lRt),s=n.u.Hc(pRt),f=n.B.Hc((oUn(),uKt)),h=!e&&!i&&(s||2==a.gc()),iFn(n,t),r=null,u=null,o){for(u=r=uG((c=a.Kc()).Pb(),117);c.Ob();)u=uG(c.Pb(),117);r.d.b=0,u.d.c=0,h&&!r.a&&(r.d.c=0)}f&&(yCn(a),o&&(r.d.b=0,u.d.c=0))}function kBn(n,t){var e,i,r,c,a,o,u,s,h,f;if(a=uG(uG(Y9(n.r,t),21),87),o=n.u.Hc((eNn(),gRt)),e=n.u.Hc(bRt),i=n.u.Hc(lRt),u=n.u.Hc(pRt),f=n.B.Hc((oUn(),uKt)),s=!e&&!i&&(u||2==a.gc()),rGn(n,t),h=null,r=null,o){for(r=h=uG((c=a.Kc()).Pb(),117);c.Ob();)r=uG(c.Pb(),117);h.d.d=0,r.d.a=0,s&&!h.a&&(h.d.a=0)}f&&(MCn(a),o&&(h.d.d=0,r.d.a=0))}function yBn(n,t,e){var i,r,c,a,o;if(i=t.k,t.p>=0)return!1;if(t.p=e.b,kD(e.e,t),i==(zIn(),wbt)||i==gbt)for(r=new Ww(t.j);r.a<r.c.c.length;)for(o=new Qd(new Ww(new Wd(uG(N3(r),12)).a.g));l$(o.a);)if(a=(c=uG(N3(o.a),18).d.i).k,t.c!=c.c&&(a==wbt||a==gbt)&&yBn(n,c,e))return!0;return!0}function MBn(n){var t;return 0!=(64&n.Db)?L$n(n):((t=new fx(L$n(n))).a+=" (changeable: ",Lj(t,0!=(n.Bb&w1n)),t.a+=", volatile: ",Lj(t,0!=(n.Bb&frt)),t.a+=", transient: ",Lj(t,0!=(n.Bb&j0n)),t.a+=", defaultValueLiteral: ",VA(t,n.j),t.a+=", unsettable: ",Lj(t,0!=(n.Bb&hrt)),t.a+=", derived: ",Lj(t,0!=(n.Bb&VZn)),t.a+=")",t.a)}function TBn(n,t){var e,i,r,c;return(i=t.qi(n.a))&&(!i.b&&(i.b=new XR((YYn(),H_t),wBt,i)),null!=(e=mK(Lmn(i.b,Krt)))&&F$(c=-1==(r=e.lastIndexOf("#"))?hK(n,t.jk(),e):0==r?gtn(n,null,(s3(1,e.length+1),e.substr(1))):gtn(n,(Knn(0,r,e.length),e.substr(0,r)),(s3(r+1,e.length+1),e.substr(r+1))),156))?uG(c,156):null}function jBn(n,t){var e,i,r,c;return(e=t.qi(n.a))&&(!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),null!=(r=mK(Lmn(e.b,oct)))&&F$(c=-1==(i=r.lastIndexOf("#"))?hK(n,t.jk(),r):0==i?gtn(n,null,(s3(1,r.length+1),r.substr(1))):gtn(n,(Knn(0,i,r.length),r.substr(0,i)),(s3(i+1,r.length+1),r.substr(i+1))),156))?uG(c,156):null}function EBn(n){var t,e,i,r,c,a,o,u,s,h;for(e=TRn(n.d),c=(r=uG(oIn(n.b,(ryn(),Yht)),107)).b+r.c,a=r.d+r.a,u=e.d.a*n.e+c,o=e.b.a*n.f+a,$b(n.b,new MO(u,o)),h=new Ww(n.g);h.a<h.c.c.length;)t=JF(FR(new MO((s=uG(N3(h),568)).g-e.a.a,s.i-e.c.a),s.a,s.b),vD(HR(D$(ON(s.e)),s.d*s.a,s.c*s.b),-.5)),i=AN(s.e),PT(s.e,YF(t,i))}function SBn(n,t){var e,i,r,c,a,o,u;for(t.Ug("Restoring reversed edges",1),a=new Ww(n.b);a.a<a.c.c.length;)for(o=new Ww(uG(N3(a),30).a);o.a<o.c.c.length;)for(u=new Ww(uG(N3(o),10).j);u.a<u.c.c.length;)for(r=0,c=(i=x4(uG(N3(u),12).g)).length;r<c;++r)oM(gK(oIn(e=i[r],(GYn(),pmt))))&&pqn(e,!1);t.Vg()}function PBn(n,t,e,i){var r,c,a,o,u;for(u=Inn(eUt,zZn,109,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,0,2),a=0,o=(c=Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length;a<o;++a)u[(r=c[a]).g]=Inn(eUt,I0n,28,n.c[r.g],15,1);return jEn(u,n,yRt),jEn(u,n,KRt),MTn(u,n,yRt,t,e,i),MTn(u,n,kRt,t,e,i),MTn(u,n,KRt,t,e,i),MTn(u,n,_Rt,t,e,i),u}function CBn(n,t,e){if(PV(n.a,t)){if(cS(uG(cQ(n.a,t),49),e))return 1}else vJ(n.a,t,new ek);if(PV(n.a,e)){if(cS(uG(cQ(n.a,e),49),t))return-1}else vJ(n.a,e,new ek);if(PV(n.b,t)){if(cS(uG(cQ(n.b,t),49),e))return-1}else vJ(n.b,t,new ek);if(PV(n.b,e)){if(cS(uG(cQ(n.b,e),49),t))return 1}else vJ(n.b,e,new ek);return 0}function IBn(n){var t,i,r,c,a,o;n.q!=($Pn(),aRt)&&n.q!=cRt&&(c=n.f.n.d+eq(uG(AJ(n.b,(KQn(),yRt)),127))+n.c,t=n.f.n.a+eq(uG(AJ(n.b,KRt),127))+n.c,r=uG(AJ(n.b,kRt),127),o=uG(AJ(n.b,_Rt),127),a=e.Math.max(0,r.n.d-c),a=e.Math.max(a,o.n.d-c),i=e.Math.max(0,r.n.a-t),i=e.Math.max(i,o.n.a-t),r.n.d=a,o.n.d=a,r.n.a=i,o.n.a=i)}function OBn(n,t,e,i){var r,c,a,o,u,s;if(null==e)for(r=uG(n.g,124),o=0;o<n.i;++o)if((a=r[o]).Lk()==t)return Nyn(n,a,i);return PP(),c=uG(t,69).xk()?uG(e,76):R5(t,e),uN(n.e)?(s=!kmn(n,t),i=Nmn(n,c,i),u=t.Jk()?VZ(n,3,t,null,e,Dqn(n,t,e,F$(t,102)&&0!=(uG(t,19).Bb&P0n)),s):VZ(n,1,t,t.ik(),e,-1,s),i?i.nj(u):i=u):i=Nmn(n,c,i),i}function ABn(){this.b=new u8,this.d=new u8,this.e=new u8,this.c=new u8,this.a=new Ym,this.f=new Ym,E0(PNt,new lu,new pu),E0($Nt,new Cu,new Iu),E0(hbt,new Ou,new Au),E0(Sbt,new Lu,new Nu),E0(AKt,new $u,new Du),E0(eut,new mu,new vu),E0(lut,new ku,new yu),E0(cut,new Mu,new Tu),E0(aut,new ju,new Eu),E0(jut,new Su,new Pu)}function LBn(n,t){var e,i,r,c,a;for(n=null==n?IZn:(tJ(n),n),r=0;r<t.length;r++)t[r]=DRn(t[r]);for(e=new QM,a=0,i=0;i<t.length&&-1!=(c=n.indexOf("%s",a));)e.a+=""+r1(null==n?IZn:(tJ(n),n),a,c),QA(e,t[i++]),a=c+2;if(L4(e,n,a,n.length),i<t.length){for(e.a+=" [",QA(e,t[i++]);i<t.length;)e.a+=TZn,QA(e,t[i++]);e.a+="]"}return e.a}function NBn(n,t){var e,i,r,c,a,o,u;for(e=0,u=new Ww(t);u.a<u.c.c.length;){for(o=uG(N3(u),12),fbn(n.b,n.d[o.p]),a=0,r=new w7(o.b);l$(r.a)||l$(r.b);)zQ(i=uG(l$(r.a)?N3(r.a):N3(r.b),18))?(c=Yj(n,o==i.c?i.d:i.c))>n.d[o.p]&&(e+=J8(n.b,c),A6(n.a,xwn(c))):++a;for(e+=n.b.d*a;!LM(n.a);)lin(n.b,uG(xV(n.a),17).a)}return e}function $Bn(n){var t,e,i,r,c,a;return c=0,(t=bEn(n)).kk()&&(c|=4),0!=(n.Bb&hrt)&&(c|=2),F$(n,102)?(r=lMn(e=uG(n,19)),0!=(e.Bb&Qtt)&&(c|=32),r&&(iQ(K0(r)),c|=8,((a=r.t)>1||-1==a)&&(c|=16),0!=(r.Bb&Qtt)&&(c|=64)),0!=(e.Bb&P0n)&&(c|=frt),c|=w1n):F$(t,468)?c|=512:(i=t.kk())&&0!=(1&i.i)&&(c|=256),0!=(512&n.Bb)&&(c|=128),c}function DBn(n,t){var e;return n.f==CBt?(e=sJ(Nen((gAn(),kBt),t)),n.e?4==e&&t!=(m$n(),NBt)&&t!=(m$n(),OBt)&&t!=(m$n(),ABt)&&t!=(m$n(),LBt):2==e):!(!n.d||!(n.d.Hc(t)||n.d.Hc(_3(Nen((gAn(),kBt),t)))||n.d.Hc(iVn((gAn(),kBt),n.b,t))))||!(!n.f||!WRn((gAn(),n.f),HJ(Nen(kBt,t))))&&(e=sJ(Nen(kBt,t)),n.e?4==e:2==e)}function xBn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(f=-1,l=0,s=0,h=(u=n).length;s<h;++s){for(a=0,o=(c=u[s]).length;a<o;++a)for(r=c[a],t=new j6(-1==f?n[0]:n[f],uG(oIn(HQ(r),(jYn(),Syt)),284),qjn(r),oM(gK(oIn(HQ(r),Eyt)))),e=0;e<r.j.c.length;e++)for(i=e+1;i<r.j.c.length;i++)Jz(t,uG(zq(r.j,e),12),uG(zq(r.j,i),12))>0&&++l;++f}return l}function RBn(n,t,i,r){var c,a,o,u,s,h,f,l;return s=(o=uG(zDn(i,(XYn(),mDt)),8)).a,f=o.b+n,(c=e.Math.atan2(f,s))<0&&(c+=f7n),(c+=t)>f7n&&(c-=f7n),h=(u=uG(zDn(r,mDt),8)).a,l=u.b+n,(a=e.Math.atan2(l,h))<0&&(a+=f7n),(a+=t)>f7n&&(a-=f7n),YN(),oan(1e-10),e.Math.abs(c-a)<=1e-10||c==a||isNaN(c)&&isNaN(a)?0:c<a?-1:c>a?1:KL(isNaN(c),isNaN(a))}function KBn(n){var t,e,i,r,c,a,o;for(o=new Ym,i=new Ww(n.a.b);i.a<i.c.c.length;)vJ(o,t=uG(N3(i),60),new Zm);for(r=new Ww(n.a.b);r.a<r.c.c.length;)for((t=uG(N3(r),60)).i=T0n,a=t.c.Kc();a.Ob();)c=uG(a.Pb(),60),uG(DA(FX(o.f,c)),15).Fc(t);for(e=new Ww(n.a.b);e.a<e.c.c.length;)(t=uG(N3(e),60)).c.$b(),t.c=uG(DA(FX(o.f,t)),15);NFn(n)}function FBn(n){var t,e,i,r,c,a,o;for(o=new Ym,i=new Ww(n.a.b);i.a<i.c.c.length;)vJ(o,t=uG(N3(i),86),new Zm);for(r=new Ww(n.a.b);r.a<r.c.c.length;)for((t=uG(N3(r),86)).o=T0n,a=t.f.Kc();a.Ob();)c=uG(a.Pb(),86),uG(DA(FX(o.f,c)),15).Fc(t);for(e=new Ww(n.a.b);e.a<e.c.c.length;)(t=uG(N3(e),86)).f.$b(),t.f=uG(DA(FX(o.f,t)),15);LKn(n)}function _Bn(n,t,e,i){var r,c;for(PEn(n,t,e,i),xb(t,n.j-t.j+e),Rb(t,n.k-t.k+i),c=new Ww(t.f);c.a<c.c.c.length;)switch((r=uG(N3(c),334)).a.g){case 0:wfn(n,t.g+r.b.a,0,t.g+r.c.a,t.i-1);break;case 1:wfn(n,t.g+t.o,t.i+r.b.a,n.o-1,t.i+r.c.a);break;case 2:wfn(n,t.g+r.b.a,t.i+t.p,t.g+r.c.a,n.p-1);break;default:wfn(n,0,t.i+r.b.a,t.g-1,t.i+r.c.a)}}function BBn(n,t){var e,i,r,c,a,o;for(r=new Zm,t.b.c.length=0,i=uG(l8(f3(new fX(null,new h3(new Lw(n.a.b),1))),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Kc();i.Ob();)if(e=uG(i.Pb(),17),0!=(c=W6(n.a,e)).b)for(a=new bQ(t),mv(r.c,a),a.p=e.a,o=Fkn(c,0);o.b!=o.d.c;)a2(uG(I6(o),10),a);Ohn(t.b,r)}function HBn(n,t,e,i,r){var c,a;try{if(t>=n.o)throw hv(new Ik);a=t>>5,c=Nz(1,pz(Nz(31&t,1))),n.n[e][a]=r?S3(n.n[e][a],c):E3(n.n[e][a],CG(c)),c=Nz(c,1),n.n[e][a]=i?S3(n.n[e][a],c):E3(n.n[e][a],CG(c))}catch(o){throw F$(o=Ehn(o),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(o)}}function UBn(n,t,e,i){var r,c,a,o,u,s,h,f;for(f=new Hj(new ep(n)),o=0,u=(a=Uhn(cT(pbt,1),e6n,10,0,[t,e])).length;o<u;++o)for(h=Vwn(a[o],i).Kc();h.Ob();)for(c=new w7((s=uG(h.Pb(),12)).b);l$(c.a)||l$(c.b);)v9(r=uG(l$(c.a)?N3(c.a):N3(c.b),18))||(f.a.zc(s,(qx(),tot)),zQ(r)&&_V(f,s==r.c?r.d:r.c));return WW(f),new Z_(f)}function GBn(n,t,i,r){var c,a;t&&(c=uM(pK(oIn(t,(OQn(),FPt))))+r,a=i+uM(pK(oIn(t,NPt)))/2,kfn(t,GPt,xwn(pz(Bsn(e.Math.round(c))))),kfn(t,qPt,xwn(pz(Bsn(e.Math.round(a))))),0==t.d.b||GBn(n,uG(B$(new Tp(Fkn(new Mp(t).a.d,0))),39),i+uM(pK(oIn(t,NPt)))+n.b,r+uM(pK(oIn(t,xPt)))),null!=oIn(t,HPt)&&GBn(n,uG(oIn(t,HPt),39),i,r))}function qBn(n,t){var i,r,c,a,o,u,s,h,f,l,b;for(c=2*uM(pK(oIn(s=HQ(t.a),(jYn(),vTt)))),f=uM(pK(oIn(s,STt))),h=e.Math.max(c,f),a=Inn(eUt,I0n,28,t.f-t.c+1,15,1),r=-h,i=0,u=t.b.Kc();u.Ob();)o=uG(u.Pb(),10),r+=n.a[o.c.p]+h,a[i++]=r;for(r+=n.a[t.a.c.p]+h,a[i++]=r,b=new Ww(t.e);b.a<b.c.c.length;)l=uG(N3(b),10),r+=n.a[l.c.p]+h,a[i++]=r;return a}function XBn(n,t){var e,i,r,c;if(0!=(c=uG(zDn(n,(XYn(),gDt)),64).g-uG(zDn(t,gDt),64).g))return c;if(e=uG(zDn(n,fDt),17),i=uG(zDn(t,fDt),17),e&&i&&0!=(r=e.a-i.a))return r;switch(uG(zDn(n,gDt),64).g){case 1:return ugn(n.i,t.i);case 2:return ugn(n.j,t.j);case 3:return ugn(t.i,n.i);case 4:return ugn(t.j,n.j);default:throw hv(new kM(n6n))}}function zBn(n){var t,e,i;return 0!=(64&n.Db)?rOn(n):(t=new lx(_tt),(e=n.k)?JA(JA((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new fV(lFt,n,1,7)),uG(zrn(n.n,0),135)).a)||JA(JA((t.a+=' "',t),i),'"'))),JA(Nj(JA(Nj(JA(Nj(JA(Nj((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function VBn(n){var t,e,i;return 0!=(64&n.Db)?rOn(n):(t=new lx(Btt),(e=n.k)?JA(JA((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new fV(lFt,n,1,7)),uG(zrn(n.n,0),135)).a)||JA(JA((t.a+=' "',t),i),'"'))),JA(Nj(JA(Nj(JA(Nj(JA(Nj((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function WBn(n,t){var e,i,r,c,a;for(t==(Sln(),rEt)&&_An(uG(Y9(n.a,(gPn(),wdt)),15)),r=uG(Y9(n.a,(gPn(),wdt)),15).Kc();r.Ob();)switch(i=uG(r.Pb(),105),e=uG(zq(i.j,0),113).d.j,f$(c=new Z_(i.j),new Fr),t.g){case 2:TCn(n,c,e,(gon(),Edt),1);break;case 1:case 0:TCn(n,new C2(c,0,a=IRn(c)),e,(gon(),Edt),0),TCn(n,new C2(c,a,c.c.length),e,Edt,1)}}function QBn(n,t){var e,i,r,c,a,o;if(null==t||0==t.length)return null;if(!(r=uG(U1(n.a,t),143))){for(i=new _w(new Fw(n.b).a.vc().Kc());i.a.Ob();)if(c=uG(i.a.Pb(),44),a=(e=uG(c.md(),143)).c,o=t.length,m_(a.substr(a.length-o,o),t)&&(t.length==a.length||46==VJ(a,a.length-t.length-1))){if(r)return null;r=e}r&&r2(n.a,t,r)}return r}function JBn(n,t){var e,i,r;return e=new Bn,(i=uG(l8(YJ(new fX(null,new h3(n.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21).gc())<(r=uG(l8(YJ(new fX(null,new h3(t.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[Out,Iut]))),21).gc())?-1:i==r?0:1}function YBn(n){var t,e,i;vR(n,(jYn(),PMt))&&((i=uG(oIn(n,PMt),21)).dc()||(e=new nB(t=uG(Mj(eRt),9),uG(MF(t,t.length),9),0),i.Hc((VDn(),Gxt))?Mon(e,Gxt):Mon(e,qxt),i.Hc(Hxt)||Mon(e,Hxt),i.Hc(Bxt)?Mon(e,Vxt):i.Hc(_xt)?Mon(e,zxt):i.Hc(Uxt)&&Mon(e,Xxt),i.Hc(Vxt)?Mon(e,Bxt):i.Hc(zxt)?Mon(e,_xt):i.Hc(Xxt)&&Mon(e,Uxt),kfn(n,PMt,e)))}function ZBn(n){var t,e,i,r,c,a,o;for(r=uG(oIn(n,(GYn(),zpt)),10),u3(0,(i=n.j).c.length),e=uG(i.c[0],12),a=new Ww(r.j);a.a<a.c.c.length;)if(xA(c=uG(N3(a),12))===xA(oIn(e,rmt))){c.j==(KQn(),yRt)&&n.p>r.p?(NLn(c,KRt),c.d&&(o=c.o.b,t=c.a.b,c.a.b=o-t)):c.j==KRt&&r.p>n.p&&(NLn(c,yRt),c.d&&(o=c.o.b,t=c.a.b,c.a.b=-(o-t)));break}return r}function nHn(n,t,e,i,r){var c,a,o,u,s,h,f;if(!(F$(t,207)||F$(t,366)||F$(t,193)))throw hv(new vM("Method only works for ElkNode-, ElkLabel and ElkPort-objects."));return a=n.a/2,u=t.i+i-a,h=t.j+r-a,s=u+t.g+n.a,f=h+t.f+n.a,aq(c=new Uk,new MO(u,h)),aq(c,new MO(u,f)),aq(c,new MO(s,f)),aq(c,new MO(s,h)),zsn(o=new pDn(c),t),e&&vJ(n.b,t,o),o}function tHn(n,t,e){var i,r,c,a,o,u,s,h;for(c=new MO(t,e),s=new Ww(n.a);s.a<s.c.c.length;)for(JF((u=uG(N3(s),10)).n,c),h=new Ww(u.j);h.a<h.c.c.length;)for(r=new Ww(uG(N3(h),12).g);r.a<r.c.c.length;)for(Xun((i=uG(N3(r),18)).a,c),(a=uG(oIn(i,(jYn(),bMt)),75))&&Xun(a,c),o=new Ww(i.b);o.a<o.c.c.length;)JF(uG(N3(o),72).n,c)}function eHn(n,t,e){var i,r,c,a,o,u,s,h;for(c=new MO(t,e),s=new Ww(n.a);s.a<s.c.c.length;)for(JF((u=uG(N3(s),10)).n,c),h=new Ww(u.j);h.a<h.c.c.length;)for(r=new Ww(uG(N3(h),12).g);r.a<r.c.c.length;)for(Xun((i=uG(N3(r),18)).a,c),(a=uG(oIn(i,(jYn(),bMt)),75))&&Xun(a,c),o=new Ww(i.b);o.a<o.c.c.length;)JF(uG(N3(o),72).n,c)}function iHn(n){if(0==(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i)throw hv(new EM("Edges must have a source."));if(0==(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new EM("Edges must have a target."));if(!n.b&&(n.b=new f_(cFt,n,4,7)),!(n.b.i<=1&&(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c.i<=1)))throw hv(new EM("Hyperedges are not supported."))}function rHn(n,t){var e,i,r,c,a,o,u,s,h,f;for(f=0,A6(c=new ND,t);c.b!=c.c;)for(u=uG(xV(c),219),s=0,h=uG(oIn(t.j,(jYn(),Syt)),284),a=uM(pK(oIn(t.j,yyt))),o=uM(pK(oIn(t.j,Myt))),h!=(yvn(),Fjt)&&(s+=a*mxn(u.e,h),s+=o*xBn(u.e)),f+=XTn(u.d,u.e)+s,r=new Ww(u.b);r.a<r.c.c.length;)i=uG(N3(r),36),(e=uG(zq(n.b,i.p),219)).s||(f+=BAn(n,e));return f}function cHn(){var n;for(cHn=E,xot=new Z5(1,1),Kot=new Z5(1,10),_ot=new Z5(0,0),Dot=new Z5(-1,1),Rot=Uhn(cT(Xot,1),zZn,92,0,[_ot,xot,new Z5(1,2),new Z5(1,3),new Z5(1,4),new Z5(1,5),new Z5(1,6),new Z5(1,7),new Z5(1,8),new Z5(1,9),Kot]),Fot=Inn(Xot,zZn,92,32,0,1),n=0;n<Fot.length;n++)Fot[n]=BA(Nz(1,n),0)?Rmn(Nz(1,n)):hW(Rmn(Men(Nz(1,n))))}function aHn(n,t,e,i,r,c,a){if(n.c=i.Lf().a,n.d=i.Lf().b,r&&(n.c+=r.Lf().a,n.d+=r.Lf().b),n.b=t.Mf().a,n.a=t.Mf().b,r)switch(r.ag().g){case 0:case 2:n.c+=r.Mf().a+a+c.a+a;break;case 4:n.c-=a+c.a+a+t.Mf().a;break;case 1:n.c+=r.Mf().a+a,n.d-=a+c.b+a+t.Mf().b;break;case 3:n.c+=r.Mf().a+a,n.d+=r.Mf().b+a+c.b+a}else e?n.c-=a+t.Mf().a:n.c+=i.Mf().a+a}function oHn(n,t){var e,i;for(this.b=new Zm,this.e=new Zm,this.a=n,this.d=t,Syn(this),Hmn(this),this.b.dc()?this.c=n.c.p:this.c=uG(this.b.Xb(0),10).c.p,0==this.e.c.length?this.f=n.c.p:this.f=uG(zq(this.e,this.e.c.length-1),10).c.p,i=uG(oIn(n,(GYn(),gmt)),15).Kc();i.Ob();)if(vR(e=uG(i.Pb(),72),(jYn(),Gyt))){this.d=uG(oIn(e,Gyt),232);break}}function uHn(n,t,e){var i,r,c,a,o,u,s,h;for(i=uG(cQ(n.a,t),49),c=uG(cQ(n.a,e),49),r=uG(cQ(n.e,t),49),a=uG(cQ(n.e,e),49),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=uG(h.Pb(),10),i.a.zc(s,i),FV(uG(cQ(n.e,s),49),t),Qon(uG(cQ(n.e,s),49),r);for(u=r.a.ec().Kc();u.Ob();)o=uG(u.Pb(),10),a.a.zc(o,a),FV(uG(cQ(n.a,o),49),e),Qon(uG(cQ(n.a,o),49),c)}function sHn(n,t,e){var i,r,c,a,o,u,s,h;for(i=uG(cQ(n.a,t),49),c=uG(cQ(n.a,e),49),r=uG(cQ(n.b,t),49),a=uG(cQ(n.b,e),49),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=uG(h.Pb(),10),i.a.zc(s,i),FV(uG(cQ(n.b,s),49),t),Qon(uG(cQ(n.b,s),49),r);for(u=r.a.ec().Kc();u.Ob();)o=uG(u.Pb(),10),a.a.zc(o,a),FV(uG(cQ(n.a,o),49),e),Qon(uG(cQ(n.a,o),49),c)}function hHn(n,t,e){var i,r,c,a,o,u,s,h;for(i=uG(cQ(n.a,t),49),c=uG(cQ(n.a,e),49),r=uG(cQ(n.d,t),49),a=uG(cQ(n.d,e),49),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=uG(h.Pb(),12),i.a.zc(s,i),FV(uG(cQ(n.d,s),49),t),Qon(uG(cQ(n.d,s),49),r);for(u=r.a.ec().Kc();u.Ob();)o=uG(u.Pb(),12),a.a.zc(o,a),FV(uG(cQ(n.a,o),49),e),Qon(uG(cQ(n.a,o),49),c)}function fHn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w;if(c=e,e<i)for(b=new nhn(n.p),w=new nhn(n.p),Qon(b.e,n.e),b.q=n.q,b.r=w,eQ(b),Qon(w.j,n.j),w.r=b,eQ(w),f=uG((l=new WO(b,w)).a,118),h=uG(l.b,118),u3(c,t.c.length),a=j_n(n,f,h,r=uG(t.c[c],339)),s=e+1;s<=i;s++)u3(s,t.c.length),jyn(o=uG(t.c[s],339),u=j_n(n,f,h,o),r,a)&&(r=o,a=u,c=s);return c}function lHn(n,t,e,i){var r,c,a,o,u,s,h;for(ycn(a=uG(zrn(t,0),27),0),Mcn(a,0),mv((u=new Zm).c,a),o=a,c=new jq(n.a,a.g,a.f,(_Rn(),FAt)),s=1;s<t.i;s++)ycn(h=uG(zrn(t,s),27),(r=jzn(n,lXn(n,xAt,h,o,c,u,e),lXn(n,DAt,h,o,c,u,e),lXn(n,KAt,h,o,c,u,e),lXn(n,RAt,h,o,c,u,e),h,o,i)).d),Mcn(h,r.e),ow(r,FAt),c=r,o=h,mv(u.c,h);return c}function bHn(n,t,e){var i,r,c,a,o,u,s;if(s=t,Gan(u=D5(n,d5(e),s),k6(s,Iet)),a=p6(s,vet),_Ln((i=new YO(n,u)).a,i.b,a),o=p6(s,ket),BLn((r=new ZO(n,u)).a,r.b,o),0==(!u.b&&(u.b=new f_(cFt,u,4,7)),u.b).i||0==(!u.c&&(u.c=new f_(cFt,u,5,8)),u.c).i)throw c=k6(s,Iet),hv(new SM(Net+c+$et));return fCn(s,u),AJn(n,s,u),qfn(n,s,u)}function wHn(n,t){var i,r,c,a,o,u,s;for(c=Inn(YHt,W1n,28,n.e.a.c.length,15,1),o=new Ww(n.e.a);o.a<o.c.c.length;)c[(a=uG(N3(o),125)).d]+=a.b.a.c.length;for(u=oG(t);0!=u.b;)for(r=jtn(new Ww((a=uG(0==u.b?null:(MK(0!=u.b),Lrn(u,u.a.a)),125)).g.a));r.Ob();)(s=(i=uG(r.Pb(),218)).e).e=e.Math.max(s.e,a.e+i.a),--c[s.d],0==c[s.d]&&s8(u,s,u.c.b,u.c)}function dHn(n){var t,i,r,c,a,o,u,s,h,f,l;for(i=j1n,c=vZn,u=new Ww(n.e.a);u.a<u.c.c.length;)a=uG(N3(u),125),c=e.Math.min(c,a.e),i=e.Math.max(i,a.e);for(t=Inn(YHt,W1n,28,i-c+1,15,1),o=new Ww(n.e.a);o.a<o.c.c.length;)(a=uG(N3(o),125)).e-=c,++t[a.e];if(r=0,null!=n.k)for(f=0,l=(h=n.k).length;f<l&&(s=h[f],t[r++]+=s,t.length!=r);++f);return t}function gHn(n,t){var e,i,r,c,a,o;if(t.Ug("Edge routing",1),(r=uG(oIn(n,(QGn(),uCt)),392))==(Pln(),dPt))stn(n);else if(r==wPt)for(uG(yx(lln(JJ(new fX(null,new h3(n.b,16)),new Pa))),39),c=uM(pK(oIn(n,jCt))),a=uM(pK(oIn(n,oCt))),$Jn(n,o=uG(oIn(n,cCt),88),c),_Yn(n,o,c,a),qYn(n,o,c,a),i=Fkn(n.a,0);i.b!=i.d.c;)(e=uG(I6(i),65)).a.b<2&&hNn(e);t.Vg()}function pHn(n){switch(n.d){case 9:case 8:return!0;case 3:case 5:case 4:case 6:return!1;case 7:return uG(AFn(n),17).a==n.o;case 1:case 2:if(-2==n.o)return!1;switch(n.p){case 0:case 1:case 2:case 6:case 5:case 7:return _A(n.k,n.f);case 3:case 4:return n.j==n.e;default:return null==n.n?null==n.g:udn(n.n,n.g)}default:return!1}}function mHn(n,t){var e,i,r;switch(t.Ug("Breaking Point Insertion",1),i=new dDn(n),uG(oIn(n,(jYn(),BTt)),351).g){case 2:r=new kc;break;case 0:r=new hc;break;default:r=new yc}if(e=r.og(n,i),oM(gK(oIn(n,UTt)))&&(e=Jzn(n,e)),!r.pg()&&vR(n,zTt))switch(uG(oIn(n,zTt),352).g){case 2:e=KLn(i,e);break;case 1:e=pPn(i,e)}e.dc()||HJn(n,e),t.Vg()}function vHn(n,t,e){var i,r,c,a,o,u,s,h,f;for(c=new R7(t.c.length),s=new Ww(t);s.a<s.c.c.length;)a=uG(N3(s),10),kD(c,n.b[a.c.p][a.p]);for(Uzn(n,c,e),f=null;f=hWn(c);)lqn(n,uG(f.a,239),uG(f.b,239),c);for(t.c.length=0,r=new Ww(c);r.a<r.c.c.length;)for(u=0,h=(o=(i=uG(N3(r),239)).d).length;u<h;++u)a=o[u],mv(t.c,a),n.a[a.c.p][a.p].a=oD(i.g,i.d[0]).a}function kHn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,Ttt),"ELK Fixed"),"Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points."),new Ku))),U4(n,Ttt,K3n,Pxt),U4(n,Ttt,b9n,Jkn(Cxt)),U4(n,Ttt,Qnt,Jkn(Mxt)),U4(n,Ttt,p4n,Jkn(Txt)),U4(n,Ttt,x4n,Jkn(Ext)),U4(n,Ttt,d4n,Jkn(jxt))}function yHn(n,t,e){var i,r,c,a;if(i=pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))),a=pz(Ngn(h1n,PJ(pz(Ngn(null==e?0:Hon(e),f1n)),15))),(c=lun(n,t,i))&&a==c.f&&xQ(e,c.i))return e;if(bun(n,e,a))throw hv(new vM("value already present: "+e));return r=new fJ(t,i,e,a),c?(yRn(n,c),HLn(n,r,c),c.e=null,c.c=null,c.i):(HLn(n,r,null),SEn(n),null)}function MHn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=uG(cQ(e.c,t),467)).f,b=c.a,o=c.b?new MO(a,l):new MO(s,l),h=c.c?new MO(s,b):new MO(a,b),r=s,e.p||(r+=n.c),u=new MO(r+=e.F+e.v*n.b,l),f=new MO(r,b),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[o,u])),e.d.a.gc()>1&&(i=new MO(r,e.b),aq(t.a,i)),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[f,h]))}function THn(){THn=E,$jt=new dI(q4n,0),Ijt=new dI("NIKOLOV",1),Ljt=new dI("NIKOLOV_PIXEL",2),Ojt=new dI("NIKOLOV_IMPROVED",3),Ajt=new dI("NIKOLOV_IMPROVED_PIXEL",4),Sjt=new dI("DUMMYNODE_PERCENTAGE",5),Njt=new dI("NODECOUNT_PERCENTAGE",6),Djt=new dI("NO_BOUNDARY",7),Pjt=new dI("MODEL_ORDER_LEFT_TO_RIGHT",8),Cjt=new dI("MODEL_ORDER_RIGHT_TO_LEFT",9)}function jHn(n){var t,e,i,r,c;for(i=n.length,t=new VM,c=0;c<i;)if(9!=(e=VJ(n,c++))&&10!=e&&12!=e&&13!=e&&32!=e)if(35!=e)92==e&&c<i?35==(s3(c,n.length),r=n.charCodeAt(c))||9==r||10==r||12==r||13==r||32==r?(TQ(t,r&D1n),++c):(t.a+="\\",TQ(t,r&D1n),++c):TQ(t,e&D1n);else for(;c<i&&13!=(e=VJ(n,c++))&&10!=e;);return t.a}function EHn(){EHn=E,wIt=new mL(M7n,(qx(),!1)),kIt=new mL(T7n,xwn(0)),yIt=new mL(j7n,0),MIt=new mL(E7n,!1),vbn(),gIt=new mL(S7n,pIt=sIt),xwn(0),dIt=new mL(P7n,xwn(1)),esn(),SIt=new mL(C7n,PIt=iOt),Ptn(),CIt=new mL(I7n,IIt=aIt),dTn(),mIt=new mL(O7n,vIt=ZIt),EIt=new mL(A7n,0),TIt=new mL(L7n,!1),jIt=new mL(N7n,!1)}function SHn(n,t){var e,i,r;for(i=new Ww(t);i.a<i.c.c.length;)if(e=uG(N3(i),27),UNn(n.a,e,e),UNn(n.b,e,e),0!=(r=GFn(e)).c.length)for(n.d&&n.d.Gg(r),UNn(n.a,e,(u3(0,r.c.length),uG(r.c[0],27))),UNn(n.b,e,uG(zq(r,r.c.length-1),27));0!=Jhn(r).c.length;)r=Jhn(r),n.d&&n.d.Gg(r),UNn(n.a,e,(u3(0,r.c.length),uG(r.c[0],27))),UNn(n.b,e,uG(zq(r,r.c.length-1),27))}function PHn(n,t,e){var i,r,c,a,o,u;if(t){if(e<=-1){if(F$(i=ern(t.Dh(),-1-e),102))return uG(i,19);for(o=0,u=(a=uG(t.Mh(i),160)).gc();o<u;++o)if(xA(a.Ul(o))===xA(n)&&F$(r=a.Tl(o),102)&&0!=((c=uG(r,19)).Bb&Qtt))return c;throw hv(new kM("The containment feature could not be located"))}return lMn(uG(ern(n.Dh(),e),19))}return null}function CHn(n){var t,e,i,r,c,a,o,u,s,h;for(e=0,o=new Ww(n.d);o.a<o.c.c.length;)(a=uG(N3(o),105)).i&&(a.i.c=e++);for(t=Jq(ZHt,[zZn,B2n],[183,28],16,[e,e],2),h=n.d,r=0;r<h.c.length;r++)if(u3(r,h.c.length),(u=uG(h.c[r],105)).i)for(c=r+1;c<h.c.length;c++)u3(c,h.c.length),(s=uG(h.c[c],105)).i&&(i=HCn(u,s),t[u.i.c][s.i.c]=i,t[s.i.c][u.i.c]=i);return t}function IHn(){IHn=E,_Ot=new mL(q7n,(qx(),!1)),xwn(-1),NOt=new mL(X7n,xwn(-1)),xwn(-1),$Ot=new mL(z7n,xwn(-1)),DOt=new mL(V7n,!1),a9(),qOt=new mL(W7n,XOt=yAt),zOt=new mL(Q7n,-1),Bgn(),UOt=new mL(J7n,GOt=OOt),HOt=new mL(Y7n,!0),den(),KOt=new mL(Z7n,FOt=EAt),ROt=new mL(nnt,!1),xwn(1),xOt=new mL(tnt,xwn(1)),BOt=new Cm(ent)}function OHn(){OHn=E,fPt=new VI("ROOT_PROC",0),rPt=new VI("FAN_PROC",1),uPt=new VI("LEVEL_PROC",2),sPt=new VI("NEIGHBORS_PROC",3),oPt=new VI("LEVEL_HEIGHT",4),iPt=new VI("DIRECTION_PROC",5),hPt=new VI("NODE_POSITION_PROC",6),tPt=new VI("COMPACTION_PROC",7),aPt=new VI("LEVEL_COORDS",8),cPt=new VI("GRAPH_BOUNDS_PROC",9),ePt=new VI("DETREEIFYING_PROC",10)}function AHn(n,t){var e,i,r,c,a,o,u,s;for(o=null,r=!1,c=0,u=z5((s=n1(t)).a).i;c<u;++c)(e=AHn(n,uG(yVn(s,c,F$(a=uG(zrn(z5(s.a),c),89).c,90)?uG(a,29):(YYn(),x_t)),29))).dc()||(o?(r||(r=!0,o=new $X(o)),o.Gc(e)):o=e);return(i=ALn(n,t)).dc()?o||(hZ(),hZ(),zot):o?(r||(o=new $X(o)),o.Gc(i),o):i}function LHn(n,t){var e,i,r,c,a,o,u,s;for(o=null,i=!1,c=0,u=z5((s=n1(t)).a).i;c<u;++c)(e=LHn(n,uG(yVn(s,c,F$(a=uG(zrn(z5(s.a),c),89).c,90)?uG(a,29):(YYn(),x_t)),29))).dc()||(o?(i||(i=!0,o=new $X(o)),o.Gc(e)):o=e);return(r=n$n(n,t)).dc()?o||(hZ(),hZ(),zot):o?(i||(o=new $X(o)),o.Gc(r),o):r}function NHn(n){var t,i,r,c;r=n.o,VK(),n.A.dc()||udn(n.A,lht)?c=r.a:(c=gNn(n.f),n.A.Hc((Qmn(),WRt))&&!n.B.Hc((oUn(),cKt))&&(c=e.Math.max(c,gNn(uG(AJ(n.p,(KQn(),yRt)),252))),c=e.Math.max(c,gNn(uG(AJ(n.p,KRt),252)))),(t=fsn(n))&&(c=e.Math.max(c,t.a))),oM(gK(n.e.Tf().of((XYn(),H$t))))?r.a=e.Math.max(r.a,c):r.a=c,(i=n.f.i).c=0,i.b=c,YGn(n.f)}function $Hn(n,t,e){var i,r,c,a,o,u;if(F$(t,76))return Nyn(n,t,e);for(o=null,c=null,i=uG(n.g,124),a=0;a<n.i;++a)if(udn(t,(r=i[a]).md())&&F$(c=r.Lk(),102)&&0!=(uG(c,19).Bb&Qtt)){o=r;break}return o&&(uN(n.e)&&(u=c.Jk()?VZ(n,4,c,t,null,Dqn(n,c,t,F$(c,102)&&0!=(uG(c,19).Bb&P0n)),!0):VZ(n,c.tk()?2:1,c,t,c.ik(),-1,!0),e?e.nj(u):e=u),e=$Hn(n,o,e)),e}function DHn(n,t,e){var i,r,c,a;if(a=VKn(n.e.Dh(),t),i=uG(n.g,124),PP(),uG(t,69).xk()){for(c=0;c<n.i;++c)if(r=i[c],a.am(r.Lk())&&udn(r,e))return e_n(n,c),!0}else if(null!=e){for(c=0;c<n.i;++c)if(r=i[c],a.am(r.Lk())&&udn(e,r.md()))return e_n(n,c),!0}else for(c=0;c<n.i;++c)if(r=i[c],a.am(r.Lk())&&null==r.md())return e_n(n,c),!0;return!1}function xHn(n,t){var e,i,r,c;if(t.Ug("Node and Port Label Placement and Node Sizing",1),zN((zS(),new mY(n,!0,!0,new We))),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),tpt)))for(i=(r=uG(oIn(n,(jYn(),nTt)),21)).Hc((eNn(),dRt)),c=oM(gK(oIn(n,tTt))),e=new Ww(n.b);e.a<e.c.c.length;)kS(JJ(new fX(null,new h3(uG(N3(e),30).a,16)),new Qe),new KB(r,i,c));t.Vg()}function RHn(n,t){var e,i,r,c,a;for(null==n.c||n.c.length<t.c.length?n.c=Inn(ZHt,B2n,28,t.c.length,16,1):AM(n.c),n.a=new Zm,i=0,a=new Ww(t);a.a<a.c.c.length;)(r=uG(N3(a),10)).p=i++;for(e=new lS,c=new Ww(t);c.a<c.c.c.length;)r=uG(N3(c),10),n.c[r.p]||(nNn(n,r),0==e.b||(MK(0!=e.b),uG(e.a.a.c,15)).gc()<n.a.c.length?aL(e,n.a):cL(e,n.a),n.a=new Zm);return e}function KHn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,Cnt),"ELK SPOrE Overlap Removal"),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new Zo))),U4(n,Cnt,gnt,Jkn(ULt)),U4(n,Cnt,K3n,BLt),U4(n,Cnt,o4n,8),U4(n,Cnt,ynt,Jkn(HLt)),U4(n,Cnt,jnt,Jkn(FLt)),U4(n,Cnt,Ent,Jkn(_Lt)),U4(n,Cnt,q8n,(qx(),!1))}function FHn(n,t){var e,i,r,c,a,o,u;if((e=t.qi(n.a))&&null!=(u=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),fct)))){for(i=new Zm,a=0,o=(c=WGn(u,"\\w")).length;a<o;++a)m_(r=c[a],"##other")?kD(i,"!##"+jz(n,Hrn(t.qk()))):m_(r,"##local")?i.c.push(null):m_(r,sct)?kD(i,jz(n,Hrn(t.qk()))):mv(i.c,r);return i}return hZ(),hZ(),zot}function _Hn(n,t,e,i){var r,c,a,o,u,s,h,f;for(a=KR(t.c,e,i),h=new Ww(t.a);h.a<h.c.c.length;){for(JF((s=uG(N3(h),10)).n,a),f=new Ww(s.j);f.a<f.c.c.length;)for(c=new Ww(uG(N3(f),12).g);c.a<c.c.c.length;)for(Xun((r=uG(N3(c),18)).a,a),(o=uG(oIn(r,(jYn(),bMt)),75))&&Xun(o,a),u=new Ww(r.b);u.a<u.c.c.length;)JF(uG(N3(u),72).n,a);kD(n.a,s),s.a=n}}function BHn(n){var t,e,i,r,c;if(n.d)throw hv(new kM((vK(Rlt),v2n+Rlt.k+k2n)));for(n.c==(xdn(),ZDt)&&qWn(n,JDt),t=new Ww(n.a.a);t.a<t.c.c.length;)uG(N3(t),194).e=0;for(r=new Ww(n.a.b);r.a<r.c.c.length;)for((i=uG(N3(r),86)).o=T0n,e=i.f.Kc();e.Ob();)++uG(e.Pb(),86).d.e;for(sQn(n),c=new Ww(n.a.b);c.a<c.c.c.length;)uG(N3(c),86).k=!0;return n}function HHn(n,t){var e,i,r,c,a,o,u,s;for(o=new cAn(n),s8(e=new lS,t,e.c.b,e.c);0!=e.b;){for((i=uG(0==e.b?null:(MK(0!=e.b),Lrn(e,e.a.a)),113)).d.p=1,a=new Ww(i.e);a.a<a.c.c.length;)uCn(o,r=uG(N3(a),340)),0==(s=r.d).d.p&&s8(e,s,e.c.b,e.c);for(c=new Ww(i.b);c.a<c.c.c.length;)uCn(o,r=uG(N3(c),340)),0==(u=r.c).d.p&&s8(e,u,e.c.b,e.c)}return o}function UHn(n){var t,e,i,r,c;if(1!=(i=uM(pK(zDn(n,(XYn(),MDt))))))for(vN(n,i*n.g,i*n.f),e=EL(ZU((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c),new Vu)),c=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n),(!n.c&&(n.c=new fV(wFt,n,9,9)),n.c),e])));hDn(c);)(r=uG(N9(c),422)).qh(i*r.nh(),i*r.oh()),r.ph(i*r.mh(),i*r.lh()),(t=uG(r.of(oDt),8))&&(t.a*=i,t.b*=i)}function GHn(n,t,e){var i,r,c,a,o;if(PP(),a=uG(t,69).xk(),EFn(n.e,t)){if(t.Si()&&aqn(n,t,e,F$(t,102)&&0!=(uG(t,19).Bb&P0n)))return!1}else for(o=VKn(n.e.Dh(),t),i=uG(n.g,124),c=0;c<n.i;++c)if(r=i[c],o.am(r.Lk()))return!(a?udn(r,e):null==e?null==r.md():udn(e,r.md()))&&(uG(Uyn(n,c,a?uG(e,76):R5(t,e)),76),!0);return ttn(n,a?uG(e,76):R5(t,e))}function qHn(n,t,e,i,r){var c,a,o,u,s,h;for(c=new Ww(n.b);c.a<c.c.c.length;)for(s=0,h=(u=D4(uG(N3(c),30).a)).length;s<h;++s)switch(uG(oIn(o=u[s],(jYn(),gMt)),171).g){case 1:fFn(o),a2(o,t),Vyn(o,!0,i);break;case 3:HKn(o),a2(o,e),Vyn(o,!1,r)}for(a=new N4(n.b,0);a.b<a.d.gc();)0==(MK(a.b<a.d.gc()),uG(a.d.Xb(a.c=a.b++),30)).a.c.length&&LQ(a)}function XHn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(u=b=t.length,s3(0,t.length),45==t.charCodeAt(0)?(f=-1,l=1,--b):(f=1,l=0),r=b/(c=(pXn(),Uot)[10])|0,0!=(g=b%c)&&++r,o=Inn(YHt,W1n,28,r,15,1),e=Hot[8],a=0,w=l+(0==g?c:g),d=l;d<u;w=(d=w)+c)i=vUn((Knn(d,w,t.length),t.substr(d,w-d)),j1n,vZn),b_n(),s=tMn(o,o,a,e),s+=vmn(o,a,i),o[a++]=s;h=a,n.e=f,n.d=h,n.a=o,K4(n)}function zHn(n,t){var e,i,r;return e=new Xn,(i=1==(i=uG(l8(YJ(new fX(null,new h3(n.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21).gc())?1:0)<(r=1==(r=uG(l8(YJ(new fX(null,new h3(t.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[Out,Iut]))),21).gc())?1:0)?-1:i==r?0:1}function VHn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(r=oM(gK(oIn(o=n.i,(jYn(),sMt)))),h=0,i=0,s=new Ww(n.g);s.a<s.c.c.length;)c=(a=v9(u=uG(N3(s),18)))&&r&&oM(gK(oIn(u,hMt))),l=u.d.i,a&&c?++i:a&&!c?++h:HQ(l).e==o?++i:++h;for(e=new Ww(n.e);e.a<e.c.c.length;)c=(a=v9(t=uG(N3(e),18)))&&r&&oM(gK(oIn(t,hMt))),f=t.c.i,a&&c?++h:a&&!c?++i:HQ(f).e==o?++h:++i;return h-i}function WHn(n,t,e,i){this.e=n,this.k=uG(oIn(n,(GYn(),kmt)),312),this.g=Inn(pbt,e6n,10,t,0,1),this.b=Inn(fot,zZn,345,t,7,1),this.a=Inn(pbt,e6n,10,t,0,1),this.d=Inn(fot,zZn,345,t,7,1),this.j=Inn(pbt,e6n,10,t,0,1),this.i=Inn(fot,zZn,345,t,7,1),this.p=Inn(fot,zZn,345,t,7,1),this.n=Inn(cot,zZn,484,t,8,1),FP(this.n,(qx(),!1)),this.f=Inn(cot,zZn,484,t,8,1),FP(this.f,!0),this.o=e,this.c=i}function QHn(n,t){var e,i,r;if(!t.dc())if(uG(t.Xb(0),292).d==(vAn(),Udt))dEn(n,t);else for(i=t.Kc();i.Ob();){switch((e=uG(i.Pb(),292)).d.g){case 5:YOn(n,e,gpn(n,e));break;case 0:YOn(n,e,(r=(e.f-e.c+1-1)/2|0,e.c+r));break;case 4:YOn(n,e,Ain(n,e));break;case 2:fmn(e),YOn(n,e,dPn(e)?e.c:e.f);break;case 1:fmn(e),YOn(n,e,dPn(e)?e.f:e.c)}WCn(e.a)}}function JHn(n,t,e,i){var r,c,a;return a=new KE(t,e),n.a?i?(++(r=uG(nJ(uG(cQ(n.b,t),260)),260)).a,a.d=i.d,a.e=i.e,a.b=i,a.c=i,i.e?i.e.c=a:r.b=a,i.d?i.d.b=a:n.a=a,i.d=a,i.e=a):(uG(nJ(n.e),511).b=a,a.d=n.e,n.e=a,(r=uG(cQ(n.b,t),260))?(++r.a,(c=r.c).c=a,a.e=c,r.c=a):(vJ(n.b,t,r=new TZ(a)),++n.c)):(n.a=n.e=a,vJ(n.b,t,new TZ(a)),++n.c),++n.d,a}function YHn(n,t){var e,i,r,c;if(t.Ug("Network simplex",1),n.e.a.c.length<1)t.Vg();else{for(r=new Ww(n.e.a);r.a<r.c.c.length;)uG(N3(r),125).e=0;for((c=n.e.a.c.length>=40)&&IGn(n),rzn(n),mFn(n),e=ign(n),i=0;e&&i<n.f;)sUn(n,e,WDn(n,e)),e=ign(n),++i;c&&FPn(n),n.a?oxn(n,dHn(n)):dHn(n),n.b=null,n.d=null,n.p=null,n.c=null,n.g=null,n.i=null,n.n=null,n.o=null,t.Vg()}}function ZHn(n,t){var e,i,r,c,a;if(!t.e){for(t.e=!0,i=t.d.a.ec().Kc();i.Ob();)e=uG(i.Pb(),18),t.o&&t.d.a.gc()<=1?(a=new MO((c=t.a.c)+(t.a.c+t.a.b-c)/2,t.b),aq(uG(t.d.a.ec().Kc().Pb(),18).a,a)):(r=uG(cQ(t.c,e),467)).b||r.c?MHn(n,e,t):n.d==(kbn(),fEt)&&(r.d||r.e)&&I$n(n,t)&&t.d.a.gc()<=1?NWn(e,t):I_n(n,e,t);t.k&&z8(t.d,new je)}}function nUn(n,t,i,r,c,a){var o,u,s,h,f,l,b,w,d,g,p,m,v;for(u=(r+c)/2+a,g=i*e.Math.cos(u),p=i*e.Math.sin(u),m=g-t.g/2,v=p-t.f/2,ycn(t,m),Mcn(t,v),l=n.a.Eg(t),(d=2*e.Math.acos(i/i+n.c))<c-r?(b=d/l,o=(r+c-d)/2):(b=(c-r)/l,o=r),w=GFn(t),n.e&&(n.e.Fg(n.d),n.e.Gg(w)),h=new Ww(w);h.a<h.c.c.length;)s=uG(N3(h),27),f=n.a.Eg(s),nUn(n,s,i+n.c,o,o+b*f,a),o+=b*f}function tUn(n,t,e){var i;switch(i=e.q.getMonth(),t){case 5:JA(n,Uhn(cT($ot,1),zZn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[i]);break;case 4:JA(n,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n])[i]);break;case 3:JA(n,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[i]);break;default:Fen(n,i+1,t)}}function eUn(n,t,e,i){var r,c,a,o,u,s,h,f;for(YF(o=new MO(e,i),uG(oIn(t,(mon(),Vft)),8)),f=new Ww(t.e);f.a<f.c.c.length;)JF((h=uG(N3(f),153)).d,o),kD(n.e,h);for(a=new Ww(t.c);a.a<a.c.c.length;){for(r=new Ww((c=uG(N3(a),289)).a);r.a<r.c.c.length;)JF(uG(N3(r),250).d,o);kD(n.c,c)}for(s=new Ww(t.d);s.a<s.c.c.length;)JF((u=uG(N3(s),453)).d,o),kD(n.d,u)}function iUn(n,t){var e,i,r,c,a,o,u,s;for(u=new Ww(t.j);u.a<u.c.c.length;)for(r=new w7((o=uG(N3(u),12)).b);l$(r.a)||l$(r.b);)t!=(c=(e=(i=uG(l$(r.a)?N3(r.a):N3(r.b),18)).c==o?i.d:i.c).i)&&((s=uG(oIn(i,(jYn(),aTt)),17).a)<0&&(s=0),a=c.p,0==n.b[a]&&(i.d==e?(n.a[a]-=s+1,n.a[a]<=0&&n.c[a]>0&&aq(n.f,c)):(n.c[a]-=s+1,n.c[a]<=0&&n.a[a]>0&&aq(n.e,c))))}function rUn(n,t,e,i){var r,c,a,o,u,s,h;for(YF(u=new MO(e,i),uG(oIn(t,(OQn(),kPt)),8)),h=Fkn(t.b,0);h.b!=h.d.c;)JF((s=uG(I6(h),39)).e,u),aq(n.b,s);for(o=uG(l8(_0(new fX(null,new h3(t.a,16))),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Kc();o.Ob();){for(c=Fkn((a=uG(o.Pb(),65)).a,0);c.b!=c.d.c;)(r=uG(I6(c),8)).a+=u.a,r.b+=u.b;aq(n.a,a)}}function cUn(n,t){var e,i,r,c;if(0<(F$(n,16)?uG(n,16).gc():x5(n.Kc()))){if(1<(r=t)){for(--r,c=new Ea,i=n.Kc();i.Ob();)e=uG(i.Pb(),39),c=zcn(Uhn(cT(vat,1),EZn,20,0,[c,new Mp(e)]));return cUn(c,r)}if(r<0){for(c=new Sa,i=n.Kc();i.Ob();)e=uG(i.Pb(),39),c=zcn(Uhn(cT(vat,1),EZn,20,0,[c,new Mp(e)]));if(0<(F$(c,16)?uG(c,16).gc():x5(c.Kc())))return cUn(c,r)}}return uG(B$(n.Kc()),39)}function aUn(n,t,e){var i,r,c,a;for(e.Ug("Processor order nodes",2),n.b=uM(pK(oIn(t,(QGn(),ECt)))),n.a=uG(oIn(t,cCt),88),n.a==(xdn(),ZDt)&&(n.a=QDt,kfn(t,cCt,n.a)),r=new lS,a=Fkn(t.b,0);a.b!=a.d.c;)oM(gK(oIn(c=uG(I6(a),39),(OQn(),UPt))))&&s8(r,c,r.c.b,r.c);MK(0!=r.b),izn(n,i=uG(r.a.a.c,39)),e.fh(1),GBn(n,i,0-uM(pK(oIn(i,(OQn(),NPt))))/2,0),e.fh(1),e.Vg()}function oUn(){oUn=E,eKt=new FO("DEFAULT_MINIMUM_SIZE",0),rKt=new FO("MINIMUM_SIZE_ACCOUNTS_FOR_PADDING",1),tKt=new FO("COMPUTE_PADDING",2),cKt=new FO("OUTSIDE_NODE_LABELS_OVERHANG",3),aKt=new FO("PORTS_OVERHANG",4),uKt=new FO("UNIFORM_PORT_SPACING",5),oKt=new FO("SPACE_EFFICIENT_PORT_LABELS",6),iKt=new FO("FORCE_TABULAR_NODE_LABELS",7),nKt=new FO("ASYMMETRICAL",8)}function uUn(n,t){var e,i,r,c,a,o,u,s;if(t){if(e=(c=t.Dh())?Hrn(c).wi().si(c):null){for(Akn(n,t,e),u=0,s=(null==(r=t.Dh()).i&&eqn(r),r.i).length;u<s;++u)null==r.i&&eqn(r),i=r.i,(o=u>=0&&u<i.length?i[u]:null).rk()&&!o.sk()&&(F$(o,331)?$yn(n,uG(o,35),t,e):0!=((a=uG(o,19)).Bb&Qtt)&&XSn(n,a,t,e));t.Vh()&&uG(e,54).ei(uG(t,54)._h())}return e}return null}function sUn(n,t,e){var i,r,c;if(!t.f)throw hv(new vM("Given leave edge is no tree edge."));if(e.f)throw hv(new vM("Given enter edge is a tree edge already."));for(t.f=!1,Q$(n.p,t),e.f=!0,FV(n.p,e),i=e.e.e-e.d.e-e.a,ILn(n,e.e,t)||(i=-i),c=new Ww(n.e.a);c.a<c.c.c.length;)ILn(n,r=uG(N3(c),125),t)||(r.e+=i);n.j=1,AM(n.c),oNn(n,uG(N3(new Ww(n.e.a)),125)),MVn(n)}function hUn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b;if(Krn(n,t,e),c=t[e],b=i?(KQn(),_Rt):(KQn(),kRt),gD(t.length,e,i)){for(v7(n,r=t[i?e-1:e+1],i?(can(),Wjt):(can(),Vjt)),h=0,l=(u=c).length;h<l;++h)NMn(n,a=u[h],b);for(v7(n,c,i?(can(),Vjt):(can(),Wjt)),s=0,f=(o=r).length;s<f;++s)(a=o[s]).e||NMn(n,a,Gdn(b))}else for(s=0,f=(o=c).length;s<f;++s)NMn(n,a=o[s],b);return!1}function fUn(n,t,e,i,r){var c,a,o,u,s,h,f;for(hZ(),f$(n,new Uu),o=new N4(n,0),f=new Zm,c=0;o.b<o.d.gc();)MK(o.b<o.d.gc()),a=uG(o.d.Xb(o.c=o.b++),163),0!=f.c.length&&EX(a)*jX(a)>2*c?(h=new Jrn(f),s=EX(a)/jX(a),u=KJn(h,t,new Dk,e,i,r,s),JF(dL(h.e),u),f.c.length=0,c=0,mv(f.c,h),mv(f.c,a),c=EX(h)*jX(h)+EX(a)*jX(a)):(mv(f.c,a),c+=EX(a)*jX(a));return f}function lUn(n,t){var e,i,r,c,a,o;if((o=uG(oIn(t,(jYn(),JMt)),101))==($Pn(),aRt)||o==cRt)for(r=new MO(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a).b,a=new Ww(n.a);a.a<a.c.c.length;)(c=uG(N3(a),10)).k==(zIn(),lbt)&&((e=uG(oIn(c,(GYn(),Fpt)),64))!=(KQn(),kRt)&&e!=_Rt||(i=uM(pK(oIn(c,bmt))),o==aRt&&(i*=r),c.n.b=i-uG(oIn(c,WMt),8).b,fhn(c,!1,!0)))}function bUn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w;if(!uN(n.e))return uG(HNn(n,t,e),76);if(t!=e&&(a=(b=(r=uG(n.g,124))[e]).Lk(),EFn(n.e,a))){for(w=VKn(n.e.Dh(),a),u=-1,o=-1,i=0,s=0,f=t>e?t:e;s<=f;++s)s==e?o=i++:(c=r[s],h=w.am(c.Lk()),s==t&&(u=s!=f||h?i:i-1),h&&++i);return l=uG(zdn(n,t,e),76),o!=u&&Yv(n,new wtn(n.e,7,a,xwn(o),b.md(),u)),l}return uG(zdn(n,t,e),76)}function wUn(n,t){var e,i,r,c,a,o;for(t.Ug("Port order processing",1),o=uG(oIn(n,(jYn(),iTt)),430),e=new Ww(n.b);e.a<e.c.c.length;)for(r=new Ww(uG(N3(e),30).a);r.a<r.c.c.length;)i=uG(N3(r),10),c=uG(oIn(i,JMt),101),a=i.j,c==($Pn(),rRt)||c==aRt||c==cRt?(hZ(),f$(a,Ywt)):c!=uRt&&c!=sRt&&(hZ(),f$(a,ndt),pMn(a),o==(nin(),qjt)&&f$(a,Zwt)),i.i=!0,qLn(i);t.Vg()}function dUn(n){var t,i,r,c,a,o,u,s;for(s=new Ym,t=new ak,o=n.Kc();o.Ob();)c=uG(o.Pb(),10),u=jx(KS(new sk,c),t),VAn(s.f,c,u);for(a=n.Kc();a.Ob();)for(r=new Fz(ix(Xgn(c=uG(a.Pb(),10)).a.Kc(),new h));hDn(r);)v9(i=uG(N9(r),18))||RKn(xS(DS($S(RS(new uk,e.Math.max(1,uG(oIn(i,(jYn(),oTt)),17).a)),1),uG(cQ(s,i.c.i),125)),uG(cQ(s,i.d.i),125)));return t}function gUn(){gUn=E,TSt=Aq(new wJ,(uIn(),Slt),(zYn(),cwt)),ESt=Aq(new wJ,Elt,swt),SSt=wz(Aq(new wJ,Elt,Twt),Plt,Mwt),MSt=wz(Aq(Aq(new wJ,Elt,Zbt),Slt,nwt),Plt,twt),PSt=Lvn(Lvn(gP(wz(Aq(new wJ,Tlt,Nwt),Plt,Lwt),Slt),Awt),$wt),jSt=wz(new wJ,Plt,awt),kSt=wz(Aq(Aq(Aq(new wJ,jlt,lwt),Slt,wwt),Slt,dwt),Plt,bwt),ySt=wz(Aq(Aq(new wJ,Slt,dwt),Slt,Vbt),Plt,zbt)}function pUn(n,t,e,i,r,c){var a,o,u,s,h,f;for(a=JIn(t,u=Kfn(t)-Kfn(n)),o=p$(0,0,0);u>=0&&(!fjn(n,a)||(u<22?o.l|=1<<u:u<44?o.m|=1<<u-22:o.h|=1<<u-44,0!=n.l||0!=n.m||0!=n.h));)s=a.m,h=a.h,f=a.l,a.h=h>>>1,a.m=s>>>1|(1&h)<<21,a.l=f>>>1|(1&s)<<21,--u;return e&&Yfn(o),c&&(i?(Qat=gfn(n),r&&(Qat=Thn(Qat,(tin(),Zat)))):Qat=p$(n.l,n.m,n.h)),o}function mUn(n,t){var e,i,r,c,a,o,u,s,h,f;for(s=n.e[t.c.p][t.p]+1,u=t.c.a.c.length+1,o=new Ww(n.a);o.a<o.c.c.length;){for(a=uG(N3(o),12),f=0,c=0,r=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(a),new Wd(a)])));hDn(r);)(i=uG(N9(r),12)).i.c==t.c&&(f+=cD(n,i.i)+1,++c);e=f/c,(h=a.j)==(KQn(),kRt)?n.f[a.p]=e<s?n.c-e:n.b+(u-e):h==_Rt&&(n.f[a.p]=e<s?n.b+e:n.c-(u-e))}}function vUn(n,t,e){var i,r,c,a;if(null==n)throw hv(new ZM(IZn));for(i=(c=n.length)>0&&(s3(0,n.length),45==n.charCodeAt(0)||(s3(0,n.length),43==n.charCodeAt(0)))?1:0;i<c;i++)if(-1==Cvn((s3(i,n.length),n.charCodeAt(i))))throw hv(new ZM(y0n+n+'"'));if(r=(a=parseInt(n,10))<t,isNaN(a))throw hv(new ZM(y0n+n+'"'));if(r||a>e)throw hv(new ZM(y0n+n+'"'));return a}function kUn(n){var t,i,r,c,a,o;for(a=new lS,c=new Ww(n.a);c.a<c.c.c.length;)Qb(r=uG(N3(c),118),r.f.c.length),Jb(r,r.k.c.length),0==r.i&&(r.o=0,s8(a,r,a.c.b,a.c));for(;0!=a.b;)for(i=(r=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),118)).o+1,t=new Ww(r.f);t.a<t.c.c.length;)Yb(o=uG(N3(t),132).a,e.Math.max(o.o,i)),Jb(o,o.i-1),0==o.i&&s8(a,o,a.c.b,a.c)}function yUn(n){var t,e,i,r,c,a,o,u;for(a=new Ww(n);a.a<a.c.c.length;){for(c=uG(N3(a),74),o=(i=lCn(uG(zrn((!c.b&&(c.b=new f_(cFt,c,4,7)),c.b),0),84))).i,u=i.j,MN(r=uG(zrn((!c.a&&(c.a=new fV(oFt,c,6,6)),c.a),0),166),r.j+o,r.k+u),yN(r,r.b+o,r.c+u),e=new DD((!r.a&&(r.a=new MD(eFt,r,5)),r.a));e.e!=e.i.gc();)mN(t=uG(Zkn(e),377),t.a+o,t.b+u);fun(uG(zDn(c,(XYn(),L$t)),75),o,u)}}function MUn(n){switch(n){case 100:return tZn(Wct,!0);case 68:return tZn(Wct,!1);case 119:return tZn(Qct,!0);case 87:return tZn(Qct,!1);case 115:return tZn(Jct,!0);case 83:return tZn(Jct,!1);case 99:return tZn(Yct,!0);case 67:return tZn(Yct,!1);case 105:return tZn(Zct,!0);case 73:return tZn(Zct,!1);default:throw hv(new Ky(Vct+n.toString(16)))}}function TUn(n){var t,i,r,c,a;switch(c=uG(zq(n.a,0),10),t=new gMn(n),kD(n.a,t),t.o.a=e.Math.max(1,c.o.a),t.o.b=e.Math.max(1,c.o.b),t.n.a=c.n.a,t.n.b=c.n.b,uG(oIn(c,(GYn(),Fpt)),64).g){case 4:t.n.a+=2;break;case 1:t.n.b+=2;break;case 2:t.n.a-=2;break;case 3:t.n.b-=2}return o2(r=new lOn,t),c2(i=new UZ,a=uG(zq(c.j,0),12)),u2(i,r),JF(dL(r.n),a.n),JF(dL(r.a),a.a),t}function jUn(n,t,e,i,r){e&&(!i||(n.c-n.b&n.a.length-1)>1)&&1==t&&uG(n.a[n.b],10).k==(zIn(),bbt)?Gqn(uG(n.a[n.b],10),(Ajn(),$xt)):i&&(!e||(n.c-n.b&n.a.length-1)>1)&&1==t&&uG(n.a[n.c-1&n.a.length-1],10).k==(zIn(),bbt)?Gqn(uG(n.a[n.c-1&n.a.length-1],10),(Ajn(),Dxt)):2==(n.c-n.b&n.a.length-1)?(Gqn(uG(Rfn(n),10),(Ajn(),$xt)),Gqn(uG(Rfn(n),10),Dxt)):Pxn(n,r),q5(n)}function EUn(n,t,i){var r,c,a,o,u;for(a=0,c=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));c.e!=c.i.gc();)o="",0==(!(r=uG(Zkn(c),27)).n&&(r.n=new fV(lFt,r,1,7)),r.n).i||(o=uG(zrn((!r.n&&(r.n=new fV(lFt,r,1,7)),r.n),0),135).a),zsn(u=new wln(a++,t,o),r),kfn(u,(OQn(),RPt),r),u.e.b=r.j+r.f/2,u.f.a=e.Math.max(r.g,1),u.e.a=r.i+r.g/2,u.f.b=e.Math.max(r.f,1),aq(t.b,u),VAn(i.f,r,u)}function SUn(n){var t,e,i,r,c;i=uG(oIn(n,(GYn(),rmt)),27),c=uG(zDn(i,(jYn(),DMt)),181).Hc((Qmn(),JRt)),n.e||(r=uG(oIn(n,Hpt),21),t=new MO(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),r.Hc((r_n(),tpt))?(Myn(i,JMt,($Pn(),cRt)),ZQn(i,t.a,t.b,!1,!0)):oM(gK(zDn(i,xMt)))||ZQn(i,t.a,t.b,!0,!0)),Myn(i,DMt,c?ggn(JRt):new nB(e=uG(Mj(sKt),9),uG(MF(e,e.length),9),0))}function PUn(n,t,e){var i,r,c,a;if(t[0]>=n.length)return e.o=0,!0;switch(VJ(n,t[0])){case 43:r=1;break;case 45:r=-1;break;default:return e.o=0,!0}if(++t[0],c=t[0],0==(a=RNn(n,t))&&t[0]==c)return!1;if(t[0]<n.length&&58==VJ(n,t[0])){if(i=60*a,++t[0],c=t[0],0==(a=RNn(n,t))&&t[0]==c)return!1;i+=a}else(i=a)<24&&t[0]-c<=2?i*=60:i=i%100+60*(i/100|0);return i*=r,e.o=-i,!0}function CUn(n){var t,e,i,r,c,a,o;for(r=new Zm,i=new Fz(ix(Xgn(n.b).a.Kc(),new h));hDn(i);)v9(e=uG(N9(i),18))&&kD(r,new m7(e,htn(n,e.c),htn(n,e.d)));for(o=new _w(new Fw(n.e).a.vc().Kc());o.a.Ob();)t=uG(o.a.Pb(),44),(c=uG(t.md(),113)).d.p=0;for(a=new _w(new Fw(n.e).a.vc().Kc());a.a.Ob();)t=uG(a.a.Pb(),44),0==(c=uG(t.md(),113)).d.p&&kD(n.d,HHn(n,c))}function IUn(n){var t,e,i,r,c;for(c=h0(n),r=new DD((!n.e&&(n.e=new f_(aFt,n,7,4)),n.e));r.e!=r.i.gc();)if(i=uG(Zkn(r),74),!Ern(lCn(uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84)),c))return!0;for(e=new DD((!n.d&&(n.d=new f_(aFt,n,8,5)),n.d));e.e!=e.i.gc();)if(t=uG(Zkn(e),74),!Ern(lCn(uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84)),c))return!0;return!1}function OUn(n,t){var e,i,r,c,a,o,u,s;for(c=new Ww(t.b);c.a<c.c.c.length;)for(u=new Ww(uG(N3(c),30).a);u.a<u.c.c.length;){for(o=uG(N3(u),10),s=new Zm,a=0,i=new Fz(ix(qgn(o).a.Kc(),new h));hDn(i);)v9(e=uG(N9(i),18))||!v9(e)&&e.c.i.c==e.d.i.c||((r=uG(oIn(e,(jYn(),uTt)),17).a)>a&&(a=r,s.c.length=0),r==a&&kD(s,new WO(e.c.i,e)));hZ(),f$(s,n.c),GX(n.b,o.p,s)}}function AUn(n,t){var e,i,r,c,a,o,u,s;for(c=new Ww(t.b);c.a<c.c.c.length;)for(u=new Ww(uG(N3(c),30).a);u.a<u.c.c.length;){for(o=uG(N3(u),10),s=new Zm,a=0,i=new Fz(ix(Xgn(o).a.Kc(),new h));hDn(i);)v9(e=uG(N9(i),18))||!v9(e)&&e.c.i.c==e.d.i.c||((r=uG(oIn(e,(jYn(),uTt)),17).a)>a&&(a=r,s.c.length=0),r==a&&kD(s,new WO(e.d.i,e)));hZ(),f$(s,n.c),GX(n.f,o.p,s)}}function LUn(n,t){var e,i,r,c,a,o,u;if(null==(u=gK(oIn(t,(QGn(),TCt))))||(tJ(u),u)){for(E$n(n,t),r=new Zm,o=Fkn(t.b,0);o.b!=o.d.c;)(e=yAn(n,uG(I6(o),39),null))&&(zsn(e,t),mv(r.c,e));if(n.a=null,n.b=null,r.c.length>1)for(i=new Ww(r);i.a<i.c.c.length;)for(c=0,a=Fkn((e=uG(N3(i),121)).b,0);a.b!=a.d.c;)uG(I6(a),39).g=c++;return r}return n7(Uhn(cT(nPt,1),U3n,121,0,[t]))}function NUn(n){var t,i,r,c,a,o,u,s;for(s=new Uk,u=null,i=uG(I6(t=Fkn(n,0)),8),c=uG(I6(t),8);t.b!=t.d.c;)u=i,i=c,c=uG(I6(t),8),a=Mrn(YF(new MO(u.a,u.b),i)),o=Mrn(YF(new MO(c.a,c.b),i)),r=10,r=e.Math.min(r,e.Math.abs(a.a+a.b)/2),r=e.Math.min(r,e.Math.abs(o.a+o.b)/2),a.a=gq(a.a)*r,a.b=gq(a.b)*r,o.a=gq(o.a)*r,o.b=gq(o.b)*r,aq(s,JF(a,i)),aq(s,JF(o,i));return s}function $Un(n,t,e){var i,r,c,a,o;e.Ug("Minimize Crossings "+n.a,1),i=0==t.b.c.length||!Qj(JJ(new fX(null,new h3(t.b,16)),new hd(new Ic))).Bd((vS(),Kut)),o=1==t.b.c.length&&1==uG(zq(t.b,0),30).a.c.length,c=xA(oIn(t,(jYn(),rMt)))===xA((Own(),Ixt)),i||o&&!c||(Bln(r=eFn(n,t),(a=uG(hyn(r,0),219)).c.kg()?a.c.eg()?new Jg(n):new Yg(n):new Qg(n)),Pwn(n)),e.Vg()}function DUn(n,t,e,i){var r,c,a,o,u;return a=n.Ph(),r=null,(u=n.Jh())?t&&0==(PHn(n,t,e).Bb&P0n)?(i=Nyn(u.El(),n,i),n.di(null),r=t.Qh()):u=null:(a&&(u=a.Qh()),t&&(r=t.Qh())),u!=r&&u&&u.Il(n),o=n.Fh(),n.Bh(t,e),u!=r&&r&&r.Hl(n),n.vh()&&n.wh()&&(a&&o>=0&&o!=e&&(c=new lV(n,1,o,a,null),i?i.nj(c):i=c),e>=0&&(c=new lV(n,1,e,o==e?a:null,t),i?i.nj(c):i=c)),i}function xUn(n){var t,e,i;if(null==n.b){if(i=new zM,null!=n.i&&(VA(i,n.i),i.a+=":"),0!=(256&n.f)){for(0!=(256&n.f)&&null!=n.a&&(aY(n.i)||(i.a+="//"),VA(i,n.a)),null!=n.d&&(i.a+="/",VA(i,n.d)),0!=(16&n.f)&&(i.a+="/"),t=0,e=n.j.length;t<e;t++)0!=t&&(i.a+="/"),VA(i,n.j[t]);null!=n.g&&(i.a+="?",VA(i,n.g))}else VA(i,n.a);null!=n.e&&(i.a+="#",VA(i,n.e)),n.b=i.a}return n.b}function RUn(n,t){var e,i,r,c,a,o;for(r=new Ww(t.a);r.a<r.c.c.length;)F$(c=oIn(i=uG(N3(r),10),(GYn(),rmt)),12)&&(o=SGn(t,i,(a=uG(c,12)).o.a,a.o.b),a.n.a=o.a,a.n.b=o.b,NLn(a,uG(oIn(i,Fpt),64)));e=new MO(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),uG(oIn(t,(GYn(),Hpt)),21).Hc((r_n(),tpt))?(kfn(n,(jYn(),JMt),($Pn(),cRt)),uG(oIn(HQ(n),Hpt),21).Fc(rpt),AVn(n,e,!1)):AVn(n,e,!0)}function KUn(n,t,e,i,r){var c,a,o,u;Hb(c=new gMn(n),(zIn(),gbt)),kfn(c,(jYn(),JMt),($Pn(),cRt)),kfn(c,(GYn(),rmt),t.c.i),kfn(a=new lOn,rmt,t.c),NLn(a,r),o2(a,c),kfn(t.c,lmt,c),Hb(o=new gMn(n),gbt),kfn(o,JMt,cRt),kfn(o,rmt,t.d.i),kfn(u=new lOn,rmt,t.d),NLn(u,r),o2(u,o),kfn(t.d,lmt,o),c2(t,a),u2(t,u),o3(0,e.c.length),pC(e.c,0,c),mv(i.c,o),kfn(c,Opt,xwn(1)),kfn(o,Opt,xwn(1))}function FUn(n,t,e,i){var r,c,a,o;if(o=pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))),r=pz(Ngn(h1n,PJ(pz(Ngn(null==e?0:Hon(e),f1n)),15))),a=bun(n,t,o),c=lun(n,e,r),a&&r==a.a&&xQ(e,a.g))return e;if(c&&!i)throw hv(new vM("key already present: "+e));return a&&yRn(n,a),c&&yRn(n,c),HLn(n,new fJ(e,r,t,o),c),c&&(c.e=null,c.c=null),a&&(a.e=null,a.c=null),SEn(n),a?a.g:null}function _Un(n,t,e){var i,r,c,a,o;for(c=0;c<t;c++){for(i=0,o=c+1;o<t;o++)i=Lgn(Lgn(Ngn(E3(n[c],L0n),E3(n[o],L0n)),E3(e[c+o],L0n)),E3(pz(i),L0n)),e[c+o]=pz(i),i=Dz(i,32);e[c+t]=pz(i)}for(wun(e,e,t<<1),i=0,r=0,a=0;r<t;++r,a++)i=Lgn(Lgn(Ngn(E3(n[r],L0n),E3(n[r],L0n)),E3(e[a],L0n)),E3(pz(i),L0n)),e[a]=pz(i),i=Lgn(i=Dz(i,32),E3(e[++a],L0n)),e[a]=pz(i),i=Dz(i,32);return e}function BUn(n,t,i){var r,c,a,o,u,s,h,f;if(!P6(t)){for(s=uM(pK(Omn(i.c,(jYn(),ITt)))),!(h=uG(Omn(i.c,CTt),140))&&(h=new Nk),r=i.a,c=null,u=t.Kc();u.Ob();)o=uG(u.Pb(),12),f=0,c?(f=s,f+=c.o.b):f=h.d,a=jx(KS(new sk,o),n.f),vJ(n.k,o,a),RKn(xS(DS($S(RS(new uk,0),t0(e.Math.ceil(f))),r),a)),c=o,r=a;RKn(xS(DS($S(RS(new uk,0),t0(e.Math.ceil(h.a+c.o.b))),r),i.d))}}function HUn(n,t,e,i,r,c,a,o){var u,s,h;return h=!1,s=c-e.s,u=e.t-t.f+uXn(e,s,!1).a,!(i.g+o>s)&&(u+o+uXn(i,s,!1).a<=t.b&&(dtn(e,c-e.s),e.c=!0,dtn(i,c-e.s),oMn(i,e.s,e.t+e.d+o),i.k=!0,Gun(e.q,i),h=!0,r&&(fan(t,i),i.j=t,n.c.length>a&&(uEn((u3(a,n.c.length),uG(n.c[a],186)),i),0==(u3(a,n.c.length),uG(n.c[a],186)).a.c.length&&i7(n,a)))),h)}function UUn(n,t){var e,i,r,c,a;if(t.Ug("Partition midprocessing",1),r=new K1,kS(JJ(new fX(null,new h3(n.a,16)),new di),new kg(r)),0!=r.d){for(a=uG(l8(f3(new fX(null,(r.i||(r.i=new RD(r,r.c))).Nc())),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),e=uG((i=a.Kc()).Pb(),17);i.Ob();)c=uG(i.Pb(),17),RRn(uG(Y9(r,e),21),uG(Y9(r,c),21)),e=c;t.Vg()}}function GUn(n,t,e){var i,r,c,a,o;if(0==t.p){for(t.p=1,(r=e)||(r=new WO(new Zm,new nB(i=uG(Mj(YRt),9),uG(MF(i,i.length),9),0))),uG(r.a,15).Fc(t),t.k==(zIn(),lbt)&&uG(r.b,21).Fc(uG(oIn(t,(GYn(),Fpt)),64)),a=new Ww(t.j);a.a<a.c.c.length;)for(c=uG(N3(a),12),o=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(c),new Wd(c)])));hDn(o);)GUn(n,uG(N9(o),12).i,r);return r}return null}function qUn(n,t){var e,i,r,c,a;if(n.Ab)if(n.Ab){if((a=n.Ab.i)>0)if(r=uG(n.Ab.g,2033),null==t){for(c=0;c<a;++c)if(null==(e=r[c]).d)return e}else for(c=0;c<a;++c)if(m_(t,(e=r[c]).d))return e}else if(null==t){for(i=new DD(n.Ab);i.e!=i.i.gc();)if(null==(e=uG(Zkn(i),598)).d)return e}else for(i=new DD(n.Ab);i.e!=i.i.gc();)if(m_(t,(e=uG(Zkn(i),598)).d))return e;return null}function XUn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p;fon(b=w5(n,Qhn(t),r),k6(r,Iet)),d=m6(w=r,Let),GIn(new Zp(b).a,d),g=m6(w,"endPoint"),UIn(new im(b).a,g),p=p6(w,Met),fPn(new am(b).a,p),f=k6(r,jet),t_((c=new nA(n,b)).a,c.b,f),l=k6(r,Tet),e_((a=new tA(n,b)).a,a.b,l),s=p6(r,Set),Tjn((o=new eA(e,b)).b,o.a,s),h=p6(r,Eet),jjn((u=new iA(i,b)).b,u.a,h)}function zUn(n,t,e){var i,r,c,a,o;switch(o=null,t.g){case 1:for(r=new Ww(n.j);r.a<r.c.c.length;)if(oM(gK(oIn(i=uG(N3(r),12),(GYn(),Gpt)))))return i;kfn(o=new lOn,(GYn(),Gpt),(qx(),!0));break;case 2:for(a=new Ww(n.j);a.a<a.c.c.length;)if(oM(gK(oIn(c=uG(N3(a),12),(GYn(),hmt)))))return c;kfn(o=new lOn,(GYn(),hmt),(qx(),!0))}return o&&(o2(o,n),NLn(o,e),rMn(o.n,n.o,e)),o}function VUn(n,t){var i,r,c,a,o,u;for(u=-1,o=new lS,r=new w7(n.b);l$(r.a)||l$(r.b);){for(i=uG(l$(r.a)?N3(r.a):N3(r.b),18),u=e.Math.max(u,uM(pK(oIn(i,(jYn(),tMt))))),i.c==n?kS(JJ(new fX(null,new h3(i.b,16)),new fe),new cg(o)):kS(JJ(new fX(null,new h3(i.b,16)),new le),new ag(o)),a=Fkn(o,0);a.b!=a.d.c;)vR(c=uG(I6(a),72),(GYn(),Dpt))||kfn(c,Dpt,i);Ohn(t,o),BY(o)}return u}function WUn(n,t,i,r,c){var a,o,u,s,h;u=c?r.b:r.a,cS(n.a,r)||(h=u>i.s&&u<i.c,s=!1,0!=i.e.b&&0!=i.j.b&&(s|=e.Math.abs(u-uM(pK(gR(i.e))))<t4n&&e.Math.abs(u-uM(pK(gR(i.j))))<t4n,s|=e.Math.abs(u-uM(pK(pR(i.e))))<t4n&&e.Math.abs(u-uM(pK(pR(i.j))))<t4n),(h||s)&&((o=uG(oIn(t,(jYn(),bMt)),75))||(o=new Uk,kfn(t,bMt,o)),s8(o,a=new eN(r),o.c.b,o.c),FV(n.a,a)))}function QUn(n,t,e,i){var r,c,a,o,u,s,h;if(FNn(n,t,e,i))return!0;for(a=new Ww(t.f);a.a<a.c.c.length;){switch(c=uG(N3(a),334),o=!1,s=(u=n.j-t.j+e)+t.o,r=(h=n.k-t.k+i)+t.p,c.a.g){case 0:o=Gln(n,u+c.b.a,0,u+c.c.a,h-1);break;case 1:o=Gln(n,s,h+c.b.a,n.o-1,h+c.c.a);break;case 2:o=Gln(n,u+c.b.a,r,u+c.c.a,n.p-1);break;default:o=Gln(n,0,h+c.b.a,u-1,h+c.c.a)}if(o)return!0}return!1}function JUn(n,t,e){var i,r,c,a,o,u,s,h,f;for(e.Ug("Processor set coordinates",1),n.a=0==t.b.b?1:t.b.b,s=null,i=Fkn(t.b,0);!s&&i.b!=i.d.c;)oM(gK(oIn(f=uG(I6(i),39),(OQn(),UPt))))&&(s=f,(u=f.e).a=uG(oIn(f,GPt),17).a,u.b=uG(oIn(f,qPt),17).a);o=Lhn(s),h=1;do{h=(o=$In((r=o,e.eh(h),r))).b/n.a|0}while(0!=o.b);for(a=Fkn(t.b,0);a.b!=a.d.c;)YF((c=uG(I6(a),39)).e,new MO(c.f.a/2,c.f.b/2));e.Vg()}function YUn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug(X9n,1),$V(n.b),$V(n.a),o=null,c=Fkn(t.b,0);!o&&c.b!=c.d.c;)oM(gK(oIn(s=uG(I6(c),39),(OQn(),UPt))))&&(o=s);for(s8(u=new lS,o,u.c.b,u.c),_Qn(n,u),h=Fkn(t.b,0);h.b!=h.d.c;)a=mK(oIn(s=uG(I6(h),39),(OQn(),OPt))),r=null!=U1(n.b,a)?uG(U1(n.b,a),17).a:0,kfn(s,EPt,xwn(r)),i=1+(null!=U1(n.a,a)?uG(U1(n.a,a),17).a:0),kfn(s,TPt,xwn(i));e.Vg()}function ZUn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,qnt),"ELK Box"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges."),new Ru))),U4(n,qnt,K3n,qNt),U4(n,qnt,o4n,15),U4(n,qnt,a4n,xwn(0)),U4(n,qnt,Xnt,Jkn(FNt)),U4(n,qnt,p4n,Jkn(BNt)),U4(n,qnt,g4n,Jkn(UNt)),U4(n,qnt,R3n,Gnt),U4(n,qnt,f4n,Jkn(_Nt)),U4(n,qnt,x4n,Jkn(HNt)),U4(n,qnt,znt,Jkn(RNt)),U4(n,qnt,r9n,Jkn(KNt))}function nGn(n,t){var e,i,r,c,a,o,u,s,h;if(a=(r=n.i).o.a,c=r.o.b,a<=0&&c<=0)return KQn(),FRt;switch(s=n.n.a,h=n.n.b,o=n.o.a,e=n.o.b,t.g){case 2:case 1:if(s<0)return KQn(),_Rt;if(s+o>a)return KQn(),kRt;break;case 4:case 3:if(h<0)return KQn(),yRt;if(h+e>c)return KQn(),KRt}return(u=(s+o/2)/a)+(i=(h+e/2)/c)<=1&&u-i<=0?(KQn(),_Rt):u+i>=1&&u-i>=0?(KQn(),kRt):i<.5?(KQn(),yRt):(KQn(),KRt)}function tGn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;for(e=!1,u=uM(pK(oIn(t,(jYn(),ETt)))),l=T1n*u,r=new Ww(t.b);r.a<r.c.c.length;)for(i=uG(N3(r),30),c=uG(N3(o=new Ww(i.a)),10),s=uV(n.a[c.p]);o.a<o.c.c.length;)a=uG(N3(o),10),s!=(h=uV(n.a[a.p]))&&(f=y$(n.b,c,a),c.n.b+c.o.b+c.d.a+s.a+f>a.n.b-a.d.d+h.a+l&&(b=s.g+h.g,h.a=(h.g*h.a+s.g*s.a)/b,h.g=b,s.f=h,e=!0)),c=a,s=h;return e}function eGn(n,t,e,i,r,c,a){var o,u,s,h,f;for(f=new cN,u=t.Kc();u.Ob();)for(h=new Ww(uG(u.Pb(),853).Rf());h.a<h.c.c.length;)xA((s=uG(N3(h),187)).of((XYn(),m$t)))===xA((Zrn(),cxt))&&(aHn(f,s,!1,i,r,c,a),bAn(n,f));for(o=e.Kc();o.Ob();)for(h=new Ww(uG(o.Pb(),853).Rf());h.a<h.c.c.length;)xA((s=uG(N3(h),187)).of((XYn(),m$t)))===xA((Zrn(),rxt))&&(aHn(f,s,!0,i,r,c,a),bAn(n,f))}function iGn(n,t,e){var i,r,c,a,o,u,s;for(a=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));a.e!=a.i.gc();)for(r=new Fz(ix(eRn(c=uG(Zkn(a),27)).a.Kc(),new h));hDn(r);)z$n(i=uG(N9(r),74))||z$n(i)||BNn(i)||(u=uG(DA(FX(e.f,c)),39),s=uG(cQ(e,lCn(uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84))),39),u&&s&&(kfn(o=new uZ(u,s),(OQn(),RPt),i),zsn(o,i),aq(u.d,o),aq(s.b,o),aq(t.a,o)))}function rGn(n,t){var i,r,c,a,o,u,s;for(u=uG(uG(Y9(n.r,t),21),87).Kc();u.Ob();)(r=(o=uG(u.Pb(),117)).c?iq(o.c):0)>0?o.a?r>(s=o.b.Mf().b)&&(n.v||1==o.c.d.c.length?(a=(r-s)/2,o.d.d=a,o.d.a=a):(i=(uG(zq(o.c.d,0),187).Mf().b-s)/2,o.d.d=e.Math.max(0,i),o.d.a=r-i-s)):o.d.a=n.t+r:cV(n.u)&&((c=ECn(o.b)).d<0&&(o.d.d=-c.d),c.d+c.a>o.b.Mf().b&&(o.d.a=c.d+c.a-o.b.Mf().b))}function cGn(){cGn=E,$ft=new _N((XYn(),vDt),xwn(1)),_ft=new _N(DDt,80),Fft=new _N(CDt,5),kft=new _N(c$t,r4n),Dft=new _N(kDt,xwn(1)),Kft=new _N(TDt,(qx(),!0)),Aft=new CN(50),Oft=new _N(W$t,Aft),Mft=O$t,Lft=sDt,yft=new _N(p$t,!1),Ift=V$t,Pft=H$t,Cft=q$t,Sft=_$t,Eft=K$t,Nft=bDt,oOn(),jft=sft,Bft=wft,Tft=uft,xft=fft,Rft=bft,Gft=HDt,Xft=XDt,Uft=BDt,Hft=_Dt,Iwn(),new _N(UDt,qft=fKt)}function aGn(n,t){var e;switch(Min(n)){case 6:return RA(t);case 7:return FA(t);case 8:return KA(t);case 3:return Array.isArray(t)&&!((e=Min(t))>=14&&e<=16);case 11:return null!=t&&typeof t===mZn;case 12:return null!=t&&(typeof t===wZn||typeof t==mZn);case 0:return Eyn(t,n.__elementTypeId$);case 2:return NV(t)&&!(t.Tm===j);case 1:return NV(t)&&!(t.Tm===j)||Eyn(t,n.__elementTypeId$);default:return!0}}function oGn(n,t){var i,r,c,a;return r=e.Math.min(e.Math.abs(n.c-(t.c+t.b)),e.Math.abs(n.c+n.b-t.c)),a=e.Math.min(e.Math.abs(n.d-(t.d+t.a)),e.Math.abs(n.d+n.a-t.d)),(i=e.Math.abs(n.c+n.b/2-(t.c+t.b/2)))>n.b/2+t.b/2||(c=e.Math.abs(n.d+n.a/2-(t.d+t.a/2)))>n.a/2+t.a/2?1:0==i&&0==c?0:0==i?a/c+1:0==c?r/i+1:e.Math.min(r/i,a/c)+1}function uGn(n,t){var e,i,r,c,a,o,u;for(c=0,o=0,u=0,r=new Ww(n.f.e);r.a<r.c.c.length;)t!=(i=uG(N3(r),153))&&(c+=a=n.i[t.a][i.a],(e=atn(t.d,i.d))>0&&n.d!=(Jen(),plt)&&(o+=a*(i.d.a+n.a[t.a][i.a]*(t.d.a-i.d.a)/e)),e>0&&n.d!=(Jen(),dlt)&&(u+=a*(i.d.b+n.a[t.a][i.a]*(t.d.b-i.d.b)/e)));switch(n.d.g){case 1:return new MO(o/c,t.d.b);case 2:return new MO(t.d.a,u/c);default:return new MO(o/c,u/c)}}function sGn(n){var t,e,i,r,c;for(kD(c=new R7((!n.a&&(n.a=new MD(eFt,n,5)),n.a).i+2),new MO(n.j,n.k)),kS(new fX(null,(!n.a&&(n.a=new MD(eFt,n,5)),new h3(n.a,16))),new Vp(c)),kD(c,new MO(n.b,n.c)),t=1;t<c.c.length-1;)u3(t-1,c.c.length),e=uG(c.c[t-1],8),u3(t,c.c.length),i=uG(c.c[t],8),u3(t+1,c.c.length),r=uG(c.c[t+1],8),e.a==i.a&&i.a==r.a||e.b==i.b&&i.b==r.b?i7(c,t):++t;return c}function hGn(n,t){var e,i,r,c;if(Cln(),c=uG(oIn(n.i,(jYn(),JMt)),101),0!=n.j.g-t.j.g||c!=($Pn(),rRt)&&c!=aRt&&c!=cRt)return 0;if(c==($Pn(),rRt)&&(e=uG(oIn(n,YMt),17),i=uG(oIn(t,YMt),17),e&&i&&0!=(r=e.a-i.a)))return r;switch(n.j.g){case 1:return ugn(n.n.a,t.n.a);case 2:return ugn(n.n.b,t.n.b);case 3:return ugn(t.n.a,n.n.a);case 4:return ugn(t.n.b,n.n.b);default:throw hv(new kM(n6n))}}function fGn(n,t){var e,i,r,c,a,o,u;for(e=Tx(NS(AS(LS(new lk,t),new qZ(t.e)),cdt),n.a),0==t.j.c.length||een(uG(zq(t.j,0),60).a,e),u=new nv,vJ(n.e,e,u),a=new ek,o=new ek,c=new Ww(t.k);c.a<c.c.c.length;)FV(a,(r=uG(N3(c),18)).c),FV(o,r.d);(i=a.a.gc()-o.a.gc())<0?(hfn(u,!0,(xdn(),JDt)),hfn(u,!1,YDt)):i>0&&(hfn(u,!1,(xdn(),JDt)),hfn(u,!0,YDt)),Prn(t.g,new UC(n,e)),vJ(n.g,t,e)}function lGn(){var n;for(lGn=E,pot=Uhn(cT(YHt,1),W1n,28,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),mot=Inn(YHt,W1n,28,37,15,1),vot=Uhn(cT(YHt,1),W1n,28,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),kot=Inn(nUt,E0n,28,37,14,1),n=2;n<=36;n++)mot[n]=t0(e.Math.pow(n,pot[n])),kot[n]=bSn(YZn,mot[n])}function bGn(n){var t;if(1!=(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)throw hv(new vM(Ptt+(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i));return t=new Uk,Shn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84))&&Qon(t,pYn(n,Shn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)),!1)),Shn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))&&Qon(t,pYn(n,Shn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84)),!0)),t}function wGn(n,t){var e,i,r;for(r=!1,i=new Fz(ix((t.d?n.a.c==(b0(),fSt)?qgn(t.b):Xgn(t.b):n.a.c==(b0(),hSt)?qgn(t.b):Xgn(t.b)).a.Kc(),new h));hDn(i);)if(e=uG(N9(i),18),(oM(n.a.f[n.a.g[t.b.p].p])||v9(e)||e.c.i.c!=e.d.i.c)&&!oM(n.a.n[n.a.g[t.b.p].p])&&!oM(n.a.n[n.a.g[t.b.p].p])&&(r=!0,cS(n.b,n.a.g[vTn(e,t.b).p])))return t.c=!0,t.a=e,t;return t.c=r,t.a=null,t}function dGn(n,t,e){var i,r,c,a,o,u,s;if(0==(i=e.gc()))return!1;if(n.Pj())if(u=n.Qj(),nmn(n,t,e),a=1==i?n.Ij(3,null,e.Kc().Pb(),t,u):n.Ij(5,null,e,t,u),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r<c;++r)s=n.xj(r),o=n.Nj(s,o);o?(o.nj(a),o.oj()):n.Jj(a)}else n.Jj(a);else if(nmn(n,t,e),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r<c;++r)o=n.Nj(n.xj(r),o);o&&o.oj()}return!0}function gGn(n,t,e){var i,r,c,a;return n.Pj()?(r=null,c=n.Qj(),i=n.Ij(1,a=n.Dj(t,n.Zi(t,e)),e,t,c),n.Mj()&&!(n.Yi()&&a?udn(a,e):xA(a)===xA(e))?(a&&(r=n.Oj(a,r)),(r=n.Nj(e,r))?(r.nj(i),r.oj()):n.Jj(i)):r?(r.nj(i),r.oj()):n.Jj(i),a):(a=n.Dj(t,n.Zi(t,e)),n.Mj()&&!(n.Yi()&&a?udn(a,e):xA(a)===xA(e))&&(r=null,a&&(r=n.Oj(a,null)),(r=n.Nj(e,r))&&r.oj()),a)}function pGn(n,t){var i,r,c,a,o,u,s,h;if(n.e=t,n.f=uG(oIn(t,(mon(),Qft)),234),LCn(t),n.d=e.Math.max(16*t.e.c.length+t.c.c.length,256),!oM(gK(oIn(t,(cGn(),Mft)))))for(h=n.e.e.c.length,u=new Ww(t.e);u.a<u.c.c.length;)(s=uG(N3(u),153).d).a=BX(n.f)*h,s.b=BX(n.f)*h;for(i=t.b,a=new Ww(t.c);a.a<a.c.c.length;)if(c=uG(N3(a),289),(r=uG(oIn(c,Rft),17).a)>0){for(o=0;o<r;o++)kD(i,new $W(c));CNn(c)}}function mGn(n,t,e,i){var r,c,a,o,u,s,h,f,l;if(f=new QW(n.Zg()),nrn(t,Bet,f),e&&!n.Xg().a.dc())for(nrn(t,"logs",s=new Ib),o=0,l=new Gw(n.Xg().b.Kc());l.b.Ob();)h=new QW(mK(l.b.Pb())),uin(s,o),W5(s,o,h),++o;if(i&&nrn(t,"executionTime",new Pb(n.Wg())),!n.Yg().a.dc())for(a=new Ib,nrn(t,pet,a),o=0,c=new Gw(n.Yg().b.Kc());c.b.Ob();)r=uG(c.b.Pb(),871),u=new _y,uin(a,o),W5(a,o,u),mGn(r,u,e,i),++o}function vGn(){vGn=E,SP(),qHt=new Df,Uhn(cT(Y_t,2),zZn,381,0,[Uhn(cT(Y_t,1),uat,600,0,[new dE(Act)])]),Uhn(cT(Y_t,2),zZn,381,0,[Uhn(cT(Y_t,1),uat,600,0,[new dE(Lct)])]),Uhn(cT(Y_t,2),zZn,381,0,[Uhn(cT(Y_t,1),uat,600,0,[new dE(Nct)]),Uhn(cT(Y_t,1),uat,600,0,[new dE(Lct)])]),new PN("-1"),Uhn(cT(Y_t,2),zZn,381,0,[Uhn(cT(Y_t,1),uat,600,0,[new dE("\\c+")])]),new PN("0"),new PN("0"),new PN("1"),new PN("0"),new PN(Uct)}function kGn(n,t){var e,i,r,c,a,o,u,s;for(t.Ug("Hypernodes processing",1),i=new Ww(n.b);i.a<i.c.c.length;)for(a=new Ww(uG(N3(i),30).a);a.a<a.c.c.length;)if(oM(gK(oIn(c=uG(N3(a),10),(jYn(),uMt))))&&c.j.c.length<=2){for(s=0,u=0,e=0,r=0,o=new Ww(c.j);o.a<o.c.c.length;)switch(uG(N3(o),12).j.g){case 1:++s;break;case 2:++u;break;case 3:++e;break;case 4:++r}0==s&&0==e&&NJn(n,c,r<=u)}t.Vg()}function yGn(n,t,e,i,r){var c,a,o,u,s,h,f;for(a=new Ww(t);a.a<a.c.c.length;){if(u=(c=uG(N3(a),18)).c,e.a._b(u))l0(),s=USt;else{if(!i.a._b(u))throw hv(new vM("Source port must be in one of the port sets."));l0(),s=GSt}if(h=c.d,e.a._b(h))l0(),f=USt;else{if(!i.a._b(h))throw hv(new vM("Target port must be in one of the port sets."));l0(),f=GSt}o=new UAn(c,s,f),vJ(n.b,c,o),mv(r.c,o)}}function MGn(n){var t,e;return n.c&&n.c.Vh()&&(e=uG(n.c,54),n.c=uG(mwn(n,e),142),n.c!=e&&(0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,2,e,n.c)),F$(n.Cb,411)?n.Db>>16==-15&&n.Cb.Yh()&&Cen(new btn(n.Cb,9,13,e,n.c,Hyn(Aen(uG(n.Cb,62)),n))):F$(n.Cb,90)&&n.Db>>16==-23&&n.Cb.Yh()&&(F$(t=n.c,90)||(YYn(),t=x_t),F$(e,90)||(YYn(),e=x_t),Cen(new btn(n.Cb,9,10,e,t,Hyn(z5(uG(n.Cb,29)),n)))))),n.c}function TGn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug("Hyperedge merging",1),CDn(n,t),o=new N4(t.b,0);o.b<o.d.gc();)if(MK(o.b<o.d.gc()),0!=(s=uG(o.d.Xb(o.c=o.b++),30).a).c.length)for(i=null,r=null,c=null,a=null,u=0;u<s.c.length;u++)u3(u,s.c.length),(r=(i=uG(s.c[u],10)).k)==(zIn(),wbt)&&a==wbt&&(h=jXn(i,c)).a&&(QFn(i,c,h.b,h.c),u3(u,s.c.length),nE(s.c,u,1),--u,i=c,r=a),c=i,a=r;e.Vg()}function jGn(n,t,e){var i,r,c,a,o,u,s;if(t==e)return!0;if(t=uDn(n,t),e=uDn(n,e),i=PMn(t)){if((u=PMn(e))!=i)return!!u&&(a=i.mk())==u.mk()&&null!=a;if(!t.d&&(t.d=new MD(g_t,t,1)),r=(c=t.d).i,!e.d&&(e.d=new MD(g_t,e,1)),r==(s=e.d).i)for(o=0;o<r;++o)if(!jGn(n,uG(zrn(c,o),89),uG(zrn(s,o),89)))return!1;return!0}return t.e==e.e}function EGn(n,t,e,i){var r,c,a,o,u,s,h,f;if(EFn(n.e,t)){for(f=VKn(n.e.Dh(),t),c=uG(n.g,124),h=null,u=-1,o=-1,r=0,s=0;s<n.i;++s)a=c[s],f.am(a.Lk())&&(r==e&&(u=s),r==i&&(o=s,h=a.md()),++r);if(-1==u)throw hv(new dM(zet+e+Vet+r));if(-1==o)throw hv(new dM(Wet+i+Vet+r));return zdn(n,u,o),uN(n.e)&&Yv(n,VZ(n,7,t,xwn(i),h,e,!0)),h}throw hv(new vM("The feature must be many-valued to support move"))}function SGn(n,t,e,i){var r,c,a,o,u;switch((u=new eN(t.n)).a+=t.o.a/2,u.b+=t.o.b/2,o=uM(pK(oIn(t,(jYn(),QMt)))),c=n.f,a=n.d,r=n.c,uG(oIn(t,(GYn(),Fpt)),64).g){case 1:u.a+=a.b+r.a-e/2,u.b=-i-o,t.n.b=-(a.d+o+r.b);break;case 2:u.a=c.a+a.b+a.c+o,u.b+=a.d+r.b-i/2,t.n.a=c.a+a.c+o-r.a;break;case 3:u.a+=a.b+r.a-e/2,u.b=c.b+a.d+a.a+o,t.n.b=c.b+a.a+o-r.b;break;case 4:u.a=-e-o,u.b+=a.d+r.b-i/2,t.n.a=-(a.b+o+r.a)}return u}function PGn(n){var t,e,i,r,c,a;return zsn(i=new Dan,n),xA(oIn(i,(jYn(),Byt)))===xA((xdn(),ZDt))&&kfn(i,Byt,pgn(i)),null==oIn(i,(K7(),jNt))&&(a=uG(mIn(n),167),kfn(i,jNt,XA(a.of(jNt)))),kfn(i,(GYn(),rmt),n),kfn(i,Hpt,new nB(t=uG(Mj(bpt),9),uG(MF(t,t.length),9),0)),r=QWn((R0(n)&&(vP(),new Vy(R0(n))),vP(),new Wx(R0(n)?new Vy(R0(n)):null,n)),YDt),c=uG(oIn(i,_Mt),107),p0(e=i.d,c),p0(e,r),i}function CGn(n,t,e){var i,r;i=t.c.i,r=e.d.i,i.k==(zIn(),wbt)?(kfn(n,(GYn(),Zpt),uG(oIn(i,Zpt),12)),kfn(n,nmt,uG(oIn(i,nmt),12)),kfn(n,Ypt,gK(oIn(i,Ypt)))):i.k==bbt?(kfn(n,(GYn(),Zpt),uG(oIn(i,Zpt),12)),kfn(n,nmt,uG(oIn(i,nmt),12)),kfn(n,Ypt,(qx(),!0))):r.k==bbt?(kfn(n,(GYn(),Zpt),uG(oIn(r,Zpt),12)),kfn(n,nmt,uG(oIn(r,nmt),12)),kfn(n,Ypt,(qx(),!0))):(kfn(n,(GYn(),Zpt),t.c),kfn(n,nmt,e.d))}function IGn(n){var t,e,i,r,c,a,o;for(n.o=new ND,i=new lS,a=new Ww(n.e.a);a.a<a.c.c.length;)1==Ebn(c=uG(N3(a),125)).c.length&&s8(i,c,i.c.b,i.c);for(;0!=i.b;)0!=Ebn(c=uG(0==i.b?null:(MK(0!=i.b),Lrn(i,i.a.a)),125)).c.length&&(t=uG(zq(Ebn(c),0),218),e=c.g.a.c.length>0,o=hpn(t,c),Px(e?o.b:o.g,t),1==Ebn(o).c.length&&s8(i,o,i.c.b,i.c),r=new WO(c,t),A6(n.o,r),men(n.e.a,c))}function OGn(n,t){var i,r,c,a;return r=e.Math.abs(AV(n.b).a-AV(t.b).a),a=e.Math.abs(AV(n.b).b-AV(t.b).b),i=1,c=1,r>n.b.b/2+t.b.b/2&&(i=1-e.Math.min(e.Math.abs(n.b.c-(t.b.c+t.b.b)),e.Math.abs(n.b.c+n.b.b-t.b.c))/r),a>n.b.a/2+t.b.a/2&&(c=1-e.Math.min(e.Math.abs(n.b.d-(t.b.d+t.b.a)),e.Math.abs(n.b.d+n.b.a-t.b.d))/a),(1-e.Math.min(i,c))*e.Math.sqrt(r*r+a*a)}function AGn(n){var t,e,i;for(wQn(n,n.e,n.f,(l0(),USt),!0,n.c,n.i),wQn(n,n.e,n.f,USt,!1,n.c,n.i),wQn(n,n.e,n.f,GSt,!0,n.c,n.i),wQn(n,n.e,n.f,GSt,!1,n.c,n.i),yGn(n,n.c,n.e,n.f,n.i),e=new N4(n.i,0);e.b<e.d.gc();)for(MK(e.b<e.d.gc()),t=uG(e.d.Xb(e.c=e.b++),131),i=new N4(n.i,e.b);i.b<i.d.gc();)MK(i.b<i.d.gc()),nVn(t,uG(i.d.Xb(i.c=i.b++),131));XJn(n.i,uG(oIn(n.d,(GYn(),dmt)),234)),aWn(n.i)}function LGn(n,t){var e,i;if(null!=t)if(i=_Tn(n)){if(0==(1&i.i))return TP(),!(e=uG(cQ(_Ft,i),57))||e.fk(t);if(i==ZHt)return KA(t);if(i==YHt)return F$(t,17);if(i==iUt)return F$(t,161);if(i==tUt)return F$(t,222);if(i==JHt)return F$(t,180);if(i==eUt)return FA(t);if(i==rUt)return F$(t,191);if(i==nUt)return F$(t,168)}else if(F$(t,58))return n.dl(uG(t,58));return!1}function NGn(){var n,t,e,i,r,c,a,o,u;for(NGn=E,dHt=Inn(tUt,ret,28,255,15,1),gHt=Inn(JHt,N1n,28,64,15,1),t=0;t<255;t++)dHt[t]=-1;for(e=90;e>=65;e--)dHt[e]=e-65<<24>>24;for(i=122;i>=97;i--)dHt[i]=i-97+26<<24>>24;for(r=57;r>=48;r--)dHt[r]=r-48+52<<24>>24;for(dHt[43]=62,dHt[47]=63,c=0;c<=25;c++)gHt[c]=65+c&D1n;for(a=26,u=0;a<=51;++a,u++)gHt[a]=97+u&D1n;for(n=52,o=0;n<=61;++n,o++)gHt[n]=48+o&D1n;gHt[62]=43,gHt[63]=47}function $Gn(n,t){var i,r,c,a,o,u;return(c=nun(n))==(u=nun(t))?n.e==t.e&&n.a<54&&t.a<54?n.f<t.f?-1:n.f>t.f?1:0:(r=n.e-t.e,(i=(n.d>0?n.d:e.Math.floor((n.a-1)*A0n)+1)-(t.d>0?t.d:e.Math.floor((t.a-1)*A0n)+1))>r+1?c:i<r-1?-c:(!n.c&&(n.c=j2(Bsn(n.f))),a=n.c,!t.c&&(t.c=j2(Bsn(t.f))),o=t.c,r<0?a=j5(a,_qn(-r)):r>0&&(o=j5(o,_qn(r))),Pvn(a,o))):c<u?-1:1}function DGn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug(W3n,1),n.vf(t),c=0;n.xf(c)&&!e.$g();){for(n.wf(),h=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[t.e,t.d,t.b])));hDn(h);)for(u=uG(N9(h),309),o=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[t.e,t.d,t.b])));hDn(o);)(a=uG(N9(o),309))!=u&&(r=n.uf(a,u))&&JF(u.c,r);for(s=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[t.e,t.d,t.b])));hDn(s);)DOn(i=(u=uG(N9(s),309)).c,-n.d,-n.d,n.d,n.d),JF(u.d,i),i.a=0,i.b=0;++c}e.Vg()}function xGn(n,t){var i,r,c,a,o,u,s,h,f,l,b;if(n.dc())return new sj;for(s=0,f=0,r=n.Kc();r.Ob();)c=uG(r.Pb(),36).f,s=e.Math.max(s,c.a),f+=c.a*c.b;for(s=e.Math.max(s,e.Math.sqrt(f)*uM(pK(oIn(uG(n.Kc().Pb(),36),(jYn(),dyt))))),l=0,b=0,u=0,i=t,o=n.Kc();o.Ob();)l+(h=(a=uG(o.Pb(),36)).f).a>s&&(l=0,b+=u+t,u=0),tHn(a,l,b),i=e.Math.max(i,l+h.a),u=e.Math.max(u,h.b),l+=h.a+t;return new MO(i+t,b+u+t)}function RGn(n,t){var e,i,r,c,a,o,u;if(!h0(n))throw hv(new kM(Stt));if(c=(i=h0(n)).g,r=i.f,c<=0&&r<=0)return KQn(),FRt;switch(o=n.i,u=n.j,t.g){case 2:case 1:if(o<0)return KQn(),_Rt;if(o+n.g>c)return KQn(),kRt;break;case 4:case 3:if(u<0)return KQn(),yRt;if(u+n.f>r)return KQn(),KRt}return(a=(o+n.g/2)/c)+(e=(u+n.f/2)/r)<=1&&a-e<=0?(KQn(),_Rt):a+e>=1&&a-e>=0?(KQn(),kRt):e<.5?(KQn(),yRt):(KQn(),KRt)}function KGn(n,t,e,i,r){var c,a;if(c=Lgn(E3(t[0],L0n),E3(i[0],L0n)),n[0]=pz(c),c=$z(c,32),e>=r){for(a=1;a<r;a++)c=Lgn(c,Lgn(E3(t[a],L0n),E3(i[a],L0n))),n[a]=pz(c),c=$z(c,32);for(;a<e;a++)c=Lgn(c,E3(t[a],L0n)),n[a]=pz(c),c=$z(c,32)}else{for(a=1;a<e;a++)c=Lgn(c,Lgn(E3(t[a],L0n),E3(i[a],L0n))),n[a]=pz(c),c=$z(c,32);for(;a<r;a++)c=Lgn(c,E3(i[a],L0n)),n[a]=pz(c),c=$z(c,32)}0!=dwn(c,0)&&(n[a]=pz(c))}function FGn(n){var t,e,i,r,c,a;if(QYn(),4!=n.e&&5!=n.e)throw hv(new vM("Token#complementRanges(): must be RANGE: "+n.e));for(pxn(c=n),szn(c),i=c.b.length+2,0==c.b[0]&&(i-=2),(e=c.b[c.b.length-1])==zct&&(i-=2),(r=new K3(4)).b=Inn(YHt,W1n,28,i,15,1),a=0,c.b[0]>0&&(r.b[a++]=0,r.b[a++]=c.b[0]-1),t=1;t<c.b.length-2;t+=2)r.b[a++]=c.b[t]+1,r.b[a++]=c.b[t+1]-1;return e!=zct&&(r.b[a++]=e+1,r.b[a]=zct),r.a=!0,r}function _Gn(n,t){var e,i,r,c,a,o,u,s,h;for(t.Ug("Layer constraint edge reversal",1),a=new Ww(n.b);a.a<a.c.c.length;){for(c=uG(N3(a),30),h=-1,e=new Zm,s=D4(c.a),r=0;r<s.length;r++)i=uG(oIn(s[r],(GYn(),Xpt)),311),-1==h?i!=(Zen(),ppt)&&(h=r):i==(Zen(),ppt)&&(a2(s[r],null),$jn(s[r],h++,c)),i==(Zen(),dpt)&&mv(e.c,s[r]);for(u=new Ww(e);u.a<u.c.c.length;)a2(o=uG(N3(u),10),null),a2(o,c)}t.Vg()}function BGn(n,t,e){var i,r,c,a,o,u,s,h;if(0==(i=e.gc()))return!1;if(n.Pj())if(s=n.Qj(),PCn(n,t,e),a=1==i?n.Ij(3,null,e.Kc().Pb(),t,s):n.Ij(5,null,e,t,s),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r<c;++r)h=n.g[r],o=n.Nj(h,o),o=n.Uj(h,o);o?(o.nj(a),o.oj()):n.Jj(a)}else n.Jj(a);else if(PCn(n,t,e),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r<c;++r)u=n.g[r],o=n.Nj(u,o);o&&o.oj()}return!0}function HGn(n,t){var e,i,r,c,a,o,u,s;for(t.Ug("Hierarchical port dummy size processing",1),o=new Zm,s=new Zm,e=2*uM(pK(oIn(n,(jYn(),gTt)))),r=new Ww(n.b);r.a<r.c.c.length;){for(i=uG(N3(r),30),o.c.length=0,s.c.length=0,a=new Ww(i.a);a.a<a.c.c.length;)(c=uG(N3(a),10)).k==(zIn(),lbt)&&((u=uG(oIn(c,(GYn(),Fpt)),64))==(KQn(),yRt)?mv(o.c,c):u==KRt&&mv(s.c,c));x$n(o,!0,e),x$n(s,!1,e)}t.Vg()}function UGn(n,t,e,i){var r,c,a,o,u;for(a=new Ww(n.k);a.a<a.c.c.length;)r=uG(N3(a),132),i&&r.c!=(_7(),$St)||(u=r.b).g<0&&r.d>0&&(Qb(u,u.d-r.d),r.c==(_7(),$St)&&Vb(u,u.a-r.d),u.d<=0&&u.i>0&&s8(t,u,t.c.b,t.c));for(c=new Ww(n.f);c.a<c.c.c.length;)r=uG(N3(c),132),i&&r.c!=(_7(),$St)||(o=r.a).g<0&&r.d>0&&(Jb(o,o.i-r.d),r.c==(_7(),$St)&&Wb(o,o.b-r.d),o.i<=0&&o.d>0&&s8(e,o,e.c.b,e.c))}function GGn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b;for(hZ(),f$(n,new Bu),a=oG(n),b=new Zm,l=new Zm,o=null,u=0;0!=a.b;)c=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),163),!o||EX(o)*jX(o)/2<EX(c)*jX(c)?(o=c,mv(b.c,c)):(u+=EX(c)*jX(c),mv(l.c,c),l.c.length>1&&(u>EX(o)*jX(o)/2||0==a.b)&&(f=new Jrn(l),h=EX(o)/jX(o),s=KJn(f,t,new Dk,e,i,r,h),JF(dL(f.e),s),o=f,mv(b.c,f),u=0,l.c.length=0));return Ohn(b,l),b}function qGn(n,t,e,i,r){var c,a,o,u,s,h,f;if(bS(),aW(n,"src"),aW(e,"dest"),f=Tbn(n),u=Tbn(e),yG(0!=(4&f.i),"srcType is not an array"),yG(0!=(4&u.i),"destType is not an array"),h=f.c,a=u.c,yG(0!=(1&h.i)?h==a:0==(1&a.i),"Array types don't match"),$fn(n,t,e,i,r),0==(1&h.i)&&f!=u)if(s=Kcn(n),c=Kcn(e),xA(n)===xA(e)&&t<i)for(t+=r,o=i+r;o-- >i;)uQ(c,o,s[--t]);else for(o=i+r;i<o;)uQ(c,i++,s[t++]);else b$n(n,t,e,i,r,!0)}function XGn(n,t){var e,i,r,c,a,o,u,s,h;t.Ug("Box layout",2),r=sM(pK(zDn(n,(lIn(),zNt)))),c=uG(zDn(n,GNt),107),e=oM(gK(zDn(n,FNt))),i=oM(gK(zDn(n,_Nt))),0===uG(zDn(n,RNt),320).g?(h=new Z_((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),hZ(),f$(h,new qp(i)),a=h,o=xAn(n),(null==(u=pK(zDn(n,xNt)))||(tJ(u),u<=0))&&(u=1.3),ZQn(n,(s=sJn(a,r,c,o.a,o.b,e,(tJ(u),u))).a,s.b,!1,!0)):Kzn(n,r,c,e),t.Vg()}function zGn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b;for(f=iPn(n,e),o=0;o<t;o++){for(pF(r,e),l=new Zm,MK(i.b<i.d.gc()),b=uG(i.d.Xb(i.c=i.b++),418),s=f+o;s<n.b;s++)a=b,MK(i.b<i.d.gc()),kD(l,new pFn(a,b=uG(i.d.Xb(i.c=i.b++),418),e));for(h=f+o;h<n.b;h++)MK(i.b>0),i.a.Xb(i.c=--i.b),h>f+o&&LQ(i);for(c=new Ww(l);c.a<c.c.c.length;)pF(i,uG(N3(c),418));if(o<t-1)for(u=f+o;u<n.b;u++)MK(i.b>0),i.a.Xb(i.c=--i.b)}}function VGn(){var n,t,e,i,r,c;if(QYn(),WHt)return WHt;for(TXn(n=new K3(4),kJn(iat,!0)),lWn(n,kJn("M",!0)),lWn(n,kJn("C",!0)),c=new K3(4),i=0;i<11;i++)HFn(c,i,i);return TXn(t=new K3(4),kJn("M",!0)),HFn(t,4448,4607),HFn(t,65438,65439),kzn(r=new QN(2),n),kzn(r,OHt),(e=new QN(2)).Jm(CX(c,kJn("L",!0))),e.Jm(t),e=new n8(3,e),e=new eW(r,e),WHt=e}function WGn(n,t){var e,i,r,c,a,o,u,s;for(e=new RegExp(t,"g"),u=Inn($ot,zZn,2,0,6,1),i=0,s=n,c=null;;){if(null==(o=e.exec(s))||""==s){u[i]=s;break}a=o.index,u[i]=(Knn(0,a,s.length),s.substr(0,a)),s=r1(s,a+o[0].length,s.length),e.lastIndex=0,c==s&&(u[i]=(Knn(0,1,s.length),s.substr(0,1)),s3(1,s.length+1),s=s.substr(1)),c=s,++i}if(n.length>0){for(r=u.length;r>0&&""==u[r-1];)--r;r<u.length&&(u.length=r)}return u}function QGn(){QGn=E,mCt=new CN(20),pCt=new _N((XYn(),W$t),mCt),ECt=new _N(DDt,20),jCt=new _N(IDt,3),eCt=new _N(c$t,r4n),yCt=new _N(vDt,xwn(1)),TCt=new _N(TDt,(qx(),!0)),rCt=w$t,xdn(),cCt=new _N(d$t,aCt=ZDt),sCt=O$t,hCt=A$t,lCt=_$t,bCt=H$t,wCt=U$t,dCt=q$t,fCt=K$t,gCt=V$t,vCt=bDt,eDn(),LCt=nCt,MCt=JPt,CCt=HDt,OCt=XDt,PCt=BDt,SCt=_Dt,Iwn(),new _N(UDt,ICt=fKt),kCt=QPt,uCt=VPt,ACt=ZPt,iCt=XPt,oCt=zPt}function JGn(n){var t,e;if(!hsn(t=mK(zDn(n,(XYn(),e$t))),n)&&!vnn(n,yDt)&&(0!=(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i||oM(gK(zDn(n,C$t))))){if(null!=t&&0!=KAn(t).length)throw XWn(n,e=JA(JA(new lx("Layout algorithm '"),t),"' not found for ")),hv(new jM(e.a));if(!hsn(S0n,n))throw XWn(n,e=JA(JA(new lx("Unable to load default layout algorithm "),S0n)," for unconfigured node ")),hv(new jM(e.a))}}function YGn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w;if(i=n.i,t=n.n,0==n.b)for(w=i.c+t.b,b=i.b-t.b-t.c,s=0,f=(o=n.a).length;s<f;++s)qX(c=o[s],w,b);else r=LMn(n,!1),qX(n.a[0],i.c+t.b,r[0]),qX(n.a[2],i.c+i.b-t.c-r[2],r[2]),l=i.b-t.b-t.c,r[0]>0&&(l-=r[0]+n.c,r[0]+=n.c),r[2]>0&&(l-=r[2]+n.c),r[1]=e.Math.max(r[1],l),qX(n.a[1],i.c+t.b+r[0]-(r[1]-l)/2,r[1]);for(u=0,h=(a=n.a).length;u<h;++u)F$(c=a[u],336)&&uG(c,336).lf()}function ZGn(n){var t,e,i,r,c,a,o,u,s,h,f;for((f=new ra).d=0,a=new Ww(n.b);a.a<a.c.c.length;)c=uG(N3(a),30),f.d+=c.a.c.length;for(i=0,r=0,f.a=Inn(YHt,W1n,28,n.b.c.length,15,1),s=0,h=0,f.e=Inn(YHt,W1n,28,f.d,15,1),e=new Ww(n.b);e.a<e.c.c.length;)for((t=uG(N3(e),30)).p=i++,f.a[t.p]=r++,h=0,u=new Ww(t.a);u.a<u.c.c.length;)(o=uG(N3(u),10)).p=s++,f.e[o.p]=h++;return f.c=new gp(f),f.b=iR(f.d),OUn(f,n),f.f=iR(f.d),AUn(f,n),f}function nqn(n,t){var i,r,c;for(c=uG(zq(n.n,n.n.c.length-1),209).d,n.p=e.Math.min(n.p,t.g),n.r=e.Math.max(n.r,c),n.g=e.Math.max(n.g,t.g+(1==n.b.c.length?0:n.i)),n.o=e.Math.min(n.o,t.f),n.e+=t.f+(1==n.b.c.length?0:n.i),n.f=e.Math.max(n.f,t.f),r=n.n.c.length>0?(n.n.c.length-1)*n.i:0,i=new Ww(n.n);i.a<i.c.c.length;)r+=uG(N3(i),209).a;n.d=r,n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),ijn(n.j)}function tqn(n,t){var e,i,r,c,a,o,u,s,h;if(null==(s=gK(oIn(t,(cGn(),Kft))))||(tJ(s),s)){for(h=Inn(ZHt,B2n,28,t.e.c.length,16,1),a=d$n(t),r=new lS,u=new Ww(t.e);u.a<u.c.c.length;)(e=Gxn(n,uG(N3(u),153),null,null,h,a))&&(zsn(e,t),s8(r,e,r.c.b,r.c));if(r.b>1)for(i=Fkn(r,0);i.b!=i.d.c;)for(c=0,o=new Ww((e=uG(I6(i),235)).e);o.a<o.c.c.length;)uG(N3(o),153).a=c++;return r}return n7(Uhn(cT(mft,1),U3n,235,0,[t]))}function eqn(n){var t,e,i,r,c;if(!n.g){if(c=new ys,null==(t=V_t).a.zc(n,t)){for(e=new DD(n1(n));e.e!=e.i.gc();)CW(c,eqn(uG(Zkn(e),29)));t.a.Bc(n),t.a.gc()}for(i=c.i,!n.s&&(n.s=new fV(o_t,n,21,17)),r=new DD(n.s);r.e!=r.i.gc();++i)hw(uG(Zkn(r),461),i);CW(c,(!n.s&&(n.s=new fV(o_t,n,21,17)),n.s)),lbn(c),n.g=new Afn(n,c),n.i=uG(c.g,254),null==n.i&&(n.i=Q_t),n.p=null,y9(n).b&=-5}return n.g}function iqn(n,t){var e,i,r,c,a,o,u,s,h;if((e=t.qi(n.a))&&null!=(u=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),"memberTypes")))){for(s=new Zm,a=0,o=(c=WGn(u,"\\w")).length;a<o;++a)F$(h=-1==(i=(r=c[a]).lastIndexOf("#"))?hK(n,t.jk(),r):0==i?gtn(n,null,(s3(1,r.length+1),r.substr(1))):gtn(n,(Knn(0,i,r.length),r.substr(0,i)),(s3(i+1,r.length+1),r.substr(i+1))),156)&&kD(s,uG(h,156));return s}return hZ(),hZ(),zot}function rqn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w;if(r=n.i,i=n.n,0==n.b)t=AMn(n,!1),XX(n.a[0],r.d+i.d,t[0]),XX(n.a[2],r.d+r.a-i.a-t[2],t[2]),l=r.a-i.d-i.a,t[0]>0&&(t[0]+=n.c,l-=t[0]),t[2]>0&&(l-=t[2]+n.c),t[1]=e.Math.max(t[1],l),XX(n.a[1],r.d+i.d+t[0]-(t[1]-l)/2,t[1]);else for(w=r.d+i.d,b=r.a-i.d-i.a,s=0,f=(o=n.a).length;s<f;++s)XX(c=o[s],w,b);for(u=0,h=(a=n.a).length;u<h;++u)F$(c=a[u],336)&&uG(c,336).mf()}function cqn(n){var t,e,i,r,c,a,o,u,s;for(s=Inn(YHt,W1n,28,n.b.c.length+1,15,1),u=new ek,i=0,c=new Ww(n.b);c.a<c.c.c.length;){for(r=uG(N3(c),30),s[i++]=u.a.gc(),o=new Ww(r.a);o.a<o.c.c.length;)for(e=new Fz(ix(Xgn(uG(N3(o),10)).a.Kc(),new h));hDn(e);)t=uG(N9(e),18),u.a.zc(t,u);for(a=new Ww(r.a);a.a<a.c.c.length;)for(e=new Fz(ix(qgn(uG(N3(a),10)).a.Kc(),new h));hDn(e);)t=uG(N9(e),18),u.a.Bc(t)}return s}function aqn(n,t,e,i){var r,c,a,o,u;if(u=VKn(n.e.Dh(),t),r=uG(n.g,124),PP(),uG(t,69).xk()){for(a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk())&&udn(c,e))return!0}else if(null!=e){for(o=0;o<n.i;++o)if(c=r[o],u.am(c.Lk())&&udn(e,c.md()))return!0;if(i)for(a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk())&&xA(e)===xA(fK(n,uG(c.md(),58))))return!0}else for(a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk())&&null==c.md())return!1;return!1}function oqn(n,t){var e,i,r,c,a,o;if((e=t.qi(n.a))&&null!=(o=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),_et))))switch(r=ax(o,$Cn(35)),i=t.qk(),-1==r?(a=jz(n,Hrn(i)),c=o):0==r?(a=null,s3(1,o.length+1),c=o.substr(1)):(Knn(0,r,o.length),a=o.substr(0,r),s3(r+1,o.length+1),c=o.substr(r+1)),sJ(Nen(n,t))){case 2:case 3:return Xfn(n,i,a,c);case 0:case 4:case 5:case 6:return zfn(n,i,a,c)}return null}function uqn(n,t,i,r){var c,a,o,u;for(u=i,o=new Ww(t.a);o.a<o.c.c.length;){if(a=uG(N3(o),225),c=uG(a.b,68),Fgn(n.b.c,c.b.c+c.b.b)<=0&&Fgn(c.b.c,n.b.c+n.b.b)<=0&&Fgn(n.b.d,c.b.d+c.b.a)<=0&&Fgn(c.b.d,n.b.d+n.b.a)<=0){if(0==Fgn(c.b.c,n.b.c+n.b.b)&&r.a<0||0==Fgn(c.b.c+c.b.b,n.b.c)&&r.a>0||0==Fgn(c.b.d,n.b.d+n.b.a)&&r.b<0||0==Fgn(c.b.d+c.b.a,n.b.d)&&r.b>0){u=0;break}}else u=e.Math.min(u,LLn(n,c,r));u=e.Math.min(u,uqn(n,a,u,r))}return u}function sqn(n,t){var e,i,r,c,a,o;if(n.b<2)throw hv(new vM("The vector chain must contain at least a source and a target point."));for(MK(0!=n.b),MN(t,(i=uG(n.a.a.c,8)).a,i.b),o=new Zx((!t.a&&(t.a=new MD(eFt,t,5)),t.a)),c=Fkn(n,1);c.a<n.b-1;)a=uG(I6(c),8),o.e!=o.i.gc()?e=uG(Zkn(o),377):(gj(),Smn(o,e=new ns)),mN(e,a.a,a.b);for(;o.e!=o.i.gc();)Zkn(o),$Sn(o);MK(0!=n.b),yN(t,(r=uG(n.c.b.c,8)).a,r.b)}function hqn(n,t,e,i){var r,c,a,o,u,s;if(s=VKn(n.e.Dh(),t),a=uG(n.g,124),EFn(n.e,t)){if(t.Si()&&(c=Dqn(n,t,i,F$(t,102)&&0!=(uG(t,19).Bb&P0n)))>=0&&c!=e)throw hv(new vM(Xet));for(r=0,u=0;u<n.i;++u)if(o=a[u],s.am(o.Lk())){if(r==e)return uG(Uyn(n,u,(PP(),uG(t,69).xk()?uG(i,76):R5(t,i))),76);++r}throw hv(new dM(Hit+e+Vet+r))}for(u=0;u<n.i;++u)if(o=a[u],s.am(o.Lk()))return PP(),uG(t,69).xk()?o:o.md();return null}function fqn(n,t){var e,i,r,c,a,o,u,s;for(e=0,i=new Ww((u3(0,n.c.length),uG(n.c[0],105)).g.b.j);i.a<i.c.c.length;)uG(N3(i),12).p=e++;for(t==(KQn(),yRt)?f$(n,new nc):f$(n,new tc),a=0,s=n.c.length-1;a<s;)u3(a,n.c.length),c=uG(n.c[a],105),u3(s,n.c.length),u=uG(n.c[s],105),r=t==yRt?c.c:c.a,o=t==yRt?u.a:u.c,hV(c,t,(qhn(),sdt),r),hV(u,t,udt,o),++a,--s;a==s&&hV((u3(a,n.c.length),uG(n.c[a],105)),t,(qhn(),odt),null)}function lqn(n,t,e,i){var r,c,a,o,u,s;for(a=new SVn(n,t,e),u=new N4(i,0),r=!1;u.b<u.d.gc();)MK(u.b<u.d.gc()),(o=uG(u.d.Xb(u.c=u.b++),239))==t||o==e?LQ(u):!r&&uM(oD(o.g,o.d[0]).a)>uM(oD(a.g,a.d[0]).a)?(MK(u.b>0),u.a.Xb(u.c=--u.b),pF(u,a),r=!0):o.e&&o.e.gc()>0&&(c=(!o.e&&(o.e=new Zm),o.e).Mc(t),s=(!o.e&&(o.e=new Zm),o.e).Mc(e),(c||s)&&((!o.e&&(o.e=new Zm),o.e).Fc(a),++a.c));r||mv(i.c,a)}function bqn(n,t,e){var i,r,c,a,o,u,s,h,f,l;return h=n.a.i+n.a.g/2,f=n.a.i+n.a.g/2,a=new MO(t.i+t.g/2,t.j+t.f/2),(u=uG(zDn(t,(XYn(),mDt)),8)).a=u.a+h,u.b=u.b+f,r=(a.b-u.b)/(a.a-u.a),i=a.b-r*a.a,o=new MO(e.i+e.g/2,e.j+e.f/2),(s=uG(zDn(e,mDt),8)).a=s.a+h,s.b=s.b+f,c=(o.b-s.b)/(o.a-s.a),l=(i-(o.b-c*o.a))/(c-r),!(u.a<l&&a.a<l||l<u.a&&l<a.a||s.a<l&&o.a<l||l<s.a&&l<o.a)}function wqn(n,t){var e,i,r,c,a,o;if(!(a=uG(cQ(n.c,t),190)))throw hv(new SM("Edge did not exist in input."));return i=jvn(a),!pE((!t.a&&(t.a=new fV(oFt,t,6,6)),t.a))&&(e=new DU(n,i,o=new Ib),NA((!t.a&&(t.a=new fV(oFt,t,6,6)),t.a),e),nrn(a,yet,o)),vnn(t,(XYn(),L$t))&&!(!(r=uG(zDn(t,L$t),75))||FQ(r))&&(z8(r,new gm(c=new Ib)),nrn(a,"junctionPoints",c)),ZG(a,"container",s0(t).k),null}function dqn(n,t,e,i){var r,c,a,o,u,s;if(!P6(t)){if((s=e.eh((F$(t,16)?uG(t,16).gc():x5(t.Kc()))/n.a|0)).Ug(V9n,1),u=new Ga,o=0,i==(xdn(),JDt)||i==YDt)for(a=t.Kc();a.Ob();)r=uG(a.Pb(),39),u=zcn(Uhn(cT(vat,1),EZn,20,0,[u,new Mp(r)])),o<r.f.a&&(o=r.f.a);else for(a=t.Kc();a.Ob();)r=uG(a.Pb(),39),u=zcn(Uhn(cT(vat,1),EZn,20,0,[u,new Mp(r)])),o<r.f.b&&(o=r.f.b);for(c=t.Kc();c.Ob();)kfn(r=uG(c.Pb(),39),(OQn(),NPt),o);s.Vg(),dqn(n,u,e,i)}}function gqn(n,t,e){var i,r,c,a,o,u;this.a=n,this.b=t,this.c=e,this.e=n7(Uhn(cT(But,1),EZn,177,0,[new ZP(n,t),new ZP(t,e),new ZP(e,n)])),this.f=n7(Uhn(cT(PNt,1),zZn,8,0,[n,t,e])),this.d=(i=YF(D$(this.b),this.a),r=YF(D$(this.c),this.a),c=YF(D$(this.c),this.b),a=i.a*(this.a.a+this.b.a)+i.b*(this.a.b+this.b.b),o=r.a*(this.a.a+this.c.a)+r.b*(this.a.b+this.c.b),u=2*(i.a*c.b-i.b*c.a),new MO((r.b*a-i.b*o)/u,(i.a*o-r.a*a)/u))}function pqn(n,t){var e,i,r,c,a,o;for(c=n.c,a=n.d,c2(n,null),u2(n,null),t&&oM(gK(oIn(a,(GYn(),Gpt))))?c2(n,zUn(a.i,(can(),Wjt),(KQn(),kRt))):c2(n,a),t&&oM(gK(oIn(c,(GYn(),hmt))))?u2(n,zUn(c.i,(can(),Vjt),(KQn(),_Rt))):u2(n,c),i=new Ww(n.b);i.a<i.c.c.length;)e=uG(N3(i),72),(r=uG(oIn(e,(jYn(),Xyt)),278))==(Zrn(),cxt)?kfn(e,Xyt,rxt):r==rxt&&kfn(e,Xyt,cxt);o=oM(gK(oIn(n,(GYn(),pmt)))),kfn(n,pmt,(qx(),!o)),n.a=fln(n.a)}function mqn(n,t){var e,i,r,c;return e=$kn(uG(oIn(t,(QGn(),cCt)),88)),0==n.b.b?null:(c=uG(l8(YJ(new fX(null,new h3(n.b,16)),new Ia),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),i=pK(yx(Wz(YJ((r=uG(l8(JJ(new fX(null,new h3(t.b,16)),new mp(c)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15)).Oc(),new vp(e)),(sZ(),sZ(),Yot)))),uG(yx(lln(JJ(r.Oc(),new UI(e,i)))),39))}function vqn(n,t){var i,r,c,a,o,u,s,h,f,l,b;i=jx(new sk,n.f),u=n.i[t.c.i.p],l=n.i[t.d.i.p],o=t.c,f=t.d,a=o.a.b,h=f.a.b,u.b||(a+=o.n.b),l.b||(h+=f.n.b),s=t0(e.Math.max(0,a-h)),c=t0(e.Math.max(0,h-a)),b=e.Math.max(1,uG(oIn(t,(jYn(),uTt)),17).a)*B5(t.c.i.k,t.d.i.k),r=new PI(RKn(xS(DS($S(RS(new uk,b),c),i),uG(cQ(n.k,t.c),125))),RKn(xS(DS($S(RS(new uk,b),s),i),uG(cQ(n.k,t.d),125)))),n.c[t.p]=r}function kqn(n,t,i){var r,c,a,o,u;for(r=0,a=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));a.e!=a.i.gc();)o="",0==(!(c=uG(Zkn(a),27)).n&&(c.n=new fV(lFt,c,1,7)),c.n).i||(o=uG(zrn((!c.n&&(c.n=new fV(lFt,c,1,7)),c.n),0),135).a),zsn(u=new E$(o),c),kfn(u,(mon(),Wft),c),u.a=r++,u.d.a=c.i+c.g/2,u.d.b=c.j+c.f/2,u.e.a=e.Math.max(c.g,1),u.e.b=e.Math.max(c.f,1),kD(t.e,u),VAn(i.f,c,u),uG(zDn(c,(cGn(),Lft)),101),$Pn()}function yqn(n,t){var e,i,r,c,a;t.Ug("Layer constraint postprocessing",1),0!=(a=n.b).c.length&&(u3(0,a.c.length),qHn(n,uG(a.c[0],30),uG(zq(a,a.c.length-1),30),e=new bQ(n),r=new bQ(n)),0==e.a.c.length||(o3(0,a.c.length),pC(a.c,0,e)),0==r.a.c.length||mv(a.c,r)),vR(n,(GYn(),Upt))&&(s_n(n,i=new bQ(n),c=new bQ(n)),0==i.a.c.length||(o3(0,a.c.length),pC(a.c,0,i)),0==c.a.c.length||mv(a.c,c)),t.Vg()}function Mqn(n){var t,e;switch(n){case 91:case 93:case 45:case 94:case 44:case 92:e="\\"+String.fromCharCode(n&D1n);break;case 12:e="\\f";break;case 10:e="\\n";break;case 13:e="\\r";break;case 9:e="\\t";break;case 27:e="\\e";break;default:e=n<32?"\\x"+r1(t="0"+(n>>>0).toString(16),t.length-2,t.length):n>=P0n?"\\v"+r1(t="0"+(n>>>0).toString(16),t.length-6,t.length):""+String.fromCharCode(n&D1n)}return e}function Tqn(n){var t,e,i;if(sN(uG(oIn(n,(jYn(),JMt)),101)))for(e=new Ww(n.j);e.a<e.c.c.length;)(t=uG(N3(e),12)).j==(KQn(),FRt)&&((i=uG(oIn(t,(GYn(),lmt)),10))?NLn(t,uG(oIn(i,Fpt),64)):t.e.c.length-t.g.c.length<0?NLn(t,kRt):NLn(t,_Rt));else{for(e=new Ww(n.j);e.a<e.c.c.length;)t=uG(N3(e),12),(i=uG(oIn(t,(GYn(),lmt)),10))?NLn(t,uG(oIn(i,Fpt),64)):t.e.c.length-t.g.c.length<0?NLn(t,(KQn(),kRt)):NLn(t,(KQn(),_Rt));kfn(n,JMt,($Pn(),oRt))}}function jqn(n){var t,e,i,r,c,a;for(this.e=new Zm,this.a=new Zm,e=n.b-1;e<3;e++)sR(n,0,uG(hyn(n,0),8));if(n.b<4)throw hv(new vM("At (least dimension + 1) control points are necessary!"));for(this.b=3,this.d=!0,this.c=!1,yxn(this,n.b+this.b-1),a=new Zm,c=new Ww(this.e),t=0;t<this.b-1;t++)kD(a,pK(N3(c)));for(r=Fkn(n,0);r.b!=r.d.c;)i=uG(I6(r),8),kD(a,pK(N3(c))),kD(this.a,new R1(i,a)),u3(0,a.c.length),a.c.splice(0,1)}function Eqn(n,t){var e,i,r,c,a,o,u;for(r=new Ww(n.b);r.a<r.c.c.length;)for(a=new Ww(uG(N3(r),30).a);a.a<a.c.c.length;)for((c=uG(N3(a),10)).k==(zIn(),bbt)&&(o=uG(N9(new Fz(ix(qgn(c).a.Kc(),new h))),18),u=uG(N9(new Fz(ix(Xgn(c).a.Kc(),new h))),18),Gqn(c,oM(gK(oIn(o,(GYn(),pmt))))&&oM(gK(oIn(u,pmt)))?ufn(t):t)),i=new Fz(ix(Xgn(c).a.Kc(),new h));hDn(i);)Nhn(e=uG(N9(i),18),oM(gK(oIn(e,(GYn(),pmt))))?ufn(t):t)}function Sqn(n,t,e,i,r){var c,a;if(e.f>=t.o&&e.f<=t.f||.5*t.a<=e.f&&1.5*t.a>=e.f){if((c=uG(zq(t.n,t.n.c.length-1),209)).e+c.d+e.g+r<=i&&(uG(zq(t.n,t.n.c.length-1),209).f-n.f+e.f<=n.b||1==n.a.c.length))return ipn(t,e),!0;if(t.s+e.g<=i&&(t.t+t.d+e.f+r<=n.b||1==n.a.c.length))return kD(t.b,e),a=uG(zq(t.n,t.n.c.length-1),209),kD(t.n,new c0(t.s,a.f+a.a+t.i,t.i)),zMn(uG(zq(t.n,t.n.c.length-1),209),e),nqn(t,e),!0}return!1}function Pqn(n,t,e){var i,r,c,a;return n.Pj()?(r=null,c=n.Qj(),i=n.Ij(1,a=iin(n,t,e),e,t,c),n.Mj()&&!(n.Yi()&&null!=a?udn(a,e):xA(a)===xA(e))?(null!=a&&(r=n.Oj(a,r)),r=n.Nj(e,r),n.Tj()&&(r=n.Wj(a,e,r)),r?(r.nj(i),r.oj()):n.Jj(i)):(n.Tj()&&(r=n.Wj(a,e,r)),r?(r.nj(i),r.oj()):n.Jj(i)),a):(a=iin(n,t,e),n.Mj()&&!(n.Yi()&&null!=a?udn(a,e):xA(a)===xA(e))&&(r=null,null!=a&&(r=n.Oj(a,null)),(r=n.Nj(e,r))&&r.oj()),a)}function Cqn(n,t){var e,i,r,c;if(t.Ug("Path-Like Graph Wrapping",1),0!=n.b.c.length)if(null==(r=new dDn(n)).i&&(r.i=aun(r,new pc)),e=uM(r.i)*r.f/(null==r.i&&(r.i=aun(r,new pc)),uM(r.i)),r.b>e)t.Vg();else{switch(uG(oIn(n,(jYn(),BTt)),351).g){case 2:c=new kc;break;case 0:c=new hc;break;default:c=new yc}if(i=c.og(n,r),!c.pg())switch(uG(oIn(n,zTt),352).g){case 2:i=KLn(r,i);break;case 1:i=pPn(r,i)}yzn(n,r,i),t.Vg()}else t.Vg()}function Iqn(n,t){var i,r,c,a,o,u,s;t%=24,n.q.getHours()!=t&&((i=new e.Date(n.q.getTime())).setDate(i.getDate()+1),(o=n.q.getTimezoneOffset()-i.getTimezoneOffset())>0&&(u=o/60|0,s=o%60,r=n.q.getDate(),n.q.getHours()+u>=24&&++r,c=new e.Date(n.q.getFullYear(),n.q.getMonth(),r,t+u,n.q.getMinutes()+s,n.q.getSeconds(),n.q.getMilliseconds()),n.q.setTime(c.getTime()))),a=n.q.getTime(),n.q.setTime(a+36e5),n.q.getHours()!=t&&n.q.setTime(a)}function Oqn(n,t){var e,i,r,c;if(a3(n.d,n.e),n.c.a.$b(),0!=uM(pK(oIn(t.j,(jYn(),yyt))))||0!=uM(pK(oIn(t.j,yyt))))for(e=B3n,xA(oIn(t.j,Syt))!==xA((yvn(),Fjt))&&kfn(t.j,(GYn(),Bpt),(qx(),!0)),c=uG(oIn(t.j,OTt),17).a,r=0;r<c&&!((i=eXn(n,t))<e&&(e=i,Uon(n),0==e));r++);else for(e=vZn,xA(oIn(t.j,Syt))!==xA((yvn(),Fjt))&&kfn(t.j,(GYn(),Bpt),(qx(),!0)),c=uG(oIn(t.j,OTt),17).a,r=0;r<c&&!((i=iXn(n,t))<e&&(e=i,Uon(n),0==e));r++);}function Aqn(n,t){var e,i,r,c,a,o;for(r=new Zm,c=0,e=0,a=0;c<t.c.length-1&&e<n.gc();){for(i=uG(n.Xb(e),17).a+a;(u3(c+1,t.c.length),uG(t.c[c+1],17)).a<i;)++c;for(o=0,i-(u3(c,t.c.length),uG(t.c[c],17)).a>(u3(c+1,t.c.length),uG(t.c[c+1],17)).a-i&&++o,kD(r,(u3(c+o,t.c.length),uG(t.c[c+o],17))),a+=(u3(c+o,t.c.length),uG(t.c[c+o],17)).a-i,++e;e<n.gc()&&uG(n.Xb(e),17).a+a<=(u3(c+o,t.c.length),uG(t.c[c+o],17)).a;)++e;c+=1+o}return r}function Lqn(n,t){var e,i,r,c,a;for(a=new Fz(ix(qgn(t).a.Kc(),new h));hDn(a);)if(c=uG(N9(a),18),0==n.f.b?(r=c.c.i.k==(zIn(),dbt)&&!!c.c.i.c&&c.c.i.c.p==n.c,hDn(new Fz(ix(qgn(c.c.i).a.Kc(),new h)))?(e=uG(N9(new Fz(ix(qgn(c.c.i).a.Kc(),new h))),18).c.i.c,i=c.c.i.k==bbt&&!!e&&e.p==n.c):i=!1):(r=c.c.i.k==(zIn(),dbt)&&c.c.i.p==n.c,i=c.c.i.k==bbt&&uG(N9(new Fz(ix(qgn(c.c.i).a.Kc(),new h))),18).c.i.p==n.c),r||i)return!0;return!1}function Nqn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(l=new Zm,p=g8(r),g=t*n.a,w=0,a=new ek,o=new ek,u=new Zm,m=0,v=0,b=0,d=0,h=0,f=0;0!=p.a.gc();)(s=ygn(p,c,o))&&(p.a.Bc(s),mv(u.c,s),a.a.zc(s,a),w=n.f[s.p],m+=n.e[s.p]-w*n.b,v+=n.c[s.p]*n.b,f+=w*n.b,d+=n.e[s.p]),(!s||0==p.a.gc()||m>=g&&n.e[s.p]>w*n.b||v>=i*g)&&(mv(l.c,u),u=new Zm,Qon(o,a),a.a.$b(),h-=f,b=e.Math.max(b,h*n.b+d),h+=v,m=v,v=0,f=0,d=0);return new WO(b,l)}function $qn(n){var t,e,i,r,c;if(!n.d){if(c=new js,null==(t=V_t).a.zc(n,t)){for(e=new DD(n1(n));e.e!=e.i.gc();)CW(c,$qn(uG(Zkn(e),29)));t.a.Bc(n),t.a.gc()}for(r=c.i,!n.q&&(n.q=new fV(p_t,n,11,10)),i=new DD(n.q);i.e!=i.i.gc();++r)uG(Zkn(i),411);CW(c,(!n.q&&(n.q=new fV(p_t,n,11,10)),n.q)),lbn(c),n.d=new vL((uG(zrn(gZ((tQ(),M_t).o),9),19),c.i),c.g),n.e=uG(c.g,688),null==n.e&&(n.e=W_t),y9(n).b&=-17}return n.d}function Dqn(n,t,e,i){var r,c,a,o,u,s;if(s=VKn(n.e.Dh(),t),u=0,r=uG(n.g,124),PP(),uG(t,69).xk()){for(a=0;a<n.i;++a)if(c=r[a],s.am(c.Lk())){if(udn(c,e))return u;++u}}else if(null!=e){for(o=0;o<n.i;++o)if(c=r[o],s.am(c.Lk())){if(udn(e,c.md()))return u;++u}if(i)for(u=0,a=0;a<n.i;++a)if(c=r[a],s.am(c.Lk())){if(xA(e)===xA(fK(n,uG(c.md(),58))))return u;++u}}else for(a=0;a<n.i;++a)if(c=r[a],s.am(c.Lk())){if(null==c.md())return u;++u}return-1}function xqn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d;if(e.Xh(t)&&(h=(b=t)?uG(i,54).gi(b):null))if(d=e.Nh(t,n.a),(w=t.t)>1||-1==w)if(f=uG(d,71),l=uG(h,71),f.dc())l.$b();else for(a=!!lMn(t),c=0,o=n.a?f.Kc():f.Ii();o.Ob();)s=uG(o.Pb(),58),(r=uG(ain(n,s),58))?(a?-1==(u=l.dd(r))?l.Gi(c,r):c!=u&&l.Ui(c,r):l.Gi(c,r),++c):n.b&&!a&&(l.Gi(c,s),++c);else null==d?h.Wb(null):null==(r=ain(n,d))?n.b&&!lMn(t)&&h.Wb(d):h.Wb(r)}function Rqn(n,t){var i,r,c,a,o,u,s,f;for(i=new Ne,c=new Fz(ix(qgn(t).a.Kc(),new h));hDn(c);)if(!v9(r=uG(N9(c),18))&&_Pn(u=r.c.i,$bt)){if(-1==(f=U_n(n,u,$bt,Nbt)))continue;i.b=e.Math.max(i.b,f),!i.a&&(i.a=new Zm),kD(i.a,u)}for(o=new Fz(ix(Xgn(t).a.Kc(),new h));hDn(o);)if(!v9(a=uG(N9(o),18))&&_Pn(s=a.d.i,Nbt)){if(-1==(f=U_n(n,s,Nbt,$bt)))continue;i.d=e.Math.max(i.d,f),!i.c&&(i.c=new Zm),kD(i.c,s)}return i}function Kqn(n,t,e,i){var r,c,a,o,u,s,h;if(e.d.i!=t.i){for(Hb(r=new gMn(n),(zIn(),wbt)),kfn(r,(GYn(),rmt),e),kfn(r,(jYn(),JMt),($Pn(),cRt)),mv(i.c,r),o2(a=new lOn,r),NLn(a,(KQn(),_Rt)),o2(o=new lOn,r),NLn(o,kRt),h=e.d,u2(e,a),zsn(c=new UZ,e),kfn(c,bMt,null),c2(c,o),u2(c,h),s=new N4(e.b,0);s.b<s.d.gc();)MK(s.b<s.d.gc()),xA(oIn(u=uG(s.d.Xb(s.c=s.b++),72),Xyt))===xA((Zrn(),rxt))&&(kfn(u,Dpt,e),LQ(s),kD(c.b,u));wDn(r,a,o)}}function Fqn(n,t,e,i){var r,c,a,o,u,s;if(e.c.i!=t.i)for(Hb(r=new gMn(n),(zIn(),wbt)),kfn(r,(GYn(),rmt),e),kfn(r,(jYn(),JMt),($Pn(),cRt)),mv(i.c,r),o2(a=new lOn,r),NLn(a,(KQn(),_Rt)),o2(o=new lOn,r),NLn(o,kRt),u2(e,a),zsn(c=new UZ,e),kfn(c,bMt,null),c2(c,o),u2(c,t),wDn(r,a,o),s=new N4(e.b,0);s.b<s.d.gc();)MK(s.b<s.d.gc()),u=uG(s.d.Xb(s.c=s.b++),72),uG(oIn(u,Xyt),278)==(Zrn(),rxt)&&(vR(u,Dpt)||kfn(u,Dpt,e),LQ(s),kD(c.b,u))}function _qn(n){var t,e,i,r;if(b_n(),t=t0(n),n<qot.length)return qot[t];if(n<=50)return t$n((cHn(),Kot),t);if(n<=$1n)return D9(t$n(Got[1],t),t);if(n>1e6)throw hv(new wM("power of ten too big"));if(n<=vZn)return D9(t$n(Got[1],t),t);for(r=i=t$n(Got[1],vZn),e=Bsn(n-vZn),t=t0(n%vZn);dwn(e,vZn)>0;)r=j5(r,i),e=$gn(e,vZn);for(r=D9(r=j5(r,t$n(Got[1],t)),vZn),e=Bsn(n-vZn);dwn(e,vZn)>0;)r=D9(r,vZn),e=$gn(e,vZn);return r=D9(r,t)}function Bqn(n){var t,e,i,r,c,a,o,u;for(a=new Ww(n.a);a.a<a.c.c.length;)if((c=uG(N3(a),10)).k==(zIn(),lbt)&&((r=uG(oIn(c,(GYn(),Fpt)),64))==(KQn(),kRt)||r==_Rt))for(i=new Fz(ix(Ggn(c).a.Kc(),new h));hDn(i);)0!=(t=(e=uG(N9(i),18)).a).b&&((o=e.c).i==c&&(MK(0!=t.b),uG(t.a.a.c,8).b=Gfn(Uhn(cT(PNt,1),zZn,8,0,[o.i.n,o.n,o.a])).b),(u=e.d).i==c&&(MK(0!=t.b),uG(t.c.b.c,8).b=Gfn(Uhn(cT(PNt,1),zZn,8,0,[u.i.n,u.n,u.a])).b))}function Hqn(n,t,i,r){var c,a,o;if(this.j=new Zm,this.k=new Zm,this.b=new Zm,this.c=new Zm,this.e=new cN,this.i=new Uk,this.f=new nv,this.d=new Zm,this.g=new Zm,kD(this.b,n),kD(this.b,t),this.e.c=e.Math.min(n.a,t.a),this.e.d=e.Math.min(n.b,t.b),this.e.b=e.Math.abs(n.a-t.a),this.e.a=e.Math.abs(n.b-t.b),c=uG(oIn(r,(jYn(),bMt)),75))for(o=Fkn(c,0);o.b!=o.d.c;)gcn((a=uG(I6(o),8)).a,n.a)&&aq(this.i,a);i&&kD(this.j,i),kD(this.k,r)}function Uqn(n,t,e,i){var r,c,a,o,u,s,h;for(o=-1,h=new Ww(n);h.a<h.c.c.length;)(s=uG(N3(h),118)).g=o--,a=r=pz(t6(nY(JJ(new fX(null,new h3(s.f,16)),new ua),new sa)).d),u=c=pz(t6(nY(JJ(new fX(null,new h3(s.k,16)),new ha),new fa)).d),i||(a=pz(t6(nY(new fX(null,new h3(s.f,16)),new la)).d),u=pz(t6(nY(new fX(null,new h3(s.k,16)),new aa)).d)),s.d=a,s.a=r,s.i=u,s.b=c,0==u?s8(e,s,e.c.b,e.c):0==a&&s8(t,s,t.c.b,t.c)}function Gqn(n,t){var i,r,c,a,o;if(n.k==(zIn(),bbt)&&(i=n.k!=bbt||Qj(JJ(uG(oIn(n,(GYn(),gmt)),15).Oc(),new hd(new _t))).Bd((vS(),Kut))?t:(Ajn(),xxt),kfn(n,(GYn(),Qpt),i),i!=(Ajn(),Dxt)))for(r=uG(oIn(n,rmt),18),o=uM(pK(oIn(r,(jYn(),tMt)))),a=0,i==$xt?a=n.o.b-e.Math.ceil(o/2):i==xxt&&(a=e.Math.ceil(n.o.b-uM(pK(oIn(HQ(n),pTt)))-o)/2,n.o.b-=uM(pK(oIn(HQ(n),pTt))),n.o.b-=o),c=new Ww(n.j);c.a<c.c.c.length;)uG(N3(c),12).n.b=a}function qqn(n,t,e){var i,r,c,a,o,u,s,h,f;for(r=!0,a=new Ww(n.b);a.a<a.c.c.length;){for(c=uG(N3(a),30),s=T0n,h=null,u=new Ww(c.a);u.a<u.c.c.length;){if(o=uG(N3(u),10),f=uM(t.p[o.p])+uM(t.d[o.p])-o.d.d,i=uM(t.p[o.p])+uM(t.d[o.p])+o.o.b+o.d.a,!(f>s&&i>s)){r=!1,e._g()&&e.bh("bk node placement breaks on "+o+" which should have been after "+h);break}h=o,s=uM(t.p[o.p])+uM(t.d[o.p])+o.o.b+o.d.a}if(!r)break}return e._g()&&e.bh(t+" is feasible: "+r),r}function Xqn(n,t,e,i){var r,c,a,o,u,s,h;if(Hb(c=new gMn(n),(zIn(),gbt)),kfn(c,(jYn(),JMt),($Pn(),cRt)),r=0,t){for(kfn(a=new lOn,(GYn(),rmt),t),kfn(c,rmt,t.i),NLn(a,(KQn(),_Rt)),o2(a,c),s=0,h=(u=x4(t.e)).length;s<h;++s)u2(u[s],a);kfn(t,lmt,c),++r}if(e){for(o=new lOn,kfn(c,(GYn(),rmt),e.i),kfn(o,rmt,e),NLn(o,(KQn(),kRt)),o2(o,c),s=0,h=(u=x4(e.g)).length;s<h;++s)c2(u[s],o);kfn(e,lmt,c),++r}return kfn(c,(GYn(),Opt),xwn(r)),mv(i.c,c),c}function zqn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(e=new _w(new Fw(n.c.b).a.vc().Kc());e.a.Ob();)o=uG(e.a.Pb(),44),null==(r=(t=uG(o.md(),143)).a)&&(r=""),!(i=UK(n.c,r))&&0==r.length&&(i=Qwn(n)),i&&!Wpn(i.c,t,!1)&&aq(i.c,t);for(a=Fkn(n.a,0);a.b!=a.d.c;)c=uG(I6(a),486),s=C9(n.c,c.a),l=C9(n.c,c.b),s&&l&&aq(s.c,new WO(l,c.c));for(BY(n.a),f=Fkn(n.b,0);f.b!=f.d.c;)h=uG(I6(f),486),t=HK(n.c,h.a),u=C9(n.c,h.b),t&&u&&cP(t,u,h.c);BY(n.b)}function Vqn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;c=new Cb(n),n9((a=new Zjn).g),n9(a.j),$V(a.b),n9(a.d),n9(a.i),$V(a.k),$V(a.c),$V(a.e),b=iNn(a,c,null),Mxn(a,c),r=b,t&&(o=wXn(s=new Cb(t)),iOn(r,Uhn(cT(nNt,1),EZn,536,0,[o]))),l=!1,f=!1,e&&(s=new Cb(e),Yet in s.a&&(l=v0(s,Yet).qe().a),Zet in s.a&&(f=v0(s,Zet).qe().a)),h=lj(xcn(new fy,l),f),SOn(new au,r,h),Yet in c.a&&nrn(c,Yet,null),(l||f)&&(mGn(h,u=new _y,l,f),nrn(c,Yet,u)),i=new bm(a),sln(new jN(r),i)}function Wqn(n,t,e){var i,r,c,a,o,u,s,h,f;for(a=new DEn,s=Uhn(cT(YHt,1),W1n,28,15,[0]),r=-1,c=0,i=0,u=0;u<n.b.c.length;++u){if(!((h=uG(zq(n.b,u),443)).b>0)){if(r=-1,32==VJ(h.c,0)){if(f=s[0],win(t,s),s[0]>f)continue}else if(WZ(t,h.c,s[0])){s[0]+=h.c.length;continue}return 0}if(r<0&&h.a&&(r=u,c=s[0],i=0),r>=0){if(o=h.b,u==r&&0==(o-=i++))return 0;if(!rJn(t,s,h,o,a)){u=r-1,s[0]=c;continue}}else if(r=-1,!rJn(t,s,h,0,a))return 0}return LQn(a,e)?s[0]:0}function Qqn(n,t,e){var i,r,c,a,o,u,s,h,f,l;for(h=new Kz(new Fd(e)),zV(o=Inn(ZHt,B2n,28,n.f.e.c.length,16,1),o.length),e[t.a]=0,s=new Ww(n.f.e);s.a<s.c.c.length;)(u=uG(N3(s),153)).a!=t.a&&(e[u.a]=vZn),kG(_Cn(h,u),D0n);for(;0!=h.b.c.length;)for(o[(f=uG(hin(h),153)).a]=!0,c=rx(new RE(n.b,f),0);c.c;)o[(l=mTn(r=uG(Ein(c),289),f)).a]||(a=vR(r,(Bjn(),ilt))?uM(pK(oIn(r,ilt))):n.c,(i=e[f.a]+a)<e[l.a]&&(e[l.a]=i,yon(h,l),kG(_Cn(h,l),D0n)))}function Jqn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w;for(a=n.o,i=Inn(YHt,W1n,28,a,15,1),r=Inn(YHt,W1n,28,a,15,1),e=n.p,t=Inn(YHt,W1n,28,e,15,1),c=Inn(YHt,W1n,28,e,15,1),s=0;s<a;s++){for(f=0;f<e&&!eTn(n,s,f);)++f;i[s]=f}for(h=0;h<a;h++){for(f=e-1;f>=0&&!eTn(n,h,f);)--f;r[h]=f}for(b=0;b<e;b++){for(o=0;o<a&&!eTn(n,o,b);)++o;t[b]=o}for(w=0;w<e;w++){for(o=a-1;o>=0&&!eTn(n,o,w);)--o;c[w]=o}for(u=0;u<a;u++)for(l=0;l<e;l++)u<c[l]&&u>t[l]&&l<r[u]&&l>i[u]&&HBn(n,u,l,!1,!0)}function Yqn(n){var t,e,i,r,c,a,o,u;e=oM(gK(oIn(n,(cGn(),yft)))),c=n.a.c.d,o=n.a.d.d,e?(a=vD(YF(new MO(o.a,o.b),c),.5),u=vD(D$(n.e),.5),t=YF(JF(new MO(c.a,c.b),a),u),_R(n.d,t)):(r=uM(pK(oIn(n.a,Fft))),i=n.d,c.a>=o.a?c.b>=o.b?(i.a=o.a+(c.a-o.a)/2+r,i.b=o.b+(c.b-o.b)/2-r-n.e.b):(i.a=o.a+(c.a-o.a)/2+r,i.b=c.b+(o.b-c.b)/2+r):c.b>=o.b?(i.a=c.a+(o.a-c.a)/2+r,i.b=o.b+(c.b-o.b)/2+r):(i.a=c.a+(o.a-c.a)/2+r,i.b=c.b+(o.b-c.b)/2-r-n.e.b))}function Zqn(n){var t,e,i,r,c,a;if(!n.f){if(a=new Ms,c=new Ms,null==(t=V_t).a.zc(n,t)){for(r=new DD(n1(n));r.e!=r.i.gc();)CW(a,Zqn(uG(Zkn(r),29)));t.a.Bc(n),t.a.gc()}for(!n.s&&(n.s=new fV(o_t,n,21,17)),i=new DD(n.s);i.e!=i.i.gc();)F$(e=uG(Zkn(i),179),102)&&ttn(c,uG(e,19));lbn(c),n.r=new JG(n,(uG(zrn(gZ((tQ(),M_t).o),6),19),c.i),c.g),CW(a,n.r),lbn(a),n.f=new vL((uG(zrn(gZ(M_t.o),5),19),a.i),a.g),y9(n).b&=-3}return n.f}function nXn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,$3n),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new ct))),U4(n,$3n,D3n,Jkn(ift)),U4(n,$3n,x3n,Jkn(Jht)),U4(n,$3n,R3n,Jkn(Xht)),U4(n,$3n,K3n,Jkn(Yht)),U4(n,$3n,D2n,Jkn(tft)),U4(n,$3n,x2n,Jkn(nft)),U4(n,$3n,$2n,Jkn(eft)),U4(n,$3n,R2n,Jkn(Zht)),U4(n,$3n,I3n,Jkn(Vht)),U4(n,$3n,O3n,Jkn(zht)),U4(n,$3n,A3n,Jkn(Wht)),U4(n,$3n,L3n,Jkn(Qht))}function tXn(){tXn=E,JKt=Uhn(cT(JHt,1),N1n,28,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]),YKt=new RegExp("[ \t\n\r\f]+");try{QKt=Uhn(cT(iBt,1),EZn,2114,0,[new Km((wL(),Cmn("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",bF((qy(),qy(),Hat))))),new Km(Cmn("yyyy-MM-dd'T'HH:mm:ss'.'SSS",bF(Hat))),new Km(Cmn("yyyy-MM-dd'T'HH:mm:ss",bF(Hat))),new Km(Cmn("yyyy-MM-dd'T'HH:mm",bF(Hat))),new Km(Cmn("yyyy-MM-dd",bF(Hat)))])}catch(n){if(!F$(n=Ehn(n),82))throw hv(n)}}function eXn(n,t){var e,i,r;if(i=0!=uRn(n.d,1),0==rHn(n,t)&&oM(gK(oIn(t.j,(GYn(),Bpt)))))return 0;!oM(gK(oIn(t.j,(GYn(),Bpt))))&&!oM(gK(oIn(t.j,mmt)))||xA(oIn(t.j,(jYn(),Syt)))===xA((yvn(),Fjt))?t.c.mg(t.e,i):i=oM(gK(oIn(t.j,Bpt))),PKn(n,t,i,!0),oM(gK(oIn(t.j,mmt)))&&kfn(t.j,mmt,(qx(),!1)),oM(gK(oIn(t.j,Bpt)))&&(kfn(t.j,Bpt,(qx(),!1)),kfn(t.j,mmt,!0)),e=rHn(n,t);do{if(Gon(n),0==e)return 0;r=e,PKn(n,t,i=!i,!1),e=rHn(n,t)}while(r>e);return r}function iXn(n,t){var e,i,r;if(i=0!=uRn(n.d,1),0==BAn(n,t)&&oM(gK(oIn(t.j,(GYn(),Bpt)))))return 0;!oM(gK(oIn(t.j,(GYn(),Bpt))))&&!oM(gK(oIn(t.j,mmt)))||xA(oIn(t.j,(jYn(),Syt)))===xA((yvn(),Fjt))?t.c.mg(t.e,i):i=oM(gK(oIn(t.j,Bpt))),PKn(n,t,i,!0),oM(gK(oIn(t.j,mmt)))&&kfn(t.j,mmt,(qx(),!1)),oM(gK(oIn(t.j,Bpt)))&&(kfn(t.j,Bpt,(qx(),!1)),kfn(t.j,mmt,!0)),e=BAn(n,t);do{if(Gon(n),0==e)return 0;r=e,PKn(n,t,i=!i,!1),e=BAn(n,t)}while(r>e);return r}function rXn(n,t,i,r){var c,a,o,u,s,h,f,l,b;return h=(s=YF(new MO(i.a,i.b),n)).a*t.b-s.b*t.a,f=t.a*r.b-t.b*r.a,l=(s.a*r.b-s.b*r.a)/f,b=h/f,0==f?0==h?(a=atn(n,c=JF(new MO(i.a,i.b),vD(new MO(r.a,r.b),.5))),o=atn(JF(new MO(n.a,n.b),t),c),u=.5*e.Math.sqrt(r.a*r.a+r.b*r.b),a<o&&a<=u?new MO(n.a,n.b):o<=u?JF(new MO(n.a,n.b),t):null):null:l>=0&&l<=1&&b>=0&&b<=1?JF(new MO(n.a,n.b),vD(new MO(t.a,t.b),l)):null}function cXn(n,t,e){var i,r,c,a,o;if(i=uG(oIn(n,(jYn(),Pyt)),21),e.a>t.a&&(i.Hc((ZSn(),VNt))?n.c.a+=(e.a-t.a)/2:i.Hc(QNt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((ZSn(),YNt))?n.c.b+=(e.b-t.b)/2:i.Hc(JNt)&&(n.c.b+=e.b-t.b)),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),tpt))&&(e.a>t.a||e.b>t.b))for(o=new Ww(n.a);o.a<o.c.c.length;)(a=uG(N3(o),10)).k==(zIn(),lbt)&&((r=uG(oIn(a,Fpt),64))==(KQn(),kRt)?a.n.a+=e.a-t.a:r==KRt&&(a.n.b+=e.b-t.b));c=n.d,n.f.a=e.a-c.b-c.c,n.f.b=e.b-c.d-c.a}function aXn(n,t,e){var i,r,c,a,o;if(i=uG(oIn(n,(jYn(),Pyt)),21),e.a>t.a&&(i.Hc((ZSn(),VNt))?n.c.a+=(e.a-t.a)/2:i.Hc(QNt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((ZSn(),YNt))?n.c.b+=(e.b-t.b)/2:i.Hc(JNt)&&(n.c.b+=e.b-t.b)),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),tpt))&&(e.a>t.a||e.b>t.b))for(a=new Ww(n.a);a.a<a.c.c.length;)(c=uG(N3(a),10)).k==(zIn(),lbt)&&((r=uG(oIn(c,Fpt),64))==(KQn(),kRt)?c.n.a+=e.a-t.a:r==KRt&&(c.n.b+=e.b-t.b));o=n.d,n.f.a=e.a-o.b-o.c,n.f.b=e.b-o.d-o.a}function oXn(n){var t,i,r,c,a,o,u,s,h,f;for(s=new Kw(new Lw(O$n(n)).a.vc().Kc());s.a.Ob();){for(r=uG(s.a.Pb(),44),h=0,f=0,h=(u=uG(r.ld(),10)).d.d,f=u.o.b+u.d.a,n.d[u.p]=0,t=u;(c=n.a[t.p])!=u;)i=rkn(t,c),o=0,o=n.c==(b0(),hSt)?i.d.n.b+i.d.a.b-i.c.n.b-i.c.a.b:i.c.n.b+i.c.a.b-i.d.n.b-i.d.a.b,a=uM(n.d[t.p])+o,n.d[c.p]=a,h=e.Math.max(h,c.d.d-a),f=e.Math.max(f,a+c.o.b+c.d.a),t=c;t=u;do{n.d[t.p]=uM(n.d[t.p])+h,t=n.a[t.p]}while(t!=u);n.b[u.p]=h+f}}function uXn(n,t,i){var r,c,a,o,u,s,h,f,l,b;for(a=0,o=n.t,c=0,r=0,s=0,b=0,l=0,i&&(n.n.c.length=0,kD(n.n,new c0(n.s,n.t,n.i))),u=0,f=new Ww(n.b);f.a<f.c.c.length;)a+(h=uG(N3(f),27)).g+(u>0?n.i:0)>t&&s>0&&(a=0,o+=s+n.i,c=e.Math.max(c,b),r+=s+n.i,s=0,b=0,i&&(++l,kD(n.n,new c0(n.s,o,n.i))),u=0),b+=h.g+(u>0?n.i:0),s=e.Math.max(s,h.f),i&&zMn(uG(zq(n.n,l),209),h),a+=h.g+(u>0?n.i:0),++u;return c=e.Math.max(c,b),r+=s,i&&(n.r=c,n.d=r,ijn(n.j)),new gY(n.s,n.t,c,r)}function sXn(n){var t,i,r,c,a,o,u,s,h,f,l;for(n.b=!1,f=M0n,u=T0n,l=M0n,s=T0n,i=n.e.a.ec().Kc();i.Ob();)for(r=(t=uG(i.Pb(),272)).a,f=e.Math.min(f,r.c),u=e.Math.max(u,r.c+r.b),l=e.Math.min(l,r.d),s=e.Math.max(s,r.d+r.a),a=new Ww(t.c);a.a<a.c.c.length;)(c=uG(N3(a),407)).a.a?(o=(h=r.d+c.b.b)+c.c,l=e.Math.min(l,h),s=e.Math.max(s,o)):(o=(h=r.c+c.b.a)+c.c,f=e.Math.min(f,h),u=e.Math.max(u,o));n.a=new MO(u-f,s-l),n.c=new MO(f+n.d.a,l+n.d.b)}function hXn(n){var t,e,i,r,c,a;if(!n.a){if(n.o=null,a=new Dm(n),t=new Ts,null==(e=V_t).a.zc(n,e)){for(c=new DD(n1(n));c.e!=c.i.gc();)CW(a,hXn(uG(Zkn(c),29)));e.a.Bc(n),e.a.gc()}for(!n.s&&(n.s=new fV(o_t,n,21,17)),r=new DD(n.s);r.e!=r.i.gc();)F$(i=uG(Zkn(r),179),331)&&ttn(t,uG(i,35));lbn(t),n.k=new YG(n,(uG(zrn(gZ((tQ(),M_t).o),7),19),t.i),t.g),CW(a,n.k),lbn(a),n.a=new vL((uG(zrn(gZ(M_t.o),4),19),a.i),a.g),y9(n).b&=-2}return n.a}function fXn(n,t,e,i){var r,c,a,o,u,s,h;if(h=VKn(n.e.Dh(),t),r=0,c=uG(n.g,124),u=null,PP(),uG(t,69).xk()){for(o=0;o<n.i;++o)if(a=c[o],h.am(a.Lk())){if(udn(a,e)){u=a;break}++r}}else if(null!=e){for(o=0;o<n.i;++o)if(a=c[o],h.am(a.Lk())){if(udn(e,a.md())){u=a;break}++r}}else for(o=0;o<n.i;++o)if(a=c[o],h.am(a.Lk())){if(null==a.md()){u=a;break}++r}return u&&(uN(n.e)&&(s=t.Jk()?new i8(n.e,4,t,e,null,r,!0):VZ(n,t.tk()?2:1,t,e,t.ik(),-1,!0),i?i.nj(s):i=s),i=$Hn(n,u,i)),i}function lXn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w,d;switch(w=0,d=0,s=c.c,u=c.b,f=i.f,b=i.g,t.g){case 0:w=r.i+r.g+o,d=n.c?eCn(w,a,r,o):r.j,l=e.Math.max(s,w+b),h=e.Math.max(u,d+f);break;case 1:d=r.j+r.f+o,w=n.c?tCn(d,a,r,o):r.i,l=e.Math.max(s,w+b),h=e.Math.max(u,d+f);break;case 2:w=s+o,d=0,l=s+o+b,h=e.Math.max(u,f);break;case 3:w=0,d=u+o,l=e.Math.max(s,b),h=u+o+f;break;default:throw hv(new vM("IllegalPlacementOption."))}return new Mvn(n.a,l,h,t,w,d)}function bXn(n){var t,i,r,c,a,o,u,s,h,f,l,b;if(u=n.d,l=uG(oIn(n,(GYn(),Pmt)),15),t=uG(oIn(n,Ept),15),l||t){if(a=uM(pK(Omn(n,(jYn(),lTt)))),o=uM(pK(Omn(n,bTt))),b=0,l){for(h=0,c=l.Kc();c.Ob();)r=uG(c.Pb(),10),h=e.Math.max(h,r.o.b),b+=r.o.a;b+=a*(l.gc()-1),u.d+=h+o}if(i=0,t){for(h=0,c=t.Kc();c.Ob();)r=uG(c.Pb(),10),h=e.Math.max(h,r.o.b),i+=r.o.a;i+=a*(t.gc()-1),u.a+=h+o}(s=e.Math.max(b,i))>n.o.a&&(f=(s-n.o.a)/2,u.b=e.Math.max(u.b,f),u.c=e.Math.max(u.c,f))}}function wXn(n){var t,e,i,r,c,a;for(YL(r=new r4,(Whn(),YLt)),i=new Jw(new IM(new JE(n,Yon(n,Inn($ot,zZn,2,0,6,1))).b));i.b<i.d.gc();)MK(i.b<i.d.gc()),e=mK(i.d.Xb(i.c=i.b++)),(c=DVn(NFt,e))&&null!=(a=vVn(c,(t=v0(n,e)).te()?t.te().a:t.qe()?""+t.qe().a:t.re()?""+t.re().a:t.Ib()))&&(($x(c.j,(Rkn(),sNt))||$x(c.j,hNt))&&vfn(trn(r,bFt),c,a),$x(c.j,oNt)&&vfn(trn(r,aFt),c,a),$x(c.j,fNt)&&vfn(trn(r,wFt),c,a),$x(c.j,uNt)&&vfn(trn(r,lFt),c,a));return r}function dXn(n,t,e){var i,r,c,a,o,u,s,h;if(r=uG(n.g,124),EFn(n.e,t))return PP(),uG(t,69).xk()?new Cq(t,n):new OA(t,n);for(s=VKn(n.e.Dh(),t),i=0,o=0;o<n.i;++o){if(a=(c=r[o]).Lk(),s.am(a)){if(PP(),uG(t,69).xk())return c;if(a==(m$n(),NBt)||a==OBt){for(u=new lx(cpn(c.md()));++o<n.i;)((a=(c=r[o]).Lk())==NBt||a==OBt)&&JA(u,cpn(c.md()));return g_(uG(t.Hk(),156),u.a)}return null!=(h=c.md())&&e&&F$(t,102)&&0!=(uG(t,19).Bb&P0n)&&(h=ONn(n,t,o,i,h)),h}++i}return t.ik()}function gXn(n,t,e,i){var r,c,a,o,u,s;if(u=VKn(n.e.Dh(),t),c=uG(n.g,124),EFn(n.e,t)){for(r=0,o=0;o<n.i;++o)if(a=c[o],u.am(a.Lk())){if(r==e)return PP(),uG(t,69).xk()?a:(null!=(s=a.md())&&i&&F$(t,102)&&0!=(uG(t,19).Bb&P0n)&&(s=ONn(n,t,o,r,s)),s);++r}throw hv(new dM(Hit+e+Vet+r))}for(r=0,o=0;o<n.i;++o){if(a=c[o],u.am(a.Lk()))return PP(),uG(t,69).xk()?a:(null!=(s=a.md())&&i&&F$(t,102)&&0!=(uG(t,19).Bb&P0n)&&(s=ONn(n,t,o,r,s)),s);++r}return t.ik()}function pXn(){pXn=E,Hot=Uhn(cT(YHt,1),W1n,28,15,[j1n,1162261467,d1n,1220703125,362797056,1977326743,d1n,387420489,g0n,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,d1n,1291467969,1544804416,1838265625,60466176]),Uot=Uhn(cT(YHt,1),W1n,28,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}function mXn(n,t){var e,i,r,c,a,o,u,s,h,f;if(a=n.e,0==(u=t.e))return n;if(0==a)return 0==t.e?t:new VV(-t.e,t.d,t.a);if((c=n.d)+(o=t.d)==2)return e=E3(n.a[0],L0n),i=E3(t.a[0],L0n),a<0&&(e=Men(e)),u<0&&(i=Men(i)),cHn(),BA($gn(e,i),0)?Rmn($gn(e,i)):hW(Rmn(Men($gn(e,i))));if(-1==(r=c!=o?c>o?1:-1:Hln(n.a,t.a,c)))f=-u,h=a==u?t7(t.a,o,n.a,c):Cnn(t.a,o,n.a,c);else if(f=a,a==u){if(0==r)return cHn(),_ot;h=t7(n.a,c,t.a,o)}else h=Cnn(n.a,c,t.a,o);return K4(s=new VV(f,h.length,h)),s}function vXn(n,t){var e,i,r;if(r=PGn(t),!t.c&&(t.c=new fV(wFt,t,9,9)),kS(new fX(null,(!t.c&&(t.c=new fV(wFt,t,9,9)),new h3(t.c,16))),new Jd(r)),CWn(t,i=uG(oIn(r,(GYn(),Hpt)),21)),i.Hc((r_n(),tpt)))for(e=new DD((!t.c&&(t.c=new fV(wFt,t,9,9)),t.c));e.e!=e.i.gc();)pQn(n,t,r,uG(Zkn(e),123));return 0!=uG(zDn(t,(jYn(),DMt)),181).gc()&&u_n(t,r),oM(gK(oIn(r,HMt)))&&i.Fc(apt),vR(r,fTt)&&iM(new omn(uM(pK(oIn(r,fTt)))),r),xA(zDn(t,rMt))===xA((Own(),Ixt))?UYn(n,t,r):dYn(n,t,r),r}function kXn(n){var t,e,i,r,c,a,o;for(i=new Ww(n.b);i.a<i.c.c.length;)for(c=new Ww(T3(uG(N3(i),30).a));c.a<c.c.c.length;)if(Nin(r=uG(N3(c),10))&&!(e=uG(oIn(r,(GYn(),Spt)),313)).g&&e.d)for(t=e,o=e.d;o;)Q_n(o.i,o.k,!1,!0),Ien(t.a),Ien(o.i),Ien(o.k),Ien(o.b),u2(o.c,t.c.d),u2(t.c,null),a2(t.a,null),a2(o.i,null),a2(o.k,null),a2(o.b,null),(a=new O5(t.i,o.a,t.e,o.j,o.f)).k=t.k,a.n=t.n,a.b=t.b,a.c=o.c,a.g=t.g,a.d=o.d,kfn(t.i,Spt,a),kfn(o.a,Spt,a),o=o.d,t=a}function yXn(n,t){var e,i,r,c,a,o,u;if(null==n)return null;if(0==(c=n.length))return"";for(u=Inn(JHt,N1n,28,c,15,1),Knn(0,c,n.length),Knn(0,c,u.length),gW(n,0,c,u,0),e=null,o=t,r=0,a=0;r<c;r++)i=u[r],aZn(),i<=32&&0!=(2&vHt[i])?o?(!e&&(e=new fx(n)),mR(e,r-a++)):(o=t,32!=i&&(!e&&(e=new fx(n)),psn(e,r-a,r-a+1,String.fromCharCode(32)))):o=!1;return o?e?(c=e.a.length)>0?r1(e.a,0,c-1):"":(Knn(0,c-1,n.length),n.substr(0,c-1)):e?e.a:n}function MXn(n,t){var e,i,r,c,a,o,u;for(t.Ug("Sort By Input Model "+oIn(n,(jYn(),Syt)),1),r=0,i=new Ww(n.b);i.a<i.c.c.length;){for(e=uG(N3(i),30),u=0==r?0:r-1,o=uG(zq(n.b,u),30),a=new Ww(e.a);a.a<a.c.c.length;)xA(oIn(c=uG(N3(a),10),JMt))!==xA(($Pn(),rRt))&&xA(oIn(c,JMt))!==xA(cRt)&&(hZ(),f$(c.j,new Gbn(o,uG(oIn(n,Syt),284),qjn(c),oM(gK(oIn(n,Eyt))))),t.bh("Node "+c+" ports: "+c.j));hZ(),f$(e.a,new xon(o,uG(oIn(n,Syt),284),uG(oIn(n,Tyt),390))),t.bh("Layer "+r+": "+e),++r}t.Vg()}function TXn(n,t){var e,i,r,c,a;if(a=uG(t,138),pxn(n),pxn(a),null!=a.b){if(n.c=!0,null==n.b)return n.b=Inn(YHt,W1n,28,a.b.length,15,1),void qGn(a.b,0,n.b,0,a.b.length);for(c=Inn(YHt,W1n,28,n.b.length+a.b.length,15,1),e=0,i=0,r=0;e<n.b.length||i<a.b.length;)e>=n.b.length?(c[r++]=a.b[i++],c[r++]=a.b[i++]):i>=a.b.length?(c[r++]=n.b[e++],c[r++]=n.b[e++]):a.b[i]<n.b[e]||a.b[i]===n.b[e]&&a.b[i+1]<n.b[e+1]?(c[r++]=a.b[i++],c[r++]=a.b[i++]):(c[r++]=n.b[e++],c[r++]=n.b[e++]);n.b=c}}function jXn(n,t){var e,i,r,c,a,o,u,s,h,f;return e=oM(gK(oIn(n,(GYn(),Ypt)))),o=oM(gK(oIn(t,Ypt))),i=uG(oIn(n,Zpt),12),u=uG(oIn(t,Zpt),12),r=uG(oIn(n,nmt),12),s=uG(oIn(t,nmt),12),h=!!i&&i==u,f=!!r&&r==s,e||o?(c=(!oM(gK(oIn(n,Ypt)))||oM(gK(oIn(n,Jpt))))&&(!oM(gK(oIn(t,Ypt)))||oM(gK(oIn(t,Jpt)))),a=!(oM(gK(oIn(n,Ypt)))&&oM(gK(oIn(n,Jpt)))||oM(gK(oIn(t,Ypt)))&&oM(gK(oIn(t,Jpt)))),new xB(h&&c||f&&a,h,f)):new xB(uG(N3(new Ww(n.j)),12).p==uG(N3(new Ww(t.j)),12).p,h,f)}function EXn(n){var t,i,r,c,a,o,u,s;for(r=0,i=0,s=new lS,t=0,u=new Ww(n.n);u.a<u.c.c.length;)0==(o=uG(N3(u),209)).c.c.length?s8(s,o,s.c.b,s.c):(r=e.Math.max(r,o.d),i+=o.a+(t>0?n.i:0)),++t;for(dgn(n.n,s),n.d=i,n.r=r,n.g=0,n.f=0,n.e=0,n.o=M0n,n.p=M0n,a=new Ww(n.b);a.a<a.c.c.length;)c=uG(N3(a),27),n.p=e.Math.min(n.p,c.g),n.g=e.Math.max(n.g,c.g),n.f=e.Math.max(n.f,c.f),n.o=e.Math.min(n.o,c.f),n.e+=c.f+n.i;n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),ijn(n.j)}function SXn(n){var t,e,i,r;return 0!=(64&n.Db)?Egn(n):(t=new lx(Dtt),(i=n.k)?JA(JA((t.a+=' "',t),i),'"'):(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n.i>0&&(!(r=(!n.n&&(n.n=new fV(lFt,n,1,7)),uG(zrn(n.n,0),135)).a)||JA(JA((t.a+=' "',t),r),'"'))),!n.b&&(n.b=new f_(cFt,n,4,7)),e=!(n.b.i<=1&&(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c.i<=1)),t.a+=e?" [":" ",JA(t,KD(new FM,new DD(n.b))),e&&(t.a+="]"),t.a+=Y4n,e&&(t.a+="["),JA(t,KD(new FM,new DD(n.c))),e&&(t.a+="]"),t.a)}function PXn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(k=n.c,y=t.c,e=Ten(k.a,n,0),i=Ten(y.a,t,0),m=uG(jmn(n,(can(),Vjt)).Kc().Pb(),12),j=uG(jmn(n,Wjt).Kc().Pb(),12),v=uG(jmn(t,Vjt).Kc().Pb(),12),E=uG(jmn(t,Wjt).Kc().Pb(),12),g=x4(m.e),M=x4(j.g),p=x4(v.e),T=x4(E.g),$jn(n,i,y),s=0,b=(c=p).length;s<b;++s)u2(c[s],m);for(h=0,w=(a=T).length;h<w;++h)c2(a[h],j);for($jn(t,e,k),f=0,d=(o=g).length;f<d;++f)u2(o[f],v);for(u=0,l=(r=M).length;u<l;++u)c2(r[u],E)}function CXn(n){var t,i,r,c,a,o,u;for(r=new DD((!(o=uG(zDn(n,(SK(),zCt)),27)).e&&(o.e=new f_(aFt,o,7,4)),o.e));r.e!=r.i.gc();)i=uG(Zkn(r),74),u=new MO(uG(zrn((!i.a&&(i.a=new fV(oFt,i,6,6)),i.a),0),166).j,uG(zrn((!i.a&&(i.a=new fV(oFt,i,6,6)),i.a),0),166).k),a=new MO(uG(zrn((!i.a&&(i.a=new fV(oFt,i,6,6)),i.a),0),166).b,uG(zrn((!i.a&&(i.a=new fV(oFt,i,6,6)),i.a),0),166).c),c=new MO(a.a-u.a,a.b-u.b),t=e.Math.atan2(c.b,c.a),uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84).qf((jOn(),XIt),t)}function IXn(n,t){var i,r,c,a,o,u,s,h,f;for(t.Ug("Interactive Node Reorderer",1),!n.a&&(n.a=new fV(bFt,n,10,11)),f=n.a,u=new Zm,c=new DD(f);c.e!=c.i.gc();)vnn(i=uG(Zkn(c),27),(S_n(),JOt))&&mv(u.c,i);for(a=new Ww(u);a.a<a.c.c.length;)rin(f,i=uG(N3(a),27));for(hZ(),f$(u,new Ro),o=new Ww(u);o.a<o.c.c.length;)i=uG(N3(o),27),h=uG(zDn(i,(S_n(),JOt)),17).a,$dn(f,h=e.Math.min(h,f.i),i);for(s=0,r=new DD(f);r.e!=r.i.gc();)Myn(i=uG(Zkn(r),27),(S_n(),QOt),xwn(s)),++s;t.Vg()}function OXn(n,t,i){var r,c,a,o,u,s,h;return e.Math.abs(t.s-t.c)<t4n||e.Math.abs(i.s-i.c)<t4n?0:(r=FKn(n,t.j,i.e),c=FKn(n,i.j,t.e),a=0,-1==r||-1==c?(-1==r&&(new A2((_7(),$St),i,t,1),++a),-1==c&&(new A2((_7(),$St),t,i,1),++a)):(o=Hwn(t.j,i.s,i.c),o+=Hwn(i.e,t.s,t.c),u=Hwn(i.j,t.s,t.c),(s=r+16*o)<(h=c+16*(u+=Hwn(t.e,i.s,i.c)))?new A2((_7(),DSt),t,i,h-s):s>h?new A2((_7(),DSt),i,t,s-h):s>0&&h>0&&(new A2((_7(),DSt),t,i,0),new A2(DSt,i,t,0))),a)}function AXn(n,t,e){var i,r,c;for(n.a=new Zm,c=Fkn(t.b,0);c.b!=c.d.c;){for(r=uG(I6(c),39);uG(oIn(r,(QGn(),ACt)),17).a>n.a.c.length-1;)kD(n.a,new WO(B3n,G9n));i=uG(oIn(r,ACt),17).a,e==(xdn(),JDt)||e==YDt?(r.e.a<uM(pK(uG(zq(n.a,i),42).a))&&uw(uG(zq(n.a,i),42),r.e.a),r.e.a+r.f.a>uM(pK(uG(zq(n.a,i),42).b))&&sw(uG(zq(n.a,i),42),r.e.a+r.f.a)):(r.e.b<uM(pK(uG(zq(n.a,i),42).a))&&uw(uG(zq(n.a,i),42),r.e.b),r.e.b+r.f.b>uM(pK(uG(zq(n.a,i),42).b))&&sw(uG(zq(n.a,i),42),r.e.b+r.f.b))}}function LXn(n,t,e,i){var r,c,a,o,u,s;if(c=pgn(i),!oM(gK(oIn(i,(jYn(),jMt))))&&!oM(gK(oIn(n,uMt)))||sN(uG(oIn(n,JMt),101)))switch(o2(o=new lOn,n),t?((s=o.n).a=t.a-n.n.a,s.b=t.b-n.n.b,DOn(s,0,0,n.o.a,n.o.b),NLn(o,nGn(o,c))):(r=Ipn(c),NLn(o,e==(can(),Wjt)?r:Gdn(r))),a=uG(oIn(i,(GYn(),Hpt)),21),u=o.j,c.g){case 2:case 1:(u==(KQn(),yRt)||u==KRt)&&a.Fc((r_n(),cpt));break;case 4:case 3:(u==(KQn(),kRt)||u==_Rt)&&a.Fc((r_n(),cpt))}else r=Ipn(c),o=zUn(n,e,e==(can(),Wjt)?r:Gdn(r));return o}function NXn(n,t){var i,r,c,a,o;for(o=new bsn(new Nw(n.f.b).a);o.b;){if(c=uG((a=von(o)).ld(),602),1==t){if(c.Af()!=(xdn(),nxt)&&c.Af()!=QDt)continue}else if(c.Af()!=(xdn(),JDt)&&c.Af()!=YDt)continue;switch(r=uG(uG(a.md(),42).b,86),i=uG(uG(a.md(),42).a,194).c,c.Af().g){case 2:r.g.c=n.e.a,r.g.b=e.Math.max(1,r.g.b+i);break;case 1:r.g.c=r.g.c+i,r.g.b=e.Math.max(1,r.g.b-i);break;case 4:r.g.d=n.e.b,r.g.a=e.Math.max(1,r.g.a+i);break;case 3:r.g.d=r.g.d+i,r.g.a=e.Math.max(1,r.g.a-i)}}}function $Xn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(u=Inn(YHt,W1n,28,t.b.c.length,15,1),h=Inn(vbt,p1n,273,t.b.c.length,0,1),s=Inn(pbt,e6n,10,t.b.c.length,0,1),b=0,w=(l=n.a).length;b<w;++b){for(g=0,o=new Ww((f=l[b]).e);o.a<o.c.c.length;)++u[r=GL((c=uG(N3(o),10)).c)],d=uM(pK(oIn(t,(jYn(),dTt)))),u[r]>0&&s[r]&&(d=y$(n.b,s[r],c)),g=e.Math.max(g,c.c.c.b+d);for(a=new Ww(f.e);a.a<a.c.c.length;)(c=uG(N3(a),10)).n.b=g+c.d.d,(i=c.c).c.b=g+c.d.d+c.o.b+c.d.a,h[Ten(i.b.b,i,0)]=c.k,s[Ten(i.b.b,i,0)]=c}}function DXn(n,t){var e,i,r,c,a,o,u,s,f,l,b;for(i=new Fz(ix(eRn(t).a.Kc(),new h));hDn(i);)F$(zrn((!(e=uG(N9(i),74)).b&&(e.b=new f_(cFt,e,4,7)),e.b),0),193)||(u=lCn(uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84)),z$n(e)||(a=t.i+t.g/2,o=t.j+t.f/2,f=u.i+u.g/2,l=u.j+u.f/2,(b=new sj).a=f-a,b.b=l-o,OEn(c=new MO(b.a,b.b),t.g,t.f),b.a-=c.a,b.b-=c.b,a=f-b.a,o=l-b.b,OEn(s=new MO(b.a,b.b),u.g,u.f),b.a-=s.a,b.b-=s.b,f=a+b.a,l=o+b.b,Tcn(r=JFn(e,!0,!0),a),Ecn(r,o),mcn(r,f),jcn(r,l),DXn(n,u)))}function xXn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,dnt),"ELK SPOrE Compaction"),"ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree."),new Yo))),U4(n,dnt,gnt,Jkn(yLt)),U4(n,dnt,pnt,Jkn(mLt)),U4(n,dnt,mnt,Jkn(pLt)),U4(n,dnt,vnt,Jkn(dLt)),U4(n,dnt,knt,Jkn(gLt)),U4(n,dnt,K3n,wLt),U4(n,dnt,o4n,8),U4(n,dnt,ynt,Jkn(kLt)),U4(n,dnt,Mnt,Jkn(hLt)),U4(n,dnt,Tnt,Jkn(fLt)),U4(n,dnt,q8n,(qx(),!1))}function RXn(n,t){var i,r,c,a,o,u,s,h,f,l;for(t.Ug("Simple node placement",1),l=uG(oIn(n,(GYn(),kmt)),312),u=0,a=new Ww(n.b);a.a<a.c.c.length;){for((o=(r=uG(N3(a),30)).c).b=0,i=null,h=new Ww(r.a);h.a<h.c.c.length;)s=uG(N3(h),10),i&&(o.b+=avn(s,i,l.c)),o.b+=s.d.d+s.o.b+s.d.a,i=s;u=e.Math.max(u,o.b)}for(c=new Ww(n.b);c.a<c.c.c.length;)for(f=(u-(o=(r=uG(N3(c),30)).c).b)/2,i=null,h=new Ww(r.a);h.a<h.c.c.length;)s=uG(N3(h),10),i&&(f+=avn(s,i,l.c)),f+=s.d.d,s.n.b=f,f+=s.o.b+s.d.a,i=s;t.Vg()}function KXn(n,t){var e,i,r,c;for(Frn(t.b.j),kS(YJ(new fX(null,new h3(t.d,16)),new cc),new ac),c=new Ww(t.d);c.a<c.c.c.length;){switch((r=uG(N3(c),105)).e.g){case 0:e=uG(zq(r.j,0),113).d.j,qb(r,uG(yx(Qz(uG(Y9(r.k,e),15).Oc(),Fdt)),113)),Gb(r,uG(yx(Wz(uG(Y9(r.k,e),15).Oc(),Fdt)),113));break;case 1:i=Ejn(r),qb(r,uG(yx(Qz(uG(Y9(r.k,i[0]),15).Oc(),Fdt)),113)),Gb(r,uG(yx(Wz(uG(Y9(r.k,i[1]),15).Oc(),Fdt)),113));break;case 2:FAn(n,r);break;case 3:IKn(r);break;case 4:DKn(n,r)}_rn(r)}n.a=null}function FXn(n,t,e){var i,r,c,a,o,u,s,h;return i=n.a.o==(w0(),dSt)?M0n:T0n,!(o=wGn(n,new _I(t,e))).a&&o.c?(aq(n.d,o),i):o.a?(r=o.a.c,u=o.a.d,e?(s=n.a.c==(b0(),fSt)?u:r,c=n.a.c==fSt?r:u,a=n.a.g[c.i.p],h=uM(n.a.p[a.p])+uM(n.a.d[c.i.p])+c.n.b+c.a.b-uM(n.a.d[s.i.p])-s.n.b-s.a.b):(s=n.a.c==(b0(),hSt)?u:r,c=n.a.c==hSt?r:u,h=uM(n.a.p[n.a.g[c.i.p].p])+uM(n.a.d[c.i.p])+c.n.b+c.a.b-uM(n.a.d[s.i.p])-s.n.b-s.a.b),n.a.n[n.a.g[r.i.p].p]=(qx(),!0),n.a.n[n.a.g[u.i.p].p]=!0,h):i}function _Xn(n,t,e,i){var r,c,a,o,u,s,h,f;if(0==i.gc())return!1;if(PP(),a=(u=uG(t,69).xk())?i:new Drn(i.gc()),EFn(n.e,t)){if(t.Si())for(h=i.Kc();h.Ob();)aqn(n,t,s=h.Pb(),F$(t,102)&&0!=(uG(t,19).Bb&P0n))||(c=R5(t,s),a.Fc(c));else if(!u)for(h=i.Kc();h.Ob();)c=R5(t,s=h.Pb()),a.Fc(c)}else{for(f=VKn(n.e.Dh(),t),r=uG(n.g,124),o=0;o<n.i;++o)if(c=r[o],f.am(c.Lk()))throw hv(new vM(dct));if(i.gc()>1)throw hv(new vM(dct));u||(c=R5(t,i.Kc().Pb()),a.Fc(c))}return bfn(n,sAn(n,t,e),a)}function BXn(n,t,e){var i,r,c,a,o,u,s;if(EFn(n.e,t))PP(),C$n((o=uG(t,69).xk()?new Cq(t,n):new OA(t,n)).c,o.b),K$(o,uG(e,16));else{for(s=VKn(n.e.Dh(),t),i=uG(n.g,124),c=0;c<n.i;++c)if(r=i[c].Lk(),s.am(r)){if(r==(m$n(),NBt)||r==OBt){for(a=c,(u=wMn(n,t,e))?e_n(n,c):++c;c<n.i;)(r=i[c].Lk())==NBt||r==OBt?e_n(n,c):++c;u||uG(Uyn(n,a,R5(t,e)),76)}else wMn(n,t,e)?e_n(n,c):uG(Uyn(n,c,(PP(),uG(t,69).xk()?uG(e,76):R5(t,e))),76);return}wMn(n,t,e)||ttn(n,(PP(),uG(t,69).xk()?uG(e,76):R5(t,e)))}}function HXn(n,t,e){var i,r,c,a,o,u,s,h;return udn(e,n.b)||(n.b=e,c=new Jn,a=uG(l8(YJ(new fX(null,new h3(e.f,16)),c),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21),n.e=!0,n.f=!0,n.c=!0,n.d=!0,r=a.Hc((vyn(),yht)),i=a.Hc(Mht),r&&!i&&(n.f=!1),!r&&i&&(n.d=!1),r=a.Hc(kht),i=a.Hc(Tht),r&&!i&&(n.c=!1),!r&&i&&(n.e=!1)),h=uG(n.a.Ve(t,e),42),u=uG(h.a,17).a,s=uG(h.b,17).a,o=!1,u<0?n.c||(o=!0):n.e||(o=!0),s<0?n.d||(o=!0):n.f||(o=!0),o?HXn(n,h,e):h}function UXn(n){var t,i,r,c;c=n.o,VK(),n.A.dc()||udn(n.A,lht)?t=c.b:(t=dNn(n.f),n.A.Hc((Qmn(),WRt))&&!n.B.Hc((oUn(),cKt))&&(t=e.Math.max(t,dNn(uG(AJ(n.p,(KQn(),kRt)),252))),t=e.Math.max(t,dNn(uG(AJ(n.p,_Rt),252)))),(i=fsn(n))&&(t=e.Math.max(t,i.b)),n.A.Hc(QRt)&&(n.q!=($Pn(),aRt)&&n.q!=cRt||(t=e.Math.max(t,eq(uG(AJ(n.b,(KQn(),kRt)),127))),t=e.Math.max(t,eq(uG(AJ(n.b,_Rt),127)))))),oM(gK(n.e.Tf().of((XYn(),H$t))))?c.b=e.Math.max(c.b,t):c.b=t,(r=n.f.i).d=0,r.a=t,rqn(n.f)}function GXn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;for(h=0;h<t.length;h++){for(a=n.Kc();a.Ob();)uG(a.Pb(),230).hg(h,t);for(f=0;f<t[h].length;f++){for(o=n.Kc();o.Ob();)uG(o.Pb(),230).ig(h,f,t);for(b=t[h][f].j,l=0;l<b.c.length;l++){for(u=n.Kc();u.Ob();)uG(u.Pb(),230).jg(h,f,l,t);for(u3(l,b.c.length),e=0,r=new w7(uG(b.c[l],12).b);l$(r.a)||l$(r.b);)for(i=uG(l$(r.a)?N3(r.a):N3(r.b),18),s=n.Kc();s.Ob();)uG(s.Pb(),230).gg(h,f,l,e++,i,t)}}}for(c=n.Kc();c.Ob();)uG(c.Pb(),230).fg()}function qXn(n,t){var e,i,r,c,a;for(n.b=uM(pK(oIn(t,(jYn(),gTt)))),n.c=uM(pK(oIn(t,vTt))),n.d=uG(oIn(t,Zyt),350),n.a=uG(oIn(t,vyt),282),aTn(t),r=(c=uG(l8(JJ(JJ(sin(sin(new fX(null,new h3(t.b,16)),new ke),new ye),new Me),new Te),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)).Kc();r.Ob();)e=uG(r.Pb(),18),uG(oIn(e,(GYn(),Tmt)),15).Jc(new og(n)),kfn(e,Tmt,null);for(i=c.Kc();i.Ob();)e=uG(i.Pb(),18),a=uG(oIn(e,(GYn(),jmt)),18),hYn(n,uG(oIn(e,ymt),15),a),kfn(e,ymt,null)}function XXn(n,t){var e,i,r,c,a,o,u;if(n.a){if(u=null,null!=(o=n.a.xe())?t.a+=""+o:null!=(a=n.a.mk())&&(-1!=(c=xL(a,$Cn(91)))?(s3(c,a.length+1),u=a.substr(c),t.a+=""+r1(null==a?IZn:(tJ(a),a),0,c)):t.a+=""+a),n.d&&0!=n.d.i){for(r=!0,t.a+="<",i=new DD(n.d);i.e!=i.i.gc();)e=uG(Zkn(i),89),r?r=!1:t.a+=TZn,XXn(e,t);t.a+=">"}null!=u&&(t.a+=""+u)}else n.e?null!=(o=n.e.zb)&&(t.a+=""+o):(t.a+="?",n.b?(t.a+=" super ",XXn(n.b,t)):n.f&&(t.a+=" extends ",XXn(n.f,t)))}function zXn(n){n.b=null,n.a=null,n.o=null,n.q=null,n.v=null,n.w=null,n.B=null,n.p=null,n.Q=null,n.R=null,n.S=null,n.T=null,n.U=null,n.V=null,n.W=null,n.bb=null,n.eb=null,n.ab=null,n.H=null,n.db=null,n.c=null,n.d=null,n.f=null,n.n=null,n.r=null,n.s=null,n.u=null,n.G=null,n.J=null,n.e=null,n.j=null,n.i=null,n.g=null,n.k=null,n.t=null,n.F=null,n.I=null,n.L=null,n.M=null,n.O=null,n.P=null,n.$=null,n.N=null,n.Z=null,n.cb=null,n.K=null,n.D=null,n.A=null,n.C=null,n._=null,n.fb=null,n.X=null,n.Y=null,n.gb=!1,n.hb=!1}function VXn(n){var t,i,r,c;if(r=bYn((!n.c&&(n.c=j2(Bsn(n.f))),n.c),0),0==n.e||0==n.a&&-1!=n.f&&n.e<0)return r;if(t=nun(n)<0?1:0,i=n.e,r.length,e.Math.abs(t0(n.e)),c=new QM,1==t&&(c.a+="-"),n.e>0)if((i-=r.length-t)>=0){for(c.a+="0.";i>Pot.length;i-=Pot.length)Xq(c,Pot);lF(c,Pot,t0(i)),JA(c,(s3(t,r.length+1),r.substr(t)))}else JA(c,r1(r,t,t0(i=t-i))),c.a+=".",JA(c,sQ(r,t0(i)));else{for(JA(c,(s3(t,r.length+1),r.substr(t)));i<-Pot.length;i+=Pot.length)Xq(c,Pot);lF(c,Pot,t0(-i))}return c.a}function WXn(n){var t,e,i,r,c;if(n.k!=(zIn(),dbt))return!1;if(n.j.c.length<=1)return!1;if(uG(oIn(n,(jYn(),JMt)),101)==($Pn(),cRt))return!1;if(Yyn(),(i=(n.q?n.q:(hZ(),hZ(),Vot))._b(LMt)?uG(oIn(n,LMt),203):uG(oIn(HQ(n),NMt),203))==djt)return!1;if(i!=wjt&&i!=bjt){if(r=uM(pK(Omn(n,ITt))),!(t=uG(oIn(n,CTt),140))&&(t=new OF(r,r,r,r)),c=Dgn(n,(KQn(),_Rt)),t.d+t.a+(c.gc()-1)*r>n.o.b)return!1;if(e=Dgn(n,kRt),t.d+t.a+(e.gc()-1)*r>n.o.b)return!1}return!0}function QXn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d;t.Ug("Orthogonal edge routing",1),s=uM(pK(oIn(n,(jYn(),STt)))),e=uM(pK(oIn(n,gTt))),i=uM(pK(oIn(n,vTt))),l=new NW(0,e),d=0,a=new N4(n.b,0),o=null,h=null,u=null,f=null;do{f=(h=a.b<a.d.gc()?(MK(a.b<a.d.gc()),uG(a.d.Xb(a.c=a.b++),30)):null)?h.a:null,o&&(Vzn(o,d),d+=o.c.a),w=YVn(l,n,u,f,o?d+i:d),r=!o||UA(u,(oFn(),LSt)),c=!h||UA(f,(oFn(),LSt)),w>0?(b=(w-1)*e,o&&(b+=i),h&&(b+=i),b<s&&!r&&!c&&(b=s),d+=b):!r&&!c&&(d+=s),o=h,u=f}while(h);n.f.a=d,t.Vg()}function JXn(n,t){var e,i,r,c,a,o,u,s,h,f;if(h=null,n.d&&(h=uG(U1(n.d,t),142)),!h){if(f=(c=n.a.vi()).i,!n.d||oS(n.d)!=f){for(u=new Ym,n.d&&xun(u,n.d),o=s=u.f.c+u.i.c;o<f;++o)i=uG(zrn(c,o),142),(e=uG(null==(r=tdn(n.e,i).xe())?VAn(u.f,null,i):kgn(u.i,r,i),142))&&e!=i&&(null==r?VAn(u.f,null,e):kgn(u.i,r,e));if(u.f.c+u.i.c!=f)for(a=0;a<s;++a)i=uG(zrn(c,a),142),(e=uG(null==(r=tdn(n.e,i).xe())?VAn(u.f,null,i):kgn(u.i,r,i),142))&&e!=i&&(null==r?VAn(u.f,null,e):kgn(u.i,r,e));n.d=u}h=uG(U1(n.d,t),142)}return h}function YXn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w;return l=oM(gK(oIn(t,(jYn(),EMt)))),b=null,a==(can(),Vjt)&&r.c.i==i?b=r.c:a==Wjt&&r.d.i==i&&(b=r.d),(h=o)&&l&&!b?(kD(h.e,r),w=e.Math.max(uM(pK(oIn(h.d,tMt))),uM(pK(oIn(r,tMt)))),kfn(h.d,tMt,w)):(KQn(),f=FRt,b?f=b.j:sN(uG(oIn(i,JMt),101))&&(f=a==Vjt?_Rt:kRt),s=nzn(n,t,i,a,f,r),u=K9((HQ(i),r)),a==Vjt?(c2(u,uG(zq(s.j,0),12)),u2(u,c)):(c2(u,c),u2(u,uG(zq(s.j,0),12))),h=new Sdn(r,u,s,uG(oIn(s,(GYn(),rmt)),12),a,!b)),UNn(n.a,r,new $B(h.d,t,a)),h}function ZXn(){var n;ZXn=E,GFt=new Xk,HFt=Inn($ot,zZn,2,0,6,1),zFt=S3(Zhn(33,58),Zhn(1,26)),VFt=S3(Zhn(97,122),Zhn(65,90)),WFt=Zhn(48,57),qFt=S3(zFt,0),XFt=S3(VFt,WFt),QFt=S3(S3(0,Zhn(1,6)),Zhn(33,38)),JFt=S3(S3(WFt,Zhn(65,70)),Zhn(97,102)),e_t=S3(qFt,tyn("-_.!~*'()")),i_t=S3(XFt,mmn("-_.!~*'()")),tyn(zit),mmn(zit),S3(e_t,tyn(";:@&=+$,")),S3(i_t,mmn(";:@&=+$,")),YFt=tyn(":/?#"),ZFt=mmn(":/?#"),n_t=tyn("/?#"),t_t=mmn("/?#"),(n=new ek).a.zc("jar",n),n.a.zc("zip",n),n.a.zc("archive",n),hZ(),UFt=new nT(n)}function nzn(n,t,e,i,r,c){var a,o,u,s,h,f;return a=null,s=i==(can(),Vjt)?c.c:c.d,u=pgn(t),s.i==e?(a=uG(cQ(n.b,s),10))||(kfn(a=DJn(s,uG(oIn(e,(jYn(),JMt)),101),r,VHn(s),null,s.n,s.o,u,t),(GYn(),rmt),s),vJ(n.b,s,a)):(o=wPn(a=DJn((h=new Yn,f=uM(pK(oIn(t,(jYn(),dTt))))/2,vfn(h,QMt,f),h),uG(oIn(e,JMt),101),r,i==Vjt?-1:1,null,new sj,new MO(0,0),u,t),e,i),kfn(a,(GYn(),rmt),o),vJ(n.b,o,a)),uG(oIn(t,(GYn(),Hpt)),21).Fc((r_n(),tpt)),sN(uG(oIn(t,(jYn(),JMt)),101))?kfn(t,JMt,($Pn(),oRt)):kfn(t,JMt,($Pn(),uRt)),a}function tzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;o=0,b=0,u=q1(n.g,n.g.length),c=n.e,a=n.j,i=n.b,r=n.c;do{for(l=0,s=new Ww(n.q);s.a<s.c.c.length;)f=QVn(n,uG(N3(s),10)),e=!0,(n.r==(THn(),Ijt)||n.r==Ljt)&&(e=oM(gK(f.b))),uG(f.a,17).a<0&&e?(++l,u=q1(n.g,n.g.length),n.e=n.e+uG(f.a,17).a,b+=c-n.e,c=n.e+uG(f.a,17).a,a=n.j,i=T3(n.b),r=T3(n.c)):(n.g=q1(u,u.length),n.e=c,n.b=(WW(i),i?new Z_(i):rG(new Ww(i))),n.c=(WW(r),r?new Z_(r):rG(new Ww(r))),n.j=a);++o,h=0!=l&&oM(gK(t.Kb(new WO(xwn(b),xwn(o)))))}while(h)}function ezn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;return a=n.f,l=t.f,o=a==(_Rn(),DAt)||a==RAt,u=a==xAt||a==KAt,b=l==xAt||l==KAt,s=a==xAt||a==DAt,w=l==xAt||l==DAt,!o||l!=DAt&&l!=RAt?u&&b?n.f==KAt?n:t:s&&w?(a==xAt?(f=n,h=t):(f=t,h=n),d=i.j+i.f,g=f.e+r.f,p=e.Math.max(d,g)-e.Math.min(i.j,f.e),c=(f.d+r.g-i.i)*p,m=i.i+i.g,v=h.d+r.g,c<=(e.Math.max(m,v)-e.Math.min(i.i,h.d))*(h.e+r.f-i.j)?n.f==xAt?n:t:n.f==DAt?n:t):n:n.f==RAt?n:t}function izn(n,t){var e,i,r,c,a;if(kfn(t,(OQn(),xPt),0),r=uG(oIn(t,LPt),39),0==t.d.b)r?(a=uM(pK(oIn(r,FPt)))+n.b+Mgn(n,r,t),kfn(t,FPt,a)):kfn(t,FPt,0);else{for(e=new Tp(Fkn(new Mp(t).a.d,0));Jj(e.a);)izn(n,uG(I6(e.a),65).c);i=uG(B$(new Tp(Fkn(new Mp(t).a.d,0))),39),c=(uM(pK(oIn(uG(hx(new Tp(Fkn(new Mp(t).a.d,0))),39),FPt)))+uM(pK(oIn(i,FPt))))/2,r?(a=uM(pK(oIn(r,FPt)))+n.b+Mgn(n,r,t),kfn(t,FPt,a),kfn(t,xPt,uM(pK(oIn(t,FPt)))-c),ZVn(n,t)):kfn(t,FPt,c)}}function rzn(n){var t,e,i,r,c,a,o,u,s,h;for(s=n.e.a.c.length,c=new Ww(n.e.a);c.a<c.c.c.length;)uG(N3(c),125).j=!1;for(n.i=Inn(YHt,W1n,28,s,15,1),n.g=Inn(YHt,W1n,28,s,15,1),n.n=new Zm,r=0,h=new Zm,o=new Ww(n.e.a);o.a<o.c.c.length;)(a=uG(N3(o),125)).d=r++,0==a.b.a.c.length&&kD(n.n,a),Ohn(h,a.g);for(t=0,i=new Ww(h);i.a<i.c.c.length;)(e=uG(N3(i),218)).c=t++,e.f=!1;u=h.c.length,null==n.b||n.b.length<u?(n.b=Inn(eUt,I0n,28,u,15,1),n.c=Inn(ZHt,B2n,28,u,16,1)):AM(n.c),n.d=h,n.p=new dx(orn(n.d.c.length)),n.j=1}function czn(n,t){var e,i,r,c,a,o,u,s,h;if(!(t.e.c.length<=1)){for(n.f=t,n.d=uG(oIn(n.f,(Bjn(),rlt)),391),n.g=uG(oIn(n.f,ult),17).a,n.e=uM(pK(oIn(n.f,clt))),n.c=uM(pK(oIn(n.f,ilt))),nW(n.b),r=new Ww(n.f.c);r.a<r.c.c.length;)i=uG(N3(r),289),JHn(n.b,i.c,i,null),JHn(n.b,i.d,i,null);for(o=n.f.e.c.length,n.a=Jq(eUt,[zZn,I0n],[109,28],15,[o,o],2),s=new Ww(n.f.e);s.a<s.c.c.length;)Qqn(n,u=uG(N3(s),153),n.a[u.a]);for(n.i=Jq(eUt,[zZn,I0n],[109,28],15,[o,o],2),c=0;c<o;++c)for(a=0;a<o;++a)h=1/((e=n.a[c][a])*e),n.i[c][a]=h}}function azn(n,t){var e,i,r,c,a,o,u,s,h,f,l;if((o=t.ah())||t.Ug(W3n,1),a=1/(e=uG(oIn(n,(GYn(),wmt)),15)).gc(),t._g())for(t.bh("ELK Layered uses the following "+e.gc()+" modules:"),l=0,f=e.Kc();f.Ob();)s=uG(f.Pb(),47),i=(l<10?"0":"")+l++,t.bh(" Slot "+i+": "+Ij(Tbn(s)));for(h=e.Kc();h.Ob();){if(s=uG(h.Pb(),47),t.$g())return;s.Kf(n,t.eh(a))}for(c=new Ww(n.b);c.a<c.c.c.length;)r=uG(N3(c),30),Ohn(n.a,r.a),r.a.c.length=0;for(u=new Ww(n.a);u.a<u.c.c.length;)a2(uG(N3(u),10),null);n.b.c.length=0,o||t.Vg()}function ozn(n){var t,e,i,r,c,a,o,u,s,h,f;if(u=new Zm,!vR(n,(GYn(),Rpt)))return u;for(i=uG(oIn(n,Rpt),15).Kc();i.Ob();)Dzn(t=uG(i.Pb(),10),n),mv(u.c,t);for(r=new Ww(n.b);r.a<r.c.c.length;)for(a=new Ww(uG(N3(r),30).a);a.a<a.c.c.length;)(c=uG(N3(a),10)).k==(zIn(),lbt)&&(o=uG(oIn(c,Kpt),10))&&(o2(s=new lOn,c),NLn(s,uG(oIn(c,Fpt),64)),h=uG(zq(o.j,0),12),c2(f=new UZ,s),u2(f,h));for(e=new Ww(u);e.a<e.c.c.length;)a2(t=uG(N3(e),10),uG(zq(n.b,n.b.c.length-1),30));return u}function uzn(n,t,e){var i,r,c,a,o,u,s,h;for(h=new Zm,c=0,fan(s=new e4(0,e),new dln(0,0,s,e)),r=0,u=new DD(n);u.e!=u.i.gc();)o=uG(Zkn(u),27),i=uG(zq(s.a,s.a.c.length-1),172),(r+o.g+(0==uG(zq(s.a,0),172).b.c.length?0:e)>t||oM(gK(zDn(o,(S_n(),nAt)))))&&(r=0,c+=s.b+e,mv(h.c,s),fan(s=new e4(c,e),i=new dln(0,s.f,s,e)),r=0),0==i.b.c.length||!oM(gK(zDn(R0(o),(S_n(),uAt))))&&(o.f>=i.o&&o.f<=i.f||.5*i.a<=o.f&&1.5*i.a>=o.f)?ipn(i,o):(fan(s,a=new dln(i.s+i.r+e,s.f,s,e)),ipn(a,o)),r=o.i+o.g;return mv(h.c,s),h}function szn(n){var t,e,i,r;if(!(null==n.b||n.b.length<=2||n.a)){for(t=0,r=0;r<n.b.length;){for(t!=r?(n.b[t]=n.b[r++],n.b[t+1]=n.b[r++]):r+=2,e=n.b[t+1];r<n.b.length&&!(e+1<n.b[r]);)if(e+1==n.b[r])n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2;else if(e>=n.b[r+1])r+=2;else{if(!(e<n.b[r+1]))throw hv(new Ky("Token#compactRanges(): Internel Error: ["+n.b[t]+","+n.b[t+1]+"] ["+n.b[r]+","+n.b[r+1]+"]"));n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2}t+=2}t!=n.b.length&&(i=Inn(YHt,W1n,28,t,15,1),qGn(n.b,0,i,0,t),n.b=i),n.a=!0}}function hzn(n,t){var e,i,r,c,a,o,u;for(a=kz(n.a).Kc();a.Ob();){if((c=uG(a.Pb(),18)).b.c.length>0)for(i=new Z_(uG(Y9(n.a,c),21)),hZ(),f$(i,new Gd(t)),r=new N4(c.b,0);r.b<r.d.gc();){switch(MK(r.b<r.d.gc()),e=uG(r.d.Xb(r.c=r.b++),72),o=-1,uG(oIn(e,(jYn(),Xyt)),278).g){case 1:o=i.c.length-1;break;case 0:o=DSn(i);break;case 2:o=0}-1!=o&&(u3(o,i.c.length),kD((u=uG(i.c[o],249)).b.b,e),uG(oIn(HQ(u.b.c.i),(GYn(),Hpt)),21).Fc((r_n(),npt)),uG(oIn(HQ(u.b.c.i),Hpt),21).Fc(Ygt),LQ(r),kfn(e,omt,c))}c2(c,null),u2(c,null)}}function fzn(n,t){var e,i,r,c;return e=new Rn,1==(r=2==(r=(i=uG(l8(YJ(new fX(null,new h3(n.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21)).gc())?1:0)&&_A(Kmn(uG(l8(JJ(i.Lc(),new Kn),tsn(Hvn(0),new tn)),168).a,2),0)&&(r=0),1==(c=2==(c=(i=uG(l8(YJ(new fX(null,new h3(t.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[Out,Iut]))),21)).gc())?1:0)&&_A(Kmn(uG(l8(JJ(i.Lc(),new Fn),tsn(Hvn(0),new tn)),168).a,2),0)&&(c=0),r<c?-1:r==c?0:1}function lzn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(c=oM(gK(zDn(t=h0(n),(jYn(),sMt)))),h=0,r=0,s=new DD((!n.e&&(n.e=new f_(aFt,n,7,4)),n.e));s.e!=s.i.gc();)a=(o=BNn(u=uG(Zkn(s),74)))&&c&&oM(gK(zDn(u,hMt))),l=lCn(uG(zrn((!u.c&&(u.c=new f_(cFt,u,5,8)),u.c),0),84)),o&&a?++r:o&&!a?++h:R0(l)==t||l==t?++r:++h;for(i=new DD((!n.d&&(n.d=new f_(aFt,n,8,5)),n.d));i.e!=i.i.gc();)a=(o=BNn(e=uG(Zkn(i),74)))&&c&&oM(gK(zDn(e,hMt))),f=lCn(uG(zrn((!e.b&&(e.b=new f_(cFt,e,4,7)),e.b),0),84)),o&&a?++h:o&&!a?++r:R0(f)==t||f==t?++h:++r;return h-r}function bzn(n,t){var e,i,r,c,a,o,u,s,h;if(t.Ug("Edge splitting",1),n.b.c.length<=2)t.Vg();else{for(MK((c=new N4(n.b,0)).b<c.d.gc()),a=uG(c.d.Xb(c.c=c.b++),30);c.b<c.d.gc();)for(r=a,MK(c.b<c.d.gc()),a=uG(c.d.Xb(c.c=c.b++),30),o=new Ww(r.a);o.a<o.c.c.length;)for(u=new Ww(uG(N3(o),10).j);u.a<u.c.c.length;)for(i=new Ww(uG(N3(u),12).g);i.a<i.c.c.length;)(s=(e=uG(N3(i),18)).d.i.c)!=r&&s!=a&&xFn(e,(Hb(h=new gMn(n),(zIn(),wbt)),kfn(h,(GYn(),rmt),e),kfn(h,(jYn(),JMt),($Pn(),cRt)),a2(h,a),h));t.Vg()}}function wzn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(h=new Zm,l=new ek,a=t.b,r=0;r<a.c.length;r++){for(s=(u3(r,a.c.length),uG(a.c[r],30)).a,h.c.length=0,c=0;c<s.c.length;c++)(o=n.a[r][c]).p=c,o.k==(zIn(),gbt)&&mv(h.c,o),Y8(uG(zq(t.b,r),30).a,c,o),o.j.c.length=0,Ohn(o.j,uG(uG(zq(n.b,r),15).Xb(c),16)),L_(uG(oIn(o,(jYn(),JMt)),101))||kfn(o,JMt,($Pn(),rRt));for(i=new Ww(h);i.a<i.c.c.length;)f=ZBn(e=uG(N3(i),10)),l.a.zc(f,l),l.a.zc(e,l)}for(u=l.a.ec().Kc();u.Ob();)o=uG(u.Pb(),10),hZ(),f$(o.j,(Cln(),Ywt)),o.i=!0,qLn(o)}function dzn(n){var t,e,i,r,c;return null!=n.g?n.g:n.a<32?(n.g=YQn(Bsn(n.f),t0(n.e)),n.g):(r=bYn((!n.c&&(n.c=j2(Bsn(n.f))),n.c),0),0==n.e?r:(t=(!n.c&&(n.c=j2(Bsn(n.f))),n.c).e<0?2:1,e=r.length,i=-n.e+e-t,(c=new WM).a+=""+r,n.e>0&&i>=-6?i>=0?Ex(c,e-t0(n.e),String.fromCharCode(46)):(psn(c,t-1,t-1,"0."),Ex(c,t+1,mvn(Pot,0,-t0(i)-1))):(e-t>=1&&(Ex(c,t,String.fromCharCode(46)),++e),Ex(c,e,String.fromCharCode(69)),i>0&&Ex(c,++e,String.fromCharCode(43)),Ex(c,++e,""+oV(Bsn(i)))),n.g=c.a,n.g))}function gzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;r=uM(pK(oIn(t,(jYn(),AMt)))),l=4,c=3,M=20/(y=uG(oIn(t,OTt),17).a),b=!1,s=0,o=vZn;do{for(a=1!=s,f=0!=s,T=0,m=0,k=(g=n.a).length;m<k;++m)(w=g[m]).f=null,aQn(n,w,a,f,r),T+=e.Math.abs(w.a);do{u=tGn(n,t)}while(u);for(p=0,v=(d=n.a).length;p<v;++p)if(0!=(i=uV(w=d[p]).a))for(h=new Ww(w.e);h.a<h.c.c.length;)uG(N3(h),10).n.b+=i;0==s||1==s?--l<=0&&(T<o||-l>y)?(s=2,o=vZn):0==s?(s=1,o=T):(s=0,o=T):(b=T>=o||o-T<M,o=T,b&&--c)}while(!(b&&c<=0))}function pzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w;for(w=new Ym,c=n.a.ec().Kc();c.Ob();)vJ(w,i=uG(c.Pb(),177),e.af(i));for(WW(n),f$(a=n?new Z_(n):rG(n.a.ec().Kc()),new Cd(w)),o=g8(a),u=new C$(t),VAn((b=new Ym).f,t,u);0!=o.a.gc();){for(s=null,h=null,f=null,r=o.a.ec().Kc();r.Ob();)if(i=uG(r.Pb(),177),uM(pK(DA(FX(w.f,i))))<=M0n){if(PV(b,i.a)&&!PV(b,i.b)){h=i.b,f=i.a,s=i;break}if(PV(b,i.b)&&!PV(b,i.a)){h=i.a,f=i.b,s=i;break}}if(!s)break;l=new C$(h),kD(uG(DA(FX(b.f,f)),225).a,l),VAn(b.f,h,l),o.a.Bc(s)}return u}function mzn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug("Depth-first cycle removal",1),u=(s=t.a).c.length,n.c=new Zm,n.d=Inn(ZHt,B2n,28,u,16,1),n.a=Inn(ZHt,B2n,28,u,16,1),n.b=new Zm,c=0,o=new Ww(s);o.a<o.c.c.length;)(a=uG(N3(o),10)).p=c,P6(qgn(a))&&kD(n.c,a),++c;for(h=new Ww(n.c);h.a<h.c.c.length;)LAn(n,uG(N3(h),10));for(r=0;r<u;r++)n.d[r]||(u3(r,s.c.length),LAn(n,uG(s.c[r],10)));for(i=new Ww(n.b);i.a<i.c.c.length;)pqn(uG(N3(i),18),!0),kfn(t,(GYn(),Lpt),(qx(),!0));n.c=null,n.d=null,n.a=null,n.b=null,e.Vg()}function vzn(n,t){var i,r,c,a,o,u;return l_n(),a=t.c-(n.c+n.b),c=n.c-(t.c+t.b),o=n.d-(t.d+t.a),i=t.d-(n.d+n.a),r=e.Math.max(c,a),u=e.Math.max(o,i),YN(),oan(I9n),(e.Math.abs(r)<=I9n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:KL(isNaN(r),isNaN(0)))>=0^(oan(I9n),(e.Math.abs(u)<=I9n||0==u||isNaN(u)&&isNaN(0)?0:u<0?-1:u>0?1:KL(isNaN(u),isNaN(0)))>=0)?e.Math.max(u,r):(oan(I9n),(e.Math.abs(r)<=I9n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:KL(isNaN(r),isNaN(0)))>0?e.Math.sqrt(u*u+r*r):-e.Math.sqrt(u*u+r*r))}function kzn(n,t){var e,i,r,c,a;if(t)if(!n.a&&(n.a=new ck),2!=n.e)if(1!=t.e)0!=(a=n.a.a.c.length)?0!=(c=uG(DQ(n.a,a-1),122)).e&&10!=c.e||0!=t.e&&10!=t.e?zv(n.a,t):(0==t.e||t.Mm().length,0==c.e?(e=new VM,(i=c.Km())>=P0n?VA(e,Ogn(i)):TQ(e,i&D1n),c=new F1(10,null,0),GV(n.a,c,a-1)):(c.Mm().length,VA(e=new VM,c.Mm())),0==t.e?(i=t.Km())>=P0n?VA(e,Ogn(i)):TQ(e,i&D1n):VA(e,t.Mm()),uG(c,530).b=e.a):zv(n.a,t);else for(r=0;r<t.Pm();r++)kzn(n,t.Lm(r));else zv(n.a,t)}function yzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(!e.dc()){for(a=0,h=0,l=uG((i=e.Kc()).Pb(),17).a;a<t.f;){if(a==l&&(h=0,l=i.Ob()?uG(i.Pb(),17).a:t.f+1),a!=h)for(b=uG(zq(n.b,a),30),f=uG(zq(n.b,h),30),s=new Ww(T3(b.a));s.a<s.c.c.length;)if($jn(u=uG(N3(s),10),f.a.c.length,f),0==h)for(c=new Ww(T3(qgn(u)));c.a<c.c.c.length;)pqn(r=uG(N3(c),18),!0),kfn(n,(GYn(),Lpt),(qx(),!0)),gVn(n,r,1);++h,++a}for(o=new N4(n.b,0);o.b<o.d.gc();)MK(o.b<o.d.gc()),0==uG(o.d.Xb(o.c=o.b++),30).a.c.length&&LQ(o)}}function Mzn(n,t,e){var i,r,c;if((r=uG(oIn(t,(jYn(),vyt)),282))!=(RIn(),Vgt)){switch(e.Ug("Horizontal Compaction",1),n.a=t,vT(i=new w$n(((c=new Sen).d=t,c.c=uG(oIn(c.d,Vyt),223),F_n(c),VVn(c),rBn(c),c.a)),n.b),1===uG(oIn(t,myt),431).g?pT(i,new Kon(n.a)):pT(i,(fZ(),qut)),r.g){case 1:kxn(i);break;case 2:kxn(GWn(i,(xdn(),YDt)));break;case 3:kxn(mT(GWn(kxn(i),(xdn(),YDt)),new gr));break;case 4:kxn(mT(GWn(kxn(i),(xdn(),YDt)),new Sg(c)));break;case 5:kxn(gT(i,idt))}GWn(i,(xdn(),JDt)),i.e=!0,UWn(c),e.Vg()}}function Tzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(h=(a=t.b).o,u=a.d,i=uM(pK(eyn(a,(jYn(),dTt)))),r=uM(pK(eyn(a,pTt))),s=uM(pK(eyn(a,PTt))),pG(o=new $k,u.d,u.c,u.a,u.b),l=PBn(t,i,r,s),p=new Ww(t.d);p.a<p.c.c.length;){for(w=(g=uG(N3(p),105)).f.a.ec().Kc();w.Ob();)c=(b=uG(w.Pb(),340)).a,f=sCn(b),m=new Uk,ZPn(b,b.c,l,m),EIn(b,f,l,m),ZPn(b,b.d,l,m),e=m,e=n.ng(b,f,e),BY(c.a),Qon(c.a,e),kS(new fX(null,new h3(e,16)),new GC(h,o));(d=g.i)&&(qPn(g,d,l,r),Jvn(h,o,v=new eN(d.g)),JF(v,d.j),Jvn(h,o,v))}pG(u,o.d,o.c,o.a,o.b)}function jzn(n,t,e,i,r,c,a,o){var u,s,h,f;switch(u=n7(Uhn(cT(_At,1),EZn,238,0,[t,e,i,r])),f=null,n.b.g){case 1:f=n7(Uhn(cT(TAt,1),EZn,535,0,[new Go,new Bo,new Ho]));break;case 0:f=n7(Uhn(cT(TAt,1),EZn,535,0,[new Ho,new Bo,new Go]));break;case 2:f=n7(Uhn(cT(TAt,1),EZn,535,0,[new Bo,new Go,new Ho]))}for(h=new Ww(f);h.a<h.c.c.length;)s=uG(N3(h),535),u.c.length>1&&(u=s.Hg(u,n.a,o));return 1==u.c.length?uG(zq(u,u.c.length-1),238):2==u.c.length?ezn((u3(0,u.c.length),uG(u.c[0],238)),(u3(1,u.c.length),uG(u.c[1],238)),a,c):null}function Ezn(n,t,e){var i,r,c,a,o,u,s;for(e.Ug("Find roots",1),n.a.c.length=0,r=Fkn(t.b,0);r.b!=r.d.c;)0==(i=uG(I6(r),39)).b.b&&(kfn(i,(OQn(),UPt),(qx(),!0)),kD(n.a,i));switch(n.a.c.length){case 0:kfn(c=new wln(0,t,"DUMMY_ROOT"),(OQn(),UPt),(qx(),!0)),kfn(c,jPt,!0),aq(t.b,c);break;case 1:break;default:for(a=new wln(0,t,H9n),u=new Ww(n.a);u.a<u.c.c.length;)kfn(s=new uZ(a,o=uG(N3(u),39)),(OQn(),jPt),(qx(),!0)),aq(a.a.a,s),aq(a.d,s),aq(o.b,s),kfn(o,UPt,!1);kfn(a,(OQn(),UPt),(qx(),!0)),kfn(a,jPt,!0),aq(t.b,a)}e.Vg()}function Szn(n){var t,i,r,c,a,o;for(Prn(n.a,new Zn),i=new Ww(n.a);i.a<i.c.c.length;)t=uG(N3(i),225),r=YF(D$(uG(n.b,68).c),uG(t.b,68).c),xht?(o=uG(n.b,68).b,a=uG(t.b,68).b,e.Math.abs(r.a)>=e.Math.abs(r.b)?(r.b=0,a.d+a.a>o.d&&a.d<o.d+o.a&&RG(r,e.Math.max(o.c-(a.c+a.b),a.c-(o.c+o.b)))):(r.a=0,a.c+a.b>o.c&&a.c<o.c+o.b&&RG(r,e.Math.max(o.d-(a.d+a.a),a.d-(o.d+o.a))))):RG(r,OGn(uG(n.b,68),uG(t.b,68))),c=e.Math.sqrt(r.a*r.a+r.b*r.b),RG(r,c=EPn(Cht,t,c,r)),JX(uG(t.b,68),r),Prn(t.a,new Dd(r)),uG(Cht.b,68),Rnn(Cht,Iht,t)}function Pzn(n){var t,i,r,c,a,o,u,s,f,l,b,w;for(n.f=new ak,u=0,r=0,c=new Ww(n.e.b);c.a<c.c.c.length;)for(o=new Ww(uG(N3(c),30).a);o.a<o.c.c.length;){for((a=uG(N3(o),10)).p=u++,i=new Fz(ix(Xgn(a).a.Kc(),new h));hDn(i);)uG(N9(i),18).p=r++;for(t=WXn(a),l=new Ww(a.j);l.a<l.c.c.length;)f=uG(N3(l),12),t&&(w=f.a.b)!=e.Math.floor(w)&&(s=w-W4(Bsn(e.Math.round(w))),f.a.b-=s),(b=f.n.b+f.a.b)!=e.Math.floor(b)&&(s=b-W4(Bsn(e.Math.round(b))),f.n.b-=s)}n.g=u,n.b=r,n.i=Inn(lSt,EZn,412,u,0,1),n.c=Inn(uSt,EZn,655,r,0,1),n.d.a.$b()}function Czn(n){var t,e,i,r,c,a,o,u,s;if(n.Pj())if(u=n.Qj(),n.i>0){if(t=new AA(n.i,n.g),c=(e=n.i)<100?null:new cj(e),n.Tj())for(i=0;i<n.i;++i)a=n.g[i],c=n.Vj(a,c);if(V9(n),r=1==e?n.Ij(4,zrn(t,0),null,0,u):n.Ij(6,t,null,-1,u),n.Mj()){for(i=new nR(t);i.e!=i.i.gc();)c=n.Oj(nyn(i),c);c?(c.nj(r),c.oj()):n.Jj(r)}else c?(c.nj(r),c.oj()):n.Jj(r)}else V9(n),n.Jj(n.Ij(6,(hZ(),zot),null,-1,u));else if(n.Mj())if(n.i>0){for(o=n.g,s=n.i,V9(n),c=s<100?null:new cj(s),i=0;i<s;++i)a=o[i],c=n.Oj(a,c);c&&c.oj()}else V9(n);else V9(n)}function Izn(n,t,i){var r,c,a,o,u,s,h,f,l;for(thn(this),i==(l0(),USt)?FV(this.r,n):FV(this.w,n),f=M0n,h=T0n,o=t.a.ec().Kc();o.Ob();)c=uG(o.Pb(),42),u=uG(c.a,464),(s=(r=uG(c.b,18)).c)==n&&(s=r.d),FV(u==USt?this.r:this.w,s),l=(KQn(),LRt).Hc(s.j)?uM(pK(oIn(s,(GYn(),Mmt)))):Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a])).b,f=e.Math.min(f,l),h=e.Math.max(h,l);for(NIn(this,(KQn(),LRt).Hc(n.j)?uM(pK(oIn(n,(GYn(),Mmt)))):Gfn(Uhn(cT(PNt,1),zZn,8,0,[n.i.n,n.n,n.a])).b,f,h),a=t.a.ec().Kc();a.Ob();)c=uG(a.Pb(),42),HOn(this,uG(c.b,18));this.o=!1}function Ozn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;return e=8191&n.l,i=n.l>>13|(15&n.m)<<9,r=n.m>>4&8191,c=n.m>>17|(255&n.h)<<5,a=(1048320&n.h)>>8,g=i*(o=8191&t.l),p=r*o,m=c*o,v=a*o,0!=(u=t.l>>13|(15&t.m)<<9)&&(g+=e*u,p+=i*u,m+=r*u,v+=c*u),0!=(s=t.m>>4&8191)&&(p+=e*s,m+=i*s,v+=r*s),0!=(h=t.m>>17|(255&t.h)<<5)&&(m+=e*h,v+=i*h),0!=(f=(1048320&t.h)>>8)&&(v+=e*f),b=((d=e*o)>>22)+(g>>9)+((262143&p)<<4)+((31&m)<<17),w=(p>>18)+(m>>5)+((4095&v)<<8),w+=(b+=(l=(d&f0n)+((511&g)<<13))>>22)>>22,p$(l&=f0n,b&=f0n,w&=l0n)}function Azn(n){var t,i,r,c,a,o,u;if(0!=(u=uG(zq(n.j,0),12)).g.c.length&&0!=u.e.c.length)throw hv(new kM("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(0!=u.g.c.length){for(a=M0n,i=new Ww(u.g);i.a<i.c.c.length;)t=uG(N3(i),18),r=uG(oIn(o=t.d.i,(jYn(),TMt)),140),a=e.Math.min(a,o.n.a-r.b);return new Ul(WW(a))}if(0!=u.e.c.length){for(c=T0n,i=new Ww(u.e);i.a<i.c.c.length;)t=uG(N3(i),18),r=uG(oIn(o=t.c.i,(jYn(),TMt)),140),c=e.Math.max(c,o.n.a+o.o.a+r.c);return new Ul(WW(c))}return gy(),gy(),wat}function Lzn(n,t){var e,i,r,c,a,o;if(n.ol()){if(n.i>4){if(!n.fk(t))return!1;if(n.al()){if(o=(e=(i=uG(t,54)).Eh())==n.e&&(n.ml()?i.yh(i.Fh(),n.il())==n.jl():-1-i.Fh()==n.Lj()),n.nl()&&!o&&!e&&i.Jh())for(r=0;r<n.i;++r)if(xA(n.pl(uG(n.g[r],58)))===xA(t))return!0;return o}if(n.ml()&&!n.ll()){if(xA(c=uG(t,58).Mh(lMn(uG(n.Lk(),19))))===xA(n.e))return!0;if(null==c||!uG(c,58).Vh())return!1}}if(a=sSn(n,t),n.nl()&&!a)for(r=0;r<n.i;++r)if(xA(i=n.pl(uG(n.g[r],58)))===xA(t))return!0;return a}return sSn(n,t)}function Nzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w;for(e.Ug("Interactive cycle breaking",1),h=new Zm,l=new Ww(t.a);l.a<l.c.c.length;)for((f=uG(N3(l),10)).p=1,b=jSn(f).a,s=jmn(f,(can(),Wjt)).Kc();s.Ob();)for(c=new Ww(uG(s.Pb(),12).g);c.a<c.c.c.length;)(w=(i=uG(N3(c),18)).d.i)!=f&&jSn(w).a<b&&mv(h.c,i);for(a=new Ww(h);a.a<a.c.c.length;)pqn(i=uG(N3(a),18),!0);for(h.c.length=0,u=new Ww(t.a);u.a<u.c.c.length;)(o=uG(N3(u),10)).p>0&&nAn(n,o,h);for(r=new Ww(h);r.a<r.c.c.length;)pqn(i=uG(N3(r),18),!0);h.c.length=0,e.Vg()}function $zn(n,t){var e,i,r,c,a,o,u;for(e=0,u=new Zm,c=new Ww(t);c.a<c.c.c.length;){switch(r=uG(N3(c),12),fbn(n.b,n.d[r.p]),u.c.length=0,r.i.k.g){case 0:Prn(uG(oIn(r,(GYn(),lmt)),10).j,new rp(u));break;case 1:m$(lln(JJ(new fX(null,new h3(r.i.j,16)),new cp(r))),new ap(u));break;case 3:kD(u,new WO(uG(oIn(r,(GYn(),rmt)),12),xwn(r.e.c.length+r.g.c.length)))}for(o=new Ww(u);o.a<o.c.c.length;)a=uG(N3(o),42),(i=Yj(n,uG(a.a,12)))>n.d[r.p]&&(e+=J8(n.b,i)*uG(a.b,17).a,A6(n.a,xwn(i)));for(;!LM(n.a);)lin(n.b,uG(xV(n.a),17).a)}return e}function Dzn(n,t){var e,i,r,c,a,o,u,s,h,f;if(h=uG(oIn(n,(GYn(),Fpt)),64),i=uG(zq(n.j,0),12),h==(KQn(),yRt)?NLn(i,KRt):h==KRt&&NLn(i,yRt),uG(oIn(t,(jYn(),DMt)),181).Hc((Qmn(),JRt))){if(u=uM(pK(oIn(n,TTt))),s=uM(pK(oIn(n,jTt))),a=uM(pK(oIn(n,yTt))),(o=uG(oIn(t,nTt),21)).Hc((eNn(),wRt)))for(e=s,f=n.o.a/2-i.n.a,c=new Ww(i.f);c.a<c.c.c.length;)(r=uG(N3(c),72)).n.b=e,r.n.a=f-r.o.a/2,e+=r.o.b+a;else if(o.Hc(gRt))for(c=new Ww(i.f);c.a<c.c.c.length;)(r=uG(N3(c),72)).n.a=u+n.o.a-i.n.a;D3(new Ad((zS(),new mY(t,!1,!1,new Ft))),new RB(null,n,!1))}}function xzn(n,t){var i,r,c,a,o,u,s;if(0!=t.c.length){for(hZ(),UX(t.c,t.c.length,null),r=uG(N3(c=new Ww(t)),154);c.a<c.c.c.length;)i=uG(N3(c),154),!gcn(r.e.c,i.e.c)||svn(qK(r.e).b,i.e.d)||svn(qK(i.e).b,r.e.d)?(fGn(n,r),r=i):(Ohn(r.k,i.k),Ohn(r.b,i.b),Ohn(r.c,i.c),Qon(r.i,i.i),Ohn(r.d,i.d),Ohn(r.j,i.j),a=e.Math.min(r.e.c,i.e.c),o=e.Math.min(r.e.d,i.e.d),u=e.Math.max(r.e.c+r.e.b,i.e.c+i.e.b)-a,s=e.Math.max(r.e.d+r.e.a,i.e.d+i.e.a)-o,LG(r.e,a,o,u,s),$3(r.f,i.f),!r.a&&(r.a=i.a),Ohn(r.g,i.g),kD(r.g,i));fGn(n,r)}}function Rzn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(o=new Zm,r=new Ww(t.a);r.a<r.c.c.length;)for(a=new Ww(uG(N3(r),10).j);a.a<a.c.c.length;){for(s=null,v=0,k=(m=x4((c=uG(N3(a),12)).g)).length;v<k;++v)jsn((p=m[v]).d.i,e)||((g=YXn(n,t,e,p,p.c,(can(),Wjt),s))!=s&&mv(o.c,g),g.c&&(s=g));for(u=null,w=0,d=(b=x4(c.e)).length;w<d;++w)jsn((l=b[w]).c.i,e)||((g=YXn(n,t,e,l,l.d,(can(),Vjt),u))!=u&&mv(o.c,g),g.c&&(u=g))}for(f=new Ww(o);f.a<f.c.c.length;)h=uG(N3(f),452),-1!=Ten(t.a,h.a,0)||kD(t.a,h.a),h.c&&mv(i.c,h)}function Kzn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w;for((f=new eN(uG(zDn(n,(lIn(),HNt)),8))).a=e.Math.max(f.a-i.b-i.c,0),f.b=e.Math.max(f.b-i.d-i.a,0),(null==(c=pK(zDn(n,xNt)))||(tJ(c),c<=0))&&(c=1.3),o=new Zm,l=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));l.e!=l.i.gc();)a=new nK(uG(Zkn(l),27)),mv(o.c,a);switch(uG(zDn(n,RNt),320).g){case 3:w=fUn(o,t,f.a,f.b,(s=r,tJ(c),s));break;case 1:w=GGn(o,t,f.a,f.b,(h=r,tJ(c),h));break;default:w=Bzn(o,t,f.a,f.b,(u=r,tJ(c),u))}ZQn(n,(b=KJn(new Jrn(w),t,i,f.a,f.b,r,(tJ(c),c))).a,b.b,!1,!0)}function Fzn(n,t,e,i){var r,c,a,o,u,s;if((o=n.j)==(KQn(),FRt)&&t!=($Pn(),uRt)&&t!=($Pn(),sRt)&&(NLn(n,o=nGn(n,e)),!(n.q?n.q:(hZ(),hZ(),Vot))._b((jYn(),QMt))&&o!=FRt&&(0!=n.n.a||0!=n.n.b)&&kfn(n,QMt,aEn(n,o))),t==($Pn(),aRt)){switch(s=0,o.g){case 1:case 3:(c=n.i.o.a)>0&&(s=n.n.a/c);break;case 2:case 4:(r=n.i.o.b)>0&&(s=n.n.b/r)}kfn(n,(GYn(),bmt),s)}if(u=n.o,a=n.a,i)a.a=i.a,a.b=i.b,n.d=!0;else if(t!=uRt&&t!=sRt&&o!=FRt)switch(o.g){case 1:a.a=u.a/2;break;case 2:a.a=u.a,a.b=u.b/2;break;case 3:a.a=u.a/2,a.b=u.b;break;case 4:a.b=u.b/2}else a.a=u.a/2,a.b=u.b/2}function _zn(n){var t,e,i,r,c,a,o,u,s,h;if(n.Pj())if(h=n.Ej(),u=n.Qj(),h>0)if(t=new Hun(n.pj()),c=(e=h)<100?null:new cj(e),QK(n,e,t.g),r=1==e?n.Ij(4,zrn(t,0),null,0,u):n.Ij(6,t,null,-1,u),n.Mj()){for(i=new DD(t);i.e!=i.i.gc();)c=n.Oj(Zkn(i),c);c?(c.nj(r),c.oj()):n.Jj(r)}else c?(c.nj(r),c.oj()):n.Jj(r);else QK(n,n.Ej(),n.Fj()),n.Jj(n.Ij(6,(hZ(),zot),null,-1,u));else if(n.Mj())if((h=n.Ej())>0){for(o=n.Fj(),s=h,QK(n,h,o),c=s<100?null:new cj(s),i=0;i<s;++i)a=o[i],c=n.Oj(a,c);c&&c.oj()}else QK(n,n.Ej(),n.Fj());else QK(n,n.Ej(),n.Fj())}function Bzn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b;for(o=Inn(eUt,I0n,28,n.c.length,15,1),_jn(l=new Kz(new Hu),n),s=0,b=new Zm;0!=l.b.c.length;)if(a=uG(0==l.b.c.length?null:zq(l.b,0),163),s>1&&EX(a)*jX(a)/2>o[0]){for(c=0;c<b.c.length-1&&EX(a)*jX(a)/2>o[c];)++c;f=new Jrn(new C2(b,0,c+1)),h=EX(a)/jX(a),u=KJn(f,t,new Dk,e,i,r,h),JF(dL(f.e),u),kG(_Cn(l,f),D0n),_jn(l,new C2(b,c+1,b.c.length)),b.c.length=0,s=0,zX(o,o.length,0)}else null!=(0==l.b.c.length?null:zq(l.b,0))&&Con(l,0),s>0&&(o[s]=o[s-1]),o[s]+=EX(a)*jX(a),++s,mv(b.c,a);return b}function Hzn(n,t){var e,i,r,c;c=new Z_((e=t.b).j),r=0,(i=e.j).c.length=0,mW(uG(ssn(n.b,(KQn(),yRt),(gon(),Sdt)),15),e),r=cMn(c,r,new Br,i),mW(uG(ssn(n.b,yRt,Edt),15),e),r=cMn(c,r,new $r,i),mW(uG(ssn(n.b,yRt,jdt),15),e),mW(uG(ssn(n.b,kRt,Sdt),15),e),mW(uG(ssn(n.b,kRt,Edt),15),e),r=cMn(c,r,new Hr,i),mW(uG(ssn(n.b,kRt,jdt),15),e),mW(uG(ssn(n.b,KRt,Sdt),15),e),r=cMn(c,r,new Ur,i),mW(uG(ssn(n.b,KRt,Edt),15),e),r=cMn(c,r,new Gr,i),mW(uG(ssn(n.b,KRt,jdt),15),e),mW(uG(ssn(n.b,_Rt,Sdt),15),e),r=cMn(c,r,new Rr,i),mW(uG(ssn(n.b,_Rt,Edt),15),e),mW(uG(ssn(n.b,_Rt,jdt),15),e)}function Uzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;for(o=new Ww(t);o.a<o.c.c.length;)(c=uG(N3(o),239)).e=null,c.c=0;for(u=null,a=new Ww(t);a.a<a.c.c.length;)if(f=(c=uG(N3(a),239)).d[0],!e||f.k==(zIn(),dbt)){for(b=uG(oIn(f,(GYn(),Vpt)),15).Kc();b.Ob();)l=uG(b.Pb(),10),e&&l.k!=(zIn(),dbt)||((!c.e&&(c.e=new Zm),c.e).Fc(n.b[l.c.p][l.p]),++n.b[l.c.p][l.p].c);if(!e&&f.k==(zIn(),dbt)){if(u)for(h=uG(Y9(n.d,u),21).Kc();h.Ob();)for(s=uG(h.Pb(),10),r=uG(Y9(n.d,f),21).Kc();r.Ob();)i=uG(r.Pb(),10),IU(n.b[s.c.p][s.p]).Fc(n.b[i.c.p][i.p]),++n.b[i.c.p][i.p].c;u=f}}}function Gzn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w;for(i.Ug("Model order cycle breaking",1),n.a=0,n.b=0,l=new Zm,h=t.a.c.length,s=new Ww(t.a);s.a<s.c.c.length;)vR(u=uG(N3(s),10),(GYn(),imt))&&(h=e.Math.max(h,uG(oIn(u,imt),17).a+1));for(w=new Ww(t.a);w.a<w.c.c.length;)for(o=NAn(n,b=uG(N3(w),10),h),f=jmn(b,(can(),Wjt)).Kc();f.Ob();)for(a=new Ww(uG(f.Pb(),12).g);a.a<a.c.c.length;)NAn(n,(r=uG(N3(a),18)).d.i,h)<o&&mv(l.c,r);for(c=new Ww(l);c.a<c.c.c.length;)pqn(r=uG(N3(c),18),!0),kfn(t,(GYn(),Lpt),(qx(),!0));l.c.length=0,i.Vg()}function qzn(n,t,i){var r,c,a,o,u,s,h,f;for(c=t.d,a=i.d;c.a-a.a==0&&c.b-a.b==0;)o=!1,F$(t,250)&&F$(i,250)&&!o?(r=2,JF(c,new MO((s=YF(new eN(Wcn(u=uG(t,250).a)),Vcn(u))).a/e.Math.sqrt(s.a*s.a+s.b*s.b)*r,-s.b/e.Math.sqrt(s.a*s.a+s.b*s.b)*r)),r=s==(f=YF(new eN(Wcn(h=uG(i,250).a)),Vcn(h)))?-2:2,JF(c,new MO(f.a/e.Math.sqrt(f.a*f.a+f.b*f.b)*r,-f.b/e.Math.sqrt(f.a*f.a+f.b*f.b)*r)),o=!0):(c.a+=uRn(n,26)*G0n+uRn(n,27)*q0n-.5,c.b+=uRn(n,26)*G0n+uRn(n,27)*q0n-.5,a.a+=uRn(n,26)*G0n+uRn(n,27)*q0n-.5,a.b+=uRn(n,26)*G0n+uRn(n,27)*q0n-.5)}function Xzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;for(z8(u=kOn(t),new _d(uG(oIn(t,(jYn(),Kyt)),322))),z8(u,new Bd(uG(oIn(t,Oyt),298))),b=0,s=new Zm,r=new XJ(u);r.a!=r.b;)i=uG(rwn(r),36),JVn(n.c,i),b+=(f=uG(oIn(i,(GYn(),wmt)),15)).gc(),kD(s,new WO(i,f.Kc()));for(e.Ug("Recursive hierarchical layout",b),l=uG(uG(zq(s,s.c.length-1),42).b,51);l.Ob();)for(o=new Ww(s);o.a<o.c.c.length;)for(a=uG(N3(o),42),f=uG(a.b,51),c=uG(a.a,36);f.Ob();){if(F$(h=uG(f.Pb(),47),514)){if(c.e)break;h.Kf(c,e.eh(1));break}h.Kf(c,e.eh(1))}e.Vg()}function zzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Layer size calculation",1),f=M0n,h=T0n,c=!1,u=new Ww(n.b);u.a<u.c.c.length;)if((s=(o=uG(N3(u),30)).c).a=0,s.b=0,0!=o.a.c.length){for(c=!0,b=new Ww(o.a);b.a<b.c.c.length;)d=(l=uG(N3(b),10)).o,w=l.d,s.a=e.Math.max(s.a,d.a+w.b+w.c);g=(r=uG(zq(o.a,0),10)).n.b-r.d.d,r.k==(zIn(),lbt)&&(g-=uG(oIn(n,(jYn(),CTt)),140).d),i=(a=uG(zq(o.a,o.a.c.length-1),10)).n.b+a.o.b+a.d.a,a.k==lbt&&(i+=uG(oIn(n,(jYn(),CTt)),140).a),s.b=i-g,f=e.Math.min(f,g),h=e.Math.max(h,i)}c||(f=0,h=0),n.f.b=h-f,n.c.b-=f,t.Vg()}function Vzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;for(c=0,a=0,s=new Ww(n.a);s.a<s.c.c.length;)o=uG(N3(s),10),c=e.Math.max(c,o.d.b),a=e.Math.max(a,o.d.c);for(u=new Ww(n.a);u.a<u.c.c.length;){switch(o=uG(N3(u),10),uG(oIn(o,(jYn(),byt)),255).g){case 1:w=0;break;case 2:w=1;break;case 5:w=.5;break;default:for(i=0,f=0,b=new Ww(o.j);b.a<b.c.c.length;)0==(l=uG(N3(b),12)).e.c.length||++i,0==l.g.c.length||++f;w=i+f==0?.5:f/(i+f)}g=n.c,h=o.o.a,p=(g.a-h)*w,w>.5?p-=2*a*(w-.5):w<.5&&(p+=2*c*(.5-w)),p<(r=o.d.b)&&(p=r),d=o.d.c,p>g.a-d-h&&(p=g.a-d-h),o.n.a=t+p}}function Wzn(n){var t,e,i;if((e=uG(oIn(n,(jYn(),gMt)),171))==(Gpn(),Imt)){for(t=new Fz(ix(qgn(n).a.Kc(),new h));hDn(t);)if(!F9(uG(N9(t),18)))throw hv(new jM(y6n+ZTn(n)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(e==Amt)for(i=new Fz(ix(Xgn(n).a.Kc(),new h));hDn(i);)if(!F9(uG(N9(i),18)))throw hv(new jM(y6n+ZTn(n)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}function Qzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;if(n.e&&n.c.c<n.f)throw hv(new kM("Expected "+n.f+" phases to be configured; only found "+n.c.c));for(h=uG(Mj(n.g),9),b=iR(n.f),o=0,s=(c=h).length;o<s;++o)(f=uG(xen(n,(i=c[o]).g),188))?kD(b,uG(xpn(n,f),106)):b.c.push(null);for(w=new wJ,kS(JJ(YJ(JJ(new fX(null,new h3(b,16)),new ou),new Hp(t)),new uu),new Up(w)),gsn(w,n.a),e=new Zm,a=0,u=(r=h).length;a<u;++a)Ohn(e,Fhn(n,PZ(uG(xen(w,(i=r[a]).g),20)))),(l=uG(zq(b,i.g),106))&&mv(e.c,l);return Ohn(e,Fhn(n,PZ(uG(xen(w,h[h.length-1].g+1),20)))),e}function Jzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(l=new Zm,c=new Zm,d=null,o=t.Kc();o.Ob();)a=new Vg(uG(o.Pb(),17).a),mv(c.c,a),d&&(a.d=d,d.e=a),d=a;for(v=cqn(n),h=0;h<c.c.length;++h){for(b=null,g=T7((u3(0,c.c.length),uG(c.c[0],661))),i=null,r=M0n,f=1;f<n.b.c.length;++f)p=g?e.Math.abs(g.b-f):e.Math.abs(f-b.b)+1,(w=b?e.Math.abs(f-b.b):p+1)<p?(s=b,u=w):(s=g,u=p),k=uM(pK(oIn(n,(jYn(),HTt)))),(m=v[f]+e.Math.pow(u,k))<r&&(r=m,(i=s).c=f),g&&f==g.b&&(b=g,g=aV(g));i&&(kD(l,xwn(i.c)),i.a=!0,ngn(i))}return hZ(),UX(l.c,l.c.length,null),l}function Yzn(n,t,e){var i,r,c,a,o,u;if(0==t.l&&0==t.m&&0==t.h)throw hv(new wM("divide by zero"));if(0==n.l&&0==n.m&&0==n.h)return e&&(Qat=p$(0,0,0)),p$(0,0,0);if(t.h==b0n&&0==t.m&&0==t.l)return apn(n,e);if(u=!1,t.h>>19!=0&&(t=gfn(t),u=!u),a=kRn(t),c=!1,r=!1,i=!1,n.h==b0n&&0==n.m&&0==n.l){if(r=!0,c=!0,-1!=a)return o=gDn(n,a),u&&Yfn(o),e&&(Qat=p$(0,0,0)),o;n=LL((tin(),Jat)),i=!0,u=!u}else n.h>>19!=0&&(c=!0,n=gfn(n),i=!0,u=!u);return-1!=a?nln(n,a,u,c,e):yEn(n,t)<0?(e&&(Qat=c?gfn(n):p$(n.l,n.m,n.h)),p$(0,0,0)):pUn(i?n:p$(n.l,n.m,n.h),t,u,c,r,e)}function Zzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;if(a=n.e,u=t.e,0==a)return t;if(0==u)return n;if((c=n.d)+(o=t.d)==2)return e=E3(n.a[0],L0n),i=E3(t.a[0],L0n),a==u?(w=pz(h=Lgn(e,i)),0==(b=pz(Dz(h,32)))?new Z5(a,w):new VV(a,2,Uhn(cT(YHt,1),W1n,28,15,[w,b]))):(cHn(),BA(a<0?$gn(i,e):$gn(e,i),0)?Rmn(a<0?$gn(i,e):$gn(e,i)):hW(Rmn(Men(a<0?$gn(i,e):$gn(e,i)))));if(a==u)l=a,f=c>=o?Cnn(n.a,c,t.a,o):Cnn(t.a,o,n.a,c);else{if(0==(r=c!=o?c>o?1:-1:Hln(n.a,t.a,c)))return cHn(),_ot;1==r?(l=a,f=t7(n.a,c,t.a,o)):(l=u,f=t7(t.a,o,n.a,c))}return K4(s=new VV(l,f.length,f)),s}function nVn(n,t){var e,i,r,c,a,o,u;if(!(n.g>t.f||t.g>n.f)){for(e=0,i=0,a=n.w.a.ec().Kc();a.Ob();)r=uG(a.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&++e;for(o=n.r.a.ec().Kc();o.Ob();)r=uG(o.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&--e;for(u=t.w.a.ec().Kc();u.Ob();)r=uG(u.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&++i;for(c=t.r.a.ec().Kc();c.Ob();)r=uG(c.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&--i;e<i?new O7(n,t,i-e):i<e?new O7(t,n,e-i):(new O7(t,n,0),new O7(n,t,0))}}function tVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(s=t.c,r=AN(n.e),f=vD(HR(D$(ON(n.e)),n.d*n.a,n.c*n.b),-.5),e=r.a-f.a,i=r.b-f.b,e=(a=t.a).c-e,i=a.d-i,u=new Ww(s);u.a<u.c.c.length;){switch(b=e+(l=(o=uG(N3(u),407)).b).a,g=i+l.b,w=t0(b/n.a),p=t0(g/n.b),(c=o.a).g){case 0:vyn(),h=yht;break;case 1:vyn(),h=kht;break;case 2:vyn(),h=Mht;break;default:vyn(),h=Tht}c.a?(m=t0((g+o.c)/n.b),kD(n.f,new LB(h,xwn(p),xwn(m))),c==(myn(),Dht)?wfn(n,0,p,w,m):wfn(n,w,p,n.d-1,m)):(d=t0((b+o.c)/n.a),kD(n.f,new LB(h,xwn(w),xwn(d))),c==(myn(),Nht)?wfn(n,w,0,d,p):wfn(n,w,p,d,n.c-1))}}function eVn(n){var t,e,i,r,c,a,o,u,s,h;for(t=new ys,e=new ys,s=m_(jrt,(r=qUn(n.b,Ert))?mK(Lmn((!r.b&&(r.b=new XR((YYn(),H_t),wBt,r)),r.b),Srt)):null),u=0;u<n.i;++u)F$(o=uG(n.g[u],179),102)?0!=((a=uG(o,19)).Bb&Qtt)?(0==(a.Bb&VZn)||!s&&null==((c=qUn(a,Ert))?mK(Lmn((!c.b&&(c.b=new XR((YYn(),H_t),wBt,c)),c.b),_et)):null))&&ttn(t,a):(h=lMn(a))&&0!=(h.Bb&Qtt)||(0==(a.Bb&VZn)||!s&&null==((i=qUn(a,Ert))?mK(Lmn((!i.b&&(i.b=new XR((YYn(),H_t),wBt,i)),i.b),_et)):null))&&ttn(e,a):(PP(),uG(o,69).xk()&&(o.sk()||(ttn(t,o),ttn(e,o))));lbn(t),lbn(e),n.a=uG(t.g,254),uG(e.g,254)}function iVn(n,t,e){var i,r,c,a,o,u,s;if(emn(t,e)>=0)return e;switch(sJ(Nen(n,e))){case 2:if(m_("",tdn(n,e.qk()).xe())){if(u=hxn(n,t,o=HJ(Nen(n,e)),BJ(Nen(n,e))))return u;for(a=0,s=(r=AHn(n,t)).gc();a<s;++a)if(WRn(ZV(Nen(n,u=uG(r.Xb(a),179))),o))return u}return null;case 4:if(m_("",tdn(n,e.qk()).xe())){for(i=e;i;i=F3(Nen(n,i)))if(u=fxn(n,t,HJ(Nen(n,i)),BJ(Nen(n,i))))return u;if(o=HJ(Nen(n,e)),m_(lct,o))return cSn(n,t);for(a=0,s=(c=LHn(n,t)).gc();a<s;++a)if(WRn(ZV(Nen(n,u=uG(c.Xb(a),179))),o))return u}return null;default:return null}}function rVn(n,t,e){var i,r,c,a,o,u,s,h;if(0==e.gc())return!1;if(PP(),c=(o=uG(t,69).xk())?e:new Drn(e.gc()),EFn(n.e,t)){if(t.Si())for(s=e.Kc();s.Ob();)aqn(n,t,u=s.Pb(),F$(t,102)&&0!=(uG(t,19).Bb&P0n))||(r=R5(t,u),c.Hc(r)||c.Fc(r));else if(!o)for(s=e.Kc();s.Ob();)r=R5(t,u=s.Pb()),c.Fc(r)}else{if(e.gc()>1)throw hv(new vM(dct));for(h=VKn(n.e.Dh(),t),i=uG(n.g,124),a=0;a<n.i;++a)if(r=i[a],h.am(r.Lk())){if(e.Hc(o?r:r.md()))return!1;for(s=e.Kc();s.Ob();)u=s.Pb(),uG(Uyn(n,a,o?uG(u,76):R5(t,u)),76);return!0}o||(r=R5(t,e.Kc().Pb()),c.Fc(r))}return CW(n,c)}function cVn(n,t){var i,r,c,a,o,u,s;for(s=new lS,u=new _w(new Fw(n.c).a.vc().Kc());u.a.Ob();)c=uG(u.a.Pb(),44),0==(a=uG(c.md(),466)).b&&s8(s,a,s.c.b,s.c);for(;0!=s.b;)for(null==(a=uG(0==s.b?null:(MK(0!=s.b),Lrn(s,s.a.a)),466)).a&&(a.a=0),r=new Ww(a.d);r.a<r.c.c.length;)null==(i=uG(N3(r),663)).b.a?i.b.a=uM(a.a)+i.a:t.o==(w0(),wSt)?i.b.a=e.Math.min(uM(i.b.a),uM(a.a)+i.a):i.b.a=e.Math.max(uM(i.b.a),uM(a.a)+i.a),--i.b.b,0==i.b.b&&aq(s,i.b);for(o=new _w(new Fw(n.c).a.vc().Kc());o.a.Ob();)c=uG(o.a.Pb(),44),a=uG(c.md(),466),t.i[a.c.p]=a.a}function aVn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w;for(f=i+t.c.c.a,w=new Ww(t.j);w.a<w.c.c.length;){if(b=uG(N3(w),12),c=Gfn(Uhn(cT(PNt,1),zZn,8,0,[b.i.n,b.n,b.a])),t.k==(zIn(),gbt)&&(u=uG(oIn(b,(GYn(),rmt)),12),c.a=Gfn(Uhn(cT(PNt,1),zZn,8,0,[u.i.n,u.n,u.a])).a,t.n.a=c.a),o=new MO(0,c.b),b.j==(KQn(),kRt))o.a=f;else{if(b.j!=_Rt)continue;o.a=i}if(!(e.Math.abs(c.a-o.a)<=r)||mEn(t))for(a=b.g.c.length+b.e.c.length>1,h=new w7(b.b);l$(h.a)||l$(h.b);)l=(s=uG(l$(h.a)?N3(h.a):N3(h.b),18)).c==b?s.d:s.c,e.Math.abs(Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.i.n,l.n,l.a])).b-o.b)>1&&sFn(n,s,o,a,b)}}function oVn(n){var t,i,r,c,a,o;if(c=new N4(n.e,0),r=new N4(n.a,0),n.d)for(i=0;i<n.b;i++)MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++);else for(i=0;i<n.b-1;i++)MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),LQ(c);for(t=uM((MK(c.b<c.d.gc()),pK(c.d.Xb(c.c=c.b++))));n.f-t>$9n;){for(a=t,o=0;e.Math.abs(t-a)<$9n;)++o,t=uM((MK(c.b<c.d.gc()),pK(c.d.Xb(c.c=c.b++)))),MK(r.b<r.d.gc()),r.d.Xb(r.c=r.b++);o<n.b&&(MK(c.b>0),c.a.Xb(c.c=--c.b),zGn(n,n.b-o,a,r,c),MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++)),MK(r.b>0),r.a.Xb(r.c=--r.b)}if(!n.d)for(i=0;i<n.b-1;i++)MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),LQ(c);n.d=!0,n.c=!0}function uVn(){uVn=E,KBt=(yj(),RBt).b,BBt=uG(zrn(gZ(RBt.b),0),35),FBt=uG(zrn(gZ(RBt.b),1),35),_Bt=uG(zrn(gZ(RBt.b),2),35),JBt=RBt.bb,uG(zrn(gZ(RBt.bb),0),35),uG(zrn(gZ(RBt.bb),1),35),ZBt=RBt.fb,nHt=uG(zrn(gZ(RBt.fb),0),35),uG(zrn(gZ(RBt.fb),1),35),uG(zrn(gZ(RBt.fb),2),19),eHt=RBt.qb,cHt=uG(zrn(gZ(RBt.qb),0),35),uG(zrn(gZ(RBt.qb),1),19),uG(zrn(gZ(RBt.qb),2),19),iHt=uG(zrn(gZ(RBt.qb),3),35),rHt=uG(zrn(gZ(RBt.qb),4),35),oHt=uG(zrn(gZ(RBt.qb),6),35),aHt=uG(zrn(gZ(RBt.qb),5),19),HBt=RBt.j,UBt=RBt.k,GBt=RBt.q,qBt=RBt.w,XBt=RBt.B,zBt=RBt.A,VBt=RBt.C,WBt=RBt.D,QBt=RBt._,YBt=RBt.cb,tHt=RBt.hb}function sVn(n,t,i){var r,c,a,o,u,s,h,f,l;n.c=0,n.b=0,r=2*t.c.a.c.length+1;n:for(h=i.Kc();h.Ob();){if(l=0,o=(s=uG(h.Pb(),12)).j==(KQn(),yRt)||s.j==KRt){if(!(f=uG(oIn(s,(GYn(),lmt)),10)))continue;l+=Y_n(n,r,s,f)}else{for(u=new Ww(s.g);u.a<u.c.c.length;){if((c=uG(N3(u),18).d).i.c==t.c){kD(n.a,s);continue n}l+=n.g[c.p]}for(a=new Ww(s.e);a.a<a.c.c.length;){if((c=uG(N3(a),18).c).i.c==t.c){kD(n.a,s);continue n}l-=n.g[c.p]}}s.e.c.length+s.g.c.length>0?(n.f[s.p]=l/(s.e.c.length+s.g.c.length),n.c=e.Math.min(n.c,n.f[s.p]),n.b=e.Math.max(n.b,n.f[s.p])):o&&(n.f[s.p]=l)}}function hVn(n){n.b=null,n.bb=null,n.fb=null,n.qb=null,n.a=null,n.c=null,n.d=null,n.e=null,n.f=null,n.n=null,n.M=null,n.L=null,n.Q=null,n.R=null,n.K=null,n.db=null,n.eb=null,n.g=null,n.i=null,n.j=null,n.k=null,n.gb=null,n.o=null,n.p=null,n.q=null,n.r=null,n.$=null,n.ib=null,n.S=null,n.T=null,n.t=null,n.s=null,n.u=null,n.v=null,n.w=null,n.B=null,n.A=null,n.C=null,n.D=null,n.F=null,n.G=null,n.H=null,n.I=null,n.J=null,n.P=null,n.Z=null,n.U=null,n.V=null,n.W=null,n.X=null,n.Y=null,n._=null,n.ab=null,n.cb=null,n.hb=null,n.nb=null,n.lb=null,n.mb=null,n.ob=null,n.pb=null,n.jb=null,n.kb=null,n.N=!1,n.O=!1}function fVn(n,t,e){var i,r;for(e.Ug("Graph transformation ("+n.a+")",1),r=T3(t.a),i=new Ww(t.b);i.a<i.c.c.length;)Ohn(r,uG(N3(i),30).a);if(uG(oIn(t,(jYn(),Hyt)),428)==(Vin(),dgt))switch(uG(oIn(t,Byt),88).g){case 2:l6(t,r);break;case 3:Fmn(t,r);break;case 4:n.a==(Aun(),Obt)?(Fmn(t,r),b6(t,r)):(b6(t,r),Fmn(t,r))}else if(n.a==(Aun(),Obt))switch(uG(oIn(t,Byt),88).g){case 2:l6(t,r),b6(t,r);break;case 3:Fmn(t,r),l6(t,r);break;case 4:l6(t,r),Fmn(t,r)}else switch(uG(oIn(t,Byt),88).g){case 2:l6(t,r),b6(t,r);break;case 3:l6(t,r),Fmn(t,r);break;case 4:Fmn(t,r),l6(t,r)}e.Vg()}function lVn(n){var t,i,r,c,a,o,u,s;for(a=new Ww(n.a.b);a.a<a.c.c.length;)(c=uG(N3(a),86)).b.c=c.g.c,c.b.d=c.g.d;for(s=new MO(M0n,M0n),t=new MO(T0n,T0n),r=new Ww(n.a.b);r.a<r.c.c.length;)i=uG(N3(r),86),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);for(u=KW(n.c).a.nc();u.Ob();)o=uG(u.Pb(),42),i=uG(o.b,86),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);n.d=BR(new MO(s.a,s.b)),n.e=YF(new MO(t.a,t.b),s),n.a.a.c.length=0,n.a.b.c.length=0}function bVn(n){var t,e,i,r,c,a,o;for(Win(),o=new dk,e=new Ww(n);e.a<e.c.c.length;)t=uG(N3(e),148),(!o.b||t.c>=o.b.c)&&(o.b=t),(!o.c||t.c<=o.c.c)&&(o.d=o.c,o.c=t),(!o.e||t.d>=o.e.d)&&(o.e=t),(!o.f||t.d<=o.f.d)&&(o.f=t);return i=new cyn((Xhn(),Flt)),O4(n,Vlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[i]))),a=new cyn(Hlt),O4(n,zlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[a]))),r=new cyn(_lt),O4(n,Xlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[r]))),c=new cyn(Blt),O4(n,qlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[c]))),jRn(i.c,Flt),jRn(r.c,_lt),jRn(c.c,Blt),jRn(a.c,Hlt),o.a.c.length=0,Ohn(o.a,i.c),Ohn(o.a,Spn(r.c)),Ohn(o.a,c.c),Ohn(o.a,Spn(a.c)),o}function wVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;for(t.Ug(snt,1),w=uM(pK(zDn(n,(lBn(),POt)))),o=uM(pK(zDn(n,(S_n(),bAt)))),u=uG(zDn(n,hAt),107),Non((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),f=uzn((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a),w,o),!n.a&&(n.a=new fV(bFt,n,10,11)),h=new Ww(f);h.a<h.c.c.length;)for(c=new Ww((s=uG(N3(h),186)).a);c.a<c.c.c.length;)Gun(b=new r0((r=uG(N3(c),172)).s,r.t,uM(pK(zDn(n,bAt)))),r),kD(s.d,b);l=Xjn(f,o),d=e.Math.max(l.a,uM(pK(zDn(n,EOt)))-(u.b+u.c)),i=(a=e.Math.max(l.b,uM(pK(zDn(n,MOt)))-(u.d+u.a)))-l.b,Myn(n,pOt,i),Myn(n,vOt,d),Myn(n,mOt,a+i),Myn(n,SOt,f),t.Vg()}function dVn(n,t,e){var i,r,c,a,o,u,s,f,l,b,w;for(u=new XL,s=new XL,b=new XL,w=new XL,o=uM(pK(oIn(t,(jYn(),ETt)))),r=uM(pK(oIn(t,dTt))),a=new Ww(e);a.a<a.c.c.length;)if(c=uG(N3(a),10),(f=uG(oIn(c,(GYn(),Fpt)),64))==(KQn(),yRt))for(s.a.zc(c,s),i=new Fz(ix(qgn(c).a.Kc(),new h));hDn(i);)FV(u,uG(N9(i),18).c.i);else if(f==KRt)for(w.a.zc(c,w),i=new Fz(ix(qgn(c).a.Kc(),new h));hDn(i);)FV(b,uG(N9(i),18).c.i);0!=u.a.gc()&&(l=YVn(new NW(2,r),t,u,s,-o-t.c.b))>0&&(n.a=o+(l-1)*r,t.c.b+=n.a,t.f.b+=n.a),0!=b.a.gc()&&(l=YVn(new NW(1,r),t,b,w,t.f.b+o-t.c.b))>0&&(t.f.b+=o+(l-1)*r)}function gVn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(f=uM(pK(oIn(n,(jYn(),mTt)))),r=uM(pK(oIn(n,RTt))),kfn(b=new Qu,mTt,f+r),m=(h=t).d,g=h.c.i,v=h.d.i,p=GL(g.c),k=GL(v.c),c=new Zm,l=p;l<=k;l++)Hb(u=new gMn(n),(zIn(),wbt)),kfn(u,(GYn(),rmt),h),kfn(u,JMt,($Pn(),cRt)),kfn(u,kTt,b),w=uG(zq(n.b,l),30),l==p?$jn(u,w.a.c.length-i,w):a2(u,w),(y=uM(pK(oIn(h,tMt))))<0&&kfn(h,tMt,y=0),u.o.b=y,d=e.Math.floor(y/2),NLn(o=new lOn,(KQn(),_Rt)),o2(o,u),o.n.b=d,NLn(s=new lOn,kRt),o2(s,u),s.n.b=d,u2(h,o),zsn(a=new UZ,h),kfn(a,bMt,null),c2(a,s),u2(a,m),IEn(u,h,a),mv(c.c,a),h=a;return c}function pVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(o=uG(yOn(n,(KQn(),_Rt)).Kc().Pb(),12).e,f=uG(yOn(n,kRt).Kc().Pb(),12).g,a=o.c.length,g=n3(uG(zq(n.j,0),12));a-- >0;){for(u3(0,o.c.length),b=uG(o.c[0],18),u3(0,f.c.length),r=Ten((i=uG(f.c[0],18)).d.e,i,0),w6(b,i.d,r),c2(i,null),u2(i,null),l=b.a,t&&aq(l,new eN(g)),e=Fkn(i.a,0);e.b!=e.d.c;)aq(l,new eN(uG(I6(e),8)));for(d=b.b,h=new Ww(i.b);h.a<h.c.c.length;)s=uG(N3(h),72),mv(d.c,s);if(w=uG(oIn(b,(jYn(),bMt)),75),c=uG(oIn(i,bMt),75))for(w||(w=new Uk,kfn(b,bMt,w)),u=Fkn(c,0);u.b!=u.d.c;)aq(w,new eN(uG(I6(u),8)))}}function mVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;if(!((d=t.b.c.length)<3)){for(b=Inn(YHt,W1n,28,d,15,1),f=0,h=new Ww(t.b);h.a<h.c.c.length;)s=uG(N3(h),30),b[f++]=s.a.c.length;for(l=new N4(t.b,2),i=1;i<d-1;i++)for(MK(l.b<l.d.gc()),w=new Ww((e=uG(l.d.Xb(l.c=l.b++),30)).a),c=0,o=0,u=0;u<b[i+1];u++)if(v=uG(N3(w),10),u==b[i+1]-1||KOn(n,v,i+1,i)){for(a=b[i]-1,KOn(n,v,i+1,i)&&(a=n.c.e[uG(uG(uG(zq(n.c.b,v.p),15).Xb(0),42).a,10).p]);o<=u;){if(!KOn(n,m=uG(zq(e.a,o),10),i+1,i))for(p=uG(zq(n.c.b,m.p),15).Kc();p.Ob();)g=uG(p.Pb(),42),((r=n.c.e[uG(g.a,10).p])<c||r>a)&&FV(n.b,uG(g.b,18));++o}c=a}}}function vVn(n,t){var e;if(null==t||m_(t,IZn))return null;if(0==t.length&&n.k!=(lAn(),pNt))return null;switch(n.k.g){case 1:return Bvn(t,Fnt)?(qx(),eot):Bvn(t,_nt)?(qx(),tot):null;case 2:try{return xwn(vUn(t,j1n,vZn))}catch(i){if(F$(i=Ehn(i),130))return null;throw hv(i)}case 4:try{return YIn(t)}catch(i){if(F$(i=Ehn(i),130))return null;throw hv(i)}case 3:return t;case 5:return wbn(n),NNn(n,t);case 6:return wbn(n),Lxn(n,n.a,t);case 7:try{return(e=Q$n(n)).cg(t),e}catch(i){if(F$(i=Ehn(i),33))return null;throw hv(i)}default:throw hv(new kM("Invalid type set for this layout option."))}}function kVn(n){var t;switch(n.d){case 1:if(n.Sj())return-2!=n.o;break;case 2:if(n.Sj())return-2==n.o;break;case 3:case 5:case 4:case 6:case 7:return n.o>-2;default:return!1}switch(t=n.Rj(),n.p){case 0:return null!=t&&oM(gK(t))!=HA(n.k,0);case 1:return null!=t&&uG(t,222).a!=pz(n.k)<<24>>24;case 2:return null!=t&&uG(t,180).a!=(pz(n.k)&D1n);case 6:return null!=t&&HA(uG(t,168).a,n.k);case 5:return null!=t&&uG(t,17).a!=pz(n.k);case 7:return null!=t&&uG(t,191).a!=pz(n.k)<<16>>16;case 3:return null!=t&&uM(pK(t))!=n.j;case 4:return null!=t&&uG(t,161).a!=n.j;default:return null==t?null!=n.n:!udn(t,n.n)}}function yVn(n,t,e){var i,r,c,a;return n.ol()&&n.nl()&&xA(a=CV(n,uG(e,58)))!==xA(e)?(n.xj(t),n.Dj(t,Atn(n,t,a)),n.al()&&(r=uG(e,54),c=n.ml()?n.kl()?r.Th(n.b,lMn(uG(ern(e1(n.b),n.Lj()),19)).n,uG(ern(e1(n.b),n.Lj()).Hk(),29).kk(),null):r.Th(n.b,emn(r.Dh(),lMn(uG(ern(e1(n.b),n.Lj()),19))),null,null):r.Th(n.b,-1-n.Lj(),null,null),!uG(a,54).Ph()&&(i=uG(a,54),c=n.ml()?n.kl()?i.Rh(n.b,lMn(uG(ern(e1(n.b),n.Lj()),19)).n,uG(ern(e1(n.b),n.Lj()).Hk(),29).kk(),c):i.Rh(n.b,emn(i.Dh(),lMn(uG(ern(e1(n.b),n.Lj()),19))),null,c):i.Rh(n.b,-1-n.Lj(),null,c)),c&&c.oj()),uN(n.b)&&n.Jj(n.Ij(9,e,a,t,!1)),a):e}function MVn(n){var t,e,i,r,c,a,o,u,s,h;for(i=new Zm,a=new Ww(n.e.a);a.a<a.c.c.length;){for(h=0,(r=uG(N3(a),125)).k.c.length=0,e=new Ww(Ebn(r));e.a<e.c.c.length;)(t=uG(N3(e),218)).f&&(kD(r.k,t),++h);1==h&&mv(i.c,r)}for(c=new Ww(i);c.a<c.c.c.length;)for(r=uG(N3(c),125);1==r.k.c.length;){for(s=uG(N3(new Ww(r.k)),218),n.b[s.c]=s.g,o=s.d,u=s.e,e=new Ww(Ebn(r));e.a<e.c.c.length;)udn(t=uG(N3(e),218),s)||(t.f?o==t.d||u==t.e?n.b[s.c]-=n.b[t.c]-t.g:n.b[s.c]+=n.b[t.c]-t.g:r==o?t.d==r?n.b[s.c]+=t.g:n.b[s.c]-=t.g:t.d==r?n.b[s.c]-=t.g:n.b[s.c]+=t.g);men(o.k,s),men(u.k,s),r=o==r?s.e:s.d}}function TVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w;if(i=uG(AJ(n.b,t),127),(s=uG(uG(Y9(n.r,t),21),87)).dc())return i.n.b=0,void(i.n.c=0);for(h=n.u.Hc((eNn(),wRt)),o=0,u=s.Kc(),f=null,l=0,b=0;u.Ob();)c=uM(pK((r=uG(u.Pb(),117)).b.of((Gx(),bht)))),a=r.b.Mf().a,n.A.Hc((Qmn(),JRt))&&vBn(n,t),f?(w=b+f.d.c+n.w+r.d.b,o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(l-c)<=Z2n||l==c||isNaN(l)&&isNaN(c)?0:w/(c-l)))):n.C&&n.C.b>0&&(o=e.Math.max(o,run(n.C.b+r.d.b,c))),f=r,l=c,b=a;n.C&&n.C.c>0&&(w=b+n.C.c,h&&(w+=f.d.c),o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(l-1)<=Z2n||1==l||isNaN(l)&&isNaN(1)?0:w/(1-l)))),i.n.b=0,i.a.a=o}function jVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w;if(i=uG(AJ(n.b,t),127),(s=uG(uG(Y9(n.r,t),21),87)).dc())return i.n.d=0,void(i.n.a=0);for(h=n.u.Hc((eNn(),wRt)),o=0,n.A.Hc((Qmn(),JRt))&&kBn(n,t),u=s.Kc(),f=null,b=0,l=0;u.Ob();)a=uM(pK((r=uG(u.Pb(),117)).b.of((Gx(),bht)))),c=r.b.Mf().b,f?(w=l+f.d.a+n.w+r.d.d,o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(b-a)<=Z2n||b==a||isNaN(b)&&isNaN(a)?0:w/(a-b)))):n.C&&n.C.d>0&&(o=e.Math.max(o,run(n.C.d+r.d.d,a))),f=r,b=a,l=c;n.C&&n.C.a>0&&(w=l+n.C.a,h&&(w+=f.d.a),o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(b-1)<=Z2n||1==b||isNaN(b)&&isNaN(1)?0:w/(1-b)))),i.n.d=0,i.a.b=o}function EVn(n,t,e,i,r,c,a,o){var u,s,h,f,l,b,w,d;if(b=!1,u=cKn(e.q,t.f+t.b-e.q.f),l=i.f>t.b&&o,h=uXn(i,d=r-(e.q.e+u-a),!1).a,l&&h>i.f)return!1;if(l){for(f=0,w=new Ww(t.d);w.a<w.c.c.length;)f+=cKn(uG(N3(w),315),i.f)+a;d=r-f}return!(d<i.g)&&(s=c==n.c.length-1&&d>=(u3(c,n.c.length),uG(n.c[c],186)).e,!(!l&&h>t.b&&!s)&&((s||l||h<=t.b)&&(s&&h>t.b?(e.d=h,dtn(e,EOn(e,h))):(USn(e.q,u),e.c=!0),dtn(i,r-(e.s+e.r)),oMn(i,e.q.e+e.q.d,t.f),fan(t,i),n.c.length>c&&(uEn((u3(c,n.c.length),uG(n.c[c],186)),i),0==(u3(c,n.c.length),uG(n.c[c],186)).a.c.length&&i7(n,c)),b=!0),b))}function SVn(n,t,e){var i,r,c,a,o,u;for(this.g=n,o=t.d.length,u=e.d.length,this.d=Inn(pbt,e6n,10,o+u,0,1),a=0;a<o;a++)this.d[a]=t.d[a];for(c=0;c<u;c++)this.d[o+c]=e.d[c];if(t.e){if(this.e=oG(t.e),this.e.Mc(e),e.e)for(r=e.e.Kc();r.Ob();)(i=uG(r.Pb(),239))!=t&&(this.e.Hc(i)?--i.c:this.e.Fc(i))}else e.e&&(this.e=oG(e.e),this.e.Mc(t));this.f=t.f+e.f,this.a=t.a+e.a,this.a>0?Rrn(this,this.f/this.a):null!=oD(t.g,t.d[0]).a&&null!=oD(e.g,e.d[0]).a?Rrn(this,(uM(oD(t.g,t.d[0]).a)+uM(oD(e.g,e.d[0]).a))/2):null!=oD(t.g,t.d[0]).a?Rrn(this,oD(t.g,t.d[0]).a):null!=oD(e.g,e.d[0]).a&&Rrn(this,oD(e.g,e.d[0]).a)}function PVn(n,t){var e,i,r,c,a,o,u,s,h;for(n.a=new wQ(efn(axt)),i=new Ww(t.a);i.a<i.c.c.length;){for(e=uG(N3(i),855),a=new Zvn(Uhn(cT(xlt,1),EZn,86,0,[])),kD(n.a.a,a),u=new Ww(e.d);u.a<u.c.c.length;)rWn(s=new Jx(n,o=uG(N3(u),116)),uG(oIn(e.c,(GYn(),xpt)),21)),PV(n.g,e)||(vJ(n.g,e,new MO(o.c,o.d)),vJ(n.f,e,s)),kD(n.a.b,s),t4(a,s);for(c=new Ww(e.b);c.a<c.c.c.length;)s=new Jx(n,(r=uG(N3(c),602)).Df()),vJ(n.b,r,new WO(a,s)),rWn(s,uG(oIn(e.c,(GYn(),xpt)),21)),r.Bf()&&(rWn(h=new Yvn(n,r.Bf(),1),uG(oIn(e.c,xpt),21)),t4(new Zvn(Uhn(cT(xlt,1),EZn,86,0,[])),h),UNn(n.c,r.Af(),new WO(a,h)))}return n.a}function CVn(n){var t;this.a=n,t=(zIn(),Uhn(cT(vbt,1),p1n,273,0,[dbt,wbt,lbt,gbt,bbt,fbt])).length,this.b=Jq(lNt,[zZn,m9n],[601,149],0,[t,t],2),this.c=Jq(lNt,[zZn,m9n],[601,149],0,[t,t],2),DZ(this,dbt,(jYn(),ETt),STt),Jsn(this,dbt,wbt,mTt,vTt),$Z(this,dbt,gbt,mTt),$Z(this,dbt,lbt,mTt),Jsn(this,dbt,bbt,ETt,STt),DZ(this,wbt,dTt,gTt),$Z(this,wbt,gbt,dTt),$Z(this,wbt,lbt,dTt),Jsn(this,wbt,bbt,mTt,vTt),GN(this,gbt,dTt),$Z(this,gbt,lbt,dTt),$Z(this,gbt,bbt,MTt),GN(this,lbt,ITt),Jsn(this,lbt,bbt,jTt,TTt),DZ(this,bbt,dTt,dTt),DZ(this,fbt,dTt,gTt),Jsn(this,fbt,dbt,mTt,vTt),Jsn(this,fbt,bbt,mTt,vTt),Jsn(this,fbt,wbt,mTt,vTt)}function IVn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;if(F$(a=e.Lk(),102)&&0!=(uG(a,19).Bb&P0n)&&(l=uG(e.md(),54),(d=mwn(n.e,l))!=l)){if(yD(n,t,WPn(n,t,h=R5(a,d))),f=null,uN(n.e)&&(i=iVn((gAn(),kBt),n.e.Dh(),a))!=ern(n.e.Dh(),n.c)){for(g=VKn(n.e.Dh(),a),o=0,c=uG(n.g,124),u=0;u<t;++u)r=c[u],g.am(r.Lk())&&++o;(f=new i8(n.e,9,i,l,d,o,!1)).nj(new Ken(n.e,9,n.c,e,h,t,!1))}return(b=lMn(w=uG(a,19)))?(f=l.Th(n.e,emn(l.Dh(),b),null,f),f=uG(d,54).Rh(n.e,emn(d.Dh(),b),null,f)):0!=(w.Bb&Qtt)&&(s=-1-emn(n.e.Dh(),w),f=l.Th(n.e,s,null,null),!uG(d,54).Ph()&&(f=uG(d,54).Rh(n.e,s,null,f))),f&&f.oj(),h}return e}function OVn(n){var t,e,i;for(Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Dl])),e=new Eb(n),i=0;i<e.a.length;++i)m_(t=uin(e,i).te().a,"layered")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new fl])):m_(t,"force")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Gf])):m_(t,"stress")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Xf])):m_(t,"mrtree")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new vl])):m_(t,"radial")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new El])):m_(t,"disco")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Bf,new Hf])):m_(t,"sporeOverlap")||m_(t,"sporeCompaction")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Ol])):m_(t,"rectpacking")&&Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Pl]))}function AVn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(l=new eN(n.o),p=t.a/l.a,o=t.b/l.b,d=t.a-l.a,c=t.b-l.b,e)for(r=xA(oIn(n,(jYn(),JMt)))===xA(($Pn(),cRt)),w=new Ww(n.j);w.a<w.c.c.length;)switch((b=uG(N3(w),12)).j.g){case 1:r||(b.n.a*=p);break;case 2:b.n.a+=d,r||(b.n.b*=o);break;case 3:r||(b.n.a*=p),b.n.b+=c;break;case 4:r||(b.n.b*=o)}for(s=new Ww(n.b);s.a<s.c.c.length;)h=(u=uG(N3(s),72)).n.a+u.o.a/2,f=u.n.b+u.o.b/2,(g=h/l.a)+(a=f/l.b)>=1&&(g-a>0&&f>=0?(u.n.a+=d,u.n.b+=c*a):g-a<0&&h>=0&&(u.n.a+=d*g,u.n.b+=c));n.o.a=t.a,n.o.b=t.b,kfn(n,(jYn(),DMt),(Qmn(),new nB(i=uG(Mj(sKt),9),uG(MF(i,i.length),9),0)))}function LVn(n,t,e,i,r,c){if(null!=t&&mpn(t,YFt,ZFt))throw hv(new vM("invalid scheme: "+t));if(!(n||null!=e&&-1==xL(e,$Cn(35))&&e.length>0&&(s3(0,e.length),47!=e.charCodeAt(0))))throw hv(new vM("invalid opaquePart: "+e));if(n&&(null==t||!ZE(UFt,t.toLowerCase()))&&null!=e&&mpn(e,n_t,t_t))throw hv(new vM(Vit+e));if(n&&null!=t&&ZE(UFt,t.toLowerCase())&&!bPn(e))throw hv(new vM(Vit+e));if(!Ppn(i))throw hv(new vM("invalid device: "+i));if(!Jbn(r))throw hv(new vM(null==r?"invalid segments: null":"invalid segment: "+Lbn(r)));if(null!=c&&-1!=xL(c,$Cn(35)))throw hv(new vM("invalid query: "+c))}function NVn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(i.Ug("Network simplex layering",1),n.b=t,p=4*uG(oIn(t,(jYn(),OTt)),17).a,(g=n.b.a).c.length<1)i.Vg();else{for(d=null,c=Fkn(a=RHn(n,g),0);c.b!=c.d.c;){for(r=uG(I6(c),15),u=p*t0(e.Math.sqrt(r.gc())),YHn(kT(MT(yT(_B(o=dUn(r)),u),d),!0),i.eh(1)),l=n.b.b,w=new Ww(o.a);w.a<w.c.c.length;){for(b=uG(N3(w),125);l.c.length<=b.e;)GX(l,l.c.length,new bQ(n.b));a2(uG(b.f,10),uG(zq(l,b.e),30))}if(a.b>1)for(d=Inn(YHt,W1n,28,n.b.b.c.length,15,1),f=0,h=new Ww(n.b.b);h.a<h.c.c.length;)s=uG(N3(h),30),d[f++]=s.a.c.length}g.c.length=0,n.a=null,n.b=null,n.c=null,i.Vg()}}function $Vn(n,t){var e,i,r,c,a,o,u,s,h,f;for(h=new Zm,f=new ND,c=null,r=0,i=0;i<t.length;++i)switch(Yln(c,e=t[i])&&(r=kpn(n,f,h,VEt,r)),vR(e,(GYn(),zpt))&&(c=uG(oIn(e,zpt),10)),e.k.g){case 0:for(u=gN(YU(Dgn(e,(KQn(),yRt)),new Nc));oon(u);)a=uG(yen(u),12),n.d[a.p]=r++,mv(h.c,a);for(r=kpn(n,f,h,VEt,r),s=gN(YU(Dgn(e,KRt),new Nc));oon(s);)a=uG(yen(s),12),n.d[a.p]=r++,mv(h.c,a);break;case 3:Dgn(e,zEt).dc()||(a=uG(Dgn(e,zEt).Xb(0),12),n.d[a.p]=r++,mv(h.c,a)),Dgn(e,VEt).dc()||A6(f,e);break;case 1:for(o=Dgn(e,(KQn(),_Rt)).Kc();o.Ob();)a=uG(o.Pb(),12),n.d[a.p]=r++,mv(h.c,a);Dgn(e,kRt).Jc(new EI(f,e))}return kpn(n,f,h,VEt,r),h}function DVn(n,t){var e,i,r,c,a,o,u,s,h,f,l;if(null==t||0==t.length)return null;if(!(c=uG(U1(n.f,t),23))){for(r=new _w(new Fw(n.d).a.vc().Kc());r.a.Ob();)if(a=uG(r.a.Pb(),44),o=(e=uG(a.md(),23)).f,l=t.length,m_(o.substr(o.length-l,l),t)&&(t.length==o.length||46==VJ(o,o.length-t.length-1))){if(c)return null;c=e}if(!c)for(i=new _w(new Fw(n.d).a.vc().Kc());i.a.Ob();)if(a=uG(i.a.Pb(),44),null!=(f=(e=uG(a.md(),23)).g))for(s=0,h=(u=f).length;s<h;++s)if(o=u[s],l=t.length,m_(o.substr(o.length-l,l),t)&&(t.length==o.length||46==VJ(o,o.length-t.length-1))){if(c)return null;c=e}c&&r2(n.f,t,c)}return c}function xVn(n,t){var e,i,r,c,a;for(e=new QM,a=!1,c=0;c<t.length;c++)if(s3(c,t.length),32!=(i=t.charCodeAt(c)))a?39==i?c+1<t.length&&(s3(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+=String.fromCharCode(i),++c):a=!1:e.a+=String.fromCharCode(i):xL("GyMLdkHmsSEcDahKzZv",$Cn(i))>0?(Ikn(n,e,0),e.a+=String.fromCharCode(i),Ikn(n,e,r=qvn(t,c)),c+=r-1):39==i?c+1<t.length&&(s3(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+="'",++c):a=!0:e.a+=String.fromCharCode(i);else for(Ikn(n,e,0),e.a+=" ",Ikn(n,e,0);c+1<t.length&&(s3(c+1,t.length),32==t.charCodeAt(c+1));)++c;Ikn(n,e,0),iCn(n)}function RVn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(v=aG(n),u=new Zm,s=(c=n.c.length)-1,h=c+1;0!=v.a.gc();){for(;0!=e.b;)MK(0!=e.b),p=uG(Lrn(e,e.a.a),118),v.a.Bc(p),p.g=s--,UGn(p,t,e,i);for(;0!=t.b;)MK(0!=t.b),m=uG(Lrn(t,t.a.a),118),v.a.Bc(m),m.g=h++,UGn(m,t,e,i);for(o=j1n,d=v.a.ec().Kc();d.Ob();){if(w=uG(d.Pb(),118),!i&&w.b>0&&w.a<=0){u.c.length=0,mv(u.c,w);break}(b=w.i-w.d)>=o&&(b>o&&(u.c.length=0,o=b),mv(u.c,w))}0!=u.c.length&&(a=uG(zq(u,iMn(r,u.c.length)),118),v.a.Bc(a),a.g=h++,UGn(a,t,e,i),u.c.length=0)}for(g=n.c.length+1,l=new Ww(n);l.a<l.c.c.length;)(f=uG(N3(l),118)).g<c&&(f.g=f.g+g)}function KVn(n,t,e){var i,r,c,a;this.j=n,this.e=SPn(n),this.o=this.j.e,this.i=!!this.o,this.p=this.i?uG(zq(e,HQ(this.o).p),219):null,r=uG(oIn(n,(GYn(),Hpt)),21),this.g=r.Hc((r_n(),tpt)),this.b=new Zm,this.d=new Umn(this.e),a=uG(oIn(this.j,dmt),234),this.q=ysn(t,a,this.e),this.k=new z0(this),c=n7(Uhn(cT(fdt,1),EZn,230,0,[this,this.d,this.k,this.q])),t!=(ean(),_Et)||oM(gK(oIn(n,(jYn(),Cyt))))?t==_Et&&oM(gK(oIn(n,(jYn(),Cyt))))?(i=new APn(this.e),mv(c.c,i),this.c=new Ron(i,a,uG(this.q,413))):this.c=new qC(t,this):(i=new APn(this.e),mv(c.c,i),this.c=new M6(i,a,uG(this.q,413))),kD(c,this.c),GXn(c,this.e),this.s=OJn(this.k)}function FVn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g;for(c=new Zm,s=new Ww(i);s.a<s.c.c.length;)if(a=null,(o=uG(N3(s),452)).f==(can(),Wjt))for(w=new Ww(o.e);w.a<w.c.c.length;)HQ(g=(b=uG(N3(w),18)).d.i)==t?Crn(n,t,o,b,o.b,b.d):!e||jsn(g,e)?IIn(n,t,o,i,b):((l=YXn(n,t,e,b,o.b,Wjt,a))!=a&&mv(c.c,l),l.c&&(a=l));else for(f=new Ww(o.e);f.a<f.c.c.length;)if(HQ(d=(h=uG(N3(f),18)).c.i)==t)Crn(n,t,o,h,h.c,o.b);else{if(!e||jsn(d,e))continue;(l=YXn(n,t,e,h,o.b,Vjt,a))!=a&&mv(c.c,l),l.c&&(a=l)}for(u=new Ww(c);u.a<u.c.c.length;)o=uG(N3(u),452),-1!=Ten(t.a,o.a,0)||kD(t.a,o.a),o.c&&mv(r.c,o)}function _Vn(n){var t,i,r,c,a,o,u;for(t=0,a=new Ww(n.b.a);a.a<a.c.c.length;)(r=uG(N3(a),194)).b=0,r.c=0;for(ZIn(n,0),Npn(n,n.g),fKn(n.c),OM(n.c),xdn(),i=JDt,BHn(DI(qWn(BHn(DI(qWn(BHn(qWn(n.c,i)),Bdn(i)))),i))),qWn(n.c,JDt),agn(n,n.g),nIn(n,0),NXn(n,0),wxn(n,1),ZIn(n,1),Npn(n,n.d),fKn(n.c),o=new Ww(n.b.a);o.a<o.c.c.length;)r=uG(N3(o),194),t+=e.Math.abs(r.c);for(u=new Ww(n.b.a);u.a<u.c.c.length;)(r=uG(N3(u),194)).b=0,r.c=0;for(i=nxt,BHn(DI(qWn(BHn(DI(qWn(BHn(OM(qWn(n.c,i))),Bdn(i)))),i))),qWn(n.c,JDt),agn(n,n.d),nIn(n,1),NXn(n,1),wxn(n,0),OM(n.c),c=new Ww(n.b.a);c.a<c.c.c.length;)r=uG(N3(c),194),t+=e.Math.abs(r.c);return t}function BVn(n,t,e){var i,r,c,a,o,u,s,h,f,l;if(oM(gK(oIn(e,(jYn(),sMt)))))for(r=new Ww(e.j);r.a<r.c.c.length;)for(o=0,u=(a=x4(uG(N3(r),12).g)).length;o<u;++o)(c=a[o]).d.i==e&&oM(gK(oIn(c,hMt)))&&(h=c.c,(s=uG(cQ(n.b,h),10))||(kfn(s=DJn(h,($Pn(),uRt),h.j,-1,null,null,h.o,uG(oIn(t,Byt),88),t),(GYn(),rmt),h),vJ(n.b,h,s),kD(t.a,s)),l=c.d,(f=uG(cQ(n.b,l),10))||(kfn(f=DJn(l,($Pn(),uRt),l.j,1,null,null,l.o,uG(oIn(t,Byt),88),t),(GYn(),rmt),l),vJ(n.b,l,f),kD(t.a,f)),c2(i=K9(c),uG(zq(s.j,0),12)),u2(i,uG(zq(f.j,0),12)),UNn(n.a,c,new $B(i,t,(can(),Wjt))),uG(oIn(t,(GYn(),Hpt)),21).Fc((r_n(),tpt)))}function HVn(n,t){var e,i,r,c,a,o,u,s,h,f;for(i=new Ww(n.a.b);i.a<i.c.c.length;)for(o=new Ww(uG(N3(i),30).a);o.a<o.c.c.length;)a=uG(N3(o),10),t.j[a.p]=a,t.i[a.p]=t.o==(w0(),dSt)?T0n:M0n;for($V(n.c),c=n.a.b,t.c==(b0(),hSt)&&(c=Spn(c)),_4(n.e,t,n.b),FP(t.p,null),r=c.Kc();r.Ob();)for(u=uG(r.Pb(),30).a,t.o==(w0(),dSt)&&(u=Spn(u)),f=u.Kc();f.Ob();)h=uG(f.Pb(),10),t.g[h.p]==h&&IJn(n,h,t);for(cVn(n,t),e=c.Kc();e.Ob();)for(f=new Ww(uG(e.Pb(),30).a);f.a<f.c.c.length;)h=uG(N3(f),10),t.p[h.p]=t.p[t.g[h.p].p],h==t.g[h.p]&&(s=uM(t.i[t.j[h.p].p]),(t.o==(w0(),dSt)&&s>T0n||t.o==wSt&&s<M0n)&&(t.p[h.p]=uM(t.p[h.p])+s));n.e.xg()}function UVn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w;for(e.Ug("Label dummy switching",1),i=uG(oIn(t,(jYn(),Gyt)),232),zun(t),r=dxn(t,i),n.a=Inn(eUt,I0n,28,t.b.c.length,15,1),vAn(),h=0,b=(o=Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])).length;h<b;++h)if(((c=o[h])==qdt||c==_dt||c==Udt)&&!uG($x(r.a,c)?r.b[c.g]:null,15).dc()){dsn(n,t);break}for(f=0,w=(u=Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])).length;f<w;++f)(c=u[f])==qdt||c==_dt||c==Udt||QHn(n,uG($x(r.a,c)?r.b[c.g]:null,15));for(s=0,l=(a=Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])).length;s<l;++s)((c=a[s])==qdt||c==_dt||c==Udt)&&QHn(n,uG($x(r.a,c)?r.b[c.g]:null,15));n.a=null,e.Vg()}function GVn(n,t){var e,i,r,c,a,o,u,s,h;if(null!=(s=t).b&&null!=n.b){for(pxn(n),szn(n),pxn(s),szn(s),e=Inn(YHt,W1n,28,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],o=s.b[a],u=s.b[a+1],c<o)i+=2;else if(c>=o&&r<=u)o<=r&&c<=u?(e[h++]=r,e[h++]=c,i+=2):o<=r?(e[h++]=r,e[h++]=u,n.b[i]=u+1,a+=2):c<=u?(e[h++]=o,e[h++]=c,i+=2):(e[h++]=o,e[h++]=u,n.b[i]=u+1);else{if(!(u<r))throw hv(new Ky("Token#intersectRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] & ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=Inn(YHt,W1n,28,h,15,1),qGn(e,0,n.b,0,h)}}function qVn(n){var t,i,r,c,a,o,u;for(t=new Zm,n.g=new Zm,n.d=new Zm,o=new bsn(new Nw(n.f.b).a);o.b;)kD(t,uG(uG((a=von(o)).md(),42).b,86)),hN(uG(a.ld(),602).Af())?kD(n.d,uG(a.md(),42)):kD(n.g,uG(a.md(),42));for(Npn(n,n.d),Npn(n,n.g),n.c=new i$n(n.b),ST(n.c,(HS(),Olt)),agn(n,n.d),agn(n,n.g),Ohn(t,n.c.a.b),n.e=new MO(M0n,M0n),n.a=new MO(T0n,T0n),r=new Ww(t);r.a<r.c.c.length;)i=uG(N3(r),86),n.e.a=e.Math.min(n.e.a,i.g.c),n.e.b=e.Math.min(n.e.b,i.g.d),n.a.a=e.Math.max(n.a.a,i.g.c+i.g.b),n.a.b=e.Math.max(n.a.b,i.g.d+i.g.a);ET(n.c,new kt),u=0;do{c=_Vn(n),++u}while((u<2||c>T1n)&&u<10);ET(n.c,new yt),_Vn(n),YV(n.c),lVn(n.f)}function XVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(i=uG(oIn(n,(jYn(),JMt)),101),o=n.f,a=n.d,u=o.a+a.b+a.c,s=0-a.d-n.c.b,f=o.b+a.d+a.a-n.c.b,h=new Zm,l=new Zm,c=new Ww(t);c.a<c.c.c.length;){switch(r=uG(N3(c),10),i.g){case 1:case 2:case 3:OKn(r);break;case 4:w=(b=uG(oIn(r,WMt),8))?b.a:0,r.n.a=u*uM(pK(oIn(r,(GYn(),bmt))))-w,fhn(r,!0,!1);break;case 5:g=(d=uG(oIn(r,WMt),8))?d.a:0,r.n.a=uM(pK(oIn(r,(GYn(),bmt))))-g,fhn(r,!0,!1),o.a=e.Math.max(o.a,r.n.a+r.o.a/2)}switch(uG(oIn(r,(GYn(),Fpt)),64).g){case 1:r.n.b=s,mv(h.c,r);break;case 3:r.n.b=f,mv(l.c,r)}}switch(i.g){case 1:case 2:adn(h,n),adn(l,n);break;case 3:odn(h,n),odn(l,n)}}function zVn(n,t){var e,i,r,c,a,o,u,s,h,f,l;switch(n.k.g){case 1:if(i=uG(oIn(n,(GYn(),rmt)),18),(e=uG(oIn(i,cmt),75))?oM(gK(oIn(i,pmt)))&&(e=fln(e)):e=new Uk,s=uG(oIn(n,Zpt),12)){if(t<=(h=Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a]))).a)return h.b;s8(e,h,e.a,e.a.a)}if(f=uG(oIn(n,nmt),12)){if((l=Gfn(Uhn(cT(PNt,1),zZn,8,0,[f.i.n,f.n,f.a]))).a<=t)return l.b;s8(e,l,e.c.b,e.c)}if(e.b>=2){for(a=uG(I6(u=Fkn(e,0)),8),o=uG(I6(u),8);o.a<t&&u.b!=u.d.c;)a=o,o=uG(I6(u),8);return a.b+(t-a.a)/(o.a-a.a)*(o.b-a.b)}break;case 3:switch(r=(c=uG(oIn(uG(zq(n.j,0),12),(GYn(),rmt)),12)).i,c.j.g){case 1:return r.n.b;case 3:return r.n.b+r.o.b}}return jSn(n).b}function VVn(n){var t,e,i,r,c,a,o,u,s,f;for(c=new Ww(n.d.b);c.a<c.c.c.length;)for(o=new Ww(uG(N3(c),30).a);o.a<o.c.c.length;)!oM(gK(oIn(a=uG(N3(o),10),(jYn(),gyt))))||P6(Ggn(a))?(r=new gY(a.n.a-a.d.b,a.n.b-a.d.d,a.o.a+a.d.b+a.d.c,a.o.b+a.d.d+a.d.a),t=Tx(NS(AS(LS(new lk,a),r),rdt),n.a),Mx(OS(Xcn(new fk,Uhn(cT(zut,1),EZn,60,0,[t])),t),n.a),u=new nv,vJ(n.e,t,u),(e=x5(new Fz(ix(qgn(a).a.Kc(),new h)))-x5(new Fz(ix(Xgn(a).a.Kc(),new h))))<0?hfn(u,!0,(xdn(),JDt)):e>0&&hfn(u,!0,(xdn(),YDt)),a.k==(zIn(),lbt)&&XQ(u),vJ(n.f,a,t)):((s=(i=uG(pZ(Ggn(a)),18)).c.i)==a&&(s=i.d.i),f=new WO(s,YF(D$(a.n),s.n)),vJ(n.b,a,f))}function WVn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(i=uG(oIn(n,(OQn(),RPt)),27),u=vZn,s=vZn,a=j1n,o=j1n,m=Fkn(n.b,0);m.b!=m.d.c;)l=(g=uG(I6(m),39)).e,b=g.f,u=e.Math.min(u,l.a-b.a/2),s=e.Math.min(s,l.b-b.b/2),a=e.Math.max(a,l.a+b.a/2),o=e.Math.max(o,l.b+b.b/2);for(f=uG(zDn(i,(QGn(),pCt)),107),p=Fkn(n.b,0);p.b!=p.d.c;)F$(h=oIn(g=uG(I6(p),39),RPt),207)&&(kN(r=uG(h,27),g.e.a,g.e.b),aKn(r,g));for(d=Fkn(n.a,0);d.b!=d.d.c;)w=uG(I6(d),65),(t=uG(oIn(w,RPt),74))&&sqn(w.a,JFn(t,!0,!0));v=a-u+(f.b+f.c),c=o-s+(f.d+f.a),oM(gK(zDn(i,(XYn(),H$t))))||ZQn(i,v,c,!1,!1),Myn(i,h$t,v-(f.b+f.c)),Myn(i,s$t,c-(f.d+f.a))}function QVn(n,t){var e,i,r,c,a,o,u,s,f;for(o=!0,r=0,u=n.g[t.p],s=t.o.b+n.o,e=n.d[t.p][2],Y8(n.b,u,xwn(uG(zq(n.b,u),17).a-1+e)),Y8(n.c,u,uM(pK(zq(n.c,u)))-s+e*n.f),++u>=n.j?(++n.j,kD(n.b,xwn(1)),kD(n.c,s)):(i=n.d[t.p][1],Y8(n.b,u,xwn(uG(zq(n.b,u),17).a+1-i)),Y8(n.c,u,uM(pK(zq(n.c,u)))+s-i*n.f)),(n.r==(THn(),Ijt)&&(uG(zq(n.b,u),17).a>n.k||uG(zq(n.b,u-1),17).a>n.k)||n.r==Ljt&&(uM(pK(zq(n.c,u)))>n.n||uM(pK(zq(n.c,u-1)))>n.n))&&(o=!1),c=new Fz(ix(qgn(t).a.Kc(),new h));hDn(c);)a=uG(N9(c),18).c.i,n.g[a.p]==u&&(r+=uG((f=QVn(n,a)).a,17).a,o=o&&oM(gK(f.b)));return n.g[t.p]=u,new WO(xwn(r+=n.d[t.p][0]),(qx(),!!o))}function JVn(n,t){var e,i;uM(pK(oIn(t,(jYn(),dTt))))<2&&kfn(t,dTt,2),uG(oIn(t,Byt),88)==(xdn(),ZDt)&&kfn(t,Byt,pgn(t)),0==(e=uG(oIn(t,sTt),17)).a?kfn(t,(GYn(),dmt),new Upn):kfn(t,(GYn(),dmt),new v8(e.a)),null==gK(oIn(t,OMt))&&kfn(t,OMt,(qx(),xA(oIn(t,Vyt))===xA((_gn(),uxt)))),kS(new fX(null,new h3(t.a,16)),new Hd(n)),kS(sin(new fX(null,new h3(t.b,16)),new dt),new Ud(n)),i=new CVn(t),kfn(t,(GYn(),kmt),i),_J(n.a),JV(n.a,(uIn(),Tlt),uG(oIn(t,Fyt),188)),JV(n.a,jlt,uG(oIn(t,MMt),188)),JV(n.a,Elt,uG(oIn(t,Kyt),188)),JV(n.a,Slt,uG(oIn(t,$Mt),188)),JV(n.a,Plt,Rsn(uG(oIn(t,Vyt),223))),ZL(n.a,iYn(t)),kfn(t,wmt,Qzn(n.a,t))}function YVn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m;for(l=new Ym,o=new Zm,HAn(n,i,n.d.Ag(),o,l),HAn(n,r,n.d.Bg(),o,l),n.b=.2*(g=DDn(sin(new fX(null,new h3(o,16)),new pa)),p=DDn(sin(new fX(null,new h3(o,16)),new ma)),e.Math.min(g,p)),a=0,u=0;u<o.c.length-1;u++)for(u3(u,o.c.length),s=uG(o.c[u],118),d=u+1;d<o.c.length;d++)a+=OXn(n,s,(u3(d,o.c.length),uG(o.c[d],118)));for(b=uG(oIn(t,(GYn(),dmt)),234),a>=2&&(m=sRn(o,!0,b),!n.e&&(n.e=new pp(n)),xvn(n.e,m,o,n.b)),BPn(o,b),oWn(o),w=-1,f=new Ww(o);f.a<f.c.c.length;)h=uG(N3(f),118),e.Math.abs(h.s-h.c)<t4n||(w=e.Math.max(w,h.o),n.d.yg(h,c,n.c));return n.d.a.a.$b(),w+1}function ZVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(l=(s=uG(B$(new Tp(Fkn(new Mp(t).a.d,0))),39))?uG(oIn(s,(OQn(),APt)),39):null,r=1;s&&l;){for(a=0,m=0,e=s,i=l,c=0;c<r;c++)e=M7(e),i=M7(i),m+=uM(pK(oIn(e,(OQn(),xPt)))),a+=uM(pK(oIn(i,xPt)));if(p=uM(pK(oIn(l,(OQn(),FPt)))),g=uM(pK(oIn(s,FPt))),h=Mgn(n,s,l),0<(f=p+a+n.b+h-g-m)){for(o=t,u=0;o&&o!=i;)++u,o=uG(oIn(o,LPt),39);if(!o)return;for(d=f/u,o=t;o!=i;)w=uM(pK(oIn(o,FPt)))+f,kfn(o,FPt,w),b=uM(pK(oIn(o,xPt)))+f,kfn(o,xPt,b),f-=d,o=uG(oIn(o,LPt),39)}++r,l=(s=0==s.d.b?cUn(new Mp(t),r):uG(B$(new Tp(Fkn(new Mp(s).a.d,0))),39))?uG(oIn(s,APt),39):null}}function nWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;return l=n.c[t],b=n.c[e],!((w=uG(oIn(l,(GYn(),Vpt)),15))&&0!=w.gc()&&w.Hc(b)||(d=l.k!=(zIn(),wbt)&&b.k!=wbt,m=(g=uG(oIn(l,zpt),10))!=(p=uG(oIn(b,zpt),10)),v=!!g&&g!=l||!!p&&p!=b,k=qMn(l,(KQn(),yRt)),y=qMn(b,KRt),v|=qMn(l,KRt)||qMn(b,yRt),d&&(v&&m||k||y))||l.k==(zIn(),gbt)&&b.k==dbt||b.k==(zIn(),gbt)&&l.k==dbt)&&(h=n.c[t],c=n.c[e],r=YEn(n.e,h,c,(KQn(),_Rt)),u=YEn(n.i,h,c,kRt),wKn(n.f,h,c),s=Jln(n.b,h,c)+uG(r.a,17).a+uG(u.a,17).a+n.f.d,o=Jln(n.b,c,h)+uG(r.b,17).a+uG(u.b,17).a+n.f.b,n.a&&(f=uG(oIn(h,rmt),12),a=uG(oIn(c,rmt),12),s+=uG((i=Sjn(n.g,f,a)).a,17).a,o+=uG(i.b,17).a),s>o)}function tWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(h=M0n,f=M0n,u=T0n,s=T0n,b=new Ww(t.i);b.a<b.c.c.length;)l=uG(N3(b),68),kN(c=uG(uG(cQ(n.g,l.a),42).b,27),l.b.c,l.b.d),h=e.Math.min(h,c.i),f=e.Math.min(f,c.j),u=e.Math.max(u,c.i+c.g),s=e.Math.max(s,c.j+c.f);for(w=uG(zDn(n.c,(fIn(),bLt)),107),ZQn(n.c,u-h+(w.b+w.c),s-f+(w.d+w.a),!0,!0),JCn(n.c,-h+w.b,-f+w.d),r=new DD(xY(n.c));r.e!=r.i.gc();)o=JFn(i=uG(Zkn(r),74),!0,!0),d=bIn(i),p=gIn(i),g=new MO(d.i+d.g/2,d.j+d.f/2),a=new MO(p.i+p.g/2,p.j+p.f/2),OEn(m=YF(new MO(a.a,a.b),g),d.g,d.f),JF(g,m),OEn(v=YF(new MO(g.a,g.b),a),p.g,p.f),JF(a,v),MN(o,g.a,g.b),yN(o,a.a,a.b)}function eWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;for(t.Ug("Label dummy removal",1),i=uM(pK(oIn(n,(jYn(),pTt)))),r=uM(pK(oIn(n,yTt))),u=uG(oIn(n,Byt),88),o=new Ww(n.b);o.a<o.c.c.length;)for(h=new N4(uG(N3(o),30).a,0);h.b<h.d.gc();)MK(h.b<h.d.gc()),(s=uG(h.d.Xb(h.c=h.b++),10)).k==(zIn(),bbt)&&(f=uG(oIn(s,(GYn(),rmt)),18),b=uM(pK(oIn(f,tMt))),a=xA(oIn(s,Qpt))===xA((Ajn(),Dxt)),e=new eN(s.n),a&&(e.b+=b+i),c=new MO(s.o.a,s.o.b+(s.k!=bbt||Qj(JJ(uG(oIn(s,gmt),15).Oc(),new hd(new _t))).Bd((vS(),Kut))?-b-i:0)),l=uG(oIn(s,gmt),15),u==(xdn(),nxt)||u==QDt?KDn(l,e,r,c,a,u):bwn(l,e,r,c),Ohn(f.b,l),pVn(s,xA(oIn(n,Vyt))===xA((_gn(),sxt))),LQ(h));t.Vg()}function iWn(n){n.q||(n.q=!0,n.p=Nsn(n,0),n.a=Nsn(n,1),Won(n.a,0),n.f=Nsn(n,2),Won(n.f,1),Von(n.f,2),n.n=Nsn(n,3),Von(n.n,3),Von(n.n,4),Von(n.n,5),Von(n.n,6),n.g=Nsn(n,4),Won(n.g,7),Von(n.g,8),n.c=Nsn(n,5),Won(n.c,7),Won(n.c,8),n.i=Nsn(n,6),Won(n.i,9),Won(n.i,10),Won(n.i,11),Won(n.i,12),Von(n.i,13),n.j=Nsn(n,7),Won(n.j,9),n.d=Nsn(n,8),Won(n.d,3),Won(n.d,4),Won(n.d,5),Won(n.d,6),Von(n.d,7),Von(n.d,8),Von(n.d,9),Von(n.d,10),n.b=Nsn(n,9),Von(n.b,0),Von(n.b,1),n.e=Nsn(n,10),Von(n.e,1),Von(n.e,2),Von(n.e,3),Von(n.e,4),Won(n.e,5),Won(n.e,6),Won(n.e,7),Won(n.e,8),Won(n.e,9),Won(n.e,10),Von(n.e,11),n.k=Nsn(n,11),Von(n.k,0),Von(n.k,1),n.o=$sn(n,12),n.s=$sn(n,13))}function rWn(n,t){t.dc()&&gG(n.j,!0,!0,!0,!0),udn(t,(KQn(),PRt))&&gG(n.j,!0,!0,!0,!1),udn(t,MRt)&&gG(n.j,!1,!0,!0,!0),udn(t,DRt)&&gG(n.j,!0,!0,!1,!0),udn(t,RRt)&&gG(n.j,!0,!1,!0,!0),udn(t,CRt)&&gG(n.j,!1,!0,!0,!1),udn(t,TRt)&&gG(n.j,!1,!0,!1,!0),udn(t,xRt)&&gG(n.j,!0,!1,!1,!0),udn(t,$Rt)&&gG(n.j,!0,!1,!0,!1),udn(t,LRt)&&gG(n.j,!0,!0,!0,!0),udn(t,ERt)&&gG(n.j,!0,!0,!0,!0),udn(t,LRt)&&gG(n.j,!0,!0,!0,!0),udn(t,jRt)&&gG(n.j,!0,!0,!0,!0),udn(t,NRt)&&gG(n.j,!0,!0,!0,!0),udn(t,ARt)&&gG(n.j,!0,!0,!0,!0),udn(t,ORt)&&gG(n.j,!0,!0,!0,!0)}function cWn(n,t,e){var i,r,c,a,o,u,s,h,f;if(n.a!=t.jk())throw hv(new vM(tet+t.xe()+eet));if(i=tdn((gAn(),kBt),t).Jl())return i.jk().wi().ri(i,e);if(a=tdn(kBt,t).Ll()){if(null==e)return null;if((o=uG(e,15)).dc())return"";for(f=new zM,c=o.Kc();c.Ob();)r=c.Pb(),VA(f,a.jk().wi().ri(a,r)),f.a+=" ";return CL(f,f.a.length-1)}if(!(h=tdn(kBt,t).Ml()).dc()){for(s=h.Kc();s.Ob();)if((u=uG(s.Pb(),156)).fk(e))try{if(null!=(f=u.jk().wi().ri(u,e)))return f}catch(l){if(!F$(l=Ehn(l),103))throw hv(l)}throw hv(new vM("Invalid value: '"+e+"' for datatype :"+t.xe()))}return uG(t,847).ok(),null==e?null:F$(e,180)?""+uG(e,180).a:Tbn(e)==iot?N$(QKt[0],uG(e,206)):cpn(e)}function aWn(n){var t,i,r,c,a,o,u,s,h;for(s=new lS,o=new lS,c=new Ww(n);c.a<c.c.c.length;)(i=uG(N3(c),131)).v=0,i.n=i.i.c.length,i.u=i.t.c.length,0==i.n&&s8(s,i,s.c.b,s.c),0==i.u&&0==i.r.a.gc()&&s8(o,i,o.c.b,o.c);for(a=-1;0!=s.b;)for(t=new Ww((i=uG(Kjn(s,0),131)).t);t.a<t.c.c.length;)(h=uG(N3(t),274).b).v=e.Math.max(h.v,i.v+1),a=e.Math.max(a,h.v),--h.n,0==h.n&&s8(s,h,s.c.b,s.c);if(a>-1){for(r=Fkn(o,0);r.b!=r.d.c;)(i=uG(I6(r),131)).v=a;for(;0!=o.b;)for(t=new Ww((i=uG(Kjn(o,0),131)).i);t.a<t.c.c.length;)0==(u=uG(N3(t),274).a).r.a.gc()&&(u.v=e.Math.min(u.v,i.v-1),--u.u,0==u.u&&s8(o,u,o.c.b,o.c))}}function oWn(n){var t,i,r,c,a,o,u,s,h;for(s=new Zm,o=new Zm,a=new Ww(n);a.a<a.c.c.length;)Qb(r=uG(N3(a),118),r.f.c.length),Jb(r,r.k.c.length),0==r.d&&mv(s.c,r),0==r.i&&0==r.e.b&&mv(o.c,r);for(i=-1;0!=s.c.length;)for(t=new Ww((r=uG(i7(s,0),118)).k);t.a<t.c.c.length;)Yb(h=uG(N3(t),132).b,e.Math.max(h.o,r.o+1)),i=e.Math.max(i,h.o),Qb(h,h.d-1),0==h.d&&mv(s.c,h);if(i>-1){for(c=new Ww(o);c.a<c.c.c.length;)(r=uG(N3(c),118)).o=i;for(;0!=o.c.length;)for(t=new Ww((r=uG(i7(o,0),118)).f);t.a<t.c.c.length;)(u=uG(N3(t),132).a).e.b>0||(Yb(u,e.Math.min(u.o,r.o-1)),Jb(u,u.i-1),0==u.i&&mv(o.c,u))}}function uWn(n,t,i,r,c){var a,o,u,s;return s=M0n,o=!1,a=!!(u=rXn(n,YF(new MO(t.a,t.b),n),JF(new MO(i.a,i.b),c),YF(new MO(r.a,r.b),i)))&&!(e.Math.abs(u.a-n.a)<=Hnt&&e.Math.abs(u.b-n.b)<=Hnt||e.Math.abs(u.a-t.a)<=Hnt&&e.Math.abs(u.b-t.b)<=Hnt),(u=rXn(n,YF(new MO(t.a,t.b),n),i,c))&&((e.Math.abs(u.a-n.a)<=Hnt&&e.Math.abs(u.b-n.b)<=Hnt)==(e.Math.abs(u.a-t.a)<=Hnt&&e.Math.abs(u.b-t.b)<=Hnt)||a?s=e.Math.min(s,NQ(YF(u,i))):o=!0),(u=rXn(n,YF(new MO(t.a,t.b),n),r,c))&&(o||(e.Math.abs(u.a-n.a)<=Hnt&&e.Math.abs(u.b-n.b)<=Hnt)==(e.Math.abs(u.a-t.a)<=Hnt&&e.Math.abs(u.b-t.b)<=Hnt)||a)&&(s=e.Math.min(s,NQ(YF(u,r)))),s}function sWn(n){hP(n,new hCn(xT(FT(DT(KT(RT(new bu,$4n),D4n),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new gt),c4n))),U4(n,$4n,f4n,Jkn(olt)),U4(n,$4n,b4n,(qx(),!0)),U4(n,$4n,p4n,Jkn(hlt)),U4(n,$4n,x4n,Jkn(flt)),U4(n,$4n,g4n,Jkn(llt)),U4(n,$4n,m4n,Jkn(slt)),U4(n,$4n,w4n,Jkn(blt)),U4(n,$4n,v4n,Jkn(wlt)),U4(n,$4n,I4n,Jkn(alt)),U4(n,$4n,A4n,Jkn(rlt)),U4(n,$4n,L4n,Jkn(clt)),U4(n,$4n,N4n,Jkn(ult)),U4(n,$4n,O4n,Jkn(ilt))}function hWn(n){var t,e,i,r,c,a,o,u;for(t=null,i=new Ww(n);i.a<i.c.c.length;)uM(oD((e=uG(N3(i),239)).g,e.d[0]).a),e.b=null,e.e&&e.e.gc()>0&&0==e.c&&(!t&&(t=new Zm),mv(t.c,e));if(t)for(;0!=t.c.length;){if((e=uG(i7(t,0),239)).b&&e.b.c.length>0)for(!e.b&&(e.b=new Zm),c=new Ww(e.b);c.a<c.c.c.length;)if(sM(oD((r=uG(N3(c),239)).g,r.d[0]).a)==sM(oD(e.g,e.d[0]).a)){if(Ten(n,r,0)>Ten(n,e,0))return new WO(r,e)}else if(uM(oD(r.g,r.d[0]).a)>uM(oD(e.g,e.d[0]).a))return new WO(r,e);for(o=(!e.e&&(e.e=new Zm),e.e).Kc();o.Ob();)!(a=uG(o.Pb(),239)).b&&(a.b=new Zm),o3(0,(u=a.b).c.length),pC(u.c,0,e),a.c==u.c.length&&mv(t.c,a)}return null}function fWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Interactive crossing minimization",1),a=0,c=new Ww(n.b);c.a<c.c.c.length;)(i=uG(N3(c),30)).p=a++;for(d=new rj((l=SPn(n)).length),GXn(new IM(Uhn(cT(fdt,1),EZn,230,0,[d])),l),w=0,a=0,r=new Ww(n.b);r.a<r.c.c.length;){for(e=0,f=0,h=new Ww((i=uG(N3(r),30)).a);h.a<h.c.c.length;)for((u=uG(N3(h),10)).n.a>0&&(e+=u.n.a+u.o.a/2,++f),b=new Ww(u.j);b.a<b.c.c.length;)uG(N3(b),12).p=w++;for(f>0&&(e/=f),g=Inn(eUt,I0n,28,i.a.c.length,15,1),o=0,s=new Ww(i.a);s.a<s.c.c.length;)(u=uG(N3(s),10)).p=o++,g[u.p]=zVn(u,e),u.k==(zIn(),wbt)&&kfn(u,(GYn(),amt),g[u.p]);hZ(),f$(i.a,new Wg(g)),hUn(d,l,a,!0),++a}t.Vg()}function lWn(n,t){var e,i,r,c,a,o,u,s,h;if(5!=t.e){if(null!=(s=t).b&&null!=n.b){for(pxn(n),szn(n),pxn(s),szn(s),e=Inn(YHt,W1n,28,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],o=s.b[a],u=s.b[a+1],c<o)e[h++]=n.b[i++],e[h++]=n.b[i++];else if(c>=o&&r<=u)o<=r&&c<=u?i+=2:o<=r?(n.b[i]=u+1,a+=2):c<=u?(e[h++]=r,e[h++]=o-1,i+=2):(e[h++]=r,e[h++]=o-1,n.b[i]=u+1,a+=2);else{if(!(u<r))throw hv(new Ky("Token#subtractRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] - ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=Inn(YHt,W1n,28,h,15,1),qGn(e,0,n.b,0,h)}}else GVn(n,t)}function bWn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g;for(w=COn(JFn(t,!1,!1)),r&&(w=fln(w)),g=uM(pK(zDn(t,(ryn(),Jht)))),MK(0!=w.b),b=uG(w.a.a.c,8),h=uG(hyn(w,1),8),w.b>2?(Ohn(s=new Zm,new C2(w,1,w.b)),zsn(d=new pDn(vYn(s,g+n.a)),t),mv(i.c,d)):d=uG(cQ(n.b,r?bIn(t):gIn(t)),272),o=bIn(t),r&&(o=gIn(t)),a=GOn(b,o),u=g+n.a,a.a?(u+=e.Math.abs(b.b-h.b),l=new MO(h.a,(h.b+b.b)/2)):(u+=e.Math.abs(b.a-h.a),l=new MO((h.a+b.a)/2,h.b)),vJ(r?n.d:n.c,t,new bTn(d,a,l,u)),vJ(n.b,t,d),!t.n&&(t.n=new fV(lFt,t,1,7)),f=new DD(t.n);f.e!=f.i.gc();)c=nHn(n,uG(Zkn(f),135),!0,0,0),mv(i.c,c)}function wWn(n){var t,e,i,r,c,a,o;if(!n.A.dc()){if(n.A.Hc((Qmn(),QRt))&&(uG(AJ(n.b,(KQn(),yRt)),127).k=!0,uG(AJ(n.b,KRt),127).k=!0,t=n.q!=($Pn(),aRt)&&n.q!=cRt,Db(uG(AJ(n.b,kRt),127),t),Db(uG(AJ(n.b,_Rt),127),t),Db(n.g,t),n.A.Hc(JRt)&&(uG(AJ(n.b,yRt),127).j=!0,uG(AJ(n.b,KRt),127).j=!0,uG(AJ(n.b,kRt),127).k=!0,uG(AJ(n.b,_Rt),127).k=!0,n.g.k=!0)),n.A.Hc(WRt))for(n.a.j=!0,n.a.k=!0,n.g.j=!0,n.g.k=!0,o=n.B.Hc((oUn(),cKt)),c=0,a=(r=Nkn()).length;c<a;++c)i=r[c],(e=uG(AJ(n.i,i),314))&&(vvn(i)?(e.j=!0,e.k=!0):(e.j=!o,e.k=!o));n.A.Hc(VRt)&&n.B.Hc((oUn(),rKt))&&(n.g.j=!0,n.g.j=!0,n.a.j||(n.a.j=!0,n.a.k=!0,n.a.e=!0))}}function dWn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d;for(e=new Ww(n.e.b);e.a<e.c.c.length;)for(r=new Ww(uG(N3(e),30).a);r.a<r.c.c.length;)if(i=uG(N3(r),10),u=(f=n.i[i.p]).a.e,o=f.d.e,i.n.b=u,d=o-u-i.o.b,t=WXn(i),Yyn(),h=(i.q?i.q:(hZ(),hZ(),Vot))._b((jYn(),LMt))?uG(oIn(i,LMt),203):uG(oIn(HQ(i),NMt),203),t&&(h==wjt||h==bjt)&&(i.o.b+=d),t&&(h==gjt||h==wjt||h==bjt)){for(b=new Ww(i.j);b.a<b.c.c.length;)l=uG(N3(b),12),(KQn(),ERt).Hc(l.j)&&(s=uG(cQ(n.k,l),125),l.n.b=s.e-u);for(a=new Ww(i.b);a.a<a.c.c.length;)c=uG(N3(a),72),(w=uG(oIn(i,PMt),21)).Hc((VDn(),Xxt))?c.n.b+=d:w.Hc(zxt)&&(c.n.b+=d/2);(h==wjt||h==bjt)&&Dgn(i,(KQn(),KRt)).Jc(new fp(d))}}function gWn(n,t,e){var i,r,c,a,o,u,s,h;for(u=new Zm,o=new Ww(t.a);o.a<o.c.c.length;)for(h=Dgn(uG(N3(o),10),(KQn(),kRt)).Kc();h.Ob();)for(r=new Ww(uG(h.Pb(),12).g);r.a<r.c.c.length;)!v9(i=uG(N3(r),18))&&i.c.i.c==i.d.i.c||v9(i)||i.d.i.c!=e||mv(u.c,i);for(a=Spn(e.a).Kc();a.Ob();)for(h=Dgn(uG(a.Pb(),10),(KQn(),_Rt)).Kc();h.Ob();)for(r=new Ww(uG(h.Pb(),12).e);r.a<r.c.c.length;)if((v9(i=uG(N3(r),18))||i.c.i.c!=i.d.i.c)&&!v9(i)&&i.c.i.c==t&&0!=u.c.length){for(MK((s=new N4(u,u.c.length)).b>0),c=uG(s.a.Xb(s.c=--s.b),18);c!=i&&s.b>0;)n.a[c.p]=!0,n.a[i.p]=!0,MK(s.b>0),c=uG(s.a.Xb(s.c=--s.b),18);s.b>0&&LQ(s)}}function pWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(!n.b)return!1;for(a=null,l=null,r=1,(u=new _nn(null,null)).a[1]=n.b,f=u;f.a[r];)s=r,o=l,l=f,f=f.a[r],r=(i=n.a.Ne(t,f.d))<0?0:1,0==i&&(!e.c||OJ(f.e,e.d))&&(a=f),f&&f.b||NM(f.a[r])||(NM(f.a[1-r])?l=l.a[s]=Ton(f,r):NM(f.a[1-r])||(b=l.a[1-s])&&(NM(b.a[1-s])||NM(b.a[s])?(c=o.a[1]==l?1:0,NM(b.a[s])?o.a[c]=P4(l,s):NM(b.a[1-s])&&(o.a[c]=Ton(l,s)),f.b=o.a[c].b=!0,o.a[c].a[0].b=!1,o.a[c].a[1].b=!1):(l.b=!1,b.b=!0,f.b=!0)));return a&&(e.b=!0,e.d=a.e,f!=a&&(YCn(n,u,a,h=new _nn(f.d,f.e)),l==a&&(l=h)),l.a[l.a[1]==f?1:0]=f.a[f.a[0]?0:1],--n.c),n.b=u.a[1],n.b&&(n.b.b=!1),e.b}function mWn(n){var t,i,r,c,a,o,u,s,h,f,l,b;for(c=new Ww(n.a.a.b);c.a<c.c.c.length;)for(s=(r=uG(N3(c),60)).c.Kc();s.Ob();)u=uG(s.Pb(),60),r.a!=u.a&&(l=hN(n.a.d)?n.a.g.ff(r,u):n.a.g.gf(r,u),a=r.b.a+r.d.b+l-u.b.a,a=e.Math.ceil(a),a=e.Math.max(0,a),$en(r,u)?(o=jx(new sk,n.d),t=(h=t0(e.Math.ceil(u.b.a-r.b.a)))-(u.b.a-r.b.a),i=r,(f=Q6(r).a)||(f=Q6(u).a,t=-t,i=u),f&&(i.b.a-=t,f.n.a-=t),RKn(xS(DS(RS($S(new uk,e.Math.max(0,h)),1),o),n.c[r.a.d])),RKn(xS(DS(RS($S(new uk,e.Math.max(0,-h)),1),o),n.c[u.a.d]))):(b=1,(F$(r.g,154)&&F$(u.g,10)||F$(u.g,154)&&F$(r.g,10))&&(b=2),RKn(xS(DS(RS($S(new uk,t0(a)),b),n.c[r.a.d]),n.c[u.a.d]))))}function vWn(n,t,i){var r,c,a,o,u,s,h,f,l,b;if(i)for(r=-1,f=new N4(t,0);f.b<f.d.gc();){if(MK(f.b<f.d.gc()),u=uG(f.d.Xb(f.c=f.b++),10),null==(l=n.c[u.c.p][u.p].a)){for(o=r+1,a=new N4(t,f.b);a.b<a.d.gc();)if(null!=(b=aD(n,(MK(a.b<a.d.gc()),uG(a.d.Xb(a.c=a.b++),10))).a)){tJ(b),o=b;break}l=(r+o)/2,n.c[u.c.p][u.p].a=l,n.c[u.c.p][u.p].d=(tJ(l),l),n.c[u.c.p][u.p].b=1}tJ(l),r=l}else{for(c=0,h=new Ww(t);h.a<h.c.c.length;)u=uG(N3(h),10),null!=n.c[u.c.p][u.p].a&&(c=e.Math.max(c,uM(n.c[u.c.p][u.p].a)));for(c+=2,s=new Ww(t);s.a<s.c.c.length;)u=uG(N3(s),10),null==n.c[u.c.p][u.p].a&&(l=uRn(n.i,24)*z0n*c-1,n.c[u.c.p][u.p].a=l,n.c[u.c.p][u.p].d=l,n.c[u.c.p][u.p].b=1)}}function kWn(n,t,e){var i,r,c,a,o,u,s,h,f;for(!e&&(e=cfn(t.q.getTimezoneOffset())),r=6e4*(t.q.getTimezoneOffset()-e.a),u=o=new DK(Lgn(Bsn(t.q.getTime()),r)),o.q.getTimezoneOffset()!=t.q.getTimezoneOffset()&&(r>0?r-=864e5:r+=864e5,u=new DK(Lgn(Bsn(t.q.getTime()),r))),h=new QM,s=n.a.length,c=0;c<s;)if((i=VJ(n.a,c))>=97&&i<=122||i>=65&&i<=90){for(a=c+1;a<s&&VJ(n.a,a)==i;++a);KYn(h,i,a-c,o,u,e),c=a}else if(39==i){if(++c<s&&39==VJ(n.a,c)){h.a+="'",++c;continue}for(f=!1;!f;){for(a=c;a<s&&39!=VJ(n.a,a);)++a;if(a>=s)throw hv(new vM("Missing trailing '"));a+1<s&&39==VJ(n.a,a+1)?++a:f=!0,JA(h,r1(n.a,c,a)),c=a+1}}else h.a+=String.fromCharCode(i),++c;return h.a}function yWn(){ML(u_t,new Ys),ML(c_t,new sh),ML(h_t,new kh),ML(s_t,new Sh),ML(f_t,new Ph),ML(w_t,new Ch),ML(d_t,new Ih),ML(sFt,new Oh),ML(uFt,new Hs),ML(hFt,new Us),ML(nFt,new Gs),ML(p_t,new qs),ML(fFt,new Xs),ML(m_t,new zs),ML(v_t,new Vs),ML(o_t,new Ws),ML(a_t,new Qs),ML(wBt,new Js),ML(g_t,new Zs),ML(J_t,new nh),ML(cot,new th),ML(cT(tUt,1),new eh),ML(uot,new ih),ML(hot,new rh),ML(iot,new ch),ML(aUt,new ah),ML(fot,new oh),ML(CFt,new uh),ML(BFt,new hh),ML(IBt,new fh),ML(Z_t,new lh),ML(lot,new bh),ML(dot,new wh),ML(gat,new dh),ML(yot,new gh),ML(mat,new ph),ML(jBt,new mh),ML(oUt,new vh),ML(Tot,new yh),ML($ot,new Mh),ML(OFt,new Th),ML(uUt,new jh)}function MWn(n,t){var e,i,r,c,a,o;if(null==n)return IZn;if(null!=t.a.zc(n,t))return"[...]";for(e=new Ysn(TZn,"[","]"),c=0,a=(r=n).length;c<a;++c)null!=(i=r[c])&&0!=(4&Tbn(i).i)?!Array.isArray(i)||(o=Min(i))>=14&&o<=16?F$(i,183)?o7(e,PLn(uG(i,183))):F$(i,195)?o7(e,xPn(uG(i,195))):F$(i,201)?o7(e,aOn(uG(i,201))):F$(i,2111)?o7(e,RPn(uG(i,2111))):F$(i,53)?o7(e,SLn(uG(i,53))):F$(i,376)?o7(e,aNn(uG(i,376))):F$(i,846)?o7(e,ELn(uG(i,846))):F$(i,109)&&o7(e,jLn(uG(i,109))):t.a._b(i)?(e.a?JA(e.a,e.b):e.a=new lx(e.d),WA(e.a,"[...]")):o7(e,MWn(Kcn(i),new oX(t))):o7(e,null==i?IZn:cpn(i));return e.a?0==e.e.length?e.a.a:e.a.a+""+e.e:e.c}function TWn(n,t){var e,i,r,c;c=n.F,null==t?(n.F=null,sbn(n,null)):(n.F=(tJ(t),t),-1!=(i=xL(t,$Cn(60)))?(Knn(0,i,t.length),r=t.substr(0,i),-1==xL(t,$Cn(46))&&!m_(r,dZn)&&!m_(r,lrt)&&!m_(r,brt)&&!m_(r,wrt)&&!m_(r,drt)&&!m_(r,grt)&&!m_(r,prt)&&!m_(r,mrt)&&(r=vrt),-1!=(e=ax(t,$Cn(62)))&&(r+=""+(s3(e+1,t.length+1),t.substr(e+1))),sbn(n,r)):(r=t,-1==xL(t,$Cn(46))&&(-1!=(i=xL(t,$Cn(91)))&&(Knn(0,i,t.length),r=t.substr(0,i)),m_(r,dZn)||m_(r,lrt)||m_(r,brt)||m_(r,wrt)||m_(r,drt)||m_(r,grt)||m_(r,prt)||m_(r,mrt)?r=t:(r=vrt,-1!=i&&(r+=""+(s3(i,t.length+1),t.substr(i))))),sbn(n,r),r==t&&(n.F=n.D))),0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,5,c,t))}function jWn(n,t){var e,i,r,c,a,o,u,s;if(s3(o=t.length-1,t.length),93==(a=t.charCodeAt(o))){if((c=xL(t,$Cn(91)))>=0)return r=fpn(n,(Knn(1,c,t.length),t.substr(1,c-1))),Knn(c+1,o,t.length),GJn(n,t.substr(c+1,o-(c+1)),r)}else{if(e=-1,null==oot&&(oot=new RegExp("\\d")),oot.test(String.fromCharCode(a))&&(e=T_(t,$Cn(46),o-1))>=0){i=uG(U9(n,jrn(n,(Knn(1,e,t.length),t.substr(1,e-1))),!1),61),u=0;try{u=vUn((s3(e+1,t.length+1),t.substr(e+1)),j1n,vZn)}catch(h){throw F$(h=Ehn(h),130)?hv(new Pen(h)):hv(h)}if(u<i.gc())return F$(s=i.Xb(u),76)&&(s=uG(s,76).md()),uG(s,58)}if(e<0)return uG(U9(n,jrn(n,(s3(1,t.length+1),t.substr(1))),!1),58)}return null}function EWn(n,t){var i,r,c,a,o,u,s,f,l,b,w,d,g;for(t.Ug("Label dummy insertions",1),b=new Zm,o=uM(pK(oIn(n,(jYn(),pTt)))),f=uM(pK(oIn(n,yTt))),l=uG(oIn(n,Byt),88),w=new Ww(n.a);w.a<w.c.c.length;)for(a=new Fz(ix(Xgn(uG(N3(w),10)).a.Kc(),new h));hDn(a);)if((c=uG(N9(a),18)).c.i!=c.d.i&&_$(c.b,Bwt)){for(i=Jxn(n,c,g=grn(c),d=iR(c.b.c.length)),mv(b.c,i),r=i.o,u=new N4(c.b,0);u.b<u.d.gc();)MK(u.b<u.d.gc()),xA(oIn(s=uG(u.d.Xb(u.c=u.b++),72),Xyt))===xA((Zrn(),ixt))&&(l==(xdn(),nxt)||l==QDt?(r.a+=s.o.a+f,r.b=e.Math.max(r.b,s.o.b)):(r.a=e.Math.max(r.a,s.o.a),r.b+=s.o.b+f),mv(d.c,s),LQ(u));l==(xdn(),nxt)||l==QDt?(r.a-=f,r.b+=o+g):r.b+=o-f+g}Ohn(n.a,b),t.Vg()}function SWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;if(n.c=n.e,l=null==(b=gK(oIn(t,(jYn(),hTt))))||(tJ(b),b),c=uG(oIn(t,(GYn(),Hpt)),21).Hc((r_n(),tpt)),e=!((r=uG(oIn(t,JMt),101))==($Pn(),rRt)||r==aRt||r==cRt),!l||!e&&c)f=new IM(Uhn(cT(sbt,1),V4n,36,0,[t]));else{for(h=new Ww(t.a);h.a<h.c.c.length;)uG(N3(h),10).p=0;for(f=new Zm,s=new Ww(t.a);s.a<s.c.c.length;)if(i=GUn(n,uG(N3(s),10),null)){for(zsn(u=new Dan,t),kfn(u,xpt,uG(i.b,21)),WY(u.d,t.d),kfn(u,RMt,null),o=uG(i.a,15).Kc();o.Ob();)a=uG(o.Pb(),10),kD(u.a,a),a.a=u;f.Fc(u)}c&&(xA(oIn(t,kyt))===xA((Uvn(),Ylt))?n.c=n.b:xA(oIn(t,kyt))===xA(nbt)?n.c=n.d:n.c=n.a)}return xA(oIn(t,kyt))!==xA((Uvn(),tbt))&&(hZ(),f.jd(new $t)),f}function PWn(n,t,e){var i,r,c,a,o;if(o=n.c,!t&&(t=nBt),n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&(a=new lV(n,1,2,o,n.c),e?e.nj(a):e=a),o!=t)if(F$(n.Cb,291))n.Db>>16==-10?e=uG(n.Cb,291).Yk(t,e):n.Db>>16==-15&&(!t&&(YYn(),t=N_t),!o&&(YYn(),o=N_t),n.Cb.Yh()&&(a=new Ken(n.Cb,1,13,o,t,Hyn(Aen(uG(n.Cb,62)),n),!1),e?e.nj(a):e=a));else if(F$(n.Cb,90))n.Db>>16==-23&&(F$(t,90)||(YYn(),t=x_t),F$(o,90)||(YYn(),o=x_t),n.Cb.Yh()&&(a=new Ken(n.Cb,1,10,o,t,Hyn(z5(uG(n.Cb,29)),n),!1),e?e.nj(a):e=a));else if(F$(n.Cb,456))for(!(c=uG(n.Cb,850)).b&&(c.b=new Um(new ty)),r=new Gm(new bsn(new Nw(c.b.a).a));r.a.b;)e=PWn(i=uG(von(r.a).ld(),89),bRn(i,c),e);return e}function CWn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(a=oM(gK(zDn(n,(jYn(),sMt)))),l=uG(zDn(n,nTt),21),u=!1,s=!1,f=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));!(f.e==f.i.gc()||u&&s);){for(c=uG(Zkn(f),123),o=0,r=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!c.d&&(c.d=new f_(aFt,c,8,5)),c.d),(!c.e&&(c.e=new f_(aFt,c,7,4)),c.e)])));hDn(r)&&(i=uG(N9(r),74),h=a&&BNn(i)&&oM(gK(zDn(i,hMt))),e=Lzn((!i.b&&(i.b=new f_(cFt,i,4,7)),i.b),c)?n==R0(lCn(uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84))):n==R0(lCn(uG(zrn((!i.b&&(i.b=new f_(cFt,i,4,7)),i.b),0),84))),!((h||e)&&++o>1)););(o>0||l.Hc((eNn(),wRt))&&(!c.n&&(c.n=new fV(lFt,c,1,7)),c.n).i>0)&&(u=!0),o>1&&(s=!0)}u&&t.Fc((r_n(),tpt)),s&&t.Fc((r_n(),ept))}function IWn(n){var t,i,r,c,a,o,u,s,h,f,l,b;if((b=uG(zDn(n,(XYn(),_$t)),21)).dc())return null;if(u=0,o=0,b.Hc((Qmn(),QRt))){for(f=uG(zDn(n,sDt),101),r=2,i=2,c=2,a=2,t=R0(n)?uG(zDn(R0(n),d$t),88):uG(zDn(n,d$t),88),h=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));h.e!=h.i.gc();)if(s=uG(Zkn(h),123),(l=uG(zDn(s,gDt),64))==(KQn(),FRt)&&(l=RGn(s,t),Myn(s,gDt,l)),f==($Pn(),cRt))switch(l.g){case 1:r=e.Math.max(r,s.i+s.g);break;case 2:i=e.Math.max(i,s.j+s.f);break;case 3:c=e.Math.max(c,s.i+s.g);break;case 4:a=e.Math.max(a,s.j+s.f)}else switch(l.g){case 1:r+=s.g+2;break;case 2:i+=s.f+2;break;case 3:c+=s.g+2;break;case 4:a+=s.f+2}u=e.Math.max(r,c),o=e.Math.max(i,a)}return ZQn(n,u,o,!0,!0)}function OWn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(v=uG(l8(krn(JJ(new fX(null,new h3(t.d,16)),new Rg(i)),new Kg(i)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),l=vZn,f=j1n,s=new Ww(t.b.j);s.a<s.c.c.length;)(u=uG(N3(s),12)).j==i&&(l=e.Math.min(l,u.p),f=e.Math.max(f,u.p));if(l==vZn)for(o=0;o<v.gc();o++)ctn(uG(v.Xb(o),105),i,o);else for(VX(k=Inn(YHt,W1n,28,c.length,15,1),k.length),m=v.Kc();m.Ob();){for(p=uG(m.Pb(),105),a=uG(cQ(n.b,p),183),h=0,g=l;g<=f;g++)a[g]&&(h=e.Math.max(h,r[g]));if(p.i){for(w=p.i.c,y=new ek,b=0;b<c.length;b++)c[w][b]&&FV(y,xwn(k[b]));for(;cS(y,xwn(h));)++h}for(ctn(p,i,h),d=l;d<=f;d++)a[d]&&(r[d]=h+1);p.i&&(k[p.i.c]=h)}}function AWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;for(c=null,r=new Ww(t.a);r.a<r.c.c.length;)WXn(i=uG(N3(r),10))?(h=new wY(i,!0,u=jx(KS(new sk,i),n.f),s=jx(KS(new sk,i),n.f)),f=i.o.b,Yyn(),b=1e4,(l=(i.q?i.q:(hZ(),hZ(),Vot))._b((jYn(),LMt))?uG(oIn(i,LMt),203):uG(oIn(HQ(i),NMt),203))==bjt&&(b=1),w=RKn(xS(DS($S(RS(new uk,b),t0(e.Math.ceil(f))),u),s)),l==wjt&&FV(n.d,w),BUn(n,Spn(Dgn(i,(KQn(),_Rt))),h),BUn(n,Dgn(i,kRt),h),a=h):(d=jx(KS(new sk,i),n.f),kS(JJ(new fX(null,new h3(i.j,16)),new Fc),new CI(n,d)),a=new wY(i,!1,d,d)),n.i[i.p]=a,c&&(o=c.c.d.a+y$(n.n,c.c,i)+i.d.d,c.b||(o+=c.c.o.b),RKn(xS(DS(RS($S(new uk,t0(e.Math.ceil(o))),0),c.d),a.a))),c=a}function LWn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w;for(l=B_n(n,t,a=new s$n(t)),w=e.Math.max(uM(pK(oIn(t,(jYn(),tMt)))),1),f=new Ww(l.a);f.a<f.c.c.length;)h=uG(N3(f),42),s=mkn(uG(h.a,8),uG(h.b,8),w),hq(i,new MO(s.c,s.d)),hq(i,KR(new MO(s.c,s.d),s.b,0)),hq(i,KR(new MO(s.c,s.d),0,s.a)),hq(i,KR(new MO(s.c,s.d),s.b,s.a));switch(b=a.d,u=mkn(uG(l.b.a,8),uG(l.b.b,8),w),b==(KQn(),_Rt)||b==kRt?(r.c[b.g]=e.Math.min(r.c[b.g],u.d),r.b[b.g]=e.Math.max(r.b[b.g],u.d+u.a)):(r.c[b.g]=e.Math.min(r.c[b.g],u.c),r.b[b.g]=e.Math.max(r.b[b.g],u.c+u.b)),c=T0n,o=a.c.i.d,b.g){case 4:c=o.c;break;case 2:c=o.b;break;case 1:c=o.a;break;case 3:c=o.d}return r.a[b.g]=e.Math.max(r.a[b.g],c),a}function NWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j;o=uG(cQ(t.c,n),467),g=t.a.c,u=t.a.c+t.a.b,a=(T=o.f)<(j=o.a),b=new MO(g,T),p=new MO(u,j),w=new MO(r=(g+u)/2,T),m=new MO(r,j),c=XRn(n,T,j),k=n3(t.B),y=new MO(r,c),M=n3(t.D),e=dfn(Uhn(cT(PNt,1),zZn,8,0,[k,y,M])),f=!1,(d=t.B.i)&&d.c&&o.d&&((s=a&&d.p<d.c.a.c.length-1||!a&&d.p>0)?s&&(h=d.p,a?++h:--h,f=!(VRn(i=afn(uG(zq(d.c.a,h),10)),k,e[0])||rV(i,k,e[0]))):f=!0),l=!1,(v=t.D.i)&&v.c&&o.e&&(a&&v.p>0||!a&&v.p<v.c.a.c.length-1?(h=v.p,a?--h:++h,l=!(VRn(i=afn(uG(zq(v.c.a,h),10)),e[0],M)||rV(i,e[0],M))):l=!0),f&&l&&aq(n.a,y),f||dan(n.a,Uhn(cT(PNt,1),zZn,8,0,[b,w])),l||dan(n.a,Uhn(cT(PNt,1),zZn,8,0,[m,p]))}function $Wn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(b=t.c.length,l=0,f=new Ww(n.b);f.a<f.c.c.length;)if(0!=(p=(h=uG(N3(f),30)).a).c.length){for(s=0,m=null,r=uG(N3(g=new Ww(p)),10),c=null;r;){if((c=uG(zq(t,r.p),261)).c>=0){for(u=null,o=new N4(h.a,s+1);o.b<o.d.gc()&&(MK(o.b<o.d.gc()),a=uG(o.d.Xb(o.c=o.b++),10),!((u=uG(zq(t,a.p),261)).d==c.d&&u.c<c.c));)u=null;u&&(m&&(Y8(i,r.p,xwn(uG(zq(i,r.p),17).a-1)),uG(zq(e,m.p),15).Mc(c)),c=nCn(c,r,b++),mv(t.c,c),kD(e,new Zm),m?(uG(zq(e,m.p),15).Fc(c),kD(i,xwn(1))):kD(i,xwn(0)))}w=null,g.a<g.c.c.length&&(w=uG(N3(g),10),d=uG(zq(t,w.p),261),uG(zq(e,r.p),15).Fc(d),Y8(i,w.p,xwn(uG(zq(i,w.p),17).a+1))),c.d=l,c.c=s++,m=r,r=w}++l}}function DWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(c=uG(oIn(n,(GYn(),rmt)),74)){for(i=n.a,JF(r=new eN(e),dSn(n)),jsn(n.d.i,n.c.i)?(l=n.c,YF(f=Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.n,l.a])),e)):f=n3(n.c),s8(i,f,i.a,i.a.a),b=n3(n.d),null!=oIn(n,Smt)&&JF(b,uG(oIn(n,Smt),8)),s8(i,b,i.c.b,i.c),Xun(i,r),Xan(a=JFn(c,!0,!0),uG(zrn((!c.b&&(c.b=new f_(cFt,c,4,7)),c.b),0),84)),zan(a,uG(zrn((!c.c&&(c.c=new f_(cFt,c,5,8)),c.c),0),84)),sqn(i,a),h=new Ww(n.b);h.a<h.c.c.length;)s=uG(N3(h),72),kcn(o=uG(oIn(s,rmt),135),s.o.a),vcn(o,s.o.b),kN(o,s.n.a+r.a,s.n.b+r.b),Myn(o,(Pun(),Hwt),gK(oIn(s,Hwt)));(u=uG(oIn(n,(jYn(),bMt)),75))?(Xun(u,r),Myn(c,bMt,u)):Myn(c,bMt,null),t==(_gn(),hxt)?Myn(c,Vyt,hxt):Myn(c,Vyt,null)}}function xWn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j;if(0!=i.c.length){for(d=new Zm,w=new Ww(i);w.a<w.c.c.length;)kD(d,new MO((b=uG(N3(w),27)).i,b.j));for(r.dh(t,"Before removing overlaps");kIn(n,i);)gxn(n,i,!1);if(r.dh(t,"After removing overlaps"),u=0,s=0,c=null,0!=i.c.length&&(u3(0,i.c.length),u=(c=uG(i.c[0],27)).i-(u3(0,d.c.length),uG(d.c[0],8)).a,s=c.j-(u3(0,d.c.length),uG(d.c[0],8)).b),o=e.Math.sqrt(u*u+s*s),a=1,0!=(l=hwn(i)).a.gc()){for(f=l.a.ec().Kc();f.Ob();)h=uG(f.Pb(),27),p=(g=n.f).i+g.g/2,m=g.j+g.f/2,v=h.i+h.g/2,y=h.j+h.f/2-m,T=(k=v-p)/(M=e.Math.sqrt(k*k+y*y)),j=y/M,ycn(h,h.i+T*o),Mcn(h,h.j+j*o);r.dh(t,"Child movement "+a),++a}n.a&&n.a.Gg(new Z_(l)),xWn(n,t,new Z_(l),r)}}function RWn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;return u=n,h=YF(new MO(t.a,t.b),n),s=i,f=YF(new MO(r.a,r.b),i),l=u.a,g=u.b,w=s.a,m=s.b,b=h.a,p=h.b,c=(d=f.a)*p-b*(v=f.b),YN(),oan(I9n),!(e.Math.abs(0-c)<=I9n||0==c||isNaN(0)&&isNaN(c))&&(a=1/c*((l-w)*p-(g-m)*b),o=1/c*-(-(l-w)*v+(g-m)*d),oan(I9n),(e.Math.abs(0-a)<=I9n||0==a||isNaN(0)&&isNaN(a)?0:0<a?-1:0>a?1:KL(isNaN(0),isNaN(a)))<0&&(oan(I9n),(e.Math.abs(a-1)<=I9n||1==a||isNaN(a)&&isNaN(1)?0:a<1?-1:a>1?1:KL(isNaN(a),isNaN(1)))<0)&&(oan(I9n),(e.Math.abs(0-o)<=I9n||0==o||isNaN(0)&&isNaN(o)?0:0<o?-1:0>o?1:KL(isNaN(0),isNaN(o)))<0)&&(oan(I9n),(e.Math.abs(o-1)<=I9n||1==o||isNaN(o)&&isNaN(1)?0:o<1?-1:o>1?1:KL(isNaN(o),isNaN(1)))<0))}function KWn(n){var t,e,i,r;if(-1!=(t=xL(e=null!=n.D?n.D:n.B,$Cn(91)))){Knn(0,t,e.length),i=e.substr(0,t),r=new zM;do{r.a+="["}while(-1!=(t=aR(e,91,++t)));m_(i,dZn)?r.a+="Z":m_(i,lrt)?r.a+="B":m_(i,brt)?r.a+="C":m_(i,wrt)?r.a+="D":m_(i,drt)?r.a+="F":m_(i,grt)?r.a+="I":m_(i,prt)?r.a+="J":m_(i,mrt)?r.a+="S":(r.a+="L",r.a+=""+i,r.a+=";");try{return null}catch(c){if(!F$(c=Ehn(c),63))throw hv(c)}}else if(-1==xL(e,$Cn(46))){if(m_(e,dZn))return ZHt;if(m_(e,lrt))return tUt;if(m_(e,brt))return JHt;if(m_(e,wrt))return eUt;if(m_(e,drt))return iUt;if(m_(e,grt))return YHt;if(m_(e,prt))return nUt;if(m_(e,mrt))return rUt}return null}function FWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(n.e=t,o=qNn(t),v=new Zm,i=new Ww(o);i.a<i.c.c.length;){for(e=uG(N3(i),15),k=new Zm,mv(v.c,k),u=new ek,l=e.Kc();l.Ob();){for(c=nHn(n,f=uG(l.Pb(),27),!0,0,0),mv(k.c,c),new MO(b=f.i,w=f.j),!f.n&&(f.n=new fV(lFt,f,1,7)),h=new DD(f.n);h.e!=h.i.gc();)r=nHn(n,uG(Zkn(h),135),!1,b,w),mv(k.c,r);for(!f.c&&(f.c=new fV(wFt,f,9,9)),g=new DD(f.c);g.e!=g.i.gc();)for(a=nHn(n,d=uG(Zkn(g),123),!1,b,w),mv(k.c,a),p=d.i+b,m=d.j+w,!d.n&&(d.n=new fV(lFt,d,1,7)),s=new DD(d.n);s.e!=s.i.gc();)r=nHn(n,uG(Zkn(s),135),!1,p,m),mv(k.c,r);Qon(u,PZ(zcn(Uhn(cT(vat,1),EZn,20,0,[eRn(f),tRn(f)]))))}xRn(n,u,k)}return n.f=new ej(v),zsn(n.f,t),n.f}function _Wn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M;for(f=new fQ(new ad(n));f.c!=f.d.a.d;)for(o=uG((h=Hen(f)).d,58),t=uG(h.e,58),d=0,k=(null==(a=o.Dh()).i&&eqn(a),a.i).length;d<k;++d)if(null==a.i&&eqn(a),c=a.i,(s=d>=0&&d<c.length?c[d]:null).rk()&&!s.sk())if(F$(s,102))0==((u=uG(s,19)).Bb&Qtt)&&(!(M=lMn(u))||0==(M.Bb&Qtt))&&xqn(n,u,o,t);else if(PP(),uG(s,69).xk()&&(e=uG((y=s)?uG(t,54).gi(y):null,160)))for(b=uG(o.Mh(s),160),i=e.gc(),g=0,w=b.gc();g<w;++g)if(F$(l=b.Tl(g),102)){if(null==(r=ain(n,v=b.Ul(g)))&&null!=v){if(m=uG(l,19),!n.b||0!=(m.Bb&Qtt)||lMn(m))continue;r=v}if(!e.Ol(l,r))for(p=0;p<i;++p)if(e.Tl(p)==l&&xA(e.Ul(p))===xA(r)){e.Ti(e.gc()-1,p),--i;break}}else e.Ol(b.Tl(g),b.Ul(g))}function BWn(n,t,i){var r;if(i.Ug("StretchWidth layering",1),0!=t.a.c.length){for(n.c=t,n.t=0,n.u=0,n.i=M0n,n.g=T0n,n.d=uM(pK(oIn(t,(jYn(),dTt)))),Ayn(n),yDn(n),kDn(n),mSn(n),Gmn(n),n.i=e.Math.max(1,n.i),n.g=e.Math.max(1,n.g),n.d=n.d/n.i,n.f=n.g/n.i,n.s=TMn(n),r=new bQ(n.c),kD(n.c.b,r),n.r=T3(n.p),n.n=q1(n.k,n.k.length);0!=n.r.c.length;)n.o=fwn(n),!n.o||Mfn(n)&&0!=n.b.a.gc()?(mPn(n,r),r=new bQ(n.c),kD(n.c.b,r),Qon(n.a,n.b),n.b.a.$b(),n.t=n.u,n.u=0):Mfn(n)?(n.c.b.c.length=0,r=new bQ(n.c),kD(n.c.b,r),n.t=0,n.u=0,n.b.a.$b(),n.a.a.$b(),++n.f,n.r=T3(n.p),n.n=q1(n.k,n.k.length)):(a2(n.o,r),men(n.r,n.o),FV(n.b,n.o),n.t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p],n.u+=n.e[n.o.p]*n.d);t.a.c.length=0,_An(t.b),i.Vg()}else i.Vg()}function HWn(n){var t,i,r,c,a,o,u,s,h,f;for(n.j=Inn(YHt,W1n,28,n.g,15,1),n.o=new Zm,kS(sin(new fX(null,new h3(n.e.b,16)),new Xc),new lp(n)),n.a=Inn(ZHt,B2n,28,n.b,16,1),cdn(new fX(null,new h3(n.e.b,16)),new wp(n)),f=new Zm,kS(JJ(sin(new fX(null,new h3(n.e.b,16)),new Vc),new bp(n)),new II(n,f)),u=new Ww(f);u.a<u.c.c.length;)if(!((o=uG(N3(u),515)).c.length<=1))if(2!=o.c.length){if(!LPn(o)&&!TAn(o,new zc))for(s=new Ww(o),r=null;s.a<s.c.c.length;)t=uG(N3(s),18),i=n.c[t.p],h=!r||s.a>=s.c.c.length?B5((zIn(),dbt),wbt):B5((zIn(),wbt),wbt),h*=2,c=i.a.g,i.a.g=e.Math.max(c,c+(h-c)),a=i.b.g,i.b.g=e.Math.max(a,a+(h-a)),r=t}else pNn(o),WXn((u3(0,o.c.length),uG(o.c[0],18)).d.i)||kD(n.o,o)}function UWn(n){var t,i,r,c;for(kS(JJ(new fX(null,new h3(n.a.b,16)),new kr),new yr),QSn(n),kS(JJ(new fX(null,new h3(n.a.b,16)),new Mr),new Tr),n.c==(_gn(),hxt)&&(kS(JJ(sin(new fX(null,new h3(new Lw(n.f),1)),new jr),new Er),new Og(n)),kS(JJ(YJ(sin(sin(new fX(null,new h3(n.d.b,16)),new Sr),new Pr),new Cr),new Ir),new Lg(n))),c=new MO(M0n,M0n),t=new MO(T0n,T0n),r=new Ww(n.a.b);r.a<r.c.c.length;)i=uG(N3(r),60),c.a=e.Math.min(c.a,i.d.c),c.b=e.Math.min(c.b,i.d.d),t.a=e.Math.max(t.a,i.d.c+i.d.b),t.b=e.Math.max(t.b,i.d.d+i.d.a);JF(dL(n.d.c),BR(new MO(c.a,c.b))),JF(dL(n.d.f),YF(new MO(t.a,t.b),c)),YRn(n,c,t),$V(n.f),$V(n.b),$V(n.g),$V(n.e),n.a.a.c.length=0,n.a.b.c.length=0,n.a=null,n.d=null}function GWn(n,t){var e;if(n.e)throw hv(new kM((vK(Qut),v2n+Qut.k+k2n)));if(!TC(n.a,t))throw hv(new Ky(y2n+t+M2n));if(t==n.d)return n;switch(e=n.d,n.d=t,e.g){case 0:switch(t.g){case 2:CTn(n);break;case 1:_fn(n),CTn(n);break;case 4:RSn(n),CTn(n);break;case 3:RSn(n),_fn(n),CTn(n)}break;case 2:switch(t.g){case 1:_fn(n),KBn(n);break;case 4:RSn(n),CTn(n);break;case 3:RSn(n),_fn(n),CTn(n)}break;case 1:switch(t.g){case 2:_fn(n),KBn(n);break;case 4:_fn(n),RSn(n),CTn(n);break;case 3:_fn(n),RSn(n),_fn(n),CTn(n)}break;case 4:switch(t.g){case 2:RSn(n),CTn(n);break;case 1:RSn(n),_fn(n),CTn(n);break;case 3:_fn(n),KBn(n)}break;case 3:switch(t.g){case 2:_fn(n),RSn(n),CTn(n);break;case 1:_fn(n),RSn(n),_fn(n),CTn(n);break;case 4:_fn(n),KBn(n)}}return n}function qWn(n,t){var e;if(n.d)throw hv(new kM((vK(Rlt),v2n+Rlt.k+k2n)));if(!MC(n.a,t))throw hv(new Ky(y2n+t+M2n));if(t==n.c)return n;switch(e=n.c,n.c=t,e.g){case 0:switch(t.g){case 2:hln(n);break;case 1:Bfn(n),hln(n);break;case 4:KSn(n),hln(n);break;case 3:KSn(n),Bfn(n),hln(n)}break;case 2:switch(t.g){case 1:Bfn(n),FBn(n);break;case 4:KSn(n),hln(n);break;case 3:KSn(n),Bfn(n),hln(n)}break;case 1:switch(t.g){case 2:Bfn(n),FBn(n);break;case 4:Bfn(n),KSn(n),hln(n);break;case 3:Bfn(n),KSn(n),Bfn(n),hln(n)}break;case 4:switch(t.g){case 2:KSn(n),hln(n);break;case 1:KSn(n),Bfn(n),hln(n);break;case 3:Bfn(n),FBn(n)}break;case 3:switch(t.g){case 2:Bfn(n),KSn(n),hln(n);break;case 1:Bfn(n),KSn(n),Bfn(n),hln(n);break;case 4:Bfn(n),FBn(n)}}return n}function XWn(n,t){var e,i,r,c,a,o,u;if(F$(n.Eh(),167)?(XWn(uG(n.Eh(),167),t),t.a+=" > "):t.a+="Root ",m_((e=n.Dh().zb).substr(0,3),"Elk")?JA(t,(s3(3,e.length+1),e.substr(3))):t.a+=""+e,r=n.jh())JA((t.a+=" ",t),r);else if(F$(n,366)&&(u=uG(n,135).a))JA((t.a+=" ",t),u);else{for(c=new DD(n.kh());c.e!=c.i.gc();)if(u=uG(Zkn(c),135).a)return void JA((t.a+=" ",t),u);if(F$(n,326)&&(!(i=uG(n,74)).b&&(i.b=new f_(cFt,i,4,7)),0!=i.b.i&&(!i.c&&(i.c=new f_(cFt,i,5,8)),0!=i.c.i))){for(t.a+=" (",a=new Zx((!i.b&&(i.b=new f_(cFt,i,4,7)),i.b));a.e!=a.i.gc();)a.e>0&&(t.a+=TZn),XWn(uG(Zkn(a),167),t);for(t.a+=Y4n,o=new Zx((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c));o.e!=o.i.gc();)o.e>0&&(t.a+=TZn),XWn(uG(Zkn(o),167),t);t.a+=")"}}}function zWn(n,t,i){var r,c,a,o,u,s,f,l;for(s=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));s.e!=s.i.gc();)for(c=new Fz(ix(eRn(u=uG(Zkn(s),27)).a.Kc(),new h));hDn(c);){if(!(r=uG(N9(c),74)).b&&(r.b=new f_(cFt,r,4,7)),!(r.b.i<=1&&(!r.c&&(r.c=new f_(cFt,r,5,8)),r.c.i<=1)))throw hv(new EM("Graph must not contain hyperedges."));if(!z$n(r)&&u!=lCn(uG(zrn((!r.c&&(r.c=new f_(cFt,r,5,8)),r.c),0),84)))for(zsn(f=new $F,r),kfn(f,(mon(),Wft),r),Kb(f,uG(DA(FX(i.f,u)),153)),Bb(f,uG(cQ(i,lCn(uG(zrn((!r.c&&(r.c=new f_(cFt,r,5,8)),r.c),0),84))),153)),kD(t.c,f),o=new DD((!r.n&&(r.n=new fV(lFt,r,1,7)),r.n));o.e!=o.i.gc();)zsn(l=new A5(f,(a=uG(Zkn(o),135)).a),a),kfn(l,Wft,a),l.e.a=e.Math.max(a.g,1),l.e.b=e.Math.max(a.f,1),Yqn(l),kD(t.d,l)}}function VWn(n,t,i){var r,c,a,o,u,s,h,f;switch(i.Ug("Node promotion heuristic",1),n.i=t,n.r=uG(oIn(t,(jYn(),yMt)),243),n.r!=(THn(),Pjt)&&n.r!=Cjt?RQn(n):n_n(n),f=uG(oIn(n.i,kMt),17).a,a=new hi,n.r.g){case 2:case 1:default:tzn(n,a);break;case 3:for(n.r=Djt,tzn(n,a),s=0,u=new Ww(n.b);u.a<u.c.c.length;)o=uG(N3(u),17),s=e.Math.max(s,o.a);s>n.k&&(n.r=Ijt,tzn(n,a));break;case 4:for(n.r=Djt,tzn(n,a),h=0,c=new Ww(n.c);c.a<c.c.c.length;)r=pK(N3(c)),h=e.Math.max(h,(tJ(r),r));h>n.n&&(n.r=Ljt,tzn(n,a));break;case 6:tzn(n,new mg(t0(e.Math.ceil(n.g.length*f/100))));break;case 5:tzn(n,new vg(t0(e.Math.ceil(n.e*f/100))));break;case 8:IYn(n,!0);break;case 9:IYn(n,!1)}n.r!=Pjt&&n.r!=Cjt?JKn(n,t):BBn(n,t),i.Vg()}function WWn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;for(pF(u=new N4(s=n.b,0),new bQ(n)),g=!1,c=1;u.b<u.d.gc();){for(MK(u.b<u.d.gc()),o=uG(u.d.Xb(u.c=u.b++),30),u3(c,s.c.length),b=uG(s.c[c],30),d=(w=T3(o.a)).c.length,l=new Ww(w);l.a<l.c.c.length;)a2(h=uG(N3(l),10),b);if(g){for(f=Spn(w).Kc();f.Ob();)for(r=new Ww(T3(qgn(h=uG(f.Pb(),10))));r.a<r.c.c.length;)pqn(i=uG(N3(r),18),!0),kfn(n,(GYn(),Lpt),(qx(),!0)),e=gVn(n,i,d),t=uG(oIn(h,Spt),313),p=uG(zq(e,e.c.length-1),18),t.k=p.c.i,t.n=p,t.b=i.d.i,t.c=i;g=!1}else 0!=w.c.length&&(u3(0,w.c.length),uG(w.c[0],10).k==(zIn(),fbt)&&(g=!0,c=-1));++c}for(a=new N4(n.b,0);a.b<a.d.gc();)MK(a.b<a.d.gc()),0==uG(a.d.Xb(a.c=a.b++),30).a.c.length&&LQ(a)}function QWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(Y1(l=new kQn(n),!(t==(xdn(),nxt)||t==QDt)),f=l.a,b=new Dk,Yrn(),o=0,s=(c=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;o<s;++o)i=c[o],(h=rD(f,jst,i))&&(b.d=e.Math.max(b.d,h.jf()));for(a=0,u=(r=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;a<u;++a)i=r[a],(h=rD(f,Sst,i))&&(b.a=e.Math.max(b.a,h.jf()));for(p=0,v=(d=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;p<v;++p)(h=rD(f,d[p],jst))&&(b.b=e.Math.max(b.b,h.kf()));for(g=0,m=(w=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;g<m;++g)(h=rD(f,w[g],Sst))&&(b.c=e.Math.max(b.c,h.kf()));return b.d>0&&(b.d+=f.n.d,b.d+=f.d),b.a>0&&(b.a+=f.n.a,b.a+=f.d),b.b>0&&(b.b+=f.n.b,b.b+=f.d),b.c>0&&(b.c+=f.n.c,b.c+=f.d),b}function JWn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d;for(b=i.d,l=i.c,o=(a=new MO(i.f.a+i.d.b+i.d.c,i.f.b+i.d.d+i.d.a)).b,h=new Ww(n.a);h.a<h.c.c.length;)if((u=uG(N3(h),10)).k==(zIn(),lbt)){switch(r=uG(oIn(u,(GYn(),Fpt)),64),c=uG(oIn(u,_pt),8),f=u.n,r.g){case 2:f.a=i.f.a+b.c-l.a;break;case 4:f.a=-l.a-b.b}switch(d=0,r.g){case 2:case 4:t==($Pn(),aRt)?(w=uM(pK(oIn(u,bmt))),f.b=a.b*w-uG(oIn(u,(jYn(),WMt)),8).b,d=f.b+c.b,fhn(u,!1,!0)):t==cRt&&(f.b=uM(pK(oIn(u,bmt)))-uG(oIn(u,(jYn(),WMt)),8).b,d=f.b+c.b,fhn(u,!1,!0))}o=e.Math.max(o,d)}for(i.f.b+=o-a.b,s=new Ww(n.a);s.a<s.c.c.length;)if((u=uG(N3(s),10)).k==(zIn(),lbt))switch(r=uG(oIn(u,(GYn(),Fpt)),64),f=u.n,r.g){case 1:f.b=-l.b-b.d;break;case 3:f.b=i.f.b+b.a-l.b}}function YWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if((f=uG(uG(Y9(n.r,t),21),87)).gc()<=2||t==(KQn(),kRt)||t==(KQn(),_Rt))MJn(n,t);else{for(g=n.u.Hc((eNn(),pRt)),i=t==(KQn(),yRt)?(ehn(),pht):(ehn(),wht),m=t==yRt?(Yen(),Rst):(Yen(),Fst),r=TT(BB(i),n.s),p=t==yRt?M0n:T0n,h=f.Kc();h.Ob();)!(u=uG(h.Pb(),117)).c||u.c.d.c.length<=0||(d=u.b.Mf(),w=u.e,(b=(l=u.c).i).b=(a=l.n,l.e.a+a.b+a.c),b.a=(o=l.n,l.e.b+o.d+o.a),g?(b.c=w.a-(c=l.n,l.e.a+c.b+c.c)-n.s,g=!1):b.c=w.a+d.a+n.s,ZZ(m,W2n),l.f=m,etn(l,(Ktn(),Lst)),kD(r.d,new ZX(b,Hdn(r,b))),p=t==yRt?e.Math.min(p,w.b):e.Math.max(p,w.b+u.b.Mf().b));for(p+=t==yRt?-n.t:n.t,cmn((r.e=p,r)),s=f.Kc();s.Ob();)!(u=uG(s.Pb(),117)).c||u.c.d.c.length<=0||((b=u.c.i).c-=u.e.a,b.d-=u.e.b)}}function ZWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(i=new Zm,w=new Ww(t.a);w.a<w.c.c.length;)if((l=(b=uG(N3(w),10)).e)&&(Ohn(i,ZWn(n,l,b)),BVn(n,l,b),uG(oIn(l,(GYn(),Hpt)),21).Hc((r_n(),tpt))))for(p=uG(oIn(b,(jYn(),JMt)),101),f=uG(oIn(b,nTt),181).Hc((eNn(),wRt)),g=new Ww(b.j);g.a<g.c.c.length;)for(d=uG(N3(g),12),(r=uG(cQ(n.b,d),10))||(kfn(r=DJn(d,p,d.j,-(d.e.c.length-d.g.c.length),null,new sj,d.o,uG(oIn(l,Byt),88),l),rmt,d),vJ(n.b,d,r),kD(l.a,r)),c=uG(zq(r.j,0),12),s=new Ww(d.f);s.a<s.c.c.length;)u=uG(N3(s),72),(a=new uj).o.a=u.o.a,a.o.b=u.o.b,kD(c.f,a),f||(m=d.j,h=0,cV(uG(oIn(b,nTt),21))&&(h=jNn(u.n,u.o,d.o,0,m)),p==($Pn(),uRt)||(KQn(),ERt).Hc(m)?a.o.a=h:a.o.b=h);return FVn(n,t,e,i,o=new Zm),e&&Rzn(n,t,e,o),o}function nQn(n,t,e){var i,r,c,a,o,u,s,h;if(!n.c[t.c.p][t.p].e){for(n.c[t.c.p][t.p].e=!0,n.c[t.c.p][t.p].b=0,n.c[t.c.p][t.p].d=0,n.c[t.c.p][t.p].a=null,h=new Ww(t.j);h.a<h.c.c.length;)for(s=uG(N3(h),12),u=(e?new zd(s):new Wd(s)).Kc();u.Ob();)(a=(o=uG(u.Pb(),12)).i).c==t.c?a!=t&&(nQn(n,a,e),n.c[t.c.p][t.p].b+=n.c[a.c.p][a.p].b,n.c[t.c.p][t.p].d+=n.c[a.c.p][a.p].d):(n.c[t.c.p][t.p].d+=n.g[o.p],++n.c[t.c.p][t.p].b);if(c=uG(oIn(t,(GYn(),jpt)),15))for(r=c.Kc();r.Ob();)i=uG(r.Pb(),10),t.c==i.c&&(nQn(n,i,e),n.c[t.c.p][t.p].b+=n.c[i.c.p][i.p].b,n.c[t.c.p][t.p].d+=n.c[i.c.p][i.p].d);n.c[t.c.p][t.p].b>0&&(n.c[t.c.p][t.p].d+=uRn(n.i,24)*z0n*.07000000029802322-.03500000014901161,n.c[t.c.p][t.p].a=n.c[t.c.p][t.p].d/n.c[t.c.p][t.p].b)}}function tQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w;for(l=new Ww(n);l.a<l.c.c.length;){for(Xx((f=uG(N3(l),10)).n),Xx(f.o),ynn(f.f),YBn(f),tBn(f),w=new Ww(f.j);w.a<w.c.c.length;){for(Xx((b=uG(N3(w),12)).n),Xx(b.a),Xx(b.o),NLn(b,UMn(b.j)),(r=uG(oIn(b,(jYn(),YMt)),17))&&kfn(b,YMt,xwn(-r.a)),i=new Ww(b.g);i.a<i.c.c.length;){for(t=Fkn((e=uG(N3(i),18)).a,0);t.b!=t.d.c;)Xx(uG(I6(t),8));if(a=uG(oIn(e,bMt),75))for(c=Fkn(a,0);c.b!=c.d.c;)Xx(uG(I6(c),8));for(s=new Ww(e.b);s.a<s.c.c.length;)Xx((o=uG(N3(s),72)).n),Xx(o.o)}for(h=new Ww(b.f);h.a<h.c.c.length;)Xx((o=uG(N3(h),72)).n),Xx(o.o)}for(f.k==(zIn(),lbt)&&(kfn(f,(GYn(),Fpt),UMn(uG(oIn(f,Fpt),64))),aFn(f)),u=new Ww(f.b);u.a<u.c.c.length;)YBn(o=uG(N3(u),72)),Xx(o.o),Xx(o.n)}}function eQn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g;null==(w=cQ(n.e,i))&&(s=uG(w=new _y,190),u=new QW(t+"_s"+r),nrn(s,Iet,u)),pQ(e,b=uG(w,190)),vZ(g=new _y,"x",i.j),vZ(g,"y",i.k),nrn(b,Let,g),vZ(f=new _y,"x",i.b),vZ(f,"y",i.c),nrn(b,"endPoint",f),!pE((!i.a&&(i.a=new MD(eFt,i,5)),i.a))&&(c=new wm(h=new Ib),z8((!i.a&&(i.a=new MD(eFt,i,5)),i.a),c),nrn(b,Met,h)),!!hMn(i)&&GCn(n.a,b,jet,jAn(n,hMn(i))),!!fMn(i)&&GCn(n.a,b,Tet,jAn(n,fMn(i))),!(0==(!i.e&&(i.e=new f_(oFt,i,10,9)),i.e).i)&&(a=new sA(n,l=new Ib),z8((!i.e&&(i.e=new f_(oFt,i,10,9)),i.e),a),nrn(b,Set,l)),0!=(!i.g&&(i.g=new f_(oFt,i,9,10)),i.g).i&&(o=new hA(n,d=new Ib),z8((!i.g&&(i.g=new f_(oFt,i,9,10)),i.g),o),nrn(b,Eet,d))}function iQn(n){var t,i,r,c,a,o,u;for(VK(),r=n.f.n,o=FW(n.r).a.nc();o.Ob();){if(c=0,(a=uG(o.Pb(),117)).b.pf((XYn(),uDt))&&(c=uM(pK(a.b.of(uDt))))<0)switch(a.b.ag().g){case 1:r.d=e.Math.max(r.d,-c);break;case 3:r.a=e.Math.max(r.a,-c);break;case 2:r.c=e.Math.max(r.c,-c);break;case 4:r.b=e.Math.max(r.b,-c)}if(cV(n.u))switch(t=Wun(a.b,c),u=!uG(n.e.of(q$t),181).Hc((oUn(),nKt)),i=!1,a.b.ag().g){case 1:i=t>r.d,r.d=e.Math.max(r.d,t),u&&i&&(r.d=e.Math.max(r.d,r.a),r.a=r.d+c);break;case 3:i=t>r.a,r.a=e.Math.max(r.a,t),u&&i&&(r.a=e.Math.max(r.a,r.d),r.d=r.a+c);break;case 2:i=t>r.c,r.c=e.Math.max(r.c,t),u&&i&&(r.c=e.Math.max(r.b,r.c),r.b=r.c+c);break;case 4:i=t>r.b,r.b=e.Math.max(r.b,t),u&&i&&(r.b=e.Math.max(r.b,r.c),r.c=r.b+c)}}}function rQn(n,t){var e,i,r,c,a,o,u,s,h;return s="",0==t.length?n.ne(L1n,O1n,-1,-1):(m_((h=KAn(t)).substr(0,3),"at ")&&(s3(3,h.length+1),h=h.substr(3)),-1==(a=(h=h.replace(/\[.*?\]/g,"")).indexOf("("))?-1==(a=h.indexOf("@"))?(s=h,h=""):(s=KAn((s3(a+1,h.length+1),h.substr(a+1))),h=KAn((Knn(0,a,h.length),h.substr(0,a)))):(Knn(a+1,e=h.indexOf(")",a),h.length),s=h.substr(a+1,e-(a+1)),h=KAn((Knn(0,a,h.length),h.substr(0,a)))),-1!=(a=xL(h,$Cn(46)))&&(s3(a+1,h.length+1),h=h.substr(a+1)),(0==h.length||m_(h,"Anonymous function"))&&(h=O1n),o=ax(s,$Cn(58)),r=T_(s,$Cn(58),o-1),u=-1,i=-1,c=L1n,-1!=o&&-1!=r&&(Knn(0,r,s.length),c=s.substr(0,r),u=rR((Knn(r+1,o,s.length),s.substr(r+1,o-(r+1)))),i=rR((s3(o+1,s.length+1),s.substr(o+1)))),n.ne(c,h,u,i))}function cQn(n){var t,e,i,r,c,a,o,u,s,h,f;for(s=new Ww(n);s.a<s.c.c.length;){switch(u=uG(N3(s),10),c=null,(a=uG(oIn(u,(jYn(),gMt)),171)).g){case 1:case 2:Pfn(),c=ygt;break;case 3:case 4:Pfn(),c=vgt}if(c)kfn(u,(GYn(),Npt),(Pfn(),ygt)),c==vgt?CKn(u,a,(can(),Vjt)):c==ygt&&CKn(u,a,(can(),Wjt));else if(sN(uG(oIn(u,JMt),101))&&0!=u.j.c.length){for(t=!0,f=new Ww(u.j);f.a<f.c.c.length;){if(!((h=uG(N3(f),12)).j==(KQn(),kRt)&&h.e.c.length-h.g.c.length>0||h.j==_Rt&&h.e.c.length-h.g.c.length<0)){t=!1;break}for(r=new Ww(h.g);r.a<r.c.c.length;)if(e=uG(N3(r),18),(o=uG(oIn(e.d.i,gMt),171))==(Gpn(),Omt)||o==Amt){t=!1;break}for(i=new Ww(h.e);i.a<i.c.c.length;)if(e=uG(N3(i),18),(o=uG(oIn(e.c.i,gMt),171))==(Gpn(),Cmt)||o==Imt){t=!1;break}}t&&CKn(u,a,(can(),Qjt))}}}function aQn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(T=0,w=0,l=new Ww(t.e);l.a<l.c.c.length;){for(f=uG(N3(l),10),b=0,u=0,s=i?uG(oIn(f,iSt),17).a:j1n,m=r?uG(oIn(f,rSt),17).a:j1n,h=e.Math.max(s,m),k=new Ww(f.j);k.a<k.c.c.length;){if(v=uG(N3(k),12),y=f.n.b+v.n.b+v.a.b,r)for(o=new Ww(v.g);o.a<o.c.c.length;)d=(g=(a=uG(N3(o),18)).d).i,t!=n.a[d.p]&&(p=e.Math.max(uG(oIn(d,iSt),17).a,uG(oIn(d,rSt),17).a),(M=uG(oIn(a,(jYn(),uTt)),17).a)>=h&&M>=p&&(b+=d.n.b+g.n.b+g.a.b-y,++u));if(i)for(o=new Ww(v.e);o.a<o.c.c.length;)d=(g=(a=uG(N3(o),18)).c).i,t!=n.a[d.p]&&(p=e.Math.max(uG(oIn(d,iSt),17).a,uG(oIn(d,rSt),17).a),(M=uG(oIn(a,(jYn(),uTt)),17).a)>=h&&M>=p&&(b+=d.n.b+g.n.b+g.a.b-y,++u))}u>0&&(T+=b/u,++w)}w>0?(t.a=c*T/w,t.g=w):(t.a=0,t.g=0)}function oQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(l=(c=n.f.b).a,h=c.b,w=n.e.g,b=n.e.f,vN(n.e,c.a,c.b),M=l/w,T=h/b,s=new DD(xJ(n.e));s.e!=s.i.gc();)ycn(u=uG(Zkn(s),135),u.i*M),Mcn(u,u.j*T);for(m=new DD(RJ(n.e));m.e!=m.i.gc();)k=(p=uG(Zkn(m),123)).i,y=p.j,k>0&&ycn(p,k*M),y>0&&Mcn(p,y*T);for(Yun(n.b,new ft),t=new Zm,o=new bsn(new Nw(n.c).a);o.b;)i=uG((a=von(o)).ld(),74),e=uG(a.md(),407).a,r=JFn(i,!1,!1),sqn(f=YPn(bIn(i),COn(r),e),r),(v=wIn(i))&&-1==Ten(t,v,0)&&(mv(t.c,v),iY(v,(MK(0!=f.b),uG(f.a.a.c,8)),e));for(g=new bsn(new Nw(n.d).a);g.b;)i=uG((d=von(g)).ld(),74),e=uG(d.md(),407).a,r=JFn(i,!1,!1),f=YPn(gIn(i),fln(COn(r)),e),sqn(f=fln(f),r),(v=dIn(i))&&-1==Ten(t,v,0)&&(mv(t.c,v),iY(v,(MK(0!=f.b),uG(f.c.b.c,8)),e))}function uQn(n,t,e,i){var r,c,a,o,u;return sKn(o=new kQn(t),i),r=!0,n&&n.pf((XYn(),d$t))&&(r=(c=uG(n.of((XYn(),d$t)),88))==(xdn(),ZDt)||c==JDt||c==YDt),iBn(o,!1),Prn(o.e.Rf(),new DB(o,!1,r)),W1(o,o.f,(Yrn(),jst),(KQn(),yRt)),W1(o,o.f,Sst,KRt),W1(o,o.g,jst,_Rt),W1(o,o.g,Sst,kRt),gyn(o,yRt),gyn(o,KRt),IJ(o,kRt),IJ(o,_Rt),VK(),(a=o.A.Hc((Qmn(),VRt))&&o.B.Hc((oUn(),rKt))?xmn(o):null)&&dT(o.a,a),iQn(o),BTn(o),HTn(o),wWn(o),NHn(o),iEn(o),dkn(o,yRt),dkn(o,KRt),IBn(o),UXn(o),e?(wpn(o),rEn(o),dkn(o,kRt),dkn(o,_Rt),u=o.B.Hc((oUn(),cKt)),dLn(o,u,yRt),dLn(o,u,KRt),gLn(o,u,kRt),gLn(o,u,_Rt),kS(new fX(null,new h3(new Fw(o.i),0)),new Cn),kS(JJ(new fX(null,FW(o.r).a.oc()),new In),new On),jPn(o),o.e.Pf(o.o),kS(new fX(null,FW(o.r).a.oc()),new An),o.o):o.o}function sQn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(h=M0n,r=new Ww(n.a.b);r.a<r.c.c.length;)t=uG(N3(r),86),h=e.Math.min(h,t.d.f.g.c+t.e.a);for(w=new lS,o=new Ww(n.a.a);o.a<o.c.c.length;)(a=uG(N3(o),194)).i=h,0==a.e&&s8(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=uG(0==w.b?null:(MK(0!=w.b),Lrn(w,w.a.a)),194)).f.g.c,b=a.a.a.ec().Kc();b.Ob();)f=uG(b.Pb(),86),g=a.i+f.e.a,f.d.g||f.g.c<g?f.o=g:f.o=f.g.c;for(c-=a.f.o,a.b+=c,n.c==(xdn(),YDt)||n.c==QDt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=uG(l.Pb(),86)).f.Kc();s.Ob();)u=uG(s.Pb(),86),d=hN(n.c)?n.f.yf(f,u):n.f.zf(f,u),u.d.i=e.Math.max(u.d.i,f.o+f.g.b+d-u.e.a),u.k||(u.d.i=e.Math.max(u.d.i,u.g.c-u.e.a)),--u.d.e,0==u.d.e&&aq(w,u.d)}for(i=new Ww(n.a.b);i.a<i.c.c.length;)(t=uG(N3(i),86)).g.c=t.o}function hQn(n){var t,e,i,r,c,a,o,u;switch(o=n.b,t=n.a,0===uG(oIn(n,(MEn(),cst)),435).g?f$(o,new Zw(new Un)):f$(o,new Zw(new Gn)),1===uG(oIn(n,ist),436).g?(f$(o,new Hn),f$(o,new qn),f$(o,new xn)):(f$(o,new Hn),f$(o,new _n)),uG(oIn(n,ost),257).g){case 0:u=new Qn;break;case 1:u=new Vn;break;case 2:u=new Wn;break;case 3:u=new zn;break;case 5:u=new $d(new Wn);break;case 4:u=new $d(new Vn);break;case 7:u=new sC(new $d(new Vn),new $d(new Wn));break;case 8:u=new sC(new $d(new zn),new $d(new Wn));break;default:u=new $d(new zn)}for(a=new Ww(o);a.a<a.c.c.length;){for(c=uG(N3(a),176),r=0,e=new WO(xwn(i=0),xwn(r));QUn(t,c,i,r);)e=uG(u.Ve(e,c),42),i=uG(e.a,17).a,r=uG(e.b,17).a;_Bn(t,c,i,r)}}function fQn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(e.Ug(o7n,1),OQn(),l=EPt,n.a==(mbn(),$Ct)&&(l=TPt),h=0,hZ(),t.jd(new Sm(l)),c=t.gc(),o=t.fd(t.gc()),s=!0;s&&o.Sb();)p=uG(o.Ub(),39),0==uG(oIn(p,l),17).a?--c:s=!1;if(a=new Y_(t.kd(0,c)),u=new Y_(t.kd(c,t.gc())),0==a.b)for(w=Fkn(u,0);w.b!=w.d.c;)kfn(uG(I6(w),39),KPt,xwn(h++));else for(f=a.b,k=Fkn(a,0);k.b!=k.d.c;){for(kfn(v=uG(I6(k),39),KPt,xwn(h++)),fQn(n,i=Lhn(v),e.eh(1/f|0)),Lon(i,kJ(new Sm(KPt))),b=new lS,m=Fkn(i,0);m.b!=m.d.c;)for(p=uG(I6(m),39),g=Fkn(v.d,0);g.b!=g.d.c;)(d=uG(I6(g),65)).c==p&&s8(b,d,b.c.b,b.c);for(BY(v.d),Qon(v.d,b),o=Fkn(u,u.b),r=v.d.b,s=!0;0<r&&s&&o.Sb();)p=uG(o.Ub(),39),0==uG(oIn(p,l),17).a?(kfn(p,KPt,xwn(h++)),--r,o.Qb()):s=!1}e.Vg()}function lQn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w;for(l=uM(pK(zDn(n,(jOn(),XIt)))),oM(gK(zDn(n,GIt)))&&(f=uG(zDn(n,(SK(),zCt)),27),a=uG(zrn(KJ(uG(zrn((!f.e&&(f.e=new f_(aFt,f,7,4)),f.e),(!f.e&&(f.e=new f_(aFt,f,7,4)),f.e).i-1),74)),0),27),r=uG(zrn(KJ(uG(zrn((!f.e&&(f.e=new f_(aFt,f,7,4)),f.e),0),74)),0),27),o=new MO(a.i+a.g/2,a.j+a.f/2),c=new MO(r.i+r.g/2,r.j+r.f/2),(i=l)<=0&&(i+=f7n),(b=e.Math.acos((o.a*c.a+o.b*c.b)/(e.Math.sqrt(o.a*o.a+o.b*o.b)*e.Math.sqrt(c.a*c.a+c.b*c.b))))<=0&&(b+=f7n),(t=e.Math.atan2(o.b,o.a))<=0&&(t+=f7n),l=F9n-(t-i+b/2)),s=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));s.e!=s.i.gc();)w=(h=new MO((u=uG(Zkn(s),27)).i+u.g/2,u.j+u.f/2)).a*e.Math.cos(l)-h.b*e.Math.sin(l),h.b=h.a*e.Math.sin(l)+h.b*e.Math.cos(l),h.a=w,kN(u,h.a-u.g/2,h.b-u.f/2)}function bQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Inverted port preprocessing",1),o=new N4(n.b,0),e=null,g=new Zm;o.b<o.d.gc();){for(d=e,MK(o.b<o.d.gc()),e=uG(o.d.Xb(o.c=o.b++),30),h=new Ww(g);h.a<h.c.c.length;)a2(u=uG(N3(h),10),d);for(g.c.length=0,f=new Ww(e.a);f.a<f.c.c.length;)if((u=uG(N3(f),10)).k==(zIn(),dbt)&&sN(uG(oIn(u,(jYn(),JMt)),101))){for(w=nBn(u,(can(),Vjt),(KQn(),kRt)).Kc();w.Ob();)for(l=uG(w.Pb(),12),r=0,c=(i=uG(Ekn(a=l.e,Inn(obt,t6n,18,a.c.length,0,1)),482)).length;r<c;++r)Fqn(n,l,i[r],g);for(b=nBn(u,Wjt,_Rt).Kc();b.Ob();)for(l=uG(b.Pb(),12),r=0,c=(i=uG(Ekn(a=l.g,Inn(obt,t6n,18,a.c.length,0,1)),482)).length;r<c;++r)Kqn(n,l,i[r],g)}}for(s=new Ww(g);s.a<s.c.c.length;)a2(u=uG(N3(s),10),e);t.Vg()}function wQn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w,d,g,p,m,v;for(l=null,r==(l0(),USt)?l=t:r==GSt&&(l=i),d=l.a.ec().Kc();d.Ob();){for(w=uG(d.Pb(),12),g=Gfn(Uhn(cT(PNt,1),zZn,8,0,[w.i.n,w.n,w.a])).b,v=new ek,u=new ek,h=new w7(w.b);l$(h.a)||l$(h.b);)if(oM(gK(oIn(s=uG(l$(h.a)?N3(h.a):N3(h.b),18),(GYn(),pmt))))==c&&-1!=Ten(a,s,0)){if(p=s.d==w?s.c:s.d,m=Gfn(Uhn(cT(PNt,1),zZn,8,0,[p.i.n,p.n,p.a])).b,e.Math.abs(m-g)<.2)continue;m<g?t.a._b(p)?FV(v,new WO(USt,s)):FV(v,new WO(GSt,s)):t.a._b(p)?FV(u,new WO(USt,s)):FV(u,new WO(GSt,s))}if(v.a.gc()>1)for(z8(v,new BI(n,b=new Izn(w,v,r))),mv(o.c,b),f=v.a.ec().Kc();f.Ob();)men(a,uG(f.Pb(),42).b);if(u.a.gc()>1)for(z8(u,new HI(n,b=new Izn(w,u,r))),mv(o.c,b),f=u.a.ec().Kc();f.Ob();)men(a,uG(f.Pb(),42).b)}}function dQn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(g=n.n,p=n.o,b=n.d,l=uM(pK(Omn(n,(jYn(),lTt)))),t){for(f=l*(t.gc()-1),w=0,s=t.Kc();s.Ob();)f+=(o=uG(s.Pb(),10)).o.a,w=e.Math.max(w,o.o.b);for(m=g.a-(f-p.a)/2,a=g.b-b.d+w,c=r=p.a/(t.gc()+1),u=t.Kc();u.Ob();)(o=uG(u.Pb(),10)).n.a=m,o.n.b=a-o.o.b,m+=o.o.a+l,(h=ERn(o)).n.a=o.o.a/2-h.a.a,h.n.b=o.o.b,(d=uG(oIn(o,(GYn(),Ppt)),12)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=0,o2(d,n)),c+=r}if(i){for(f=l*(i.gc()-1),w=0,s=i.Kc();s.Ob();)f+=(o=uG(s.Pb(),10)).o.a,w=e.Math.max(w,o.o.b);for(m=g.a-(f-p.a)/2,a=g.b+p.b+b.a-w,c=r=p.a/(i.gc()+1),u=i.Kc();u.Ob();)(o=uG(u.Pb(),10)).n.a=m,o.n.b=a,m+=o.o.a+l,(h=ERn(o)).n.a=o.o.a/2-h.a.a,h.n.b=0,(d=uG(oIn(o,(GYn(),Ppt)),12)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=p.b,o2(d,n)),c+=r}}function gQn(n,t){var i,r,c,a,o,u;if(uG(oIn(t,(GYn(),Hpt)),21).Hc((r_n(),tpt))){for(u=new Ww(t.a);u.a<u.c.c.length;)(a=uG(N3(u),10)).k==(zIn(),dbt)&&(c=uG(oIn(a,(jYn(),TMt)),140),n.c=e.Math.min(n.c,a.n.a-c.b),n.a=e.Math.max(n.a,a.n.a+a.o.a+c.c),n.d=e.Math.min(n.d,a.n.b-c.d),n.b=e.Math.max(n.b,a.n.b+a.o.b+c.a));for(o=new Ww(t.a);o.a<o.c.c.length;)if((a=uG(N3(o),10)).k!=(zIn(),dbt))switch(a.k.g){case 2:if((r=uG(oIn(a,(jYn(),gMt)),171))==(Gpn(),Imt)){a.n.a=n.c-10,Djn(a,new Ge).Jb(new sg(a));break}if(r==Amt){a.n.a=n.a+10,Djn(a,new qe).Jb(new hg(a));break}if((i=uG(oIn(a,Xpt),311))==(Zen(),ppt)){Azn(a).Jb(new fg(a)),a.n.b=n.d-10;break}if(i==dpt){Azn(a).Jb(new lg(a)),a.n.b=n.b+10;break}break;default:throw hv(new vM("The node type "+a.k+" is not supported by the "+Fwt))}}}function pQn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d;for(u=new MO(i.i+i.g/2,i.j+i.f/2),l=lzn(i),b=uG(zDn(t,(jYn(),JMt)),101),d=uG(zDn(i,eTt),64),dA(Qkn(i),QMt)||(w=0==i.i&&0==i.j?0:KCn(i,d),Myn(i,QMt,w)),kfn(r=DJn(i,b,d,l,new MO(t.g,t.f),u,new MO(i.g,i.f),uG(oIn(e,Byt),88),e),(GYn(),rmt),i),Ub(c=uG(zq(r.j,0),12),IUn(i)),kfn(r,nTt,(eNn(),ggn(gRt))),h=uG(zDn(t,nTt),181).Hc(wRt),o=new DD((!i.n&&(i.n=new fV(lFt,i,1,7)),i.n));o.e!=o.i.gc();)if(!oM(gK(zDn(a=uG(Zkn(o),135),FMt)))&&a.a&&(f=own(a),kD(c.f,f),!h))switch(s=0,cV(uG(zDn(t,nTt),21))&&(s=jNn(new MO(a.i,a.j),new MO(a.g,a.f),new MO(i.g,i.f),0,d)),d.g){case 2:case 4:f.o.a=s;break;case 1:case 3:f.o.b=s}kfn(r,TTt,pK(zDn(R0(t),TTt))),kfn(r,jTt,pK(zDn(R0(t),jTt))),kfn(r,yTt,pK(zDn(R0(t),yTt))),kD(e.a,r),vJ(n.a,i,r)}function mQn(n,t,e,i,r,c){var a,o,u,s,h,f;for(zsn(s=new lOn,t),NLn(s,uG(zDn(t,(jYn(),eTt)),64)),kfn(s,(GYn(),rmt),t),o2(s,e),(f=s.o).a=t.g,f.b=t.f,(h=s.n).a=t.i,h.b=t.j,vJ(n.a,t,s),(a=o9(YJ(sin(new fX(null,(!t.e&&(t.e=new f_(aFt,t,7,4)),new h3(t.e,16))),new Wt),new zt),new Zd(t)))||(a=o9(YJ(sin(new fX(null,(!t.d&&(t.d=new f_(aFt,t,8,5)),new h3(t.d,16))),new Qt),new Vt),new ng(t))),a||(a=o9(new fX(null,(!t.e&&(t.e=new f_(aFt,t,7,4)),new h3(t.e,16))),new Jt)),kfn(s,qpt,(qx(),!!a)),Fzn(s,c,r,uG(zDn(t,WMt),8)),u=new DD((!t.n&&(t.n=new fV(lFt,t,1,7)),t.n));u.e!=u.i.gc();)!oM(gK(zDn(o=uG(Zkn(u),135),FMt)))&&o.a&&kD(s.f,own(o));switch(r.g){case 2:case 1:(s.j==(KQn(),yRt)||s.j==KRt)&&i.Fc((r_n(),cpt));break;case 4:case 3:(s.j==(KQn(),kRt)||s.j==_Rt)&&i.Fc((r_n(),cpt))}return s}function vQn(n,t,i,r,c){var a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(k=0,g=0,d=0,w=1,v=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));v.e!=v.i.gc();)w+=x5(new Fz(ix(eRn(p=uG(Zkn(v),27)).a.Kc(),new h))),j=p.g,g=e.Math.max(g,j),b=p.f,d=e.Math.max(d,b),k+=j*b;for(o=k+2*r*r*w*(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i,a=e.Math.sqrt(o),s=e.Math.max(a*i,g),u=e.Math.max(a/i,d),m=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));m.e!=m.i.gc();)p=uG(Zkn(m),27),E=c.b+(uRn(t,26)*G0n+uRn(t,27)*q0n)*(s-p.g),S=c.b+(uRn(t,26)*G0n+uRn(t,27)*q0n)*(u-p.f),ycn(p,E),Mcn(p,S);for(T=s+(c.b+c.c),M=u+(c.d+c.a),y=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));y.e!=y.i.gc();)for(l=new Fz(ix(eRn(uG(Zkn(y),27)).a.Kc(),new h));hDn(l);)z$n(f=uG(N9(l),74))||fYn(f,t,T,M);ZQn(n,T+=c.b+c.c,M+=c.d+c.a,!1,!0)}function kQn(n){var t;if(this.r=tY(new Sn,new Pn),this.b=new rpn(uG(WW(YRt),296)),this.p=new rpn(uG(WW(YRt),296)),this.i=new rpn(uG(WW(mht),296)),this.e=n,this.o=new eN(n.Mf()),this.D=n.Yf()||oM(gK(n.of((XYn(),C$t)))),this.A=uG(n.of((XYn(),_$t)),21),this.B=uG(n.of(q$t),21),this.q=uG(n.of(sDt),101),this.u=uG(n.of(bDt),21),!eIn(this.u))throw hv(new jM("Invalid port label placement: "+this.u));if(this.v=oM(gK(n.of(dDt))),this.j=uG(n.of(K$t),21),!zxn(this.j))throw hv(new jM("Invalid node label placement: "+this.j));this.n=uG(Rjn(n,x$t),107),this.k=uM(pK(Rjn(n,LDt))),this.d=uM(pK(Rjn(n,ADt))),this.w=uM(pK(Rjn(n,FDt))),this.s=uM(pK(Rjn(n,NDt))),this.t=uM(pK(Rjn(n,$Dt))),this.C=uG(Rjn(n,RDt),140),this.c=2*this.d,t=!this.B.Hc((oUn(),nKt)),this.f=new tkn(0,t,0),this.g=new tkn(1,t,0),nM(this.f,(Yrn(),Est),this.g)}function yQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Comment pre-processing",1),e=0,u=new Ww(n.a);u.a<u.c.c.length;)if(oM(gK(oIn(o=uG(N3(u),10),(jYn(),gyt))))){for(++e,r=0,i=null,s=null,w=new Ww(o.j);w.a<w.c.c.length;)r+=(l=uG(N3(w),12)).e.c.length+l.g.c.length,1==l.e.c.length&&(s=(i=uG(zq(l.e,0),18)).c),1==l.g.c.length&&(s=(i=uG(zq(l.g,0),18)).d);if(1!=r||s.e.c.length+s.g.c.length!=1||oM(gK(oIn(s.i,gyt)))){for(g=new Zm,b=new Ww(o.j);b.a<b.c.c.length;){for(f=new Ww((l=uG(N3(b),12)).g);f.a<f.c.c.length;)0==(h=uG(N3(f),18)).d.g.c.length||mv(g.c,h);for(a=new Ww(l.e);a.a<a.c.c.length;)0==(c=uG(N3(a),18)).c.e.c.length||mv(g.c,c)}for(d=new Ww(g);d.a<d.c.c.length;)pqn(uG(N3(d),18),!0)}else TJn(o,i,s,s.i),tW(u)}t._g()&&t.bh("Found "+e+" comment boxes"),t.Vg()}function MQn(n,t){var e,i,r,c,a,o,u;if(GG(),this.a=new U$(this),this.b=n,this.c=t,this.f=ZV(Nen((gAn(),kBt),t)),this.f.dc())if((o=cSn(kBt,n))==t)for(this.e=!0,this.d=new Zm,this.f=new us,this.f.Fc(lct),uG(JXn(Len(kBt,Hrn(n)),""),29)==n&&this.f.Fc(jz(kBt,Hrn(n))),r=LHn(kBt,n).Kc();r.Ob();)switch(i=uG(r.Pb(),179),sJ(Nen(kBt,i))){case 4:this.d.Fc(i);break;case 5:this.f.Gc(ZV(Nen(kBt,i)))}else if(PP(),uG(t,69).xk())for(this.e=!0,this.f=null,this.d=new Zm,a=0,u=(null==n.i&&eqn(n),n.i).length;a<u;++a)for(null==n.i&&eqn(n),e=n.i,i=a>=0&&a<e.length?e[a]:null,c=_3(Nen(kBt,i));c;c=_3(Nen(kBt,c)))c==t&&this.d.Fc(i);else 1==sJ(Nen(kBt,t))&&o?(this.f=null,this.d=(m$n(),$Bt)):(this.f=null,this.e=!0,this.d=(hZ(),new Xw(t)));else this.e=5==sJ(Nen(kBt,t)),this.f.Fb(CBt)&&(this.f=CBt)}function TQn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;for(i=0,r=fTn(n,t),b=n.s,w=n.t,h=uG(uG(Y9(n.r,t),21),87).Kc();h.Ob();)if((s=uG(h.Pb(),117)).c&&!(s.c.d.c.length<=0)){switch(d=s.b.Mf(),u=s.b.pf((XYn(),uDt))?uM(pK(s.b.of(uDt))):0,(l=(f=s.c).i).b=(o=f.n,f.e.a+o.b+o.c),l.a=(a=f.n,f.e.b+a.d+a.a),t.g){case 1:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=d.b+u+r,etn(f,(Ktn(),Ost)),eF(f,(Yen(),Fst));break;case 3:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=-u-r-l.a,etn(f,(Ktn(),Ost)),eF(f,(Yen(),Rst));break;case 2:l.c=-u-r-l.b,s.a?(c=n.v?l.a:uG(zq(f.d,0),187).Mf().b,l.d=(d.b-c)/2):l.d=d.b+w,etn(f,(Ktn(),Lst)),eF(f,(Yen(),Kst));break;case 4:l.c=d.a+u+r,s.a?(c=n.v?l.a:uG(zq(f.d,0),187).Mf().b,l.d=(d.b-c)/2):l.d=d.b+w,etn(f,(Ktn(),Ast)),eF(f,(Yen(),Kst))}(t==(KQn(),yRt)||t==KRt)&&(i=e.Math.max(i,l.a))}i>0&&(uG(AJ(n.b,t),127).a.b=i)}function jQn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d;if(l=uM(pK(oIn(n,(jYn(),TTt)))),b=uM(pK(oIn(n,jTt))),f=uM(pK(oIn(n,yTt))),o=n.o,a=(c=uG(zq(n.j,0),12)).n,d=hAn(c,f)){if(t.Hc((eNn(),wRt)))switch(uG(oIn(n,(GYn(),Fpt)),64).g){case 1:d.c=(o.a-d.b)/2-a.a,d.d=b;break;case 3:d.c=(o.a-d.b)/2-a.a,d.d=-b-d.a;break;case 2:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:uG(zq(c.f,0),72).o.b,d.d=(o.b-h)/2-a.b):d.d=o.b+b-a.b,d.c=-l-d.b;break;case 4:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:uG(zq(c.f,0),72).o.b,d.d=(o.b-h)/2-a.b):d.d=o.b+b-a.b,d.c=l}else if(t.Hc(gRt))switch(uG(oIn(n,(GYn(),Fpt)),64).g){case 1:case 3:d.c=a.a+l;break;case 2:case 4:e&&!c.c?(h=i?d.a:uG(zq(c.f,0),72).o.b,d.d=(o.b-h)/2-a.b):d.d=a.b+b}for(r=d.d,s=new Ww(c.f);s.a<s.c.c.length;)(w=(u=uG(N3(s),72)).n).a=d.c,w.b=r,r+=u.o.b+f}}function EQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j;for(v=new Zm,f=new Ww(n.b);f.a<f.c.c.length;)for(w=new Ww(uG(N3(f),30).a);w.a<w.c.c.length;)if((l=uG(N3(w),10)).k==(zIn(),lbt)&&vR(l,(GYn(),Kpt))){for(d=null,p=null,g=null,M=new Ww(l.j);M.a<M.c.c.length;)switch((y=uG(N3(M),12)).j.g){case 4:d=y;break;case 2:p=y;break;default:g=y}for(s=new tj((m=uG(zq(g.g,0),18)).a),JF(u=new eN(g.n),l.n),lW(Fkn(s,0),u),k=fln(m.a),JF(h=new eN(g.n),l.n),s8(k,h,k.c.b,k.c),T=uG(oIn(l,Kpt),10),j=uG(zq(T.j,0),12),c=0,o=(i=uG(Ekn(d.e,Inn(obt,t6n,18,0,0,1)),482)).length;c<o;++c)u2(t=i[c],j),rbn(t.a,t.a.b,s);for(r=0,a=(e=x4(p.g)).length;r<a;++r)c2(t=e[r],j),rbn(t.a,0,k);c2(m,null),u2(m,null),mv(v.c,l)}for(b=new Ww(v);b.a<b.c.c.length;)a2(l=uG(N3(b),10),null)}function SQn(){ML(DBt,new Xh),ML(lHt,new rf),ML(bHt,new df),ML(wHt,new Sf),ML($ot,new Of),ML(cT(tUt,1),new Af),ML(cot,new Lf),ML(uot,new Nf),ML($ot,new Dh),ML($ot,new xh),ML($ot,new Rh),ML(fot,new Kh),ML($ot,new Fh),ML(yat,new _h),ML(yat,new Bh),ML($ot,new Hh),ML(lot,new Gh),ML($ot,new qh),ML($ot,new zh),ML($ot,new Vh),ML($ot,new Wh),ML($ot,new Qh),ML(cT(tUt,1),new Jh),ML($ot,new Yh),ML($ot,new Zh),ML(yat,new nf),ML(yat,new tf),ML($ot,new ef),ML(dot,new cf),ML($ot,new af),ML(yot,new of),ML($ot,new uf),ML($ot,new sf),ML($ot,new hf),ML($ot,new ff),ML(yat,new lf),ML(yat,new bf),ML($ot,new wf),ML($ot,new gf),ML($ot,new pf),ML($ot,new mf),ML($ot,new vf),ML($ot,new kf),ML(Tot,new yf),ML($ot,new Mf),ML($ot,new Tf),ML($ot,new jf),ML(Tot,new Ef),ML(yot,new Pf),ML($ot,new Cf),ML(dot,new If)}function PQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;switch(h=new Uk,n.a.g){case 3:l=uG(oIn(t.e,(GYn(),Tmt)),15),b=uG(oIn(t.j,Tmt),15),w=uG(oIn(t.f,Tmt),15),e=uG(oIn(t.e,ymt),15),i=uG(oIn(t.j,ymt),15),r=uG(oIn(t.f,ymt),15),Ohn(a=new Zm,l),b.Jc(new gc),Ohn(a,Spn(b)),Ohn(a,w),Ohn(c=new Zm,e),Ohn(c,Spn(i)),Ohn(c,r),kfn(t.f,Tmt,a),kfn(t.f,ymt,c),kfn(t.f,jmt,t.f),kfn(t.e,Tmt,null),kfn(t.e,ymt,null),kfn(t.j,Tmt,null),kfn(t.j,ymt,null);break;case 1:Qon(h,t.e.a),aq(h,t.i.n),Qon(h,Spn(t.j.a)),aq(h,t.a.n),Qon(h,t.f.a);break;default:Qon(h,t.e.a),Qon(h,Spn(t.j.a)),Qon(h,t.f.a)}BY(t.f.a),Qon(t.f.a,h),c2(t.f,t.e.c),o=uG(oIn(t.e,(jYn(),bMt)),75),s=uG(oIn(t.j,bMt),75),u=uG(oIn(t.f,bMt),75),(o||s||u)&&(uW(f=new Uk,u),uW(f,s),uW(f,o),kfn(t.f,bMt,f)),c2(t.j,null),u2(t.j,null),c2(t.e,null),u2(t.e,null),a2(t.a,null),a2(t.i,null),t.g&&PQn(n,t.g)}function CQn(){var n,t,e;for(CQn=E,new Edn(1,0),new Edn(10,0),new Edn(0,0),Sot=Inn(Bot,zZn,247,11,0,1),Pot=Inn(JHt,N1n,28,100,15,1),Cot=Uhn(cT(eUt,1),I0n,28,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,0x878678326eac9]),Iot=Inn(YHt,W1n,28,Cot.length,15,1),Oot=Uhn(cT(eUt,1),I0n,28,15,[1,10,100,$1n,1e4,O0n,1e6,1e7,1e8,g0n,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),Aot=Inn(YHt,W1n,28,Oot.length,15,1),Lot=Inn(Bot,zZn,247,11,0,1),n=0;n<Lot.length;n++)Sot[n]=new Edn(n,0),Lot[n]=new Edn(0,n),Pot[n]=48;for(;n<Pot.length;n++)Pot[n]=48;for(e=0;e<Iot.length;e++)Iot[e]=VLn(Cot[e]);for(t=0;t<Aot.length;t++)Aot[t]=VLn(Oot[t]);b_n()}function IQn(){function n(){this.obj=this.createObject()}return n.prototype.createObject=function(n){return Object.create(null)},n.prototype.get=function(n){return this.obj[n]},n.prototype.set=function(n,t){this.obj[n]=t},n.prototype[U0n]=function(n){delete this.obj[n]},n.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)},n.prototype.entries=function(){var n=this.keys(),t=this,e=0;return{next:function(){if(e>=n.length)return{done:!0};var i=n[e++];return{value:[i,t.get(i)],done:!1}}}},__n()||(n.prototype.createObject=function(){return{}},n.prototype.get=function(n){return this.obj[":"+n]},n.prototype.set=function(n,t){this.obj[":"+n]=t},n.prototype[U0n]=function(n){delete this.obj[":"+n]},n.prototype.keys=function(){var n=[];for(var t in this.obj)58==t.charCodeAt(0)&&n.push(t.substring(1));return n}),n}function OQn(){OQn=E,RPt=new Cm(E4n),new Cm(S4n),new uF("DEPTH",xwn(0)),EPt=new uF("FAN",xwn(0)),TPt=new uF(Q9n,xwn(0)),UPt=new uF("ROOT",(qx(),!1)),APt=new uF("LEFTNEIGHBOR",null),BPt=new uF("RIGHTNEIGHBOR",null),LPt=new uF("LEFTSIBLING",null),HPt=new uF("RIGHTSIBLING",null),jPt=new uF("DUMMY",!1),new uF("LEVEL",xwn(0)),_Pt=new uF("REMOVABLE_EDGES",new lS),GPt=new uF("XCOOR",xwn(0)),qPt=new uF("YCOOR",xwn(0)),NPt=new uF("LEVELHEIGHT",0),DPt=new uF("LEVELMIN",0),$Pt=new uF("LEVELMAX",0),PPt=new uF("GRAPH_XMIN",0),IPt=new uF("GRAPH_YMIN",0),SPt=new uF("GRAPH_XMAX",0),CPt=new uF("GRAPH_YMAX",0),MPt=new uF("COMPACT_LEVEL_ASCENSION",!1),yPt=new uF("COMPACT_CONSTRAINTS",new Zm),OPt=new uF("ID",""),KPt=new uF("POSITION",xwn(0)),FPt=new uF("PRELIM",0),xPt=new uF("MODIFIER",0),kPt=new Cm(P4n),vPt=new Cm(C4n)}function AQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d;if(NGn(),null==n)return null;if(0==(f=8*n.length))return"";for(l=f/24|0,c=null,c=Inn(JHt,N1n,28,4*(0!=(o=f%24)?l+1:l),15,1),s=0,h=0,t=0,e=0,i=0,a=0,r=0,u=0;u<l;u++)t=n[r++],h=(15&(e=n[r++]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,d=0==(-128&(i=n[r++]))?i>>6<<24>>24:(i>>6^252)<<24>>24,c[a++]=gHt[b],c[a++]=gHt[w|s<<4],c[a++]=gHt[h<<2|d],c[a++]=gHt[63&i];return 8==o?(s=(3&(t=n[r]))<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,c[a++]=gHt[b],c[a++]=gHt[s<<4],c[a++]=61,c[a++]=61):16==o&&(t=n[r],h=(15&(e=n[r+1]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,c[a++]=gHt[b],c[a++]=gHt[w|s<<4],c[a++]=gHt[h<<2],c[a++]=61),mvn(c,0,c.length)}function LQn(n,t){var i,r,c,a,o,u;if(0==n.e&&n.p>0&&(n.p=-(n.p-1)),n.p>j1n&&F5(t,n.p-V1n),o=t.q.getDate(),k0(t,1),n.k>=0&&H0(t,n.k),n.c>=0?k0(t,n.c):n.k>=0?(r=35-new Lfn(t.q.getFullYear()-V1n,t.q.getMonth(),35).q.getDate(),k0(t,e.Math.min(r,o))):k0(t,o),n.f<0&&(n.f=t.q.getHours()),n.b>0&&n.f<12&&(n.f+=12),tD(t,24==n.f&&n.g?0:n.f),n.j>=0&&y7(t,n.j),n.n>=0&&Nnn(t,n.n),n.i>=0&&TL(t,Lgn(Ngn(bSn(Bsn(t.q.getTime()),$1n),$1n),n.i)),n.a&&(F5(c=new QE,c.q.getFullYear()-V1n-80),$P(Bsn(t.q.getTime()),Bsn(c.q.getTime()))&&F5(t,c.q.getFullYear()-V1n+100)),n.d>=0)if(-1==n.c)(i=(7+n.d-t.q.getDay())%7)>3&&(i-=7),u=t.q.getMonth(),k0(t,t.q.getDate()+i),t.q.getMonth()!=u&&k0(t,t.q.getDate()+(i>0?-7:7));else if(t.q.getDay()!=n.d)return!1;return n.o>j1n&&(a=t.q.getTimezoneOffset(),TL(t,Lgn(Bsn(t.q.getTime()),60*(n.o-a)*$1n))),!0}function NQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(F$(r=oIn(t,(GYn(),rmt)),207)){for(b=uG(r,27),w=t.e,f=new eN(t.c),c=t.d,f.a+=c.b,f.b+=c.d,$x(uG(zDn(b,(jYn(),KMt)),181),(oUn(),tKt))&&(Ab(l=uG(zDn(b,_Mt),107),c.a),_b(l,c.d),Lb(l,c.b),Fb(l,c.c)),e=new Zm,s=new Ww(t.a);s.a<s.c.c.length;)for(F$(oIn(o=uG(N3(s),10),rmt),207)?UQn(o,f):F$(oIn(o,rmt),193)&&!w&&kN(i=uG(oIn(o,rmt),123),(g=SGn(t,o,i.g,i.f)).a,g.b),d=new Ww(o.j);d.a<d.c.c.length;)kS(JJ(new fX(null,new h3(uG(N3(d),12).g,16)),new tg(o)),new eg(e));if(w)for(d=new Ww(w.j);d.a<d.c.c.length;)kS(JJ(new fX(null,new h3(uG(N3(d),12).g,16)),new ig(w)),new rg(e));for(p=uG(zDn(b,Vyt),223),a=new Ww(e);a.a<a.c.c.length;)DWn(uG(N3(a),18),p,f);for(SUn(t),u=new Ww(t.a);u.a<u.c.c.length;)(h=(o=uG(N3(u),10)).e)&&NQn(n,h)}}function $Qn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w;if(!uG(uG(Y9(n.r,t),21),87).dc()){if(s=(o=uG(AJ(n.b,t),127)).i,u=o.n,f=M_n(n,t),r=s.b-u.b-u.c,c=o.a.a,a=s.c+u.b,w=n.w,f!=(Vkn(),Zxt)&&f!=tRt||1!=uG(uG(Y9(n.r,t),21),87).gc()||(c=f==Zxt?c-2*n.w:c,f=Yxt),r<c&&!n.B.Hc((oUn(),aKt)))f==Zxt?a+=w+=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()+1):w+=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()-1);else switch(r<c&&(c=f==Zxt?c-2*n.w:c,f=Yxt),f.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()+1),a+=w+=e.Math.max(0,i);break;case 1:i=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()-1),w+=e.Math.max(0,i)}for(b=uG(uG(Y9(n.r,t),21),87).Kc();b.Ob();)(l=uG(b.Pb(),117)).e.a=a+l.d.b,l.e.b=(h=l.b).pf((XYn(),uDt))?h.ag()==(KQn(),yRt)?-h.Mf().b-uM(pK(h.of(uDt))):uM(pK(h.of(uDt))):h.ag()==(KQn(),yRt)?-h.Mf().b:0,a+=l.d.b+l.b.Mf().a+l.d.c+w}}function DQn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;if(!uG(uG(Y9(n.r,t),21),87).dc()){if(s=(o=uG(AJ(n.b,t),127)).i,u=o.n,l=M_n(n,t),r=s.a-u.d-u.a,c=o.a.b,a=s.d+u.d,d=n.w,h=n.o.a,l!=(Vkn(),Zxt)&&l!=tRt||1!=uG(uG(Y9(n.r,t),21),87).gc()||(c=l==Zxt?c-2*n.w:c,l=Yxt),r<c&&!n.B.Hc((oUn(),aKt)))l==Zxt?a+=d+=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()+1):d+=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()-1);else switch(r<c&&(c=l==Zxt?c-2*n.w:c,l=Yxt),l.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()+1),a+=d+=e.Math.max(0,i);break;case 1:i=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()-1),d+=e.Math.max(0,i)}for(w=uG(uG(Y9(n.r,t),21),87).Kc();w.Ob();)(b=uG(w.Pb(),117)).e.a=(f=b.b).pf((XYn(),uDt))?f.ag()==(KQn(),_Rt)?-f.Mf().a-uM(pK(f.of(uDt))):h+uM(pK(f.of(uDt))):f.ag()==(KQn(),_Rt)?-f.Mf().a:h,b.e.b=a+b.d.d,a+=b.d.d+b.b.Mf().b+b.d.a+d}}function xQn(n,t){var e,i,r,c,a;for(t.Ug("Processor determine the coords for each level",1),i=new Zm,a=Fkn(n.b,0);a.b!=a.d.c;){for(r=uG(I6(a),39);uG(oIn(r,(QGn(),ACt)),17).a>i.c.length-1;)kD(i,new WO(B3n,G9n));e=uG(oIn(r,ACt),17).a,hN(uG(oIn(n,cCt),88))?(r.e.a<uM(pK((u3(e,i.c.length),uG(i.c[e],42)).a))&&uw((u3(e,i.c.length),uG(i.c[e],42)),r.e.a),r.e.a+r.f.a>uM(pK((u3(e,i.c.length),uG(i.c[e],42)).b))&&sw((u3(e,i.c.length),uG(i.c[e],42)),r.e.a+r.f.a)):(r.e.b<uM(pK((u3(e,i.c.length),uG(i.c[e],42)).a))&&uw((u3(e,i.c.length),uG(i.c[e],42)),r.e.b),r.e.b+r.f.b>uM(pK((u3(e,i.c.length),uG(i.c[e],42)).b))&&sw((u3(e,i.c.length),uG(i.c[e],42)),r.e.b+r.f.b))}for(c=Fkn(n.b,0);c.b!=c.d.c;)r=uG(I6(c),39),e=uG(oIn(r,(QGn(),ACt)),17).a,kfn(r,(OQn(),DPt),pK((u3(e,i.c.length),uG(i.c[e],42)).a)),kfn(r,$Pt,pK((u3(e,i.c.length),uG(i.c[e],42)).b));t.Vg()}function RQn(n){var t,i,r,c,a,o,u,s,f,l,b,w,d,g,p;for(n.o=uM(pK(oIn(n.i,(jYn(),ETt)))),n.f=uM(pK(oIn(n.i,vTt))),n.j=n.i.b.c.length,u=n.j-1,w=0,n.k=0,n.n=0,n.b=n7(Inn(dot,zZn,17,n.j,0,1)),n.c=n7(Inn(fot,zZn,345,n.j,7,1)),o=new Ww(n.i.b);o.a<o.c.c.length;){for((c=uG(N3(o),30)).p=u,b=new Ww(c.a);b.a<b.c.c.length;)(l=uG(N3(b),10)).p=w,++w;--u}for(n.g=Inn(YHt,W1n,28,w,15,1),n.d=Jq(YHt,[zZn,W1n],[53,28],15,[w,3],2),n.p=new Zm,n.q=new Zm,t=0,n.e=0,a=new Ww(n.i.b);a.a<a.c.c.length;){for(u=(c=uG(N3(a),30)).p,r=0,p=0,s=c.a.c.length,f=0,b=new Ww(c.a);b.a<b.c.c.length;)w=(l=uG(N3(b),10)).p,n.g[w]=l.c.p,f+=l.o.b+n.o,i=x5(new Fz(ix(qgn(l).a.Kc(),new h))),g=x5(new Fz(ix(Xgn(l).a.Kc(),new h))),n.d[w][0]=g-i,n.d[w][1]=i,n.d[w][2]=g,r+=i,p+=g,i>0&&kD(n.q,l),kD(n.p,l);d=s+(t-=r),f+=t*n.f,Y8(n.b,u,xwn(d)),Y8(n.c,u,f),n.k=e.Math.max(n.k,d),n.n=e.Math.max(n.n,f),n.e+=t,t+=p}}function KQn(){var n;KQn=E,FRt=new RO(Y2n,0),yRt=new RO(o3n,1),kRt=new RO(u3n,2),KRt=new RO(s3n,3),_Rt=new RO(h3n,4),hZ(),SRt=new nT(new nB(n=uG(Mj(YRt),9),uG(MF(n,n.length),9),0)),PRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[]))),MRt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[]))),DRt=Nwn(WX(KRt,Uhn(cT(YRt,1),z4n,64,0,[]))),RRt=Nwn(WX(_Rt,Uhn(cT(YRt,1),z4n,64,0,[]))),LRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[KRt]))),ERt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[_Rt]))),$Rt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[_Rt]))),CRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt]))),xRt=Nwn(WX(KRt,Uhn(cT(YRt,1),z4n,64,0,[_Rt]))),TRt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[KRt]))),ARt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt,_Rt]))),jRt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[KRt,_Rt]))),NRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[KRt,_Rt]))),IRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt,KRt]))),ORt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt,KRt,_Rt])))}function FQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(t.Ug(j6n,1),w=new Zm,k=new Zm,s=new Ww(n.b);s.a<s.c.c.length;)for(g=-1,l=0,b=(f=D4((u=uG(N3(s),30)).a)).length;l<b;++l)if(++g,(h=f[l]).k==(zIn(),dbt)&&sN(uG(oIn(h,(jYn(),JMt)),101))){for(L_(uG(oIn(h,(jYn(),JMt)),101))||NKn(h),kfn(h,(GYn(),zpt),h),w.c.length=0,k.c.length=0,e=new Zm,Fon(m=new lS,yOn(h,(KQn(),yRt))),zJn(n,m,w,k,e),o=g,y=h,c=new Ww(w);c.a<c.c.c.length;)$jn(i=uG(N3(c),10),o,u),++g,kfn(i,zpt,h),a=uG(zq(i.j,0),12),d=uG(oIn(a,rmt),12),oM(gK(oIn(d,wyt)))||uG(oIn(i,Vpt),15).Fc(y);for(BY(m),p=yOn(h,KRt).Kc();p.Ob();)s8(m,uG(p.Pb(),12),m.a,m.a.a);for(zJn(n,m,k,null,e),v=h,r=new Ww(k);r.a<r.c.c.length;)$jn(i=uG(N3(r),10),++g,u),kfn(i,zpt,h),a=uG(zq(i.j,0),12),d=uG(oIn(a,rmt),12),oM(gK(oIn(d,wyt)))||uG(oIn(v,Vpt),15).Fc(i);0==e.c.length||kfn(h,jpt,e)}t.Vg()}function _Qn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(0!=t.b){for(l=new lS,a=null,b=null,i=t0(e.Math.floor(e.Math.log(t.b)*e.Math.LOG10E)+1),o=0,m=Fkn(t,0);m.b!=m.d.c;)for(g=uG(I6(m),39),xA(b)!==xA(oIn(g,(OQn(),OPt)))&&(b=mK(oIn(g,OPt)),o=0),a=null!=b?b+W3(o++,i):W3(o++,i),kfn(g,OPt,a),d=new Tp(Fkn(new Mp(g).a.d,0));Jj(d.a);)s8(l,w=uG(I6(d.a),65).c,l.c.b,l.c),kfn(w,OPt,a);for(f=new Ym,c=0;c<a.length-i;c++)for(p=Fkn(t,0);p.b!=p.d.c;)r2(f,u=r1(mK(oIn(g=uG(I6(p),39),(OQn(),OPt))),0,c+1),xwn(null!=(null==u?DA(FX(f.f,null)):_P(f.i,u))?uG(null==u?DA(FX(f.f,null)):_P(f.i,u),17).a+1:1));for(h=new bsn(new Nw(f).a);h.b;)s=von(h),r=xwn(null!=cQ(n.a,s.ld())?uG(cQ(n.a,s.ld()),17).a:0),r2(n.a,mK(s.ld()),xwn(uG(s.md(),17).a+r.a)),(!(r=uG(cQ(n.b,s.ld()),17))||r.a<uG(s.md(),17).a)&&r2(n.b,mK(s.ld()),uG(s.md(),17));_Qn(n,l)}}function BQn(n){var t,e,i,r,c,a,o,u,s,h,f;for(e=null,o=null,(r=uG(oIn(n.b,(jYn(),Yyt)),349))==(Sln(),cEt)&&(e=new Zm,o=new Zm),a=new Ww(n.d);a.a<a.c.c.length;)if((c=uG(N3(a),105)).i)switch(c.e.g){case 0:t=uG(X5(new fS(c.b)),64),r==cEt&&t==(KQn(),yRt)?mv(e.c,c):r==cEt&&t==(KQn(),KRt)?mv(o.c,c):yTn(c,t);break;case 1:u=c.a.d.j,s=c.c.d.j,u==(KQn(),yRt)?hV(c,yRt,(qhn(),udt),c.a):s==yRt?hV(c,yRt,(qhn(),sdt),c.c):u==KRt?hV(c,KRt,(qhn(),sdt),c.a):s==KRt&&hV(c,KRt,(qhn(),udt),c.c);break;case 2:case 3:$x(i=c.b,(KQn(),yRt))?$x(i,KRt)?$x(i,_Rt)?$x(i,kRt)||hV(c,yRt,(qhn(),sdt),c.c):hV(c,yRt,(qhn(),udt),c.a):hV(c,yRt,(qhn(),odt),null):hV(c,KRt,(qhn(),odt),null);break;case 4:h=c.a.d.j,f=c.a.d.j,h==(KQn(),yRt)||f==yRt?hV(c,KRt,(qhn(),odt),null):hV(c,yRt,(qhn(),odt),null)}e&&(0==e.c.length||fqn(e,(KQn(),yRt)),0==o.c.length||fqn(o,(KQn(),KRt)))}function HQn(n,t,e){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m;for(e.Ug("Breadth first model order layering",1),n.a=t,p=new Zm,g=new Ww(n.a.a);g.a<g.c.c.length;)(w=uG(N3(g),10)).k==(zIn(),dbt)&&mv(p.c,w);for(hZ(),f$(p,new jc),u=!0,r=new bQ(n.a),i=null,kD(n.a.b,r),d=new Ww(p);d.a<d.c.c.length;)if(w=uG(N3(d),10),u)a2(w,r),u=!1;else{for(o=new Fz(ix(qgn(w).a.Kc(),new h));hDn(o);)((c=uG(N9(o),18)).c.i.k==(zIn(),dbt)&&c.c.i.c==r||c.c.i.k==bbt&&uG(N9(new Fz(ix(qgn(c.c.i).a.Kc(),new h))),18).c.i.c==r)&&(i=new bQ(n.a),kD(n.a.b,i),r=new bQ(n.a),kD(n.a.b,r));for(a=new Fz(ix(qgn(w).a.Kc(),new h));hDn(a);)(c=uG(N9(a),18)).c.i.k==(zIn(),bbt)&&!c.c.i.c&&a2(c.c.i,i);a2(w,r)}for(n.a.a.c.length=0,m=new Zm,l=new Ww(n.a.b);l.a<l.c.c.length;)0==(s=uG(N3(l),30)).a.c.length&&mv(m.c,s);for(dgn(n.a.b,m),b=0,f=new Ww(n.a.b);f.a<f.c.c.length;)(s=uG(N3(f),30)).p=b,++b;e.Vg()}function UQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;for(i=uG(oIn(n,(GYn(),rmt)),27),b=uG(oIn(n,(jYn(),xyt)),17).a,c=uG(oIn(n,pMt),17).a,Myn(i,xyt,xwn(b)),Myn(i,pMt,xwn(c)),ycn(i,n.n.a+t.a),Mcn(i,n.n.b+t.b),(0!=uG(zDn(i,DMt),181).gc()||n.e||xA(oIn(HQ(n),$Mt))===xA((pyn(),Mjt))&&lN((Yyn(),(n.q?n.q:(hZ(),hZ(),Vot))._b(LMt)?uG(oIn(n,LMt),203):uG(oIn(HQ(n),NMt),203))))&&(kcn(i,n.o.a),vcn(i,n.o.b)),f=new Ww(n.j);f.a<f.c.c.length;)F$(w=oIn(s=uG(N3(f),12),rmt),193)&&(kN(r=uG(w,123),s.n.a,s.n.b),Myn(r,eTt,s.j));for(l=0!=uG(oIn(n,PMt),181).gc(),u=new Ww(n.b);u.a<u.c.c.length;)a=uG(N3(u),72),(l||0!=uG(oIn(a,PMt),181).gc())&&(vN(e=uG(oIn(a,rmt),135),a.o.a,a.o.b),kN(e,a.n.a,a.n.b));if(!cV(uG(oIn(n,nTt),21)))for(h=new Ww(n.j);h.a<h.c.c.length;)for(o=new Ww((s=uG(N3(h),12)).f);o.a<o.c.c.length;)a=uG(N3(o),72),kcn(e=uG(oIn(a,rmt),135),a.o.a),vcn(e,a.o.b),kN(e,a.n.a,a.n.b)}function GQn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(t.Ug("Calculate Graph Size",1),t.dh(n,l7n),l=B3n,b=B3n,h=b7n,f=b7n,g=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));g.e!=g.i.gc();)v=(w=uG(Zkn(g),27)).i,k=w.j,S=w.g,u=w.f,s=uG(zDn(w,(XYn(),$$t)),140),l=e.Math.min(l,v-s.b),b=e.Math.min(b,k-s.d),h=e.Math.max(h,v+S+s.c),f=e.Math.max(f,k+u+s.a);for(p=new MO(l-(m=uG(zDn(n,(XYn(),W$t)),107)).b,b-m.d),E=h-l+(m.b+m.c),o=f-b+(m.d+m.a),oM(gK(zDn(n,(jOn(),OIt))))&&(y=uG(zDn(n,(SK(),zCt)),27),M=uG(zDn(y,$$t),140),T=y.i+y.g/2+(M.b+M.c)/2-p.a,a=o-(j=y.j+y.f/2+(M.d+M.a)/2-p.b),(c=E-T)<E/2?(E+=i=c-T,p.a-=i):E+=i=T-c,a<o/2?(o+=r=a-j,p.b-=r):o+=r=j-a),d=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));d.e!=d.i.gc();)ycn(w=uG(Zkn(d),27),w.i-p.a),Mcn(w,w.j-p.b);oM(gK(zDn(n,H$t)))||(kcn(n,E),vcn(n,o)),Myn(n,h$t,E-(m.b+m.c)),Myn(n,s$t,o-(m.d+m.a)),t.dh(n,w7n)}function qQn(n,t,e){var i,r,c,a,o,u,s,h,f,l;if(n.e.a.$b(),n.f.a.$b(),n.c.c.length=0,n.i.c.length=0,n.g.a.$b(),t)for(a=new Ww(t.a);a.a<a.c.c.length;)for(h=yOn(c=uG(N3(a),10),(KQn(),kRt)).Kc();h.Ob();)for(s=uG(h.Pb(),12),FV(n.e,s),r=new Ww(s.g);r.a<r.c.c.length;)v9(i=uG(N3(r),18))||(kD(n.c,i),Ukn(n,i),((o=i.c.i.k)==(zIn(),dbt)||o==gbt||o==lbt||o==fbt)&&kD(n.j,i),(f=(l=i.d).i.c)==e?FV(n.f,l):f==t?FV(n.e,l):men(n.c,i));if(e)for(a=new Ww(e.a);a.a<a.c.c.length;){for(u=new Ww((c=uG(N3(a),10)).j);u.a<u.c.c.length;)for(r=new Ww(uG(N3(u),12).g);r.a<r.c.c.length;)v9(i=uG(N3(r),18))&&FV(n.g,i);for(h=yOn(c,(KQn(),_Rt)).Kc();h.Ob();)for(s=uG(h.Pb(),12),FV(n.f,s),r=new Ww(s.g);r.a<r.c.c.length;)v9(i=uG(N3(r),18))||(kD(n.c,i),Ukn(n,i),((o=i.c.i.k)==(zIn(),dbt)||o==gbt||o==lbt||o==fbt)&&kD(n.j,i),(f=(l=i.d).i.c)==e?FV(n.f,l):f==t?FV(n.e,l):men(n.c,i))}}function XQn(n,t,i){var r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M;for(i.Ug("Polyline edge routing",1),m=uM(pK(oIn(t,(jYn(),Qyt)))),d=uM(pK(oIn(t,STt))),c=uM(pK(oIn(t,gTt))),r=e.Math.min(1,c/d),y=0,s=0,0!=t.b.c.length&&(y=.4*r*(M=Yxn(uG(zq(t.b,0),30)))),u=new N4(t.b,0);u.b<u.d.gc();){for(MK(u.b<u.d.gc()),(a=UA(o=uG(u.d.Xb(u.c=u.b++),30),LSt))&&y>0&&(y-=d),Vzn(o,y),l=0,w=new Ww(o.a);w.a<w.c.c.length;){for(f=0,p=new Fz(ix(Xgn(b=uG(N3(w),10)).a.Kc(),new h));hDn(p);)v=n3((g=uG(N9(p),18)).c).b,k=n3(g.d).b,o!=g.d.i.c||v9(g)||(_Nn(g,y,.4*r*e.Math.abs(v-k)),g.c.j==(KQn(),_Rt)&&(v=0,k=0)),f=e.Math.max(f,e.Math.abs(k-v));switch(b.k.g){case 0:case 4:case 1:case 3:case 5:aVn(n,b,y,m)}l=e.Math.max(l,f)}u.b<u.d.gc()&&(M=Yxn((MK(u.b<u.d.gc()),uG(u.d.Xb(u.c=u.b++),30))),l=e.Math.max(l,M),MK(u.b>0),u.a.Xb(u.c=--u.b)),s=.4*r*l,!a&&u.b<u.d.gc()&&(s+=d),y+=o.c.a+s}n.a.a.$b(),t.f.a=y,i.Vg()}function zQn(n){var t,e,i,r,c;switch(ZZ(n,Uet),(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i+(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i){case 0:throw hv(new vM("The edge must have at least one source or target."));case 1:return 0==(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i?R0(lCn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))):R0(lCn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)))}if(1==(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i&&1==(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i){if(r=lCn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)),c=lCn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84)),R0(r)==R0(c))return R0(r);if(r==R0(c))return r;if(c==R0(r))return c}for(t=lCn(uG(N9(i=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c)])))),84));hDn(i);)if((e=lCn(uG(N9(i),84)))!=t&&!Ern(e,t))if(R0(e)==R0(t))t=R0(e);else if(!(t=xxn(t,e)))return null;return t}function VQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if((f=t.length)>0&&(s3(0,t.length),64!=(o=t.charCodeAt(0)))){if(37==o&&(u=!1,0!=(h=t.lastIndexOf("%"))&&(h==f-1||(s3(h+1,t.length),u=46==t.charCodeAt(h+1))))){if(Knn(1,h,t.length),m=m_("%",a=t.substr(1,h-1))?null:eJn(a),i=0,u)try{i=vUn((s3(h+2,t.length+1),t.substr(h+2)),j1n,vZn)}catch(v){throw F$(v=Ehn(v),130)?hv(new Pen(v)):hv(v)}for(d=kon(n.Gh());d.Ob();)if(F$(b=Ksn(d),519)&&(p=(r=uG(b,598)).d,(null==m?null==p:m_(m,p))&&0==i--))return r;return null}if(l=-1==(s=t.lastIndexOf("."))?t:(Knn(0,s,t.length),t.substr(0,s)),e=0,-1!=s)try{e=vUn((s3(s+1,t.length+1),t.substr(s+1)),j1n,vZn)}catch(v){if(!F$(v=Ehn(v),130))throw hv(v);l=t}for(l=m_("%",l)?null:eJn(l),w=kon(n.Gh());w.Ob();)if(F$(b=Ksn(w),197)&&(g=(c=uG(b,197)).xe(),(null==l?null==g:m_(l,g))&&0==e--))return c;return null}return jWn(n,t)}function WQn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m;for(s=new Ym,o=new K1,i=new Ww(n.a.a.b);i.a<i.c.c.length;)if(u=z4(t=uG(N3(i),60)))VAn(s.f,u,t);else if(m=Q6(t))for(r=new Ww(m.k);r.a<r.c.c.length;)UNn(o,uG(N3(r),18),t);for(e=new Ww(n.a.a.b);e.a<e.c.c.length;)if(u=z4(t=uG(N3(e),60)))for(a=new Fz(ix(Xgn(u).a.Kc(),new h));hDn(a);)if(!v9(c=uG(N9(a),18))&&(w=c.c,p=c.d,!(KQn(),LRt).Hc(c.c.j)||!LRt.Hc(c.d.j))){if(d=uG(cQ(s,c.d.i),60),RKn(xS(DS(RS($S(new uk,0),100),n.c[t.a.d]),n.c[d.a.d])),w.j==_Rt&&Yz((Lun(),w)))for(l=uG(Y9(o,c),21).Kc();l.Ob();)if((f=uG(l.Pb(),60)).d.c<t.d.c){if((b=n.c[f.a.d])==(g=n.c[t.a.d]))continue;RKn(xS(DS(RS($S(new uk,1),100),b),g))}if(p.j==kRt&&Zz((Lun(),p)))for(l=uG(Y9(o,c),21).Kc();l.Ob();)if((f=uG(l.Pb(),60)).d.c>t.d.c){if((b=n.c[t.a.d])==(g=n.c[f.a.d]))continue;RKn(xS(DS(RS($S(new uk,1),100),b),g))}}}function QQn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;if(b=uG(uG(Y9(n.r,t),21),87),t!=(KQn(),kRt)&&t!=_Rt){for(a=t==yRt?(ehn(),wht):(ehn(),pht),y=t==yRt?(Yen(),Fst):(Yen(),Rst),c=(r=(i=uG(AJ(n.b,t),127)).i).c+Trn(Uhn(cT(eUt,1),I0n,28,15,[i.n.b,n.C.b,n.k])),m=r.c+r.b-Trn(Uhn(cT(eUt,1),I0n,28,15,[i.n.c,n.C.c,n.k])),o=TT(BB(a),n.t),v=t==yRt?T0n:M0n,l=b.Kc();l.Ob();)!(h=uG(l.Pb(),117)).c||h.c.d.c.length<=0||(p=h.b.Mf(),g=h.e,(d=(w=h.c).i).b=(s=w.n,w.e.a+s.b+s.c),d.a=(u=w.n,w.e.b+u.d+u.a),ZZ(y,W2n),w.f=y,etn(w,(Ktn(),Lst)),d.c=g.a-(d.b-p.a)/2,M=e.Math.min(c,g.a),T=e.Math.max(m,g.a+p.a),d.c<M?d.c=M:d.c+d.b>T&&(d.c=T-d.b),kD(o.d,new ZX(d,Hdn(o,d))),v=t==yRt?e.Math.max(v,g.b+h.b.Mf().b):e.Math.min(v,g.b));for(v+=t==yRt?n.t:-n.t,(k=cmn((o.e=v,o)))>0&&(uG(AJ(n.b,t),127).a.b=k),f=b.Kc();f.Ob();)!(h=uG(f.Pb(),117)).c||h.c.d.c.length<=0||((d=h.c.i).c-=h.e.a,d.d-=h.e.b)}else TQn(n,t)}function JQn(n){var t,e,i,r,c,a,o,u,s,f;for(t=new Ym,a=new DD(n);a.e!=a.i.gc();){for(c=uG(Zkn(a),27),e=new ek,vJ(cft,c,e),f=new at,i=uG(l8(new fX(null,new LW(new Fz(ix(tRn(c).a.Kc(),new h)))),HX(f,ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)])))),85),Ycn(e,uG(i.xc((qx(),!0)),16),new ot),r=uG(l8(JJ(uG(i.xc(!1),15).Lc(),new ut),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15).Kc();r.Ob();)(s=wIn(uG(r.Pb(),74)))&&((o=uG(DA(FX(t.f,s)),21))||(o=TFn(s),VAn(t.f,s,o)),Qon(e,o));for(i=uG(l8(new fX(null,new LW(new Fz(ix(eRn(c).a.Kc(),new h)))),HX(f,ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut])))),85),Ycn(e,uG(i.xc(!0),16),new st),u=uG(l8(JJ(uG(i.xc(!1),15).Lc(),new ht),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15).Kc();u.Ob();)(s=dIn(uG(u.Pb(),74)))&&((o=uG(DA(FX(t.f,s)),21))||(o=TFn(s),VAn(t.f,s,o)),Qon(e,o))}}function YQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d;if(pXn(),(u=dwn(n,0)<0)&&(n=Men(n)),0==dwn(n,0))switch(t){case 0:return"0";case 1:return N0n;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(b=new WM).a+=t<0?"0E+":"0E",b.a+=t==j1n?"2147483648":""+-t,b.a}f=Inn(JHt,N1n,28,1+(h=18),15,1),e=h,d=n;do{s=d,d=bSn(d,10),f[--e]=pz(Lgn(48,$gn(s,Ngn(d,10))))&D1n}while(0!=dwn(d,0));if(r=$gn($gn($gn(h,e),t),1),0==t)return u&&(f[--e]=45),mvn(f,e,h-e);if(t>0&&dwn(r,-6)>=0){if(dwn(r,0)>=0){for(c=e+pz(r),o=h-1;o>=c;o--)f[o+1]=f[o];return f[++c]=46,u&&(f[--e]=45),mvn(f,e,h-e+1)}for(a=2;$P(a,Lgn(Men(r),1));a++)f[--e]=48;return f[--e]=46,f[--e]=48,u&&(f[--e]=45),mvn(f,e,h-e)}return w=e+1,i=h,l=new QM,u&&(l.a+="-"),i-w>=1?(jQ(l,f[e]),l.a+=".",l.a+=mvn(f,e+1,h-e-1)):l.a+=mvn(f,e,h-e),l.a+="E",dwn(r,0)>0&&(l.a+="+"),l.a+=""+oV(r),l.a}function ZQn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;if(p=new MO(n.g,n.f),(g=xAn(n)).a=e.Math.max(g.a,t),g.b=e.Math.max(g.b,i),T=g.a/p.a,f=g.b/p.b,y=g.a-p.a,s=g.b-p.b,r)for(o=R0(n)?uG(zDn(R0(n),(XYn(),d$t)),88):uG(zDn(n,(XYn(),d$t)),88),u=xA(zDn(n,(XYn(),sDt)))===xA(($Pn(),cRt)),v=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));v.e!=v.i.gc();)switch(m=uG(Zkn(v),123),(k=uG(zDn(m,gDt),64))==(KQn(),FRt)&&(k=RGn(m,o),Myn(m,gDt,k)),k.g){case 1:u||ycn(m,m.i*T);break;case 2:ycn(m,m.i+y),u||Mcn(m,m.j*f);break;case 3:u||ycn(m,m.i*T),Mcn(m,m.j+s);break;case 4:u||Mcn(m,m.j*f)}if(vN(n,g.a,g.b),c)for(b=new DD((!n.n&&(n.n=new fV(lFt,n,1,7)),n.n));b.e!=b.i.gc();)w=(l=uG(Zkn(b),135)).i+l.g/2,d=l.j+l.f/2,(M=w/p.a)+(h=d/p.b)>=1&&(M-h>0&&d>=0?(ycn(l,l.i+y),Mcn(l,l.j+s*h)):M-h<0&&w>=0&&(ycn(l,l.i+y*M),Mcn(l,l.j+s)));return Myn(n,(XYn(),_$t),(Qmn(),new nB(a=uG(Mj(sKt),9),uG(MF(a,a.length),9),0))),new MO(T,f)}function nJn(n){hP(n,new hCn(xT(FT(DT(KT(RT(new bu,x7n),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new Oo),x7n))),U4(n,x7n,b9n,Jkn(BIt)),U4(n,x7n,o4n,Jkn(VIt)),U4(n,x7n,p4n,Jkn($It)),U4(n,x7n,x4n,Jkn(DIt)),U4(n,x7n,g4n,Jkn(xIt)),U4(n,x7n,m4n,Jkn(NIt)),U4(n,x7n,w4n,Jkn(RIt)),U4(n,x7n,v4n,Jkn(_It)),U4(n,x7n,P7n,Jkn(AIt)),U4(n,x7n,S7n,Jkn(LIt)),U4(n,x7n,E7n,Jkn(UIt)),U4(n,x7n,A7n,Jkn(XIt)),U4(n,x7n,L7n,Jkn(GIt)),U4(n,x7n,N7n,Jkn(qIt)),U4(n,x7n,O7n,Jkn(KIt)),U4(n,x7n,T7n,Jkn(FIt)),U4(n,x7n,j7n,Jkn(HIt)),U4(n,x7n,C7n,Jkn(zIt)),U4(n,x7n,I7n,Jkn(WIt)),U4(n,x7n,M7n,Jkn(OIt))}function tJn(n){var t,e,i,r,c,a,o,u,s,h,f;if(null==n)throw hv(new ZM(IZn));if(s=n,u=!1,(c=n.length)>0&&(s3(0,n.length),45!=(t=n.charCodeAt(0))&&43!=t||(s3(1,n.length+1),n=n.substr(1),--c,u=45==t)),0==c)throw hv(new ZM(y0n+s+'"'));for(;n.length>0&&(s3(0,n.length),48==n.charCodeAt(0));)s3(1,n.length+1),n=n.substr(1),--c;if(c>(lGn(),vot)[10])throw hv(new ZM(y0n+s+'"'));for(r=0;r<c;r++)if(-1==Cvn((s3(r,n.length),n.charCodeAt(r))))throw hv(new ZM(y0n+s+'"'));for(f=0,a=pot[10],h=mot[10],o=Men(kot[10]),e=!0,(i=c%a)>0&&(f=-parseInt((Knn(0,i,n.length),n.substr(0,i)),10),s3(i,n.length+1),n=n.substr(i),c-=i,e=!1);c>=a;){if(i=parseInt((Knn(0,a,n.length),n.substr(0,a)),10),s3(a,n.length+1),n=n.substr(a),c-=a,e)e=!1;else{if(dwn(f,o)<0)throw hv(new ZM(y0n+s+'"'));f=Ngn(f,h)}f=$gn(f,i)}if(dwn(f,0)>0)throw hv(new ZM(y0n+s+'"'));if(!u&&dwn(f=Men(f),0)<0)throw hv(new ZM(y0n+s+'"'));return f}function eJn(n){var t,e,i,r,c,a,o,u;if(ZXn(),null==n)return null;if((r=xL(n,$Cn(37)))<0)return n;for(u=new lx((Knn(0,r,n.length),n.substr(0,r))),t=Inn(tUt,ret,28,4,15,1),o=0,i=0,a=n.length;r<a;r++)if(s3(r,n.length),37==n.charCodeAt(r)&&n.length>r+2&&mfn((s3(r+1,n.length),n.charCodeAt(r+1)),QFt,JFt)&&mfn((s3(r+2,n.length),n.charCodeAt(r+2)),QFt,JFt))if(e=AG((s3(r+1,n.length),n.charCodeAt(r+1)),(s3(r+2,n.length),n.charCodeAt(r+2))),r+=2,i>0?128==(192&e)?t[o++]=e<<24>>24:i=0:e>=128&&(192==(224&e)?(t[o++]=e<<24>>24,i=2):224==(240&e)?(t[o++]=e<<24>>24,i=3):240==(248&e)&&(t[o++]=e<<24>>24,i=4)),i>0){if(o==i){switch(o){case 2:jQ(u,((31&t[0])<<6|63&t[1])&D1n);break;case 3:jQ(u,((15&t[0])<<12|(63&t[1])<<6|63&t[2])&D1n)}o=0,i=0}}else{for(c=0;c<o;++c)jQ(u,t[c]&D1n);o=0,u.a+=String.fromCharCode(e)}else{for(c=0;c<o;++c)jQ(u,t[c]&D1n);o=0,jQ(u,(s3(r,n.length),n.charCodeAt(r)))}return u.a}function iJn(n){var t,i,r,c,a,o,u,s,h,f,l;if(f=R0(lCn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)))==R0(lCn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))),o=new sj,(t=uG(zDn(n,(Iln(),Mxt)),75))&&t.b>=2){if(0==(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)gj(),i=new is,ttn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),i);else if((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i>1)for(l=new Zx((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a));l.e!=l.i.gc();)$Sn(l);sqn(t,uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166))}if(f)for(r=new DD((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a));r.e!=r.i.gc();)for(s=new DD((!(i=uG(Zkn(r),166)).a&&(i.a=new MD(eFt,i,5)),i.a));s.e!=s.i.gc();)u=uG(Zkn(s),377),o.a=e.Math.max(o.a,u.a),o.b=e.Math.max(o.b,u.b);for(a=new DD((!n.n&&(n.n=new fV(lFt,n,1,7)),n.n));a.e!=a.i.gc();)c=uG(Zkn(a),135),(h=uG(zDn(c,Cxt),8))&&kN(c,h.a,h.b),f&&(o.a=e.Math.max(o.a,c.i+c.g),o.b=e.Math.max(o.b,c.j+c.f));return o}function rJn(n,t,e,i,r){var c,a,o;if(win(n,t),a=t[0],c=VJ(e.c,0),o=-1,Jfn(e))if(i>0){if(a+i>n.length)return!1;o=RNn((Knn(0,a+i,n.length),n.substr(0,a+i)),t)}else o=RNn(n,t);switch(c){case 71:return o=XOn(n,a,Uhn(cT($ot,1),zZn,2,6,[Q1n,J1n]),t),r.e=o,!0;case 77:return c_n(n,t,r,o,a);case 76:return a_n(n,t,r,o,a);case 69:return XAn(n,t,a,r);case 99:return zAn(n,t,a,r);case 97:return o=XOn(n,a,Uhn(cT($ot,1),zZn,2,6,["AM","PM"]),t),r.b=o,!0;case 121:return o_n(n,t,a,o,e,r);case 100:return!(o<=0||(r.c=o,0));case 83:return!(o<0)&&tmn(o,a,t[0],r);case 104:12==o&&(o=0);case 75:case 72:return!(o<0||(r.f=o,r.g=!1,0));case 107:return!(o<0||(r.f=o,r.g=!0,0));case 109:return!(o<0||(r.j=o,0));case 115:return!(o<0||(r.n=o,0));case 90:if(a<n.length&&(s3(a,n.length),90==n.charCodeAt(a)))return++t[0],r.o=0,!0;case 122:case 118:return bCn(n,a,t,r);default:return!1}}function cJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(m=t.c.length,c=new WHn(n.a,i,null,null),T=Inn(eUt,I0n,28,m,15,1),w=Inn(eUt,I0n,28,m,15,1),b=Inn(eUt,I0n,28,m,15,1),d=0,u=0;u<m;u++)w[u]=vZn,b[u]=j1n;for(s=0;s<m;s++)for(u3(s,t.c.length),r=uG(t.c[s],185),T[s]=uxn(r),T[d]>T[s]&&(d=s),f=new Ww(n.a.b);f.a<f.c.c.length;)for(p=new Ww(uG(N3(f),30).a);p.a<p.c.c.length;)g=uG(N3(p),10),y=uM(r.p[g.p])+uM(r.d[g.p]),w[s]=e.Math.min(w[s],y),b[s]=e.Math.max(b[s],y+g.o.b);for(M=Inn(eUt,I0n,28,m,15,1),h=0;h<m;h++)(u3(h,t.c.length),uG(t.c[h],185)).o==(w0(),wSt)?M[h]=w[d]-w[h]:M[h]=b[d]-b[h];for(a=Inn(eUt,I0n,28,m,15,1),l=new Ww(n.a.b);l.a<l.c.c.length;)for(k=new Ww(uG(N3(l),30).a);k.a<k.c.c.length;){for(v=uG(N3(k),10),o=0;o<m;o++)a[o]=uM((u3(o,t.c.length),uG(t.c[o],185)).p[v.p])+uM((u3(o,t.c.length),uG(t.c[o],185)).d[v.p])+M[o];vv(a,qrn(P.prototype.Me,P,[])),c.p[v.p]=(a[1]+a[2])/2,c.d[v.p]=0}return c}function aJn(n,t,e){var i,r,c,a,o;switch(i=t.i,c=n.i.o,r=n.i.d,o=n.n,a=Gfn(Uhn(cT(PNt,1),zZn,8,0,[o,n.a])),n.j.g){case 1:eF(t,(Yen(),Rst)),i.d=-r.d-e-i.a,uG(uG(zq(t.d,0),187).of((GYn(),Qpt)),290)==(Ajn(),$xt)?(etn(t,(Ktn(),Lst)),i.c=a.a-uM(pK(oIn(n,emt)))-e-i.b):(etn(t,(Ktn(),Ast)),i.c=a.a+uM(pK(oIn(n,emt)))+e);break;case 2:etn(t,(Ktn(),Ast)),i.c=c.a+r.c+e,uG(uG(zq(t.d,0),187).of((GYn(),Qpt)),290)==(Ajn(),$xt)?(eF(t,(Yen(),Rst)),i.d=a.b-uM(pK(oIn(n,emt)))-e-i.a):(eF(t,(Yen(),Fst)),i.d=a.b+uM(pK(oIn(n,emt)))+e);break;case 3:eF(t,(Yen(),Fst)),i.d=c.b+r.a+e,uG(uG(zq(t.d,0),187).of((GYn(),Qpt)),290)==(Ajn(),$xt)?(etn(t,(Ktn(),Lst)),i.c=a.a-uM(pK(oIn(n,emt)))-e-i.b):(etn(t,(Ktn(),Ast)),i.c=a.a+uM(pK(oIn(n,emt)))+e);break;case 4:etn(t,(Ktn(),Lst)),i.c=-r.b-e-i.b,uG(uG(zq(t.d,0),187).of((GYn(),Qpt)),290)==(Ajn(),$xt)?(eF(t,(Yen(),Rst)),i.d=a.b-uM(pK(oIn(n,emt)))-e-i.a):(eF(t,(Yen(),Fst)),i.d=a.b+uM(pK(oIn(n,emt)))+e)}}function oJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;for(i.Ug($7n,1),!t.a&&(t.a=new fV(bFt,t,10,11)),r=uM(pK(zDn(t,(S_n(),VOt)))),f=uM(pK(zDn(t,bAt))),b=uG(zDn(t,hAt),107),a=kYn(w=new vO(r,f),t,b),Irn(t,w),u=uG(zDn(t,oAt),17).a;u>1;){if(c=nKn(t),l=a.g,d=uG(zDn(t,hAt),107),g=uM(pK(zDn(t,VOt))),(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i>1&&uM(pK(zDn(t,(lBn(),jOt))))!=M0n&&(a.c+(d.b+d.c))/(a.b+(d.d+d.a))<g?Myn(c,(lBn(),POt),uM(pK(zDn(t,POt)))+uM(pK(zDn(t,jOt)))):(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i>1&&uM(pK(zDn(t,(lBn(),TOt))))!=M0n&&(a.c+(d.b+d.c))/(a.b+(d.d+d.a))>g&&Myn(c,(lBn(),POt),e.Math.max(uM(pK(zDn(t,EOt))),uM(pK(zDn(c,POt)))-uM(pK(zDn(t,TOt))))),(h=(s=kYn(w=new vO(r,f),c,b)).g)>=l&&h==h){for(o=0;o<(!c.a&&(c.a=new fV(bFt,c,10,11)),c.a).i;o++)mNn(n,uG(zrn((!c.a&&(c.a=new fV(bFt,c,10,11)),c.a),o),27),uG(zrn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),o),27));Irn(t,w),x1(a,s.c),D1(a,s.b)}--u}Myn(t,(lBn(),mOt),a.b),Myn(t,vOt,a.c),i.Vg()}function uJn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(t.Ug("Interactive node layering",1),i=new Zm,b=new Ww(n.a);b.a<b.c.c.length;){for(u=(s=(f=uG(N3(b),10)).n.a)+f.o.a,u=e.Math.max(s+1,u),v=new N4(i,0),r=null;v.b<v.d.gc();){if(MK(v.b<v.d.gc()),(p=uG(v.d.Xb(v.c=v.b++),578)).c>=u){MK(v.b>0),v.a.Xb(v.c=--v.b);break}p.a>s&&(r?(Ohn(r.b,p.b),r.a=e.Math.max(r.a,p.a),LQ(v)):(kD(p.b,f),p.c=e.Math.min(p.c,s),p.a=e.Math.max(p.a,u),r=p))}r||((r=new Mk).c=s,r.a=u,pF(v,r),kD(r.b,f))}for(o=n.b,h=0,m=new Ww(i);m.a<m.c.c.length;)for(p=uG(N3(m),578),(c=new bQ(n)).p=h++,mv(o.c,c),w=new Ww(p.b);w.a<w.c.c.length;)a2(f=uG(N3(w),10),c),f.p=0;for(l=new Ww(n.a);l.a<l.c.c.length;)if(0==(f=uG(N3(l),10)).p)for(g=sBn(f,n);0!=g.a.gc();)d=uG(g.a.ec().Kc().Pb(),10),g.a.Bc(d),Qon(g,sBn(d,n));for(a=new N4(o,0);a.b<a.d.gc();)0==(MK(a.b<a.d.gc()),uG(a.d.Xb(a.c=a.b++),30)).a.c.length&&LQ(a);n.a.c.length=0,t.Vg()}function sJn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O;for(w=0,S=0,s=new Ww(n);s.a<s.c.c.length;)IWn(u=uG(N3(s),27)),w=e.Math.max(w,u.g),S+=u.g*u.f;for(E=Ojn(n,S/n.c.length),S+=n.c.length*E,w=e.Math.max(w,e.Math.sqrt(S*o))+i.b,I=i.b,O=i.d,b=0,f=i.b+i.c,aq(j=new lS,xwn(0)),M=new lS,h=new N4(n,0);h.b<h.d.gc();)MK(h.b<h.d.gc()),C=(u=uG(h.d.Xb(h.c=h.b++),27)).g,l=u.f,I+C>w&&(a&&(cL(M,b),cL(j,xwn(h.b-1))),I=i.b,O+=b+t,b=0,f=e.Math.max(f,i.b+i.c+C)),ycn(u,I),Mcn(u,O),f=e.Math.max(f,I+C+i.c),b=e.Math.max(b,l),I+=C+t;if(f=e.Math.max(f,r),(P=O+b+i.a)<c&&(b+=c-P,P=c),a)for(I=i.b,h=new N4(n,0),cL(j,xwn(n.c.length)),p=uG(I6(T=Fkn(j,0)),17).a,cL(M,b),y=Fkn(M,0),k=0;h.b<h.d.gc();)h.b==p&&(I=i.b,k=uM(pK(I6(y))),p=uG(I6(T),17).a),MK(h.b<h.d.gc()),m=(u=uG(h.d.Xb(h.c=h.b++),27)).f,vcn(u,k),d=k,h.b==p&&(g=f-I-i.c,v=u.g,kcn(u,g),tLn(u,new MO(g,d),new MO(v,m))),I+=u.g+t;return new MO(f,P)}function hJn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(t.Ug("Compound graph postprocessor",1),i=oM(gK(oIn(n,(jYn(),xTt)))),u=uG(oIn(n,(GYn(),Apt)),229),f=new ek,m=u.ec().Kc();m.Ob();){for(p=uG(m.Pb(),18),o=new Z_(u.cc(p)),hZ(),f$(o,new Gd(n)),M=vun((u3(0,o.c.length),uG(o.c[0],249))),j=kun(uG(zq(o,o.c.length-1),249)),k=M.i,v=jsn(j.i,k)?k.e:HQ(k),l=iyn(p,o),BY(p.a),b=null,a=new Ww(o);a.a<a.c.c.length;)c=uG(N3(a),249),pAn(g=new sj,c.a,v),w=c.b,rbn(r=new Uk,0,w.a),Xun(r,g),y=new eN(n3(w.c)),T=new eN(n3(w.d)),JF(y,g),JF(T,g),b&&(0==r.b?d=T:(MK(0!=r.b),d=uG(r.a.a.c,8)),E=e.Math.abs(b.a-d.a)>t4n,S=e.Math.abs(b.b-d.b)>t4n,(!i&&E&&S||i&&(E||S))&&aq(p.a,y)),Qon(p.a,r),0==r.b?b=y:(MK(0!=r.b),b=uG(r.c.b.c,8)),hhn(w,l,g),kun(c)==j&&(HQ(j.i)!=c.a&&pAn(g=new sj,HQ(j.i),v),kfn(p,Smt,g)),sOn(w,p,v),f.a.zc(w,f);c2(p,M),u2(p,j)}for(h=f.a.ec().Kc();h.Ob();)c2(s=uG(h.Pb(),18),null),u2(s,null);t.Vg()}function fJn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(h=(r=uG(oIn(n,(QGn(),cCt)),88))==(xdn(),JDt)||r==YDt?QDt:YDt,e=uG(l8(JJ(new fX(null,new h3(n.b,16)),new $a),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),(u=uG(l8(YJ(e.Oc(),new Pp(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15)).Gc(uG(l8(YJ(e.Oc(),new Cp(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),16)),u.jd(new Ip(h)),l=new Hj(new Op(r)),i=new Ym,o=u.Kc();o.Ob();)a=uG(o.Pb(),240),s=uG(a.a,39),oM(gK(a.c))?(l.a.zc(s,(qx(),tot)),new od(l.a.Zc(s,!1)).a.gc()>0&&vJ(i,s,uG(new od(l.a.Zc(s,!1)).a.Vc(),39)),new od(l.a.ad(s,!0)).a.gc()>1&&vJ(i,wmn(l,s),s)):(new od(l.a.Zc(s,!1)).a.gc()>0&&xA(c=uG(new od(l.a.Zc(s,!1)).a.Vc(),39))===xA(DA(FX(i.f,s)))&&uG(oIn(s,(OQn(),yPt)),15).Fc(c),new od(l.a.ad(s,!0)).a.gc()>1&&(f=wmn(l,s),xA(DA(FX(i.f,f)))===xA(s)&&uG(oIn(f,(OQn(),yPt)),15).Fc(s)),l.a.Bc(s))}function lJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(1==n.gc())return uG(n.Xb(0),235);if(n.gc()<=0)return new d7;for(c=n.Kc();c.Ob();){for(i=uG(c.Pb(),235),d=0,f=vZn,l=vZn,s=j1n,h=j1n,w=new Ww(i.e);w.a<w.c.c.length;)b=uG(N3(w),153),d+=uG(oIn(b,(cGn(),$ft)),17).a,f=e.Math.min(f,b.d.a-b.e.a/2),l=e.Math.min(l,b.d.b-b.e.b/2),s=e.Math.max(s,b.d.a+b.e.a/2),h=e.Math.max(h,b.d.b+b.e.b/2);kfn(i,(cGn(),$ft),xwn(d)),kfn(i,(mon(),Vft),new MO(f,l)),kfn(i,zft,new MO(s,h))}for(hZ(),n.jd(new bt),zsn(g=new d7,uG(n.Xb(0),96)),u=0,v=0,a=n.Kc();a.Ob();)i=uG(a.Pb(),235),p=YF(D$(uG(oIn(i,(mon(),zft)),8)),uG(oIn(i,Vft),8)),u=e.Math.max(u,p.a),v+=p.a*p.b;for(u=e.Math.max(u,e.Math.sqrt(v)*uM(pK(oIn(g,(cGn(),kft))))),k=0,y=0,o=0,t=m=uM(pK(oIn(g,_ft))),r=n.Kc();r.Ob();)i=uG(r.Pb(),235),k+(p=YF(D$(uG(oIn(i,(mon(),zft)),8)),uG(oIn(i,Vft),8))).a>u&&(k=0,y+=o+m,o=0),eUn(g,i,k,y),t=e.Math.max(t,k+p.a),o=e.Math.max(o,p.b),k+=p.a+m;return g}function bJn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;if(NGn(),null==n)return null;if((w=hgn(c=_en(n)))%4!=0)return null;if(0==(d=w/4|0))return Inn(tUt,ret,28,0,15,1);for(f=null,t=0,e=0,i=0,r=0,a=0,o=0,u=0,s=0,b=0,l=0,h=0,f=Inn(tUt,ret,28,3*d,15,1);b<d-1;b++){if(!(mE(a=c[h++])&&mE(o=c[h++])&&mE(u=c[h++])&&mE(s=c[h++])))return null;t=dHt[a],e=dHt[o],i=dHt[u],r=dHt[s],f[l++]=(t<<2|e>>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24}return mE(a=c[h++])&&mE(o=c[h++])?(t=dHt[a],e=dHt[o],u=c[h++],s=c[h++],-1==dHt[u]||-1==dHt[s]?61==u&&61==s?0!=(15&e)?null:(qGn(f,0,g=Inn(tUt,ret,28,3*b+1,15,1),0,3*b),g[l]=(t<<2|e>>4)<<24>>24,g):61!=u&&61==s?0!=(3&(i=dHt[u]))?null:(qGn(f,0,g=Inn(tUt,ret,28,3*b+2,15,1),0,3*b),g[l++]=(t<<2|e>>4)<<24>>24,g[l]=((15&e)<<4|i>>2&15)<<24>>24,g):null:(i=dHt[u],r=dHt[s],f[l++]=(t<<2|e>>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24,f)):null}function wJn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(t.Ug(j6n,1),l=uG(oIn(n,(jYn(),Vyt)),223),i=new Ww(n.b);i.a<i.c.c.length;)for(a=0,o=(c=D4(uG(N3(i),30).a)).length;a<o;++a)if((r=c[a]).k==(zIn(),gbt)){if(l==(_gn(),hxt))for(s=new Ww(r.j);s.a<s.c.c.length;)0==(u=uG(N3(s),12)).e.c.length||ekn(u),0==u.g.c.length||ikn(u);else if(F$(oIn(r,(GYn(),rmt)),18))w=uG(oIn(r,rmt),18),d=uG(yOn(r,(KQn(),_Rt)).Kc().Pb(),12),g=uG(yOn(r,kRt).Kc().Pb(),12),p=uG(oIn(d,rmt),12),c2(w,m=uG(oIn(g,rmt),12)),u2(w,p),(v=new eN(g.i.n)).a=Gfn(Uhn(cT(PNt,1),zZn,8,0,[m.i.n,m.n,m.a])).a,aq(w.a,v),(v=new eN(d.i.n)).a=Gfn(Uhn(cT(PNt,1),zZn,8,0,[p.i.n,p.n,p.a])).a,aq(w.a,v);else{if(r.j.c.length>=2){for(b=!0,e=uG(N3(h=new Ww(r.j)),12),f=null;h.a<h.c.c.length;)if(f=e,e=uG(N3(h),12),!udn(oIn(f,rmt),oIn(e,rmt))){b=!1;break}}else b=!1;for(s=new Ww(r.j);s.a<s.c.c.length;)0==(u=uG(N3(s),12)).e.c.length||YKn(u,b),0==u.g.c.length||ZKn(u,b)}a2(r,null)}t.Vg()}function dJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(o=new Ww(n.a.b);o.a<o.c.c.length;)for(v=new Ww(uG(N3(o),30).a);v.a<v.c.c.length;)m=uG(N3(v),10),t.g[m.p]=m,t.a[m.p]=m,t.d[m.p]=0;for(u=n.a.b,t.c==(b0(),hSt)&&(u=Spn(u)),a=u.Kc();a.Ob();)for(b=-1,l=uG(a.Pb(),30).a,t.o==(w0(),dSt)&&(b=vZn,l=Spn(l)),y=l.Kc();y.Ob();)if(k=uG(y.Pb(),10),f=null,(f=t.c==hSt?uG(zq(n.b.f,k.p),15):uG(zq(n.b.b,k.p),15)).gc()>0)if(r=f.gc(),s=t0(e.Math.floor((r+1)/2))-1,c=t0(e.Math.ceil((r+1)/2))-1,t.o==dSt)for(h=c;h>=s;h--)t.a[k.p]==k&&(d=uG(f.Xb(h),42),w=uG(d.a,10),!cS(i,d.b)&&b>n.b.e[w.p]&&(t.a[w.p]=k,t.g[k.p]=t.g[w.p],t.a[k.p]=t.g[k.p],t.f[t.g[k.p].p]=(qx(),!!(oM(t.f[t.g[k.p].p])&k.k==(zIn(),wbt))),b=n.b.e[w.p]));else for(h=s;h<=c;h++)t.a[k.p]==k&&(p=uG(f.Xb(h),42),g=uG(p.a,10),!cS(i,p.b)&&b<n.b.e[g.p]&&(t.a[g.p]=k,t.g[k.p]=t.g[g.p],t.a[k.p]=t.g[k.p],t.f[t.g[k.p].p]=(qx(),!!(oM(t.f[t.g[k.p].p])&k.k==(zIn(),wbt))),b=n.b.e[g.p]))}function gJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;return k=n.c[(u3(0,t.c.length),uG(t.c[0],18)).p],j=n.c[(u3(1,t.c.length),uG(t.c[1],18)).p],!(k.a.e.e-k.a.a-(k.b.e.e-k.b.a)==0&&j.a.e.e-j.a.a-(j.b.e.e-j.b.a)==0||!F$(m=k.b.e.f,10)||(p=uG(m,10),M=n.i[p.p],T=p.c?Ten(p.c.a,p,0):-1,a=M0n,T>0&&(c=uG(zq(p.c.a,T-1),10),o=n.i[c.p],E=e.Math.ceil(y$(n.n,c,p)),a=M.a.e-p.d.d-(o.a.e+c.o.b+c.d.a)-E),h=M0n,T<p.c.a.c.length-1&&(s=uG(zq(p.c.a,T+1),10),f=n.i[s.p],E=e.Math.ceil(y$(n.n,s,p)),h=f.a.e-s.d.d-(M.a.e+p.o.b+p.d.a)-E),!(i&&(YN(),oan(I9n),e.Math.abs(a-h)<=I9n||a==h||isNaN(a)&&isNaN(h)))&&(r=yW(k.a),u=-yW(k.b),l=-yW(j.a),v=yW(j.b),g=k.a.e.e-k.a.a-(k.b.e.e-k.b.a)>0&&j.a.e.e-j.a.a-(j.b.e.e-j.b.a)<0,d=k.a.e.e-k.a.a-(k.b.e.e-k.b.a)<0&&j.a.e.e-j.a.a-(j.b.e.e-j.b.a)>0,w=k.a.e.e+k.b.a<j.b.e.e+j.a.a,b=k.a.e.e+k.b.a>j.b.e.e+j.a.a,y=0,!g&&!d&&(b?a+l>0?y=l:h-r>0&&(y=r):w&&(a+u>0?y=u:h-v>0&&(y=v))),M.a.e+=y,M.b&&(M.d.e+=y),1)))}function pJn(n,t,i){var r,c,a,o,u,s,h,f,l,b;if(r=new gY(t.Lf().a,t.Lf().b,t.Mf().a,t.Mf().b),c=new cN,n.c)for(o=new Ww(t.Rf());o.a<o.c.c.length;)a=uG(N3(o),187),c.c=a.Lf().a+t.Lf().a,c.d=a.Lf().b+t.Lf().b,c.b=a.Mf().a,c.a=a.Mf().b,bAn(r,c);for(h=new Ww(t.Xf());h.a<h.c.c.length;){if(f=(s=uG(N3(h),852)).Lf().a+t.Lf().a,l=s.Lf().b+t.Lf().b,n.e&&(c.c=f,c.d=l,c.b=s.Mf().a,c.a=s.Mf().b,bAn(r,c)),n.d)for(o=new Ww(s.Rf());o.a<o.c.c.length;)a=uG(N3(o),187),c.c=a.Lf().a+f,c.d=a.Lf().b+l,c.b=a.Mf().a,c.a=a.Mf().b,bAn(r,c);if(n.b){if(b=new MO(-i,-i),uG(t.of((XYn(),bDt)),181).Hc((eNn(),gRt)))for(o=new Ww(s.Rf());o.a<o.c.c.length;)a=uG(N3(o),187),b.a+=a.Mf().a+i,b.b+=a.Mf().b+i;b.a=e.Math.max(b.a,0),b.b=e.Math.max(b.b,0),eGn(r,s.Wf(),s.Uf(),t,s,b,i)}}n.b&&eGn(r,t.Wf(),t.Uf(),t,null,null,i),(u=new zU(t.Vf())).d=e.Math.max(0,t.Lf().b-r.d),u.a=e.Math.max(0,r.d+r.a-(t.Lf().b+t.Mf().b)),u.b=e.Math.max(0,t.Lf().a-r.c),u.c=e.Math.max(0,r.c+r.b-(t.Lf().a+t.Mf().a)),t.Zf(u)}function mJn(){var n=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F"];return n[34]='\\"',n[92]="\\\\",n[173]="\\u00ad",n[1536]="\\u0600",n[1537]="\\u0601",n[1538]="\\u0602",n[1539]="\\u0603",n[1757]="\\u06dd",n[1807]="\\u070f",n[6068]="\\u17b4",n[6069]="\\u17b5",n[8203]="\\u200b",n[8204]="\\u200c",n[8205]="\\u200d",n[8206]="\\u200e",n[8207]="\\u200f",n[8232]="\\u2028",n[8233]="\\u2029",n[8234]="\\u202a",n[8235]="\\u202b",n[8236]="\\u202c",n[8237]="\\u202d",n[8238]="\\u202e",n[8288]="\\u2060",n[8289]="\\u2061",n[8290]="\\u2062",n[8291]="\\u2063",n[8292]="\\u2064",n[8298]="\\u206a",n[8299]="\\u206b",n[8300]="\\u206c",n[8301]="\\u206d",n[8302]="\\u206e",n[8303]="\\u206f",n[65279]="\\ufeff",n[65529]="\\ufff9",n[65530]="\\ufffa",n[65531]="\\ufffb",n}function vJn(n){hP(n,new hCn(_T(xT(FT(DT(KT(RT(new bu,c4n),"ELK Force"),"Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported."),new mt),c4n),WX((rDn(),MFt),Uhn(cT(PFt,1),p1n,245,0,[kFt]))))),U4(n,c4n,a4n,xwn(1)),U4(n,c4n,o4n,80),U4(n,c4n,u4n,5),U4(n,c4n,R3n,r4n),U4(n,c4n,s4n,xwn(1)),U4(n,c4n,h4n,(qx(),!0)),U4(n,c4n,K3n,Aft),U4(n,c4n,f4n,Jkn(Mft)),U4(n,c4n,l4n,Jkn(Lft)),U4(n,c4n,b4n,!1),U4(n,c4n,w4n,Jkn(Ift)),U4(n,c4n,d4n,Jkn(Pft)),U4(n,c4n,g4n,Jkn(Cft)),U4(n,c4n,p4n,Jkn(Sft)),U4(n,c4n,m4n,Jkn(Eft)),U4(n,c4n,v4n,Jkn(Nft)),U4(n,c4n,J3n,Jkn(jft)),U4(n,c4n,n4n,Jkn(Bft)),U4(n,c4n,Y3n,Jkn(Tft)),U4(n,c4n,e4n,Jkn(xft)),U4(n,c4n,Z3n,Jkn(Rft)),U4(n,c4n,k4n,Jkn(Gft)),U4(n,c4n,y4n,Jkn(Xft)),U4(n,c4n,M4n,Jkn(Uft)),U4(n,c4n,T4n,Jkn(Hft)),U4(n,c4n,j4n,qft)}function kJn(n,t){var e,i,r,c,a,o,u,s,h,f,l;if(QYn(),0==oS(jHt)){for(f=Inn(QHt,zZn,122,SHt.length,0,1),a=0;a<f.length;a++)f[a]=new K3(4);for(i=new VM,c=0;c<THt.length;c++){if(h=new K3(4),c<84?(s3(o=2*c,rat.length),l=rat.charCodeAt(o),s3(o+1,rat.length),HFn(h,l,rat.charCodeAt(o+1))):HFn(h,PHt[o=2*(c-84)],PHt[o+1]),m_(u=THt[c],"Specials")&&HFn(h,65520,65533),m_(u,eat)&&(HFn(h,983040,1048573),HFn(h,1048576,1114109)),r2(jHt,u,h),r2(EHt,u,FGn(h)),0<(s=i.a.length)?i.a=r1(i.a,0,0):0>s&&(i.a+=V$(Inn(JHt,N1n,28,-s,15,1))),i.a+="Is",xL(u,$Cn(32))>=0)for(r=0;r<u.length;r++)s3(r,u.length),32!=u.charCodeAt(r)&&TQ(i,(s3(r,u.length),u.charCodeAt(r)));else i.a+=""+u;ivn(i.a,u,!0)}ivn(iat,"Cn",!1),ivn(cat,"Cn",!0),HFn(e=new K3(4),0,zct),r2(jHt,"ALL",e),r2(EHt,"ALL",FGn(e)),!zHt&&(zHt=new Ym),r2(zHt,iat,iat),!zHt&&(zHt=new Ym),r2(zHt,cat,cat),!zHt&&(zHt=new Ym),r2(zHt,"ALL","ALL")}return uG(U1(t?jHt:EHt,n),138)}function yJn(n){hP(n,new hCn(_T(xT(FT(DT(KT(RT(new bu,c7n),"ELK Mr. Tree"),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new Qa),a7n),ggn((rDn(),vFt))))),U4(n,c7n,K3n,mCt),U4(n,c7n,o4n,20),U4(n,c7n,$8n,3),U4(n,c7n,R3n,r4n),U4(n,c7n,a4n,xwn(1)),U4(n,c7n,h4n,(qx(),!0)),U4(n,c7n,q8n,Jkn(rCt)),U4(n,c7n,W8n,aCt),U4(n,c7n,f4n,Jkn(sCt)),U4(n,c7n,g9n,Jkn(hCt)),U4(n,c7n,p4n,Jkn(lCt)),U4(n,c7n,d4n,Jkn(bCt)),U4(n,c7n,x4n,Jkn(wCt)),U4(n,c7n,g4n,Jkn(dCt)),U4(n,c7n,m4n,Jkn(fCt)),U4(n,c7n,w4n,Jkn(gCt)),U4(n,c7n,v4n,Jkn(vCt)),U4(n,c7n,t7n,Jkn(LCt)),U4(n,c7n,i7n,Jkn(MCt)),U4(n,c7n,k4n,Jkn(CCt)),U4(n,c7n,y4n,Jkn(OCt)),U4(n,c7n,M4n,Jkn(PCt)),U4(n,c7n,T4n,Jkn(SCt)),U4(n,c7n,j4n,ICt),U4(n,c7n,n7n,Jkn(kCt)),U4(n,c7n,e7n,Jkn(uCt)),U4(n,c7n,Z9n,Jkn(ACt)),U4(n,c7n,J9n,Jkn(iCt)),U4(n,c7n,Y9n,Jkn(oCt))}function MJn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(s=uG(uG(Y9(n.r,t),21),87),a=DCn(n,t),e=n.u.Hc((eNn(),lRt)),u=s.Kc();u.Ob();)if((o=uG(u.Pb(),117)).c&&!(o.c.d.c.length<=0)){switch(l=o.b.Mf(),(f=(h=o.c).i).b=(c=h.n,h.e.a+c.b+c.c),f.a=(r=h.n,h.e.b+r.d+r.a),t.g){case 1:o.a?(f.c=(l.a-f.b)/2,etn(h,(Ktn(),Ost))):a||e?(f.c=-f.b-n.s,etn(h,(Ktn(),Lst))):(f.c=l.a+n.s,etn(h,(Ktn(),Ast))),f.d=-f.a-n.t,eF(h,(Yen(),Rst));break;case 3:o.a?(f.c=(l.a-f.b)/2,etn(h,(Ktn(),Ost))):a||e?(f.c=-f.b-n.s,etn(h,(Ktn(),Lst))):(f.c=l.a+n.s,etn(h,(Ktn(),Ast))),f.d=l.b+n.t,eF(h,(Yen(),Fst));break;case 2:o.a?(i=n.v?f.a:uG(zq(h.d,0),187).Mf().b,f.d=(l.b-i)/2,eF(h,(Yen(),Kst))):a||e?(f.d=-f.a-n.t,eF(h,(Yen(),Rst))):(f.d=l.b+n.t,eF(h,(Yen(),Fst))),f.c=l.a+n.s,etn(h,(Ktn(),Ast));break;case 4:o.a?(i=n.v?f.a:uG(zq(h.d,0),187).Mf().b,f.d=(l.b-i)/2,eF(h,(Yen(),Kst))):a||e?(f.d=-f.a-n.t,eF(h,(Yen(),Rst))):(f.d=l.b+n.t,eF(h,(Yen(),Fst))),f.c=-f.b-n.s,etn(h,(Ktn(),Lst))}a=!1}}function TJn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(l=!1,f=!1,sN(uG(oIn(i,(jYn(),JMt)),101))){a=!1,o=!1;n:for(w=new Ww(i.j);w.a<w.c.c.length;)for(b=uG(N3(w),12),d=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(b),new Wd(b)])));hDn(d);)if(!oM(gK(oIn(uG(N9(d),12).i,gyt)))){if(b.j==(KQn(),yRt)){a=!0;break n}if(b.j==KRt){o=!0;break n}}l=o&&!a,f=a&&!o}if(l||f||0==i.b.c.length)p=!f;else{for(h=0,s=new Ww(i.b);s.a<s.c.c.length;)h+=(u=uG(N3(s),72)).n.b+u.o.b/2;p=(h/=i.b.c.length)>=i.o.b/2}p?(g=uG(oIn(i,(GYn(),Pmt)),15))?l?c=g:(r=uG(oIn(i,Ept),15))?c=g.gc()<=r.gc()?g:r:(c=new Zm,kfn(i,Ept,c)):(c=new Zm,kfn(i,Pmt,c)):(r=uG(oIn(i,(GYn(),Ept)),15))?f?c=r:(g=uG(oIn(i,Pmt),15))?c=r.gc()<=g.gc()?r:g:(c=new Zm,kfn(i,Pmt,c)):(c=new Zm,kfn(i,Ept,c)),c.Fc(n),kfn(n,(GYn(),Ppt),e),t.d==e?(u2(t,null),e.e.c.length+e.g.c.length==0&&o2(e,null),Nln(e)):(c2(t,null),e.e.c.length+e.g.c.length==0&&o2(e,null)),BY(t.a)}function jJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A;for(i.Ug("MinWidth layering",1),w=t.b,j=t.a,A=uG(oIn(t,(jYn(),mMt)),17).a,u=uG(oIn(t,vMt),17).a,n.b=uM(pK(oIn(t,dTt))),n.d=M0n,y=new Ww(j);y.a<y.c.c.length;)(v=uG(N3(y),10)).k==(zIn(),dbt)&&(P=v.o.b,n.d=e.Math.min(n.d,P));for(n.d=e.Math.max(1,n.d),E=j.c.length,n.c=Inn(YHt,W1n,28,E,15,1),n.f=Inn(YHt,W1n,28,E,15,1),n.e=Inn(eUt,I0n,28,E,15,1),h=0,n.a=0,M=new Ww(j);M.a<M.c.c.length;)(v=uG(N3(M),10)).p=h++,n.c[v.p]=xbn(qgn(v)),n.f[v.p]=xbn(Xgn(v)),n.e[v.p]=v.o.b/n.d,n.a+=n.e[v.p];for(n.b/=n.d,n.a/=E,T=LNn(j),f$(j,kJ(new Ug(n))),g=M0n,d=vZn,o=null,O=A,I=A,a=u,c=u,A<0&&(O=uG($Et.a.Id(),17).a,I=uG($Et.b.Id(),17).a),u<0&&(a=uG(NEt.a.Id(),17).a,c=uG(NEt.b.Id(),17).a),C=O;C<=I;C++)for(r=a;r<=c;r++)m=uM(pK((S=Nqn(n,C,r,j,T)).a)),p=(b=uG(S.b,15)).gc(),(m<g||m==g&&p<d)&&(g=m,d=p,o=b);for(l=o.Kc();l.Ob();){for(f=uG(l.Pb(),15),s=new bQ(t),k=f.Kc();k.Ob();)a2(v=uG(k.Pb(),10),s);mv(w.c,s)}_An(w),j.c.length=0,i.Vg()}function EJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C;if(i.Ug("Spline edge routing",1),0==t.b.c.length)return t.f.a=0,void i.Vg();m=uM(pK(oIn(t,(jYn(),STt)))),u=uM(pK(oIn(t,vTt))),o=uM(pK(oIn(t,gTt))),j=uG(oIn(t,Zyt),350)==(kbn(),fEt),T=uM(pK(oIn(t,nMt))),n.d=t,n.j.c.length=0,n.a.c.length=0,$V(n.k),f=UA((s=uG(zq(t.b,0),30)).a,(oFn(),LSt)),l=UA((d=uG(zq(t.b,t.b.c.length-1),30)).a,LSt),g=new Ww(t.b),p=null,C=0;do{for(qQn(n,p,v=g.a<g.c.c.length?uG(N3(g),30):null),AGn(n),P=0,k=C,b=!p||f&&p==s,w=!v||l&&v==d,(E=lT(yun(nY(JJ(new fX(null,new h3(n.i,16)),new va),new ka))))>0?(h=0,p&&(h+=u),h+=(E-1)*o,v&&(h+=u),j&&v&&(h=e.Math.max(h,GKn(v,o,m,T))),h<m&&!b&&!w&&(P=(m-h)/2,h=m),k+=h):!b&&!w&&(k+=m),v&&Vzn(v,k),M=new Ww(n.i);M.a<M.c.c.length;)(y=uG(N3(M),131)).a.c=C,y.a.b=k-C,y.F=P,y.p=!p;Ohn(n.a,n.i),C=k,v&&(C+=v.c.a),p=v,b=w}while(v);for(c=new Ww(n.j);c.a<c.c.c.length;)a=Oon(n,r=uG(N3(c),18)),kfn(r,(GYn(),ymt),a),S=rFn(n,r),kfn(r,Tmt,S);t.f.a=C,n.d=null,i.Vg()}function SJn(n,t){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(n.b=t,n.a=uG(oIn(t,(jYn(),cMt)),17).a,n.c=uG(oIn(t,oMt),17).a,0==n.c&&(n.c=vZn),g=new N4(t.b,0);g.b<g.d.gc();){for(MK(g.b<g.d.gc()),d=uG(g.d.Xb(g.c=g.b++),30),u=new Zm,l=-1,k=-1,v=new Ww(d.a);v.a<v.c.c.length;)m=uG(N3(v),10),x5((HB(),new Fz(ix(Ggn(m).a.Kc(),new h))))>=n.a&&(r=Rqn(n,m),l=e.Math.max(l,r.b),k=e.Math.max(k,r.d),kD(u,new WO(m,r)));for(T=new Zm,f=0;f<l;++f)GX(T,0,(MK(g.b>0),g.a.Xb(g.c=--g.b),pF(g,j=new bQ(n.b)),MK(g.b<g.d.gc()),g.d.Xb(g.c=g.b++),j));for(o=new Ww(u);o.a<o.c.c.length;)if(c=uG(N3(o),42),w=uG(c.b,580).a)for(b=new Ww(w);b.a<b.c.c.length;)Gjn(n,uG(N3(b),10),Nbt,T);for(i=new Zm,s=0;s<k;++s)kD(i,(pF(g,E=new bQ(n.b)),E));for(a=new Ww(u);a.a<a.c.c.length;)if(c=uG(N3(a),42),M=uG(c.b,580).c)for(y=new Ww(M);y.a<y.c.c.length;)Gjn(n,uG(N3(y),10),$bt,i)}for(p=new N4(t.b,0);p.b<p.d.gc();)MK(p.b<p.d.gc()),0==uG(p.d.Xb(p.c=p.b++),30).a.c.length&&LQ(p)}function PJn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;if(d=0!=n.i,m=!1,g=null,uN(n.e)){if((h=t.gc())>0){for(l=h<100?null:new cj(h),w=(s=new Hun(t)).g,g=Inn(YHt,W1n,28,h,15,1),i=0,v=new Drn(h),r=0;r<n.i;++r){b=o=n.g[r];n:for(p=0;p<2;++p){for(u=h;--u>=0;)if(null!=b?udn(b,w[u]):xA(b)===xA(w[u])){g.length<=i&&qGn(g,0,g=Inn(YHt,W1n,28,2*g.length,15,1),0,i),g[i++]=r,ttn(v,w[u]);break n}if(xA(b)===xA(o))break}}if(s=v,w=v.g,h=i,i>g.length&&qGn(g,0,g=Inn(YHt,W1n,28,i,15,1),0,i),i>0){for(m=!0,c=0;c<i;++c)l=V_(n,uG(b=w[c],76),l);for(a=i;--a>=0;)gjn(n,g[a]);if(i!=h){for(r=h;--r>=i;)gjn(s,r);qGn(g,0,g=Inn(YHt,W1n,28,i,15,1),0,i)}t=s}}}else for(t=cjn(n,t),r=n.i;--r>=0;)t.Hc(n.g[r])&&(gjn(n,r),m=!0);if(m){if(null!=g){for(f=1==(e=t.gc())?i2(n,4,t.Kc().Pb(),null,g[0],d):i2(n,6,t,g,g[0],d),l=e<100?null:new cj(e),r=t.Kc();r.Ob();)l=X_(n,uG(b=r.Pb(),76),l);l?(l.nj(f),l.oj()):Msn(n.e,f)}else{for(l=qF(t.gc()),r=t.Kc();r.Ob();)l=X_(n,uG(b=r.Pb(),76),l);l&&l.oj()}return!0}return!1}function CJn(n,t){var e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v;for((e=new qyn(t)).a||TUn(t),s=oBn(t),u=new K1,g=new BFn,d=new Ww(t.a);d.a<d.c.c.length;)for(r=new Fz(ix(Xgn(uG(N3(d),10)).a.Kc(),new h));hDn(r);)(i=uG(N9(r),18)).c.i.k!=(zIn(),lbt)&&i.d.i.k!=lbt||UNn(u,Dkn((f=LWn(n,i,s,g)).d),f.a);for(a=new Zm,v=uG(oIn(e.c,(GYn(),xpt)),21).Kc();v.Ob();){switch(m=uG(v.Pb(),64),w=g.c[m.g],b=g.b[m.g],o=g.a[m.g],c=null,p=null,m.g){case 4:c=new gY(n.d.a,w,s.b.a-n.d.a,b-w),p=new gY(n.d.a,w,o,b-w),hq(s,new MO(c.c+c.b,c.d)),hq(s,new MO(c.c+c.b,c.d+c.a));break;case 2:c=new gY(s.a.a,w,n.c.a-s.a.a,b-w),p=new gY(n.c.a-o,w,o,b-w),hq(s,new MO(c.c,c.d)),hq(s,new MO(c.c,c.d+c.a));break;case 1:c=new gY(w,n.d.b,b-w,s.b.b-n.d.b),p=new gY(w,n.d.b,b-w,o),hq(s,new MO(c.c,c.d+c.a)),hq(s,new MO(c.c+c.b,c.d+c.a));break;case 3:c=new gY(w,s.a.b,b-w,n.c.b-s.a.b),p=new gY(w,n.c.b-o,b-w,o),hq(s,new MO(c.c,c.d)),hq(s,new MO(c.c+c.b,c.d))}c&&((l=new vk).d=m,l.b=c,l.c=p,l.a=PZ(uG(Y9(u,Dkn(m)),21)),mv(a.c,l))}return Ohn(e.b,a),e.d=Bbn(bVn(s)),e}function IJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d;if(null==i.p[t.p]){u=!0,i.p[t.p]=0,o=t,d=i.o==(w0(),wSt)?T0n:M0n;do{c=n.b.e[o.p],a=o.c.a.c.length,i.o==wSt&&c>0||i.o==dSt&&c<a-1?(s=null,h=null,s=i.o==dSt?uG(zq(o.c.a,c+1),10):uG(zq(o.c.a,c-1),10),IJn(n,h=i.g[s.p],i),d=n.e.wg(d,t,o),i.j[t.p]==t&&(i.j[t.p]=i.j[h.p]),i.j[t.p]==i.j[h.p]?(w=y$(n.d,o,s),i.o==dSt?(r=uM(i.p[t.p]),l=uM(i.p[h.p])+uM(i.d[s.p])-s.d.d-w-o.d.a-o.o.b-uM(i.d[o.p]),u?(u=!1,i.p[t.p]=e.Math.min(l,d)):i.p[t.p]=e.Math.min(r,e.Math.min(l,d))):(r=uM(i.p[t.p]),l=uM(i.p[h.p])+uM(i.d[s.p])+s.o.b+s.d.a+w+o.d.d-uM(i.d[o.p]),u?(u=!1,i.p[t.p]=e.Math.max(l,d)):i.p[t.p]=e.Math.max(r,e.Math.max(l,d)))):(w=uM(pK(oIn(n.a,(jYn(),ETt)))),b=Ion(n,i.j[t.p]),f=Ion(n,i.j[h.p]),i.o==dSt?r3(b,f,uM(i.p[t.p])+uM(i.d[o.p])+o.o.b+o.d.a+w-(uM(i.p[h.p])+uM(i.d[s.p])-s.d.d)):r3(b,f,uM(i.p[t.p])+uM(i.d[o.p])-o.d.d-uM(i.p[h.p])-uM(i.d[s.p])-s.o.b-s.d.a-w))):d=n.e.wg(d,t,o),o=i.a[o.p]}while(o!=t);Wv(n.e,t)}}function OJn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T;if((e=uM(pK(oIn(n.a.j,(jYn(),Lyt)))))<-1||!n.a.i||L_(uG(oIn(n.a.o,JMt),101))||Dgn(n.a.o,(KQn(),kRt)).gc()<2&&Dgn(n.a.o,_Rt).gc()<2)return!0;if(n.a.c.kg())return!1;for(k=0,v=0,m=new Zm,u=0,s=(o=n.a.e).length;u<s;++u){for(b=0,d=(l=o[u]).length;b<d;++b)if((f=l[b]).k!=(zIn(),gbt)){for(i=n.b[f.c.p][f.p],f.k==lbt?(i.b=1,uG(oIn(f,(GYn(),rmt)),12).j==(KQn(),kRt)&&(v+=i.a)):(T=Dgn(f,(KQn(),_Rt))).dc()||!_$(T,new Lc)?i.c=1:((r=Dgn(f,kRt)).dc()||!_$(r,new Ac))&&(k+=i.a),a=new Fz(ix(Xgn(f).a.Kc(),new h));hDn(a);)c=uG(N9(a),18),k+=i.c,v+=i.b,rtn(n,i,c.d.i);for(M=new Fz(new YD((g=zcn(Uhn(cT(vat,1),EZn,20,0,[Dgn(f,(KQn(),yRt)),Dgn(f,KRt)]))).a.length,g.a));hDn(M);)y=uG(N9(M),12),(p=uG(oIn(y,(GYn(),lmt)),10))&&(k+=i.c,v+=i.b,rtn(n,i,p))}else mv(m.c,f);for(w=new Ww(m);w.a<w.c.c.length;)for(f=uG(N3(w),10),i=n.b[f.c.p][f.p],a=new Fz(ix(Xgn(f).a.Kc(),new h));hDn(a);)c=uG(N9(a),18),k+=i.c,v+=i.b,rtn(n,i,c.d.i);m.c.length=0}return(0==(t=k+v)?M0n:(k-v)/t)>=e}function AJn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(f=t,h=new K1,l=new K1,c=p6(f,yet),IOn((i=new SY(n,e,h,l)).a,i.b,i.c,i.d,c),d=(h.i||(h.i=new RD(h,h.c))).Kc();d.Ob();)for(w=uG(d.Pb(),166),o=uG(Y9(h,w),21).Kc();o.Ob();){if(a=o.Pb(),!(b=uG(dcn(n.d,a),166)))throw r=k6(f,Iet),hv(new SM(Det+a+xet+r+$et));!w.e&&(w.e=new f_(oFt,w,10,9)),ttn(w.e,b)}for(p=(l.i||(l.i=new RD(l,l.c))).Kc();p.Ob();)for(g=uG(p.Pb(),166),s=uG(Y9(l,g),21).Kc();s.Ob();){if(u=s.Pb(),!(b=uG(dcn(n.d,u),166)))throw r=k6(f,Iet),hv(new SM(Det+u+xet+r+$et));!g.g&&(g.g=new f_(oFt,g,9,10)),ttn(g.g,b)}!e.b&&(e.b=new f_(cFt,e,4,7)),0!=e.b.i&&(!e.c&&(e.c=new f_(cFt,e,5,8)),0!=e.c.i)&&(!e.b&&(e.b=new f_(cFt,e,4,7)),e.b.i<=1&&(!e.c&&(e.c=new f_(cFt,e,5,8)),e.c.i<=1))&&1==(!e.a&&(e.a=new fV(oFt,e,6,6)),e.a).i&&(hMn(m=uG(zrn((!e.a&&(e.a=new fV(oFt,e,6,6)),e.a),0),166))||fMn(m)||(Xan(m,uG(zrn((!e.b&&(e.b=new f_(cFt,e,4,7)),e.b),0),84)),zan(m,uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84))))}function LJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(k=0,y=(v=n.a).length;k<y;++k){for(m=v[k],s=vZn,h=vZn,w=new Ww(m.e);w.a<w.c.c.length;)(a=(l=uG(N3(w),10)).c?Ten(l.c.a,l,0):-1)>0?(f=uG(zq(l.c.a,a-1),10),j=y$(n.b,l,f),g=l.n.b-l.d.d-(f.n.b+f.o.b+f.d.a+j)):g=l.n.b-l.d.d,s=e.Math.min(g,s),a<l.c.a.c.length-1?(f=uG(zq(l.c.a,a+1),10),j=y$(n.b,l,f),p=f.n.b-f.d.d-(l.n.b+l.o.b+l.d.a+j)):p=2*l.n.b,h=e.Math.min(p,h);for(u=vZn,c=!1,S=new Ww((r=uG(zq(m.e,0),10)).j);S.a<S.c.c.length;)for(E=uG(N3(S),12),d=r.n.b+E.n.b+E.a.b,i=new Ww(E.e);i.a<i.c.c.length;)t=(M=uG(N3(i),18).c).i.n.b+M.n.b+M.a.b-d,e.Math.abs(t)<e.Math.abs(u)&&e.Math.abs(t)<(t<0?s:h)&&(u=t,c=!0);for(T=new Ww((o=uG(zq(m.e,m.e.c.length-1),10)).j);T.a<T.c.c.length;)for(M=uG(N3(T),12),d=o.n.b+M.n.b+M.a.b,i=new Ww(M.g);i.a<i.c.c.length;)t=(E=uG(N3(i),18).d).i.n.b+E.n.b+E.a.b-d,e.Math.abs(t)<e.Math.abs(u)&&e.Math.abs(t)<(t<0?s:h)&&(u=t,c=!0);if(c&&0!=u)for(b=new Ww(m.e);b.a<b.c.c.length;)(l=uG(N3(b),10)).n.b+=u}}function NJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(r=new Zm,c=vZn,a=vZn,o=vZn,i)for(c=n.f.a,d=new Ww(t.j);d.a<d.c.c.length;)for(s=new Ww(uG(N3(d),12).g);s.a<s.c.c.length;)0!=(u=uG(N3(s),18)).a.b&&((f=uG(gR(u.a),8)).a<c&&(a=c-f.a,o=vZn,r.c.length=0,c=f.a),f.a<=c&&(mv(r.c,u),u.a.b>1&&(o=e.Math.min(o,e.Math.abs(uG(hyn(u.a,1),8).b-f.b)))));else for(d=new Ww(t.j);d.a<d.c.c.length;)for(s=new Ww(uG(N3(d),12).e);s.a<s.c.c.length;)0!=(u=uG(N3(s),18)).a.b&&((b=uG(pR(u.a),8)).a>c&&(a=b.a-c,o=vZn,r.c.length=0,c=b.a),b.a>=c&&(mv(r.c,u),u.a.b>1&&(o=e.Math.min(o,e.Math.abs(uG(hyn(u.a,u.a.b-2),8).b-b.b)))));if(0!=r.c.length&&a>t.o.a/2&&o>t.o.b/2){for(o2(w=new lOn,t),NLn(w,(KQn(),yRt)),w.n.a=t.o.a/2,o2(g=new lOn,t),NLn(g,KRt),g.n.a=t.o.a/2,g.n.b=t.o.b,s=new Ww(r);s.a<s.c.c.length;)u=uG(N3(s),18),i?(h=uG(tG(u.a),8),(0==u.a.b?n3(u.d):uG(gR(u.a),8)).b>=h.b?c2(u,g):c2(u,w)):(h=uG(eG(u.a),8),(0==u.a.b?n3(u.c):uG(pR(u.a),8)).b>=h.b?u2(u,g):u2(u,w)),(l=uG(oIn(u,(jYn(),bMt)),75))&&Wpn(l,h,!0);t.n.a=c-t.o.a/2}}function $Jn(n,t,i){var r,c,a,o,u,s,h,f,l;for(u=Fkn(n.b,0);u.b!=u.d.c;)if(!m_((o=uG(I6(u),39)).c,H9n))for(h=xDn(o,n),t==(xdn(),JDt)||t==YDt?f$(h,new co):f$(h,new ao),s=h.c.length,r=0;r<s;r++)m_((u3(r,h.c.length),uG(h.c[r],65)).c.c,"n11"),oM(gK(oIn(o,(OQn(),MPt))))&&!uln((u3(r,h.c.length),uG(h.c[r],65)),n)||(c=1==s?.5:(r+1)/(s+1),t==JDt?(a=uM(pK(oIn(o,DPt))),l=o.e.b+o.f.b*c,aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(e.Math.min(a,o.e.a-i),l)),aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(o.e.a,l))):t==YDt?(a=uM(pK(oIn(o,$Pt)))+i,l=o.e.b+o.f.b*c,aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(a,l)),aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(o.e.a+o.f.a,l))):t==nxt?(a=uM(pK(oIn(o,DPt))),f=o.e.a+o.f.a*c,aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(f,e.Math.min(o.e.b-i,a))),aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(f,o.e.b))):(a=uM(pK(oIn(o,$Pt)))+i,f=o.e.a+o.f.a*c,aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(f,a)),aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(f,o.e.b+o.f.b))))}function DJn(n,t,e,i,r,c,a,o,u){var s,h,f,l,b,w,d;switch(b=e,Hb(h=new gMn(u),(zIn(),lbt)),kfn(h,(GYn(),_pt),a),kfn(h,(jYn(),JMt),($Pn(),cRt)),d=uM(pK(n.of(QMt))),kfn(h,QMt,d),o2(f=new lOn,h),t!=uRt&&t!=sRt||(b=i>=0?Ipn(o):Gdn(Ipn(o)),n.qf(eTt,b)),s=new sj,l=!1,n.pf(WMt)?(_R(s,uG(n.of(WMt),8)),l=!0):mD(s,a.a/2,a.b/2),b.g){case 4:kfn(h,gMt,(Gpn(),Imt)),kfn(h,Npt,(Pfn(),ygt)),h.o.b=a.b,d<0&&(h.o.a=-d),NLn(f,(KQn(),kRt)),l||(s.a=a.a),s.a-=a.a;break;case 2:kfn(h,gMt,(Gpn(),Amt)),kfn(h,Npt,(Pfn(),vgt)),h.o.b=a.b,d<0&&(h.o.a=-d),NLn(f,(KQn(),_Rt)),l||(s.a=0);break;case 1:kfn(h,Xpt,(Zen(),ppt)),h.o.a=a.a,d<0&&(h.o.b=-d),NLn(f,(KQn(),KRt)),l||(s.b=a.b),s.b-=a.b;break;case 3:kfn(h,Xpt,(Zen(),dpt)),h.o.a=a.a,d<0&&(h.o.b=-d),NLn(f,(KQn(),yRt)),l||(s.b=0)}if(_R(f.n,s),kfn(h,WMt,s),t==rRt||t==aRt||t==cRt){if(w=0,t==rRt&&n.pf(YMt))switch(b.g){case 1:case 2:w=uG(n.of(YMt),17).a;break;case 3:case 4:w=-uG(n.of(YMt),17).a}else switch(b.g){case 4:case 2:w=c.b,t==aRt&&(w/=r.b);break;case 1:case 3:w=c.a,t==aRt&&(w/=r.a)}kfn(h,bmt,w)}return kfn(h,Fpt,b),h}function xJn(){function n(n){var t=this;this.dispatch=function(t){var e=t.data;switch(e.cmd){case"algorithms":var i=rmn((hZ(),new qw(new Fw(NFt.b))));n.postMessage({id:e.id,data:i});break;case"categories":var r=rmn((hZ(),new qw(new Fw(NFt.c))));n.postMessage({id:e.id,data:r});break;case"options":var c=rmn((hZ(),new qw(new Fw(NFt.d))));n.postMessage({id:e.id,data:c});break;case"register":OVn(e.algorithms),n.postMessage({id:e.id});break;case"layout":Vqn(e.graph,e.layoutOptions||{},e.options||{}),n.postMessage({id:e.id,data:e.graph})}},this.saveDispatch=function(e){try{t.dispatch(e)}catch(i){n.postMessage({id:e.data.id,error:i})}}}function e(t){var e=this;this.dispatcher=new n({postMessage:function(n){e.onmessage({data:n})}}),this.postMessage=function(n){setTimeout((function(){e.dispatcher.saveDispatch({data:n})}),0)}}if(mj(),typeof document===r2n&&typeof self!==r2n){var r=new n(self);self.onmessage=r.saveDispatch}else typeof t!==r2n&&t.exports&&(Object.defineProperty(i,"__esModule",{value:!0}),t.exports={default:e,Worker:e})}function RJn(n,t,e){var i,r,c,a,o,u,s,h,f,l;for(zsn(h=new gMn(e),t),kfn(h,(GYn(),rmt),t),h.o.a=t.g,h.o.b=t.f,h.n.a=t.i,h.n.b=t.j,kD(e.a,h),vJ(n.a,t,h),(0!=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i||oM(gK(zDn(t,(jYn(),sMt)))))&&kfn(h,Cpt,(qx(),!0)),s=uG(oIn(e,Hpt),21),(f=uG(oIn(h,(jYn(),JMt)),101))==($Pn(),sRt)?kfn(h,JMt,uRt):f!=uRt&&s.Fc((r_n(),rpt)),l=0,i=uG(oIn(e,Byt),88),u=new DD((!t.c&&(t.c=new fV(wFt,t,9,9)),t.c));u.e!=u.i.gc();)o=uG(Zkn(u),123),(xA(zDn(r=R0(t),Syt))!==xA((yvn(),Fjt))||xA(zDn(r,Fyt))===xA((kvn(),lgt))||xA(zDn(r,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(r,Cyt)))||xA(zDn(r,kyt))!==xA((Uvn(),tbt))||xA(zDn(r,yMt))===xA((THn(),Pjt))||xA(zDn(r,yMt))===xA((THn(),Cjt))||xA(zDn(r,MMt))===xA((MKn(),JTt))||xA(zDn(r,MMt))===xA((MKn(),ZTt)))&&!oM(gK(zDn(t,jyt)))&&Myn(o,imt,xwn(l++)),oM(gK(zDn(o,FMt)))||mQn(n,o,h,s,i,f);for(a=new DD((!t.n&&(t.n=new fV(lFt,t,1,7)),t.n));a.e!=a.i.gc();)!oM(gK(zDn(c=uG(Zkn(a),135),FMt)))&&c.a&&kD(h.b,own(c));return oM(gK(oIn(h,gyt)))&&s.Fc((r_n(),Zgt)),oM(gK(oIn(h,uMt)))&&(s.Fc((r_n(),ipt)),s.Fc(ept),kfn(h,JMt,uRt)),h}function KJn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A;for(g=0,P=0,h=new Ww(n.b);h.a<h.c.c.length;)(s=uG(N3(h),163)).c&&IWn(s.c),g=e.Math.max(g,EX(s)),P+=EX(s)*jX(s);for(p=P/n.b.c.length,S=WEn(n.b,p),P+=n.b.c.length*S,g=e.Math.max(g,e.Math.sqrt(P*o))+i.b,O=i.b,A=i.d,w=0,l=i.b+i.c,aq(E=new lS,xwn(0)),T=new lS,f=new N4(n.b,0),d=null,u=new Zm;f.b<f.d.gc();)MK(f.b<f.d.gc()),I=EX(s=uG(f.d.Xb(f.c=f.b++),163)),b=jX(s),O+I>g&&(a&&(cL(T,w),cL(E,xwn(f.b-1)),kD(n.d,d),u.c.length=0),O=i.b,A+=w+t,w=0,l=e.Math.max(l,i.b+i.c+I)),mv(u.c,s),uyn(s,O,A),l=e.Math.max(l,O+I+i.c),w=e.Math.max(w,b),O+=I+t,d=s;if(Ohn(n.a,u),kD(n.d,uG(zq(u,u.c.length-1),163)),l=e.Math.max(l,r),(C=A+w+i.a)<c&&(w+=c-C,C=c),a)for(O=i.b,f=new N4(n.b,0),cL(E,xwn(n.b.c.length)),v=uG(I6(j=Fkn(E,0)),17).a,cL(T,w),M=Fkn(T,0),y=0;f.b<f.d.gc();)f.b==v&&(O=i.b,y=uM(pK(I6(M))),v=uG(I6(j),17).a),MK(f.b<f.d.gc()),gvn(s=uG(f.d.Xb(f.c=f.b++),163),y),f.b==v&&(m=l-O-i.c,k=EX(s),pvn(s,m),bgn(s,(m-k)/2,0)),O+=EX(s)+t;return new MO(l,C)}function FJn(n){n.N||(n.N=!0,n.b=Nsn(n,0),Von(n.b,0),Von(n.b,1),Von(n.b,2),n.bb=Nsn(n,1),Von(n.bb,0),Von(n.bb,1),n.fb=Nsn(n,2),Von(n.fb,3),Von(n.fb,4),Won(n.fb,5),n.qb=Nsn(n,3),Von(n.qb,0),Won(n.qb,1),Won(n.qb,2),Von(n.qb,3),Von(n.qb,4),Won(n.qb,5),Von(n.qb,6),n.a=$sn(n,4),n.c=$sn(n,5),n.d=$sn(n,6),n.e=$sn(n,7),n.f=$sn(n,8),n.g=$sn(n,9),n.i=$sn(n,10),n.j=$sn(n,11),n.k=$sn(n,12),n.n=$sn(n,13),n.o=$sn(n,14),n.p=$sn(n,15),n.q=$sn(n,16),n.s=$sn(n,17),n.r=$sn(n,18),n.t=$sn(n,19),n.u=$sn(n,20),n.v=$sn(n,21),n.w=$sn(n,22),n.B=$sn(n,23),n.A=$sn(n,24),n.C=$sn(n,25),n.D=$sn(n,26),n.F=$sn(n,27),n.G=$sn(n,28),n.H=$sn(n,29),n.J=$sn(n,30),n.I=$sn(n,31),n.K=$sn(n,32),n.M=$sn(n,33),n.L=$sn(n,34),n.P=$sn(n,35),n.Q=$sn(n,36),n.R=$sn(n,37),n.S=$sn(n,38),n.T=$sn(n,39),n.U=$sn(n,40),n.V=$sn(n,41),n.X=$sn(n,42),n.W=$sn(n,43),n.Y=$sn(n,44),n.Z=$sn(n,45),n.$=$sn(n,46),n._=$sn(n,47),n.ab=$sn(n,48),n.cb=$sn(n,49),n.db=$sn(n,50),n.eb=$sn(n,51),n.gb=$sn(n,52),n.hb=$sn(n,53),n.ib=$sn(n,54),n.jb=$sn(n,55),n.kb=$sn(n,56),n.lb=$sn(n,57),n.mb=$sn(n,58),n.nb=$sn(n,59),n.ob=$sn(n,60),n.pb=$sn(n,61))}function _Jn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(v=0,0==t.f.a)for(p=new Ww(n);p.a<p.c.c.length;)d=uG(N3(p),10),v=e.Math.max(v,d.n.a+d.o.a+d.d.c);else v=t.f.a-t.c.a;for(v-=t.c.a,g=new Ww(n);g.a<g.c.c.length;){switch(pv((d=uG(N3(g),10)).n,v-d.o.a),NG(d.f),$Tn(d),(d.q?d.q:(hZ(),hZ(),Vot))._b((jYn(),rTt))&&pv(uG(oIn(d,rTt),8),v-d.o.a),uG(oIn(d,byt),255).g){case 1:kfn(d,byt,(nMn(),LNt));break;case 2:kfn(d,byt,(nMn(),ANt))}for(m=d.o,y=new Ww(d.j);y.a<y.c.c.length;){for(pv((k=uG(N3(y),12)).n,m.a-k.o.a),pv(k.a,k.o.a),NLn(k,jun(k.j)),(o=uG(oIn(k,YMt),17))&&kfn(k,YMt,xwn(-o.a)),a=new Ww(k.g);a.a<a.c.c.length;){for(r=Fkn((c=uG(N3(a),18)).a,0);r.b!=r.d.c;)(i=uG(I6(r),8)).a=v-i.a;if(h=uG(oIn(c,bMt),75))for(s=Fkn(h,0);s.b!=s.d.c;)(u=uG(I6(s),8)).a=v-u.a;for(b=new Ww(c.b);b.a<b.c.c.length;)pv((f=uG(N3(b),72)).n,v-f.o.a)}for(w=new Ww(k.f);w.a<w.c.c.length;)pv((f=uG(N3(w),72)).n,k.o.a-f.o.a)}for(d.k==(zIn(),lbt)&&(kfn(d,(GYn(),Fpt),jun(uG(oIn(d,Fpt),64))),DIn(d)),l=new Ww(d.b);l.a<l.c.c.length;)$Tn(f=uG(N3(l),72)),pv(f.n,m.a-f.o.a)}}function BJn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(v=0,0==t.f.b)for(p=new Ww(n);p.a<p.c.c.length;)d=uG(N3(p),10),v=e.Math.max(v,d.n.b+d.o.b+d.d.a);else v=t.f.b-t.c.b;for(v-=t.c.b,g=new Ww(n);g.a<g.c.c.length;){switch(gv((d=uG(N3(g),10)).n,v-d.o.b),$G(d.f),DTn(d),(d.q?d.q:(hZ(),hZ(),Vot))._b((jYn(),rTt))&&gv(uG(oIn(d,rTt),8),v-d.o.b),uG(oIn(d,byt),255).g){case 3:kfn(d,byt,(nMn(),INt));break;case 4:kfn(d,byt,(nMn(),NNt))}for(m=d.o,y=new Ww(d.j);y.a<y.c.c.length;){for(gv((k=uG(N3(y),12)).n,m.b-k.o.b),gv(k.a,k.o.b),NLn(k,Eun(k.j)),(o=uG(oIn(k,YMt),17))&&kfn(k,YMt,xwn(-o.a)),a=new Ww(k.g);a.a<a.c.c.length;){for(r=Fkn((c=uG(N3(a),18)).a,0);r.b!=r.d.c;)(i=uG(I6(r),8)).b=v-i.b;if(h=uG(oIn(c,bMt),75))for(s=Fkn(h,0);s.b!=s.d.c;)(u=uG(I6(s),8)).b=v-u.b;for(b=new Ww(c.b);b.a<b.c.c.length;)gv((f=uG(N3(b),72)).n,v-f.o.b)}for(w=new Ww(k.f);w.a<w.c.c.length;)gv((f=uG(N3(w),72)).n,k.o.b-f.o.b)}for(d.k==(zIn(),lbt)&&(kfn(d,(GYn(),Fpt),Eun(uG(oIn(d,Fpt),64))),Fdn(d)),l=new Ww(d.b);l.a<l.c.c.length;)DTn(f=uG(N3(l),72)),gv(f.n,m.b-f.o.b)}}function HJn(n,t){var e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I;for(m=new N4(n.b,0),d=0,s=uG((f=t.Kc()).Pb(),17).a,y=0,e=new ek,T=new XL;m.b<m.d.gc();){for(MK(m.b<m.d.gc()),k=new Ww(uG(m.d.Xb(m.c=m.b++),30).a);k.a<k.c.c.length;){for(w=new Fz(ix(Xgn(v=uG(N3(k),10)).a.Kc(),new h));hDn(w);)l=uG(N9(w),18),T.a.zc(l,T);for(b=new Fz(ix(qgn(v).a.Kc(),new h));hDn(b);)l=uG(N9(b),18),T.a.Bc(l)}if(d+1==s){for(pF(m,r=new bQ(n)),pF(m,c=new bQ(n)),E=T.a.ec().Kc();E.Ob();)j=uG(E.Pb(),18),e.a._b(j)||(++y,e.a.zc(j,e)),kfn(a=new gMn(n),(jYn(),JMt),($Pn(),oRt)),a2(a,r),Hb(a,(zIn(),fbt)),o2(g=new lOn,a),NLn(g,(KQn(),_Rt)),o2(S=new lOn,a),NLn(S,kRt),kfn(i=new gMn(n),JMt,oRt),a2(i,c),Hb(i,fbt),o2(p=new lOn,i),NLn(p,_Rt),o2(P=new lOn,i),NLn(P,kRt),c2(M=new UZ,j.c),u2(M,g),kfn(M,(GYn(),imt),uG(oIn(j,imt),17)),c2(I=new UZ,S),u2(I,p),kfn(I,imt,uG(oIn(j,imt),17)),c2(j,P),o=new O5(a,i,M,I,j),kfn(a,Spt,o),kfn(i,Spt,o),(C=M.c.i).k==fbt&&((u=uG(oIn(C,Spt),313)).d=o,o.g=u);if(!f.Ob())break;s=uG(f.Pb(),17).a}++d}return xwn(y)}function UJn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g;for(d=new Zm,l=new Ww(n.d.b);l.a<l.c.c.length;)for(w=new Ww(uG(N3(l),30).a);w.a<w.c.c.length;){for(b=uG(N3(w),10),r=uG(cQ(n.f,b),60),u=new Fz(ix(Xgn(b).a.Kc(),new h));hDn(u);)if(s=!0,f=null,(i=Fkn((a=uG(N9(u),18)).a,0)).b!=i.d.c){for(t=uG(I6(i),8),e=null,a.c.j==(KQn(),yRt)&&((g=new Hqn(t,new MO(t.a,r.d.d),r,a)).f.a=!0,g.a=a.c,mv(d.c,g)),a.c.j==KRt&&((g=new Hqn(t,new MO(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.c,mv(d.c,g));i.b!=i.d.c;)e=uG(I6(i),8),gcn(t.b,e.b)||(f=new Hqn(t,e,null,a),mv(d.c,f),s&&(s=!1,e.b<r.d.d?f.f.a=!0:e.b>r.d.d+r.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))),i.b!=i.d.c&&(t=e);f&&(c=uG(cQ(n.f,a.d.i),60),t.b<c.d.d?f.f.a=!0:t.b>c.d.d+c.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))}for(o=new Fz(ix(qgn(b).a.Kc(),new h));hDn(o);)0!=(a=uG(N9(o),18)).a.b&&(t=uG(pR(a.a),8),a.d.j==(KQn(),yRt)&&((g=new Hqn(t,new MO(t.a,r.d.d),r,a)).f.a=!0,g.a=a.d,mv(d.c,g)),a.d.j==KRt&&((g=new Hqn(t,new MO(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.d,mv(d.c,g)))}return d}function GJn(n,t,e){var i,r,c,a,o,u,s,h,f,l;for(u=new Zm,f=t.length,a=Ffn(e),s=0;s<f;++s){switch(c=(r=khn(i=Ndn(a,(Knn(s,h=cx(t,$Cn(61),s),t.length),t.substr(s,h-s))))).jk().wi(),VJ(t,++h)){case 39:o=aR(t,39,++h),kD(u,new TA(i,LY((Knn(h,o,t.length),t.substr(h,o-h)),c,r))),s=o+1;break;case 34:o=aR(t,34,++h),kD(u,new TA(i,LY((Knn(h,o,t.length),t.substr(h,o-h)),c,r))),s=o+1;break;case 91:kD(u,new TA(i,l=new Zm));n:for(;;){switch(VJ(t,++h)){case 39:o=aR(t,39,++h),kD(l,LY((Knn(h,o,t.length),t.substr(h,o-h)),c,r)),h=o+1;break;case 34:o=aR(t,34,++h),kD(l,LY((Knn(h,o,t.length),t.substr(h,o-h)),c,r)),h=o+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw hv(new Ky(Xtt));l.c.push(null),h+=3}if(!(h<f))break;switch(s3(h,t.length),t.charCodeAt(h)){case 44:break;case 93:break n;default:throw hv(new Ky("Expecting , or ]"))}}s=h+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw hv(new Ky(Xtt));kD(u,new TA(i,null)),s=h+3}if(!(s<f))break;if(s3(s,t.length),44!=t.charCodeAt(s))throw hv(new Ky("Expecting ,"))}return VFn(n,u,e)}function qJn(n){var t,e,i,r;switch(r=null,n.c){case 6:return n.Em();case 13:return n.Fm();case 23:return n.wm();case 22:return n.Bm();case 18:return n.ym();case 8:EYn(n),QYn(),r=IHt;break;case 9:return n.em(!0);case 19:return n.fm();case 10:switch(n.a){case 100:case 68:case 119:case 87:case 115:case 83:return r=n.dm(n.a),EYn(n),r;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:(t=n.cm())<P0n?(QYn(),QYn(),r=new IX(0,t)):r=mz(Ogn(t));break;case 99:return n.om();case 67:return n.jm();case 105:return n.rm();case 73:return n.km();case 103:return n.pm();case 88:return n.lm();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n.gm();case 80:case 112:if(!(r=PNn(n,n.a)))throw hv(new CM(rZn((t$(),git))));break;default:r=UG(n.a)}EYn(n);break;case 0:if(93==n.a||123==n.a||125==n.a)throw hv(new CM(rZn((t$(),dit))));r=UG(n.a),e=n.a,EYn(n),(64512&e)==C0n&&0==n.c&&56320==(64512&n.a)&&((i=Inn(JHt,N1n,28,2,15,1))[0]=e&D1n,i[1]=n.a&D1n,r=EV(mz(mvn(i,0,i.length)),0),EYn(n));break;default:throw hv(new CM(rZn((t$(),dit))))}return r}function XJn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P;for(E=new lS,M=new lS,g=-1,u=new Ww(n);u.a<u.c.c.length;){for((a=uG(N3(u),131)).s=g--,h=0,v=0,c=new Ww(a.t);c.a<c.c.c.length;)v+=(i=uG(N3(c),274)).c;for(r=new Ww(a.i);r.a<r.c.c.length;)h+=(i=uG(N3(r),274)).c;a.n=h,a.u=v,0==v?s8(M,a,M.c.b,M.c):0==h&&s8(E,a,E.c.b,E.c)}for(P=g8(n),d=(f=n.c.length)+1,p=f-1,b=new Zm;0!=P.a.gc();){for(;0!=M.b;)MK(0!=M.b),y=uG(Lrn(M,M.a.a),131),P.a.Bc(y),y.s=p--,Vxn(y,E,M);for(;0!=E.b;)MK(0!=E.b),T=uG(Lrn(E,E.a.a),131),P.a.Bc(T),T.s=d++,Vxn(T,E,M);for(w=j1n,s=P.a.ec().Kc();s.Ob();)(m=(a=uG(s.Pb(),131)).u-a.n)>=w&&(m>w&&(b.c.length=0,w=m),mv(b.c,a));0!=b.c.length&&(l=uG(zq(b,iMn(t,b.c.length)),131),P.a.Bc(l),l.s=d++,Vxn(l,E,M),b.c.length=0)}for(k=n.c.length+1,o=new Ww(n);o.a<o.c.c.length;)(a=uG(N3(o),131)).s<f&&(a.s+=k);for(j=new Ww(n);j.a<j.c.c.length;)for(e=new N4((T=uG(N3(j),131)).t,0);e.b<e.d.gc();)MK(e.b<e.d.gc()),S=(i=uG(e.d.Xb(e.c=e.b++),274)).b,T.s>S.s&&(LQ(e),men(S.i,i),i.c>0&&(i.a=S,kD(S.t,i),i.b=T,kD(T.i,i)))}function zJn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(w=new R7(t.b),m=new R7(t.b),l=new R7(t.b),M=new R7(t.b),d=new R7(t.b),y=Fkn(t,0);y.b!=y.d.c;)for(o=new Ww((v=uG(I6(y),12)).g);o.a<o.c.c.length;)if((c=uG(N3(o),18)).c.i==c.d.i){if(v.j==c.d.j){mv(M.c,c);continue}if(v.j==(KQn(),yRt)&&c.d.j==KRt){mv(d.c,c);continue}}for(u=new Ww(d);u.a<u.c.c.length;)KUn(n,c=uG(N3(u),18),e,i,(KQn(),kRt));for(a=new Ww(M);a.a<a.c.c.length;)c=uG(N3(a),18),Hb(T=new gMn(n),(zIn(),gbt)),kfn(T,(jYn(),JMt),($Pn(),cRt)),kfn(T,(GYn(),rmt),c),kfn(j=new lOn,rmt,c.d),NLn(j,(KQn(),_Rt)),o2(j,T),kfn(E=new lOn,rmt,c.c),NLn(E,kRt),o2(E,T),kfn(c.c,lmt,T),kfn(c.d,lmt,T),c2(c,null),u2(c,null),mv(e.c,T),kfn(T,Opt,xwn(2));for(k=Fkn(t,0);k.b!=k.d.c;)s=(v=uG(I6(k),12)).e.c.length>0,g=v.g.c.length>0,s&&g?mv(l.c,v):s?mv(w.c,v):g&&mv(m.c,v);for(b=new Ww(w);b.a<b.c.c.length;)kD(r,Xqn(n,uG(N3(b),12),null,e));for(p=new Ww(m);p.a<p.c.c.length;)kD(r,Xqn(n,null,uG(N3(p),12),e));for(f=new Ww(l);f.a<f.c.c.length;)kD(r,Xqn(n,h=uG(N3(f),12),h,e))}function VJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(b=M0n,w=M0n,f=0,l=0,s=new Zm,u=new DD((!n.b&&(n.b=new fV(aFt,n,12,3)),n.b));u.e!=u.i.gc();)a=uG(Zkn(u),74),s=zcn(Uhn(cT(vat,1),EZn,20,0,[s,(!a.n&&(a.n=new fV(lFt,a,1,7)),a.n)]));for(k=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n),(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a),s])));hDn(k);)v=uG(N9(k),422),h=uG(v.of((XYn(),$$t)),140),b>v.nh()-h.b&&(b=v.nh()-h.b),w>v.oh()-h.d&&(w=v.oh()-h.d),f<v.nh()+v.mh()+h.c&&(f=v.nh()+v.mh()+h.c),l<v.oh()+v.lh()+h.a&&(l=v.oh()+v.lh()+h.a);for(o=new DD((!n.b&&(n.b=new fV(aFt,n,12,3)),n.b));o.e!=o.i.gc();)for(m=new DD((!(a=uG(Zkn(o),74)).a&&(a.a=new fV(oFt,a,6,6)),a.a));m.e!=m.i.gc();)for(d=(p=uG(Zkn(m),166)).j,r=p.b,g=p.k,c=p.c,b=e.Math.min(b,d),b=e.Math.min(b,r),f=e.Math.max(f,d),f=e.Math.max(f,r),w=e.Math.min(w,g),w=e.Math.min(w,c),l=e.Math.max(l,g),l=e.Math.max(l,c),i=new DD((!p.a&&(p.a=new MD(eFt,p,5)),p.a));i.e!=i.i.gc();)t=uG(Zkn(i),377),b=e.Math.min(b,t.a),f=e.Math.max(f,t.a),w=e.Math.min(w,t.b),l=e.Math.max(l,t.b);Myn(n,(XYn(),h$t),f-b),Myn(n,s$t,l-w)}function WJn(n,t,e){var i,r,c,a,o,u,s;if(e.Ug("Network simplex node placement",1),n.e=t,n.n=uG(oIn(t,(GYn(),kmt)),312),Pzn(n),vPn(n),kS(sin(new fX(null,new h3(n.e.b,16)),new _c),new hp(n)),kS(JJ(sin(JJ(sin(new fX(null,new h3(n.e.b,16)),new Zc),new na),new ta),new ea),new sp(n)),oM(gK(oIn(n.e,(jYn(),OMt))))&&((c=e.eh(1)).Ug("Straight Edges Pre-Processing",1),HWn(n),c.Vg()),uMn(n.f),r=uG(oIn(t,OTt),17).a*n.f.a.c.length,YHn(kT(yT(_B(n.f),r),!1),e.eh(1)),0!=n.d.a.gc()){for((c=e.eh(1)).Ug("Flexible Where Space Processing",1),a=uG(yx(Qz(YJ(new fX(null,new h3(n.f.a,16)),new Bc),new $c)),17).a,o=uG(yx(Wz(YJ(new fX(null,new h3(n.f.a,16)),new Hc),new Dc)),17).a-a,u=jx(new sk,n.f),s=jx(new sk,n.f),RKn(xS(DS($S(RS(new uk,2e4),o),u),s)),kS(JJ(JJ(BV(n.i),new Uc),new Gc),new dY(a,u,o,s)),i=n.d.a.ec().Kc();i.Ob();)uG(i.Pb(),218).g=1;YHn(kT(yT(_B(n.f),r),!1),c.eh(1)),c.Vg()}oM(gK(oIn(t,OMt)))&&((c=e.eh(1)).Ug("Straight Edges Post-Processing",1),fAn(n),c.Vg()),dWn(n),n.e=null,n.f=null,n.i=null,n.c=null,$V(n.k),n.j=null,n.a=null,n.o=null,n.d.a.$b(),e.Vg()}function QJn(n,t,i){var r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k;for(i.Ug("Depth first model order layering",1),n.d=t,m=new Zm,p=new Ww(n.d.a);p.a<p.c.c.length;)(d=uG(N3(p),10)).k==(zIn(),dbt)&&mv(m.c,d);for(hZ(),f$(m,new Ec),o=!0,n.b=new bQ(n.d),n.a=null,kD(n.d.b,n.b),n.b.p=0,n.c=0,n.f=new lS,g=new Ww(m);g.a<g.c.c.length;)if(d=uG(N3(g),10),o)a2(d,n.b),o=!1;else if(Lqn(n,d))if(r=(w=Pyn(w=n.c,d))+2,l=w-n.c,0==n.f.b)O_n(n,r,d);else if(l>0){for(k=Fkn(n.f,0);k.b!=k.d.c;)uG(I6(k),10).p+=w-n.e;kAn(n),BY(n.f),O_n(n,r,d)}else{for(aq(n.f,d),d.p=r,n.e=e.Math.max(n.e,r),a=new Fz(ix(qgn(d).a.Kc(),new h));hDn(a);)(c=uG(N9(a),18)).c.i.c||c.c.i.k!=(zIn(),bbt)||(aq(n.f,c.c.i),c.c.i.p=r-1);n.c=r}else kAn(n),BY(n.f),r=0,hDn(new Fz(ix(qgn(d).a.Kc(),new h)))?O_n(n,r=(w=Pyn(w=0,d))+2,d):(aq(n.f,d),d.p=0,n.e=e.Math.max(n.e,0),n.b=uG(zq(n.d.b,0),30),n.c=0);for(0==n.f.b||kAn(n),n.d.a.c.length=0,v=new Zm,f=new Ww(n.d.b);f.a<f.c.c.length;)0==(u=uG(N3(f),30)).a.c.length&&mv(v.c,u);for(dgn(n.d.b,v),b=0,s=new Ww(n.d.b);s.a<s.c.c.length;)(u=uG(N3(s),30)).p=b,++b;i.Vg()}function JJn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(s=t,Gan(u=D5(n,d5(e),s),k6(s,Iet)),h=uG(dcn(n.g,fNn(v0(s,set))),27),i=null,(a=v0(s,"sourcePort"))&&(i=fNn(a)),f=uG(dcn(n.j,i),123),!h)throw hv(new SM("An edge must have a source node (edge id: '"+jvn(s)+$et));if(f&&!xQ(h0(f),h))throw hv(new SM("The source port of an edge must be a port of the edge's source node (edge id: '"+k6(s,Iet)+$et));if(!u.b&&(u.b=new f_(cFt,u,4,7)),ttn(u.b,f||h),l=uG(dcn(n.g,fNn(v0(s,Ret))),27),r=null,(o=v0(s,"targetPort"))&&(r=fNn(o)),b=uG(dcn(n.j,r),123),!l)throw hv(new SM("An edge must have a target node (edge id: '"+jvn(s)+$et));if(b&&!xQ(h0(b),l))throw hv(new SM("The target port of an edge must be a port of the edge's target node (edge id: '"+k6(s,Iet)+$et));if(!u.c&&(u.c=new f_(cFt,u,5,8)),ttn(u.c,b||l),0==(!u.b&&(u.b=new f_(cFt,u,4,7)),u.b).i||0==(!u.c&&(u.c=new f_(cFt,u,5,8)),u.c).i)throw c=k6(s,Iet),hv(new SM(Net+c+$et));return fCn(s,u),ZDn(s,u),qfn(n,s,u)}function YJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I;for(b=uG(oIn(n,(mon(),Wft)),27),m=vZn,v=vZn,g=j1n,p=j1n,y=new Ww(n.e);y.a<y.c.c.length;)S=(k=uG(N3(y),153)).d,P=k.e,m=e.Math.min(m,S.a-P.a/2),v=e.Math.min(v,S.b-P.b/2),g=e.Math.max(g,S.a+P.a/2),p=e.Math.max(p,S.b+P.b/2);for(i=new Ww(n.b);i.a<i.c.c.length;)S=(t=uG(N3(i),250)).d,P=t.e,m=e.Math.min(m,S.a-P.a/2),v=e.Math.min(v,S.b-P.b/2),g=e.Math.max(g,S.a+P.a/2),p=e.Math.max(p,S.b+P.b/2);for(j=new MO((E=uG(zDn(b,(cGn(),Oft)),107)).b-m,E.d-v),h=new Ww(n.e);h.a<h.c.c.length;)F$(T=oIn(s=uG(N3(h),153),Wft),207)&&kN(w=uG(T,27),(M=JF(new eN(s.d),j)).a-w.g/2,M.b-w.f/2);for(a=new Ww(n.c);a.a<a.c.c.length;)c=uG(N3(a),289),l=JFn(uG(oIn(c,Wft),74),!0,!0),JF(C=new eN(Vcn(c)),j),MN(l,C.a,C.b),Prn(c.a,new bC(j,l)),JF(r=new eN(Wcn(c)),j),yN(l,r.a,r.b);for(u=new Ww(n.d);u.a<u.c.c.length;)o=uG(N3(u),453),kN(uG(oIn(o,Wft),135),(d=JF(new eN(o.d),j)).a,d.b);I=g-m+(E.b+E.c),f=p-v+(E.d+E.a),oM(gK(zDn(b,(XYn(),H$t))))||ZQn(b,I,f,!1,!0),Myn(b,h$t,I-(E.b+E.c)),Myn(b,s$t,f-(E.d+E.a))}function ZJn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;return f=xGn(Ax(n,(KQn(),SRt)),t),w=UTn(Ax(n,PRt),t),k=UTn(Ax(n,DRt),t),j=GTn(Ax(n,RRt),t),l=GTn(Ax(n,MRt),t),m=UTn(Ax(n,$Rt),t),d=UTn(Ax(n,CRt),t),M=UTn(Ax(n,xRt),t),y=UTn(Ax(n,TRt),t),E=GTn(Ax(n,ERt),t),p=UTn(Ax(n,LRt),t),v=UTn(Ax(n,ARt),t),T=UTn(Ax(n,jRt),t),S=GTn(Ax(n,NRt),t),b=GTn(Ax(n,IRt),t),g=UTn(Ax(n,ORt),t),e=Trn(Uhn(cT(eUt,1),I0n,28,15,[m.a,j.a,M.a,S.a])),i=Trn(Uhn(cT(eUt,1),I0n,28,15,[w.a,f.a,k.a,g.a])),r=p.a,c=Trn(Uhn(cT(eUt,1),I0n,28,15,[d.a,l.a,y.a,b.a])),s=Trn(Uhn(cT(eUt,1),I0n,28,15,[m.b,w.b,d.b,v.b])),u=Trn(Uhn(cT(eUt,1),I0n,28,15,[j.b,f.b,l.b,g.b])),h=E.b,o=Trn(Uhn(cT(eUt,1),I0n,28,15,[M.b,k.b,y.b,T.b])),utn(Ax(n,SRt),e+r,s+h),utn(Ax(n,ORt),e+r,s+h),utn(Ax(n,PRt),e+r,0),utn(Ax(n,DRt),e+r,s+h+u),utn(Ax(n,RRt),0,s+h),utn(Ax(n,MRt),e+r+i,s+h),utn(Ax(n,CRt),e+r+i,0),utn(Ax(n,xRt),0,s+h+u),utn(Ax(n,TRt),e+r+i,s+h+u),utn(Ax(n,ERt),0,s),utn(Ax(n,LRt),e,0),utn(Ax(n,jRt),0,s+h+u),utn(Ax(n,IRt),e+r+i,0),(a=new sj).a=Trn(Uhn(cT(eUt,1),I0n,28,15,[e+i+r+c,E.a,v.a,T.a])),a.b=Trn(Uhn(cT(eUt,1),I0n,28,15,[s+u+h+o,p.b,S.b,b.b])),a}function nYn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(d=new MO(M0n,M0n),t=new MO(T0n,T0n),y=new Ww(n);y.a<y.c.c.length;)k=uG(N3(y),8),d.a=e.Math.min(d.a,k.a),d.b=e.Math.min(d.b,k.b),t.a=e.Math.max(t.a,k.a),t.b=e.Math.max(t.b,k.b);for(s=new MO(t.a-d.a,t.b-d.b),h=new gqn(new MO(d.a-50,d.b-s.a-50),new MO(d.a-50,t.b+s.a+50),new MO(t.a+s.b/2+50,d.b+s.b/2)),v=new ek,c=new Zm,i=new Zm,v.a.zc(h,v),T=new Ww(n);T.a<T.c.c.length;){for(M=uG(N3(T),8),c.c.length=0,m=v.a.ec().Kc();m.Ob();)atn((g=uG(m.Pb(),317)).d,g.a),Fgn(atn(g.d,M),atn(g.d,g.a))<0&&mv(c.c,g);for(i.c.length=0,p=new Ww(c);p.a<p.c.c.length;)for(b=new Ww((g=uG(N3(p),317)).e);b.a<b.c.c.length;){for(f=uG(N3(b),177),a=!0,u=new Ww(c);u.a<u.c.c.length;)(o=uG(N3(u),317))!=g&&(OJ(f,zq(o.e,0))||OJ(f,zq(o.e,1))||OJ(f,zq(o.e,2)))&&(a=!1);a&&mv(i.c,f)}for(zCn(v,c),z8(v,new ln),l=new Ww(i);l.a<l.c.c.length;)FV(v,new gqn(M,(f=uG(N3(l),177)).a,f.b))}for(z8(v,new Pd(w=new ek)),r=w.a.ec().Kc();r.Ob();)(Den(h,(f=uG(r.Pb(),177)).a)||Den(h,f.b))&&r.Qb();return z8(w,new bn),w}function tYn(){tYn=E,pj(),VKt=RKt.a,uG(zrn(gZ(RKt.a),0),19),HKt=RKt.f,uG(zrn(gZ(RKt.f),0),19),uG(zrn(gZ(RKt.f),1),35),zKt=RKt.n,uG(zrn(gZ(RKt.n),0),35),uG(zrn(gZ(RKt.n),1),35),uG(zrn(gZ(RKt.n),2),35),uG(zrn(gZ(RKt.n),3),35),UKt=RKt.g,uG(zrn(gZ(RKt.g),0),19),uG(zrn(gZ(RKt.g),1),35),FKt=RKt.c,uG(zrn(gZ(RKt.c),0),19),uG(zrn(gZ(RKt.c),1),19),GKt=RKt.i,uG(zrn(gZ(RKt.i),0),19),uG(zrn(gZ(RKt.i),1),19),uG(zrn(gZ(RKt.i),2),19),uG(zrn(gZ(RKt.i),3),19),uG(zrn(gZ(RKt.i),4),35),qKt=RKt.j,uG(zrn(gZ(RKt.j),0),19),_Kt=RKt.d,uG(zrn(gZ(RKt.d),0),19),uG(zrn(gZ(RKt.d),1),19),uG(zrn(gZ(RKt.d),2),19),uG(zrn(gZ(RKt.d),3),19),uG(zrn(gZ(RKt.d),4),35),uG(zrn(gZ(RKt.d),5),35),uG(zrn(gZ(RKt.d),6),35),uG(zrn(gZ(RKt.d),7),35),KKt=RKt.b,uG(zrn(gZ(RKt.b),0),35),uG(zrn(gZ(RKt.b),1),35),BKt=RKt.e,uG(zrn(gZ(RKt.e),0),35),uG(zrn(gZ(RKt.e),1),35),uG(zrn(gZ(RKt.e),2),35),uG(zrn(gZ(RKt.e),3),35),uG(zrn(gZ(RKt.e),4),19),uG(zrn(gZ(RKt.e),5),19),uG(zrn(gZ(RKt.e),6),19),uG(zrn(gZ(RKt.e),7),19),uG(zrn(gZ(RKt.e),8),19),uG(zrn(gZ(RKt.e),9),19),uG(zrn(gZ(RKt.e),10),35),XKt=RKt.k,uG(zrn(gZ(RKt.k),0),35),uG(zrn(gZ(RKt.k),1),35)}function eYn(n){var t,e,i,r,c;switch(t=n.c){case 11:return n.vm();case 12:return n.xm();case 14:return n.zm();case 15:return n.Cm();case 16:return n.Am();case 17:return n.Dm();case 21:return EYn(n),QYn(),QYn(),OHt;case 10:switch(n.a){case 65:return n.hm();case 90:return n.mm();case 122:return n.tm();case 98:return n.nm();case 66:return n.im();case 60:return n.sm();case 62:return n.qm()}}switch(c=qJn(n),t=n.c){case 3:return n.Im(c);case 4:return n.Gm(c);case 5:return n.Hm(c);case 0:if(123==n.a&&n.d<n.j){if(r=n.d,i=0,e=-1,!((t=VJ(n.i,r++))>=48&&t<=57))throw hv(new CM(rZn((t$(),Nit))));for(i=t-48;r<n.j&&(t=VJ(n.i,r++))>=48&&t<=57;)if((i=10*i+t-48)<0)throw hv(new CM(rZn((t$(),Rit))));if(e=i,44==t){if(r>=n.j)throw hv(new CM(rZn((t$(),Dit))));if((t=VJ(n.i,r++))>=48&&t<=57){for(e=t-48;r<n.j&&(t=VJ(n.i,r++))>=48&&t<=57;)if((e=10*e+t-48)<0)throw hv(new CM(rZn((t$(),Rit))));if(i>e)throw hv(new CM(rZn((t$(),xit))))}else e=-1}if(125!=t)throw hv(new CM(rZn((t$(),$it))));n.bm(r)?(QYn(),QYn(),c=new n8(9,c),n.d=r+1):(QYn(),QYn(),c=new n8(3,c),n.d=r),c.Om(i),c.Nm(e),EYn(n)}}return c}function iYn(n){var t,e,i;switch(e=uG(oIn(n,(GYn(),Hpt)),21),t=aN(klt),uG(oIn(n,(jYn(),rMt)),346)==(Own(),Ixt)&&gsn(t,ylt),oM(gK(oIn(n,eMt)))?Aq(t,(uIn(),Tlt),(zYn(),Iwt)):Aq(t,(uIn(),Elt),(zYn(),Iwt)),null!=oIn(n,(K7(),jNt))&&gsn(t,Mlt),(oM(gK(oIn(n,fMt)))||oM(gK(oIn(n,iMt))))&&wz(t,(uIn(),Plt),(zYn(),Ubt)),uG(oIn(n,Byt),88).g){case 2:case 3:case 4:wz(Aq(t,(uIn(),Tlt),(zYn(),qbt)),Plt,Gbt)}switch(e.Hc((r_n(),Zgt))&&wz(Aq(Aq(t,(uIn(),Tlt),(zYn(),Hbt)),Slt,_bt),Plt,Bbt),xA(oIn(n,yMt))!==xA((THn(),$jt))&&Aq(t,(uIn(),Elt),(zYn(),ywt)),e.Hc(apt)&&(Aq(t,(uIn(),Tlt),(zYn(),Pwt)),Aq(t,jlt,Ewt),Aq(t,Elt,Swt)),xA(oIn(n,vyt))!==xA((RIn(),Vgt))&&xA(oIn(n,Vyt))!==xA((_gn(),sxt))&&wz(t,(uIn(),Plt),(zYn(),rwt)),oM(gK(oIn(n,aMt)))&&Aq(t,(uIn(),Elt),(zYn(),iwt)),oM(gK(oIn(n,Ryt)))&&Aq(t,(uIn(),Elt),(zYn(),Dwt)),CRn(n)&&(i=(xA(oIn(n,rMt))===xA(Ixt)?uG(oIn(n,Oyt),298):uG(oIn(n,Ayt),298))==(ihn(),fpt)?(zYn(),jwt):(zYn(),Kwt),Aq(t,(uIn(),Slt),i)),uG(oIn(n,qTt),388).g){case 1:Aq(t,(uIn(),Slt),(zYn(),xwt));break;case 2:wz(Aq(Aq(t,(uIn(),Elt),(zYn(),xbt)),Slt,Rbt),Plt,Kbt)}return xA(oIn(n,Syt))!==xA((yvn(),Fjt))&&Aq(t,(uIn(),Elt),(zYn(),Rwt)),t}function rYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;if(PV(n.a,t)){if(cS(uG(cQ(n.a,t),49),e))return 1}else vJ(n.a,t,new ek);if(PV(n.a,e)){if(cS(uG(cQ(n.a,e),49),t))return-1}else vJ(n.a,e,new ek);if(PV(n.e,t)){if(cS(uG(cQ(n.e,t),49),e))return-1}else vJ(n.e,t,new ek);if(PV(n.e,e)){if(cS(uG(cQ(n.a,e),49),t))return 1}else vJ(n.e,e,new ek);if(n.c==(yvn(),_jt)||!vR(t,(GYn(),imt))||!vR(e,(GYn(),imt))){for(f=null,s=new Ww(t.j);s.a<s.c.c.length;)0==(o=uG(N3(s),12)).e.c.length||uG(zq(o.e,0),18).c.i.c!=t.c&&(f=uG(zq(o.e,0),18).c);for(b=null,u=new Ww(e.j);u.a<u.c.c.length;)0==(o=uG(N3(u),12)).e.c.length||uG(zq(o.e,0),18).c.i.c!=e.c&&(b=uG(zq(o.e,0),18).c);if(f&&b){if(h=f.i,l=b.i,h&&h==l){for(d=new Ww(h.j);d.a<d.c.c.length;){if((w=uG(N3(d),12))==f)return uHn(n,e,t),-1;if(w==b)return uHn(n,t,e),1}return d$(_Sn(n,t),_Sn(n,e))}for(m=0,v=(p=n.d).length;m<v;++m){if((g=p[m])==h)return uHn(n,e,t),-1;if(g==l)return uHn(n,t,e),1}}if(!vR(t,(GYn(),imt))||!vR(e,imt))return(r=_Sn(n,t))>(a=_Sn(n,e))?uHn(n,t,e):uHn(n,e,t),r<a?-1:r>a?1:0}return(i=uG(oIn(t,(GYn(),imt)),17).a)>(c=uG(oIn(e,imt),17).a)?uHn(n,t,e):uHn(n,e,t),i<c?-1:i>c?1:0}function cYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d;if(null==e)return null;if(n.a!=t.jk())throw hv(new vM(tet+t.xe()+eet));if(F$(t,468)){if(!(d=y_n(uG(t,685),e)))throw hv(new vM(iet+e+"' is not a valid enumerator of '"+t.xe()+"'"));return d}switch(tdn((gAn(),kBt),t).Nl()){case 2:e=yXn(e,!1);break;case 3:e=yXn(e,!0)}if(i=tdn(kBt,t).Jl())return i.jk().wi().ti(i,e);if(f=tdn(kBt,t).Ll()){for(d=new Zm,s=0,h=(u=Fln(e)).length;s<h;++s)o=u[s],kD(d,f.jk().wi().ti(f,o));return d}if(!(w=tdn(kBt,t).Ml()).dc()){for(b=w.Kc();b.Ob();){l=uG(b.Pb(),156);try{if(null!=(d=l.jk().wi().ti(l,e)))return d}catch(g){if(!F$(g=Ehn(g),63))throw hv(g)}}throw hv(new vM(iet+e+"' does not match any member types of the union datatype '"+t.xe()+"'"))}if(uG(t,847).ok(),!(r=jbn(t.kk())))return null;if(r==hot){c=0;try{c=vUn(e,j1n,vZn)&D1n}catch(g){if(!F$(g=Ehn(g),130))throw hv(g);c=_en(e)[0]}return Hsn(c)}if(r==iot){for(a=0;a<QKt.length;++a)try{return dP(QKt[a],e)}catch(g){if(!F$(g=Ehn(g),33))throw hv(g)}throw hv(new vM(iet+e+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw hv(new vM(iet+e+"' is invalid. "))}function aYn(){aYn=E,UNn(Jlt=new K1,(KQn(),SRt),ORt),UNn(Jlt,RRt,ORt),UNn(Jlt,RRt,NRt),UNn(Jlt,MRt,IRt),UNn(Jlt,MRt,ORt),UNn(Jlt,PRt,ORt),UNn(Jlt,PRt,ARt),UNn(Jlt,DRt,jRt),UNn(Jlt,DRt,ORt),UNn(Jlt,LRt,ERt),UNn(Jlt,LRt,ORt),UNn(Jlt,LRt,ARt),UNn(Jlt,LRt,jRt),UNn(Jlt,ERt,LRt),UNn(Jlt,ERt,NRt),UNn(Jlt,ERt,IRt),UNn(Jlt,ERt,ORt),UNn(Jlt,$Rt,$Rt),UNn(Jlt,$Rt,ARt),UNn(Jlt,$Rt,NRt),UNn(Jlt,CRt,CRt),UNn(Jlt,CRt,ARt),UNn(Jlt,CRt,IRt),UNn(Jlt,xRt,xRt),UNn(Jlt,xRt,jRt),UNn(Jlt,xRt,NRt),UNn(Jlt,TRt,TRt),UNn(Jlt,TRt,jRt),UNn(Jlt,TRt,IRt),UNn(Jlt,ARt,PRt),UNn(Jlt,ARt,LRt),UNn(Jlt,ARt,$Rt),UNn(Jlt,ARt,CRt),UNn(Jlt,ARt,ORt),UNn(Jlt,ARt,ARt),UNn(Jlt,ARt,NRt),UNn(Jlt,ARt,IRt),UNn(Jlt,jRt,DRt),UNn(Jlt,jRt,LRt),UNn(Jlt,jRt,xRt),UNn(Jlt,jRt,TRt),UNn(Jlt,jRt,jRt),UNn(Jlt,jRt,NRt),UNn(Jlt,jRt,IRt),UNn(Jlt,jRt,ORt),UNn(Jlt,NRt,RRt),UNn(Jlt,NRt,ERt),UNn(Jlt,NRt,$Rt),UNn(Jlt,NRt,xRt),UNn(Jlt,NRt,ARt),UNn(Jlt,NRt,jRt),UNn(Jlt,NRt,NRt),UNn(Jlt,NRt,ORt),UNn(Jlt,IRt,MRt),UNn(Jlt,IRt,ERt),UNn(Jlt,IRt,CRt),UNn(Jlt,IRt,TRt),UNn(Jlt,IRt,ARt),UNn(Jlt,IRt,jRt),UNn(Jlt,IRt,IRt),UNn(Jlt,IRt,ORt),UNn(Jlt,ORt,SRt),UNn(Jlt,ORt,RRt),UNn(Jlt,ORt,MRt),UNn(Jlt,ORt,PRt),UNn(Jlt,ORt,DRt),UNn(Jlt,ORt,LRt),UNn(Jlt,ORt,ERt),UNn(Jlt,ORt,ARt),UNn(Jlt,ORt,jRt),UNn(Jlt,ORt,NRt),UNn(Jlt,ORt,IRt),UNn(Jlt,ORt,ORt)}function oYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j;for(n.d=new MO(M0n,M0n),n.c=new MO(T0n,T0n),l=t.Kc();l.Ob();)for(v=new Ww(uG(l.Pb(),36).a);v.a<v.c.c.length;)m=uG(N3(v),10),n.d.a=e.Math.min(n.d.a,m.n.a-m.d.b),n.d.b=e.Math.min(n.d.b,m.n.b-m.d.d),n.c.a=e.Math.max(n.c.a,m.n.a+m.o.a+m.d.c),n.c.b=e.Math.max(n.c.b,m.n.b+m.o.b+m.d.a);for(u=new bk,f=t.Kc();f.Ob();)r=CJn(n,uG(f.Pb(),36)),kD(u.a,r),r.a=r.a|!uG(oIn(r.c,(GYn(),xpt)),21).dc();for(n.b=(Mbn(),(j=new vt).f=new $an(i),j.b=PVn(j.f,u),j),qVn((w=n.b,new fy,w)),n.e=new sj,n.a=n.b.f.e,o=new Ww(u.a);o.a<o.c.c.length;)for(c=uG(N3(o),855),k=Q1(n.b,c),eHn(c.c,k.a,k.b),g=new Ww(c.c.a);g.a<g.c.c.length;)(d=uG(N3(g),10)).k==(zIn(),lbt)&&(p=nRn(n,d.n,uG(oIn(d,(GYn(),Fpt)),64)),JF(dL(d.n),p));for(a=new Ww(u.a);a.a<a.c.c.length;)for(h=new Ww(cgn(c=uG(N3(a),855)));h.a<h.c.c.length;)for(sR(T=new tj((s=uG(N3(h),18)).a),0,n3(s.c)),aq(T,n3(s.d)),b=null,M=Fkn(T,0);M.b!=M.d.c;)y=uG(I6(M),8),b?(xrn(b.a,y.a)?(n.e.a=e.Math.min(n.e.a,b.a),n.a.a=e.Math.max(n.a.a,b.a)):xrn(b.b,y.b)&&(n.e.b=e.Math.min(n.e.b,b.b),n.a.b=e.Math.max(n.a.b,b.b)),b=y):b=y;BR(n.e),JF(n.a,n.e)}function uYn(n,t){var e,i,r,c,a,o,u,s;if(e=0,a=0,c=t.length,o=null,s=new QM,a<c&&(s3(a,t.length),43==t.charCodeAt(a))&&(++e,++a<c&&(s3(a,t.length),43==t.charCodeAt(a)||(s3(a,t.length),45==t.charCodeAt(a)))))throw hv(new ZM(y0n+t+'"'));for(;a<c&&(s3(a,t.length),46!=t.charCodeAt(a))&&(s3(a,t.length),101!=t.charCodeAt(a))&&(s3(a,t.length),69!=t.charCodeAt(a));)++a;if(s.a+=""+r1(null==t?IZn:(tJ(t),t),e,a),a<c&&(s3(a,t.length),46==t.charCodeAt(a))){for(e=++a;a<c&&(s3(a,t.length),101!=t.charCodeAt(a))&&(s3(a,t.length),69!=t.charCodeAt(a));)++a;n.e=a-e,s.a+=""+r1(null==t?IZn:(tJ(t),t),e,a)}else n.e=0;if(a<c&&(s3(a,t.length),101==t.charCodeAt(a)||(s3(a,t.length),69==t.charCodeAt(a)))&&(e=++a,a<c&&(s3(a,t.length),43==t.charCodeAt(a))&&++a<c&&(s3(a,t.length),45!=t.charCodeAt(a))&&++e,Knn(e,c,t.length),o=t.substr(e,c-e),n.e=n.e-vUn(o,j1n,vZn),n.e!=t0(n.e)))throw hv(new ZM("Scale out of range."));if((u=s.a).length<16){if(n.f=(null==Not&&(Not=new RegExp("^[+-]?\\d*$","i")),Not.test(u)?parseInt(u,10):NaN),isNaN(n.f))throw hv(new ZM(y0n+t+'"'));n.a=VLn(n.f)}else rdn(n,new PN(u));for(n.d=s.a.length,r=0;r<s.a.length&&(45==(i=VJ(s.a,r))||48==i);++r)--n.d;0==n.d&&(n.d=1)}function sYn(n){Hxn(n.b,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ConsistentTransient"])),Hxn(n.a,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"WellFormedSourceURI"])),Hxn(n.o,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"])),Hxn(n.p,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"WellFormedInstanceTypeName UniqueTypeParameterNames"])),Hxn(n.v,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"UniqueEnumeratorNames UniqueEnumeratorLiterals"])),Hxn(n.R,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"WellFormedName"])),Hxn(n.T,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"])),Hxn(n.U,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"])),Hxn(n.W,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"])),Hxn(n.bb,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ValidDefaultValueLiteral"])),Hxn(n.eb,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ValidLowerBound ValidUpperBound ConsistentBounds ValidType"])),Hxn(n.H,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ConsistentType ConsistentBounds ConsistentArguments"]))}function hYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(!t.dc()){if(r=new Uk,f=(a=e||uG(t.Xb(0),18)).c,uFn(),(s=f.i.k)!=(zIn(),dbt)&&s!=gbt&&s!=lbt&&s!=fbt)throw hv(new vM("The target node of the edge must be a normal node or a northSouthPort."));for(cL(r,Gfn(Uhn(cT(PNt,1),zZn,8,0,[f.i.n,f.n,f.a]))),(KQn(),LRt).Hc(f.j)&&(b=uM(pK(oIn(f,(GYn(),Mmt)))),s8(r,new MO(Gfn(Uhn(cT(PNt,1),zZn,8,0,[f.i.n,f.n,f.a])).a,b),r.c.b,r.c)),u=null,i=!1,o=t.Kc();o.Ob();)0!=(c=uG(o.Pb(),18).a).b&&(i?(s8(r,vD(JF(u,(MK(0!=c.b),uG(c.a.a.c,8))),.5),r.c.b,r.c),i=!1):i=!0,u=D$((MK(0!=c.b),uG(c.c.b.c,8))),Qon(r,c),BY(c));l=a.d,LRt.Hc(l.j)&&(b=uM(pK(oIn(l,(GYn(),Mmt)))),s8(r,new MO(Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.i.n,l.n,l.a])).a,b),r.c.b,r.c)),cL(r,Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.i.n,l.n,l.a]))),n.d==(kbn(),sEt)&&(MK(0!=r.b),w=uG(r.a.a.c,8),d=uG(hyn(r,1),8),(g=new O2(Tln(f.j))).a*=5,g.b*=5,p=YF(new MO(d.a,d.b),w),JF(m=new MO(C0(g.a,p.a),C0(g.b,p.b)),w),lW(Fkn(r,1),m),MK(0!=r.b),v=uG(r.c.b.c,8),k=uG(hyn(r,r.b-2),8),(g=new O2(Tln(l.j))).a*=5,g.b*=5,p=YF(new MO(k.a,k.b),v),JF(y=new MO(C0(g.a,p.a),C0(g.b,p.b)),v),sR(r,r.b-1,y)),h=new jqn(r),Qon(a.a,$Mn(h))}}function fYn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A,L,N,$,D;if(k=(m=uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)).nh(),y=m.oh(),v=m.mh()/2,w=m.lh()/2,F$(m,193)&&(k+=h0(p=uG(m,123)).i,k+=h0(p).i),k+=v,y+=w,C=(S=uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)).nh(),I=S.oh(),P=S.mh()/2,M=S.lh()/2,F$(S,193)&&(C+=h0(E=uG(S,123)).i,C+=h0(E).i),C+=P,I+=M,0==(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)gj(),u=new is,ttn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),u);else if((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i>1)for(b=new Zx((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a));b.e!=b.i.gc();)$Sn(b);for(d=C,C>k+v?d=k+v:C<k-v&&(d=k-v),g=I,I>y+w?g=y+w:I<y-w&&(g=y-w),d>k-v&&d<k+v&&g>y-w&&g<y+w&&(d=k+v),Tcn(o=uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166),d),Ecn(o,g),T=k,k>C+P?T=C+P:k<C-P&&(T=C-P),j=y,y>I+M?j=I+M:y<I-M&&(j=I-M),T>C-P&&T<C+P&&j>I-M&&j<I+M&&(j=I+M),mcn(o,T),jcn(o,j),Czn((!o.a&&(o.a=new MD(eFt,o,5)),o.a)),a=iMn(t,5),m==S&&++a,A=T-d,$=j-g,h=.20000000298023224*e.Math.sqrt(A*A+$*$),L=A/(a+1),D=$/(a+1),O=d,N=g,s=0;s<a;s++)N+=D,(f=(O+=L)+uRn(t,24)*z0n*h-h/2)<0?f=1:f>i&&(f=i-1),(l=N+uRn(t,24)*z0n*h-h/2)<0?l=1:l>r&&(l=r-1),gj(),Scn(c=new ns,f),pcn(c,l),ttn((!o.a&&(o.a=new MD(eFt,o,5)),o.a),c)}function lYn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,ant),"ELK Rectangle Packing"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces."),new _o))),U4(n,ant,R3n,1.3),U4(n,ant,d4n,(qx(),!1)),U4(n,ant,K3n,fAt),U4(n,ant,o4n,15),U4(n,ant,r9n,Jkn(WOt)),U4(n,ant,p4n,Jkn(eAt)),U4(n,ant,x4n,Jkn(rAt)),U4(n,ant,g4n,Jkn(cAt)),U4(n,ant,m4n,Jkn(tAt)),U4(n,ant,w4n,Jkn(aAt)),U4(n,ant,v4n,Jkn(lAt)),U4(n,ant,J7n,Jkn(pAt)),U4(n,ant,Y7n,Jkn(gAt)),U4(n,ant,Q7n,Jkn(vAt)),U4(n,ant,W7n,Jkn(mAt)),U4(n,ant,Z7n,Jkn(sAt)),U4(n,ant,nnt,Jkn(uAt)),U4(n,ant,tnt,Jkn(oAt)),U4(n,ant,ent,Jkn(dAt)),U4(n,ant,f4n,Jkn(YOt)),U4(n,ant,g9n,Jkn(ZOt)),U4(n,ant,z7n,Jkn(JOt)),U4(n,ant,X7n,Jkn(QOt)),U4(n,ant,V7n,Jkn(nAt)),U4(n,ant,q7n,Jkn(wAt))}function bYn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C;if(pXn(),j=n.e,w=n.d,r=n.a,0==j)switch(t){case 0:return"0";case 1:return N0n;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(M=new WM).a+=t<0?"0E+":"0E",M.a+=-t,M.a}if(k=Inn(JHt,N1n,28,1+(v=10*w+1+7),15,1),e=v,1==w)if((o=r[0])<0){C=E3(o,L0n);do{d=C,C=bSn(C,10),k[--e]=48+pz($gn(d,Ngn(C,10)))&D1n}while(0!=dwn(C,0))}else{C=o;do{d=C,C=C/10|0,k[--e]=d-10*C+48&D1n}while(0!=C)}else{qGn(r,0,S=Inn(YHt,W1n,28,w,15,1),0,P=w);n:for(;;){for(T=0,s=P-1;s>=0;s--)p=JPn(Lgn(Nz(T,32),E3(S[s],L0n))),S[s]=pz(p),T=pz($z(p,32));m=pz(T),g=e;do{k[--e]=48+m%10&D1n}while(0!=(m=m/10|0)&&0!=e);for(i=9-g+e,u=0;u<i&&e>0;u++)k[--e]=48;for(f=P-1;0==S[f];f--)if(0==f)break n;P=f+1}for(;48==k[e];)++e}if(b=j<0,a=v-e-t-1,0==t)return b&&(k[--e]=45),mvn(k,e,v-e);if(t>0&&a>=-6){if(a>=0){for(h=e+a,l=v-1;l>=h;l--)k[l+1]=k[l];return k[++h]=46,b&&(k[--e]=45),mvn(k,e,v-e+1)}for(f=2;f<1-a;f++)k[--e]=48;return k[--e]=46,k[--e]=48,b&&(k[--e]=45),mvn(k,e,v-e)}return E=e+1,c=v,y=new QM,b&&(y.a+="-"),c-E>=1?(jQ(y,k[e]),y.a+=".",y.a+=mvn(k,e+1,v-e-1)):y.a+=mvn(k,e,v-e),y.a+="E",a>0&&(y.a+="+"),y.a+=""+a,y.a}function wYn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;switch(n.c=t,n.g=new Ym,vP(),Apn(new Ad(new Vy(n.c))),m=mK(zDn(n.c,(fIn(),dLt))),o=uG(zDn(n.c,pLt),324),k=uG(zDn(n.c,mLt),437),c=uG(zDn(n.c,hLt),489),v=uG(zDn(n.c,gLt),438),n.j=uM(pK(zDn(n.c,vLt))),a=n.a,o.g){case 0:a=n.a;break;case 1:a=n.b;break;case 2:a=n.i;break;case 3:a=n.e;break;case 4:a=n.f;break;default:throw hv(new vM(lnt+(null!=o.f?o.f:""+o.g)))}if(n.d=new i0(a,k,c),kfn(n.d,(rsn(),Oht),gK(zDn(n.c,lLt))),n.d.c=oM(gK(zDn(n.c,fLt))),0==wZ(n.c).i)return n.d;for(h=new DD(wZ(n.c));h.e!=h.i.gc();){for(l=(s=uG(Zkn(h),27)).g/2,f=s.f/2,y=new MO(s.i+l,s.j+f);PV(n.g,y);)KR(y,(e.Math.random()-.5)*t4n,(e.Math.random()-.5)*t4n);w=uG(zDn(s,(XYn(),$$t)),140),d=new G0(y,new gY(y.a-l-n.j/2-w.b,y.b-f-n.j/2-w.d,s.g+n.j+(w.b+w.c),s.f+n.j+(w.d+w.a))),kD(n.d.i,d),vJ(n.g,y,new WO(d,s))}switch(v.g){case 0:if(null==m)n.d.d=uG(zq(n.d.i,0),68);else for(p=new Ww(n.d.i);p.a<p.c.c.length;)d=uG(N3(p),68),null!=(b=uG(uG(cQ(n.g,d.a),42).b,27).jh())&&m_(b,m)&&(n.d.d=d);break;case 1:for((i=new MO(n.c.g,n.c.f)).a*=.5,i.b*=.5,KR(i,n.c.i,n.c.j),r=M0n,g=new Ww(n.d.i);g.a<g.c.c.length;)(u=atn((d=uG(N3(g),68)).a,i))<r&&(r=u,n.d.d=d);break;default:throw hv(new vM(lnt+(null!=v.f?v.f:""+v.g)))}return n.d}function dYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(l=0,r=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));r.e!=r.i.gc();)oM(gK(zDn(i=uG(Zkn(r),27),(jYn(),FMt))))||(xA(zDn(h=R0(i),Syt))===xA((yvn(),Fjt))&&xA(zDn(h,Fyt))!==xA((kvn(),lgt))&&xA(zDn(h,Fyt))!==xA((kvn(),hgt))&&!oM(gK(zDn(h,Cyt)))&&xA(zDn(h,kyt))===xA((Uvn(),tbt))&&xA(zDn(h,yMt))!==xA((THn(),Pjt))&&xA(zDn(h,yMt))!==xA((THn(),Cjt))&&xA(zDn(h,MMt))!==xA((MKn(),JTt))&&xA(zDn(h,MMt))!==xA((MKn(),ZTt))||oM(gK(zDn(i,jyt)))||(Myn(i,(GYn(),imt),xwn(l)),++l),RJn(n,i,e));for(l=0,s=new DD((!t.b&&(t.b=new fV(aFt,t,12,3)),t.b));s.e!=s.i.gc();)o=uG(Zkn(s),74),(xA(zDn(t,(jYn(),Syt)))!==xA((yvn(),Fjt))||xA(zDn(t,Fyt))===xA((kvn(),lgt))||xA(zDn(t,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(t,Cyt)))||xA(zDn(t,kyt))!==xA((Uvn(),tbt))||xA(zDn(t,yMt))===xA((THn(),Pjt))||xA(zDn(t,yMt))===xA((THn(),Cjt))||xA(zDn(t,MMt))===xA((MKn(),JTt))||xA(zDn(t,MMt))===xA((MKn(),ZTt)))&&(Myn(o,(GYn(),imt),xwn(l)),++l),d=bIn(o),g=gIn(o),f=oM(gK(zDn(d,sMt))),w=!oM(gK(zDn(o,FMt))),b=f&&BNn(o)&&oM(gK(zDn(o,hMt))),c=R0(d)==t&&R0(d)==R0(g),a=(R0(d)==t&&g==t)^(R0(g)==t&&d==t),w&&!b&&(a||c)&&FYn(n,o,t,e);if(R0(t))for(u=new DD(xY(R0(t)));u.e!=u.i.gc();)(d=bIn(o=uG(Zkn(u),74)))==t&&BNn(o)&&(b=oM(gK(zDn(d,(jYn(),sMt))))&&oM(gK(zDn(o,hMt))))&&FYn(n,o,t,e)}function gYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A;for(e.Ug("Greedy cycle removal",1),A=(v=t.a).c.length,n.a=Inn(YHt,W1n,28,A,15,1),n.c=Inn(YHt,W1n,28,A,15,1),n.b=Inn(YHt,W1n,28,A,15,1),s=0,p=new Ww(v);p.a<p.c.c.length;){for((d=uG(N3(p),10)).p=s,j=new Ww(d.j);j.a<j.c.c.length;){for(o=new Ww((y=uG(N3(j),12)).e);o.a<o.c.c.length;)(i=uG(N3(o),18)).c.i!=d&&(S=uG(oIn(i,(jYn(),aTt)),17).a,n.a[s]+=S>0?S+1:1);for(a=new Ww(y.g);a.a<a.c.c.length;)(i=uG(N3(a),18)).d.i!=d&&(S=uG(oIn(i,(jYn(),aTt)),17).a,n.c[s]+=S>0?S+1:1)}0==n.c[s]?aq(n.e,d):0==n.a[s]&&aq(n.f,d),++s}for(w=-1,b=1,f=new Zm,n.d=uG(oIn(t,(GYn(),dmt)),234);A>0;){for(;0!=n.e.b;)C=uG(tG(n.e),10),n.b[C.p]=w--,iUn(n,C),--A;for(;0!=n.f.b;)I=uG(tG(n.f),10),n.b[I.p]=b++,iUn(n,I),--A;if(A>0){for(l=j1n,m=new Ww(v);m.a<m.c.c.length;)d=uG(N3(m),10),0==n.b[d.p]&&(k=n.c[d.p]-n.a[d.p])>=l&&(k>l&&(f.c.length=0,l=k),mv(f.c,d));h=n.sg(f),n.b[h.p]=b++,iUn(n,h),--A}}for(P=v.c.length+1,s=0;s<v.c.length;s++)n.b[s]<0&&(n.b[s]+=P);for(g=new Ww(v);g.a<g.c.c.length;)for(T=0,E=(M=s6((d=uG(N3(g),10)).j)).length;T<E;++T)for(c=0,u=(r=x4((y=M[T]).g)).length;c<u;++c)O=(i=r[c]).d.i.p,n.b[d.p]>n.b[O]&&(pqn(i,!0),kfn(t,Lpt,(qx(),!0)));n.a=null,n.c=null,n.b=null,BY(n.f),BY(n.e),e.Vg()}function pYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(M=uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166),f=new Uk,y=new Ym,T=sGn(M),VAn(y.f,M,T),b=new Ym,r=new lS,d=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!t.d&&(t.d=new f_(aFt,t,8,5)),t.d),(!t.e&&(t.e=new f_(aFt,t,7,4)),t.e)])));hDn(d);){if(w=uG(N9(d),74),1!=(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)throw hv(new vM(Ptt+(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i));w!=n&&(s8(r,p=uG(zrn((!w.a&&(w.a=new fV(oFt,w,6,6)),w.a),0),166),r.c.b,r.c),(g=uG(DA(FX(y.f,p)),13))||(g=sGn(p),VAn(y.f,p,g)),l=i?YF(new eN(uG(zq(T,T.c.length-1),8)),uG(zq(g,g.c.length-1),8)):YF(new eN((u3(0,T.c.length),uG(T.c[0],8))),(u3(0,g.c.length),uG(g.c[0],8))),VAn(b.f,p,l))}if(0!=r.b)for(m=uG(zq(T,i?T.c.length-1:0),8),h=1;h<T.c.length;h++){for(v=uG(zq(T,i?T.c.length-1-h:h),8),c=Fkn(r,0);c.b!=c.d.c;)p=uG(I6(c),166),(g=uG(DA(FX(y.f,p)),13)).c.length<=h?yrn(c):(k=JF(new eN(uG(zq(g,i?g.c.length-1-h:h),8)),uG(DA(FX(b.f,p)),8)),v.a==k.a&&v.b==k.b||(a=v.a-m.a,u=v.b-m.b,(o=k.a-m.a)*u==(s=k.b-m.b)*a&&(0==a||isNaN(a)?a:a<0?-1:1)==(0==o||isNaN(o)?o:o<0?-1:1)&&(0==u||isNaN(u)?u:u<0?-1:1)==(0==s||isNaN(s)?s:s<0?-1:1)?(e.Math.abs(a)<e.Math.abs(o)||e.Math.abs(u)<e.Math.abs(s))&&s8(f,v,f.c.b,f.c):h>1&&s8(f,m,f.c.b,f.c),yrn(c)));m=v}return f}function mYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(e.Ug(o7n,1),S=uG(l8(JJ(new fX(null,new h3(t,16)),new wo),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),h=uG(l8(JJ(new fX(null,new h3(t,16)),new Lp(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15),w=uG(l8(JJ(new fX(null,new h3(t,16)),new Ap(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15),d=Inn(lPt,z9n,39,t.gc(),0,1),a=0;a<h.gc();a++)r=uG(h.Xb(a),39),(E=uG(oIn(r,(QGn(),kCt)),17).a)>=0&&E<h.gc()&&!d[E]&&(d[E]=r,h.gd(a),--a);for(o=0;o<h.gc();o++)for(r=uG(h.Xb(o),39),E=uG(oIn(r,(QGn(),kCt)),17).a,l=0;;l++){if((b=E+l)<d.length&&b>=0&&!d[b]){d[b]=r,h.gd(o),--o;break}if((b=E-l)<d.length&&b>=0&&!d[b]){d[b]=r,h.gd(o),--o;break}}for(w.jd(new go),u=d.length-1;u>=0;u--)d[u]||w.dc()||(d[u]=uG(w.Xb(0),39),w.gd(0));for(s=0;s<d.length;s++)d[s]||S.dc()||(d[s]=uG(S.Xb(0),39),S.gd(0));for(c=0;c<d.length;c++)kfn(d[c],(OQn(),KPt),xwn(c));for(T=0,j=(M=f=uG(bmn(JJ(new fX(null,new h3(t,16)),new po),new lo),534)).length;T<j;++T){for(mYn(n,i=Lhn(y=M[T]),e.eh(1/f.length|0)),hZ(),Lon(i,new Sm((OQn(),KPt))),g=new lS,k=Fkn(i,0);k.b!=k.d.c;)for(v=uG(I6(k),39),m=Fkn(y.d,0);m.b!=m.d.c;)(p=uG(I6(m),65)).c==v&&s8(g,p,g.c.b,g.c);BY(y.d),Qon(y.d,g)}e.Vg()}function vYn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;for(i=new Zm,o=new Zm,g=t/2,b=n.gc(),r=uG(n.Xb(0),8),p=uG(n.Xb(1),8),kD(i,(u3(0,(w=UDn(r.a,r.b,p.a,p.b,g)).c.length),uG(w.c[0],8))),kD(o,(u3(1,w.c.length),uG(w.c[1],8))),s=2;s<b;s++)d=r,r=p,p=uG(n.Xb(s),8),kD(i,(u3(1,(w=UDn(r.a,r.b,d.a,d.b,g)).c.length),uG(w.c[1],8))),kD(o,(u3(0,w.c.length),uG(w.c[0],8))),kD(i,(u3(0,(w=UDn(r.a,r.b,p.a,p.b,g)).c.length),uG(w.c[0],8))),kD(o,(u3(1,w.c.length),uG(w.c[1],8)));for(kD(i,(u3(1,(w=UDn(p.a,p.b,r.a,r.b,g)).c.length),uG(w.c[1],8))),kD(o,(u3(0,w.c.length),uG(w.c[0],8))),e=new Uk,a=new Zm,aq(e,(u3(0,i.c.length),uG(i.c[0],8))),h=1;h<i.c.length-2;h+=2)u3(h,i.c.length),c=uG(i.c[h],8),l=OAn((u3(h-1,i.c.length),uG(i.c[h-1],8)),c,(u3(h+1,i.c.length),uG(i.c[h+1],8)),(u3(h+2,i.c.length),uG(i.c[h+2],8))),isFinite(l.a)&&isFinite(l.b)?s8(e,l,e.c.b,e.c):s8(e,c,e.c.b,e.c);for(aq(e,uG(zq(i,i.c.length-1),8)),kD(a,(u3(0,o.c.length),uG(o.c[0],8))),f=1;f<o.c.length-2;f+=2)u3(f,o.c.length),c=uG(o.c[f],8),l=OAn((u3(f-1,o.c.length),uG(o.c[f-1],8)),c,(u3(f+1,o.c.length),uG(o.c[f+1],8)),(u3(f+2,o.c.length),uG(o.c[f+2],8))),isFinite(l.a)&&isFinite(l.b)?mv(a.c,l):mv(a.c,c);for(kD(a,uG(zq(o,o.c.length-1),8)),u=a.c.length-1;u>=0;u--)aq(e,(u3(u,a.c.length),uG(a.c[u],8)));return e}function kYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(v=uM(pK(zDn(t,(lBn(),POt)))),b=uM(pK(zDn(t,EOt))),l=uM(pK(zDn(t,MOt))),Non((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a)),p=uzn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),v,n.b),g=0;g<p.c.length;g++)if(u3(g,p.c.length),s=uG(p.c[g],186),0!=g&&(u3(g-1,p.c.length),Rbn(s,(w=uG(p.c[g-1],186)).f+w.b+n.b)),d=TYn(g,p,v,n.b,oM(gK(zDn(t,(S_n(),uAt))))),oM(gK(d.b))){for(a=new Ww(s.a);a.a<a.c.c.length;)(c=uG(N3(a),172)).c=!1,c.k=!1,EXn(c);s.d=new Zm,s.e=v,--g}else if(EEn(n,s),g+1<p.c.length&&(n.e=e.Math.max(s.e+n.b+uG(zq((u3(g+1,p.c.length),uG(p.c[g+1],186)).a,0),172).r-v,n.c),n.f=e.Math.min(s.e+n.b+uG(zq((u3(g+1,p.c.length),uG(p.c[g+1],186)).a,0),172).r-v,n.d),0!=s.d.c.length&&(n.c=e.Math.max(n.c,uG(zq(s.d,s.d.c.length-1),315).d+(s.d.c.length<=1?0:n.b)),n.d=e.Math.min(n.c,uG(zq(s.d,s.d.c.length-1),315).d+(s.d.c.length<=1?0:n.b)))),1==p.c.length)for(f=uG(zq(s.d,s.d.c.length-1),315),u=new Ww((h=uG(zq(f.a,f.a.c.length-1),172)).n);u.a<u.c.c.length;)o=uG(N3(u),209),n.c=e.Math.max(n.c,h.r-o.d),n.d=e.Math.min(n.d,h.r-o.d),n.e=e.Math.max(n.e,o.d+n.b),n.f=e.Math.min(n.f,o.d+n.b);return m=Xjn(p,n.b),k=e.Math.max(m.a,b-(i.b+i.c)),r=e.Math.max(m.b,l-(i.d+i.a))-m.b,Myn(t,pOt,r),Myn(t,SOt,p),new jq(n.a,k,m.b+r,(_Rn(),FAt))}function yYn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P;if((M=uG(oIn(n,(jYn(),JMt)),101))!=($Pn(),uRt)&&M!=sRt){for(s=new R7((man((b=(w=n.b).c.length)+2,v1n),arn(Lgn(Lgn(5,b+2),(b+2)/10|0)))),d=new R7((man(b+2,v1n),arn(Lgn(Lgn(5,b+2),(b+2)/10|0)))),kD(s,new Ym),kD(s,new Ym),kD(d,new Zm),kD(d,new Zm),y=new Zm,t=0;t<b;t++)for(u3(t,w.c.length),e=uG(w.c[t],30),u3(t,s.c.length),T=uG(s.c[t],85),g=new Ym,mv(s.c,g),u3(t,d.c.length),E=uG(d.c[t],15),m=new Zm,mv(d.c,m),r=new Ww(e.a);r.a<r.c.c.length;)if(Tdn(i=uG(N3(r),10)))mv(y.c,i);else{for(u=new Fz(ix(qgn(i).a.Kc(),new h));hDn(u);)Tdn(S=(a=uG(N9(u),18)).c.i)&&((j=uG(T.xc(oIn(S,(GYn(),rmt))),10))||(j=YLn(n,S),T.zc(oIn(S,rmt),j),E.Fc(j)),c2(a,uG(zq(j.j,1),12)));for(o=new Fz(ix(Xgn(i).a.Kc(),new h));hDn(o);)Tdn(P=(a=uG(N9(o),18)).d.i)&&((p=uG(cQ(g,oIn(P,(GYn(),rmt))),10))||(p=YLn(n,P),vJ(g,oIn(P,rmt),p),mv(m.c,p)),u2(a,uG(zq(p.j,0),12)))}for(f=0;f<d.c.length;f++)if(u3(f,d.c.length),!(v=uG(d.c[f],15)).dc())for(l=null,0==f?(l=new bQ(n),o3(0,w.c.length),pC(w.c,0,l)):f==s.c.length-1?(l=new bQ(n),mv(w.c,l)):(u3(f-1,w.c.length),l=uG(w.c[f-1],30)),c=v.Kc();c.Ob();)a2(uG(c.Pb(),10),l);for(k=new Ww(y);k.a<k.c.c.length;)a2(uG(N3(k),10),null);kfn(n,(GYn(),Rpt),y)}}function MYn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A,L;for(O=new Zm,w=new Ww(t.b);w.a<w.c.c.length;)for(y=new Ww(uG(N3(w),30).a);y.a<y.c.c.length;){for((k=uG(N3(y),10)).p=-1,l=j1n,j=j1n,S=new Ww(k.j);S.a<S.c.c.length;){for(c=new Ww((E=uG(N3(S),12)).e);c.a<c.c.c.length;)i=uG(N3(c),18),P=uG(oIn(i,(jYn(),uTt)),17).a,l=e.Math.max(l,P);for(r=new Ww(E.g);r.a<r.c.c.length;)i=uG(N3(r),18),P=uG(oIn(i,(jYn(),uTt)),17).a,j=e.Math.max(j,P)}kfn(k,iSt,xwn(l)),kfn(k,rSt,xwn(j))}for(p=0,b=new Ww(t.b);b.a<b.c.c.length;)for(y=new Ww(uG(N3(b),30).a);y.a<y.c.c.length;)(k=uG(N3(y),10)).p<0&&((I=new Tk).b=p++,yBn(n,k,I),mv(O.c,I));for(T=iR(O.c.length),f=iR(O.c.length),o=0;o<O.c.length;o++)kD(T,new Zm),kD(f,xwn(0));for($Wn(t,O,T,f),A=uG(Ekn(O,Inn(oSt,C9n,261,O.c.length,0,1)),854),M=uG(Ekn(T,Inn(yat,H3n,15,T.c.length,0,1)),198),h=Inn(YHt,W1n,28,f.c.length,15,1),u=0;u<h.length;u++)h[u]=(u3(u,f.c.length),uG(f.c[u],17)).a;for(m=0,v=new Zm,s=0;s<A.length;s++)0==h[s]&&mv(v.c,A[s]);for(g=Inn(YHt,W1n,28,A.length,15,1);0!=v.c.length;)for(g[(I=uG(i7(v,0),261)).b]=m++;!M[I.b].dc();)--h[(L=uG(M[I.b].gd(0),261)).b],0==h[L.b]&&mv(v.c,L);for(n.a=Inn(oSt,C9n,261,A.length,0,1),a=0;a<A.length;a++)for(d=A[a],C=g[a],n.a[C]=d,d.b=C,y=new Ww(d.e);y.a<y.c.c.length;)(k=uG(N3(y),10)).p=C;return n.a}function TYn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p;for(d=!1,u=!1,l=n+1,u3(n,t.c.length),o=(w=uG(t.c[n],186)).a,s=null,a=0;a<w.a.c.length;a++)if(u3(a,o.c.length),!(c=uG(o.c[a],172)).c)if(0!=c.b.c.length){if(c.k||(s&&OTn(s),oMn(c,(s=new r0(s?s.e+s.d+i:0,w.f,i)).e+s.d,w.f),kD(w.d,s),Gun(s,c),c.k=!0),h=null,p=null,a<w.a.c.length-1?p=uG(zq(w.a,a+1),172):l<t.c.length&&0!=(u3(l,t.c.length),uG(t.c[l],186)).a.c.length&&(p=uG(zq((u3(l,t.c.length),uG(t.c[l],186)).a,0),172)),g=!1,(h=p)&&(g=!udn(h.j,w)),h){if(0==h.b.c.length||oM(gK(uG(zq(h.b,0),27).of((S_n(),nAt))))){uEn(w,h);break}if(dtn(c,e-c.s),OTn(c.q),d|=FIn(w,c,h,e,i),0==h.b.c.length)for(t.c.length>l&&uEn((u3(l,t.c.length),uG(t.c[l],186)),h),h=null;t.c.length>l&&0==(u3(l,t.c.length),uG(t.c[l],186)).a.c.length;)men(t,(u3(l,t.c.length),t.c[l]));if(!h){--a;continue}if(!oM(gK(uG(zq(h.b,0),27).of((S_n(),nAt))))&&HUn(t,w,c,h,g,e,l,i)){d=!0;continue}if(g){if(b=w.b,f=h.f,!oM(gK(uG(zq(h.b,0),27).of(nAt)))&&EVn(t,w,c,h,e,l,i,r)){if(d=!0,b<f){u=!0,h.j=w;break}continue}if(Ybn(w,c)){c.c=!0,d=!0;continue}}else if(Ybn(w,c)){c.c=!0,d=!0;continue}if(d)continue}Ybn(w,c)?(c.c=!0,d=!0,h&&(h.k=!1)):OTn(c.q)}else bS(),String.fromCharCode(10),uEn(w,c),--a,d=!0;return new WO((qx(),!!d),!!u)}function jYn(){jYn=E,XYn(),lTt=jDt,bTt=EDt,wTt=SDt,dTt=PDt,pTt=CDt,mTt=IDt,yTt=ADt,TTt=NDt,jTt=$Dt,MTt=LDt,ETt=DDt,PTt=xDt,ITt=FDt,kTt=ODt,VYn(),fTt=Akt,gTt=Lkt,vTt=Nkt,STt=$kt,cTt=new _N(vDt,xwn(0)),aTt=Ckt,oTt=Ikt,uTt=Okt,qTt=ryt,RTt=Rkt,KTt=_kt,BTt=Vkt,FTt=Ukt,_Tt=qkt,zTt=syt,XTt=ayt,UTt=nyt,HTt=Ykt,GTt=eyt,LMt=vkt,NMt=kkt,Zyt=Ovt,nMt=Nvt,NTt=HDt,DTt=XDt,LTt=BDt,ATt=_Dt,Iwn(),new _N(UDt,$Tt=fKt),BMt=new CN(12),_Mt=new _N(W$t,BMt),_gn(),Vyt=new _N(k$t,Wyt=uxt),QMt=new _N(uDt,0),sTt=new _N(kDt,xwn(1)),dyt=new _N(c$t,r4n),FMt=z$t,JMt=sDt,eTt=gDt,_yt=w$t,byt=i$t,rMt=E$t,hTt=new _N(TDt,(qx(),!0)),sMt=C$t,hMt=I$t,DMt=_$t,KMt=q$t,xMt=H$t,xdn(),Byt=new _N(d$t,Uyt=ZDt),PMt=K$t,SMt=x$t,nTt=bDt,ZMt=lDt,tTt=dDt,Vkn(),new _N(tDt,GMt=tRt),XMt=rDt,zMt=cDt,VMt=aDt,qMt=iDt,xTt=xkt,MMt=rkt,yMt=ekt,OTt=Dkt,gMt=Vvt,Fyt=gvt,Kyt=wvt,Cyt=Jmt,Iyt=Ymt,Ayt=ivt,Oyt=Zmt,Ryt=lvt,jMt=akt,EMt=okt,lMt=Bvt,$Mt=jkt,IMt=fkt,eMt=xvt,AMt=pkt,Jyt=Svt,Yyt=Cvt,Pyt=l$t,CMt=ukt,vyt=Fmt,myt=Rmt,pyt=xmt,aMt=Fvt,cMt=Kvt,oMt=_vt,RMt=U$t,bMt=L$t,tMt=M$t,Xyt=m$t,qyt=p$t,Lyt=avt,YMt=fDt,gyt=f$t,uMt=P$t,WMt=oDt,HMt=J$t,UMt=Z$t,mMt=Jvt,vMt=Zvt,rTt=mDt,wyt=Dmt,kMt=tkt,zyt=Mvt,Gyt=kvt,TMt=$$t,wMt=qvt,OMt=wkt,CTt=RDt,Hyt=mvt,iTt=Skt,Qyt=jvt,Nyt=uvt,$yt=svt,dMt=zvt,Dyt=hvt,fMt=A$t,pMt=Qvt,xyt=fvt,Syt=Wmt,Tyt=qmt,yyt=Umt,Myt=Gmt,jyt=zmt,kyt=Bmt,Eyt=Vmt,iMt=Rvt}function EYn(n){var t,e,i;if(n.d>=n.j)return n.a=-1,void(n.c=1);if(t=VJ(n.i,n.d++),n.a=t,1!=n.b){switch(t){case 124:i=2;break;case 42:i=3;break;case 43:i=4;break;case 63:i=5;break;case 41:i=7;break;case 46:i=8;break;case 91:i=9;break;case 94:i=11;break;case 36:i=12;break;case 40:if(i=6,n.d>=n.j)break;if(63!=VJ(n.i,n.d))break;if(++n.d>=n.j)throw hv(new CM(rZn((t$(),iit))));switch(t=VJ(n.i,n.d++)){case 58:i=13;break;case 61:i=14;break;case 33:i=15;break;case 91:i=19;break;case 62:i=18;break;case 60:if(n.d>=n.j)throw hv(new CM(rZn((t$(),iit))));if(61==(t=VJ(n.i,n.d++)))i=16;else{if(33!=t)throw hv(new CM(rZn((t$(),rit))));i=17}break;case 35:for(;n.d<n.j&&41!=(t=VJ(n.i,n.d++)););if(41!=t)throw hv(new CM(rZn((t$(),cit))));i=21;break;default:if(45==t||97<=t&&t<=122||65<=t&&t<=90){--n.d,i=22;break}if(40==t){i=23;break}throw hv(new CM(rZn((t$(),iit))))}break;case 92:if(i=10,n.d>=n.j)throw hv(new CM(rZn((t$(),eit))));n.a=VJ(n.i,n.d++);break;default:i=0}n.c=i}else{switch(t){case 92:if(i=10,n.d>=n.j)throw hv(new CM(rZn((t$(),eit))));n.a=VJ(n.i,n.d++);break;case 45:512==(512&n.e)&&n.d<n.j&&91==VJ(n.i,n.d)?(++n.d,i=24):i=0;break;case 91:if(512!=(512&n.e)&&n.d<n.j&&58==VJ(n.i,n.d)){++n.d,i=20;break}default:(64512&t)==C0n&&n.d<n.j&&56320==(64512&(e=VJ(n.i,n.d)))&&(n.a=P0n+(t-C0n<<10)+e-56320,++n.d),i=0}n.c=i}}function SYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;if(e.Ug("Process compaction",1),oM(gK(oIn(t,(QGn(),iCt))))){for(r=uG(oIn(t,cCt),88),b=uM(pK(oIn(t,ECt))),AXn(n,t,r),fJn(t,b/2/2),Lon(w=t.b,new jp(r)),s=Fkn(w,0);s.b!=s.d.c;)if(!oM(gK(oIn(u=uG(I6(s),39),(OQn(),UPt))))){if(i=hBn(u,r),d=mqn(u,t),f=0,l=0,i)switch(g=i.e,r.g){case 2:f=g.a-b-u.f.a,d.e.a-b-u.f.a<f&&(f=d.e.a-b-u.f.a),l=f+u.f.a;break;case 1:f=g.a+i.f.a+b,d.e.a+b>f&&(f=d.e.a+d.f.a+b),l=f+u.f.a;break;case 4:f=g.b-b-u.f.b,d.e.b-b-u.f.b<f&&(f=d.e.b-b-u.f.b),l=f+u.f.b;break;case 3:f=g.b+i.f.b+b,d.e.b+b>f&&(f=d.e.b+d.f.b+b),l=f+u.f.b}else if(d)switch(r.g){case 2:l=(f=d.e.a-b-u.f.a)+u.f.a;break;case 1:l=(f=d.e.a+d.f.a+b)+u.f.a;break;case 4:l=(f=d.e.b-b-u.f.b)+u.f.b;break;case 3:l=(f=d.e.b+d.f.b+b)+u.f.b}xA(oIn(t,uCt))===xA((Pln(),wPt))?(c=f,a=l,null!=(o=lln(JJ(new fX(null,new h3(n.a,16)),new GI(c,a)))).a?r==(xdn(),JDt)||r==YDt?u.e.a=f:u.e.b=f:null!=(o=r==(xdn(),JDt)||r==nxt?lln(JJ(Wrn(new fX(null,new h3(n.a,16))),new Ep(c))):lln(JJ(Wrn(new fX(null,new h3(n.a,16))),new Sp(c)))).a&&(r==JDt||r==YDt?u.e.a=uM(pK((MK(null!=o.a),uG(o.a,42)).a)):u.e.b=uM(pK((MK(null!=o.a),uG(o.a,42)).a))),null!=o.a&&(h=Ten(n.a,(MK(null!=o.a),o.a),0))>0&&h!=uG(oIn(u,ACt),17).a&&(kfn(u,MPt,(qx(),!0)),kfn(u,ACt,xwn(h)))):r==(xdn(),JDt)||r==YDt?u.e.a=f:u.e.b=f}e.Vg()}}function PYn(n){var t,e,i,r,c,a,o,u;for(n.b=1,EYn(n),t=null,0==n.c&&94==n.a?(EYn(n),QYn(),QYn(),HFn(t=new K3(4),0,zct),a=new K3(4)):(QYn(),QYn(),a=new K3(4)),r=!0;1!=(u=n.c);){if(0==u&&93==n.a&&!r){t&&(lWn(t,a),a=t);break}if(e=n.a,i=!1,10==u)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:TXn(a,MUn(e)),i=!0;break;case 105:case 73:case 99:case 67:TXn(a,MUn(e)),(e=-1)<0&&(i=!0);break;case 112:case 80:if(!(o=PNn(n,e)))throw hv(new CM(rZn((t$(),git))));TXn(a,o),i=!0;break;default:e=R_n(n)}else if(24==u&&!r){if(t&&(lWn(t,a),a=t),lWn(a,PYn(n)),0!=n.c||93!=n.a)throw hv(new CM(rZn((t$(),kit))));break}if(EYn(n),!i){if(0==u){if(91==e)throw hv(new CM(rZn((t$(),yit))));if(93==e)throw hv(new CM(rZn((t$(),Mit))));if(45==e&&!r&&93!=n.a)throw hv(new CM(rZn((t$(),Tit))))}if(0!=n.c||45!=n.a||45==e&&r)HFn(a,e,e);else{if(EYn(n),1==(u=n.c))throw hv(new CM(rZn((t$(),mit))));if(0==u&&93==n.a)HFn(a,e,e),HFn(a,45,45);else{if(0==u&&93==n.a||24==u)throw hv(new CM(rZn((t$(),Tit))));if(c=n.a,0==u){if(91==c)throw hv(new CM(rZn((t$(),yit))));if(93==c)throw hv(new CM(rZn((t$(),Mit))));if(45==c)throw hv(new CM(rZn((t$(),Tit))))}else 10==u&&(c=R_n(n));if(EYn(n),e>c)throw hv(new CM(rZn((t$(),Sit))));HFn(a,e,c)}}}r=!1}if(1==n.c)throw hv(new CM(rZn((t$(),mit))));return pxn(a),szn(a),n.b=0,EYn(n),a}function CYn(n,t,e){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M;if(e.Ug("Coffman-Graham Layering",1),0!=t.a.c.length){for(M=uG(oIn(t,(jYn(),wMt)),17).a,u=0,a=0,b=new Ww(t.a);b.a<b.c.c.length;)for((l=uG(N3(b),10)).p=u++,c=new Fz(ix(Xgn(l).a.Kc(),new h));hDn(c);)(r=uG(N9(c),18)).p=a++;for(n.d=Inn(ZHt,B2n,28,u,16,1),n.a=Inn(ZHt,B2n,28,a,16,1),n.b=Inn(YHt,W1n,28,u,15,1),n.e=Inn(YHt,W1n,28,u,15,1),n.f=Inn(YHt,W1n,28,u,15,1),ban(n.c),BSn(n,t),d=new Kz(new Bg(n)),y=new Ww(t.a);y.a<y.c.c.length;){for(c=new Fz(ix(qgn(v=uG(N3(y),10)).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||++n.b[v.p];0==n.b[v.p]&&kG(_Cn(d,v),D0n)}for(o=0;0!=d.b.c.length;)for(v=uG(hin(d),10),n.f[v.p]=o++,c=new Fz(ix(Xgn(v).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||(p=r.d.i,--n.b[p.p],UNn(n.c,p,xwn(n.f[v.p])),0==n.b[p.p]&&kG(_Cn(d,p),D0n));for(w=new Kz(new Hg(n)),k=new Ww(t.a);k.a<k.c.c.length;){for(c=new Fz(ix(Xgn(v=uG(N3(k),10)).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||++n.e[v.p];0==n.e[v.p]&&kG(_Cn(w,v),D0n)}for(i=CJ(t,f=new Zm);0!=w.b.c.length;)for(m=uG(hin(w),10),(i.a.c.length>=M||!cvn(m,i))&&(i=CJ(t,f)),a2(m,i),c=new Fz(ix(qgn(m).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||(g=r.c.i,--n.e[g.p],0==n.e[g.p]&&kG(_Cn(w,g),D0n));for(s=f.c.length-1;s>=0;--s)kD(t.b,(u3(s,f.c.length),uG(f.c[s],30)));t.a.c.length=0,e.Vg()}else e.Vg()}function IYn(n,t){var e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k;k=!1;do{for(k=!1,c=t?new Lw(n.a.b).a.gc()-2:1;t?c>=0:c<new Lw(n.a.b).a.gc();c+=t?-1:1)for(r=W6(n.a,xwn(c)),b=0;b<r.b;b++)if(vR(f=uG(hyn(r,b),10),(GYn(),imt))&&!(VSn(n.a,xwn(c))&&n.r==(THn(),Pjt)||WSn(n.a,xwn(c))&&n.r==(THn(),Cjt))){for(v=!0,p=0;p<r.b;p++)vR(g=uG(hyn(r,p),10),imt)&&(t&&uG(oIn(f,imt),17).a<uG(oIn(g,imt),17).a||!t&&uG(oIn(f,imt),17).a>uG(oIn(g,imt),17).a)&&(v=!1);if(v){for(o=t?c+1:c-1,a=!1,m=!0,i=!1,s=Fkn(W6(n.a,xwn(o)),0);s.b!=s.d.c;)vR(u=uG(I6(s),10),imt)?u.p!=f.p&&(a|=t?uG(oIn(u,imt),17).a<uG(oIn(f,imt),17).a:uG(oIn(u,imt),17).a>uG(oIn(f,imt),17).a,m=!1):!a&&m&&u.k==(zIn(),bbt)&&(i=!0,(l=t?uG(N9(new Fz(ix(qgn(u).a.Kc(),new h))),18).c.i:uG(N9(new Fz(ix(Xgn(u).a.Kc(),new h))),18).d.i)==f&&(e=t?uG(N9(new Fz(ix(Xgn(u).a.Kc(),new h))),18).d.i:uG(N9(new Fz(ix(qgn(u).a.Kc(),new h))),18).c.i,(t?uG(ER(n.a,e),17).a-uG(ER(n.a,l),17).a:uG(ER(n.a,l),17).a-uG(ER(n.a,e),17).a)<=2&&(m=!1)));if(i&&m&&(e=t?uG(N9(new Fz(ix(Xgn(f).a.Kc(),new h))),18).d.i:uG(N9(new Fz(ix(qgn(f).a.Kc(),new h))),18).c.i,(t?uG(ER(n.a,e),17).a-uG(ER(n.a,f),17).a:uG(ER(n.a,f),17).a-uG(ER(n.a,e),17).a)<=2&&e.k==(zIn(),dbt)&&(m=!1)),a||m){for(d=SRn(n,f,t);0!=d.a.gc();)w=uG(d.a.ec().Kc().Pb(),10),d.a.Bc(w),Qon(d,SRn(n,w,t));--b,k=!0}}}}while(k)}function OYn(n){Hxn(n.c,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#decimal"])),Hxn(n.d,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#integer"])),Hxn(n.e,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#boolean"])),Hxn(n.f,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EBoolean",Bet,"EBoolean:Object"])),Hxn(n.i,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#byte"])),Hxn(n.g,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#hexBinary"])),Hxn(n.j,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EByte",Bet,"EByte:Object"])),Hxn(n.n,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EChar",Bet,"EChar:Object"])),Hxn(n.t,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#double"])),Hxn(n.u,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EDouble",Bet,"EDouble:Object"])),Hxn(n.F,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#float"])),Hxn(n.G,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EFloat",Bet,"EFloat:Object"])),Hxn(n.I,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#int"])),Hxn(n.J,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EInt",Bet,"EInt:Object"])),Hxn(n.N,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#long"])),Hxn(n.O,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"ELong",Bet,"ELong:Object"])),Hxn(n.Z,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#short"])),Hxn(n.$,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EShort",Bet,"EShort:Object"])),Hxn(n._,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#string"]))}function AYn(n,t,e,i,r,c,a){var o,u,s,h,f,l,b,w;return l=uG(i.a,17).a,b=uG(i.b,17).a,f=n.b,w=n.c,o=0,h=0,t==(xdn(),JDt)||t==YDt?(h=$I(jdn(ZJ(YJ(new fX(null,new h3(e.b,16)),new mo),new Ya))),f.e.b+f.f.b/2>h?(s=++b,o=uM(pK(yx(Wz(YJ(new fX(null,new h3(e.b,16)),new pO(r,s)),new Za))))):(u=++l,o=uM(pK(yx(Qz(YJ(new fX(null,new h3(e.b,16)),new mO(r,u)),new no)))))):(h=$I(jdn(ZJ(YJ(new fX(null,new h3(e.b,16)),new ro),new Ja))),f.e.a+f.f.a/2>h?(s=++b,o=uM(pK(yx(Wz(YJ(new fX(null,new h3(e.b,16)),new dO(r,s)),new to))))):(u=++l,o=uM(pK(yx(Qz(YJ(new fX(null,new h3(e.b,16)),new gO(r,u)),new eo)))))),t==JDt?(cL(n.a,new MO(uM(pK(oIn(f,(OQn(),DPt))))-r,o)),cL(n.a,new MO(w.e.a+w.f.a+r+c,o)),cL(n.a,new MO(w.e.a+w.f.a+r+c,w.e.b+w.f.b/2)),cL(n.a,new MO(w.e.a+w.f.a,w.e.b+w.f.b/2))):t==YDt?(cL(n.a,new MO(uM(pK(oIn(f,(OQn(),$Pt))))+r,f.e.b+f.f.b/2)),cL(n.a,new MO(f.e.a+f.f.a+r,o)),cL(n.a,new MO(w.e.a-r-c,o)),cL(n.a,new MO(w.e.a-r-c,w.e.b+w.f.b/2)),cL(n.a,new MO(w.e.a,w.e.b+w.f.b/2))):t==nxt?(cL(n.a,new MO(o,uM(pK(oIn(f,(OQn(),DPt))))-r)),cL(n.a,new MO(o,w.e.b+w.f.b+r+c)),cL(n.a,new MO(w.e.a+w.f.a/2,w.e.b+w.f.b+r+c)),cL(n.a,new MO(w.e.a+w.f.a/2,w.e.b+w.f.b+r))):(0==n.a.b||(uG(pR(n.a),8).b=uM(pK(oIn(f,(OQn(),$Pt))))+r*uG(a.b,17).a),cL(n.a,new MO(o,uM(pK(oIn(f,(OQn(),$Pt))))+r*uG(a.b,17).a)),cL(n.a,new MO(o,w.e.b-r*uG(a.a,17).a-c))),new WO(xwn(l),xwn(b))}function LYn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b;if(a=!0,f=null,i=null,r=null,t=!1,b=HFt,s=null,c=null,(u=jkn(n,o=0,YFt,ZFt))<n.length&&(s3(u,n.length),58==n.charCodeAt(u))&&(Knn(o,u,n.length),f=n.substr(o,u-o),o=u+1),e=null!=f&&ZE(UFt,f.toLowerCase())){if(-1==(u=n.lastIndexOf("!/")))throw hv(new vM("no archive separator"));a=!0,i=r1(n,o,++u),o=u}else o>=0&&m_(n.substr(o,2),"//")?(Knn(o+=2,u=jkn(n,o,n_t,t_t),n.length),i=n.substr(o,u-o),o=u):null==f||o!=n.length&&(s3(o,n.length),47==n.charCodeAt(o))||(a=!1,-1==(u=cx(n,$Cn(35),o))&&(u=n.length),Knn(o,u,n.length),i=n.substr(o,u-o),o=u);if(!e&&o<n.length&&(s3(o,n.length),47==n.charCodeAt(o))&&(Knn(o+1,u=jkn(n,o+1,n_t,t_t),n.length),(h=n.substr(o+1,u-(o+1))).length>0&&58==VJ(h,h.length-1)&&(r=h,o=u)),o<n.length&&(s3(o,n.length),47==n.charCodeAt(o))&&(++o,t=!0),o<n.length&&(s3(o,n.length),63!=n.charCodeAt(o))&&(s3(o,n.length),35!=n.charCodeAt(o))){for(l=new Zm;o<n.length&&(s3(o,n.length),63!=n.charCodeAt(o))&&(s3(o,n.length),35!=n.charCodeAt(o));)kD(l,(Knn(o,u=jkn(n,o,n_t,t_t),n.length),n.substr(o,u-o))),(o=u)<n.length&&(s3(o,n.length),47==n.charCodeAt(o))&&(Ubn(n,++o)||l.c.push(""));Ekn(l,b=Inn($ot,zZn,2,l.c.length,6,1))}return o<n.length&&(s3(o,n.length),63==n.charCodeAt(o))&&(-1==(u=aR(n,35,++o))&&(u=n.length),Knn(o,u,n.length),s=n.substr(o,u-o),o=u),o<n.length&&(c=sQ(n,++o)),LVn(a,f,i,r,b,s),new Z_n(a,f,i,r,t,b,s,c)}function NYn(){NYn=E,aYn(),UNn(rbt=new K1,(KQn(),PRt),SRt),UNn(rbt,RRt,SRt),UNn(rbt,CRt,SRt),UNn(rbt,$Rt,SRt),UNn(rbt,NRt,SRt),UNn(rbt,ARt,SRt),UNn(rbt,$Rt,PRt),UNn(rbt,SRt,MRt),UNn(rbt,PRt,MRt),UNn(rbt,RRt,MRt),UNn(rbt,CRt,MRt),UNn(rbt,LRt,MRt),UNn(rbt,$Rt,MRt),UNn(rbt,NRt,MRt),UNn(rbt,ARt,MRt),UNn(rbt,ERt,MRt),UNn(rbt,SRt,DRt),UNn(rbt,PRt,DRt),UNn(rbt,MRt,DRt),UNn(rbt,RRt,DRt),UNn(rbt,CRt,DRt),UNn(rbt,LRt,DRt),UNn(rbt,$Rt,DRt),UNn(rbt,ERt,DRt),UNn(rbt,xRt,DRt),UNn(rbt,NRt,DRt),UNn(rbt,IRt,DRt),UNn(rbt,ARt,DRt),UNn(rbt,PRt,RRt),UNn(rbt,CRt,RRt),UNn(rbt,$Rt,RRt),UNn(rbt,ARt,RRt),UNn(rbt,PRt,CRt),UNn(rbt,RRt,CRt),UNn(rbt,$Rt,CRt),UNn(rbt,CRt,CRt),UNn(rbt,NRt,CRt),UNn(rbt,SRt,TRt),UNn(rbt,PRt,TRt),UNn(rbt,MRt,TRt),UNn(rbt,DRt,TRt),UNn(rbt,RRt,TRt),UNn(rbt,CRt,TRt),UNn(rbt,LRt,TRt),UNn(rbt,$Rt,TRt),UNn(rbt,xRt,TRt),UNn(rbt,ERt,TRt),UNn(rbt,ARt,TRt),UNn(rbt,NRt,TRt),UNn(rbt,ORt,TRt),UNn(rbt,SRt,xRt),UNn(rbt,PRt,xRt),UNn(rbt,MRt,xRt),UNn(rbt,RRt,xRt),UNn(rbt,CRt,xRt),UNn(rbt,LRt,xRt),UNn(rbt,$Rt,xRt),UNn(rbt,ERt,xRt),UNn(rbt,ARt,xRt),UNn(rbt,IRt,xRt),UNn(rbt,ORt,xRt),UNn(rbt,PRt,ERt),UNn(rbt,RRt,ERt),UNn(rbt,CRt,ERt),UNn(rbt,$Rt,ERt),UNn(rbt,xRt,ERt),UNn(rbt,ARt,ERt),UNn(rbt,NRt,ERt),UNn(rbt,SRt,jRt),UNn(rbt,PRt,jRt),UNn(rbt,MRt,jRt),UNn(rbt,RRt,jRt),UNn(rbt,CRt,jRt),UNn(rbt,LRt,jRt),UNn(rbt,$Rt,jRt),UNn(rbt,ERt,jRt),UNn(rbt,ARt,jRt),UNn(rbt,PRt,NRt),UNn(rbt,MRt,NRt),UNn(rbt,DRt,NRt),UNn(rbt,CRt,NRt),UNn(rbt,SRt,IRt),UNn(rbt,PRt,IRt),UNn(rbt,DRt,IRt),UNn(rbt,RRt,IRt),UNn(rbt,CRt,IRt),UNn(rbt,LRt,IRt),UNn(rbt,$Rt,IRt),UNn(rbt,$Rt,ORt),UNn(rbt,CRt,ORt),UNn(rbt,ERt,SRt),UNn(rbt,ERt,RRt),UNn(rbt,ERt,MRt),UNn(rbt,LRt,SRt),UNn(rbt,LRt,PRt),UNn(rbt,LRt,DRt)}function $Yn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;switch(e.Ug("Brandes & Koepf node placement",1),n.a=t,n.c=ZGn(t),i=uG(oIn(t,(jYn(),IMt)),281),b=oM(gK(oIn(t,OMt))),n.d=i==(ESn(),Fgt)&&!b||i==xgt,mVn(n,t),k=null,y=null,g=null,p=null,man(4,g1n),d=new R7(4),uG(oIn(t,IMt),281).g){case 3:g=new WHn(t,n.c.d,(w0(),wSt),(b0(),hSt)),mv(d.c,g);break;case 1:p=new WHn(t,n.c.d,(w0(),dSt),(b0(),hSt)),mv(d.c,p);break;case 4:k=new WHn(t,n.c.d,(w0(),wSt),(b0(),fSt)),mv(d.c,k);break;case 2:y=new WHn(t,n.c.d,(w0(),dSt),(b0(),fSt)),mv(d.c,y);break;default:g=new WHn(t,n.c.d,(w0(),wSt),(b0(),hSt)),p=new WHn(t,n.c.d,dSt,hSt),k=new WHn(t,n.c.d,wSt,fSt),y=new WHn(t,n.c.d,dSt,fSt),mv(d.c,k),mv(d.c,y),mv(d.c,g),mv(d.c,p)}for(r=new LI(t,n.c),o=new Ww(d);o.a<o.c.c.length;)dJn(r,c=uG(N3(o),185),n.b),oXn(c);for(l=new xjn(t,n.c),u=new Ww(d);u.a<u.c.c.length;)HVn(l,c=uG(N3(u),185));if(e._g())for(s=new Ww(d);s.a<s.c.c.length;)c=uG(N3(s),185),e.bh(c+" size is "+uxn(c));if(f=null,n.d&&qqn(t,h=cJn(n,d,n.c.d),e)&&(f=h),!f)for(s=new Ww(d);s.a<s.c.c.length;)qqn(t,c=uG(N3(s),185),e)&&(!f||uxn(f)>uxn(c))&&(f=c);for(!f&&(u3(0,d.c.length),f=uG(d.c[0],185)),w=new Ww(t.b);w.a<w.c.c.length;)for(v=new Ww(uG(N3(w),30).a);v.a<v.c.c.length;)(m=uG(N3(v),10)).n.b=uM(f.p[m.p])+uM(f.d[m.p]);for(e._g()&&(e.bh("Chosen node placement: "+f),e.bh("Blocks: "+O$n(f)),e.bh("Classes: "+$Dn(f,e)),e.bh("Marked edges: "+n.b)),a=new Ww(d);a.a<a.c.c.length;)(c=uG(N3(a),185)).g=null,c.b=null,c.a=null,c.d=null,c.j=null,c.i=null,c.p=null;J6(n.c),n.b.a.$b(),e.Vg()}function DYn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C;if(1==n.c.length)return ySn((u3(0,n.c.length),uG(n.c[0],121))),u3(0,n.c.length),uG(n.c[0],121);if(n.c.length<=0)return new L7;for(s=new Ww(n);s.a<s.c.c.length;){for(o=uG(N3(s),121),v=0,d=vZn,g=vZn,b=j1n,w=j1n,m=Fkn(o.b,0);m.b!=m.d.c;)p=uG(I6(m),39),v+=uG(oIn(p,(QGn(),yCt)),17).a,d=e.Math.min(d,p.e.a),g=e.Math.min(g,p.e.b),b=e.Math.max(b,p.e.a+p.f.a),w=e.Math.max(w,p.e.b+p.f.b);kfn(o,(QGn(),yCt),xwn(v)),kfn(o,(OQn(),kPt),new MO(d,g)),kfn(o,vPt,new MO(b,w))}for(hZ(),f$(n,new Ta),zsn(y=new L7,(u3(0,n.c.length),uG(n.c[0],96))),l=0,S=0,h=new Ww(n);h.a<h.c.c.length;)o=uG(N3(h),121),M=YF(D$(uG(oIn(o,(OQn(),vPt)),8)),uG(oIn(o,kPt),8)),l=e.Math.max(l,M.a),S+=M.a*M.b;for(l=e.Math.max(l,e.Math.sqrt(S)*uM(pK(oIn(y,(QGn(),eCt))))),P=0,C=0,f=0,t=T=uM(pK(oIn(y,ECt))),u=new Ww(n);u.a<u.c.c.length;)o=uG(N3(u),121),P+(M=YF(D$(uG(oIn(o,(OQn(),vPt)),8)),uG(oIn(o,kPt),8))).a>l&&(P=0,C+=f+T,f=0),rUn(y,o,P,C),t=e.Math.max(t,P+M.a),f=e.Math.max(f,M.b),P+=M.a+T;for(k=new Ym,i=new Ym,E=new Ww(n);E.a<E.c.c.length;)for(r=oM(gK(oIn(j=uG(N3(E),121),(XYn(),w$t)))),a=(j.q?j.q:Vot).vc().Kc();a.Ob();)PV(k,(c=uG(a.Pb(),44)).ld())?xA(uG(c.ld(),149).Sg())!==xA(c.md())&&(r&&PV(i,c.ld())?(bS(),uG(c.ld(),149).Pg(),String.fromCharCode(10)):(vJ(k,uG(c.ld(),149),c.md()),kfn(y,uG(c.ld(),149),c.md()),r&&vJ(i,uG(c.ld(),149),c.md()))):(vJ(k,uG(c.ld(),149),c.md()),kfn(y,uG(c.ld(),149),c.md()));return ySn(y),y}function xYn(n,t){switch(n.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new yZ(n.b,n.a,t,n.c);case 1:return new TD(n.a,t,emn(t.Dh(),n.c));case 43:return new CD(n.a,t,emn(t.Dh(),n.c));case 3:return new MD(n.a,t,emn(t.Dh(),n.c));case 45:return new PD(n.a,t,emn(t.Dh(),n.c));case 41:return new ltn(uG(bEn(n.c),29),n.a,t,emn(t.Dh(),n.c));case 50:return new xan(uG(bEn(n.c),29),n.a,t,emn(t.Dh(),n.c));case 5:return new r_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 47:return new c_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 7:return new fV(n.a,t,emn(t.Dh(),n.c),n.d.n);case 49:return new i_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 9:return new SD(n.a,t,emn(t.Dh(),n.c));case 11:return new ED(n.a,t,emn(t.Dh(),n.c));case 13:return new jD(n.a,t,emn(t.Dh(),n.c));case 15:return new _G(n.a,t,emn(t.Dh(),n.c));case 17:return new AD(n.a,t,emn(t.Dh(),n.c));case 19:return new OD(n.a,t,emn(t.Dh(),n.c));case 21:return new ID(n.a,t,emn(t.Dh(),n.c));case 23:return new FG(n.a,t,emn(t.Dh(),n.c));case 25:return new l_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 27:return new f_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 29:return new s_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 31:return new a_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 33:return new h_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 35:return new u_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 37:return new o_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 39:return new wV(n.a,t,emn(t.Dh(),n.c),n.d.n);case 40:return new wsn(t,emn(t.Dh(),n.c));default:throw hv(new Ky("Unknown feature style: "+n.e))}}function RYn(n){var t,e,i,r,c,a,o,u;for(c=0,r=n.a.b,u=Fkn(n.a,0);u.b!=u.d.c;){if(o=uG(I6(u),240),a=(c+1)/(r+1),!n.c&&!n.d)return;n.c&&!n.d?(n.g=!0,n.b==(xdn(),JDt)?(i=n.c.e.b+n.c.f.b+n.e*(c+1),t=new MO(uM(pK(oIn(n.c,(OQn(),$Pt))))+n.e,i),e=new MO(uM(pK(oIn(n.c,DPt)))-n.e,i)):n.b==YDt?(i=n.c.e.b+n.c.f.b+n.e*(c+1),t=new MO(uM(pK(oIn(n.c,(OQn(),DPt))))-n.e,i),e=new MO(uM(pK(oIn(n.c,$Pt)))+n.e,i)):n.b==nxt?(t=new MO(i=n.c.e.a+n.c.f.a+n.e*(c+1),uM(pK(oIn(n.c,(OQn(),$Pt))))+n.e),e=new MO(i,uM(pK(oIn(n.c,DPt)))-n.e)):(t=new MO(i=n.c.e.a+n.c.f.a+n.e*(c+1),uM(pK(oIn(n.c,(OQn(),DPt))))-n.e),e=new MO(i,uM(pK(oIn(n.c,$Pt)))+n.e))):n.c&&n.d?n.b==(xdn(),JDt)?(i=n.d.e.b*a+(n.c.e.b+n.c.f.b)*(1-a),t=new MO(uM(pK(oIn(n.c,(OQn(),$Pt))))+n.e,i),e=new MO(uM(pK(oIn(n.c,DPt)))-n.e,i)):n.b==YDt?(i=n.d.e.b*a+(n.c.e.b+n.c.f.b)*(1-a),t=new MO(uM(pK(oIn(n.c,(OQn(),DPt))))-n.e,i),e=new MO(uM(pK(oIn(n.c,$Pt)))+n.e,i)):n.b==nxt?(t=new MO(i=n.d.e.a*a+(n.c.e.a+n.c.f.a)*(1-a),uM(pK(oIn(n.c,(OQn(),$Pt))))+n.e),e=new MO(i,uM(pK(oIn(n.c,DPt)))-n.e)):(t=new MO(i=n.d.e.a*a+(n.c.e.a+n.c.f.a)*(1-a),uM(pK(oIn(n.c,(OQn(),DPt))))-n.e),e=new MO(i,uM(pK(oIn(n.c,$Pt)))+n.e)):(n.f=!0,n.b==(xdn(),JDt)?(i=n.d.e.b-n.e*(c+1),t=new MO(uM(pK(oIn(n.d,(OQn(),$Pt))))+n.e,i),e=new MO(uM(pK(oIn(n.d,DPt)))-n.e,i)):n.b==YDt?(i=n.d.e.b-n.e*(c+1),t=new MO(uM(pK(oIn(n.d,(OQn(),DPt))))-n.e,i),e=new MO(uM(pK(oIn(n.d,$Pt)))+n.e,i)):n.b==nxt?(t=new MO(i=n.d.e.a-n.e*(c+1),uM(pK(oIn(n.d,(OQn(),$Pt))))+n.e),e=new MO(i,uM(pK(oIn(n.d,DPt)))-n.e)):(t=new MO(i=n.d.e.a-n.e*(c+1),uM(pK(oIn(n.d,(OQn(),DPt))))-n.e),e=new MO(i,uM(pK(oIn(n.d,$Pt)))+n.e))),uG(o.a,8).a=t.a,uG(o.a,8).b=t.b,o.b.a=e.a,o.b.b=e.b,++c}}function KYn(n,t,e,i,r,c){var a,o,u,s,h,f,l;switch(t){case 71:a=i.q.getFullYear()-V1n>=-1900?1:0,JA(n,e>=4?Uhn(cT($ot,1),zZn,2,6,[Q1n,J1n])[a]:Uhn(cT($ot,1),zZn,2,6,["BC","AD"])[a]);break;case 121:Kkn(n,e,i);break;case 77:tUn(n,e,i);break;case 107:Fen(n,0==(o=r.q.getHours())?24:o,e);break;case 83:PRn(n,e,r);break;case 69:u=i.q.getDay(),JA(n,5==e?Uhn(cT($ot,1),zZn,2,6,["S","M","T","W","T","F","S"])[u]:4==e?Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n])[u]:Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[u]);break;case 97:r.q.getHours()>=12&&r.q.getHours()<24?JA(n,Uhn(cT($ot,1),zZn,2,6,["AM","PM"])[1]):JA(n,Uhn(cT($ot,1),zZn,2,6,["AM","PM"])[0]);break;case 104:Fen(n,0==(s=r.q.getHours()%12)?12:s,e);break;case 75:Fen(n,r.q.getHours()%12,e);break;case 72:Fen(n,r.q.getHours(),e);break;case 99:h=i.q.getDay(),5==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["S","M","T","W","T","F","S"])[h]):4==e?JA(n,Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n])[h]):3==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[h]):Fen(n,h,1);break;case 76:f=i.q.getMonth(),5==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[f]):4==e?JA(n,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n])[f]):3==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[f]):Fen(n,f+1,e);break;case 81:l=i.q.getMonth()/3|0,JA(n,e<4?Uhn(cT($ot,1),zZn,2,6,["Q1","Q2","Q3","Q4"])[l]:Uhn(cT($ot,1),zZn,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[l]);break;case 100:Fen(n,i.q.getDate(),e);break;case 109:Fen(n,r.q.getMinutes(),e);break;case 115:Fen(n,r.q.getSeconds(),e);break;case 122:JA(n,e<4?c.c[0]:c.c[1]);break;case 118:JA(n,c.b);break;case 90:JA(n,e<3?GLn(c):3==e?rNn(c):cNn(c.a));break;default:return!1}return!0}function FYn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C;if(iHn(t),u=uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84),h=uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84),o=lCn(u),s=lCn(h),a=0==(!t.a&&(t.a=new fV(oFt,t,6,6)),t.a).i?null:uG(zrn((!t.a&&(t.a=new fV(oFt,t,6,6)),t.a),0),166),M=uG(cQ(n.a,o),10),S=uG(cQ(n.a,s),10),T=null,P=null,F$(u,193)&&(F$(y=uG(cQ(n.a,u),304),12)?T=uG(y,12):F$(y,10)&&(M=uG(y,10),T=uG(zq(M.j,0),12))),F$(h,193)&&(F$(E=uG(cQ(n.a,h),304),12)?P=uG(E,12):F$(E,10)&&(S=uG(E,10),P=uG(zq(S.j,0),12))),!M||!S)throw hv(new EM("The source or the target of edge "+t+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(zsn(d=new UZ,t),kfn(d,(GYn(),rmt),t),kfn(d,(jYn(),bMt),null),b=uG(oIn(i,Hpt),21),M==S&&b.Fc((r_n(),opt)),T||(can(),k=Wjt,j=null,a&&sN(uG(oIn(M,JMt),101))&&($5(j=new MO(a.j,a.k),s0(t)),Q8(j,e),Ern(s,o)&&(k=Vjt,JF(j,M.n))),T=LXn(M,j,k,i)),P||(can(),k=Vjt,C=null,a&&sN(uG(oIn(S,JMt),101))&&($5(C=new MO(a.b,a.c),s0(t)),Q8(C,e)),P=LXn(S,C,k,HQ(S))),c2(d,T),u2(d,P),(T.e.c.length>1||T.g.c.length>1||P.e.c.length>1||P.g.c.length>1)&&b.Fc((r_n(),ept)),l=new DD((!t.n&&(t.n=new fV(lFt,t,1,7)),t.n));l.e!=l.i.gc();)if(!oM(gK(zDn(f=uG(Zkn(l),135),FMt)))&&f.a)switch(g=own(f),kD(d.b,g),uG(oIn(g,Xyt),278).g){case 1:case 2:b.Fc((r_n(),npt));break;case 0:b.Fc((r_n(),Ygt)),kfn(g,Xyt,(Zrn(),ixt))}if(c=uG(oIn(i,Kyt),322),p=uG(oIn(i,$Mt),323),r=c==(jan(),Ydt)||p==(pyn(),kjt),a&&0!=(!a.a&&(a.a=new MD(eFt,a,5)),a.a).i&&r){for(m=COn(a),w=new Uk,v=Fkn(m,0);v.b!=v.d.c;)aq(w,new eN(uG(I6(v),8)));kfn(d,cmt,w)}return d}function _Yn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I;for(j=0,E=0,M=new Ym,k=uG(yx(Wz(YJ(new fX(null,new h3(n.b,16)),new io),new fo)),17).a+1,T=Inn(YHt,W1n,28,k,15,1),d=Inn(YHt,W1n,28,k,15,1),w=0;w<k;w++)T[w]=0,d[w]=0;for(s=uG(l8(_0(new fX(null,new h3(n.a,16))),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Kc();s.Ob();)if(u=uG(s.Pb(),65),P=uG(oIn(u.b,(QGn(),ACt)),17).a,(v=(I=uG(oIn(u.c,ACt),17).a)-P)>1)for(o=P+1;o<I;o++){if(h=o,y=uG(l8(JJ(new fX(null,new h3(n.b,16)),new Np(h)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15),b=0,t==(xdn(),JDt)||t==YDt){for(y.jd(new so),b=0;b<y.gc()&&(g=(o-P)/(I-P),!(uG(y.Xb(b),39).e.b>u.b.e.b*(1-g)+u.c.e.b*g));b++);if(y.gc()>0){if(C=0==u.a.b?D$(u.b.e):uG(pR(u.a),8),m=JF(D$(uG(y.Xb(y.gc()-1),39).e),uG(y.Xb(y.gc()-1),39).f),f=JF(D$(uG(y.Xb(0),39).e),uG(y.Xb(0),39).f),b>=y.gc()-1&&C.b>m.b&&u.c.e.b>m.b)continue;if(b<=0&&C.b<f.a&&u.c.e.b<f.b)continue}}else{for(y.jd(new ho),b=0;b<y.gc()&&(g=(o-P)/(I-P),!(uG(y.Xb(b),39).e.a>u.b.e.a*(1-g)+u.c.e.a*g));b++);if(y.gc()>0){if(C=0==u.a.b?D$(u.b.e):uG(pR(u.a),8),m=JF(D$(uG(y.Xb(y.gc()-1),39).e),uG(y.Xb(y.gc()-1),39).f),f=JF(D$(uG(y.Xb(0),39).e),uG(y.Xb(0),39).f),b>=y.gc()-1&&C.a>m.a&&u.c.e.a>m.a)continue;if(b<=0&&C.a<f.a&&u.c.e.a<f.a)continue}}r=new sj,c=new sj,aq(u.a,r),aq(u.a,c),a=new LU(r,c,u),PV(M,Hvn(p=S3(Nz(o,32),E3(b,L0n))))?(aq((l=uG(cQ(M,Hvn(p)),675)).a,a),hN(l.b)?Lon(l.a,new vo):Lon(l.a,new ko),RYn(l)):(l=new wTn(0==b?null:uG(y.Xb(b-1),39),b==y.gc()?null:uG(y.Xb(b),39),a,n),vJ(M,Hvn(p),l)),t==JDt||t==YDt?(l.f&&l.d.e.b<=uM(pK(oIn(n,(OQn(),IPt))))&&++j,l.g&&l.c.e.b+l.c.f.b>=uM(pK(oIn(n,(OQn(),CPt))))&&++E):(l.f&&l.d.e.a<=uM(pK(oIn(n,(OQn(),PPt))))&&++j,l.g&&l.c.e.a+l.c.f.a>=uM(pK(oIn(n,(OQn(),SPt))))&&++E)}else 0==v?hNn(u):v<0&&(++T[P],++d[I],j=uG((S=AYn(u,t,n,new WO(xwn(j),xwn(E)),e,i,new WO(xwn(d[I]),xwn(T[P])))).a,17).a,E=uG(S.b,17).a)}function BYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(i=t,u=e,n.b&&i.j==(KQn(),_Rt)&&u.j==(KQn(),_Rt)&&(m=i,i=u,u=m),PV(n.a,i)){if(cS(uG(cQ(n.a,i),49),u))return 1}else vJ(n.a,i,new ek);if(PV(n.a,u)){if(cS(uG(cQ(n.a,u),49),i))return-1}else vJ(n.a,u,new ek);if(PV(n.d,i)){if(cS(uG(cQ(n.d,i),49),u))return-1}else vJ(n.d,i,new ek);if(PV(n.d,u)){if(cS(uG(cQ(n.a,u),49),i))return 1}else vJ(n.d,u,new ek);if(i.j!=u.j)return-1==(p=bN(i.j,u.j))?hHn(n,u,i):hHn(n,i,u),p;if(0!=i.e.c.length&&0!=u.e.c.length){if(n.b&&0!=(p=Dbn(i,u)))return-1==p?hHn(n,u,i):1==p&&hHn(n,i,u),p;if((c=uG(zq(i.e,0),18).c.i)==(h=uG(zq(u.e,0),18).c.i))return(r=uG(oIn(uG(zq(i.e,0),18),(GYn(),imt)),17).a)>(s=uG(oIn(uG(zq(u.e,0),18),imt),17).a)?hHn(n,i,u):hHn(n,u,i),r<s?-1:r>s?1:0;for(d=0,g=(w=n.c).length;d<g;++d){if((b=w[d])==c)return hHn(n,i,u),1;if(b==h)return hHn(n,u,i),-1}}return 0!=i.g.c.length&&0!=u.g.c.length?(o=uG(oIn(i,(GYn(),tmt)),10),l=uG(oIn(u,tmt),10),n.e==(yvn(),Bjt)&&o&&l&&vR(o,imt)&&vR(l,imt)?((r=uG(oIn(o,imt),17).a)>(s=uG(oIn(l,imt),17).a)?hHn(n,i,u):hHn(n,u,i),r<s?-1:r>s?1:0):n.b&&0!=(p=Dbn(i,u))?(-1==p?hHn(n,u,i):1==p&&hHn(n,i,u),p):(a=0,f=0,vR(uG(zq(i.g,0),18),imt)&&(a=uG(oIn(uG(zq(i.g,0),18),imt),17).a),vR(uG(zq(u.g,0),18),imt)&&(f=uG(oIn(uG(zq(i.g,0),18),imt),17).a),o&&o==l?oM(gK(oIn(uG(zq(i.g,0),18),pmt)))&&!oM(gK(oIn(uG(zq(u.g,0),18),pmt)))?(hHn(n,i,u),1):!oM(gK(oIn(uG(zq(i.g,0),18),pmt)))&&oM(gK(oIn(uG(zq(u.g,0),18),pmt)))?(hHn(n,u,i),-1):(a>f?hHn(n,i,u):hHn(n,u,i),a<f?-1:a>f?1:0):(n.f&&(n.f._b(o)&&(a=uG(n.f.xc(o),17).a),n.f._b(l)&&(f=uG(n.f.xc(l),17).a)),a>f?hHn(n,i,u):hHn(n,u,i),a<f?-1:a>f?1:0))):0!=i.e.c.length&&0!=u.g.c.length?(hHn(n,i,u),1):0!=i.g.c.length&&0!=u.e.c.length?(hHn(n,u,i),-1):vR(i,(GYn(),imt))&&vR(u,imt)?((r=uG(oIn(i,imt),17).a)>(s=uG(oIn(u,imt),17).a)?hHn(n,i,u):hHn(n,u,i),r<s?-1:r>s?1:0):(hHn(n,u,i),-1)}function HYn(n){n.gb||(n.gb=!0,n.b=Nsn(n,0),Von(n.b,18),Won(n.b,19),n.a=Nsn(n,1),Von(n.a,1),Won(n.a,2),Won(n.a,3),Won(n.a,4),Won(n.a,5),n.o=Nsn(n,2),Von(n.o,8),Von(n.o,9),Won(n.o,10),Won(n.o,11),Won(n.o,12),Won(n.o,13),Won(n.o,14),Won(n.o,15),Won(n.o,16),Won(n.o,17),Won(n.o,18),Won(n.o,19),Won(n.o,20),Won(n.o,21),Won(n.o,22),Won(n.o,23),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),n.p=Nsn(n,3),Von(n.p,2),Von(n.p,3),Von(n.p,4),Von(n.p,5),Won(n.p,6),Won(n.p,7),rrn(n.p),rrn(n.p),n.q=Nsn(n,4),Von(n.q,8),n.v=Nsn(n,5),Won(n.v,9),rrn(n.v),rrn(n.v),rrn(n.v),n.w=Nsn(n,6),Von(n.w,2),Von(n.w,3),Von(n.w,4),Won(n.w,5),n.B=Nsn(n,7),Won(n.B,1),rrn(n.B),rrn(n.B),rrn(n.B),n.Q=Nsn(n,8),Won(n.Q,0),rrn(n.Q),n.R=Nsn(n,9),Von(n.R,1),n.S=Nsn(n,10),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),n.T=Nsn(n,11),Won(n.T,10),Won(n.T,11),Won(n.T,12),Won(n.T,13),Won(n.T,14),rrn(n.T),rrn(n.T),n.U=Nsn(n,12),Von(n.U,2),Von(n.U,3),Won(n.U,4),Won(n.U,5),Won(n.U,6),Won(n.U,7),rrn(n.U),n.V=Nsn(n,13),Won(n.V,10),n.W=Nsn(n,14),Von(n.W,18),Von(n.W,19),Von(n.W,20),Won(n.W,21),Won(n.W,22),Won(n.W,23),n.bb=Nsn(n,15),Von(n.bb,10),Von(n.bb,11),Von(n.bb,12),Von(n.bb,13),Von(n.bb,14),Von(n.bb,15),Von(n.bb,16),Won(n.bb,17),rrn(n.bb),rrn(n.bb),n.eb=Nsn(n,16),Von(n.eb,2),Von(n.eb,3),Von(n.eb,4),Von(n.eb,5),Von(n.eb,6),Von(n.eb,7),Won(n.eb,8),Won(n.eb,9),n.ab=Nsn(n,17),Von(n.ab,0),Von(n.ab,1),n.H=Nsn(n,18),Won(n.H,0),Won(n.H,1),Won(n.H,2),Won(n.H,3),Won(n.H,4),Won(n.H,5),rrn(n.H),n.db=Nsn(n,19),Won(n.db,2),n.c=$sn(n,20),n.d=$sn(n,21),n.e=$sn(n,22),n.f=$sn(n,23),n.i=$sn(n,24),n.g=$sn(n,25),n.j=$sn(n,26),n.k=$sn(n,27),n.n=$sn(n,28),n.r=$sn(n,29),n.s=$sn(n,30),n.t=$sn(n,31),n.u=$sn(n,32),n.fb=$sn(n,33),n.A=$sn(n,34),n.C=$sn(n,35),n.D=$sn(n,36),n.F=$sn(n,37),n.G=$sn(n,38),n.I=$sn(n,39),n.J=$sn(n,40),n.L=$sn(n,41),n.M=$sn(n,42),n.N=$sn(n,43),n.O=$sn(n,44),n.P=$sn(n,45),n.X=$sn(n,46),n.Y=$sn(n,47),n.Z=$sn(n,48),n.$=$sn(n,49),n._=$sn(n,50),n.cb=$sn(n,51),n.K=$sn(n,52))}function UYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(a=new lS,v=uG(oIn(e,(jYn(),Byt)),88),d=0,Qon(a,(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));0!=a.b;)(xA(zDn(s=R0(h=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),27)),Syt))!==xA((yvn(),Fjt))||xA(zDn(s,Fyt))===xA((kvn(),lgt))||xA(zDn(s,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(s,Cyt)))||xA(zDn(s,kyt))!==xA((Uvn(),tbt))||xA(zDn(s,yMt))===xA((THn(),Pjt))||xA(zDn(s,yMt))===xA((THn(),Cjt))||xA(zDn(s,MMt))===xA((MKn(),JTt))||xA(zDn(s,MMt))===xA((MKn(),ZTt)))&&!oM(gK(zDn(h,jyt)))&&Myn(h,(GYn(),imt),xwn(d++)),!oM(gK(zDn(h,FMt)))&&(l=0!=(!h.a&&(h.a=new fV(bFt,h,10,11)),h.a).i,w=oCn(h),b=xA(zDn(h,rMt))===xA((Own(),Ixt)),p=null,(E=!vnn(h,(XYn(),e$t))||L9(mK(zDn(h,e$t))))&&b&&(l||w)&&(kfn(p=PGn(h),Byt,v),vR(p,fTt)&&iM(new omn(uM(pK(oIn(p,fTt)))),p),0!=uG(zDn(h,DMt),181).gc()&&(f=p,kS(new fX(null,(!h.c&&(h.c=new fV(wFt,h,9,9)),new h3(h.c,16))),new Yd(f)),u_n(h,p))),k=e,(y=uG(cQ(n.a,R0(h)),10))&&(k=y.e),g=RJn(n,h,k),p&&(g.e=p,p.e=g,Qon(a,(!h.a&&(h.a=new fV(bFt,h,10,11)),h.a))));for(d=0,s8(a,t,a.c.b,a.c);0!=a.b;){for(u=new DD((!(c=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),27)).b&&(c.b=new fV(aFt,c,12,3)),c.b));u.e!=u.i.gc();)iHn(o=uG(Zkn(u),74)),(xA(zDn(t,Syt))!==xA((yvn(),Fjt))||xA(zDn(t,Fyt))===xA((kvn(),lgt))||xA(zDn(t,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(t,Cyt)))||xA(zDn(t,kyt))!==xA((Uvn(),tbt))||xA(zDn(t,yMt))===xA((THn(),Pjt))||xA(zDn(t,yMt))===xA((THn(),Cjt))||xA(zDn(t,MMt))===xA((MKn(),JTt))||xA(zDn(t,MMt))===xA((MKn(),ZTt)))&&Myn(o,(GYn(),imt),xwn(d++)),T=lCn(uG(zrn((!o.b&&(o.b=new f_(cFt,o,4,7)),o.b),0),84)),j=lCn(uG(zrn((!o.c&&(o.c=new f_(cFt,o,5,8)),o.c),0),84)),oM(gK(zDn(o,FMt)))||oM(gK(zDn(T,FMt)))||oM(gK(zDn(j,FMt)))||(m=c,BNn(o)&&oM(gK(zDn(T,sMt)))&&oM(gK(zDn(o,hMt)))||Ern(j,T)?m=T:Ern(T,j)&&(m=j),k=e,(y=uG(cQ(n.a,m),10))&&(k=y.e),kfn(FYn(n,o,m,k),(GYn(),Ipt),SFn(n,o,t,e)));if(b=xA(zDn(c,rMt))===xA((Own(),Ixt)))for(r=new DD((!c.a&&(c.a=new fV(bFt,c,10,11)),c.a));r.e!=r.i.gc();)E=!vnn(i=uG(Zkn(r),27),(XYn(),e$t))||L9(mK(zDn(i,e$t))),M=xA(zDn(i,rMt))===xA(Ixt),E&&M&&s8(a,i,a.c.b,a.c)}}function GYn(){var n,t;GYn=E,rmt=new Cm(E4n),Ipt=new Cm("coordinateOrigin"),wmt=new Cm("processors"),Cpt=new uF("compoundNode",(qx(),!1)),qpt=new uF("insideConnections",!1),cmt=new Cm("originalBendpoints"),amt=new Cm("originalDummyNodePosition"),omt=new Cm("originalLabelEdge"),gmt=new Cm("representedLabels"),$pt=new Cm("endLabels"),Dpt=new Cm("endLabel.origin"),Qpt=new uF("labelSide",(Ajn(),Rxt)),emt=new uF("maxEdgeThickness",0),pmt=new uF("reversed",!1),dmt=new Cm(S4n),Zpt=new uF("longEdgeSource",null),nmt=new uF("longEdgeTarget",null),Ypt=new uF("longEdgeHasLabelDummies",!1),Jpt=new uF("longEdgeBeforeLabelDummy",!1),Npt=new uF("edgeConstraint",(Pfn(),kgt)),zpt=new Cm("inLayerLayoutUnit"),Xpt=new uF("inLayerConstraint",(Zen(),gpt)),Vpt=new uF("inLayerSuccessorConstraint",new Zm),Wpt=new uF("inLayerSuccessorConstraintBetweenNonDummies",!1),lmt=new Cm("portDummy"),Opt=new uF("crossingHint",xwn(0)),Hpt=new uF("graphProperties",new nB(t=uG(Mj(bpt),9),uG(MF(t,t.length),9),0)),Fpt=new uF("externalPortSide",(KQn(),FRt)),_pt=new uF("externalPortSize",new sj),Rpt=new Cm("externalPortReplacedDummies"),Kpt=new Cm("externalPortReplacedDummy"),xpt=new uF("externalPortConnections",new nB(n=uG(Mj(YRt),9),uG(MF(n,n.length),9),0)),bmt=new uF(i3n,0),jpt=new Cm("barycenterAssociates"),Pmt=new Cm("TopSideComments"),Ept=new Cm("BottomSideComments"),Ppt=new Cm("CommentConnectionPort"),Gpt=new uF("inputCollect",!1),hmt=new uF("outputCollect",!1),Lpt=new uF("cyclic",!1),Apt=new Cm("crossHierarchyMap"),Smt=new Cm("targetOffset"),new uF("splineLabelSize",new sj),kmt=new Cm("spacings"),fmt=new uF("partitionConstraint",!1),Spt=new Cm("breakingPoint.info"),jmt=new Cm("splines.survivingEdge"),Tmt=new Cm("splines.route.start"),ymt=new Cm("splines.edgeChain"),smt=new Cm("originalPortConstraints"),vmt=new Cm("selfLoopHolder"),Mmt=new Cm("splines.nsPortY"),imt=new Cm("modelOrder"),tmt=new Cm("longEdgeTargetNode"),Bpt=new uF(_6n,!1),mmt=new uF(_6n,!1),Upt=new Cm("layerConstraints.hiddenNodes"),umt=new Cm("layerConstraints.opposidePort"),Emt=new Cm("targetNode.modelOrder")}function qYn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d;for(l=Fkn(n.b,0);l.b!=l.d.c;)if(!m_((f=uG(I6(l),39)).c,H9n))for(a=uG(l8(new fX(null,new h3(zNn(f,n),16)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),t==(xdn(),JDt)||t==YDt?a.jd(new oo):a.jd(new uo),d=a.gc(),c=0;c<d;c++)o=1==d?.5:(1+c)/(d+1),t==JDt?(h=uM(pK(oIn(f,(OQn(),$Pt)))),f.e.a+f.f.a+r<h?cL(uG(a.Xb(c),65).a,new MO(h+i,f.e.b+f.f.b*o)):uG(a.Xb(c),65).a.b>0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(s-w)/(e.Math.abs(u-b)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a+r/5.3,w>s?f.e.b+f.f.b*o-r/2:f.e.b+f.f.b*o+r/2))),cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a,f.e.b+f.f.b*o))):t==YDt?(h=uM(pK(oIn(f,(OQn(),DPt)))),f.e.a-r>h?cL(uG(a.Xb(c),65).a,new MO(h-i,f.e.b+f.f.b*o)):uG(a.Xb(c),65).a.b>0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(s-w)/(e.Math.abs(u-b)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(f.e.a-r/5.3,w>s?f.e.b+f.f.b*o-r/2:f.e.b+f.f.b*o+r/2))),cL(uG(a.Xb(c),65).a,new MO(f.e.a,f.e.b+f.f.b*o))):t==nxt?(h=uM(pK(oIn(f,(OQn(),$Pt)))),f.e.b+f.f.b+r<h?cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,h+i)):uG(a.Xb(c),65).a.b>0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(u-b)/(e.Math.abs(s-w)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(b>u?f.e.a+f.f.a*o-r/2:f.e.a+f.f.a*o+r/2,f.e.b+r/5.3+f.f.b))),cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,f.e.b+f.f.b))):(h=uM(pK(oIn(f,(OQn(),DPt)))),uln(uG(a.Xb(c),65),n)?cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,uG(pR(uG(a.Xb(c),65).a),8).b)):f.e.b-r>h?cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,h-i)):uG(a.Xb(c),65).a.b>0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(u-b)/(e.Math.abs(s-w)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(b>u?f.e.a+f.f.a*o-r/2:f.e.a+f.f.a*o+r/2,f.e.b-r/5.3))),cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,f.e.b)))}function XYn(){var n,t;XYn=E,e$t=new Cm(Vnt),yDt=new Cm(Wnt),nMn(),i$t=new mL(X8n,r$t=CNt),new Jm,c$t=new mL(R3n,null),a$t=new Cm(Qnt),ZSn(),b$t=WX(ZNt,Uhn(cT(txt,1),p1n,297,0,[WNt])),l$t=new mL(r9n,b$t),w$t=new mL(q8n,(qx(),!1)),xdn(),d$t=new mL(W8n,g$t=ZDt),_gn(),k$t=new mL(m8n,y$t=fxt),j$t=new mL(Xnt,!1),Own(),E$t=new mL(b8n,S$t=Oxt),Q$t=new CN(12),W$t=new mL(K3n,Q$t),O$t=new mL(f4n,!1),A$t=new mL(g9n,!1),V$t=new mL(w4n,!1),$Pn(),sDt=new mL(l4n,hDt=sRt),mDt=new Cm(b9n),vDt=new Cm(a4n),kDt=new Cm(s4n),TDt=new Cm(h4n),N$t=new Uk,L$t=new mL(c9n,N$t),f$t=new mL(u9n,!1),P$t=new mL(s9n,!1),new Cm(Jnt),D$t=new Nk,$$t=new mL(w9n,D$t),z$t=new mL(U8n,!1),new Jm,MDt=new mL(Ynt,1),h$t=new Cm(Znt),s$t=new Cm(ntt),HDt=new mL(k4n,!1),new mL(ttt,!0),xwn(0),new mL(ett,xwn(100)),new mL(itt,!1),xwn(0),new mL(rtt,xwn(4e3)),xwn(0),new mL(ctt,xwn(400)),new mL(att,!1),new mL(ott,!1),new mL(utt,!0),new mL(stt,!1),qpn(),o$t=new mL(znt,u$t=TKt),jDt=new mL(A8n,10),EDt=new mL(L8n,10),SDt=new mL(D3n,20),PDt=new mL(N8n,10),CDt=new mL(u4n,2),IDt=new mL($8n,10),ADt=new mL(D8n,0),LDt=new mL(K8n,5),NDt=new mL(x8n,1),$Dt=new mL(R8n,1),DDt=new mL(o4n,20),xDt=new mL(F8n,10),FDt=new mL(_8n,10),ODt=new Cm(B8n),KDt=new qL,RDt=new mL(d9n,KDt),Z$t=new Cm(l9n),J$t=new mL(f9n,Y$t=!1),R$t=new CN(5),x$t=new mL(Q8n,R$t),VDn(),t=uG(Mj(eRt),9),F$t=new nB(t,uG(MF(t,t.length),9),0),K$t=new mL(m4n,F$t),Vkn(),tDt=new mL(Z8n,eDt=Zxt),rDt=new Cm(n9n),cDt=new Cm(t9n),aDt=new Cm(e9n),iDt=new Cm(i9n),n=uG(Mj(sKt),9),B$t=new nB(n,uG(MF(n,n.length),9),0),_$t=new mL(p4n,B$t),X$t=ggn((oUn(),eKt)),q$t=new mL(g4n,X$t),G$t=new MO(0,0),U$t=new mL(x4n,G$t),H$t=new mL(d4n,!1),Zrn(),m$t=new mL(a9n,v$t=ixt),p$t=new mL(b4n,!1),new Cm(htt),xwn(1),new mL(ftt,null),oDt=new Cm(h9n),fDt=new Cm(o9n),KQn(),gDt=new mL(G8n,pDt=FRt),uDt=new Cm(H8n),eNn(),wDt=ggn(gRt),bDt=new mL(v4n,wDt),lDt=new mL(J8n,!1),dDt=new mL(Y8n,!0),new Jm,XDt=new mL(y4n,1),VDt=new mL(ltt,null),BDt=new mL(M4n,150),_Dt=new mL(T4n,1.414),UDt=new mL(j4n,null),GDt=new mL(btt,1),C$t=new mL(z8n,!1),I$t=new mL(V8n,!1),M$t=new mL(x3n,1),RCn(),new mL(wtt,T$t=mxt),nDt=!0,Iwn(),zDt=fKt,WDt=fKt,qDt=fKt}function zYn(){zYn=E,qbt=new CC("DIRECTION_PREPROCESSOR",0),Hbt=new CC("COMMENT_PREPROCESSOR",1),Xbt=new CC("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),uwt=new CC("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),Pwt=new CC("PARTITION_PREPROCESSOR",4),lwt=new CC("LABEL_DUMMY_INSERTER",5),Nwt=new CC("SELF_LOOP_PREPROCESSOR",6),pwt=new CC("LAYER_CONSTRAINT_PREPROCESSOR",7),Ewt=new CC("PARTITION_MIDPROCESSOR",8),iwt=new CC("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),ywt=new CC("NODE_PROMOTION",10),gwt=new CC("LAYER_CONSTRAINT_POSTPROCESSOR",11),Swt=new CC("PARTITION_POSTPROCESSOR",12),Zbt=new CC("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),Dwt=new CC("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),xbt=new CC("BREAKING_POINT_INSERTER",15),kwt=new CC("LONG_EDGE_SPLITTER",16),Iwt=new CC("PORT_SIDE_PROCESSOR",17),swt=new CC("INVERTED_PORT_PROCESSOR",18),Cwt=new CC("PORT_LIST_SORTER",19),Rwt=new CC("SORT_BY_INPUT_ORDER_OF_MODEL",20),Twt=new CC("NORTH_SOUTH_PORT_PREPROCESSOR",21),Rbt=new CC("BREAKING_POINT_PROCESSOR",22),jwt=new CC(p6n,23),Kwt=new CC(m6n,24),Awt=new CC("SELF_LOOP_PORT_RESTORER",25),xwt=new CC("SINGLE_EDGE_GRAPH_WRAPPER",26),hwt=new CC("IN_LAYER_CONSTRAINT_PROCESSOR",27),Qbt=new CC("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),fwt=new CC("LABEL_AND_NODE_SIZE_PROCESSOR",29),owt=new CC("INNERMOST_NODE_MARGIN_CALCULATOR",30),$wt=new CC("SELF_LOOP_ROUTER",31),_bt=new CC("COMMENT_NODE_MARGIN_CALCULATOR",32),Vbt=new CC("END_LABEL_PREPROCESSOR",33),wwt=new CC("LABEL_DUMMY_SWITCHER",34),Fbt=new CC("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),dwt=new CC("LABEL_SIDE_SELECTOR",36),cwt=new CC("HYPEREDGE_DUMMY_MERGER",37),nwt=new CC("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),mwt=new CC("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),ewt=new CC("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),Ubt=new CC("CONSTRAINTS_POSTPROCESSOR",41),Bbt=new CC("COMMENT_POSTPROCESSOR",42),awt=new CC("HYPERNODE_PROCESSOR",43),twt=new CC("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),vwt=new CC("LONG_EDGE_JOINER",45),Lwt=new CC("SELF_LOOP_POSTPROCESSOR",46),Kbt=new CC("BREAKING_POINT_REMOVER",47),Mwt=new CC("NORTH_SOUTH_PORT_POSTPROCESSOR",48),rwt=new CC("HORIZONTAL_COMPACTOR",49),bwt=new CC("LABEL_DUMMY_REMOVER",50),Jbt=new CC("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),Wbt=new CC("END_LABEL_SORTER",52),Owt=new CC("REVERSED_EDGE_RESTORER",53),zbt=new CC("END_LABEL_POSTPROCESSOR",54),Ybt=new CC("HIERARCHICAL_NODE_RESIZER",55),Gbt=new CC("DIRECTION_POSTPROCESSOR",56)}function VYn(){VYn=E,Vin(),mvt=new mL(B6n,vvt=dgt),xvt=new mL(H6n,(qx(),!1)),Y6(),Bvt=new mL(U6n,Hvt=kpt),akt=new mL(G6n,!1),okt=new mL(q6n,!0),Dmt=new mL(X6n,!1),nin(),Skt=new mL(z6n,Pkt=Gjt),xwn(1),Dkt=new mL(V6n,xwn(7)),xkt=new mL(W6n,!1),Rvt=new mL(Q6n,!1),kvn(),gvt=new mL(J6n,pvt=sgt),MKn(),rkt=new mL(Y6n,ckt=rjt),Gpn(),Vvt=new mL(Z6n,Wvt=Lmt),xwn(-1),zvt=new mL(n5n,null),xwn(-1),Qvt=new mL(t5n,xwn(-1)),xwn(-1),Jvt=new mL(e5n,xwn(4)),xwn(-1),Zvt=new mL(i5n,xwn(2)),THn(),ekt=new mL(r5n,ikt=$jt),xwn(0),tkt=new mL(c5n,xwn(0)),qvt=new mL(a5n,xwn(vZn)),jan(),wvt=new mL(o5n,dvt=Zdt),Jmt=new mL(u5n,!1),avt=new mL(s5n,.1),lvt=new mL(h5n,!1),uvt=new mL(f5n,null),svt=new mL(l5n,null),xwn(-1),hvt=new mL(b5n,null),xwn(-1),fvt=new mL(w5n,xwn(-1)),xwn(0),Ymt=new mL(d5n,xwn(40)),ihn(),ivt=new mL(g5n,rvt=lpt),Zmt=new mL(p5n,nvt=hpt),pyn(),jkt=new mL(m5n,Ekt=vjt),wkt=new Cm(v5n),Wtn(),ukt=new mL(k5n,skt=Lgt),ESn(),fkt=new mL(y5n,lkt=Fgt),new Jm,pkt=new mL(M5n,.3),vkt=new Cm(T5n),Yyn(),kkt=new mL(j5n,ykt=djt),isn(),Svt=new mL(E5n,Pvt=nEt),Sln(),Cvt=new mL(S5n,Ivt=aEt),kbn(),Ovt=new mL(P5n,Avt=fEt),Nvt=new mL(C5n,.2),jvt=new mL(I5n,2),Akt=new mL(O5n,null),Nkt=new mL(A5n,10),Lkt=new mL(L5n,10),$kt=new mL(N5n,20),xwn(0),Ckt=new mL($5n,xwn(0)),xwn(0),Ikt=new mL(D5n,xwn(0)),xwn(0),Okt=new mL(x5n,xwn(0)),xmt=new mL(R5n,!1),RIn(),Fmt=new mL(K5n,_mt=Vgt),H7(),Rmt=new mL(F5n,Kmt=Wdt),Fvt=new mL(_5n,!1),xwn(0),Kvt=new mL(B5n,xwn(16)),xwn(0),_vt=new mL(H5n,xwn(5)),zhn(),ryt=new mL(U5n,cyt=kEt),Rkt=new mL(G5n,10),_kt=new mL(q5n,1),ran(),Vkt=new mL(X5n,Wkt=cgt),Ukt=new Cm(z5n),Xkt=xwn(1),xwn(0),qkt=new mL(V5n,Xkt),ian(),syt=new mL(W5n,hyt=wEt),ayt=new Cm(Q5n),nyt=new mL(J5n,!0),Ykt=new mL(Y5n,2),eyt=new mL(Z5n,!0),tOn(),Mvt=new mL(n8n,Tvt=Cgt),vAn(),kvt=new mL(t8n,yvt=Hdt),yvn(),Wmt=new mL(e8n,Qmt=Fjt),Vmt=new mL(i8n,!1),zmt=new mL(r8n,!1),Uvn(),Bmt=new mL(c8n,Hmt=tbt),Cwn(),qmt=new mL(a8n,Xmt=ujt),Umt=new mL(o8n,0),Gmt=new mL(u8n,0),Gvt=fgt,Uvt=Ydt,Yvt=ijt,nkt=ijt,Xvt=YTt,Own(),ovt=Ixt,bvt=Zdt,cvt=Zdt,tvt=Zdt,evt=Ixt,dkt=Mjt,gkt=vjt,hkt=vjt,bkt=vjt,mkt=yjt,Tkt=Mjt,Mkt=Mjt,_gn(),Lvt=hxt,$vt=hxt,Dvt=fEt,Evt=sxt,Kkt=yEt,Fkt=vEt,Bkt=yEt,Hkt=vEt,Qkt=yEt,Jkt=vEt,Gkt=rgt,zkt=cgt,fyt=yEt,lyt=vEt,oyt=yEt,uyt=vEt,tyt=vEt,Zkt=vEt,iyt=vEt}function WYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A,L,N,$,D,x,R,K,F,_,B,H,U,G,q,X,z,V,W,Q,J,Y,Z,nn,tn,en,rn,cn,an,on,un;for(Y=0,N=0,x=(O=t).length;N<x;++N)for(G=new Ww((C=O[N]).j);G.a<G.c.c.length;){for(X=0,u=new Ww((U=uG(N3(G),12)).g);u.a<u.c.c.length;)o=uG(N3(u),18),C.c!=o.d.i.c&&++X;X>0&&(n.a[U.p]=Y++)}for(rn=0,$=0,R=(A=i).length;$<R;++$){for(K=0,G=new Ww((C=A[$]).j);G.a<G.c.c.length&&(U=uG(N3(G),12)).j==(KQn(),yRt);)for(u=new Ww(U.e);u.a<u.c.c.length;)if(o=uG(N3(u),18),C.c!=o.c.i.c){++K;break}for(_=0,z=new N4(C.j,C.j.c.length);z.b>0;){for(MK(z.b>0),X=0,u=new Ww((U=uG(z.a.Xb(z.c=--z.b),12)).e);u.a<u.c.c.length;)o=uG(N3(u),18),C.c!=o.c.i.c&&++X;X>0&&(U.j==(KQn(),yRt)?(n.a[U.p]=rn,++rn):(n.a[U.p]=rn+K+_,++_))}rn+=_}for(q=new Ym,d=new XL,L=0,D=(I=t).length;L<D;++L)for(tn=new Ww((C=I[L]).j);tn.a<tn.c.c.length;)for(u=new Ww((nn=uG(N3(tn),12)).g);u.a<u.c.c.length;)if(an=(o=uG(N3(u),18)).d,C.c!=an.i.c)if(Z=uG(DA(FX(q.f,nn)),477),cn=uG(DA(FX(q.f,an)),477),Z||cn)if(Z)if(cn)if(Z==cn)kD(Z.a,o);else{for(kD(Z.a,o),H=new Ww(cn.d);H.a<H.c.c.length;)B=uG(N3(H),12),VAn(q.f,B,Z);Ohn(Z.a,cn.a),Ohn(Z.d,cn.d),d.a.Bc(cn)}else kD(Z.a,o),kD(Z.d,an),VAn(q.f,an,Z);else kD(cn.a,o),kD(cn.d,nn),VAn(q.f,nn,cn);else w=new BF,d.a.zc(w,d),kD(w.a,o),kD(w.d,nn),VAn(q.f,nn,w),kD(w.d,an),VAn(q.f,an,w);for(g=uG(oTn(d,Inn(QEt,{3:1,4:1,5:1,2045:1},477,d.a.gc(),0,1)),2045),P=t[0].c,J=i[0].c,l=0,b=(f=g).length;l<b;++l)for((h=f[l]).e=Y,h.f=rn,G=new Ww(h.d);G.a<G.c.c.length;)U=uG(N3(G),12),V=n.a[U.p],U.i.c==P?(V<h.e&&(h.e=V),V>h.b&&(h.b=V)):U.i.c==J&&(V<h.f&&(h.f=V),V>h.c&&(h.c=V));for(Ntn(g,0,g.length,null),en=Inn(YHt,W1n,28,g.length,15,1),r=Inn(YHt,W1n,28,rn+1,15,1),m=0;m<g.length;m++)en[m]=g[m].f,r[en[m]]=1;for(a=0,v=0;v<r.length;v++)1==r[v]?r[v]=a:--a;for(W=0,k=0;k<en.length;k++)en[k]+=r[en[k]],W=e.Math.max(W,en[k]+1);for(s=1;s<W;)s*=2;for(un=2*s-1,s-=1,on=Inn(YHt,W1n,28,un,15,1),c=0,E=0;E<en.length;E++)for(++on[j=en[E]+s];j>0;)j%2>0&&(c+=on[j+1]),++on[j=(j-1)/2|0];for(S=Inn(ZEt,EZn,374,2*g.length,0,1),y=0;y<g.length;y++)S[2*y]=new bY(g[y],g[y].e,g[y].b,(Z6(),YEt)),S[2*y+1]=new bY(g[y],g[y].b,g[y].e,JEt);for(Ntn(S,0,S.length,null),F=0,M=0;M<S.length;M++)switch(S[M].d.g){case 0:++F;break;case 1:c+=--F}for(Q=Inn(ZEt,EZn,374,2*g.length,0,1),T=0;T<g.length;T++)Q[2*T]=new bY(g[T],g[T].f,g[T].c,(Z6(),YEt)),Q[2*T+1]=new bY(g[T],g[T].c,g[T].f,JEt);for(Ntn(Q,0,Q.length,null),F=0,p=0;p<Q.length;p++)switch(Q[p].d.g){case 0:++F;break;case 1:c+=--F}return c}function QYn(){QYn=E,OHt=new Qm(7),AHt=new IX(8,94),new IX(8,64),LHt=new IX(8,36),KHt=new IX(8,65),FHt=new IX(8,122),_Ht=new IX(8,90),UHt=new IX(8,98),xHt=new IX(8,66),BHt=new IX(8,60),GHt=new IX(8,62),IHt=new Qm(11),HFn(CHt=new K3(4),48,57),HFn(HHt=new K3(4),48,57),HFn(HHt,65,90),HFn(HHt,95,95),HFn(HHt,97,122),HFn(RHt=new K3(4),9,9),HFn(RHt,10,10),HFn(RHt,12,12),HFn(RHt,13,13),HFn(RHt,32,32),NHt=FGn(CHt),DHt=FGn(HHt),$Ht=FGn(RHt),jHt=new Ym,EHt=new Ym,SHt=Uhn(cT($ot,1),zZn,2,6,["Cn","Lu","Ll","Lt","Lm","Lo","Mn","Me","Mc","Nd","Nl","No","Zs","Zl","Zp","Cc","Cf",null,"Co","Cs","Pd","Ps","Pe","Pc","Po","Sm","Sc","Sk","So","Pi","Pf","L","M","N","Z","C","P","S"]),THt=Uhn(cT($ot,1),zZn,2,6,["Basic Latin","Latin-1 Supplement","Latin Extended-A","Latin Extended-B","IPA Extensions","Spacing Modifier Letters","Combining Diacritical Marks","Greek","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul Jamo","Ethiopic","Cherokee","Unified Canadian Aboriginal Syllabics","Ogham","Runic","Khmer","Mongolian","Latin Extended Additional","Greek Extended","General Punctuation","Superscripts and Subscripts","Currency Symbols","Combining Marks for Symbols","Letterlike Symbols","Number Forms","Arrows","Mathematical Operators","Miscellaneous Technical","Control Pictures","Optical Character Recognition","Enclosed Alphanumerics","Box Drawing","Block Elements","Geometric Shapes","Miscellaneous Symbols","Dingbats","Braille Patterns","CJK Radicals Supplement","Kangxi Radicals","Ideographic Description Characters","CJK Symbols and Punctuation","Hiragana","Katakana","Bopomofo","Hangul Compatibility Jamo","Kanbun","Bopomofo Extended","Enclosed CJK Letters and Months","CJK Compatibility","CJK Unified Ideographs Extension A","CJK Unified Ideographs","Yi Syllables","Yi Radicals","Hangul Syllables",eat,"CJK Compatibility Ideographs","Alphabetic Presentation Forms","Arabic Presentation Forms-A","Combining Half Marks","CJK Compatibility Forms","Small Form Variants","Arabic Presentation Forms-B","Specials","Halfwidth and Fullwidth Forms","Old Italic","Gothic","Deseret","Byzantine Musical Symbols","Musical Symbols","Mathematical Alphanumeric Symbols","CJK Unified Ideographs Extension B","CJK Compatibility Ideographs Supplement","Tags"]),PHt=Uhn(cT(YHt,1),W1n,28,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])}function JYn(){JYn=E,oht=new pun("OUT_T_L",0,(Ktn(),Ast),(Yen(),Rst),(Yrn(),jst),jst,Uhn(cT(kat,1),EZn,21,0,[WX((VDn(),qxt),Uhn(cT(eRt,1),p1n,95,0,[Vxt,Bxt]))])),aht=new pun("OUT_T_C",1,Ost,Rst,jst,Est,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,_xt])),WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,_xt,Hxt]))])),uht=new pun("OUT_T_R",2,Lst,Rst,jst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Uxt]))])),Yst=new pun("OUT_B_L",3,Ast,Fst,Sst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Bxt]))])),Jst=new pun("OUT_B_C",4,Ost,Fst,Sst,Est,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,_xt])),WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,_xt,Hxt]))])),Zst=new pun("OUT_B_R",5,Lst,Fst,Sst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Uxt]))])),eht=new pun("OUT_L_T",6,Lst,Fst,jst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Bxt,Vxt,Hxt]))])),tht=new pun("OUT_L_C",7,Lst,Kst,Est,jst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Bxt,zxt])),WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Bxt,zxt,Hxt]))])),nht=new pun("OUT_L_B",8,Lst,Rst,Sst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Bxt,Xxt,Hxt]))])),cht=new pun("OUT_R_T",9,Ast,Fst,jst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Uxt,Vxt,Hxt]))])),rht=new pun("OUT_R_C",10,Ast,Kst,Est,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Uxt,zxt])),WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Uxt,zxt,Hxt]))])),iht=new pun("OUT_R_B",11,Ast,Rst,Sst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Uxt,Xxt,Hxt]))])),Wst=new pun("IN_T_L",12,Ast,Fst,jst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Bxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Bxt,Hxt]))])),Vst=new pun("IN_T_C",13,Ost,Fst,jst,Est,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,_xt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,_xt,Hxt]))])),Qst=new pun("IN_T_R",14,Lst,Fst,jst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Uxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Uxt,Hxt]))])),Xst=new pun("IN_C_L",15,Ast,Kst,Est,jst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Bxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Bxt,Hxt]))])),qst=new pun("IN_C_C",16,Ost,Kst,Est,Est,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,_xt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,_xt,Hxt]))])),zst=new pun("IN_C_R",17,Lst,Kst,Est,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Uxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Uxt,Hxt]))])),Ust=new pun("IN_B_L",18,Ast,Rst,Sst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Bxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Bxt,Hxt]))])),Hst=new pun("IN_B_C",19,Ost,Rst,Sst,Est,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,_xt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,_xt,Hxt]))])),Gst=new pun("IN_B_R",20,Lst,Rst,Sst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Uxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Uxt,Hxt]))])),sht=new pun(Y2n,21,null,null,null,null,Uhn(cT(kat,1),EZn,21,0,[]))}function YYn(){YYn=E,j_t=(tQ(),M_t).b,uG(zrn(gZ(M_t.b),0),35),uG(zrn(gZ(M_t.b),1),19),T_t=M_t.a,uG(zrn(gZ(M_t.a),0),35),uG(zrn(gZ(M_t.a),1),19),uG(zrn(gZ(M_t.a),2),19),uG(zrn(gZ(M_t.a),3),19),uG(zrn(gZ(M_t.a),4),19),E_t=M_t.o,uG(zrn(gZ(M_t.o),0),35),uG(zrn(gZ(M_t.o),1),35),P_t=uG(zrn(gZ(M_t.o),2),19),uG(zrn(gZ(M_t.o),3),19),uG(zrn(gZ(M_t.o),4),19),uG(zrn(gZ(M_t.o),5),19),uG(zrn(gZ(M_t.o),6),19),uG(zrn(gZ(M_t.o),7),19),uG(zrn(gZ(M_t.o),8),19),uG(zrn(gZ(M_t.o),9),19),uG(zrn(gZ(M_t.o),10),19),uG(zrn(gZ(M_t.o),11),19),uG(zrn(gZ(M_t.o),12),19),uG(zrn(gZ(M_t.o),13),19),uG(zrn(gZ(M_t.o),14),19),uG(zrn(gZ(M_t.o),15),19),uG(zrn(dZ(M_t.o),0),62),uG(zrn(dZ(M_t.o),1),62),uG(zrn(dZ(M_t.o),2),62),uG(zrn(dZ(M_t.o),3),62),uG(zrn(dZ(M_t.o),4),62),uG(zrn(dZ(M_t.o),5),62),uG(zrn(dZ(M_t.o),6),62),uG(zrn(dZ(M_t.o),7),62),uG(zrn(dZ(M_t.o),8),62),uG(zrn(dZ(M_t.o),9),62),S_t=M_t.p,uG(zrn(gZ(M_t.p),0),35),uG(zrn(gZ(M_t.p),1),35),uG(zrn(gZ(M_t.p),2),35),uG(zrn(gZ(M_t.p),3),35),uG(zrn(gZ(M_t.p),4),19),uG(zrn(gZ(M_t.p),5),19),uG(zrn(dZ(M_t.p),0),62),uG(zrn(dZ(M_t.p),1),62),C_t=M_t.q,uG(zrn(gZ(M_t.q),0),35),I_t=M_t.v,uG(zrn(gZ(M_t.v),0),19),uG(zrn(dZ(M_t.v),0),62),uG(zrn(dZ(M_t.v),1),62),uG(zrn(dZ(M_t.v),2),62),O_t=M_t.w,uG(zrn(gZ(M_t.w),0),35),uG(zrn(gZ(M_t.w),1),35),uG(zrn(gZ(M_t.w),2),35),uG(zrn(gZ(M_t.w),3),19),A_t=M_t.B,uG(zrn(gZ(M_t.B),0),19),uG(zrn(dZ(M_t.B),0),62),uG(zrn(dZ(M_t.B),1),62),uG(zrn(dZ(M_t.B),2),62),$_t=M_t.Q,uG(zrn(gZ(M_t.Q),0),19),uG(zrn(dZ(M_t.Q),0),62),D_t=M_t.R,uG(zrn(gZ(M_t.R),0),35),x_t=M_t.S,uG(zrn(dZ(M_t.S),0),62),uG(zrn(dZ(M_t.S),1),62),uG(zrn(dZ(M_t.S),2),62),uG(zrn(dZ(M_t.S),3),62),uG(zrn(dZ(M_t.S),4),62),uG(zrn(dZ(M_t.S),5),62),uG(zrn(dZ(M_t.S),6),62),uG(zrn(dZ(M_t.S),7),62),uG(zrn(dZ(M_t.S),8),62),uG(zrn(dZ(M_t.S),9),62),uG(zrn(dZ(M_t.S),10),62),uG(zrn(dZ(M_t.S),11),62),uG(zrn(dZ(M_t.S),12),62),uG(zrn(dZ(M_t.S),13),62),uG(zrn(dZ(M_t.S),14),62),R_t=M_t.T,uG(zrn(gZ(M_t.T),0),19),uG(zrn(gZ(M_t.T),2),19),K_t=uG(zrn(gZ(M_t.T),3),19),uG(zrn(gZ(M_t.T),4),19),uG(zrn(dZ(M_t.T),0),62),uG(zrn(dZ(M_t.T),1),62),uG(zrn(gZ(M_t.T),1),19),F_t=M_t.U,uG(zrn(gZ(M_t.U),0),35),uG(zrn(gZ(M_t.U),1),35),uG(zrn(gZ(M_t.U),2),19),uG(zrn(gZ(M_t.U),3),19),uG(zrn(gZ(M_t.U),4),19),uG(zrn(gZ(M_t.U),5),19),uG(zrn(dZ(M_t.U),0),62),__t=M_t.V,uG(zrn(gZ(M_t.V),0),19),B_t=M_t.W,uG(zrn(gZ(M_t.W),0),35),uG(zrn(gZ(M_t.W),1),35),uG(zrn(gZ(M_t.W),2),35),uG(zrn(gZ(M_t.W),3),19),uG(zrn(gZ(M_t.W),4),19),uG(zrn(gZ(M_t.W),5),19),U_t=M_t.bb,uG(zrn(gZ(M_t.bb),0),35),uG(zrn(gZ(M_t.bb),1),35),uG(zrn(gZ(M_t.bb),2),35),uG(zrn(gZ(M_t.bb),3),35),uG(zrn(gZ(M_t.bb),4),35),uG(zrn(gZ(M_t.bb),5),35),uG(zrn(gZ(M_t.bb),6),35),uG(zrn(gZ(M_t.bb),7),19),uG(zrn(dZ(M_t.bb),0),62),uG(zrn(dZ(M_t.bb),1),62),G_t=M_t.eb,uG(zrn(gZ(M_t.eb),0),35),uG(zrn(gZ(M_t.eb),1),35),uG(zrn(gZ(M_t.eb),2),35),uG(zrn(gZ(M_t.eb),3),35),uG(zrn(gZ(M_t.eb),4),35),uG(zrn(gZ(M_t.eb),5),35),uG(zrn(gZ(M_t.eb),6),19),uG(zrn(gZ(M_t.eb),7),19),H_t=M_t.ab,uG(zrn(gZ(M_t.ab),0),35),uG(zrn(gZ(M_t.ab),1),35),L_t=M_t.H,uG(zrn(gZ(M_t.H),0),19),uG(zrn(gZ(M_t.H),1),19),uG(zrn(gZ(M_t.H),2),19),uG(zrn(gZ(M_t.H),3),19),uG(zrn(gZ(M_t.H),4),19),uG(zrn(gZ(M_t.H),5),19),uG(zrn(dZ(M_t.H),0),62),q_t=M_t.db,uG(zrn(gZ(M_t.db),0),19),N_t=M_t.M}function ZYn(n){var t;n.O||(n.O=!0,qon(n,"type"),Xon(n,"ecore.xml.type"),zon(n,lct),t=uG(jxn((MP(),l_t),lct),2044),ttn(n1(n.fb),n.b),A4(n.b,DBt,"AnyType",!1,!1,!0),mun(uG(zrn(gZ(n.b),0),35),n.wb.D,jrt,null,0,-1,DBt,!1,!1,!0,!1,!1,!1),mun(uG(zrn(gZ(n.b),1),35),n.wb.D,"any",null,0,-1,DBt,!0,!0,!0,!1,!1,!0),mun(uG(zrn(gZ(n.b),2),35),n.wb.D,"anyAttribute",null,0,-1,DBt,!1,!1,!0,!1,!1,!1),A4(n.bb,lHt,pct,!1,!1,!0),mun(uG(zrn(gZ(n.bb),0),35),n.gb,"data",null,0,1,lHt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),1),35),n.gb,Ret,null,1,1,lHt,!1,!1,!0,!1,!0,!1),A4(n.fb,bHt,mct,!1,!1,!0),mun(uG(zrn(gZ(n.fb),0),35),t.gb,"rawValue",null,0,1,bHt,!0,!0,!0,!1,!0,!0),mun(uG(zrn(gZ(n.fb),1),35),t.a,uet,null,0,1,bHt,!0,!0,!0,!1,!0,!0),ujn(uG(zrn(gZ(n.fb),2),19),n.wb.q,null,"instanceType",1,1,bHt,!1,!1,!0,!1,!1,!1,!1),A4(n.qb,wHt,vct,!1,!1,!0),mun(uG(zrn(gZ(n.qb),0),35),n.wb.D,jrt,null,0,-1,null,!1,!1,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.qb),1),19),n.wb.ab,null,"xMLNSPrefixMap",0,-1,null,!0,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.qb),2),19),n.wb.ab,null,"xSISchemaLocation",0,-1,null,!0,!1,!0,!0,!1,!1,!1),mun(uG(zrn(gZ(n.qb),3),35),n.gb,"cDATA",null,0,-2,null,!0,!0,!0,!1,!1,!0),mun(uG(zrn(gZ(n.qb),4),35),n.gb,"comment",null,0,-2,null,!0,!0,!0,!1,!1,!0),ujn(uG(zrn(gZ(n.qb),5),19),n.bb,null,qct,0,-2,null,!0,!0,!0,!0,!1,!1,!0),mun(uG(zrn(gZ(n.qb),6),35),n.gb,get,null,0,-2,null,!0,!0,!0,!1,!1,!0),UJ(n.a,dat,"AnySimpleType",!0),UJ(n.c,$ot,"AnyURI",!0),UJ(n.d,cT(tUt,1),"Base64Binary",!0),UJ(n.e,ZHt,"Boolean",!0),UJ(n.f,cot,"BooleanObject",!0),UJ(n.g,tUt,"Byte",!0),UJ(n.i,uot,"ByteObject",!0),UJ(n.j,$ot,"Date",!0),UJ(n.k,$ot,"DateTime",!0),UJ(n.n,Bot,"Decimal",!0),UJ(n.o,eUt,"Double",!0),UJ(n.p,fot,"DoubleObject",!0),UJ(n.q,$ot,"Duration",!0),UJ(n.s,yat,"ENTITIES",!0),UJ(n.r,yat,"ENTITIESBase",!0),UJ(n.t,$ot,Ect,!0),UJ(n.u,iUt,"Float",!0),UJ(n.v,lot,"FloatObject",!0),UJ(n.w,$ot,"GDay",!0),UJ(n.B,$ot,"GMonth",!0),UJ(n.A,$ot,"GMonthDay",!0),UJ(n.C,$ot,"GYear",!0),UJ(n.D,$ot,"GYearMonth",!0),UJ(n.F,cT(tUt,1),"HexBinary",!0),UJ(n.G,$ot,"ID",!0),UJ(n.H,$ot,"IDREF",!0),UJ(n.J,yat,"IDREFS",!0),UJ(n.I,yat,"IDREFSBase",!0),UJ(n.K,YHt,"Int",!0),UJ(n.M,Xot,"Integer",!0),UJ(n.L,dot,"IntObject",!0),UJ(n.P,$ot,"Language",!0),UJ(n.Q,nUt,"Long",!0),UJ(n.R,yot,"LongObject",!0),UJ(n.S,$ot,"Name",!0),UJ(n.T,$ot,Sct,!0),UJ(n.U,Xot,"NegativeInteger",!0),UJ(n.V,$ot,xct,!0),UJ(n.X,yat,"NMTOKENS",!0),UJ(n.W,yat,"NMTOKENSBase",!0),UJ(n.Y,Xot,"NonNegativeInteger",!0),UJ(n.Z,Xot,"NonPositiveInteger",!0),UJ(n.$,$ot,"NormalizedString",!0),UJ(n._,$ot,"NOTATION",!0),UJ(n.ab,$ot,"PositiveInteger",!0),UJ(n.cb,$ot,"QName",!0),UJ(n.db,rUt,"Short",!0),UJ(n.eb,Tot,"ShortObject",!0),UJ(n.gb,$ot,C1n,!0),UJ(n.hb,$ot,"Time",!0),UJ(n.ib,$ot,"Token",!0),UJ(n.jb,rUt,"UnsignedByte",!0),UJ(n.kb,Tot,"UnsignedByteObject",!0),UJ(n.lb,nUt,"UnsignedInt",!0),UJ(n.mb,yot,"UnsignedIntObject",!0),UJ(n.nb,Xot,"UnsignedLong",!0),UJ(n.ob,YHt,"UnsignedShort",!0),UJ(n.pb,dot,"UnsignedShortObject",!0),nwn(n,lct),iZn(n))}function nZn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A,L,N,$,D,x,R,K,F,_,B,H,U,G,q,X;if(r.$g())return hZ(),hZ(),zot;if(oM(gK(zDn(t,(XYn(),z$t)))))return hZ(),hZ(),zot;if(M=0!=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i,T=!(j=bLn(t)).dc(),M||T){if(!(c=uG(zDn(t,yDt),143)))throw hv(new jM("Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout."));if(U=bA(c,(rDn(),yFt)),gkn(t),!M&&T&&!U)return hZ(),hZ(),zot;if(m=new Zm,xA(zDn(t,E$t))===xA((Own(),Ixt))&&(bA(c,mFt)||bA(c,pFt))){if(oM(gK(zDn(t,HDt))))throw hv(new jM("Topdown layout cannot be used together with hierarchy handling."));for(N=dBn(n,t),Qon($=new lS,(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));0!=$.b;)gkn(A=uG(0==$.b?null:(MK(0!=$.b),Lrn($,$.a.a)),27)),xA(zDn(A,E$t))===xA(Axt)||vnn(A,e$t)&&!k9(c,zDn(A,yDt))?(Ohn(m,nZn(n,A,i,r)),Myn(A,E$t,Axt),UHn(A)):Qon($,(!A.a&&(A.a=new fV(bFt,A,10,11)),A.a))}else{if(N=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i,oM(gK(zDn(t,HDt)))){if((G=r.eh(1)).Ug(Lnt,1),null==zDn(t,UDt))throw hv(new jM(t.k+" has not been assigned a top-down node type."));if(uG(zDn(t,UDt),280)==(Iwn(),fKt)||uG(zDn(t,UDt),280)==bKt)for(p=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));p.e!=p.i.gc();)if(g=uG(Zkn(p),27),O=uG(zDn(g,yDt),143),(!g.a&&(g.a=new fV(bFt,g,10,11)),g.a).i>0&&(A1(O.f),0)){if(uG(zDn(g,UDt),280)==fKt)throw hv(new jM("Topdown Layout Providers should only be used on parallel nodes."));XA(A1(O.f)),null.Um(),vN(g,e.Math.max(g.g,null.Vm),e.Math.max(g.f,null.Vm))}else null!=zDn(g,VDt)&&(H=uG(zDn(g,VDt),347).Tg(g),vN(g,e.Math.max(g.g,H.a),e.Math.max(g.f,H.b)));if(D=uG(zDn(t,W$t),107),b=t.g-(D.b+D.c),l=t.f-(D.d+D.a),G.bh("Available Child Area: ("+b+"|"+l+")"),Myn(t,c$t,b/l),Mkn(t,c,r.eh(N)),uG(zDn(t,UDt),280)==bKt&&(VJn(t),vN(t,D.b+uM(pK(zDn(t,h$t)))+D.c,D.d+uM(pK(zDn(t,s$t)))+D.a)),G.bh("Executed layout algorithm: "+mK(zDn(t,e$t))+" on node "+t.k),uG(zDn(t,UDt),280)==fKt){if(b<0||l<0)throw hv(new jM("The size defined by the parent parallel node is too small for the space provided by the paddings of the child hierarchical node. "+t.k));for(vnn(t,h$t)||vnn(t,s$t)||VJn(t),d=uM(pK(zDn(t,h$t))),w=uM(pK(zDn(t,s$t))),G.bh("Desired Child Area: ("+d+"|"+w+")"),R=b/d,K=l/w,x=e.Math.min(R,e.Math.min(K,uM(pK(zDn(t,GDt))))),Myn(t,XDt,x),G.bh(t.k+" -- Local Scale Factor (X|Y): ("+R+"|"+K+")"),v=uG(zDn(t,l$t),21),a=0,o=0,x<R&&(v.Hc((ZSn(),VNt))?a=(b/2-d*x/2)/x:v.Hc(QNt)&&(a=(b-d*x)/x)),x<K&&(v.Hc((ZSn(),YNt))?o=(l/2-w*x/2)/x:v.Hc(JNt)&&(o=(l-w*x)/x)),q=a+(D.b/x-D.b),X=o+(D.d/x-D.d),G.bh("Shift: ("+q+"|"+X+")"),L=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));L.e!=L.i.gc();)ycn(A=uG(Zkn(L),27),A.i+q),Mcn(A,A.j+X);for(y=new DD((!t.b&&(t.b=new fV(aFt,t,12,3)),t.b));y.e!=y.i.gc();){for(_=new DD((!(k=uG(Zkn(y),74)).a&&(k.a=new fV(oFt,k,6,6)),k.a));_.e!=_.i.gc();)for(MN(F=uG(Zkn(_),166),F.j+q,F.k+X),yN(F,F.b+q,F.c+X),s=new DD((!F.a&&(F.a=new MD(eFt,F,5)),F.a));s.e!=s.i.gc();)mN(u=uG(Zkn(s),377),u.a+q,u.b+X);for(I=new DD((!k.n&&(k.n=new fV(lFt,k,1,7)),k.n));I.e!=I.i.gc();)kN(C=uG(Zkn(I),135),C.i+q,C.j+X);for(S=Fkn(P=uG(zDn(k,L$t),75),0);S.b!=S.d.c;)(E=uG(I6(S),8)).a+=q,E.b+=X;Myn(k,L$t,P)}}G.Vg()}for(f=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));f.e!=f.i.gc();)Ohn(m,nZn(n,h=uG(Zkn(f),27),i,r)),UHn(h)}if(r.$g())return hZ(),hZ(),zot;for(B=new Ww(m);B.a<B.c.c.length;)Myn(uG(N3(B),74),z$t,(qx(),!0));return oM(gK(zDn(t,HDt)))||Mkn(t,c,r.eh(N)),yUn(m),T&&U?j:(hZ(),hZ(),zot)}return hZ(),hZ(),zot}function tZn(n,t){var e;return yHt||(yHt=new Ym,MHt=new Ym,QYn(),QYn(),zmn(e=new K3(4),"\t\n\r\r "),r2(yHt,Jct,e),r2(MHt,Jct,FGn(e)),zmn(e=new K3(4),nat),r2(yHt,Wct,e),r2(MHt,Wct,FGn(e)),zmn(e=new K3(4),nat),r2(yHt,Wct,e),r2(MHt,Wct,FGn(e)),zmn(e=new K3(4),tat),TXn(e,uG(U1(yHt,Wct),122)),r2(yHt,Qct,e),r2(MHt,Qct,FGn(e)),zmn(e=new K3(4),"-.0:AZ__az\xb7\xb7\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u02d0\u02d1\u0300\u0345\u0360\u0361\u0386\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c\u045e\u0481\u0483\u0486\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05a1\u05a3\u05b9\u05bb\u05bd\u05bf\u05bf\u05c1\u05c2\u05c4\u05c4\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0640\u0652\u0660\u0669\u0670\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06e8\u06ea\u06ed\u06f0\u06f9\u0901\u0903\u0905\u0939\u093c\u094d\u0951\u0954\u0958\u0963\u0966\u096f\u0981\u0983\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09bc\u09bc\u09be\u09c4\u09c7\u09c8\u09cb\u09cd\u09d7\u09d7\u09dc\u09dd\u09df\u09e3\u09e6\u09f1\u0a02\u0a02\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3c\u0a3e\u0a42\u0a47\u0a48\u0a4b\u0a4d\u0a59\u0a5c\u0a5e\u0a5e\u0a66\u0a74\u0a81\u0a83\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abc\u0ac5\u0ac7\u0ac9\u0acb\u0acd\u0ae0\u0ae0\u0ae6\u0aef\u0b01\u0b03\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3c\u0b43\u0b47\u0b48\u0b4b\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f\u0b61\u0b66\u0b6f\u0b82\u0b83\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0bbe\u0bc2\u0bc6\u0bc8\u0bca\u0bcd\u0bd7\u0bd7\u0be7\u0bef\u0c01\u0c03\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c3e\u0c44\u0c46\u0c48\u0c4a\u0c4d\u0c55\u0c56\u0c60\u0c61\u0c66\u0c6f\u0c82\u0c83\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cbe\u0cc4\u0cc6\u0cc8\u0cca\u0ccd\u0cd5\u0cd6\u0cde\u0cde\u0ce0\u0ce1\u0ce6\u0cef\u0d02\u0d03\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d3e\u0d43\u0d46\u0d48\u0d4a\u0d4d\u0d57\u0d57\u0d60\u0d61\u0d66\u0d6f\u0e01\u0e2e\u0e30\u0e3a\u0e40\u0e4e\u0e50\u0e59\u0e81\u0e82\u0e84\u0e84\u0e87\u0e88\u0e8a\u0e8a\u0e8d\u0e8d\u0e94\u0e97\u0e99\u0e9f\u0ea1\u0ea3\u0ea5\u0ea5\u0ea7\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eb0\u0eb9\u0ebb\u0ebd\u0ec0\u0ec4\u0ec6\u0ec6\u0ec8\u0ecd\u0ed0\u0ed9\u0f18\u0f19\u0f20\u0f29\u0f35\u0f35\u0f37\u0f37\u0f39\u0f39\u0f3e\u0f47\u0f49\u0f69\u0f71\u0f84\u0f86\u0f8b\u0f90\u0f95\u0f97\u0f97\u0f99\u0fad\u0fb1\u0fb7\u0fb9\u0fb9\u10a0\u10c5\u10d0\u10f6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110b\u110c\u110e\u1112\u113c\u113c\u113e\u113e\u1140\u1140\u114c\u114c\u114e\u114e\u1150\u1150\u1154\u1155\u1159\u1159\u115f\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116d\u116e\u1172\u1173\u1175\u1175\u119e\u119e\u11a8\u11a8\u11ab\u11ab\u11ae\u11af\u11b7\u11b8\u11ba\u11ba\u11bc\u11c2\u11eb\u11eb\u11f0\u11f0\u11f9\u11f9\u1e00\u1e9b\u1ea0\u1ef9\u1f00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u20d0\u20dc\u20e1\u20e1\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302f\u3031\u3035\u3041\u3094\u3099\u309a\u309d\u309e\u30a1\u30fa\u30fc\u30fe\u3105\u312c\u4e00\u9fa5\uac00\ud7a3"),r2(yHt,Yct,e),r2(MHt,Yct,FGn(e)),zmn(e=new K3(4),tat),HFn(e,95,95),HFn(e,58,58),r2(yHt,Zct,e),r2(MHt,Zct,FGn(e))),uG(U1(t?yHt:MHt,n),138)}function eZn(n){hP(n,new hCn(_T(xT(FT(DT(KT(RT(new bu,S0n),"ELK Layered"),"Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level."),new Tc),S0n),WX((rDn(),jFt),Uhn(cT(PFt,1),p1n,245,0,[yFt,MFt,kFt,TFt,mFt,pFt]))))),U4(n,S0n,A8n,Jkn(lTt)),U4(n,S0n,L8n,Jkn(bTt)),U4(n,S0n,D3n,Jkn(wTt)),U4(n,S0n,N8n,Jkn(dTt)),U4(n,S0n,u4n,Jkn(pTt)),U4(n,S0n,$8n,Jkn(mTt)),U4(n,S0n,D8n,Jkn(yTt)),U4(n,S0n,x8n,Jkn(TTt)),U4(n,S0n,R8n,Jkn(jTt)),U4(n,S0n,K8n,Jkn(MTt)),U4(n,S0n,o4n,Jkn(ETt)),U4(n,S0n,F8n,Jkn(PTt)),U4(n,S0n,_8n,Jkn(ITt)),U4(n,S0n,B8n,Jkn(kTt)),U4(n,S0n,O5n,Jkn(fTt)),U4(n,S0n,L5n,Jkn(gTt)),U4(n,S0n,A5n,Jkn(vTt)),U4(n,S0n,N5n,Jkn(STt)),U4(n,S0n,a4n,xwn(0)),U4(n,S0n,$5n,Jkn(aTt)),U4(n,S0n,D5n,Jkn(oTt)),U4(n,S0n,x5n,Jkn(uTt)),U4(n,S0n,U5n,Jkn(qTt)),U4(n,S0n,G5n,Jkn(RTt)),U4(n,S0n,q5n,Jkn(KTt)),U4(n,S0n,X5n,Jkn(BTt)),U4(n,S0n,z5n,Jkn(FTt)),U4(n,S0n,V5n,Jkn(_Tt)),U4(n,S0n,W5n,Jkn(zTt)),U4(n,S0n,Q5n,Jkn(XTt)),U4(n,S0n,J5n,Jkn(UTt)),U4(n,S0n,Y5n,Jkn(HTt)),U4(n,S0n,Z5n,Jkn(GTt)),U4(n,S0n,T5n,Jkn(LMt)),U4(n,S0n,j5n,Jkn(NMt)),U4(n,S0n,P5n,Jkn(Zyt)),U4(n,S0n,C5n,Jkn(nMt)),U4(n,S0n,k4n,Jkn(NTt)),U4(n,S0n,y4n,Jkn(DTt)),U4(n,S0n,M4n,Jkn(LTt)),U4(n,S0n,T4n,Jkn(ATt)),U4(n,S0n,j4n,$Tt),U4(n,S0n,K3n,BMt),U4(n,S0n,m8n,Wyt),U4(n,S0n,H8n,0),U4(n,S0n,s4n,xwn(1)),U4(n,S0n,R3n,r4n),U4(n,S0n,U8n,Jkn(FMt)),U4(n,S0n,l4n,Jkn(JMt)),U4(n,S0n,G8n,Jkn(eTt)),U4(n,S0n,q8n,Jkn(_yt)),U4(n,S0n,X8n,Jkn(byt)),U4(n,S0n,b8n,Jkn(rMt)),U4(n,S0n,h4n,(qx(),!0)),U4(n,S0n,z8n,Jkn(sMt)),U4(n,S0n,V8n,Jkn(hMt)),U4(n,S0n,p4n,Jkn(DMt)),U4(n,S0n,g4n,Jkn(KMt)),U4(n,S0n,d4n,Jkn(xMt)),U4(n,S0n,W8n,Uyt),U4(n,S0n,m4n,Jkn(PMt)),U4(n,S0n,Q8n,Jkn(SMt)),U4(n,S0n,v4n,Jkn(nTt)),U4(n,S0n,J8n,Jkn(ZMt)),U4(n,S0n,Y8n,Jkn(tTt)),U4(n,S0n,Z8n,GMt),U4(n,S0n,n9n,Jkn(XMt)),U4(n,S0n,t9n,Jkn(zMt)),U4(n,S0n,e9n,Jkn(VMt)),U4(n,S0n,i9n,Jkn(qMt)),U4(n,S0n,W6n,Jkn(xTt)),U4(n,S0n,Y6n,Jkn(MMt)),U4(n,S0n,r5n,Jkn(yMt)),U4(n,S0n,V6n,Jkn(OTt)),U4(n,S0n,Z6n,Jkn(gMt)),U4(n,S0n,J6n,Jkn(Fyt)),U4(n,S0n,o5n,Jkn(Kyt)),U4(n,S0n,u5n,Jkn(Cyt)),U4(n,S0n,d5n,Jkn(Iyt)),U4(n,S0n,g5n,Jkn(Ayt)),U4(n,S0n,p5n,Jkn(Oyt)),U4(n,S0n,h5n,Jkn(Ryt)),U4(n,S0n,G6n,Jkn(jMt)),U4(n,S0n,q6n,Jkn(EMt)),U4(n,S0n,U6n,Jkn(lMt)),U4(n,S0n,m5n,Jkn($Mt)),U4(n,S0n,y5n,Jkn(IMt)),U4(n,S0n,H6n,Jkn(eMt)),U4(n,S0n,M5n,Jkn(AMt)),U4(n,S0n,E5n,Jkn(Jyt)),U4(n,S0n,S5n,Jkn(Yyt)),U4(n,S0n,r9n,Jkn(Pyt)),U4(n,S0n,k5n,Jkn(CMt)),U4(n,S0n,K5n,Jkn(vyt)),U4(n,S0n,F5n,Jkn(myt)),U4(n,S0n,R5n,Jkn(pyt)),U4(n,S0n,_5n,Jkn(aMt)),U4(n,S0n,B5n,Jkn(cMt)),U4(n,S0n,H5n,Jkn(oMt)),U4(n,S0n,x4n,Jkn(RMt)),U4(n,S0n,c9n,Jkn(bMt)),U4(n,S0n,x3n,Jkn(tMt)),U4(n,S0n,a9n,Jkn(Xyt)),U4(n,S0n,b4n,Jkn(qyt)),U4(n,S0n,s5n,Jkn(Lyt)),U4(n,S0n,o9n,Jkn(YMt)),U4(n,S0n,u9n,Jkn(gyt)),U4(n,S0n,s9n,Jkn(uMt)),U4(n,S0n,h9n,Jkn(WMt)),U4(n,S0n,f9n,Jkn(HMt)),U4(n,S0n,l9n,Jkn(UMt)),U4(n,S0n,e5n,Jkn(mMt)),U4(n,S0n,i5n,Jkn(vMt)),U4(n,S0n,b9n,Jkn(rTt)),U4(n,S0n,X6n,Jkn(wyt)),U4(n,S0n,c5n,Jkn(kMt)),U4(n,S0n,n8n,Jkn(zyt)),U4(n,S0n,t8n,Jkn(Gyt)),U4(n,S0n,w9n,Jkn(TMt)),U4(n,S0n,a5n,Jkn(wMt)),U4(n,S0n,v5n,Jkn(OMt)),U4(n,S0n,d9n,Jkn(CTt)),U4(n,S0n,B6n,Jkn(Hyt)),U4(n,S0n,z6n,Jkn(iTt)),U4(n,S0n,I5n,Jkn(Qyt)),U4(n,S0n,f5n,Jkn(Nyt)),U4(n,S0n,l5n,Jkn($yt)),U4(n,S0n,n5n,Jkn(dMt)),U4(n,S0n,b5n,Jkn(Dyt)),U4(n,S0n,g9n,Jkn(fMt)),U4(n,S0n,t5n,Jkn(pMt)),U4(n,S0n,w5n,Jkn(xyt)),U4(n,S0n,e8n,Jkn(Syt)),U4(n,S0n,a8n,Jkn(Tyt)),U4(n,S0n,o8n,Jkn(yyt)),U4(n,S0n,u8n,Jkn(Myt)),U4(n,S0n,r8n,Jkn(jyt)),U4(n,S0n,c8n,Jkn(kyt)),U4(n,S0n,i8n,Jkn(Eyt)),U4(n,S0n,Q6n,Jkn(iMt))}function iZn(n){Hxn(n.a,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"anySimpleType"])),Hxn(n.b,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"anyType",Srt,jrt])),Hxn(uG(zrn(gZ(n.b),0),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,cct,Bet,":mixed"])),Hxn(uG(zrn(gZ(n.b),1),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,cct,fct,bct,Bet,":1",Mct,"lax"])),Hxn(uG(zrn(gZ(n.b),2),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ict,fct,bct,Bet,":2",Mct,"lax"])),Hxn(n.c,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"anyURI",hct,act])),Hxn(n.d,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"base64Binary",hct,act])),Hxn(n.e,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,dZn,hct,act])),Hxn(n.f,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"boolean:Object",Krt,dZn])),Hxn(n.g,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,lrt])),Hxn(n.i,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"byte:Object",Krt,lrt])),Hxn(n.j,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"date",hct,act])),Hxn(n.k,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"dateTime",hct,act])),Hxn(n.n,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"decimal",hct,act])),Hxn(n.o,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,wrt,hct,act])),Hxn(n.p,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"double:Object",Krt,wrt])),Hxn(n.q,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"duration",hct,act])),Hxn(n.s,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"ENTITIES",Krt,Tct,jct,"1"])),Hxn(n.r,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Tct,oct,Ect])),Hxn(n.t,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Ect,Krt,Sct])),Hxn(n.u,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,drt,hct,act])),Hxn(n.v,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"float:Object",Krt,drt])),Hxn(n.w,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gDay",hct,act])),Hxn(n.B,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gMonth",hct,act])),Hxn(n.A,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gMonthDay",hct,act])),Hxn(n.C,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gYear",hct,act])),Hxn(n.D,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gYearMonth",hct,act])),Hxn(n.F,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"hexBinary",hct,act])),Hxn(n.G,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"ID",Krt,Sct])),Hxn(n.H,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"IDREF",Krt,Sct])),Hxn(n.J,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"IDREFS",Krt,Pct,jct,"1"])),Hxn(n.I,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Pct,oct,"IDREF"])),Hxn(n.K,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,grt])),Hxn(n.M,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Cct])),Hxn(n.L,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"int:Object",Krt,grt])),Hxn(n.P,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"language",Krt,Ict,Oct,Act])),Hxn(n.Q,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,prt])),Hxn(n.R,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"long:Object",Krt,prt])),Hxn(n.S,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"Name",Krt,Ict,Oct,Lct])),Hxn(n.T,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Sct,Krt,"Name",Oct,Nct])),Hxn(n.U,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"negativeInteger",Krt,$ct,Dct,"-1"])),Hxn(n.V,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,xct,Krt,Ict,Oct,"\\c+"])),Hxn(n.X,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"NMTOKENS",Krt,Rct,jct,"1"])),Hxn(n.W,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Rct,oct,xct])),Hxn(n.Y,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Kct,Krt,Cct,Fct,"0"])),Hxn(n.Z,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,$ct,Krt,Cct,Dct,"0"])),Hxn(n.$,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,_ct,Krt,pZn,hct,"replace"])),Hxn(n._,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"NOTATION",hct,act])),Hxn(n.ab,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"positiveInteger",Krt,Kct,Fct,"1"])),Hxn(n.bb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"processingInstruction_._type",Srt,"empty"])),Hxn(uG(zrn(gZ(n.bb),0),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ect,Bet,"data"])),Hxn(uG(zrn(gZ(n.bb),1),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ect,Bet,Ret])),Hxn(n.cb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"QName",hct,act])),Hxn(n.db,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,mrt])),Hxn(n.eb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"short:Object",Krt,mrt])),Hxn(n.fb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"simpleAnyType",Srt,tct])),Hxn(uG(zrn(gZ(n.fb),0),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,":3",Srt,tct])),Hxn(uG(zrn(gZ(n.fb),1),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,":4",Srt,tct])),Hxn(uG(zrn(gZ(n.fb),2),19),Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,":5",Srt,tct])),Hxn(n.gb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,pZn,hct,"preserve"])),Hxn(n.hb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"time",hct,act])),Hxn(n.ib,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Ict,Krt,_ct,hct,act])),Hxn(n.jb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Bct,Dct,"255",Fct,"0"])),Hxn(n.kb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"unsignedByte:Object",Krt,Bct])),Hxn(n.lb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Hct,Dct,"4294967295",Fct,"0"])),Hxn(n.mb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"unsignedInt:Object",Krt,Hct])),Hxn(n.nb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"unsignedLong",Krt,Kct,Dct,Uct,Fct,"0"])),Hxn(n.ob,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Gct,Dct,"65535",Fct,"0"])),Hxn(n.pb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"unsignedShort:Object",Krt,Gct])),Hxn(n.qb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"",Srt,jrt])),Hxn(uG(zrn(gZ(n.qb),0),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,cct,Bet,":mixed"])),Hxn(uG(zrn(gZ(n.qb),1),19),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ect,Bet,"xmlns:prefix"])),Hxn(uG(zrn(gZ(n.qb),2),19),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ect,Bet,"xsi:schemaLocation"])),Hxn(uG(zrn(gZ(n.qb),3),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,rct,Bet,"cDATA",uct,sct])),Hxn(uG(zrn(gZ(n.qb),4),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,rct,Bet,"comment",uct,sct])),Hxn(uG(zrn(gZ(n.qb),5),19),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,rct,Bet,qct,uct,sct])),Hxn(uG(zrn(gZ(n.qb),6),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,rct,Bet,get,uct,sct]))}function rZn(n){return m_("_UI_EMFDiagnostic_marker",n)?"EMF Problem":m_("_UI_CircularContainment_diagnostic",n)?"An object may not circularly contain itself":m_(nit,n)?"Wrong character.":m_(tit,n)?"Invalid reference number.":m_(eit,n)?"A character is required after \\.":m_(iit,n)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":m_(rit,n)?"'(?<' or '(?<!' is expected.":m_(cit,n)?"A comment is not terminated.":m_(ait,n)?"')' is expected.":m_(oit,n)?"Unexpected end of the pattern in a modifier group.":m_(uit,n)?"':' is expected.":m_(sit,n)?"Unexpected end of the pattern in a conditional group.":m_(hit,n)?"A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.":m_(fit,n)?"There are more than three choices in a conditional group.":m_(lit,n)?"A character in U+0040-U+005f must follow \\c.":m_(bit,n)?"A '{' is required before a character category.":m_(wit,n)?"A property name is not closed by '}'.":m_(dit,n)?"Unexpected meta character.":m_(git,n)?"Unknown property.":m_(pit,n)?"A POSIX character class must be closed by ':]'.":m_(mit,n)?"Unexpected end of the pattern in a character class.":m_(vit,n)?"Unknown name for a POSIX character class.":m_("parser.cc.4",n)?"'-' is invalid here.":m_(kit,n)?"']' is expected.":m_(yit,n)?"'[' is invalid in a character class. Write '\\['.":m_(Mit,n)?"']' is invalid in a character class. Write '\\]'.":m_(Tit,n)?"'-' is an invalid character range. Write '\\-'.":m_(jit,n)?"'[' is expected.":m_(Eit,n)?"')' or '-[' or '+[' or '&[' is expected.":m_(Sit,n)?"The range end code point is less than the start code point.":m_(Pit,n)?"Invalid Unicode hex notation.":m_(Cit,n)?"Overflow in a hex notation.":m_(Iit,n)?"'\\x{' must be closed by '}'.":m_(Oit,n)?"Invalid Unicode code point.":m_(Ait,n)?"An anchor must not be here.":m_(Lit,n)?"This expression is not supported in the current option setting.":m_(Nit,n)?"Invalid quantifier. A digit is expected.":m_($it,n)?"Invalid quantifier. Invalid quantity or a '}' is missing.":m_(Dit,n)?"Invalid quantifier. A digit or '}' is expected.":m_(xit,n)?"Invalid quantifier. A min quantity must be <= a max quantity.":m_(Rit,n)?"Invalid quantifier. A quantity value overflow.":m_("_UI_PackageRegistry_extensionpoint",n)?"Ecore Package Registry for Generated Packages":m_("_UI_DynamicPackageRegistry_extensionpoint",n)?"Ecore Package Registry for Dynamic Packages":m_("_UI_FactoryRegistry_extensionpoint",n)?"Ecore Factory Override Registry":m_("_UI_URIExtensionParserRegistry_extensionpoint",n)?"URI Extension Parser Registry":m_("_UI_URIProtocolParserRegistry_extensionpoint",n)?"URI Protocol Parser Registry":m_("_UI_URIContentParserRegistry_extensionpoint",n)?"URI Content Parser Registry":m_("_UI_ContentHandlerRegistry_extensionpoint",n)?"Content Handler Registry":m_("_UI_URIMappingRegistry_extensionpoint",n)?"URI Converter Mapping Registry":m_("_UI_PackageRegistryImplementation_extensionpoint",n)?"Ecore Package Registry Implementation":m_("_UI_ValidationDelegateRegistry_extensionpoint",n)?"Validation Delegate Registry":m_("_UI_SettingDelegateRegistry_extensionpoint",n)?"Feature Setting Delegate Factory Registry":m_("_UI_InvocationDelegateRegistry_extensionpoint",n)?"Operation Invocation Delegate Factory Registry":m_("_UI_EClassInterfaceNotAbstract_diagnostic",n)?"A class that is an interface must also be abstract":m_("_UI_EClassNoCircularSuperTypes_diagnostic",n)?"A class may not be a super type of itself":m_("_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic",n)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":m_("_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic",n)?"The opposite of the opposite may not be a reference different from this one":m_("_UI_EReferenceOppositeNotFeatureOfType_diagnostic",n)?"The opposite must be a feature of the reference's type":m_("_UI_EReferenceTransientOppositeNotTransient_diagnostic",n)?"The opposite of a transient reference must be transient if it is proxy resolving":m_("_UI_EReferenceOppositeBothContainment_diagnostic",n)?"The opposite of a containment reference must not be a containment reference":m_("_UI_EReferenceConsistentUnique_diagnostic",n)?"A containment or bidirectional reference must be unique if its upper bound is different from 1":m_("_UI_ETypedElementNoType_diagnostic",n)?"The typed element must have a type":m_("_UI_EAttributeNoDataType_diagnostic",n)?"The generic attribute type must not refer to a class":m_("_UI_EReferenceNoClass_diagnostic",n)?"The generic reference type must not refer to a data type":m_("_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic",n)?"A generic type can't refer to both a type parameter and a classifier":m_("_UI_EGenericTypeNoClass_diagnostic",n)?"A generic super type must refer to a class":m_("_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic",n)?"A generic type in this context must refer to a classifier or a type parameter":m_("_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic",n)?"A generic type may have bounds only when used as a type argument":m_("_UI_EGenericTypeNoUpperAndLowerBound_diagnostic",n)?"A generic type must not have both a lower and an upper bound":m_("_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic",n)?"A generic type with bounds must not also refer to a type parameter or classifier":m_("_UI_EGenericTypeNoArguments_diagnostic",n)?"A generic type may have arguments only if it refers to a classifier":m_("_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic",n)?"A generic type may only refer to a type parameter that is in scope":n}function cZn(n){var t,e,i,r,c,a,o;n.r||(n.r=!0,qon(n,"graph"),Xon(n,"graph"),zon(n,aet),mhn(n.o,"T"),ttn(n1(n.a),n.p),ttn(n1(n.f),n.a),ttn(n1(n.n),n.f),ttn(n1(n.g),n.n),ttn(n1(n.c),n.n),ttn(n1(n.i),n.c),ttn(n1(n.j),n.c),ttn(n1(n.d),n.f),ttn(n1(n.e),n.a),A4(n.p,Pht,m3n,!0,!0,!1),o=_hn(a=Kln(n.p,n.p,"setProperty")),t=NY(n.o),e=new ev,ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),rPn(e,i=$Y(o)),OSn(a,t,oet),OSn(a,t=$Y(o),uet),o=_hn(a=Kln(n.p,null,"getProperty")),t=NY(n.o),e=$Y(o),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),OSn(a,t,oet),(c=CCn(a,t=$Y(o),null))&&c.oj(),a=Kln(n.p,n.wb.e,"hasProperty"),t=NY(n.o),e=new ev,ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),OSn(a,t,oet),djn(a=Kln(n.p,n.p,"copyProperties"),n.p,set),a=Kln(n.p,null,"getAllProperties"),t=NY(n.wb.P),e=NY(n.o),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),i=new ev,ttn((!e.d&&(e.d=new MD(g_t,e,1)),e.d),i),e=NY(n.wb.M),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(r=CCn(a,t,null))&&r.oj(),A4(n.a,tFt,Att,!0,!1,!0),ujn(uG(zrn(gZ(n.a),0),19),n.k,null,het,0,-1,tFt,!1,!1,!0,!0,!1,!1,!1),A4(n.f,iFt,Ntt,!0,!1,!0),ujn(uG(zrn(gZ(n.f),0),19),n.g,uG(zrn(gZ(n.g),0),19),"labels",0,-1,iFt,!1,!1,!0,!0,!1,!1,!1),mun(uG(zrn(gZ(n.f),1),35),n.wb._,fet,null,0,1,iFt,!1,!1,!0,!1,!0,!1),A4(n.n,rFt,"ElkShape",!0,!1,!0),mun(uG(zrn(gZ(n.n),0),35),n.wb.t,bet,N0n,1,1,rFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.n),1),35),n.wb.t,wet,N0n,1,1,rFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.n),2),35),n.wb.t,"x",N0n,1,1,rFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.n),3),35),n.wb.t,"y",N0n,1,1,rFt,!1,!1,!0,!1,!0,!1),djn(a=Kln(n.n,null,"setDimensions"),n.wb.t,wet),djn(a,n.wb.t,bet),djn(a=Kln(n.n,null,"setLocation"),n.wb.t,"x"),djn(a,n.wb.t,"y"),A4(n.g,lFt,Ftt,!1,!1,!0),ujn(uG(zrn(gZ(n.g),0),19),n.f,uG(zrn(gZ(n.f),0),19),det,0,1,lFt,!1,!1,!0,!1,!1,!1,!1),mun(uG(zrn(gZ(n.g),1),35),n.wb._,get,"",0,1,lFt,!1,!1,!0,!1,!0,!1),A4(n.c,cFt,$tt,!0,!1,!0),ujn(uG(zrn(gZ(n.c),0),19),n.d,uG(zrn(gZ(n.d),1),19),"outgoingEdges",0,-1,cFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.c),1),19),n.d,uG(zrn(gZ(n.d),2),19),"incomingEdges",0,-1,cFt,!1,!1,!0,!1,!0,!1,!1),A4(n.i,bFt,_tt,!1,!1,!0),ujn(uG(zrn(gZ(n.i),0),19),n.j,uG(zrn(gZ(n.j),0),19),"ports",0,-1,bFt,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.i),1),19),n.i,uG(zrn(gZ(n.i),2),19),pet,0,-1,bFt,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.i),2),19),n.i,uG(zrn(gZ(n.i),1),19),det,0,1,bFt,!1,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.i),3),19),n.d,uG(zrn(gZ(n.d),0),19),"containedEdges",0,-1,bFt,!1,!1,!0,!0,!1,!1,!1),mun(uG(zrn(gZ(n.i),4),35),n.wb.e,met,null,0,1,bFt,!0,!0,!1,!1,!0,!0),A4(n.j,wFt,Btt,!1,!1,!0),ujn(uG(zrn(gZ(n.j),0),19),n.i,uG(zrn(gZ(n.i),0),19),det,0,1,wFt,!1,!1,!0,!1,!1,!1,!1),A4(n.d,aFt,Dtt,!1,!1,!0),ujn(uG(zrn(gZ(n.d),0),19),n.i,uG(zrn(gZ(n.i),3),19),"containingNode",0,1,aFt,!1,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.d),1),19),n.c,uG(zrn(gZ(n.c),0),19),vet,0,-1,aFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.d),2),19),n.c,uG(zrn(gZ(n.c),1),19),ket,0,-1,aFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.d),3),19),n.e,uG(zrn(gZ(n.e),5),19),yet,0,-1,aFt,!1,!1,!0,!0,!1,!1,!1),mun(uG(zrn(gZ(n.d),4),35),n.wb.e,"hyperedge",null,0,1,aFt,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.d),5),35),n.wb.e,met,null,0,1,aFt,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.d),6),35),n.wb.e,"selfloop",null,0,1,aFt,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.d),7),35),n.wb.e,"connected",null,0,1,aFt,!0,!0,!1,!1,!0,!0),A4(n.b,eFt,Ltt,!1,!1,!0),mun(uG(zrn(gZ(n.b),0),35),n.wb.t,"x",N0n,1,1,eFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.b),1),35),n.wb.t,"y",N0n,1,1,eFt,!1,!1,!0,!1,!0,!1),djn(a=Kln(n.b,null,"set"),n.wb.t,"x"),djn(a,n.wb.t,"y"),A4(n.e,oFt,xtt,!1,!1,!0),mun(uG(zrn(gZ(n.e),0),35),n.wb.t,"startX",null,0,1,oFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.e),1),35),n.wb.t,"startY",null,0,1,oFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.e),2),35),n.wb.t,"endX",null,0,1,oFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.e),3),35),n.wb.t,"endY",null,0,1,oFt,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.e),4),19),n.b,null,Met,0,-1,oFt,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.e),5),19),n.d,uG(zrn(gZ(n.d),3),19),det,0,1,oFt,!1,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.e),6),19),n.c,null,Tet,0,1,oFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.e),7),19),n.c,null,jet,0,1,oFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.e),8),19),n.e,uG(zrn(gZ(n.e),9),19),Eet,0,-1,oFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.e),9),19),n.e,uG(zrn(gZ(n.e),8),19),Set,0,-1,oFt,!1,!1,!0,!1,!0,!1,!1),mun(uG(zrn(gZ(n.e),10),35),n.wb._,fet,null,0,1,oFt,!1,!1,!0,!1,!0,!1),djn(a=Kln(n.e,null,"setStartLocation"),n.wb.t,"x"),djn(a,n.wb.t,"y"),djn(a=Kln(n.e,null,"setEndLocation"),n.wb.t,"x"),djn(a,n.wb.t,"y"),A4(n.k,Sat,"ElkPropertyToValueMapEntry",!1,!1,!1),t=NY(n.o),e=new ev,ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),N$n(uG(zrn(gZ(n.k),0),35),t,"key",Sat,!1,!1,!0,!1),mun(uG(zrn(gZ(n.k),1),35),n.s,uet,null,0,1,Sat,!1,!1,!0,!1,!0,!1),UJ(n.o,lNt,"IProperty",!0),UJ(n.s,dat,"PropertyValue",!0),nwn(n,aet))}function aZn(){aZn=E,(vHt=Inn(tUt,ret,28,P0n,15,1))[9]=35,vHt[10]=19,vHt[13]=19,vHt[32]=51,vHt[33]=49,vHt[34]=33,qV(vHt,35,38,49),vHt[38]=1,qV(vHt,39,45,49),qV(vHt,45,47,-71),vHt[47]=49,qV(vHt,48,58,-71),vHt[58]=61,vHt[59]=49,vHt[60]=1,vHt[61]=49,vHt[62]=33,qV(vHt,63,65,49),qV(vHt,65,91,-3),qV(vHt,91,93,33),vHt[93]=1,vHt[94]=33,vHt[95]=-3,vHt[96]=33,qV(vHt,97,123,-3),qV(vHt,123,183,33),vHt[183]=-87,qV(vHt,184,192,33),qV(vHt,192,215,-19),vHt[215]=33,qV(vHt,216,247,-19),vHt[247]=33,qV(vHt,248,306,-19),qV(vHt,306,308,33),qV(vHt,308,319,-19),qV(vHt,319,321,33),qV(vHt,321,329,-19),vHt[329]=33,qV(vHt,330,383,-19),vHt[383]=33,qV(vHt,384,452,-19),qV(vHt,452,461,33),qV(vHt,461,497,-19),qV(vHt,497,500,33),qV(vHt,500,502,-19),qV(vHt,502,506,33),qV(vHt,506,536,-19),qV(vHt,536,592,33),qV(vHt,592,681,-19),qV(vHt,681,699,33),qV(vHt,699,706,-19),qV(vHt,706,720,33),qV(vHt,720,722,-87),qV(vHt,722,768,33),qV(vHt,768,838,-87),qV(vHt,838,864,33),qV(vHt,864,866,-87),qV(vHt,866,902,33),vHt[902]=-19,vHt[903]=-87,qV(vHt,904,907,-19),vHt[907]=33,vHt[908]=-19,vHt[909]=33,qV(vHt,910,930,-19),vHt[930]=33,qV(vHt,931,975,-19),vHt[975]=33,qV(vHt,976,983,-19),qV(vHt,983,986,33),vHt[986]=-19,vHt[987]=33,vHt[988]=-19,vHt[989]=33,vHt[990]=-19,vHt[991]=33,vHt[992]=-19,vHt[993]=33,qV(vHt,994,1012,-19),qV(vHt,1012,1025,33),qV(vHt,1025,1037,-19),vHt[1037]=33,qV(vHt,1038,1104,-19),vHt[1104]=33,qV(vHt,1105,1117,-19),vHt[1117]=33,qV(vHt,1118,1154,-19),vHt[1154]=33,qV(vHt,1155,1159,-87),qV(vHt,1159,1168,33),qV(vHt,1168,1221,-19),qV(vHt,1221,1223,33),qV(vHt,1223,1225,-19),qV(vHt,1225,1227,33),qV(vHt,1227,1229,-19),qV(vHt,1229,1232,33),qV(vHt,1232,1260,-19),qV(vHt,1260,1262,33),qV(vHt,1262,1270,-19),qV(vHt,1270,1272,33),qV(vHt,1272,1274,-19),qV(vHt,1274,1329,33),qV(vHt,1329,1367,-19),qV(vHt,1367,1369,33),vHt[1369]=-19,qV(vHt,1370,1377,33),qV(vHt,1377,1415,-19),qV(vHt,1415,1425,33),qV(vHt,1425,1442,-87),vHt[1442]=33,qV(vHt,1443,1466,-87),vHt[1466]=33,qV(vHt,1467,1470,-87),vHt[1470]=33,vHt[1471]=-87,vHt[1472]=33,qV(vHt,1473,1475,-87),vHt[1475]=33,vHt[1476]=-87,qV(vHt,1477,1488,33),qV(vHt,1488,1515,-19),qV(vHt,1515,1520,33),qV(vHt,1520,1523,-19),qV(vHt,1523,1569,33),qV(vHt,1569,1595,-19),qV(vHt,1595,1600,33),vHt[1600]=-87,qV(vHt,1601,1611,-19),qV(vHt,1611,1619,-87),qV(vHt,1619,1632,33),qV(vHt,1632,1642,-87),qV(vHt,1642,1648,33),vHt[1648]=-87,qV(vHt,1649,1720,-19),qV(vHt,1720,1722,33),qV(vHt,1722,1727,-19),vHt[1727]=33,qV(vHt,1728,1743,-19),vHt[1743]=33,qV(vHt,1744,1748,-19),vHt[1748]=33,vHt[1749]=-19,qV(vHt,1750,1765,-87),qV(vHt,1765,1767,-19),qV(vHt,1767,1769,-87),vHt[1769]=33,qV(vHt,1770,1774,-87),qV(vHt,1774,1776,33),qV(vHt,1776,1786,-87),qV(vHt,1786,2305,33),qV(vHt,2305,2308,-87),vHt[2308]=33,qV(vHt,2309,2362,-19),qV(vHt,2362,2364,33),vHt[2364]=-87,vHt[2365]=-19,qV(vHt,2366,2382,-87),qV(vHt,2382,2385,33),qV(vHt,2385,2389,-87),qV(vHt,2389,2392,33),qV(vHt,2392,2402,-19),qV(vHt,2402,2404,-87),qV(vHt,2404,2406,33),qV(vHt,2406,2416,-87),qV(vHt,2416,2433,33),qV(vHt,2433,2436,-87),vHt[2436]=33,qV(vHt,2437,2445,-19),qV(vHt,2445,2447,33),qV(vHt,2447,2449,-19),qV(vHt,2449,2451,33),qV(vHt,2451,2473,-19),vHt[2473]=33,qV(vHt,2474,2481,-19),vHt[2481]=33,vHt[2482]=-19,qV(vHt,2483,2486,33),qV(vHt,2486,2490,-19),qV(vHt,2490,2492,33),vHt[2492]=-87,vHt[2493]=33,qV(vHt,2494,2501,-87),qV(vHt,2501,2503,33),qV(vHt,2503,2505,-87),qV(vHt,2505,2507,33),qV(vHt,2507,2510,-87),qV(vHt,2510,2519,33),vHt[2519]=-87,qV(vHt,2520,2524,33),qV(vHt,2524,2526,-19),vHt[2526]=33,qV(vHt,2527,2530,-19),qV(vHt,2530,2532,-87),qV(vHt,2532,2534,33),qV(vHt,2534,2544,-87),qV(vHt,2544,2546,-19),qV(vHt,2546,2562,33),vHt[2562]=-87,qV(vHt,2563,2565,33),qV(vHt,2565,2571,-19),qV(vHt,2571,2575,33),qV(vHt,2575,2577,-19),qV(vHt,2577,2579,33),qV(vHt,2579,2601,-19),vHt[2601]=33,qV(vHt,2602,2609,-19),vHt[2609]=33,qV(vHt,2610,2612,-19),vHt[2612]=33,qV(vHt,2613,2615,-19),vHt[2615]=33,qV(vHt,2616,2618,-19),qV(vHt,2618,2620,33),vHt[2620]=-87,vHt[2621]=33,qV(vHt,2622,2627,-87),qV(vHt,2627,2631,33),qV(vHt,2631,2633,-87),qV(vHt,2633,2635,33),qV(vHt,2635,2638,-87),qV(vHt,2638,2649,33),qV(vHt,2649,2653,-19),vHt[2653]=33,vHt[2654]=-19,qV(vHt,2655,2662,33),qV(vHt,2662,2674,-87),qV(vHt,2674,2677,-19),qV(vHt,2677,2689,33),qV(vHt,2689,2692,-87),vHt[2692]=33,qV(vHt,2693,2700,-19),vHt[2700]=33,vHt[2701]=-19,vHt[2702]=33,qV(vHt,2703,2706,-19),vHt[2706]=33,qV(vHt,2707,2729,-19),vHt[2729]=33,qV(vHt,2730,2737,-19),vHt[2737]=33,qV(vHt,2738,2740,-19),vHt[2740]=33,qV(vHt,2741,2746,-19),qV(vHt,2746,2748,33),vHt[2748]=-87,vHt[2749]=-19,qV(vHt,2750,2758,-87),vHt[2758]=33,qV(vHt,2759,2762,-87),vHt[2762]=33,qV(vHt,2763,2766,-87),qV(vHt,2766,2784,33),vHt[2784]=-19,qV(vHt,2785,2790,33),qV(vHt,2790,2800,-87),qV(vHt,2800,2817,33),qV(vHt,2817,2820,-87),vHt[2820]=33,qV(vHt,2821,2829,-19),qV(vHt,2829,2831,33),qV(vHt,2831,2833,-19),qV(vHt,2833,2835,33),qV(vHt,2835,2857,-19),vHt[2857]=33,qV(vHt,2858,2865,-19),vHt[2865]=33,qV(vHt,2866,2868,-19),qV(vHt,2868,2870,33),qV(vHt,2870,2874,-19),qV(vHt,2874,2876,33),vHt[2876]=-87,vHt[2877]=-19,qV(vHt,2878,2884,-87),qV(vHt,2884,2887,33),qV(vHt,2887,2889,-87),qV(vHt,2889,2891,33),qV(vHt,2891,2894,-87),qV(vHt,2894,2902,33),qV(vHt,2902,2904,-87),qV(vHt,2904,2908,33),qV(vHt,2908,2910,-19),vHt[2910]=33,qV(vHt,2911,2914,-19),qV(vHt,2914,2918,33),qV(vHt,2918,2928,-87),qV(vHt,2928,2946,33),qV(vHt,2946,2948,-87),vHt[2948]=33,qV(vHt,2949,2955,-19),qV(vHt,2955,2958,33),qV(vHt,2958,2961,-19),vHt[2961]=33,qV(vHt,2962,2966,-19),qV(vHt,2966,2969,33),qV(vHt,2969,2971,-19),vHt[2971]=33,vHt[2972]=-19,vHt[2973]=33,qV(vHt,2974,2976,-19),qV(vHt,2976,2979,33),qV(vHt,2979,2981,-19),qV(vHt,2981,2984,33),qV(vHt,2984,2987,-19),qV(vHt,2987,2990,33),qV(vHt,2990,2998,-19),vHt[2998]=33,qV(vHt,2999,3002,-19),qV(vHt,3002,3006,33),qV(vHt,3006,3011,-87),qV(vHt,3011,3014,33),qV(vHt,3014,3017,-87),vHt[3017]=33,qV(vHt,3018,3022,-87),qV(vHt,3022,3031,33),vHt[3031]=-87,qV(vHt,3032,3047,33),qV(vHt,3047,3056,-87),qV(vHt,3056,3073,33),qV(vHt,3073,3076,-87),vHt[3076]=33,qV(vHt,3077,3085,-19),vHt[3085]=33,qV(vHt,3086,3089,-19),vHt[3089]=33,qV(vHt,3090,3113,-19),vHt[3113]=33,qV(vHt,3114,3124,-19),vHt[3124]=33,qV(vHt,3125,3130,-19),qV(vHt,3130,3134,33),qV(vHt,3134,3141,-87),vHt[3141]=33,qV(vHt,3142,3145,-87),vHt[3145]=33,qV(vHt,3146,3150,-87),qV(vHt,3150,3157,33),qV(vHt,3157,3159,-87),qV(vHt,3159,3168,33),qV(vHt,3168,3170,-19),qV(vHt,3170,3174,33),qV(vHt,3174,3184,-87),qV(vHt,3184,3202,33),qV(vHt,3202,3204,-87),vHt[3204]=33,qV(vHt,3205,3213,-19),vHt[3213]=33,qV(vHt,3214,3217,-19),vHt[3217]=33,qV(vHt,3218,3241,-19),vHt[3241]=33,qV(vHt,3242,3252,-19),vHt[3252]=33,qV(vHt,3253,3258,-19),qV(vHt,3258,3262,33),qV(vHt,3262,3269,-87),vHt[3269]=33,qV(vHt,3270,3273,-87),vHt[3273]=33,qV(vHt,3274,3278,-87),qV(vHt,3278,3285,33),qV(vHt,3285,3287,-87),qV(vHt,3287,3294,33),vHt[3294]=-19,vHt[3295]=33,qV(vHt,3296,3298,-19),qV(vHt,3298,3302,33),qV(vHt,3302,3312,-87),qV(vHt,3312,3330,33),qV(vHt,3330,3332,-87),vHt[3332]=33,qV(vHt,3333,3341,-19),vHt[3341]=33,qV(vHt,3342,3345,-19),vHt[3345]=33,qV(vHt,3346,3369,-19),vHt[3369]=33,qV(vHt,3370,3386,-19),qV(vHt,3386,3390,33),qV(vHt,3390,3396,-87),qV(vHt,3396,3398,33),qV(vHt,3398,3401,-87),vHt[3401]=33,qV(vHt,3402,3406,-87),qV(vHt,3406,3415,33),vHt[3415]=-87,qV(vHt,3416,3424,33),qV(vHt,3424,3426,-19),qV(vHt,3426,3430,33),qV(vHt,3430,3440,-87),qV(vHt,3440,3585,33),qV(vHt,3585,3631,-19),vHt[3631]=33,vHt[3632]=-19,vHt[3633]=-87,qV(vHt,3634,3636,-19),qV(vHt,3636,3643,-87),qV(vHt,3643,3648,33),qV(vHt,3648,3654,-19),qV(vHt,3654,3663,-87),vHt[3663]=33,qV(vHt,3664,3674,-87),qV(vHt,3674,3713,33),qV(vHt,3713,3715,-19),vHt[3715]=33,vHt[3716]=-19,qV(vHt,3717,3719,33),qV(vHt,3719,3721,-19),vHt[3721]=33,vHt[3722]=-19,qV(vHt,3723,3725,33),vHt[3725]=-19,qV(vHt,3726,3732,33),qV(vHt,3732,3736,-19),vHt[3736]=33,qV(vHt,3737,3744,-19),vHt[3744]=33,qV(vHt,3745,3748,-19),vHt[3748]=33,vHt[3749]=-19,vHt[3750]=33,vHt[3751]=-19,qV(vHt,3752,3754,33),qV(vHt,3754,3756,-19),vHt[3756]=33,qV(vHt,3757,3759,-19),vHt[3759]=33,vHt[3760]=-19,vHt[3761]=-87,qV(vHt,3762,3764,-19),qV(vHt,3764,3770,-87),vHt[3770]=33,qV(vHt,3771,3773,-87),vHt[3773]=-19,qV(vHt,3774,3776,33),qV(vHt,3776,3781,-19),vHt[3781]=33,vHt[3782]=-87,vHt[3783]=33,qV(vHt,3784,3790,-87),qV(vHt,3790,3792,33),qV(vHt,3792,3802,-87),qV(vHt,3802,3864,33),qV(vHt,3864,3866,-87),qV(vHt,3866,3872,33),qV(vHt,3872,3882,-87),qV(vHt,3882,3893,33),vHt[3893]=-87,vHt[3894]=33,vHt[3895]=-87,vHt[3896]=33,vHt[3897]=-87,qV(vHt,3898,3902,33),qV(vHt,3902,3904,-87),qV(vHt,3904,3912,-19),vHt[3912]=33,qV(vHt,3913,3946,-19),qV(vHt,3946,3953,33),qV(vHt,3953,3973,-87),vHt[3973]=33,qV(vHt,3974,3980,-87),qV(vHt,3980,3984,33),qV(vHt,3984,3990,-87),vHt[3990]=33,vHt[3991]=-87,vHt[3992]=33,qV(vHt,3993,4014,-87),qV(vHt,4014,4017,33),qV(vHt,4017,4024,-87),vHt[4024]=33,vHt[4025]=-87,qV(vHt,4026,4256,33),qV(vHt,4256,4294,-19),qV(vHt,4294,4304,33),qV(vHt,4304,4343,-19),qV(vHt,4343,4352,33),vHt[4352]=-19,vHt[4353]=33,qV(vHt,4354,4356,-19),vHt[4356]=33,qV(vHt,4357,4360,-19),vHt[4360]=33,vHt[4361]=-19,vHt[4362]=33,qV(vHt,4363,4365,-19),vHt[4365]=33,qV(vHt,4366,4371,-19),qV(vHt,4371,4412,33),vHt[4412]=-19,vHt[4413]=33,vHt[4414]=-19,vHt[4415]=33,vHt[4416]=-19,qV(vHt,4417,4428,33),vHt[4428]=-19,vHt[4429]=33,vHt[4430]=-19,vHt[4431]=33,vHt[4432]=-19,qV(vHt,4433,4436,33),qV(vHt,4436,4438,-19),qV(vHt,4438,4441,33),vHt[4441]=-19,qV(vHt,4442,4447,33),qV(vHt,4447,4450,-19),vHt[4450]=33,vHt[4451]=-19,vHt[4452]=33,vHt[4453]=-19,vHt[4454]=33,vHt[4455]=-19,vHt[4456]=33,vHt[4457]=-19,qV(vHt,4458,4461,33),qV(vHt,4461,4463,-19),qV(vHt,4463,4466,33),qV(vHt,4466,4468,-19),vHt[4468]=33,vHt[4469]=-19,qV(vHt,4470,4510,33),vHt[4510]=-19,qV(vHt,4511,4520,33),vHt[4520]=-19,qV(vHt,4521,4523,33),vHt[4523]=-19,qV(vHt,4524,4526,33),qV(vHt,4526,4528,-19),qV(vHt,4528,4535,33),qV(vHt,4535,4537,-19),vHt[4537]=33,vHt[4538]=-19,vHt[4539]=33,qV(vHt,4540,4547,-19),qV(vHt,4547,4587,33),vHt[4587]=-19,qV(vHt,4588,4592,33),vHt[4592]=-19,qV(vHt,4593,4601,33),vHt[4601]=-19,qV(vHt,4602,7680,33),qV(vHt,7680,7836,-19),qV(vHt,7836,7840,33),qV(vHt,7840,7930,-19),qV(vHt,7930,7936,33),qV(vHt,7936,7958,-19),qV(vHt,7958,7960,33),qV(vHt,7960,7966,-19),qV(vHt,7966,7968,33),qV(vHt,7968,8006,-19),qV(vHt,8006,8008,33),qV(vHt,8008,8014,-19),qV(vHt,8014,8016,33),qV(vHt,8016,8024,-19),vHt[8024]=33,vHt[8025]=-19,vHt[8026]=33,vHt[8027]=-19,vHt[8028]=33,vHt[8029]=-19,vHt[8030]=33,qV(vHt,8031,8062,-19),qV(vHt,8062,8064,33),qV(vHt,8064,8117,-19),vHt[8117]=33,qV(vHt,8118,8125,-19),vHt[8125]=33,vHt[8126]=-19,qV(vHt,8127,8130,33),qV(vHt,8130,8133,-19),vHt[8133]=33,qV(vHt,8134,8141,-19),qV(vHt,8141,8144,33),qV(vHt,8144,8148,-19),qV(vHt,8148,8150,33),qV(vHt,8150,8156,-19),qV(vHt,8156,8160,33),qV(vHt,8160,8173,-19),qV(vHt,8173,8178,33),qV(vHt,8178,8181,-19),vHt[8181]=33,qV(vHt,8182,8189,-19),qV(vHt,8189,8400,33),qV(vHt,8400,8413,-87),qV(vHt,8413,8417,33),vHt[8417]=-87,qV(vHt,8418,8486,33),vHt[8486]=-19,qV(vHt,8487,8490,33),qV(vHt,8490,8492,-19),qV(vHt,8492,8494,33),vHt[8494]=-19,qV(vHt,8495,8576,33),qV(vHt,8576,8579,-19),qV(vHt,8579,12293,33),vHt[12293]=-87,vHt[12294]=33,vHt[12295]=-19,qV(vHt,12296,12321,33),qV(vHt,12321,12330,-19),qV(vHt,12330,12336,-87),vHt[12336]=33,qV(vHt,12337,12342,-87),qV(vHt,12342,12353,33),qV(vHt,12353,12437,-19),qV(vHt,12437,12441,33),qV(vHt,12441,12443,-87),qV(vHt,12443,12445,33),qV(vHt,12445,12447,-87),qV(vHt,12447,12449,33),qV(vHt,12449,12539,-19),vHt[12539]=33,qV(vHt,12540,12543,-87),qV(vHt,12543,12549,33),qV(vHt,12549,12589,-19),qV(vHt,12589,19968,33),qV(vHt,19968,40870,-19),qV(vHt,40870,44032,33),qV(vHt,44032,55204,-19),qV(vHt,55204,C0n,33),qV(vHt,57344,65534,33)}function oZn(n){var t,e,i,r,c,a,o;n.hb||(n.hb=!0,qon(n,"ecore"),Xon(n,"ecore"),zon(n,Drt),mhn(n.fb,"E"),mhn(n.L,"T"),mhn(n.P,"K"),mhn(n.P,"V"),mhn(n.cb,"E"),ttn(n1(n.b),n.bb),ttn(n1(n.a),n.Q),ttn(n1(n.o),n.p),ttn(n1(n.p),n.R),ttn(n1(n.q),n.p),ttn(n1(n.v),n.q),ttn(n1(n.w),n.R),ttn(n1(n.B),n.Q),ttn(n1(n.R),n.Q),ttn(n1(n.T),n.eb),ttn(n1(n.U),n.R),ttn(n1(n.V),n.eb),ttn(n1(n.W),n.bb),ttn(n1(n.bb),n.eb),ttn(n1(n.eb),n.R),ttn(n1(n.db),n.R),A4(n.b,u_t,Yit,!1,!1,!0),mun(uG(zrn(gZ(n.b),0),35),n.e,"iD",null,0,1,u_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.b),1),19),n.q,null,"eAttributeType",1,1,u_t,!0,!0,!1,!1,!0,!1,!0),A4(n.a,c_t,Wit,!1,!1,!0),mun(uG(zrn(gZ(n.a),0),35),n._,set,null,0,1,c_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.a),1),19),n.ab,null,"details",0,-1,c_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.a),2),19),n.Q,uG(zrn(gZ(n.Q),0),19),"eModelElement",0,1,c_t,!0,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.a),3),19),n.S,null,"contents",0,-1,c_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.a),4),19),n.S,null,"references",0,-1,c_t,!1,!1,!0,!1,!0,!1,!1),A4(n.o,h_t,"EClass",!1,!1,!0),mun(uG(zrn(gZ(n.o),0),35),n.e,"abstract",null,0,1,h_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.o),1),35),n.e,"interface",null,0,1,h_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.o),2),19),n.o,null,"eSuperTypes",0,-1,h_t,!1,!1,!0,!1,!0,!0,!1),ujn(uG(zrn(gZ(n.o),3),19),n.T,uG(zrn(gZ(n.T),0),19),"eOperations",0,-1,h_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.o),4),19),n.b,null,"eAllAttributes",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),5),19),n.W,null,"eAllReferences",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),6),19),n.W,null,"eReferences",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),7),19),n.b,null,"eAttributes",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),8),19),n.W,null,"eAllContainments",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),9),19),n.T,null,"eAllOperations",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),10),19),n.bb,null,"eAllStructuralFeatures",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),11),19),n.o,null,"eAllSuperTypes",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),12),19),n.b,null,"eIDAttribute",0,1,h_t,!0,!0,!1,!1,!1,!1,!0),ujn(uG(zrn(gZ(n.o),13),19),n.bb,uG(zrn(gZ(n.bb),7),19),"eStructuralFeatures",0,-1,h_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.o),14),19),n.H,null,"eGenericSuperTypes",0,-1,h_t,!1,!1,!0,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.o),15),19),n.H,null,"eAllGenericSuperTypes",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),djn(o=san(uG(zrn(dZ(n.o),0),62),n.e,"isSuperTypeOf"),n.o,"someClass"),san(uG(zrn(dZ(n.o),1),62),n.I,"getFeatureCount"),djn(o=san(uG(zrn(dZ(n.o),2),62),n.bb,Frt),n.I,"featureID"),djn(o=san(uG(zrn(dZ(n.o),3),62),n.I,_rt),n.bb,Brt),djn(o=san(uG(zrn(dZ(n.o),4),62),n.bb,Frt),n._,"featureName"),san(uG(zrn(dZ(n.o),5),62),n.I,"getOperationCount"),djn(o=san(uG(zrn(dZ(n.o),6),62),n.T,"getEOperation"),n.I,"operationID"),djn(o=san(uG(zrn(dZ(n.o),7),62),n.I,Hrt),n.T,Urt),djn(o=san(uG(zrn(dZ(n.o),8),62),n.T,"getOverride"),n.T,Urt),djn(o=san(uG(zrn(dZ(n.o),9),62),n.H,"getFeatureType"),n.bb,Brt),A4(n.p,s_t,Zit,!0,!1,!0),mun(uG(zrn(gZ(n.p),0),35),n._,"instanceClassName",null,0,1,s_t,!1,!0,!0,!0,!0,!1),t=NY(n.L),e=n6(),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),N$n(uG(zrn(gZ(n.p),1),35),t,"instanceClass",s_t,!0,!0,!1,!0),mun(uG(zrn(gZ(n.p),2),35),n.M,Grt,null,0,1,s_t,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.p),3),35),n._,"instanceTypeName",null,0,1,s_t,!1,!0,!0,!0,!0,!1),ujn(uG(zrn(gZ(n.p),4),19),n.U,uG(zrn(gZ(n.U),3),19),"ePackage",0,1,s_t,!0,!1,!1,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.p),5),19),n.db,null,qrt,0,-1,s_t,!1,!1,!0,!0,!0,!1,!1),djn(o=san(uG(zrn(dZ(n.p),0),62),n.e,Xrt),n.M,wZn),san(uG(zrn(dZ(n.p),1),62),n.I,"getClassifierID"),A4(n.q,f_t,"EDataType",!1,!1,!0),mun(uG(zrn(gZ(n.q),0),35),n.e,"serializable",Fnt,0,1,f_t,!1,!1,!0,!1,!0,!1),A4(n.v,w_t,"EEnum",!1,!1,!0),ujn(uG(zrn(gZ(n.v),0),19),n.w,uG(zrn(gZ(n.w),3),19),"eLiterals",0,-1,w_t,!1,!1,!0,!0,!1,!1,!1),djn(o=san(uG(zrn(dZ(n.v),0),62),n.w,zrt),n._,Bet),djn(o=san(uG(zrn(dZ(n.v),1),62),n.w,zrt),n.I,uet),djn(o=san(uG(zrn(dZ(n.v),2),62),n.w,"getEEnumLiteralByLiteral"),n._,"literal"),A4(n.w,d_t,nrt,!1,!1,!0),mun(uG(zrn(gZ(n.w),0),35),n.I,uet,null,0,1,d_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.w),1),35),n.A,"instance",null,0,1,d_t,!0,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.w),2),35),n._,"literal",null,0,1,d_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.w),3),19),n.v,uG(zrn(gZ(n.v),0),19),"eEnum",0,1,d_t,!0,!1,!1,!1,!1,!1,!1),A4(n.B,sFt,"EFactory",!1,!1,!0),ujn(uG(zrn(gZ(n.B),0),19),n.U,uG(zrn(gZ(n.U),2),19),"ePackage",1,1,sFt,!0,!1,!0,!1,!1,!1,!1),djn(o=san(uG(zrn(dZ(n.B),0),62),n.S,"create"),n.o,"eClass"),djn(o=san(uG(zrn(dZ(n.B),1),62),n.M,"createFromString"),n.q,"eDataType"),djn(o,n._,"literalValue"),djn(o=san(uG(zrn(dZ(n.B),2),62),n._,"convertToString"),n.q,"eDataType"),djn(o,n.M,"instanceValue"),A4(n.Q,uFt,Rtt,!0,!1,!0),ujn(uG(zrn(gZ(n.Q),0),19),n.a,uG(zrn(gZ(n.a),2),19),"eAnnotations",0,-1,uFt,!1,!1,!0,!0,!1,!1,!1),djn(o=san(uG(zrn(dZ(n.Q),0),62),n.a,"getEAnnotation"),n._,set),A4(n.R,hFt,Ktt,!0,!1,!0),mun(uG(zrn(gZ(n.R),0),35),n._,Bet,null,0,1,hFt,!1,!1,!0,!1,!0,!1),A4(n.S,nFt,"EObject",!1,!1,!0),san(uG(zrn(dZ(n.S),0),62),n.o,"eClass"),san(uG(zrn(dZ(n.S),1),62),n.e,"eIsProxy"),san(uG(zrn(dZ(n.S),2),62),n.X,"eResource"),san(uG(zrn(dZ(n.S),3),62),n.S,"eContainer"),san(uG(zrn(dZ(n.S),4),62),n.bb,"eContainingFeature"),san(uG(zrn(dZ(n.S),5),62),n.W,"eContainmentFeature"),o=san(uG(zrn(dZ(n.S),6),62),null,"eContents"),t=NY(n.fb),e=NY(n.S),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(r=CCn(o,t,null))&&r.oj(),o=san(uG(zrn(dZ(n.S),7),62),null,"eAllContents"),t=NY(n.cb),e=NY(n.S),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(c=CCn(o,t,null))&&c.oj(),o=san(uG(zrn(dZ(n.S),8),62),null,"eCrossReferences"),t=NY(n.fb),e=NY(n.S),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(a=CCn(o,t,null))&&a.oj(),djn(o=san(uG(zrn(dZ(n.S),9),62),n.M,"eGet"),n.bb,Brt),djn(o=san(uG(zrn(dZ(n.S),10),62),n.M,"eGet"),n.bb,Brt),djn(o,n.e,"resolve"),djn(o=san(uG(zrn(dZ(n.S),11),62),null,"eSet"),n.bb,Brt),djn(o,n.M,"newValue"),djn(o=san(uG(zrn(dZ(n.S),12),62),n.e,"eIsSet"),n.bb,Brt),djn(o=san(uG(zrn(dZ(n.S),13),62),null,"eUnset"),n.bb,Brt),djn(o=san(uG(zrn(dZ(n.S),14),62),n.M,"eInvoke"),n.T,Urt),t=NY(n.fb),e=n6(),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),OSn(o,t,"arguments"),QQ(o,n.K),A4(n.T,p_t,ert,!1,!1,!0),ujn(uG(zrn(gZ(n.T),0),19),n.o,uG(zrn(gZ(n.o),3),19),Vrt,0,1,p_t,!0,!1,!1,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.T),1),19),n.db,null,qrt,0,-1,p_t,!1,!1,!0,!0,!0,!1,!1),ujn(uG(zrn(gZ(n.T),2),19),n.V,uG(zrn(gZ(n.V),0),19),"eParameters",0,-1,p_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.T),3),19),n.p,null,"eExceptions",0,-1,p_t,!1,!1,!0,!1,!0,!0,!1),ujn(uG(zrn(gZ(n.T),4),19),n.H,null,"eGenericExceptions",0,-1,p_t,!1,!1,!0,!0,!1,!0,!1),san(uG(zrn(dZ(n.T),0),62),n.I,Hrt),djn(o=san(uG(zrn(dZ(n.T),1),62),n.e,"isOverrideOf"),n.T,"someOperation"),A4(n.U,fFt,"EPackage",!1,!1,!0),mun(uG(zrn(gZ(n.U),0),35),n._,"nsURI",null,0,1,fFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.U),1),35),n._,"nsPrefix",null,0,1,fFt,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.U),2),19),n.B,uG(zrn(gZ(n.B),0),19),"eFactoryInstance",1,1,fFt,!0,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.U),3),19),n.p,uG(zrn(gZ(n.p),4),19),"eClassifiers",0,-1,fFt,!1,!1,!0,!0,!0,!1,!1),ujn(uG(zrn(gZ(n.U),4),19),n.U,uG(zrn(gZ(n.U),5),19),"eSubpackages",0,-1,fFt,!1,!1,!0,!0,!0,!1,!1),ujn(uG(zrn(gZ(n.U),5),19),n.U,uG(zrn(gZ(n.U),4),19),"eSuperPackage",0,1,fFt,!0,!1,!1,!1,!0,!1,!1),djn(o=san(uG(zrn(dZ(n.U),0),62),n.p,"getEClassifier"),n._,Bet),A4(n.V,m_t,irt,!1,!1,!0),ujn(uG(zrn(gZ(n.V),0),19),n.T,uG(zrn(gZ(n.T),2),19),"eOperation",0,1,m_t,!0,!1,!1,!1,!1,!1,!1),A4(n.W,v_t,rrt,!1,!1,!0),mun(uG(zrn(gZ(n.W),0),35),n.e,"containment",null,0,1,v_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.W),1),35),n.e,"container",null,0,1,v_t,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.W),2),35),n.e,"resolveProxies",Fnt,0,1,v_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.W),3),19),n.W,null,"eOpposite",0,1,v_t,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.W),4),19),n.o,null,"eReferenceType",1,1,v_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.W),5),19),n.b,null,"eKeys",0,-1,v_t,!1,!1,!0,!1,!0,!1,!1),A4(n.bb,o_t,Jit,!0,!1,!0),mun(uG(zrn(gZ(n.bb),0),35),n.e,"changeable",Fnt,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),1),35),n.e,"volatile",null,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),2),35),n.e,"transient",null,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),3),35),n._,"defaultValueLiteral",null,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),4),35),n.M,Grt,null,0,1,o_t,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.bb),5),35),n.e,"unsettable",null,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),6),35),n.e,"derived",null,0,1,o_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.bb),7),19),n.o,uG(zrn(gZ(n.o),13),19),Vrt,0,1,o_t,!0,!1,!1,!1,!1,!1,!1),san(uG(zrn(dZ(n.bb),0),62),n.I,_rt),o=san(uG(zrn(dZ(n.bb),1),62),null,"getContainerClass"),t=NY(n.L),e=n6(),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(i=CCn(o,t,null))&&i.oj(),A4(n.eb,a_t,Qit,!0,!1,!0),mun(uG(zrn(gZ(n.eb),0),35),n.e,"ordered",Fnt,0,1,a_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.eb),1),35),n.e,"unique",Fnt,0,1,a_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.eb),2),35),n.I,"lowerBound",null,0,1,a_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.eb),3),35),n.I,"upperBound","1",0,1,a_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.eb),4),35),n.e,"many",null,0,1,a_t,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.eb),5),35),n.e,"required",null,0,1,a_t,!0,!0,!1,!1,!0,!0),ujn(uG(zrn(gZ(n.eb),6),19),n.p,null,"eType",0,1,a_t,!1,!0,!0,!1,!0,!0,!1),ujn(uG(zrn(gZ(n.eb),7),19),n.H,null,"eGenericType",0,1,a_t,!1,!0,!0,!0,!1,!0,!1),A4(n.ab,Sat,"EStringToStringMapEntry",!1,!1,!1),mun(uG(zrn(gZ(n.ab),0),35),n._,"key",null,0,1,Sat,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.ab),1),35),n._,uet,null,0,1,Sat,!1,!1,!0,!1,!0,!1),A4(n.H,g_t,trt,!1,!1,!0),ujn(uG(zrn(gZ(n.H),0),19),n.H,null,"eUpperBound",0,1,g_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.H),1),19),n.H,null,"eTypeArguments",0,-1,g_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.H),2),19),n.p,null,"eRawType",1,1,g_t,!0,!1,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.H),3),19),n.H,null,"eLowerBound",0,1,g_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.H),4),19),n.db,null,"eTypeParameter",0,1,g_t,!1,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.H),5),19),n.p,null,"eClassifier",0,1,g_t,!1,!1,!0,!1,!0,!1,!1),djn(o=san(uG(zrn(dZ(n.H),0),62),n.e,Xrt),n.M,wZn),A4(n.db,J_t,crt,!1,!1,!0),ujn(uG(zrn(gZ(n.db),0),19),n.H,null,"eBounds",0,-1,J_t,!1,!1,!0,!0,!1,!1,!1),UJ(n.c,Bot,"EBigDecimal",!0),UJ(n.d,Xot,"EBigInteger",!0),UJ(n.e,ZHt,"EBoolean",!0),UJ(n.f,cot,"EBooleanObject",!0),UJ(n.i,tUt,"EByte",!0),UJ(n.g,cT(tUt,1),"EByteArray",!0),UJ(n.j,uot,"EByteObject",!0),UJ(n.k,JHt,"EChar",!0),UJ(n.n,hot,"ECharacterObject",!0),UJ(n.r,iot,"EDate",!0),UJ(n.s,aUt,"EDiagnosticChain",!1),UJ(n.t,eUt,"EDouble",!0),UJ(n.u,fot,"EDoubleObject",!0),UJ(n.fb,CFt,"EEList",!1),UJ(n.A,BFt,"EEnumerator",!1),UJ(n.C,IBt,"EFeatureMap",!1),UJ(n.D,Z_t,"EFeatureMapEntry",!1),UJ(n.F,iUt,"EFloat",!0),UJ(n.G,lot,"EFloatObject",!0),UJ(n.I,YHt,"EInt",!0),UJ(n.J,dot,"EIntegerObject",!0),UJ(n.L,gat,"EJavaClass",!0),UJ(n.M,dat,"EJavaObject",!0),UJ(n.N,nUt,"ELong",!0),UJ(n.O,yot,"ELongObject",!0),UJ(n.P,mat,"EMap",!1),UJ(n.X,jBt,"EResource",!1),UJ(n.Y,oUt,"EResourceSet",!1),UJ(n.Z,rUt,"EShort",!0),UJ(n.$,Tot,"EShortObject",!0),UJ(n._,$ot,"EString",!0),UJ(n.cb,OFt,"ETreeIterator",!1),UJ(n.K,uUt,"EInvocationTargetException",!1),nwn(n,Drt))}"undefined"!=typeof window?e=window:void 0!==n?e=n:"undefined"!=typeof self&&(e=self);var uZn,sZn,hZn,fZn,lZn,bZn,wZn="object",dZn="boolean",gZn="number",pZn="string",mZn="function",vZn=2147483647,kZn="java.lang",yZn={3:1},MZn="com.google.common.base",TZn=", ",jZn="%s (%s) must not be negative",EZn={3:1,4:1,5:1},SZn="negative size: ",PZn="no calls to next() since the last call to remove()",CZn="Optional.of(",IZn="null",OZn={204:1,51:1},AZn="com.google.common.collect",LZn={204:1,51:1,128:1},NZn={229:1,3:1},$Zn={51:1},DZn="java.util",xZn={85:1},RZn={20:1,31:1,16:1},KZn=2063,FZn={20:1,31:1,16:1,21:1},_Zn={85:1,139:1,133:1},BZn={20:1,31:1,16:1,21:1,87:1},HZn={20:1,31:1,16:1,277:1,21:1,87:1},UZn={51:1,128:1},GZn={358:1,44:1},qZn="AbstractMapEntry",XZn="expectedValuesPerKey",zZn={3:1,6:1,4:1,5:1},VZn=16384,WZn={159:1},QZn={41:1},JZn={202:1},YZn={l:4194303,m:4194303,h:524287},ZZn={253:1,3:1,34:1},n1n="range unbounded on this side",t1n={20:1},e1n={20:1,16:1},i1n={3:1,20:1,31:1,16:1},r1n={306:1,3:1,20:1,31:1,16:1,15:1,59:1},c1n={3:1,4:1,5:1,173:1},a1n={3:1,85:1},o1n={20:1,16:1,21:1},u1n={3:1,20:1,31:1,16:1,21:1},s1n={20:1,16:1,21:1,87:1},h1n=461845907,f1n=-862048943,l1n={3:1,6:1,4:1,5:1,173:1},b1n="expectedSize",w1n=1024,d1n=1073741824,g1n="initialArraySize",p1n={3:1,6:1,4:1,9:1,5:1},m1n={20:1,31:1,56:1,16:1,15:1},v1n="arraySize",k1n={20:1,31:1,56:1,16:1,15:1,59:1},y1n={46:1},M1n={380:1},T1n=1e-4,j1n=-2147483648,E1n="__noinit__",S1n={3:1,103:1,63:1,82:1},P1n="com.google.gwt.core.client.impl",C1n="String",I1n="com.google.gwt.core.client",O1n="anonymous",A1n="fnStack",L1n="Unknown",N1n={201:1,3:1,4:1},$1n=1e3,D1n=65535,x1n="January",R1n="February",K1n="March",F1n="April",_1n="May",B1n="June",H1n="July",U1n="August",G1n="September",q1n="October",X1n="November",z1n="December",V1n=1900,W1n={53:1,3:1,4:1},Q1n="Before Christ",J1n="Anno Domini",Y1n="Sunday",Z1n="Monday",n0n="Tuesday",t0n="Wednesday",e0n="Thursday",i0n="Friday",r0n="Saturday",c0n="com.google.gwt.i18n.shared",a0n="DateTimeFormat",o0n="com.google.gwt.i18n.client",u0n="DefaultDateTimeFormatInfo",s0n={3:1,4:1,34:1,206:1},h0n="com.google.gwt.json.client",f0n=4194303,l0n=1048575,b0n=524288,w0n=4194304,d0n=17592186044416,g0n=1e9,p0n=-17592186044416,m0n="java.io",v0n={3:1,103:1,77:1,63:1,82:1},k0n={3:1,295:1,82:1},y0n='For input string: "',M0n=1/0,T0n=-1/0,j0n=4096,E0n={3:1,4:1,376:1},S0n="org.eclipse.elk.layered",P0n=65536,C0n=55296,I0n={109:1,3:1,4:1},O0n=1e5,A0n=.3010299956639812,L0n=4294967295,N0n="0.0",$0n={44:1},D0n="Unable to add element to queue",x0n={3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1},R0n={3:1,20:1,31:1,56:1,16:1,15:1,59:1},K0n={20:1,16:1,15:1},F0n={3:1,50:1},_0n={189:1},B0n={3:1,4:1,85:1},H0n={3:1,4:1,20:1,31:1,16:1,49:1,21:1},U0n="delete",G0n=1.4901161193847656e-8,q0n=11102230246251565e-32,X0n=15525485,z0n=5.960464477539063e-8,V0n=16777216,W0n=16777215,Q0n=", length: ",J0n={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1},Y0n="subMap: ",Z0n=" less than ",n2n={3:1,34:1,22:1,303:1},t2n="java.util.function",e2n="java.util.logging",i2n={3:1,4:1,5:1,856:1},r2n="undefined",c2n="java.util.stream",a2n={533:1,687:1},o2n="fromIndex: ",u2n=" > toIndex: ",s2n=", toIndex: ",h2n="Index: ",f2n=", Size: ",l2n="org.eclipse.elk.alg.common",b2n={50:1},w2n="org.eclipse.elk.alg.common.compaction",d2n="Scanline/EventHandler",g2n="org.eclipse.elk.alg.common.compaction.oned",p2n="CNode belongs to another CGroup.",m2n="ISpacingsHandler/1",v2n="The ",k2n=" instance has been finished already.",y2n="The direction ",M2n=" is not supported by the CGraph instance.",T2n="OneDimensionalCompactor",j2n="OneDimensionalCompactor/lambda$0$Type",E2n="Quadruplet",S2n="ScanlineConstraintCalculator",P2n="ScanlineConstraintCalculator/ConstraintsScanlineHandler",C2n="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",I2n="ScanlineConstraintCalculator/Timestamp",O2n="ScanlineConstraintCalculator/lambda$0$Type",A2n={178:1,46:1},L2n="org.eclipse.elk.alg.common.compaction.options",N2n="org.eclipse.elk.core.data",$2n="org.eclipse.elk.polyomino.traversalStrategy",D2n="org.eclipse.elk.polyomino.lowLevelSort",x2n="org.eclipse.elk.polyomino.highLevelSort",R2n="org.eclipse.elk.polyomino.fill",K2n={134:1},F2n="polyomino",_2n="org.eclipse.elk.alg.common.networksimplex",B2n={183:1,3:1,4:1},H2n="org.eclipse.elk.alg.common.nodespacing",U2n="org.eclipse.elk.alg.common.nodespacing.cellsystem",G2n="CENTER",q2n={217:1,336:1},X2n={3:1,4:1,5:1,603:1},z2n="LEFT",V2n="RIGHT",W2n="Vertical alignment cannot be null",Q2n="BOTTOM",J2n="org.eclipse.elk.alg.common.nodespacing.internal",Y2n="UNDEFINED",Z2n=.01,n3n="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",t3n="LabelPlacer/lambda$0$Type",e3n="LabelPlacer/lambda$1$Type",i3n="portRatioOrPosition",r3n="org.eclipse.elk.alg.common.overlaps",c3n="DOWN",a3n="org.eclipse.elk.alg.common.polyomino",o3n="NORTH",u3n="EAST",s3n="SOUTH",h3n="WEST",f3n="org.eclipse.elk.alg.common.polyomino.structures",l3n="Direction",b3n="Grid is only of size ",w3n=". Requested point (",d3n=") is out of bounds.",g3n=" Given center based coordinates were (",p3n="org.eclipse.elk.graph.properties",m3n="IPropertyHolder",v3n={3:1,96:1,137:1},k3n="org.eclipse.elk.alg.common.spore",y3n="org.eclipse.elk.alg.common.utils",M3n={205:1},T3n="org.eclipse.elk.core",j3n="Connected Components Compaction",E3n="org.eclipse.elk.alg.disco",S3n="org.eclipse.elk.alg.disco.graph",P3n="org.eclipse.elk.alg.disco.options",C3n="CompactionStrategy",I3n="org.eclipse.elk.disco.componentCompaction.strategy",O3n="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",A3n="org.eclipse.elk.disco.debug.discoGraph",L3n="org.eclipse.elk.disco.debug.discoPolys",N3n="componentCompaction",$3n="org.eclipse.elk.disco",D3n="org.eclipse.elk.spacing.componentComponent",x3n="org.eclipse.elk.edge.thickness",R3n="org.eclipse.elk.aspectRatio",K3n="org.eclipse.elk.padding",F3n="org.eclipse.elk.alg.disco.transform",_3n=1.5707963267948966,B3n=17976931348623157e292,H3n={3:1,4:1,5:1,198:1},U3n={3:1,6:1,4:1,5:1,100:1,115:1},G3n="org.eclipse.elk.alg.force",q3n="ComponentsProcessor",X3n="ComponentsProcessor/1",z3n="ElkGraphImporter/lambda$0$Type",V3n="org.eclipse.elk.alg.force.graph",W3n="Component Layout",Q3n="org.eclipse.elk.alg.force.model",J3n="org.eclipse.elk.force.model",Y3n="org.eclipse.elk.force.iterations",Z3n="org.eclipse.elk.force.repulsivePower",n4n="org.eclipse.elk.force.temperature",t4n=.001,e4n="org.eclipse.elk.force.repulsion",i4n="org.eclipse.elk.alg.force.options",r4n=1.600000023841858,c4n="org.eclipse.elk.force",a4n="org.eclipse.elk.priority",o4n="org.eclipse.elk.spacing.nodeNode",u4n="org.eclipse.elk.spacing.edgeLabel",s4n="org.eclipse.elk.randomSeed",h4n="org.eclipse.elk.separateConnectedComponents",f4n="org.eclipse.elk.interactive",l4n="org.eclipse.elk.portConstraints",b4n="org.eclipse.elk.edgeLabels.inline",w4n="org.eclipse.elk.omitNodeMicroLayout",d4n="org.eclipse.elk.nodeSize.fixedGraphSize",g4n="org.eclipse.elk.nodeSize.options",p4n="org.eclipse.elk.nodeSize.constraints",m4n="org.eclipse.elk.nodeLabels.placement",v4n="org.eclipse.elk.portLabels.placement",k4n="org.eclipse.elk.topdownLayout",y4n="org.eclipse.elk.topdown.scaleFactor",M4n="org.eclipse.elk.topdown.hierarchicalNodeWidth",T4n="org.eclipse.elk.topdown.hierarchicalNodeAspectRatio",j4n="org.eclipse.elk.topdown.nodeType",E4n="origin",S4n="random",P4n="boundingBox.upLeft",C4n="boundingBox.lowRight",I4n="org.eclipse.elk.stress.fixed",O4n="org.eclipse.elk.stress.desiredEdgeLength",A4n="org.eclipse.elk.stress.dimension",L4n="org.eclipse.elk.stress.epsilon",N4n="org.eclipse.elk.stress.iterationLimit",$4n="org.eclipse.elk.stress",D4n="ELK Stress",x4n="org.eclipse.elk.nodeSize.minimum",R4n="org.eclipse.elk.alg.force.stress",K4n="Layered layout",F4n="org.eclipse.elk.alg.layered",_4n="org.eclipse.elk.alg.layered.compaction.components",B4n="org.eclipse.elk.alg.layered.compaction.oned",H4n="org.eclipse.elk.alg.layered.compaction.oned.algs",U4n="org.eclipse.elk.alg.layered.compaction.recthull",G4n="org.eclipse.elk.alg.layered.components",q4n="NONE",X4n="MODEL_ORDER",z4n={3:1,6:1,4:1,9:1,5:1,126:1},V4n={3:1,6:1,4:1,5:1,150:1,100:1,115:1},W4n="org.eclipse.elk.alg.layered.compound",Q4n={47:1},J4n="org.eclipse.elk.alg.layered.graph",Y4n=" -> ",Z4n="Not supported by LGraph",n6n="Port side is undefined",t6n={3:1,6:1,4:1,5:1,482:1,150:1,100:1,115:1},e6n={3:1,6:1,4:1,5:1,150:1,199:1,210:1,100:1,115:1},i6n={3:1,6:1,4:1,5:1,150:1,2042:1,210:1,100:1,115:1},r6n="([{\"' \t\r\n",c6n=")]}\"' \t\r\n",a6n="The given string contains parts that cannot be parsed as numbers.",o6n="org.eclipse.elk.core.math",u6n={3:1,4:1,140:1,214:1,423:1},s6n={3:1,4:1,107:1,214:1,423:1},h6n="org.eclipse.elk.alg.layered.graph.transform",f6n="ElkGraphImporter",l6n="ElkGraphImporter/lambda$1$Type",b6n="ElkGraphImporter/lambda$2$Type",w6n="ElkGraphImporter/lambda$4$Type",d6n="org.eclipse.elk.alg.layered.intermediate",g6n="Node margin calculation",p6n="ONE_SIDED_GREEDY_SWITCH",m6n="TWO_SIDED_GREEDY_SWITCH",v6n="No implementation is available for the layout processor ",k6n="IntermediateProcessorStrategy",y6n="Node '",M6n="FIRST_SEPARATE",T6n="LAST_SEPARATE",j6n="Odd port side processing",E6n="org.eclipse.elk.alg.layered.intermediate.compaction",S6n="org.eclipse.elk.alg.layered.intermediate.greedyswitch",P6n="org.eclipse.elk.alg.layered.p3order.counting",C6n={230:1},I6n="org.eclipse.elk.alg.layered.intermediate.loops",O6n="org.eclipse.elk.alg.layered.intermediate.loops.ordering",A6n="org.eclipse.elk.alg.layered.intermediate.loops.routing",L6n="org.eclipse.elk.alg.layered.intermediate.preserveorder",N6n="org.eclipse.elk.alg.layered.intermediate.wrapping",$6n="org.eclipse.elk.alg.layered.options",D6n="INTERACTIVE",x6n="GREEDY",R6n="DEPTH_FIRST",K6n="EDGE_LENGTH",F6n="SELF_LOOPS",_6n="firstTryWithInitialOrder",B6n="org.eclipse.elk.layered.directionCongruency",H6n="org.eclipse.elk.layered.feedbackEdges",U6n="org.eclipse.elk.layered.interactiveReferencePoint",G6n="org.eclipse.elk.layered.mergeEdges",q6n="org.eclipse.elk.layered.mergeHierarchyEdges",X6n="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",z6n="org.eclipse.elk.layered.portSortingStrategy",V6n="org.eclipse.elk.layered.thoroughness",W6n="org.eclipse.elk.layered.unnecessaryBendpoints",Q6n="org.eclipse.elk.layered.generatePositionAndLayerIds",J6n="org.eclipse.elk.layered.cycleBreaking.strategy",Y6n="org.eclipse.elk.layered.layering.strategy",Z6n="org.eclipse.elk.layered.layering.layerConstraint",n5n="org.eclipse.elk.layered.layering.layerChoiceConstraint",t5n="org.eclipse.elk.layered.layering.layerId",e5n="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",i5n="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",r5n="org.eclipse.elk.layered.layering.nodePromotion.strategy",c5n="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",a5n="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",o5n="org.eclipse.elk.layered.crossingMinimization.strategy",u5n="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",s5n="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",h5n="org.eclipse.elk.layered.crossingMinimization.semiInteractive",f5n="org.eclipse.elk.layered.crossingMinimization.inLayerPredOf",l5n="org.eclipse.elk.layered.crossingMinimization.inLayerSuccOf",b5n="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",w5n="org.eclipse.elk.layered.crossingMinimization.positionId",d5n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",g5n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",p5n="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",m5n="org.eclipse.elk.layered.nodePlacement.strategy",v5n="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",k5n="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",y5n="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",M5n="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",T5n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",j5n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",E5n="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",S5n="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",P5n="org.eclipse.elk.layered.edgeRouting.splines.mode",C5n="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",I5n="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",O5n="org.eclipse.elk.layered.spacing.baseValue",A5n="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",L5n="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",N5n="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",$5n="org.eclipse.elk.layered.priority.direction",D5n="org.eclipse.elk.layered.priority.shortness",x5n="org.eclipse.elk.layered.priority.straightness",R5n="org.eclipse.elk.layered.compaction.connectedComponents",K5n="org.eclipse.elk.layered.compaction.postCompaction.strategy",F5n="org.eclipse.elk.layered.compaction.postCompaction.constraints",_5n="org.eclipse.elk.layered.highDegreeNodes.treatment",B5n="org.eclipse.elk.layered.highDegreeNodes.threshold",H5n="org.eclipse.elk.layered.highDegreeNodes.treeHeight",U5n="org.eclipse.elk.layered.wrapping.strategy",G5n="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",q5n="org.eclipse.elk.layered.wrapping.correctionFactor",X5n="org.eclipse.elk.layered.wrapping.cutting.strategy",z5n="org.eclipse.elk.layered.wrapping.cutting.cuts",V5n="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",W5n="org.eclipse.elk.layered.wrapping.validify.strategy",Q5n="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",J5n="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",Y5n="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",Z5n="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",n8n="org.eclipse.elk.layered.edgeLabels.sideSelection",t8n="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",e8n="org.eclipse.elk.layered.considerModelOrder.strategy",i8n="org.eclipse.elk.layered.considerModelOrder.portModelOrder",r8n="org.eclipse.elk.layered.considerModelOrder.noModelOrder",c8n="org.eclipse.elk.layered.considerModelOrder.components",a8n="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",o8n="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",u8n="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",s8n="layering",h8n="layering.minWidth",f8n="layering.nodePromotion",l8n="crossingMinimization",b8n="org.eclipse.elk.hierarchyHandling",w8n="crossingMinimization.greedySwitch",d8n="nodePlacement",g8n="nodePlacement.bk",p8n="edgeRouting",m8n="org.eclipse.elk.edgeRouting",v8n="spacing",k8n="priority",y8n="compaction",M8n="compaction.postCompaction",T8n="Specifies whether and how post-process compaction is applied.",j8n="highDegreeNodes",E8n="wrapping",S8n="wrapping.cutting",P8n="wrapping.validify",C8n="wrapping.multiEdge",I8n="edgeLabels",O8n="considerModelOrder",A8n="org.eclipse.elk.spacing.commentComment",L8n="org.eclipse.elk.spacing.commentNode",N8n="org.eclipse.elk.spacing.edgeEdge",$8n="org.eclipse.elk.spacing.edgeNode",D8n="org.eclipse.elk.spacing.labelLabel",x8n="org.eclipse.elk.spacing.labelPortHorizontal",R8n="org.eclipse.elk.spacing.labelPortVertical",K8n="org.eclipse.elk.spacing.labelNode",F8n="org.eclipse.elk.spacing.nodeSelfLoop",_8n="org.eclipse.elk.spacing.portPort",B8n="org.eclipse.elk.spacing.individual",H8n="org.eclipse.elk.port.borderOffset",U8n="org.eclipse.elk.noLayout",G8n="org.eclipse.elk.port.side",q8n="org.eclipse.elk.debugMode",X8n="org.eclipse.elk.alignment",z8n="org.eclipse.elk.insideSelfLoops.activate",V8n="org.eclipse.elk.insideSelfLoops.yo",W8n="org.eclipse.elk.direction",Q8n="org.eclipse.elk.nodeLabels.padding",J8n="org.eclipse.elk.portLabels.nextToPortIfPossible",Y8n="org.eclipse.elk.portLabels.treatAsGroup",Z8n="org.eclipse.elk.portAlignment.default",n9n="org.eclipse.elk.portAlignment.north",t9n="org.eclipse.elk.portAlignment.south",e9n="org.eclipse.elk.portAlignment.west",i9n="org.eclipse.elk.portAlignment.east",r9n="org.eclipse.elk.contentAlignment",c9n="org.eclipse.elk.junctionPoints",a9n="org.eclipse.elk.edgeLabels.placement",o9n="org.eclipse.elk.port.index",u9n="org.eclipse.elk.commentBox",s9n="org.eclipse.elk.hypernode",h9n="org.eclipse.elk.port.anchor",f9n="org.eclipse.elk.partitioning.activate",l9n="org.eclipse.elk.partitioning.partition",b9n="org.eclipse.elk.position",w9n="org.eclipse.elk.margins",d9n="org.eclipse.elk.spacing.portsSurrounding",g9n="org.eclipse.elk.interactiveLayout",p9n="org.eclipse.elk.core.util",m9n={3:1,4:1,5:1,601:1},v9n="NETWORK_SIMPLEX",k9n="SIMPLE",y9n={106:1,47:1},M9n="org.eclipse.elk.alg.layered.p1cycles",T9n="org.eclipse.elk.alg.layered.p2layers",j9n={413:1,230:1},E9n={846:1,3:1,4:1},S9n="org.eclipse.elk.alg.layered.p3order",P9n="org.eclipse.elk.alg.layered.p4nodes",C9n={3:1,4:1,5:1,854:1},I9n=1e-5,O9n="org.eclipse.elk.alg.layered.p4nodes.bk",A9n="org.eclipse.elk.alg.layered.p5edges",L9n="org.eclipse.elk.alg.layered.p5edges.orthogonal",N9n="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",$9n=1e-6,D9n="org.eclipse.elk.alg.layered.p5edges.splines",x9n=.09999999999999998,R9n=1e-8,K9n=4.71238898038469,F9n=3.141592653589793,_9n="org.eclipse.elk.alg.mrtree",B9n=.10000000149011612,H9n="SUPER_ROOT",U9n="org.eclipse.elk.alg.mrtree.graph",G9n=-17976931348623157e292,q9n="org.eclipse.elk.alg.mrtree.intermediate",X9n="Processor compute fanout",z9n={3:1,6:1,4:1,5:1,534:1,100:1,115:1},V9n="Set neighbors in level",W9n="org.eclipse.elk.alg.mrtree.options",Q9n="DESCENDANTS",J9n="org.eclipse.elk.mrtree.compaction",Y9n="org.eclipse.elk.mrtree.edgeEndTextureLength",Z9n="org.eclipse.elk.mrtree.treeLevel",n7n="org.eclipse.elk.mrtree.positionConstraint",t7n="org.eclipse.elk.mrtree.weighting",e7n="org.eclipse.elk.mrtree.edgeRoutingMode",i7n="org.eclipse.elk.mrtree.searchOrder",r7n="Position Constraint",c7n="org.eclipse.elk.mrtree",a7n="org.eclipse.elk.tree",o7n="Processor arrange level",u7n="org.eclipse.elk.alg.mrtree.p2order",s7n="org.eclipse.elk.alg.mrtree.p4route",h7n="org.eclipse.elk.alg.radial",f7n=6.283185307179586,l7n="Before",b7n=5e-324,w7n="After",d7n="org.eclipse.elk.alg.radial.intermediate",g7n="COMPACTION",p7n="org.eclipse.elk.alg.radial.intermediate.compaction",m7n={3:1,4:1,5:1,100:1},v7n="org.eclipse.elk.alg.radial.intermediate.optimization",k7n="No implementation is available for the layout option ",y7n="org.eclipse.elk.alg.radial.options",M7n="org.eclipse.elk.radial.centerOnRoot",T7n="org.eclipse.elk.radial.orderId",j7n="org.eclipse.elk.radial.radius",E7n="org.eclipse.elk.radial.rotate",S7n="org.eclipse.elk.radial.compactor",P7n="org.eclipse.elk.radial.compactionStepSize",C7n="org.eclipse.elk.radial.sorter",I7n="org.eclipse.elk.radial.wedgeCriteria",O7n="org.eclipse.elk.radial.optimizationCriteria",A7n="org.eclipse.elk.radial.rotation.targetAngle",L7n="org.eclipse.elk.radial.rotation.computeAdditionalWedgeSpace",N7n="org.eclipse.elk.radial.rotation.outgoingEdgeAngles",$7n="Compaction",D7n="rotation",x7n="org.eclipse.elk.radial",R7n="org.eclipse.elk.alg.radial.p1position.wedge",K7n="org.eclipse.elk.alg.radial.sorting",F7n=5.497787143782138,_7n=3.9269908169872414,B7n=2.356194490192345,H7n="org.eclipse.elk.alg.rectpacking",U7n="org.eclipse.elk.alg.rectpacking.intermediate",G7n="org.eclipse.elk.alg.rectpacking.options",q7n="org.eclipse.elk.rectpacking.trybox",X7n="org.eclipse.elk.rectpacking.currentPosition",z7n="org.eclipse.elk.rectpacking.desiredPosition",V7n="org.eclipse.elk.rectpacking.inNewRow",W7n="org.eclipse.elk.rectpacking.widthApproximation.strategy",Q7n="org.eclipse.elk.rectpacking.widthApproximation.targetWidth",J7n="org.eclipse.elk.rectpacking.widthApproximation.optimizationGoal",Y7n="org.eclipse.elk.rectpacking.widthApproximation.lastPlaceShift",Z7n="org.eclipse.elk.rectpacking.packing.strategy",nnt="org.eclipse.elk.rectpacking.packing.compaction.rowHeightReevaluation",tnt="org.eclipse.elk.rectpacking.packing.compaction.iterations",ent="org.eclipse.elk.rectpacking.whiteSpaceElimination.strategy",int="widthApproximation",rnt="Compaction Strategy",cnt="packing.compaction",ant="org.eclipse.elk.rectpacking",ont="org.eclipse.elk.alg.rectpacking.p1widthapproximation",unt="org.eclipse.elk.alg.rectpacking.p2packing",snt="No Compaction",hnt="org.eclipse.elk.alg.rectpacking.p3whitespaceelimination",fnt="org.eclipse.elk.alg.rectpacking.util",lnt="No implementation available for ",bnt="org.eclipse.elk.alg.spore",wnt="org.eclipse.elk.alg.spore.options",dnt="org.eclipse.elk.sporeCompaction",gnt="org.eclipse.elk.underlyingLayoutAlgorithm",pnt="org.eclipse.elk.processingOrder.treeConstruction",mnt="org.eclipse.elk.processingOrder.spanningTreeCostFunction",vnt="org.eclipse.elk.processingOrder.preferredRoot",knt="org.eclipse.elk.processingOrder.rootSelection",ynt="org.eclipse.elk.structure.structureExtractionStrategy",Mnt="org.eclipse.elk.compaction.compactionStrategy",Tnt="org.eclipse.elk.compaction.orthogonal",jnt="org.eclipse.elk.overlapRemoval.maxIterations",Ent="org.eclipse.elk.overlapRemoval.runScanline",Snt="processingOrder",Pnt="overlapRemoval",Cnt="org.eclipse.elk.sporeOverlap",Int="org.eclipse.elk.alg.spore.p1structure",Ont="org.eclipse.elk.alg.spore.p2processingorder",Ant="org.eclipse.elk.alg.spore.p3execution",Lnt="Topdown Layout",Nnt="Invalid index: ",$nt="org.eclipse.elk.core.alg",Dnt={341:1},xnt={294:1},Rnt="Make sure its type is registered with the ",Knt=" utility class.",Fnt="true",_nt="false",Bnt="Couldn't clone property '",Hnt=.05,Unt="org.eclipse.elk.core.options",Gnt=1.2999999523162842,qnt="org.eclipse.elk.box",Xnt="org.eclipse.elk.expandNodes",znt="org.eclipse.elk.box.packingMode",Vnt="org.eclipse.elk.algorithm",Wnt="org.eclipse.elk.resolvedAlgorithm",Qnt="org.eclipse.elk.bendPoints",Jnt="org.eclipse.elk.labelManager",Ynt="org.eclipse.elk.scaleFactor",Znt="org.eclipse.elk.childAreaWidth",ntt="org.eclipse.elk.childAreaHeight",ttt="org.eclipse.elk.animate",ett="org.eclipse.elk.animTimeFactor",itt="org.eclipse.elk.layoutAncestors",rtt="org.eclipse.elk.maxAnimTime",ctt="org.eclipse.elk.minAnimTime",att="org.eclipse.elk.progressBar",ott="org.eclipse.elk.validateGraph",utt="org.eclipse.elk.validateOptions",stt="org.eclipse.elk.zoomToFit",htt="org.eclipse.elk.font.name",ftt="org.eclipse.elk.font.size",ltt="org.eclipse.elk.topdown.sizeApproximator",btt="org.eclipse.elk.topdown.scaleCap",wtt="org.eclipse.elk.edge.type",dtt="partitioning",gtt="nodeLabels",ptt="portAlignment",mtt="nodeSize",vtt="port",ktt="portLabels",ytt="topdown",Mtt="insideSelfLoops",Ttt="org.eclipse.elk.fixed",jtt="org.eclipse.elk.random",Ett={3:1,34:1,22:1,347:1},Stt="port must have a parent node to calculate the port side",Ptt="The edge needs to have exactly one edge section. Found: ",Ctt="org.eclipse.elk.core.util.adapters",Itt="org.eclipse.emf.ecore",Ott="org.eclipse.elk.graph",Att="EMapPropertyHolder",Ltt="ElkBendPoint",Ntt="ElkGraphElement",$tt="ElkConnectableShape",Dtt="ElkEdge",xtt="ElkEdgeSection",Rtt="EModelElement",Ktt="ENamedElement",Ftt="ElkLabel",_tt="ElkNode",Btt="ElkPort",Htt={94:1,93:1},Utt="org.eclipse.emf.common.notify.impl",Gtt="The feature '",qtt="' is not a valid changeable feature",Xtt="Expecting null",ztt="' is not a valid feature",Vtt="The feature ID",Wtt=" is not a valid feature ID",Qtt=32768,Jtt={110:1,94:1,93:1,58:1,54:1,99:1},Ytt="org.eclipse.emf.ecore.impl",Ztt="org.eclipse.elk.graph.impl",net="Recursive containment not allowed for ",tet="The datatype '",eet="' is not a valid classifier",iet="The value '",ret={195:1,3:1,4:1},cet="The class '",aet="http://www.eclipse.org/elk/ElkGraph",oet="property",uet="value",set="source",het="properties",fet="identifier",bet="height",wet="width",det="parent",get="text",pet="children",met="hierarchical",vet="sources",ket="targets",yet="sections",Met="bendPoints",Tet="outgoingShape",jet="incomingShape",Eet="outgoingSections",Set="incomingSections",Pet="org.eclipse.emf.common.util",Cet="Severe implementation error in the Json to ElkGraph importer.",Iet="id",Oet="org.eclipse.elk.graph.json",Aet="Unhandled parameter types: ",Let="startPoint",Net="An edge must have at least one source and one target (edge id: '",$et="').",Det="Referenced edge section does not exist: ",xet=" (edge id: '",Ret="target",Ket="sourcePoint",Fet="targetPoint",_et="group",Bet="name",Het="connectableShape cannot be null",Uet="edge cannot be null",Get="Passed edge is not 'simple'.",qet="org.eclipse.elk.graph.util",Xet="The 'no duplicates' constraint is violated",zet="targetIndex=",Vet=", size=",Wet="sourceIndex=",Qet={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1},Jet={3:1,4:1,20:1,31:1,56:1,16:1,51:1,15:1,59:1,70:1,66:1,61:1,596:1},Yet="logging",Zet="measureExecutionTime",nit="parser.parse.1",tit="parser.parse.2",eit="parser.next.1",iit="parser.next.2",rit="parser.next.3",cit="parser.next.4",ait="parser.factor.1",oit="parser.factor.2",uit="parser.factor.3",sit="parser.factor.4",hit="parser.factor.5",fit="parser.factor.6",lit="parser.atom.1",bit="parser.atom.2",wit="parser.atom.3",dit="parser.atom.4",git="parser.atom.5",pit="parser.cc.1",mit="parser.cc.2",vit="parser.cc.3",kit="parser.cc.5",yit="parser.cc.6",Mit="parser.cc.7",Tit="parser.cc.8",jit="parser.ope.1",Eit="parser.ope.2",Sit="parser.ope.3",Pit="parser.descape.1",Cit="parser.descape.2",Iit="parser.descape.3",Oit="parser.descape.4",Ait="parser.descape.5",Lit="parser.process.1",Nit="parser.quantifier.1",$it="parser.quantifier.2",Dit="parser.quantifier.3",xit="parser.quantifier.4",Rit="parser.quantifier.5",Kit="org.eclipse.emf.common.notify",Fit={424:1,686:1},_it={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1},Bit={378:1,152:1},Hit="index=",Uit={3:1,4:1,5:1,129:1},Git={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,61:1},qit={3:1,6:1,4:1,5:1,198:1},Xit={3:1,4:1,5:1,173:1,379:1},zit=";/?:@&=+$,",Vit="invalid authority: ",Wit="EAnnotation",Qit="ETypedElement",Jit="EStructuralFeature",Yit="EAttribute",Zit="EClassifier",nrt="EEnumLiteral",trt="EGenericType",ert="EOperation",irt="EParameter",rrt="EReference",crt="ETypeParameter",art="org.eclipse.emf.ecore.util",ort={79:1},urt={3:1,20:1,16:1,15:1,61:1,597:1,79:1,71:1,97:1},srt="org.eclipse.emf.ecore.util.FeatureMap$Entry",hrt=8192,frt=2048,lrt="byte",brt="char",wrt="double",drt="float",grt="int",prt="long",mrt="short",vrt="java.lang.Object",krt={3:1,4:1,5:1,254:1},yrt={3:1,4:1,5:1,688:1},Mrt={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,71:1},Trt={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,71:1,97:1},jrt="mixed",Ert="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",Srt="kind",Prt={3:1,4:1,5:1,689:1},Crt={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,79:1,71:1,97:1},Irt={20:1,31:1,56:1,16:1,15:1,61:1,71:1},Ort={51:1,128:1,287:1},Art={76:1,343:1},Lrt="The value of type '",Nrt="' must be of type '",$rt=1352,Drt="http://www.eclipse.org/emf/2002/Ecore",xrt=-32768,Rrt="constraints",Krt="baseType",Frt="getEStructuralFeature",_rt="getFeatureID",Brt="feature",Hrt="getOperationID",Urt="operation",Grt="defaultValue",qrt="eTypeParameters",Xrt="isInstance",zrt="getEEnumLiteral",Vrt="eContainingClass",Wrt={57:1},Qrt={3:1,4:1,5:1,124:1},Jrt="org.eclipse.emf.ecore.resource",Yrt={94:1,93:1,599:1,2034:1},Zrt="org.eclipse.emf.ecore.resource.impl",nct="unspecified",tct="simple",ect="attribute",ict="attributeWildcard",rct="element",cct="elementWildcard",act="collapse",oct="itemType",uct="namespace",sct="##targetNamespace",hct="whiteSpace",fct="wildcards",lct="http://www.eclipse.org/emf/2003/XMLType",bct="##any",wct="uninitialized",dct="The multiplicity constraint is violated",gct="org.eclipse.emf.ecore.xml.type",pct="ProcessingInstruction",mct="SimpleAnyType",vct="XMLTypeDocumentRoot",kct="org.eclipse.emf.ecore.xml.type.impl",yct="INF",Mct="processing",Tct="ENTITIES_._base",jct="minLength",Ect="ENTITY",Sct="NCName",Pct="IDREFS_._base",Cct="integer",Ict="token",Oct="pattern",Act="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",Lct="\\i\\c*",Nct="[\\i-[:]][\\c-[:]]*",$ct="nonPositiveInteger",Dct="maxInclusive",xct="NMTOKEN",Rct="NMTOKENS_._base",Kct="nonNegativeInteger",Fct="minInclusive",_ct="normalizedString",Bct="unsignedByte",Hct="unsignedInt",Uct="18446744073709551615",Gct="unsignedShort",qct="processingInstruction",Xct="org.eclipse.emf.ecore.xml.type.internal",zct=1114111,Vct="Internal Error: shorthands: \\u",Wct="xml:isDigit",Qct="xml:isWord",Jct="xml:isSpace",Yct="xml:isNameChar",Zct="xml:isInitialNameChar",nat="09\u0660\u0669\u06f0\u06f9\u0966\u096f\u09e6\u09ef\u0a66\u0a6f\u0ae6\u0aef\u0b66\u0b6f\u0be7\u0bef\u0c66\u0c6f\u0ce6\u0cef\u0d66\u0d6f\u0e50\u0e59\u0ed0\u0ed9\u0f20\u0f29",tat="AZaz\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u0386\u0386\u0388\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c\u045e\u0481\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0641\u064a\u0671\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06d5\u06e5\u06e6\u0905\u0939\u093d\u093d\u0958\u0961\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09dc\u09dd\u09df\u09e1\u09f0\u09f1\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59\u0a5c\u0a5e\u0a5e\u0a72\u0a74\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abd\u0abd\u0ae0\u0ae0\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3d\u0b3d\u0b5c\u0b5d\u0b5f\u0b61\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c60\u0c61\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cde\u0cde\u0ce0\u0ce1\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d60\u0d61\u0e01\u0e2e\u0e30\u0e30\u0e32\u0e33\u0e40\u0e45\u0e81\u0e82\u0e84\u0e84\u0e87\u0e88\u0e8a\u0e8a\u0e8d\u0e8d\u0e94\u0e97\u0e99\u0e9f\u0ea1\u0ea3\u0ea5\u0ea5\u0ea7\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eb0\u0eb0\u0eb2\u0eb3\u0ebd\u0ebd\u0ec0\u0ec4\u0f40\u0f47\u0f49\u0f69\u10a0\u10c5\u10d0\u10f6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110b\u110c\u110e\u1112\u113c\u113c\u113e\u113e\u1140\u1140\u114c\u114c\u114e\u114e\u1150\u1150\u1154\u1155\u1159\u1159\u115f\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116d\u116e\u1172\u1173\u1175\u1175\u119e\u119e\u11a8\u11a8\u11ab\u11ab\u11ae\u11af\u11b7\u11b8\u11ba\u11ba\u11bc\u11c2\u11eb\u11eb\u11f0\u11f0\u11f9\u11f9\u1e00\u1e9b\u1ea0\u1ef9\u1f00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30a1\u30fa\u3105\u312c\u4e00\u9fa5\uac00\ud7a3",eat="Private Use",iat="ASSIGNED",rat="\0\x7f\x80\xff\u0100\u017f\u0180\u024f\u0250\u02af\u02b0\u02ff\u0300\u036f\u0370\u03ff\u0400\u04ff\u0530\u058f\u0590\u05ff\u0600\u06ff\u0700\u074f\u0780\u07bf\u0900\u097f\u0980\u09ff\u0a00\u0a7f\u0a80\u0aff\u0b00\u0b7f\u0b80\u0bff\u0c00\u0c7f\u0c80\u0cff\u0d00\u0d7f\u0d80\u0dff\u0e00\u0e7f\u0e80\u0eff\u0f00\u0fff\u1000\u109f\u10a0\u10ff\u1100\u11ff\u1200\u137f\u13a0\u13ff\u1400\u167f\u1680\u169f\u16a0\u16ff\u1780\u17ff\u1800\u18af\u1e00\u1eff\u1f00\u1fff\u2000\u206f\u2070\u209f\u20a0\u20cf\u20d0\u20ff\u2100\u214f\u2150\u218f\u2190\u21ff\u2200\u22ff\u2300\u23ff\u2400\u243f\u2440\u245f\u2460\u24ff\u2500\u257f\u2580\u259f\u25a0\u25ff\u2600\u26ff\u2700\u27bf\u2800\u28ff\u2e80\u2eff\u2f00\u2fdf\u2ff0\u2fff\u3000\u303f\u3040\u309f\u30a0\u30ff\u3100\u312f\u3130\u318f\u3190\u319f\u31a0\u31bf\u3200\u32ff\u3300\u33ff\u3400\u4db5\u4e00\u9fff\ua000\ua48f\ua490\ua4cf\uac00\ud7a3\ue000\uf8ff\uf900\ufaff\ufb00\ufb4f\ufb50\ufdff\ufe20\ufe2f\ufe30\ufe4f\ufe50\ufe6f\ufe70\ufefe\ufeff\ufeff\uff00\uffef",cat="UNASSIGNED",aat={3:1,122:1},oat="org.eclipse.emf.ecore.xml.type.util",uat={3:1,4:1,5:1,381:1},sat="org.eclipse.xtext.xbase.lib",hat="Cannot add elements to a Range",fat="Cannot set elements in a Range",lat="Cannot remove elements from a Range",bat="user.agent";e.goog=e.goog||{},e.goog.global=e.goog.global||e,sZn={},sDn(1,null,{},r),uZn.Fb=function(n){return SL(this,n)},uZn.Gb=function(){return this.Rm},uZn.Hb=function(){return xx(this)},uZn.Ib=function(){return Ij(Tbn(this))+"@"+(Hon(this)>>>0).toString(16)},uZn.equals=function(n){return this.Fb(n)},uZn.hashCode=function(){return this.Hb()},uZn.toString=function(){return this.Ib()},sDn(296,1,{296:1,2124:1},Ifn),uZn.ve=function(n){var t;return(t=new Ifn).i=4,t.c=n>1?B0(this,n-1):this,t},uZn.we=function(){return vK(this),this.b},uZn.xe=function(){return Ij(this)},uZn.ye=function(){return vK(this),this.k},uZn.ze=function(){return 0!=(4&this.i)},uZn.Ae=function(){return 0!=(1&this.i)},uZn.Ib=function(){return crn(this)},uZn.i=0;var wat,dat=zW(kZn,"Object",1),gat=zW(kZn,"Class",296);sDn(2096,1,yZn),zW(MZn,"Optional",2096),sDn(1191,2096,yZn,c),uZn.Fb=function(n){return n===this},uZn.Hb=function(){return 2040732332},uZn.Ib=function(){return"Optional.absent()"},uZn.Jb=function(n){return WW(n),gy(),wat},zW(MZn,"Absent",1191),sDn(636,1,{},FM),zW(MZn,"Joiner",636);var pat=Iq(MZn,"Predicate");sDn(589,1,{178:1,589:1,3:1,46:1},Hl),uZn.Mb=function(n){return Wfn(this,n)},uZn.Lb=function(n){return Wfn(this,n)},uZn.Fb=function(n){var t;return!!F$(n,589)&&(t=uG(n,589),PDn(this.a,t.a))},uZn.Hb=function(){return Zfn(this.a)+306654252},uZn.Ib=function(){return eAn(this.a)},zW(MZn,"Predicates/AndPredicate",589),sDn(419,2096,{419:1,3:1},Ul),uZn.Fb=function(n){var t;return!!F$(n,419)&&(t=uG(n,419),udn(this.a,t.a))},uZn.Hb=function(){return 1502476572+Hon(this.a)},uZn.Ib=function(){return CZn+this.a+")"},uZn.Jb=function(n){return new Ul(bZ(n.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},zW(MZn,"Present",419),sDn(204,1,OZn),uZn.Nb=function(n){SV(this,n)},uZn.Qb=function(){_M()},zW(AZn,"UnmodifiableIterator",204),sDn(2076,204,LZn),uZn.Qb=function(){_M()},uZn.Rb=function(n){throw hv(new Kv)},uZn.Wb=function(n){throw hv(new Kv)},zW(AZn,"UnmodifiableListIterator",2076),sDn(399,2076,LZn),uZn.Ob=function(){return this.c<this.d},uZn.Sb=function(){return this.c>0},uZn.Pb=function(){if(this.c>=this.d)throw hv(new Bv);return this.Xb(this.c++)},uZn.Tb=function(){return this.c},uZn.Ub=function(){if(this.c<=0)throw hv(new Bv);return this.Xb(--this.c)},uZn.Vb=function(){return this.c-1},uZn.c=0,uZn.d=0,zW(AZn,"AbstractIndexedListIterator",399),sDn(713,204,OZn),uZn.Ob=function(){return oon(this)},uZn.Pb=function(){return yen(this)},uZn.e=1,zW(AZn,"AbstractIterator",713),sDn(2084,1,{229:1}),uZn.Zb=function(){return this.f||(this.f=this.ac())},uZn.Fb=function(n){return Aln(this,n)},uZn.Hb=function(){return Hon(this.Zb())},uZn.dc=function(){return 0==this.gc()},uZn.ec=function(){return kz(this)},uZn.Ib=function(){return cpn(this.Zb())},zW(AZn,"AbstractMultimap",2084),sDn(742,2084,NZn),uZn.$b=function(){ban(this)},uZn._b=function(n){return jj(this,n)},uZn.ac=function(){return new OE(this,this.c)},uZn.ic=function(n){return this.hc()},uZn.bc=function(){return new RD(this,this.c)},uZn.jc=function(){return this.mc(this.hc())},uZn.kc=function(){return new My(this)},uZn.lc=function(){return ICn(this.c.vc().Nc(),new o,64,this.d)},uZn.cc=function(n){return Y9(this,n)},uZn.fc=function(n){return twn(this,n)},uZn.gc=function(){return this.d},uZn.mc=function(n){return hZ(),new qw(n)},uZn.nc=function(){return new yy(this)},uZn.oc=function(){return ICn(this.c.Cc().Nc(),new a,64,this.d)},uZn.pc=function(n,t){return new A7(this,n,t,null)},uZn.d=0,zW(AZn,"AbstractMapBasedMultimap",742),sDn(1696,742,NZn),uZn.hc=function(){return new R7(this.a)},uZn.jc=function(){return hZ(),hZ(),zot},uZn.cc=function(n){return uG(Y9(this,n),15)},uZn.fc=function(n){return uG(twn(this,n),15)},uZn.Zb=function(){return nZ(this)},uZn.Fb=function(n){return Aln(this,n)},uZn.qc=function(n){return uG(Y9(this,n),15)},uZn.rc=function(n){return uG(twn(this,n),15)},uZn.mc=function(n){return SZ(uG(n,15))},uZn.pc=function(n,t){return S6(this,n,uG(t,15),null)},zW(AZn,"AbstractListMultimap",1696),sDn(748,1,$Zn),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.c.Ob()||this.e.Ob()},uZn.Pb=function(){var n;return this.e.Ob()||(n=uG(this.c.Pb(),44),this.b=n.ld(),this.a=uG(n.md(),16),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},uZn.Qb=function(){this.e.Qb(),uG(nJ(this.a),16).dc()&&this.c.Qb(),--this.d.d},zW(AZn,"AbstractMapBasedMultimap/Itr",748),sDn(1129,748,$Zn,yy),uZn.sc=function(n,t){return t},zW(AZn,"AbstractMapBasedMultimap/1",1129),sDn(1130,1,{},a),uZn.Kb=function(n){return uG(n,16).Nc()},zW(AZn,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1130),sDn(1131,748,$Zn,My),uZn.sc=function(n,t){return new FE(n,t)},zW(AZn,"AbstractMapBasedMultimap/2",1131);var mat=Iq(DZn,"Map");sDn(2065,1,xZn),uZn.wc=function(n){Yun(this,n)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.$b=function(){this.vc().$b()},uZn.tc=function(n){return sTn(this,n)},uZn._b=function(n){return!!TPn(this,n,!1)},uZn.uc=function(n){var t,e;for(t=this.vc().Kc();t.Ob();)if(e=uG(t.Pb(),44).md(),xA(n)===xA(e)||null!=n&&udn(n,e))return!0;return!1},uZn.Fb=function(n){var t,e,i;if(n===this)return!0;if(!F$(n,85))return!1;if(i=uG(n,85),this.gc()!=i.gc())return!1;for(e=i.vc().Kc();e.Ob();)if(t=uG(e.Pb(),44),!this.tc(t))return!1;return!0},uZn.xc=function(n){return DA(TPn(this,n,!1))},uZn.Hb=function(){return tfn(this.vc())},uZn.dc=function(){return 0==this.gc()},uZn.ec=function(){return new Lw(this)},uZn.zc=function(n,t){throw hv(new TM("Put not supported on this map"))},uZn.Ac=function(n){xun(this,n)},uZn.Bc=function(n){return DA(TPn(this,n,!0))},uZn.gc=function(){return this.vc().gc()},uZn.Ib=function(){return KPn(this)},uZn.Cc=function(){return new Fw(this)},zW(DZn,"AbstractMap",2065),sDn(2085,2065,xZn),uZn.bc=function(){return new VE(this)},uZn.vc=function(){return vz(this)},uZn.ec=function(){return this.g||(this.g=this.bc())},uZn.Cc=function(){return this.i||(this.i=new zE(this))},zW(AZn,"Maps/ViewCachingAbstractMap",2085),sDn(402,2085,xZn,OE),uZn.xc=function(n){return srn(this,n)},uZn.Bc=function(n){return abn(this,n)},uZn.$b=function(){this.d==this.e.c?this.e.$b():Hq(new Gq(this))},uZn._b=function(n){return Uwn(this.d,n)},uZn.Ec=function(){return new Gl(this)},uZn.Dc=function(){return this.Ec()},uZn.Fb=function(n){return this===n||udn(this.d,n)},uZn.Hb=function(){return Hon(this.d)},uZn.ec=function(){return this.e.ec()},uZn.gc=function(){return this.d.gc()},uZn.Ib=function(){return cpn(this.d)},zW(AZn,"AbstractMapBasedMultimap/AsMap",402);var vat=Iq(kZn,"Iterable");sDn(31,1,RZn),uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return this.Oc()},uZn.Nc=function(){return new h3(this,0)},uZn.Oc=function(){return new fX(null,this.Nc())},uZn.Fc=function(n){throw hv(new TM("Add not supported on this collection"))},uZn.Gc=function(n){return Qon(this,n)},uZn.$b=function(){oY(this)},uZn.Hc=function(n){return Wpn(this,n,!1)},uZn.Ic=function(n){return yhn(this,n)},uZn.dc=function(){return 0==this.gc()},uZn.Mc=function(n){return Wpn(this,n,!0)},uZn.Pc=function(){return Sz(this)},uZn.Qc=function(n){return oTn(this,n)},uZn.Ib=function(){return vIn(this)},zW(DZn,"AbstractCollection",31);var kat=Iq(DZn,"Set");sDn(KZn,31,FZn),uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return Fvn(this,n)},uZn.Hb=function(){return tfn(this)},zW(DZn,"AbstractSet",KZn),sDn(2068,KZn,FZn),zW(AZn,"Sets/ImprovedAbstractSet",2068),sDn(2069,2068,FZn),uZn.$b=function(){this.Rc().$b()},uZn.Hc=function(n){return Amn(this,n)},uZn.dc=function(){return this.Rc().dc()},uZn.Mc=function(n){var t;return!(!this.Hc(n)||!F$(n,44))&&(t=uG(n,44),this.Rc().ec().Mc(t.ld()))},uZn.gc=function(){return this.Rc().gc()},zW(AZn,"Maps/EntrySet",2069),sDn(1127,2069,FZn,Gl),uZn.Hc=function(n){return Gwn(this.a.d.vc(),n)},uZn.Kc=function(){return new Gq(this.a)},uZn.Rc=function(){return this.a},uZn.Mc=function(n){var t;return!!Gwn(this.a.d.vc(),n)&&(t=uG(nJ(uG(n,44)),44),H9(this.a.e,t.ld()),!0)},uZn.Nc=function(){return JU(this.a.d.vc().Nc(),new ql(this.a))},zW(AZn,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1127),sDn(1128,1,{},ql),uZn.Kb=function(n){return O9(this.a,uG(n,44))},zW(AZn,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1128),sDn(746,1,$Zn,Gq),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){var n;return n=uG(this.b.Pb(),44),this.a=uG(n.md(),16),O9(this.c,n)},uZn.Ob=function(){return this.b.Ob()},uZn.Qb=function(){IB(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},zW(AZn,"AbstractMapBasedMultimap/AsMap/AsMapIterator",746),sDn(542,2068,FZn,VE),uZn.$b=function(){this.b.$b()},uZn.Hc=function(n){return this.b._b(n)},uZn.Jc=function(n){WW(n),this.b.wc(new db(n))},uZn.dc=function(){return this.b.dc()},uZn.Kc=function(){return new Ny(this.b.vc().Kc())},uZn.Mc=function(n){return!!this.b._b(n)&&(this.b.Bc(n),!0)},uZn.gc=function(){return this.b.gc()},zW(AZn,"Maps/KeySet",542),sDn(327,542,FZn,RD),uZn.$b=function(){Hq(new AE(this,this.b.vc().Kc()))},uZn.Ic=function(n){return this.b.ec().Ic(n)},uZn.Fb=function(n){return this===n||udn(this.b.ec(),n)},uZn.Hb=function(){return Hon(this.b.ec())},uZn.Kc=function(){return new AE(this,this.b.vc().Kc())},uZn.Mc=function(n){var t,e;return e=0,(t=uG(this.b.Bc(n),16))&&(e=t.gc(),t.$b(),this.a.d-=e),e>0},uZn.Nc=function(){return this.b.ec().Nc()},zW(AZn,"AbstractMapBasedMultimap/KeySet",327),sDn(747,1,$Zn,AE),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.c.Ob()},uZn.Pb=function(){return this.a=uG(this.c.Pb(),44),this.a.ld()},uZn.Qb=function(){var n;IB(!!this.a),n=uG(this.a.md(),16),this.c.Qb(),this.b.a.d-=n.gc(),n.$b(),this.a=null},zW(AZn,"AbstractMapBasedMultimap/KeySet/1",747),sDn(502,402,{85:1,133:1},NK),uZn.bc=function(){return this.Sc()},uZn.ec=function(){return this.Uc()},uZn.Sc=function(){return new yE(this.c,this.Wc())},uZn.Tc=function(){return this.Wc().Tc()},uZn.Uc=function(){return this.b||(this.b=this.Sc())},uZn.Vc=function(){return this.Wc().Vc()},uZn.Wc=function(){return uG(this.d,133)},zW(AZn,"AbstractMapBasedMultimap/SortedAsMap",502),sDn(446,502,_Zn,$K),uZn.bc=function(){return new ME(this.a,uG(uG(this.d,133),139))},uZn.Sc=function(){return new ME(this.a,uG(uG(this.d,133),139))},uZn.ec=function(){return uG(this.b||(this.b=new ME(this.a,uG(uG(this.d,133),139))),277)},uZn.Uc=function(){return uG(this.b||(this.b=new ME(this.a,uG(uG(this.d,133),139))),277)},uZn.Wc=function(){return uG(uG(this.d,133),139)},uZn.Xc=function(n){return uG(uG(this.d,133),139).Xc(n)},uZn.Yc=function(n){return uG(uG(this.d,133),139).Yc(n)},uZn.Zc=function(n,t){return new $K(this.a,uG(uG(this.d,133),139).Zc(n,t))},uZn.$c=function(n){return uG(uG(this.d,133),139).$c(n)},uZn._c=function(n){return uG(uG(this.d,133),139)._c(n)},uZn.ad=function(n,t){return new $K(this.a,uG(uG(this.d,133),139).ad(n,t))},zW(AZn,"AbstractMapBasedMultimap/NavigableAsMap",446),sDn(501,327,BZn,yE),uZn.Nc=function(){return this.b.ec().Nc()},zW(AZn,"AbstractMapBasedMultimap/SortedKeySet",501),sDn(401,501,HZn,ME),zW(AZn,"AbstractMapBasedMultimap/NavigableKeySet",401),sDn(551,31,RZn,A7),uZn.Fc=function(n){var t,e;return bpn(this),e=this.d.dc(),(t=this.d.Fc(n))&&(++this.f.d,e&&mF(this)),t},uZn.Gc=function(n){var t,e,i;return!n.dc()&&(bpn(this),i=this.d.gc(),(t=this.d.Gc(n))&&(e=this.d.gc(),this.f.d+=e-i,0==i&&mF(this)),t)},uZn.$b=function(){var n;bpn(this),0!=(n=this.d.gc())&&(this.d.$b(),this.f.d-=n,DX(this))},uZn.Hc=function(n){return bpn(this),this.d.Hc(n)},uZn.Ic=function(n){return bpn(this),this.d.Ic(n)},uZn.Fb=function(n){return n===this||(bpn(this),udn(this.d,n))},uZn.Hb=function(){return bpn(this),Hon(this.d)},uZn.Kc=function(){return bpn(this),new WU(this)},uZn.Mc=function(n){var t;return bpn(this),(t=this.d.Mc(n))&&(--this.f.d,DX(this)),t},uZn.gc=function(){return qA(this)},uZn.Nc=function(){return bpn(this),this.d.Nc()},uZn.Ib=function(){return bpn(this),cpn(this.d)},zW(AZn,"AbstractMapBasedMultimap/WrappedCollection",551);var yat=Iq(DZn,"List");sDn(744,551,{20:1,31:1,16:1,15:1},qz),uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return bpn(this),this.d.Nc()},uZn.bd=function(n,t){var e;bpn(this),e=this.d.dc(),uG(this.d,15).bd(n,t),++this.a.d,e&&mF(this)},uZn.cd=function(n,t){var e,i,r;return!t.dc()&&(bpn(this),r=this.d.gc(),(e=uG(this.d,15).cd(n,t))&&(i=this.d.gc(),this.a.d+=i-r,0==r&&mF(this)),e)},uZn.Xb=function(n){return bpn(this),uG(this.d,15).Xb(n)},uZn.dd=function(n){return bpn(this),uG(this.d,15).dd(n)},uZn.ed=function(){return bpn(this),new JN(this)},uZn.fd=function(n){return bpn(this),new UY(this,n)},uZn.gd=function(n){var t;return bpn(this),t=uG(this.d,15).gd(n),--this.a.d,DX(this),t},uZn.hd=function(n,t){return bpn(this),uG(this.d,15).hd(n,t)},uZn.kd=function(n,t){return bpn(this),S6(this.a,this.e,uG(this.d,15).kd(n,t),this.b?this.b:this)},zW(AZn,"AbstractMapBasedMultimap/WrappedList",744),sDn(1126,744,{20:1,31:1,16:1,15:1,59:1},Yx),zW(AZn,"AbstractMapBasedMultimap/RandomAccessWrappedList",1126),sDn(628,1,$Zn,WU),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return FY(this),this.b.Ob()},uZn.Pb=function(){return FY(this),this.b.Pb()},uZn.Qb=function(){zD(this)},zW(AZn,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",628),sDn(745,628,UZn,JN,UY),uZn.Qb=function(){zD(this)},uZn.Rb=function(n){var t;t=0==qA(this.a),(FY(this),uG(this.b,128)).Rb(n),++this.a.a.d,t&&mF(this.a)},uZn.Sb=function(){return(FY(this),uG(this.b,128)).Sb()},uZn.Tb=function(){return(FY(this),uG(this.b,128)).Tb()},uZn.Ub=function(){return(FY(this),uG(this.b,128)).Ub()},uZn.Vb=function(){return(FY(this),uG(this.b,128)).Vb()},uZn.Wb=function(n){(FY(this),uG(this.b,128)).Wb(n)},zW(AZn,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",745),sDn(743,551,BZn,AK),uZn.Nc=function(){return bpn(this),this.d.Nc()},zW(AZn,"AbstractMapBasedMultimap/WrappedSortedSet",743),sDn(1125,743,HZn,TN),zW(AZn,"AbstractMapBasedMultimap/WrappedNavigableSet",1125),sDn(1124,551,FZn,LK),uZn.Nc=function(){return bpn(this),this.d.Nc()},zW(AZn,"AbstractMapBasedMultimap/WrappedSet",1124),sDn(1133,1,{},o),uZn.Kb=function(n){return P7(uG(n,44))},zW(AZn,"AbstractMapBasedMultimap/lambda$1$Type",1133),sDn(1132,1,{},Wl),uZn.Kb=function(n){return new FE(this.a,n)},zW(AZn,"AbstractMapBasedMultimap/lambda$2$Type",1132);var Mat,Tat,jat,Eat,Sat=Iq(DZn,"Map/Entry");sDn(358,1,GZn),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),xQ(this.ld(),t.ld())&&xQ(this.md(),t.md()))},uZn.Hb=function(){var n,t;return n=this.ld(),t=this.md(),(null==n?0:Hon(n))^(null==t?0:Hon(t))},uZn.nd=function(n){throw hv(new Kv)},uZn.Ib=function(){return this.ld()+"="+this.md()},zW(AZn,qZn,358),sDn(2086,31,RZn),uZn.$b=function(){this.od().$b()},uZn.Hc=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),E4(this.od(),t.ld(),t.md()))},uZn.Mc=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),S4(this.od(),t.ld(),t.md()))},uZn.gc=function(){return this.od().d},zW(AZn,"Multimaps/Entries",2086),sDn(749,2086,RZn,Ql),uZn.Kc=function(){return this.a.kc()},uZn.od=function(){return this.a},uZn.Nc=function(){return this.a.lc()},zW(AZn,"AbstractMultimap/Entries",749),sDn(750,749,FZn,Ty),uZn.Nc=function(){return this.a.lc()},uZn.Fb=function(n){return OOn(this,n)},uZn.Hb=function(){return Jon(this)},zW(AZn,"AbstractMultimap/EntrySet",750),sDn(751,31,RZn,Jl),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return qln(this.a,n)},uZn.Kc=function(){return this.a.nc()},uZn.gc=function(){return this.a.d},uZn.Nc=function(){return this.a.oc()},zW(AZn,"AbstractMultimap/Values",751),sDn(2087,31,{849:1,20:1,31:1,16:1}),uZn.Jc=function(n){WW(n),uY(this).Jc(new yb(n))},uZn.Nc=function(){var n;return ICn(n=uY(this).Nc(),new d,64|1296&n.yd(),this.a.d)},uZn.Fc=function(n){return HM(),!0},uZn.Gc=function(n){return WW(this),WW(n),F$(n,552)?V4(uG(n,849)):!n.dc()&&cin(this,n.Kc())},uZn.Hc=function(n){var t;return((t=uG(Xwn(nZ(this.a),n),16))?t.gc():0)>0},uZn.Fb=function(n){return nxn(this,n)},uZn.Hb=function(){return Hon(uY(this))},uZn.dc=function(){return uY(this).dc()},uZn.Mc=function(n){return bNn(this,n,1)>0},uZn.Ib=function(){return cpn(uY(this))},zW(AZn,"AbstractMultiset",2087),sDn(2089,2068,FZn),uZn.$b=function(){ban(this.a.a)},uZn.Hc=function(n){var t;return!(!F$(n,503)||(t=uG(n,425),uG(t.a.md(),16).gc()<=0||S2(this.a,t.a.ld())!=uG(t.a.md(),16).gc()))},uZn.Mc=function(n){var t,e,i;return!(!F$(n,503)||(t=(e=uG(n,425)).a.ld(),0==(i=uG(e.a.md(),16).gc())))&&wNn(this.a,t,i)},zW(AZn,"Multisets/EntrySet",2089),sDn(1139,2089,FZn,Yl),uZn.Kc=function(){return new Dy(vz(nZ(this.a.a)).Kc())},uZn.gc=function(){return nZ(this.a.a).gc()},zW(AZn,"AbstractMultiset/EntrySet",1139),sDn(627,742,NZn),uZn.hc=function(){return this.pd()},uZn.jc=function(){return this.qd()},uZn.cc=function(n){return this.rd(n)},uZn.fc=function(n){return this.sd(n)},uZn.Zb=function(){return this.f||(this.f=this.ac())},uZn.qd=function(){return hZ(),hZ(),Wot},uZn.Fb=function(n){return Aln(this,n)},uZn.rd=function(n){return uG(Y9(this,n),21)},uZn.sd=function(n){return uG(twn(this,n),21)},uZn.mc=function(n){return hZ(),new nT(uG(n,21))},uZn.pc=function(n,t){return new LK(this,n,uG(t,21))},zW(AZn,"AbstractSetMultimap",627),sDn(1723,627,NZn),uZn.hc=function(){return new Hj(this.b)},uZn.pd=function(){return new Hj(this.b)},uZn.jc=function(){return UQ(new Hj(this.b))},uZn.qd=function(){return UQ(new Hj(this.b))},uZn.cc=function(n){return uG(uG(Y9(this,n),21),87)},uZn.rd=function(n){return uG(uG(Y9(this,n),21),87)},uZn.fc=function(n){return uG(uG(twn(this,n),21),87)},uZn.sd=function(n){return uG(uG(twn(this,n),21),87)},uZn.mc=function(n){return F$(n,277)?UQ(uG(n,277)):(hZ(),new mx(uG(n,87)))},uZn.Zb=function(){return this.f||(this.f=F$(this.c,139)?new $K(this,uG(this.c,139)):F$(this.c,133)?new NK(this,uG(this.c,133)):new OE(this,this.c))},uZn.pc=function(n,t){return F$(t,277)?new TN(this,n,uG(t,277)):new AK(this,n,uG(t,87))},zW(AZn,"AbstractSortedSetMultimap",1723),sDn(1724,1723,NZn),uZn.Zb=function(){return uG(uG(this.f||(this.f=F$(this.c,139)?new $K(this,uG(this.c,139)):F$(this.c,133)?new NK(this,uG(this.c,133)):new OE(this,this.c)),133),139)},uZn.ec=function(){return uG(uG(this.i||(this.i=F$(this.c,139)?new ME(this,uG(this.c,139)):F$(this.c,133)?new yE(this,uG(this.c,133)):new RD(this,this.c)),87),277)},uZn.bc=function(){return F$(this.c,139)?new ME(this,uG(this.c,139)):F$(this.c,133)?new yE(this,uG(this.c,133)):new RD(this,this.c)},zW(AZn,"AbstractSortedKeySortedSetMultimap",1724),sDn(2109,1,{2046:1}),uZn.Fb=function(n){return fSn(this,n)},uZn.Hb=function(){return tfn(this.g||(this.g=new nb(this)))},uZn.Ib=function(){return KPn(this.f||(this.f=new VD(this)))},zW(AZn,"AbstractTable",2109),sDn(679,KZn,FZn,nb),uZn.$b=function(){UM()},uZn.Hc=function(n){var t,e;return!!F$(n,478)&&(t=uG(n,697),!!(e=uG(Xwn(BW(this.a),GA(t.c.e,t.b)),85))&&Gwn(e.vc(),new FE(GA(t.c.c,t.a),I7(t.c,t.b,t.a))))},uZn.Kc=function(){return CZ(this.a)},uZn.Mc=function(n){var t,e;return!!F$(n,478)&&(t=uG(n,697),!!(e=uG(Xwn(BW(this.a),GA(t.c.e,t.b)),85))&&qwn(e.vc(),new FE(GA(t.c.c,t.a),I7(t.c,t.b,t.a))))},uZn.gc=function(){return $q(this.a)},uZn.Nc=function(){return u6(this.a)},zW(AZn,"AbstractTable/CellSet",679),sDn(2025,31,RZn,tb),uZn.$b=function(){UM()},uZn.Hc=function(n){return QPn(this.a,n)},uZn.Kc=function(){return IZ(this.a)},uZn.gc=function(){return $q(this.a)},uZn.Nc=function(){return y4(this.a)},zW(AZn,"AbstractTable/Values",2025),sDn(1697,1696,NZn),zW(AZn,"ArrayListMultimapGwtSerializationDependencies",1697),sDn(520,1697,NZn,rT,L2),uZn.hc=function(){return new R7(this.a)},uZn.a=0,zW(AZn,"ArrayListMultimap",520),sDn(678,2109,{678:1,2046:1,3:1},f$n),zW(AZn,"ArrayTable",678),sDn(2021,399,LZn,WD),uZn.Xb=function(n){return new Ofn(this.a,n)},zW(AZn,"ArrayTable/1",2021),sDn(2022,1,{},Xl),uZn.td=function(n){return new Ofn(this.a,n)},zW(AZn,"ArrayTable/1methodref$getCell$Type",2022),sDn(2110,1,{697:1}),uZn.Fb=function(n){var t;return n===this||!!F$(n,478)&&(t=uG(n,697),xQ(GA(this.c.e,this.b),GA(t.c.e,t.b))&&xQ(GA(this.c.c,this.a),GA(t.c.c,t.a))&&xQ(I7(this.c,this.b,this.a),I7(t.c,t.b,t.a)))},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[GA(this.c.e,this.b),GA(this.c.c,this.a),I7(this.c,this.b,this.a)]))},uZn.Ib=function(){return"("+GA(this.c.e,this.b)+","+GA(this.c.c,this.a)+")="+I7(this.c,this.b,this.a)},zW(AZn,"Tables/AbstractCell",2110),sDn(478,2110,{478:1,697:1},Ofn),uZn.a=0,uZn.b=0,uZn.d=0,zW(AZn,"ArrayTable/2",478),sDn(2024,1,{},zl),uZn.td=function(n){return Qtn(this.a,n)},zW(AZn,"ArrayTable/2methodref$getValue$Type",2024),sDn(2023,399,LZn,QD),uZn.Xb=function(n){return Qtn(this.a,n)},zW(AZn,"ArrayTable/3",2023),sDn(2077,2065,xZn),uZn.$b=function(){Hq(this.kc())},uZn.vc=function(){return new wb(this)},uZn.lc=function(){return new MY(this.kc(),this.gc())},zW(AZn,"Maps/IteratorBasedAbstractMap",2077),sDn(842,2077,xZn),uZn.$b=function(){throw hv(new Kv)},uZn._b=function(n){return Ej(this.c,n)},uZn.kc=function(){return new JD(this,this.c.b.c.gc())},uZn.lc=function(){return Dq(this.c.b.c.gc(),16,new Vl(this))},uZn.xc=function(n){var t;return(t=uG(W_(this.c,n),17))?this.vd(t.a):null},uZn.dc=function(){return this.c.b.c.dc()},uZn.ec=function(){return Tz(this.c)},uZn.zc=function(n,t){var e;if(!(e=uG(W_(this.c,n),17)))throw hv(new vM(this.ud()+" "+n+" not in "+Tz(this.c)));return this.wd(e.a,t)},uZn.Bc=function(n){throw hv(new Kv)},uZn.gc=function(){return this.c.b.c.gc()},zW(AZn,"ArrayTable/ArrayMap",842),sDn(2020,1,{},Vl),uZn.td=function(n){return qW(this.a,n)},zW(AZn,"ArrayTable/ArrayMap/0methodref$getEntry$Type",2020),sDn(2018,358,GZn,TE),uZn.ld=function(){return uR(this.a,this.b)},uZn.md=function(){return this.a.vd(this.b)},uZn.nd=function(n){return this.a.wd(this.b,n)},uZn.b=0,zW(AZn,"ArrayTable/ArrayMap/1",2018),sDn(2019,399,LZn,JD),uZn.Xb=function(n){return qW(this.a,n)},zW(AZn,"ArrayTable/ArrayMap/2",2019),sDn(2017,842,xZn,yV),uZn.ud=function(){return"Column"},uZn.vd=function(n){return I7(this.b,this.a,n)},uZn.wd=function(n,t){return Hhn(this.b,this.a,n,t)},uZn.a=0,zW(AZn,"ArrayTable/Row",2017),sDn(843,842,xZn,VD),uZn.vd=function(n){return new yV(this.a,n)},uZn.zc=function(n,t){return uG(t,85),GM()},uZn.wd=function(n,t){return uG(t,85),qM()},uZn.ud=function(){return"Row"},zW(AZn,"ArrayTable/RowMap",843),sDn(1157,1,WZn,jE),uZn.Ad=function(n){return 0!=(-262&this.a.yd()&n)},uZn.yd=function(){return-262&this.a.yd()},uZn.zd=function(){return this.a.zd()},uZn.Nb=function(n){this.a.Nb(new SE(n,this.b))},uZn.Bd=function(n){return this.a.Bd(new EE(n,this.b))},zW(AZn,"CollectSpliterators/1",1157),sDn(1158,1,QZn,EE),uZn.Cd=function(n){this.a.Cd(this.b.Kb(n))},zW(AZn,"CollectSpliterators/1/lambda$0$Type",1158),sDn(1159,1,QZn,SE),uZn.Cd=function(n){this.a.Cd(this.b.Kb(n))},zW(AZn,"CollectSpliterators/1/lambda$1$Type",1159),sDn(1154,1,WZn,x_),uZn.Ad=function(n){return 0!=((16464|this.b)&n)},uZn.yd=function(){return 16464|this.b},uZn.zd=function(){return this.a.zd()},uZn.Nb=function(n){this.a.Qe(new CE(n,this.c))},uZn.Bd=function(n){return this.a.Re(new PE(n,this.c))},uZn.b=0,zW(AZn,"CollectSpliterators/1WithCharacteristics",1154),sDn(1155,1,JZn,PE),uZn.Dd=function(n){this.a.Cd(this.b.td(n))},zW(AZn,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1155),sDn(1156,1,JZn,CE),uZn.Dd=function(n){this.a.Cd(this.b.td(n))},zW(AZn,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1156),sDn(1150,1,WZn),uZn.Ad=function(n){return 0!=(this.a&n)},uZn.yd=function(){return this.a},uZn.zd=function(){return this.e&&(this.b=g$(this.b,this.e.zd())),g$(this.b,0)},uZn.Nb=function(n){this.e&&(this.e.Nb(n),this.e=null),this.c.Nb(new IE(this,n)),this.b=0},uZn.Bd=function(n){for(;;){if(this.e&&this.e.Bd(n))return HA(this.b,YZn)&&(this.b=$gn(this.b,1)),!0;if(this.e=null,!this.c.Bd(new eb(this)))return!1}},uZn.a=0,uZn.b=0,zW(AZn,"CollectSpliterators/FlatMapSpliterator",1150),sDn(1152,1,QZn,eb),uZn.Cd=function(n){M_(this.a,n)},zW(AZn,"CollectSpliterators/FlatMapSpliterator/lambda$0$Type",1152),sDn(1153,1,QZn,IE),uZn.Cd=function(n){fY(this.a,this.b,n)},zW(AZn,"CollectSpliterators/FlatMapSpliterator/lambda$1$Type",1153),sDn(1151,1150,WZn,T6),zW(AZn,"CollectSpliterators/FlatMapSpliteratorOfObject",1151),sDn(253,1,ZZn),uZn.Fd=function(n){return this.Ed(uG(n,253))},uZn.Ed=function(n){var t;return n==(my(),Tat)?1:n==(py(),Mat)?-1:(qG(),0!=(t=Dun(this.a,n.a))?t:F$(this,526)==F$(n,526)?0:F$(this,526)?1:-1)},uZn.Id=function(){return this.a},uZn.Fb=function(n){return pTn(this,n)},zW(AZn,"Cut",253),sDn(1823,253,ZZn,ky),uZn.Ed=function(n){return n==this?0:1},uZn.Gd=function(n){throw hv(new Av)},uZn.Hd=function(n){n.a+="+\u221e)"},uZn.Id=function(){throw hv(new kM(n1n))},uZn.Hb=function(){return bS(),Avn(this)},uZn.Jd=function(n){return!1},uZn.Ib=function(){return"+\u221e"},zW(AZn,"Cut/AboveAll",1823),sDn(526,253,{253:1,526:1,3:1,34:1},bx),uZn.Gd=function(n){QA((n.a+="(",n),this.a)},uZn.Hd=function(n){jQ(QA(n,this.a),93)},uZn.Hb=function(){return~Hon(this.a)},uZn.Jd=function(n){return qG(),Dun(this.a,n)<0},uZn.Ib=function(){return"/"+this.a+"\\"},zW(AZn,"Cut/AboveValue",526),sDn(1822,253,ZZn,vy),uZn.Ed=function(n){return n==this?0:-1},uZn.Gd=function(n){n.a+="(-\u221e"},uZn.Hd=function(n){throw hv(new Av)},uZn.Id=function(){throw hv(new kM(n1n))},uZn.Hb=function(){return bS(),Avn(this)},uZn.Jd=function(n){return!0},uZn.Ib=function(){return"-\u221e"},zW(AZn,"Cut/BelowAll",1822),sDn(1824,253,ZZn,wx),uZn.Gd=function(n){QA((n.a+="[",n),this.a)},uZn.Hd=function(n){jQ(QA(n,this.a),41)},uZn.Hb=function(){return Hon(this.a)},uZn.Jd=function(n){return qG(),Dun(this.a,n)<=0},uZn.Ib=function(){return"\\"+this.a+"/"},zW(AZn,"Cut/BelowValue",1824),sDn(547,1,t1n),uZn.Jc=function(n){z8(this,n)},uZn.Ib=function(){return rgn(uG(bZ(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},zW(AZn,"FluentIterable",547),sDn(442,547,t1n,iN),uZn.Kc=function(){return new Fz(ix(this.a.Kc(),new h))},zW(AZn,"FluentIterable/2",442),sDn(1059,547,t1n,rN),uZn.Kc=function(){return OV(this)},zW(AZn,"FluentIterable/3",1059),sDn(724,399,LZn,YD),uZn.Xb=function(n){return this.a[n].Kc()},zW(AZn,"FluentIterable/3/1",724),sDn(2070,1,{}),uZn.Ib=function(){return cpn(this.Kd().b)},zW(AZn,"ForwardingObject",2070),sDn(2071,2070,e1n),uZn.Kd=function(){return this.Ld()},uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return this.Oc()},uZn.Nc=function(){return new h3(this,0)},uZn.Oc=function(){return new fX(null,this.Nc())},uZn.Fc=function(n){return this.Ld(),Rj()},uZn.Gc=function(n){return this.Ld(),Kj()},uZn.$b=function(){this.Ld(),Fj()},uZn.Hc=function(n){return this.Ld().Hc(n)},uZn.Ic=function(n){return this.Ld().Ic(n)},uZn.dc=function(){return this.Ld().b.dc()},uZn.Kc=function(){return this.Ld().Kc()},uZn.Mc=function(n){return this.Ld(),_j()},uZn.gc=function(){return this.Ld().b.gc()},uZn.Pc=function(){return this.Ld().Pc()},uZn.Qc=function(n){return this.Ld().Qc(n)},zW(AZn,"ForwardingCollection",2071),sDn(2078,31,i1n),uZn.Kc=function(){return this.Od()},uZn.Fc=function(n){throw hv(new Kv)},uZn.Gc=function(n){throw hv(new Kv)},uZn.Md=function(){return this.c||(this.c=this.Nd())},uZn.$b=function(){throw hv(new Kv)},uZn.Hc=function(n){return null!=n&&Wpn(this,n,!1)},uZn.Nd=function(){switch(this.gc()){case 0:return ZW(),ZW(),jat;case 1:return ZW(),new Uq(WW(this.Od().Pb()));default:return new TV(this,this.Pc())}},uZn.Mc=function(n){throw hv(new Kv)},zW(AZn,"ImmutableCollection",2078),sDn(727,2078,i1n,jv),uZn.Kc=function(){return jtn(this.a.Kc())},uZn.Hc=function(n){return null!=n&&this.a.Hc(n)},uZn.Ic=function(n){return this.a.Ic(n)},uZn.dc=function(){return this.a.dc()},uZn.Od=function(){return jtn(this.a.Kc())},uZn.gc=function(){return this.a.gc()},uZn.Pc=function(){return this.a.Pc()},uZn.Qc=function(n){return this.a.Qc(n)},uZn.Ib=function(){return cpn(this.a)},zW(AZn,"ForwardingImmutableCollection",727),sDn(306,2078,r1n),uZn.Kc=function(){return this.Od()},uZn.ed=function(){return this.Pd(0)},uZn.fd=function(n){return this.Pd(n)},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.kd=function(n,t){return this.Qd(n,t)},uZn.bd=function(n,t){throw hv(new Kv)},uZn.cd=function(n,t){throw hv(new Kv)},uZn.Md=function(){return this},uZn.Fb=function(n){return RDn(this,n)},uZn.Hb=function(){return Xsn(this)},uZn.dd=function(n){return null==n?-1:uTn(this,n)},uZn.Od=function(){return this.Pd(0)},uZn.Pd=function(n){return oR(this,n)},uZn.gd=function(n){throw hv(new Kv)},uZn.hd=function(n,t){throw hv(new Kv)},uZn.Qd=function(n,t){return Dwn(new C2(new qE(this),n,t))},zW(AZn,"ImmutableList",306),sDn(2105,306,r1n),uZn.Kc=function(){return jtn(this.Rd().Kc())},uZn.kd=function(n,t){return Dwn(this.Rd().kd(n,t))},uZn.Hc=function(n){return null!=n&&this.Rd().Hc(n)},uZn.Ic=function(n){return this.Rd().Ic(n)},uZn.Fb=function(n){return udn(this.Rd(),n)},uZn.Xb=function(n){return GA(this,n)},uZn.Hb=function(){return Hon(this.Rd())},uZn.dd=function(n){return this.Rd().dd(n)},uZn.dc=function(){return this.Rd().dc()},uZn.Od=function(){return jtn(this.Rd().Kc())},uZn.gc=function(){return this.Rd().gc()},uZn.Qd=function(n,t){return Dwn(this.Rd().kd(n,t))},uZn.Pc=function(){return this.Rd().Qc(Inn(dat,EZn,1,this.Rd().gc(),5,1))},uZn.Qc=function(n){return this.Rd().Qc(n)},uZn.Ib=function(){return cpn(this.Rd())},zW(AZn,"ForwardingImmutableList",2105),sDn(729,1,a1n),uZn.vc=function(){return Mz(this)},uZn.wc=function(n){Yun(this,n)},uZn.ec=function(){return Tz(this)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.Cc=function(){return this.Vd()},uZn.$b=function(){throw hv(new Kv)},uZn._b=function(n){return null!=this.xc(n)},uZn.uc=function(n){return this.Vd().Hc(n)},uZn.Td=function(){return new Ev(this)},uZn.Ud=function(){return new Sv(this)},uZn.Fb=function(n){return Wln(this,n)},uZn.Hb=function(){return Mz(this).Hb()},uZn.dc=function(){return 0==this.gc()},uZn.zc=function(n,t){return BM()},uZn.Bc=function(n){throw hv(new Kv)},uZn.Ib=function(){return QIn(this)},uZn.Vd=function(){return this.e?this.e:this.e=this.Ud()},uZn.c=null,uZn.d=null,uZn.e=null,zW(AZn,"ImmutableMap",729),sDn(730,729,a1n),uZn._b=function(n){return Ej(this,n)},uZn.uc=function(n){return iS(this.b,n)},uZn.Sd=function(){return $wn(new Zl(this))},uZn.Td=function(){return $wn(SJ(this.b))},uZn.Ud=function(){return sB(),new jv(jJ(this.b))},uZn.Fb=function(n){return rS(this.b,n)},uZn.xc=function(n){return W_(this,n)},uZn.Hb=function(){return Hon(this.b.c)},uZn.dc=function(){return this.b.c.dc()},uZn.gc=function(){return this.b.c.gc()},uZn.Ib=function(){return cpn(this.b.c)},zW(AZn,"ForwardingImmutableMap",730),sDn(2072,2071,o1n),uZn.Kd=function(){return this.Wd()},uZn.Ld=function(){return this.Wd()},uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return n===this||this.Wd().Fb(n)},uZn.Hb=function(){return this.Wd().Hb()},zW(AZn,"ForwardingSet",2072),sDn(1085,2072,o1n,Zl),uZn.Kd=function(){return EJ(this.a.b)},uZn.Ld=function(){return EJ(this.a.b)},uZn.Hc=function(n){if(F$(n,44)&&null==uG(n,44).ld())return!1;try{return eS(EJ(this.a.b),n)}catch(t){if(F$(t=Ehn(t),212))return!1;throw hv(t)}},uZn.Wd=function(){return EJ(this.a.b)},uZn.Qc=function(n){var t;return t=YZ(EJ(this.a.b),n),EJ(this.a.b).b.gc()<t.length&&uQ(t,EJ(this.a.b).b.gc(),null),t},zW(AZn,"ForwardingImmutableMap/1",1085),sDn(2079,2078,u1n),uZn.Kc=function(){return this.Od()},uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return OOn(this,n)},uZn.Hb=function(){return Jon(this)},zW(AZn,"ImmutableSet",2079),sDn(719,2079,u1n),uZn.Kc=function(){return jtn(new Gw(this.a.b.Kc()))},uZn.Hc=function(n){return null!=n&&ZE(this.a,n)},uZn.Ic=function(n){return nS(this.a,n)},uZn.Hb=function(){return Hon(this.a.b)},uZn.dc=function(){return this.a.b.dc()},uZn.Od=function(){return jtn(new Gw(this.a.b.Kc()))},uZn.gc=function(){return this.a.b.gc()},uZn.Pc=function(){return this.a.b.Pc()},uZn.Qc=function(n){return tS(this.a,n)},uZn.Ib=function(){return cpn(this.a.b)},zW(AZn,"ForwardingImmutableSet",719),sDn(2073,2072,s1n),uZn.Kd=function(){return this.b},uZn.Ld=function(){return this.b},uZn.Wd=function(){return this.b},uZn.Nc=function(){return new GP(this)},zW(AZn,"ForwardingSortedSet",2073),sDn(543,2077,a1n,dMn),uZn.Ac=function(n){xun(this,n)},uZn.Cc=function(){return new o$(this.d||(this.d=new rb(this)))},uZn.$b=function(){n9(this)},uZn._b=function(n){return!!lun(this,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))))},uZn.uc=function(n){return lrn(this,n)},uZn.kc=function(){return new ZD(this,this)},uZn.wc=function(n){T0(this,n)},uZn.xc=function(n){return dcn(this,n)},uZn.ec=function(){return new u$(this)},uZn.zc=function(n,t){return yHn(this,n,t)},uZn.Bc=function(n){var t;return(t=lun(this,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15)))))?(yRn(this,t),t.e=null,t.c=null,t.i):null},uZn.gc=function(){return this.i},uZn.xd=function(){return new o$(this.d||(this.d=new rb(this)))},uZn.f=0,uZn.g=0,uZn.i=0,zW(AZn,"HashBiMap",543),sDn(544,1,$Zn),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return C6(this)},uZn.Pb=function(){var n;if(!C6(this))throw hv(new Bv);return n=uG(nJ(this.c),302),this.c=n.c,this.f=n,--this.d,this.Xd(n)},uZn.Qb=function(){if(this.e.g!=this.b)throw hv(new Fv);if(!this.f)throw hv(new kM(PZn));yRn(this.e,this.f),this.b=this.e.g,this.f=null},uZn.b=0,uZn.d=0,uZn.f=null,zW(AZn,"HashBiMap/Itr",544),sDn(1023,544,$Zn,ZD),uZn.Xd=function(n){return new LE(this,n)},zW(AZn,"HashBiMap/1",1023),sDn(w1n,358,GZn,LE),uZn.ld=function(){return this.a.g},uZn.md=function(){return this.a.i},uZn.nd=function(n){var t,e,i;return e=this.a.i,(i=pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))))==this.a.f&&(xA(n)===xA(e)||null!=n&&udn(n,e))?n:(Dhn(!bun(this.b.a,n,i),n),yRn(this.b.a,this.a),t=new fJ(this.a.g,this.a.a,n,i),HLn(this.b.a,t,this.a),this.a.e=null,this.a.c=null,this.b.b=this.b.a.g,this.b.f==this.a&&(this.b.f=t),this.a=t,e)},zW(AZn,"HashBiMap/1/MapEntry",w1n),sDn(246,358,{358:1,246:1,3:1,44:1},FE),uZn.ld=function(){return this.g},uZn.md=function(){return this.i},uZn.nd=function(n){throw hv(new Kv)},zW(AZn,"ImmutableEntry",246),sDn(302,246,{358:1,302:1,246:1,3:1,44:1},fJ),uZn.a=0,uZn.f=0;var Pat,Cat=zW(AZn,"HashBiMap/BiEntry",302);sDn(619,2077,a1n,rb),uZn.Ac=function(n){xun(this,n)},uZn.Cc=function(){return new u$(this.a)},uZn.$b=function(){n9(this.a)},uZn._b=function(n){return lrn(this.a,n)},uZn.kc=function(){return new nx(this,this.a)},uZn.wc=function(n){WW(n),T0(this.a,new cb(n))},uZn.xc=function(n){return kan(this,n)},uZn.ec=function(){return new o$(this)},uZn.zc=function(n,t){return FUn(this.a,n,t,!1)},uZn.Bc=function(n){var t;return(t=bun(this.a,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15)))))?(yRn(this.a,t),t.e=null,t.c=null,t.g):null},uZn.gc=function(){return this.a.i},uZn.xd=function(){return new u$(this.a)},zW(AZn,"HashBiMap/Inverse",619),sDn(1020,544,$Zn,nx),uZn.Xd=function(n){return new NE(this,n)},zW(AZn,"HashBiMap/Inverse/1",1020),sDn(1021,358,GZn,NE),uZn.ld=function(){return this.a.i},uZn.md=function(){return this.a.g},uZn.nd=function(n){var t,e,i;return i=this.a.g,(t=pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))))==this.a.a&&(xA(n)===xA(i)||null!=n&&udn(n,i))?n:(Dhn(!lun(this.b.a.a,n,t),n),yRn(this.b.a.a,this.a),e=new fJ(n,t,this.a.i,this.a.f),this.a=e,HLn(this.b.a.a,e,null),this.b.b=this.b.a.a.g,i)},zW(AZn,"HashBiMap/Inverse/1/InverseEntry",1021),sDn(620,542,FZn,o$),uZn.Kc=function(){return new Iy(this.a.a)},uZn.Mc=function(n){var t;return!!(t=bun(this.a.a,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15)))))&&(yRn(this.a.a,t),!0)},zW(AZn,"HashBiMap/Inverse/InverseKeySet",620),sDn(1019,544,$Zn,Iy),uZn.Xd=function(n){return n.i},zW(AZn,"HashBiMap/Inverse/InverseKeySet/1",1019),sDn(1022,1,{},cb),uZn.Yd=function(n,t){Mv(this.a,n,t)},zW(AZn,"HashBiMap/Inverse/lambda$0$Type",1022),sDn(618,542,FZn,u$),uZn.Kc=function(){return new Oy(this.a)},uZn.Mc=function(n){var t;return!!(t=lun(this.a,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15)))))&&(yRn(this.a,t),t.e=null,t.c=null,!0)},zW(AZn,"HashBiMap/KeySet",618),sDn(1018,544,$Zn,Oy),uZn.Xd=function(n){return n.g},zW(AZn,"HashBiMap/KeySet/1",1018),sDn(1123,627,NZn),zW(AZn,"HashMultimapGwtSerializationDependencies",1123),sDn(271,1123,NZn,K1),uZn.hc=function(){return new Dj(orn(this.a))},uZn.pd=function(){return new Dj(orn(this.a))},uZn.a=2,zW(AZn,"HashMultimap",271),sDn(2097,306,r1n),uZn.Hc=function(n){return this.Zd().Hc(n)},uZn.dc=function(){return this.Zd().dc()},uZn.gc=function(){return this.Zd().gc()},zW(AZn,"ImmutableAsList",2097),sDn(2030,730,a1n),uZn.Vd=function(){return sB(),new KM(this.a)},uZn.Cc=function(){return sB(),new KM(this.a)},uZn.xd=function(){return sB(),new KM(this.a)},zW(AZn,"ImmutableBiMap",2030),sDn(2075,1,{}),zW(AZn,"ImmutableCollection/Builder",2075),sDn(1035,719,u1n,Ay),zW(AZn,"ImmutableEnumSet",1035),sDn(980,399,LZn,$_),uZn.Xb=function(n){return this.a.Xb(n)},zW(AZn,"ImmutableList/1",980),sDn(979,2075,{},UF),zW(AZn,"ImmutableList/Builder",979),sDn(623,204,OZn,ab),uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).ld()},zW(AZn,"ImmutableMap/1",623),sDn(1054,1,{},u),uZn.Kb=function(n){return uG(n,44).ld()},zW(AZn,"ImmutableMap/2methodref$getKey$Type",1054),sDn(1053,1,{},GF),zW(AZn,"ImmutableMap/Builder",1053),sDn(2098,2079,u1n),uZn.Md=function(){return this.b||(this.b=new Pv(this))},uZn.Nd=function(){return new TV(this,oTn(this,Inn(dat,EZn,1,this.gc(),5,1)))},zW(AZn,"ImmutableSet/CachingAsList",2098),sDn(2099,2098,u1n),uZn.Kc=function(){return new ab(Mz(this.a).Od())},uZn.Nd=function(){return new Pv(this)},uZn.Jc=function(n){var t,e;for(WW(n),e=this.gc(),t=0;t<e;t++)n.Cd(uG(Mz(this.a).Md().Xb(t),44).ld())},uZn.Od=function(){return oR(this.b||(this.b=new Pv(this)),0)},uZn.Nc=function(){return Dq(this.gc(),1296,new ub(this))},zW(AZn,"IndexedImmutableSet",2099),sDn(1230,2099,u1n,Ev),uZn.Kc=function(){return new ab(Mz(this.a).Od())},uZn.Hc=function(n){return this.a._b(n)},uZn.Jc=function(n){WW(n),Yun(this.a,new ob(n))},uZn.Od=function(){return new ab(Mz(this.a).Od())},uZn.gc=function(){return this.a.gc()},uZn.Nc=function(){return JU(Mz(this.a).Nc(),new u)},zW(AZn,"ImmutableMapKeySet",1230),sDn(1231,1,{},ob),uZn.Yd=function(n,t){sB(),this.a.Cd(n)},zW(AZn,"ImmutableMapKeySet/lambda$0$Type",1231),sDn(1227,2078,i1n,Sv),uZn.Kc=function(){return new VG(this)},uZn.Md=function(){return new s$(this,Mz(this.a).Md())},uZn.Hc=function(n){return null!=n&&hSn(new VG(this),n)},uZn.Od=function(){return new VG(this)},uZn.gc=function(){return this.a.gc()},uZn.Nc=function(){return JU(Mz(this.a).Nc(),new s)},zW(AZn,"ImmutableMapValues",1227),sDn(1228,1,{},s),uZn.Kb=function(n){return uG(n,44).md()},zW(AZn,"ImmutableMapValues/0methodref$getValue$Type",1228),sDn(637,204,OZn,VG),uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).md()},zW(AZn,"ImmutableMapValues/1",637),sDn(1229,2097,r1n,s$),uZn.Zd=function(){return this.a},uZn.Xb=function(n){return uG(this.b.Xb(n),44).md()},zW(AZn,"ImmutableMapValues/2",1229),sDn(1232,1,{},ub),uZn.td=function(n){return rQ(this.a,n)},zW(AZn,"IndexedImmutableSet/0methodref$get$Type",1232),sDn(638,2097,r1n,Pv),uZn.Zd=function(){return this.a},uZn.Xb=function(n){return rQ(this.a,n)},uZn.gc=function(){return this.a.a.gc()},zW(AZn,"IndexedImmutableSet/1",638),sDn(43,1,{},h),uZn.Kb=function(n){return uG(n,20).Kc()},uZn.Fb=function(n){return this===n},zW(AZn,"Iterables/10",43),sDn(1055,547,t1n,WG),uZn.Jc=function(n){WW(n),this.b.Jc(new $E(this.a,n))},uZn.Kc=function(){return gN(this)},zW(AZn,"Iterables/4",1055),sDn(1056,1,QZn,$E),uZn.Cd=function(n){mC(this.b,this.a,n)},zW(AZn,"Iterables/4/lambda$0$Type",1056),sDn(1057,547,t1n,QG),uZn.Jc=function(n){WW(n),z8(this.a,new xE(n,this.b))},uZn.Kc=function(){return ix(new DD(this.a),this.b)},zW(AZn,"Iterables/5",1057),sDn(1058,1,QZn,xE),uZn.Cd=function(n){this.a.Cd(oN(n))},zW(AZn,"Iterables/5/lambda$0$Type",1058),sDn(1087,204,OZn,sb),uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return this.a.Pb()},zW(AZn,"Iterators/1",1087),sDn(1088,713,OZn,DE),uZn.Yb=function(){for(var n;this.b.Ob();)if(n=this.b.Pb(),this.a.Lb(n))return n;return this.e=2,null},zW(AZn,"Iterators/5",1088),sDn(496,1,$Zn),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.b.Ob()},uZn.Pb=function(){return this.$d(this.b.Pb())},uZn.Qb=function(){this.b.Qb()},zW(AZn,"TransformedIterator",496),sDn(1089,496,$Zn,tx),uZn.$d=function(n){return this.a.Kb(n)},zW(AZn,"Iterators/6",1089),sDn(732,204,OZn,hb),uZn.Ob=function(){return!this.a},uZn.Pb=function(){if(this.a)throw hv(new Bv);return this.a=!0,this.b},uZn.a=!1,zW(AZn,"Iterators/9",732),sDn(1086,399,LZn,NX),uZn.Xb=function(n){return this.a[this.b+n]},uZn.b=0,zW(AZn,"Iterators/ArrayItr",1086),sDn(37,1,{37:1,51:1},Fz),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return hDn(this)},uZn.Pb=function(){return N9(this)},uZn.Qb=function(){if(!this.c)throw hv(new kM(PZn));this.c.Qb(),this.c=null},zW(AZn,"Iterators/ConcatenatedIterator",37),sDn(22,1,{3:1,34:1,22:1}),uZn.Fd=function(n){return cM(this,uG(n,22))},uZn.Fb=function(n){return this===n},uZn.Hb=function(){return xx(this)},uZn.Ib=function(){return MR(this)},uZn.g=0;var Iat,Oat=zW(kZn,"Enum",22);sDn(549,22,{549:1,3:1,34:1,22:1,51:1},X$),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return!1},uZn.Pb=function(){throw hv(new Bv)},uZn.Qb=function(){IB(!1)};var Aat,Lat=_cn(AZn,"Iterators/EmptyModifiableIterator",549,Oat,sW,cR);sDn(1907,627,NZn),zW(AZn,"LinkedHashMultimapGwtSerializationDependencies",1907),sDn(1908,1907,NZn,zbn),uZn.hc=function(){return new dx(orn(this.b))},uZn.$b=function(){ban(this),Tv(this.a,this.a)},uZn.pd=function(){return new dx(orn(this.b))},uZn.ic=function(n){return new Uln(this,n,this.b)},uZn.kc=function(){return new YW(this)},uZn.lc=function(){return new h3(uG(this.g||(this.g=new Ty(this)),21),17)},uZn.ec=function(){return this.i||(this.i=new RD(this,this.c))},uZn.nc=function(){return new $y(new YW(this))},uZn.oc=function(){return JU(new h3(uG(this.g||(this.g=new Ty(this)),21),17),new f)},uZn.b=2,zW(AZn,"LinkedHashMultimap",1908),sDn(1911,1,{},f),uZn.Kb=function(n){return uG(n,44).md()},zW(AZn,"LinkedHashMultimap/0methodref$getValue$Type",1911),sDn(834,1,$Zn,YW),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return Asn(this)},uZn.Ob=function(){return this.a!=this.b.a},uZn.Qb=function(){IB(!!this.c),S4(this.b,this.c.g,this.c.i),this.c=null},zW(AZn,"LinkedHashMultimap/1",834),sDn(227,246,{358:1,246:1,227:1,604:1,3:1,44:1},lJ),uZn._d=function(){return uG(nJ(this.f),604)},uZn.ae=function(n){this.c=n},uZn.be=function(n){this.f=n},uZn.d=0;var Nat,$at=zW(AZn,"LinkedHashMultimap/ValueEntry",227);sDn(1909,2068,{604:1,20:1,31:1,16:1,21:1},Uln),uZn.Fc=function(n){var t,e,i,r,c;for(t=(c=pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))))&this.b.length-1,e=r=this.b[t];e;e=e.a)if(e.d==c&&xQ(e.i,n))return!1;return i=new lJ(this.c,n,c,r),RM(this.d,i),i.f=this,this.d=i,Tv(uG(nJ(this.g.a.b),227),i),Tv(i,this.g.a),this.b[t]=i,++this.f,++this.e,aSn(this),!0},uZn.$b=function(){var n,t;for(FP(this.b,null),this.f=0,n=this.a;n!=this;n=n._d())t=uG(n,227),Tv(uG(nJ(t.b),227),uG(nJ(t.e),227));this.a=this,this.d=this,++this.e},uZn.Hc=function(n){var t,e;for(e=pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))),t=this.b[e&this.b.length-1];t;t=t.a)if(t.d==e&&xQ(t.i,n))return!0;return!1},uZn.Jc=function(n){var t;for(WW(n),t=this.a;t!=this;t=t._d())n.Cd(uG(t,227).i)},uZn._d=function(){return this.a},uZn.Kc=function(){return new IQ(this)},uZn.Mc=function(n){return hFn(this,n)},uZn.ae=function(n){this.d=n},uZn.be=function(n){this.a=n},uZn.gc=function(){return this.f},uZn.e=0,uZn.f=0,zW(AZn,"LinkedHashMultimap/ValueSet",1909),sDn(1910,1,$Zn,IQ),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return _q(this),this.b!=this.c},uZn.Pb=function(){var n,t;if(_q(this),this.b==this.c)throw hv(new Bv);return t=(n=uG(this.b,227)).i,this.d=n,this.b=uG(nJ(n.f),604),t},uZn.Qb=function(){_q(this),IB(!!this.d),hFn(this.c,this.d.i),this.a=this.c.e,this.d=null},uZn.a=0,zW(AZn,"LinkedHashMultimap/ValueSet/1",1910),sDn(780,2084,NZn,hL),uZn.Zb=function(){return this.f||(this.f=new UP(this))},uZn.Fb=function(n){return Aln(this,n)},uZn.cc=function(n){return new RE(this,n)},uZn.fc=function(n){return $nn(this,n)},uZn.$b=function(){nW(this)},uZn._b=function(n){return YE(this,n)},uZn.ac=function(){return new UP(this)},uZn.bc=function(){return new lb(this)},uZn.qc=function(n){return new RE(this,n)},uZn.dc=function(){return!this.a},uZn.rc=function(n){return $nn(this,n)},uZn.gc=function(){return this.d},uZn.c=0,uZn.d=0,zW(AZn,"LinkedListMultimap",780),sDn(56,31,m1n),uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.bd=function(n,t){throw hv(new TM("Add not supported on this list"))},uZn.Fc=function(n){return this.bd(this.gc(),n),!0},uZn.cd=function(n,t){var e,i,r;for(tJ(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),this.bd(n++,i),e=!0;return e},uZn.$b=function(){this.ce(0,this.gc())},uZn.Fb=function(n){return PDn(this,n)},uZn.Hb=function(){return Zfn(this)},uZn.dd=function(n){return gan(this,n)},uZn.Kc=function(){return new Jw(this)},uZn.ed=function(){return this.fd(0)},uZn.fd=function(n){return new N4(this,n)},uZn.gd=function(n){throw hv(new TM("Remove not supported on this list"))},uZn.ce=function(n,t){var e,i;for(i=this.fd(n),e=n;e<t;++e)i.Pb(),i.Qb()},uZn.hd=function(n,t){throw hv(new TM("Set not supported on this list"))},uZn.kd=function(n,t){return new C2(this,n,t)},uZn.j=0,zW(DZn,"AbstractList",56),sDn(2062,56,m1n),uZn.bd=function(n,t){sR(this,n,t)},uZn.cd=function(n,t){return Xln(this,n,t)},uZn.Xb=function(n){return hyn(this,n)},uZn.Kc=function(){return this.fd(0)},uZn.gd=function(n){return Kjn(this,n)},uZn.hd=function(n,t){var e,i;e=this.fd(n);try{return i=e.Pb(),e.Wb(t),i}catch(r){throw F$(r=Ehn(r),112)?hv(new dM("Can't set element "+n)):hv(r)}},zW(DZn,"AbstractSequentialList",2062),sDn(646,2062,m1n,RE),uZn.fd=function(n){return rx(this,n)},uZn.gc=function(){var n;return(n=uG(cQ(this.a.b,this.b),260))?n.a:0},zW(AZn,"LinkedListMultimap/1",646),sDn(1316,2068,FZn,lb),uZn.Hc=function(n){return YE(this.a,n)},uZn.Kc=function(){return new $on(this.a)},uZn.Mc=function(n){return!$nn(this.a,n).a.dc()},uZn.gc=function(){return oS(this.a.b)},zW(AZn,"LinkedListMultimap/1KeySetImpl",1316),sDn(1315,1,$Zn,$on),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return Bq(this),!!this.c},uZn.Pb=function(){if(Bq(this),!this.c)throw hv(new Bv);this.a=this.c,FV(this.d,this.a.a);do{this.c=this.c.b}while(this.c&&!FV(this.d,this.c.a));return this.a.a},uZn.Qb=function(){Bq(this),IB(!!this.a),Hq(new Een(this.e,this.a.a)),this.a=null,this.b=this.e.c},uZn.b=0,zW(AZn,"LinkedListMultimap/DistinctKeyIterator",1315),sDn(260,1,{260:1},TZ),uZn.a=0,zW(AZn,"LinkedListMultimap/KeyList",260),sDn(511,358,{358:1,511:1,44:1},KE),uZn.ld=function(){return this.a},uZn.md=function(){return this.f},uZn.nd=function(n){var t;return t=this.f,this.f=n,t},zW(AZn,"LinkedListMultimap/Node",511),sDn(566,1,UZn,Een,EAn),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){this.e=JHn(this.f,this.b,n,this.c),++this.d,this.a=null},uZn.Ob=function(){return!!this.c},uZn.Sb=function(){return!!this.e},uZn.Pb=function(){return Ein(this)},uZn.Tb=function(){return this.d},uZn.Ub=function(){return jin(this)},uZn.Vb=function(){return this.d-1},uZn.Qb=function(){IB(!!this.a),this.a!=this.c?(this.e=this.a.e,--this.d):this.c=this.a.c,MRn(this.f,this.a),this.a=null},uZn.Wb=function(n){_D(!!this.a),this.a.f=n},uZn.d=0,zW(AZn,"LinkedListMultimap/ValueForKeyIterator",566),sDn(1031,56,m1n),uZn.bd=function(n,t){this.a.bd(n,t)},uZn.cd=function(n,t){return this.a.cd(n,t)},uZn.Hc=function(n){return this.a.Hc(n)},uZn.Xb=function(n){return this.a.Xb(n)},uZn.gd=function(n){return this.a.gd(n)},uZn.hd=function(n,t){return this.a.hd(n,t)},uZn.gc=function(){return this.a.gc()},zW(AZn,"Lists/AbstractListWrapper",1031),sDn(1032,1031,k1n),zW(AZn,"Lists/RandomAccessListWrapper",1032),sDn(1034,1032,k1n,qE),uZn.fd=function(n){return this.a.fd(n)},zW(AZn,"Lists/1",1034),sDn(441,56,{441:1,20:1,31:1,56:1,16:1,15:1},XE),uZn.bd=function(n,t){this.a.bd(KV(this,n),t)},uZn.$b=function(){this.a.$b()},uZn.Xb=function(n){return this.a.Xb(XW(this,n))},uZn.Kc=function(){return I3(this,0)},uZn.fd=function(n){return I3(this,n)},uZn.gd=function(n){return this.a.gd(XW(this,n))},uZn.ce=function(n,t){(G4(n,t,this.a.gc()),Spn(this.a.kd(KV(this,t),KV(this,n)))).$b()},uZn.hd=function(n,t){return this.a.hd(XW(this,n),t)},uZn.gc=function(){return this.a.gc()},uZn.kd=function(n,t){return G4(n,t,this.a.gc()),Spn(this.a.kd(KV(this,t),KV(this,n)))},zW(AZn,"Lists/ReverseList",441),sDn(1030,441,{441:1,20:1,31:1,56:1,16:1,15:1,59:1},Ly),zW(AZn,"Lists/RandomAccessReverseList",1030),sDn(1033,1,UZn,BE),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){this.c.Rb(n),this.c.Ub(),this.a=!1},uZn.Ob=function(){return this.c.Sb()},uZn.Sb=function(){return this.c.Ob()},uZn.Pb=function(){if(!this.c.Sb())throw hv(new Bv);return this.a=!0,this.c.Ub()},uZn.Tb=function(){return KV(this.b,this.c.Tb())},uZn.Ub=function(){if(!this.c.Ob())throw hv(new Bv);return this.a=!0,this.c.Pb()},uZn.Vb=function(){return KV(this.b,this.c.Tb())-1},uZn.Qb=function(){IB(this.a),this.c.Qb(),this.a=!1},uZn.Wb=function(n){_D(this.a),this.c.Wb(n)},uZn.a=!1,zW(AZn,"Lists/ReverseList/1",1033),sDn(440,496,$Zn,Ny),uZn.$d=function(n){return OP(n)},zW(AZn,"Maps/1",440),sDn(712,496,$Zn,$y),uZn.$d=function(n){return uG(n,44).md()},zW(AZn,"Maps/2",712),sDn(975,496,$Zn,ex),uZn.$d=function(n){return new FE(n,PL(this.a,n))},zW(AZn,"Maps/3",975),sDn(972,2069,FZn,wb),uZn.Jc=function(n){nk(this.a,n)},uZn.Kc=function(){return this.a.kc()},uZn.Rc=function(){return this.a},uZn.Nc=function(){return this.a.lc()},zW(AZn,"Maps/IteratorBasedAbstractMap/1",972),sDn(973,1,{},db),uZn.Yd=function(n,t){this.a.Cd(n)},zW(AZn,"Maps/KeySet/lambda$0$Type",973),sDn(971,31,RZn,zE),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a.uc(n)},uZn.Jc=function(n){WW(n),this.a.wc(new bb(n))},uZn.dc=function(){return this.a.dc()},uZn.Kc=function(){return new $y(this.a.vc().Kc())},uZn.Mc=function(n){var t,e;try{return Wpn(this,n,!0)}catch(i){if(F$(i=Ehn(i),48)){for(e=this.a.vc().Kc();e.Ob();)if(xQ(n,(t=uG(e.Pb(),44)).md()))return this.a.Bc(t.ld()),!0;return!1}throw hv(i)}},uZn.gc=function(){return this.a.gc()},zW(AZn,"Maps/Values",971),sDn(974,1,{},bb),uZn.Yd=function(n,t){this.a.Cd(t)},zW(AZn,"Maps/Values/lambda$0$Type",974),sDn(752,2085,xZn,UP),uZn.xc=function(n){return this.a._b(n)?this.a.cc(n):null},uZn.Bc=function(n){return this.a._b(n)?this.a.fc(n):null},uZn.$b=function(){this.a.$b()},uZn._b=function(n){return this.a._b(n)},uZn.Ec=function(){return new gb(this)},uZn.Dc=function(){return this.Ec()},uZn.dc=function(){return this.a.dc()},uZn.ec=function(){return this.a.ec()},uZn.gc=function(){return this.a.ec().gc()},zW(AZn,"Multimaps/AsMap",752),sDn(1134,2069,FZn,gb),uZn.Kc=function(){return W$(this.a.a.ec(),new pb(this))},uZn.Rc=function(){return this.a},uZn.Mc=function(n){var t;return!!Amn(this,n)&&(t=uG(nJ(uG(n,44)),44),rM(this.a,t.ld()),!0)},zW(AZn,"Multimaps/AsMap/EntrySet",1134),sDn(1138,1,{},pb),uZn.Kb=function(n){return PL(this,n)},uZn.Fb=function(n){return this===n},zW(AZn,"Multimaps/AsMap/EntrySet/1",1138),sDn(552,2087,{552:1,849:1,20:1,31:1,16:1},mb),uZn.$b=function(){ban(this.a)},uZn.Hc=function(n){return jj(this.a,n)},uZn.Jc=function(n){WW(n),z8(RW(this.a),new kb(n))},uZn.Kc=function(){return new Ny(RW(this.a).a.kc())},uZn.gc=function(){return this.a.d},uZn.Nc=function(){return JU(RW(this.a).Nc(),new l)},zW(AZn,"Multimaps/Keys",552),sDn(1136,1,{},l),uZn.Kb=function(n){return uG(n,44).ld()},zW(AZn,"Multimaps/Keys/0methodref$getKey$Type",1136),sDn(1135,496,$Zn,Dy),uZn.$d=function(n){return new vb(uG(n,44))},zW(AZn,"Multimaps/Keys/1",1135),sDn(2088,1,{425:1}),uZn.Fb=function(n){var t;return!!F$(n,503)&&(t=uG(n,425),uG(this.a.md(),16).gc()==uG(t.a.md(),16).gc()&&xQ(this.a.ld(),t.a.ld()))},uZn.Hb=function(){var n;return(null==(n=this.a.ld())?0:Hon(n))^uG(this.a.md(),16).gc()},uZn.Ib=function(){var n,t;return t=ox(this.a.ld()),1==(n=uG(this.a.md(),16).gc())?t:t+" x "+n},zW(AZn,"Multisets/AbstractEntry",2088),sDn(503,2088,{503:1,425:1},vb),zW(AZn,"Multimaps/Keys/1/1",503),sDn(1137,1,QZn,kb),uZn.Cd=function(n){this.a.Cd(uG(n,44).ld())},zW(AZn,"Multimaps/Keys/lambda$1$Type",1137),sDn(1140,1,QZn,b),uZn.Cd=function(n){qq(uG(n,425))},zW(AZn,"Multiset/lambda$0$Type",1140),sDn(753,1,QZn,yb),uZn.Cd=function(n){Srn(this.a,uG(n,425))},zW(AZn,"Multiset/lambda$1$Type",753),sDn(1141,1,{},w),zW(AZn,"Multisets/0methodref$add$Type",1141),sDn(754,1,{},d),uZn.Kb=function(n){return N6(uG(n,425))},zW(AZn,"Multisets/lambda$1$Type",754),sDn(2106,1,yZn),zW(AZn,"RangeGwtSerializationDependencies",2106),sDn(521,2106,{178:1,521:1,3:1,46:1},Gyn),uZn.Lb=function(n){return Iz(this,uG(n,34))},uZn.Mb=function(n){return Iz(this,uG(n,34))},uZn.Fb=function(n){var t;return!!F$(n,521)&&(t=uG(n,521),pTn(this.a,t.a)&&pTn(this.b,t.b))},uZn.Hb=function(){return 31*this.a.Hb()+this.b.Hb()},uZn.Ib=function(){return N5(this.a,this.b)},zW(AZn,"Range",521),sDn(654,2097,r1n,TV),uZn.fd=function(n){return oR(this.b,n)},uZn.Zd=function(){return this.a},uZn.Xb=function(n){return GA(this.b,n)},uZn.Pd=function(n){return oR(this.b,n)},zW(AZn,"RegularImmutableAsList",654),sDn(656,2105,r1n,t1),uZn.Rd=function(){return this.a},zW(AZn,"RegularImmutableList",656),sDn(548,730,a1n,xy,Ry),zW(AZn,"RegularImmutableMap",548),sDn(731,719,u1n,RP),zW(AZn,"RegularImmutableSet",731),sDn(2074,KZn,FZn),uZn.Kc=function(){return new zJ(this.a,this.b)},uZn.Fc=function(n){throw hv(new Kv)},uZn.Gc=function(n){throw hv(new Kv)},uZn.$b=function(){throw hv(new Kv)},uZn.Mc=function(n){throw hv(new Kv)},zW(AZn,"Sets/SetView",2074),sDn(976,2074,FZn,GE),uZn.Kc=function(){return new zJ(this.a,this.b)},uZn.Hc=function(n){return RX(this.a,n)&&this.b.Hc(n)},uZn.Ic=function(n){return yhn(this.a,n)&&this.b.Ic(n)},uZn.dc=function(){return Tyn(this.b,this.a)},uZn.Lc=function(){return JJ(new fX(null,new h3(this.a,1)),new Tb(this.b))},uZn.gc=function(){return qsn(this)},uZn.Oc=function(){return JJ(new fX(null,new h3(this.a,1)),new Mb(this.b))},zW(AZn,"Sets/2",976),sDn(977,1,y1n,Mb),uZn.Mb=function(n){return this.a.Hc(n)},zW(AZn,"Sets/2/0methodref$contains$Type",977),sDn(714,713,OZn,zJ),uZn.Yb=function(){for(var n;b$(this.a);)if(n=X5(this.a),this.c.Hc(n))return n;return this.e=2,null},zW(AZn,"Sets/2/1",714),sDn(978,1,y1n,Tb),uZn.Mb=function(n){return this.a.Hc(n)},zW(AZn,"Sets/2/1methodref$contains$Type",978),sDn(616,2073,{616:1,3:1,20:1,16:1,277:1,21:1,87:1},e0),uZn.Kd=function(){return this.b},uZn.Ld=function(){return this.b},uZn.Wd=function(){return this.b},uZn.Jc=function(n){this.a.Jc(n)},uZn.Lc=function(){return this.a.Lc()},uZn.Oc=function(){return this.a.Oc()},zW(AZn,"Sets/UnmodifiableNavigableSet",616),sDn(2031,2030,a1n,bJ),uZn.Vd=function(){return sB(),new KM(this.a)},uZn.Cc=function(){return sB(),new KM(this.a)},uZn.xd=function(){return sB(),new KM(this.a)},zW(AZn,"SingletonImmutableBiMap",2031),sDn(657,2105,r1n,Uq),uZn.Rd=function(){return this.a},zW(AZn,"SingletonImmutableList",657),sDn(363,2079,u1n,KM),uZn.Kc=function(){return new hb(this.a)},uZn.Hc=function(n){return udn(this.a,n)},uZn.Od=function(){return new hb(this.a)},uZn.gc=function(){return 1},zW(AZn,"SingletonImmutableSet",363),sDn(1148,1,{},g),uZn.Kb=function(n){return uG(n,159)},zW(AZn,"Streams/lambda$0$Type",1148),sDn(1149,1,M1n,jb),uZn.de=function(){B9(this.a)},zW(AZn,"Streams/lambda$1$Type",1149),sDn(1725,1724,NZn,MZ),uZn.Zb=function(){return uG(uG(this.f||(this.f=F$(this.c,139)?new $K(this,uG(this.c,139)):F$(this.c,133)?new NK(this,uG(this.c,133)):new OE(this,this.c)),133),139)},uZn.hc=function(){return new Hj(this.b)},uZn.pd=function(){return new Hj(this.b)},uZn.ec=function(){return uG(uG(this.i||(this.i=F$(this.c,139)?new ME(this,uG(this.c,139)):F$(this.c,133)?new yE(this,uG(this.c,133)):new RD(this,this.c)),87),277)},uZn.ac=function(){return F$(this.c,139)?new $K(this,uG(this.c,139)):F$(this.c,133)?new NK(this,uG(this.c,133)):new OE(this,this.c)},uZn.ic=function(n){return null==n&&this.a.Ne(n,n),new Hj(this.b)},zW(AZn,"TreeMultimap",1725),sDn(82,1,{3:1,82:1}),uZn.ee=function(n){return new Error(n)},uZn.fe=function(){return this.e},uZn.ge=function(){var n,t,e;for(null==this.k&&(this.k=Inn(xat,zZn,82,0,0,1)),e=this.k,t=Inn(dat,EZn,1,e.length,5,1),n=0;n<e.length;n++)t[n]=e[n].e;return t},uZn.he=function(){return this.f},uZn.ie=function(){return this.g},uZn.je=function(){Yy(this,X4(this.ee(i1(this,this.g)))),Cv(this)},uZn.Ib=function(){return i1(this,this.ie())},uZn.e=E1n,uZn.i=!1,uZn.n=!0;var Dat,xat=zW(kZn,"Throwable",82);sDn(103,82,{3:1,103:1,82:1}),zW(kZn,"Exception",103),sDn(63,103,S1n,Ov,Ky),zW(kZn,"RuntimeException",63),sDn(607,63,S1n),zW(kZn,"JsException",607),sDn(875,607,S1n),zW(P1n,"JavaScriptExceptionBase",875),sDn(485,875,{485:1,3:1,103:1,63:1,82:1},qbn),uZn.ie=function(){return tPn(this),this.c},uZn.ke=function(){return xA(this.b)===xA(Dat)?null:this.b},zW(I1n,"JavaScriptException",485);var Rat,Kat=zW(I1n,"JavaScriptObject$",0);sDn(2047,1,{}),zW(I1n,"Scheduler",2047);var Fat,_at,Bat,Hat,Uat=0,Gat=0,qat=-1;sDn(902,2047,{},p),zW(P1n,"SchedulerImpl",902),sDn(2058,1,{}),zW(P1n,"StackTraceCreator/Collector",2058),sDn(876,2058,{},m),uZn.le=function(n){var t={},e=[];n[A1n]=e;for(var i=arguments.callee.caller;i;){var r=(EZ(),i.name||(i.name=Qcn(i.toString())));e.push(r);var c,a,o=":"+r,u=t[o];if(u)for(c=0,a=u.length;c<a;c++)if(u[c]===i)return;(u||(t[o]=[])).push(i),i=i.caller}},uZn.me=function(n){var t,e,i,r;for(EZ(),e=(i=n&&n[A1n]?n[A1n]:[]).length,r=Inn(jot,zZn,319,e,0,1),t=0;t<e;t++)r[t]=new kY(i[t],null,-1);return r},zW(P1n,"StackTraceCreator/CollectorLegacy",876),sDn(2059,2058,{}),uZn.le=function(n){},uZn.ne=function(n,t,e,i){return new kY(t,n+"@"+i,e<0?-1:e)},uZn.me=function(n){var t,e,i,r,c,a;if(r=WTn(n),c=Inn(jot,zZn,319,0,0,1),t=0,0==(i=r.length))return c;for(m_((a=rQn(this,r[0])).d,O1n)||(c[t++]=a),e=1;e<i;e++)c[t++]=rQn(this,r[e]);return c},zW(P1n,"StackTraceCreator/CollectorModern",2059),sDn(877,2059,{},v),uZn.ne=function(n,t,e,i){return new kY(t,n,-1)},zW(P1n,"StackTraceCreator/CollectorModernNoSourceMap",877),sDn(1064,1,{}),zW(c0n,a0n,1064),sDn(624,1064,{624:1},JW),zW(o0n,a0n,624),sDn(2101,1,{}),zW(c0n,u0n,2101),sDn(2102,2101,{}),zW(o0n,u0n,2102),sDn(1120,1,{},k),zW(o0n,"LocaleInfo",1120),sDn(2027,1,{},y),uZn.a=0,zW(o0n,"TimeZone",2027),sDn(1293,2102,{},M),zW("com.google.gwt.i18n.client.impl.cldr","DateTimeFormatInfoImpl",1293),sDn(443,1,{443:1},hG),uZn.a=!1,uZn.b=0,zW(c0n,"DateTimeFormat/PatternPart",443),sDn(206,1,s0n,QE,Lfn,DK),uZn.Fd=function(n){return k4(this,uG(n,206))},uZn.Fb=function(n){return F$(n,206)&&_A(Bsn(this.q.getTime()),Bsn(uG(n,206).q.getTime()))},uZn.Hb=function(){var n;return pz(P3(n=Bsn(this.q.getTime()),Dz(n,32)))},uZn.Ib=function(){var n,t,i;return n=((i=-this.q.getTimezoneOffset())>=0?"+":"")+(i/60|0),t=FL(e.Math.abs(i)%60),(cIn(),nut)[this.q.getDay()]+" "+tut[this.q.getMonth()]+" "+FL(this.q.getDate())+" "+FL(this.q.getHours())+":"+FL(this.q.getMinutes())+":"+FL(this.q.getSeconds())+" GMT"+n+t+" "+this.q.getFullYear()};var Xat,zat,Vat,Wat,Qat,Jat,Yat,Zat,not,tot,eot,iot=zW(DZn,"Date",206);sDn(2015,206,s0n,DEn),uZn.a=!1,uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.f=0,uZn.g=!1,uZn.i=0,uZn.j=0,uZn.k=0,uZn.n=0,uZn.o=0,uZn.p=0,zW("com.google.gwt.i18n.shared.impl","DateRecord",2015),sDn(2064,1,{}),uZn.pe=function(){return null},uZn.qe=function(){return null},uZn.re=function(){return null},uZn.se=function(){return null},uZn.te=function(){return null},zW(h0n,"JSONValue",2064),sDn(221,2064,{221:1},Ib,Eb),uZn.Fb=function(n){return!!F$(n,221)&&j3(this.a,uG(n,221).a)},uZn.oe=function(){return uv},uZn.Hb=function(){return OZ(this.a)},uZn.pe=function(){return this},uZn.Ib=function(){var n,t,e;for(e=new lx("["),t=0,n=this.a.length;t<n;t++)t>0&&(e.a+=","),QA(e,uin(this,t));return e.a+="]",e.a},zW(h0n,"JSONArray",221),sDn(492,2064,{492:1},Sb),uZn.oe=function(){return sv},uZn.qe=function(){return this},uZn.Ib=function(){return qx(),""+this.a},uZn.a=!1,zW(h0n,"JSONBoolean",492),sDn(997,63,S1n,Fy),zW(h0n,"JSONException",997),sDn(1036,2064,{},T),uZn.oe=function(){return fv},uZn.Ib=function(){return IZn},zW(h0n,"JSONNull",1036),sDn(263,2064,{263:1},Pb),uZn.Fb=function(n){return!!F$(n,263)&&this.a==uG(n,263).a},uZn.oe=function(){return av},uZn.Hb=function(){return OL(this.a)},uZn.re=function(){return this},uZn.Ib=function(){return this.a+""},uZn.a=0,zW(h0n,"JSONNumber",263),sDn(190,2064,{190:1},_y,Cb),uZn.Fb=function(n){return!!F$(n,190)&&j3(this.a,uG(n,190).a)},uZn.oe=function(){return ov},uZn.Hb=function(){return OZ(this.a)},uZn.se=function(){return this},uZn.Ib=function(){var n,t,e,i,r,c;for(c=new lx("{"),n=!0,i=0,r=(e=Yon(this,Inn($ot,zZn,2,0,6,1))).length;i<r;++i)t=e[i],n?n=!1:c.a+=TZn,JA(c,l$n(t)),c.a+=":",QA(c,v0(this,t));return c.a+="}",c.a},zW(h0n,"JSONObject",190),sDn(605,KZn,FZn,JE),uZn.Hc=function(n){return RA(n)&&hT(this.a,mK(n))},uZn.Kc=function(){return new Jw(new IM(this.b))},uZn.gc=function(){return this.b.length},zW(h0n,"JSONObject/1",605),sDn(211,2064,{211:1},QW),uZn.Fb=function(n){return!!F$(n,211)&&m_(this.a,uG(n,211).a)},uZn.oe=function(){return cv},uZn.Hb=function(){return pln(this.a)},uZn.te=function(){return this},uZn.Ib=function(){return l$n(this.a)},zW(h0n,"JSONString",211),sDn(2060,1,{533:1}),zW(m0n,"OutputStream",2060),sDn(2061,2060,{533:1}),zW(m0n,"FilterOutputStream",2061),sDn(878,2061,{533:1},S),zW(m0n,"PrintStream",878),sDn(427,1,{483:1}),uZn.Ib=function(){return this.a},zW(kZn,"AbstractStringBuilder",427),sDn(538,63,S1n,wM),zW(kZn,"ArithmeticException",538),sDn(77,63,v0n,Lv,dM),zW(kZn,"IndexOutOfBoundsException",77),sDn(333,77,{3:1,333:1,103:1,77:1,63:1,82:1},Ik,YM),zW(kZn,"ArrayIndexOutOfBoundsException",333),sDn(537,63,S1n,Nv,gM),zW(kZn,"ArrayStoreException",537),sDn(295,82,k0n,pM),zW(kZn,"Error",295),sDn(200,295,k0n,Av,x9),zW(kZn,"AssertionError",200),fZn={3:1,484:1,34:1};var rot,cot=zW(kZn,"Boolean",484);sDn(242,1,{3:1,242:1}),zW(kZn,"Number",242),sDn(222,242,{3:1,222:1,34:1,242:1},Dw),uZn.Fd=function(n){return oT(this,uG(n,222))},uZn.ue=function(){return this.a},uZn.Fb=function(n){return F$(n,222)&&uG(n,222).a==this.a},uZn.Hb=function(){return this.a},uZn.Ib=function(){return""+this.a},uZn.a=0;var aot,oot,uot=zW(kZn,"Byte",222);sDn(180,1,{3:1,180:1,34:1},xw),uZn.Fd=function(n){return uT(this,uG(n,180))},uZn.Fb=function(n){return F$(n,180)&&uG(n,180).a==this.a},uZn.Hb=function(){return this.a},uZn.Ib=function(){return String.fromCharCode(this.a)},uZn.a=0;var sot,hot=zW(kZn,"Character",180);sDn(212,63,{3:1,212:1,103:1,63:1,82:1},$v,mM),zW(kZn,"ClassCastException",212),lZn={3:1,34:1,345:1,242:1};var fot=zW(kZn,"Double",345);sDn(161,242,{3:1,34:1,161:1,242:1},Rw,tk),uZn.Fd=function(n){return DL(this,uG(n,161))},uZn.ue=function(){return this.a},uZn.Fb=function(n){return F$(n,161)&&p_(this.a,uG(n,161).a)},uZn.Hb=function(){return t0(this.a)},uZn.Ib=function(){return""+this.a},uZn.a=0;var lot=zW(kZn,"Float",161);sDn(33,63,{3:1,103:1,33:1,63:1,82:1},Dv,vM,tbn),zW(kZn,"IllegalArgumentException",33),sDn(73,63,S1n,xv,kM),zW(kZn,"IllegalStateException",73),sDn(17,242,{3:1,34:1,17:1,242:1},Iw),uZn.Fd=function(n){return NL(this,uG(n,17))},uZn.ue=function(){return this.a},uZn.Fb=function(n){return F$(n,17)&&uG(n,17).a==this.a},uZn.Hb=function(){return this.a},uZn.Ib=function(){return""+this.a},uZn.a=0;var bot,wot,dot=zW(kZn,"Integer",17);sDn(168,242,{3:1,34:1,168:1,242:1},Ow),uZn.Fd=function(n){return $L(this,uG(n,168))},uZn.ue=function(){return W4(this.a)},uZn.Fb=function(n){return F$(n,168)&&_A(uG(n,168).a,this.a)},uZn.Hb=function(){return TF(this.a)},uZn.Ib=function(){return""+oV(this.a)},uZn.a=0;var got,pot,mot,vot,kot,yot=zW(kZn,"Long",168);sDn(2140,1,{}),sDn(1904,63,S1n,yM),zW(kZn,"NegativeArraySizeException",1904),sDn(169,607,{3:1,103:1,169:1,63:1,82:1},Rv,MM),uZn.ee=function(n){return new TypeError(n)},zW(kZn,"NullPointerException",169),sDn(130,33,{3:1,103:1,33:1,130:1,63:1,82:1},ZM),zW(kZn,"NumberFormatException",130),sDn(191,242,{3:1,34:1,242:1,191:1},Aw),uZn.Fd=function(n){return sT(this,uG(n,191))},uZn.ue=function(){return this.a},uZn.Fb=function(n){return F$(n,191)&&uG(n,191).a==this.a},uZn.Hb=function(){return this.a},uZn.Ib=function(){return""+this.a},uZn.a=0;var Mot,Tot=zW(kZn,"Short",191);sDn(319,1,{3:1,319:1},kY),uZn.Fb=function(n){var t;return!!F$(n,319)&&(t=uG(n,319),this.c==t.c&&this.d==t.d&&this.a==t.a&&this.b==t.b)},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[xwn(this.c),this.a,this.d,this.b]))},uZn.Ib=function(){return this.a+"."+this.d+"("+(null!=this.b?this.b:"Unknown Source")+(this.c>=0?":"+this.c:"")+")"},uZn.c=0;var jot=zW(kZn,"StackTraceElement",319);bZn={3:1,483:1,34:1,2:1};var Eot,Sot,Pot,Cot,Iot,Oot,Aot,Lot,Not,$ot=zW(kZn,C1n,2);sDn(111,427,{483:1},zM,VM,fx),zW(kZn,"StringBuffer",111),sDn(104,427,{483:1},WM,QM,lx),zW(kZn,"StringBuilder",104),sDn(702,77,v0n,JM),zW(kZn,"StringIndexOutOfBoundsException",702),sDn(2145,1,{}),sDn(48,63,{3:1,103:1,63:1,82:1,48:1},Kv,TM),zW(kZn,"UnsupportedOperationException",48),sDn(247,242,{3:1,34:1,242:1,247:1},Edn,Wj),uZn.Fd=function(n){return $Gn(this,uG(n,247))},uZn.ue=function(){return YIn(dzn(this))},uZn.Fb=function(n){var t;return this===n||!!F$(n,247)&&(t=uG(n,247),this.e==t.e&&0==$Gn(this,t))},uZn.Hb=function(){var n;return 0!=this.b?this.b:this.a<54?(n=Bsn(this.f),this.b=pz(E3(n,-1)),this.b=33*this.b+pz(E3($z(n,32),-1)),this.b=17*this.b+t0(this.e),this.b):(this.b=17*cwn(this.c)+t0(this.e),this.b)},uZn.Ib=function(){return dzn(this)},uZn.a=0,uZn.b=0,uZn.d=0,uZn.e=0,uZn.f=0;var Dot,xot,Rot,Kot,Fot,_ot,Bot=zW("java.math","BigDecimal",247);sDn(92,242,{3:1,34:1,242:1,92:1},Z5,x3,VV,nkn,PN),uZn.Fd=function(n){return Pvn(this,uG(n,92))},uZn.ue=function(){return YIn(bYn(this,0))},uZn.Fb=function(n){return Cpn(this,n)},uZn.Hb=function(){return cwn(this)},uZn.Ib=function(){return bYn(this,0)},uZn.b=-2,uZn.c=0,uZn.d=0,uZn.e=0;var Hot,Uot,Got,qot,Xot=zW("java.math","BigInteger",92);sDn(497,2065,xZn),uZn.$b=function(){$V(this)},uZn._b=function(n){return PV(this,n)},uZn.uc=function(n){return Qln(this,n,this.i)||Qln(this,n,this.f)},uZn.vc=function(){return new Nw(this)},uZn.xc=function(n){return cQ(this,n)},uZn.zc=function(n,t){return vJ(this,n,t)},uZn.Bc=function(n){return u7(this,n)},uZn.gc=function(){return oS(this)},uZn.g=0,zW(DZn,"AbstractHashMap",497),sDn(267,KZn,FZn,Nw),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return Q4(this,n)},uZn.Kc=function(){return new bsn(this.a)},uZn.Mc=function(n){var t;return!!Q4(this,n)&&(t=uG(n,44).ld(),this.a.Bc(t),!0)},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractHashMap/EntrySet",267),sDn(268,1,$Zn,bsn),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return von(this)},uZn.Ob=function(){return this.b},uZn.Qb=function(){Oen(this)},uZn.b=!1,uZn.d=0,zW(DZn,"AbstractHashMap/EntrySetIterator",268),sDn(426,1,$Zn,Jw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return AP(this)},uZn.Pb=function(){return _Y(this)},uZn.Qb=function(){LQ(this)},uZn.b=0,uZn.c=-1,zW(DZn,"AbstractList/IteratorImpl",426),sDn(98,426,UZn,N4),uZn.Qb=function(){LQ(this)},uZn.Rb=function(n){pF(this,n)},uZn.Sb=function(){return this.b>0},uZn.Tb=function(){return this.b},uZn.Ub=function(){return MK(this.b>0),this.a.Xb(this.c=--this.b)},uZn.Vb=function(){return this.b-1},uZn.Wb=function(n){TK(-1!=this.c),this.a.hd(this.c,n)},zW(DZn,"AbstractList/ListIteratorImpl",98),sDn(244,56,m1n,C2),uZn.bd=function(n,t){o3(n,this.b),this.c.bd(this.a+n,t),++this.b},uZn.Xb=function(n){return u3(n,this.b),this.c.Xb(this.a+n)},uZn.gd=function(n){var t;return u3(n,this.b),t=this.c.gd(this.a+n),--this.b,t},uZn.hd=function(n,t){return u3(n,this.b),this.c.hd(this.a+n,t)},uZn.gc=function(){return this.b},uZn.a=0,uZn.b=0,zW(DZn,"AbstractList/SubList",244),sDn(266,KZn,FZn,Lw),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a._b(n)},uZn.Kc=function(){return new Kw(this.a.vc().Kc())},uZn.Mc=function(n){return!!this.a._b(n)&&(this.a.Bc(n),!0)},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractMap/1",266),sDn(541,1,$Zn,Kw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).ld()},uZn.Qb=function(){this.a.Qb()},zW(DZn,"AbstractMap/1/1",541),sDn(231,31,RZn,Fw),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a.uc(n)},uZn.Kc=function(){return new _w(this.a.vc().Kc())},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractMap/2",231),sDn(300,1,$Zn,_w),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).md()},uZn.Qb=function(){this.a.Qb()},zW(DZn,"AbstractMap/2/1",300),sDn(493,1,{493:1,44:1}),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),OJ(this.d,t.ld())&&OJ(this.e,t.md()))},uZn.ld=function(){return this.d},uZn.md=function(){return this.e},uZn.Hb=function(){return VN(this.d)^VN(this.e)},uZn.nd=function(n){return wF(this,n)},uZn.Ib=function(){return this.d+"="+this.e},zW(DZn,"AbstractMap/AbstractEntry",493),sDn(397,493,{493:1,397:1,44:1},VP),zW(DZn,"AbstractMap/SimpleEntry",397),sDn(2082,1,$0n),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),OJ(this.ld(),t.ld())&&OJ(this.md(),t.md()))},uZn.Hb=function(){return VN(this.ld())^VN(this.md())},uZn.Ib=function(){return this.ld()+"="+this.md()},zW(DZn,qZn,2082),sDn(2090,2065,_Zn),uZn.Xc=function(n){return Sj(this.Ee(n))},uZn.tc=function(n){return I9(this,n)},uZn._b=function(n){return dF(this,n)},uZn.vc=function(){return new Uw(this)},uZn.Tc=function(){return DV(this.Ge())},uZn.Yc=function(n){return Sj(this.He(n))},uZn.xc=function(n){var t;return t=n,DA(this.Fe(t))},uZn.$c=function(n){return Sj(this.Ie(n))},uZn.ec=function(){return new Bw(this)},uZn.Vc=function(){return DV(this.Je())},uZn._c=function(n){return Sj(this.Ke(n))},zW(DZn,"AbstractNavigableMap",2090),sDn(629,KZn,FZn,Uw),uZn.Hc=function(n){return F$(n,44)&&I9(this.b,uG(n,44))},uZn.Kc=function(){return this.b.De()},uZn.Mc=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),this.b.Le(t))},uZn.gc=function(){return this.b.gc()},zW(DZn,"AbstractNavigableMap/EntrySet",629),sDn(1146,KZn,HZn,Bw),uZn.Nc=function(){return new GP(this)},uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return dF(this.a,n)},uZn.Kc=function(){return new Hw(this.a.vc().b.De())},uZn.Mc=function(n){return!!dF(this.a,n)&&(this.a.Bc(n),!0)},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractNavigableMap/NavigableKeySet",1146),sDn(1147,1,$Zn,Hw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return AP(this.a.a)},uZn.Pb=function(){return kR(this.a).ld()},uZn.Qb=function(){rB(this.a)},zW(DZn,"AbstractNavigableMap/NavigableKeySet/1",1147),sDn(2103,31,RZn),uZn.Fc=function(n){return kG(_Cn(this,n),D0n),!0},uZn.Gc=function(n){return tJ(n),vG(n!=this,"Can't add a queue to itself"),Qon(this,n)},uZn.$b=function(){for(;null!=hin(this););},zW(DZn,"AbstractQueue",2103),sDn(310,31,{4:1,20:1,31:1,16:1},ND,$4),uZn.Fc=function(n){return O6(this,n),!0},uZn.$b=function(){q5(this)},uZn.Hc=function(n){return Chn(new XJ(this),n)},uZn.dc=function(){return LM(this)},uZn.Kc=function(){return new XJ(this)},uZn.Mc=function(n){return m0(new XJ(this),n)},uZn.gc=function(){return this.c-this.b&this.a.length-1},uZn.Nc=function(){return new h3(this,272)},uZn.Qc=function(n){var t;return t=this.c-this.b&this.a.length-1,n.length<t&&(n=aT(new Array(t),n)),Pon(this,n,t),n.length>t&&uQ(n,t,null),n},uZn.b=0,uZn.c=0,zW(DZn,"ArrayDeque",310),sDn(458,1,$Zn,XJ),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a!=this.b},uZn.Pb=function(){return rwn(this)},uZn.Qb=function(){lan(this)},uZn.a=0,uZn.b=0,uZn.c=-1,zW(DZn,"ArrayDeque/IteratorImpl",458),sDn(13,56,x0n,Zm,R7,Z_),uZn.bd=function(n,t){GX(this,n,t)},uZn.Fc=function(n){return kD(this,n)},uZn.cd=function(n,t){return Cbn(this,n,t)},uZn.Gc=function(n){return Ohn(this,n)},uZn.$b=function(){Xv(this.c,0)},uZn.Hc=function(n){return-1!=Ten(this,n,0)},uZn.Jc=function(n){Prn(this,n)},uZn.Xb=function(n){return zq(this,n)},uZn.dd=function(n){return Ten(this,n,0)},uZn.dc=function(){return 0==this.c.length},uZn.Kc=function(){return new Ww(this)},uZn.gd=function(n){return i7(this,n)},uZn.Mc=function(n){return men(this,n)},uZn.ce=function(n,t){P2(this,n,t)},uZn.hd=function(n,t){return Y8(this,n,t)},uZn.gc=function(){return this.c.length},uZn.jd=function(n){f$(this,n)},uZn.Pc=function(){return tq(this.c)},uZn.Qc=function(n){return Ekn(this,n)};var zot,Vot,Wot,Qot,Jot,Yot,Zot,nut,tut,eut=zW(DZn,"ArrayList",13);sDn(7,1,$Zn,Ww),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return l$(this)},uZn.Pb=function(){return N3(this)},uZn.Qb=function(){tW(this)},uZn.a=0,uZn.b=-1,zW(DZn,"ArrayList/1",7),sDn(2112,e.Function,{},P),uZn.Me=function(n,t){return ugn(n,t)},sDn(151,56,R0n,IM),uZn.Hc=function(n){return-1!=gan(this,n)},uZn.Jc=function(n){var t,e,i,r;for(tJ(n),i=0,r=(e=this.a).length;i<r;++i)t=e[i],n.Cd(t)},uZn.Xb=function(n){return Vq(this,n)},uZn.hd=function(n,t){var e;return u3(n,this.a.length),e=this.a[n],uQ(this.a,n,t),e},uZn.gc=function(){return this.a.length},uZn.jd=function(n){UX(this.a,this.a.length,n)},uZn.Pc=function(){return Skn(this,Inn(dat,EZn,1,this.a.length,5,1))},uZn.Qc=function(n){return Skn(this,n)},zW(DZn,"Arrays/ArrayList",151),sDn(953,56,R0n,C),uZn.Hc=function(n){return!1},uZn.Xb=function(n){return oL(n)},uZn.Kc=function(){return hZ(),wS(),Qot},uZn.ed=function(){return hZ(),wS(),Qot},uZn.gc=function(){return 0},zW(DZn,"Collections/EmptyList",953),sDn(954,1,UZn,I),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){throw hv(new Kv)},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},uZn.Pb=function(){throw hv(new Bv)},uZn.Tb=function(){return 0},uZn.Ub=function(){throw hv(new Bv)},uZn.Vb=function(){return-1},uZn.Qb=function(){throw hv(new xv)},uZn.Wb=function(n){throw hv(new xv)},zW(DZn,"Collections/EmptyListIterator",954),sDn(956,2065,a1n,O),uZn._b=function(n){return!1},uZn.uc=function(n){return!1},uZn.vc=function(){return hZ(),Wot},uZn.xc=function(n){return null},uZn.ec=function(){return hZ(),Wot},uZn.gc=function(){return 0},uZn.Cc=function(){return hZ(),zot},zW(DZn,"Collections/EmptyMap",956),sDn(955,KZn,u1n,A),uZn.Hc=function(n){return!1},uZn.Kc=function(){return hZ(),wS(),Qot},uZn.gc=function(){return 0},zW(DZn,"Collections/EmptySet",955),sDn(608,56,{3:1,20:1,31:1,56:1,16:1,15:1},Xw),uZn.Hc=function(n){return OJ(this.a,n)},uZn.Xb=function(n){return u3(n,1),this.a},uZn.gc=function(){return 1},zW(DZn,"Collections/SingletonList",608),sDn(384,1,e1n,qw),uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return new fX(null,this.Nc())},uZn.Nc=function(){return new h3(this,0)},uZn.Oc=function(){return new fX(null,this.Nc())},uZn.Fc=function(n){return Rj()},uZn.Gc=function(n){return Kj()},uZn.$b=function(){Fj()},uZn.Hc=function(n){return ZE(this,n)},uZn.Ic=function(n){return nS(this,n)},uZn.dc=function(){return this.b.dc()},uZn.Kc=function(){return new Gw(this.b.Kc())},uZn.Mc=function(n){return _j()},uZn.gc=function(){return this.b.gc()},uZn.Pc=function(){return this.b.Pc()},uZn.Qc=function(n){return tS(this,n)},uZn.Ib=function(){return cpn(this.b)},zW(DZn,"Collections/UnmodifiableCollection",384),sDn(383,1,$Zn,Gw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.b.Ob()},uZn.Pb=function(){return this.b.Pb()},uZn.Qb=function(){Bj()},zW(DZn,"Collections/UnmodifiableCollectionIterator",383),sDn(540,384,K0n,gx),uZn.Nc=function(){return new h3(this,16)},uZn.bd=function(n,t){throw hv(new Kv)},uZn.cd=function(n,t){throw hv(new Kv)},uZn.Fb=function(n){return udn(this.a,n)},uZn.Xb=function(n){return this.a.Xb(n)},uZn.Hb=function(){return Hon(this.a)},uZn.dd=function(n){return this.a.dd(n)},uZn.dc=function(){return this.a.dc()},uZn.ed=function(){return new px(this.a.fd(0))},uZn.fd=function(n){return new px(this.a.fd(n))},uZn.gd=function(n){throw hv(new Kv)},uZn.hd=function(n,t){throw hv(new Kv)},uZn.jd=function(n){throw hv(new Kv)},uZn.kd=function(n,t){return new gx(this.a.kd(n,t))},zW(DZn,"Collections/UnmodifiableList",540),sDn(705,383,UZn,px),uZn.Qb=function(){Bj()},uZn.Rb=function(n){throw hv(new Kv)},uZn.Sb=function(){return this.a.Sb()},uZn.Tb=function(){return this.a.Tb()},uZn.Ub=function(){return this.a.Ub()},uZn.Vb=function(){return this.a.Vb()},uZn.Wb=function(n){throw hv(new Kv)},zW(DZn,"Collections/UnmodifiableListIterator",705),sDn(609,1,xZn,Vw),uZn.wc=function(n){Yun(this,n)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.$b=function(){throw hv(new Kv)},uZn._b=function(n){return this.c._b(n)},uZn.uc=function(n){return iS(this,n)},uZn.vc=function(){return EJ(this)},uZn.Fb=function(n){return rS(this,n)},uZn.xc=function(n){return this.c.xc(n)},uZn.Hb=function(){return Hon(this.c)},uZn.dc=function(){return this.c.dc()},uZn.ec=function(){return SJ(this)},uZn.zc=function(n,t){throw hv(new Kv)},uZn.Bc=function(n){throw hv(new Kv)},uZn.gc=function(){return this.c.gc()},uZn.Ib=function(){return cpn(this.c)},uZn.Cc=function(){return jJ(this)},zW(DZn,"Collections/UnmodifiableMap",609),sDn(396,384,o1n,nT),uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return udn(this.b,n)},uZn.Hb=function(){return Hon(this.b)},zW(DZn,"Collections/UnmodifiableSet",396),sDn(957,396,o1n,tT),uZn.Hc=function(n){return eS(this,n)},uZn.Ic=function(n){return this.b.Ic(n)},uZn.Kc=function(){return new zw(this.b.Kc())},uZn.Pc=function(){var n;return w8(n=this.b.Pc(),n.length),n},uZn.Qc=function(n){return YZ(this,n)},zW(DZn,"Collections/UnmodifiableMap/UnmodifiableEntrySet",957),sDn(958,1,$Zn,zw),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return new Yw(uG(this.a.Pb(),44))},uZn.Ob=function(){return this.a.Ob()},uZn.Qb=function(){throw hv(new Kv)},zW(DZn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/1",958),sDn(703,1,$0n,Yw),uZn.Fb=function(n){return this.a.Fb(n)},uZn.ld=function(){return this.a.ld()},uZn.md=function(){return this.a.md()},uZn.Hb=function(){return this.a.Hb()},uZn.nd=function(n){throw hv(new Kv)},uZn.Ib=function(){return cpn(this.a)},zW(DZn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry",703),sDn(610,540,{20:1,16:1,15:1,59:1},eT),zW(DZn,"Collections/UnmodifiableRandomAccessList",610),sDn(704,396,s1n,mx),uZn.Nc=function(){return new GP(this)},uZn.Fb=function(n){return udn(this.a,n)},uZn.Hb=function(){return Hon(this.a)},zW(DZn,"Collections/UnmodifiableSortedSet",704),sDn(858,1,F0n,L),uZn.Ne=function(n,t){var e;return 0!=(e=Q5(uG(n,12),uG(t,12)))?e:hGn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(DZn,"Comparator/lambda$0$Type",858),sDn(769,1,F0n,N),uZn.Ne=function(n,t){return Qq(uG(n,34),uG(t,34))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return sZ(),Zot},zW(DZn,"Comparators/NaturalOrderComparator",769),sDn(1226,1,F0n,$),uZn.Ne=function(n,t){return Wq(uG(n,34),uG(t,34))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return sZ(),Yot},zW(DZn,"Comparators/ReverseNaturalOrderComparator",1226),sDn(52,1,F0n,Zw),uZn.Fb=function(n){return this===n},uZn.Ne=function(n,t){return this.a.Ne(t,n)},uZn.Oe=function(){return this.a},zW(DZn,"Comparators/ReversedComparator",52),sDn(175,63,S1n,Fv),zW(DZn,"ConcurrentModificationException",175),sDn(1948,1,_0n,D),uZn.Pe=function(n){Mmn(this,n)},uZn.Ib=function(){return"DoubleSummaryStatistics[count = "+oV(this.a)+", avg = "+(NP(this.a,0)?c7(this)/W4(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+c7(this)+"]"},uZn.a=0,uZn.b=T0n,uZn.c=M0n,uZn.d=0,uZn.e=0,uZn.f=0,zW(DZn,"DoubleSummaryStatistics",1948),sDn(1868,63,S1n,_v),zW(DZn,"EmptyStackException",1868),sDn(460,2065,xZn,rpn),uZn.zc=function(n,t){return yF(this,n,t)},uZn.$b=function(){AQ(this)},uZn._b=function(n){return DP(this,n)},uZn.uc=function(n){var t,e;for(e=new fS(this.a);e.a<e.c.a.length;)if(t=X5(e),OJ(n,this.b[t.g]))return!0;return!1},uZn.vc=function(){return new nd(this)},uZn.xc=function(n){return AJ(this,n)},uZn.Bc=function(n){return q3(this,n)},uZn.gc=function(){return this.a.c},zW(DZn,"EnumMap",460),sDn(1340,KZn,FZn,nd),uZn.$b=function(){AQ(this.a)},uZn.Hc=function(n){return J4(this,n)},uZn.Kc=function(){return new uX(this.a)},uZn.Mc=function(n){var t;return!!J4(this,n)&&(t=uG(n,44).ld(),q3(this.a,t),!0)},uZn.gc=function(){return this.a.a.c},zW(DZn,"EnumMap/EntrySet",1340),sDn(1341,1,$Zn,uX),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return this.b=X5(this.a),new zP(this.c,this.b)},uZn.Ob=function(){return b$(this.a)},uZn.Qb=function(){TK(!!this.b),q3(this.c,this.b),this.b=null},zW(DZn,"EnumMap/EntrySetIterator",1341),sDn(1342,2082,$0n,zP),uZn.ld=function(){return this.a},uZn.md=function(){return this.b.b[this.a.g]},uZn.nd=function(n){return nq(this.b.b,this.a.g,n)},zW(DZn,"EnumMap/MapEntry",1342),sDn(181,KZn,{20:1,31:1,16:1,181:1,21:1});var iut=zW(DZn,"EnumSet",181);sDn(162,181,{20:1,31:1,16:1,181:1,162:1,21:1},nB),uZn.Fc=function(n){return Mon(this,uG(n,22))},uZn.Hc=function(n){return RX(this,n)},uZn.Kc=function(){return new fS(this)},uZn.Mc=function(n){return KX(this,n)},uZn.gc=function(){return this.c},uZn.c=0,zW(DZn,"EnumSet/EnumSetImpl",162),sDn(356,1,$Zn,fS),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return X5(this)},uZn.Ob=function(){return b$(this)},uZn.Qb=function(){TK(-1!=this.b),uQ(this.c.b,this.b,null),--this.c.c,this.b=-1},uZn.a=-1,uZn.b=-1,zW(DZn,"EnumSet/EnumSetImpl/IteratorImpl",356),sDn(45,497,B0n,Ym,sS,nL),uZn.Be=function(n,t){return xA(n)===xA(t)||null!=n&&udn(n,t)},uZn.Ce=function(n){return null==n?0:0|Hon(n)},zW(DZn,"HashMap",45),sDn(49,KZn,H0n,ek,Dj,oX),uZn.Fc=function(n){return FV(this,n)},uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return cS(this,n)},uZn.dc=function(){return 0==this.a.gc()},uZn.Kc=function(){return this.a.ec().Kc()},uZn.Mc=function(n){return Q$(this,n)},uZn.gc=function(){return this.a.gc()};var rut,cut=zW(DZn,"HashSet",49);sDn(1897,1,JZn,x),uZn.Dd=function(n){msn(this,n)},uZn.Ib=function(){return"IntSummaryStatistics[count = "+oV(this.a)+", avg = "+(NP(this.a,0)?W4(this.d)/W4(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+oV(this.d)+"]"},uZn.a=0,uZn.b=j1n,uZn.c=vZn,uZn.d=0,zW(DZn,"IntSummaryStatistics",1897),sDn(1062,1,t1n,nN),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Hnn(this)},uZn.c=0,zW(DZn,"InternalHashCodeMap",1062),sDn(726,1,$Zn,Hnn),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return this.d=this.a[this.c++],this.d},uZn.Ob=function(){var n;return this.c<this.a.length||!(n=this.b.next()).done&&(this.a=n.value[1],this.c=0,!0)},uZn.Qb=function(){Y$n(this.e,this.d.ld()),0!=this.c&&--this.c},uZn.c=0,uZn.d=null,zW(DZn,"InternalHashCodeMap/1",726),sDn(1060,1,t1n,tN),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new a8(this)},uZn.c=0,uZn.d=0,zW(DZn,"InternalStringMap",1060),sDn(725,1,$Zn,a8),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return this.c=this.a,this.a=this.b.next(),new tB(this.d,this.c,this.d.d)},uZn.Ob=function(){return!this.a.done},uZn.Qb=function(){Vsn(this.d,this.c.value[0])},zW(DZn,"InternalStringMap/1",725),sDn(1061,2082,$0n,tB),uZn.ld=function(){return this.b.value[0]},uZn.md=function(){return this.a.d!=this.c?_P(this.a,this.b.value[0]):this.b.value[1]},uZn.nd=function(n){return kgn(this.a,this.b.value[0],n)},uZn.c=0,zW(DZn,"InternalStringMap/2",1061),sDn(215,45,B0n,u8,Bnn),uZn.$b=function(){vF(this)},uZn._b=function(n){return BP(this,n)},uZn.uc=function(n){var t;for(t=this.d.a;t!=this.d;){if(OJ(t.e,n))return!0;t=t.a}return!1},uZn.vc=function(){return new ad(this)},uZn.xc=function(n){return ain(this,n)},uZn.zc=function(n,t){return Akn(this,n,t)},uZn.Bc=function(n){return pen(this,n)},uZn.gc=function(){return oS(this.e)},uZn.c=!1,zW(DZn,"LinkedHashMap",215),sDn(400,397,{493:1,397:1,400:1,44:1},bR,bG),zW(DZn,"LinkedHashMap/ChainEntry",400),sDn(715,KZn,FZn,ad),uZn.$b=function(){vF(this.a)},uZn.Hc=function(n){return Y4(this,n)},uZn.Kc=function(){return new fQ(this)},uZn.Mc=function(n){var t;return!!Y4(this,n)&&(t=uG(n,44).ld(),pen(this.a,t),!0)},uZn.gc=function(){return oS(this.a.e)},zW(DZn,"LinkedHashMap/EntrySet",715),sDn(716,1,$Zn,fQ),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return Hen(this)},uZn.Ob=function(){return this.c!=this.d.a.d},uZn.Qb=function(){TK(!!this.a),OB(this.d.a.e.g,this.b),cq(this.a),u7(this.d.a.e,this.a.d),this.b=this.d.a.e.g,this.a=null},uZn.b=0,zW(DZn,"LinkedHashMap/EntrySet/EntryIterator",716),sDn(174,49,H0n,XL,dx,aX);var aut=zW(DZn,"LinkedHashSet",174);sDn(67,2062,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1},lS,Y_),uZn.Fc=function(n){return aq(this,n)},uZn.$b=function(){BY(this)},uZn.fd=function(n){return Fkn(this,n)},uZn.gc=function(){return this.b},uZn.b=0;var out,uut,sut,hut,fut,lut=zW(DZn,"LinkedList",67);sDn(981,1,UZn,eB),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){lW(this,n)},uZn.Ob=function(){return Jj(this)},uZn.Sb=function(){return this.b.b!=this.d.a},uZn.Pb=function(){return I6(this)},uZn.Tb=function(){return this.a},uZn.Ub=function(){return F4(this)},uZn.Vb=function(){return this.a-1},uZn.Qb=function(){yrn(this)},uZn.Wb=function(n){TK(!!this.c),this.c.c=n},uZn.a=0,uZn.c=null,zW(DZn,"LinkedList/ListIteratorImpl",981),sDn(617,1,{},R),zW(DZn,"LinkedList/Node",617),sDn(2057,1,{}),zW(DZn,"Locale",2057),sDn(873,2057,{},K),uZn.Ib=function(){return""},zW(DZn,"Locale/1",873),sDn(874,2057,{},F),uZn.Ib=function(){return"unknown"},zW(DZn,"Locale/4",874),sDn(112,63,{3:1,103:1,63:1,82:1,112:1},Bv,EY),zW(DZn,"NoSuchElementException",112),sDn(474,1,{474:1},Xy),uZn.Fb=function(n){var t;return n===this||!!F$(n,474)&&(t=uG(n,474),OJ(this.a,t.a))},uZn.Hb=function(){return VN(this.a)},uZn.Ib=function(){return null!=this.a?CZn+ox(this.a)+")":"Optional.empty()"},zW(DZn,"Optional",474),sDn(414,1,{414:1},uL,wR),uZn.Fb=function(n){var t;return n===this||!!F$(n,414)&&(t=uG(n,414),this.a==t.a&&0==ugn(this.b,t.b))},uZn.Hb=function(){return this.a?t0(this.b):0},uZn.Ib=function(){return this.a?"OptionalDouble.of("+this.b+")":"OptionalDouble.empty()"},uZn.a=!1,uZn.b=0,zW(DZn,"OptionalDouble",414),sDn(524,1,{524:1},sL,dR),uZn.Fb=function(n){var t;return n===this||!!F$(n,524)&&(t=uG(n,524),this.a==t.a&&0==d$(this.b,t.b))},uZn.Hb=function(){return this.a?this.b:0},uZn.Ib=function(){return this.a?"OptionalInt.of("+this.b+")":"OptionalInt.empty()"},uZn.a=!1,uZn.b=0,zW(DZn,"OptionalInt",524),sDn(510,2103,RZn,Kz),uZn.Gc=function(n){return _jn(this,n)},uZn.$b=function(){Xv(this.b.c,0)},uZn.Hc=function(n){return-1!=(null==n?-1:Ten(this.b,n,0))},uZn.Kc=function(){return new Qw(this)},uZn.Mc=function(n){return yon(this,n)},uZn.gc=function(){return this.b.c.length},uZn.Nc=function(){return new h3(this,256)},uZn.Pc=function(){return tq(this.b.c)},uZn.Qc=function(n){return Ekn(this.b,n)},zW(DZn,"PriorityQueue",510),sDn(1296,1,$Zn,Qw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a<this.c.b.c.length},uZn.Pb=function(){return MK(this.a<this.c.b.c.length),this.b=this.a++,zq(this.c.b,this.b)},uZn.Qb=function(){TK(-1!=this.b),Con(this.c,this.a=this.b),this.b=-1},uZn.a=0,uZn.b=-1,zW(DZn,"PriorityQueue/1",1296),sDn(234,1,{234:1},Upn,v8),uZn.a=0,uZn.b=0;var but,wut,dut,gut=0;zW(DZn,"Random",234),sDn(25,1,WZn,h3,LW,MY),uZn.Ad=function(n){return 0!=(this.a&n)},uZn.yd=function(){return this.a},uZn.zd=function(){return zz(this),this.c},uZn.Nb=function(n){zz(this),this.d.Nb(n)},uZn.Bd=function(n){return urn(this,n)},uZn.a=0,uZn.c=0,zW(DZn,"Spliterators/IteratorSpliterator",25),sDn(494,25,WZn,GP),zW(DZn,"SortedSet/1",494),sDn(611,1,_0n,id),uZn.Pe=function(n){this.a.Cd(n)},zW(DZn,"Spliterator/OfDouble/0methodref$accept$Type",611),sDn(612,1,_0n,ed),uZn.Pe=function(n){this.a.Cd(n)},zW(DZn,"Spliterator/OfDouble/1methodref$accept$Type",612),sDn(613,1,JZn,rd),uZn.Dd=function(n){this.a.Cd(xwn(n))},zW(DZn,"Spliterator/OfInt/2methodref$accept$Type",613),sDn(614,1,JZn,cd),uZn.Dd=function(n){this.a.Cd(xwn(n))},zW(DZn,"Spliterator/OfInt/3methodref$accept$Type",614),sDn(625,1,WZn),uZn.Nb=function(n){$j(this,n)},uZn.Ad=function(n){return 0!=(this.d&n)},uZn.yd=function(){return this.d},uZn.zd=function(){return this.e},uZn.d=0,uZn.e=0,zW(DZn,"Spliterators/BaseSpliterator",625),sDn(736,625,WZn),uZn.Qe=function(n){tE(this,n)},uZn.Nb=function(n){F$(n,189)?tE(this,uG(n,189)):tE(this,new ed(n))},uZn.Bd=function(n){return F$(n,189)?this.Re(uG(n,189)):this.Re(new id(n))},zW(DZn,"Spliterators/AbstractDoubleSpliterator",736),sDn(735,625,WZn),uZn.Qe=function(n){tE(this,n)},uZn.Nb=function(n){F$(n,202)?tE(this,uG(n,202)):tE(this,new cd(n))},uZn.Bd=function(n){return F$(n,202)?this.Re(uG(n,202)):this.Re(new rd(n))},zW(DZn,"Spliterators/AbstractIntSpliterator",735),sDn(499,625,WZn),zW(DZn,"Spliterators/AbstractSpliterator",499),sDn(706,1,WZn),uZn.Nb=function(n){$j(this,n)},uZn.Ad=function(n){return 0!=(this.b&n)},uZn.yd=function(){return this.b},uZn.zd=function(){return this.d-this.c},uZn.b=0,uZn.c=0,uZn.d=0,zW(DZn,"Spliterators/BaseArraySpliterator",706),sDn(960,706,WZn,Sq),uZn.Se=function(n,t){bT(this,uG(n,41),t)},uZn.Nb=function(n){hQ(this,n)},uZn.Bd=function(n){return x7(this,n)},zW(DZn,"Spliterators/ArraySpliterator",960),sDn(707,706,WZn,__),uZn.Se=function(n,t){wT(this,uG(n,189),t)},uZn.Qe=function(n){hQ(this,n)},uZn.Nb=function(n){F$(n,189)?hQ(this,uG(n,189)):hQ(this,new ed(n))},uZn.Re=function(n){return x7(this,n)},uZn.Bd=function(n){return F$(n,189)?x7(this,uG(n,189)):x7(this,new id(n))},zW(DZn,"Spliterators/DoubleArraySpliterator",707),sDn(2066,1,WZn),uZn.Nb=function(n){$j(this,n)},uZn.Ad=function(n){return 0!=(16448&n)},uZn.yd=function(){return 16448},uZn.zd=function(){return 0},zW(DZn,"Spliterators/EmptySpliterator",2066),sDn(959,2066,WZn,_),uZn.Qe=function(n){Bl(n)},uZn.Nb=function(n){F$(n,202)?Bl(uG(n,202)):Bl(new cd(n))},uZn.Re=function(n){return HP(n)},uZn.Bd=function(n){return F$(n,202)?HP(uG(n,202)):HP(new rd(n))},zW(DZn,"Spliterators/EmptySpliterator/OfInt",959),sDn(588,56,J0n,ck),uZn.bd=function(n,t){Vz(n,this.a.c.length+1),GX(this.a,n,t)},uZn.Fc=function(n){return kD(this.a,n)},uZn.cd=function(n,t){return Vz(n,this.a.c.length+1),Cbn(this.a,n,t)},uZn.Gc=function(n){return Ohn(this.a,n)},uZn.$b=function(){Xv(this.a.c,0)},uZn.Hc=function(n){return-1!=Ten(this.a,n,0)},uZn.Ic=function(n){return yhn(this.a,n)},uZn.Jc=function(n){Prn(this.a,n)},uZn.Xb=function(n){return Vz(n,this.a.c.length),zq(this.a,n)},uZn.dd=function(n){return Ten(this.a,n,0)},uZn.dc=function(){return 0==this.a.c.length},uZn.Kc=function(){return new Ww(this.a)},uZn.gd=function(n){return Vz(n,this.a.c.length),i7(this.a,n)},uZn.ce=function(n,t){P2(this.a,n,t)},uZn.hd=function(n,t){return Vz(n,this.a.c.length),Y8(this.a,n,t)},uZn.gc=function(){return this.a.c.length},uZn.jd=function(n){f$(this.a,n)},uZn.kd=function(n,t){return new C2(this.a,n,t)},uZn.Pc=function(){return tq(this.a.c)},uZn.Qc=function(n){return Ekn(this.a,n)},uZn.Ib=function(){return vIn(this.a)},zW(DZn,"Vector",588),sDn(824,588,J0n,Ok),zW(DZn,"Stack",824),sDn(213,1,{213:1},Ysn),uZn.Ib=function(){return R4(this)},zW(DZn,"StringJoiner",213),sDn(553,2090,{3:1,85:1,139:1,133:1},hS,Hz),uZn.$b=function(){Jy(this)},uZn.De=function(){return new i6(this)},uZn.vc=function(){return new kx(this)},uZn.Ee=function(n){return Zmn(this,n,!0)},uZn.Fe=function(n){return mln(this,n)},uZn.Ge=function(){return Ytn(this)},uZn.He=function(n){return nvn(this,n,!0)},uZn.Ie=function(n){return Zmn(this,n,!1)},uZn.Je=function(){return Ztn(this)},uZn.Ke=function(n){return nvn(this,n,!1)},uZn.Zc=function(n,t){return N2(this,n,t)},uZn.zc=function(n,t){return xfn(this,n,t)},uZn.Bc=function(n){return V1(this,n)},uZn.Le=function(n){return Lnn(this,n)},uZn.gc=function(){return this.c},uZn.ad=function(n,t){return $2(this,n,t)},uZn.c=0,zW(DZn,"TreeMap",553),sDn(554,1,$Zn,i6,dun),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return kR(this)},uZn.Ob=function(){return AP(this.a)},uZn.Qb=function(){rB(this)},zW(DZn,"TreeMap/EntryIterator",554),sDn(1142,629,FZn,kx),uZn.$b=function(){Jy(this.a)},zW(DZn,"TreeMap/EntrySet",1142),sDn(447,397,{493:1,397:1,44:1,447:1},_nn),uZn.b=!1;var put,mut,vut,kut,yut=zW(DZn,"TreeMap/Node",447);sDn(630,1,{},B),uZn.Ib=function(){return"State: mv="+this.c+" value="+this.d+" done="+this.a+" found="+this.b},uZn.a=!1,uZn.b=!1,uZn.c=!1,zW(DZn,"TreeMap/State",630),sDn(631,2090,_Zn,AOn),uZn.De=function(){return new dun(this.c,this.f,this.b,this.a,this.e,this.d)},uZn.vc=function(){return new Uw(this)},uZn.Ee=function(n){return SG(this,Zmn(this.c,n,!0))},uZn.Fe=function(n){return SG(this,mln(this.c,n))},uZn.Ge=function(){var n;return(n=this.f.Te()?this.a?Zmn(this.c,this.b,!0):Zmn(this.c,this.b,!1):Ytn(this.c))&&$Q(this,n.d)?n:null},uZn.He=function(n){return SG(this,nvn(this.c,n,!0))},uZn.Ie=function(n){return SG(this,Zmn(this.c,n,!1))},uZn.Je=function(){var n;return(n=this.f.Ue()?this.d?nvn(this.c,this.e,!0):nvn(this.c,this.e,!1):Ztn(this.c))&&$Q(this,n.d)?n:null},uZn.Ke=function(n){return SG(this,nvn(this.c,n,!1))},uZn.Zc=function(n,t){if(this.f.Ue()&&this.c.a.Ne(n,this.e)>0)throw hv(new vM(Y0n+n+" greater than "+this.e));return this.f.Te()?G1(this.c,this.b,this.a,n,t):N2(this.c,n,t)},uZn.zc=function(n,t){if(!ljn(this.c,this.f,n,this.b,this.a,this.e,this.d))throw hv(new vM(n+" outside the range "+this.b+" to "+this.e));return xfn(this.c,n,t)},uZn.Bc=function(n){var t;return t=n,ljn(this.c,this.f,t,this.b,this.a,this.e,this.d)?V1(this.c,t):null},uZn.Le=function(n){return $Q(this,n.ld())&&Lnn(this.c,n)},uZn.gc=function(){var n,t,e;if(!((t=this.f.Te()?this.a?Zmn(this.c,this.b,!0):Zmn(this.c,this.b,!1):Ytn(this.c))&&$Q(this,t.d)&&t))return 0;for(n=0,e=new dun(this.c,this.f,this.b,this.a,this.e,this.d);AP(e.a);e.b=uG(_Y(e.a),44))++n;return n},uZn.ad=function(n,t){if(this.f.Te()&&this.c.a.Ne(n,this.b)<0)throw hv(new vM(Y0n+n+Z0n+this.b));return this.f.Ue()?G1(this.c,n,t,this.e,this.d):$2(this.c,n,t)},uZn.a=!1,uZn.d=!1,zW(DZn,"TreeMap/SubMap",631),sDn(303,22,n2n,qP),uZn.Te=function(){return!1},uZn.Ue=function(){return!1};var Mut,Tut=_cn(DZn,"TreeMap/SubMapType",303,Oat,K6,hB);sDn(1143,303,n2n,SN),uZn.Ue=function(){return!0},_cn(DZn,"TreeMap/SubMapType/1",1143,Tut,null,null),sDn(1144,303,n2n,P$),uZn.Te=function(){return!0},uZn.Ue=function(){return!0},_cn(DZn,"TreeMap/SubMapType/2",1144,Tut,null,null),sDn(1145,303,n2n,EN),uZn.Te=function(){return!0},_cn(DZn,"TreeMap/SubMapType/3",1145,Tut,null,null),sDn(157,KZn,{3:1,20:1,31:1,16:1,277:1,21:1,87:1,157:1},rk,Hj,od),uZn.Nc=function(){return new GP(this)},uZn.Fc=function(n){return _V(this,n)},uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a._b(n)},uZn.Kc=function(){return this.a.ec().Kc()},uZn.Mc=function(n){return sD(this,n)},uZn.gc=function(){return this.a.gc()};var jut=zW(DZn,"TreeSet",157);sDn(1082,1,{},ud),uZn.Ve=function(n,t){return _K(this.a,n,t)},zW(t2n,"BinaryOperator/lambda$0$Type",1082),sDn(1083,1,{},sd),uZn.Ve=function(n,t){return BK(this.a,n,t)},zW(t2n,"BinaryOperator/lambda$1$Type",1083),sDn(952,1,{},H),uZn.Kb=function(n){return n},zW(t2n,"Function/lambda$0$Type",952),sDn(395,1,y1n,hd),uZn.Mb=function(n){return!this.a.Mb(n)},zW(t2n,"Predicate/lambda$2$Type",395),sDn(581,1,{581:1});var Eut,Sut,Put=zW(e2n,"Handler",581);sDn(2107,1,yZn),uZn.xe=function(){return"DUMMY"},uZn.Ib=function(){return this.xe()},zW(e2n,"Level",2107),sDn(1706,2107,yZn,U),uZn.xe=function(){return"INFO"},zW(e2n,"Level/LevelInfo",1706),sDn(1843,1,{},ik),zW(e2n,"LogManager",1843),sDn(1896,1,yZn,iB),uZn.b=null,zW(e2n,"LogRecord",1896),sDn(525,1,{525:1},e9),uZn.e=!1;var Cut,Iut,Out,Aut=!1,Lut=!1,Nut=!1,$ut=!1,Dut=!1;zW(e2n,"Logger",525),sDn(835,581,{581:1},G),zW(e2n,"SimpleConsoleLogHandler",835),sDn(108,22,{3:1,34:1,22:1,108:1},XP);var xut,Rut=_cn(c2n,"Collector/Characteristics",108,Oat,D2,fB);sDn(758,1,{},WV),zW(c2n,"CollectorImpl",758),sDn(1074,1,{},q),uZn.Ve=function(n,t){return idn(uG(n,213),uG(t,213))},zW(c2n,"Collectors/10methodref$merge$Type",1074),sDn(1075,1,{},X),uZn.Kb=function(n){return R4(uG(n,213))},zW(c2n,"Collectors/11methodref$toString$Type",1075),sDn(1076,1,{},fd),uZn.Kb=function(n){return qx(),!!IL(n)},zW(c2n,"Collectors/12methodref$test$Type",1076),sDn(144,1,{},z),uZn.Yd=function(n,t){uG(n,16).Fc(t)},zW(c2n,"Collectors/20methodref$add$Type",144),sDn(146,1,{},V),uZn.Xe=function(){return new Zm},zW(c2n,"Collectors/21methodref$ctor$Type",146),sDn(359,1,{},W),uZn.Xe=function(){return new ek},zW(c2n,"Collectors/23methodref$ctor$Type",359),sDn(360,1,{},Q),uZn.Yd=function(n,t){FV(uG(n,49),t)},zW(c2n,"Collectors/24methodref$add$Type",360),sDn(1069,1,{},J),uZn.Ve=function(n,t){return IS(uG(n,15),uG(t,16))},zW(c2n,"Collectors/4methodref$addAll$Type",1069),sDn(1073,1,{},Y),uZn.Yd=function(n,t){o7(uG(n,213),uG(t,483))},zW(c2n,"Collectors/9methodref$add$Type",1073),sDn(1072,1,{},fG),uZn.Xe=function(){return new Ysn(this.a,this.b,this.c)},zW(c2n,"Collectors/lambda$15$Type",1072),sDn(1077,1,{},Z),uZn.Xe=function(){var n;return Akn(n=new u8,(qx(),!1),new Zm),Akn(n,!0,new Zm),n},zW(c2n,"Collectors/lambda$22$Type",1077),sDn(1078,1,{},ld),uZn.Xe=function(){return Uhn(cT(dat,1),EZn,1,5,[this.a])},zW(c2n,"Collectors/lambda$25$Type",1078),sDn(1079,1,{},bd),uZn.Yd=function(n,t){Yq(this.a,Kcn(n))},zW(c2n,"Collectors/lambda$26$Type",1079),sDn(1080,1,{},wd),uZn.Ve=function(n,t){return sV(this.a,Kcn(n),Kcn(t))},zW(c2n,"Collectors/lambda$27$Type",1080),sDn(1081,1,{},nn),uZn.Kb=function(n){return Kcn(n)[0]},zW(c2n,"Collectors/lambda$28$Type",1081),sDn(728,1,{},tn),uZn.Ve=function(n,t){return nX(n,t)},zW(c2n,"Collectors/lambda$4$Type",728),sDn(145,1,{},en),uZn.Ve=function(n,t){return ES(uG(n,16),uG(t,16))},zW(c2n,"Collectors/lambda$42$Type",145),sDn(361,1,{},rn),uZn.Ve=function(n,t){return SS(uG(n,49),uG(t,49))},zW(c2n,"Collectors/lambda$50$Type",361),sDn(362,1,{},cn),uZn.Kb=function(n){return uG(n,49)},zW(c2n,"Collectors/lambda$51$Type",362),sDn(1068,1,{},dd),uZn.Yd=function(n,t){vln(this.a,uG(n,85),t)},zW(c2n,"Collectors/lambda$7$Type",1068),sDn(1070,1,{},an),uZn.Ve=function(n,t){return Ahn(uG(n,85),uG(t,85),new J)},zW(c2n,"Collectors/lambda$8$Type",1070),sDn(1071,1,{},gd),uZn.Kb=function(n){return zgn(this.a,uG(n,85))},zW(c2n,"Collectors/lambda$9$Type",1071),sDn(550,1,{}),uZn.$e=function(){qQ(this)},uZn.d=!1,zW(c2n,"TerminatableStream",550),sDn(827,550,a2n,IK),uZn.$e=function(){qQ(this)},zW(c2n,"DoubleStreamImpl",827),sDn(1847,736,WZn,lG),uZn.Re=function(n){return FMn(this,uG(n,189))},uZn.a=null,zW(c2n,"DoubleStreamImpl/2",1847),sDn(1848,1,_0n,pd),uZn.Pe=function(n){$N(this.a,n)},zW(c2n,"DoubleStreamImpl/2/lambda$0$Type",1848),sDn(1845,1,_0n,md),uZn.Pe=function(n){NN(this.a,n)},zW(c2n,"DoubleStreamImpl/lambda$0$Type",1845),sDn(1846,1,_0n,vd),uZn.Pe=function(n){Mmn(this.a,n)},zW(c2n,"DoubleStreamImpl/lambda$2$Type",1846),sDn(1397,735,WZn,i9),uZn.Re=function(n){return e6(this,uG(n,202))},uZn.a=0,uZn.b=0,uZn.c=0,zW(c2n,"IntStream/5",1397),sDn(806,550,a2n,OK),uZn.$e=function(){qQ(this)},uZn._e=function(){return GQ(this),this.a},zW(c2n,"IntStreamImpl",806),sDn(807,550,a2n,mS),uZn.$e=function(){qQ(this)},uZn._e=function(){return GQ(this),BD(),dut},zW(c2n,"IntStreamImpl/Empty",807),sDn(1687,1,JZn,kd),uZn.Dd=function(n){msn(this.a,n)},zW(c2n,"IntStreamImpl/lambda$4$Type",1687);var Kut,Fut=Iq(c2n,"Stream");sDn(26,550,{533:1,687:1,848:1},fX),uZn.$e=function(){qQ(this)},zW(c2n,"StreamImpl",26),sDn(1102,499,WZn,D_),uZn.Bd=function(n){for(;Ttn(this);){if(this.a.Bd(n))return!0;qQ(this.b),this.b=null,this.a=null}return!1},zW(c2n,"StreamImpl/1",1102),sDn(1103,1,QZn,yd),uZn.Cd=function(n){mG(this.a,uG(n,848))},zW(c2n,"StreamImpl/1/lambda$0$Type",1103),sDn(1104,1,y1n,Md),uZn.Mb=function(n){return FV(this.a,n)},zW(c2n,"StreamImpl/1methodref$add$Type",1104),sDn(1105,499,WZn,QY),uZn.Bd=function(n){var t;return this.a||(t=new Zm,this.b.a.Nb(new Td(t)),hZ(),f$(t,this.c),this.a=new h3(t,16)),urn(this.a,n)},uZn.a=null,zW(c2n,"StreamImpl/5",1105),sDn(1106,1,QZn,Td),uZn.Cd=function(n){kD(this.a,n)},zW(c2n,"StreamImpl/5/2methodref$add$Type",1106),sDn(737,499,WZn,ien),uZn.Bd=function(n){for(this.b=!1;!this.b&&this.c.Bd(new WP(this,n)););return this.b},uZn.b=!1,zW(c2n,"StreamImpl/FilterSpliterator",737),sDn(1096,1,QZn,WP),uZn.Cd=function(n){Xz(this.a,this.b,n)},zW(c2n,"StreamImpl/FilterSpliterator/lambda$0$Type",1096),sDn(1091,736,WZn,s7),uZn.Re=function(n){return v_(this,uG(n,189))},zW(c2n,"StreamImpl/MapToDoubleSpliterator",1091),sDn(1095,1,QZn,QP),uZn.Cd=function(n){vC(this.a,this.b,n)},zW(c2n,"StreamImpl/MapToDoubleSpliterator/lambda$0$Type",1095),sDn(1090,735,WZn,h7),uZn.Re=function(n){return k_(this,uG(n,202))},zW(c2n,"StreamImpl/MapToIntSpliterator",1090),sDn(1094,1,QZn,JP),uZn.Cd=function(n){kC(this.a,this.b,n)},zW(c2n,"StreamImpl/MapToIntSpliterator/lambda$0$Type",1094),sDn(734,499,WZn,f7),uZn.Bd=function(n){return y_(this,n)},zW(c2n,"StreamImpl/MapToObjSpliterator",734),sDn(1093,1,QZn,YP),uZn.Cd=function(n){yC(this.a,this.b,n)},zW(c2n,"StreamImpl/MapToObjSpliterator/lambda$0$Type",1093),sDn(1092,499,WZn,Fan),uZn.Bd=function(n){for(;NP(this.b,0);){if(!this.a.Bd(new on))return!1;this.b=$gn(this.b,1)}return this.a.Bd(n)},uZn.b=0,zW(c2n,"StreamImpl/SkipSpliterator",1092),sDn(1097,1,QZn,on),uZn.Cd=function(n){},zW(c2n,"StreamImpl/SkipSpliterator/lambda$0$Type",1097),sDn(626,1,QZn,un),uZn.Cd=function(n){Ob(this,n)},zW(c2n,"StreamImpl/ValueConsumer",626),sDn(1098,1,QZn,sn),uZn.Cd=function(n){vS()},zW(c2n,"StreamImpl/lambda$0$Type",1098),sDn(1099,1,QZn,hn),uZn.Cd=function(n){vS()},zW(c2n,"StreamImpl/lambda$1$Type",1099),sDn(1100,1,{},jd),uZn.Ve=function(n,t){return FB(this.a,n,t)},zW(c2n,"StreamImpl/lambda$4$Type",1100),sDn(1101,1,QZn,nC),uZn.Cd=function(n){kF(this.b,this.a,n)},zW(c2n,"StreamImpl/lambda$5$Type",1101),sDn(1107,1,QZn,Ed),uZn.Cd=function(n){Usn(this.a,uG(n,380))},zW(c2n,"TerminatableStream/lambda$0$Type",1107),sDn(2142,1,{}),sDn(2014,1,{},fn),zW("javaemul.internal","ConsoleLogger",2014);var _ut=0;sDn(2134,1,{}),sDn(1830,1,QZn,ln),uZn.Cd=function(n){uG(n,317)},zW(l2n,"BowyerWatsonTriangulation/lambda$0$Type",1830),sDn(1831,1,QZn,Pd),uZn.Cd=function(n){Qon(this.a,uG(n,317).e)},zW(l2n,"BowyerWatsonTriangulation/lambda$1$Type",1831),sDn(1832,1,QZn,bn),uZn.Cd=function(n){uG(n,177)},zW(l2n,"BowyerWatsonTriangulation/lambda$2$Type",1832),sDn(1827,1,b2n,Cd),uZn.Ne=function(n,t){return S5(this.a,uG(n,177),uG(t,177))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(l2n,"NaiveMinST/lambda$0$Type",1827),sDn(506,1,{},Sd),zW(l2n,"NodeMicroLayout",506),sDn(177,1,{177:1},ZP),uZn.Fb=function(n){var t;return!!F$(n,177)&&(t=uG(n,177),OJ(this.a,t.a)&&OJ(this.b,t.b)||OJ(this.a,t.b)&&OJ(this.b,t.a))},uZn.Hb=function(){return VN(this.a)+VN(this.b)};var But=zW(l2n,"TEdge",177);sDn(317,1,{317:1},gqn),uZn.Fb=function(n){var t;return!!F$(n,317)&&Den(this,(t=uG(n,317)).a)&&Den(this,t.b)&&Den(this,t.c)},uZn.Hb=function(){return VN(this.a)+VN(this.b)+VN(this.c)},zW(l2n,"TTriangle",317),sDn(225,1,{225:1},C$),zW(l2n,"Tree",225),sDn(1218,1,{},q0),zW(w2n,"Scanline",1218);var Hut=Iq(w2n,d2n);sDn(1758,1,{},Qin),zW(g2n,"CGraph",1758),sDn(316,1,{316:1},V0),uZn.b=0,uZn.c=0,uZn.d=0,uZn.g=0,uZn.i=0,uZn.k=T0n,zW(g2n,"CGroup",316),sDn(830,1,{},fk),zW(g2n,"CGroup/CGroupBuilder",830),sDn(60,1,{60:1},NF),uZn.Ib=function(){return this.j?mK(this.j.Kb(this)):(vK(zut),zut.o+"@"+(xx(this)>>>0).toString(16))},uZn.f=0,uZn.i=T0n;var Uut,Gut,qut,Xut,zut=zW(g2n,"CNode",60);sDn(829,1,{},lk),zW(g2n,"CNode/CNodeBuilder",829),sDn(1590,1,{},wn),uZn.ff=function(n,t){return 0},uZn.gf=function(n,t){return 0},zW(g2n,m2n,1590),sDn(1853,1,{},dn),uZn.cf=function(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(h=M0n,r=new Ww(n.a.b);r.a<r.c.c.length;)t=uG(N3(r),60),h=e.Math.min(h,t.a.j.d.c+t.b.a);for(w=new lS,o=new Ww(n.a.a);o.a<o.c.c.length;)(a=uG(N3(o),316)).k=h,0==a.g&&s8(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=uG(0==w.b?null:(MK(0!=w.b),Lrn(w,w.a.a)),316)).j.d.c,b=a.a.a.ec().Kc();b.Ob();)f=uG(b.Pb(),60),g=a.k+f.b.a,!lwn(n,a,n.d)||f.d.c<g?f.i=g:f.i=f.d.c;for(c-=a.j.i,a.b+=c,n.d==(xdn(),YDt)||n.d==QDt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=uG(l.Pb(),60)).c.Kc();s.Ob();)u=uG(s.Pb(),60),d=hN(n.d)?n.g.ff(f,u):n.g.gf(f,u),u.a.k=e.Math.max(u.a.k,f.i+f.d.b+d-u.b.a),NZ(n,u,n.d)&&(u.a.k=e.Math.max(u.a.k,u.d.c-u.b.a)),--u.a.g,0==u.a.g&&aq(w,u.a)}for(i=new Ww(n.a.b);i.a<i.c.c.length;)(t=uG(N3(i),60)).d.c=t.i},zW(g2n,"LongestPathCompaction",1853),sDn(1756,1,{},w$n),uZn.e=!1;var Vut,Wut,Qut=zW(g2n,T2n,1756);sDn(1757,1,QZn,Id),uZn.Cd=function(n){Khn(this.a,uG(n,42))},zW(g2n,j2n,1757),sDn(1854,1,{},gn),uZn.df=function(n){var t,e,i,r,c,a;for(t=new Ww(n.a.b);t.a<t.c.c.length;)uG(N3(t),60).c.$b();for(i=new Ww(n.a.b);i.a<i.c.c.length;)for(e=uG(N3(i),60),c=new Ww(n.a.b);c.a<c.c.c.length;)e!=(r=uG(N3(c),60))&&(e.a&&e.a==r.a||(a=hN(n.d)?n.g.gf(e,r):n.g.ff(e,r),(r.d.c>e.d.c||e.d.c==r.d.c&&e.d.b<r.d.b)&&uvn(r.d.d+r.d.a+a,e.d.d)&&svn(r.d.d,e.d.d+e.d.a+a)&&e.c.Fc(r)))},zW(g2n,"QuadraticConstraintCalculation",1854),sDn(529,1,{529:1},nv),uZn.a=!1,uZn.b=!1,uZn.c=!1,uZn.d=!1,zW(g2n,E2n,529),sDn(817,1,{},tz),uZn.df=function(n){this.c=n,QAn(this,new vn)},zW(g2n,S2n,817),sDn(1784,1,{693:1},KZ),uZn.bf=function(n){SAn(this,uG(n,472))},zW(g2n,P2n,1784),sDn(1785,1,b2n,pn),uZn.Ne=function(n,t){return eY(uG(n,60),uG(t,60))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(g2n,C2n,1785),sDn(472,1,{472:1},tC),uZn.a=!1,zW(g2n,I2n,472),sDn(1786,1,b2n,mn),uZn.Ne=function(n,t){return xEn(uG(n,472),uG(t,472))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(g2n,O2n,1786),sDn(1787,1,A2n,vn),uZn.Lb=function(n){return uG(n,60),!0},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return uG(n,60),!0},zW(g2n,"ScanlineConstraintCalculator/lambda$1$Type",1787),sDn(436,22,{3:1,34:1,22:1,436:1},eC);var Jut,Yut,Zut,nst=_cn(L2n,"HighLevelSortingCriterion",436,Oat,u1,lB);sDn(435,22,{3:1,34:1,22:1,435:1},iC);var tst,est,ist,rst,cst,ast,ost,ust,sst,hst,fst,lst,bst,wst,dst,gst,pst,mst=_cn(L2n,"LowLevelSortingCriterion",435,Oat,s1,bB),vst=Iq(N2n,"ILayoutMetaDataProvider");sDn(864,1,K2n,Bf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,$2n),F2n),"Polyomino Traversal Strategy"),"Traversal strategy for trying different candidate positions for polyominoes."),ust),(lAn(),gNt)),yst),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D2n),F2n),"Polyomino Secondary Sorting Criterion"),"Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion."),ast),gNt),mst),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x2n),F2n),"Polyomino Primary Sorting Criterion"),"Possible primary sorting criteria for the processing order of polyominoes."),rst),gNt),nst),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,R2n),F2n),"Fill Polyominoes"),"Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area."),(qx(),!0)),wNt),cot),ggn(hNt))))},zW(L2n,"PolyominoOptions",864),sDn(257,22,{3:1,34:1,22:1,257:1},rC);var kst,yst=_cn(L2n,"TraversalStrategy",257,Oat,nan,wB);sDn(218,1,{218:1},kn),uZn.Ib=function(){return"NEdge[id="+this.b+" w="+this.g+" d="+this.a+"]"},uZn.a=1,uZn.b=0,uZn.c=0,uZn.f=!1,uZn.g=0;var Mst=zW(_2n,"NEdge",218);sDn(182,1,{},uk),zW(_2n,"NEdge/NEdgeBuilder",182),sDn(662,1,{},ak),zW(_2n,"NGraph",662),sDn(125,1,{125:1},g7),uZn.c=-1,uZn.d=0,uZn.e=0,uZn.i=-1,uZn.j=!1;var Tst=zW(_2n,"NNode",125);sDn(808,1,K0n,ok),uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.bd=function(n,t){++this.b,GX(this.a,n,t)},uZn.Fc=function(n){return Sx(this,n)},uZn.cd=function(n,t){return++this.b,Cbn(this.a,n,t)},uZn.Gc=function(n){return++this.b,Ohn(this.a,n)},uZn.$b=function(){++this.b,Xv(this.a.c,0)},uZn.Hc=function(n){return-1!=Ten(this.a,n,0)},uZn.Ic=function(n){return yhn(this.a,n)},uZn.Xb=function(n){return zq(this.a,n)},uZn.dd=function(n){return Ten(this.a,n,0)},uZn.dc=function(){return 0==this.a.c.length},uZn.Kc=function(){return jtn(new Ww(this.a))},uZn.ed=function(){throw hv(new Kv)},uZn.fd=function(n){throw hv(new Kv)},uZn.gd=function(n){return++this.b,i7(this.a,n)},uZn.Mc=function(n){return Px(this,n)},uZn.hd=function(n,t){return++this.b,Y8(this.a,n,t)},uZn.gc=function(){return this.a.c.length},uZn.kd=function(n,t){return new C2(this.a,n,t)},uZn.Pc=function(){return tq(this.a.c)},uZn.Qc=function(n){return Ekn(this.a,n)},uZn.b=0,zW(_2n,"NNode/ChangeAwareArrayList",808),sDn(275,1,{},sk),zW(_2n,"NNode/NNodeBuilder",275),sDn(1695,1,{},yn),uZn.a=!1,uZn.f=vZn,uZn.j=0,zW(_2n,"NetworkSimplex",1695),sDn(1314,1,QZn,Od),uZn.Cd=function(n){uQn(this.a,uG(n,695),!0,!1)},zW(H2n,"NodeLabelAndSizeCalculator/lambda$0$Type",1314),sDn(565,1,{},Ad),uZn.b=!0,uZn.c=!0,uZn.d=!0,uZn.e=!0,zW(H2n,"NodeMarginCalculator",565),sDn(217,1,{217:1}),uZn.j=!1,uZn.k=!1;var jst,Est,Sst,Pst=zW(U2n,"Cell",217);sDn(127,217,{127:1,217:1},AF),uZn.jf=function(){return eq(this)},uZn.kf=function(){var n;return n=this.n,this.a.a+n.b+n.c},zW(U2n,"AtomicCell",127),sDn(237,22,{3:1,34:1,22:1,237:1},cC);var Cst,Ist=_cn(U2n,"ContainerArea",237,Oat,K2,dB);sDn(336,217,q2n),zW(U2n,"ContainerCell",336),sDn(1538,336,q2n,umn),uZn.jf=function(){var n;return n=0,this.e?this.b?n=this.b.b:this.a[1][1]&&(n=this.a[1][1].jf()):n=ypn(this,ATn(this,!0)),n>0?n+this.n.d+this.n.a:0},uZn.kf=function(){var n,t,i,r,c;if(c=0,this.e)this.b?c=this.b.a:this.a[1][1]&&(c=this.a[1][1].kf());else if(this.g)c=ypn(this,wEn(this,null,!0));else for(Yrn(),i=0,r=(t=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;i<r;++i)n=t[i],c=e.Math.max(c,ypn(this,wEn(this,n,!0)));return c>0?c+this.n.b+this.n.c:0},uZn.lf=function(){var n,t,e,i,r;if(this.g)for(n=wEn(this,null,!1),Yrn(),i=0,r=(e=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;i<r;++i)_Fn(this,t=e[i],n);else for(Yrn(),i=0,r=(e=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;i<r;++i)_Fn(this,t=e[i],n=wEn(this,t,!1))},uZn.mf=function(){var n,t,i,r;t=this.i,n=this.n,r=ATn(this,!1),J9(this,(Yrn(),jst),t.d+n.d,r),J9(this,Sst,t.d+t.a-n.a-r[2],r),i=t.a-n.d-n.a,r[0]>0&&(r[0]+=this.d,i-=r[0]),r[2]>0&&(r[2]+=this.d,i-=r[2]),this.c.a=e.Math.max(0,i),this.c.d=t.d+n.d+(this.c.a-i)/2,r[1]=e.Math.max(r[1],i),J9(this,Est,t.d+n.d+r[0]-(r[1]-i)/2,r)},uZn.b=null,uZn.d=0,uZn.e=!1,uZn.f=!1,uZn.g=!1;var Ost,Ast,Lst,Nst=0,$st=0;zW(U2n,"GridContainerCell",1538),sDn(470,22,{3:1,34:1,22:1,470:1},aC);var Dst,xst=_cn(U2n,"HorizontalLabelAlignment",470,Oat,R2,gB);sDn(314,217,{217:1,314:1},a0,Yin,c1),uZn.jf=function(){return iq(this)},uZn.kf=function(){return rq(this)},uZn.a=0,uZn.c=!1;var Rst,Kst,Fst,_st=zW(U2n,"LabelCell",314);sDn(252,336,{217:1,336:1,252:1},tkn),uZn.jf=function(){return dNn(this)},uZn.kf=function(){return gNn(this)},uZn.lf=function(){YGn(this)},uZn.mf=function(){rqn(this)},uZn.b=0,uZn.c=0,uZn.d=!1,zW(U2n,"StripContainerCell",252),sDn(1691,1,y1n,Mn),uZn.Mb=function(n){return $M(uG(n,217))},zW(U2n,"StripContainerCell/lambda$0$Type",1691),sDn(1692,1,{},Tn),uZn.Ye=function(n){return uG(n,217).kf()},zW(U2n,"StripContainerCell/lambda$1$Type",1692),sDn(1693,1,y1n,jn),uZn.Mb=function(n){return DM(uG(n,217))},zW(U2n,"StripContainerCell/lambda$2$Type",1693),sDn(1694,1,{},En),uZn.Ye=function(n){return uG(n,217).jf()},zW(U2n,"StripContainerCell/lambda$3$Type",1694),sDn(471,22,{3:1,34:1,22:1,471:1},oC);var Bst,Hst,Ust,Gst,qst,Xst,zst,Vst,Wst,Qst,Jst,Yst,Zst,nht,tht,eht,iht,rht,cht,aht,oht,uht,sht,hht=_cn(U2n,"VerticalLabelAlignment",471,Oat,x2,pB);sDn(800,1,{},kQn),uZn.c=0,uZn.d=0,uZn.k=0,uZn.s=0,uZn.t=0,uZn.v=!1,uZn.w=0,uZn.D=!1,zW(J2n,"NodeContext",800),sDn(1536,1,b2n,Sn),uZn.Ne=function(n,t){return UL(uG(n,64),uG(t,64))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(J2n,"NodeContext/0methodref$comparePortSides$Type",1536),sDn(1537,1,b2n,Pn),uZn.Ne=function(n,t){return ACn(uG(n,117),uG(t,117))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(J2n,"NodeContext/1methodref$comparePortContexts$Type",1537),sDn(164,22,{3:1,34:1,22:1,164:1},pun);var fht,lht,bht,wht,dht,ght,pht,mht=_cn(J2n,"NodeLabelLocation",164,Oat,Nkn,mB);sDn(117,1,{117:1},v$n),uZn.a=!1,zW(J2n,"PortContext",117),sDn(1541,1,QZn,Cn),uZn.Cd=function(n){eE(uG(n,314))},zW(n3n,t3n,1541),sDn(1542,1,y1n,In),uZn.Mb=function(n){return!!uG(n,117).c},zW(n3n,e3n,1542),sDn(1543,1,QZn,On),uZn.Cd=function(n){eE(uG(n,117).c)},zW(n3n,"LabelPlacer/lambda$2$Type",1543),sDn(1540,1,QZn,An),uZn.Cd=function(n){VK(),wv(uG(n,117))},zW(n3n,"NodeLabelAndSizeUtilities/lambda$0$Type",1540),sDn(801,1,QZn,DB),uZn.Cd=function(n){aP(this.b,this.c,this.a,uG(n,187))},uZn.a=!1,uZn.c=!1,zW(n3n,"NodeLabelCellCreator/lambda$0$Type",801),sDn(1539,1,QZn,Ld),uZn.Cd=function(n){Vv(this.a,uG(n,187))},zW(n3n,"PortContextCreator/lambda$0$Type",1539),sDn(1902,1,{},Ln),zW(r3n,"GreedyRectangleStripOverlapRemover",1902),sDn(1903,1,b2n,Nn),uZn.Ne=function(n,t){return Cx(uG(n,226),uG(t,226))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(r3n,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1903),sDn(1849,1,{},pk),uZn.a=5,uZn.e=0,zW(r3n,"RectangleStripOverlapRemover",1849),sDn(1850,1,b2n,$n),uZn.Ne=function(n,t){return Ix(uG(n,226),uG(t,226))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(r3n,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1850),sDn(1852,1,b2n,Dn),uZn.Ne=function(n,t){return fW(uG(n,226),uG(t,226))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(r3n,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1852),sDn(417,22,{3:1,34:1,22:1,417:1},uC);var vht,kht,yht,Mht,Tht,jht=_cn(r3n,"RectangleStripOverlapRemover/OverlapRemovalDirection",417,Oat,B6,vB);sDn(226,1,{226:1},ZX),zW(r3n,"RectangleStripOverlapRemover/RectangleNode",226),sDn(1851,1,QZn,Nd),uZn.Cd=function(n){lTn(this.a,uG(n,226))},zW(r3n,"RectangleStripOverlapRemover/lambda$1$Type",1851),sDn(1323,1,b2n,xn),uZn.Ne=function(n,t){return fzn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1323),sDn(1326,1,{},Rn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1326),sDn(1327,1,y1n,Kn),uZn.Mb=function(n){return uG(n,332).a},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1327),sDn(1328,1,y1n,Fn),uZn.Mb=function(n){return uG(n,332).a},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1328),sDn(1321,1,b2n,_n),uZn.Ne=function(n,t){return JBn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1321),sDn(1324,1,{},Bn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1324),sDn(781,1,b2n,Hn),uZn.Ne=function(n,t){return lhn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinNumOfExtensionsComparator",781),sDn(1319,1,b2n,Un),uZn.Ne=function(n,t){return ron(uG(n,330),uG(t,330))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinPerimeterComparator",1319),sDn(1320,1,b2n,Gn),uZn.Ne=function(n,t){return Byn(uG(n,330),uG(t,330))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinPerimeterComparatorWithShape",1320),sDn(1322,1,b2n,qn),uZn.Ne=function(n,t){return zHn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1322),sDn(1325,1,{},Xn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1325),sDn(782,1,{},sC),uZn.Ve=function(n,t){return d6(this,uG(n,42),uG(t,176))},zW(a3n,"SuccessorCombination",782),sDn(649,1,{},zn),uZn.Ve=function(n,t){var e;return KNn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorJitter",649),sDn(648,1,{},Vn),uZn.Ve=function(n,t){var e;return cFn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorLineByLine",648),sDn(573,1,{},Wn),uZn.Ve=function(n,t){var e;return txn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorManhattan",573),sDn(1344,1,{},Qn),uZn.Ve=function(n,t){var e;return lKn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorMaxNormWindingInMathPosSense",1344),sDn(409,1,{},$d),uZn.Ve=function(n,t){return HV(this,n,t)},uZn.c=!1,uZn.d=!1,uZn.e=!1,uZn.f=!1,zW(a3n,"SuccessorQuadrantsGeneric",409),sDn(1345,1,{},Jn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"SuccessorQuadrantsGeneric/lambda$0$Type",1345),sDn(332,22,{3:1,34:1,22:1,332:1},hC),uZn.a=!1;var Eht,Sht=_cn(f3n,l3n,332,Oat,F6,kB);sDn(1317,1,{}),uZn.Ib=function(){var n,t,e,i,r,c;for(e=" ",n=xwn(0),r=0;r<this.o;r++)e+=""+n.a,n=xwn(xK(n.a));for(e+="\n",n=xwn(0),c=0;c<this.p;c++){for(e+=""+n.a,n=xwn(xK(n.a)),i=0;i<this.o;i++)0==dwn(t=Son(this,i,c),0)?e+="_":0==dwn(t,1)?e+="X":e+="0";e+="\n"}return r1(e,0,e.length-1)},uZn.o=0,uZn.p=0,zW(f3n,"TwoBitGrid",1317),sDn(330,1317,{330:1},smn),uZn.j=0,uZn.k=0,zW(f3n,"PlanarGrid",330),sDn(176,330,{330:1,176:1}),uZn.g=0,uZn.i=0,zW(f3n,"Polyomino",176);var Pht=Iq(p3n,m3n);sDn(137,1,v3n,Yn),uZn.qf=function(n,t){return vfn(this,n,t)},uZn.nf=function(){return MX(this)},uZn.of=function(n){return oIn(this,n)},uZn.pf=function(n){return vR(this,n)},zW(p3n,"MapPropertyHolder",137),sDn(1318,137,v3n,bFn),zW(f3n,"Polyominoes",1318);var Cht,Iht,Oht,Aht,Lht,Nht,$ht,Dht,xht=!1;sDn(1828,1,QZn,Zn),uZn.Cd=function(n){Szn(uG(n,225))},zW(k3n,"DepthFirstCompaction/0methodref$compactTree$Type",1828),sDn(825,1,QZn,Dd),uZn.Cd=function(n){JQ(this.a,uG(n,225))},zW(k3n,"DepthFirstCompaction/lambda$1$Type",825),sDn(1829,1,QZn,AB),uZn.Cd=function(n){zvn(this.a,this.b,this.c,uG(n,225))},zW(k3n,"DepthFirstCompaction/lambda$2$Type",1829),sDn(68,1,{68:1},G0),zW(k3n,"Node",68),sDn(1214,1,{},I$),zW(k3n,"ScanlineOverlapCheck",1214),sDn(1215,1,{693:1},_Z),uZn.bf=function(n){WK(this,uG(n,450))},zW(k3n,"ScanlineOverlapCheck/OverlapsScanlineHandler",1215),sDn(1216,1,b2n,nt),uZn.Ne=function(n,t){return ogn(uG(n,68),uG(t,68))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(k3n,"ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type",1216),sDn(450,1,{450:1},fC),uZn.a=!1,zW(k3n,"ScanlineOverlapCheck/Timestamp",450),sDn(1217,1,b2n,tt),uZn.Ne=function(n,t){return REn(uG(n,450),uG(t,450))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(k3n,"ScanlineOverlapCheck/lambda$0$Type",1217),sDn(557,1,{},et),zW(y3n,"SVGImage",557),sDn(334,1,{334:1},LB),uZn.Ib=function(){return"("+this.a+TZn+this.b+TZn+this.c+")"},zW(y3n,"UniqueTriple",334),sDn(205,1,M3n),zW(T3n,"AbstractLayoutProvider",205),sDn(1114,205,M3n,it),uZn.rf=function(n,t){var e,i,r;t.Ug(j3n,1),this.a=uM(pK(zDn(n,(ryn(),ift)))),vnn(n,zht)&&(i=mK(zDn(n,zht)),(e=QBn(aan(),i))&&uG(A1(e.f),205).rf(n,t.eh(1))),r=new L5(this.a),this.b=FWn(r,n),0===uG(zDn(n,(pbn(),Hht)),488).g?(D$n(new rt,this.b),Myn(n,Qht,oIn(this.b,Qht))):(bS(),String.fromCharCode(10)),oQn(r),Myn(n,Wht,this.b),t.Vg()},uZn.a=0,zW(E3n,"DisCoLayoutProvider",1114),sDn(1208,1,{},rt),uZn.c=!1,uZn.e=0,uZn.f=0,zW(E3n,"DisCoPolyominoCompactor",1208),sDn(567,1,{567:1},hX),uZn.b=!0,zW(S3n,"DCComponent",567),sDn(406,22,{3:1,34:1,22:1,406:1},lC),uZn.a=!1;var Rht,Kht,Fht=_cn(S3n,"DCDirection",406,Oat,_6,yB);sDn(272,137,{3:1,272:1,96:1,137:1},pDn),zW(S3n,"DCElement",272),sDn(407,1,{407:1},bTn),uZn.c=0,zW(S3n,"DCExtension",407),sDn(762,137,v3n,ej),zW(S3n,"DCGraph",762),sDn(488,22,{3:1,34:1,22:1,488:1},qR);var _ht,Bht,Hht,Uht,Ght,qht,Xht,zht,Vht,Wht,Qht,Jht,Yht,Zht,nft,tft,eft,ift,rft,cft,aft,oft=_cn(P3n,C3n,488,Oat,LJ,MB);sDn(865,1,K2n,Hf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I3n),N3n),"Connected Components Compaction Strategy"),"Strategy for packing different connected components in order to save space and enhance readability of a graph."),Uht),(lAn(),gNt)),oft),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,O3n),N3n),"Connected Components Layout Algorithm"),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),kNt),$ot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,A3n),"debug"),"DCGraph"),"Access to the DCGraph is intended for the debug view,"),vNt),dat),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,L3n),"debug"),"List of Polyominoes"),"Access to the polyominoes is intended for the debug view,"),vNt),dat),ggn(hNt)))),nXn((new Uf,n))},zW(P3n,"DisCoMetaDataProvider",865),sDn(1010,1,K2n,Uf),uZn.hf=function(n){nXn(n)},zW(P3n,"DisCoOptions",1010),sDn(1011,1,{},ct),uZn.sf=function(){return new it},uZn.tf=function(n){},zW(P3n,"DisCoOptions/DiscoFactory",1011),sDn(568,176,{330:1,176:1,568:1},Uxn),uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,zW("org.eclipse.elk.alg.disco.structures","DCPolyomino",568),sDn(1286,1,y1n,at),uZn.Mb=function(n){return IL(n)},zW(F3n,"ElkGraphComponentsProcessor/lambda$0$Type",1286),sDn(1287,1,{},ot),uZn.Kb=function(n){return lZ(),bIn(uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$1$Type",1287),sDn(1288,1,y1n,ut),uZn.Mb=function(n){return uq(uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$2$Type",1288),sDn(1289,1,{},st),uZn.Kb=function(n){return lZ(),gIn(uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$3$Type",1289),sDn(1290,1,y1n,ht),uZn.Mb=function(n){return sq(uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$4$Type",1290),sDn(1291,1,y1n,xd),uZn.Mb=function(n){return Z1(this.a,uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$5$Type",1291),sDn(1292,1,{},Rd),uZn.Kb=function(n){return aQ(this.a,uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$6$Type",1292),sDn(1205,1,{},L5),uZn.a=0,zW(F3n,"ElkGraphTransformer",1205),sDn(1206,1,{},ft),uZn.Yd=function(n,t){XNn(this,uG(n,167),uG(t,272))},zW(F3n,"ElkGraphTransformer/OffsetApplier",1206),sDn(1207,1,QZn,Kd),uZn.Cd=function(n){eD(this,uG(n,8))},zW(F3n,"ElkGraphTransformer/OffsetApplier/OffSetToChainApplier",1207),sDn(760,1,{},lt),zW(G3n,q3n,760),sDn(1195,1,b2n,bt),uZn.Ne=function(n,t){return kNn(uG(n,235),uG(t,235))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(G3n,X3n,1195),sDn(1196,1,QZn,bC),uZn.Cd=function(n){c3(this.b,this.a,uG(n,250))},zW(G3n,z3n,1196),sDn(738,205,M3n,hk),uZn.rf=function(n,t){Zxn(this,n,t)},zW(G3n,"ForceLayoutProvider",738),sDn(309,137,{3:1,309:1,96:1,137:1}),zW(V3n,"FParticle",309),sDn(250,309,{3:1,250:1,309:1,96:1,137:1},$W),uZn.Ib=function(){var n;return this.a?(n=Ten(this.a.a,this,0))>=0?"b"+n+"["+X8(this.a)+"]":"b["+X8(this.a)+"]":"b_"+xx(this)},zW(V3n,"FBendpoint",250),sDn(289,137,{3:1,289:1,96:1,137:1},$F),uZn.Ib=function(){return X8(this)},zW(V3n,"FEdge",289),sDn(235,137,{3:1,235:1,96:1,137:1},d7);var uft,sft,hft,fft,lft,bft,wft,dft,gft,pft,mft=zW(V3n,"FGraph",235);sDn(453,309,{3:1,453:1,309:1,96:1,137:1},A5),uZn.Ib=function(){return null==this.b||0==this.b.length?"l["+X8(this.a)+"]":"l_"+this.b},zW(V3n,"FLabel",453),sDn(153,309,{3:1,153:1,309:1,96:1,137:1},E$),uZn.Ib=function(){return z3(this)},uZn.a=0,zW(V3n,"FNode",153),sDn(2100,1,{}),uZn.vf=function(n){pGn(this,n)},uZn.wf=function(){ITn(this)},uZn.d=0,zW(Q3n,"AbstractForceModel",2100),sDn(641,2100,{641:1},lsn),uZn.uf=function(n,t){var i,r,c,a;return qzn(this.f,n,t),c=YF(D$(t.d),n.d),a=e.Math.sqrt(c.a*c.a+c.b*c.b),r=e.Math.max(0,a-NQ(n.e)/2-NQ(t.e)/2),vD(c,((i=VNn(this.e,n,t))>0?-iW(r,this.c)*i:TR(r,this.b)*uG(oIn(n,(cGn(),$ft)),17).a)/a),c},uZn.vf=function(n){pGn(this,n),this.a=uG(oIn(n,(cGn(),Tft)),17).a,this.c=uM(pK(oIn(n,_ft))),this.b=uM(pK(oIn(n,xft)))},uZn.xf=function(n){return n<this.a},uZn.a=0,uZn.b=0,uZn.c=0,zW(Q3n,"EadesModel",641),sDn(642,2100,{642:1},zG),uZn.uf=function(n,t){var i,r,c,a,o;return qzn(this.f,n,t),c=YF(D$(t.d),n.d),o=e.Math.sqrt(c.a*c.a+c.b*c.b),a=jR(r=e.Math.max(0,o-NQ(n.e)/2-NQ(t.e)/2),this.a)*uG(oIn(n,(cGn(),$ft)),17).a,(i=VNn(this.e,n,t))>0&&(a-=aM(r,this.a)*i),vD(c,a*this.b/o),c},uZn.vf=function(n){var t,i,r,c,a,o,u;for(pGn(this,n),this.b=uM(pK(oIn(n,(cGn(),Bft)))),this.c=this.b/uG(oIn(n,Tft),17).a,r=n.e.c.length,a=0,c=0,u=new Ww(n.e);u.a<u.c.c.length;)a+=(o=uG(N3(u),153)).e.a,c+=o.e.b;t=a*c,i=uM(pK(oIn(n,_ft)))*Z2n,this.a=e.Math.sqrt(t/(2*r))*i},uZn.wf=function(){ITn(this),this.b-=this.c},uZn.xf=function(n){return this.b>0},uZn.a=0,uZn.b=0,uZn.c=0,zW(Q3n,"FruchtermanReingoldModel",642),sDn(860,1,K2n,Gf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J3n),""),"Force Model"),"Determines the model for force calculation."),hft),(lAn(),gNt)),mlt),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y3n),""),"Iterations"),"The number of iterations on the force model."),xwn(300)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z3n),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n4n),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),t4n),dNt),fot),ggn(hNt)))),H4(n,n4n,J3n,dft),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e4n),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),dNt),fot),ggn(hNt)))),H4(n,e4n,J3n,lft),vJn((new qf,n))},zW(i4n,"ForceMetaDataProvider",860),sDn(432,22,{3:1,34:1,22:1,432:1},wC);var vft,kft,yft,Mft,Tft,jft,Eft,Sft,Pft,Cft,Ift,Oft,Aft,Lft,Nft,$ft,Dft,xft,Rft,Kft,Fft,_ft,Bft,Hft,Uft,Gft,qft,Xft,zft,Vft,Wft,Qft,Jft,Yft,Zft,nlt,tlt,elt,ilt,rlt,clt,alt,olt,ult,slt,hlt,flt,llt,blt,wlt,dlt,glt,plt,mlt=_cn(i4n,"ForceModelStrategy",432,Oat,h1,TB);sDn($1n,1,K2n,qf),uZn.hf=function(n){vJn(n)},zW(i4n,"ForceOptions",$1n),sDn(1001,1,{},mt),uZn.sf=function(){return new hk},uZn.tf=function(n){},zW(i4n,"ForceOptions/ForceFactory",1001),sDn(861,1,K2n,Xf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I4n),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),sNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,O4n),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[oNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A4n),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),Zft),gNt),Clt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L4n),""),"Stress Epsilon"),"Termination criterion for the iterative process."),t4n),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N4n),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),xwn(vZn)),mNt),dot),ggn(hNt)))),sWn((new zf,n))},zW(i4n,"StressMetaDataProvider",861),sDn(1004,1,K2n,zf),uZn.hf=function(n){sWn(n)},zW(i4n,"StressOptions",1004),sDn(1005,1,{},gt),uZn.sf=function(){return new DF},uZn.tf=function(n){},zW(i4n,"StressOptions/StressFactory",1005),sDn(1110,205,M3n,DF),uZn.rf=function(n,t){var e,i,r,c;for(t.Ug(D4n,1),oM(gK(zDn(n,(Bjn(),olt))))?oM(gK(zDn(n,blt)))||J1(new Sd((vP(),new Vy(n)))):Zxn(new hk,n,t.eh(1)),i=yfn(n),c=(e=tqn(this.a,i)).Kc();c.Ob();)(r=uG(c.Pb(),235)).e.c.length<=1||(czn(this.b,r),QDn(this.b),Prn(r.d,new pt));YJn(i=lJn(e)),t.Vg()},zW(R4n,"StressLayoutProvider",1110),sDn(1111,1,QZn,pt),uZn.Cd=function(n){Yqn(uG(n,453))},zW(R4n,"StressLayoutProvider/lambda$0$Type",1111),sDn(1002,1,{},qv),uZn.c=0,uZn.e=0,uZn.g=0,zW(R4n,"StressMajorization",1002),sDn(391,22,{3:1,34:1,22:1,391:1},dC);var vlt,klt,ylt,Mlt,Tlt,jlt,Elt,Slt,Plt,Clt=_cn(R4n,"StressMajorization/Dimension",391,Oat,F2,jB);sDn(1003,1,b2n,Fd),uZn.Ne=function(n,t){return j_(this.a,uG(n,153),uG(t,153))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(R4n,"StressMajorization/lambda$0$Type",1003),sDn(1192,1,{},i4),zW(F4n,"ElkLayered",1192),sDn(1193,1,QZn,_d),uZn.Cd=function(n){OLn(this.a,uG(n,36))},zW(F4n,"ElkLayered/lambda$0$Type",1193),sDn(1194,1,QZn,Bd),uZn.Cd=function(n){E_(this.a,uG(n,36))},zW(F4n,"ElkLayered/lambda$1$Type",1194),sDn(1281,1,{},z$),zW(F4n,"GraphConfigurator",1281),sDn(770,1,QZn,Hd),uZn.Cd=function(n){XIn(this.a,uG(n,10))},zW(F4n,"GraphConfigurator/lambda$0$Type",770),sDn(771,1,{},dt),uZn.Kb=function(n){return FEn(),new fX(null,new h3(uG(n,30).a,16))},zW(F4n,"GraphConfigurator/lambda$1$Type",771),sDn(772,1,QZn,Ud),uZn.Cd=function(n){XIn(this.a,uG(n,10))},zW(F4n,"GraphConfigurator/lambda$2$Type",772),sDn(1109,205,M3n,mk),uZn.rf=function(n,t){var e;e=vXn(new kk,n),xA(zDn(n,(jYn(),rMt)))===xA((Own(),Ixt))?Tgn(this.a,e,t):BDn(this.a,e,t),t.$g()||NQn(new Vf,e)},zW(F4n,"LayeredLayoutProvider",1109),sDn(367,22,{3:1,34:1,22:1,367:1},gC);var Ilt,Olt,Alt,Llt=_cn(F4n,"LayeredPhases",367,Oat,u9,EB);sDn(1717,1,{},$an),uZn.i=0,zW(_4n,"ComponentsToCGraphTransformer",1717),sDn(1718,1,{},wt),uZn.yf=function(n,t){return e.Math.min(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},uZn.zf=function(n,t){return e.Math.min(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},zW(_4n,"ComponentsToCGraphTransformer/1",1718),sDn(86,1,{86:1}),uZn.i=0,uZn.k=!0,uZn.o=T0n;var Nlt,$lt,Dlt,xlt=zW(B4n,"CNode",86);sDn(469,86,{469:1,86:1},Jx,Yvn),uZn.Ib=function(){return""},zW(_4n,"ComponentsToCGraphTransformer/CRectNode",469),sDn(1688,1,{},vt),zW(_4n,"OneDimensionalComponentsCompaction",1688),sDn(1689,1,{},kt),uZn.Kb=function(n){return w2(uG(n,42))},uZn.Fb=function(n){return this===n},zW(_4n,"OneDimensionalComponentsCompaction/lambda$0$Type",1689),sDn(1690,1,{},yt),uZn.Kb=function(n){return xgn(uG(n,42))},uZn.Fb=function(n){return this===n},zW(_4n,"OneDimensionalComponentsCompaction/lambda$1$Type",1690),sDn(1720,1,{},wQ),zW(B4n,"CGraph",1720),sDn(194,1,{194:1},Zvn),uZn.b=0,uZn.c=0,uZn.e=0,uZn.g=!0,uZn.i=T0n,zW(B4n,"CGroup",194),sDn(1719,1,{},Mt),uZn.yf=function(n,t){return e.Math.max(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},uZn.zf=function(n,t){return e.Math.max(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},zW(B4n,m2n,1719),sDn(1721,1,{},i$n),uZn.d=!1;var Rlt=zW(B4n,T2n,1721);sDn(1722,1,{},Tt),uZn.Kb=function(n){return GS(),qx(),0!=uG(uG(n,42).a,86).d.e},uZn.Fb=function(n){return this===n},zW(B4n,j2n,1722),sDn(833,1,{},cX),uZn.a=!1,uZn.b=!1,uZn.c=!1,uZn.d=!1,zW(B4n,E2n,833),sDn(1898,1,{},nz),zW(H4n,S2n,1898);var Klt=Iq(U4n,d2n);sDn(1899,1,{382:1},FZ),uZn.bf=function(n){DFn(this,uG(n,475))},zW(H4n,P2n,1899),sDn(V1n,1,b2n,jt),uZn.Ne=function(n,t){return rY(uG(n,86),uG(t,86))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(H4n,C2n,V1n),sDn(475,1,{475:1},KC),uZn.a=!1,zW(H4n,I2n,475),sDn(1901,1,b2n,Et),uZn.Ne=function(n,t){return KEn(uG(n,475),uG(t,475))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(H4n,O2n,1901),sDn(148,1,{148:1},FC,wG),uZn.Fb=function(n){var t;return null!=n&&Ult==Tbn(n)&&(t=uG(n,148),OJ(this.c,t.c)&&OJ(this.d,t.d))},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.c,this.d]))},uZn.Ib=function(){return"("+this.c+TZn+this.d+(this.a?"cx":"")+this.b+")"},uZn.a=!0,uZn.c=0,uZn.d=0;var Flt,_lt,Blt,Hlt,Ult=zW(U4n,"Point",148);sDn(416,22,{3:1,34:1,22:1,416:1},jC);var Glt,qlt,Xlt,zlt,Vlt,Wlt,Qlt,Jlt,Ylt,Zlt,nbt,tbt,ebt=_cn(U4n,"Point/Quadrant",416,Oat,H6,SB);sDn(1708,1,{},dk),uZn.b=null,uZn.c=null,uZn.d=null,uZn.e=null,uZn.f=null,zW(U4n,"RectilinearConvexHull",1708),sDn(583,1,{382:1},cyn),uZn.bf=function(n){Itn(this,uG(n,148))},uZn.b=0,zW(U4n,"RectilinearConvexHull/MaximalElementsEventHandler",583),sDn(1710,1,b2n,St),uZn.Ne=function(n,t){return cY(pK(n),pK(t))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1710),sDn(1709,1,{382:1},Jin),uZn.bf=function(n){pKn(this,uG(n,148))},uZn.a=0,uZn.b=null,uZn.c=null,uZn.d=null,uZn.e=null,zW(U4n,"RectilinearConvexHull/RectangleEventHandler",1709),sDn(1711,1,b2n,Pt),uZn.Ne=function(n,t){return H3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$0$Type",1711),sDn(1712,1,b2n,At),uZn.Ne=function(n,t){return U3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$1$Type",1712),sDn(1713,1,b2n,Lt),uZn.Ne=function(n,t){return B3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$2$Type",1713),sDn(1714,1,b2n,Ot),uZn.Ne=function(n,t){return G3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$3$Type",1714),sDn(1715,1,b2n,Nt),uZn.Ne=function(n,t){return sIn(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$4$Type",1715),sDn(1716,1,{},X0),zW(U4n,"Scanline",1716),sDn(2104,1,{}),zW(G4n,"AbstractGraphPlacer",2104),sDn(335,1,{335:1},DR),uZn.Ff=function(n){return!!this.Gf(n)&&(UNn(this.b,uG(oIn(n,(GYn(),xpt)),21),n),!0)},uZn.Gf=function(n){var t,e,i;for(t=uG(oIn(n,(GYn(),xpt)),21),i=uG(Y9(Jlt,t),21).Kc();i.Ob();)if(e=uG(i.Pb(),21),!uG(Y9(this.b,e),15).dc())return!1;return!0},zW(G4n,"ComponentGroup",335),sDn(779,2104,{},gk),uZn.Hf=function(n){var t;for(t=new Ww(this.a);t.a<t.c.c.length;)if(uG(N3(t),335).Ff(n))return;kD(this.a,new DR(n))},uZn.Ef=function(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;if(this.a.c.length=0,t.a.c.length=0,n.dc())return t.f.a=0,void(t.f.b=0);for(zsn(t,a=uG(n.Xb(0),36)),r=n.Kc();r.Ob();)i=uG(r.Pb(),36),this.Hf(i);for(w=new sj,c=uM(pK(oIn(a,(jYn(),wTt)))),s=new Ww(this.a);s.a<s.c.c.length;)h=ZJn(o=uG(N3(s),335),c),utn(KW(o.b),w.a,w.b),w.a+=h.a,w.b+=h.b;if(t.f.a=w.a-c,t.f.b=w.b-c,oM(gK(oIn(a,pyt)))&&xA(oIn(a,Vyt))===xA((_gn(),uxt))){for(b=n.Kc();b.Ob();)tHn(f=uG(b.Pb(),36),f.c.a,f.c.b);for(oYn(e=new It,n,c),l=n.Kc();l.Ob();)JF(dL((f=uG(l.Pb(),36)).c),e.e);JF(dL(t.f),e.a)}for(u=new Ww(this.a);u.a<u.c.c.length;)otn(t,KW((o=uG(N3(u),335)).b))},zW(G4n,"ComponentGroupGraphPlacer",779),sDn(1312,779,{},Lk),uZn.Hf=function(n){Kwn(this,n)},uZn.Ef=function(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(this.a.c.length=0,t.a.c.length=0,n.dc())return t.f.a=0,void(t.f.b=0);for(zsn(t,a=uG(n.Xb(0),36)),r=n.Kc();r.Ob();)Kwn(this,uG(r.Pb(),36));for(m=new sj,p=new sj,d=new sj,w=new sj,c=uM(pK(oIn(a,(jYn(),wTt)))),s=new Ww(this.a);s.a<s.c.c.length;){if(o=uG(N3(s),335),hN(uG(oIn(t,(XYn(),d$t)),88))){for(d.a=m.a,g=new Ny(RW(HW(o.b).a).a.kc());g.b.Ob();)if(uG(OP(g.b.Pb()),21).Hc((KQn(),yRt))){d.a=p.a;break}}else if(fN(uG(oIn(t,d$t),88)))for(d.b=m.b,g=new Ny(RW(HW(o.b).a).a.kc());g.b.Ob();)if(uG(OP(g.b.Pb()),21).Hc((KQn(),_Rt))){d.b=p.b;break}if(h=ZJn(uG(o,579),c),utn(KW(o.b),d.a,d.b),hN(uG(oIn(t,d$t),88))){for(p.a=d.a+h.a,w.a=e.Math.max(w.a,p.a),g=new Ny(RW(HW(o.b).a).a.kc());g.b.Ob();)if(uG(OP(g.b.Pb()),21).Hc((KQn(),KRt))){m.a=d.a+h.a;break}p.b=d.b+h.b,d.b=p.b,w.b=e.Math.max(w.b,d.b)}else if(fN(uG(oIn(t,d$t),88))){for(p.b=d.b+h.b,w.b=e.Math.max(w.b,p.b),g=new Ny(RW(HW(o.b).a).a.kc());g.b.Ob();)if(uG(OP(g.b.Pb()),21).Hc((KQn(),kRt))){m.b=d.b+h.b;break}p.a=d.a+h.a,d.a=p.a,w.a=e.Math.max(w.a,d.a)}}if(t.f.a=w.a-c,t.f.b=w.b-c,oM(gK(oIn(a,pyt)))&&xA(oIn(a,Vyt))===xA((_gn(),uxt))){for(b=n.Kc();b.Ob();)tHn(f=uG(b.Pb(),36),f.c.a,f.c.b);for(oYn(i=new It,n,c),l=n.Kc();l.Ob();)JF(dL((f=uG(l.Pb(),36)).c),i.e);JF(dL(t.f),i.a)}for(u=new Ww(this.a);u.a<u.c.c.length;)otn(t,KW((o=uG(N3(u),335)).b))},zW(G4n,"ComponentGroupModelOrderGraphPlacer",1312),sDn(389,22,{3:1,34:1,22:1,389:1},EC);var ibt,rbt,cbt,abt=_cn(G4n,"ComponentOrderingStrategy",389,Oat,R6,PB);sDn(659,1,{},It),zW(G4n,"ComponentsCompactor",659),sDn(1533,13,x0n,c9),uZn.Fc=function(n){return CEn(this,uG(n,148))},zW(G4n,"ComponentsCompactor/Hullpoints",1533),sDn(1530,1,{855:1},qyn),uZn.a=!1,zW(G4n,"ComponentsCompactor/InternalComponent",1530),sDn(1529,1,t1n,bk),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Ww(this.a)},zW(G4n,"ComponentsCompactor/InternalConnectedComponents",1529),sDn(1532,1,{602:1},s$n),uZn.Bf=function(){return null},uZn.Cf=function(){return this.a},uZn.Af=function(){return Dkn(this.d)},uZn.Df=function(){return this.b},zW(G4n,"ComponentsCompactor/InternalExternalExtension",1532),sDn(1531,1,{602:1},vk),uZn.Cf=function(){return this.a},uZn.Af=function(){return Dkn(this.d)},uZn.Bf=function(){return this.c},uZn.Df=function(){return this.b},zW(G4n,"ComponentsCompactor/InternalUnionExternalExtension",1531),sDn(1535,1,{},BFn),zW(G4n,"ComponentsCompactor/OuterSegments",1535),sDn(1534,1,{},wk),zW(G4n,"ComponentsCompactor/Segments",1534),sDn(1282,1,{},p7),zW(G4n,q3n,1282),sDn(1283,1,b2n,$t),uZn.Ne=function(n,t){return J3(uG(n,36),uG(t,36))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(G4n,"ComponentsProcessor/lambda$0$Type",1283),sDn(579,335,{335:1,579:1},r9),uZn.Ff=function(n){return Lln(this,n)},uZn.Gf=function(n){return rKn(this,n)},zW(G4n,"ModelOrderComponentGroup",579),sDn(1310,2104,{},Dt),uZn.Ef=function(n,t){var i,r,c,a,o,u,s,h,f;if(1!=n.gc()){if(n.dc())return t.a.c.length=0,t.f.a=0,void(t.f.b=0);for(this.Jf(n,t),c=uG(n.Xb(0),36),t.a.c.length=0,zsn(t,c),u=0,f=0,a=n.Kc();a.Ob();)s=uG(a.Pb(),36).f,u=e.Math.max(u,s.a),f+=s.a*s.b;if(u=e.Math.max(u,e.Math.sqrt(f)*uM(pK(oIn(t,(jYn(),dyt))))),r=uM(pK(oIn(t,wTt))),this.If(n,t,u,r),oM(gK(oIn(c,pyt)))){for(oYn(i=new It,n,r),o=n.Kc();o.Ob();)JF(dL(uG(o.Pb(),36).c),i.e);JF(dL(t.f),i.a)}otn(t,n)}else(h=uG(n.Xb(0),36))!=t&&(t.a.c.length=0,_Hn(t,h,0,0),zsn(t,h),WY(t.d,h.d),t.f.a=h.f.a,t.f.b=h.f.b)},uZn.If=function(n,t,i,r){var c,a,o,u,s,h,f,l;for(f=0,l=0,u=0,c=r,o=n.Kc();o.Ob();)f+(h=(a=uG(o.Pb(),36)).f).a>i&&(f=0,l+=u+r,u=0),tHn(a,f+(s=a.c).a,l+s.b),dL(s),c=e.Math.max(c,f+h.a),u=e.Math.max(u,h.b),f+=h.a+r;t.f.a=c,t.f.b=l+u},uZn.Jf=function(n,t){var e,i,r,c,a;if(xA(oIn(t,(jYn(),kyt)))===xA((Uvn(),tbt))){for(i=n.Kc();i.Ob();){for(a=0,c=new Ww((e=uG(i.Pb(),36)).a);c.a<c.c.c.length;)r=uG(N3(c),10),a+=uG(oIn(r,cTt),17).a;e.p=a}hZ(),n.jd(new xt)}},zW(G4n,"SimpleRowGraphPlacer",1310),sDn(1313,1310,{},Ct),uZn.If=function(n,t,i,r){var c,a,o,u,s,h,f,l,b,w;for(b=0,w=0,u=0,c=r,s=null,l=0,o=n.Kc();o.Ob();)(b+(f=(a=uG(o.Pb(),36)).f).a>i&&!uG(oIn(a,(GYn(),xpt)),21).Hc((KQn(),yRt))||s&&uG(oIn(s,(GYn(),xpt)),21).Hc((KQn(),kRt))||uG(oIn(a,(GYn(),xpt)),21).Hc((KQn(),_Rt)))&&(b=l,w+=u+r,u=0),h=a.c,uG(oIn(a,(GYn(),xpt)),21).Hc((KQn(),yRt))&&(b=c+r),tHn(a,b+h.a,w+h.b),c=e.Math.max(c,b+f.a),uG(oIn(a,xpt),21).Hc(KRt)&&(l=e.Math.max(l,b+f.a+r)),dL(h),u=e.Math.max(u,f.b),b+=f.a+r,s=a;t.f.a=c,t.f.b=w+u},uZn.Jf=function(n,t){},zW(G4n,"ModelOrderRowGraphPlacer",1313),sDn(1311,1,b2n,xt),uZn.Ne=function(n,t){return Wsn(uG(n,36),uG(t,36))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(G4n,"SimpleRowGraphPlacer/1",1311),sDn(1280,1,A2n,Rt),uZn.Lb=function(n){var t;return!!(t=uG(oIn(uG(n,249).b,(jYn(),bMt)),75))&&0!=t.b},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){var t;return!!(t=uG(oIn(uG(n,249).b,(jYn(),bMt)),75))&&0!=t.b},zW(W4n,"CompoundGraphPostprocessor/1",1280),sDn(1279,1,Q4n,yk),uZn.Kf=function(n,t){zyn(this,uG(n,36),t)},zW(W4n,"CompoundGraphPreprocessor",1279),sDn(452,1,{452:1},Sdn),uZn.c=!1,zW(W4n,"CompoundGraphPreprocessor/ExternalPort",452),sDn(249,1,{249:1},$B),uZn.Ib=function(){return MR(this.c)+":"+MNn(this.b)},zW(W4n,"CrossHierarchyEdge",249),sDn(777,1,b2n,Gd),uZn.Ne=function(n,t){return Njn(this,uG(n,249),uG(t,249))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(W4n,"CrossHierarchyEdgeComparator",777),sDn(304,137,{3:1,304:1,96:1,137:1}),uZn.p=0,zW(J4n,"LGraphElement",304),sDn(18,304,{3:1,18:1,304:1,96:1,137:1},UZ),uZn.Ib=function(){return MNn(this)};var obt=zW(J4n,"LEdge",18);sDn(36,304,{3:1,20:1,36:1,304:1,96:1,137:1},Dan),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Ww(this.b)},uZn.Ib=function(){return 0==this.b.c.length?"G-unlayered"+vIn(this.a):0==this.a.c.length?"G-layered"+vIn(this.b):"G[layerless"+vIn(this.a)+", layers"+vIn(this.b)+"]"};var ubt,sbt=zW(J4n,"LGraph",36);sDn(666,1,{}),uZn.Lf=function(){return this.e.n},uZn.of=function(n){return oIn(this.e,n)},uZn.Mf=function(){return this.e.o},uZn.Nf=function(){return this.e.p},uZn.pf=function(n){return vR(this.e,n)},uZn.Of=function(n){this.e.n.a=n.a,this.e.n.b=n.b},uZn.Pf=function(n){this.e.o.a=n.a,this.e.o.b=n.b},uZn.Qf=function(n){this.e.p=n},zW(J4n,"LGraphAdapters/AbstractLShapeAdapter",666),sDn(473,1,{853:1},qd),uZn.Rf=function(){var n,t;if(!this.b)for(this.b=iR(this.a.b.c.length),t=new Ww(this.a.b);t.a<t.c.c.length;)n=uG(N3(t),72),kD(this.b,new Xd(n));return this.b},uZn.b=null,zW(J4n,"LGraphAdapters/LEdgeAdapter",473),sDn(665,1,{},mY),uZn.Sf=function(){var n,t,e,i,r;if(!this.b)for(this.b=new Zm,e=new Ww(this.a.b);e.a<e.c.c.length;)for(r=new Ww(uG(N3(e),30).a);r.a<r.c.c.length;)if(i=uG(N3(r),10),this.c.Mb(i)&&(kD(this.b,new RB(this,i,this.e)),this.d)){if(vR(i,(GYn(),Pmt)))for(t=uG(oIn(i,Pmt),15).Kc();t.Ob();)n=uG(t.Pb(),10),kD(this.b,new RB(this,n,!1));if(vR(i,Ept))for(t=uG(oIn(i,Ept),15).Kc();t.Ob();)n=uG(t.Pb(),10),kD(this.b,new RB(this,n,!1))}return this.b},uZn.Lf=function(){throw hv(new TM(Z4n))},uZn.of=function(n){return oIn(this.a,n)},uZn.Mf=function(){return this.a.f},uZn.Nf=function(){return this.a.p},uZn.pf=function(n){return vR(this.a,n)},uZn.Of=function(n){throw hv(new TM(Z4n))},uZn.Pf=function(n){this.a.f.a=n.a,this.a.f.b=n.b},uZn.Qf=function(n){this.a.p=n},uZn.b=null,uZn.d=!1,uZn.e=!1,zW(J4n,"LGraphAdapters/LGraphAdapter",665),sDn(585,666,{187:1},Xd),zW(J4n,"LGraphAdapters/LLabelAdapter",585),sDn(584,666,{695:1},RB),uZn.Tf=function(){return this.b},uZn.Uf=function(){return hZ(),hZ(),zot},uZn.Rf=function(){var n,t;if(!this.a)for(this.a=iR(uG(this.e,10).b.c.length),t=new Ww(uG(this.e,10).b);t.a<t.c.c.length;)n=uG(N3(t),72),kD(this.a,new Xd(n));return this.a},uZn.Vf=function(){var n;return new OF((n=uG(this.e,10).d).d,n.c,n.a,n.b)},uZn.Wf=function(){return hZ(),hZ(),zot},uZn.Xf=function(){var n,t;if(!this.c)for(this.c=iR(uG(this.e,10).j.c.length),t=new Ww(uG(this.e,10).j);t.a<t.c.c.length;)n=uG(N3(t),12),kD(this.c,new _C(n,this.d));return this.c},uZn.Yf=function(){return oM(gK(oIn(uG(this.e,10),(GYn(),Cpt))))},uZn.Zf=function(n){uG(this.e,10).d.b=n.b,uG(this.e,10).d.d=n.d,uG(this.e,10).d.c=n.c,uG(this.e,10).d.a=n.a},uZn.$f=function(n){uG(this.e,10).f.b=n.b,uG(this.e,10).f.d=n.d,uG(this.e,10).f.c=n.c,uG(this.e,10).f.a=n.a},uZn._f=function(){Zcn(this,(zS(),ubt))},uZn.a=null,uZn.b=null,uZn.c=null,uZn.d=!1,zW(J4n,"LGraphAdapters/LNodeAdapter",584),sDn(1788,666,{852:1},_C),uZn.Uf=function(){var n,t,e,i,r,c,a,o;if(this.d&&uG(this.e,12).i.k==(zIn(),gbt))return hZ(),hZ(),zot;if(!this.a){for(this.a=new Zm,e=new Ww(uG(this.e,12).e);e.a<e.c.c.length;)n=uG(N3(e),18),kD(this.a,new qd(n));if(this.d&&(i=uG(oIn(uG(this.e,12),(GYn(),lmt)),10)))for(t=new Fz(ix(qgn(i).a.Kc(),new h));hDn(t);)n=uG(N9(t),18),kD(this.a,new qd(n));if(vR(uG(this.e,12).i,(GYn(),vmt))&&(a=uG(oIn(uG(this.e,12).i,vmt),337),o=uG(ain(a.e,this.e),113)))for(c=new Ww(o.b);c.a<c.c.c.length;)r=uG(N3(c),340),kD(this.a,new qd(r.a))}return this.a},uZn.Rf=function(){var n,t;if(!this.b)for(this.b=iR(uG(this.e,12).f.c.length),t=new Ww(uG(this.e,12).f);t.a<t.c.c.length;)n=uG(N3(t),72),kD(this.b,new Xd(n));return this.b},uZn.Wf=function(){var n,t,e,i,r,c,a,o;if(this.d&&uG(this.e,12).i.k==(zIn(),gbt))return hZ(),hZ(),zot;if(!this.c){for(this.c=new Zm,e=new Ww(uG(this.e,12).g);e.a<e.c.c.length;)n=uG(N3(e),18),kD(this.c,new qd(n));if(this.d&&(i=uG(oIn(uG(this.e,12),(GYn(),lmt)),10)))for(t=new Fz(ix(Xgn(i).a.Kc(),new h));hDn(t);)n=uG(N9(t),18),kD(this.c,new qd(n));if(vR(uG(this.e,12).i,(GYn(),vmt))&&(a=uG(oIn(uG(this.e,12).i,vmt),337),o=uG(ain(a.e,this.e),113)))for(c=new Ww(o.e);c.a<c.c.c.length;)r=uG(N3(c),340),kD(this.c,new qd(r.a))}return this.c},uZn.ag=function(){return uG(this.e,12).j},uZn.bg=function(){return oM(gK(oIn(uG(this.e,12),(GYn(),qpt))))},uZn.a=null,uZn.b=null,uZn.c=null,uZn.d=!1,zW(J4n,"LGraphAdapters/LPortAdapter",1788),sDn(1789,1,b2n,Kt),uZn.Ne=function(n,t){return H_n(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(J4n,"LGraphAdapters/PortComparator",1789),sDn(818,1,y1n,Ft),uZn.Mb=function(n){return uG(n,10),zS(),!0},zW(J4n,"LGraphAdapters/lambda$0$Type",818),sDn(404,304,{3:1,304:1,404:1,96:1,137:1}),zW(J4n,"LShape",404),sDn(72,404,{3:1,304:1,72:1,404:1,96:1,137:1},uj,S$),uZn.Ib=function(){var n;return null==(n=oq(this))?"label":"l_"+n},zW(J4n,"LLabel",72),sDn(214,1,{3:1,4:1,214:1,423:1}),uZn.Fb=function(n){var t;return!!F$(n,214)&&(t=uG(n,214),this.d==t.d&&this.a==t.a&&this.b==t.b&&this.c==t.c)},uZn.Hb=function(){var n,t;return n=OL(this.b)<<16,n|=OL(this.a)&D1n,t=OL(this.c)<<16,n^(t|=OL(this.d)&D1n)},uZn.cg=function(n){var t,e,i,r,c,a,o,u,s;for(r=0;r<n.length&&Hbn((s3(r,n.length),n.charCodeAt(r)),r6n);)++r;for(t=n.length;t>0&&Hbn((s3(t-1,n.length),n.charCodeAt(t-1)),c6n);)--t;if(r<t){u=WGn((Knn(r,t,n.length),n.substr(r,t-r)),",|;");try{for(a=0,o=(c=u).length;a<o;++a){if(2!=(i=WGn(c[a],"=")).length)throw hv(new vM("Expecting a list of key-value pairs."));e=KAn(i[0]),s=YIn(KAn(i[1])),m_(e,"top")?this.d=s:m_(e,"left")?this.b=s:m_(e,"bottom")?this.a=s:m_(e,"right")&&(this.c=s)}}catch(h){throw F$(h=Ehn(h),130)?hv(new vM(a6n+h)):hv(h)}}},uZn.Ib=function(){return"[top="+this.d+",left="+this.b+",bottom="+this.a+",right="+this.c+"]"},uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,zW(o6n,"Spacing",214),sDn(140,214,u6n,Nk,qL,OF,zU);var hbt=zW(o6n,"ElkMargin",140);sDn(660,140,u6n,$k),zW(J4n,"LMargin",660),sDn(10,404,{3:1,304:1,10:1,404:1,96:1,137:1},gMn),uZn.Ib=function(){return byn(this)},uZn.i=!1;var fbt,lbt,bbt,wbt,dbt,gbt,pbt=zW(J4n,"LNode",10);sDn(273,22,{3:1,34:1,22:1,273:1},SC);var mbt,vbt=_cn(J4n,"LNode/NodeType",273,Oat,Vnn,VH);sDn(775,1,y1n,_t),uZn.Mb=function(n){return oM(gK(oIn(uG(n,72),(jYn(),qyt))))},zW(J4n,"LNode/lambda$0$Type",775),sDn(107,214,s6n,Dk,CN,VU);var kbt,ybt,Mbt,Tbt,jbt,Ebt,Sbt=zW(o6n,"ElkPadding",107);sDn(778,107,s6n,xk),zW(J4n,"LPadding",778),sDn(12,404,{3:1,304:1,12:1,404:1,96:1,137:1},lOn),uZn.Ib=function(){var n,t,e;return JA(((n=new WM).a+="p_",n),njn(this)),this.i&&JA(QA((n.a+="[",n),this.i),"]"),1==this.e.c.length&&0==this.g.c.length&&uG(zq(this.e,0),18).c!=this&&(t=uG(zq(this.e,0),18).c,JA((n.a+=" << ",n),njn(t)),JA(QA((n.a+="[",n),t.i),"]")),0==this.e.c.length&&1==this.g.c.length&&uG(zq(this.g,0),18).d!=this&&(e=uG(zq(this.g,0),18).d,JA((n.a+=" >> ",n),njn(e)),JA(QA((n.a+="[",n),e.i),"]")),n.a},uZn.c=!0,uZn.d=!1;var Pbt,Cbt,Ibt,Obt,Abt=zW(J4n,"LPort",12);sDn(408,1,t1n,zd),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Vd(new Ww(this.a.e))},zW(J4n,"LPort/1",408),sDn(1309,1,$Zn,Vd),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(N3(this.a),18).c},uZn.Ob=function(){return l$(this.a)},uZn.Qb=function(){tW(this.a)},zW(J4n,"LPort/1/1",1309),sDn(369,1,t1n,Wd),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Qd(new Ww(this.a.g))},zW(J4n,"LPort/2",369),sDn(776,1,$Zn,Qd),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(N3(this.a),18).d},uZn.Ob=function(){return l$(this.a)},uZn.Qb=function(){tW(this.a)},zW(J4n,"LPort/2/1",776),sDn(1302,1,t1n,LC),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new w7(this)},zW(J4n,"LPort/CombineIter",1302),sDn(208,1,$Zn,w7),uZn.Nb=function(n){SV(this,n)},uZn.Qb=function(){xj()},uZn.Ob=function(){return Dx(this)},uZn.Pb=function(){return l$(this.a)?N3(this.a):N3(this.b)},zW(J4n,"LPort/CombineIter/1",208),sDn(1303,1,A2n,Bt),uZn.Lb=function(n){return Yz(n)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),0!=uG(n,12).g.c.length},zW(J4n,"LPort/lambda$0$Type",1303),sDn(1304,1,A2n,Ht),uZn.Lb=function(n){return Zz(n)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),0!=uG(n,12).e.c.length},zW(J4n,"LPort/lambda$1$Type",1304),sDn(1305,1,A2n,Ut),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),yRt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),yRt)},zW(J4n,"LPort/lambda$2$Type",1305),sDn(1306,1,A2n,Gt),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),kRt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),kRt)},zW(J4n,"LPort/lambda$3$Type",1306),sDn(1307,1,A2n,qt),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),KRt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),KRt)},zW(J4n,"LPort/lambda$4$Type",1307),sDn(1308,1,A2n,Xt),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),_Rt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),_Rt)},zW(J4n,"LPort/lambda$5$Type",1308),sDn(30,304,{3:1,20:1,304:1,30:1,96:1,137:1},bQ),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Ww(this.a)},uZn.Ib=function(){return"L_"+Ten(this.b.b,this,0)+vIn(this.a)},zW(J4n,"Layer",30),sDn(1330,1,{},kk),zW(h6n,f6n,1330),sDn(1334,1,{},zt),uZn.Kb=function(n){return lCn(uG(n,84))},zW(h6n,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1334),sDn(1337,1,{},Vt),uZn.Kb=function(n){return lCn(uG(n,84))},zW(h6n,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1337),sDn(1331,1,QZn,Jd),uZn.Cd=function(n){y$n(this.a,uG(n,123))},zW(h6n,z3n,1331),sDn(1332,1,QZn,Yd),uZn.Cd=function(n){y$n(this.a,uG(n,123))},zW(h6n,l6n,1332),sDn(1333,1,{},Wt),uZn.Kb=function(n){return new fX(null,new h3(KJ(uG(n,74)),16))},zW(h6n,b6n,1333),sDn(1335,1,y1n,Zd),uZn.Mb=function(n){return DN(this.a,uG(n,27))},zW(h6n,w6n,1335),sDn(1336,1,{},Qt),uZn.Kb=function(n){return new fX(null,new h3(FJ(uG(n,74)),16))},zW(h6n,"ElkGraphImporter/lambda$5$Type",1336),sDn(1338,1,y1n,ng),uZn.Mb=function(n){return xN(this.a,uG(n,27))},zW(h6n,"ElkGraphImporter/lambda$7$Type",1338),sDn(1339,1,y1n,Jt),uZn.Mb=function(n){return XY(uG(n,74))},zW(h6n,"ElkGraphImporter/lambda$8$Type",1339),sDn(1297,1,{},Vf),zW(h6n,"ElkGraphLayoutTransferrer",1297),sDn(1298,1,y1n,tg),uZn.Mb=function(n){return IF(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$0$Type",1298),sDn(1299,1,QZn,eg),uZn.Cd=function(n){WS(),kD(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$1$Type",1299),sDn(1300,1,y1n,ig),uZn.Mb=function(n){return KK(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$2$Type",1300),sDn(1301,1,QZn,rg),uZn.Cd=function(n){WS(),kD(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$3$Type",1301),sDn(819,1,{},xF),zW(d6n,"BiLinkedHashMultiMap",819),sDn(1550,1,Q4n,Yt),uZn.Kf=function(n,t){Bon(uG(n,36),t)},zW(d6n,"CommentNodeMarginCalculator",1550),sDn(1551,1,{},Zt),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"CommentNodeMarginCalculator/lambda$0$Type",1551),sDn(1552,1,QZn,ne),uZn.Cd=function(n){bXn(uG(n,10))},zW(d6n,"CommentNodeMarginCalculator/lambda$1$Type",1552),sDn(1553,1,Q4n,te),uZn.Kf=function(n,t){WFn(uG(n,36),t)},zW(d6n,"CommentPostprocessor",1553),sDn(1554,1,Q4n,ee),uZn.Kf=function(n,t){yQn(uG(n,36),t)},zW(d6n,"CommentPreprocessor",1554),sDn(1555,1,Q4n,ie),uZn.Kf=function(n,t){KKn(uG(n,36),t)},zW(d6n,"ConstraintsPostprocessor",1555),sDn(1556,1,Q4n,re),uZn.Kf=function(n,t){Csn(uG(n,36),t)},zW(d6n,"EdgeAndLayerConstraintEdgeReverser",1556),sDn(1557,1,Q4n,ce),uZn.Kf=function(n,t){amn(uG(n,36),t)},zW(d6n,"EndLabelPostprocessor",1557),sDn(1558,1,{},ae),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"EndLabelPostprocessor/lambda$0$Type",1558),sDn(1559,1,y1n,oe),uZn.Mb=function(n){return q8(uG(n,10))},zW(d6n,"EndLabelPostprocessor/lambda$1$Type",1559),sDn(1560,1,QZn,ue),uZn.Cd=function(n){_En(uG(n,10))},zW(d6n,"EndLabelPostprocessor/lambda$2$Type",1560),sDn(1561,1,Q4n,se),uZn.Kf=function(n,t){AAn(uG(n,36),t)},zW(d6n,"EndLabelPreprocessor",1561),sDn(1562,1,{},he),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"EndLabelPreprocessor/lambda$0$Type",1562),sDn(1563,1,QZn,NB),uZn.Cd=function(n){oP(this.a,this.b,this.c,uG(n,10))},uZn.a=0,uZn.b=0,uZn.c=!1,zW(d6n,"EndLabelPreprocessor/lambda$1$Type",1563),sDn(1564,1,y1n,fe),uZn.Mb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),cxt))},zW(d6n,"EndLabelPreprocessor/lambda$2$Type",1564),sDn(1565,1,QZn,cg),uZn.Cd=function(n){aq(this.a,uG(n,72))},zW(d6n,"EndLabelPreprocessor/lambda$3$Type",1565),sDn(1566,1,y1n,le),uZn.Mb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),rxt))},zW(d6n,"EndLabelPreprocessor/lambda$4$Type",1566),sDn(1567,1,QZn,ag),uZn.Cd=function(n){aq(this.a,uG(n,72))},zW(d6n,"EndLabelPreprocessor/lambda$5$Type",1567),sDn(1615,1,Q4n,_f),uZn.Kf=function(n,t){Ddn(uG(n,36),t)},zW(d6n,"EndLabelSorter",1615),sDn(1616,1,b2n,be),uZn.Ne=function(n,t){return okn(uG(n,465),uG(t,465))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"EndLabelSorter/1",1616),sDn(465,1,{465:1},oZ),zW(d6n,"EndLabelSorter/LabelGroup",465),sDn(1617,1,{},we),uZn.Kb=function(n){return VS(),new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"EndLabelSorter/lambda$0$Type",1617),sDn(1618,1,y1n,de),uZn.Mb=function(n){return VS(),uG(n,10).k==(zIn(),dbt)},zW(d6n,"EndLabelSorter/lambda$1$Type",1618),sDn(1619,1,QZn,ge),uZn.Cd=function(n){VIn(uG(n,10))},zW(d6n,"EndLabelSorter/lambda$2$Type",1619),sDn(1620,1,y1n,pe),uZn.Mb=function(n){return VS(),xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),rxt))},zW(d6n,"EndLabelSorter/lambda$3$Type",1620),sDn(1621,1,y1n,me),uZn.Mb=function(n){return VS(),xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),cxt))},zW(d6n,"EndLabelSorter/lambda$4$Type",1621),sDn(1568,1,Q4n,ve),uZn.Kf=function(n,t){qXn(this,uG(n,36))},uZn.b=0,uZn.c=0,zW(d6n,"FinalSplineBendpointsCalculator",1568),sDn(1569,1,{},ke),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$0$Type",1569),sDn(1570,1,{},ye),uZn.Kb=function(n){return new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$1$Type",1570),sDn(1571,1,y1n,Me),uZn.Mb=function(n){return!v9(uG(n,18))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$2$Type",1571),sDn(1572,1,y1n,Te),uZn.Mb=function(n){return vR(uG(n,18),(GYn(),Tmt))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$3$Type",1572),sDn(1573,1,QZn,og),uZn.Cd=function(n){ZHn(this.a,uG(n,131))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$4$Type",1573),sDn(1574,1,QZn,je),uZn.Cd=function(n){_An(uG(n,18).a)},zW(d6n,"FinalSplineBendpointsCalculator/lambda$5$Type",1574),sDn(803,1,Q4n,ug),uZn.Kf=function(n,t){fVn(this,uG(n,36),t)},zW(d6n,"GraphTransformer",803),sDn(517,22,{3:1,34:1,22:1,517:1},PC);var Lbt,Nbt,$bt,Dbt=_cn(d6n,"GraphTransformer/Mode",517,Oat,f1,zH);sDn(1575,1,Q4n,Ee),uZn.Kf=function(n,t){wRn(uG(n,36),t)},zW(d6n,"HierarchicalNodeResizingProcessor",1575),sDn(1576,1,Q4n,Se),uZn.Kf=function(n,t){don(uG(n,36),t)},zW(d6n,"HierarchicalPortConstraintProcessor",1576),sDn(1577,1,b2n,Pe),uZn.Ne=function(n,t){return wyn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"HierarchicalPortConstraintProcessor/NodeComparator",1577),sDn(1578,1,Q4n,Ce),uZn.Kf=function(n,t){HGn(uG(n,36),t)},zW(d6n,"HierarchicalPortDummySizeProcessor",1578),sDn(1579,1,Q4n,Ie),uZn.Kf=function(n,t){z_n(this,uG(n,36),t)},uZn.a=0,zW(d6n,"HierarchicalPortOrthogonalEdgeRouter",1579),sDn(1580,1,b2n,Oe),uZn.Ne=function(n,t){return Ox(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"HierarchicalPortOrthogonalEdgeRouter/1",1580),sDn(1581,1,b2n,Ae),uZn.Ne=function(n,t){return Dtn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"HierarchicalPortOrthogonalEdgeRouter/2",1581),sDn(1582,1,Q4n,Le),uZn.Kf=function(n,t){tIn(uG(n,36),t)},zW(d6n,"HierarchicalPortPositionProcessor",1582),sDn(1583,1,Q4n,Wf),uZn.Kf=function(n,t){SJn(this,uG(n,36))},uZn.a=0,uZn.c=0,zW(d6n,"HighDegreeNodeLayeringProcessor",1583),sDn(580,1,{580:1},Ne),uZn.b=-1,uZn.d=-1,zW(d6n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",580),sDn(1584,1,{},$e),uZn.Kb=function(n){return HB(),qgn(uG(n,10))},uZn.Fb=function(n){return this===n},zW(d6n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1584),sDn(1585,1,{},De),uZn.Kb=function(n){return HB(),Xgn(uG(n,10))},uZn.Fb=function(n){return this===n},zW(d6n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1585),sDn(1591,1,Q4n,xe),uZn.Kf=function(n,t){TGn(this,uG(n,36),t)},zW(d6n,"HyperedgeDummyMerger",1591),sDn(804,1,{},xB),uZn.a=!1,uZn.b=!1,uZn.c=!1,zW(d6n,"HyperedgeDummyMerger/MergeState",804),sDn(1592,1,{},Re),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"HyperedgeDummyMerger/lambda$0$Type",1592),sDn(1593,1,{},Ke),uZn.Kb=function(n){return new fX(null,new h3(uG(n,10).j,16))},zW(d6n,"HyperedgeDummyMerger/lambda$1$Type",1593),sDn(1594,1,QZn,Fe),uZn.Cd=function(n){uG(n,12).p=-1},zW(d6n,"HyperedgeDummyMerger/lambda$2$Type",1594),sDn(1595,1,Q4n,_e),uZn.Kf=function(n,t){kGn(uG(n,36),t)},zW(d6n,"HypernodesProcessor",1595),sDn(1596,1,Q4n,Be),uZn.Kf=function(n,t){_Gn(uG(n,36),t)},zW(d6n,"InLayerConstraintProcessor",1596),sDn(1597,1,Q4n,He),uZn.Kf=function(n,t){Nun(uG(n,36),t)},zW(d6n,"InnermostNodeMarginCalculator",1597),sDn(1598,1,Q4n,Ue),uZn.Kf=function(n,t){gQn(this,uG(n,36))},uZn.a=T0n,uZn.b=T0n,uZn.c=M0n,uZn.d=M0n;var xbt,Rbt,Kbt,Fbt,_bt,Bbt,Hbt,Ubt,Gbt,qbt,Xbt,zbt,Vbt,Wbt,Qbt,Jbt,Ybt,Zbt,nwt,twt,ewt,iwt,rwt,cwt,awt,owt,uwt,swt,hwt,fwt,lwt,bwt,wwt,dwt,gwt,pwt,mwt,vwt,kwt,ywt,Mwt,Twt,jwt,Ewt,Swt,Pwt,Cwt,Iwt,Owt,Awt,Lwt,Nwt,$wt,Dwt,xwt,Rwt,Kwt,Fwt=zW(d6n,"InteractiveExternalPortPositioner",1598);sDn(1599,1,{},Ge),uZn.Kb=function(n){return uG(n,18).d.i},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$0$Type",1599),sDn(1600,1,{},sg),uZn.Kb=function(n){return Lx(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$1$Type",1600),sDn(1601,1,{},qe),uZn.Kb=function(n){return uG(n,18).c.i},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$2$Type",1601),sDn(1602,1,{},hg),uZn.Kb=function(n){return Nx(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$3$Type",1602),sDn(1603,1,{},fg),uZn.Kb=function(n){return XF(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$4$Type",1603),sDn(1604,1,{},lg),uZn.Kb=function(n){return zF(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$5$Type",1604),sDn(81,22,{3:1,34:1,22:1,81:1,196:1},CC),uZn.dg=function(){switch(this.g){case 15:return new fc;case 22:return new lc;case 47:return new dc;case 28:case 35:return new ei;case 32:return new Yt;case 42:return new te;case 1:return new ee;case 41:return new ie;case 56:return new ug((Aun(),Obt));case 0:return new ug((Aun(),Ibt));case 2:return new re;case 54:return new ce;case 33:return new se;case 51:return new ve;case 55:return new Ee;case 13:return new Se;case 38:return new Ce;case 44:return new Ie;case 40:return new Le;case 9:return new Wf;case 49:return new Ux;case 37:return new xe;case 43:return new _e;case 27:return new Be;case 30:return new He;case 3:return new Ue;case 18:return new ze;case 29:return new Ve;case 5:return new Qf;case 50:return new Xe;case 34:return new Jf;case 36:return new ii;case 52:return new _f;case 11:return new ri;case 7:return new Yf;case 39:return new ci;case 45:return new ai;case 16:return new oi;case 10:return new RI;case 48:return new fi;case 21:return new li;case 23:return new zy((ean(),BEt));case 8:return new wi;case 12:return new gi;case 4:return new pi;case 19:return new rl;case 17:return new Pi;case 53:return new Ci;case 6:return new Bi;case 25:return new jk;case 46:return new $i;case 31:return new _F;case 14:return new Wi;case 26:return new Mc;case 20:return new nr;case 24:return new zy((ean(),HEt));default:throw hv(new vM(v6n+(null!=this.f?this.f:""+this.g)))}};var _wt,Bwt,Hwt,Uwt,Gwt,qwt,Xwt,zwt,Vwt=_cn(d6n,k6n,81,Oat,bKn,XB);sDn(1605,1,Q4n,ze),uZn.Kf=function(n,t){bQn(uG(n,36),t)},zW(d6n,"InvertedPortProcessor",1605),sDn(1606,1,Q4n,Ve),uZn.Kf=function(n,t){xHn(uG(n,36),t)},zW(d6n,"LabelAndNodeSizeProcessor",1606),sDn(1607,1,y1n,We),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"LabelAndNodeSizeProcessor/lambda$0$Type",1607),sDn(1608,1,y1n,Qe),uZn.Mb=function(n){return uG(n,10).k==(zIn(),lbt)},zW(d6n,"LabelAndNodeSizeProcessor/lambda$1$Type",1608),sDn(1609,1,QZn,KB),uZn.Cd=function(n){uP(this.b,this.a,this.c,uG(n,10))},uZn.a=!1,uZn.c=!1,zW(d6n,"LabelAndNodeSizeProcessor/lambda$2$Type",1609),sDn(1610,1,Q4n,Qf),uZn.Kf=function(n,t){EWn(uG(n,36),t)},zW(d6n,"LabelDummyInserter",1610),sDn(1611,1,A2n,Je),uZn.Lb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),ixt))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),ixt))},zW(d6n,"LabelDummyInserter/1",1611),sDn(1612,1,Q4n,Xe),uZn.Kf=function(n,t){eWn(uG(n,36),t)},zW(d6n,"LabelDummyRemover",1612),sDn(1613,1,y1n,Ye),uZn.Mb=function(n){return oM(gK(oIn(uG(n,72),(jYn(),qyt))))},zW(d6n,"LabelDummyRemover/lambda$0$Type",1613),sDn(1378,1,Q4n,Jf),uZn.Kf=function(n,t){UVn(this,uG(n,36),t)},uZn.a=null,zW(d6n,"LabelDummySwitcher",1378),sDn(292,1,{292:1},oHn),uZn.c=0,uZn.d=null,uZn.f=0,zW(d6n,"LabelDummySwitcher/LabelDummyInfo",292),sDn(1379,1,{},Ze),uZn.Kb=function(n){return Pun(),new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"LabelDummySwitcher/lambda$0$Type",1379),sDn(1380,1,y1n,ni),uZn.Mb=function(n){return Pun(),uG(n,10).k==(zIn(),bbt)},zW(d6n,"LabelDummySwitcher/lambda$1$Type",1380),sDn(1381,1,{},bg),uZn.Kb=function(n){return FK(this.a,uG(n,10))},zW(d6n,"LabelDummySwitcher/lambda$2$Type",1381),sDn(1382,1,QZn,wg),uZn.Cd=function(n){gQ(this.a,uG(n,292))},zW(d6n,"LabelDummySwitcher/lambda$3$Type",1382),sDn(1383,1,b2n,ti),uZn.Ne=function(n,t){return nV(uG(n,292),uG(t,292))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"LabelDummySwitcher/lambda$4$Type",1383),sDn(802,1,Q4n,ei),uZn.Kf=function(n,t){Dnn(uG(n,36),t)},zW(d6n,"LabelManagementProcessor",802),sDn(1614,1,Q4n,ii),uZn.Kf=function(n,t){jFn(uG(n,36),t)},zW(d6n,"LabelSideSelector",1614),sDn(1622,1,Q4n,ri),uZn.Kf=function(n,t){yqn(uG(n,36),t)},zW(d6n,"LayerConstraintPostprocessor",1622),sDn(1623,1,Q4n,Yf),uZn.Kf=function(n,t){vDn(uG(n,36),t)},zW(d6n,"LayerConstraintPreprocessor",1623),sDn(371,22,{3:1,34:1,22:1,371:1},IC);var Wwt,Qwt,Jwt,Ywt,Zwt,ndt,tdt,edt,idt,rdt,cdt,adt=_cn(d6n,"LayerConstraintPreprocessor/HiddenNodeConnections",371,Oat,G6,zB);sDn(1624,1,Q4n,ci),uZn.Kf=function(n,t){zzn(uG(n,36),t)},zW(d6n,"LayerSizeAndGraphHeightCalculator",1624),sDn(1625,1,Q4n,ai),uZn.Kf=function(n,t){dRn(uG(n,36),t)},zW(d6n,"LongEdgeJoiner",1625),sDn(1626,1,Q4n,oi),uZn.Kf=function(n,t){bzn(uG(n,36),t)},zW(d6n,"LongEdgeSplitter",1626),sDn(1627,1,Q4n,RI),uZn.Kf=function(n,t){VWn(this,uG(n,36),t)},uZn.e=0,uZn.f=0,uZn.j=0,uZn.k=0,uZn.n=0,uZn.o=0,zW(d6n,"NodePromotion",1627),sDn(1628,1,b2n,ui),uZn.Ne=function(n,t){return $ln(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"NodePromotion/1",1628),sDn(1629,1,b2n,si),uZn.Ne=function(n,t){return Dln(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"NodePromotion/2",1629),sDn(1630,1,{},hi),uZn.Kb=function(n){return uG(n,42),UB(),qx(),!0},uZn.Fb=function(n){return this===n},zW(d6n,"NodePromotion/lambda$0$Type",1630),sDn(1631,1,{},mg),uZn.Kb=function(n){return P0(this.a,uG(n,42))},uZn.Fb=function(n){return this===n},uZn.a=0,zW(d6n,"NodePromotion/lambda$1$Type",1631),sDn(1632,1,{},vg),uZn.Kb=function(n){return S0(this.a,uG(n,42))},uZn.Fb=function(n){return this===n},uZn.a=0,zW(d6n,"NodePromotion/lambda$2$Type",1632),sDn(1633,1,Q4n,fi),uZn.Kf=function(n,t){wJn(uG(n,36),t)},zW(d6n,"NorthSouthPortPostprocessor",1633),sDn(1634,1,Q4n,li),uZn.Kf=function(n,t){FQn(uG(n,36),t)},zW(d6n,"NorthSouthPortPreprocessor",1634),sDn(1635,1,b2n,bi),uZn.Ne=function(n,t){return Qsn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"NorthSouthPortPreprocessor/lambda$0$Type",1635),sDn(1636,1,Q4n,wi),uZn.Kf=function(n,t){UUn(uG(n,36),t)},zW(d6n,"PartitionMidprocessor",1636),sDn(1637,1,y1n,di),uZn.Mb=function(n){return vR(uG(n,10),(jYn(),UMt))},zW(d6n,"PartitionMidprocessor/lambda$0$Type",1637),sDn(1638,1,QZn,kg),uZn.Cd=function(n){zY(this.a,uG(n,10))},zW(d6n,"PartitionMidprocessor/lambda$1$Type",1638),sDn(1639,1,Q4n,gi),uZn.Kf=function(n,t){JRn(uG(n,36),t)},zW(d6n,"PartitionPostprocessor",1639),sDn(1640,1,Q4n,pi),uZn.Kf=function(n,t){M$n(uG(n,36),t)},zW(d6n,"PartitionPreprocessor",1640),sDn(1641,1,y1n,mi),uZn.Mb=function(n){return vR(uG(n,10),(jYn(),UMt))},zW(d6n,"PartitionPreprocessor/lambda$0$Type",1641),sDn(1642,1,{},vi),uZn.Kb=function(n){return new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(d6n,"PartitionPreprocessor/lambda$1$Type",1642),sDn(1643,1,y1n,ki),uZn.Mb=function(n){return pkn(uG(n,18))},zW(d6n,"PartitionPreprocessor/lambda$2$Type",1643),sDn(1644,1,QZn,yi),uZn.Cd=function(n){rfn(uG(n,18))},zW(d6n,"PartitionPreprocessor/lambda$3$Type",1644),sDn(1645,1,Q4n,rl),uZn.Kf=function(n,t){wUn(uG(n,36),t)},zW(d6n,"PortListSorter",1645),sDn(1648,1,b2n,Mi),uZn.Ne=function(n,t){return Q5(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"PortListSorter/lambda$0$Type",1648),sDn(1650,1,b2n,Ti),uZn.Ne=function(n,t){return hGn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"PortListSorter/lambda$1$Type",1650),sDn(1646,1,{},ji),uZn.Kb=function(n){return Cln(),uG(n,12).e},zW(d6n,"PortListSorter/lambda$2$Type",1646),sDn(1647,1,{},Ei),uZn.Kb=function(n){return Cln(),uG(n,12).g},zW(d6n,"PortListSorter/lambda$3$Type",1647),sDn(1649,1,b2n,Si),uZn.Ne=function(n,t){return bjn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"PortListSorter/lambda$4$Type",1649),sDn(1651,1,Q4n,Pi),uZn.Kf=function(n,t){FDn(uG(n,36),t)},zW(d6n,"PortSideProcessor",1651),sDn(1652,1,Q4n,Ci),uZn.Kf=function(n,t){SBn(uG(n,36),t)},zW(d6n,"ReversedEdgeRestorer",1652),sDn(1657,1,Q4n,jk),uZn.Kf=function(n,t){kTn(this,uG(n,36),t)},zW(d6n,"SelfLoopPortRestorer",1657),sDn(1658,1,{},Ii),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"SelfLoopPortRestorer/lambda$0$Type",1658),sDn(1659,1,y1n,Oi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SelfLoopPortRestorer/lambda$1$Type",1659),sDn(1660,1,y1n,Ai),uZn.Mb=function(n){return vR(uG(n,10),(GYn(),vmt))},zW(d6n,"SelfLoopPortRestorer/lambda$2$Type",1660),sDn(1661,1,{},Li),uZn.Kb=function(n){return uG(oIn(uG(n,10),(GYn(),vmt)),337)},zW(d6n,"SelfLoopPortRestorer/lambda$3$Type",1661),sDn(1662,1,QZn,gg),uZn.Cd=function(n){gOn(this.a,uG(n,337))},zW(d6n,"SelfLoopPortRestorer/lambda$4$Type",1662),sDn(805,1,QZn,Ni),uZn.Cd=function(n){BOn(uG(n,105))},zW(d6n,"SelfLoopPortRestorer/lambda$5$Type",805),sDn(1663,1,Q4n,$i),uZn.Kf=function(n,t){oyn(uG(n,36),t)},zW(d6n,"SelfLoopPostProcessor",1663),sDn(1664,1,{},Di),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"SelfLoopPostProcessor/lambda$0$Type",1664),sDn(1665,1,y1n,xi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SelfLoopPostProcessor/lambda$1$Type",1665),sDn(1666,1,y1n,Ri),uZn.Mb=function(n){return vR(uG(n,10),(GYn(),vmt))},zW(d6n,"SelfLoopPostProcessor/lambda$2$Type",1666),sDn(1667,1,QZn,Ki),uZn.Cd=function(n){gSn(uG(n,10))},zW(d6n,"SelfLoopPostProcessor/lambda$3$Type",1667),sDn(1668,1,{},Fi),uZn.Kb=function(n){return new fX(null,new h3(uG(n,105).f,1))},zW(d6n,"SelfLoopPostProcessor/lambda$4$Type",1668),sDn(1669,1,QZn,dg),uZn.Cd=function(n){V6(this.a,uG(n,340))},zW(d6n,"SelfLoopPostProcessor/lambda$5$Type",1669),sDn(1670,1,y1n,_i),uZn.Mb=function(n){return!!uG(n,105).i},zW(d6n,"SelfLoopPostProcessor/lambda$6$Type",1670),sDn(1671,1,QZn,pg),uZn.Cd=function(n){eM(this.a,uG(n,105))},zW(d6n,"SelfLoopPostProcessor/lambda$7$Type",1671),sDn(1653,1,Q4n,Bi),uZn.Kf=function(n,t){Fxn(uG(n,36),t)},zW(d6n,"SelfLoopPreProcessor",1653),sDn(1654,1,{},Hi),uZn.Kb=function(n){return new fX(null,new h3(uG(n,105).f,1))},zW(d6n,"SelfLoopPreProcessor/lambda$0$Type",1654),sDn(1655,1,{},Ui),uZn.Kb=function(n){return uG(n,340).a},zW(d6n,"SelfLoopPreProcessor/lambda$1$Type",1655),sDn(1656,1,QZn,Gi),uZn.Cd=function(n){v$(uG(n,18))},zW(d6n,"SelfLoopPreProcessor/lambda$2$Type",1656),sDn(1672,1,Q4n,_F),uZn.Kf=function(n,t){xIn(this,uG(n,36),t)},zW(d6n,"SelfLoopRouter",1672),sDn(1673,1,{},qi),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"SelfLoopRouter/lambda$0$Type",1673),sDn(1674,1,y1n,Xi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SelfLoopRouter/lambda$1$Type",1674),sDn(1675,1,y1n,zi),uZn.Mb=function(n){return vR(uG(n,10),(GYn(),vmt))},zW(d6n,"SelfLoopRouter/lambda$2$Type",1675),sDn(1676,1,{},Vi),uZn.Kb=function(n){return uG(oIn(uG(n,10),(GYn(),vmt)),337)},zW(d6n,"SelfLoopRouter/lambda$3$Type",1676),sDn(1677,1,QZn,OC),uZn.Cd=function(n){lY(this.a,this.b,uG(n,337))},zW(d6n,"SelfLoopRouter/lambda$4$Type",1677),sDn(1678,1,Q4n,Wi),uZn.Kf=function(n,t){tFn(uG(n,36),t)},zW(d6n,"SemiInteractiveCrossMinProcessor",1678),sDn(1679,1,y1n,Qi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1679),sDn(1680,1,y1n,Ji),uZn.Mb=function(n){return MX(uG(n,10))._b((jYn(),rTt))},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1680),sDn(1681,1,b2n,Yi),uZn.Ne=function(n,t){return Eon(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1681),sDn(1682,1,{},Zi),uZn.Ve=function(n,t){return VY(uG(n,10),uG(t,10))},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1682),sDn(1684,1,Q4n,nr),uZn.Kf=function(n,t){MXn(uG(n,36),t)},zW(d6n,"SortByInputModelProcessor",1684),sDn(1685,1,y1n,tr),uZn.Mb=function(n){return 0!=uG(n,12).g.c.length},zW(d6n,"SortByInputModelProcessor/lambda$0$Type",1685),sDn(1686,1,QZn,yg),uZn.Cd=function(n){ZOn(this.a,uG(n,12))},zW(d6n,"SortByInputModelProcessor/lambda$1$Type",1686),sDn(1759,817,{},Kon),uZn.df=function(n){var t,e,i,r;switch(this.c=n,this.a.g){case 2:t=new Zm,kS(JJ(new fX(null,new h3(this.c.a.b,16)),new dr),new BC(this,t)),QAn(this,new ir),Prn(t,new rr),t.c.length=0,kS(JJ(new fX(null,new h3(this.c.a.b,16)),new cr),new Tg(t)),QAn(this,new ar),Prn(t,new or),t.c.length=0,e=w$(Tun(ZJ(new fX(null,new h3(this.c.a.b,16)),new jg(this))),new ur),kS(new fX(null,new h3(this.c.a.a,16)),new NC(e,t)),QAn(this,new hr),Prn(t,new fr),t.c.length=0;break;case 3:i=new Zm,QAn(this,new er),r=w$(Tun(ZJ(new fX(null,new h3(this.c.a.b,16)),new Mg(this))),new sr),kS(JJ(new fX(null,new h3(this.c.a.b,16)),new lr),new DC(r,i)),QAn(this,new br),Prn(i,new wr),i.c.length=0;break;default:throw hv(new Hv)}},uZn.b=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation",1759),sDn(1760,1,A2n,er),uZn.Lb=function(n){return F$(uG(n,60).g,154)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return F$(uG(n,60).g,154)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1760),sDn(1761,1,{},Mg),uZn.Ye=function(n){return $Ln(this.a,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1761),sDn(1769,1,M1n,AC),uZn.de=function(){TEn(this.a,this.b,-1)},uZn.b=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1769),sDn(1771,1,A2n,ir),uZn.Lb=function(n){return F$(uG(n,60).g,154)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return F$(uG(n,60).g,154)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1771),sDn(1772,1,QZn,rr),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1772),sDn(1773,1,y1n,cr),uZn.Mb=function(n){return F$(uG(n,60).g,10)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1773),sDn(1775,1,QZn,Tg),uZn.Cd=function(n){tpn(this.a,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1775),sDn(1774,1,M1n,xC),uZn.de=function(){TEn(this.b,this.a,-1)},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1774),sDn(1776,1,A2n,ar),uZn.Lb=function(n){return F$(uG(n,60).g,10)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return F$(uG(n,60).g,10)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1776),sDn(1777,1,QZn,or),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1777),sDn(1778,1,{},jg),uZn.Ye=function(n){return DLn(this.a,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1778),sDn(1779,1,{},ur),uZn.We=function(){return 0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1779),sDn(1762,1,{},sr),uZn.We=function(){return 0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1762),sDn(1781,1,QZn,NC),uZn.Cd=function(n){uz(this.a,this.b,uG(n,316))},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1781),sDn(1780,1,M1n,$C),uZn.de=function(){HDn(this.a,this.b,-1)},uZn.b=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1780),sDn(1782,1,A2n,hr),uZn.Lb=function(n){return uG(n,60),!0},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return uG(n,60),!0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1782),sDn(1783,1,QZn,fr),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1783),sDn(1763,1,y1n,lr),uZn.Mb=function(n){return F$(uG(n,60).g,10)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1763),sDn(1765,1,QZn,DC),uZn.Cd=function(n){sz(this.a,this.b,uG(n,60))},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1765),sDn(1764,1,M1n,RC),uZn.de=function(){TEn(this.b,this.a,-1)},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1764),sDn(1766,1,A2n,br),uZn.Lb=function(n){return uG(n,60),!0},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return uG(n,60),!0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1766),sDn(1767,1,QZn,wr),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1767),sDn(1768,1,y1n,dr),uZn.Mb=function(n){return F$(uG(n,60).g,154)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1768),sDn(1770,1,QZn,BC),uZn.Cd=function(n){mrn(this.a,this.b,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1770),sDn(1586,1,Q4n,Ux),uZn.Kf=function(n,t){Mzn(this,uG(n,36),t)},zW(E6n,"HorizontalGraphCompactor",1586),sDn(1587,1,{},Eg),uZn.ff=function(n,t){var e,i;return $en(n,t)?0:(e=z4(n),i=z4(t),e&&e.k==(zIn(),lbt)||i&&i.k==(zIn(),lbt)?0:_x(uG(oIn(this.a.a,(GYn(),kmt)),312),e?e.k:(zIn(),wbt),i?i.k:(zIn(),wbt)))},uZn.gf=function(n,t){var e,i;return $en(n,t)?1:(e=z4(n),i=z4(t),Bx(uG(oIn(this.a.a,(GYn(),kmt)),312),e?e.k:(zIn(),wbt),i?i.k:(zIn(),wbt)))},zW(E6n,"HorizontalGraphCompactor/1",1587),sDn(1588,1,{},gr),uZn.ef=function(n,t){return JS(),0==n.a.i},zW(E6n,"HorizontalGraphCompactor/lambda$0$Type",1588),sDn(1589,1,{},Sg),uZn.ef=function(n,t){return ZY(this.a,n,t)},zW(E6n,"HorizontalGraphCompactor/lambda$1$Type",1589),sDn(1730,1,{},Sen),zW(E6n,"LGraphToCGraphTransformer",1730),sDn(1738,1,y1n,pr),uZn.Mb=function(n){return null!=n},zW(E6n,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1738),sDn(1731,1,{},mr),uZn.Kb=function(n){return GB(),cpn(oIn(uG(uG(n,60).g,10),(GYn(),rmt)))},zW(E6n,"LGraphToCGraphTransformer/lambda$0$Type",1731),sDn(1732,1,{},vr),uZn.Kb=function(n){return GB(),_wn(uG(uG(n,60).g,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$1$Type",1732),sDn(1741,1,y1n,kr),uZn.Mb=function(n){return GB(),F$(uG(n,60).g,10)},zW(E6n,"LGraphToCGraphTransformer/lambda$10$Type",1741),sDn(1742,1,QZn,yr),uZn.Cd=function(n){jZ(uG(n,60))},zW(E6n,"LGraphToCGraphTransformer/lambda$11$Type",1742),sDn(1743,1,y1n,Mr),uZn.Mb=function(n){return GB(),F$(uG(n,60).g,154)},zW(E6n,"LGraphToCGraphTransformer/lambda$12$Type",1743),sDn(1747,1,QZn,Tr),uZn.Cd=function(n){Fwn(uG(n,60))},zW(E6n,"LGraphToCGraphTransformer/lambda$13$Type",1747),sDn(1744,1,QZn,Pg),uZn.Cd=function(n){WL(this.a,uG(n,8))},uZn.a=0,zW(E6n,"LGraphToCGraphTransformer/lambda$14$Type",1744),sDn(1745,1,QZn,Cg),uZn.Cd=function(n){JL(this.a,uG(n,116))},uZn.a=0,zW(E6n,"LGraphToCGraphTransformer/lambda$15$Type",1745),sDn(1746,1,QZn,Ig),uZn.Cd=function(n){QL(this.a,uG(n,8))},uZn.a=0,zW(E6n,"LGraphToCGraphTransformer/lambda$16$Type",1746),sDn(1748,1,{},jr),uZn.Kb=function(n){return GB(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(E6n,"LGraphToCGraphTransformer/lambda$17$Type",1748),sDn(1749,1,y1n,Er),uZn.Mb=function(n){return GB(),v9(uG(n,18))},zW(E6n,"LGraphToCGraphTransformer/lambda$18$Type",1749),sDn(1750,1,QZn,Og),uZn.Cd=function(n){fin(this.a,uG(n,18))},zW(E6n,"LGraphToCGraphTransformer/lambda$19$Type",1750),sDn(1734,1,QZn,Ag),uZn.Cd=function(n){Q3(this.a,uG(n,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$2$Type",1734),sDn(1751,1,{},Sr),uZn.Kb=function(n){return GB(),new fX(null,new h3(uG(n,30).a,16))},zW(E6n,"LGraphToCGraphTransformer/lambda$20$Type",1751),sDn(1752,1,{},Pr),uZn.Kb=function(n){return GB(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(E6n,"LGraphToCGraphTransformer/lambda$21$Type",1752),sDn(1753,1,{},Cr),uZn.Kb=function(n){return GB(),uG(oIn(uG(n,18),(GYn(),Tmt)),15)},zW(E6n,"LGraphToCGraphTransformer/lambda$22$Type",1753),sDn(1754,1,y1n,Ir),uZn.Mb=function(n){return Hx(uG(n,15))},zW(E6n,"LGraphToCGraphTransformer/lambda$23$Type",1754),sDn(1755,1,QZn,Lg),uZn.Cd=function(n){pLn(this.a,uG(n,15))},zW(E6n,"LGraphToCGraphTransformer/lambda$24$Type",1755),sDn(1733,1,QZn,HC),uZn.Cd=function(n){P5(this.a,this.b,uG(n,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$3$Type",1733),sDn(1735,1,{},Or),uZn.Kb=function(n){return GB(),new fX(null,new h3(uG(n,30).a,16))},zW(E6n,"LGraphToCGraphTransformer/lambda$4$Type",1735),sDn(1736,1,{},Ar),uZn.Kb=function(n){return GB(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(E6n,"LGraphToCGraphTransformer/lambda$5$Type",1736),sDn(1737,1,{},Lr),uZn.Kb=function(n){return GB(),uG(oIn(uG(n,18),(GYn(),Tmt)),15)},zW(E6n,"LGraphToCGraphTransformer/lambda$6$Type",1737),sDn(1739,1,QZn,Ng),uZn.Cd=function(n){xLn(this.a,uG(n,15))},zW(E6n,"LGraphToCGraphTransformer/lambda$8$Type",1739),sDn(1740,1,QZn,UC),uZn.Cd=function(n){k$(this.a,this.b,uG(n,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$9$Type",1740),sDn(1729,1,{},Nr),uZn.cf=function(n){var t,e,i,r,c;for(this.a=n,this.d=new ak,this.c=Inn(Tst,EZn,125,this.a.a.a.c.length,0,1),this.b=0,e=new Ww(this.a.a.a);e.a<e.c.c.length;)(t=uG(N3(e),316)).d=this.b,c=jx(KS(new sk,t),this.d),this.c[this.b]=c,++this.b;for(mWn(this),WQn(this),HRn(this),YHn(_B(this.d),new fy),r=new Ww(this.a.a.b);r.a<r.c.c.length;)(i=uG(N3(r),60)).d.c=this.c[i.a.d].e+i.b.a},uZn.b=0,zW(E6n,"NetworkSimplexCompaction",1729),sDn(154,1,{34:1,154:1},Hqn),uZn.Fd=function(n){return Oin(this,uG(n,154))},uZn.Ib=function(){return _wn(this)},zW(E6n,"VerticalSegment",154),sDn(841,1,{},IPn),uZn.c=0,uZn.e=0,uZn.i=0,zW(S6n,"BetweenLayerEdgeTwoNodeCrossingsCounter",841),sDn(677,1,{677:1},Uun),uZn.Ib=function(){return"AdjacencyList [node="+this.d+", adjacencies= "+this.a+"]"},uZn.b=0,uZn.c=0,uZn.f=0,zW(S6n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList",677),sDn(293,1,{34:1,293:1},$R),uZn.Fd=function(n){return lq(this,uG(n,293))},uZn.Ib=function(){return"Adjacency [position="+this.c+", cardinality="+this.a+", currentCardinality="+this.b+"]"},uZn.a=0,uZn.b=0,uZn.c=0,zW(S6n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency",293),sDn(2026,1,{},_On),uZn.b=0,uZn.e=!1,zW(S6n,"CrossingMatrixFiller",2026);var odt,udt,sdt,hdt,fdt=Iq(P6n,"IInitializable");sDn(1867,1,C6n,qC),uZn.gg=function(n,t,e,i,r,c){},uZn.ig=function(n,t,e){},uZn.eg=function(){return this.c!=(ean(),BEt)},uZn.fg=function(){this.e=Inn(YHt,W1n,28,this.d,15,1)},uZn.hg=function(n,t){t[n][0].c.p=n},uZn.jg=function(n,t,e,i){++this.d},uZn.kg=function(){return!0},uZn.lg=function(n,t,e,i){return iwn(this,n,t,e),p8(this,t)},uZn.mg=function(n,t){var e;return iwn(this,n,e=OT(t,n.length),t),Tfn(this,e)},uZn.d=0,zW(S6n,"GreedySwitchHeuristic",1867),sDn(2029,1,{},sX),uZn.b=0,uZn.d=0,zW(S6n,"NorthSouthEdgeNeighbouringNodeCrossingsCounter",2029),sDn(2016,1,{},eBn),uZn.a=!1,zW(S6n,"SwitchDecider",2016),sDn(105,1,{105:1},cAn),uZn.a=null,uZn.c=null,uZn.i=null,zW(I6n,"SelfHyperLoop",105),sDn(2013,1,{},vkn),uZn.c=0,uZn.e=0,zW(I6n,"SelfHyperLoopLabels",2013),sDn(421,22,{3:1,34:1,22:1,421:1},XC);var ldt,bdt,wdt,ddt,gdt,pdt,mdt=_cn(I6n,"SelfHyperLoopLabels/Alignment",421,Oat,U6,VB);sDn(340,1,{340:1},m7),zW(I6n,"SelfLoopEdge",340),sDn(337,1,{337:1},kkn),uZn.a=!1,zW(I6n,"SelfLoopHolder",337),sDn(1790,1,y1n,qr),uZn.Mb=function(n){return v9(uG(n,18))},zW(I6n,"SelfLoopHolder/lambda$0$Type",1790),sDn(113,1,{113:1},Bkn),uZn.a=!1,uZn.c=!1,zW(I6n,"SelfLoopPort",113),sDn(1855,1,y1n,Xr),uZn.Mb=function(n){return v9(uG(n,18))},zW(I6n,"SelfLoopPort/lambda$0$Type",1855),sDn(375,22,{3:1,34:1,22:1,375:1},zC);var vdt,kdt,ydt,Mdt,Tdt,jdt,Edt,Sdt,Pdt=_cn(I6n,"SelfLoopType",375,Oat,s9,WB);sDn(1798,1,{},sl),zW(O6n,"PortRestorer",1798),sDn(372,22,{3:1,34:1,22:1,372:1},VC);var Cdt,Idt,Odt,Adt,Ldt,Ndt,$dt,Ddt,xdt,Rdt=_cn(O6n,"PortRestorer/PortSideArea",372,Oat,_2,qB);sDn(1799,1,{},Dr),uZn.Kb=function(n){return jIn(),uG(n,15).Oc()},zW(O6n,"PortRestorer/lambda$0$Type",1799),sDn(1800,1,QZn,xr),uZn.Cd=function(n){jIn(),uG(n,113).c=!1},zW(O6n,"PortRestorer/lambda$1$Type",1800),sDn(1809,1,y1n,Rr),uZn.Mb=function(n){return jIn(),uG(n,12).j==(KQn(),_Rt)},zW(O6n,"PortRestorer/lambda$10$Type",1809),sDn(1810,1,{},Kr),uZn.Kb=function(n){return jIn(),uG(n,113).d},zW(O6n,"PortRestorer/lambda$11$Type",1810),sDn(1811,1,QZn,$g),uZn.Cd=function(n){ZT(this.a,uG(n,12))},zW(O6n,"PortRestorer/lambda$12$Type",1811),sDn(1801,1,QZn,Dg),uZn.Cd=function(n){SR(this.a,uG(n,105))},zW(O6n,"PortRestorer/lambda$2$Type",1801),sDn(1802,1,b2n,Fr),uZn.Ne=function(n,t){return wcn(uG(n,113),uG(t,113))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O6n,"PortRestorer/lambda$3$Type",1802),sDn(1803,1,y1n,_r),uZn.Mb=function(n){return jIn(),uG(n,113).c},zW(O6n,"PortRestorer/lambda$4$Type",1803),sDn(1804,1,y1n,Br),uZn.Mb=function(n){return Vun(uG(n,12))},zW(O6n,"PortRestorer/lambda$5$Type",1804),sDn(1805,1,y1n,$r),uZn.Mb=function(n){return jIn(),uG(n,12).j==(KQn(),yRt)},zW(O6n,"PortRestorer/lambda$6$Type",1805),sDn(1806,1,y1n,Hr),uZn.Mb=function(n){return jIn(),uG(n,12).j==(KQn(),kRt)},zW(O6n,"PortRestorer/lambda$7$Type",1806),sDn(1807,1,y1n,Ur),uZn.Mb=function(n){return z6(uG(n,12))},zW(O6n,"PortRestorer/lambda$8$Type",1807),sDn(1808,1,y1n,Gr),uZn.Mb=function(n){return jIn(),uG(n,12).j==(KQn(),KRt)},zW(O6n,"PortRestorer/lambda$9$Type",1808),sDn(276,22,{3:1,34:1,22:1,276:1},yY);var Kdt,Fdt,_dt,Bdt,Hdt,Udt,Gdt,qdt,Xdt=_cn(O6n,"PortSideAssigner/Target",276,Oat,drn,QB);sDn(1791,1,{},Vr),uZn.Kb=function(n){return JJ(new fX(null,new h3(uG(n,105).j,16)),new Zr)},zW(O6n,"PortSideAssigner/lambda$1$Type",1791),sDn(1792,1,{},Wr),uZn.Kb=function(n){return uG(n,113).d},zW(O6n,"PortSideAssigner/lambda$2$Type",1792),sDn(1793,1,QZn,Qr),uZn.Cd=function(n){NLn(uG(n,12),(KQn(),yRt))},zW(O6n,"PortSideAssigner/lambda$3$Type",1793),sDn(1794,1,{},Jr),uZn.Kb=function(n){return uG(n,113).d},zW(O6n,"PortSideAssigner/lambda$4$Type",1794),sDn(1795,1,QZn,xg),uZn.Cd=function(n){yv(this.a,uG(n,12))},zW(O6n,"PortSideAssigner/lambda$5$Type",1795),sDn(1796,1,b2n,zr),uZn.Ne=function(n,t){return YQ(uG(n,105),uG(t,105))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O6n,"PortSideAssigner/lambda$6$Type",1796),sDn(1797,1,b2n,Yr),uZn.Ne=function(n,t){return EG(uG(n,113),uG(t,113))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O6n,"PortSideAssigner/lambda$7$Type",1797),sDn(820,1,y1n,Zr),uZn.Mb=function(n){return uG(n,113).c},zW(O6n,"PortSideAssigner/lambda$8$Type",820),sDn(2108,1,{}),zW(A6n,"AbstractSelfLoopRouter",2108),sDn(1816,1,b2n,nc),uZn.Ne=function(n,t){return P_(uG(n,105),uG(t,105))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(A6n,t3n,1816),sDn(1817,1,b2n,tc),uZn.Ne=function(n,t){return S_(uG(n,105),uG(t,105))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(A6n,e3n,1817),sDn(1856,2108,{},ec),uZn.ng=function(n,t,e){return e},zW(A6n,"OrthogonalSelfLoopRouter",1856),sDn(1858,1,QZn,GC),uZn.Cd=function(n){Jvn(this.b,this.a,uG(n,8))},zW(A6n,"OrthogonalSelfLoopRouter/lambda$0$Type",1858),sDn(1857,1856,{},ic),uZn.ng=function(n,t,e){var i,r;return sR(e,0,JF(D$((i=n.c.d).n),i.a)),aq(e,JF(D$((r=n.d.d).n),r.a)),NUn(e)},zW(A6n,"PolylineSelfLoopRouter",1857),sDn(1812,1,{},hl),uZn.a=null,zW(A6n,"RoutingDirector",1812),sDn(1813,1,b2n,rc),uZn.Ne=function(n,t){return MG(uG(n,113),uG(t,113))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(A6n,"RoutingDirector/lambda$0$Type",1813),sDn(1814,1,{},cc),uZn.Kb=function(n){return YS(),uG(n,105).j},zW(A6n,"RoutingDirector/lambda$1$Type",1814),sDn(1815,1,QZn,ac),uZn.Cd=function(n){YS(),uG(n,15).jd(Fdt)},zW(A6n,"RoutingDirector/lambda$2$Type",1815),sDn(1818,1,{},oc),zW(A6n,"RoutingSlotAssigner",1818),sDn(1819,1,y1n,Rg),uZn.Mb=function(n){return wA(this.a,uG(n,105))},zW(A6n,"RoutingSlotAssigner/lambda$0$Type",1819),sDn(1820,1,b2n,Kg),uZn.Ne=function(n,t){return bX(this.a,uG(n,105),uG(t,105))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(A6n,"RoutingSlotAssigner/lambda$1$Type",1820),sDn(1859,1856,{},uc),uZn.ng=function(n,t,e){var i,r,c,a;return i=uM(pK(eyn(n.b.g.b,(jYn(),pTt)))),Xxn(n,t,e,a=new UR(Uhn(cT(PNt,1),zZn,8,0,[(c=n.c.d,JF(new eN(c.n),c.a))])),i),aq(a,JF(new eN((r=n.d.d).n),r.a)),$Mn(new jqn(a))},zW(A6n,"SplineSelfLoopRouter",1859),sDn(586,1,b2n,xon,KG),uZn.Ne=function(n,t){return rYn(this,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(L6n,"ModelOrderNodeComparator",586),sDn(1821,1,y1n,sc),uZn.Mb=function(n){return 0!=uG(n,12).e.c.length},zW(L6n,"ModelOrderNodeComparator/lambda$0$Type",1821),sDn(821,1,b2n,Gbn,j6),uZn.Ne=function(n,t){return Jz(this,n,t)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},uZn.b=!1,zW(L6n,"ModelOrderPortComparator",821),sDn(815,1,{},hc),uZn.og=function(n,t){var i,r,c,a;for(c=hOn(t),i=new Zm,a=t.f/c,r=1;r<c;++r)kD(i,xwn(pz(Bsn(e.Math.round(r*a)))));return i},uZn.pg=function(){return!1},zW(N6n,"ARDCutIndexHeuristic",815),sDn(1544,1,Q4n,fc),uZn.Kf=function(n,t){mHn(uG(n,36),t)},zW(N6n,"BreakingPointInserter",1544),sDn(313,1,{313:1},O5),uZn.Ib=function(){var n;return(n=new WM).a+="BPInfo[",n.a+="\n\tstart=",QA(n,this.i),n.a+="\n\tend=",QA(n,this.a),n.a+="\n\tnodeStartEdge=",QA(n,this.e),n.a+="\n\tstartEndEdge=",QA(n,this.j),n.a+="\n\toriginalEdge=",QA(n,this.f),n.a+="\n\tstartInLayerDummy=",QA(n,this.k),n.a+="\n\tstartInLayerEdge=",QA(n,this.n),n.a+="\n\tendInLayerDummy=",QA(n,this.b),n.a+="\n\tendInLayerEdge=",QA(n,this.c),n.a},zW(N6n,"BreakingPointInserter/BPInfo",313),sDn(661,1,{661:1},Vg),uZn.a=!1,uZn.b=0,uZn.c=0,zW(N6n,"BreakingPointInserter/Cut",661),sDn(1545,1,Q4n,lc),uZn.Kf=function(n,t){rRn(uG(n,36),t)},zW(N6n,"BreakingPointProcessor",1545),sDn(1546,1,y1n,bc),uZn.Mb=function(n){return Lin(uG(n,10))},zW(N6n,"BreakingPointProcessor/0methodref$isEnd$Type",1546),sDn(1547,1,y1n,wc),uZn.Mb=function(n){return Nin(uG(n,10))},zW(N6n,"BreakingPointProcessor/1methodref$isStart$Type",1547),sDn(1548,1,Q4n,dc),uZn.Kf=function(n,t){URn(this,uG(n,36),t)},zW(N6n,"BreakingPointRemover",1548),sDn(1549,1,QZn,gc),uZn.Cd=function(n){uG(n,131).k=!0},zW(N6n,"BreakingPointRemover/lambda$0$Type",1549),sDn(811,1,{},dDn),uZn.b=0,uZn.e=0,uZn.f=0,uZn.j=0,zW(N6n,"GraphStats",811),sDn(812,1,{},pc),uZn.Ve=function(n,t){return e.Math.max(uM(pK(n)),uM(pK(t)))},zW(N6n,"GraphStats/0methodref$max$Type",812),sDn(813,1,{},mc),uZn.Ve=function(n,t){return e.Math.max(uM(pK(n)),uM(pK(t)))},zW(N6n,"GraphStats/2methodref$max$Type",813),sDn(1726,1,{},vc),uZn.Ve=function(n,t){return TU(pK(n),pK(t))},zW(N6n,"GraphStats/lambda$1$Type",1726),sDn(1727,1,{},Fg),uZn.Kb=function(n){return Hkn(this.a,uG(n,30))},zW(N6n,"GraphStats/lambda$2$Type",1727),sDn(1728,1,{},_g),uZn.Kb=function(n){return FRn(this.a,uG(n,30))},zW(N6n,"GraphStats/lambda$6$Type",1728),sDn(814,1,{},kc),uZn.og=function(n,t){return uG(oIn(n,(jYn(),FTt)),15)||(hZ(),hZ(),zot)},uZn.pg=function(){return!1},zW(N6n,"ICutIndexCalculator/ManualCutIndexCalculator",814),sDn(816,1,{},yc),uZn.og=function(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(null==t.n&&TTn(t),y=t.n,null==t.d&&TTn(t),s=t.d,(k=Inn(eUt,I0n,28,y.length,15,1))[0]=y[0],m=y[0],h=1;h<y.length;h++)k[h]=k[h-1]+y[h],m+=y[h];for(c=hOn(t)-1,o=uG(oIn(n,(jYn(),_Tt)),17).a,r=T0n,i=new Zm,b=e.Math.max(0,c-o);b<=e.Math.min(t.f-1,c+o);b++){if(g=m/(b+1),p=0,f=1,a=new Zm,v=T0n,l=0,u=0,d=s[0],0==b)v=m,null==t.g&&(t.g=cun(t,new mc)),u=uM(t.g);else{for(;f<t.f;)k[f-1]-p>=g&&(kD(a,xwn(f)),v=e.Math.max(v,k[f-1]-l),u+=d,p+=k[f-1]-p,l=k[f-1],d=s[f]),d=e.Math.max(d,s[f]),++f;u+=d}(w=e.Math.min(1/v,1/t.b/u))>r&&(r=w,i=a)}return i},uZn.pg=function(){return!1},zW(N6n,"MSDCutIndexHeuristic",816),sDn(1683,1,Q4n,Mc),uZn.Kf=function(n,t){Cqn(uG(n,36),t)},zW(N6n,"SingleEdgeGraphWrapper",1683),sDn(232,22,{3:1,34:1,22:1,232:1},QC);var zdt,Vdt,Wdt,Qdt=_cn($6n,"CenterEdgeLabelPlacementStrategy",232,Oat,znn,JB);sDn(431,22,{3:1,34:1,22:1,431:1},WC);var Jdt,Ydt,Zdt,ngt,tgt=_cn($6n,"ConstraintCalculationStrategy",431,Oat,w1,YB);sDn(322,22,{3:1,34:1,22:1,322:1,188:1,196:1},JC),uZn.dg=function(){return ZLn(this)},uZn.qg=function(){return ZLn(this)};var egt,igt,rgt,cgt,agt=_cn($6n,"CrossingMinimizationStrategy",322,Oat,B2,ZB);sDn(351,22,{3:1,34:1,22:1,351:1},YC);var ogt,ugt,sgt,hgt,fgt,lgt,bgt=_cn($6n,"CuttingStrategy",351,Oat,H2,nH);sDn(348,22,{3:1,34:1,22:1,348:1,188:1,196:1},ZC),uZn.dg=function(){return ODn(this)},uZn.qg=function(){return ODn(this)};var wgt,dgt,ggt,pgt=_cn($6n,"CycleBreakingStrategy",348,Oat,h9,tH);sDn(428,22,{3:1,34:1,22:1,428:1},nI);var mgt,vgt,kgt,ygt,Mgt=_cn($6n,"DirectionCongruency",428,Oat,b1,eH);sDn(459,22,{3:1,34:1,22:1,459:1},tI);var Tgt,jgt,Egt,Sgt,Pgt,Cgt,Igt,Ogt=_cn($6n,"EdgeConstraint",459,Oat,U2,sH);sDn(283,22,{3:1,34:1,22:1,283:1},eI);var Agt,Lgt,Ngt,$gt=_cn($6n,"EdgeLabelSideSelection",283,Oat,Gnn,hH);sDn(487,22,{3:1,34:1,22:1,487:1},iI);var Dgt,xgt,Rgt,Kgt,Fgt,_gt,Bgt,Hgt=_cn($6n,"EdgeStraighteningStrategy",487,Oat,l1,fH);sDn(281,22,{3:1,34:1,22:1,281:1},rI);var Ugt,Ggt,qgt,Xgt,zgt,Vgt,Wgt,Qgt=_cn($6n,"FixedAlignment",281,Oat,qnn,uH);sDn(282,22,{3:1,34:1,22:1,282:1},cI);var Jgt,Ygt,Zgt,npt,tpt,ept,ipt,rpt,cpt,apt,opt,upt=_cn($6n,"GraphCompactionStrategy",282,Oat,Xnn,iH);sDn(259,22,{3:1,34:1,22:1,259:1},aI);var spt,hpt,fpt,lpt,bpt=_cn($6n,"GraphProperties",259,Oat,oun,rH);sDn(298,22,{3:1,34:1,22:1,298:1},oI);var wpt,dpt,gpt,ppt,mpt=_cn($6n,"GreedySwitchType",298,Oat,G2,cH);sDn(311,22,{3:1,34:1,22:1,311:1},uI);var vpt,kpt,ypt,Mpt=_cn($6n,"InLayerConstraint",311,Oat,q2,aH);sDn(429,22,{3:1,34:1,22:1,429:1},sI);var Tpt,jpt,Ept,Spt,Ppt,Cpt,Ipt,Opt,Apt,Lpt,Npt,$pt,Dpt,xpt,Rpt,Kpt,Fpt,_pt,Bpt,Hpt,Upt,Gpt,qpt,Xpt,zpt,Vpt,Wpt,Qpt,Jpt,Ypt,Zpt,nmt,tmt,emt,imt,rmt,cmt,amt,omt,umt,smt,hmt,fmt,lmt,bmt,wmt,dmt,gmt,pmt,mmt,vmt,kmt,ymt,Mmt,Tmt,jmt,Emt,Smt,Pmt,Cmt,Imt,Omt,Amt,Lmt,Nmt=_cn($6n,"InteractiveReferencePoint",429,Oat,k1,oH);sDn(171,22,{3:1,34:1,22:1,171:1},hI);var $mt,Dmt,xmt,Rmt,Kmt,Fmt,_mt,Bmt,Hmt,Umt,Gmt,qmt,Xmt,zmt,Vmt,Wmt,Qmt,Jmt,Ymt,Zmt,nvt,tvt,evt,ivt,rvt,cvt,avt,ovt,uvt,svt,hvt,fvt,lvt,bvt,wvt,dvt,gvt,pvt,mvt,vvt,kvt,yvt,Mvt,Tvt,jvt,Evt,Svt,Pvt,Cvt,Ivt,Ovt,Avt,Lvt,Nvt,$vt,Dvt,xvt,Rvt,Kvt,Fvt,_vt,Bvt,Hvt,Uvt,Gvt,qvt,Xvt,zvt,Vvt,Wvt,Qvt,Jvt,Yvt,Zvt,nkt,tkt,ekt,ikt,rkt,ckt,akt,okt,ukt,skt,hkt,fkt,lkt,bkt,wkt,dkt,gkt,pkt,mkt,vkt,kkt,ykt,Mkt,Tkt,jkt,Ekt,Skt,Pkt,Ckt,Ikt,Okt,Akt,Lkt,Nkt,$kt,Dkt,xkt,Rkt,Kkt,Fkt,_kt,Bkt,Hkt,Ukt,Gkt,qkt,Xkt,zkt,Vkt,Wkt,Qkt,Jkt,Ykt,Zkt,nyt,tyt,eyt,iyt,ryt,cyt,ayt,oyt,uyt,syt,hyt,fyt,lyt,byt,wyt,dyt,gyt,pyt,myt,vyt,kyt,yyt,Myt,Tyt,jyt,Eyt,Syt,Pyt,Cyt,Iyt,Oyt,Ayt,Lyt,Nyt,$yt,Dyt,xyt,Ryt,Kyt,Fyt,_yt,Byt,Hyt,Uyt,Gyt,qyt,Xyt,zyt,Vyt,Wyt,Qyt,Jyt,Yyt,Zyt,nMt,tMt,eMt,iMt,rMt,cMt,aMt,oMt,uMt,sMt,hMt,fMt,lMt,bMt,wMt,dMt,gMt,pMt,mMt,vMt,kMt,yMt,MMt,TMt,jMt,EMt,SMt,PMt,CMt,IMt,OMt,AMt,LMt,NMt,$Mt,DMt,xMt,RMt,KMt,FMt,_Mt,BMt,HMt,UMt,GMt,qMt,XMt,zMt,VMt,WMt,QMt,JMt,YMt,ZMt,nTt,tTt,eTt,iTt,rTt,cTt,aTt,oTt,uTt,sTt,hTt,fTt,lTt,bTt,wTt,dTt,gTt,pTt,mTt,vTt,kTt,yTt,MTt,TTt,jTt,ETt,STt,PTt,CTt,ITt,OTt,ATt,LTt,NTt,$Tt,DTt,xTt,RTt,KTt,FTt,_Tt,BTt,HTt,UTt,GTt,qTt,XTt,zTt,VTt,WTt,QTt,JTt,YTt,ZTt,njt,tjt,ejt,ijt,rjt,cjt,ajt=_cn($6n,"LayerConstraint",171,Oat,l9,lH);sDn(859,1,K2n,fl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,B6n),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),vvt),(lAn(),gNt)),Mgt),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,H6n),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(qx(),!1)),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,U6n),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),Hvt),gNt),Nmt),ggn(hNt)))),H4(n,U6n,J6n,Gvt),H4(n,U6n,o5n,Uvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,G6n),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q6n),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(VT(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X6n),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),wNt),cot),ggn(fNt)),Uhn(cT($ot,1),zZn,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,z6n),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),Pkt),gNt),Jjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V6n),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),xwn(7)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W6n),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Q6n),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J6n),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),pvt),gNt),pgt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y6n),s8n),"Node Layering Strategy"),"Strategy for node layering."),ckt),gNt),fjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z6n),s8n),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),Wvt),gNt),ajt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n5n),s8n),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,t5n),s8n),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e5n),h8n),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),xwn(4)),mNt),dot),ggn(hNt)))),H4(n,e5n,Y6n,Yvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,i5n),h8n),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),xwn(2)),mNt),dot),ggn(hNt)))),H4(n,i5n,Y6n,nkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,r5n),f8n),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),ikt),gNt),Hjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,c5n),f8n),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),xwn(0)),mNt),dot),ggn(hNt)))),H4(n,c5n,r5n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,a5n),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),xwn(vZn)),mNt),dot),ggn(hNt)))),H4(n,a5n,Y6n,Xvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,o5n),l8n),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),dvt),gNt),agt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u5n),l8n),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,s5n),l8n),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),dNt),fot),ggn(hNt)))),H4(n,s5n,b8n,ovt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,h5n),l8n),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),wNt),cot),ggn(hNt)))),H4(n,h5n,o5n,bvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,f5n),l8n),"In Layer Predecessor of"),"Allows to set a constraint which specifies of which node the current node is the predecessor. If set to 's' then the node is the predecessor of 's' and is in the same layer"),null),kNt),$ot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,l5n),l8n),"In Layer Successor of"),"Allows to set a constraint which specifies of which node the current node is the successor. If set to 's' then the node is the successor of 's' and is in the same layer"),null),kNt),$ot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,b5n),l8n),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,w5n),l8n),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,d5n),w8n),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),xwn(40)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,g5n),w8n),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),rvt),gNt),mpt),ggn(hNt)))),H4(n,g5n,o5n,cvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,p5n),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),nvt),gNt),mpt),ggn(hNt)))),H4(n,p5n,o5n,tvt),H4(n,p5n,b8n,evt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,m5n),d8n),"Node Placement Strategy"),"Strategy for node placement."),Ekt),gNt),xjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,v5n),d8n),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),wNt),cot),ggn(hNt)))),H4(n,v5n,m5n,dkt),H4(n,v5n,m5n,gkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,k5n),g8n),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),skt),gNt),Hgt),ggn(hNt)))),H4(n,k5n,m5n,hkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,y5n),g8n),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),lkt),gNt),Qgt),ggn(hNt)))),H4(n,y5n,m5n,bkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,M5n),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),dNt),fot),ggn(hNt)))),H4(n,M5n,m5n,mkt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,T5n),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),gNt),jjt),ggn(sNt)))),H4(n,T5n,m5n,Tkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,j5n),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),ykt),gNt),jjt),ggn(hNt)))),H4(n,j5n,m5n,Mkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,E5n),p8n),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),Pvt),gNt),oEt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,S5n),p8n),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),Ivt),gNt),lEt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,P5n),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),Avt),gNt),pEt),ggn(hNt)))),H4(n,P5n,m8n,Lvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,C5n),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),dNt),fot),ggn(hNt)))),H4(n,C5n,m8n,$vt),H4(n,C5n,P5n,Dvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I5n),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),dNt),fot),ggn(hNt)))),H4(n,I5n,m8n,Evt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,O5n),v8n),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A5n),v8n),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L5n),v8n),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N5n),v8n),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,$5n),k8n),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D5n),k8n),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x5n),k8n),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,R5n),y8n),j3n),"Tries to further compact components (disconnected sub-graphs)."),!1),wNt),cot),ggn(hNt)))),H4(n,R5n,h4n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,K5n),M8n),"Post Compaction Strategy"),T8n),_mt),gNt),upt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,F5n),M8n),"Post Compaction Constraint Calculation"),T8n),Kmt),gNt),tgt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,_5n),j8n),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,B5n),j8n),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),xwn(16)),mNt),dot),ggn(hNt)))),H4(n,B5n,_5n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,H5n),j8n),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),xwn(5)),mNt),dot),ggn(hNt)))),H4(n,H5n,_5n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,U5n),E8n),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),cyt),gNt),xEt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,G5n),E8n),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),dNt),fot),ggn(hNt)))),H4(n,G5n,U5n,Kkt),H4(n,G5n,U5n,Fkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q5n),E8n),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),dNt),fot),ggn(hNt)))),H4(n,q5n,U5n,Bkt),H4(n,q5n,U5n,Hkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X5n),S8n),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),Wkt),gNt),bgt),ggn(hNt)))),H4(n,X5n,U5n,Qkt),H4(n,X5n,U5n,Jkt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,z5n),S8n),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),vNt),yat),ggn(hNt)))),H4(n,z5n,X5n,Gkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V5n),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),Xkt),mNt),dot),ggn(hNt)))),H4(n,V5n,X5n,zkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W5n),P8n),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),hyt),gNt),MEt),ggn(hNt)))),H4(n,W5n,U5n,fyt),H4(n,W5n,U5n,lyt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Q5n),P8n),"Valid Indices for Wrapping"),null),vNt),yat),ggn(hNt)))),H4(n,Q5n,U5n,oyt),H4(n,Q5n,U5n,uyt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J5n),C8n),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),wNt),cot),ggn(hNt)))),H4(n,J5n,U5n,tyt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y5n),C8n),"Distance Penalty When Improving Cuts"),null),2),dNt),fot),ggn(hNt)))),H4(n,Y5n,U5n,Zkt),H4(n,Y5n,J5n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z5n),C8n),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),wNt),cot),ggn(hNt)))),H4(n,Z5n,U5n,iyt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n8n),I8n),"Edge Label Side Selection"),"Method to decide on edge label sides."),Tvt),gNt),$gt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,t8n),I8n),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),yvt),gNt),Qdt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e8n),O8n),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),Qmt),gNt),Xjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,i8n),O8n),"Consider Port Order"),"If disabled the port order of output ports is derived from the edge order and input ports are ordered by their incoming connections. If enabled all ports are ordered by the port model order."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,r8n),O8n),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,c8n),O8n),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),Hmt),gNt),abt),ggn(hNt)))),H4(n,c8n,h4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,a8n),O8n),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),Xmt),gNt),pjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,o8n),O8n),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),dNt),fot),ggn(hNt)))),H4(n,o8n,e8n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u8n),O8n),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),dNt),fot),ggn(hNt)))),H4(n,u8n,e8n,null),eZn((new ll,n))},zW($6n,"LayeredMetaDataProvider",859),sDn(998,1,K2n,ll),uZn.hf=function(n){eZn(n)},zW($6n,"LayeredOptions",998),sDn(999,1,{},Tc),uZn.sf=function(){return new mk},uZn.tf=function(n){},zW($6n,"LayeredOptions/LayeredFactory",999),sDn(1391,1,{}),uZn.a=0,zW(p9n,"ElkSpacings/AbstractSpacingsBuilder",1391),sDn(792,1391,{},omn),zW($6n,"LayeredSpacings/LayeredSpacingsBuilder",792),sDn(265,22,{3:1,34:1,22:1,265:1,188:1,196:1},fI),uZn.dg=function(){return J_n(this)},uZn.qg=function(){return J_n(this)};var ojt,ujt,sjt,hjt,fjt=_cn($6n,"LayeringStrategy",265,Oat,tan,bH);sDn(390,22,{3:1,34:1,22:1,390:1},lI);var ljt,bjt,wjt,djt,gjt,pjt=_cn($6n,"LongEdgeOrderingStrategy",390,Oat,X2,wH);sDn(203,22,{3:1,34:1,22:1,203:1},bI);var mjt,vjt,kjt,yjt,Mjt,Tjt,jjt=_cn($6n,"NodeFlexibility",203,Oat,q6,dH);sDn(323,22,{3:1,34:1,22:1,323:1,188:1,196:1},wI),uZn.dg=function(){return IDn(this)},uZn.qg=function(){return IDn(this)};var Ejt,Sjt,Pjt,Cjt,Ijt,Ojt,Ajt,Ljt,Njt,$jt,Djt,xjt=_cn($6n,"NodePlacementStrategy",323,Oat,f9,gH);sDn(243,22,{3:1,34:1,22:1,243:1},dI);var Rjt,Kjt,Fjt,_jt,Bjt,Hjt=_cn($6n,"NodePromotionStrategy",243,Oat,uun,pH);sDn(284,22,{3:1,34:1,22:1,284:1},gI);var Ujt,Gjt,qjt,Xjt=_cn($6n,"OrderingStrategy",284,Oat,X6,mH);sDn(430,22,{3:1,34:1,22:1,430:1},pI);var zjt,Vjt,Wjt,Qjt,Jjt=_cn($6n,"PortSortingStrategy",430,Oat,d1,vH);sDn(462,22,{3:1,34:1,22:1,462:1},mI);var Yjt,Zjt,nEt,tEt,eEt=_cn($6n,"PortType",462,Oat,z2,kH);sDn(387,22,{3:1,34:1,22:1,387:1},vI);var iEt,rEt,cEt,aEt,oEt=_cn($6n,"SelfLoopDistributionStrategy",387,Oat,V2,yH);sDn(349,22,{3:1,34:1,22:1,349:1},kI);var uEt,sEt,hEt,fEt,lEt=_cn($6n,"SelfLoopOrderingStrategy",349,Oat,W2,MH);sDn(312,1,{312:1},CVn),zW($6n,"Spacings",312),sDn(350,22,{3:1,34:1,22:1,350:1},yI);var bEt,wEt,dEt,gEt,pEt=_cn($6n,"SplineRoutingMode",350,Oat,Q2,TH);sDn(352,22,{3:1,34:1,22:1,352:1},MI);var mEt,vEt,kEt,yEt,MEt=_cn($6n,"ValidifyStrategy",352,Oat,J2,jH);sDn(388,22,{3:1,34:1,22:1,388:1},TI);var TEt,jEt,EEt,SEt,PEt,CEt,IEt,OEt,AEt,LEt,NEt,$Et,DEt,xEt=_cn($6n,"WrappingStrategy",388,Oat,Y2,EH);sDn(1398,1,y9n,il),uZn.rg=function(n){return uG(n,36),jEt},uZn.Kf=function(n,t){mzn(this,uG(n,36),t)},zW(M9n,"DepthFirstCycleBreaker",1398),sDn(793,1,y9n,ez),uZn.rg=function(n){return uG(n,36),EEt},uZn.Kf=function(n,t){gYn(this,uG(n,36),t)},uZn.sg=function(n){return uG(zq(n,iMn(this.d,n.c.length)),10)},zW(M9n,"GreedyCycleBreaker",793),sDn(1401,793,y9n,tL),uZn.sg=function(n){var t,e,i,r;for(r=null,t=vZn,i=new Ww(n);i.a<i.c.c.length;)vR(e=uG(N3(i),10),(GYn(),imt))&&uG(oIn(e,imt),17).a<t&&(t=uG(oIn(e,imt),17).a,r=e);return r||uG(zq(n,iMn(this.d,n.c.length)),10)},zW(M9n,"GreedyModelOrderCycleBreaker",1401),sDn(1399,1,y9n,el),uZn.rg=function(n){return uG(n,36),SEt},uZn.Kf=function(n,t){Nzn(this,uG(n,36),t)},zW(M9n,"InteractiveCycleBreaker",1399),sDn(1400,1,y9n,nl),uZn.rg=function(n){return uG(n,36),PEt},uZn.Kf=function(n,t){Gzn(this,uG(n,36),t)},uZn.a=0,uZn.b=0,zW(M9n,"ModelOrderCycleBreaker",1400),sDn(1413,1,y9n,Zf),uZn.rg=function(n){return uG(n,36),CEt},uZn.Kf=function(n,t){HQn(this,uG(n,36),t)},zW(T9n,"BreadthFirstModelOrderLayerer",1413),sDn(1414,1,b2n,jc),uZn.Ne=function(n,t){return aLn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"BreadthFirstModelOrderLayerer/lambda$0$Type",1414),sDn(1404,1,y9n,iP),uZn.rg=function(n){return uG(n,36),IEt},uZn.Kf=function(n,t){CYn(this,uG(n,36),t)},zW(T9n,"CoffmanGrahamLayerer",1404),sDn(1405,1,b2n,Bg),uZn.Ne=function(n,t){return ANn(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type",1405),sDn(1406,1,b2n,Hg),uZn.Ne=function(n,t){return oz(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"CoffmanGrahamLayerer/lambda$1$Type",1406),sDn(1415,1,y9n,tl),uZn.rg=function(n){return uG(n,36),OEt},uZn.Kf=function(n,t){QJn(this,uG(n,36),t)},uZn.c=0,uZn.e=0,zW(T9n,"DepthFirstModelOrderLayerer",1415),sDn(1416,1,b2n,Ec),uZn.Ne=function(n,t){return oLn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"DepthFirstModelOrderLayerer/lambda$0$Type",1416),sDn(1407,1,y9n,Sc),uZn.rg=function(n){return uG(n,36),Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),uwt)),jlt,pwt),Elt,gwt)},uZn.Kf=function(n,t){uJn(uG(n,36),t)},zW(T9n,"InteractiveLayerer",1407),sDn(578,1,{578:1},Mk),uZn.a=0,uZn.c=0,zW(T9n,"InteractiveLayerer/LayerSpan",578),sDn(1403,1,y9n,al),uZn.rg=function(n){return uG(n,36),AEt},uZn.Kf=function(n,t){UKn(this,uG(n,36),t)},zW(T9n,"LongestPathLayerer",1403),sDn(1412,1,y9n,cl),uZn.rg=function(n){return uG(n,36),LEt},uZn.Kf=function(n,t){PFn(this,uG(n,36),t)},zW(T9n,"LongestPathSourceLayerer",1412),sDn(1410,1,y9n,ol),uZn.rg=function(n){return uG(n,36),Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)},uZn.Kf=function(n,t){jJn(this,uG(n,36),t)},uZn.a=0,uZn.b=0,uZn.d=0,zW(T9n,"MinWidthLayerer",1410),sDn(1411,1,b2n,Ug),uZn.Ne=function(n,t){return Ssn(this,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"MinWidthLayerer/MinOutgoingEdgesComparator",1411),sDn(1402,1,y9n,ul),uZn.rg=function(n){return uG(n,36),DEt},uZn.Kf=function(n,t){NVn(this,uG(n,36),t)},zW(T9n,"NetworkSimplexLayerer",1402),sDn(1408,1,y9n,RF),uZn.rg=function(n){return uG(n,36),Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)},uZn.Kf=function(n,t){BWn(this,uG(n,36),t)},uZn.d=0,uZn.f=0,uZn.g=0,uZn.i=0,uZn.s=0,uZn.t=0,uZn.u=0,zW(T9n,"StretchWidthLayerer",1408),sDn(1409,1,b2n,Pc),uZn.Ne=function(n,t){return j7(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"StretchWidthLayerer/1",1409),sDn(413,1,j9n),uZn.gg=function(n,t,e,i,r,c){},uZn.ug=function(n,t,e){return hUn(this,n,t,e)},uZn.fg=function(){this.g=Inn(iUt,E9n,28,this.d,15,1),this.f=Inn(iUt,E9n,28,this.d,15,1)},uZn.hg=function(n,t){this.e[n]=Inn(YHt,W1n,28,t[n].length,15,1)},uZn.ig=function(n,t,e){e[n][t].p=t,this.e[n][t]=t},uZn.jg=function(n,t,e,i){uG(zq(i[n][t].j,e),12).p=this.d++},uZn.b=0,uZn.c=0,uZn.d=0,zW(S9n,"AbstractBarycenterPortDistributor",413),sDn(1698,1,b2n,Gg),uZn.Ne=function(n,t){return lkn(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"AbstractBarycenterPortDistributor/lambda$0$Type",1698),sDn(832,1,C6n,M6),uZn.gg=function(n,t,e,i,r,c){},uZn.ig=function(n,t,e){},uZn.jg=function(n,t,e,i){},uZn.eg=function(){return!1},uZn.fg=function(){this.c=this.e.a,this.g=this.f.g},uZn.hg=function(n,t){t[n][0].c.p=n},uZn.kg=function(){return!1},uZn.vg=function(n,t,e,i){e?VEn(this,n):(vSn(this,n,i),vWn(this,n,t)),n.c.length>1&&(oM(gK(oIn(HQ((u3(0,n.c.length),uG(n.c[0],10))),(jYn(),Cyt))))?Axn(n,this.d,uG(this,669)):(hZ(),f$(n,this.d)),xsn(this.e,n))},uZn.lg=function(n,t,e,i){var r,c,a,o,u,s,h;for(t!=vX(e,n.length)&&(c=n[t-(e?1:-1)],v7(this.f,c,e?(can(),Wjt):(can(),Vjt))),r=n[t][0],h=!i||r.k==(zIn(),lbt),s=n7(n[t]),this.vg(s,h,!1,e),a=0,u=new Ww(s);u.a<u.c.c.length;)o=uG(N3(u),10),n[t][a++]=o;return!1},uZn.mg=function(n,t){var e,i,r,c,a;for(c=n7(n[a=vX(t,n.length)]),this.vg(c,!1,!0,t),e=0,r=new Ww(c);r.a<r.c.c.length;)i=uG(N3(r),10),n[a][e++]=i;return!1},zW(S9n,"BarycenterHeuristic",832),sDn(667,1,{667:1},zg),uZn.Ib=function(){return"BarycenterState [node="+this.c+", summedWeight="+this.d+", degree="+this.b+", barycenter="+this.a+", visited="+this.e+"]"},uZn.b=0,uZn.d=0,uZn.e=!1;var REt=zW(S9n,"BarycenterHeuristic/BarycenterState",667);sDn(1865,1,b2n,qg),uZn.Ne=function(n,t){return sPn(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"BarycenterHeuristic/lambda$0$Type",1865),sDn(831,1,C6n,APn),uZn.fg=function(){},uZn.gg=function(n,t,e,i,r,c){},uZn.jg=function(n,t,e,i){},uZn.hg=function(n,t){this.a[n]=Inn(REt,{3:1,4:1,5:1,2117:1},667,t[n].length,0,1),this.b[n]=Inn(UEt,{3:1,4:1,5:1,2118:1},239,t[n].length,0,1)},uZn.ig=function(n,t,e){fkn(this,e[n][t],!0)},uZn.c=!1,zW(S9n,"ForsterConstraintResolver",831),sDn(239,1,{239:1},RZ,SVn),uZn.Ib=function(){var n,t;for((t=new WM).a+="[",n=0;n<this.d.length;n++)JA(t,byn(this.d[n])),null!=oD(this.g,this.d[0]).a&&JA(JA((t.a+="<",t),ZA(oD(this.g,this.d[0]).a)),">"),n<this.d.length-1&&(t.a+=TZn);return(t.a+="]",t).a},uZn.a=0,uZn.c=0,uZn.f=0;var KEt,FEt,_Et,BEt,HEt,UEt=zW(S9n,"ForsterConstraintResolver/ConstraintGroup",239);sDn(1860,1,QZn,Xg),uZn.Cd=function(n){fkn(this.a,uG(n,10),!1)},zW(S9n,"ForsterConstraintResolver/lambda$0$Type",1860),sDn(219,1,{219:1,230:1},KVn),uZn.gg=function(n,t,e,i,r,c){},uZn.hg=function(n,t){},uZn.fg=function(){this.r=Inn(YHt,W1n,28,this.n,15,1)},uZn.ig=function(n,t,e){var i;(i=e[n][t].e)&&kD(this.b,i)},uZn.jg=function(n,t,e,i){++this.n},uZn.Ib=function(){return MWn(this.e,new ek)},uZn.g=!1,uZn.i=!1,uZn.n=0,uZn.s=!1,zW(S9n,"GraphInfoHolder",219),sDn(1905,1,C6n,Cc),uZn.gg=function(n,t,e,i,r,c){},uZn.hg=function(n,t){},uZn.jg=function(n,t,e,i){},uZn.ug=function(n,t,e){return e&&t>0?j0(this.a,n[t-1],n[t]):!e&&t<n.length-1?j0(this.a,n[t],n[t+1]):Aon(this.a,n[t],e?(KQn(),_Rt):(KQn(),kRt)),cRn(this,n,t,e)},uZn.fg=function(){this.d=Inn(YHt,W1n,28,this.c,15,1),this.a=new R_(this.d)},uZn.ig=function(n,t,e){var i;i=e[n][t],this.c+=i.j.c.length},uZn.c=0,zW(S9n,"GreedyPortDistributor",1905),sDn(1421,1,y9n,bl),uZn.rg=function(n){return swn(uG(n,36))},uZn.Kf=function(n,t){fWn(uG(n,36),t)},zW(S9n,"InteractiveCrossingMinimizer",1421),sDn(1422,1,b2n,Wg),uZn.Ne=function(n,t){return SSn(this,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"InteractiveCrossingMinimizer/1",1422),sDn(514,1,{514:1,106:1,47:1},zy),uZn.rg=function(n){var t;return uG(n,36),Aq(t=aN(FEt),(uIn(),Elt),(zYn(),Cwt)),t},uZn.Kf=function(n,t){$Un(this,uG(n,36),t)},uZn.e=0,zW(S9n,"LayerSweepCrossingMinimizer",514),sDn(1418,1,QZn,Qg),uZn.Cd=function(n){Oqn(this.a,uG(n,219))},zW(S9n,"LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type",1418),sDn(1419,1,QZn,Jg),uZn.Cd=function(n){ewn(this.a,uG(n,219))},zW(S9n,"LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type",1419),sDn(1420,1,QZn,Yg),uZn.Cd=function(n){iXn(this.a,uG(n,219))},zW(S9n,"LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type",1420),sDn(463,22,{3:1,34:1,22:1,463:1},jI);var GEt,qEt=_cn(S9n,"LayerSweepCrossingMinimizer/CrossMinType",463,Oat,Z2,SH);sDn(1417,1,y1n,Ic),uZn.Mb=function(n){return Cun(),0==uG(n,30).a.c.length},zW(S9n,"LayerSweepCrossingMinimizer/lambda$0$Type",1417),sDn(1862,1,C6n,z0),uZn.fg=function(){},uZn.gg=function(n,t,e,i,r,c){},uZn.jg=function(n,t,e,i){},uZn.hg=function(n,t){t[n][0].c.p=n,this.b[n]=Inn(WEt,{3:1,4:1,5:1,2043:1},668,t[n].length,0,1)},uZn.ig=function(n,t,e){e[n][t].p=t,uQ(this.b[n],t,new Oc)},zW(S9n,"LayerSweepTypeDecider",1862),sDn(668,1,{668:1},Oc),uZn.Ib=function(){return"NodeInfo [connectedEdges="+this.a+", hierarchicalInfluence="+this.b+", randomInfluence="+this.c+"]"},uZn.a=0,uZn.b=0,uZn.c=0;var XEt,zEt,VEt,WEt=zW(S9n,"LayerSweepTypeDecider/NodeInfo",668);sDn(1863,1,A2n,Ac),uZn.Lb=function(n){return Dx(new w7(uG(n,12).b))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Dx(new w7(uG(n,12).b))},zW(S9n,"LayerSweepTypeDecider/lambda$0$Type",1863),sDn(1864,1,A2n,Lc),uZn.Lb=function(n){return Dx(new w7(uG(n,12).b))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Dx(new w7(uG(n,12).b))},zW(S9n,"LayerSweepTypeDecider/lambda$1$Type",1864),sDn(1906,413,j9n,ij),uZn.tg=function(n,t,e){var i,r,c,a,o,u,s,h,f;switch(s=this.g,e.g){case 1:for(i=0,r=0,u=new Ww(n.j);u.a<u.c.c.length;)0!=(a=uG(N3(u),12)).e.c.length&&(++i,a.j==(KQn(),yRt)&&++r);for(c=t+r,f=t+i,o=jmn(n,(can(),Vjt)).Kc();o.Ob();)(a=uG(o.Pb(),12)).j==(KQn(),yRt)?(s[a.p]=c,--c):(s[a.p]=f,--f);return i;case 2:for(h=0,o=jmn(n,(can(),Wjt)).Kc();o.Ob();)++h,s[(a=uG(o.Pb(),12)).p]=t+h;return h;default:throw hv(new Dv)}},zW(S9n,"LayerTotalPortDistributor",1906),sDn(669,832,{669:1,230:1},Ron),uZn.vg=function(n,t,e,i){e?VEn(this,n):(vSn(this,n,i),vWn(this,n,t)),n.c.length>1&&(oM(gK(oIn(HQ((u3(0,n.c.length),uG(n.c[0],10))),(jYn(),Cyt))))?Axn(n,this.d,this):(hZ(),f$(n,this.d)),oM(gK(oIn(HQ((u3(0,n.c.length),uG(n.c[0],10))),Cyt)))||xsn(this.e,n))},zW(S9n,"ModelOrderBarycenterHeuristic",669),sDn(1866,1,b2n,Zg),uZn.Ne=function(n,t){return TOn(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"ModelOrderBarycenterHeuristic/lambda$0$Type",1866),sDn(1423,1,y9n,wl),uZn.rg=function(n){var t;return uG(n,36),Aq(t=aN(XEt),(uIn(),Elt),(zYn(),Cwt)),t},uZn.Kf=function(n,t){jY((uG(n,36),t))},zW(S9n,"NoCrossingMinimizer",1423),sDn(809,413,j9n,rj),uZn.tg=function(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;switch(f=this.g,e.g){case 1:for(r=0,c=0,h=new Ww(n.j);h.a<h.c.c.length;)0!=(u=uG(N3(h),12)).e.c.length&&(++r,u.j==(KQn(),yRt)&&++c);for(a=t+c*(i=1/(r+1)),b=t+1-i,s=jmn(n,(can(),Vjt)).Kc();s.Ob();)(u=uG(s.Pb(),12)).j==(KQn(),yRt)?(f[u.p]=a,a-=i):(f[u.p]=b,b-=i);break;case 2:for(o=0,h=new Ww(n.j);h.a<h.c.c.length;)0==(u=uG(N3(h),12)).g.c.length||++o;for(l=t+(i=1/(o+1)),s=jmn(n,(can(),Wjt)).Kc();s.Ob();)f[(u=uG(s.Pb(),12)).p]=l,l+=i;break;default:throw hv(new vM("Port type is undefined"))}return 1},zW(S9n,"NodeRelativePortDistributor",809),sDn(822,1,{},MV,PIn),zW(S9n,"SweepCopy",822),sDn(1861,1,C6n,Umn),uZn.hg=function(n,t){},uZn.fg=function(){var n;n=Inn(YHt,W1n,28,this.f,15,1),this.d=new op(n),this.a=new R_(n)},uZn.gg=function(n,t,e,i,r,c){var a;a=uG(zq(c[n][t].j,e),12),r.c==a&&r.c.i.c==r.d.i.c&&++this.e[n]},uZn.ig=function(n,t,e){var i;i=e[n][t],this.c[n]=this.c[n]|i.k==(zIn(),gbt)},uZn.jg=function(n,t,e,i){var r;(r=uG(zq(i[n][t].j,e),12)).p=this.f++,r.g.c.length+r.e.c.length>1&&(r.j==(KQn(),kRt)?this.b[n]=!0:r.j==_Rt&&n>0&&(this.b[n-1]=!0))},uZn.f=0,zW(P6n,"AllCrossingsCounter",1861),sDn(595,1,{},Don),uZn.b=0,uZn.d=0,zW(P6n,"BinaryIndexedTree",595),sDn(532,1,{},R_),zW(P6n,"CrossingsCounter",532),sDn(1950,1,b2n,np),uZn.Ne=function(n,t){return wX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$0$Type",1950),sDn(1951,1,b2n,tp),uZn.Ne=function(n,t){return dX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$1$Type",1951),sDn(1952,1,b2n,ep),uZn.Ne=function(n,t){return gX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$2$Type",1952),sDn(1953,1,b2n,ip),uZn.Ne=function(n,t){return pX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$3$Type",1953),sDn(1954,1,QZn,rp),uZn.Cd=function(n){cen(this.a,uG(n,12))},zW(P6n,"CrossingsCounter/lambda$4$Type",1954),sDn(1955,1,y1n,cp),uZn.Mb=function(n){return NI(this.a,uG(n,12))},zW(P6n,"CrossingsCounter/lambda$5$Type",1955),sDn(1956,1,QZn,ap),uZn.Cd=function(n){MA(this,n)},zW(P6n,"CrossingsCounter/lambda$6$Type",1956),sDn(1957,1,QZn,EI),uZn.Cd=function(n){var t;PU(),A6(this.b,(t=this.a,uG(n,12),t))},zW(P6n,"CrossingsCounter/lambda$7$Type",1957),sDn(839,1,A2n,Nc),uZn.Lb=function(n){return PU(),vR(uG(n,12),(GYn(),lmt))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return PU(),vR(uG(n,12),(GYn(),lmt))},zW(P6n,"CrossingsCounter/lambda$8$Type",839),sDn(1949,1,{},op),zW(P6n,"HyperedgeCrossingsCounter",1949),sDn(477,1,{34:1,477:1},BF),uZn.Fd=function(n){return _vn(this,uG(n,477))},uZn.b=0,uZn.c=0,uZn.e=0,uZn.f=0;var QEt=zW(P6n,"HyperedgeCrossingsCounter/Hyperedge",477);sDn(374,1,{34:1,374:1},bY),uZn.Fd=function(n){return exn(this,uG(n,374))},uZn.b=0,uZn.c=0;var JEt,YEt,ZEt=zW(P6n,"HyperedgeCrossingsCounter/HyperedgeCorner",374);sDn(531,22,{3:1,34:1,22:1,531:1},SI);var nSt,tSt,eSt,iSt,rSt,cSt=_cn(P6n,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",531,Oat,g1,PH);sDn(1425,1,y9n,dl),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?tSt:null},uZn.Kf=function(n,t){HEn(this,uG(n,36),t)},zW(P9n,"InteractiveNodePlacer",1425),sDn(1426,1,y9n,gl),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?eSt:null},uZn.Kf=function(n,t){XMn(this,uG(n,36),t)},zW(P9n,"LinearSegmentsNodePlacer",1426),sDn(261,1,{34:1,261:1},Tk),uZn.Fd=function(n){return CT(this,uG(n,261))},uZn.Fb=function(n){var t;return!!F$(n,261)&&(t=uG(n,261),this.b==t.b)},uZn.Hb=function(){return this.b},uZn.Ib=function(){return"ls"+vIn(this.e)},uZn.a=0,uZn.b=0,uZn.c=-1,uZn.d=-1,uZn.g=0;var aSt,oSt=zW(P9n,"LinearSegmentsNodePlacer/LinearSegment",261);sDn(1428,1,y9n,iz),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?aSt:null},uZn.Kf=function(n,t){WJn(this,uG(n,36),t)},uZn.b=0,uZn.g=0,zW(P9n,"NetworkSimplexPlacer",1428),sDn(1447,1,b2n,$c),uZn.Ne=function(n,t){return d$(uG(n,17).a,uG(t,17).a)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P9n,"NetworkSimplexPlacer/0methodref$compare$Type",1447),sDn(1449,1,b2n,Dc),uZn.Ne=function(n,t){return d$(uG(n,17).a,uG(t,17).a)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P9n,"NetworkSimplexPlacer/1methodref$compare$Type",1449),sDn(655,1,{655:1},PI);var uSt=zW(P9n,"NetworkSimplexPlacer/EdgeRep",655);sDn(412,1,{412:1},wY),uZn.b=!1;var sSt,hSt,fSt,lSt=zW(P9n,"NetworkSimplexPlacer/NodeRep",412);sDn(515,13,{3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1,515:1},Ck),zW(P9n,"NetworkSimplexPlacer/Path",515),sDn(1429,1,{},xc),uZn.Kb=function(n){return uG(n,18).d.i.k},zW(P9n,"NetworkSimplexPlacer/Path/lambda$0$Type",1429),sDn(1430,1,y1n,Rc),uZn.Mb=function(n){return uG(n,273)==(zIn(),wbt)},zW(P9n,"NetworkSimplexPlacer/Path/lambda$1$Type",1430),sDn(1431,1,{},Kc),uZn.Kb=function(n){return uG(n,18).d.i},zW(P9n,"NetworkSimplexPlacer/Path/lambda$2$Type",1431),sDn(1432,1,y1n,up),uZn.Mb=function(n){return zK(Imn(uG(n,10)))},zW(P9n,"NetworkSimplexPlacer/Path/lambda$3$Type",1432),sDn(1433,1,y1n,Fc),uZn.Mb=function(n){return mq(uG(n,12))},zW(P9n,"NetworkSimplexPlacer/lambda$0$Type",1433),sDn(1434,1,QZn,CI),uZn.Cd=function(n){M$(this.a,this.b,uG(n,12))},zW(P9n,"NetworkSimplexPlacer/lambda$1$Type",1434),sDn(1443,1,QZn,sp),uZn.Cd=function(n){FLn(this.a,uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$10$Type",1443),sDn(1444,1,{},_c),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$11$Type",1444),sDn(1445,1,QZn,hp),uZn.Cd=function(n){D_n(this.a,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$12$Type",1445),sDn(1446,1,{},Bc),uZn.Kb=function(n){return n2(),xwn(uG(n,125).e)},zW(P9n,"NetworkSimplexPlacer/lambda$13$Type",1446),sDn(1448,1,{},Hc),uZn.Kb=function(n){return n2(),xwn(uG(n,125).e)},zW(P9n,"NetworkSimplexPlacer/lambda$15$Type",1448),sDn(1450,1,y1n,Uc),uZn.Mb=function(n){return n2(),uG(n,412).c.k==(zIn(),dbt)},zW(P9n,"NetworkSimplexPlacer/lambda$17$Type",1450),sDn(1451,1,y1n,Gc),uZn.Mb=function(n){return n2(),uG(n,412).c.j.c.length>1},zW(P9n,"NetworkSimplexPlacer/lambda$18$Type",1451),sDn(1452,1,QZn,dY),uZn.Cd=function(n){Dpn(this.c,this.b,this.d,this.a,uG(n,412))},uZn.c=0,uZn.d=0,zW(P9n,"NetworkSimplexPlacer/lambda$19$Type",1452),sDn(1435,1,{},qc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$2$Type",1435),sDn(1453,1,QZn,fp),uZn.Cd=function(n){j$(this.a,uG(n,12))},uZn.a=0,zW(P9n,"NetworkSimplexPlacer/lambda$20$Type",1453),sDn(1454,1,{},Xc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$21$Type",1454),sDn(1455,1,QZn,lp),uZn.Cd=function(n){uD(this.a,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$22$Type",1455),sDn(1456,1,y1n,zc),uZn.Mb=function(n){return zK(n)},zW(P9n,"NetworkSimplexPlacer/lambda$23$Type",1456),sDn(1457,1,{},Vc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$24$Type",1457),sDn(1458,1,y1n,bp),uZn.Mb=function(n){return RL(this.a,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$25$Type",1458),sDn(1459,1,QZn,II),uZn.Cd=function(n){$On(this.a,this.b,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$26$Type",1459),sDn(1460,1,y1n,Wc),uZn.Mb=function(n){return n2(),!v9(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$27$Type",1460),sDn(1461,1,y1n,Qc),uZn.Mb=function(n){return n2(),!v9(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$28$Type",1461),sDn(1462,1,{},wp),uZn.Ve=function(n,t){return T$(this.a,uG(n,30),uG(t,30))},zW(P9n,"NetworkSimplexPlacer/lambda$29$Type",1462),sDn(1436,1,{},Jc),uZn.Kb=function(n){return n2(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(P9n,"NetworkSimplexPlacer/lambda$3$Type",1436),sDn(1437,1,y1n,Yc),uZn.Mb=function(n){return n2(),h6(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$4$Type",1437),sDn(1438,1,QZn,dp),uZn.Cd=function(n){vqn(this.a,uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$5$Type",1438),sDn(1439,1,{},Zc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$6$Type",1439),sDn(1440,1,y1n,na),uZn.Mb=function(n){return n2(),uG(n,10).k==(zIn(),dbt)},zW(P9n,"NetworkSimplexPlacer/lambda$7$Type",1440),sDn(1441,1,{},ta),uZn.Kb=function(n){return n2(),new fX(null,new LW(new Fz(ix(Ggn(uG(n,10)).a.Kc(),new h))))},zW(P9n,"NetworkSimplexPlacer/lambda$8$Type",1441),sDn(1442,1,y1n,ea),uZn.Mb=function(n){return n2(),pq(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$9$Type",1442),sDn(1424,1,y9n,pl),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?sSt:null},uZn.Kf=function(n,t){RXn(uG(n,36),t)},zW(P9n,"SimpleNodePlacer",1424),sDn(185,1,{185:1},WHn),uZn.Ib=function(){var n;return n="",this.c==(b0(),fSt)?n+=V2n:this.c==hSt&&(n+=z2n),this.o==(w0(),wSt)?n+=c3n:this.o==dSt?n+="UP":n+="BALANCED",n},zW(O9n,"BKAlignedLayout",185),sDn(523,22,{3:1,34:1,22:1,523:1},OI);var bSt,wSt,dSt,gSt=_cn(O9n,"BKAlignedLayout/HDirection",523,Oat,p1,CH);sDn(522,22,{3:1,34:1,22:1,522:1},AI);var pSt,mSt,vSt,kSt,ySt,MSt,TSt,jSt,ESt,SSt,PSt,CSt,ISt,OSt,ASt,LSt,NSt,$St,DSt,xSt=_cn(O9n,"BKAlignedLayout/VDirection",522,Oat,m1,IH);sDn(1699,1,{},LI),zW(O9n,"BKAligner",1699),sDn(1702,1,{},xjn),zW(O9n,"BKCompactor",1702),sDn(663,1,{663:1},ia),uZn.a=0,zW(O9n,"BKCompactor/ClassEdge",663),sDn(466,1,{466:1},Ek),uZn.a=null,uZn.b=0,zW(O9n,"BKCompactor/ClassNode",466),sDn(1427,1,y9n,FI),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?mSt:null},uZn.Kf=function(n,t){$Yn(this,uG(n,36),t)},uZn.d=!1,zW(O9n,"BKNodePlacer",1427),sDn(1700,1,{},ra),uZn.d=0,zW(O9n,"NeighborhoodInformation",1700),sDn(1701,1,b2n,gp),uZn.Ne=function(n,t){return vrn(this,uG(n,42),uG(t,42))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O9n,"NeighborhoodInformation/NeighborComparator",1701),sDn(823,1,{}),zW(O9n,"ThresholdStrategy",823),sDn(1825,823,{},Sk),uZn.wg=function(n,t,e){return this.a.o==(w0(),dSt)?M0n:T0n},uZn.xg=function(){},zW(O9n,"ThresholdStrategy/NullThresholdStrategy",1825),sDn(587,1,{587:1},_I),uZn.c=!1,uZn.d=!1,zW(O9n,"ThresholdStrategy/Postprocessable",587),sDn(1826,823,{},Pk),uZn.wg=function(n,t,e){var i,r,c;return r=t==e,i=this.a.a[e.p]==t,r||i?(c=n,this.a.c,b0(),r&&(c=FXn(this,t,!0)),!isNaN(c)&&!isFinite(c)&&i&&(c=FXn(this,e,!1)),c):n},uZn.xg=function(){for(var n,t,e;0!=this.d.b;)(t=wGn(this,e=uG(H1(this.d),587))).a&&(n=t.a,(oM(this.a.f[this.a.g[e.b.p].p])||v9(n)||n.c.i.c!=n.d.i.c)&&(ixn(this,e)||VL(this.e,e)));for(;0!=this.e.a.c.length;)ixn(this,uG(obn(this.e),587))},zW(O9n,"ThresholdStrategy/SimpleThresholdStrategy",1826),sDn(645,1,{645:1,188:1,196:1},ca),uZn.dg=function(){return Fsn(this)},uZn.qg=function(){return Fsn(this)},zW(A9n,"EdgeRouterFactory",645),sDn(1485,1,y9n,ml),uZn.rg=function(n){return RFn(uG(n,36))},uZn.Kf=function(n,t){QXn(uG(n,36),t)},zW(A9n,"OrthogonalEdgeRouter",1485),sDn(1478,1,y9n,KI),uZn.rg=function(n){return oSn(uG(n,36))},uZn.Kf=function(n,t){XQn(this,uG(n,36),t)},zW(A9n,"PolylineEdgeRouter",1478),sDn(1479,1,A2n,oa),uZn.Lb=function(n){return shn(uG(n,10))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return shn(uG(n,10))},zW(A9n,"PolylineEdgeRouter/1",1479),sDn(1872,1,y1n,ua),uZn.Mb=function(n){return uG(n,132).c==(_7(),$St)},zW(L9n,"HyperEdgeCycleDetector/lambda$0$Type",1872),sDn(1873,1,{},sa),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$1$Type",1873),sDn(1874,1,y1n,ha),uZn.Mb=function(n){return uG(n,132).c==(_7(),$St)},zW(L9n,"HyperEdgeCycleDetector/lambda$2$Type",1874),sDn(1875,1,{},fa),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$3$Type",1875),sDn(1876,1,{},la),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$4$Type",1876),sDn(1877,1,{},aa),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$5$Type",1877),sDn(118,1,{34:1,118:1},nhn),uZn.Fd=function(n){return IT(this,uG(n,118))},uZn.Fb=function(n){var t;return!!F$(n,118)&&(t=uG(n,118),this.g==t.g)},uZn.Hb=function(){return this.g},uZn.Ib=function(){var n,t,e,i;for(n=new lx("{"),i=new Ww(this.n);i.a<i.c.c.length;)null==(t=ZTn((e=uG(N3(i),12)).i))&&(t="n"+A_(e.i)),n.a+=""+t,i.a<i.c.c.length&&(n.a+=",");return n.a+="}",n.a},uZn.a=0,uZn.b=0,uZn.c=NaN,uZn.d=0,uZn.g=0,uZn.i=0,uZn.o=0,uZn.s=NaN,zW(L9n,"HyperEdgeSegment",118),sDn(132,1,{132:1},A2),uZn.Ib=function(){return this.a+"->"+this.b+" ("+yR(this.c)+")"},uZn.d=0,zW(L9n,"HyperEdgeSegmentDependency",132),sDn(528,22,{3:1,34:1,22:1,528:1},qI);var RSt,KSt,FSt,_St,BSt,HSt,USt,GSt,qSt=_cn(L9n,"HyperEdgeSegmentDependency/DependencyType",528,Oat,v1,OH);sDn(1878,1,{},pp),zW(L9n,"HyperEdgeSegmentSplitter",1878),sDn(1879,1,{},hj),uZn.a=0,uZn.b=0,zW(L9n,"HyperEdgeSegmentSplitter/AreaRating",1879),sDn(339,1,{339:1},OU),uZn.a=0,uZn.b=0,uZn.c=0,zW(L9n,"HyperEdgeSegmentSplitter/FreeArea",339),sDn(1880,1,b2n,ba),uZn.Ne=function(n,t){return C_(uG(n,118),uG(t,118))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(L9n,"HyperEdgeSegmentSplitter/lambda$0$Type",1880),sDn(1881,1,QZn,pY),uZn.Cd=function(n){I5(this.a,this.d,this.c,this.b,uG(n,118))},uZn.b=0,zW(L9n,"HyperEdgeSegmentSplitter/lambda$1$Type",1881),sDn(1882,1,{},wa),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).e,16))},zW(L9n,"HyperEdgeSegmentSplitter/lambda$2$Type",1882),sDn(1883,1,{},da),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).j,16))},zW(L9n,"HyperEdgeSegmentSplitter/lambda$3$Type",1883),sDn(1884,1,{},ga),uZn.Ye=function(n){return uM(pK(n))},zW(L9n,"HyperEdgeSegmentSplitter/lambda$4$Type",1884),sDn(664,1,{},NW),uZn.a=0,uZn.b=0,uZn.c=0,zW(L9n,"OrthogonalRoutingGenerator",664),sDn(1703,1,{},pa),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).e,16))},zW(L9n,"OrthogonalRoutingGenerator/lambda$0$Type",1703),sDn(1704,1,{},ma),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).j,16))},zW(L9n,"OrthogonalRoutingGenerator/lambda$1$Type",1704),sDn(670,1,{}),zW(N9n,"BaseRoutingDirectionStrategy",670),sDn(1870,670,{},Rk),uZn.yg=function(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Ww(n.n);h.a<h.c.c.length;)for(s=uG(N3(h),12),l=Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a])).a,u=new Ww(s.g);u.a<u.c.c.length;)v9(o=uG(N3(u),18))||(d=o.d,g=Gfn(Uhn(cT(PNt,1),zZn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>t4n&&(c=n,r=new MO(l,a=f),aq(o.a,r),WUn(this,o,c,r,!1),(b=n.r)&&(r=new MO(w=uM(pK(hyn(b.e,0))),a),aq(o.a,r),WUn(this,o,c,r,!1),c=b,r=new MO(w,a=t+b.o*i),aq(o.a,r),WUn(this,o,c,r,!1)),r=new MO(g,a),aq(o.a,r),WUn(this,o,c,r,!1)))},uZn.zg=function(n){return n.i.n.a+n.n.a+n.a.a},uZn.Ag=function(){return KQn(),KRt},uZn.Bg=function(){return KQn(),yRt},zW(N9n,"NorthToSouthRoutingStrategy",1870),sDn(1871,670,{},Kk),uZn.yg=function(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t-n.o*i,h=new Ww(n.n);h.a<h.c.c.length;)for(s=uG(N3(h),12),l=Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a])).a,u=new Ww(s.g);u.a<u.c.c.length;)v9(o=uG(N3(u),18))||(d=o.d,g=Gfn(Uhn(cT(PNt,1),zZn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>t4n&&(c=n,r=new MO(l,a=f),aq(o.a,r),WUn(this,o,c,r,!1),(b=n.r)&&(r=new MO(w=uM(pK(hyn(b.e,0))),a),aq(o.a,r),WUn(this,o,c,r,!1),c=b,r=new MO(w,a=t-b.o*i),aq(o.a,r),WUn(this,o,c,r,!1)),r=new MO(g,a),aq(o.a,r),WUn(this,o,c,r,!1)))},uZn.zg=function(n){return n.i.n.a+n.n.a+n.a.a},uZn.Ag=function(){return KQn(),yRt},uZn.Bg=function(){return KQn(),KRt},zW(N9n,"SouthToNorthRoutingStrategy",1871),sDn(1869,670,{},Fk),uZn.yg=function(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Ww(n.n);h.a<h.c.c.length;)for(s=uG(N3(h),12),l=Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a])).b,u=new Ww(s.g);u.a<u.c.c.length;)v9(o=uG(N3(u),18))||(d=o.d,g=Gfn(Uhn(cT(PNt,1),zZn,8,0,[d.i.n,d.n,d.a])).b,e.Math.abs(l-g)>t4n&&(c=n,r=new MO(a=f,l),aq(o.a,r),WUn(this,o,c,r,!0),(b=n.r)&&(r=new MO(a,w=uM(pK(hyn(b.e,0)))),aq(o.a,r),WUn(this,o,c,r,!0),c=b,r=new MO(a=t+b.o*i,w),aq(o.a,r),WUn(this,o,c,r,!0)),r=new MO(a,g),aq(o.a,r),WUn(this,o,c,r,!0)))},uZn.zg=function(n){return n.i.n.b+n.n.b+n.a.b},uZn.Ag=function(){return KQn(),kRt},uZn.Bg=function(){return KQn(),_Rt},zW(N9n,"WestToEastRoutingStrategy",1869),sDn(828,1,{},jqn),uZn.Ib=function(){return vIn(this.a)},uZn.b=0,uZn.c=!1,uZn.d=!1,uZn.f=0,zW(D9n,"NubSpline",828),sDn(418,1,{418:1},pFn,R1),zW(D9n,"NubSpline/PolarCP",418),sDn(1480,1,y9n,zTn),uZn.rg=function(n){return HPn(uG(n,36))},uZn.Kf=function(n,t){EJn(this,uG(n,36),t)},zW(D9n,"SplineEdgeRouter",1480),sDn(274,1,{274:1},O7),uZn.Ib=function(){return this.a+" ->("+this.c+") "+this.b},uZn.c=0,zW(D9n,"SplineEdgeRouter/Dependency",274),sDn(464,22,{3:1,34:1,22:1,464:1},XI);var XSt,zSt,VSt,WSt,QSt,JSt=_cn(D9n,"SplineEdgeRouter/SideToProcess",464,Oat,E1,AH);sDn(1481,1,y1n,va),uZn.Mb=function(n){return uFn(),!uG(n,131).o},zW(D9n,"SplineEdgeRouter/lambda$0$Type",1481),sDn(1482,1,{},ka),uZn.Ze=function(n){return uFn(),uG(n,131).v+1},zW(D9n,"SplineEdgeRouter/lambda$1$Type",1482),sDn(1483,1,QZn,BI),uZn.Cd=function(n){yq(this.a,this.b,uG(n,42))},zW(D9n,"SplineEdgeRouter/lambda$2$Type",1483),sDn(1484,1,QZn,HI),uZn.Cd=function(n){Mq(this.a,this.b,uG(n,42))},zW(D9n,"SplineEdgeRouter/lambda$3$Type",1484),sDn(131,1,{34:1,131:1},UAn,Izn),uZn.Fd=function(n){return NT(this,uG(n,131))},uZn.b=0,uZn.e=!1,uZn.f=0,uZn.g=0,uZn.j=!1,uZn.k=!1,uZn.n=0,uZn.o=!1,uZn.p=!1,uZn.q=!1,uZn.s=0,uZn.u=0,uZn.v=0,uZn.F=0,zW(D9n,"SplineSegment",131),sDn(467,1,{467:1},ya),uZn.a=0,uZn.b=!1,uZn.c=!1,uZn.d=!1,uZn.e=!1,uZn.f=0,zW(D9n,"SplineSegment/EdgeInformation",467),sDn(1198,1,{},Ma),zW(_9n,q3n,1198),sDn(1199,1,b2n,Ta),uZn.Ne=function(n,t){return yNn(uG(n,121),uG(t,121))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(_9n,X3n,1199),sDn(1197,1,{},Gj),zW(_9n,"MrTree",1197),sDn(405,22,{3:1,34:1,22:1,405:1,188:1,196:1},zI),uZn.dg=function(){return TNn(this)},uZn.qg=function(){return TNn(this)};var YSt,ZSt=_cn(_9n,"TreeLayoutPhases",405,Oat,i5,LH);sDn(1112,205,M3n,FF),uZn.rf=function(n,t){var e,i,r,c,a,o,u;for(oM(gK(zDn(n,(QGn(),gCt))))||J1(new Sd((vP(),new Vy(n)))),(c=t.eh(B9n)).Ug("build tGraph",1),zsn(o=new L7,n),kfn(o,(OQn(),RPt),n),EUn(n,o,u=new Ym),iGn(n,o,u),a=o,c.Vg(),(c=t.eh(B9n)).Ug("Split graph",1),r=LUn(this.a,a),c.Vg(),i=new Ww(r);i.a<i.c.c.length;)e=uG(N3(i),121),hPn(this.b,e,t.eh(.5999999940395355/r.c.length));(c=t.eh(B9n)).Ug("Pack components",1),a=DYn(r),c.Vg(),(c=t.eh(B9n)).Ug("Apply layout results",1),WVn(a),c.Vg()},zW(_9n,"TreeLayoutProvider",1112),sDn(1894,1,t1n,Ea),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(_9n,"TreeUtil/1",1894),sDn(1895,1,t1n,Sa),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(_9n,"TreeUtil/2",1895),sDn(1885,1,y1n,Pa),uZn.Mb=function(n){return oM(gK(oIn(uG(n,39),(OQn(),UPt))))},zW(_9n,"TreeUtil/lambda$0$Type",1885),sDn(1891,1,y1n,mp),uZn.Mb=function(n){return this.a.Hc(uG(n,39))},zW(_9n,"TreeUtil/lambda$10$Type",1891),sDn(1892,1,{},vp),uZn.Kb=function(n){return n5(this.a,uG(n,39))},zW(_9n,"TreeUtil/lambda$11$Type",1892),sDn(1893,1,y1n,UI),uZn.Mb=function(n){return vin(this.a,this.b,uG(n,39))},zW(_9n,"TreeUtil/lambda$12$Type",1893),sDn(1886,1,y1n,kp),uZn.Mb=function(n){return Rgn(this.a,uG(n,65))},zW(_9n,"TreeUtil/lambda$3$Type",1886),sDn(1887,1,b2n,ja),uZn.Ne=function(n,t){return I_(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(_9n,"TreeUtil/lambda$4$Type",1887),sDn(1888,1,y1n,yp),uZn.Mb=function(n){return Kgn(this.a,uG(n,65))},zW(_9n,"TreeUtil/lambda$7$Type",1888),sDn(1889,1,b2n,Ca),uZn.Ne=function(n,t){return O_(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(_9n,"TreeUtil/lambda$8$Type",1889),sDn(1890,1,{},Ia),uZn.Kb=function(n){return uG(n,65).b},zW(_9n,"TreeUtil/lambda$9$Type",1890),sDn(508,137,{3:1,508:1,96:1,137:1}),uZn.g=0,zW(U9n,"TGraphElement",508),sDn(65,508,{3:1,65:1,508:1,96:1,137:1},uZ),uZn.Ib=function(){return this.b&&this.c?V3(this.b)+"->"+V3(this.c):"e_"+Hon(this)},zW(U9n,"TEdge",65),sDn(121,137,{3:1,121:1,96:1,137:1},L7),uZn.Ib=function(){var n,t,e,i,r;for(r=null,i=Fkn(this.b,0);i.b!=i.d.c;)r+=(null==(e=uG(I6(i),39)).c||0==e.c.length?"n_"+e.g:"n_"+e.c)+"\n";for(t=Fkn(this.a,0);t.b!=t.d.c;)r+=((n=uG(I6(t),65)).b&&n.c?V3(n.b)+"->"+V3(n.c):"e_"+Hon(n))+"\n";return r};var nPt=zW(U9n,"TGraph",121);sDn(643,508,{3:1,508:1,643:1,96:1,137:1}),zW(U9n,"TShape",643),sDn(39,643,{3:1,508:1,39:1,643:1,96:1,137:1},wln),uZn.Ib=function(){return V3(this)};var tPt,ePt,iPt,rPt,cPt,aPt,oPt,uPt,sPt,hPt,fPt,lPt=zW(U9n,"TNode",39);sDn(236,1,t1n,Mp),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Tp(Fkn(this.a.d,0))},zW(U9n,"TNode/2",236),sDn(329,1,$Zn,Tp),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(I6(this.a),65).c},uZn.Ob=function(){return Jj(this.a)},uZn.Qb=function(){yrn(this.a)},zW(U9n,"TNode/2/1",329),sDn(1923,1,Q4n,Oa),uZn.Kf=function(n,t){SYn(this,uG(n,121),t)},zW(q9n,"CompactionProcessor",1923),sDn(1924,1,b2n,jp),uZn.Ne=function(n,t){return ksn(this.a,uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$0$Type",1924),sDn(1925,1,y1n,GI),uZn.Mb=function(n){return xZ(this.b,this.a,uG(n,42))},uZn.a=0,uZn.b=0,zW(q9n,"CompactionProcessor/lambda$1$Type",1925),sDn(1934,1,b2n,Aa),uZn.Ne=function(n,t){return vW(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$10$Type",1934),sDn(1935,1,b2n,La),uZn.Ne=function(n,t){return Kx(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$11$Type",1935),sDn(1936,1,b2n,Na),uZn.Ne=function(n,t){return kW(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$12$Type",1936),sDn(1926,1,y1n,Ep),uZn.Mb=function(n){return hD(this.a,uG(n,42))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$2$Type",1926),sDn(1927,1,y1n,Sp),uZn.Mb=function(n){return fD(this.a,uG(n,42))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$3$Type",1927),sDn(1928,1,y1n,$a),uZn.Mb=function(n){return-1==uG(n,39).c.indexOf(H9n)},zW(q9n,"CompactionProcessor/lambda$4$Type",1928),sDn(1929,1,{},Pp),uZn.Kb=function(n){return a6(this.a,uG(n,39))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$5$Type",1929),sDn(1930,1,{},Cp),uZn.Kb=function(n){return ren(this.a,uG(n,39))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$6$Type",1930),sDn(1931,1,b2n,Ip),uZn.Ne=function(n,t){return G9(this.a,uG(n,240),uG(t,240))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$7$Type",1931),sDn(1932,1,b2n,Op),uZn.Ne=function(n,t){return q9(this.a,uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$8$Type",1932),sDn(1933,1,b2n,Da),uZn.Ne=function(n,t){return Fx(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$9$Type",1933),sDn(1921,1,Q4n,xa),uZn.Kf=function(n,t){cBn(uG(n,121),t)},zW(q9n,"DirectionProcessor",1921),sDn(1913,1,Q4n,KF),uZn.Kf=function(n,t){YUn(this,uG(n,121),t)},zW(q9n,"FanProcessor",1913),sDn(1937,1,Q4n,Ra),uZn.Kf=function(n,t){N_n(uG(n,121),t)},zW(q9n,"GraphBoundsProcessor",1937),sDn(1938,1,{},Ka),uZn.Ye=function(n){return uG(n,39).e.a},zW(q9n,"GraphBoundsProcessor/lambda$0$Type",1938),sDn(1939,1,{},Fa),uZn.Ye=function(n){return uG(n,39).e.b},zW(q9n,"GraphBoundsProcessor/lambda$1$Type",1939),sDn(1940,1,{},_a),uZn.Ye=function(n){return lP(uG(n,39))},zW(q9n,"GraphBoundsProcessor/lambda$2$Type",1940),sDn(1941,1,{},Ba),uZn.Ye=function(n){return fP(uG(n,39))},zW(q9n,"GraphBoundsProcessor/lambda$3$Type",1941),sDn(262,22,{3:1,34:1,22:1,262:1,196:1},VI),uZn.dg=function(){switch(this.g){case 0:return new sy;case 1:return new KF;case 2:return new uy;case 3:return new Xa;case 4:return new Ua;case 8:return new Ha;case 5:return new xa;case 6:return new Va;case 7:return new Oa;case 9:return new Ra;case 10:return new Wa;default:throw hv(new vM(v6n+(null!=this.f?this.f:""+this.g)))}};var bPt,wPt,dPt,gPt,pPt=_cn(q9n,k6n,262,Oat,usn,NH);sDn(1920,1,Q4n,Ha),uZn.Kf=function(n,t){xQn(uG(n,121),t)},zW(q9n,"LevelCoordinatesProcessor",1920),sDn(1918,1,Q4n,Ua),uZn.Kf=function(n,t){ZRn(this,uG(n,121),t)},uZn.a=0,zW(q9n,"LevelHeightProcessor",1918),sDn(1919,1,t1n,Ga),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(q9n,"LevelHeightProcessor/1",1919),sDn(1914,1,Q4n,uy),uZn.Kf=function(n,t){g_n(this,uG(n,121),t)},zW(q9n,"LevelProcessor",1914),sDn(1915,1,y1n,qa),uZn.Mb=function(n){return oM(gK(oIn(uG(n,39),(OQn(),UPt))))},zW(q9n,"LevelProcessor/lambda$0$Type",1915),sDn(1916,1,Q4n,Xa),uZn.Kf=function(n,t){DAn(this,uG(n,121),t)},uZn.a=0,zW(q9n,"NeighborsProcessor",1916),sDn(1917,1,t1n,za),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(q9n,"NeighborsProcessor/1",1917),sDn(1922,1,Q4n,Va),uZn.Kf=function(n,t){JUn(this,uG(n,121),t)},uZn.a=0,zW(q9n,"NodePositionProcessor",1922),sDn(1912,1,Q4n,sy),uZn.Kf=function(n,t){Ezn(this,uG(n,121),t)},zW(q9n,"RootProcessor",1912),sDn(1942,1,Q4n,Wa),uZn.Kf=function(n,t){Wyn(uG(n,121),t)},zW(q9n,"Untreeifyer",1942),sDn(392,22,{3:1,34:1,22:1,392:1},WI);var mPt,vPt,kPt,yPt,MPt,TPt,jPt,EPt,SPt,PPt,CPt,IPt,OPt,APt,LPt,NPt,$Pt,DPt,xPt,RPt,KPt,FPt,_Pt,BPt,HPt,UPt,GPt,qPt,XPt,zPt,VPt,WPt,QPt,JPt,YPt,ZPt,nCt,tCt,eCt,iCt,rCt,cCt,aCt,oCt,uCt,sCt,hCt,fCt,lCt,bCt,wCt,dCt,gCt,pCt,mCt,vCt,kCt,yCt,MCt,TCt,jCt,ECt,SCt,PCt,CCt,ICt,OCt,ACt,LCt,NCt,$Ct,DCt,xCt,RCt=_cn(W9n,"EdgeRoutingMode",392,Oat,t3,$H);sDn(862,1,K2n,vl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J9n),""),r7n),"Turns on Tree compaction which decreases the size of the whole tree by placing nodes of multiple levels in one large level"),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y9n),""),"Edge End Texture Length"),"Should be set to the length of the texture at the end of an edge. This value can be used to improve the Edge Routing."),7),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z9n),""),"Tree Level"),"The index for the tree level the node is in"),xwn(0)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n7n),""),r7n),"When set to a positive number this option will force the algorithm to place the node to the specified position within the trees layer if weighting is set to constraint"),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,t7n),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),tCt),gNt),BCt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e7n),""),"Edge Routing Mode"),"Chooses an Edge Routing algorithm."),WPt),gNt),RCt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,i7n),""),"Search Order"),"Which search order to use when computing a spanning tree."),YPt),gNt),QCt),ggn(hNt)))),yJn((new Ml,n))},zW(W9n,"MrTreeMetaDataProvider",862),sDn(1006,1,K2n,Ml),uZn.hf=function(n){yJn(n)},zW(W9n,"MrTreeOptions",1006),sDn(1007,1,{},Qa),uZn.sf=function(){return new FF},uZn.tf=function(n){},zW(W9n,"MrTreeOptions/MrtreeFactory",1007),sDn(353,22,{3:1,34:1,22:1,353:1},QI);var KCt,FCt,_Ct,BCt=_cn(W9n,"OrderWeighting",353,Oat,r5,DH);sDn(433,22,{3:1,34:1,22:1,433:1},JI);var HCt,UCt,GCt,qCt,XCt,zCt,VCt,WCt,QCt=_cn(W9n,"TreeifyingOrder",433,Oat,T1,xH);sDn(1486,1,y9n,Tl),uZn.rg=function(n){return uG(n,121),UCt},uZn.Kf=function(n,t){$un(this,uG(n,121),t)},zW("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1486),sDn(1487,1,y9n,jl),uZn.rg=function(n){return uG(n,121),GCt},uZn.Kf=function(n,t){E_n(this,uG(n,121),t)},zW(u7n,"NodeOrderer",1487),sDn(1494,1,{},lo),uZn.td=function(n){return Nq(n)},zW(u7n,"NodeOrderer/0methodref$lambda$6$Type",1494),sDn(1488,1,y1n,bo),uZn.Mb=function(n){return ncn(),oM(gK(oIn(uG(n,39),(OQn(),UPt))))},zW(u7n,"NodeOrderer/lambda$0$Type",1488),sDn(1489,1,y1n,wo),uZn.Mb=function(n){return ncn(),uG(oIn(uG(n,39),(QGn(),kCt)),17).a<0},zW(u7n,"NodeOrderer/lambda$1$Type",1489),sDn(1490,1,y1n,Lp),uZn.Mb=function(n){return _an(this.a,uG(n,39))},zW(u7n,"NodeOrderer/lambda$2$Type",1490),sDn(1491,1,y1n,Ap),uZn.Mb=function(n){return f6(this.a,uG(n,39))},zW(u7n,"NodeOrderer/lambda$3$Type",1491),sDn(1492,1,b2n,go),uZn.Ne=function(n,t){return frn(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(u7n,"NodeOrderer/lambda$4$Type",1492),sDn(1493,1,y1n,po),uZn.Mb=function(n){return ncn(),0!=uG(oIn(uG(n,39),(OQn(),EPt)),17).a},zW(u7n,"NodeOrderer/lambda$5$Type",1493),sDn(1495,1,y9n,yl),uZn.rg=function(n){return uG(n,121),qCt},uZn.Kf=function(n,t){aUn(this,uG(n,121),t)},uZn.b=0,zW("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1495),sDn(1496,1,y9n,kl),uZn.rg=function(n){return uG(n,121),XCt},uZn.Kf=function(n,t){gHn(uG(n,121),t)},zW(s7n,"EdgeRouter",1496),sDn(1498,1,b2n,fo),uZn.Ne=function(n,t){return d$(uG(n,17).a,uG(t,17).a)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/0methodref$compare$Type",1498),sDn(1503,1,{},Ya),uZn.Ye=function(n){return uM(pK(n))},zW(s7n,"EdgeRouter/1methodref$doubleValue$Type",1503),sDn(1505,1,b2n,Za),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/2methodref$compare$Type",1505),sDn(1507,1,b2n,no),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/3methodref$compare$Type",1507),sDn(1509,1,{},Ja),uZn.Ye=function(n){return uM(pK(n))},zW(s7n,"EdgeRouter/4methodref$doubleValue$Type",1509),sDn(1511,1,b2n,to),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/5methodref$compare$Type",1511),sDn(1513,1,b2n,eo),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/6methodref$compare$Type",1513),sDn(1497,1,{},io),uZn.Kb=function(n){return tcn(),uG(oIn(uG(n,39),(QGn(),ACt)),17)},zW(s7n,"EdgeRouter/lambda$0$Type",1497),sDn(1508,1,{},ro),uZn.Kb=function(n){return CR(uG(n,39))},zW(s7n,"EdgeRouter/lambda$11$Type",1508),sDn(1510,1,{},dO),uZn.Kb=function(n){return vq(this.b,this.a,uG(n,39))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$13$Type",1510),sDn(1512,1,{},gO),uZn.Kb=function(n){return IR(this.b,this.a,uG(n,39))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$15$Type",1512),sDn(1514,1,b2n,co),uZn.Ne=function(n,t){return Gkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$17$Type",1514),sDn(1515,1,b2n,ao),uZn.Ne=function(n,t){return qkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$18$Type",1515),sDn(1516,1,b2n,oo),uZn.Ne=function(n,t){return zkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$19$Type",1516),sDn(1499,1,y1n,Np),uZn.Mb=function(n){return n0(this.a,uG(n,39))},uZn.a=0,zW(s7n,"EdgeRouter/lambda$2$Type",1499),sDn(1517,1,b2n,uo),uZn.Ne=function(n,t){return Xkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$20$Type",1517),sDn(1500,1,b2n,so),uZn.Ne=function(n,t){return TG(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$3$Type",1500),sDn(1501,1,b2n,ho),uZn.Ne=function(n,t){return jG(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$4$Type",1501),sDn(1502,1,{},mo),uZn.Kb=function(n){return OR(uG(n,39))},zW(s7n,"EdgeRouter/lambda$5$Type",1502),sDn(1504,1,{},pO),uZn.Kb=function(n){return kq(this.b,this.a,uG(n,39))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$7$Type",1504),sDn(1506,1,{},mO),uZn.Kb=function(n){return AR(this.b,this.a,uG(n,39))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$9$Type",1506),sDn(675,1,{675:1},wTn),uZn.e=0,uZn.f=!1,uZn.g=!1,zW(s7n,"MultiLevelEdgeNodeNodeGap",675),sDn(1943,1,b2n,vo),uZn.Ne=function(n,t){return l2(uG(n,240),uG(t,240))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"MultiLevelEdgeNodeNodeGap/lambda$0$Type",1943),sDn(1944,1,b2n,ko),uZn.Ne=function(n,t){return b2(uG(n,240),uG(t,240))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"MultiLevelEdgeNodeNodeGap/lambda$1$Type",1944),sDn(500,22,{3:1,34:1,22:1,500:1,188:1,196:1},YI),uZn.dg=function(){return Fpn(this)},uZn.qg=function(){return Fpn(this)};var JCt,YCt,ZCt,nIt,tIt,eIt,iIt=_cn(h7n,"RadialLayoutPhases",500,Oat,S1,RH);sDn(1113,205,M3n,Uj),uZn.rf=function(n,t){var e,i,r,c;if(e=_Kn(this,n),t.Ug("Radial layout",e.c.length),oM(gK(zDn(n,(jOn(),RIt))))||J1(new Sd((vP(),new Vy(n)))),c=XPn(n),Myn(n,(SK(),zCt),c),!c)throw hv(new vM("The given graph is not a tree!"));for(0==(i=uM(pK(zDn(n,HIt))))&&(i=tNn(n)),Myn(n,HIt,i),r=new Ww(_Kn(this,n));r.a<r.c.c.length;)uG(N3(r),47).Kf(n,t.eh(1));t.Vg()},zW(h7n,"RadialLayoutProvider",1113),sDn(556,1,b2n,Vj),uZn.Ne=function(n,t){return RBn(this.a,this.b,uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},uZn.a=0,uZn.b=0,zW(h7n,"RadialUtil/lambda$0$Type",556),sDn(1395,1,Q4n,yo),uZn.Kf=function(n,t){GQn(uG(n,27),t)},zW(d7n,"CalculateGraphSize",1395),sDn(1396,1,Q4n,Mo),uZn.Kf=function(n,t){CXn(uG(n,27))},zW(d7n,"EdgeAngleCalculator",1396),sDn(368,22,{3:1,34:1,22:1,368:1,196:1},ZI),uZn.dg=function(){switch(this.g){case 0:return new Co;case 1:return new To;case 2:return new Io;case 3:return new yo;case 4:return new Mo;default:throw hv(new vM(v6n+(null!=this.f?this.f:""+this.g)))}};var rIt,cIt,aIt,oIt=_cn(d7n,k6n,368,Oat,b9,KH);sDn(653,1,{}),uZn.e=1,uZn.g=0,zW(p7n,"AbstractRadiusExtensionCompaction",653),sDn(1834,653,{},NR),uZn.Cg=function(n){var t,e,i,r,c,a,o,u,s;for(this.c=uG(zDn(n,(SK(),zCt)),27),iw(this,this.c),this.d=aMn(uG(zDn(n,(jOn(),zIt)),299)),(u=uG(zDn(n,AIt),17))&&ew(this,u.a),rw(this,(tJ(o=pK(zDn(n,(XYn(),DDt)))),o)),s=GFn(this.c),this.d&&this.d.Gg(s),SHn(this,s),a=new IM(Uhn(cT(bFt,1),m7n,27,0,[this.c])),e=0;e<2;e++)for(t=0;t<s.c.length;t++)r=new IM(Uhn(cT(bFt,1),m7n,27,0,[(u3(t,s.c.length),uG(s.c[t],27))])),c=t<s.c.length-1?(u3(t+1,s.c.length),uG(s.c[t+1],27)):(u3(0,s.c.length),uG(s.c[0],27)),i=0==t?uG(zq(s,s.c.length-1),27):(u3(t-1,s.c.length),uG(s.c[t-1],27)),xCn(this,(u3(t,s.c.length),uG(s.c[t],27),a),i,c,r)},zW(p7n,"AnnulusWedgeCompaction",1834),sDn(1393,1,Q4n,To),uZn.Kf=function(n,t){sun(uG(n,27),t)},zW(p7n,"GeneralCompactor",1393),sDn(1833,653,{},jo),uZn.Cg=function(n){var t,e,i,r;e=uG(zDn(n,(SK(),zCt)),27),this.f=e,this.b=aMn(uG(zDn(n,(jOn(),zIt)),299)),(r=uG(zDn(n,AIt),17))&&ew(this,r.a),rw(this,(tJ(i=pK(zDn(n,(XYn(),DDt)))),i)),t=GFn(e),this.b&&this.b.Gg(t),aAn(this,t)},uZn.a=0,zW(p7n,"RadialCompaction",1833),sDn(1842,1,{},Eo),uZn.Dg=function(n){var t,e,i,r,c,a;for(this.a=n,t=0,i=0,c=new Ww(a=GFn(n));c.a<c.c.c.length;)for(r=uG(N3(c),27),e=++i;e<a.c.length;e++)bqn(this,r,(u3(e,a.c.length),uG(a.c[e],27)))&&(t+=1);return t},zW(v7n,"CrossingMinimizationPosition",1842),sDn(1840,1,{},So),uZn.Dg=function(n){var t,i,r,c,a,o,u,s,f,l,b,w,d;for(r=0,i=new Fz(ix(eRn(n).a.Kc(),new h));hDn(i);)t=uG(N9(i),74),f=(u=lCn(uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84))).i+u.g/2,l=u.j+u.f/2,c=n.i+n.g/2,a=n.j+n.f/2,(b=new sj).a=f-c,b.b=l-a,OEn(o=new MO(b.a,b.b),n.g,n.f),b.a-=o.a,b.b-=o.b,c=f-b.a,a=l-b.b,OEn(s=new MO(b.a,b.b),u.g,u.f),b.a-=s.a,b.b-=s.b,w=(f=c+b.a)-c,d=(l=a+b.b)-a,r+=e.Math.sqrt(w*w+d*d);return r},zW(v7n,"EdgeLengthOptimization",1840),sDn(1841,1,{},Po),uZn.Dg=function(n){var t,i,r,c,a,o,u,s,f;for(r=0,i=new Fz(ix(eRn(n).a.Kc(),new h));hDn(i);)t=uG(N9(i),74),o=(a=lCn(uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84))).i+a.g/2,u=a.j+a.f/2,c=uG(zDn(a,(XYn(),mDt)),8),s=o-(n.i+c.a+n.g/2),f=u-(n.j+c.b+n.f),r+=e.Math.sqrt(s*s+f*f);return r},zW(v7n,"EdgeLengthPositionOptimization",1841),sDn(1392,653,Q4n,Co),uZn.Kf=function(n,t){lLn(this,uG(n,27),t)},zW("org.eclipse.elk.alg.radial.intermediate.overlaps","RadiusExtensionOverlapRemoval",1392),sDn(1394,1,Q4n,Io),uZn.Kf=function(n,t){eV(uG(n,27),t)},zW("org.eclipse.elk.alg.radial.intermediate.rotation","GeneralRotator",1394),sDn(434,22,{3:1,34:1,22:1,434:1},nO);var uIt,sIt,hIt,fIt,lIt=_cn(y7n,"AnnulusWedgeCriteria",434,Oat,j1,_H);sDn(393,22,{3:1,34:1,22:1,393:1},tO);var bIt,wIt,dIt,gIt,pIt,mIt,vIt,kIt,yIt,MIt,TIt,jIt,EIt,SIt,PIt,CIt,IIt,OIt,AIt,LIt,NIt,$It,DIt,xIt,RIt,KIt,FIt,_It,BIt,HIt,UIt,GIt,qIt,XIt,zIt,VIt,WIt,QIt,JIt,YIt,ZIt,nOt=_cn(y7n,C3n,393,Oat,p3,FH);sDn(863,1,K2n,El),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,M7n),""),"Center On Root"),"Centers the layout on the root of the tree i.e. so that the central node is also the center node of the final layout. This introduces additional whitespace."),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,T7n),""),"Order ID"),"The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly."),xwn(0)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,j7n),""),"Radius"),"The radius option can be used to set the initial radius for the radial layouter."),0),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,E7n),""),"Rotate"),"The rotate option determines whether a rotation of the layout should be performed."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,S7n),""),$7n),"With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately."),pIt),gNt),nOt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,P7n),""),"Compaction Step Size"),"Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration."),xwn(1)),mNt),dot),ggn(hNt)))),H4(n,P7n,S7n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,C7n),""),"Sorter"),"Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates."),PIt),gNt),hOt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I7n),""),"Annulus Wedge Criteria"),"Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals."),IIt),gNt),lIt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,O7n),""),"Translation Optimization"),"Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized."),vIt),gNt),cOt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A7n),D7n),"Target Angle"),"The angle in radians that the layout should be rotated to after layout."),0),dNt),fot),ggn(hNt)))),H4(n,A7n,E7n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L7n),D7n),"Additional Wedge Space"),"If set to true, modifies the target angle by rotating further such that space is left for an edge to pass in between the nodes. This option should only be used in conjunction with top-down layout."),!1),wNt),cot),ggn(hNt)))),H4(n,L7n,E7n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N7n),D7n),"Outgoing Edge Angles"),"Calculate the required angle of connected nodes to leave space for an incoming edge. This option should only be used in conjunction with top-down layout."),!1),wNt),cot),ggn(hNt)))),nJn((new Sl,n))},zW(y7n,"RadialMetaDataProvider",863),sDn(1008,1,K2n,Sl),uZn.hf=function(n){nJn(n)},zW(y7n,"RadialOptions",1008),sDn(1009,1,{},Oo),uZn.sf=function(){return new Uj},uZn.tf=function(n){},zW(y7n,"RadialOptions/RadialFactory",1009),sDn(354,22,{3:1,34:1,22:1,354:1},eO);var tOt,eOt,iOt,rOt,cOt=_cn(y7n,"RadialTranslationStrategy",354,Oat,c5,BH);sDn(299,22,{3:1,34:1,22:1,299:1},iO);var aOt,oOt,uOt,sOt,hOt=_cn(y7n,"SortingStrategy",299,Oat,m3,HH);sDn(1476,1,y9n,Ao),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){QLn(this,uG(n,27),t)},uZn.c=0,zW("org.eclipse.elk.alg.radial.p1position","EadesRadial",1476),sDn(1838,1,{},Lo),uZn.Eg=function(n){return Oyn(n)},zW(R7n,"AnnulusWedgeByLeafs",1838),sDn(1839,1,{},No),uZn.Eg=function(n){return NPn(this,n)},zW(R7n,"AnnulusWedgeByNodeSpace",1839),sDn(1477,1,y9n,$o),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){epn(this,uG(n,27),t)},zW("org.eclipse.elk.alg.radial.p2routing","StraightLineEdgeRouter",1477),sDn(826,1,{},dy),uZn.Fg=function(n){},uZn.Gg=function(n){kv(this,n)},zW(K7n,"IDSorter",826),sDn(1837,1,b2n,Do),uZn.Ne=function(n,t){return hun(uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(K7n,"IDSorter/lambda$0$Type",1837),sDn(1836,1,{},gun),uZn.Fg=function(n){B4(this,n)},uZn.Gg=function(n){n.dc()||(this.e||B4(this,PX(uG(n.Xb(0),27))),kv(this.e,n))},zW(K7n,"PolarCoordinateSorter",1836),sDn(445,22,{3:1,34:1,22:1,445:1},rO);var fOt,lOt,bOt,wOt,dOt=_cn(H7n,"RectPackingLayoutPhases",445,Oat,d3,UH);sDn(1118,205,M3n,qj),uZn.rf=function(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(t.Ug("Rectangle Packing",1),u=uG(zDn(n,(S_n(),hAt)),107),c=oM(gK(zDn(n,iAt))),o=uM(pK(zDn(n,bAt))),p=oM(gK(zDn(n,wAt))),!n.a&&(n.a=new fV(bFt,n,10,11)),l=n.a,g=!1,p&&l.i>=3)for(w=uG(zrn(l,0),27),d=uG(zrn(l,1),27),i=0;i+2<l.i;){if(b=w,w=d,d=uG(zrn(l,i+2),27),b.f>=w.f+d.f+o||d.f>=b.f+w.f+o){g=!0;break}++i}else g=!0;if(!g){for(s=l.i,r=new DD(l);r.e!=r.i.gc();)Myn(uG(Zkn(r),27),(XYn(),vDt),xwn(s)),--s;return XGn(n,new fy),void t.Vg()}for(_J(this.a),JV(this.a,(Jmn(),oOt),uG(zDn(n,mAt),188)),JV(this.a,uOt,uG(zDn(n,sAt),188)),JV(this.a,sOt,uG(zDn(n,dAt),188)),ZL(this.a,(Aq(m=new wJ,oOt,(Zyn(),wOt)),Aq(m,uOt,bOt),oM(gK(zDn(n,YOt)))&&Aq(m,oOt,lOt),m)),a=1/(e=Qzn(this.a,n)).c.length,f=new Ww(e);f.a<f.c.c.length;){if(h=uG(N3(f),47),t.$g())return;h.Kf(n,t.eh(a))}Isn(l,u),c||ZQn(n,uM(pK(zDn(n,(lBn(),vOt))))+(u.b+u.c),uM(pK(zDn(n,mOt)))+(u.d+u.a),!1,!0),oM(gK(zDn(n,aAt)))||J1(new Sd((vP(),new Vy(n)))),t.Vg()},zW(H7n,"RectPackingLayoutProvider",1118),sDn(1518,1,Q4n,xo),uZn.Kf=function(n,t){IXn(uG(n,27),t)},zW(U7n,"InteractiveNodeReorderer",1518),sDn(1519,1,b2n,Ro),uZn.Ne=function(n,t){return kln(uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U7n,"InteractiveNodeReorderer/lambda$0$Type",1519),sDn(455,22,{3:1,34:1,22:1,455:1,196:1},cO),uZn.dg=function(){switch(this.g){case 0:return new xo;case 1:return new Fo;case 2:return new Ko}return null};var gOt,pOt,mOt,vOt,kOt,yOt,MOt,TOt,jOt,EOt,SOt,POt,COt,IOt,OOt,AOt=_cn(U7n,k6n,455,Oat,g3,GH);sDn(1521,1,Q4n,Ko),uZn.Kf=function(n,t){Vmn(uG(n,27),t)},zW(U7n,"MinSizePostProcessor",1521),sDn(1520,1,Q4n,Fo),uZn.Kf=function(n,t){ebn(uG(n,27),t)},zW(U7n,"MinSizePreProcessor",1520),sDn(394,22,{3:1,34:1,22:1,394:1},aO);var LOt,NOt,$Ot,DOt,xOt,ROt,KOt,FOt,_Ot,BOt,HOt,UOt,GOt,qOt,XOt,zOt,VOt,WOt,QOt,JOt,YOt,ZOt,nAt,tAt,eAt,iAt,rAt,cAt,aAt,oAt,uAt,sAt,hAt,fAt,lAt,bAt,wAt,dAt,gAt,pAt,mAt,vAt,kAt=_cn(G7n,"OptimizationGoal",394,Oat,w3,qH);sDn(867,1,K2n,Pl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q7n),""),"Try box layout first"),"Whether one should check whether the regions are stackable to see whether box layout would do the job. For example, nodes with the same height are not stackable inside a row. Therefore, box layout will perform better and faster."),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X7n),""),"Current position of a node in the order of nodes"),"The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,z7n),""),"Desired index of node"),"The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V7n),""),"In new Row"),"If set to true this node begins in a new row. Consequently this node cannot be moved in a previous layer during compaction. Width approximation does does not take this into account."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W7n),int),"Width Approximation Strategy"),"Strategy for finding an initial width of the drawing."),XOt),gNt),CAt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Q7n),int),"Target Width"),"Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding."),-1),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J7n),int),"Optimization Goal"),"Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored."),GOt),gNt),kAt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y7n),int),"Shift Last Placed."),"When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z7n),"packing"),rnt),"Strategy for finding an initial placement on nodes."),FOt),gNt),LAt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,nnt),cnt),"Row Height Reevaluation"),"During the compaction step the height of a row is normally not changed. If this options is set, the blocks of other rows might be added if they exceed the row height. If this is the case the whole row has to be packed again to be optimal regarding the new row height. This option should, therefore, be used with care since it might be computation heavy."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,tnt),cnt),"Compaction iterations"),"Defines the number of compaction iterations. E.g. if set to 2 the width is initially approximated, then the drawing is compacted and based on the resulting drawing the target width is decreased or increased and a second compaction step is executed and the result compared to the first one. The best run is used based on the scale measure."),xwn(1)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,ent),"whiteSpaceElimination"),"White Space Approximation Strategy"),"Strategy for expanding nodes such that whitespace in the parent is eliminated."),gNt),$At),ggn(hNt)))),lYn((new Cl,n))},zW(G7n,"RectPackingMetaDataProvider",867),sDn(1016,1,K2n,Cl),uZn.hf=function(n){lYn(n)},zW(G7n,"RectPackingOptions",1016),sDn(1017,1,{},_o),uZn.sf=function(){return new qj},uZn.tf=function(n){},zW(G7n,"RectPackingOptions/RectpackingFactory",1017),sDn(1705,1,{},AU),uZn.a=0,uZn.c=!1,zW(ont,"AreaApproximation",1705);var yAt,MAt,TAt=Iq(ont,"BestCandidateFilter");sDn(673,1,{535:1},Bo),uZn.Hg=function(n,t,i){var r,c,a,o,u,s;for(s=new Zm,a=M0n,u=new Ww(n);u.a<u.c.c.length;)o=uG(N3(u),238),a=e.Math.min(a,(o.c+(i.b+i.c))*(o.b+(i.d+i.a)));for(c=new Ww(n);c.a<c.c.c.length;)((r=uG(N3(c),238)).c+(i.b+i.c))*(r.b+(i.d+i.a))==a&&mv(s.c,r);return s},zW(ont,"AreaFilter",673),sDn(674,1,{535:1},Ho),uZn.Hg=function(n,t,i){var r,c,a,o,u,s;for(u=new Zm,s=M0n,o=new Ww(n);o.a<o.c.c.length;)a=uG(N3(o),238),s=e.Math.min(s,e.Math.abs((a.c+(i.b+i.c))/(a.b+(i.d+i.a))-t));for(c=new Ww(n);c.a<c.c.c.length;)r=uG(N3(c),238),e.Math.abs((r.c+(i.b+i.c))/(r.b+(i.d+i.a))-t)==s&&mv(u.c,r);return u},zW(ont,"AspectRatioFilter",674),sDn(1469,1,y9n,Uo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){IFn(uG(n,27),t)},zW(ont,"GreedyWidthApproximator",1469),sDn(672,1,{535:1},Go),uZn.Hg=function(n,t,i){var r,c,a,o,u,s;for(s=new Zm,a=T0n,u=new Ww(n);u.a<u.c.c.length;)o=uG(N3(u),238),a=e.Math.max(a,mX(o.c+(i.b+i.c),o.b+(i.d+i.a),o.a));for(c=new Ww(n);c.a<c.c.c.length;)mX((r=uG(N3(c),238)).c+(i.b+i.c),r.b+(i.d+i.a),r.a)==a&&mv(s.c,r);return s},zW(ont,"ScaleMeasureFilter",672),sDn(1470,1,y9n,qo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){JLn(uG(n,27),t)},zW(ont,"TargetWidthWidthApproximator",1470),sDn(490,22,{3:1,34:1,22:1,490:1,188:1,196:1},oO),uZn.dg=function(){return UCn(this)},uZn.qg=function(){return UCn(this)};var jAt,EAt,SAt,PAt,CAt=_cn(ont,"WidthApproximationStrategy",490,Oat,y1,XH);sDn(1471,1,y9n,Xo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){oJn(this,uG(n,27),t)},zW(unt,"Compactor",1471),sDn(1473,1,y9n,zo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){zKn(uG(n,27),t)},zW(unt,"NoPlacement",1473),sDn(439,22,{3:1,34:1,22:1,439:1,188:1,196:1},uO),uZn.dg=function(){return Lwn(this)},uZn.qg=function(){return Lwn(this)};var IAt,OAt,AAt,LAt=_cn(unt,"PackingStrategy",439,Oat,b3,WH);sDn(810,1,{},vO),uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=M0n,uZn.e=0,uZn.f=M0n,zW(unt,"RowFillingAndCompaction",810),sDn(1472,1,y9n,Vo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){wVn(uG(n,27),t)},zW(unt,"SimplePlacement",1472),sDn(1474,1,y9n,Wo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){this.Ig(uG(n,27),t)},uZn.Ig=function(n,t){XDn(n,t)},zW(hnt,"EqualWhitespaceEliminator",1474),sDn(1475,1474,y9n,Qo),uZn.Ig=function(n,t){var e,i,r,c;t.Ug("To Aspect Ratio Whitesapce Eliminator",1),c=uM(pK(zDn(n,(lBn(),vOt)))),r=uM(pK(zDn(n,mOt))),i=uM(pK(zDn(n,(S_n(),VOt)))),e=uM(pK(zDn(n,pOt))),c/r<i?Myn(n,vOt,c=r*i):(Myn(n,pOt,e+=c/i-r),Myn(n,mOt,r+e)),XDn(n,t),t.Vg()},zW(hnt,"ToAspectratioNodeExpander",1475),sDn(491,22,{3:1,34:1,22:1,491:1,188:1,196:1},sO),uZn.dg=function(){return Sun(this)},uZn.qg=function(){return Sun(this)};var NAt,$At=_cn(hnt,"WhiteSpaceEliminationStrategy",491,Oat,M1,QH);sDn(172,1,{172:1},dln),uZn.a=0,uZn.c=!1,uZn.d=0,uZn.e=0,uZn.f=0,uZn.g=0,uZn.i=0,uZn.k=!1,uZn.o=M0n,uZn.p=M0n,uZn.r=0,uZn.s=0,uZn.t=0,zW(fnt,"Block",172),sDn(209,1,{209:1},c0),uZn.a=0,uZn.b=0,uZn.d=0,uZn.e=0,uZn.f=0,zW(fnt,"BlockRow",209),sDn(315,1,{315:1},r0),uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.f=0,zW(fnt,"BlockStack",315),sDn(238,1,{238:1},jq,Mvn),uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.g=0;var DAt,xAt,RAt,KAt,FAt,_At=zW(fnt,"DrawingData",238);sDn(373,22,{3:1,34:1,22:1,373:1},hO);var BAt,HAt,UAt,GAt,qAt=_cn(fnt,"DrawingDataDescriptor",373,Oat,w9,JH);sDn(186,1,{186:1},e4),uZn.b=0,uZn.c=0,uZn.e=0,uZn.f=0,zW(fnt,"RectRow",186),sDn(763,1,{},Xbn),uZn.j=0,zW(bnt,f6n,763),sDn(1209,1,{},Jo),uZn.af=function(n){return atn(n.a,n.b)},zW(bnt,z3n,1209),sDn(1210,1,{},$p),uZn.af=function(n){return X9(this.a,n)},zW(bnt,l6n,1210),sDn(1211,1,{},Dp),uZn.af=function(n){return dyn(this.a,n)},zW(bnt,b6n,1211),sDn(1212,1,{},xp),uZn.af=function(n){return lfn(this.a,n)},zW(bnt,"ElkGraphImporter/lambda$3$Type",1212),sDn(1213,1,{},Rp),uZn.af=function(n){return QNn(this.a,n)},zW(bnt,w6n,1213),sDn(1115,205,M3n,Xj),uZn.rf=function(n,t){var e,i,r,c,a,o,u,s,h,f;for(vnn(n,(fIn(),yLt))&&(f=mK(zDn(n,(jMn(),ULt))),(c=QBn(aan(),f))&&uG(A1(c.f),205).rf(n,t.eh(1))),Myn(n,gLt,(B7(),ZAt)),Myn(n,pLt,(pOn(),cLt)),Myn(n,mLt,(Vhn(),VLt)),a=uG(zDn(n,(jMn(),FLt)),17).a,t.Ug("Overlap removal",1),oM(gK(zDn(n,KLt))),u=new Kp(o=new ek),e=wYn(i=new Xbn,n),s=!0,r=0;r<a&&s;){if(oM(gK(zDn(n,_Lt)))){if(o.a.$b(),IAn(new I$(u),e.i),0==o.a.gc())break;e.e=o}for(_J(this.b),JV(this.b,(Rdn(),HAt),(eP(),GLt)),JV(this.b,UAt,e.g),JV(this.b,GAt,(tP(),QAt)),this.a=Qzn(this.b,e),h=new Ww(this.a);h.a<h.c.c.length;)uG(N3(h),47).Kf(e,t.eh(1));GEn(i,e),s=oM(gK(oIn(e,(rsn(),Aht)))),++r}tWn(i,e),t.Vg()},zW(bnt,"OverlapRemovalLayoutProvider",1115),sDn(1116,1,{},Kp),zW(bnt,"OverlapRemovalLayoutProvider/lambda$0$Type",1116),sDn(444,22,{3:1,34:1,22:1,444:1},fO);var XAt,zAt,VAt=_cn(bnt,"SPOrEPhases",444,Oat,M3,ZH);sDn(1219,1,{},zj),zW(bnt,"ShrinkTree",1219),sDn(1117,205,M3n,by),uZn.rf=function(n,t){var e,i,r,c;vnn(n,(fIn(),yLt))&&(c=mK(zDn(n,yLt)),(r=QBn(aan(),c))&&uG(A1(r.f),205).rf(n,t.eh(1))),e=wYn(i=new Xbn,n),fRn(this.a,e,t.eh(1)),tWn(i,e)},zW(bnt,"ShrinkTreeLayoutProvider",1117),sDn(305,137,{3:1,305:1,96:1,137:1},i0),uZn.c=!1,zW("org.eclipse.elk.alg.spore.graph","Graph",305),sDn(489,22,{3:1,34:1,22:1,489:1,188:1,196:1},rP),uZn.dg=function(){return cln(this)},uZn.qg=function(){return cln(this)};var WAt,QAt,JAt=_cn(wnt,C3n,489,Oat,NJ,YH);sDn(558,22,{3:1,34:1,22:1,558:1,188:1,196:1},GR),uZn.dg=function(){return new tu},uZn.qg=function(){return new tu};var YAt,ZAt,nLt,tLt=_cn(wnt,"OverlapRemovalStrategy",558,Oat,$J,nU);sDn(438,22,{3:1,34:1,22:1,438:1},lO);var eLt,iLt,rLt,cLt,aLt,oLt,uLt=_cn(wnt,"RootSelection",438,Oat,P1,tU);sDn(324,22,{3:1,34:1,22:1,324:1},bO);var sLt,hLt,fLt,lLt,bLt,wLt,dLt,gLt,pLt,mLt,vLt,kLt,yLt,MLt,TLt,jLt,ELt,SLt,PLt,CLt,ILt,OLt,ALt,LLt,NLt,$Lt,DLt,xLt,RLt,KLt,FLt,_Lt,BLt,HLt,ULt,GLt,qLt=_cn(wnt,"SpanningTreeCostFunction",324,Oat,d9,eU);sDn(1014,1,K2n,Il),uZn.hf=function(n){xXn(n)},zW(wnt,"SporeCompactionOptions",1014),sDn(1015,1,{},Yo),uZn.sf=function(){return new by},uZn.tf=function(n){},zW(wnt,"SporeCompactionOptions/SporeCompactionFactory",1015),sDn(866,1,K2n,Ol),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,gnt),""),"Underlying Layout Algorithm"),"A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction."),(lAn(),kNt)),$ot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ynt),"structure"),"Structure Extraction Strategy"),"This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices."),xLt),gNt),WLt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,pnt),Snt),"Tree Construction Strategy"),"Whether a minimum spanning tree or a maximum spanning tree should be constructed."),$Lt),gNt),JLt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,mnt),Snt),"Cost Function for Spanning Tree"),"The cost function is used in the creation of the spanning tree."),LLt),gNt),qLt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,vnt),Snt),"Root node for spanning tree construction"),"The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen."),null),kNt),$ot),ggn(hNt)))),H4(n,vnt,knt,CLt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,knt),Snt),"Root selection for spanning tree"),"This sets the method used to select a root node for the construction of a spanning tree"),OLt),gNt),uLt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Mnt),y8n),rnt),"This option defines how the compaction is applied."),TLt),gNt),JAt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Tnt),y8n),"Orthogonal Compaction"),"Restricts the translation of nodes to orthogonal directions in the compaction phase."),(qx(),!1)),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,jnt),Pnt),"Upper limit for iterations of overlap removal"),null),xwn(64)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Ent),Pnt),"Whether to run a supplementary scanline overlap check."),null),!0),wNt),cot),ggn(hNt)))),KHn((new Al,n)),xXn((new Il,n))},zW(wnt,"SporeMetaDataProvider",866),sDn(1012,1,K2n,Al),uZn.hf=function(n){KHn(n)},zW(wnt,"SporeOverlapRemovalOptions",1012),sDn(1013,1,{},Zo),uZn.sf=function(){return new Xj},uZn.tf=function(n){},zW(wnt,"SporeOverlapRemovalOptions/SporeOverlapFactory",1013),sDn(539,22,{3:1,34:1,22:1,539:1,188:1,196:1},pJ),uZn.dg=function(){return aln(this)},uZn.qg=function(){return aln(this)};var XLt,zLt,VLt,WLt=_cn(wnt,"StructureExtractionStrategy",539,Oat,DJ,iU);sDn(437,22,{3:1,34:1,22:1,437:1,188:1,196:1},wO),uZn.dg=function(){return Hpn(this)},uZn.qg=function(){return Hpn(this)};var QLt,JLt=_cn(wnt,"TreeConstructionStrategy",437,Oat,C1,rU);sDn(1463,1,y9n,nu),uZn.rg=function(n){return uG(n,305),new wJ},uZn.Kf=function(n,t){ZEn(uG(n,305),t)},zW(Int,"DelaunayTriangulationPhase",1463),sDn(1464,1,QZn,Fp),uZn.Cd=function(n){kD(this.a,uG(n,68).a)},zW(Int,"DelaunayTriangulationPhase/lambda$0$Type",1464),sDn(794,1,y9n,hy),uZn.rg=function(n){return uG(n,305),new wJ},uZn.Kf=function(n,t){this.Jg(uG(n,305),t)},uZn.Jg=function(n,t){var e;t.Ug("Minimum spanning tree construction",1),e=n.d?n.d.a:uG(zq(n.i,0),68).a,ifn(this,(oM(gK(oIn(n,(rsn(),Oht)))),pzn(n.e,e,n.b)),n),t.Vg()},zW(Ont,"MinSTPhase",794),sDn(1466,794,y9n,_k),uZn.Jg=function(n,t){var e,i;t.Ug("Maximum spanning tree construction",1),e=new _p(n),i=n.d?n.d.c:uG(zq(n.i,0),68).c,ifn(this,(oM(gK(oIn(n,(rsn(),Oht)))),pzn(n.e,i,e)),n),t.Vg()},zW(Ont,"MaxSTPhase",1466),sDn(1467,1,{},_p),uZn.af=function(n){return gA(this.a,n)},zW(Ont,"MaxSTPhase/lambda$0$Type",1467),sDn(1465,1,QZn,Bp),uZn.Cd=function(n){$$(this.a,uG(n,68))},zW(Ont,"MinSTPhase/lambda$0$Type",1465),sDn(796,1,y9n,tu),uZn.rg=function(n){return uG(n,305),new wJ},uZn.Kf=function(n,t){jCn(this,uG(n,305),t)},uZn.a=!1,zW(Ant,"GrowTreePhase",796),sDn(797,1,QZn,NU),uZn.Cd=function(n){Rhn(this.a,this.b,this.c,uG(n,225))},zW(Ant,"GrowTreePhase/lambda$0$Type",797),sDn(1468,1,y9n,eu),uZn.rg=function(n){return uG(n,305),new wJ},uZn.Kf=function(n,t){EMn(this,uG(n,305),t)},zW(Ant,"ShrinkTreeCompactionPhase",1468),sDn(795,1,QZn,$U),uZn.Cd=function(n){oDn(this.a,this.b,this.c,uG(n,225))},zW(Ant,"ShrinkTreeCompactionPhase/lambda$0$Type",795);var YLt,ZLt,nNt=Iq(p9n,"IGraphElementVisitor");sDn(872,1,{536:1},r4),uZn.Kg=function(n){var t;zsn(t=aBn(this,n),uG(cQ(this.b,n),96)),hRn(this,n,t)},zW(T3n,"LayoutConfigurator",872);var tNt,eNt,iNt,rNt=Iq(T3n,"LayoutConfigurator/IPropertyHolderOptionFilter");sDn(944,1,{2032:1},iu),uZn.Lg=function(n,t){return Whn(),!n.pf(t)},zW(T3n,"LayoutConfigurator/lambda$0$Type",944),sDn(943,1,{845:1},ru),uZn.Mg=function(n,t){return Whn(),!n.pf(t)},zW(T3n,"LayoutConfigurator/lambda$1$Type",943),sDn(945,1,{2032:1},cu),uZn.Lg=function(n,t){return Zj(n,t)},zW(T3n,"LayoutConfigurator/lambda$2$Type",945),sDn(946,1,y1n,kO),uZn.Mb=function(n){return ZQ(this.a,this.b,uG(n,2032))},zW(T3n,"LayoutConfigurator/lambda$3$Type",946),sDn(869,1,{},au),zW(T3n,"RecursiveGraphLayoutEngine",869),sDn(224,63,S1n,Hv,jM),zW(T3n,"UnsupportedConfigurationException",224),sDn(370,63,S1n,EM),zW(T3n,"UnsupportedGraphException",370),sDn(761,1,{}),zW(p9n,"AbstractRandomListAccessor",761),sDn(449,761,{},mKn),uZn.Ng=function(){return null},uZn.d=!0,uZn.e=!0,uZn.f=0,zW($nt,"AlgorithmAssembler",449),sDn(1200,1,y1n,ou),uZn.Mb=function(n){return!!uG(n,106)},zW($nt,"AlgorithmAssembler/lambda$0$Type",1200),sDn(1201,1,{},Hp),uZn.Kb=function(n){return $T(this.a,uG(n,106))},zW($nt,"AlgorithmAssembler/lambda$1$Type",1201),sDn(1202,1,y1n,uu),uZn.Mb=function(n){return!!uG(n,80)},zW($nt,"AlgorithmAssembler/lambda$2$Type",1202),sDn(1203,1,QZn,Up),uZn.Cd=function(n){gsn(this.a,uG(n,80))},zW($nt,"AlgorithmAssembler/lambda$3$Type",1203),sDn(1204,1,QZn,yO),uZn.Cd=function(n){RR(this.a,this.b,uG(n,196))},zW($nt,"AlgorithmAssembler/lambda$4$Type",1204),sDn(1343,1,b2n,su),uZn.Ne=function(n,t){return mZ(uG(n,196),uG(t,196))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW($nt,"EnumBasedFactoryComparator",1343),sDn(80,761,{80:1},wJ),uZn.Ng=function(){return new ek},uZn.a=0,zW($nt,"LayoutProcessorConfiguration",80),sDn(1025,1,{536:1},Nl),uZn.Kg=function(n){Yun(eNt,new Gp(n))},zW(N2n,"DeprecatedLayoutOptionReplacer",1025),sDn(1026,1,QZn,hu),uZn.Cd=function(n){Etn(uG(n,167))},zW(N2n,"DeprecatedLayoutOptionReplacer/lambda$0$Type",1026),sDn(1027,1,QZn,fu),uZn.Cd=function(n){hmn(uG(n,167))},zW(N2n,"DeprecatedLayoutOptionReplacer/lambda$1$Type",1027),sDn(1028,1,{},Gp),uZn.Yd=function(n,t){xR(this.a,uG(n,149),uG(t,41))},zW(N2n,"DeprecatedLayoutOptionReplacer/lambda$2$Type",1028),sDn(143,1,{701:1,143:1},hCn),uZn.Fb=function(n){return k9(this,n)},uZn.Og=function(){return this.b},uZn.Pg=function(){return this.c},uZn.xe=function(){return this.e},uZn.Hb=function(){return pln(this.c)},uZn.Ib=function(){return"Layout Algorithm: "+this.c};var cNt,aNt=zW(N2n,"LayoutAlgorithmData",143);sDn(269,1,{},bu),zW(N2n,"LayoutAlgorithmData/Builder",269),sDn(1029,1,{536:1},wu),uZn.Kg=function(n){F$(n,207)&&!oM(gK(n.of((XYn(),z$t))))&&JGn(uG(n,27))},zW(N2n,"LayoutAlgorithmResolver",1029),sDn(233,1,{701:1,233:1},I2),uZn.Fb=function(n){return!!F$(n,233)&&m_(this.b,uG(n,233).b)},uZn.Og=function(){return this.a},uZn.Pg=function(){return this.b},uZn.xe=function(){return this.d},uZn.Hb=function(){return pln(this.b)},uZn.Ib=function(){return"Layout Type: "+this.b},zW(N2n,"LayoutCategoryData",233),sDn(357,1,{},du),zW(N2n,"LayoutCategoryData/Builder",357),sDn(879,1,{},ABn),zW(N2n,"LayoutMetaDataService",879),sDn(880,1,{},lQ),zW(N2n,"LayoutMetaDataService/Registry",880),sDn(486,1,{486:1},gu),zW(N2n,"LayoutMetaDataService/Registry/Triple",486),sDn(881,1,Dnt,lu),uZn.Qg=function(){return new sj},zW(N2n,"LayoutMetaDataService/lambda$0$Type",881),sDn(882,1,xnt,pu),uZn.Rg=function(n){return D$(uG(n,8))},zW(N2n,"LayoutMetaDataService/lambda$1$Type",882),sDn(891,1,Dnt,mu),uZn.Qg=function(){return new Zm},zW(N2n,"LayoutMetaDataService/lambda$10$Type",891),sDn(892,1,xnt,vu),uZn.Rg=function(n){return new Z_(uG(n,13))},zW(N2n,"LayoutMetaDataService/lambda$11$Type",892),sDn(893,1,Dnt,ku),uZn.Qg=function(){return new lS},zW(N2n,"LayoutMetaDataService/lambda$12$Type",893),sDn(894,1,xnt,yu),uZn.Rg=function(n){return oG(uG(n,67))},zW(N2n,"LayoutMetaDataService/lambda$13$Type",894),sDn(895,1,Dnt,Mu),uZn.Qg=function(){return new ek},zW(N2n,"LayoutMetaDataService/lambda$14$Type",895),sDn(896,1,xnt,Tu),uZn.Rg=function(n){return PZ(uG(n,49))},zW(N2n,"LayoutMetaDataService/lambda$15$Type",896),sDn(897,1,Dnt,ju),uZn.Qg=function(){return new XL},zW(N2n,"LayoutMetaDataService/lambda$16$Type",897),sDn(898,1,xnt,Eu),uZn.Rg=function(n){return g8(uG(n,49))},zW(N2n,"LayoutMetaDataService/lambda$17$Type",898),sDn(899,1,Dnt,Su),uZn.Qg=function(){return new rk},zW(N2n,"LayoutMetaDataService/lambda$18$Type",899),sDn(900,1,xnt,Pu),uZn.Rg=function(n){return aG(uG(n,157))},zW(N2n,"LayoutMetaDataService/lambda$19$Type",900),sDn(883,1,Dnt,Cu),uZn.Qg=function(){return new Uk},zW(N2n,"LayoutMetaDataService/lambda$2$Type",883),sDn(884,1,xnt,Iu),uZn.Rg=function(n){return new tj(uG(n,75))},zW(N2n,"LayoutMetaDataService/lambda$3$Type",884),sDn(885,1,Dnt,Ou),uZn.Qg=function(){return new Nk},zW(N2n,"LayoutMetaDataService/lambda$4$Type",885),sDn(886,1,xnt,Au),uZn.Rg=function(n){return new zU(uG(n,140))},zW(N2n,"LayoutMetaDataService/lambda$5$Type",886),sDn(887,1,Dnt,Lu),uZn.Qg=function(){return new Dk},zW(N2n,"LayoutMetaDataService/lambda$6$Type",887),sDn(888,1,xnt,Nu),uZn.Rg=function(n){return new VU(uG(n,107))},zW(N2n,"LayoutMetaDataService/lambda$7$Type",888),sDn(889,1,Dnt,$u),uZn.Qg=function(){return new Qu},zW(N2n,"LayoutMetaDataService/lambda$8$Type",889),sDn(890,1,xnt,Du),uZn.Rg=function(n){return new qen(uG(n,385))},zW(N2n,"LayoutMetaDataService/lambda$9$Type",890);var oNt,uNt,sNt,hNt,fNt,lNt=Iq(p3n,"IProperty");sDn(23,1,{34:1,701:1,23:1,149:1},tAn),uZn.Fd=function(n){return lD(this,uG(n,149))},uZn.Fb=function(n){return F$(n,23)?m_(this.f,uG(n,23).f):F$(n,149)&&m_(this.f,uG(n,149).Pg())},uZn.Sg=function(){var n;if(F$(this.b,4)){if(null==(n=Nvn(this.b)))throw hv(new kM(Bnt+this.f+"'. Make sure it's type is registered with the "+(vK($Ft),$Ft.k)+Knt));return n}return this.b},uZn.Og=function(){return this.d},uZn.Pg=function(){return this.f},uZn.xe=function(){return this.i},uZn.Hb=function(){return pln(this.f)},uZn.Ib=function(){return"Layout Option: "+this.f},zW(N2n,"LayoutOptionData",23),sDn(24,1,{},xu),zW(N2n,"LayoutOptionData/Builder",24),sDn(170,22,{3:1,34:1,22:1,170:1},jO);var bNt,wNt,dNt,gNt,pNt,mNt,vNt,kNt,yNt,MNt=_cn(N2n,"LayoutOptionData/Target",170,Oat,g9,cU);sDn(285,22,{3:1,34:1,22:1,285:1},EO);var TNt,jNt,ENt,SNt=_cn(N2n,"LayoutOptionData/Type",285,Oat,wrn,aU);sDn(116,1,{116:1},cN,gY,qZ),uZn.Fb=function(n){var t;return!(null==n||!F$(n,116))&&(t=uG(n,116),OJ(this.c,t.c)&&OJ(this.d,t.d)&&OJ(this.b,t.b)&&OJ(this.a,t.a))},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.c,this.d,this.b,this.a]))},uZn.Ib=function(){return"Rect[x="+this.c+",y="+this.d+",w="+this.b+",h="+this.a+"]"},uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,zW(o6n,"ElkRectangle",116),sDn(8,1,{3:1,4:1,8:1,423:1},sj,O2,MO,eN),uZn.Fb=function(n){return uon(this,n)},uZn.Hb=function(){return OL(this.a)+QTn(OL(this.b))},uZn.cg=function(n){var t,e,i;for(e=0;e<n.length&&Qbn((s3(e,n.length),n.charCodeAt(e)),r6n);)++e;for(t=n.length;t>0&&Qbn((s3(t-1,n.length),n.charCodeAt(t-1)),c6n);)--t;if(e>=t)throw hv(new vM("The given string does not contain any numbers."));if(2!=(i=WGn((Knn(e,t,n.length),n.substr(e,t-e)),",|;|\r|\n")).length)throw hv(new vM("Exactly two numbers are expected, "+i.length+" were found."));try{this.a=YIn(KAn(i[0])),this.b=YIn(KAn(i[1]))}catch(r){throw F$(r=Ehn(r),130)?hv(new vM(a6n+r)):hv(r)}},uZn.Ib=function(){return"("+this.a+","+this.b+")"},uZn.a=0,uZn.b=0;var PNt=zW(o6n,"KVector",8);sDn(75,67,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1,75:1,423:1},Uk,tj,UR),uZn.Pc=function(){return ibn(this)},uZn.cg=function(n){var t,e,i,r,c;e=WGn(n,",|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n"),BY(this);try{for(t=0,r=0,i=0,c=0;t<e.length;)null!=e[t]&&KAn(e[t]).length>0&&(r%2==0?i=YIn(e[t]):c=YIn(e[t]),r>0&&r%2!=0&&aq(this,new MO(i,c)),++r),++t}catch(a){throw F$(a=Ehn(a),130)?hv(new vM("The given string does not match the expected format for vectors."+a)):hv(a)}},uZn.Ib=function(){var n,t,e;for(n=new lx("("),t=Fkn(this,0);t.b!=t.d.c;)JA(n,(e=uG(I6(t),8)).a+","+e.b),t.b!=t.d.c&&(n.a+="; ");return(n.a+=")",n).a};var CNt,INt,ONt,ANt,LNt,NNt,$Nt=zW(o6n,"KVectorChain",75);sDn(255,22,{3:1,34:1,22:1,255:1},TO);var DNt,xNt,RNt,KNt,FNt,_Nt,BNt,HNt,UNt,GNt,qNt,XNt,zNt,VNt,WNt,QNt,JNt,YNt,ZNt,n$t=_cn(Unt,"Alignment",255,Oat,Ynn,oU);sDn(991,1,K2n,$l),uZn.hf=function(n){ZUn(n)},zW(Unt,"BoxLayouterOptions",991),sDn(992,1,{},Ru),uZn.sf=function(){return new _u},uZn.tf=function(n){},zW(Unt,"BoxLayouterOptions/BoxFactory",992),sDn(297,22,{3:1,34:1,22:1,297:1},SO);var t$t,e$t,i$t,r$t,c$t,a$t,o$t,u$t,s$t,h$t,f$t,l$t,b$t,w$t,d$t,g$t,p$t,m$t,v$t,k$t,y$t,M$t,T$t,j$t,E$t,S$t,P$t,C$t,I$t,O$t,A$t,L$t,N$t,$$t,D$t,x$t,R$t,K$t,F$t,_$t,B$t,H$t,U$t,G$t,q$t,X$t,z$t,V$t,W$t,Q$t,J$t,Y$t,Z$t,nDt,tDt,eDt,iDt,rDt,cDt,aDt,oDt,uDt,sDt,hDt,fDt,lDt,bDt,wDt,dDt,gDt,pDt,mDt,vDt,kDt,yDt,MDt,TDt,jDt,EDt,SDt,PDt,CDt,IDt,ODt,ADt,LDt,NDt,$Dt,DDt,xDt,RDt,KDt,FDt,_Dt,BDt,HDt,UDt,GDt,qDt,XDt,zDt,VDt,WDt,QDt,JDt,YDt,ZDt,nxt,txt=_cn(Unt,"ContentAlignment",297,Oat,Znn,uU);sDn(699,1,K2n,Dl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Vnt),""),"Layout Algorithm"),"Select a specific layout algorithm."),(lAn(),kNt)),$ot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Wnt),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),vNt),aNt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X8n),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),r$t),gNt),n$t),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,R3n),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Qnt),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),vNt),$Nt),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,r9n),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),b$t),pNt),txt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q8n),""),"Debug Mode"),"Whether additional debug information shall be generated."),(qx(),!1)),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W8n),""),l3n),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),g$t),gNt),axt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,m8n),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),y$t),gNt),kxt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Xnt),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,b8n),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),S$t),gNt),Kxt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,K3n),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),Q$t),vNt),Sbt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,f4n),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,g9n),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,w4n),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,l4n),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),hDt),gNt),mRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,b9n),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),vNt),PNt),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[fNt,uNt]))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,a4n),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),mNt),dot),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[oNt]))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,s4n),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,h4n),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,c9n),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),N$t),vNt),$Nt),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u9n),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,s9n),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Jnt),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),vNt),cUt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,w9n),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),D$t),vNt),hbt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,U8n),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),wNt),cot),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[oNt,fNt,uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Ynt),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),dNt),fot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Znt),""),"Child Area Width"),"The width of the area occupied by the laid out children of a node."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,ntt),""),"Child Area Height"),"The height of the area occupied by the laid out children of a node."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,k4n),""),Lnt),"Turns topdown layout on and off. If this option is enabled, hierarchical layout will be computed first for the root node and then for its children recursively. Layouts are then scaled down to fit the area provided by their parents. Graphs must follow a certain structure for topdown layout to work properly. {@link TopdownNodeTypes.PARALLEL_NODE} nodes must have children of type {@link TopdownNodeTypes.HIERARCHICAL_NODE} and must define {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} for their children. Furthermore they need to be laid out using an algorithm that is a {@link TopdownLayoutProvider}. Hierarchical nodes can also be parents of other hierarchical nodes and can optionally use a {@link TopdownSizeApproximator} to dynamically set sizes during topdown layout. In this case {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} should be set on the node itself rather than the parent. The values are then used by the size approximator as base values. Hierarchical nodes require the layout option {@link nodeSize.fixedGraphSize} to be true to prevent the algorithm used there from resizing the hierarchical node. This option is not supported if 'Hierarchy Handling' is set to 'INCLUDE_CHILDREN'"),!1),wNt),cot),ggn(hNt)))),H4(n,k4n,j4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ttt),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ett),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),xwn(100)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,itt),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,rtt),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),xwn(4e3)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ctt),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),xwn(400)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,att),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ott),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,utt),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,stt),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,znt),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),u$t),gNt),SKt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A8n),v8n),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L8n),v8n),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D3n),v8n),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N8n),v8n),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u4n),v8n),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,$8n),v8n),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D8n),v8n),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,K8n),v8n),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x8n),v8n),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,R8n),v8n),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,o4n),v8n),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,F8n),v8n),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,_8n),v8n),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,B8n),v8n),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),vNt),AKt),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[oNt,fNt,uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,d9n),v8n),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),KDt),vNt),hbt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,l9n),dtt),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),mNt),dot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),H4(n,l9n,f9n,nDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,f9n),dtt),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),Y$t),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Q8n),gtt),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),R$t),vNt),Sbt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,m4n),gtt),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),F$t),pNt),eRt),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z8n),ptt),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),eDt),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,n9n),ptt),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,t9n),ptt),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,e9n),ptt),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,i9n),ptt),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,p4n),mtt),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),B$t),pNt),sKt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,g4n),mtt),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),X$t),pNt),wKt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x4n),mtt),"Node Size Minimum"),"The minimal size to which a node can be reduced."),G$t),vNt),PNt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,d4n),mtt),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,a9n),I8n),"Edge Label Placement"),"Gives a hint on where to put edge labels."),v$t),gNt),lxt),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,b4n),I8n),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),wNt),cot),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,htt),"font"),"Font Name"),"Font name used for a label."),kNt),$ot),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,ftt),"font"),"Font Size"),"Font size used for a label."),mNt),dot),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,h9n),vtt),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),vNt),PNt),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,o9n),vtt),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),mNt),dot),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,G8n),vtt),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),pDt),gNt),YRt),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,H8n),vtt),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),dNt),fot),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,v4n),ktt),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),wDt),pNt),BRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J8n),ktt),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y8n),ktt),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,y4n),ytt),"Topdown Scale Factor"),"The scaling factor to be applied to the nodes laid out within the node in recursive topdown layout. The difference to 'Scale Factor' is that the node itself is not scaled. This value has to be set on hierarchical nodes."),1),dNt),fot),ggn(hNt)))),H4(n,y4n,j4n,zDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ltt),ytt),"Topdown Size Approximator"),"The size approximator to be used to set sizes of hierarchical nodes during topdown layout. The default value is null, which results in nodes keeping whatever size is defined for them e.g. through parent parallel node or by manually setting the size."),null),gNt),jKt),ggn(sNt)))),H4(n,ltt,j4n,WDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,M4n),ytt),"Topdown Hierarchical Node Width"),"The fixed size of a hierarchical node when using topdown layout. If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself."),150),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),H4(n,M4n,j4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,T4n),ytt),"Topdown Hierarchical Node Aspect Ratio"),"The fixed aspect ratio of a hierarchical node when using topdown layout. Default is 1/sqrt(2). If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself."),1.414),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),H4(n,T4n,j4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,j4n),ytt),"Topdown Node Type"),"The different node types used for topdown layout. If the node type is set to {@link TopdownNodeTypes.PARALLEL_NODE} the algorithm must be set to a {@link TopdownLayoutProvider} such as {@link TopdownPacking}. The {@link nodeSize.fixedGraphSize} option is technically only required for hierarchical nodes."),null),gNt),mKt),ggn(sNt)))),H4(n,j4n,d4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,btt),ytt),"Topdown Scale Cap"),"Determines the upper limit for the topdown scale factor. The default value is 1.0 which ensures that nested children never end up appearing larger than their parents in terms of unit sizes such as the font size. If the limit is larger, nodes will fully utilize the available space, but it is counteriniuitive for inner nodes to have a larger scale than outer nodes."),1),dNt),fot),ggn(hNt)))),H4(n,btt,j4n,qDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,z8n),Mtt),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V8n),Mtt),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),wNt),cot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x3n),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),dNt),fot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,wtt),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),T$t),gNt),Lxt),ggn(oNt)))),sP(n,new I2(BT(UT(HT(new du,S0n),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),sP(n,new I2(BT(UT(HT(new du,"org.eclipse.elk.orthogonal"),"Orthogonal"),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.'))),sP(n,new I2(BT(UT(HT(new du,c4n),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),sP(n,new I2(BT(UT(HT(new du,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),sP(n,new I2(BT(UT(HT(new du,a7n),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),sP(n,new I2(BT(UT(HT(new du,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),sP(n,new I2(BT(UT(HT(new du,x7n),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),kHn((new xl,n)),ZUn((new $l,n)),A_n((new Rl,n))},zW(Unt,"CoreOptions",699),sDn(88,22,{3:1,34:1,22:1,88:1},PO);var ext,ixt,rxt,cxt,axt=_cn(Unt,l3n,88,Oat,H8,sU);sDn(278,22,{3:1,34:1,22:1,278:1},CO);var oxt,uxt,sxt,hxt,fxt,lxt=_cn(Unt,"EdgeLabelPlacement",278,Oat,v3,hU);sDn(223,22,{3:1,34:1,22:1,223:1},IO);var bxt,wxt,dxt,gxt,pxt,mxt,vxt,kxt=_cn(Unt,"EdgeRouting",223,Oat,u5,fU);sDn(321,22,{3:1,34:1,22:1,321:1},OO);var yxt,Mxt,Txt,jxt,Ext,Sxt,Pxt,Cxt,Ixt,Oxt,Axt,Lxt=_cn(Unt,"EdgeType",321,Oat,Jnn,lU);sDn(989,1,K2n,xl),uZn.hf=function(n){kHn(n)},zW(Unt,"FixedLayouterOptions",989),sDn(990,1,{},Ku),uZn.sf=function(){return new Wu},uZn.tf=function(n){},zW(Unt,"FixedLayouterOptions/FixedFactory",990),sDn(346,22,{3:1,34:1,22:1,346:1},AO);var Nxt,$xt,Dxt,xxt,Rxt,Kxt=_cn(Unt,"HierarchyHandling",346,Oat,y3,bU);sDn(290,22,{3:1,34:1,22:1,290:1},LO);var Fxt,_xt,Bxt,Hxt,Uxt,Gxt,qxt,Xxt,zxt,Vxt,Wxt=_cn(Unt,"LabelSide",290,Oat,o5,wU);sDn(95,22,{3:1,34:1,22:1,95:1},NO);var Qxt,Jxt,Yxt,Zxt,nRt,tRt,eRt=_cn(Unt,"NodeLabelPlacement",95,Oat,bcn,dU);sDn(256,22,{3:1,34:1,22:1,256:1},$O);var iRt,rRt,cRt,aRt,oRt,uRt,sRt,hRt=_cn(Unt,"PortAlignment",256,Oat,p9,gU);sDn(101,22,{3:1,34:1,22:1,101:1},DO);var fRt,lRt,bRt,wRt,dRt,gRt,pRt,mRt=_cn(Unt,"PortConstraints",101,Oat,Qnn,pU);sDn(279,22,{3:1,34:1,22:1,279:1},xO);var vRt,kRt,yRt,MRt,TRt,jRt,ERt,SRt,PRt,CRt,IRt,ORt,ARt,LRt,NRt,$Rt,DRt,xRt,RRt,KRt,FRt,_Rt,BRt=_cn(Unt,"PortLabelPlacement",279,Oat,Wnn,mU);sDn(64,22,{3:1,34:1,22:1,64:1},RO);var HRt,URt,GRt,qRt,XRt,zRt,VRt,WRt,QRt,JRt,YRt=_cn(Unt,"PortSide",64,Oat,U8,vU);sDn(993,1,K2n,Rl),uZn.hf=function(n){A_n(n)},zW(Unt,"RandomLayouterOptions",993),sDn(994,1,{},Fu),uZn.sf=function(){return new Xu},uZn.tf=function(n){},zW(Unt,"RandomLayouterOptions/RandomFactory",994),sDn(386,22,{3:1,34:1,22:1,386:1},KO);var ZRt,nKt,tKt,eKt,iKt,rKt,cKt,aKt,oKt,uKt,sKt=_cn(Unt,"SizeConstraint",386,Oat,a5,kU);sDn(264,22,{3:1,34:1,22:1,264:1},FO);var hKt,fKt,lKt,bKt,wKt=_cn(Unt,"SizeOptions",264,Oat,Man,yU);sDn(280,22,{3:1,34:1,22:1,280:1},_O);var dKt,gKt,pKt,mKt=_cn(Unt,"TopdownNodeTypes",280,Oat,k3,MU);sDn(347,22,Ett);var vKt,kKt,yKt,MKt,TKt,jKt=_cn(Unt,"TopdownSizeApproximator",347,Oat,I1,jU);sDn(987,347,Ett,Pq),uZn.Tg=function(n){return sMn(n)},_cn(Unt,"TopdownSizeApproximator/1",987,jKt,null,null),sDn(988,347,Ett,gV),uZn.Tg=function(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(t=uG(zDn(n,(XYn(),yDt)),143),gj(),aKn(p=new Bk,n),m=new Ym,a=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));a.e!=a.i.gc();)r=uG(Zkn(a),27),GRn(b=new Bk,p),aKn(b,r),k=sMn(r),vN(b,e.Math.max(r.g,k.a),e.Math.max(r.f,k.b)),VAn(m.f,r,b);for(c=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));c.e!=c.i.gc();)for(s=new DD((!(r=uG(Zkn(c),27)).e&&(r.e=new f_(aFt,r,7,4)),r.e));s.e!=s.i.gc();)u=uG(Zkn(s),74),d=uG(DA(FX(m.f,r)),27),g=uG(cQ(m,zrn((!u.c&&(u.c=new f_(cFt,u,5,8)),u.c),0)),27),ttn((!(w=new es).b&&(w.b=new f_(cFt,w,4,7)),w.b),d),ttn((!w.c&&(w.c=new f_(cFt,w,5,8)),w.c),g),ARn(w,R0(d)),aKn(w,u);h=uG(A1(t.f),205);try{h.rf(p,new Zu),WQ(t.f,h)}catch(y){throw F$(y=Ehn(y),103),hv(y)}return vnn(p,h$t)||vnn(p,s$t)||VJn(p),o=uM(pK(zDn(p,h$t)))/uM(pK(zDn(p,s$t))),i=uM(pK(zDn(p,BDt)))*e.Math.sqrt((!p.a&&(p.a=new fV(bFt,p,10,11)),p.a).i),l=(v=uG(zDn(p,W$t),107)).b+v.c+1,f=v.d+v.a+1,new MO(e.Math.max(l,i),e.Math.max(f,i/o))},_cn(Unt,"TopdownSizeApproximator/2",988,jKt,null,null),sDn(344,1,{871:1},fy),uZn.Ug=function(n,t){return dCn(this,n,t)},uZn.Vg=function(){POn(this)},uZn.Wg=function(){return this.q},uZn.Xg=function(){return this.f?SZ(this.f):null},uZn.Yg=function(){return SZ(this.a)},uZn.Zg=function(){return this.p},uZn.$g=function(){return!1},uZn._g=function(){return this.n},uZn.ah=function(){return null!=this.p&&!this.b},uZn.bh=function(n){var t;this.n&&(t=n,kD(this.f,t))},uZn.dh=function(n,t){var e,i;this.n&&n&&n4(this,(i=uUn(e=new DW,n),_Wn(e),i),(Eln(),CKt))},uZn.eh=function(n){var t;return this.b?null:(t=irn(this,this.g),aq(this.a,t),t.i=this,this.d=n,t)},uZn.fh=function(n){n>0&&!this.b&&Ban(this,n)},uZn.b=!1,uZn.c=0,uZn.d=-1,uZn.e=null,uZn.f=null,uZn.g=-1,uZn.j=!1,uZn.k=!1,uZn.n=!1,uZn.o=0,uZn.q=0,uZn.r=0,zW(p9n,"BasicProgressMonitor",344),sDn(717,205,M3n,_u),uZn.rf=function(n,t){XGn(n,t)},zW(p9n,"BoxLayoutProvider",717),sDn(983,1,b2n,qp),uZn.Ne=function(n,t){return tKn(this,uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},uZn.a=!1,zW(p9n,"BoxLayoutProvider/1",983),sDn(163,1,{163:1},Jrn,nK),uZn.Ib=function(){return this.c?zBn(this.c):vIn(this.b)},zW(p9n,"BoxLayoutProvider/Group",163),sDn(320,22,{3:1,34:1,22:1,320:1},HO);var EKt,SKt=_cn(p9n,"BoxLayoutProvider/PackingMode",320,Oat,s5,EU);sDn(984,1,b2n,Bu),uZn.Ne=function(n,t){return rZ(uG(n,163),uG(t,163))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p9n,"BoxLayoutProvider/lambda$0$Type",984),sDn(985,1,b2n,Hu),uZn.Ne=function(n,t){return GY(uG(n,163),uG(t,163))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p9n,"BoxLayoutProvider/lambda$1$Type",985),sDn(986,1,b2n,Uu),uZn.Ne=function(n,t){return qY(uG(n,163),uG(t,163))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p9n,"BoxLayoutProvider/lambda$2$Type",986),sDn(1384,1,{845:1},Gu),uZn.Mg=function(n,t){return ZS(),!F$(t,167)||Zj((Whn(),uG(n,167)),t)},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1384),sDn(1385,1,QZn,Xp),uZn.Cd=function(n){hbn(this.a,uG(n,149))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1385),sDn(1386,1,QZn,zu),uZn.Cd=function(n){uG(n,96),ZS()},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1386),sDn(1390,1,QZn,zp),uZn.Cd=function(n){_on(this.a,uG(n,96))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1390),sDn(1388,1,y1n,UO),uZn.Mb=function(n){return oln(this.a,this.b,uG(n,149))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1388),sDn(1387,1,y1n,GO),uZn.Mb=function(n){return PR(this.a,this.b,uG(n,845))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1387),sDn(1389,1,QZn,qO),uZn.Cd=function(n){iV(this.a,this.b,uG(n,149))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1389),sDn(947,1,{},Vu),uZn.Kb=function(n){return oN(n)},uZn.Fb=function(n){return this===n},zW(p9n,"ElkUtil/lambda$0$Type",947),sDn(948,1,QZn,XO),uZn.Cd=function(n){JNn(this.a,this.b,uG(n,74))},uZn.a=0,uZn.b=0,zW(p9n,"ElkUtil/lambda$1$Type",948),sDn(949,1,QZn,zO),uZn.Cd=function(n){tM(this.a,this.b,uG(n,166))},uZn.a=0,uZn.b=0,zW(p9n,"ElkUtil/lambda$2$Type",949),sDn(950,1,QZn,VO),uZn.Cd=function(n){UN(this.a,this.b,uG(n,135))},uZn.a=0,uZn.b=0,zW(p9n,"ElkUtil/lambda$3$Type",950),sDn(951,1,QZn,Vp),uZn.Cd=function(n){Lq(this.a,uG(n,377))},zW(p9n,"ElkUtil/lambda$4$Type",951),sDn(325,1,{34:1,325:1},Jm),uZn.Fd=function(n){return wD(this,uG(n,242))},uZn.Fb=function(n){var t;return!!F$(n,325)&&(t=uG(n,325),this.a==t.a)},uZn.Hb=function(){return t0(this.a)},uZn.Ib=function(){return this.a+" (exclusive)"},uZn.a=0,zW(p9n,"ExclusiveBounds/ExclusiveLowerBound",325),sDn(1119,205,M3n,Wu),uZn.rf=function(n,t){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j;for(t.Ug("Fixed Layout",1),a=uG(zDn(n,(XYn(),k$t)),223),b=0,w=0,m=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));m.e!=m.i.gc();){for(g=uG(Zkn(m),27),(j=uG(zDn(g,(Iln(),Cxt)),8))&&(kN(g,j.a,j.b),uG(zDn(g,Txt),181).Hc((Qmn(),VRt))&&(d=uG(zDn(g,Ext),8)).a>0&&d.b>0&&ZQn(g,d.a,d.b,!0,!0)),b=e.Math.max(b,g.i+g.g),w=e.Math.max(w,g.j+g.f),f=new DD((!g.n&&(g.n=new fV(lFt,g,1,7)),g.n));f.e!=f.i.gc();)u=uG(Zkn(f),135),(j=uG(zDn(u,Cxt),8))&&kN(u,j.a,j.b),b=e.Math.max(b,g.i+u.i+u.g),w=e.Math.max(w,g.j+u.j+u.f);for(y=new DD((!g.c&&(g.c=new fV(wFt,g,9,9)),g.c));y.e!=y.i.gc();)for(k=uG(Zkn(y),123),(j=uG(zDn(k,Cxt),8))&&kN(k,j.a,j.b),M=g.i+k.i,T=g.j+k.j,b=e.Math.max(b,M+k.g),w=e.Math.max(w,T+k.f),s=new DD((!k.n&&(k.n=new fV(lFt,k,1,7)),k.n));s.e!=s.i.gc();)u=uG(Zkn(s),135),(j=uG(zDn(u,Cxt),8))&&kN(u,j.a,j.b),b=e.Math.max(b,M+u.i+u.g),w=e.Math.max(w,T+u.j+u.f);for(c=new Fz(ix(eRn(g).a.Kc(),new h));hDn(c);)l=iJn(i=uG(N9(c),74)),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b);for(r=new Fz(ix(tRn(g).a.Kc(),new h));hDn(r);)R0(bIn(i=uG(N9(r),74)))!=n&&(l=iJn(i),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b))}if(a==(_gn(),uxt))for(p=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));p.e!=p.i.gc();)for(r=new Fz(ix(eRn(g=uG(Zkn(p),27)).a.Kc(),new h));hDn(r);)0==(o=bGn(i=uG(N9(r),74))).b?Myn(i,L$t,null):Myn(i,L$t,o);oM(gK(zDn(n,(Iln(),jxt))))||ZQn(n,b+(v=uG(zDn(n,Sxt),107)).b+v.c,w+v.d+v.a,!0,!0),t.Vg()},zW(p9n,"FixedLayoutProvider",1119),sDn(385,137,{3:1,423:1,385:1,96:1,137:1},Qu,qen),uZn.cg=function(n){var t,e,i,r,c,a,o;if(n)try{for(a=WGn(n,";,;"),r=0,c=(i=a).length;r<c;++r){if(t=WGn(i[r],"\\:"),!(e=DVn(aan(),t[0])))throw hv(new vM("Invalid option id: "+t[0]));if(null==(o=vVn(e,t[1])))throw hv(new vM("Invalid option value: "+t[1]));null==o?(!this.q&&(this.q=new Ym),u7(this.q,e)):(!this.q&&(this.q=new Ym),vJ(this.q,e,o))}}catch(u){throw F$(u=Ehn(u),103)?hv(new tbn(u)):hv(u)}},uZn.Ib=function(){return mK(l8(YJ((this.q?this.q:(hZ(),hZ(),Vot)).vc().Oc(),new Ju),gen(new fG,new Y,new q,new X,Uhn(cT(Rut,1),p1n,108,0,[]))))};var PKt,CKt,IKt,OKt,AKt=zW(p9n,"IndividualSpacings",385);sDn(982,1,{},Ju),uZn.Kb=function(n){return cZ(uG(n,44))},zW(p9n,"IndividualSpacings/lambda$0$Type",982),sDn(718,1,{},LX),uZn.c=0,zW(p9n,"InstancePool",718),sDn(1835,1,{},Yu),zW(p9n,"LoggedGraph",1835),sDn(415,22,{3:1,34:1,22:1,415:1},uA);var LKt,NKt,$Kt,DKt=_cn(p9n,"LoggedGraph/Type",415,Oat,h5,SU);sDn(1063,1,{871:1},Zu),uZn.Ug=function(n,t){return!1},uZn.Vg=function(){},uZn.Wg=function(){return 0},uZn.Xg=function(){return null},uZn.Yg=function(){return null},uZn.Zg=function(){return null},uZn.$g=function(){return!1},uZn._g=function(){return!1},uZn.ah=function(){return!1},uZn.bh=function(n){},uZn.dh=function(n,t){},uZn.eh=function(n){return this},uZn.fh=function(n){},zW(p9n,"NullElkProgressMonitor",1063),sDn(42,1,{20:1,42:1},WO),uZn.Jc=function(n){z8(this,n)},uZn.Fb=function(n){var t,e,i;return!!F$(n,42)&&(e=uG(n,42),t=null==this.a?null==e.a:udn(this.a,e.a),i=null==this.b?null==e.b:udn(this.b,e.b),t&&i)},uZn.Hb=function(){var n,t,e;return n=-65536&(t=null==this.a?0:Hon(this.a)),t&D1n^(-65536&(e=null==this.b?0:Hon(this.b)))>>16&D1n|n^(e&D1n)<<16},uZn.Kc=function(){return new Wp(this)},uZn.Ib=function(){return null==this.a&&null==this.b?"pair(null,null)":null==this.a?"pair(null,"+cpn(this.b)+")":null==this.b?"pair("+cpn(this.a)+",null)":"pair("+cpn(this.a)+","+cpn(this.b)+")"},zW(p9n,"Pair",42),sDn(995,1,$Zn,Wp),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return!this.c&&(!this.b&&null!=this.a.a||null!=this.a.b)},uZn.Pb=function(){if(!this.c&&!this.b&&null!=this.a.a)return this.b=!0,this.a.a;if(!this.c&&null!=this.a.b)return this.c=!0,this.a.b;throw hv(new Bv)},uZn.Qb=function(){throw this.c&&null!=this.a.b?this.a.b=null:this.b&&null!=this.a.a&&(this.a.a=null),hv(new xv)},uZn.b=!1,uZn.c=!1,zW(p9n,"Pair/1",995),sDn(454,1,{454:1},vY),uZn.Fb=function(n){return OJ(this.a,uG(n,454).a)&&OJ(this.c,uG(n,454).c)&&OJ(this.d,uG(n,454).d)&&OJ(this.b,uG(n,454).b)},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.a,this.c,this.d,this.b]))},uZn.Ib=function(){return"("+this.a+TZn+this.c+TZn+this.d+TZn+this.b+")"},zW(p9n,"Quadruple",454),sDn(1108,205,M3n,Xu),uZn.rf=function(n,t){var e;t.Ug("Random Layout",1),0!=(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i?(vQn(n,(e=uG(zDn(n,(Wmn(),XRt)),17))&&0!=e.a?new v8(e.a):new Upn,sM(pK(zDn(n,URt))),sM(pK(zDn(n,zRt))),uG(zDn(n,GRt),107)),t.Vg()):t.Vg()},zW(p9n,"RandomLayoutProvider",1108),sDn(240,1,{240:1},LU),uZn.Fb=function(n){return OJ(this.a,uG(n,240).a)&&OJ(this.b,uG(n,240).b)&&OJ(this.c,uG(n,240).c)},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.a,this.b,this.c]))},uZn.Ib=function(){return"("+this.a+TZn+this.b+TZn+this.c+")"},zW(p9n,"Triple",240),sDn(562,1,{}),uZn.Lf=function(){return new MO(this.f.i,this.f.j)},uZn.of=function(n){return QZ(n,(XYn(),uDt))?zDn(this.f,$Kt):zDn(this.f,n)},uZn.Mf=function(){return new MO(this.f.g,this.f.f)},uZn.Nf=function(){return this.g},uZn.pf=function(n){return vnn(this.f,n)},uZn.Of=function(n){ycn(this.f,n.a),Mcn(this.f,n.b)},uZn.Pf=function(n){kcn(this.f,n.a),vcn(this.f,n.b)},uZn.Qf=function(n){this.g=n},uZn.g=0,zW(Ctt,"ElkGraphAdapters/AbstractElkGraphElementAdapter",562),sDn(563,1,{853:1},Qp),uZn.Rf=function(){var n,t;if(!this.b)for(this.b=o6(xJ(this.a).i),t=new DD(xJ(this.a));t.e!=t.i.gc();)n=uG(Zkn(t),135),kD(this.b,new Wy(n));return this.b},uZn.b=null,zW(Ctt,"ElkGraphAdapters/ElkEdgeAdapter",563),sDn(308,562,{},Vy),uZn.Sf=function(){return FTn(this)},uZn.a=null,zW(Ctt,"ElkGraphAdapters/ElkGraphAdapter",308),sDn(640,562,{187:1},Wy),zW(Ctt,"ElkGraphAdapters/ElkLabelAdapter",640),sDn(639,562,{695:1},Wx),uZn.Rf=function(){return RTn(this)},uZn.Vf=function(){var n;return!(n=uG(zDn(this.f,(XYn(),$$t)),140))&&(n=new Nk),n},uZn.Xf=function(){return KTn(this)},uZn.Zf=function(n){var t;t=new zU(n),Myn(this.f,(XYn(),$$t),t)},uZn.$f=function(n){Myn(this.f,(XYn(),W$t),new VU(n))},uZn.Tf=function(){return this.d},uZn.Uf=function(){var n,t;if(!this.a)for(this.a=new Zm,t=new Fz(ix(tRn(uG(this.f,27)).a.Kc(),new h));hDn(t);)n=uG(N9(t),74),kD(this.a,new Qp(n));return this.a},uZn.Wf=function(){var n,t;if(!this.c)for(this.c=new Zm,t=new Fz(ix(eRn(uG(this.f,27)).a.Kc(),new h));hDn(t);)n=uG(N9(t),74),kD(this.c,new Qp(n));return this.c},uZn.Yf=function(){return 0!=wZ(uG(this.f,27)).i||oM(gK(uG(this.f,27).of((XYn(),C$t))))},uZn._f=function(){Xen(this,(vP(),NKt))},uZn.a=null,uZn.b=null,uZn.c=null,uZn.d=null,uZn.e=null,zW(Ctt,"ElkGraphAdapters/ElkNodeAdapter",639),sDn(1284,562,{852:1},Jp),uZn.Rf=function(){return rjn(this)},uZn.Uf=function(){var n,t;if(!this.a)for(this.a=iR(uG(this.f,123).hh().i),t=new DD(uG(this.f,123).hh());t.e!=t.i.gc();)n=uG(Zkn(t),74),kD(this.a,new Qp(n));return this.a},uZn.Wf=function(){var n,t;if(!this.c)for(this.c=iR(uG(this.f,123).ih().i),t=new DD(uG(this.f,123).ih());t.e!=t.i.gc();)n=uG(Zkn(t),74),kD(this.c,new Qp(n));return this.c},uZn.ag=function(){return uG(uG(this.f,123).of((XYn(),gDt)),64)},uZn.bg=function(){var n,t,e,i,r,c,a;for(i=h0(uG(this.f,123)),e=new DD(uG(this.f,123).ih());e.e!=e.i.gc();)for(a=new DD((!(n=uG(Zkn(e),74)).c&&(n.c=new f_(cFt,n,5,8)),n.c));a.e!=a.i.gc();){if(Ern(lCn(c=uG(Zkn(a),84)),i))return!0;if(lCn(c)==i&&oM(gK(zDn(n,(XYn(),I$t)))))return!0}for(t=new DD(uG(this.f,123).hh());t.e!=t.i.gc();)for(r=new DD((!(n=uG(Zkn(t),74)).b&&(n.b=new f_(cFt,n,4,7)),n.b));r.e!=r.i.gc();)if(Ern(lCn(uG(Zkn(r),84)),i))return!0;return!1},uZn.a=null,uZn.b=null,uZn.c=null,zW(Ctt,"ElkGraphAdapters/ElkPortAdapter",1284),sDn(1285,1,b2n,qu),uZn.Ne=function(n,t){return XBn(uG(n,123),uG(t,123))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(Ctt,"ElkGraphAdapters/PortComparator",1285);var xKt,RKt,KKt,FKt,_Kt,BKt,HKt,UKt,GKt,qKt,XKt,zKt,VKt,WKt,QKt,JKt,YKt,ZKt,nFt=Iq(Itt,"EObject"),tFt=Iq(Ott,Att),eFt=Iq(Ott,Ltt),iFt=Iq(Ott,Ntt),rFt=Iq(Ott,"ElkShape"),cFt=Iq(Ott,$tt),aFt=Iq(Ott,Dtt),oFt=Iq(Ott,xtt),uFt=Iq(Itt,Rtt),sFt=Iq(Itt,"EFactory"),hFt=Iq(Itt,Ktt),fFt=Iq(Itt,"EPackage"),lFt=Iq(Ott,Ftt),bFt=Iq(Ott,_tt),wFt=Iq(Ott,Btt);sDn(93,1,Htt),uZn.th=function(){return this.uh(),null},uZn.uh=function(){return null},uZn.vh=function(){return this.uh(),!1},uZn.wh=function(){return!1},uZn.xh=function(n){Msn(this,n)},zW(Utt,"BasicNotifierImpl",93),sDn(99,93,Jtt),uZn.Yh=function(){return uN(this)},uZn.yh=function(n,t){return n},uZn.zh=function(){throw hv(new Kv)},uZn.Ah=function(n){var t;return t=lMn(uG(ern(this.Dh(),this.Fh()),19)),this.Ph().Th(this,t.n,t.f,n)},uZn.Bh=function(n,t){throw hv(new Kv)},uZn.Ch=function(n,t,e){return DUn(this,n,t,e)},uZn.Dh=function(){var n;return this.zh()&&(n=this.zh().Nk())?n:this.ii()},uZn.Eh=function(){return J$n(this)},uZn.Fh=function(){throw hv(new Kv)},uZn.Gh=function(){var n,t;return!(t=this.$h().Ok())&&this.zh().Tk((jP(),t=null==(n=$1(eqn(this.Dh())))?tBt:new zx(this,n))),t},uZn.Hh=function(n,t){return n},uZn.Ih=function(n){return n.pk()?n.Lj():emn(this.Dh(),n)},uZn.Jh=function(){var n;return(n=this.zh())?n.Qk():null},uZn.Kh=function(){return this.zh()?this.zh().Nk():null},uZn.Lh=function(n,t,e){return Dyn(this,n,t,e)},uZn.Mh=function(n){return vtn(this,n)},uZn.Nh=function(n,t){return U9(this,n,t)},uZn.Oh=function(){var n;return!!(n=this.zh())&&n.Rk()},uZn.Ph=function(){throw hv(new Kv)},uZn.Qh=function(){return Kvn(this)},uZn.Rh=function(n,t,e,i){return kyn(this,n,t,i)},uZn.Sh=function(n,t,e){return uG(ern(this.Dh(),t),69).wk().zk(this,this.hi(),t-this.ji(),n,e)},uZn.Th=function(n,t,e,i){return O1(this,n,t,i)},uZn.Uh=function(n,t,e){return uG(ern(this.Dh(),t),69).wk().Ak(this,this.hi(),t-this.ji(),n,e)},uZn.Vh=function(){return!!this.zh()&&!!this.zh().Pk()},uZn.Wh=function(n){return Wkn(this,n)},uZn.Xh=function(n){return M0(this,n)},uZn.Zh=function(n){return jWn(this,n)},uZn.$h=function(){throw hv(new Kv)},uZn._h=function(){return this.zh()?this.zh().Pk():null},uZn.ai=function(){return Kvn(this)},uZn.bi=function(n,t){sLn(this,n,t)},uZn.ci=function(n){this.$h().Sk(n)},uZn.di=function(n){this.$h().Vk(n)},uZn.ei=function(n){this.$h().Uk(n)},uZn.fi=function(n,t){var e,i,r,c;return(c=this.Jh())&&n&&(t=Nyn(c.El(),this,t),c.Il(this)),(i=this.Ph())&&(0!=(PHn(this,this.Ph(),this.Fh()).Bb&P0n)?(r=i.Qh())&&(n?!c&&r.Il(this):r.Hl(this)):(t=(e=this.Fh())>=0?this.Ah(t):this.Ph().Th(this,-1-e,null,t),t=this.Ch(null,-1,t))),this.di(n),t},uZn.gi=function(n){var t,e,i,r,c,a,o;if((c=emn(e=this.Dh(),n))>=(t=this.ji()))return uG(n,69).wk().Dk(this,this.hi(),c-t);if(c<=-1){if(!(a=iVn((gAn(),kBt),e,n)))throw hv(new vM(Gtt+n.xe()+ztt));if(PP(),uG(a,69).xk()||(a=_3(Nen(kBt,a))),r=uG((i=this.Ih(a))>=0?this.Lh(i,!0,!0):YNn(this,a,!0),160),(o=a.Ik())>1||-1==o)return uG(uG(r,220).Sl(n,!1),79)}else if(n.Jk())return uG((i=this.Ih(n))>=0?this.Lh(i,!1,!0):YNn(this,n,!1),79);return new jA(this,n)},uZn.hi=function(){return Wen(this)},uZn.ii=function(){return(tQ(),M_t).S},uZn.ji=function(){return iQ(this.ii())},uZn.ki=function(n){oAn(this,n)},uZn.Ib=function(){return vxn(this)},zW(Ytt,"BasicEObjectImpl",99),sDn(119,99,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1}),uZn.li=function(n){return Ven(this)[n]},uZn.mi=function(n,t){uQ(Ven(this),n,t)},uZn.ni=function(n){uQ(Ven(this),n,null)},uZn.th=function(){return uG(Lsn(this,4),129)},uZn.uh=function(){throw hv(new Kv)},uZn.vh=function(){return 0!=(4&this.Db)},uZn.zh=function(){throw hv(new Kv)},uZn.oi=function(n){Dvn(this,2,n)},uZn.Bh=function(n,t){this.Db=t<<16|255&this.Db,this.oi(n)},uZn.Dh=function(){return e1(this)},uZn.Fh=function(){return this.Db>>16},uZn.Gh=function(){var n;return jP(),null==(n=$1(eqn(uG(Lsn(this,16),29)||this.ii())))?tBt:new zx(this,n)},uZn.wh=function(){return 0==(1&this.Db)},uZn.Jh=function(){return uG(Lsn(this,128),2034)},uZn.Kh=function(){return uG(Lsn(this,16),29)},uZn.Oh=function(){return 0!=(32&this.Db)},uZn.Ph=function(){return uG(Lsn(this,2),54)},uZn.Vh=function(){return 0!=(64&this.Db)},uZn.$h=function(){throw hv(new Kv)},uZn._h=function(){return uG(Lsn(this,64),288)},uZn.ci=function(n){Dvn(this,16,n)},uZn.di=function(n){Dvn(this,128,n)},uZn.ei=function(n){Dvn(this,64,n)},uZn.hi=function(){return $vn(this)},uZn.Db=0,zW(Ytt,"MinimalEObjectImpl",119),sDn(120,119,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.oi=function(n){this.Cb=n},uZn.Ph=function(){return this.Cb},zW(Ytt,"MinimalEObjectImpl/Container",120),sDn(2083,120,{110:1,342:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return ajn(this,n,t,e)},uZn.Uh=function(n,t,e){return BIn(this,n,t,e)},uZn.Wh=function(n){return j4(this,n)},uZn.bi=function(n,t){bln(this,n,t)},uZn.ii=function(){return tYn(),VKt},uZn.ki=function(n){ffn(this,n)},uZn.nf=function(){return Qkn(this)},uZn.gh=function(){return!this.o&&(this.o=new ltn((tYn(),XKt),EFt,this,0)),this.o},uZn.of=function(n){return zDn(this,n)},uZn.pf=function(n){return vnn(this,n)},uZn.qf=function(n,t){return Myn(this,n,t)},zW(Ztt,"EMapPropertyHolderImpl",2083),sDn(572,120,{110:1,377:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},ns),uZn.Lh=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return Dyn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 0:return 0!=this.a;case 1:return 0!=this.b}return Wkn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return void Scn(this,uM(pK(t)));case 1:return void pcn(this,uM(pK(t)))}sLn(this,n,t)},uZn.ii=function(){return tYn(),KKt},uZn.ki=function(n){switch(n){case 0:return void Scn(this,0);case 1:return void pcn(this,0)}oAn(this,n)},uZn.Ib=function(){var n;return 0!=(64&this.Db)?vxn(this):((n=new fx(vxn(this))).a+=" (x: ",Oj(n,this.a),n.a+=", y: ",Oj(n,this.b),n.a+=")",n.a)},uZn.a=0,uZn.b=0,zW(Ztt,"ElkBendPointImpl",572),sDn(739,2083,{110:1,342:1,167:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return Xdn(this,n,t,e)},uZn.Sh=function(n,t,e){return SCn(this,n,t,e)},uZn.Uh=function(n,t,e){return phn(this,n,t,e)},uZn.Wh=function(n){return _sn(this,n)},uZn.bi=function(n,t){CSn(this,n,t)},uZn.ii=function(){return tYn(),HKt},uZn.ki=function(n){Awn(this,n)},uZn.jh=function(){return this.k},uZn.kh=function(){return xJ(this)},uZn.Ib=function(){return Egn(this)},uZn.k=null,zW(Ztt,"ElkGraphElementImpl",739),sDn(740,739,{110:1,342:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return spn(this,n,t,e)},uZn.Wh=function(n){return Kpn(this,n)},uZn.bi=function(n,t){ISn(this,n,t)},uZn.ii=function(){return tYn(),zKt},uZn.ki=function(n){Tmn(this,n)},uZn.lh=function(){return this.f},uZn.mh=function(){return this.g},uZn.nh=function(){return this.i},uZn.oh=function(){return this.j},uZn.ph=function(n,t){vN(this,n,t)},uZn.qh=function(n,t){kN(this,n,t)},uZn.rh=function(n){ycn(this,n)},uZn.sh=function(n){Mcn(this,n)},uZn.Ib=function(){return rOn(this)},uZn.f=0,uZn.g=0,uZn.i=0,uZn.j=0,zW(Ztt,"ElkShapeImpl",740),sDn(741,740,{110:1,342:1,84:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return SMn(this,n,t,e)},uZn.Sh=function(n,t,e){return tSn(this,n,t,e)},uZn.Uh=function(n,t,e){return eSn(this,n,t,e)},uZn.Wh=function(n){return iln(this,n)},uZn.bi=function(n,t){SDn(this,n,t)},uZn.ii=function(){return tYn(),FKt},uZn.ki=function(n){yyn(this,n)},uZn.hh=function(){return!this.d&&(this.d=new f_(aFt,this,8,5)),this.d},uZn.ih=function(){return!this.e&&(this.e=new f_(aFt,this,7,4)),this.e},zW(Ztt,"ElkConnectableShapeImpl",741),sDn(326,739,{110:1,342:1,74:1,167:1,326:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},es),uZn.Ah=function(n){return sEn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 3:return s0(this);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),this.b;case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),this.c;case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),this.a;case 7:return qx(),!this.b&&(this.b=new f_(cFt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new f_(cFt,this,5,8)),this.c.i<=1));case 8:return qx(),!!z$n(this);case 9:return qx(),!!BNn(this);case 10:return qx(),!this.b&&(this.b=new f_(cFt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new f_(cFt,this,5,8)),0!=this.c.i)}return Xdn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?sEn(this,e):this.Cb.Th(this,-1-i,null,e)),nF(this,uG(n,27),e);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),Nmn(this.b,n,e);case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),Nmn(this.c,n,e);case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),Nmn(this.a,n,e)}return SCn(this,n,t,e)},uZn.Uh=function(n,t,e){switch(t){case 3:return nF(this,null,e);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),Nyn(this.b,n,e);case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),Nyn(this.c,n,e);case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),Nyn(this.a,n,e)}return phn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 3:return!!s0(this);case 4:return!!this.b&&0!=this.b.i;case 5:return!!this.c&&0!=this.c.i;case 6:return!!this.a&&0!=this.a.i;case 7:return!this.b&&(this.b=new f_(cFt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new f_(cFt,this,5,8)),this.c.i<=1));case 8:return z$n(this);case 9:return BNn(this);case 10:return!this.b&&(this.b=new f_(cFt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new f_(cFt,this,5,8)),0!=this.c.i)}return _sn(this,n)},uZn.bi=function(n,t){switch(n){case 3:return void ARn(this,uG(t,27));case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),Czn(this.b),!this.b&&(this.b=new f_(cFt,this,4,7)),void CW(this.b,uG(t,16));case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),Czn(this.c),!this.c&&(this.c=new f_(cFt,this,5,8)),void CW(this.c,uG(t,16));case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),Czn(this.a),!this.a&&(this.a=new fV(oFt,this,6,6)),void CW(this.a,uG(t,16))}CSn(this,n,t)},uZn.ii=function(){return tYn(),_Kt},uZn.ki=function(n){switch(n){case 3:return void ARn(this,null);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),void Czn(this.b);case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),void Czn(this.c);case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),void Czn(this.a)}Awn(this,n)},uZn.Ib=function(){return SXn(this)},zW(Ztt,"ElkEdgeImpl",326),sDn(451,2083,{110:1,342:1,166:1,451:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},is),uZn.Ah=function(n){return zjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new MD(eFt,this,5)),this.a;case 6:return f0(this);case 7:return t?fMn(this):this.i;case 8:return t?hMn(this):this.f;case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),this.g;case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),this.e;case 11:return this.d}return ajn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?zjn(this,e):this.Cb.Th(this,-1-i,null,e)),ZK(this,uG(n,74),e);case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),Nmn(this.g,n,e);case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),Nmn(this.e,n,e)}return uG(ern(uG(Lsn(this,16),29)||(tYn(),BKt),t),69).wk().zk(this,$vn(this),t-iQ((tYn(),BKt)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 5:return!this.a&&(this.a=new MD(eFt,this,5)),Nyn(this.a,n,e);case 6:return ZK(this,null,e);case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),Nyn(this.g,n,e);case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),Nyn(this.e,n,e)}return BIn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 1:return 0!=this.j;case 2:return 0!=this.k;case 3:return 0!=this.b;case 4:return 0!=this.c;case 5:return!!this.a&&0!=this.a.i;case 6:return!!f0(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&0!=this.g.i;case 10:return!!this.e&&0!=this.e.i;case 11:return null!=this.d}return j4(this,n)},uZn.bi=function(n,t){switch(n){case 1:return void Tcn(this,uM(pK(t)));case 2:return void Ecn(this,uM(pK(t)));case 3:return void mcn(this,uM(pK(t)));case 4:return void jcn(this,uM(pK(t)));case 5:return!this.a&&(this.a=new MD(eFt,this,5)),Czn(this.a),!this.a&&(this.a=new MD(eFt,this,5)),void CW(this.a,uG(t,16));case 6:return void ORn(this,uG(t,74));case 7:return void zan(this,uG(t,84));case 8:return void Xan(this,uG(t,84));case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),Czn(this.g),!this.g&&(this.g=new f_(oFt,this,9,10)),void CW(this.g,uG(t,16));case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),Czn(this.e),!this.e&&(this.e=new f_(oFt,this,10,9)),void CW(this.e,uG(t,16));case 11:return void fon(this,mK(t))}bln(this,n,t)},uZn.ii=function(){return tYn(),BKt},uZn.ki=function(n){switch(n){case 1:return void Tcn(this,0);case 2:return void Ecn(this,0);case 3:return void mcn(this,0);case 4:return void jcn(this,0);case 5:return!this.a&&(this.a=new MD(eFt,this,5)),void Czn(this.a);case 6:return void ORn(this,null);case 7:return void zan(this,null);case 8:return void Xan(this,null);case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),void Czn(this.g);case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),void Czn(this.e);case 11:return void fon(this,null)}ffn(this,n)},uZn.Ib=function(){return A$n(this)},uZn.b=0,uZn.c=0,uZn.d=null,uZn.j=0,uZn.k=0,zW(Ztt,"ElkEdgeSectionImpl",451),sDn(158,120,{110:1,94:1,93:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1}),uZn.Lh=function(n,t,e){return 0==n?(!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab):$tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Sh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e)):uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().zk(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Uh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e)):uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){return 0==n?!!this.Ab&&0!=this.Ab.i:l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.Zh=function(n){return VQn(this,n)},uZn.bi=function(n,t){if(0===n)return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.di=function(n){Dvn(this,128,n)},uZn.ii=function(){return YYn(),$_t},uZn.ki=function(n){if(0===n)return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){this.Bb|=1},uZn.qi=function(n){return qUn(this,n)},uZn.Bb=0,zW(Ytt,"EModelElementImpl",158),sDn(720,158,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},Fl),uZn.ri=function(n,t){return cWn(this,n,t)},uZn.si=function(n){var t,e,i,r;if(this.a!=Hrn(n)||0!=(256&n.Bb))throw hv(new vM(cet+n.zb+eet));for(e=n1(n);0!=z5(e.a).i;){if(_Tn(t=uG(yVn(e,0,F$(r=uG(zrn(z5(e.a),0),89).c,90)?uG(r,29):(YYn(),x_t)),29)))return uG(i=Hrn(t).wi().si(t),54).ci(n),i;e=n1(t)}return"java.util.Map$Entry"==(null!=n.D?n.D:n.B)?new Eq(n):new BG(n)},uZn.ti=function(n,t){return cYn(this,n,t)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.a}return $tn(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n),t,e)},uZn.Sh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 1:return this.a&&(e=uG(this.a,54).Th(this,4,fFt,e)),ywn(this,uG(n,241),e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),A_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),A_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 1:return ywn(this,null,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),A_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),A_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return!!this.a}return l5(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void yIn(this,uG(t,241))}lpn(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n),t)},uZn.ii=function(){return YYn(),A_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void yIn(this,null)}sdn(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n))},zW(Ytt,"EFactoryImpl",720),sDn(1037,720,{110:1,2113:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},rs),uZn.ri=function(n,t){switch(n.hk()){case 12:return uG(t,149).Pg();case 13:return cpn(t);default:throw hv(new vM(tet+n.xe()+eet))}},uZn.si=function(n){var t;switch(-1==n.G&&(n.G=(t=Hrn(n))?Hyn(t.vi(),n):-1),n.G){case 4:return new cs;case 6:return new Bk;case 7:return new Hk;case 8:return new es;case 9:return new ns;case 10:return new is;case 11:return new as;default:throw hv(new vM(cet+n.zb+eet))}},uZn.ti=function(n,t){switch(n.hk()){case 13:case 12:return null;default:throw hv(new vM(tet+n.xe()+eet))}},zW(Ztt,"ElkGraphFactoryImpl",1037),sDn(448,158,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1}),uZn.Gh=function(){var n;return null==(n=$1(eqn(uG(Lsn(this,16),29)||this.ii())))?(jP(),jP(),tBt):new VR(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.xe()}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void this.ui(mK(t))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),D_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void this.ui(null)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.xe=function(){return this.zb},uZn.ui=function(n){qon(this,n)},uZn.Ib=function(){return Wwn(this)},uZn.zb=null,zW(Ytt,"ENamedElementImpl",448),sDn(184,448,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},aZ),uZn.Ah=function(n){return Jjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),this.rb;case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),this.vb;case 7:return t?this.Db>>16==7?uG(this.Cb,241):null:$0(this)}return $tn(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 4:return this.sb&&(e=uG(this.sb,54).Th(this,1,sFt,e)),Jwn(this,uG(n,479),e);case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),Nmn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),Nmn(this.vb,n,e);case 7:return this.Cb&&(e=(i=this.Db>>16)>=0?Jjn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,7,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),F_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),F_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 4:return Jwn(this,null,e);case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),Nyn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),Nyn(this.vb,n,e);case 7:return DUn(this,null,7,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),F_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),F_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.yb;case 3:return null!=this.xb;case 4:return!!this.sb;case 5:return!!this.rb&&0!=this.rb.i;case 6:return!!this.vb&&0!=this.vb.i;case 7:return!!$0(this)}return l5(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n))},uZn.Zh=function(n){return jKn(this,n)||VQn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return void zon(this,mK(t));case 3:return void Xon(this,mK(t));case 4:return void HIn(this,uG(t,479));case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),Czn(this.rb),!this.rb&&(this.rb=new vV(this,s_t,this)),void CW(this.rb,uG(t,16));case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),Czn(this.vb),!this.vb&&(this.vb=new i_(fFt,this,6,7)),void CW(this.vb,uG(t,16))}lpn(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n),t)},uZn.ei=function(n){var t,e;if(n&&this.rb)for(e=new DD(this.rb);e.e!=e.i.gc();)F$(t=Zkn(e),364)&&(uG(t,364).w=null);Dvn(this,64,n)},uZn.ii=function(){return YYn(),F_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return void zon(this,null);case 3:return void Xon(this,null);case 4:return void HIn(this,null);case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),void Czn(this.rb);case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),void Czn(this.vb)}sdn(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n))},uZn.pi=function(){ojn(this)},uZn.vi=function(){return!this.rb&&(this.rb=new vV(this,s_t,this)),this.rb},uZn.wi=function(){return this.sb},uZn.xi=function(){return this.ub},uZn.yi=function(){return this.xb},uZn.zi=function(){return this.yb},uZn.Ai=function(n){this.ub=n},uZn.Ib=function(){var n;return 0!=(64&this.Db)?Wwn(this):((n=new fx(Wwn(this))).a+=" (nsURI: ",VA(n,this.yb),n.a+=", nsPrefix: ",VA(n,this.xb),n.a+=")",n.a)},uZn.xb=null,uZn.yb=null,zW(Ytt,"EPackageImpl",184),sDn(569,184,{110:1,2115:1,569:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},iDn),uZn.q=!1,uZn.r=!1;var dFt=!1;zW(Ztt,"ElkGraphPackageImpl",569),sDn(366,740,{110:1,342:1,167:1,135:1,422:1,366:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},cs),uZn.Ah=function(n){return Vjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 7:return x0(this);case 8:return this.a}return spn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;return 7===t?(this.Cb&&(e=(i=this.Db>>16)>=0?Vjn(this,e):this.Cb.Th(this,-1-i,null,e)),dz(this,uG(n,167),e)):SCn(this,n,t,e)},uZn.Uh=function(n,t,e){return 7==t?dz(this,null,e):phn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 7:return!!x0(this);case 8:return!m_("",this.a)}return Kpn(this,n)},uZn.bi=function(n,t){switch(n){case 7:return void vKn(this,uG(t,167));case 8:return void Van(this,mK(t))}ISn(this,n,t)},uZn.ii=function(){return tYn(),UKt},uZn.ki=function(n){switch(n){case 7:return void vKn(this,null);case 8:return void Van(this,"")}Tmn(this,n)},uZn.Ib=function(){return zOn(this)},uZn.a="",zW(Ztt,"ElkLabelImpl",366),sDn(207,741,{110:1,342:1,84:1,167:1,27:1,422:1,207:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Bk),uZn.Ah=function(n){return hEn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),this.c;case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),this.a;case 11:return R0(this);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),this.b;case 13:return qx(),!this.a&&(this.a=new fV(bFt,this,10,11)),this.a.i>0}return SMn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),Nmn(this.c,n,e);case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),Nmn(this.a,n,e);case 11:return this.Cb&&(e=(i=this.Db>>16)>=0?hEn(this,e):this.Cb.Th(this,-1-i,null,e)),n_(this,uG(n,27),e);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),Nmn(this.b,n,e)}return tSn(this,n,t,e)},uZn.Uh=function(n,t,e){switch(t){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),Nyn(this.c,n,e);case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),Nyn(this.a,n,e);case 11:return n_(this,null,e);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),Nyn(this.b,n,e)}return eSn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 9:return!!this.c&&0!=this.c.i;case 10:return!!this.a&&0!=this.a.i;case 11:return!!R0(this);case 12:return!!this.b&&0!=this.b.i;case 13:return!this.a&&(this.a=new fV(bFt,this,10,11)),this.a.i>0}return iln(this,n)},uZn.bi=function(n,t){switch(n){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),Czn(this.c),!this.c&&(this.c=new fV(wFt,this,9,9)),void CW(this.c,uG(t,16));case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),Czn(this.a),!this.a&&(this.a=new fV(bFt,this,10,11)),void CW(this.a,uG(t,16));case 11:return void GRn(this,uG(t,27));case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),Czn(this.b),!this.b&&(this.b=new fV(aFt,this,12,3)),void CW(this.b,uG(t,16))}SDn(this,n,t)},uZn.ii=function(){return tYn(),GKt},uZn.ki=function(n){switch(n){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),void Czn(this.c);case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),void Czn(this.a);case 11:return void GRn(this,null);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),void Czn(this.b)}yyn(this,n)},uZn.Ib=function(){return zBn(this)},zW(Ztt,"ElkNodeImpl",207),sDn(193,741,{110:1,342:1,84:1,167:1,123:1,422:1,193:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Hk),uZn.Ah=function(n){return Wjn(this,n)},uZn.Lh=function(n,t,e){return 9==n?h0(this):SMn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;return 9===t?(this.Cb&&(e=(i=this.Db>>16)>=0?Wjn(this,e):this.Cb.Th(this,-1-i,null,e)),tF(this,uG(n,27),e)):tSn(this,n,t,e)},uZn.Uh=function(n,t,e){return 9==t?tF(this,null,e):eSn(this,n,t,e)},uZn.Wh=function(n){return 9==n?!!h0(this):iln(this,n)},uZn.bi=function(n,t){9!==n?SDn(this,n,t):LRn(this,uG(t,27))},uZn.ii=function(){return tYn(),qKt},uZn.ki=function(n){9!==n?yyn(this,n):LRn(this,null)},uZn.Ib=function(){return VBn(this)},zW(Ztt,"ElkPortImpl",193);var gFt=Iq(Pet,"BasicEMap/Entry");sDn(1122,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,119:1,120:1},as),uZn.Fb=function(n){return this===n},uZn.ld=function(){return this.b},uZn.Hb=function(){return xx(this)},uZn.Di=function(n){Wan(this,uG(n,149))},uZn.Lh=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return Dyn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.b;case 1:return null!=this.c}return Wkn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return void Wan(this,uG(t,149));case 1:return void Han(this,t)}sLn(this,n,t)},uZn.ii=function(){return tYn(),XKt},uZn.ki=function(n){switch(n){case 0:return void Wan(this,null);case 1:return void Han(this,null)}oAn(this,n)},uZn.Bi=function(){var n;return-1==this.a&&(n=this.b,this.a=n?Hon(n):0),this.a},uZn.md=function(){return this.c},uZn.Ci=function(n){this.a=n},uZn.nd=function(n){var t;return t=this.c,Han(this,n),t},uZn.Ib=function(){var n;return 0!=(64&this.Db)?vxn(this):(JA(JA(JA(n=new WM,this.b?this.b.Pg():IZn),Y4n),ox(this.c)),n.a)},uZn.a=-1,uZn.c=null;var pFt,mFt,vFt,kFt,yFt,MFt,TFt,jFt,EFt=zW(Ztt,"ElkPropertyToValueMapEntryImpl",1122);sDn(996,1,{},ss),zW(Oet,"JsonAdapter",996),sDn(216,63,S1n,SM),zW(Oet,"JsonImportException",216),sDn(868,1,{},Zjn),zW(Oet,"JsonImporter",868),sDn(903,1,{},QO),zW(Oet,"JsonImporter/lambda$0$Type",903),sDn(904,1,{},JO),zW(Oet,"JsonImporter/lambda$1$Type",904),sDn(912,1,{},Yp),zW(Oet,"JsonImporter/lambda$10$Type",912),sDn(914,1,{},YO),zW(Oet,"JsonImporter/lambda$11$Type",914),sDn(915,1,{},ZO),zW(Oet,"JsonImporter/lambda$12$Type",915),sDn(921,1,{},SY),zW(Oet,"JsonImporter/lambda$13$Type",921),sDn(920,1,{},PY),zW(Oet,"JsonImporter/lambda$14$Type",920),sDn(916,1,{},nA),zW(Oet,"JsonImporter/lambda$15$Type",916),sDn(917,1,{},tA),zW(Oet,"JsonImporter/lambda$16$Type",917),sDn(918,1,{},eA),zW(Oet,"JsonImporter/lambda$17$Type",918),sDn(919,1,{},iA),zW(Oet,"JsonImporter/lambda$18$Type",919),sDn(924,1,{},Zp),zW(Oet,"JsonImporter/lambda$19$Type",924),sDn(905,1,{},nm),zW(Oet,"JsonImporter/lambda$2$Type",905),sDn(922,1,{},tm),zW(Oet,"JsonImporter/lambda$20$Type",922),sDn(923,1,{},em),zW(Oet,"JsonImporter/lambda$21$Type",923),sDn(927,1,{},im),zW(Oet,"JsonImporter/lambda$22$Type",927),sDn(925,1,{},rm),zW(Oet,"JsonImporter/lambda$23$Type",925),sDn(926,1,{},cm),zW(Oet,"JsonImporter/lambda$24$Type",926),sDn(929,1,{},am),zW(Oet,"JsonImporter/lambda$25$Type",929),sDn(928,1,{},om),zW(Oet,"JsonImporter/lambda$26$Type",928),sDn(930,1,QZn,rA),uZn.Cd=function(n){ptn(this.b,this.a,mK(n))},zW(Oet,"JsonImporter/lambda$27$Type",930),sDn(931,1,QZn,cA),uZn.Cd=function(n){mtn(this.b,this.a,mK(n))},zW(Oet,"JsonImporter/lambda$28$Type",931),sDn(932,1,{},aA),zW(Oet,"JsonImporter/lambda$29$Type",932),sDn(908,1,{},um),zW(Oet,"JsonImporter/lambda$3$Type",908),sDn(933,1,{},oA),zW(Oet,"JsonImporter/lambda$30$Type",933),sDn(934,1,{},sm),zW(Oet,"JsonImporter/lambda$31$Type",934),sDn(935,1,{},hm),zW(Oet,"JsonImporter/lambda$32$Type",935),sDn(936,1,{},fm),zW(Oet,"JsonImporter/lambda$33$Type",936),sDn(937,1,{},lm),zW(Oet,"JsonImporter/lambda$34$Type",937),sDn(870,1,{},bm),zW(Oet,"JsonImporter/lambda$35$Type",870),sDn(941,1,{},DU),zW(Oet,"JsonImporter/lambda$36$Type",941),sDn(938,1,QZn,wm),uZn.Cd=function(n){V8(this.a,uG(n,377))},zW(Oet,"JsonImporter/lambda$37$Type",938),sDn(939,1,QZn,sA),uZn.Cd=function(n){vA(this.a,this.b,uG(n,166))},zW(Oet,"JsonImporter/lambda$38$Type",939),sDn(940,1,QZn,hA),uZn.Cd=function(n){kA(this.a,this.b,uG(n,166))},zW(Oet,"JsonImporter/lambda$39$Type",940),sDn(906,1,{},dm),zW(Oet,"JsonImporter/lambda$4$Type",906),sDn(942,1,QZn,gm),uZn.Cd=function(n){W8(this.a,uG(n,8))},zW(Oet,"JsonImporter/lambda$40$Type",942),sDn(907,1,{},pm),zW(Oet,"JsonImporter/lambda$5$Type",907),sDn(911,1,{},mm),zW(Oet,"JsonImporter/lambda$6$Type",911),sDn(909,1,{},vm),zW(Oet,"JsonImporter/lambda$7$Type",909),sDn(910,1,{},km),zW(Oet,"JsonImporter/lambda$8$Type",910),sDn(913,1,{},ym),zW(Oet,"JsonImporter/lambda$9$Type",913),sDn(961,1,QZn,Mm),uZn.Cd=function(n){pQ(this.a,new QW(mK(n)))},zW(Oet,"JsonMetaDataConverter/lambda$0$Type",961),sDn(962,1,QZn,Tm),uZn.Cd=function(n){SW(this.a,uG(n,245))},zW(Oet,"JsonMetaDataConverter/lambda$1$Type",962),sDn(963,1,QZn,jm),uZn.Cd=function(n){m2(this.a,uG(n,143))},zW(Oet,"JsonMetaDataConverter/lambda$2$Type",963),sDn(964,1,QZn,Em),uZn.Cd=function(n){PW(this.a,uG(n,170))},zW(Oet,"JsonMetaDataConverter/lambda$3$Type",964),sDn(245,22,{3:1,34:1,22:1,245:1},fA);var SFt,PFt=_cn(p3n,"GraphFeature",245,Oat,brn,QU);sDn(11,1,{34:1,149:1},Cm,uF,mL,_N),uZn.Fd=function(n){return dD(this,uG(n,149))},uZn.Fb=function(n){return QZ(this,n)},uZn.Sg=function(){return Jkn(this)},uZn.Pg=function(){return this.b},uZn.Hb=function(){return pln(this.b)},uZn.Ib=function(){return this.b},zW(p3n,"Property",11),sDn(671,1,b2n,Sm),uZn.Ne=function(n,t){return wgn(this,uG(n,96),uG(t,96))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p3n,"PropertyHolderComparator",671),sDn(709,1,$Zn,Pm),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return Mtn(this)},uZn.Qb=function(){xj()},uZn.Ob=function(){return!!this.a},zW(qet,"ElkGraphUtil/AncestorIterator",709);var CFt=Iq(Pet,"EList");sDn(70,56,{20:1,31:1,56:1,16:1,15:1,70:1,61:1}),uZn.bd=function(n,t){$dn(this,n,t)},uZn.Fc=function(n){return ttn(this,n)},uZn.cd=function(n,t){return bfn(this,n,t)},uZn.Gc=function(n){return CW(this,n)},uZn.Ii=function(){return new nR(this)},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},uZn.Li=function(){return!0},uZn.Mi=function(n,t){},uZn.Ni=function(){},uZn.Oi=function(n,t){Ann(this,n,t)},uZn.Pi=function(n,t,e){},uZn.Qi=function(n,t){},uZn.Ri=function(n,t,e){},uZn.Fb=function(n){return G_n(this,n)},uZn.Hb=function(){return Bhn(this)},uZn.Si=function(){return!1},uZn.Kc=function(){return new DD(this)},uZn.ed=function(){return new Zx(this)},uZn.fd=function(n){var t;if(t=this.gc(),n<0||n>t)throw hv(new w_(n,t));return new QV(this,n)},uZn.Ui=function(n,t){this.Ti(n,this.dd(t))},uZn.Mc=function(n){return rin(this,n)},uZn.Wi=function(n,t){return t},uZn.hd=function(n,t){return Uyn(this,n,t)},uZn.Ib=function(){return Tpn(this)},uZn.Yi=function(){return!0},uZn.Zi=function(n,t){return gln(this,t)},zW(Pet,"AbstractEList",70),sDn(66,70,Qet,ls,Drn,Hun),uZn.Ei=function(n,t){return PCn(this,n,t)},uZn.Fi=function(n){return QMn(this,n)},uZn.Gi=function(n,t){edn(this,n,t)},uZn.Hi=function(n){z9(this,n)},uZn.$i=function(n){return Otn(this,n)},uZn.$b=function(){V9(this)},uZn.Hc=function(n){return sSn(this,n)},uZn.Xb=function(n){return zrn(this,n)},uZn._i=function(n){var t,e,i;++this.j,n>(e=null==this.g?0:this.g.length)&&(i=this.g,(t=e+(e/2|0)+4)<n&&(t=n),this.g=this.aj(t),null!=i&&qGn(i,0,this.g,0,this.i))},uZn.dd=function(n){return Ljn(this,n)},uZn.dc=function(){return 0==this.i},uZn.Ti=function(n,t){return HNn(this,n,t)},uZn.aj=function(n){return Inn(dat,EZn,1,n,5,1)},uZn.Vi=function(n){return this.g[n]},uZn.gd=function(n){return gjn(this,n)},uZn.Xi=function(n,t){return iin(this,n,t)},uZn.gc=function(){return this.i},uZn.Pc=function(){return g5(this)},uZn.Qc=function(n){return gmn(this,n)},uZn.i=0;var IFt=zW(Pet,"BasicEList",66),OFt=Iq(Pet,"TreeIterator");sDn(708,66,Jet),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return null!=this.g||this.c?null==this.g||0!=this.i&&uG(this.g[this.i-1],51).Ob():O0(this)},uZn.Pb=function(){return Wxn(this)},uZn.Qb=function(){if(!this.e)throw hv(new kM("There is no valid object to remove."));this.e.Qb()},uZn.c=!1,zW(Pet,"AbstractTreeIterator",708),sDn(700,708,Jet,jN),uZn.bj=function(n){var t;return F$(t=uG(n,58).Gh().Kc(),287)&&uG(t,287).wl(new hs),t},zW(qet,"ElkGraphUtil/PropertiesSkippingTreeIterator",700),sDn(965,1,{},hs),zW(qet,"ElkGraphUtil/PropertiesSkippingTreeIterator/1",965);var AFt,LFt,NFt,$Ft=zW(qet,"ElkReflect",null);sDn(901,1,xnt,fs),uZn.Rg=function(n){return W0(),E2(uG(n,181))},zW(qet,"ElkReflect/lambda$0$Type",901),Iq(Pet,"ResourceLocator"),sDn(1065,1,{}),zW(Pet,"DelegatingResourceLocator",1065),sDn(1066,1065,{}),zW("org.eclipse.emf.common","EMFPlugin",1066);var DFt,xFt=Iq(Kit,"Adapter"),RFt=Iq(Kit,"Notification");sDn(1174,1,Fit),uZn.cj=function(){return this.d},uZn.dj=function(n){},uZn.ej=function(n){this.d=n},uZn.fj=function(n){this.d==n&&(this.d=null)},uZn.d=null,zW(Utt,"AdapterImpl",1174),sDn(2093,70,_it),uZn.Ei=function(n,t){return nmn(this,n,t)},uZn.Fi=function(n){var t,e,i;if(++this.j,n.dc())return!1;for(t=this.Ej(),i=n.Kc();i.Ob();)e=i.Pb(),this.rj(this.Zi(t,e)),++t;return!0},uZn.Gi=function(n,t){JK(this,n,t)},uZn.Hi=function(n){vQ(this,n)},uZn.pj=function(){return this.sj()},uZn.$b=function(){QK(this,this.Ej(),this.Fj())},uZn.Hc=function(n){return this.uj(n)},uZn.Ic=function(n){return this.vj(n)},uZn.qj=function(n,t){this.Bj().Um()},uZn.rj=function(n){this.Bj().Um()},uZn.sj=function(){return this.Bj()},uZn.tj=function(){this.Bj().Um()},uZn.uj=function(n){return this.Bj().Um()},uZn.vj=function(n){return this.Bj().Um()},uZn.wj=function(n){return this.Bj().Um()},uZn.xj=function(n){return this.Bj().Um()},uZn.yj=function(){return this.Bj().Um()},uZn.zj=function(n){return this.Bj().Um()},uZn.Aj=function(){return this.Bj().Um()},uZn.Cj=function(n){return this.Bj().Um()},uZn.Dj=function(n,t){return this.Bj().Um()},uZn.Ej=function(){return this.Bj().Um()},uZn.Fj=function(){return this.Bj().Um()},uZn.Gj=function(n){return this.Bj().Um()},uZn.Hj=function(){return this.Bj().Um()},uZn.Fb=function(n){return this.wj(n)},uZn.Xb=function(n){return this.Wi(n,this.xj(n))},uZn.Hb=function(){return this.yj()},uZn.dd=function(n){return this.zj(n)},uZn.dc=function(){return this.Aj()},uZn.Ti=function(n,t){return pIn(this,n,t)},uZn.Vi=function(n){return this.xj(n)},uZn.gd=function(n){return Oq(this,n)},uZn.Mc=function(n){var t;return(t=this.dd(n))>=0&&(this.gd(t),!0)},uZn.Xi=function(n,t){return this.Dj(n,this.Zi(n,t))},uZn.gc=function(){return this.Ej()},uZn.Pc=function(){return this.Fj()},uZn.Qc=function(n){return this.Gj(n)},uZn.Ib=function(){return this.Hj()},zW(Pet,"DelegatingEList",2093),sDn(2094,2093,_it),uZn.Ei=function(n,t){return dGn(this,n,t)},uZn.Fi=function(n){return this.Ei(this.Ej(),n)},uZn.Gi=function(n,t){cDn(this,n,t)},uZn.Hi=function(n){S$n(this,n)},uZn.Li=function(){return!this.Mj()},uZn.$b=function(){_zn(this)},uZn.Ij=function(n,t,e,i,r){return new zZ(this,n,t,e,i,r)},uZn.Jj=function(n){Msn(this.jj(),n)},uZn.Kj=function(){return null},uZn.Lj=function(){return-1},uZn.jj=function(){return null},uZn.Mj=function(){return!1},uZn.Nj=function(n,t){return t},uZn.Oj=function(n,t){return t},uZn.Pj=function(){return!1},uZn.Qj=function(){return!this.Aj()},uZn.Ti=function(n,t){var e,i;return this.Pj()?(i=this.Qj(),e=pIn(this,n,t),this.Jj(this.Ij(7,xwn(t),e,n,i)),e):pIn(this,n,t)},uZn.gd=function(n){var t,e,i,r;return this.Pj()?(e=null,i=this.Qj(),t=this.Ij(4,r=Oq(this,n),null,n,i),this.Mj()&&r?(e=this.Oj(r,e))?(e.nj(t),e.oj()):this.Jj(t):e?(e.nj(t),e.oj()):this.Jj(t),r):(r=Oq(this,n),this.Mj()&&r&&(e=this.Oj(r,null))&&e.oj(),r)},uZn.Xi=function(n,t){return gGn(this,n,t)},zW(Utt,"DelegatingNotifyingListImpl",2094),sDn(152,1,Bit),uZn.nj=function(n){return kPn(this,n)},uZn.oj=function(){Cen(this)},uZn.gj=function(){return this.d},uZn.Kj=function(){return null},uZn.Rj=function(){return null},uZn.hj=function(n){return-1},uZn.ij=function(){return OFn(this)},uZn.jj=function(){return null},uZn.kj=function(){return AFn(this)},uZn.lj=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},uZn.Sj=function(){return!1},uZn.mj=function(n){var t,e,i,r,c,a,o,u;switch(this.d){case 1:case 2:switch(n.gj()){case 1:case 2:if(xA(n.jj())===xA(this.jj())&&this.hj(null)==n.hj(null))return this.g=n.ij(),1==n.gj()&&(this.d=1),!0}case 4:if(4===n.gj()&&xA(n.jj())===xA(this.jj())&&this.hj(null)==n.hj(null))return a=kVn(this),c=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,i=n.lj(),this.d=6,u=new Drn(2),c<=i?(ttn(u,this.n),ttn(u,n.kj()),this.g=Uhn(cT(YHt,1),W1n,28,15,[this.o=c,i+1])):(ttn(u,n.kj()),ttn(u,this.n),this.g=Uhn(cT(YHt,1),W1n,28,15,[this.o=i,c])),this.n=u,a||(this.o=-2-this.o-1),!0;break;case 6:if(4===n.gj()&&xA(n.jj())===xA(this.jj())&&this.hj(null)==n.hj(null)){for(a=kVn(this),i=n.lj(),o=uG(this.g,53),e=Inn(YHt,W1n,28,o.length+1,15,1),t=0;t<o.length&&(r=o[t])<=i;)e[t++]=r,++i;for(uG(this.n,15).bd(t,n.kj()),e[t]=i;++t<e.length;)e[t]=o[t-1];return this.g=e,a||(this.o=-2-e[0]),!0}}return!1},uZn.Ib=function(){var n,t,e;switch((e=new fx(Ij(this.Rm)+"@"+(Hon(this)>>>0).toString(16))).a+=" (eventType: ",this.d){case 1:e.a+="SET";break;case 2:e.a+="UNSET";break;case 3:e.a+="ADD";break;case 5:e.a+="ADD_MANY";break;case 4:e.a+="REMOVE";break;case 6:e.a+="REMOVE_MANY";break;case 7:e.a+="MOVE";break;case 8:e.a+="REMOVING_ADAPTER";break;case 9:e.a+="RESOLVE";break;default:Aj(e,this.d)}if(pHn(this)&&(e.a+=", touch: true"),e.a+=", position: ",Aj(e,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),e.a+=", notifier: ",zA(e,this.jj()),e.a+=", feature: ",zA(e,this.Kj()),e.a+=", oldValue: ",zA(e,AFn(this)),e.a+=", newValue: ",6==this.d&&F$(this.g,53)){for(t=uG(this.g,53),e.a+="[",n=0;n<t.length;)e.a+=t[n],++n<t.length&&(e.a+=TZn);e.a+="]"}else zA(e,OFn(this));return e.a+=", isTouch: ",Lj(e,pHn(this)),e.a+=", wasSet: ",Lj(e,kVn(this)),e.a+=")",e.a},uZn.d=0,uZn.e=0,uZn.f=0,uZn.j=0,uZn.k=0,uZn.o=0,uZn.p=0,zW(Utt,"NotificationImpl",152),sDn(1188,152,Bit,zZ),uZn.Kj=function(){return this.a.Kj()},uZn.hj=function(n){return this.a.Lj()},uZn.jj=function(){return this.a.jj()},zW(Utt,"DelegatingNotifyingListImpl/1",1188),sDn(251,66,Qet,bs,cj),uZn.Fc=function(n){return Zpn(this,uG(n,378))},uZn.nj=function(n){return Zpn(this,n)},uZn.oj=function(){var n,t,e;for(n=0;n<this.i;++n)null!=(e=(t=uG(this.g[n],378)).jj())&&-1!=t.gj()&&uG(e,94).xh(t)},uZn.aj=function(n){return Inn(RFt,EZn,378,n,0,1)},zW(Utt,"NotificationChainImpl",251),sDn(1524,93,Htt),uZn.uh=function(){return this.e},uZn.wh=function(){return 0!=(1&this.f)},uZn.f=1,zW(Utt,"NotifierImpl",1524),sDn(2091,66,Qet),uZn.Ei=function(n,t){return BGn(this,n,t)},uZn.Fi=function(n){return this.Ei(this.i,n)},uZn.Gi=function(n,t){P$n(this,n,t)},uZn.Hi=function(n){V$n(this,n)},uZn.Li=function(){return!this.Mj()},uZn.$b=function(){Czn(this)},uZn.Ij=function(n,t,e,i,r){return new XZ(this,n,t,e,i,r)},uZn.Jj=function(n){Msn(this.jj(),n)},uZn.Kj=function(){return null},uZn.Lj=function(){return-1},uZn.jj=function(){return null},uZn.Mj=function(){return!1},uZn.Tj=function(){return!1},uZn.Nj=function(n,t){return t},uZn.Oj=function(n,t){return t},uZn.Pj=function(){return!1},uZn.Qj=function(){return 0!=this.i},uZn.Ti=function(n,t){return zdn(this,n,t)},uZn.gd=function(n){return e_n(this,n)},uZn.Xi=function(n,t){return Pqn(this,n,t)},uZn.Uj=function(n,t){return t},uZn.Vj=function(n,t){return t},uZn.Wj=function(n,t,e){return e},zW(Utt,"NotifyingListImpl",2091),sDn(1187,152,Bit,XZ),uZn.Kj=function(){return this.a.Kj()},uZn.hj=function(n){return this.a.Lj()},uZn.jj=function(){return this.a.jj()},zW(Utt,"NotifyingListImpl/1",1187),sDn(966,66,Qet,cF),uZn.Hc=function(n){return this.i>10?(this.b&&this.c.j==this.a||(this.b=new oX(this),this.a=this.j),cS(this.b,n)):sSn(this,n)},uZn.Yi=function(){return!0},uZn.a=0,zW(Pet,"AbstractEList/1",966),sDn(301,77,v0n,w_),zW(Pet,"AbstractEList/BasicIndexOutOfBoundsException",301),sDn(40,1,$Zn,DD),uZn.Nb=function(n){SV(this,n)},uZn.Xj=function(){if(this.i.j!=this.f)throw hv(new Fv)},uZn.Yj=function(){return Zkn(this)},uZn.Ob=function(){return this.e!=this.i.gc()},uZn.Pb=function(){return this.Yj()},uZn.Qb=function(){$Sn(this)},uZn.e=0,uZn.f=0,uZn.g=-1,zW(Pet,"AbstractEList/EIterator",40),sDn(286,40,UZn,Zx,QV),uZn.Qb=function(){$Sn(this)},uZn.Rb=function(n){Smn(this,n)},uZn.Zj=function(){var n;try{return n=this.d.Xb(--this.e),this.Xj(),this.g=this.e,n}catch(t){throw F$(t=Ehn(t),77)?(this.Xj(),hv(new Bv)):hv(t)}},uZn.$j=function(n){cTn(this,n)},uZn.Sb=function(){return 0!=this.e},uZn.Tb=function(){return this.e},uZn.Ub=function(){return this.Zj()},uZn.Vb=function(){return this.e-1},uZn.Wb=function(n){this.$j(n)},zW(Pet,"AbstractEList/EListIterator",286),sDn(355,40,$Zn,nR),uZn.Yj=function(){return nyn(this)},uZn.Qb=function(){throw hv(new Kv)},zW(Pet,"AbstractEList/NonResolvingEIterator",355),sDn(398,286,UZn,tR,N_),uZn.Rb=function(n){throw hv(new Kv)},uZn.Yj=function(){var n;try{return n=this.c.Vi(this.e),this.Xj(),this.g=this.e++,n}catch(t){throw F$(t=Ehn(t),77)?(this.Xj(),hv(new Bv)):hv(t)}},uZn.Zj=function(){var n;try{return n=this.c.Vi(--this.e),this.Xj(),this.g=this.e,n}catch(t){throw F$(t=Ehn(t),77)?(this.Xj(),hv(new Bv)):hv(t)}},uZn.Qb=function(){throw hv(new Kv)},uZn.Wb=function(n){throw hv(new Kv)},zW(Pet,"AbstractEList/NonResolvingEListIterator",398),sDn(2080,70,Git),uZn.Ei=function(n,t){var e,i,r,c,a,o,u,s,h;if(0!=(i=t.gc())){for(e=zln(this,(s=null==(u=uG(Lsn(this.a,4),129))?0:u.length)+i),(h=s-n)>0&&qGn(u,n,e,n+i,h),o=t.Kc(),c=0;c<i;++c)XN(e,n+c,gln(this,a=o.Pb()));for(Pkn(this,e),r=0;r<i;++r)a=e[n],this.Mi(n,a),++n;return!0}return++this.j,!1},uZn.Fi=function(n){var t,e,i,r,c,a,o,u,s;if(0!=(i=n.gc())){for(t=zln(this,s=(u=null==(e=uG(Lsn(this.a,4),129))?0:e.length)+i),o=n.Kc(),c=u;c<s;++c)XN(t,c,gln(this,a=o.Pb()));for(Pkn(this,t),r=u;r<s;++r)a=t[r],this.Mi(r,a);return!0}return++this.j,!1},uZn.Gi=function(n,t){var e,i,r,c;e=zln(this,(r=null==(i=uG(Lsn(this.a,4),129))?0:i.length)+1),c=gln(this,t),n!=r&&qGn(i,n,e,n+1,r-n),uQ(e,n,c),Pkn(this,e),this.Mi(n,t)},uZn.Hi=function(n){var t,e,i;XN(t=zln(this,(i=null==(e=uG(Lsn(this.a,4),129))?0:e.length)+1),i,gln(this,n)),Pkn(this,t),this.Mi(i,n)},uZn.Ii=function(){return new T9(this)},uZn.Ji=function(){return new mV(this)},uZn.Ki=function(n){var t,e;if(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length,n<0||n>e)throw hv(new w_(n,e));return new qJ(this,n)},uZn.$b=function(){var n,t;++this.j,t=null==(n=uG(Lsn(this.a,4),129))?0:n.length,Pkn(this,null),Ann(this,t,n)},uZn.Hc=function(n){var t,e,i,r;if(null!=(t=uG(Lsn(this.a,4),129)))if(null!=n){for(i=0,r=(e=t).length;i<r;++i)if(udn(n,e[i]))return!0}else for(i=0,r=(e=t).length;i<r;++i)if(xA(e[i])===xA(n))return!0;return!1},uZn.Xb=function(n){var t,e;if(n>=(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length))throw hv(new w_(n,e));return t[n]},uZn.dd=function(n){var t,e,i;if(null!=(t=uG(Lsn(this.a,4),129)))if(null!=n){for(e=0,i=t.length;e<i;++e)if(udn(n,t[e]))return e}else for(e=0,i=t.length;e<i;++e)if(xA(t[e])===xA(n))return e;return-1},uZn.dc=function(){return null==uG(Lsn(this.a,4),129)},uZn.Kc=function(){return new M9(this)},uZn.ed=function(){return new pV(this)},uZn.fd=function(n){var t,e;if(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length,n<0||n>e)throw hv(new w_(n,e));return new GJ(this,n)},uZn.Ti=function(n,t){var e,i,r;if(n>=(r=null==(e=lvn(this))?0:e.length))throw hv(new dM(zet+n+Vet+r));if(t>=r)throw hv(new dM(Wet+t+Vet+r));return i=e[t],n!=t&&(n<t?qGn(e,n,e,n+1,t-n):qGn(e,t+1,e,t,n-t),uQ(e,n,i),Pkn(this,e)),i},uZn.Vi=function(n){return uG(Lsn(this.a,4),129)[n]},uZn.gd=function(n){return g$n(this,n)},uZn.Xi=function(n,t){var e,i;return i=(e=lvn(this))[n],XN(e,n,gln(this,t)),Pkn(this,e),i},uZn.gc=function(){var n;return null==(n=uG(Lsn(this.a,4),129))?0:n.length},uZn.Pc=function(){var n,t,e;return e=null==(n=uG(Lsn(this.a,4),129))?0:n.length,t=Inn(xFt,Uit,424,e,0,1),e>0&&qGn(n,0,t,0,e),t},uZn.Qc=function(n){var t,e;return(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length)>0&&(n.length<e&&(n=Acn(Tbn(n).c,e)),qGn(t,0,n,0,e)),n.length>e&&uQ(n,e,null),n},zW(Pet,"ArrayDelegatingEList",2080),sDn(1051,40,$Zn,M9),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},uZn.Qb=function(){$Sn(this),this.a=uG(Lsn(this.b.a,4),129)},zW(Pet,"ArrayDelegatingEList/EIterator",1051),sDn(722,286,UZn,pV,GJ),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},uZn.$j=function(n){cTn(this,n),this.a=uG(Lsn(this.b.a,4),129)},uZn.Qb=function(){$Sn(this),this.a=uG(Lsn(this.b.a,4),129)},zW(Pet,"ArrayDelegatingEList/EListIterator",722),sDn(1052,355,$Zn,T9),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},zW(Pet,"ArrayDelegatingEList/NonResolvingEIterator",1052),sDn(723,398,UZn,mV,qJ),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},zW(Pet,"ArrayDelegatingEList/NonResolvingEListIterator",723),sDn(615,301,v0n,pL),zW(Pet,"BasicEList/BasicIndexOutOfBoundsException",615),sDn(710,66,Qet,AA),uZn.bd=function(n,t){throw hv(new Kv)},uZn.Fc=function(n){throw hv(new Kv)},uZn.cd=function(n,t){throw hv(new Kv)},uZn.Gc=function(n){throw hv(new Kv)},uZn.$b=function(){throw hv(new Kv)},uZn._i=function(n){throw hv(new Kv)},uZn.Kc=function(){return this.Ii()},uZn.ed=function(){return this.Ji()},uZn.fd=function(n){return this.Ki(n)},uZn.Ti=function(n,t){throw hv(new Kv)},uZn.Ui=function(n,t){throw hv(new Kv)},uZn.gd=function(n){throw hv(new Kv)},uZn.Mc=function(n){throw hv(new Kv)},uZn.hd=function(n,t){throw hv(new Kv)},zW(Pet,"BasicEList/UnmodifiableEList",710),sDn(721,1,{3:1,20:1,16:1,15:1,61:1,597:1}),uZn.bd=function(n,t){Y$(this,n,uG(t,44))},uZn.Fc=function(n){return YR(this,uG(n,44))},uZn.Jc=function(n){z8(this,n)},uZn.Xb=function(n){return uG(zrn(this.c,n),136)},uZn.Ti=function(n,t){return uG(this.c.Ti(n,t),44)},uZn.Ui=function(n,t){Z$(this,n,uG(t,44))},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.gd=function(n){return uG(this.c.gd(n),44)},uZn.hd=function(n,t){return EW(this,n,uG(t,44))},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.cd=function(n,t){return this.c.cd(n,t)},uZn.Gc=function(n){return this.c.Gc(n)},uZn.$b=function(){this.c.$b()},uZn.Hc=function(n){return this.c.Hc(n)},uZn.Ic=function(n){return yhn(this.c,n)},uZn._j=function(){var n,t;if(null==this.d){for(this.d=Inn(IFt,qit,66,2*this.f+1,0,1),t=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)bMn(this,uG(n.Yj(),136));this.e=t}},uZn.Fb=function(n){return H_(this,n)},uZn.Hb=function(){return Bhn(this.c)},uZn.dd=function(n){return this.c.dd(n)},uZn.ak=function(){this.c=new Im(this)},uZn.dc=function(){return 0==this.f},uZn.Kc=function(){return this.c.Kc()},uZn.ed=function(){return this.c.ed()},uZn.fd=function(n){return this.c.fd(n)},uZn.bk=function(){return Tnn(this)},uZn.ck=function(n,t,e){return new xU(n,t,e)},uZn.dk=function(){return new ws},uZn.Mc=function(n){return uan(this,n)},uZn.gc=function(){return this.f},uZn.kd=function(n,t){return new C2(this.c,n,t)},uZn.Pc=function(){return this.c.Pc()},uZn.Qc=function(n){return this.c.Qc(n)},uZn.Ib=function(){return Tpn(this.c)},uZn.e=0,uZn.f=0,zW(Pet,"BasicEMap",721),sDn(1046,66,Qet,Im),uZn.Mi=function(n,t){Qv(this,uG(t,136))},uZn.Pi=function(n,t,e){var i;++(i=this,uG(t,136),i).a.e},uZn.Qi=function(n,t){Jv(this,uG(t,136))},uZn.Ri=function(n,t,e){fR(this,uG(t,136),uG(e,136))},uZn.Oi=function(n,t){Osn(this.a)},zW(Pet,"BasicEMap/1",1046),sDn(1047,66,Qet,ws),uZn.aj=function(n){return Inn(FFt,Xit,621,n,0,1)},zW(Pet,"BasicEMap/2",1047),sDn(1048,KZn,FZn,Om),uZn.$b=function(){this.a.c.$b()},uZn.Hc=function(n){return ymn(this.a,n)},uZn.Kc=function(){return 0==this.a.f?(EK(),KFt.a):new aj(this.a)},uZn.Mc=function(n){var t;return t=this.a.f,Svn(this.a,n),this.a.f!=t},uZn.gc=function(){return this.a.f},zW(Pet,"BasicEMap/3",1048),sDn(1049,31,RZn,Am),uZn.$b=function(){this.a.c.$b()},uZn.Hc=function(n){return q_n(this.a,n)},uZn.Kc=function(){return 0==this.a.f?(EK(),KFt.a):new oj(this.a)},uZn.gc=function(){return this.a.f},zW(Pet,"BasicEMap/4",1049),sDn(1050,KZn,FZn,Lm),uZn.$b=function(){this.a.c.$b()},uZn.Hc=function(n){var t,e,i,r,c,a,o,u,s;if(this.a.f>0&&F$(n,44)&&(this.a._j(),r=null==(o=(u=uG(n,44)).ld())?0:Hon(o),c=iF(this.a,r),t=this.a.d[c]))for(e=uG(t.g,379),s=t.i,a=0;a<s;++a)if((i=e[a]).Bi()==r&&i.Fb(u))return!0;return!1},uZn.Kc=function(){return 0==this.a.f?(EK(),KFt.a):new HY(this.a)},uZn.Mc=function(n){return MDn(this,n)},uZn.gc=function(){return this.a.f},zW(Pet,"BasicEMap/5",1050),sDn(622,1,$Zn,HY),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return-1!=this.b},uZn.Pb=function(){var n;if(this.f.e!=this.c)throw hv(new Fv);if(-1==this.b)throw hv(new Bv);return this.d=this.a,this.e=this.b,XEn(this),n=uG(this.f.d[this.d].g[this.e],136),this.ek(n)},uZn.Qb=function(){if(this.f.e!=this.c)throw hv(new Fv);if(-1==this.e)throw hv(new xv);this.f.c.Mc(zrn(this.f.d[this.d],this.e)),this.c=this.f.e,this.e=-1,this.a==this.d&&-1!=this.b&&--this.b},uZn.ek=function(n){return n},uZn.a=0,uZn.b=-1,uZn.c=0,uZn.d=0,uZn.e=0,zW(Pet,"BasicEMap/BasicEMapIterator",622),sDn(1044,622,$Zn,aj),uZn.ek=function(n){return n.ld()},zW(Pet,"BasicEMap/BasicEMapKeyIterator",1044),sDn(1045,622,$Zn,oj),uZn.ek=function(n){return n.md()},zW(Pet,"BasicEMap/BasicEMapValueIterator",1045),sDn(1043,1,xZn,Nm),uZn.wc=function(n){Yun(this,n)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.$b=function(){this.a.c.$b()},uZn._b=function(n){return dA(this,n)},uZn.uc=function(n){return q_n(this.a,n)},uZn.vc=function(){return Enn(this.a)},uZn.Fb=function(n){return H_(this.a,n)},uZn.xc=function(n){return Lmn(this.a,n)},uZn.Hb=function(){return Bhn(this.a.c)},uZn.dc=function(){return 0==this.a.f},uZn.ec=function(){return Mnn(this.a)},uZn.zc=function(n,t){return rSn(this.a,n,t)},uZn.Bc=function(n){return Svn(this.a,n)},uZn.gc=function(){return this.a.f},uZn.Ib=function(){return Tpn(this.a.c)},uZn.Cc=function(){return jnn(this.a)},zW(Pet,"BasicEMap/DelegatingMap",1043),sDn(621,1,{44:1,136:1,621:1},xU),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),(null!=this.b?udn(this.b,t.ld()):xA(this.b)===xA(t.ld()))&&(null!=this.c?udn(this.c,t.md()):xA(this.c)===xA(t.md())))},uZn.Bi=function(){return this.a},uZn.ld=function(){return this.b},uZn.md=function(){return this.c},uZn.Hb=function(){return this.a^(null==this.c?0:Hon(this.c))},uZn.Ci=function(n){this.a=n},uZn.Di=function(n){throw hv(new Ov)},uZn.nd=function(n){var t;return t=this.c,this.c=n,t},uZn.Ib=function(){return this.b+"->"+this.c},uZn.a=0;var KFt,FFt=zW(Pet,"BasicEMap/EntryImpl",621);sDn(546,1,{},ds),zW(Pet,"BasicEMap/View",546),sDn(783,1,{}),uZn.Fb=function(n){return PDn((hZ(),zot),n)},uZn.Hb=function(){return Zfn((hZ(),zot))},uZn.Ib=function(){return vIn((hZ(),zot))},zW(Pet,"ECollections/BasicEmptyUnmodifiableEList",783),sDn(1348,1,UZn,gs),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){throw hv(new Kv)},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},uZn.Pb=function(){throw hv(new Bv)},uZn.Tb=function(){return 0},uZn.Ub=function(){throw hv(new Bv)},uZn.Vb=function(){return-1},uZn.Qb=function(){throw hv(new Kv)},uZn.Wb=function(n){throw hv(new Kv)},zW(Pet,"ECollections/BasicEmptyUnmodifiableEList/1",1348),sDn(1346,783,{20:1,16:1,15:1,61:1},Gk),uZn.bd=function(n,t){iE()},uZn.Fc=function(n){return rE()},uZn.cd=function(n,t){return cE()},uZn.Gc=function(n){return aE()},uZn.$b=function(){oE()},uZn.Hc=function(n){return!1},uZn.Ic=function(n){return!1},uZn.Jc=function(n){z8(this,n)},uZn.Xb=function(n){return oL((hZ(),n)),null},uZn.dd=function(n){return-1},uZn.dc=function(){return!0},uZn.Kc=function(){return this.a},uZn.ed=function(){return this.a},uZn.fd=function(n){return this.a},uZn.Ti=function(n,t){return uE()},uZn.Ui=function(n,t){sE()},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.gd=function(n){return hE()},uZn.Mc=function(n){return fE()},uZn.hd=function(n,t){return lE()},uZn.gc=function(){return 0},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.kd=function(n,t){return hZ(),new C2(zot,n,t)},uZn.Pc=function(){return Sz((hZ(),zot))},uZn.Qc=function(n){return hZ(),oTn(zot,n)},zW(Pet,"ECollections/EmptyUnmodifiableEList",1346),sDn(1347,783,{20:1,16:1,15:1,61:1,597:1},qk),uZn.bd=function(n,t){iE()},uZn.Fc=function(n){return rE()},uZn.cd=function(n,t){return cE()},uZn.Gc=function(n){return aE()},uZn.$b=function(){oE()},uZn.Hc=function(n){return!1},uZn.Ic=function(n){return!1},uZn.Jc=function(n){z8(this,n)},uZn.Xb=function(n){return oL((hZ(),n)),null},uZn.dd=function(n){return-1},uZn.dc=function(){return!0},uZn.Kc=function(){return this.a},uZn.ed=function(){return this.a},uZn.fd=function(n){return this.a},uZn.Ti=function(n,t){return uE()},uZn.Ui=function(n,t){sE()},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.gd=function(n){return hE()},uZn.Mc=function(n){return fE()},uZn.hd=function(n,t){return lE()},uZn.gc=function(){return 0},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.kd=function(n,t){return hZ(),new C2(zot,n,t)},uZn.Pc=function(){return Sz((hZ(),zot))},uZn.Qc=function(n){return hZ(),oTn(zot,n)},uZn.bk=function(){return hZ(),hZ(),Vot},zW(Pet,"ECollections/EmptyUnmodifiableEMap",1347);var _Ft,BFt=Iq(Pet,"Enumerator");sDn(288,1,{288:1},Z_n),uZn.Fb=function(n){var t;return this===n||!!F$(n,288)&&(t=uG(n,288),this.f==t.f&&yX(this.i,t.i)&&kX(this.a,0!=(256&this.f)?0!=(256&t.f)?t.a:null:0!=(256&t.f)?null:t.a)&&kX(this.d,t.d)&&kX(this.g,t.g)&&kX(this.e,t.e)&&Ykn(this,t))},uZn.Hb=function(){return this.f},uZn.Ib=function(){return xUn(this)},uZn.f=0;var HFt,UFt,GFt,qFt=0,XFt=0,zFt=0,VFt=0,WFt=0,QFt=0,JFt=0,YFt=0,ZFt=0,n_t=0,t_t=0,e_t=0,i_t=0;zW(Pet,"URI",288),sDn(1121,45,B0n,Xk),uZn.zc=function(n,t){return uG(r2(this,mK(n),uG(t,288)),288)},zW(Pet,"URI/URICache",1121),sDn(505,66,Qet,us,$X),uZn.Si=function(){return!0},zW(Pet,"UniqueEList",505),sDn(590,63,S1n,Pen),zW(Pet,"WrappedException",590);var r_t,c_t=Iq(Itt,Wit),a_t=Iq(Itt,Qit),o_t=Iq(Itt,Jit),u_t=Iq(Itt,Yit),s_t=Iq(Itt,Zit),h_t=Iq(Itt,"EClass"),f_t=Iq(Itt,"EDataType");sDn(1233,45,B0n,zk),uZn.xc=function(n){return RA(n)?U1(this,n):DA(FX(this.f,n))},zW(Itt,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1233);var l_t,b_t,w_t=Iq(Itt,"EEnum"),d_t=Iq(Itt,nrt),g_t=Iq(Itt,trt),p_t=Iq(Itt,ert),m_t=Iq(Itt,irt),v_t=Iq(Itt,rrt);sDn(1042,1,{},os),uZn.Ib=function(){return"NIL"},zW(Itt,"EStructuralFeature/Internal/DynamicValueHolder/1",1042),sDn(1041,45,B0n,Vk),uZn.xc=function(n){return RA(n)?U1(this,n):DA(FX(this.f,n))},zW(Itt,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1041);var k_t,y_t,M_t,T_t,j_t,E_t,S_t,P_t,C_t,I_t,O_t,A_t,L_t,N_t,$_t,D_t,x_t,R_t,K_t,F_t,__t,B_t,H_t,U_t,G_t,q_t,X_t,z_t,V_t,W_t,Q_t,J_t=Iq(Itt,crt),Y_t=Iq(Itt,"EValidator/PatternMatcher"),Z_t=Iq(art,"FeatureMap/Entry");sDn(545,1,{76:1},TA),uZn.Lk=function(){return this.a},uZn.md=function(){return this.b},zW(Ytt,"BasicEObjectImpl/1",545),sDn(1040,1,ort,jA),uZn.Fk=function(n){return U9(this.a,this.b,n)},uZn.Qj=function(){return M0(this.a,this.b)},uZn.Wb=function(n){y0(this.a,this.b,n)},uZn.Gk=function(){VQ(this.a,this.b)},zW(Ytt,"BasicEObjectImpl/4",1040),sDn(2081,1,{114:1}),uZn.Mk=function(n){this.e=0==n?X_t:Inn(dat,EZn,1,n,5,1)},uZn.li=function(n){return this.e[n]},uZn.mi=function(n,t){this.e[n]=t},uZn.ni=function(n){this.e[n]=null},uZn.Nk=function(){return this.c},uZn.Ok=function(){throw hv(new Kv)},uZn.Pk=function(){throw hv(new Kv)},uZn.Qk=function(){return this.d},uZn.Rk=function(){return null!=this.e},uZn.Sk=function(n){this.c=n},uZn.Tk=function(n){throw hv(new Kv)},uZn.Uk=function(n){throw hv(new Kv)},uZn.Vk=function(n){this.d=n},zW(Ytt,"BasicEObjectImpl/EPropertiesHolderBaseImpl",2081),sDn(192,2081,{114:1},Ll),uZn.Ok=function(){return this.a},uZn.Pk=function(){return this.b},uZn.Tk=function(n){this.a=n},uZn.Uk=function(n){this.b=n},zW(Ytt,"BasicEObjectImpl/EPropertiesHolderImpl",192),sDn(516,99,Jtt,ps),uZn.uh=function(){return this.f},uZn.zh=function(){return this.k},uZn.Bh=function(n,t){this.g=n,this.i=t},uZn.Dh=function(){return 0==(2&this.j)?this.ii():this.$h().Nk()},uZn.Fh=function(){return this.i},uZn.wh=function(){return 0!=(1&this.j)},uZn.Ph=function(){return this.g},uZn.Vh=function(){return 0!=(4&this.j)},uZn.$h=function(){return!this.k&&(this.k=new Ll),this.k},uZn.ci=function(n){this.$h().Sk(n),n?this.j|=2:this.j&=-3},uZn.ei=function(n){this.$h().Uk(n),n?this.j|=4:this.j&=-5},uZn.ii=function(){return(tQ(),M_t).S},uZn.i=0,uZn.j=1,zW(Ytt,"EObjectImpl",516),sDn(798,516,{110:1,94:1,93:1,58:1,114:1,54:1,99:1},BG),uZn.li=function(n){return this.e[n]},uZn.mi=function(n,t){this.e[n]=t},uZn.ni=function(n){this.e[n]=null},uZn.Dh=function(){return this.d},uZn.Ih=function(n){return emn(this.d,n)},uZn.Kh=function(){return this.d},uZn.Oh=function(){return null!=this.e},uZn.$h=function(){return!this.k&&(this.k=new ms),this.k},uZn.ci=function(n){this.d=n},uZn.hi=function(){var n;return null==this.e&&(n=iQ(this.d),this.e=0==n?z_t:Inn(dat,EZn,1,n,5,1)),this},uZn.ji=function(){return 0},zW(Ytt,"DynamicEObjectImpl",798),sDn(1522,798,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1},Eq),uZn.Fb=function(n){return this===n},uZn.Hb=function(){return xx(this)},uZn.ci=function(n){this.d=n,this.b=EKn(n,"key"),this.c=EKn(n,uet)},uZn.Bi=function(){var n;return-1==this.a&&(n=zen(this,this.b),this.a=null==n?0:Hon(n)),this.a},uZn.ld=function(){return zen(this,this.b)},uZn.md=function(){return zen(this,this.c)},uZn.Ci=function(n){this.a=n},uZn.Di=function(n){y0(this,this.b,n)},uZn.nd=function(n){var t;return t=zen(this,this.c),y0(this,this.c,n),t},uZn.a=0,zW(Ytt,"DynamicEObjectImpl/BasicEMapEntry",1522),sDn(1523,1,{114:1},ms),uZn.Mk=function(n){throw hv(new Kv)},uZn.li=function(n){throw hv(new Kv)},uZn.mi=function(n,t){throw hv(new Kv)},uZn.ni=function(n){throw hv(new Kv)},uZn.Nk=function(){throw hv(new Kv)},uZn.Ok=function(){return this.a},uZn.Pk=function(){return this.b},uZn.Qk=function(){return this.c},uZn.Rk=function(){throw hv(new Kv)},uZn.Sk=function(n){throw hv(new Kv)},uZn.Tk=function(n){this.a=n},uZn.Uk=function(n){this.b=n},uZn.Vk=function(n){this.c=n},zW(Ytt,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1523),sDn(519,158,{110:1,94:1,93:1,598:1,155:1,58:1,114:1,54:1,99:1,519:1,158:1,119:1,120:1},vs),uZn.Ah=function(n){return Yjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.d;case 2:return e?(!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),this.b):(!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),Tnn(this.b));case 3:return F0(this);case 4:return!this.a&&(this.a=new MD(nFt,this,4)),this.a;case 5:return!this.c&&(this.c=new OD(nFt,this,5)),this.c}return $tn(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?Yjn(this,e):this.Cb.Th(this,-1-i,null,e)),gz(this,uG(n,155),e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),T_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),T_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 2:return!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),G_(this.b,n,e);case 3:return gz(this,null,e);case 4:return!this.a&&(this.a=new MD(nFt,this,4)),Nyn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),T_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),T_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.d;case 2:return!!this.b&&0!=this.b.f;case 3:return!!F0(this);case 4:return!!this.a&&0!=this.a.i;case 5:return!!this.c&&0!=this.c.i}return l5(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void xq(this,mK(t));case 2:return!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),void Jun(this.b,t);case 3:return void kKn(this,uG(t,155));case 4:return!this.a&&(this.a=new MD(nFt,this,4)),Czn(this.a),!this.a&&(this.a=new MD(nFt,this,4)),void CW(this.a,uG(t,16));case 5:return!this.c&&(this.c=new OD(nFt,this,5)),Czn(this.c),!this.c&&(this.c=new OD(nFt,this,5)),void CW(this.c,uG(t,16))}lpn(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n),t)},uZn.ii=function(){return YYn(),T_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void Yan(this,null);case 2:return!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),void this.b.c.$b();case 3:return void kKn(this,null);case 4:return!this.a&&(this.a=new MD(nFt,this,4)),void Czn(this.a);case 5:return!this.c&&(this.c=new OD(nFt,this,5)),void Czn(this.c)}sdn(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n))},uZn.Ib=function(){return fdn(this)},uZn.d=null,zW(Ytt,"EAnnotationImpl",519),sDn(141,721,urt,ltn),uZn.Gi=function(n,t){qN(this,n,uG(t,44))},uZn.Wk=function(n,t){return U_(this,uG(n,44),t)},uZn.$i=function(n){return uG(uG(this.c,71).$i(n),136)},uZn.Ii=function(){return uG(this.c,71).Ii()},uZn.Ji=function(){return uG(this.c,71).Ji()},uZn.Ki=function(n){return uG(this.c,71).Ki(n)},uZn.Xk=function(n,t){return G_(this,n,t)},uZn.Fk=function(n){return uG(this.c,79).Fk(n)},uZn.ak=function(){},uZn.Qj=function(){return uG(this.c,79).Qj()},uZn.ck=function(n,t,e){var i;return(i=uG(Hrn(this.b).wi().si(this.b),136)).Ci(n),i.Di(t),i.nd(e),i},uZn.dk=function(){return new Vm(this)},uZn.Wb=function(n){Jun(this,n)},uZn.Gk=function(){uG(this.c,79).Gk()},zW(art,"EcoreEMap",141),sDn(165,141,urt,XR),uZn._j=function(){var n,t,e,i,r;if(null==this.d){for(r=Inn(IFt,qit,66,2*this.f+1,0,1),e=this.c.Kc();e.e!=e.i.gc();)!(n=r[i=((t=uG(e.Yj(),136)).Bi()&vZn)%r.length])&&(n=r[i]=new Vm(this)),n.Fc(t);this.d=r}},zW(Ytt,"EAnnotationImpl/1",165),sDn(291,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,480:1,54:1,99:1,158:1,291:1,119:1,120:1}),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),0!=(256&this.Bb);case 3:return qx(),0!=(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),!!this.Jk();case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.Jk();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i)}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void this.ui(mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void this.Zk(uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj())}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),G_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void this.ui(null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void this.Zk(1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj())}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){bEn(this),this.Bb|=1},uZn.Hk=function(){return bEn(this)},uZn.Ik=function(){return this.t},uZn.Jk=function(){var n;return(n=this.t)>1||-1==n},uZn.Si=function(){return 0!=(512&this.Bb)},uZn.Yk=function(n,t){return Ywn(this,n,t)},uZn.Zk=function(n){Ccn(this,n)},uZn.Ib=function(){return L$n(this)},uZn.s=0,uZn.t=1,zW(Ytt,"ETypedElementImpl",291),sDn(461,291,{110:1,94:1,93:1,155:1,197:1,58:1,179:1,69:1,114:1,480:1,54:1,99:1,158:1,461:1,291:1,119:1,120:1,692:1}),uZn.Ah=function(n){return pjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),0!=(256&this.Bb);case 3:return qx(),0!=(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),!!this.Jk();case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return qx(),0!=(this.Bb&w1n);case 11:return qx(),0!=(this.Bb&frt);case 12:return qx(),0!=(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),0!=(this.Bb&hrt);case 16:return qx(),0!=(this.Bb&VZn);case 17:return K0(this)}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 17:return this.Cb&&(e=(i=this.Db>>16)>=0?pjn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,17,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().zk(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e);case 17:return DUn(this,null,17,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.Jk();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return 0==(this.Bb&w1n);case 11:return 0!=(this.Bb&frt);case 12:return 0!=(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return 0!=(this.Bb&hrt);case 16:return 0!=(this.Bb&VZn);case 17:return!!K0(this)}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void g2(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void this.Zk(uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 10:return void Wdn(this,oM(gK(t)));case 11:return void Ydn(this,oM(gK(t)));case 12:return void Qdn(this,oM(gK(t)));case 13:return void mA(this,mK(t));case 15:return void Jdn(this,oM(gK(t)));case 16:return void Cgn(this,oM(gK(t)))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),U_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),4),void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void this.Zk(1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 10:return void Wdn(this,!0);case 11:return void Ydn(this,!1);case 12:return void Qdn(this,!1);case 13:return this.i=null,void lon(this,null);case 15:return void Jdn(this,!1);case 16:return void Cgn(this,!1)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){BJ(Nen((gAn(),kBt),this)),bEn(this),this.Bb|=1},uZn.pk=function(){return this.f},uZn.ik=function(){return NRn(this)},uZn.qk=function(){return K0(this)},uZn.uk=function(){return null},uZn.$k=function(){return this.k},uZn.Lj=function(){return this.n},uZn.vk=function(){return qSn(this)},uZn.wk=function(){var n,t,e,i,r,c,a,o,u;return this.p||((null==(e=K0(this)).i&&eqn(e),e.i).length,(i=this.uk())&&iQ(K0(i)),n=(a=(r=bEn(this)).kk())?0!=(1&a.i)?a==ZHt?cot:a==YHt?dot:a==iUt?lot:a==eUt?fot:a==nUt?yot:a==rUt?Tot:a==tUt?uot:hot:a:null,t=NRn(this),o=r.ik(),Vgn(this),0!=(this.Bb&VZn)&&((c=cSn((gAn(),kBt),e))&&c!=this||(c=_3(Nen(kBt,this))))?this.p=new SA(this,c):this.Jk()?this.al()?i?0!=(this.Bb&hrt)?n?this.bl()?this.p=new CY(47,n,this,i):this.p=new CY(5,n,this,i):this.bl()?this.p=new r8(46,this,i):this.p=new r8(4,this,i):n?this.bl()?this.p=new CY(49,n,this,i):this.p=new CY(7,n,this,i):this.bl()?this.p=new r8(48,this,i):this.p=new r8(6,this,i):0!=(this.Bb&hrt)?n?n==Sat?this.p=new RU(50,gFt,this):this.bl()?this.p=new RU(43,n,this):this.p=new RU(1,n,this):this.bl()?this.p=new GZ(42,this):this.p=new GZ(0,this):n?n==Sat?this.p=new RU(41,gFt,this):this.bl()?this.p=new RU(45,n,this):this.p=new RU(3,n,this):this.bl()?this.p=new GZ(44,this):this.p=new GZ(2,this):F$(r,156)?n==Z_t?this.p=new GZ(40,this):0!=(512&this.Bb)?0!=(this.Bb&hrt)?this.p=n?new RU(9,n,this):new GZ(8,this):this.p=n?new RU(11,n,this):new GZ(10,this):0!=(this.Bb&hrt)?this.p=n?new RU(13,n,this):new GZ(12,this):this.p=n?new RU(15,n,this):new GZ(14,this):i?(u=i.t)>1||-1==u?this.bl()?0!=(this.Bb&hrt)?this.p=n?new CY(25,n,this,i):new r8(24,this,i):this.p=n?new CY(27,n,this,i):new r8(26,this,i):0!=(this.Bb&hrt)?this.p=n?new CY(29,n,this,i):new r8(28,this,i):this.p=n?new CY(31,n,this,i):new r8(30,this,i):this.bl()?0!=(this.Bb&hrt)?this.p=n?new CY(33,n,this,i):new r8(32,this,i):this.p=n?new CY(35,n,this,i):new r8(34,this,i):0!=(this.Bb&hrt)?this.p=n?new CY(37,n,this,i):new r8(36,this,i):this.p=n?new CY(39,n,this,i):new r8(38,this,i):this.bl()?0!=(this.Bb&hrt)?this.p=n?new RU(17,n,this):new GZ(16,this):this.p=n?new RU(19,n,this):new GZ(18,this):0!=(this.Bb&hrt)?this.p=n?new RU(21,n,this):new GZ(20,this):this.p=n?new RU(23,n,this):new GZ(22,this):this._k()?this.bl()?this.p=new KU(uG(r,29),this,i):this.p=new _1(uG(r,29),this,i):F$(r,156)?n==Z_t?this.p=new GZ(40,this):0!=(this.Bb&hrt)?this.p=n?new bz(t,o,this,(Pmn(),a==YHt?hBt:a==ZHt?cBt:a==nUt?fBt:a==iUt?sBt:a==eUt?uBt:a==rUt?bBt:a==tUt?aBt:a==JHt?oBt:lBt)):new AY(uG(r,156),t,o,this):this.p=n?new lz(t,o,this,(Pmn(),a==YHt?hBt:a==ZHt?cBt:a==nUt?fBt:a==iUt?sBt:a==eUt?uBt:a==rUt?bBt:a==tUt?aBt:a==JHt?oBt:lBt)):new OY(uG(r,156),t,o,this):this.al()?i?0!=(this.Bb&hrt)?this.bl()?this.p=new GU(uG(r,29),this,i):this.p=new UU(uG(r,29),this,i):this.bl()?this.p=new HU(uG(r,29),this,i):this.p=new FU(uG(r,29),this,i):0!=(this.Bb&hrt)?this.bl()?this.p=new cK(uG(r,29),this):this.p=new iK(uG(r,29),this):this.bl()?this.p=new eK(uG(r,29),this):this.p=new tK(uG(r,29),this):this.bl()?i?0!=(this.Bb&hrt)?this.p=new qU(uG(r,29),this,i):this.p=new _U(uG(r,29),this,i):0!=(this.Bb&hrt)?this.p=new aK(uG(r,29),this):this.p=new rK(uG(r,29),this):i?0!=(this.Bb&hrt)?this.p=new XU(uG(r,29),this,i):this.p=new BU(uG(r,29),this,i):0!=(this.Bb&hrt)?this.p=new oK(uG(r,29),this):this.p=new OX(uG(r,29),this)),this.p},uZn.rk=function(){return 0!=(this.Bb&w1n)},uZn._k=function(){return!1},uZn.al=function(){return!1},uZn.sk=function(){return 0!=(this.Bb&VZn)},uZn.xk=function(){return ein(this)},uZn.bl=function(){return!1},uZn.tk=function(){return 0!=(this.Bb&hrt)},uZn.cl=function(n){this.k=n},uZn.ui=function(n){g2(this,n)},uZn.Ib=function(){return MBn(this)},uZn.e=!1,uZn.n=0,zW(Ytt,"EStructuralFeatureImpl",461),sDn(331,461,{110:1,94:1,93:1,35:1,155:1,197:1,58:1,179:1,69:1,114:1,480:1,54:1,99:1,331:1,158:1,461:1,291:1,119:1,120:1,692:1},Wk),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),0!=(256&this.Bb);case 3:return qx(),0!=(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),!!SNn(this);case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return qx(),0!=(this.Bb&w1n);case 11:return qx(),0!=(this.Bb&frt);case 12:return qx(),0!=(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),0!=(this.Bb&hrt);case 16:return qx(),0!=(this.Bb&VZn);case 17:return K0(this);case 18:return qx(),0!=(this.Bb&Qtt);case 19:return t?khn(this):E7(this)}return $tn(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return SNn(this);case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return 0==(this.Bb&w1n);case 11:return 0!=(this.Bb&frt);case 12:return 0!=(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return 0!=(this.Bb&hrt);case 16:return 0!=(this.Bb&VZn);case 17:return!!K0(this);case 18:return 0!=(this.Bb&Qtt);case 19:return!!E7(this)}return l5(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void g2(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void fj(this,uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 10:return void Wdn(this,oM(gK(t)));case 11:return void Ydn(this,oM(gK(t)));case 12:return void Qdn(this,oM(gK(t)));case 13:return void mA(this,mK(t));case 15:return void Jdn(this,oM(gK(t)));case 16:return void Cgn(this,oM(gK(t)));case 18:return void Sgn(this,oM(gK(t)))}lpn(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n),t)},uZn.ii=function(){return YYn(),j_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),4),void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return this.b=0,void Ccn(this,1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 10:return void Wdn(this,!0);case 11:return void Ydn(this,!1);case 12:return void Qdn(this,!1);case 13:return this.i=null,void lon(this,null);case 15:return void Jdn(this,!1);case 16:return void Cgn(this,!1);case 18:return void Sgn(this,!1)}sdn(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n))},uZn.pi=function(){khn(this),BJ(Nen((gAn(),kBt),this)),bEn(this),this.Bb|=1},uZn.Jk=function(){return SNn(this)},uZn.Yk=function(n,t){return this.b=0,this.a=null,Ywn(this,n,t)},uZn.Zk=function(n){fj(this,n)},uZn.Ib=function(){var n;return 0!=(64&this.Db)?MBn(this):((n=new fx(MBn(this))).a+=" (iD: ",Lj(n,0!=(this.Bb&Qtt)),n.a+=")",n.a)},uZn.b=0,zW(Ytt,"EAttributeImpl",331),sDn(364,448,{110:1,94:1,93:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1}),uZn.dl=function(n){return n.Dh()==this},uZn.Ah=function(n){return VTn(this,n)},uZn.Bh=function(n,t){this.w=null,this.Db=t<<16|255&this.Db,this.Cb=n},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return _Tn(this);case 4:return this.ik();case 5:return this.F;case 6:return t?Hrn(this):D0(this);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),this.A}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?VTn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,6,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().zk(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 6:return DUn(this,null,6,e);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Nyn(this.A,n,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!_Tn(this);case 4:return null!=this.ik();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),S_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.hk=function(){var n;return-1==this.G&&(this.G=(n=Hrn(this))?Hyn(n.vi(),this):-1),this.G},uZn.ik=function(){return null},uZn.jk=function(){return Hrn(this)},uZn.el=function(){return this.v},uZn.kk=function(){return _Tn(this)},uZn.lk=function(){return null!=this.D?this.D:this.B},uZn.mk=function(){return this.F},uZn.fk=function(n){return LGn(this,n)},uZn.fl=function(n){this.v=n},uZn.gl=function(n){tun(this,n)},uZn.hl=function(n){this.C=n},uZn.ui=function(n){d2(this,n)},uZn.Ib=function(){return pmn(this)},uZn.C=null,uZn.D=null,uZn.G=-1,zW(Ytt,"EClassifierImpl",364),sDn(90,364,{110:1,94:1,93:1,29:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,90:1,364:1,158:1,481:1,119:1,120:1,691:1},Kl),uZn.dl=function(n){return VF(this,n.Dh())},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return _Tn(this);case 4:return null;case 5:return this.F;case 6:return t?Hrn(this):D0(this);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),this.A;case 8:return qx(),0!=(256&this.Bb);case 9:return qx(),0!=(512&this.Bb);case 10:return n1(this);case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),this.q;case 12:return hXn(this);case 13:return Zqn(this);case 14:return Zqn(this),this.r;case 15:return hXn(this),this.k;case 16:return RAn(this);case 17:return $qn(this);case 18:return eqn(this);case 19:return mRn(this);case 20:return hXn(this),this.o;case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),this.s;case 22:return z5(this);case 23:return x_n(this)}return $tn(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?VTn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,6,e);case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),Nmn(this.q,n,e);case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),Nmn(this.s,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),E_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),E_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 6:return DUn(this,null,6,e);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Nyn(this.A,n,e);case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),Nyn(this.q,n,e);case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),Nyn(this.s,n,e);case 22:return Nyn(z5(this),n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),E_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),E_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!_Tn(this);case 4:return!1;case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0!=(256&this.Bb);case 9:return 0!=(512&this.Bb);case 10:return!(!this.u||0==z5(this.u.a).i||this.n&&yMn(this.n));case 11:return!!this.q&&0!=this.q.i;case 12:return 0!=hXn(this).i;case 13:return 0!=Zqn(this).i;case 14:return Zqn(this),0!=this.r.i;case 15:return hXn(this),0!=this.k.i;case 16:return 0!=RAn(this).i;case 17:return 0!=$qn(this).i;case 18:return 0!=eqn(this).i;case 19:return 0!=mRn(this).i;case 20:return hXn(this),!!this.o;case 21:return!!this.s&&0!=this.s.i;case 22:return!!this.n&&yMn(this.n);case 23:return 0!=x_n(this).i}return l5(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n))},uZn.Zh=function(n){return(null==this.i||this.q&&0!=this.q.i?null:EKn(this,n))||VQn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16));case 8:return void gdn(this,oM(gK(t)));case 9:return void vdn(this,oM(gK(t)));case 10:return _zn(n1(this)),void CW(n1(this),uG(t,16));case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),Czn(this.q),!this.q&&(this.q=new fV(p_t,this,11,10)),void CW(this.q,uG(t,16));case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),Czn(this.s),!this.s&&(this.s=new fV(o_t,this,21,17)),void CW(this.s,uG(t,16));case 22:return Czn(z5(this)),void CW(z5(this),uG(t,16))}lpn(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n),t)},uZn.ii=function(){return YYn(),E_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A);case 8:return void gdn(this,!1);case 9:return void vdn(this,!1);case 10:return void(this.u&&_zn(this.u));case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),void Czn(this.q);case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),void Czn(this.s);case 22:return void(this.n&&Czn(this.n))}sdn(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n))},uZn.pi=function(){var n,t;if(hXn(this),Zqn(this),RAn(this),$qn(this),eqn(this),mRn(this),x_n(this),V9(iG(y9(this))),this.s)for(n=0,t=this.s.i;n<t;++n)lR(zrn(this.s,n));if(this.q)for(n=0,t=this.q.i;n<t;++n)lR(zrn(this.q,n));tdn((gAn(),kBt),this).xe(),this.Bb|=1},uZn.Ib=function(){return nPn(this)},uZn.k=null,uZn.r=null,zW(Ytt,"EClassImpl",90),sDn(2092,2091,Mrt),uZn.Ei=function(n,t){return BGn(this,n,t)},uZn.Fi=function(n){return BGn(this,this.i,n)},uZn.Gi=function(n,t){P$n(this,n,t)},uZn.Hi=function(n){V$n(this,n)},uZn.Wk=function(n,t){return Nmn(this,n,t)},uZn.$i=function(n){return Otn(this,n)},uZn.Xk=function(n,t){return Nyn(this,n,t)},uZn.Xi=function(n,t){return Pqn(this,n,t)},uZn.Ii=function(){return new nR(this)},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},zW(art,"NotifyingInternalEListImpl",2092),sDn(632,2092,Trt),uZn.Hc=function(n){return Lzn(this,n)},uZn.Ij=function(n,t,e,i,r){return i2(this,n,t,e,i,r)},uZn.Jj=function(n){Yv(this,n)},uZn.Fk=function(n){return this},uZn.Lk=function(){return ern(this.e.Dh(),this.Lj())},uZn.Kj=function(){return this.Lk()},uZn.Lj=function(){return emn(this.e.Dh(),this.Lk())},uZn.il=function(){return uG(this.Lk().Hk(),29).kk()},uZn.jl=function(){return lMn(uG(this.Lk(),19)).n},uZn.jj=function(){return this.e},uZn.kl=function(){return!0},uZn.ll=function(){return!1},uZn.ml=function(){return!1},uZn.nl=function(){return!1},uZn.dd=function(n){return Hyn(this,n)},uZn.Nj=function(n,t){var e;return e=uG(n,54),this.ml()?this.kl()?e.Rh(this.e,this.jl(),this.il(),t):e.Rh(this.e,emn(e.Dh(),lMn(uG(this.Lk(),19))),null,t):e.Rh(this.e,-1-this.Lj(),null,t)},uZn.Oj=function(n,t){var e;return e=uG(n,54),this.ml()?this.kl()?e.Th(this.e,this.jl(),this.il(),t):e.Th(this.e,emn(e.Dh(),lMn(uG(this.Lk(),19))),null,t):e.Th(this.e,-1-this.Lj(),null,t)},uZn.al=function(){return!1},uZn.ol=function(){return!0},uZn.fk=function(n){return v5(this.d,n)},uZn.Pj=function(){return uN(this.e)},uZn.Qj=function(){return 0!=this.i},uZn.aj=function(n){return Acn(this.d,n)},uZn.Wi=function(n,t){return this.ol()&&this.nl()?R$n(this,n,uG(t,58)):t},uZn.pl=function(n){return n.Vh()?mwn(this.e,uG(n,54)):n},uZn.Wb=function(n){J$(this,n)},uZn.Pc=function(){return Jtn(this)},uZn.Qc=function(n){var t;if(this.nl())for(t=this.i-1;t>=0;--t)zrn(this,t);return gmn(this,n)},uZn.Gk=function(){Czn(this)},uZn.Zi=function(n,t){return Dcn(this,n,t)},zW(art,"EcoreEList",632),sDn(504,632,Trt,FG),uZn.Li=function(){return!1},uZn.Lj=function(){return this.c},uZn.Mj=function(){return!1},uZn.ol=function(){return!0},uZn.Si=function(){return!0},uZn.Wi=function(n,t){return t},uZn.Yi=function(){return!1},uZn.c=0,zW(art,"EObjectEList",504),sDn(83,504,Trt,MD),uZn.Mj=function(){return!0},uZn.ml=function(){return!1},uZn.al=function(){return!0},zW(art,"EObjectContainmentEList",83),sDn(555,83,Trt,TD),uZn.Ni=function(){this.b=!0},uZn.Qj=function(){return this.b},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.b,this.b=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.b=!1},uZn.b=!1,zW(art,"EObjectContainmentEList/Unsettable",555),sDn(1161,555,Trt,hz),uZn.Ti=function(n,t){var e,i;return e=uG(zdn(this,n,t),89),uN(this.e)&&Yv(this,new wtn(this.a,7,(YYn(),P_t),xwn(t),F$(i=e.c,90)?uG(i,29):x_t,n)),e},uZn.Uj=function(n,t){return Dmn(this,uG(n,89),t)},uZn.Vj=function(n,t){return $mn(this,uG(n,89),t)},uZn.Wj=function(n,t,e){return TSn(this,uG(n,89),uG(t,89),e)},uZn.Ij=function(n,t,e,i,r){switch(n){case 3:return i2(this,n,t,e,i,this.i>1);case 5:return i2(this,n,t,e,i,this.i-uG(e,15).gc()>0);default:return new Ken(this.e,n,this.c,t,e,i,!0)}},uZn.Tj=function(){return!0},uZn.Qj=function(){return yMn(this)},uZn.Gk=function(){Czn(this)},zW(Ytt,"EClassImpl/1",1161),sDn(1175,1174,Fit),uZn.dj=function(n){var t,e,i,r,c,a,o;if(8!=(e=n.gj())){if(0==(i=xkn(n)))switch(e){case 1:case 9:null!=(o=n.kj())&&(!(t=y9(uG(o,481))).c&&(t.c=new Ks),rin(t.c,n.jj())),null!=(a=n.ij())&&0==(1&(r=uG(a,481)).Bb)&&(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29)));break;case 3:null!=(a=n.ij())&&0==(1&(r=uG(a,481)).Bb)&&(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29)));break;case 5:if(null!=(a=n.ij()))for(c=uG(a,16).Kc();c.Ob();)0==(1&(r=uG(c.Pb(),481)).Bb)&&(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29)));break;case 4:null!=(o=n.kj())&&0==(1&(r=uG(o,481)).Bb)&&(!(t=y9(r)).c&&(t.c=new Ks),rin(t.c,n.jj()));break;case 6:if(null!=(o=n.kj()))for(c=uG(o,16).Kc();c.Ob();)0==(1&(r=uG(c.Pb(),481)).Bb)&&(!(t=y9(r)).c&&(t.c=new Ks),rin(t.c,n.jj()))}this.ql(i)}},uZn.ql=function(n){bBn(this,n)},uZn.b=63,zW(Ytt,"ESuperAdapter",1175),sDn(1176,1175,Fit,$m),uZn.ql=function(n){yLn(this,n)},zW(Ytt,"EClassImpl/10",1176),sDn(1165,710,Trt),uZn.Ei=function(n,t){return PCn(this,n,t)},uZn.Fi=function(n){return QMn(this,n)},uZn.Gi=function(n,t){edn(this,n,t)},uZn.Hi=function(n){z9(this,n)},uZn.$i=function(n){return Otn(this,n)},uZn.Xi=function(n,t){return iin(this,n,t)},uZn.Wk=function(n,t){throw hv(new Kv)},uZn.Ii=function(){return new nR(this)},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},uZn.Xk=function(n,t){throw hv(new Kv)},uZn.Fk=function(n){return this},uZn.Qj=function(){return 0!=this.i},uZn.Wb=function(n){throw hv(new Kv)},uZn.Gk=function(){throw hv(new Kv)},zW(art,"EcoreEList/UnmodifiableEList",1165),sDn(328,1165,Trt,vL),uZn.Yi=function(){return!1},zW(art,"EcoreEList/UnmodifiableEList/FastCompare",328),sDn(1168,328,Trt,Afn),uZn.dd=function(n){var t,e;if(F$(n,179)&&-1!=(t=uG(n,179).Lj()))for(e=this.i;t<e;++t)if(xA(this.g[t])===xA(n))return t;return-1},zW(Ytt,"EClassImpl/1EAllStructuralFeaturesList",1168),sDn(1162,505,Qet,ks),uZn.aj=function(n){return Inn(g_t,Prt,89,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/1EGenericSuperTypeEList",1162),sDn(633,505,Qet,ys),uZn.aj=function(n){return Inn(o_t,krt,179,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/1EStructuralFeatureUniqueEList",633),sDn(755,505,Qet,Ms),uZn.aj=function(n){return Inn(v_t,krt,19,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/1ReferenceList",755),sDn(1163,505,Qet,Dm),uZn.Mi=function(n,t){tV(this,uG(t,35))},uZn.aj=function(n){return Inn(u_t,krt,35,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/2",1163),sDn(1164,505,Qet,Ts),uZn.aj=function(n){return Inn(u_t,krt,35,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/3",1164),sDn(1166,328,Trt,YG),uZn.Fc=function(n){return J5(this,uG(n,35))},uZn.Hi=function(n){PS(this,uG(n,35))},zW(Ytt,"EClassImpl/4",1166),sDn(1167,328,Trt,JG),uZn.Fc=function(n){return Y5(this,uG(n,19))},uZn.Hi=function(n){CS(this,uG(n,19))},zW(Ytt,"EClassImpl/5",1167),sDn(1169,505,Qet,js),uZn.aj=function(n){return Inn(p_t,yrt,62,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/6",1169),sDn(1170,505,Qet,Es),uZn.aj=function(n){return Inn(v_t,krt,19,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/7",1170),sDn(2095,2094,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,71:1}),uZn.Ei=function(n,t){return dGn(this,n,t)},uZn.Fi=function(n){return dGn(this,this.Ej(),n)},uZn.Gi=function(n,t){cDn(this,n,t)},uZn.Hi=function(n){S$n(this,n)},uZn.Wk=function(n,t){return JMn(this,n,t)},uZn.Xk=function(n,t){return Lyn(this,n,t)},uZn.Xi=function(n,t){return gGn(this,n,t)},uZn.$i=function(n){return this.xj(n)},uZn.Ii=function(){return new nR(this)},uZn.pj=function(){return this.sj()},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},zW(art,"DelegatingNotifyingInternalEListImpl",2095),sDn(756,2095,Crt),uZn.Li=function(){var n;return F$(n=ern(e1(this.b),this.Lj()).Hk(),156)&&!F$(n,468)&&0==(1&n.kk().i)},uZn.Hc=function(n){var t,e,i,r,c,a,o;if(this.ol()){if((o=this.Ej())>4){if(!this.fk(n))return!1;if(this.al()){if(a=(t=(e=uG(n,54)).Eh())==this.b&&(this.ml()?e.yh(e.Fh(),uG(ern(e1(this.b),this.Lj()).Hk(),29).kk())==lMn(uG(ern(e1(this.b),this.Lj()),19)).n:-1-e.Fh()==this.Lj()),this.nl()&&!a&&!t&&e.Jh())for(i=0;i<o;++i)if(xA(CV(this,this.xj(i)))===xA(n))return!0;return a}if(this.ml()&&!this.ll()){if(xA(r=uG(n,58).Mh(lMn(uG(ern(e1(this.b),this.Lj()),19))))===xA(this.b))return!0;if(null==r||!uG(r,58).Vh())return!1}}if(c=this.uj(n),this.nl()&&!c)for(i=0;i<o;++i)if(xA(e=CV(this,this.xj(i)))===xA(n))return!0;return c}return this.uj(n)},uZn.Ij=function(n,t,e,i,r){return new Ken(this.b,n,this.Lj(),t,e,i,r)},uZn.Jj=function(n){Msn(this.b,n)},uZn.Fk=function(n){return this},uZn.Kj=function(){return ern(e1(this.b),this.Lj())},uZn.Lj=function(){return emn(e1(this.b),ern(e1(this.b),this.Lj()))},uZn.jj=function(){return this.b},uZn.kl=function(){return!!ern(e1(this.b),this.Lj()).Hk().kk()},uZn.Mj=function(){var n;return!(!F$(n=ern(e1(this.b),this.Lj()),102)||0==(uG(n,19).Bb&Qtt)&&!lMn(uG(n,19)))},uZn.ll=function(){var n,t,e;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&!!(t=lMn(uG(n,19)))&&((e=t.t)>1||-1==e)},uZn.ml=function(){var n;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&!!lMn(uG(n,19))},uZn.nl=function(){var n;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&0!=(uG(n,19).Bb&P0n)},uZn.dd=function(n){var t,e,i;if((e=this.zj(n))>=0)return e;if(this.ol())for(t=0,i=this.Ej();t<i;++t)if(xA(CV(this,this.xj(t)))===xA(n))return t;return-1},uZn.Nj=function(n,t){var e;return e=uG(n,54),this.ml()?this.kl()?e.Rh(this.b,lMn(uG(ern(e1(this.b),this.Lj()),19)).n,uG(ern(e1(this.b),this.Lj()).Hk(),29).kk(),t):e.Rh(this.b,emn(e.Dh(),lMn(uG(ern(e1(this.b),this.Lj()),19))),null,t):e.Rh(this.b,-1-this.Lj(),null,t)},uZn.Oj=function(n,t){var e;return e=uG(n,54),this.ml()?this.kl()?e.Th(this.b,lMn(uG(ern(e1(this.b),this.Lj()),19)).n,uG(ern(e1(this.b),this.Lj()).Hk(),29).kk(),t):e.Th(this.b,emn(e.Dh(),lMn(uG(ern(e1(this.b),this.Lj()),19))),null,t):e.Th(this.b,-1-this.Lj(),null,t)},uZn.al=function(){var n;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&0!=(uG(n,19).Bb&Qtt)},uZn.ol=function(){return F$(ern(e1(this.b),this.Lj()).Hk(),90)},uZn.fk=function(n){return ern(e1(this.b),this.Lj()).Hk().fk(n)},uZn.Pj=function(){return uN(this.b)},uZn.Qj=function(){return!this.Aj()},uZn.Si=function(){return ern(e1(this.b),this.Lj()).Si()},uZn.Wi=function(n,t){return yVn(this,n,t)},uZn.Wb=function(n){_zn(this),CW(this,uG(n,15))},uZn.Pc=function(){var n;if(this.nl())for(n=this.Ej()-1;n>=0;--n)yVn(this,n,this.xj(n));return this.Fj()},uZn.Qc=function(n){var t;if(this.nl())for(t=this.Ej()-1;t>=0;--t)yVn(this,t,this.xj(t));return this.Gj(n)},uZn.Gk=function(){_zn(this)},uZn.Zi=function(n,t){return Atn(this,n,t)},zW(art,"DelegatingEcoreEList",756),sDn(1171,756,Crt,aF),uZn.qj=function(n,t){zR(this,n,uG(t,29))},uZn.rj=function(n){BN(this,uG(n,29))},uZn.xj=function(n){var t;return F$(t=uG(zrn(z5(this.a),n),89).c,90)?uG(t,29):(YYn(),x_t)},uZn.Cj=function(n){var t;return F$(t=uG(e_n(z5(this.a),n),89).c,90)?uG(t,29):(YYn(),x_t)},uZn.Dj=function(n,t){return YMn(this,n,uG(t,29))},uZn.Li=function(){return!1},uZn.Ij=function(n,t,e,i,r){return null},uZn.sj=function(){return new Rm(this)},uZn.tj=function(){Czn(z5(this.a))},uZn.uj=function(n){return Mdn(this,n)},uZn.vj=function(n){var t;for(t=n.Kc();t.Ob();)if(!Mdn(this,t.Pb()))return!1;return!0},uZn.wj=function(n){var t,e,i;if(F$(n,15)&&(i=uG(n,15)).gc()==z5(this.a).i){for(t=i.Kc(),e=new DD(this);t.Ob();)if(xA(t.Pb())!==xA(Zkn(e)))return!1;return!0}return!1},uZn.yj=function(){var n,t,e,i;for(t=1,n=new DD(z5(this.a));n.e!=n.i.gc();)t=31*t+((e=F$(i=uG(Zkn(n),89).c,90)?uG(i,29):(YYn(),x_t))?xx(e):0);return t},uZn.zj=function(n){var t,e,i,r;for(i=0,e=new DD(z5(this.a));e.e!=e.i.gc();){if(t=uG(Zkn(e),89),xA(n)===xA(F$(r=t.c,90)?uG(r,29):(YYn(),x_t)))return i;++i}return-1},uZn.Aj=function(){return 0==z5(this.a).i},uZn.Bj=function(){return null},uZn.Ej=function(){return z5(this.a).i},uZn.Fj=function(){var n,t,e,i,r,c;for(c=z5(this.a).i,r=Inn(dat,EZn,1,c,5,1),e=0,t=new DD(z5(this.a));t.e!=t.i.gc();)n=uG(Zkn(t),89),r[e++]=F$(i=n.c,90)?uG(i,29):(YYn(),x_t);return r},uZn.Gj=function(n){var t,e,i,r;for(r=z5(this.a).i,n.length<r&&(n=Acn(Tbn(n).c,r)),n.length>r&&uQ(n,r,null),e=0,t=new DD(z5(this.a));t.e!=t.i.gc();)uQ(n,e++,F$(i=uG(Zkn(t),89).c,90)?uG(i,29):(YYn(),x_t));return n},uZn.Hj=function(){var n,t,e,i,r;for((r=new zM).a+="[",n=z5(this.a),t=0,i=z5(this.a).i;t<i;)VA(r,ox(F$(e=uG(zrn(n,t),89).c,90)?uG(e,29):(YYn(),x_t))),++t<i&&(r.a+=TZn);return r.a+="]",r.a},uZn.Jj=function(n){},uZn.Lj=function(){return 10},uZn.kl=function(){return!0},uZn.Mj=function(){return!1},uZn.ll=function(){return!1},uZn.ml=function(){return!1},uZn.nl=function(){return!0},uZn.al=function(){return!1},uZn.ol=function(){return!0},uZn.fk=function(n){return F$(n,90)},uZn.Qj=function(){return M4(this.a)},uZn.Si=function(){return!0},uZn.Yi=function(){return!0},zW(Ytt,"EClassImpl/8",1171),sDn(1172,2062,m1n,Rm),uZn.fd=function(n){return han(this.a,n)},uZn.gc=function(){return z5(this.a.a).i},zW(Ytt,"EClassImpl/8/1",1172),sDn(1173,505,Qet,Ss),uZn.aj=function(n){return Inn(s_t,EZn,142,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/9",1173),sDn(1160,49,H0n,Qk),zW(Ytt,"EClassImpl/MyHashSet",1160),sDn(577,364,{110:1,94:1,93:1,142:1,156:1,847:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1},Gv),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return _Tn(this);case 4:return this.ik();case 5:return this.F;case 6:return t?Hrn(this):D0(this);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),this.A;case 8:return qx(),0!=(256&this.Bb)}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!_Tn(this);case 4:return null!=this.ik();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb)}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16));case 8:return void pdn(this,oM(gK(t)))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),C_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A);case 8:return void pdn(this,!0)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){tdn((gAn(),kBt),this).xe(),this.Bb|=1},uZn.ok=function(){var n,t;if(!this.c&&!(n=bxn(Hrn(this))).dc())for(t=n.Kc();t.Ob();)qUn(this,mK(t.Pb()))&&egn(this);return this.b},uZn.ik=function(){var n;if(!this.e){n=null;try{n=_Tn(this)}catch(t){if(!F$(t=Ehn(t),103))throw hv(t)}this.d=null,n&&0!=(1&n.i)&&(this.d=n==ZHt?(qx(),tot):n==YHt?xwn(0):n==iUt?new Rw(0):n==eUt?0:n==nUt?Hvn(0):n==rUt?Rwn(0):n==tUt?Ben(0):Hsn(0)),this.e=!0}return this.d},uZn.nk=function(){return 0!=(256&this.Bb)},uZn.rl=function(n){n&&(this.D="org.eclipse.emf.common.util.AbstractEnumerator")},uZn.gl=function(n){tun(this,n),this.rl(n)},uZn.hl=function(n){this.C=n,this.e=!1},uZn.Ib=function(){var n;return 0!=(64&this.Db)?pmn(this):((n=new fx(pmn(this))).a+=" (serializable: ",Lj(n,0!=(256&this.Bb)),n.a+=")",n.a)},uZn.c=!1,uZn.d=null,uZn.e=!1,zW(Ytt,"EDataTypeImpl",577),sDn(468,577,{110:1,94:1,93:1,142:1,156:1,847:1,685:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,468:1,158:1,119:1,120:1,691:1},Jk),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return _Tn(this);case 4:return dbn(this);case 5:return this.F;case 6:return t?Hrn(this):D0(this);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),this.A;case 8:return qx(),0!=(256&this.Bb);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),this.a}return $tn(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?VTn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,6,e);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),Nmn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),I_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),I_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 6:return DUn(this,null,6,e);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Nyn(this.A,n,e);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),Nyn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),I_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),I_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!_Tn(this);case 4:return!!dbn(this);case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb);case 9:return!!this.a&&0!=this.a.i}return l5(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16));case 8:return void pdn(this,oM(gK(t)));case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),Czn(this.a),!this.a&&(this.a=new fV(d_t,this,9,5)),void CW(this.a,uG(t,16))}lpn(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n),t)},uZn.ii=function(){return YYn(),I_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A);case 8:return void pdn(this,!0);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),void Czn(this.a)}sdn(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n))},uZn.pi=function(){var n,t;if(this.a)for(n=0,t=this.a.i;n<t;++n)lR(zrn(this.a,n));tdn((gAn(),kBt),this).xe(),this.Bb|=1},uZn.ik=function(){return dbn(this)},uZn.fk=function(n){return null!=n},uZn.rl=function(n){},zW(Ytt,"EEnumImpl",468),sDn(582,448,{110:1,94:1,93:1,2039:1,694:1,155:1,197:1,58:1,114:1,54:1,99:1,582:1,158:1,119:1,120:1},Uv),uZn.xe=function(){return this.zb},uZn.Ah=function(n){return Qjn(this,n)},uZn.Lh=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return xwn(this.d);case 3:return this.b?this.b:this.a;case 4:return null==(i=this.c)?this.zb:i;case 5:return this.Db>>16==5?uG(this.Cb,685):null}return $tn(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 5:return this.Cb&&(e=(i=this.Db>>16)>=0?Qjn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,5,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),O_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),O_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 5:return DUn(this,null,5,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),O_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),O_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0!=this.d;case 3:return!!this.b;case 4:return null!=this.c;case 5:return!(this.Db>>16!=5||!uG(this.Cb,685))}return l5(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return void Icn(this,uG(t,17).a);case 3:return void h$n(this,uG(t,2039));case 4:return void Uan(this,mK(t))}lpn(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n),t)},uZn.ii=function(){return YYn(),O_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return void Icn(this,0);case 3:return void h$n(this,null);case 4:return void Uan(this,null)}sdn(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n))},uZn.Ib=function(){var n;return null==(n=this.c)?this.zb:n},uZn.b=null,uZn.c=null,uZn.d=0,zW(Ytt,"EEnumLiteralImpl",582);var nBt,tBt,eBt,iBt=Iq(Ytt,"EFactoryImpl/InternalEDateTimeFormat");sDn(498,1,{2114:1},Km),zW(Ytt,"EFactoryImpl/1ClientInternalEDateTimeFormat",498),sDn(248,120,{110:1,94:1,93:1,89:1,58:1,114:1,54:1,99:1,248:1,119:1,120:1},ev),uZn.Ch=function(n,t,e){var i;return e=DUn(this,n,t,e),this.e&&F$(n,179)&&(i=bRn(this,this.e))!=this.c&&(e=PWn(this,i,e)),e},uZn.Lh=function(n,t,e){switch(n){case 0:return this.f;case 1:return!this.d&&(this.d=new MD(g_t,this,1)),this.d;case 2:return t?MGn(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return t?PMn(this):this.a}return $tn(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return vwn(this,null,e);case 1:return!this.d&&(this.d=new MD(g_t,this,1)),Nyn(this.d,n,e);case 3:return kwn(this,null,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),L_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),L_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.f;case 1:return!!this.d&&0!=this.d.i;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return l5(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n))},uZn.bi=function(n,t){switch(n){case 0:return void cPn(this,uG(t,89));case 1:return!this.d&&(this.d=new MD(g_t,this,1)),Czn(this.d),!this.d&&(this.d=new MD(g_t,this,1)),void CW(this.d,uG(t,16));case 3:return void rPn(this,uG(t,89));case 4:return void MIn(this,uG(t,850));case 5:return void Urn(this,uG(t,142))}lpn(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n),t)},uZn.ii=function(){return YYn(),L_t},uZn.ki=function(n){switch(n){case 0:return void cPn(this,null);case 1:return!this.d&&(this.d=new MD(g_t,this,1)),void Czn(this.d);case 3:return void rPn(this,null);case 4:return void MIn(this,null);case 5:return void Urn(this,null)}sdn(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n))},uZn.Ib=function(){var n;return(n=new lx(vxn(this))).a+=" (expression: ",XXn(this,n),n.a+=")",n.a},zW(Ytt,"EGenericTypeImpl",248),sDn(2067,2062,Irt),uZn.Gi=function(n,t){YK(this,n,t)},uZn.Wk=function(n,t){return YK(this,this.gc(),n),t},uZn.$i=function(n){return hyn(this.pj(),n)},uZn.Ii=function(){return this.Ji()},uZn.pj=function(){return new zm(this)},uZn.Ji=function(){return this.Ki(0)},uZn.Ki=function(n){return this.pj().fd(n)},uZn.Xk=function(n,t){return Wpn(this,n,!0),t},uZn.Ti=function(n,t){var e;return e=Kjn(this,t),this.fd(n).Rb(e),e},uZn.Ui=function(n,t){Wpn(this,t,!0),this.fd(n).Rb(t)},zW(art,"AbstractSequentialInternalEList",2067),sDn(495,2067,Irt,zx),uZn.$i=function(n){return hyn(this.pj(),n)},uZn.Ii=function(){return null==this.b?(EP(),EP(),eBt):this.sl()},uZn.pj=function(){return new kL(this.a,this.b)},uZn.Ji=function(){return null==this.b?(EP(),EP(),eBt):this.sl()},uZn.Ki=function(n){var t,e;if(null==this.b){if(n<0||n>1)throw hv(new dM(Hit+n+", size=0"));return EP(),EP(),eBt}for(e=this.sl(),t=0;t<n;++t)Ksn(e);return e},uZn.dc=function(){var n,t,e,i,r,c;if(null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.vl()||this.a.Xh(n))if(c=this.a.Nh(n,!1),PP(),uG(n,69).xk()){for(i=0,r=(t=uG(c,160)).gc();i<r;++i)if(RQ(t.Tl(i))&&null!=t.Ul(i))return!1}else if(n.Jk()){if(!uG(c,16).dc())return!1}else if(null!=c)return!1;return!0},uZn.Kc=function(){return kon(this)},uZn.fd=function(n){var t,e;if(null==this.b){if(0!=n)throw hv(new dM(Hit+n+", size=0"));return EP(),EP(),eBt}for(e=this.ul()?this.tl():this.sl(),t=0;t<n;++t)Ksn(e);return e},uZn.Ti=function(n,t){throw hv(new Kv)},uZn.Ui=function(n,t){throw hv(new Kv)},uZn.sl=function(){return new Vx(this.a,this.b)},uZn.tl=function(){return new WR(this.a,this.b)},uZn.ul=function(){return!0},uZn.gc=function(){var n,t,e,i,r,c,a;if(r=0,null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.vl()||this.a.Xh(n))if(a=this.a.Nh(n,!1),PP(),uG(n,69).xk())for(i=0,c=(t=uG(a,160)).gc();i<c;++i)RQ(t.Tl(i))&&null!=t.Ul(i)&&++r;else n.Jk()?r+=uG(a,16).gc():null!=a&&++r;return r},uZn.vl=function(){return!0},zW(art,"EContentsEList",495),sDn(1177,495,Irt,VR),uZn.sl=function(){return new JR(this.a,this.b)},uZn.tl=function(){return new QR(this.a,this.b)},uZn.vl=function(){return!1},zW(Ytt,"ENamedElementImpl/1",1177),sDn(287,1,Ort,Vx),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){throw hv(new Kv)},uZn.wl=function(n){if(0!=this.g||this.e)throw hv(new kM("Iterator already in use or already filtered"));this.e=n},uZn.Ob=function(){var n,t,e,i,r,c;switch(this.g){case 3:case 2:return!0;case 1:return!1;case-3:this.p?this.p.Pb():++this.n;default:if(this.k&&(this.p?wAn(this,this.p):p$n(this)))return r=this.p?this.p.Pb():this.j?this.j.$i(this.n++):this.k.Xb(this.n++),this.f?((n=uG(r,76)).Lk(),e=n.md(),this.i=e):(e=r,this.i=e),this.g=3,!0;for(;this.d<this.c.length;)if(t=this.c[this.d++],(!this.e||t.pk()!=tFt||0!=t.Lj())&&(!this.vl()||this.b.Xh(t)))if(c=this.b.Nh(t,this.ul()),this.f=(PP(),uG(t,69).xk()),this.f||t.Jk()){if(this.ul()?(i=uG(c,15),this.k=i):(i=uG(c,71),this.k=this.j=i),F$(this.k,59)?(this.p=null,this.o=this.k.gc(),this.n=0):this.p=this.j?this.j.Ji():this.k.ed(),this.p?wAn(this,this.p):p$n(this))return r=this.p?this.p.Pb():this.j?this.j.$i(this.n++):this.k.Xb(this.n++),this.f?((n=uG(r,76)).Lk(),e=n.md(),this.i=e):(e=r,this.i=e),this.g=3,!0}else if(null!=c)return this.k=null,this.p=null,e=c,this.i=e,this.g=2,!0;return this.k=null,this.p=null,this.f=!1,this.g=1,!1}},uZn.Sb=function(){var n,t,e,i,r,c;switch(this.g){case-3:case-2:return!0;case-1:return!1;case 3:this.p?this.p.Ub():--this.n;default:if(this.k&&(this.p?dAn(this,this.p):hLn(this)))return r=this.p?this.p.Ub():this.j?this.j.$i(--this.n):this.k.Xb(--this.n),this.f?((n=uG(r,76)).Lk(),e=n.md(),this.i=e):(e=r,this.i=e),this.g=-3,!0;for(;this.d>0;)if(t=this.c[--this.d],(!this.e||t.pk()!=tFt||0!=t.Lj())&&(!this.vl()||this.b.Xh(t)))if(c=this.b.Nh(t,this.ul()),this.f=(PP(),uG(t,69).xk()),this.f||t.Jk()){if(this.ul()?(i=uG(c,15),this.k=i):(i=uG(c,71),this.k=this.j=i),F$(this.k,59)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j.Ki(this.k.gc()):this.k.fd(this.k.gc()),this.p?dAn(this,this.p):hLn(this))return r=this.p?this.p.Ub():this.j?this.j.$i(--this.n):this.k.Xb(--this.n),this.f?((n=uG(r,76)).Lk(),e=n.md(),this.i=e):(e=r,this.i=e),this.g=-3,!0}else if(null!=c)return this.k=null,this.p=null,e=c,this.i=e,this.g=-2,!0;return this.k=null,this.p=null,this.g=-1,!1}},uZn.Pb=function(){return Ksn(this)},uZn.Tb=function(){return this.a},uZn.Ub=function(){var n;if(this.g<-1||this.Sb())return--this.a,this.g=0,n=this.i,this.Sb(),n;throw hv(new Bv)},uZn.Vb=function(){return this.a-1},uZn.Qb=function(){throw hv(new Kv)},uZn.ul=function(){return!1},uZn.Wb=function(n){throw hv(new Kv)},uZn.vl=function(){return!0},uZn.a=0,uZn.d=0,uZn.f=!1,uZn.g=0,uZn.n=0,uZn.o=0,zW(art,"EContentsEList/FeatureIteratorImpl",287),sDn(711,287,Ort,WR),uZn.ul=function(){return!0},zW(art,"EContentsEList/ResolvingFeatureIteratorImpl",711),sDn(1178,711,Ort,QR),uZn.vl=function(){return!1},zW(Ytt,"ENamedElementImpl/1/1",1178),sDn(1179,287,Ort,JR),uZn.vl=function(){return!1},zW(Ytt,"ENamedElementImpl/1/2",1179),sDn(38,152,Bit,t8,e8,lV,btn,Ken,j9,Bcn,o4,Hcn,u4,E9,s4,qcn,h4,S9,f4,Ucn,l4,bV,wtn,kZ,Gcn,b4,P9,w4),uZn.Kj=function(){return ntn(this)},uZn.Rj=function(){var n;return(n=ntn(this))?n.ik():null},uZn.hj=function(n){return-1==this.b&&this.a&&(this.b=this.c.Hh(this.a.Lj(),this.a.pk())),this.c.yh(this.b,n)},uZn.jj=function(){return this.c},uZn.Sj=function(){var n;return!!(n=ntn(this))&&n.tk()},uZn.b=-1,zW(Ytt,"ENotificationImpl",38),sDn(411,291,{110:1,94:1,93:1,155:1,197:1,58:1,62:1,114:1,480:1,54:1,99:1,158:1,411:1,291:1,119:1,120:1},Yk),uZn.Ah=function(n){return fEn(this,n)},uZn.Lh=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),0!=(256&this.Bb);case 3:return qx(),0!=(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),(i=this.t)>1||-1==i;case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?uG(this.Cb,29):null;case 11:return!this.d&&(this.d=new PD(J_t,this,11)),this.d;case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),this.c;case 13:return!this.a&&(this.a=new oF(this,this)),this.a;case 14:return Aen(this)}return $tn(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?fEn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,10,e);case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),Nmn(this.c,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),R_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),R_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e);case 10:return DUn(this,null,10,e);case 11:return!this.d&&(this.d=new PD(J_t,this,11)),Nyn(this.d,n,e);case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),Nyn(this.c,n,e);case 14:return Nyn(Aen(this),n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),R_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),R_t)),n,e)},uZn.Wh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Db>>16!=10||!uG(this.Cb,29));case 11:return!!this.d&&0!=this.d.i;case 12:return!!this.c&&0!=this.c.i;case 13:return!(!this.a||0==Aen(this.a.a).i||this.b&&MMn(this.b));case 14:return!!this.b&&MMn(this.b)}return l5(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void Ccn(this,uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 11:return!this.d&&(this.d=new PD(J_t,this,11)),Czn(this.d),!this.d&&(this.d=new PD(J_t,this,11)),void CW(this.d,uG(t,16));case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),Czn(this.c),!this.c&&(this.c=new fV(m_t,this,12,10)),void CW(this.c,uG(t,16));case 13:return!this.a&&(this.a=new oF(this,this)),_zn(this.a),!this.a&&(this.a=new oF(this,this)),void CW(this.a,uG(t,16));case 14:return Czn(Aen(this)),void CW(Aen(this),uG(t,16))}lpn(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n),t)},uZn.ii=function(){return YYn(),R_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void Ccn(this,1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 11:return!this.d&&(this.d=new PD(J_t,this,11)),void Czn(this.d);case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),void Czn(this.c);case 13:return void(this.a&&_zn(this.a));case 14:return void(this.b&&Czn(this.b))}sdn(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n))},uZn.pi=function(){var n,t;if(this.c)for(n=0,t=this.c.i;n<t;++n)lR(zrn(this.c,n));bEn(this),this.Bb|=1},zW(Ytt,"EOperationImpl",411),sDn(513,756,Crt,oF),uZn.qj=function(n,t){ZR(this,n,uG(t,142))},uZn.rj=function(n){HN(this,uG(n,142))},uZn.xj=function(n){return uG(zrn(Aen(this.a),n),89).c||(YYn(),N_t)},uZn.Cj=function(n){return uG(e_n(Aen(this.a),n),89).c||(YYn(),N_t)},uZn.Dj=function(n,t){return Qvn(this,n,uG(t,142))},uZn.Li=function(){return!1},uZn.Ij=function(n,t,e,i,r){return null},uZn.sj=function(){return new Fm(this)},uZn.tj=function(){Czn(Aen(this.a))},uZn.uj=function(n){return Idn(this,n)},uZn.vj=function(n){var t;for(t=n.Kc();t.Ob();)if(!Idn(this,t.Pb()))return!1;return!0},uZn.wj=function(n){var t,e,i;if(F$(n,15)&&(i=uG(n,15)).gc()==Aen(this.a).i){for(t=i.Kc(),e=new DD(this);t.Ob();)if(xA(t.Pb())!==xA(Zkn(e)))return!1;return!0}return!1},uZn.yj=function(){var n,t,e;for(t=1,n=new DD(Aen(this.a));n.e!=n.i.gc();)t=31*t+((e=uG(Zkn(n),89).c||(YYn(),N_t))?Hon(e):0);return t},uZn.zj=function(n){var t,e,i;for(i=0,e=new DD(Aen(this.a));e.e!=e.i.gc();){if(t=uG(Zkn(e),89),xA(n)===xA(t.c||(YYn(),N_t)))return i;++i}return-1},uZn.Aj=function(){return 0==Aen(this.a).i},uZn.Bj=function(){return null},uZn.Ej=function(){return Aen(this.a).i},uZn.Fj=function(){var n,t,e,i,r;for(r=Aen(this.a).i,i=Inn(dat,EZn,1,r,5,1),e=0,t=new DD(Aen(this.a));t.e!=t.i.gc();)n=uG(Zkn(t),89),i[e++]=n.c||(YYn(),N_t);return i},uZn.Gj=function(n){var t,e,i;for(i=Aen(this.a).i,n.length<i&&(n=Acn(Tbn(n).c,i)),n.length>i&&uQ(n,i,null),e=0,t=new DD(Aen(this.a));t.e!=t.i.gc();)uQ(n,e++,uG(Zkn(t),89).c||(YYn(),N_t));return n},uZn.Hj=function(){var n,t,e,i;for((i=new zM).a+="[",n=Aen(this.a),t=0,e=Aen(this.a).i;t<e;)VA(i,ox(uG(zrn(n,t),89).c||(YYn(),N_t))),++t<e&&(i.a+=TZn);return i.a+="]",i.a},uZn.Jj=function(n){},uZn.Lj=function(){return 13},uZn.kl=function(){return!0},uZn.Mj=function(){return!1},uZn.ll=function(){return!1},uZn.ml=function(){return!1},uZn.nl=function(){return!0},uZn.al=function(){return!1},uZn.ol=function(){return!0},uZn.fk=function(n){return F$(n,142)},uZn.Qj=function(){return T4(this.a)},uZn.Si=function(){return!0},uZn.Yi=function(){return!0},zW(Ytt,"EOperationImpl/1",513),sDn(1376,2062,m1n,Fm),uZn.fd=function(n){return han(this.a,n)},uZn.gc=function(){return Aen(this.a.a).i},zW(Ytt,"EOperationImpl/1/1",1376),sDn(1377,555,Trt,fz),uZn.Ti=function(n,t){var e;return e=uG(zdn(this,n,t),89),uN(this.e)&&Yv(this,new wtn(this.a,7,(YYn(),K_t),xwn(t),e.c||N_t,n)),e},uZn.Uj=function(n,t){return ndn(this,uG(n,89),t)},uZn.Vj=function(n,t){return Zwn(this,uG(n,89),t)},uZn.Wj=function(n,t,e){return Lkn(this,uG(n,89),uG(t,89),e)},uZn.Ij=function(n,t,e,i,r){switch(n){case 3:return i2(this,n,t,e,i,this.i>1);case 5:return i2(this,n,t,e,i,this.i-uG(e,15).gc()>0);default:return new Ken(this.e,n,this.c,t,e,i,!0)}},uZn.Tj=function(){return!0},uZn.Qj=function(){return MMn(this)},uZn.Gk=function(){Czn(this)},zW(Ytt,"EOperationImpl/2",1377),sDn(507,1,{2037:1,507:1},EA),zW(Ytt,"EPackageImpl/1",507),sDn(14,83,Trt,fV),uZn.il=function(){return this.d},uZn.jl=function(){return this.b},uZn.ml=function(){return!0},uZn.b=0,zW(art,"EObjectContainmentWithInverseEList",14),sDn(365,14,Trt,i_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentWithInverseEList/Resolving",365),sDn(307,365,Trt,vV),uZn.Ni=function(){this.a.tb=null},zW(Ytt,"EPackageImpl/2",307),sDn(1278,1,{},Ps),zW(Ytt,"EPackageImpl/3",1278),sDn(733,45,B0n,Zk),uZn._b=function(n){return RA(n)?AZ(this,n):!!FX(this.f,n)},zW(Ytt,"EPackageRegistryImpl",733),sDn(518,291,{110:1,94:1,93:1,155:1,197:1,58:1,2116:1,114:1,480:1,54:1,99:1,158:1,518:1,291:1,119:1,120:1},ny),uZn.Ah=function(n){return lEn(this,n)},uZn.Lh=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),0!=(256&this.Bb);case 3:return qx(),0!=(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),(i=this.t)>1||-1==i;case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?uG(this.Cb,62):null}return $tn(this,n-iQ((YYn(),__t)),ern(uG(Lsn(this,16),29)||__t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?lEn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,10,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),__t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),__t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e);case 10:return DUn(this,null,10,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),__t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),__t)),n,e)},uZn.Wh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Db>>16!=10||!uG(this.Cb,62))}return l5(this,n-iQ((YYn(),__t)),ern(uG(Lsn(this,16),29)||__t,n))},uZn.ii=function(){return YYn(),__t},zW(Ytt,"EParameterImpl",518),sDn(102,461,{110:1,94:1,93:1,155:1,197:1,58:1,19:1,179:1,69:1,114:1,480:1,54:1,99:1,158:1,102:1,461:1,291:1,119:1,120:1,692:1},PK),uZn.Lh=function(n,t,e){var i,r;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),0!=(256&this.Bb);case 3:return qx(),0!=(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),(r=this.t)>1||-1==r;case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return qx(),0!=(this.Bb&w1n);case 11:return qx(),0!=(this.Bb&frt);case 12:return qx(),0!=(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),0!=(this.Bb&hrt);case 16:return qx(),0!=(this.Bb&VZn);case 17:return K0(this);case 18:return qx(),0!=(this.Bb&Qtt);case 19:return qx(),!(!(i=lMn(this))||0==(i.Bb&Qtt));case 20:return qx(),0!=(this.Bb&P0n);case 21:return t?lMn(this):this.b;case 22:return t?Ffn(this):R9(this);case 23:return!this.a&&(this.a=new OD(u_t,this,23)),this.a}return $tn(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n),t,e)},uZn.Wh=function(n){var t,e;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(e=this.t)>1||-1==e;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return 0==(this.Bb&w1n);case 11:return 0!=(this.Bb&frt);case 12:return 0!=(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return 0!=(this.Bb&hrt);case 16:return 0!=(this.Bb&VZn);case 17:return!!K0(this);case 18:return 0!=(this.Bb&Qtt);case 19:return!!(t=lMn(this))&&0!=(t.Bb&Qtt);case 20:return 0==(this.Bb&P0n);case 21:return!!this.b;case 22:return!!R9(this);case 23:return!!this.a&&0!=this.a.i}return l5(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void g2(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void Ccn(this,uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 10:return void Wdn(this,oM(gK(t)));case 11:return void Ydn(this,oM(gK(t)));case 12:return void Qdn(this,oM(gK(t)));case 13:return void mA(this,mK(t));case 15:return void Jdn(this,oM(gK(t)));case 16:return void Cgn(this,oM(gK(t)));case 18:return void p2(this,oM(gK(t)));case 20:return void Ign(this,oM(gK(t)));case 21:return void bon(this,uG(t,19));case 23:return!this.a&&(this.a=new OD(u_t,this,23)),Czn(this.a),!this.a&&(this.a=new OD(u_t,this,23)),void CW(this.a,uG(t,16))}lpn(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n),t)},uZn.ii=function(){return YYn(),B_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),4),void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void Ccn(this,1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 10:return void Wdn(this,!0);case 11:return void Ydn(this,!1);case 12:return void Qdn(this,!1);case 13:return this.i=null,void lon(this,null);case 15:return void Jdn(this,!1);case 16:return void Cgn(this,!1);case 18:return Pgn(this,!1),void(F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),2));case 20:return void Ign(this,!0);case 21:return void bon(this,null);case 23:return!this.a&&(this.a=new OD(u_t,this,23)),void Czn(this.a)}sdn(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n))},uZn.pi=function(){Ffn(this),BJ(Nen((gAn(),kBt),this)),bEn(this),this.Bb|=1},uZn.uk=function(){return lMn(this)},uZn._k=function(){var n;return!!(n=lMn(this))&&0!=(n.Bb&Qtt)},uZn.al=function(){return 0!=(this.Bb&Qtt)},uZn.bl=function(){return 0!=(this.Bb&P0n)},uZn.Yk=function(n,t){return this.c=null,Ywn(this,n,t)},uZn.Ib=function(){var n;return 0!=(64&this.Db)?MBn(this):((n=new fx(MBn(this))).a+=" (containment: ",Lj(n,0!=(this.Bb&Qtt)),n.a+=", resolveProxies: ",Lj(n,0!=(this.Bb&P0n)),n.a+=")",n.a)},zW(Ytt,"EReferenceImpl",102),sDn(561,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,561:1,119:1,120:1},Cs),uZn.Fb=function(n){return this===n},uZn.ld=function(){return this.b},uZn.md=function(){return this.c},uZn.Hb=function(){return xx(this)},uZn.Di=function(n){Rq(this,mK(n))},uZn.nd=function(n){return DG(this,mK(n))},uZn.Lh=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return $tn(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n),t,e)},uZn.Wh=function(n){switch(n){case 0:return null!=this.b;case 1:return null!=this.c}return l5(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n))},uZn.bi=function(n,t){switch(n){case 0:return void Kq(this,mK(t));case 1:return void Jan(this,mK(t))}lpn(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n),t)},uZn.ii=function(){return YYn(),H_t},uZn.ki=function(n){switch(n){case 0:return void Qan(this,null);case 1:return void Jan(this,null)}sdn(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n))},uZn.Bi=function(){var n;return-1==this.a&&(n=this.b,this.a=null==n?0:pln(n)),this.a},uZn.Ci=function(n){this.a=n},uZn.Ib=function(){var n;return 0!=(64&this.Db)?vxn(this):((n=new fx(vxn(this))).a+=" (key: ",VA(n,this.b),n.a+=", value: ",VA(n,this.c),n.a+=")",n.a)},uZn.a=-1,uZn.b=null,uZn.c=null;var rBt,cBt,aBt,oBt,uBt,sBt,hBt,fBt,lBt,bBt,wBt=zW(Ytt,"EStringToStringMapEntryImpl",561),dBt=Iq(art,"FeatureMap/Entry/Internal");sDn(576,1,Art),uZn.xl=function(n){return this.yl(uG(n,54))},uZn.yl=function(n){return this.xl(n)},uZn.Fb=function(n){var t,e;return this===n||!!F$(n,76)&&(t=uG(n,76)).Lk()==this.c&&(null==(e=this.md())?null==t.md():udn(e,t.md()))},uZn.Lk=function(){return this.c},uZn.Hb=function(){var n;return n=this.md(),Hon(this.c)^(null==n?0:Hon(n))},uZn.Ib=function(){var n,t;return t=Hrn((n=this.c).qk()).yi(),n.xe(),(null!=t&&0!=t.length?t+":"+n.xe():n.xe())+"="+this.md()},zW(Ytt,"EStructuralFeatureImpl/BasicFeatureMapEntry",576),sDn(791,576,Art,sF),uZn.yl=function(n){return new sF(this.c,n)},uZn.md=function(){return this.a},uZn.zl=function(n,t,e){return Kun(this,n,this.a,t,e)},uZn.Al=function(n,t,e){return Fun(this,n,this.a,t,e)},zW(Ytt,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",791),sDn(1350,1,{},SA),uZn.yk=function(n,t,e,i,r){return uG(vtn(n,this.b),220).Yl(this.a).Fk(i)},uZn.zk=function(n,t,e,i,r){return uG(vtn(n,this.b),220).Pl(this.a,i,r)},uZn.Ak=function(n,t,e,i,r){return uG(vtn(n,this.b),220).Ql(this.a,i,r)},uZn.Bk=function(n,t,e){return uG(vtn(n,this.b),220).Yl(this.a).Qj()},uZn.Ck=function(n,t,e,i){uG(vtn(n,this.b),220).Yl(this.a).Wb(i)},uZn.Dk=function(n,t,e){return uG(vtn(n,this.b),220).Yl(this.a)},uZn.Ek=function(n,t,e){uG(vtn(n,this.b),220).Yl(this.a).Gk()},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1350),sDn(91,1,{},RU,CY,GZ,r8),uZn.yk=function(n,t,e,i,r){var c;if(null==(c=t.li(e))&&t.mi(e,c=xYn(this,n)),!r)switch(this.e){case 50:case 41:return uG(c,597).bk();case 40:return uG(c,220).Vl()}return c},uZn.zk=function(n,t,e,i,r){var c;return null==(c=t.li(e))&&t.mi(e,c=xYn(this,n)),uG(c,71).Wk(i,r)},uZn.Ak=function(n,t,e,i,r){var c;return null!=(c=t.li(e))&&(r=uG(c,71).Xk(i,r)),r},uZn.Bk=function(n,t,e){var i;return null!=(i=t.li(e))&&uG(i,79).Qj()},uZn.Ck=function(n,t,e,i){var r;!(r=uG(t.li(e),79))&&t.mi(e,r=xYn(this,n)),r.Wb(i)},uZn.Dk=function(n,t,e){var i;return null==(i=t.li(e))&&t.mi(e,i=xYn(this,n)),F$(i,79)?uG(i,79):new _m(uG(t.li(e),15))},uZn.Ek=function(n,t,e){var i;!(i=uG(t.li(e),79))&&t.mi(e,i=xYn(this,n)),i.Gk()},uZn.b=0,uZn.e=0,zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateMany",91),sDn(512,1,{}),uZn.zk=function(n,t,e,i,r){throw hv(new Kv)},uZn.Ak=function(n,t,e,i,r){throw hv(new Kv)},uZn.Dk=function(n,t,e){return new IY(this,n,t,e)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingle",512),sDn(1367,1,ort,IY),uZn.Fk=function(n){return this.a.yk(this.c,this.d,this.b,n,!0)},uZn.Qj=function(){return this.a.Bk(this.c,this.d,this.b)},uZn.Wb=function(n){this.a.Ck(this.c,this.d,this.b,n)},uZn.Gk=function(){this.a.Ek(this.c,this.d,this.b)},uZn.b=0,zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1367),sDn(784,512,{},_1),uZn.yk=function(n,t,e,i,r){return PHn(n,n.Ph(),n.Fh())==this.b?this.bl()&&i?J$n(n):n.Ph():null},uZn.zk=function(n,t,e,i,r){var c,a;return n.Ph()&&(r=(c=n.Fh())>=0?n.Ah(r):n.Ph().Th(n,-1-c,null,r)),a=emn(n.Dh(),this.e),n.Ch(i,a,r)},uZn.Ak=function(n,t,e,i,r){var c;return c=emn(n.Dh(),this.e),n.Ch(null,c,r)},uZn.Bk=function(n,t,e){var i;return i=emn(n.Dh(),this.e),!!n.Ph()&&n.Fh()==i},uZn.Ck=function(n,t,e,i){var r,c,a,o,u;if(null!=i&&!LGn(this.a,i))throw hv(new mM(Lrt+(F$(i,58)?nPn(uG(i,58).Dh()):crn(Tbn(i)))+Nrt+this.a+"'"));if(r=n.Ph(),a=emn(n.Dh(),this.e),xA(i)!==xA(r)||n.Fh()!=a&&null!=i){if(eEn(n,uG(i,58)))throw hv(new vM(net+n.Ib()));u=null,r&&(u=(c=n.Fh())>=0?n.Ah(u):n.Ph().Th(n,-1-c,null,u)),(o=uG(i,54))&&(u=o.Rh(n,emn(o.Dh(),this.b),null,u)),(u=n.Ch(o,a,u))&&u.oj()}else n.vh()&&n.wh()&&Msn(n,new lV(n,1,a,i,i))},uZn.Ek=function(n,t,e){var i,r,c;n.Ph()?(c=(i=n.Fh())>=0?n.Ah(null):n.Ph().Th(n,-1-i,null,null),r=emn(n.Dh(),this.e),(c=n.Ch(null,r,c))&&c.oj()):n.vh()&&n.wh()&&Msn(n,new bV(n,1,this.e,null,null))},uZn.bl=function(){return!1},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",784),sDn(1351,784,{},KU),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1351),sDn(574,512,{}),uZn.yk=function(n,t,e,i,r){var c;return null==(c=t.li(e))?this.b:xA(c)===xA(rBt)?null:c},uZn.Bk=function(n,t,e){var i;return null!=(i=t.li(e))&&(xA(i)===xA(rBt)||!udn(i,this.b))},uZn.Ck=function(n,t,e,i){var r,c;n.vh()&&n.wh()?(r=null==(c=t.li(e))?this.b:xA(c)===xA(rBt)?null:c,null==i?null!=this.c?(t.mi(e,null),i=this.b):null!=this.b?t.mi(e,rBt):t.mi(e,null):(this.Bl(i),t.mi(e,i)),Msn(n,this.d.Cl(n,1,this.e,r,i))):null==i?null!=this.c?t.mi(e,null):null!=this.b?t.mi(e,rBt):t.mi(e,null):(this.Bl(i),t.mi(e,i))},uZn.Ek=function(n,t,e){var i,r;n.vh()&&n.wh()?(i=null==(r=t.li(e))?this.b:xA(r)===xA(rBt)?null:r,t.ni(e),Msn(n,this.d.Cl(n,1,this.e,i,this.b))):t.ni(e)},uZn.Bl=function(n){throw hv(new $v)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",574),sDn($rt,1,{},Is),uZn.Cl=function(n,t,e,i,r){return new bV(n,t,e,i,r)},uZn.Dl=function(n,t,e,i,r,c){return new kZ(n,t,e,i,r,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",$rt),sDn(1368,$rt,{},Os),uZn.Cl=function(n,t,e,i,r){return new P9(n,t,e,oM(gK(i)),oM(gK(r)))},uZn.Dl=function(n,t,e,i,r,c){return new w4(n,t,e,oM(gK(i)),oM(gK(r)),c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1368),sDn(1369,$rt,{},As),uZn.Cl=function(n,t,e,i,r){return new Bcn(n,t,e,uG(i,222).a,uG(r,222).a)},uZn.Dl=function(n,t,e,i,r,c){return new o4(n,t,e,uG(i,222).a,uG(r,222).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1369),sDn(1370,$rt,{},Ls),uZn.Cl=function(n,t,e,i,r){return new Hcn(n,t,e,uG(i,180).a,uG(r,180).a)},uZn.Dl=function(n,t,e,i,r,c){return new u4(n,t,e,uG(i,180).a,uG(r,180).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1370),sDn(1371,$rt,{},Ns),uZn.Cl=function(n,t,e,i,r){return new E9(n,t,e,uM(pK(i)),uM(pK(r)))},uZn.Dl=function(n,t,e,i,r,c){return new s4(n,t,e,uM(pK(i)),uM(pK(r)),c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1371),sDn(1372,$rt,{},$s),uZn.Cl=function(n,t,e,i,r){return new qcn(n,t,e,uG(i,161).a,uG(r,161).a)},uZn.Dl=function(n,t,e,i,r,c){return new h4(n,t,e,uG(i,161).a,uG(r,161).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1372),sDn(1373,$rt,{},Ds),uZn.Cl=function(n,t,e,i,r){return new S9(n,t,e,uG(i,17).a,uG(r,17).a)},uZn.Dl=function(n,t,e,i,r,c){return new f4(n,t,e,uG(i,17).a,uG(r,17).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1373),sDn(1374,$rt,{},xs),uZn.Cl=function(n,t,e,i,r){return new Ucn(n,t,e,uG(i,168).a,uG(r,168).a)},uZn.Dl=function(n,t,e,i,r,c){return new l4(n,t,e,uG(i,168).a,uG(r,168).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1374),sDn(1375,$rt,{},Rs),uZn.Cl=function(n,t,e,i,r){return new Gcn(n,t,e,uG(i,191).a,uG(r,191).a)},uZn.Dl=function(n,t,e,i,r,c){return new b4(n,t,e,uG(i,191).a,uG(r,191).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1375),sDn(1353,574,{},OY),uZn.Bl=function(n){if(!this.a.fk(n))throw hv(new mM(Lrt+Tbn(n)+Nrt+this.a+"'"))},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1353),sDn(1354,574,{},lz),uZn.Bl=function(n){},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1354),sDn(785,574,{}),uZn.Bk=function(n,t,e){return null!=t.li(e)},uZn.Ck=function(n,t,e,i){var r,c;n.vh()&&n.wh()?(r=!0,null==(c=t.li(e))?(r=!1,c=this.b):xA(c)===xA(rBt)&&(c=null),null==i?null!=this.c?(t.mi(e,null),i=this.b):t.mi(e,rBt):(this.Bl(i),t.mi(e,i)),Msn(n,this.d.Dl(n,1,this.e,c,i,!r))):null==i?null!=this.c?t.mi(e,null):t.mi(e,rBt):(this.Bl(i),t.mi(e,i))},uZn.Ek=function(n,t,e){var i,r;n.vh()&&n.wh()?(i=!0,null==(r=t.li(e))?(i=!1,r=this.b):xA(r)===xA(rBt)&&(r=null),t.ni(e),Msn(n,this.d.Dl(n,2,this.e,r,this.b,i))):t.ni(e)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",785),sDn(1355,785,{},AY),uZn.Bl=function(n){if(!this.a.fk(n))throw hv(new mM(Lrt+Tbn(n)+Nrt+this.a+"'"))},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1355),sDn(1356,785,{},bz),uZn.Bl=function(n){},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1356),sDn(410,512,{},OX),uZn.yk=function(n,t,e,i,r){var c,a,o,u,s;if(s=t.li(e),this.tk()&&xA(s)===xA(rBt))return null;if(this.bl()&&i&&null!=s){if((o=uG(s,54)).Vh()&&o!=(u=mwn(n,o))){if(!LGn(this.a,u))throw hv(new mM(Lrt+Tbn(u)+Nrt+this.a+"'"));t.mi(e,s=u),this.al()&&(c=uG(u,54),a=o.Th(n,this.b?emn(o.Dh(),this.b):-1-emn(n.Dh(),this.e),null,null),!c.Ph()&&(a=c.Rh(n,this.b?emn(c.Dh(),this.b):-1-emn(n.Dh(),this.e),null,a)),a&&a.oj()),n.vh()&&n.wh()&&Msn(n,new bV(n,9,this.e,o,u))}return s}return s},uZn.zk=function(n,t,e,i,r){var c,a;return xA(a=t.li(e))===xA(rBt)&&(a=null),t.mi(e,i),this.Mj()?xA(a)!==xA(i)&&null!=a&&(r=(c=uG(a,54)).Th(n,emn(c.Dh(),this.b),null,r)):this.al()&&null!=a&&(r=uG(a,54).Th(n,-1-emn(n.Dh(),this.e),null,r)),n.vh()&&n.wh()&&(!r&&(r=new cj(4)),r.nj(new bV(n,1,this.e,a,i))),r},uZn.Ak=function(n,t,e,i,r){var c;return xA(c=t.li(e))===xA(rBt)&&(c=null),t.ni(e),n.vh()&&n.wh()&&(!r&&(r=new cj(4)),this.tk()?r.nj(new bV(n,2,this.e,c,null)):r.nj(new bV(n,1,this.e,c,null))),r},uZn.Bk=function(n,t,e){return null!=t.li(e)},uZn.Ck=function(n,t,e,i){var r,c,a,o,u;if(null!=i&&!LGn(this.a,i))throw hv(new mM(Lrt+(F$(i,58)?nPn(uG(i,58).Dh()):crn(Tbn(i)))+Nrt+this.a+"'"));o=null!=(u=t.li(e)),this.tk()&&xA(u)===xA(rBt)&&(u=null),a=null,this.Mj()?xA(u)!==xA(i)&&(null!=u&&(a=(r=uG(u,54)).Th(n,emn(r.Dh(),this.b),null,a)),null!=i&&(a=(r=uG(i,54)).Rh(n,emn(r.Dh(),this.b),null,a))):this.al()&&xA(u)!==xA(i)&&(null!=u&&(a=uG(u,54).Th(n,-1-emn(n.Dh(),this.e),null,a)),null!=i&&(a=uG(i,54).Rh(n,-1-emn(n.Dh(),this.e),null,a))),null==i&&this.tk()?t.mi(e,rBt):t.mi(e,i),n.vh()&&n.wh()?(c=new kZ(n,1,this.e,u,i,this.tk()&&!o),a?(a.nj(c),a.oj()):Msn(n,c)):a&&a.oj()},uZn.Ek=function(n,t,e){var i,r,c,a,o;a=null!=(o=t.li(e)),this.tk()&&xA(o)===xA(rBt)&&(o=null),c=null,null!=o&&(this.Mj()?c=(i=uG(o,54)).Th(n,emn(i.Dh(),this.b),null,c):this.al()&&(c=uG(o,54).Th(n,-1-emn(n.Dh(),this.e),null,c))),t.ni(e),n.vh()&&n.wh()?(r=new kZ(n,this.tk()?2:1,this.e,o,null,a),c?(c.nj(r),c.oj()):Msn(n,r)):c&&c.oj()},uZn.Mj=function(){return!1},uZn.al=function(){return!1},uZn.bl=function(){return!1},uZn.tk=function(){return!1},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",410),sDn(575,410,{},tK),uZn.al=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",575),sDn(1359,575,{},eK),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1359),sDn(787,575,{},iK),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",787),sDn(1361,787,{},cK),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1361),sDn(650,575,{},FU),uZn.Mj=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",650),sDn(1360,650,{},HU),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1360),sDn(788,650,{},UU),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",788),sDn(1362,788,{},GU),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1362),sDn(651,410,{},rK),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",651),sDn(1363,651,{},aK),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1363),sDn(789,651,{},_U),uZn.Mj=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",789),sDn(1364,789,{},qU),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1364),sDn(1357,410,{},oK),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1357),sDn(786,410,{},BU),uZn.Mj=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",786),sDn(1358,786,{},XU),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1358),sDn(790,576,Art,EQ),uZn.yl=function(n){return new EQ(this.a,this.c,n)},uZn.md=function(){return this.b},uZn.zl=function(n,t,e){return Snn(this,n,this.b,e)},uZn.Al=function(n,t,e){return Pnn(this,n,this.b,e)},zW(Ytt,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",790),sDn(1365,1,ort,_m),uZn.Fk=function(n){return this.a},uZn.Qj=function(){return F$(this.a,97)?uG(this.a,97).Qj():!this.a.dc()},uZn.Wb=function(n){this.a.$b(),this.a.Gc(uG(n,15))},uZn.Gk=function(){F$(this.a,97)?uG(this.a,97).Gk():this.a.$b()},zW(Ytt,"EStructuralFeatureImpl/SettingMany",1365),sDn(1366,576,Art,o8),uZn.xl=function(n){return new hF((uVn(),oHt),this.b.ri(this.a,n))},uZn.md=function(){return null},uZn.zl=function(n,t,e){return e},uZn.Al=function(n,t,e){return e},zW(Ytt,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1366),sDn(652,576,Art,hF),uZn.xl=function(n){return new hF(this.c,n)},uZn.md=function(){return this.a},uZn.zl=function(n,t,e){return e},uZn.Al=function(n,t,e){return e},zW(Ytt,"EStructuralFeatureImpl/SimpleFeatureMapEntry",652),sDn(403,505,Qet,Ks),uZn.aj=function(n){return Inn(h_t,EZn,29,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"ESuperAdapter/1",403),sDn(456,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,850:1,54:1,99:1,158:1,456:1,119:1,120:1},Fs),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new AX(this,g_t,this)),this.a}return $tn(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 2:return!this.a&&(this.a=new AX(this,g_t,this)),Nyn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),q_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),q_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!!this.a&&0!=this.a.i}return l5(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return!this.a&&(this.a=new AX(this,g_t,this)),Czn(this.a),!this.a&&(this.a=new AX(this,g_t,this)),void CW(this.a,uG(t,16))}lpn(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n),t)},uZn.ii=function(){return YYn(),q_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return!this.a&&(this.a=new AX(this,g_t,this)),void Czn(this.a)}sdn(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n))},zW(Ytt,"ETypeParameterImpl",456),sDn(457,83,Trt,AX),uZn.Nj=function(n,t){return mCn(this,uG(n,89),t)},uZn.Oj=function(n,t){return vCn(this,uG(n,89),t)},zW(Ytt,"ETypeParameterImpl/1",457),sDn(647,45,B0n,ty),uZn.ec=function(){return new Um(this)},zW(Ytt,"ETypeParameterImpl/2",647),sDn(570,KZn,FZn,Um),uZn.Fc=function(n){return WF(this,uG(n,89))},uZn.Gc=function(n){var t,e,i;for(i=!1,e=n.Kc();e.Ob();)t=uG(e.Pb(),89),null==vJ(this.a,t,"")&&(i=!0);return i},uZn.$b=function(){$V(this.a)},uZn.Hc=function(n){return PV(this.a,n)},uZn.Kc=function(){return new Gm(new bsn(new Nw(this.a).a))},uZn.Mc=function(n){return C7(this,n)},uZn.gc=function(){return oS(this.a)},zW(Ytt,"ETypeParameterImpl/2/1",570),sDn(571,1,$Zn,Gm),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(von(this.a).ld(),89)},uZn.Ob=function(){return this.a.b},uZn.Qb=function(){Oen(this.a)},zW(Ytt,"ETypeParameterImpl/2/1/1",571),sDn(1329,45,B0n,ey),uZn._b=function(n){return RA(n)?AZ(this,n):!!FX(this.f,n)},uZn.xc=function(n){var t;return F$(t=RA(n)?U1(this,n):DA(FX(this.f,n)),851)?(t=uG(t,851).Kk(),vJ(this,uG(n,241),t),t):null!=t?t:null==n?(SP(),EBt):null},zW(Ytt,"EValidatorRegistryImpl",1329),sDn(1349,720,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,2040:1,54:1,99:1,158:1,119:1,120:1},_s),uZn.ri=function(n,t){switch(n.hk()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return null==t?null:cpn(t);case 25:return Xrn(t);case 27:return nen(t);case 28:return ten(t);case 29:return null==t?null:N$(QKt[0],uG(t,206));case 41:return null==t?"":Ij(uG(t,296));case 42:return cpn(t);case 50:return mK(t);default:throw hv(new vM(tet+n.xe()+eet))}},uZn.si=function(n){var t;switch(-1==n.G&&(n.G=(t=Hrn(n))?Hyn(t.vi(),n):-1),n.G){case 0:return new Wk;case 1:return new vs;case 2:return new Kl;case 4:return new Gv;case 5:return new Jk;case 6:return new Uv;case 7:return new Fl;case 10:return new ps;case 11:return new Yk;case 12:return new aZ;case 13:return new ny;case 14:return new PK;case 17:return new Cs;case 18:return new ev;case 19:return new Fs;default:throw hv(new vM(cet+n.zb+eet))}},uZn.ti=function(n,t){switch(n.hk()){case 20:return null==t?null:new Wj(t);case 21:return null==t?null:new PN(t);case 23:case 22:return null==t?null:Ovn(t);case 26:case 24:return null==t?null:Ben(vUn(t,-128,127)<<24>>24);case 25:return cxn(t);case 27:return sjn(t);case 28:return hjn(t);case 29:return rIn(t);case 32:case 31:return null==t?null:YIn(t);case 38:case 37:return null==t?null:new tk(t);case 40:case 39:return null==t?null:xwn(vUn(t,j1n,vZn));case 41:case 42:return null;case 44:case 43:return null==t?null:Hvn(tJn(t));case 49:case 48:return null==t?null:Rwn(vUn(t,xrt,32767)<<16>>16);case 50:return t;default:throw hv(new vM(tet+n.xe()+eet))}},zW(Ytt,"EcoreFactoryImpl",1349),sDn(560,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,2038:1,54:1,99:1,158:1,184:1,560:1,119:1,120:1,690:1},dJ),uZn.gb=!1,uZn.hb=!1;var gBt,pBt=!1;zW(Ytt,"EcorePackageImpl",560),sDn(1234,1,{851:1},Bs),uZn.Kk=function(){return HD(),SBt},zW(Ytt,"EcorePackageImpl/1",1234),sDn(1243,1,Wrt,Hs),uZn.fk=function(n){return F$(n,155)},uZn.gk=function(n){return Inn(uFt,EZn,155,n,0,1)},zW(Ytt,"EcorePackageImpl/10",1243),sDn(1244,1,Wrt,Us),uZn.fk=function(n){return F$(n,197)},uZn.gk=function(n){return Inn(hFt,EZn,197,n,0,1)},zW(Ytt,"EcorePackageImpl/11",1244),sDn(1245,1,Wrt,Gs),uZn.fk=function(n){return F$(n,58)},uZn.gk=function(n){return Inn(nFt,EZn,58,n,0,1)},zW(Ytt,"EcorePackageImpl/12",1245),sDn(1246,1,Wrt,qs),uZn.fk=function(n){return F$(n,411)},uZn.gk=function(n){return Inn(p_t,yrt,62,n,0,1)},zW(Ytt,"EcorePackageImpl/13",1246),sDn(1247,1,Wrt,Xs),uZn.fk=function(n){return F$(n,241)},uZn.gk=function(n){return Inn(fFt,EZn,241,n,0,1)},zW(Ytt,"EcorePackageImpl/14",1247),sDn(1248,1,Wrt,zs),uZn.fk=function(n){return F$(n,518)},uZn.gk=function(n){return Inn(m_t,EZn,2116,n,0,1)},zW(Ytt,"EcorePackageImpl/15",1248),sDn(1249,1,Wrt,Vs),uZn.fk=function(n){return F$(n,102)},uZn.gk=function(n){return Inn(v_t,krt,19,n,0,1)},zW(Ytt,"EcorePackageImpl/16",1249),sDn(1250,1,Wrt,Ws),uZn.fk=function(n){return F$(n,179)},uZn.gk=function(n){return Inn(o_t,krt,179,n,0,1)},zW(Ytt,"EcorePackageImpl/17",1250),sDn(1251,1,Wrt,Qs),uZn.fk=function(n){return F$(n,480)},uZn.gk=function(n){return Inn(a_t,EZn,480,n,0,1)},zW(Ytt,"EcorePackageImpl/18",1251),sDn(1252,1,Wrt,Js),uZn.fk=function(n){return F$(n,561)},uZn.gk=function(n){return Inn(wBt,Xit,561,n,0,1)},zW(Ytt,"EcorePackageImpl/19",1252),sDn(1235,1,Wrt,Ys),uZn.fk=function(n){return F$(n,331)},uZn.gk=function(n){return Inn(u_t,krt,35,n,0,1)},zW(Ytt,"EcorePackageImpl/2",1235),sDn(1253,1,Wrt,Zs),uZn.fk=function(n){return F$(n,248)},uZn.gk=function(n){return Inn(g_t,Prt,89,n,0,1)},zW(Ytt,"EcorePackageImpl/20",1253),sDn(1254,1,Wrt,nh),uZn.fk=function(n){return F$(n,456)},uZn.gk=function(n){return Inn(J_t,EZn,850,n,0,1)},zW(Ytt,"EcorePackageImpl/21",1254),sDn(1255,1,Wrt,th),uZn.fk=function(n){return KA(n)},uZn.gk=function(n){return Inn(cot,zZn,484,n,8,1)},zW(Ytt,"EcorePackageImpl/22",1255),sDn(1256,1,Wrt,eh),uZn.fk=function(n){return F$(n,195)},uZn.gk=function(n){return Inn(tUt,zZn,195,n,0,2)},zW(Ytt,"EcorePackageImpl/23",1256),sDn(1257,1,Wrt,ih),uZn.fk=function(n){return F$(n,222)},uZn.gk=function(n){return Inn(uot,zZn,222,n,0,1)},zW(Ytt,"EcorePackageImpl/24",1257),sDn(1258,1,Wrt,rh),uZn.fk=function(n){return F$(n,180)},uZn.gk=function(n){return Inn(hot,zZn,180,n,0,1)},zW(Ytt,"EcorePackageImpl/25",1258),sDn(1259,1,Wrt,ch),uZn.fk=function(n){return F$(n,206)},uZn.gk=function(n){return Inn(iot,zZn,206,n,0,1)},zW(Ytt,"EcorePackageImpl/26",1259),sDn(1260,1,Wrt,ah),uZn.fk=function(n){return!1},uZn.gk=function(n){return Inn(aUt,EZn,2215,n,0,1)},zW(Ytt,"EcorePackageImpl/27",1260),sDn(1261,1,Wrt,oh),uZn.fk=function(n){return FA(n)},uZn.gk=function(n){return Inn(fot,zZn,345,n,7,1)},zW(Ytt,"EcorePackageImpl/28",1261),sDn(1262,1,Wrt,uh),uZn.fk=function(n){return F$(n,61)},uZn.gk=function(n){return Inn(CFt,H3n,61,n,0,1)},zW(Ytt,"EcorePackageImpl/29",1262),sDn(1236,1,Wrt,sh),uZn.fk=function(n){return F$(n,519)},uZn.gk=function(n){return Inn(c_t,{3:1,4:1,5:1,2033:1},598,n,0,1)},zW(Ytt,"EcorePackageImpl/3",1236),sDn(1263,1,Wrt,hh),uZn.fk=function(n){return F$(n,582)},uZn.gk=function(n){return Inn(BFt,EZn,2039,n,0,1)},zW(Ytt,"EcorePackageImpl/30",1263),sDn(1264,1,Wrt,fh),uZn.fk=function(n){return F$(n,160)},uZn.gk=function(n){return Inn(IBt,H3n,160,n,0,1)},zW(Ytt,"EcorePackageImpl/31",1264),sDn(1265,1,Wrt,lh),uZn.fk=function(n){return F$(n,76)},uZn.gk=function(n){return Inn(Z_t,Qrt,76,n,0,1)},zW(Ytt,"EcorePackageImpl/32",1265),sDn(1266,1,Wrt,bh),uZn.fk=function(n){return F$(n,161)},uZn.gk=function(n){return Inn(lot,zZn,161,n,0,1)},zW(Ytt,"EcorePackageImpl/33",1266),sDn(1267,1,Wrt,wh),uZn.fk=function(n){return F$(n,17)},uZn.gk=function(n){return Inn(dot,zZn,17,n,0,1)},zW(Ytt,"EcorePackageImpl/34",1267),sDn(1268,1,Wrt,dh),uZn.fk=function(n){return F$(n,296)},uZn.gk=function(n){return Inn(gat,EZn,296,n,0,1)},zW(Ytt,"EcorePackageImpl/35",1268),sDn(1269,1,Wrt,gh),uZn.fk=function(n){return F$(n,168)},uZn.gk=function(n){return Inn(yot,zZn,168,n,0,1)},zW(Ytt,"EcorePackageImpl/36",1269),sDn(1270,1,Wrt,ph),uZn.fk=function(n){return F$(n,85)},uZn.gk=function(n){return Inn(mat,EZn,85,n,0,1)},zW(Ytt,"EcorePackageImpl/37",1270),sDn(1271,1,Wrt,mh),uZn.fk=function(n){return F$(n,599)},uZn.gk=function(n){return Inn(jBt,EZn,599,n,0,1)},zW(Ytt,"EcorePackageImpl/38",1271),sDn(1272,1,Wrt,vh),uZn.fk=function(n){return!1},uZn.gk=function(n){return Inn(oUt,EZn,2216,n,0,1)},zW(Ytt,"EcorePackageImpl/39",1272),sDn(1237,1,Wrt,kh),uZn.fk=function(n){return F$(n,90)},uZn.gk=function(n){return Inn(h_t,EZn,29,n,0,1)},zW(Ytt,"EcorePackageImpl/4",1237),sDn(1273,1,Wrt,yh),uZn.fk=function(n){return F$(n,191)},uZn.gk=function(n){return Inn(Tot,zZn,191,n,0,1)},zW(Ytt,"EcorePackageImpl/40",1273),sDn(1274,1,Wrt,Mh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(Ytt,"EcorePackageImpl/41",1274),sDn(1275,1,Wrt,Th),uZn.fk=function(n){return F$(n,596)},uZn.gk=function(n){return Inn(OFt,EZn,596,n,0,1)},zW(Ytt,"EcorePackageImpl/42",1275),sDn(1276,1,Wrt,jh),uZn.fk=function(n){return!1},uZn.gk=function(n){return Inn(uUt,zZn,2217,n,0,1)},zW(Ytt,"EcorePackageImpl/43",1276),sDn(1277,1,Wrt,Eh),uZn.fk=function(n){return F$(n,44)},uZn.gk=function(n){return Inn(Sat,c1n,44,n,0,1)},zW(Ytt,"EcorePackageImpl/44",1277),sDn(1238,1,Wrt,Sh),uZn.fk=function(n){return F$(n,142)},uZn.gk=function(n){return Inn(s_t,EZn,142,n,0,1)},zW(Ytt,"EcorePackageImpl/5",1238),sDn(1239,1,Wrt,Ph),uZn.fk=function(n){return F$(n,156)},uZn.gk=function(n){return Inn(f_t,EZn,156,n,0,1)},zW(Ytt,"EcorePackageImpl/6",1239),sDn(1240,1,Wrt,Ch),uZn.fk=function(n){return F$(n,468)},uZn.gk=function(n){return Inn(w_t,EZn,685,n,0,1)},zW(Ytt,"EcorePackageImpl/7",1240),sDn(1241,1,Wrt,Ih),uZn.fk=function(n){return F$(n,582)},uZn.gk=function(n){return Inn(d_t,EZn,694,n,0,1)},zW(Ytt,"EcorePackageImpl/8",1241),sDn(1242,1,Wrt,Oh),uZn.fk=function(n){return F$(n,479)},uZn.gk=function(n){return Inn(sFt,EZn,479,n,0,1)},zW(Ytt,"EcorePackageImpl/9",1242),sDn(1038,2080,Git,Qy),uZn.Mi=function(n,t){wdn(this,uG(t,424))},uZn.Qi=function(n,t){GAn(this,n,uG(t,424))},zW(Ytt,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1038),sDn(1039,152,Bit,SQ),uZn.jj=function(){return this.a.a},zW(Ytt,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1039),sDn(1067,1066,{},e$),zW("org.eclipse.emf.ecore.plugin","EcorePlugin",1067);var mBt,vBt,kBt,yBt,MBt,TBt,jBt=Iq(Jrt,"Resource");sDn(799,1524,Yrt),uZn.Hl=function(n){},uZn.Il=function(n){},uZn.El=function(){return!this.a&&(this.a=new qm(this)),this.a},uZn.Fl=function(n){var t,e,i,r,c;if((i=n.length)>0){if(s3(0,n.length),47==n.charCodeAt(0)){for(c=new R7(4),r=1,t=1;t<i;++t)s3(t,n.length),47==n.charCodeAt(t)&&(kD(c,r==t?"":(Knn(r,t,n.length),n.substr(r,t-r))),r=t+1);return kD(c,(s3(r,n.length+1),n.substr(r))),zEn(this,c)}s3(i-1,n.length),63==n.charCodeAt(i-1)&&(e=T_(n,$Cn(63),i-2))>0&&(Knn(0,e,n.length),n=n.substr(0,e))}return lNn(this,n)},uZn.Gl=function(){return this.c},uZn.Ib=function(){return Ij(this.Rm)+"@"+(Hon(this)>>>0).toString(16)+" uri='"+this.d+"'"},uZn.b=!1,zW(Zrt,"ResourceImpl",799),sDn(1525,799,Yrt,Xm),zW(Zrt,"BinaryResourceImpl",1525),sDn(1190,708,Jet),uZn.bj=function(n){return F$(n,58)?JZ(this,uG(n,58)):F$(n,599)?new DD(uG(n,599).El()):xA(n)===xA(this.f)?uG(n,16).Kc():(EK(),KFt.a)},uZn.Ob=function(){return u$n(this)},uZn.a=!1,zW(art,"EcoreUtil/ContentTreeIterator",1190),sDn(1526,1190,Jet,dV),uZn.bj=function(n){return xA(n)===xA(this.f)?uG(n,15).Kc():new L6(uG(n,58))},zW(Zrt,"ResourceImpl/5",1526),sDn(658,2092,Mrt,qm),uZn.Hc=function(n){return this.i<=4?sSn(this,n):F$(n,54)&&uG(n,54).Jh()==this.a},uZn.Mi=function(n,t){n==this.i-1&&(this.a.b||(this.a.b=!0))},uZn.Oi=function(n,t){0==n?this.a.b||(this.a.b=!0):Ann(this,n,t)},uZn.Qi=function(n,t){},uZn.Ri=function(n,t,e){},uZn.Lj=function(){return 2},uZn.jj=function(){return this.a},uZn.Mj=function(){return!0},uZn.Nj=function(n,t){return t=uG(n,54).fi(this.a,t)},uZn.Oj=function(n,t){return uG(n,54).fi(null,t)},uZn.Pj=function(){return!1},uZn.Si=function(){return!0},uZn.aj=function(n){return Inn(nFt,EZn,58,n,0,1)},uZn.Yi=function(){return!1},zW(Zrt,"ResourceImpl/ContentsEList",658),sDn(970,2062,m1n,zm),uZn.fd=function(n){return this.a.Ki(n)},uZn.gc=function(){return this.a.gc()},zW(art,"AbstractSequentialInternalEList/1",970),sDn(634,1,{},HG),zW(art,"BasicExtendedMetaData",634),sDn(1181,1,{},CA),uZn.Jl=function(){return null},uZn.Kl=function(){return-2==this.a&&fw(this,qCn(this.d,this.b)),this.a},uZn.Ll=function(){return null},uZn.Ml=function(){return hZ(),hZ(),zot},uZn.xe=function(){return this.c==wct&&lw(this,ckn(this.d,this.b)),this.c},uZn.Nl=function(){return 0},uZn.a=-2,uZn.c=wct,zW(art,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1181),sDn(1182,1,{},g4),uZn.Jl=function(){return this.a==(N7(),MBt)&&dw(this,TBn(this.f,this.b)),this.a},uZn.Kl=function(){return 0},uZn.Ll=function(){return this.c==(N7(),MBt)&&bw(this,jBn(this.f,this.b)),this.c},uZn.Ml=function(){return!this.d&&pw(this,iqn(this.f,this.b)),this.d},uZn.xe=function(){return this.e==wct&&vw(this,ckn(this.f,this.b)),this.e},uZn.Nl=function(){return-2==this.g&&yw(this,DPn(this.f,this.b)),this.g},uZn.e=wct,uZn.g=-2,zW(art,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1182),sDn(1180,1,{},IA),uZn.b=!1,uZn.c=!1,zW(art,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1180),sDn(1183,1,{},p4),uZn.c=-2,uZn.e=wct,uZn.f=wct,zW(art,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1183),sDn(593,632,Trt,_G),uZn.Lj=function(){return this.c},uZn.ol=function(){return!1},uZn.Wi=function(n,t){return t},uZn.c=0,zW(art,"EDataTypeEList",593);var EBt,SBt,PBt,CBt,IBt=Iq(art,"FeatureMap");sDn(78,593,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},wsn),uZn.bd=function(n,t){iKn(this,n,uG(t,76))},uZn.Fc=function(n){return Qxn(this,uG(n,76))},uZn.Hi=function(n){OW(this,uG(n,76))},uZn.Nj=function(n,t){return q_(this,uG(n,76),t)},uZn.Oj=function(n,t){return X_(this,uG(n,76),t)},uZn.Ti=function(n,t){return bUn(this,n,t)},uZn.Wi=function(n,t){return IVn(this,n,uG(t,76))},uZn.hd=function(n,t){return kFn(this,n,uG(t,76))},uZn.Uj=function(n,t){return z_(this,uG(n,76),t)},uZn.Vj=function(n,t){return V_(this,uG(n,76),t)},uZn.Wj=function(n,t,e){return aPn(this,uG(n,76),uG(t,76),e)},uZn.Zi=function(n,t){return WPn(this,n,uG(t,76))},uZn.Ol=function(n,t){return GHn(this,n,t)},uZn.cd=function(n,t){var e,i,r,c,a,o,u,s,h;for(s=new Drn(t.gc()),r=t.Kc();r.Ob();)if(c=(i=uG(r.Pb(),76)).Lk(),EFn(this.e,c))(!c.Si()||!H5(this,c,i.md())&&!sSn(s,i))&&ttn(s,i);else{for(h=VKn(this.e.Dh(),c),e=uG(this.g,124),a=!0,o=0;o<this.i;++o)if(u=e[o],h.am(u.Lk())){uG(Uyn(this,o,i),76),a=!1;break}a&&ttn(s,i)}return bfn(this,n,s)},uZn.Gc=function(n){var t,e,i,r,c,a,o,u,s;for(u=new Drn(n.gc()),i=n.Kc();i.Ob();)if(r=(e=uG(i.Pb(),76)).Lk(),EFn(this.e,r))(!r.Si()||!H5(this,r,e.md())&&!sSn(u,e))&&ttn(u,e);else{for(s=VKn(this.e.Dh(),r),t=uG(this.g,124),c=!0,a=0;a<this.i;++a)if(o=t[a],s.am(o.Lk())){uG(Uyn(this,a,e),76),c=!1;break}c&&ttn(u,e)}return CW(this,u)},uZn.Fi=function(n){return this.j=-1,BGn(this,this.i,n)},uZn.Pl=function(n,t,e){return OBn(this,n,t,e)},uZn.Xk=function(n,t){return $Hn(this,n,t)},uZn.Ql=function(n,t,e){return fXn(this,n,t,e)},uZn.Rl=function(){return this},uZn.Sl=function(n,t){return dXn(this,n,t)},uZn.Tl=function(n){return uG(zrn(this,n),76).Lk()},uZn.Ul=function(n){return uG(zrn(this,n),76).md()},uZn.Vl=function(){return this.b},uZn.Mj=function(){return!0},uZn.Tj=function(){return!0},uZn.Wl=function(n){return!kmn(this,n)},uZn.aj=function(n){return Inn(dBt,Qrt,343,n,0,1)},uZn.pl=function(n){return fK(this,n)},uZn.Wb=function(n){cW(this,n)},uZn.Xl=function(n,t){BXn(this,n,t)},uZn.Yl=function(n){return non(this,n)},uZn.Zl=function(n){ETn(this,n)},zW(art,"BasicFeatureMap",78),sDn(1960,1,UZn),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){if(-1==this.g)throw hv(new xv);yz(this);try{LFn(this.e,this.b,this.a,n),this.d=this.e.j,_yn(this)}catch(t){throw F$(t=Ehn(t),77)?hv(new Fv):hv(t)}},uZn.Ob=function(){return Zln(this)},uZn.Sb=function(){return nbn(this)},uZn.Pb=function(){return _yn(this)},uZn.Tb=function(){return this.a},uZn.Ub=function(){var n;if(nbn(this))return yz(this),this.g=--this.a,this.ul()&&(n=ONn(this.e,this.b,this.c,this.a,this.j),this.j=n),this.i=0,this.j;throw hv(new Bv)},uZn.Vb=function(){return this.a-1},uZn.Qb=function(){if(-1==this.g)throw hv(new xv);yz(this);try{VOn(this.e,this.b,this.g),this.d=this.e.j,this.g<this.a&&(--this.a,--this.c),--this.g}catch(n){throw F$(n=Ehn(n),77)?hv(new Fv):hv(n)}},uZn.ul=function(){return!1},uZn.Wb=function(n){if(-1==this.g)throw hv(new xv);yz(this);try{hqn(this.e,this.b,this.g,n),this.d=this.e.j}catch(t){throw F$(t=Ehn(t),77)?hv(new Fv):hv(t)}},uZn.a=0,uZn.c=0,uZn.d=0,uZn.f=!1,uZn.g=0,uZn.i=0,zW(art,"FeatureMapUtil/BasicFeatureEIterator",1960),sDn(420,1960,UZn,Zsn),uZn.$l=function(){var n,t,e;for(e=this.e.i,n=uG(this.e.g,124);this.c<e;){if(t=n[this.c],this.k.am(t.Lk()))return this.j=this.f?t:t.md(),this.i=2,!0;++this.c}return this.i=1,this.g=-1,!1},uZn._l=function(){var n,t;for(n=uG(this.e.g,124);--this.c>=0;)if(t=n[this.c],this.k.am(t.Lk()))return this.j=this.f?t:t.md(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},zW(art,"BasicFeatureMap/FeatureEIterator",420),sDn(676,420,UZn,yL),uZn.ul=function(){return!0},zW(art,"BasicFeatureMap/ResolvingFeatureEIterator",676),sDn(968,495,Irt,G$),uZn.pj=function(){return this},zW(art,"EContentsEList/1",968),sDn(969,495,Irt,kL),uZn.ul=function(){return!1},zW(art,"EContentsEList/2",969),sDn(967,287,Ort,q$),uZn.wl=function(n){},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},zW(art,"EContentsEList/FeatureIteratorImpl/1",967),sDn(840,593,Trt,jD),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EDataTypeEList/Unsettable",840),sDn(1958,593,Trt,ED),uZn.Si=function(){return!0},zW(art,"EDataTypeUniqueEList",1958),sDn(1959,840,Trt,SD),uZn.Si=function(){return!0},zW(art,"EDataTypeUniqueEList/Unsettable",1959),sDn(147,83,Trt,PD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentEList/Resolving",147),sDn(1184,555,Trt,CD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentEList/Unsettable/Resolving",1184),sDn(766,14,Trt,r_),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EObjectContainmentWithInverseEList/Unsettable",766),sDn(1222,766,Trt,c_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1222),sDn(757,504,Trt,ID),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EObjectEList/Unsettable",757),sDn(338,504,Trt,OD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectResolvingEList",338),sDn(1844,757,Trt,AD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectResolvingEList/Unsettable",1844),sDn(1527,1,{},Ah),zW(art,"EObjectValidator",1527),sDn(559,504,Trt,wV),uZn.il=function(){return this.d},uZn.jl=function(){return this.b},uZn.Mj=function(){return!0},uZn.ml=function(){return!0},uZn.b=0,zW(art,"EObjectWithInverseEList",559),sDn(1225,559,Trt,a_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseEList/ManyInverse",1225),sDn(635,559,Trt,o_),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EObjectWithInverseEList/Unsettable",635),sDn(1224,635,Trt,s_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseEList/Unsettable/ManyInverse",1224),sDn(767,559,Trt,u_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectWithInverseResolvingEList",767),sDn(32,767,Trt,f_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseResolvingEList/ManyInverse",32),sDn(768,635,Trt,h_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectWithInverseResolvingEList/Unsettable",768),sDn(1223,768,Trt,l_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1223),sDn(1185,632,Trt),uZn.Li=function(){return 0==(1792&this.b)},uZn.Ni=function(){this.b|=1},uZn.kl=function(){return 0!=(4&this.b)},uZn.Mj=function(){return 0!=(40&this.b)},uZn.ll=function(){return 0!=(16&this.b)},uZn.ml=function(){return 0!=(8&this.b)},uZn.nl=function(){return 0!=(this.b&frt)},uZn.al=function(){return 0!=(32&this.b)},uZn.ol=function(){return 0!=(this.b&w1n)},uZn.fk=function(n){return this.d?v5(this.d,n):this.Lk().Hk().fk(n)},uZn.Qj=function(){return 0!=(2&this.b)?0!=(1&this.b):0!=this.i},uZn.Si=function(){return 0!=(128&this.b)},uZn.Gk=function(){var n;Czn(this),0!=(2&this.b)&&(uN(this.e)?(n=0!=(1&this.b),this.b&=-2,Yv(this,new j9(this.e,2,emn(this.e.Dh(),this.Lk()),n,!1))):this.b&=-2)},uZn.Yi=function(){return 0==(1536&this.b)},uZn.b=0,zW(art,"EcoreEList/Generic",1185),sDn(1186,1185,Trt,yZ),uZn.Lk=function(){return this.a},zW(art,"EcoreEList/Dynamic",1186),sDn(765,66,Qet,Vm),uZn.aj=function(n){return Acn(this.a.a,n)},zW(art,"EcoreEMap/1",765),sDn(764,83,Trt,kV),uZn.Mi=function(n,t){bMn(this.b,uG(t,136))},uZn.Oi=function(n,t){Osn(this.b)},uZn.Pi=function(n,t,e){var i;++(i=this.b,uG(t,136),i).e},uZn.Qi=function(n,t){Vdn(this.b,uG(t,136))},uZn.Ri=function(n,t,e){Vdn(this.b,uG(e,136)),xA(e)===xA(t)&&uG(e,136).Ci(WN(uG(t,136).ld())),bMn(this.b,uG(t,136))},zW(art,"EcoreEMap/DelegateEObjectContainmentEList",764),sDn(1220,141,urt,xan),zW(art,"EcoreEMap/Unsettable",1220),sDn(1221,764,Trt,b_),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1221),sDn(1189,215,B0n,DW),uZn.a=!1,uZn.b=!1,zW(art,"EcoreUtil/Copier",1189),sDn(759,1,$Zn,L6),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return Ymn(this)},uZn.Pb=function(){var n;return Ymn(this),n=this.b,this.b=null,n},uZn.Qb=function(){this.a.Qb()},zW(art,"EcoreUtil/ProperContentIterator",759),sDn(1528,1527,{},_l),zW(art,"EcoreValidator",1528),Iq(art,"FeatureMapUtil/Validator"),sDn(1295,1,{2041:1},Lh),uZn.am=function(n){return!0},zW(art,"FeatureMapUtil/1",1295),sDn(773,1,{2041:1},MQn),uZn.am=function(n){var t;return this.c==n||(null==(t=gK(cQ(this.a,n)))?DBn(this,n)?(W9(this.a,n,(qx(),eot)),!0):(W9(this.a,n,(qx(),tot)),!1):t==(qx(),eot))},uZn.e=!1,zW(art,"FeatureMapUtil/BasicValidator",773),sDn(774,45,B0n,U$),zW(art,"FeatureMapUtil/BasicValidator/Cache",774),sDn(509,56,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,71:1,97:1},OA),uZn.bd=function(n,t){LFn(this.c,this.b,n,t)},uZn.Fc=function(n){return GHn(this.c,this.b,n)},uZn.cd=function(n,t){return _Xn(this.c,this.b,n,t)},uZn.Gc=function(n){return K$(this,n)},uZn.Gi=function(n,t){hrn(this.c,this.b,n,t)},uZn.Wk=function(n,t){return OBn(this.c,this.b,n,t)},uZn.$i=function(n){return gXn(this.c,this.b,n,!1)},uZn.Ii=function(){return wN(this.c,this.b)},uZn.Ji=function(){return dN(this.c,this.b)},uZn.Ki=function(n){return Onn(this.c,this.b,n)},uZn.Xk=function(n,t){return rF(this,n,t)},uZn.$b=function(){Zv(this)},uZn.Hc=function(n){return H5(this.c,this.b,n)},uZn.Ic=function(n){return Run(this.c,this.b,n)},uZn.Xb=function(n){return gXn(this.c,this.b,n,!0)},uZn.Fk=function(n){return this},uZn.dd=function(n){return U5(this.c,this.b,n)},uZn.dc=function(){return $A(this)},uZn.Qj=function(){return!kmn(this.c,this.b)},uZn.Kc=function(){return kin(this.c,this.b)},uZn.ed=function(){return yin(this.c,this.b)},uZn.fd=function(n){return lgn(this.c,this.b,n)},uZn.Ti=function(n,t){return EGn(this.c,this.b,n,t)},uZn.Ui=function(n,t){xnn(this.c,this.b,n,t)},uZn.gd=function(n){return VOn(this.c,this.b,n)},uZn.Mc=function(n){return DHn(this.c,this.b,n)},uZn.hd=function(n,t){return hqn(this.c,this.b,n,t)},uZn.Wb=function(n){C$n(this.c,this.b),K$(this,uG(n,15))},uZn.gc=function(){return fgn(this.c,this.b)},uZn.Pc=function(){return v4(this.c,this.b)},uZn.Qc=function(n){return G5(this.c,this.b,n)},uZn.Ib=function(){var n,t;for((t=new zM).a+="[",n=wN(this.c,this.b);Zln(n);)VA(t,ox(_yn(n))),Zln(n)&&(t.a+=TZn);return t.a+="]",t.a},uZn.Gk=function(){C$n(this.c,this.b)},zW(art,"FeatureMapUtil/FeatureEList",509),sDn(644,38,Bit,i8),uZn.hj=function(n){return ydn(this,n)},uZn.mj=function(n){var t,e,i,r;switch(this.d){case 1:case 2:if(xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.g=n.ij(),1==n.gj()&&(this.d=1),!0;break;case 3:if(3===n.gj()&&xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.d=5,ttn(t=new Drn(2),this.g),ttn(t,n.ij()),this.g=t,!0;break;case 5:if(3===n.gj()&&xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return uG(this.g,16).Fc(n.ij()),!0;break;case 4:switch(n.gj()){case 3:if(xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.d=1,this.g=n.ij(),!0;break;case 4:if(xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.d=6,ttn(r=new Drn(2),this.n),ttn(r,n.kj()),this.n=r,i=Uhn(cT(YHt,1),W1n,28,15,[this.o,n.lj()]),this.g=i,!0}break;case 6:if(4===n.gj()&&xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return uG(this.n,16).Fc(n.kj()),qGn(i=uG(this.g,53),0,e=Inn(YHt,W1n,28,i.length+1,15,1),0,i.length),e[i.length]=n.lj(),this.g=e,!0}return!1},zW(art,"FeatureMapUtil/FeatureENotificationImpl",644),sDn(564,509,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},Cq),uZn.Ol=function(n,t){return GHn(this.c,n,t)},uZn.Pl=function(n,t,e){return OBn(this.c,n,t,e)},uZn.Ql=function(n,t,e){return fXn(this.c,n,t,e)},uZn.Rl=function(){return this},uZn.Sl=function(n,t){return dXn(this.c,n,t)},uZn.Tl=function(n){return uG(gXn(this.c,this.b,n,!1),76).Lk()},uZn.Ul=function(n){return uG(gXn(this.c,this.b,n,!1),76).md()},uZn.Vl=function(){return this.a},uZn.Wl=function(n){return!kmn(this.c,n)},uZn.Xl=function(n,t){BXn(this.c,n,t)},uZn.Yl=function(n){return non(this.c,n)},uZn.Zl=function(n){ETn(this.c,n)},zW(art,"FeatureMapUtil/FeatureFeatureMap",564),sDn(1294,1,ort,PA),uZn.Fk=function(n){return gXn(this.b,this.a,-1,n)},uZn.Qj=function(){return!kmn(this.b,this.a)},uZn.Wb=function(n){BXn(this.b,this.a,n)},uZn.Gk=function(){C$n(this.b,this.a)},zW(art,"FeatureMapUtil/FeatureValue",1294);var OBt,ABt,LBt,NBt,$Bt,DBt=Iq(gct,"AnyType");sDn(680,63,S1n,PM),zW(gct,"InvalidDatatypeValueException",680);var xBt,RBt,KBt,FBt,_Bt,BBt,HBt,UBt,GBt,qBt,XBt,zBt,VBt,WBt,QBt,JBt,YBt,ZBt,nHt,tHt,eHt,iHt,rHt,cHt,aHt,oHt,uHt,sHt,hHt,fHt,lHt=Iq(gct,pct),bHt=Iq(gct,mct),wHt=Iq(gct,vct);sDn(844,516,{110:1,94:1,93:1,58:1,54:1,99:1,857:1},iy),uZn.Lh=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new wsn(this,0)),this.c):(!this.c&&(this.c=new wsn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)):(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Vl();case 2:return e?(!this.b&&(this.b=new wsn(this,2)),this.b):(!this.b&&(this.b=new wsn(this,2)),this.b.b)}return $tn(this,n-iQ(this.ii()),ern(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.c&&(this.c=new wsn(this,0)),$Hn(this.c,n,e);case 1:return(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),71)).Xk(n,e);case 2:return!this.b&&(this.b=new wsn(this,2)),$Hn(this.b,n,e)}return uG(ern(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),t),69).wk().Ak(this,Wen(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).dc();case 2:return!!this.b&&0!=this.b.i}return l5(this,n-iQ(this.ii()),ern(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void cW(this.c,t);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Wb(t);case 2:return!this.b&&(this.b=new wsn(this,2)),void cW(this.b,t)}lpn(this,n-iQ(this.ii()),ern(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),n),t)},uZn.ii=function(){return uVn(),KBt},uZn.ki=function(n){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void Czn(this.c);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).$b();case 2:return!this.b&&(this.b=new wsn(this,2)),void Czn(this.b)}sdn(this,n-iQ(this.ii()),ern(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.Ib=function(){var n;return 0!=(4&this.j)?vxn(this):((n=new fx(vxn(this))).a+=" (mixed: ",zA(n,this.c),n.a+=", anyAttribute: ",zA(n,this.b),n.a+=")",n.a)},zW(kct,"AnyTypeImpl",844),sDn(681,516,{110:1,94:1,93:1,58:1,54:1,99:1,2119:1,681:1},Uh),uZn.Lh=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return $tn(this,n-iQ((uVn(),JBt)),ern(0==(2&this.j)?JBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t,e)},uZn.Wh=function(n){switch(n){case 0:return null!=this.a;case 1:return null!=this.b}return l5(this,n-iQ((uVn(),JBt)),ern(0==(2&this.j)?JBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.bi=function(n,t){switch(n){case 0:return void jw(this,mK(t));case 1:return void Sw(this,mK(t))}lpn(this,n-iQ((uVn(),JBt)),ern(0==(2&this.j)?JBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t)},uZn.ii=function(){return uVn(),JBt},uZn.ki=function(n){switch(n){case 0:return void(this.a=null);case 1:return void(this.b=null)}sdn(this,n-iQ((uVn(),JBt)),ern(0==(2&this.j)?JBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.Ib=function(){var n;return 0!=(4&this.j)?vxn(this):((n=new fx(vxn(this))).a+=" (data: ",VA(n,this.a),n.a+=", target: ",VA(n,this.b),n.a+=")",n.a)},uZn.a=null,uZn.b=null,zW(kct,"ProcessingInstructionImpl",681),sDn(682,844,{110:1,94:1,93:1,58:1,54:1,99:1,857:1,2120:1,682:1},ry),uZn.Lh=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new wsn(this,0)),this.c):(!this.c&&(this.c=new wsn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)):(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Vl();case 2:return e?(!this.b&&(this.b=new wsn(this,2)),this.b):(!this.b&&(this.b=new wsn(this,2)),this.b.b);case 3:return!this.c&&(this.c=new wsn(this,0)),mK(dXn(this.c,(uVn(),nHt),!0));case 4:return g_(this.a,(!this.c&&(this.c=new wsn(this,0)),mK(dXn(this.c,(uVn(),nHt),!0))));case 5:return this.a}return $tn(this,n-iQ((uVn(),ZBt)),ern(0==(2&this.j)?ZBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).dc();case 2:return!!this.b&&0!=this.b.i;case 3:return!this.c&&(this.c=new wsn(this,0)),null!=mK(dXn(this.c,(uVn(),nHt),!0));case 4:return null!=g_(this.a,(!this.c&&(this.c=new wsn(this,0)),mK(dXn(this.c,(uVn(),nHt),!0))));case 5:return!!this.a}return l5(this,n-iQ((uVn(),ZBt)),ern(0==(2&this.j)?ZBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void cW(this.c,t);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Wb(t);case 2:return!this.b&&(this.b=new wsn(this,2)),void cW(this.b,t);case 3:return void m4(this,mK(t));case 4:return void m4(this,d_(this.a,t));case 5:return void Ew(this,uG(t,156))}lpn(this,n-iQ((uVn(),ZBt)),ern(0==(2&this.j)?ZBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t)},uZn.ii=function(){return uVn(),ZBt},uZn.ki=function(n){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void Czn(this.c);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).$b();case 2:return!this.b&&(this.b=new wsn(this,2)),void Czn(this.b);case 3:return!this.c&&(this.c=new wsn(this,0)),void BXn(this.c,(uVn(),nHt),null);case 4:return void m4(this,d_(this.a,null));case 5:return void(this.a=null)}sdn(this,n-iQ((uVn(),ZBt)),ern(0==(2&this.j)?ZBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},zW(kct,"SimpleAnyTypeImpl",682),sDn(683,516,{110:1,94:1,93:1,58:1,54:1,99:1,2121:1,683:1},cy),uZn.Lh=function(n,t,e){switch(n){case 0:return e?(!this.a&&(this.a=new wsn(this,0)),this.a):(!this.a&&(this.a=new wsn(this,0)),this.a.b);case 1:return e?(!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),this.b):(!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),Tnn(this.b));case 2:return e?(!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),this.c):(!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),Tnn(this.c));case 3:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),iHt));case 4:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),rHt));case 5:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),aHt));case 6:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),oHt))}return $tn(this,n-iQ((uVn(),eHt)),ern(0==(2&this.j)?eHt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.a&&(this.a=new wsn(this,0)),$Hn(this.a,n,e);case 1:return!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),G_(this.b,n,e);case 2:return!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),G_(this.c,n,e);case 5:return!this.a&&(this.a=new wsn(this,0)),rF(T2(this.a,(uVn(),aHt)),n,e)}return uG(ern(0==(2&this.j)?(uVn(),eHt):(!this.k&&(this.k=new Ll),this.k).Nk(),t),69).wk().Ak(this,Wen(this),t-iQ((uVn(),eHt)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.a&&0!=this.a.i;case 1:return!!this.b&&0!=this.b.f;case 2:return!!this.c&&0!=this.c.f;case 3:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),iHt)));case 4:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),rHt)));case 5:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),aHt)));case 6:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),oHt)))}return l5(this,n-iQ((uVn(),eHt)),ern(0==(2&this.j)?eHt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.a&&(this.a=new wsn(this,0)),void cW(this.a,t);case 1:return!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),void Jun(this.b,t);case 2:return!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),void Jun(this.c,t);case 3:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),iHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,iHt),uG(t,16));case 4:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),rHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,rHt),uG(t,16));case 5:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),aHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,aHt),uG(t,16));case 6:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),oHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,oHt),uG(t,16))}lpn(this,n-iQ((uVn(),eHt)),ern(0==(2&this.j)?eHt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t)},uZn.ii=function(){return uVn(),eHt},uZn.ki=function(n){switch(n){case 0:return!this.a&&(this.a=new wsn(this,0)),void Czn(this.a);case 1:return!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),void this.b.c.$b();case 2:return!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),void this.c.c.$b();case 3:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),iHt)));case 4:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),rHt)));case 5:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),aHt)));case 6:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),oHt)))}sdn(this,n-iQ((uVn(),eHt)),ern(0==(2&this.j)?eHt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.Ib=function(){var n;return 0!=(4&this.j)?vxn(this):((n=new fx(vxn(this))).a+=" (mixed: ",zA(n,this.a),n.a+=")",n.a)},zW(kct,"XMLTypeDocumentRootImpl",683),sDn(2028,720,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1,2122:1},Nh),uZn.ri=function(n,t){switch(n.hk()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return null==t?null:cpn(t);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return mK(t);case 6:return lK(uG(t,195));case 12:case 47:case 49:case 11:return cWn(this,n,t);case 13:return null==t?null:VXn(uG(t,247));case 15:case 14:return null==t?null:MW(uM(pK(t)));case 17:return oPn((uVn(),t));case 18:return oPn(t);case 21:case 20:return null==t?null:TW(uG(t,161).a);case 27:return bK(uG(t,195));case 30:return STn((uVn(),uG(t,15)));case 31:return STn(uG(t,15));case 40:return dK((uVn(),t));case 42:return uPn((uVn(),t));case 43:return uPn(t);case 59:case 48:return wK((uVn(),t));default:throw hv(new vM(tet+n.xe()+eet))}},uZn.si=function(n){var t;switch(-1==n.G&&(n.G=(t=Hrn(n))?Hyn(t.vi(),n):-1),n.G){case 0:return new iy;case 1:return new Uh;case 2:return new ry;case 3:return new cy;default:throw hv(new vM(cet+n.zb+eet))}},uZn.ti=function(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;switch(n.hk()){case 5:case 52:case 4:return t;case 6:return syn(t);case 8:case 7:return null==t?null:MPn(t);case 9:return null==t?null:Ben(vUn((i=yXn(t,!0)).length>0&&(s3(0,i.length),43==i.charCodeAt(0))?(s3(1,i.length+1),i.substr(1)):i,-128,127)<<24>>24);case 10:return null==t?null:Ben(vUn((r=yXn(t,!0)).length>0&&(s3(0,r.length),43==r.charCodeAt(0))?(s3(1,r.length+1),r.substr(1)):r,-128,127)<<24>>24);case 11:return mK(cYn(this,(uVn(),HBt),t));case 12:return mK(cYn(this,(uVn(),UBt),t));case 13:return null==t?null:new Wj(yXn(t,!0));case 15:case 14:return iRn(t);case 16:return mK(cYn(this,(uVn(),GBt),t));case 17:return bvn((uVn(),t));case 18:return bvn(t);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return yXn(t,!0);case 21:case 20:return vRn(t);case 22:return mK(cYn(this,(uVn(),qBt),t));case 23:return mK(cYn(this,(uVn(),XBt),t));case 24:return mK(cYn(this,(uVn(),zBt),t));case 25:return mK(cYn(this,(uVn(),VBt),t));case 26:return mK(cYn(this,(uVn(),WBt),t));case 27:return Ckn(t);case 30:return wvn((uVn(),t));case 31:return wvn(t);case 32:return null==t?null:xwn(vUn((h=yXn(t,!0)).length>0&&(s3(0,h.length),43==h.charCodeAt(0))?(s3(1,h.length+1),h.substr(1)):h,j1n,vZn));case 33:return null==t?null:new PN((f=yXn(t,!0)).length>0&&(s3(0,f.length),43==f.charCodeAt(0))?(s3(1,f.length+1),f.substr(1)):f);case 34:return null==t?null:xwn(vUn((l=yXn(t,!0)).length>0&&(s3(0,l.length),43==l.charCodeAt(0))?(s3(1,l.length+1),l.substr(1)):l,j1n,vZn));case 36:return null==t?null:Hvn(tJn((b=yXn(t,!0)).length>0&&(s3(0,b.length),43==b.charCodeAt(0))?(s3(1,b.length+1),b.substr(1)):b));case 37:return null==t?null:Hvn(tJn((w=yXn(t,!0)).length>0&&(s3(0,w.length),43==w.charCodeAt(0))?(s3(1,w.length+1),w.substr(1)):w));case 40:return nTn((uVn(),t));case 42:return dvn((uVn(),t));case 43:return dvn(t);case 44:return null==t?null:new PN((d=yXn(t,!0)).length>0&&(s3(0,d.length),43==d.charCodeAt(0))?(s3(1,d.length+1),d.substr(1)):d);case 45:return null==t?null:new PN((g=yXn(t,!0)).length>0&&(s3(0,g.length),43==g.charCodeAt(0))?(s3(1,g.length+1),g.substr(1)):g);case 46:return yXn(t,!1);case 47:return mK(cYn(this,(uVn(),QBt),t));case 59:case 48:return ZMn((uVn(),t));case 49:return mK(cYn(this,(uVn(),YBt),t));case 50:return null==t?null:Rwn(vUn((p=yXn(t,!0)).length>0&&(s3(0,p.length),43==p.charCodeAt(0))?(s3(1,p.length+1),p.substr(1)):p,xrt,32767)<<16>>16);case 51:return null==t?null:Rwn(vUn((c=yXn(t,!0)).length>0&&(s3(0,c.length),43==c.charCodeAt(0))?(s3(1,c.length+1),c.substr(1)):c,xrt,32767)<<16>>16);case 53:return mK(cYn(this,(uVn(),tHt),t));case 55:return null==t?null:Rwn(vUn((a=yXn(t,!0)).length>0&&(s3(0,a.length),43==a.charCodeAt(0))?(s3(1,a.length+1),a.substr(1)):a,xrt,32767)<<16>>16);case 56:return null==t?null:Rwn(vUn((o=yXn(t,!0)).length>0&&(s3(0,o.length),43==o.charCodeAt(0))?(s3(1,o.length+1),o.substr(1)):o,xrt,32767)<<16>>16);case 57:return null==t?null:Hvn(tJn((u=yXn(t,!0)).length>0&&(s3(0,u.length),43==u.charCodeAt(0))?(s3(1,u.length+1),u.substr(1)):u));case 58:return null==t?null:Hvn(tJn((s=yXn(t,!0)).length>0&&(s3(0,s.length),43==s.charCodeAt(0))?(s3(1,s.length+1),s.substr(1)):s));case 60:return null==t?null:xwn(vUn((e=yXn(t,!0)).length>0&&(s3(0,e.length),43==e.charCodeAt(0))?(s3(1,e.length+1),e.substr(1)):e,j1n,vZn));case 61:return null==t?null:xwn(vUn(yXn(t,!0),j1n,vZn));default:throw hv(new vM(tet+n.xe()+eet))}},zW(kct,"XMLTypeFactoryImpl",2028),sDn(594,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1,2044:1,594:1},gJ),uZn.N=!1,uZn.O=!1;var dHt,gHt,pHt,mHt,vHt,kHt=!1;zW(kct,"XMLTypePackageImpl",594),sDn(1961,1,{851:1},$h),uZn.Kk=function(){return vGn(),qHt},zW(kct,"XMLTypePackageImpl/1",1961),sDn(1970,1,Wrt,Dh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/10",1970),sDn(1971,1,Wrt,xh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/11",1971),sDn(1972,1,Wrt,Rh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/12",1972),sDn(1973,1,Wrt,Kh),uZn.fk=function(n){return FA(n)},uZn.gk=function(n){return Inn(fot,zZn,345,n,7,1)},zW(kct,"XMLTypePackageImpl/13",1973),sDn(1974,1,Wrt,Fh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/14",1974),sDn(1975,1,Wrt,_h),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/15",1975),sDn(1976,1,Wrt,Bh),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/16",1976),sDn(1977,1,Wrt,Hh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/17",1977),sDn(1978,1,Wrt,Gh),uZn.fk=function(n){return F$(n,161)},uZn.gk=function(n){return Inn(lot,zZn,161,n,0,1)},zW(kct,"XMLTypePackageImpl/18",1978),sDn(1979,1,Wrt,qh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/19",1979),sDn(1962,1,Wrt,Xh),uZn.fk=function(n){return F$(n,857)},uZn.gk=function(n){return Inn(DBt,EZn,857,n,0,1)},zW(kct,"XMLTypePackageImpl/2",1962),sDn(1980,1,Wrt,zh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/20",1980),sDn(1981,1,Wrt,Vh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/21",1981),sDn(1982,1,Wrt,Wh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/22",1982),sDn(1983,1,Wrt,Qh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/23",1983),sDn(1984,1,Wrt,Jh),uZn.fk=function(n){return F$(n,195)},uZn.gk=function(n){return Inn(tUt,zZn,195,n,0,2)},zW(kct,"XMLTypePackageImpl/24",1984),sDn(1985,1,Wrt,Yh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/25",1985),sDn(1986,1,Wrt,Zh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/26",1986),sDn(1987,1,Wrt,nf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/27",1987),sDn(1988,1,Wrt,tf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/28",1988),sDn(1989,1,Wrt,ef),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/29",1989),sDn(1963,1,Wrt,rf),uZn.fk=function(n){return F$(n,681)},uZn.gk=function(n){return Inn(lHt,EZn,2119,n,0,1)},zW(kct,"XMLTypePackageImpl/3",1963),sDn(1990,1,Wrt,cf),uZn.fk=function(n){return F$(n,17)},uZn.gk=function(n){return Inn(dot,zZn,17,n,0,1)},zW(kct,"XMLTypePackageImpl/30",1990),sDn(1991,1,Wrt,af),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/31",1991),sDn(1992,1,Wrt,of),uZn.fk=function(n){return F$(n,168)},uZn.gk=function(n){return Inn(yot,zZn,168,n,0,1)},zW(kct,"XMLTypePackageImpl/32",1992),sDn(1993,1,Wrt,uf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/33",1993),sDn(1994,1,Wrt,sf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/34",1994),sDn(1995,1,Wrt,hf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/35",1995),sDn(1996,1,Wrt,ff),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/36",1996),sDn(1997,1,Wrt,lf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/37",1997),sDn(1998,1,Wrt,bf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/38",1998),sDn(1999,1,Wrt,wf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/39",1999),sDn(1964,1,Wrt,df),uZn.fk=function(n){return F$(n,682)},uZn.gk=function(n){return Inn(bHt,EZn,2120,n,0,1)},zW(kct,"XMLTypePackageImpl/4",1964),sDn(2e3,1,Wrt,gf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/40",2e3),sDn(2001,1,Wrt,pf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/41",2001),sDn(2002,1,Wrt,mf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/42",2002),sDn(2003,1,Wrt,vf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/43",2003),sDn(2004,1,Wrt,kf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/44",2004),sDn(2005,1,Wrt,yf),uZn.fk=function(n){return F$(n,191)},uZn.gk=function(n){return Inn(Tot,zZn,191,n,0,1)},zW(kct,"XMLTypePackageImpl/45",2005),sDn(2006,1,Wrt,Mf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/46",2006),sDn(2007,1,Wrt,Tf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/47",2007),sDn(2008,1,Wrt,jf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/48",2008),sDn(2009,1,Wrt,Ef),uZn.fk=function(n){return F$(n,191)},uZn.gk=function(n){return Inn(Tot,zZn,191,n,0,1)},zW(kct,"XMLTypePackageImpl/49",2009),sDn(1965,1,Wrt,Sf),uZn.fk=function(n){return F$(n,683)},uZn.gk=function(n){return Inn(wHt,EZn,2121,n,0,1)},zW(kct,"XMLTypePackageImpl/5",1965),sDn(2010,1,Wrt,Pf),uZn.fk=function(n){return F$(n,168)},uZn.gk=function(n){return Inn(yot,zZn,168,n,0,1)},zW(kct,"XMLTypePackageImpl/50",2010),sDn(2011,1,Wrt,Cf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/51",2011),sDn(2012,1,Wrt,If),uZn.fk=function(n){return F$(n,17)},uZn.gk=function(n){return Inn(dot,zZn,17,n,0,1)},zW(kct,"XMLTypePackageImpl/52",2012),sDn(1966,1,Wrt,Of),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/6",1966),sDn(1967,1,Wrt,Af),uZn.fk=function(n){return F$(n,195)},uZn.gk=function(n){return Inn(tUt,zZn,195,n,0,2)},zW(kct,"XMLTypePackageImpl/7",1967),sDn(1968,1,Wrt,Lf),uZn.fk=function(n){return KA(n)},uZn.gk=function(n){return Inn(cot,zZn,484,n,8,1)},zW(kct,"XMLTypePackageImpl/8",1968),sDn(1969,1,Wrt,Nf),uZn.fk=function(n){return F$(n,222)},uZn.gk=function(n){return Inn(uot,zZn,222,n,0,1)},zW(kct,"XMLTypePackageImpl/9",1969),sDn(55,63,S1n,CM),zW(Xct,"RegEx/ParseException",55),sDn(836,1,{},$f),uZn.bm=function(n){return n<this.j&&63==VJ(this.i,n)},uZn.cm=function(){var n,t,e,i,r;if(10!=this.c)throw hv(new CM(rZn((t$(),eit))));switch(n=this.a){case 101:n=27;break;case 102:n=12;break;case 110:n=10;break;case 114:n=13;break;case 116:n=9;break;case 120:if(EYn(this),0!=this.c)throw hv(new CM(rZn((t$(),Pit))));if(123==this.a){for(r=0,e=0;;){if(EYn(this),0!=this.c)throw hv(new CM(rZn((t$(),Pit))));if((r=CMn(this.a))<0)break;if(e>16*e)throw hv(new CM(rZn((t$(),Cit))));e=16*e+r}if(125!=this.a)throw hv(new CM(rZn((t$(),Iit))));if(e>zct)throw hv(new CM(rZn((t$(),Oit))));n=e}else{if(r=0,0!=this.c||(r=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(e=r,EYn(this),0!=this.c||(r=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));n=e=16*e+r}break;case 117:if(i=0,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));n=t=16*t+i;break;case 118:if(EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if((t=16*t+i)>zct)throw hv(new CM(rZn((t$(),"parser.descappe.4"))));n=t;break;case 65:case 90:case 122:throw hv(new CM(rZn((t$(),Ait))))}return n},uZn.dm=function(n){var t;switch(n){case 100:t=32==(32&this.e)?kJn("Nd",!0):(QYn(),CHt);break;case 68:t=32==(32&this.e)?kJn("Nd",!1):(QYn(),NHt);break;case 119:t=32==(32&this.e)?kJn("IsWord",!0):(QYn(),HHt);break;case 87:t=32==(32&this.e)?kJn("IsWord",!1):(QYn(),DHt);break;case 115:t=32==(32&this.e)?kJn("IsSpace",!0):(QYn(),RHt);break;case 83:t=32==(32&this.e)?kJn("IsSpace",!1):(QYn(),$Ht);break;default:throw hv(new Ky(Vct+n.toString(16)))}return t},uZn.em=function(n){var t,e,i,r,c,a,o,u,s,h,f;for(this.b=1,EYn(this),t=null,0==this.c&&94==this.a?(EYn(this),n?(QYn(),QYn(),s=new K3(5)):(QYn(),QYn(),HFn(t=new K3(4),0,zct),s=new K3(4))):(QYn(),QYn(),s=new K3(4)),r=!0;1!=(f=this.c)&&(0!=f||93!=this.a||r);){if(r=!1,e=this.a,i=!1,10==f)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:TXn(s,this.dm(e)),i=!0;break;case 105:case 73:case 99:case 67:(e=this.um(s,e))<0&&(i=!0);break;case 112:case 80:if(!(h=PNn(this,e)))throw hv(new CM(rZn((t$(),git))));TXn(s,h),i=!0;break;default:e=this.cm()}else if(20==f){if((c=aR(this.i,58,this.d))<0)throw hv(new CM(rZn((t$(),pit))));if(a=!0,94==VJ(this.i,this.d)&&(++this.d,a=!1),!(o=itn(r1(this.i,this.d,c),a,512==(512&this.e))))throw hv(new CM(rZn((t$(),vit))));if(TXn(s,o),i=!0,c+1>=this.j||93!=VJ(this.i,c+1))throw hv(new CM(rZn((t$(),pit))));this.d=c+2}if(EYn(this),!i)if(0!=this.c||45!=this.a)HFn(s,e,e);else{if(EYn(this),1==(f=this.c))throw hv(new CM(rZn((t$(),mit))));0==f&&93==this.a?(HFn(s,e,e),HFn(s,45,45)):(u=this.a,10==f&&(u=this.cm()),EYn(this),HFn(s,e,u))}(this.e&w1n)==w1n&&0==this.c&&44==this.a&&EYn(this)}if(1==this.c)throw hv(new CM(rZn((t$(),mit))));return t&&(lWn(t,s),s=t),pxn(s),szn(s),this.b=0,EYn(this),s},uZn.fm=function(){var n,t,e,i;for(e=this.em(!1);7!=(i=this.c);){if(n=this.a,(0!=i||45!=n&&38!=n)&&4!=i)throw hv(new CM(rZn((t$(),Eit))));if(EYn(this),9!=this.c)throw hv(new CM(rZn((t$(),jit))));if(t=this.em(!1),4==i)TXn(e,t);else if(45==n)lWn(e,t);else{if(38!=n)throw hv(new Ky("ASSERT"));GVn(e,t)}}return EYn(this),e},uZn.gm=function(){var n,t;return n=this.a-48,QYn(),QYn(),t=new F1(12,null,n),!this.g&&(this.g=new ck),zv(this.g,new Wm(n)),EYn(this),t},uZn.hm=function(){return EYn(this),QYn(),KHt},uZn.im=function(){return EYn(this),QYn(),xHt},uZn.jm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.km=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.lm=function(){return EYn(this),jln()},uZn.mm=function(){return EYn(this),QYn(),_Ht},uZn.nm=function(){return EYn(this),QYn(),UHt},uZn.om=function(){var n;if(this.d>=this.j||64!=(65504&(n=VJ(this.i,this.d++))))throw hv(new CM(rZn((t$(),lit))));return EYn(this),QYn(),QYn(),new IX(0,n-64)},uZn.pm=function(){return EYn(this),VGn()},uZn.qm=function(){return EYn(this),QYn(),GHt},uZn.rm=function(){var n;return QYn(),QYn(),n=new IX(0,105),EYn(this),n},uZn.sm=function(){return EYn(this),QYn(),BHt},uZn.tm=function(){return EYn(this),QYn(),FHt},uZn.um=function(n,t){return this.cm()},uZn.vm=function(){return EYn(this),QYn(),AHt},uZn.wm=function(){var n,t,e,i,r;if(this.d+1>=this.j)throw hv(new CM(rZn((t$(),sit))));if(i=-1,t=null,49<=(n=VJ(this.i,this.d))&&n<=57){if(i=n-48,!this.g&&(this.g=new ck),zv(this.g,new Wm(i)),++this.d,41!=VJ(this.i,this.d))throw hv(new CM(rZn((t$(),ait))));++this.d}else switch(63==n&&--this.d,EYn(this),(t=eYn(this)).e){case 20:case 21:case 22:case 23:break;case 8:if(7!=this.c)throw hv(new CM(rZn((t$(),ait))));break;default:throw hv(new CM(rZn((t$(),hit))))}if(EYn(this),e=null,2==(r=Evn(this)).e){if(2!=r.Pm())throw hv(new CM(rZn((t$(),fit))));e=r.Lm(1),r=r.Lm(0)}if(7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),QYn(),QYn(),new bin(i,t,r,e)},uZn.xm=function(){return EYn(this),QYn(),LHt},uZn.ym=function(){var n;if(EYn(this),n=jV(24,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.zm=function(){var n;if(EYn(this),n=jV(20,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Am=function(){var n;if(EYn(this),n=jV(22,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Bm=function(){var n,t,e,i,r;for(n=0,e=0,t=-1;this.d<this.j&&0!=(r=U$n(t=VJ(this.i,this.d)));)n|=r,++this.d;if(this.d>=this.j)throw hv(new CM(rZn((t$(),oit))));if(45==t){for(++this.d;this.d<this.j&&0!=(r=U$n(t=VJ(this.i,this.d)));)e|=r,++this.d;if(this.d>=this.j)throw hv(new CM(rZn((t$(),oit))))}if(58==t){if(++this.d,EYn(this),i=GW(Evn(this),n,e),7!=this.c)throw hv(new CM(rZn((t$(),ait))));EYn(this)}else{if(41!=t)throw hv(new CM(rZn((t$(),uit))));++this.d,EYn(this),i=GW(Evn(this),n,e)}return i},uZn.Cm=function(){var n;if(EYn(this),n=jV(21,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Dm=function(){var n;if(EYn(this),n=jV(23,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Em=function(){var n,t;if(EYn(this),n=this.f++,t=EV(Evn(this),n),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),t},uZn.Fm=function(){var n;if(EYn(this),n=EV(Evn(this),0),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Gm=function(n){return EYn(this),5==this.c?(EYn(this),CX(n,(QYn(),QYn(),new n8(9,n)))):CX(n,(QYn(),QYn(),new n8(3,n)))},uZn.Hm=function(n){var t;return EYn(this),QYn(),QYn(),t=new QN(2),5==this.c?(EYn(this),kzn(t,OHt),kzn(t,n)):(kzn(t,n),kzn(t,OHt)),t},uZn.Im=function(n){return EYn(this),5==this.c?(EYn(this),QYn(),QYn(),new n8(9,n)):(QYn(),QYn(),new n8(3,n))},uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.f=1,uZn.g=null,uZn.j=0,zW(Xct,"RegEx/RegexParser",836),sDn(1947,836,{},ay),uZn.bm=function(n){return!1},uZn.cm=function(){return R_n(this)},uZn.dm=function(n){return MUn(n)},uZn.em=function(n){return PYn(this)},uZn.fm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.gm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.hm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.im=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.jm=function(){return EYn(this),MUn(67)},uZn.km=function(){return EYn(this),MUn(73)},uZn.lm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.mm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.nm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.om=function(){return EYn(this),MUn(99)},uZn.pm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.qm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.rm=function(){return EYn(this),MUn(105)},uZn.sm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.tm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.um=function(n,t){return TXn(n,MUn(t)),-1},uZn.vm=function(){return EYn(this),QYn(),QYn(),new IX(0,94)},uZn.wm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.xm=function(){return EYn(this),QYn(),QYn(),new IX(0,36)},uZn.ym=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.zm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Am=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Bm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Cm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Dm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Em=function(){var n;if(EYn(this),n=EV(Evn(this),0),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Fm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Gm=function(n){return EYn(this),CX(n,(QYn(),QYn(),new n8(3,n)))},uZn.Hm=function(n){var t;return EYn(this),QYn(),QYn(),kzn(t=new QN(2),n),kzn(t,OHt),t},uZn.Im=function(n){return EYn(this),QYn(),QYn(),new n8(3,n)};var yHt=null,MHt=null;zW(Xct,"RegEx/ParserForXMLSchema",1947),sDn(122,1,aat,Qm),uZn.Jm=function(n){throw hv(new Ky("Not supported."))},uZn.Km=function(){return-1},uZn.Lm=function(n){return null},uZn.Mm=function(){return null},uZn.Nm=function(n){},uZn.Om=function(n){},uZn.Pm=function(){return 0},uZn.Ib=function(){return this.Qm(0)},uZn.Qm=function(n){return 11==this.e?".":""},uZn.e=0;var THt,jHt,EHt,SHt,PHt,CHt,IHt,OHt,AHt,LHt,NHt,$Ht,DHt,xHt,RHt,KHt,FHt,_Ht,BHt,HHt,UHt,GHt,qHt,XHt,zHt=null,VHt=null,WHt=null,QHt=zW(Xct,"RegEx/Token",122);sDn(138,122,{3:1,138:1,122:1},K3),uZn.Qm=function(n){var t,e,i;if(4==this.e)if(this==IHt)e=".";else if(this==CHt)e="\\d";else if(this==HHt)e="\\w";else if(this==RHt)e="\\s";else{for((i=new zM).a+="[",t=0;t<this.b.length;t+=2)0!=(n&w1n)&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?VA(i,Mqn(this.b[t])):(VA(i,Mqn(this.b[t])),i.a+="-",VA(i,Mqn(this.b[t+1])));i.a+="]",e=i.a}else if(this==NHt)e="\\D";else if(this==DHt)e="\\W";else if(this==$Ht)e="\\S";else{for((i=new zM).a+="[^",t=0;t<this.b.length;t+=2)0!=(n&w1n)&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?VA(i,Mqn(this.b[t])):(VA(i,Mqn(this.b[t])),i.a+="-",VA(i,Mqn(this.b[t+1])));i.a+="]",e=i.a}return e},uZn.a=!1,uZn.c=!1,zW(Xct,"RegEx/RangeToken",138),sDn(592,1,{592:1},Wm),uZn.a=0,zW(Xct,"RegEx/RegexParser/ReferencePosition",592),sDn(591,1,{3:1,591:1},gE),uZn.Fb=function(n){var t;return null!=n&&!!F$(n,591)&&(t=uG(n,591),m_(this.b,t.b)&&this.a==t.a)},uZn.Hb=function(){return pln(this.b+"/"+XKn(this.a))},uZn.Ib=function(){return this.c.Qm(this.a)},uZn.a=0,zW(Xct,"RegEx/RegularExpression",591),sDn(228,122,aat,IX),uZn.Km=function(){return this.a},uZn.Qm=function(n){var t,e;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:e="\\"+jF(this.a&D1n);break;case 12:e="\\f";break;case 10:e="\\n";break;case 13:e="\\r";break;case 9:e="\\t";break;case 27:e="\\e";break;default:e=this.a>=P0n?"\\v"+r1(t="0"+(this.a>>>0).toString(16),t.length-6,t.length):""+jF(this.a&D1n)}break;case 8:e=this==AHt||this==LHt?""+jF(this.a&D1n):"\\"+jF(this.a&D1n);break;default:e=null}return e},uZn.a=0,zW(Xct,"RegEx/Token/CharToken",228),sDn(318,122,aat,n8),uZn.Lm=function(n){return this.a},uZn.Nm=function(n){this.b=n},uZn.Om=function(n){this.c=n},uZn.Pm=function(){return 1},uZn.Qm=function(n){var t;if(3==this.e)if(this.c<0&&this.b<0)t=this.a.Qm(n)+"*";else if(this.c==this.b)t=this.a.Qm(n)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)t=this.a.Qm(n)+"{"+this.c+","+this.b+"}";else{if(!(this.c>=0&&this.b<0))throw hv(new Ky("Token#toString(): CLOSURE "+this.c+TZn+this.b));t=this.a.Qm(n)+"{"+this.c+",}"}else if(this.c<0&&this.b<0)t=this.a.Qm(n)+"*?";else if(this.c==this.b)t=this.a.Qm(n)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)t=this.a.Qm(n)+"{"+this.c+","+this.b+"}?";else{if(!(this.c>=0&&this.b<0))throw hv(new Ky("Token#toString(): NONGREEDYCLOSURE "+this.c+TZn+this.b));t=this.a.Qm(n)+"{"+this.c+",}?"}return t},uZn.b=0,uZn.c=0,zW(Xct,"RegEx/Token/ClosureToken",318),sDn(837,122,aat,eW),uZn.Lm=function(n){return 0==n?this.a:this.b},uZn.Pm=function(){return 2},uZn.Qm=function(n){return 3==this.b.e&&this.b.Lm(0)==this.a?this.a.Qm(n)+"+":9==this.b.e&&this.b.Lm(0)==this.a?this.a.Qm(n)+"+?":this.a.Qm(n)+""+this.b.Qm(n)},zW(Xct,"RegEx/Token/ConcatToken",837),sDn(1945,122,aat,bin),uZn.Lm=function(n){if(0==n)return this.d;if(1==n)return this.b;throw hv(new Ky("Internal Error: "+n))},uZn.Pm=function(){return this.b?2:1},uZn.Qm=function(n){var t;return t=this.c>0?"(?("+this.c+")":8==this.a.e?"(?("+this.a+")":"(?"+this.a,this.b?t+=this.d+"|"+this.b+")":t+=this.d+")",t},uZn.c=0,zW(Xct,"RegEx/Token/ConditionToken",1945),sDn(1946,122,aat,R3),uZn.Lm=function(n){return this.b},uZn.Pm=function(){return 1},uZn.Qm=function(n){return"(?"+(0==this.a?"":XKn(this.a))+(0==this.c?"":XKn(this.c))+":"+this.b.Qm(n)+")"},uZn.a=0,uZn.c=0,zW(Xct,"RegEx/Token/ModifierToken",1946),sDn(838,122,aat,PQ),uZn.Lm=function(n){return this.a},uZn.Pm=function(){return 1},uZn.Qm=function(n){var t;switch(t=null,this.e){case 6:t=0==this.b?"(?:"+this.a.Qm(n)+")":"("+this.a.Qm(n)+")";break;case 20:t="(?="+this.a.Qm(n)+")";break;case 21:t="(?!"+this.a.Qm(n)+")";break;case 22:t="(?<="+this.a.Qm(n)+")";break;case 23:t="(?<!"+this.a.Qm(n)+")";break;case 24:t="(?>"+this.a.Qm(n)+")"}return t},uZn.b=0,zW(Xct,"RegEx/Token/ParenToken",838),sDn(530,122,{3:1,122:1,530:1},F1),uZn.Mm=function(){return this.b},uZn.Qm=function(n){return 12==this.e?"\\"+this.a:Nxn(this.b)},uZn.a=0,zW(Xct,"RegEx/Token/StringToken",530),sDn(476,122,aat,QN),uZn.Jm=function(n){kzn(this,n)},uZn.Lm=function(n){return uG(DQ(this.a,n),122)},uZn.Pm=function(){return this.a?this.a.a.c.length:0},uZn.Qm=function(n){var t,e,i,r,c;if(1==this.e){if(2==this.a.a.c.length)t=uG(DQ(this.a,0),122),r=3==(e=uG(DQ(this.a,1),122)).e&&e.Lm(0)==t?t.Qm(n)+"+":9==e.e&&e.Lm(0)==t?t.Qm(n)+"+?":t.Qm(n)+""+e.Qm(n);else{for(c=new zM,i=0;i<this.a.a.c.length;i++)VA(c,uG(DQ(this.a,i),122).Qm(n));r=c.a}return r}if(2==this.a.a.c.length&&7==uG(DQ(this.a,1),122).e)r=uG(DQ(this.a,0),122).Qm(n)+"?";else if(2==this.a.a.c.length&&7==uG(DQ(this.a,0),122).e)r=uG(DQ(this.a,1),122).Qm(n)+"??";else{for(VA(c=new zM,uG(DQ(this.a,0),122).Qm(n)),i=1;i<this.a.a.c.length;i++)c.a+="|",VA(c,uG(DQ(this.a,i),122).Qm(n));r=c.a}return r},zW(Xct,"RegEx/Token/UnionToken",476),sDn(527,1,{600:1},dE),uZn.Ib=function(){return this.a.b},zW(oat,"XMLTypeUtil/PatternMatcherImpl",527),sDn(1707,1527,{},Df),zW(oat,"XMLTypeValidator",1707),sDn(270,1,t1n,Gz),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return(this.b-this.a)*this.c<0?XHt:new xD(this)},uZn.a=0,uZn.b=0,uZn.c=0,zW(sat,"ExclusiveRange",270),sDn(1084,1,UZn,xf),uZn.Rb=function(n){uG(n,17),i$()},uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return bE()},uZn.Ub=function(){return wE()},uZn.Wb=function(n){uG(n,17),c$()},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},uZn.Tb=function(){return-1},uZn.Vb=function(){return-1},uZn.Qb=function(){throw hv(new TM(lat))},zW(sat,"ExclusiveRange/1",1084),sDn(258,1,UZn,xD),uZn.Rb=function(n){uG(n,17),r$()},uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return awn(this)},uZn.Ub=function(){return ytn(this)},uZn.Wb=function(n){uG(n,17),a$()},uZn.Ob=function(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b},uZn.Sb=function(){return this.b>0},uZn.Tb=function(){return this.b},uZn.Vb=function(){return this.b-1},uZn.Qb=function(){throw hv(new TM(lat))},uZn.a=0,uZn.b=0,zW(sat,"ExclusiveRange/RangeIterator",258);var JHt=hJ(brt,"C"),YHt=hJ(grt,"I"),ZHt=hJ(dZn,"Z"),nUt=hJ(prt,"J"),tUt=hJ(lrt,"B"),eUt=hJ(wrt,"D"),iUt=hJ(drt,"F"),rUt=hJ(mrt,"S"),cUt=Iq("org.eclipse.elk.core.labels","ILabelManager"),aUt=Iq(Pet,"DiagnosticChain"),oUt=Iq(Jrt,"ResourceSet"),uUt=zW(Pet,"InvocationTargetException",null),sUt=(XM(),m9),hUt=hUt=zSn;Nan(bv),van("permProps",[[["locale","default"],[bat,"gecko1_8"]],[["locale","default"],[bat,"safari"]]]),hUt(null,"elk",null)}).call(this)}).call(this,void 0!==e.g?e.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(n,t,e){"use strict";function i(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function r(n,t){if(!n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?n:t}function c(n,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(n,t):n.__proto__=t)}var a=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,e);var c=Object.assign({},t),a=!1;try{n.resolve("web-worker"),a=!0}catch(s){}if(t.workerUrl)if(a){var o=n("web-worker");c.workerFactory=function(n){return new o(n)}}else console.warn("Web worker requested but 'web-worker' package not installed. \nConsider installing the package or pass your own 'workerFactory' to ELK's constructor.\n... Falling back to non-web worker version.");if(!c.workerFactory){var u=n("./elk-worker.min.js").Worker;c.workerFactory=function(n){return new u(n)}}return r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,c))}return c(e,t),e}(n("./elk-api.js").default);Object.defineProperty(t.exports,"__esModule",{value:!0}),t.exports=a,a.default=a},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(n,t,e){t.exports=Worker},{}]},{},[3])(3)},74741:(n,t,e)=>{"use strict";e.d(t,{diagram:()=>y});var i=e(32548),r=e(26312),c=e(98055),a=e(99702),o=e(62954);e(74353),e(16750),e(42838);const u=new o;let s={};const h={};let f={};const l=(n,t,e)=>{const i={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return i.TD=i.TB,i[e][t][n]},b=(n,t,e)=>{if(a.l.info("getNextPort",{node:n,edgeDirection:t,graphDirection:e}),!s[n])switch(e){case"TB":case"TD":s[n]={inPosition:"north",outPosition:"south"};break;case"BT":s[n]={inPosition:"south",outPosition:"north"};break;case"RL":s[n]={inPosition:"east",outPosition:"west"};break;case"LR":s[n]={inPosition:"west",outPosition:"east"}}const i="in"===t?s[n].inPosition:s[n].outPosition;return"in"===t?s[n].inPosition=l(s[n].inPosition,t,e):s[n].outPosition=l(s[n].outPosition,t,e),i},w=function(n,t,e,i){a.l.info("abc78 edges = ",n);const o=i.insert("g").attr("class","edgeLabels");let u,s,l={},w=t.db.getDirection();if(void 0!==n.defaultStyle){const t=(0,a.k)(n.defaultStyle);u=t.style,s=t.labelStyle}return n.forEach((function(t){const i="L-"+t.start+"-"+t.end;void 0===l[i]?(l[i]=0,a.l.info("abc78 new entry",i,l[i])):(l[i]++,a.l.info("abc78 new entry",i,l[i]));let d=i+"-"+l[i];a.l.info("abc78 new link id to be used is",i,d,l[i]);const g="LS-"+t.start,p="LE-"+t.end,m={style:"",labelStyle:""};switch(m.minlen=t.length||1,"arrow_open"===t.type?m.arrowhead="none":m.arrowhead="normal",m.arrowTypeStart="arrow_open",m.arrowTypeEnd="arrow_open",t.type){case"double_arrow_cross":m.arrowTypeStart="arrow_cross";case"arrow_cross":m.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":m.arrowTypeStart="arrow_point";case"arrow_point":m.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":m.arrowTypeStart="arrow_circle";case"arrow_circle":m.arrowTypeEnd="arrow_circle"}let v="",k="";switch(t.stroke){case"normal":v="fill:none;",void 0!==u&&(v=u),void 0!==s&&(k=s),m.thickness="normal",m.pattern="solid";break;case"dotted":m.thickness="normal",m.pattern="dotted",m.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":m.thickness="thick",m.pattern="solid",m.style="stroke-width: 3.5px;fill:none;"}if(void 0!==t.style){const n=(0,a.k)(t.style);v=n.style,k=n.labelStyle}m.style=m.style+=v,m.labelStyle=m.labelStyle+=k,void 0!==t.interpolate?m.curve=(0,a.n)(t.interpolate,r.lUB):void 0!==n.defaultInterpolate?m.curve=(0,a.n)(n.defaultInterpolate,r.lUB):m.curve=(0,a.n)(h.curve,r.lUB),void 0===t.text?void 0!==t.style&&(m.arrowheadStyle="fill: #333"):(m.arrowheadStyle="fill: #333",m.labelpos="c"),m.labelType=t.labelType,m.label=t.text.replace(a.e.lineBreakRegex,"\n"),void 0===t.style&&(m.style=m.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),m.labelStyle=m.labelStyle.replace("color:","fill:"),m.id=d,m.classes="flowchart-link "+g+" "+p;const y=(0,c.f)(o,m),{source:M,target:T,sourceId:j,targetId:E}=((n,t)=>{let e=n.start,i=n.end;const r=e,c=i,a=f[e],o=f[i];return a&&o?("diamond"===a.type&&(e=`${e}-${b(e,"out",t)}`),"diamond"===o.type&&(i=`${i}-${b(i,"in",t)}`),{source:e,target:i,sourceId:r,targetId:c}):{source:e,target:i}})(t,w);a.l.debug("abc78 source and target",M,T),e.edges.push({id:"e"+t.start+t.end,sources:[M],targets:[T],sourceId:j,targetId:E,labelEl:y,labels:[{width:m.width,height:m.height,orgWidth:m.width,orgHeight:m.height,text:m.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:m})})),e},d=function(n,t,e){const i=((n,t,e)=>{const{parentById:i}=e,r=new Set;let c=n;for(;c;){if(r.add(c),c===t)return c;c=i[c]}for(c=t;c;){if(r.has(c))return c;c=i[c]}return"root"})(n,t,e);if(void 0===i||"root"===i)return{x:0,y:0};const r=f[i].offset;return{x:r.posX,y:r.posY}},g=function(n,t,e,i,a,o){const u=d(t.sourceId,t.targetId,a),s=t.sections[0].startPoint,h=t.sections[0].endPoint,f=(t.sections[0].bendPoints?t.sections[0].bendPoints:[]).map((n=>[n.x+u.x,n.y+u.y])),l=[[s.x+u.x,s.y+u.y],...f,[h.x+u.x,h.y+u.y]],{x:b,y:w}=(0,c.k)(t.edgeData),g=(0,r.n8j)().x(b).y(w).curve(r.lUB),p=n.insert("path").attr("d",g(l)).attr("class","path "+e.classes).attr("fill","none"),m=n.insert("g").attr("class","edgeLabel"),v=(0,r.Ltv)(m.node().appendChild(t.labelEl)),k=v.node().firstChild.getBoundingClientRect();v.attr("width",k.width),v.attr("height",k.height),m.attr("transform",`translate(${t.labels[0].x+u.x}, ${t.labels[0].y+u.y})`),function(n,t,e,i,r){let a="";i&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replace(/\(/g,"\\("),a=a.replace(/\)/g,"\\)")),(0,c.m)(n,t,a,r,e)}(p,e,i.type,i.arrowMarkerAbsolute,o)},p=(n,t)=>{n.forEach((n=>{n.children||(n.children=[]);const e=t.childrenById[n.id];e&&e.forEach((t=>{n.children.push(f[t])})),p(n.children,t)}))},m=(n,t,e,i,r,c,o)=>{e.forEach((function(e){if(e)if(f[e.id].offset={posX:e.x+n,posY:e.y+t,x:n,y:t,depth:o,width:e.width,height:e.height},"group"===e.type){const i=r.insert("g").attr("class","subgraph");i.insert("rect").attr("class","subgraph subgraph-lvl-"+o%5+" node").attr("x",e.x+n).attr("y",e.y+t).attr("width",e.width).attr("height",e.height);const c=i.insert("g").attr("class","label"),u=(0,a.F)().flowchart.htmlLabels?e.labelData.width/2:0;c.attr("transform",`translate(${e.labels[0].x+n+e.x+u}, ${e.labels[0].y+t+e.y+3})`),c.node().appendChild(e.labelData.labelNode),a.l.info("Id (UGH)= ",e.type,e.labels)}else a.l.info("Id (UGH)= ",e.id),e.el.attr("transform",`translate(${e.x+n+e.width/2}, ${e.y+t+e.height/2})`)})),e.forEach((function(e){e&&"group"===e.type&&m(n+e.x,t+e.y,e.children,i,r,c,o+1)}))},v={getClasses:function(n,t){return a.l.info("Extracting classes"),t.db.getClasses()},draw:async function(n,t,e,i){var o;i.db.clear(),f={},s={},i.db.setGen("gen-2"),i.parser.parse(n);const h=(0,r.Ltv)("body").append("div").attr("style","height:400px").attr("id","cy");let l={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},children:[],edges:[]};switch(a.l.info("Drawing flowchart using v3 renderer",u),i.db.getDirection()){case"BT":l.layoutOptions["elk.direction"]="UP";break;case"TB":l.layoutOptions["elk.direction"]="DOWN";break;case"LR":l.layoutOptions["elk.direction"]="RIGHT";break;case"RL":l.layoutOptions["elk.direction"]="LEFT"}const{securityLevel:b,flowchart:d}=(0,a.F)();let v;"sandbox"===b&&(v=(0,r.Ltv)("#i"+t));const k="sandbox"===b?(0,r.Ltv)(v.nodes()[0].contentDocument.body):(0,r.Ltv)("body"),y="sandbox"===b?v.nodes()[0].contentDocument:document,M=k.select(`[id="${t}"]`);(0,c.a)(M,["point","circle","cross"],i.type,t);const T=i.db.getVertices();let j;const E=i.db.getSubGraphs();a.l.info("Subgraphs - ",E);for(let r=E.length-1;r>=0;r--)j=E[r],i.db.addVertex(j.id,{text:j.title,type:j.labelType},"group",void 0,j.classes,j.dir);const S=M.insert("g").attr("class","subgraphs"),P=function(n){const t={parentById:{},childrenById:{}},e=n.getSubGraphs();return a.l.info("Subgraphs - ",e),e.forEach((function(n){n.nodes.forEach((function(e){t.parentById[e]=n.id,void 0===t.childrenById[n.id]&&(t.childrenById[n.id]=[]),t.childrenById[n.id].push(e)}))})),e.forEach((function(n){n.id,void 0!==t.parentById[n.id]&&t.parentById[n.id]})),t}(i.db);l=await async function(n,t,e,i,r,o,u){const s=e.select(`[id="${t}"]`).insert("g").attr("class","nodes"),h=Object.keys(n);return await Promise.all(h.map((async function(t){const e=n[t];let u="default";e.classes.length>0&&(u=e.classes.join(" ")),u+=" flowchart-label";const h=(0,a.k)(e.styles);let l=void 0!==e.text?e.text:e.id;const b={width:0,height:0},w=[{id:e.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:e.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:e.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:e.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let d=0,g="",p={};switch(e.type){case"round":d=5,g="rect";break;case"square":case"group":default:g="rect";break;case"diamond":g="question",p={portConstraints:"FIXED_SIDE"};break;case"hexagon":g="hexagon";break;case"odd":case"odd_right":g="rect_left_inv_arrow";break;case"lean_right":g="lean_right";break;case"lean_left":g="lean_left";break;case"trapezoid":g="trapezoid";break;case"inv_trapezoid":g="inv_trapezoid";break;case"circle":g="circle";break;case"ellipse":g="ellipse";break;case"stadium":g="stadium";break;case"subroutine":g="subroutine";break;case"cylinder":g="cylinder";break;case"doublecircle":g="doublecircle"}const m={labelStyle:h.labelStyle,shape:g,labelText:l,labelType:e.labelType,rx:d,ry:d,class:u,style:h.style,id:e.id,link:e.link,linkTarget:e.linkTarget,tooltip:r.db.getTooltip(e.id)||"",domId:r.db.lookUpDomId(e.id),haveCallback:e.haveCallback,width:"group"===e.type?500:void 0,dir:e.dir,type:e.type,props:e.props,padding:(0,a.F)().flowchart.padding};let v,k;if("group"!==m.type)k=await(0,c.e)(s,m,e.dir),v=k.node().getBBox();else{i.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:n,bbox:t}=await(0,c.l)(s,m,void 0,!0);b.width=t.width,b.wrappingWidth=(0,a.F)().flowchart.wrappingWidth,b.height=t.height,b.labelNode=n.node(),m.labelData=b}const y={id:e.id,ports:"diamond"===e.type?w:[],layoutOptions:p,labelText:l,labelData:b,domId:r.db.lookUpDomId(e.id),width:null==v?void 0:v.width,height:null==v?void 0:v.height,type:e.type,el:k,parent:o.parentById[e.id]};f[m.id]=y}))),u}(T,t,k,y,i,P,l);const C=M.insert("g").attr("class","edges edgePath"),I=i.db.getEdges();l=w(I,i,l,M);Object.keys(f).forEach((n=>{const t=f[n];t.parent||l.children.push(t),void 0!==P.childrenById[n]&&(t.labels=[{text:t.labelText,layoutOptions:{"nodeLabels.placement":"[H_CENTER, V_TOP, INSIDE]"},width:t.labelData.width,height:t.labelData.height}],delete t.x,delete t.y,delete t.width,delete t.height)})),p(l.children,P),a.l.info("after layout",JSON.stringify(l,null,2));const O=await u.layout(l);m(0,0,O.children,M,S,i,0),a.l.info("after layout",O),null==(o=O.edges)||o.map((n=>{g(C,n,n.edgeData,i,P,t)})),(0,a.o)({},M,d.diagramPadding,d.useMaxWidth),h.remove()}},k=n=>`.label {\n font-family: ${n.fontFamily};\n color: ${n.nodeTextColor||n.textColor};\n }\n .cluster-label text {\n fill: ${n.titleColor};\n }\n .cluster-label span {\n color: ${n.titleColor};\n }\n\n .label text,span {\n fill: ${n.nodeTextColor||n.textColor};\n color: ${n.nodeTextColor||n.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${n.mainBkg};\n stroke: ${n.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${n.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${n.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${n.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${n.edgeLabelBackground};\n rect {\n opacity: 0.85;\n background-color: ${n.edgeLabelBackground};\n fill: ${n.edgeLabelBackground};\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ${n.clusterBkg};\n stroke: ${n.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${n.titleColor};\n }\n\n .cluster span {\n color: ${n.titleColor};\n }\n /* .cluster div {\n color: ${n.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${n.fontFamily};\n font-size: 12px;\n background: ${n.tertiaryColor};\n border: 1px solid ${n.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${n.textColor};\n }\n .subgraph {\n stroke-width:2;\n rx:3;\n }\n // .subgraph-lvl-1 {\n // fill:#ccc;\n // // stroke:black;\n // }\n\n .flowchart-label text {\n text-anchor: middle;\n }\n\n ${(n=>{let t="";for(let e=0;e<5;e++)t+=`\n .subgraph-lvl-${e} {\n fill: ${n[`surface${e}`]};\n stroke: ${n[`surfacePeer${e}`]};\n }\n `;return t})(n)}\n`,y={db:i.d,renderer:v,parser:i.p,styles:k}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/477598dd.947758f8.js b/pr-preview/pr-1594/assets/js/477598dd.947758f8.js deleted file mode 100644 index 78b7ea7b0b..0000000000 --- a/pr-preview/pr-1594/assets/js/477598dd.947758f8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6079],{73027:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var t=r(74848),i=r(28453);const s={},o="Gladly",c={id:"reference/Connectors/capture-connectors/gladly",title:"Gladly",description:"This connector captures data from Gladly into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/gladly.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/gladly",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/gladly.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"GitLab",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab"},next:{title:"Google Ads",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads"}},l={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"gladly",children:"Gladly"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from Gladly into Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-gladly:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-gladly:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsxs)(n.p,{children:["This connector can be used to sync the following ",(0,t.jsx)(n.a,{href:"https://developer.gladly.com/rest/#tag/Events",children:"Event entity types"})," from Gladly:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"AGENT_AVAILABILITY"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"AGENT_STATUS"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"CONTACT"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"CONVERSATION"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"CUSTOMER"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"PAYMENT_REQUEST"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"TASK"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"By default, each entity type is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.p,{children:["To set up the Gladly source connector, you'll need a Gladly account with an ",(0,t.jsx)(n.a,{href:"https://connect.gladly.com/docs/implementation/article/get-your-api-tokens/",children:"API token"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Gladly source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/organization"})})}),(0,t.jsx)(n.td,{children:"Organization"}),(0,t.jsx)(n.td,{children:"Organization to Request Data From"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/agentEmail"})})}),(0,t.jsx)(n.td,{children:"Agent Email"}),(0,t.jsx)(n.td,{children:"Agent Email Address to use for Authentication"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/apiToken"})})}),(0,t.jsx)(n.td,{children:"API Token"}),(0,t.jsx)(n.td,{children:"API Token to use for Authentication"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/name"})})}),(0,t.jsx)(n.td,{children:"Name"}),(0,t.jsx)(n.td,{children:"Name of this resource"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/interval"})}),(0,t.jsx)(n.td,{children:"Interval"}),(0,t.jsx)(n.td,{children:"Interval between updates for this resource"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-gladly:dev\n config:\n organization:\n agentEmail:\n apiToken: <secret>\n bindings:\n - resource:\n name: AgentAvailabilityEvents\n interval: PT30S\n target: ${PREFIX}/AgentAvailabilityEvents\n {...}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>c});var t=r(96540);const i={},s=t.createContext(i);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/478.66e42700.js b/pr-preview/pr-1594/assets/js/478.66e42700.js deleted file mode 100644 index ef4c719393..0000000000 --- a/pr-preview/pr-1594/assets/js/478.66e42700.js +++ /dev/null @@ -1,1227 +0,0 @@ -"use strict"; -exports.id = 478; -exports.ids = [478]; -exports.modules = { - -/***/ 8478: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99418); - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 3], $V1 = [1, 4], $V2 = [1, 5], $V3 = [1, 6], $V4 = [1, 7], $V5 = [1, 5, 13, 15, 17, 19, 20, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], $V6 = [1, 5, 6, 13, 15, 17, 19, 20, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], $V7 = [32, 33, 34], $V8 = [2, 7], $V9 = [1, 13], $Va = [1, 17], $Vb = [1, 18], $Vc = [1, 19], $Vd = [1, 20], $Ve = [1, 21], $Vf = [1, 22], $Vg = [1, 23], $Vh = [1, 24], $Vi = [1, 25], $Vj = [1, 26], $Vk = [1, 27], $Vl = [1, 30], $Vm = [1, 31], $Vn = [1, 32], $Vo = [1, 33], $Vp = [1, 34], $Vq = [1, 35], $Vr = [1, 36], $Vs = [1, 37], $Vt = [1, 38], $Vu = [1, 39], $Vv = [1, 40], $Vw = [1, 41], $Vx = [1, 42], $Vy = [1, 57], $Vz = [1, 58], $VA = [5, 22, 26, 32, 33, 34, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "eol": 4, "SPACE": 5, "QUADRANT": 6, "document": 7, "line": 8, "statement": 9, "axisDetails": 10, "quadrantDetails": 11, "points": 12, "title": 13, "title_value": 14, "acc_title": 15, "acc_title_value": 16, "acc_descr": 17, "acc_descr_value": 18, "acc_descr_multiline_value": 19, "section": 20, "text": 21, "point_start": 22, "point_x": 23, "point_y": 24, "X-AXIS": 25, "AXIS-TEXT-DELIMITER": 26, "Y-AXIS": 27, "QUADRANT_1": 28, "QUADRANT_2": 29, "QUADRANT_3": 30, "QUADRANT_4": 31, "NEWLINE": 32, "SEMI": 33, "EOF": 34, "alphaNumToken": 35, "textNoTagsToken": 36, "STR": 37, "MD_STR": 38, "alphaNum": 39, "PUNCTUATION": 40, "AMP": 41, "NUM": 42, "ALPHA": 43, "COMMA": 44, "PLUS": 45, "EQUALS": 46, "MULT": 47, "DOT": 48, "BRKT": 49, "UNDERSCORE": 50, "MINUS": 51, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 5: "SPACE", 6: "QUADRANT", 13: "title", 14: "title_value", 15: "acc_title", 16: "acc_title_value", 17: "acc_descr", 18: "acc_descr_value", 19: "acc_descr_multiline_value", 20: "section", 22: "point_start", 23: "point_x", 24: "point_y", 25: "X-AXIS", 26: "AXIS-TEXT-DELIMITER", 27: "Y-AXIS", 28: "QUADRANT_1", 29: "QUADRANT_2", 30: "QUADRANT_3", 31: "QUADRANT_4", 32: "NEWLINE", 33: "SEMI", 34: "EOF", 37: "STR", 38: "MD_STR", 40: "PUNCTUATION", 41: "AMP", 42: "NUM", 43: "ALPHA", 44: "COMMA", 45: "PLUS", 46: "EQUALS", 47: "MULT", 48: "DOT", 49: "BRKT", 50: "UNDERSCORE", 51: "MINUS" }, - productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [9, 0], [9, 2], [9, 1], [9, 1], [9, 1], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [12, 4], [10, 4], [10, 3], [10, 2], [10, 4], [10, 3], [10, 2], [11, 2], [11, 2], [11, 2], [11, 2], [4, 1], [4, 1], [4, 1], [21, 1], [21, 2], [21, 1], [21, 1], [39, 1], [39, 2], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [36, 1], [36, 1], [36, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 12: - this.$ = $$[$0].trim(); - yy.setDiagramTitle(this.$); - break; - case 13: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 14: - case 15: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 16: - yy.addSection($$[$0].substr(8)); - this.$ = $$[$0].substr(8); - break; - case 17: - yy.addPoint($$[$0 - 3], $$[$0 - 1], $$[$0]); - break; - case 18: - yy.setXAxisLeftText($$[$0 - 2]); - yy.setXAxisRightText($$[$0]); - break; - case 19: - $$[$0 - 1].text += " ⟶ "; - yy.setXAxisLeftText($$[$0 - 1]); - break; - case 20: - yy.setXAxisLeftText($$[$0]); - break; - case 21: - yy.setYAxisBottomText($$[$0 - 2]); - yy.setYAxisTopText($$[$0]); - break; - case 22: - $$[$0 - 1].text += " ⟶ "; - yy.setYAxisBottomText($$[$0 - 1]); - break; - case 23: - yy.setYAxisBottomText($$[$0]); - break; - case 24: - yy.setQuadrant1Text($$[$0]); - break; - case 25: - yy.setQuadrant2Text($$[$0]); - break; - case 26: - yy.setQuadrant3Text($$[$0]); - break; - case 27: - yy.setQuadrant4Text($$[$0]); - break; - case 31: - this.$ = { text: $$[$0], type: "text" }; - break; - case 32: - this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; - break; - case 33: - this.$ = { text: $$[$0], type: "text" }; - break; - case 34: - this.$ = { text: $$[$0], type: "markdown" }; - break; - case 35: - this.$ = $$[$0]; - break; - case 36: - this.$ = $$[$0 - 1] + "" + $$[$0]; - break; - } - }, - table: [{ 3: 1, 4: 2, 5: $V0, 6: $V1, 32: $V2, 33: $V3, 34: $V4 }, { 1: [3] }, { 3: 8, 4: 2, 5: $V0, 6: $V1, 32: $V2, 33: $V3, 34: $V4 }, { 3: 9, 4: 2, 5: $V0, 6: $V1, 32: $V2, 33: $V3, 34: $V4 }, o($V5, [2, 4], { 7: 10 }), o($V6, [2, 28]), o($V6, [2, 29]), o($V6, [2, 30]), { 1: [2, 1] }, { 1: [2, 2] }, o($V7, $V8, { 8: 11, 9: 12, 10: 14, 11: 15, 12: 16, 21: 28, 35: 29, 1: [2, 3], 5: $V9, 13: $Va, 15: $Vb, 17: $Vc, 19: $Vd, 20: $Ve, 25: $Vf, 27: $Vg, 28: $Vh, 29: $Vi, 30: $Vj, 31: $Vk, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }), o($V5, [2, 5]), { 4: 43, 32: $V2, 33: $V3, 34: $V4 }, o($V7, $V8, { 10: 14, 11: 15, 12: 16, 21: 28, 35: 29, 9: 44, 5: $V9, 13: $Va, 15: $Vb, 17: $Vc, 19: $Vd, 20: $Ve, 25: $Vf, 27: $Vg, 28: $Vh, 29: $Vi, 30: $Vj, 31: $Vk, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }), o($V7, [2, 9]), o($V7, [2, 10]), o($V7, [2, 11]), { 14: [1, 45] }, { 16: [1, 46] }, { 18: [1, 47] }, o($V7, [2, 15]), o($V7, [2, 16]), { 21: 48, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 49, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 50, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 51, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 52, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 53, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 5: $Vy, 22: [1, 54], 35: 56, 36: 55, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }, o($VA, [2, 31]), o($VA, [2, 33]), o($VA, [2, 34]), o($VA, [2, 37]), o($VA, [2, 38]), o($VA, [2, 39]), o($VA, [2, 40]), o($VA, [2, 41]), o($VA, [2, 42]), o($VA, [2, 43]), o($VA, [2, 44]), o($VA, [2, 45]), o($VA, [2, 46]), o($VA, [2, 47]), o($V5, [2, 6]), o($V7, [2, 8]), o($V7, [2, 12]), o($V7, [2, 13]), o($V7, [2, 14]), o($V7, [2, 20], { 36: 55, 35: 56, 5: $Vy, 26: [1, 59], 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 23], { 36: 55, 35: 56, 5: $Vy, 26: [1, 60], 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 24], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 25], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 26], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 27], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), { 23: [1, 61] }, o($VA, [2, 32]), o($VA, [2, 48]), o($VA, [2, 49]), o($VA, [2, 50]), o($V7, [2, 19], { 35: 29, 21: 62, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }), o($V7, [2, 22], { 35: 29, 21: 63, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }), { 24: [1, 64] }, o($V7, [2, 18], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 21], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 17])], - defaultActions: { 8: [2, 1], 9: [2, 2] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - break; - case 1: - break; - case 2: - return 32; - case 3: - break; - case 4: - this.begin("title"); - return 13; - case 5: - this.popState(); - return "title_value"; - case 6: - this.begin("acc_title"); - return 15; - case 7: - this.popState(); - return "acc_title_value"; - case 8: - this.begin("acc_descr"); - return 17; - case 9: - this.popState(); - return "acc_descr_value"; - case 10: - this.begin("acc_descr_multiline"); - break; - case 11: - this.popState(); - break; - case 12: - return "acc_descr_multiline_value"; - case 13: - return 25; - case 14: - return 27; - case 15: - return 26; - case 16: - return 28; - case 17: - return 29; - case 18: - return 30; - case 19: - return 31; - case 20: - this.begin("md_string"); - break; - case 21: - return "MD_STR"; - case 22: - this.popState(); - break; - case 23: - this.begin("string"); - break; - case 24: - this.popState(); - break; - case 25: - return "STR"; - case 26: - this.begin("point_start"); - return 22; - case 27: - this.begin("point_x"); - return 23; - case 28: - this.popState(); - break; - case 29: - this.popState(); - this.begin("point_y"); - break; - case 30: - this.popState(); - return 24; - case 31: - return 6; - case 32: - return 43; - case 33: - return "COLON"; - case 34: - return 45; - case 35: - return 44; - case 36: - return 46; - case 37: - return 46; - case 38: - return 47; - case 39: - return 49; - case 40: - return 50; - case 41: - return 48; - case 42: - return 41; - case 43: - return 51; - case 44: - return 42; - case 45: - return 5; - case 46: - return 33; - case 47: - return 40; - case 48: - return 34; - } - }, - rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:title\b)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?: *x-axis *)/i, /^(?: *y-axis *)/i, /^(?: *--+> *)/i, /^(?: *quadrant-1 *)/i, /^(?: *quadrant-2 *)/i, /^(?: *quadrant-3 *)/i, /^(?: *quadrant-4 *)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:\s*:\s*\[\s*)/i, /^(?:(1)|(0(.\d+)?))/i, /^(?:\s*\] *)/i, /^(?:\s*,\s*)/i, /^(?:(1)|(0(.\d+)?))/i, /^(?: *quadrantChart *)/i, /^(?:[A-Za-z]+)/i, /^(?::)/i, /^(?:\+)/i, /^(?:,)/i, /^(?:=)/i, /^(?:=)/i, /^(?:\*)/i, /^(?:#)/i, /^(?:[\_])/i, /^(?:\.)/i, /^(?:&)/i, /^(?:-)/i, /^(?:[0-9]+)/i, /^(?:\s)/i, /^(?:;)/i, /^(?:[!"#$%&'*+,-.`?\\_/])/i, /^(?:$)/i], - conditions: { "point_y": { "rules": [30], "inclusive": false }, "point_x": { "rules": [29], "inclusive": false }, "point_start": { "rules": [27, 28], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12], "inclusive": false }, "acc_descr": { "rules": [9], "inclusive": false }, "acc_title": { "rules": [7], "inclusive": false }, "title": { "rules": [5], "inclusive": false }, "md_string": { "rules": [21, 22], "inclusive": false }, "string": { "rules": [24, 25], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 26, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -const defaultThemeVariables = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.E)(); -class QuadrantBuilder { - constructor() { - this.config = this.getDefaultConfig(); - this.themeConfig = this.getDefaultThemeConfig(); - this.data = this.getDefaultData(); - } - getDefaultData() { - return { - titleText: "", - quadrant1Text: "", - quadrant2Text: "", - quadrant3Text: "", - quadrant4Text: "", - xAxisLeftText: "", - xAxisRightText: "", - yAxisBottomText: "", - yAxisTopText: "", - points: [] - }; - } - getDefaultConfig() { - var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r; - return { - showXAxis: true, - showYAxis: true, - showTitle: true, - chartHeight: ((_a = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _a.chartWidth) || 500, - chartWidth: ((_b = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _b.chartHeight) || 500, - titlePadding: ((_c = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _c.titlePadding) || 10, - titleFontSize: ((_d = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _d.titleFontSize) || 20, - quadrantPadding: ((_e = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _e.quadrantPadding) || 5, - xAxisLabelPadding: ((_f = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _f.xAxisLabelPadding) || 5, - yAxisLabelPadding: ((_g = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _g.yAxisLabelPadding) || 5, - xAxisLabelFontSize: ((_h = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _h.xAxisLabelFontSize) || 16, - yAxisLabelFontSize: ((_i = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _i.yAxisLabelFontSize) || 16, - quadrantLabelFontSize: ((_j = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _j.quadrantLabelFontSize) || 16, - quadrantTextTopPadding: ((_k = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _k.quadrantTextTopPadding) || 5, - pointTextPadding: ((_l = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _l.pointTextPadding) || 5, - pointLabelFontSize: ((_m = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _m.pointLabelFontSize) || 12, - pointRadius: ((_n = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _n.pointRadius) || 5, - xAxisPosition: ((_o = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _o.xAxisPosition) || "top", - yAxisPosition: ((_p = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _p.yAxisPosition) || "left", - quadrantInternalBorderStrokeWidth: ((_q = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _q.quadrantInternalBorderStrokeWidth) || 1, - quadrantExternalBorderStrokeWidth: ((_r = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.quadrantChart) == null ? void 0 : _r.quadrantExternalBorderStrokeWidth) || 2 - }; - } - getDefaultThemeConfig() { - return { - quadrant1Fill: defaultThemeVariables.quadrant1Fill, - quadrant2Fill: defaultThemeVariables.quadrant2Fill, - quadrant3Fill: defaultThemeVariables.quadrant3Fill, - quadrant4Fill: defaultThemeVariables.quadrant4Fill, - quadrant1TextFill: defaultThemeVariables.quadrant1TextFill, - quadrant2TextFill: defaultThemeVariables.quadrant2TextFill, - quadrant3TextFill: defaultThemeVariables.quadrant3TextFill, - quadrant4TextFill: defaultThemeVariables.quadrant4TextFill, - quadrantPointFill: defaultThemeVariables.quadrantPointFill, - quadrantPointTextFill: defaultThemeVariables.quadrantPointTextFill, - quadrantXAxisTextFill: defaultThemeVariables.quadrantXAxisTextFill, - quadrantYAxisTextFill: defaultThemeVariables.quadrantYAxisTextFill, - quadrantTitleFill: defaultThemeVariables.quadrantTitleFill, - quadrantInternalBorderStrokeFill: defaultThemeVariables.quadrantInternalBorderStrokeFill, - quadrantExternalBorderStrokeFill: defaultThemeVariables.quadrantExternalBorderStrokeFill - }; - } - clear() { - this.config = this.getDefaultConfig(); - this.themeConfig = this.getDefaultThemeConfig(); - this.data = this.getDefaultData(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("clear called"); - } - setData(data) { - this.data = { ...this.data, ...data }; - } - addPoints(points) { - this.data.points = [...points, ...this.data.points]; - } - setConfig(config2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("setConfig called with: ", config2); - this.config = { ...this.config, ...config2 }; - } - setThemeConfig(themeConfig) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("setThemeConfig called with: ", themeConfig); - this.themeConfig = { ...this.themeConfig, ...themeConfig }; - } - calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle) { - const xAxisSpaceCalculation = this.config.xAxisLabelPadding * 2 + this.config.xAxisLabelFontSize; - const xAxisSpace = { - top: xAxisPosition === "top" && showXAxis ? xAxisSpaceCalculation : 0, - bottom: xAxisPosition === "bottom" && showXAxis ? xAxisSpaceCalculation : 0 - }; - const yAxisSpaceCalculation = this.config.yAxisLabelPadding * 2 + this.config.yAxisLabelFontSize; - const yAxisSpace = { - left: this.config.yAxisPosition === "left" && showYAxis ? yAxisSpaceCalculation : 0, - right: this.config.yAxisPosition === "right" && showYAxis ? yAxisSpaceCalculation : 0 - }; - const titleSpaceCalculation = this.config.titleFontSize + this.config.titlePadding * 2; - const titleSpace = { - top: showTitle ? titleSpaceCalculation : 0 - }; - const quadrantLeft = this.config.quadrantPadding + yAxisSpace.left; - const quadrantTop = this.config.quadrantPadding + xAxisSpace.top + titleSpace.top; - const quadrantWidth = this.config.chartWidth - this.config.quadrantPadding * 2 - yAxisSpace.left - yAxisSpace.right; - const quadrantHeight = this.config.chartHeight - this.config.quadrantPadding * 2 - xAxisSpace.top - xAxisSpace.bottom - titleSpace.top; - const quadrantHalfWidth = quadrantWidth / 2; - const quadrantHalfHeight = quadrantHeight / 2; - const quadrantSpace = { - quadrantLeft, - quadrantTop, - quadrantWidth, - quadrantHalfWidth, - quadrantHeight, - quadrantHalfHeight - }; - return { - xAxisSpace, - yAxisSpace, - titleSpace, - quadrantSpace - }; - } - getAxisLabels(xAxisPosition, showXAxis, showYAxis, spaceData) { - const { quadrantSpace, titleSpace } = spaceData; - const { - quadrantHalfHeight, - quadrantHeight, - quadrantLeft, - quadrantHalfWidth, - quadrantTop, - quadrantWidth - } = quadrantSpace; - const drawXAxisLabelsInMiddle = Boolean(this.data.xAxisRightText); - const drawYAxisLabelsInMiddle = Boolean(this.data.yAxisTopText); - const axisLabels = []; - if (this.data.xAxisLeftText && showXAxis) { - axisLabels.push({ - text: this.data.xAxisLeftText, - fill: this.themeConfig.quadrantXAxisTextFill, - x: quadrantLeft + (drawXAxisLabelsInMiddle ? quadrantHalfWidth / 2 : 0), - y: xAxisPosition === "top" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding, - fontSize: this.config.xAxisLabelFontSize, - verticalPos: drawXAxisLabelsInMiddle ? "center" : "left", - horizontalPos: "top", - rotation: 0 - }); - } - if (this.data.xAxisRightText && showXAxis) { - axisLabels.push({ - text: this.data.xAxisRightText, - fill: this.themeConfig.quadrantXAxisTextFill, - x: quadrantLeft + quadrantHalfWidth + (drawXAxisLabelsInMiddle ? quadrantHalfWidth / 2 : 0), - y: xAxisPosition === "top" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding, - fontSize: this.config.xAxisLabelFontSize, - verticalPos: drawXAxisLabelsInMiddle ? "center" : "left", - horizontalPos: "top", - rotation: 0 - }); - } - if (this.data.yAxisBottomText && showYAxis) { - axisLabels.push({ - text: this.data.yAxisBottomText, - fill: this.themeConfig.quadrantYAxisTextFill, - x: this.config.yAxisPosition === "left" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding, - y: quadrantTop + quadrantHeight - (drawYAxisLabelsInMiddle ? quadrantHalfHeight / 2 : 0), - fontSize: this.config.yAxisLabelFontSize, - verticalPos: drawYAxisLabelsInMiddle ? "center" : "left", - horizontalPos: "top", - rotation: -90 - }); - } - if (this.data.yAxisTopText && showYAxis) { - axisLabels.push({ - text: this.data.yAxisTopText, - fill: this.themeConfig.quadrantYAxisTextFill, - x: this.config.yAxisPosition === "left" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding, - y: quadrantTop + quadrantHalfHeight - (drawYAxisLabelsInMiddle ? quadrantHalfHeight / 2 : 0), - fontSize: this.config.yAxisLabelFontSize, - verticalPos: drawYAxisLabelsInMiddle ? "center" : "left", - horizontalPos: "top", - rotation: -90 - }); - } - return axisLabels; - } - getQuadrants(spaceData) { - const { quadrantSpace } = spaceData; - const { quadrantHalfHeight, quadrantLeft, quadrantHalfWidth, quadrantTop } = quadrantSpace; - const quadrants = [ - { - text: { - text: this.data.quadrant1Text, - fill: this.themeConfig.quadrant1TextFill, - x: 0, - y: 0, - fontSize: this.config.quadrantLabelFontSize, - verticalPos: "center", - horizontalPos: "middle", - rotation: 0 - }, - x: quadrantLeft + quadrantHalfWidth, - y: quadrantTop, - width: quadrantHalfWidth, - height: quadrantHalfHeight, - fill: this.themeConfig.quadrant1Fill - }, - { - text: { - text: this.data.quadrant2Text, - fill: this.themeConfig.quadrant2TextFill, - x: 0, - y: 0, - fontSize: this.config.quadrantLabelFontSize, - verticalPos: "center", - horizontalPos: "middle", - rotation: 0 - }, - x: quadrantLeft, - y: quadrantTop, - width: quadrantHalfWidth, - height: quadrantHalfHeight, - fill: this.themeConfig.quadrant2Fill - }, - { - text: { - text: this.data.quadrant3Text, - fill: this.themeConfig.quadrant3TextFill, - x: 0, - y: 0, - fontSize: this.config.quadrantLabelFontSize, - verticalPos: "center", - horizontalPos: "middle", - rotation: 0 - }, - x: quadrantLeft, - y: quadrantTop + quadrantHalfHeight, - width: quadrantHalfWidth, - height: quadrantHalfHeight, - fill: this.themeConfig.quadrant3Fill - }, - { - text: { - text: this.data.quadrant4Text, - fill: this.themeConfig.quadrant4TextFill, - x: 0, - y: 0, - fontSize: this.config.quadrantLabelFontSize, - verticalPos: "center", - horizontalPos: "middle", - rotation: 0 - }, - x: quadrantLeft + quadrantHalfWidth, - y: quadrantTop + quadrantHalfHeight, - width: quadrantHalfWidth, - height: quadrantHalfHeight, - fill: this.themeConfig.quadrant4Fill - } - ]; - for (const quadrant of quadrants) { - quadrant.text.x = quadrant.x + quadrant.width / 2; - if (this.data.points.length === 0) { - quadrant.text.y = quadrant.y + quadrant.height / 2; - quadrant.text.horizontalPos = "middle"; - } else { - quadrant.text.y = quadrant.y + this.config.quadrantTextTopPadding; - quadrant.text.horizontalPos = "top"; - } - } - return quadrants; - } - getQuadrantPoints(spaceData) { - const { quadrantSpace } = spaceData; - const { quadrantHeight, quadrantLeft, quadrantTop, quadrantWidth } = quadrantSpace; - const xAxis = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .m4Y)().domain([0, 1]).range([quadrantLeft, quadrantWidth + quadrantLeft]); - const yAxis = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .m4Y)().domain([0, 1]).range([quadrantHeight + quadrantTop, quadrantTop]); - const points = this.data.points.map((point) => { - const props = { - x: xAxis(point.x), - y: yAxis(point.y), - fill: this.themeConfig.quadrantPointFill, - radius: this.config.pointRadius, - text: { - text: point.text, - fill: this.themeConfig.quadrantPointTextFill, - x: xAxis(point.x), - y: yAxis(point.y) + this.config.pointTextPadding, - verticalPos: "center", - horizontalPos: "top", - fontSize: this.config.pointLabelFontSize, - rotation: 0 - } - }; - return props; - }); - return points; - } - getBorders(spaceData) { - const halfExternalBorderWidth = this.config.quadrantExternalBorderStrokeWidth / 2; - const { quadrantSpace } = spaceData; - const { - quadrantHalfHeight, - quadrantHeight, - quadrantLeft, - quadrantHalfWidth, - quadrantTop, - quadrantWidth - } = quadrantSpace; - const borderLines = [ - // top border - { - strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, - strokeWidth: this.config.quadrantExternalBorderStrokeWidth, - x1: quadrantLeft - halfExternalBorderWidth, - y1: quadrantTop, - x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth, - y2: quadrantTop - }, - // right border - { - strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, - strokeWidth: this.config.quadrantExternalBorderStrokeWidth, - x1: quadrantLeft + quadrantWidth, - y1: quadrantTop + halfExternalBorderWidth, - x2: quadrantLeft + quadrantWidth, - y2: quadrantTop + quadrantHeight - halfExternalBorderWidth - }, - // bottom border - { - strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, - strokeWidth: this.config.quadrantExternalBorderStrokeWidth, - x1: quadrantLeft - halfExternalBorderWidth, - y1: quadrantTop + quadrantHeight, - x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth, - y2: quadrantTop + quadrantHeight - }, - // left border - { - strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, - strokeWidth: this.config.quadrantExternalBorderStrokeWidth, - x1: quadrantLeft, - y1: quadrantTop + halfExternalBorderWidth, - x2: quadrantLeft, - y2: quadrantTop + quadrantHeight - halfExternalBorderWidth - }, - // vertical inner border - { - strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill, - strokeWidth: this.config.quadrantInternalBorderStrokeWidth, - x1: quadrantLeft + quadrantHalfWidth, - y1: quadrantTop + halfExternalBorderWidth, - x2: quadrantLeft + quadrantHalfWidth, - y2: quadrantTop + quadrantHeight - halfExternalBorderWidth - }, - // horizontal inner border - { - strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill, - strokeWidth: this.config.quadrantInternalBorderStrokeWidth, - x1: quadrantLeft + halfExternalBorderWidth, - y1: quadrantTop + quadrantHalfHeight, - x2: quadrantLeft + quadrantWidth - halfExternalBorderWidth, - y2: quadrantTop + quadrantHalfHeight - } - ]; - return borderLines; - } - getTitle(showTitle) { - if (showTitle) { - return { - text: this.data.titleText, - fill: this.themeConfig.quadrantTitleFill, - fontSize: this.config.titleFontSize, - horizontalPos: "top", - verticalPos: "center", - rotation: 0, - y: this.config.titlePadding, - x: this.config.chartWidth / 2 - }; - } - return; - } - build() { - const showXAxis = this.config.showXAxis && !!(this.data.xAxisLeftText || this.data.xAxisRightText); - const showYAxis = this.config.showYAxis && !!(this.data.yAxisTopText || this.data.yAxisBottomText); - const showTitle = this.config.showTitle && !!this.data.titleText; - const xAxisPosition = this.data.points.length > 0 ? "bottom" : this.config.xAxisPosition; - const calculatedSpace = this.calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle); - return { - points: this.getQuadrantPoints(calculatedSpace), - quadrants: this.getQuadrants(calculatedSpace), - axisLabels: this.getAxisLabels(xAxisPosition, showXAxis, showYAxis, calculatedSpace), - borderLines: this.getBorders(calculatedSpace), - title: this.getTitle(showTitle) - }; - } -} -const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); -function textSanitizer(text) { - return (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.trim(), config); -} -const quadrantBuilder = new QuadrantBuilder(); -function setQuadrant1Text(textObj) { - quadrantBuilder.setData({ quadrant1Text: textSanitizer(textObj.text) }); -} -function setQuadrant2Text(textObj) { - quadrantBuilder.setData({ quadrant2Text: textSanitizer(textObj.text) }); -} -function setQuadrant3Text(textObj) { - quadrantBuilder.setData({ quadrant3Text: textSanitizer(textObj.text) }); -} -function setQuadrant4Text(textObj) { - quadrantBuilder.setData({ quadrant4Text: textSanitizer(textObj.text) }); -} -function setXAxisLeftText(textObj) { - quadrantBuilder.setData({ xAxisLeftText: textSanitizer(textObj.text) }); -} -function setXAxisRightText(textObj) { - quadrantBuilder.setData({ xAxisRightText: textSanitizer(textObj.text) }); -} -function setYAxisTopText(textObj) { - quadrantBuilder.setData({ yAxisTopText: textSanitizer(textObj.text) }); -} -function setYAxisBottomText(textObj) { - quadrantBuilder.setData({ yAxisBottomText: textSanitizer(textObj.text) }); -} -function addPoint(textObj, x, y) { - quadrantBuilder.addPoints([{ x, y, text: textSanitizer(textObj.text) }]); -} -function setWidth(width) { - quadrantBuilder.setConfig({ chartWidth: width }); -} -function setHeight(height) { - quadrantBuilder.setConfig({ chartHeight: height }); -} -function getQuadrantData() { - const config2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - const { themeVariables, quadrantChart: quadrantChartConfig } = config2; - if (quadrantChartConfig) { - quadrantBuilder.setConfig(quadrantChartConfig); - } - quadrantBuilder.setThemeConfig({ - quadrant1Fill: themeVariables.quadrant1Fill, - quadrant2Fill: themeVariables.quadrant2Fill, - quadrant3Fill: themeVariables.quadrant3Fill, - quadrant4Fill: themeVariables.quadrant4Fill, - quadrant1TextFill: themeVariables.quadrant1TextFill, - quadrant2TextFill: themeVariables.quadrant2TextFill, - quadrant3TextFill: themeVariables.quadrant3TextFill, - quadrant4TextFill: themeVariables.quadrant4TextFill, - quadrantPointFill: themeVariables.quadrantPointFill, - quadrantPointTextFill: themeVariables.quadrantPointTextFill, - quadrantXAxisTextFill: themeVariables.quadrantXAxisTextFill, - quadrantYAxisTextFill: themeVariables.quadrantYAxisTextFill, - quadrantExternalBorderStrokeFill: themeVariables.quadrantExternalBorderStrokeFill, - quadrantInternalBorderStrokeFill: themeVariables.quadrantInternalBorderStrokeFill, - quadrantTitleFill: themeVariables.quadrantTitleFill - }); - quadrantBuilder.setData({ titleText: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.t)() }); - return quadrantBuilder.build(); -} -const clear = function() { - quadrantBuilder.clear(); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.v)(); -}; -const db = { - setWidth, - setHeight, - setQuadrant1Text, - setQuadrant2Text, - setQuadrant3Text, - setQuadrant4Text, - setXAxisLeftText, - setXAxisRightText, - setYAxisTopText, - setYAxisBottomText, - addPoint, - getQuadrantData, - clear, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.g, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.t, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.a, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.b -}; -const draw = (txt, id, _version, diagObj) => { - var _a, _b, _c; - function getDominantBaseLine(horizontalPos) { - return horizontalPos === "top" ? "hanging" : "middle"; - } - function getTextAnchor(verticalPos) { - return verticalPos === "left" ? "start" : "middle"; - } - function getTransformation(data) { - return `translate(${data.x}, ${data.y}) rotate(${data.rotation || 0})`; - } - const conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Rendering quadrant chart\n" + txt); - const securityLevel = conf.securityLevel; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); - const svg = root.select(`[id="${id}"]`); - const group = svg.append("g").attr("class", "main"); - const width = ((_a = conf.quadrantChart) == null ? void 0 : _a.chartWidth) || 500; - const height = ((_b = conf.quadrantChart) == null ? void 0 : _b.chartHeight) || 500; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.i)(svg, height, width, ((_c = conf.quadrantChart) == null ? void 0 : _c.useMaxWidth) || true); - svg.attr("viewBox", "0 0 " + width + " " + height); - diagObj.db.setHeight(height); - diagObj.db.setWidth(width); - const quadrantData = diagObj.db.getQuadrantData(); - const quadrantsGroup = group.append("g").attr("class", "quadrants"); - const borderGroup = group.append("g").attr("class", "border"); - const dataPointGroup = group.append("g").attr("class", "data-points"); - const labelGroup = group.append("g").attr("class", "labels"); - const titleGroup = group.append("g").attr("class", "title"); - if (quadrantData.title) { - titleGroup.append("text").attr("x", 0).attr("y", 0).attr("fill", quadrantData.title.fill).attr("font-size", quadrantData.title.fontSize).attr("dominant-baseline", getDominantBaseLine(quadrantData.title.horizontalPos)).attr("text-anchor", getTextAnchor(quadrantData.title.verticalPos)).attr("transform", getTransformation(quadrantData.title)).text(quadrantData.title.text); - } - if (quadrantData.borderLines) { - borderGroup.selectAll("line").data(quadrantData.borderLines).enter().append("line").attr("x1", (data) => data.x1).attr("y1", (data) => data.y1).attr("x2", (data) => data.x2).attr("y2", (data) => data.y2).style("stroke", (data) => data.strokeFill).style("stroke-width", (data) => data.strokeWidth); - } - const quadrants = quadrantsGroup.selectAll("g.quadrant").data(quadrantData.quadrants).enter().append("g").attr("class", "quadrant"); - quadrants.append("rect").attr("x", (data) => data.x).attr("y", (data) => data.y).attr("width", (data) => data.width).attr("height", (data) => data.height).attr("fill", (data) => data.fill); - quadrants.append("text").attr("x", 0).attr("y", 0).attr("fill", (data) => data.text.fill).attr("font-size", (data) => data.text.fontSize).attr( - "dominant-baseline", - (data) => getDominantBaseLine(data.text.horizontalPos) - ).attr("text-anchor", (data) => getTextAnchor(data.text.verticalPos)).attr("transform", (data) => getTransformation(data.text)).text((data) => data.text.text); - const labels = labelGroup.selectAll("g.label").data(quadrantData.axisLabels).enter().append("g").attr("class", "label"); - labels.append("text").attr("x", 0).attr("y", 0).text((data) => data.text).attr("fill", (data) => data.fill).attr("font-size", (data) => data.fontSize).attr("dominant-baseline", (data) => getDominantBaseLine(data.horizontalPos)).attr("text-anchor", (data) => getTextAnchor(data.verticalPos)).attr("transform", (data) => getTransformation(data)); - const dataPoints = dataPointGroup.selectAll("g.data-point").data(quadrantData.points).enter().append("g").attr("class", "data-point"); - dataPoints.append("circle").attr("cx", (data) => data.x).attr("cy", (data) => data.y).attr("r", (data) => data.radius).attr("fill", (data) => data.fill); - dataPoints.append("text").attr("x", 0).attr("y", 0).text((data) => data.text.text).attr("fill", (data) => data.text.fill).attr("font-size", (data) => data.text.fontSize).attr( - "dominant-baseline", - (data) => getDominantBaseLine(data.text.horizontalPos) - ).attr("text-anchor", (data) => getTextAnchor(data.text.verticalPos)).attr("transform", (data) => getTransformation(data.text)); -}; -const renderer = { - draw -}; -const diagram = { - parser: parser$1, - db, - renderer, - styles: () => "" -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/482d6521.2cfa7538.js b/pr-preview/pr-1594/assets/js/482d6521.2cfa7538.js deleted file mode 100644 index fb623aa6f7..0000000000 --- a/pr-preview/pr-1594/assets/js/482d6521.2cfa7538.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2505],{5459:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>o});var i=n(74848),r=n(28453);const s={},c="CSV Files in Amazon S3",l={id:"reference/Connectors/materialization-connectors/amazon-s3-csv",title:"CSV Files in Amazon S3",description:"This connector materializes delta updates of",source:"@site/docs/reference/Connectors/materialization-connectors/amazon-s3-csv.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/amazon-s3-csv",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/amazon-s3-csv.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amazon Redshift",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift"},next:{title:"Apache Iceberg Tables in Amazon S3",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg"}},d={},o=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"File Names",id:"file-names",level:2},{value:"Eventual Consistency",id:"eventual-consistency",level:2}];function a(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"csv-files-in-amazon-s3",children:"CSV Files in Amazon S3"}),"\n",(0,i.jsxs)(t.p,{children:["This connector materializes ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})," of\nFlow collections into files in an S3 bucket per the CSV format described in\n",(0,i.jsx)(t.a,{href:"https://www.rfc-editor.org/rfc/rfc4180.html",children:"RFC-4180"}),". The CSV files are compressed using Gzip\ncompression."]}),"\n",(0,i.jsx)(t.p,{children:"The delta updates are batched within Flow, converted to CSV files, and then pushed to the S3 bucket\nat a time interval that you set. Files are limited to a configurable maximum size. Each materialized\nFlow collection will produce many separate files."}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://ghcr.io/estuary/materialize-s3-csv:dev",children:(0,i.jsx)(t.code,{children:"ghcr.io/estuary/materialize-s3-csv:dev"})})," provides\nthe latest connector image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(t.p,{children:"To use this connector, you'll need:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["An S3 bucket to write files to. See ",(0,i.jsx)(t.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html",children:"this\nguide"})," for\ninstructions on setting up a new S3 bucket."]}),"\n",(0,i.jsxs)(t.li,{children:["An AWS root or IAM user with the\n",(0,i.jsx)(t.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html",children:(0,i.jsx)(t.code,{children:"s3:PutObject"})})," permission\nfor the S3 bucket. For this user, you'll need the ",(0,i.jsx)(t.strong,{children:"access key"})," and ",(0,i.jsx)(t.strong,{children:"secret access key"}),". See\nthe ",(0,i.jsx)(t.a,{href:"https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/",children:"AWS blog"})," for help\nfinding these credentials."]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsx)(t.p,{children:"Use the below properties to configure the materialization, which will direct one or more of your\nFlow collections to your bucket."}),"\n",(0,i.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,i.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Property"}),(0,i.jsx)(t.th,{children:"Title"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Required/Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/bucket"})})}),(0,i.jsx)(t.td,{children:"Bucket"}),(0,i.jsx)(t.td,{children:"Bucket to store materialized objects."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/awsAccessKeyId"})})}),(0,i.jsx)(t.td,{children:"AWS Access Key ID"}),(0,i.jsx)(t.td,{children:"Access Key ID for writing data to the bucket."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/awsSecretAccessKey"})})}),(0,i.jsx)(t.td,{children:"AWS Secret Access key"}),(0,i.jsx)(t.td,{children:"Secret Access Key for writing data to the bucket."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/region"})})}),(0,i.jsx)(t.td,{children:"Region"}),(0,i.jsx)(t.td,{children:"Region of the bucket to write to."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/uploadInterval"})})}),(0,i.jsx)(t.td,{children:"Upload Interval"}),(0,i.jsx)(t.td,{children:"Frequency at which files will be uploaded."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"5m"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/prefix"})}),(0,i.jsx)(t.td,{children:"Prefix"}),(0,i.jsx)(t.td,{children:"Optional prefix that will be used to store objects."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/fileSizeLimit"})}),(0,i.jsx)(t.td,{children:"File Size Limit"}),(0,i.jsx)(t.td,{children:"Approximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank."}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/endpoint"})}),(0,i.jsx)(t.td,{children:"Custom S3 Endpoint"}),(0,i.jsx)(t.td,{children:"The S3 endpoint URI to connect to. Use if you're materializing to a compatible API that isn't provided by AWS. Should normally be left blank."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/csvConfig/delimiter"})}),(0,i.jsx)(t.td,{children:"Delimiter"}),(0,i.jsx)(t.td,{children:"Character to separate columns within a row. Defaults to a comma if blank. Must be a single character with a byte length of 1."}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/csvConfig/nullString"})}),(0,i.jsx)(t.td,{children:"Null String"}),(0,i.jsx)(t.td,{children:"String to use to represent NULL values. Defaults to an empty string if blank."}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/csvConfig/skipHeaders"})}),(0,i.jsx)(t.td,{children:"Skip Headers"}),(0,i.jsx)(t.td,{children:"Do not write headers to files."}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Property"}),(0,i.jsx)(t.th,{children:"Title"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Required/Default"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/path"})})}),(0,i.jsx)(t.td,{children:"Path"}),(0,i.jsx)(t.td,{children:"The path that objects will be materialized to."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]})})]}),"\n",(0,i.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:'materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/materialize-s3-csv:dev"\n config:\n bucket: bucket\n awsAccessKeyId: <access_key_id>\n awsSecretAccessKey: <secret_access_key>\n region: us-east-2\n uploadInterval: 5m\n bindings:\n - resource:\n path: ${COLLECTION_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,i.jsx)(t.h2,{id:"file-names",children:"File Names"}),"\n",(0,i.jsx)(t.p,{children:"Materialized files are named with monotonically increasing integer values, padded with leading 0's\nso they remain lexically sortable. For example, a set of files may be materialized like this for a\ngiven collection:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"bucket/prefix/path/v0000000000/00000000000000000000.csv\nbucket/prefix/path/v0000000000/00000000000000000001.csv\nbucket/prefix/path/v0000000000/00000000000000000002.csv\n"})}),"\n",(0,i.jsxs)(t.p,{children:["Here the values for ",(0,i.jsx)(t.strong,{children:"bucket"})," and ",(0,i.jsx)(t.strong,{children:"prefix"})," are from your endpoint configuration. The ",(0,i.jsx)(t.strong,{children:"path"})," is\nspecific to the binding configuration. ",(0,i.jsx)(t.strong,{children:"v0000000000"})," represents the current ",(0,i.jsx)(t.strong,{children:"backfill counter"}),"\nfor binding and will be increased if the binding is re-backfilled, along with the file names\nstarting back over from 0."]}),"\n",(0,i.jsx)(t.h2,{id:"eventual-consistency",children:"Eventual Consistency"}),"\n",(0,i.jsx)(t.p,{children:"In rare circumstances, recently materialized files may be re-written by files with the same name if\nthe materialization shard is interrupted in the middle of processing a Flow transaction and the\ntransaction must be re-started. Files that were committed as part of a completed transaction will\nnever be re-written. In this way, eventually all collection data will be written to files\neffectively-once, although inconsistencies are possible when accessing the most recently written\ndata."})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>l});var i=n(96540);const r={},s=i.createContext(r);function c(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/487bf429.ec0ba307.js b/pr-preview/pr-1594/assets/js/487bf429.ec0ba307.js deleted file mode 100644 index b2eebdc1c8..0000000000 --- a/pr-preview/pr-1594/assets/js/487bf429.ec0ba307.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4865],{55795:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var n=i(74848),o=i(28453);const r={sidebar_position:1},a="Time Travel",l={id:"reference/time-travel",title:"Time Travel",description:"Time travel functionality allows you to restrict the data materialization process to a specific date range. When applying time travel to an existing materialization, it's important to note that it won't remove any existing documents. Instead, it will only materialize new data that falls within the specified date and time window. New data will not be included in your materialization destination unless it conforms to the specified date range criteria. Consequently, setting a lower boundary in the future date will delay the materialization of data until that future date is reached.",source:"@site/docs/reference/time-travel.md",sourceDirName:"reference",slug:"/reference/time-travel",permalink:"/pr-preview/pr-1594/reference/time-travel",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/time-travel.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Notifications",permalink:"/pr-preview/pr-1594/reference/notifications"},next:{title:"Configuring task shards",permalink:"/pr-preview/pr-1594/reference/Configuring-task-shards"}},s={},d=[{value:"How to configure time travel",id:"how-to-configure-time-travel",level:2},{value:"Specification",id:"specification",level:3},{value:"Properties",id:"properties",level:2}];function c(e){const t={code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"time-travel",children:"Time Travel"}),"\n",(0,n.jsx)(t.p,{children:"Time travel functionality allows you to restrict the data materialization process to a specific date range. When applying time travel to an existing materialization, it's important to note that it won't remove any existing documents. Instead, it will only materialize new data that falls within the specified date and time window. New data will not be included in your materialization destination unless it conforms to the specified date range criteria. Consequently, setting a lower boundary in the future date will delay the materialization of data until that future date is reached."}),"\n",(0,n.jsx)(t.h2,{id:"how-to-configure-time-travel",children:"How to configure time travel"}),"\n",(0,n.jsxs)(t.p,{children:["In the Flow web app, either navigate to an existing materialization or create a new one. Under ",(0,n.jsx)(t.strong,{children:"Source Collections"})," scroll to the bottom of a ",(0,n.jsx)(t.strong,{children:"Resource Configuration"})," for a specific collection. If you are working with a new materialization, you must link a collection to the materialization before continuing."]}),"\n",(0,n.jsxs)(t.p,{children:["You'll find two optional date-time fields for implementing time travel: ",(0,n.jsx)(t.code,{children:"notBefore"})," and ",(0,n.jsx)(t.code,{children:"notAfter"}),". Click on either field to open a date/time picker that you can use to set the values. It's not mandatory to select values for both fields for time travel to take effect. However, selecting values for both fields will ensure that only data meeting both criteria is materialized. In other words, new data must fall before the ",(0,n.jsx)(t.code,{children:"notAfter"})," date and after the ",(0,n.jsx)(t.code,{children:"notBefore"})," date to be included in the materialization."]}),"\n",(0,n.jsx)(t.h3,{id:"specification",children:"Specification"}),"\n",(0,n.jsx)(t.p,{children:"Alternatively, both fields can be defined in the Flow specification file with the following format:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-yaml",children:"materializations:\n # The name of the materialization.\n acmeCo/example/database-views:\n \t# Endpoint defines how to connect to the destination of the materialization.\n # Required, type: object\n endpoint:\n # This endpoint uses a connector provided as a Docker image.\n connector:\n # Docker image that implements the materialization connector.\n image: ghcr.io/estuary/materialize-mysql:dev\n # File that provides the connector's required configuration.\n # Configuration may also be presented inline.\n config: path/to//connector-config.yaml\n bindings:\n - # Source collection read by this binding.\n # Required, type: object or string\n source:\n # Name of the collection to be read.\n # Required.\n name: acmeCo/example/collection\n # Lower bound date-time for documents which should be processed. \n # Source collection documents published before this date-time are filtered.\n # `notBefore` is *only* a filter. Updating its value will not cause Flow\n # to re-process documents that have already been read.\n # Optional. Default is to process all documents.\n notBefore: 2023-01-23T01:00:00Z\n # Upper bound date-time for documents which should be processed.\n # Source collection documents published after this date-time are filtered.\n # Like `notBefore`, `notAfter` is *only* a filter. Updating its value will\n # not cause Flow to re-process documents that have already been read.\n # Optional. Default is to process all documents.\n notAfter: 2023-01-23T02:00:00Z\n"})}),"\n",(0,n.jsx)(t.h2,{id:"properties",children:"Properties"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Property"}),(0,n.jsx)(t.th,{children:"Title"}),(0,n.jsx)(t.th,{children:"Description"}),(0,n.jsx)(t.th,{children:"Type"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"/notBefore"})})}),(0,n.jsx)(t.td,{children:"Not Before"}),(0,n.jsx)(t.td,{children:"Only include date before this time"}),(0,n.jsx)(t.td,{children:"date-time"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"/notAfter"})})}),(0,n.jsx)(t.td,{children:"Not After"}),(0,n.jsx)(t.td,{children:"Only include data after this time"}),(0,n.jsx)(t.td,{children:"date-time"})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},28453:(e,t,i)=>{i.d(t,{R:()=>a,x:()=>l});var n=i(96540);const o={},r=n.createContext(o);function a(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4943.ce789d06.js b/pr-preview/pr-1594/assets/js/4943.ce789d06.js deleted file mode 100644 index 2401956a0d..0000000000 --- a/pr-preview/pr-1594/assets/js/4943.ce789d06.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4943],{74943:(t,e,r)=>{r.d(e,{diagram:()=>z});var i=r(99702),a=r(26312),n=(r(74353),r(16750),r(42838),function(){var t=function(t,e,r,i){for(r=r||{},i=t.length;i--;r[t[i]]=e);return r},e=[1,3],r=[1,6],i=[1,4],a=[1,5],n=[2,5],c=[1,12],s=[5,7,13,19,21,23,24,26,28,31,37,40,47],o=[7,13,19,21,23,24,26,28,31,37,40],l=[7,12,13,19,21,23,24,26,28,31,37,40],h=[7,13,47],m=[1,42],y=[1,41],u=[7,13,29,32,35,38,47],p=[1,55],g=[1,56],b=[1,57],d=[7,13,32,35,42,47],f={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,PARENT_COMMIT:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,ID:46,";":47,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"PARENT_COMMIT",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",46:"ID",47:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,7],[18,7],[18,5],[18,5],[18,5],[18,7],[18,7],[18,7],[18,7],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[41,0],[41,1],[39,1],[39,1],[39,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(t,e,r,i,a,n,c){var s=n.length-1;switch(a){case 2:return n[s];case 3:return n[s-1];case 4:return i.setDirection(n[s-3]),n[s-1];case 6:i.setOptions(n[s-1]),this.$=n[s];break;case 7:n[s-1]+=n[s],this.$=n[s-1];break;case 9:this.$=[];break;case 10:n[s-1].push(n[s]),this.$=n[s-1];break;case 11:this.$=n[s-1];break;case 16:this.$=n[s].trim(),i.setAccTitle(this.$);break;case 17:case 18:this.$=n[s].trim(),i.setAccDescription(this.$);break;case 19:i.addSection(n[s].substr(8)),this.$=n[s].substr(8);break;case 21:i.checkout(n[s]);break;case 22:i.branch(n[s]);break;case 23:i.branch(n[s-2],n[s]);break;case 24:i.cherryPick(n[s],"",void 0);break;case 25:i.cherryPick(n[s-2],"",void 0,n[s]);break;case 26:i.cherryPick(n[s-2],"",n[s]);break;case 27:i.cherryPick(n[s-4],"",n[s],n[s-2]);break;case 28:i.cherryPick(n[s-4],"",n[s-2],n[s]);break;case 29:i.cherryPick(n[s],"",n[s-2]);break;case 30:i.cherryPick(n[s],"","");break;case 31:i.cherryPick(n[s-2],"","");break;case 32:i.cherryPick(n[s-4],"","",n[s-2]);break;case 33:i.cherryPick(n[s-4],"","",n[s]);break;case 34:i.cherryPick(n[s-2],"",n[s-4],n[s]);break;case 35:i.cherryPick(n[s-2],"","",n[s]);break;case 36:i.merge(n[s],"","","");break;case 37:i.merge(n[s-2],n[s],"","");break;case 38:i.merge(n[s-2],"",n[s],"");break;case 39:i.merge(n[s-2],"","",n[s]);break;case 40:i.merge(n[s-4],n[s],"",n[s-2]);break;case 41:i.merge(n[s-4],"",n[s],n[s-2]);break;case 42:i.merge(n[s-4],"",n[s-2],n[s]);break;case 43:i.merge(n[s-4],n[s-2],n[s],"");break;case 44:i.merge(n[s-4],n[s-2],"",n[s]);break;case 45:i.merge(n[s-4],n[s],n[s-2],"");break;case 46:i.merge(n[s-6],n[s-4],n[s-2],n[s]);break;case 47:i.merge(n[s-6],n[s],n[s-4],n[s-2]);break;case 48:i.merge(n[s-6],n[s-4],n[s],n[s-2]);break;case 49:i.merge(n[s-6],n[s-2],n[s-4],n[s]);break;case 50:i.merge(n[s-6],n[s],n[s-2],n[s-4]);break;case 51:i.merge(n[s-6],n[s-2],n[s],n[s-4]);break;case 52:i.commit(n[s]);break;case 53:i.commit("","",i.commitType.NORMAL,n[s]);break;case 54:i.commit("","",n[s],"");break;case 55:i.commit("","",n[s],n[s-2]);break;case 56:i.commit("","",n[s-2],n[s]);break;case 57:i.commit("",n[s],i.commitType.NORMAL,"");break;case 58:i.commit("",n[s-2],i.commitType.NORMAL,n[s]);break;case 59:i.commit("",n[s],i.commitType.NORMAL,n[s-2]);break;case 60:i.commit("",n[s-2],n[s],"");break;case 61:i.commit("",n[s],n[s-2],"");break;case 62:i.commit("",n[s-4],n[s-2],n[s]);break;case 63:i.commit("",n[s-4],n[s],n[s-2]);break;case 64:i.commit("",n[s-2],n[s-4],n[s]);break;case 65:i.commit("",n[s],n[s-4],n[s-2]);break;case 66:i.commit("",n[s],n[s-2],n[s-4]);break;case 67:i.commit("",n[s-2],n[s],n[s-4]);break;case 68:i.commit(n[s],"",i.commitType.NORMAL,"");break;case 69:i.commit(n[s],"",i.commitType.NORMAL,n[s-2]);break;case 70:i.commit(n[s-2],"",i.commitType.NORMAL,n[s]);break;case 71:i.commit(n[s-2],"",n[s],"");break;case 72:i.commit(n[s],"",n[s-2],"");break;case 73:i.commit(n[s],n[s-2],i.commitType.NORMAL,"");break;case 74:i.commit(n[s-2],n[s],i.commitType.NORMAL,"");break;case 75:i.commit(n[s-4],"",n[s-2],n[s]);break;case 76:i.commit(n[s-4],"",n[s],n[s-2]);break;case 77:i.commit(n[s-2],"",n[s-4],n[s]);break;case 78:i.commit(n[s],"",n[s-4],n[s-2]);break;case 79:i.commit(n[s],"",n[s-2],n[s-4]);break;case 80:i.commit(n[s-2],"",n[s],n[s-4]);break;case 81:i.commit(n[s-4],n[s],n[s-2],"");break;case 82:i.commit(n[s-4],n[s-2],n[s],"");break;case 83:i.commit(n[s-2],n[s],n[s-4],"");break;case 84:i.commit(n[s],n[s-2],n[s-4],"");break;case 85:i.commit(n[s],n[s-4],n[s-2],"");break;case 86:i.commit(n[s-2],n[s-4],n[s],"");break;case 87:i.commit(n[s-4],n[s],i.commitType.NORMAL,n[s-2]);break;case 88:i.commit(n[s-4],n[s-2],i.commitType.NORMAL,n[s]);break;case 89:i.commit(n[s-2],n[s],i.commitType.NORMAL,n[s-4]);break;case 90:i.commit(n[s],n[s-2],i.commitType.NORMAL,n[s-4]);break;case 91:i.commit(n[s],n[s-4],i.commitType.NORMAL,n[s-2]);break;case 92:i.commit(n[s-2],n[s-4],i.commitType.NORMAL,n[s]);break;case 93:i.commit(n[s-6],n[s-4],n[s-2],n[s]);break;case 94:i.commit(n[s-6],n[s-4],n[s],n[s-2]);break;case 95:i.commit(n[s-6],n[s-2],n[s-4],n[s]);break;case 96:i.commit(n[s-6],n[s],n[s-4],n[s-2]);break;case 97:i.commit(n[s-6],n[s-2],n[s],n[s-4]);break;case 98:i.commit(n[s-6],n[s],n[s-2],n[s-4]);break;case 99:i.commit(n[s-4],n[s-6],n[s-2],n[s]);break;case 100:i.commit(n[s-4],n[s-6],n[s],n[s-2]);break;case 101:i.commit(n[s-2],n[s-6],n[s-4],n[s]);break;case 102:i.commit(n[s],n[s-6],n[s-4],n[s-2]);break;case 103:i.commit(n[s-2],n[s-6],n[s],n[s-4]);break;case 104:i.commit(n[s],n[s-6],n[s-2],n[s-4]);break;case 105:i.commit(n[s],n[s-4],n[s-2],n[s-6]);break;case 106:i.commit(n[s-2],n[s-4],n[s],n[s-6]);break;case 107:i.commit(n[s],n[s-2],n[s-4],n[s-6]);break;case 108:i.commit(n[s-2],n[s],n[s-4],n[s-6]);break;case 109:i.commit(n[s-4],n[s-2],n[s],n[s-6]);break;case 110:i.commit(n[s-4],n[s],n[s-2],n[s-6]);break;case 111:i.commit(n[s-2],n[s-4],n[s-6],n[s]);break;case 112:i.commit(n[s],n[s-4],n[s-6],n[s-2]);break;case 113:i.commit(n[s-2],n[s],n[s-6],n[s-4]);break;case 114:i.commit(n[s],n[s-2],n[s-6],n[s-4]);break;case 115:i.commit(n[s-4],n[s-2],n[s-6],n[s]);break;case 116:i.commit(n[s-4],n[s],n[s-6],n[s-2]);break;case 117:this.$="";break;case 118:this.$=n[s];break;case 119:this.$=i.commitType.NORMAL;break;case 120:this.$=i.commitType.REVERSE;break;case 121:this.$=i.commitType.HIGHLIGHT}},table:[{3:1,4:2,5:e,7:r,13:i,47:a},{1:[3]},{3:7,4:2,5:e,7:r,13:i,47:a},{6:8,7:n,8:[1,9],9:[1,10],10:11,13:c},t(s,[2,124]),t(s,[2,125]),t(s,[2,126]),{1:[2,1]},{7:[1,13]},{6:14,7:n,10:11,13:c},{8:[1,15]},t(o,[2,9],{11:16,12:[1,17]}),t(l,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:n,10:11,13:c},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],37:[1,33],40:[1,32]},t(l,[2,7]),{1:[2,3]},{7:[1,36]},t(o,[2,10]),{4:37,7:r,13:i,47:a},t(o,[2,12]),t(h,[2,13]),t(h,[2,14]),t(h,[2,15]),{20:[1,38]},{22:[1,39]},t(h,[2,18]),t(h,[2,19]),t(h,[2,20]),{27:40,33:m,46:y},t(h,[2,117],{41:43,32:[1,46],33:[1,48],35:[1,44],38:[1,45],42:[1,47]}),{27:49,33:m,46:y},{32:[1,50],35:[1,51]},{27:52,33:m,46:y},{1:[2,4]},t(o,[2,11]),t(h,[2,16]),t(h,[2,17]),t(h,[2,21]),t(u,[2,122]),t(u,[2,123]),t(h,[2,52]),{33:[1,53]},{39:54,43:p,44:g,45:b},{33:[1,58]},{33:[1,59]},t(h,[2,118]),t(h,[2,36],{32:[1,60],35:[1,62],38:[1,61]}),{33:[1,63]},{33:[1,64],36:[1,65]},t(h,[2,22],{29:[1,66]}),t(h,[2,53],{32:[1,68],38:[1,67],42:[1,69]}),t(h,[2,54],{32:[1,71],35:[1,70],42:[1,72]}),t(d,[2,119]),t(d,[2,120]),t(d,[2,121]),t(h,[2,57],{35:[1,73],38:[1,74],42:[1,75]}),t(h,[2,68],{32:[1,78],35:[1,76],38:[1,77]}),{33:[1,79]},{39:80,43:p,44:g,45:b},{33:[1,81]},t(h,[2,24],{34:[1,82],35:[1,83]}),{32:[1,84]},{32:[1,85]},{30:[1,86]},{39:87,43:p,44:g,45:b},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{33:[1,93]},{39:94,43:p,44:g,45:b},{33:[1,95]},{33:[1,96]},{39:97,43:p,44:g,45:b},{33:[1,98]},t(h,[2,37],{35:[1,100],38:[1,99]}),t(h,[2,38],{32:[1,102],35:[1,101]}),t(h,[2,39],{32:[1,103],38:[1,104]}),{33:[1,105]},{33:[1,106],36:[1,107]},{33:[1,108]},{33:[1,109]},t(h,[2,23]),t(h,[2,55],{32:[1,110],42:[1,111]}),t(h,[2,59],{38:[1,112],42:[1,113]}),t(h,[2,69],{32:[1,115],38:[1,114]}),t(h,[2,56],{32:[1,116],42:[1,117]}),t(h,[2,61],{35:[1,118],42:[1,119]}),t(h,[2,72],{32:[1,121],35:[1,120]}),t(h,[2,58],{38:[1,122],42:[1,123]}),t(h,[2,60],{35:[1,124],42:[1,125]}),t(h,[2,73],{35:[1,127],38:[1,126]}),t(h,[2,70],{32:[1,129],38:[1,128]}),t(h,[2,71],{32:[1,131],35:[1,130]}),t(h,[2,74],{35:[1,133],38:[1,132]}),{39:134,43:p,44:g,45:b},{33:[1,135]},{33:[1,136]},{33:[1,137]},{33:[1,138]},{39:139,43:p,44:g,45:b},t(h,[2,25],{35:[1,140]}),t(h,[2,26],{34:[1,141]}),t(h,[2,31],{34:[1,142]}),t(h,[2,29],{34:[1,143]}),t(h,[2,30],{34:[1,144]}),{33:[1,145]},{33:[1,146]},{39:147,43:p,44:g,45:b},{33:[1,148]},{39:149,43:p,44:g,45:b},{33:[1,150]},{33:[1,151]},{33:[1,152]},{33:[1,153]},{33:[1,154]},{33:[1,155]},{33:[1,156]},{39:157,43:p,44:g,45:b},{33:[1,158]},{33:[1,159]},{33:[1,160]},{39:161,43:p,44:g,45:b},{33:[1,162]},{39:163,43:p,44:g,45:b},{33:[1,164]},{33:[1,165]},{33:[1,166]},{39:167,43:p,44:g,45:b},{33:[1,168]},t(h,[2,43],{35:[1,169]}),t(h,[2,44],{38:[1,170]}),t(h,[2,42],{32:[1,171]}),t(h,[2,45],{35:[1,172]}),t(h,[2,40],{38:[1,173]}),t(h,[2,41],{32:[1,174]}),{33:[1,175],36:[1,176]},{33:[1,177]},{33:[1,178]},{33:[1,179]},{33:[1,180]},t(h,[2,66],{42:[1,181]}),t(h,[2,79],{32:[1,182]}),t(h,[2,67],{42:[1,183]}),t(h,[2,90],{38:[1,184]}),t(h,[2,80],{32:[1,185]}),t(h,[2,89],{38:[1,186]}),t(h,[2,65],{42:[1,187]}),t(h,[2,78],{32:[1,188]}),t(h,[2,64],{42:[1,189]}),t(h,[2,84],{35:[1,190]}),t(h,[2,77],{32:[1,191]}),t(h,[2,83],{35:[1,192]}),t(h,[2,63],{42:[1,193]}),t(h,[2,91],{38:[1,194]}),t(h,[2,62],{42:[1,195]}),t(h,[2,85],{35:[1,196]}),t(h,[2,86],{35:[1,197]}),t(h,[2,92],{38:[1,198]}),t(h,[2,76],{32:[1,199]}),t(h,[2,87],{38:[1,200]}),t(h,[2,75],{32:[1,201]}),t(h,[2,81],{35:[1,202]}),t(h,[2,82],{35:[1,203]}),t(h,[2,88],{38:[1,204]}),{33:[1,205]},{39:206,43:p,44:g,45:b},{33:[1,207]},{33:[1,208]},{39:209,43:p,44:g,45:b},{33:[1,210]},t(h,[2,27]),t(h,[2,32]),t(h,[2,28]),t(h,[2,33]),t(h,[2,34]),t(h,[2,35]),{33:[1,211]},{33:[1,212]},{33:[1,213]},{39:214,43:p,44:g,45:b},{33:[1,215]},{39:216,43:p,44:g,45:b},{33:[1,217]},{33:[1,218]},{33:[1,219]},{33:[1,220]},{33:[1,221]},{33:[1,222]},{33:[1,223]},{39:224,43:p,44:g,45:b},{33:[1,225]},{33:[1,226]},{33:[1,227]},{39:228,43:p,44:g,45:b},{33:[1,229]},{39:230,43:p,44:g,45:b},{33:[1,231]},{33:[1,232]},{33:[1,233]},{39:234,43:p,44:g,45:b},t(h,[2,46]),t(h,[2,48]),t(h,[2,47]),t(h,[2,49]),t(h,[2,51]),t(h,[2,50]),t(h,[2,107]),t(h,[2,108]),t(h,[2,105]),t(h,[2,106]),t(h,[2,110]),t(h,[2,109]),t(h,[2,114]),t(h,[2,113]),t(h,[2,112]),t(h,[2,111]),t(h,[2,116]),t(h,[2,115]),t(h,[2,104]),t(h,[2,103]),t(h,[2,102]),t(h,[2,101]),t(h,[2,99]),t(h,[2,100]),t(h,[2,98]),t(h,[2,97]),t(h,[2,96]),t(h,[2,95]),t(h,[2,93]),t(h,[2,94])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(t,e){if(!e.recoverable){var r=new Error(t);throw r.hash=e,r}this.trace(t)},parse:function(t){var e=this,r=[0],i=[],a=[null],n=[],c=this.table,s="",o=0,l=0,h=n.slice.call(arguments,1),m=Object.create(this.lexer),y={yy:{}};for(var u in this.yy)Object.prototype.hasOwnProperty.call(this.yy,u)&&(y.yy[u]=this.yy[u]);m.setInput(t,y.yy),y.yy.lexer=m,y.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var p=m.yylloc;n.push(p);var g=m.options&&m.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,d,f,$,k,x,_,T,w,E={};;){if(d=r[r.length-1],this.defaultActions[d]?f=this.defaultActions[d]:(null==b&&(w=void 0,"number"!=typeof(w=i.pop()||m.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),b=w),f=c[d]&&c[d][b]),void 0===f||!f.length||!f[0]){var L="";for(k in T=[],c[d])this.terminals_[k]&&k>2&&T.push("'"+this.terminals_[k]+"'");L=m.showPosition?"Parse error on line "+(o+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(L,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:p,expected:T})}if(f[0]instanceof Array&&f.length>1)throw new Error("Parse Error: multiple actions possible at state: "+d+", token: "+b);switch(f[0]){case 1:r.push(b),a.push(m.yytext),n.push(m.yylloc),r.push(f[1]),b=null,l=m.yyleng,s=m.yytext,o=m.yylineno,p=m.yylloc;break;case 2:if(x=this.productions_[f[1]][1],E.$=a[a.length-x],E._$={first_line:n[n.length-(x||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(x||1)].first_column,last_column:n[n.length-1].last_column},g&&(E._$.range=[n[n.length-(x||1)].range[0],n[n.length-1].range[1]]),void 0!==($=this.performAction.apply(E,[s,l,o,y.yy,f[1],a,n].concat(h))))return $;x&&(r=r.slice(0,-1*x*2),a=a.slice(0,-1*x),n=n.slice(0,-1*x)),r.push(this.productions_[f[1]][0]),a.push(E.$),n.push(E._$),_=c[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},$={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,r=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===i.length?this.yylloc.first_column:0)+i[i.length-r.length].length-r[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var r,i,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var n in a)this[n]=a[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,r,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),n=0;n<a.length;n++)if((r=this._input.match(this.rules[a[n]]))&&(!e||r[0].length>e[0].length)){if(e=r,i=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,a[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,r,i){switch(r){case 0:return this.begin("acc_title"),19;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),21;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:case 30:case 34:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 13;case 8:case 9:break;case 10:return 5;case 11:return 40;case 12:return 32;case 13:return 38;case 14:return 42;case 15:return 43;case 16:return 44;case 17:return 45;case 18:return 35;case 19:return 28;case 20:return 29;case 21:return 37;case 22:return 31;case 23:return 34;case 24:return 26;case 25:case 26:return 9;case 27:return 8;case 28:return"CARET";case 29:this.begin("options");break;case 31:return 12;case 32:return 36;case 33:this.begin("string");break;case 35:return 33;case 36:return 30;case 37:return 46;case 38:return 7}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:parent:)/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},options:{rules:[30,31],inclusive:!1},string:{rules:[34,35],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,36,37,38,39],inclusive:!0}}};function k(){this.yy={}}return f.lexer=$,k.prototype=f,f.Parser=k,new k}());n.parser=n;const c=n;let s=(0,i.c)().gitGraph.mainBranchName,o=(0,i.c)().gitGraph.mainBranchOrder,l={},h=null,m={};m[s]={name:s,order:o};let y={};y[s]=h;let u=s,p="LR",g=0;function b(){return(0,i.y)({length:7})}let d={};const f=function(t){if(t=i.e.sanitizeText(t,(0,i.c)()),void 0===y[t]){let e=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+t+'")');throw e.hash={text:"checkout "+t,token:"checkout "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+t+'"']},e}{u=t;const e=y[u];h=l[e]}};function $(t,e,r){const i=t.indexOf(e);-1===i?t.push(r):t.splice(i,1,r)}function k(t){const e=t.reduce(((t,e)=>t.seq>e.seq?t:e),t[0]);let r="";t.forEach((function(t){r+=t===e?"\t*":"\t|"}));const a=[r,e.id,e.seq];for(let i in y)y[i]===e.id&&a.push(i);if(i.l.debug(a.join(" ")),e.parents&&2==e.parents.length){const r=l[e.parents[0]];$(t,e,r),t.push(l[e.parents[1]])}else{if(0==e.parents.length)return;{const r=l[e.parents];$(t,e,r)}}k(t=function(t,e){const r=Object.create(null);return t.reduce(((t,i)=>{const a=e(i);return r[a]||(r[a]=!0,t.push(i)),t}),[])}(t,(t=>t.id)))}const x=function(){const t=Object.keys(l).map((function(t){return l[t]}));return t.forEach((function(t){i.l.debug(t.id)})),t.sort(((t,e)=>t.seq-e.seq)),t},_={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},T={getConfig:()=>(0,i.c)().gitGraph,setDirection:function(t){p=t},setOptions:function(t){i.l.debug("options str",t),t=(t=t&&t.trim())||"{}";try{d=JSON.parse(t)}catch(e){i.l.error("error while parsing gitGraph options",e.message)}},getOptions:function(){return d},commit:function(t,e,r,a){i.l.debug("Entering commit:",t,e,r,a),e=i.e.sanitizeText(e,(0,i.c)()),t=i.e.sanitizeText(t,(0,i.c)()),a=i.e.sanitizeText(a,(0,i.c)());const n={id:e||g+"-"+b(),message:t,seq:g++,type:r||_.NORMAL,tag:a||"",parents:null==h?[]:[h.id],branch:u};h=n,l[n.id]=n,y[u]=n.id,i.l.debug("in pushCommit "+n.id)},branch:function(t,e){if(t=i.e.sanitizeText(t,(0,i.c)()),void 0!==y[t]){let e=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+t+'")');throw e.hash={text:"branch "+t,token:"branch "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+t+'"']},e}y[t]=null!=h?h.id:null,m[t]={name:t,order:e?parseInt(e,10):null},f(t),i.l.debug("in createBranch")},merge:function(t,e,r,a){t=i.e.sanitizeText(t,(0,i.c)()),e=i.e.sanitizeText(e,(0,i.c)());const n=l[y[u]],c=l[y[t]];if(u===t){let e=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},e}if(void 0===n||!n){let e=new Error('Incorrect usage of "merge". Current branch ('+u+")has no commits");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},e}if(void 0===y[t]){let e=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") does not exist");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+t]},e}if(void 0===c||!c){let e=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") has no commits");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},e}if(n===c){let e=new Error('Incorrect usage of "merge". Both branches have same head');throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},e}if(e&&void 0!==l[e]){let i=new Error('Incorrect usage of "merge". Commit with id:'+e+" already exists, use different custom Id");throw i.hash={text:"merge "+t+e+r+a,token:"merge "+t+e+r+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+t+" "+e+"_UNIQUE "+r+" "+a]},i}const s={id:e||g+"-"+b(),message:"merged branch "+t+" into "+u,seq:g++,parents:[null==h?null:h.id,y[t]],branch:u,type:_.MERGE,customType:r,customId:!!e,tag:a||""};h=s,l[s.id]=s,y[u]=s.id,i.l.debug(y),i.l.debug("in mergeBranch")},cherryPick:function(t,e,r,a){if(i.l.debug("Entering cherryPick:",t,e,r),t=i.e.sanitizeText(t,(0,i.c)()),e=i.e.sanitizeText(e,(0,i.c)()),r=i.e.sanitizeText(r,(0,i.c)()),a=i.e.sanitizeText(a,(0,i.c)()),!t||void 0===l[t]){let r=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}let n=l[t],c=n.branch;if(a&&(!Array.isArray(n.parents)||!n.parents.includes(a))){throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.")}if(n.type===_.MERGE&&!a){throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.")}if(!e||void 0===l[e]){if(c===u){let r=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}const s=l[y[u]];if(void 0===s||!s){let r=new Error('Incorrect usage of "cherry-pick". Current branch ('+u+")has no commits");throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}const o={id:g+"-"+b(),message:"cherry-picked "+n+" into "+u,seq:g++,parents:[null==h?null:h.id,n.id],branch:u,type:_.CHERRY_PICK,tag:r??`cherry-pick:${n.id}${n.type===_.MERGE?`|parent:${a}`:""}`};h=o,l[o.id]=o,y[u]=o.id,i.l.debug(y),i.l.debug("in cherryPick")}},checkout:f,prettyPrint:function(){i.l.debug(l);k([x()[0]])},clear:function(){l={},h=null;let t=(0,i.c)().gitGraph.mainBranchName,e=(0,i.c)().gitGraph.mainBranchOrder;y={},y[t]=null,m={},m[t]={name:t,order:e},u=t,g=0,(0,i.v)()},getBranchesAsObjArray:function(){return Object.values(m).map(((t,e)=>null!==t.order?t:{...t,order:parseFloat(`0.${e}`,10)})).sort(((t,e)=>t.order-e.order)).map((({name:t})=>({name:t})))},getBranches:function(){return y},getCommits:function(){return l},getCommitsArray:x,getCurrentBranch:function(){return u},getDirection:function(){return p},getHead:function(){return h},setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,setDiagramTitle:i.q,getDiagramTitle:i.t,commitType:_};let w={};const E=0,L=1,M=2,v=3,I=4;let A={},R={},O=[],C=0,S="LR";const P=t=>{const e=document.createElementNS("http://www.w3.org/2000/svg","text");let r=[];r="string"==typeof t?t.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(t)?t:[];for(const i of r){const t=document.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","0"),t.setAttribute("class","row"),t.textContent=i.trim(),e.appendChild(t)}return e},B=(t,e,r)=>{const a=(0,i.c)().gitGraph,n=t.append("g").attr("class","commit-bullets"),c=t.append("g").attr("class","commit-labels");let s=0;"TB"===S&&(s=30);const o=Object.keys(e).sort(((t,r)=>e[t].seq-e[r].seq)),l=a.parallelCommits,h=10;o.forEach((t=>{const i=e[t];if(l)if(i.parents.length){const t=(t=>{let e="",r=0;return t.forEach((t=>{const i="TB"===S?R[t].y:R[t].x;i>=r&&(e=t,r=i)})),e||void 0})(i.parents);s="TB"===S?R[t].y+40:R[t].x+40}else s=0,"TB"===S&&(s=30);const o=s+h,m="TB"===S?o:A[i.branch].pos,y="TB"===S?A[i.branch].pos:o;if(r){let t,e=void 0!==i.customType&&""!==i.customType?i.customType:i.type;switch(e){case E:t="commit-normal";break;case L:t="commit-reverse";break;case M:t="commit-highlight";break;case v:t="commit-merge";break;case I:t="commit-cherry-pick";break;default:t="commit-normal"}if(e===M){const e=n.append("rect");e.attr("x",y-10),e.attr("y",m-10),e.attr("height",20),e.attr("width",20),e.attr("class",`commit ${i.id} commit-highlight${A[i.branch].index%8} ${t}-outer`),n.append("rect").attr("x",y-6).attr("y",m-6).attr("height",12).attr("width",12).attr("class",`commit ${i.id} commit${A[i.branch].index%8} ${t}-inner`)}else if(e===I)n.append("circle").attr("cx",y).attr("cy",m).attr("r",10).attr("class",`commit ${i.id} ${t}`),n.append("circle").attr("cx",y-3).attr("cy",m+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${i.id} ${t}`),n.append("circle").attr("cx",y+3).attr("cy",m+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${i.id} ${t}`),n.append("line").attr("x1",y+3).attr("y1",m+1).attr("x2",y).attr("y2",m-5).attr("stroke","#fff").attr("class",`commit ${i.id} ${t}`),n.append("line").attr("x1",y-3).attr("y1",m+1).attr("x2",y).attr("y2",m-5).attr("stroke","#fff").attr("class",`commit ${i.id} ${t}`);else{const r=n.append("circle");if(r.attr("cx",y),r.attr("cy",m),r.attr("r",i.type===v?9:10),r.attr("class",`commit ${i.id} commit${A[i.branch].index%8}`),e===v){const e=n.append("circle");e.attr("cx",y),e.attr("cy",m),e.attr("r",6),e.attr("class",`commit ${t} ${i.id} commit${A[i.branch].index%8}`)}if(e===L){n.append("path").attr("d",`M ${y-5},${m-5}L${y+5},${m+5}M${y-5},${m+5}L${y+5},${m-5}`).attr("class",`commit ${t} ${i.id} commit${A[i.branch].index%8}`)}}}if(R[i.id]="TB"===S?{x:y,y:o}:{x:o,y:m},r){const t=4,e=2;if(i.type!==I&&(i.customId&&i.type===v||i.type!==v)&&a.showCommitLabel){const r=c.append("g"),n=r.insert("rect").attr("class","commit-label-bkg"),l=r.append("text").attr("x",s).attr("y",m+25).attr("class","commit-label").text(i.id);let h=l.node().getBBox();if(n.attr("x",o-h.width/2-e).attr("y",m+13.5).attr("width",h.width+2*e).attr("height",h.height+2*e),"TB"===S&&(n.attr("x",y-(h.width+4*t+5)).attr("y",m-12),l.attr("x",y-(h.width+4*t)).attr("y",m+h.height-12)),"TB"!==S&&l.attr("x",o-h.width/2),a.rotateCommitLabel)if("TB"===S)l.attr("transform","rotate(-45, "+y+", "+m+")"),n.attr("transform","rotate(-45, "+y+", "+m+")");else{let t=-7.5-(h.width+10)/25*9.5,e=10+h.width/25*8.5;r.attr("transform","translate("+t+", "+e+") rotate(-45, "+s+", "+m+")")}}if(i.tag){const r=c.insert("polygon"),a=c.append("circle"),n=c.append("text").attr("y",m-16).attr("class","tag-label").text(i.tag);let l=n.node().getBBox();n.attr("x",o-l.width/2);const u=l.height/2,p=m-19.2;r.attr("class","tag-label-bkg").attr("points",`\n ${s-l.width/2-t/2},${p+e}\n ${s-l.width/2-t/2},${p-e}\n ${o-l.width/2-t},${p-u-e}\n ${o+l.width/2+t},${p-u-e}\n ${o+l.width/2+t},${p+u+e}\n ${o-l.width/2-t},${p+u+e}`),a.attr("cx",s-l.width/2+t/2).attr("cy",p).attr("r",1.5).attr("class","tag-hole"),"TB"===S&&(r.attr("class","tag-label-bkg").attr("points",`\n ${y},${s+e}\n ${y},${s-e}\n ${y+h},${s-u-e}\n ${y+h+l.width+t},${s-u-e}\n ${y+h+l.width+t},${s+u+e}\n ${y+h},${s+u+e}`).attr("transform","translate(12,12) rotate(45, "+y+","+s+")"),a.attr("cx",y+t/2).attr("cy",s).attr("transform","translate(12,12) rotate(45, "+y+","+s+")"),n.attr("x",y+5).attr("y",s+3).attr("transform","translate(14,14) rotate(45, "+y+","+s+")"))}}s+=50,s>C&&(C=s)}))},N=(t,e,r,i,a)=>{const n=("TB"===S?r.x<i.x:r.y<i.y)?e.branch:t.branch;return Object.values(a).some((r=>{return(i=r).seq>t.seq&&i.seq<e.seq&&(t=>t.branch===n)(r);var i}))},G=(t,e,r=0)=>{const i=t+Math.abs(t-e)/2;if(r>5)return i;if(O.every((t=>Math.abs(t-i)>=10)))return O.push(i),i;const a=Math.abs(t-e);return G(t,e-a/5,r+1)},H=(t,e)=>{const r=t.append("g").attr("class","commit-arrows");Object.keys(e).forEach((t=>{const i=e[t];i.parents&&i.parents.length>0&&i.parents.forEach((t=>{((t,e,r,i)=>{const a=R[e.id],n=R[r.id],c=N(e,r,a,n,i);let s,o="",l="",h=0,m=0,y=A[r.branch].index;if(r.type===v&&e.id!==r.parents[0]&&(y=A[e.branch].index),c){o="A 10 10, 0, 0, 0,",l="A 10 10, 0, 0, 1,",h=10,m=10;const t=a.y<n.y?G(a.y,n.y):G(n.y,a.y),r=a.x<n.x?G(a.x,n.x):G(n.x,a.x);"TB"===S?a.x<n.x?s=`M ${a.x} ${a.y} L ${r-h} ${a.y} ${l} ${r} ${a.y+m} L ${r} ${n.y-h} ${o} ${r+m} ${n.y} L ${n.x} ${n.y}`:(y=A[e.branch].index,s=`M ${a.x} ${a.y} L ${r+h} ${a.y} ${o} ${r} ${a.y+m} L ${r} ${n.y-h} ${l} ${r-m} ${n.y} L ${n.x} ${n.y}`):a.y<n.y?s=`M ${a.x} ${a.y} L ${a.x} ${t-h} ${o} ${a.x+m} ${t} L ${n.x-h} ${t} ${l} ${n.x} ${t+m} L ${n.x} ${n.y}`:(y=A[e.branch].index,s=`M ${a.x} ${a.y} L ${a.x} ${t+h} ${l} ${a.x+m} ${t} L ${n.x-h} ${t} ${o} ${n.x} ${t-m} L ${n.x} ${n.y}`)}else o="A 20 20, 0, 0, 0,",l="A 20 20, 0, 0, 1,",h=20,m=20,"TB"===S?(a.x<n.x&&(s=r.type===v&&e.id!==r.parents[0]?`M ${a.x} ${a.y} L ${a.x} ${n.y-h} ${o} ${a.x+m} ${n.y} L ${n.x} ${n.y}`:`M ${a.x} ${a.y} L ${n.x-h} ${a.y} ${l} ${n.x} ${a.y+m} L ${n.x} ${n.y}`),a.x>n.x&&(o="A 20 20, 0, 0, 0,",l="A 20 20, 0, 0, 1,",h=20,m=20,s=r.type===v&&e.id!==r.parents[0]?`M ${a.x} ${a.y} L ${a.x} ${n.y-h} ${l} ${a.x-m} ${n.y} L ${n.x} ${n.y}`:`M ${a.x} ${a.y} L ${n.x+h} ${a.y} ${o} ${n.x} ${a.y+m} L ${n.x} ${n.y}`),a.x===n.x&&(s=`M ${a.x} ${a.y} L ${n.x} ${n.y}`)):(a.y<n.y&&(s=r.type===v&&e.id!==r.parents[0]?`M ${a.x} ${a.y} L ${n.x-h} ${a.y} ${l} ${n.x} ${a.y+m} L ${n.x} ${n.y}`:`M ${a.x} ${a.y} L ${a.x} ${n.y-h} ${o} ${a.x+m} ${n.y} L ${n.x} ${n.y}`),a.y>n.y&&(s=r.type===v&&e.id!==r.parents[0]?`M ${a.x} ${a.y} L ${n.x-h} ${a.y} ${o} ${n.x} ${a.y-m} L ${n.x} ${n.y}`:`M ${a.x} ${a.y} L ${a.x} ${n.y+h} ${l} ${a.x+m} ${n.y} L ${n.x} ${n.y}`),a.y===n.y&&(s=`M ${a.x} ${a.y} L ${n.x} ${n.y}`));t.append("path").attr("d",s).attr("class","arrow arrow"+y%8)})(r,e[t],i,e)}))}))},z={parser:c,db:T,renderer:{draw:function(t,e,r,n){A={},R={},w={},C=0,O=[],S="LR";const c=(0,i.c)(),s=c.gitGraph;i.l.debug("in gitgraph renderer",t+"\n","id:",e,r),w=n.db.getCommits();const o=n.db.getBranchesAsObjArray();S=n.db.getDirection();const l=(0,a.Ltv)(`[id="${e}"]`);let h=0;o.forEach(((t,e)=>{const r=P(t.name),i=l.append("g"),a=i.insert("g").attr("class","branchLabel"),n=a.insert("g").attr("class","label branch-label");n.node().appendChild(r);let c=r.getBBox();A[t.name]={pos:h,index:e},h+=50+(s.rotateCommitLabel?40:0)+("TB"===S?c.width/2:0),n.remove(),a.remove(),i.remove()})),B(l,w,!1),s.showBranches&&((t,e)=>{const r=(0,i.c)().gitGraph,a=t.append("g");e.forEach(((t,e)=>{const i=e%8,n=A[t.name].pos,c=a.append("line");c.attr("x1",0),c.attr("y1",n),c.attr("x2",C),c.attr("y2",n),c.attr("class","branch branch"+i),"TB"===S&&(c.attr("y1",30),c.attr("x1",n),c.attr("y2",C),c.attr("x2",n)),O.push(n);let s=t.name;const o=P(s),l=a.insert("rect"),h=a.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+i);h.node().appendChild(o);let m=o.getBBox();l.attr("class","branchLabelBkg label"+i).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(!0===r.rotateCommitLabel?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),h.attr("transform","translate("+(-m.width-14-(!0===r.rotateCommitLabel?30:0))+", "+(n-m.height/2-1)+")"),"TB"===S&&(l.attr("x",n-m.width/2-10).attr("y",0),h.attr("transform","translate("+(n-m.width/2-5)+", 0)")),"TB"!==S&&l.attr("transform","translate(-19, "+(n-m.height/2)+")")}))})(l,o),H(l,w),B(l,w,!0),i.u.insertTitle(l,"gitTitleText",s.titleTopMargin,n.db.getDiagramTitle()),(0,i.z)(void 0,l,s.diagramPadding,s.useMaxWidth??c.useMaxWidth)}},styles:t=>`\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0,1,2,3,4,5,6,7].map((e=>`\n .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; }\n .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; }\n .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; }\n .label${e} { fill: ${t["git"+e]}; }\n .arrow${e} { stroke: ${t["git"+e]}; }\n `)).join("\n")}\n\n .branch {\n stroke-width: 1;\n stroke: ${t.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};}\n .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; }\n .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};}\n .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; }\n .tag-hole { fill: ${t.textColor}; }\n\n .commit-merge {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n .commit-reverse {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n }\n`}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/49e00cf0.cdedc3b2.js b/pr-preview/pr-1594/assets/js/49e00cf0.cdedc3b2.js deleted file mode 100644 index 7239727e26..0000000000 --- a/pr-preview/pr-1594/assets/js/49e00cf0.cdedc3b2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8264],{58521:(e,d,s)=>{s.r(d),s.d(d,{assets:()=>c,contentTitle:()=>i,default:()=>x,frontMatter:()=>t,metadata:()=>l,toc:()=>h});var n=s(74848),r=s(28453);const t={},i="Google Cloud SQL for MySQL",l={id:"reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql",title:"Google Cloud SQL for MySQL",description:"This connector materializes Flow collections into tables in a MySQL database.",source:"@site/docs/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql.md",sourceDirName:"reference/Connectors/materialization-connectors/MySQL",slug:"/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amazon RDS for MySQL",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql"},next:{title:"MySQL HeatWave",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave"}},c={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Conenecting Directly to Google Cloud SQL",id:"conenecting-directly-to-google-cloud-sql",level:3},{value:"Connect With SSH Tunneling",id:"connect-with-ssh-tunneling",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Setting the MySQL time zone",id:"setting-the-mysql-time-zone",level:3},{value:"SSL Mode",id:"ssl-mode",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Setup",id:"setup-1",level:3},{value:"Delta updates",id:"delta-updates",level:2},{value:"Date & times",id:"date--times",level:2},{value:"Reserved words",id:"reserved-words",level:2},{value:"Changelog",id:"changelog",level:2},{value:"V1: 2023-08-21",id:"v1-2023-08-21",level:4}];function o(e){const d={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(d.h1,{id:"google-cloud-sql-for-mysql",children:"Google Cloud SQL for MySQL"}),"\n",(0,n.jsx)(d.p,{children:"This connector materializes Flow collections into tables in a MySQL database."}),"\n",(0,n.jsxs)(d.p,{children:["It is available for use in the Flow web application. For local development or\nopen-source workflows,\n",(0,n.jsx)(d.a,{href:"https://ghcr.io/estuary/materialize-mysql:dev",children:(0,n.jsx)(d.code,{children:"ghcr.io/estuary/materialize-mysql:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,n.jsx)(d.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsx)(d.p,{children:"To use this connector, you'll need:"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["A MySQL database to which to materialize, and user credentials.","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"MySQL versions 5.7 and later are supported"}),"\n",(0,n.jsx)(d.li,{children:"The connector will create new tables in the database per your specification,\nso user credentials must have access to create new tables."}),"\n",(0,n.jsxs)(d.li,{children:["The ",(0,n.jsx)(d.code,{children:"local_infile"})," global variable must be enabled. You can enable this\nsetting by running ",(0,n.jsx)(d.code,{children:"SET GLOBAL local_infile = true"})," in your database."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"setup",children:"Setup"}),"\n",(0,n.jsx)(d.h3,{id:"conenecting-directly-to-google-cloud-sql",children:"Conenecting Directly to Google Cloud SQL"}),"\n",(0,n.jsxs)(d.ol,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.a,{href:"https://cloud.google.com/sql/docs/mysql/configure-ip#add",children:"Enable public IP on your database"})," and add the ",(0,n.jsx)(d.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"})," as authorized IP addresses."]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"connect-with-ssh-tunneling",children:"Connect With SSH Tunneling"}),"\n",(0,n.jsx)(d.p,{children:"To allow SSH tunneling to a database instance hosted on Google Cloud, you must set up a virtual machine (VM)."}),"\n",(0,n.jsxs)(d.ol,{children:["\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:["Begin by finding your public SSH key on your local machine.\nIn the ",(0,n.jsx)(d.code,{children:".ssh"})," subdirectory of your user home directory,\nlook for the PEM file that contains the private SSH key. Check that it starts with ",(0,n.jsx)(d.code,{children:"-----BEGIN RSA PRIVATE KEY-----"}),",\nwhich indicates it is an RSA-based file."]}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"If no such file exists, generate one using the command:"}),"\n"]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{className:"language-console",children:" ssh-keygen -m PEM -t rsa\n"})}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["If a PEM file exists, but starts with ",(0,n.jsx)(d.code,{children:"-----BEGIN OPENSSH PRIVATE KEY-----"}),", convert it with the command:"]}),"\n"]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{className:"language-console",children:' ssh-keygen -p -N "" -m pem -f /path/to/key\n'})}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"If your Google login differs from your local username, generate a key that includes your Google email address as a comment:"}),"\n"]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{className:"language-console",children:" ssh-keygen -m PEM -t rsa -C user@domain.com\n"})}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:[(0,n.jsx)(d.a,{href:"https://cloud.google.com/compute/docs/instances/create-start-instance",children:"Create and start a new VM in GCP"}),", ",(0,n.jsx)(d.a,{href:"https://cloud.google.com/compute/docs/images/os-details#user-space-features",children:"choosing an image that supports OS Login"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:[(0,n.jsx)(d.a,{href:"https://cloud.google.com/compute/docs/connect/add-ssh-keys",children:"Add your public key to the VM"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:[(0,n.jsx)(d.a,{href:"https://cloud.google.com/compute/docs/ip-addresses/reserve-static-external-ip-address",children:"Reserve an external IP address"})," and connect it to the VM during setup.\nNote the generated address."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.admonition,{title:"Configuration Tip",type:"tip",children:(0,n.jsxs)(d.p,{children:["To configure the connector, you must specify the database address in the format\n",(0,n.jsx)(d.code,{children:"host:port"}),". (You can also supply ",(0,n.jsx)(d.code,{children:"host"})," only; the connector will use the port ",(0,n.jsx)(d.code,{children:"3306"})," by default, which is correct in many cases.)\nYou can find the host and port in the following locations in each platform's console:"]})}),"\n",(0,n.jsx)(d.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(d.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a MySQL materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database."}),"\n",(0,n.jsx)(d.h3,{id:"properties",children:"Properties"}),"\n",(0,n.jsx)(d.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Property"}),(0,n.jsx)(d.th,{children:"Title"}),(0,n.jsx)(d.th,{children:"Description"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required/Default"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.strong,{children:(0,n.jsx)(d.code,{children:"/database"})})}),(0,n.jsx)(d.td,{children:"Database"}),(0,n.jsx)(d.td,{children:"Name of the logical database to materialize to."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"Required"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.strong,{children:(0,n.jsx)(d.code,{children:"/address"})})}),(0,n.jsx)(d.td,{children:"Address"}),(0,n.jsxs)(d.td,{children:["Host and port of the database. If only the host is specified, port will default to ",(0,n.jsx)(d.code,{children:"3306"}),"."]}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"Required"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.strong,{children:(0,n.jsx)(d.code,{children:"/password"})})}),(0,n.jsx)(d.td,{children:"Password"}),(0,n.jsx)(d.td,{children:"Password for the specified database user."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"Required"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.strong,{children:(0,n.jsx)(d.code,{children:"/user"})})}),(0,n.jsx)(d.td,{children:"User"}),(0,n.jsx)(d.td,{children:"Database user to connect as."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"Required"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/timezone"})}),(0,n.jsx)(d.td,{children:"Timezone"}),(0,n.jsxs)(d.td,{children:["Timezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read. Must be a valid IANA time zone name or +HH",":MM"," offset. Takes precedence over the 'time_zone' system variable if both are set."]}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/advanced"})}),(0,n.jsx)(d.td,{children:"Advanced Options"}),(0,n.jsx)(d.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,n.jsx)(d.td,{children:"object"}),(0,n.jsx)(d.td,{})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/advanced/sslmode"})}),(0,n.jsx)(d.td,{children:"SSL Mode"}),(0,n.jsx)(d.td,{children:"Overrides SSL connection behavior by setting the 'sslmode' parameter."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/advanced/ssl_server_ca"})}),(0,n.jsx)(d.td,{children:"SSL Server CA"}),(0,n.jsx)(d.td,{children:"Optional server certificate authority to use when connecting with custom SSL mode"}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/advanced/ssl_client_cert"})}),(0,n.jsx)(d.td,{children:"SSL Client Certificate"}),(0,n.jsx)(d.td,{children:"Optional client certificate to use when connecting with custom SSL mode."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/advanced/ssl_client_key"})}),(0,n.jsx)(d.td,{children:"SSL Client Key"}),(0,n.jsx)(d.td,{children:"Optional client key to use when connecting with custom SSL mode."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{})]})]})]}),"\n",(0,n.jsx)(d.h3,{id:"setting-the-mysql-time-zone",children:"Setting the MySQL time zone"}),"\n",(0,n.jsxs)(d.p,{children:["MySQL's ",(0,n.jsxs)(d.a,{href:"https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_time_zone",children:[(0,n.jsx)(d.code,{children:"time_zone"})," server system variable"]})," is set to ",(0,n.jsx)(d.code,{children:"SYSTEM"})," by default."]}),"\n",(0,n.jsxs)(d.p,{children:["If you intend to materialize collections including fields of with ",(0,n.jsx)(d.code,{children:"format: date-time"})," or ",(0,n.jsx)(d.code,{children:"format: time"}),",\nand ",(0,n.jsx)(d.code,{children:"time_zone"})," is set to ",(0,n.jsx)(d.code,{children:"SYSTEM"}),",\nFlow won't be able to detect the time zone and convert datetimes to the\nappropriate timezone when materializing.\nTo avoid this, you must explicitly set the time zone for your database."]}),"\n",(0,n.jsx)(d.p,{children:"You can:"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsx)(d.p,{children:"Specify a numerical offset from UTC."}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["For MySQL version 8.0.19 or higher, values from ",(0,n.jsx)(d.code,{children:"-13:59"})," to ",(0,n.jsx)(d.code,{children:"+14:00"}),", inclusive, are permitted."]}),"\n",(0,n.jsxs)(d.li,{children:["Prior to MySQL 8.0.19, values from ",(0,n.jsx)(d.code,{children:"-12:59"})," to ",(0,n.jsx)(d.code,{children:"+13:00"}),", inclusive, are permitted"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:["Specify a named timezone in ",(0,n.jsx)(d.a,{href:"https://www.iana.org/time-zones",children:"IANA timezone format"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(d.p,{children:["For example, if you're located in New Jersey, USA, you could set ",(0,n.jsx)(d.code,{children:"time_zone"})," to ",(0,n.jsx)(d.code,{children:"-05:00"})," or ",(0,n.jsx)(d.code,{children:"-04:00"}),", depending on the time of year.\nBecause this region observes daylight savings time, you'd be responsible for changing the offset.\nAlternatively, you could set ",(0,n.jsx)(d.code,{children:"time_zone"})," to ",(0,n.jsx)(d.code,{children:"America/New_York"}),", and time changes would occur automatically."]}),"\n",(0,n.jsxs)(d.p,{children:["If using IANA time zones, your database must include time zone tables. ",(0,n.jsx)(d.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html",children:"Learn more in the MySQL docs"}),"."]}),"\n",(0,n.jsx)(d.admonition,{title:"Materialize Timezone Configuration",type:"tip",children:(0,n.jsxs)(d.p,{children:["If you are unable to set the ",(0,n.jsx)(d.code,{children:"time_zone"})," in the database and need to materialize\ncollections with date-time or time fields, the materialization can be configured\nto assume a time zone using the ",(0,n.jsx)(d.code,{children:"timezone"})," configuration property (see above). The ",(0,n.jsx)(d.code,{children:"timezone"})," configuration property can be set as a numerical offset or IANA timezone format."]})}),"\n",(0,n.jsx)(d.h4,{id:"ssl-mode",children:"SSL Mode"}),"\n",(0,n.jsx)(d.p,{children:"Possible values:"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"disabled"}),": A plain unencrypted connection is established with the server"]}),"\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"preferred"}),": Only use SSL connection if the server asks for it"]}),"\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"required"}),": Connect using an SSL connection, but do not verify the server's\ncertificate."]}),"\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"verify_ca"}),": Connect using an SSL connection, and verify the server's\ncertificate against the given SSL Server CA, but does not verify the server's\nhostname. This option is most commonly used when connecting to an\nIP address which does not have a hostname to be verified. When using this mode, SSL Server\nCA must be provided."]}),"\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"verify_identity"}),": Connect using an SSL connection, verify the server's\ncertificate and the server's hostname. This is the most secure option. When using this mode, SSL Server\nCA must be provided."]}),"\n"]}),"\n",(0,n.jsx)(d.p,{children:"Optionally, SSL Client Certificate and Key can be provided if necessary to\nauthorize the client."}),"\n",(0,n.jsx)(d.h4,{id:"bindings",children:"Bindings"}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Property"}),(0,n.jsx)(d.th,{children:"Title"}),(0,n.jsx)(d.th,{children:"Description"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required/Default"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.strong,{children:(0,n.jsx)(d.code,{children:"/table"})})}),(0,n.jsx)(d.td,{children:"Table"}),(0,n.jsx)(d.td,{children:"Table name to materialize to. It will be created by the connector, unless the connector has previously created it."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"Required"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/delta_updates"})}),(0,n.jsx)(d.td,{children:"Delta Update"}),(0,n.jsx)(d.td,{children:"Should updates to this table be done via delta updates."}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"false"})})]})]})]}),"\n",(0,n.jsx)(d.h3,{id:"sample",children:"Sample"}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-mysql:dev\n config:\n database: flow\n address: localhost:5432\n password: flow\n user: flow\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,n.jsx)(d.h3,{id:"setup-1",children:"Setup"}),"\n",(0,n.jsxs)(d.ol,{children:["\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsx)(d.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,n.jsxs)(d.ol,{children:["\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsx)(d.p,{children:"To allow direct access:"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.a,{href:"https://cloud.google.com/sql/docs/mysql/configure-ip#add",children:"Enable public IP on your database"})," and add the ",(0,n.jsx)(d.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"})," as authorized IP addresses."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsx)(d.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["Follow the guide to ",(0,n.jsx)(d.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,n.jsxs)(d.li,{children:["When you configure your connector as described in the ",(0,n.jsx)(d.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,n.jsx)(d.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,n.jsx)(d.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:["Configure your connector as described in the ",(0,n.jsx)(d.a,{href:"#configuration",children:"configuration"})," section above,\nwith the additional of the ",(0,n.jsx)(d.code,{children:"networkTunnel"})," stanza to enable the SSH tunnel, if using.\nSee ",(0,n.jsx)(d.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"}),"\nfor additional details and a sample."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.admonition,{title:"Configuration Tip",type:"tip",children:(0,n.jsxs)(d.p,{children:["To configure the connector, you must specify the database address in the format\n",(0,n.jsx)(d.code,{children:"host:port"}),". (You can also supply ",(0,n.jsx)(d.code,{children:"host"})," only; the connector will use the port ",(0,n.jsx)(d.code,{children:"3306"}),' by default, which is correct in many cases.)\nYou can find the host host in the GCP console as "Private IP Address". The pport is always ',(0,n.jsx)(d.code,{children:"3306"}),". You may need to ",(0,n.jsx)(d.a,{href:"https://cloud.google.com/sql/docs/mysql/configure-private-ip",children:"configure private IP"})," on your database."]})}),"\n",(0,n.jsxs)(d.ol,{start:"3",children:["\n",(0,n.jsxs)(d.li,{children:["Create the ",(0,n.jsx)(d.code,{children:"flow_materialize"})," user with ",(0,n.jsx)(d.code,{children:"All"})," privileges on your database. This user will need the ability to create and update the ",(0,n.jsx)(d.code,{children:"flow_materializations"})," table."]}),"\n"]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{className:"language-sql",children:"CREATE USER IF NOT EXISTS flow_materialize\n IDENTIFIED BY 'secret'\n COMMENT 'User account for Flow MySQL data materialization';\nGRANT ALL PRIVELEGES ON <database>.* TO 'flow_materialize';\n"})}),"\n",(0,n.jsxs)(d.ol,{start:"4",children:["\n",(0,n.jsxs)(d.li,{children:["In the Cloud Console, note the instance's host under Public IP Address. Its port will always be ",(0,n.jsx)(d.code,{children:"3306"}),".\nTogether, you'll use the host",":port"," as the ",(0,n.jsx)(d.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,n.jsxs)(d.p,{children:["This connector supports both standard (merge) and ",(0,n.jsx)(d.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]}),"\n",(0,n.jsx)(d.h2,{id:"date--times",children:"Date & times"}),"\n",(0,n.jsxs)(d.p,{children:["Date and time fields that are part of collections, which specify a ",(0,n.jsx)(d.code,{children:"format: date-time"})," for the field, are automatically converted to UTC and\npersisted as UTC ",(0,n.jsx)(d.code,{children:"DATETIME"})," in MySQL."]}),"\n",(0,n.jsx)(d.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,n.jsxs)(d.p,{children:["MySQL has a list of reserved words that must be quoted in order to be used as an identifier.\nFlow considers all the reserved words in the official ",(0,n.jsx)(d.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/keywords.html",children:"MySQL documentation"}),"."]}),"\n",(0,n.jsx)(d.p,{children:"These reserved words are listed in the table below. Flow automatically quotes fields that are in this list."}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Reserved words"}),(0,n.jsx)(d.th,{}),(0,n.jsx)(d.th,{}),(0,n.jsx)(d.th,{}),(0,n.jsx)(d.th,{})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"accessible"}),(0,n.jsx)(d.td,{children:"clone"}),(0,n.jsx)(d.td,{children:"describe"}),(0,n.jsx)(d.td,{children:"float"}),(0,n.jsx)(d.td,{children:"int"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"account"}),(0,n.jsx)(d.td,{children:"close"}),(0,n.jsx)(d.td,{children:"description"}),(0,n.jsx)(d.td,{children:"float4"}),(0,n.jsx)(d.td,{children:"int1"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"action"}),(0,n.jsx)(d.td,{children:"coalesce"}),(0,n.jsx)(d.td,{children:"des_key_file"}),(0,n.jsx)(d.td,{children:"float8"}),(0,n.jsx)(d.td,{children:"int2"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"active"}),(0,n.jsx)(d.td,{children:"code"}),(0,n.jsx)(d.td,{children:"deterministic"}),(0,n.jsx)(d.td,{children:"flush"}),(0,n.jsx)(d.td,{children:"int3"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"add"}),(0,n.jsx)(d.td,{children:"collate"}),(0,n.jsx)(d.td,{children:"diagnostics"}),(0,n.jsx)(d.td,{children:"following"}),(0,n.jsx)(d.td,{children:"int4"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"admin"}),(0,n.jsx)(d.td,{children:"collation"}),(0,n.jsx)(d.td,{children:"directory"}),(0,n.jsx)(d.td,{children:"follows"}),(0,n.jsx)(d.td,{children:"int8"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"after"}),(0,n.jsx)(d.td,{children:"column"}),(0,n.jsx)(d.td,{children:"disable"}),(0,n.jsx)(d.td,{children:"for"}),(0,n.jsx)(d.td,{children:"integer"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"against"}),(0,n.jsx)(d.td,{children:"columns"}),(0,n.jsx)(d.td,{children:"discard"}),(0,n.jsx)(d.td,{children:"force"}),(0,n.jsx)(d.td,{children:"intersect"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"aggregate"}),(0,n.jsx)(d.td,{children:"column_format"}),(0,n.jsx)(d.td,{children:"disk"}),(0,n.jsx)(d.td,{children:"foreign"}),(0,n.jsx)(d.td,{children:"interval"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"algorithm"}),(0,n.jsx)(d.td,{children:"column_name"}),(0,n.jsx)(d.td,{children:"distinct"}),(0,n.jsx)(d.td,{children:"format"}),(0,n.jsx)(d.td,{children:"into"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"all"}),(0,n.jsx)(d.td,{children:"comment"}),(0,n.jsx)(d.td,{children:"distinctrow"}),(0,n.jsx)(d.td,{children:"found"}),(0,n.jsx)(d.td,{children:"invisible"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"alter"}),(0,n.jsx)(d.td,{children:"commit"}),(0,n.jsx)(d.td,{children:"div"}),(0,n.jsx)(d.td,{children:"from"}),(0,n.jsx)(d.td,{children:"invoker"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"always"}),(0,n.jsx)(d.td,{children:"committed"}),(0,n.jsx)(d.td,{children:"do"}),(0,n.jsx)(d.td,{children:"full"}),(0,n.jsx)(d.td,{children:"io"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"analyse"}),(0,n.jsx)(d.td,{children:"compact"}),(0,n.jsx)(d.td,{children:"double"}),(0,n.jsx)(d.td,{children:"fulltext"}),(0,n.jsx)(d.td,{children:"io_after_gtid"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"analyze"}),(0,n.jsx)(d.td,{children:"completion"}),(0,n.jsx)(d.td,{children:"drop"}),(0,n.jsx)(d.td,{children:"function"}),(0,n.jsx)(d.td,{children:"io_before_gti"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"and"}),(0,n.jsx)(d.td,{children:"component"}),(0,n.jsx)(d.td,{children:"dual"}),(0,n.jsx)(d.td,{children:"general"}),(0,n.jsx)(d.td,{children:"io_thread"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"any"}),(0,n.jsx)(d.td,{children:"compressed"}),(0,n.jsx)(d.td,{children:"dumpfile"}),(0,n.jsx)(d.td,{children:"generate"}),(0,n.jsx)(d.td,{children:"ipc"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"array"}),(0,n.jsx)(d.td,{children:"compression"}),(0,n.jsx)(d.td,{children:"duplicate"}),(0,n.jsx)(d.td,{children:"generated"}),(0,n.jsx)(d.td,{children:"is"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"as"}),(0,n.jsx)(d.td,{children:"concurrent"}),(0,n.jsx)(d.td,{children:"dynamic"}),(0,n.jsx)(d.td,{children:"geomcollectio"}),(0,n.jsx)(d.td,{children:"isolation"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"asc"}),(0,n.jsx)(d.td,{children:"condition"}),(0,n.jsx)(d.td,{children:"each"}),(0,n.jsx)(d.td,{children:"geometry"}),(0,n.jsx)(d.td,{children:"issuer"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"ascii"}),(0,n.jsx)(d.td,{children:"connection"}),(0,n.jsx)(d.td,{children:"else"}),(0,n.jsx)(d.td,{children:"geometrycolle"}),(0,n.jsx)(d.td,{children:"iterate"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"asensitive"}),(0,n.jsx)(d.td,{children:"consistent"}),(0,n.jsx)(d.td,{children:"elseif"}),(0,n.jsx)(d.td,{children:"get"}),(0,n.jsx)(d.td,{children:"join"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"at"}),(0,n.jsx)(d.td,{children:"constraint"}),(0,n.jsx)(d.td,{children:"empty"}),(0,n.jsx)(d.td,{children:"get_format"}),(0,n.jsx)(d.td,{children:"json"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"attribute"}),(0,n.jsx)(d.td,{children:"constraint_ca"}),(0,n.jsx)(d.td,{children:"enable"}),(0,n.jsx)(d.td,{children:"get_master_pu"}),(0,n.jsx)(d.td,{children:"json_table"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"authenticatio"}),(0,n.jsx)(d.td,{children:"constraint_na"}),(0,n.jsx)(d.td,{children:"enclosed"}),(0,n.jsx)(d.td,{children:"get_source_pu"}),(0,n.jsx)(d.td,{children:"json_value"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"autoextend_si"}),(0,n.jsx)(d.td,{children:"constraint_sc"}),(0,n.jsx)(d.td,{children:"encryption"}),(0,n.jsx)(d.td,{children:"global"}),(0,n.jsx)(d.td,{children:"key"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"auto_incremen"}),(0,n.jsx)(d.td,{children:"contains"}),(0,n.jsx)(d.td,{children:"end"}),(0,n.jsx)(d.td,{children:"grant"}),(0,n.jsx)(d.td,{children:"keyring"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"avg"}),(0,n.jsx)(d.td,{children:"context"}),(0,n.jsx)(d.td,{children:"ends"}),(0,n.jsx)(d.td,{children:"grants"}),(0,n.jsx)(d.td,{children:"keys"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"avg_row_lengt"}),(0,n.jsx)(d.td,{children:"continue"}),(0,n.jsx)(d.td,{children:"enforced"}),(0,n.jsx)(d.td,{children:"group"}),(0,n.jsx)(d.td,{children:"key_block_siz"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"backup"}),(0,n.jsx)(d.td,{children:"convert"}),(0,n.jsx)(d.td,{children:"engine"}),(0,n.jsx)(d.td,{children:"grouping"}),(0,n.jsx)(d.td,{children:"kill"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"before"}),(0,n.jsx)(d.td,{children:"cpu"}),(0,n.jsx)(d.td,{children:"engines"}),(0,n.jsx)(d.td,{children:"groups"}),(0,n.jsx)(d.td,{children:"lag"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"begin"}),(0,n.jsx)(d.td,{children:"create"}),(0,n.jsx)(d.td,{children:"engine_attrib"}),(0,n.jsx)(d.td,{children:"group_replica"}),(0,n.jsx)(d.td,{children:"language"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"between"}),(0,n.jsx)(d.td,{children:"cross"}),(0,n.jsx)(d.td,{children:"enum"}),(0,n.jsx)(d.td,{children:"gtid_only"}),(0,n.jsx)(d.td,{children:"last"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"bigint"}),(0,n.jsx)(d.td,{children:"cube"}),(0,n.jsx)(d.td,{children:"error"}),(0,n.jsx)(d.td,{children:"handler"}),(0,n.jsx)(d.td,{children:"last_value"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"binary"}),(0,n.jsx)(d.td,{children:"cume_dist"}),(0,n.jsx)(d.td,{children:"errors"}),(0,n.jsx)(d.td,{children:"hash"}),(0,n.jsx)(d.td,{children:"lateral"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"binlog"}),(0,n.jsx)(d.td,{children:"current"}),(0,n.jsx)(d.td,{children:"escape"}),(0,n.jsx)(d.td,{children:"having"}),(0,n.jsx)(d.td,{children:"lead"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"bit"}),(0,n.jsx)(d.td,{children:"current_date"}),(0,n.jsx)(d.td,{children:"escaped"}),(0,n.jsx)(d.td,{children:"help"}),(0,n.jsx)(d.td,{children:"leading"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"blob"}),(0,n.jsx)(d.td,{children:"current_time"}),(0,n.jsx)(d.td,{children:"event"}),(0,n.jsx)(d.td,{children:"high_priority"}),(0,n.jsx)(d.td,{children:"leave"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"block"}),(0,n.jsx)(d.td,{children:"current_times"}),(0,n.jsx)(d.td,{children:"events"}),(0,n.jsx)(d.td,{children:"histogram"}),(0,n.jsx)(d.td,{children:"leaves"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"bool"}),(0,n.jsx)(d.td,{children:"current_user"}),(0,n.jsx)(d.td,{children:"every"}),(0,n.jsx)(d.td,{children:"history"}),(0,n.jsx)(d.td,{children:"left"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"cursor"}),(0,n.jsx)(d.td,{children:"except"}),(0,n.jsx)(d.td,{children:"host"}),(0,n.jsx)(d.td,{children:"less"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"both"}),(0,n.jsx)(d.td,{children:"cursor_name"}),(0,n.jsx)(d.td,{children:"exchange"}),(0,n.jsx)(d.td,{children:"hosts"}),(0,n.jsx)(d.td,{children:"level"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"btree"}),(0,n.jsx)(d.td,{children:"data"}),(0,n.jsx)(d.td,{children:"exclude"}),(0,n.jsx)(d.td,{children:"hour"}),(0,n.jsx)(d.td,{children:"like"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"buckets"}),(0,n.jsx)(d.td,{children:"database"}),(0,n.jsx)(d.td,{children:"execute"}),(0,n.jsx)(d.td,{children:"hour_microsec"}),(0,n.jsx)(d.td,{children:"limit"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"bulk"}),(0,n.jsx)(d.td,{children:"databases"}),(0,n.jsx)(d.td,{children:"exists"}),(0,n.jsx)(d.td,{children:"hour_minute"}),(0,n.jsx)(d.td,{children:"linear"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"by"}),(0,n.jsx)(d.td,{children:"datafile"}),(0,n.jsx)(d.td,{children:"exit"}),(0,n.jsx)(d.td,{children:"hour_second"}),(0,n.jsx)(d.td,{children:"lines"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"byte"}),(0,n.jsx)(d.td,{children:"date"}),(0,n.jsx)(d.td,{children:"expansion"}),(0,n.jsx)(d.td,{children:"identified"}),(0,n.jsx)(d.td,{children:"linestring"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"cache"}),(0,n.jsx)(d.td,{children:"datetime"}),(0,n.jsx)(d.td,{children:"expire"}),(0,n.jsx)(d.td,{children:"if"}),(0,n.jsx)(d.td,{children:"list"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"call"}),(0,n.jsx)(d.td,{children:"day"}),(0,n.jsx)(d.td,{children:"explain"}),(0,n.jsx)(d.td,{children:"ignore"}),(0,n.jsx)(d.td,{children:"load"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"cascade"}),(0,n.jsx)(d.td,{children:"day_hour"}),(0,n.jsx)(d.td,{children:"export"}),(0,n.jsx)(d.td,{children:"ignore_server"}),(0,n.jsx)(d.td,{children:"local"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"cascaded"}),(0,n.jsx)(d.td,{children:"day_microseco"}),(0,n.jsx)(d.td,{children:"extended"}),(0,n.jsx)(d.td,{children:"import"}),(0,n.jsx)(d.td,{children:"localtime"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"case"}),(0,n.jsx)(d.td,{children:"day_minute"}),(0,n.jsx)(d.td,{children:"extent_size"}),(0,n.jsx)(d.td,{children:"in"}),(0,n.jsx)(d.td,{children:"localtimestam"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"catalog_name"}),(0,n.jsx)(d.td,{children:"day_second"}),(0,n.jsx)(d.td,{children:"factor"}),(0,n.jsx)(d.td,{children:"inactive"}),(0,n.jsx)(d.td,{children:"lock"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"chain"}),(0,n.jsx)(d.td,{children:"deallocate"}),(0,n.jsxs)(d.td,{children:["failed",(0,n.jsx)(d.em,{children:"login"})]}),(0,n.jsx)(d.td,{children:"index"}),(0,n.jsx)(d.td,{children:"locked"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"challenge_res"}),(0,n.jsx)(d.td,{children:"dec"}),(0,n.jsx)(d.td,{children:"false"}),(0,n.jsx)(d.td,{children:"indexes"}),(0,n.jsx)(d.td,{children:"locks"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"change"}),(0,n.jsx)(d.td,{children:"decimal"}),(0,n.jsx)(d.td,{children:"fast"}),(0,n.jsx)(d.td,{children:"infile"}),(0,n.jsx)(d.td,{children:"logfile"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"changed"}),(0,n.jsx)(d.td,{children:"declare"}),(0,n.jsx)(d.td,{children:"faults"}),(0,n.jsx)(d.td,{children:"initial"}),(0,n.jsx)(d.td,{children:"logs"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"channel"}),(0,n.jsx)(d.td,{children:"default"}),(0,n.jsx)(d.td,{children:"fetch"}),(0,n.jsx)(d.td,{children:"initial_size"}),(0,n.jsx)(d.td,{children:"long"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"char"}),(0,n.jsx)(d.td,{children:"default_auth"}),(0,n.jsx)(d.td,{children:"fields"}),(0,n.jsx)(d.td,{children:"initiate"}),(0,n.jsx)(d.td,{children:"longblob"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"character"}),(0,n.jsx)(d.td,{children:"definer"}),(0,n.jsx)(d.td,{children:"file"}),(0,n.jsx)(d.td,{children:"inner"}),(0,n.jsx)(d.td,{children:"longtext"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"charset"}),(0,n.jsx)(d.td,{children:"definition"}),(0,n.jsx)(d.td,{children:"file_block_si"}),(0,n.jsx)(d.td,{children:"inout"}),(0,n.jsx)(d.td,{children:"loop"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"check"}),(0,n.jsx)(d.td,{children:"delayed"}),(0,n.jsx)(d.td,{children:"filter"}),(0,n.jsx)(d.td,{children:"insensitive"}),(0,n.jsx)(d.td,{children:"low_priority"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"checksum"}),(0,n.jsx)(d.td,{children:"delay_key_wri"}),(0,n.jsx)(d.td,{children:"finish"}),(0,n.jsx)(d.td,{children:"insert"}),(0,n.jsx)(d.td,{children:"master"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"cipher"}),(0,n.jsx)(d.td,{children:"delete"}),(0,n.jsx)(d.td,{children:"first"}),(0,n.jsx)(d.td,{children:"insert_method"}),(0,n.jsx)(d.td,{children:"master_auto_p"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"class_origin"}),(0,n.jsx)(d.td,{children:"dense_rank"}),(0,n.jsx)(d.td,{children:"first_value"}),(0,n.jsx)(d.td,{children:"install"}),(0,n.jsx)(d.td,{children:"master_bind"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"client"}),(0,n.jsx)(d.td,{children:"desc"}),(0,n.jsx)(d.td,{children:"fixed"}),(0,n.jsx)(d.td,{children:"instance"}),(0,n.jsx)(d.td,{children:"master_compre"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_connec"}),(0,n.jsx)(d.td,{children:"never"}),(0,n.jsx)(d.td,{children:"preserve"}),(0,n.jsx)(d.td,{children:"restrict"}),(0,n.jsx)(d.td,{children:"source_host"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_delay"}),(0,n.jsx)(d.td,{children:"new"}),(0,n.jsx)(d.td,{children:"prev"}),(0,n.jsx)(d.td,{children:"resume"}),(0,n.jsx)(d.td,{children:"source_log_fi"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_heartb"}),(0,n.jsx)(d.td,{children:"next"}),(0,n.jsx)(d.td,{children:"primary"}),(0,n.jsx)(d.td,{children:"retain"}),(0,n.jsx)(d.td,{children:"source_log_po"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_host"}),(0,n.jsx)(d.td,{children:"no"}),(0,n.jsx)(d.td,{children:"privileges"}),(0,n.jsx)(d.td,{children:"return"}),(0,n.jsx)(d.td,{children:"source_passwo"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_log_fi"}),(0,n.jsx)(d.td,{children:"nodegroup"}),(0,n.jsx)(d.td,{children:"privilege_che"}),(0,n.jsx)(d.td,{children:"returned_sqls"}),(0,n.jsx)(d.td,{children:"source_port"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_log_po"}),(0,n.jsx)(d.td,{children:"none"}),(0,n.jsx)(d.td,{children:"procedure"}),(0,n.jsx)(d.td,{children:"returning"}),(0,n.jsx)(d.td,{children:"source_public"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_passwo"}),(0,n.jsx)(d.td,{children:"not"}),(0,n.jsx)(d.td,{children:"process"}),(0,n.jsx)(d.td,{children:"returns"}),(0,n.jsxs)(d.td,{children:["source",(0,n.jsx)(d.em,{children:"retry"})]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_port"}),(0,n.jsx)(d.td,{children:"nowait"}),(0,n.jsx)(d.td,{children:"processlist"}),(0,n.jsx)(d.td,{children:"reuse"}),(0,n.jsx)(d.td,{children:"source_ssl"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_public"}),(0,n.jsx)(d.td,{children:"no_wait"}),(0,n.jsx)(d.td,{children:"profile"}),(0,n.jsx)(d.td,{children:"reverse"}),(0,n.jsx)(d.td,{children:"source_ssl_ca"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsxs)(d.td,{children:["master",(0,n.jsx)(d.em,{children:"retry"})]}),(0,n.jsx)(d.td,{children:"no_write_to_b"}),(0,n.jsx)(d.td,{children:"profiles"}),(0,n.jsx)(d.td,{children:"revoke"}),(0,n.jsx)(d.td,{children:"source_ssl_ca"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_server"}),(0,n.jsx)(d.td,{children:"nth_value"}),(0,n.jsx)(d.td,{children:"proxy"}),(0,n.jsx)(d.td,{children:"right"}),(0,n.jsx)(d.td,{children:"source_ssl_ce"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl"}),(0,n.jsx)(d.td,{children:"ntile"}),(0,n.jsx)(d.td,{children:"purge"}),(0,n.jsx)(d.td,{children:"rlike"}),(0,n.jsx)(d.td,{children:"source_ssl_ci"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_ca"}),(0,n.jsx)(d.td,{children:"null"}),(0,n.jsx)(d.td,{children:"quarter"}),(0,n.jsx)(d.td,{children:"role"}),(0,n.jsx)(d.td,{children:"source_ssl_cr"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_ca"}),(0,n.jsx)(d.td,{children:"nulls"}),(0,n.jsx)(d.td,{children:"query"}),(0,n.jsx)(d.td,{children:"rollback"}),(0,n.jsx)(d.td,{children:"source_ssl_cr"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_ce"}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"quick"}),(0,n.jsx)(d.td,{children:"rollup"}),(0,n.jsx)(d.td,{children:"source_ssl_ke"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_ci"}),(0,n.jsx)(d.td,{children:"numeric"}),(0,n.jsx)(d.td,{children:"random"}),(0,n.jsx)(d.td,{children:"rotate"}),(0,n.jsx)(d.td,{children:"source_ssl_ve"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_cr"}),(0,n.jsx)(d.td,{children:"nvarchar"}),(0,n.jsx)(d.td,{children:"range"}),(0,n.jsx)(d.td,{children:"routine"}),(0,n.jsx)(d.td,{children:"source_tls_ci"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_cr"}),(0,n.jsx)(d.td,{children:"of"}),(0,n.jsx)(d.td,{children:"rank"}),(0,n.jsx)(d.td,{children:"row"}),(0,n.jsx)(d.td,{children:"source_tls_ve"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_ke"}),(0,n.jsx)(d.td,{children:"off"}),(0,n.jsx)(d.td,{children:"read"}),(0,n.jsx)(d.td,{children:"rows"}),(0,n.jsx)(d.td,{children:"source_user"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_ve"}),(0,n.jsx)(d.td,{children:"offset"}),(0,n.jsx)(d.td,{children:"reads"}),(0,n.jsx)(d.td,{children:"row_count"}),(0,n.jsx)(d.td,{children:"source_zstd_c"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_tls_ci"}),(0,n.jsx)(d.td,{children:"oj"}),(0,n.jsx)(d.td,{children:"read_only"}),(0,n.jsx)(d.td,{children:"row_format"}),(0,n.jsx)(d.td,{children:"spatial"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_tls_ve"}),(0,n.jsx)(d.td,{children:"old"}),(0,n.jsx)(d.td,{children:"read_write"}),(0,n.jsx)(d.td,{children:"row_number"}),(0,n.jsx)(d.td,{children:"specific"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_user"}),(0,n.jsx)(d.td,{children:"on"}),(0,n.jsx)(d.td,{children:"real"}),(0,n.jsx)(d.td,{children:"rtree"}),(0,n.jsx)(d.td,{children:"sql"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_zstd_c"}),(0,n.jsx)(d.td,{children:"one"}),(0,n.jsx)(d.td,{children:"rebuild"}),(0,n.jsx)(d.td,{children:"savepoint"}),(0,n.jsx)(d.td,{children:"sqlexception"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"match"}),(0,n.jsx)(d.td,{children:"only"}),(0,n.jsx)(d.td,{children:"recover"}),(0,n.jsx)(d.td,{children:"schedule"}),(0,n.jsx)(d.td,{children:"sqlstate"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"maxvalue"}),(0,n.jsx)(d.td,{children:"open"}),(0,n.jsx)(d.td,{children:"recursive"}),(0,n.jsx)(d.td,{children:"schema"}),(0,n.jsx)(d.td,{children:"sqlwarning"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"max_connectio"}),(0,n.jsx)(d.td,{children:"optimize"}),(0,n.jsx)(d.td,{children:"redofile"}),(0,n.jsx)(d.td,{children:"schemas"}),(0,n.jsx)(d.td,{children:"sql_after_gti"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"max_queries_p"}),(0,n.jsx)(d.td,{children:"optimizer_cos"}),(0,n.jsx)(d.td,{children:"redo_buffer_s"}),(0,n.jsx)(d.td,{children:"schema_name"}),(0,n.jsx)(d.td,{children:"sql_after_mts"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"max_rows"}),(0,n.jsx)(d.td,{children:"option"}),(0,n.jsx)(d.td,{children:"redundant"}),(0,n.jsx)(d.td,{children:"second"}),(0,n.jsx)(d.td,{children:"sql_before_gt"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"max_size"}),(0,n.jsx)(d.td,{children:"optional"}),(0,n.jsx)(d.td,{children:"reference"}),(0,n.jsx)(d.td,{children:"secondary"}),(0,n.jsx)(d.td,{children:"sql_big_resul"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"max_updates_p"}),(0,n.jsx)(d.td,{children:"optionally"}),(0,n.jsx)(d.td,{children:"references"}),(0,n.jsx)(d.td,{children:"secondary_eng"}),(0,n.jsx)(d.td,{children:"sql_buffer_re"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"max_user_conn"}),(0,n.jsx)(d.td,{children:"options"}),(0,n.jsx)(d.td,{children:"regexp"}),(0,n.jsx)(d.td,{children:"secondary_eng"}),(0,n.jsx)(d.td,{children:"sql_cache"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"medium"}),(0,n.jsx)(d.td,{children:"or"}),(0,n.jsx)(d.td,{children:"registration"}),(0,n.jsx)(d.td,{children:"secondary_loa"}),(0,n.jsx)(d.td,{children:"sql_calc_foun"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mediumblob"}),(0,n.jsx)(d.td,{children:"order"}),(0,n.jsx)(d.td,{children:"relay"}),(0,n.jsx)(d.td,{children:"secondary_unl"}),(0,n.jsx)(d.td,{children:"sql_no_cache"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mediumint"}),(0,n.jsx)(d.td,{children:"ordinality"}),(0,n.jsx)(d.td,{children:"relaylog"}),(0,n.jsx)(d.td,{children:"second_micros"}),(0,n.jsx)(d.td,{children:"sql_small_res"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mediumtext"}),(0,n.jsx)(d.td,{children:"organization"}),(0,n.jsx)(d.td,{children:"relay_log_fil"}),(0,n.jsx)(d.td,{children:"security"}),(0,n.jsx)(d.td,{children:"sql_thread"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"member"}),(0,n.jsx)(d.td,{children:"others"}),(0,n.jsx)(d.td,{children:"relay_log_pos"}),(0,n.jsx)(d.td,{children:"select"}),(0,n.jsx)(d.td,{children:"sql_tsi_day"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"memory"}),(0,n.jsx)(d.td,{children:"out"}),(0,n.jsx)(d.td,{children:"relay_thread"}),(0,n.jsx)(d.td,{children:"sensitive"}),(0,n.jsx)(d.td,{children:"sql_tsi_hour"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"merge"}),(0,n.jsx)(d.td,{children:"outer"}),(0,n.jsx)(d.td,{children:"release"}),(0,n.jsx)(d.td,{children:"separator"}),(0,n.jsx)(d.td,{children:"sql_tsi_minut"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"message_text"}),(0,n.jsx)(d.td,{children:"outfile"}),(0,n.jsx)(d.td,{children:"reload"}),(0,n.jsx)(d.td,{children:"serial"}),(0,n.jsx)(d.td,{children:"sql_tsi_month"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"microsecond"}),(0,n.jsx)(d.td,{children:"over"}),(0,n.jsx)(d.td,{children:"remote"}),(0,n.jsx)(d.td,{children:"serializable"}),(0,n.jsx)(d.td,{children:"sql_tsi_quart"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"middleint"}),(0,n.jsx)(d.td,{children:"owner"}),(0,n.jsx)(d.td,{children:"remove"}),(0,n.jsx)(d.td,{children:"server"}),(0,n.jsx)(d.td,{children:"sql_tsi_secon"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"migrate"}),(0,n.jsx)(d.td,{children:"pack_keys"}),(0,n.jsx)(d.td,{children:"rename"}),(0,n.jsx)(d.td,{children:"session"}),(0,n.jsx)(d.td,{children:"sql_tsi_week"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"minute"}),(0,n.jsx)(d.td,{children:"page"}),(0,n.jsx)(d.td,{children:"reorganize"}),(0,n.jsx)(d.td,{children:"set"}),(0,n.jsx)(d.td,{children:"sql_tsi_year"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"minute_micros"}),(0,n.jsx)(d.td,{children:"parser"}),(0,n.jsx)(d.td,{children:"repair"}),(0,n.jsx)(d.td,{children:"share"}),(0,n.jsx)(d.td,{children:"srid"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"minute_second"}),(0,n.jsx)(d.td,{children:"partial"}),(0,n.jsx)(d.td,{children:"repeat"}),(0,n.jsx)(d.td,{children:"show"}),(0,n.jsx)(d.td,{children:"ssl"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"min_rows"}),(0,n.jsx)(d.td,{children:"partition"}),(0,n.jsx)(d.td,{children:"repeatable"}),(0,n.jsx)(d.td,{children:"shutdown"}),(0,n.jsx)(d.td,{children:"stacked"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mod"}),(0,n.jsx)(d.td,{children:"partitioning"}),(0,n.jsx)(d.td,{children:"replace"}),(0,n.jsx)(d.td,{children:"signal"}),(0,n.jsx)(d.td,{children:"start"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mode"}),(0,n.jsx)(d.td,{children:"partitions"}),(0,n.jsx)(d.td,{children:"replica"}),(0,n.jsx)(d.td,{children:"signed"}),(0,n.jsx)(d.td,{children:"starting"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"modifies"}),(0,n.jsx)(d.td,{children:"password"}),(0,n.jsx)(d.td,{children:"replicas"}),(0,n.jsx)(d.td,{children:"simple"}),(0,n.jsx)(d.td,{children:"starts"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"modify"}),(0,n.jsx)(d.td,{children:"password_lock"}),(0,n.jsxs)(d.td,{children:["replicate",(0,n.jsx)(d.em,{children:"do"})]}),(0,n.jsx)(d.td,{children:"skip"}),(0,n.jsx)(d.td,{children:"stats_auto_re"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"month"}),(0,n.jsx)(d.td,{children:"path"}),(0,n.jsxs)(d.td,{children:["replicate",(0,n.jsx)(d.em,{children:"do"})]}),(0,n.jsx)(d.td,{children:"slave"}),(0,n.jsx)(d.td,{children:"stats_persist"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"multilinestri"}),(0,n.jsx)(d.td,{children:"percent_rank"}),(0,n.jsx)(d.td,{children:"replicate_ign"}),(0,n.jsx)(d.td,{children:"slow"}),(0,n.jsxs)(d.td,{children:["stats",(0,n.jsx)(d.em,{children:"sample"})]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"multipoint"}),(0,n.jsx)(d.td,{children:"persist"}),(0,n.jsx)(d.td,{children:"replicate_ign"}),(0,n.jsx)(d.td,{children:"smallint"}),(0,n.jsx)(d.td,{children:"status"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"multipolygon"}),(0,n.jsx)(d.td,{children:"persist_only"}),(0,n.jsx)(d.td,{children:"replicate_rew"}),(0,n.jsx)(d.td,{children:"snapshot"}),(0,n.jsx)(d.td,{children:"stop"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mutex"}),(0,n.jsx)(d.td,{children:"phase"}),(0,n.jsx)(d.td,{children:"replicate_wil"}),(0,n.jsx)(d.td,{children:"socket"}),(0,n.jsx)(d.td,{children:"storage"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mysql_errno"}),(0,n.jsx)(d.td,{children:"plugin"}),(0,n.jsx)(d.td,{children:"replicate_wil"}),(0,n.jsx)(d.td,{children:"some"}),(0,n.jsx)(d.td,{children:"stored"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"name"}),(0,n.jsx)(d.td,{children:"plugins"}),(0,n.jsx)(d.td,{children:"replication"}),(0,n.jsx)(d.td,{children:"soname"}),(0,n.jsx)(d.td,{children:"straight_join"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"names"}),(0,n.jsx)(d.td,{children:"plugin_dir"}),(0,n.jsx)(d.td,{children:"require"}),(0,n.jsx)(d.td,{children:"sounds"}),(0,n.jsx)(d.td,{children:"stream"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"national"}),(0,n.jsx)(d.td,{children:"point"}),(0,n.jsx)(d.td,{children:"require_row_f"}),(0,n.jsx)(d.td,{children:"source"}),(0,n.jsx)(d.td,{children:"string"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"natural"}),(0,n.jsx)(d.td,{children:"polygon"}),(0,n.jsx)(d.td,{children:"reset"}),(0,n.jsx)(d.td,{children:"source_auto_p"}),(0,n.jsx)(d.td,{children:"subclass_orig"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"nchar"}),(0,n.jsx)(d.td,{children:"port"}),(0,n.jsx)(d.td,{children:"resignal"}),(0,n.jsx)(d.td,{children:"source_bind"}),(0,n.jsx)(d.td,{children:"subject"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"ndb"}),(0,n.jsx)(d.td,{children:"precedes"}),(0,n.jsx)(d.td,{children:"resource"}),(0,n.jsx)(d.td,{children:"source_compre"}),(0,n.jsx)(d.td,{children:"subpartition"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"ndbcluster"}),(0,n.jsx)(d.td,{children:"preceding"}),(0,n.jsx)(d.td,{children:"respect"}),(0,n.jsx)(d.td,{children:"source_connec"}),(0,n.jsx)(d.td,{children:"subpartitions"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"nested"}),(0,n.jsx)(d.td,{children:"precision"}),(0,n.jsx)(d.td,{children:"restart"}),(0,n.jsx)(d.td,{children:"source_delay"}),(0,n.jsx)(d.td,{children:"super"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"network_names"}),(0,n.jsx)(d.td,{children:"prepare"}),(0,n.jsx)(d.td,{children:"restore"}),(0,n.jsx)(d.td,{children:"source_heartb"}),(0,n.jsx)(d.td,{children:"suspend"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"swaps"}),(0,n.jsx)(d.td,{children:"timestampdiff"}),(0,n.jsx)(d.td,{children:"undo_buffer_s"}),(0,n.jsx)(d.td,{children:"utc_date"}),(0,n.jsx)(d.td,{children:"when"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"switches"}),(0,n.jsx)(d.td,{children:"tinyblob"}),(0,n.jsx)(d.td,{children:"unicode"}),(0,n.jsx)(d.td,{children:"utc_time"}),(0,n.jsx)(d.td,{children:"where"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"system"}),(0,n.jsx)(d.td,{children:"tinyint"}),(0,n.jsx)(d.td,{children:"uninstall"}),(0,n.jsx)(d.td,{children:"utc_timestamp"}),(0,n.jsx)(d.td,{children:"while"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"table"}),(0,n.jsx)(d.td,{children:"tinytext"}),(0,n.jsx)(d.td,{children:"union"}),(0,n.jsx)(d.td,{children:"validation"}),(0,n.jsx)(d.td,{children:"window"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"tables"}),(0,n.jsx)(d.td,{children:"tls"}),(0,n.jsx)(d.td,{children:"unique"}),(0,n.jsx)(d.td,{children:"value"}),(0,n.jsx)(d.td,{children:"with"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"tablespace"}),(0,n.jsx)(d.td,{children:"to"}),(0,n.jsx)(d.td,{children:"unknown"}),(0,n.jsx)(d.td,{children:"values"}),(0,n.jsx)(d.td,{children:"without"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"table_checksu"}),(0,n.jsx)(d.td,{children:"trailing"}),(0,n.jsx)(d.td,{children:"unlock"}),(0,n.jsx)(d.td,{children:"varbinary"}),(0,n.jsx)(d.td,{children:"work"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"table_name"}),(0,n.jsx)(d.td,{children:"transaction"}),(0,n.jsx)(d.td,{children:"unregister"}),(0,n.jsx)(d.td,{children:"varchar"}),(0,n.jsx)(d.td,{children:"wrapper"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"temporary"}),(0,n.jsx)(d.td,{children:"trigger"}),(0,n.jsx)(d.td,{children:"unsigned"}),(0,n.jsx)(d.td,{children:"varcharacter"}),(0,n.jsx)(d.td,{children:"write"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"temptable"}),(0,n.jsx)(d.td,{children:"triggers"}),(0,n.jsx)(d.td,{children:"until"}),(0,n.jsx)(d.td,{children:"variables"}),(0,n.jsx)(d.td,{children:"x509"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"terminated"}),(0,n.jsx)(d.td,{children:"true"}),(0,n.jsx)(d.td,{children:"update"}),(0,n.jsx)(d.td,{children:"varying"}),(0,n.jsx)(d.td,{children:"xa"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"text"}),(0,n.jsx)(d.td,{children:"truncate"}),(0,n.jsx)(d.td,{children:"upgrade"}),(0,n.jsx)(d.td,{children:"vcpu"}),(0,n.jsx)(d.td,{children:"xid"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"than"}),(0,n.jsx)(d.td,{children:"type"}),(0,n.jsx)(d.td,{children:"url"}),(0,n.jsx)(d.td,{children:"view"}),(0,n.jsx)(d.td,{children:"xml"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"then"}),(0,n.jsx)(d.td,{children:"types"}),(0,n.jsx)(d.td,{children:"usage"}),(0,n.jsx)(d.td,{children:"virtual"}),(0,n.jsx)(d.td,{children:"xor"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"thread_priori"}),(0,n.jsx)(d.td,{children:"unbounded"}),(0,n.jsx)(d.td,{children:"use"}),(0,n.jsx)(d.td,{children:"visible"}),(0,n.jsx)(d.td,{children:"year"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"ties"}),(0,n.jsx)(d.td,{children:"uncommitted"}),(0,n.jsx)(d.td,{children:"user"}),(0,n.jsx)(d.td,{children:"wait"}),(0,n.jsx)(d.td,{children:"year_month"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"time"}),(0,n.jsx)(d.td,{children:"undefined"}),(0,n.jsx)(d.td,{children:"user_resource"}),(0,n.jsx)(d.td,{children:"warnings"}),(0,n.jsx)(d.td,{children:"zerofill"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"timestamp"}),(0,n.jsx)(d.td,{children:"undo"}),(0,n.jsx)(d.td,{children:"use_frm"}),(0,n.jsx)(d.td,{children:"week"}),(0,n.jsx)(d.td,{children:"zone"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"timestampadd"}),(0,n.jsx)(d.td,{children:"undofile"}),(0,n.jsx)(d.td,{children:"using"}),(0,n.jsx)(d.td,{children:"weight_string"}),(0,n.jsx)(d.td,{})]})]})]}),"\n",(0,n.jsx)(d.h2,{id:"changelog",children:"Changelog"}),"\n",(0,n.jsx)(d.p,{children:"The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed."}),"\n",(0,n.jsx)(d.p,{children:(0,n.jsx)(d.strong,{children:"Proceed with caution when editing materializations created with previous versions of this connector;\nediting always upgrades your materialization to the latest connector version."})}),"\n",(0,n.jsx)(d.h4,{id:"v1-2023-08-21",children:"V1: 2023-08-21"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"First version"}),"\n"]})]})}function x(e={}){const{wrapper:d}={...(0,r.R)(),...e.components};return d?(0,n.jsx)(d,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},28453:(e,d,s)=>{s.d(d,{R:()=>i,x:()=>l});var n=s(96540);const r={},t=n.createContext(r);function i(e){const d=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function l(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(t.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4a1a3e03.96287a86.js b/pr-preview/pr-1594/assets/js/4a1a3e03.96287a86.js deleted file mode 100644 index 5cd780364b..0000000000 --- a/pr-preview/pr-1594/assets/js/4a1a3e03.96287a86.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6803],{62440:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var s=n(74848),l=n(28453),t=n(61114);const r={sidebar_position:1},c="Edit a Flow specification locally",o={id:"guides/flowctl/edit-specification-locally",title:"Edit a Flow specification locally",description:"The Flow web application is designed to make the most common Flow tasks quick and easy.",source:"@site/docs/guides/flowctl/edit-specification-locally.md",sourceDirName:"guides/flowctl",slug:"/guides/flowctl/edit-specification-locally",permalink:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/flowctl/edit-specification-locally.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"flowctl guides",permalink:"/pr-preview/pr-1594/guides/flowctl/"},next:{title:"Edit a draft created in the web app",permalink:"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp"}},a={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Pull specifications locally",id:"pull-specifications-locally",level:2},{value:"Edit source files and re-publish specifications",id:"edit-source-files-and-re-publish-specifications",level:2}];function h(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"edit-a-flow-specification-locally",children:"Edit a Flow specification locally"}),"\n",(0,s.jsxs)(i.p,{children:["The ",(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/concepts/web-app",children:"Flow web application"})," is designed to make the most common Flow tasks quick and easy.\nWith the app, you're able to create, monitor, and manage captures, materializations, and more.\nFor ",(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"creating basic Data Flows"}),", the web app is by far the most efficient option,\nand ",(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/guides/edit-data-flows",children:"basic editing capabilities"})," are provided."]}),"\n",(0,s.jsx)(i.p,{children:"However, advanced editing tasks are only possible using flowctl. These include:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Manually editing collection schemas, for example, to add ",(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections",children:"projections"}),"\nor change the ",(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/",children:"reduction strategy"}),"."]}),"\n",(0,s.jsx)(i.li,{children:"Editing, testing, and publishing multiple entities at once."}),"\n",(0,s.jsx)(i.li,{children:"Creating and editing derivations."}),"\n"]}),"\n",(0,s.jsx)(i.admonition,{type:"tip",children:(0,s.jsxs)(i.p,{children:["A simplified development experience for derivations is available. You can use the web app to create a cloud-based development environment pre-populated with the components you need. Learn how ",(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/guides/flowctl/create-derivation",children:"here"}),"."]})}),"\n",(0,s.jsx)(i.p,{children:"This guide covers the basic procedure of pulling one or more live Flow entities to your local development environment,\nediting their specifications, and re-publishing them."}),"\n",(0,s.jsx)(t.A,{chart:"\n\tgraph LR;\n d[Local files];\n c[Catalog];\n d-- 2: Test --\x3ed;\n d-- 3: Publish specifications --\x3ec;\n c-- 1: Pull specifications --\x3ed;\n"}),"\n",(0,s.jsx)(i.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(i.p,{children:"To complete this workflow, you need:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["An ",(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/getting-started/installation#registration-and-setup",children:"Estuary account"})]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/getting-started/installation#get-started-with-the-flow-cli",children:"flowctl installed locally"})}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["One or more published Flow entities. (To edit unpublished drafts, ",(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp",children:"use this guide"}),".)"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"pull-specifications-locally",children:"Pull specifications locally"}),"\n",(0,s.jsxs)(i.p,{children:["Every ",(0,s.jsx)(i.em,{children:"entity"})," (including active ",(0,s.jsx)(i.em,{children:"tasks"}),", like captures and materializations, and static ",(0,s.jsx)(i.em,{children:"collections"}),")\nhas a globally unique name in the Flow catalog."]}),"\n",(0,s.jsx)(i.p,{children:"For example, a given Data Flow may comprise:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["A capture, ",(0,s.jsx)(i.code,{children:"myOrg/marketing/leads"}),", which writes to..."]}),"\n",(0,s.jsxs)(i.li,{children:["Two collections, ",(0,s.jsx)(i.code,{children:"myOrg/marketing/emailList"})," and ",(0,s.jsx)(i.code,{children:"myOrg/marketing/socialMedia"}),", which are materialized as part of..."]}),"\n",(0,s.jsxs)(i.li,{children:["A materialization, ",(0,s.jsx)(i.code,{children:"myOrg/marketing/contacts"}),"."]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Using these names, you'll identify and pull the relevant specifications for editing."}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Authorize flowctl."}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Go to the ",(0,s.jsx)(i.a,{href:"https://dashboard.estuary.dev/admin/api",children:"CLI-API tab of the web app"})," and copy your access token."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Run ",(0,s.jsx)(i.code,{children:"flowctl auth token --token <paste-token-here>"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Determine which entities you need to pull from the catalog. You can:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Check the web app's ",(0,s.jsx)(i.strong,{children:"Sources"}),", ",(0,s.jsx)(i.strong,{children:"Collections"}),", and ",(0,s.jsx)(i.strong,{children:"Destinations"})," pages.\nAll published entities to which you have access are listed and can be searched."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Run ",(0,s.jsx)(i.code,{children:"flowctl catalog list"}),". This command returns a complete list of entities to which you have access.\nYou can refine by specifying a ",(0,s.jsx)(i.code,{children:"--prefix"})," and filter by entity type: ",(0,s.jsx)(i.code,{children:"--captures"}),", ",(0,s.jsx)(i.code,{children:"--collections"}),", ",(0,s.jsx)(i.code,{children:"--materializations"}),", or ",(0,s.jsx)(i.code,{children:"--tests"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["From the above example, ",(0,s.jsx)(i.code,{children:"flowctl catalog list --prefix myOrg/marketing --captures --materializations"})," would return\n",(0,s.jsx)(i.code,{children:"myOrg/marketing/leads"})," and ",(0,s.jsx)(i.code,{children:"myOrg/marketing/contacts"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Pull the specifications you need by running ",(0,s.jsx)(i.code,{children:"flowctl catalog pull-specs"}),":"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Pull one or more specifications by name, for example: ",(0,s.jsx)(i.code,{children:"flowctl catalog pull-specs --name myOrg/marketing/emailList"})]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Pull a group of specifications by prefix or type filter, for example: ",(0,s.jsx)(i.code,{children:"flowctl catalog pull-specs --prefix myOrg/marketing --collections"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"The source files are written to your current working directory."}),"\n",(0,s.jsxs)(i.ol,{start:"4",children:["\n",(0,s.jsx)(i.li,{children:"Browse the source files."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"flowctl pulls specifications into subdirectories organized by entity name,\nand specifications sharing a catalog prefix are written to the same YAML file."}),"\n",(0,s.jsxs)(i.p,{children:["Regardless of what you pull, there is always a top-level file called ",(0,s.jsx)(i.code,{children:"flow.yaml"})," that ",(0,s.jsx)(i.em,{children:"imports"})," all other nested YAML files.\nThese, in turn, contain the entities' specifications."]}),"\n",(0,s.jsx)(i.h2,{id:"edit-source-files-and-re-publish-specifications",children:"Edit source files and re-publish specifications"}),"\n",(0,s.jsx)(i.p,{children:"Next, you'll complete your edits, test that they were performed correctly, and re-publish everything."}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Open the YAML files that contain the specification you want to edit."}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Make changes. For guidance on how to construct Flow specifications, see the documentation for the task type:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/concepts/captures#specification",children:"Captures"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/concepts/collections#specification",children:"Collections"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/concepts/materialization#specification",children:"Materializations"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/concepts/derivations#specification",children:"Derivations"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"/pr-preview/pr-1594/concepts/tests",children:"Tests"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["When you're done, you can test your changes:\n",(0,s.jsx)(i.code,{children:"flowctl catalog test --source flow.yaml"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["You'll almost always use the top-level ",(0,s.jsx)(i.code,{children:"flow.yaml"})," file as the source here because it imports all other Flow specifications\nin your working directory."]}),"\n",(0,s.jsx)(i.p,{children:"Once the test has passed, you can publish your specifications."}),"\n",(0,s.jsxs)(i.ol,{start:"4",children:["\n",(0,s.jsxs)(i.li,{children:["Re-publish all the specifications you pulled: ",(0,s.jsx)(i.code,{children:"flowctl catalog publish --source flow.yaml"})]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["Again you'll almost always want to use the top-level ",(0,s.jsx)(i.code,{children:"flow.yaml"})," file. If you want to publish only certain specifications,\nyou can provide a path to a different file."]}),"\n",(0,s.jsxs)(i.ol,{start:"5",children:["\n",(0,s.jsxs)(i.li,{children:["Return to the web app or use ",(0,s.jsx)(i.code,{children:"flowctl catalog list"})," to check the status of the entities you just published.\nTheir publication time will be updated to reflect the work you just did."]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"If you're not satisfied with the results of your edits, repeat the process iteratively until you are."})]})}function p(e={}){const{wrapper:i}={...(0,l.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},61114:(e,i,n)=>{n.d(i,{A:()=>r});var s=n(96540),l=n(99702),t=n(74848);l.N.initialize({startOnLoad:!0});const r=e=>{let{chart:i}=e;return(0,s.useEffect)((()=>{l.N.contentLoaded()}),[]),(0,t.jsx)("div",{className:"mermaid",children:i})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4acaa9c4.8e18b133.js b/pr-preview/pr-1594/assets/js/4acaa9c4.8e18b133.js deleted file mode 100644 index 3cb47d8393..0000000000 --- a/pr-preview/pr-1594/assets/js/4acaa9c4.8e18b133.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4333],{29967:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>h});var a=t(74848),s=t(28453),r=t(11470),i=t(19365);const o={sidebar_position:7},c="Schemas",l={id:"concepts/schemas",title:"Schemas",description:"Flow documents and collections always have an associated schema",source:"@site/docs/concepts/schemas.md",sourceDirName:"concepts",slug:"/concepts/schemas",permalink:"/pr-preview/pr-1594/concepts/schemas",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/schemas.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"tutorialSidebar",previous:{title:"Imports",permalink:"/pr-preview/pr-1594/concepts/import"},next:{title:"Storage mappings",permalink:"/pr-preview/pr-1594/concepts/storage-mappings"}},d={},h=[{value:"JSON Schema",id:"json-schema",level:2},{value:"Generation",id:"generation",level:3},{value:"Translations",id:"translations",level:3},{value:"Annotations",id:"annotations",level:3},{value:"Writing schemas",id:"writing-schemas",level:2},{value:"Organization",id:"organization",level:3},{value:"Write and read schemas",id:"write-and-read-schemas",level:2},{value:"Reductions",id:"reductions",level:2},{value:"<code>reduce</code> annotations",id:"reduce-annotations",level:3},{value:"Reductions and collection keys",id:"reductions-and-collection-keys",level:4},{value:"Composition with conditionals",id:"composition-with-conditionals",level:4},{value:"Continuous schema inference",id:"continuous-schema-inference",level:2},{value:"<code>default</code> annotations",id:"default-annotations",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"schemas",children:"Schemas"}),"\n",(0,a.jsxs)(n.p,{children:["Flow documents and ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections",children:"collections"})," always have an associated schema\nthat defines the structure, representation, and constraints\nof your documents.\nCollections must have one schema, but ",(0,a.jsx)(n.a,{href:"#write-and-read-schemas",children:"may have two distinct schemas"}),": one for when documents are added to the collection, and one for when documents are read from that collection."]}),"\n",(0,a.jsx)(n.p,{children:'Schemas are a powerful tool for data quality.\nFlow verifies every document against its schema whenever it\'s read or written,\nwhich provides a strong guarantee that your collections hold only "clean" data,\nand that bugs and invalid documents are caught before they can impact downstream data products.'}),"\n",(0,a.jsxs)(n.p,{children:["In most cases, Flow generates a functioning schema on your behalf during the ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#discovery",children:"discovery"}),"\nphase of capture.\nIn advanced use cases, however, customizing your schema becomes more important."]}),"\n",(0,a.jsx)(n.h2,{id:"json-schema",children:"JSON Schema"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"https://json-schema.org/understanding-json-schema/",children:"JSON Schema"}),"\nis an expressive open standard for defining the schema and structure of documents.\nFlow uses it for all schemas defined in Flow specifications."]}),"\n",(0,a.jsxs)(n.p,{children:["JSON Schema goes well beyond basic type information and can model\n",(0,a.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Tagged_union",children:"tagged unions"}),",\nrecursion, and other complex, real-world composite types.\nSchemas can also define rich data validations like minimum and maximum values,\nregular expressions, dates, timestamps, email addresses, and other formats."]}),"\n",(0,a.jsxs)(n.p,{children:["Together, these features let schemas represent structure ",(0,a.jsx)(n.em,{children:"as well as"}),"\nexpectations and constraints that are evaluated and must hold true\nfor every collection document ",(0,a.jsx)(n.em,{children:"before"})," it\u2019s added to the collection.\nThey\u2019re a powerful tool for ensuring end-to-end data quality:\nfor catching data errors and mistakes early,\nbefore they can impact your production data products."]}),"\n",(0,a.jsx)(n.h3,{id:"generation",children:"Generation"}),"\n",(0,a.jsx)(n.p,{children:"When capturing data from an external system,\nFlow can usually generate suitable JSON schemas on your behalf."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"Learn more about using connectors"})}),"\n",(0,a.jsx)(n.p,{children:"For systems like relational databases, Flow will typically generate a complete JSON schema by introspecting the table definition."}),"\n",(0,a.jsxs)(n.p,{children:["For systems that store unstructured data, Flow will typically generate a very minimal schema, and will rely on schema inferrence to fill in the details. See ",(0,a.jsx)(n.a,{href:"#continuous-schema-inference",children:"continuous schema inferenece"})," for more information."]}),"\n",(0,a.jsx)(n.h3,{id:"translations",children:"Translations"}),"\n",(0,a.jsxs)(n.p,{children:["You must only provide Flow\na model of a given dataset ",(0,a.jsx)(n.em,{children:"one time"}),", as a JSON schema.\nHaving done that, Flow leverages static inference over your schemas\nto perform many build-time validations of your catalog entities,\nhelping you catch potential problems early."]}),"\n",(0,a.jsx)(n.p,{children:"Schema inference is also used to provide translations into other schema flavors:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Most ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections",children:"projections"})," of a collection\nare automatically inferred from its schema.\nMaterializations use your projections to create appropriate representations\nin your endpoint system.\nA SQL connector will create table definitions with appropriate\ncolumns, types, and constraints."]}),"\n",(0,a.jsx)(n.li,{children:"Flow generates TypeScript definitions from schemas to provide\ncompile-time type checks of user lambda functions.\nThese checks are immensely helpful for surfacing mismatched expectations around,\nfor example, whether a field could ever be null or is misspelt \u2014\nwhich, if not caught, might otherwise fail at runtime."}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"annotations",children:"Annotations"}),"\n",(0,a.jsxs)(n.p,{children:["The JSON Schema standard introduces the concept of\n",(0,a.jsx)(n.a,{href:"http://json-schema.org/understanding-json-schema/reference/generic.html#annotations",children:"annotations"}),",\nwhich are keywords that attach metadata to a location within a validated JSON document.\nFor example, ",(0,a.jsx)(n.code,{children:"title"})," and ",(0,a.jsx)(n.code,{children:"description"})," can be used to annotate a schema with its meaning:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"properties:\n myField:\n title: My Field\n description: A description of myField\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Flow extends JSON Schema with additional annotation keywords,\nwhich provide Flow with further instruction for how documents should be processed.\nIn particular, the ",(0,a.jsx)(n.a,{href:"#reduce-annotations",children:(0,a.jsx)(n.code,{children:"reduce"})})," and ",(0,a.jsx)(n.a,{href:"#default-annotations",children:(0,a.jsx)(n.code,{children:"default"})})," keywords\nhelp you define merge behaviors and avoid null values at your destination systems, respectively."]}),"\n",(0,a.jsxs)(n.p,{children:["What\u2019s especially powerful about annotations is that they respond to\n",(0,a.jsx)(n.strong,{children:"conditionals"})," within the schema.\nConsider a schema validating a positive or negative number:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"type: number\noneOf:\n - exclusiveMinimum: 0\n description: A positive number.\n - exclusiveMaximum: 0\n description: A negative number.\n - const: 0\n description: Zero.\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Here, the activated ",(0,a.jsx)(n.code,{children:"description"})," of this schema location depends\non whether the integer is positive, negative, or zero."]}),"\n",(0,a.jsx)(n.h2,{id:"writing-schemas",children:"Writing schemas"}),"\n",(0,a.jsx)(n.p,{children:"Your schema can be quite permissive or as strict as you wish.\nThere are a few things to know, however."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["The top-level type must be ",(0,a.jsx)(n.code,{children:"object"}),".\nFlow adds a bit of metadata to each of your documents under the ",(0,a.jsx)(n.code,{children:"_meta"})," property,\nwhich can only be done with a top-level object."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Any fields that are part of the collection's ",(0,a.jsx)(n.code,{children:"key"})," must provably exist\nin any document that validates against the schema.\nPut another way, every document within a collection must include all of the fields\nof the collection's key, and the schema must guarantee that."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["For example, the following collection schema would be invalid because\nthe ",(0,a.jsx)(n.code,{children:"id"})," field, which is used as its key, is not ",(0,a.jsx)(n.code,{children:"required"}),",\nso it might not actually exist in all documents:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/whoops:\n schema:\n type: object\n required: [value]\n properties:\n id: {type: integer}\n value: {type: string}\n key: [/id]\n"})}),"\n",(0,a.jsxs)(n.p,{children:["To fix the above schema, change ",(0,a.jsx)(n.code,{children:"required"})," to ",(0,a.jsx)(n.code,{children:"[id, value]"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#Schemas",children:"Learn more of how schemas can be expressed within collections"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"organization",children:"Organization"}),"\n",(0,a.jsxs)(n.p,{children:["JSON schema has a ",(0,a.jsx)(n.code,{children:"$ref"})," keyword which is used to reference a schema stored elsewhere.\nFlow resolves ",(0,a.jsx)(n.code,{children:"$ref"})," as a relative URL of the current file,\nand also supports\n",(0,a.jsx)(n.a,{href:"https://datatracker.ietf.org/doc/html/rfc6901#section-6",children:"JSON fragment pointers"}),"\nfor referencing a specific schema within a larger schema document,\nsuch as ",(0,a.jsx)(n.code,{children:"../my/widget.schema.yaml#/path/to/schema"}),".\nIt's recommended to use references in order to organize your schemas for reuse."]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.code,{children:"$ref"})," can also be used in combination with other schema keywords\nto further refine a base schema.\nHere's an example that uses references to organize and\nfurther tighten the constraints of a reused base schema:"]}),"\n","\n",(0,a.jsxs)(r.A,{children:[(0,a.jsx)(i.A,{value:"flow.yaml",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/coordinates:\n key: [/id]\n schema: schemas.yaml#/definitions/coordinate\n\n acmeCo/integer-coordinates:\n key: [/id]\n schema: schemas.yaml#/definitions/integer-coordinate\n\n acmeCo/positive-coordinates:\n key: [/id]\n schema:\n # Compose a restriction that `x` & `y` must be positive.\n $ref: schemas.yaml#/definitions/coordinate\n properties:\n x: {exclusiveMinimum: 0}\n y: {exclusiveMinimum: 0}\n"})})}),(0,a.jsx)(i.A,{value:"schemas.yaml",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:'definitions:\n coordinate:\n type: object\n required: [id, x, y]\n properties:\n id: {type: string}\n x:\n description: The X axis value of the coordinate.\n type: number\n y:\n description: The Y axis value of the coordinate.\n type: number\n\n integer-coordinate:\n $ref: "#/definitions/coordinate"\n # Compose a restriction that `x` & `y` cannot be fractional.\n properties:\n x: {type: integer}\n y: {type: integer}\n'})})})]}),"\n",(0,a.jsxs)(n.admonition,{type:"tip",children:[(0,a.jsx)(n.p,{children:"You can write your JSON schemas as either YAML or JSON across any number\nof files, all referenced from Flow catalog files or other schemas."}),(0,a.jsxs)(n.p,{children:["Schema references are always resolved as URLs relative to the current file,\nbut you can also use absolute URLs to a third-party schema like\n",(0,a.jsx)(n.a,{href:"https://www.schemastore.org",children:"schemastore.org"}),"."]})]}),"\n",(0,a.jsx)(n.h2,{id:"write-and-read-schemas",children:"Write and read schemas"}),"\n",(0,a.jsxs)(n.p,{children:["In some cases, you may want to impose different constraints to data that is being added (",(0,a.jsx)(n.em,{children:"written"}),") to the collection\nand data that is exiting (",(0,a.jsx)(n.em,{children:"read from"}),") the collection."]}),"\n",(0,a.jsxs)(n.p,{children:["For example, you may need to start capturing data ",(0,a.jsx)(n.em,{children:"now"})," from a source system; say, a pub-sub system with short-lived\nhistorical data support or an HTTP endpoint, but don't know or don't control the endpoint's schema.\nYou can capture the data with a permissive write schema, and impose a stricter read schema on the data\nas you need to perform a derivation or materialization.\nYou can safely experiment with the read schema at your convenience, knowing the data has already been captured."]}),"\n",(0,a.jsxs)(n.p,{children:["To achieve this, edit the collection, re-naming the standard ",(0,a.jsx)(n.code,{children:"schema"})," to ",(0,a.jsx)(n.code,{children:"writeSchema"})," and adding a ",(0,a.jsx)(n.code,{children:"readSchema"}),".\nMake sure that the field used as the collection key is defined in both schemas."]}),"\n",(0,a.jsxs)(n.p,{children:["You can either perform this manually, or use Flow's ",(0,a.jsx)(n.strong,{children:"Schema Inference"})," tool to infer a read schema.\nSchema Inference is available in the web app when you ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/edit-data-flows",children:"edit a capture or materialization"})," and ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-materialization",children:"create a materialization"}),"."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Before separating your write and read schemas, have the following in mind:"})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["The write schema comes from the capture connector that produced the collection and shouldn't be modified.\nAlways apply your schema changes to the ",(0,a.jsx)(n.em,{children:"read"})," schema."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"Separate read and write schemas are typically useful for collections that come from a source system with a flat or loosely\ndefined data structure, such as cloud storage or pub-sub systems.\nCollections sourced from databases and most SaaS systems come with an explicitly defined data structure and shouldn't\nneed a different read schema."}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["If you're using standard ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections",children:"projections"}),", you must only define them in the read schema.\nHowever, if your projections are ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections#logical-partitions",children:"logical partitions"}),", you must define them in both schemas."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["Here's a simple example in which you don't know how purchase prices are formatted when capturing them,\nbut find out later that ",(0,a.jsx)(n.code,{children:"number"})," is the appropriate data type:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"collections:\n purchases:\n writeSchema:\n type: object\n title: Store price as strings\n description: Not sure if prices are formatted as numbers or strings.\n properties:\n id: { type: integer}\n price: {type: [string, number]}\n readSchema:\n type: object\n title: Prices as numbers\n properties:\n id: { type: integer}\n price: {type: number}\n key: [/id]\n"})}),"\n",(0,a.jsx)(n.h2,{id:"reductions",children:"Reductions"}),"\n",(0,a.jsxs)(n.p,{children:["Flow collections have keys, and multiple documents\nmay be added to collections that share a common key.\nWhen this happens, Flow will opportunistically merge all such documents\ninto a single representative document for that key through a process\nknown as ",(0,a.jsx)(n.em,{children:"reduction"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["Flow's default is simply to retain the most recent document of a given key,\nwhich is often the behavior that you're after.\nSchema ",(0,a.jsx)(n.code,{children:"reduce"})," annotations allow for far more powerful behaviors."]}),"\n",(0,a.jsx)(n.p,{children:"The Flow runtime performs reductions frequently and continuously\nto reduce the overall movement and cost of data transfer and storage.\nA torrent of input collection documents can often become a trickle\nof reduced updates that must be stored or materialized into your\nendpoints."}),"\n",(0,a.jsxs)(n.admonition,{type:"info",children:[(0,a.jsxs)(n.p,{children:["Flow never delays processing in order to batch or combine more documents,\nas some systems do (commonly known as ",(0,a.jsx)(n.em,{children:"micro-batches"}),", or time-based ",(0,a.jsx)(n.em,{children:"polling"}),").\nEvery document is processed as quickly as possible, from end to end."]}),(0,a.jsx)(n.p,{children:"Instead Flow uses optimistic transaction pipelining to do as much useful work as possible,\nwhile it awaits the commit of a previous transaction.\nThis natural back-pressure affords plenty of opportunity for\ndata reductions while minimizing latency."})]}),"\n",(0,a.jsxs)(n.h3,{id:"reduce-annotations",children:[(0,a.jsx)(n.code,{children:"reduce"})," annotations"]}),"\n",(0,a.jsxs)(n.p,{children:["Reduction behaviors are defined by ",(0,a.jsx)(n.code,{children:"reduce"}),"\n",(0,a.jsx)(n.a,{href:"#annotations",children:"JSON schema annotations"}),"\nwithin your document schemas.\nThese annotations provide Flow with the specific reduction strategies\nto use at your various document locations."]}),"\n",(0,a.jsxs)(n.p,{children:["If you're familiar with the ",(0,a.jsx)(n.em,{children:"map"})," and ",(0,a.jsx)(n.em,{children:"reduce"})," primitives present in\nPython, Javascript, and many other languages, this should feel familiar.\nWhen multiple documents map into a collection with a common key,\nFlow reduces them on your behalf by using your ",(0,a.jsx)(n.code,{children:"reduce"})," annotations."]}),"\n",(0,a.jsx)(n.p,{children:"Here's an example that sums an integer:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"type: integer\nreduce: { strategy: sum }\n\n# 1, 2, -1 => 2\n"})}),"\n",(0,a.jsx)(n.p,{children:"Or deeply merges a map:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:'type: object\nreduce: { strategy: merge }\n\n# {"a": "b"}, {"c": "d"} => {"a": "b", "c": "d"}\n'})}),"\n",(0,a.jsxs)(n.p,{children:["Learn more in the\n",(0,a.jsx)(n.a,{href:"../../reference/reduction-strategies/",children:"reduction strategies"}),"\nreference documentation."]}),"\n",(0,a.jsx)(n.h4,{id:"reductions-and-collection-keys",children:"Reductions and collection keys"}),"\n",(0,a.jsx)(n.p,{children:"Reduction annotations change the common patterns for how you think about collection keys."}),"\n",(0,a.jsx)(n.p,{children:"Suppose you are building a reporting fact table over events of your business.\nToday you would commonly consider a unique event ID to be its natural key.\nYou would load all events into your warehouse and perform query-time aggregation.\nWhen that becomes too slow, you periodically refresh materialized views for fast-but-stale queries."}),"\n",(0,a.jsxs)(n.p,{children:["With Flow, you instead use a collection key of your ",(0,a.jsx)(n.em,{children:"fact table dimensions"}),",\nand use ",(0,a.jsx)(n.code,{children:"reduce"})," annotations to define your metric aggregations.\nA materialization of the collection then maintains a\ndatabase table which is keyed on your dimensions,\nso that queries are both fast ",(0,a.jsx)(n.em,{children:"and"})," up to date."]}),"\n",(0,a.jsx)(n.h4,{id:"composition-with-conditionals",children:"Composition with conditionals"}),"\n",(0,a.jsxs)(n.p,{children:["Like any other JSON Schema annotation,\n",(0,a.jsx)(n.code,{children:"reduce"})," annotations respond to schema conditionals.\nHere we compose ",(0,a.jsx)(n.code,{children:"append"})," and ",(0,a.jsx)(n.code,{children:"lastWriteWins"})," strategies to\nreduce an appended array which can also be cleared:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"type: array\noneOf:\n # If the array is non-empty, reduce by appending its items.\n - minItems: 1\n reduce: { strategy: append }\n # Otherwise, if the array is empty, reset the reduced array to be empty.\n - maxItems: 0\n reduce: { strategy: lastWriteWins }\n\n# [1, 2], [3, 4, 5] => [1, 2, 3, 4, 5]\n# [1, 2], [], [3, 4, 5] => [3, 4, 5]\n# [1, 2], [3, 4, 5], [] => []\n"})}),"\n",(0,a.jsxs)(n.p,{children:["You can combine schema conditionals with annotations to build\n",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals",children:"rich behaviors"}),"."]}),"\n",(0,a.jsx)(n.h2,{id:"continuous-schema-inference",children:"Continuous schema inference"}),"\n",(0,a.jsx)(n.p,{children:"Flow automatically infers a JSON schema for every captured collection. This schema is updated automatically as data is captured."}),"\n",(0,a.jsx)(n.p,{children:"For some systems, like relational databases, Flow is able to determine a complete JSON schema for each collection up front, before even starting the capture. But many other systems are not able to provide detailed and accurate information about the data before it's captured. Often, this is because the source system data is unstructured or loosely structured. For these systems, the schema can only be known after the data is captured. Continuous schema inference is most useful in these scenarios."}),"\n",(0,a.jsxs)(n.p,{children:["For example, say you're capturing from MongoDB. MongoDB documents must all have an ",(0,a.jsx)(n.code,{children:"_id"})," field, but that is essentially the only requirement. You can't know what other fields may exist on MongoDB documents until you've read them. When you set up a capture from MongoDB using the Flow web app, the collection specifications will look something like this:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"key: [ /_id ]\nwriteSchema:\n type: object\n properties:\n _id: { type: string }\n required: [ _id ]\nreadSchema:\n allOf:\n - $ref: flow://write-schema\n - $ref: flow://inferred-schema\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Note that this spec uses separate read and write schemas. The ",(0,a.jsx)(n.code,{children:"writeSchema"})," is extremely permissive, and only requires an ",(0,a.jsx)(n.code,{children:"_id"})," property with a string value. The ",(0,a.jsx)(n.code,{children:"readSchema"})," references ",(0,a.jsx)(n.code,{children:"flow://inferred-schema"}),", which expands to the current inferred schema when the collection is published."]}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.p,{children:["Note that ",(0,a.jsx)(n.code,{children:"$ref: flow://write-schema"})," expands to the current ",(0,a.jsx)(n.code,{children:"writeSchema"}),". Whenever you use ",(0,a.jsx)(n.code,{children:"$ref: flow://inferred-schema"}),", you should always include the ",(0,a.jsx)(n.code,{children:"flow://write-schema"})," as well, so that you don't need to repeat any fields that are defined in the ",(0,a.jsx)(n.code,{children:"writeSchema"})," or wait for those fields to be observed by schema inference."]})}),"\n",(0,a.jsxs)(n.p,{children:["When you first publish a collection using the inferred schema, ",(0,a.jsx)(n.code,{children:"flow://inferred-schema"})," expands to a special placeholder schema that rejects ",(0,a.jsx)(n.em,{children:"all"})," documents. This is to ensure that a non-placeholder inferred schema has been published before allowing any documents to be materialized. Once data is captured to the collection, the inferred schema immediately updates to strictly and minimally describe the captured."]}),"\n",(0,a.jsxs)(n.p,{children:["Because the effective ",(0,a.jsx)(n.code,{children:"readSchema"})," is only ever updated when the collection is published, the best option is usually to use the inferred schema in conjunction with ",(0,a.jsx)(n.a,{href:"/concepts/captures/#autodiscover",children:"autoDiscover"}),"."]}),"\n",(0,a.jsxs)(n.h2,{id:"default-annotations",children:[(0,a.jsx)(n.code,{children:"default"})," annotations"]}),"\n",(0,a.jsxs)(n.p,{children:["You can use ",(0,a.jsx)(n.code,{children:"default"})," annotations to prevent null values from being materialized to your endpoint system."]}),"\n",(0,a.jsxs)(n.p,{children:["When this annotation is absent for a non-required field, missing values in that field are materialized as ",(0,a.jsx)(n.code,{children:"null"}),".\nWhen the annotation is present, missing values are materialized with the field's ",(0,a.jsx)(n.code,{children:"default"})," value:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/coyotes:\n schema:\n type: object\n required: [id]\n properties:\n id: {type: integer}\n anvils_dropped: {type: integer}\n reduce: {strategy: sum }\n default: 0\n key: [/id]\n"})}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.code,{children:"default"})," annotations are only used for materializations; they're ignored by captures and derivations.\nIf your collection has both a ",(0,a.jsx)(n.a,{href:"#write-and-read-schemas",children:"write and read schema"}),", make sure you add this annotation to the read schema."]})]})}function m(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>i});t(96540);var a=t(34164);const s={tabItem:"tabItem_Ymn6"};var r=t(74848);function i(e){let{children:n,hidden:t,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.A)(s.tabItem,i),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>b});var a=t(96540),s=t(34164),r=t(23104),i=t(56347),o=t(205),c=t(57485),l=t(31682),d=t(70679);function h(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:t}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:s}}=e;return{value:n,label:t,attributes:a,default:s}}))}(t);return function(e){const n=(0,l.X)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function m(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:t}=e;const s=(0,i.W6)(),r=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,c.aZ)(r),(0,a.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(s.location.search);n.set(r,e),s.replace({...s.location,search:n.toString()})}),[r,s])]}function f(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,r=u(e),[i,c]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!m({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:r}))),[l,h]=p({queryString:t,groupId:s}),[f,y]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,r]=(0,d.Dv)(t);return[s,(0,a.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:s}),x=(()=>{const e=l??f;return m({value:e,tabValues:r})?e:null})();(0,o.A)((()=>{x&&c(x)}),[x]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!m({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),y(e)}),[h,y,r]),tabValues:r}}var y=t(92303);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=t(74848);function w(e){let{className:n,block:t,selectedValue:a,selectValue:i,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,r.a_)(),d=e=>{const n=e.currentTarget,t=c.indexOf(n),s=o[t].value;s!==a&&(l(n),i(s))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;n=c[t]??c[0];break}case"ArrowLeft":{const t=c.indexOf(e.currentTarget)-1;n=c[t]??c[c.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":t},n),children:o.map((e=>{let{value:n,label:t,attributes:r}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>c.push(e),onKeyDown:h,onClick:d,...r,className:(0,s.A)("tabs__item",x.tabItem,r?.className,{"tabs__item--active":a===n}),children:t??n},n)}))})}function g(e){let{lazy:n,children:t,selectedValue:s}=e;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===s));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function v(e){const n=f(e);return(0,j.jsxs)("div",{className:(0,s.A)("tabs-container",x.tabList),children:[(0,j.jsx)(w,{...n,...e}),(0,j.jsx)(g,{...n,...e})]})}function b(e){const n=(0,y.A)();return(0,j.jsx)(v,{...e,children:h(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var a=t(96540);const s={},r=a.createContext(s);function i(e){const n=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4bccbb93.23c8fa60.js b/pr-preview/pr-1594/assets/js/4bccbb93.23c8fa60.js deleted file mode 100644 index d107ecd923..0000000000 --- a/pr-preview/pr-1594/assets/js/4bccbb93.23c8fa60.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7083],{79890:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>a,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=n(74848),s=n(28453);const o={},i="Flow tutorials",l={id:"getting-started/tutorials/README",title:"Flow tutorials",description:"Flow tutorials are complete learning experiences that help you get to know Flow using sample data.",source:"@site/docs/getting-started/tutorials/README.md",sourceDirName:"getting-started/tutorials",slug:"/getting-started/tutorials/",permalink:"/pr-preview/pr-1594/getting-started/tutorials/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/getting-started/tutorials/README.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Registration and setup",permalink:"/pr-preview/pr-1594/getting-started/installation"},next:{title:"PostgreSQL CDC streaming to Snowflake",permalink:"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake"}},a={},u=[];function c(t){const e={a:"a",h1:"h1",li:"li",p:"p",ul:"ul",...(0,s.R)(),...t.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h1,{id:"flow-tutorials",children:"Flow tutorials"}),"\n",(0,r.jsx)(e.p,{children:"Flow tutorials are complete learning experiences that help you get to know Flow using sample data."}),"\n",(0,r.jsx)(e.p,{children:"You'll find these helpful if:"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["\n",(0,r.jsx)(e.p,{children:"You're a new user looking for practice before you implement production Data Flows."}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:["\n",(0,r.jsxs)(e.p,{children:["You'd rather learn the Flow ",(0,r.jsx)(e.a,{href:"/pr-preview/pr-1594/concepts/",children:"concepts"})," in a hands-on setting."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.p,{children:["If you're looking for more streamlined guidance for your own use case, check out the ",(0,r.jsx)(e.a,{href:"../../guides/",children:"user guides"}),"."]})]})}function p(t={}){const{wrapper:e}={...(0,s.R)(),...t.components};return e?(0,r.jsx)(e,{...t,children:(0,r.jsx)(c,{...t})}):c(t)}},28453:(t,e,n)=>{n.d(e,{R:()=>i,x:()=>l});var r=n(96540);const s={},o=r.createContext(s);function i(t){const e=r.useContext(o);return r.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function l(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:i(t.components),r.createElement(o.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4d317276.f8901f15.js b/pr-preview/pr-1594/assets/js/4d317276.f8901f15.js deleted file mode 100644 index 353340e555..0000000000 --- a/pr-preview/pr-1594/assets/js/4d317276.f8901f15.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4147],{80822:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>r,toc:()=>h});var o=n(74848),a=n(28453),i=n(61114);const s={},c="Schema evolution",r={id:"concepts/advanced/evolutions",title:"Schema evolution",description:"Schema evolutions are a feature you can use to update your whole Data Flow to reflect edits to a collection, preventing your Data Flow from failing due to mismatched components.",source:"@site/docs/concepts/advanced/evolutions.md",sourceDirName:"concepts/advanced",slug:"/concepts/advanced/evolutions",permalink:"/pr-preview/pr-1594/concepts/advanced/evolutions",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/advanced/evolutions.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Tests",permalink:"/pr-preview/pr-1594/concepts/tests"},next:{title:"Journals",permalink:"/pr-preview/pr-1594/concepts/advanced/journals"}},l={},h=[{value:"Introduction",id:"introduction",level:2},{value:"Using evolutions",id:"using-evolutions",level:2},{value:"What do schema evolutions do?",id:"what-do-schema-evolutions-do",level:2},{value:"What causes breaking schema changes?",id:"what-causes-breaking-schema-changes",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"schema-evolution",children:"Schema evolution"}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"Schema evolutions"})," are a feature you can use to update your whole Data Flow to reflect edits to a collection, preventing your Data Flow from failing due to mismatched components."]}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsxs)(t.p,{children:["Evolutions are a relatively advanced concept in Flow.\nBefore continuing, you should have a basic understanding of ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/captures",children:"Flow captures"}),", ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections",children:"collections"}),", ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/schemas",children:"schemas"}),", and ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization",children:"materializations"}),"."]})}),"\n",(0,o.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,o.jsxs)(t.p,{children:["Flow stores your real-times datasets as ",(0,o.jsx)(t.strong,{children:"collections"}),", groups of continually updating JSON documents.\n",(0,o.jsx)(t.strong,{children:"Captures"})," write data to collections, and ",(0,o.jsx)(t.strong,{children:"materializations"})," read data from collections.\nTogether, these three components form a complete Data Flow."]}),"\n",(0,o.jsx)(t.admonition,{title:"Note",type:"info",children:(0,o.jsx)(t.p,{children:"Derivations can also read data from and write data to collections.\nTo keep things simple in this article, we'll be referring only to captures and materializations."})}),"\n","\n",(0,o.jsx)(i.A,{chart:"\n graph LR;\n Source[Source System]--\x3eCapture;\n\t\tCapture--\x3eCollection;\n Collection--\x3eMaterialization;\n Materialization--\x3eDest[Destination System];\n"}),"\n",(0,o.jsxs)(t.p,{children:["Each collection and its data are defined by a ",(0,o.jsx)(t.strong,{children:"collection specification"}),", or spec.\nThe spec serves as a formal contract between the capture and the materialization, ensuring that data is correctly shaped and moves through the Data Flow without error."]}),"\n",(0,o.jsxs)(t.p,{children:["The spec includes the collection's ",(0,o.jsx)(t.code,{children:"key"}),", its ",(0,o.jsx)(t.code,{children:"schema"}),", and ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections#logical-partitions",children:"logical partitions"})," of the collection, if any."]}),"\n",(0,o.jsx)(t.p,{children:"When any of these parts change, any capture or materialization writing to or reading from the collection must be updated to approve of the change, otherwise, the Data Flow will fail with an error."}),"\n",(0,o.jsxs)(t.p,{children:["You can use Flow's ",(0,o.jsx)(t.strong,{children:"schema evolutions"})," feature to quickly and simultaneously update other parts of a Data Flow so you're able to re-start it without error when you introduce a collection change."]}),"\n",(0,o.jsx)(t.p,{children:"Collection specs may change for a variety of reasons, such as:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["The source system is a database, and someone ran an ",(0,o.jsx)(t.code,{children:"ALTER TABLE"})," statement on a captured table, so you need to update the collection schema (through ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/captures#autodiscover",children:"AutoDiscover"})," or manually)."]}),"\n",(0,o.jsx)(t.li,{children:"The source system contains unstructured data, and some data with a different shape was just captured so you need to update the collection schema (through AutoDiscover or manually)."}),"\n",(0,o.jsx)(t.li,{children:"Someone manually changed the collection's logical partitions."}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"Regardless of why or how a spec change is introduced, the effect is the same. Flow will never permit you to publish changes that break this contract between captures and materializations, so you'll need to update the contract."}),"\n",(0,o.jsx)(t.h2,{id:"using-evolutions",children:"Using evolutions"}),"\n",(0,o.jsx)(t.p,{children:"When you attempt to publish a breaking change to a collection in the Flow web app, you get an error message that looks similar to this one:"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:n(97994).A+"",width:"2498",height:"862"})}),"\n",(0,o.jsxs)(t.p,{children:["Click the ",(0,o.jsx)(t.strong,{children:"Apply"})," button to trigger an evolution and update all necessary specification to keep your Data Flow functioning. Then, review and publish your draft."]}),"\n",(0,o.jsxs)(t.p,{children:["If you enabled ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/captures#autodiscover",children:"AutoDiscover"})," on a capture, any breaking changes that it introduces will trigger an automatic schema evolution, so long as you selected the ",(0,o.jsx)(t.strong,{children:"Breaking change re-versions collections"})," option(",(0,o.jsx)(t.code,{children:"evolveIncompatibleCollections"}),")."]}),"\n",(0,o.jsx)(t.h2,{id:"what-do-schema-evolutions-do",children:"What do schema evolutions do?"}),"\n",(0,o.jsx)(t.p,{children:"The schema evolution feature is available in the Flow web app when you're editing pre-existing Flow entities.\nIt notices when one of your edit would cause other components of the Data Flow to fail, alerts you, and gives you the option to automatically update the specs of these components to prevent failure."}),"\n",(0,o.jsxs)(t.p,{children:["In other words, evolutions happen in the ",(0,o.jsx)(t.em,{children:"draft"})," state. Whenever you edit, you create a draft.\nEvolutions add to the draft so that when it is published and updates the active data flow, operations can continue seamlessly."]}),"\n",(0,o.jsx)(t.p,{children:"Alternatively, you could manually update all the specs to agree to your edit, but this becomes time-consuming and repetitive."}),"\n",(0,o.jsx)(t.p,{children:"Evolutions can prevent errors resulting from mismatched specs in two ways:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"Materialize data to a new resource in the endpoint system"}),": The evolution updates the affected materialization bindings to increment their ",(0,o.jsx)(t.code,{children:"backfill"})," counter, which causes the materialization to re-create the resource (database table, for example) and backfill it from the beginning."]}),"\n",(0,o.jsx)(t.p,{children:"This is a simpler change, and how evolutions work in most cases."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"Re-create the Flow collection with a new name"}),": The evolution creates a completely new collection with numerical suffix, such as ",(0,o.jsx)(t.code,{children:"_v2"}),". This collection starts out empty and backfills from the source. The evolution also updates all captures and materializations that reference the old collection to instead reference the new collection, and increments their ",(0,o.jsx)(t.code,{children:"backfill"})," counters."]}),"\n",(0,o.jsx)(t.p,{children:"This is a more complicated change, and evolutions only work this way when necessary: when the collection key or logical partitioning changes."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"In either case, the names of the destination resources will remain the same. For example, a materialization to Postgres would drop and re-create the affected tables with the same names they had previously."}),"\n",(0,o.jsx)(t.p,{children:"Also in either case, only the specific bindings that had incompatible changes will be affected. Other bindings will remain untouched, and will not re-backfill."}),"\n",(0,o.jsx)(t.h2,{id:"what-causes-breaking-schema-changes",children:"What causes breaking schema changes?"}),"\n",(0,o.jsxs)(t.p,{children:["Though changes to the collection ",(0,o.jsx)(t.code,{children:"key"})," or logical partition can happen, the most common cause of a breaking change is a change to the collection schema."]}),"\n",(0,o.jsx)(t.p,{children:"Generally materializations, not captures, require updates following breaking schema changes. This is because the new collection specs are usually discovered from the source, so the capture is edited at the same time as the collection."}),"\n",(0,o.jsx)(t.p,{children:"Consider a collection schema that looks like this:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-yaml",children:"schema:\n type: object\n properties:\n id: { type: integer }\n foo: { type: string, format: date-time }\n required: [id]\nkey: [/id]\n"})}),"\n",(0,o.jsxs)(t.p,{children:["If you materialized that collection into a relational database table, the table would look something like ",(0,o.jsx)(t.code,{children:"my_table (id integer primary key, foo timestamptz)"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["Now, say you edit the collection spec to remove ",(0,o.jsx)(t.code,{children:"format: date-time"})," from ",(0,o.jsx)(t.code,{children:"bar"}),". You'd expect the materialized database table to then look like ",(0,o.jsx)(t.code,{children:"(id integer primary key, foo text)"}),". But since the column type of ",(0,o.jsx)(t.code,{children:"foo"})," has changed, this will fail. An easy solution in this case would be to change the name of the table that the collection is materialized into. Evolutions do this by appending a suffix to the original table name. In this case, you'd end up with ",(0,o.jsx)(t.code,{children:"my_table_v2 (id integer primary key, foo text)"}),"."]})]})}function u(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},61114:(e,t,n)=>{n.d(t,{A:()=>s});var o=n(96540),a=n(99702),i=n(74848);a.N.initialize({startOnLoad:!0});const s=e=>{let{chart:t}=e;return(0,o.useEffect)((()=>{a.N.contentLoaded()}),[]),(0,i.jsx)("div",{className:"mermaid",children:t})}},97994:(e,t,n)=>{n.d(t,{A:()=>o});const o=n.p+"assets/images/ui-evolution-re-create-de574ca2333327fc911cc8ff0e46c5b9.png"}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4d4f51e2.da6d3a2e.js b/pr-preview/pr-1594/assets/js/4d4f51e2.da6d3a2e.js deleted file mode 100644 index f883b16d15..0000000000 --- a/pr-preview/pr-1594/assets/js/4d4f51e2.da6d3a2e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8362],{46794:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var t=i(74848),o=i(28453);const r={},s="Google Cloud Pub/Sub",l={id:"reference/Connectors/materialization-connectors/google-pubsub",title:"Google Cloud Pub/Sub",description:"This connector materializes Flow collections into topics in Google Cloud Pub/Sub.",source:"@site/docs/reference/Connectors/materialization-connectors/google-pubsub.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/google-pubsub",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/google-pubsub.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Apache Parquet Files in Google GCS",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet"},next:{title:"Google Sheets",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets"}},c={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"OAuth authentication using the Flow web app",id:"oauth-authentication-using-the-flow-web-app",level:3},{value:"Manual authentication",id:"manual-authentication",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Multiplex topics",id:"multiplex-topics",level:2},{value:"Delta updates",id:"delta-updates",level:2},{value:"Message ordering",id:"message-ordering",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"google-cloud-pubsub",children:"Google Cloud Pub/Sub"}),"\n",(0,t.jsx)(n.p,{children:"This connector materializes Flow collections into topics in Google Cloud Pub/Sub."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/materialize-google-pubsub:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/materialize-google-pubsub:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/resource-manager/docs/creating-managing-projects#creating_a_project",children:"Google Cloud project"})," with the Google Pub/Sub API ",(0,t.jsx)(n.a,{href:"https://support.google.com/googleapi/answer/6158841?hl=en",children:"enabled"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Access to the project. Different items are required to configure access ",(0,t.jsx)(n.a,{href:"#oauth-authentication-using-the-flow-web-app",children:"using OAuth in the Flow web app"})," (recommended),\nand ",(0,t.jsx)(n.a,{href:"#manual-authentication",children:"configuring manually"}),"."]}),"\n",(0,t.jsx)(n.li,{children:"At least one Flow collection to materialize."}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["If you haven't yet captured your data from its external source, start at the beginning of the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"guide to create a dataflow"}),". You'll be referred back to this connector-specific documentation at the appropriate steps."]})}),"\n",(0,t.jsx)(n.h3,{id:"oauth-authentication-using-the-flow-web-app",children:"OAuth authentication using the Flow web app"}),"\n",(0,t.jsx)(n.p,{children:"OAuth is the simplest authentication method, and is supported in the Flow web app. You'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A Google account with the role ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/pubsub/docs/access-control#roles",children:(0,t.jsx)(n.code,{children:"roles/pubsub.editor"})}),"\nor equivalent for the Google Cloud project.\nSee the ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/iam/docs/granting-changing-revoking-access#grant-single-role",children:"Google IAM documentation"})," to learn about granting roles."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"You'll supply this account's username and password to authenticate."}),"\n",(0,t.jsx)(n.h3,{id:"manual-authentication",children:"Manual authentication"}),"\n",(0,t.jsx)(n.p,{children:"Manual authentication is the only method supported when using flowctl to develop locally. You'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A Google service account with the role ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/pubsub/docs/access-control#roles",children:(0,t.jsx)(n.code,{children:"roles/pubsub.editor"})}),"\nor equivalent for the Google Cloud project.\nSee the ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/iam/docs/granting-changing-revoking-access#grant-single-role",children:"Google IAM documentation"})," to learn about granting roles."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"A JSON key for the service account."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["See the ",(0,t.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2/service-account#creatinganaccount",children:"Google documentation"})," for help creating a new service account and generating its key."]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a Google Cloud Pub/Sub materialization, which will direct one or more of your Flow collections to your desired Pub/Sub topics."}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials"})})}),(0,t.jsx)(n.td,{children:"Authentication"}),(0,t.jsx)(n.td,{children:"Credentials used to authenticate with Google."}),(0,t.jsx)(n.td,{children:"array, boolean, null, number, object, string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/credentials/auth_type"})}),(0,t.jsx)(n.td,{children:"Authentication type"}),(0,t.jsxs)(n.td,{children:["Set to ",(0,t.jsx)(n.code,{children:"Service"})," for manual authentication, or use OAuth in the web app."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/credentials/credentials_json"})}),(0,t.jsx)(n.td,{children:"Service Account JSON"}),(0,t.jsx)(n.td,{children:"The JSON key of the service account to use for authorization, if configuring manually."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/project_id"})})}),(0,t.jsx)(n.td,{children:"Google Cloud Project ID"}),(0,t.jsx)(n.td,{children:"Name of the project containing the PubSub topics for this materialization."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsxs)(n.p,{children:["PubSub topics need a ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/pubsub/docs/create-topic#properties_of_a_topic",children:"default subscription"}),";\notherwise, delivered messages will be lost. Leave ",(0,t.jsx)(n.strong,{children:"Create with Default Subscription"})," set to the default, ",(0,t.jsx)(n.code,{children:"true"}),",\nunless you have a specific reason not to do so."]})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/create_default_subscription"})})}),(0,t.jsx)(n.td,{children:"Create with Default Subscription"}),(0,t.jsx)(n.td,{children:'Create a default subscription when creating the topic. Will be created as "<topic>-sub". Has no effect if the topic already exists.'}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsxs)(n.td,{children:["Required, ",(0,t.jsx)(n.code,{children:"true"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"identifier"})}),(0,t.jsx)(n.td,{children:"Resource Binding Identifier"}),(0,t.jsxs)(n.td,{children:["Optional identifier for the resource binding if creating a ",(0,t.jsx)(n.a,{href:"#multiplex-topics",children:"multiplex topic"}),'. Included as "identifier" attribute in published messages if specified.']}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/topic"})})}),(0,t.jsx)(n.td,{children:"Topic Name"}),(0,t.jsx)(n.td,{children:"Name of the topic to publish materialized results to."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsxs)(n.p,{children:["This sample reflects the ",(0,t.jsx)(n.a,{href:"#manual-authentication",children:"manual authentication"})," method using the CLI."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n config:\n credentials:\n auth_type: Service\n credentials_json: {secret}\n project_id: my_google_cloud_project\n bindings:\n \t- resource:\n create_default_subscription: true\n \ttopic: my_new_topic\n source: ${PREFIX}/${source_collection}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"multiplex-topics",children:"Multiplex topics"}),"\n",(0,t.jsxs)(n.p,{children:["You can materialize multiple Flow collections to the same Pub/Sub topic. This is known as a ",(0,t.jsx)(n.strong,{children:"multiplex topic"}),".\nYou do so by adding the optional ",(0,t.jsx)(n.code,{children:"identifier"})," field to the ",(0,t.jsx)(n.a,{href:"#bindings",children:"binding configuration"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"When materializing to a multiplex topic, ensure that:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The bindings you want to combine have the same ",(0,t.jsx)(n.code,{children:"topic"})," name."]}),"\n",(0,t.jsx)(n.li,{children:"Each binding pulls from a different Flow collection"}),"\n",(0,t.jsxs)(n.li,{children:["Each binding has a unique ",(0,t.jsx)(n.code,{children:"identifier"}),". It can be anything you'd like."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"The binding configuration will look similar to:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"bindings:\n - resource:\n identifier: one\n topic: multiplex-topic\n source: ${PREFIX}/source_collection_one\n - resource:\n identifier: two\n topic: multiplex-topic\n source: ${PREFIX}/source_collection_two\n"})}),"\n",(0,t.jsx)(n.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,t.jsxs)(n.p,{children:["Because Google Cloud Pub/Sub is a write-only event-streaming system, this connector uses only ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"message-ordering",children:"Message ordering"}),"\n",(0,t.jsxs)(n.p,{children:["Google Cloud Pub/Sub manages message ordering using ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/pubsub/docs/ordering",children:"ordering keys"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector sets the ordering key of published messages using the Flow ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#keys",children:"collection key"}),"\nof the documents being being published.\nMessages are published in order, on a per-key basis."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>s,x:()=>l});var t=i(96540);const o={},r=t.createContext(o);function s(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4da0167e.b6e7eb4e.js b/pr-preview/pr-1594/assets/js/4da0167e.b6e7eb4e.js deleted file mode 100644 index bfa6d0e16c..0000000000 --- a/pr-preview/pr-1594/assets/js/4da0167e.b6e7eb4e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5225],{84657:(e,d,s)=>{s.r(d),s.d(d,{assets:()=>c,contentTitle:()=>i,default:()=>o,frontMatter:()=>t,metadata:()=>l,toc:()=>h});var n=s(74848),r=s(28453);const t={},i="Amazon RDS for MySQL",l={id:"reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql",title:"Amazon RDS for MySQL",description:"This connector materializes Flow collections into tables in a MySQL database.",source:"@site/docs/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql.md",sourceDirName:"reference/Connectors/materialization-connectors/MySQL",slug:"/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"MySQL",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/"},next:{title:"Google Cloud SQL for MySQL",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql"}},c={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Connecting Directly With Amazon RDS",id:"connecting-directly-with-amazon-rds",level:3},{value:"Connect With SSH Tunneling",id:"connect-with-ssh-tunneling",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Setting the MySQL time zone",id:"setting-the-mysql-time-zone",level:3},{value:"SSL Mode",id:"ssl-mode",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Delta updates",id:"delta-updates",level:2},{value:"Date & times",id:"date--times",level:2},{value:"Reserved words",id:"reserved-words",level:2},{value:"Changelog",id:"changelog",level:2},{value:"V1: 2023-08-21",id:"v1-2023-08-21",level:4}];function x(e){const d={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(d.h1,{id:"amazon-rds-for-mysql",children:"Amazon RDS for MySQL"}),"\n",(0,n.jsx)(d.p,{children:"This connector materializes Flow collections into tables in a MySQL database."}),"\n",(0,n.jsxs)(d.p,{children:["It is available for use in the Flow web application. For local development or\nopen-source workflows,\n",(0,n.jsx)(d.a,{href:"https://ghcr.io/estuary/materialize-mysql:dev",children:(0,n.jsx)(d.code,{children:"ghcr.io/estuary/materialize-mysql:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,n.jsx)(d.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsx)(d.p,{children:"To use this connector, you'll need:"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["A MySQL database to which to materialize, and user credentials.","\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"MySQL versions 5.7 and later are supported"}),"\n",(0,n.jsx)(d.li,{children:"The connector will create new tables in the database per your specification,\nso user credentials must have access to create new tables."}),"\n",(0,n.jsxs)(d.li,{children:["The ",(0,n.jsx)(d.code,{children:"local_infile"})," global variable must be enabled. You can enable this\nsetting by running ",(0,n.jsx)(d.code,{children:"SET GLOBAL local_infile = true"})," in your database."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,n.jsx)(d.h2,{id:"setup",children:"Setup"}),"\n",(0,n.jsx)(d.p,{children:"You must configure your database to allow connections from Estuary.\nThere are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,n.jsx)(d.h3,{id:"connecting-directly-with-amazon-rds",children:"Connecting Directly With Amazon RDS"}),"\n",(0,n.jsxs)(d.ol,{children:["\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsx)(d.p,{children:"Edit the VPC security group associated with your database instance, or create a new VPC security group and associate it with the database instance."}),"\n",(0,n.jsxs)(d.ol,{children:["\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:[(0,n.jsx)(d.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html",children:"Modify the instance"}),", choosing ",(0,n.jsx)(d.strong,{children:"Publicly accessible"})," in the ",(0,n.jsx)(d.strong,{children:"Connectivity"})," settings."]}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:["Per the ",(0,n.jsx)(d.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html#Overview.RDSSecurityGroups.Create",children:"steps in the Amazon documentation"}),",\ncreate a new inbound rule and a new outbound rule that allow all traffic from the ",(0,n.jsx)(d.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(d.h3,{id:"connect-with-ssh-tunneling",children:"Connect With SSH Tunneling"}),"\n",(0,n.jsxs)(d.p,{children:["To allow SSH tunneling to a database instance hosted on AWS, you'll need to create a virtual computing environment, or ",(0,n.jsx)(d.em,{children:"instance"}),", in Amazon EC2."]}),"\n",(0,n.jsxs)(d.ol,{children:["\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:["Begin by finding your public SSH key on your local machine.\nIn the ",(0,n.jsx)(d.code,{children:".ssh"})," subdirectory of your user home directory,\nlook for the PEM file that contains the private SSH key. Check that it starts with ",(0,n.jsx)(d.code,{children:"-----BEGIN RSA PRIVATE KEY-----"}),",\nwhich indicates it is an RSA-based file."]}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"If no such file exists, generate one using the command:"}),"\n"]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{className:"language-console",children:" ssh-keygen -m PEM -t rsa\n"})}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["If a PEM file exists, but starts with ",(0,n.jsx)(d.code,{children:"-----BEGIN OPENSSH PRIVATE KEY-----"}),", convert it with the command:"]}),"\n"]}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{className:"language-console",children:' ssh-keygen -p -N "" -m pem -f /path/to/key\n'})}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:[(0,n.jsx)(d.a,{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws",children:"Import your SSH key into AWS"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:[(0,n.jsx)(d.a,{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html",children:"Launch a new instance in EC2"}),". During setup:"]}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Configure the security group to allow SSH connection from anywhere."}),"\n",(0,n.jsx)(d.li,{children:"When selecting a key pair, choose the key you just imported."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:[(0,n.jsx)(d.a,{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html",children:"Connect to the instance"}),",\nsetting the user name to ",(0,n.jsx)(d.code,{children:"ec2-user"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:["Find and note the ",(0,n.jsx)(d.a,{href:"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-viewing",children:"instance's public DNS"}),". This will be formatted like: ",(0,n.jsx)(d.code,{children:"ec2-198-21-98-1.compute-1.amazonaws.com"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsx)(d.p,{children:(0,n.jsx)(d.strong,{children:"Connect with SSH tunneling"})}),"\n",(0,n.jsxs)(d.ol,{children:["\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:["Refer to the ",(0,n.jsx)(d.a,{href:"/guides/connect-network/",children:"guide"})," to configure an SSH server on the cloud platform of your choice."]}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:["Configure your connector as described in the ",(0,n.jsx)(d.a,{href:"#configuration",children:"configuration"})," section above,\nwith the additional of the ",(0,n.jsx)(d.code,{children:"networkTunnel"})," stanza to enable the SSH tunnel, if using.\nSee ",(0,n.jsx)(d.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"}),"\nfor additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(d.admonition,{title:"Configuration Tip",type:"tip",children:[(0,n.jsxs)(d.p,{children:["To configure the connector, you must specify the database address in the format\n",(0,n.jsx)(d.code,{children:"host:port"}),". (You can also supply ",(0,n.jsx)(d.code,{children:"host"})," only; the connector will use the port ",(0,n.jsx)(d.code,{children:"3306"})," by default, which is correct in many cases.)\nYou can find the host and port in the following locations in each platform's console:"]}),(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"Amazon RDS: host as Endpoint; port as Port."}),"\n"]})]}),"\n",(0,n.jsx)(d.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(d.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a MySQL materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database."}),"\n",(0,n.jsx)(d.h3,{id:"properties",children:"Properties"}),"\n",(0,n.jsx)(d.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Property"}),(0,n.jsx)(d.th,{children:"Title"}),(0,n.jsx)(d.th,{children:"Description"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required/Default"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.strong,{children:(0,n.jsx)(d.code,{children:"/database"})})}),(0,n.jsx)(d.td,{children:"Database"}),(0,n.jsx)(d.td,{children:"Name of the logical database to materialize to."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"Required"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.strong,{children:(0,n.jsx)(d.code,{children:"/address"})})}),(0,n.jsx)(d.td,{children:"Address"}),(0,n.jsxs)(d.td,{children:["Host and port of the database. If only the host is specified, port will default to ",(0,n.jsx)(d.code,{children:"3306"}),"."]}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"Required"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.strong,{children:(0,n.jsx)(d.code,{children:"/password"})})}),(0,n.jsx)(d.td,{children:"Password"}),(0,n.jsx)(d.td,{children:"Password for the specified database user."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"Required"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.strong,{children:(0,n.jsx)(d.code,{children:"/user"})})}),(0,n.jsx)(d.td,{children:"User"}),(0,n.jsx)(d.td,{children:"Database user to connect as."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"Required"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/timezone"})}),(0,n.jsx)(d.td,{children:"Timezone"}),(0,n.jsxs)(d.td,{children:["Timezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read. Must be a valid IANA time zone name or +HH",":MM"," offset. Takes precedence over the 'time_zone' system variable if both are set."]}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/advanced"})}),(0,n.jsx)(d.td,{children:"Advanced Options"}),(0,n.jsx)(d.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,n.jsx)(d.td,{children:"object"}),(0,n.jsx)(d.td,{})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/advanced/sslmode"})}),(0,n.jsx)(d.td,{children:"SSL Mode"}),(0,n.jsx)(d.td,{children:"Overrides SSL connection behavior by setting the 'sslmode' parameter."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/advanced/ssl_server_ca"})}),(0,n.jsx)(d.td,{children:"SSL Server CA"}),(0,n.jsx)(d.td,{children:"Optional server certificate authority to use when connecting with custom SSL mode"}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/advanced/ssl_client_cert"})}),(0,n.jsx)(d.td,{children:"SSL Client Certificate"}),(0,n.jsx)(d.td,{children:"Optional client certificate to use when connecting with custom SSL mode."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/advanced/ssl_client_key"})}),(0,n.jsx)(d.td,{children:"SSL Client Key"}),(0,n.jsx)(d.td,{children:"Optional client key to use when connecting with custom SSL mode."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{})]})]})]}),"\n",(0,n.jsx)(d.h3,{id:"setting-the-mysql-time-zone",children:"Setting the MySQL time zone"}),"\n",(0,n.jsxs)(d.p,{children:["MySQL's ",(0,n.jsxs)(d.a,{href:"https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_time_zone",children:[(0,n.jsx)(d.code,{children:"time_zone"})," server system variable"]})," is set to ",(0,n.jsx)(d.code,{children:"SYSTEM"})," by default."]}),"\n",(0,n.jsxs)(d.p,{children:["If you intend to materialize collections including fields of with ",(0,n.jsx)(d.code,{children:"format: date-time"})," or ",(0,n.jsx)(d.code,{children:"format: time"}),",\nand ",(0,n.jsx)(d.code,{children:"time_zone"})," is set to ",(0,n.jsx)(d.code,{children:"SYSTEM"}),",\nFlow won't be able to detect the time zone and convert datetimes to the\nappropriate timezone when materializing.\nTo avoid this, you must explicitly set the time zone for your database."]}),"\n",(0,n.jsx)(d.p,{children:"You can:"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsx)(d.p,{children:"Specify a numerical offset from UTC."}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:["For MySQL version 8.0.19 or higher, values from ",(0,n.jsx)(d.code,{children:"-13:59"})," to ",(0,n.jsx)(d.code,{children:"+14:00"}),", inclusive, are permitted."]}),"\n",(0,n.jsxs)(d.li,{children:["Prior to MySQL 8.0.19, values from ",(0,n.jsx)(d.code,{children:"-12:59"})," to ",(0,n.jsx)(d.code,{children:"+13:00"}),", inclusive, are permitted"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:["Specify a named timezone in ",(0,n.jsx)(d.a,{href:"https://www.iana.org/time-zones",children:"IANA timezone format"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(d.li,{children:["\n",(0,n.jsxs)(d.p,{children:["If you're using Amazon Aurora, create or modify the ",(0,n.jsx)(d.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html",children:"DB cluster parameter group"}),"\nassociated with your MySQL database.\n",(0,n.jsx)(d.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html#USER_WorkingWithParamGroups.ModifyingCluster",children:"Set"})," the ",(0,n.jsx)(d.code,{children:"time_zone"})," parameter to the correct value."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(d.p,{children:["For example, if you're located in New Jersey, USA, you could set ",(0,n.jsx)(d.code,{children:"time_zone"})," to ",(0,n.jsx)(d.code,{children:"-05:00"})," or ",(0,n.jsx)(d.code,{children:"-04:00"}),", depending on the time of year.\nBecause this region observes daylight savings time, you'd be responsible for changing the offset.\nAlternatively, you could set ",(0,n.jsx)(d.code,{children:"time_zone"})," to ",(0,n.jsx)(d.code,{children:"America/New_York"}),", and time changes would occur automatically."]}),"\n",(0,n.jsxs)(d.p,{children:["If using IANA time zones, your database must include time zone tables. ",(0,n.jsx)(d.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html",children:"Learn more in the MySQL docs"}),"."]}),"\n",(0,n.jsx)(d.admonition,{title:"Materialize Timezone Configuration",type:"tip",children:(0,n.jsxs)(d.p,{children:["If you are unable to set the ",(0,n.jsx)(d.code,{children:"time_zone"})," in the database and need to materialize\ncollections with date-time or time fields, the materialization can be configured\nto assume a time zone using the ",(0,n.jsx)(d.code,{children:"timezone"})," configuration property (see above). The ",(0,n.jsx)(d.code,{children:"timezone"})," configuration property can be set as a numerical offset or IANA timezone format."]})}),"\n",(0,n.jsx)(d.h4,{id:"ssl-mode",children:"SSL Mode"}),"\n",(0,n.jsx)(d.p,{children:"Possible values:"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"disabled"}),": A plain unencrypted connection is established with the server"]}),"\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"preferred"}),": Only use SSL connection if the server asks for it"]}),"\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"required"}),": Connect using an SSL connection, but do not verify the server's\ncertificate."]}),"\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"verify_ca"}),": Connect using an SSL connection, and verify the server's\ncertificate against the given SSL Server CA, but does not verify the server's\nhostname. This option is most commonly used when connecting to an\nIP address which does not have a hostname to be verified. When using this mode, SSL Server\nCA must be provided."]}),"\n",(0,n.jsxs)(d.li,{children:[(0,n.jsx)(d.code,{children:"verify_identity"}),": Connect using an SSL connection, verify the server's\ncertificate and the server's hostname. This is the most secure option. When using this mode, SSL Server\nCA must be provided."]}),"\n"]}),"\n",(0,n.jsx)(d.p,{children:"Optionally, SSL Client Certificate and Key can be provided if necessary to\nauthorize the client."}),"\n",(0,n.jsx)(d.h4,{id:"bindings",children:"Bindings"}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Property"}),(0,n.jsx)(d.th,{children:"Title"}),(0,n.jsx)(d.th,{children:"Description"}),(0,n.jsx)(d.th,{children:"Type"}),(0,n.jsx)(d.th,{children:"Required/Default"})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.strong,{children:(0,n.jsx)(d.code,{children:"/table"})})}),(0,n.jsx)(d.td,{children:"Table"}),(0,n.jsx)(d.td,{children:"Table name to materialize to. It will be created by the connector, unless the connector has previously created it."}),(0,n.jsx)(d.td,{children:"string"}),(0,n.jsx)(d.td,{children:"Required"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"/delta_updates"})}),(0,n.jsx)(d.td,{children:"Delta Update"}),(0,n.jsx)(d.td,{children:"Should updates to this table be done via delta updates."}),(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:(0,n.jsx)(d.code,{children:"false"})})]})]})]}),"\n",(0,n.jsx)(d.h3,{id:"sample",children:"Sample"}),"\n",(0,n.jsx)(d.pre,{children:(0,n.jsx)(d.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-mysql:dev\n config:\n database: flow\n address: localhost:5432\n password: flow\n user: flow\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,n.jsx)(d.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,n.jsxs)(d.p,{children:["This connector supports both standard (merge) and ",(0,n.jsx)(d.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]}),"\n",(0,n.jsx)(d.h2,{id:"date--times",children:"Date & times"}),"\n",(0,n.jsxs)(d.p,{children:["Date and time fields that are part of collections, which specify a ",(0,n.jsx)(d.code,{children:"format: date-time"})," for the field, are automatically converted to UTC and\npersisted as UTC ",(0,n.jsx)(d.code,{children:"DATETIME"})," in MySQL."]}),"\n",(0,n.jsx)(d.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,n.jsxs)(d.p,{children:["MySQL has a list of reserved words that must be quoted in order to be used as an identifier.\nFlow considers all the reserved words in the official ",(0,n.jsx)(d.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/keywords.html",children:"MySQL documentation"}),"."]}),"\n",(0,n.jsx)(d.p,{children:"These reserved words are listed in the table below. Flow automatically quotes fields that are in this list."}),"\n",(0,n.jsxs)(d.table,{children:[(0,n.jsx)(d.thead,{children:(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.th,{children:"Reserved words"}),(0,n.jsx)(d.th,{}),(0,n.jsx)(d.th,{}),(0,n.jsx)(d.th,{}),(0,n.jsx)(d.th,{})]})}),(0,n.jsxs)(d.tbody,{children:[(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"accessible"}),(0,n.jsx)(d.td,{children:"clone"}),(0,n.jsx)(d.td,{children:"describe"}),(0,n.jsx)(d.td,{children:"float"}),(0,n.jsx)(d.td,{children:"int"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"account"}),(0,n.jsx)(d.td,{children:"close"}),(0,n.jsx)(d.td,{children:"description"}),(0,n.jsx)(d.td,{children:"float4"}),(0,n.jsx)(d.td,{children:"int1"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"action"}),(0,n.jsx)(d.td,{children:"coalesce"}),(0,n.jsx)(d.td,{children:"des_key_file"}),(0,n.jsx)(d.td,{children:"float8"}),(0,n.jsx)(d.td,{children:"int2"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"active"}),(0,n.jsx)(d.td,{children:"code"}),(0,n.jsx)(d.td,{children:"deterministic"}),(0,n.jsx)(d.td,{children:"flush"}),(0,n.jsx)(d.td,{children:"int3"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"add"}),(0,n.jsx)(d.td,{children:"collate"}),(0,n.jsx)(d.td,{children:"diagnostics"}),(0,n.jsx)(d.td,{children:"following"}),(0,n.jsx)(d.td,{children:"int4"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"admin"}),(0,n.jsx)(d.td,{children:"collation"}),(0,n.jsx)(d.td,{children:"directory"}),(0,n.jsx)(d.td,{children:"follows"}),(0,n.jsx)(d.td,{children:"int8"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"after"}),(0,n.jsx)(d.td,{children:"column"}),(0,n.jsx)(d.td,{children:"disable"}),(0,n.jsx)(d.td,{children:"for"}),(0,n.jsx)(d.td,{children:"integer"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"against"}),(0,n.jsx)(d.td,{children:"columns"}),(0,n.jsx)(d.td,{children:"discard"}),(0,n.jsx)(d.td,{children:"force"}),(0,n.jsx)(d.td,{children:"intersect"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"aggregate"}),(0,n.jsx)(d.td,{children:"column_format"}),(0,n.jsx)(d.td,{children:"disk"}),(0,n.jsx)(d.td,{children:"foreign"}),(0,n.jsx)(d.td,{children:"interval"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"algorithm"}),(0,n.jsx)(d.td,{children:"column_name"}),(0,n.jsx)(d.td,{children:"distinct"}),(0,n.jsx)(d.td,{children:"format"}),(0,n.jsx)(d.td,{children:"into"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"all"}),(0,n.jsx)(d.td,{children:"comment"}),(0,n.jsx)(d.td,{children:"distinctrow"}),(0,n.jsx)(d.td,{children:"found"}),(0,n.jsx)(d.td,{children:"invisible"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"alter"}),(0,n.jsx)(d.td,{children:"commit"}),(0,n.jsx)(d.td,{children:"div"}),(0,n.jsx)(d.td,{children:"from"}),(0,n.jsx)(d.td,{children:"invoker"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"always"}),(0,n.jsx)(d.td,{children:"committed"}),(0,n.jsx)(d.td,{children:"do"}),(0,n.jsx)(d.td,{children:"full"}),(0,n.jsx)(d.td,{children:"io"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"analyse"}),(0,n.jsx)(d.td,{children:"compact"}),(0,n.jsx)(d.td,{children:"double"}),(0,n.jsx)(d.td,{children:"fulltext"}),(0,n.jsx)(d.td,{children:"io_after_gtid"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"analyze"}),(0,n.jsx)(d.td,{children:"completion"}),(0,n.jsx)(d.td,{children:"drop"}),(0,n.jsx)(d.td,{children:"function"}),(0,n.jsx)(d.td,{children:"io_before_gti"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"and"}),(0,n.jsx)(d.td,{children:"component"}),(0,n.jsx)(d.td,{children:"dual"}),(0,n.jsx)(d.td,{children:"general"}),(0,n.jsx)(d.td,{children:"io_thread"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"any"}),(0,n.jsx)(d.td,{children:"compressed"}),(0,n.jsx)(d.td,{children:"dumpfile"}),(0,n.jsx)(d.td,{children:"generate"}),(0,n.jsx)(d.td,{children:"ipc"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"array"}),(0,n.jsx)(d.td,{children:"compression"}),(0,n.jsx)(d.td,{children:"duplicate"}),(0,n.jsx)(d.td,{children:"generated"}),(0,n.jsx)(d.td,{children:"is"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"as"}),(0,n.jsx)(d.td,{children:"concurrent"}),(0,n.jsx)(d.td,{children:"dynamic"}),(0,n.jsx)(d.td,{children:"geomcollectio"}),(0,n.jsx)(d.td,{children:"isolation"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"asc"}),(0,n.jsx)(d.td,{children:"condition"}),(0,n.jsx)(d.td,{children:"each"}),(0,n.jsx)(d.td,{children:"geometry"}),(0,n.jsx)(d.td,{children:"issuer"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"ascii"}),(0,n.jsx)(d.td,{children:"connection"}),(0,n.jsx)(d.td,{children:"else"}),(0,n.jsx)(d.td,{children:"geometrycolle"}),(0,n.jsx)(d.td,{children:"iterate"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"asensitive"}),(0,n.jsx)(d.td,{children:"consistent"}),(0,n.jsx)(d.td,{children:"elseif"}),(0,n.jsx)(d.td,{children:"get"}),(0,n.jsx)(d.td,{children:"join"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"at"}),(0,n.jsx)(d.td,{children:"constraint"}),(0,n.jsx)(d.td,{children:"empty"}),(0,n.jsx)(d.td,{children:"get_format"}),(0,n.jsx)(d.td,{children:"json"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"attribute"}),(0,n.jsx)(d.td,{children:"constraint_ca"}),(0,n.jsx)(d.td,{children:"enable"}),(0,n.jsx)(d.td,{children:"get_master_pu"}),(0,n.jsx)(d.td,{children:"json_table"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"authenticatio"}),(0,n.jsx)(d.td,{children:"constraint_na"}),(0,n.jsx)(d.td,{children:"enclosed"}),(0,n.jsx)(d.td,{children:"get_source_pu"}),(0,n.jsx)(d.td,{children:"json_value"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"autoextend_si"}),(0,n.jsx)(d.td,{children:"constraint_sc"}),(0,n.jsx)(d.td,{children:"encryption"}),(0,n.jsx)(d.td,{children:"global"}),(0,n.jsx)(d.td,{children:"key"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"auto_incremen"}),(0,n.jsx)(d.td,{children:"contains"}),(0,n.jsx)(d.td,{children:"end"}),(0,n.jsx)(d.td,{children:"grant"}),(0,n.jsx)(d.td,{children:"keyring"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"avg"}),(0,n.jsx)(d.td,{children:"context"}),(0,n.jsx)(d.td,{children:"ends"}),(0,n.jsx)(d.td,{children:"grants"}),(0,n.jsx)(d.td,{children:"keys"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"avg_row_lengt"}),(0,n.jsx)(d.td,{children:"continue"}),(0,n.jsx)(d.td,{children:"enforced"}),(0,n.jsx)(d.td,{children:"group"}),(0,n.jsx)(d.td,{children:"key_block_siz"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"backup"}),(0,n.jsx)(d.td,{children:"convert"}),(0,n.jsx)(d.td,{children:"engine"}),(0,n.jsx)(d.td,{children:"grouping"}),(0,n.jsx)(d.td,{children:"kill"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"before"}),(0,n.jsx)(d.td,{children:"cpu"}),(0,n.jsx)(d.td,{children:"engines"}),(0,n.jsx)(d.td,{children:"groups"}),(0,n.jsx)(d.td,{children:"lag"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"begin"}),(0,n.jsx)(d.td,{children:"create"}),(0,n.jsx)(d.td,{children:"engine_attrib"}),(0,n.jsx)(d.td,{children:"group_replica"}),(0,n.jsx)(d.td,{children:"language"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"between"}),(0,n.jsx)(d.td,{children:"cross"}),(0,n.jsx)(d.td,{children:"enum"}),(0,n.jsx)(d.td,{children:"gtid_only"}),(0,n.jsx)(d.td,{children:"last"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"bigint"}),(0,n.jsx)(d.td,{children:"cube"}),(0,n.jsx)(d.td,{children:"error"}),(0,n.jsx)(d.td,{children:"handler"}),(0,n.jsx)(d.td,{children:"last_value"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"binary"}),(0,n.jsx)(d.td,{children:"cume_dist"}),(0,n.jsx)(d.td,{children:"errors"}),(0,n.jsx)(d.td,{children:"hash"}),(0,n.jsx)(d.td,{children:"lateral"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"binlog"}),(0,n.jsx)(d.td,{children:"current"}),(0,n.jsx)(d.td,{children:"escape"}),(0,n.jsx)(d.td,{children:"having"}),(0,n.jsx)(d.td,{children:"lead"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"bit"}),(0,n.jsx)(d.td,{children:"current_date"}),(0,n.jsx)(d.td,{children:"escaped"}),(0,n.jsx)(d.td,{children:"help"}),(0,n.jsx)(d.td,{children:"leading"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"blob"}),(0,n.jsx)(d.td,{children:"current_time"}),(0,n.jsx)(d.td,{children:"event"}),(0,n.jsx)(d.td,{children:"high_priority"}),(0,n.jsx)(d.td,{children:"leave"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"block"}),(0,n.jsx)(d.td,{children:"current_times"}),(0,n.jsx)(d.td,{children:"events"}),(0,n.jsx)(d.td,{children:"histogram"}),(0,n.jsx)(d.td,{children:"leaves"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"bool"}),(0,n.jsx)(d.td,{children:"current_user"}),(0,n.jsx)(d.td,{children:"every"}),(0,n.jsx)(d.td,{children:"history"}),(0,n.jsx)(d.td,{children:"left"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"boolean"}),(0,n.jsx)(d.td,{children:"cursor"}),(0,n.jsx)(d.td,{children:"except"}),(0,n.jsx)(d.td,{children:"host"}),(0,n.jsx)(d.td,{children:"less"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"both"}),(0,n.jsx)(d.td,{children:"cursor_name"}),(0,n.jsx)(d.td,{children:"exchange"}),(0,n.jsx)(d.td,{children:"hosts"}),(0,n.jsx)(d.td,{children:"level"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"btree"}),(0,n.jsx)(d.td,{children:"data"}),(0,n.jsx)(d.td,{children:"exclude"}),(0,n.jsx)(d.td,{children:"hour"}),(0,n.jsx)(d.td,{children:"like"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"buckets"}),(0,n.jsx)(d.td,{children:"database"}),(0,n.jsx)(d.td,{children:"execute"}),(0,n.jsx)(d.td,{children:"hour_microsec"}),(0,n.jsx)(d.td,{children:"limit"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"bulk"}),(0,n.jsx)(d.td,{children:"databases"}),(0,n.jsx)(d.td,{children:"exists"}),(0,n.jsx)(d.td,{children:"hour_minute"}),(0,n.jsx)(d.td,{children:"linear"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"by"}),(0,n.jsx)(d.td,{children:"datafile"}),(0,n.jsx)(d.td,{children:"exit"}),(0,n.jsx)(d.td,{children:"hour_second"}),(0,n.jsx)(d.td,{children:"lines"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"byte"}),(0,n.jsx)(d.td,{children:"date"}),(0,n.jsx)(d.td,{children:"expansion"}),(0,n.jsx)(d.td,{children:"identified"}),(0,n.jsx)(d.td,{children:"linestring"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"cache"}),(0,n.jsx)(d.td,{children:"datetime"}),(0,n.jsx)(d.td,{children:"expire"}),(0,n.jsx)(d.td,{children:"if"}),(0,n.jsx)(d.td,{children:"list"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"call"}),(0,n.jsx)(d.td,{children:"day"}),(0,n.jsx)(d.td,{children:"explain"}),(0,n.jsx)(d.td,{children:"ignore"}),(0,n.jsx)(d.td,{children:"load"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"cascade"}),(0,n.jsx)(d.td,{children:"day_hour"}),(0,n.jsx)(d.td,{children:"export"}),(0,n.jsx)(d.td,{children:"ignore_server"}),(0,n.jsx)(d.td,{children:"local"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"cascaded"}),(0,n.jsx)(d.td,{children:"day_microseco"}),(0,n.jsx)(d.td,{children:"extended"}),(0,n.jsx)(d.td,{children:"import"}),(0,n.jsx)(d.td,{children:"localtime"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"case"}),(0,n.jsx)(d.td,{children:"day_minute"}),(0,n.jsx)(d.td,{children:"extent_size"}),(0,n.jsx)(d.td,{children:"in"}),(0,n.jsx)(d.td,{children:"localtimestam"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"catalog_name"}),(0,n.jsx)(d.td,{children:"day_second"}),(0,n.jsx)(d.td,{children:"factor"}),(0,n.jsx)(d.td,{children:"inactive"}),(0,n.jsx)(d.td,{children:"lock"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"chain"}),(0,n.jsx)(d.td,{children:"deallocate"}),(0,n.jsxs)(d.td,{children:["failed",(0,n.jsx)(d.em,{children:"login"})]}),(0,n.jsx)(d.td,{children:"index"}),(0,n.jsx)(d.td,{children:"locked"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"challenge_res"}),(0,n.jsx)(d.td,{children:"dec"}),(0,n.jsx)(d.td,{children:"false"}),(0,n.jsx)(d.td,{children:"indexes"}),(0,n.jsx)(d.td,{children:"locks"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"change"}),(0,n.jsx)(d.td,{children:"decimal"}),(0,n.jsx)(d.td,{children:"fast"}),(0,n.jsx)(d.td,{children:"infile"}),(0,n.jsx)(d.td,{children:"logfile"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"changed"}),(0,n.jsx)(d.td,{children:"declare"}),(0,n.jsx)(d.td,{children:"faults"}),(0,n.jsx)(d.td,{children:"initial"}),(0,n.jsx)(d.td,{children:"logs"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"channel"}),(0,n.jsx)(d.td,{children:"default"}),(0,n.jsx)(d.td,{children:"fetch"}),(0,n.jsx)(d.td,{children:"initial_size"}),(0,n.jsx)(d.td,{children:"long"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"char"}),(0,n.jsx)(d.td,{children:"default_auth"}),(0,n.jsx)(d.td,{children:"fields"}),(0,n.jsx)(d.td,{children:"initiate"}),(0,n.jsx)(d.td,{children:"longblob"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"character"}),(0,n.jsx)(d.td,{children:"definer"}),(0,n.jsx)(d.td,{children:"file"}),(0,n.jsx)(d.td,{children:"inner"}),(0,n.jsx)(d.td,{children:"longtext"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"charset"}),(0,n.jsx)(d.td,{children:"definition"}),(0,n.jsx)(d.td,{children:"file_block_si"}),(0,n.jsx)(d.td,{children:"inout"}),(0,n.jsx)(d.td,{children:"loop"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"check"}),(0,n.jsx)(d.td,{children:"delayed"}),(0,n.jsx)(d.td,{children:"filter"}),(0,n.jsx)(d.td,{children:"insensitive"}),(0,n.jsx)(d.td,{children:"low_priority"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"checksum"}),(0,n.jsx)(d.td,{children:"delay_key_wri"}),(0,n.jsx)(d.td,{children:"finish"}),(0,n.jsx)(d.td,{children:"insert"}),(0,n.jsx)(d.td,{children:"master"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"cipher"}),(0,n.jsx)(d.td,{children:"delete"}),(0,n.jsx)(d.td,{children:"first"}),(0,n.jsx)(d.td,{children:"insert_method"}),(0,n.jsx)(d.td,{children:"master_auto_p"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"class_origin"}),(0,n.jsx)(d.td,{children:"dense_rank"}),(0,n.jsx)(d.td,{children:"first_value"}),(0,n.jsx)(d.td,{children:"install"}),(0,n.jsx)(d.td,{children:"master_bind"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"client"}),(0,n.jsx)(d.td,{children:"desc"}),(0,n.jsx)(d.td,{children:"fixed"}),(0,n.jsx)(d.td,{children:"instance"}),(0,n.jsx)(d.td,{children:"master_compre"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_connec"}),(0,n.jsx)(d.td,{children:"never"}),(0,n.jsx)(d.td,{children:"preserve"}),(0,n.jsx)(d.td,{children:"restrict"}),(0,n.jsx)(d.td,{children:"source_host"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_delay"}),(0,n.jsx)(d.td,{children:"new"}),(0,n.jsx)(d.td,{children:"prev"}),(0,n.jsx)(d.td,{children:"resume"}),(0,n.jsx)(d.td,{children:"source_log_fi"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_heartb"}),(0,n.jsx)(d.td,{children:"next"}),(0,n.jsx)(d.td,{children:"primary"}),(0,n.jsx)(d.td,{children:"retain"}),(0,n.jsx)(d.td,{children:"source_log_po"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_host"}),(0,n.jsx)(d.td,{children:"no"}),(0,n.jsx)(d.td,{children:"privileges"}),(0,n.jsx)(d.td,{children:"return"}),(0,n.jsx)(d.td,{children:"source_passwo"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_log_fi"}),(0,n.jsx)(d.td,{children:"nodegroup"}),(0,n.jsx)(d.td,{children:"privilege_che"}),(0,n.jsx)(d.td,{children:"returned_sqls"}),(0,n.jsx)(d.td,{children:"source_port"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_log_po"}),(0,n.jsx)(d.td,{children:"none"}),(0,n.jsx)(d.td,{children:"procedure"}),(0,n.jsx)(d.td,{children:"returning"}),(0,n.jsx)(d.td,{children:"source_public"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_passwo"}),(0,n.jsx)(d.td,{children:"not"}),(0,n.jsx)(d.td,{children:"process"}),(0,n.jsx)(d.td,{children:"returns"}),(0,n.jsxs)(d.td,{children:["source",(0,n.jsx)(d.em,{children:"retry"})]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_port"}),(0,n.jsx)(d.td,{children:"nowait"}),(0,n.jsx)(d.td,{children:"processlist"}),(0,n.jsx)(d.td,{children:"reuse"}),(0,n.jsx)(d.td,{children:"source_ssl"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_public"}),(0,n.jsx)(d.td,{children:"no_wait"}),(0,n.jsx)(d.td,{children:"profile"}),(0,n.jsx)(d.td,{children:"reverse"}),(0,n.jsx)(d.td,{children:"source_ssl_ca"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsxs)(d.td,{children:["master",(0,n.jsx)(d.em,{children:"retry"})]}),(0,n.jsx)(d.td,{children:"no_write_to_b"}),(0,n.jsx)(d.td,{children:"profiles"}),(0,n.jsx)(d.td,{children:"revoke"}),(0,n.jsx)(d.td,{children:"source_ssl_ca"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_server"}),(0,n.jsx)(d.td,{children:"nth_value"}),(0,n.jsx)(d.td,{children:"proxy"}),(0,n.jsx)(d.td,{children:"right"}),(0,n.jsx)(d.td,{children:"source_ssl_ce"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl"}),(0,n.jsx)(d.td,{children:"ntile"}),(0,n.jsx)(d.td,{children:"purge"}),(0,n.jsx)(d.td,{children:"rlike"}),(0,n.jsx)(d.td,{children:"source_ssl_ci"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_ca"}),(0,n.jsx)(d.td,{children:"null"}),(0,n.jsx)(d.td,{children:"quarter"}),(0,n.jsx)(d.td,{children:"role"}),(0,n.jsx)(d.td,{children:"source_ssl_cr"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_ca"}),(0,n.jsx)(d.td,{children:"nulls"}),(0,n.jsx)(d.td,{children:"query"}),(0,n.jsx)(d.td,{children:"rollback"}),(0,n.jsx)(d.td,{children:"source_ssl_cr"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_ce"}),(0,n.jsx)(d.td,{children:"number"}),(0,n.jsx)(d.td,{children:"quick"}),(0,n.jsx)(d.td,{children:"rollup"}),(0,n.jsx)(d.td,{children:"source_ssl_ke"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_ci"}),(0,n.jsx)(d.td,{children:"numeric"}),(0,n.jsx)(d.td,{children:"random"}),(0,n.jsx)(d.td,{children:"rotate"}),(0,n.jsx)(d.td,{children:"source_ssl_ve"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_cr"}),(0,n.jsx)(d.td,{children:"nvarchar"}),(0,n.jsx)(d.td,{children:"range"}),(0,n.jsx)(d.td,{children:"routine"}),(0,n.jsx)(d.td,{children:"source_tls_ci"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_cr"}),(0,n.jsx)(d.td,{children:"of"}),(0,n.jsx)(d.td,{children:"rank"}),(0,n.jsx)(d.td,{children:"row"}),(0,n.jsx)(d.td,{children:"source_tls_ve"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_ke"}),(0,n.jsx)(d.td,{children:"off"}),(0,n.jsx)(d.td,{children:"read"}),(0,n.jsx)(d.td,{children:"rows"}),(0,n.jsx)(d.td,{children:"source_user"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_ssl_ve"}),(0,n.jsx)(d.td,{children:"offset"}),(0,n.jsx)(d.td,{children:"reads"}),(0,n.jsx)(d.td,{children:"row_count"}),(0,n.jsx)(d.td,{children:"source_zstd_c"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_tls_ci"}),(0,n.jsx)(d.td,{children:"oj"}),(0,n.jsx)(d.td,{children:"read_only"}),(0,n.jsx)(d.td,{children:"row_format"}),(0,n.jsx)(d.td,{children:"spatial"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_tls_ve"}),(0,n.jsx)(d.td,{children:"old"}),(0,n.jsx)(d.td,{children:"read_write"}),(0,n.jsx)(d.td,{children:"row_number"}),(0,n.jsx)(d.td,{children:"specific"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_user"}),(0,n.jsx)(d.td,{children:"on"}),(0,n.jsx)(d.td,{children:"real"}),(0,n.jsx)(d.td,{children:"rtree"}),(0,n.jsx)(d.td,{children:"sql"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"master_zstd_c"}),(0,n.jsx)(d.td,{children:"one"}),(0,n.jsx)(d.td,{children:"rebuild"}),(0,n.jsx)(d.td,{children:"savepoint"}),(0,n.jsx)(d.td,{children:"sqlexception"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"match"}),(0,n.jsx)(d.td,{children:"only"}),(0,n.jsx)(d.td,{children:"recover"}),(0,n.jsx)(d.td,{children:"schedule"}),(0,n.jsx)(d.td,{children:"sqlstate"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"maxvalue"}),(0,n.jsx)(d.td,{children:"open"}),(0,n.jsx)(d.td,{children:"recursive"}),(0,n.jsx)(d.td,{children:"schema"}),(0,n.jsx)(d.td,{children:"sqlwarning"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"max_connectio"}),(0,n.jsx)(d.td,{children:"optimize"}),(0,n.jsx)(d.td,{children:"redofile"}),(0,n.jsx)(d.td,{children:"schemas"}),(0,n.jsx)(d.td,{children:"sql_after_gti"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"max_queries_p"}),(0,n.jsx)(d.td,{children:"optimizer_cos"}),(0,n.jsx)(d.td,{children:"redo_buffer_s"}),(0,n.jsx)(d.td,{children:"schema_name"}),(0,n.jsx)(d.td,{children:"sql_after_mts"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"max_rows"}),(0,n.jsx)(d.td,{children:"option"}),(0,n.jsx)(d.td,{children:"redundant"}),(0,n.jsx)(d.td,{children:"second"}),(0,n.jsx)(d.td,{children:"sql_before_gt"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"max_size"}),(0,n.jsx)(d.td,{children:"optional"}),(0,n.jsx)(d.td,{children:"reference"}),(0,n.jsx)(d.td,{children:"secondary"}),(0,n.jsx)(d.td,{children:"sql_big_resul"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"max_updates_p"}),(0,n.jsx)(d.td,{children:"optionally"}),(0,n.jsx)(d.td,{children:"references"}),(0,n.jsx)(d.td,{children:"secondary_eng"}),(0,n.jsx)(d.td,{children:"sql_buffer_re"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"max_user_conn"}),(0,n.jsx)(d.td,{children:"options"}),(0,n.jsx)(d.td,{children:"regexp"}),(0,n.jsx)(d.td,{children:"secondary_eng"}),(0,n.jsx)(d.td,{children:"sql_cache"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"medium"}),(0,n.jsx)(d.td,{children:"or"}),(0,n.jsx)(d.td,{children:"registration"}),(0,n.jsx)(d.td,{children:"secondary_loa"}),(0,n.jsx)(d.td,{children:"sql_calc_foun"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mediumblob"}),(0,n.jsx)(d.td,{children:"order"}),(0,n.jsx)(d.td,{children:"relay"}),(0,n.jsx)(d.td,{children:"secondary_unl"}),(0,n.jsx)(d.td,{children:"sql_no_cache"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mediumint"}),(0,n.jsx)(d.td,{children:"ordinality"}),(0,n.jsx)(d.td,{children:"relaylog"}),(0,n.jsx)(d.td,{children:"second_micros"}),(0,n.jsx)(d.td,{children:"sql_small_res"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mediumtext"}),(0,n.jsx)(d.td,{children:"organization"}),(0,n.jsx)(d.td,{children:"relay_log_fil"}),(0,n.jsx)(d.td,{children:"security"}),(0,n.jsx)(d.td,{children:"sql_thread"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"member"}),(0,n.jsx)(d.td,{children:"others"}),(0,n.jsx)(d.td,{children:"relay_log_pos"}),(0,n.jsx)(d.td,{children:"select"}),(0,n.jsx)(d.td,{children:"sql_tsi_day"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"memory"}),(0,n.jsx)(d.td,{children:"out"}),(0,n.jsx)(d.td,{children:"relay_thread"}),(0,n.jsx)(d.td,{children:"sensitive"}),(0,n.jsx)(d.td,{children:"sql_tsi_hour"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"merge"}),(0,n.jsx)(d.td,{children:"outer"}),(0,n.jsx)(d.td,{children:"release"}),(0,n.jsx)(d.td,{children:"separator"}),(0,n.jsx)(d.td,{children:"sql_tsi_minut"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"message_text"}),(0,n.jsx)(d.td,{children:"outfile"}),(0,n.jsx)(d.td,{children:"reload"}),(0,n.jsx)(d.td,{children:"serial"}),(0,n.jsx)(d.td,{children:"sql_tsi_month"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"microsecond"}),(0,n.jsx)(d.td,{children:"over"}),(0,n.jsx)(d.td,{children:"remote"}),(0,n.jsx)(d.td,{children:"serializable"}),(0,n.jsx)(d.td,{children:"sql_tsi_quart"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"middleint"}),(0,n.jsx)(d.td,{children:"owner"}),(0,n.jsx)(d.td,{children:"remove"}),(0,n.jsx)(d.td,{children:"server"}),(0,n.jsx)(d.td,{children:"sql_tsi_secon"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"migrate"}),(0,n.jsx)(d.td,{children:"pack_keys"}),(0,n.jsx)(d.td,{children:"rename"}),(0,n.jsx)(d.td,{children:"session"}),(0,n.jsx)(d.td,{children:"sql_tsi_week"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"minute"}),(0,n.jsx)(d.td,{children:"page"}),(0,n.jsx)(d.td,{children:"reorganize"}),(0,n.jsx)(d.td,{children:"set"}),(0,n.jsx)(d.td,{children:"sql_tsi_year"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"minute_micros"}),(0,n.jsx)(d.td,{children:"parser"}),(0,n.jsx)(d.td,{children:"repair"}),(0,n.jsx)(d.td,{children:"share"}),(0,n.jsx)(d.td,{children:"srid"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"minute_second"}),(0,n.jsx)(d.td,{children:"partial"}),(0,n.jsx)(d.td,{children:"repeat"}),(0,n.jsx)(d.td,{children:"show"}),(0,n.jsx)(d.td,{children:"ssl"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"min_rows"}),(0,n.jsx)(d.td,{children:"partition"}),(0,n.jsx)(d.td,{children:"repeatable"}),(0,n.jsx)(d.td,{children:"shutdown"}),(0,n.jsx)(d.td,{children:"stacked"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mod"}),(0,n.jsx)(d.td,{children:"partitioning"}),(0,n.jsx)(d.td,{children:"replace"}),(0,n.jsx)(d.td,{children:"signal"}),(0,n.jsx)(d.td,{children:"start"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mode"}),(0,n.jsx)(d.td,{children:"partitions"}),(0,n.jsx)(d.td,{children:"replica"}),(0,n.jsx)(d.td,{children:"signed"}),(0,n.jsx)(d.td,{children:"starting"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"modifies"}),(0,n.jsx)(d.td,{children:"password"}),(0,n.jsx)(d.td,{children:"replicas"}),(0,n.jsx)(d.td,{children:"simple"}),(0,n.jsx)(d.td,{children:"starts"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"modify"}),(0,n.jsx)(d.td,{children:"password_lock"}),(0,n.jsxs)(d.td,{children:["replicate",(0,n.jsx)(d.em,{children:"do"})]}),(0,n.jsx)(d.td,{children:"skip"}),(0,n.jsx)(d.td,{children:"stats_auto_re"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"month"}),(0,n.jsx)(d.td,{children:"path"}),(0,n.jsxs)(d.td,{children:["replicate",(0,n.jsx)(d.em,{children:"do"})]}),(0,n.jsx)(d.td,{children:"slave"}),(0,n.jsx)(d.td,{children:"stats_persist"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"multilinestri"}),(0,n.jsx)(d.td,{children:"percent_rank"}),(0,n.jsx)(d.td,{children:"replicate_ign"}),(0,n.jsx)(d.td,{children:"slow"}),(0,n.jsxs)(d.td,{children:["stats",(0,n.jsx)(d.em,{children:"sample"})]})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"multipoint"}),(0,n.jsx)(d.td,{children:"persist"}),(0,n.jsx)(d.td,{children:"replicate_ign"}),(0,n.jsx)(d.td,{children:"smallint"}),(0,n.jsx)(d.td,{children:"status"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"multipolygon"}),(0,n.jsx)(d.td,{children:"persist_only"}),(0,n.jsx)(d.td,{children:"replicate_rew"}),(0,n.jsx)(d.td,{children:"snapshot"}),(0,n.jsx)(d.td,{children:"stop"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mutex"}),(0,n.jsx)(d.td,{children:"phase"}),(0,n.jsx)(d.td,{children:"replicate_wil"}),(0,n.jsx)(d.td,{children:"socket"}),(0,n.jsx)(d.td,{children:"storage"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"mysql_errno"}),(0,n.jsx)(d.td,{children:"plugin"}),(0,n.jsx)(d.td,{children:"replicate_wil"}),(0,n.jsx)(d.td,{children:"some"}),(0,n.jsx)(d.td,{children:"stored"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"name"}),(0,n.jsx)(d.td,{children:"plugins"}),(0,n.jsx)(d.td,{children:"replication"}),(0,n.jsx)(d.td,{children:"soname"}),(0,n.jsx)(d.td,{children:"straight_join"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"names"}),(0,n.jsx)(d.td,{children:"plugin_dir"}),(0,n.jsx)(d.td,{children:"require"}),(0,n.jsx)(d.td,{children:"sounds"}),(0,n.jsx)(d.td,{children:"stream"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"national"}),(0,n.jsx)(d.td,{children:"point"}),(0,n.jsx)(d.td,{children:"require_row_f"}),(0,n.jsx)(d.td,{children:"source"}),(0,n.jsx)(d.td,{children:"string"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"natural"}),(0,n.jsx)(d.td,{children:"polygon"}),(0,n.jsx)(d.td,{children:"reset"}),(0,n.jsx)(d.td,{children:"source_auto_p"}),(0,n.jsx)(d.td,{children:"subclass_orig"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"nchar"}),(0,n.jsx)(d.td,{children:"port"}),(0,n.jsx)(d.td,{children:"resignal"}),(0,n.jsx)(d.td,{children:"source_bind"}),(0,n.jsx)(d.td,{children:"subject"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"ndb"}),(0,n.jsx)(d.td,{children:"precedes"}),(0,n.jsx)(d.td,{children:"resource"}),(0,n.jsx)(d.td,{children:"source_compre"}),(0,n.jsx)(d.td,{children:"subpartition"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"ndbcluster"}),(0,n.jsx)(d.td,{children:"preceding"}),(0,n.jsx)(d.td,{children:"respect"}),(0,n.jsx)(d.td,{children:"source_connec"}),(0,n.jsx)(d.td,{children:"subpartitions"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"nested"}),(0,n.jsx)(d.td,{children:"precision"}),(0,n.jsx)(d.td,{children:"restart"}),(0,n.jsx)(d.td,{children:"source_delay"}),(0,n.jsx)(d.td,{children:"super"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"network_names"}),(0,n.jsx)(d.td,{children:"prepare"}),(0,n.jsx)(d.td,{children:"restore"}),(0,n.jsx)(d.td,{children:"source_heartb"}),(0,n.jsx)(d.td,{children:"suspend"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"swaps"}),(0,n.jsx)(d.td,{children:"timestampdiff"}),(0,n.jsx)(d.td,{children:"undo_buffer_s"}),(0,n.jsx)(d.td,{children:"utc_date"}),(0,n.jsx)(d.td,{children:"when"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"switches"}),(0,n.jsx)(d.td,{children:"tinyblob"}),(0,n.jsx)(d.td,{children:"unicode"}),(0,n.jsx)(d.td,{children:"utc_time"}),(0,n.jsx)(d.td,{children:"where"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"system"}),(0,n.jsx)(d.td,{children:"tinyint"}),(0,n.jsx)(d.td,{children:"uninstall"}),(0,n.jsx)(d.td,{children:"utc_timestamp"}),(0,n.jsx)(d.td,{children:"while"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"table"}),(0,n.jsx)(d.td,{children:"tinytext"}),(0,n.jsx)(d.td,{children:"union"}),(0,n.jsx)(d.td,{children:"validation"}),(0,n.jsx)(d.td,{children:"window"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"tables"}),(0,n.jsx)(d.td,{children:"tls"}),(0,n.jsx)(d.td,{children:"unique"}),(0,n.jsx)(d.td,{children:"value"}),(0,n.jsx)(d.td,{children:"with"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"tablespace"}),(0,n.jsx)(d.td,{children:"to"}),(0,n.jsx)(d.td,{children:"unknown"}),(0,n.jsx)(d.td,{children:"values"}),(0,n.jsx)(d.td,{children:"without"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"table_checksu"}),(0,n.jsx)(d.td,{children:"trailing"}),(0,n.jsx)(d.td,{children:"unlock"}),(0,n.jsx)(d.td,{children:"varbinary"}),(0,n.jsx)(d.td,{children:"work"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"table_name"}),(0,n.jsx)(d.td,{children:"transaction"}),(0,n.jsx)(d.td,{children:"unregister"}),(0,n.jsx)(d.td,{children:"varchar"}),(0,n.jsx)(d.td,{children:"wrapper"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"temporary"}),(0,n.jsx)(d.td,{children:"trigger"}),(0,n.jsx)(d.td,{children:"unsigned"}),(0,n.jsx)(d.td,{children:"varcharacter"}),(0,n.jsx)(d.td,{children:"write"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"temptable"}),(0,n.jsx)(d.td,{children:"triggers"}),(0,n.jsx)(d.td,{children:"until"}),(0,n.jsx)(d.td,{children:"variables"}),(0,n.jsx)(d.td,{children:"x509"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"terminated"}),(0,n.jsx)(d.td,{children:"true"}),(0,n.jsx)(d.td,{children:"update"}),(0,n.jsx)(d.td,{children:"varying"}),(0,n.jsx)(d.td,{children:"xa"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"text"}),(0,n.jsx)(d.td,{children:"truncate"}),(0,n.jsx)(d.td,{children:"upgrade"}),(0,n.jsx)(d.td,{children:"vcpu"}),(0,n.jsx)(d.td,{children:"xid"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"than"}),(0,n.jsx)(d.td,{children:"type"}),(0,n.jsx)(d.td,{children:"url"}),(0,n.jsx)(d.td,{children:"view"}),(0,n.jsx)(d.td,{children:"xml"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"then"}),(0,n.jsx)(d.td,{children:"types"}),(0,n.jsx)(d.td,{children:"usage"}),(0,n.jsx)(d.td,{children:"virtual"}),(0,n.jsx)(d.td,{children:"xor"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"thread_priori"}),(0,n.jsx)(d.td,{children:"unbounded"}),(0,n.jsx)(d.td,{children:"use"}),(0,n.jsx)(d.td,{children:"visible"}),(0,n.jsx)(d.td,{children:"year"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"ties"}),(0,n.jsx)(d.td,{children:"uncommitted"}),(0,n.jsx)(d.td,{children:"user"}),(0,n.jsx)(d.td,{children:"wait"}),(0,n.jsx)(d.td,{children:"year_month"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"time"}),(0,n.jsx)(d.td,{children:"undefined"}),(0,n.jsx)(d.td,{children:"user_resource"}),(0,n.jsx)(d.td,{children:"warnings"}),(0,n.jsx)(d.td,{children:"zerofill"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"timestamp"}),(0,n.jsx)(d.td,{children:"undo"}),(0,n.jsx)(d.td,{children:"use_frm"}),(0,n.jsx)(d.td,{children:"week"}),(0,n.jsx)(d.td,{children:"zone"})]}),(0,n.jsxs)(d.tr,{children:[(0,n.jsx)(d.td,{children:"timestampadd"}),(0,n.jsx)(d.td,{children:"undofile"}),(0,n.jsx)(d.td,{children:"using"}),(0,n.jsx)(d.td,{children:"weight_string"}),(0,n.jsx)(d.td,{})]})]})]}),"\n",(0,n.jsx)(d.h2,{id:"changelog",children:"Changelog"}),"\n",(0,n.jsx)(d.p,{children:"The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed."}),"\n",(0,n.jsx)(d.p,{children:(0,n.jsx)(d.strong,{children:"Proceed with caution when editing materializations created with previous versions of this connector;\nediting always upgrades your materialization to the latest connector version."})}),"\n",(0,n.jsx)(d.h4,{id:"v1-2023-08-21",children:"V1: 2023-08-21"}),"\n",(0,n.jsxs)(d.ul,{children:["\n",(0,n.jsx)(d.li,{children:"First version"}),"\n"]})]})}function o(e={}){const{wrapper:d}={...(0,r.R)(),...e.components};return d?(0,n.jsx)(d,{...e,children:(0,n.jsx)(x,{...e})}):x(e)}},28453:(e,d,s)=>{s.d(d,{R:()=>i,x:()=>l});var n=s(96540);const r={},t=n.createContext(r);function i(e){const d=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function l(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(t.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4dbcc71c.aeeb3f61.js b/pr-preview/pr-1594/assets/js/4dbcc71c.aeeb3f61.js deleted file mode 100644 index 761c991eda..0000000000 --- a/pr-preview/pr-1594/assets/js/4dbcc71c.aeeb3f61.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3060],{24778:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var o=n(74848),r=n(28453);const s={},c="MySQL Batch Query Connector",i={id:"reference/Connectors/capture-connectors/MySQL/mysql-batch",title:"MySQL Batch Query Connector",description:"This connector captures data from MySQL into Flow collections by periodically",source:"@site/docs/reference/Connectors/capture-connectors/MySQL/mysql-batch.md",sourceDirName:"reference/Connectors/capture-connectors/MySQL",slug:"/reference/Connectors/capture-connectors/MySQL/mysql-batch",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/MySQL/mysql-batch.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Cloud SQL for MySQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql"},next:{title:"NetSuite SuiteAnalytics Connect",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics"}},a={},l=[];function d(e){const t={a:"a",code:"code",h1:"h1",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"mysql-batch-query-connector",children:"MySQL Batch Query Connector"}),"\n",(0,o.jsx)(t.p,{children:"This connector captures data from MySQL into Flow collections by periodically\nexecuting queries and translating the results into JSON documents."}),"\n",(0,o.jsxs)(t.p,{children:["We recommend using our ",(0,o.jsx)(t.a,{href:"http://go.estuary.dev/source-mysql",children:"MySQL CDC Connector"}),"\ninstead where possible. Using CDC provides lower latency data capture, delete and\nupdate events, and usually has a smaller impact on the source database."]}),"\n",(0,o.jsx)(t.p,{children:"However there are some circumstances where this might not be feasible. Perhaps you need\nto capture from a managed MySQL instance which doesn't support logical replication. Or\nperhaps you need to capture the contents of a view or the result of an ad-hoc query.\nThat's the sort of situation this connector is intended for."}),"\n",(0,o.jsxs)(t.p,{children:["The number one caveat you need to be aware of when using this connector is that ",(0,o.jsx)(t.strong,{children:"it will\nperiodically execute its update query over and over"}),". The default polling interval is set\nto 24 hours to minimize the impact of this behavior, but even then it could mean a lot of\nduplicated data being processed depending on the size of your tables."]}),"\n",(0,o.jsxs)(t.p,{children:["If the dataset has a natural cursor which could be used to identify only new or updated\nrows, this should be specified by editing the ",(0,o.jsx)(t.code,{children:"Cursor"})," property of the binding. Common\nexamples of suitable cursors include:"]}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"Update timestamps, which are usually the best choice if available since they\ncan be used to identify all changed rows, not just updates."}),"\n",(0,o.jsx)(t.li,{children:"Creation timestamps, which can be used to identify newly added rows in append-only\ndatasets but can't be used to identify updates."}),"\n",(0,o.jsx)(t.li,{children:"Serially increasing IDs can also be used to identify newly added rows."}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>i});var o=n(96540);const r={},s=o.createContext(r);function c(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4e1df6a3.b2cf9f16.js b/pr-preview/pr-1594/assets/js/4e1df6a3.b2cf9f16.js deleted file mode 100644 index f72265197f..0000000000 --- a/pr-preview/pr-1594/assets/js/4e1df6a3.b2cf9f16.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8113],{36686:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>d});var o=i(74848),t=i(28453),l=i(61114);const s={sidebar_position:7},c="flowctl",r={id:"concepts/flowctl",title:"flowctl",description:"There are two ways to work with Flow: through the web app, and using the flowctl command-line interface.",source:"@site/docs/concepts/flowctl.md",sourceDirName:"concepts",slug:"/concepts/flowctl",permalink:"/pr-preview/pr-1594/concepts/flowctl",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/flowctl.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"tutorialSidebar",previous:{title:"Web application",permalink:"/pr-preview/pr-1594/concepts/web-app"},next:{title:"Imports",permalink:"/pr-preview/pr-1594/concepts/import"}},a={},d=[{value:"Installation and setup",id:"installation-and-setup",level:2},{value:"User guides",id:"user-guides",level:2},{value:"flowctl subcommands",id:"flowctl-subcommands",level:2},{value:"Editing Data Flows with flowctl",id:"editing-data-flows-with-flowctl",level:2},{value:"Reconciling specifications in local drafts",id:"reconciling-specifications-in-local-drafts",level:3},{value:"Development directories",id:"development-directories",level:2},{value:"TypeScript code generation",id:"typescript-code-generation",level:3}];function h(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"flowctl",children:"flowctl"}),"\n",(0,o.jsxs)(n.p,{children:["There are two ways to work with Flow: through the web app, and using the flowctl command-line interface.\nflowctl gives you more direct control over the files and directories that comprise your Data Flows.\nYou can work with any catalog to which you have ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/authentication",children:"access"}),", regardless of whether it was created from the command line or in the web app."]}),"\n",(0,o.jsxs)(n.p,{children:["You can also authorize Flow users and roles and generate TypeScript modules to write custom transformations for your ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivations"})," \u2014 workflows that aren't yet available in the web app."]}),"\n",(0,o.jsx)(n.p,{children:"flowctl is the only Flow binary that you need to work with,\nso distribution and upgrades are all simple."}),"\n",(0,o.jsx)(n.h2,{id:"installation-and-setup",children:"Installation and setup"}),"\n",(0,o.jsxs)(n.p,{children:["flowctl binaries for MacOS and Linux are available. Fow Windows, ",(0,o.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/flowctl/",children:"install Windows Subsystem for Linux (WSL)"})," to run Linux on Windows, or use a remote development environment."]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Copy and paste the appropriate script below into your terminal. This will download flowctl, make it executable, and add it to your ",(0,o.jsx)(n.code,{children:"PATH"}),"."]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"For Linux:"}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-console",children:"sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-x86_64-linux' && sudo chmod +x /usr/local/bin/flowctl\n"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"For Mac:"}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-console",children:"sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-multiarch-macos' && sudo chmod +x /usr/local/bin/flowctl\n"})}),"\n",(0,o.jsx)(n.p,{children:"Alternatively, Mac users can install with Homebrew:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-console",children:"brew tap estuary/flowctl\nbrew install flowctl\n"})}),"\n",(0,o.jsxs)(n.p,{children:["You can also find the source files on GitHub ",(0,o.jsx)(n.a,{href:"https://go.estuary.dev/flowctl",children:"here"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["To connect to your Flow account and start a session, ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/authentication#authenticating-flow-using-the-cli",children:"use an authentication token"})," from the web app."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"user-guides",children:"User guides"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/flowctl/",children:"View guides for common flowctl workflows"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"flowctl-subcommands",children:"flowctl subcommands"}),"\n",(0,o.jsx)(n.p,{children:"flowctl includes several top-level subcommands representing different functional areas. Each of these include multiple nested subcommands.\nImportant top-level flowctl subcommands are described below."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"auth"})," allows you to authenticate your development session in your local development environment.\nIt's also how you provision Flow roles and users. Learn more about ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/authentication",children:"authentication"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"catalog"})," allows you to work with your organization's current active catalog entities. You can investigate the current Data Flows,\npull specifications for local editing, test and publish specifications that you wrote or edited locally,\nand delete entities from the catalog."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"collections"})," allows you to work with your Flow collections. You can read the data from the collection and output it to stdout, or list the ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/journals",children:"journals"})," or journal fragments that comprise the collection. ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#using-the-flowctl-cli",children:"Learn more about reading collections with flowctl"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"draft"})," provides an alternative method for many of the actions you'd normally perform with ",(0,o.jsx)(n.code,{children:"catalog"}),", but common workflows have more steps."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["You can access full documentation of all flowctl subcommands from the command line by passing the ",(0,o.jsx)(n.code,{children:"--help"})," or ",(0,o.jsx)(n.code,{children:"-h"})," flag, for example:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"flowctl --help"})," lists top-level flowctl subcommands."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"flowctl catalog --help"})," lists subcommands of ",(0,o.jsx)(n.code,{children:"catalog"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"editing-data-flows-with-flowctl",children:"Editing Data Flows with flowctl"}),"\n",(0,o.jsxs)(n.p,{children:["flowctl allows you to work locally on the specification files that define your Data Flows.\nYou'll often need to move these specifications back and forth between your local environment and the ",(0,o.jsx)(n.strong,{children:"catalog"}),"\nof published entities."]}),"\n",(0,o.jsx)(n.p,{children:"The basic steps of this workflow are listed below, along with a diagram of the subcommands you'd use to accomplish them.\nKeep in mind that there's no single, correct way to work with flowctl,\nbut we recommend this method to get started."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["List all the active specifications in the catalog, which you can then pull into your local environment.\nYou can filter the output by ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/catalogs#namespace",children:"prefix"})," or entity type.\nFor example, ",(0,o.jsx)(n.code,{children:"flowctl catalog list --prefix acmeCo/sales/ --collections"})," only lists collections under the\n",(0,o.jsx)(n.code,{children:"acmeCo/sales/"})," prefix."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Pull a group of active specifications directly, resulting in local source files. You can refine results by prefix or entity type as described above (1)."}),"\n",(0,o.jsxs)(n.p,{children:["Note that if there are already files in your working directory, flowctl must reconcile them with the newly pulled specification.\n",(0,o.jsx)(n.a,{href:"#reconciling-specifications-in-local-drafts",children:"Learn more about your options"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Make edits locally."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Test local specifications (2)."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Publish local specifications to the catalog (3)."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(l.A,{chart:"\n\tgraph LR;\n d[Local environment];\n c[Active catalog];\n d-- 2: flowctl catalog test --\x3ed;\n d-- 3: flowctl catalog publish --\x3ec;\n c-- 1: flowctl catalog pull-specs --\x3ed;\n"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally",children:"View the step-by-step guide."})}),"\n",(0,o.jsx)(n.h3,{id:"reconciling-specifications-in-local-drafts",children:"Reconciling specifications in local drafts"}),"\n",(0,o.jsxs)(n.p,{children:["When you pull specifications to your working directory directly using ",(0,o.jsx)(n.code,{children:"flowctl catalog pull-specs"}),",\nthere may be conflicts between the existing files in that directory and the specifications you pull."]}),"\n",(0,o.jsxs)(n.p,{children:["By default, ",(0,o.jsx)(n.code,{children:"flowctl catalog pull-specs"})," will abort if it detects an existing file with the same name as a specification\nit is attempting to pull. You can change this behavior with the ",(0,o.jsx)(n.code,{children:"--existing"})," flag:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"--existing=overwrite"})," pulls the new versions of conflicting files in place of the old versions."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"--existing=keep"})," keeps the old versions of conflicting files."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"--existing=merge-specs"})," performs a simple merge of new and old versions of conflicting files.\nFor example, if an existing ",(0,o.jsx)(n.code,{children:"flow.yaml"})," file references collections a and b,\nand the new version of ",(0,o.jsx)(n.code,{children:"flow.yaml"})," references collections a and c,\nthe merged version will reference collections a, b, and c."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"development-directories",children:"Development directories"}),"\n",(0,o.jsxs)(n.p,{children:["Flow specifications and other files are written to your working directory when you run ",(0,o.jsx)(n.code,{children:"flowctl draft develop"})," or ",(0,o.jsx)(n.code,{children:"flowctl catalog pull-specs"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"They typically include:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"flow.yaml"}),":\nThe main specification file that imports all other Flow specification files created in a single operation.\nAs part of local development, you may add new specifications that you create as imports."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"flow_generated/"}),":\nDirectory of generated files, including TypeScript classes and interfaces.\nSee ",(0,o.jsx)(n.a,{href:"#typescript-code-generation",children:"TypeScript code generation"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"<prefix-name>/"}),":\nDirectory of specifications that you pulled. Its name corresponds to your catalog prefix. Its contents will vary, but it may contain various YAML files and subdirectories."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"package.json"})," and ",(0,o.jsx)(n.code,{children:"package-lock.json"}),":\nFiles used by ",(0,o.jsx)(n.code,{children:"npm"})," to manage dependencies and your Data Flow's associated JavaScript project.\nYou may customize ",(0,o.jsx)(n.code,{children:"package.json"}),",\nbut its ",(0,o.jsx)(n.code,{children:"dependencies"})," stanza will be overwritten by the\n",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations#npm-dependencies",children:"npmDependencies"}),"\nof your Flow specification source files, if any exist."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["When you run commands like ",(0,o.jsx)(n.code,{children:"flowctl catalog publish"})," or ",(0,o.jsx)(n.code,{children:"flowctl draft author"}),", you can use the ",(0,o.jsx)(n.code,{children:"--source-dir"})," flag\nto push specifications from a directory other than your current working directory,\nfor example, ",(0,o.jsx)(n.code,{children:"flowctl draft author --source-dir ../AcmeCoNew/marketing"}),"."]}),"\n",(0,o.jsx)(n.h3,{id:"typescript-code-generation",children:"TypeScript code generation"}),"\n",(0,o.jsxs)(n.p,{children:["TypeScript files are used in the Flow catalog both as part of the automatic build process,\nand to define lambdas functions for ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivations"}),", which requires your input."]}),"\n",(0,o.jsxs)(n.p,{children:["As part of the Data Flow build process, Flow translates your\n",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas",children:"schemas"}),"\ninto equivalent TypeScript types on your behalf.\nThese definitions live within ",(0,o.jsx)(n.code,{children:"flow_generated/"})," in your Data Flow's build directory ,\nand are frequently over-written by invocations of ",(0,o.jsx)(n.code,{children:"flowctl"}),".\nFiles in this subdirectory are human-readable and stable.\nYou may want to commit them as part of a GitOps-managed project, but this isn't required."]}),"\n",(0,o.jsxs)(n.p,{children:["Whenever you define a derivation that uses a ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations#lambdas",children:"lambda"}),",\nyou must define the lambda in an accompanying TypeScript module, and reference that module\nin the derivation's definition. To facilitate this,\nyou can generate a stub of the module using ",(0,o.jsx)(n.code,{children:"flowctl generate"}),"\nand simply write the function bodies.\n",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations#creating-typescript-modules",children:"Learn more about this workflow."})]}),"\n",(0,o.jsxs)(n.p,{children:["If a TypeScript module exists, ",(0,o.jsx)(n.code,{children:"flowctl"})," will never overwrite it,\neven if you update or expand your specifications such that the required interfaces have changed."]})]})}function p(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},61114:(e,n,i)=>{i.d(n,{A:()=>s});var o=i(96540),t=i(99702),l=i(74848);t.N.initialize({startOnLoad:!0});const s=e=>{let{chart:n}=e;return(0,o.useEffect)((()=>{t.N.contentLoaded()}),[]),(0,l.jsx)("div",{className:"mermaid",children:n})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4f08651a.6c382f9c.js b/pr-preview/pr-1594/assets/js/4f08651a.6c382f9c.js deleted file mode 100644 index 57a6a368c6..0000000000 --- a/pr-preview/pr-1594/assets/js/4f08651a.6c382f9c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2912],{57543:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>h,contentTitle:()=>i,default:()=>a,frontMatter:()=>c,metadata:()=>o,toc:()=>d});var t=n(74848),s=n(28453);const c={},i="Recharge",o={id:"reference/Connectors/capture-connectors/recharge",title:"Recharge",description:"This connector captures data from Recharge into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/recharge.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/recharge",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/recharge.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"PostgreSQL Batch Query Connector",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch"},next:{title:"Salesforce",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/"}},h={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"recharge",children:"Recharge"}),"\n",(0,t.jsx)(r.p,{children:"This connector captures data from Recharge into Flow collections."}),"\n",(0,t.jsxs)(r.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(r.a,{href:"https://ghcr.io/estuary/source-recharge:dev",children:(0,t.jsx)(r.code,{children:"ghcr.io/estuary/source-recharge:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(r.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(r.a,{href:"https://docs.airbyte.com/integrations/sources/recharge/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(r.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(r.p,{children:"The following data resources are supported through the Recharge APIs:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.rechargepayments.com/v1-shopify?python#list-addresses",children:"Addresses"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.rechargepayments.com/v1-shopify?python#list-charges",children:"Charges"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.rechargepayments.com/v1-shopify",children:"Collections"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.rechargepayments.com/v1-shopify?python#list-customers",children:"Customers"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.rechargepayments.com/v1-shopify?python#list-discounts",children:"Discounts"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.rechargepayments.com/v1-shopify?python#list-metafields",children:"Metafields"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.rechargepayments.com/v1-shopify?python#list-onetimes",children:"Onetimes"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.rechargepayments.com/v1-shopify?python#list-orders",children:"Orders"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.rechargepayments.com/v1-shopify?python#list-products",children:"Products"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.rechargepayments.com/v1-shopify?python#shop",children:"Shop"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.rechargepayments.com/v1-shopify?python#list-subscriptions",children:"Subscriptions"})}),"\n"]}),"\n",(0,t.jsx)(r.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:"Recharge Access Token for authentication."}),"\n"]}),"\n",(0,t.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(r.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(r.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Recharge source connector."]}),"\n",(0,t.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Property"}),(0,t.jsx)(r.th,{children:"Title"}),(0,t.jsx)(r.th,{children:"Description"}),(0,t.jsx)(r.th,{children:"Type"}),(0,t.jsx)(r.th,{children:"Required/Default"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"/access_token"})}),(0,t.jsx)(r.td,{children:"Access Token"}),(0,t.jsx)(r.td,{children:"The value of the Access Token generated."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"/start_date"})}),(0,t.jsx)(r.td,{children:"Start Date"}),(0,t.jsx)(r.td,{children:"The date from which you'd like to replicate data for Recharge API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Property"}),(0,t.jsx)(r.th,{children:"Title"}),(0,t.jsx)(r.th,{children:"Description"}),(0,t.jsx)(r.th,{children:"Type"}),(0,t.jsx)(r.th,{children:"Required/Default"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.code,{children:"/stream"})})}),(0,t.jsx)(r.td,{children:"Stream"}),(0,t.jsx)(r.td,{children:"Resource of your Recharge project from which collections are captured."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.code,{children:"/syncMode"})})}),(0,t.jsx)(r.td,{children:"Sync Mode"}),(0,t.jsx)(r.td,{children:"Connection method."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-recharge:dev\n config:\n access_token: <secret>\n start_date: 2017-01-25T00:00:00Z\n bindings:\n - resource:\n stream: addresses\n syncMode: full_refresh\n target: ${PREFIX}/addresses\n {...}\n"})})]})}function a(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>i,x:()=>o});var t=n(96540);const s={},c=t.createContext(s);function i(e){const r=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/4f1ddcc5.d704e6be.js b/pr-preview/pr-1594/assets/js/4f1ddcc5.d704e6be.js deleted file mode 100644 index d42cec0c52..0000000000 --- a/pr-preview/pr-1594/assets/js/4f1ddcc5.d704e6be.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2677],{2543:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>o});var r=n(74848),i=n(28453);const s={},d="Apache Parquet Files in Google GCS",l={id:"reference/Connectors/materialization-connectors/google-gcs-parquet",title:"Apache Parquet Files in Google GCS",description:"This connector materializes delta updates of",source:"@site/docs/reference/Connectors/materialization-connectors/google-gcs-parquet.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/google-gcs-parquet",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/google-gcs-parquet.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"CSV Files in Google GCS",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv"},next:{title:"Google Cloud Pub/Sub",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub"}},c={},o=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Parquet Data Types",id:"parquet-data-types",level:2},{value:"File Names",id:"file-names",level:2},{value:"Eventual Consistency",id:"eventual-consistency",level:2}];function a(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"apache-parquet-files-in-google-gcs",children:"Apache Parquet Files in Google GCS"}),"\n",(0,r.jsxs)(t.p,{children:["This connector materializes ",(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})," of\nFlow collections into a GCS bucket in the Apache Parquet format."]}),"\n",(0,r.jsx)(t.p,{children:"The delta updates are batched within Flow, converted to CSV files, and then pushed to the S3 bucket\nat a time interval that you set. Files are limited to a configurable maximum size. Each materialized\nFlow collection will produce many separate files."}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://ghcr.io/estuary/materialize-gcs-parquet:dev",children:(0,r.jsx)(t.code,{children:"ghcr.io/estuary/materialize-gcs-parquet:dev"})}),"\nprovides the latest connector image. You can also follow the link in your browser to see past image\nversions."]}),"\n",(0,r.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(t.p,{children:"To use this connector, you'll need:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["A GCS bucket to write files to. See ",(0,r.jsx)(t.a,{href:"https://cloud.google.com/storage/docs/creating-buckets",children:"this\nguide"})," for instructions on setting up a\nnew GCS bucket."]}),"\n",(0,r.jsxs)(t.li,{children:["A Google Cloud ",(0,r.jsx)(t.a,{href:"https://cloud.google.com/docs/authentication/getting-started",children:"service account"}),"\nwith ",(0,r.jsx)(t.a,{href:"https://cloud.google.com/storage/docs/access-control/iam-roles#standard-roles",children:(0,r.jsx)(t.code,{children:"roles/storage.objectCreator"})}),"\nfor the GCS bucket created above."]}),"\n",(0,r.jsx)(t.li,{children:"A key file for the service account."}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Use the below properties to configure the materialization, which will direct one or more of your\nFlow collections to your bucket."}),"\n",(0,r.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/bucket"})})}),(0,r.jsx)(t.td,{children:"Bucket"}),(0,r.jsx)(t.td,{children:"Bucket to store materialized objects."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/credentialsJson"})})}),(0,r.jsx)(t.td,{children:"Service Account JSON"}),(0,r.jsx)(t.td,{children:"The JSON credentials of the service account to use for authorization."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/uploadInterval"})})}),(0,r.jsx)(t.td,{children:"Upload Interval"}),(0,r.jsx)(t.td,{children:"Frequency at which files will be uploaded."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"5m"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/prefix"})}),(0,r.jsx)(t.td,{children:"Prefix"}),(0,r.jsx)(t.td,{children:"Optional prefix that will be used to store objects."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/fileSizeLimit"})}),(0,r.jsx)(t.td,{children:"File Size Limit"}),(0,r.jsx)(t.td,{children:"Approximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank."}),(0,r.jsx)(t.td,{children:"integer"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/parquetConfig/rowGroupRowLimit"})}),(0,r.jsx)(t.td,{children:"Row Group Row Limit"}),(0,r.jsx)(t.td,{children:"Maximum number of rows in a row group. Defaults to 1000000 if blank."}),(0,r.jsx)(t.td,{children:"integer"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/parquetConfig/rowGroupByteLimit"})}),(0,r.jsx)(t.td,{children:"Row Group Byte Limit"}),(0,r.jsx)(t.td,{children:"Approximate maximum number of bytes in a row group. Defaults to 536870912 (512 MiB) if blank."}),(0,r.jsx)(t.td,{children:"integer"}),(0,r.jsx)(t.td,{})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/path"})})}),(0,r.jsx)(t.td,{children:"Path"}),(0,r.jsx)(t.td,{children:"The path that objects will be materialized to."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:'materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/materialize-gcs-parquet:dev"\n config:\n bucket: bucket\n credentialsJson: <credentialsJson>\n uploadInterval: 5m\n bindings:\n - resource:\n path: ${COLLECTION_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,r.jsx)(t.h2,{id:"parquet-data-types",children:"Parquet Data Types"}),"\n",(0,r.jsxs)(t.p,{children:["Flow collection fields are written to Parquet files based on the data type of the field. Depending\non the field data type, the Parquet data type may be a ",(0,r.jsx)(t.a,{href:"https://parquet.apache.org/docs/file-format/types/",children:"primitive Parquet\ntype"}),", or a primitive Parquet type extended by a\n",(0,r.jsx)(t.a,{href:"https://github.com/apache/parquet-format/blob/master/LogicalTypes.md",children:"logical Parquet type"}),"."]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Collection Field Data Type"}),(0,r.jsx)(t.th,{children:"Parquet Data Type"}),(0,r.jsx)(t.th,{})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"array"})}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"JSON"})," (extends ",(0,r.jsx)(t.strong,{children:"BYTE_ARRAY"}),")"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"object"})}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"JSON"})," (extends ",(0,r.jsx)(t.strong,{children:"BYTE_ARRAY"}),")"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"boolean"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"BOOLEAN"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"integer"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"INT64"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"number"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"DOUBLE"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{contentEncoding: base64}"})]}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"BYTE_ARRAY"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{format: date}"})]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"DATE"})," (extends ",(0,r.jsx)(t.strong,{children:"BYTE_ARRAY"}),")"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{format: date-time}"})]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"TIMESTAMP"})," (extends ",(0,r.jsx)(t.strong,{children:"INT64"}),", UTC adjusted with microsecond precision)"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{format: time}"})]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"TIME"})," (extends ",(0,r.jsx)(t.strong,{children:"INT64"}),", UTC adjusted with microsecond precision)"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{format: date}"})]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"DATE"})," (extends ",(0,r.jsx)(t.strong,{children:"INT32"}),")"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{format: duration}"})]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"INTERVAL"})," (extends ",(0,r.jsx)(t.strong,{children:"FIXED_LEN_BYTE_ARRAY"})," with a length of 12)"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{format: uuid}"})]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"UUID"})," (extends ",(0,r.jsx)(t.strong,{children:"FIXED_LEN_BYTE_ARRAY"})," with a length of 16)"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," (all others)"]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"STRING"})," (extends ",(0,r.jsx)(t.strong,{children:"BYTE_ARRAY"}),")"]}),(0,r.jsx)(t.td,{})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"file-names",children:"File Names"}),"\n",(0,r.jsx)(t.p,{children:"Materialized files are named with monotonically increasing integer values, padded with leading 0's\nso they remain lexically sortable. For example, a set of files may be materialized like this for a\ngiven collection:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{children:"bucket/prefix/path/v0000000000/00000000000000000000.parquet\nbucket/prefix/path/v0000000000/00000000000000000001.parquet\nbucket/prefix/path/v0000000000/00000000000000000002.parquet\n"})}),"\n",(0,r.jsxs)(t.p,{children:["Here the values for ",(0,r.jsx)(t.strong,{children:"bucket"})," and ",(0,r.jsx)(t.strong,{children:"prefix"})," are from your endpoint configuration. The ",(0,r.jsx)(t.strong,{children:"path"})," is\nspecific to the binding configuration. ",(0,r.jsx)(t.strong,{children:"v0000000000"})," represents the current ",(0,r.jsx)(t.strong,{children:"backfill counter"}),"\nfor binding and will be increased if the binding is re-backfilled, along with the file names\nstarting back over from 0."]}),"\n",(0,r.jsx)(t.h2,{id:"eventual-consistency",children:"Eventual Consistency"}),"\n",(0,r.jsx)(t.p,{children:"In rare circumstances, recently materialized files may be re-written by files with the same name if\nthe materialization shard is interrupted in the middle of processing a Flow transaction and the\ntransaction must be re-started. Files that were committed as part of a completed transaction will\nnever be re-written. In this way, eventually all collection data will be written to files\neffectively-once, although inconsistencies are possible when accessing the most recently written\ndata."})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>d,x:()=>l});var r=n(96540);const i={},s=r.createContext(i);function d(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/540a1167.3d448be8.js b/pr-preview/pr-1594/assets/js/540a1167.3d448be8.js deleted file mode 100644 index 65a88fcf4b..0000000000 --- a/pr-preview/pr-1594/assets/js/540a1167.3d448be8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[866],{52481:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=n(74848),r=n(28453);const i={sidebar_position:6},o="Amazon RDS for PostgreSQL",a={id:"reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres",title:"Amazon RDS for PostgreSQL",description:"This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres.md",sourceDirName:"reference/Connectors/capture-connectors/PostgreSQL",slug:"/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Supabase",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase"},next:{title:"Google Cloud SQL for PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres"}},l={},c=[{value:"Supported versions and platforms",id:"supported-versions-and-platforms",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Backfills and performance considerations",id:"backfills-and-performance-considerations",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"SSL Mode",id:"ssl-mode",level:4},{value:"Sample",id:"sample",level:3},{value:"TOASTed values",id:"toasted-values",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"Publications",id:"publications",level:2}];function d(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"amazon-rds-for-postgresql",children:"Amazon RDS for PostgreSQL"}),"\n",(0,t.jsx)(s.p,{children:"This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections."}),"\n",(0,t.jsxs)(s.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(s.a,{href:"https://github.com/estuary/connectors/pkgs/container/source-postgres",children:(0,t.jsx)(s.code,{children:"ghcr.io/estuary/source-postgres:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(s.h2,{id:"supported-versions-and-platforms",children:"Supported versions and platforms"}),"\n",(0,t.jsx)(s.p,{children:"This connector supports PostgreSQL versions 10.0 and later on major cloud platforms."}),"\n",(0,t.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(s.p,{children:"You'll need a PostgreSQL database setup with the following:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/runtime-config-wal.html",children:"Logical replication enabled"})," \u2014 ",(0,t.jsx)(s.code,{children:"wal_level=logical"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/sql-createrole.html",children:"User role"})," with ",(0,t.jsx)(s.code,{children:"REPLICATION"})," attribute"]}),"\n",(0,t.jsxs)(s.li,{children:["A ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/warm-standby.html#STREAMING-REPLICATION-SLOTS",children:"replication slot"}),". This represents a \u201ccursor\u201d into the PostgreSQL write-ahead log from which change events can be read.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Optional; if none exist, one will be created by the connector."}),"\n",(0,t.jsxs)(s.li,{children:["If you wish to run multiple captures from the same database, each must have its own slot.\nYou can create these slots yourself, or by specifying a name other than the default in the advanced ",(0,t.jsx)(s.a,{href:"#configuration",children:"configuration"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["A ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/sql-createpublication.html",children:"publication"}),". This represents the set of tables for which change events will be reported.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["A watermarks table. The watermarks table is a small \u201cscratch space\u201d to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"To allow direct access:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html",children:"Modify the database"}),", setting ",(0,t.jsx)(s.strong,{children:"Public accessibility"})," to ",(0,t.jsx)(s.strong,{children:"Yes"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database as described in ",(0,t.jsx)(s.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html#Overview.RDSSecurityGroups.Create",children:"the Amazon documentation"}),".Create a new inbound rule and a new outbound rule that allow all traffic from the ",(0,t.jsx)(s.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Follow the guide to ",(0,t.jsx)(s.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(s.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(s.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,t.jsx)(s.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Enable logical replication on your RDS PostgreSQL instance."}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Create a ",(0,t.jsx)(s.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Creating",children:"parameter group"}),".\nCreate a unique name and description and set the following properties:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Family"}),": postgres13"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Type"}),": DB Parameter group"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Modifying",children:"Modify the new parameter group"})," and set ",(0,t.jsx)(s.code,{children:"rds.logical_replication=1"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Associating",children:"Associate the parameter group"})," with the database."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Reboot the database to allow the new parameter group to take effect."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"In the PostgreSQL client, connect to your instance and run the following commands to create a new user for the capture with appropriate permissions,\nand set up the watermarks table and publication."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",children:"CREATE USER flow_capture WITH PASSWORD 'secret';\nGRANT rds_replication TO flow_capture;\nGRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture;\nALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture;\nCREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);\nGRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;\nCREATE PUBLICATION flow_publication;\nALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);\nALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>;\n"})}),"\n",(0,t.jsxs)(s.p,{children:["where ",(0,t.jsx)(s.code,{children:"<other_tables>"})," lists all tables that will be captured from. The ",(0,t.jsx)(s.code,{children:"publish_via_partition_root"}),"\nsetting is recommended (because most users will want changes to a partitioned table to be captured\nunder the name of the root table) but is not required."]}),"\n",(0,t.jsxs)(s.ol,{start:"6",children:["\n",(0,t.jsxs)(s.li,{children:["In the ",(0,t.jsx)(s.a,{href:"https://console.aws.amazon.com/rds/",children:"RDS console"}),", note the instance's Endpoint and Port. You'll need these for the ",(0,t.jsx)(s.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"backfills-and-performance-considerations",children:"Backfills and performance considerations"}),"\n",(0,t.jsxs)(s.p,{children:["When the a PostgreSQL capture is initiated, by default, the connector first ",(0,t.jsx)(s.em,{children:"backfills"}),", or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis."]}),"\n",(0,t.jsx)(s.p,{children:"This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow.\nHowever, you may find it appropriate to skip the backfill, especially for extremely large tables."}),"\n",(0,t.jsxs)(s.p,{children:["In this case, you may turn of backfilling on a per-table basis. See ",(0,t.jsx)(s.a,{href:"#properties",children:"properties"})," for details."]}),"\n",(0,t.jsx)(s.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(s.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector."]}),"\n",(0,t.jsx)(s.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(s.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Property"}),(0,t.jsx)(s.th,{children:"Title"}),(0,t.jsx)(s.th,{children:"Description"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Required/Default"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/address"})})}),(0,t.jsx)(s.td,{children:"Address"}),(0,t.jsxs)(s.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/database"})})}),(0,t.jsx)(s.td,{children:"Database"}),(0,t.jsx)(s.td,{children:"Logical database name to capture from."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsxs)(s.td,{children:["Required, ",(0,t.jsx)(s.code,{children:'"postgres"'})]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/user"})})}),(0,t.jsx)(s.td,{children:"User"}),(0,t.jsx)(s.td,{children:"The database user to authenticate as."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsxs)(s.td,{children:["Required, ",(0,t.jsx)(s.code,{children:'"flow_capture"'})]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/password"})})}),(0,t.jsx)(s.td,{children:"Password"}),(0,t.jsx)(s.td,{children:"Password for the specified database user."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced"})}),(0,t.jsx)(s.td,{children:"Advanced Options"}),(0,t.jsx)(s.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,t.jsx)(s.td,{children:"object"}),(0,t.jsx)(s.td,{})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/backfill_chunk_size"})}),(0,t.jsx)(s.td,{children:"Backfill Chunk Size"}),(0,t.jsx)(s.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,t.jsx)(s.td,{children:"integer"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"4096"})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/publicationName"})}),(0,t.jsx)(s.td,{children:"Publication Name"}),(0,t.jsx)(s.td,{children:"The name of the PostgreSQL publication to replicate from."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:'"flow_publication"'})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/skip_backfills"})}),(0,t.jsx)(s.td,{children:"Skip Backfills"}),(0,t.jsx)(s.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/slotName"})}),(0,t.jsx)(s.td,{children:"Slot Name"}),(0,t.jsx)(s.td,{children:"The name of the PostgreSQL replication slot to replicate from."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:'"flow_slot"'})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/watermarksTable"})}),(0,t.jsx)(s.td,{children:"Watermarks Table"}),(0,t.jsx)(s.td,{children:"The name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:'"public.flow_watermarks"'})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/sslmode"})}),(0,t.jsx)(s.td,{children:"SSL Mode"}),(0,t.jsx)(s.td,{children:"Overrides SSL connection behavior by setting the 'sslmode' parameter."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Property"}),(0,t.jsx)(s.th,{children:"Title"}),(0,t.jsx)(s.th,{children:"Description"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Required/Default"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/namespace"})})}),(0,t.jsx)(s.td,{children:"Namespace"}),(0,t.jsxs)(s.td,{children:["The ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/9.1/ddl-schemas.html",children:"namespace/schema"})," of the table."]}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/stream"})})}),(0,t.jsx)(s.td,{children:"Stream"}),(0,t.jsx)(s.td,{children:"Table name."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/syncMode"})})}),(0,t.jsx)(s.td,{children:"Sync mode"}),(0,t.jsxs)(s.td,{children:["Connection method. Always set to ",(0,t.jsx)(s.code,{children:"incremental"}),"."]}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"ssl-mode",children:"SSL Mode"}),"\n",(0,t.jsxs)(s.p,{children:["Certain managed PostgreSQL implementations may require you to explicitly set the ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION",children:"SSL Mode"})," to connect with Flow. One example is ",(0,t.jsx)(s.a,{href:"https://neon.tech/docs/connect/connect-securely",children:"Neon"}),", which requires the setting ",(0,t.jsx)(s.code,{children:"verify-full"}),". Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration."]}),"\n",(0,t.jsx)(s.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(s.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/source-postgres:dev"\n config:\n address: "localhost:5432"\n database: "postgres"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n stream: ${TABLE_NAME}\n namespace: ${TABLE_NAMESPACE}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,t.jsx)(s.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,t.jsx)(s.h2,{id:"toasted-values",children:"TOASTed values"}),"\n",(0,t.jsxs)(s.p,{children:["PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons.\nIf your tables contain values that exceed the limit, those values can't be stored directly.\nPostgreSQL uses ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/storage-toast.html",children:"TOAST"})," (The Oversized-Attribute Storage Technique) to\nstore them separately."]}),"\n",(0,t.jsxs)(s.p,{children:["TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector.\nIf a change event occurs on a row that contains a TOASTed value, ",(0,t.jsx)(s.em,{children:"but the TOASTed value itself is unchanged"}),", it is omitted from the WAL.\nAs a result, the connector emits a row update with the a value omitted, which might cause\nunexpected results in downstream catalog tasks if adjustments are not made."]}),"\n",(0,t.jsxs)(s.p,{children:["The PostgreSQL connector handles TOASTed values for you when you follow the ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#flowctl-discover",children:"standard discovery workflow"}),"\nor use the ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#flow-ui",children:"Flow UI"})," to create your capture.\nIt uses ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/merge",children:"merge"})," ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"reductions"}),"\nto fill in the previous known TOASTed value in cases when that value is omitted from a row update."]}),"\n",(0,t.jsx)(s.p,{children:"However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["When you materialize the captured data to another system using a connector that requires ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})]}),"\n",(0,t.jsxs)(s.li,{children:["When you perform a ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivation"})," that uses TOASTed values"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(s.p,{children:"If you encounter an issue that you suspect is due to TOASTed values, try the following:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Ensure your collection's schema is using the merge ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/schemas#reduce-annotations",children:"reduction strategy"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/9.4/sql-altertable.html",children:"Set REPLICA IDENTITY to FULL"})," for the table. This circumvents the problem by forcing the\nWAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"mailto:support@estuary.dev",children:"Contact Estuary support"})," for assistance."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"publications",children:"Publications"}),"\n",(0,t.jsx)(s.p,{children:"It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",children:"CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true);\n"})}),"\n",(0,t.jsx)(s.p,{children:"Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes."})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>a});var t=n(96540);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/547dc70b.f76ed865.js b/pr-preview/pr-1594/assets/js/547dc70b.f76ed865.js deleted file mode 100644 index 662867d93d..0000000000 --- a/pr-preview/pr-1594/assets/js/547dc70b.f76ed865.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[337],{27615:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var r=n(74848),i=n(28453);const s={description:"Flow's default reduction behaviors and available strategies to customize them"},o="Reduction strategies",a={id:"reference/reduction-strategies/README",title:"Reduction strategies",description:"Flow's default reduction behaviors and available strategies to customize them",source:"@site/docs/reference/reduction-strategies/README.md",sourceDirName:"reference/reduction-strategies",slug:"/reference/reduction-strategies/",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/reduction-strategies/README.md",tags:[],version:"current",frontMatter:{description:"Flow's default reduction behaviors and available strategies to customize them"},sidebar:"tutorialSidebar",previous:{title:"Configuring task shards",permalink:"/pr-preview/pr-1594/reference/Configuring-task-shards"},next:{title:"append",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/append"}},c={},d=[{value:"Reduction guarantees",id:"reduction-guarantees",level:3}];function l(e){const t={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"reduction-strategies",children:"Reduction strategies"}),"\n",(0,r.jsxs)(t.p,{children:["Flow uses ",(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"reductions"}),"\nto aggregate data in the runtime in order to improve endpoint performance.\nReductions tell Flow how two versions of a document can be meaningfully combined. Guarantees that underlie all Flow reduction behavior are explained in depth ",(0,r.jsx)(t.a,{href:"./#reduction-guarantees",children:"below"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"Some reductions occur automatically during captures and materializations to optimize performance, but you can define more advanced behavior using reduction annotations in collection schemas."}),"\n",(0,r.jsx)(t.p,{children:"The available strategies are:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/append",children:"append"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins",children:"firstWriteWins and lastWriteWins"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/merge",children:"merge"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize",children:"minimize and maximize"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/set",children:"set"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/sum",children:"sum"})}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["When no other strategy is specified in a schema, Flow defaults to ",(0,r.jsx)(t.code,{children:"lastWriteWins"}),". For even more customization, you can use ",(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals",children:"conditional statements"}),". "]}),"\n",(0,r.jsxs)(t.admonition,{type:"info",children:[(0,r.jsx)(t.p,{children:"Estuary has many future plans for reduction annotations:"}),(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"More strategies, including data sketches like HyperLogLogs, T-Digests, and others."}),"\n",(0,r.jsx)(t.li,{children:"Eviction policies and constraints, for bounding the sizes of objects and arrays with fine-grained removal ordering."}),"\n"]}),"\n"]}),(0,r.jsx)(t.p,{children:"What\u2019s here today can be considered a minimal, useful proof-of-concept."})]}),"\n",(0,r.jsx)(t.h3,{id:"reduction-guarantees",children:"Reduction guarantees"}),"\n",(0,r.jsxs)(t.p,{children:["In Flow, documents that share the same collection key and are written to the same logical partition have a ",(0,r.jsx)(t.strong,{children:"total order,"})," meaning that one document is universally understood to have been written before the other."]}),"\n",(0,r.jsx)(t.p,{children:"This isn't true of documents of the same key written to different logical partitions. These documents can be considered \u201cmostly\u201d ordered: Flow uses timestamps to understand the relative ordering of these documents, and while this largely produces the desired outcome, small amounts of re-ordering are possible and even likely."}),"\n",(0,r.jsxs)(t.p,{children:["Flow guarantees ",(0,r.jsx)(t.strong,{children:"exactly-once"})," semantics within derived collections and materializations (so long as the target system supports transactions), and a document reduction will be applied exactly one time."]}),"\n",(0,r.jsxs)(t.p,{children:["Flow does ",(0,r.jsx)(t.em,{children:"not"})," guarantee that documents are reduced in sequential order, directly into a base document. For example, documents of a single Flow capture transaction are combined together into one document per collection key at capture time \u2013 and that document may be again combined with still others, and so on until a final reduction into the base document occurs."]}),"\n",(0,r.jsxs)(t.p,{children:["Taken together, these total-order and exactly-once guarantees mean that reduction strategies must be ",(0,r.jsx)(t.em,{children:"associative"})," [as in (2 + 3) + 4 = 2 + (3 + 4) ], but need not be commutative [ 2 + 3 = 3 + 2 ] or idempotent [ S u S = S ]. They expand the palette of strategies that can be implemented, and allow for more efficient implementations as compared to, for example ",(0,r.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type",children:"CRDTs"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["In this documentation, we\u2019ll refer to the \u201cleft-hand side\u201d (LHS) as the preceding document and the \u201cright-hand side\u201d (RHS) as the following one. Keep in mind that both the LHS and RHS may themselves represent a combination of still more ordered documents because, for example, reductions are applied ",(0,r.jsx)(t.em,{children:"associatively"}),"."]})]})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var r=n(96540);const i={},s=r.createContext(i);function o(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/54a88ed7.1baf8def.js b/pr-preview/pr-1594/assets/js/54a88ed7.1baf8def.js deleted file mode 100644 index d2d810ddf2..0000000000 --- a/pr-preview/pr-1594/assets/js/54a88ed7.1baf8def.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6113],{54561:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>c});var s=r(74848),t=r(28453);const i={},o="Amazon Ads",d={id:"reference/Connectors/capture-connectors/amazon-ads",title:"Amazon Ads",description:"This connector captures data from Amazon Ads into Flow collections via the Amazon Ads API.",source:"@site/docs/reference/Connectors/capture-connectors/amazon-ads.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/amazon-ads",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/amazon-ads.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Alpaca",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca"},next:{title:"Amazon DynamoDB",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb"}},a={},c=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with Amazon in the Flow web app",id:"using-oauth2-to-authenticate-with-amazon-in-the-flow-web-app",level:3},{value:"Authenticating manually using the CLI",id:"authenticating-manually-using-the-cli",level:3},{value:"Selecting data region and profiles",id:"selecting-data-region-and-profiles",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"amazon-ads",children:"Amazon Ads"}),"\n",(0,s.jsxs)(n.p,{children:["This connector captures data from Amazon Ads into Flow collections via the ",(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us",children:"Amazon Ads API"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/source-amazon-ads:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/source-amazon-ads:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,s.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/amazon-ads/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,s.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,s.jsx)(n.p,{children:"The following data resources are supported:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/reference/2/profiles#/Profiles",children:"Profiles"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-brands/3-0/openapi#/Ad%20groups",children:"Sponsored brands ad groups"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-brands/3-0/openapi#/Campaigns",children:"Sponsored brands campaigns"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-brands/3-0/openapi#/Keywords",children:"Sponsored brands keywords"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-brands/3-0/openapi#/Reports",children:"Sponsored brands report stream"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-brands/3-0/openapi#/Reports",children:"Sponsored brands video report stream"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-display/3-0/openapi#/Ad%20groups",children:"Sponsored display ad groups"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-display/3-0/openapi#/Campaigns",children:"Sponsored display ad campaigns"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-display/3-0/openapi#/Product%20ads",children:"Sponsored display product ads"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-display/3-0/openapi#/Reports",children:" Sponsored display report stream"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-display/3-0/openapi#/Targeting",children:"Sponsored display targetings"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-products/2-0/openapi#/Ad%20groups",children:"Sponsored product ad groups"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-products/2-0/openapi#/Product%20ads",children:"Sponsored product ads"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-products/2-0/openapi#/Campaigns",children:"Sponsored product campaigns"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-products/2-0/openapi#/Keywords",children:"Sponsored product keywords"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-products/2-0/openapi#/Negative%20keywords",children:"Sponsored product negative keywords"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-products/2-0/openapi#/Product%20targeting",children:"Sponsored product targetings"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/sponsored-products/2-0/openapi#/Reports",children:"Sponsored product report stream"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"This connector uses OAuth2 to authenticate with Amazon. You can do this in the Flow web app, or configure manually if you're using the flowctl CLI."}),"\n",(0,s.jsx)(n.h3,{id:"using-oauth2-to-authenticate-with-amazon-in-the-flow-web-app",children:"Using OAuth2 to authenticate with Amazon in the Flow web app"}),"\n",(0,s.jsxs)(n.p,{children:["You'll need an Amazon user account with ",(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/help?ref_=a20m_us_blg#GDQVHVQMY9F88PCA",children:"access"})," to the ",(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/register",children:"Amazon Ads account"})," from which you wish to capture data."]}),"\n",(0,s.jsx)(n.p,{children:"You'll use these credentials to sign in."}),"\n",(0,s.jsx)(n.h3,{id:"authenticating-manually-using-the-cli",children:"Authenticating manually using the CLI"}),"\n",(0,s.jsx)(n.p,{children:"When you configure this connector manually, you provide the same credentials that OAuth2 would automatically\nfetch if you used the web app. These are:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Client ID"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Client secret"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Refresh token"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"To obtain these credentials:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Complete the ",(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/onboarding/overview",children:"Amazon Ads API onboarding process"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/getting-started/retrieve-access-token#retrieve-your-client-id-and-client-secret",children:"Retrieve your client ID and client secret"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/getting-started/retrieve-access-token#call-the-authorization-url-to-request-access-and-refresh-tokens",children:"Retrieve a refresh token"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"selecting-data-region-and-profiles",children:"Selecting data region and profiles"}),"\n",(0,s.jsxs)(n.p,{children:["When you ",(0,s.jsx)(n.a,{href:"#endpoint",children:"configure the endpoint"})," for this connector, you must choose an Amazon region from which to capture data.\nOptionally, you may also select profiles from which to capture data."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"region"})," must be one of:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"NA (North America)"}),"\n",(0,s.jsx)(n.li,{children:"EU (European Union)"}),"\n",(0,s.jsx)(n.li,{children:"FE (Far East)"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["These represent the three URL endpoints provided by Amazon through which you can access the marketing API.\nEach region encompasses multiple Amazon marketplaces, which are broken down by country.\nSee the ",(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/info/api-overview#api-endpoints",children:"Amazon docs"})," for details."]}),"\n",(0,s.jsxs)(n.p,{children:["If you run your Amazon ads in multiple marketplaces, you may have separate ",(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/concepts/authorization/profiles",children:"profiles"})," for each.\nIf this is the case, you can specify the profiles from which you wish to capture data\nby supplying their ",(0,s.jsx)(n.a,{href:"https://advertising.amazon.com/API/docs/en-us/concepts/authorization/profiles#retrieving-profiles-2",children:"profile IDs"}),".\nBe sure to specify only profiles that correspond to marketplaces within the region you chose."]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Amazon Ads source connector."]}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.p,{children:["The properties in the table below reflect the manual authentication method.\nIf you're working in the Flow web app, you'll use ",(0,s.jsx)(n.a,{href:"#using-oauth2-to-authenticate-with-amazon-in-the-flow-web-app",children:"OAuth2"}),",\nso many of these properties aren't required."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials"})})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/credentials/auth_type"})}),(0,s.jsx)(n.td,{children:"Auth Type"}),(0,s.jsxs)(n.td,{children:["Set to ",(0,s.jsx)(n.code,{children:"oauth2.0"})," for manual integration (in this method, you're re-creating the same credentials of the OAuth user interface, but doing so manually)"]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials/client_id"})})}),(0,s.jsx)(n.td,{children:"Client ID"}),(0,s.jsx)(n.td,{children:"The client ID of your Amazon Ads developer application."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials/client_secret"})})}),(0,s.jsx)(n.td,{children:"Client Secret"}),(0,s.jsx)(n.td,{children:"The client secret of your Amazon Ads developer application."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials/refresh_token"})})}),(0,s.jsx)(n.td,{children:"Refresh Token"}),(0,s.jsx)(n.td,{children:"Amazon Ads refresh token."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/profiles"})}),(0,s.jsx)(n.td,{children:"Profile IDs (Optional)"}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.a,{href:"#selecting-data-region-and-profiles",children:"Profile IDs"})," you want to fetch data for."]}),(0,s.jsx)(n.td,{children:"array"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/region"})}),(0,s.jsx)(n.td,{children:"Region *"}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.a,{href:"#selecting-data-region-and-profiles",children:"Region"})," to pull data from (EU/NA/FE)."]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:'"NA"'})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/report_generation_max_retries"})}),(0,s.jsx)(n.td,{children:"Report Generation Maximum Retries *"}),(0,s.jsx)(n.td,{children:"Maximum retries the connector will attempt for fetching report data."}),(0,s.jsx)(n.td,{children:"integer"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"5"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/report_wait_timeout"})}),(0,s.jsx)(n.td,{children:"Report Wait Timeout *"}),(0,s.jsx)(n.td,{children:"Timeout duration in minutes for reports."}),(0,s.jsx)(n.td,{children:"integer"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"60"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/start_date"})}),(0,s.jsx)(n.td,{children:"Start Date (Optional)"}),(0,s.jsx)(n.td,{children:"The start date for collecting reports, in YYYY-MM-DD format. This should not be more than 60 days in the past."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/stream"})})}),(0,s.jsx)(n.td,{children:"Stream"}),(0,s.jsx)(n.td,{children:"Amazon Ads resource from which a collection is captured."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/syncMode"})})}),(0,s.jsx)(n.td,{children:"Sync Mode"}),(0,s.jsx)(n.td,{children:"Connection method."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.p,{children:"This sample specification reflects the manual authentication method."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-amazon-ads:dev\n config:\n credentials:\n auth_type: oauth2.0\n client_id: amzn1.application-oa2-client.XXXXXXXXX\n client_secret: <secret>\n refresh_token: Atzr|XXXXXXXXXXXX\n region: NA\n report_generation_max_retries: 5\n report_wait_timeout: 60\n start_date: 2022-03-01\n\n bindings:\n - resource:\n stream: profiles\n syncMode: full_refresh\n target: ${PREFIX}/profiles\n {}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>d});var s=r(96540);const t={},i=s.createContext(t);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/5769edfb.b3730ae4.js b/pr-preview/pr-1594/assets/js/5769edfb.b3730ae4.js deleted file mode 100644 index 4575fafeb8..0000000000 --- a/pr-preview/pr-1594/assets/js/5769edfb.b3730ae4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3663],{94848:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>a,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var t=r(74848),o=r(28453);const s={},i="WooCommerce",c={id:"reference/Connectors/capture-connectors/woocommerce",title:"WooCommerce",description:"This connector captures data from WooCommerce into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/woocommerce.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/woocommerce",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/woocommerce.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Twilio",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio"},next:{title:"YouTube Analytics",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Set up WooCommerce",id:"set-up-woocommerce",level:3},{value:"Set up the WooCommerce connector in Estuary Flow",id:"set-up-the-woocommerce-connector-in-estuary-flow",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Supported Streams",id:"supported-streams",level:2},{value:"Connector-Specific Features & Highlights",id:"connector-specific-features--highlights",level:2}];function h(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"woocommerce",children:"WooCommerce"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from WooCommerce into Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-woocommerce",":dev"," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"To set up the WooCommerce source connector with: you need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"WooCommerce 3.5+"}),"\n",(0,t.jsx)(n.li,{children:"WordPress 4.4+"}),"\n",(0,t.jsx)(n.li,{children:"Pretty permalinks in Settings > Permalinks so that the custom endpoints are supported. e.g. /%year%/%monthnum%/%day%/%postname%/"}),"\n",(0,t.jsx)(n.li,{children:"A new API key with read permissions and access to Customer key and Customer Secret."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsx)(n.p,{children:"Follow the steps below to set up the WooCommerce source connector."}),"\n",(0,t.jsx)(n.h3,{id:"set-up-woocommerce",children:"Set up WooCommerce"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Generate a new Rest API key."}),"\n",(0,t.jsx)(n.li,{children:"Obtain Customer key and Customer Secret."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"set-up-the-woocommerce-connector-in-estuary-flow",children:"Set up the WooCommerce connector in Estuary Flow"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Log into your Estuary Flow account."}),"\n",(0,t.jsx)(n.li,{children:'In the left navigation bar, click on "Captures". In the top-left corner, click "Connector Search".'}),"\n",(0,t.jsx)(n.li,{children:'Enter the name for the WooCommerce connector and select "WooCommerce" from the dropdown.'}),"\n",(0,t.jsx)(n.li,{children:'Fill in "Customer key" and "Customer Secret" with the data from Step 1 of this guide.'}),"\n",(0,t.jsxs)(n.li,{children:['Fill in "Shop Name". For example, if your shop URL is ',(0,t.jsx)(n.a,{href:"https://EXAMPLE.com",children:"https://EXAMPLE.com"}),", the shop name is 'EXAMPLE.com'."]}),"\n",(0,t.jsx)(n.li,{children:"Choose the start date you want to start syncing data from."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See ",(0,t.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the WooCommerce source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/customer_key"})}),(0,t.jsx)(n.td,{children:"Customer Key"}),(0,t.jsx)(n.td,{children:"Customer Key for API in WooCommerce shop"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/customer_secret"})}),(0,t.jsx)(n.td,{children:"Customer Secret"}),(0,t.jsx)(n.td,{children:"Customer Secret for API in WooCommerce shop"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/shop_name"})}),(0,t.jsx)(n.td,{children:"Shop Name"}),(0,t.jsx)(n.td,{children:"The name of the store."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/start_date"})}),(0,t.jsx)(n.td,{children:"Start Date"}),(0,t.jsx)(n.td,{children:"The date you would like to replicate data from. Format: YYYY-MM-DD"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Resource of your WooCommerce project from which collections are captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "properties": {\n\n }\n}\n'})}),"\n",(0,t.jsx)(n.h2,{id:"supported-streams",children:"Supported Streams"}),"\n",(0,t.jsx)(n.p,{children:"The WooCommerce source connector in Estuary Flow supports the following streams:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Coupons (Incremental)"}),"\n",(0,t.jsx)(n.li,{children:"Customers (Incremental)"}),"\n",(0,t.jsx)(n.li,{children:"Orders (Incremental)"}),"\n",(0,t.jsx)(n.li,{children:"Order notes"}),"\n",(0,t.jsx)(n.li,{children:"Payment gateways"}),"\n",(0,t.jsx)(n.li,{children:"Product attribute terms"}),"\n",(0,t.jsx)(n.li,{children:"Product attributes"}),"\n",(0,t.jsx)(n.li,{children:"Product categories"}),"\n",(0,t.jsx)(n.li,{children:"Product reviews (Incremental)"}),"\n",(0,t.jsx)(n.li,{children:"Product shipping classes"}),"\n",(0,t.jsx)(n.li,{children:"Product tags"}),"\n",(0,t.jsx)(n.li,{children:"Product variations"}),"\n",(0,t.jsx)(n.li,{children:"Products (Incremental)"}),"\n",(0,t.jsx)(n.li,{children:"Refunds"}),"\n",(0,t.jsx)(n.li,{children:"Shipping methods"}),"\n",(0,t.jsx)(n.li,{children:"Shipping zone locations"}),"\n",(0,t.jsx)(n.li,{children:"Shipping zone methods"}),"\n",(0,t.jsx)(n.li,{children:"Shipping zones"}),"\n",(0,t.jsx)(n.li,{children:"System status tools"}),"\n",(0,t.jsx)(n.li,{children:"Tax classes"}),"\n",(0,t.jsx)(n.li,{children:"Tax rates"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"connector-specific-features--highlights",children:"Connector-Specific Features & Highlights"}),"\n",(0,t.jsx)(n.p,{children:"Useful links:"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://woocommerce.github.io/woocommerce-rest-api-docs/#introduction",children:"WooCommerce Rest API Docs"}),"."]})]})}function a(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>i,x:()=>c});var t=r(96540);const o={},s=t.createContext(o);function i(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/57aea1fc.95ca8c03.js b/pr-preview/pr-1594/assets/js/57aea1fc.95ca8c03.js deleted file mode 100644 index c301b62a72..0000000000 --- a/pr-preview/pr-1594/assets/js/57aea1fc.95ca8c03.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6914],{46760:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var t=i(74848),s=i(28453);const r={},o="Amazon DynamoDB",c={id:"reference/Connectors/materialization-connectors/amazon-dynamodb",title:"Amazon DynamoDB",description:"This connector materializes Flow collections into tables in an Amazon DynamoDB.",source:"@site/docs/reference/Connectors/materialization-connectors/amazon-dynamodb.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/amazon-dynamodb",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/amazon-dynamodb.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"AlloyDB",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb"},next:{title:"Amazon Redshift",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Collection Requirements",id:"collection-requirements",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"amazon-dynamodb",children:"Amazon DynamoDB"}),"\n",(0,t.jsx)(n.p,{children:"This connector materializes Flow collections into tables in an Amazon DynamoDB."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows,\n",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/materialize-dynamodb:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/materialize-dynamodb:dev"})}),"\nprovides the latest version of the connector as a Docker image. You can also follow the link in your\nbrowser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["An IAM user with the following\n",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazondynamodb.html",children:"permissions"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"BatchGetItem"})," on all resources"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"BatchWriteItem"})," on all resources"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"CreateTable"})," on all resources"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["These permissions should be specified with the ",(0,t.jsx)(n.code,{children:"dynamodb:"})," prefix in an IAM policy document. For\nmore details and examples, see ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/using-identity-based-policies.html",children:"Using identity-based policies with Amazon\nDynamoDB"}),"\nin the Amazon docs."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The AWS ",(0,t.jsx)(n.strong,{children:"access key"})," and ",(0,t.jsx)(n.strong,{children:"secret access key"})," for the user. See the ",(0,t.jsx)(n.a,{href:"https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/",children:"AWS\nblog"})," for help finding these\ncredentials."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"collection-requirements",children:"Collection Requirements"}),"\n",(0,t.jsx)(n.p,{children:"Materialized collections can have at most 2 collection keys."}),"\n",(0,t.jsxs)(n.p,{children:["By default, the materialized tables will include the collection keys as the DynamoDB partition key\nand sort key, and the root document. The root document is materialized as ",(0,t.jsx)(n.code,{children:'"flow_document"'})," unless\nan alternate ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#projections",children:"projection"})," is configured for the source\ncollection. Additional fields may be included, but DynamoDB has a 400KB size limit on an individual\nrow so selecting too many fields of a collection with large documents will cause errors if the row\nsize exceeds that."]}),"\n",(0,t.jsxs)(n.p,{children:["The root document is materialized as a DynamoDB ",(0,t.jsx)(n.code,{children:"Map"})," type, and the fields of the document must be\nvalid DynamoDB ",(0,t.jsx)(n.code,{children:"Map"})," keys."]}),"\n",(0,t.jsxs)(n.p,{children:["To resolve issues with collections with more than 2 keys, excessively large documents, or\nincompatible field names, use a ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivation"})," to derive a new\ncollection and materialize that collection instead."]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog\nspecification file. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more\nabout using connectors. The values and specification sample below provide configuration details\nspecific to the DynamoDB materialization connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/awsAccessKeyId"})})}),(0,t.jsx)(n.td,{children:"Access Key ID"}),(0,t.jsx)(n.td,{children:"AWS Access Key ID for materializing to DynamoDB."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/awsSecretAccessKey"})})}),(0,t.jsx)(n.td,{children:"Secret Access Key"}),(0,t.jsx)(n.td,{children:"AWS Secret Access Key for materializing to DynamoDB."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/region"})})}),(0,t.jsx)(n.td,{children:"AWS Region"}),(0,t.jsx)(n.td,{children:"Region of the materialized tables."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"advanced/endpoint"})}),(0,t.jsx)(n.td,{children:"AWS Endpoint"}),(0,t.jsx)(n.td,{children:"The AWS endpoint URI to connect to. Use if you're materializing to a compatible API that isn't provided by AWS."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/table"})})}),(0,t.jsx)(n.td,{children:"Table Name"}),(0,t.jsx)(n.td,{children:"The name of the table to be materialized to."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/delta_updates"})}),(0,t.jsx)(n.td,{children:"Delta Update"}),(0,t.jsx)(n.td,{children:"Should updates to this table be done via delta updates. Default is false."}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'materializations:\n ${PREFIX}/${MATERIALIZATION_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-dynamodb:dev\n config:\n awsAccessKeyId: "example-aws-access-key-id"\n awsSecretAccessKey: "example-aws-secret-access-key"\n region: "us-east-1"\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n'})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>c});var t=i(96540);const s={},r=t.createContext(s);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/58d4a820.4aebbe0f.js b/pr-preview/pr-1594/assets/js/58d4a820.4aebbe0f.js deleted file mode 100644 index 7bc9ea1170..0000000000 --- a/pr-preview/pr-1594/assets/js/58d4a820.4aebbe0f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7713],{64636:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var r=t(74848),s=t(28453);const i={sidebar_position:5},o="Amazon RDS for MySQL",a={id:"reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql",title:"Amazon RDS for MySQL",description:"This is a change data capture (CDC) connector that captures change events from a MySQL database via the Binary Log.",source:"@site/docs/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql.md",sourceDirName:"reference/Connectors/capture-connectors/MySQL",slug:"/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"MySQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/"},next:{title:"Google Cloud SQL for MySQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Setting the MySQL time zone",id:"setting-the-mysql-time-zone",level:3},{value:"Backfills and performance considerations",id:"backfills-and-performance-considerations",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Troubleshooting Capture Errors",id:"troubleshooting-capture-errors",level:2},{value:"Unsupported Operations",id:"unsupported-operations",level:3},{value:"Data Manipulation Queries",id:"data-manipulation-queries",level:3},{value:"Unhandled Queries",id:"unhandled-queries",level:3},{value:"Metadata Errors",id:"metadata-errors",level:3},{value:"Insufficient Binlog Retention",id:"insufficient-binlog-retention",level:3},{value:"Empty Collection Key",id:"empty-collection-key",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"amazon-rds-for-mysql",children:"Amazon RDS for MySQL"}),"\n",(0,r.jsxs)(n.p,{children:["This is a change data capture (CDC) connector that captures change events from a MySQL database via the ",(0,r.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/binary-log.html",children:"Binary Log"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://github.com/estuary/connectors/pkgs/container/source-mysql",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-mysql:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"To use this connector, you'll need a MySQL database setup with the following."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_format",children:(0,r.jsx)(n.code,{children:"binlog_format"})}),"\nsystem variable set to ",(0,r.jsx)(n.code,{children:"ROW"})," (the default value)."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds",children:"Binary log expiration period"})," set to MySQL's default value of 30 days (2592000 seconds) if at all possible.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["This value may be set lower if necessary, but we ",(0,r.jsx)(n.a,{href:"#insufficient-binlog-retention",children:"strongly discourage"})," going below 7 days as this may increase the likelihood of unrecoverable failures."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:['A watermarks table. The watermarks table is a small "scratch space"\nto which the connector occasionally writes a small amount of data (a UUID,\nspecifically) to ensure accuracy when backfilling preexisting table contents.',"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The default name is ",(0,r.jsx)(n.code,{children:'"flow.watermarks"'}),", but this can be overridden in ",(0,r.jsx)(n.code,{children:"config.json"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["A database user with appropriate permissions:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"REPLICATION CLIENT"})," and ",(0,r.jsx)(n.code,{children:"REPLICATION SLAVE"})," privileges."]}),"\n",(0,r.jsx)(n.li,{children:"Permission to insert, update, and delete on the watermarks table."}),"\n",(0,r.jsx)(n.li,{children:"Permission to read the tables being captured."}),"\n",(0,r.jsxs)(n.li,{children:["Permission to read from ",(0,r.jsx)(n.code,{children:"information_schema"})," tables, if automatic discovery is used."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["If the table(s) to be captured include columns of type ",(0,r.jsx)(n.code,{children:"DATETIME"}),", the ",(0,r.jsx)(n.code,{children:"time_zone"})," system variable\nmust be set to an IANA zone name or numerical offset or the capture configured with a ",(0,r.jsx)(n.code,{children:"timezone"})," to use by default."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html",children:"Modify the database"}),", setting ",(0,r.jsx)(n.strong,{children:"Public accessibility"})," to ",(0,r.jsx)(n.strong,{children:"Yes"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database as described in ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html#Overview.RDSSecurityGroups.Create",children:"the Amazon documentation"}),". Create a new inbound rule and a new outbound rule that allow all traffic from the ",(0,r.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Follow the guide to ",(0,r.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,r.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,r.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,r.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Create a RDS parameter group to enable replication in MySQL."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Creating",children:"Create a parameter group"}),".\nCreate a unique name and description and set the following properties:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Family"}),": mysql8.0"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Type"}),": DB Parameter group"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Modifying",children:"Modify the new parameter group"})," and update the following parameters:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"binlog_format: ROW"}),"\n",(0,r.jsx)(n.li,{children:"binlog_row_metadata: FULL"}),"\n",(0,r.jsx)(n.li,{children:"read_only: 0"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["If using the primary instance (not recommended), ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Associating",children:"associate the parameter group"}),"\nwith the database and set ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#USER_WorkingWithAutomatedBackups.Enabling",children:"Backup Retention Period"})," to 7 days.\nReboot the database to allow the changes to take effect."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Create a read replica with the new parameter group applied (recommended)."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html#USER_ReadRepl.Create",children:"Create a read replica"}),"\nof your MySQL database."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html",children:"Modify the replica"}),"\nand set the following:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"DB parameter group"}),": choose the parameter group you created previously"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Backup retention period"}),": 7 days"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Public access"}),": Publicly accessible"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Reboot the replica to allow the changes to take effect."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Switch to your MySQL client. Run the following commands to create a new user for the capture with appropriate permissions,\nand set up the watermarks table:"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"CREATE DATABASE IF NOT EXISTS flow;\nCREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);\nCREATE USER IF NOT EXISTS flow_capture\n IDENTIFIED BY 'secret'\n COMMENT 'User account for Flow MySQL data capture';\nGRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';\nGRANT SELECT ON *.* TO 'flow_capture';\nGRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"5",children:["\n",(0,r.jsx)(n.li,{children:"Run the following command to set the binary log retention to 7 days, the maximum value which RDS MySQL permits:"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"CALL mysql.rds_set_configuration('binlog retention hours', 168);\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"6",children:["\n",(0,r.jsxs)(n.li,{children:["In the ",(0,r.jsx)(n.a,{href:"https://console.aws.amazon.com/rds/",children:"RDS console"}),", note the instance's Endpoint and Port. You'll need these for the ",(0,r.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"setting-the-mysql-time-zone",children:"Setting the MySQL time zone"}),"\n",(0,r.jsxs)(n.p,{children:["MySQL's ",(0,r.jsxs)(n.a,{href:"https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_time_zone",children:[(0,r.jsx)(n.code,{children:"time_zone"})," server system variable"]})," is set to ",(0,r.jsx)(n.code,{children:"SYSTEM"})," by default."]}),"\n",(0,r.jsxs)(n.p,{children:["If you intend to capture tables including columns of the type ",(0,r.jsx)(n.code,{children:"DATETIME"}),",\nand ",(0,r.jsx)(n.code,{children:"time_zone"})," is set to ",(0,r.jsx)(n.code,{children:"SYSTEM"}),",\nFlow won't be able to detect the time zone and convert the column to ",(0,r.jsx)(n.a,{href:"https://www.rfc-editor.org/rfc/rfc3339",children:"RFC3339 format"}),".\nTo avoid this, you must explicitly set the time zone for your database."]}),"\n",(0,r.jsx)(n.p,{children:"You can:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Specify a numerical offset from UTC."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["For MySQL version 8.0.19 or higher, values from ",(0,r.jsx)(n.code,{children:"-13:59"})," to ",(0,r.jsx)(n.code,{children:"+14:00"}),", inclusive, are permitted."]}),"\n",(0,r.jsxs)(n.li,{children:["Prior to MySQL 8.0.19, values from ",(0,r.jsx)(n.code,{children:"-12:59"})," to ",(0,r.jsx)(n.code,{children:"+13:00"}),", inclusive, are permitted"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Specify a named timezone in ",(0,r.jsx)(n.a,{href:"https://www.iana.org/time-zones",children:"IANA timezone format"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For example, if you're located in New Jersey, USA, you could set ",(0,r.jsx)(n.code,{children:"time_zone"})," to ",(0,r.jsx)(n.code,{children:"-05:00"})," or ",(0,r.jsx)(n.code,{children:"-04:00"}),", depending on the time of year.\nBecause this region observes daylight savings time, you'd be responsible for changing the offset.\nAlternatively, you could set ",(0,r.jsx)(n.code,{children:"time_zone"})," to ",(0,r.jsx)(n.code,{children:"America/New_York"}),", and time changes would occur automatically."]}),"\n",(0,r.jsxs)(n.p,{children:["If using IANA time zones, your database must include time zone tables. ",(0,r.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html",children:"Learn more in the MySQL docs"}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"Capture Timezone Configuration",type:"tip",children:(0,r.jsxs)(n.p,{children:["If you are unable to set the ",(0,r.jsx)(n.code,{children:"time_zone"})," in the database and need to capture tables with ",(0,r.jsx)(n.code,{children:"DATETIME"})," columns, the capture can be configured to assume a time zone using the ",(0,r.jsx)(n.code,{children:"timezone"})," configuration property (see below). The ",(0,r.jsx)(n.code,{children:"timezone"})," configuration property can be set as a numerical offset or IANA timezone format."]})}),"\n",(0,r.jsx)(n.h2,{id:"backfills-and-performance-considerations",children:"Backfills and performance considerations"}),"\n",(0,r.jsxs)(n.p,{children:["When the a MySQL capture is initiated, by default, the connector first ",(0,r.jsx)(n.em,{children:"backfills"}),", or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis."]}),"\n",(0,r.jsx)(n.p,{children:"This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow.\nHowever, you may find it appropriate to skip the backfill, especially for extremely large tables."}),"\n",(0,r.jsxs)(n.p,{children:["In this case, you may turn of backfilling on a per-table basis. See ",(0,r.jsx)(n.a,{href:"#properties",children:"properties"})," for details."]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the MySQL source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/address"})})}),(0,r.jsx)(n.td,{children:"Server Address"}),(0,r.jsxs)(n.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/user"})})}),(0,r.jsx)(n.td,{children:"Login User"}),(0,r.jsx)(n.td,{children:"The database user to authenticate as."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsxs)(n.td,{children:["Required, ",(0,r.jsx)(n.code,{children:'"flow_capture"'})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/password"})})}),(0,r.jsx)(n.td,{children:"Login Password"}),(0,r.jsx)(n.td,{children:"Password for the specified database user."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/timezone"})}),(0,r.jsx)(n.td,{children:"Timezone"}),(0,r.jsxs)(n.td,{children:["Timezone to use when capturing datetime columns. Should normally be left blank to use the database's ",(0,r.jsx)(n.code,{children:"'time_zone'"})," system variable. Only required if the ",(0,r.jsx)(n.code,{children:"'time_zone'"})," system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH",":MM"," offset. Takes precedence over the ",(0,r.jsx)(n.code,{children:"'time_zone'"})," system variable if both are set."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/watermarks_table"})}),(0,r.jsx)(n.td,{children:"Watermarks Table Name"}),(0,r.jsx)(n.td,{children:"The name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"flow.watermarks"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/dbname"})}),(0,r.jsx)(n.td,{children:"Database Name"}),(0,r.jsx)(n.td,{children:"The name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"mysql"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/node_id"})}),(0,r.jsx)(n.td,{children:"Node ID"}),(0,r.jsx)(n.td,{children:"Node ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/skip_backfills"})}),(0,r.jsx)(n.td,{children:"Skip Backfills"}),(0,r.jsx)(n.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,r.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,r.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"131072"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/skip_binlog_retention_check"})}),(0,r.jsx)(n.td,{children:"Skip Binlog Retention Sanity Check"}),(0,r.jsx)(n.td,{children:"Bypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need."}),(0,r.jsx)(n.td,{children:"boolean"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/namespace"})})}),(0,r.jsx)(n.td,{children:"Namespace"}),(0,r.jsxs)(n.td,{children:["The ",(0,r.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/show-databases.html",children:"database/schema"})," in which the table resides."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Name of the table to be captured from the database."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync mode"}),(0,r.jsxs)(n.td,{children:["Connection method. Always set to ",(0,r.jsx)(n.code,{children:"incremental"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsxs)(n.p,{children:["When you configure this connector in the web application, the automatic ",(0,r.jsx)(n.strong,{children:"discovery"})," process sets up a binding for ",(0,r.jsx)(n.em,{children:"most"})," tables it finds in your database, but there are exceptions."]}),(0,r.jsxs)(n.p,{children:["Tables in the MySQL system schemas ",(0,r.jsx)(n.code,{children:"information_schema"}),", ",(0,r.jsx)(n.code,{children:"mysql"}),", ",(0,r.jsx)(n.code,{children:"performance_schema"}),", and ",(0,r.jsx)(n.code,{children:"sys"})," will not be discovered.\nYou can add bindings for such tables manually."]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-mysql:dev\n config:\n address: "127.0.0.1:3306"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n namespace: ${TABLE_NAMESPACE}\n stream: ${TABLE_NAME}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,r.jsx)(n.h2,{id:"troubleshooting-capture-errors",children:"Troubleshooting Capture Errors"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"source-mysql"})," connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations:"]}),"\n",(0,r.jsx)(n.h3,{id:"unsupported-operations",children:"Unsupported Operations"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture is failing with an ",(0,r.jsx)(n.code,{children:'"unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE"'})," error, this indicates that such an operation has taken place impacting a table which is currently being captured."]}),"\n",(0,r.jsxs)(n.p,{children:["In the case of ",(0,r.jsx)(n.code,{children:"DROP TABLE"})," and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety)."]}),"\n",(0,r.jsxs)(n.p,{children:["In the case of ",(0,r.jsx)(n.code,{children:"ALTER TABLE"})," we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a ",(0,r.jsx)(n.code,{children:"DROP"})," or ",(0,r.jsx)(n.code,{children:"TRUNCATE TABLE"}),", but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did."]}),"\n",(0,r.jsx)(n.h3,{id:"data-manipulation-queries",children:"Data Manipulation Queries"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture is failing with an ",(0,r.jsx)(n.code,{children:'"unsupported DML query"'})," error, this means that an ",(0,r.jsx)(n.code,{children:"INSERT"}),", ",(0,r.jsx)(n.code,{children:"UPDATE"}),", ",(0,r.jsx)(n.code,{children:"DELETE"})," or other data manipulation query is present in the MySQL binlog. This should generally not happen if ",(0,r.jsx)(n.code,{children:"binlog_format = 'ROW'"})," as described in the ",(0,r.jsx)(n.a,{href:"#prerequisites",children:"Prerequisites"})," section."]}),"\n",(0,r.jsxs)(n.p,{children:["Resolving this error requires fixing the ",(0,r.jsx)(n.code,{children:"binlog_format"})," system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an ",(0,r.jsx)(n.code,{children:"INSERT"}),"/",(0,r.jsx)(n.code,{children:"DELETE"})," query it may suffice to remove the capture binding for the offending table and then re-add it."]}),"\n",(0,r.jsx)(n.h3,{id:"unhandled-queries",children:"Unhandled Queries"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture is failing with an ",(0,r.jsx)(n.code,{children:'"unhandled query"'})," error, some SQL query is present in the binlog which the connector does not (currently) understand."]}),"\n",(0,r.jsxs)(n.p,{children:["In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported ",(0,r.jsx)(n.a,{href:"#data-manipulation-queries",children:"DML Query"}),", an unsupported ",(0,r.jsx)(n.a,{href:"#unsupported-operations",children:"Table Operation"}),", or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog."]}),"\n",(0,r.jsx)(n.h3,{id:"metadata-errors",children:"Metadata Errors"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture is failing with a ",(0,r.jsx)(n.code,{children:'"metadata error"'})," then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes."]}),"\n",(0,r.jsx)(n.p,{children:"This should never happen, and most likely means that the MySQL binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety)."}),"\n",(0,r.jsx)(n.h3,{id:"insufficient-binlog-retention",children:"Insufficient Binlog Retention"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture fails with a ",(0,r.jsx)(n.code,{children:'"binlog retention period is too short"'})," error, it is informing you that the MySQL binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from."]}),"\n",(0,r.jsx)(n.p,{children:"(If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.)"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:'"binlog retention period is too short"'})," error should normally be fixed by setting ",(0,r.jsx)(n.code,{children:"binlog_expire_logs_seconds = 2592000"})," as described in the ",(0,r.jsx)(n.a,{href:"#prerequisites",children:"Prerequisites"})," section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the ",(0,r.jsx)(n.code,{children:"skip_binlog_retention_check"})," configuration option to disable this safety."]}),"\n",(0,r.jsx)(n.h3,{id:"empty-collection-key",children:"Empty Collection Key"}),"\n",(0,r.jsxs)(n.p,{children:["Every Flow collection must declare a ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#keys",children:"key"})," which is used to group its documents. When testing your capture, if you encounter an error indicating collection key cannot be empty, you will need to either add a key to the table in your source, or manually edit the generated specification and specify keys for the collection before publishing to the catalog as documented ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#empty-keys",children:"here"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var r=t(96540);const s={},i=r.createContext(s);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/5b71c68f.ee8c2b84.js b/pr-preview/pr-1594/assets/js/5b71c68f.ee8c2b84.js deleted file mode 100644 index f23e19d7bc..0000000000 --- a/pr-preview/pr-1594/assets/js/5b71c68f.ee8c2b84.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1815],{6357:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>a,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var t=r(74848),s=r(28453);const i={},o="Sentry",c={id:"reference/Connectors/capture-connectors/sentry",title:"Sentry",description:"This connector captures data from Sentry into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/sentry.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/sentry",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/sentry.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"SendGrid",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid"},next:{title:"SFTP",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp"}},d={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function h(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"sentry",children:"Sentry"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from Sentry into Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-sentry:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-sentry:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/sentry/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(n.p,{children:"The following data resources are supported through the Sentry APIs:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://docs.sentry.io/api/events/list-a-projects-events/",children:"Events"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://docs.sentry.io/api/events/list-a-projects-issues/",children:"Issues"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://docs.sentry.io/api/projects/list-your-projects/",children:"Projects"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://docs.sentry.io/api/releases/list-an-organizations-releases/",children:"Releases"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["To set up the Sentry source connector, you'll need the Sentry ",(0,t.jsx)(n.a,{href:"https://docs.sentry.io/product/projects/",children:"project name"}),", ",(0,t.jsx)(n.a,{href:"https://docs.sentry.io/api/auth/#auth-tokens",children:"authentication token"}),", and ",(0,t.jsx)(n.a,{href:"https://docs.sentry.io/product/accounts/membership/",children:"organization"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Sentry source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/auth_token"})}),(0,t.jsx)(n.td,{children:"Auth Token"}),(0,t.jsx)(n.td,{children:"Auth Token generated in Sentry"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/organization"})}),(0,t.jsx)(n.td,{children:"Organization"}),(0,t.jsx)(n.td,{children:"The slug of the organization the groups belong to."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/project"})}),(0,t.jsx)(n.td,{children:"Project"}),(0,t.jsx)(n.td,{children:"The name (slug) of the Project you want to sync."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Resource of your Sentry project from which collections are captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-sentry:dev\n config:\n auth_token: <secret>\n organization: <your organization>\n project: <your project>\n bindings:\n - resource:\n stream: events\n syncMode: full_refresh\n target: ${PREFIX}/events\n {...}\n"})})]})}function a(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>c});var t=r(96540);const s={},i=t.createContext(s);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/5ba559d4.e84db72e.js b/pr-preview/pr-1594/assets/js/5ba559d4.e84db72e.js deleted file mode 100644 index ea1d5ded7e..0000000000 --- a/pr-preview/pr-1594/assets/js/5ba559d4.e84db72e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1158],{66722:(e,s,t)=>{t.r(s),t.d(s,{default:()=>m});t(96540);var r=t(34164),n=t(58356),i=t(44586);const a={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN"},c={features:"features_xdhU",featureSvg:"featureSvg__8YW"};var o=t(74848);const d=[{title:"Easy to Use",image:"/img/undraw_docusaurus_mountain.svg",description:(0,o.jsx)(o.Fragment,{children:"Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly."})},{title:"Focus on What Matters",image:"/img/undraw_docusaurus_tree.svg",description:(0,o.jsxs)(o.Fragment,{children:["Docusaurus lets you focus on your docs, and we'll do the chores. Go ahead and move your docs into the ",(0,o.jsx)("code",{children:"docs"})," directory."]})},{title:"Powered by React",image:"/img/undraw_docusaurus_react.svg",description:(0,o.jsx)(o.Fragment,{children:"Extend or customize your website layout by reusing React. Docusaurus can be extended while reusing the same header and footer."})}];function u(e){let{title:s,image:t,description:n}=e;return(0,o.jsxs)("div",{className:(0,r.A)("col col--4"),children:[(0,o.jsx)("div",{className:"text--center",children:(0,o.jsx)("img",{className:c.featureSvg,alt:s,src:t})}),(0,o.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,o.jsx)("h3",{children:s}),(0,o.jsx)("p",{children:n})]})]})}function l(){return(0,o.jsx)("section",{className:c.features,children:(0,o.jsx)("div",{className:"container",children:(0,o.jsx)("div",{className:"row",children:d.map(((e,s)=>(0,o.jsx)(u,{...e},s)))})})})}function h(){const{siteConfig:e}=(0,i.A)();return(0,o.jsx)("header",{className:(0,r.A)("hero hero--primary",a.heroBanner),children:(0,o.jsxs)("div",{className:"container",children:[(0,o.jsx)("h1",{className:"hero__title",children:e.title}),(0,o.jsx)("p",{className:"hero__subtitle",children:e.tagline})]})})}function m(){const{siteConfig:e}=(0,i.A)();return(0,o.jsxs)(n.A,{title:`Hello from ${e.title}`,description:"Description will go into a meta tag in <head />",children:[(0,o.jsx)(h,{}),(0,o.jsx)("main",{children:(0,o.jsx)(l,{})})]})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/5bb0dc82.2ac019c2.js b/pr-preview/pr-1594/assets/js/5bb0dc82.2ac019c2.js deleted file mode 100644 index d89517fe47..0000000000 --- a/pr-preview/pr-1594/assets/js/5bb0dc82.2ac019c2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[745],{21728:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var i=s(74848),n=s(28453);const r={sidebar_position:3},a="Working with logs and statistics",o={id:"reference/working-logs-stats",title:"Working with logs and statistics",description:"Your logs and stats collections",source:"@site/docs/reference/working-logs-stats.md",sourceDirName:"reference",slug:"/reference/working-logs-stats",permalink:"/pr-preview/pr-1594/reference/working-logs-stats",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/working-logs-stats.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Composing with conditionals",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals"},next:{title:"Organizing a Flow catalog",permalink:"/pr-preview/pr-1594/reference/organizing-catalogs"}},c={},l=[{value:"Accessing logs and statistics",id:"accessing-logs-and-statistics",level:2},{value:"Logs and statistics in the Flow web app",id:"logs-and-statistics-in-the-flow-web-app",level:3},{value:"Logs",id:"logs",level:4},{value:"Statistics",id:"statistics",level:4},{value:"Accessing logs and statistics from the command line",id:"accessing-logs-and-statistics-from-the-command-line",level:3},{value:"Printing logs or stats since a specific time",id:"printing-logs-or-stats-since-a-specific-time",level:4},{value:"Accessing logs or stats by materialization",id:"accessing-logs-or-stats-by-materialization",level:3},{value:"Available statistics",id:"available-statistics",level:2},{value:"Shard information",id:"shard-information",level:3},{value:"Transaction information",id:"transaction-information",level:3}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"working-with-logs-and-statistics",children:"Working with logs and statistics"}),"\n",(0,i.jsxs)(t.p,{children:["Your ",(0,i.jsxs)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/logs-stats",children:[(0,i.jsx)(t.code,{children:"logs"})," and ",(0,i.jsx)(t.code,{children:"stats"})," collections"]}),"\nare useful for debugging and monitoring catalog tasks."]}),"\n",(0,i.jsx)(t.h2,{id:"accessing-logs-and-statistics",children:"Accessing logs and statistics"}),"\n",(0,i.jsx)(t.p,{children:"You can access logs and statistics in the Flow web app, by materializing them to an external endpoint, or from the command line."}),"\n",(0,i.jsx)(t.h3,{id:"logs-and-statistics-in-the-flow-web-app",children:"Logs and statistics in the Flow web app"}),"\n",(0,i.jsx)(t.p,{children:"You can view a subset of logs and statistics for individual tasks in the Flow web app."}),"\n",(0,i.jsx)(t.h4,{id:"logs",children:"Logs"}),"\n",(0,i.jsxs)(t.p,{children:["After you publish a new ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-capture",children:"capture"})," or ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-materialization",children:"materialization"}),", a pop-up window appears that displays the task's logs.\nOnce you close the window, you can't regain access to the full logs in the web app.\nFor a complete view of logs, use ",(0,i.jsx)(t.a,{href:"#accessing-logs-and-statistics-from-the-command-line",children:"flowctl"})," or ",(0,i.jsx)(t.a,{href:"#accessing-logs-or-stats-by-materialization",children:"materialize the logs collection"})," to an outside system."]}),"\n",(0,i.jsxs)(t.p,{children:["However, if a task fails, you can view the logs associated with the error(s) that caused the failure.\nIn the ",(0,i.jsx)(t.strong,{children:"Details"})," view of the published capture or materialization, click the name of its shard to display the logs."]}),"\n",(0,i.jsx)(t.h4,{id:"statistics",children:"Statistics"}),"\n",(0,i.jsx)(t.p,{children:"Two statistics are shown for each capture, collection, and materialization:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Bytes Written or Read"}),".\nThis corresponds to the ",(0,i.jsx)(t.code,{children:"bytesTotal"})," ",(0,i.jsx)(t.a,{href:"#transaction-information",children:"property of the stats collection"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Docs Written or Read"}),".\nThis corresponds to the ",(0,i.jsx)(t.code,{children:"docsTotal"})," ",(0,i.jsx)(t.a,{href:"#transaction-information",children:"property of the stats collection"}),"."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"These fields have slightly different meanings for each Flow entity type:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["For captures, ",(0,i.jsx)(t.strong,{children:"Bytes Written"})," and ",(0,i.jsx)(t.strong,{children:"Docs Written"})," represent the total data written across all of the\ncapture's associated collections."]}),"\n",(0,i.jsxs)(t.li,{children:["For collections, ",(0,i.jsx)(t.strong,{children:"Bytes Written"})," and ",(0,i.jsx)(t.strong,{children:"Docs Written"})," represent the data written to the collection from\nits associated capture or derivation."]}),"\n",(0,i.jsxs)(t.li,{children:["For materializations, ",(0,i.jsx)(t.strong,{children:"Bytes Read"})," and ",(0,i.jsx)(t.strong,{children:"Docs Read"})," represent the total data read from all of the\nmaterialization's associated collections."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"accessing-logs-and-statistics-from-the-command-line",children:"Accessing logs and statistics from the command line"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"flowctl logs"})," and ",(0,i.jsx)(t.code,{children:"flowctl stats"})," subcommands allow you to print logs and stats, respectively, from the command line.\nThis method allows more flexibility and is ideal for debugging."]}),"\n",(0,i.jsx)(t.p,{children:"You can retrieve logs and stats for any published Flow task. For example:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-console",children:"flowctl logs --task acmeCo/anvils/capture-one\n\nflowctl stats --task acmeCo/anvils/capture-one --uncommitted\n"})}),"\n",(0,i.jsx)(t.admonition,{title:"Beta",type:"info",children:(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"--uncommitted"})," flag is currently required for ",(0,i.jsx)(t.code,{children:"flowctl stats"}),". This means that all statistics are read, regardless of whether they are about a successfully committed ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards#transactions",children:"transaction"}),", or a transaction that was rolled back or uncommitted.\nIn the future, committed reads will be the default."]})}),"\n",(0,i.jsx)(t.h4,{id:"printing-logs-or-stats-since-a-specific-time",children:"Printing logs or stats since a specific time"}),"\n",(0,i.jsx)(t.p,{children:"To limit output, you can retrieve logs are stats starting at a specific time in the past. For example:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"flowctl stats --task acmeCo/anvils/materialization-one --since 1h\n"})}),"\n",(0,i.jsxs)(t.p,{children:["...will retrieve stats from approximately the last hour. The actual start time will always be at the previous ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/journals#fragment-files",children:"fragment"})," boundary, so it can be significantly before the requested time period."]}),"\n",(0,i.jsxs)(t.p,{children:["Additional options for ",(0,i.jsx)(t.code,{children:"flowctl logs"})," and ",(0,i.jsx)(t.code,{children:"flowctl stats"})," can be accessed through command-line help."]}),"\n",(0,i.jsx)(t.h3,{id:"accessing-logs-or-stats-by-materialization",children:"Accessing logs or stats by materialization"}),"\n",(0,i.jsxs)(t.p,{children:["You can materialize your ",(0,i.jsx)(t.code,{children:"logs"})," or ",(0,i.jsx)(t.code,{children:"stats"})," collections to an external system.\nThis is typically the preferred method if you\u2019d like to continuously work with or monitor logs or statistics.\nYou can materialize the logs or statistics for all tasks, or select a subset of tasks using a ",(0,i.jsx)(t.a,{href:"../../concepts/materialization/#partition-selectors",children:"partition selector"})," (the ",(0,i.jsx)(t.code,{children:"logs"})," and ",(0,i.jsx)(t.code,{children:"stats"})," collections are partitioned on tasks)."]}),"\n",(0,i.jsx)(t.admonition,{type:"caution",children:(0,i.jsx)(t.p,{children:"Be sure to add a partition selector to exclude the logs and statistics of the materialization\nitself. Otherwise, you could trigger an infinite loop in which the connector\nmaterializes its own logs and statistics, collects logs and statistic on that event, and so on."})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"acmeCo/anvils/logs:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-webhook:dev\n config:\n address: my.webhook.com\n bindings:\n - resource:\n relativePath: /log/wordcount\n source: ops/acmeCo/logs\n # Exclude the logs of this materialization to avoid an infinite loop.\n partitions:\n exclude:\n name: ['acmeCo/anvils/logs']\n"})}),"\n",(0,i.jsx)(t.h2,{id:"available-statistics",children:"Available statistics"}),"\n",(0,i.jsx)(t.p,{children:"Available statistics include information about the amount of data in inputs and outputs of each transaction. They also include temporal information about the transaction. Statistics vary by task type (capture, materialization, or derivation)."}),"\n",(0,i.jsxs)(t.p,{children:["A thorough knowledge of Flow's ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/#advanced-concepts",children:"advanced concepts"})," is necessary to effectively leverage these statistics."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"stats"})," collection documents include the following properties."]}),"\n",(0,i.jsx)(t.h3,{id:"shard-information",children:"Shard information"}),"\n",(0,i.jsxs)(t.p,{children:["A ",(0,i.jsx)(t.code,{children:"stats"})," document begins with data about the shard processing the transaction.\nEach processing shard is uniquely identified by the combination of its ",(0,i.jsx)(t.code,{children:"name"}),", ",(0,i.jsx)(t.code,{children:"keyBegin"}),", and ",(0,i.jsx)(t.code,{children:"rClockBegin"}),".\nThis information is important for tasks with multiple shards: it allows you to determine whether data throughput is\nevenly distributed amongst those shards."]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Property"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Data Type"}),(0,i.jsx)(t.th,{children:"Applicable Task Type"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/shard"})}),(0,i.jsx)(t.td,{children:"Flow shard information"}),(0,i.jsx)(t.td,{children:"object"}),(0,i.jsx)(t.td,{children:"All"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/shard/kind"})}),(0,i.jsxs)(t.td,{children:["The type of catalog task. One of ",(0,i.jsx)(t.code,{children:'"capture"'}),", ",(0,i.jsx)(t.code,{children:'"derivation"'}),", or ",(0,i.jsx)(t.code,{children:'"materialization"'})]}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"All"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/shard/name"})}),(0,i.jsx)(t.td,{children:"The name of the catalog task (without the task type prefix)"}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"All"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/shard/keyBegin"})}),(0,i.jsxs)(t.td,{children:["With ",(0,i.jsx)(t.code,{children:"rClockBegin"}),", this comprises the shard ID. The inclusive beginning of the shard's assigned key range."]}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"All"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/shard/rClockBegin"})}),(0,i.jsxs)(t.td,{children:["With ",(0,i.jsx)(t.code,{children:"keyBegin"}),", this comprises the shard ID. The inclusive beginning of the shard's assigned rClock range."]}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"All"})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"transaction-information",children:"Transaction information"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"stats"})," documents include information about a transaction: its inputs and outputs,\nthe amount of data processed, and the time taken.\nYou can use this information to ensure that your Flow tasks are running efficiently,\nand that the amount of data processed matches your expectations."]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Property"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Data Type"}),(0,i.jsx)(t.th,{children:"Applicable Task Type"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/ts"})}),(0,i.jsx)(t.td,{children:"Timestamp corresponding to the start of the transaction, rounded to the nearest minute"}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"All"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/openSecondsTotal"})}),(0,i.jsx)(t.td,{children:"Total time that the transaction was open before starting to commit"}),(0,i.jsx)(t.td,{children:"number"}),(0,i.jsx)(t.td,{children:"All"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/txnCount"})}),(0,i.jsx)(t.td,{children:"Total number of transactions represented by this stats document. Used for reduction."}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{children:"All"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/capture"})}),(0,i.jsx)(t.td,{children:"Capture stats, organized by collection"}),(0,i.jsx)(t.td,{children:"object"}),(0,i.jsx)(t.td,{children:"Capture"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/materialize"})}),(0,i.jsx)(t.td,{children:"Materialization stats, organized by collection"}),(0,i.jsx)(t.td,{children:"object"}),(0,i.jsx)(t.td,{children:"Materialization"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/derive"})}),(0,i.jsx)(t.td,{children:"Derivation statistics"}),(0,i.jsx)(t.td,{children:"object"}),(0,i.jsx)(t.td,{children:"Derivation"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/<task-type>/<collection-name>/right/"})}),(0,i.jsx)(t.td,{children:"Input documents from a the task's source"}),(0,i.jsx)(t.td,{children:"object"}),(0,i.jsx)(t.td,{children:"Capture, materialization"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/<task-type>/<collection-name>/left/"})}),(0,i.jsxs)(t.td,{children:["Input documents from an external destination; used for ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#how-continuous-materialization-works",children:"reduced updates"})," in materializations"]}),(0,i.jsx)(t.td,{children:"object"}),(0,i.jsx)(t.td,{children:"Materialization"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/<task-type>/<collection-name>/out/"})}),(0,i.jsx)(t.td,{children:"Output documents from the transaction"}),(0,i.jsx)(t.td,{children:"object"}),(0,i.jsx)(t.td,{children:"All"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/<task-type>/{}/docsTotal"})}),(0,i.jsx)(t.td,{children:"Total number of documents"}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{children:"All"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/<task-type>/{}/bytesTotal"})}),(0,i.jsx)(t.td,{children:"Total number of bytes representing the JSON encoded documents"}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{children:"All"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/derivations/transforms/transformStats"})}),(0,i.jsx)(t.td,{children:"Stats for a specific transform of a derivation, which will have an update, publish, or both"}),(0,i.jsx)(t.td,{children:"object"}),(0,i.jsx)(t.td,{children:"Derivation"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/derivations/transforms/transformStats/input"})}),(0,i.jsx)(t.td,{children:"The input documents that were fed into this transform"}),(0,i.jsx)(t.td,{children:"object"}),(0,i.jsx)(t.td,{children:"Derivation"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/derivations/transforms/transformStats/update"})}),(0,i.jsx)(t.td,{children:"The outputs from update lambda invocations, which were combined into registers"}),(0,i.jsx)(t.td,{children:"object"}),(0,i.jsx)(t.td,{children:"Derivation"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/derivations/transforms/transformStats/publish"})}),(0,i.jsx)(t.td,{children:"The outputs from publish lambda invocations."}),(0,i.jsx)(t.td,{children:"object"}),(0,i.jsx)(t.td,{children:"Derivation"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/derivations/registers/createdTotal"})}),(0,i.jsx)(t.td,{children:"The total number of new register keys that were created"}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{children:"Derivation"})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>o});var i=s(96540);const n={},r=i.createContext(n);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/5c7e141f.4ab4be0d.js b/pr-preview/pr-1594/assets/js/5c7e141f.4ab4be0d.js deleted file mode 100644 index 98d0e35c7f..0000000000 --- a/pr-preview/pr-1594/assets/js/5c7e141f.4ab4be0d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7229],{63177:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>s,metadata:()=>d,toc:()=>l});var t=r(74848),o=r(28453);const s={},i="MongoDB",d={id:"reference/Connectors/materialization-connectors/mongodb",title:"MongoDB",description:"This connector materializes data from your Flow collections to your MongoDB collections.",source:"@site/docs/reference/Connectors/materialization-connectors/mongodb.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/mongodb",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/mongodb.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Cloud SQL for SQLServer",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver"},next:{title:"MotherDuck",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck"}},c={},l=[{value:"Data model",id:"data-model",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"SSH Tunneling",id:"ssh-tunneling",level:2},{value:"Delta updates",id:"delta-updates",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"mongodb",children:"MongoDB"}),"\n",(0,t.jsx)(n.p,{children:"This connector materializes data from your Flow collections to your MongoDB collections."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/materialize-mongodb:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/materialize-mongodb:dev"})})," provides the latest connector image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"data-model",children:"Data model"}),"\n",(0,t.jsxs)(n.p,{children:["MongoDB is a NoSQL database. Its ",(0,t.jsx)(n.a,{href:"https://www.mongodb.com/docs/manual/core/data-modeling-introduction/",children:"data\nmodel"}),"\nconsists of ",(0,t.jsx)(n.strong,{children:"documents"})," (lightweight records that contain mappings of fields\nand values) organized in ",(0,t.jsx)(n.strong,{children:"collections"}),". MongoDB documents have a mandatory\n",(0,t.jsx)(n.code,{children:"_id"})," field that is used as the key of the collection."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"You'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Credentials for connecting to your MongoDB instance and database."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Read and write access to your MongoDB database and desired collections. See ",(0,t.jsx)(n.a,{href:"https://www.mongodb.com/docs/manual/core/authorization/",children:"Role-Based Access\nControl"})," for more information."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If you are using MongoDB Atlas, or your MongoDB provider requires allowlisting\nof IPs, you need to ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"allowlist the Estuary IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the Flow specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Firestore source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/address"})})}),(0,t.jsx)(n.td,{children:"Address"}),(0,t.jsx)(n.td,{children:"Host and port of the database. Optionally can specify scheme for the URL such as mongodb+srv://host."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/database"})})}),(0,t.jsx)(n.td,{children:"Database"}),(0,t.jsx)(n.td,{children:"Name of the database to capture from."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/user"})})}),(0,t.jsx)(n.td,{children:"User"}),(0,t.jsx)(n.td,{children:"Database user to connect as."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/password"})})}),(0,t.jsx)(n.td,{children:"Password"}),(0,t.jsx)(n.td,{children:"Password for the specified database user."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/collection"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Collection name"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/delta_updates"})}),(0,t.jsx)(n.td,{children:"Delta Update"}),(0,t.jsx)(n.td,{children:"Should updates to this table be done via delta updates."}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'materializations:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-mongodb:dev\n config:\n address: "mongo:27017"\n database: "test"\n password: "flow"\n user: "flow"\n bindings:\n - resource:\n collection: users\n database: test\n source: ${PREFIX}/users\n'})}),"\n",(0,t.jsx)(n.h2,{id:"ssh-tunneling",children:"SSH Tunneling"}),"\n",(0,t.jsx)(n.p,{children:"As an alternative to connecting to your MongoDB instance directly, you can allow secure connections via SSH tunneling. To do so:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Refer to the ",(0,t.jsx)(n.a,{href:"../../../../guides/connect-network/",children:"guide"})," to configure an SSH server on the cloud platform of your choice."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, with the addition of the ",(0,t.jsx)(n.code,{children:"networkTunnel"})," stanza to enable the SSH tunnel, if using. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,t.jsxs)(n.p,{children:["This connector supports both standard (merge) and ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>i,x:()=>d});var t=r(96540);const o={},s=t.createContext(o);function i(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/5d9eac72.17517544.js b/pr-preview/pr-1594/assets/js/5d9eac72.17517544.js deleted file mode 100644 index 3ef495068c..0000000000 --- a/pr-preview/pr-1594/assets/js/5d9eac72.17517544.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[925],{16540:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var i=n(74848),o=n(28453),r=n(61114);const a={},s="Materialization Protocol",c={id:"reference/Connectors/materialization-protocol",title:"Materialization Protocol",description:"Materializations are processed as cooperative transactions between the Flow",source:"@site/docs/reference/Connectors/materialization-protocol.md",sourceDirName:"reference/Connectors",slug:"/reference/Connectors/materialization-protocol",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-protocol",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-protocol.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"TimescaleDB",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb"},next:{title:"Authorizing users and authenticating with Flow",permalink:"/pr-preview/pr-1594/reference/authentication"}},d={},l=[{value:"Sequence Diagram",id:"sequence-diagram",level:2},{value:"Exactly-Once Semantics",id:"exactly-once-semantics",level:2},{value:"Common Implementation Patterns",id:"common-implementation-patterns",level:2},{value:"Remote Store is Authoritative",id:"remote-store-is-authoritative",level:3},{value:"Recovery Log with Non-Transactional Store",id:"recovery-log-with-non-transactional-store",level:3},{value:"Recovery Log with Idempotent Apply",id:"recovery-log-with-idempotent-apply",level:3},{value:"Push-only Endpoints & Delta Updates",id:"push-only-endpoints--delta-updates",level:3},{value:"Protocol Phases",id:"protocol-phases",level:2},{value:"Acknowledge",id:"acknowledge",level:3},{value:"Load",id:"load",level:3},{value:"Store",id:"store",level:3}];function h(e){const t={code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"materialization-protocol",children:"Materialization Protocol"}),"\n",(0,i.jsx)(t.p,{children:"Materializations are processed as cooperative transactions between the Flow\nRuntime and a connector Driver, over a long-lived RPC through which the Runtime\nand Driver exchange messages."}),"\n",(0,i.jsx)(t.p,{children:"This RPC workflow maintains a materialized view of a Flow collection in an\nexternal system. It has distinct acknowledge, load, and store phases.\nThe Flow runtime and driver cooperatively maintain a fully-reduced view of each\ndocument by loading current states from the store, reducing in a number of\nupdates, and then storing updated documents and checkpoints."}),"\n",(0,i.jsx)(t.h2,{id:"sequence-diagram",children:"Sequence Diagram"}),"\n",(0,i.jsxs)(t.p,{children:["As a convention and to reduce ambiguity, message types from the Runtime are\nnamed in an imperative fashion (",(0,i.jsx)(t.code,{children:"Load"}),"), while responses from the driver always\nhave a past-tense name (",(0,i.jsx)(t.code,{children:"Loaded"}),"):"]}),"\n",(0,i.jsx)(r.A,{chart:"\n sequenceDiagram\n Runtime->>Driver: Open{MaterializationSpec, driverCP}\n Note right of Driver: Connect to endpoint.<br/>Optionally fetch last-committed<br/>runtime checkpoint.\n Driver->>Runtime: Opened{runtimeCP}\n Note over Runtime, Driver: One-time initialization \u261d\ufe0f.<br/> \ud83d\udc47 Repeats for each transaction.\n Note left of Runtime: Prior txn commits<br/>to recovery log.\n Note right of Driver: Prior txn commits to DB<br/>(where applicable).\n Runtime->>Driver: Acknowledge\n Note right of Runtime: Acknowledged MAY be sent<br/>before Acknowledge.\n Note right of Driver: MAY perform an idempotent<br/>apply of last txn.\n Note left of Runtime: Runtime does NOT await<br/>Acknowledged before<br/>proceeding to send Load.\n Driver->>Runtime: Acknowledged\n Note left of Runtime: Runtime may now finalize<br/>a pipelined transaction.\n Note over Runtime, Driver: End of Acknowledge phase.\n Runtime->>Driver: Load<A>\n Note left of Runtime: Load keys may<br/> not exist (yet).\n Runtime->>Driver: Load<B>\n Note right of Driver: MAY evaluate Load immediately,<br/>or stage for deferred retrieval.\n Driver->>Runtime: Loaded<A>\n Runtime->>Driver: Load<C>\n Runtime->>Driver: Flush\n Driver->>Runtime: Loaded<C>\n Note right of Driver: Omits Loaded for keys<br/>that don't exist.\n Driver->>Runtime: Flushed\n Note left of Runtime: All existing keys<br/>have been retrieved.\n Note over Runtime, Driver: End of Load phase.\n Runtime->>Driver: Store<X>\n Runtime->>Driver: Store<Y>\n Runtime->>Driver: Store<Z>\n Runtime->>Driver: StartCommit{runtimeCP}\n Note right of Driver: * Completes all Store processing.<br/>* MAY include runtimeCP in DB txn.\n Note right of Driver: Commit to DB<br/>now underway.\n Driver->>Runtime: StartedCommit{driverCP}\n Note left of Runtime: Begins commit to<br/> recovery log.\n Note over Runtime, Driver: End of Store phase. Loops around<br/>to Acknowledge <=> Acknowledged.\n"}),"\n",(0,i.jsx)(t.h2,{id:"exactly-once-semantics",children:"Exactly-Once Semantics"}),"\n",(0,i.jsx)(t.p,{children:"The central tenant of transactional materializations is this:\nthere is a consumption checkpoint, and there is a state of the view.\nAs the materialization progresses, both the checkpoint and the view state will change.\nUpdates to the checkpoint and to the view state MUST always commit together,\nin the exact same transaction."}),"\n",(0,i.jsx)(t.p,{children:"Flow materialization tasks have a backing transactional recovery log,\nwhich is capable of durable commits that update both the checkpoint and also a\n(reasonably small) driver-defined state. More on driver states later."}),"\n",(0,i.jsx)(t.p,{children:"Many interesting endpoint systems are also fully transactional in nature."}),"\n",(0,i.jsx)(t.p,{children:"When implementing a materialization driver, the first question an implementor\nmust answer is: whose commit is authoritative?\nFlow's recovery log, or the materialized system?\nThis protocol supports either."}),"\n",(0,i.jsx)(t.h2,{id:"common-implementation-patterns",children:"Common Implementation Patterns"}),"\n",(0,i.jsx)(t.p,{children:"There are a few common implementation patterns for materializations. The choice\nof pattern depends on the transaction capabilities of the remote endpoint."}),"\n",(0,i.jsx)(t.h3,{id:"remote-store-is-authoritative",children:"Remote Store is Authoritative"}),"\n",(0,i.jsx)(t.p,{children:"In this pattern, the remote store (for example, a database) persists view states\nand the Flow consumption checkpoints which those views reflect. There are many\nsuch checkpoints: one per task split, and in this pattern the Flow recovery log\nis effectively ignored."}),"\n",(0,i.jsxs)(t.p,{children:["Typically this workflow runs in the context of a synchronous ",(0,i.jsx)(t.code,{children:"BEGIN/COMMIT"}),"\ntransaction, which updates table states and a Flow checkpoint together. The\ntransaction need be scoped only to the store phase of this workflow, as the\nmaterialization protocol requires only read-committed isolation semantics."]}),"\n",(0,i.jsx)(t.p,{children:'Flow is a distributed system, and an important consideration is the effect of a\n"zombie" assignment of a materialization task, which can race a newly-promoted\nassignment of that same task.'}),"\n",(0,i.jsx)(t.p,{children:'Fencing is a technique which uses the transactional capabilities of a store to\n"fence off" an older zombie assignment, such that it\'s prevented from committing\nfurther transactions. This avoids a failure mode where:'}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"New assignment N recovers a checkpoint at Ti."}),"\n",(0,i.jsx)(t.li,{children:"Zombie assignment Z commits another transaction at Ti+1."}),"\n",(0,i.jsx)(t.li,{children:"N beings processing from Ti, inadvertently duplicating the effects of Ti+1."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"When a remote store is authoritative, it must implement fencing behavior. As a\nsketch, the store can maintain a nonce value alongside the checkpoint of each\ntask split. The nonce is updated on each open of this RPC, and each commit\ntransaction then verifies that the nonce has not been changed."}),"\n",(0,i.jsx)(t.p,{children:"In the future, if another RPC opens and updates the nonce, it fences off this\ninstance of the task split and prevents it from committing further transactions."}),"\n",(0,i.jsx)(t.h3,{id:"recovery-log-with-non-transactional-store",children:"Recovery Log with Non-Transactional Store"}),"\n",(0,i.jsx)(t.p,{children:"In this pattern, the runtime's recovery log persists the Flow checkpoint and\nhandles fencing semantics. During the Load and Store phases, the driver directly\nmanipulates a non-transactional store or API, such as a key/value store."}),"\n",(0,i.jsx)(t.p,{children:"Note that this pattern is at-least-once. A transaction may fail part-way through\nand be restarted, causing its effects to be partially or fully replayed."}),"\n",(0,i.jsxs)(t.p,{children:["Care must be taken if the collection's schema has reduction annotations such as\n",(0,i.jsx)(t.code,{children:"sum"}),", as those reductions may be applied more than once due to a partially\ncompleted, but ultimately failed transaction."]}),"\n",(0,i.jsx)(t.p,{children:"If the collection's schema is last-write-wins, this mode still provides\neffectively-once behavior. Collections which aren't last-write-wins can be\nturned into last-write-wins through the use of derivations."}),"\n",(0,i.jsx)(t.h3,{id:"recovery-log-with-idempotent-apply",children:"Recovery Log with Idempotent Apply"}),"\n",(0,i.jsx)(t.p,{children:"In this pattern the recovery log is authoritative, but the driver uses external\nstable storage to stage the effects of a transaction -- rather than directly\napplying them to the store -- such that those effects can be idempotently\napplied after the transaction commits."}),"\n",(0,i.jsx)(t.p,{children:"This allows stores which feature a weaker transaction guarantee to still be\nused in an exactly-once way, so long as they support an idempotent apply\noperation."}),"\n",(0,i.jsx)(t.p,{children:'Driver checkpoints can facilitate this pattern. For example, a driver might\ngenerate a unique filename in S3 and reference it in its prepared checkpoint,\nwhich is committed to the recovery log. During the "store" phase, it writes to\nthis S3 file. After the transaction commits, it tells the store of the new file\nto incorporate. The store must handle idempotency, by applying the effects of\nthe unique file just once, even if told of the file multiple times.'}),"\n",(0,i.jsx)(t.p,{children:"A related extension of this pattern is for the driver to embed a Flow checkpoint\ninto its driver checkpoint. Doing so allows the driver to express an intention\nto restart from an older alternative checkpoint, as compared to the most recent\ncommitted checkpoint of the recovery log."}),"\n",(0,i.jsx)(t.p,{children:"As mentioned above, it's crucial that store states and checkpoints commit\ntogether. While seemingly bending that rule, this pattern is consistent with it\nbecause, on commit, the semantic contents of the store include BOTH its base\nstate, as well as the staged idempotent update. The store just may not know it\nyet, but eventually it must because of the retried idempotent apply."}),"\n",(0,i.jsxs)(t.p,{children:["Note the driver must therefore ensure that staged updates are fully applied\nbefore returning ",(0,i.jsx)(t.code,{children:"Loaded"})," responses, in order to provide the correct\nread-committed semantics required by the Flow runtime."]}),"\n",(0,i.jsx)(t.h3,{id:"push-only-endpoints--delta-updates",children:"Push-only Endpoints & Delta Updates"}),"\n",(0,i.jsx)(t.p,{children:'Some systems, such as APIs, Webhooks, and Pub/Sub, are push-only in nature. Flow\nmaterializations can run in a "delta updates" mode, where loads are always\nskipped and Flow does not attempt to store fully-reduced documents. Instead,\nduring the store phase, the runtime sends delta updates which reflect the\ncombined roll-up of collection documents processed only within this transaction.'}),"\n",(0,i.jsxs)(t.p,{children:["To illustrate the meaning of a delta update, consider documents which are simple\ncounters, having a collection schema that uses a ",(0,i.jsx)(t.code,{children:"sum"})," reduction strategy."]}),"\n",(0,i.jsxs)(t.p,{children:["Without delta updates, Flow would reduce documents -1, 3, and 2 by ",(0,i.jsx)(t.code,{children:"sum"})," to\narrive at document 4, which is stored. The next transaction, document 4 is\nloaded and reduced with 6, -7, and -1 to arrive at a new stored document 2. This\ndocument, 2, represents the full reduction of the collection documents\nmaterialized thus far."]}),"\n",(0,i.jsx)(t.p,{children:"Compare to delta updates mode: collection documents -1, 3, and 2 are combined to\nstore a delta-update document of 4. The next transaction starts anew, and 6, -7,\nand -1 combine to arrive at a delta-update document of -2. These delta updates\nare a windowed combine over documents seen in the current transaction only, and\nunlike before are not a full reduction of the document. If delta updates were\nwritten to pub/sub, note that a subscriber could further reduce over each delta\nupdate to recover the fully reduced document of 2."}),"\n",(0,i.jsxs)(t.p,{children:["Note that many use cases require only ",(0,i.jsx)(t.code,{children:"lastWriteWins"}),' reduction behavior, and\nfor these use cases delta updates does the "right thing" by trivially re-writing\neach document with its most recent version. This matches the behavior of Kafka\nConnect, for example.']}),"\n",(0,i.jsx)(t.h2,{id:"protocol-phases",children:"Protocol Phases"}),"\n",(0,i.jsx)(t.h3,{id:"acknowledge",children:"Acknowledge"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"Acknowledge"})," and ",(0,i.jsx)(t.code,{children:"Acknowledged"})," are always the first messages sent every\ntransaction, including the very first transaction of an RPC. The Runtime sends\n",(0,i.jsx)(t.code,{children:"Acknowledge"})," to indicate that the last transaction has committed to the\nrecovery log. The Driver sends ",(0,i.jsx)(t.code,{children:"Acknowledged"})," to indicate that its endpoint\ntransaction has committed."]}),"\n",(0,i.jsxs)(t.p,{children:["Acknowledge and Acknowledged ",(0,i.jsx)(t.em,{children:"are not ordered"}),". Acknowledged may be sent before\nAcknowledge and vice versa."]}),"\n",(0,i.jsxs)(t.p,{children:["The Runtime ",(0,i.jsx)(t.em,{children:"does not"})," wait for ",(0,i.jsx)(t.code,{children:"Acknowledged"})," before sending ",(0,i.jsx)(t.code,{children:"Load"})," messages.\nIn most cases the Driver should simply not read these ",(0,i.jsx)(t.code,{children:"Load"})," messages until it\nhas completed its own commit and sent its own ",(0,i.jsx)(t.code,{children:"Acknowledged"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["A Driver MAY instead process its commit and acknowledgment in the background\nwhile actively reading ",(0,i.jsx)(t.code,{children:"Load"})," messages. It MUST NOT evaluate ",(0,i.jsx)(t.code,{children:"Load"}),"s yet, as\nthis could otherwise be a violation of read-committed semantics, but it MAY\nstage them for deferred evaluation. This is ",(0,i.jsx)(t.strong,{children:"recommended"})," for Drivers that\nhave very long commit and/or acknowledgement operations. While a background\ncommit progresses the Flow runtime will optimistically pipeline the next\ntransaction, processing documents and preparing for when the Driver sends\n",(0,i.jsx)(t.code,{children:"Acknowledged"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:['Drivers following the "Recovery Log with Idempotent Apply" pattern must take\ncare to properly handle the very first acknowledgement phase of an RPC. At\nstartup, a driver cannot know if the last commit has been acknowledged. For\nexample, a previous RPC invocation may have failed immediately after commit but\nprior to acknowledgement. The Driver must thus idempotent-ly apply or re-apply\nchanges staged by a prior Driver invocation, and reply with ',(0,i.jsx)(t.code,{children:"Acknowledged"})," only\nonce done."]}),"\n",(0,i.jsx)(t.p,{children:"Drivers with transactional semantics SHOULD send Acknowledged immediately after\na previous, started commit completes."}),"\n",(0,i.jsx)(t.p,{children:"Drivers with at-least-once semantics SHOULD send Acknowledged immediately after\nsending StartedCommit."}),"\n",(0,i.jsx)(t.h3,{id:"load",children:"Load"}),"\n",(0,i.jsxs)(t.p,{children:["Zero or more ",(0,i.jsx)(t.code,{children:"Load"})," messages are sent by the Runtime with documents to fetch. A\ngiven document key will appear at most once in a transaction, and will not be\nrepeated across ",(0,i.jsx)(t.code,{children:"Load"})," messages."]}),"\n",(0,i.jsxs)(t.p,{children:["Drivers may immediately evaluate each ",(0,i.jsx)(t.code,{children:"Load"})," and respond, or may queue many keys\nto load and defer their evaluation. The Runtime does not await any individual\n",(0,i.jsx)(t.code,{children:"Load"})," requests."]}),"\n",(0,i.jsxs)(t.p,{children:["After the previous transaction has fully completed, and the driver has sent\n",(0,i.jsx)(t.code,{children:"Acknowledged"})," to the Runtime, the current transaction may begin to close."]}),"\n",(0,i.jsxs)(t.p,{children:["The Runtime indicates this by sending a ",(0,i.jsx)(t.code,{children:"Flush"})," message, which is NEVER sent\nbefore ",(0,i.jsx)(t.code,{children:"Acknowledged"})," is received. ",(0,i.jsx)(t.code,{children:"Acknowledged"})," is thus an important signal as\nto when the Runtime may begin to finalize an optimistic, pipelined transaction."]}),"\n",(0,i.jsxs)(t.p,{children:["On reading ",(0,i.jsx)(t.code,{children:"Flush"}),", Drivers must process all remaining ",(0,i.jsx)(t.code,{children:"Load"})," messages,\nincluding any deferred evaluations, and send all ",(0,i.jsx)(t.code,{children:"Loaded"})," responses prior to\nsending its own ",(0,i.jsx)(t.code,{children:"Flushed"})," response."]}),"\n",(0,i.jsxs)(t.p,{children:["This signals to the Runtime that all documents which can be loaded ",(0,i.jsx)(t.em,{children:"have"})," been\nloaded, and the transaction proceeds to the Store phase."]}),"\n",(0,i.jsxs)(t.p,{children:["Materialization bindings which are processing in delta-updates mode will never\nreceive a ",(0,i.jsx)(t.code,{children:"Load"})," message, but will receive a ",(0,i.jsx)(t.code,{children:"Flush"})," and must still respond with\n",(0,i.jsx)(t.code,{children:"Flushed"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"store",children:"Store"}),"\n",(0,i.jsxs)(t.p,{children:["Zero or more ",(0,i.jsx)(t.code,{children:"Store"})," messages are sent by the Runtime to the Driver, indicating\nkeys, documents, and extracted fields to store. No response is required of the\nDriver for these messages."]}),"\n",(0,i.jsxs)(t.p,{children:["Once all documents have been stored, the Runtime sends a ",(0,i.jsx)(t.code,{children:"StartCommit"})," message\nwhich carries its opaque runtime checkpoint."]}),"\n",(0,i.jsx)(t.p,{children:'Drivers implementing the "Remote Store is Authoritative" pattern must include\nthe runtime checkpoint in its current transaction, for retrieval in a future\nOpen of a new transactions RPC. Other driver patterns MAY ignore this\ncheckpoint.'}),"\n",(0,i.jsxs)(t.p,{children:["On reading ",(0,i.jsx)(t.code,{children:"StartCommit"})," the driver ensures that all ",(0,i.jsx)(t.code,{children:"Store"})," messages have been\nprocessed. It begins to commit its own transaction (where applicable), and then\nresponds with ",(0,i.jsx)(t.code,{children:"StartedCommit"})," which contain an update to the driver's\ncheckpoint."]}),"\n",(0,i.jsxs)(t.p,{children:["On the Runtime's receipt of ",(0,i.jsx)(t.code,{children:"StartedCommit"}),", the Runtime now knows that all\n",(0,i.jsx)(t.code,{children:"Store"})," messages have been fully processed. It preserves the updated Driver\ncheckpoint in its recovery log and begins to commit."]}),"\n",(0,i.jsx)(t.p,{children:"From here, the protocol loops back around to the Acknowledge phase."})]})}function m(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},61114:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(96540),o=n(99702),r=n(74848);o.N.initialize({startOnLoad:!0});const a=e=>{let{chart:t}=e;return(0,i.useEffect)((()=>{o.N.contentLoaded()}),[]),(0,r.jsx)("div",{className:"mermaid",children:t})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/5e95c892.af57b059.js b/pr-preview/pr-1594/assets/js/5e95c892.af57b059.js deleted file mode 100644 index 847ab7c59a..0000000000 --- a/pr-preview/pr-1594/assets/js/5e95c892.af57b059.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9647],{7121:(e,s,r)=>{r.r(s),r.d(s,{default:()=>l});r(96540);var t=r(34164),u=r(1003),a=r(17559),c=r(22831),n=r(58356),i=r(74848);function l(e){return(0,i.jsx)(u.e3,{className:(0,t.A)(a.G.wrapper.docsPages),children:(0,i.jsx)(n.A,{children:(0,c.v)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/61038276.4935de1d.js b/pr-preview/pr-1594/assets/js/61038276.4935de1d.js deleted file mode 100644 index 6c1f83fbf5..0000000000 --- a/pr-preview/pr-1594/assets/js/61038276.4935de1d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[354],{65918:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=t(74848),i=t(28453);const s={},o="Pinterest",c={id:"reference/Connectors/capture-connectors/pinterest",title:"Pinterest",description:"This connector captures data from Pinterest into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/pinterest.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/pinterest",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/pinterest.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Pendo",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo"},next:{title:"PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Supported Streams",id:"supported-streams",level:2},{value:"Performance Considerations",id:"performance-considerations",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"pinterest",children:"Pinterest"}),"\n",(0,r.jsx)(n.p,{children:"This connector captures data from Pinterest into Flow collections."}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-pinterest",":dev"," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"To set up the Pinterest source connector, you'll need the following prerequisites:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Pinterest App ID and secret key"}),"\n",(0,r.jsx)(n.li,{children:"Refresh Token"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,r.jsx)(n.p,{children:"Follow the steps below to set up the Pinterest source connector."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Log into your Estuary Flow account."}),"\n",(0,r.jsx)(n.li,{children:'Navigate to the "Captures" section'}),"\n",(0,r.jsx)(n.li,{children:'For the "Start Date," provide the date in YYYY-MM-DD format. Data added on and after this date will be replicated.'}),"\n",(0,r.jsx)(n.li,{children:'Next, go to "Authorization Method"'}),"\n",(0,r.jsx)(n.li,{children:'Authenticate your Pinterest account using OAuth2.0 or an Access Token. The OAuth2.0 authorization method is selected by default. For "Client ID" and "Client Secret," enter your Pinterest App ID and secret key. For the "Refresh Token," enter your Pinterest Refresh Token.\nClick "Set up source."'}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See ",(0,r.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Pinterest source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/start_date"})}),(0,r.jsx)(n.td,{children:"Start Date"}),(0,r.jsx)(n.td,{children:"A date in the format YYYY-MM-DD. If you have not set a date, it would be defaulted to latest allowed date by api (89 days from today)."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Resource of your Pinterest project from which collections are captured."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync Mode"}),(0,r.jsx)(n.td,{children:"Connection method."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "required": ["start_date", "credentials"],\n "properties": {\n "start_date": {\n "pattern_descriptor": null\n },\n "credentials": {\n "discriminator": {\n "propertyName": "auth_method"\n },\n "oneOf": [\n {\n "title": "OAuth2.0",\n "type": "object",\n "x-oauth2-provider": "pinterest",\n "properties": {\n "auth_method": {\n "const": "oauth2.0",\n "order": 0,\n "type": "string",\n "default": "oauth2.0"\n },\n "client_id": {\n "airbyte_secret": true,\n "description": "The Client ID of your OAuth application",\n "title": "Client ID",\n "type": "string"\n },\n "client_secret": {\n "airbyte_secret": true,\n "description": "The Client Secret of your OAuth application.",\n "title": "Client Secret",\n "type": "string"\n },\n "refresh_token": {\n "airbyte_secret": true,\n "description": "Refresh Token to obtain new Access Token, when it\'s expired.",\n "title": "Refresh Token",\n "type": "string"\n }\n },\n "required": [\n "auth_method",\n "refresh_token"\n ]\n },\n {\n "title": "Access Token",\n "type": "object",\n "properties": {\n "access_token": {\n "airbyte_secret": true,\n "description": "The Access Token to make authenticated requests.",\n "title": "Access Token",\n "type": "string"\n },\n "auth_method": {\n "const": "access_token",\n "order": 0,\n "type": "string",\n "default": "access_token"\n }\n },\n "required": [\n "auth_method",\n "access_token"\n ]\n }\n ]\n }\n }\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"supported-streams",children:"Supported Streams"}),"\n",(0,r.jsx)(n.p,{children:"The Pinterest source connector supports the following streams:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Account analytics (Incremental)"}),"\n",(0,r.jsx)(n.li,{children:"Boards (Full table)"}),"\n",(0,r.jsx)(n.li,{children:"Board sections (Full table)"}),"\n",(0,r.jsx)(n.li,{children:"Pins on board section (Full table)"}),"\n",(0,r.jsx)(n.li,{children:"Pins on board (Full table)"}),"\n",(0,r.jsx)(n.li,{children:"Ad accounts (Full table)"}),"\n",(0,r.jsx)(n.li,{children:"Ad account analytics (Incremental)"}),"\n",(0,r.jsx)(n.li,{children:"Campaigns (Incremental)"}),"\n",(0,r.jsx)(n.li,{children:"Campaign analytics (Incremental)"}),"\n",(0,r.jsx)(n.li,{children:"Ad groups (Incremental)"}),"\n",(0,r.jsx)(n.li,{children:"Ad group analytics (Incremental)"}),"\n",(0,r.jsx)(n.li,{children:"Ads (Incremental)"}),"\n",(0,r.jsx)(n.li,{children:"Ad analytics (Incremental)"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"performance-considerations",children:"Performance Considerations"}),"\n",(0,r.jsx)(n.p,{children:"The Pinterest API imposes certain rate limits for the connector. Please take note of the following limits:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Analytics streams: 300 calls per day per user"}),"\n",(0,r.jsx)(n.li,{children:"Ad accounts streams (Campaigns, Ad groups, Ads): 1000 calls per minute per user per app"}),"\n",(0,r.jsx)(n.li,{children:"Boards streams: 10 calls per second per user per app"}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"For any additional information or troubleshooting, refer to the official Pinterest API documentation."})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>c});var r=t(96540);const i={},s=r.createContext(i);function o(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/6181342c.6b6f6a4d.js b/pr-preview/pr-1594/assets/js/6181342c.6b6f6a4d.js deleted file mode 100644 index 58803d673d..0000000000 --- a/pr-preview/pr-1594/assets/js/6181342c.6b6f6a4d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7745],{12727:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>a,frontMatter:()=>i,metadata:()=>h,toc:()=>c});var t=r(74848),n=r(28453);const i={},o="Greenhouse",h={id:"reference/Connectors/capture-connectors/greenhouse",title:"Greenhouse",description:"This connector captures data from Greenhouse into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/greenhouse.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/greenhouse",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/greenhouse.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Sheets",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets"},next:{title:"Harvest",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest"}},l={},c=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"greenhouse",children:"Greenhouse"}),"\n",(0,t.jsx)(s.p,{children:"This connector captures data from Greenhouse into Flow collections."}),"\n",(0,t.jsxs)(s.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(s.a,{href:"https://ghcr.io/estuary/source-greenhouse:dev",children:(0,t.jsx)(s.code,{children:"ghcr.io/estuary/source-greenhouse:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(s.p,{children:"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system."}),"\n",(0,t.jsxs)(s.p,{children:["You can find their documentation ",(0,t.jsx)(s.a,{href:"https://docs.airbyte.com/integrations/sources/greenhouse/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(s.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(s.p,{children:"The following data resources are supported through the Greenhouse APIs:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-retrieve-activity-feed",children:"Activity Feed"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-applications",children:"Applications"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-scheduled-interviews-for-application",children:"Applications Interviews"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-approvals-for-job",children:"Approvals"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-candidates",children:"Candidates"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-close-reasons",children:"Close Reasons"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-custom-fields",children:"Custom Fields"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-degrees",children:"Degrees"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-departments",children:"Departments"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-approvals-for-job",children:"Disciplines"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-eeoc",children:"EEOC"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-email-templates",children:"Email Templates"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-scheduled-interviews",children:"Interviews"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-job-posts",children:"Job Posts"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-job-stages",children:"Job Stages"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-jobs",children:"Jobs"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-job-openings",children:"Job Openings"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-job-stages-for-job",children:"Jobs Stages"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-offers",children:"Offers"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-offices",children:"Offices"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-prospect-pools",children:"Prospect Pools"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-rejection-reasons",children:"Rejection Reasons"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-schools",children:"Schools"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-scorecards",children:"Scorecards"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-sources",children:"Sources"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-candidate-tags",children:"Tags"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-users",children:"Users"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#get-list-job-permissions",children:"User Permissions"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#the-user-role-object",children:"User Roles"})}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["To set up the Greenhouse source connector, you'll need the ",(0,t.jsx)(s.a,{href:"https://developers.greenhouse.io/harvest.html#authentication",children:"Harvest API key"})," with permissions to the resources Estuary Flow should be able to access."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(s.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Greenhouse source connector."]}),"\n",(0,t.jsx)(s.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(s.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Property"}),(0,t.jsx)(s.th,{children:"Title"}),(0,t.jsx)(s.th,{children:"Description"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Required/Default"})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/apikey"})}),(0,t.jsx)(s.td,{children:"API Key"}),(0,t.jsx)(s.td,{children:"The value of the Greenhouse API Key generated."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]})})]}),"\n",(0,t.jsx)(s.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Property"}),(0,t.jsx)(s.th,{children:"Title"}),(0,t.jsx)(s.th,{children:"Description"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Required/Default"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/stream"})})}),(0,t.jsx)(s.td,{children:"Stream"}),(0,t.jsx)(s.td,{children:"Resource of your Greenhouse project from which collections are captured."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/syncMode"})})}),(0,t.jsx)(s.td,{children:"Sync Mode"}),(0,t.jsx)(s.td,{children:"Connection method."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(s.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-greenhouse:dev\n config:\n apikey: <secret>\n bindings:\n - resource:\n stream: applications\n syncMode: full_refresh\n target: ${PREFIX}/applications\n {...}\n"})})]})}function a(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,s,r)=>{r.d(s,{R:()=>o,x:()=>h});var t=r(96540);const n={},i=t.createContext(n);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function h(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/635.c9ac7722.js b/pr-preview/pr-1594/assets/js/635.c9ac7722.js deleted file mode 100644 index a1fcbe18c8..0000000000 --- a/pr-preview/pr-1594/assets/js/635.c9ac7722.js +++ /dev/null @@ -1,26180 +0,0 @@ -"use strict"; -exports.id = 635; -exports.ids = [635]; -exports.modules = { - -/***/ 21176: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - Zp: () => (/* reexport */ layout) -}); - -// UNUSED EXPORTS: acyclic, normalize, rank - -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js -var uniqueId = __webpack_require__(5664); -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/map.js -var map = __webpack_require__(74722); -// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules -var range = __webpack_require__(91395); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js -var graphlib = __webpack_require__(697); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js -/* - * Simple doubly linked list implementation derived from Cormen, et al., - * "Introduction to Algorithms". - */ - - - -class List { - constructor() { - var sentinel = {}; - sentinel._next = sentinel._prev = sentinel; - this._sentinel = sentinel; - } - dequeue() { - var sentinel = this._sentinel; - var entry = sentinel._prev; - if (entry !== sentinel) { - unlink(entry); - return entry; - } - } - enqueue(entry) { - var sentinel = this._sentinel; - if (entry._prev && entry._next) { - unlink(entry); - } - entry._next = sentinel._next; - sentinel._next._prev = entry; - sentinel._next = entry; - entry._prev = sentinel; - } - toString() { - var strs = []; - var sentinel = this._sentinel; - var curr = sentinel._prev; - while (curr !== sentinel) { - strs.push(JSON.stringify(curr, filterOutLinks)); - curr = curr._prev; - } - return '[' + strs.join(', ') + ']'; - } -} - -function unlink(entry) { - entry._prev._next = entry._next; - entry._next._prev = entry._prev; - delete entry._next; - delete entry._prev; -} - -function filterOutLinks(k, v) { - if (k !== '_next' && k !== '_prev') { - return v; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js - - - - -/* - * A greedy heuristic for finding a feedback arc set for a graph. A feedback - * arc set is a set of edges that can be removed to make a graph acyclic. - * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and - * effective heuristic for the feedback arc set problem." This implementation - * adjusts that from the paper to allow for weighted edges. - */ - - -var DEFAULT_WEIGHT_FN = constant/* default */.A(1); - -function greedyFAS(g, weightFn) { - if (g.nodeCount() <= 1) { - return []; - } - var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); - var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); - - // Expand multi-edges - return flatten/* default */.A( - map/* default */.A(results, function (e) { - return g.outEdges(e.v, e.w); - }) - ); -} - -function doGreedyFAS(g, buckets, zeroIdx) { - var results = []; - var sources = buckets[buckets.length - 1]; - var sinks = buckets[0]; - - var entry; - while (g.nodeCount()) { - while ((entry = sinks.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - while ((entry = sources.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - if (g.nodeCount()) { - for (var i = buckets.length - 2; i > 0; --i) { - entry = buckets[i].dequeue(); - if (entry) { - results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); - break; - } - } - } - } - - return results; -} - -function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { - var results = collectPredecessors ? [] : undefined; - - forEach/* default */.A(g.inEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var uEntry = g.node(edge.v); - - if (collectPredecessors) { - results.push({ v: edge.v, w: edge.w }); - } - - uEntry.out -= weight; - assignBucket(buckets, zeroIdx, uEntry); - }); - - forEach/* default */.A(g.outEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var w = edge.w; - var wEntry = g.node(w); - wEntry['in'] -= weight; - assignBucket(buckets, zeroIdx, wEntry); - }); - - g.removeNode(entry.v); - - return results; -} - -function buildState(g, weightFn) { - var fasGraph = new graphlib/* Graph */.T(); - var maxIn = 0; - var maxOut = 0; - - forEach/* default */.A(g.nodes(), function (v) { - fasGraph.setNode(v, { v: v, in: 0, out: 0 }); - }); - - // Aggregate weights on nodes, but also sum the weights across multi-edges - // into a single edge for the fasGraph. - forEach/* default */.A(g.edges(), function (e) { - var prevWeight = fasGraph.edge(e.v, e.w) || 0; - var weight = weightFn(e); - var edgeWeight = prevWeight + weight; - fasGraph.setEdge(e.v, e.w, edgeWeight); - maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); - maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); - }); - - var buckets = range/* default */.A(maxOut + maxIn + 3).map(function () { - return new List(); - }); - var zeroIdx = maxIn + 1; - - forEach/* default */.A(fasGraph.nodes(), function (v) { - assignBucket(buckets, zeroIdx, fasGraph.node(v)); - }); - - return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; -} - -function assignBucket(buckets, zeroIdx, entry) { - if (!entry.out) { - buckets[0].enqueue(entry); - } else if (!entry['in']) { - buckets[buckets.length - 1].enqueue(entry); - } else { - buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js - - - - - -function run(g) { - var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); - forEach/* default */.A(fas, function (e) { - var label = g.edge(e); - g.removeEdge(e); - label.forwardName = e.name; - label.reversed = true; - g.setEdge(e.w, e.v, label, uniqueId/* default */.A('rev')); - }); - - function weightFn(g) { - return function (e) { - return g.edge(e).weight; - }; - } -} - -function dfsFAS(g) { - var fas = []; - var stack = {}; - var visited = {}; - - function dfs(v) { - if (has/* default */.A(visited, v)) { - return; - } - visited[v] = true; - stack[v] = true; - forEach/* default */.A(g.outEdges(v), function (e) { - if (has/* default */.A(stack, e.w)) { - fas.push(e); - } else { - dfs(e.w); - } - }); - delete stack[v]; - } - - forEach/* default */.A(g.nodes(), dfs); - return fas; -} - -function undo(g) { - forEach/* default */.A(g.edges(), function (e) { - var label = g.edge(e); - if (label.reversed) { - g.removeEdge(e); - - var forwardName = label.forwardName; - delete label.reversed; - delete label.forwardName; - g.setEdge(e.w, e.v, label, forwardName); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules -var merge = __webpack_require__(98879); -// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules -var pick = __webpack_require__(81942); -// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js -var defaults = __webpack_require__(23068); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js - - -/** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ -function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !(0,isSymbol/* default */.A)(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; -} - -/* harmony default export */ const _baseExtremum = (baseExtremum); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js -/** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ -function baseGt(value, other) { - return value > other; -} - -/* harmony default export */ const _baseGt = (baseGt); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js - - - - -/** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ -function max(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseGt) - : undefined; -} - -/* harmony default export */ const lodash_es_max = (max); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; -} - -/* harmony default export */ const lodash_es_last = (last); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js -var _baseAssignValue = __webpack_require__(52528); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js - - - - -/** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ -function mapValues(object, iteratee) { - var result = {}; - iteratee = (0,_baseIteratee/* default */.A)(iteratee, 3); - - (0,_baseForOwn/* default */.A)(object, function(value, key, object) { - (0,_baseAssignValue/* default */.A)(result, key, iteratee(value, key, object)); - }); - return result; -} - -/* harmony default export */ const lodash_es_mapValues = (mapValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js -/** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ -function baseLt(value, other) { - return value < other; -} - -/* harmony default export */ const _baseLt = (baseLt); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js - - - - -/** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ -function min(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_min = (min); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js -var _root = __webpack_require__(41917); -;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js - - -/** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ -var now = function() { - return _root/* default */.A.Date.now(); -}; - -/* harmony default export */ const lodash_es_now = (now); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js - - - - - -/* - * Adds a dummy node to the graph and return v. - */ -function addDummyNode(g, type, attrs, name) { - var v; - do { - v = uniqueId/* default */.A(name); - } while (g.hasNode(v)); - - attrs.dummy = type; - g.setNode(v, attrs); - return v; -} - -/* - * Returns a new graph with only simple edges. Handles aggregation of data - * associated with multi-edges. - */ -function simplify(g) { - var simplified = new graphlib/* Graph */.T().setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - simplified.setNode(v, g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; - var label = g.edge(e); - simplified.setEdge(e.v, e.w, { - weight: simpleLabel.weight + label.weight, - minlen: Math.max(simpleLabel.minlen, label.minlen), - }); - }); - return simplified; -} - -function asNonCompoundGraph(g) { - var simplified = new graphlib/* Graph */.T({ multigraph: g.isMultigraph() }).setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - if (!g.children(v).length) { - simplified.setNode(v, g.node(v)); - } - }); - forEach/* default */.A(g.edges(), function (e) { - simplified.setEdge(e, g.edge(e)); - }); - return simplified; -} - -function successorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var sucs = {}; - _.forEach(g.outEdges(v), function (e) { - sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; - }); - return sucs; - }); - return _.zipObject(g.nodes(), weightMap); -} - -function predecessorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var preds = {}; - _.forEach(g.inEdges(v), function (e) { - preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; - }); - return preds; - }); - return _.zipObject(g.nodes(), weightMap); -} - -/* - * Finds where a line starting at point ({x, y}) would intersect a rectangle - * ({x, y, width, height}) if it were pointing at the rectangle's center. - */ -function intersectRect(rect, point) { - var x = rect.x; - var y = rect.y; - - // Rectangle intersection algorithm from: - // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes - var dx = point.x - x; - var dy = point.y - y; - var w = rect.width / 2; - var h = rect.height / 2; - - if (!dx && !dy) { - throw new Error('Not possible to find intersection inside of the rectangle'); - } - - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - // Intersection is top or bottom of rect. - if (dy < 0) { - h = -h; - } - sx = (h * dx) / dy; - sy = h; - } else { - // Intersection is left or right of rect. - if (dx < 0) { - w = -w; - } - sx = w; - sy = (w * dy) / dx; - } - - return { x: x + sx, y: y + sy }; -} - -/* - * Given a DAG with each node assigned "rank" and "order" properties, this - * function will produce a matrix with the ids of each node. - */ -function buildLayerMatrix(g) { - var layering = map/* default */.A(range/* default */.A(util_maxRank(g) + 1), function () { - return []; - }); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - var rank = node.rank; - if (!isUndefined/* default */.A(rank)) { - layering[rank][node.order] = v; - } - }); - return layering; -} - -/* - * Adjusts the ranks for all nodes in the graph such that all nodes v have - * rank(v) >= 0 and at least one node w has rank(w) = 0. - */ -function normalizeRanks(g) { - var min = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (has/* default */.A(node, 'rank')) { - node.rank -= min; - } - }); -} - -function removeEmptyRanks(g) { - // Ranks may not start at 0, so we need to offset them - var offset = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - - var layers = []; - forEach/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank - offset; - if (!layers[rank]) { - layers[rank] = []; - } - layers[rank].push(v); - }); - - var delta = 0; - var nodeRankFactor = g.graph().nodeRankFactor; - forEach/* default */.A(layers, function (vs, i) { - if (isUndefined/* default */.A(vs) && i % nodeRankFactor !== 0) { - --delta; - } else if (delta) { - forEach/* default */.A(vs, function (v) { - g.node(v).rank += delta; - }); - } - }); -} - -function addBorderNode(g, prefix, rank, order) { - var node = { - width: 0, - height: 0, - }; - if (arguments.length >= 4) { - node.rank = rank; - node.order = order; - } - return addDummyNode(g, 'border', node, prefix); -} - -function util_maxRank(g) { - return lodash_es_max( - map/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank; - if (!isUndefined/* default */.A(rank)) { - return rank; - } - }) - ); -} - -/* - * Partition a collection into two groups: `lhs` and `rhs`. If the supplied - * function returns true for an entry it goes into `lhs`. Otherwise it goes - * into `rhs. - */ -function partition(collection, fn) { - var result = { lhs: [], rhs: [] }; - forEach/* default */.A(collection, function (value) { - if (fn(value)) { - result.lhs.push(value); - } else { - result.rhs.push(value); - } - }); - return result; -} - -/* - * Returns a new function that wraps `fn` with a timer. The wrapper logs the - * time it takes to execute the function. - */ -function util_time(name, fn) { - var start = lodash_es_now(); - try { - return fn(); - } finally { - console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); - } -} - -function notime(name, fn) { - return fn(); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js - - - - - -function addBorderSegments(g) { - function dfs(v) { - var children = g.children(v); - var node = g.node(v); - if (children.length) { - forEach/* default */.A(children, dfs); - } - - if (has/* default */.A(node, 'minRank')) { - node.borderLeft = []; - node.borderRight = []; - for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { - add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); - add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); - } - } - } - - forEach/* default */.A(g.children(), dfs); -} - -function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { - var label = { width: 0, height: 0, rank: rank, borderType: prop }; - var prev = sgNode[prop][rank - 1]; - var curr = addDummyNode(g, 'border', label, prefix); - sgNode[prop][rank] = curr; - g.setParent(curr, sg); - if (prev) { - g.setEdge(prev, curr, { weight: 1 }); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js - - - - -function adjust(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'lr' || rankDir === 'rl') { - swapWidthHeight(g); - } -} - -function coordinate_system_undo(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'bt' || rankDir === 'rl') { - reverseY(g); - } - - if (rankDir === 'lr' || rankDir === 'rl') { - swapXY(g); - swapWidthHeight(g); - } -} - -function swapWidthHeight(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapWidthHeightOne(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - swapWidthHeightOne(g.edge(e)); - }); -} - -function swapWidthHeightOne(attrs) { - var w = attrs.width; - attrs.width = attrs.height; - attrs.height = w; -} - -function reverseY(g) { - forEach/* default */.A(g.nodes(), function (v) { - reverseYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, reverseYOne); - if (has/* default */.A(edge, 'y')) { - reverseYOne(edge); - } - }); -} - -function reverseYOne(attrs) { - attrs.y = -attrs.y; -} - -function swapXY(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapXYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, swapXYOne); - if (has/* default */.A(edge, 'x')) { - swapXYOne(edge); - } - }); -} - -function swapXYOne(attrs) { - var x = attrs.x; - attrs.x = attrs.y; - attrs.y = x; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js - - - - - -/* - * Breaks any long edges in the graph into short segments that span 1 layer - * each. This operation is undoable with the denormalize function. - * - * Pre-conditions: - * - * 1. The input graph is a DAG. - * 2. Each node in the graph has a "rank" property. - * - * Post-condition: - * - * 1. All edges in the graph have a length of 1. - * 2. Dummy nodes are added where edges have been split into segments. - * 3. The graph is augmented with a "dummyChains" attribute which contains - * the first dummy in each chain of dummy nodes produced. - */ -function normalize_run(g) { - g.graph().dummyChains = []; - forEach/* default */.A(g.edges(), function (edge) { - normalizeEdge(g, edge); - }); -} - -function normalizeEdge(g, e) { - var v = e.v; - var vRank = g.node(v).rank; - var w = e.w; - var wRank = g.node(w).rank; - var name = e.name; - var edgeLabel = g.edge(e); - var labelRank = edgeLabel.labelRank; - - if (wRank === vRank + 1) return; - - g.removeEdge(e); - - var dummy, attrs, i; - for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { - edgeLabel.points = []; - attrs = { - width: 0, - height: 0, - edgeLabel: edgeLabel, - edgeObj: e, - rank: vRank, - }; - dummy = addDummyNode(g, 'edge', attrs, '_d'); - if (vRank === labelRank) { - attrs.width = edgeLabel.width; - attrs.height = edgeLabel.height; - // @ts-expect-error - attrs.dummy = 'edge-label'; - // @ts-expect-error - attrs.labelpos = edgeLabel.labelpos; - } - g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); - if (i === 0) { - g.graph().dummyChains.push(dummy); - } - v = dummy; - } - - g.setEdge(v, w, { weight: edgeLabel.weight }, name); -} - -function normalize_undo(g) { - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var origLabel = node.edgeLabel; - var w; - g.setEdge(node.edgeObj, origLabel); - while (node.dummy) { - w = g.successors(v)[0]; - g.removeNode(v); - origLabel.points.push({ x: node.x, y: node.y }); - if (node.dummy === 'edge-label') { - origLabel.x = node.x; - origLabel.y = node.y; - origLabel.width = node.width; - origLabel.height = node.height; - } - v = w; - node = g.node(v); - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js - - - - -/** - * This method is like `_.min` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * the value is ranked. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Math - * @param {Array} array The array to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {*} Returns the minimum value. - * @example - * - * var objects = [{ 'n': 1 }, { 'n': 2 }]; - * - * _.minBy(objects, function(o) { return o.n; }); - * // => { 'n': 1 } - * - * // The `_.property` iteratee shorthand. - * _.minBy(objects, 'n'); - * // => { 'n': 1 } - */ -function minBy(array, iteratee) { - return (array && array.length) - ? _baseExtremum(array, (0,_baseIteratee/* default */.A)(iteratee, 2), _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_minBy = (minBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js - - - - -/* - * Initializes ranks for the input graph using the longest path algorithm. This - * algorithm scales well and is fast in practice, it yields rather poor - * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom - * ranks wide and leaving edges longer than necessary. However, due to its - * speed, this algorithm is good for getting an initial ranking that can be fed - * into other algorithms. - * - * This algorithm does not normalize layers because it will be used by other - * algorithms in most cases. If using this algorithm directly, be sure to - * run normalize at the end. - * - * Pre-conditions: - * - * 1. Input graph is a DAG. - * 2. Input graph node labels can be assigned properties. - * - * Post-conditions: - * - * 1. Each node will be assign an (unnormalized) "rank" property. - */ -function longestPath(g) { - var visited = {}; - - function dfs(v) { - var label = g.node(v); - if (has/* default */.A(visited, v)) { - return label.rank; - } - visited[v] = true; - - var rank = lodash_es_min( - map/* default */.A(g.outEdges(v), function (e) { - return dfs(e.w) - g.edge(e).minlen; - }) - ); - - if ( - rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 - rank === undefined || // return value of _.map([]) for Lodash 4 - rank === null - ) { - // return value of _.map([null]) - rank = 0; - } - - return (label.rank = rank); - } - - forEach/* default */.A(g.sources(), dfs); -} - -/* - * Returns the amount of slack for the given edge. The slack is defined as the - * difference between the length of the edge and its minimum length. - */ -function slack(g, e) { - return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js - - - - - - -/* - * Constructs a spanning tree with tight edges and adjusted the input node's - * ranks to achieve this. A tight edge is one that is has a length that matches - * its "minlen" attribute. - * - * The basic structure for this function is derived from Gansner, et al., "A - * Technique for Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a DAG. - * 2. Graph must be connected. - * 3. Graph must have at least one node. - * 5. Graph nodes must have been previously assigned a "rank" property that - * respects the "minlen" property of incident edges. - * 6. Graph edges must have a "minlen" property. - * - * Post-conditions: - * - * - Graph nodes will have their rank adjusted to ensure that all edges are - * tight. - * - * Returns a tree (undirected graph) that is constructed using only "tight" - * edges. - */ -function feasibleTree(g) { - var t = new graphlib/* Graph */.T({ directed: false }); - - // Choose arbitrary node from which to start our tree - var start = g.nodes()[0]; - var size = g.nodeCount(); - t.setNode(start, {}); - - var edge, delta; - while (tightTree(t, g) < size) { - edge = findMinSlackEdge(t, g); - delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); - shiftRanks(t, g, delta); - } - - return t; -} - -/* - * Finds a maximal tree of tight edges and returns the number of nodes in the - * tree. - */ -function tightTree(t, g) { - function dfs(v) { - forEach/* default */.A(g.nodeEdges(v), function (e) { - var edgeV = e.v, - w = v === edgeV ? e.w : edgeV; - if (!t.hasNode(w) && !slack(g, e)) { - t.setNode(w, {}); - t.setEdge(v, w, {}); - dfs(w); - } - }); - } - - forEach/* default */.A(t.nodes(), dfs); - return t.nodeCount(); -} - -/* - * Finds the edge with the smallest slack that is incident on tree and returns - * it. - */ -function findMinSlackEdge(t, g) { - return lodash_es_minBy(g.edges(), function (e) { - if (t.hasNode(e.v) !== t.hasNode(e.w)) { - return slack(g, e); - } - }); -} - -function shiftRanks(t, g, delta) { - forEach/* default */.A(t.nodes(), function (v) { - g.node(v).rank += delta; - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js - - - - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!(0,isArrayLike/* default */.A)(collection)) { - var iteratee = (0,_baseIteratee/* default */.A)(predicate, 3); - collection = (0,keys/* default */.A)(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; -} - -/* harmony default export */ const _createFind = (createFind); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js - - -/** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ -function toInteger(value) { - var result = (0,toFinite/* default */.A)(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; -} - -/* harmony default export */ const lodash_es_toInteger = (toInteger); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return (0,_baseFindIndex/* default */.A)(array, (0,_baseIteratee/* default */.A)(predicate, 3), index); -} - -/* harmony default export */ const lodash_es_findIndex = (findIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js - - - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = _createFind(lodash_es_findIndex); - -/* harmony default export */ const lodash_es_find = (find); - -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js - - - - - -var DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function dijkstra_dijkstra(g, source, weightFn, edgeFn) { - return runDijkstra( - g, - String(source), - weightFn || DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runDijkstra(g, source, weightFn, edgeFn) { - var results = {}; - var pq = new PriorityQueue(); - var v, vEntry; - - var updateNeighbors = function (edge) { - var w = edge.v !== v ? edge.v : edge.w; - var wEntry = results[w]; - var weight = weightFn(edge); - var distance = vEntry.distance + weight; - - if (weight < 0) { - throw new Error( - 'dijkstra does not allow negative edge weights. ' + - 'Bad edge: ' + - edge + - ' Weight: ' + - weight - ); - } - - if (distance < wEntry.distance) { - wEntry.distance = distance; - wEntry.predecessor = v; - pq.decrease(w, distance); - } - }; - - g.nodes().forEach(function (v) { - var distance = v === source ? 0 : Number.POSITIVE_INFINITY; - results[v] = { distance: distance }; - pq.add(v, distance); - }); - - while (pq.size() > 0) { - v = pq.removeMin(); - vEntry = results[v]; - if (vEntry.distance === Number.POSITIVE_INFINITY) { - break; - } - - edgeFn(v).forEach(updateNeighbors); - } - - return results; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js - - - - - -function dijkstraAll(g, weightFunc, edgeFunc) { - return _.transform( - g.nodes(), - function (acc, v) { - acc[v] = dijkstra(g, v, weightFunc, edgeFunc); - }, - {} - ); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js - - - - -var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function floydWarshall(g, weightFn, edgeFn) { - return runFloydWarshall( - g, - weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runFloydWarshall(g, weightFn, edgeFn) { - var results = {}; - var nodes = g.nodes(); - - nodes.forEach(function (v) { - results[v] = {}; - results[v][v] = { distance: 0 }; - nodes.forEach(function (w) { - if (v !== w) { - results[v][w] = { distance: Number.POSITIVE_INFINITY }; - } - }); - edgeFn(v).forEach(function (edge) { - var w = edge.v === v ? edge.w : edge.v; - var d = weightFn(edge); - results[v][w] = { distance: d, predecessor: v }; - }); - }); - - nodes.forEach(function (k) { - var rowK = results[k]; - nodes.forEach(function (i) { - var rowI = results[i]; - nodes.forEach(function (j) { - var ik = rowI[k]; - var kj = rowK[j]; - var ij = rowI[j]; - var altDistance = ik.distance + kj.distance; - if (altDistance < ij.distance) { - ij.distance = altDistance; - ij.predecessor = kj.predecessor; - } - }); - }); - }); - - return results; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules -var _baseKeys = __webpack_require__(69471); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules -var _baseGetTag = __webpack_require__(88496); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js - - - - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!(0,isArray/* default */.A)(value) && (0,isObjectLike/* default */.A)(value) && (0,_baseGetTag/* default */.A)(value) == stringTag); -} - -/* harmony default export */ const lodash_es_isString = (isString); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js - - -/** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -var asciiSize = (0,_baseProperty/* default */.A)('length'); - -/* harmony default export */ const _asciiSize = (asciiSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -/* harmony default export */ const _hasUnicode = (hasUnicode); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js -/** Used to compose unicode character classes. */ -var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', - _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', - _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', - _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', - _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, - _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', - rsCombo = '[' + _unicodeSize_rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - _unicodeSize_rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', - rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; -} - -/* harmony default export */ const _unicodeSize = (unicodeSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js - - - - -/** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ -function stringSize(string) { - return _hasUnicode(string) - ? _unicodeSize(string) - : _asciiSize(string); -} - -/* harmony default export */ const _stringSize = (stringSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js - - - - - - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ -function size(collection) { - if (collection == null) { - return 0; - } - if ((0,isArrayLike/* default */.A)(collection)) { - return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; - } - var tag = (0,_getTag/* default */.A)(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return (0,_baseKeys/* default */.A)(collection).length; -} - -/* harmony default export */ const lodash_es_size = (size); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js - - - - -topsort_topsort.CycleException = topsort_CycleException; - -function topsort_topsort(g) { - var visited = {}; - var stack = {}; - var results = []; - - function visit(node) { - if (has/* default */.A(stack, node)) { - throw new topsort_CycleException(); - } - - if (!has/* default */.A(visited, node)) { - stack[node] = true; - visited[node] = true; - forEach/* default */.A(g.predecessors(node), visit); - delete stack[node]; - results.push(node); - } - } - - forEach/* default */.A(g.sinks(), visit); - - if (lodash_es_size(visited) !== g.nodeCount()) { - throw new topsort_CycleException(); - } - - return results; -} - -function topsort_CycleException() {} -topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js - - - - -function isAcyclic(g) { - try { - topsort(g); - } catch (e) { - if (e instanceof CycleException) { - return false; - } - throw e; - } - return true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js - - - - -/* - * A helper that preforms a pre- or post-order traversal on the input graph - * and returns the nodes in the order they were visited. If the graph is - * undirected then this algorithm will navigate using neighbors. If the graph - * is directed then this algorithm will navigate using successors. - * - * Order must be one of "pre" or "post". - */ -function dfs(g, vs, order) { - if (!isArray/* default */.A(vs)) { - vs = [vs]; - } - - var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); - - var acc = []; - var visited = {}; - forEach/* default */.A(vs, function (v) { - if (!g.hasNode(v)) { - throw new Error('Graph does not have node: ' + v); - } - - doDfs(g, v, order === 'post', visited, navigation, acc); - }); - return acc; -} - -function doDfs(g, v, postorder, visited, navigation, acc) { - if (!has/* default */.A(visited, v)) { - visited[v] = true; - - if (!postorder) { - acc.push(v); - } - forEach/* default */.A(navigation(v), function (w) { - doDfs(g, w, postorder, visited, navigation, acc); - }); - if (postorder) { - acc.push(v); - } - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js - - - - -function postorder(g, vs) { - return dfs(g, vs, 'post'); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js - - - - -function preorder(g, vs) { - return dfs(g, vs, 'pre'); -} - -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules -var graph = __webpack_require__(73046); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js - - - - - - -function prim(g, weightFunc) { - var result = new Graph(); - var parents = {}; - var pq = new PriorityQueue(); - var v; - - function updateNeighbors(edge) { - var w = edge.v === v ? edge.w : edge.v; - var pri = pq.priority(w); - if (pri !== undefined) { - var edgeWeight = weightFunc(edge); - if (edgeWeight < pri) { - parents[w] = v; - pq.decrease(w, edgeWeight); - } - } - } - - if (g.nodeCount() === 0) { - return result; - } - - _.each(g.nodes(), function (v) { - pq.add(v, Number.POSITIVE_INFINITY); - result.setNode(v); - }); - - // Start from an arbitrary node - pq.decrease(g.nodes()[0], 0); - - var init = false; - while (pq.size() > 0) { - v = pq.removeMin(); - if (_.has(parents, v)) { - result.setEdge(v, parents[v]); - } else if (init) { - throw new Error('Input graph is not connected: ' + g); - } else { - init = true; - } - - g.nodeEdges(v).forEach(updateNeighbors); - } - - return result; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js - - - - - - - - - - - - - - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js - - - - - - - - -// Expose some internals for testing purposes -networkSimplex.initLowLimValues = initLowLimValues; -networkSimplex.initCutValues = initCutValues; -networkSimplex.calcCutValue = calcCutValue; -networkSimplex.leaveEdge = leaveEdge; -networkSimplex.enterEdge = enterEdge; -networkSimplex.exchangeEdges = exchangeEdges; - -/* - * The network simplex algorithm assigns ranks to each node in the input graph - * and iteratively improves the ranking to reduce the length of edges. - * - * Preconditions: - * - * 1. The input graph must be a DAG. - * 2. All nodes in the graph must have an object value. - * 3. All edges in the graph must have "minlen" and "weight" attributes. - * - * Postconditions: - * - * 1. All nodes in the graph will have an assigned "rank" attribute that has - * been optimized by the network simplex algorithm. Ranks start at 0. - * - * - * A rough sketch of the algorithm is as follows: - * - * 1. Assign initial ranks to each node. We use the longest path algorithm, - * which assigns ranks to the lowest position possible. In general this - * leads to very wide bottom ranks and unnecessarily long edges. - * 2. Construct a feasible tight tree. A tight tree is one such that all - * edges in the tree have no slack (difference between length of edge - * and minlen for the edge). This by itself greatly improves the assigned - * rankings by shorting edges. - * 3. Iteratively find edges that have negative cut values. Generally a - * negative cut value indicates that the edge could be removed and a new - * tree edge could be added to produce a more compact graph. - * - * Much of the algorithms here are derived from Gansner, et al., "A Technique - * for Drawing Directed Graphs." The structure of the file roughly follows the - * structure of the overall algorithm. - */ -function networkSimplex(g) { - g = simplify(g); - longestPath(g); - var t = feasibleTree(g); - initLowLimValues(t); - initCutValues(t, g); - - var e, f; - while ((e = leaveEdge(t))) { - f = enterEdge(t, g, e); - exchangeEdges(t, g, e, f); - } -} - -/* - * Initializes cut values for all edges in the tree. - */ -function initCutValues(t, g) { - var vs = postorder(t, t.nodes()); - vs = vs.slice(0, vs.length - 1); - forEach/* default */.A(vs, function (v) { - assignCutValue(t, g, v); - }); -} - -function assignCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - t.edge(child, parent).cutvalue = calcCutValue(t, g, child); -} - -/* - * Given the tight tree, its graph, and a child in the graph calculate and - * return the cut value for the edge between the child and its parent. - */ -function calcCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - // True if the child is on the tail end of the edge in the directed graph - var childIsTail = true; - // The graph's view of the tree edge we're inspecting - var graphEdge = g.edge(child, parent); - // The accumulated cut value for the edge between this node and its parent - var cutValue = 0; - - if (!graphEdge) { - childIsTail = false; - graphEdge = g.edge(parent, child); - } - - cutValue = graphEdge.weight; - - forEach/* default */.A(g.nodeEdges(child), function (e) { - var isOutEdge = e.v === child, - other = isOutEdge ? e.w : e.v; - - if (other !== parent) { - var pointsToHead = isOutEdge === childIsTail, - otherWeight = g.edge(e).weight; - - cutValue += pointsToHead ? otherWeight : -otherWeight; - if (isTreeEdge(t, child, other)) { - var otherCutValue = t.edge(child, other).cutvalue; - cutValue += pointsToHead ? -otherCutValue : otherCutValue; - } - } - }); - - return cutValue; -} - -function initLowLimValues(tree, root) { - if (arguments.length < 2) { - root = tree.nodes()[0]; - } - dfsAssignLowLim(tree, {}, 1, root); -} - -function dfsAssignLowLim(tree, visited, nextLim, v, parent) { - var low = nextLim; - var label = tree.node(v); - - visited[v] = true; - forEach/* default */.A(tree.neighbors(v), function (w) { - if (!has/* default */.A(visited, w)) { - nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); - } - }); - - label.low = low; - label.lim = nextLim++; - if (parent) { - label.parent = parent; - } else { - // TODO should be able to remove this when we incrementally update low lim - delete label.parent; - } - - return nextLim; -} - -function leaveEdge(tree) { - return lodash_es_find(tree.edges(), function (e) { - return tree.edge(e).cutvalue < 0; - }); -} - -function enterEdge(t, g, edge) { - var v = edge.v; - var w = edge.w; - - // For the rest of this function we assume that v is the tail and w is the - // head, so if we don't have this edge in the graph we should flip it to - // match the correct orientation. - if (!g.hasEdge(v, w)) { - v = edge.w; - w = edge.v; - } - - var vLabel = t.node(v); - var wLabel = t.node(w); - var tailLabel = vLabel; - var flip = false; - - // If the root is in the tail of the edge then we need to flip the logic that - // checks for the head and tail nodes in the candidates function below. - if (vLabel.lim > wLabel.lim) { - tailLabel = wLabel; - flip = true; - } - - var candidates = filter/* default */.A(g.edges(), function (edge) { - return ( - flip === isDescendant(t, t.node(edge.v), tailLabel) && - flip !== isDescendant(t, t.node(edge.w), tailLabel) - ); - }); - - return lodash_es_minBy(candidates, function (edge) { - return slack(g, edge); - }); -} - -function exchangeEdges(t, g, e, f) { - var v = e.v; - var w = e.w; - t.removeEdge(v, w); - t.setEdge(f.v, f.w, {}); - initLowLimValues(t); - initCutValues(t, g); - updateRanks(t, g); -} - -function updateRanks(t, g) { - var root = lodash_es_find(t.nodes(), function (v) { - return !g.node(v).parent; - }); - var vs = preorder(t, root); - vs = vs.slice(1); - forEach/* default */.A(vs, function (v) { - var parent = t.node(v).parent, - edge = g.edge(v, parent), - flipped = false; - - if (!edge) { - edge = g.edge(parent, v); - flipped = true; - } - - g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); - }); -} - -/* - * Returns true if the edge is in the tree. - */ -function isTreeEdge(tree, u, v) { - return tree.hasEdge(u, v); -} - -/* - * Returns true if the specified node is descendant of the root node per the - * assigned low and lim attributes in the tree. - */ -function isDescendant(tree, vLabel, rootLabel) { - return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js - - - - - - -/* - * Assigns a rank to each node in the input graph that respects the "minlen" - * constraint specified on edges between nodes. - * - * This basic structure is derived from Gansner, et al., "A Technique for - * Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a connected DAG - * 2. Graph nodes must be objects - * 3. Graph edges must have "weight" and "minlen" attributes - * - * Post-conditions: - * - * 1. Graph nodes will have a "rank" attribute based on the results of the - * algorithm. Ranks can start at any index (including negative), we'll - * fix them up later. - */ -function rank(g) { - switch (g.graph().ranker) { - case 'network-simplex': - networkSimplexRanker(g); - break; - case 'tight-tree': - tightTreeRanker(g); - break; - case 'longest-path': - longestPathRanker(g); - break; - default: - networkSimplexRanker(g); - } -} - -// A fast and simple ranker, but results are far from optimal. -var longestPathRanker = longestPath; - -function tightTreeRanker(g) { - longestPath(g); - feasibleTree(g); -} - -function networkSimplexRanker(g) { - networkSimplex(g); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js - - - - - -/* - * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, - * adds appropriate edges to ensure that all cluster nodes are placed between - * these boundries, and ensures that the graph is connected. - * - * In addition we ensure, through the use of the minlen property, that nodes - * and subgraph border nodes to not end up on the same rank. - * - * Preconditions: - * - * 1. Input graph is a DAG - * 2. Nodes in the input graph has a minlen attribute - * - * Postconditions: - * - * 1. Input graph is connected. - * 2. Dummy nodes are added for the tops and bottoms of subgraphs. - * 3. The minlen attribute for nodes is adjusted to ensure nodes do not - * get placed on the same rank as subgraph border nodes. - * - * The nesting graph idea comes from Sander, "Layout of Compound Directed - * Graphs." - */ -function nesting_graph_run(g) { - var root = addDummyNode(g, 'root', {}, '_root'); - var depths = treeDepths(g); - var height = lodash_es_max(values/* default */.A(depths)) - 1; // Note: depths is an Object not an array - var nodeSep = 2 * height + 1; - - g.graph().nestingRoot = root; - - // Multiply minlen by nodeSep to align nodes on non-border ranks. - forEach/* default */.A(g.edges(), function (e) { - g.edge(e).minlen *= nodeSep; - }); - - // Calculate a weight that is sufficient to keep subgraphs vertically compact - var weight = sumWeights(g) + 1; - - // Create border nodes and link them up - forEach/* default */.A(g.children(), function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - }); - - // Save the multiplier for node layers for later removal of empty border - // layers. - g.graph().nodeRankFactor = nodeSep; -} - -function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { - var children = g.children(v); - if (!children.length) { - if (v !== root) { - g.setEdge(root, v, { weight: 0, minlen: nodeSep }); - } - return; - } - - var top = addBorderNode(g, '_bt'); - var bottom = addBorderNode(g, '_bb'); - var label = g.node(v); - - g.setParent(top, v); - label.borderTop = top; - g.setParent(bottom, v); - label.borderBottom = bottom; - - forEach/* default */.A(children, function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - - var childNode = g.node(child); - var childTop = childNode.borderTop ? childNode.borderTop : child; - var childBottom = childNode.borderBottom ? childNode.borderBottom : child; - var thisWeight = childNode.borderTop ? weight : 2 * weight; - var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; - - g.setEdge(top, childTop, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - - g.setEdge(childBottom, bottom, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - }); - - if (!g.parent(v)) { - g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); - } -} - -function treeDepths(g) { - var depths = {}; - function dfs(v, depth) { - var children = g.children(v); - if (children && children.length) { - forEach/* default */.A(children, function (child) { - dfs(child, depth + 1); - }); - } - depths[v] = depth; - } - forEach/* default */.A(g.children(), function (v) { - dfs(v, 1); - }); - return depths; -} - -function sumWeights(g) { - return reduce/* default */.A( - g.edges(), - function (acc, e) { - return acc + g.edge(e).weight; - }, - 0 - ); -} - -function cleanup(g) { - var graphLabel = g.graph(); - g.removeNode(graphLabel.nestingRoot); - delete graphLabel.nestingRoot; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.nestingEdge) { - g.removeEdge(e); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules -var _baseClone = __webpack_require__(91641); -;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return (0,_baseClone/* default */.A)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js - - - - -function addSubgraphConstraints(g, cg, vs) { - var prev = {}, - rootPrev; - - forEach/* default */.A(vs, function (v) { - var child = g.parent(v), - parent, - prevChild; - while (child) { - parent = g.parent(child); - if (parent) { - prevChild = prev[parent]; - prev[parent] = child; - } else { - prevChild = rootPrev; - rootPrev = child; - } - if (prevChild && prevChild !== child) { - cg.setEdge(prevChild, child); - return; - } - child = parent; - } - }); - - /* - function dfs(v) { - var children = v ? g.children(v) : g.children(); - if (children.length) { - var min = Number.POSITIVE_INFINITY, - subgraphs = []; - _.each(children, function(child) { - var childMin = dfs(child); - if (g.children(child).length) { - subgraphs.push({ v: child, order: childMin }); - } - min = Math.min(min, childMin); - }); - _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { - cg.setEdge(prev.v, curr.v); - return curr; - }); - return min; - } - return g.node(v).order; - } - dfs(undefined); - */ -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js - - - - - -/* - * Constructs a graph that can be used to sort a layer of nodes. The graph will - * contain all base and subgraph nodes from the request layer in their original - * hierarchy and any edges that are incident on these nodes and are of the type - * requested by the "relationship" parameter. - * - * Nodes from the requested rank that do not have parents are assigned a root - * node in the output graph, which is set in the root graph attribute. This - * makes it easy to walk the hierarchy of movable nodes during ordering. - * - * Pre-conditions: - * - * 1. Input graph is a DAG - * 2. Base nodes in the input graph have a rank attribute - * 3. Subgraph nodes in the input graph has minRank and maxRank attributes - * 4. Edges have an assigned weight - * - * Post-conditions: - * - * 1. Output graph has all nodes in the movable rank with preserved - * hierarchy. - * 2. Root nodes in the movable layer are made children of the node - * indicated by the root attribute of the graph. - * 3. Non-movable nodes incident on movable nodes, selected by the - * relationship parameter, are included in the graph (without hierarchy). - * 4. Edges incident on movable nodes, selected by the relationship - * parameter, are added to the output graph. - * 5. The weights for copied edges are aggregated as need, since the output - * graph is not a multi-graph. - */ -function buildLayerGraph(g, rank, relationship) { - var root = createRootNode(g), - result = new graphlib/* Graph */.T({ compound: true }) - .setGraph({ root: root }) - .setDefaultNodeLabel(function (v) { - return g.node(v); - }); - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v), - parent = g.parent(v); - - if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { - result.setNode(v); - result.setParent(v, parent || root); - - // This assumes we have only short edges! - forEach/* default */.A(g[relationship](v), function (e) { - var u = e.v === v ? e.w : e.v, - edge = result.edge(u, v), - weight = !isUndefined/* default */.A(edge) ? edge.weight : 0; - result.setEdge(u, v, { weight: g.edge(e).weight + weight }); - }); - - if (has/* default */.A(node, 'minRank')) { - result.setNode(v, { - borderLeft: node.borderLeft[rank], - borderRight: node.borderRight[rank], - }); - } - } - }); - - return result; -} - -function createRootNode(g) { - var v; - while (g.hasNode((v = uniqueId/* default */.A('_root')))); - return v; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js -/** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ -function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; -} - -/* harmony default export */ const _baseZipObject = (baseZipObject); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js - - - -/** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ -function zipObject(props, values) { - return _baseZipObject(props || [], values || [], _assignValue/* default */.A); -} - -/* harmony default export */ const lodash_es_zipObject = (zipObject); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js -var _baseMap = __webpack_require__(52568); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js -/** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ -function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; -} - -/* harmony default export */ const _baseSortBy = (baseSortBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js - - -/** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ -function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = (0,isSymbol/* default */.A)(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = (0,isSymbol/* default */.A)(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; -} - -/* harmony default export */ const _compareAscending = (compareAscending); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js - - -/** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ -function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = _compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; -} - -/* harmony default export */ const _compareMultiple = (compareMultiple); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js - - - - - - - - - - -/** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ -function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - if ((0,isArray/* default */.A)(iteratee)) { - return function(value) { - return (0,_baseGet/* default */.A)(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } - } - return iteratee; - }); - } else { - iteratees = [identity/* default */.A]; - } - - var index = -1; - iteratees = (0,_arrayMap/* default */.A)(iteratees, (0,_baseUnary/* default */.A)(_baseIteratee/* default */.A)); - - var result = (0,_baseMap/* default */.A)(collection, function(value, key, collection) { - var criteria = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return _baseSortBy(result, function(object, other) { - return _compareMultiple(object, other, orders); - }); -} - -/* harmony default export */ const _baseOrderBy = (baseOrderBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js - - - - - -/** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 30 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] - */ -var sortBy = (0,_baseRest/* default */.A)(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && (0,_isIterateeCall/* default */.A)(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && (0,_isIterateeCall/* default */.A)(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return _baseOrderBy(collection, (0,_baseFlatten/* default */.A)(iteratees, 1), []); -}); - -/* harmony default export */ const lodash_es_sortBy = (sortBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js - - - - -/* - * A function that takes a layering (an array of layers, each with an array of - * ordererd nodes) and a graph and returns a weighted crossing count. - * - * Pre-conditions: - * - * 1. Input graph must be simple (not a multigraph), directed, and include - * only simple edges. - * 2. Edges in the input graph must have assigned weights. - * - * Post-conditions: - * - * 1. The graph and layering matrix are left unchanged. - * - * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." - */ -function crossCount(g, layering) { - var cc = 0; - for (var i = 1; i < layering.length; ++i) { - cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); - } - return cc; -} - -function twoLayerCrossCount(g, northLayer, southLayer) { - // Sort all of the edges between the north and south layers by their position - // in the north layer and then the south. Map these edges to the position of - // their head in the south layer. - var southPos = lodash_es_zipObject( - southLayer, - map/* default */.A(southLayer, function (v, i) { - return i; - }) - ); - var southEntries = flatten/* default */.A( - map/* default */.A(northLayer, function (v) { - return lodash_es_sortBy( - map/* default */.A(g.outEdges(v), function (e) { - return { pos: southPos[e.w], weight: g.edge(e).weight }; - }), - 'pos' - ); - }) - ); - - // Build the accumulator tree - var firstIndex = 1; - while (firstIndex < southLayer.length) firstIndex <<= 1; - var treeSize = 2 * firstIndex - 1; - firstIndex -= 1; - var tree = map/* default */.A(new Array(treeSize), function () { - return 0; - }); - - // Calculate the weighted crossings - var cc = 0; - forEach/* default */.A( - // @ts-expect-error - southEntries.forEach(function (entry) { - var index = entry.pos + firstIndex; - tree[index] += entry.weight; - var weightSum = 0; - // @ts-expect-error - while (index > 0) { - // @ts-expect-error - if (index % 2) { - weightSum += tree[index + 1]; - } - // @ts-expect-error - index = (index - 1) >> 1; - tree[index] += entry.weight; - } - cc += entry.weight * weightSum; - }) - ); - - return cc; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js - - - - -/* - * Assigns an initial order value for each node by performing a DFS search - * starting from nodes in the first rank. Nodes are assigned an order in their - * rank as they are first visited. - * - * This approach comes from Gansner, et al., "A Technique for Drawing Directed - * Graphs." - * - * Returns a layering matrix with an array per layer and each layer sorted by - * the order of its nodes. - */ -function initOrder(g) { - var visited = {}; - var simpleNodes = filter/* default */.A(g.nodes(), function (v) { - return !g.children(v).length; - }); - var maxRank = lodash_es_max( - map/* default */.A(simpleNodes, function (v) { - return g.node(v).rank; - }) - ); - var layers = map/* default */.A(range/* default */.A(maxRank + 1), function () { - return []; - }); - - function dfs(v) { - if (has/* default */.A(visited, v)) return; - visited[v] = true; - var node = g.node(v); - layers[node.rank].push(v); - forEach/* default */.A(g.successors(v), dfs); - } - - var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { - return g.node(v).rank; - }); - forEach/* default */.A(orderedVs, dfs); - - return layers; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js - - - - -function barycenter(g, movable) { - return map/* default */.A(movable, function (v) { - var inV = g.inEdges(v); - if (!inV.length) { - return { v: v }; - } else { - var result = reduce/* default */.A( - inV, - function (acc, e) { - var edge = g.edge(e), - nodeU = g.node(e.v); - return { - sum: acc.sum + edge.weight * nodeU.order, - weight: acc.weight + edge.weight, - }; - }, - { sum: 0, weight: 0 } - ); - - return { - v: v, - barycenter: result.sum / result.weight, - weight: result.weight, - }; - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js - - - - -/* - * Given a list of entries of the form {v, barycenter, weight} and a - * constraint graph this function will resolve any conflicts between the - * constraint graph and the barycenters for the entries. If the barycenters for - * an entry would violate a constraint in the constraint graph then we coalesce - * the nodes in the conflict into a new node that respects the contraint and - * aggregates barycenter and weight information. - * - * This implementation is based on the description in Forster, "A Fast and - * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it - * differs in some specific details. - * - * Pre-conditions: - * - * 1. Each entry has the form {v, barycenter, weight}, or if the node has - * no barycenter, then {v}. - * - * Returns: - * - * A new list of entries of the form {vs, i, barycenter, weight}. The list - * `vs` may either be a singleton or it may be an aggregation of nodes - * ordered such that they do not violate constraints from the constraint - * graph. The property `i` is the lowest original index of any of the - * elements in `vs`. - */ -function resolveConflicts(entries, cg) { - var mappedEntries = {}; - forEach/* default */.A(entries, function (entry, i) { - var tmp = (mappedEntries[entry.v] = { - indegree: 0, - in: [], - out: [], - vs: [entry.v], - i: i, - }); - if (!isUndefined/* default */.A(entry.barycenter)) { - // @ts-expect-error - tmp.barycenter = entry.barycenter; - // @ts-expect-error - tmp.weight = entry.weight; - } - }); - - forEach/* default */.A(cg.edges(), function (e) { - var entryV = mappedEntries[e.v]; - var entryW = mappedEntries[e.w]; - if (!isUndefined/* default */.A(entryV) && !isUndefined/* default */.A(entryW)) { - entryW.indegree++; - entryV.out.push(mappedEntries[e.w]); - } - }); - - var sourceSet = filter/* default */.A(mappedEntries, function (entry) { - // @ts-expect-error - return !entry.indegree; - }); - - return doResolveConflicts(sourceSet); -} - -function doResolveConflicts(sourceSet) { - var entries = []; - - function handleIn(vEntry) { - return function (uEntry) { - if (uEntry.merged) { - return; - } - if ( - isUndefined/* default */.A(uEntry.barycenter) || - isUndefined/* default */.A(vEntry.barycenter) || - uEntry.barycenter >= vEntry.barycenter - ) { - mergeEntries(vEntry, uEntry); - } - }; - } - - function handleOut(vEntry) { - return function (wEntry) { - wEntry['in'].push(vEntry); - if (--wEntry.indegree === 0) { - sourceSet.push(wEntry); - } - }; - } - - while (sourceSet.length) { - var entry = sourceSet.pop(); - entries.push(entry); - forEach/* default */.A(entry['in'].reverse(), handleIn(entry)); - forEach/* default */.A(entry.out, handleOut(entry)); - } - - return map/* default */.A( - filter/* default */.A(entries, function (entry) { - return !entry.merged; - }), - function (entry) { - return pick/* default */.A(entry, ['vs', 'i', 'barycenter', 'weight']); - } - ); -} - -function mergeEntries(target, source) { - var sum = 0; - var weight = 0; - - if (target.weight) { - sum += target.barycenter * target.weight; - weight += target.weight; - } - - if (source.weight) { - sum += source.barycenter * source.weight; - weight += source.weight; - } - - target.vs = source.vs.concat(target.vs); - target.barycenter = sum / weight; - target.weight = weight; - target.i = Math.min(source.i, target.i); - source.merged = true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js - - - - - -function sort(entries, biasRight) { - var parts = partition(entries, function (entry) { - return has/* default */.A(entry, 'barycenter'); - }); - var sortable = parts.lhs, - unsortable = lodash_es_sortBy(parts.rhs, function (entry) { - return -entry.i; - }), - vs = [], - sum = 0, - weight = 0, - vsIndex = 0; - - sortable.sort(compareWithBias(!!biasRight)); - - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - - forEach/* default */.A(sortable, function (entry) { - vsIndex += entry.vs.length; - vs.push(entry.vs); - sum += entry.barycenter * entry.weight; - weight += entry.weight; - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - }); - - var result = { vs: flatten/* default */.A(vs) }; - if (weight) { - result.barycenter = sum / weight; - result.weight = weight; - } - return result; -} - -function consumeUnsortable(vs, unsortable, index) { - var last; - while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { - unsortable.pop(); - vs.push(last.vs); - index++; - } - return index; -} - -function compareWithBias(bias) { - return function (entryV, entryW) { - if (entryV.barycenter < entryW.barycenter) { - return -1; - } else if (entryV.barycenter > entryW.barycenter) { - return 1; - } - - return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; - }; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js - - - - - - - -function sortSubgraph(g, v, cg, biasRight) { - var movable = g.children(v); - var node = g.node(v); - var bl = node ? node.borderLeft : undefined; - var br = node ? node.borderRight : undefined; - var subgraphs = {}; - - if (bl) { - movable = filter/* default */.A(movable, function (w) { - return w !== bl && w !== br; - }); - } - - var barycenters = barycenter(g, movable); - forEach/* default */.A(barycenters, function (entry) { - if (g.children(entry.v).length) { - var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); - subgraphs[entry.v] = subgraphResult; - if (has/* default */.A(subgraphResult, 'barycenter')) { - mergeBarycenters(entry, subgraphResult); - } - } - }); - - var entries = resolveConflicts(barycenters, cg); - expandSubgraphs(entries, subgraphs); - - var result = sort(entries, biasRight); - - if (bl) { - result.vs = flatten/* default */.A([bl, result.vs, br]); - if (g.predecessors(bl).length) { - var blPred = g.node(g.predecessors(bl)[0]), - brPred = g.node(g.predecessors(br)[0]); - if (!has/* default */.A(result, 'barycenter')) { - result.barycenter = 0; - result.weight = 0; - } - result.barycenter = - (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); - result.weight += 2; - } - } - - return result; -} - -function expandSubgraphs(entries, subgraphs) { - forEach/* default */.A(entries, function (entry) { - entry.vs = flatten/* default */.A( - entry.vs.map(function (v) { - if (subgraphs[v]) { - return subgraphs[v].vs; - } - return v; - }) - ); - }); -} - -function mergeBarycenters(target, other) { - if (!isUndefined/* default */.A(target.barycenter)) { - target.barycenter = - (target.barycenter * target.weight + other.barycenter * other.weight) / - (target.weight + other.weight); - target.weight += other.weight; - } else { - target.barycenter = other.barycenter; - target.weight = other.weight; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js - - - - - - - - - - - -/* - * Applies heuristics to minimize edge crossings in the graph and sets the best - * order solution as an order attribute on each node. - * - * Pre-conditions: - * - * 1. Graph must be DAG - * 2. Graph nodes must be objects with a "rank" attribute - * 3. Graph edges must have the "weight" attribute - * - * Post-conditions: - * - * 1. Graph nodes will have an "order" attribute based on the results of the - * algorithm. - */ -function order(g) { - var maxRank = util_maxRank(g), - downLayerGraphs = buildLayerGraphs(g, range/* default */.A(1, maxRank + 1), 'inEdges'), - upLayerGraphs = buildLayerGraphs(g, range/* default */.A(maxRank - 1, -1, -1), 'outEdges'); - - var layering = initOrder(g); - assignOrder(g, layering); - - var bestCC = Number.POSITIVE_INFINITY, - best; - - for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { - sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); - - layering = buildLayerMatrix(g); - var cc = crossCount(g, layering); - if (cc < bestCC) { - lastBest = 0; - best = lodash_es_cloneDeep(layering); - bestCC = cc; - } - } - - assignOrder(g, best); -} - -function buildLayerGraphs(g, ranks, relationship) { - return map/* default */.A(ranks, function (rank) { - return buildLayerGraph(g, rank, relationship); - }); -} - -function sweepLayerGraphs(layerGraphs, biasRight) { - var cg = new graphlib/* Graph */.T(); - forEach/* default */.A(layerGraphs, function (lg) { - var root = lg.graph().root; - var sorted = sortSubgraph(lg, root, cg, biasRight); - forEach/* default */.A(sorted.vs, function (v, i) { - lg.node(v).order = i; - }); - addSubgraphConstraints(lg, cg, sorted.vs); - }); -} - -function assignOrder(g, layering) { - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, i) { - g.node(v).order = i; - }); - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js - - - - -function parentDummyChains(g) { - var postorderNums = parent_dummy_chains_postorder(g); - - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var edgeObj = node.edgeObj; - var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); - var path = pathData.path; - var lca = pathData.lca; - var pathIdx = 0; - var pathV = path[pathIdx]; - var ascending = true; - - while (v !== edgeObj.w) { - node = g.node(v); - - if (ascending) { - while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { - pathIdx++; - } - - if (pathV === lca) { - ascending = false; - } - } - - if (!ascending) { - while ( - pathIdx < path.length - 1 && - g.node((pathV = path[pathIdx + 1])).minRank <= node.rank - ) { - pathIdx++; - } - pathV = path[pathIdx]; - } - - g.setParent(v, pathV); - v = g.successors(v)[0]; - } - }); -} - -// Find a path from v to w through the lowest common ancestor (LCA). Return the -// full path and the LCA. -function findPath(g, postorderNums, v, w) { - var vPath = []; - var wPath = []; - var low = Math.min(postorderNums[v].low, postorderNums[w].low); - var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); - var parent; - var lca; - - // Traverse up from v to find the LCA - parent = v; - do { - parent = g.parent(parent); - vPath.push(parent); - } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); - lca = parent; - - // Traverse from w to LCA - parent = w; - while ((parent = g.parent(parent)) !== lca) { - wPath.push(parent); - } - - return { path: vPath.concat(wPath.reverse()), lca: lca }; -} - -function parent_dummy_chains_postorder(g) { - var result = {}; - var lim = 0; - - function dfs(v) { - var low = lim; - forEach/* default */.A(g.children(v), dfs); - result[v] = { low: low, lim: lim++ }; - } - forEach/* default */.A(g.children(), dfs); - - return result; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js -var _castFunction = __webpack_require__(99922); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js - - - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && (0,_baseForOwn/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee)); -} - -/* harmony default export */ const lodash_es_forOwn = (forOwn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules -var _baseFor = __webpack_require__(4574); -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js - - - - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : (0,_baseFor/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee), keysIn/* default */.A); -} - -/* harmony default export */ const lodash_es_forIn = (forIn); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js - - - - -/* - * This module provides coordinate assignment based on Brandes and Köpf, "Fast - * and Simple Horizontal Coordinate Assignment." - */ - - - -/* - * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" - * property. A type-1 conflict is one where a non-inner segment crosses an - * inner segment. An inner segment is an edge with both incident nodes marked - * with the "dummy" property. - * - * This algorithm scans layer by layer, starting with the second, for type-1 - * conflicts between the current layer and the previous layer. For each layer - * it scans the nodes from left to right until it reaches one that is incident - * on an inner segment. It then scans predecessors to determine if they have - * edges that cross that inner segment. At the end a final scan is done for all - * nodes on the current rank to see if they cross the last visited inner - * segment. - * - * This algorithm (safely) assumes that a dummy node will only be incident on a - * single node in the layers being scanned. - */ -function findType1Conflicts(g, layering) { - var conflicts = {}; - - function visitLayer(prevLayer, layer) { - var // last visited node in the previous layer that is incident on an inner - // segment. - k0 = 0, - // Tracks the last node in this layer scanned for crossings with a type-1 - // segment. - scanPos = 0, - prevLayerLength = prevLayer.length, - lastNode = lodash_es_last(layer); - - forEach/* default */.A(layer, function (v, i) { - var w = findOtherInnerSegmentNode(g, v), - k1 = w ? g.node(w).order : prevLayerLength; - - if (w || v === lastNode) { - forEach/* default */.A(layer.slice(scanPos, i + 1), function (scanNode) { - forEach/* default */.A(g.predecessors(scanNode), function (u) { - var uLabel = g.node(u), - uPos = uLabel.order; - if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { - addConflict(conflicts, u, scanNode); - } - }); - }); - // @ts-expect-error - scanPos = i + 1; - k0 = k1; - } - }); - - return layer; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findType2Conflicts(g, layering) { - var conflicts = {}; - - function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { - var v; - forEach/* default */.A(range/* default */.A(southPos, southEnd), function (i) { - v = south[i]; - if (g.node(v).dummy) { - forEach/* default */.A(g.predecessors(v), function (u) { - var uNode = g.node(u); - if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { - addConflict(conflicts, u, v); - } - }); - } - }); - } - - function visitLayer(north, south) { - var prevNorthPos = -1, - nextNorthPos, - southPos = 0; - - forEach/* default */.A(south, function (v, southLookahead) { - if (g.node(v).dummy === 'border') { - var predecessors = g.predecessors(v); - if (predecessors.length) { - nextNorthPos = g.node(predecessors[0]).order; - scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); - // @ts-expect-error - southPos = southLookahead; - prevNorthPos = nextNorthPos; - } - } - scan(south, southPos, south.length, nextNorthPos, north.length); - }); - - return south; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findOtherInnerSegmentNode(g, v) { - if (g.node(v).dummy) { - return lodash_es_find(g.predecessors(v), function (u) { - return g.node(u).dummy; - }); - } -} - -function addConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - - var conflictsV = conflicts[v]; - if (!conflictsV) { - conflicts[v] = conflictsV = {}; - } - conflictsV[w] = true; -} - -function hasConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - return has/* default */.A(conflicts[v], w); -} - -/* - * Try to align nodes into vertical "blocks" where possible. This algorithm - * attempts to align a node with one of its median neighbors. If the edge - * connecting a neighbor is a type-1 conflict then we ignore that possibility. - * If a previous node has already formed a block with a node after the node - * we're trying to form a block with, we also ignore that possibility - our - * blocks would be split in that scenario. - */ -function verticalAlignment(g, layering, conflicts, neighborFn) { - var root = {}, - align = {}, - pos = {}; - - // We cache the position here based on the layering because the graph and - // layering may be out of sync. The layering matrix is manipulated to - // generate different extreme alignments. - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, order) { - root[v] = v; - align[v] = v; - pos[v] = order; - }); - }); - - forEach/* default */.A(layering, function (layer) { - var prevIdx = -1; - forEach/* default */.A(layer, function (v) { - var ws = neighborFn(v); - if (ws.length) { - ws = lodash_es_sortBy(ws, function (w) { - return pos[w]; - }); - var mp = (ws.length - 1) / 2; - for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { - var w = ws[i]; - if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { - align[w] = v; - align[v] = root[v] = root[w]; - prevIdx = pos[w]; - } - } - } - }); - }); - - return { root: root, align: align }; -} - -function horizontalCompaction(g, layering, root, align, reverseSep) { - // This portion of the algorithm differs from BK due to a number of problems. - // Instead of their algorithm we construct a new block graph and do two - // sweeps. The first sweep places blocks with the smallest possible - // coordinates. The second sweep removes unused space by moving blocks to the - // greatest coordinates without violating separation. - var xs = {}, - blockG = buildBlockGraph(g, layering, root, reverseSep), - borderType = reverseSep ? 'borderLeft' : 'borderRight'; - - function iterate(setXsFunc, nextNodesFunc) { - var stack = blockG.nodes(); - var elem = stack.pop(); - var visited = {}; - while (elem) { - if (visited[elem]) { - setXsFunc(elem); - } else { - visited[elem] = true; - stack.push(elem); - stack = stack.concat(nextNodesFunc(elem)); - } - - elem = stack.pop(); - } - } - - // First pass, assign smallest coordinates - function pass1(elem) { - xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { - return Math.max(acc, xs[e.v] + blockG.edge(e)); - }, 0); - } - - // Second pass, assign greatest coordinates - function pass2(elem) { - var min = blockG.outEdges(elem).reduce(function (acc, e) { - return Math.min(acc, xs[e.w] - blockG.edge(e)); - }, Number.POSITIVE_INFINITY); - - var node = g.node(elem); - if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { - xs[elem] = Math.max(xs[elem], min); - } - } - - iterate(pass1, blockG.predecessors.bind(blockG)); - iterate(pass2, blockG.successors.bind(blockG)); - - // Assign x coordinates to all nodes - forEach/* default */.A(align, function (v) { - xs[v] = xs[root[v]]; - }); - - return xs; -} - -function buildBlockGraph(g, layering, root, reverseSep) { - var blockGraph = new graphlib/* Graph */.T(), - graphLabel = g.graph(), - sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); - - forEach/* default */.A(layering, function (layer) { - var u; - forEach/* default */.A(layer, function (v) { - var vRoot = root[v]; - blockGraph.setNode(vRoot); - if (u) { - var uRoot = root[u], - prevMax = blockGraph.edge(uRoot, vRoot); - blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); - } - u = v; - }); - }); - - return blockGraph; -} - -/* - * Returns the alignment that has the smallest width of the given alignments. - */ -function findSmallestWidthAlignment(g, xss) { - return lodash_es_minBy(values/* default */.A(xss), function (xs) { - var max = Number.NEGATIVE_INFINITY; - var min = Number.POSITIVE_INFINITY; - - lodash_es_forIn(xs, function (x, v) { - var halfWidth = width(g, v) / 2; - - max = Math.max(x + halfWidth, max); - min = Math.min(x - halfWidth, min); - }); - - return max - min; - }); -} - -/* - * Align the coordinates of each of the layout alignments such that - * left-biased alignments have their minimum coordinate at the same point as - * the minimum coordinate of the smallest width alignment and right-biased - * alignments have their maximum coordinate at the same point as the maximum - * coordinate of the smallest width alignment. - */ -function alignCoordinates(xss, alignTo) { - var alignToVals = values/* default */.A(alignTo), - alignToMin = lodash_es_min(alignToVals), - alignToMax = lodash_es_max(alignToVals); - - forEach/* default */.A(['u', 'd'], function (vert) { - forEach/* default */.A(['l', 'r'], function (horiz) { - var alignment = vert + horiz, - xs = xss[alignment], - delta; - if (xs === alignTo) return; - - var xsVals = values/* default */.A(xs); - delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); - - if (delta) { - xss[alignment] = lodash_es_mapValues(xs, function (x) { - return x + delta; - }); - } - }); - }); -} - -function balance(xss, align) { - return lodash_es_mapValues(xss.ul, function (ignore, v) { - if (align) { - return xss[align.toLowerCase()][v]; - } else { - var xs = lodash_es_sortBy(map/* default */.A(xss, v)); - return (xs[1] + xs[2]) / 2; - } - }); -} - -function positionX(g) { - var layering = buildLayerMatrix(g); - var conflicts = merge/* default */.A(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); - - var xss = {}; - var adjustedLayering; - forEach/* default */.A(['u', 'd'], function (vert) { - adjustedLayering = vert === 'u' ? layering : values/* default */.A(layering).reverse(); - forEach/* default */.A(['l', 'r'], function (horiz) { - if (horiz === 'r') { - adjustedLayering = map/* default */.A(adjustedLayering, function (inner) { - return values/* default */.A(inner).reverse(); - }); - } - - var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); - var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); - var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); - if (horiz === 'r') { - xs = lodash_es_mapValues(xs, function (x) { - return -x; - }); - } - xss[vert + horiz] = xs; - }); - }); - - var smallestWidth = findSmallestWidthAlignment(g, xss); - alignCoordinates(xss, smallestWidth); - return balance(xss, g.graph().align); -} - -function sep(nodeSep, edgeSep, reverseSep) { - return function (g, v, w) { - var vLabel = g.node(v); - var wLabel = g.node(w); - var sum = 0; - var delta; - - sum += vLabel.width / 2; - if (has/* default */.A(vLabel, 'labelpos')) { - switch (vLabel.labelpos.toLowerCase()) { - case 'l': - delta = -vLabel.width / 2; - break; - case 'r': - delta = vLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; - sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; - - sum += wLabel.width / 2; - if (has/* default */.A(wLabel, 'labelpos')) { - switch (wLabel.labelpos.toLowerCase()) { - case 'l': - delta = wLabel.width / 2; - break; - case 'r': - delta = -wLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - return sum; - }; -} - -function width(g, v) { - return g.node(v).width; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js - - - - - - -function position(g) { - g = asNonCompoundGraph(g); - - positionY(g); - lodash_es_forOwn(positionX(g), function (x, v) { - g.node(v).x = x; - }); -} - -function positionY(g) { - var layering = buildLayerMatrix(g); - var rankSep = g.graph().ranksep; - var prevY = 0; - forEach/* default */.A(layering, function (layer) { - var maxHeight = lodash_es_max( - map/* default */.A(layer, function (v) { - return g.node(v).height; - }) - ); - forEach/* default */.A(layer, function (v) { - g.node(v).y = prevY + maxHeight / 2; - }); - prevY += maxHeight + rankSep; - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js - - - - - - - - - - - - - - - -function layout(g, opts) { - var time = opts && opts.debugTiming ? util_time : notime; - time('layout', function () { - var layoutGraph = time(' buildLayoutGraph', function () { - return buildLayoutGraph(g); - }); - time(' runLayout', function () { - runLayout(layoutGraph, time); - }); - time(' updateInputGraph', function () { - updateInputGraph(g, layoutGraph); - }); - }); -} - -function runLayout(g, time) { - time(' makeSpaceForEdgeLabels', function () { - makeSpaceForEdgeLabels(g); - }); - time(' removeSelfEdges', function () { - removeSelfEdges(g); - }); - time(' acyclic', function () { - run(g); - }); - time(' nestingGraph.run', function () { - nesting_graph_run(g); - }); - time(' rank', function () { - rank(asNonCompoundGraph(g)); - }); - time(' injectEdgeLabelProxies', function () { - injectEdgeLabelProxies(g); - }); - time(' removeEmptyRanks', function () { - removeEmptyRanks(g); - }); - time(' nestingGraph.cleanup', function () { - cleanup(g); - }); - time(' normalizeRanks', function () { - normalizeRanks(g); - }); - time(' assignRankMinMax', function () { - assignRankMinMax(g); - }); - time(' removeEdgeLabelProxies', function () { - removeEdgeLabelProxies(g); - }); - time(' normalize.run', function () { - normalize_run(g); - }); - time(' parentDummyChains', function () { - parentDummyChains(g); - }); - time(' addBorderSegments', function () { - addBorderSegments(g); - }); - time(' order', function () { - order(g); - }); - time(' insertSelfEdges', function () { - insertSelfEdges(g); - }); - time(' adjustCoordinateSystem', function () { - adjust(g); - }); - time(' position', function () { - position(g); - }); - time(' positionSelfEdges', function () { - positionSelfEdges(g); - }); - time(' removeBorderNodes', function () { - removeBorderNodes(g); - }); - time(' normalize.undo', function () { - normalize_undo(g); - }); - time(' fixupEdgeLabelCoords', function () { - fixupEdgeLabelCoords(g); - }); - time(' undoCoordinateSystem', function () { - coordinate_system_undo(g); - }); - time(' translateGraph', function () { - translateGraph(g); - }); - time(' assignNodeIntersects', function () { - assignNodeIntersects(g); - }); - time(' reversePoints', function () { - reversePointsForReversedEdges(g); - }); - time(' acyclic.undo', function () { - undo(g); - }); -} - -/* - * Copies final layout information from the layout graph back to the input - * graph. This process only copies whitelisted attributes from the layout graph - * to the input graph, so it serves as a good place to determine what - * attributes can influence layout. - */ -function updateInputGraph(inputGraph, layoutGraph) { - forEach/* default */.A(inputGraph.nodes(), function (v) { - var inputLabel = inputGraph.node(v); - var layoutLabel = layoutGraph.node(v); - - if (inputLabel) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - - if (layoutGraph.children(v).length) { - inputLabel.width = layoutLabel.width; - inputLabel.height = layoutLabel.height; - } - } - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var inputLabel = inputGraph.edge(e); - var layoutLabel = layoutGraph.edge(e); - - inputLabel.points = layoutLabel.points; - if (has/* default */.A(layoutLabel, 'x')) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - } - }); - - inputGraph.graph().width = layoutGraph.graph().width; - inputGraph.graph().height = layoutGraph.graph().height; -} - -var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; -var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; -var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; -var nodeNumAttrs = ['width', 'height']; -var nodeDefaults = { width: 0, height: 0 }; -var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; -var edgeDefaults = { - minlen: 1, - weight: 1, - width: 0, - height: 0, - labeloffset: 10, - labelpos: 'r', -}; -var edgeAttrs = ['labelpos']; - -/* - * Constructs a new graph from the input graph, which can be used for layout. - * This process copies only whitelisted attributes from the input graph to the - * layout graph. Thus this function serves as a good place to determine what - * attributes can influence layout. - */ -function buildLayoutGraph(inputGraph) { - var g = new graphlib/* Graph */.T({ multigraph: true, compound: true }); - var graph = canonicalize(inputGraph.graph()); - - g.setGraph( - merge/* default */.A({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.A(graph, graphAttrs)) - ); - - forEach/* default */.A(inputGraph.nodes(), function (v) { - var node = canonicalize(inputGraph.node(v)); - g.setNode(v, defaults/* default */.A(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); - g.setParent(v, inputGraph.parent(v)); - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var edge = canonicalize(inputGraph.edge(e)); - g.setEdge( - e, - merge/* default */.A({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.A(edge, edgeAttrs)) - ); - }); - - return g; -} - -/* - * This idea comes from the Gansner paper: to account for edge labels in our - * layout we split each rank in half by doubling minlen and halving ranksep. - * Then we can place labels at these mid-points between nodes. - * - * We also add some minimal padding to the width to push the label for the edge - * away from the edge itself a bit. - */ -function makeSpaceForEdgeLabels(g) { - var graph = g.graph(); - graph.ranksep /= 2; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - edge.minlen *= 2; - if (edge.labelpos.toLowerCase() !== 'c') { - if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { - edge.width += edge.labeloffset; - } else { - edge.height += edge.labeloffset; - } - } - }); -} - -/* - * Creates temporary dummy nodes that capture the rank in which each edge's - * label is going to, if it has one of non-zero width and height. We do this - * so that we can safely remove empty ranks while preserving balance for the - * label's position. - */ -function injectEdgeLabelProxies(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.width && edge.height) { - var v = g.node(e.v); - var w = g.node(e.w); - var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; - addDummyNode(g, 'edge-proxy', label, '_ep'); - } - }); -} - -function assignRankMinMax(g) { - var maxRank = 0; - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.borderTop) { - node.minRank = g.node(node.borderTop).rank; - node.maxRank = g.node(node.borderBottom).rank; - // @ts-expect-error - maxRank = lodash_es_max(maxRank, node.maxRank); - } - }); - g.graph().maxRank = maxRank; -} - -function removeEdgeLabelProxies(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'edge-proxy') { - g.edge(node.e).labelRank = node.rank; - g.removeNode(v); - } - }); -} - -function translateGraph(g) { - var minX = Number.POSITIVE_INFINITY; - var maxX = 0; - var minY = Number.POSITIVE_INFINITY; - var maxY = 0; - var graphLabel = g.graph(); - var marginX = graphLabel.marginx || 0; - var marginY = graphLabel.marginy || 0; - - function getExtremes(attrs) { - var x = attrs.x; - var y = attrs.y; - var w = attrs.width; - var h = attrs.height; - minX = Math.min(minX, x - w / 2); - maxX = Math.max(maxX, x + w / 2); - minY = Math.min(minY, y - h / 2); - maxY = Math.max(maxY, y + h / 2); - } - - forEach/* default */.A(g.nodes(), function (v) { - getExtremes(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - getExtremes(edge); - } - }); - - minX -= marginX; - minY -= marginY; - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - node.x -= minX; - node.y -= minY; - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, function (p) { - p.x -= minX; - p.y -= minY; - }); - if (has/* default */.A(edge, 'x')) { - edge.x -= minX; - } - if (has/* default */.A(edge, 'y')) { - edge.y -= minY; - } - }); - - graphLabel.width = maxX - minX + marginX; - graphLabel.height = maxY - minY + marginY; -} - -function assignNodeIntersects(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - var nodeV = g.node(e.v); - var nodeW = g.node(e.w); - var p1, p2; - if (!edge.points) { - edge.points = []; - p1 = nodeW; - p2 = nodeV; - } else { - p1 = edge.points[0]; - p2 = edge.points[edge.points.length - 1]; - } - edge.points.unshift(intersectRect(nodeV, p1)); - edge.points.push(intersectRect(nodeW, p2)); - }); -} - -function fixupEdgeLabelCoords(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - if (edge.labelpos === 'l' || edge.labelpos === 'r') { - edge.width -= edge.labeloffset; - } - switch (edge.labelpos) { - case 'l': - edge.x -= edge.width / 2 + edge.labeloffset; - break; - case 'r': - edge.x += edge.width / 2 + edge.labeloffset; - break; - } - } - }); -} - -function reversePointsForReversedEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.reversed) { - edge.points.reverse(); - } - }); -} - -function removeBorderNodes(g) { - forEach/* default */.A(g.nodes(), function (v) { - if (g.children(v).length) { - var node = g.node(v); - var t = g.node(node.borderTop); - var b = g.node(node.borderBottom); - var l = g.node(lodash_es_last(node.borderLeft)); - var r = g.node(lodash_es_last(node.borderRight)); - - node.width = Math.abs(r.x - l.x); - node.height = Math.abs(b.y - t.y); - node.x = l.x + node.width / 2; - node.y = t.y + node.height / 2; - } - }); - - forEach/* default */.A(g.nodes(), function (v) { - if (g.node(v).dummy === 'border') { - g.removeNode(v); - } - }); -} - -function removeSelfEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - if (e.v === e.w) { - var node = g.node(e.v); - if (!node.selfEdges) { - node.selfEdges = []; - } - node.selfEdges.push({ e: e, label: g.edge(e) }); - g.removeEdge(e); - } - }); -} - -function insertSelfEdges(g) { - var layers = buildLayerMatrix(g); - forEach/* default */.A(layers, function (layer) { - var orderShift = 0; - forEach/* default */.A(layer, function (v, i) { - var node = g.node(v); - node.order = i + orderShift; - forEach/* default */.A(node.selfEdges, function (selfEdge) { - addDummyNode( - g, - 'selfedge', - { - width: selfEdge.label.width, - height: selfEdge.label.height, - rank: node.rank, - order: i + ++orderShift, - e: selfEdge.e, - label: selfEdge.label, - }, - '_se' - ); - }); - delete node.selfEdges; - }); - }); -} - -function positionSelfEdges(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'selfedge') { - var selfNode = g.node(node.e.v); - var x = selfNode.x + selfNode.width / 2; - var y = selfNode.y; - var dx = node.x - x; - var dy = selfNode.height / 2; - g.setEdge(node.e, node.label); - g.removeNode(v); - node.label.points = [ - { x: x + (2 * dx) / 3, y: y - dy }, - { x: x + (5 * dx) / 6, y: y - dy }, - { x: x + dx, y: y }, - { x: x + (5 * dx) / 6, y: y + dy }, - { x: x + (2 * dx) / 3, y: y + dy }, - ]; - node.label.x = node.x; - node.label.y = node.y; - } - }); -} - -function selectNumberAttrs(obj, attrs) { - return lodash_es_mapValues(pick/* default */.A(obj, attrs), Number); -} - -function canonicalize(attrs) { - var newAttrs = {}; - forEach/* default */.A(attrs, function (v, k) { - newAttrs[k.toLowerCase()] = v; - }); - return newAttrs; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js - - - - - - - - -/***/ }), - -/***/ 73046: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - T: () => (/* binding */ Graph) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js -var isFunction = __webpack_require__(89610); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js -var isEmpty = __webpack_require__(66401); -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -/* harmony default export */ const _baseIsNaN = (baseIsNaN); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -/* harmony default export */ const _strictIndexOf = (strictIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js - - - - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? _strictIndexOf(array, value, fromIndex) - : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); -} - -/* harmony default export */ const _baseIndexOf = (baseIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js - - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && _baseIndexOf(array, value, 0) > -1; -} - -/* harmony default export */ const _arrayIncludes = (arrayIncludes); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js -var _Set = __webpack_require__(39857); -;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js -/** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ -function noop() { - // No operation performed. -} - -/* harmony default export */ const lodash_es_noop = (noop); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { - return new _Set/* default */.A(values); -}; - -/* harmony default export */ const _createSet = (createSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js - - - - - - - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = _arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = _arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : _createSet(array); - if (set) { - return (0,_setToArray/* default */.A)(set); - } - isCommon = false; - includes = _cacheHas/* default */.A; - seen = new _SetCache/* default */.A; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -/* harmony default export */ const _baseUniq = (baseUniq); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js -var isArrayLikeObject = __webpack_require__(53533); -;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js - - - - - -/** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ -var union = (0,_baseRest/* default */.A)(function(arrays) { - return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); -}); - -/* harmony default export */ const lodash_es_union = (union); - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js - - -var DEFAULT_EDGE_NAME = '\x00'; -var GRAPH_NODE = '\x00'; -var EDGE_KEY_DELIM = '\x01'; - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. -class Graph { - constructor(opts = {}) { - this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; - this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; - this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; - - // Label for the graph itself - this._label = undefined; - - // Defaults to be set when creating a new node - this._defaultNodeLabelFn = constant/* default */.A(undefined); - - // Defaults to be set when creating a new edge - this._defaultEdgeLabelFn = constant/* default */.A(undefined); - - // v -> label - this._nodes = {}; - - if (this._isCompound) { - // v -> parent - this._parent = {}; - - // v -> children - this._children = {}; - this._children[GRAPH_NODE] = {}; - } - - // v -> edgeObj - this._in = {}; - - // u -> v -> Number - this._preds = {}; - - // v -> edgeObj - this._out = {}; - - // v -> w -> Number - this._sucs = {}; - - // e -> edgeObj - this._edgeObjs = {}; - - // e -> label - this._edgeLabels = {}; - } - /* === Graph functions ========= */ - isDirected() { - return this._isDirected; - } - isMultigraph() { - return this._isMultigraph; - } - isCompound() { - return this._isCompound; - } - setGraph(label) { - this._label = label; - return this; - } - graph() { - return this._label; - } - /* === Node functions ========== */ - setDefaultNodeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultNodeLabelFn = newDefault; - return this; - } - nodeCount() { - return this._nodeCount; - } - nodes() { - return keys/* default */.A(this._nodes); - } - sources() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._in[v]); - }); - } - sinks() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._out[v]); - }); - } - setNodes(vs, value) { - var args = arguments; - var self = this; - forEach/* default */.A(vs, function (v) { - if (args.length > 1) { - self.setNode(v, value); - } else { - self.setNode(v); - } - }); - return this; - } - setNode(v, value) { - if (has/* default */.A(this._nodes, v)) { - if (arguments.length > 1) { - this._nodes[v] = value; - } - return this; - } - - // @ts-expect-error - this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); - if (this._isCompound) { - this._parent[v] = GRAPH_NODE; - this._children[v] = {}; - this._children[GRAPH_NODE][v] = true; - } - this._in[v] = {}; - this._preds[v] = {}; - this._out[v] = {}; - this._sucs[v] = {}; - ++this._nodeCount; - return this; - } - node(v) { - return this._nodes[v]; - } - hasNode(v) { - return has/* default */.A(this._nodes, v); - } - removeNode(v) { - var self = this; - if (has/* default */.A(this._nodes, v)) { - var removeEdge = function (e) { - self.removeEdge(self._edgeObjs[e]); - }; - delete this._nodes[v]; - if (this._isCompound) { - this._removeFromParentsChildList(v); - delete this._parent[v]; - forEach/* default */.A(this.children(v), function (child) { - self.setParent(child); - }); - delete this._children[v]; - } - forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); - delete this._in[v]; - delete this._preds[v]; - forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); - delete this._out[v]; - delete this._sucs[v]; - --this._nodeCount; - } - return this; - } - setParent(v, parent) { - if (!this._isCompound) { - throw new Error('Cannot set parent in a non-compound graph'); - } - - if (isUndefined/* default */.A(parent)) { - parent = GRAPH_NODE; - } else { - // Coerce parent to string - parent += ''; - for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { - if (ancestor === v) { - throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); - } - } - - this.setNode(parent); - } - - this.setNode(v); - this._removeFromParentsChildList(v); - this._parent[v] = parent; - this._children[parent][v] = true; - return this; - } - _removeFromParentsChildList(v) { - delete this._children[this._parent[v]][v]; - } - parent(v) { - if (this._isCompound) { - var parent = this._parent[v]; - if (parent !== GRAPH_NODE) { - return parent; - } - } - } - children(v) { - if (isUndefined/* default */.A(v)) { - v = GRAPH_NODE; - } - - if (this._isCompound) { - var children = this._children[v]; - if (children) { - return keys/* default */.A(children); - } - } else if (v === GRAPH_NODE) { - return this.nodes(); - } else if (this.hasNode(v)) { - return []; - } - } - predecessors(v) { - var predsV = this._preds[v]; - if (predsV) { - return keys/* default */.A(predsV); - } - } - successors(v) { - var sucsV = this._sucs[v]; - if (sucsV) { - return keys/* default */.A(sucsV); - } - } - neighbors(v) { - var preds = this.predecessors(v); - if (preds) { - return lodash_es_union(preds, this.successors(v)); - } - } - isLeaf(v) { - var neighbors; - if (this.isDirected()) { - neighbors = this.successors(v); - } else { - neighbors = this.neighbors(v); - } - return neighbors.length === 0; - } - filterNodes(filter) { - // @ts-expect-error - var copy = new this.constructor({ - directed: this._isDirected, - multigraph: this._isMultigraph, - compound: this._isCompound, - }); - - copy.setGraph(this.graph()); - - var self = this; - forEach/* default */.A(this._nodes, function (value, v) { - if (filter(v)) { - copy.setNode(v, value); - } - }); - - forEach/* default */.A(this._edgeObjs, function (e) { - // @ts-expect-error - if (copy.hasNode(e.v) && copy.hasNode(e.w)) { - copy.setEdge(e, self.edge(e)); - } - }); - - var parents = {}; - function findParent(v) { - var parent = self.parent(v); - if (parent === undefined || copy.hasNode(parent)) { - parents[v] = parent; - return parent; - } else if (parent in parents) { - return parents[parent]; - } else { - return findParent(parent); - } - } - - if (this._isCompound) { - forEach/* default */.A(copy.nodes(), function (v) { - copy.setParent(v, findParent(v)); - }); - } - - return copy; - } - /* === Edge functions ========== */ - setDefaultEdgeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultEdgeLabelFn = newDefault; - return this; - } - edgeCount() { - return this._edgeCount; - } - edges() { - return values/* default */.A(this._edgeObjs); - } - setPath(vs, value) { - var self = this; - var args = arguments; - reduce/* default */.A(vs, function (v, w) { - if (args.length > 1) { - self.setEdge(v, w, value); - } else { - self.setEdge(v, w); - } - return w; - }); - return this; - } - /* - * setEdge(v, w, [value, [name]]) - * setEdge({ v, w, [name] }, [value]) - */ - setEdge() { - var v, w, name, value; - var valueSpecified = false; - var arg0 = arguments[0]; - - if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { - v = arg0.v; - w = arg0.w; - name = arg0.name; - if (arguments.length === 2) { - value = arguments[1]; - valueSpecified = true; - } - } else { - v = arg0; - w = arguments[1]; - name = arguments[3]; - if (arguments.length > 2) { - value = arguments[2]; - valueSpecified = true; - } - } - - v = '' + v; - w = '' + w; - if (!isUndefined/* default */.A(name)) { - name = '' + name; - } - - var e = edgeArgsToId(this._isDirected, v, w, name); - if (has/* default */.A(this._edgeLabels, e)) { - if (valueSpecified) { - this._edgeLabels[e] = value; - } - return this; - } - - if (!isUndefined/* default */.A(name) && !this._isMultigraph) { - throw new Error('Cannot set a named edge when isMultigraph = false'); - } - - // It didn't exist, so we need to create it. - // First ensure the nodes exist. - this.setNode(v); - this.setNode(w); - - // @ts-expect-error - this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); - - var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); - // Ensure we add undirected edges in a consistent way. - v = edgeObj.v; - w = edgeObj.w; - - Object.freeze(edgeObj); - this._edgeObjs[e] = edgeObj; - incrementOrInitEntry(this._preds[w], v); - incrementOrInitEntry(this._sucs[v], w); - this._in[w][e] = edgeObj; - this._out[v][e] = edgeObj; - this._edgeCount++; - return this; - } - edge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return this._edgeLabels[e]; - } - hasEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return has/* default */.A(this._edgeLabels, e); - } - removeEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - var edge = this._edgeObjs[e]; - if (edge) { - v = edge.v; - w = edge.w; - delete this._edgeLabels[e]; - delete this._edgeObjs[e]; - decrementOrRemoveEntry(this._preds[w], v); - decrementOrRemoveEntry(this._sucs[v], w); - delete this._in[w][e]; - delete this._out[v][e]; - this._edgeCount--; - } - return this; - } - inEdges(v, u) { - var inV = this._in[v]; - if (inV) { - var edges = values/* default */.A(inV); - if (!u) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.v === u; - }); - } - } - outEdges(v, w) { - var outV = this._out[v]; - if (outV) { - var edges = values/* default */.A(outV); - if (!w) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.w === w; - }); - } - } - nodeEdges(v, w) { - var inEdges = this.inEdges(v, w); - if (inEdges) { - return inEdges.concat(this.outEdges(v, w)); - } - } -} - -/* Number of nodes in the graph. Should only be changed by the implementation. */ -Graph.prototype._nodeCount = 0; - -/* Number of edges in the graph. Should only be changed by the implementation. */ -Graph.prototype._edgeCount = 0; - -function incrementOrInitEntry(map, k) { - if (map[k]) { - map[k]++; - } else { - map[k] = 1; - } -} - -function decrementOrRemoveEntry(map, k) { - if (!--map[k]) { - delete map[k]; - } -} - -function edgeArgsToId(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); -} - -function edgeArgsToObj(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - var edgeObj = { v: v, w: w }; - if (name) { - edgeObj.name = name; - } - return edgeObj; -} - -function edgeObjToId(isDirected, edgeObj) { - return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); -} - - -/***/ }), - -/***/ 697: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) -/* harmony export */ }); -/* unused harmony export version */ -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); -// Includes only the "core" of graphlib - - - -const version = '2.1.9-pre'; - - - - -/***/ }), - -/***/ 14075: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ M: () => (/* binding */ write) -/* harmony export */ }); -/* unused harmony export read */ -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69592); -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(50053); -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74722); -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); - - - - - -function write(g) { - var json = { - options: { - directed: g.isDirected(), - multigraph: g.isMultigraph(), - compound: g.isCompound(), - }, - nodes: writeNodes(g), - edges: writeEdges(g), - }; - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(g.graph())) { - json.value = lodash_es__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A(g.graph()); - } - return json; -} - -function writeNodes(g) { - return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A(g.nodes(), function (v) { - var nodeValue = g.node(v); - var parent = g.parent(v); - var node = { v: v }; - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(nodeValue)) { - node.value = nodeValue; - } - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(parent)) { - node.parent = parent; - } - return node; - }); -} - -function writeEdges(g) { - return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A(g.edges(), function (e) { - var edgeValue = g.edge(e); - var edge = { v: e.v, w: e.w }; - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(e.name)) { - edge.name = e.name; - } - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(edgeValue)) { - edge.value = edgeValue; - } - return edge; - }); -} - -function read(json) { - var g = new Graph(json.options).setGraph(json.value); - _.each(json.nodes, function (entry) { - g.setNode(entry.v, entry.value); - if (entry.parent) { - g.setParent(entry.v, entry.parent); - } - }); - _.each(json.edges, function (entry) { - g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); - }); - return g; -} - - -/***/ }), - -/***/ 62062: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _SetCache) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules -var _MapCache = __webpack_require__(29471); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -/* harmony default export */ const _setCacheAdd = (setCacheAdd); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -/* harmony default export */ const _setCacheHas = (setCacheHas); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js - - - - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new _MapCache/* default */.A; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; -SetCache.prototype.has = _setCacheHas; - -/* harmony default export */ const _SetCache = (SetCache); - - -/***/ }), - -/***/ 72641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); - - -/***/ }), - -/***/ 2634: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); - - -/***/ }), - -/***/ 45572: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); - - -/***/ }), - -/***/ 76912: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); - - -/***/ }), - -/***/ 91641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseClone) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js -var _arrayEach = __webpack_require__(72641); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js -var _copyObject = __webpack_require__(22031); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js - - - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssign = (baseAssign); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js - - - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssignIn = (baseAssignIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js -var _cloneBuffer = __webpack_require__(80154); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js -var _copyArray = __webpack_require__(39759); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js -var _getSymbols = __webpack_require__(14792); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js - - - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); -} - -/* harmony default export */ const _copySymbols = (copySymbols); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js -var _getPrototype = __webpack_require__(15647); -// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js -var stubArray = __webpack_require__(13153); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js - - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { - var result = []; - while (object) { - (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); - object = (0,_getPrototype/* default */.A)(object); - } - return result; -}; - -/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js - - - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); -} - -/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js -var _baseGetAllKeys = __webpack_require__(33831); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js - - - - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); -} - -/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/* harmony default export */ const _initCloneArray = (initCloneArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js -var _cloneArrayBuffer = __webpack_require__(90565); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js - - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -/* harmony default export */ const _cloneDataView = (cloneDataView); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -/* harmony default export */ const _cloneRegExp = (cloneRegExp); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js - - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -/* harmony default export */ const _cloneSymbol = (cloneSymbol); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js -var _cloneTypedArray = __webpack_require__(1801); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js - - - - - - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return (0,_cloneArrayBuffer/* default */.A)(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return _cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return (0,_cloneTypedArray/* default */.A)(object, isDeep); - - case mapTag: - return new Ctor; - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return _cloneRegExp(object); - - case setTag: - return new Ctor; - - case symbolTag: - return _cloneSymbol(object); - } -} - -/* harmony default export */ const _initCloneByTag = (initCloneByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules -var _initCloneObject = __webpack_require__(18598); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js - - - -/** `Object#toString` result references. */ -var _baseIsMap_mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; -} - -/* harmony default export */ const _baseIsMap = (baseIsMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js -var _nodeUtil = __webpack_require__(64841); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js - - - - -/* Node.js helper references. */ -var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; - -/* harmony default export */ const lodash_es_isMap = (isMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js - - - -/** `Object#toString` result references. */ -var _baseIsSet_setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; -} - -/* harmony default export */ const _baseIsSet = (baseIsSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js - - - - -/* Node.js helper references. */ -var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; - -/* harmony default export */ const lodash_es_isSet = (isSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js - - - - - - - - - - - - - - - - - - - - - - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - _baseClone_boolTag = '[object Boolean]', - _baseClone_dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - _baseClone_mapTag = '[object Map]', - _baseClone_numberTag = '[object Number]', - objectTag = '[object Object]', - _baseClone_regexpTag = '[object RegExp]', - _baseClone_setTag = '[object Set]', - _baseClone_stringTag = '[object String]', - _baseClone_symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var _baseClone_arrayBufferTag = '[object ArrayBuffer]', - _baseClone_dataViewTag = '[object DataView]', - _baseClone_float32Tag = '[object Float32Array]', - _baseClone_float64Tag = '[object Float64Array]', - _baseClone_int8Tag = '[object Int8Array]', - _baseClone_int16Tag = '[object Int16Array]', - _baseClone_int32Tag = '[object Int32Array]', - _baseClone_uint8Tag = '[object Uint8Array]', - _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', - _baseClone_uint16Tag = '[object Uint16Array]', - _baseClone_uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = -cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = -cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = -cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = -cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = -cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = -cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = -cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = -cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = -cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!(0,isObject/* default */.A)(value)) { - return value; - } - var isArr = (0,isArray/* default */.A)(value); - if (isArr) { - result = _initCloneArray(value); - if (!isDeep) { - return (0,_copyArray/* default */.A)(value, result); - } - } else { - var tag = (0,_getTag/* default */.A)(value), - isFunc = tag == funcTag || tag == genTag; - - if ((0,isBuffer/* default */.A)(value)) { - return (0,_cloneBuffer/* default */.A)(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); - if (!isDeep) { - return isFlat - ? _copySymbolsIn(value, _baseAssignIn(result, value)) - : _copySymbols(value, _baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = _initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new _Stack/* default */.A); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (lodash_es_isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (lodash_es_isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } - - var keysFunc = isFull - ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) - : (isFlat ? keysIn/* default */.A : keys/* default */.A); - - var props = isArr ? undefined : keysFunc(value); - (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -/* harmony default export */ const _baseClone = (baseClone); - - -/***/ }), - -/***/ 6240: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseEach) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js - - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!(0,isArrayLike/* default */.A)(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -/* harmony default export */ const _createBaseEach = (createBaseEach); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js - - - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = _createBaseEach(_baseForOwn/* default */.A); - -/* harmony default export */ const _baseEach = (baseEach); - - -/***/ }), - -/***/ 25707: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); - - -/***/ }), - -/***/ 13588: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseFlatten) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules -var isArguments = __webpack_require__(52274); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js - - - - -/** Built-in value references. */ -var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -/* harmony default export */ const _isFlattenable = (isFlattenable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js - - - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = _isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - (0,_arrayPush/* default */.A)(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -/* harmony default export */ const _baseFlatten = (baseFlatten); - - -/***/ }), - -/***/ 79841: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); - - -/***/ }), - -/***/ 66318: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); - - -/***/ }), - -/***/ 33831: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); - - -/***/ }), - -/***/ 49574: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseIteratee) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arraySome = (arraySome); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js - - - - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!_arraySome(other, function(othValue, othIndex) { - if (!(0,_cacheHas/* default */.A)(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalArrays = (equalArrays); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js -var _Uint8Array = __webpack_require__(43988); -// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js -var eq = __webpack_require__(66984); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -/* harmony default export */ const _mapToArray = (mapToArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _equalByTag_COMPARE_PARTIAL_FLAG = 1, - _equalByTag_COMPARE_UNORDERED_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return (0,eq/* default */.A)(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = _mapToArray; - - case setTag: - var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; - convert || (convert = _setToArray/* default */.A); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -/* harmony default export */ const _equalByTag = (equalByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js - - -/** Used to compose bitmasks for value comparisons. */ -var _equalObjects_COMPARE_PARTIAL_FLAG = 1; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, - objProps = (0,_getAllKeys/* default */.A)(object), - objLength = objProps.length, - othProps = (0,_getAllKeys/* default */.A)(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalObjects = (equalObjects); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules -var isTypedArray = __webpack_require__(33858); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js - - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var _baseIsEqualDeep_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = (0,isArray/* default */.A)(object), - othIsArr = (0,isArray/* default */.A)(other), - objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), - othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && (0,isBuffer/* default */.A)(object)) { - if (!(0,isBuffer/* default */.A)(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new _Stack/* default */.A); - return (objIsArr || (0,isTypedArray/* default */.A)(object)) - ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new _Stack/* default */.A); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new _Stack/* default */.A); - return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js - - - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { - return value !== value && other !== other; - } - return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -/* harmony default export */ const _baseIsEqual = (baseIsEqual); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, - _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new _Stack/* default */.A; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -/* harmony default export */ const _baseIsMatch = (baseIsMatch); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js - - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !(0,isObject/* default */.A)(value); -} - -/* harmony default export */ const _isStrictComparable = (isStrictComparable); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js - - - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = (0,keys/* default */.A)(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, _isStrictComparable(value)]; - } - return result; -} - -/* harmony default export */ const _getMatchData = (getMatchData); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js - - - - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = _getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return _matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || _baseIsMatch(object, source, matchData); - }; -} - -/* harmony default export */ const _baseMatches = (baseMatches); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js - - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); - return result === undefined ? defaultValue : result; -} - -/* harmony default export */ const lodash_es_get = (get); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, - _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { - return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); - } - return function(object) { - var objValue = lodash_es_get(object, path); - return (objValue === undefined && objValue === srcValue) - ? (0,hasIn/* default */.A)(object, path) - : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); - }; -} - -/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js - - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return (0,_baseGet/* default */.A)(object, path); - }; -} - -/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js - - - - - -/** - * Creates a function that returns the value at `path` of a given object. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - * @example - * - * var objects = [ - * { 'a': { 'b': 2 } }, - * { 'a': { 'b': 1 } } - * ]; - * - * _.map(objects, _.property('a.b')); - * // => [2, 1] - * - * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); - * // => [1, 2] - */ -function property(path) { - return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); -} - -/* harmony default export */ const lodash_es_property = (property); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js - - - - - - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity/* default */.A; - } - if (typeof value == 'object') { - return (0,isArray/* default */.A)(value) - ? _baseMatchesProperty(value[0], value[1]) - : _baseMatches(value); - } - return lodash_es_property(value); -} - -/* harmony default export */ const _baseIteratee = (baseIteratee); - - -/***/ }), - -/***/ 52568: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6240); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? Array(collection.length) : []; - - (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); - - -/***/ }), - -/***/ 70805: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); - - -/***/ }), - -/***/ 64099: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); - - -/***/ }), - -/***/ 99922: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); - - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); - - -/***/ }), - -/***/ 7819: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _castPath) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js -var memoize = __webpack_require__(46632); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js - - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = (0,memoize/* default */.A)(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -/* harmony default export */ const _memoizeCapped = (memoizeCapped); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js - - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = _memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/* harmony default export */ const _stringToPath = (stringToPath); - -// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules -var lodash_es_toString = __webpack_require__(28894); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js - - - - - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if ((0,isArray/* default */.A)(value)) { - return value; - } - return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); -} - -/* harmony default export */ const _castPath = (castPath); - - -/***/ }), - -/***/ 19042: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); -/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); - - -/***/ }), - -/***/ 14792: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); -/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); - - -/***/ }), - -/***/ 85054: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); -/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); -/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - - - - - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && - ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); - - -/***/ }), - -/***/ 86586: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); - - - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); - - -/***/ }), - -/***/ 29959: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); - - -/***/ }), - -/***/ 30901: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); - - -/***/ }), - -/***/ 50053: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(91641); - - -/** Used to compose bitmasks for cloning. */ -var CLONE_SYMBOLS_FLAG = 4; - -/** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ -function clone(value) { - return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value, CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone); - - -/***/ }), - -/***/ 23068: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24326); -/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66984); -/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832); -/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55615); - - - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); - - -/***/ }), - -/***/ 11662: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_filter) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js -var _arrayFilter = __webpack_require__(2634); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js - - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - (0,_baseEach/* default */.A)(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -/* harmony default export */ const _baseFilter = (baseFilter); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js - - - - - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ -function filter(collection, predicate) { - var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; - return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); -} - -/* harmony default export */ const lodash_es_filter = (filter); - - -/***/ }), - -/***/ 34098: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13588); - - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(array, 1) : []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); - - -/***/ }), - -/***/ 8058: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); -/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); - - -/***/ }), - -/***/ 48585: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_has) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && _baseHas_hasOwnProperty.call(object, key); -} - -/* harmony default export */ const _baseHas = (baseHas); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js - - - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); -} - -/* harmony default export */ const lodash_es_has = (has); - - -/***/ }), - -/***/ 39188: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_hasIn) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -/* harmony default export */ const _baseHasIn = (baseHasIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js - - - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); -} - -/* harmony default export */ const lodash_es_hasIn = (hasIn); - - -/***/ }), - -/***/ 61882: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); -/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); - - - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); - - -/***/ }), - -/***/ 69592: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); - - -/***/ }), - -/***/ 27422: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); -/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); - - -/***/ }), - -/***/ 74722: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45572); -/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574); -/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52568); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ -function map(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee, 3)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); - - -/***/ }), - -/***/ 81942: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_pick) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules -var _castPath = __webpack_require__(7819); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js -var _isIndex = __webpack_require__(25353); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js - - - - - - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!(0,isObject/* default */.A)(object)) { - return object; - } - path = (0,_castPath/* default */.A)(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = (0,_toKey/* default */.A)(path[index]), - newValue = value; - - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = (0,isObject/* default */.A)(objValue) - ? objValue - : ((0,_isIndex/* default */.A)(path[index + 1]) ? [] : {}); - } - } - (0,_assignValue/* default */.A)(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -/* harmony default export */ const _baseSet = (baseSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js - - - - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = (0,_baseGet/* default */.A)(object, path); - - if (predicate(value, path)) { - _baseSet(result, (0,_castPath/* default */.A)(path, object), value); - } - } - return result; -} - -/* harmony default export */ const _basePickBy = (basePickBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js - - - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, paths) { - return _basePickBy(object, paths, function(value, path) { - return (0,hasIn/* default */.A)(object, path); - }); -} - -/* harmony default export */ const _basePick = (basePick); - -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules -var _overRest = __webpack_require__(76875); -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules -var _setToString = __webpack_require__(67525); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js - - - - -/** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -function flatRest(func) { - return (0,_setToString/* default */.A)((0,_overRest/* default */.A)(func, undefined, flatten/* default */.A), func + ''); -} - -/* harmony default export */ const _flatRest = (flatRest); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js - - - -/** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ -var pick = _flatRest(function(object, paths) { - return object == null ? {} : _basePick(object, paths); -}); - -/* harmony default export */ const lodash_es_pick = (pick); - - -/***/ }), - -/***/ 91395: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_range) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -/* harmony default export */ const _baseRange = (baseRange); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js - - - - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.A)(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = (0,toFinite/* default */.A)(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = (0,toFinite/* default */.A)(end); - } - step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.A)(step); - return _baseRange(start, end, step, fromRight); - }; -} - -/* harmony default export */ const _createRange = (createRange); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js - - -/** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ -var range = _createRange(); - -/* harmony default export */ const lodash_es_range = (range); - - -/***/ }), - -/***/ 89463: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_reduce) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -/* harmony default export */ const _arrayReduce = (arrayReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -/* harmony default export */ const _baseReduce = (baseReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js - - - - - - -/** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ -function reduce(collection, iteratee, accumulator) { - var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, - initAccum = arguments.length < 3; - - return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); -} - -/* harmony default export */ const lodash_es_reduce = (reduce); - - -/***/ }), - -/***/ 13153: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ -function stubArray() { - return []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); - - -/***/ }), - -/***/ 74342: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toFinite) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js - - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/* harmony default export */ const _baseTrim = (baseTrim); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js - - - - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if ((0,isSymbol/* default */.A)(value)) { - return NAN; - } - if ((0,isObject/* default */.A)(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = (0,isObject/* default */.A)(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = _baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/* harmony default export */ const lodash_es_toNumber = (toNumber); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = lodash_es_toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/* harmony default export */ const lodash_es_toFinite = (toFinite); - - -/***/ }), - -/***/ 28894: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toString) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js - - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if ((0,isArray/* default */.A)(value)) { - // Recursively convert values (susceptible to call stack limits). - return (0,_arrayMap/* default */.A)(value, baseToString) + ''; - } - if ((0,isSymbol/* default */.A)(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const _baseToString = (baseToString); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js - - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString_toString(value) { - return value == null ? '' : _baseToString(value); -} - -/* harmony default export */ const lodash_es_toString = (toString_toString); - - -/***/ }), - -/***/ 5664: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28894); - - -/** Used to generate unique IDs. */ -var idCounter = 0; - -/** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ -function uniqueId(prefix) { - var id = ++idCounter; - return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(prefix) + id; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); - - -/***/ }), - -/***/ 38207: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_values) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js - - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return (0,_arrayMap/* default */.A)(props, function(key) { - return object[key]; - }); -} - -/* harmony default export */ const _baseValues = (baseValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js - - - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values(object) { - return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); -} - -/* harmony default export */ const lodash_es_values = (values); - - -/***/ }), - -/***/ 18635: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(63626); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(697); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(99702); -/* harmony import */ var _index_01f381cb_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(35364); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99418); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(21176); -/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(14075); - - - - - - - - - - - - - - - - - - - -const sanitizeText = (txt) => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.e.sanitizeText(txt, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)()); -let conf = { - dividerMargin: 10, - padding: 5, - textHeight: 10, - curve: void 0 -}; -const addNamespaces = function(namespaces, g, _id, diagObj) { - const keys = Object.keys(namespaces); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.info("keys:", keys); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.info(namespaces); - keys.forEach(function(id) { - var _a, _b; - const vertex = namespaces[id]; - const shape = "rect"; - const node = { - shape, - id: vertex.id, - domId: vertex.domId, - labelText: sanitizeText(vertex.id), - labelStyle: "", - style: "fill: none; stroke: black", - // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release - padding: ((_a = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().class) == null ? void 0 : _b.padding) - }; - g.setNode(vertex.id, node); - addClasses(vertex.classes, g, _id, diagObj, vertex.id); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.info("setNode", node); - }); -}; -const addClasses = function(classes, g, _id, diagObj, parent) { - const keys = Object.keys(classes); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.info("keys:", keys); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.info(classes); - keys.filter((id) => classes[id].parent == parent).forEach(function(id) { - var _a, _b; - const vertex = classes[id]; - const cssClassStr = vertex.cssClasses.join(" "); - const styles2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.k)(vertex.styles); - const vertexText = vertex.label ?? vertex.id; - const radius = 0; - const shape = "class_box"; - const node = { - labelStyle: styles2.labelStyle, - shape, - labelText: sanitizeText(vertexText), - classData: vertex, - rx: radius, - ry: radius, - class: cssClassStr, - style: styles2.style, - id: vertex.id, - domId: vertex.domId, - tooltip: diagObj.db.getTooltip(vertex.id, parent) || "", - haveCallback: vertex.haveCallback, - link: vertex.link, - width: vertex.type === "group" ? 500 : void 0, - type: vertex.type, - // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release - padding: ((_a = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().class) == null ? void 0 : _b.padding) - }; - g.setNode(vertex.id, node); - if (parent) { - g.setParent(vertex.id, parent); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.info("setNode", node); - }); -}; -const addNotes = function(notes, g, startEdgeId, classes) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.info(notes); - notes.forEach(function(note, i) { - var _a, _b; - const vertex = note; - const cssNoteStr = ""; - const styles2 = { labelStyle: "", style: "" }; - const vertexText = vertex.text; - const radius = 0; - const shape = "note"; - const node = { - labelStyle: styles2.labelStyle, - shape, - labelText: sanitizeText(vertexText), - noteData: vertex, - rx: radius, - ry: radius, - class: cssNoteStr, - style: styles2.style, - id: vertex.id, - domId: vertex.id, - tooltip: "", - type: "note", - // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release - padding: ((_a = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().class) == null ? void 0 : _b.padding) - }; - g.setNode(vertex.id, node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.info("setNode", node); - if (!vertex.class || !(vertex.class in classes)) { - return; - } - const edgeId = startEdgeId + i; - const edgeData = { - id: `edgeNote${edgeId}`, - //Set relationship style and line type - classes: "relation", - pattern: "dotted", - // Set link type for rendering - arrowhead: "none", - //Set edge extra labels - startLabelRight: "", - endLabelLeft: "", - //Set relation arrow types - arrowTypeStart: "none", - arrowTypeEnd: "none", - style: "fill:none", - labelStyle: "", - curve: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.n)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .lUB) - }; - g.setEdge(vertex.id, vertex.class, edgeData, edgeId); - }); -}; -const addRelations = function(relations, g) { - const conf2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart; - let cnt = 0; - relations.forEach(function(edge) { - var _a; - cnt++; - const edgeData = { - //Set relationship style and line type - classes: "relation", - pattern: edge.relation.lineType == 1 ? "dashed" : "solid", - id: `id_${edge.id1}_${edge.id2}_${cnt}`, - // Set link type for rendering - arrowhead: edge.type === "arrow_open" ? "none" : "normal", - //Set edge extra labels - startLabelRight: edge.relationTitle1 === "none" ? "" : edge.relationTitle1, - endLabelLeft: edge.relationTitle2 === "none" ? "" : edge.relationTitle2, - //Set relation arrow types - arrowTypeStart: getArrowMarker(edge.relation.type1), - arrowTypeEnd: getArrowMarker(edge.relation.type2), - style: "fill:none", - labelStyle: "", - curve: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.n)(conf2 == null ? void 0 : conf2.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .lUB) - }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.info(edgeData, edge); - if (edge.style !== void 0) { - const styles2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.k)(edge.style); - edgeData.style = styles2.style; - edgeData.labelStyle = styles2.labelStyle; - } - edge.text = edge.title; - if (edge.text === void 0) { - if (edge.style !== void 0) { - edgeData.arrowheadStyle = "fill: #333"; - } - } else { - edgeData.arrowheadStyle = "fill: #333"; - edgeData.labelpos = "c"; - if (((_a = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart) == null ? void 0 : _a.htmlLabels) ?? (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().htmlLabels) { - edgeData.labelType = "html"; - edgeData.label = '<span class="edgeLabel">' + edge.text + "</span>"; - } else { - edgeData.labelType = "text"; - edgeData.label = edge.text.replace(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.e.lineBreakRegex, "\n"); - if (edge.style === void 0) { - edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none"; - } - edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); - } - } - g.setEdge(edge.id1, edge.id2, edgeData, cnt); - }); -}; -const setConf = function(cnf) { - conf = { - ...conf, - ...cnf - }; -}; -const draw = async function(text, id, _version, diagObj) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Drawing class - ", id); - const conf2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart ?? (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().class; - const securityLevel = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.info("config:", conf2); - const nodeSpacing = (conf2 == null ? void 0 : conf2.nodeSpacing) ?? 50; - const rankSpacing = (conf2 == null ? void 0 : conf2.rankSpacing) ?? 50; - const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__/* .Graph */ .T({ - multigraph: true, - compound: true - }).setGraph({ - rankdir: diagObj.db.getDirection(), - nodesep: nodeSpacing, - ranksep: rankSpacing, - marginx: 8, - marginy: 8 - }).setDefaultEdgeLabel(function() { - return {}; - }); - const namespaces = diagObj.db.getNamespaces(); - const classes = diagObj.db.getClasses(); - const relations = diagObj.db.getRelations(); - const notes = diagObj.db.getNotes(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.info(relations); - addNamespaces(namespaces, g, id, diagObj); - addClasses(classes, g, id, diagObj); - addRelations(relations, g); - addNotes(notes, g, relations.length + 1, classes); - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); - const svg = root.select(`[id="${id}"]`); - const element = root.select("#" + id + " g"); - await (0,_index_01f381cb_js__WEBPACK_IMPORTED_MODULE_8__.r)( - element, - g, - ["aggregation", "extension", "composition", "dependency", "lollipop"], - "classDiagram", - id - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.u.insertTitle(svg, "classTitleText", (conf2 == null ? void 0 : conf2.titleTopMargin) ?? 5, diagObj.db.getDiagramTitle()); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.o)(g, svg, conf2 == null ? void 0 : conf2.diagramPadding, conf2 == null ? void 0 : conf2.useMaxWidth); - if (!(conf2 == null ? void 0 : conf2.htmlLabels)) { - const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; - const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); - for (const label of labels) { - const dim = label.getBBox(); - const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); - rect.setAttribute("rx", 0); - rect.setAttribute("ry", 0); - rect.setAttribute("width", dim.width); - rect.setAttribute("height", dim.height); - label.insertBefore(rect, label.firstChild); - } - } -}; -function getArrowMarker(type) { - let marker; - switch (type) { - case 0: - marker = "aggregation"; - break; - case 1: - marker = "extension"; - break; - case 2: - marker = "composition"; - break; - case 3: - marker = "dependency"; - break; - case 4: - marker = "lollipop"; - break; - default: - marker = "none"; - } - return marker; -} -const renderer = { - setConf, - draw -}; -const diagram = { - parser: _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_9__.p, - db: _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_9__.d, - renderer, - styles: _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_9__.s, - init: (cnf) => { - if (!cnf.class) { - cnf.class = {}; - } - cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; - _styles_b83b31c9_js__WEBPACK_IMPORTED_MODULE_9__.d.clear(); - } -}; - - - -/***/ }), - -/***/ 18897: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - a: () => (/* binding */ createText), - c: () => (/* binding */ computeDimensionOfText) -}); - -// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -var constructs_namespaceObject = {}; -__webpack_require__.r(constructs_namespaceObject); -__webpack_require__.d(constructs_namespaceObject, { - attentionMarkers: () => (attentionMarkers), - contentInitial: () => (contentInitial), - disable: () => (disable), - document: () => (constructs_document), - flow: () => (constructs_flow), - flowInitial: () => (flowInitial), - insideSpan: () => (insideSpan), - string: () => (constructs_string), - text: () => (constructs_text) -}); - -// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules -var mermaid_6dc72991 = __webpack_require__(99702); -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js -/** - * @typedef {import('mdast').Root|import('mdast').Content} Node - * - * @typedef Options - * Configuration (optional). - * @property {boolean | null | undefined} [includeImageAlt=true] - * Whether to use `alt` for `image`s. - * @property {boolean | null | undefined} [includeHtml=true] - * Whether to use `value` of HTML. - */ - -/** @type {Options} */ -const emptyOptions = {} - -/** - * Get the text content of a node or list of nodes. - * - * Prefers the node’s plain-text fields, otherwise serializes its children, - * and if the given value is an array, serialize the nodes in it. - * - * @param {unknown} value - * Thing to serialize, typically `Node`. - * @param {Options | null | undefined} [options] - * Configuration (optional). - * @returns {string} - * Serialized `value`. - */ -function lib_toString(value, options) { - const settings = options || emptyOptions - const includeImageAlt = - typeof settings.includeImageAlt === 'boolean' - ? settings.includeImageAlt - : true - const includeHtml = - typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true - - return one(value, includeImageAlt, includeHtml) -} - -/** - * One node or several nodes. - * - * @param {unknown} value - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized node. - */ -function one(value, includeImageAlt, includeHtml) { - if (node(value)) { - if ('value' in value) { - return value.type === 'html' && !includeHtml ? '' : value.value - } - - if (includeImageAlt && 'alt' in value && value.alt) { - return value.alt - } - - if ('children' in value) { - return lib_all(value.children, includeImageAlt, includeHtml) - } - } - - if (Array.isArray(value)) { - return lib_all(value, includeImageAlt, includeHtml) - } - - return '' -} - -/** - * Serialize a list of nodes. - * - * @param {Array<unknown>} values - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized nodes. - */ -function lib_all(values, includeImageAlt, includeHtml) { - /** @type {Array<string>} */ - const result = [] - let index = -1 - - while (++index < values.length) { - result[index] = one(values[index], includeImageAlt, includeHtml) - } - - return result.join('') -} - -/** - * Check if `value` looks like a node. - * - * @param {unknown} value - * Thing. - * @returns {value is Node} - * Whether `value` is a node. - */ -function node(value) { - return Boolean(value && typeof value === 'object') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array<T>} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array<T>} items - * Items to inject into `list`. - * @returns {void} - * Nothing. - */ -function splice(list, start, remove, items) { - const end = list.length - let chunkStart = 0 - /** @type {Array<unknown>} */ - let parameters - - // Make start between zero and `end` (included). - if (start < 0) { - start = -start > end ? 0 : end + start - } else { - start = start > end ? end : start - } - remove = remove > 0 ? remove : 0 - - // No need to chunk the items if there’s only a couple (10k) items. - if (items.length < 10000) { - parameters = Array.from(items) - parameters.unshift(start, remove) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - } else { - // Delete `remove` items starting from `start` - if (remove) list.splice(start, remove) - - // Insert the items in chunks to not cause stack overflows. - while (chunkStart < items.length) { - parameters = items.slice(chunkStart, chunkStart + 10000) - parameters.unshift(start, 0) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - chunkStart += 10000 - start += 10000 - } - } -} - -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array<T>} list - * List to operate on. - * @param {Array<T>} items - * Items to add to `list`. - * @returns {Array<T>} - * Either `list` or `items`. - */ -function push(list, items) { - if (list.length > 0) { - splice(list, list.length, 0, items) - return list - } - return items -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - * @typedef {import('micromark-util-types').Handles} Handles - * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension - * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension - */ - - - -const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty - -/** - * Combine multiple syntax extensions into one. - * - * @param {Array<Extension>} extensions - * List of syntax extensions. - * @returns {NormalizedExtension} - * A single combined extension. - */ -function combineExtensions(extensions) { - /** @type {NormalizedExtension} */ - const all = {} - let index = -1 - - while (++index < extensions.length) { - syntaxExtension(all, extensions[index]) - } - - return all -} - -/** - * Merge `extension` into `all`. - * - * @param {NormalizedExtension} all - * Extension to merge into. - * @param {Extension} extension - * Extension to merge. - * @returns {void} - */ -function syntaxExtension(all, extension) { - /** @type {keyof Extension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - /** @type {Record<string, unknown>} */ - const left = maybe || (all[hook] = {}) - /** @type {Record<string, unknown> | undefined} */ - const right = extension[hook] - /** @type {string} */ - let code - - if (right) { - for (code in right) { - if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] - const value = right[code] - constructs( - // @ts-expect-error Looks like a list. - left[code], - Array.isArray(value) ? value : value ? [value] : [] - ) - } - } - } -} - -/** - * Merge `list` into `existing` (both lists of constructs). - * Mutates `existing`. - * - * @param {Array<unknown>} existing - * @param {Array<unknown>} list - * @returns {void} - */ -function constructs(existing, list) { - let index = -1 - /** @type {Array<unknown>} */ - const before = [] - - while (++index < list.length) { - // @ts-expect-error Looks like an object. - ;(list[index].add === 'after' ? existing : before).push(list[index]) - } - - splice(existing, 0, 0, before) -} - -/** - * Combine multiple HTML extensions into one. - * - * @param {Array<HtmlExtension>} htmlExtensions - * List of HTML extensions. - * @returns {HtmlExtension} - * A single combined HTML extension. - */ -function combineHtmlExtensions(htmlExtensions) { - /** @type {HtmlExtension} */ - const handlers = {} - let index = -1 - - while (++index < htmlExtensions.length) { - htmlExtension(handlers, htmlExtensions[index]) - } - - return handlers -} - -/** - * Merge `extension` into `all`. - * - * @param {HtmlExtension} all - * Extension to merge into. - * @param {HtmlExtension} extension - * Extension to merge. - * @returns {void} - */ -function htmlExtension(all, extension) { - /** @type {keyof HtmlExtension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - const left = maybe || (all[hook] = {}) - const right = extension[hook] - /** @type {keyof Handles} */ - let type - - if (right) { - for (type in right) { - // @ts-expect-error assume document vs regular handler are managed correctly. - left[type] = right[type] - } - } - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js -// This module is generated by `script/`. -// -// CommonMark handles attention (emphasis, strong) markers based on what comes -// before or after them. -// One such difference is if those characters are Unicode punctuation. -// This script is generated from the Unicode data. - -/** - * Regular expression that matches a unicode punctuation character. - */ -const unicodePunctuationRegex = - /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - - -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlpha = regexCheck(/[A-Za-z]/) - -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) - -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) - -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function asciiControl(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code !== null && (code < 32 || code === 127) - ) -} - -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiDigit = regexCheck(/\d/) - -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) - -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) - -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEnding(code) { - return code !== null && code < -2 -} - -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEndingOrSpace(code) { - return code !== null && (code < 0 || code === 32) -} - -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownSpace(code) { - return code === -2 || code === -1 || code === 32 -} - -// Size note: removing ASCII from the regex and using `asciiPunctuation` here -// In fact adds to the bundle size. -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodePunctuation = regexCheck(unicodePunctuationRegex) - -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodeWhitespace = regexCheck(/\s/) - -/** - * Create a code check from a regex. - * - * @param {RegExp} regex - * @returns {(code: Code) => boolean} - */ -function regexCheck(regex) { - return check - - /** - * Check whether a code matches the bound regex. - * - * @param {Code} code - * Character code. - * @returns {boolean} - * Whether the character code matches the bound regex. - */ - function check(code) { - return code !== null && regex.test(String.fromCharCode(code)) - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns - * Start state. - */ -function factorySpace(effects, ok, type, max) { - const limit = max ? max - 1 : Number.POSITIVE_INFINITY - let size = 0 - return start - - /** @type {State} */ - function start(code) { - if (markdownSpace(code)) { - effects.enter(type) - return prefix(code) - } - return ok(code) - } - - /** @type {State} */ - function prefix(code) { - if (markdownSpace(code) && size++ < limit) { - effects.consume(code) - return prefix - } - effects.exit(type) - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - -/** @type {InitialConstruct} */ -const content = { - tokenize: initializeContent -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeContent(effects) { - const contentStart = effects.attempt( - this.parser.constructs.contentInitial, - afterContentStartConstruct, - paragraphInitial - ) - /** @type {Token} */ - let previous - return contentStart - - /** @type {State} */ - function afterContentStartConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, contentStart, 'linePrefix') - } - - /** @type {State} */ - function paragraphInitial(code) { - effects.enter('paragraph') - return lineStart(code) - } - - /** @type {State} */ - function lineStart(code) { - const token = effects.enter('chunkText', { - contentType: 'text', - previous - }) - if (previous) { - previous.next = token - } - previous = token - return data(code) - } - - /** @type {State} */ - function data(code) { - if (code === null) { - effects.exit('chunkText') - effects.exit('paragraph') - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - effects.exit('chunkText') - return lineStart - } - - // Data. - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - -/** - * @typedef {[Construct, ContainerState]} StackItem - */ - - - - -/** @type {InitialConstruct} */ -const document_document = { - tokenize: initializeDocument -} - -/** @type {Construct} */ -const containerConstruct = { - tokenize: tokenizeContainer -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeDocument(effects) { - const self = this - /** @type {Array<StackItem>} */ - const stack = [] - let continued = 0 - /** @type {TokenizeContext | undefined} */ - let childFlow - /** @type {Token | undefined} */ - let childToken - /** @type {number} */ - let lineStartOffset - return start - - /** @type {State} */ - function start(code) { - // First we iterate through the open blocks, starting with the root - // document, and descending through last children down to the last open - // block. - // Each block imposes a condition that the line must satisfy if the block is - // to remain open. - // For example, a block quote requires a `>` character. - // A paragraph requires a non-blank line. - // In this phase we may match all or just some of the open blocks. - // But we cannot close unmatched blocks yet, because we may have a lazy - // continuation line. - if (continued < stack.length) { - const item = stack[continued] - self.containerState = item[1] - return effects.attempt( - item[0].continuation, - documentContinue, - checkNewContainers - )(code) - } - - // Done. - return checkNewContainers(code) - } - - /** @type {State} */ - function documentContinue(code) { - continued++ - - // Note: this field is called `_closeFlow` but it also closes containers. - // Perhaps a good idea to rename it but it’s already used in the wild by - // extensions. - if (self.containerState._closeFlow) { - self.containerState._closeFlow = undefined - if (childFlow) { - closeFlow() - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when dealing with lazy lines in `writeToChild`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {Point | undefined} */ - let point - - // Find the flow chunk. - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - point = self.events[indexBeforeFlow][1].end - break - } - } - exitContainers(continued) - - // Fix positions. - let index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - return checkNewContainers(code) - } - return start(code) - } - - /** @type {State} */ - function checkNewContainers(code) { - // Next, after consuming the continuation markers for existing blocks, we - // look for new block starts (e.g. `>` for a block quote). - // If we encounter a new block start, we close any blocks unmatched in - // step 1 before creating the new block as a child of the last matched - // block. - if (continued === stack.length) { - // No need to `check` whether there’s a container, of `exitContainers` - // would be moot. - // We can instead immediately `attempt` to parse one. - if (!childFlow) { - return documentContinued(code) - } - - // If we have concrete content, such as block HTML or fenced code, - // we can’t have containers “pierce” into them, so we can immediately - // start. - if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { - return flowStart(code) - } - - // If we do have flow, it could still be a blank line, - // but we’d be interrupting it w/ a new container if there’s a current - // construct. - // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer - // needed in micromark-extension-gfm-table@1.0.6). - self.interrupt = Boolean( - childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack - ) - } - - // Check if there is a new container. - self.containerState = {} - return effects.check( - containerConstruct, - thereIsANewContainer, - thereIsNoNewContainer - )(code) - } - - /** @type {State} */ - function thereIsANewContainer(code) { - if (childFlow) closeFlow() - exitContainers(continued) - return documentContinued(code) - } - - /** @type {State} */ - function thereIsNoNewContainer(code) { - self.parser.lazy[self.now().line] = continued !== stack.length - lineStartOffset = self.now().offset - return flowStart(code) - } - - /** @type {State} */ - function documentContinued(code) { - // Try new containers. - self.containerState = {} - return effects.attempt( - containerConstruct, - containerContinue, - flowStart - )(code) - } - - /** @type {State} */ - function containerContinue(code) { - continued++ - stack.push([self.currentConstruct, self.containerState]) - // Try another. - return documentContinued(code) - } - - /** @type {State} */ - function flowStart(code) { - if (code === null) { - if (childFlow) closeFlow() - exitContainers(0) - effects.consume(code) - return - } - childFlow = childFlow || self.parser.flow(self.now()) - effects.enter('chunkFlow', { - contentType: 'flow', - previous: childToken, - _tokenizer: childFlow - }) - return flowContinue(code) - } - - /** @type {State} */ - function flowContinue(code) { - if (code === null) { - writeToChild(effects.exit('chunkFlow'), true) - exitContainers(0) - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - writeToChild(effects.exit('chunkFlow')) - // Get ready for the next line. - continued = 0 - self.interrupt = undefined - return start - } - effects.consume(code) - return flowContinue - } - - /** - * @param {Token} token - * @param {boolean | undefined} [eof] - * @returns {void} - */ - function writeToChild(token, eof) { - const stream = self.sliceStream(token) - if (eof) stream.push(null) - token.previous = childToken - if (childToken) childToken.next = token - childToken = token - childFlow.defineSkip(token.start) - childFlow.write(stream) - - // Alright, so we just added a lazy line: - // - // ```markdown - // > a - // b. - // - // Or: - // - // > ~~~c - // d - // - // Or: - // - // > | e | - // f - // ``` - // - // The construct in the second example (fenced code) does not accept lazy - // lines, so it marked itself as done at the end of its first line, and - // then the content construct parses `d`. - // Most constructs in markdown match on the first line: if the first line - // forms a construct, a non-lazy line can’t “unmake” it. - // - // The construct in the third example is potentially a GFM table, and - // those are *weird*. - // It *could* be a table, from the first line, if the following line - // matches a condition. - // In this case, that second line is lazy, which “unmakes” the first line - // and turns the whole into one content block. - // - // We’ve now parsed the non-lazy and the lazy line, and can figure out - // whether the lazy line started a new flow block. - // If it did, we exit the current containers between the two flow blocks. - if (self.parser.lazy[token.start.line]) { - let index = childFlow.events.length - while (index--) { - if ( - // The token starts before the line ending… - childFlow.events[index][1].start.offset < lineStartOffset && - // …and either is not ended yet… - (!childFlow.events[index][1].end || - // …or ends after it. - childFlow.events[index][1].end.offset > lineStartOffset) - ) { - // Exit: there’s still something open, which means it’s a lazy line - // part of something. - return - } - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when closing flow in `documentContinue`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {boolean | undefined} */ - let seen - /** @type {Point | undefined} */ - let point - - // Find the previous chunk (the one before the lazy line). - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - if (seen) { - point = self.events[indexBeforeFlow][1].end - break - } - seen = true - } - } - exitContainers(continued) - - // Fix positions. - index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - } - } - - /** - * @param {number} size - * @returns {void} - */ - function exitContainers(size) { - let index = stack.length - - // Exit open containers. - while (index-- > size) { - const entry = stack[index] - self.containerState = entry[1] - entry[0].exit.call(self, effects) - } - stack.length = size - } - function closeFlow() { - childFlow.write([null]) - childToken = undefined - childFlow = undefined - self.containerState._closeFlow = undefined - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContainer(effects, ok, nok) { - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(this.parser.constructs.document, ok, nok), - 'linePrefix', - this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blankLine = { - tokenize: tokenizeBlankLine, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLine(effects, ok, nok) { - return start - - /** - * Start of blank line. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - return markdownSpace(code) - ? factorySpace(effects, after, 'linePrefix')(code) - : after(code) - } - - /** - * At eof/eol, after optional whitespace. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Token} Token - */ - - -/** - * Tokenize subcontent. - * - * @param {Array<Event>} events - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -function subtokenize(events) { - /** @type {Record<string, number>} */ - const jumps = {} - let index = -1 - /** @type {Event} */ - let event - /** @type {number | undefined} */ - let lineIndex - /** @type {number} */ - let otherIndex - /** @type {Event} */ - let otherEvent - /** @type {Array<Event>} */ - let parameters - /** @type {Array<Event>} */ - let subevents - /** @type {boolean | undefined} */ - let more - while (++index < events.length) { - while (index in jumps) { - index = jumps[index] - } - event = events[index] - - // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. - if ( - index && - event[1].type === 'chunkFlow' && - events[index - 1][1].type === 'listItemPrefix' - ) { - subevents = event[1]._tokenizer.events - otherIndex = 0 - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'lineEndingBlank' - ) { - otherIndex += 2 - } - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'content' - ) { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === 'content') { - break - } - if (subevents[otherIndex][1].type === 'chunkText') { - subevents[otherIndex][1]._isInFirstContentOfListItem = true - otherIndex++ - } - } - } - } - - // Enter. - if (event[0] === 'enter') { - if (event[1].contentType) { - Object.assign(jumps, subcontent(events, index)) - index = jumps[index] - more = true - } - } - // Exit. - else if (event[1]._container) { - otherIndex = index - lineIndex = undefined - while (otherIndex--) { - otherEvent = events[otherIndex] - if ( - otherEvent[1].type === 'lineEnding' || - otherEvent[1].type === 'lineEndingBlank' - ) { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - } - otherEvent[1].type = 'lineEnding' - lineIndex = otherIndex - } - } else { - break - } - } - if (lineIndex) { - // Fix position. - event[1].end = Object.assign({}, events[lineIndex][1].start) - - // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index) - parameters.unshift(event) - splice(events, lineIndex, index - lineIndex + 1, parameters) - } - } - } - return !more -} - -/** - * Tokenize embedded tokens. - * - * @param {Array<Event>} events - * @param {number} eventIndex - * @returns {Record<string, number>} - */ -function subcontent(events, eventIndex) { - const token = events[eventIndex][1] - const context = events[eventIndex][2] - let startPosition = eventIndex - 1 - /** @type {Array<number>} */ - const startPositions = [] - const tokenizer = - token._tokenizer || context.parser[token.contentType](token.start) - const childEvents = tokenizer.events - /** @type {Array<[number, number]>} */ - const jumps = [] - /** @type {Record<string, number>} */ - const gaps = {} - /** @type {Array<Chunk>} */ - let stream - /** @type {Token | undefined} */ - let previous - let index = -1 - /** @type {Token | undefined} */ - let current = token - let adjust = 0 - let start = 0 - const breaks = [start] - - // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. - while (current) { - // Find the position of the event for this token. - while (events[++startPosition][1] !== current) { - // Empty. - } - startPositions.push(startPosition) - if (!current._tokenizer) { - stream = context.sliceStream(current) - if (!current.next) { - stream.push(null) - } - if (previous) { - tokenizer.defineSkip(current.start) - } - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true - } - tokenizer.write(stream) - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined - } - } - - // Unravel the next token. - previous = current - current = current.next - } - - // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. - current = token - while (++index < childEvents.length) { - if ( - // Find a void token that includes a break. - childEvents[index][0] === 'exit' && - childEvents[index - 1][0] === 'enter' && - childEvents[index][1].type === childEvents[index - 1][1].type && - childEvents[index][1].start.line !== childEvents[index][1].end.line - ) { - start = index + 1 - breaks.push(start) - // Help GC. - current._tokenizer = undefined - current.previous = undefined - current = current.next - } - } - - // Help GC. - tokenizer.events = [] - - // If there’s one more token (which is the cases for lines that end in an - // EOF), that’s perfect: the last point we found starts it. - // If there isn’t then make sure any remaining content is added to it. - if (current) { - // Help GC. - current._tokenizer = undefined - current.previous = undefined - } else { - breaks.pop() - } - - // Now splice the events from the subtokenizer into the current events, - // moving back to front so that splice indices aren’t affected. - index = breaks.length - while (index--) { - const slice = childEvents.slice(breaks[index], breaks[index + 1]) - const start = startPositions.pop() - jumps.unshift([start, start + slice.length - 1]) - splice(events, start, 2, slice) - } - index = -1 - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] - adjust += jumps[index][1] - jumps[index][0] - 1 - } - return gaps -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** - * No name because it must not be turned off. - * @type {Construct} - */ -const content_content = { - tokenize: tokenizeContent, - resolve: resolveContent -} - -/** @type {Construct} */ -const continuationConstruct = { - tokenize: tokenizeContinuation, - partial: true -} - -/** - * Content is transparent: it’s parsed right now. That way, definitions are also - * parsed right now: before text in paragraphs (specifically, media) are parsed. - * - * @type {Resolver} - */ -function resolveContent(events) { - subtokenize(events) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContent(effects, ok) { - /** @type {Token | undefined} */ - let previous - return chunkStart - - /** - * Before a content chunk. - * - * ```markdown - * > | abc - * ^ - * ``` - * - * @type {State} - */ - function chunkStart(code) { - effects.enter('content') - previous = effects.enter('chunkContent', { - contentType: 'content' - }) - return chunkInside(code) - } - - /** - * In a content chunk. - * - * ```markdown - * > | abc - * ^^^ - * ``` - * - * @type {State} - */ - function chunkInside(code) { - if (code === null) { - return contentEnd(code) - } - - // To do: in `markdown-rs`, each line is parsed on its own, and everything - // is stitched together resolving. - if (markdownLineEnding(code)) { - return effects.check( - continuationConstruct, - contentContinue, - contentEnd - )(code) - } - - // Data. - effects.consume(code) - return chunkInside - } - - /** - * - * - * @type {State} - */ - function contentEnd(code) { - effects.exit('chunkContent') - effects.exit('content') - return ok(code) - } - - /** - * - * - * @type {State} - */ - function contentContinue(code) { - effects.consume(code) - effects.exit('chunkContent') - previous.next = effects.enter('chunkContent', { - contentType: 'content', - previous - }) - previous = previous.next - return chunkInside - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContinuation(effects, ok, nok) { - const self = this - return startLookahead - - /** - * - * - * @type {State} - */ - function startLookahead(code) { - effects.exit('chunkContent') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, prefixed, 'linePrefix') - } - - /** - * - * - * @type {State} - */ - function prefixed(code) { - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - - // Always populated by defaults. - - const tail = self.events[self.events.length - 1] - if ( - !self.parser.constructs.disable.null.includes('codeIndented') && - tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ) { - return ok(code) - } - return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - - -/** @type {InitialConstruct} */ -const flow = { - tokenize: initializeFlow -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeFlow(effects) { - const self = this - const initial = effects.attempt( - // Try to parse a blank line. - blankLine, - atBlankEnding, - // Try to parse initial flow (essentially, only code). - effects.attempt( - this.parser.constructs.flowInitial, - afterConstruct, - factorySpace( - effects, - effects.attempt( - this.parser.constructs.flow, - afterConstruct, - effects.attempt(content_content, afterConstruct) - ), - 'linePrefix' - ) - ) - ) - return initial - - /** @type {State} */ - function atBlankEnding(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEndingBlank') - effects.consume(code) - effects.exit('lineEndingBlank') - self.currentConstruct = undefined - return initial - } - - /** @type {State} */ - function afterConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - self.currentConstruct = undefined - return initial - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -const resolver = { - resolveAll: createResolver() -} -const string = initializeFactory('string') -const text_text = initializeFactory('text') - -/** - * @param {'string' | 'text'} field - * @returns {InitialConstruct} - */ -function initializeFactory(field) { - return { - tokenize: initializeText, - resolveAll: createResolver( - field === 'text' ? resolveAllLineSuffixes : undefined - ) - } - - /** - * @this {TokenizeContext} - * @type {Initializer} - */ - function initializeText(effects) { - const self = this - const constructs = this.parser.constructs[field] - const text = effects.attempt(constructs, start, notText) - return start - - /** @type {State} */ - function start(code) { - return atBreak(code) ? text(code) : notText(code) - } - - /** @type {State} */ - function notText(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('data') - effects.consume(code) - return data - } - - /** @type {State} */ - function data(code) { - if (atBreak(code)) { - effects.exit('data') - return text(code) - } - - // Data. - effects.consume(code) - return data - } - - /** - * @param {Code} code - * @returns {boolean} - */ - function atBreak(code) { - if (code === null) { - return true - } - const list = constructs[code] - let index = -1 - if (list) { - // Always populated by defaults. - - while (++index < list.length) { - const item = list[index] - if (!item.previous || item.previous.call(self, self.previous)) { - return true - } - } - } - return false - } - } -} - -/** - * @param {Resolver | undefined} [extraResolver] - * @returns {Resolver} - */ -function createResolver(extraResolver) { - return resolveAllText - - /** @type {Resolver} */ - function resolveAllText(events, context) { - let index = -1 - /** @type {number | undefined} */ - let enter - - // A rather boring computation (to merge adjacent `data` events) which - // improves mm performance by 29%. - while (++index <= events.length) { - if (enter === undefined) { - if (events[index] && events[index][1].type === 'data') { - enter = index - index++ - } - } else if (!events[index] || events[index][1].type !== 'data') { - // Don’t do anything if there is one data token. - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - index = enter + 2 - } - enter = undefined - } - } - return extraResolver ? extraResolver(events, context) : events - } -} - -/** - * A rather ugly set of instructions which again looks at chunks in the input - * stream. - * The reason to do this here is that it is *much* faster to parse in reverse. - * And that we can’t hook into `null` to split the line suffix before an EOF. - * To do: figure out if we can make this into a clean utility, or even in core. - * As it will be useful for GFMs literal autolink extension (and maybe even - * tables?) - * - * @type {Resolver} - */ -function resolveAllLineSuffixes(events, context) { - let eventIndex = 0 // Skip first. - - while (++eventIndex <= events.length) { - if ( - (eventIndex === events.length || - events[eventIndex][1].type === 'lineEnding') && - events[eventIndex - 1][1].type === 'data' - ) { - const data = events[eventIndex - 1][1] - const chunks = context.sliceStream(data) - let index = chunks.length - let bufferIndex = -1 - let size = 0 - /** @type {boolean | undefined} */ - let tabs - while (index--) { - const chunk = chunks[index] - if (typeof chunk === 'string') { - bufferIndex = chunk.length - while (chunk.charCodeAt(bufferIndex - 1) === 32) { - size++ - bufferIndex-- - } - if (bufferIndex) break - bufferIndex = -1 - } - // Number - else if (chunk === -2) { - tabs = true - size++ - } else if (chunk === -1) { - // Empty - } else { - // Replacement character, exit. - index++ - break - } - } - if (size) { - const token = { - type: - eventIndex === events.length || tabs || size < 2 - ? 'lineSuffix' - : 'hardBreakTrailing', - start: { - line: data.end.line, - column: data.end.column - size, - offset: data.end.offset - size, - _index: data.start._index + index, - _bufferIndex: index - ? bufferIndex - : data.start._bufferIndex + bufferIndex - }, - end: Object.assign({}, data.end) - } - data.end = Object.assign({}, token.start) - if (data.start.offset === data.end.offset) { - Object.assign(data, token) - } else { - events.splice( - eventIndex, - 0, - ['enter', token, context], - ['exit', token, context] - ) - eventIndex += 2 - } - } - eventIndex++ - } - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js -/** - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * Call all `resolveAll`s. - * - * @param {Array<{resolveAll?: Resolver | undefined}>} constructs - * List of constructs, optionally with `resolveAll`s. - * @param {Array<Event>} events - * List of events. - * @param {TokenizeContext} context - * Context used by `tokenize`. - * @returns {Array<Event>} - * Changed events. - */ -function resolveAll(constructs, events, context) { - /** @type {Array<Resolver>} */ - const called = [] - let index = -1 - - while (++index < constructs.length) { - const resolve = constructs[index].resolveAll - - if (resolve && !called.includes(resolve)) { - events = resolve(events, context) - called.push(resolve) - } - } - - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenType} TokenType - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * @callback Restore - * @returns {void} - * - * @typedef Info - * @property {Restore} restore - * @property {number} from - * - * @callback ReturnHandle - * Handle a successful run. - * @param {Construct} construct - * @param {Info} info - * @returns {void} - */ - - - - -/** - * Create a tokenizer. - * Tokenizers deal with one type of data (e.g., containers, flow, text). - * The parser is the object dealing with it all. - * `initialize` works like other constructs, except that only its `tokenize` - * function is used, in which case it doesn’t receive an `ok` or `nok`. - * `from` can be given to set the point before the first character, although - * when further lines are indented, they must be set with `defineSkip`. - * - * @param {ParseContext} parser - * @param {InitialConstruct} initialize - * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] - * @returns {TokenizeContext} - */ -function createTokenizer(parser, initialize, from) { - /** @type {Point} */ - let point = Object.assign( - from - ? Object.assign({}, from) - : { - line: 1, - column: 1, - offset: 0 - }, - { - _index: 0, - _bufferIndex: -1 - } - ) - /** @type {Record<string, number>} */ - const columnStart = {} - /** @type {Array<Construct>} */ - const resolveAllConstructs = [] - /** @type {Array<Chunk>} */ - let chunks = [] - /** @type {Array<Token>} */ - let stack = [] - /** @type {boolean | undefined} */ - let consumed = true - - /** - * Tools used for tokenizing. - * - * @type {Effects} - */ - const effects = { - consume, - enter, - exit, - attempt: constructFactory(onsuccessfulconstruct), - check: constructFactory(onsuccessfulcheck), - interrupt: constructFactory(onsuccessfulcheck, { - interrupt: true - }) - } - - /** - * State and tools for resolving and serializing. - * - * @type {TokenizeContext} - */ - const context = { - previous: null, - code: null, - containerState: {}, - events: [], - parser, - sliceStream, - sliceSerialize, - now, - defineSkip, - write - } - - /** - * The state function. - * - * @type {State | void} - */ - let state = initialize.tokenize.call(context, effects) - - /** - * Track which character we expect to be consumed, to catch bugs. - * - * @type {Code} - */ - let expectedCode - if (initialize.resolveAll) { - resolveAllConstructs.push(initialize) - } - return context - - /** @type {TokenizeContext['write']} */ - function write(slice) { - chunks = push(chunks, slice) - main() - - // Exit if we’re not done, resolve might change stuff. - if (chunks[chunks.length - 1] !== null) { - return [] - } - addResult(initialize, 0) - - // Otherwise, resolve, and exit. - context.events = resolveAll(resolveAllConstructs, context.events, context) - return context.events - } - - // - // Tools. - // - - /** @type {TokenizeContext['sliceSerialize']} */ - function sliceSerialize(token, expandTabs) { - return serializeChunks(sliceStream(token), expandTabs) - } - - /** @type {TokenizeContext['sliceStream']} */ - function sliceStream(token) { - return sliceChunks(chunks, token) - } - - /** @type {TokenizeContext['now']} */ - function now() { - // This is a hot path, so we clone manually instead of `Object.assign({}, point)` - const {line, column, offset, _index, _bufferIndex} = point - return { - line, - column, - offset, - _index, - _bufferIndex - } - } - - /** @type {TokenizeContext['defineSkip']} */ - function defineSkip(value) { - columnStart[value.line] = value.column - accountForPotentialSkip() - } - - // - // State management. - // - - /** - * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by - * `consume`). - * Here is where we walk through the chunks, which either include strings of - * several characters, or numerical character codes. - * The reason to do this in a loop instead of a call is so the stack can - * drain. - * - * @returns {void} - */ - function main() { - /** @type {number} */ - let chunkIndex - while (point._index < chunks.length) { - const chunk = chunks[point._index] - - // If we’re in a buffer chunk, loop through it. - if (typeof chunk === 'string') { - chunkIndex = point._index - if (point._bufferIndex < 0) { - point._bufferIndex = 0 - } - while ( - point._index === chunkIndex && - point._bufferIndex < chunk.length - ) { - go(chunk.charCodeAt(point._bufferIndex)) - } - } else { - go(chunk) - } - } - } - - /** - * Deal with one code. - * - * @param {Code} code - * @returns {void} - */ - function go(code) { - consumed = undefined - expectedCode = code - state = state(code) - } - - /** @type {Effects['consume']} */ - function consume(code) { - if (markdownLineEnding(code)) { - point.line++ - point.column = 1 - point.offset += code === -3 ? 2 : 1 - accountForPotentialSkip() - } else if (code !== -1) { - point.column++ - point.offset++ - } - - // Not in a string chunk. - if (point._bufferIndex < 0) { - point._index++ - } else { - point._bufferIndex++ - - // At end of string chunk. - // @ts-expect-error Points w/ non-negative `_bufferIndex` reference - // strings. - if (point._bufferIndex === chunks[point._index].length) { - point._bufferIndex = -1 - point._index++ - } - } - - // Expose the previous character. - context.previous = code - - // Mark as consumed. - consumed = true - } - - /** @type {Effects['enter']} */ - function enter(type, fields) { - /** @type {Token} */ - // @ts-expect-error Patch instead of assign required fields to help GC. - const token = fields || {} - token.type = type - token.start = now() - context.events.push(['enter', token, context]) - stack.push(token) - return token - } - - /** @type {Effects['exit']} */ - function exit(type) { - const token = stack.pop() - token.end = now() - context.events.push(['exit', token, context]) - return token - } - - /** - * Use results. - * - * @type {ReturnHandle} - */ - function onsuccessfulconstruct(construct, info) { - addResult(construct, info.from) - } - - /** - * Discard results. - * - * @type {ReturnHandle} - */ - function onsuccessfulcheck(_, info) { - info.restore() - } - - /** - * Factory to attempt/check/interrupt. - * - * @param {ReturnHandle} onreturn - * @param {{interrupt?: boolean | undefined} | undefined} [fields] - */ - function constructFactory(onreturn, fields) { - return hook - - /** - * Handle either an object mapping codes to constructs, a list of - * constructs, or a single construct. - * - * @param {Array<Construct> | Construct | ConstructRecord} constructs - * @param {State} returnState - * @param {State | undefined} [bogusState] - * @returns {State} - */ - function hook(constructs, returnState, bogusState) { - /** @type {Array<Construct>} */ - let listOfConstructs - /** @type {number} */ - let constructIndex - /** @type {Construct} */ - let currentConstruct - /** @type {Info} */ - let info - return Array.isArray(constructs) /* c8 ignore next 1 */ - ? handleListOfConstructs(constructs) - : 'tokenize' in constructs - ? // @ts-expect-error Looks like a construct. - handleListOfConstructs([constructs]) - : handleMapOfConstructs(constructs) - - /** - * Handle a list of construct. - * - * @param {ConstructRecord} map - * @returns {State} - */ - function handleMapOfConstructs(map) { - return start - - /** @type {State} */ - function start(code) { - const def = code !== null && map[code] - const all = code !== null && map.null - const list = [ - // To do: add more extension tests. - /* c8 ignore next 2 */ - ...(Array.isArray(def) ? def : def ? [def] : []), - ...(Array.isArray(all) ? all : all ? [all] : []) - ] - return handleListOfConstructs(list)(code) - } - } - - /** - * Handle a list of construct. - * - * @param {Array<Construct>} list - * @returns {State} - */ - function handleListOfConstructs(list) { - listOfConstructs = list - constructIndex = 0 - if (list.length === 0) { - return bogusState - } - return handleConstruct(list[constructIndex]) - } - - /** - * Handle a single construct. - * - * @param {Construct} construct - * @returns {State} - */ - function handleConstruct(construct) { - return start - - /** @type {State} */ - function start(code) { - // To do: not needed to store if there is no bogus state, probably? - // Currently doesn’t work because `inspect` in document does a check - // w/o a bogus, which doesn’t make sense. But it does seem to help perf - // by not storing. - info = store() - currentConstruct = construct - if (!construct.partial) { - context.currentConstruct = construct - } - - // Always populated by defaults. - - if ( - construct.name && - context.parser.constructs.disable.null.includes(construct.name) - ) { - return nok(code) - } - return construct.tokenize.call( - // If we do have fields, create an object w/ `context` as its - // prototype. - // This allows a “live binding”, which is needed for `interrupt`. - fields ? Object.assign(Object.create(context), fields) : context, - effects, - ok, - nok - )(code) - } - } - - /** @type {State} */ - function ok(code) { - consumed = true - onreturn(currentConstruct, info) - return returnState - } - - /** @type {State} */ - function nok(code) { - consumed = true - info.restore() - if (++constructIndex < listOfConstructs.length) { - return handleConstruct(listOfConstructs[constructIndex]) - } - return bogusState - } - } - } - - /** - * @param {Construct} construct - * @param {number} from - * @returns {void} - */ - function addResult(construct, from) { - if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { - resolveAllConstructs.push(construct) - } - if (construct.resolve) { - splice( - context.events, - from, - context.events.length - from, - construct.resolve(context.events.slice(from), context) - ) - } - if (construct.resolveTo) { - context.events = construct.resolveTo(context.events, context) - } - } - - /** - * Store state. - * - * @returns {Info} - */ - function store() { - const startPoint = now() - const startPrevious = context.previous - const startCurrentConstruct = context.currentConstruct - const startEventsIndex = context.events.length - const startStack = Array.from(stack) - return { - restore, - from: startEventsIndex - } - - /** - * Restore state. - * - * @returns {void} - */ - function restore() { - point = startPoint - context.previous = startPrevious - context.currentConstruct = startCurrentConstruct - context.events.length = startEventsIndex - stack = startStack - accountForPotentialSkip() - } - } - - /** - * Move the current point a bit forward in the line when it’s on a column - * skip. - * - * @returns {void} - */ - function accountForPotentialSkip() { - if (point.line in columnStart && point.column < 2) { - point.column = columnStart[point.line] - point.offset += columnStart[point.line] - 1 - } - } -} - -/** - * Get the chunks from a slice of chunks in the range of a token. - * - * @param {Array<Chunk>} chunks - * @param {Pick<Token, 'end' | 'start'>} token - * @returns {Array<Chunk>} - */ -function sliceChunks(chunks, token) { - const startIndex = token.start._index - const startBufferIndex = token.start._bufferIndex - const endIndex = token.end._index - const endBufferIndex = token.end._bufferIndex - /** @type {Array<Chunk>} */ - let view - if (startIndex === endIndex) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] - } else { - view = chunks.slice(startIndex, endIndex) - if (startBufferIndex > -1) { - const head = view[0] - if (typeof head === 'string') { - view[0] = head.slice(startBufferIndex) - } else { - view.shift() - } - } - if (endBufferIndex > 0) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view.push(chunks[endIndex].slice(0, endBufferIndex)) - } - } - return view -} - -/** - * Get the string value of a slice of chunks. - * - * @param {Array<Chunk>} chunks - * @param {boolean | undefined} [expandTabs=false] - * @returns {string} - */ -function serializeChunks(chunks, expandTabs) { - let index = -1 - /** @type {Array<string>} */ - const result = [] - /** @type {boolean | undefined} */ - let atTab - while (++index < chunks.length) { - const chunk = chunks[index] - /** @type {string} */ - let value - if (typeof chunk === 'string') { - value = chunk - } else - switch (chunk) { - case -5: { - value = '\r' - break - } - case -4: { - value = '\n' - break - } - case -3: { - value = '\r' + '\n' - break - } - case -2: { - value = expandTabs ? ' ' : '\t' - break - } - case -1: { - if (!expandTabs && atTab) continue - value = ' ' - break - } - default: { - // Currently only replacement character. - value = String.fromCharCode(chunk) - } - } - atTab = chunk === -2 - result.push(value) - } - return result.join('') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const thematicBreak = { - name: 'thematicBreak', - tokenize: tokenizeThematicBreak -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeThematicBreak(effects, ok, nok) { - let size = 0 - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of thematic break. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('thematicBreak') - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * After optional whitespace, at marker. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - marker = code - return atBreak(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.enter('thematicBreakSequence') - return sequence(code) - } - if (size >= 3 && (code === null || markdownLineEnding(code))) { - effects.exit('thematicBreak') - return ok(code) - } - return nok(code) - } - - /** - * In sequence. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function sequence(code) { - if (code === marker) { - effects.consume(code) - size++ - return sequence - } - effects.exit('thematicBreakSequence') - return markdownSpace(code) - ? factorySpace(effects, atBreak, 'whitespace')(code) - : atBreak(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - -/** @type {Construct} */ -const list = { - name: 'list', - tokenize: tokenizeListStart, - continuation: { - tokenize: tokenizeListContinuation - }, - exit: tokenizeListEnd -} - -/** @type {Construct} */ -const listItemPrefixWhitespaceConstruct = { - tokenize: tokenizeListItemPrefixWhitespace, - partial: true -} - -/** @type {Construct} */ -const indentConstruct = { - tokenize: tokenizeIndent, - partial: true -} - -// To do: `markdown-rs` parses list items on their own and later stitches them -// together. - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListStart(effects, ok, nok) { - const self = this - const tail = self.events[self.events.length - 1] - let initialSize = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - let size = 0 - return start - - /** @type {State} */ - function start(code) { - const kind = - self.containerState.type || - (code === 42 || code === 43 || code === 45 - ? 'listUnordered' - : 'listOrdered') - if ( - kind === 'listUnordered' - ? !self.containerState.marker || code === self.containerState.marker - : asciiDigit(code) - ) { - if (!self.containerState.type) { - self.containerState.type = kind - effects.enter(kind, { - _container: true - }) - } - if (kind === 'listUnordered') { - effects.enter('listItemPrefix') - return code === 42 || code === 45 - ? effects.check(thematicBreak, nok, atMarker)(code) - : atMarker(code) - } - if (!self.interrupt || code === 49) { - effects.enter('listItemPrefix') - effects.enter('listItemValue') - return inside(code) - } - } - return nok(code) - } - - /** @type {State} */ - function inside(code) { - if (asciiDigit(code) && ++size < 10) { - effects.consume(code) - return inside - } - if ( - (!self.interrupt || size < 2) && - (self.containerState.marker - ? code === self.containerState.marker - : code === 41 || code === 46) - ) { - effects.exit('listItemValue') - return atMarker(code) - } - return nok(code) - } - - /** - * @type {State} - **/ - function atMarker(code) { - effects.enter('listItemMarker') - effects.consume(code) - effects.exit('listItemMarker') - self.containerState.marker = self.containerState.marker || code - return effects.check( - blankLine, - // Can’t be empty when interrupting. - self.interrupt ? nok : onBlank, - effects.attempt( - listItemPrefixWhitespaceConstruct, - endOfPrefix, - otherPrefix - ) - ) - } - - /** @type {State} */ - function onBlank(code) { - self.containerState.initialBlankLine = true - initialSize++ - return endOfPrefix(code) - } - - /** @type {State} */ - function otherPrefix(code) { - if (markdownSpace(code)) { - effects.enter('listItemPrefixWhitespace') - effects.consume(code) - effects.exit('listItemPrefixWhitespace') - return endOfPrefix - } - return nok(code) - } - - /** @type {State} */ - function endOfPrefix(code) { - self.containerState.size = - initialSize + - self.sliceSerialize(effects.exit('listItemPrefix'), true).length - return ok(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListContinuation(effects, ok, nok) { - const self = this - self.containerState._closeFlow = undefined - return effects.check(blankLine, onBlank, notBlank) - - /** @type {State} */ - function onBlank(code) { - self.containerState.furtherBlankLines = - self.containerState.furtherBlankLines || - self.containerState.initialBlankLine - - // We have a blank line. - // Still, try to consume at most the items size. - return factorySpace( - effects, - ok, - 'listItemIndent', - self.containerState.size + 1 - )(code) - } - - /** @type {State} */ - function notBlank(code) { - if (self.containerState.furtherBlankLines || !markdownSpace(code)) { - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return notInCurrentItem(code) - } - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) - } - - /** @type {State} */ - function notInCurrentItem(code) { - // While we do continue, we signal that the flow should be closed. - self.containerState._closeFlow = true - // As we’re closing flow, we’re no longer interrupting. - self.interrupt = undefined - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(list, ok, nok), - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeIndent(effects, ok, nok) { - const self = this - return factorySpace( - effects, - afterPrefix, - 'listItemIndent', - self.containerState.size + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'listItemIndent' && - tail[2].sliceSerialize(tail[1], true).length === self.containerState.size - ? ok(code) - : nok(code) - } -} - -/** - * @type {Exiter} - * @this {TokenizeContext} - */ -function tokenizeListEnd(effects) { - effects.exit(this.containerState.type) -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListItemPrefixWhitespace(effects, ok, nok) { - const self = this - - // Always populated by defaults. - - return factorySpace( - effects, - afterPrefix, - 'listItemPrefixWhitespace', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return !markdownSpace(code) && - tail && - tail[1].type === 'listItemPrefixWhitespace' - ? ok(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blockQuote = { - name: 'blockQuote', - tokenize: tokenizeBlockQuoteStart, - continuation: { - tokenize: tokenizeBlockQuoteContinuation - }, - exit -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteStart(effects, ok, nok) { - const self = this - return start - - /** - * Start of block quote. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 62) { - const state = self.containerState - if (!state.open) { - effects.enter('blockQuote', { - _container: true - }) - state.open = true - } - effects.enter('blockQuotePrefix') - effects.enter('blockQuoteMarker') - effects.consume(code) - effects.exit('blockQuoteMarker') - return after - } - return nok(code) - } - - /** - * After `>`, before optional whitespace. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownSpace(code)) { - effects.enter('blockQuotePrefixWhitespace') - effects.consume(code) - effects.exit('blockQuotePrefixWhitespace') - effects.exit('blockQuotePrefix') - return ok - } - effects.exit('blockQuotePrefix') - return ok(code) - } -} - -/** - * Start of block quote continuation. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteContinuation(effects, ok, nok) { - const self = this - return contStart - - /** - * Start of block quote continuation. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contStart(code) { - if (markdownSpace(code)) { - // Always populated by defaults. - - return factorySpace( - effects, - contBefore, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } - return contBefore(code) - } - - /** - * At `>`, after optional whitespace. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contBefore(code) { - return effects.attempt(blockQuote, ok, nok)(code) - } -} - -/** @type {Exiter} */ -function exit(effects) { - effects.exit('blockQuote') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * <a> - * <a\>b> - * <a b> - * <a)> - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`<a>` or `b`). - * @param {TokenType} literalType - * Type when enclosed (`<a>`). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryDestination( - effects, - ok, - nok, - type, - literalType, - literalMarkerType, - rawType, - stringType, - max -) { - const limit = max || Number.POSITIVE_INFINITY - let balance = 0 - return start - - /** - * Start of destination. - * - * ```markdown - * > | <aa> - * ^ - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 60) { - effects.enter(type) - effects.enter(literalType) - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - return enclosedBefore - } - - // ASCII control, space, closing paren. - if (code === null || code === 32 || code === 41 || asciiControl(code)) { - return nok(code) - } - effects.enter(type) - effects.enter(rawType) - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return raw(code) - } - - /** - * After `<`, at an enclosed destination. - * - * ```markdown - * > | <aa> - * ^ - * ``` - * - * @type {State} - */ - function enclosedBefore(code) { - if (code === 62) { - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - effects.exit(literalType) - effects.exit(type) - return ok - } - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return enclosed(code) - } - - /** - * In enclosed destination. - * - * ```markdown - * > | <aa> - * ^ - * ``` - * - * @type {State} - */ - function enclosed(code) { - if (code === 62) { - effects.exit('chunkString') - effects.exit(stringType) - return enclosedBefore(code) - } - if (code === null || code === 60 || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? enclosedEscape : enclosed - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | <a\*a> - * ^ - * ``` - * - * @type {State} - */ - function enclosedEscape(code) { - if (code === 60 || code === 62 || code === 92) { - effects.consume(code) - return enclosed - } - return enclosed(code) - } - - /** - * In raw destination. - * - * ```markdown - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function raw(code) { - if ( - !balance && - (code === null || code === 41 || markdownLineEndingOrSpace(code)) - ) { - effects.exit('chunkString') - effects.exit(stringType) - effects.exit(rawType) - effects.exit(type) - return ok(code) - } - if (balance < limit && code === 40) { - effects.consume(code) - balance++ - return raw - } - if (code === 41) { - effects.consume(code) - balance-- - return raw - } - - // ASCII control (but *not* `\0`) and space and `(`. - // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it - // doesn’t. - if (code === null || code === 32 || code === 40 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? rawEscape : raw - } - - /** - * After `\`, at special character. - * - * ```markdown - * > | a\*a - * ^ - * ``` - * - * @type {State} - */ - function rawEscape(code) { - if (code === 40 || code === 41 || code === 92) { - effects.consume(code) - return raw - } - return raw(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryLabel(effects, ok, nok, type, markerType, stringType) { - const self = this - let size = 0 - /** @type {boolean} */ - let seen - return start - - /** - * Start of label. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.enter(stringType) - return atBreak - } - - /** - * In label, at something, before something else. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if ( - size > 999 || - code === null || - code === 91 || - (code === 93 && !seen) || - // To do: remove in the future once we’ve switched from - // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, - // which doesn’t need this. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - (code === 94 && - !size && - '_hiddenFootnoteSupport' in self.parser.constructs) - ) { - return nok(code) - } - if (code === 93) { - effects.exit(stringType) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - - // To do: indent? Link chunks and EOLs together? - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return atBreak - } - effects.enter('chunkString', { - contentType: 'string' - }) - return labelInside(code) - } - - /** - * In label, in text. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function labelInside(code) { - if ( - code === null || - code === 91 || - code === 93 || - markdownLineEnding(code) || - size++ > 999 - ) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - if (!seen) seen = !markdownSpace(code) - return code === 92 ? labelEscape : labelInside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | [a\*a] - * ^ - * ``` - * - * @type {State} - */ - function labelEscape(code) { - if (code === 91 || code === 92 || code === 93) { - effects.consume(code) - size++ - return labelInside - } - return labelInside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryTitle(effects, ok, nok, type, markerType, stringType) { - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of title. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 34 || code === 39 || code === 40) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - marker = code === 40 ? 41 : code - return begin - } - return nok(code) - } - - /** - * After opening marker. - * - * This is also used at the closing marker. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function begin(code) { - if (code === marker) { - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - effects.enter(stringType) - return atBreak(code) - } - - /** - * At something, before something else. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.exit(stringType) - return begin(marker) - } - if (code === null) { - return nok(code) - } - - // Note: blank lines can’t exist in content. - if (markdownLineEnding(code)) { - // To do: use `space_or_tab_eol_with_options`, connect. - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, atBreak, 'linePrefix') - } - effects.enter('chunkString', { - contentType: 'string' - }) - return inside(code) - } - - /** - * - * - * @type {State} - */ - function inside(code) { - if (code === marker || code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - return code === 92 ? escape : inside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | "a\*b" - * ^ - * ``` - * - * @type {State} - */ - function escape(code) { - if (code === marker || code === 92) { - effects.consume(code) - return inside - } - return inside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - */ - - - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns - * Start state. - */ -function factoryWhitespace(effects, ok) { - /** @type {boolean} */ - let seen - return start - - /** @type {State} */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - seen = true - return start - } - if (markdownSpace(code)) { - return factorySpace( - effects, - start, - seen ? 'linePrefix' : 'lineSuffix' - )(code) - } - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -function normalizeIdentifier(value) { - return ( - value - // Collapse markdown whitespace. - .replace(/[\t\n\r ]+/g, ' ') - // Trim. - .replace(/^ | $/g, '') - // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase() - .toUpperCase() - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - -/** @type {Construct} */ -const definition = { - name: 'definition', - tokenize: tokenizeDefinition -} - -/** @type {Construct} */ -const titleBefore = { - tokenize: tokenizeTitleBefore, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeDefinition(effects, ok, nok) { - const self = this - /** @type {string} */ - let identifier - return start - - /** - * At start of a definition. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Do not interrupt paragraphs (but do follow definitions). - // To do: do `interrupt` the way `markdown-rs` does. - // To do: parse whitespace the way `markdown-rs` does. - effects.enter('definition') - return before(code) - } - - /** - * After optional whitespace, at `[`. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - // To do: parse whitespace the way `markdown-rs` does. - - return factoryLabel.call( - self, - effects, - labelAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionLabel', - 'definitionLabelMarker', - 'definitionLabelString' - )(code) - } - - /** - * After label. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function labelAfter(code) { - identifier = normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - if (code === 58) { - effects.enter('definitionMarker') - effects.consume(code) - effects.exit('definitionMarker') - return markerAfter - } - return nok(code) - } - - /** - * After marker. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function markerAfter(code) { - // Note: whitespace is optional. - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, destinationBefore)(code) - : destinationBefore(code) - } - - /** - * Before destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationBefore(code) { - return factoryDestination( - effects, - destinationAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionDestination', - 'definitionDestinationLiteral', - 'definitionDestinationLiteralMarker', - 'definitionDestinationRaw', - 'definitionDestinationString' - )(code) - } - - /** - * After destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationAfter(code) { - return effects.attempt(titleBefore, after, after)(code) - } - - /** - * After definition. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return markdownSpace(code) - ? factorySpace(effects, afterWhitespace, 'whitespace')(code) - : afterWhitespace(code) - } - - /** - * After definition, after optional whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function afterWhitespace(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('definition') - - // Note: we don’t care about uniqueness. - // It’s likely that that doesn’t happen very frequently. - // It is more likely that it wastes precious time. - self.parser.defined.push(identifier) - - // To do: `markdown-rs` interrupt. - // // You’d be interrupting. - // tokenizer.interrupt = true - return ok(code) - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeTitleBefore(effects, ok, nok) { - return titleBefore - - /** - * After destination, at whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, beforeMarker)(code) - : nok(code) - } - - /** - * At title. - * - * ```markdown - * | [a]: b - * > | "c" - * ^ - * ``` - * - * @type {State} - */ - function beforeMarker(code) { - return factoryTitle( - effects, - titleAfter, - nok, - 'definitionTitle', - 'definitionTitleMarker', - 'definitionTitleString' - )(code) - } - - /** - * After title. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfter(code) { - return markdownSpace(code) - ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) - : titleAfterOptionalWhitespace(code) - } - - /** - * After title, after optional whitespace. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfterOptionalWhitespace(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const codeIndented = { - name: 'codeIndented', - tokenize: tokenizeCodeIndented -} - -/** @type {Construct} */ -const furtherStart = { - tokenize: tokenizeFurtherStart, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeIndented(effects, ok, nok) { - const self = this - return start - - /** - * Start of code (indented). - * - * > **Parsing note**: it is not needed to check if this first line is a - * > filled line (that it has a non-whitespace character), because blank lines - * > are parsed already, so we never run into that. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: manually check if interrupting like `markdown-rs`. - - effects.enter('codeIndented') - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? atBreak(code) - : nok(code) - } - - /** - * At a break. - * - * ```markdown - * > | aaa - * ^ ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === null) { - return after(code) - } - if (markdownLineEnding(code)) { - return effects.attempt(furtherStart, atBreak, after)(code) - } - effects.enter('codeFlowValue') - return inside(code) - } - - /** - * In code content. - * - * ```markdown - * > | aaa - * ^^^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return atBreak(code) - } - effects.consume(code) - return inside - } - - /** @type {State} */ - function after(code) { - effects.exit('codeIndented') - // To do: allow interrupting like `markdown-rs`. - // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeFurtherStart(effects, ok, nok) { - const self = this - return furtherStart - - /** - * At eol, trying to parse another indent. - * - * ```markdown - * > | aaa - * ^ - * | bbb - * ``` - * - * @type {State} - */ - function furtherStart(code) { - // To do: improve `lazy` / `pierce` handling. - // If this is a lazy line, it can’t be code. - if (self.parser.lazy[self.now().line]) { - return nok(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return furtherStart - } - - // To do: the code here in `micromark-js` is a bit different from - // `markdown-rs` because there it can attempt spaces. - // We can’t yet. - // - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? ok(code) - : markdownLineEnding(code) - ? furtherStart(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const headingAtx = { - name: 'headingAtx', - tokenize: tokenizeHeadingAtx, - resolve: resolveHeadingAtx -} - -/** @type {Resolver} */ -function resolveHeadingAtx(events, context) { - let contentEnd = events.length - 2 - let contentStart = 3 - /** @type {Token} */ - let content - /** @type {Token} */ - let text - - // Prefix whitespace, part of the opening. - if (events[contentStart][1].type === 'whitespace') { - contentStart += 2 - } - - // Suffix whitespace, part of the closing. - if ( - contentEnd - 2 > contentStart && - events[contentEnd][1].type === 'whitespace' - ) { - contentEnd -= 2 - } - if ( - events[contentEnd][1].type === 'atxHeadingSequence' && - (contentStart === contentEnd - 1 || - (contentEnd - 4 > contentStart && - events[contentEnd - 2][1].type === 'whitespace')) - ) { - contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 - } - if (contentEnd > contentStart) { - content = { - type: 'atxHeadingText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end - } - text = { - type: 'chunkText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end, - contentType: 'text' - } - splice(events, contentStart, contentEnd - contentStart + 1, [ - ['enter', content, context], - ['enter', text, context], - ['exit', text, context], - ['exit', content, context] - ]) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHeadingAtx(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of a heading (atx). - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - effects.enter('atxHeading') - return before(code) - } - - /** - * After optional whitespace, at `#`. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('atxHeadingSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 35 && size++ < 6) { - effects.consume(code) - return sequenceOpen - } - - // Always at least one `#`. - if (code === null || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingSequence') - return atBreak(code) - } - return nok(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === 35) { - effects.enter('atxHeadingSequence') - return sequenceFurther(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('atxHeading') - // To do: interrupt like `markdown-rs`. - // // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } - if (markdownSpace(code)) { - return factorySpace(effects, atBreak, 'whitespace')(code) - } - - // To do: generate `data` tokens, add the `text` token later. - // Needs edit map, see: `markdown.rs`. - effects.enter('atxHeadingText') - return data(code) - } - - /** - * In further sequence (after whitespace). - * - * Could be normal “visible” hashes in the heading or a final sequence. - * - * ```markdown - * > | ## aa ## - * ^ - * ``` - * - * @type {State} - */ - function sequenceFurther(code) { - if (code === 35) { - effects.consume(code) - return sequenceFurther - } - effects.exit('atxHeadingSequence') - return atBreak(code) - } - - /** - * In text. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingText') - return atBreak(code) - } - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const setextUnderline = { - name: 'setextUnderline', - tokenize: tokenizeSetextUnderline, - resolveTo: resolveToSetextUnderline -} - -/** @type {Resolver} */ -function resolveToSetextUnderline(events, context) { - // To do: resolve like `markdown-rs`. - let index = events.length - /** @type {number | undefined} */ - let content - /** @type {number | undefined} */ - let text - /** @type {number | undefined} */ - let definition - - // Find the opening of the content. - // It’ll always exist: we don’t tokenize if it isn’t there. - while (index--) { - if (events[index][0] === 'enter') { - if (events[index][1].type === 'content') { - content = index - break - } - if (events[index][1].type === 'paragraph') { - text = index - } - } - // Exit - else { - if (events[index][1].type === 'content') { - // Remove the content end (if needed we’ll add it later) - events.splice(index, 1) - } - if (!definition && events[index][1].type === 'definition') { - definition = index - } - } - } - const heading = { - type: 'setextHeading', - start: Object.assign({}, events[text][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - - // Change the paragraph to setext heading text. - events[text][1].type = 'setextHeadingText' - - // If we have definitions in the content, we’ll keep on having content, - // but we need move it. - if (definition) { - events.splice(text, 0, ['enter', heading, context]) - events.splice(definition + 1, 0, ['exit', events[content][1], context]) - events[content][1].end = Object.assign({}, events[definition][1].end) - } else { - events[content][1] = heading - } - - // Add the heading exit at the end. - events.push(['exit', heading, context]) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeSetextUnderline(effects, ok, nok) { - const self = this - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * At start of heading (setext) underline. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - let index = self.events.length - /** @type {boolean | undefined} */ - let paragraph - // Find an opening. - while (index--) { - // Skip enter/exit of line ending, line prefix, and content. - // We can now either have a definition or a paragraph. - if ( - self.events[index][1].type !== 'lineEnding' && - self.events[index][1].type !== 'linePrefix' && - self.events[index][1].type !== 'content' - ) { - paragraph = self.events[index][1].type === 'paragraph' - break - } - } - - // To do: handle lazy/pierce like `markdown-rs`. - // To do: parse indent like `markdown-rs`. - if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { - effects.enter('setextHeadingLine') - marker = code - return before(code) - } - return nok(code) - } - - /** - * After optional whitespace, at `-` or `=`. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('setextHeadingLineSequence') - return inside(code) - } - - /** - * In sequence. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - effects.exit('setextHeadingLineSequence') - return markdownSpace(code) - ? factorySpace(effects, after, 'lineSuffix')(code) - : after(code) - } - - /** - * After sequence, after optional whitespace. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('setextHeadingLine') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js -/** - * List of lowercase HTML “block” tag names. - * - * The list, when parsing HTML (flow), results in more relaxed rules (condition - * 6). - * Because they are known blocks, the HTML-like syntax doesn’t have to be - * strictly parsed. - * For tag names not in this list, a more strict algorithm (condition 7) is used - * to detect whether the HTML-like syntax is seen as HTML (flow) or not. - * - * This is copied from: - * <https://spec.commonmark.org/0.30/#html-blocks>. - * - * > 👉 **Note**: `search` was added in `CommonMark@0.31`. - */ -const htmlBlockNames = [ - 'address', - 'article', - 'aside', - 'base', - 'basefont', - 'blockquote', - 'body', - 'caption', - 'center', - 'col', - 'colgroup', - 'dd', - 'details', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'frame', - 'frameset', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hr', - 'html', - 'iframe', - 'legend', - 'li', - 'link', - 'main', - 'menu', - 'menuitem', - 'nav', - 'noframes', - 'ol', - 'optgroup', - 'option', - 'p', - 'param', - 'search', - 'section', - 'summary', - 'table', - 'tbody', - 'td', - 'tfoot', - 'th', - 'thead', - 'title', - 'tr', - 'track', - 'ul' -] - -/** - * List of lowercase HTML “raw” tag names. - * - * The list, when parsing HTML (flow), results in HTML that can include lines - * without exiting, until a closing tag also in this list is found (condition - * 1). - * - * This module is copied from: - * <https://spec.commonmark.org/0.30/#html-blocks>. - * - * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - */ -const htmlRawNames = ['pre', 'script', 'style', 'textarea'] - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - -/** @type {Construct} */ -const htmlFlow = { - name: 'htmlFlow', - tokenize: tokenizeHtmlFlow, - resolveTo: resolveToHtmlFlow, - concrete: true -} - -/** @type {Construct} */ -const blankLineBefore = { - tokenize: tokenizeBlankLineBefore, - partial: true -} -const nonLazyContinuationStart = { - tokenize: tokenizeNonLazyContinuationStart, - partial: true -} - -/** @type {Resolver} */ -function resolveToHtmlFlow(events) { - let index = events.length - while (index--) { - if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { - break - } - } - if (index > 1 && events[index - 2][1].type === 'linePrefix') { - // Add the prefix start to the HTML token. - events[index][1].start = events[index - 2][1].start - // Add the prefix start to the HTML line token. - events[index + 1][1].start = events[index - 2][1].start - // Remove the line prefix. - events.splice(index - 2, 2) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlFlow(effects, ok, nok) { - const self = this - /** @type {number} */ - let marker - /** @type {boolean} */ - let closingTag - /** @type {string} */ - let buffer - /** @type {number} */ - let index - /** @type {Code} */ - let markerB - return start - - /** - * Start of HTML (flow). - * - * ```markdown - * > | <x /> - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * At `<`, after optional whitespace. - * - * ```markdown - * > | <x /> - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('htmlFlow') - effects.enter('htmlFlowData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | <x /> - * ^ - * > | <!doctype> - * ^ - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - closingTag = true - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - marker = 3 - // To do: - // tokenizer.concrete = true - // To do: use `markdown-rs` style interrupt. - // While we’re in an instruction instead of a declaration, we’re on a `?` - // right now, so we do need to search for `>`, similar to declarations. - return self.interrupt ? ok : continuationDeclarationInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After `<!`, at declaration, comment, or CDATA. - * - * ```markdown - * > | <!doctype> - * ^ - * > | <!--xxx--> - * ^ - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - marker = 2 - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - marker = 5 - index = 0 - return cdataOpenInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - marker = 4 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After `<!-`, inside a comment, at another `-`. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After `<![`, inside CDATA, expecting `CDATA[`. - * - * ```markdown - * > | <![CDATA[>&<]]> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - if (index === value.length) { - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return cdataOpenInside - } - return nok(code) - } - - /** - * After `</`, in closing tag, at tag name. - * - * ```markdown - * > | </x> - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * In tag name. - * - * ```markdown - * > | <ab> - * ^^ - * > | </ab> - * ^^ - * ``` - * - * @type {State} - */ - function tagName(code) { - if ( - code === null || - code === 47 || - code === 62 || - markdownLineEndingOrSpace(code) - ) { - const slash = code === 47 - const name = buffer.toLowerCase() - if (!slash && !closingTag && htmlRawNames.includes(name)) { - marker = 1 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - if (htmlBlockNames.includes(buffer.toLowerCase())) { - marker = 6 - if (slash) { - effects.consume(code) - return basicSelfClosing - } - - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - marker = 7 - // Do not support complete HTML when interrupting. - return self.interrupt && !self.parser.lazy[self.now().line] - ? nok(code) - : closingTag - ? completeClosingTagAfter(code) - : completeAttributeNameBefore(code) - } - - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - buffer += String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After closing slash of a basic tag name. - * - * ```markdown - * > | <div/> - * ^ - * ``` - * - * @type {State} - */ - function basicSelfClosing(code) { - if (code === 62) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return nok(code) - } - - /** - * After closing slash of a complete tag name. - * - * ```markdown - * > | <x/> - * ^ - * ``` - * - * @type {State} - */ - function completeClosingTagAfter(code) { - if (markdownSpace(code)) { - effects.consume(code) - return completeClosingTagAfter - } - return completeEnd(code) - } - - /** - * At an attribute name. - * - * At first, this state is used after a complete tag name, after whitespace, - * where it expects optional attributes or the end of the tag. - * It is also reused after attributes, when expecting more optional - * attributes. - * - * ```markdown - * > | <a /> - * ^ - * > | <a :b> - * ^ - * > | <a _b> - * ^ - * > | <a b> - * ^ - * > | <a > - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameBefore(code) { - if (code === 47) { - effects.consume(code) - return completeEnd - } - - // ASCII alphanumerical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return completeAttributeName - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameBefore - } - return completeEnd(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | <a :b> - * ^ - * > | <a _b> - * ^ - * > | <a b> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeName(code) { - // ASCII alphanumerical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return completeAttributeName - } - return completeAttributeNameAfter(code) - } - - /** - * After attribute name, at an optional initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | <a b> - * ^ - * > | <a b=c> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return completeAttributeValueBefore - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameAfter - } - return completeAttributeNameBefore(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | <a b=c> - * ^ - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - markerB = code - return completeAttributeValueQuoted - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeValueBefore - } - return completeAttributeValueUnquoted(code) - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | <a b="c"> - * ^ - * > | <a b='c'> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuoted(code) { - if (code === markerB) { - effects.consume(code) - markerB = null - return completeAttributeValueQuotedAfter - } - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return completeAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | <a b=c> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 47 || - code === 60 || - code === 61 || - code === 62 || - code === 96 || - markdownLineEndingOrSpace(code) - ) { - return completeAttributeNameAfter(code) - } - effects.consume(code) - return completeAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the - * end of the tag. - * - * ```markdown - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownSpace(code)) { - return completeAttributeNameBefore(code) - } - return nok(code) - } - - /** - * In certain circumstances of a complete tag where only an `>` is allowed. - * - * ```markdown - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeEnd(code) { - if (code === 62) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * After `>` in a complete tag. - * - * ```markdown - * > | <x> - * ^ - * ``` - * - * @type {State} - */ - function completeAfter(code) { - if (code === null || markdownLineEnding(code)) { - // // Do not form containers. - // tokenizer.concrete = true - return continuation(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * In continuation of any HTML kind. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function continuation(code) { - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationCommentInside - } - if (code === 60 && marker === 1) { - effects.consume(code) - return continuationRawTagOpen - } - if (code === 62 && marker === 4) { - effects.consume(code) - return continuationClose - } - if (code === 63 && marker === 3) { - effects.consume(code) - return continuationDeclarationInside - } - if (code === 93 && marker === 5) { - effects.consume(code) - return continuationCdataInside - } - if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { - effects.exit('htmlFlowData') - return effects.check( - blankLineBefore, - continuationAfter, - continuationStart - )(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationStart(code) - } - effects.consume(code) - return continuation - } - - /** - * In continuation, at eol. - * - * ```markdown - * > | <x> - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStart(code) { - return effects.check( - nonLazyContinuationStart, - continuationStartNonLazy, - continuationAfter - )(code) - } - - /** - * In continuation, at eol, before non-lazy content. - * - * ```markdown - * > | <x> - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStartNonLazy(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return continuationBefore - } - - /** - * In continuation, before non-lazy content. - * - * ```markdown - * | <x> - * > | asd - * ^ - * ``` - * - * @type {State} - */ - function continuationBefore(code) { - if (code === null || markdownLineEnding(code)) { - return continuationStart(code) - } - effects.enter('htmlFlowData') - return continuation(code) - } - - /** - * In comment continuation, after one `-`, expecting another. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function continuationCommentInside(code) { - if (code === 45) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In raw continuation, after `<`, at `/`. - * - * ```markdown - * > | <script>console.log(1)</script> - * ^ - * ``` - * - * @type {State} - */ - function continuationRawTagOpen(code) { - if (code === 47) { - effects.consume(code) - buffer = '' - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In raw continuation, after `</`, in a raw tag name. - * - * ```markdown - * > | <script>console.log(1)</script> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function continuationRawEndTag(code) { - if (code === 62) { - const name = buffer.toLowerCase() - if (htmlRawNames.includes(name)) { - effects.consume(code) - return continuationClose - } - return continuation(code) - } - if (asciiAlpha(code) && buffer.length < 8) { - effects.consume(code) - // @ts-expect-error: not null. - buffer += String.fromCharCode(code) - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In cdata continuation, after `]`, expecting `]>`. - * - * ```markdown - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationCdataInside(code) { - if (code === 93) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In declaration or instruction continuation, at `>`. - * - * ```markdown - * > | <!--> - * ^ - * > | <?> - * ^ - * > | <!q> - * ^ - * > | <!--ab--> - * ^ - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationDeclarationInside(code) { - if (code === 62) { - effects.consume(code) - return continuationClose - } - - // More dashes. - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In closed continuation: everything we get until the eol/eof is part of it. - * - * ```markdown - * > | <!doctype> - * ^ - * ``` - * - * @type {State} - */ - function continuationClose(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationAfter(code) - } - effects.consume(code) - return continuationClose - } - - /** - * Done. - * - * ```markdown - * > | <!doctype> - * ^ - * ``` - * - * @type {State} - */ - function continuationAfter(code) { - effects.exit('htmlFlow') - // // Feel free to interrupt. - // tokenizer.interrupt = false - // // No longer concrete. - // tokenizer.concrete = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuationStart(effects, ok, nok) { - const self = this - return start - - /** - * At eol, before continuation. - * - * ```markdown - * > | * ```js - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return after - } - return nok(code) - } - - /** - * A continuation. - * - * ```markdown - * | * ```js - * > | b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLineBefore(effects, ok, nok) { - return start - - /** - * Before eol, expecting blank line. - * - * ```markdown - * > | <div> - * ^ - * | - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return effects.attempt(blankLine, ok, nok) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const nonLazyContinuation = { - tokenize: tokenizeNonLazyContinuation, - partial: true -} - -/** @type {Construct} */ -const codeFenced = { - name: 'codeFenced', - tokenize: tokenizeCodeFenced, - concrete: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeFenced(effects, ok, nok) { - const self = this - /** @type {Construct} */ - const closeStart = { - tokenize: tokenizeCloseStart, - partial: true - } - let initialPrefix = 0 - let sizeOpen = 0 - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of code. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse whitespace like `markdown-rs`. - return beforeSequenceOpen(code) - } - - /** - * In opening fence, after prefix, at sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeSequenceOpen(code) { - const tail = self.events[self.events.length - 1] - initialPrefix = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - marker = code - effects.enter('codeFenced') - effects.enter('codeFencedFence') - effects.enter('codeFencedFenceSequence') - return sequenceOpen(code) - } - - /** - * In opening fence sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === marker) { - sizeOpen++ - effects.consume(code) - return sequenceOpen - } - if (sizeOpen < 3) { - return nok(code) - } - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, infoBefore, 'whitespace')(code) - : infoBefore(code) - } - - /** - * In opening fence, after the sequence (and optional whitespace), before info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function infoBefore(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return self.interrupt - ? ok(code) - : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFencedFenceInfo') - effects.enter('chunkString', { - contentType: 'string' - }) - return info(code) - } - - /** - * In info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function info(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return infoBefore(code) - } - if (markdownSpace(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return factorySpace(effects, metaBefore, 'whitespace')(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return info - } - - /** - * In opening fence, after info and whitespace, before meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function metaBefore(code) { - if (code === null || markdownLineEnding(code)) { - return infoBefore(code) - } - effects.enter('codeFencedFenceMeta') - effects.enter('chunkString', { - contentType: 'string' - }) - return meta(code) - } - - /** - * In meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function meta(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceMeta') - return infoBefore(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return meta - } - - /** - * At eol/eof in code, before a non-lazy closing fence or content. - * - * ```markdown - * > | ~~~js - * ^ - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function atNonLazyBreak(code) { - return effects.attempt(closeStart, after, contentBefore)(code) - } - - /** - * Before code content, not a closing fence, at eol. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return contentStart - } - - /** - * Before code content, not a closing fence. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentStart(code) { - return initialPrefix > 0 && markdownSpace(code) - ? factorySpace( - effects, - beforeContentChunk, - 'linePrefix', - initialPrefix + 1 - )(code) - : beforeContentChunk(code) - } - - /** - * Before code content, after optional prefix. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeContentChunk(code) { - if (code === null || markdownLineEnding(code)) { - return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFlowValue') - return contentChunk(code) - } - - /** - * In code content. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^^^^^^^^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentChunk(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return beforeContentChunk(code) - } - effects.consume(code) - return contentChunk - } - - /** - * After code. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - effects.exit('codeFenced') - return ok(code) - } - - /** - * @this {TokenizeContext} - * @type {Tokenizer} - */ - function tokenizeCloseStart(effects, ok, nok) { - let size = 0 - return startBefore - - /** - * - * - * @type {State} - */ - function startBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return start - } - - /** - * Before closing fence, at optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Always populated by defaults. - - // To do: `enter` here or in next state? - effects.enter('codeFencedFence') - return markdownSpace(code) - ? factorySpace( - effects, - beforeSequenceClose, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : beforeSequenceClose(code) - } - - /** - * In closing fence, after optional whitespace, at sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function beforeSequenceClose(code) { - if (code === marker) { - effects.enter('codeFencedFenceSequence') - return sequenceClose(code) - } - return nok(code) - } - - /** - * In closing fence sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - if (code === marker) { - size++ - effects.consume(code) - return sequenceClose - } - if (size >= sizeOpen) { - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) - : sequenceCloseAfter(code) - } - return nok(code) - } - - /** - * After closing fence sequence, after optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceCloseAfter(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return ok(code) - } - return nok(code) - } - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuation(effects, ok, nok) { - const self = this - return start - - /** - * - * - * @type {State} - */ - function start(code) { - if (code === null) { - return nok(code) - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineStart - } - - /** - * - * - * @type {State} - */ - function lineStart(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/character-entities/index.js -/** - * Map of named character references. - * - * @type {Record<string, string>} - */ -const characterEntities = { - AElig: 'Æ', - AMP: '&', - Aacute: 'Á', - Abreve: 'Ă', - Acirc: 'Â', - Acy: 'А', - Afr: '𝔄', - Agrave: 'À', - Alpha: 'Α', - Amacr: 'Ā', - And: '⩓', - Aogon: 'Ą', - Aopf: '𝔸', - ApplyFunction: '⁡', - Aring: 'Å', - Ascr: '𝒜', - Assign: '≔', - Atilde: 'Ã', - Auml: 'Ä', - Backslash: '∖', - Barv: '⫧', - Barwed: '⌆', - Bcy: 'Б', - Because: '∵', - Bernoullis: 'ℬ', - Beta: 'Β', - Bfr: '𝔅', - Bopf: '𝔹', - Breve: '˘', - Bscr: 'ℬ', - Bumpeq: '≎', - CHcy: 'Ч', - COPY: '©', - Cacute: 'Ć', - Cap: '⋒', - CapitalDifferentialD: 'ⅅ', - Cayleys: 'ℭ', - Ccaron: 'Č', - Ccedil: 'Ç', - Ccirc: 'Ĉ', - Cconint: '∰', - Cdot: 'Ċ', - Cedilla: '¸', - CenterDot: '·', - Cfr: 'ℭ', - Chi: 'Χ', - CircleDot: '⊙', - CircleMinus: '⊖', - CirclePlus: '⊕', - CircleTimes: '⊗', - ClockwiseContourIntegral: '∲', - CloseCurlyDoubleQuote: '”', - CloseCurlyQuote: '’', - Colon: '∷', - Colone: '⩴', - Congruent: '≡', - Conint: '∯', - ContourIntegral: '∮', - Copf: 'ℂ', - Coproduct: '∐', - CounterClockwiseContourIntegral: '∳', - Cross: '⨯', - Cscr: '𝒞', - Cup: '⋓', - CupCap: '≍', - DD: 'ⅅ', - DDotrahd: '⤑', - DJcy: 'Ђ', - DScy: 'Ѕ', - DZcy: 'Џ', - Dagger: '‡', - Darr: '↡', - Dashv: '⫤', - Dcaron: 'Ď', - Dcy: 'Д', - Del: '∇', - Delta: 'Δ', - Dfr: '𝔇', - DiacriticalAcute: '´', - DiacriticalDot: '˙', - DiacriticalDoubleAcute: '˝', - DiacriticalGrave: '`', - DiacriticalTilde: '˜', - Diamond: '⋄', - DifferentialD: 'ⅆ', - Dopf: '𝔻', - Dot: '¨', - DotDot: '⃜', - DotEqual: '≐', - DoubleContourIntegral: '∯', - DoubleDot: '¨', - DoubleDownArrow: '⇓', - DoubleLeftArrow: '⇐', - DoubleLeftRightArrow: '⇔', - DoubleLeftTee: '⫤', - DoubleLongLeftArrow: '⟸', - DoubleLongLeftRightArrow: '⟺', - DoubleLongRightArrow: '⟹', - DoubleRightArrow: '⇒', - DoubleRightTee: '⊨', - DoubleUpArrow: '⇑', - DoubleUpDownArrow: '⇕', - DoubleVerticalBar: '∥', - DownArrow: '↓', - DownArrowBar: '⤓', - DownArrowUpArrow: '⇵', - DownBreve: '̑', - DownLeftRightVector: '⥐', - DownLeftTeeVector: '⥞', - DownLeftVector: '↽', - DownLeftVectorBar: '⥖', - DownRightTeeVector: '⥟', - DownRightVector: '⇁', - DownRightVectorBar: '⥗', - DownTee: '⊤', - DownTeeArrow: '↧', - Downarrow: '⇓', - Dscr: '𝒟', - Dstrok: 'Đ', - ENG: 'Ŋ', - ETH: 'Ð', - Eacute: 'É', - Ecaron: 'Ě', - Ecirc: 'Ê', - Ecy: 'Э', - Edot: 'Ė', - Efr: '𝔈', - Egrave: 'È', - Element: '∈', - Emacr: 'Ē', - EmptySmallSquare: '◻', - EmptyVerySmallSquare: '▫', - Eogon: 'Ę', - Eopf: '𝔼', - Epsilon: 'Ε', - Equal: '⩵', - EqualTilde: '≂', - Equilibrium: '⇌', - Escr: 'ℰ', - Esim: '⩳', - Eta: 'Η', - Euml: 'Ë', - Exists: '∃', - ExponentialE: 'ⅇ', - Fcy: 'Ф', - Ffr: '𝔉', - FilledSmallSquare: '◼', - FilledVerySmallSquare: '▪', - Fopf: '𝔽', - ForAll: '∀', - Fouriertrf: 'ℱ', - Fscr: 'ℱ', - GJcy: 'Ѓ', - GT: '>', - Gamma: 'Γ', - Gammad: 'Ϝ', - Gbreve: 'Ğ', - Gcedil: 'Ģ', - Gcirc: 'Ĝ', - Gcy: 'Г', - Gdot: 'Ġ', - Gfr: '𝔊', - Gg: '⋙', - Gopf: '𝔾', - GreaterEqual: '≥', - GreaterEqualLess: '⋛', - GreaterFullEqual: '≧', - GreaterGreater: '⪢', - GreaterLess: '≷', - GreaterSlantEqual: '⩾', - GreaterTilde: '≳', - Gscr: '𝒢', - Gt: '≫', - HARDcy: 'Ъ', - Hacek: 'ˇ', - Hat: '^', - Hcirc: 'Ĥ', - Hfr: 'ℌ', - HilbertSpace: 'ℋ', - Hopf: 'ℍ', - HorizontalLine: '─', - Hscr: 'ℋ', - Hstrok: 'Ħ', - HumpDownHump: '≎', - HumpEqual: '≏', - IEcy: 'Е', - IJlig: 'IJ', - IOcy: 'Ё', - Iacute: 'Í', - Icirc: 'Î', - Icy: 'И', - Idot: 'İ', - Ifr: 'ℑ', - Igrave: 'Ì', - Im: 'ℑ', - Imacr: 'Ī', - ImaginaryI: 'ⅈ', - Implies: '⇒', - Int: '∬', - Integral: '∫', - Intersection: '⋂', - InvisibleComma: '⁣', - InvisibleTimes: '⁢', - Iogon: 'Į', - Iopf: '𝕀', - Iota: 'Ι', - Iscr: 'ℐ', - Itilde: 'Ĩ', - Iukcy: 'І', - Iuml: 'Ï', - Jcirc: 'Ĵ', - Jcy: 'Й', - Jfr: '𝔍', - Jopf: '𝕁', - Jscr: '𝒥', - Jsercy: 'Ј', - Jukcy: 'Є', - KHcy: 'Х', - KJcy: 'Ќ', - Kappa: 'Κ', - Kcedil: 'Ķ', - Kcy: 'К', - Kfr: '𝔎', - Kopf: '𝕂', - Kscr: '𝒦', - LJcy: 'Љ', - LT: '<', - Lacute: 'Ĺ', - Lambda: 'Λ', - Lang: '⟪', - Laplacetrf: 'ℒ', - Larr: '↞', - Lcaron: 'Ľ', - Lcedil: 'Ļ', - Lcy: 'Л', - LeftAngleBracket: '⟨', - LeftArrow: '←', - LeftArrowBar: '⇤', - LeftArrowRightArrow: '⇆', - LeftCeiling: '⌈', - LeftDoubleBracket: '⟦', - LeftDownTeeVector: '⥡', - LeftDownVector: '⇃', - LeftDownVectorBar: '⥙', - LeftFloor: '⌊', - LeftRightArrow: '↔', - LeftRightVector: '⥎', - LeftTee: '⊣', - LeftTeeArrow: '↤', - LeftTeeVector: '⥚', - LeftTriangle: '⊲', - LeftTriangleBar: '⧏', - LeftTriangleEqual: '⊴', - LeftUpDownVector: '⥑', - LeftUpTeeVector: '⥠', - LeftUpVector: '↿', - LeftUpVectorBar: '⥘', - LeftVector: '↼', - LeftVectorBar: '⥒', - Leftarrow: '⇐', - Leftrightarrow: '⇔', - LessEqualGreater: '⋚', - LessFullEqual: '≦', - LessGreater: '≶', - LessLess: '⪡', - LessSlantEqual: '⩽', - LessTilde: '≲', - Lfr: '𝔏', - Ll: '⋘', - Lleftarrow: '⇚', - Lmidot: 'Ŀ', - LongLeftArrow: '⟵', - LongLeftRightArrow: '⟷', - LongRightArrow: '⟶', - Longleftarrow: '⟸', - Longleftrightarrow: '⟺', - Longrightarrow: '⟹', - Lopf: '𝕃', - LowerLeftArrow: '↙', - LowerRightArrow: '↘', - Lscr: 'ℒ', - Lsh: '↰', - Lstrok: 'Ł', - Lt: '≪', - Map: '⤅', - Mcy: 'М', - MediumSpace: ' ', - Mellintrf: 'ℳ', - Mfr: '𝔐', - MinusPlus: '∓', - Mopf: '𝕄', - Mscr: 'ℳ', - Mu: 'Μ', - NJcy: 'Њ', - Nacute: 'Ń', - Ncaron: 'Ň', - Ncedil: 'Ņ', - Ncy: 'Н', - NegativeMediumSpace: '​', - NegativeThickSpace: '​', - NegativeThinSpace: '​', - NegativeVeryThinSpace: '​', - NestedGreaterGreater: '≫', - NestedLessLess: '≪', - NewLine: '\n', - Nfr: '𝔑', - NoBreak: '⁠', - NonBreakingSpace: ' ', - Nopf: 'ℕ', - Not: '⫬', - NotCongruent: '≢', - NotCupCap: '≭', - NotDoubleVerticalBar: '∦', - NotElement: '∉', - NotEqual: '≠', - NotEqualTilde: '≂̸', - NotExists: '∄', - NotGreater: '≯', - NotGreaterEqual: '≱', - NotGreaterFullEqual: '≧̸', - NotGreaterGreater: '≫̸', - NotGreaterLess: '≹', - NotGreaterSlantEqual: '⩾̸', - NotGreaterTilde: '≵', - NotHumpDownHump: '≎̸', - NotHumpEqual: '≏̸', - NotLeftTriangle: '⋪', - NotLeftTriangleBar: '⧏̸', - NotLeftTriangleEqual: '⋬', - NotLess: '≮', - NotLessEqual: '≰', - NotLessGreater: '≸', - NotLessLess: '≪̸', - NotLessSlantEqual: '⩽̸', - NotLessTilde: '≴', - NotNestedGreaterGreater: '⪢̸', - NotNestedLessLess: '⪡̸', - NotPrecedes: '⊀', - NotPrecedesEqual: '⪯̸', - NotPrecedesSlantEqual: '⋠', - NotReverseElement: '∌', - NotRightTriangle: '⋫', - NotRightTriangleBar: '⧐̸', - NotRightTriangleEqual: '⋭', - NotSquareSubset: '⊏̸', - NotSquareSubsetEqual: '⋢', - NotSquareSuperset: '⊐̸', - NotSquareSupersetEqual: '⋣', - NotSubset: '⊂⃒', - NotSubsetEqual: '⊈', - NotSucceeds: '⊁', - NotSucceedsEqual: '⪰̸', - NotSucceedsSlantEqual: '⋡', - NotSucceedsTilde: '≿̸', - NotSuperset: '⊃⃒', - NotSupersetEqual: '⊉', - NotTilde: '≁', - NotTildeEqual: '≄', - NotTildeFullEqual: '≇', - NotTildeTilde: '≉', - NotVerticalBar: '∤', - Nscr: '𝒩', - Ntilde: 'Ñ', - Nu: 'Ν', - OElig: 'Œ', - Oacute: 'Ó', - Ocirc: 'Ô', - Ocy: 'О', - Odblac: 'Ő', - Ofr: '𝔒', - Ograve: 'Ò', - Omacr: 'Ō', - Omega: 'Ω', - Omicron: 'Ο', - Oopf: '𝕆', - OpenCurlyDoubleQuote: '“', - OpenCurlyQuote: '‘', - Or: '⩔', - Oscr: '𝒪', - Oslash: 'Ø', - Otilde: 'Õ', - Otimes: '⨷', - Ouml: 'Ö', - OverBar: '‾', - OverBrace: '⏞', - OverBracket: '⎴', - OverParenthesis: '⏜', - PartialD: '∂', - Pcy: 'П', - Pfr: '𝔓', - Phi: 'Φ', - Pi: 'Π', - PlusMinus: '±', - Poincareplane: 'ℌ', - Popf: 'ℙ', - Pr: '⪻', - Precedes: '≺', - PrecedesEqual: '⪯', - PrecedesSlantEqual: '≼', - PrecedesTilde: '≾', - Prime: '″', - Product: '∏', - Proportion: '∷', - Proportional: '∝', - Pscr: '𝒫', - Psi: 'Ψ', - QUOT: '"', - Qfr: '𝔔', - Qopf: 'ℚ', - Qscr: '𝒬', - RBarr: '⤐', - REG: '®', - Racute: 'Ŕ', - Rang: '⟫', - Rarr: '↠', - Rarrtl: '⤖', - Rcaron: 'Ř', - Rcedil: 'Ŗ', - Rcy: 'Р', - Re: 'ℜ', - ReverseElement: '∋', - ReverseEquilibrium: '⇋', - ReverseUpEquilibrium: '⥯', - Rfr: 'ℜ', - Rho: 'Ρ', - RightAngleBracket: '⟩', - RightArrow: '→', - RightArrowBar: '⇥', - RightArrowLeftArrow: '⇄', - RightCeiling: '⌉', - RightDoubleBracket: '⟧', - RightDownTeeVector: '⥝', - RightDownVector: '⇂', - RightDownVectorBar: '⥕', - RightFloor: '⌋', - RightTee: '⊢', - RightTeeArrow: '↦', - RightTeeVector: '⥛', - RightTriangle: '⊳', - RightTriangleBar: '⧐', - RightTriangleEqual: '⊵', - RightUpDownVector: '⥏', - RightUpTeeVector: '⥜', - RightUpVector: '↾', - RightUpVectorBar: '⥔', - RightVector: '⇀', - RightVectorBar: '⥓', - Rightarrow: '⇒', - Ropf: 'ℝ', - RoundImplies: '⥰', - Rrightarrow: '⇛', - Rscr: 'ℛ', - Rsh: '↱', - RuleDelayed: '⧴', - SHCHcy: 'Щ', - SHcy: 'Ш', - SOFTcy: 'Ь', - Sacute: 'Ś', - Sc: '⪼', - Scaron: 'Š', - Scedil: 'Ş', - Scirc: 'Ŝ', - Scy: 'С', - Sfr: '𝔖', - ShortDownArrow: '↓', - ShortLeftArrow: '←', - ShortRightArrow: '→', - ShortUpArrow: '↑', - Sigma: 'Σ', - SmallCircle: '∘', - Sopf: '𝕊', - Sqrt: '√', - Square: '□', - SquareIntersection: '⊓', - SquareSubset: '⊏', - SquareSubsetEqual: '⊑', - SquareSuperset: '⊐', - SquareSupersetEqual: '⊒', - SquareUnion: '⊔', - Sscr: '𝒮', - Star: '⋆', - Sub: '⋐', - Subset: '⋐', - SubsetEqual: '⊆', - Succeeds: '≻', - SucceedsEqual: '⪰', - SucceedsSlantEqual: '≽', - SucceedsTilde: '≿', - SuchThat: '∋', - Sum: '∑', - Sup: '⋑', - Superset: '⊃', - SupersetEqual: '⊇', - Supset: '⋑', - THORN: 'Þ', - TRADE: '™', - TSHcy: 'Ћ', - TScy: 'Ц', - Tab: '\t', - Tau: 'Τ', - Tcaron: 'Ť', - Tcedil: 'Ţ', - Tcy: 'Т', - Tfr: '𝔗', - Therefore: '∴', - Theta: 'Θ', - ThickSpace: '  ', - ThinSpace: ' ', - Tilde: '∼', - TildeEqual: '≃', - TildeFullEqual: '≅', - TildeTilde: '≈', - Topf: '𝕋', - TripleDot: '⃛', - Tscr: '𝒯', - Tstrok: 'Ŧ', - Uacute: 'Ú', - Uarr: '↟', - Uarrocir: '⥉', - Ubrcy: 'Ў', - Ubreve: 'Ŭ', - Ucirc: 'Û', - Ucy: 'У', - Udblac: 'Ű', - Ufr: '𝔘', - Ugrave: 'Ù', - Umacr: 'Ū', - UnderBar: '_', - UnderBrace: '⏟', - UnderBracket: '⎵', - UnderParenthesis: '⏝', - Union: '⋃', - UnionPlus: '⊎', - Uogon: 'Ų', - Uopf: '𝕌', - UpArrow: '↑', - UpArrowBar: '⤒', - UpArrowDownArrow: '⇅', - UpDownArrow: '↕', - UpEquilibrium: '⥮', - UpTee: '⊥', - UpTeeArrow: '↥', - Uparrow: '⇑', - Updownarrow: '⇕', - UpperLeftArrow: '↖', - UpperRightArrow: '↗', - Upsi: 'ϒ', - Upsilon: 'Υ', - Uring: 'Ů', - Uscr: '𝒰', - Utilde: 'Ũ', - Uuml: 'Ü', - VDash: '⊫', - Vbar: '⫫', - Vcy: 'В', - Vdash: '⊩', - Vdashl: '⫦', - Vee: '⋁', - Verbar: '‖', - Vert: '‖', - VerticalBar: '∣', - VerticalLine: '|', - VerticalSeparator: '❘', - VerticalTilde: '≀', - VeryThinSpace: ' ', - Vfr: '𝔙', - Vopf: '𝕍', - Vscr: '𝒱', - Vvdash: '⊪', - Wcirc: 'Ŵ', - Wedge: '⋀', - Wfr: '𝔚', - Wopf: '𝕎', - Wscr: '𝒲', - Xfr: '𝔛', - Xi: 'Ξ', - Xopf: '𝕏', - Xscr: '𝒳', - YAcy: 'Я', - YIcy: 'Ї', - YUcy: 'Ю', - Yacute: 'Ý', - Ycirc: 'Ŷ', - Ycy: 'Ы', - Yfr: '𝔜', - Yopf: '𝕐', - Yscr: '𝒴', - Yuml: 'Ÿ', - ZHcy: 'Ж', - Zacute: 'Ź', - Zcaron: 'Ž', - Zcy: 'З', - Zdot: 'Ż', - ZeroWidthSpace: '​', - Zeta: 'Ζ', - Zfr: 'ℨ', - Zopf: 'ℤ', - Zscr: '𝒵', - aacute: 'á', - abreve: 'ă', - ac: '∾', - acE: '∾̳', - acd: '∿', - acirc: 'â', - acute: '´', - acy: 'а', - aelig: 'æ', - af: '⁡', - afr: '𝔞', - agrave: 'à', - alefsym: 'ℵ', - aleph: 'ℵ', - alpha: 'α', - amacr: 'ā', - amalg: '⨿', - amp: '&', - and: '∧', - andand: '⩕', - andd: '⩜', - andslope: '⩘', - andv: '⩚', - ang: '∠', - ange: '⦤', - angle: '∠', - angmsd: '∡', - angmsdaa: '⦨', - angmsdab: '⦩', - angmsdac: '⦪', - angmsdad: '⦫', - angmsdae: '⦬', - angmsdaf: '⦭', - angmsdag: '⦮', - angmsdah: '⦯', - angrt: '∟', - angrtvb: '⊾', - angrtvbd: '⦝', - angsph: '∢', - angst: 'Å', - angzarr: '⍼', - aogon: 'ą', - aopf: '𝕒', - ap: '≈', - apE: '⩰', - apacir: '⩯', - ape: '≊', - apid: '≋', - apos: "'", - approx: '≈', - approxeq: '≊', - aring: 'å', - ascr: '𝒶', - ast: '*', - asymp: '≈', - asympeq: '≍', - atilde: 'ã', - auml: 'ä', - awconint: '∳', - awint: '⨑', - bNot: '⫭', - backcong: '≌', - backepsilon: '϶', - backprime: '‵', - backsim: '∽', - backsimeq: '⋍', - barvee: '⊽', - barwed: '⌅', - barwedge: '⌅', - bbrk: '⎵', - bbrktbrk: '⎶', - bcong: '≌', - bcy: 'б', - bdquo: '„', - becaus: '∵', - because: '∵', - bemptyv: '⦰', - bepsi: '϶', - bernou: 'ℬ', - beta: 'β', - beth: 'ℶ', - between: '≬', - bfr: '𝔟', - bigcap: '⋂', - bigcirc: '◯', - bigcup: '⋃', - bigodot: '⨀', - bigoplus: '⨁', - bigotimes: '⨂', - bigsqcup: '⨆', - bigstar: '★', - bigtriangledown: '▽', - bigtriangleup: '△', - biguplus: '⨄', - bigvee: '⋁', - bigwedge: '⋀', - bkarow: '⤍', - blacklozenge: '⧫', - blacksquare: '▪', - blacktriangle: '▴', - blacktriangledown: '▾', - blacktriangleleft: '◂', - blacktriangleright: '▸', - blank: '␣', - blk12: '▒', - blk14: '░', - blk34: '▓', - block: '█', - bne: '=⃥', - bnequiv: '≡⃥', - bnot: '⌐', - bopf: '𝕓', - bot: '⊥', - bottom: '⊥', - bowtie: '⋈', - boxDL: '╗', - boxDR: '╔', - boxDl: '╖', - boxDr: '╓', - boxH: '═', - boxHD: '╦', - boxHU: '╩', - boxHd: '╤', - boxHu: '╧', - boxUL: '╝', - boxUR: '╚', - boxUl: '╜', - boxUr: '╙', - boxV: '║', - boxVH: '╬', - boxVL: '╣', - boxVR: '╠', - boxVh: '╫', - boxVl: '╢', - boxVr: '╟', - boxbox: '⧉', - boxdL: '╕', - boxdR: '╒', - boxdl: '┐', - boxdr: '┌', - boxh: '─', - boxhD: '╥', - boxhU: '╨', - boxhd: '┬', - boxhu: '┴', - boxminus: '⊟', - boxplus: '⊞', - boxtimes: '⊠', - boxuL: '╛', - boxuR: '╘', - boxul: '┘', - boxur: '└', - boxv: '│', - boxvH: '╪', - boxvL: '╡', - boxvR: '╞', - boxvh: '┼', - boxvl: '┤', - boxvr: '├', - bprime: '‵', - breve: '˘', - brvbar: '¦', - bscr: '𝒷', - bsemi: '⁏', - bsim: '∽', - bsime: '⋍', - bsol: '\\', - bsolb: '⧅', - bsolhsub: '⟈', - bull: '•', - bullet: '•', - bump: '≎', - bumpE: '⪮', - bumpe: '≏', - bumpeq: '≏', - cacute: 'ć', - cap: '∩', - capand: '⩄', - capbrcup: '⩉', - capcap: '⩋', - capcup: '⩇', - capdot: '⩀', - caps: '∩︀', - caret: '⁁', - caron: 'ˇ', - ccaps: '⩍', - ccaron: 'č', - ccedil: 'ç', - ccirc: 'ĉ', - ccups: '⩌', - ccupssm: '⩐', - cdot: 'ċ', - cedil: '¸', - cemptyv: '⦲', - cent: '¢', - centerdot: '·', - cfr: '𝔠', - chcy: 'ч', - check: '✓', - checkmark: '✓', - chi: 'χ', - cir: '○', - cirE: '⧃', - circ: 'ˆ', - circeq: '≗', - circlearrowleft: '↺', - circlearrowright: '↻', - circledR: '®', - circledS: 'Ⓢ', - circledast: '⊛', - circledcirc: '⊚', - circleddash: '⊝', - cire: '≗', - cirfnint: '⨐', - cirmid: '⫯', - cirscir: '⧂', - clubs: '♣', - clubsuit: '♣', - colon: ':', - colone: '≔', - coloneq: '≔', - comma: ',', - commat: '@', - comp: '∁', - compfn: '∘', - complement: '∁', - complexes: 'ℂ', - cong: '≅', - congdot: '⩭', - conint: '∮', - copf: '𝕔', - coprod: '∐', - copy: '©', - copysr: '℗', - crarr: '↵', - cross: '✗', - cscr: '𝒸', - csub: '⫏', - csube: '⫑', - csup: '⫐', - csupe: '⫒', - ctdot: '⋯', - cudarrl: '⤸', - cudarrr: '⤵', - cuepr: '⋞', - cuesc: '⋟', - cularr: '↶', - cularrp: '⤽', - cup: '∪', - cupbrcap: '⩈', - cupcap: '⩆', - cupcup: '⩊', - cupdot: '⊍', - cupor: '⩅', - cups: '∪︀', - curarr: '↷', - curarrm: '⤼', - curlyeqprec: '⋞', - curlyeqsucc: '⋟', - curlyvee: '⋎', - curlywedge: '⋏', - curren: '¤', - curvearrowleft: '↶', - curvearrowright: '↷', - cuvee: '⋎', - cuwed: '⋏', - cwconint: '∲', - cwint: '∱', - cylcty: '⌭', - dArr: '⇓', - dHar: '⥥', - dagger: '†', - daleth: 'ℸ', - darr: '↓', - dash: '‐', - dashv: '⊣', - dbkarow: '⤏', - dblac: '˝', - dcaron: 'ď', - dcy: 'д', - dd: 'ⅆ', - ddagger: '‡', - ddarr: '⇊', - ddotseq: '⩷', - deg: '°', - delta: 'δ', - demptyv: '⦱', - dfisht: '⥿', - dfr: '𝔡', - dharl: '⇃', - dharr: '⇂', - diam: '⋄', - diamond: '⋄', - diamondsuit: '♦', - diams: '♦', - die: '¨', - digamma: 'ϝ', - disin: '⋲', - div: '÷', - divide: '÷', - divideontimes: '⋇', - divonx: '⋇', - djcy: 'ђ', - dlcorn: '⌞', - dlcrop: '⌍', - dollar: '$', - dopf: '𝕕', - dot: '˙', - doteq: '≐', - doteqdot: '≑', - dotminus: '∸', - dotplus: '∔', - dotsquare: '⊡', - doublebarwedge: '⌆', - downarrow: '↓', - downdownarrows: '⇊', - downharpoonleft: '⇃', - downharpoonright: '⇂', - drbkarow: '⤐', - drcorn: '⌟', - drcrop: '⌌', - dscr: '𝒹', - dscy: 'ѕ', - dsol: '⧶', - dstrok: 'đ', - dtdot: '⋱', - dtri: '▿', - dtrif: '▾', - duarr: '⇵', - duhar: '⥯', - dwangle: '⦦', - dzcy: 'џ', - dzigrarr: '⟿', - eDDot: '⩷', - eDot: '≑', - eacute: 'é', - easter: '⩮', - ecaron: 'ě', - ecir: '≖', - ecirc: 'ê', - ecolon: '≕', - ecy: 'э', - edot: 'ė', - ee: 'ⅇ', - efDot: '≒', - efr: '𝔢', - eg: '⪚', - egrave: 'è', - egs: '⪖', - egsdot: '⪘', - el: '⪙', - elinters: '⏧', - ell: 'ℓ', - els: '⪕', - elsdot: '⪗', - emacr: 'ē', - empty: '∅', - emptyset: '∅', - emptyv: '∅', - emsp13: ' ', - emsp14: ' ', - emsp: ' ', - eng: 'ŋ', - ensp: ' ', - eogon: 'ę', - eopf: '𝕖', - epar: '⋕', - eparsl: '⧣', - eplus: '⩱', - epsi: 'ε', - epsilon: 'ε', - epsiv: 'ϵ', - eqcirc: '≖', - eqcolon: '≕', - eqsim: '≂', - eqslantgtr: '⪖', - eqslantless: '⪕', - equals: '=', - equest: '≟', - equiv: '≡', - equivDD: '⩸', - eqvparsl: '⧥', - erDot: '≓', - erarr: '⥱', - escr: 'ℯ', - esdot: '≐', - esim: '≂', - eta: 'η', - eth: 'ð', - euml: 'ë', - euro: '€', - excl: '!', - exist: '∃', - expectation: 'ℰ', - exponentiale: 'ⅇ', - fallingdotseq: '≒', - fcy: 'ф', - female: '♀', - ffilig: 'ffi', - fflig: 'ff', - ffllig: 'ffl', - ffr: '𝔣', - filig: 'fi', - fjlig: 'fj', - flat: '♭', - fllig: 'fl', - fltns: '▱', - fnof: 'ƒ', - fopf: '𝕗', - forall: '∀', - fork: '⋔', - forkv: '⫙', - fpartint: '⨍', - frac12: '½', - frac13: '⅓', - frac14: '¼', - frac15: '⅕', - frac16: '⅙', - frac18: '⅛', - frac23: '⅔', - frac25: '⅖', - frac34: '¾', - frac35: '⅗', - frac38: '⅜', - frac45: '⅘', - frac56: '⅚', - frac58: '⅝', - frac78: '⅞', - frasl: '⁄', - frown: '⌢', - fscr: '𝒻', - gE: '≧', - gEl: '⪌', - gacute: 'ǵ', - gamma: 'γ', - gammad: 'ϝ', - gap: '⪆', - gbreve: 'ğ', - gcirc: 'ĝ', - gcy: 'г', - gdot: 'ġ', - ge: '≥', - gel: '⋛', - geq: '≥', - geqq: '≧', - geqslant: '⩾', - ges: '⩾', - gescc: '⪩', - gesdot: '⪀', - gesdoto: '⪂', - gesdotol: '⪄', - gesl: '⋛︀', - gesles: '⪔', - gfr: '𝔤', - gg: '≫', - ggg: '⋙', - gimel: 'ℷ', - gjcy: 'ѓ', - gl: '≷', - glE: '⪒', - gla: '⪥', - glj: '⪤', - gnE: '≩', - gnap: '⪊', - gnapprox: '⪊', - gne: '⪈', - gneq: '⪈', - gneqq: '≩', - gnsim: '⋧', - gopf: '𝕘', - grave: '`', - gscr: 'ℊ', - gsim: '≳', - gsime: '⪎', - gsiml: '⪐', - gt: '>', - gtcc: '⪧', - gtcir: '⩺', - gtdot: '⋗', - gtlPar: '⦕', - gtquest: '⩼', - gtrapprox: '⪆', - gtrarr: '⥸', - gtrdot: '⋗', - gtreqless: '⋛', - gtreqqless: '⪌', - gtrless: '≷', - gtrsim: '≳', - gvertneqq: '≩︀', - gvnE: '≩︀', - hArr: '⇔', - hairsp: ' ', - half: '½', - hamilt: 'ℋ', - hardcy: 'ъ', - harr: '↔', - harrcir: '⥈', - harrw: '↭', - hbar: 'ℏ', - hcirc: 'ĥ', - hearts: '♥', - heartsuit: '♥', - hellip: '…', - hercon: '⊹', - hfr: '𝔥', - hksearow: '⤥', - hkswarow: '⤦', - hoarr: '⇿', - homtht: '∻', - hookleftarrow: '↩', - hookrightarrow: '↪', - hopf: '𝕙', - horbar: '―', - hscr: '𝒽', - hslash: 'ℏ', - hstrok: 'ħ', - hybull: '⁃', - hyphen: '‐', - iacute: 'í', - ic: '⁣', - icirc: 'î', - icy: 'и', - iecy: 'е', - iexcl: '¡', - iff: '⇔', - ifr: '𝔦', - igrave: 'ì', - ii: 'ⅈ', - iiiint: '⨌', - iiint: '∭', - iinfin: '⧜', - iiota: '℩', - ijlig: 'ij', - imacr: 'ī', - image: 'ℑ', - imagline: 'ℐ', - imagpart: 'ℑ', - imath: 'ı', - imof: '⊷', - imped: 'Ƶ', - in: '∈', - incare: '℅', - infin: '∞', - infintie: '⧝', - inodot: 'ı', - int: '∫', - intcal: '⊺', - integers: 'ℤ', - intercal: '⊺', - intlarhk: '⨗', - intprod: '⨼', - iocy: 'ё', - iogon: 'į', - iopf: '𝕚', - iota: 'ι', - iprod: '⨼', - iquest: '¿', - iscr: '𝒾', - isin: '∈', - isinE: '⋹', - isindot: '⋵', - isins: '⋴', - isinsv: '⋳', - isinv: '∈', - it: '⁢', - itilde: 'ĩ', - iukcy: 'і', - iuml: 'ï', - jcirc: 'ĵ', - jcy: 'й', - jfr: '𝔧', - jmath: 'ȷ', - jopf: '𝕛', - jscr: '𝒿', - jsercy: 'ј', - jukcy: 'є', - kappa: 'κ', - kappav: 'ϰ', - kcedil: 'ķ', - kcy: 'к', - kfr: '𝔨', - kgreen: 'ĸ', - khcy: 'х', - kjcy: 'ќ', - kopf: '𝕜', - kscr: '𝓀', - lAarr: '⇚', - lArr: '⇐', - lAtail: '⤛', - lBarr: '⤎', - lE: '≦', - lEg: '⪋', - lHar: '⥢', - lacute: 'ĺ', - laemptyv: '⦴', - lagran: 'ℒ', - lambda: 'λ', - lang: '⟨', - langd: '⦑', - langle: '⟨', - lap: '⪅', - laquo: '«', - larr: '←', - larrb: '⇤', - larrbfs: '⤟', - larrfs: '⤝', - larrhk: '↩', - larrlp: '↫', - larrpl: '⤹', - larrsim: '⥳', - larrtl: '↢', - lat: '⪫', - latail: '⤙', - late: '⪭', - lates: '⪭︀', - lbarr: '⤌', - lbbrk: '❲', - lbrace: '{', - lbrack: '[', - lbrke: '⦋', - lbrksld: '⦏', - lbrkslu: '⦍', - lcaron: 'ľ', - lcedil: 'ļ', - lceil: '⌈', - lcub: '{', - lcy: 'л', - ldca: '⤶', - ldquo: '“', - ldquor: '„', - ldrdhar: '⥧', - ldrushar: '⥋', - ldsh: '↲', - le: '≤', - leftarrow: '←', - leftarrowtail: '↢', - leftharpoondown: '↽', - leftharpoonup: '↼', - leftleftarrows: '⇇', - leftrightarrow: '↔', - leftrightarrows: '⇆', - leftrightharpoons: '⇋', - leftrightsquigarrow: '↭', - leftthreetimes: '⋋', - leg: '⋚', - leq: '≤', - leqq: '≦', - leqslant: '⩽', - les: '⩽', - lescc: '⪨', - lesdot: '⩿', - lesdoto: '⪁', - lesdotor: '⪃', - lesg: '⋚︀', - lesges: '⪓', - lessapprox: '⪅', - lessdot: '⋖', - lesseqgtr: '⋚', - lesseqqgtr: '⪋', - lessgtr: '≶', - lesssim: '≲', - lfisht: '⥼', - lfloor: '⌊', - lfr: '𝔩', - lg: '≶', - lgE: '⪑', - lhard: '↽', - lharu: '↼', - lharul: '⥪', - lhblk: '▄', - ljcy: 'љ', - ll: '≪', - llarr: '⇇', - llcorner: '⌞', - llhard: '⥫', - lltri: '◺', - lmidot: 'ŀ', - lmoust: '⎰', - lmoustache: '⎰', - lnE: '≨', - lnap: '⪉', - lnapprox: '⪉', - lne: '⪇', - lneq: '⪇', - lneqq: '≨', - lnsim: '⋦', - loang: '⟬', - loarr: '⇽', - lobrk: '⟦', - longleftarrow: '⟵', - longleftrightarrow: '⟷', - longmapsto: '⟼', - longrightarrow: '⟶', - looparrowleft: '↫', - looparrowright: '↬', - lopar: '⦅', - lopf: '𝕝', - loplus: '⨭', - lotimes: '⨴', - lowast: '∗', - lowbar: '_', - loz: '◊', - lozenge: '◊', - lozf: '⧫', - lpar: '(', - lparlt: '⦓', - lrarr: '⇆', - lrcorner: '⌟', - lrhar: '⇋', - lrhard: '⥭', - lrm: '‎', - lrtri: '⊿', - lsaquo: '‹', - lscr: '𝓁', - lsh: '↰', - lsim: '≲', - lsime: '⪍', - lsimg: '⪏', - lsqb: '[', - lsquo: '‘', - lsquor: '‚', - lstrok: 'ł', - lt: '<', - ltcc: '⪦', - ltcir: '⩹', - ltdot: '⋖', - lthree: '⋋', - ltimes: '⋉', - ltlarr: '⥶', - ltquest: '⩻', - ltrPar: '⦖', - ltri: '◃', - ltrie: '⊴', - ltrif: '◂', - lurdshar: '⥊', - luruhar: '⥦', - lvertneqq: '≨︀', - lvnE: '≨︀', - mDDot: '∺', - macr: '¯', - male: '♂', - malt: '✠', - maltese: '✠', - map: '↦', - mapsto: '↦', - mapstodown: '↧', - mapstoleft: '↤', - mapstoup: '↥', - marker: '▮', - mcomma: '⨩', - mcy: 'м', - mdash: '—', - measuredangle: '∡', - mfr: '𝔪', - mho: '℧', - micro: 'µ', - mid: '∣', - midast: '*', - midcir: '⫰', - middot: '·', - minus: '−', - minusb: '⊟', - minusd: '∸', - minusdu: '⨪', - mlcp: '⫛', - mldr: '…', - mnplus: '∓', - models: '⊧', - mopf: '𝕞', - mp: '∓', - mscr: '𝓂', - mstpos: '∾', - mu: 'μ', - multimap: '⊸', - mumap: '⊸', - nGg: '⋙̸', - nGt: '≫⃒', - nGtv: '≫̸', - nLeftarrow: '⇍', - nLeftrightarrow: '⇎', - nLl: '⋘̸', - nLt: '≪⃒', - nLtv: '≪̸', - nRightarrow: '⇏', - nVDash: '⊯', - nVdash: '⊮', - nabla: '∇', - nacute: 'ń', - nang: '∠⃒', - nap: '≉', - napE: '⩰̸', - napid: '≋̸', - napos: 'ʼn', - napprox: '≉', - natur: '♮', - natural: '♮', - naturals: 'ℕ', - nbsp: ' ', - nbump: '≎̸', - nbumpe: '≏̸', - ncap: '⩃', - ncaron: 'ň', - ncedil: 'ņ', - ncong: '≇', - ncongdot: '⩭̸', - ncup: '⩂', - ncy: 'н', - ndash: '–', - ne: '≠', - neArr: '⇗', - nearhk: '⤤', - nearr: '↗', - nearrow: '↗', - nedot: '≐̸', - nequiv: '≢', - nesear: '⤨', - nesim: '≂̸', - nexist: '∄', - nexists: '∄', - nfr: '𝔫', - ngE: '≧̸', - nge: '≱', - ngeq: '≱', - ngeqq: '≧̸', - ngeqslant: '⩾̸', - nges: '⩾̸', - ngsim: '≵', - ngt: '≯', - ngtr: '≯', - nhArr: '⇎', - nharr: '↮', - nhpar: '⫲', - ni: '∋', - nis: '⋼', - nisd: '⋺', - niv: '∋', - njcy: 'њ', - nlArr: '⇍', - nlE: '≦̸', - nlarr: '↚', - nldr: '‥', - nle: '≰', - nleftarrow: '↚', - nleftrightarrow: '↮', - nleq: '≰', - nleqq: '≦̸', - nleqslant: '⩽̸', - nles: '⩽̸', - nless: '≮', - nlsim: '≴', - nlt: '≮', - nltri: '⋪', - nltrie: '⋬', - nmid: '∤', - nopf: '𝕟', - not: '¬', - notin: '∉', - notinE: '⋹̸', - notindot: '⋵̸', - notinva: '∉', - notinvb: '⋷', - notinvc: '⋶', - notni: '∌', - notniva: '∌', - notnivb: '⋾', - notnivc: '⋽', - npar: '∦', - nparallel: '∦', - nparsl: '⫽⃥', - npart: '∂̸', - npolint: '⨔', - npr: '⊀', - nprcue: '⋠', - npre: '⪯̸', - nprec: '⊀', - npreceq: '⪯̸', - nrArr: '⇏', - nrarr: '↛', - nrarrc: '⤳̸', - nrarrw: '↝̸', - nrightarrow: '↛', - nrtri: '⋫', - nrtrie: '⋭', - nsc: '⊁', - nsccue: '⋡', - nsce: '⪰̸', - nscr: '𝓃', - nshortmid: '∤', - nshortparallel: '∦', - nsim: '≁', - nsime: '≄', - nsimeq: '≄', - nsmid: '∤', - nspar: '∦', - nsqsube: '⋢', - nsqsupe: '⋣', - nsub: '⊄', - nsubE: '⫅̸', - nsube: '⊈', - nsubset: '⊂⃒', - nsubseteq: '⊈', - nsubseteqq: '⫅̸', - nsucc: '⊁', - nsucceq: '⪰̸', - nsup: '⊅', - nsupE: '⫆̸', - nsupe: '⊉', - nsupset: '⊃⃒', - nsupseteq: '⊉', - nsupseteqq: '⫆̸', - ntgl: '≹', - ntilde: 'ñ', - ntlg: '≸', - ntriangleleft: '⋪', - ntrianglelefteq: '⋬', - ntriangleright: '⋫', - ntrianglerighteq: '⋭', - nu: 'ν', - num: '#', - numero: '№', - numsp: ' ', - nvDash: '⊭', - nvHarr: '⤄', - nvap: '≍⃒', - nvdash: '⊬', - nvge: '≥⃒', - nvgt: '>⃒', - nvinfin: '⧞', - nvlArr: '⤂', - nvle: '≤⃒', - nvlt: '<⃒', - nvltrie: '⊴⃒', - nvrArr: '⤃', - nvrtrie: '⊵⃒', - nvsim: '∼⃒', - nwArr: '⇖', - nwarhk: '⤣', - nwarr: '↖', - nwarrow: '↖', - nwnear: '⤧', - oS: 'Ⓢ', - oacute: 'ó', - oast: '⊛', - ocir: '⊚', - ocirc: 'ô', - ocy: 'о', - odash: '⊝', - odblac: 'ő', - odiv: '⨸', - odot: '⊙', - odsold: '⦼', - oelig: 'œ', - ofcir: '⦿', - ofr: '𝔬', - ogon: '˛', - ograve: 'ò', - ogt: '⧁', - ohbar: '⦵', - ohm: 'Ω', - oint: '∮', - olarr: '↺', - olcir: '⦾', - olcross: '⦻', - oline: '‾', - olt: '⧀', - omacr: 'ō', - omega: 'ω', - omicron: 'ο', - omid: '⦶', - ominus: '⊖', - oopf: '𝕠', - opar: '⦷', - operp: '⦹', - oplus: '⊕', - or: '∨', - orarr: '↻', - ord: '⩝', - order: 'ℴ', - orderof: 'ℴ', - ordf: 'ª', - ordm: 'º', - origof: '⊶', - oror: '⩖', - orslope: '⩗', - orv: '⩛', - oscr: 'ℴ', - oslash: 'ø', - osol: '⊘', - otilde: 'õ', - otimes: '⊗', - otimesas: '⨶', - ouml: 'ö', - ovbar: '⌽', - par: '∥', - para: '¶', - parallel: '∥', - parsim: '⫳', - parsl: '⫽', - part: '∂', - pcy: 'п', - percnt: '%', - period: '.', - permil: '‰', - perp: '⊥', - pertenk: '‱', - pfr: '𝔭', - phi: 'φ', - phiv: 'ϕ', - phmmat: 'ℳ', - phone: '☎', - pi: 'π', - pitchfork: '⋔', - piv: 'ϖ', - planck: 'ℏ', - planckh: 'ℎ', - plankv: 'ℏ', - plus: '+', - plusacir: '⨣', - plusb: '⊞', - pluscir: '⨢', - plusdo: '∔', - plusdu: '⨥', - pluse: '⩲', - plusmn: '±', - plussim: '⨦', - plustwo: '⨧', - pm: '±', - pointint: '⨕', - popf: '𝕡', - pound: '£', - pr: '≺', - prE: '⪳', - prap: '⪷', - prcue: '≼', - pre: '⪯', - prec: '≺', - precapprox: '⪷', - preccurlyeq: '≼', - preceq: '⪯', - precnapprox: '⪹', - precneqq: '⪵', - precnsim: '⋨', - precsim: '≾', - prime: '′', - primes: 'ℙ', - prnE: '⪵', - prnap: '⪹', - prnsim: '⋨', - prod: '∏', - profalar: '⌮', - profline: '⌒', - profsurf: '⌓', - prop: '∝', - propto: '∝', - prsim: '≾', - prurel: '⊰', - pscr: '𝓅', - psi: 'ψ', - puncsp: ' ', - qfr: '𝔮', - qint: '⨌', - qopf: '𝕢', - qprime: '⁗', - qscr: '𝓆', - quaternions: 'ℍ', - quatint: '⨖', - quest: '?', - questeq: '≟', - quot: '"', - rAarr: '⇛', - rArr: '⇒', - rAtail: '⤜', - rBarr: '⤏', - rHar: '⥤', - race: '∽̱', - racute: 'ŕ', - radic: '√', - raemptyv: '⦳', - rang: '⟩', - rangd: '⦒', - range: '⦥', - rangle: '⟩', - raquo: '»', - rarr: '→', - rarrap: '⥵', - rarrb: '⇥', - rarrbfs: '⤠', - rarrc: '⤳', - rarrfs: '⤞', - rarrhk: '↪', - rarrlp: '↬', - rarrpl: '⥅', - rarrsim: '⥴', - rarrtl: '↣', - rarrw: '↝', - ratail: '⤚', - ratio: '∶', - rationals: 'ℚ', - rbarr: '⤍', - rbbrk: '❳', - rbrace: '}', - rbrack: ']', - rbrke: '⦌', - rbrksld: '⦎', - rbrkslu: '⦐', - rcaron: 'ř', - rcedil: 'ŗ', - rceil: '⌉', - rcub: '}', - rcy: 'р', - rdca: '⤷', - rdldhar: '⥩', - rdquo: '”', - rdquor: '”', - rdsh: '↳', - real: 'ℜ', - realine: 'ℛ', - realpart: 'ℜ', - reals: 'ℝ', - rect: '▭', - reg: '®', - rfisht: '⥽', - rfloor: '⌋', - rfr: '𝔯', - rhard: '⇁', - rharu: '⇀', - rharul: '⥬', - rho: 'ρ', - rhov: 'ϱ', - rightarrow: '→', - rightarrowtail: '↣', - rightharpoondown: '⇁', - rightharpoonup: '⇀', - rightleftarrows: '⇄', - rightleftharpoons: '⇌', - rightrightarrows: '⇉', - rightsquigarrow: '↝', - rightthreetimes: '⋌', - ring: '˚', - risingdotseq: '≓', - rlarr: '⇄', - rlhar: '⇌', - rlm: '‏', - rmoust: '⎱', - rmoustache: '⎱', - rnmid: '⫮', - roang: '⟭', - roarr: '⇾', - robrk: '⟧', - ropar: '⦆', - ropf: '𝕣', - roplus: '⨮', - rotimes: '⨵', - rpar: ')', - rpargt: '⦔', - rppolint: '⨒', - rrarr: '⇉', - rsaquo: '›', - rscr: '𝓇', - rsh: '↱', - rsqb: ']', - rsquo: '’', - rsquor: '’', - rthree: '⋌', - rtimes: '⋊', - rtri: '▹', - rtrie: '⊵', - rtrif: '▸', - rtriltri: '⧎', - ruluhar: '⥨', - rx: '℞', - sacute: 'ś', - sbquo: '‚', - sc: '≻', - scE: '⪴', - scap: '⪸', - scaron: 'š', - sccue: '≽', - sce: '⪰', - scedil: 'ş', - scirc: 'ŝ', - scnE: '⪶', - scnap: '⪺', - scnsim: '⋩', - scpolint: '⨓', - scsim: '≿', - scy: 'с', - sdot: '⋅', - sdotb: '⊡', - sdote: '⩦', - seArr: '⇘', - searhk: '⤥', - searr: '↘', - searrow: '↘', - sect: '§', - semi: ';', - seswar: '⤩', - setminus: '∖', - setmn: '∖', - sext: '✶', - sfr: '𝔰', - sfrown: '⌢', - sharp: '♯', - shchcy: 'щ', - shcy: 'ш', - shortmid: '∣', - shortparallel: '∥', - shy: '­', - sigma: 'σ', - sigmaf: 'ς', - sigmav: 'ς', - sim: '∼', - simdot: '⩪', - sime: '≃', - simeq: '≃', - simg: '⪞', - simgE: '⪠', - siml: '⪝', - simlE: '⪟', - simne: '≆', - simplus: '⨤', - simrarr: '⥲', - slarr: '←', - smallsetminus: '∖', - smashp: '⨳', - smeparsl: '⧤', - smid: '∣', - smile: '⌣', - smt: '⪪', - smte: '⪬', - smtes: '⪬︀', - softcy: 'ь', - sol: '/', - solb: '⧄', - solbar: '⌿', - sopf: '𝕤', - spades: '♠', - spadesuit: '♠', - spar: '∥', - sqcap: '⊓', - sqcaps: '⊓︀', - sqcup: '⊔', - sqcups: '⊔︀', - sqsub: '⊏', - sqsube: '⊑', - sqsubset: '⊏', - sqsubseteq: '⊑', - sqsup: '⊐', - sqsupe: '⊒', - sqsupset: '⊐', - sqsupseteq: '⊒', - squ: '□', - square: '□', - squarf: '▪', - squf: '▪', - srarr: '→', - sscr: '𝓈', - ssetmn: '∖', - ssmile: '⌣', - sstarf: '⋆', - star: '☆', - starf: '★', - straightepsilon: 'ϵ', - straightphi: 'ϕ', - strns: '¯', - sub: '⊂', - subE: '⫅', - subdot: '⪽', - sube: '⊆', - subedot: '⫃', - submult: '⫁', - subnE: '⫋', - subne: '⊊', - subplus: '⪿', - subrarr: '⥹', - subset: '⊂', - subseteq: '⊆', - subseteqq: '⫅', - subsetneq: '⊊', - subsetneqq: '⫋', - subsim: '⫇', - subsub: '⫕', - subsup: '⫓', - succ: '≻', - succapprox: '⪸', - succcurlyeq: '≽', - succeq: '⪰', - succnapprox: '⪺', - succneqq: '⪶', - succnsim: '⋩', - succsim: '≿', - sum: '∑', - sung: '♪', - sup1: '¹', - sup2: '²', - sup3: '³', - sup: '⊃', - supE: '⫆', - supdot: '⪾', - supdsub: '⫘', - supe: '⊇', - supedot: '⫄', - suphsol: '⟉', - suphsub: '⫗', - suplarr: '⥻', - supmult: '⫂', - supnE: '⫌', - supne: '⊋', - supplus: '⫀', - supset: '⊃', - supseteq: '⊇', - supseteqq: '⫆', - supsetneq: '⊋', - supsetneqq: '⫌', - supsim: '⫈', - supsub: '⫔', - supsup: '⫖', - swArr: '⇙', - swarhk: '⤦', - swarr: '↙', - swarrow: '↙', - swnwar: '⤪', - szlig: 'ß', - target: '⌖', - tau: 'τ', - tbrk: '⎴', - tcaron: 'ť', - tcedil: 'ţ', - tcy: 'т', - tdot: '⃛', - telrec: '⌕', - tfr: '𝔱', - there4: '∴', - therefore: '∴', - theta: 'θ', - thetasym: 'ϑ', - thetav: 'ϑ', - thickapprox: '≈', - thicksim: '∼', - thinsp: ' ', - thkap: '≈', - thksim: '∼', - thorn: 'þ', - tilde: '˜', - times: '×', - timesb: '⊠', - timesbar: '⨱', - timesd: '⨰', - tint: '∭', - toea: '⤨', - top: '⊤', - topbot: '⌶', - topcir: '⫱', - topf: '𝕥', - topfork: '⫚', - tosa: '⤩', - tprime: '‴', - trade: '™', - triangle: '▵', - triangledown: '▿', - triangleleft: '◃', - trianglelefteq: '⊴', - triangleq: '≜', - triangleright: '▹', - trianglerighteq: '⊵', - tridot: '◬', - trie: '≜', - triminus: '⨺', - triplus: '⨹', - trisb: '⧍', - tritime: '⨻', - trpezium: '⏢', - tscr: '𝓉', - tscy: 'ц', - tshcy: 'ћ', - tstrok: 'ŧ', - twixt: '≬', - twoheadleftarrow: '↞', - twoheadrightarrow: '↠', - uArr: '⇑', - uHar: '⥣', - uacute: 'ú', - uarr: '↑', - ubrcy: 'ў', - ubreve: 'ŭ', - ucirc: 'û', - ucy: 'у', - udarr: '⇅', - udblac: 'ű', - udhar: '⥮', - ufisht: '⥾', - ufr: '𝔲', - ugrave: 'ù', - uharl: '↿', - uharr: '↾', - uhblk: '▀', - ulcorn: '⌜', - ulcorner: '⌜', - ulcrop: '⌏', - ultri: '◸', - umacr: 'ū', - uml: '¨', - uogon: 'ų', - uopf: '𝕦', - uparrow: '↑', - updownarrow: '↕', - upharpoonleft: '↿', - upharpoonright: '↾', - uplus: '⊎', - upsi: 'υ', - upsih: 'ϒ', - upsilon: 'υ', - upuparrows: '⇈', - urcorn: '⌝', - urcorner: '⌝', - urcrop: '⌎', - uring: 'ů', - urtri: '◹', - uscr: '𝓊', - utdot: '⋰', - utilde: 'ũ', - utri: '▵', - utrif: '▴', - uuarr: '⇈', - uuml: 'ü', - uwangle: '⦧', - vArr: '⇕', - vBar: '⫨', - vBarv: '⫩', - vDash: '⊨', - vangrt: '⦜', - varepsilon: 'ϵ', - varkappa: 'ϰ', - varnothing: '∅', - varphi: 'ϕ', - varpi: 'ϖ', - varpropto: '∝', - varr: '↕', - varrho: 'ϱ', - varsigma: 'ς', - varsubsetneq: '⊊︀', - varsubsetneqq: '⫋︀', - varsupsetneq: '⊋︀', - varsupsetneqq: '⫌︀', - vartheta: 'ϑ', - vartriangleleft: '⊲', - vartriangleright: '⊳', - vcy: 'в', - vdash: '⊢', - vee: '∨', - veebar: '⊻', - veeeq: '≚', - vellip: '⋮', - verbar: '|', - vert: '|', - vfr: '𝔳', - vltri: '⊲', - vnsub: '⊂⃒', - vnsup: '⊃⃒', - vopf: '𝕧', - vprop: '∝', - vrtri: '⊳', - vscr: '𝓋', - vsubnE: '⫋︀', - vsubne: '⊊︀', - vsupnE: '⫌︀', - vsupne: '⊋︀', - vzigzag: '⦚', - wcirc: 'ŵ', - wedbar: '⩟', - wedge: '∧', - wedgeq: '≙', - weierp: '℘', - wfr: '𝔴', - wopf: '𝕨', - wp: '℘', - wr: '≀', - wreath: '≀', - wscr: '𝓌', - xcap: '⋂', - xcirc: '◯', - xcup: '⋃', - xdtri: '▽', - xfr: '𝔵', - xhArr: '⟺', - xharr: '⟷', - xi: 'ξ', - xlArr: '⟸', - xlarr: '⟵', - xmap: '⟼', - xnis: '⋻', - xodot: '⨀', - xopf: '𝕩', - xoplus: '⨁', - xotime: '⨂', - xrArr: '⟹', - xrarr: '⟶', - xscr: '𝓍', - xsqcup: '⨆', - xuplus: '⨄', - xutri: '△', - xvee: '⋁', - xwedge: '⋀', - yacute: 'ý', - yacy: 'я', - ycirc: 'ŷ', - ycy: 'ы', - yen: '¥', - yfr: '𝔶', - yicy: 'ї', - yopf: '𝕪', - yscr: '𝓎', - yucy: 'ю', - yuml: 'ÿ', - zacute: 'ź', - zcaron: 'ž', - zcy: 'з', - zdot: 'ż', - zeetrf: 'ℨ', - zeta: 'ζ', - zfr: '𝔷', - zhcy: 'ж', - zigrarr: '⇝', - zopf: '𝕫', - zscr: '𝓏', - zwj: '‍', - zwnj: '‌' -} - -;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js - - -const own = {}.hasOwnProperty - -/** - * Decode a single character reference (without the `&` or `;`). - * You probably only need this when you’re building parsers yourself that follow - * different rules compared to HTML. - * This is optimized to be tiny in browsers. - * - * @param {string} value - * `notin` (named), `#123` (deci), `#x123` (hexa). - * @returns {string|false} - * Decoded reference. - */ -function decodeNamedCharacterReference(value) { - return own.call(characterEntities, value) ? characterEntities[value] : false -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const characterReference = { - name: 'characterReference', - tokenize: tokenizeCharacterReference -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterReference(effects, ok, nok) { - const self = this - let size = 0 - /** @type {number} */ - let max - /** @type {(code: Code) => boolean} */ - let test - return start - - /** - * Start of character reference. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterReference') - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - return open - } - - /** - * After `&`, at `#` for numeric references or alphanumeric for named - * references. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 35) { - effects.enter('characterReferenceMarkerNumeric') - effects.consume(code) - effects.exit('characterReferenceMarkerNumeric') - return numeric - } - effects.enter('characterReferenceValue') - max = 31 - test = asciiAlphanumeric - return value(code) - } - - /** - * After `#`, at `x` for hexadecimals or digit for decimals. - * - * ```markdown - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function numeric(code) { - if (code === 88 || code === 120) { - effects.enter('characterReferenceMarkerHexadecimal') - effects.consume(code) - effects.exit('characterReferenceMarkerHexadecimal') - effects.enter('characterReferenceValue') - max = 6 - test = asciiHexDigit - return value - } - effects.enter('characterReferenceValue') - max = 7 - test = asciiDigit - return value(code) - } - - /** - * After markers (`&#x`, `&#`, or `&`), in value, before `;`. - * - * The character reference kind defines what and how many characters are - * allowed. - * - * ```markdown - * > | a&b - * ^^^ - * > | a{b - * ^^^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function value(code) { - if (code === 59 && size) { - const token = effects.exit('characterReferenceValue') - if ( - test === asciiAlphanumeric && - !decodeNamedCharacterReference(self.sliceSerialize(token)) - ) { - return nok(code) - } - - // To do: `markdown-rs` uses a different name: - // `CharacterReferenceMarkerSemi`. - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - effects.exit('characterReference') - return ok - } - if (test(code) && size++ < max) { - effects.consume(code) - return value - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const characterEscape = { - name: 'characterEscape', - tokenize: tokenizeCharacterEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterEscape(effects, ok, nok) { - return start - - /** - * Start of character escape. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterEscape') - effects.enter('escapeMarker') - effects.consume(code) - effects.exit('escapeMarker') - return inside - } - - /** - * After `\`, at punctuation. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - // ASCII punctuation. - if (asciiPunctuation(code)) { - effects.enter('characterEscapeValue') - effects.consume(code) - effects.exit('characterEscapeValue') - effects.exit('characterEscape') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const lineEnding = { - name: 'lineEnding', - tokenize: tokenizeLineEnding -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLineEnding(effects, ok) { - return start - - /** @type {State} */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, ok, 'linePrefix') - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - - -/** @type {Construct} */ -const labelEnd = { - name: 'labelEnd', - tokenize: tokenizeLabelEnd, - resolveTo: resolveToLabelEnd, - resolveAll: resolveAllLabelEnd -} - -/** @type {Construct} */ -const resourceConstruct = { - tokenize: tokenizeResource -} -/** @type {Construct} */ -const referenceFullConstruct = { - tokenize: tokenizeReferenceFull -} -/** @type {Construct} */ -const referenceCollapsedConstruct = { - tokenize: tokenizeReferenceCollapsed -} - -/** @type {Resolver} */ -function resolveAllLabelEnd(events) { - let index = -1 - while (++index < events.length) { - const token = events[index][1] - if ( - token.type === 'labelImage' || - token.type === 'labelLink' || - token.type === 'labelEnd' - ) { - // Remove the marker. - events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) - token.type = 'data' - index++ - } - } - return events -} - -/** @type {Resolver} */ -function resolveToLabelEnd(events, context) { - let index = events.length - let offset = 0 - /** @type {Token} */ - let token - /** @type {number | undefined} */ - let open - /** @type {number | undefined} */ - let close - /** @type {Array<Event>} */ - let media - - // Find an opening. - while (index--) { - token = events[index][1] - if (open) { - // If we see another link, or inactive link label, we’ve been here before. - if ( - token.type === 'link' || - (token.type === 'labelLink' && token._inactive) - ) { - break - } - - // Mark other link openings as inactive, as we can’t have links in - // links. - if (events[index][0] === 'enter' && token.type === 'labelLink') { - token._inactive = true - } - } else if (close) { - if ( - events[index][0] === 'enter' && - (token.type === 'labelImage' || token.type === 'labelLink') && - !token._balanced - ) { - open = index - if (token.type !== 'labelLink') { - offset = 2 - break - } - } - } else if (token.type === 'labelEnd') { - close = index - } - } - const group = { - type: events[open][1].type === 'labelLink' ? 'link' : 'image', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - const label = { - type: 'label', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[close][1].end) - } - const text = { - type: 'labelText', - start: Object.assign({}, events[open + offset + 2][1].end), - end: Object.assign({}, events[close - 2][1].start) - } - media = [ - ['enter', group, context], - ['enter', label, context] - ] - - // Opening marker. - media = push(media, events.slice(open + 1, open + offset + 3)) - - // Text open. - media = push(media, [['enter', text, context]]) - - // Always populated by defaults. - - // Between. - media = push( - media, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + offset + 4, close - 3), - context - ) - ) - - // Text close, marker close, label close. - media = push(media, [ - ['exit', text, context], - events[close - 2], - events[close - 1], - ['exit', label, context] - ]) - - // Reference, resource, or so. - media = push(media, events.slice(close + 1)) - - // Media close. - media = push(media, [['exit', group, context]]) - splice(events, open, events.length, media) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelEnd(effects, ok, nok) { - const self = this - let index = self.events.length - /** @type {Token} */ - let labelStart - /** @type {boolean} */ - let defined - - // Find an opening. - while (index--) { - if ( - (self.events[index][1].type === 'labelImage' || - self.events[index][1].type === 'labelLink') && - !self.events[index][1]._balanced - ) { - labelStart = self.events[index][1] - break - } - } - return start - - /** - * Start of label end. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ``` - * - * @type {State} - */ - function start(code) { - // If there is not an okay opening. - if (!labelStart) { - return nok(code) - } - - // If the corresponding label (link) start is marked as inactive, - // it means we’d be wrapping a link, like this: - // - // ```markdown - // > | a [b [c](d) e](f) g. - // ^ - // ``` - // - // We can’t have that, so it’s just balanced brackets. - if (labelStart._inactive) { - return labelEndNok(code) - } - defined = self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize({ - start: labelStart.end, - end: self.now() - }) - ) - ) - effects.enter('labelEnd') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelEnd') - return after - } - - /** - * After `]`. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - // Note: `markdown-rs` also parses GFM footnotes here, which for us is in - // an extension. - - // Resource (`[asd](fgh)`)? - if (code === 40) { - return effects.attempt( - resourceConstruct, - labelEndOk, - defined ? labelEndOk : labelEndNok - )(code) - } - - // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? - if (code === 91) { - return effects.attempt( - referenceFullConstruct, - labelEndOk, - defined ? referenceNotFull : labelEndNok - )(code) - } - - // Shortcut (`[asd]`) reference? - return defined ? labelEndOk(code) : labelEndNok(code) - } - - /** - * After `]`, at `[`, but not at a full reference. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function referenceNotFull(code) { - return effects.attempt( - referenceCollapsedConstruct, - labelEndOk, - labelEndNok - )(code) - } - - /** - * Done, we found something. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndOk(code) { - // Note: `markdown-rs` does a bunch of stuff here. - return ok(code) - } - - /** - * Done, it’s nothing. - * - * There was an okay opening, but we didn’t match anything. - * - * ```markdown - * > | [a](b c - * ^ - * > | [a][b c - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndNok(code) { - labelStart._balanced = true - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeResource(effects, ok, nok) { - return resourceStart - - /** - * At a resource. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceStart(code) { - effects.enter('resource') - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - return resourceBefore - } - - /** - * In resource, after `(`, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceOpen)(code) - : resourceOpen(code) - } - - /** - * In resource, after optional whitespace, at `)` or a destination. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceOpen(code) { - if (code === 41) { - return resourceEnd(code) - } - return factoryDestination( - effects, - resourceDestinationAfter, - resourceDestinationMissing, - 'resourceDestination', - 'resourceDestinationLiteral', - 'resourceDestinationLiteralMarker', - 'resourceDestinationRaw', - 'resourceDestinationString', - 32 - )(code) - } - - /** - * In resource, after destination, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceBetween)(code) - : resourceEnd(code) - } - - /** - * At invalid destination. - * - * ```markdown - * > | [a](<<) b - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationMissing(code) { - return nok(code) - } - - /** - * In resource, after destination and whitespace, at `(` or title. - * - * ```markdown - * > | [a](b ) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBetween(code) { - if (code === 34 || code === 39 || code === 40) { - return factoryTitle( - effects, - resourceTitleAfter, - nok, - 'resourceTitle', - 'resourceTitleMarker', - 'resourceTitleString' - )(code) - } - return resourceEnd(code) - } - - /** - * In resource, after title, at optional whitespace. - * - * ```markdown - * > | [a](b "c") d - * ^ - * ``` - * - * @type {State} - */ - function resourceTitleAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceEnd)(code) - : resourceEnd(code) - } - - /** - * In resource, at `)`. - * - * ```markdown - * > | [a](b) d - * ^ - * ``` - * - * @type {State} - */ - function resourceEnd(code) { - if (code === 41) { - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - effects.exit('resource') - return ok - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceFull(effects, ok, nok) { - const self = this - return referenceFull - - /** - * In a reference (full), at the `[`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFull(code) { - return factoryLabel.call( - self, - effects, - referenceFullAfter, - referenceFullMissing, - 'reference', - 'referenceMarker', - 'referenceString' - )(code) - } - - /** - * In a reference (full), after `]`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullAfter(code) { - return self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - ) - ? ok(code) - : nok(code) - } - - /** - * In reference (full) that was missing. - * - * ```markdown - * > | [a][b d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullMissing(code) { - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceCollapsed(effects, ok, nok) { - return referenceCollapsedStart - - /** - * In reference (collapsed), at `[`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedStart(code) { - // We only attempt a collapsed label if there’s a `[`. - - effects.enter('reference') - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - return referenceCollapsedOpen - } - - /** - * In reference (collapsed), at `]`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedOpen(code) { - if (code === 93) { - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - effects.exit('reference') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartImage = { - name: 'labelStartImage', - tokenize: tokenizeLabelStartImage, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartImage(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (image) start. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelImage') - effects.enter('labelImageMarker') - effects.consume(code) - effects.exit('labelImageMarker') - return open - } - - /** - * After `!`, at `[`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 91) { - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelImage') - return after - } - return nok(code) - } - - /** - * After `![`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * This is needed in because, when GFM footnotes are enabled, images never - * form when started with a `^`. - * Instead, links form: - * - * ```markdown - * ![^a](b) - * - * ![^a][b] - * - * [b]: c - * ``` - * - * ```html - * <p>!<a href=\"b\">^a</a></p> - * <p>!<a href=\"c\">^a</a></p> - * ``` - * - * @type {State} - */ - function after(code) { - // To do: use a new field to do this, this is still needed for - // `micromark-extension-gfm-footnote`, but the `label-start-link` - // behavior isn’t. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -function classifyCharacter(code) { - if ( - code === null || - markdownLineEndingOrSpace(code) || - unicodeWhitespace(code) - ) { - return 1 - } - if (unicodePunctuation(code)) { - return 2 - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const attention = { - name: 'attention', - tokenize: tokenizeAttention, - resolveAll: resolveAllAttention -} - -/** - * Take all events and resolve attention to emphasis or strong. - * - * @type {Resolver} - */ -function resolveAllAttention(events, context) { - let index = -1 - /** @type {number} */ - let open - /** @type {Token} */ - let group - /** @type {Token} */ - let text - /** @type {Token} */ - let openingSequence - /** @type {Token} */ - let closingSequence - /** @type {number} */ - let use - /** @type {Array<Event>} */ - let nextEvents - /** @type {number} */ - let offset - - // Walk through all events. - // - // Note: performance of this is fine on an mb of normal markdown, but it’s - // a bottleneck for malicious stuff. - while (++index < events.length) { - // Find a token that can close. - if ( - events[index][0] === 'enter' && - events[index][1].type === 'attentionSequence' && - events[index][1]._close - ) { - open = index - - // Now walk back to find an opener. - while (open--) { - // Find a token that can open the closer. - if ( - events[open][0] === 'exit' && - events[open][1].type === 'attentionSequence' && - events[open][1]._open && - // If the markers are the same: - context.sliceSerialize(events[open][1]).charCodeAt(0) === - context.sliceSerialize(events[index][1]).charCodeAt(0) - ) { - // If the opening can close or the closing can open, - // and the close size *is not* a multiple of three, - // but the sum of the opening and closing size *is* multiple of three, - // then don’t match. - if ( - (events[open][1]._close || events[index][1]._open) && - (events[index][1].end.offset - events[index][1].start.offset) % 3 && - !( - (events[open][1].end.offset - - events[open][1].start.offset + - events[index][1].end.offset - - events[index][1].start.offset) % - 3 - ) - ) { - continue - } - - // Number of markers to use from the sequence. - use = - events[open][1].end.offset - events[open][1].start.offset > 1 && - events[index][1].end.offset - events[index][1].start.offset > 1 - ? 2 - : 1 - const start = Object.assign({}, events[open][1].end) - const end = Object.assign({}, events[index][1].start) - movePoint(start, -use) - movePoint(end, use) - openingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start, - end: Object.assign({}, events[open][1].end) - } - closingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start: Object.assign({}, events[index][1].start), - end - } - text = { - type: use > 1 ? 'strongText' : 'emphasisText', - start: Object.assign({}, events[open][1].end), - end: Object.assign({}, events[index][1].start) - } - group = { - type: use > 1 ? 'strong' : 'emphasis', - start: Object.assign({}, openingSequence.start), - end: Object.assign({}, closingSequence.end) - } - events[open][1].end = Object.assign({}, openingSequence.start) - events[index][1].start = Object.assign({}, closingSequence.end) - nextEvents = [] - - // If there are more markers in the opening, add them before. - if (events[open][1].end.offset - events[open][1].start.offset) { - nextEvents = push(nextEvents, [ - ['enter', events[open][1], context], - ['exit', events[open][1], context] - ]) - } - - // Opening. - nextEvents = push(nextEvents, [ - ['enter', group, context], - ['enter', openingSequence, context], - ['exit', openingSequence, context], - ['enter', text, context] - ]) - - // Always populated by defaults. - - // Between. - nextEvents = push( - nextEvents, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + 1, index), - context - ) - ) - - // Closing. - nextEvents = push(nextEvents, [ - ['exit', text, context], - ['enter', closingSequence, context], - ['exit', closingSequence, context], - ['exit', group, context] - ]) - - // If there are more markers in the closing, add them after. - if (events[index][1].end.offset - events[index][1].start.offset) { - offset = 2 - nextEvents = push(nextEvents, [ - ['enter', events[index][1], context], - ['exit', events[index][1], context] - ]) - } else { - offset = 0 - } - splice(events, open - 1, index - open + 3, nextEvents) - index = open + nextEvents.length - offset - 2 - break - } - } - } - } - - // Remove remaining sequences. - index = -1 - while (++index < events.length) { - if (events[index][1].type === 'attentionSequence') { - events[index][1].type = 'data' - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAttention(effects, ok) { - const attentionMarkers = this.parser.constructs.attentionMarkers.null - const previous = this.previous - const before = classifyCharacter(previous) - - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Before a sequence. - * - * ```markdown - * > | ** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - marker = code - effects.enter('attentionSequence') - return inside(code) - } - - /** - * In a sequence. - * - * ```markdown - * > | ** - * ^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - const token = effects.exit('attentionSequence') - - // To do: next major: move this to resolver, just like `markdown-rs`. - const after = classifyCharacter(code) - - // Always populated by defaults. - - const open = - !after || (after === 2 && before) || attentionMarkers.includes(code) - const close = - !before || (before === 2 && after) || attentionMarkers.includes(previous) - token._open = Boolean(marker === 42 ? open : open && (before || !close)) - token._close = Boolean(marker === 42 ? close : close && (after || !open)) - return ok(code) - } -} - -/** - * Move a point a bit. - * - * Note: `move` only works inside lines! It’s not possible to move past other - * chunks (replacement characters, tabs, or line endings). - * - * @param {Point} point - * @param {number} offset - * @returns {void} - */ -function movePoint(point, offset) { - point.column += offset - point.offset += offset - point._bufferIndex += offset -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const autolink = { - name: 'autolink', - tokenize: tokenizeAutolink -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAutolink(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of an autolink. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('autolink') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.enter('autolinkProtocol') - return open - } - - /** - * After `<`, at protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (asciiAlpha(code)) { - effects.consume(code) - return schemeOrEmailAtext - } - return emailAtext(code) - } - - /** - * At second byte of protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function schemeOrEmailAtext(code) { - // ASCII alphanumeric and `+`, `-`, and `.`. - if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { - // Count the previous alphabetical from `open` too. - size = 1 - return schemeInsideOrEmailAtext(code) - } - return emailAtext(code) - } - - /** - * In ambiguous protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function schemeInsideOrEmailAtext(code) { - if (code === 58) { - effects.consume(code) - size = 0 - return urlInside - } - - // ASCII alphanumeric and `+`, `-`, and `.`. - if ( - (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && - size++ < 32 - ) { - effects.consume(code) - return schemeInsideOrEmailAtext - } - size = 0 - return emailAtext(code) - } - - /** - * After protocol, in URL. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * ``` - * - * @type {State} - */ - function urlInside(code) { - if (code === 62) { - effects.exit('autolinkProtocol') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - - // ASCII control, space, or `<`. - if (code === null || code === 32 || code === 60 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return urlInside - } - - /** - * In email atext. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailAtext(code) { - if (code === 64) { - effects.consume(code) - return emailAtSignOrDot - } - if (asciiAtext(code)) { - effects.consume(code) - return emailAtext - } - return nok(code) - } - - /** - * In label, after at-sign or dot. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ ^ - * ``` - * - * @type {State} - */ - function emailAtSignOrDot(code) { - return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) - } - - /** - * In label, where `.` and `>` are allowed. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailLabel(code) { - if (code === 46) { - effects.consume(code) - size = 0 - return emailAtSignOrDot - } - if (code === 62) { - // Exit, then change the token type. - effects.exit('autolinkProtocol').type = 'autolinkEmail' - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - return emailValue(code) - } - - /** - * In label, where `.` and `>` are *not* allowed. - * - * Though, this is also used in `emailLabel` to parse other values. - * - * ```markdown - * > | a<user.name@ex-ample.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailValue(code) { - // ASCII alphanumeric or `-`. - if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { - const next = code === 45 ? emailValue : emailLabel - effects.consume(code) - return next - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const htmlText = { - name: 'htmlText', - tokenize: tokenizeHtmlText -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlText(effects, ok, nok) { - const self = this - /** @type {NonNullable<Code> | undefined} */ - let marker - /** @type {number} */ - let index - /** @type {State} */ - let returnState - return start - - /** - * Start of HTML (text). - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('htmlText') - effects.enter('htmlTextData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | a <b> c - * ^ - * > | a <!doctype> c - * ^ - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - return instruction - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagOpen - } - return nok(code) - } - - /** - * After `<!`, at declaration, comment, or CDATA. - * - * ```markdown - * > | a <!doctype> c - * ^ - * > | a <!--b--> c - * ^ - * > | a <![CDATA[>&<]]> c - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - index = 0 - return cdataOpenInside - } - if (asciiAlpha(code)) { - effects.consume(code) - return declaration - } - return nok(code) - } - - /** - * In a comment, after `<!-`, at another `-`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return nok(code) - } - - /** - * In comment. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function comment(code) { - if (code === null) { - return nok(code) - } - if (code === 45) { - effects.consume(code) - return commentClose - } - if (markdownLineEnding(code)) { - returnState = comment - return lineEndingBefore(code) - } - effects.consume(code) - return comment - } - - /** - * In comment, after `-`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentClose(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return comment(code) - } - - /** - * In comment, after `--`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentEnd(code) { - return code === 62 - ? end(code) - : code === 45 - ? commentClose(code) - : comment(code) - } - - /** - * After `<![`, in CDATA, expecting `CDATA[`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - return index === value.length ? cdata : cdataOpenInside - } - return nok(code) - } - - /** - * In CDATA. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^^^ - * ``` - * - * @type {State} - */ - function cdata(code) { - if (code === null) { - return nok(code) - } - if (code === 93) { - effects.consume(code) - return cdataClose - } - if (markdownLineEnding(code)) { - returnState = cdata - return lineEndingBefore(code) - } - effects.consume(code) - return cdata - } - - /** - * In CDATA, after `]`, at another `]`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataClose(code) { - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In CDATA, after `]]`, at `>`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataEnd(code) { - if (code === 62) { - return end(code) - } - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In declaration. - * - * ```markdown - * > | a <!b> c - * ^ - * ``` - * - * @type {State} - */ - function declaration(code) { - if (code === null || code === 62) { - return end(code) - } - if (markdownLineEnding(code)) { - returnState = declaration - return lineEndingBefore(code) - } - effects.consume(code) - return declaration - } - - /** - * In instruction. - * - * ```markdown - * > | a <?b?> c - * ^ - * ``` - * - * @type {State} - */ - function instruction(code) { - if (code === null) { - return nok(code) - } - if (code === 63) { - effects.consume(code) - return instructionClose - } - if (markdownLineEnding(code)) { - returnState = instruction - return lineEndingBefore(code) - } - effects.consume(code) - return instruction - } - - /** - * In instruction, after `?`, at `>`. - * - * ```markdown - * > | a <?b?> c - * ^ - * ``` - * - * @type {State} - */ - function instructionClose(code) { - return code === 62 ? end(code) : instruction(code) - } - - /** - * After `</`, in closing tag, at tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagClose - } - return nok(code) - } - - /** - * After `</x`, in a tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagClose(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagClose - } - return tagCloseBetween(code) - } - - /** - * In closing tag, after tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseBetween(code) { - if (markdownLineEnding(code)) { - returnState = tagCloseBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagCloseBetween - } - return end(code) - } - - /** - * After `<x`, in opening tag name. - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function tagOpen(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagOpen - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In opening tag, after tag name. - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function tagOpenBetween(code) { - if (code === 47) { - effects.consume(code) - return end - } - - // ASCII alphabetical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return tagOpenAttributeName - } - if (markdownLineEnding(code)) { - returnState = tagOpenBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenBetween - } - return end(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | a <b c> d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeName(code) { - // ASCII alphabetical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return tagOpenAttributeName - } - return tagOpenAttributeNameAfter(code) - } - - /** - * After attribute name, before initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | a <b c> d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeNameAfter - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeNameAfter - } - return tagOpenBetween(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | a <b c=d> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - marker = code - return tagOpenAttributeValueQuoted - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueBefore - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuoted(code) { - if (code === marker) { - effects.consume(code) - marker = undefined - return tagOpenAttributeValueQuotedAfter - } - if (code === null) { - return nok(code) - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueQuoted - return lineEndingBefore(code) - } - effects.consume(code) - return tagOpenAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | a <b c=d> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 60 || - code === 61 || - code === 96 - ) { - return nok(code) - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the end - * of the tag. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In certain circumstances of a tag where only an `>` is allowed. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function end(code) { - if (code === 62) { - effects.consume(code) - effects.exit('htmlTextData') - effects.exit('htmlText') - return ok - } - return nok(code) - } - - /** - * At eol. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * > | a <!--a - * ^ - * | b--> - * ``` - * - * @type {State} - */ - function lineEndingBefore(code) { - effects.exit('htmlTextData') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineEndingAfter - } - - /** - * After eol, at optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a <!--a - * > | b--> - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfter(code) { - // Always populated by defaults. - - return markdownSpace(code) - ? factorySpace( - effects, - lineEndingAfterPrefix, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : lineEndingAfterPrefix(code) - } - - /** - * After eol, after optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a <!--a - * > | b--> - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfterPrefix(code) { - effects.enter('htmlTextData') - return returnState(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartLink = { - name: 'labelStartLink', - tokenize: tokenizeLabelStartLink, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartLink(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (link) start. - * - * ```markdown - * > | a [b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelLink') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelLink') - return after - } - - /** @type {State} */ - function after(code) { - // To do: this isn’t needed in `micromark-extension-gfm-footnote`, - // remove. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const hardBreakEscape = { - name: 'hardBreakEscape', - tokenize: tokenizeHardBreakEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHardBreakEscape(effects, ok, nok) { - return start - - /** - * Start of a hard break (escape). - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('hardBreakEscape') - effects.consume(code) - return after - } - - /** - * After `\`, at eol. - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownLineEnding(code)) { - effects.exit('hardBreakEscape') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Previous} Previous - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const codeText = { - name: 'codeText', - tokenize: tokenizeCodeText, - resolve: resolveCodeText, - previous -} - -// To do: next major: don’t resolve, like `markdown-rs`. -/** @type {Resolver} */ -function resolveCodeText(events) { - let tailExitIndex = events.length - 4 - let headEnterIndex = 3 - /** @type {number} */ - let index - /** @type {number | undefined} */ - let enter - - // If we start and end with an EOL or a space. - if ( - (events[headEnterIndex][1].type === 'lineEnding' || - events[headEnterIndex][1].type === 'space') && - (events[tailExitIndex][1].type === 'lineEnding' || - events[tailExitIndex][1].type === 'space') - ) { - index = headEnterIndex - - // And we have data. - while (++index < tailExitIndex) { - if (events[index][1].type === 'codeTextData') { - // Then we have padding. - events[headEnterIndex][1].type = 'codeTextPadding' - events[tailExitIndex][1].type = 'codeTextPadding' - headEnterIndex += 2 - tailExitIndex -= 2 - break - } - } - } - - // Merge adjacent spaces and data. - index = headEnterIndex - 1 - tailExitIndex++ - while (++index <= tailExitIndex) { - if (enter === undefined) { - if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { - enter = index - } - } else if ( - index === tailExitIndex || - events[index][1].type === 'lineEnding' - ) { - events[enter][1].type = 'codeTextData' - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - tailExitIndex -= index - enter - 2 - index = enter + 2 - } - enter = undefined - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Previous} - */ -function previous(code) { - // If there is a previous code, there will always be a tail. - return ( - code !== 96 || - this.events[this.events.length - 1][1].type === 'characterEscape' - ) -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeText(effects, ok, nok) { - const self = this - let sizeOpen = 0 - /** @type {number} */ - let size - /** @type {Token} */ - let token - return start - - /** - * Start of code (text). - * - * ```markdown - * > | `a` - * ^ - * > | \`a` - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('codeText') - effects.enter('codeTextSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 96) { - effects.consume(code) - sizeOpen++ - return sequenceOpen - } - effects.exit('codeTextSequence') - return between(code) - } - - /** - * Between something and something else. - * - * ```markdown - * > | `a` - * ^^ - * ``` - * - * @type {State} - */ - function between(code) { - // EOF. - if (code === null) { - return nok(code) - } - - // To do: next major: don’t do spaces in resolve, but when compiling, - // like `markdown-rs`. - // Tabs don’t work, and virtual spaces don’t make sense. - if (code === 32) { - effects.enter('space') - effects.consume(code) - effects.exit('space') - return between - } - - // Closing fence? Could also be data. - if (code === 96) { - token = effects.enter('codeTextSequence') - size = 0 - return sequenceClose(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return between - } - - // Data. - effects.enter('codeTextData') - return data(code) - } - - /** - * In data. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if ( - code === null || - code === 32 || - code === 96 || - markdownLineEnding(code) - ) { - effects.exit('codeTextData') - return between(code) - } - effects.consume(code) - return data - } - - /** - * In closing sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - // More. - if (code === 96) { - effects.consume(code) - size++ - return sequenceClose - } - - // Done! - if (size === sizeOpen) { - effects.exit('codeTextSequence') - effects.exit('codeText') - return ok(code) - } - - // More or less accents: mark as data. - token.type = 'codeTextData' - return data(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - */ - - - - -/** @satisfies {Extension['document']} */ -const constructs_document = { - [42]: list, - [43]: list, - [45]: list, - [48]: list, - [49]: list, - [50]: list, - [51]: list, - [52]: list, - [53]: list, - [54]: list, - [55]: list, - [56]: list, - [57]: list, - [62]: blockQuote -} - -/** @satisfies {Extension['contentInitial']} */ -const contentInitial = { - [91]: definition -} - -/** @satisfies {Extension['flowInitial']} */ -const flowInitial = { - [-2]: codeIndented, - [-1]: codeIndented, - [32]: codeIndented -} - -/** @satisfies {Extension['flow']} */ -const constructs_flow = { - [35]: headingAtx, - [42]: thematicBreak, - [45]: [setextUnderline, thematicBreak], - [60]: htmlFlow, - [61]: setextUnderline, - [95]: thematicBreak, - [96]: codeFenced, - [126]: codeFenced -} - -/** @satisfies {Extension['string']} */ -const constructs_string = { - [38]: characterReference, - [92]: characterEscape -} - -/** @satisfies {Extension['text']} */ -const constructs_text = { - [-5]: lineEnding, - [-4]: lineEnding, - [-3]: lineEnding, - [33]: labelStartImage, - [38]: characterReference, - [42]: attention, - [60]: [autolink, htmlText], - [91]: labelStartLink, - [92]: [hardBreakEscape, characterEscape], - [93]: labelEnd, - [95]: attention, - [96]: codeText -} - -/** @satisfies {Extension['insideSpan']} */ -const insideSpan = { - null: [attention, resolver] -} - -/** @satisfies {Extension['attentionMarkers']} */ -const attentionMarkers = { - null: [42, 95] -} - -/** @satisfies {Extension['disable']} */ -const disable = { - null: [] -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js -/** - * @typedef {import('micromark-util-types').Create} Create - * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - */ - - - - - - - - - -/** - * @param {ParseOptions | null | undefined} [options] - * @returns {ParseContext} - */ -function parse(options) { - const settings = options || {} - const constructs = - /** @type {FullNormalizedExtension} */ - combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) - - /** @type {ParseContext} */ - const parser = { - defined: [], - lazy: {}, - constructs, - content: create(content), - document: create(document_document), - flow: create(flow), - string: create(string), - text: create(text_text) - } - return parser - - /** - * @param {InitialConstruct} initial - */ - function create(initial) { - return creator - /** @type {Create} */ - function creator(from) { - return createTokenizer(parser, initial, from) - } - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Value} Value - */ - -/** - * @callback Preprocessor - * @param {Value} value - * @param {Encoding | null | undefined} [encoding] - * @param {boolean | null | undefined} [end=false] - * @returns {Array<Chunk>} - */ - -const search = /[\0\t\n\r]/g - -/** - * @returns {Preprocessor} - */ -function preprocess() { - let column = 1 - let buffer = '' - /** @type {boolean | undefined} */ - let start = true - /** @type {boolean | undefined} */ - let atCarriageReturn - return preprocessor - - /** @type {Preprocessor} */ - function preprocessor(value, encoding, end) { - /** @type {Array<Chunk>} */ - const chunks = [] - /** @type {RegExpMatchArray | null} */ - let match - /** @type {number} */ - let next - /** @type {number} */ - let startPosition - /** @type {number} */ - let endPosition - /** @type {Code} */ - let code - - // @ts-expect-error `Buffer` does allow an encoding. - value = buffer + value.toString(encoding) - startPosition = 0 - buffer = '' - if (start) { - // To do: `markdown-rs` actually parses BOMs (byte order mark). - if (value.charCodeAt(0) === 65279) { - startPosition++ - } - start = undefined - } - while (startPosition < value.length) { - search.lastIndex = startPosition - match = search.exec(value) - endPosition = - match && match.index !== undefined ? match.index : value.length - code = value.charCodeAt(endPosition) - if (!match) { - buffer = value.slice(startPosition) - break - } - if (code === 10 && startPosition === endPosition && atCarriageReturn) { - chunks.push(-3) - atCarriageReturn = undefined - } else { - if (atCarriageReturn) { - chunks.push(-5) - atCarriageReturn = undefined - } - if (startPosition < endPosition) { - chunks.push(value.slice(startPosition, endPosition)) - column += endPosition - startPosition - } - switch (code) { - case 0: { - chunks.push(65533) - column++ - break - } - case 9: { - next = Math.ceil(column / 4) * 4 - chunks.push(-2) - while (column++ < next) chunks.push(-1) - break - } - case 10: { - chunks.push(-4) - column = 1 - break - } - default: { - atCarriageReturn = true - column = 1 - } - } - } - startPosition = endPosition + 1 - } - if (end) { - if (atCarriageReturn) chunks.push(-5) - if (buffer) chunks.push(buffer) - chunks.push(null) - } - return chunks - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js -/** - * @typedef {import('micromark-util-types').Event} Event - */ - - - -/** - * @param {Array<Event>} events - * @returns {Array<Event>} - */ -function postprocess(events) { - while (!subtokenize(events)) { - // Empty - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -function decodeNumericCharacterReference(value, base) { - const code = Number.parseInt(value, base) - if ( - // C0 except for HT, LF, FF, CR, space. - code < 9 || - code === 11 || - (code > 13 && code < 32) || - // Control character (DEL) of C0, and C1 controls. - (code > 126 && code < 160) || - // Lone high surrogates and low surrogates. - (code > 55295 && code < 57344) || - // Noncharacters. - (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || - (code & 65535) === 65535 || - (code & 65535) === 65534 /* eslint-enable no-bitwise */ || - // Out of range - code > 1114111 - ) { - return '\uFFFD' - } - return String.fromCharCode(code) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js - - -const characterEscapeOrReference = - /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi - -/** - * Decode markdown strings (which occur in places such as fenced code info - * strings, destinations, labels, and titles). - * - * The “string” content type allows character escapes and -references. - * This decodes those. - * - * @param {string} value - * Value to decode. - * @returns {string} - * Decoded value. - */ -function decodeString(value) { - return value.replace(characterEscapeOrReference, decode) -} - -/** - * @param {string} $0 - * @param {string} $1 - * @param {string} $2 - * @returns {string} - */ -function decode($0, $1, $2) { - if ($1) { - // Escape. - return $1 - } - - // Reference. - const head = $2.charCodeAt(0) - if (head === 35) { - const head = $2.charCodeAt(1) - const hex = head === 120 || head === 88 - return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) - } - return decodeNamedCharacterReference($2) || $0 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Point} Point - * @typedef {import('unist').Position} Position - */ - -/** - * @typedef NodeLike - * @property {string} type - * @property {PositionLike | null | undefined} [position] - * - * @typedef PositionLike - * @property {PointLike | null | undefined} [start] - * @property {PointLike | null | undefined} [end] - * - * @typedef PointLike - * @property {number | null | undefined} [line] - * @property {number | null | undefined} [column] - * @property {number | null | undefined} [offset] - */ - -/** - * Serialize the positional info of a point, position (start and end points), - * or node. - * - * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] - * Node, position, or point. - * @returns {string} - * Pretty printed positional info of a node (`string`). - * - * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) - * or a point `l:c` (when given `point`), where `l` stands for line, `c` for - * column, `s` for `start`, and `e` for end. - * An empty string (`''`) is returned if the given value is neither `node`, - * `position`, nor `point`. - */ -function stringifyPosition(value) { - // Nothing. - if (!value || typeof value !== 'object') { - return '' - } - - // Node. - if ('position' in value || 'type' in value) { - return position(value.position) - } - - // Position. - if ('start' in value || 'end' in value) { - return position(value) - } - - // Point. - if ('line' in value || 'column' in value) { - return point(value) - } - - // ? - return '' -} - -/** - * @param {Point | PointLike | null | undefined} point - * @returns {string} - */ -function point(point) { - return index(point && point.line) + ':' + index(point && point.column) -} - -/** - * @param {Position | PositionLike | null | undefined} pos - * @returns {string} - */ -function position(pos) { - return point(pos && pos.start) + '-' + point(pos && pos.end) -} - -/** - * @param {number | null | undefined} value - * @returns {number} - */ -function index(value) { - return value && typeof value === 'number' ? value : 1 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js -/** - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Value} Value - * - * @typedef {import('unist').Parent} UnistParent - * @typedef {import('unist').Point} Point - * - * @typedef {import('mdast').PhrasingContent} PhrasingContent - * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent - * @typedef {import('mdast').Content} Content - * @typedef {import('mdast').Break} Break - * @typedef {import('mdast').Blockquote} Blockquote - * @typedef {import('mdast').Code} Code - * @typedef {import('mdast').Definition} Definition - * @typedef {import('mdast').Emphasis} Emphasis - * @typedef {import('mdast').Heading} Heading - * @typedef {import('mdast').HTML} HTML - * @typedef {import('mdast').Image} Image - * @typedef {import('mdast').ImageReference} ImageReference - * @typedef {import('mdast').InlineCode} InlineCode - * @typedef {import('mdast').Link} Link - * @typedef {import('mdast').LinkReference} LinkReference - * @typedef {import('mdast').List} List - * @typedef {import('mdast').ListItem} ListItem - * @typedef {import('mdast').Paragraph} Paragraph - * @typedef {import('mdast').Root} Root - * @typedef {import('mdast').Strong} Strong - * @typedef {import('mdast').Text} Text - * @typedef {import('mdast').ThematicBreak} ThematicBreak - * @typedef {import('mdast').ReferenceType} ReferenceType - * @typedef {import('../index.js').CompileData} CompileData - */ - -/** - * @typedef {Root | Content} Node - * @typedef {Extract<Node, UnistParent>} Parent - * - * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment - */ - -/** - * @callback Transform - * Extra transform, to change the AST afterwards. - * @param {Root} tree - * Tree to transform. - * @returns {Root | undefined | null | void} - * New tree or nothing (in which case the current tree is used). - * - * @callback Handle - * Handle a token. - * @param {CompileContext} this - * Context. - * @param {Token} token - * Current token. - * @returns {void} - * Nothing. - * - * @typedef {Record<string, Handle>} Handles - * Token types mapping to handles - * - * @callback OnEnterError - * Handle the case where the `right` token is open, but it is closed (by the - * `left` token) or because we reached the end of the document. - * @param {Omit<CompileContext, 'sliceSerialize'>} this - * Context. - * @param {Token | undefined} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @callback OnExitError - * Handle the case where the `right` token is open but it is closed by - * exiting the `left` token. - * @param {Omit<CompileContext, 'sliceSerialize'>} this - * Context. - * @param {Token} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @typedef {[Token, OnEnterError | undefined]} TokenTuple - * Open token on the stack, with an optional error handler for when - * that token isn’t closed properly. - */ - -/** - * @typedef Config - * Configuration. - * - * We have our defaults, but extensions will add more. - * @property {Array<string>} canContainEols - * Token types where line endings are used. - * @property {Handles} enter - * Opening handles. - * @property {Handles} exit - * Closing handles. - * @property {Array<Transform>} transforms - * Tree transforms. - * - * @typedef {Partial<Config>} Extension - * Change how markdown tokens from micromark are turned into mdast. - * - * @typedef CompileContext - * mdast compiler context. - * @property {Array<Node | Fragment>} stack - * Stack of nodes. - * @property {Array<TokenTuple>} tokenStack - * Stack of tokens. - * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData - * Get data from the key/value store. - * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData - * Set data into the key/value store. - * @property {(this: CompileContext) => void} buffer - * Capture some of the output data. - * @property {(this: CompileContext) => string} resume - * Stop capturing and access the output data. - * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter - * Enter a token. - * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit - * Exit a token. - * @property {TokenizeContext['sliceSerialize']} sliceSerialize - * Get the string value of a token. - * @property {Config} config - * Configuration. - * - * @typedef FromMarkdownOptions - * Configuration for how to build mdast. - * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] - * Extensions for this utility to change how tokens are turned into a tree. - * - * @typedef {ParseOptions & FromMarkdownOptions} Options - * Configuration. - */ - -// To do: micromark: create a registry of tokens? -// To do: next major: don’t return given `Node` from `enter`. -// To do: next major: remove setter/getter. - - - - - - - - - - -const lib_own = {}.hasOwnProperty - -/** - * @param value - * Markdown to parse. - * @param encoding - * Character encoding for when `value` is `Buffer`. - * @param options - * Configuration. - * @returns - * mdast tree. - */ -const fromMarkdown = - /** - * @type {( - * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & - * ((value: Value, options?: Options | null | undefined) => Root) - * )} - */ - - /** - * @param {Value} value - * @param {Encoding | Options | null | undefined} [encoding] - * @param {Options | null | undefined} [options] - * @returns {Root} - */ - function (value, encoding, options) { - if (typeof encoding !== 'string') { - options = encoding - encoding = undefined - } - return compiler(options)( - postprocess( - parse(options).document().write(preprocess()(value, encoding, true)) - ) - ) - } - -/** - * Note this compiler only understand complete buffering, not streaming. - * - * @param {Options | null | undefined} [options] - */ -function compiler(options) { - /** @type {Config} */ - const config = { - transforms: [], - canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], - enter: { - autolink: opener(link), - autolinkProtocol: onenterdata, - autolinkEmail: onenterdata, - atxHeading: opener(heading), - blockQuote: opener(blockQuote), - characterEscape: onenterdata, - characterReference: onenterdata, - codeFenced: opener(codeFlow), - codeFencedFenceInfo: buffer, - codeFencedFenceMeta: buffer, - codeIndented: opener(codeFlow, buffer), - codeText: opener(codeText, buffer), - codeTextData: onenterdata, - data: onenterdata, - codeFlowValue: onenterdata, - definition: opener(definition), - definitionDestinationString: buffer, - definitionLabelString: buffer, - definitionTitleString: buffer, - emphasis: opener(emphasis), - hardBreakEscape: opener(hardBreak), - hardBreakTrailing: opener(hardBreak), - htmlFlow: opener(html, buffer), - htmlFlowData: onenterdata, - htmlText: opener(html, buffer), - htmlTextData: onenterdata, - image: opener(image), - label: buffer, - link: opener(link), - listItem: opener(listItem), - listItemValue: onenterlistitemvalue, - listOrdered: opener(list, onenterlistordered), - listUnordered: opener(list), - paragraph: opener(paragraph), - reference: onenterreference, - referenceString: buffer, - resourceDestinationString: buffer, - resourceTitleString: buffer, - setextHeading: opener(heading), - strong: opener(strong), - thematicBreak: opener(thematicBreak) - }, - exit: { - atxHeading: closer(), - atxHeadingSequence: onexitatxheadingsequence, - autolink: closer(), - autolinkEmail: onexitautolinkemail, - autolinkProtocol: onexitautolinkprotocol, - blockQuote: closer(), - characterEscapeValue: onexitdata, - characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, - characterReferenceMarkerNumeric: onexitcharacterreferencemarker, - characterReferenceValue: onexitcharacterreferencevalue, - codeFenced: closer(onexitcodefenced), - codeFencedFence: onexitcodefencedfence, - codeFencedFenceInfo: onexitcodefencedfenceinfo, - codeFencedFenceMeta: onexitcodefencedfencemeta, - codeFlowValue: onexitdata, - codeIndented: closer(onexitcodeindented), - codeText: closer(onexitcodetext), - codeTextData: onexitdata, - data: onexitdata, - definition: closer(), - definitionDestinationString: onexitdefinitiondestinationstring, - definitionLabelString: onexitdefinitionlabelstring, - definitionTitleString: onexitdefinitiontitlestring, - emphasis: closer(), - hardBreakEscape: closer(onexithardbreak), - hardBreakTrailing: closer(onexithardbreak), - htmlFlow: closer(onexithtmlflow), - htmlFlowData: onexitdata, - htmlText: closer(onexithtmltext), - htmlTextData: onexitdata, - image: closer(onexitimage), - label: onexitlabel, - labelText: onexitlabeltext, - lineEnding: onexitlineending, - link: closer(onexitlink), - listItem: closer(), - listOrdered: closer(), - listUnordered: closer(), - paragraph: closer(), - referenceString: onexitreferencestring, - resourceDestinationString: onexitresourcedestinationstring, - resourceTitleString: onexitresourcetitlestring, - resource: onexitresource, - setextHeading: closer(onexitsetextheading), - setextHeadingLineSequence: onexitsetextheadinglinesequence, - setextHeadingText: onexitsetextheadingtext, - strong: closer(), - thematicBreak: closer() - } - } - configure(config, (options || {}).mdastExtensions || []) - - /** @type {CompileData} */ - const data = {} - return compile - - /** - * Turn micromark events into an mdast tree. - * - * @param {Array<Event>} events - * Events. - * @returns {Root} - * mdast tree. - */ - function compile(events) { - /** @type {Root} */ - let tree = { - type: 'root', - children: [] - } - /** @type {Omit<CompileContext, 'sliceSerialize'>} */ - const context = { - stack: [tree], - tokenStack: [], - config, - enter, - exit, - buffer, - resume, - setData, - getData - } - /** @type {Array<number>} */ - const listStack = [] - let index = -1 - while (++index < events.length) { - // We preprocess lists to add `listItem` tokens, and to infer whether - // items the list itself are spread out. - if ( - events[index][1].type === 'listOrdered' || - events[index][1].type === 'listUnordered' - ) { - if (events[index][0] === 'enter') { - listStack.push(index) - } else { - const tail = listStack.pop() - index = prepareList(events, tail, index) - } - } - } - index = -1 - while (++index < events.length) { - const handler = config[events[index][0]] - if (lib_own.call(handler, events[index][1].type)) { - handler[events[index][1].type].call( - Object.assign( - { - sliceSerialize: events[index][2].sliceSerialize - }, - context - ), - events[index][1] - ) - } - } - - // Handle tokens still being open. - if (context.tokenStack.length > 0) { - const tail = context.tokenStack[context.tokenStack.length - 1] - const handler = tail[1] || defaultOnError - handler.call(context, undefined, tail[0]) - } - - // Figure out `root` position. - tree.position = { - start: lib_point( - events.length > 0 - ? events[0][1].start - : { - line: 1, - column: 1, - offset: 0 - } - ), - end: lib_point( - events.length > 0 - ? events[events.length - 2][1].end - : { - line: 1, - column: 1, - offset: 0 - } - ) - } - - // Call transforms. - index = -1 - while (++index < config.transforms.length) { - tree = config.transforms[index](tree) || tree - } - return tree - } - - /** - * @param {Array<Event>} events - * @param {number} start - * @param {number} length - * @returns {number} - */ - function prepareList(events, start, length) { - let index = start - 1 - let containerBalance = -1 - let listSpread = false - /** @type {Token | undefined} */ - let listItem - /** @type {number | undefined} */ - let lineIndex - /** @type {number | undefined} */ - let firstBlankLineIndex - /** @type {boolean | undefined} */ - let atMarker - while (++index <= length) { - const event = events[index] - if ( - event[1].type === 'listUnordered' || - event[1].type === 'listOrdered' || - event[1].type === 'blockQuote' - ) { - if (event[0] === 'enter') { - containerBalance++ - } else { - containerBalance-- - } - atMarker = undefined - } else if (event[1].type === 'lineEndingBlank') { - if (event[0] === 'enter') { - if ( - listItem && - !atMarker && - !containerBalance && - !firstBlankLineIndex - ) { - firstBlankLineIndex = index - } - atMarker = undefined - } - } else if ( - event[1].type === 'linePrefix' || - event[1].type === 'listItemValue' || - event[1].type === 'listItemMarker' || - event[1].type === 'listItemPrefix' || - event[1].type === 'listItemPrefixWhitespace' - ) { - // Empty. - } else { - atMarker = undefined - } - if ( - (!containerBalance && - event[0] === 'enter' && - event[1].type === 'listItemPrefix') || - (containerBalance === -1 && - event[0] === 'exit' && - (event[1].type === 'listUnordered' || - event[1].type === 'listOrdered')) - ) { - if (listItem) { - let tailIndex = index - lineIndex = undefined - while (tailIndex--) { - const tailEvent = events[tailIndex] - if ( - tailEvent[1].type === 'lineEnding' || - tailEvent[1].type === 'lineEndingBlank' - ) { - if (tailEvent[0] === 'exit') continue - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - listSpread = true - } - tailEvent[1].type = 'lineEnding' - lineIndex = tailIndex - } else if ( - tailEvent[1].type === 'linePrefix' || - tailEvent[1].type === 'blockQuotePrefix' || - tailEvent[1].type === 'blockQuotePrefixWhitespace' || - tailEvent[1].type === 'blockQuoteMarker' || - tailEvent[1].type === 'listItemIndent' - ) { - // Empty - } else { - break - } - } - if ( - firstBlankLineIndex && - (!lineIndex || firstBlankLineIndex < lineIndex) - ) { - listItem._spread = true - } - - // Fix position. - listItem.end = Object.assign( - {}, - lineIndex ? events[lineIndex][1].start : event[1].end - ) - events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) - index++ - length++ - } - - // Create a new list item. - if (event[1].type === 'listItemPrefix') { - listItem = { - type: 'listItem', - _spread: false, - start: Object.assign({}, event[1].start), - // @ts-expect-error: we’ll add `end` in a second. - end: undefined - } - // @ts-expect-error: `listItem` is most definitely defined, TS... - events.splice(index, 0, ['enter', listItem, event[2]]) - index++ - length++ - firstBlankLineIndex = undefined - atMarker = true - } - } - } - events[start][1]._spread = listSpread - return length - } - - /** - * Set data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @param {CompileData[Key]} [value] - * New value. - * @returns {void} - * Nothing. - */ - function setData(key, value) { - data[key] = value - } - - /** - * Get data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @returns {CompileData[Key]} - * Value. - */ - function getData(key) { - return data[key] - } - - /** - * Create an opener handle. - * - * @param {(token: Token) => Node} create - * Create a node. - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function opener(create, and) { - return open - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function open(token) { - enter.call(this, create(token), token) - if (and) and.call(this, token) - } - } - - /** - * @this {CompileContext} - * @returns {void} - */ - function buffer() { - this.stack.push({ - type: 'fragment', - children: [] - }) - } - - /** - * @template {Node} Kind - * Node type. - * @this {CompileContext} - * Context. - * @param {Kind} node - * Node to enter. - * @param {Token} token - * Corresponding token. - * @param {OnEnterError | undefined} [errorHandler] - * Handle the case where this token is open, but it is closed by something else. - * @returns {Kind} - * The given node. - */ - function enter(node, token, errorHandler) { - const parent = this.stack[this.stack.length - 1] - // @ts-expect-error: Assume `Node` can exist as a child of `parent`. - parent.children.push(node) - this.stack.push(node) - this.tokenStack.push([token, errorHandler]) - // @ts-expect-error: `end` will be patched later. - node.position = { - start: lib_point(token.start) - } - return node - } - - /** - * Create a closer handle. - * - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function closer(and) { - return close - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function close(token) { - if (and) and.call(this, token) - exit.call(this, token) - } - } - - /** - * @this {CompileContext} - * Context. - * @param {Token} token - * Corresponding token. - * @param {OnExitError | undefined} [onExitError] - * Handle the case where another token is open. - * @returns {Node} - * The closed node. - */ - function exit(token, onExitError) { - const node = this.stack.pop() - const open = this.tokenStack.pop() - if (!open) { - throw new Error( - 'Cannot close `' + - token.type + - '` (' + - stringifyPosition({ - start: token.start, - end: token.end - }) + - '): it’s not open' - ) - } else if (open[0].type !== token.type) { - if (onExitError) { - onExitError.call(this, token, open[0]) - } else { - const handler = open[1] || defaultOnError - handler.call(this, token, open[0]) - } - } - node.position.end = lib_point(token.end) - return node - } - - /** - * @this {CompileContext} - * @returns {string} - */ - function resume() { - return lib_toString(this.stack.pop()) - } - - // - // Handlers. - // - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistordered() { - setData('expectingFirstListItemValue', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistitemvalue(token) { - if (getData('expectingFirstListItemValue')) { - const ancestor = this.stack[this.stack.length - 2] - ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) - setData('expectingFirstListItemValue') - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfenceinfo() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.lang = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfencemeta() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.meta = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfence() { - // Exit if this is the closing fence. - if (getData('flowCodeInside')) return - this.buffer() - setData('flowCodeInside', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefenced() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') - setData('flowCodeInside') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodeindented() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/(\r?\n|\r)$/g, '') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitionlabelstring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - node.label = label - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiontitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiondestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitatxheadingsequence(token) { - const node = this.stack[this.stack.length - 1] - if (!node.depth) { - const depth = this.sliceSerialize(token).length - node.depth = depth - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadingtext() { - setData('setextHeadingSlurpLineEnding', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadinglinesequence(token) { - const node = this.stack[this.stack.length - 1] - node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheading() { - setData('setextHeadingSlurpLineEnding') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterdata(token) { - const node = this.stack[this.stack.length - 1] - let tail = node.children[node.children.length - 1] - if (!tail || tail.type !== 'text') { - // Add a new text node. - tail = text() - // @ts-expect-error: we’ll add `end` later. - tail.position = { - start: lib_point(token.start) - } - // @ts-expect-error: Assume `parent` accepts `text`. - node.children.push(tail) - } - this.stack.push(tail) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitdata(token) { - const tail = this.stack.pop() - tail.value += this.sliceSerialize(token) - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlineending(token) { - const context = this.stack[this.stack.length - 1] - // If we’re at a hard break, include the line ending in there. - if (getData('atHardBreak')) { - const tail = context.children[context.children.length - 1] - tail.position.end = lib_point(token.end) - setData('atHardBreak') - return - } - if ( - !getData('setextHeadingSlurpLineEnding') && - config.canContainEols.includes(context.type) - ) { - onenterdata.call(this, token) - onexitdata.call(this, token) - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithardbreak() { - setData('atHardBreak', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmlflow() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmltext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcodetext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlink() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitimage() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabeltext(token) { - const string = this.sliceSerialize(token) - const ancestor = this.stack[this.stack.length - 2] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - ancestor.label = decodeString(string) - // @ts-expect-error: same as above. - ancestor.identifier = normalizeIdentifier(string).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabel() { - const fragment = this.stack[this.stack.length - 1] - const value = this.resume() - const node = this.stack[this.stack.length - 1] - // Assume a reference. - setData('inReference', true) - if (node.type === 'link') { - /** @type {Array<StaticPhrasingContent>} */ - // @ts-expect-error: Assume static phrasing content. - const children = fragment.children - node.children = children - } else { - node.alt = value - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcedestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcetitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresource() { - setData('inReference') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterreference() { - setData('referenceType', 'collapsed') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitreferencestring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - node.label = label - // @ts-expect-error: same as above. - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - setData('referenceType', 'full') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcharacterreferencemarker(token) { - setData('characterReferenceType', token.type) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcharacterreferencevalue(token) { - const data = this.sliceSerialize(token) - const type = getData('characterReferenceType') - /** @type {string} */ - let value - if (type) { - value = decodeNumericCharacterReference( - data, - type === 'characterReferenceMarkerNumeric' ? 10 : 16 - ) - setData('characterReferenceType') - } else { - const result = decodeNamedCharacterReference(data) - value = result - } - const tail = this.stack.pop() - tail.value += value - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkprotocol(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = this.sliceSerialize(token) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkemail(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = 'mailto:' + this.sliceSerialize(token) - } - - // - // Creaters. - // - - /** @returns {Blockquote} */ - function blockQuote() { - return { - type: 'blockquote', - children: [] - } - } - - /** @returns {Code} */ - function codeFlow() { - return { - type: 'code', - lang: null, - meta: null, - value: '' - } - } - - /** @returns {InlineCode} */ - function codeText() { - return { - type: 'inlineCode', - value: '' - } - } - - /** @returns {Definition} */ - function definition() { - return { - type: 'definition', - identifier: '', - label: null, - title: null, - url: '' - } - } - - /** @returns {Emphasis} */ - function emphasis() { - return { - type: 'emphasis', - children: [] - } - } - - /** @returns {Heading} */ - function heading() { - // @ts-expect-error `depth` will be set later. - return { - type: 'heading', - depth: undefined, - children: [] - } - } - - /** @returns {Break} */ - function hardBreak() { - return { - type: 'break' - } - } - - /** @returns {HTML} */ - function html() { - return { - type: 'html', - value: '' - } - } - - /** @returns {Image} */ - function image() { - return { - type: 'image', - title: null, - url: '', - alt: null - } - } - - /** @returns {Link} */ - function link() { - return { - type: 'link', - title: null, - url: '', - children: [] - } - } - - /** - * @param {Token} token - * @returns {List} - */ - function list(token) { - return { - type: 'list', - ordered: token.type === 'listOrdered', - start: null, - spread: token._spread, - children: [] - } - } - - /** - * @param {Token} token - * @returns {ListItem} - */ - function listItem(token) { - return { - type: 'listItem', - spread: token._spread, - checked: null, - children: [] - } - } - - /** @returns {Paragraph} */ - function paragraph() { - return { - type: 'paragraph', - children: [] - } - } - - /** @returns {Strong} */ - function strong() { - return { - type: 'strong', - children: [] - } - } - - /** @returns {Text} */ - function text() { - return { - type: 'text', - value: '' - } - } - - /** @returns {ThematicBreak} */ - function thematicBreak() { - return { - type: 'thematicBreak' - } - } -} - -/** - * Copy a point-like value. - * - * @param {Point} d - * Point-like value. - * @returns {Point} - * unist point. - */ -function lib_point(d) { - return { - line: d.line, - column: d.column, - offset: d.offset - } -} - -/** - * @param {Config} combined - * @param {Array<Extension | Array<Extension>>} extensions - * @returns {void} - */ -function configure(combined, extensions) { - let index = -1 - while (++index < extensions.length) { - const value = extensions[index] - if (Array.isArray(value)) { - configure(combined, value) - } else { - extension(combined, value) - } - } -} - -/** - * @param {Config} combined - * @param {Extension} extension - * @returns {void} - */ -function extension(combined, extension) { - /** @type {keyof Extension} */ - let key - for (key in extension) { - if (lib_own.call(extension, key)) { - if (key === 'canContainEols') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'transforms') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'enter' || key === 'exit') { - const right = extension[key] - if (right) { - Object.assign(combined[key], right) - } - } - } - } -} - -/** @type {OnEnterError} */ -function defaultOnError(left, right) { - if (left) { - throw new Error( - 'Cannot close `' + - left.type + - '` (' + - stringifyPosition({ - start: left.start, - end: left.end - }) + - '): a different token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is open' - ) - } else { - throw new Error( - 'Cannot close document, a token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is still open' - ) - } -} - -// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js -var esm = __webpack_require__(60513); -;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-ca0c5216.js - - - -function preprocessMarkdown(markdown) { - const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); - const withoutExtraSpaces = (0,esm/* dedent */.T)(withoutMultipleNewlines); - return withoutExtraSpaces; -} -function markdownToLines(markdown) { - const preprocessedMarkdown = preprocessMarkdown(markdown); - const { children } = fromMarkdown(preprocessedMarkdown); - const lines = [[]]; - let currentLine = 0; - function processNode(node, parentType = "normal") { - if (node.type === "text") { - const textLines = node.value.split("\n"); - textLines.forEach((textLine, index) => { - if (index !== 0) { - currentLine++; - lines.push([]); - } - textLine.split(" ").forEach((word) => { - if (word) { - lines[currentLine].push({ content: word, type: parentType }); - } - }); - }); - } else if (node.type === "strong" || node.type === "emphasis") { - node.children.forEach((contentNode) => { - processNode(contentNode, node.type); - }); - } - } - children.forEach((treeNode) => { - if (treeNode.type === "paragraph") { - treeNode.children.forEach((contentNode) => { - processNode(contentNode); - }); - } - }); - return lines; -} -function markdownToHTML(markdown) { - const { children } = fromMarkdown(markdown); - function output(node) { - if (node.type === "text") { - return node.value.replace(/\n/g, "<br/>"); - } else if (node.type === "strong") { - return `<strong>${node.children.map(output).join("")}</strong>`; - } else if (node.type === "emphasis") { - return `<em>${node.children.map(output).join("")}</em>`; - } else if (node.type === "paragraph") { - return `<p>${node.children.map(output).join("")}</p>`; - } - return `Unsupported markdown: ${node.type}`; - } - return children.map(output).join(""); -} -function splitTextToChars(text) { - if (Intl.Segmenter) { - return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); - } - return [...text]; -} -function splitWordToFitWidth(checkFit, word) { - const characters = splitTextToChars(word.content); - return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); -} -function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { - if (remainingChars.length === 0) { - return [ - { content: usedChars.join(""), type }, - { content: "", type } - ]; - } - const [nextChar, ...rest] = remainingChars; - const newWord = [...usedChars, nextChar]; - if (checkFit([{ content: newWord.join(""), type }])) { - return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); - } - if (usedChars.length === 0 && nextChar) { - usedChars.push(nextChar); - remainingChars.shift(); - } - return [ - { content: usedChars.join(""), type }, - { content: remainingChars.join(""), type } - ]; -} -function splitLineToFitWidth(line, checkFit) { - if (line.some(({ content }) => content.includes("\n"))) { - throw new Error("splitLineToFitWidth does not support newlines in the line"); - } - return splitLineToFitWidthRecursion(line, checkFit); -} -function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { - if (words.length === 0) { - if (newLine.length > 0) { - lines.push(newLine); - } - return lines.length > 0 ? lines : []; - } - let joiner = ""; - if (words[0].content === " ") { - joiner = " "; - words.shift(); - } - const nextWord = words.shift() ?? { content: " ", type: "normal" }; - const lineWithNextWord = [...newLine]; - if (joiner !== "") { - lineWithNextWord.push({ content: joiner, type: "normal" }); - } - lineWithNextWord.push(nextWord); - if (checkFit(lineWithNextWord)) { - return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); - } - if (newLine.length > 0) { - lines.push(newLine); - words.unshift(nextWord); - } else if (nextWord.content) { - const [line, rest] = splitWordToFitWidth(checkFit, nextWord); - lines.push([line]); - if (rest.content) { - words.unshift(rest); - } - } - return splitLineToFitWidthRecursion(words, checkFit, lines); -} -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlSpan(element, node, width, classes, addBackground = false) { - const fo = element.append("foreignObject"); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - ` - <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" - ); - applyStyle(div, node.labelStyle); - div.style("display", "table-cell"); - div.style("white-space", "nowrap"); - div.style("max-width", width + "px"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - if (addBackground) { - div.attr("class", "labelBkg"); - } - let bbox = div.node().getBoundingClientRect(); - if (bbox.width === width) { - div.style("display", "table"); - div.style("white-space", "break-spaces"); - div.style("width", width + "px"); - bbox = div.node().getBoundingClientRect(); - } - fo.style("width", bbox.width); - fo.style("height", bbox.height); - return fo.node(); -} -function createTspan(textElement, lineIndex, lineHeight) { - return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); -} -function computeWidthOfText(parentNode, lineHeight, line) { - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, line); - const textLength = testSpan.node().getComputedTextLength(); - testElement.remove(); - return textLength; -} -function computeDimensionOfText(parentNode, lineHeight, text) { - var _a; - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); - const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); - if (textDimension) { - testElement.remove(); - } - return textDimension; -} -function createFormattedText(width, g, structuredText, addBackground = false) { - const lineHeight = 1.1; - const labelGroup = g.append("g"); - const bkg = labelGroup.insert("rect").attr("class", "background"); - const textElement = labelGroup.append("text").attr("y", "-10.1"); - let lineIndex = 0; - for (const line of structuredText) { - const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; - const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); - for (const preparedLine of linesUnderWidth) { - const tspan = createTspan(textElement, lineIndex, lineHeight); - updateTextContentAndStyles(tspan, preparedLine); - lineIndex++; - } - } - if (addBackground) { - const bbox = textElement.node().getBBox(); - const padding = 2; - bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); - return labelGroup.node(); - } else { - return textElement.node(); - } -} -function updateTextContentAndStyles(tspan, wrappedLine) { - tspan.text(""); - wrappedLine.forEach((word, index) => { - const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); - if (index === 0) { - innerTspan.text(word.content); - } else { - innerTspan.text(" " + word.content); - } - }); -} -const createText = (el, text = "", { - style = "", - isTitle = false, - classes = "", - useHtmlLabels = true, - isNode = true, - width = 200, - addSvgBackground = false -} = {}) => { - mermaid_6dc72991.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); - if (useHtmlLabels) { - const htmlText = markdownToHTML(text); - const node = { - isNode, - label: (0,mermaid_6dc72991.M)(htmlText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - labelStyle: style.replace("fill:", "color:") - }; - const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); - return vertexNode; - } else { - const structuredText = markdownToLines(text); - const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); - return svgLabel; - } -}; - - - -/***/ }), - -/***/ 98055: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ a: () => (/* binding */ insertMarkers$1), -/* harmony export */ b: () => (/* binding */ clear$1), -/* harmony export */ c: () => (/* binding */ createLabel$1), -/* harmony export */ d: () => (/* binding */ clear), -/* harmony export */ e: () => (/* binding */ insertNode), -/* harmony export */ f: () => (/* binding */ insertEdgeLabel), -/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), -/* harmony export */ h: () => (/* binding */ insertEdge), -/* harmony export */ i: () => (/* binding */ intersectRect$1), -/* harmony export */ j: () => (/* binding */ positionEdgeLabel), -/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), -/* harmony export */ l: () => (/* binding */ labelHelper), -/* harmony export */ m: () => (/* binding */ addEdgeMarkers), -/* harmony export */ p: () => (/* binding */ positionNode), -/* harmony export */ s: () => (/* binding */ setNodeElem), -/* harmony export */ u: () => (/* binding */ updateNodeBounds) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(18897); - - - -const insertMarkers = (elem, markerArray, type, id) => { - markerArray.forEach((markerName) => { - markers[markerName](elem, type, id); - }); -}; -const extension = (elem, type, id) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); -}; -const composition = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); -}; -const aggregation = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); -}; -const dependency = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); -}; -const lollipop = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); -}; -const point = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); -}; -const circle$1 = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); -}; -const cross = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); -}; -const barb = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); -}; -const markers = { - extension, - composition, - aggregation, - dependency, - lollipop, - point, - circle: circle$1, - cross, - barb -}; -const insertMarkers$1 = insertMarkers; -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlLabel(node) { - const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" - ); - applyStyle(div, node.labelStyle); - div.style("display", "inline-block"); - div.style("white-space", "nowrap"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - return fo.node(); -} -const createLabel = (_vertexText, style, isTitle, isNode) => { - let vertexText = _vertexText || ""; - if (typeof vertexText === "object") { - vertexText = vertexText[0]; - } - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - vertexText = vertexText.replace(/\\n|\n/g, "<br />"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); - const node = { - isNode, - label: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(vertexText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - labelStyle: style.replace("fill:", "color:") - }; - let vertexNode = addHtmlLabel(node); - return vertexNode; - } else { - const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); - svgLabel.setAttribute("style", style.replace("color:", "fill:")); - let rows = []; - if (typeof vertexText === "string") { - rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); - } else if (Array.isArray(vertexText)) { - rows = vertexText; - } else { - rows = []; - } - for (const row of rows) { - const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); - tspan.setAttribute("dy", "1em"); - tspan.setAttribute("x", "0"); - if (isTitle) { - tspan.setAttribute("class", "title-row"); - } else { - tspan.setAttribute("class", "row"); - } - tspan.textContent = row.trim(); - svgLabel.appendChild(tspan); - } - return svgLabel; - } -}; -const createLabel$1 = createLabel; -const labelHelper = async (parent, node, _classes, isNode) => { - let classes; - const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); - if (!_classes) { - classes = "node default"; - } else { - classes = _classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); - let labelText; - if (node.labelText === void 0) { - labelText = ""; - } else { - labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; - } - const textNode = label.node(); - let text; - if (node.labelType === "markdown") { - text = (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { - useHtmlLabels, - width: node.width || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, - classes: "markdown-node-label" - }); - } else { - text = textNode.appendChild( - createLabel$1( - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), - node.labelStyle, - false, - isNode - ) - ); - } - let bbox = text.getBBox(); - const halfPadding = node.padding / 2; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); - const images = div.getElementsByTagName("img"); - if (images) { - const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; - await Promise.all( - [...images].map( - (img) => new Promise((res) => { - function setupImage() { - img.style.display = "flex"; - img.style.flexDirection = "column"; - if (noImgText) { - const bodyFontSize = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; - const enlargingFactor = 5; - const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; - img.style.minWidth = width; - img.style.maxWidth = width; - } else { - img.style.width = "100%"; - } - res(img); - } - setTimeout(() => { - if (img.complete) { - setupImage(); - } - }); - img.addEventListener("error", setupImage); - img.addEventListener("load", setupImage); - }) - ) - ); - } - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (useHtmlLabels) { - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - } else { - label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); - } - if (node.centerLabel) { - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - } - label.insert("rect", ":first-child"); - return { shapeSvg, bbox, halfPadding, label }; -}; -const updateNodeBounds = (node, element) => { - const bbox = element.node().getBBox(); - node.width = bbox.width; - node.height = bbox.height; -}; -function insertPolygonShape(parent, w, h, points) { - return parent.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); -} -function intersectNode(node, point2) { - return node.intersect(point2); -} -function intersectEllipse(node, rx, ry, point2) { - var cx = node.x; - var cy = node.y; - var px = cx - point2.x; - var py = cy - point2.y; - var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); - var dx = Math.abs(rx * ry * px / det); - if (point2.x < cx) { - dx = -dx; - } - var dy = Math.abs(rx * ry * py / det); - if (point2.y < cy) { - dy = -dy; - } - return { x: cx + dx, y: cy + dy }; -} -function intersectCircle(node, rx, point2) { - return intersectEllipse(node, rx, rx, point2); -} -function intersectLine(p1, p2, q1, q2) { - var a1, a2, b1, b2, c1, c2; - var r1, r2, r3, r4; - var denom, offset, num; - var x, y; - a1 = p2.y - p1.y; - b1 = p1.x - p2.x; - c1 = p2.x * p1.y - p1.x * p2.y; - r3 = a1 * q1.x + b1 * q1.y + c1; - r4 = a1 * q2.x + b1 * q2.y + c1; - if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { - return; - } - a2 = q2.y - q1.y; - b2 = q1.x - q2.x; - c2 = q2.x * q1.y - q1.x * q2.y; - r1 = a2 * p1.x + b2 * p1.y + c2; - r2 = a2 * p2.x + b2 * p2.y + c2; - if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { - return; - } - denom = a1 * b2 - a2 * b1; - if (denom === 0) { - return; - } - offset = Math.abs(denom / 2); - num = b1 * c2 - b2 * c1; - x = num < 0 ? (num - offset) / denom : (num + offset) / denom; - num = a2 * c1 - a1 * c2; - y = num < 0 ? (num - offset) / denom : (num + offset) / denom; - return { x, y }; -} -function sameSign(r1, r2) { - return r1 * r2 > 0; -} -function intersectPolygon(node, polyPoints, point2) { - var x1 = node.x; - var y1 = node.y; - var intersections = []; - var minX = Number.POSITIVE_INFINITY; - var minY = Number.POSITIVE_INFINITY; - if (typeof polyPoints.forEach === "function") { - polyPoints.forEach(function(entry) { - minX = Math.min(minX, entry.x); - minY = Math.min(minY, entry.y); - }); - } else { - minX = Math.min(minX, polyPoints.x); - minY = Math.min(minY, polyPoints.y); - } - var left = x1 - node.width / 2 - minX; - var top = y1 - node.height / 2 - minY; - for (var i = 0; i < polyPoints.length; i++) { - var p1 = polyPoints[i]; - var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; - var intersect2 = intersectLine( - node, - point2, - { x: left + p1.x, y: top + p1.y }, - { x: left + p2.x, y: top + p2.y } - ); - if (intersect2) { - intersections.push(intersect2); - } - } - if (!intersections.length) { - return node; - } - if (intersections.length > 1) { - intersections.sort(function(p, q) { - var pdx = p.x - point2.x; - var pdy = p.y - point2.y; - var distp = Math.sqrt(pdx * pdx + pdy * pdy); - var qdx = q.x - point2.x; - var qdy = q.y - point2.y; - var distq = Math.sqrt(qdx * qdx + qdy * qdy); - return distp < distq ? -1 : distp === distq ? 0 : 1; - }); - } - return intersections[0]; -} -const intersectRect = (node, point2) => { - var x = node.x; - var y = node.y; - var dx = point2.x - x; - var dy = point2.y - y; - var w = node.width / 2; - var h = node.height / 2; - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - if (dy < 0) { - h = -h; - } - sx = dy === 0 ? 0 : h * dx / dy; - sy = h; - } else { - if (dx < 0) { - w = -w; - } - sx = w; - sy = dx === 0 ? 0 : w * dy / dx; - } - return { x: x + sx, y: y + sy }; -}; -const intersectRect$1 = intersectRect; -const intersect = { - node: intersectNode, - circle: intersectCircle, - ellipse: intersectEllipse, - polygon: intersectPolygon, - rect: intersectRect$1 -}; -const note = async (parent, node) => { - const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; - if (!useHtmlLabels) { - node.centerLabel = true; - } - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes, - true - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); - const rect2 = shapeSvg.insert("rect", ":first-child"); - rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const note$1 = note; -const expandAndDeduplicateDirections = (directions) => { - const uniqueDirections = /* @__PURE__ */ new Set(); - for (const direction of directions) { - switch (direction) { - case "x": - uniqueDirections.add("right"); - uniqueDirections.add("left"); - break; - case "y": - uniqueDirections.add("up"); - uniqueDirections.add("down"); - break; - default: - uniqueDirections.add(direction); - break; - } - } - return uniqueDirections; -}; -const getArrowPoints = (duplicatedDirections, bbox, node) => { - const directions = expandAndDeduplicateDirections(duplicatedDirections); - const f = 2; - const height = bbox.height + 2 * node.padding; - const midpoint = height / f; - const width = bbox.width + 2 * midpoint + node.padding; - const padding = node.padding / 2; - if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { - return [ - // Bottom - { x: 0, y: 0 }, - { x: midpoint, y: 0 }, - { x: width / 2, y: 2 * padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: 0 }, - // Right - { x: width, y: -height / 3 }, - { x: width + 2 * padding, y: -height / 2 }, - { x: width, y: -2 * height / 3 }, - { x: width, y: -height }, - // Top - { x: width - midpoint, y: -height }, - { x: width / 2, y: -height - 2 * padding }, - { x: midpoint, y: -height }, - // Left - { x: 0, y: -height }, - { x: 0, y: -2 * height / 3 }, - { x: -2 * padding, y: -height / 2 }, - { x: 0, y: -height / 3 } - ]; - } - if (directions.has("right") && directions.has("left") && directions.has("up")) { - return [ - { x: midpoint, y: 0 }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("right") && directions.has("left") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: midpoint, y: -height }, - { x: width - midpoint, y: -height }, - { x: width, y: 0 } - ]; - } - if (directions.has("right") && directions.has("up") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: width, y: -midpoint }, - { x: width, y: -height + midpoint }, - { x: 0, y: -height } - ]; - } - if (directions.has("left") && directions.has("up") && directions.has("down")) { - return [ - { x: width, y: 0 }, - { x: 0, y: -midpoint }, - { x: 0, y: -height + midpoint }, - { x: width, y: -height } - ]; - } - if (directions.has("right") && directions.has("left")) { - return [ - { x: midpoint, y: 0 }, - { x: midpoint, y: -padding }, - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: width - midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("up") && directions.has("down")) { - return [ - // Bottom center - { x: width / 2, y: 0 }, - // Left pont of bottom arrow - { x: 0, y: -padding }, - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: 0, y: -height + padding }, - // Top of arrow - { x: width / 2, y: -height }, - { x: width, y: -height + padding }, - // Top of right vertical bar - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding }, - { x: width, y: -padding } - ]; - } - if (directions.has("right") && directions.has("up")) { - return [ - { x: 0, y: 0 }, - { x: width, y: -midpoint }, - { x: 0, y: -height } - ]; - } - if (directions.has("right") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: width, y: 0 }, - { x: 0, y: -height } - ]; - } - if (directions.has("left") && directions.has("up")) { - return [ - { x: width, y: 0 }, - { x: 0, y: -midpoint }, - { x: width, y: -height } - ]; - } - if (directions.has("left") && directions.has("down")) { - return [ - { x: width, y: 0 }, - { x: 0, y: 0 }, - { x: width, y: -height } - ]; - } - if (directions.has("right")) { - return [ - { x: midpoint, y: -padding }, - { x: midpoint, y: -padding }, - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: width - midpoint, y: -height + padding }, - // top left corner of arrow - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding } - ]; - } - if (directions.has("left")) { - return [ - { x: midpoint, y: 0 }, - { x: midpoint, y: -padding }, - // Two points, the right corners - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("up")) { - return [ - // Bottom center - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: 0, y: -height + padding }, - // Top of arrow - { x: width / 2, y: -height }, - { x: width, y: -height + padding }, - // Top of right vertical bar - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding } - ]; - } - if (directions.has("down")) { - return [ - // Bottom center - { x: width / 2, y: 0 }, - // Left pont of bottom arrow - { x: 0, y: -padding }, - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding }, - { x: width, y: -padding } - ]; - } - return [{ x: 0, y: 0 }]; -}; -const formatClass = (str) => { - if (str) { - return " " + str; - } - return ""; -}; -const getClassesFromNode = (node, otherClasses) => { - return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( - node.class - )}`; -}; -const question = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const s = w + h; - const points = [ - { x: s / 2, y: 0 }, - { x: s, y: -s / 2 }, - { x: s / 2, y: -s }, - { x: 0, y: -s / 2 } - ]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); - const questionElem = insertPolygonShape(shapeSvg, s, s, points); - questionElem.attr("style", node.style); - updateNodeBounds(node, questionElem); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const choice = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const s = 28; - const points = [ - { x: 0, y: s / 2 }, - { x: s / 2, y: 0 }, - { x: 0, y: -s / 2 }, - { x: -s / 2, y: 0 } - ]; - const choice2 = shapeSvg.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ); - choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); - node.width = 28; - node.height = 28; - node.intersect = function(point2) { - return intersect.circle(node, 14, point2); - }; - return shapeSvg; -}; -const hexagon = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const f = 4; - const h = bbox.height + node.padding; - const m = h / f; - const w = bbox.width + 2 * m + node.padding; - const points = [ - { x: m, y: 0 }, - { x: w - m, y: 0 }, - { x: w, y: -h / 2 }, - { x: w - m, y: -h }, - { x: m, y: -h }, - { x: 0, y: -h / 2 } - ]; - const hex = insertPolygonShape(shapeSvg, w, h, points); - hex.attr("style", node.style); - updateNodeBounds(node, hex); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const block_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); - const f = 2; - const h = bbox.height + 2 * node.padding; - const m = h / f; - const w = bbox.width + 2 * m + node.padding; - const points = getArrowPoints(node.directions, bbox, node); - const blockArrow = insertPolygonShape(shapeSvg, w, h, points); - blockArrow.attr("style", node.style); - updateNodeBounds(node, blockArrow); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const rect_left_inv_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -h / 2, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: -h / 2, y: -h }, - { x: 0, y: -h / 2 } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - node.width = w + h; - node.height = h; - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const lean_right = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const lean_left = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 2 * h / 6, y: 0 }, - { x: w + h / 6, y: 0 }, - { x: w - 2 * h / 6, y: -h }, - { x: -h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const trapezoid = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w + 2 * h / 6, y: 0 }, - { x: w - h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const inv_trapezoid = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: -2 * h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const rect_right_inv_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 0, y: 0 }, - { x: w + h / 2, y: 0 }, - { x: w, y: -h / 2 }, - { x: w + h / 2, y: -h }, - { x: 0, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const cylinder = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const rx = w / 2; - const ry = rx / (2.5 + w / 50); - const h = bbox.height + ry + node.padding; - const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; - const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); - updateNodeBounds(node, el); - node.intersect = function(point2) { - const pos = intersect.rect(node, point2); - const x = pos.x - node.x; - if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { - let y = ry * ry * (1 - x * x / (rx * rx)); - if (y != 0) { - y = Math.sqrt(y); - } - y = ry - y; - if (point2.y - node.y > 0) { - y = -y; - } - pos.y += y; - } - return pos; - }; - return shapeSvg; -}; -const rect = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes + " " + node.class, - true - ); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = node.positioned ? node.width : bbox.width + node.padding; - const totalHeight = node.positioned ? node.height : bbox.height + node.padding; - const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; - const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; - rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const composite = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes, - true - ); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = node.positioned ? node.width : bbox.width + node.padding; - const totalHeight = node.positioned ? node.height : bbox.height + node.padding; - const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; - const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; - rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const labelRect = async (parent, node) => { - const { shapeSvg } = await labelHelper(parent, node, "label", true); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = 0; - const totalHeight = 0; - rect2.attr("width", totalWidth).attr("height", totalHeight); - shapeSvg.attr("class", "label edgeLabel"); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { - const strokeDashArray = []; - const addBorder = (length) => { - strokeDashArray.push(length, 0); - }; - const skipBorder = (length) => { - strokeDashArray.push(0, length); - }; - if (borders.includes("t")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); - addBorder(totalWidth); - } else { - skipBorder(totalWidth); - } - if (borders.includes("r")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); - addBorder(totalHeight); - } else { - skipBorder(totalHeight); - } - if (borders.includes("b")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); - addBorder(totalWidth); - } else { - skipBorder(totalWidth); - } - if (borders.includes("l")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); - addBorder(totalHeight); - } else { - skipBorder(totalHeight); - } - rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); -} -const rectWithTitle = (parent, node) => { - let classes; - if (!node.classes) { - classes = "node default"; - } else { - classes = "node " + node.classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const innerLine = shapeSvg.insert("line"); - const label = shapeSvg.insert("g").attr("class", "label"); - const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; - let title = ""; - if (typeof text2 === "object") { - title = text2[0]; - } else { - title = text2; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); - const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); - let bbox = { width: 0, height: 0 }; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); - const textRows = text2.slice(1, text2.length); - let titleBox = text.getBBox(); - const descr = label.node().appendChild( - createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) - ); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = descr.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - const halfPadding = node.padding / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr).attr( - "transform", - "translate( " + // (titleBox.width - bbox.width) / 2 + - (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" - ); - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text).attr( - "transform", - "translate( " + // (titleBox.width - bbox.width) / 2 + - (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" - ); - bbox = label.node().getBBox(); - label.attr( - "transform", - "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" - ); - rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const stadium = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const h = bbox.height + node.padding; - const w = bbox.width + h / 4 + node.padding; - const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const circle = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); - return intersect.circle(node, bbox.width / 2 + halfPadding, point2); - }; - return shapeSvg; -}; -const doublecircle = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const gap = 5; - const circleGroup = shapeSvg.insert("g", ":first-child"); - const outerCircle = circleGroup.insert("circle"); - const innerCircle = circleGroup.insert("circle"); - circleGroup.attr("class", node.class); - outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); - innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); - updateNodeBounds(node, outerCircle); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); - return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); - }; - return shapeSvg; -}; -const subroutine = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 0, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: 0, y: -h }, - { x: 0, y: 0 }, - { x: -8, y: 0 }, - { x: w + 8, y: 0 }, - { x: w + 8, y: -h }, - { x: -8, y: -h }, - { x: -8, y: 0 } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const start = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - return intersect.circle(node, 7, point2); - }; - return shapeSvg; -}; -const forkJoin = (parent, node, dir) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - let width = 70; - let height = 10; - if (dir === "LR") { - width = 10; - height = 70; - } - const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); - updateNodeBounds(node, shape); - node.height = node.height + node.padding / 2; - node.width = node.width + node.padding / 2; - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const end = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const innerCircle = shapeSvg.insert("circle", ":first-child"); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); - innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - return intersect.circle(node, 7, point2); - }; - return shapeSvg; -}; -const class_box = (parent, node) => { - const halfPadding = node.padding / 2; - const rowPadding = 4; - const lineHeight = 8; - let classes; - if (!node.classes) { - classes = "node default"; - } else { - classes = "node " + node.classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const topLine = shapeSvg.insert("line"); - const bottomLine = shapeSvg.insert("line"); - let maxWidth = 0; - let maxHeight = rowPadding; - const labelContainer = shapeSvg.insert("g").attr("class", "label"); - let verticalPos = 0; - const hasInterface = node.classData.annotations && node.classData.annotations[0]; - const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; - const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); - let interfaceBBox = interfaceLabel.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = interfaceLabel.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel); - interfaceBBox = div.getBoundingClientRect(); - dv.attr("width", interfaceBBox.width); - dv.attr("height", interfaceBBox.height); - } - if (node.classData.annotations[0]) { - maxHeight += interfaceBBox.height + rowPadding; - maxWidth += interfaceBBox.width; - } - let classTitleString = node.classData.label; - if (node.classData.type !== void 0 && node.classData.type !== "") { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - classTitleString += "<" + node.classData.type + ">"; - } else { - classTitleString += "<" + node.classData.type + ">"; - } - } - const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr("class", "classTitle"); - let classTitleBBox = classTitleLabel.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = classTitleLabel.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel); - classTitleBBox = div.getBoundingClientRect(); - dv.attr("width", classTitleBBox.width); - dv.attr("height", classTitleBBox.height); - } - maxHeight += classTitleBBox.height + rowPadding; - if (classTitleBBox.width > maxWidth) { - maxWidth = classTitleBBox.width; - } - const classAttributes = []; - node.classData.members.forEach((member) => { - const parsedInfo = member.getDisplayDetails(); - let parsedText = parsedInfo.displayText; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); - } - const lbl = labelContainer.node().appendChild( - createLabel$1( - parsedText, - parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, - true, - true - ) - ); - let bbox = lbl.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = lbl.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (bbox.width > maxWidth) { - maxWidth = bbox.width; - } - maxHeight += bbox.height + rowPadding; - classAttributes.push(lbl); - }); - maxHeight += lineHeight; - const classMethods = []; - node.classData.methods.forEach((member) => { - const parsedInfo = member.getDisplayDetails(); - let displayText = parsedInfo.displayText; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); - } - const lbl = labelContainer.node().appendChild( - createLabel$1( - displayText, - parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, - true, - true - ) - ); - let bbox = lbl.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = lbl.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (bbox.width > maxWidth) { - maxWidth = bbox.width; - } - maxHeight += bbox.height + rowPadding; - classMethods.push(lbl); - }); - maxHeight += lineHeight; - if (hasInterface) { - let diffX2 = (maxWidth - interfaceBBox.width) / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel).attr( - "transform", - "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" - ); - verticalPos = interfaceBBox.height + rowPadding; - } - let diffX = (maxWidth - classTitleBBox.width) / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr( - "transform", - "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" - ); - verticalPos += classTitleBBox.height + rowPadding; - topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); - verticalPos += lineHeight; - classAttributes.forEach((lbl) => { - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( - "transform", - "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" - ); - const memberBBox = lbl == null ? void 0 : lbl.getBBox(); - verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; - }); - verticalPos += lineHeight; - bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); - verticalPos += lineHeight; - classMethods.forEach((lbl) => { - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( - "transform", - "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" - ); - const memberBBox = lbl == null ? void 0 : lbl.getBBox(); - verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; - }); - rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const shapes = { - rhombus: question, - composite, - question, - rect, - labelRect, - rectWithTitle, - choice, - circle, - doublecircle, - stadium, - hexagon, - block_arrow, - rect_left_inv_arrow, - lean_right, - lean_left, - trapezoid, - inv_trapezoid, - rect_right_inv_arrow, - cylinder, - start, - end, - note: note$1, - subroutine, - fork: forkJoin, - join: forkJoin, - class_box -}; -let nodeElems = {}; -const insertNode = async (elem, node, dir) => { - let newEl; - let el; - if (node.link) { - let target; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { - target = "_top"; - } else if (node.linkTarget) { - target = node.linkTarget || "_blank"; - } - newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); - el = await shapes[node.shape](newEl, node, dir); - } else { - el = await shapes[node.shape](elem, node, dir); - newEl = el; - } - if (node.tooltip) { - el.attr("title", node.tooltip); - } - if (node.class) { - el.attr("class", "node default " + node.class); - } - newEl.attr("data-node", "true"); - newEl.attr("data-id", node.id); - nodeElems[node.id] = newEl; - if (node.haveCallback) { - nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); - } - return newEl; -}; -const setNodeElem = (elem, node) => { - nodeElems[node.id] = elem; -}; -const clear$1 = () => { - nodeElems = {}; -}; -const positionNode = (node) => { - const el = nodeElems[node.id]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( - "Transforming node", - node.diff, - node, - "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" - ); - const padding = 8; - const diff = node.diff || 0; - if (node.clusterNode) { - el.attr( - "transform", - "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" - ); - } else { - el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); - } - return diff; -}; -const getSubGraphTitleMargins = ({ - flowchart -}) => { - var _a, _b; - const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; - const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; - const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; - return { - subGraphTitleTopMargin, - subGraphTitleBottomMargin, - subGraphTitleTotalMargin - }; -}; -const markerOffsets = { - aggregation: 18, - extension: 18, - composition: 18, - dependency: 6, - lollipop: 13.5, - arrow_point: 5.3 -}; -function calculateDeltaAndAngle(point1, point2) { - if (point1 === void 0 || point2 === void 0) { - return { angle: 0, deltaX: 0, deltaY: 0 }; - } - point1 = pointTransformer(point1); - point2 = pointTransformer(point2); - const [x1, y1] = [point1.x, point1.y]; - const [x2, y2] = [point2.x, point2.y]; - const deltaX = x2 - x1; - const deltaY = y2 - y1; - return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; -} -const pointTransformer = (data) => { - if (Array.isArray(data)) { - return { x: data[0], y: data[1] }; - } - return data; -}; -const getLineFunctionsWithOffset = (edge) => { - return { - x: function(d, i, data) { - let offset = 0; - if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { - const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); - offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); - } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { - const { angle, deltaX } = calculateDeltaAndAngle( - data[data.length - 1], - data[data.length - 2] - ); - offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); - } - return pointTransformer(d).x + offset; - }, - y: function(d, i, data) { - let offset = 0; - if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { - const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); - offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); - } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { - const { angle, deltaY } = calculateDeltaAndAngle( - data[data.length - 1], - data[data.length - 2] - ); - offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); - } - return pointTransformer(d).y + offset; - } - }; -}; -const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { - if (edge.arrowTypeStart) { - addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); - } - if (edge.arrowTypeEnd) { - addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); - } -}; -const arrowTypesMap = { - arrow_cross: "cross", - arrow_point: "point", - arrow_barb: "barb", - arrow_circle: "circle", - aggregation: "aggregation", - extension: "extension", - composition: "composition", - dependency: "dependency", - lollipop: "lollipop" -}; -const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { - const endMarkerType = arrowTypesMap[arrowType]; - if (!endMarkerType) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); - return; - } - const suffix = position === "start" ? "Start" : "End"; - svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); -}; -let edgeLabels = {}; -let terminalLabels = {}; -const clear = () => { - edgeLabels = {}; - terminalLabels = {}; -}; -const insertEdgeLabel = (elem, edge) => { - const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); - const labelElement = edge.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { - style: edge.labelStyle, - useHtmlLabels, - addSvgBackground: true - }) : createLabel$1(edge.label, edge.labelStyle); - const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); - const label = edgeLabel.insert("g").attr("class", "label"); - label.node().appendChild(labelElement); - let bbox = labelElement.getBBox(); - if (useHtmlLabels) { - const div = labelElement.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(labelElement); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - edgeLabels[edge.id] = edgeLabel; - edge.width = bbox.width; - edge.height = bbox.height; - let fo; - if (edge.startLabelLeft) { - const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); - const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); - const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(startLabelElement); - const slBox = startLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].startLeft = startEdgeLabelLeft; - setTerminalWidth(fo, edge.startLabelLeft); - } - if (edge.startLabelRight) { - const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); - const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); - const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); - fo = startEdgeLabelRight.node().appendChild(startLabelElement); - inner.node().appendChild(startLabelElement); - const slBox = startLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].startRight = startEdgeLabelRight; - setTerminalWidth(fo, edge.startLabelRight); - } - if (edge.endLabelLeft) { - const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); - const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); - const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(endLabelElement); - const slBox = endLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - endEdgeLabelLeft.node().appendChild(endLabelElement); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].endLeft = endEdgeLabelLeft; - setTerminalWidth(fo, edge.endLabelLeft); - } - if (edge.endLabelRight) { - const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); - const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); - const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(endLabelElement); - const slBox = endLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - endEdgeLabelRight.node().appendChild(endLabelElement); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].endRight = endEdgeLabelRight; - setTerminalWidth(fo, edge.endLabelRight); - } - return labelElement; -}; -function setTerminalWidth(fo, value) { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { - fo.style.width = value.length * 9 + "px"; - fo.style.height = "12px"; - } -} -const positionEdgeLabel = (edge, paths) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); - let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); - if (edge.label) { - const el = edgeLabels[edge.id]; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( - "Moving label " + edge.label + " from (", - x, - ",", - y, - ") to (", - pos.x, - ",", - pos.y, - ") abc88" - ); - if (paths.updatedPath) { - x = pos.x; - y = pos.y; - } - } - el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); - } - if (edge.startLabelLeft) { - const el = terminalLabels[edge.id].startLeft; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.startLabelRight) { - const el = terminalLabels[edge.id].startRight; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( - edge.arrowTypeStart ? 10 : 0, - "start_right", - path - ); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.endLabelLeft) { - const el = terminalLabels[edge.id].endLeft; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.endLabelRight) { - const el = terminalLabels[edge.id].endRight; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } -}; -const outsideNode = (node, point2) => { - const x = node.x; - const y = node.y; - const dx = Math.abs(point2.x - x); - const dy = Math.abs(point2.y - y); - const w = node.width / 2; - const h = node.height / 2; - if (dx >= w || dy >= h) { - return true; - } - return false; -}; -const intersection = (node, outsidePoint, insidePoint) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: - outsidePoint: ${JSON.stringify(outsidePoint)} - insidePoint : ${JSON.stringify(insidePoint)} - node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); - const x = node.x; - const y = node.y; - const dx = Math.abs(x - insidePoint.x); - const w = node.width / 2; - let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; - const h = node.height / 2; - const Q = Math.abs(outsidePoint.y - insidePoint.y); - const R = Math.abs(outsidePoint.x - insidePoint.x); - if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { - let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; - r = R * q / Q; - const res = { - x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, - y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q - }; - if (r === 0) { - res.x = outsidePoint.x; - res.y = outsidePoint.y; - } - if (R === 0) { - res.x = outsidePoint.x; - } - if (Q === 0) { - res.y = outsidePoint.y; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); - return res; - } else { - if (insidePoint.x < outsidePoint.x) { - r = outsidePoint.x - w - x; - } else { - r = x - w - outsidePoint.x; - } - let q = Q * r / R; - let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; - let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); - if (r === 0) { - _x = outsidePoint.x; - _y = outsidePoint.y; - } - if (R === 0) { - _x = outsidePoint.x; - } - if (Q === 0) { - _y = outsidePoint.y; - } - return { x: _x, y: _y }; - } -}; -const cutPathAtIntersect = (_points, boundaryNode) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundaryNode); - let points = []; - let lastPointOutside = _points[0]; - let isInside = false; - _points.forEach((point2) => { - if (!outsideNode(boundaryNode, point2) && !isInside) { - const inter = intersection(boundaryNode, lastPointOutside, point2); - let pointPresent = false; - points.forEach((p) => { - pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; - }); - if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { - points.push(inter); - } - isInside = true; - } else { - lastPointOutside = point2; - if (!isInside) { - points.push(point2); - } - } - }); - return points; -}; -const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { - let points = edge.points; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); - let pointsHasChanged = false; - const tail = graph.node(e.v); - var head = graph.node(e.w); - if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { - points = points.slice(1, edge.points.length - 1); - points.unshift(tail.intersect(points[0])); - points.push(head.intersect(points[points.length - 1])); - } - if (edge.toCluster) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); - points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); - pointsHasChanged = true; - } - if (edge.fromCluster) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); - points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); - pointsHasChanged = true; - } - const lineData = points.filter((p) => !Number.isNaN(p.y)); - let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .qrM; - if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { - curve = edge.curve; - } - const { x, y } = getLineFunctionsWithOffset(edge); - const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(x).y(y).curve(curve); - let strokeClasses; - switch (edge.thickness) { - case "normal": - strokeClasses = "edge-thickness-normal"; - break; - case "thick": - strokeClasses = "edge-thickness-thick"; - break; - case "invisible": - strokeClasses = "edge-thickness-thick"; - break; - default: - strokeClasses = ""; - } - switch (edge.pattern) { - case "solid": - strokeClasses += " edge-pattern-solid"; - break; - case "dotted": - strokeClasses += " edge-pattern-dotted"; - break; - case "dashed": - strokeClasses += " edge-pattern-dashed"; - break; - } - const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); - let url = ""; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { - url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; - url = url.replace(/\(/g, "\\("); - url = url.replace(/\)/g, "\\)"); - } - addEdgeMarkers(svgPath, edge, url, id, diagramType); - let paths = {}; - if (pointsHasChanged) { - paths.updatedPath = points; - } - paths.originalPath = edge.points; - return paths; -}; - - - -/***/ }), - -/***/ 35364: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ r: () => (/* binding */ render) -/* harmony export */ }); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(21176); -/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14075); -/* harmony import */ var _edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(98055); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(697); -/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(18897); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(26312); - - - - - - - -let clusterDb = {}; -let descendants = {}; -let parents = {}; -const clear$1 = () => { - descendants = {}; - parents = {}; - clusterDb = {}; -}; -const isDescendant = (id, ancestorId) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDescendant", ancestorId, " ", id, " = ", descendants[ancestorId].includes(id)); - if (descendants[ancestorId].includes(id)) { - return true; - } - return false; -}; -const edgeInCluster = (edge, clusterId) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Descendants of ", clusterId, " is ", descendants[clusterId]); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); - if (edge.v === clusterId) { - return false; - } - if (edge.w === clusterId) { - return false; - } - if (!descendants[clusterId]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in descendants"); - return false; - } - return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); -}; -const copy = (clusterId, graph, newGraph, rootId) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Copying children of ", - clusterId, - "root", - rootId, - "data", - graph.node(clusterId), - rootId - ); - const nodes = graph.children(clusterId) || []; - if (clusterId !== rootId) { - nodes.push(clusterId); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); - nodes.forEach((node) => { - if (graph.children(node).length > 0) { - copy(node, graph, newGraph, rootId); - } else { - const data = graph.node(node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); - newGraph.setNode(node, data); - if (rootId !== graph.parent(node)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); - newGraph.setParent(node, graph.parent(node)); - } - if (clusterId !== rootId && node !== clusterId) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); - newGraph.setParent(node, clusterId); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( - "Not Setting parent for node=", - node, - "cluster!==rootId", - clusterId !== rootId, - "node!==clusterId", - node !== clusterId - ); - } - const edges = graph.edges(node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); - edges.forEach((edge) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); - const data2 = graph.edge(edge.v, edge.w, edge.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); - try { - if (edgeInCluster(edge, rootId)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); - newGraph.setEdge(edge.v, edge.w, data2, edge.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info( - "Skipping copy of edge ", - edge.v, - "-->", - edge.w, - " rootId: ", - rootId, - " clusterId:", - clusterId - ); - } - } catch (e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); - } - }); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); - graph.removeNode(node); - }); -}; -const extractDescendants = (id, graph) => { - const children = graph.children(id); - let res = [...children]; - for (const child of children) { - parents[child] = id; - res = [...res, ...extractDescendants(child, graph)]; - } - return res; -}; -const findNonClusterChild = (id, graph) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); - const children = graph.children(id); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); - if (children.length < 1) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); - return id; - } - for (const child of children) { - const _id = findNonClusterChild(child, graph); - if (_id) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); - return _id; - } - } -}; -const getAnchorId = (id) => { - if (!clusterDb[id]) { - return id; - } - if (!clusterDb[id].externalConnections) { - return id; - } - if (clusterDb[id]) { - return clusterDb[id].id; - } - return id; -}; -const adjustClustersAndEdges = (graph, depth) => { - if (!graph || depth > 10) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); - return; - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); - } - graph.nodes().forEach(function(id) { - const children = graph.children(id); - if (children.length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Cluster identified", - id, - " Replacement id in edges: ", - findNonClusterChild(id, graph) - ); - descendants[id] = extractDescendants(id, graph); - clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; - } - }); - graph.nodes().forEach(function(id) { - const children = graph.children(id); - const edges = graph.edges(); - if (children.length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); - edges.forEach((edge) => { - if (edge.v !== id && edge.w !== id) { - const d1 = isDescendant(edge.v, id); - const d2 = isDescendant(edge.w, id); - if (d1 ^ d2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Descendants of XXX ", id, ": ", descendants[id]); - clusterDb[id].externalConnections = true; - } - } - }); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); - } - }); - for (let id of Object.keys(clusterDb)) { - const nonClusterChild = clusterDb[id].id; - const parent = graph.parent(nonClusterChild); - if (parent !== id && clusterDb[parent] && !clusterDb[parent].externalConnections) { - clusterDb[id].id = parent; - } - } - graph.edges().forEach(function(e) { - const edge = graph.edge(e); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); - let v = e.v; - let w = e.w; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Fix XXX", - clusterDb, - "ids:", - e.v, - e.w, - "Translating: ", - clusterDb[e.v], - " --- ", - clusterDb[e.w] - ); - if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); - v = getAnchorId(e.v); - w = getAnchorId(e.w); - graph.removeEdge(e.v, e.w, e.name); - const specialId = e.w + "---" + e.v; - graph.setNode(specialId, { - domId: specialId, - id: specialId, - labelStyle: "", - labelText: edge.label, - padding: 0, - shape: "labelRect", - style: "" - }); - const edge1 = structuredClone(edge); - const edge2 = structuredClone(edge); - edge1.label = ""; - edge1.arrowTypeEnd = "none"; - edge2.label = ""; - edge1.fromCluster = e.v; - edge2.toCluster = e.v; - graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); - graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); - } else if (clusterDb[e.v] || clusterDb[e.w]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); - v = getAnchorId(e.v); - w = getAnchorId(e.w); - graph.removeEdge(e.v, e.w, e.name); - if (v !== e.v) { - const parent = graph.parent(v); - clusterDb[parent].externalConnections = true; - edge.fromCluster = e.v; - } - if (w !== e.w) { - const parent = graph.parent(w); - clusterDb[parent].externalConnections = true; - edge.toCluster = e.w; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); - graph.setEdge(v, w, edge, e.name); - } - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - extractor(graph, 0); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); -}; -const extractor = (graph, depth) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph), graph.children("D")); - if (depth > 10) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); - return; - } - let nodes = graph.nodes(); - let hasChildren = false; - for (const node of nodes) { - const children = graph.children(node); - hasChildren = hasChildren || children.length > 0; - } - if (!hasChildren) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); - return; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); - for (const node of nodes) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( - "Extracting node", - node, - clusterDb, - clusterDb[node] && !clusterDb[node].externalConnections, - !graph.parent(node), - graph.node(node), - graph.children("D"), - " Depth ", - depth - ); - if (!clusterDb[node]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); - } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && - graph.children(node) && graph.children(node).length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Cluster without external connections, without a parent and with children", - node, - depth - ); - const graphSettings = graph.graph(); - let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; - if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { - dir = clusterDb[node].clusterData.dir; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); - } - const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .T({ - multigraph: true, - compound: true - }).setGraph({ - rankdir: dir, - // Todo: set proper spacing - nodesep: 50, - ranksep: 50, - marginx: 8, - marginy: 8 - }).setDefaultEdgeLabel(function() { - return {}; - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - copy(node, graph, clusterGraph, node); - graph.setNode(node, { - clusterNode: true, - id: node, - clusterData: clusterDb[node].clusterData, - labelText: clusterDb[node].labelText, - graph: clusterGraph - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(clusterGraph)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Cluster ** ", - node, - " **not meeting the criteria !externalConnections:", - !clusterDb[node].externalConnections, - " no parent: ", - !graph.parent(node), - " children ", - graph.children(node) && graph.children(node).length > 0, - graph.children("D"), - depth - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); - } - } - nodes = graph.nodes(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); - for (const node of nodes) { - const data = graph.node(node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); - if (data.clusterNode) { - extractor(data.graph, depth + 1); - } - } -}; -const sorter = (graph, nodes) => { - if (nodes.length === 0) { - return []; - } - let result = Object.assign(nodes); - nodes.forEach((node) => { - const children = graph.children(node); - const sorted = sorter(graph, children); - result = [...result, ...sorted]; - }); - return result; -}; -const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); -const rect = (parent, node) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels); - const label = shapeSvg.insert("g").attr("class", "cluster-label"); - const text = node.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); - let bbox = text.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - const padding = 0 * node.padding; - const halfPadding = padding / 2; - const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; - if (node.width <= bbox.width + padding) { - node.diff = (bbox.width - node.width) / 2 - node.padding / 2; - } else { - node.diff = -node.padding / 2; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); - rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); - const { subGraphTitleTopMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); - if (useHtmlLabels) { - label.attr( - "transform", - // This puts the label on top of the box instead of inside it - `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` - ); - } else { - label.attr( - "transform", - // This puts the label on top of the box instead of inside it - `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` - ); - } - const rectBox = rect2.node().getBBox(); - node.width = rectBox.width; - node.height = rectBox.height; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const noteGroup = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const padding = 0 * node.padding; - const halfPadding = padding / 2; - rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); - const rectBox = rect2.node().getBBox(); - node.width = rectBox.width; - node.height = rectBox.height; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const roundedWithTitle = (parent, node) => { - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const label = shapeSvg.insert("g").attr("class", "cluster-label"); - const innerRect = shapeSvg.append("rect"); - const text = label.node().appendChild((0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); - let bbox = text.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - bbox = text.getBBox(); - const padding = 0 * node.padding; - const halfPadding = padding / 2; - const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; - if (node.width <= bbox.width + node.padding) { - node.diff = (bbox.width + node.padding * 0 - node.width) / 2; - } else { - node.diff = -node.padding / 2; - } - rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); - innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); - const { subGraphTitleTopMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); - label.attr( - "transform", - `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels) ? 5 : 3) + subGraphTitleTopMargin})` - ); - const rectBox = rect2.node().getBBox(); - node.height = rectBox.height; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const divider = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const padding = 0 * node.padding; - const halfPadding = padding / 2; - rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); - const rectBox = rect2.node().getBBox(); - node.width = rectBox.width; - node.height = rectBox.height; - node.diff = -node.padding / 2; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const shapes = { rect, roundedWithTitle, noteGroup, divider }; -let clusterElems = {}; -const insertCluster = (elem, node) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); - const shape = node.shape || "rect"; - clusterElems[node.id] = shapes[shape](elem, node); -}; -const clear = () => { - clusterElems = {}; -}; -const recursiveRender = async (_elem, graph, diagramType, id, parentCluster, siteConfig) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph), parentCluster); - const dir = graph.graph().rankdir; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); - const elem = _elem.insert("g").attr("class", "root"); - if (!graph.nodes()) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); - } - if (graph.edges().length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); - } - const clusters = elem.insert("g").attr("class", "clusters"); - const edgePaths = elem.insert("g").attr("class", "edgePaths"); - const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); - const nodes = elem.insert("g").attr("class", "nodes"); - await Promise.all( - graph.nodes().map(async function(v) { - const node = graph.node(v); - if (parentCluster !== void 0) { - const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); - graph.setNode(parentCluster.id, data); - if (!graph.parent(v)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); - graph.setParent(v, parentCluster.id, data); - } - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); - if (node && node.clusterNode) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); - const o = await recursiveRender( - nodes, - node.graph, - diagramType, - id, - graph.node(v), - siteConfig - ); - const newEl = o.elem; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); - node.diff = o.diff || 0; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); - } else { - if (graph.children(v).length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); - clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); - await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); - } - } - }) - ); - graph.edges().forEach(function(e) { - const edge = graph.edge(e.v, e.w, e.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translating: ", clusterDb[e.v], clusterDb[e.w]); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); - }); - graph.edges().forEach(function(e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); - (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .Zp)(graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - let diff = 0; - const { subGraphTitleTotalMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); - sortNodesByHierarchy(graph).forEach(function(v) { - const node = graph.node(v); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info( - "Position " + v + ": (" + node.x, - "," + node.y, - ") width: ", - node.width, - " height: ", - node.height - ); - if (node && node.clusterNode) { - node.y += subGraphTitleTotalMargin; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); - } else { - if (graph.children(v).length > 0) { - node.height += subGraphTitleTotalMargin; - insertCluster(clusters, node); - clusterDb[node.id].node = node; - } else { - node.y += subGraphTitleTotalMargin / 2; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); - } - } - }); - graph.edges().forEach(function(e) { - const edge = graph.edge(e); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); - edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2); - const paths = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.h)(edgePaths, e, edge, clusterDb, diagramType, graph, id); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.j)(edge, paths); - }); - graph.nodes().forEach(function(v) { - const n = graph.node(v); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); - if (n.type === "group") { - diff = n.diff; - } - }); - return { elem, diff }; -}; -const render = async (elem, graph, markers, diagramType, id) => { - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramType, id); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.b)(); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.d)(); - clear(); - clear$1(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph))); - adjustClustersAndEdges(graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph))); - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - await recursiveRender(elem, graph, diagramType, id, void 0, siteConfig); -}; - - - -/***/ }), - -/***/ 63626: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ d: () => (/* binding */ db), -/* harmony export */ p: () => (/* binding */ parser$1), -/* harmony export */ s: () => (/* binding */ styles) -/* harmony export */ }); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 17], $V1 = [1, 18], $V2 = [1, 19], $V3 = [1, 39], $V4 = [1, 40], $V5 = [1, 25], $V6 = [1, 23], $V7 = [1, 24], $V8 = [1, 31], $V9 = [1, 32], $Va = [1, 33], $Vb = [1, 34], $Vc = [1, 35], $Vd = [1, 36], $Ve = [1, 26], $Vf = [1, 27], $Vg = [1, 28], $Vh = [1, 29], $Vi = [1, 43], $Vj = [1, 30], $Vk = [1, 42], $Vl = [1, 44], $Vm = [1, 41], $Vn = [1, 45], $Vo = [1, 9], $Vp = [1, 8, 9], $Vq = [1, 56], $Vr = [1, 57], $Vs = [1, 58], $Vt = [1, 59], $Vu = [1, 60], $Vv = [1, 61], $Vw = [1, 62], $Vx = [1, 8, 9, 39], $Vy = [1, 74], $Vz = [1, 8, 9, 12, 13, 21, 37, 39, 42, 59, 60, 61, 62, 63, 64, 65, 70, 72], $VA = [1, 8, 9, 12, 13, 19, 21, 37, 39, 42, 46, 59, 60, 61, 62, 63, 64, 65, 70, 72, 74, 80, 95, 97, 98], $VB = [13, 74, 80, 95, 97, 98], $VC = [13, 64, 65, 74, 80, 95, 97, 98], $VD = [13, 59, 60, 61, 62, 63, 74, 80, 95, 97, 98], $VE = [1, 93], $VF = [1, 110], $VG = [1, 108], $VH = [1, 102], $VI = [1, 103], $VJ = [1, 104], $VK = [1, 105], $VL = [1, 106], $VM = [1, 107], $VN = [1, 109], $VO = [1, 8, 9, 37, 39, 42], $VP = [1, 8, 9, 21], $VQ = [1, 8, 9, 78], $VR = [1, 8, 9, 21, 73, 74, 78, 80, 81, 82, 83, 84, 85]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "statements": 5, "graphConfig": 6, "CLASS_DIAGRAM": 7, "NEWLINE": 8, "EOF": 9, "statement": 10, "classLabel": 11, "SQS": 12, "STR": 13, "SQE": 14, "namespaceName": 15, "alphaNumToken": 16, "className": 17, "classLiteralName": 18, "GENERICTYPE": 19, "relationStatement": 20, "LABEL": 21, "namespaceStatement": 22, "classStatement": 23, "memberStatement": 24, "annotationStatement": 25, "clickStatement": 26, "styleStatement": 27, "cssClassStatement": 28, "noteStatement": 29, "direction": 30, "acc_title": 31, "acc_title_value": 32, "acc_descr": 33, "acc_descr_value": 34, "acc_descr_multiline_value": 35, "namespaceIdentifier": 36, "STRUCT_START": 37, "classStatements": 38, "STRUCT_STOP": 39, "NAMESPACE": 40, "classIdentifier": 41, "STYLE_SEPARATOR": 42, "members": 43, "CLASS": 44, "ANNOTATION_START": 45, "ANNOTATION_END": 46, "MEMBER": 47, "SEPARATOR": 48, "relation": 49, "NOTE_FOR": 50, "noteText": 51, "NOTE": 52, "direction_tb": 53, "direction_bt": 54, "direction_rl": 55, "direction_lr": 56, "relationType": 57, "lineType": 58, "AGGREGATION": 59, "EXTENSION": 60, "COMPOSITION": 61, "DEPENDENCY": 62, "LOLLIPOP": 63, "LINE": 64, "DOTTED_LINE": 65, "CALLBACK": 66, "LINK": 67, "LINK_TARGET": 68, "CLICK": 69, "CALLBACK_NAME": 70, "CALLBACK_ARGS": 71, "HREF": 72, "STYLE": 73, "ALPHA": 74, "stylesOpt": 75, "CSSCLASS": 76, "style": 77, "COMMA": 78, "styleComponent": 79, "NUM": 80, "COLON": 81, "UNIT": 82, "SPACE": 83, "BRKT": 84, "PCT": 85, "commentToken": 86, "textToken": 87, "graphCodeTokens": 88, "textNoTagsToken": 89, "TAGSTART": 90, "TAGEND": 91, "==": 92, "--": 93, "DEFAULT": 94, "MINUS": 95, "keywords": 96, "UNICODE_TEXT": 97, "BQUOTE_STR": 98, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 7: "CLASS_DIAGRAM", 8: "NEWLINE", 9: "EOF", 12: "SQS", 13: "STR", 14: "SQE", 19: "GENERICTYPE", 21: "LABEL", 31: "acc_title", 32: "acc_title_value", 33: "acc_descr", 34: "acc_descr_value", 35: "acc_descr_multiline_value", 37: "STRUCT_START", 39: "STRUCT_STOP", 40: "NAMESPACE", 42: "STYLE_SEPARATOR", 44: "CLASS", 45: "ANNOTATION_START", 46: "ANNOTATION_END", 47: "MEMBER", 48: "SEPARATOR", 50: "NOTE_FOR", 52: "NOTE", 53: "direction_tb", 54: "direction_bt", 55: "direction_rl", 56: "direction_lr", 59: "AGGREGATION", 60: "EXTENSION", 61: "COMPOSITION", 62: "DEPENDENCY", 63: "LOLLIPOP", 64: "LINE", 65: "DOTTED_LINE", 66: "CALLBACK", 67: "LINK", 68: "LINK_TARGET", 69: "CLICK", 70: "CALLBACK_NAME", 71: "CALLBACK_ARGS", 72: "HREF", 73: "STYLE", 74: "ALPHA", 76: "CSSCLASS", 78: "COMMA", 80: "NUM", 81: "COLON", 82: "UNIT", 83: "SPACE", 84: "BRKT", 85: "PCT", 88: "graphCodeTokens", 90: "TAGSTART", 91: "TAGEND", 92: "==", 93: "--", 94: "DEFAULT", 95: "MINUS", 96: "keywords", 97: "UNICODE_TEXT", 98: "BQUOTE_STR" }, - productions_: [0, [3, 1], [3, 1], [4, 1], [6, 4], [5, 1], [5, 2], [5, 3], [11, 3], [15, 1], [15, 2], [17, 1], [17, 1], [17, 2], [17, 2], [17, 2], [10, 1], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [22, 4], [22, 5], [36, 2], [38, 1], [38, 2], [38, 3], [23, 1], [23, 3], [23, 4], [23, 6], [41, 2], [41, 3], [25, 4], [43, 1], [43, 2], [24, 1], [24, 2], [24, 1], [24, 1], [20, 3], [20, 4], [20, 4], [20, 5], [29, 3], [29, 2], [30, 1], [30, 1], [30, 1], [30, 1], [49, 3], [49, 2], [49, 2], [49, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [58, 1], [58, 1], [26, 3], [26, 4], [26, 3], [26, 4], [26, 4], [26, 5], [26, 3], [26, 4], [26, 4], [26, 5], [26, 4], [26, 5], [26, 5], [26, 6], [27, 3], [28, 3], [75, 1], [75, 3], [77, 1], [77, 2], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [86, 1], [86, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [89, 1], [89, 1], [89, 1], [89, 1], [16, 1], [16, 1], [16, 1], [16, 1], [18, 1], [51, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 8: - this.$ = $$[$0 - 1]; - break; - case 9: - case 11: - case 12: - this.$ = $$[$0]; - break; - case 10: - case 13: - this.$ = $$[$0 - 1] + $$[$0]; - break; - case 14: - case 15: - this.$ = $$[$0 - 1] + "~" + $$[$0] + "~"; - break; - case 16: - yy.addRelation($$[$0]); - break; - case 17: - $$[$0 - 1].title = yy.cleanupLabel($$[$0]); - yy.addRelation($$[$0 - 1]); - break; - case 27: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 28: - case 29: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 30: - yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]); - break; - case 31: - yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]); - break; - case 32: - this.$ = $$[$0]; - yy.addNamespace($$[$0]); - break; - case 33: - this.$ = [$$[$0]]; - break; - case 34: - this.$ = [$$[$0 - 1]]; - break; - case 35: - $$[$0].unshift($$[$0 - 2]); - this.$ = $$[$0]; - break; - case 37: - yy.setCssClass($$[$0 - 2], $$[$0]); - break; - case 38: - yy.addMembers($$[$0 - 3], $$[$0 - 1]); - break; - case 39: - yy.setCssClass($$[$0 - 5], $$[$0 - 3]); - yy.addMembers($$[$0 - 5], $$[$0 - 1]); - break; - case 40: - this.$ = $$[$0]; - yy.addClass($$[$0]); - break; - case 41: - this.$ = $$[$0 - 1]; - yy.addClass($$[$0 - 1]); - yy.setClassLabel($$[$0 - 1], $$[$0]); - break; - case 42: - yy.addAnnotation($$[$0], $$[$0 - 2]); - break; - case 43: - this.$ = [$$[$0]]; - break; - case 44: - $$[$0].push($$[$0 - 1]); - this.$ = $$[$0]; - break; - case 45: - break; - case 46: - yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); - break; - case 47: - break; - case 48: - break; - case 49: - this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" }; - break; - case 50: - this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" }; - break; - case 51: - this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] }; - break; - case 52: - this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] }; - break; - case 53: - yy.addNote($$[$0], $$[$0 - 1]); - break; - case 54: - yy.addNote($$[$0]); - break; - case 55: - yy.setDirection("TB"); - break; - case 56: - yy.setDirection("BT"); - break; - case 57: - yy.setDirection("RL"); - break; - case 58: - yy.setDirection("LR"); - break; - case 59: - this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] }; - break; - case 60: - this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] }; - break; - case 61: - this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] }; - break; - case 62: - this.$ = { type1: "none", type2: "none", lineType: $$[$0] }; - break; - case 63: - this.$ = yy.relationType.AGGREGATION; - break; - case 64: - this.$ = yy.relationType.EXTENSION; - break; - case 65: - this.$ = yy.relationType.COMPOSITION; - break; - case 66: - this.$ = yy.relationType.DEPENDENCY; - break; - case 67: - this.$ = yy.relationType.LOLLIPOP; - break; - case 68: - this.$ = yy.lineType.LINE; - break; - case 69: - this.$ = yy.lineType.DOTTED_LINE; - break; - case 70: - case 76: - this.$ = $$[$0 - 2]; - yy.setClickEvent($$[$0 - 1], $$[$0]); - break; - case 71: - case 77: - this.$ = $$[$0 - 3]; - yy.setClickEvent($$[$0 - 2], $$[$0 - 1]); - yy.setTooltip($$[$0 - 2], $$[$0]); - break; - case 72: - this.$ = $$[$0 - 2]; - yy.setLink($$[$0 - 1], $$[$0]); - break; - case 73: - this.$ = $$[$0 - 3]; - yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); - break; - case 74: - this.$ = $$[$0 - 3]; - yy.setLink($$[$0 - 2], $$[$0 - 1]); - yy.setTooltip($$[$0 - 2], $$[$0]); - break; - case 75: - this.$ = $$[$0 - 4]; - yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); - yy.setTooltip($$[$0 - 3], $$[$0 - 1]); - break; - case 78: - this.$ = $$[$0 - 3]; - yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); - break; - case 79: - this.$ = $$[$0 - 4]; - yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); - yy.setTooltip($$[$0 - 3], $$[$0]); - break; - case 80: - this.$ = $$[$0 - 3]; - yy.setLink($$[$0 - 2], $$[$0]); - break; - case 81: - this.$ = $$[$0 - 4]; - yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]); - break; - case 82: - this.$ = $$[$0 - 4]; - yy.setLink($$[$0 - 3], $$[$0 - 1]); - yy.setTooltip($$[$0 - 3], $$[$0]); - break; - case 83: - this.$ = $$[$0 - 5]; - yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); - yy.setTooltip($$[$0 - 4], $$[$0 - 1]); - break; - case 84: - this.$ = $$[$0 - 2]; - yy.setCssStyle($$[$0 - 1], $$[$0]); - break; - case 85: - yy.setCssClass($$[$0 - 1], $$[$0]); - break; - case 86: - this.$ = [$$[$0]]; - break; - case 87: - $$[$0 - 2].push($$[$0]); - this.$ = $$[$0 - 2]; - break; - case 89: - this.$ = $$[$0 - 1] + $$[$0]; - break; - } - }, - table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: [1, 6], 10: 5, 16: 37, 17: 20, 18: 38, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 31: $V0, 33: $V1, 35: $V2, 36: 21, 40: $V3, 41: 22, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, o($Vo, [2, 5], { 8: [1, 46] }), { 8: [1, 47] }, o($Vp, [2, 16], { 21: [1, 48] }), o($Vp, [2, 18]), o($Vp, [2, 19]), o($Vp, [2, 20]), o($Vp, [2, 21]), o($Vp, [2, 22]), o($Vp, [2, 23]), o($Vp, [2, 24]), o($Vp, [2, 25]), o($Vp, [2, 26]), { 32: [1, 49] }, { 34: [1, 50] }, o($Vp, [2, 29]), o($Vp, [2, 45], { 49: 51, 57: 54, 58: 55, 13: [1, 52], 21: [1, 53], 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw }), { 37: [1, 63] }, o($Vx, [2, 36], { 37: [1, 65], 42: [1, 64] }), o($Vp, [2, 47]), o($Vp, [2, 48]), { 16: 66, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 16: 37, 17: 67, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 16: 37, 17: 68, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 16: 37, 17: 69, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 74: [1, 70] }, { 13: [1, 71] }, { 16: 37, 17: 72, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 13: $Vy, 51: 73 }, o($Vp, [2, 55]), o($Vp, [2, 56]), o($Vp, [2, 57]), o($Vp, [2, 58]), o($Vz, [2, 11], { 16: 37, 18: 38, 17: 75, 19: [1, 76], 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }), o($Vz, [2, 12], { 19: [1, 77] }), { 15: 78, 16: 79, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 16: 37, 17: 80, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VA, [2, 112]), o($VA, [2, 113]), o($VA, [2, 114]), o($VA, [2, 115]), o([1, 8, 9, 12, 13, 19, 21, 37, 39, 42, 59, 60, 61, 62, 63, 64, 65, 70, 72], [2, 116]), o($Vo, [2, 6], { 10: 5, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 17: 20, 36: 21, 41: 22, 16: 37, 18: 38, 5: 81, 31: $V0, 33: $V1, 35: $V2, 40: $V3, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }), { 5: 82, 10: 5, 16: 37, 17: 20, 18: 38, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 31: $V0, 33: $V1, 35: $V2, 36: 21, 40: $V3, 41: 22, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($Vp, [2, 17]), o($Vp, [2, 27]), o($Vp, [2, 28]), { 13: [1, 84], 16: 37, 17: 83, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 49: 85, 57: 54, 58: 55, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw }, o($Vp, [2, 46]), { 58: 86, 64: $Vv, 65: $Vw }, o($VB, [2, 62], { 57: 87, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu }), o($VC, [2, 63]), o($VC, [2, 64]), o($VC, [2, 65]), o($VC, [2, 66]), o($VC, [2, 67]), o($VD, [2, 68]), o($VD, [2, 69]), { 8: [1, 89], 23: 90, 38: 88, 41: 22, 44: $V4 }, { 16: 91, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 43: 92, 47: $VE }, { 46: [1, 94] }, { 13: [1, 95] }, { 13: [1, 96] }, { 70: [1, 97], 72: [1, 98] }, { 21: $VF, 73: $VG, 74: $VH, 75: 99, 77: 100, 79: 101, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }, { 74: [1, 111] }, { 13: $Vy, 51: 112 }, o($Vp, [2, 54]), o($Vp, [2, 117]), o($Vz, [2, 13]), o($Vz, [2, 14]), o($Vz, [2, 15]), { 37: [2, 32] }, { 15: 113, 16: 79, 37: [2, 9], 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, o($VO, [2, 40], { 11: 114, 12: [1, 115] }), o($Vo, [2, 7]), { 9: [1, 116] }, o($VP, [2, 49]), { 16: 37, 17: 117, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 13: [1, 119], 16: 37, 17: 118, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VB, [2, 61], { 57: 120, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu }), o($VB, [2, 60]), { 39: [1, 121] }, { 23: 90, 38: 122, 41: 22, 44: $V4 }, { 8: [1, 123], 39: [2, 33] }, o($Vx, [2, 37], { 37: [1, 124] }), { 39: [1, 125] }, { 39: [2, 43], 43: 126, 47: $VE }, { 16: 37, 17: 127, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($Vp, [2, 70], { 13: [1, 128] }), o($Vp, [2, 72], { 13: [1, 130], 68: [1, 129] }), o($Vp, [2, 76], { 13: [1, 131], 71: [1, 132] }), { 13: [1, 133] }, o($Vp, [2, 84], { 78: [1, 134] }), o($VQ, [2, 86], { 79: 135, 21: $VF, 73: $VG, 74: $VH, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }), o($VR, [2, 88]), o($VR, [2, 90]), o($VR, [2, 91]), o($VR, [2, 92]), o($VR, [2, 93]), o($VR, [2, 94]), o($VR, [2, 95]), o($VR, [2, 96]), o($VR, [2, 97]), o($VR, [2, 98]), o($Vp, [2, 85]), o($Vp, [2, 53]), { 37: [2, 10] }, o($VO, [2, 41]), { 13: [1, 136] }, { 1: [2, 4] }, o($VP, [2, 51]), o($VP, [2, 50]), { 16: 37, 17: 137, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VB, [2, 59]), o($Vp, [2, 30]), { 39: [1, 138] }, { 23: 90, 38: 139, 39: [2, 34], 41: 22, 44: $V4 }, { 43: 140, 47: $VE }, o($Vx, [2, 38]), { 39: [2, 44] }, o($Vp, [2, 42]), o($Vp, [2, 71]), o($Vp, [2, 73]), o($Vp, [2, 74], { 68: [1, 141] }), o($Vp, [2, 77]), o($Vp, [2, 78], { 13: [1, 142] }), o($Vp, [2, 80], { 13: [1, 144], 68: [1, 143] }), { 21: $VF, 73: $VG, 74: $VH, 77: 145, 79: 101, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }, o($VR, [2, 89]), { 14: [1, 146] }, o($VP, [2, 52]), o($Vp, [2, 31]), { 39: [2, 35] }, { 39: [1, 147] }, o($Vp, [2, 75]), o($Vp, [2, 79]), o($Vp, [2, 81]), o($Vp, [2, 82], { 68: [1, 148] }), o($VQ, [2, 87], { 79: 135, 21: $VF, 73: $VG, 74: $VH, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }), o($VO, [2, 8]), o($Vx, [2, 39]), o($Vp, [2, 83])], - defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 78: [2, 32], 113: [2, 10], 116: [2, 4], 126: [2, 44], 139: [2, 35] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: {}, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - return 53; - case 1: - return 54; - case 2: - return 55; - case 3: - return 56; - case 4: - break; - case 5: - break; - case 6: - this.begin("acc_title"); - return 31; - case 7: - this.popState(); - return "acc_title_value"; - case 8: - this.begin("acc_descr"); - return 33; - case 9: - this.popState(); - return "acc_descr_value"; - case 10: - this.begin("acc_descr_multiline"); - break; - case 11: - this.popState(); - break; - case 12: - return "acc_descr_multiline_value"; - case 13: - return 8; - case 14: - break; - case 15: - return 7; - case 16: - return 7; - case 17: - return "EDGE_STATE"; - case 18: - this.begin("callback_name"); - break; - case 19: - this.popState(); - break; - case 20: - this.popState(); - this.begin("callback_args"); - break; - case 21: - return 70; - case 22: - this.popState(); - break; - case 23: - return 71; - case 24: - this.popState(); - break; - case 25: - return "STR"; - case 26: - this.begin("string"); - break; - case 27: - return 73; - case 28: - this.begin("namespace"); - return 40; - case 29: - this.popState(); - return 8; - case 30: - break; - case 31: - this.begin("namespace-body"); - return 37; - case 32: - this.popState(); - return 39; - case 33: - return "EOF_IN_STRUCT"; - case 34: - return 8; - case 35: - break; - case 36: - return "EDGE_STATE"; - case 37: - this.begin("class"); - return 44; - case 38: - this.popState(); - return 8; - case 39: - break; - case 40: - this.popState(); - this.popState(); - return 39; - case 41: - this.begin("class-body"); - return 37; - case 42: - this.popState(); - return 39; - case 43: - return "EOF_IN_STRUCT"; - case 44: - return "EDGE_STATE"; - case 45: - return "OPEN_IN_STRUCT"; - case 46: - break; - case 47: - return "MEMBER"; - case 48: - return 76; - case 49: - return 66; - case 50: - return 67; - case 51: - return 69; - case 52: - return 50; - case 53: - return 52; - case 54: - return 45; - case 55: - return 46; - case 56: - return 72; - case 57: - this.popState(); - break; - case 58: - return "GENERICTYPE"; - case 59: - this.begin("generic"); - break; - case 60: - this.popState(); - break; - case 61: - return "BQUOTE_STR"; - case 62: - this.begin("bqstring"); - break; - case 63: - return 68; - case 64: - return 68; - case 65: - return 68; - case 66: - return 68; - case 67: - return 60; - case 68: - return 60; - case 69: - return 62; - case 70: - return 62; - case 71: - return 61; - case 72: - return 59; - case 73: - return 63; - case 74: - return 64; - case 75: - return 65; - case 76: - return 21; - case 77: - return 42; - case 78: - return 95; - case 79: - return "DOT"; - case 80: - return "PLUS"; - case 81: - return 81; - case 82: - return 78; - case 83: - return 84; - case 84: - return 84; - case 85: - return 85; - case 86: - return "EQUALS"; - case 87: - return "EQUALS"; - case 88: - return 74; - case 89: - return 12; - case 90: - return 14; - case 91: - return "PUNCTUATION"; - case 92: - return 80; - case 93: - return 97; - case 94: - return 83; - case 95: - return 83; - case 96: - return 9; - } - }, - rules: [/^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:classDiagram-v2\b)/, /^(?:classDiagram\b)/, /^(?:\[\*\])/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:["])/, /^(?:[^"]*)/, /^(?:["])/, /^(?:style\b)/, /^(?:namespace\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:\[\*\])/, /^(?:class\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\[\*\])/, /^(?:[{])/, /^(?:[\n])/, /^(?:[^{}\n]*)/, /^(?:cssClass\b)/, /^(?:callback\b)/, /^(?:link\b)/, /^(?:click\b)/, /^(?:note for\b)/, /^(?:note\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href\b)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:~)/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:\s*\(\))/, /^(?:--)/, /^(?:\.\.)/, /^(?::{1}[^:\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?::)/, /^(?:,)/, /^(?:#)/, /^(?:#)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\w+)/, /^(?:\[)/, /^(?:\])/, /^(?:[!"#$%&'*+,-.`?\\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:\s)/, /^(?:$)/], - conditions: { "namespace-body": { "rules": [26, 32, 33, 34, 35, 36, 37, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "namespace": { "rules": [26, 28, 29, 30, 31, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "class-body": { "rules": [26, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "class": { "rules": [26, 38, 39, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_descr": { "rules": [9, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_title": { "rules": [7, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "callback_args": { "rules": [22, 23, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "callback_name": { "rules": [19, 20, 21, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "href": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "struct": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "generic": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "bqstring": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "string": { "rules": [24, 25, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 26, 27, 28, 37, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -const visibilityValues = ["#", "+", "~", "-", ""]; -class ClassMember { - constructor(input, memberType) { - this.memberType = memberType; - this.visibility = ""; - this.classifier = ""; - const sanitizedInput = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)(input, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - this.parseMember(sanitizedInput); - } - getDisplayDetails() { - let displayText = this.visibility + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.x)(this.id); - if (this.memberType === "method") { - displayText += `(${(0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.x)(this.parameters.trim())})`; - if (this.returnType) { - displayText += " : " + (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.x)(this.returnType); - } - } - displayText = displayText.trim(); - const cssStyle = this.parseClassifier(); - return { - displayText, - cssStyle - }; - } - parseMember(input) { - let potentialClassifier = ""; - if (this.memberType === "method") { - const methodRegEx = /([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/; - const match = input.match(methodRegEx); - if (match) { - const detectedVisibility = match[1] ? match[1].trim() : ""; - if (visibilityValues.includes(detectedVisibility)) { - this.visibility = detectedVisibility; - } - this.id = match[2].trim(); - this.parameters = match[3] ? match[3].trim() : ""; - potentialClassifier = match[4] ? match[4].trim() : ""; - this.returnType = match[5] ? match[5].trim() : ""; - if (potentialClassifier === "") { - const lastChar = this.returnType.substring(this.returnType.length - 1); - if (lastChar.match(/[$*]/)) { - potentialClassifier = lastChar; - this.returnType = this.returnType.substring(0, this.returnType.length - 1); - } - } - } - } else { - const length = input.length; - const firstChar = input.substring(0, 1); - const lastChar = input.substring(length - 1); - if (visibilityValues.includes(firstChar)) { - this.visibility = firstChar; - } - if (lastChar.match(/[$*]/)) { - potentialClassifier = lastChar; - } - this.id = input.substring( - this.visibility === "" ? 0 : 1, - potentialClassifier === "" ? length : length - 1 - ); - } - this.classifier = potentialClassifier; - } - parseClassifier() { - switch (this.classifier) { - case "*": - return "font-style:italic;"; - case "$": - return "text-decoration:underline;"; - default: - return ""; - } - } -} -const MERMAID_DOM_ID_PREFIX = "classId-"; -let relations = []; -let classes = {}; -let notes = []; -let classCounter = 0; -let namespaces = {}; -let namespaceCounter = 0; -let functions = []; -const sanitizeText = (txt) => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); -const splitClassNameAndType = function(_id) { - const id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - let genericType = ""; - let className = id; - if (id.indexOf("~") > 0) { - const split = id.split("~"); - className = sanitizeText(split[0]); - genericType = sanitizeText(split[1]); - } - return { className, type: genericType }; -}; -const setClassLabel = function(_id, label) { - const id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - if (label) { - label = sanitizeText(label); - } - const { className } = splitClassNameAndType(id); - classes[className].label = label; -}; -const addClass = function(_id) { - const id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - const { className, type } = splitClassNameAndType(id); - if (Object.hasOwn(classes, className)) { - return; - } - const name = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(className, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - classes[name] = { - id: name, - type, - label: name, - cssClasses: [], - methods: [], - members: [], - annotations: [], - styles: [], - domId: MERMAID_DOM_ID_PREFIX + name + "-" + classCounter - }; - classCounter++; -}; -const lookUpDomId = function(_id) { - const id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - if (id in classes) { - return classes[id].domId; - } - throw new Error("Class not found: " + id); -}; -const clear = function() { - relations = []; - classes = {}; - notes = []; - functions = []; - functions.push(setupToolTips); - namespaces = {}; - namespaceCounter = 0; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.v)(); -}; -const getClass = function(id) { - return classes[id]; -}; -const getClasses = function() { - return classes; -}; -const getRelations = function() { - return relations; -}; -const getNotes = function() { - return notes; -}; -const addRelation = function(relation) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Adding relation: " + JSON.stringify(relation)); - addClass(relation.id1); - addClass(relation.id2); - relation.id1 = splitClassNameAndType(relation.id1).className; - relation.id2 = splitClassNameAndType(relation.id2).className; - relation.relationTitle1 = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle1.trim(), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - relation.relationTitle2 = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle2.trim(), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - relations.push(relation); -}; -const addAnnotation = function(className, annotation) { - const validatedClassName = splitClassNameAndType(className).className; - classes[validatedClassName].annotations.push(annotation); -}; -const addMember = function(className, member) { - addClass(className); - const validatedClassName = splitClassNameAndType(className).className; - const theClass = classes[validatedClassName]; - if (typeof member === "string") { - const memberString = member.trim(); - if (memberString.startsWith("<<") && memberString.endsWith(">>")) { - theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2))); - } else if (memberString.indexOf(")") > 0) { - theClass.methods.push(new ClassMember(memberString, "method")); - } else if (memberString) { - theClass.members.push(new ClassMember(memberString, "attribute")); - } - } -}; -const addMembers = function(className, members) { - if (Array.isArray(members)) { - members.reverse(); - members.forEach((member) => addMember(className, member)); - } -}; -const addNote = function(text, className) { - const note = { - id: `note${notes.length}`, - class: className, - text - }; - notes.push(note); -}; -const cleanupLabel = function(label) { - if (label.startsWith(":")) { - label = label.substring(1); - } - return sanitizeText(label.trim()); -}; -const setCssClass = function(ids, className) { - ids.split(",").forEach(function(_id) { - let id = _id; - if (_id[0].match(/\d/)) { - id = MERMAID_DOM_ID_PREFIX + id; - } - if (classes[id] !== void 0) { - classes[id].cssClasses.push(className); - } - }); -}; -const setTooltip = function(ids, tooltip) { - ids.split(",").forEach(function(id) { - if (tooltip !== void 0) { - classes[id].tooltip = sanitizeText(tooltip); - } - }); -}; -const getTooltip = function(id, namespace) { - if (namespace) { - return namespaces[namespace].classes[id].tooltip; - } - return classes[id].tooltip; -}; -const setLink = function(ids, linkStr, target) { - const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - ids.split(",").forEach(function(_id) { - let id = _id; - if (_id[0].match(/\d/)) { - id = MERMAID_DOM_ID_PREFIX + id; - } - if (classes[id] !== void 0) { - classes[id].link = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); - if (config.securityLevel === "sandbox") { - classes[id].linkTarget = "_top"; - } else if (typeof target === "string") { - classes[id].linkTarget = sanitizeText(target); - } else { - classes[id].linkTarget = "_blank"; - } - } - }); - setCssClass(ids, "clickable"); -}; -const setClickEvent = function(ids, functionName, functionArgs) { - ids.split(",").forEach(function(id) { - setClickFunc(id, functionName, functionArgs); - classes[id].haveCallback = true; - }); - setCssClass(ids, "clickable"); -}; -const setClickFunc = function(_domId, functionName, functionArgs) { - const domId = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_domId, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()); - const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - if (config.securityLevel !== "loose") { - return; - } - if (functionName === void 0) { - return; - } - const id = domId; - if (classes[id] !== void 0) { - const elemId = lookUpDomId(id); - let argList = []; - if (typeof functionArgs === "string") { - argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); - for (let i = 0; i < argList.length; i++) { - let item = argList[i].trim(); - if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { - item = item.substr(1, item.length - 2); - } - argList[i] = item; - } - } - if (argList.length === 0) { - argList.push(elemId); - } - functions.push(function() { - const elem = document.querySelector(`[id="${elemId}"]`); - if (elem !== null) { - elem.addEventListener( - "click", - function() { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); - }, - false - ); - } - }); - } -}; -const bindFunctions = function(element) { - functions.forEach(function(fun) { - fun(element); - }); -}; -const lineType = { - LINE: 0, - DOTTED_LINE: 1 -}; -const relationType = { - AGGREGATION: 0, - EXTENSION: 1, - COMPOSITION: 2, - DEPENDENCY: 3, - LOLLIPOP: 4 -}; -const setupToolTips = function(element) { - let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(".mermaidTooltip"); - if ((tooltipElem._groups || tooltipElem)[0][0] === null) { - tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); - } - const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(element).select("svg"); - const nodes = svg.selectAll("g.node"); - nodes.on("mouseover", function() { - const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); - const title = el.attr("title"); - if (title === null) { - return; - } - const rect = this.getBoundingClientRect(); - tooltipElem.transition().duration(200).style("opacity", ".9"); - tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); - tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); - el.classed("hover", true); - }).on("mouseout", function() { - tooltipElem.transition().duration(500).style("opacity", 0); - const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); - el.classed("hover", false); - }); -}; -functions.push(setupToolTips); -let direction = "TB"; -const getDirection = () => direction; -const setDirection = (dir) => { - direction = dir; -}; -const addNamespace = function(id) { - if (namespaces[id] !== void 0) { - return; - } - namespaces[id] = { - id, - classes: {}, - children: {}, - domId: MERMAID_DOM_ID_PREFIX + id + "-" + namespaceCounter - }; - namespaceCounter++; -}; -const getNamespace = function(name) { - return namespaces[name]; -}; -const getNamespaces = function() { - return namespaces; -}; -const addClassesToNamespace = function(id, classNames) { - if (namespaces[id] === void 0) { - return; - } - for (const name of classNames) { - const { className } = splitClassNameAndType(name); - classes[className].parent = id; - namespaces[id].classes[className] = classes[className]; - } -}; -const setCssStyle = function(id, styles2) { - const thisClass = classes[id]; - if (!styles2 || !thisClass) { - return; - } - for (const s of styles2) { - if (s.includes(",")) { - thisClass.styles.push(...s.split(",")); - } else { - thisClass.styles.push(s); - } - } -}; -const db = { - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.g, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.a, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.b, - getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().class, - addClass, - bindFunctions, - clear, - getClass, - getClasses, - getNotes, - addAnnotation, - addNote, - getRelations, - addRelation, - getDirection, - setDirection, - addMember, - addMembers, - cleanupLabel, - lineType, - relationType, - setClickEvent, - setCssClass, - setLink, - getTooltip, - setTooltip, - lookUpDomId, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.t, - setClassLabel, - addNamespace, - addClassesToNamespace, - getNamespace, - getNamespaces, - setCssStyle -}; -const getStyles = (options) => `g.classGroup text { - fill: ${options.nodeBorder || options.classText}; - stroke: none; - font-family: ${options.fontFamily}; - font-size: 10px; - - .title { - font-weight: bolder; - } - -} - -.nodeLabel, .edgeLabel { - color: ${options.classText}; -} -.edgeLabel .label rect { - fill: ${options.mainBkg}; -} -.label text { - fill: ${options.classText}; -} -.edgeLabel .label span { - background: ${options.mainBkg}; -} - -.classTitle { - font-weight: bolder; -} -.node rect, - .node circle, - .node ellipse, - .node polygon, - .node path { - fill: ${options.mainBkg}; - stroke: ${options.nodeBorder}; - stroke-width: 1px; - } - - -.divider { - stroke: ${options.nodeBorder}; - stroke-width: 1; -} - -g.clickable { - cursor: pointer; -} - -g.classGroup rect { - fill: ${options.mainBkg}; - stroke: ${options.nodeBorder}; -} - -g.classGroup line { - stroke: ${options.nodeBorder}; - stroke-width: 1; -} - -.classLabel .box { - stroke: none; - stroke-width: 0; - fill: ${options.mainBkg}; - opacity: 0.5; -} - -.classLabel .label { - fill: ${options.nodeBorder}; - font-size: 10px; -} - -.relation { - stroke: ${options.lineColor}; - stroke-width: 1; - fill: none; -} - -.dashed-line{ - stroke-dasharray: 3; -} - -.dotted-line{ - stroke-dasharray: 1 2; -} - -#compositionStart, .composition { - fill: ${options.lineColor} !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#compositionEnd, .composition { - fill: ${options.lineColor} !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#dependencyStart, .dependency { - fill: ${options.lineColor} !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#dependencyStart, .dependency { - fill: ${options.lineColor} !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#extensionStart, .extension { - fill: transparent !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#extensionEnd, .extension { - fill: transparent !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#aggregationStart, .aggregation { - fill: transparent !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#aggregationEnd, .aggregation { - fill: transparent !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#lollipopStart, .lollipop { - fill: ${options.mainBkg} !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -#lollipopEnd, .lollipop { - fill: ${options.mainBkg} !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; -} - -.edgeTerminals { - font-size: 11px; - line-height: initial; -} - -.classTitleText { - text-anchor: middle; - font-size: 18px; - fill: ${options.textColor}; -} -`; -const styles = getStyles; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/63b37bf5.cf27ab4f.js b/pr-preview/pr-1594/assets/js/63b37bf5.cf27ab4f.js deleted file mode 100644 index d337df3445..0000000000 --- a/pr-preview/pr-1594/assets/js/63b37bf5.cf27ab4f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[515],{81760:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>d});var a=r(74848),n=r(28453);const s={},i="Alpaca",l={id:"reference/Connectors/capture-connectors/alpaca",title:"Alpaca",description:"This connector captures stock trade data from the Alpaca Market Data API into a Flow collection.",source:"@site/docs/reference/Connectors/capture-connectors/alpaca.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/alpaca",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/alpaca.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"AlloyDB",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb"},next:{title:"Amazon Ads",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads"}},c={},d=[{value:"Real-time and historical trade data",id:"real-time-and-historical-trade-data",level:2},{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Limitations",id:"limitations",level:2},{value:"Capturing data for more than 20 symbols in a single capture could result in API errors.",id:"capturing-data-for-more-than-20-symbols-in-a-single-capture-could-result-in-api-errors",level:4},{value:"Separate historical and real-time data streams will result in some duplicate trade documents.",id:"separate-historical-and-real-time-data-streams-will-result-in-some-duplicate-trade-documents",level:4}];function o(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"alpaca",children:"Alpaca"}),"\n",(0,a.jsxs)(t.p,{children:["This connector captures stock trade data from the ",(0,a.jsx)(t.a,{href:"https://alpaca.markets/docs/market-data/",children:"Alpaca Market Data API"})," into a Flow collection."]}),"\n",(0,a.jsxs)(t.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,a.jsx)(t.a,{href:"https://ghcr.io/estuary/source-alpaca:dev",children:(0,a.jsx)(t.code,{children:"ghcr.io/estuary/source-alpaca:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,a.jsx)(t.h2,{id:"real-time-and-historical-trade-data",children:"Real-time and historical trade data"}),"\n",(0,a.jsxs)(t.p,{children:["The Alpaca Market Data API comprises multiple APIs for stock trades, including\nthe ",(0,a.jsx)(t.a,{href:"https://alpaca.markets/docs/api-references/market-data-api/stock-pricing-data/historical/",children:"Trades REST API"})," for historical trade data\nand ",(0,a.jsx)(t.a,{href:"https://alpaca.markets/docs/api-references/market-data-api/stock-pricing-data/realtime/",children:"websocket streaming via the Data API"})," for real-time trade data."]}),"\n",(0,a.jsx)(t.p,{children:"Historical trade data is available from the Alpaca Market Data API starting 01-01-2016. As such, the\nconnector configuration requires a start date for the backfill to be on or after 01-01-2016."}),"\n",(0,a.jsx)(t.p,{children:"This connector uses both APIs to capture historical and real-time data in parallel.\nIt uses the Trades API to perform a historical backfill starting from the start date you specify and stopping when it reaches the present.\nAt the same time, the connector uses websocket streaming to initiate a real-time stream of trade data starting at the present moment and continuing indefinitely until you stop the capture process."}),"\n",(0,a.jsxs)(t.p,{children:["As a result, you'll get data from a historical time period you specify, as well as the lowest-latency\npossible updates of new trade data, but there will be some overlap in the two data streams.\nSee ",(0,a.jsx)(t.a,{href:"#limitations",children:"limitations"})," to learn more about reconciling historical and real-time data."]}),"\n",(0,a.jsx)(t.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,a.jsxs)(t.p,{children:["Alpaca supports over 8000 stocks and EFTs. You simply supply a list of ",(0,a.jsx)(t.a,{href:"https://eoddata.com/symbols.aspx",children:"symbols"})," to Flow when you configure the connector.\nTo check whether Alpaca supports a symbol, you can use the ",(0,a.jsx)(t.a,{href:"https://alpaca.markets/docs/api-references/broker-api/assets/#retrieving-an-asset-by-symbol",children:"Alpaca Broker API"}),"."]}),"\n",(0,a.jsx)(t.p,{children:"You can use this connector to capture data from up to 20 stock symbols into Flow collections in a single capture\n(to add more than 20, set up multiple captures).\nFor a given capture, data from all symbols is captured to a single collection."}),"\n",(0,a.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,a.jsx)(t.p,{children:"To use this connector, you'll need:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsx)(t.p,{children:"An Alpaca account."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["To access complete stock data in real-time, you'll need the ",(0,a.jsx)(t.a,{href:"https://alpaca.markets/docs/market-data/#subscription-plans",children:"Unlimited plan"}),".\nTo access a smaller sample of trade data with a 15-minute delay, you can use a Free plan, making sure to set ",(0,a.jsx)(t.strong,{children:"Feed"})," to ",(0,a.jsx)(t.code,{children:"iex"})," and choose the ",(0,a.jsx)(t.strong,{children:"Free Plan"})," option when ",(0,a.jsx)(t.a,{href:"#endpoint",children:"configuring the connector"}),"."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsxs)(t.p,{children:["Your Alpaca ",(0,a.jsx)(t.a,{href:"https://alpaca.markets/docs/market-data/getting-started/#creating-an-alpaca-account-and-finding-your-api-keys",children:"API Key ID and Secret Key"}),"."]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,a.jsxs)(t.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,a.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Alpaca source connector."]}),"\n",(0,a.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,a.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{children:"Property"}),(0,a.jsx)(t.th,{children:"Title"}),(0,a.jsx)(t.th,{children:"Description"}),(0,a.jsx)(t.th,{children:"Type"}),(0,a.jsx)(t.th,{children:"Required/Default"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"/advanced"})}),(0,a.jsx)(t.td,{children:"Advanced Options"}),(0,a.jsx)(t.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,a.jsx)(t.td,{children:"object"}),(0,a.jsx)(t.td,{})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"/advanced/disable_backfill"})}),(0,a.jsx)(t.td,{children:"Disable Historical Data Backfill"}),(0,a.jsx)(t.td,{children:"Disables historical data backfill via the historical data API. Data will only be collected via streaming."}),(0,a.jsx)(t.td,{children:"boolean"}),(0,a.jsx)(t.td,{})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"/advanced/disable_real_time"})}),(0,a.jsx)(t.td,{children:"Disable Real-Time Streaming"}),(0,a.jsx)(t.td,{children:"Disables real-time streaming via the websocket API. Data will only be collected via the backfill mechanism."}),(0,a.jsx)(t.td,{children:"boolean"}),(0,a.jsx)(t.td,{})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"/advanced/is_free_plan"})}),(0,a.jsx)(t.td,{children:"Free Plan"}),(0,a.jsx)(t.td,{children:"Set this if you are using a free plan. Delays data by 15 minutes."}),(0,a.jsx)(t.td,{children:"boolean"}),(0,a.jsx)(t.td,{})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"/advanced/max_backfill_interval"})}),(0,a.jsx)(t.td,{children:"Maximum Backfill Interval"}),(0,a.jsx)(t.td,{children:"The largest time interval that will be requested for backfills. Using smaller intervals may be useful when tracking many symbols. Must be a valid Go duration string."}),(0,a.jsx)(t.td,{children:"string"}),(0,a.jsx)(t.td,{})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"/advanced/min_backfill_interval"})}),(0,a.jsx)(t.td,{children:"Minimum Backfill Interval"}),(0,a.jsx)(t.td,{children:"The smallest time interval that will be requested for backfills after the initial backfill is complete. Must be a valid Go duration string."}),(0,a.jsx)(t.td,{children:"string"}),(0,a.jsx)(t.td,{})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"/advanced/stop_date"})}),(0,a.jsx)(t.td,{children:"Stop Date"}),(0,a.jsx)(t.td,{children:"Stop backfilling historical data at this date."}),(0,a.jsx)(t.td,{children:"string"}),(0,a.jsx)(t.td,{})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.strong,{children:(0,a.jsx)(t.code,{children:"/api_key_id"})})}),(0,a.jsx)(t.td,{children:"Alpaca API Key ID"}),(0,a.jsx)(t.td,{children:"Your Alpaca API key ID."}),(0,a.jsx)(t.td,{children:"string"}),(0,a.jsx)(t.td,{children:"Required"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.strong,{children:(0,a.jsx)(t.code,{children:"/api_secret_key"})})}),(0,a.jsx)(t.td,{children:"Alpaca API Secret Key"}),(0,a.jsx)(t.td,{children:"Your Alpaca API Secret key."}),(0,a.jsx)(t.td,{children:"string"}),(0,a.jsx)(t.td,{children:"Required"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.strong,{children:(0,a.jsx)(t.code,{children:"/feed"})})}),(0,a.jsx)(t.td,{children:"Feed"}),(0,a.jsxs)(t.td,{children:["The feed to pull market data from. ",(0,a.jsxs)(t.a,{href:"https://alpaca.markets/docs/market-data/#subscription-plans",children:["Choose from ",(0,a.jsx)(t.code,{children:"iex"})," or ",(0,a.jsx)(t.code,{children:"sip"})]}),"; set ",(0,a.jsx)(t.code,{children:"iex"})," if using a free plan."]}),(0,a.jsx)(t.td,{children:"string"}),(0,a.jsx)(t.td,{children:"Required"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.strong,{children:(0,a.jsx)(t.code,{children:"/start_date"})})}),(0,a.jsx)(t.td,{children:"Start Date"}),(0,a.jsx)(t.td,{children:"Get trades starting at this date. Has no effect if changed after the capture has started. Must be no earlier than 2016-01-01T00:00:00Z."}),(0,a.jsx)(t.td,{children:"string"}),(0,a.jsx)(t.td,{children:"Required"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.strong,{children:(0,a.jsx)(t.code,{children:"/symbols"})})}),(0,a.jsx)(t.td,{children:"Symbols"}),(0,a.jsx)(t.td,{children:"Comma separated list of symbols to monitor."}),(0,a.jsx)(t.td,{children:"string"}),(0,a.jsx)(t.td,{children:"Required"})]})]})]}),"\n",(0,a.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{children:"Property"}),(0,a.jsx)(t.th,{children:"Title"}),(0,a.jsx)(t.th,{children:"Description"}),(0,a.jsx)(t.th,{children:"Type"}),(0,a.jsx)(t.th,{children:"Required/Default"})]})}),(0,a.jsx)(t.tbody,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.strong,{children:(0,a.jsx)(t.code,{children:"/name"})})}),(0,a.jsx)(t.td,{children:"Name"}),(0,a.jsx)(t.td,{children:"Unique name for this binding. Cannot be changed once set."}),(0,a.jsx)(t.td,{children:"string"}),(0,a.jsx)(t.td,{children:"Required"})]})})]}),"\n",(0,a.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/source-alpaca:dev"\n config:\n api_key_id: <SECRET>\n api_secret_key: <SECRET>\n feed: iex\n start_date: 2022-11-01T00:00:00Z\n symbols: AAPL,MSFT,AMZN,TSLA,GOOGL,GOOG,NVDA,BRK.B,META,UNH\n advanced:\n is_free_plan: true\n bindings:\n - resource:\n name: trades\n target: ${PREFIX}/${CAPTURE_NAME}/trades\n'})}),"\n",(0,a.jsx)(t.h2,{id:"limitations",children:"Limitations"}),"\n",(0,a.jsx)(t.h4,{id:"capturing-data-for-more-than-20-symbols-in-a-single-capture-could-result-in-api-errors",children:"Capturing data for more than 20 symbols in a single capture could result in API errors."}),"\n",(0,a.jsx)(t.p,{children:"If you need to capture data for more than 20 symbols, we recommend splitting them between two captures.\nSupport for a larger number of symbols in a single capture is planned for a future release."}),"\n",(0,a.jsx)(t.h4,{id:"separate-historical-and-real-time-data-streams-will-result-in-some-duplicate-trade-documents",children:"Separate historical and real-time data streams will result in some duplicate trade documents."}),"\n",(0,a.jsxs)(t.p,{children:["As discussed ",(0,a.jsx)(t.a,{href:"#real-time-and-historical-trade-data",children:"above"}),", the connector captures historical and real-time data in two different streams.\nAs the historical data stream catches up to the present, it will overlap with the beginning of the real-time data stream, resulting in some duplicated documents.\nThese will have ",(0,a.jsx)(t.a,{href:"https://alpaca.markets/docs/api-references/market-data-api/stock-pricing-data/historical/#response-object-properties",children:"identical properties from Alpaca"}),", but different ",(0,a.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections#documents",children:"metadata from Flow"}),"."]}),"\n",(0,a.jsx)(t.p,{children:"There are several ways to resolve this:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsxs)(t.p,{children:["If you plan to materialize to an endpoint for which standard (non-delta) updates are supported, Flow will resolve the duplicates during the materialization process.\nUnless otherwise specified in their ",(0,a.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/",children:"documentation page"}),", materialization connectors run in standard updates mode.\nIf a connector supports both modes, it will default to standard updates."]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["\n",(0,a.jsxs)(t.p,{children:["If you plan to materialize to an endpoint for which ",(0,a.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})," is the only option,\nensure that the endpoint system supports the equivalent of ",(0,a.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins",children:"lastWriteWins"})," reductions."]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(o,{...e})}):o(e)}},28453:(e,t,r)=>{r.d(t,{R:()=>i,x:()=>l});var a=r(96540);const n={},s=a.createContext(n);function i(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/6420.ed961081.js b/pr-preview/pr-1594/assets/js/6420.ed961081.js deleted file mode 100644 index 088c7b0eb0..0000000000 --- a/pr-preview/pr-1594/assets/js/6420.ed961081.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6420],{26420:(t,e,n)=>{n.d(e,{diagram:()=>j});var i=n(99702),s=n(26312),r=n(28259),a=(n(74353),n(16750),n(42838),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[6,8,10,11,12,14,16,17,18],n=[1,9],i=[1,10],s=[1,11],r=[1,12],a=[1,13],o=[1,14],l={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 9:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 10:case 11:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 12:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 13:i.addTask(r[o-1],r[o]),this.$="task"}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:i,14:s,16:r,17:a,18:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:n,12:i,14:s,16:r,17:a,18:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",l=0,c=0,h=r.slice.call(arguments,1),y=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);y.setInput(t,u.yy),u.yy.lexer=y,u.yy.parser=this,void 0===y.yylloc&&(y.yylloc={});var d=y.yylloc;r.push(d);var f=y.options&&y.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,x,m,k,_,b,v,$,w,M={};;){if(x=n[n.length-1],this.defaultActions[x]?m=this.defaultActions[x]:(null==g&&(w=void 0,"number"!=typeof(w=i.pop()||y.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),g=w),m=a[x]&&a[x][g]),void 0===m||!m.length||!m[0]){var E="";for(_ in $=[],a[x])this.terminals_[_]&&_>2&&$.push("'"+this.terminals_[_]+"'");E=y.showPosition?"Parse error on line "+(l+1)+":\n"+y.showPosition()+"\nExpecting "+$.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(E,{text:y.match,token:this.terminals_[g]||g,line:y.yylineno,loc:d,expected:$})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+g);switch(m[0]){case 1:n.push(g),s.push(y.yytext),r.push(y.yylloc),n.push(m[1]),g=null,c=y.yyleng,o=y.yytext,l=y.yylineno,d=y.yylloc;break;case 2:if(b=this.productions_[m[1]][1],M.$=s[s.length-b],M._$={first_line:r[r.length-(b||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(b||1)].first_column,last_column:r[r.length-1].last_column},f&&(M._$.range=[r[r.length-(b||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(M,[o,c,l,u.yy,m[1],s,r].concat(h))))return k;b&&(n=n.slice(0,-1*b*2),s=s.slice(0,-1*b),r=r.slice(0,-1*b)),n.push(this.productions_[m[1]][0]),s.push(M.$),r.push(M._$),v=a[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},c={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:case 1:case 3:case 4:break;case 2:return 10;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};function h(){this.yy={}}return l.lexer=c,h.prototype=l,l.Parser=h,new h}());a.parser=a;const o=a;let l="";const c=[],h=[],y=[],u=function(){let t=!0;for(const[e,n]of y.entries())y[e].processed,t=t&&n.processed;return t},p={getConfig:()=>(0,i.c)().journey,clear:function(){c.length=0,h.length=0,l="",y.length=0,(0,i.v)()},setDiagramTitle:i.q,getDiagramTitle:i.t,setAccTitle:i.s,getAccTitle:i.g,setAccDescription:i.b,getAccDescription:i.a,addSection:function(t){l=t,c.push(t)},getSections:function(){return c},getTasks:function(){let t=u();let e=0;for(;!t&&e<100;)t=u(),e++;return h.push(...y),h},addTask:function(t,e){const n=e.substr(1).split(":");let i=0,s=[];1===n.length?(i=Number(n[0]),s=[]):(i=Number(n[0]),s=n[1].split(","));const r=s.map((t=>t.trim())),a={section:l,type:l,people:r,task:t,score:i};y.push(a)},addTaskOrg:function(t){const e={section:l,type:l,description:t,task:t,classes:[]};h.push(e)},getActors:function(){return function(){const t=[];return h.forEach((e=>{e.people&&t.push(...e.people)})),[...new Set(t)].sort()}()}},d=t=>`.label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ${t.textColor};\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ${t.textColor}\n }\n\n .legend {\n fill: ${t.textColor};\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ${t.textColor}\n }\n\n .face {\n ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${t.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${t.lineColor};\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ${t.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${t.edgeLabelBackground};\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ${t.tertiaryColor};\n border: 1px solid ${t.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ${t.fillType0?`fill: ${t.fillType0}`:""};\n }\n .task-type-1, .section-type-1 {\n ${t.fillType0?`fill: ${t.fillType1}`:""};\n }\n .task-type-2, .section-type-2 {\n ${t.fillType0?`fill: ${t.fillType2}`:""};\n }\n .task-type-3, .section-type-3 {\n ${t.fillType0?`fill: ${t.fillType3}`:""};\n }\n .task-type-4, .section-type-4 {\n ${t.fillType0?`fill: ${t.fillType4}`:""};\n }\n .task-type-5, .section-type-5 {\n ${t.fillType0?`fill: ${t.fillType5}`:""};\n }\n .task-type-6, .section-type-6 {\n ${t.fillType0?`fill: ${t.fillType6}`:""};\n }\n .task-type-7, .section-type-7 {\n ${t.fillType0?`fill: ${t.fillType7}`:""};\n }\n\n .actor-0 {\n ${t.actor0?`fill: ${t.actor0}`:""};\n }\n .actor-1 {\n ${t.actor1?`fill: ${t.actor1}`:""};\n }\n .actor-2 {\n ${t.actor2?`fill: ${t.actor2}`:""};\n }\n .actor-3 {\n ${t.actor3?`fill: ${t.actor3}`:""};\n }\n .actor-4 {\n ${t.actor4?`fill: ${t.actor4}`:""};\n }\n .actor-5 {\n ${t.actor5?`fill: ${t.actor5}`:""};\n }\n`,f=function(t,e){return(0,r.d)(t,e)},g=function(t,e){const n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),void 0!==n.class&&n.attr("class",n.class),void 0!==e.title&&n.append("title").text(e.title),n},x=function(t,e){return(0,r.f)(t,e)};let m=-1;const k=function(){function t(t,e,n,s,r,a,o,l){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",l).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,l,c){const{taskFontSize:h,taskFontFamily:y}=l,u=t.split(/<br\s*\/?>/gi);for(let p=0;p<u.length;p++){const t=p*h-h*(u.length-1)/2,l=e.append("text").attr("x",n+r/2).attr("y",s).attr("fill",c).style("text-anchor","middle").style("font-size",h).style("font-family",y);l.append("tspan").attr("x",n+r/2).attr("dy",t).text(u[p]),l.attr("y",s+a/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(l,o)}}function n(t,n,s,r,a,o,l,c){const h=n.append("switch"),y=h.append("foreignObject").attr("x",s).attr("y",r).attr("width",a).attr("height",o).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");y.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,s,r,a,o,l,c),i(y,l)}function i(t,e){for(const n in e)n in e&&t.attr(n,e[n])}return function(i){return"fo"===i.textPlacement?n:"old"===i.textPlacement?t:e}}(),_=g,b=function(t,e,n){const i=t.append("g"),s=(0,r.g)();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=n.width*e.taskCount+n.diagramMarginX*(e.taskCount-1),s.height=n.height,s.class="journey-section section-type-"+e.num,s.rx=3,s.ry=3,f(i,s),k(n)(e.text,i,s.x,s.y,s.width,s.height,{class:"journey-section section-type-"+e.num},n,e.colour)},v=x,$=function(t,e,n){const i=e.x+n.width/2,a=t.append("g");m++;a.append("line").attr("id","task"+m).attr("x1",i).attr("y1",e.y).attr("x2",i).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),function(t,e){const n=15,i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",n).attr("stroke-width",2).attr("overflow","visible"),r=t.append("g");r.append("circle").attr("cx",e.cx-5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),r.append("circle").attr("cx",e.cx+5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),e.score>3?function(t){const i=(0,s.JLW)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}(r):e.score<3?function(t){const i=(0,s.JLW)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}(r):r.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(a,{cx:i,cy:300+30*(5-e.score),score:e.score});const o=(0,r.g)();o.x=e.x,o.y=e.y,o.fill=e.fill,o.width=n.width,o.height=n.height,o.class="task task-type-"+e.num,o.rx=3,o.ry=3,f(a,o);let l=e.x+14;e.people.forEach((t=>{const n=e.actors[t].color,i={cx:l,cy:e.y,r:7,fill:n,stroke:"#000",title:t,pos:e.actors[t].position};g(a,i),l+=10})),k(n)(e.task,a,o.x,o.y,o.width,o.height,{class:"task"},n,e.colour)},w=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},M={};const E=(0,i.c)().journey,T=E.leftMargin,S={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,i){void 0===t[e]?t[e]=n:t[e]=i(n,t[e])},updateBounds:function(t,e,n,s){const r=(0,i.c)().journey,a=this;let o=0;var l;this.sequenceItems.forEach((function(i){o++;const c=a.sequenceItems.length-o+1;a.updateVal(i,"starty",e-c*r.boxMargin,Math.min),a.updateVal(i,"stopy",s+c*r.boxMargin,Math.max),a.updateVal(S.data,"startx",t-c*r.boxMargin,Math.min),a.updateVal(S.data,"stopx",n+c*r.boxMargin,Math.max),"activation"!==l&&(a.updateVal(i,"startx",t-c*r.boxMargin,Math.min),a.updateVal(i,"stopx",n+c*r.boxMargin,Math.max),a.updateVal(S.data,"starty",e-c*r.boxMargin,Math.min),a.updateVal(S.data,"stopy",s+c*r.boxMargin,Math.max))}))},insert:function(t,e,n,i){const s=Math.min(t,n),r=Math.max(t,n),a=Math.min(e,i),o=Math.max(e,i);this.updateVal(S.data,"startx",s,Math.min),this.updateVal(S.data,"starty",a,Math.min),this.updateVal(S.data,"stopx",r,Math.max),this.updateVal(S.data,"stopy",o,Math.max),this.updateBounds(s,a,r,o)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},A=E.sectionFills,I=E.sectionColours,P=function(t,e,n){const s=(0,i.c)().journey;let r="";const a=n+(2*s.height+s.diagramMarginY);let o=0,l="#CCC",c="black",h=0;for(const[i,y]of e.entries()){if(r!==y.section){l=A[o%A.length],h=o%A.length,c=I[o%I.length];let n=0;const a=y.section;for(let t=i;t<e.length&&e[t].section==a;t++)n+=1;const u={x:i*s.taskMargin+i*s.width+T,y:50,text:y.section,fill:l,num:h,colour:c,taskCount:n};b(t,u,s),r=y.section,o++}const n=y.people.reduce(((t,e)=>(M[e]&&(t[e]=M[e]),t)),{});y.x=i*s.taskMargin+i*s.width+T,y.y=a,y.width=s.diagramMarginX,y.height=s.diagramMarginY,y.colour=c,y.fill=l,y.num=h,y.actors=n,$(t,y,s),S.insert(y.x,y.y,y.x+y.width+s.taskMargin,450)}},C={setConf:function(t){Object.keys(t).forEach((function(e){E[e]=t[e]}))},draw:function(t,e,n,r){const a=(0,i.c)().journey,o=(0,i.c)().securityLevel;let l;"sandbox"===o&&(l=(0,s.Ltv)("#i"+e));const c="sandbox"===o?(0,s.Ltv)(l.nodes()[0].contentDocument.body):(0,s.Ltv)("body");S.init();const h=c.select("#"+e);w(h);const y=r.db.getTasks(),u=r.db.getDiagramTitle(),p=r.db.getActors();for(const i in M)delete M[i];let d=0;p.forEach((t=>{M[t]={color:a.actorColours[d%a.actorColours.length],position:d},d++})),function(t){const e=(0,i.c)().journey;let n=60;Object.keys(M).forEach((i=>{const s=M[i].color,r={cx:20,cy:n,r:7,fill:s,stroke:"#000",pos:M[i].position};_(t,r);const a={x:40,y:n+7,fill:"#666",text:i,textMargin:5|e.boxTextMargin};v(t,a),n+=20}))}(h),S.insert(0,0,T,50*Object.keys(M).length),P(h,y,0);const f=S.getBounds();u&&h.append("text").text(u).attr("x",T).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const g=f.stopy-f.starty+2*a.diagramMarginY,x=T+f.stopx+2*a.diagramMarginX;(0,i.i)(h,g,x,a.useMaxWidth),h.append("line").attr("x1",T).attr("y1",4*a.height).attr("x2",x-T-4).attr("y2",4*a.height).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const m=u?70:0;h.attr("viewBox",`${f.startx} -25 ${x} ${g+m}`),h.attr("preserveAspectRatio","xMinYMin meet"),h.attr("height",g+m+25)}},j={parser:o,db:p,renderer:C,styles:d,init:t=>{C.setConf(t.journey),p.clear()}}},28259:(t,e,n)=>{n.d(e,{a:()=>a,b:()=>c,c:()=>l,d:()=>r,e:()=>y,f:()=>o,g:()=>h});var i=n(16750),s=n(99702);const r=(t,e)=>{const n=t.append("rect");if(n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),e.name&&n.attr("name",e.name),void 0!==e.rx&&n.attr("rx",e.rx),void 0!==e.ry&&n.attr("ry",e.ry),void 0!==e.attrs)for(const i in e.attrs)n.attr(i,e.attrs[i]);return void 0!==e.class&&n.attr("class",e.class),n},a=(t,e)=>{const n={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};r(t,n).lower()},o=(t,e)=>{const n=e.text.replace(s.J," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),void 0!==e.class&&i.attr("class",e.class);const r=i.append("tspan");return r.attr("x",e.x+2*e.textMargin),r.text(n),i},l=(t,e,n,s)=>{const r=t.append("image");r.attr("x",e),r.attr("y",n);const a=(0,i.Jf)(s);r.attr("xlink:href",a)},c=(t,e,n,s)=>{const r=t.append("use");r.attr("x",e),r.attr("y",n);const a=(0,i.Jf)(s);r.attr("xlink:href",`#${a}`)},h=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),y=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/6459b84b.62c1dfdf.js b/pr-preview/pr-1594/assets/js/6459b84b.62c1dfdf.js deleted file mode 100644 index c8363b8482..0000000000 --- a/pr-preview/pr-1594/assets/js/6459b84b.62c1dfdf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6459],{24519:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>h,toc:()=>p});var s=t(74848),o=t(28453),r=t(96540);const l=()=>{const e=window.location.href,[n,t]=r.useState("");return r.useMemo((()=>new URLSearchParams(window.location.search.slice(1)).get("code")),[])?(0,s.jsx)("span",{style:{color:"green"},children:"You have successfully added the application to your tenant"}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("span",{children:["Input your ",(0,s.jsx)("b",{children:"Tenant ID"})," and follow the prompts to add our application to your tenant:"]}),(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),(0,s.jsx)("input",{placeholder:"Tenant ID",value:n,onChange:e=>t(e.target.value)}),(0,s.jsx)("a",{style:{marginLeft:8,color:n.length<1?"inherit":void 0},href:n.length>0?(o=n,`https://login.microsoftonline.com/${o}/oauth2/authorize?client_id=42cb0c6c-dab0-411f-9c21-16d5a2b1b025&response_type=code&redirect_uri=${encodeURIComponent(e)}&resource_id=${encodeURIComponent("https://storage.azure.com")}`):null,children:"Authorize"})]});var o};var i=t(92303);function a(e){let{children:n,fallback:t}=e;return(0,i.A)()?(0,s.jsx)(s.Fragment,{children:n?.()}):t??null}const c={sidebar_position:1},d="Registration and setup",h={id:"getting-started/installation",title:"Registration and setup",description:"Estuary Flow is a fully managed web application that also offers a robust CLI.",source:"@site/docs/getting-started/installation.mdx",sourceDirName:"getting-started",slug:"/getting-started/installation",permalink:"/pr-preview/pr-1594/getting-started/installation",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/getting-started/installation.mdx",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Comparisons",permalink:"/pr-preview/pr-1594/overview/comparisons"},next:{title:"Flow tutorials",permalink:"/pr-preview/pr-1594/getting-started/tutorials/"}},u={},p=[{value:"Get started with the Flow web application",id:"get-started-with-the-flow-web-application",level:2},{value:"Get started with the Flow CLI",id:"get-started-with-the-flow-cli",level:2},{value:"Configuring your cloud storage bucket for use with Flow",id:"configuring-your-cloud-storage-bucket-for-use-with-flow",level:2},{value:"Google Cloud Storage buckets",id:"google-cloud-storage-buckets",level:3},{value:"Amazon S3 buckets",id:"amazon-s3-buckets",level:3},{value:"Azure Blob Storage",id:"azure-blob-storage",level:3},{value:"Add the Bucket",id:"add-the-bucket",level:3},{value:"Self-hosting Flow",id:"self-hosting-flow",level:2},{value:"What's next?",id:"whats-next",level:2}];function g(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"registration-and-setup",children:"Registration and setup"}),"\n",(0,s.jsx)(n.p,{children:"Estuary Flow is a fully managed web application that also offers a robust CLI.\nOnce you register in the web application, you can seamlessly use either or both tools to do your work."}),"\n",(0,s.jsx)(n.h2,{id:"get-started-with-the-flow-web-application",children:"Get started with the Flow web application"}),"\n",(0,s.jsxs)(n.p,{children:["To start using Flow for free, visit the ",(0,s.jsx)(n.a,{href:"https://go.estuary.dev/dashboard",children:"web application"}),".\nSee what the free tier includes on the ",(0,s.jsx)(n.a,{href:"https://estuary.dev/pricing/",children:"Pricing"})," page."]}),"\n",(0,s.jsx)(n.p,{children:"When you register for Flow, your account will use Flow's secure cloud storage bucket to store your data.\nData in Flow's cloud storage bucket is deleted 30 days after collection."}),"\n",(0,s.jsxs)(n.p,{children:["For production use cases, you should ",(0,s.jsx)(n.a,{href:"#configuring-your-cloud-storage-bucket-for-use-with-flow",children:"configure your own cloud storage bucket to use with Flow"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"get-started-with-the-flow-cli",children:"Get started with the Flow CLI"}),"\n",(0,s.jsxs)(n.p,{children:["After your account has been activated through the ",(0,s.jsx)(n.a,{href:"#get-started-with-the-flow-web-application",children:"web app"}),", you can begin to work with your data flows from the command line.\nThis is not required, but it enables more advanced workflows or might simply be your preference."]}),"\n",(0,s.jsxs)(n.p,{children:["Flow has a single binary, ",(0,s.jsx)(n.strong,{children:"flowctl"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"flowctl is available for:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Linux"})," x86-64. All distributions are supported."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"MacOS"})," 11 (Big Sur) or later. Both Intel and M1 chips are supported."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["To install, copy and paste the appropriate script below into your terminal. This will download flowctl, make it executable, and add it to your ",(0,s.jsx)(n.code,{children:"PATH"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"For Linux:"}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-console",children:"sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-x86_64-linux' && sudo chmod +x /usr/local/bin/flowctl\n"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"For Mac:"}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-console",children:"sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-multiarch-macos' && sudo chmod +x /usr/local/bin/flowctl\n"})}),"\n",(0,s.jsx)(n.p,{children:"Alternatively, Mac users can install with Homebrew:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-console",children:"brew tap estuary/flowctl\nbrew install flowctl\n"})}),"\n",(0,s.jsxs)(n.p,{children:["flowctl isn't currently available for Windows.\nFor Windows users, we recommend running the Linux version inside ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/",children:"WSL"}),",\nor using a remote development environment."]}),"\n",(0,s.jsxs)(n.p,{children:["The flowctl source files are also on GitHub ",(0,s.jsx)(n.a,{href:"https://go.estuary.dev/flowctl",children:"here"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Once you've installed flowctl and are ready to begin working, authenticate your session using an access token."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Ensure that you have an Estuary account and have signed into the Flow web app before."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"In the terminal of your local development environment, run:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-console",children:"flowctl auth login\n"})}),"\n",(0,s.jsx)(n.p,{children:"In a browser window, the web app opens to the CLI-API tab."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Copy the access token."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Return to the terminal, paste the access token, and press Enter."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The token will expire after a predetermined duration. Repeat this process to re-authenticate."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/flowctl",children:"Learn more about using flowctl."})}),"\n",(0,s.jsx)(n.h2,{id:"configuring-your-cloud-storage-bucket-for-use-with-flow",children:"Configuring your cloud storage bucket for use with Flow"}),"\n",(0,s.jsx)(n.p,{children:"New Flow accounts are connected to Flow's secure cloud storage bucket to store collection data.\nTo switch to your own bucket, choose a cloud provider and complete the setup steps:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"#google-cloud-storage-buckets",children:"Google Cloud Storage"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"#amazon-s3-buckets",children:"Amazon S3"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"#azure-blob-storage",children:"Azure Blob Storage"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Once you're done, ",(0,s.jsx)(n.a,{href:"#give-us-a-ring",children:"get in touch"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"google-cloud-storage-buckets",children:"Google Cloud Storage buckets"}),"\n",(0,s.jsx)(n.p,{children:"You'll need to grant Estuary Flow access to your GCS bucket."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://cloud.google.com/storage/docs/creating-buckets",children:"Create a bucket to use with Flow"}),", if you haven't already."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Follow the steps to ",(0,s.jsx)(n.a,{href:"https://cloud.google.com/storage/docs/access-control/using-iam-permissions#bucket-add",children:"add a principal to a bucket level policy"}),".\nAs you do so:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["For the principal, enter ",(0,s.jsx)(n.code,{children:"flow-258@helpful-kingdom-273219.iam.gserviceaccount.com"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Select the ",(0,s.jsx)(n.a,{href:"https://cloud.google.com/storage/docs/access-control/iam-roles",children:(0,s.jsx)(n.code,{children:"roles/storage.admin"})})," role."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"amazon-s3-buckets",children:"Amazon S3 buckets"}),"\n",(0,s.jsx)(n.p,{children:"You'll need to grant Estuary Flow access to your S3 bucket."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html",children:"Create a bucket to use with Flow"}),", if you haven't already."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Follow the steps to ",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html",children:"add a bucket policy"}),", pasting the policy below.\nBe sure to replace ",(0,s.jsx)(n.code,{children:"YOUR-S3-BUCKET"})," with the actual name of your bucket."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Sid": "AllowUsersToAccessObjectsUnderPrefix",\n "Effect": "Allow",\n "Principal": {\n "AWS": "arn:aws:iam::789740162118:user/flow-aws"\n },\n "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],\n "Resource": "arn:aws:s3:::YOUR-S3-BUCKET/*"\n },\n {\n "Effect": "Allow",\n "Principal": {\n "AWS": "arn:aws:iam::789740162118:user/flow-aws"\n },\n "Action": "s3:ListBucket",\n "Resource": "arn:aws:s3:::YOUR-S3-BUCKET"\n },\n {\n "Effect": "Allow",\n "Principal": {\n "AWS": "arn:aws:iam::789740162118:user/flow-aws"\n },\n "Action": "s3:GetBucketPolicy",\n "Resource": "arn:aws:s3:::YOUR-S3-BUCKET"\n }\n ]\n}\n'})}),"\n",(0,s.jsx)(n.h3,{id:"azure-blob-storage",children:"Azure Blob Storage"}),"\n",(0,s.jsx)(n.p,{children:"You'll need to grant Estuary Flow access to your storage account and container.\nYou'll also need to provide some identifying information."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal#create-a-container",children:"Create an Azure Blob Storage container"})," to use with Flow, if you haven't already."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Gather the following information. You'll need this when you contact us to complete setup."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Your ",(0,s.jsx)(n.strong,{children:"Azure AD tenant ID"}),". You can find this in the ",(0,s.jsx)(n.strong,{children:"Azure Active Directory"})," page.\n",(0,s.jsx)(n.img,{src:t(63997).A+"",width:"1147",height:"507"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Your ",(0,s.jsx)(n.strong,{children:"Azure Blob Storage account ID"}),". You can find this in the ",(0,s.jsx)(n.strong,{children:"Storage Accounts"})," page.\n",(0,s.jsx)(n.img,{src:t(33024).A+"",width:"852",height:"317"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Your ",(0,s.jsx)(n.strong,{children:"Azure Blob Storage container ID"}),". You can find this inside your storage account.\n",(0,s.jsx)(n.img,{src:t(74200).A+"",width:"997",height:"599"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You'll grant Flow access to your storage resources by connecting to Estuary's\n",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/what-is-application-management",children:"Azure application"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Add Estuary's Azure application to your tenant."}),"\n"]}),"\n"]}),"\n","\n",(0,s.jsx)(a,{children:()=>(0,s.jsx)(l,{})}),"\n",(0,s.jsxs)(n.ol,{start:"4",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Grant the application access to your storage account via the\n",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#storage-blob-data-owner",children:(0,s.jsx)(n.code,{children:"Storage Blob Data Owner"})})," IAM role."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Inside your storage account's ",(0,s.jsx)(n.strong,{children:"Access Control (IAM)"})," tab, click ",(0,s.jsx)(n.strong,{children:"Add Role Assignment"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Search for ",(0,s.jsx)(n.code,{children:"Storage Blob Data Owner"})," and select it."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["On the next page, make sure ",(0,s.jsx)(n.code,{children:"User, group, or service principal"})," is selected, then click ",(0,s.jsx)(n.strong,{children:"+ Select Members"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["You must search for the exact name of the application, otherwise it won't show up: ",(0,s.jsx)(n.code,{children:"Estuary Storage Mappings Prod"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Once you've selected the application, finish granting the role."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["For more help, see the ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal",children:"Azure docs"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"add-the-bucket",children:"Add the Bucket"}),"\n",(0,s.jsx)(n.p,{children:'If your bucket is for Google Cloud Storage or AWS S3, you can add it yourself. Once you\'ve finished the above steps, head to "Admin", "Settings" then "Configure Cloud Storage"\nand enter the relevant information there and we\'ll start to use your bucket for all data going forward.'}),"\n",(0,s.jsxs)(n.p,{children:["If your bucket is for Azure, send ",(0,s.jsx)(n.a,{href:"mailto:support@estuary.dev",children:"support@estuary.dev"})," an email with the name of the storage bucket and any other information you gathered per the steps above.\nLet us know whether you want to use this storage bucket to for your whole Flow account, or just a specific ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/catalogs#namespace",children:"prefix"}),".\nWe'll be in touch when it's done!"]}),"\n",(0,s.jsx)(n.h2,{id:"self-hosting-flow",children:"Self-hosting Flow"}),"\n",(0,s.jsxs)(n.p,{children:["The Flow runtime is available under the ",(0,s.jsx)(n.a,{href:"https://github.com/estuary/flow/blob/master/LICENSE-BSL",children:"Business Source License"}),". It's possible to self-host Flow using a cloud provider of your choice."]}),"\n",(0,s.jsx)(n.admonition,{title:"Beta",type:"caution",children:(0,s.jsxs)(n.p,{children:["Setup for self-hosting is not covered in this documentation, and full support is not guaranteed at this time.\nWe recommend using the ",(0,s.jsx)(n.a,{href:"#get-started-with-the-flow-web-application",children:"hosted version of Flow"})," for the best experience.\nIf you'd still like to self-host, refer to the ",(0,s.jsx)(n.a,{href:"https://github.com/estuary/flow",children:"GitHub repository"})," or the ",(0,s.jsx)(n.a,{href:"https://join.slack.com/t/estuary-dev/shared_invite/zt-86nal6yr-VPbv~YfZE9Q~6Zl~gmZdFQ",children:"Estuary Slack"}),"."]})}),"\n",(0,s.jsx)(n.h2,{id:"whats-next",children:"What's next?"}),"\n",(0,s.jsx)(n.p,{children:"Start using Flow with these recommended resources."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"Create your first data flow"})}),":\nFollow this guide to create your first data flow in the Flow web app, while learning essential flow concepts."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/",children:"High level concepts"})}),": Start here to learn more about important Flow terms."]}),"\n"]}),"\n"]})]})}function x(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(g,{...e})}):g(e)}},63997:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/Azure_AD_Tenant_ID-755966905d34f909de14009536374173.png"},74200:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/Azure_Container_ID-de1a2aac02163282fc8694374ac22c27.png"},33024:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/Azure_Storage_Account_Name-0f3730e71af4f785f38be9df59f63d5e.png"},28453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>i});var s=t(96540);const o={},r=s.createContext(o);function l(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/645c44d3.db494a12.js b/pr-preview/pr-1594/assets/js/645c44d3.db494a12.js deleted file mode 100644 index 2b15ea32b6..0000000000 --- a/pr-preview/pr-1594/assets/js/645c44d3.db494a12.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1586],{33988:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>t});var s=r(74848),c=r(28453);const i={},o="Capture connectors",l={id:"reference/Connectors/capture-connectors/README",title:"Capture connectors",description:"Estuary's available capture connectors are listed in this section. Each connector has a unique set of requirements for configuration; these are linked below the connector name.",source:"@site/docs/reference/Connectors/capture-connectors/README.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/README.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Connectors",permalink:"/pr-preview/pr-1594/reference/Connectors/"},next:{title:"Aircall",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall"}},a={},t=[{value:"Available capture connectors",id:"available-capture-connectors",level:2},{value:"Estuary connectors",id:"estuary-connectors",level:3},{value:"Third party connectors",id:"third-party-connectors",level:3}];function h(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,c.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"capture-connectors",children:"Capture connectors"}),"\n",(0,s.jsx)(n.p,{children:"Estuary's available capture connectors are listed in this section. Each connector has a unique set of requirements for configuration; these are linked below the connector name."}),"\n",(0,s.jsxs)(n.p,{children:["Also listed are links to the most recent Docker images for each connector. You'll need these to write Flow specifications manually (if you're ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/flowctl",children:"developing locally"}),"). If you're using the Flow web app, they aren't necessary."]}),"\n",(0,s.jsx)(n.p,{children:"Estuary is actively developing new connectors, so check back regularly for the latest additions. We\u2019re prioritizing the development of high-scale technological systems, as well as client needs."}),"\n",(0,s.jsx)(n.h2,{id:"available-capture-connectors",children:"Available capture connectors"}),"\n",(0,s.jsx)(n.h3,{id:"estuary-connectors",children:"Estuary connectors"}),"\n",(0,s.jsx)(n.p,{children:"These connectors are created by Estuary. We prioritize high-scale technology systems for development."}),"\n",(0,s.jsx)(n.p,{children:"All Estuary connectors capture data in real time, as it appears in the source system"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["AlloyDB","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-alloydb",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Alpaca","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-alpaca",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Amazon Dynamodb","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-dynamodb",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Amazon Kinesis","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/source-kinesis",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Amazon RDS SQL Server","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghcr.io/estuary/source-amazon-rds-sqlserver"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Amazon S3","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/source-s3",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Apache Kafka","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/source-kafka",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Azure Blob Storage","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/azure-blob-storage",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Azure SQL Server","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./SQLServer/",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-azure-sqlserver",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["BigQuery","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/source-bigquery-batch",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Dropbox","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-dropbox",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Google Cloud Storage","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/source-gcs",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Google Firestore","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-firestore",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Google Cloud Pub/Sub","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/source-google-pubsub",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Google Cloud SQL Server","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-google-cloud-sql-sqlserver",":md"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["HTTP file","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-http-file",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["HTTP ingest (webhook)","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-http-ingest",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Hubspot (Real-Time)","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-hubspot-native",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["MariaDB","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./MariaDB/",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-mariadb",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Microsoft SQL Server","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./SQLServer/",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-sqlserver",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["MongoDB","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./mongodb/",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-mongodb",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["MySQL","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./MySQL/",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-mysql",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Pendo","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-pendo",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["PostgreSQL","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./PostgreSQL/",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/source-postgres",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Salesforce (for real-time data)","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./Salesforce/",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-salesforce-next",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["SFTP","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-sftp",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Snowflake","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-snowflake",":dev"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"third-party-connectors",children:"Third party connectors"}),"\n",(0,s.jsxs)(n.p,{children:["Estuary supports open-source connectors from third parties. These connectors operate in a ",(0,s.jsx)(n.strong,{children:"batch"})," fashion,\ncapturing data in increments. When you run these connectors in Flow, you'll get as close to real time as possible\nwithin the limitations set by the connector itself."]}),"\n",(0,s.jsx)(n.p,{children:"Typically, we enable SaaS connectors from third parties to allow more diverse data flows."}),"\n",(0,s.jsxs)(n.p,{children:["All the third-party connectors available currently were created by ",(0,s.jsx)(n.a,{href:"https://airbyte.com/connectors",children:"Airbyte"}),".\nThe versions made available in Flow have been adapted for compatibility."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Airtable","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghrc.io/estuary/source-airtable.dev"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Amazon Ads","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghrc.io/estuary/source-amazon-ads.dev"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Amplitude","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-amplitude",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Bing Ads","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-bing-ads",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Braintree","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-braintree",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Braze","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-braze",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Chargebee","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghrc.io/estuary/source-chargebee.dev"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Exchange Rates API","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-exchange-rates",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Facebook Marketing","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-facebook-marketing",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Freshdesk","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-freshdesk",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["GitHub","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-github",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Gladly","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghrc.io/estuary/source-gladly.dev"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Google Ads","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-google-ads",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Google Analytics 4","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-google-analytics-data-api",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Google Universal Analytics","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-google-analytics-ua",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Google Search Console","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-google-search-console",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Google Sheets","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-google-sheets",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Greenhouse","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghrc.io/estuary/source-greenhouse.dev"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Harvest","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-harvest",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Hubspot","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-hubspot",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Instagram","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-instagram",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Intercom","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-intercom",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Iterable","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghrc.io/estuary/source-iterable.dev"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Jira","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghrc.io/estuary/source-jira.dev"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Klaviyo","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghrc.io/estuary/source-klaviyo.dev"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["LinkedIn Ads","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-linkedin-ads",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["LinkedIn Pages","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghcr.io/estuary/source-linkedin-pages:4985746"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Mailchimp","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-mailchimp",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Marketo","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghrc.io/estuary/source-marketo.dev"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["MixPanel","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghrc.io/estuary/source-mixpanel.dev"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["NetSuite","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-netsuite",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Notion","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-notion",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Paypal Transaction","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction",children:"Configuration"})}),"\n",(0,s.jsx)(n.li,{children:"Package - ghrc.io/estuary/source-paypal-transaction.dev"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Recharge","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-recharge",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Salesforce (For historical data)","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./Salesforce/",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-salesforce",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["SendGrid","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-sendgrid",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Sentry","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-sentry",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Slack","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-slack",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Snapchat","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-snapchat",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Stripe","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-stripe",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["SurveyMonkey","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-surveymonkey",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Twilio","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-twilio",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Zendesk Chat","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-zendesk-chat",":dev"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Zendesk Support","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support",children:"Configuration"})}),"\n",(0,s.jsxs)(n.li,{children:["Package - ghcr.io/estuary/source-zendesk-support",":dev"]}),"\n"]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>l});var s=r(96540);const c={},i=s.createContext(c);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/65a8f618.a33655b0.js b/pr-preview/pr-1594/assets/js/65a8f618.a33655b0.js deleted file mode 100644 index dffed3f291..0000000000 --- a/pr-preview/pr-1594/assets/js/65a8f618.a33655b0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2172],{54624:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>c,metadata:()=>o,toc:()=>a});var n=t(74848),s=t(28453);const c={},i="Chargebee",o={id:"reference/Connectors/capture-connectors/chargebee",title:"Chargebee",description:"This connector captures data from Chargebee into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/chargebee.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/chargebee",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/chargebee.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Braze",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze"},next:{title:"Confluence",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence"}},d={},a=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function h(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h1,{id:"chargebee",children:"Chargebee"}),"\n",(0,n.jsx)(r.p,{children:"This connector captures data from Chargebee into Flow collections."}),"\n",(0,n.jsxs)(r.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,n.jsx)(r.a,{href:"https://ghcr.io/estuary/source-chargebee:dev",children:(0,n.jsx)(r.code,{children:"ghcr.io/estuary/source-chargebee:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,n.jsxs)(r.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,n.jsx)(r.a,{href:"https://docs.airbyte.com/integrations/sources/chargebee/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,n.jsx)(r.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,n.jsx)(r.p,{children:"The following data resources are supported through the Chargebee APIs:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://apidocs.chargebee.com/docs/api/subscriptions?prod_cat_ver=2#list_subscriptions",children:"Subscriptions"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://apidocs.chargebee.com/docs/api/customers?prod_cat_ver=2#list_customers",children:"Customers"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://apidocs.chargebee.com/docs/api/invoices?prod_cat_ver=2#list_invoices",children:"Invoices"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://apidocs.chargebee.com/docs/api/orders?prod_cat_ver=2#list_orders",children:"Orders"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://apidocs.chargebee.com/docs/api/plans?prod_cat_ver=1&lang=curl#list_plans",children:"Plans"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://apidocs.chargebee.com/docs/api/addons?prod_cat_ver=1&lang=curl#list_addons",children:"Addons"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://apidocs.chargebee.com/docs/api/items?prod_cat_ver=2#list_items",children:"Items"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://apidocs.chargebee.com/docs/api/item_prices?prod_cat_ver=2#list_item_prices",children:"Item Prices"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://apidocs.chargebee.com/docs/api/attached_items?prod_cat_ver=2#list_attached_items",children:"Attached Items"})}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,n.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["To set up the Chargebee source connector, you'll need the ",(0,n.jsx)(r.a,{href:"https://apidocs.chargebee.com/docs/api?prod_cat_ver=2#api_authentication",children:"Chargebee API key"})," and the ",(0,n.jsx)(r.a,{href:"https://apidocs.chargebee.com/docs/api?prod_cat_ver=2",children:"Product Catalog version"}),"."]}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsxs)(r.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,n.jsx)(r.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Chargebee source connector."]}),"\n",(0,n.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,n.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Property"}),(0,n.jsx)(r.th,{children:"Title"}),(0,n.jsx)(r.th,{children:"Description"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Required/Default"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"/site_api_key"})}),(0,n.jsx)(r.td,{children:"API Key"}),(0,n.jsx)(r.td,{children:"Chargebee API Key."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"/site"})}),(0,n.jsx)(r.td,{children:"Site"}),(0,n.jsx)(r.td,{children:"The site prefix for your Chargebee instance."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"/start_date"})}),(0,n.jsx)(r.td,{children:"Start Date"}),(0,n.jsx)(r.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"/product_catalog"})}),(0,n.jsx)(r.td,{children:"Product Catalog"}),(0,n.jsxs)(r.td,{children:["Product Catalog version of your Chargebee site. Instructions on how to find your version you may find under 'API Version' section ",(0,n.jsx)(r.a,{href:"https://apidocs.chargebee.com/docs/api/versioning?prod_cat_ver=2",children:"in the Chargebee docs"}),"."]}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,n.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Property"}),(0,n.jsx)(r.th,{children:"Title"}),(0,n.jsx)(r.th,{children:"Description"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Required/Default"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/stream"})})}),(0,n.jsx)(r.td,{children:"Stream"}),(0,n.jsx)(r.td,{children:"Resource of your Chargebee project from which collections are captured."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/syncMode"})})}),(0,n.jsx)(r.td,{children:"Sync Mode"}),(0,n.jsx)(r.td,{children:"Connection method."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,n.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-chargebee:dev\n config:\n site_api_key: <secret>\n site: <your site>\n start_date: 2017-01-25T00:00:00Z\n product_catalog: <your product catalog>\n bindings:\n - resource:\n stream: items\n syncMode: full_refresh\n target: ${PREFIX}/items\n {...}\n"})})]})}function l(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},28453:(e,r,t)=>{t.d(r,{R:()=>i,x:()=>o});var n=t(96540);const s={},c=n.createContext(s);function i(e){const r=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/6788.0068c12f.js b/pr-preview/pr-1594/assets/js/6788.0068c12f.js deleted file mode 100644 index bd60fa8093..0000000000 --- a/pr-preview/pr-1594/assets/js/6788.0068c12f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6788],{16788:(t,n,e)=>{e.d(n,{diagram:()=>H});var i=e(99702),s=e(26312);function r(t,n){let e;if(void 0===n)for(const i of t)null!=i&&(e>i||void 0===e&&i>=i)&&(e=i);else{let i=-1;for(let s of t)null!=(s=n(s,++i,t))&&(e>s||void 0===e&&s>=s)&&(e=s)}return e}function o(t){return t.target.depth}function l(t,n){return t.sourceLinks.length?t.depth:n-1}function c(t,n){let e=0;if(void 0===n)for(let i of t)(i=+i)&&(e+=i);else{let i=-1;for(let s of t)(s=+n(s,++i,t))&&(e+=s)}return e}function h(t,n){let e;if(void 0===n)for(const i of t)null!=i&&(e<i||void 0===e&&i>=i)&&(e=i);else{let i=-1;for(let s of t)null!=(s=n(s,++i,t))&&(e<s||void 0===e&&s>=s)&&(e=s)}return e}function a(t){return function(){return t}}function u(t,n){return y(t.source,n.source)||t.index-n.index}function f(t,n){return y(t.target,n.target)||t.index-n.index}function y(t,n){return t.y0-n.y0}function d(t){return t.value}function p(t){return t.index}function g(t){return t.nodes}function _(t){return t.links}function x(t,n){const e=t.get(n);if(!e)throw new Error("missing: "+n);return e}function k({nodes:t}){for(const n of t){let t=n.y0,e=t;for(const i of n.sourceLinks)i.y0=t+i.width/2,t+=i.width;for(const i of n.targetLinks)i.y1=e+i.width/2,e+=i.width}}function m(){let t,n,e,i=0,s=0,o=1,m=1,v=24,b=8,w=p,L=l,E=g,A=_,S=6;function M(){const l={nodes:E.apply(null,arguments),links:A.apply(null,arguments)};return function({nodes:t,links:n}){for(const[e,s]of t.entries())s.index=e,s.sourceLinks=[],s.targetLinks=[];const i=new Map(t.map(((n,e)=>[w(n,e,t),n])));for(const[e,s]of n.entries()){s.index=e;let{source:t,target:n}=s;"object"!=typeof t&&(t=s.source=x(i,t)),"object"!=typeof n&&(n=s.target=x(i,n)),t.sourceLinks.push(s),n.targetLinks.push(s)}if(null!=e)for(const{sourceLinks:s,targetLinks:r}of t)s.sort(e),r.sort(e)}(l),function({nodes:t}){for(const n of t)n.value=void 0===n.fixedValue?Math.max(c(n.sourceLinks,d),c(n.targetLinks,d)):n.fixedValue}(l),function({nodes:t}){const n=t.length;let e=new Set(t),i=new Set,s=0;for(;e.size;){for(const t of e){t.depth=s;for(const{target:n}of t.sourceLinks)i.add(n)}if(++s>n)throw new Error("circular link");e=i,i=new Set}}(l),function({nodes:t}){const n=t.length;let e=new Set(t),i=new Set,s=0;for(;e.size;){for(const t of e){t.height=s;for(const{source:n}of t.targetLinks)i.add(n)}if(++s>n)throw new Error("circular link");e=i,i=new Set}}(l),function(e){const l=function({nodes:t}){const e=h(t,(t=>t.depth))+1,s=(o-i-v)/(e-1),r=new Array(e);for(const n of t){const t=Math.max(0,Math.min(e-1,Math.floor(L.call(null,n,e))));n.layer=t,n.x0=i+t*s,n.x1=n.x0+v,r[t]?r[t].push(n):r[t]=[n]}if(n)for(const i of r)i.sort(n);return r}(e);t=Math.min(b,(m-s)/(h(l,(t=>t.length))-1)),function(n){const e=r(n,(n=>(m-s-(n.length-1)*t)/c(n,d)));for(const i of n){let n=s;for(const s of i){s.y0=n,s.y1=n+s.value*e,n=s.y1+t;for(const t of s.sourceLinks)t.width=t.value*e}n=(m-n+t)/(i.length+1);for(let t=0;t<i.length;++t){const e=i[t];e.y0+=n*(t+1),e.y1+=n*(t+1)}N(i)}}(l);for(let t=0;t<S;++t){const n=Math.pow(.99,t),e=Math.max(1-n,(t+1)/S);T(l,n,e),I(l,n,e)}}(l),k(l),l}function I(t,e,i){for(let s=1,r=t.length;s<r;++s){const r=t[s];for(const t of r){let n=0,i=0;for(const{source:e,value:r}of t.targetLinks){let s=r*(t.layer-e.layer);n+=$(e,t)*s,i+=s}if(!(i>0))continue;let s=(n/i-t.y0)*e;t.y0+=s,t.y1+=s,P(t)}void 0===n&&r.sort(y),O(r,i)}}function T(t,e,i){for(let s=t.length-2;s>=0;--s){const r=t[s];for(const t of r){let n=0,i=0;for(const{target:e,value:r}of t.sourceLinks){let s=r*(e.layer-t.layer);n+=j(t,e)*s,i+=s}if(!(i>0))continue;let s=(n/i-t.y0)*e;t.y0+=s,t.y1+=s,P(t)}void 0===n&&r.sort(y),O(r,i)}}function O(n,e){const i=n.length>>1,r=n[i];D(n,r.y0-t,i-1,e),C(n,r.y1+t,i+1,e),D(n,m,n.length-1,e),C(n,s,0,e)}function C(n,e,i,s){for(;i<n.length;++i){const r=n[i],o=(e-r.y0)*s;o>1e-6&&(r.y0+=o,r.y1+=o),e=r.y1+t}}function D(n,e,i,s){for(;i>=0;--i){const r=n[i],o=(r.y1-e)*s;o>1e-6&&(r.y0-=o,r.y1-=o),e=r.y0-t}}function P({sourceLinks:t,targetLinks:n}){if(void 0===e){for(const{source:{sourceLinks:t}}of n)t.sort(f);for(const{target:{targetLinks:n}}of t)n.sort(u)}}function N(t){if(void 0===e)for(const{sourceLinks:n,targetLinks:e}of t)n.sort(f),e.sort(u)}function $(n,e){let i=n.y0-(n.sourceLinks.length-1)*t/2;for(const{target:s,width:r}of n.sourceLinks){if(s===e)break;i+=r+t}for(const{source:t,width:s}of e.targetLinks){if(t===n)break;i-=s}return i}function j(n,e){let i=e.y0-(e.targetLinks.length-1)*t/2;for(const{source:s,width:r}of e.targetLinks){if(s===n)break;i+=r+t}for(const{target:t,width:s}of n.sourceLinks){if(t===e)break;i-=s}return i}return M.update=function(t){return k(t),t},M.nodeId=function(t){return arguments.length?(w="function"==typeof t?t:a(t),M):w},M.nodeAlign=function(t){return arguments.length?(L="function"==typeof t?t:a(t),M):L},M.nodeSort=function(t){return arguments.length?(n=t,M):n},M.nodeWidth=function(t){return arguments.length?(v=+t,M):v},M.nodePadding=function(n){return arguments.length?(b=t=+n,M):b},M.nodes=function(t){return arguments.length?(E="function"==typeof t?t:a(t),M):E},M.links=function(t){return arguments.length?(A="function"==typeof t?t:a(t),M):A},M.linkSort=function(t){return arguments.length?(e=t,M):e},M.size=function(t){return arguments.length?(i=s=0,o=+t[0],m=+t[1],M):[o-i,m-s]},M.extent=function(t){return arguments.length?(i=+t[0][0],o=+t[1][0],s=+t[0][1],m=+t[1][1],M):[[i,s],[o,m]]},M.iterations=function(t){return arguments.length?(S=+t,M):S},M}var v=Math.PI,b=2*v,w=1e-6,L=b-w;function E(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function A(){return new E}E.prototype=A.prototype={constructor:E,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,e,i){this._+="Q"+ +t+","+ +n+","+(this._x1=+e)+","+(this._y1=+i)},bezierCurveTo:function(t,n,e,i,s,r){this._+="C"+ +t+","+ +n+","+ +e+","+ +i+","+(this._x1=+s)+","+(this._y1=+r)},arcTo:function(t,n,e,i,s){t=+t,n=+n,e=+e,i=+i,s=+s;var r=this._x1,o=this._y1,l=e-t,c=i-n,h=r-t,a=o-n,u=h*h+a*a;if(s<0)throw new Error("negative radius: "+s);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(u>w)if(Math.abs(a*l-c*h)>w&&s){var f=e-r,y=i-o,d=l*l+c*c,p=f*f+y*y,g=Math.sqrt(d),_=Math.sqrt(u),x=s*Math.tan((v-Math.acos((d+u-p)/(2*g*_)))/2),k=x/_,m=x/g;Math.abs(k-1)>w&&(this._+="L"+(t+k*h)+","+(n+k*a)),this._+="A"+s+","+s+",0,0,"+ +(a*f>h*y)+","+(this._x1=t+m*l)+","+(this._y1=n+m*c)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,i,s,r){t=+t,n=+n,r=!!r;var o=(e=+e)*Math.cos(i),l=e*Math.sin(i),c=t+o,h=n+l,a=1^r,u=r?i-s:s-i;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+c+","+h:(Math.abs(this._x1-c)>w||Math.abs(this._y1-h)>w)&&(this._+="L"+c+","+h),e&&(u<0&&(u=u%b+b),u>L?this._+="A"+e+","+e+",0,1,"+a+","+(t-o)+","+(n-l)+"A"+e+","+e+",0,1,"+a+","+(this._x1=c)+","+(this._y1=h):u>w&&(this._+="A"+e+","+e+",0,"+ +(u>=v)+","+a+","+(this._x1=t+e*Math.cos(s))+","+(this._y1=n+e*Math.sin(s))))},rect:function(t,n,e,i){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +i+"h"+-e+"Z"},toString:function(){return this._}};const S=A;var M=Array.prototype.slice;function I(t){return function(){return t}}function T(t){return t[0]}function O(t){return t[1]}function C(t){return t.source}function D(t){return t.target}function P(t){var n=C,e=D,i=T,s=O,r=null;function o(){var o,l=M.call(arguments),c=n.apply(this,l),h=e.apply(this,l);if(r||(r=o=S()),t(r,+i.apply(this,(l[0]=c,l)),+s.apply(this,l),+i.apply(this,(l[0]=h,l)),+s.apply(this,l)),o)return r=null,o+""||null}return o.source=function(t){return arguments.length?(n=t,o):n},o.target=function(t){return arguments.length?(e=t,o):e},o.x=function(t){return arguments.length?(i="function"==typeof t?t:I(+t),o):i},o.y=function(t){return arguments.length?(s="function"==typeof t?t:I(+t),o):s},o.context=function(t){return arguments.length?(r=null==t?null:t,o):r},o}function N(t,n,e,i,s){t.moveTo(n,e),t.bezierCurveTo(n=(n+i)/2,e,n,s,i,s)}function $(t){return[t.source.x1,t.y0]}function j(t){return[t.target.x0,t.y1]}function z(){return P(N).source($).target(j)}e(74353),e(16750),e(42838);var U=function(){var t=function(t,n,e,i){for(e=e||{},i=t.length;i--;e[t[i]]=n);return e},n=[1,9],e=[1,10],i=[1,5,10,12],s={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(t,n,e,i,s,r,o){var l=r.length-1;switch(s){case 7:const t=i.findOrCreateNode(r[l-4].trim().replaceAll('""','"')),n=i.findOrCreateNode(r[l-2].trim().replaceAll('""','"')),e=parseFloat(r[l].trim());i.addLink(t,n,e);break;case 8:case 9:case 11:this.$=r[l];break;case 10:this.$=r[l-1]}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:n,20:e},{1:[2,6],7:11,10:[1,12]},t(e,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(i,[2,8]),t(i,[2,9]),{19:[1,16]},t(i,[2,11]),{1:[2,1]},{1:[2,5]},t(e,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:n,20:e},{15:18,16:7,17:8,18:n,20:e},{18:[1,19]},t(e,[2,3]),{12:[1,20]},t(i,[2,10]),{15:21,16:7,17:8,18:n,20:e},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(t,n){if(!n.recoverable){var e=new Error(t);throw e.hash=n,e}this.trace(t)},parse:function(t){var n=this,e=[0],i=[],s=[null],r=[],o=this.table,l="",c=0,h=0,a=r.slice.call(arguments,1),u=Object.create(this.lexer),f={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(f.yy[y]=this.yy[y]);u.setInput(t,f.yy),f.yy.lexer=u,f.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var d=u.yylloc;r.push(d);var p=u.options&&u.options.ranges;"function"==typeof f.yy.parseError?this.parseError=f.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,_,x,k,m,v,b,w,L,E={};;){if(_=e[e.length-1],this.defaultActions[_]?x=this.defaultActions[_]:(null==g&&(L=void 0,"number"!=typeof(L=i.pop()||u.lex()||1)&&(L instanceof Array&&(L=(i=L).pop()),L=n.symbols_[L]||L),g=L),x=o[_]&&o[_][g]),void 0===x||!x.length||!x[0]){var A="";for(m in w=[],o[_])this.terminals_[m]&&m>2&&w.push("'"+this.terminals_[m]+"'");A=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(A,{text:u.match,token:this.terminals_[g]||g,line:u.yylineno,loc:d,expected:w})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+g);switch(x[0]){case 1:e.push(g),s.push(u.yytext),r.push(u.yylloc),e.push(x[1]),g=null,h=u.yyleng,l=u.yytext,c=u.yylineno,d=u.yylloc;break;case 2:if(v=this.productions_[x[1]][1],E.$=s[s.length-v],E._$={first_line:r[r.length-(v||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(v||1)].first_column,last_column:r[r.length-1].last_column},p&&(E._$.range=[r[r.length-(v||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(E,[l,h,c,f.yy,x[1],s,r].concat(a))))return k;v&&(e=e.slice(0,-1*v*2),s=s.slice(0,-1*v),r=r.slice(0,-1*v)),e.push(this.productions_[x[1]][0]),s.push(E.$),r.push(E._$),b=o[e[e.length-2]][e[e.length-1]],e.push(b);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,n){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,n)},setInput:function(t,n){return this.yy=n||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var n=t.length,e=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),e.length-1&&(this.yylineno-=e.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:e?(e.length===i.length?this.yylloc.first_column:0)+i[i.length-e.length].length-e[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),n=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+n+"^"},test_match:function(t,n){var e,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,n,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,n,e,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((e=this._input.match(this.rules[s[r]]))&&(!n||e[0].length>n[0].length)){if(n=e,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,s[r])))return t;if(this._backtrack){n=!1;continue}return!1}if(!this.options.flex)break}return n?!1!==(t=this.test_match(n,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,n,e,i){switch(e){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};function o(){this.yy={}}return s.lexer=r,o.prototype=s,s.Parser=o,new o}();U.parser=U;const F=U;let W=[],q=[],G={};class V{constructor(t,n,e=0){this.source=t,this.target=n,this.value=e}}class X{constructor(t){this.ID=t}}const K={nodesMap:G,getConfig:()=>(0,i.c)().sankey,getNodes:()=>q,getLinks:()=>W,getGraph:()=>({nodes:q.map((t=>({id:t.ID}))),links:W.map((t=>({source:t.source.ID,target:t.target.ID,value:t.value})))}),addLink:(t,n,e)=>{W.push(new V(t,n,e))},findOrCreateNode:t=>(t=i.e.sanitizeText(t,(0,i.c)()),G[t]||(G[t]=new X(t),q.push(G[t])),G[t]),getAccTitle:i.g,setAccTitle:i.s,getAccDescription:i.a,setAccDescription:i.b,getDiagramTitle:i.t,setDiagramTitle:i.q,clear:()=>{W=[],q=[],G={},(0,i.v)()}},Q=class t{static next(n){return new t(n+ ++t.count)}constructor(t){this.id=t,this.href=`#${t}`}toString(){return"url("+this.href+")"}};Q.count=0;let Y=Q;const B={left:function(t){return t.depth},right:function(t,n){return n-1-t.height},center:function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?r(t.sourceLinks,o)-1:0},justify:l},R={draw:function(t,n,e,r){const{securityLevel:o,sankey:l}=(0,i.c)(),c=i.K.sankey;let h;"sandbox"===o&&(h=(0,s.Ltv)("#i"+n));const a="sandbox"===o?(0,s.Ltv)(h.nodes()[0].contentDocument.body):(0,s.Ltv)("body"),u="sandbox"===o?a.select(`[id="${n}"]`):(0,s.Ltv)(`[id="${n}"]`),f=(null==l?void 0:l.width)??c.width,y=(null==l?void 0:l.height)??c.width,d=(null==l?void 0:l.useMaxWidth)??c.useMaxWidth,p=(null==l?void 0:l.nodeAlignment)??c.nodeAlignment,g=(null==l?void 0:l.prefix)??c.prefix,_=(null==l?void 0:l.suffix)??c.suffix,x=(null==l?void 0:l.showValues)??c.showValues,k=r.db.getGraph(),v=B[p];m().nodeId((t=>t.id)).nodeWidth(10).nodePadding(10+(x?15:0)).nodeAlign(v).extent([[0,0],[f,y]])(k);const b=(0,s.UMr)(s.zt);u.append("g").attr("class","nodes").selectAll(".node").data(k.nodes).join("g").attr("class","node").attr("id",(t=>(t.uid=Y.next("node-")).id)).attr("transform",(function(t){return"translate("+t.x0+","+t.y0+")"})).attr("x",(t=>t.x0)).attr("y",(t=>t.y0)).append("rect").attr("height",(t=>t.y1-t.y0)).attr("width",(t=>t.x1-t.x0)).attr("fill",(t=>b(t.id)));u.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(k.nodes).join("text").attr("x",(t=>t.x0<f/2?t.x1+6:t.x0-6)).attr("y",(t=>(t.y1+t.y0)/2)).attr("dy",(x?"0":"0.35")+"em").attr("text-anchor",(t=>t.x0<f/2?"start":"end")).text((({id:t,value:n})=>x?`${t}\n${g}${Math.round(100*n)/100}${_}`:t));const w=u.append("g").attr("class","links").attr("fill","none").attr("stroke-opacity",.5).selectAll(".link").data(k.links).join("g").attr("class","link").style("mix-blend-mode","multiply"),L=(null==l?void 0:l.linkColor)||"gradient";if("gradient"===L){const t=w.append("linearGradient").attr("id",(t=>(t.uid=Y.next("linearGradient-")).id)).attr("gradientUnits","userSpaceOnUse").attr("x1",(t=>t.source.x1)).attr("x2",(t=>t.target.x0));t.append("stop").attr("offset","0%").attr("stop-color",(t=>b(t.source.id))),t.append("stop").attr("offset","100%").attr("stop-color",(t=>b(t.target.id)))}let E;switch(L){case"gradient":E=t=>t.uid;break;case"source":E=t=>b(t.source.id);break;case"target":E=t=>b(t.target.id);break;default:E=L}w.append("path").attr("d",z()).attr("stroke",E).attr("stroke-width",(t=>Math.max(1,t.width))),(0,i.o)(void 0,u,0,d)}},Z=F.parse.bind(F);F.parse=t=>Z((t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,"\n").trim())(t));const H={parser:F,db:K,renderer:R}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/68.81c34607.js b/pr-preview/pr-1594/assets/js/68.81c34607.js deleted file mode 100644 index 6ac9992136..0000000000 --- a/pr-preview/pr-1594/assets/js/68.81c34607.js +++ /dev/null @@ -1,26093 +0,0 @@ -"use strict"; -exports.id = 68; -exports.ids = [68]; -exports.modules = { - -/***/ 21176: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - Zp: () => (/* reexport */ layout) -}); - -// UNUSED EXPORTS: acyclic, normalize, rank - -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js -var uniqueId = __webpack_require__(5664); -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/map.js -var map = __webpack_require__(74722); -// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules -var range = __webpack_require__(91395); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js -var graphlib = __webpack_require__(697); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js -/* - * Simple doubly linked list implementation derived from Cormen, et al., - * "Introduction to Algorithms". - */ - - - -class List { - constructor() { - var sentinel = {}; - sentinel._next = sentinel._prev = sentinel; - this._sentinel = sentinel; - } - dequeue() { - var sentinel = this._sentinel; - var entry = sentinel._prev; - if (entry !== sentinel) { - unlink(entry); - return entry; - } - } - enqueue(entry) { - var sentinel = this._sentinel; - if (entry._prev && entry._next) { - unlink(entry); - } - entry._next = sentinel._next; - sentinel._next._prev = entry; - sentinel._next = entry; - entry._prev = sentinel; - } - toString() { - var strs = []; - var sentinel = this._sentinel; - var curr = sentinel._prev; - while (curr !== sentinel) { - strs.push(JSON.stringify(curr, filterOutLinks)); - curr = curr._prev; - } - return '[' + strs.join(', ') + ']'; - } -} - -function unlink(entry) { - entry._prev._next = entry._next; - entry._next._prev = entry._prev; - delete entry._next; - delete entry._prev; -} - -function filterOutLinks(k, v) { - if (k !== '_next' && k !== '_prev') { - return v; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js - - - - -/* - * A greedy heuristic for finding a feedback arc set for a graph. A feedback - * arc set is a set of edges that can be removed to make a graph acyclic. - * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and - * effective heuristic for the feedback arc set problem." This implementation - * adjusts that from the paper to allow for weighted edges. - */ - - -var DEFAULT_WEIGHT_FN = constant/* default */.A(1); - -function greedyFAS(g, weightFn) { - if (g.nodeCount() <= 1) { - return []; - } - var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); - var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); - - // Expand multi-edges - return flatten/* default */.A( - map/* default */.A(results, function (e) { - return g.outEdges(e.v, e.w); - }) - ); -} - -function doGreedyFAS(g, buckets, zeroIdx) { - var results = []; - var sources = buckets[buckets.length - 1]; - var sinks = buckets[0]; - - var entry; - while (g.nodeCount()) { - while ((entry = sinks.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - while ((entry = sources.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - if (g.nodeCount()) { - for (var i = buckets.length - 2; i > 0; --i) { - entry = buckets[i].dequeue(); - if (entry) { - results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); - break; - } - } - } - } - - return results; -} - -function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { - var results = collectPredecessors ? [] : undefined; - - forEach/* default */.A(g.inEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var uEntry = g.node(edge.v); - - if (collectPredecessors) { - results.push({ v: edge.v, w: edge.w }); - } - - uEntry.out -= weight; - assignBucket(buckets, zeroIdx, uEntry); - }); - - forEach/* default */.A(g.outEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var w = edge.w; - var wEntry = g.node(w); - wEntry['in'] -= weight; - assignBucket(buckets, zeroIdx, wEntry); - }); - - g.removeNode(entry.v); - - return results; -} - -function buildState(g, weightFn) { - var fasGraph = new graphlib/* Graph */.T(); - var maxIn = 0; - var maxOut = 0; - - forEach/* default */.A(g.nodes(), function (v) { - fasGraph.setNode(v, { v: v, in: 0, out: 0 }); - }); - - // Aggregate weights on nodes, but also sum the weights across multi-edges - // into a single edge for the fasGraph. - forEach/* default */.A(g.edges(), function (e) { - var prevWeight = fasGraph.edge(e.v, e.w) || 0; - var weight = weightFn(e); - var edgeWeight = prevWeight + weight; - fasGraph.setEdge(e.v, e.w, edgeWeight); - maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); - maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); - }); - - var buckets = range/* default */.A(maxOut + maxIn + 3).map(function () { - return new List(); - }); - var zeroIdx = maxIn + 1; - - forEach/* default */.A(fasGraph.nodes(), function (v) { - assignBucket(buckets, zeroIdx, fasGraph.node(v)); - }); - - return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; -} - -function assignBucket(buckets, zeroIdx, entry) { - if (!entry.out) { - buckets[0].enqueue(entry); - } else if (!entry['in']) { - buckets[buckets.length - 1].enqueue(entry); - } else { - buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js - - - - - -function run(g) { - var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); - forEach/* default */.A(fas, function (e) { - var label = g.edge(e); - g.removeEdge(e); - label.forwardName = e.name; - label.reversed = true; - g.setEdge(e.w, e.v, label, uniqueId/* default */.A('rev')); - }); - - function weightFn(g) { - return function (e) { - return g.edge(e).weight; - }; - } -} - -function dfsFAS(g) { - var fas = []; - var stack = {}; - var visited = {}; - - function dfs(v) { - if (has/* default */.A(visited, v)) { - return; - } - visited[v] = true; - stack[v] = true; - forEach/* default */.A(g.outEdges(v), function (e) { - if (has/* default */.A(stack, e.w)) { - fas.push(e); - } else { - dfs(e.w); - } - }); - delete stack[v]; - } - - forEach/* default */.A(g.nodes(), dfs); - return fas; -} - -function undo(g) { - forEach/* default */.A(g.edges(), function (e) { - var label = g.edge(e); - if (label.reversed) { - g.removeEdge(e); - - var forwardName = label.forwardName; - delete label.reversed; - delete label.forwardName; - g.setEdge(e.w, e.v, label, forwardName); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules -var merge = __webpack_require__(98879); -// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules -var pick = __webpack_require__(81942); -// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js -var defaults = __webpack_require__(23068); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js - - -/** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ -function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !(0,isSymbol/* default */.A)(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; -} - -/* harmony default export */ const _baseExtremum = (baseExtremum); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js -/** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ -function baseGt(value, other) { - return value > other; -} - -/* harmony default export */ const _baseGt = (baseGt); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js - - - - -/** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ -function max(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseGt) - : undefined; -} - -/* harmony default export */ const lodash_es_max = (max); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; -} - -/* harmony default export */ const lodash_es_last = (last); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js -var _baseAssignValue = __webpack_require__(52528); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js - - - - -/** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ -function mapValues(object, iteratee) { - var result = {}; - iteratee = (0,_baseIteratee/* default */.A)(iteratee, 3); - - (0,_baseForOwn/* default */.A)(object, function(value, key, object) { - (0,_baseAssignValue/* default */.A)(result, key, iteratee(value, key, object)); - }); - return result; -} - -/* harmony default export */ const lodash_es_mapValues = (mapValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js -/** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ -function baseLt(value, other) { - return value < other; -} - -/* harmony default export */ const _baseLt = (baseLt); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js - - - - -/** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ -function min(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_min = (min); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js -var _root = __webpack_require__(41917); -;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js - - -/** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ -var now = function() { - return _root/* default */.A.Date.now(); -}; - -/* harmony default export */ const lodash_es_now = (now); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js - - - - - -/* - * Adds a dummy node to the graph and return v. - */ -function addDummyNode(g, type, attrs, name) { - var v; - do { - v = uniqueId/* default */.A(name); - } while (g.hasNode(v)); - - attrs.dummy = type; - g.setNode(v, attrs); - return v; -} - -/* - * Returns a new graph with only simple edges. Handles aggregation of data - * associated with multi-edges. - */ -function simplify(g) { - var simplified = new graphlib/* Graph */.T().setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - simplified.setNode(v, g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; - var label = g.edge(e); - simplified.setEdge(e.v, e.w, { - weight: simpleLabel.weight + label.weight, - minlen: Math.max(simpleLabel.minlen, label.minlen), - }); - }); - return simplified; -} - -function asNonCompoundGraph(g) { - var simplified = new graphlib/* Graph */.T({ multigraph: g.isMultigraph() }).setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - if (!g.children(v).length) { - simplified.setNode(v, g.node(v)); - } - }); - forEach/* default */.A(g.edges(), function (e) { - simplified.setEdge(e, g.edge(e)); - }); - return simplified; -} - -function successorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var sucs = {}; - _.forEach(g.outEdges(v), function (e) { - sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; - }); - return sucs; - }); - return _.zipObject(g.nodes(), weightMap); -} - -function predecessorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var preds = {}; - _.forEach(g.inEdges(v), function (e) { - preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; - }); - return preds; - }); - return _.zipObject(g.nodes(), weightMap); -} - -/* - * Finds where a line starting at point ({x, y}) would intersect a rectangle - * ({x, y, width, height}) if it were pointing at the rectangle's center. - */ -function intersectRect(rect, point) { - var x = rect.x; - var y = rect.y; - - // Rectangle intersection algorithm from: - // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes - var dx = point.x - x; - var dy = point.y - y; - var w = rect.width / 2; - var h = rect.height / 2; - - if (!dx && !dy) { - throw new Error('Not possible to find intersection inside of the rectangle'); - } - - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - // Intersection is top or bottom of rect. - if (dy < 0) { - h = -h; - } - sx = (h * dx) / dy; - sy = h; - } else { - // Intersection is left or right of rect. - if (dx < 0) { - w = -w; - } - sx = w; - sy = (w * dy) / dx; - } - - return { x: x + sx, y: y + sy }; -} - -/* - * Given a DAG with each node assigned "rank" and "order" properties, this - * function will produce a matrix with the ids of each node. - */ -function buildLayerMatrix(g) { - var layering = map/* default */.A(range/* default */.A(util_maxRank(g) + 1), function () { - return []; - }); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - var rank = node.rank; - if (!isUndefined/* default */.A(rank)) { - layering[rank][node.order] = v; - } - }); - return layering; -} - -/* - * Adjusts the ranks for all nodes in the graph such that all nodes v have - * rank(v) >= 0 and at least one node w has rank(w) = 0. - */ -function normalizeRanks(g) { - var min = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (has/* default */.A(node, 'rank')) { - node.rank -= min; - } - }); -} - -function removeEmptyRanks(g) { - // Ranks may not start at 0, so we need to offset them - var offset = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - - var layers = []; - forEach/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank - offset; - if (!layers[rank]) { - layers[rank] = []; - } - layers[rank].push(v); - }); - - var delta = 0; - var nodeRankFactor = g.graph().nodeRankFactor; - forEach/* default */.A(layers, function (vs, i) { - if (isUndefined/* default */.A(vs) && i % nodeRankFactor !== 0) { - --delta; - } else if (delta) { - forEach/* default */.A(vs, function (v) { - g.node(v).rank += delta; - }); - } - }); -} - -function addBorderNode(g, prefix, rank, order) { - var node = { - width: 0, - height: 0, - }; - if (arguments.length >= 4) { - node.rank = rank; - node.order = order; - } - return addDummyNode(g, 'border', node, prefix); -} - -function util_maxRank(g) { - return lodash_es_max( - map/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank; - if (!isUndefined/* default */.A(rank)) { - return rank; - } - }) - ); -} - -/* - * Partition a collection into two groups: `lhs` and `rhs`. If the supplied - * function returns true for an entry it goes into `lhs`. Otherwise it goes - * into `rhs. - */ -function partition(collection, fn) { - var result = { lhs: [], rhs: [] }; - forEach/* default */.A(collection, function (value) { - if (fn(value)) { - result.lhs.push(value); - } else { - result.rhs.push(value); - } - }); - return result; -} - -/* - * Returns a new function that wraps `fn` with a timer. The wrapper logs the - * time it takes to execute the function. - */ -function util_time(name, fn) { - var start = lodash_es_now(); - try { - return fn(); - } finally { - console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); - } -} - -function notime(name, fn) { - return fn(); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js - - - - - -function addBorderSegments(g) { - function dfs(v) { - var children = g.children(v); - var node = g.node(v); - if (children.length) { - forEach/* default */.A(children, dfs); - } - - if (has/* default */.A(node, 'minRank')) { - node.borderLeft = []; - node.borderRight = []; - for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { - add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); - add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); - } - } - } - - forEach/* default */.A(g.children(), dfs); -} - -function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { - var label = { width: 0, height: 0, rank: rank, borderType: prop }; - var prev = sgNode[prop][rank - 1]; - var curr = addDummyNode(g, 'border', label, prefix); - sgNode[prop][rank] = curr; - g.setParent(curr, sg); - if (prev) { - g.setEdge(prev, curr, { weight: 1 }); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js - - - - -function adjust(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'lr' || rankDir === 'rl') { - swapWidthHeight(g); - } -} - -function coordinate_system_undo(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'bt' || rankDir === 'rl') { - reverseY(g); - } - - if (rankDir === 'lr' || rankDir === 'rl') { - swapXY(g); - swapWidthHeight(g); - } -} - -function swapWidthHeight(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapWidthHeightOne(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - swapWidthHeightOne(g.edge(e)); - }); -} - -function swapWidthHeightOne(attrs) { - var w = attrs.width; - attrs.width = attrs.height; - attrs.height = w; -} - -function reverseY(g) { - forEach/* default */.A(g.nodes(), function (v) { - reverseYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, reverseYOne); - if (has/* default */.A(edge, 'y')) { - reverseYOne(edge); - } - }); -} - -function reverseYOne(attrs) { - attrs.y = -attrs.y; -} - -function swapXY(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapXYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, swapXYOne); - if (has/* default */.A(edge, 'x')) { - swapXYOne(edge); - } - }); -} - -function swapXYOne(attrs) { - var x = attrs.x; - attrs.x = attrs.y; - attrs.y = x; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js - - - - - -/* - * Breaks any long edges in the graph into short segments that span 1 layer - * each. This operation is undoable with the denormalize function. - * - * Pre-conditions: - * - * 1. The input graph is a DAG. - * 2. Each node in the graph has a "rank" property. - * - * Post-condition: - * - * 1. All edges in the graph have a length of 1. - * 2. Dummy nodes are added where edges have been split into segments. - * 3. The graph is augmented with a "dummyChains" attribute which contains - * the first dummy in each chain of dummy nodes produced. - */ -function normalize_run(g) { - g.graph().dummyChains = []; - forEach/* default */.A(g.edges(), function (edge) { - normalizeEdge(g, edge); - }); -} - -function normalizeEdge(g, e) { - var v = e.v; - var vRank = g.node(v).rank; - var w = e.w; - var wRank = g.node(w).rank; - var name = e.name; - var edgeLabel = g.edge(e); - var labelRank = edgeLabel.labelRank; - - if (wRank === vRank + 1) return; - - g.removeEdge(e); - - var dummy, attrs, i; - for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { - edgeLabel.points = []; - attrs = { - width: 0, - height: 0, - edgeLabel: edgeLabel, - edgeObj: e, - rank: vRank, - }; - dummy = addDummyNode(g, 'edge', attrs, '_d'); - if (vRank === labelRank) { - attrs.width = edgeLabel.width; - attrs.height = edgeLabel.height; - // @ts-expect-error - attrs.dummy = 'edge-label'; - // @ts-expect-error - attrs.labelpos = edgeLabel.labelpos; - } - g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); - if (i === 0) { - g.graph().dummyChains.push(dummy); - } - v = dummy; - } - - g.setEdge(v, w, { weight: edgeLabel.weight }, name); -} - -function normalize_undo(g) { - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var origLabel = node.edgeLabel; - var w; - g.setEdge(node.edgeObj, origLabel); - while (node.dummy) { - w = g.successors(v)[0]; - g.removeNode(v); - origLabel.points.push({ x: node.x, y: node.y }); - if (node.dummy === 'edge-label') { - origLabel.x = node.x; - origLabel.y = node.y; - origLabel.width = node.width; - origLabel.height = node.height; - } - v = w; - node = g.node(v); - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js - - - - -/** - * This method is like `_.min` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * the value is ranked. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Math - * @param {Array} array The array to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {*} Returns the minimum value. - * @example - * - * var objects = [{ 'n': 1 }, { 'n': 2 }]; - * - * _.minBy(objects, function(o) { return o.n; }); - * // => { 'n': 1 } - * - * // The `_.property` iteratee shorthand. - * _.minBy(objects, 'n'); - * // => { 'n': 1 } - */ -function minBy(array, iteratee) { - return (array && array.length) - ? _baseExtremum(array, (0,_baseIteratee/* default */.A)(iteratee, 2), _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_minBy = (minBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js - - - - -/* - * Initializes ranks for the input graph using the longest path algorithm. This - * algorithm scales well and is fast in practice, it yields rather poor - * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom - * ranks wide and leaving edges longer than necessary. However, due to its - * speed, this algorithm is good for getting an initial ranking that can be fed - * into other algorithms. - * - * This algorithm does not normalize layers because it will be used by other - * algorithms in most cases. If using this algorithm directly, be sure to - * run normalize at the end. - * - * Pre-conditions: - * - * 1. Input graph is a DAG. - * 2. Input graph node labels can be assigned properties. - * - * Post-conditions: - * - * 1. Each node will be assign an (unnormalized) "rank" property. - */ -function longestPath(g) { - var visited = {}; - - function dfs(v) { - var label = g.node(v); - if (has/* default */.A(visited, v)) { - return label.rank; - } - visited[v] = true; - - var rank = lodash_es_min( - map/* default */.A(g.outEdges(v), function (e) { - return dfs(e.w) - g.edge(e).minlen; - }) - ); - - if ( - rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 - rank === undefined || // return value of _.map([]) for Lodash 4 - rank === null - ) { - // return value of _.map([null]) - rank = 0; - } - - return (label.rank = rank); - } - - forEach/* default */.A(g.sources(), dfs); -} - -/* - * Returns the amount of slack for the given edge. The slack is defined as the - * difference between the length of the edge and its minimum length. - */ -function slack(g, e) { - return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js - - - - - - -/* - * Constructs a spanning tree with tight edges and adjusted the input node's - * ranks to achieve this. A tight edge is one that is has a length that matches - * its "minlen" attribute. - * - * The basic structure for this function is derived from Gansner, et al., "A - * Technique for Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a DAG. - * 2. Graph must be connected. - * 3. Graph must have at least one node. - * 5. Graph nodes must have been previously assigned a "rank" property that - * respects the "minlen" property of incident edges. - * 6. Graph edges must have a "minlen" property. - * - * Post-conditions: - * - * - Graph nodes will have their rank adjusted to ensure that all edges are - * tight. - * - * Returns a tree (undirected graph) that is constructed using only "tight" - * edges. - */ -function feasibleTree(g) { - var t = new graphlib/* Graph */.T({ directed: false }); - - // Choose arbitrary node from which to start our tree - var start = g.nodes()[0]; - var size = g.nodeCount(); - t.setNode(start, {}); - - var edge, delta; - while (tightTree(t, g) < size) { - edge = findMinSlackEdge(t, g); - delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); - shiftRanks(t, g, delta); - } - - return t; -} - -/* - * Finds a maximal tree of tight edges and returns the number of nodes in the - * tree. - */ -function tightTree(t, g) { - function dfs(v) { - forEach/* default */.A(g.nodeEdges(v), function (e) { - var edgeV = e.v, - w = v === edgeV ? e.w : edgeV; - if (!t.hasNode(w) && !slack(g, e)) { - t.setNode(w, {}); - t.setEdge(v, w, {}); - dfs(w); - } - }); - } - - forEach/* default */.A(t.nodes(), dfs); - return t.nodeCount(); -} - -/* - * Finds the edge with the smallest slack that is incident on tree and returns - * it. - */ -function findMinSlackEdge(t, g) { - return lodash_es_minBy(g.edges(), function (e) { - if (t.hasNode(e.v) !== t.hasNode(e.w)) { - return slack(g, e); - } - }); -} - -function shiftRanks(t, g, delta) { - forEach/* default */.A(t.nodes(), function (v) { - g.node(v).rank += delta; - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js - - - - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!(0,isArrayLike/* default */.A)(collection)) { - var iteratee = (0,_baseIteratee/* default */.A)(predicate, 3); - collection = (0,keys/* default */.A)(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; -} - -/* harmony default export */ const _createFind = (createFind); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js - - -/** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ -function toInteger(value) { - var result = (0,toFinite/* default */.A)(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; -} - -/* harmony default export */ const lodash_es_toInteger = (toInteger); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return (0,_baseFindIndex/* default */.A)(array, (0,_baseIteratee/* default */.A)(predicate, 3), index); -} - -/* harmony default export */ const lodash_es_findIndex = (findIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js - - - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = _createFind(lodash_es_findIndex); - -/* harmony default export */ const lodash_es_find = (find); - -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js - - - - - -var DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function dijkstra_dijkstra(g, source, weightFn, edgeFn) { - return runDijkstra( - g, - String(source), - weightFn || DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runDijkstra(g, source, weightFn, edgeFn) { - var results = {}; - var pq = new PriorityQueue(); - var v, vEntry; - - var updateNeighbors = function (edge) { - var w = edge.v !== v ? edge.v : edge.w; - var wEntry = results[w]; - var weight = weightFn(edge); - var distance = vEntry.distance + weight; - - if (weight < 0) { - throw new Error( - 'dijkstra does not allow negative edge weights. ' + - 'Bad edge: ' + - edge + - ' Weight: ' + - weight - ); - } - - if (distance < wEntry.distance) { - wEntry.distance = distance; - wEntry.predecessor = v; - pq.decrease(w, distance); - } - }; - - g.nodes().forEach(function (v) { - var distance = v === source ? 0 : Number.POSITIVE_INFINITY; - results[v] = { distance: distance }; - pq.add(v, distance); - }); - - while (pq.size() > 0) { - v = pq.removeMin(); - vEntry = results[v]; - if (vEntry.distance === Number.POSITIVE_INFINITY) { - break; - } - - edgeFn(v).forEach(updateNeighbors); - } - - return results; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js - - - - - -function dijkstraAll(g, weightFunc, edgeFunc) { - return _.transform( - g.nodes(), - function (acc, v) { - acc[v] = dijkstra(g, v, weightFunc, edgeFunc); - }, - {} - ); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js - - - - -var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function floydWarshall(g, weightFn, edgeFn) { - return runFloydWarshall( - g, - weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runFloydWarshall(g, weightFn, edgeFn) { - var results = {}; - var nodes = g.nodes(); - - nodes.forEach(function (v) { - results[v] = {}; - results[v][v] = { distance: 0 }; - nodes.forEach(function (w) { - if (v !== w) { - results[v][w] = { distance: Number.POSITIVE_INFINITY }; - } - }); - edgeFn(v).forEach(function (edge) { - var w = edge.v === v ? edge.w : edge.v; - var d = weightFn(edge); - results[v][w] = { distance: d, predecessor: v }; - }); - }); - - nodes.forEach(function (k) { - var rowK = results[k]; - nodes.forEach(function (i) { - var rowI = results[i]; - nodes.forEach(function (j) { - var ik = rowI[k]; - var kj = rowK[j]; - var ij = rowI[j]; - var altDistance = ik.distance + kj.distance; - if (altDistance < ij.distance) { - ij.distance = altDistance; - ij.predecessor = kj.predecessor; - } - }); - }); - }); - - return results; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules -var _baseKeys = __webpack_require__(69471); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules -var _baseGetTag = __webpack_require__(88496); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js - - - - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!(0,isArray/* default */.A)(value) && (0,isObjectLike/* default */.A)(value) && (0,_baseGetTag/* default */.A)(value) == stringTag); -} - -/* harmony default export */ const lodash_es_isString = (isString); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js - - -/** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -var asciiSize = (0,_baseProperty/* default */.A)('length'); - -/* harmony default export */ const _asciiSize = (asciiSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -/* harmony default export */ const _hasUnicode = (hasUnicode); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js -/** Used to compose unicode character classes. */ -var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', - _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', - _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', - _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', - _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, - _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', - rsCombo = '[' + _unicodeSize_rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - _unicodeSize_rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', - rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; -} - -/* harmony default export */ const _unicodeSize = (unicodeSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js - - - - -/** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ -function stringSize(string) { - return _hasUnicode(string) - ? _unicodeSize(string) - : _asciiSize(string); -} - -/* harmony default export */ const _stringSize = (stringSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js - - - - - - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ -function size(collection) { - if (collection == null) { - return 0; - } - if ((0,isArrayLike/* default */.A)(collection)) { - return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; - } - var tag = (0,_getTag/* default */.A)(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return (0,_baseKeys/* default */.A)(collection).length; -} - -/* harmony default export */ const lodash_es_size = (size); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js - - - - -topsort_topsort.CycleException = topsort_CycleException; - -function topsort_topsort(g) { - var visited = {}; - var stack = {}; - var results = []; - - function visit(node) { - if (has/* default */.A(stack, node)) { - throw new topsort_CycleException(); - } - - if (!has/* default */.A(visited, node)) { - stack[node] = true; - visited[node] = true; - forEach/* default */.A(g.predecessors(node), visit); - delete stack[node]; - results.push(node); - } - } - - forEach/* default */.A(g.sinks(), visit); - - if (lodash_es_size(visited) !== g.nodeCount()) { - throw new topsort_CycleException(); - } - - return results; -} - -function topsort_CycleException() {} -topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js - - - - -function isAcyclic(g) { - try { - topsort(g); - } catch (e) { - if (e instanceof CycleException) { - return false; - } - throw e; - } - return true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js - - - - -/* - * A helper that preforms a pre- or post-order traversal on the input graph - * and returns the nodes in the order they were visited. If the graph is - * undirected then this algorithm will navigate using neighbors. If the graph - * is directed then this algorithm will navigate using successors. - * - * Order must be one of "pre" or "post". - */ -function dfs(g, vs, order) { - if (!isArray/* default */.A(vs)) { - vs = [vs]; - } - - var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); - - var acc = []; - var visited = {}; - forEach/* default */.A(vs, function (v) { - if (!g.hasNode(v)) { - throw new Error('Graph does not have node: ' + v); - } - - doDfs(g, v, order === 'post', visited, navigation, acc); - }); - return acc; -} - -function doDfs(g, v, postorder, visited, navigation, acc) { - if (!has/* default */.A(visited, v)) { - visited[v] = true; - - if (!postorder) { - acc.push(v); - } - forEach/* default */.A(navigation(v), function (w) { - doDfs(g, w, postorder, visited, navigation, acc); - }); - if (postorder) { - acc.push(v); - } - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js - - - - -function postorder(g, vs) { - return dfs(g, vs, 'post'); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js - - - - -function preorder(g, vs) { - return dfs(g, vs, 'pre'); -} - -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules -var graph = __webpack_require__(73046); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js - - - - - - -function prim(g, weightFunc) { - var result = new Graph(); - var parents = {}; - var pq = new PriorityQueue(); - var v; - - function updateNeighbors(edge) { - var w = edge.v === v ? edge.w : edge.v; - var pri = pq.priority(w); - if (pri !== undefined) { - var edgeWeight = weightFunc(edge); - if (edgeWeight < pri) { - parents[w] = v; - pq.decrease(w, edgeWeight); - } - } - } - - if (g.nodeCount() === 0) { - return result; - } - - _.each(g.nodes(), function (v) { - pq.add(v, Number.POSITIVE_INFINITY); - result.setNode(v); - }); - - // Start from an arbitrary node - pq.decrease(g.nodes()[0], 0); - - var init = false; - while (pq.size() > 0) { - v = pq.removeMin(); - if (_.has(parents, v)) { - result.setEdge(v, parents[v]); - } else if (init) { - throw new Error('Input graph is not connected: ' + g); - } else { - init = true; - } - - g.nodeEdges(v).forEach(updateNeighbors); - } - - return result; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js - - - - - - - - - - - - - - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js - - - - - - - - -// Expose some internals for testing purposes -networkSimplex.initLowLimValues = initLowLimValues; -networkSimplex.initCutValues = initCutValues; -networkSimplex.calcCutValue = calcCutValue; -networkSimplex.leaveEdge = leaveEdge; -networkSimplex.enterEdge = enterEdge; -networkSimplex.exchangeEdges = exchangeEdges; - -/* - * The network simplex algorithm assigns ranks to each node in the input graph - * and iteratively improves the ranking to reduce the length of edges. - * - * Preconditions: - * - * 1. The input graph must be a DAG. - * 2. All nodes in the graph must have an object value. - * 3. All edges in the graph must have "minlen" and "weight" attributes. - * - * Postconditions: - * - * 1. All nodes in the graph will have an assigned "rank" attribute that has - * been optimized by the network simplex algorithm. Ranks start at 0. - * - * - * A rough sketch of the algorithm is as follows: - * - * 1. Assign initial ranks to each node. We use the longest path algorithm, - * which assigns ranks to the lowest position possible. In general this - * leads to very wide bottom ranks and unnecessarily long edges. - * 2. Construct a feasible tight tree. A tight tree is one such that all - * edges in the tree have no slack (difference between length of edge - * and minlen for the edge). This by itself greatly improves the assigned - * rankings by shorting edges. - * 3. Iteratively find edges that have negative cut values. Generally a - * negative cut value indicates that the edge could be removed and a new - * tree edge could be added to produce a more compact graph. - * - * Much of the algorithms here are derived from Gansner, et al., "A Technique - * for Drawing Directed Graphs." The structure of the file roughly follows the - * structure of the overall algorithm. - */ -function networkSimplex(g) { - g = simplify(g); - longestPath(g); - var t = feasibleTree(g); - initLowLimValues(t); - initCutValues(t, g); - - var e, f; - while ((e = leaveEdge(t))) { - f = enterEdge(t, g, e); - exchangeEdges(t, g, e, f); - } -} - -/* - * Initializes cut values for all edges in the tree. - */ -function initCutValues(t, g) { - var vs = postorder(t, t.nodes()); - vs = vs.slice(0, vs.length - 1); - forEach/* default */.A(vs, function (v) { - assignCutValue(t, g, v); - }); -} - -function assignCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - t.edge(child, parent).cutvalue = calcCutValue(t, g, child); -} - -/* - * Given the tight tree, its graph, and a child in the graph calculate and - * return the cut value for the edge between the child and its parent. - */ -function calcCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - // True if the child is on the tail end of the edge in the directed graph - var childIsTail = true; - // The graph's view of the tree edge we're inspecting - var graphEdge = g.edge(child, parent); - // The accumulated cut value for the edge between this node and its parent - var cutValue = 0; - - if (!graphEdge) { - childIsTail = false; - graphEdge = g.edge(parent, child); - } - - cutValue = graphEdge.weight; - - forEach/* default */.A(g.nodeEdges(child), function (e) { - var isOutEdge = e.v === child, - other = isOutEdge ? e.w : e.v; - - if (other !== parent) { - var pointsToHead = isOutEdge === childIsTail, - otherWeight = g.edge(e).weight; - - cutValue += pointsToHead ? otherWeight : -otherWeight; - if (isTreeEdge(t, child, other)) { - var otherCutValue = t.edge(child, other).cutvalue; - cutValue += pointsToHead ? -otherCutValue : otherCutValue; - } - } - }); - - return cutValue; -} - -function initLowLimValues(tree, root) { - if (arguments.length < 2) { - root = tree.nodes()[0]; - } - dfsAssignLowLim(tree, {}, 1, root); -} - -function dfsAssignLowLim(tree, visited, nextLim, v, parent) { - var low = nextLim; - var label = tree.node(v); - - visited[v] = true; - forEach/* default */.A(tree.neighbors(v), function (w) { - if (!has/* default */.A(visited, w)) { - nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); - } - }); - - label.low = low; - label.lim = nextLim++; - if (parent) { - label.parent = parent; - } else { - // TODO should be able to remove this when we incrementally update low lim - delete label.parent; - } - - return nextLim; -} - -function leaveEdge(tree) { - return lodash_es_find(tree.edges(), function (e) { - return tree.edge(e).cutvalue < 0; - }); -} - -function enterEdge(t, g, edge) { - var v = edge.v; - var w = edge.w; - - // For the rest of this function we assume that v is the tail and w is the - // head, so if we don't have this edge in the graph we should flip it to - // match the correct orientation. - if (!g.hasEdge(v, w)) { - v = edge.w; - w = edge.v; - } - - var vLabel = t.node(v); - var wLabel = t.node(w); - var tailLabel = vLabel; - var flip = false; - - // If the root is in the tail of the edge then we need to flip the logic that - // checks for the head and tail nodes in the candidates function below. - if (vLabel.lim > wLabel.lim) { - tailLabel = wLabel; - flip = true; - } - - var candidates = filter/* default */.A(g.edges(), function (edge) { - return ( - flip === isDescendant(t, t.node(edge.v), tailLabel) && - flip !== isDescendant(t, t.node(edge.w), tailLabel) - ); - }); - - return lodash_es_minBy(candidates, function (edge) { - return slack(g, edge); - }); -} - -function exchangeEdges(t, g, e, f) { - var v = e.v; - var w = e.w; - t.removeEdge(v, w); - t.setEdge(f.v, f.w, {}); - initLowLimValues(t); - initCutValues(t, g); - updateRanks(t, g); -} - -function updateRanks(t, g) { - var root = lodash_es_find(t.nodes(), function (v) { - return !g.node(v).parent; - }); - var vs = preorder(t, root); - vs = vs.slice(1); - forEach/* default */.A(vs, function (v) { - var parent = t.node(v).parent, - edge = g.edge(v, parent), - flipped = false; - - if (!edge) { - edge = g.edge(parent, v); - flipped = true; - } - - g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); - }); -} - -/* - * Returns true if the edge is in the tree. - */ -function isTreeEdge(tree, u, v) { - return tree.hasEdge(u, v); -} - -/* - * Returns true if the specified node is descendant of the root node per the - * assigned low and lim attributes in the tree. - */ -function isDescendant(tree, vLabel, rootLabel) { - return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js - - - - - - -/* - * Assigns a rank to each node in the input graph that respects the "minlen" - * constraint specified on edges between nodes. - * - * This basic structure is derived from Gansner, et al., "A Technique for - * Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a connected DAG - * 2. Graph nodes must be objects - * 3. Graph edges must have "weight" and "minlen" attributes - * - * Post-conditions: - * - * 1. Graph nodes will have a "rank" attribute based on the results of the - * algorithm. Ranks can start at any index (including negative), we'll - * fix them up later. - */ -function rank(g) { - switch (g.graph().ranker) { - case 'network-simplex': - networkSimplexRanker(g); - break; - case 'tight-tree': - tightTreeRanker(g); - break; - case 'longest-path': - longestPathRanker(g); - break; - default: - networkSimplexRanker(g); - } -} - -// A fast and simple ranker, but results are far from optimal. -var longestPathRanker = longestPath; - -function tightTreeRanker(g) { - longestPath(g); - feasibleTree(g); -} - -function networkSimplexRanker(g) { - networkSimplex(g); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js - - - - - -/* - * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, - * adds appropriate edges to ensure that all cluster nodes are placed between - * these boundries, and ensures that the graph is connected. - * - * In addition we ensure, through the use of the minlen property, that nodes - * and subgraph border nodes to not end up on the same rank. - * - * Preconditions: - * - * 1. Input graph is a DAG - * 2. Nodes in the input graph has a minlen attribute - * - * Postconditions: - * - * 1. Input graph is connected. - * 2. Dummy nodes are added for the tops and bottoms of subgraphs. - * 3. The minlen attribute for nodes is adjusted to ensure nodes do not - * get placed on the same rank as subgraph border nodes. - * - * The nesting graph idea comes from Sander, "Layout of Compound Directed - * Graphs." - */ -function nesting_graph_run(g) { - var root = addDummyNode(g, 'root', {}, '_root'); - var depths = treeDepths(g); - var height = lodash_es_max(values/* default */.A(depths)) - 1; // Note: depths is an Object not an array - var nodeSep = 2 * height + 1; - - g.graph().nestingRoot = root; - - // Multiply minlen by nodeSep to align nodes on non-border ranks. - forEach/* default */.A(g.edges(), function (e) { - g.edge(e).minlen *= nodeSep; - }); - - // Calculate a weight that is sufficient to keep subgraphs vertically compact - var weight = sumWeights(g) + 1; - - // Create border nodes and link them up - forEach/* default */.A(g.children(), function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - }); - - // Save the multiplier for node layers for later removal of empty border - // layers. - g.graph().nodeRankFactor = nodeSep; -} - -function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { - var children = g.children(v); - if (!children.length) { - if (v !== root) { - g.setEdge(root, v, { weight: 0, minlen: nodeSep }); - } - return; - } - - var top = addBorderNode(g, '_bt'); - var bottom = addBorderNode(g, '_bb'); - var label = g.node(v); - - g.setParent(top, v); - label.borderTop = top; - g.setParent(bottom, v); - label.borderBottom = bottom; - - forEach/* default */.A(children, function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - - var childNode = g.node(child); - var childTop = childNode.borderTop ? childNode.borderTop : child; - var childBottom = childNode.borderBottom ? childNode.borderBottom : child; - var thisWeight = childNode.borderTop ? weight : 2 * weight; - var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; - - g.setEdge(top, childTop, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - - g.setEdge(childBottom, bottom, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - }); - - if (!g.parent(v)) { - g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); - } -} - -function treeDepths(g) { - var depths = {}; - function dfs(v, depth) { - var children = g.children(v); - if (children && children.length) { - forEach/* default */.A(children, function (child) { - dfs(child, depth + 1); - }); - } - depths[v] = depth; - } - forEach/* default */.A(g.children(), function (v) { - dfs(v, 1); - }); - return depths; -} - -function sumWeights(g) { - return reduce/* default */.A( - g.edges(), - function (acc, e) { - return acc + g.edge(e).weight; - }, - 0 - ); -} - -function cleanup(g) { - var graphLabel = g.graph(); - g.removeNode(graphLabel.nestingRoot); - delete graphLabel.nestingRoot; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.nestingEdge) { - g.removeEdge(e); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules -var _baseClone = __webpack_require__(91641); -;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return (0,_baseClone/* default */.A)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js - - - - -function addSubgraphConstraints(g, cg, vs) { - var prev = {}, - rootPrev; - - forEach/* default */.A(vs, function (v) { - var child = g.parent(v), - parent, - prevChild; - while (child) { - parent = g.parent(child); - if (parent) { - prevChild = prev[parent]; - prev[parent] = child; - } else { - prevChild = rootPrev; - rootPrev = child; - } - if (prevChild && prevChild !== child) { - cg.setEdge(prevChild, child); - return; - } - child = parent; - } - }); - - /* - function dfs(v) { - var children = v ? g.children(v) : g.children(); - if (children.length) { - var min = Number.POSITIVE_INFINITY, - subgraphs = []; - _.each(children, function(child) { - var childMin = dfs(child); - if (g.children(child).length) { - subgraphs.push({ v: child, order: childMin }); - } - min = Math.min(min, childMin); - }); - _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { - cg.setEdge(prev.v, curr.v); - return curr; - }); - return min; - } - return g.node(v).order; - } - dfs(undefined); - */ -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js - - - - - -/* - * Constructs a graph that can be used to sort a layer of nodes. The graph will - * contain all base and subgraph nodes from the request layer in their original - * hierarchy and any edges that are incident on these nodes and are of the type - * requested by the "relationship" parameter. - * - * Nodes from the requested rank that do not have parents are assigned a root - * node in the output graph, which is set in the root graph attribute. This - * makes it easy to walk the hierarchy of movable nodes during ordering. - * - * Pre-conditions: - * - * 1. Input graph is a DAG - * 2. Base nodes in the input graph have a rank attribute - * 3. Subgraph nodes in the input graph has minRank and maxRank attributes - * 4. Edges have an assigned weight - * - * Post-conditions: - * - * 1. Output graph has all nodes in the movable rank with preserved - * hierarchy. - * 2. Root nodes in the movable layer are made children of the node - * indicated by the root attribute of the graph. - * 3. Non-movable nodes incident on movable nodes, selected by the - * relationship parameter, are included in the graph (without hierarchy). - * 4. Edges incident on movable nodes, selected by the relationship - * parameter, are added to the output graph. - * 5. The weights for copied edges are aggregated as need, since the output - * graph is not a multi-graph. - */ -function buildLayerGraph(g, rank, relationship) { - var root = createRootNode(g), - result = new graphlib/* Graph */.T({ compound: true }) - .setGraph({ root: root }) - .setDefaultNodeLabel(function (v) { - return g.node(v); - }); - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v), - parent = g.parent(v); - - if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { - result.setNode(v); - result.setParent(v, parent || root); - - // This assumes we have only short edges! - forEach/* default */.A(g[relationship](v), function (e) { - var u = e.v === v ? e.w : e.v, - edge = result.edge(u, v), - weight = !isUndefined/* default */.A(edge) ? edge.weight : 0; - result.setEdge(u, v, { weight: g.edge(e).weight + weight }); - }); - - if (has/* default */.A(node, 'minRank')) { - result.setNode(v, { - borderLeft: node.borderLeft[rank], - borderRight: node.borderRight[rank], - }); - } - } - }); - - return result; -} - -function createRootNode(g) { - var v; - while (g.hasNode((v = uniqueId/* default */.A('_root')))); - return v; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js -/** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ -function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; -} - -/* harmony default export */ const _baseZipObject = (baseZipObject); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js - - - -/** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ -function zipObject(props, values) { - return _baseZipObject(props || [], values || [], _assignValue/* default */.A); -} - -/* harmony default export */ const lodash_es_zipObject = (zipObject); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js -var _baseMap = __webpack_require__(52568); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js -/** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ -function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; -} - -/* harmony default export */ const _baseSortBy = (baseSortBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js - - -/** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ -function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = (0,isSymbol/* default */.A)(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = (0,isSymbol/* default */.A)(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; -} - -/* harmony default export */ const _compareAscending = (compareAscending); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js - - -/** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ -function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = _compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; -} - -/* harmony default export */ const _compareMultiple = (compareMultiple); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js - - - - - - - - - - -/** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ -function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - if ((0,isArray/* default */.A)(iteratee)) { - return function(value) { - return (0,_baseGet/* default */.A)(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } - } - return iteratee; - }); - } else { - iteratees = [identity/* default */.A]; - } - - var index = -1; - iteratees = (0,_arrayMap/* default */.A)(iteratees, (0,_baseUnary/* default */.A)(_baseIteratee/* default */.A)); - - var result = (0,_baseMap/* default */.A)(collection, function(value, key, collection) { - var criteria = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return _baseSortBy(result, function(object, other) { - return _compareMultiple(object, other, orders); - }); -} - -/* harmony default export */ const _baseOrderBy = (baseOrderBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js - - - - - -/** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 30 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] - */ -var sortBy = (0,_baseRest/* default */.A)(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && (0,_isIterateeCall/* default */.A)(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && (0,_isIterateeCall/* default */.A)(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return _baseOrderBy(collection, (0,_baseFlatten/* default */.A)(iteratees, 1), []); -}); - -/* harmony default export */ const lodash_es_sortBy = (sortBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js - - - - -/* - * A function that takes a layering (an array of layers, each with an array of - * ordererd nodes) and a graph and returns a weighted crossing count. - * - * Pre-conditions: - * - * 1. Input graph must be simple (not a multigraph), directed, and include - * only simple edges. - * 2. Edges in the input graph must have assigned weights. - * - * Post-conditions: - * - * 1. The graph and layering matrix are left unchanged. - * - * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." - */ -function crossCount(g, layering) { - var cc = 0; - for (var i = 1; i < layering.length; ++i) { - cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); - } - return cc; -} - -function twoLayerCrossCount(g, northLayer, southLayer) { - // Sort all of the edges between the north and south layers by their position - // in the north layer and then the south. Map these edges to the position of - // their head in the south layer. - var southPos = lodash_es_zipObject( - southLayer, - map/* default */.A(southLayer, function (v, i) { - return i; - }) - ); - var southEntries = flatten/* default */.A( - map/* default */.A(northLayer, function (v) { - return lodash_es_sortBy( - map/* default */.A(g.outEdges(v), function (e) { - return { pos: southPos[e.w], weight: g.edge(e).weight }; - }), - 'pos' - ); - }) - ); - - // Build the accumulator tree - var firstIndex = 1; - while (firstIndex < southLayer.length) firstIndex <<= 1; - var treeSize = 2 * firstIndex - 1; - firstIndex -= 1; - var tree = map/* default */.A(new Array(treeSize), function () { - return 0; - }); - - // Calculate the weighted crossings - var cc = 0; - forEach/* default */.A( - // @ts-expect-error - southEntries.forEach(function (entry) { - var index = entry.pos + firstIndex; - tree[index] += entry.weight; - var weightSum = 0; - // @ts-expect-error - while (index > 0) { - // @ts-expect-error - if (index % 2) { - weightSum += tree[index + 1]; - } - // @ts-expect-error - index = (index - 1) >> 1; - tree[index] += entry.weight; - } - cc += entry.weight * weightSum; - }) - ); - - return cc; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js - - - - -/* - * Assigns an initial order value for each node by performing a DFS search - * starting from nodes in the first rank. Nodes are assigned an order in their - * rank as they are first visited. - * - * This approach comes from Gansner, et al., "A Technique for Drawing Directed - * Graphs." - * - * Returns a layering matrix with an array per layer and each layer sorted by - * the order of its nodes. - */ -function initOrder(g) { - var visited = {}; - var simpleNodes = filter/* default */.A(g.nodes(), function (v) { - return !g.children(v).length; - }); - var maxRank = lodash_es_max( - map/* default */.A(simpleNodes, function (v) { - return g.node(v).rank; - }) - ); - var layers = map/* default */.A(range/* default */.A(maxRank + 1), function () { - return []; - }); - - function dfs(v) { - if (has/* default */.A(visited, v)) return; - visited[v] = true; - var node = g.node(v); - layers[node.rank].push(v); - forEach/* default */.A(g.successors(v), dfs); - } - - var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { - return g.node(v).rank; - }); - forEach/* default */.A(orderedVs, dfs); - - return layers; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js - - - - -function barycenter(g, movable) { - return map/* default */.A(movable, function (v) { - var inV = g.inEdges(v); - if (!inV.length) { - return { v: v }; - } else { - var result = reduce/* default */.A( - inV, - function (acc, e) { - var edge = g.edge(e), - nodeU = g.node(e.v); - return { - sum: acc.sum + edge.weight * nodeU.order, - weight: acc.weight + edge.weight, - }; - }, - { sum: 0, weight: 0 } - ); - - return { - v: v, - barycenter: result.sum / result.weight, - weight: result.weight, - }; - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js - - - - -/* - * Given a list of entries of the form {v, barycenter, weight} and a - * constraint graph this function will resolve any conflicts between the - * constraint graph and the barycenters for the entries. If the barycenters for - * an entry would violate a constraint in the constraint graph then we coalesce - * the nodes in the conflict into a new node that respects the contraint and - * aggregates barycenter and weight information. - * - * This implementation is based on the description in Forster, "A Fast and - * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it - * differs in some specific details. - * - * Pre-conditions: - * - * 1. Each entry has the form {v, barycenter, weight}, or if the node has - * no barycenter, then {v}. - * - * Returns: - * - * A new list of entries of the form {vs, i, barycenter, weight}. The list - * `vs` may either be a singleton or it may be an aggregation of nodes - * ordered such that they do not violate constraints from the constraint - * graph. The property `i` is the lowest original index of any of the - * elements in `vs`. - */ -function resolveConflicts(entries, cg) { - var mappedEntries = {}; - forEach/* default */.A(entries, function (entry, i) { - var tmp = (mappedEntries[entry.v] = { - indegree: 0, - in: [], - out: [], - vs: [entry.v], - i: i, - }); - if (!isUndefined/* default */.A(entry.barycenter)) { - // @ts-expect-error - tmp.barycenter = entry.barycenter; - // @ts-expect-error - tmp.weight = entry.weight; - } - }); - - forEach/* default */.A(cg.edges(), function (e) { - var entryV = mappedEntries[e.v]; - var entryW = mappedEntries[e.w]; - if (!isUndefined/* default */.A(entryV) && !isUndefined/* default */.A(entryW)) { - entryW.indegree++; - entryV.out.push(mappedEntries[e.w]); - } - }); - - var sourceSet = filter/* default */.A(mappedEntries, function (entry) { - // @ts-expect-error - return !entry.indegree; - }); - - return doResolveConflicts(sourceSet); -} - -function doResolveConflicts(sourceSet) { - var entries = []; - - function handleIn(vEntry) { - return function (uEntry) { - if (uEntry.merged) { - return; - } - if ( - isUndefined/* default */.A(uEntry.barycenter) || - isUndefined/* default */.A(vEntry.barycenter) || - uEntry.barycenter >= vEntry.barycenter - ) { - mergeEntries(vEntry, uEntry); - } - }; - } - - function handleOut(vEntry) { - return function (wEntry) { - wEntry['in'].push(vEntry); - if (--wEntry.indegree === 0) { - sourceSet.push(wEntry); - } - }; - } - - while (sourceSet.length) { - var entry = sourceSet.pop(); - entries.push(entry); - forEach/* default */.A(entry['in'].reverse(), handleIn(entry)); - forEach/* default */.A(entry.out, handleOut(entry)); - } - - return map/* default */.A( - filter/* default */.A(entries, function (entry) { - return !entry.merged; - }), - function (entry) { - return pick/* default */.A(entry, ['vs', 'i', 'barycenter', 'weight']); - } - ); -} - -function mergeEntries(target, source) { - var sum = 0; - var weight = 0; - - if (target.weight) { - sum += target.barycenter * target.weight; - weight += target.weight; - } - - if (source.weight) { - sum += source.barycenter * source.weight; - weight += source.weight; - } - - target.vs = source.vs.concat(target.vs); - target.barycenter = sum / weight; - target.weight = weight; - target.i = Math.min(source.i, target.i); - source.merged = true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js - - - - - -function sort(entries, biasRight) { - var parts = partition(entries, function (entry) { - return has/* default */.A(entry, 'barycenter'); - }); - var sortable = parts.lhs, - unsortable = lodash_es_sortBy(parts.rhs, function (entry) { - return -entry.i; - }), - vs = [], - sum = 0, - weight = 0, - vsIndex = 0; - - sortable.sort(compareWithBias(!!biasRight)); - - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - - forEach/* default */.A(sortable, function (entry) { - vsIndex += entry.vs.length; - vs.push(entry.vs); - sum += entry.barycenter * entry.weight; - weight += entry.weight; - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - }); - - var result = { vs: flatten/* default */.A(vs) }; - if (weight) { - result.barycenter = sum / weight; - result.weight = weight; - } - return result; -} - -function consumeUnsortable(vs, unsortable, index) { - var last; - while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { - unsortable.pop(); - vs.push(last.vs); - index++; - } - return index; -} - -function compareWithBias(bias) { - return function (entryV, entryW) { - if (entryV.barycenter < entryW.barycenter) { - return -1; - } else if (entryV.barycenter > entryW.barycenter) { - return 1; - } - - return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; - }; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js - - - - - - - -function sortSubgraph(g, v, cg, biasRight) { - var movable = g.children(v); - var node = g.node(v); - var bl = node ? node.borderLeft : undefined; - var br = node ? node.borderRight : undefined; - var subgraphs = {}; - - if (bl) { - movable = filter/* default */.A(movable, function (w) { - return w !== bl && w !== br; - }); - } - - var barycenters = barycenter(g, movable); - forEach/* default */.A(barycenters, function (entry) { - if (g.children(entry.v).length) { - var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); - subgraphs[entry.v] = subgraphResult; - if (has/* default */.A(subgraphResult, 'barycenter')) { - mergeBarycenters(entry, subgraphResult); - } - } - }); - - var entries = resolveConflicts(barycenters, cg); - expandSubgraphs(entries, subgraphs); - - var result = sort(entries, biasRight); - - if (bl) { - result.vs = flatten/* default */.A([bl, result.vs, br]); - if (g.predecessors(bl).length) { - var blPred = g.node(g.predecessors(bl)[0]), - brPred = g.node(g.predecessors(br)[0]); - if (!has/* default */.A(result, 'barycenter')) { - result.barycenter = 0; - result.weight = 0; - } - result.barycenter = - (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); - result.weight += 2; - } - } - - return result; -} - -function expandSubgraphs(entries, subgraphs) { - forEach/* default */.A(entries, function (entry) { - entry.vs = flatten/* default */.A( - entry.vs.map(function (v) { - if (subgraphs[v]) { - return subgraphs[v].vs; - } - return v; - }) - ); - }); -} - -function mergeBarycenters(target, other) { - if (!isUndefined/* default */.A(target.barycenter)) { - target.barycenter = - (target.barycenter * target.weight + other.barycenter * other.weight) / - (target.weight + other.weight); - target.weight += other.weight; - } else { - target.barycenter = other.barycenter; - target.weight = other.weight; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js - - - - - - - - - - - -/* - * Applies heuristics to minimize edge crossings in the graph and sets the best - * order solution as an order attribute on each node. - * - * Pre-conditions: - * - * 1. Graph must be DAG - * 2. Graph nodes must be objects with a "rank" attribute - * 3. Graph edges must have the "weight" attribute - * - * Post-conditions: - * - * 1. Graph nodes will have an "order" attribute based on the results of the - * algorithm. - */ -function order(g) { - var maxRank = util_maxRank(g), - downLayerGraphs = buildLayerGraphs(g, range/* default */.A(1, maxRank + 1), 'inEdges'), - upLayerGraphs = buildLayerGraphs(g, range/* default */.A(maxRank - 1, -1, -1), 'outEdges'); - - var layering = initOrder(g); - assignOrder(g, layering); - - var bestCC = Number.POSITIVE_INFINITY, - best; - - for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { - sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); - - layering = buildLayerMatrix(g); - var cc = crossCount(g, layering); - if (cc < bestCC) { - lastBest = 0; - best = lodash_es_cloneDeep(layering); - bestCC = cc; - } - } - - assignOrder(g, best); -} - -function buildLayerGraphs(g, ranks, relationship) { - return map/* default */.A(ranks, function (rank) { - return buildLayerGraph(g, rank, relationship); - }); -} - -function sweepLayerGraphs(layerGraphs, biasRight) { - var cg = new graphlib/* Graph */.T(); - forEach/* default */.A(layerGraphs, function (lg) { - var root = lg.graph().root; - var sorted = sortSubgraph(lg, root, cg, biasRight); - forEach/* default */.A(sorted.vs, function (v, i) { - lg.node(v).order = i; - }); - addSubgraphConstraints(lg, cg, sorted.vs); - }); -} - -function assignOrder(g, layering) { - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, i) { - g.node(v).order = i; - }); - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js - - - - -function parentDummyChains(g) { - var postorderNums = parent_dummy_chains_postorder(g); - - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var edgeObj = node.edgeObj; - var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); - var path = pathData.path; - var lca = pathData.lca; - var pathIdx = 0; - var pathV = path[pathIdx]; - var ascending = true; - - while (v !== edgeObj.w) { - node = g.node(v); - - if (ascending) { - while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { - pathIdx++; - } - - if (pathV === lca) { - ascending = false; - } - } - - if (!ascending) { - while ( - pathIdx < path.length - 1 && - g.node((pathV = path[pathIdx + 1])).minRank <= node.rank - ) { - pathIdx++; - } - pathV = path[pathIdx]; - } - - g.setParent(v, pathV); - v = g.successors(v)[0]; - } - }); -} - -// Find a path from v to w through the lowest common ancestor (LCA). Return the -// full path and the LCA. -function findPath(g, postorderNums, v, w) { - var vPath = []; - var wPath = []; - var low = Math.min(postorderNums[v].low, postorderNums[w].low); - var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); - var parent; - var lca; - - // Traverse up from v to find the LCA - parent = v; - do { - parent = g.parent(parent); - vPath.push(parent); - } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); - lca = parent; - - // Traverse from w to LCA - parent = w; - while ((parent = g.parent(parent)) !== lca) { - wPath.push(parent); - } - - return { path: vPath.concat(wPath.reverse()), lca: lca }; -} - -function parent_dummy_chains_postorder(g) { - var result = {}; - var lim = 0; - - function dfs(v) { - var low = lim; - forEach/* default */.A(g.children(v), dfs); - result[v] = { low: low, lim: lim++ }; - } - forEach/* default */.A(g.children(), dfs); - - return result; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js -var _castFunction = __webpack_require__(99922); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js - - - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && (0,_baseForOwn/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee)); -} - -/* harmony default export */ const lodash_es_forOwn = (forOwn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules -var _baseFor = __webpack_require__(4574); -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js - - - - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : (0,_baseFor/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee), keysIn/* default */.A); -} - -/* harmony default export */ const lodash_es_forIn = (forIn); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js - - - - -/* - * This module provides coordinate assignment based on Brandes and Köpf, "Fast - * and Simple Horizontal Coordinate Assignment." - */ - - - -/* - * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" - * property. A type-1 conflict is one where a non-inner segment crosses an - * inner segment. An inner segment is an edge with both incident nodes marked - * with the "dummy" property. - * - * This algorithm scans layer by layer, starting with the second, for type-1 - * conflicts between the current layer and the previous layer. For each layer - * it scans the nodes from left to right until it reaches one that is incident - * on an inner segment. It then scans predecessors to determine if they have - * edges that cross that inner segment. At the end a final scan is done for all - * nodes on the current rank to see if they cross the last visited inner - * segment. - * - * This algorithm (safely) assumes that a dummy node will only be incident on a - * single node in the layers being scanned. - */ -function findType1Conflicts(g, layering) { - var conflicts = {}; - - function visitLayer(prevLayer, layer) { - var // last visited node in the previous layer that is incident on an inner - // segment. - k0 = 0, - // Tracks the last node in this layer scanned for crossings with a type-1 - // segment. - scanPos = 0, - prevLayerLength = prevLayer.length, - lastNode = lodash_es_last(layer); - - forEach/* default */.A(layer, function (v, i) { - var w = findOtherInnerSegmentNode(g, v), - k1 = w ? g.node(w).order : prevLayerLength; - - if (w || v === lastNode) { - forEach/* default */.A(layer.slice(scanPos, i + 1), function (scanNode) { - forEach/* default */.A(g.predecessors(scanNode), function (u) { - var uLabel = g.node(u), - uPos = uLabel.order; - if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { - addConflict(conflicts, u, scanNode); - } - }); - }); - // @ts-expect-error - scanPos = i + 1; - k0 = k1; - } - }); - - return layer; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findType2Conflicts(g, layering) { - var conflicts = {}; - - function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { - var v; - forEach/* default */.A(range/* default */.A(southPos, southEnd), function (i) { - v = south[i]; - if (g.node(v).dummy) { - forEach/* default */.A(g.predecessors(v), function (u) { - var uNode = g.node(u); - if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { - addConflict(conflicts, u, v); - } - }); - } - }); - } - - function visitLayer(north, south) { - var prevNorthPos = -1, - nextNorthPos, - southPos = 0; - - forEach/* default */.A(south, function (v, southLookahead) { - if (g.node(v).dummy === 'border') { - var predecessors = g.predecessors(v); - if (predecessors.length) { - nextNorthPos = g.node(predecessors[0]).order; - scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); - // @ts-expect-error - southPos = southLookahead; - prevNorthPos = nextNorthPos; - } - } - scan(south, southPos, south.length, nextNorthPos, north.length); - }); - - return south; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findOtherInnerSegmentNode(g, v) { - if (g.node(v).dummy) { - return lodash_es_find(g.predecessors(v), function (u) { - return g.node(u).dummy; - }); - } -} - -function addConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - - var conflictsV = conflicts[v]; - if (!conflictsV) { - conflicts[v] = conflictsV = {}; - } - conflictsV[w] = true; -} - -function hasConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - return has/* default */.A(conflicts[v], w); -} - -/* - * Try to align nodes into vertical "blocks" where possible. This algorithm - * attempts to align a node with one of its median neighbors. If the edge - * connecting a neighbor is a type-1 conflict then we ignore that possibility. - * If a previous node has already formed a block with a node after the node - * we're trying to form a block with, we also ignore that possibility - our - * blocks would be split in that scenario. - */ -function verticalAlignment(g, layering, conflicts, neighborFn) { - var root = {}, - align = {}, - pos = {}; - - // We cache the position here based on the layering because the graph and - // layering may be out of sync. The layering matrix is manipulated to - // generate different extreme alignments. - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, order) { - root[v] = v; - align[v] = v; - pos[v] = order; - }); - }); - - forEach/* default */.A(layering, function (layer) { - var prevIdx = -1; - forEach/* default */.A(layer, function (v) { - var ws = neighborFn(v); - if (ws.length) { - ws = lodash_es_sortBy(ws, function (w) { - return pos[w]; - }); - var mp = (ws.length - 1) / 2; - for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { - var w = ws[i]; - if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { - align[w] = v; - align[v] = root[v] = root[w]; - prevIdx = pos[w]; - } - } - } - }); - }); - - return { root: root, align: align }; -} - -function horizontalCompaction(g, layering, root, align, reverseSep) { - // This portion of the algorithm differs from BK due to a number of problems. - // Instead of their algorithm we construct a new block graph and do two - // sweeps. The first sweep places blocks with the smallest possible - // coordinates. The second sweep removes unused space by moving blocks to the - // greatest coordinates without violating separation. - var xs = {}, - blockG = buildBlockGraph(g, layering, root, reverseSep), - borderType = reverseSep ? 'borderLeft' : 'borderRight'; - - function iterate(setXsFunc, nextNodesFunc) { - var stack = blockG.nodes(); - var elem = stack.pop(); - var visited = {}; - while (elem) { - if (visited[elem]) { - setXsFunc(elem); - } else { - visited[elem] = true; - stack.push(elem); - stack = stack.concat(nextNodesFunc(elem)); - } - - elem = stack.pop(); - } - } - - // First pass, assign smallest coordinates - function pass1(elem) { - xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { - return Math.max(acc, xs[e.v] + blockG.edge(e)); - }, 0); - } - - // Second pass, assign greatest coordinates - function pass2(elem) { - var min = blockG.outEdges(elem).reduce(function (acc, e) { - return Math.min(acc, xs[e.w] - blockG.edge(e)); - }, Number.POSITIVE_INFINITY); - - var node = g.node(elem); - if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { - xs[elem] = Math.max(xs[elem], min); - } - } - - iterate(pass1, blockG.predecessors.bind(blockG)); - iterate(pass2, blockG.successors.bind(blockG)); - - // Assign x coordinates to all nodes - forEach/* default */.A(align, function (v) { - xs[v] = xs[root[v]]; - }); - - return xs; -} - -function buildBlockGraph(g, layering, root, reverseSep) { - var blockGraph = new graphlib/* Graph */.T(), - graphLabel = g.graph(), - sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); - - forEach/* default */.A(layering, function (layer) { - var u; - forEach/* default */.A(layer, function (v) { - var vRoot = root[v]; - blockGraph.setNode(vRoot); - if (u) { - var uRoot = root[u], - prevMax = blockGraph.edge(uRoot, vRoot); - blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); - } - u = v; - }); - }); - - return blockGraph; -} - -/* - * Returns the alignment that has the smallest width of the given alignments. - */ -function findSmallestWidthAlignment(g, xss) { - return lodash_es_minBy(values/* default */.A(xss), function (xs) { - var max = Number.NEGATIVE_INFINITY; - var min = Number.POSITIVE_INFINITY; - - lodash_es_forIn(xs, function (x, v) { - var halfWidth = width(g, v) / 2; - - max = Math.max(x + halfWidth, max); - min = Math.min(x - halfWidth, min); - }); - - return max - min; - }); -} - -/* - * Align the coordinates of each of the layout alignments such that - * left-biased alignments have their minimum coordinate at the same point as - * the minimum coordinate of the smallest width alignment and right-biased - * alignments have their maximum coordinate at the same point as the maximum - * coordinate of the smallest width alignment. - */ -function alignCoordinates(xss, alignTo) { - var alignToVals = values/* default */.A(alignTo), - alignToMin = lodash_es_min(alignToVals), - alignToMax = lodash_es_max(alignToVals); - - forEach/* default */.A(['u', 'd'], function (vert) { - forEach/* default */.A(['l', 'r'], function (horiz) { - var alignment = vert + horiz, - xs = xss[alignment], - delta; - if (xs === alignTo) return; - - var xsVals = values/* default */.A(xs); - delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); - - if (delta) { - xss[alignment] = lodash_es_mapValues(xs, function (x) { - return x + delta; - }); - } - }); - }); -} - -function balance(xss, align) { - return lodash_es_mapValues(xss.ul, function (ignore, v) { - if (align) { - return xss[align.toLowerCase()][v]; - } else { - var xs = lodash_es_sortBy(map/* default */.A(xss, v)); - return (xs[1] + xs[2]) / 2; - } - }); -} - -function positionX(g) { - var layering = buildLayerMatrix(g); - var conflicts = merge/* default */.A(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); - - var xss = {}; - var adjustedLayering; - forEach/* default */.A(['u', 'd'], function (vert) { - adjustedLayering = vert === 'u' ? layering : values/* default */.A(layering).reverse(); - forEach/* default */.A(['l', 'r'], function (horiz) { - if (horiz === 'r') { - adjustedLayering = map/* default */.A(adjustedLayering, function (inner) { - return values/* default */.A(inner).reverse(); - }); - } - - var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); - var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); - var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); - if (horiz === 'r') { - xs = lodash_es_mapValues(xs, function (x) { - return -x; - }); - } - xss[vert + horiz] = xs; - }); - }); - - var smallestWidth = findSmallestWidthAlignment(g, xss); - alignCoordinates(xss, smallestWidth); - return balance(xss, g.graph().align); -} - -function sep(nodeSep, edgeSep, reverseSep) { - return function (g, v, w) { - var vLabel = g.node(v); - var wLabel = g.node(w); - var sum = 0; - var delta; - - sum += vLabel.width / 2; - if (has/* default */.A(vLabel, 'labelpos')) { - switch (vLabel.labelpos.toLowerCase()) { - case 'l': - delta = -vLabel.width / 2; - break; - case 'r': - delta = vLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; - sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; - - sum += wLabel.width / 2; - if (has/* default */.A(wLabel, 'labelpos')) { - switch (wLabel.labelpos.toLowerCase()) { - case 'l': - delta = wLabel.width / 2; - break; - case 'r': - delta = -wLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - return sum; - }; -} - -function width(g, v) { - return g.node(v).width; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js - - - - - - -function position(g) { - g = asNonCompoundGraph(g); - - positionY(g); - lodash_es_forOwn(positionX(g), function (x, v) { - g.node(v).x = x; - }); -} - -function positionY(g) { - var layering = buildLayerMatrix(g); - var rankSep = g.graph().ranksep; - var prevY = 0; - forEach/* default */.A(layering, function (layer) { - var maxHeight = lodash_es_max( - map/* default */.A(layer, function (v) { - return g.node(v).height; - }) - ); - forEach/* default */.A(layer, function (v) { - g.node(v).y = prevY + maxHeight / 2; - }); - prevY += maxHeight + rankSep; - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js - - - - - - - - - - - - - - - -function layout(g, opts) { - var time = opts && opts.debugTiming ? util_time : notime; - time('layout', function () { - var layoutGraph = time(' buildLayoutGraph', function () { - return buildLayoutGraph(g); - }); - time(' runLayout', function () { - runLayout(layoutGraph, time); - }); - time(' updateInputGraph', function () { - updateInputGraph(g, layoutGraph); - }); - }); -} - -function runLayout(g, time) { - time(' makeSpaceForEdgeLabels', function () { - makeSpaceForEdgeLabels(g); - }); - time(' removeSelfEdges', function () { - removeSelfEdges(g); - }); - time(' acyclic', function () { - run(g); - }); - time(' nestingGraph.run', function () { - nesting_graph_run(g); - }); - time(' rank', function () { - rank(asNonCompoundGraph(g)); - }); - time(' injectEdgeLabelProxies', function () { - injectEdgeLabelProxies(g); - }); - time(' removeEmptyRanks', function () { - removeEmptyRanks(g); - }); - time(' nestingGraph.cleanup', function () { - cleanup(g); - }); - time(' normalizeRanks', function () { - normalizeRanks(g); - }); - time(' assignRankMinMax', function () { - assignRankMinMax(g); - }); - time(' removeEdgeLabelProxies', function () { - removeEdgeLabelProxies(g); - }); - time(' normalize.run', function () { - normalize_run(g); - }); - time(' parentDummyChains', function () { - parentDummyChains(g); - }); - time(' addBorderSegments', function () { - addBorderSegments(g); - }); - time(' order', function () { - order(g); - }); - time(' insertSelfEdges', function () { - insertSelfEdges(g); - }); - time(' adjustCoordinateSystem', function () { - adjust(g); - }); - time(' position', function () { - position(g); - }); - time(' positionSelfEdges', function () { - positionSelfEdges(g); - }); - time(' removeBorderNodes', function () { - removeBorderNodes(g); - }); - time(' normalize.undo', function () { - normalize_undo(g); - }); - time(' fixupEdgeLabelCoords', function () { - fixupEdgeLabelCoords(g); - }); - time(' undoCoordinateSystem', function () { - coordinate_system_undo(g); - }); - time(' translateGraph', function () { - translateGraph(g); - }); - time(' assignNodeIntersects', function () { - assignNodeIntersects(g); - }); - time(' reversePoints', function () { - reversePointsForReversedEdges(g); - }); - time(' acyclic.undo', function () { - undo(g); - }); -} - -/* - * Copies final layout information from the layout graph back to the input - * graph. This process only copies whitelisted attributes from the layout graph - * to the input graph, so it serves as a good place to determine what - * attributes can influence layout. - */ -function updateInputGraph(inputGraph, layoutGraph) { - forEach/* default */.A(inputGraph.nodes(), function (v) { - var inputLabel = inputGraph.node(v); - var layoutLabel = layoutGraph.node(v); - - if (inputLabel) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - - if (layoutGraph.children(v).length) { - inputLabel.width = layoutLabel.width; - inputLabel.height = layoutLabel.height; - } - } - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var inputLabel = inputGraph.edge(e); - var layoutLabel = layoutGraph.edge(e); - - inputLabel.points = layoutLabel.points; - if (has/* default */.A(layoutLabel, 'x')) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - } - }); - - inputGraph.graph().width = layoutGraph.graph().width; - inputGraph.graph().height = layoutGraph.graph().height; -} - -var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; -var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; -var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; -var nodeNumAttrs = ['width', 'height']; -var nodeDefaults = { width: 0, height: 0 }; -var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; -var edgeDefaults = { - minlen: 1, - weight: 1, - width: 0, - height: 0, - labeloffset: 10, - labelpos: 'r', -}; -var edgeAttrs = ['labelpos']; - -/* - * Constructs a new graph from the input graph, which can be used for layout. - * This process copies only whitelisted attributes from the input graph to the - * layout graph. Thus this function serves as a good place to determine what - * attributes can influence layout. - */ -function buildLayoutGraph(inputGraph) { - var g = new graphlib/* Graph */.T({ multigraph: true, compound: true }); - var graph = canonicalize(inputGraph.graph()); - - g.setGraph( - merge/* default */.A({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.A(graph, graphAttrs)) - ); - - forEach/* default */.A(inputGraph.nodes(), function (v) { - var node = canonicalize(inputGraph.node(v)); - g.setNode(v, defaults/* default */.A(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); - g.setParent(v, inputGraph.parent(v)); - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var edge = canonicalize(inputGraph.edge(e)); - g.setEdge( - e, - merge/* default */.A({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.A(edge, edgeAttrs)) - ); - }); - - return g; -} - -/* - * This idea comes from the Gansner paper: to account for edge labels in our - * layout we split each rank in half by doubling minlen and halving ranksep. - * Then we can place labels at these mid-points between nodes. - * - * We also add some minimal padding to the width to push the label for the edge - * away from the edge itself a bit. - */ -function makeSpaceForEdgeLabels(g) { - var graph = g.graph(); - graph.ranksep /= 2; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - edge.minlen *= 2; - if (edge.labelpos.toLowerCase() !== 'c') { - if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { - edge.width += edge.labeloffset; - } else { - edge.height += edge.labeloffset; - } - } - }); -} - -/* - * Creates temporary dummy nodes that capture the rank in which each edge's - * label is going to, if it has one of non-zero width and height. We do this - * so that we can safely remove empty ranks while preserving balance for the - * label's position. - */ -function injectEdgeLabelProxies(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.width && edge.height) { - var v = g.node(e.v); - var w = g.node(e.w); - var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; - addDummyNode(g, 'edge-proxy', label, '_ep'); - } - }); -} - -function assignRankMinMax(g) { - var maxRank = 0; - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.borderTop) { - node.minRank = g.node(node.borderTop).rank; - node.maxRank = g.node(node.borderBottom).rank; - // @ts-expect-error - maxRank = lodash_es_max(maxRank, node.maxRank); - } - }); - g.graph().maxRank = maxRank; -} - -function removeEdgeLabelProxies(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'edge-proxy') { - g.edge(node.e).labelRank = node.rank; - g.removeNode(v); - } - }); -} - -function translateGraph(g) { - var minX = Number.POSITIVE_INFINITY; - var maxX = 0; - var minY = Number.POSITIVE_INFINITY; - var maxY = 0; - var graphLabel = g.graph(); - var marginX = graphLabel.marginx || 0; - var marginY = graphLabel.marginy || 0; - - function getExtremes(attrs) { - var x = attrs.x; - var y = attrs.y; - var w = attrs.width; - var h = attrs.height; - minX = Math.min(minX, x - w / 2); - maxX = Math.max(maxX, x + w / 2); - minY = Math.min(minY, y - h / 2); - maxY = Math.max(maxY, y + h / 2); - } - - forEach/* default */.A(g.nodes(), function (v) { - getExtremes(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - getExtremes(edge); - } - }); - - minX -= marginX; - minY -= marginY; - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - node.x -= minX; - node.y -= minY; - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, function (p) { - p.x -= minX; - p.y -= minY; - }); - if (has/* default */.A(edge, 'x')) { - edge.x -= minX; - } - if (has/* default */.A(edge, 'y')) { - edge.y -= minY; - } - }); - - graphLabel.width = maxX - minX + marginX; - graphLabel.height = maxY - minY + marginY; -} - -function assignNodeIntersects(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - var nodeV = g.node(e.v); - var nodeW = g.node(e.w); - var p1, p2; - if (!edge.points) { - edge.points = []; - p1 = nodeW; - p2 = nodeV; - } else { - p1 = edge.points[0]; - p2 = edge.points[edge.points.length - 1]; - } - edge.points.unshift(intersectRect(nodeV, p1)); - edge.points.push(intersectRect(nodeW, p2)); - }); -} - -function fixupEdgeLabelCoords(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - if (edge.labelpos === 'l' || edge.labelpos === 'r') { - edge.width -= edge.labeloffset; - } - switch (edge.labelpos) { - case 'l': - edge.x -= edge.width / 2 + edge.labeloffset; - break; - case 'r': - edge.x += edge.width / 2 + edge.labeloffset; - break; - } - } - }); -} - -function reversePointsForReversedEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.reversed) { - edge.points.reverse(); - } - }); -} - -function removeBorderNodes(g) { - forEach/* default */.A(g.nodes(), function (v) { - if (g.children(v).length) { - var node = g.node(v); - var t = g.node(node.borderTop); - var b = g.node(node.borderBottom); - var l = g.node(lodash_es_last(node.borderLeft)); - var r = g.node(lodash_es_last(node.borderRight)); - - node.width = Math.abs(r.x - l.x); - node.height = Math.abs(b.y - t.y); - node.x = l.x + node.width / 2; - node.y = t.y + node.height / 2; - } - }); - - forEach/* default */.A(g.nodes(), function (v) { - if (g.node(v).dummy === 'border') { - g.removeNode(v); - } - }); -} - -function removeSelfEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - if (e.v === e.w) { - var node = g.node(e.v); - if (!node.selfEdges) { - node.selfEdges = []; - } - node.selfEdges.push({ e: e, label: g.edge(e) }); - g.removeEdge(e); - } - }); -} - -function insertSelfEdges(g) { - var layers = buildLayerMatrix(g); - forEach/* default */.A(layers, function (layer) { - var orderShift = 0; - forEach/* default */.A(layer, function (v, i) { - var node = g.node(v); - node.order = i + orderShift; - forEach/* default */.A(node.selfEdges, function (selfEdge) { - addDummyNode( - g, - 'selfedge', - { - width: selfEdge.label.width, - height: selfEdge.label.height, - rank: node.rank, - order: i + ++orderShift, - e: selfEdge.e, - label: selfEdge.label, - }, - '_se' - ); - }); - delete node.selfEdges; - }); - }); -} - -function positionSelfEdges(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'selfedge') { - var selfNode = g.node(node.e.v); - var x = selfNode.x + selfNode.width / 2; - var y = selfNode.y; - var dx = node.x - x; - var dy = selfNode.height / 2; - g.setEdge(node.e, node.label); - g.removeNode(v); - node.label.points = [ - { x: x + (2 * dx) / 3, y: y - dy }, - { x: x + (5 * dx) / 6, y: y - dy }, - { x: x + dx, y: y }, - { x: x + (5 * dx) / 6, y: y + dy }, - { x: x + (2 * dx) / 3, y: y + dy }, - ]; - node.label.x = node.x; - node.label.y = node.y; - } - }); -} - -function selectNumberAttrs(obj, attrs) { - return lodash_es_mapValues(pick/* default */.A(obj, attrs), Number); -} - -function canonicalize(attrs) { - var newAttrs = {}; - forEach/* default */.A(attrs, function (v, k) { - newAttrs[k.toLowerCase()] = v; - }); - return newAttrs; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js - - - - - - - - -/***/ }), - -/***/ 73046: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - T: () => (/* binding */ Graph) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js -var isFunction = __webpack_require__(89610); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js -var isEmpty = __webpack_require__(66401); -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -/* harmony default export */ const _baseIsNaN = (baseIsNaN); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -/* harmony default export */ const _strictIndexOf = (strictIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js - - - - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? _strictIndexOf(array, value, fromIndex) - : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); -} - -/* harmony default export */ const _baseIndexOf = (baseIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js - - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && _baseIndexOf(array, value, 0) > -1; -} - -/* harmony default export */ const _arrayIncludes = (arrayIncludes); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js -var _Set = __webpack_require__(39857); -;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js -/** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ -function noop() { - // No operation performed. -} - -/* harmony default export */ const lodash_es_noop = (noop); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { - return new _Set/* default */.A(values); -}; - -/* harmony default export */ const _createSet = (createSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js - - - - - - - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = _arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = _arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : _createSet(array); - if (set) { - return (0,_setToArray/* default */.A)(set); - } - isCommon = false; - includes = _cacheHas/* default */.A; - seen = new _SetCache/* default */.A; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -/* harmony default export */ const _baseUniq = (baseUniq); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js -var isArrayLikeObject = __webpack_require__(53533); -;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js - - - - - -/** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ -var union = (0,_baseRest/* default */.A)(function(arrays) { - return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); -}); - -/* harmony default export */ const lodash_es_union = (union); - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js - - -var DEFAULT_EDGE_NAME = '\x00'; -var GRAPH_NODE = '\x00'; -var EDGE_KEY_DELIM = '\x01'; - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. -class Graph { - constructor(opts = {}) { - this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; - this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; - this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; - - // Label for the graph itself - this._label = undefined; - - // Defaults to be set when creating a new node - this._defaultNodeLabelFn = constant/* default */.A(undefined); - - // Defaults to be set when creating a new edge - this._defaultEdgeLabelFn = constant/* default */.A(undefined); - - // v -> label - this._nodes = {}; - - if (this._isCompound) { - // v -> parent - this._parent = {}; - - // v -> children - this._children = {}; - this._children[GRAPH_NODE] = {}; - } - - // v -> edgeObj - this._in = {}; - - // u -> v -> Number - this._preds = {}; - - // v -> edgeObj - this._out = {}; - - // v -> w -> Number - this._sucs = {}; - - // e -> edgeObj - this._edgeObjs = {}; - - // e -> label - this._edgeLabels = {}; - } - /* === Graph functions ========= */ - isDirected() { - return this._isDirected; - } - isMultigraph() { - return this._isMultigraph; - } - isCompound() { - return this._isCompound; - } - setGraph(label) { - this._label = label; - return this; - } - graph() { - return this._label; - } - /* === Node functions ========== */ - setDefaultNodeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultNodeLabelFn = newDefault; - return this; - } - nodeCount() { - return this._nodeCount; - } - nodes() { - return keys/* default */.A(this._nodes); - } - sources() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._in[v]); - }); - } - sinks() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._out[v]); - }); - } - setNodes(vs, value) { - var args = arguments; - var self = this; - forEach/* default */.A(vs, function (v) { - if (args.length > 1) { - self.setNode(v, value); - } else { - self.setNode(v); - } - }); - return this; - } - setNode(v, value) { - if (has/* default */.A(this._nodes, v)) { - if (arguments.length > 1) { - this._nodes[v] = value; - } - return this; - } - - // @ts-expect-error - this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); - if (this._isCompound) { - this._parent[v] = GRAPH_NODE; - this._children[v] = {}; - this._children[GRAPH_NODE][v] = true; - } - this._in[v] = {}; - this._preds[v] = {}; - this._out[v] = {}; - this._sucs[v] = {}; - ++this._nodeCount; - return this; - } - node(v) { - return this._nodes[v]; - } - hasNode(v) { - return has/* default */.A(this._nodes, v); - } - removeNode(v) { - var self = this; - if (has/* default */.A(this._nodes, v)) { - var removeEdge = function (e) { - self.removeEdge(self._edgeObjs[e]); - }; - delete this._nodes[v]; - if (this._isCompound) { - this._removeFromParentsChildList(v); - delete this._parent[v]; - forEach/* default */.A(this.children(v), function (child) { - self.setParent(child); - }); - delete this._children[v]; - } - forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); - delete this._in[v]; - delete this._preds[v]; - forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); - delete this._out[v]; - delete this._sucs[v]; - --this._nodeCount; - } - return this; - } - setParent(v, parent) { - if (!this._isCompound) { - throw new Error('Cannot set parent in a non-compound graph'); - } - - if (isUndefined/* default */.A(parent)) { - parent = GRAPH_NODE; - } else { - // Coerce parent to string - parent += ''; - for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { - if (ancestor === v) { - throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); - } - } - - this.setNode(parent); - } - - this.setNode(v); - this._removeFromParentsChildList(v); - this._parent[v] = parent; - this._children[parent][v] = true; - return this; - } - _removeFromParentsChildList(v) { - delete this._children[this._parent[v]][v]; - } - parent(v) { - if (this._isCompound) { - var parent = this._parent[v]; - if (parent !== GRAPH_NODE) { - return parent; - } - } - } - children(v) { - if (isUndefined/* default */.A(v)) { - v = GRAPH_NODE; - } - - if (this._isCompound) { - var children = this._children[v]; - if (children) { - return keys/* default */.A(children); - } - } else if (v === GRAPH_NODE) { - return this.nodes(); - } else if (this.hasNode(v)) { - return []; - } - } - predecessors(v) { - var predsV = this._preds[v]; - if (predsV) { - return keys/* default */.A(predsV); - } - } - successors(v) { - var sucsV = this._sucs[v]; - if (sucsV) { - return keys/* default */.A(sucsV); - } - } - neighbors(v) { - var preds = this.predecessors(v); - if (preds) { - return lodash_es_union(preds, this.successors(v)); - } - } - isLeaf(v) { - var neighbors; - if (this.isDirected()) { - neighbors = this.successors(v); - } else { - neighbors = this.neighbors(v); - } - return neighbors.length === 0; - } - filterNodes(filter) { - // @ts-expect-error - var copy = new this.constructor({ - directed: this._isDirected, - multigraph: this._isMultigraph, - compound: this._isCompound, - }); - - copy.setGraph(this.graph()); - - var self = this; - forEach/* default */.A(this._nodes, function (value, v) { - if (filter(v)) { - copy.setNode(v, value); - } - }); - - forEach/* default */.A(this._edgeObjs, function (e) { - // @ts-expect-error - if (copy.hasNode(e.v) && copy.hasNode(e.w)) { - copy.setEdge(e, self.edge(e)); - } - }); - - var parents = {}; - function findParent(v) { - var parent = self.parent(v); - if (parent === undefined || copy.hasNode(parent)) { - parents[v] = parent; - return parent; - } else if (parent in parents) { - return parents[parent]; - } else { - return findParent(parent); - } - } - - if (this._isCompound) { - forEach/* default */.A(copy.nodes(), function (v) { - copy.setParent(v, findParent(v)); - }); - } - - return copy; - } - /* === Edge functions ========== */ - setDefaultEdgeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultEdgeLabelFn = newDefault; - return this; - } - edgeCount() { - return this._edgeCount; - } - edges() { - return values/* default */.A(this._edgeObjs); - } - setPath(vs, value) { - var self = this; - var args = arguments; - reduce/* default */.A(vs, function (v, w) { - if (args.length > 1) { - self.setEdge(v, w, value); - } else { - self.setEdge(v, w); - } - return w; - }); - return this; - } - /* - * setEdge(v, w, [value, [name]]) - * setEdge({ v, w, [name] }, [value]) - */ - setEdge() { - var v, w, name, value; - var valueSpecified = false; - var arg0 = arguments[0]; - - if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { - v = arg0.v; - w = arg0.w; - name = arg0.name; - if (arguments.length === 2) { - value = arguments[1]; - valueSpecified = true; - } - } else { - v = arg0; - w = arguments[1]; - name = arguments[3]; - if (arguments.length > 2) { - value = arguments[2]; - valueSpecified = true; - } - } - - v = '' + v; - w = '' + w; - if (!isUndefined/* default */.A(name)) { - name = '' + name; - } - - var e = edgeArgsToId(this._isDirected, v, w, name); - if (has/* default */.A(this._edgeLabels, e)) { - if (valueSpecified) { - this._edgeLabels[e] = value; - } - return this; - } - - if (!isUndefined/* default */.A(name) && !this._isMultigraph) { - throw new Error('Cannot set a named edge when isMultigraph = false'); - } - - // It didn't exist, so we need to create it. - // First ensure the nodes exist. - this.setNode(v); - this.setNode(w); - - // @ts-expect-error - this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); - - var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); - // Ensure we add undirected edges in a consistent way. - v = edgeObj.v; - w = edgeObj.w; - - Object.freeze(edgeObj); - this._edgeObjs[e] = edgeObj; - incrementOrInitEntry(this._preds[w], v); - incrementOrInitEntry(this._sucs[v], w); - this._in[w][e] = edgeObj; - this._out[v][e] = edgeObj; - this._edgeCount++; - return this; - } - edge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return this._edgeLabels[e]; - } - hasEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return has/* default */.A(this._edgeLabels, e); - } - removeEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - var edge = this._edgeObjs[e]; - if (edge) { - v = edge.v; - w = edge.w; - delete this._edgeLabels[e]; - delete this._edgeObjs[e]; - decrementOrRemoveEntry(this._preds[w], v); - decrementOrRemoveEntry(this._sucs[v], w); - delete this._in[w][e]; - delete this._out[v][e]; - this._edgeCount--; - } - return this; - } - inEdges(v, u) { - var inV = this._in[v]; - if (inV) { - var edges = values/* default */.A(inV); - if (!u) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.v === u; - }); - } - } - outEdges(v, w) { - var outV = this._out[v]; - if (outV) { - var edges = values/* default */.A(outV); - if (!w) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.w === w; - }); - } - } - nodeEdges(v, w) { - var inEdges = this.inEdges(v, w); - if (inEdges) { - return inEdges.concat(this.outEdges(v, w)); - } - } -} - -/* Number of nodes in the graph. Should only be changed by the implementation. */ -Graph.prototype._nodeCount = 0; - -/* Number of edges in the graph. Should only be changed by the implementation. */ -Graph.prototype._edgeCount = 0; - -function incrementOrInitEntry(map, k) { - if (map[k]) { - map[k]++; - } else { - map[k] = 1; - } -} - -function decrementOrRemoveEntry(map, k) { - if (!--map[k]) { - delete map[k]; - } -} - -function edgeArgsToId(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); -} - -function edgeArgsToObj(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - var edgeObj = { v: v, w: w }; - if (name) { - edgeObj.name = name; - } - return edgeObj; -} - -function edgeObjToId(isDirected, edgeObj) { - return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); -} - - -/***/ }), - -/***/ 697: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) -/* harmony export */ }); -/* unused harmony export version */ -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); -// Includes only the "core" of graphlib - - - -const version = '2.1.9-pre'; - - - - -/***/ }), - -/***/ 14075: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ M: () => (/* binding */ write) -/* harmony export */ }); -/* unused harmony export read */ -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69592); -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(50053); -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74722); -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); - - - - - -function write(g) { - var json = { - options: { - directed: g.isDirected(), - multigraph: g.isMultigraph(), - compound: g.isCompound(), - }, - nodes: writeNodes(g), - edges: writeEdges(g), - }; - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(g.graph())) { - json.value = lodash_es__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A(g.graph()); - } - return json; -} - -function writeNodes(g) { - return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A(g.nodes(), function (v) { - var nodeValue = g.node(v); - var parent = g.parent(v); - var node = { v: v }; - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(nodeValue)) { - node.value = nodeValue; - } - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(parent)) { - node.parent = parent; - } - return node; - }); -} - -function writeEdges(g) { - return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A(g.edges(), function (e) { - var edgeValue = g.edge(e); - var edge = { v: e.v, w: e.w }; - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(e.name)) { - edge.name = e.name; - } - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(edgeValue)) { - edge.value = edgeValue; - } - return edge; - }); -} - -function read(json) { - var g = new Graph(json.options).setGraph(json.value); - _.each(json.nodes, function (entry) { - g.setNode(entry.v, entry.value); - if (entry.parent) { - g.setParent(entry.v, entry.parent); - } - }); - _.each(json.edges, function (entry) { - g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); - }); - return g; -} - - -/***/ }), - -/***/ 62062: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _SetCache) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules -var _MapCache = __webpack_require__(29471); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -/* harmony default export */ const _setCacheAdd = (setCacheAdd); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -/* harmony default export */ const _setCacheHas = (setCacheHas); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js - - - - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new _MapCache/* default */.A; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; -SetCache.prototype.has = _setCacheHas; - -/* harmony default export */ const _SetCache = (SetCache); - - -/***/ }), - -/***/ 72641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); - - -/***/ }), - -/***/ 2634: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); - - -/***/ }), - -/***/ 45572: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); - - -/***/ }), - -/***/ 76912: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); - - -/***/ }), - -/***/ 91641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseClone) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js -var _arrayEach = __webpack_require__(72641); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js -var _copyObject = __webpack_require__(22031); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js - - - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssign = (baseAssign); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js - - - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssignIn = (baseAssignIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js -var _cloneBuffer = __webpack_require__(80154); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js -var _copyArray = __webpack_require__(39759); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js -var _getSymbols = __webpack_require__(14792); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js - - - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); -} - -/* harmony default export */ const _copySymbols = (copySymbols); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js -var _getPrototype = __webpack_require__(15647); -// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js -var stubArray = __webpack_require__(13153); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js - - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { - var result = []; - while (object) { - (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); - object = (0,_getPrototype/* default */.A)(object); - } - return result; -}; - -/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js - - - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); -} - -/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js -var _baseGetAllKeys = __webpack_require__(33831); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js - - - - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); -} - -/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/* harmony default export */ const _initCloneArray = (initCloneArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js -var _cloneArrayBuffer = __webpack_require__(90565); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js - - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -/* harmony default export */ const _cloneDataView = (cloneDataView); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -/* harmony default export */ const _cloneRegExp = (cloneRegExp); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js - - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -/* harmony default export */ const _cloneSymbol = (cloneSymbol); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js -var _cloneTypedArray = __webpack_require__(1801); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js - - - - - - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return (0,_cloneArrayBuffer/* default */.A)(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return _cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return (0,_cloneTypedArray/* default */.A)(object, isDeep); - - case mapTag: - return new Ctor; - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return _cloneRegExp(object); - - case setTag: - return new Ctor; - - case symbolTag: - return _cloneSymbol(object); - } -} - -/* harmony default export */ const _initCloneByTag = (initCloneByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules -var _initCloneObject = __webpack_require__(18598); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js - - - -/** `Object#toString` result references. */ -var _baseIsMap_mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; -} - -/* harmony default export */ const _baseIsMap = (baseIsMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js -var _nodeUtil = __webpack_require__(64841); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js - - - - -/* Node.js helper references. */ -var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; - -/* harmony default export */ const lodash_es_isMap = (isMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js - - - -/** `Object#toString` result references. */ -var _baseIsSet_setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; -} - -/* harmony default export */ const _baseIsSet = (baseIsSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js - - - - -/* Node.js helper references. */ -var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; - -/* harmony default export */ const lodash_es_isSet = (isSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js - - - - - - - - - - - - - - - - - - - - - - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - _baseClone_boolTag = '[object Boolean]', - _baseClone_dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - _baseClone_mapTag = '[object Map]', - _baseClone_numberTag = '[object Number]', - objectTag = '[object Object]', - _baseClone_regexpTag = '[object RegExp]', - _baseClone_setTag = '[object Set]', - _baseClone_stringTag = '[object String]', - _baseClone_symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var _baseClone_arrayBufferTag = '[object ArrayBuffer]', - _baseClone_dataViewTag = '[object DataView]', - _baseClone_float32Tag = '[object Float32Array]', - _baseClone_float64Tag = '[object Float64Array]', - _baseClone_int8Tag = '[object Int8Array]', - _baseClone_int16Tag = '[object Int16Array]', - _baseClone_int32Tag = '[object Int32Array]', - _baseClone_uint8Tag = '[object Uint8Array]', - _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', - _baseClone_uint16Tag = '[object Uint16Array]', - _baseClone_uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = -cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = -cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = -cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = -cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = -cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = -cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = -cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = -cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = -cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!(0,isObject/* default */.A)(value)) { - return value; - } - var isArr = (0,isArray/* default */.A)(value); - if (isArr) { - result = _initCloneArray(value); - if (!isDeep) { - return (0,_copyArray/* default */.A)(value, result); - } - } else { - var tag = (0,_getTag/* default */.A)(value), - isFunc = tag == funcTag || tag == genTag; - - if ((0,isBuffer/* default */.A)(value)) { - return (0,_cloneBuffer/* default */.A)(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); - if (!isDeep) { - return isFlat - ? _copySymbolsIn(value, _baseAssignIn(result, value)) - : _copySymbols(value, _baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = _initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new _Stack/* default */.A); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (lodash_es_isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (lodash_es_isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } - - var keysFunc = isFull - ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) - : (isFlat ? keysIn/* default */.A : keys/* default */.A); - - var props = isArr ? undefined : keysFunc(value); - (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -/* harmony default export */ const _baseClone = (baseClone); - - -/***/ }), - -/***/ 6240: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseEach) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js - - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!(0,isArrayLike/* default */.A)(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -/* harmony default export */ const _createBaseEach = (createBaseEach); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js - - - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = _createBaseEach(_baseForOwn/* default */.A); - -/* harmony default export */ const _baseEach = (baseEach); - - -/***/ }), - -/***/ 25707: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); - - -/***/ }), - -/***/ 13588: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseFlatten) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules -var isArguments = __webpack_require__(52274); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js - - - - -/** Built-in value references. */ -var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -/* harmony default export */ const _isFlattenable = (isFlattenable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js - - - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = _isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - (0,_arrayPush/* default */.A)(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -/* harmony default export */ const _baseFlatten = (baseFlatten); - - -/***/ }), - -/***/ 79841: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); - - -/***/ }), - -/***/ 66318: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); - - -/***/ }), - -/***/ 33831: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); - - -/***/ }), - -/***/ 49574: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseIteratee) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arraySome = (arraySome); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js - - - - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!_arraySome(other, function(othValue, othIndex) { - if (!(0,_cacheHas/* default */.A)(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalArrays = (equalArrays); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js -var _Uint8Array = __webpack_require__(43988); -// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js -var eq = __webpack_require__(66984); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -/* harmony default export */ const _mapToArray = (mapToArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _equalByTag_COMPARE_PARTIAL_FLAG = 1, - _equalByTag_COMPARE_UNORDERED_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return (0,eq/* default */.A)(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = _mapToArray; - - case setTag: - var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; - convert || (convert = _setToArray/* default */.A); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -/* harmony default export */ const _equalByTag = (equalByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js - - -/** Used to compose bitmasks for value comparisons. */ -var _equalObjects_COMPARE_PARTIAL_FLAG = 1; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, - objProps = (0,_getAllKeys/* default */.A)(object), - objLength = objProps.length, - othProps = (0,_getAllKeys/* default */.A)(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalObjects = (equalObjects); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules -var isTypedArray = __webpack_require__(33858); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js - - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var _baseIsEqualDeep_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = (0,isArray/* default */.A)(object), - othIsArr = (0,isArray/* default */.A)(other), - objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), - othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && (0,isBuffer/* default */.A)(object)) { - if (!(0,isBuffer/* default */.A)(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new _Stack/* default */.A); - return (objIsArr || (0,isTypedArray/* default */.A)(object)) - ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new _Stack/* default */.A); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new _Stack/* default */.A); - return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js - - - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { - return value !== value && other !== other; - } - return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -/* harmony default export */ const _baseIsEqual = (baseIsEqual); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, - _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new _Stack/* default */.A; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -/* harmony default export */ const _baseIsMatch = (baseIsMatch); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js - - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !(0,isObject/* default */.A)(value); -} - -/* harmony default export */ const _isStrictComparable = (isStrictComparable); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js - - - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = (0,keys/* default */.A)(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, _isStrictComparable(value)]; - } - return result; -} - -/* harmony default export */ const _getMatchData = (getMatchData); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js - - - - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = _getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return _matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || _baseIsMatch(object, source, matchData); - }; -} - -/* harmony default export */ const _baseMatches = (baseMatches); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js - - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); - return result === undefined ? defaultValue : result; -} - -/* harmony default export */ const lodash_es_get = (get); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, - _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { - return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); - } - return function(object) { - var objValue = lodash_es_get(object, path); - return (objValue === undefined && objValue === srcValue) - ? (0,hasIn/* default */.A)(object, path) - : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); - }; -} - -/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js - - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return (0,_baseGet/* default */.A)(object, path); - }; -} - -/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js - - - - - -/** - * Creates a function that returns the value at `path` of a given object. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - * @example - * - * var objects = [ - * { 'a': { 'b': 2 } }, - * { 'a': { 'b': 1 } } - * ]; - * - * _.map(objects, _.property('a.b')); - * // => [2, 1] - * - * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); - * // => [1, 2] - */ -function property(path) { - return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); -} - -/* harmony default export */ const lodash_es_property = (property); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js - - - - - - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity/* default */.A; - } - if (typeof value == 'object') { - return (0,isArray/* default */.A)(value) - ? _baseMatchesProperty(value[0], value[1]) - : _baseMatches(value); - } - return lodash_es_property(value); -} - -/* harmony default export */ const _baseIteratee = (baseIteratee); - - -/***/ }), - -/***/ 52568: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6240); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? Array(collection.length) : []; - - (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); - - -/***/ }), - -/***/ 70805: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); - - -/***/ }), - -/***/ 64099: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); - - -/***/ }), - -/***/ 99922: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); - - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); - - -/***/ }), - -/***/ 7819: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _castPath) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js -var memoize = __webpack_require__(46632); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js - - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = (0,memoize/* default */.A)(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -/* harmony default export */ const _memoizeCapped = (memoizeCapped); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js - - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = _memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/* harmony default export */ const _stringToPath = (stringToPath); - -// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules -var lodash_es_toString = __webpack_require__(28894); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js - - - - - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if ((0,isArray/* default */.A)(value)) { - return value; - } - return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); -} - -/* harmony default export */ const _castPath = (castPath); - - -/***/ }), - -/***/ 19042: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); -/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); - - -/***/ }), - -/***/ 14792: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); -/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); - - -/***/ }), - -/***/ 85054: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); -/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); -/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - - - - - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && - ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); - - -/***/ }), - -/***/ 86586: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); - - - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); - - -/***/ }), - -/***/ 29959: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); - - -/***/ }), - -/***/ 30901: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); - - -/***/ }), - -/***/ 50053: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(91641); - - -/** Used to compose bitmasks for cloning. */ -var CLONE_SYMBOLS_FLAG = 4; - -/** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ -function clone(value) { - return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value, CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone); - - -/***/ }), - -/***/ 23068: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24326); -/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66984); -/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832); -/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55615); - - - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); - - -/***/ }), - -/***/ 11662: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_filter) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js -var _arrayFilter = __webpack_require__(2634); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js - - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - (0,_baseEach/* default */.A)(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -/* harmony default export */ const _baseFilter = (baseFilter); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js - - - - - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ -function filter(collection, predicate) { - var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; - return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); -} - -/* harmony default export */ const lodash_es_filter = (filter); - - -/***/ }), - -/***/ 34098: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13588); - - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(array, 1) : []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); - - -/***/ }), - -/***/ 8058: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); -/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); - - -/***/ }), - -/***/ 48585: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_has) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && _baseHas_hasOwnProperty.call(object, key); -} - -/* harmony default export */ const _baseHas = (baseHas); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js - - - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); -} - -/* harmony default export */ const lodash_es_has = (has); - - -/***/ }), - -/***/ 39188: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_hasIn) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -/* harmony default export */ const _baseHasIn = (baseHasIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js - - - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); -} - -/* harmony default export */ const lodash_es_hasIn = (hasIn); - - -/***/ }), - -/***/ 61882: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); -/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); - - - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); - - -/***/ }), - -/***/ 69592: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); - - -/***/ }), - -/***/ 27422: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); -/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); - - -/***/ }), - -/***/ 74722: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45572); -/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574); -/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52568); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ -function map(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee, 3)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); - - -/***/ }), - -/***/ 81942: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_pick) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules -var _castPath = __webpack_require__(7819); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js -var _isIndex = __webpack_require__(25353); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js - - - - - - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!(0,isObject/* default */.A)(object)) { - return object; - } - path = (0,_castPath/* default */.A)(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = (0,_toKey/* default */.A)(path[index]), - newValue = value; - - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = (0,isObject/* default */.A)(objValue) - ? objValue - : ((0,_isIndex/* default */.A)(path[index + 1]) ? [] : {}); - } - } - (0,_assignValue/* default */.A)(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -/* harmony default export */ const _baseSet = (baseSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js - - - - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = (0,_baseGet/* default */.A)(object, path); - - if (predicate(value, path)) { - _baseSet(result, (0,_castPath/* default */.A)(path, object), value); - } - } - return result; -} - -/* harmony default export */ const _basePickBy = (basePickBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js - - - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, paths) { - return _basePickBy(object, paths, function(value, path) { - return (0,hasIn/* default */.A)(object, path); - }); -} - -/* harmony default export */ const _basePick = (basePick); - -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules -var _overRest = __webpack_require__(76875); -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules -var _setToString = __webpack_require__(67525); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js - - - - -/** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -function flatRest(func) { - return (0,_setToString/* default */.A)((0,_overRest/* default */.A)(func, undefined, flatten/* default */.A), func + ''); -} - -/* harmony default export */ const _flatRest = (flatRest); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js - - - -/** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ -var pick = _flatRest(function(object, paths) { - return object == null ? {} : _basePick(object, paths); -}); - -/* harmony default export */ const lodash_es_pick = (pick); - - -/***/ }), - -/***/ 91395: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_range) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -/* harmony default export */ const _baseRange = (baseRange); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js - - - - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.A)(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = (0,toFinite/* default */.A)(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = (0,toFinite/* default */.A)(end); - } - step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.A)(step); - return _baseRange(start, end, step, fromRight); - }; -} - -/* harmony default export */ const _createRange = (createRange); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js - - -/** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ -var range = _createRange(); - -/* harmony default export */ const lodash_es_range = (range); - - -/***/ }), - -/***/ 89463: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_reduce) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -/* harmony default export */ const _arrayReduce = (arrayReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -/* harmony default export */ const _baseReduce = (baseReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js - - - - - - -/** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ -function reduce(collection, iteratee, accumulator) { - var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, - initAccum = arguments.length < 3; - - return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); -} - -/* harmony default export */ const lodash_es_reduce = (reduce); - - -/***/ }), - -/***/ 13153: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ -function stubArray() { - return []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); - - -/***/ }), - -/***/ 74342: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toFinite) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js - - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/* harmony default export */ const _baseTrim = (baseTrim); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js - - - - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if ((0,isSymbol/* default */.A)(value)) { - return NAN; - } - if ((0,isObject/* default */.A)(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = (0,isObject/* default */.A)(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = _baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/* harmony default export */ const lodash_es_toNumber = (toNumber); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = lodash_es_toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/* harmony default export */ const lodash_es_toFinite = (toFinite); - - -/***/ }), - -/***/ 28894: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toString) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js - - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if ((0,isArray/* default */.A)(value)) { - // Recursively convert values (susceptible to call stack limits). - return (0,_arrayMap/* default */.A)(value, baseToString) + ''; - } - if ((0,isSymbol/* default */.A)(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const _baseToString = (baseToString); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js - - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString_toString(value) { - return value == null ? '' : _baseToString(value); -} - -/* harmony default export */ const lodash_es_toString = (toString_toString); - - -/***/ }), - -/***/ 5664: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28894); - - -/** Used to generate unique IDs. */ -var idCounter = 0; - -/** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ -function uniqueId(prefix) { - var id = ++idCounter; - return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(prefix) + id; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); - - -/***/ }), - -/***/ 38207: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_values) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js - - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return (0,_arrayMap/* default */.A)(props, function(key) { - return object[key]; - }); -} - -/* harmony default export */ const _baseValues = (baseValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js - - - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values(object) { - return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); -} - -/* harmony default export */ const lodash_es_values = (values); - - -/***/ }), - -/***/ 18897: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - a: () => (/* binding */ createText), - c: () => (/* binding */ computeDimensionOfText) -}); - -// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -var constructs_namespaceObject = {}; -__webpack_require__.r(constructs_namespaceObject); -__webpack_require__.d(constructs_namespaceObject, { - attentionMarkers: () => (attentionMarkers), - contentInitial: () => (contentInitial), - disable: () => (disable), - document: () => (constructs_document), - flow: () => (constructs_flow), - flowInitial: () => (flowInitial), - insideSpan: () => (insideSpan), - string: () => (constructs_string), - text: () => (constructs_text) -}); - -// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules -var mermaid_6dc72991 = __webpack_require__(99702); -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js -/** - * @typedef {import('mdast').Root|import('mdast').Content} Node - * - * @typedef Options - * Configuration (optional). - * @property {boolean | null | undefined} [includeImageAlt=true] - * Whether to use `alt` for `image`s. - * @property {boolean | null | undefined} [includeHtml=true] - * Whether to use `value` of HTML. - */ - -/** @type {Options} */ -const emptyOptions = {} - -/** - * Get the text content of a node or list of nodes. - * - * Prefers the node’s plain-text fields, otherwise serializes its children, - * and if the given value is an array, serialize the nodes in it. - * - * @param {unknown} value - * Thing to serialize, typically `Node`. - * @param {Options | null | undefined} [options] - * Configuration (optional). - * @returns {string} - * Serialized `value`. - */ -function lib_toString(value, options) { - const settings = options || emptyOptions - const includeImageAlt = - typeof settings.includeImageAlt === 'boolean' - ? settings.includeImageAlt - : true - const includeHtml = - typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true - - return one(value, includeImageAlt, includeHtml) -} - -/** - * One node or several nodes. - * - * @param {unknown} value - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized node. - */ -function one(value, includeImageAlt, includeHtml) { - if (node(value)) { - if ('value' in value) { - return value.type === 'html' && !includeHtml ? '' : value.value - } - - if (includeImageAlt && 'alt' in value && value.alt) { - return value.alt - } - - if ('children' in value) { - return lib_all(value.children, includeImageAlt, includeHtml) - } - } - - if (Array.isArray(value)) { - return lib_all(value, includeImageAlt, includeHtml) - } - - return '' -} - -/** - * Serialize a list of nodes. - * - * @param {Array<unknown>} values - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized nodes. - */ -function lib_all(values, includeImageAlt, includeHtml) { - /** @type {Array<string>} */ - const result = [] - let index = -1 - - while (++index < values.length) { - result[index] = one(values[index], includeImageAlt, includeHtml) - } - - return result.join('') -} - -/** - * Check if `value` looks like a node. - * - * @param {unknown} value - * Thing. - * @returns {value is Node} - * Whether `value` is a node. - */ -function node(value) { - return Boolean(value && typeof value === 'object') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array<T>} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array<T>} items - * Items to inject into `list`. - * @returns {void} - * Nothing. - */ -function splice(list, start, remove, items) { - const end = list.length - let chunkStart = 0 - /** @type {Array<unknown>} */ - let parameters - - // Make start between zero and `end` (included). - if (start < 0) { - start = -start > end ? 0 : end + start - } else { - start = start > end ? end : start - } - remove = remove > 0 ? remove : 0 - - // No need to chunk the items if there’s only a couple (10k) items. - if (items.length < 10000) { - parameters = Array.from(items) - parameters.unshift(start, remove) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - } else { - // Delete `remove` items starting from `start` - if (remove) list.splice(start, remove) - - // Insert the items in chunks to not cause stack overflows. - while (chunkStart < items.length) { - parameters = items.slice(chunkStart, chunkStart + 10000) - parameters.unshift(start, 0) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - chunkStart += 10000 - start += 10000 - } - } -} - -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array<T>} list - * List to operate on. - * @param {Array<T>} items - * Items to add to `list`. - * @returns {Array<T>} - * Either `list` or `items`. - */ -function push(list, items) { - if (list.length > 0) { - splice(list, list.length, 0, items) - return list - } - return items -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - * @typedef {import('micromark-util-types').Handles} Handles - * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension - * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension - */ - - - -const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty - -/** - * Combine multiple syntax extensions into one. - * - * @param {Array<Extension>} extensions - * List of syntax extensions. - * @returns {NormalizedExtension} - * A single combined extension. - */ -function combineExtensions(extensions) { - /** @type {NormalizedExtension} */ - const all = {} - let index = -1 - - while (++index < extensions.length) { - syntaxExtension(all, extensions[index]) - } - - return all -} - -/** - * Merge `extension` into `all`. - * - * @param {NormalizedExtension} all - * Extension to merge into. - * @param {Extension} extension - * Extension to merge. - * @returns {void} - */ -function syntaxExtension(all, extension) { - /** @type {keyof Extension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - /** @type {Record<string, unknown>} */ - const left = maybe || (all[hook] = {}) - /** @type {Record<string, unknown> | undefined} */ - const right = extension[hook] - /** @type {string} */ - let code - - if (right) { - for (code in right) { - if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] - const value = right[code] - constructs( - // @ts-expect-error Looks like a list. - left[code], - Array.isArray(value) ? value : value ? [value] : [] - ) - } - } - } -} - -/** - * Merge `list` into `existing` (both lists of constructs). - * Mutates `existing`. - * - * @param {Array<unknown>} existing - * @param {Array<unknown>} list - * @returns {void} - */ -function constructs(existing, list) { - let index = -1 - /** @type {Array<unknown>} */ - const before = [] - - while (++index < list.length) { - // @ts-expect-error Looks like an object. - ;(list[index].add === 'after' ? existing : before).push(list[index]) - } - - splice(existing, 0, 0, before) -} - -/** - * Combine multiple HTML extensions into one. - * - * @param {Array<HtmlExtension>} htmlExtensions - * List of HTML extensions. - * @returns {HtmlExtension} - * A single combined HTML extension. - */ -function combineHtmlExtensions(htmlExtensions) { - /** @type {HtmlExtension} */ - const handlers = {} - let index = -1 - - while (++index < htmlExtensions.length) { - htmlExtension(handlers, htmlExtensions[index]) - } - - return handlers -} - -/** - * Merge `extension` into `all`. - * - * @param {HtmlExtension} all - * Extension to merge into. - * @param {HtmlExtension} extension - * Extension to merge. - * @returns {void} - */ -function htmlExtension(all, extension) { - /** @type {keyof HtmlExtension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - const left = maybe || (all[hook] = {}) - const right = extension[hook] - /** @type {keyof Handles} */ - let type - - if (right) { - for (type in right) { - // @ts-expect-error assume document vs regular handler are managed correctly. - left[type] = right[type] - } - } - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js -// This module is generated by `script/`. -// -// CommonMark handles attention (emphasis, strong) markers based on what comes -// before or after them. -// One such difference is if those characters are Unicode punctuation. -// This script is generated from the Unicode data. - -/** - * Regular expression that matches a unicode punctuation character. - */ -const unicodePunctuationRegex = - /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - - -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlpha = regexCheck(/[A-Za-z]/) - -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) - -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) - -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function asciiControl(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code !== null && (code < 32 || code === 127) - ) -} - -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiDigit = regexCheck(/\d/) - -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) - -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) - -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEnding(code) { - return code !== null && code < -2 -} - -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEndingOrSpace(code) { - return code !== null && (code < 0 || code === 32) -} - -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownSpace(code) { - return code === -2 || code === -1 || code === 32 -} - -// Size note: removing ASCII from the regex and using `asciiPunctuation` here -// In fact adds to the bundle size. -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodePunctuation = regexCheck(unicodePunctuationRegex) - -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodeWhitespace = regexCheck(/\s/) - -/** - * Create a code check from a regex. - * - * @param {RegExp} regex - * @returns {(code: Code) => boolean} - */ -function regexCheck(regex) { - return check - - /** - * Check whether a code matches the bound regex. - * - * @param {Code} code - * Character code. - * @returns {boolean} - * Whether the character code matches the bound regex. - */ - function check(code) { - return code !== null && regex.test(String.fromCharCode(code)) - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns - * Start state. - */ -function factorySpace(effects, ok, type, max) { - const limit = max ? max - 1 : Number.POSITIVE_INFINITY - let size = 0 - return start - - /** @type {State} */ - function start(code) { - if (markdownSpace(code)) { - effects.enter(type) - return prefix(code) - } - return ok(code) - } - - /** @type {State} */ - function prefix(code) { - if (markdownSpace(code) && size++ < limit) { - effects.consume(code) - return prefix - } - effects.exit(type) - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - -/** @type {InitialConstruct} */ -const content = { - tokenize: initializeContent -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeContent(effects) { - const contentStart = effects.attempt( - this.parser.constructs.contentInitial, - afterContentStartConstruct, - paragraphInitial - ) - /** @type {Token} */ - let previous - return contentStart - - /** @type {State} */ - function afterContentStartConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, contentStart, 'linePrefix') - } - - /** @type {State} */ - function paragraphInitial(code) { - effects.enter('paragraph') - return lineStart(code) - } - - /** @type {State} */ - function lineStart(code) { - const token = effects.enter('chunkText', { - contentType: 'text', - previous - }) - if (previous) { - previous.next = token - } - previous = token - return data(code) - } - - /** @type {State} */ - function data(code) { - if (code === null) { - effects.exit('chunkText') - effects.exit('paragraph') - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - effects.exit('chunkText') - return lineStart - } - - // Data. - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - -/** - * @typedef {[Construct, ContainerState]} StackItem - */ - - - - -/** @type {InitialConstruct} */ -const document_document = { - tokenize: initializeDocument -} - -/** @type {Construct} */ -const containerConstruct = { - tokenize: tokenizeContainer -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeDocument(effects) { - const self = this - /** @type {Array<StackItem>} */ - const stack = [] - let continued = 0 - /** @type {TokenizeContext | undefined} */ - let childFlow - /** @type {Token | undefined} */ - let childToken - /** @type {number} */ - let lineStartOffset - return start - - /** @type {State} */ - function start(code) { - // First we iterate through the open blocks, starting with the root - // document, and descending through last children down to the last open - // block. - // Each block imposes a condition that the line must satisfy if the block is - // to remain open. - // For example, a block quote requires a `>` character. - // A paragraph requires a non-blank line. - // In this phase we may match all or just some of the open blocks. - // But we cannot close unmatched blocks yet, because we may have a lazy - // continuation line. - if (continued < stack.length) { - const item = stack[continued] - self.containerState = item[1] - return effects.attempt( - item[0].continuation, - documentContinue, - checkNewContainers - )(code) - } - - // Done. - return checkNewContainers(code) - } - - /** @type {State} */ - function documentContinue(code) { - continued++ - - // Note: this field is called `_closeFlow` but it also closes containers. - // Perhaps a good idea to rename it but it’s already used in the wild by - // extensions. - if (self.containerState._closeFlow) { - self.containerState._closeFlow = undefined - if (childFlow) { - closeFlow() - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when dealing with lazy lines in `writeToChild`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {Point | undefined} */ - let point - - // Find the flow chunk. - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - point = self.events[indexBeforeFlow][1].end - break - } - } - exitContainers(continued) - - // Fix positions. - let index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - return checkNewContainers(code) - } - return start(code) - } - - /** @type {State} */ - function checkNewContainers(code) { - // Next, after consuming the continuation markers for existing blocks, we - // look for new block starts (e.g. `>` for a block quote). - // If we encounter a new block start, we close any blocks unmatched in - // step 1 before creating the new block as a child of the last matched - // block. - if (continued === stack.length) { - // No need to `check` whether there’s a container, of `exitContainers` - // would be moot. - // We can instead immediately `attempt` to parse one. - if (!childFlow) { - return documentContinued(code) - } - - // If we have concrete content, such as block HTML or fenced code, - // we can’t have containers “pierce” into them, so we can immediately - // start. - if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { - return flowStart(code) - } - - // If we do have flow, it could still be a blank line, - // but we’d be interrupting it w/ a new container if there’s a current - // construct. - // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer - // needed in micromark-extension-gfm-table@1.0.6). - self.interrupt = Boolean( - childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack - ) - } - - // Check if there is a new container. - self.containerState = {} - return effects.check( - containerConstruct, - thereIsANewContainer, - thereIsNoNewContainer - )(code) - } - - /** @type {State} */ - function thereIsANewContainer(code) { - if (childFlow) closeFlow() - exitContainers(continued) - return documentContinued(code) - } - - /** @type {State} */ - function thereIsNoNewContainer(code) { - self.parser.lazy[self.now().line] = continued !== stack.length - lineStartOffset = self.now().offset - return flowStart(code) - } - - /** @type {State} */ - function documentContinued(code) { - // Try new containers. - self.containerState = {} - return effects.attempt( - containerConstruct, - containerContinue, - flowStart - )(code) - } - - /** @type {State} */ - function containerContinue(code) { - continued++ - stack.push([self.currentConstruct, self.containerState]) - // Try another. - return documentContinued(code) - } - - /** @type {State} */ - function flowStart(code) { - if (code === null) { - if (childFlow) closeFlow() - exitContainers(0) - effects.consume(code) - return - } - childFlow = childFlow || self.parser.flow(self.now()) - effects.enter('chunkFlow', { - contentType: 'flow', - previous: childToken, - _tokenizer: childFlow - }) - return flowContinue(code) - } - - /** @type {State} */ - function flowContinue(code) { - if (code === null) { - writeToChild(effects.exit('chunkFlow'), true) - exitContainers(0) - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - writeToChild(effects.exit('chunkFlow')) - // Get ready for the next line. - continued = 0 - self.interrupt = undefined - return start - } - effects.consume(code) - return flowContinue - } - - /** - * @param {Token} token - * @param {boolean | undefined} [eof] - * @returns {void} - */ - function writeToChild(token, eof) { - const stream = self.sliceStream(token) - if (eof) stream.push(null) - token.previous = childToken - if (childToken) childToken.next = token - childToken = token - childFlow.defineSkip(token.start) - childFlow.write(stream) - - // Alright, so we just added a lazy line: - // - // ```markdown - // > a - // b. - // - // Or: - // - // > ~~~c - // d - // - // Or: - // - // > | e | - // f - // ``` - // - // The construct in the second example (fenced code) does not accept lazy - // lines, so it marked itself as done at the end of its first line, and - // then the content construct parses `d`. - // Most constructs in markdown match on the first line: if the first line - // forms a construct, a non-lazy line can’t “unmake” it. - // - // The construct in the third example is potentially a GFM table, and - // those are *weird*. - // It *could* be a table, from the first line, if the following line - // matches a condition. - // In this case, that second line is lazy, which “unmakes” the first line - // and turns the whole into one content block. - // - // We’ve now parsed the non-lazy and the lazy line, and can figure out - // whether the lazy line started a new flow block. - // If it did, we exit the current containers between the two flow blocks. - if (self.parser.lazy[token.start.line]) { - let index = childFlow.events.length - while (index--) { - if ( - // The token starts before the line ending… - childFlow.events[index][1].start.offset < lineStartOffset && - // …and either is not ended yet… - (!childFlow.events[index][1].end || - // …or ends after it. - childFlow.events[index][1].end.offset > lineStartOffset) - ) { - // Exit: there’s still something open, which means it’s a lazy line - // part of something. - return - } - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when closing flow in `documentContinue`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {boolean | undefined} */ - let seen - /** @type {Point | undefined} */ - let point - - // Find the previous chunk (the one before the lazy line). - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - if (seen) { - point = self.events[indexBeforeFlow][1].end - break - } - seen = true - } - } - exitContainers(continued) - - // Fix positions. - index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - } - } - - /** - * @param {number} size - * @returns {void} - */ - function exitContainers(size) { - let index = stack.length - - // Exit open containers. - while (index-- > size) { - const entry = stack[index] - self.containerState = entry[1] - entry[0].exit.call(self, effects) - } - stack.length = size - } - function closeFlow() { - childFlow.write([null]) - childToken = undefined - childFlow = undefined - self.containerState._closeFlow = undefined - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContainer(effects, ok, nok) { - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(this.parser.constructs.document, ok, nok), - 'linePrefix', - this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blankLine = { - tokenize: tokenizeBlankLine, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLine(effects, ok, nok) { - return start - - /** - * Start of blank line. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - return markdownSpace(code) - ? factorySpace(effects, after, 'linePrefix')(code) - : after(code) - } - - /** - * At eof/eol, after optional whitespace. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Token} Token - */ - - -/** - * Tokenize subcontent. - * - * @param {Array<Event>} events - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -function subtokenize(events) { - /** @type {Record<string, number>} */ - const jumps = {} - let index = -1 - /** @type {Event} */ - let event - /** @type {number | undefined} */ - let lineIndex - /** @type {number} */ - let otherIndex - /** @type {Event} */ - let otherEvent - /** @type {Array<Event>} */ - let parameters - /** @type {Array<Event>} */ - let subevents - /** @type {boolean | undefined} */ - let more - while (++index < events.length) { - while (index in jumps) { - index = jumps[index] - } - event = events[index] - - // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. - if ( - index && - event[1].type === 'chunkFlow' && - events[index - 1][1].type === 'listItemPrefix' - ) { - subevents = event[1]._tokenizer.events - otherIndex = 0 - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'lineEndingBlank' - ) { - otherIndex += 2 - } - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'content' - ) { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === 'content') { - break - } - if (subevents[otherIndex][1].type === 'chunkText') { - subevents[otherIndex][1]._isInFirstContentOfListItem = true - otherIndex++ - } - } - } - } - - // Enter. - if (event[0] === 'enter') { - if (event[1].contentType) { - Object.assign(jumps, subcontent(events, index)) - index = jumps[index] - more = true - } - } - // Exit. - else if (event[1]._container) { - otherIndex = index - lineIndex = undefined - while (otherIndex--) { - otherEvent = events[otherIndex] - if ( - otherEvent[1].type === 'lineEnding' || - otherEvent[1].type === 'lineEndingBlank' - ) { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - } - otherEvent[1].type = 'lineEnding' - lineIndex = otherIndex - } - } else { - break - } - } - if (lineIndex) { - // Fix position. - event[1].end = Object.assign({}, events[lineIndex][1].start) - - // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index) - parameters.unshift(event) - splice(events, lineIndex, index - lineIndex + 1, parameters) - } - } - } - return !more -} - -/** - * Tokenize embedded tokens. - * - * @param {Array<Event>} events - * @param {number} eventIndex - * @returns {Record<string, number>} - */ -function subcontent(events, eventIndex) { - const token = events[eventIndex][1] - const context = events[eventIndex][2] - let startPosition = eventIndex - 1 - /** @type {Array<number>} */ - const startPositions = [] - const tokenizer = - token._tokenizer || context.parser[token.contentType](token.start) - const childEvents = tokenizer.events - /** @type {Array<[number, number]>} */ - const jumps = [] - /** @type {Record<string, number>} */ - const gaps = {} - /** @type {Array<Chunk>} */ - let stream - /** @type {Token | undefined} */ - let previous - let index = -1 - /** @type {Token | undefined} */ - let current = token - let adjust = 0 - let start = 0 - const breaks = [start] - - // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. - while (current) { - // Find the position of the event for this token. - while (events[++startPosition][1] !== current) { - // Empty. - } - startPositions.push(startPosition) - if (!current._tokenizer) { - stream = context.sliceStream(current) - if (!current.next) { - stream.push(null) - } - if (previous) { - tokenizer.defineSkip(current.start) - } - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true - } - tokenizer.write(stream) - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined - } - } - - // Unravel the next token. - previous = current - current = current.next - } - - // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. - current = token - while (++index < childEvents.length) { - if ( - // Find a void token that includes a break. - childEvents[index][0] === 'exit' && - childEvents[index - 1][0] === 'enter' && - childEvents[index][1].type === childEvents[index - 1][1].type && - childEvents[index][1].start.line !== childEvents[index][1].end.line - ) { - start = index + 1 - breaks.push(start) - // Help GC. - current._tokenizer = undefined - current.previous = undefined - current = current.next - } - } - - // Help GC. - tokenizer.events = [] - - // If there’s one more token (which is the cases for lines that end in an - // EOF), that’s perfect: the last point we found starts it. - // If there isn’t then make sure any remaining content is added to it. - if (current) { - // Help GC. - current._tokenizer = undefined - current.previous = undefined - } else { - breaks.pop() - } - - // Now splice the events from the subtokenizer into the current events, - // moving back to front so that splice indices aren’t affected. - index = breaks.length - while (index--) { - const slice = childEvents.slice(breaks[index], breaks[index + 1]) - const start = startPositions.pop() - jumps.unshift([start, start + slice.length - 1]) - splice(events, start, 2, slice) - } - index = -1 - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] - adjust += jumps[index][1] - jumps[index][0] - 1 - } - return gaps -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** - * No name because it must not be turned off. - * @type {Construct} - */ -const content_content = { - tokenize: tokenizeContent, - resolve: resolveContent -} - -/** @type {Construct} */ -const continuationConstruct = { - tokenize: tokenizeContinuation, - partial: true -} - -/** - * Content is transparent: it’s parsed right now. That way, definitions are also - * parsed right now: before text in paragraphs (specifically, media) are parsed. - * - * @type {Resolver} - */ -function resolveContent(events) { - subtokenize(events) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContent(effects, ok) { - /** @type {Token | undefined} */ - let previous - return chunkStart - - /** - * Before a content chunk. - * - * ```markdown - * > | abc - * ^ - * ``` - * - * @type {State} - */ - function chunkStart(code) { - effects.enter('content') - previous = effects.enter('chunkContent', { - contentType: 'content' - }) - return chunkInside(code) - } - - /** - * In a content chunk. - * - * ```markdown - * > | abc - * ^^^ - * ``` - * - * @type {State} - */ - function chunkInside(code) { - if (code === null) { - return contentEnd(code) - } - - // To do: in `markdown-rs`, each line is parsed on its own, and everything - // is stitched together resolving. - if (markdownLineEnding(code)) { - return effects.check( - continuationConstruct, - contentContinue, - contentEnd - )(code) - } - - // Data. - effects.consume(code) - return chunkInside - } - - /** - * - * - * @type {State} - */ - function contentEnd(code) { - effects.exit('chunkContent') - effects.exit('content') - return ok(code) - } - - /** - * - * - * @type {State} - */ - function contentContinue(code) { - effects.consume(code) - effects.exit('chunkContent') - previous.next = effects.enter('chunkContent', { - contentType: 'content', - previous - }) - previous = previous.next - return chunkInside - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContinuation(effects, ok, nok) { - const self = this - return startLookahead - - /** - * - * - * @type {State} - */ - function startLookahead(code) { - effects.exit('chunkContent') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, prefixed, 'linePrefix') - } - - /** - * - * - * @type {State} - */ - function prefixed(code) { - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - - // Always populated by defaults. - - const tail = self.events[self.events.length - 1] - if ( - !self.parser.constructs.disable.null.includes('codeIndented') && - tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ) { - return ok(code) - } - return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - - -/** @type {InitialConstruct} */ -const flow = { - tokenize: initializeFlow -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeFlow(effects) { - const self = this - const initial = effects.attempt( - // Try to parse a blank line. - blankLine, - atBlankEnding, - // Try to parse initial flow (essentially, only code). - effects.attempt( - this.parser.constructs.flowInitial, - afterConstruct, - factorySpace( - effects, - effects.attempt( - this.parser.constructs.flow, - afterConstruct, - effects.attempt(content_content, afterConstruct) - ), - 'linePrefix' - ) - ) - ) - return initial - - /** @type {State} */ - function atBlankEnding(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEndingBlank') - effects.consume(code) - effects.exit('lineEndingBlank') - self.currentConstruct = undefined - return initial - } - - /** @type {State} */ - function afterConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - self.currentConstruct = undefined - return initial - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -const resolver = { - resolveAll: createResolver() -} -const string = initializeFactory('string') -const text_text = initializeFactory('text') - -/** - * @param {'string' | 'text'} field - * @returns {InitialConstruct} - */ -function initializeFactory(field) { - return { - tokenize: initializeText, - resolveAll: createResolver( - field === 'text' ? resolveAllLineSuffixes : undefined - ) - } - - /** - * @this {TokenizeContext} - * @type {Initializer} - */ - function initializeText(effects) { - const self = this - const constructs = this.parser.constructs[field] - const text = effects.attempt(constructs, start, notText) - return start - - /** @type {State} */ - function start(code) { - return atBreak(code) ? text(code) : notText(code) - } - - /** @type {State} */ - function notText(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('data') - effects.consume(code) - return data - } - - /** @type {State} */ - function data(code) { - if (atBreak(code)) { - effects.exit('data') - return text(code) - } - - // Data. - effects.consume(code) - return data - } - - /** - * @param {Code} code - * @returns {boolean} - */ - function atBreak(code) { - if (code === null) { - return true - } - const list = constructs[code] - let index = -1 - if (list) { - // Always populated by defaults. - - while (++index < list.length) { - const item = list[index] - if (!item.previous || item.previous.call(self, self.previous)) { - return true - } - } - } - return false - } - } -} - -/** - * @param {Resolver | undefined} [extraResolver] - * @returns {Resolver} - */ -function createResolver(extraResolver) { - return resolveAllText - - /** @type {Resolver} */ - function resolveAllText(events, context) { - let index = -1 - /** @type {number | undefined} */ - let enter - - // A rather boring computation (to merge adjacent `data` events) which - // improves mm performance by 29%. - while (++index <= events.length) { - if (enter === undefined) { - if (events[index] && events[index][1].type === 'data') { - enter = index - index++ - } - } else if (!events[index] || events[index][1].type !== 'data') { - // Don’t do anything if there is one data token. - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - index = enter + 2 - } - enter = undefined - } - } - return extraResolver ? extraResolver(events, context) : events - } -} - -/** - * A rather ugly set of instructions which again looks at chunks in the input - * stream. - * The reason to do this here is that it is *much* faster to parse in reverse. - * And that we can’t hook into `null` to split the line suffix before an EOF. - * To do: figure out if we can make this into a clean utility, or even in core. - * As it will be useful for GFMs literal autolink extension (and maybe even - * tables?) - * - * @type {Resolver} - */ -function resolveAllLineSuffixes(events, context) { - let eventIndex = 0 // Skip first. - - while (++eventIndex <= events.length) { - if ( - (eventIndex === events.length || - events[eventIndex][1].type === 'lineEnding') && - events[eventIndex - 1][1].type === 'data' - ) { - const data = events[eventIndex - 1][1] - const chunks = context.sliceStream(data) - let index = chunks.length - let bufferIndex = -1 - let size = 0 - /** @type {boolean | undefined} */ - let tabs - while (index--) { - const chunk = chunks[index] - if (typeof chunk === 'string') { - bufferIndex = chunk.length - while (chunk.charCodeAt(bufferIndex - 1) === 32) { - size++ - bufferIndex-- - } - if (bufferIndex) break - bufferIndex = -1 - } - // Number - else if (chunk === -2) { - tabs = true - size++ - } else if (chunk === -1) { - // Empty - } else { - // Replacement character, exit. - index++ - break - } - } - if (size) { - const token = { - type: - eventIndex === events.length || tabs || size < 2 - ? 'lineSuffix' - : 'hardBreakTrailing', - start: { - line: data.end.line, - column: data.end.column - size, - offset: data.end.offset - size, - _index: data.start._index + index, - _bufferIndex: index - ? bufferIndex - : data.start._bufferIndex + bufferIndex - }, - end: Object.assign({}, data.end) - } - data.end = Object.assign({}, token.start) - if (data.start.offset === data.end.offset) { - Object.assign(data, token) - } else { - events.splice( - eventIndex, - 0, - ['enter', token, context], - ['exit', token, context] - ) - eventIndex += 2 - } - } - eventIndex++ - } - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js -/** - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * Call all `resolveAll`s. - * - * @param {Array<{resolveAll?: Resolver | undefined}>} constructs - * List of constructs, optionally with `resolveAll`s. - * @param {Array<Event>} events - * List of events. - * @param {TokenizeContext} context - * Context used by `tokenize`. - * @returns {Array<Event>} - * Changed events. - */ -function resolveAll(constructs, events, context) { - /** @type {Array<Resolver>} */ - const called = [] - let index = -1 - - while (++index < constructs.length) { - const resolve = constructs[index].resolveAll - - if (resolve && !called.includes(resolve)) { - events = resolve(events, context) - called.push(resolve) - } - } - - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenType} TokenType - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * @callback Restore - * @returns {void} - * - * @typedef Info - * @property {Restore} restore - * @property {number} from - * - * @callback ReturnHandle - * Handle a successful run. - * @param {Construct} construct - * @param {Info} info - * @returns {void} - */ - - - - -/** - * Create a tokenizer. - * Tokenizers deal with one type of data (e.g., containers, flow, text). - * The parser is the object dealing with it all. - * `initialize` works like other constructs, except that only its `tokenize` - * function is used, in which case it doesn’t receive an `ok` or `nok`. - * `from` can be given to set the point before the first character, although - * when further lines are indented, they must be set with `defineSkip`. - * - * @param {ParseContext} parser - * @param {InitialConstruct} initialize - * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] - * @returns {TokenizeContext} - */ -function createTokenizer(parser, initialize, from) { - /** @type {Point} */ - let point = Object.assign( - from - ? Object.assign({}, from) - : { - line: 1, - column: 1, - offset: 0 - }, - { - _index: 0, - _bufferIndex: -1 - } - ) - /** @type {Record<string, number>} */ - const columnStart = {} - /** @type {Array<Construct>} */ - const resolveAllConstructs = [] - /** @type {Array<Chunk>} */ - let chunks = [] - /** @type {Array<Token>} */ - let stack = [] - /** @type {boolean | undefined} */ - let consumed = true - - /** - * Tools used for tokenizing. - * - * @type {Effects} - */ - const effects = { - consume, - enter, - exit, - attempt: constructFactory(onsuccessfulconstruct), - check: constructFactory(onsuccessfulcheck), - interrupt: constructFactory(onsuccessfulcheck, { - interrupt: true - }) - } - - /** - * State and tools for resolving and serializing. - * - * @type {TokenizeContext} - */ - const context = { - previous: null, - code: null, - containerState: {}, - events: [], - parser, - sliceStream, - sliceSerialize, - now, - defineSkip, - write - } - - /** - * The state function. - * - * @type {State | void} - */ - let state = initialize.tokenize.call(context, effects) - - /** - * Track which character we expect to be consumed, to catch bugs. - * - * @type {Code} - */ - let expectedCode - if (initialize.resolveAll) { - resolveAllConstructs.push(initialize) - } - return context - - /** @type {TokenizeContext['write']} */ - function write(slice) { - chunks = push(chunks, slice) - main() - - // Exit if we’re not done, resolve might change stuff. - if (chunks[chunks.length - 1] !== null) { - return [] - } - addResult(initialize, 0) - - // Otherwise, resolve, and exit. - context.events = resolveAll(resolveAllConstructs, context.events, context) - return context.events - } - - // - // Tools. - // - - /** @type {TokenizeContext['sliceSerialize']} */ - function sliceSerialize(token, expandTabs) { - return serializeChunks(sliceStream(token), expandTabs) - } - - /** @type {TokenizeContext['sliceStream']} */ - function sliceStream(token) { - return sliceChunks(chunks, token) - } - - /** @type {TokenizeContext['now']} */ - function now() { - // This is a hot path, so we clone manually instead of `Object.assign({}, point)` - const {line, column, offset, _index, _bufferIndex} = point - return { - line, - column, - offset, - _index, - _bufferIndex - } - } - - /** @type {TokenizeContext['defineSkip']} */ - function defineSkip(value) { - columnStart[value.line] = value.column - accountForPotentialSkip() - } - - // - // State management. - // - - /** - * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by - * `consume`). - * Here is where we walk through the chunks, which either include strings of - * several characters, or numerical character codes. - * The reason to do this in a loop instead of a call is so the stack can - * drain. - * - * @returns {void} - */ - function main() { - /** @type {number} */ - let chunkIndex - while (point._index < chunks.length) { - const chunk = chunks[point._index] - - // If we’re in a buffer chunk, loop through it. - if (typeof chunk === 'string') { - chunkIndex = point._index - if (point._bufferIndex < 0) { - point._bufferIndex = 0 - } - while ( - point._index === chunkIndex && - point._bufferIndex < chunk.length - ) { - go(chunk.charCodeAt(point._bufferIndex)) - } - } else { - go(chunk) - } - } - } - - /** - * Deal with one code. - * - * @param {Code} code - * @returns {void} - */ - function go(code) { - consumed = undefined - expectedCode = code - state = state(code) - } - - /** @type {Effects['consume']} */ - function consume(code) { - if (markdownLineEnding(code)) { - point.line++ - point.column = 1 - point.offset += code === -3 ? 2 : 1 - accountForPotentialSkip() - } else if (code !== -1) { - point.column++ - point.offset++ - } - - // Not in a string chunk. - if (point._bufferIndex < 0) { - point._index++ - } else { - point._bufferIndex++ - - // At end of string chunk. - // @ts-expect-error Points w/ non-negative `_bufferIndex` reference - // strings. - if (point._bufferIndex === chunks[point._index].length) { - point._bufferIndex = -1 - point._index++ - } - } - - // Expose the previous character. - context.previous = code - - // Mark as consumed. - consumed = true - } - - /** @type {Effects['enter']} */ - function enter(type, fields) { - /** @type {Token} */ - // @ts-expect-error Patch instead of assign required fields to help GC. - const token = fields || {} - token.type = type - token.start = now() - context.events.push(['enter', token, context]) - stack.push(token) - return token - } - - /** @type {Effects['exit']} */ - function exit(type) { - const token = stack.pop() - token.end = now() - context.events.push(['exit', token, context]) - return token - } - - /** - * Use results. - * - * @type {ReturnHandle} - */ - function onsuccessfulconstruct(construct, info) { - addResult(construct, info.from) - } - - /** - * Discard results. - * - * @type {ReturnHandle} - */ - function onsuccessfulcheck(_, info) { - info.restore() - } - - /** - * Factory to attempt/check/interrupt. - * - * @param {ReturnHandle} onreturn - * @param {{interrupt?: boolean | undefined} | undefined} [fields] - */ - function constructFactory(onreturn, fields) { - return hook - - /** - * Handle either an object mapping codes to constructs, a list of - * constructs, or a single construct. - * - * @param {Array<Construct> | Construct | ConstructRecord} constructs - * @param {State} returnState - * @param {State | undefined} [bogusState] - * @returns {State} - */ - function hook(constructs, returnState, bogusState) { - /** @type {Array<Construct>} */ - let listOfConstructs - /** @type {number} */ - let constructIndex - /** @type {Construct} */ - let currentConstruct - /** @type {Info} */ - let info - return Array.isArray(constructs) /* c8 ignore next 1 */ - ? handleListOfConstructs(constructs) - : 'tokenize' in constructs - ? // @ts-expect-error Looks like a construct. - handleListOfConstructs([constructs]) - : handleMapOfConstructs(constructs) - - /** - * Handle a list of construct. - * - * @param {ConstructRecord} map - * @returns {State} - */ - function handleMapOfConstructs(map) { - return start - - /** @type {State} */ - function start(code) { - const def = code !== null && map[code] - const all = code !== null && map.null - const list = [ - // To do: add more extension tests. - /* c8 ignore next 2 */ - ...(Array.isArray(def) ? def : def ? [def] : []), - ...(Array.isArray(all) ? all : all ? [all] : []) - ] - return handleListOfConstructs(list)(code) - } - } - - /** - * Handle a list of construct. - * - * @param {Array<Construct>} list - * @returns {State} - */ - function handleListOfConstructs(list) { - listOfConstructs = list - constructIndex = 0 - if (list.length === 0) { - return bogusState - } - return handleConstruct(list[constructIndex]) - } - - /** - * Handle a single construct. - * - * @param {Construct} construct - * @returns {State} - */ - function handleConstruct(construct) { - return start - - /** @type {State} */ - function start(code) { - // To do: not needed to store if there is no bogus state, probably? - // Currently doesn’t work because `inspect` in document does a check - // w/o a bogus, which doesn’t make sense. But it does seem to help perf - // by not storing. - info = store() - currentConstruct = construct - if (!construct.partial) { - context.currentConstruct = construct - } - - // Always populated by defaults. - - if ( - construct.name && - context.parser.constructs.disable.null.includes(construct.name) - ) { - return nok(code) - } - return construct.tokenize.call( - // If we do have fields, create an object w/ `context` as its - // prototype. - // This allows a “live binding”, which is needed for `interrupt`. - fields ? Object.assign(Object.create(context), fields) : context, - effects, - ok, - nok - )(code) - } - } - - /** @type {State} */ - function ok(code) { - consumed = true - onreturn(currentConstruct, info) - return returnState - } - - /** @type {State} */ - function nok(code) { - consumed = true - info.restore() - if (++constructIndex < listOfConstructs.length) { - return handleConstruct(listOfConstructs[constructIndex]) - } - return bogusState - } - } - } - - /** - * @param {Construct} construct - * @param {number} from - * @returns {void} - */ - function addResult(construct, from) { - if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { - resolveAllConstructs.push(construct) - } - if (construct.resolve) { - splice( - context.events, - from, - context.events.length - from, - construct.resolve(context.events.slice(from), context) - ) - } - if (construct.resolveTo) { - context.events = construct.resolveTo(context.events, context) - } - } - - /** - * Store state. - * - * @returns {Info} - */ - function store() { - const startPoint = now() - const startPrevious = context.previous - const startCurrentConstruct = context.currentConstruct - const startEventsIndex = context.events.length - const startStack = Array.from(stack) - return { - restore, - from: startEventsIndex - } - - /** - * Restore state. - * - * @returns {void} - */ - function restore() { - point = startPoint - context.previous = startPrevious - context.currentConstruct = startCurrentConstruct - context.events.length = startEventsIndex - stack = startStack - accountForPotentialSkip() - } - } - - /** - * Move the current point a bit forward in the line when it’s on a column - * skip. - * - * @returns {void} - */ - function accountForPotentialSkip() { - if (point.line in columnStart && point.column < 2) { - point.column = columnStart[point.line] - point.offset += columnStart[point.line] - 1 - } - } -} - -/** - * Get the chunks from a slice of chunks in the range of a token. - * - * @param {Array<Chunk>} chunks - * @param {Pick<Token, 'end' | 'start'>} token - * @returns {Array<Chunk>} - */ -function sliceChunks(chunks, token) { - const startIndex = token.start._index - const startBufferIndex = token.start._bufferIndex - const endIndex = token.end._index - const endBufferIndex = token.end._bufferIndex - /** @type {Array<Chunk>} */ - let view - if (startIndex === endIndex) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] - } else { - view = chunks.slice(startIndex, endIndex) - if (startBufferIndex > -1) { - const head = view[0] - if (typeof head === 'string') { - view[0] = head.slice(startBufferIndex) - } else { - view.shift() - } - } - if (endBufferIndex > 0) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view.push(chunks[endIndex].slice(0, endBufferIndex)) - } - } - return view -} - -/** - * Get the string value of a slice of chunks. - * - * @param {Array<Chunk>} chunks - * @param {boolean | undefined} [expandTabs=false] - * @returns {string} - */ -function serializeChunks(chunks, expandTabs) { - let index = -1 - /** @type {Array<string>} */ - const result = [] - /** @type {boolean | undefined} */ - let atTab - while (++index < chunks.length) { - const chunk = chunks[index] - /** @type {string} */ - let value - if (typeof chunk === 'string') { - value = chunk - } else - switch (chunk) { - case -5: { - value = '\r' - break - } - case -4: { - value = '\n' - break - } - case -3: { - value = '\r' + '\n' - break - } - case -2: { - value = expandTabs ? ' ' : '\t' - break - } - case -1: { - if (!expandTabs && atTab) continue - value = ' ' - break - } - default: { - // Currently only replacement character. - value = String.fromCharCode(chunk) - } - } - atTab = chunk === -2 - result.push(value) - } - return result.join('') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const thematicBreak = { - name: 'thematicBreak', - tokenize: tokenizeThematicBreak -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeThematicBreak(effects, ok, nok) { - let size = 0 - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of thematic break. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('thematicBreak') - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * After optional whitespace, at marker. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - marker = code - return atBreak(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.enter('thematicBreakSequence') - return sequence(code) - } - if (size >= 3 && (code === null || markdownLineEnding(code))) { - effects.exit('thematicBreak') - return ok(code) - } - return nok(code) - } - - /** - * In sequence. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function sequence(code) { - if (code === marker) { - effects.consume(code) - size++ - return sequence - } - effects.exit('thematicBreakSequence') - return markdownSpace(code) - ? factorySpace(effects, atBreak, 'whitespace')(code) - : atBreak(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - -/** @type {Construct} */ -const list = { - name: 'list', - tokenize: tokenizeListStart, - continuation: { - tokenize: tokenizeListContinuation - }, - exit: tokenizeListEnd -} - -/** @type {Construct} */ -const listItemPrefixWhitespaceConstruct = { - tokenize: tokenizeListItemPrefixWhitespace, - partial: true -} - -/** @type {Construct} */ -const indentConstruct = { - tokenize: tokenizeIndent, - partial: true -} - -// To do: `markdown-rs` parses list items on their own and later stitches them -// together. - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListStart(effects, ok, nok) { - const self = this - const tail = self.events[self.events.length - 1] - let initialSize = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - let size = 0 - return start - - /** @type {State} */ - function start(code) { - const kind = - self.containerState.type || - (code === 42 || code === 43 || code === 45 - ? 'listUnordered' - : 'listOrdered') - if ( - kind === 'listUnordered' - ? !self.containerState.marker || code === self.containerState.marker - : asciiDigit(code) - ) { - if (!self.containerState.type) { - self.containerState.type = kind - effects.enter(kind, { - _container: true - }) - } - if (kind === 'listUnordered') { - effects.enter('listItemPrefix') - return code === 42 || code === 45 - ? effects.check(thematicBreak, nok, atMarker)(code) - : atMarker(code) - } - if (!self.interrupt || code === 49) { - effects.enter('listItemPrefix') - effects.enter('listItemValue') - return inside(code) - } - } - return nok(code) - } - - /** @type {State} */ - function inside(code) { - if (asciiDigit(code) && ++size < 10) { - effects.consume(code) - return inside - } - if ( - (!self.interrupt || size < 2) && - (self.containerState.marker - ? code === self.containerState.marker - : code === 41 || code === 46) - ) { - effects.exit('listItemValue') - return atMarker(code) - } - return nok(code) - } - - /** - * @type {State} - **/ - function atMarker(code) { - effects.enter('listItemMarker') - effects.consume(code) - effects.exit('listItemMarker') - self.containerState.marker = self.containerState.marker || code - return effects.check( - blankLine, - // Can’t be empty when interrupting. - self.interrupt ? nok : onBlank, - effects.attempt( - listItemPrefixWhitespaceConstruct, - endOfPrefix, - otherPrefix - ) - ) - } - - /** @type {State} */ - function onBlank(code) { - self.containerState.initialBlankLine = true - initialSize++ - return endOfPrefix(code) - } - - /** @type {State} */ - function otherPrefix(code) { - if (markdownSpace(code)) { - effects.enter('listItemPrefixWhitespace') - effects.consume(code) - effects.exit('listItemPrefixWhitespace') - return endOfPrefix - } - return nok(code) - } - - /** @type {State} */ - function endOfPrefix(code) { - self.containerState.size = - initialSize + - self.sliceSerialize(effects.exit('listItemPrefix'), true).length - return ok(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListContinuation(effects, ok, nok) { - const self = this - self.containerState._closeFlow = undefined - return effects.check(blankLine, onBlank, notBlank) - - /** @type {State} */ - function onBlank(code) { - self.containerState.furtherBlankLines = - self.containerState.furtherBlankLines || - self.containerState.initialBlankLine - - // We have a blank line. - // Still, try to consume at most the items size. - return factorySpace( - effects, - ok, - 'listItemIndent', - self.containerState.size + 1 - )(code) - } - - /** @type {State} */ - function notBlank(code) { - if (self.containerState.furtherBlankLines || !markdownSpace(code)) { - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return notInCurrentItem(code) - } - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) - } - - /** @type {State} */ - function notInCurrentItem(code) { - // While we do continue, we signal that the flow should be closed. - self.containerState._closeFlow = true - // As we’re closing flow, we’re no longer interrupting. - self.interrupt = undefined - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(list, ok, nok), - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeIndent(effects, ok, nok) { - const self = this - return factorySpace( - effects, - afterPrefix, - 'listItemIndent', - self.containerState.size + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'listItemIndent' && - tail[2].sliceSerialize(tail[1], true).length === self.containerState.size - ? ok(code) - : nok(code) - } -} - -/** - * @type {Exiter} - * @this {TokenizeContext} - */ -function tokenizeListEnd(effects) { - effects.exit(this.containerState.type) -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListItemPrefixWhitespace(effects, ok, nok) { - const self = this - - // Always populated by defaults. - - return factorySpace( - effects, - afterPrefix, - 'listItemPrefixWhitespace', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return !markdownSpace(code) && - tail && - tail[1].type === 'listItemPrefixWhitespace' - ? ok(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blockQuote = { - name: 'blockQuote', - tokenize: tokenizeBlockQuoteStart, - continuation: { - tokenize: tokenizeBlockQuoteContinuation - }, - exit -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteStart(effects, ok, nok) { - const self = this - return start - - /** - * Start of block quote. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 62) { - const state = self.containerState - if (!state.open) { - effects.enter('blockQuote', { - _container: true - }) - state.open = true - } - effects.enter('blockQuotePrefix') - effects.enter('blockQuoteMarker') - effects.consume(code) - effects.exit('blockQuoteMarker') - return after - } - return nok(code) - } - - /** - * After `>`, before optional whitespace. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownSpace(code)) { - effects.enter('blockQuotePrefixWhitespace') - effects.consume(code) - effects.exit('blockQuotePrefixWhitespace') - effects.exit('blockQuotePrefix') - return ok - } - effects.exit('blockQuotePrefix') - return ok(code) - } -} - -/** - * Start of block quote continuation. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteContinuation(effects, ok, nok) { - const self = this - return contStart - - /** - * Start of block quote continuation. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contStart(code) { - if (markdownSpace(code)) { - // Always populated by defaults. - - return factorySpace( - effects, - contBefore, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } - return contBefore(code) - } - - /** - * At `>`, after optional whitespace. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contBefore(code) { - return effects.attempt(blockQuote, ok, nok)(code) - } -} - -/** @type {Exiter} */ -function exit(effects) { - effects.exit('blockQuote') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * <a> - * <a\>b> - * <a b> - * <a)> - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`<a>` or `b`). - * @param {TokenType} literalType - * Type when enclosed (`<a>`). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryDestination( - effects, - ok, - nok, - type, - literalType, - literalMarkerType, - rawType, - stringType, - max -) { - const limit = max || Number.POSITIVE_INFINITY - let balance = 0 - return start - - /** - * Start of destination. - * - * ```markdown - * > | <aa> - * ^ - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 60) { - effects.enter(type) - effects.enter(literalType) - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - return enclosedBefore - } - - // ASCII control, space, closing paren. - if (code === null || code === 32 || code === 41 || asciiControl(code)) { - return nok(code) - } - effects.enter(type) - effects.enter(rawType) - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return raw(code) - } - - /** - * After `<`, at an enclosed destination. - * - * ```markdown - * > | <aa> - * ^ - * ``` - * - * @type {State} - */ - function enclosedBefore(code) { - if (code === 62) { - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - effects.exit(literalType) - effects.exit(type) - return ok - } - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return enclosed(code) - } - - /** - * In enclosed destination. - * - * ```markdown - * > | <aa> - * ^ - * ``` - * - * @type {State} - */ - function enclosed(code) { - if (code === 62) { - effects.exit('chunkString') - effects.exit(stringType) - return enclosedBefore(code) - } - if (code === null || code === 60 || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? enclosedEscape : enclosed - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | <a\*a> - * ^ - * ``` - * - * @type {State} - */ - function enclosedEscape(code) { - if (code === 60 || code === 62 || code === 92) { - effects.consume(code) - return enclosed - } - return enclosed(code) - } - - /** - * In raw destination. - * - * ```markdown - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function raw(code) { - if ( - !balance && - (code === null || code === 41 || markdownLineEndingOrSpace(code)) - ) { - effects.exit('chunkString') - effects.exit(stringType) - effects.exit(rawType) - effects.exit(type) - return ok(code) - } - if (balance < limit && code === 40) { - effects.consume(code) - balance++ - return raw - } - if (code === 41) { - effects.consume(code) - balance-- - return raw - } - - // ASCII control (but *not* `\0`) and space and `(`. - // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it - // doesn’t. - if (code === null || code === 32 || code === 40 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? rawEscape : raw - } - - /** - * After `\`, at special character. - * - * ```markdown - * > | a\*a - * ^ - * ``` - * - * @type {State} - */ - function rawEscape(code) { - if (code === 40 || code === 41 || code === 92) { - effects.consume(code) - return raw - } - return raw(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryLabel(effects, ok, nok, type, markerType, stringType) { - const self = this - let size = 0 - /** @type {boolean} */ - let seen - return start - - /** - * Start of label. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.enter(stringType) - return atBreak - } - - /** - * In label, at something, before something else. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if ( - size > 999 || - code === null || - code === 91 || - (code === 93 && !seen) || - // To do: remove in the future once we’ve switched from - // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, - // which doesn’t need this. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - (code === 94 && - !size && - '_hiddenFootnoteSupport' in self.parser.constructs) - ) { - return nok(code) - } - if (code === 93) { - effects.exit(stringType) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - - // To do: indent? Link chunks and EOLs together? - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return atBreak - } - effects.enter('chunkString', { - contentType: 'string' - }) - return labelInside(code) - } - - /** - * In label, in text. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function labelInside(code) { - if ( - code === null || - code === 91 || - code === 93 || - markdownLineEnding(code) || - size++ > 999 - ) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - if (!seen) seen = !markdownSpace(code) - return code === 92 ? labelEscape : labelInside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | [a\*a] - * ^ - * ``` - * - * @type {State} - */ - function labelEscape(code) { - if (code === 91 || code === 92 || code === 93) { - effects.consume(code) - size++ - return labelInside - } - return labelInside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryTitle(effects, ok, nok, type, markerType, stringType) { - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of title. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 34 || code === 39 || code === 40) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - marker = code === 40 ? 41 : code - return begin - } - return nok(code) - } - - /** - * After opening marker. - * - * This is also used at the closing marker. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function begin(code) { - if (code === marker) { - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - effects.enter(stringType) - return atBreak(code) - } - - /** - * At something, before something else. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.exit(stringType) - return begin(marker) - } - if (code === null) { - return nok(code) - } - - // Note: blank lines can’t exist in content. - if (markdownLineEnding(code)) { - // To do: use `space_or_tab_eol_with_options`, connect. - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, atBreak, 'linePrefix') - } - effects.enter('chunkString', { - contentType: 'string' - }) - return inside(code) - } - - /** - * - * - * @type {State} - */ - function inside(code) { - if (code === marker || code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - return code === 92 ? escape : inside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | "a\*b" - * ^ - * ``` - * - * @type {State} - */ - function escape(code) { - if (code === marker || code === 92) { - effects.consume(code) - return inside - } - return inside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - */ - - - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns - * Start state. - */ -function factoryWhitespace(effects, ok) { - /** @type {boolean} */ - let seen - return start - - /** @type {State} */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - seen = true - return start - } - if (markdownSpace(code)) { - return factorySpace( - effects, - start, - seen ? 'linePrefix' : 'lineSuffix' - )(code) - } - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -function normalizeIdentifier(value) { - return ( - value - // Collapse markdown whitespace. - .replace(/[\t\n\r ]+/g, ' ') - // Trim. - .replace(/^ | $/g, '') - // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase() - .toUpperCase() - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - -/** @type {Construct} */ -const definition = { - name: 'definition', - tokenize: tokenizeDefinition -} - -/** @type {Construct} */ -const titleBefore = { - tokenize: tokenizeTitleBefore, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeDefinition(effects, ok, nok) { - const self = this - /** @type {string} */ - let identifier - return start - - /** - * At start of a definition. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Do not interrupt paragraphs (but do follow definitions). - // To do: do `interrupt` the way `markdown-rs` does. - // To do: parse whitespace the way `markdown-rs` does. - effects.enter('definition') - return before(code) - } - - /** - * After optional whitespace, at `[`. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - // To do: parse whitespace the way `markdown-rs` does. - - return factoryLabel.call( - self, - effects, - labelAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionLabel', - 'definitionLabelMarker', - 'definitionLabelString' - )(code) - } - - /** - * After label. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function labelAfter(code) { - identifier = normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - if (code === 58) { - effects.enter('definitionMarker') - effects.consume(code) - effects.exit('definitionMarker') - return markerAfter - } - return nok(code) - } - - /** - * After marker. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function markerAfter(code) { - // Note: whitespace is optional. - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, destinationBefore)(code) - : destinationBefore(code) - } - - /** - * Before destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationBefore(code) { - return factoryDestination( - effects, - destinationAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionDestination', - 'definitionDestinationLiteral', - 'definitionDestinationLiteralMarker', - 'definitionDestinationRaw', - 'definitionDestinationString' - )(code) - } - - /** - * After destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationAfter(code) { - return effects.attempt(titleBefore, after, after)(code) - } - - /** - * After definition. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return markdownSpace(code) - ? factorySpace(effects, afterWhitespace, 'whitespace')(code) - : afterWhitespace(code) - } - - /** - * After definition, after optional whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function afterWhitespace(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('definition') - - // Note: we don’t care about uniqueness. - // It’s likely that that doesn’t happen very frequently. - // It is more likely that it wastes precious time. - self.parser.defined.push(identifier) - - // To do: `markdown-rs` interrupt. - // // You’d be interrupting. - // tokenizer.interrupt = true - return ok(code) - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeTitleBefore(effects, ok, nok) { - return titleBefore - - /** - * After destination, at whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, beforeMarker)(code) - : nok(code) - } - - /** - * At title. - * - * ```markdown - * | [a]: b - * > | "c" - * ^ - * ``` - * - * @type {State} - */ - function beforeMarker(code) { - return factoryTitle( - effects, - titleAfter, - nok, - 'definitionTitle', - 'definitionTitleMarker', - 'definitionTitleString' - )(code) - } - - /** - * After title. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfter(code) { - return markdownSpace(code) - ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) - : titleAfterOptionalWhitespace(code) - } - - /** - * After title, after optional whitespace. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfterOptionalWhitespace(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const codeIndented = { - name: 'codeIndented', - tokenize: tokenizeCodeIndented -} - -/** @type {Construct} */ -const furtherStart = { - tokenize: tokenizeFurtherStart, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeIndented(effects, ok, nok) { - const self = this - return start - - /** - * Start of code (indented). - * - * > **Parsing note**: it is not needed to check if this first line is a - * > filled line (that it has a non-whitespace character), because blank lines - * > are parsed already, so we never run into that. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: manually check if interrupting like `markdown-rs`. - - effects.enter('codeIndented') - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? atBreak(code) - : nok(code) - } - - /** - * At a break. - * - * ```markdown - * > | aaa - * ^ ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === null) { - return after(code) - } - if (markdownLineEnding(code)) { - return effects.attempt(furtherStart, atBreak, after)(code) - } - effects.enter('codeFlowValue') - return inside(code) - } - - /** - * In code content. - * - * ```markdown - * > | aaa - * ^^^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return atBreak(code) - } - effects.consume(code) - return inside - } - - /** @type {State} */ - function after(code) { - effects.exit('codeIndented') - // To do: allow interrupting like `markdown-rs`. - // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeFurtherStart(effects, ok, nok) { - const self = this - return furtherStart - - /** - * At eol, trying to parse another indent. - * - * ```markdown - * > | aaa - * ^ - * | bbb - * ``` - * - * @type {State} - */ - function furtherStart(code) { - // To do: improve `lazy` / `pierce` handling. - // If this is a lazy line, it can’t be code. - if (self.parser.lazy[self.now().line]) { - return nok(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return furtherStart - } - - // To do: the code here in `micromark-js` is a bit different from - // `markdown-rs` because there it can attempt spaces. - // We can’t yet. - // - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? ok(code) - : markdownLineEnding(code) - ? furtherStart(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const headingAtx = { - name: 'headingAtx', - tokenize: tokenizeHeadingAtx, - resolve: resolveHeadingAtx -} - -/** @type {Resolver} */ -function resolveHeadingAtx(events, context) { - let contentEnd = events.length - 2 - let contentStart = 3 - /** @type {Token} */ - let content - /** @type {Token} */ - let text - - // Prefix whitespace, part of the opening. - if (events[contentStart][1].type === 'whitespace') { - contentStart += 2 - } - - // Suffix whitespace, part of the closing. - if ( - contentEnd - 2 > contentStart && - events[contentEnd][1].type === 'whitespace' - ) { - contentEnd -= 2 - } - if ( - events[contentEnd][1].type === 'atxHeadingSequence' && - (contentStart === contentEnd - 1 || - (contentEnd - 4 > contentStart && - events[contentEnd - 2][1].type === 'whitespace')) - ) { - contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 - } - if (contentEnd > contentStart) { - content = { - type: 'atxHeadingText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end - } - text = { - type: 'chunkText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end, - contentType: 'text' - } - splice(events, contentStart, contentEnd - contentStart + 1, [ - ['enter', content, context], - ['enter', text, context], - ['exit', text, context], - ['exit', content, context] - ]) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHeadingAtx(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of a heading (atx). - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - effects.enter('atxHeading') - return before(code) - } - - /** - * After optional whitespace, at `#`. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('atxHeadingSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 35 && size++ < 6) { - effects.consume(code) - return sequenceOpen - } - - // Always at least one `#`. - if (code === null || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingSequence') - return atBreak(code) - } - return nok(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === 35) { - effects.enter('atxHeadingSequence') - return sequenceFurther(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('atxHeading') - // To do: interrupt like `markdown-rs`. - // // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } - if (markdownSpace(code)) { - return factorySpace(effects, atBreak, 'whitespace')(code) - } - - // To do: generate `data` tokens, add the `text` token later. - // Needs edit map, see: `markdown.rs`. - effects.enter('atxHeadingText') - return data(code) - } - - /** - * In further sequence (after whitespace). - * - * Could be normal “visible” hashes in the heading or a final sequence. - * - * ```markdown - * > | ## aa ## - * ^ - * ``` - * - * @type {State} - */ - function sequenceFurther(code) { - if (code === 35) { - effects.consume(code) - return sequenceFurther - } - effects.exit('atxHeadingSequence') - return atBreak(code) - } - - /** - * In text. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingText') - return atBreak(code) - } - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const setextUnderline = { - name: 'setextUnderline', - tokenize: tokenizeSetextUnderline, - resolveTo: resolveToSetextUnderline -} - -/** @type {Resolver} */ -function resolveToSetextUnderline(events, context) { - // To do: resolve like `markdown-rs`. - let index = events.length - /** @type {number | undefined} */ - let content - /** @type {number | undefined} */ - let text - /** @type {number | undefined} */ - let definition - - // Find the opening of the content. - // It’ll always exist: we don’t tokenize if it isn’t there. - while (index--) { - if (events[index][0] === 'enter') { - if (events[index][1].type === 'content') { - content = index - break - } - if (events[index][1].type === 'paragraph') { - text = index - } - } - // Exit - else { - if (events[index][1].type === 'content') { - // Remove the content end (if needed we’ll add it later) - events.splice(index, 1) - } - if (!definition && events[index][1].type === 'definition') { - definition = index - } - } - } - const heading = { - type: 'setextHeading', - start: Object.assign({}, events[text][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - - // Change the paragraph to setext heading text. - events[text][1].type = 'setextHeadingText' - - // If we have definitions in the content, we’ll keep on having content, - // but we need move it. - if (definition) { - events.splice(text, 0, ['enter', heading, context]) - events.splice(definition + 1, 0, ['exit', events[content][1], context]) - events[content][1].end = Object.assign({}, events[definition][1].end) - } else { - events[content][1] = heading - } - - // Add the heading exit at the end. - events.push(['exit', heading, context]) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeSetextUnderline(effects, ok, nok) { - const self = this - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * At start of heading (setext) underline. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - let index = self.events.length - /** @type {boolean | undefined} */ - let paragraph - // Find an opening. - while (index--) { - // Skip enter/exit of line ending, line prefix, and content. - // We can now either have a definition or a paragraph. - if ( - self.events[index][1].type !== 'lineEnding' && - self.events[index][1].type !== 'linePrefix' && - self.events[index][1].type !== 'content' - ) { - paragraph = self.events[index][1].type === 'paragraph' - break - } - } - - // To do: handle lazy/pierce like `markdown-rs`. - // To do: parse indent like `markdown-rs`. - if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { - effects.enter('setextHeadingLine') - marker = code - return before(code) - } - return nok(code) - } - - /** - * After optional whitespace, at `-` or `=`. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('setextHeadingLineSequence') - return inside(code) - } - - /** - * In sequence. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - effects.exit('setextHeadingLineSequence') - return markdownSpace(code) - ? factorySpace(effects, after, 'lineSuffix')(code) - : after(code) - } - - /** - * After sequence, after optional whitespace. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('setextHeadingLine') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js -/** - * List of lowercase HTML “block” tag names. - * - * The list, when parsing HTML (flow), results in more relaxed rules (condition - * 6). - * Because they are known blocks, the HTML-like syntax doesn’t have to be - * strictly parsed. - * For tag names not in this list, a more strict algorithm (condition 7) is used - * to detect whether the HTML-like syntax is seen as HTML (flow) or not. - * - * This is copied from: - * <https://spec.commonmark.org/0.30/#html-blocks>. - * - * > 👉 **Note**: `search` was added in `CommonMark@0.31`. - */ -const htmlBlockNames = [ - 'address', - 'article', - 'aside', - 'base', - 'basefont', - 'blockquote', - 'body', - 'caption', - 'center', - 'col', - 'colgroup', - 'dd', - 'details', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'frame', - 'frameset', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hr', - 'html', - 'iframe', - 'legend', - 'li', - 'link', - 'main', - 'menu', - 'menuitem', - 'nav', - 'noframes', - 'ol', - 'optgroup', - 'option', - 'p', - 'param', - 'search', - 'section', - 'summary', - 'table', - 'tbody', - 'td', - 'tfoot', - 'th', - 'thead', - 'title', - 'tr', - 'track', - 'ul' -] - -/** - * List of lowercase HTML “raw” tag names. - * - * The list, when parsing HTML (flow), results in HTML that can include lines - * without exiting, until a closing tag also in this list is found (condition - * 1). - * - * This module is copied from: - * <https://spec.commonmark.org/0.30/#html-blocks>. - * - * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - */ -const htmlRawNames = ['pre', 'script', 'style', 'textarea'] - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - -/** @type {Construct} */ -const htmlFlow = { - name: 'htmlFlow', - tokenize: tokenizeHtmlFlow, - resolveTo: resolveToHtmlFlow, - concrete: true -} - -/** @type {Construct} */ -const blankLineBefore = { - tokenize: tokenizeBlankLineBefore, - partial: true -} -const nonLazyContinuationStart = { - tokenize: tokenizeNonLazyContinuationStart, - partial: true -} - -/** @type {Resolver} */ -function resolveToHtmlFlow(events) { - let index = events.length - while (index--) { - if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { - break - } - } - if (index > 1 && events[index - 2][1].type === 'linePrefix') { - // Add the prefix start to the HTML token. - events[index][1].start = events[index - 2][1].start - // Add the prefix start to the HTML line token. - events[index + 1][1].start = events[index - 2][1].start - // Remove the line prefix. - events.splice(index - 2, 2) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlFlow(effects, ok, nok) { - const self = this - /** @type {number} */ - let marker - /** @type {boolean} */ - let closingTag - /** @type {string} */ - let buffer - /** @type {number} */ - let index - /** @type {Code} */ - let markerB - return start - - /** - * Start of HTML (flow). - * - * ```markdown - * > | <x /> - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * At `<`, after optional whitespace. - * - * ```markdown - * > | <x /> - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('htmlFlow') - effects.enter('htmlFlowData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | <x /> - * ^ - * > | <!doctype> - * ^ - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - closingTag = true - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - marker = 3 - // To do: - // tokenizer.concrete = true - // To do: use `markdown-rs` style interrupt. - // While we’re in an instruction instead of a declaration, we’re on a `?` - // right now, so we do need to search for `>`, similar to declarations. - return self.interrupt ? ok : continuationDeclarationInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After `<!`, at declaration, comment, or CDATA. - * - * ```markdown - * > | <!doctype> - * ^ - * > | <!--xxx--> - * ^ - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - marker = 2 - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - marker = 5 - index = 0 - return cdataOpenInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - marker = 4 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After `<!-`, inside a comment, at another `-`. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After `<![`, inside CDATA, expecting `CDATA[`. - * - * ```markdown - * > | <![CDATA[>&<]]> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - if (index === value.length) { - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return cdataOpenInside - } - return nok(code) - } - - /** - * After `</`, in closing tag, at tag name. - * - * ```markdown - * > | </x> - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * In tag name. - * - * ```markdown - * > | <ab> - * ^^ - * > | </ab> - * ^^ - * ``` - * - * @type {State} - */ - function tagName(code) { - if ( - code === null || - code === 47 || - code === 62 || - markdownLineEndingOrSpace(code) - ) { - const slash = code === 47 - const name = buffer.toLowerCase() - if (!slash && !closingTag && htmlRawNames.includes(name)) { - marker = 1 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - if (htmlBlockNames.includes(buffer.toLowerCase())) { - marker = 6 - if (slash) { - effects.consume(code) - return basicSelfClosing - } - - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - marker = 7 - // Do not support complete HTML when interrupting. - return self.interrupt && !self.parser.lazy[self.now().line] - ? nok(code) - : closingTag - ? completeClosingTagAfter(code) - : completeAttributeNameBefore(code) - } - - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - buffer += String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After closing slash of a basic tag name. - * - * ```markdown - * > | <div/> - * ^ - * ``` - * - * @type {State} - */ - function basicSelfClosing(code) { - if (code === 62) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return nok(code) - } - - /** - * After closing slash of a complete tag name. - * - * ```markdown - * > | <x/> - * ^ - * ``` - * - * @type {State} - */ - function completeClosingTagAfter(code) { - if (markdownSpace(code)) { - effects.consume(code) - return completeClosingTagAfter - } - return completeEnd(code) - } - - /** - * At an attribute name. - * - * At first, this state is used after a complete tag name, after whitespace, - * where it expects optional attributes or the end of the tag. - * It is also reused after attributes, when expecting more optional - * attributes. - * - * ```markdown - * > | <a /> - * ^ - * > | <a :b> - * ^ - * > | <a _b> - * ^ - * > | <a b> - * ^ - * > | <a > - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameBefore(code) { - if (code === 47) { - effects.consume(code) - return completeEnd - } - - // ASCII alphanumerical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return completeAttributeName - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameBefore - } - return completeEnd(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | <a :b> - * ^ - * > | <a _b> - * ^ - * > | <a b> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeName(code) { - // ASCII alphanumerical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return completeAttributeName - } - return completeAttributeNameAfter(code) - } - - /** - * After attribute name, at an optional initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | <a b> - * ^ - * > | <a b=c> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return completeAttributeValueBefore - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameAfter - } - return completeAttributeNameBefore(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | <a b=c> - * ^ - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - markerB = code - return completeAttributeValueQuoted - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeValueBefore - } - return completeAttributeValueUnquoted(code) - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | <a b="c"> - * ^ - * > | <a b='c'> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuoted(code) { - if (code === markerB) { - effects.consume(code) - markerB = null - return completeAttributeValueQuotedAfter - } - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return completeAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | <a b=c> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 47 || - code === 60 || - code === 61 || - code === 62 || - code === 96 || - markdownLineEndingOrSpace(code) - ) { - return completeAttributeNameAfter(code) - } - effects.consume(code) - return completeAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the - * end of the tag. - * - * ```markdown - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownSpace(code)) { - return completeAttributeNameBefore(code) - } - return nok(code) - } - - /** - * In certain circumstances of a complete tag where only an `>` is allowed. - * - * ```markdown - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeEnd(code) { - if (code === 62) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * After `>` in a complete tag. - * - * ```markdown - * > | <x> - * ^ - * ``` - * - * @type {State} - */ - function completeAfter(code) { - if (code === null || markdownLineEnding(code)) { - // // Do not form containers. - // tokenizer.concrete = true - return continuation(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * In continuation of any HTML kind. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function continuation(code) { - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationCommentInside - } - if (code === 60 && marker === 1) { - effects.consume(code) - return continuationRawTagOpen - } - if (code === 62 && marker === 4) { - effects.consume(code) - return continuationClose - } - if (code === 63 && marker === 3) { - effects.consume(code) - return continuationDeclarationInside - } - if (code === 93 && marker === 5) { - effects.consume(code) - return continuationCdataInside - } - if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { - effects.exit('htmlFlowData') - return effects.check( - blankLineBefore, - continuationAfter, - continuationStart - )(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationStart(code) - } - effects.consume(code) - return continuation - } - - /** - * In continuation, at eol. - * - * ```markdown - * > | <x> - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStart(code) { - return effects.check( - nonLazyContinuationStart, - continuationStartNonLazy, - continuationAfter - )(code) - } - - /** - * In continuation, at eol, before non-lazy content. - * - * ```markdown - * > | <x> - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStartNonLazy(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return continuationBefore - } - - /** - * In continuation, before non-lazy content. - * - * ```markdown - * | <x> - * > | asd - * ^ - * ``` - * - * @type {State} - */ - function continuationBefore(code) { - if (code === null || markdownLineEnding(code)) { - return continuationStart(code) - } - effects.enter('htmlFlowData') - return continuation(code) - } - - /** - * In comment continuation, after one `-`, expecting another. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function continuationCommentInside(code) { - if (code === 45) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In raw continuation, after `<`, at `/`. - * - * ```markdown - * > | <script>console.log(1)</script> - * ^ - * ``` - * - * @type {State} - */ - function continuationRawTagOpen(code) { - if (code === 47) { - effects.consume(code) - buffer = '' - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In raw continuation, after `</`, in a raw tag name. - * - * ```markdown - * > | <script>console.log(1)</script> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function continuationRawEndTag(code) { - if (code === 62) { - const name = buffer.toLowerCase() - if (htmlRawNames.includes(name)) { - effects.consume(code) - return continuationClose - } - return continuation(code) - } - if (asciiAlpha(code) && buffer.length < 8) { - effects.consume(code) - // @ts-expect-error: not null. - buffer += String.fromCharCode(code) - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In cdata continuation, after `]`, expecting `]>`. - * - * ```markdown - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationCdataInside(code) { - if (code === 93) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In declaration or instruction continuation, at `>`. - * - * ```markdown - * > | <!--> - * ^ - * > | <?> - * ^ - * > | <!q> - * ^ - * > | <!--ab--> - * ^ - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationDeclarationInside(code) { - if (code === 62) { - effects.consume(code) - return continuationClose - } - - // More dashes. - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In closed continuation: everything we get until the eol/eof is part of it. - * - * ```markdown - * > | <!doctype> - * ^ - * ``` - * - * @type {State} - */ - function continuationClose(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationAfter(code) - } - effects.consume(code) - return continuationClose - } - - /** - * Done. - * - * ```markdown - * > | <!doctype> - * ^ - * ``` - * - * @type {State} - */ - function continuationAfter(code) { - effects.exit('htmlFlow') - // // Feel free to interrupt. - // tokenizer.interrupt = false - // // No longer concrete. - // tokenizer.concrete = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuationStart(effects, ok, nok) { - const self = this - return start - - /** - * At eol, before continuation. - * - * ```markdown - * > | * ```js - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return after - } - return nok(code) - } - - /** - * A continuation. - * - * ```markdown - * | * ```js - * > | b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLineBefore(effects, ok, nok) { - return start - - /** - * Before eol, expecting blank line. - * - * ```markdown - * > | <div> - * ^ - * | - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return effects.attempt(blankLine, ok, nok) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const nonLazyContinuation = { - tokenize: tokenizeNonLazyContinuation, - partial: true -} - -/** @type {Construct} */ -const codeFenced = { - name: 'codeFenced', - tokenize: tokenizeCodeFenced, - concrete: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeFenced(effects, ok, nok) { - const self = this - /** @type {Construct} */ - const closeStart = { - tokenize: tokenizeCloseStart, - partial: true - } - let initialPrefix = 0 - let sizeOpen = 0 - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of code. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse whitespace like `markdown-rs`. - return beforeSequenceOpen(code) - } - - /** - * In opening fence, after prefix, at sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeSequenceOpen(code) { - const tail = self.events[self.events.length - 1] - initialPrefix = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - marker = code - effects.enter('codeFenced') - effects.enter('codeFencedFence') - effects.enter('codeFencedFenceSequence') - return sequenceOpen(code) - } - - /** - * In opening fence sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === marker) { - sizeOpen++ - effects.consume(code) - return sequenceOpen - } - if (sizeOpen < 3) { - return nok(code) - } - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, infoBefore, 'whitespace')(code) - : infoBefore(code) - } - - /** - * In opening fence, after the sequence (and optional whitespace), before info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function infoBefore(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return self.interrupt - ? ok(code) - : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFencedFenceInfo') - effects.enter('chunkString', { - contentType: 'string' - }) - return info(code) - } - - /** - * In info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function info(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return infoBefore(code) - } - if (markdownSpace(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return factorySpace(effects, metaBefore, 'whitespace')(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return info - } - - /** - * In opening fence, after info and whitespace, before meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function metaBefore(code) { - if (code === null || markdownLineEnding(code)) { - return infoBefore(code) - } - effects.enter('codeFencedFenceMeta') - effects.enter('chunkString', { - contentType: 'string' - }) - return meta(code) - } - - /** - * In meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function meta(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceMeta') - return infoBefore(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return meta - } - - /** - * At eol/eof in code, before a non-lazy closing fence or content. - * - * ```markdown - * > | ~~~js - * ^ - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function atNonLazyBreak(code) { - return effects.attempt(closeStart, after, contentBefore)(code) - } - - /** - * Before code content, not a closing fence, at eol. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return contentStart - } - - /** - * Before code content, not a closing fence. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentStart(code) { - return initialPrefix > 0 && markdownSpace(code) - ? factorySpace( - effects, - beforeContentChunk, - 'linePrefix', - initialPrefix + 1 - )(code) - : beforeContentChunk(code) - } - - /** - * Before code content, after optional prefix. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeContentChunk(code) { - if (code === null || markdownLineEnding(code)) { - return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFlowValue') - return contentChunk(code) - } - - /** - * In code content. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^^^^^^^^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentChunk(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return beforeContentChunk(code) - } - effects.consume(code) - return contentChunk - } - - /** - * After code. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - effects.exit('codeFenced') - return ok(code) - } - - /** - * @this {TokenizeContext} - * @type {Tokenizer} - */ - function tokenizeCloseStart(effects, ok, nok) { - let size = 0 - return startBefore - - /** - * - * - * @type {State} - */ - function startBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return start - } - - /** - * Before closing fence, at optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Always populated by defaults. - - // To do: `enter` here or in next state? - effects.enter('codeFencedFence') - return markdownSpace(code) - ? factorySpace( - effects, - beforeSequenceClose, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : beforeSequenceClose(code) - } - - /** - * In closing fence, after optional whitespace, at sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function beforeSequenceClose(code) { - if (code === marker) { - effects.enter('codeFencedFenceSequence') - return sequenceClose(code) - } - return nok(code) - } - - /** - * In closing fence sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - if (code === marker) { - size++ - effects.consume(code) - return sequenceClose - } - if (size >= sizeOpen) { - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) - : sequenceCloseAfter(code) - } - return nok(code) - } - - /** - * After closing fence sequence, after optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceCloseAfter(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return ok(code) - } - return nok(code) - } - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuation(effects, ok, nok) { - const self = this - return start - - /** - * - * - * @type {State} - */ - function start(code) { - if (code === null) { - return nok(code) - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineStart - } - - /** - * - * - * @type {State} - */ - function lineStart(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/character-entities/index.js -/** - * Map of named character references. - * - * @type {Record<string, string>} - */ -const characterEntities = { - AElig: 'Æ', - AMP: '&', - Aacute: 'Á', - Abreve: 'Ă', - Acirc: 'Â', - Acy: 'А', - Afr: '𝔄', - Agrave: 'À', - Alpha: 'Α', - Amacr: 'Ā', - And: '⩓', - Aogon: 'Ą', - Aopf: '𝔸', - ApplyFunction: '⁡', - Aring: 'Å', - Ascr: '𝒜', - Assign: '≔', - Atilde: 'Ã', - Auml: 'Ä', - Backslash: '∖', - Barv: '⫧', - Barwed: '⌆', - Bcy: 'Б', - Because: '∵', - Bernoullis: 'ℬ', - Beta: 'Β', - Bfr: '𝔅', - Bopf: '𝔹', - Breve: '˘', - Bscr: 'ℬ', - Bumpeq: '≎', - CHcy: 'Ч', - COPY: '©', - Cacute: 'Ć', - Cap: '⋒', - CapitalDifferentialD: 'ⅅ', - Cayleys: 'ℭ', - Ccaron: 'Č', - Ccedil: 'Ç', - Ccirc: 'Ĉ', - Cconint: '∰', - Cdot: 'Ċ', - Cedilla: '¸', - CenterDot: '·', - Cfr: 'ℭ', - Chi: 'Χ', - CircleDot: '⊙', - CircleMinus: '⊖', - CirclePlus: '⊕', - CircleTimes: '⊗', - ClockwiseContourIntegral: '∲', - CloseCurlyDoubleQuote: '”', - CloseCurlyQuote: '’', - Colon: '∷', - Colone: '⩴', - Congruent: '≡', - Conint: '∯', - ContourIntegral: '∮', - Copf: 'ℂ', - Coproduct: '∐', - CounterClockwiseContourIntegral: '∳', - Cross: '⨯', - Cscr: '𝒞', - Cup: '⋓', - CupCap: '≍', - DD: 'ⅅ', - DDotrahd: '⤑', - DJcy: 'Ђ', - DScy: 'Ѕ', - DZcy: 'Џ', - Dagger: '‡', - Darr: '↡', - Dashv: '⫤', - Dcaron: 'Ď', - Dcy: 'Д', - Del: '∇', - Delta: 'Δ', - Dfr: '𝔇', - DiacriticalAcute: '´', - DiacriticalDot: '˙', - DiacriticalDoubleAcute: '˝', - DiacriticalGrave: '`', - DiacriticalTilde: '˜', - Diamond: '⋄', - DifferentialD: 'ⅆ', - Dopf: '𝔻', - Dot: '¨', - DotDot: '⃜', - DotEqual: '≐', - DoubleContourIntegral: '∯', - DoubleDot: '¨', - DoubleDownArrow: '⇓', - DoubleLeftArrow: '⇐', - DoubleLeftRightArrow: '⇔', - DoubleLeftTee: '⫤', - DoubleLongLeftArrow: '⟸', - DoubleLongLeftRightArrow: '⟺', - DoubleLongRightArrow: '⟹', - DoubleRightArrow: '⇒', - DoubleRightTee: '⊨', - DoubleUpArrow: '⇑', - DoubleUpDownArrow: '⇕', - DoubleVerticalBar: '∥', - DownArrow: '↓', - DownArrowBar: '⤓', - DownArrowUpArrow: '⇵', - DownBreve: '̑', - DownLeftRightVector: '⥐', - DownLeftTeeVector: '⥞', - DownLeftVector: '↽', - DownLeftVectorBar: '⥖', - DownRightTeeVector: '⥟', - DownRightVector: '⇁', - DownRightVectorBar: '⥗', - DownTee: '⊤', - DownTeeArrow: '↧', - Downarrow: '⇓', - Dscr: '𝒟', - Dstrok: 'Đ', - ENG: 'Ŋ', - ETH: 'Ð', - Eacute: 'É', - Ecaron: 'Ě', - Ecirc: 'Ê', - Ecy: 'Э', - Edot: 'Ė', - Efr: '𝔈', - Egrave: 'È', - Element: '∈', - Emacr: 'Ē', - EmptySmallSquare: '◻', - EmptyVerySmallSquare: '▫', - Eogon: 'Ę', - Eopf: '𝔼', - Epsilon: 'Ε', - Equal: '⩵', - EqualTilde: '≂', - Equilibrium: '⇌', - Escr: 'ℰ', - Esim: '⩳', - Eta: 'Η', - Euml: 'Ë', - Exists: '∃', - ExponentialE: 'ⅇ', - Fcy: 'Ф', - Ffr: '𝔉', - FilledSmallSquare: '◼', - FilledVerySmallSquare: '▪', - Fopf: '𝔽', - ForAll: '∀', - Fouriertrf: 'ℱ', - Fscr: 'ℱ', - GJcy: 'Ѓ', - GT: '>', - Gamma: 'Γ', - Gammad: 'Ϝ', - Gbreve: 'Ğ', - Gcedil: 'Ģ', - Gcirc: 'Ĝ', - Gcy: 'Г', - Gdot: 'Ġ', - Gfr: '𝔊', - Gg: '⋙', - Gopf: '𝔾', - GreaterEqual: '≥', - GreaterEqualLess: '⋛', - GreaterFullEqual: '≧', - GreaterGreater: '⪢', - GreaterLess: '≷', - GreaterSlantEqual: '⩾', - GreaterTilde: '≳', - Gscr: '𝒢', - Gt: '≫', - HARDcy: 'Ъ', - Hacek: 'ˇ', - Hat: '^', - Hcirc: 'Ĥ', - Hfr: 'ℌ', - HilbertSpace: 'ℋ', - Hopf: 'ℍ', - HorizontalLine: '─', - Hscr: 'ℋ', - Hstrok: 'Ħ', - HumpDownHump: '≎', - HumpEqual: '≏', - IEcy: 'Е', - IJlig: 'IJ', - IOcy: 'Ё', - Iacute: 'Í', - Icirc: 'Î', - Icy: 'И', - Idot: 'İ', - Ifr: 'ℑ', - Igrave: 'Ì', - Im: 'ℑ', - Imacr: 'Ī', - ImaginaryI: 'ⅈ', - Implies: '⇒', - Int: '∬', - Integral: '∫', - Intersection: '⋂', - InvisibleComma: '⁣', - InvisibleTimes: '⁢', - Iogon: 'Į', - Iopf: '𝕀', - Iota: 'Ι', - Iscr: 'ℐ', - Itilde: 'Ĩ', - Iukcy: 'І', - Iuml: 'Ï', - Jcirc: 'Ĵ', - Jcy: 'Й', - Jfr: '𝔍', - Jopf: '𝕁', - Jscr: '𝒥', - Jsercy: 'Ј', - Jukcy: 'Є', - KHcy: 'Х', - KJcy: 'Ќ', - Kappa: 'Κ', - Kcedil: 'Ķ', - Kcy: 'К', - Kfr: '𝔎', - Kopf: '𝕂', - Kscr: '𝒦', - LJcy: 'Љ', - LT: '<', - Lacute: 'Ĺ', - Lambda: 'Λ', - Lang: '⟪', - Laplacetrf: 'ℒ', - Larr: '↞', - Lcaron: 'Ľ', - Lcedil: 'Ļ', - Lcy: 'Л', - LeftAngleBracket: '⟨', - LeftArrow: '←', - LeftArrowBar: '⇤', - LeftArrowRightArrow: '⇆', - LeftCeiling: '⌈', - LeftDoubleBracket: '⟦', - LeftDownTeeVector: '⥡', - LeftDownVector: '⇃', - LeftDownVectorBar: '⥙', - LeftFloor: '⌊', - LeftRightArrow: '↔', - LeftRightVector: '⥎', - LeftTee: '⊣', - LeftTeeArrow: '↤', - LeftTeeVector: '⥚', - LeftTriangle: '⊲', - LeftTriangleBar: '⧏', - LeftTriangleEqual: '⊴', - LeftUpDownVector: '⥑', - LeftUpTeeVector: '⥠', - LeftUpVector: '↿', - LeftUpVectorBar: '⥘', - LeftVector: '↼', - LeftVectorBar: '⥒', - Leftarrow: '⇐', - Leftrightarrow: '⇔', - LessEqualGreater: '⋚', - LessFullEqual: '≦', - LessGreater: '≶', - LessLess: '⪡', - LessSlantEqual: '⩽', - LessTilde: '≲', - Lfr: '𝔏', - Ll: '⋘', - Lleftarrow: '⇚', - Lmidot: 'Ŀ', - LongLeftArrow: '⟵', - LongLeftRightArrow: '⟷', - LongRightArrow: '⟶', - Longleftarrow: '⟸', - Longleftrightarrow: '⟺', - Longrightarrow: '⟹', - Lopf: '𝕃', - LowerLeftArrow: '↙', - LowerRightArrow: '↘', - Lscr: 'ℒ', - Lsh: '↰', - Lstrok: 'Ł', - Lt: '≪', - Map: '⤅', - Mcy: 'М', - MediumSpace: ' ', - Mellintrf: 'ℳ', - Mfr: '𝔐', - MinusPlus: '∓', - Mopf: '𝕄', - Mscr: 'ℳ', - Mu: 'Μ', - NJcy: 'Њ', - Nacute: 'Ń', - Ncaron: 'Ň', - Ncedil: 'Ņ', - Ncy: 'Н', - NegativeMediumSpace: '​', - NegativeThickSpace: '​', - NegativeThinSpace: '​', - NegativeVeryThinSpace: '​', - NestedGreaterGreater: '≫', - NestedLessLess: '≪', - NewLine: '\n', - Nfr: '𝔑', - NoBreak: '⁠', - NonBreakingSpace: ' ', - Nopf: 'ℕ', - Not: '⫬', - NotCongruent: '≢', - NotCupCap: '≭', - NotDoubleVerticalBar: '∦', - NotElement: '∉', - NotEqual: '≠', - NotEqualTilde: '≂̸', - NotExists: '∄', - NotGreater: '≯', - NotGreaterEqual: '≱', - NotGreaterFullEqual: '≧̸', - NotGreaterGreater: '≫̸', - NotGreaterLess: '≹', - NotGreaterSlantEqual: '⩾̸', - NotGreaterTilde: '≵', - NotHumpDownHump: '≎̸', - NotHumpEqual: '≏̸', - NotLeftTriangle: '⋪', - NotLeftTriangleBar: '⧏̸', - NotLeftTriangleEqual: '⋬', - NotLess: '≮', - NotLessEqual: '≰', - NotLessGreater: '≸', - NotLessLess: '≪̸', - NotLessSlantEqual: '⩽̸', - NotLessTilde: '≴', - NotNestedGreaterGreater: '⪢̸', - NotNestedLessLess: '⪡̸', - NotPrecedes: '⊀', - NotPrecedesEqual: '⪯̸', - NotPrecedesSlantEqual: '⋠', - NotReverseElement: '∌', - NotRightTriangle: '⋫', - NotRightTriangleBar: '⧐̸', - NotRightTriangleEqual: '⋭', - NotSquareSubset: '⊏̸', - NotSquareSubsetEqual: '⋢', - NotSquareSuperset: '⊐̸', - NotSquareSupersetEqual: '⋣', - NotSubset: '⊂⃒', - NotSubsetEqual: '⊈', - NotSucceeds: '⊁', - NotSucceedsEqual: '⪰̸', - NotSucceedsSlantEqual: '⋡', - NotSucceedsTilde: '≿̸', - NotSuperset: '⊃⃒', - NotSupersetEqual: '⊉', - NotTilde: '≁', - NotTildeEqual: '≄', - NotTildeFullEqual: '≇', - NotTildeTilde: '≉', - NotVerticalBar: '∤', - Nscr: '𝒩', - Ntilde: 'Ñ', - Nu: 'Ν', - OElig: 'Œ', - Oacute: 'Ó', - Ocirc: 'Ô', - Ocy: 'О', - Odblac: 'Ő', - Ofr: '𝔒', - Ograve: 'Ò', - Omacr: 'Ō', - Omega: 'Ω', - Omicron: 'Ο', - Oopf: '𝕆', - OpenCurlyDoubleQuote: '“', - OpenCurlyQuote: '‘', - Or: '⩔', - Oscr: '𝒪', - Oslash: 'Ø', - Otilde: 'Õ', - Otimes: '⨷', - Ouml: 'Ö', - OverBar: '‾', - OverBrace: '⏞', - OverBracket: '⎴', - OverParenthesis: '⏜', - PartialD: '∂', - Pcy: 'П', - Pfr: '𝔓', - Phi: 'Φ', - Pi: 'Π', - PlusMinus: '±', - Poincareplane: 'ℌ', - Popf: 'ℙ', - Pr: '⪻', - Precedes: '≺', - PrecedesEqual: '⪯', - PrecedesSlantEqual: '≼', - PrecedesTilde: '≾', - Prime: '″', - Product: '∏', - Proportion: '∷', - Proportional: '∝', - Pscr: '𝒫', - Psi: 'Ψ', - QUOT: '"', - Qfr: '𝔔', - Qopf: 'ℚ', - Qscr: '𝒬', - RBarr: '⤐', - REG: '®', - Racute: 'Ŕ', - Rang: '⟫', - Rarr: '↠', - Rarrtl: '⤖', - Rcaron: 'Ř', - Rcedil: 'Ŗ', - Rcy: 'Р', - Re: 'ℜ', - ReverseElement: '∋', - ReverseEquilibrium: '⇋', - ReverseUpEquilibrium: '⥯', - Rfr: 'ℜ', - Rho: 'Ρ', - RightAngleBracket: '⟩', - RightArrow: '→', - RightArrowBar: '⇥', - RightArrowLeftArrow: '⇄', - RightCeiling: '⌉', - RightDoubleBracket: '⟧', - RightDownTeeVector: '⥝', - RightDownVector: '⇂', - RightDownVectorBar: '⥕', - RightFloor: '⌋', - RightTee: '⊢', - RightTeeArrow: '↦', - RightTeeVector: '⥛', - RightTriangle: '⊳', - RightTriangleBar: '⧐', - RightTriangleEqual: '⊵', - RightUpDownVector: '⥏', - RightUpTeeVector: '⥜', - RightUpVector: '↾', - RightUpVectorBar: '⥔', - RightVector: '⇀', - RightVectorBar: '⥓', - Rightarrow: '⇒', - Ropf: 'ℝ', - RoundImplies: '⥰', - Rrightarrow: '⇛', - Rscr: 'ℛ', - Rsh: '↱', - RuleDelayed: '⧴', - SHCHcy: 'Щ', - SHcy: 'Ш', - SOFTcy: 'Ь', - Sacute: 'Ś', - Sc: '⪼', - Scaron: 'Š', - Scedil: 'Ş', - Scirc: 'Ŝ', - Scy: 'С', - Sfr: '𝔖', - ShortDownArrow: '↓', - ShortLeftArrow: '←', - ShortRightArrow: '→', - ShortUpArrow: '↑', - Sigma: 'Σ', - SmallCircle: '∘', - Sopf: '𝕊', - Sqrt: '√', - Square: '□', - SquareIntersection: '⊓', - SquareSubset: '⊏', - SquareSubsetEqual: '⊑', - SquareSuperset: '⊐', - SquareSupersetEqual: '⊒', - SquareUnion: '⊔', - Sscr: '𝒮', - Star: '⋆', - Sub: '⋐', - Subset: '⋐', - SubsetEqual: '⊆', - Succeeds: '≻', - SucceedsEqual: '⪰', - SucceedsSlantEqual: '≽', - SucceedsTilde: '≿', - SuchThat: '∋', - Sum: '∑', - Sup: '⋑', - Superset: '⊃', - SupersetEqual: '⊇', - Supset: '⋑', - THORN: 'Þ', - TRADE: '™', - TSHcy: 'Ћ', - TScy: 'Ц', - Tab: '\t', - Tau: 'Τ', - Tcaron: 'Ť', - Tcedil: 'Ţ', - Tcy: 'Т', - Tfr: '𝔗', - Therefore: '∴', - Theta: 'Θ', - ThickSpace: '  ', - ThinSpace: ' ', - Tilde: '∼', - TildeEqual: '≃', - TildeFullEqual: '≅', - TildeTilde: '≈', - Topf: '𝕋', - TripleDot: '⃛', - Tscr: '𝒯', - Tstrok: 'Ŧ', - Uacute: 'Ú', - Uarr: '↟', - Uarrocir: '⥉', - Ubrcy: 'Ў', - Ubreve: 'Ŭ', - Ucirc: 'Û', - Ucy: 'У', - Udblac: 'Ű', - Ufr: '𝔘', - Ugrave: 'Ù', - Umacr: 'Ū', - UnderBar: '_', - UnderBrace: '⏟', - UnderBracket: '⎵', - UnderParenthesis: '⏝', - Union: '⋃', - UnionPlus: '⊎', - Uogon: 'Ų', - Uopf: '𝕌', - UpArrow: '↑', - UpArrowBar: '⤒', - UpArrowDownArrow: '⇅', - UpDownArrow: '↕', - UpEquilibrium: '⥮', - UpTee: '⊥', - UpTeeArrow: '↥', - Uparrow: '⇑', - Updownarrow: '⇕', - UpperLeftArrow: '↖', - UpperRightArrow: '↗', - Upsi: 'ϒ', - Upsilon: 'Υ', - Uring: 'Ů', - Uscr: '𝒰', - Utilde: 'Ũ', - Uuml: 'Ü', - VDash: '⊫', - Vbar: '⫫', - Vcy: 'В', - Vdash: '⊩', - Vdashl: '⫦', - Vee: '⋁', - Verbar: '‖', - Vert: '‖', - VerticalBar: '∣', - VerticalLine: '|', - VerticalSeparator: '❘', - VerticalTilde: '≀', - VeryThinSpace: ' ', - Vfr: '𝔙', - Vopf: '𝕍', - Vscr: '𝒱', - Vvdash: '⊪', - Wcirc: 'Ŵ', - Wedge: '⋀', - Wfr: '𝔚', - Wopf: '𝕎', - Wscr: '𝒲', - Xfr: '𝔛', - Xi: 'Ξ', - Xopf: '𝕏', - Xscr: '𝒳', - YAcy: 'Я', - YIcy: 'Ї', - YUcy: 'Ю', - Yacute: 'Ý', - Ycirc: 'Ŷ', - Ycy: 'Ы', - Yfr: '𝔜', - Yopf: '𝕐', - Yscr: '𝒴', - Yuml: 'Ÿ', - ZHcy: 'Ж', - Zacute: 'Ź', - Zcaron: 'Ž', - Zcy: 'З', - Zdot: 'Ż', - ZeroWidthSpace: '​', - Zeta: 'Ζ', - Zfr: 'ℨ', - Zopf: 'ℤ', - Zscr: '𝒵', - aacute: 'á', - abreve: 'ă', - ac: '∾', - acE: '∾̳', - acd: '∿', - acirc: 'â', - acute: '´', - acy: 'а', - aelig: 'æ', - af: '⁡', - afr: '𝔞', - agrave: 'à', - alefsym: 'ℵ', - aleph: 'ℵ', - alpha: 'α', - amacr: 'ā', - amalg: '⨿', - amp: '&', - and: '∧', - andand: '⩕', - andd: '⩜', - andslope: '⩘', - andv: '⩚', - ang: '∠', - ange: '⦤', - angle: '∠', - angmsd: '∡', - angmsdaa: '⦨', - angmsdab: '⦩', - angmsdac: '⦪', - angmsdad: '⦫', - angmsdae: '⦬', - angmsdaf: '⦭', - angmsdag: '⦮', - angmsdah: '⦯', - angrt: '∟', - angrtvb: '⊾', - angrtvbd: '⦝', - angsph: '∢', - angst: 'Å', - angzarr: '⍼', - aogon: 'ą', - aopf: '𝕒', - ap: '≈', - apE: '⩰', - apacir: '⩯', - ape: '≊', - apid: '≋', - apos: "'", - approx: '≈', - approxeq: '≊', - aring: 'å', - ascr: '𝒶', - ast: '*', - asymp: '≈', - asympeq: '≍', - atilde: 'ã', - auml: 'ä', - awconint: '∳', - awint: '⨑', - bNot: '⫭', - backcong: '≌', - backepsilon: '϶', - backprime: '‵', - backsim: '∽', - backsimeq: '⋍', - barvee: '⊽', - barwed: '⌅', - barwedge: '⌅', - bbrk: '⎵', - bbrktbrk: '⎶', - bcong: '≌', - bcy: 'б', - bdquo: '„', - becaus: '∵', - because: '∵', - bemptyv: '⦰', - bepsi: '϶', - bernou: 'ℬ', - beta: 'β', - beth: 'ℶ', - between: '≬', - bfr: '𝔟', - bigcap: '⋂', - bigcirc: '◯', - bigcup: '⋃', - bigodot: '⨀', - bigoplus: '⨁', - bigotimes: '⨂', - bigsqcup: '⨆', - bigstar: '★', - bigtriangledown: '▽', - bigtriangleup: '△', - biguplus: '⨄', - bigvee: '⋁', - bigwedge: '⋀', - bkarow: '⤍', - blacklozenge: '⧫', - blacksquare: '▪', - blacktriangle: '▴', - blacktriangledown: '▾', - blacktriangleleft: '◂', - blacktriangleright: '▸', - blank: '␣', - blk12: '▒', - blk14: '░', - blk34: '▓', - block: '█', - bne: '=⃥', - bnequiv: '≡⃥', - bnot: '⌐', - bopf: '𝕓', - bot: '⊥', - bottom: '⊥', - bowtie: '⋈', - boxDL: '╗', - boxDR: '╔', - boxDl: '╖', - boxDr: '╓', - boxH: '═', - boxHD: '╦', - boxHU: '╩', - boxHd: '╤', - boxHu: '╧', - boxUL: '╝', - boxUR: '╚', - boxUl: '╜', - boxUr: '╙', - boxV: '║', - boxVH: '╬', - boxVL: '╣', - boxVR: '╠', - boxVh: '╫', - boxVl: '╢', - boxVr: '╟', - boxbox: '⧉', - boxdL: '╕', - boxdR: '╒', - boxdl: '┐', - boxdr: '┌', - boxh: '─', - boxhD: '╥', - boxhU: '╨', - boxhd: '┬', - boxhu: '┴', - boxminus: '⊟', - boxplus: '⊞', - boxtimes: '⊠', - boxuL: '╛', - boxuR: '╘', - boxul: '┘', - boxur: '└', - boxv: '│', - boxvH: '╪', - boxvL: '╡', - boxvR: '╞', - boxvh: '┼', - boxvl: '┤', - boxvr: '├', - bprime: '‵', - breve: '˘', - brvbar: '¦', - bscr: '𝒷', - bsemi: '⁏', - bsim: '∽', - bsime: '⋍', - bsol: '\\', - bsolb: '⧅', - bsolhsub: '⟈', - bull: '•', - bullet: '•', - bump: '≎', - bumpE: '⪮', - bumpe: '≏', - bumpeq: '≏', - cacute: 'ć', - cap: '∩', - capand: '⩄', - capbrcup: '⩉', - capcap: '⩋', - capcup: '⩇', - capdot: '⩀', - caps: '∩︀', - caret: '⁁', - caron: 'ˇ', - ccaps: '⩍', - ccaron: 'č', - ccedil: 'ç', - ccirc: 'ĉ', - ccups: '⩌', - ccupssm: '⩐', - cdot: 'ċ', - cedil: '¸', - cemptyv: '⦲', - cent: '¢', - centerdot: '·', - cfr: '𝔠', - chcy: 'ч', - check: '✓', - checkmark: '✓', - chi: 'χ', - cir: '○', - cirE: '⧃', - circ: 'ˆ', - circeq: '≗', - circlearrowleft: '↺', - circlearrowright: '↻', - circledR: '®', - circledS: 'Ⓢ', - circledast: '⊛', - circledcirc: '⊚', - circleddash: '⊝', - cire: '≗', - cirfnint: '⨐', - cirmid: '⫯', - cirscir: '⧂', - clubs: '♣', - clubsuit: '♣', - colon: ':', - colone: '≔', - coloneq: '≔', - comma: ',', - commat: '@', - comp: '∁', - compfn: '∘', - complement: '∁', - complexes: 'ℂ', - cong: '≅', - congdot: '⩭', - conint: '∮', - copf: '𝕔', - coprod: '∐', - copy: '©', - copysr: '℗', - crarr: '↵', - cross: '✗', - cscr: '𝒸', - csub: '⫏', - csube: '⫑', - csup: '⫐', - csupe: '⫒', - ctdot: '⋯', - cudarrl: '⤸', - cudarrr: '⤵', - cuepr: '⋞', - cuesc: '⋟', - cularr: '↶', - cularrp: '⤽', - cup: '∪', - cupbrcap: '⩈', - cupcap: '⩆', - cupcup: '⩊', - cupdot: '⊍', - cupor: '⩅', - cups: '∪︀', - curarr: '↷', - curarrm: '⤼', - curlyeqprec: '⋞', - curlyeqsucc: '⋟', - curlyvee: '⋎', - curlywedge: '⋏', - curren: '¤', - curvearrowleft: '↶', - curvearrowright: '↷', - cuvee: '⋎', - cuwed: '⋏', - cwconint: '∲', - cwint: '∱', - cylcty: '⌭', - dArr: '⇓', - dHar: '⥥', - dagger: '†', - daleth: 'ℸ', - darr: '↓', - dash: '‐', - dashv: '⊣', - dbkarow: '⤏', - dblac: '˝', - dcaron: 'ď', - dcy: 'д', - dd: 'ⅆ', - ddagger: '‡', - ddarr: '⇊', - ddotseq: '⩷', - deg: '°', - delta: 'δ', - demptyv: '⦱', - dfisht: '⥿', - dfr: '𝔡', - dharl: '⇃', - dharr: '⇂', - diam: '⋄', - diamond: '⋄', - diamondsuit: '♦', - diams: '♦', - die: '¨', - digamma: 'ϝ', - disin: '⋲', - div: '÷', - divide: '÷', - divideontimes: '⋇', - divonx: '⋇', - djcy: 'ђ', - dlcorn: '⌞', - dlcrop: '⌍', - dollar: '$', - dopf: '𝕕', - dot: '˙', - doteq: '≐', - doteqdot: '≑', - dotminus: '∸', - dotplus: '∔', - dotsquare: '⊡', - doublebarwedge: '⌆', - downarrow: '↓', - downdownarrows: '⇊', - downharpoonleft: '⇃', - downharpoonright: '⇂', - drbkarow: '⤐', - drcorn: '⌟', - drcrop: '⌌', - dscr: '𝒹', - dscy: 'ѕ', - dsol: '⧶', - dstrok: 'đ', - dtdot: '⋱', - dtri: '▿', - dtrif: '▾', - duarr: '⇵', - duhar: '⥯', - dwangle: '⦦', - dzcy: 'џ', - dzigrarr: '⟿', - eDDot: '⩷', - eDot: '≑', - eacute: 'é', - easter: '⩮', - ecaron: 'ě', - ecir: '≖', - ecirc: 'ê', - ecolon: '≕', - ecy: 'э', - edot: 'ė', - ee: 'ⅇ', - efDot: '≒', - efr: '𝔢', - eg: '⪚', - egrave: 'è', - egs: '⪖', - egsdot: '⪘', - el: '⪙', - elinters: '⏧', - ell: 'ℓ', - els: '⪕', - elsdot: '⪗', - emacr: 'ē', - empty: '∅', - emptyset: '∅', - emptyv: '∅', - emsp13: ' ', - emsp14: ' ', - emsp: ' ', - eng: 'ŋ', - ensp: ' ', - eogon: 'ę', - eopf: '𝕖', - epar: '⋕', - eparsl: '⧣', - eplus: '⩱', - epsi: 'ε', - epsilon: 'ε', - epsiv: 'ϵ', - eqcirc: '≖', - eqcolon: '≕', - eqsim: '≂', - eqslantgtr: '⪖', - eqslantless: '⪕', - equals: '=', - equest: '≟', - equiv: '≡', - equivDD: '⩸', - eqvparsl: '⧥', - erDot: '≓', - erarr: '⥱', - escr: 'ℯ', - esdot: '≐', - esim: '≂', - eta: 'η', - eth: 'ð', - euml: 'ë', - euro: '€', - excl: '!', - exist: '∃', - expectation: 'ℰ', - exponentiale: 'ⅇ', - fallingdotseq: '≒', - fcy: 'ф', - female: '♀', - ffilig: 'ffi', - fflig: 'ff', - ffllig: 'ffl', - ffr: '𝔣', - filig: 'fi', - fjlig: 'fj', - flat: '♭', - fllig: 'fl', - fltns: '▱', - fnof: 'ƒ', - fopf: '𝕗', - forall: '∀', - fork: '⋔', - forkv: '⫙', - fpartint: '⨍', - frac12: '½', - frac13: '⅓', - frac14: '¼', - frac15: '⅕', - frac16: '⅙', - frac18: '⅛', - frac23: '⅔', - frac25: '⅖', - frac34: '¾', - frac35: '⅗', - frac38: '⅜', - frac45: '⅘', - frac56: '⅚', - frac58: '⅝', - frac78: '⅞', - frasl: '⁄', - frown: '⌢', - fscr: '𝒻', - gE: '≧', - gEl: '⪌', - gacute: 'ǵ', - gamma: 'γ', - gammad: 'ϝ', - gap: '⪆', - gbreve: 'ğ', - gcirc: 'ĝ', - gcy: 'г', - gdot: 'ġ', - ge: '≥', - gel: '⋛', - geq: '≥', - geqq: '≧', - geqslant: '⩾', - ges: '⩾', - gescc: '⪩', - gesdot: '⪀', - gesdoto: '⪂', - gesdotol: '⪄', - gesl: '⋛︀', - gesles: '⪔', - gfr: '𝔤', - gg: '≫', - ggg: '⋙', - gimel: 'ℷ', - gjcy: 'ѓ', - gl: '≷', - glE: '⪒', - gla: '⪥', - glj: '⪤', - gnE: '≩', - gnap: '⪊', - gnapprox: '⪊', - gne: '⪈', - gneq: '⪈', - gneqq: '≩', - gnsim: '⋧', - gopf: '𝕘', - grave: '`', - gscr: 'ℊ', - gsim: '≳', - gsime: '⪎', - gsiml: '⪐', - gt: '>', - gtcc: '⪧', - gtcir: '⩺', - gtdot: '⋗', - gtlPar: '⦕', - gtquest: '⩼', - gtrapprox: '⪆', - gtrarr: '⥸', - gtrdot: '⋗', - gtreqless: '⋛', - gtreqqless: '⪌', - gtrless: '≷', - gtrsim: '≳', - gvertneqq: '≩︀', - gvnE: '≩︀', - hArr: '⇔', - hairsp: ' ', - half: '½', - hamilt: 'ℋ', - hardcy: 'ъ', - harr: '↔', - harrcir: '⥈', - harrw: '↭', - hbar: 'ℏ', - hcirc: 'ĥ', - hearts: '♥', - heartsuit: '♥', - hellip: '…', - hercon: '⊹', - hfr: '𝔥', - hksearow: '⤥', - hkswarow: '⤦', - hoarr: '⇿', - homtht: '∻', - hookleftarrow: '↩', - hookrightarrow: '↪', - hopf: '𝕙', - horbar: '―', - hscr: '𝒽', - hslash: 'ℏ', - hstrok: 'ħ', - hybull: '⁃', - hyphen: '‐', - iacute: 'í', - ic: '⁣', - icirc: 'î', - icy: 'и', - iecy: 'е', - iexcl: '¡', - iff: '⇔', - ifr: '𝔦', - igrave: 'ì', - ii: 'ⅈ', - iiiint: '⨌', - iiint: '∭', - iinfin: '⧜', - iiota: '℩', - ijlig: 'ij', - imacr: 'ī', - image: 'ℑ', - imagline: 'ℐ', - imagpart: 'ℑ', - imath: 'ı', - imof: '⊷', - imped: 'Ƶ', - in: '∈', - incare: '℅', - infin: '∞', - infintie: '⧝', - inodot: 'ı', - int: '∫', - intcal: '⊺', - integers: 'ℤ', - intercal: '⊺', - intlarhk: '⨗', - intprod: '⨼', - iocy: 'ё', - iogon: 'į', - iopf: '𝕚', - iota: 'ι', - iprod: '⨼', - iquest: '¿', - iscr: '𝒾', - isin: '∈', - isinE: '⋹', - isindot: '⋵', - isins: '⋴', - isinsv: '⋳', - isinv: '∈', - it: '⁢', - itilde: 'ĩ', - iukcy: 'і', - iuml: 'ï', - jcirc: 'ĵ', - jcy: 'й', - jfr: '𝔧', - jmath: 'ȷ', - jopf: '𝕛', - jscr: '𝒿', - jsercy: 'ј', - jukcy: 'є', - kappa: 'κ', - kappav: 'ϰ', - kcedil: 'ķ', - kcy: 'к', - kfr: '𝔨', - kgreen: 'ĸ', - khcy: 'х', - kjcy: 'ќ', - kopf: '𝕜', - kscr: '𝓀', - lAarr: '⇚', - lArr: '⇐', - lAtail: '⤛', - lBarr: '⤎', - lE: '≦', - lEg: '⪋', - lHar: '⥢', - lacute: 'ĺ', - laemptyv: '⦴', - lagran: 'ℒ', - lambda: 'λ', - lang: '⟨', - langd: '⦑', - langle: '⟨', - lap: '⪅', - laquo: '«', - larr: '←', - larrb: '⇤', - larrbfs: '⤟', - larrfs: '⤝', - larrhk: '↩', - larrlp: '↫', - larrpl: '⤹', - larrsim: '⥳', - larrtl: '↢', - lat: '⪫', - latail: '⤙', - late: '⪭', - lates: '⪭︀', - lbarr: '⤌', - lbbrk: '❲', - lbrace: '{', - lbrack: '[', - lbrke: '⦋', - lbrksld: '⦏', - lbrkslu: '⦍', - lcaron: 'ľ', - lcedil: 'ļ', - lceil: '⌈', - lcub: '{', - lcy: 'л', - ldca: '⤶', - ldquo: '“', - ldquor: '„', - ldrdhar: '⥧', - ldrushar: '⥋', - ldsh: '↲', - le: '≤', - leftarrow: '←', - leftarrowtail: '↢', - leftharpoondown: '↽', - leftharpoonup: '↼', - leftleftarrows: '⇇', - leftrightarrow: '↔', - leftrightarrows: '⇆', - leftrightharpoons: '⇋', - leftrightsquigarrow: '↭', - leftthreetimes: '⋋', - leg: '⋚', - leq: '≤', - leqq: '≦', - leqslant: '⩽', - les: '⩽', - lescc: '⪨', - lesdot: '⩿', - lesdoto: '⪁', - lesdotor: '⪃', - lesg: '⋚︀', - lesges: '⪓', - lessapprox: '⪅', - lessdot: '⋖', - lesseqgtr: '⋚', - lesseqqgtr: '⪋', - lessgtr: '≶', - lesssim: '≲', - lfisht: '⥼', - lfloor: '⌊', - lfr: '𝔩', - lg: '≶', - lgE: '⪑', - lhard: '↽', - lharu: '↼', - lharul: '⥪', - lhblk: '▄', - ljcy: 'љ', - ll: '≪', - llarr: '⇇', - llcorner: '⌞', - llhard: '⥫', - lltri: '◺', - lmidot: 'ŀ', - lmoust: '⎰', - lmoustache: '⎰', - lnE: '≨', - lnap: '⪉', - lnapprox: '⪉', - lne: '⪇', - lneq: '⪇', - lneqq: '≨', - lnsim: '⋦', - loang: '⟬', - loarr: '⇽', - lobrk: '⟦', - longleftarrow: '⟵', - longleftrightarrow: '⟷', - longmapsto: '⟼', - longrightarrow: '⟶', - looparrowleft: '↫', - looparrowright: '↬', - lopar: '⦅', - lopf: '𝕝', - loplus: '⨭', - lotimes: '⨴', - lowast: '∗', - lowbar: '_', - loz: '◊', - lozenge: '◊', - lozf: '⧫', - lpar: '(', - lparlt: '⦓', - lrarr: '⇆', - lrcorner: '⌟', - lrhar: '⇋', - lrhard: '⥭', - lrm: '‎', - lrtri: '⊿', - lsaquo: '‹', - lscr: '𝓁', - lsh: '↰', - lsim: '≲', - lsime: '⪍', - lsimg: '⪏', - lsqb: '[', - lsquo: '‘', - lsquor: '‚', - lstrok: 'ł', - lt: '<', - ltcc: '⪦', - ltcir: '⩹', - ltdot: '⋖', - lthree: '⋋', - ltimes: '⋉', - ltlarr: '⥶', - ltquest: '⩻', - ltrPar: '⦖', - ltri: '◃', - ltrie: '⊴', - ltrif: '◂', - lurdshar: '⥊', - luruhar: '⥦', - lvertneqq: '≨︀', - lvnE: '≨︀', - mDDot: '∺', - macr: '¯', - male: '♂', - malt: '✠', - maltese: '✠', - map: '↦', - mapsto: '↦', - mapstodown: '↧', - mapstoleft: '↤', - mapstoup: '↥', - marker: '▮', - mcomma: '⨩', - mcy: 'м', - mdash: '—', - measuredangle: '∡', - mfr: '𝔪', - mho: '℧', - micro: 'µ', - mid: '∣', - midast: '*', - midcir: '⫰', - middot: '·', - minus: '−', - minusb: '⊟', - minusd: '∸', - minusdu: '⨪', - mlcp: '⫛', - mldr: '…', - mnplus: '∓', - models: '⊧', - mopf: '𝕞', - mp: '∓', - mscr: '𝓂', - mstpos: '∾', - mu: 'μ', - multimap: '⊸', - mumap: '⊸', - nGg: '⋙̸', - nGt: '≫⃒', - nGtv: '≫̸', - nLeftarrow: '⇍', - nLeftrightarrow: '⇎', - nLl: '⋘̸', - nLt: '≪⃒', - nLtv: '≪̸', - nRightarrow: '⇏', - nVDash: '⊯', - nVdash: '⊮', - nabla: '∇', - nacute: 'ń', - nang: '∠⃒', - nap: '≉', - napE: '⩰̸', - napid: '≋̸', - napos: 'ʼn', - napprox: '≉', - natur: '♮', - natural: '♮', - naturals: 'ℕ', - nbsp: ' ', - nbump: '≎̸', - nbumpe: '≏̸', - ncap: '⩃', - ncaron: 'ň', - ncedil: 'ņ', - ncong: '≇', - ncongdot: '⩭̸', - ncup: '⩂', - ncy: 'н', - ndash: '–', - ne: '≠', - neArr: '⇗', - nearhk: '⤤', - nearr: '↗', - nearrow: '↗', - nedot: '≐̸', - nequiv: '≢', - nesear: '⤨', - nesim: '≂̸', - nexist: '∄', - nexists: '∄', - nfr: '𝔫', - ngE: '≧̸', - nge: '≱', - ngeq: '≱', - ngeqq: '≧̸', - ngeqslant: '⩾̸', - nges: '⩾̸', - ngsim: '≵', - ngt: '≯', - ngtr: '≯', - nhArr: '⇎', - nharr: '↮', - nhpar: '⫲', - ni: '∋', - nis: '⋼', - nisd: '⋺', - niv: '∋', - njcy: 'њ', - nlArr: '⇍', - nlE: '≦̸', - nlarr: '↚', - nldr: '‥', - nle: '≰', - nleftarrow: '↚', - nleftrightarrow: '↮', - nleq: '≰', - nleqq: '≦̸', - nleqslant: '⩽̸', - nles: '⩽̸', - nless: '≮', - nlsim: '≴', - nlt: '≮', - nltri: '⋪', - nltrie: '⋬', - nmid: '∤', - nopf: '𝕟', - not: '¬', - notin: '∉', - notinE: '⋹̸', - notindot: '⋵̸', - notinva: '∉', - notinvb: '⋷', - notinvc: '⋶', - notni: '∌', - notniva: '∌', - notnivb: '⋾', - notnivc: '⋽', - npar: '∦', - nparallel: '∦', - nparsl: '⫽⃥', - npart: '∂̸', - npolint: '⨔', - npr: '⊀', - nprcue: '⋠', - npre: '⪯̸', - nprec: '⊀', - npreceq: '⪯̸', - nrArr: '⇏', - nrarr: '↛', - nrarrc: '⤳̸', - nrarrw: '↝̸', - nrightarrow: '↛', - nrtri: '⋫', - nrtrie: '⋭', - nsc: '⊁', - nsccue: '⋡', - nsce: '⪰̸', - nscr: '𝓃', - nshortmid: '∤', - nshortparallel: '∦', - nsim: '≁', - nsime: '≄', - nsimeq: '≄', - nsmid: '∤', - nspar: '∦', - nsqsube: '⋢', - nsqsupe: '⋣', - nsub: '⊄', - nsubE: '⫅̸', - nsube: '⊈', - nsubset: '⊂⃒', - nsubseteq: '⊈', - nsubseteqq: '⫅̸', - nsucc: '⊁', - nsucceq: '⪰̸', - nsup: '⊅', - nsupE: '⫆̸', - nsupe: '⊉', - nsupset: '⊃⃒', - nsupseteq: '⊉', - nsupseteqq: '⫆̸', - ntgl: '≹', - ntilde: 'ñ', - ntlg: '≸', - ntriangleleft: '⋪', - ntrianglelefteq: '⋬', - ntriangleright: '⋫', - ntrianglerighteq: '⋭', - nu: 'ν', - num: '#', - numero: '№', - numsp: ' ', - nvDash: '⊭', - nvHarr: '⤄', - nvap: '≍⃒', - nvdash: '⊬', - nvge: '≥⃒', - nvgt: '>⃒', - nvinfin: '⧞', - nvlArr: '⤂', - nvle: '≤⃒', - nvlt: '<⃒', - nvltrie: '⊴⃒', - nvrArr: '⤃', - nvrtrie: '⊵⃒', - nvsim: '∼⃒', - nwArr: '⇖', - nwarhk: '⤣', - nwarr: '↖', - nwarrow: '↖', - nwnear: '⤧', - oS: 'Ⓢ', - oacute: 'ó', - oast: '⊛', - ocir: '⊚', - ocirc: 'ô', - ocy: 'о', - odash: '⊝', - odblac: 'ő', - odiv: '⨸', - odot: '⊙', - odsold: '⦼', - oelig: 'œ', - ofcir: '⦿', - ofr: '𝔬', - ogon: '˛', - ograve: 'ò', - ogt: '⧁', - ohbar: '⦵', - ohm: 'Ω', - oint: '∮', - olarr: '↺', - olcir: '⦾', - olcross: '⦻', - oline: '‾', - olt: '⧀', - omacr: 'ō', - omega: 'ω', - omicron: 'ο', - omid: '⦶', - ominus: '⊖', - oopf: '𝕠', - opar: '⦷', - operp: '⦹', - oplus: '⊕', - or: '∨', - orarr: '↻', - ord: '⩝', - order: 'ℴ', - orderof: 'ℴ', - ordf: 'ª', - ordm: 'º', - origof: '⊶', - oror: '⩖', - orslope: '⩗', - orv: '⩛', - oscr: 'ℴ', - oslash: 'ø', - osol: '⊘', - otilde: 'õ', - otimes: '⊗', - otimesas: '⨶', - ouml: 'ö', - ovbar: '⌽', - par: '∥', - para: '¶', - parallel: '∥', - parsim: '⫳', - parsl: '⫽', - part: '∂', - pcy: 'п', - percnt: '%', - period: '.', - permil: '‰', - perp: '⊥', - pertenk: '‱', - pfr: '𝔭', - phi: 'φ', - phiv: 'ϕ', - phmmat: 'ℳ', - phone: '☎', - pi: 'π', - pitchfork: '⋔', - piv: 'ϖ', - planck: 'ℏ', - planckh: 'ℎ', - plankv: 'ℏ', - plus: '+', - plusacir: '⨣', - plusb: '⊞', - pluscir: '⨢', - plusdo: '∔', - plusdu: '⨥', - pluse: '⩲', - plusmn: '±', - plussim: '⨦', - plustwo: '⨧', - pm: '±', - pointint: '⨕', - popf: '𝕡', - pound: '£', - pr: '≺', - prE: '⪳', - prap: '⪷', - prcue: '≼', - pre: '⪯', - prec: '≺', - precapprox: '⪷', - preccurlyeq: '≼', - preceq: '⪯', - precnapprox: '⪹', - precneqq: '⪵', - precnsim: '⋨', - precsim: '≾', - prime: '′', - primes: 'ℙ', - prnE: '⪵', - prnap: '⪹', - prnsim: '⋨', - prod: '∏', - profalar: '⌮', - profline: '⌒', - profsurf: '⌓', - prop: '∝', - propto: '∝', - prsim: '≾', - prurel: '⊰', - pscr: '𝓅', - psi: 'ψ', - puncsp: ' ', - qfr: '𝔮', - qint: '⨌', - qopf: '𝕢', - qprime: '⁗', - qscr: '𝓆', - quaternions: 'ℍ', - quatint: '⨖', - quest: '?', - questeq: '≟', - quot: '"', - rAarr: '⇛', - rArr: '⇒', - rAtail: '⤜', - rBarr: '⤏', - rHar: '⥤', - race: '∽̱', - racute: 'ŕ', - radic: '√', - raemptyv: '⦳', - rang: '⟩', - rangd: '⦒', - range: '⦥', - rangle: '⟩', - raquo: '»', - rarr: '→', - rarrap: '⥵', - rarrb: '⇥', - rarrbfs: '⤠', - rarrc: '⤳', - rarrfs: '⤞', - rarrhk: '↪', - rarrlp: '↬', - rarrpl: '⥅', - rarrsim: '⥴', - rarrtl: '↣', - rarrw: '↝', - ratail: '⤚', - ratio: '∶', - rationals: 'ℚ', - rbarr: '⤍', - rbbrk: '❳', - rbrace: '}', - rbrack: ']', - rbrke: '⦌', - rbrksld: '⦎', - rbrkslu: '⦐', - rcaron: 'ř', - rcedil: 'ŗ', - rceil: '⌉', - rcub: '}', - rcy: 'р', - rdca: '⤷', - rdldhar: '⥩', - rdquo: '”', - rdquor: '”', - rdsh: '↳', - real: 'ℜ', - realine: 'ℛ', - realpart: 'ℜ', - reals: 'ℝ', - rect: '▭', - reg: '®', - rfisht: '⥽', - rfloor: '⌋', - rfr: '𝔯', - rhard: '⇁', - rharu: '⇀', - rharul: '⥬', - rho: 'ρ', - rhov: 'ϱ', - rightarrow: '→', - rightarrowtail: '↣', - rightharpoondown: '⇁', - rightharpoonup: '⇀', - rightleftarrows: '⇄', - rightleftharpoons: '⇌', - rightrightarrows: '⇉', - rightsquigarrow: '↝', - rightthreetimes: '⋌', - ring: '˚', - risingdotseq: '≓', - rlarr: '⇄', - rlhar: '⇌', - rlm: '‏', - rmoust: '⎱', - rmoustache: '⎱', - rnmid: '⫮', - roang: '⟭', - roarr: '⇾', - robrk: '⟧', - ropar: '⦆', - ropf: '𝕣', - roplus: '⨮', - rotimes: '⨵', - rpar: ')', - rpargt: '⦔', - rppolint: '⨒', - rrarr: '⇉', - rsaquo: '›', - rscr: '𝓇', - rsh: '↱', - rsqb: ']', - rsquo: '’', - rsquor: '’', - rthree: '⋌', - rtimes: '⋊', - rtri: '▹', - rtrie: '⊵', - rtrif: '▸', - rtriltri: '⧎', - ruluhar: '⥨', - rx: '℞', - sacute: 'ś', - sbquo: '‚', - sc: '≻', - scE: '⪴', - scap: '⪸', - scaron: 'š', - sccue: '≽', - sce: '⪰', - scedil: 'ş', - scirc: 'ŝ', - scnE: '⪶', - scnap: '⪺', - scnsim: '⋩', - scpolint: '⨓', - scsim: '≿', - scy: 'с', - sdot: '⋅', - sdotb: '⊡', - sdote: '⩦', - seArr: '⇘', - searhk: '⤥', - searr: '↘', - searrow: '↘', - sect: '§', - semi: ';', - seswar: '⤩', - setminus: '∖', - setmn: '∖', - sext: '✶', - sfr: '𝔰', - sfrown: '⌢', - sharp: '♯', - shchcy: 'щ', - shcy: 'ш', - shortmid: '∣', - shortparallel: '∥', - shy: '­', - sigma: 'σ', - sigmaf: 'ς', - sigmav: 'ς', - sim: '∼', - simdot: '⩪', - sime: '≃', - simeq: '≃', - simg: '⪞', - simgE: '⪠', - siml: '⪝', - simlE: '⪟', - simne: '≆', - simplus: '⨤', - simrarr: '⥲', - slarr: '←', - smallsetminus: '∖', - smashp: '⨳', - smeparsl: '⧤', - smid: '∣', - smile: '⌣', - smt: '⪪', - smte: '⪬', - smtes: '⪬︀', - softcy: 'ь', - sol: '/', - solb: '⧄', - solbar: '⌿', - sopf: '𝕤', - spades: '♠', - spadesuit: '♠', - spar: '∥', - sqcap: '⊓', - sqcaps: '⊓︀', - sqcup: '⊔', - sqcups: '⊔︀', - sqsub: '⊏', - sqsube: '⊑', - sqsubset: '⊏', - sqsubseteq: '⊑', - sqsup: '⊐', - sqsupe: '⊒', - sqsupset: '⊐', - sqsupseteq: '⊒', - squ: '□', - square: '□', - squarf: '▪', - squf: '▪', - srarr: '→', - sscr: '𝓈', - ssetmn: '∖', - ssmile: '⌣', - sstarf: '⋆', - star: '☆', - starf: '★', - straightepsilon: 'ϵ', - straightphi: 'ϕ', - strns: '¯', - sub: '⊂', - subE: '⫅', - subdot: '⪽', - sube: '⊆', - subedot: '⫃', - submult: '⫁', - subnE: '⫋', - subne: '⊊', - subplus: '⪿', - subrarr: '⥹', - subset: '⊂', - subseteq: '⊆', - subseteqq: '⫅', - subsetneq: '⊊', - subsetneqq: '⫋', - subsim: '⫇', - subsub: '⫕', - subsup: '⫓', - succ: '≻', - succapprox: '⪸', - succcurlyeq: '≽', - succeq: '⪰', - succnapprox: '⪺', - succneqq: '⪶', - succnsim: '⋩', - succsim: '≿', - sum: '∑', - sung: '♪', - sup1: '¹', - sup2: '²', - sup3: '³', - sup: '⊃', - supE: '⫆', - supdot: '⪾', - supdsub: '⫘', - supe: '⊇', - supedot: '⫄', - suphsol: '⟉', - suphsub: '⫗', - suplarr: '⥻', - supmult: '⫂', - supnE: '⫌', - supne: '⊋', - supplus: '⫀', - supset: '⊃', - supseteq: '⊇', - supseteqq: '⫆', - supsetneq: '⊋', - supsetneqq: '⫌', - supsim: '⫈', - supsub: '⫔', - supsup: '⫖', - swArr: '⇙', - swarhk: '⤦', - swarr: '↙', - swarrow: '↙', - swnwar: '⤪', - szlig: 'ß', - target: '⌖', - tau: 'τ', - tbrk: '⎴', - tcaron: 'ť', - tcedil: 'ţ', - tcy: 'т', - tdot: '⃛', - telrec: '⌕', - tfr: '𝔱', - there4: '∴', - therefore: '∴', - theta: 'θ', - thetasym: 'ϑ', - thetav: 'ϑ', - thickapprox: '≈', - thicksim: '∼', - thinsp: ' ', - thkap: '≈', - thksim: '∼', - thorn: 'þ', - tilde: '˜', - times: '×', - timesb: '⊠', - timesbar: '⨱', - timesd: '⨰', - tint: '∭', - toea: '⤨', - top: '⊤', - topbot: '⌶', - topcir: '⫱', - topf: '𝕥', - topfork: '⫚', - tosa: '⤩', - tprime: '‴', - trade: '™', - triangle: '▵', - triangledown: '▿', - triangleleft: '◃', - trianglelefteq: '⊴', - triangleq: '≜', - triangleright: '▹', - trianglerighteq: '⊵', - tridot: '◬', - trie: '≜', - triminus: '⨺', - triplus: '⨹', - trisb: '⧍', - tritime: '⨻', - trpezium: '⏢', - tscr: '𝓉', - tscy: 'ц', - tshcy: 'ћ', - tstrok: 'ŧ', - twixt: '≬', - twoheadleftarrow: '↞', - twoheadrightarrow: '↠', - uArr: '⇑', - uHar: '⥣', - uacute: 'ú', - uarr: '↑', - ubrcy: 'ў', - ubreve: 'ŭ', - ucirc: 'û', - ucy: 'у', - udarr: '⇅', - udblac: 'ű', - udhar: '⥮', - ufisht: '⥾', - ufr: '𝔲', - ugrave: 'ù', - uharl: '↿', - uharr: '↾', - uhblk: '▀', - ulcorn: '⌜', - ulcorner: '⌜', - ulcrop: '⌏', - ultri: '◸', - umacr: 'ū', - uml: '¨', - uogon: 'ų', - uopf: '𝕦', - uparrow: '↑', - updownarrow: '↕', - upharpoonleft: '↿', - upharpoonright: '↾', - uplus: '⊎', - upsi: 'υ', - upsih: 'ϒ', - upsilon: 'υ', - upuparrows: '⇈', - urcorn: '⌝', - urcorner: '⌝', - urcrop: '⌎', - uring: 'ů', - urtri: '◹', - uscr: '𝓊', - utdot: '⋰', - utilde: 'ũ', - utri: '▵', - utrif: '▴', - uuarr: '⇈', - uuml: 'ü', - uwangle: '⦧', - vArr: '⇕', - vBar: '⫨', - vBarv: '⫩', - vDash: '⊨', - vangrt: '⦜', - varepsilon: 'ϵ', - varkappa: 'ϰ', - varnothing: '∅', - varphi: 'ϕ', - varpi: 'ϖ', - varpropto: '∝', - varr: '↕', - varrho: 'ϱ', - varsigma: 'ς', - varsubsetneq: '⊊︀', - varsubsetneqq: '⫋︀', - varsupsetneq: '⊋︀', - varsupsetneqq: '⫌︀', - vartheta: 'ϑ', - vartriangleleft: '⊲', - vartriangleright: '⊳', - vcy: 'в', - vdash: '⊢', - vee: '∨', - veebar: '⊻', - veeeq: '≚', - vellip: '⋮', - verbar: '|', - vert: '|', - vfr: '𝔳', - vltri: '⊲', - vnsub: '⊂⃒', - vnsup: '⊃⃒', - vopf: '𝕧', - vprop: '∝', - vrtri: '⊳', - vscr: '𝓋', - vsubnE: '⫋︀', - vsubne: '⊊︀', - vsupnE: '⫌︀', - vsupne: '⊋︀', - vzigzag: '⦚', - wcirc: 'ŵ', - wedbar: '⩟', - wedge: '∧', - wedgeq: '≙', - weierp: '℘', - wfr: '𝔴', - wopf: '𝕨', - wp: '℘', - wr: '≀', - wreath: '≀', - wscr: '𝓌', - xcap: '⋂', - xcirc: '◯', - xcup: '⋃', - xdtri: '▽', - xfr: '𝔵', - xhArr: '⟺', - xharr: '⟷', - xi: 'ξ', - xlArr: '⟸', - xlarr: '⟵', - xmap: '⟼', - xnis: '⋻', - xodot: '⨀', - xopf: '𝕩', - xoplus: '⨁', - xotime: '⨂', - xrArr: '⟹', - xrarr: '⟶', - xscr: '𝓍', - xsqcup: '⨆', - xuplus: '⨄', - xutri: '△', - xvee: '⋁', - xwedge: '⋀', - yacute: 'ý', - yacy: 'я', - ycirc: 'ŷ', - ycy: 'ы', - yen: '¥', - yfr: '𝔶', - yicy: 'ї', - yopf: '𝕪', - yscr: '𝓎', - yucy: 'ю', - yuml: 'ÿ', - zacute: 'ź', - zcaron: 'ž', - zcy: 'з', - zdot: 'ż', - zeetrf: 'ℨ', - zeta: 'ζ', - zfr: '𝔷', - zhcy: 'ж', - zigrarr: '⇝', - zopf: '𝕫', - zscr: '𝓏', - zwj: '‍', - zwnj: '‌' -} - -;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js - - -const own = {}.hasOwnProperty - -/** - * Decode a single character reference (without the `&` or `;`). - * You probably only need this when you’re building parsers yourself that follow - * different rules compared to HTML. - * This is optimized to be tiny in browsers. - * - * @param {string} value - * `notin` (named), `#123` (deci), `#x123` (hexa). - * @returns {string|false} - * Decoded reference. - */ -function decodeNamedCharacterReference(value) { - return own.call(characterEntities, value) ? characterEntities[value] : false -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const characterReference = { - name: 'characterReference', - tokenize: tokenizeCharacterReference -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterReference(effects, ok, nok) { - const self = this - let size = 0 - /** @type {number} */ - let max - /** @type {(code: Code) => boolean} */ - let test - return start - - /** - * Start of character reference. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterReference') - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - return open - } - - /** - * After `&`, at `#` for numeric references or alphanumeric for named - * references. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 35) { - effects.enter('characterReferenceMarkerNumeric') - effects.consume(code) - effects.exit('characterReferenceMarkerNumeric') - return numeric - } - effects.enter('characterReferenceValue') - max = 31 - test = asciiAlphanumeric - return value(code) - } - - /** - * After `#`, at `x` for hexadecimals or digit for decimals. - * - * ```markdown - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function numeric(code) { - if (code === 88 || code === 120) { - effects.enter('characterReferenceMarkerHexadecimal') - effects.consume(code) - effects.exit('characterReferenceMarkerHexadecimal') - effects.enter('characterReferenceValue') - max = 6 - test = asciiHexDigit - return value - } - effects.enter('characterReferenceValue') - max = 7 - test = asciiDigit - return value(code) - } - - /** - * After markers (`&#x`, `&#`, or `&`), in value, before `;`. - * - * The character reference kind defines what and how many characters are - * allowed. - * - * ```markdown - * > | a&b - * ^^^ - * > | a{b - * ^^^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function value(code) { - if (code === 59 && size) { - const token = effects.exit('characterReferenceValue') - if ( - test === asciiAlphanumeric && - !decodeNamedCharacterReference(self.sliceSerialize(token)) - ) { - return nok(code) - } - - // To do: `markdown-rs` uses a different name: - // `CharacterReferenceMarkerSemi`. - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - effects.exit('characterReference') - return ok - } - if (test(code) && size++ < max) { - effects.consume(code) - return value - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const characterEscape = { - name: 'characterEscape', - tokenize: tokenizeCharacterEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterEscape(effects, ok, nok) { - return start - - /** - * Start of character escape. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterEscape') - effects.enter('escapeMarker') - effects.consume(code) - effects.exit('escapeMarker') - return inside - } - - /** - * After `\`, at punctuation. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - // ASCII punctuation. - if (asciiPunctuation(code)) { - effects.enter('characterEscapeValue') - effects.consume(code) - effects.exit('characterEscapeValue') - effects.exit('characterEscape') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const lineEnding = { - name: 'lineEnding', - tokenize: tokenizeLineEnding -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLineEnding(effects, ok) { - return start - - /** @type {State} */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, ok, 'linePrefix') - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - - -/** @type {Construct} */ -const labelEnd = { - name: 'labelEnd', - tokenize: tokenizeLabelEnd, - resolveTo: resolveToLabelEnd, - resolveAll: resolveAllLabelEnd -} - -/** @type {Construct} */ -const resourceConstruct = { - tokenize: tokenizeResource -} -/** @type {Construct} */ -const referenceFullConstruct = { - tokenize: tokenizeReferenceFull -} -/** @type {Construct} */ -const referenceCollapsedConstruct = { - tokenize: tokenizeReferenceCollapsed -} - -/** @type {Resolver} */ -function resolveAllLabelEnd(events) { - let index = -1 - while (++index < events.length) { - const token = events[index][1] - if ( - token.type === 'labelImage' || - token.type === 'labelLink' || - token.type === 'labelEnd' - ) { - // Remove the marker. - events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) - token.type = 'data' - index++ - } - } - return events -} - -/** @type {Resolver} */ -function resolveToLabelEnd(events, context) { - let index = events.length - let offset = 0 - /** @type {Token} */ - let token - /** @type {number | undefined} */ - let open - /** @type {number | undefined} */ - let close - /** @type {Array<Event>} */ - let media - - // Find an opening. - while (index--) { - token = events[index][1] - if (open) { - // If we see another link, or inactive link label, we’ve been here before. - if ( - token.type === 'link' || - (token.type === 'labelLink' && token._inactive) - ) { - break - } - - // Mark other link openings as inactive, as we can’t have links in - // links. - if (events[index][0] === 'enter' && token.type === 'labelLink') { - token._inactive = true - } - } else if (close) { - if ( - events[index][0] === 'enter' && - (token.type === 'labelImage' || token.type === 'labelLink') && - !token._balanced - ) { - open = index - if (token.type !== 'labelLink') { - offset = 2 - break - } - } - } else if (token.type === 'labelEnd') { - close = index - } - } - const group = { - type: events[open][1].type === 'labelLink' ? 'link' : 'image', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - const label = { - type: 'label', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[close][1].end) - } - const text = { - type: 'labelText', - start: Object.assign({}, events[open + offset + 2][1].end), - end: Object.assign({}, events[close - 2][1].start) - } - media = [ - ['enter', group, context], - ['enter', label, context] - ] - - // Opening marker. - media = push(media, events.slice(open + 1, open + offset + 3)) - - // Text open. - media = push(media, [['enter', text, context]]) - - // Always populated by defaults. - - // Between. - media = push( - media, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + offset + 4, close - 3), - context - ) - ) - - // Text close, marker close, label close. - media = push(media, [ - ['exit', text, context], - events[close - 2], - events[close - 1], - ['exit', label, context] - ]) - - // Reference, resource, or so. - media = push(media, events.slice(close + 1)) - - // Media close. - media = push(media, [['exit', group, context]]) - splice(events, open, events.length, media) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelEnd(effects, ok, nok) { - const self = this - let index = self.events.length - /** @type {Token} */ - let labelStart - /** @type {boolean} */ - let defined - - // Find an opening. - while (index--) { - if ( - (self.events[index][1].type === 'labelImage' || - self.events[index][1].type === 'labelLink') && - !self.events[index][1]._balanced - ) { - labelStart = self.events[index][1] - break - } - } - return start - - /** - * Start of label end. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ``` - * - * @type {State} - */ - function start(code) { - // If there is not an okay opening. - if (!labelStart) { - return nok(code) - } - - // If the corresponding label (link) start is marked as inactive, - // it means we’d be wrapping a link, like this: - // - // ```markdown - // > | a [b [c](d) e](f) g. - // ^ - // ``` - // - // We can’t have that, so it’s just balanced brackets. - if (labelStart._inactive) { - return labelEndNok(code) - } - defined = self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize({ - start: labelStart.end, - end: self.now() - }) - ) - ) - effects.enter('labelEnd') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelEnd') - return after - } - - /** - * After `]`. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - // Note: `markdown-rs` also parses GFM footnotes here, which for us is in - // an extension. - - // Resource (`[asd](fgh)`)? - if (code === 40) { - return effects.attempt( - resourceConstruct, - labelEndOk, - defined ? labelEndOk : labelEndNok - )(code) - } - - // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? - if (code === 91) { - return effects.attempt( - referenceFullConstruct, - labelEndOk, - defined ? referenceNotFull : labelEndNok - )(code) - } - - // Shortcut (`[asd]`) reference? - return defined ? labelEndOk(code) : labelEndNok(code) - } - - /** - * After `]`, at `[`, but not at a full reference. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function referenceNotFull(code) { - return effects.attempt( - referenceCollapsedConstruct, - labelEndOk, - labelEndNok - )(code) - } - - /** - * Done, we found something. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndOk(code) { - // Note: `markdown-rs` does a bunch of stuff here. - return ok(code) - } - - /** - * Done, it’s nothing. - * - * There was an okay opening, but we didn’t match anything. - * - * ```markdown - * > | [a](b c - * ^ - * > | [a][b c - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndNok(code) { - labelStart._balanced = true - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeResource(effects, ok, nok) { - return resourceStart - - /** - * At a resource. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceStart(code) { - effects.enter('resource') - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - return resourceBefore - } - - /** - * In resource, after `(`, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceOpen)(code) - : resourceOpen(code) - } - - /** - * In resource, after optional whitespace, at `)` or a destination. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceOpen(code) { - if (code === 41) { - return resourceEnd(code) - } - return factoryDestination( - effects, - resourceDestinationAfter, - resourceDestinationMissing, - 'resourceDestination', - 'resourceDestinationLiteral', - 'resourceDestinationLiteralMarker', - 'resourceDestinationRaw', - 'resourceDestinationString', - 32 - )(code) - } - - /** - * In resource, after destination, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceBetween)(code) - : resourceEnd(code) - } - - /** - * At invalid destination. - * - * ```markdown - * > | [a](<<) b - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationMissing(code) { - return nok(code) - } - - /** - * In resource, after destination and whitespace, at `(` or title. - * - * ```markdown - * > | [a](b ) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBetween(code) { - if (code === 34 || code === 39 || code === 40) { - return factoryTitle( - effects, - resourceTitleAfter, - nok, - 'resourceTitle', - 'resourceTitleMarker', - 'resourceTitleString' - )(code) - } - return resourceEnd(code) - } - - /** - * In resource, after title, at optional whitespace. - * - * ```markdown - * > | [a](b "c") d - * ^ - * ``` - * - * @type {State} - */ - function resourceTitleAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceEnd)(code) - : resourceEnd(code) - } - - /** - * In resource, at `)`. - * - * ```markdown - * > | [a](b) d - * ^ - * ``` - * - * @type {State} - */ - function resourceEnd(code) { - if (code === 41) { - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - effects.exit('resource') - return ok - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceFull(effects, ok, nok) { - const self = this - return referenceFull - - /** - * In a reference (full), at the `[`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFull(code) { - return factoryLabel.call( - self, - effects, - referenceFullAfter, - referenceFullMissing, - 'reference', - 'referenceMarker', - 'referenceString' - )(code) - } - - /** - * In a reference (full), after `]`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullAfter(code) { - return self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - ) - ? ok(code) - : nok(code) - } - - /** - * In reference (full) that was missing. - * - * ```markdown - * > | [a][b d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullMissing(code) { - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceCollapsed(effects, ok, nok) { - return referenceCollapsedStart - - /** - * In reference (collapsed), at `[`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedStart(code) { - // We only attempt a collapsed label if there’s a `[`. - - effects.enter('reference') - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - return referenceCollapsedOpen - } - - /** - * In reference (collapsed), at `]`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedOpen(code) { - if (code === 93) { - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - effects.exit('reference') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartImage = { - name: 'labelStartImage', - tokenize: tokenizeLabelStartImage, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartImage(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (image) start. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelImage') - effects.enter('labelImageMarker') - effects.consume(code) - effects.exit('labelImageMarker') - return open - } - - /** - * After `!`, at `[`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 91) { - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelImage') - return after - } - return nok(code) - } - - /** - * After `![`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * This is needed in because, when GFM footnotes are enabled, images never - * form when started with a `^`. - * Instead, links form: - * - * ```markdown - * ![^a](b) - * - * ![^a][b] - * - * [b]: c - * ``` - * - * ```html - * <p>!<a href=\"b\">^a</a></p> - * <p>!<a href=\"c\">^a</a></p> - * ``` - * - * @type {State} - */ - function after(code) { - // To do: use a new field to do this, this is still needed for - // `micromark-extension-gfm-footnote`, but the `label-start-link` - // behavior isn’t. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -function classifyCharacter(code) { - if ( - code === null || - markdownLineEndingOrSpace(code) || - unicodeWhitespace(code) - ) { - return 1 - } - if (unicodePunctuation(code)) { - return 2 - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const attention = { - name: 'attention', - tokenize: tokenizeAttention, - resolveAll: resolveAllAttention -} - -/** - * Take all events and resolve attention to emphasis or strong. - * - * @type {Resolver} - */ -function resolveAllAttention(events, context) { - let index = -1 - /** @type {number} */ - let open - /** @type {Token} */ - let group - /** @type {Token} */ - let text - /** @type {Token} */ - let openingSequence - /** @type {Token} */ - let closingSequence - /** @type {number} */ - let use - /** @type {Array<Event>} */ - let nextEvents - /** @type {number} */ - let offset - - // Walk through all events. - // - // Note: performance of this is fine on an mb of normal markdown, but it’s - // a bottleneck for malicious stuff. - while (++index < events.length) { - // Find a token that can close. - if ( - events[index][0] === 'enter' && - events[index][1].type === 'attentionSequence' && - events[index][1]._close - ) { - open = index - - // Now walk back to find an opener. - while (open--) { - // Find a token that can open the closer. - if ( - events[open][0] === 'exit' && - events[open][1].type === 'attentionSequence' && - events[open][1]._open && - // If the markers are the same: - context.sliceSerialize(events[open][1]).charCodeAt(0) === - context.sliceSerialize(events[index][1]).charCodeAt(0) - ) { - // If the opening can close or the closing can open, - // and the close size *is not* a multiple of three, - // but the sum of the opening and closing size *is* multiple of three, - // then don’t match. - if ( - (events[open][1]._close || events[index][1]._open) && - (events[index][1].end.offset - events[index][1].start.offset) % 3 && - !( - (events[open][1].end.offset - - events[open][1].start.offset + - events[index][1].end.offset - - events[index][1].start.offset) % - 3 - ) - ) { - continue - } - - // Number of markers to use from the sequence. - use = - events[open][1].end.offset - events[open][1].start.offset > 1 && - events[index][1].end.offset - events[index][1].start.offset > 1 - ? 2 - : 1 - const start = Object.assign({}, events[open][1].end) - const end = Object.assign({}, events[index][1].start) - movePoint(start, -use) - movePoint(end, use) - openingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start, - end: Object.assign({}, events[open][1].end) - } - closingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start: Object.assign({}, events[index][1].start), - end - } - text = { - type: use > 1 ? 'strongText' : 'emphasisText', - start: Object.assign({}, events[open][1].end), - end: Object.assign({}, events[index][1].start) - } - group = { - type: use > 1 ? 'strong' : 'emphasis', - start: Object.assign({}, openingSequence.start), - end: Object.assign({}, closingSequence.end) - } - events[open][1].end = Object.assign({}, openingSequence.start) - events[index][1].start = Object.assign({}, closingSequence.end) - nextEvents = [] - - // If there are more markers in the opening, add them before. - if (events[open][1].end.offset - events[open][1].start.offset) { - nextEvents = push(nextEvents, [ - ['enter', events[open][1], context], - ['exit', events[open][1], context] - ]) - } - - // Opening. - nextEvents = push(nextEvents, [ - ['enter', group, context], - ['enter', openingSequence, context], - ['exit', openingSequence, context], - ['enter', text, context] - ]) - - // Always populated by defaults. - - // Between. - nextEvents = push( - nextEvents, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + 1, index), - context - ) - ) - - // Closing. - nextEvents = push(nextEvents, [ - ['exit', text, context], - ['enter', closingSequence, context], - ['exit', closingSequence, context], - ['exit', group, context] - ]) - - // If there are more markers in the closing, add them after. - if (events[index][1].end.offset - events[index][1].start.offset) { - offset = 2 - nextEvents = push(nextEvents, [ - ['enter', events[index][1], context], - ['exit', events[index][1], context] - ]) - } else { - offset = 0 - } - splice(events, open - 1, index - open + 3, nextEvents) - index = open + nextEvents.length - offset - 2 - break - } - } - } - } - - // Remove remaining sequences. - index = -1 - while (++index < events.length) { - if (events[index][1].type === 'attentionSequence') { - events[index][1].type = 'data' - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAttention(effects, ok) { - const attentionMarkers = this.parser.constructs.attentionMarkers.null - const previous = this.previous - const before = classifyCharacter(previous) - - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Before a sequence. - * - * ```markdown - * > | ** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - marker = code - effects.enter('attentionSequence') - return inside(code) - } - - /** - * In a sequence. - * - * ```markdown - * > | ** - * ^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - const token = effects.exit('attentionSequence') - - // To do: next major: move this to resolver, just like `markdown-rs`. - const after = classifyCharacter(code) - - // Always populated by defaults. - - const open = - !after || (after === 2 && before) || attentionMarkers.includes(code) - const close = - !before || (before === 2 && after) || attentionMarkers.includes(previous) - token._open = Boolean(marker === 42 ? open : open && (before || !close)) - token._close = Boolean(marker === 42 ? close : close && (after || !open)) - return ok(code) - } -} - -/** - * Move a point a bit. - * - * Note: `move` only works inside lines! It’s not possible to move past other - * chunks (replacement characters, tabs, or line endings). - * - * @param {Point} point - * @param {number} offset - * @returns {void} - */ -function movePoint(point, offset) { - point.column += offset - point.offset += offset - point._bufferIndex += offset -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const autolink = { - name: 'autolink', - tokenize: tokenizeAutolink -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAutolink(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of an autolink. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('autolink') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.enter('autolinkProtocol') - return open - } - - /** - * After `<`, at protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (asciiAlpha(code)) { - effects.consume(code) - return schemeOrEmailAtext - } - return emailAtext(code) - } - - /** - * At second byte of protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function schemeOrEmailAtext(code) { - // ASCII alphanumeric and `+`, `-`, and `.`. - if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { - // Count the previous alphabetical from `open` too. - size = 1 - return schemeInsideOrEmailAtext(code) - } - return emailAtext(code) - } - - /** - * In ambiguous protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function schemeInsideOrEmailAtext(code) { - if (code === 58) { - effects.consume(code) - size = 0 - return urlInside - } - - // ASCII alphanumeric and `+`, `-`, and `.`. - if ( - (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && - size++ < 32 - ) { - effects.consume(code) - return schemeInsideOrEmailAtext - } - size = 0 - return emailAtext(code) - } - - /** - * After protocol, in URL. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * ``` - * - * @type {State} - */ - function urlInside(code) { - if (code === 62) { - effects.exit('autolinkProtocol') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - - // ASCII control, space, or `<`. - if (code === null || code === 32 || code === 60 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return urlInside - } - - /** - * In email atext. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailAtext(code) { - if (code === 64) { - effects.consume(code) - return emailAtSignOrDot - } - if (asciiAtext(code)) { - effects.consume(code) - return emailAtext - } - return nok(code) - } - - /** - * In label, after at-sign or dot. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ ^ - * ``` - * - * @type {State} - */ - function emailAtSignOrDot(code) { - return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) - } - - /** - * In label, where `.` and `>` are allowed. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailLabel(code) { - if (code === 46) { - effects.consume(code) - size = 0 - return emailAtSignOrDot - } - if (code === 62) { - // Exit, then change the token type. - effects.exit('autolinkProtocol').type = 'autolinkEmail' - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - return emailValue(code) - } - - /** - * In label, where `.` and `>` are *not* allowed. - * - * Though, this is also used in `emailLabel` to parse other values. - * - * ```markdown - * > | a<user.name@ex-ample.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailValue(code) { - // ASCII alphanumeric or `-`. - if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { - const next = code === 45 ? emailValue : emailLabel - effects.consume(code) - return next - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const htmlText = { - name: 'htmlText', - tokenize: tokenizeHtmlText -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlText(effects, ok, nok) { - const self = this - /** @type {NonNullable<Code> | undefined} */ - let marker - /** @type {number} */ - let index - /** @type {State} */ - let returnState - return start - - /** - * Start of HTML (text). - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('htmlText') - effects.enter('htmlTextData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | a <b> c - * ^ - * > | a <!doctype> c - * ^ - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - return instruction - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagOpen - } - return nok(code) - } - - /** - * After `<!`, at declaration, comment, or CDATA. - * - * ```markdown - * > | a <!doctype> c - * ^ - * > | a <!--b--> c - * ^ - * > | a <![CDATA[>&<]]> c - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - index = 0 - return cdataOpenInside - } - if (asciiAlpha(code)) { - effects.consume(code) - return declaration - } - return nok(code) - } - - /** - * In a comment, after `<!-`, at another `-`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return nok(code) - } - - /** - * In comment. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function comment(code) { - if (code === null) { - return nok(code) - } - if (code === 45) { - effects.consume(code) - return commentClose - } - if (markdownLineEnding(code)) { - returnState = comment - return lineEndingBefore(code) - } - effects.consume(code) - return comment - } - - /** - * In comment, after `-`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentClose(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return comment(code) - } - - /** - * In comment, after `--`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentEnd(code) { - return code === 62 - ? end(code) - : code === 45 - ? commentClose(code) - : comment(code) - } - - /** - * After `<![`, in CDATA, expecting `CDATA[`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - return index === value.length ? cdata : cdataOpenInside - } - return nok(code) - } - - /** - * In CDATA. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^^^ - * ``` - * - * @type {State} - */ - function cdata(code) { - if (code === null) { - return nok(code) - } - if (code === 93) { - effects.consume(code) - return cdataClose - } - if (markdownLineEnding(code)) { - returnState = cdata - return lineEndingBefore(code) - } - effects.consume(code) - return cdata - } - - /** - * In CDATA, after `]`, at another `]`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataClose(code) { - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In CDATA, after `]]`, at `>`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataEnd(code) { - if (code === 62) { - return end(code) - } - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In declaration. - * - * ```markdown - * > | a <!b> c - * ^ - * ``` - * - * @type {State} - */ - function declaration(code) { - if (code === null || code === 62) { - return end(code) - } - if (markdownLineEnding(code)) { - returnState = declaration - return lineEndingBefore(code) - } - effects.consume(code) - return declaration - } - - /** - * In instruction. - * - * ```markdown - * > | a <?b?> c - * ^ - * ``` - * - * @type {State} - */ - function instruction(code) { - if (code === null) { - return nok(code) - } - if (code === 63) { - effects.consume(code) - return instructionClose - } - if (markdownLineEnding(code)) { - returnState = instruction - return lineEndingBefore(code) - } - effects.consume(code) - return instruction - } - - /** - * In instruction, after `?`, at `>`. - * - * ```markdown - * > | a <?b?> c - * ^ - * ``` - * - * @type {State} - */ - function instructionClose(code) { - return code === 62 ? end(code) : instruction(code) - } - - /** - * After `</`, in closing tag, at tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagClose - } - return nok(code) - } - - /** - * After `</x`, in a tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagClose(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagClose - } - return tagCloseBetween(code) - } - - /** - * In closing tag, after tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseBetween(code) { - if (markdownLineEnding(code)) { - returnState = tagCloseBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagCloseBetween - } - return end(code) - } - - /** - * After `<x`, in opening tag name. - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function tagOpen(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagOpen - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In opening tag, after tag name. - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function tagOpenBetween(code) { - if (code === 47) { - effects.consume(code) - return end - } - - // ASCII alphabetical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return tagOpenAttributeName - } - if (markdownLineEnding(code)) { - returnState = tagOpenBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenBetween - } - return end(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | a <b c> d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeName(code) { - // ASCII alphabetical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return tagOpenAttributeName - } - return tagOpenAttributeNameAfter(code) - } - - /** - * After attribute name, before initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | a <b c> d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeNameAfter - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeNameAfter - } - return tagOpenBetween(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | a <b c=d> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - marker = code - return tagOpenAttributeValueQuoted - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueBefore - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuoted(code) { - if (code === marker) { - effects.consume(code) - marker = undefined - return tagOpenAttributeValueQuotedAfter - } - if (code === null) { - return nok(code) - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueQuoted - return lineEndingBefore(code) - } - effects.consume(code) - return tagOpenAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | a <b c=d> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 60 || - code === 61 || - code === 96 - ) { - return nok(code) - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the end - * of the tag. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In certain circumstances of a tag where only an `>` is allowed. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function end(code) { - if (code === 62) { - effects.consume(code) - effects.exit('htmlTextData') - effects.exit('htmlText') - return ok - } - return nok(code) - } - - /** - * At eol. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * > | a <!--a - * ^ - * | b--> - * ``` - * - * @type {State} - */ - function lineEndingBefore(code) { - effects.exit('htmlTextData') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineEndingAfter - } - - /** - * After eol, at optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a <!--a - * > | b--> - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfter(code) { - // Always populated by defaults. - - return markdownSpace(code) - ? factorySpace( - effects, - lineEndingAfterPrefix, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : lineEndingAfterPrefix(code) - } - - /** - * After eol, after optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a <!--a - * > | b--> - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfterPrefix(code) { - effects.enter('htmlTextData') - return returnState(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartLink = { - name: 'labelStartLink', - tokenize: tokenizeLabelStartLink, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartLink(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (link) start. - * - * ```markdown - * > | a [b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelLink') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelLink') - return after - } - - /** @type {State} */ - function after(code) { - // To do: this isn’t needed in `micromark-extension-gfm-footnote`, - // remove. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const hardBreakEscape = { - name: 'hardBreakEscape', - tokenize: tokenizeHardBreakEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHardBreakEscape(effects, ok, nok) { - return start - - /** - * Start of a hard break (escape). - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('hardBreakEscape') - effects.consume(code) - return after - } - - /** - * After `\`, at eol. - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownLineEnding(code)) { - effects.exit('hardBreakEscape') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Previous} Previous - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const codeText = { - name: 'codeText', - tokenize: tokenizeCodeText, - resolve: resolveCodeText, - previous -} - -// To do: next major: don’t resolve, like `markdown-rs`. -/** @type {Resolver} */ -function resolveCodeText(events) { - let tailExitIndex = events.length - 4 - let headEnterIndex = 3 - /** @type {number} */ - let index - /** @type {number | undefined} */ - let enter - - // If we start and end with an EOL or a space. - if ( - (events[headEnterIndex][1].type === 'lineEnding' || - events[headEnterIndex][1].type === 'space') && - (events[tailExitIndex][1].type === 'lineEnding' || - events[tailExitIndex][1].type === 'space') - ) { - index = headEnterIndex - - // And we have data. - while (++index < tailExitIndex) { - if (events[index][1].type === 'codeTextData') { - // Then we have padding. - events[headEnterIndex][1].type = 'codeTextPadding' - events[tailExitIndex][1].type = 'codeTextPadding' - headEnterIndex += 2 - tailExitIndex -= 2 - break - } - } - } - - // Merge adjacent spaces and data. - index = headEnterIndex - 1 - tailExitIndex++ - while (++index <= tailExitIndex) { - if (enter === undefined) { - if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { - enter = index - } - } else if ( - index === tailExitIndex || - events[index][1].type === 'lineEnding' - ) { - events[enter][1].type = 'codeTextData' - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - tailExitIndex -= index - enter - 2 - index = enter + 2 - } - enter = undefined - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Previous} - */ -function previous(code) { - // If there is a previous code, there will always be a tail. - return ( - code !== 96 || - this.events[this.events.length - 1][1].type === 'characterEscape' - ) -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeText(effects, ok, nok) { - const self = this - let sizeOpen = 0 - /** @type {number} */ - let size - /** @type {Token} */ - let token - return start - - /** - * Start of code (text). - * - * ```markdown - * > | `a` - * ^ - * > | \`a` - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('codeText') - effects.enter('codeTextSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 96) { - effects.consume(code) - sizeOpen++ - return sequenceOpen - } - effects.exit('codeTextSequence') - return between(code) - } - - /** - * Between something and something else. - * - * ```markdown - * > | `a` - * ^^ - * ``` - * - * @type {State} - */ - function between(code) { - // EOF. - if (code === null) { - return nok(code) - } - - // To do: next major: don’t do spaces in resolve, but when compiling, - // like `markdown-rs`. - // Tabs don’t work, and virtual spaces don’t make sense. - if (code === 32) { - effects.enter('space') - effects.consume(code) - effects.exit('space') - return between - } - - // Closing fence? Could also be data. - if (code === 96) { - token = effects.enter('codeTextSequence') - size = 0 - return sequenceClose(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return between - } - - // Data. - effects.enter('codeTextData') - return data(code) - } - - /** - * In data. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if ( - code === null || - code === 32 || - code === 96 || - markdownLineEnding(code) - ) { - effects.exit('codeTextData') - return between(code) - } - effects.consume(code) - return data - } - - /** - * In closing sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - // More. - if (code === 96) { - effects.consume(code) - size++ - return sequenceClose - } - - // Done! - if (size === sizeOpen) { - effects.exit('codeTextSequence') - effects.exit('codeText') - return ok(code) - } - - // More or less accents: mark as data. - token.type = 'codeTextData' - return data(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - */ - - - - -/** @satisfies {Extension['document']} */ -const constructs_document = { - [42]: list, - [43]: list, - [45]: list, - [48]: list, - [49]: list, - [50]: list, - [51]: list, - [52]: list, - [53]: list, - [54]: list, - [55]: list, - [56]: list, - [57]: list, - [62]: blockQuote -} - -/** @satisfies {Extension['contentInitial']} */ -const contentInitial = { - [91]: definition -} - -/** @satisfies {Extension['flowInitial']} */ -const flowInitial = { - [-2]: codeIndented, - [-1]: codeIndented, - [32]: codeIndented -} - -/** @satisfies {Extension['flow']} */ -const constructs_flow = { - [35]: headingAtx, - [42]: thematicBreak, - [45]: [setextUnderline, thematicBreak], - [60]: htmlFlow, - [61]: setextUnderline, - [95]: thematicBreak, - [96]: codeFenced, - [126]: codeFenced -} - -/** @satisfies {Extension['string']} */ -const constructs_string = { - [38]: characterReference, - [92]: characterEscape -} - -/** @satisfies {Extension['text']} */ -const constructs_text = { - [-5]: lineEnding, - [-4]: lineEnding, - [-3]: lineEnding, - [33]: labelStartImage, - [38]: characterReference, - [42]: attention, - [60]: [autolink, htmlText], - [91]: labelStartLink, - [92]: [hardBreakEscape, characterEscape], - [93]: labelEnd, - [95]: attention, - [96]: codeText -} - -/** @satisfies {Extension['insideSpan']} */ -const insideSpan = { - null: [attention, resolver] -} - -/** @satisfies {Extension['attentionMarkers']} */ -const attentionMarkers = { - null: [42, 95] -} - -/** @satisfies {Extension['disable']} */ -const disable = { - null: [] -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js -/** - * @typedef {import('micromark-util-types').Create} Create - * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - */ - - - - - - - - - -/** - * @param {ParseOptions | null | undefined} [options] - * @returns {ParseContext} - */ -function parse(options) { - const settings = options || {} - const constructs = - /** @type {FullNormalizedExtension} */ - combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) - - /** @type {ParseContext} */ - const parser = { - defined: [], - lazy: {}, - constructs, - content: create(content), - document: create(document_document), - flow: create(flow), - string: create(string), - text: create(text_text) - } - return parser - - /** - * @param {InitialConstruct} initial - */ - function create(initial) { - return creator - /** @type {Create} */ - function creator(from) { - return createTokenizer(parser, initial, from) - } - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Value} Value - */ - -/** - * @callback Preprocessor - * @param {Value} value - * @param {Encoding | null | undefined} [encoding] - * @param {boolean | null | undefined} [end=false] - * @returns {Array<Chunk>} - */ - -const search = /[\0\t\n\r]/g - -/** - * @returns {Preprocessor} - */ -function preprocess() { - let column = 1 - let buffer = '' - /** @type {boolean | undefined} */ - let start = true - /** @type {boolean | undefined} */ - let atCarriageReturn - return preprocessor - - /** @type {Preprocessor} */ - function preprocessor(value, encoding, end) { - /** @type {Array<Chunk>} */ - const chunks = [] - /** @type {RegExpMatchArray | null} */ - let match - /** @type {number} */ - let next - /** @type {number} */ - let startPosition - /** @type {number} */ - let endPosition - /** @type {Code} */ - let code - - // @ts-expect-error `Buffer` does allow an encoding. - value = buffer + value.toString(encoding) - startPosition = 0 - buffer = '' - if (start) { - // To do: `markdown-rs` actually parses BOMs (byte order mark). - if (value.charCodeAt(0) === 65279) { - startPosition++ - } - start = undefined - } - while (startPosition < value.length) { - search.lastIndex = startPosition - match = search.exec(value) - endPosition = - match && match.index !== undefined ? match.index : value.length - code = value.charCodeAt(endPosition) - if (!match) { - buffer = value.slice(startPosition) - break - } - if (code === 10 && startPosition === endPosition && atCarriageReturn) { - chunks.push(-3) - atCarriageReturn = undefined - } else { - if (atCarriageReturn) { - chunks.push(-5) - atCarriageReturn = undefined - } - if (startPosition < endPosition) { - chunks.push(value.slice(startPosition, endPosition)) - column += endPosition - startPosition - } - switch (code) { - case 0: { - chunks.push(65533) - column++ - break - } - case 9: { - next = Math.ceil(column / 4) * 4 - chunks.push(-2) - while (column++ < next) chunks.push(-1) - break - } - case 10: { - chunks.push(-4) - column = 1 - break - } - default: { - atCarriageReturn = true - column = 1 - } - } - } - startPosition = endPosition + 1 - } - if (end) { - if (atCarriageReturn) chunks.push(-5) - if (buffer) chunks.push(buffer) - chunks.push(null) - } - return chunks - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js -/** - * @typedef {import('micromark-util-types').Event} Event - */ - - - -/** - * @param {Array<Event>} events - * @returns {Array<Event>} - */ -function postprocess(events) { - while (!subtokenize(events)) { - // Empty - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -function decodeNumericCharacterReference(value, base) { - const code = Number.parseInt(value, base) - if ( - // C0 except for HT, LF, FF, CR, space. - code < 9 || - code === 11 || - (code > 13 && code < 32) || - // Control character (DEL) of C0, and C1 controls. - (code > 126 && code < 160) || - // Lone high surrogates and low surrogates. - (code > 55295 && code < 57344) || - // Noncharacters. - (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || - (code & 65535) === 65535 || - (code & 65535) === 65534 /* eslint-enable no-bitwise */ || - // Out of range - code > 1114111 - ) { - return '\uFFFD' - } - return String.fromCharCode(code) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js - - -const characterEscapeOrReference = - /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi - -/** - * Decode markdown strings (which occur in places such as fenced code info - * strings, destinations, labels, and titles). - * - * The “string” content type allows character escapes and -references. - * This decodes those. - * - * @param {string} value - * Value to decode. - * @returns {string} - * Decoded value. - */ -function decodeString(value) { - return value.replace(characterEscapeOrReference, decode) -} - -/** - * @param {string} $0 - * @param {string} $1 - * @param {string} $2 - * @returns {string} - */ -function decode($0, $1, $2) { - if ($1) { - // Escape. - return $1 - } - - // Reference. - const head = $2.charCodeAt(0) - if (head === 35) { - const head = $2.charCodeAt(1) - const hex = head === 120 || head === 88 - return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) - } - return decodeNamedCharacterReference($2) || $0 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Point} Point - * @typedef {import('unist').Position} Position - */ - -/** - * @typedef NodeLike - * @property {string} type - * @property {PositionLike | null | undefined} [position] - * - * @typedef PositionLike - * @property {PointLike | null | undefined} [start] - * @property {PointLike | null | undefined} [end] - * - * @typedef PointLike - * @property {number | null | undefined} [line] - * @property {number | null | undefined} [column] - * @property {number | null | undefined} [offset] - */ - -/** - * Serialize the positional info of a point, position (start and end points), - * or node. - * - * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] - * Node, position, or point. - * @returns {string} - * Pretty printed positional info of a node (`string`). - * - * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) - * or a point `l:c` (when given `point`), where `l` stands for line, `c` for - * column, `s` for `start`, and `e` for end. - * An empty string (`''`) is returned if the given value is neither `node`, - * `position`, nor `point`. - */ -function stringifyPosition(value) { - // Nothing. - if (!value || typeof value !== 'object') { - return '' - } - - // Node. - if ('position' in value || 'type' in value) { - return position(value.position) - } - - // Position. - if ('start' in value || 'end' in value) { - return position(value) - } - - // Point. - if ('line' in value || 'column' in value) { - return point(value) - } - - // ? - return '' -} - -/** - * @param {Point | PointLike | null | undefined} point - * @returns {string} - */ -function point(point) { - return index(point && point.line) + ':' + index(point && point.column) -} - -/** - * @param {Position | PositionLike | null | undefined} pos - * @returns {string} - */ -function position(pos) { - return point(pos && pos.start) + '-' + point(pos && pos.end) -} - -/** - * @param {number | null | undefined} value - * @returns {number} - */ -function index(value) { - return value && typeof value === 'number' ? value : 1 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js -/** - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Value} Value - * - * @typedef {import('unist').Parent} UnistParent - * @typedef {import('unist').Point} Point - * - * @typedef {import('mdast').PhrasingContent} PhrasingContent - * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent - * @typedef {import('mdast').Content} Content - * @typedef {import('mdast').Break} Break - * @typedef {import('mdast').Blockquote} Blockquote - * @typedef {import('mdast').Code} Code - * @typedef {import('mdast').Definition} Definition - * @typedef {import('mdast').Emphasis} Emphasis - * @typedef {import('mdast').Heading} Heading - * @typedef {import('mdast').HTML} HTML - * @typedef {import('mdast').Image} Image - * @typedef {import('mdast').ImageReference} ImageReference - * @typedef {import('mdast').InlineCode} InlineCode - * @typedef {import('mdast').Link} Link - * @typedef {import('mdast').LinkReference} LinkReference - * @typedef {import('mdast').List} List - * @typedef {import('mdast').ListItem} ListItem - * @typedef {import('mdast').Paragraph} Paragraph - * @typedef {import('mdast').Root} Root - * @typedef {import('mdast').Strong} Strong - * @typedef {import('mdast').Text} Text - * @typedef {import('mdast').ThematicBreak} ThematicBreak - * @typedef {import('mdast').ReferenceType} ReferenceType - * @typedef {import('../index.js').CompileData} CompileData - */ - -/** - * @typedef {Root | Content} Node - * @typedef {Extract<Node, UnistParent>} Parent - * - * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment - */ - -/** - * @callback Transform - * Extra transform, to change the AST afterwards. - * @param {Root} tree - * Tree to transform. - * @returns {Root | undefined | null | void} - * New tree or nothing (in which case the current tree is used). - * - * @callback Handle - * Handle a token. - * @param {CompileContext} this - * Context. - * @param {Token} token - * Current token. - * @returns {void} - * Nothing. - * - * @typedef {Record<string, Handle>} Handles - * Token types mapping to handles - * - * @callback OnEnterError - * Handle the case where the `right` token is open, but it is closed (by the - * `left` token) or because we reached the end of the document. - * @param {Omit<CompileContext, 'sliceSerialize'>} this - * Context. - * @param {Token | undefined} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @callback OnExitError - * Handle the case where the `right` token is open but it is closed by - * exiting the `left` token. - * @param {Omit<CompileContext, 'sliceSerialize'>} this - * Context. - * @param {Token} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @typedef {[Token, OnEnterError | undefined]} TokenTuple - * Open token on the stack, with an optional error handler for when - * that token isn’t closed properly. - */ - -/** - * @typedef Config - * Configuration. - * - * We have our defaults, but extensions will add more. - * @property {Array<string>} canContainEols - * Token types where line endings are used. - * @property {Handles} enter - * Opening handles. - * @property {Handles} exit - * Closing handles. - * @property {Array<Transform>} transforms - * Tree transforms. - * - * @typedef {Partial<Config>} Extension - * Change how markdown tokens from micromark are turned into mdast. - * - * @typedef CompileContext - * mdast compiler context. - * @property {Array<Node | Fragment>} stack - * Stack of nodes. - * @property {Array<TokenTuple>} tokenStack - * Stack of tokens. - * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData - * Get data from the key/value store. - * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData - * Set data into the key/value store. - * @property {(this: CompileContext) => void} buffer - * Capture some of the output data. - * @property {(this: CompileContext) => string} resume - * Stop capturing and access the output data. - * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter - * Enter a token. - * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit - * Exit a token. - * @property {TokenizeContext['sliceSerialize']} sliceSerialize - * Get the string value of a token. - * @property {Config} config - * Configuration. - * - * @typedef FromMarkdownOptions - * Configuration for how to build mdast. - * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] - * Extensions for this utility to change how tokens are turned into a tree. - * - * @typedef {ParseOptions & FromMarkdownOptions} Options - * Configuration. - */ - -// To do: micromark: create a registry of tokens? -// To do: next major: don’t return given `Node` from `enter`. -// To do: next major: remove setter/getter. - - - - - - - - - - -const lib_own = {}.hasOwnProperty - -/** - * @param value - * Markdown to parse. - * @param encoding - * Character encoding for when `value` is `Buffer`. - * @param options - * Configuration. - * @returns - * mdast tree. - */ -const fromMarkdown = - /** - * @type {( - * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & - * ((value: Value, options?: Options | null | undefined) => Root) - * )} - */ - - /** - * @param {Value} value - * @param {Encoding | Options | null | undefined} [encoding] - * @param {Options | null | undefined} [options] - * @returns {Root} - */ - function (value, encoding, options) { - if (typeof encoding !== 'string') { - options = encoding - encoding = undefined - } - return compiler(options)( - postprocess( - parse(options).document().write(preprocess()(value, encoding, true)) - ) - ) - } - -/** - * Note this compiler only understand complete buffering, not streaming. - * - * @param {Options | null | undefined} [options] - */ -function compiler(options) { - /** @type {Config} */ - const config = { - transforms: [], - canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], - enter: { - autolink: opener(link), - autolinkProtocol: onenterdata, - autolinkEmail: onenterdata, - atxHeading: opener(heading), - blockQuote: opener(blockQuote), - characterEscape: onenterdata, - characterReference: onenterdata, - codeFenced: opener(codeFlow), - codeFencedFenceInfo: buffer, - codeFencedFenceMeta: buffer, - codeIndented: opener(codeFlow, buffer), - codeText: opener(codeText, buffer), - codeTextData: onenterdata, - data: onenterdata, - codeFlowValue: onenterdata, - definition: opener(definition), - definitionDestinationString: buffer, - definitionLabelString: buffer, - definitionTitleString: buffer, - emphasis: opener(emphasis), - hardBreakEscape: opener(hardBreak), - hardBreakTrailing: opener(hardBreak), - htmlFlow: opener(html, buffer), - htmlFlowData: onenterdata, - htmlText: opener(html, buffer), - htmlTextData: onenterdata, - image: opener(image), - label: buffer, - link: opener(link), - listItem: opener(listItem), - listItemValue: onenterlistitemvalue, - listOrdered: opener(list, onenterlistordered), - listUnordered: opener(list), - paragraph: opener(paragraph), - reference: onenterreference, - referenceString: buffer, - resourceDestinationString: buffer, - resourceTitleString: buffer, - setextHeading: opener(heading), - strong: opener(strong), - thematicBreak: opener(thematicBreak) - }, - exit: { - atxHeading: closer(), - atxHeadingSequence: onexitatxheadingsequence, - autolink: closer(), - autolinkEmail: onexitautolinkemail, - autolinkProtocol: onexitautolinkprotocol, - blockQuote: closer(), - characterEscapeValue: onexitdata, - characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, - characterReferenceMarkerNumeric: onexitcharacterreferencemarker, - characterReferenceValue: onexitcharacterreferencevalue, - codeFenced: closer(onexitcodefenced), - codeFencedFence: onexitcodefencedfence, - codeFencedFenceInfo: onexitcodefencedfenceinfo, - codeFencedFenceMeta: onexitcodefencedfencemeta, - codeFlowValue: onexitdata, - codeIndented: closer(onexitcodeindented), - codeText: closer(onexitcodetext), - codeTextData: onexitdata, - data: onexitdata, - definition: closer(), - definitionDestinationString: onexitdefinitiondestinationstring, - definitionLabelString: onexitdefinitionlabelstring, - definitionTitleString: onexitdefinitiontitlestring, - emphasis: closer(), - hardBreakEscape: closer(onexithardbreak), - hardBreakTrailing: closer(onexithardbreak), - htmlFlow: closer(onexithtmlflow), - htmlFlowData: onexitdata, - htmlText: closer(onexithtmltext), - htmlTextData: onexitdata, - image: closer(onexitimage), - label: onexitlabel, - labelText: onexitlabeltext, - lineEnding: onexitlineending, - link: closer(onexitlink), - listItem: closer(), - listOrdered: closer(), - listUnordered: closer(), - paragraph: closer(), - referenceString: onexitreferencestring, - resourceDestinationString: onexitresourcedestinationstring, - resourceTitleString: onexitresourcetitlestring, - resource: onexitresource, - setextHeading: closer(onexitsetextheading), - setextHeadingLineSequence: onexitsetextheadinglinesequence, - setextHeadingText: onexitsetextheadingtext, - strong: closer(), - thematicBreak: closer() - } - } - configure(config, (options || {}).mdastExtensions || []) - - /** @type {CompileData} */ - const data = {} - return compile - - /** - * Turn micromark events into an mdast tree. - * - * @param {Array<Event>} events - * Events. - * @returns {Root} - * mdast tree. - */ - function compile(events) { - /** @type {Root} */ - let tree = { - type: 'root', - children: [] - } - /** @type {Omit<CompileContext, 'sliceSerialize'>} */ - const context = { - stack: [tree], - tokenStack: [], - config, - enter, - exit, - buffer, - resume, - setData, - getData - } - /** @type {Array<number>} */ - const listStack = [] - let index = -1 - while (++index < events.length) { - // We preprocess lists to add `listItem` tokens, and to infer whether - // items the list itself are spread out. - if ( - events[index][1].type === 'listOrdered' || - events[index][1].type === 'listUnordered' - ) { - if (events[index][0] === 'enter') { - listStack.push(index) - } else { - const tail = listStack.pop() - index = prepareList(events, tail, index) - } - } - } - index = -1 - while (++index < events.length) { - const handler = config[events[index][0]] - if (lib_own.call(handler, events[index][1].type)) { - handler[events[index][1].type].call( - Object.assign( - { - sliceSerialize: events[index][2].sliceSerialize - }, - context - ), - events[index][1] - ) - } - } - - // Handle tokens still being open. - if (context.tokenStack.length > 0) { - const tail = context.tokenStack[context.tokenStack.length - 1] - const handler = tail[1] || defaultOnError - handler.call(context, undefined, tail[0]) - } - - // Figure out `root` position. - tree.position = { - start: lib_point( - events.length > 0 - ? events[0][1].start - : { - line: 1, - column: 1, - offset: 0 - } - ), - end: lib_point( - events.length > 0 - ? events[events.length - 2][1].end - : { - line: 1, - column: 1, - offset: 0 - } - ) - } - - // Call transforms. - index = -1 - while (++index < config.transforms.length) { - tree = config.transforms[index](tree) || tree - } - return tree - } - - /** - * @param {Array<Event>} events - * @param {number} start - * @param {number} length - * @returns {number} - */ - function prepareList(events, start, length) { - let index = start - 1 - let containerBalance = -1 - let listSpread = false - /** @type {Token | undefined} */ - let listItem - /** @type {number | undefined} */ - let lineIndex - /** @type {number | undefined} */ - let firstBlankLineIndex - /** @type {boolean | undefined} */ - let atMarker - while (++index <= length) { - const event = events[index] - if ( - event[1].type === 'listUnordered' || - event[1].type === 'listOrdered' || - event[1].type === 'blockQuote' - ) { - if (event[0] === 'enter') { - containerBalance++ - } else { - containerBalance-- - } - atMarker = undefined - } else if (event[1].type === 'lineEndingBlank') { - if (event[0] === 'enter') { - if ( - listItem && - !atMarker && - !containerBalance && - !firstBlankLineIndex - ) { - firstBlankLineIndex = index - } - atMarker = undefined - } - } else if ( - event[1].type === 'linePrefix' || - event[1].type === 'listItemValue' || - event[1].type === 'listItemMarker' || - event[1].type === 'listItemPrefix' || - event[1].type === 'listItemPrefixWhitespace' - ) { - // Empty. - } else { - atMarker = undefined - } - if ( - (!containerBalance && - event[0] === 'enter' && - event[1].type === 'listItemPrefix') || - (containerBalance === -1 && - event[0] === 'exit' && - (event[1].type === 'listUnordered' || - event[1].type === 'listOrdered')) - ) { - if (listItem) { - let tailIndex = index - lineIndex = undefined - while (tailIndex--) { - const tailEvent = events[tailIndex] - if ( - tailEvent[1].type === 'lineEnding' || - tailEvent[1].type === 'lineEndingBlank' - ) { - if (tailEvent[0] === 'exit') continue - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - listSpread = true - } - tailEvent[1].type = 'lineEnding' - lineIndex = tailIndex - } else if ( - tailEvent[1].type === 'linePrefix' || - tailEvent[1].type === 'blockQuotePrefix' || - tailEvent[1].type === 'blockQuotePrefixWhitespace' || - tailEvent[1].type === 'blockQuoteMarker' || - tailEvent[1].type === 'listItemIndent' - ) { - // Empty - } else { - break - } - } - if ( - firstBlankLineIndex && - (!lineIndex || firstBlankLineIndex < lineIndex) - ) { - listItem._spread = true - } - - // Fix position. - listItem.end = Object.assign( - {}, - lineIndex ? events[lineIndex][1].start : event[1].end - ) - events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) - index++ - length++ - } - - // Create a new list item. - if (event[1].type === 'listItemPrefix') { - listItem = { - type: 'listItem', - _spread: false, - start: Object.assign({}, event[1].start), - // @ts-expect-error: we’ll add `end` in a second. - end: undefined - } - // @ts-expect-error: `listItem` is most definitely defined, TS... - events.splice(index, 0, ['enter', listItem, event[2]]) - index++ - length++ - firstBlankLineIndex = undefined - atMarker = true - } - } - } - events[start][1]._spread = listSpread - return length - } - - /** - * Set data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @param {CompileData[Key]} [value] - * New value. - * @returns {void} - * Nothing. - */ - function setData(key, value) { - data[key] = value - } - - /** - * Get data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @returns {CompileData[Key]} - * Value. - */ - function getData(key) { - return data[key] - } - - /** - * Create an opener handle. - * - * @param {(token: Token) => Node} create - * Create a node. - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function opener(create, and) { - return open - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function open(token) { - enter.call(this, create(token), token) - if (and) and.call(this, token) - } - } - - /** - * @this {CompileContext} - * @returns {void} - */ - function buffer() { - this.stack.push({ - type: 'fragment', - children: [] - }) - } - - /** - * @template {Node} Kind - * Node type. - * @this {CompileContext} - * Context. - * @param {Kind} node - * Node to enter. - * @param {Token} token - * Corresponding token. - * @param {OnEnterError | undefined} [errorHandler] - * Handle the case where this token is open, but it is closed by something else. - * @returns {Kind} - * The given node. - */ - function enter(node, token, errorHandler) { - const parent = this.stack[this.stack.length - 1] - // @ts-expect-error: Assume `Node` can exist as a child of `parent`. - parent.children.push(node) - this.stack.push(node) - this.tokenStack.push([token, errorHandler]) - // @ts-expect-error: `end` will be patched later. - node.position = { - start: lib_point(token.start) - } - return node - } - - /** - * Create a closer handle. - * - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function closer(and) { - return close - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function close(token) { - if (and) and.call(this, token) - exit.call(this, token) - } - } - - /** - * @this {CompileContext} - * Context. - * @param {Token} token - * Corresponding token. - * @param {OnExitError | undefined} [onExitError] - * Handle the case where another token is open. - * @returns {Node} - * The closed node. - */ - function exit(token, onExitError) { - const node = this.stack.pop() - const open = this.tokenStack.pop() - if (!open) { - throw new Error( - 'Cannot close `' + - token.type + - '` (' + - stringifyPosition({ - start: token.start, - end: token.end - }) + - '): it’s not open' - ) - } else if (open[0].type !== token.type) { - if (onExitError) { - onExitError.call(this, token, open[0]) - } else { - const handler = open[1] || defaultOnError - handler.call(this, token, open[0]) - } - } - node.position.end = lib_point(token.end) - return node - } - - /** - * @this {CompileContext} - * @returns {string} - */ - function resume() { - return lib_toString(this.stack.pop()) - } - - // - // Handlers. - // - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistordered() { - setData('expectingFirstListItemValue', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistitemvalue(token) { - if (getData('expectingFirstListItemValue')) { - const ancestor = this.stack[this.stack.length - 2] - ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) - setData('expectingFirstListItemValue') - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfenceinfo() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.lang = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfencemeta() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.meta = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfence() { - // Exit if this is the closing fence. - if (getData('flowCodeInside')) return - this.buffer() - setData('flowCodeInside', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefenced() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') - setData('flowCodeInside') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodeindented() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/(\r?\n|\r)$/g, '') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitionlabelstring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - node.label = label - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiontitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiondestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitatxheadingsequence(token) { - const node = this.stack[this.stack.length - 1] - if (!node.depth) { - const depth = this.sliceSerialize(token).length - node.depth = depth - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadingtext() { - setData('setextHeadingSlurpLineEnding', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadinglinesequence(token) { - const node = this.stack[this.stack.length - 1] - node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheading() { - setData('setextHeadingSlurpLineEnding') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterdata(token) { - const node = this.stack[this.stack.length - 1] - let tail = node.children[node.children.length - 1] - if (!tail || tail.type !== 'text') { - // Add a new text node. - tail = text() - // @ts-expect-error: we’ll add `end` later. - tail.position = { - start: lib_point(token.start) - } - // @ts-expect-error: Assume `parent` accepts `text`. - node.children.push(tail) - } - this.stack.push(tail) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitdata(token) { - const tail = this.stack.pop() - tail.value += this.sliceSerialize(token) - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlineending(token) { - const context = this.stack[this.stack.length - 1] - // If we’re at a hard break, include the line ending in there. - if (getData('atHardBreak')) { - const tail = context.children[context.children.length - 1] - tail.position.end = lib_point(token.end) - setData('atHardBreak') - return - } - if ( - !getData('setextHeadingSlurpLineEnding') && - config.canContainEols.includes(context.type) - ) { - onenterdata.call(this, token) - onexitdata.call(this, token) - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithardbreak() { - setData('atHardBreak', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmlflow() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmltext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcodetext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlink() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitimage() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabeltext(token) { - const string = this.sliceSerialize(token) - const ancestor = this.stack[this.stack.length - 2] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - ancestor.label = decodeString(string) - // @ts-expect-error: same as above. - ancestor.identifier = normalizeIdentifier(string).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabel() { - const fragment = this.stack[this.stack.length - 1] - const value = this.resume() - const node = this.stack[this.stack.length - 1] - // Assume a reference. - setData('inReference', true) - if (node.type === 'link') { - /** @type {Array<StaticPhrasingContent>} */ - // @ts-expect-error: Assume static phrasing content. - const children = fragment.children - node.children = children - } else { - node.alt = value - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcedestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcetitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresource() { - setData('inReference') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterreference() { - setData('referenceType', 'collapsed') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitreferencestring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - node.label = label - // @ts-expect-error: same as above. - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - setData('referenceType', 'full') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcharacterreferencemarker(token) { - setData('characterReferenceType', token.type) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcharacterreferencevalue(token) { - const data = this.sliceSerialize(token) - const type = getData('characterReferenceType') - /** @type {string} */ - let value - if (type) { - value = decodeNumericCharacterReference( - data, - type === 'characterReferenceMarkerNumeric' ? 10 : 16 - ) - setData('characterReferenceType') - } else { - const result = decodeNamedCharacterReference(data) - value = result - } - const tail = this.stack.pop() - tail.value += value - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkprotocol(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = this.sliceSerialize(token) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkemail(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = 'mailto:' + this.sliceSerialize(token) - } - - // - // Creaters. - // - - /** @returns {Blockquote} */ - function blockQuote() { - return { - type: 'blockquote', - children: [] - } - } - - /** @returns {Code} */ - function codeFlow() { - return { - type: 'code', - lang: null, - meta: null, - value: '' - } - } - - /** @returns {InlineCode} */ - function codeText() { - return { - type: 'inlineCode', - value: '' - } - } - - /** @returns {Definition} */ - function definition() { - return { - type: 'definition', - identifier: '', - label: null, - title: null, - url: '' - } - } - - /** @returns {Emphasis} */ - function emphasis() { - return { - type: 'emphasis', - children: [] - } - } - - /** @returns {Heading} */ - function heading() { - // @ts-expect-error `depth` will be set later. - return { - type: 'heading', - depth: undefined, - children: [] - } - } - - /** @returns {Break} */ - function hardBreak() { - return { - type: 'break' - } - } - - /** @returns {HTML} */ - function html() { - return { - type: 'html', - value: '' - } - } - - /** @returns {Image} */ - function image() { - return { - type: 'image', - title: null, - url: '', - alt: null - } - } - - /** @returns {Link} */ - function link() { - return { - type: 'link', - title: null, - url: '', - children: [] - } - } - - /** - * @param {Token} token - * @returns {List} - */ - function list(token) { - return { - type: 'list', - ordered: token.type === 'listOrdered', - start: null, - spread: token._spread, - children: [] - } - } - - /** - * @param {Token} token - * @returns {ListItem} - */ - function listItem(token) { - return { - type: 'listItem', - spread: token._spread, - checked: null, - children: [] - } - } - - /** @returns {Paragraph} */ - function paragraph() { - return { - type: 'paragraph', - children: [] - } - } - - /** @returns {Strong} */ - function strong() { - return { - type: 'strong', - children: [] - } - } - - /** @returns {Text} */ - function text() { - return { - type: 'text', - value: '' - } - } - - /** @returns {ThematicBreak} */ - function thematicBreak() { - return { - type: 'thematicBreak' - } - } -} - -/** - * Copy a point-like value. - * - * @param {Point} d - * Point-like value. - * @returns {Point} - * unist point. - */ -function lib_point(d) { - return { - line: d.line, - column: d.column, - offset: d.offset - } -} - -/** - * @param {Config} combined - * @param {Array<Extension | Array<Extension>>} extensions - * @returns {void} - */ -function configure(combined, extensions) { - let index = -1 - while (++index < extensions.length) { - const value = extensions[index] - if (Array.isArray(value)) { - configure(combined, value) - } else { - extension(combined, value) - } - } -} - -/** - * @param {Config} combined - * @param {Extension} extension - * @returns {void} - */ -function extension(combined, extension) { - /** @type {keyof Extension} */ - let key - for (key in extension) { - if (lib_own.call(extension, key)) { - if (key === 'canContainEols') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'transforms') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'enter' || key === 'exit') { - const right = extension[key] - if (right) { - Object.assign(combined[key], right) - } - } - } - } -} - -/** @type {OnEnterError} */ -function defaultOnError(left, right) { - if (left) { - throw new Error( - 'Cannot close `' + - left.type + - '` (' + - stringifyPosition({ - start: left.start, - end: left.end - }) + - '): a different token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is open' - ) - } else { - throw new Error( - 'Cannot close document, a token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is still open' - ) - } -} - -// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js -var esm = __webpack_require__(60513); -;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-ca0c5216.js - - - -function preprocessMarkdown(markdown) { - const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); - const withoutExtraSpaces = (0,esm/* dedent */.T)(withoutMultipleNewlines); - return withoutExtraSpaces; -} -function markdownToLines(markdown) { - const preprocessedMarkdown = preprocessMarkdown(markdown); - const { children } = fromMarkdown(preprocessedMarkdown); - const lines = [[]]; - let currentLine = 0; - function processNode(node, parentType = "normal") { - if (node.type === "text") { - const textLines = node.value.split("\n"); - textLines.forEach((textLine, index) => { - if (index !== 0) { - currentLine++; - lines.push([]); - } - textLine.split(" ").forEach((word) => { - if (word) { - lines[currentLine].push({ content: word, type: parentType }); - } - }); - }); - } else if (node.type === "strong" || node.type === "emphasis") { - node.children.forEach((contentNode) => { - processNode(contentNode, node.type); - }); - } - } - children.forEach((treeNode) => { - if (treeNode.type === "paragraph") { - treeNode.children.forEach((contentNode) => { - processNode(contentNode); - }); - } - }); - return lines; -} -function markdownToHTML(markdown) { - const { children } = fromMarkdown(markdown); - function output(node) { - if (node.type === "text") { - return node.value.replace(/\n/g, "<br/>"); - } else if (node.type === "strong") { - return `<strong>${node.children.map(output).join("")}</strong>`; - } else if (node.type === "emphasis") { - return `<em>${node.children.map(output).join("")}</em>`; - } else if (node.type === "paragraph") { - return `<p>${node.children.map(output).join("")}</p>`; - } - return `Unsupported markdown: ${node.type}`; - } - return children.map(output).join(""); -} -function splitTextToChars(text) { - if (Intl.Segmenter) { - return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); - } - return [...text]; -} -function splitWordToFitWidth(checkFit, word) { - const characters = splitTextToChars(word.content); - return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); -} -function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { - if (remainingChars.length === 0) { - return [ - { content: usedChars.join(""), type }, - { content: "", type } - ]; - } - const [nextChar, ...rest] = remainingChars; - const newWord = [...usedChars, nextChar]; - if (checkFit([{ content: newWord.join(""), type }])) { - return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); - } - if (usedChars.length === 0 && nextChar) { - usedChars.push(nextChar); - remainingChars.shift(); - } - return [ - { content: usedChars.join(""), type }, - { content: remainingChars.join(""), type } - ]; -} -function splitLineToFitWidth(line, checkFit) { - if (line.some(({ content }) => content.includes("\n"))) { - throw new Error("splitLineToFitWidth does not support newlines in the line"); - } - return splitLineToFitWidthRecursion(line, checkFit); -} -function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { - if (words.length === 0) { - if (newLine.length > 0) { - lines.push(newLine); - } - return lines.length > 0 ? lines : []; - } - let joiner = ""; - if (words[0].content === " ") { - joiner = " "; - words.shift(); - } - const nextWord = words.shift() ?? { content: " ", type: "normal" }; - const lineWithNextWord = [...newLine]; - if (joiner !== "") { - lineWithNextWord.push({ content: joiner, type: "normal" }); - } - lineWithNextWord.push(nextWord); - if (checkFit(lineWithNextWord)) { - return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); - } - if (newLine.length > 0) { - lines.push(newLine); - words.unshift(nextWord); - } else if (nextWord.content) { - const [line, rest] = splitWordToFitWidth(checkFit, nextWord); - lines.push([line]); - if (rest.content) { - words.unshift(rest); - } - } - return splitLineToFitWidthRecursion(words, checkFit, lines); -} -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlSpan(element, node, width, classes, addBackground = false) { - const fo = element.append("foreignObject"); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - ` - <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" - ); - applyStyle(div, node.labelStyle); - div.style("display", "table-cell"); - div.style("white-space", "nowrap"); - div.style("max-width", width + "px"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - if (addBackground) { - div.attr("class", "labelBkg"); - } - let bbox = div.node().getBoundingClientRect(); - if (bbox.width === width) { - div.style("display", "table"); - div.style("white-space", "break-spaces"); - div.style("width", width + "px"); - bbox = div.node().getBoundingClientRect(); - } - fo.style("width", bbox.width); - fo.style("height", bbox.height); - return fo.node(); -} -function createTspan(textElement, lineIndex, lineHeight) { - return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); -} -function computeWidthOfText(parentNode, lineHeight, line) { - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, line); - const textLength = testSpan.node().getComputedTextLength(); - testElement.remove(); - return textLength; -} -function computeDimensionOfText(parentNode, lineHeight, text) { - var _a; - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); - const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); - if (textDimension) { - testElement.remove(); - } - return textDimension; -} -function createFormattedText(width, g, structuredText, addBackground = false) { - const lineHeight = 1.1; - const labelGroup = g.append("g"); - const bkg = labelGroup.insert("rect").attr("class", "background"); - const textElement = labelGroup.append("text").attr("y", "-10.1"); - let lineIndex = 0; - for (const line of structuredText) { - const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; - const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); - for (const preparedLine of linesUnderWidth) { - const tspan = createTspan(textElement, lineIndex, lineHeight); - updateTextContentAndStyles(tspan, preparedLine); - lineIndex++; - } - } - if (addBackground) { - const bbox = textElement.node().getBBox(); - const padding = 2; - bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); - return labelGroup.node(); - } else { - return textElement.node(); - } -} -function updateTextContentAndStyles(tspan, wrappedLine) { - tspan.text(""); - wrappedLine.forEach((word, index) => { - const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); - if (index === 0) { - innerTspan.text(word.content); - } else { - innerTspan.text(" " + word.content); - } - }); -} -const createText = (el, text = "", { - style = "", - isTitle = false, - classes = "", - useHtmlLabels = true, - isNode = true, - width = 200, - addSvgBackground = false -} = {}) => { - mermaid_6dc72991.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); - if (useHtmlLabels) { - const htmlText = markdownToHTML(text); - const node = { - isNode, - label: (0,mermaid_6dc72991.M)(htmlText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - labelStyle: style.replace("fill:", "color:") - }; - const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); - return vertexNode; - } else { - const structuredText = markdownToLines(text); - const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); - return svgLabel; - } -}; - - - -/***/ }), - -/***/ 98055: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ a: () => (/* binding */ insertMarkers$1), -/* harmony export */ b: () => (/* binding */ clear$1), -/* harmony export */ c: () => (/* binding */ createLabel$1), -/* harmony export */ d: () => (/* binding */ clear), -/* harmony export */ e: () => (/* binding */ insertNode), -/* harmony export */ f: () => (/* binding */ insertEdgeLabel), -/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), -/* harmony export */ h: () => (/* binding */ insertEdge), -/* harmony export */ i: () => (/* binding */ intersectRect$1), -/* harmony export */ j: () => (/* binding */ positionEdgeLabel), -/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), -/* harmony export */ l: () => (/* binding */ labelHelper), -/* harmony export */ m: () => (/* binding */ addEdgeMarkers), -/* harmony export */ p: () => (/* binding */ positionNode), -/* harmony export */ s: () => (/* binding */ setNodeElem), -/* harmony export */ u: () => (/* binding */ updateNodeBounds) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(18897); - - - -const insertMarkers = (elem, markerArray, type, id) => { - markerArray.forEach((markerName) => { - markers[markerName](elem, type, id); - }); -}; -const extension = (elem, type, id) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); -}; -const composition = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); -}; -const aggregation = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); -}; -const dependency = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); -}; -const lollipop = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); -}; -const point = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); -}; -const circle$1 = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); -}; -const cross = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); -}; -const barb = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); -}; -const markers = { - extension, - composition, - aggregation, - dependency, - lollipop, - point, - circle: circle$1, - cross, - barb -}; -const insertMarkers$1 = insertMarkers; -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlLabel(node) { - const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" - ); - applyStyle(div, node.labelStyle); - div.style("display", "inline-block"); - div.style("white-space", "nowrap"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - return fo.node(); -} -const createLabel = (_vertexText, style, isTitle, isNode) => { - let vertexText = _vertexText || ""; - if (typeof vertexText === "object") { - vertexText = vertexText[0]; - } - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - vertexText = vertexText.replace(/\\n|\n/g, "<br />"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); - const node = { - isNode, - label: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(vertexText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - labelStyle: style.replace("fill:", "color:") - }; - let vertexNode = addHtmlLabel(node); - return vertexNode; - } else { - const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); - svgLabel.setAttribute("style", style.replace("color:", "fill:")); - let rows = []; - if (typeof vertexText === "string") { - rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); - } else if (Array.isArray(vertexText)) { - rows = vertexText; - } else { - rows = []; - } - for (const row of rows) { - const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); - tspan.setAttribute("dy", "1em"); - tspan.setAttribute("x", "0"); - if (isTitle) { - tspan.setAttribute("class", "title-row"); - } else { - tspan.setAttribute("class", "row"); - } - tspan.textContent = row.trim(); - svgLabel.appendChild(tspan); - } - return svgLabel; - } -}; -const createLabel$1 = createLabel; -const labelHelper = async (parent, node, _classes, isNode) => { - let classes; - const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); - if (!_classes) { - classes = "node default"; - } else { - classes = _classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); - let labelText; - if (node.labelText === void 0) { - labelText = ""; - } else { - labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; - } - const textNode = label.node(); - let text; - if (node.labelType === "markdown") { - text = (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { - useHtmlLabels, - width: node.width || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, - classes: "markdown-node-label" - }); - } else { - text = textNode.appendChild( - createLabel$1( - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), - node.labelStyle, - false, - isNode - ) - ); - } - let bbox = text.getBBox(); - const halfPadding = node.padding / 2; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); - const images = div.getElementsByTagName("img"); - if (images) { - const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; - await Promise.all( - [...images].map( - (img) => new Promise((res) => { - function setupImage() { - img.style.display = "flex"; - img.style.flexDirection = "column"; - if (noImgText) { - const bodyFontSize = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; - const enlargingFactor = 5; - const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; - img.style.minWidth = width; - img.style.maxWidth = width; - } else { - img.style.width = "100%"; - } - res(img); - } - setTimeout(() => { - if (img.complete) { - setupImage(); - } - }); - img.addEventListener("error", setupImage); - img.addEventListener("load", setupImage); - }) - ) - ); - } - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (useHtmlLabels) { - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - } else { - label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); - } - if (node.centerLabel) { - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - } - label.insert("rect", ":first-child"); - return { shapeSvg, bbox, halfPadding, label }; -}; -const updateNodeBounds = (node, element) => { - const bbox = element.node().getBBox(); - node.width = bbox.width; - node.height = bbox.height; -}; -function insertPolygonShape(parent, w, h, points) { - return parent.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); -} -function intersectNode(node, point2) { - return node.intersect(point2); -} -function intersectEllipse(node, rx, ry, point2) { - var cx = node.x; - var cy = node.y; - var px = cx - point2.x; - var py = cy - point2.y; - var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); - var dx = Math.abs(rx * ry * px / det); - if (point2.x < cx) { - dx = -dx; - } - var dy = Math.abs(rx * ry * py / det); - if (point2.y < cy) { - dy = -dy; - } - return { x: cx + dx, y: cy + dy }; -} -function intersectCircle(node, rx, point2) { - return intersectEllipse(node, rx, rx, point2); -} -function intersectLine(p1, p2, q1, q2) { - var a1, a2, b1, b2, c1, c2; - var r1, r2, r3, r4; - var denom, offset, num; - var x, y; - a1 = p2.y - p1.y; - b1 = p1.x - p2.x; - c1 = p2.x * p1.y - p1.x * p2.y; - r3 = a1 * q1.x + b1 * q1.y + c1; - r4 = a1 * q2.x + b1 * q2.y + c1; - if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { - return; - } - a2 = q2.y - q1.y; - b2 = q1.x - q2.x; - c2 = q2.x * q1.y - q1.x * q2.y; - r1 = a2 * p1.x + b2 * p1.y + c2; - r2 = a2 * p2.x + b2 * p2.y + c2; - if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { - return; - } - denom = a1 * b2 - a2 * b1; - if (denom === 0) { - return; - } - offset = Math.abs(denom / 2); - num = b1 * c2 - b2 * c1; - x = num < 0 ? (num - offset) / denom : (num + offset) / denom; - num = a2 * c1 - a1 * c2; - y = num < 0 ? (num - offset) / denom : (num + offset) / denom; - return { x, y }; -} -function sameSign(r1, r2) { - return r1 * r2 > 0; -} -function intersectPolygon(node, polyPoints, point2) { - var x1 = node.x; - var y1 = node.y; - var intersections = []; - var minX = Number.POSITIVE_INFINITY; - var minY = Number.POSITIVE_INFINITY; - if (typeof polyPoints.forEach === "function") { - polyPoints.forEach(function(entry) { - minX = Math.min(minX, entry.x); - minY = Math.min(minY, entry.y); - }); - } else { - minX = Math.min(minX, polyPoints.x); - minY = Math.min(minY, polyPoints.y); - } - var left = x1 - node.width / 2 - minX; - var top = y1 - node.height / 2 - minY; - for (var i = 0; i < polyPoints.length; i++) { - var p1 = polyPoints[i]; - var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; - var intersect2 = intersectLine( - node, - point2, - { x: left + p1.x, y: top + p1.y }, - { x: left + p2.x, y: top + p2.y } - ); - if (intersect2) { - intersections.push(intersect2); - } - } - if (!intersections.length) { - return node; - } - if (intersections.length > 1) { - intersections.sort(function(p, q) { - var pdx = p.x - point2.x; - var pdy = p.y - point2.y; - var distp = Math.sqrt(pdx * pdx + pdy * pdy); - var qdx = q.x - point2.x; - var qdy = q.y - point2.y; - var distq = Math.sqrt(qdx * qdx + qdy * qdy); - return distp < distq ? -1 : distp === distq ? 0 : 1; - }); - } - return intersections[0]; -} -const intersectRect = (node, point2) => { - var x = node.x; - var y = node.y; - var dx = point2.x - x; - var dy = point2.y - y; - var w = node.width / 2; - var h = node.height / 2; - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - if (dy < 0) { - h = -h; - } - sx = dy === 0 ? 0 : h * dx / dy; - sy = h; - } else { - if (dx < 0) { - w = -w; - } - sx = w; - sy = dx === 0 ? 0 : w * dy / dx; - } - return { x: x + sx, y: y + sy }; -}; -const intersectRect$1 = intersectRect; -const intersect = { - node: intersectNode, - circle: intersectCircle, - ellipse: intersectEllipse, - polygon: intersectPolygon, - rect: intersectRect$1 -}; -const note = async (parent, node) => { - const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; - if (!useHtmlLabels) { - node.centerLabel = true; - } - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes, - true - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); - const rect2 = shapeSvg.insert("rect", ":first-child"); - rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const note$1 = note; -const expandAndDeduplicateDirections = (directions) => { - const uniqueDirections = /* @__PURE__ */ new Set(); - for (const direction of directions) { - switch (direction) { - case "x": - uniqueDirections.add("right"); - uniqueDirections.add("left"); - break; - case "y": - uniqueDirections.add("up"); - uniqueDirections.add("down"); - break; - default: - uniqueDirections.add(direction); - break; - } - } - return uniqueDirections; -}; -const getArrowPoints = (duplicatedDirections, bbox, node) => { - const directions = expandAndDeduplicateDirections(duplicatedDirections); - const f = 2; - const height = bbox.height + 2 * node.padding; - const midpoint = height / f; - const width = bbox.width + 2 * midpoint + node.padding; - const padding = node.padding / 2; - if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { - return [ - // Bottom - { x: 0, y: 0 }, - { x: midpoint, y: 0 }, - { x: width / 2, y: 2 * padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: 0 }, - // Right - { x: width, y: -height / 3 }, - { x: width + 2 * padding, y: -height / 2 }, - { x: width, y: -2 * height / 3 }, - { x: width, y: -height }, - // Top - { x: width - midpoint, y: -height }, - { x: width / 2, y: -height - 2 * padding }, - { x: midpoint, y: -height }, - // Left - { x: 0, y: -height }, - { x: 0, y: -2 * height / 3 }, - { x: -2 * padding, y: -height / 2 }, - { x: 0, y: -height / 3 } - ]; - } - if (directions.has("right") && directions.has("left") && directions.has("up")) { - return [ - { x: midpoint, y: 0 }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("right") && directions.has("left") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: midpoint, y: -height }, - { x: width - midpoint, y: -height }, - { x: width, y: 0 } - ]; - } - if (directions.has("right") && directions.has("up") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: width, y: -midpoint }, - { x: width, y: -height + midpoint }, - { x: 0, y: -height } - ]; - } - if (directions.has("left") && directions.has("up") && directions.has("down")) { - return [ - { x: width, y: 0 }, - { x: 0, y: -midpoint }, - { x: 0, y: -height + midpoint }, - { x: width, y: -height } - ]; - } - if (directions.has("right") && directions.has("left")) { - return [ - { x: midpoint, y: 0 }, - { x: midpoint, y: -padding }, - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: width - midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("up") && directions.has("down")) { - return [ - // Bottom center - { x: width / 2, y: 0 }, - // Left pont of bottom arrow - { x: 0, y: -padding }, - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: 0, y: -height + padding }, - // Top of arrow - { x: width / 2, y: -height }, - { x: width, y: -height + padding }, - // Top of right vertical bar - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding }, - { x: width, y: -padding } - ]; - } - if (directions.has("right") && directions.has("up")) { - return [ - { x: 0, y: 0 }, - { x: width, y: -midpoint }, - { x: 0, y: -height } - ]; - } - if (directions.has("right") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: width, y: 0 }, - { x: 0, y: -height } - ]; - } - if (directions.has("left") && directions.has("up")) { - return [ - { x: width, y: 0 }, - { x: 0, y: -midpoint }, - { x: width, y: -height } - ]; - } - if (directions.has("left") && directions.has("down")) { - return [ - { x: width, y: 0 }, - { x: 0, y: 0 }, - { x: width, y: -height } - ]; - } - if (directions.has("right")) { - return [ - { x: midpoint, y: -padding }, - { x: midpoint, y: -padding }, - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: width - midpoint, y: -height + padding }, - // top left corner of arrow - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding } - ]; - } - if (directions.has("left")) { - return [ - { x: midpoint, y: 0 }, - { x: midpoint, y: -padding }, - // Two points, the right corners - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("up")) { - return [ - // Bottom center - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: 0, y: -height + padding }, - // Top of arrow - { x: width / 2, y: -height }, - { x: width, y: -height + padding }, - // Top of right vertical bar - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding } - ]; - } - if (directions.has("down")) { - return [ - // Bottom center - { x: width / 2, y: 0 }, - // Left pont of bottom arrow - { x: 0, y: -padding }, - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding }, - { x: width, y: -padding } - ]; - } - return [{ x: 0, y: 0 }]; -}; -const formatClass = (str) => { - if (str) { - return " " + str; - } - return ""; -}; -const getClassesFromNode = (node, otherClasses) => { - return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( - node.class - )}`; -}; -const question = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const s = w + h; - const points = [ - { x: s / 2, y: 0 }, - { x: s, y: -s / 2 }, - { x: s / 2, y: -s }, - { x: 0, y: -s / 2 } - ]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); - const questionElem = insertPolygonShape(shapeSvg, s, s, points); - questionElem.attr("style", node.style); - updateNodeBounds(node, questionElem); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const choice = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const s = 28; - const points = [ - { x: 0, y: s / 2 }, - { x: s / 2, y: 0 }, - { x: 0, y: -s / 2 }, - { x: -s / 2, y: 0 } - ]; - const choice2 = shapeSvg.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ); - choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); - node.width = 28; - node.height = 28; - node.intersect = function(point2) { - return intersect.circle(node, 14, point2); - }; - return shapeSvg; -}; -const hexagon = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const f = 4; - const h = bbox.height + node.padding; - const m = h / f; - const w = bbox.width + 2 * m + node.padding; - const points = [ - { x: m, y: 0 }, - { x: w - m, y: 0 }, - { x: w, y: -h / 2 }, - { x: w - m, y: -h }, - { x: m, y: -h }, - { x: 0, y: -h / 2 } - ]; - const hex = insertPolygonShape(shapeSvg, w, h, points); - hex.attr("style", node.style); - updateNodeBounds(node, hex); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const block_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); - const f = 2; - const h = bbox.height + 2 * node.padding; - const m = h / f; - const w = bbox.width + 2 * m + node.padding; - const points = getArrowPoints(node.directions, bbox, node); - const blockArrow = insertPolygonShape(shapeSvg, w, h, points); - blockArrow.attr("style", node.style); - updateNodeBounds(node, blockArrow); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const rect_left_inv_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -h / 2, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: -h / 2, y: -h }, - { x: 0, y: -h / 2 } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - node.width = w + h; - node.height = h; - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const lean_right = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const lean_left = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 2 * h / 6, y: 0 }, - { x: w + h / 6, y: 0 }, - { x: w - 2 * h / 6, y: -h }, - { x: -h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const trapezoid = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w + 2 * h / 6, y: 0 }, - { x: w - h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const inv_trapezoid = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: -2 * h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const rect_right_inv_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 0, y: 0 }, - { x: w + h / 2, y: 0 }, - { x: w, y: -h / 2 }, - { x: w + h / 2, y: -h }, - { x: 0, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const cylinder = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const rx = w / 2; - const ry = rx / (2.5 + w / 50); - const h = bbox.height + ry + node.padding; - const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; - const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); - updateNodeBounds(node, el); - node.intersect = function(point2) { - const pos = intersect.rect(node, point2); - const x = pos.x - node.x; - if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { - let y = ry * ry * (1 - x * x / (rx * rx)); - if (y != 0) { - y = Math.sqrt(y); - } - y = ry - y; - if (point2.y - node.y > 0) { - y = -y; - } - pos.y += y; - } - return pos; - }; - return shapeSvg; -}; -const rect = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes + " " + node.class, - true - ); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = node.positioned ? node.width : bbox.width + node.padding; - const totalHeight = node.positioned ? node.height : bbox.height + node.padding; - const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; - const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; - rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const composite = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes, - true - ); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = node.positioned ? node.width : bbox.width + node.padding; - const totalHeight = node.positioned ? node.height : bbox.height + node.padding; - const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; - const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; - rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const labelRect = async (parent, node) => { - const { shapeSvg } = await labelHelper(parent, node, "label", true); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = 0; - const totalHeight = 0; - rect2.attr("width", totalWidth).attr("height", totalHeight); - shapeSvg.attr("class", "label edgeLabel"); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { - const strokeDashArray = []; - const addBorder = (length) => { - strokeDashArray.push(length, 0); - }; - const skipBorder = (length) => { - strokeDashArray.push(0, length); - }; - if (borders.includes("t")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); - addBorder(totalWidth); - } else { - skipBorder(totalWidth); - } - if (borders.includes("r")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); - addBorder(totalHeight); - } else { - skipBorder(totalHeight); - } - if (borders.includes("b")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); - addBorder(totalWidth); - } else { - skipBorder(totalWidth); - } - if (borders.includes("l")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); - addBorder(totalHeight); - } else { - skipBorder(totalHeight); - } - rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); -} -const rectWithTitle = (parent, node) => { - let classes; - if (!node.classes) { - classes = "node default"; - } else { - classes = "node " + node.classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const innerLine = shapeSvg.insert("line"); - const label = shapeSvg.insert("g").attr("class", "label"); - const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; - let title = ""; - if (typeof text2 === "object") { - title = text2[0]; - } else { - title = text2; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); - const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); - let bbox = { width: 0, height: 0 }; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); - const textRows = text2.slice(1, text2.length); - let titleBox = text.getBBox(); - const descr = label.node().appendChild( - createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) - ); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = descr.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - const halfPadding = node.padding / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr).attr( - "transform", - "translate( " + // (titleBox.width - bbox.width) / 2 + - (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" - ); - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text).attr( - "transform", - "translate( " + // (titleBox.width - bbox.width) / 2 + - (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" - ); - bbox = label.node().getBBox(); - label.attr( - "transform", - "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" - ); - rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const stadium = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const h = bbox.height + node.padding; - const w = bbox.width + h / 4 + node.padding; - const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const circle = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); - return intersect.circle(node, bbox.width / 2 + halfPadding, point2); - }; - return shapeSvg; -}; -const doublecircle = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const gap = 5; - const circleGroup = shapeSvg.insert("g", ":first-child"); - const outerCircle = circleGroup.insert("circle"); - const innerCircle = circleGroup.insert("circle"); - circleGroup.attr("class", node.class); - outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); - innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); - updateNodeBounds(node, outerCircle); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); - return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); - }; - return shapeSvg; -}; -const subroutine = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 0, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: 0, y: -h }, - { x: 0, y: 0 }, - { x: -8, y: 0 }, - { x: w + 8, y: 0 }, - { x: w + 8, y: -h }, - { x: -8, y: -h }, - { x: -8, y: 0 } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const start = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - return intersect.circle(node, 7, point2); - }; - return shapeSvg; -}; -const forkJoin = (parent, node, dir) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - let width = 70; - let height = 10; - if (dir === "LR") { - width = 10; - height = 70; - } - const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); - updateNodeBounds(node, shape); - node.height = node.height + node.padding / 2; - node.width = node.width + node.padding / 2; - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const end = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const innerCircle = shapeSvg.insert("circle", ":first-child"); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); - innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - return intersect.circle(node, 7, point2); - }; - return shapeSvg; -}; -const class_box = (parent, node) => { - const halfPadding = node.padding / 2; - const rowPadding = 4; - const lineHeight = 8; - let classes; - if (!node.classes) { - classes = "node default"; - } else { - classes = "node " + node.classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const topLine = shapeSvg.insert("line"); - const bottomLine = shapeSvg.insert("line"); - let maxWidth = 0; - let maxHeight = rowPadding; - const labelContainer = shapeSvg.insert("g").attr("class", "label"); - let verticalPos = 0; - const hasInterface = node.classData.annotations && node.classData.annotations[0]; - const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; - const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); - let interfaceBBox = interfaceLabel.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = interfaceLabel.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel); - interfaceBBox = div.getBoundingClientRect(); - dv.attr("width", interfaceBBox.width); - dv.attr("height", interfaceBBox.height); - } - if (node.classData.annotations[0]) { - maxHeight += interfaceBBox.height + rowPadding; - maxWidth += interfaceBBox.width; - } - let classTitleString = node.classData.label; - if (node.classData.type !== void 0 && node.classData.type !== "") { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - classTitleString += "<" + node.classData.type + ">"; - } else { - classTitleString += "<" + node.classData.type + ">"; - } - } - const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr("class", "classTitle"); - let classTitleBBox = classTitleLabel.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = classTitleLabel.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel); - classTitleBBox = div.getBoundingClientRect(); - dv.attr("width", classTitleBBox.width); - dv.attr("height", classTitleBBox.height); - } - maxHeight += classTitleBBox.height + rowPadding; - if (classTitleBBox.width > maxWidth) { - maxWidth = classTitleBBox.width; - } - const classAttributes = []; - node.classData.members.forEach((member) => { - const parsedInfo = member.getDisplayDetails(); - let parsedText = parsedInfo.displayText; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); - } - const lbl = labelContainer.node().appendChild( - createLabel$1( - parsedText, - parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, - true, - true - ) - ); - let bbox = lbl.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = lbl.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (bbox.width > maxWidth) { - maxWidth = bbox.width; - } - maxHeight += bbox.height + rowPadding; - classAttributes.push(lbl); - }); - maxHeight += lineHeight; - const classMethods = []; - node.classData.methods.forEach((member) => { - const parsedInfo = member.getDisplayDetails(); - let displayText = parsedInfo.displayText; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); - } - const lbl = labelContainer.node().appendChild( - createLabel$1( - displayText, - parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, - true, - true - ) - ); - let bbox = lbl.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = lbl.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (bbox.width > maxWidth) { - maxWidth = bbox.width; - } - maxHeight += bbox.height + rowPadding; - classMethods.push(lbl); - }); - maxHeight += lineHeight; - if (hasInterface) { - let diffX2 = (maxWidth - interfaceBBox.width) / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel).attr( - "transform", - "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" - ); - verticalPos = interfaceBBox.height + rowPadding; - } - let diffX = (maxWidth - classTitleBBox.width) / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr( - "transform", - "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" - ); - verticalPos += classTitleBBox.height + rowPadding; - topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); - verticalPos += lineHeight; - classAttributes.forEach((lbl) => { - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( - "transform", - "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" - ); - const memberBBox = lbl == null ? void 0 : lbl.getBBox(); - verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; - }); - verticalPos += lineHeight; - bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); - verticalPos += lineHeight; - classMethods.forEach((lbl) => { - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( - "transform", - "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" - ); - const memberBBox = lbl == null ? void 0 : lbl.getBBox(); - verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; - }); - rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const shapes = { - rhombus: question, - composite, - question, - rect, - labelRect, - rectWithTitle, - choice, - circle, - doublecircle, - stadium, - hexagon, - block_arrow, - rect_left_inv_arrow, - lean_right, - lean_left, - trapezoid, - inv_trapezoid, - rect_right_inv_arrow, - cylinder, - start, - end, - note: note$1, - subroutine, - fork: forkJoin, - join: forkJoin, - class_box -}; -let nodeElems = {}; -const insertNode = async (elem, node, dir) => { - let newEl; - let el; - if (node.link) { - let target; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { - target = "_top"; - } else if (node.linkTarget) { - target = node.linkTarget || "_blank"; - } - newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); - el = await shapes[node.shape](newEl, node, dir); - } else { - el = await shapes[node.shape](elem, node, dir); - newEl = el; - } - if (node.tooltip) { - el.attr("title", node.tooltip); - } - if (node.class) { - el.attr("class", "node default " + node.class); - } - newEl.attr("data-node", "true"); - newEl.attr("data-id", node.id); - nodeElems[node.id] = newEl; - if (node.haveCallback) { - nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); - } - return newEl; -}; -const setNodeElem = (elem, node) => { - nodeElems[node.id] = elem; -}; -const clear$1 = () => { - nodeElems = {}; -}; -const positionNode = (node) => { - const el = nodeElems[node.id]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( - "Transforming node", - node.diff, - node, - "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" - ); - const padding = 8; - const diff = node.diff || 0; - if (node.clusterNode) { - el.attr( - "transform", - "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" - ); - } else { - el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); - } - return diff; -}; -const getSubGraphTitleMargins = ({ - flowchart -}) => { - var _a, _b; - const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; - const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; - const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; - return { - subGraphTitleTopMargin, - subGraphTitleBottomMargin, - subGraphTitleTotalMargin - }; -}; -const markerOffsets = { - aggregation: 18, - extension: 18, - composition: 18, - dependency: 6, - lollipop: 13.5, - arrow_point: 5.3 -}; -function calculateDeltaAndAngle(point1, point2) { - if (point1 === void 0 || point2 === void 0) { - return { angle: 0, deltaX: 0, deltaY: 0 }; - } - point1 = pointTransformer(point1); - point2 = pointTransformer(point2); - const [x1, y1] = [point1.x, point1.y]; - const [x2, y2] = [point2.x, point2.y]; - const deltaX = x2 - x1; - const deltaY = y2 - y1; - return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; -} -const pointTransformer = (data) => { - if (Array.isArray(data)) { - return { x: data[0], y: data[1] }; - } - return data; -}; -const getLineFunctionsWithOffset = (edge) => { - return { - x: function(d, i, data) { - let offset = 0; - if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { - const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); - offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); - } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { - const { angle, deltaX } = calculateDeltaAndAngle( - data[data.length - 1], - data[data.length - 2] - ); - offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); - } - return pointTransformer(d).x + offset; - }, - y: function(d, i, data) { - let offset = 0; - if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { - const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); - offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); - } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { - const { angle, deltaY } = calculateDeltaAndAngle( - data[data.length - 1], - data[data.length - 2] - ); - offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); - } - return pointTransformer(d).y + offset; - } - }; -}; -const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { - if (edge.arrowTypeStart) { - addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); - } - if (edge.arrowTypeEnd) { - addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); - } -}; -const arrowTypesMap = { - arrow_cross: "cross", - arrow_point: "point", - arrow_barb: "barb", - arrow_circle: "circle", - aggregation: "aggregation", - extension: "extension", - composition: "composition", - dependency: "dependency", - lollipop: "lollipop" -}; -const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { - const endMarkerType = arrowTypesMap[arrowType]; - if (!endMarkerType) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); - return; - } - const suffix = position === "start" ? "Start" : "End"; - svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); -}; -let edgeLabels = {}; -let terminalLabels = {}; -const clear = () => { - edgeLabels = {}; - terminalLabels = {}; -}; -const insertEdgeLabel = (elem, edge) => { - const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); - const labelElement = edge.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { - style: edge.labelStyle, - useHtmlLabels, - addSvgBackground: true - }) : createLabel$1(edge.label, edge.labelStyle); - const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); - const label = edgeLabel.insert("g").attr("class", "label"); - label.node().appendChild(labelElement); - let bbox = labelElement.getBBox(); - if (useHtmlLabels) { - const div = labelElement.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(labelElement); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - edgeLabels[edge.id] = edgeLabel; - edge.width = bbox.width; - edge.height = bbox.height; - let fo; - if (edge.startLabelLeft) { - const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); - const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); - const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(startLabelElement); - const slBox = startLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].startLeft = startEdgeLabelLeft; - setTerminalWidth(fo, edge.startLabelLeft); - } - if (edge.startLabelRight) { - const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); - const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); - const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); - fo = startEdgeLabelRight.node().appendChild(startLabelElement); - inner.node().appendChild(startLabelElement); - const slBox = startLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].startRight = startEdgeLabelRight; - setTerminalWidth(fo, edge.startLabelRight); - } - if (edge.endLabelLeft) { - const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); - const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); - const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(endLabelElement); - const slBox = endLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - endEdgeLabelLeft.node().appendChild(endLabelElement); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].endLeft = endEdgeLabelLeft; - setTerminalWidth(fo, edge.endLabelLeft); - } - if (edge.endLabelRight) { - const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); - const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); - const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(endLabelElement); - const slBox = endLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - endEdgeLabelRight.node().appendChild(endLabelElement); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].endRight = endEdgeLabelRight; - setTerminalWidth(fo, edge.endLabelRight); - } - return labelElement; -}; -function setTerminalWidth(fo, value) { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { - fo.style.width = value.length * 9 + "px"; - fo.style.height = "12px"; - } -} -const positionEdgeLabel = (edge, paths) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); - let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); - if (edge.label) { - const el = edgeLabels[edge.id]; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( - "Moving label " + edge.label + " from (", - x, - ",", - y, - ") to (", - pos.x, - ",", - pos.y, - ") abc88" - ); - if (paths.updatedPath) { - x = pos.x; - y = pos.y; - } - } - el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); - } - if (edge.startLabelLeft) { - const el = terminalLabels[edge.id].startLeft; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.startLabelRight) { - const el = terminalLabels[edge.id].startRight; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( - edge.arrowTypeStart ? 10 : 0, - "start_right", - path - ); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.endLabelLeft) { - const el = terminalLabels[edge.id].endLeft; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.endLabelRight) { - const el = terminalLabels[edge.id].endRight; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } -}; -const outsideNode = (node, point2) => { - const x = node.x; - const y = node.y; - const dx = Math.abs(point2.x - x); - const dy = Math.abs(point2.y - y); - const w = node.width / 2; - const h = node.height / 2; - if (dx >= w || dy >= h) { - return true; - } - return false; -}; -const intersection = (node, outsidePoint, insidePoint) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: - outsidePoint: ${JSON.stringify(outsidePoint)} - insidePoint : ${JSON.stringify(insidePoint)} - node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); - const x = node.x; - const y = node.y; - const dx = Math.abs(x - insidePoint.x); - const w = node.width / 2; - let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; - const h = node.height / 2; - const Q = Math.abs(outsidePoint.y - insidePoint.y); - const R = Math.abs(outsidePoint.x - insidePoint.x); - if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { - let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; - r = R * q / Q; - const res = { - x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, - y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q - }; - if (r === 0) { - res.x = outsidePoint.x; - res.y = outsidePoint.y; - } - if (R === 0) { - res.x = outsidePoint.x; - } - if (Q === 0) { - res.y = outsidePoint.y; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); - return res; - } else { - if (insidePoint.x < outsidePoint.x) { - r = outsidePoint.x - w - x; - } else { - r = x - w - outsidePoint.x; - } - let q = Q * r / R; - let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; - let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); - if (r === 0) { - _x = outsidePoint.x; - _y = outsidePoint.y; - } - if (R === 0) { - _x = outsidePoint.x; - } - if (Q === 0) { - _y = outsidePoint.y; - } - return { x: _x, y: _y }; - } -}; -const cutPathAtIntersect = (_points, boundaryNode) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundaryNode); - let points = []; - let lastPointOutside = _points[0]; - let isInside = false; - _points.forEach((point2) => { - if (!outsideNode(boundaryNode, point2) && !isInside) { - const inter = intersection(boundaryNode, lastPointOutside, point2); - let pointPresent = false; - points.forEach((p) => { - pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; - }); - if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { - points.push(inter); - } - isInside = true; - } else { - lastPointOutside = point2; - if (!isInside) { - points.push(point2); - } - } - }); - return points; -}; -const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { - let points = edge.points; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); - let pointsHasChanged = false; - const tail = graph.node(e.v); - var head = graph.node(e.w); - if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { - points = points.slice(1, edge.points.length - 1); - points.unshift(tail.intersect(points[0])); - points.push(head.intersect(points[points.length - 1])); - } - if (edge.toCluster) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); - points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); - pointsHasChanged = true; - } - if (edge.fromCluster) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); - points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); - pointsHasChanged = true; - } - const lineData = points.filter((p) => !Number.isNaN(p.y)); - let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .qrM; - if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { - curve = edge.curve; - } - const { x, y } = getLineFunctionsWithOffset(edge); - const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(x).y(y).curve(curve); - let strokeClasses; - switch (edge.thickness) { - case "normal": - strokeClasses = "edge-thickness-normal"; - break; - case "thick": - strokeClasses = "edge-thickness-thick"; - break; - case "invisible": - strokeClasses = "edge-thickness-thick"; - break; - default: - strokeClasses = ""; - } - switch (edge.pattern) { - case "solid": - strokeClasses += " edge-pattern-solid"; - break; - case "dotted": - strokeClasses += " edge-pattern-dotted"; - break; - case "dashed": - strokeClasses += " edge-pattern-dashed"; - break; - } - const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); - let url = ""; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { - url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; - url = url.replace(/\(/g, "\\("); - url = url.replace(/\)/g, "\\)"); - } - addEdgeMarkers(svgPath, edge, url, id, diagramType); - let paths = {}; - if (pointsHasChanged) { - paths.updatedPath = points; - } - paths.originalPath = edge.points; - return paths; -}; - - - -/***/ }), - -/***/ 35364: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ r: () => (/* binding */ render) -/* harmony export */ }); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(21176); -/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14075); -/* harmony import */ var _edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(98055); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(697); -/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(18897); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(26312); - - - - - - - -let clusterDb = {}; -let descendants = {}; -let parents = {}; -const clear$1 = () => { - descendants = {}; - parents = {}; - clusterDb = {}; -}; -const isDescendant = (id, ancestorId) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDescendant", ancestorId, " ", id, " = ", descendants[ancestorId].includes(id)); - if (descendants[ancestorId].includes(id)) { - return true; - } - return false; -}; -const edgeInCluster = (edge, clusterId) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Descendants of ", clusterId, " is ", descendants[clusterId]); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); - if (edge.v === clusterId) { - return false; - } - if (edge.w === clusterId) { - return false; - } - if (!descendants[clusterId]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in descendants"); - return false; - } - return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); -}; -const copy = (clusterId, graph, newGraph, rootId) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Copying children of ", - clusterId, - "root", - rootId, - "data", - graph.node(clusterId), - rootId - ); - const nodes = graph.children(clusterId) || []; - if (clusterId !== rootId) { - nodes.push(clusterId); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); - nodes.forEach((node) => { - if (graph.children(node).length > 0) { - copy(node, graph, newGraph, rootId); - } else { - const data = graph.node(node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); - newGraph.setNode(node, data); - if (rootId !== graph.parent(node)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); - newGraph.setParent(node, graph.parent(node)); - } - if (clusterId !== rootId && node !== clusterId) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); - newGraph.setParent(node, clusterId); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( - "Not Setting parent for node=", - node, - "cluster!==rootId", - clusterId !== rootId, - "node!==clusterId", - node !== clusterId - ); - } - const edges = graph.edges(node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); - edges.forEach((edge) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); - const data2 = graph.edge(edge.v, edge.w, edge.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); - try { - if (edgeInCluster(edge, rootId)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); - newGraph.setEdge(edge.v, edge.w, data2, edge.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info( - "Skipping copy of edge ", - edge.v, - "-->", - edge.w, - " rootId: ", - rootId, - " clusterId:", - clusterId - ); - } - } catch (e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); - } - }); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); - graph.removeNode(node); - }); -}; -const extractDescendants = (id, graph) => { - const children = graph.children(id); - let res = [...children]; - for (const child of children) { - parents[child] = id; - res = [...res, ...extractDescendants(child, graph)]; - } - return res; -}; -const findNonClusterChild = (id, graph) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); - const children = graph.children(id); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); - if (children.length < 1) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); - return id; - } - for (const child of children) { - const _id = findNonClusterChild(child, graph); - if (_id) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); - return _id; - } - } -}; -const getAnchorId = (id) => { - if (!clusterDb[id]) { - return id; - } - if (!clusterDb[id].externalConnections) { - return id; - } - if (clusterDb[id]) { - return clusterDb[id].id; - } - return id; -}; -const adjustClustersAndEdges = (graph, depth) => { - if (!graph || depth > 10) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); - return; - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); - } - graph.nodes().forEach(function(id) { - const children = graph.children(id); - if (children.length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Cluster identified", - id, - " Replacement id in edges: ", - findNonClusterChild(id, graph) - ); - descendants[id] = extractDescendants(id, graph); - clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; - } - }); - graph.nodes().forEach(function(id) { - const children = graph.children(id); - const edges = graph.edges(); - if (children.length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); - edges.forEach((edge) => { - if (edge.v !== id && edge.w !== id) { - const d1 = isDescendant(edge.v, id); - const d2 = isDescendant(edge.w, id); - if (d1 ^ d2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Descendants of XXX ", id, ": ", descendants[id]); - clusterDb[id].externalConnections = true; - } - } - }); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); - } - }); - for (let id of Object.keys(clusterDb)) { - const nonClusterChild = clusterDb[id].id; - const parent = graph.parent(nonClusterChild); - if (parent !== id && clusterDb[parent] && !clusterDb[parent].externalConnections) { - clusterDb[id].id = parent; - } - } - graph.edges().forEach(function(e) { - const edge = graph.edge(e); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); - let v = e.v; - let w = e.w; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Fix XXX", - clusterDb, - "ids:", - e.v, - e.w, - "Translating: ", - clusterDb[e.v], - " --- ", - clusterDb[e.w] - ); - if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); - v = getAnchorId(e.v); - w = getAnchorId(e.w); - graph.removeEdge(e.v, e.w, e.name); - const specialId = e.w + "---" + e.v; - graph.setNode(specialId, { - domId: specialId, - id: specialId, - labelStyle: "", - labelText: edge.label, - padding: 0, - shape: "labelRect", - style: "" - }); - const edge1 = structuredClone(edge); - const edge2 = structuredClone(edge); - edge1.label = ""; - edge1.arrowTypeEnd = "none"; - edge2.label = ""; - edge1.fromCluster = e.v; - edge2.toCluster = e.v; - graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); - graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); - } else if (clusterDb[e.v] || clusterDb[e.w]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); - v = getAnchorId(e.v); - w = getAnchorId(e.w); - graph.removeEdge(e.v, e.w, e.name); - if (v !== e.v) { - const parent = graph.parent(v); - clusterDb[parent].externalConnections = true; - edge.fromCluster = e.v; - } - if (w !== e.w) { - const parent = graph.parent(w); - clusterDb[parent].externalConnections = true; - edge.toCluster = e.w; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); - graph.setEdge(v, w, edge, e.name); - } - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - extractor(graph, 0); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); -}; -const extractor = (graph, depth) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph), graph.children("D")); - if (depth > 10) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); - return; - } - let nodes = graph.nodes(); - let hasChildren = false; - for (const node of nodes) { - const children = graph.children(node); - hasChildren = hasChildren || children.length > 0; - } - if (!hasChildren) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); - return; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); - for (const node of nodes) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( - "Extracting node", - node, - clusterDb, - clusterDb[node] && !clusterDb[node].externalConnections, - !graph.parent(node), - graph.node(node), - graph.children("D"), - " Depth ", - depth - ); - if (!clusterDb[node]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); - } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && - graph.children(node) && graph.children(node).length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Cluster without external connections, without a parent and with children", - node, - depth - ); - const graphSettings = graph.graph(); - let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; - if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { - dir = clusterDb[node].clusterData.dir; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); - } - const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .T({ - multigraph: true, - compound: true - }).setGraph({ - rankdir: dir, - // Todo: set proper spacing - nodesep: 50, - ranksep: 50, - marginx: 8, - marginy: 8 - }).setDefaultEdgeLabel(function() { - return {}; - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - copy(node, graph, clusterGraph, node); - graph.setNode(node, { - clusterNode: true, - id: node, - clusterData: clusterDb[node].clusterData, - labelText: clusterDb[node].labelText, - graph: clusterGraph - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(clusterGraph)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Cluster ** ", - node, - " **not meeting the criteria !externalConnections:", - !clusterDb[node].externalConnections, - " no parent: ", - !graph.parent(node), - " children ", - graph.children(node) && graph.children(node).length > 0, - graph.children("D"), - depth - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); - } - } - nodes = graph.nodes(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); - for (const node of nodes) { - const data = graph.node(node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); - if (data.clusterNode) { - extractor(data.graph, depth + 1); - } - } -}; -const sorter = (graph, nodes) => { - if (nodes.length === 0) { - return []; - } - let result = Object.assign(nodes); - nodes.forEach((node) => { - const children = graph.children(node); - const sorted = sorter(graph, children); - result = [...result, ...sorted]; - }); - return result; -}; -const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); -const rect = (parent, node) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels); - const label = shapeSvg.insert("g").attr("class", "cluster-label"); - const text = node.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); - let bbox = text.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - const padding = 0 * node.padding; - const halfPadding = padding / 2; - const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; - if (node.width <= bbox.width + padding) { - node.diff = (bbox.width - node.width) / 2 - node.padding / 2; - } else { - node.diff = -node.padding / 2; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); - rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); - const { subGraphTitleTopMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); - if (useHtmlLabels) { - label.attr( - "transform", - // This puts the label on top of the box instead of inside it - `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` - ); - } else { - label.attr( - "transform", - // This puts the label on top of the box instead of inside it - `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` - ); - } - const rectBox = rect2.node().getBBox(); - node.width = rectBox.width; - node.height = rectBox.height; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const noteGroup = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const padding = 0 * node.padding; - const halfPadding = padding / 2; - rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); - const rectBox = rect2.node().getBBox(); - node.width = rectBox.width; - node.height = rectBox.height; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const roundedWithTitle = (parent, node) => { - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const label = shapeSvg.insert("g").attr("class", "cluster-label"); - const innerRect = shapeSvg.append("rect"); - const text = label.node().appendChild((0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); - let bbox = text.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - bbox = text.getBBox(); - const padding = 0 * node.padding; - const halfPadding = padding / 2; - const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; - if (node.width <= bbox.width + node.padding) { - node.diff = (bbox.width + node.padding * 0 - node.width) / 2; - } else { - node.diff = -node.padding / 2; - } - rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); - innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); - const { subGraphTitleTopMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); - label.attr( - "transform", - `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels) ? 5 : 3) + subGraphTitleTopMargin})` - ); - const rectBox = rect2.node().getBBox(); - node.height = rectBox.height; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const divider = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const padding = 0 * node.padding; - const halfPadding = padding / 2; - rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); - const rectBox = rect2.node().getBBox(); - node.width = rectBox.width; - node.height = rectBox.height; - node.diff = -node.padding / 2; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const shapes = { rect, roundedWithTitle, noteGroup, divider }; -let clusterElems = {}; -const insertCluster = (elem, node) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); - const shape = node.shape || "rect"; - clusterElems[node.id] = shapes[shape](elem, node); -}; -const clear = () => { - clusterElems = {}; -}; -const recursiveRender = async (_elem, graph, diagramType, id, parentCluster, siteConfig) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph), parentCluster); - const dir = graph.graph().rankdir; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); - const elem = _elem.insert("g").attr("class", "root"); - if (!graph.nodes()) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); - } - if (graph.edges().length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); - } - const clusters = elem.insert("g").attr("class", "clusters"); - const edgePaths = elem.insert("g").attr("class", "edgePaths"); - const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); - const nodes = elem.insert("g").attr("class", "nodes"); - await Promise.all( - graph.nodes().map(async function(v) { - const node = graph.node(v); - if (parentCluster !== void 0) { - const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); - graph.setNode(parentCluster.id, data); - if (!graph.parent(v)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); - graph.setParent(v, parentCluster.id, data); - } - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); - if (node && node.clusterNode) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); - const o = await recursiveRender( - nodes, - node.graph, - diagramType, - id, - graph.node(v), - siteConfig - ); - const newEl = o.elem; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); - node.diff = o.diff || 0; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); - } else { - if (graph.children(v).length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); - clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); - await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); - } - } - }) - ); - graph.edges().forEach(function(e) { - const edge = graph.edge(e.v, e.w, e.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translating: ", clusterDb[e.v], clusterDb[e.w]); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); - }); - graph.edges().forEach(function(e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); - (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .Zp)(graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - let diff = 0; - const { subGraphTitleTotalMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); - sortNodesByHierarchy(graph).forEach(function(v) { - const node = graph.node(v); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info( - "Position " + v + ": (" + node.x, - "," + node.y, - ") width: ", - node.width, - " height: ", - node.height - ); - if (node && node.clusterNode) { - node.y += subGraphTitleTotalMargin; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); - } else { - if (graph.children(v).length > 0) { - node.height += subGraphTitleTotalMargin; - insertCluster(clusters, node); - clusterDb[node.id].node = node; - } else { - node.y += subGraphTitleTotalMargin / 2; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); - } - } - }); - graph.edges().forEach(function(e) { - const edge = graph.edge(e); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); - edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2); - const paths = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.h)(edgePaths, e, edge, clusterDb, diagramType, graph, id); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.j)(edge, paths); - }); - graph.nodes().forEach(function(v) { - const n = graph.node(v); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); - if (n.type === "group") { - diff = n.diff; - } - }); - return { elem, diff }; -}; -const render = async (elem, graph, markers, diagramType, id) => { - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramType, id); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.b)(); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.d)(); - clear(); - clear$1(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph))); - adjustClustersAndEdges(graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph))); - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - await recursiveRender(elem, graph, diagramType, id, void 0, siteConfig); -}; - - - -/***/ }), - -/***/ 3068: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(91245); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(697); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26312); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(99702); -/* harmony import */ var _index_01f381cb_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(35364); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99418); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(21176); -/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(14075); - - - - - - - - - - - - - - - - - - - -const SHAPE_STATE = "rect"; -const SHAPE_STATE_WITH_DESC = "rectWithTitle"; -const SHAPE_START = "start"; -const SHAPE_END = "end"; -const SHAPE_DIVIDER = "divider"; -const SHAPE_GROUP = "roundedWithTitle"; -const SHAPE_NOTE = "note"; -const SHAPE_NOTEGROUP = "noteGroup"; -const CSS_DIAGRAM = "statediagram"; -const CSS_STATE = "state"; -const CSS_DIAGRAM_STATE = `${CSS_DIAGRAM}-${CSS_STATE}`; -const CSS_EDGE = "transition"; -const CSS_NOTE = "note"; -const CSS_NOTE_EDGE = "note-edge"; -const CSS_EDGE_NOTE_EDGE = `${CSS_EDGE} ${CSS_NOTE_EDGE}`; -const CSS_DIAGRAM_NOTE = `${CSS_DIAGRAM}-${CSS_NOTE}`; -const CSS_CLUSTER = "cluster"; -const CSS_DIAGRAM_CLUSTER = `${CSS_DIAGRAM}-${CSS_CLUSTER}`; -const CSS_CLUSTER_ALT = "cluster-alt"; -const CSS_DIAGRAM_CLUSTER_ALT = `${CSS_DIAGRAM}-${CSS_CLUSTER_ALT}`; -const PARENT = "parent"; -const NOTE = "note"; -const DOMID_STATE = "state"; -const DOMID_TYPE_SPACER = "----"; -const NOTE_ID = `${DOMID_TYPE_SPACER}${NOTE}`; -const PARENT_ID = `${DOMID_TYPE_SPACER}${PARENT}`; -const G_EDGE_STYLE = "fill:none"; -const G_EDGE_ARROWHEADSTYLE = "fill: #333"; -const G_EDGE_LABELPOS = "c"; -const G_EDGE_LABELTYPE = "text"; -const G_EDGE_THICKNESS = "normal"; -let nodeDb = {}; -let graphItemCount = 0; -const setConf = function(cnf) { - const keys = Object.keys(cnf); - for (const key of keys) { - cnf[key]; - } -}; -const getClasses = function(text, diagramObj) { - diagramObj.db.extract(diagramObj.db.getRootDocV2()); - return diagramObj.db.getClasses(); -}; -function getClassesFromDbInfo(dbInfoItem) { - if (dbInfoItem === void 0 || dbInfoItem === null) { - return ""; - } else { - if (dbInfoItem.classes) { - return dbInfoItem.classes.join(" "); - } else { - return ""; - } - } -} -function stateDomId(itemId = "", counter = 0, type = "", typeSpacer = DOMID_TYPE_SPACER) { - const typeStr = type !== null && type.length > 0 ? `${typeSpacer}${type}` : ""; - return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`; -} -const setupNode = (g, parent, parsedItem, diagramStates, diagramDb, altFlag) => { - const itemId = parsedItem.id; - const classStr = getClassesFromDbInfo(diagramStates[itemId]); - if (itemId !== "root") { - let shape = SHAPE_STATE; - if (parsedItem.start === true) { - shape = SHAPE_START; - } - if (parsedItem.start === false) { - shape = SHAPE_END; - } - if (parsedItem.type !== _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.D) { - shape = parsedItem.type; - } - if (!nodeDb[itemId]) { - nodeDb[itemId] = { - id: itemId, - shape, - description: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(itemId, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.c)()), - classes: `${classStr} ${CSS_DIAGRAM_STATE}` - }; - } - const newNode = nodeDb[itemId]; - if (parsedItem.description) { - if (Array.isArray(newNode.description)) { - newNode.shape = SHAPE_STATE_WITH_DESC; - newNode.description.push(parsedItem.description); - } else { - if (newNode.description.length > 0) { - newNode.shape = SHAPE_STATE_WITH_DESC; - if (newNode.description === itemId) { - newNode.description = [parsedItem.description]; - } else { - newNode.description = [newNode.description, parsedItem.description]; - } - } else { - newNode.shape = SHAPE_STATE; - newNode.description = parsedItem.description; - } - } - newNode.description = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeTextOrArray(newNode.description, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.c)()); - } - if (newNode.description.length === 1 && newNode.shape === SHAPE_STATE_WITH_DESC) { - newNode.shape = SHAPE_STATE; - } - if (!newNode.type && parsedItem.doc) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.l.info("Setting cluster for ", itemId, getDir(parsedItem)); - newNode.type = "group"; - newNode.dir = getDir(parsedItem); - newNode.shape = parsedItem.type === _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.a ? SHAPE_DIVIDER : SHAPE_GROUP; - newNode.classes = newNode.classes + " " + CSS_DIAGRAM_CLUSTER + " " + (altFlag ? CSS_DIAGRAM_CLUSTER_ALT : ""); - } - const nodeData = { - labelStyle: "", - shape: newNode.shape, - labelText: newNode.description, - // typeof newNode.description === 'object' - // ? newNode.description[0] - // : newNode.description, - classes: newNode.classes, - style: "", - //styles.style, - id: itemId, - dir: newNode.dir, - domId: stateDomId(itemId, graphItemCount), - type: newNode.type, - padding: 15 - //getConfig().flowchart.padding - }; - nodeData.centerLabel = true; - if (parsedItem.note) { - const noteData = { - labelStyle: "", - shape: SHAPE_NOTE, - labelText: parsedItem.note.text, - classes: CSS_DIAGRAM_NOTE, - // useHtmlLabels: false, - style: "", - // styles.style, - id: itemId + NOTE_ID + "-" + graphItemCount, - domId: stateDomId(itemId, graphItemCount, NOTE), - type: newNode.type, - padding: 15 - //getConfig().flowchart.padding - }; - const groupData = { - labelStyle: "", - shape: SHAPE_NOTEGROUP, - labelText: parsedItem.note.text, - classes: newNode.classes, - style: "", - // styles.style, - id: itemId + PARENT_ID, - domId: stateDomId(itemId, graphItemCount, PARENT), - type: "group", - padding: 0 - //getConfig().flowchart.padding - }; - graphItemCount++; - const parentNodeId = itemId + PARENT_ID; - g.setNode(parentNodeId, groupData); - g.setNode(noteData.id, noteData); - g.setNode(itemId, nodeData); - g.setParent(itemId, parentNodeId); - g.setParent(noteData.id, parentNodeId); - let from = itemId; - let to = noteData.id; - if (parsedItem.note.position === "left of") { - from = noteData.id; - to = itemId; - } - g.setEdge(from, to, { - arrowhead: "none", - arrowType: "", - style: G_EDGE_STYLE, - labelStyle: "", - classes: CSS_EDGE_NOTE_EDGE, - arrowheadStyle: G_EDGE_ARROWHEADSTYLE, - labelpos: G_EDGE_LABELPOS, - labelType: G_EDGE_LABELTYPE, - thickness: G_EDGE_THICKNESS - }); - } else { - g.setNode(itemId, nodeData); - } - } - if (parent && parent.id !== "root") { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("Setting node ", itemId, " to be child of its parent ", parent.id); - g.setParent(itemId, parent.id); - } - if (parsedItem.doc) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("Adding nodes children "); - setupDoc(g, parsedItem, parsedItem.doc, diagramStates, diagramDb, !altFlag); - } -}; -const setupDoc = (g, parentParsedItem, doc, diagramStates, diagramDb, altFlag) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("items", doc); - doc.forEach((item) => { - switch (item.stmt) { - case _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.b: - setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag); - break; - case _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.D: - setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag); - break; - case _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.S: - { - setupNode(g, parentParsedItem, item.state1, diagramStates, diagramDb, altFlag); - setupNode(g, parentParsedItem, item.state2, diagramStates, diagramDb, altFlag); - const edgeData = { - id: "edge" + graphItemCount, - arrowhead: "normal", - arrowTypeEnd: "arrow_barb", - style: G_EDGE_STYLE, - labelStyle: "", - label: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(item.description, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.c)()), - arrowheadStyle: G_EDGE_ARROWHEADSTYLE, - labelpos: G_EDGE_LABELPOS, - labelType: G_EDGE_LABELTYPE, - thickness: G_EDGE_THICKNESS, - classes: CSS_EDGE - }; - g.setEdge(item.state1.id, item.state2.id, edgeData, graphItemCount); - graphItemCount++; - } - break; - } - }); -}; -const getDir = (parsedItem, defaultDir = _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.c) => { - let dir = defaultDir; - if (parsedItem.doc) { - for (let i = 0; i < parsedItem.doc.length; i++) { - const parsedItemDoc = parsedItem.doc[i]; - if (parsedItemDoc.stmt === "dir") { - dir = parsedItemDoc.value; - } - } - } - return dir; -}; -const draw = async function(text, id, _version, diag) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.l.info("Drawing state diagram (v2)", id); - nodeDb = {}; - diag.db.getDirection(); - const { securityLevel, state: conf } = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.c)(); - const nodeSpacing = conf.nodeSpacing || 50; - const rankSpacing = conf.rankSpacing || 50; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.l.info(diag.db.getRootDocV2()); - diag.db.extract(diag.db.getRootDocV2()); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.l.info(diag.db.getRootDocV2()); - const diagramStates = diag.db.getStates(); - const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .T({ - multigraph: true, - compound: true - }).setGraph({ - rankdir: getDir(diag.db.getRootDocV2()), - nodesep: nodeSpacing, - ranksep: rankSpacing, - marginx: 8, - marginy: 8 - }).setDefaultEdgeLabel(function() { - return {}; - }); - setupNode(g, void 0, diag.db.getRootDocV2(), diagramStates, diag.db, true); - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("body"); - const svg = root.select(`[id="${id}"]`); - const element = root.select("#" + id + " g"); - await (0,_index_01f381cb_js__WEBPACK_IMPORTED_MODULE_9__.r)(element, g, ["barb"], CSS_DIAGRAM, id); - const padding = 8; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.u.insertTitle(svg, "statediagramTitleText", conf.titleTopMargin, diag.db.getDiagramTitle()); - const bounds = svg.node().getBBox(); - const width = bounds.width + padding * 2; - const height = bounds.height + padding * 2; - svg.attr("class", CSS_DIAGRAM); - const svgBounds = svg.node().getBBox(); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.i)(svg, height, width, conf.useMaxWidth); - const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_8__.l.debug(`viewBox ${vBox}`); - svg.attr("viewBox", vBox); - const labels = document.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); - for (const label of labels) { - const dim = label.getBBox(); - const rect = document.createElementNS("http://www.w3.org/2000/svg", SHAPE_STATE); - rect.setAttribute("rx", 0); - rect.setAttribute("ry", 0); - rect.setAttribute("width", dim.width); - rect.setAttribute("height", dim.height); - label.insertBefore(rect, label.firstChild); - } -}; -const renderer = { - setConf, - getClasses, - draw -}; -const diagram = { - parser: _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.p, - db: _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d, - renderer, - styles: _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.s, - init: (cnf) => { - if (!cnf.state) { - cnf.state = {}; - } - cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; - _styles_0784dbeb_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); - } -}; - - - -/***/ }), - -/***/ 91245: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ D: () => (/* binding */ DEFAULT_STATE_TYPE), -/* harmony export */ S: () => (/* binding */ STMT_RELATION), -/* harmony export */ a: () => (/* binding */ DIVIDER_TYPE), -/* harmony export */ b: () => (/* binding */ STMT_STATE), -/* harmony export */ c: () => (/* binding */ DEFAULT_NESTED_DOC_DIR), -/* harmony export */ d: () => (/* binding */ db), -/* harmony export */ p: () => (/* binding */ parser$1), -/* harmony export */ s: () => (/* binding */ styles) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99702); - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 15], $V7 = [1, 16], $V8 = [1, 17], $V9 = [1, 18], $Va = [1, 30], $Vb = [1, 19], $Vc = [1, 20], $Vd = [1, 21], $Ve = [1, 22], $Vf = [1, 23], $Vg = [1, 25], $Vh = [1, 26], $Vi = [1, 27], $Vj = [1, 28], $Vk = [1, 29], $Vl = [1, 32], $Vm = [1, 33], $Vn = [1, 34], $Vo = [1, 35], $Vp = [1, 31], $Vq = [1, 4, 5, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $Vr = [1, 4, 5, 13, 14, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $Vs = [4, 5, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "SPACE": 4, "NL": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "classDefStatement": 10, "cssClassStatement": 11, "idStatement": 12, "DESCR": 13, "-->": 14, "HIDE_EMPTY": 15, "scale": 16, "WIDTH": 17, "COMPOSIT_STATE": 18, "STRUCT_START": 19, "STRUCT_STOP": 20, "STATE_DESCR": 21, "AS": 22, "ID": 23, "FORK": 24, "JOIN": 25, "CHOICE": 26, "CONCURRENT": 27, "note": 28, "notePosition": 29, "NOTE_TEXT": 30, "direction": 31, "acc_title": 32, "acc_title_value": 33, "acc_descr": 34, "acc_descr_value": 35, "acc_descr_multiline_value": 36, "classDef": 37, "CLASSDEF_ID": 38, "CLASSDEF_STYLEOPTS": 39, "DEFAULT": 40, "class": 41, "CLASSENTITY_IDS": 42, "STYLECLASS": 43, "direction_tb": 44, "direction_bt": 45, "direction_rl": 46, "direction_lr": 47, "eol": 48, ";": 49, "EDGE_STATE": 50, "STYLE_SEPARATOR": 51, "left_of": 52, "right_of": 53, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 4: "SPACE", 5: "NL", 6: "SD", 13: "DESCR", 14: "-->", 15: "HIDE_EMPTY", 16: "scale", 17: "WIDTH", 18: "COMPOSIT_STATE", 19: "STRUCT_START", 20: "STRUCT_STOP", 21: "STATE_DESCR", 22: "AS", 23: "ID", 24: "FORK", 25: "JOIN", 26: "CHOICE", 27: "CONCURRENT", 28: "note", 30: "NOTE_TEXT", 32: "acc_title", 33: "acc_title_value", 34: "acc_descr", 35: "acc_descr_value", 36: "acc_descr_multiline_value", 37: "classDef", 38: "CLASSDEF_ID", 39: "CLASSDEF_STYLEOPTS", 40: "DEFAULT", 41: "class", 42: "CLASSENTITY_IDS", 43: "STYLECLASS", 44: "direction_tb", 45: "direction_bt", 46: "direction_rl", 47: "direction_lr", 49: ";", 50: "EDGE_STATE", 51: "STYLE_SEPARATOR", 52: "left_of", 53: "right_of" }, - productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 3], [9, 4], [9, 1], [9, 2], [9, 1], [9, 4], [9, 3], [9, 6], [9, 1], [9, 1], [9, 1], [9, 1], [9, 4], [9, 4], [9, 1], [9, 2], [9, 2], [9, 1], [10, 3], [10, 3], [11, 3], [31, 1], [31, 1], [31, 1], [31, 1], [48, 1], [48, 1], [12, 1], [12, 1], [12, 3], [12, 3], [29, 1], [29, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 3: - yy.setRootDoc($$[$0]); - return $$[$0]; - case 4: - this.$ = []; - break; - case 5: - if ($$[$0] != "nl") { - $$[$0 - 1].push($$[$0]); - this.$ = $$[$0 - 1]; - } - break; - case 6: - case 7: - this.$ = $$[$0]; - break; - case 8: - this.$ = "nl"; - break; - case 11: - this.$ = $$[$0]; - break; - case 12: - const stateStmt = $$[$0 - 1]; - stateStmt.description = yy.trimColon($$[$0]); - this.$ = stateStmt; - break; - case 13: - this.$ = { stmt: "relation", state1: $$[$0 - 2], state2: $$[$0] }; - break; - case 14: - const relDescription = yy.trimColon($$[$0]); - this.$ = { stmt: "relation", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription }; - break; - case 18: - this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: "", doc: $$[$0 - 1] }; - break; - case 19: - var id = $$[$0]; - var description = $$[$0 - 2].trim(); - if ($$[$0].match(":")) { - var parts = $$[$0].split(":"); - id = parts[0]; - description = [description, parts[1]]; - } - this.$ = { stmt: "state", id, type: "default", description }; - break; - case 20: - this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: $$[$0 - 5], doc: $$[$0 - 1] }; - break; - case 21: - this.$ = { stmt: "state", id: $$[$0], type: "fork" }; - break; - case 22: - this.$ = { stmt: "state", id: $$[$0], type: "join" }; - break; - case 23: - this.$ = { stmt: "state", id: $$[$0], type: "choice" }; - break; - case 24: - this.$ = { stmt: "state", id: yy.getDividerId(), type: "divider" }; - break; - case 25: - this.$ = { stmt: "state", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } }; - break; - case 28: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 29: - case 30: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 31: - case 32: - this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() }; - break; - case 33: - this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; - break; - case 34: - yy.setDirection("TB"); - this.$ = { stmt: "dir", value: "TB" }; - break; - case 35: - yy.setDirection("BT"); - this.$ = { stmt: "dir", value: "BT" }; - break; - case 36: - yy.setDirection("RL"); - this.$ = { stmt: "dir", value: "RL" }; - break; - case 37: - yy.setDirection("LR"); - this.$ = { stmt: "dir", value: "LR" }; - break; - case 40: - case 41: - this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" }; - break; - case 42: - this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; - break; - case 43: - this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; - break; - } - }, - table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o([1, 4, 5, 15, 16, 18, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 5]), { 9: 36, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 7]), o($Vq, [2, 8]), o($Vq, [2, 9]), o($Vq, [2, 10]), o($Vq, [2, 11], { 13: [1, 37], 14: [1, 38] }), o($Vq, [2, 15]), { 17: [1, 39] }, o($Vq, [2, 17], { 19: [1, 40] }), { 22: [1, 41] }, o($Vq, [2, 21]), o($Vq, [2, 22]), o($Vq, [2, 23]), o($Vq, [2, 24]), { 29: 42, 30: [1, 43], 52: [1, 44], 53: [1, 45] }, o($Vq, [2, 27]), { 33: [1, 46] }, { 35: [1, 47] }, o($Vq, [2, 30]), { 38: [1, 48], 40: [1, 49] }, { 42: [1, 50] }, o($Vr, [2, 40], { 51: [1, 51] }), o($Vr, [2, 41], { 51: [1, 52] }), o($Vq, [2, 34]), o($Vq, [2, 35]), o($Vq, [2, 36]), o($Vq, [2, 37]), o($Vq, [2, 6]), o($Vq, [2, 12]), { 12: 53, 23: $Va, 50: $Vp }, o($Vq, [2, 16]), o($Vs, $V3, { 7: 54 }), { 23: [1, 55] }, { 23: [1, 56] }, { 22: [1, 57] }, { 23: [2, 44] }, { 23: [2, 45] }, o($Vq, [2, 28]), o($Vq, [2, 29]), { 39: [1, 58] }, { 39: [1, 59] }, { 43: [1, 60] }, { 23: [1, 61] }, { 23: [1, 62] }, o($Vq, [2, 13], { 13: [1, 63] }), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 20: [1, 64], 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 19], { 19: [1, 65] }), { 30: [1, 66] }, { 23: [1, 67] }, o($Vq, [2, 31]), o($Vq, [2, 32]), o($Vq, [2, 33]), o($Vr, [2, 42]), o($Vr, [2, 43]), o($Vq, [2, 14]), o($Vq, [2, 18]), o($Vs, $V3, { 7: 68 }), o($Vq, [2, 25]), o($Vq, [2, 26]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 20: [1, 69], 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 20])], - defaultActions: { 5: [2, 1], 6: [2, 2], 44: [2, 44], 45: [2, 45] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - return 40; - case 1: - return 44; - case 2: - return 45; - case 3: - return 46; - case 4: - return 47; - case 5: - break; - case 6: - break; - case 7: - return 5; - case 8: - break; - case 9: - break; - case 10: - break; - case 11: - break; - case 12: - this.pushState("SCALE"); - return 16; - case 13: - return 17; - case 14: - this.popState(); - break; - case 15: - this.begin("acc_title"); - return 32; - case 16: - this.popState(); - return "acc_title_value"; - case 17: - this.begin("acc_descr"); - return 34; - case 18: - this.popState(); - return "acc_descr_value"; - case 19: - this.begin("acc_descr_multiline"); - break; - case 20: - this.popState(); - break; - case 21: - return "acc_descr_multiline_value"; - case 22: - this.pushState("CLASSDEF"); - return 37; - case 23: - this.popState(); - this.pushState("CLASSDEFID"); - return "DEFAULT_CLASSDEF_ID"; - case 24: - this.popState(); - this.pushState("CLASSDEFID"); - return 38; - case 25: - this.popState(); - return 39; - case 26: - this.pushState("CLASS"); - return 41; - case 27: - this.popState(); - this.pushState("CLASS_STYLE"); - return 42; - case 28: - this.popState(); - return 43; - case 29: - this.pushState("SCALE"); - return 16; - case 30: - return 17; - case 31: - this.popState(); - break; - case 32: - this.pushState("STATE"); - break; - case 33: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -8).trim(); - return 24; - case 34: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -8).trim(); - return 25; - case 35: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -10).trim(); - return 26; - case 36: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -8).trim(); - return 24; - case 37: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -8).trim(); - return 25; - case 38: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -10).trim(); - return 26; - case 39: - return 44; - case 40: - return 45; - case 41: - return 46; - case 42: - return 47; - case 43: - this.pushState("STATE_STRING"); - break; - case 44: - this.pushState("STATE_ID"); - return "AS"; - case 45: - this.popState(); - return "ID"; - case 46: - this.popState(); - break; - case 47: - return "STATE_DESCR"; - case 48: - return 18; - case 49: - this.popState(); - break; - case 50: - this.popState(); - this.pushState("struct"); - return 19; - case 51: - break; - case 52: - this.popState(); - return 20; - case 53: - break; - case 54: - this.begin("NOTE"); - return 28; - case 55: - this.popState(); - this.pushState("NOTE_ID"); - return 52; - case 56: - this.popState(); - this.pushState("NOTE_ID"); - return 53; - case 57: - this.popState(); - this.pushState("FLOATING_NOTE"); - break; - case 58: - this.popState(); - this.pushState("FLOATING_NOTE_ID"); - return "AS"; - case 59: - break; - case 60: - return "NOTE_TEXT"; - case 61: - this.popState(); - return "ID"; - case 62: - this.popState(); - this.pushState("NOTE_TEXT"); - return 23; - case 63: - this.popState(); - yy_.yytext = yy_.yytext.substr(2).trim(); - return 30; - case 64: - this.popState(); - yy_.yytext = yy_.yytext.slice(0, -8).trim(); - return 30; - case 65: - return 6; - case 66: - return 6; - case 67: - return 15; - case 68: - return 50; - case 69: - return 23; - case 70: - yy_.yytext = yy_.yytext.trim(); - return 13; - case 71: - return 14; - case 72: - return 27; - case 73: - return 51; - case 74: - return 5; - case 75: - return "INVALID"; - } - }, - rules: [/^(?:default\b)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:classDef\s+)/i, /^(?:DEFAULT\s+)/i, /^(?:\w+\s+)/i, /^(?:[^\n]*)/i, /^(?:class\s+)/i, /^(?:(\w+)+((,\s*\w+)*))/i, /^(?:[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:state\s+)/i, /^(?:.*<<fork>>)/i, /^(?:.*<<join>>)/i, /^(?:.*<<choice>>)/i, /^(?:.*\[\[fork\]\])/i, /^(?:.*\[\[join\]\])/i, /^(?:.*\[\[choice\]\])/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:["])/i, /^(?:\s*as\s+)/i, /^(?:[^\n\{]*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:\})/i, /^(?:[\n])/i, /^(?:note\s+)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:")/i, /^(?:\s*as\s*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n]*)/i, /^(?:\s*[^:\n\s\-]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:[\s\S]*?end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i], - conditions: { "LINE": { "rules": [9, 10], "inclusive": false }, "struct": { "rules": [9, 10, 22, 26, 32, 39, 40, 41, 42, 51, 52, 53, 54, 68, 69, 70, 71, 72], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [61], "inclusive": false }, "FLOATING_NOTE": { "rules": [58, 59, 60], "inclusive": false }, "NOTE_TEXT": { "rules": [63, 64], "inclusive": false }, "NOTE_ID": { "rules": [62], "inclusive": false }, "NOTE": { "rules": [55, 56, 57], "inclusive": false }, "CLASS_STYLE": { "rules": [28], "inclusive": false }, "CLASS": { "rules": [27], "inclusive": false }, "CLASSDEFID": { "rules": [25], "inclusive": false }, "CLASSDEF": { "rules": [23, 24], "inclusive": false }, "acc_descr_multiline": { "rules": [20, 21], "inclusive": false }, "acc_descr": { "rules": [18], "inclusive": false }, "acc_title": { "rules": [16], "inclusive": false }, "SCALE": { "rules": [13, 14, 30, 31], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [45], "inclusive": false }, "STATE_STRING": { "rules": [46, 47], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [9, 10, 33, 34, 35, 36, 37, 38, 43, 44, 48, 49, 50], "inclusive": false }, "ID": { "rules": [9, 10], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 15, 17, 19, 22, 26, 29, 32, 50, 54, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -const DEFAULT_DIAGRAM_DIRECTION = "LR"; -const DEFAULT_NESTED_DOC_DIR = "TB"; -const STMT_STATE = "state"; -const STMT_RELATION = "relation"; -const STMT_CLASSDEF = "classDef"; -const STMT_APPLYCLASS = "applyClass"; -const DEFAULT_STATE_TYPE = "default"; -const DIVIDER_TYPE = "divider"; -const START_NODE = "[*]"; -const START_TYPE = "start"; -const END_NODE = START_NODE; -const END_TYPE = "end"; -const COLOR_KEYWORD = "color"; -const FILL_KEYWORD = "fill"; -const BG_FILL = "bgFill"; -const STYLECLASS_SEP = ","; -function newClassesList() { - return {}; -} -let direction = DEFAULT_DIAGRAM_DIRECTION; -let rootDoc = []; -let classes = newClassesList(); -const newDoc = () => { - return { - relations: [], - states: {}, - documents: {} - }; -}; -let documents = { - root: newDoc() -}; -let currentDocument = documents.root; -let startEndCount = 0; -let dividerCnt = 0; -const lineType = { - LINE: 0, - DOTTED_LINE: 1 -}; -const relationType = { - AGGREGATION: 0, - EXTENSION: 1, - COMPOSITION: 2, - DEPENDENCY: 3 -}; -const clone = (o) => JSON.parse(JSON.stringify(o)); -const setRootDoc = (o) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting root doc", o); - rootDoc = o; -}; -const getRootDoc = () => rootDoc; -const docTranslator = (parent, node, first) => { - if (node.stmt === STMT_RELATION) { - docTranslator(parent, node.state1, true); - docTranslator(parent, node.state2, false); - } else { - if (node.stmt === STMT_STATE) { - if (node.id === "[*]") { - node.id = first ? parent.id + "_start" : parent.id + "_end"; - node.start = first; - } else { - node.id = node.id.trim(); - } - } - if (node.doc) { - const doc = []; - let currentDoc = []; - let i; - for (i = 0; i < node.doc.length; i++) { - if (node.doc[i].type === DIVIDER_TYPE) { - const newNode = clone(node.doc[i]); - newNode.doc = clone(currentDoc); - doc.push(newNode); - currentDoc = []; - } else { - currentDoc.push(node.doc[i]); - } - } - if (doc.length > 0 && currentDoc.length > 0) { - const newNode = { - stmt: STMT_STATE, - id: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.I)(), - type: "divider", - doc: clone(currentDoc) - }; - doc.push(clone(newNode)); - node.doc = doc; - } - node.doc.forEach((docNode) => docTranslator(node, docNode, true)); - } - } -}; -const getRootDocV2 = () => { - docTranslator({ id: "root" }, { id: "root", doc: rootDoc }, true); - return { id: "root", doc: rootDoc }; -}; -const extract = (_doc) => { - let doc; - if (_doc.doc) { - doc = _doc.doc; - } else { - doc = _doc; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info(doc); - clear(true); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Extract", doc); - doc.forEach((item) => { - switch (item.stmt) { - case STMT_STATE: - addState( - item.id.trim(), - item.type, - item.doc, - item.description, - item.note, - item.classes, - item.styles, - item.textStyles - ); - break; - case STMT_RELATION: - addRelation(item.state1, item.state2, item.description); - break; - case STMT_CLASSDEF: - addStyleClass(item.id.trim(), item.classes); - break; - case STMT_APPLYCLASS: - setCssClass(item.id.trim(), item.styleClass); - break; - } - }); -}; -const addState = function(id, type = DEFAULT_STATE_TYPE, doc = null, descr = null, note = null, classes2 = null, styles2 = null, textStyles = null) { - const trimmedId = id == null ? void 0 : id.trim(); - if (currentDocument.states[trimmedId] === void 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Adding state ", trimmedId, descr); - currentDocument.states[trimmedId] = { - id: trimmedId, - descriptions: [], - type, - doc, - note, - classes: [], - styles: [], - textStyles: [] - }; - } else { - if (!currentDocument.states[trimmedId].doc) { - currentDocument.states[trimmedId].doc = doc; - } - if (!currentDocument.states[trimmedId].type) { - currentDocument.states[trimmedId].type = type; - } - } - if (descr) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state description", trimmedId, descr); - if (typeof descr === "string") { - addDescription(trimmedId, descr.trim()); - } - if (typeof descr === "object") { - descr.forEach((des) => addDescription(trimmedId, des.trim())); - } - } - if (note) { - currentDocument.states[trimmedId].note = note; - currentDocument.states[trimmedId].note.text = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText( - currentDocument.states[trimmedId].note.text, - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)() - ); - } - if (classes2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state classes", trimmedId, classes2); - const classesList = typeof classes2 === "string" ? [classes2] : classes2; - classesList.forEach((cssClass) => setCssClass(trimmedId, cssClass.trim())); - } - if (styles2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); - const stylesList = typeof styles2 === "string" ? [styles2] : styles2; - stylesList.forEach((style) => setStyle(trimmedId, style.trim())); - } - if (textStyles) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); - const textStylesList = typeof textStyles === "string" ? [textStyles] : textStyles; - textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim())); - } -}; -const clear = function(saveCommon) { - documents = { - root: newDoc() - }; - currentDocument = documents.root; - startEndCount = 0; - classes = newClassesList(); - if (!saveCommon) { - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.v)(); - } -}; -const getState = function(id) { - return currentDocument.states[id]; -}; -const getStates = function() { - return currentDocument.states; -}; -const logDocuments = function() { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Documents = ", documents); -}; -const getRelations = function() { - return currentDocument.relations; -}; -function startIdIfNeeded(id = "") { - let fixedId = id; - if (id === START_NODE) { - startEndCount++; - fixedId = `${START_TYPE}${startEndCount}`; - } - return fixedId; -} -function startTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { - return id === START_NODE ? START_TYPE : type; -} -function endIdIfNeeded(id = "") { - let fixedId = id; - if (id === END_NODE) { - startEndCount++; - fixedId = `${END_TYPE}${startEndCount}`; - } - return fixedId; -} -function endTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { - return id === END_NODE ? END_TYPE : type; -} -function addRelationObjs(item1, item2, relationTitle) { - let id1 = startIdIfNeeded(item1.id.trim()); - let type1 = startTypeIfNeeded(item1.id.trim(), item1.type); - let id2 = startIdIfNeeded(item2.id.trim()); - let type2 = startTypeIfNeeded(item2.id.trim(), item2.type); - addState( - id1, - type1, - item1.doc, - item1.description, - item1.note, - item1.classes, - item1.styles, - item1.textStyles - ); - addState( - id2, - type2, - item2.doc, - item2.description, - item2.note, - item2.classes, - item2.styles, - item2.textStyles - ); - currentDocument.relations.push({ - id1, - id2, - relationTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(relationTitle, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)()) - }); -} -const addRelation = function(item1, item2, title) { - if (typeof item1 === "object") { - addRelationObjs(item1, item2, title); - } else { - const id1 = startIdIfNeeded(item1.trim()); - const type1 = startTypeIfNeeded(item1); - const id2 = endIdIfNeeded(item2.trim()); - const type2 = endTypeIfNeeded(item2); - addState(id1, type1); - addState(id2, type2); - currentDocument.relations.push({ - id1, - id2, - title: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(title, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)()) - }); - } -}; -const addDescription = function(id, descr) { - const theState = currentDocument.states[id]; - const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr; - theState.descriptions.push(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(_descr, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)())); -}; -const cleanupLabel = function(label) { - if (label.substring(0, 1) === ":") { - return label.substr(2).trim(); - } else { - return label.trim(); - } -}; -const getDividerId = () => { - dividerCnt++; - return "divider-id-" + dividerCnt; -}; -const addStyleClass = function(id, styleAttributes = "") { - if (classes[id] === void 0) { - classes[id] = { id, styles: [], textStyles: [] }; - } - const foundClass = classes[id]; - if (styleAttributes !== void 0 && styleAttributes !== null) { - styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { - const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); - if (attrib.match(COLOR_KEYWORD)) { - const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); - const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); - foundClass.textStyles.push(newStyle2); - } - foundClass.styles.push(fixedAttrib); - }); - } -}; -const getClasses = function() { - return classes; -}; -const setCssClass = function(itemIds, cssClassName) { - itemIds.split(",").forEach(function(id) { - let foundState = getState(id); - if (foundState === void 0) { - const trimmedId = id.trim(); - addState(trimmedId); - foundState = getState(trimmedId); - } - foundState.classes.push(cssClassName); - }); -}; -const setStyle = function(itemId, styleText) { - const item = getState(itemId); - if (item !== void 0) { - item.textStyles.push(styleText); - } -}; -const setTextStyle = function(itemId, cssClassName) { - const item = getState(itemId); - if (item !== void 0) { - item.textStyles.push(cssClassName); - } -}; -const getDirection = () => direction; -const setDirection = (dir) => { - direction = dir; -}; -const trimColon = (str) => str && str[0] === ":" ? str.substr(1).trim() : str.trim(); -const db = { - getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.c)().state, - addState, - clear, - getState, - getStates, - getRelations, - getClasses, - getDirection, - addRelation, - getDividerId, - setDirection, - cleanupLabel, - lineType, - relationType, - logDocuments, - getRootDoc, - setRootDoc, - getRootDocV2, - extract, - trimColon, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.g, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.s, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.a, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.b, - addStyleClass, - setCssClass, - addDescription, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_0__.t -}; -const getStyles = (options) => ` -defs #statediagram-barbEnd { - fill: ${options.transitionColor}; - stroke: ${options.transitionColor}; - } -g.stateGroup text { - fill: ${options.nodeBorder}; - stroke: none; - font-size: 10px; -} -g.stateGroup text { - fill: ${options.textColor}; - stroke: none; - font-size: 10px; - -} -g.stateGroup .state-title { - font-weight: bolder; - fill: ${options.stateLabelColor}; -} - -g.stateGroup rect { - fill: ${options.mainBkg}; - stroke: ${options.nodeBorder}; -} - -g.stateGroup line { - stroke: ${options.lineColor}; - stroke-width: 1; -} - -.transition { - stroke: ${options.transitionColor}; - stroke-width: 1; - fill: none; -} - -.stateGroup .composit { - fill: ${options.background}; - border-bottom: 1px -} - -.stateGroup .alt-composit { - fill: #e0e0e0; - border-bottom: 1px -} - -.state-note { - stroke: ${options.noteBorderColor}; - fill: ${options.noteBkgColor}; - - text { - fill: ${options.noteTextColor}; - stroke: none; - font-size: 10px; - } -} - -.stateLabel .box { - stroke: none; - stroke-width: 0; - fill: ${options.mainBkg}; - opacity: 0.5; -} - -.edgeLabel .label rect { - fill: ${options.labelBackgroundColor}; - opacity: 0.5; -} -.edgeLabel .label text { - fill: ${options.transitionLabelColor || options.tertiaryTextColor}; -} -.label div .edgeLabel { - color: ${options.transitionLabelColor || options.tertiaryTextColor}; -} - -.stateLabel text { - fill: ${options.stateLabelColor}; - font-size: 10px; - font-weight: bold; -} - -.node circle.state-start { - fill: ${options.specialStateColor}; - stroke: ${options.specialStateColor}; -} - -.node .fork-join { - fill: ${options.specialStateColor}; - stroke: ${options.specialStateColor}; -} - -.node circle.state-end { - fill: ${options.innerEndBackground}; - stroke: ${options.background}; - stroke-width: 1.5 -} -.end-state-inner { - fill: ${options.compositeBackground || options.background}; - // stroke: ${options.background}; - stroke-width: 1.5 -} - -.node rect { - fill: ${options.stateBkg || options.mainBkg}; - stroke: ${options.stateBorder || options.nodeBorder}; - stroke-width: 1px; -} -.node polygon { - fill: ${options.mainBkg}; - stroke: ${options.stateBorder || options.nodeBorder};; - stroke-width: 1px; -} -#statediagram-barbEnd { - fill: ${options.lineColor}; -} - -.statediagram-cluster rect { - fill: ${options.compositeTitleBackground}; - stroke: ${options.stateBorder || options.nodeBorder}; - stroke-width: 1px; -} - -.cluster-label, .nodeLabel { - color: ${options.stateLabelColor}; -} - -.statediagram-cluster rect.outer { - rx: 5px; - ry: 5px; -} -.statediagram-state .divider { - stroke: ${options.stateBorder || options.nodeBorder}; -} - -.statediagram-state .title-state { - rx: 5px; - ry: 5px; -} -.statediagram-cluster.statediagram-cluster .inner { - fill: ${options.compositeBackground || options.background}; -} -.statediagram-cluster.statediagram-cluster-alt .inner { - fill: ${options.altBackground ? options.altBackground : "#efefef"}; -} - -.statediagram-cluster .inner { - rx:0; - ry:0; -} - -.statediagram-state rect.basic { - rx: 5px; - ry: 5px; -} -.statediagram-state rect.divider { - stroke-dasharray: 10,10; - fill: ${options.altBackground ? options.altBackground : "#efefef"}; -} - -.note-edge { - stroke-dasharray: 5; -} - -.statediagram-note rect { - fill: ${options.noteBkgColor}; - stroke: ${options.noteBorderColor}; - stroke-width: 1px; - rx: 0; - ry: 0; -} -.statediagram-note rect { - fill: ${options.noteBkgColor}; - stroke: ${options.noteBorderColor}; - stroke-width: 1px; - rx: 0; - ry: 0; -} - -.statediagram-note text { - fill: ${options.noteTextColor}; -} - -.statediagram-note .nodeLabel { - color: ${options.noteTextColor}; -} -.statediagram .edgeLabel { - color: red; // ${options.noteTextColor}; -} - -#dependencyStart, #dependencyEnd { - fill: ${options.lineColor}; - stroke: ${options.lineColor}; - stroke-width: 1; -} - -.statediagramTitleText { - text-anchor: middle; - font-size: 18px; - fill: ${options.textColor}; -} -`; -const styles = getStyles; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/689.a3a2233a.js b/pr-preview/pr-1594/assets/js/689.a3a2233a.js deleted file mode 100644 index 19c574462c..0000000000 --- a/pr-preview/pr-1594/assets/js/689.a3a2233a.js +++ /dev/null @@ -1,3478 +0,0 @@ -"use strict"; -exports.id = 689; -exports.ids = [689]; -exports.modules = { - -/***/ 79689: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(28259); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16750); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74353); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99418); - - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 13], $V7 = [1, 14], $V8 = [1, 16], $V9 = [1, 17], $Va = [1, 18], $Vb = [1, 24], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 27], $Vf = [1, 28], $Vg = [1, 29], $Vh = [1, 30], $Vi = [1, 31], $Vj = [1, 32], $Vk = [1, 33], $Vl = [1, 34], $Vm = [1, 35], $Vn = [1, 36], $Vo = [1, 37], $Vp = [1, 38], $Vq = [1, 39], $Vr = [1, 41], $Vs = [1, 42], $Vt = [1, 43], $Vu = [1, 44], $Vv = [1, 45], $Vw = [1, 46], $Vx = [1, 4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 47, 48, 49, 50, 52, 53, 54, 59, 60, 61, 62, 70], $Vy = [4, 5, 16, 50, 52, 53], $Vz = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VA = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 49, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VB = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 48, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VC = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 47, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VD = [68, 69, 70], $VE = [1, 120]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "SPACE": 4, "NEWLINE": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "box_section": 10, "box_line": 11, "participant_statement": 12, "create": 13, "box": 14, "restOfLine": 15, "end": 16, "signal": 17, "autonumber": 18, "NUM": 19, "off": 20, "activate": 21, "actor": 22, "deactivate": 23, "note_statement": 24, "links_statement": 25, "link_statement": 26, "properties_statement": 27, "details_statement": 28, "title": 29, "legacy_title": 30, "acc_title": 31, "acc_title_value": 32, "acc_descr": 33, "acc_descr_value": 34, "acc_descr_multiline_value": 35, "loop": 36, "rect": 37, "opt": 38, "alt": 39, "else_sections": 40, "par": 41, "par_sections": 42, "par_over": 43, "critical": 44, "option_sections": 45, "break": 46, "option": 47, "and": 48, "else": 49, "participant": 50, "AS": 51, "participant_actor": 52, "destroy": 53, "note": 54, "placement": 55, "text2": 56, "over": 57, "actor_pair": 58, "links": 59, "link": 60, "properties": 61, "details": 62, "spaceList": 63, ",": 64, "left_of": 65, "right_of": 66, "signaltype": 67, "+": 68, "-": 69, "ACTOR": 70, "SOLID_OPEN_ARROW": 71, "DOTTED_OPEN_ARROW": 72, "SOLID_ARROW": 73, "DOTTED_ARROW": 74, "SOLID_CROSS": 75, "DOTTED_CROSS": 76, "SOLID_POINT": 77, "DOTTED_POINT": 78, "TXT": 79, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 4: "SPACE", 5: "NEWLINE", 6: "SD", 13: "create", 14: "box", 15: "restOfLine", 16: "end", 18: "autonumber", 19: "NUM", 20: "off", 21: "activate", 23: "deactivate", 29: "title", 30: "legacy_title", 31: "acc_title", 32: "acc_title_value", 33: "acc_descr", 34: "acc_descr_value", 35: "acc_descr_multiline_value", 36: "loop", 37: "rect", 38: "opt", 39: "alt", 41: "par", 43: "par_over", 44: "critical", 46: "break", 47: "option", 48: "and", 49: "else", 50: "participant", 51: "AS", 52: "participant_actor", 53: "destroy", 54: "note", 57: "over", 59: "links", 60: "link", 61: "properties", 62: "details", 64: ",", 65: "left_of", 66: "right_of", 68: "+", 69: "-", 70: "ACTOR", 71: "SOLID_OPEN_ARROW", 72: "DOTTED_OPEN_ARROW", 73: "SOLID_ARROW", 74: "DOTTED_ARROW", 75: "SOLID_CROSS", 76: "DOTTED_CROSS", 77: "SOLID_POINT", 78: "DOTTED_POINT", 79: "TXT" }, - productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [10, 0], [10, 2], [11, 2], [11, 1], [11, 1], [9, 1], [9, 2], [9, 4], [9, 2], [9, 4], [9, 3], [9, 3], [9, 2], [9, 3], [9, 3], [9, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [45, 1], [45, 4], [42, 1], [42, 4], [40, 1], [40, 4], [12, 5], [12, 3], [12, 5], [12, 3], [12, 3], [24, 4], [24, 4], [25, 3], [26, 3], [27, 3], [28, 3], [63, 2], [63, 1], [58, 3], [58, 1], [55, 1], [55, 1], [17, 5], [17, 5], [17, 4], [22, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [56, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 3: - yy.apply($$[$0]); - return $$[$0]; - case 4: - case 9: - this.$ = []; - break; - case 5: - case 10: - $$[$0 - 1].push($$[$0]); - this.$ = $$[$0 - 1]; - break; - case 6: - case 7: - case 11: - case 12: - this.$ = $$[$0]; - break; - case 8: - case 13: - this.$ = []; - break; - case 15: - $$[$0].type = "createParticipant"; - this.$ = $$[$0]; - break; - case 16: - $$[$0 - 1].unshift({ type: "boxStart", boxData: yy.parseBoxData($$[$0 - 2]) }); - $$[$0 - 1].push({ type: "boxEnd", boxText: $$[$0 - 2] }); - this.$ = $$[$0 - 1]; - break; - case 18: - this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 2]), sequenceIndexStep: Number($$[$0 - 1]), sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; - break; - case 19: - this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 1]), sequenceIndexStep: 1, sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; - break; - case 20: - this.$ = { type: "sequenceIndex", sequenceVisible: false, signalType: yy.LINETYPE.AUTONUMBER }; - break; - case 21: - this.$ = { type: "sequenceIndex", sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; - break; - case 22: - this.$ = { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] }; - break; - case 23: - this.$ = { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 1] }; - break; - case 29: - yy.setDiagramTitle($$[$0].substring(6)); - this.$ = $$[$0].substring(6); - break; - case 30: - yy.setDiagramTitle($$[$0].substring(7)); - this.$ = $$[$0].substring(7); - break; - case 31: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 32: - case 33: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 34: - $$[$0 - 1].unshift({ type: "loopStart", loopText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.LOOP_START }); - $$[$0 - 1].push({ type: "loopEnd", loopText: $$[$0 - 2], signalType: yy.LINETYPE.LOOP_END }); - this.$ = $$[$0 - 1]; - break; - case 35: - $$[$0 - 1].unshift({ type: "rectStart", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_START }); - $$[$0 - 1].push({ type: "rectEnd", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_END }); - this.$ = $$[$0 - 1]; - break; - case 36: - $$[$0 - 1].unshift({ type: "optStart", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_START }); - $$[$0 - 1].push({ type: "optEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_END }); - this.$ = $$[$0 - 1]; - break; - case 37: - $$[$0 - 1].unshift({ type: "altStart", altText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.ALT_START }); - $$[$0 - 1].push({ type: "altEnd", signalType: yy.LINETYPE.ALT_END }); - this.$ = $$[$0 - 1]; - break; - case 38: - $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_START }); - $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END }); - this.$ = $$[$0 - 1]; - break; - case 39: - $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_OVER_START }); - $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END }); - this.$ = $$[$0 - 1]; - break; - case 40: - $$[$0 - 1].unshift({ type: "criticalStart", criticalText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.CRITICAL_START }); - $$[$0 - 1].push({ type: "criticalEnd", signalType: yy.LINETYPE.CRITICAL_END }); - this.$ = $$[$0 - 1]; - break; - case 41: - $$[$0 - 1].unshift({ type: "breakStart", breakText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_START }); - $$[$0 - 1].push({ type: "breakEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_END }); - this.$ = $$[$0 - 1]; - break; - case 43: - this.$ = $$[$0 - 3].concat([{ type: "option", optionText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.CRITICAL_OPTION }, $$[$0]]); - break; - case 45: - this.$ = $$[$0 - 3].concat([{ type: "and", parText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.PAR_AND }, $$[$0]]); - break; - case 47: - this.$ = $$[$0 - 3].concat([{ type: "else", altText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.ALT_ELSE }, $$[$0]]); - break; - case 48: - $$[$0 - 3].draw = "participant"; - $$[$0 - 3].type = "addParticipant"; - $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); - this.$ = $$[$0 - 3]; - break; - case 49: - $$[$0 - 1].draw = "participant"; - $$[$0 - 1].type = "addParticipant"; - this.$ = $$[$0 - 1]; - break; - case 50: - $$[$0 - 3].draw = "actor"; - $$[$0 - 3].type = "addParticipant"; - $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); - this.$ = $$[$0 - 3]; - break; - case 51: - $$[$0 - 1].draw = "actor"; - $$[$0 - 1].type = "addParticipant"; - this.$ = $$[$0 - 1]; - break; - case 52: - $$[$0 - 1].type = "destroyParticipant"; - this.$ = $$[$0 - 1]; - break; - case 53: - this.$ = [$$[$0 - 1], { type: "addNote", placement: $$[$0 - 2], actor: $$[$0 - 1].actor, text: $$[$0] }]; - break; - case 54: - $$[$0 - 2] = [].concat($$[$0 - 1], $$[$0 - 1]).slice(0, 2); - $$[$0 - 2][0] = $$[$0 - 2][0].actor; - $$[$0 - 2][1] = $$[$0 - 2][1].actor; - this.$ = [$$[$0 - 1], { type: "addNote", placement: yy.PLACEMENT.OVER, actor: $$[$0 - 2].slice(0, 2), text: $$[$0] }]; - break; - case 55: - this.$ = [$$[$0 - 1], { type: "addLinks", actor: $$[$0 - 1].actor, text: $$[$0] }]; - break; - case 56: - this.$ = [$$[$0 - 1], { type: "addALink", actor: $$[$0 - 1].actor, text: $$[$0] }]; - break; - case 57: - this.$ = [$$[$0 - 1], { type: "addProperties", actor: $$[$0 - 1].actor, text: $$[$0] }]; - break; - case 58: - this.$ = [$$[$0 - 1], { type: "addDetails", actor: $$[$0 - 1].actor, text: $$[$0] }]; - break; - case 61: - this.$ = [$$[$0 - 2], $$[$0]]; - break; - case 62: - this.$ = $$[$0]; - break; - case 63: - this.$ = yy.PLACEMENT.LEFTOF; - break; - case 64: - this.$ = yy.PLACEMENT.RIGHTOF; - break; - case 65: - this.$ = [ - $$[$0 - 4], - $$[$0 - 1], - { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0], activate: true }, - { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] } - ]; - break; - case 66: - this.$ = [ - $$[$0 - 4], - $$[$0 - 1], - { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] }, - { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 4] } - ]; - break; - case 67: - this.$ = [$$[$0 - 3], $$[$0 - 1], { type: "addMessage", from: $$[$0 - 3].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 2], msg: $$[$0] }]; - break; - case 68: - this.$ = { type: "addParticipant", actor: $$[$0] }; - break; - case 69: - this.$ = yy.LINETYPE.SOLID_OPEN; - break; - case 70: - this.$ = yy.LINETYPE.DOTTED_OPEN; - break; - case 71: - this.$ = yy.LINETYPE.SOLID; - break; - case 72: - this.$ = yy.LINETYPE.DOTTED; - break; - case 73: - this.$ = yy.LINETYPE.SOLID_CROSS; - break; - case 74: - this.$ = yy.LINETYPE.DOTTED_CROSS; - break; - case 75: - this.$ = yy.LINETYPE.SOLID_POINT; - break; - case 76: - this.$ = yy.LINETYPE.DOTTED_POINT; - break; - case 77: - this.$ = yy.parseMessage($$[$0].trim().substring(1)); - break; - } - }, - table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o([1, 4, 5, 13, 14, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 50, 52, 53, 54, 59, 60, 61, 62, 70], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, o($Vx, [2, 5]), { 9: 47, 12: 12, 13: $V6, 14: $V7, 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, o($Vx, [2, 7]), o($Vx, [2, 8]), o($Vx, [2, 14]), { 12: 48, 50: $Vo, 52: $Vp, 53: $Vq }, { 15: [1, 49] }, { 5: [1, 50] }, { 5: [1, 53], 19: [1, 51], 20: [1, 52] }, { 22: 54, 70: $Vw }, { 22: 55, 70: $Vw }, { 5: [1, 56] }, { 5: [1, 57] }, { 5: [1, 58] }, { 5: [1, 59] }, { 5: [1, 60] }, o($Vx, [2, 29]), o($Vx, [2, 30]), { 32: [1, 61] }, { 34: [1, 62] }, o($Vx, [2, 33]), { 15: [1, 63] }, { 15: [1, 64] }, { 15: [1, 65] }, { 15: [1, 66] }, { 15: [1, 67] }, { 15: [1, 68] }, { 15: [1, 69] }, { 15: [1, 70] }, { 22: 71, 70: $Vw }, { 22: 72, 70: $Vw }, { 22: 73, 70: $Vw }, { 67: 74, 71: [1, 75], 72: [1, 76], 73: [1, 77], 74: [1, 78], 75: [1, 79], 76: [1, 80], 77: [1, 81], 78: [1, 82] }, { 55: 83, 57: [1, 84], 65: [1, 85], 66: [1, 86] }, { 22: 87, 70: $Vw }, { 22: 88, 70: $Vw }, { 22: 89, 70: $Vw }, { 22: 90, 70: $Vw }, o([5, 51, 64, 71, 72, 73, 74, 75, 76, 77, 78, 79], [2, 68]), o($Vx, [2, 6]), o($Vx, [2, 15]), o($Vy, [2, 9], { 10: 91 }), o($Vx, [2, 17]), { 5: [1, 93], 19: [1, 92] }, { 5: [1, 94] }, o($Vx, [2, 21]), { 5: [1, 95] }, { 5: [1, 96] }, o($Vx, [2, 24]), o($Vx, [2, 25]), o($Vx, [2, 26]), o($Vx, [2, 27]), o($Vx, [2, 28]), o($Vx, [2, 31]), o($Vx, [2, 32]), o($Vz, $V3, { 7: 97 }), o($Vz, $V3, { 7: 98 }), o($Vz, $V3, { 7: 99 }), o($VA, $V3, { 40: 100, 7: 101 }), o($VB, $V3, { 42: 102, 7: 103 }), o($VB, $V3, { 7: 103, 42: 104 }), o($VC, $V3, { 45: 105, 7: 106 }), o($Vz, $V3, { 7: 107 }), { 5: [1, 109], 51: [1, 108] }, { 5: [1, 111], 51: [1, 110] }, { 5: [1, 112] }, { 22: 115, 68: [1, 113], 69: [1, 114], 70: $Vw }, o($VD, [2, 69]), o($VD, [2, 70]), o($VD, [2, 71]), o($VD, [2, 72]), o($VD, [2, 73]), o($VD, [2, 74]), o($VD, [2, 75]), o($VD, [2, 76]), { 22: 116, 70: $Vw }, { 22: 118, 58: 117, 70: $Vw }, { 70: [2, 63] }, { 70: [2, 64] }, { 56: 119, 79: $VE }, { 56: 121, 79: $VE }, { 56: 122, 79: $VE }, { 56: 123, 79: $VE }, { 4: [1, 126], 5: [1, 128], 11: 125, 12: 127, 16: [1, 124], 50: $Vo, 52: $Vp, 53: $Vq }, { 5: [1, 129] }, o($Vx, [2, 19]), o($Vx, [2, 20]), o($Vx, [2, 22]), o($Vx, [2, 23]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 130], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 131], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 132], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 16: [1, 133] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 46], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 49: [1, 134], 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 16: [1, 135] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 44], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 48: [1, 136], 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 16: [1, 137] }, { 16: [1, 138] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 42], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 47: [1, 139], 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 140], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 15: [1, 141] }, o($Vx, [2, 49]), { 15: [1, 142] }, o($Vx, [2, 51]), o($Vx, [2, 52]), { 22: 143, 70: $Vw }, { 22: 144, 70: $Vw }, { 56: 145, 79: $VE }, { 56: 146, 79: $VE }, { 56: 147, 79: $VE }, { 64: [1, 148], 79: [2, 62] }, { 5: [2, 55] }, { 5: [2, 77] }, { 5: [2, 56] }, { 5: [2, 57] }, { 5: [2, 58] }, o($Vx, [2, 16]), o($Vy, [2, 10]), { 12: 149, 50: $Vo, 52: $Vp, 53: $Vq }, o($Vy, [2, 12]), o($Vy, [2, 13]), o($Vx, [2, 18]), o($Vx, [2, 34]), o($Vx, [2, 35]), o($Vx, [2, 36]), o($Vx, [2, 37]), { 15: [1, 150] }, o($Vx, [2, 38]), { 15: [1, 151] }, o($Vx, [2, 39]), o($Vx, [2, 40]), { 15: [1, 152] }, o($Vx, [2, 41]), { 5: [1, 153] }, { 5: [1, 154] }, { 56: 155, 79: $VE }, { 56: 156, 79: $VE }, { 5: [2, 67] }, { 5: [2, 53] }, { 5: [2, 54] }, { 22: 157, 70: $Vw }, o($Vy, [2, 11]), o($VA, $V3, { 7: 101, 40: 158 }), o($VB, $V3, { 7: 103, 42: 159 }), o($VC, $V3, { 7: 106, 45: 160 }), o($Vx, [2, 48]), o($Vx, [2, 50]), { 5: [2, 65] }, { 5: [2, 66] }, { 79: [2, 61] }, { 16: [2, 47] }, { 16: [2, 45] }, { 16: [2, 43] }], - defaultActions: { 5: [2, 1], 6: [2, 2], 85: [2, 63], 86: [2, 64], 119: [2, 55], 120: [2, 77], 121: [2, 56], 122: [2, 57], 123: [2, 58], 145: [2, 67], 146: [2, 53], 147: [2, 54], 155: [2, 65], 156: [2, 66], 157: [2, 61], 158: [2, 47], 159: [2, 45], 160: [2, 43] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state2, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state2 = stack[stack.length - 1]; - if (this.defaultActions[state2]) { - action = this.defaultActions[state2]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state2] && table[state2][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state2]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state2 + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - return 5; - case 1: - break; - case 2: - break; - case 3: - break; - case 4: - break; - case 5: - break; - case 6: - return 19; - case 7: - this.begin("LINE"); - return 14; - case 8: - this.begin("ID"); - return 50; - case 9: - this.begin("ID"); - return 52; - case 10: - return 13; - case 11: - this.begin("ID"); - return 53; - case 12: - yy_.yytext = yy_.yytext.trim(); - this.begin("ALIAS"); - return 70; - case 13: - this.popState(); - this.popState(); - this.begin("LINE"); - return 51; - case 14: - this.popState(); - this.popState(); - return 5; - case 15: - this.begin("LINE"); - return 36; - case 16: - this.begin("LINE"); - return 37; - case 17: - this.begin("LINE"); - return 38; - case 18: - this.begin("LINE"); - return 39; - case 19: - this.begin("LINE"); - return 49; - case 20: - this.begin("LINE"); - return 41; - case 21: - this.begin("LINE"); - return 43; - case 22: - this.begin("LINE"); - return 48; - case 23: - this.begin("LINE"); - return 44; - case 24: - this.begin("LINE"); - return 47; - case 25: - this.begin("LINE"); - return 46; - case 26: - this.popState(); - return 15; - case 27: - return 16; - case 28: - return 65; - case 29: - return 66; - case 30: - return 59; - case 31: - return 60; - case 32: - return 61; - case 33: - return 62; - case 34: - return 57; - case 35: - return 54; - case 36: - this.begin("ID"); - return 21; - case 37: - this.begin("ID"); - return 23; - case 38: - return 29; - case 39: - return 30; - case 40: - this.begin("acc_title"); - return 31; - case 41: - this.popState(); - return "acc_title_value"; - case 42: - this.begin("acc_descr"); - return 33; - case 43: - this.popState(); - return "acc_descr_value"; - case 44: - this.begin("acc_descr_multiline"); - break; - case 45: - this.popState(); - break; - case 46: - return "acc_descr_multiline_value"; - case 47: - return 6; - case 48: - return 18; - case 49: - return 20; - case 50: - return 64; - case 51: - return 5; - case 52: - yy_.yytext = yy_.yytext.trim(); - return 70; - case 53: - return 73; - case 54: - return 74; - case 55: - return 71; - case 56: - return 72; - case 57: - return 75; - case 58: - return 76; - case 59: - return 77; - case 60: - return 78; - case 61: - return 79; - case 62: - return 68; - case 63: - return 69; - case 64: - return 5; - case 65: - return "INVALID"; - } - }, - rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[0-9]+(?=[ \n]+))/i, /^(?:box\b)/i, /^(?:participant\b)/i, /^(?:actor\b)/i, /^(?:create\b)/i, /^(?:destroy\b)/i, /^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i, /^(?:as\b)/i, /^(?:(?:))/i, /^(?:loop\b)/i, /^(?:rect\b)/i, /^(?:opt\b)/i, /^(?:alt\b)/i, /^(?:else\b)/i, /^(?:par\b)/i, /^(?:par_over\b)/i, /^(?:and\b)/i, /^(?:critical\b)/i, /^(?:option\b)/i, /^(?:break\b)/i, /^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i, /^(?:end\b)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:links\b)/i, /^(?:link\b)/i, /^(?:properties\b)/i, /^(?:details\b)/i, /^(?:over\b)/i, /^(?:note\b)/i, /^(?:activate\b)/i, /^(?:deactivate\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:title:\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:sequenceDiagram\b)/i, /^(?:autonumber\b)/i, /^(?:off\b)/i, /^(?:,)/i, /^(?:;)/i, /^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i, /^(?:->>)/i, /^(?:-->>)/i, /^(?:->)/i, /^(?:-->)/i, /^(?:-[x])/i, /^(?:--[x])/i, /^(?:-[\)])/i, /^(?:--[\)])/i, /^(?::(?:(?:no)?wrap)?[^#\n;]+)/i, /^(?:\+)/i, /^(?:-)/i, /^(?:$)/i, /^(?:.)/i], - conditions: { "acc_descr_multiline": { "rules": [45, 46], "inclusive": false }, "acc_descr": { "rules": [43], "inclusive": false }, "acc_title": { "rules": [41], "inclusive": false }, "ID": { "rules": [2, 3, 12], "inclusive": false }, "ALIAS": { "rules": [2, 3, 13, 14], "inclusive": false }, "LINE": { "rules": [2, 3, 26], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -class ImperativeState { - /** - * @param init - Function that creates the default state. - */ - constructor(init) { - this.init = init; - this.records = this.init(); - } - reset() { - this.records = this.init(); - } -} -const state = new ImperativeState(() => ({ - prevActor: void 0, - actors: {}, - createdActors: {}, - destroyedActors: {}, - boxes: [], - messages: [], - notes: [], - sequenceNumbersEnabled: false, - wrapEnabled: void 0, - currentBox: void 0, - lastCreated: void 0, - lastDestroyed: void 0 -})); -const addBox = function(data) { - state.records.boxes.push({ - name: data.text, - wrap: data.wrap === void 0 && autoWrap() || !!data.wrap, - fill: data.color, - actorKeys: [] - }); - state.records.currentBox = state.records.boxes.slice(-1)[0]; -}; -const addActor = function(id, name, description, type) { - let assignedBox = state.records.currentBox; - const old = state.records.actors[id]; - if (old) { - if (state.records.currentBox && old.box && state.records.currentBox !== old.box) { - throw new Error( - "A same participant should only be defined in one Box: " + old.name + " can't be in '" + old.box.name + "' and in '" + state.records.currentBox.name + "' at the same time." - ); - } - assignedBox = old.box ? old.box : state.records.currentBox; - old.box = assignedBox; - if (old && name === old.name && description == null) { - return; - } - } - if (description == null || description.text == null) { - description = { text: name, wrap: null, type }; - } - if (type == null || description.text == null) { - description = { text: name, wrap: null, type }; - } - state.records.actors[id] = { - box: assignedBox, - name, - description: description.text, - wrap: description.wrap === void 0 && autoWrap() || !!description.wrap, - prevActor: state.records.prevActor, - links: {}, - properties: {}, - actorCnt: null, - rectData: null, - type: type || "participant" - }; - if (state.records.prevActor && state.records.actors[state.records.prevActor]) { - state.records.actors[state.records.prevActor].nextActor = id; - } - if (state.records.currentBox) { - state.records.currentBox.actorKeys.push(id); - } - state.records.prevActor = id; -}; -const activationCount = (part) => { - let i; - let count = 0; - for (i = 0; i < state.records.messages.length; i++) { - if (state.records.messages[i].type === LINETYPE.ACTIVE_START && state.records.messages[i].from.actor === part) { - count++; - } - if (state.records.messages[i].type === LINETYPE.ACTIVE_END && state.records.messages[i].from.actor === part) { - count--; - } - } - return count; -}; -const addMessage = function(idFrom, idTo, message, answer) { - state.records.messages.push({ - from: idFrom, - to: idTo, - message: message.text, - wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, - answer - }); -}; -const addSignal = function(idFrom, idTo, message = { text: void 0, wrap: void 0 }, messageType, activate = false) { - if (messageType === LINETYPE.ACTIVE_END) { - const cnt = activationCount(idFrom.actor); - if (cnt < 1) { - let error = new Error("Trying to inactivate an inactive participant (" + idFrom.actor + ")"); - error.hash = { - text: "->>-", - token: "->>-", - line: "1", - loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, - expected: ["'ACTIVE_PARTICIPANT'"] - }; - throw error; - } - } - state.records.messages.push({ - from: idFrom, - to: idTo, - message: message.text, - wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, - type: messageType, - activate - }); - return true; -}; -const hasAtLeastOneBox = function() { - return state.records.boxes.length > 0; -}; -const hasAtLeastOneBoxWithTitle = function() { - return state.records.boxes.some((b) => b.name); -}; -const getMessages = function() { - return state.records.messages; -}; -const getBoxes = function() { - return state.records.boxes; -}; -const getActors = function() { - return state.records.actors; -}; -const getCreatedActors = function() { - return state.records.createdActors; -}; -const getDestroyedActors = function() { - return state.records.destroyedActors; -}; -const getActor = function(id) { - return state.records.actors[id]; -}; -const getActorKeys = function() { - return Object.keys(state.records.actors); -}; -const enableSequenceNumbers = function() { - state.records.sequenceNumbersEnabled = true; -}; -const disableSequenceNumbers = function() { - state.records.sequenceNumbersEnabled = false; -}; -const showSequenceNumbers = () => state.records.sequenceNumbersEnabled; -const setWrap = function(wrapSetting) { - state.records.wrapEnabled = wrapSetting; -}; -const autoWrap = () => { - if (state.records.wrapEnabled !== void 0) { - return state.records.wrapEnabled; - } - return (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().sequence.wrap; -}; -const clear = function() { - state.reset(); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.v)(); -}; -const parseMessage = function(str) { - const _str = str.trim(); - const message = { - text: _str.replace(/^:?(?:no)?wrap:/, "").trim(), - wrap: _str.match(/^:?wrap:/) !== null ? true : _str.match(/^:?nowrap:/) !== null ? false : void 0 - }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("parseMessage:", message); - return message; -}; -const parseBoxData = function(str) { - const match = str.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/); - let color = match != null && match[1] ? match[1].trim() : "transparent"; - let title = match != null && match[2] ? match[2].trim() : void 0; - if (window && window.CSS) { - if (!window.CSS.supports("color", color)) { - color = "transparent"; - title = str.trim(); - } - } else { - const style = new Option().style; - style.color = color; - if (style.color !== color) { - color = "transparent"; - title = str.trim(); - } - } - return { - color, - text: title !== void 0 ? (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.d)(title.replace(/^:?(?:no)?wrap:/, ""), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()) : void 0, - wrap: title !== void 0 ? title.match(/^:?wrap:/) !== null ? true : title.match(/^:?nowrap:/) !== null ? false : void 0 : void 0 - }; -}; -const LINETYPE = { - SOLID: 0, - DOTTED: 1, - NOTE: 2, - SOLID_CROSS: 3, - DOTTED_CROSS: 4, - SOLID_OPEN: 5, - DOTTED_OPEN: 6, - LOOP_START: 10, - LOOP_END: 11, - ALT_START: 12, - ALT_ELSE: 13, - ALT_END: 14, - OPT_START: 15, - OPT_END: 16, - ACTIVE_START: 17, - ACTIVE_END: 18, - PAR_START: 19, - PAR_AND: 20, - PAR_END: 21, - RECT_START: 22, - RECT_END: 23, - SOLID_POINT: 24, - DOTTED_POINT: 25, - AUTONUMBER: 26, - CRITICAL_START: 27, - CRITICAL_OPTION: 28, - CRITICAL_END: 29, - BREAK_START: 30, - BREAK_END: 31, - PAR_OVER_START: 32 -}; -const ARROWTYPE = { - FILLED: 0, - OPEN: 1 -}; -const PLACEMENT = { - LEFTOF: 0, - RIGHTOF: 1, - OVER: 2 -}; -const addNote = function(actor, placement, message) { - const note = { - actor, - placement, - message: message.text, - wrap: message.wrap === void 0 && autoWrap() || !!message.wrap - }; - const actors = [].concat(actor, actor); - state.records.notes.push(note); - state.records.messages.push({ - from: actors[0], - to: actors[1], - message: message.text, - wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, - type: LINETYPE.NOTE, - placement - }); -}; -const addLinks = function(actorId, text) { - const actor = getActor(actorId); - try { - let sanitizedText = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - sanitizedText = sanitizedText.replace(/&/g, "&"); - sanitizedText = sanitizedText.replace(/=/g, "="); - const links = JSON.parse(sanitizedText); - insertLinks(actor, links); - } catch (e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor link text", e); - } -}; -const addALink = function(actorId, text) { - const actor = getActor(actorId); - try { - const links = {}; - let sanitizedText = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - var sep = sanitizedText.indexOf("@"); - sanitizedText = sanitizedText.replace(/&/g, "&"); - sanitizedText = sanitizedText.replace(/=/g, "="); - var label = sanitizedText.slice(0, sep - 1).trim(); - var link = sanitizedText.slice(sep + 1).trim(); - links[label] = link; - insertLinks(actor, links); - } catch (e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor link text", e); - } -}; -function insertLinks(actor, links) { - if (actor.links == null) { - actor.links = links; - } else { - for (let key in links) { - actor.links[key] = links[key]; - } - } -} -const addProperties = function(actorId, text) { - const actor = getActor(actorId); - try { - let sanitizedText = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - const properties = JSON.parse(sanitizedText); - insertProperties(actor, properties); - } catch (e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor properties text", e); - } -}; -function insertProperties(actor, properties) { - if (actor.properties == null) { - actor.properties = properties; - } else { - for (let key in properties) { - actor.properties[key] = properties[key]; - } - } -} -function boxEnd() { - state.records.currentBox = void 0; -} -const addDetails = function(actorId, text) { - const actor = getActor(actorId); - const elem = document.getElementById(text.text); - try { - const text2 = elem.innerHTML; - const details = JSON.parse(text2); - if (details["properties"]) { - insertProperties(actor, details["properties"]); - } - if (details["links"]) { - insertLinks(actor, details["links"]); - } - } catch (e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor details text", e); - } -}; -const getActorProperty = function(actor, key) { - if (actor !== void 0 && actor.properties !== void 0) { - return actor.properties[key]; - } - return void 0; -}; -const apply = function(param) { - if (Array.isArray(param)) { - param.forEach(function(item) { - apply(item); - }); - } else { - switch (param.type) { - case "sequenceIndex": - state.records.messages.push({ - from: void 0, - to: void 0, - message: { - start: param.sequenceIndex, - step: param.sequenceIndexStep, - visible: param.sequenceVisible - }, - wrap: false, - type: param.signalType - }); - break; - case "addParticipant": - addActor(param.actor, param.actor, param.description, param.draw); - break; - case "createParticipant": - if (state.records.actors[param.actor]) { - throw new Error( - "It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior" - ); - } - state.records.lastCreated = param.actor; - addActor(param.actor, param.actor, param.description, param.draw); - state.records.createdActors[param.actor] = state.records.messages.length; - break; - case "destroyParticipant": - state.records.lastDestroyed = param.actor; - state.records.destroyedActors[param.actor] = state.records.messages.length; - break; - case "activeStart": - addSignal(param.actor, void 0, void 0, param.signalType); - break; - case "activeEnd": - addSignal(param.actor, void 0, void 0, param.signalType); - break; - case "addNote": - addNote(param.actor, param.placement, param.text); - break; - case "addLinks": - addLinks(param.actor, param.text); - break; - case "addALink": - addALink(param.actor, param.text); - break; - case "addProperties": - addProperties(param.actor, param.text); - break; - case "addDetails": - addDetails(param.actor, param.text); - break; - case "addMessage": - if (state.records.lastCreated) { - if (param.to !== state.records.lastCreated) { - throw new Error( - "The created participant " + state.records.lastCreated + " does not have an associated creating message after its declaration. Please check the sequence diagram." - ); - } else { - state.records.lastCreated = void 0; - } - } else if (state.records.lastDestroyed) { - if (param.to !== state.records.lastDestroyed && param.from !== state.records.lastDestroyed) { - throw new Error( - "The destroyed participant " + state.records.lastDestroyed + " does not have an associated destroying message after its declaration. Please check the sequence diagram." - ); - } else { - state.records.lastDestroyed = void 0; - } - } - addSignal(param.from, param.to, param.msg, param.signalType, param.activate); - break; - case "boxStart": - addBox(param.boxData); - break; - case "boxEnd": - boxEnd(); - break; - case "loopStart": - addSignal(void 0, void 0, param.loopText, param.signalType); - break; - case "loopEnd": - addSignal(void 0, void 0, void 0, param.signalType); - break; - case "rectStart": - addSignal(void 0, void 0, param.color, param.signalType); - break; - case "rectEnd": - addSignal(void 0, void 0, void 0, param.signalType); - break; - case "optStart": - addSignal(void 0, void 0, param.optText, param.signalType); - break; - case "optEnd": - addSignal(void 0, void 0, void 0, param.signalType); - break; - case "altStart": - addSignal(void 0, void 0, param.altText, param.signalType); - break; - case "else": - addSignal(void 0, void 0, param.altText, param.signalType); - break; - case "altEnd": - addSignal(void 0, void 0, void 0, param.signalType); - break; - case "setAccTitle": - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.s)(param.text); - break; - case "parStart": - addSignal(void 0, void 0, param.parText, param.signalType); - break; - case "and": - addSignal(void 0, void 0, param.parText, param.signalType); - break; - case "parEnd": - addSignal(void 0, void 0, void 0, param.signalType); - break; - case "criticalStart": - addSignal(void 0, void 0, param.criticalText, param.signalType); - break; - case "option": - addSignal(void 0, void 0, param.optionText, param.signalType); - break; - case "criticalEnd": - addSignal(void 0, void 0, void 0, param.signalType); - break; - case "breakStart": - addSignal(void 0, void 0, param.breakText, param.signalType); - break; - case "breakEnd": - addSignal(void 0, void 0, void 0, param.signalType); - break; - } - } -}; -const db = { - addActor, - addMessage, - addSignal, - addLinks, - addDetails, - addProperties, - autoWrap, - setWrap, - enableSequenceNumbers, - disableSequenceNumbers, - showSequenceNumbers, - getMessages, - getActors, - getCreatedActors, - getDestroyedActors, - getActor, - getActorKeys, - getActorProperty, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.g, - getBoxes, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.t, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.q, - getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().sequence, - clear, - parseMessage, - parseBoxData, - LINETYPE, - ARROWTYPE, - PLACEMENT, - addNote, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.s, - apply, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.b, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.a, - hasAtLeastOneBox, - hasAtLeastOneBoxWithTitle -}; -const getStyles = (options) => `.actor { - stroke: ${options.actorBorder}; - fill: ${options.actorBkg}; - } - - text.actor > tspan { - fill: ${options.actorTextColor}; - stroke: none; - } - - .actor-line { - stroke: ${options.actorLineColor}; - } - - .messageLine0 { - stroke-width: 1.5; - stroke-dasharray: none; - stroke: ${options.signalColor}; - } - - .messageLine1 { - stroke-width: 1.5; - stroke-dasharray: 2, 2; - stroke: ${options.signalColor}; - } - - #arrowhead path { - fill: ${options.signalColor}; - stroke: ${options.signalColor}; - } - - .sequenceNumber { - fill: ${options.sequenceNumberColor}; - } - - #sequencenumber { - fill: ${options.signalColor}; - } - - #crosshead path { - fill: ${options.signalColor}; - stroke: ${options.signalColor}; - } - - .messageText { - fill: ${options.signalTextColor}; - stroke: none; - } - - .labelBox { - stroke: ${options.labelBoxBorderColor}; - fill: ${options.labelBoxBkgColor}; - } - - .labelText, .labelText > tspan { - fill: ${options.labelTextColor}; - stroke: none; - } - - .loopText, .loopText > tspan { - fill: ${options.loopTextColor}; - stroke: none; - } - - .loopLine { - stroke-width: 2px; - stroke-dasharray: 2, 2; - stroke: ${options.labelBoxBorderColor}; - fill: ${options.labelBoxBorderColor}; - } - - .note { - //stroke: #decc93; - stroke: ${options.noteBorderColor}; - fill: ${options.noteBkgColor}; - } - - .noteText, .noteText > tspan { - fill: ${options.noteTextColor}; - stroke: none; - } - - .activation0 { - fill: ${options.activationBkgColor}; - stroke: ${options.activationBorderColor}; - } - - .activation1 { - fill: ${options.activationBkgColor}; - stroke: ${options.activationBorderColor}; - } - - .activation2 { - fill: ${options.activationBkgColor}; - stroke: ${options.activationBorderColor}; - } - - .actorPopupMenu { - position: absolute; - } - - .actorPopupMenuPanel { - position: absolute; - fill: ${options.actorBkg}; - box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); - filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); -} - .actor-man line { - stroke: ${options.actorBorder}; - fill: ${options.actorBkg}; - } - .actor-man circle, line { - stroke: ${options.actorBorder}; - fill: ${options.actorBkg}; - stroke-width: 2px; - } -`; -const styles = getStyles; -const ACTOR_TYPE_WIDTH = 18 * 2; -const TOP_ACTOR_CLASS = "actor-top"; -const BOTTOM_ACTOR_CLASS = "actor-bottom"; -const drawRect = function(elem, rectData) { - return (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData); -}; -const drawPopup = function(elem, actor, minMenuWidth, textAttrs, forceMenus) { - if (actor.links === void 0 || actor.links === null || Object.keys(actor.links).length === 0) { - return { height: 0, width: 0 }; - } - const links = actor.links; - const actorCnt2 = actor.actorCnt; - const rectData = actor.rectData; - var displayValue = "none"; - if (forceMenus) { - displayValue = "block !important"; - } - const g = elem.append("g"); - g.attr("id", "actor" + actorCnt2 + "_popup"); - g.attr("class", "actorPopupMenu"); - g.attr("display", displayValue); - var actorClass = ""; - if (rectData.class !== void 0) { - actorClass = " " + rectData.class; - } - let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth; - const rectElem = g.append("rect"); - rectElem.attr("class", "actorPopupMenuPanel" + actorClass); - rectElem.attr("x", rectData.x); - rectElem.attr("y", rectData.height); - rectElem.attr("fill", rectData.fill); - rectElem.attr("stroke", rectData.stroke); - rectElem.attr("width", menuWidth); - rectElem.attr("height", rectData.height); - rectElem.attr("rx", rectData.rx); - rectElem.attr("ry", rectData.ry); - if (links != null) { - var linkY = 20; - for (let key in links) { - var linkElem = g.append("a"); - var sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Jf)(links[key]); - linkElem.attr("xlink:href", sanitizedLink); - linkElem.attr("target", "_blank"); - _drawMenuItemTextCandidateFunc(textAttrs)( - key, - linkElem, - rectData.x + 10, - rectData.height + linkY, - menuWidth, - 20, - { class: "actor" }, - textAttrs - ); - linkY += 30; - } - } - rectElem.attr("height", linkY); - return { height: rectData.height + linkY, width: menuWidth }; -}; -const popupMenuToggle = function(popId) { - return "var pu = document.getElementById('" + popId + "'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"; -}; -const drawKatex = async function(elem, textData, msgModel = null) { - let textElem = elem.append("foreignObject"); - const lines = await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.r)(textData.text, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.F)()); - const divElem = textElem.append("xhtml:div").attr("style", "width: fit-content;").attr("xmlns", "http://www.w3.org/1999/xhtml").html(lines); - const dim = divElem.node().getBoundingClientRect(); - textElem.attr("height", Math.round(dim.height)).attr("width", Math.round(dim.width)); - if (textData.class === "noteText") { - const rectElem = elem.node().firstChild; - rectElem.setAttribute("height", dim.height + 2 * textData.textMargin); - const rectDim = rectElem.getBBox(); - textElem.attr("x", Math.round(rectDim.x + rectDim.width / 2 - dim.width / 2)).attr("y", Math.round(rectDim.y + rectDim.height / 2 - dim.height / 2)); - } else if (msgModel) { - let { startx, stopx, starty } = msgModel; - if (startx > stopx) { - const temp = startx; - startx = stopx; - stopx = temp; - } - textElem.attr("x", Math.round(startx + Math.abs(startx - stopx) / 2 - dim.width / 2)); - if (textData.class === "loopText") { - textElem.attr("y", Math.round(starty)); - } else { - textElem.attr("y", Math.round(starty - dim.height)); - } - } - return [textElem]; -}; -const drawText = function(elem, textData) { - let prevTextHeight = 0; - let textHeight = 0; - const lines = textData.text.split(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); - const [_textFontSize, _textFontSizePx] = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.D)(textData.fontSize); - let textElems = []; - let dy = 0; - let yfunc = () => textData.y; - if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) { - switch (textData.valign) { - case "top": - case "start": - yfunc = () => Math.round(textData.y + textData.textMargin); - break; - case "middle": - case "center": - yfunc = () => Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2); - break; - case "bottom": - case "end": - yfunc = () => Math.round( - textData.y + (prevTextHeight + textHeight + 2 * textData.textMargin) - textData.textMargin - ); - break; - } - } - if (textData.anchor !== void 0 && textData.textMargin !== void 0 && textData.width !== void 0) { - switch (textData.anchor) { - case "left": - case "start": - textData.x = Math.round(textData.x + textData.textMargin); - textData.anchor = "start"; - textData.dominantBaseline = "middle"; - textData.alignmentBaseline = "middle"; - break; - case "middle": - case "center": - textData.x = Math.round(textData.x + textData.width / 2); - textData.anchor = "middle"; - textData.dominantBaseline = "middle"; - textData.alignmentBaseline = "middle"; - break; - case "right": - case "end": - textData.x = Math.round(textData.x + textData.width - textData.textMargin); - textData.anchor = "end"; - textData.dominantBaseline = "middle"; - textData.alignmentBaseline = "middle"; - break; - } - } - for (let [i, line] of lines.entries()) { - if (textData.textMargin !== void 0 && textData.textMargin === 0 && _textFontSize !== void 0) { - dy = i * _textFontSize; - } - const textElem = elem.append("text"); - textElem.attr("x", textData.x); - textElem.attr("y", yfunc()); - if (textData.anchor !== void 0) { - textElem.attr("text-anchor", textData.anchor).attr("dominant-baseline", textData.dominantBaseline).attr("alignment-baseline", textData.alignmentBaseline); - } - if (textData.fontFamily !== void 0) { - textElem.style("font-family", textData.fontFamily); - } - if (_textFontSizePx !== void 0) { - textElem.style("font-size", _textFontSizePx); - } - if (textData.fontWeight !== void 0) { - textElem.style("font-weight", textData.fontWeight); - } - if (textData.fill !== void 0) { - textElem.attr("fill", textData.fill); - } - if (textData.class !== void 0) { - textElem.attr("class", textData.class); - } - if (textData.dy !== void 0) { - textElem.attr("dy", textData.dy); - } else if (dy !== 0) { - textElem.attr("dy", dy); - } - const text = line || _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.Z; - if (textData.tspan) { - const span = textElem.append("tspan"); - span.attr("x", textData.x); - if (textData.fill !== void 0) { - span.attr("fill", textData.fill); - } - span.text(text); - } else { - textElem.text(text); - } - if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) { - textHeight += (textElem._groups || textElem)[0][0].getBBox().height; - prevTextHeight = textHeight; - } - textElems.push(textElem); - } - return textElems; -}; -const drawLabel = function(elem, txtObject) { - function genPoints(x, y, width, height, cut) { - return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); - } - const polygon = elem.append("polygon"); - polygon.attr("points", genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7)); - polygon.attr("class", "labelBox"); - txtObject.y = txtObject.y + txtObject.height / 2; - drawText(elem, txtObject); - return polygon; -}; -let actorCnt = -1; -const fixLifeLineHeights = (diagram2, actors, actorKeys, conf2) => { - if (!diagram2.select) { - return; - } - actorKeys.forEach((actorKey) => { - const actor = actors[actorKey]; - const actorDOM = diagram2.select("#actor" + actor.actorCnt); - if (!conf2.mirrorActors && actor.stopy) { - actorDOM.attr("y2", actor.stopy + actor.height / 2); - } else if (conf2.mirrorActors) { - actorDOM.attr("y2", actor.stopy); - } - }); -}; -const drawActorTypeParticipant = async function(elem, actor, conf2, isFooter) { - const actorY = isFooter ? actor.stopy : actor.starty; - const center = actor.x + actor.width / 2; - const centerY = actorY + 5; - const boxplusLineGroup = elem.append("g").lower(); - var g = boxplusLineGroup; - if (!isFooter) { - actorCnt++; - if (Object.keys(actor.links || {}).length && !conf2.forceMenus) { - g.attr("onclick", popupMenuToggle(`actor${actorCnt}_popup`)).attr("cursor", "pointer"); - } - g.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("class", "200").attr("stroke-width", "0.5px").attr("stroke", "#999"); - g = boxplusLineGroup.append("g"); - actor.actorCnt = actorCnt; - if (actor.links != null) { - g.attr("id", "root-" + actorCnt); - } - } - const rect = (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.g)(); - var cssclass = "actor"; - if (actor.properties != null && actor.properties["class"]) { - cssclass = actor.properties["class"]; - } else { - rect.fill = "#eaeaea"; - } - if (isFooter) { - cssclass += ` ${BOTTOM_ACTOR_CLASS}`; - } else { - cssclass += ` ${TOP_ACTOR_CLASS}`; - } - rect.x = actor.x; - rect.y = actorY; - rect.width = actor.width; - rect.height = actor.height; - rect.class = cssclass; - rect.rx = 3; - rect.ry = 3; - rect.name = actor.name; - const rectElem = drawRect(g, rect); - actor.rectData = rect; - if (actor.properties != null && actor.properties["icon"]) { - const iconSrc = actor.properties["icon"].trim(); - if (iconSrc.charAt(0) === "@") { - (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.b)(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1)); - } else { - (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.c)(g, rect.x + rect.width - 20, rect.y + 10, iconSrc); - } - } - await _drawTextCandidateFunc(conf2, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.G)(actor.description))( - actor.description, - g, - rect.x, - rect.y, - rect.width, - rect.height, - { class: "actor" }, - conf2 - ); - let height = actor.height; - if (rectElem.node) { - const bounds2 = rectElem.node().getBBox(); - actor.height = bounds2.height; - height = bounds2.height; - } - return height; -}; -const drawActorTypeActor = async function(elem, actor, conf2, isFooter) { - const actorY = isFooter ? actor.stopy : actor.starty; - const center = actor.x + actor.width / 2; - const centerY = actorY + 80; - elem.lower(); - if (!isFooter) { - actorCnt++; - elem.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("class", "200").attr("stroke-width", "0.5px").attr("stroke", "#999"); - actor.actorCnt = actorCnt; - } - const actElem = elem.append("g"); - let cssClass = "actor-man"; - if (isFooter) { - cssClass += ` ${BOTTOM_ACTOR_CLASS}`; - } else { - cssClass += ` ${TOP_ACTOR_CLASS}`; - } - actElem.attr("class", cssClass); - actElem.attr("name", actor.name); - const rect = (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.g)(); - rect.x = actor.x; - rect.y = actorY; - rect.fill = "#eaeaea"; - rect.width = actor.width; - rect.height = actor.height; - rect.class = "actor"; - rect.rx = 3; - rect.ry = 3; - actElem.append("line").attr("id", "actor-man-torso" + actorCnt).attr("x1", center).attr("y1", actorY + 25).attr("x2", center).attr("y2", actorY + 45); - actElem.append("line").attr("id", "actor-man-arms" + actorCnt).attr("x1", center - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 33).attr("x2", center + ACTOR_TYPE_WIDTH / 2).attr("y2", actorY + 33); - actElem.append("line").attr("x1", center - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 60).attr("x2", center).attr("y2", actorY + 45); - actElem.append("line").attr("x1", center).attr("y1", actorY + 45).attr("x2", center + ACTOR_TYPE_WIDTH / 2 - 2).attr("y2", actorY + 60); - const circle = actElem.append("circle"); - circle.attr("cx", actor.x + actor.width / 2); - circle.attr("cy", actorY + 10); - circle.attr("r", 15); - circle.attr("width", actor.width); - circle.attr("height", actor.height); - const bounds2 = actElem.node().getBBox(); - actor.height = bounds2.height; - await _drawTextCandidateFunc(conf2, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.G)(actor.description))( - actor.description, - actElem, - rect.x, - rect.y + 35, - rect.width, - rect.height, - { class: "actor" }, - conf2 - ); - return actor.height; -}; -const drawActor = async function(elem, actor, conf2, isFooter) { - switch (actor.type) { - case "actor": - return await drawActorTypeActor(elem, actor, conf2, isFooter); - case "participant": - return await drawActorTypeParticipant(elem, actor, conf2, isFooter); - } -}; -const drawBox = async function(elem, box, conf2) { - const boxplusTextGroup = elem.append("g"); - const g = boxplusTextGroup; - drawBackgroundRect(g, box); - if (box.name) { - await _drawTextCandidateFunc(conf2)( - box.name, - g, - box.x, - box.y + (box.textMaxHeight || 0) / 2, - box.width, - 0, - { class: "text" }, - conf2 - ); - } - g.lower(); -}; -const anchorElement = function(elem) { - return elem.append("g"); -}; -const drawActivation = function(elem, bounds2, verticalPos, conf2, actorActivations2) { - const rect = (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.g)(); - const g = bounds2.anchored; - rect.x = bounds2.startx; - rect.y = bounds2.starty; - rect.class = "activation" + actorActivations2 % 3; - rect.width = bounds2.stopx - bounds2.startx; - rect.height = verticalPos - bounds2.starty; - drawRect(g, rect); -}; -const drawLoop = async function(elem, loopModel, labelText, conf2) { - const { - boxMargin, - boxTextMargin, - labelBoxHeight, - labelBoxWidth, - messageFontFamily: fontFamily, - messageFontSize: fontSize, - messageFontWeight: fontWeight - } = conf2; - const g = elem.append("g"); - const drawLoopLine = function(startx, starty, stopx, stopy) { - return g.append("line").attr("x1", startx).attr("y1", starty).attr("x2", stopx).attr("y2", stopy).attr("class", "loopLine"); - }; - drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty); - drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy); - drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy); - drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy); - if (loopModel.sections !== void 0) { - loopModel.sections.forEach(function(item) { - drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style( - "stroke-dasharray", - "3, 3" - ); - }); - } - let txt = (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.e)(); - txt.text = labelText; - txt.x = loopModel.startx; - txt.y = loopModel.starty; - txt.fontFamily = fontFamily; - txt.fontSize = fontSize; - txt.fontWeight = fontWeight; - txt.anchor = "middle"; - txt.valign = "middle"; - txt.tspan = false; - txt.width = labelBoxWidth || 50; - txt.height = labelBoxHeight || 20; - txt.textMargin = boxTextMargin; - txt.class = "labelText"; - drawLabel(g, txt); - txt = getTextObj(); - txt.text = loopModel.title; - txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2; - txt.y = loopModel.starty + boxMargin + boxTextMargin; - txt.anchor = "middle"; - txt.valign = "middle"; - txt.textMargin = boxTextMargin; - txt.class = "loopText"; - txt.fontFamily = fontFamily; - txt.fontSize = fontSize; - txt.fontWeight = fontWeight; - txt.wrap = true; - let textElem = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.G)(txt.text) ? await drawKatex(g, txt, loopModel) : drawText(g, txt); - if (loopModel.sectionTitles !== void 0) { - for (const [idx, item] of Object.entries(loopModel.sectionTitles)) { - if (item.message) { - txt.text = item.message; - txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2; - txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin; - txt.class = "loopText"; - txt.anchor = "middle"; - txt.valign = "middle"; - txt.tspan = false; - txt.fontFamily = fontFamily; - txt.fontSize = fontSize; - txt.fontWeight = fontWeight; - txt.wrap = loopModel.wrap; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.G)(txt.text)) { - loopModel.starty = loopModel.sections[idx].y; - await drawKatex(g, txt, loopModel); - } else { - drawText(g, txt); - } - let sectionHeight = Math.round( - textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr) - ); - loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin); - } - } - } - loopModel.height = Math.round(loopModel.stopy - loopModel.starty); - return g; -}; -const drawBackgroundRect = function(elem, bounds2) { - (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.a)(elem, bounds2); -}; -const insertDatabaseIcon = function(elem) { - elem.append("defs").append("symbol").attr("id", "database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr( - "d", - "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z" - ); -}; -const insertComputerIcon = function(elem) { - elem.append("defs").append("symbol").attr("id", "computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( - "d", - "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z" - ); -}; -const insertClockIcon = function(elem) { - elem.append("defs").append("symbol").attr("id", "clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( - "d", - "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z" - ); -}; -const insertArrowHead = function(elem) { - elem.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 7.9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z"); -}; -const insertArrowFilledHead = function(elem) { - elem.append("defs").append("marker").attr("id", "filled-head").attr("refX", 15.5).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); -}; -const insertSequenceNumber = function(elem) { - elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6); -}; -const insertArrowCrossHead = function(elem) { - const defs = elem.append("defs"); - const marker = defs.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 4).attr("refY", 4.5); - marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1pt").attr("d", "M 1,2 L 6,7 M 6,2 L 1,7"); -}; -const getTextObj = function() { - return { - x: 0, - y: 0, - fill: void 0, - anchor: void 0, - style: "#666", - width: void 0, - height: void 0, - textMargin: 0, - rx: 0, - ry: 0, - tspan: true, - valign: void 0 - }; -}; -const getNoteRect = function() { - return { - x: 0, - y: 0, - fill: "#EDF2AE", - stroke: "#666", - width: 100, - anchor: "start", - height: 100, - rx: 0, - ry: 0 - }; -}; -const _drawTextCandidateFunc = function() { - function byText(content, g, x, y, width, height, textAttrs) { - const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("text-anchor", "middle").text(content); - _setTextAttrs(text, textAttrs); - } - function byTspan(content, g, x, y, width, height, textAttrs, conf2) { - const { actorFontSize, actorFontFamily, actorFontWeight } = conf2; - const [_actorFontSize, _actorFontSizePx] = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.D)(actorFontSize); - const lines = content.split(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); - for (let i = 0; i < lines.length; i++) { - const dy = i * _actorFontSize - _actorFontSize * (lines.length - 1) / 2; - const text = g.append("text").attr("x", x + width / 2).attr("y", y).style("text-anchor", "middle").style("font-size", _actorFontSizePx).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); - text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); - text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); - _setTextAttrs(text, textAttrs); - } - } - function byFo(content, g, x, y, width, height, textAttrs, conf2) { - const s = g.append("switch"); - const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); - const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); - text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); - byTspan(content, s, x, y, width, height, textAttrs, conf2); - _setTextAttrs(text, textAttrs); - } - async function byKatex(content, g, x, y, width, height, textAttrs, conf2) { - const dim = await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.H)(content, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.F)()); - const s = g.append("switch"); - const f = s.append("foreignObject").attr("x", x + width / 2 - dim.width / 2).attr("y", y + height / 2 - dim.height / 2).attr("width", dim.width).attr("height", dim.height); - const text = f.append("xhtml:div").style("height", "100%").style("width", "100%"); - text.append("div").style("text-align", "center").style("vertical-align", "middle").html(await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.r)(content, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.F)())); - byTspan(content, s, x, y, width, height, textAttrs, conf2); - _setTextAttrs(text, textAttrs); - } - function _setTextAttrs(toText, fromTextAttrsDict) { - for (const key in fromTextAttrsDict) { - if (fromTextAttrsDict.hasOwnProperty(key)) { - toText.attr(key, fromTextAttrsDict[key]); - } - } - } - return function(conf2, hasKatex2 = false) { - if (hasKatex2) { - return byKatex; - } - return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; - }; -}(); -const _drawMenuItemTextCandidateFunc = function() { - function byText(content, g, x, y, width, height, textAttrs) { - const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").text(content); - _setTextAttrs(text, textAttrs); - } - function byTspan(content, g, x, y, width, height, textAttrs, conf2) { - const { actorFontSize, actorFontFamily, actorFontWeight } = conf2; - const lines = content.split(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); - for (let i = 0; i < lines.length; i++) { - const dy = i * actorFontSize - actorFontSize * (lines.length - 1) / 2; - const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").style("font-size", actorFontSize).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); - text.append("tspan").attr("x", x).attr("dy", dy).text(lines[i]); - text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); - _setTextAttrs(text, textAttrs); - } - } - function byFo(content, g, x, y, width, height, textAttrs, conf2) { - const s = g.append("switch"); - const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); - const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); - text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); - byTspan(content, s, x, y, width, height, textAttrs, conf2); - _setTextAttrs(text, textAttrs); - } - function _setTextAttrs(toText, fromTextAttrsDict) { - for (const key in fromTextAttrsDict) { - if (fromTextAttrsDict.hasOwnProperty(key)) { - toText.attr(key, fromTextAttrsDict[key]); - } - } - } - return function(conf2) { - return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; - }; -}(); -const svgDraw = { - drawRect, - drawText, - drawLabel, - drawActor, - drawBox, - drawPopup, - anchorElement, - drawActivation, - drawLoop, - drawBackgroundRect, - insertArrowHead, - insertArrowFilledHead, - insertSequenceNumber, - insertArrowCrossHead, - insertDatabaseIcon, - insertComputerIcon, - insertClockIcon, - getTextObj, - getNoteRect, - fixLifeLineHeights, - sanitizeUrl: _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Jf -}; -let conf = {}; -const bounds = { - data: { - startx: void 0, - stopx: void 0, - starty: void 0, - stopy: void 0 - }, - verticalPos: 0, - sequenceItems: [], - activations: [], - models: { - getHeight: function() { - return Math.max.apply( - null, - this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0) - ) + (this.loops.length === 0 ? 0 : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.messages.length === 0 ? 0 : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.notes.length === 0 ? 0 : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h)); - }, - clear: function() { - this.actors = []; - this.boxes = []; - this.loops = []; - this.messages = []; - this.notes = []; - }, - addBox: function(boxModel) { - this.boxes.push(boxModel); - }, - addActor: function(actorModel) { - this.actors.push(actorModel); - }, - addLoop: function(loopModel) { - this.loops.push(loopModel); - }, - addMessage: function(msgModel) { - this.messages.push(msgModel); - }, - addNote: function(noteModel) { - this.notes.push(noteModel); - }, - lastActor: function() { - return this.actors[this.actors.length - 1]; - }, - lastLoop: function() { - return this.loops[this.loops.length - 1]; - }, - lastMessage: function() { - return this.messages[this.messages.length - 1]; - }, - lastNote: function() { - return this.notes[this.notes.length - 1]; - }, - actors: [], - boxes: [], - loops: [], - messages: [], - notes: [] - }, - init: function() { - this.sequenceItems = []; - this.activations = []; - this.models.clear(); - this.data = { - startx: void 0, - stopx: void 0, - starty: void 0, - stopy: void 0 - }; - this.verticalPos = 0; - setConf((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - }, - updateVal: function(obj, key, val, fun) { - if (obj[key] === void 0) { - obj[key] = val; - } else { - obj[key] = fun(val, obj[key]); - } - }, - updateBounds: function(startx, starty, stopx, stopy) { - const _self = this; - let cnt = 0; - function updateFn(type) { - return function updateItemBounds(item) { - cnt++; - const n = _self.sequenceItems.length - cnt + 1; - _self.updateVal(item, "starty", starty - n * conf.boxMargin, Math.min); - _self.updateVal(item, "stopy", stopy + n * conf.boxMargin, Math.max); - _self.updateVal(bounds.data, "startx", startx - n * conf.boxMargin, Math.min); - _self.updateVal(bounds.data, "stopx", stopx + n * conf.boxMargin, Math.max); - if (!(type === "activation")) { - _self.updateVal(item, "startx", startx - n * conf.boxMargin, Math.min); - _self.updateVal(item, "stopx", stopx + n * conf.boxMargin, Math.max); - _self.updateVal(bounds.data, "starty", starty - n * conf.boxMargin, Math.min); - _self.updateVal(bounds.data, "stopy", stopy + n * conf.boxMargin, Math.max); - } - }; - } - this.sequenceItems.forEach(updateFn()); - this.activations.forEach(updateFn("activation")); - }, - insert: function(startx, starty, stopx, stopy) { - const _startx = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(startx, stopx); - const _stopx = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(startx, stopx); - const _starty = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(starty, stopy); - const _stopy = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(starty, stopy); - this.updateVal(bounds.data, "startx", _startx, Math.min); - this.updateVal(bounds.data, "starty", _starty, Math.min); - this.updateVal(bounds.data, "stopx", _stopx, Math.max); - this.updateVal(bounds.data, "stopy", _stopy, Math.max); - this.updateBounds(_startx, _starty, _stopx, _stopy); - }, - newActivation: function(message, diagram2, actors) { - const actorRect = actors[message.from.actor]; - const stackedSize = actorActivations(message.from.actor).length || 0; - const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2; - this.activations.push({ - startx: x, - starty: this.verticalPos + 2, - stopx: x + conf.activationWidth, - stopy: void 0, - actor: message.from.actor, - anchored: svgDraw.anchorElement(diagram2) - }); - }, - endActivation: function(message) { - const lastActorActivationIdx = this.activations.map(function(activation) { - return activation.actor; - }).lastIndexOf(message.from.actor); - return this.activations.splice(lastActorActivationIdx, 1)[0]; - }, - createLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) { - return { - startx: void 0, - starty: this.verticalPos, - stopx: void 0, - stopy: void 0, - title: title.message, - wrap: title.wrap, - width: title.width, - height: 0, - fill - }; - }, - newLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) { - this.sequenceItems.push(this.createLoop(title, fill)); - }, - endLoop: function() { - return this.sequenceItems.pop(); - }, - isLoopOverlap: function() { - return this.sequenceItems.length ? this.sequenceItems[this.sequenceItems.length - 1].overlap : false; - }, - addSectionToLoop: function(message) { - const loop = this.sequenceItems.pop(); - loop.sections = loop.sections || []; - loop.sectionTitles = loop.sectionTitles || []; - loop.sections.push({ y: bounds.getVerticalPos(), height: 0 }); - loop.sectionTitles.push(message); - this.sequenceItems.push(loop); - }, - saveVerticalPos: function() { - if (this.isLoopOverlap()) { - this.savedVerticalPos = this.verticalPos; - } - }, - resetVerticalPos: function() { - if (this.isLoopOverlap()) { - this.verticalPos = this.savedVerticalPos; - } - }, - bumpVerticalPos: function(bump) { - this.verticalPos = this.verticalPos + bump; - this.data.stopy = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(this.data.stopy, this.verticalPos); - }, - getVerticalPos: function() { - return this.verticalPos; - }, - getBounds: function() { - return { bounds: this.data, models: this.models }; - } -}; -const drawNote = async function(elem, noteModel) { - bounds.bumpVerticalPos(conf.boxMargin); - noteModel.height = conf.boxMargin; - noteModel.starty = bounds.getVerticalPos(); - const rect = (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.g)(); - rect.x = noteModel.startx; - rect.y = noteModel.starty; - rect.width = noteModel.width || conf.width; - rect.class = "note"; - const g = elem.append("g"); - const rectElem = svgDraw.drawRect(g, rect); - const textObj = (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.e)(); - textObj.x = noteModel.startx; - textObj.y = noteModel.starty; - textObj.width = rect.width; - textObj.dy = "1em"; - textObj.text = noteModel.message; - textObj.class = "noteText"; - textObj.fontFamily = conf.noteFontFamily; - textObj.fontSize = conf.noteFontSize; - textObj.fontWeight = conf.noteFontWeight; - textObj.anchor = conf.noteAlign; - textObj.textMargin = conf.noteMargin; - textObj.valign = "center"; - const textElem = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.G)(textObj.text) ? await drawKatex(g, textObj) : drawText(g, textObj); - const textHeight = Math.round( - textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr) - ); - rectElem.attr("height", textHeight + 2 * conf.noteMargin); - noteModel.height += textHeight + 2 * conf.noteMargin; - bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin); - noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin; - noteModel.stopx = noteModel.startx + rect.width; - bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy); - bounds.models.addNote(noteModel); -}; -const messageFont = (cnf) => { - return { - fontFamily: cnf.messageFontFamily, - fontSize: cnf.messageFontSize, - fontWeight: cnf.messageFontWeight - }; -}; -const noteFont = (cnf) => { - return { - fontFamily: cnf.noteFontFamily, - fontSize: cnf.noteFontSize, - fontWeight: cnf.noteFontWeight - }; -}; -const actorFont = (cnf) => { - return { - fontFamily: cnf.actorFontFamily, - fontSize: cnf.actorFontSize, - fontWeight: cnf.actorFontWeight - }; -}; -async function boundMessage(_diagram, msgModel) { - bounds.bumpVerticalPos(10); - const { startx, stopx, message } = msgModel; - const lines = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.splitBreaks(message).length; - const isKatexMsg = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.G)(message); - const textDims = isKatexMsg ? await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.H)(message, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()) : _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(message, messageFont(conf)); - if (!isKatexMsg) { - const lineHeight = textDims.height / lines; - msgModel.height += lineHeight; - bounds.bumpVerticalPos(lineHeight); - } - let lineStartY; - let totalOffset = textDims.height - 10; - const textWidth = textDims.width; - if (startx === stopx) { - lineStartY = bounds.getVerticalPos() + totalOffset; - if (!conf.rightAngles) { - totalOffset += conf.boxMargin; - lineStartY = bounds.getVerticalPos() + totalOffset; - } - totalOffset += 30; - const dx = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(textWidth / 2, conf.width / 2); - bounds.insert( - startx - dx, - bounds.getVerticalPos() - 10 + totalOffset, - stopx + dx, - bounds.getVerticalPos() + 30 + totalOffset - ); - } else { - totalOffset += conf.boxMargin; - lineStartY = bounds.getVerticalPos() + totalOffset; - bounds.insert(startx, lineStartY - 10, stopx, lineStartY); - } - bounds.bumpVerticalPos(totalOffset); - msgModel.height += totalOffset; - msgModel.stopy = msgModel.starty + msgModel.height; - bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy); - return lineStartY; -} -const drawMessage = async function(diagram2, msgModel, lineStartY, diagObj) { - const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel; - const textDims = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(message, messageFont(conf)); - const textObj = (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.e)(); - textObj.x = startx; - textObj.y = starty + 10; - textObj.width = stopx - startx; - textObj.class = "messageText"; - textObj.dy = "1em"; - textObj.text = message; - textObj.fontFamily = conf.messageFontFamily; - textObj.fontSize = conf.messageFontSize; - textObj.fontWeight = conf.messageFontWeight; - textObj.anchor = conf.messageAlign; - textObj.valign = "center"; - textObj.textMargin = conf.wrapPadding; - textObj.tspan = false; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.G)(textObj.text) ? await drawKatex(diagram2, textObj, { startx, stopx, starty: lineStartY }) : drawText(diagram2, textObj); - const textWidth = textDims.width; - let line; - if (startx === stopx) { - if (conf.rightAngles) { - line = diagram2.append("path").attr( - "d", - `M ${startx},${lineStartY} H ${startx + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width / 2, textWidth / 2)} V ${lineStartY + 25} H ${startx}` - ); - } else { - line = diagram2.append("path").attr( - "d", - "M " + startx + "," + lineStartY + " C " + (startx + 60) + "," + (lineStartY - 10) + " " + (startx + 60) + "," + (lineStartY + 30) + " " + startx + "," + (lineStartY + 20) - ); - } - } else { - line = diagram2.append("line"); - line.attr("x1", startx); - line.attr("y1", lineStartY); - line.attr("x2", stopx); - line.attr("y2", lineStartY); - } - if (type === diagObj.db.LINETYPE.DOTTED || type === diagObj.db.LINETYPE.DOTTED_CROSS || type === diagObj.db.LINETYPE.DOTTED_POINT || type === diagObj.db.LINETYPE.DOTTED_OPEN) { - line.style("stroke-dasharray", "3, 3"); - line.attr("class", "messageLine1"); - } else { - line.attr("class", "messageLine0"); - } - let url = ""; - if (conf.arrowMarkerAbsolute) { - url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; - url = url.replace(/\(/g, "\\("); - url = url.replace(/\)/g, "\\)"); - } - line.attr("stroke-width", 2); - line.attr("stroke", "none"); - line.style("fill", "none"); - if (type === diagObj.db.LINETYPE.SOLID || type === diagObj.db.LINETYPE.DOTTED) { - line.attr("marker-end", "url(" + url + "#arrowhead)"); - } - if (type === diagObj.db.LINETYPE.SOLID_POINT || type === diagObj.db.LINETYPE.DOTTED_POINT) { - line.attr("marker-end", "url(" + url + "#filled-head)"); - } - if (type === diagObj.db.LINETYPE.SOLID_CROSS || type === diagObj.db.LINETYPE.DOTTED_CROSS) { - line.attr("marker-end", "url(" + url + "#crosshead)"); - } - if (sequenceVisible || conf.showSequenceNumbers) { - line.attr("marker-start", "url(" + url + "#sequencenumber)"); - diagram2.append("text").attr("x", startx).attr("y", lineStartY + 4).attr("font-family", "sans-serif").attr("font-size", "12px").attr("text-anchor", "middle").attr("class", "sequenceNumber").text(sequenceIndex); - } -}; -const addActorRenderingData = async function(diagram2, actors, createdActors, actorKeys, verticalPos, messages, isFooter) { - let prevWidth = 0; - let prevMargin = 0; - let prevBox = void 0; - let maxHeight = 0; - for (const actorKey of actorKeys) { - const actor = actors[actorKey]; - const box = actor.box; - if (prevBox && prevBox != box) { - if (!isFooter) { - bounds.models.addBox(prevBox); - } - prevMargin += conf.boxMargin + prevBox.margin; - } - if (box && box != prevBox) { - if (!isFooter) { - box.x = prevWidth + prevMargin; - box.y = verticalPos; - } - prevMargin += box.margin; - } - actor.width = actor.width || conf.width; - actor.height = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actor.height || conf.height, conf.height); - actor.margin = actor.margin || conf.actorMargin; - maxHeight = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, actor.height); - if (createdActors[actor.name]) { - prevMargin += actor.width / 2; - } - actor.x = prevWidth + prevMargin; - actor.starty = bounds.getVerticalPos(); - bounds.insert(actor.x, verticalPos, actor.x + actor.width, actor.height); - prevWidth += actor.width + prevMargin; - if (actor.box) { - actor.box.width = prevWidth + box.margin - actor.box.x; - } - prevMargin = actor.margin; - prevBox = actor.box; - bounds.models.addActor(actor); - } - if (prevBox && !isFooter) { - bounds.models.addBox(prevBox); - } - bounds.bumpVerticalPos(maxHeight); -}; -const drawActors = async function(diagram2, actors, actorKeys, isFooter) { - if (!isFooter) { - for (const actorKey of actorKeys) { - const actor = actors[actorKey]; - await svgDraw.drawActor(diagram2, actor, conf, false); - } - } else { - let maxHeight = 0; - bounds.bumpVerticalPos(conf.boxMargin * 2); - for (const actorKey of actorKeys) { - const actor = actors[actorKey]; - if (!actor.stopy) { - actor.stopy = bounds.getVerticalPos(); - } - const height = await svgDraw.drawActor(diagram2, actor, conf, true); - maxHeight = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, height); - } - bounds.bumpVerticalPos(maxHeight + conf.boxMargin); - } -}; -const drawActorsPopup = function(diagram2, actors, actorKeys, doc) { - let maxHeight = 0; - let maxWidth = 0; - for (const actorKey of actorKeys) { - const actor = actors[actorKey]; - const minMenuWidth = getRequiredPopupWidth(actor); - const menuDimensions = svgDraw.drawPopup( - diagram2, - actor, - minMenuWidth, - conf, - conf.forceMenus, - doc - ); - if (menuDimensions.height > maxHeight) { - maxHeight = menuDimensions.height; - } - if (menuDimensions.width + actor.x > maxWidth) { - maxWidth = menuDimensions.width + actor.x; - } - } - return { maxHeight, maxWidth }; -}; -const setConf = function(cnf) { - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.f)(conf, cnf); - if (cnf.fontFamily) { - conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily; - } - if (cnf.fontSize) { - conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize; - } - if (cnf.fontWeight) { - conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight; - } -}; -const actorActivations = function(actor) { - return bounds.activations.filter(function(activation) { - return activation.actor === actor; - }); -}; -const activationBounds = function(actor, actors) { - const actorObj = actors[actor]; - const activations = actorActivations(actor); - const left = activations.reduce(function(acc, activation) { - return _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(acc, activation.startx); - }, actorObj.x + actorObj.width / 2 - 1); - const right = activations.reduce(function(acc, activation) { - return _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(acc, activation.stopx); - }, actorObj.x + actorObj.width / 2 + 1); - return [left, right]; -}; -function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) { - bounds.bumpVerticalPos(preMargin); - let heightAdjust = postMargin; - if (msg.id && msg.message && loopWidths[msg.id]) { - const loopWidth = loopWidths[msg.id].width; - const textConf = messageFont(conf); - msg.message = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf); - msg.width = loopWidth; - msg.wrap = true; - const textDims = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(msg.message, textConf); - const totalOffset = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(textDims.height, conf.labelBoxHeight); - heightAdjust = postMargin + totalOffset; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`${totalOffset} - ${msg.message}`); - } - addLoopFn(msg); - bounds.bumpVerticalPos(heightAdjust); -} -function adjustCreatedDestroyedData(msg, msgModel, lineStartY, index, actors, createdActors, destroyedActors) { - function receiverAdjustment(actor, adjustment) { - if (actor.x < actors[msg.from].x) { - bounds.insert( - msgModel.stopx - adjustment, - msgModel.starty, - msgModel.startx, - msgModel.stopy + actor.height / 2 + conf.noteMargin - ); - msgModel.stopx = msgModel.stopx + adjustment; - } else { - bounds.insert( - msgModel.startx, - msgModel.starty, - msgModel.stopx + adjustment, - msgModel.stopy + actor.height / 2 + conf.noteMargin - ); - msgModel.stopx = msgModel.stopx - adjustment; - } - } - function senderAdjustment(actor, adjustment) { - if (actor.x < actors[msg.to].x) { - bounds.insert( - msgModel.startx - adjustment, - msgModel.starty, - msgModel.stopx, - msgModel.stopy + actor.height / 2 + conf.noteMargin - ); - msgModel.startx = msgModel.startx + adjustment; - } else { - bounds.insert( - msgModel.stopx, - msgModel.starty, - msgModel.startx + adjustment, - msgModel.stopy + actor.height / 2 + conf.noteMargin - ); - msgModel.startx = msgModel.startx - adjustment; - } - } - if (createdActors[msg.to] == index) { - const actor = actors[msg.to]; - const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3; - receiverAdjustment(actor, adjustment); - actor.starty = lineStartY - actor.height / 2; - bounds.bumpVerticalPos(actor.height / 2); - } else if (destroyedActors[msg.from] == index) { - const actor = actors[msg.from]; - if (conf.mirrorActors) { - const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 : actor.width / 2; - senderAdjustment(actor, adjustment); - } - actor.stopy = lineStartY - actor.height / 2; - bounds.bumpVerticalPos(actor.height / 2); - } else if (destroyedActors[msg.to] == index) { - const actor = actors[msg.to]; - if (conf.mirrorActors) { - const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3; - receiverAdjustment(actor, adjustment); - } - actor.stopy = lineStartY - actor.height / 2; - bounds.bumpVerticalPos(actor.height / 2); - } -} -const draw = async function(_text, id, _version, diagObj) { - const { securityLevel, sequence } = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - conf = sequence; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); - const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; - bounds.init(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(diagObj.db); - const diagram2 = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(`[id="${id}"]`); - const actors = diagObj.db.getActors(); - const createdActors = diagObj.db.getCreatedActors(); - const destroyedActors = diagObj.db.getDestroyedActors(); - const boxes = diagObj.db.getBoxes(); - let actorKeys = diagObj.db.getActorKeys(); - const messages = diagObj.db.getMessages(); - const title = diagObj.db.getDiagramTitle(); - const hasBoxes = diagObj.db.hasAtLeastOneBox(); - const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle(); - const maxMessageWidthPerActor = await getMaxMessageWidthPerActor(actors, messages, diagObj); - conf.height = await calculateActorMargins(actors, maxMessageWidthPerActor, boxes); - svgDraw.insertComputerIcon(diagram2); - svgDraw.insertDatabaseIcon(diagram2); - svgDraw.insertClockIcon(diagram2); - if (hasBoxes) { - bounds.bumpVerticalPos(conf.boxMargin); - if (hasBoxTitles) { - bounds.bumpVerticalPos(boxes[0].textMaxHeight); - } - } - if (conf.hideUnusedParticipants === true) { - const newActors = /* @__PURE__ */ new Set(); - messages.forEach((message) => { - newActors.add(message.from); - newActors.add(message.to); - }); - actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey)); - } - await addActorRenderingData(diagram2, actors, createdActors, actorKeys, 0, messages, false); - const loopWidths = await calculateLoopBounds(messages, actors, maxMessageWidthPerActor, diagObj); - svgDraw.insertArrowHead(diagram2); - svgDraw.insertArrowCrossHead(diagram2); - svgDraw.insertArrowFilledHead(diagram2); - svgDraw.insertSequenceNumber(diagram2); - function activeEnd(msg, verticalPos) { - const activationData = bounds.endActivation(msg); - if (activationData.starty + 18 > verticalPos) { - activationData.starty = verticalPos - 6; - verticalPos += 12; - } - svgDraw.drawActivation( - diagram2, - activationData, - verticalPos, - conf, - actorActivations(msg.from.actor).length - ); - bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos); - } - let sequenceIndex = 1; - let sequenceIndexStep = 1; - const messagesToDraw = []; - const backgrounds = []; - let index = 0; - for (const msg of messages) { - let loopModel, noteModel, msgModel; - switch (msg.type) { - case diagObj.db.LINETYPE.NOTE: - bounds.resetVerticalPos(); - noteModel = msg.noteModel; - await drawNote(diagram2, noteModel); - break; - case diagObj.db.LINETYPE.ACTIVE_START: - bounds.newActivation(msg, diagram2, actors); - break; - case diagObj.db.LINETYPE.ACTIVE_END: - activeEnd(msg, bounds.getVerticalPos()); - break; - case diagObj.db.LINETYPE.LOOP_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin + conf.boxTextMargin, - (message) => bounds.newLoop(message) - ); - break; - case diagObj.db.LINETYPE.LOOP_END: - loopModel = bounds.endLoop(); - await svgDraw.drawLoop(diagram2, loopModel, "loop", conf); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - bounds.models.addLoop(loopModel); - break; - case diagObj.db.LINETYPE.RECT_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin, - (message) => bounds.newLoop(void 0, message.message) - ); - break; - case diagObj.db.LINETYPE.RECT_END: - loopModel = bounds.endLoop(); - backgrounds.push(loopModel); - bounds.models.addLoop(loopModel); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - break; - case diagObj.db.LINETYPE.OPT_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin + conf.boxTextMargin, - (message) => bounds.newLoop(message) - ); - break; - case diagObj.db.LINETYPE.OPT_END: - loopModel = bounds.endLoop(); - await svgDraw.drawLoop(diagram2, loopModel, "opt", conf); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - bounds.models.addLoop(loopModel); - break; - case diagObj.db.LINETYPE.ALT_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin + conf.boxTextMargin, - (message) => bounds.newLoop(message) - ); - break; - case diagObj.db.LINETYPE.ALT_ELSE: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin + conf.boxTextMargin, - conf.boxMargin, - (message) => bounds.addSectionToLoop(message) - ); - break; - case diagObj.db.LINETYPE.ALT_END: - loopModel = bounds.endLoop(); - await svgDraw.drawLoop(diagram2, loopModel, "alt", conf); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - bounds.models.addLoop(loopModel); - break; - case diagObj.db.LINETYPE.PAR_START: - case diagObj.db.LINETYPE.PAR_OVER_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin + conf.boxTextMargin, - (message) => bounds.newLoop(message) - ); - bounds.saveVerticalPos(); - break; - case diagObj.db.LINETYPE.PAR_AND: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin + conf.boxTextMargin, - conf.boxMargin, - (message) => bounds.addSectionToLoop(message) - ); - break; - case diagObj.db.LINETYPE.PAR_END: - loopModel = bounds.endLoop(); - await svgDraw.drawLoop(diagram2, loopModel, "par", conf); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - bounds.models.addLoop(loopModel); - break; - case diagObj.db.LINETYPE.AUTONUMBER: - sequenceIndex = msg.message.start || sequenceIndex; - sequenceIndexStep = msg.message.step || sequenceIndexStep; - if (msg.message.visible) { - diagObj.db.enableSequenceNumbers(); - } else { - diagObj.db.disableSequenceNumbers(); - } - break; - case diagObj.db.LINETYPE.CRITICAL_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin + conf.boxTextMargin, - (message) => bounds.newLoop(message) - ); - break; - case diagObj.db.LINETYPE.CRITICAL_OPTION: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin + conf.boxTextMargin, - conf.boxMargin, - (message) => bounds.addSectionToLoop(message) - ); - break; - case diagObj.db.LINETYPE.CRITICAL_END: - loopModel = bounds.endLoop(); - await svgDraw.drawLoop(diagram2, loopModel, "critical", conf); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - bounds.models.addLoop(loopModel); - break; - case diagObj.db.LINETYPE.BREAK_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin + conf.boxTextMargin, - (message) => bounds.newLoop(message) - ); - break; - case diagObj.db.LINETYPE.BREAK_END: - loopModel = bounds.endLoop(); - await svgDraw.drawLoop(diagram2, loopModel, "break", conf); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - bounds.models.addLoop(loopModel); - break; - default: - try { - msgModel = msg.msgModel; - msgModel.starty = bounds.getVerticalPos(); - msgModel.sequenceIndex = sequenceIndex; - msgModel.sequenceVisible = diagObj.db.showSequenceNumbers(); - const lineStartY = await boundMessage(diagram2, msgModel); - adjustCreatedDestroyedData( - msg, - msgModel, - lineStartY, - index, - actors, - createdActors, - destroyedActors - ); - messagesToDraw.push({ messageModel: msgModel, lineStartY }); - bounds.models.addMessage(msgModel); - } catch (e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while drawing message", e); - } - } - if ([ - diagObj.db.LINETYPE.SOLID_OPEN, - diagObj.db.LINETYPE.DOTTED_OPEN, - diagObj.db.LINETYPE.SOLID, - diagObj.db.LINETYPE.DOTTED, - diagObj.db.LINETYPE.SOLID_CROSS, - diagObj.db.LINETYPE.DOTTED_CROSS, - diagObj.db.LINETYPE.SOLID_POINT, - diagObj.db.LINETYPE.DOTTED_POINT - ].includes(msg.type)) { - sequenceIndex = sequenceIndex + sequenceIndexStep; - } - index++; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("createdActors", createdActors); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("destroyedActors", destroyedActors); - await drawActors(diagram2, actors, actorKeys, false); - for (const e of messagesToDraw) { - await drawMessage(diagram2, e.messageModel, e.lineStartY, diagObj); - } - if (conf.mirrorActors) { - await drawActors(diagram2, actors, actorKeys, true); - } - backgrounds.forEach((e) => svgDraw.drawBackgroundRect(diagram2, e)); - fixLifeLineHeights(diagram2, actors, actorKeys, conf); - for (const box2 of bounds.models.boxes) { - box2.height = bounds.getVerticalPos() - box2.y; - bounds.insert(box2.x, box2.y, box2.x + box2.width, box2.height); - box2.startx = box2.x; - box2.starty = box2.y; - box2.stopx = box2.startx + box2.width; - box2.stopy = box2.starty + box2.height; - box2.stroke = "rgb(0,0,0, 0.5)"; - await svgDraw.drawBox(diagram2, box2, conf); - } - if (hasBoxes) { - bounds.bumpVerticalPos(conf.boxMargin); - } - const requiredBoxSize = drawActorsPopup(diagram2, actors, actorKeys, doc); - const { bounds: box } = bounds.getBounds(); - let boxHeight = box.stopy - box.starty; - if (boxHeight < requiredBoxSize.maxHeight) { - boxHeight = requiredBoxSize.maxHeight; - } - let height = boxHeight + 2 * conf.diagramMarginY; - if (conf.mirrorActors) { - height = height - conf.boxMargin + conf.bottomMarginAdj; - } - let boxWidth = box.stopx - box.startx; - if (boxWidth < requiredBoxSize.maxWidth) { - boxWidth = requiredBoxSize.maxWidth; - } - const width = boxWidth + 2 * conf.diagramMarginX; - if (title) { - diagram2.append("text").text(title).attr("x", (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX).attr("y", -25); - } - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf.useMaxWidth); - const extraVertForTitle = title ? 40 : 0; - diagram2.attr( - "viewBox", - box.startx - conf.diagramMarginX + " -" + (conf.diagramMarginY + extraVertForTitle) + " " + width + " " + (height + extraVertForTitle) - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`models:`, bounds.models); -}; -async function getMaxMessageWidthPerActor(actors, messages, diagObj) { - const maxMessageWidthPerActor = {}; - for (const msg of messages) { - if (actors[msg.to] && actors[msg.from]) { - const actor = actors[msg.to]; - if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) { - continue; - } - if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) { - continue; - } - const isNote = msg.placement !== void 0; - const isMessage = !isNote; - const textFont = isNote ? noteFont(conf) : messageFont(conf); - const wrappedMessage = msg.wrap ? _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont) : msg.message; - const messageDimensions = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.G)(wrappedMessage) ? await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.H)(msg.message, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()) : _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(wrappedMessage, textFont); - const messageWidth = messageDimensions.width + 2 * conf.wrapPadding; - if (isMessage && msg.from === actor.nextActor) { - maxMessageWidthPerActor[msg.to] = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - maxMessageWidthPerActor[msg.to] || 0, - messageWidth - ); - } else if (isMessage && msg.from === actor.prevActor) { - maxMessageWidthPerActor[msg.from] = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - maxMessageWidthPerActor[msg.from] || 0, - messageWidth - ); - } else if (isMessage && msg.from === msg.to) { - maxMessageWidthPerActor[msg.from] = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - maxMessageWidthPerActor[msg.from] || 0, - messageWidth / 2 - ); - maxMessageWidthPerActor[msg.to] = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - maxMessageWidthPerActor[msg.to] || 0, - messageWidth / 2 - ); - } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { - maxMessageWidthPerActor[msg.from] = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - maxMessageWidthPerActor[msg.from] || 0, - messageWidth - ); - } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { - maxMessageWidthPerActor[actor.prevActor] = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - maxMessageWidthPerActor[actor.prevActor] || 0, - messageWidth - ); - } else if (msg.placement === diagObj.db.PLACEMENT.OVER) { - if (actor.prevActor) { - maxMessageWidthPerActor[actor.prevActor] = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - maxMessageWidthPerActor[actor.prevActor] || 0, - messageWidth / 2 - ); - } - if (actor.nextActor) { - maxMessageWidthPerActor[msg.from] = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - maxMessageWidthPerActor[msg.from] || 0, - messageWidth / 2 - ); - } - } - } - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxMessageWidthPerActor:", maxMessageWidthPerActor); - return maxMessageWidthPerActor; -} -const getRequiredPopupWidth = function(actor) { - let requiredPopupWidth = 0; - const textFont = actorFont(conf); - for (const key in actor.links) { - const labelDimensions = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(key, textFont); - const labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin; - if (requiredPopupWidth < labelWidth) { - requiredPopupWidth = labelWidth; - } - } - return requiredPopupWidth; -}; -async function calculateActorMargins(actors, actorToMessageWidth, boxes) { - let maxHeight = 0; - for (const prop of Object.keys(actors)) { - const actor = actors[prop]; - if (actor.wrap) { - actor.description = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( - actor.description, - conf.width - 2 * conf.wrapPadding, - actorFont(conf) - ); - } - const actDims = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.G)(actor.description) ? await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.H)(actor.description, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()) : _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(actor.description, actorFont(conf)); - actor.width = actor.wrap ? conf.width : _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actDims.width + 2 * conf.wrapPadding); - actor.height = actor.wrap ? _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actDims.height, conf.height) : conf.height; - maxHeight = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, actor.height); - } - for (const actorKey in actorToMessageWidth) { - const actor = actors[actorKey]; - if (!actor) { - continue; - } - const nextActor = actors[actor.nextActor]; - if (!nextActor) { - const messageWidth2 = actorToMessageWidth[actorKey]; - const actorWidth2 = messageWidth2 + conf.actorMargin - actor.width / 2; - actor.margin = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actorWidth2, conf.actorMargin); - continue; - } - const messageWidth = actorToMessageWidth[actorKey]; - const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2; - actor.margin = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actorWidth, conf.actorMargin); - } - let maxBoxHeight = 0; - boxes.forEach((box) => { - const textFont = messageFont(conf); - let totalWidth = box.actorKeys.reduce((total, aKey) => { - return total += actors[aKey].width + (actors[aKey].margin || 0); - }, 0); - totalWidth -= 2 * conf.boxTextMargin; - if (box.wrap) { - box.name = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(box.name, totalWidth - 2 * conf.wrapPadding, textFont); - } - const boxMsgDimensions = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(box.name, textFont); - maxBoxHeight = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(boxMsgDimensions.height, maxBoxHeight); - const minWidth = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(totalWidth, boxMsgDimensions.width + 2 * conf.wrapPadding); - box.margin = conf.boxTextMargin; - if (totalWidth < minWidth) { - const missing = (minWidth - totalWidth) / 2; - box.margin += missing; - } - }); - boxes.forEach((box) => box.textMaxHeight = maxBoxHeight); - return _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, conf.height); -} -const buildNoteModel = async function(msg, actors, diagObj) { - const startx = actors[msg.from].x; - const stopx = actors[msg.to].x; - const shouldWrap = msg.wrap && msg.message; - let textDimensions = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.G)(msg.message) ? await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.H)(msg.message, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()) : _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions( - shouldWrap ? _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message, - noteFont(conf) - ); - const noteModel = { - width: shouldWrap ? conf.width : _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin), - height: 0, - startx: actors[msg.from].x, - stopx: 0, - starty: 0, - stopy: 0, - message: msg.message - }; - if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { - noteModel.width = shouldWrap ? _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width) : _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - actors[msg.from].width / 2 + actors[msg.to].width / 2, - textDimensions.width + 2 * conf.noteMargin - ); - noteModel.startx = startx + (actors[msg.from].width + conf.actorMargin) / 2; - } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { - noteModel.width = shouldWrap ? _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin) : _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - actors[msg.from].width / 2 + actors[msg.to].width / 2, - textDimensions.width + 2 * conf.noteMargin - ); - noteModel.startx = startx - noteModel.width + (actors[msg.from].width - conf.actorMargin) / 2; - } else if (msg.to === msg.from) { - textDimensions = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions( - shouldWrap ? _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( - msg.message, - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actors[msg.from].width), - noteFont(conf) - ) : msg.message, - noteFont(conf) - ); - noteModel.width = shouldWrap ? _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actors[msg.from].width) : _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - actors[msg.from].width, - conf.width, - textDimensions.width + 2 * conf.noteMargin - ); - noteModel.startx = startx + (actors[msg.from].width - noteModel.width) / 2; - } else { - noteModel.width = Math.abs(startx + actors[msg.from].width / 2 - (stopx + actors[msg.to].width / 2)) + conf.actorMargin; - noteModel.startx = startx < stopx ? startx + actors[msg.from].width / 2 - conf.actorMargin / 2 : stopx + actors[msg.to].width / 2 - conf.actorMargin / 2; - } - if (shouldWrap) { - noteModel.message = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( - msg.message, - noteModel.width - 2 * conf.wrapPadding, - noteFont(conf) - ); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( - `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]` - ); - return noteModel; -}; -const buildMessageModel = function(msg, actors, diagObj) { - if (![ - diagObj.db.LINETYPE.SOLID_OPEN, - diagObj.db.LINETYPE.DOTTED_OPEN, - diagObj.db.LINETYPE.SOLID, - diagObj.db.LINETYPE.DOTTED, - diagObj.db.LINETYPE.SOLID_CROSS, - diagObj.db.LINETYPE.DOTTED_CROSS, - diagObj.db.LINETYPE.SOLID_POINT, - diagObj.db.LINETYPE.DOTTED_POINT - ].includes(msg.type)) { - return {}; - } - const [fromLeft, fromRight] = activationBounds(msg.from, actors); - const [toLeft, toRight] = activationBounds(msg.to, actors); - const isArrowToRight = fromLeft <= toLeft; - const startx = isArrowToRight ? fromRight : fromLeft; - let stopx = isArrowToRight ? toLeft : toRight; - const isArrowToActivation = Math.abs(toLeft - toRight) > 2; - const adjustValue = (value) => { - return isArrowToRight ? -value : value; - }; - if (msg.from === msg.to) { - stopx = startx; - } else { - if (msg.activate && !isArrowToActivation) { - stopx += adjustValue(conf.activationWidth / 2 - 1); - } - if (![diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN].includes(msg.type)) { - stopx += adjustValue(3); - } - } - const allBounds = [fromLeft, fromRight, toLeft, toRight]; - const boundedWidth = Math.abs(startx - stopx); - if (msg.wrap && msg.message) { - msg.message = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( - msg.message, - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(boundedWidth + 2 * conf.wrapPadding, conf.width), - messageFont(conf) - ); - } - const msgDims = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(msg.message, messageFont(conf)); - return { - width: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding, - boundedWidth + 2 * conf.wrapPadding, - conf.width - ), - height: 0, - startx, - stopx, - starty: 0, - stopy: 0, - message: msg.message, - type: msg.type, - wrap: msg.wrap, - fromBounds: Math.min.apply(null, allBounds), - toBounds: Math.max.apply(null, allBounds) - }; -}; -const calculateLoopBounds = async function(messages, actors, _maxWidthPerActor, diagObj) { - const loops = {}; - const stack = []; - let current, noteModel, msgModel; - for (const msg of messages) { - msg.id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.random({ length: 10 }); - switch (msg.type) { - case diagObj.db.LINETYPE.LOOP_START: - case diagObj.db.LINETYPE.ALT_START: - case diagObj.db.LINETYPE.OPT_START: - case diagObj.db.LINETYPE.PAR_START: - case diagObj.db.LINETYPE.PAR_OVER_START: - case diagObj.db.LINETYPE.CRITICAL_START: - case diagObj.db.LINETYPE.BREAK_START: - stack.push({ - id: msg.id, - msg: msg.message, - from: Number.MAX_SAFE_INTEGER, - to: Number.MIN_SAFE_INTEGER, - width: 0 - }); - break; - case diagObj.db.LINETYPE.ALT_ELSE: - case diagObj.db.LINETYPE.PAR_AND: - case diagObj.db.LINETYPE.CRITICAL_OPTION: - if (msg.message) { - current = stack.pop(); - loops[current.id] = current; - loops[msg.id] = current; - stack.push(current); - } - break; - case diagObj.db.LINETYPE.LOOP_END: - case diagObj.db.LINETYPE.ALT_END: - case diagObj.db.LINETYPE.OPT_END: - case diagObj.db.LINETYPE.PAR_END: - case diagObj.db.LINETYPE.CRITICAL_END: - case diagObj.db.LINETYPE.BREAK_END: - current = stack.pop(); - loops[current.id] = current; - break; - case diagObj.db.LINETYPE.ACTIVE_START: - { - const actorRect = actors[msg.from ? msg.from.actor : msg.to.actor]; - const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length; - const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2; - const toAdd = { - startx: x, - stopx: x + conf.activationWidth, - actor: msg.from.actor, - enabled: true - }; - bounds.activations.push(toAdd); - } - break; - case diagObj.db.LINETYPE.ACTIVE_END: - { - const lastActorActivationIdx = bounds.activations.map((a) => a.actor).lastIndexOf(msg.from.actor); - delete bounds.activations.splice(lastActorActivationIdx, 1)[0]; - } - break; - } - const isNote = msg.placement !== void 0; - if (isNote) { - noteModel = await buildNoteModel(msg, actors, diagObj); - msg.noteModel = noteModel; - stack.forEach((stk) => { - current = stk; - current.from = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(current.from, noteModel.startx); - current.to = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.to, noteModel.startx + noteModel.width); - current.width = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, Math.abs(current.from - current.to)) - conf.labelBoxWidth; - }); - } else { - msgModel = buildMessageModel(msg, actors, diagObj); - msg.msgModel = msgModel; - if (msgModel.startx && msgModel.stopx && stack.length > 0) { - stack.forEach((stk) => { - current = stk; - if (msgModel.startx === msgModel.stopx) { - const from = actors[msg.from]; - const to = actors[msg.to]; - current.from = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin( - from.x - msgModel.width / 2, - from.x - from.width / 2, - current.from - ); - current.to = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( - to.x + msgModel.width / 2, - to.x + from.width / 2, - current.to - ); - current.width = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, Math.abs(current.to - current.from)) - conf.labelBoxWidth; - } else { - current.from = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(msgModel.startx, current.from); - current.to = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(msgModel.stopx, current.to); - current.width = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, msgModel.width) - conf.labelBoxWidth; - } - }); - } - } - } - bounds.activations = []; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Loop type widths:", loops); - return loops; -}; -const renderer = { - bounds, - drawActors, - drawActorsPopup, - setConf, - draw -}; -const diagram = { - parser: parser$1, - db, - renderer, - styles, - init: ({ wrap }) => { - db.setWrap(wrap); - } -}; - - - -/***/ }), - -/***/ 28259: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ a: () => (/* binding */ drawBackgroundRect), -/* harmony export */ b: () => (/* binding */ drawEmbeddedImage), -/* harmony export */ c: () => (/* binding */ drawImage), -/* harmony export */ d: () => (/* binding */ drawRect), -/* harmony export */ e: () => (/* binding */ getTextObj), -/* harmony export */ f: () => (/* binding */ drawText), -/* harmony export */ g: () => (/* binding */ getNoteRect) -/* harmony export */ }); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16750); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); - - -const drawRect = (element, rectData) => { - const rectElement = element.append("rect"); - rectElement.attr("x", rectData.x); - rectElement.attr("y", rectData.y); - rectElement.attr("fill", rectData.fill); - rectElement.attr("stroke", rectData.stroke); - rectElement.attr("width", rectData.width); - rectElement.attr("height", rectData.height); - if (rectData.name) { - rectElement.attr("name", rectData.name); - } - rectData.rx !== void 0 && rectElement.attr("rx", rectData.rx); - rectData.ry !== void 0 && rectElement.attr("ry", rectData.ry); - if (rectData.attrs !== void 0) { - for (const attrKey in rectData.attrs) { - rectElement.attr(attrKey, rectData.attrs[attrKey]); - } - } - rectData.class !== void 0 && rectElement.attr("class", rectData.class); - return rectElement; -}; -const drawBackgroundRect = (element, bounds) => { - const rectData = { - x: bounds.startx, - y: bounds.starty, - width: bounds.stopx - bounds.startx, - height: bounds.stopy - bounds.starty, - fill: bounds.fill, - stroke: bounds.stroke, - class: "rect" - }; - const rectElement = drawRect(element, rectData); - rectElement.lower(); -}; -const drawText = (element, textData) => { - const nText = textData.text.replace(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.J, " "); - const textElem = element.append("text"); - textElem.attr("x", textData.x); - textElem.attr("y", textData.y); - textElem.attr("class", "legend"); - textElem.style("text-anchor", textData.anchor); - textData.class !== void 0 && textElem.attr("class", textData.class); - const tspan = textElem.append("tspan"); - tspan.attr("x", textData.x + textData.textMargin * 2); - tspan.text(nText); - return textElem; -}; -const drawImage = (elem, x, y, link) => { - const imageElement = elem.append("image"); - imageElement.attr("x", x); - imageElement.attr("y", y); - const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Jf)(link); - imageElement.attr("xlink:href", sanitizedLink); -}; -const drawEmbeddedImage = (element, x, y, link) => { - const imageElement = element.append("use"); - imageElement.attr("x", x); - imageElement.attr("y", y); - const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Jf)(link); - imageElement.attr("xlink:href", `#${sanitizedLink}`); -}; -const getNoteRect = () => { - const noteRectData = { - x: 0, - y: 0, - width: 100, - height: 100, - fill: "#EDF2AE", - stroke: "#666", - anchor: "start", - rx: 0, - ry: 0 - }; - return noteRectData; -}; -const getTextObj = () => { - const testObject = { - x: 0, - y: 0, - width: 100, - height: 100, - "text-anchor": "start", - style: "#666", - textMargin: 0, - rx: 0, - ry: 0, - tspan: true - }; - return testObject; -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/68a929a9.0d90be75.js b/pr-preview/pr-1594/assets/js/68a929a9.0d90be75.js deleted file mode 100644 index 361dfbdca3..0000000000 --- a/pr-preview/pr-1594/assets/js/68a929a9.0d90be75.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7438],{25324:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var r=t(74848),i=t(28453);const a={},s="Dekaf integrations",o={id:"reference/Connectors/dekaf/README",title:"Dekaf integrations",description:"Dekaf is Estuary Flow's Kafka-API compatibility layer.",source:"@site/docs/reference/Connectors/dekaf/README.md",sourceDirName:"reference/Connectors/dekaf",slug:"/reference/Connectors/dekaf/",permalink:"/pr-preview/pr-1594/reference/Connectors/dekaf/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/dekaf/README.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Zendesk Support",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support"},next:{title:"Tinybird",permalink:"/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird"}},c={},l=[{value:"Available Dekaf integrations",id:"available-dekaf-integrations",level:2}];function f(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"dekaf-integrations",children:"Dekaf integrations"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka",children:"Dekaf"})," is Estuary Flow's Kafka-API compatibility layer.\nIt allows services to read data from Estuary Flow's collections as if they were topics in a Kafka cluster. This\nfunctionality enables integrations with the Kafka ecosystem."]}),"\n",(0,r.jsx)(n.h2,{id:"available-dekaf-integrations",children:"Available Dekaf integrations"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/reference/Connectors/dekaf/dekaf-tinybird",children:"Tinybird"})}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>o});var r=t(96540);const i={},a=r.createContext(i);function s(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/68cc1c24.1d1d9631.js b/pr-preview/pr-1594/assets/js/68cc1c24.1d1d9631.js deleted file mode 100644 index b26f2986af..0000000000 --- a/pr-preview/pr-1594/assets/js/68cc1c24.1d1d9631.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3349],{91733:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var i=n(74848),r=n(28453);const s={},o="Google BigQuery",a={id:"reference/Connectors/materialization-connectors/BigQuery",title:"Google BigQuery",description:"This Flow connector materializes Flow collections into tables within a Google BigQuery dataset.",source:"@site/docs/reference/Connectors/materialization-connectors/BigQuery.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/BigQuery",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/BigQuery.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Apache Parquet Files in Amazon S3",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet"},next:{title:"Databricks",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks"}},l={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Sync Schedule",id:"sync-schedule",level:2},{value:"Delta updates",id:"delta-updates",level:2},{value:"Table Partitioning",id:"table-partitioning",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"google-bigquery",children:"Google BigQuery"}),"\n",(0,i.jsxs)(t.p,{children:["This Flow connector materializes Flow collections into tables within a Google BigQuery dataset.\nIt allows both standard and ",(0,i.jsx)(t.a,{href:"#delta-updates",children:"delta updates"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"The connector uses your Google Cloud service account to materialize to BigQuery tables by way of files in a Google Cloud Storage (GCS) bucket.\nThe tables in the bucket act as a temporary staging area for data storage and retrieval."}),"\n",(0,i.jsxs)(t.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,i.jsx)(t.a,{href:"https://github.com/estuary/connectors/pkgs/container/materialize-bigquery",children:(0,i.jsx)(t.code,{children:"ghcr.io/estuary/materialize-bigquery:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(t.p,{children:"To use this connector, you'll need:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["A ",(0,i.jsx)(t.a,{href:"https://cloud.google.com/storage/docs/creating-buckets",children:"new Google Cloud Storage bucket"})," in the same region as the BigQuery destination dataset."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["A Google Cloud ",(0,i.jsx)(t.a,{href:"https://cloud.google.com/docs/authentication/getting-started",children:"service account"})," with a key file generated and the following roles:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://cloud.google.com/bigquery/docs/access-control#bigquery.dataEditor",children:(0,i.jsx)(t.code,{children:"roles/bigquery.dataEditor"})})," on the destination dataset"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://cloud.google.com/bigquery/docs/access-control#bigquery.jobUser",children:(0,i.jsx)(t.code,{children:"roles/bigquery.jobUser"})})," on the\nproject with which the BigQuery destination dataset is associated"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://cloud.google.com/storage/docs/access-control/iam-roles#standard-roles",children:(0,i.jsx)(t.code,{children:"roles/storage.objectAdmin"})}),"\non the GCS bucket created above"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["See ",(0,i.jsx)(t.a,{href:"#setup",children:"Setup"})," for detailed steps to set up your service account."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsxs)(t.p,{children:["If you haven't yet captured your data from its external source, start at the beginning of the ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"guide to create a dataflow"}),". You'll be referred back to this connector-specific documentation at the appropriate steps."]})}),"\n",(0,i.jsx)(t.h3,{id:"setup",children:"Setup"}),"\n",(0,i.jsx)(t.p,{children:"To configure your service account, complete the following steps."}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Log into the Google Cloud console and ",(0,i.jsx)(t.a,{href:"https://cloud.google.com/docs/authentication/getting-started#creating_a_service_account",children:"create a service account"}),".\nDuring account creation:"]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Grant the user access to the project."}),"\n",(0,i.jsxs)(t.li,{children:["Grant the user roles ",(0,i.jsx)(t.code,{children:"roles/bigquery.dataEditor"}),", ",(0,i.jsx)(t.code,{children:"roles/bigquery.jobUser"}),", and ",(0,i.jsx)(t.code,{children:"roles/storage.objectAdmin"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["Click ",(0,i.jsx)(t.strong,{children:"Done"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Select the new service account from the list of service accounts. On the Keys tab, click ",(0,i.jsx)(t.strong,{children:"Add key"})," and create a new JSON key."]}),"\n",(0,i.jsx)(t.p,{children:"The key is automatically downloaded. You'll use it to configure the connector."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsx)(t.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a BigQuery materialization, which will direct one or more of your Flow collections to your desired tables within a BigQuery dataset."}),"\n",(0,i.jsxs)(t.p,{children:["A BigQuery dataset is the top-level container within a project, and comprises multiple tables.\nYou can think of a dataset as somewhat analogous to a schema in a relational database.\nFor a complete introduction to resource organization in Bigquery, see the ",(0,i.jsx)(t.a,{href:"https://cloud.google.com/bigquery/docs/resource-hierarchy",children:"BigQuery docs"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,i.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Property"}),(0,i.jsx)(t.th,{children:"Title"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Required/Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/project_id"})})}),(0,i.jsx)(t.td,{children:"Project ID"}),(0,i.jsx)(t.td,{children:"The project ID for the Google Cloud Storage bucket and BigQuery dataset."}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/credentials_json"})})}),(0,i.jsx)(t.td,{children:"Service Account JSON"}),(0,i.jsx)(t.td,{children:"The JSON credentials of the service account to use for authorization."}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/region"})})}),(0,i.jsx)(t.td,{children:"Region"}),(0,i.jsx)(t.td,{children:"The GCS region."}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/dataset"})})}),(0,i.jsx)(t.td,{children:"Dataset"}),(0,i.jsx)(t.td,{children:"BigQuery dataset for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables."}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/bucket"})})}),(0,i.jsx)(t.td,{children:"Bucket"}),(0,i.jsx)(t.td,{children:"Name of the GCS bucket."}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/bucket_path"})}),(0,i.jsx)(t.td,{children:"Bucket path"}),(0,i.jsx)(t.td,{children:'Base path within the GCS bucket. Also called "Folder" in the GCS console.'}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/billing_project_id"})}),(0,i.jsx)(t.td,{children:"Billing project ID"}),(0,i.jsxs)(t.td,{children:["The project ID to which these operations are billed in BigQuery. Typically, you want this to be the same as ",(0,i.jsx)(t.code,{children:"project_id"})," (the default)."]}),(0,i.jsx)(t.td,{children:"String"}),(0,i.jsxs)(t.td,{children:["Same as ",(0,i.jsx)(t.code,{children:"project_id"})]})]})]})]}),"\n",(0,i.jsxs)(t.p,{children:["To learn more about project billing, ",(0,i.jsx)(t.a,{href:"https://cloud.google.com/billing/docs/how-to/verify-billing-enabled",children:"see the BigQuery docs"}),"."]}),"\n",(0,i.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Property"}),(0,i.jsx)(t.th,{children:"Title"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Required/Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/table"})})}),(0,i.jsx)(t.td,{children:"Table"}),(0,i.jsx)(t.td,{children:"Table in the BigQuery dataset to store materialized result in."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/dataset"})}),(0,i.jsx)(t.td,{children:"Table"}),(0,i.jsx)(t.td,{children:"Alternative dataset for this table. Must be located in the region set in the endpoint configuration."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/delta_updates"})}),(0,i.jsx)(t.td,{children:"Delta updates."}),(0,i.jsxs)(t.td,{children:["Whether to use standard or ",(0,i.jsx)(t.a,{href:"#delta-updates",children:"delta updates"})]}),(0,i.jsx)(t.td,{children:"boolean"}),(0,i.jsx)(t.td,{children:"false"})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n config:\n project_id: our-bigquery-project\n dataset: materialized-data\n region: US\n bucket: our-gcs-bucket\n bucket_path: bucket-path/\n credentials_json: <secret>\n image: ghcr.io/estuary/materialize-bigquery:dev\n bindings:\n \t- resource:\n \ttable: ${table_name}\n source: ${PREFIX}/${source_collection}\n"})}),"\n",(0,i.jsx)(t.h2,{id:"sync-schedule",children:"Sync Schedule"}),"\n",(0,i.jsxs)(t.p,{children:["This connector supports configuring a schedule for sync frequency. You can read\nabout how to configure this ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/materialization-sync-schedule",children:"here"}),"."]}),"\n",(0,i.jsx)(t.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,i.jsxs)(t.p,{children:["This connector supports both standard (merge) and ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]}),"\n",(0,i.jsx)(t.p,{children:"Enabling delta updates will prevent Flow from querying for documents in your BigQuery table, which can reduce latency and costs for large datasets.\nIf you're certain that all events will have unique keys, enabling delta updates is a simple way to improve\nperformance with no effect on the output.\nHowever, enabling delta updates is not suitable for all workflows, as the resulting table in BigQuery won't be fully reduced."}),"\n",(0,i.jsx)(t.p,{children:"You can enable delta updates on a per-binding basis:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:" bindings:\n \t- resource:\n \ttable: ${table_name}\n delta_updates: true\n source: ${PREFIX}/${source_collection}\n"})}),"\n",(0,i.jsx)(t.h2,{id:"table-partitioning",children:"Table Partitioning"}),"\n",(0,i.jsxs)(t.p,{children:["Tables are automatically created with\n",(0,i.jsx)(t.a,{href:"https://cloud.google.com/bigquery/docs/clustered-tables",children:"clustering"})," based on the Flow collection\nprimary keys. Tables are not created with any other ",(0,i.jsx)(t.a,{href:"https://cloud.google.com/bigquery/docs/partitioned-tables",children:"partitioning"}),", but pre-existing partitioned tables can be materialized to."]}),"\n",(0,i.jsx)(t.p,{children:"It isn't possible to alter the partitioning of an existing table, but you can convert an existing table to one with partitioning by creating a new table and copying the data from the existing table into it. This can be done to tables that the connector is materializing to, as long as the materializing task is temporarily disabled while doing the conversion."}),"\n",(0,i.jsx)(t.p,{children:"To convert an existing materialized table to one with different partitioning:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Pause your materialization by disabling it from the ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/web-app",children:"UI"})," or editing the task specification with the ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally",children:"CLI"}),"."]}),"\n",(0,i.jsx)(t.li,{children:"Create a new table with the partitioning you want from the data in the existing table:"}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",children:"create table <your_dataset>.<your_schema>.<your_table>_copy\npartition by <your_partitioning>\nas select * from <your_dataset>.<your_schema>.<your_table>;\n"})}),"\n",(0,i.jsxs)(t.ol,{start:"3",children:["\n",(0,i.jsxs)(t.li,{children:["Verify that the data in ",(0,i.jsx)(t.code,{children:"<your_table>_copy"})," looks good, then drop the original table:"]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",children:"drop table <your_dataset>.<your_schema>.<your_table>;\n"})}),"\n",(0,i.jsxs)(t.ol,{start:"4",children:["\n",(0,i.jsxs)(t.li,{children:['"Rename" ',(0,i.jsx)(t.code,{children:"<your_table>_copy"})," back to ",(0,i.jsx)(t.code,{children:"<your_table>"})," by copying it as a new table with the original name of ",(0,i.jsx)(t.code,{children:"<your_table>"}),":"]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",children:"create table <your_dataset>.<your_schema>.<your_table> copy <your_dataset>.<your_schema>.<your_table>_copy;\n"})}),"\n",(0,i.jsxs)(t.ol,{start:"5",children:["\n",(0,i.jsxs)(t.li,{children:["Verify that the data in ",(0,i.jsx)(t.code,{children:"<your_table>"})," looks good, then drop the ",(0,i.jsx)(t.code,{children:"<your_table>_copy"})," table:"]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",children:"drop table <your_dataset>.<your_schema>.<your_table>_copy;\n"})}),"\n",(0,i.jsxs)(t.ol,{start:"6",children:["\n",(0,i.jsx)(t.li,{children:"Re-enable the materialization to continue materializing data to the now partitioned table."}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var i=n(96540);const r={},s=i.createContext(r);function o(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/6b49cdad.22931ba6.js b/pr-preview/pr-1594/assets/js/6b49cdad.22931ba6.js deleted file mode 100644 index 382c925f4f..0000000000 --- a/pr-preview/pr-1594/assets/js/6b49cdad.22931ba6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6744],{8763:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var t=r(74848),i=r(28453);const s={},o="Klaviyo",c={id:"reference/Connectors/capture-connectors/klaviyo",title:"Klaviyo",description:"This connector captures data from Klaviyo into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/klaviyo.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/klaviyo",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/klaviyo.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Jira HTTP Ingest (Webhook)",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest"},next:{title:"LinkedIn Ads",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads"}},l={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"klaviyo",children:"Klaviyo"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from Klaviyo into Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-klaviyo:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-klaviyo:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.p,{children:"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system."}),"\n",(0,t.jsxs)(n.p,{children:["You can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/klaviyo/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(n.p,{children:"This connector can be used to sync the following tables from Klaviyo:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.klaviyo.com/en/v1-2/reference/get-campaigns#get-campaigns",children:"Campaigns"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.klaviyo.com/en/v1-2/reference/metrics-timeline",children:"Events"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.klaviyo.com/en/v1-2/reference/get-global-exclusions",children:"GlobalExclusions"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.klaviyo.com/en/v1-2/reference/get-lists",children:"Lists"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.klaviyo.com/en/v1-2/reference/get-metrics",children:"Metrics"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.klaviyo.com/en/reference/get_flows",children:"Flows"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.klaviyo.com/en/reference/get_profiles",children:"Profiles"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["To set up the Klaviyo source connector, you'll need the ",(0,t.jsx)(n.a,{href:"https://help.klaviyo.com/hc/en-us/articles/115005062267-How-to-Manage-Your-Account-s-API-Keys#your-private-api-keys3",children:"Klaviyo Private API key"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Klaviyo source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/api_key"})}),(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"The value of the Klaviyo API Key generated."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/start_date"})}),(0,t.jsx)(n.td,{children:"Start Date"}),(0,t.jsx)(n.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Resource of your Klaviyo project from which collections are captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-klaviyo:dev\n config:\n api_key: <secret>\n start_date: 2017-01-25T00:00:00Z\n bindings:\n - resource:\n stream: lists\n syncMode: full_refresh\n target: ${PREFIX}/lists\n {...}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>c});var t=r(96540);const i={},s=t.createContext(i);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/6bdc832c.c5fbbab6.js b/pr-preview/pr-1594/assets/js/6bdc832c.c5fbbab6.js deleted file mode 100644 index fe6fac6106..0000000000 --- a/pr-preview/pr-1594/assets/js/6bdc832c.c5fbbab6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4742],{92704:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>a,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var t=s(74848),i=s(28453);const r={},c="NetSuite SuiteTalk REST",l={id:"reference/Connectors/capture-connectors/netsuite-suitetalk",title:"NetSuite SuiteTalk REST",description:"This connector captures data from Oracle NetSuite into Flow collections. It connects to the NetSuite Analytics Data Warehouse using the SuiteQL REST endpoint and a custom role.",source:"@site/docs/reference/Connectors/capture-connectors/netsuite-suitetalk.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/netsuite-suitetalk",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/netsuite-suitetalk.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"NetSuite SuiteAnalytics Connect",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics"},next:{title:"Notion",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion"}},o={},d=[{value:"SuiteAnalytics vs SuiteQL via REST API",id:"suiteanalytics-vs-suiteql-via-rest-api",level:2},{value:"SuiteAnalytics Connect",id:"suiteanalytics-connect",level:3},{value:"SuiteQL via REST API",id:"suiteql-via-rest-api",level:3},{value:"Prerequisites",id:"prerequisites",level:2},{value:"General Setup",id:"general-setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function h(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"netsuite-suitetalk-rest",children:"NetSuite SuiteTalk REST"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from Oracle NetSuite into Flow collections. It connects to the NetSuite Analytics Data Warehouse using the SuiteQL REST endpoint and a custom role."}),"\n",(0,t.jsx)(n.p,{children:"It is available for use in the Flow web application."}),"\n",(0,t.jsx)(n.h2,{id:"suiteanalytics-vs-suiteql-via-rest-api",children:"SuiteAnalytics vs SuiteQL via REST API"}),"\n",(0,t.jsx)(n.p,{children:"These two different connection modes have some key differences:"}),"\n",(0,t.jsx)(n.h3,{id:"suiteanalytics-connect",children:(0,t.jsx)(n.a,{href:"../netsuite-suiteanalytics",children:"SuiteAnalytics Connect"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Requires the SuiteAnalytics Connect feature to be purchased on your NetSuite account"}),"\n",(0,t.jsx)(n.li,{children:"Can inspect which tables (standard & custom) exist in your account"}),"\n",(0,t.jsx)(n.li,{children:"Can inspect the exact data types specified on these table columns"}),"\n",(0,t.jsx)(n.li,{children:"This means you can connect to any table in your account and all fields (booleans, date, and datetimes) are properly formatted in Estuary"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"suiteql-via-rest-api",children:"SuiteQL via REST API"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Custom tables are not supported without manual work"}),"\n",(0,t.jsx)(n.li,{children:"Some standard tables may not yet be supported and will require additional work from the Estuary team"}),"\n",(0,t.jsx)(n.li,{children:"Datetime values are represented as dates without the time specification (this is a limitation of the REST API)"}),"\n",(0,t.jsx)(n.li,{children:"Data types on custom columns may not be properly represented"}),"\n",(0,t.jsx)(n.li,{children:"You are repsonsible for determining the right set of permissions to grant the connector, which can often be complicated and unintuitive"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Oracle NetSuite ",(0,t.jsx)(n.a,{href:"https://system.netsuite.com/pages/customerlogin.jsp?country=US",children:"account"})]}),"\n",(0,t.jsx)(n.li,{children:"Allowed access to all Account permissions options"}),"\n",(0,t.jsx)(n.li,{children:"A new integration with token-based authentication"}),"\n",(0,t.jsxs)(n.li,{children:["A custom role with access to objects you want to capture ",(0,t.jsx)(n.em,{children:"or"})," a purchased SuiteAnalytics Module. See ",(0,t.jsx)(n.a,{href:"#setup",children:"setup"}),"."]}),"\n",(0,t.jsx)(n.li,{children:"A new user assigned to the custom role"}),"\n",(0,t.jsx)(n.li,{children:"Access token generated for the custom role"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"general-setup",children:"General Setup"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Set up required features on your NetSuite account"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:'Find your Account ID\xa0(also know as the "Realm"). You\'ll use this to connect with Flow.'}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In your NetSuite portal, go to ",(0,t.jsx)(n.strong,{children:"Setup"})," > ",(0,t.jsx)(n.strong,{children:"Company"})," > ",(0,t.jsx)(n.strong,{children:"Company Information"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Copy your Account ID."}),"\n",(0,t.jsxs)(n.p,{children:["If you have a production account, it will look like ",(0,t.jsx)(n.code,{children:"2345678"}),". If you're using a sandbox, it'll look like ",(0,t.jsx)(n.code,{children:"2345678_SB2"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Enable the required features."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Navigate to ",(0,t.jsx)(n.strong,{children:"Setup"})," > ",(0,t.jsx)(n.strong,{children:"Company"})," > ",(0,t.jsx)(n.strong,{children:"Enable Features"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click the ",(0,t.jsx)(n.strong,{children:"SuiteCloud"})," tab."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"Manage Authentication"})," section, check the checkbox labeled ",(0,t.jsx)(n.strong,{children:"TOKEN-BASED AUTHENTICATION"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If you are using the SuiteQL connection, in the ",(0,t.jsx)(n.strong,{children:"SuiteTalk (Web Services)"})," section, check the checkbox labeled ",(0,t.jsx)(n.strong,{children:"REST WEB SERVICES"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Save your changes."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If you are using SuiteAnalytics Connect, navigate to ",(0,t.jsx)(n.strong,{children:"Setup"})," > ",(0,t.jsx)(n.strong,{children:"Company"})," > ",(0,t.jsx)(n.strong,{children:"Analytics"})," > ",(0,t.jsx)(n.strong,{children:"Connectivity"})," and check the checkbox labeled ",(0,t.jsx)(n.strong,{children:"SuiteAnalytics Connect"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Save your changes."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create a NetSuite ",(0,t.jsx)(n.em,{children:"integration"})," to obtain a Consumer Key and Consumer Secret."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Navigate to ",(0,t.jsx)(n.strong,{children:"Setup"})," > ",(0,t.jsx)(n.strong,{children:"Integration"})," > ",(0,t.jsx)(n.strong,{children:"Manage Integrations"})," > ",(0,t.jsx)(n.strong,{children:"New"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Give the integration a name, for example, ",(0,t.jsx)(n.code,{children:"estuary-netsuite-integration"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Make sure the ",(0,t.jsx)(n.strong,{children:"State"})," option is enabled."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"Authentication"})," section, check the ",(0,t.jsx)(n.strong,{children:"Token-Based Authentication"})," checkbox."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Save your changes."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Your Consumer Key and Consumer Secret will be shown once. Copy them to a safe place. They will never show up again\nand will be key to the integration working properly."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If you are using the ",(0,t.jsx)(n.strong,{children:"SuiteQL"})," over REST API connection, Set up a role for use with Flow."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to ",(0,t.jsx)(n.strong,{children:"Setup"})," > ",(0,t.jsx)(n.strong,{children:"Users/Roles"})," > ",(0,t.jsx)(n.strong,{children:"Manage Roles"})," > ",(0,t.jsx)(n.strong,{children:"New"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Give the role a name, for example, ",(0,t.jsx)(n.code,{children:"estuary-integration-role"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:'The easiest thing to do here is to click "Core Administrative Permissions". If you want to scope down the permissions given to the connector (which you should) you\'ll have to determine which permissions are necessary. This can get tricky because many different settings can expand the required permissions (for instance, a custom script on a record could require additional permissions).'}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Scroll to the ",(0,t.jsx)(n.strong,{children:"Permissions"})," section."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["(IMPORTANT) Click ",(0,t.jsx)(n.strong,{children:"Transactions"})," and add all the dropdown entities with either ",(0,t.jsx)(n.strong,{children:"full"})," or ",(0,t.jsx)(n.strong,{children:"view"})," access level."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Find Transaction"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"6",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["(IMPORTANT) Click ",(0,t.jsx)(n.strong,{children:"Setup"})," an add the following entities with either ",(0,t.jsx)(n.strong,{children:"full"})," or ",(0,t.jsx)(n.strong,{children:"view"})," access level."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Log in using Access Tokens"}),"\n",(0,t.jsx)(n.li,{children:"REST Web Services"}),"\n",(0,t.jsx)(n.li,{children:"User Access Tokens"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"To allow your custom role to reflect future changes, be sure to edit these parameters again when you rename or customize any NetSuite object."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If you are using ",(0,t.jsx)(n.strong,{children:"SuiteAnalytics Connect"}),' you don\'t need a custom role. Instead, you can use the bundled "Data Warehouse Integrator"']}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Set up user for use with the connector."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to ",(0,t.jsx)(n.strong,{children:"Setup"})," > ",(0,t.jsx)(n.strong,{children:"Users/Roles"})," > ",(0,t.jsx)(n.strong,{children:"Manage Users"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Find the user you want to give access to use with Flow. In the ",(0,t.jsx)(n.strong,{children:"Name"})," column, click the user's name. Then, click the ",(0,t.jsx)(n.strong,{children:"Edit"})," button."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Find the ",(0,t.jsx)(n.strong,{children:"Access"})," tab."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["From the dropdown list, select either role you created previously (e.g. ",(0,t.jsx)(n.code,{children:"estuary-integration-role"}),") or the ",(0,t.jsx)(n.strong,{children:"Data Warehouse Integrator"})," role if you are using SuiteAnalytics Connect."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Save your changes."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Generate an access token."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to ",(0,t.jsx)(n.strong,{children:"Setup"})," > ",(0,t.jsx)(n.strong,{children:"Users/Roles"})," > ",(0,t.jsx)(n.strong,{children:"Access Tokens"})," > ",(0,t.jsx)(n.strong,{children:"New"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Select the ",(0,t.jsx)(n.strong,{children:"Application Name"})," you created earlier."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Under ",(0,t.jsx)(n.strong,{children:"User"}),", select the user you assigned the role previously."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Under ",(0,t.jsx)(n.strong,{children:"Role"}),", select the role you assigned to the user previously."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Under ",(0,t.jsx)(n.strong,{children:"Token Name"}),", give a descriptive name to the token you are creating, for example ",(0,t.jsx)(n.code,{children:"estuary-rest-integration-token"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Save your changes."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Your Token ID and Token Secret will be shown once. Copy them to a safe place."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"You now have a properly configured account with the correct permissions and all the information you need to connect with Flow:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Account ID (Realm)"}),"\n",(0,t.jsx)(n.li,{children:"Consumer Key"}),"\n",(0,t.jsx)(n.li,{children:"Consumer Secret"}),"\n",(0,t.jsx)(n.li,{children:"Token ID"}),"\n",(0,t.jsx)(n.li,{children:"Token Secret"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the NetSuite source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/account_id"})}),(0,t.jsx)(n.td,{children:"Realm"}),(0,t.jsxs)(n.td,{children:["Netsuite realm e.g. 2344535, as for ",(0,t.jsx)(n.code,{children:"production"})," or 2344535_SB1, as for the ",(0,t.jsx)(n.code,{children:"sandbox"})]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/start_date"})}),(0,t.jsx)(n.td,{children:"Token Secret"}),(0,t.jsx)(n.td,{children:"The date to start collecting data from"}),(0,t.jsx)(n.td,{children:"date"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/consumer_key"})}),(0,t.jsx)(n.td,{children:"Consumer Key"}),(0,t.jsx)(n.td,{children:"Consumer key associated with your integration."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/consumer_secret"})}),(0,t.jsx)(n.td,{children:"Consumer Secret"}),(0,t.jsx)(n.td,{children:"Consumer secret associated with your integration."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/token_key"})}),(0,t.jsx)(n.td,{children:"Token Key"}),(0,t.jsx)(n.td,{children:"Access token key"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/token_secret"})}),(0,t.jsx)(n.td,{children:"Token Secret"}),(0,t.jsx)(n.td,{children:"Access token secret"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Resource of your NetSuite project from which collections are captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-netsuite:dev\n config:\n account_id: <your account id>\n consumer_key: <key>\n consumer_secret: <secret>\n token_key: <key>\n token_secret: <secret>\n start_date: "2023-11-01T00:00:00Z"\n bindings:\n - resource:\n stream: Transaction\n target: ${PREFIX}/Transaction\n {...}\n'})})]})}function a(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>c,x:()=>l});var t=s(96540);const i={},r=t.createContext(i);function c(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/6d42ac36.5676c2f3.js b/pr-preview/pr-1594/assets/js/6d42ac36.5676c2f3.js deleted file mode 100644 index e8bfe32e8e..0000000000 --- a/pr-preview/pr-1594/assets/js/6d42ac36.5676c2f3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3640],{99521:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>a,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var r=t(74848),n=t(28453);const i={},o="GitHub",c={id:"reference/Connectors/capture-connectors/github",title:"GitHub",description:"This connector captures data from GitHub repositories and organizations into Flow collections via GitHub's REST API.",source:"@site/docs/reference/Connectors/capture-connectors/github.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/github",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/github.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Cloud Storage",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs"},next:{title:"GitLab",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab"}},l={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with GitHub in the Flow web app",id:"using-oauth2-to-authenticate-with-github-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually using personal access token",id:"configuring-the-connector-specification-manually-using-personal-access-token",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function h(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"github",children:"GitHub"}),"\n",(0,r.jsx)(s.p,{children:"This connector captures data from GitHub repositories and organizations into Flow collections via GitHub's REST API."}),"\n",(0,r.jsxs)(s.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(s.a,{href:"https://ghcr.io/estuary/source-github:dev",children:(0,r.jsx)(s.code,{children:"ghcr.io/estuary/source-github:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsxs)(s.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.jsx)(s.a,{href:"https://docs.airbyte.com/integrations/sources/github/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,r.jsx)(s.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,r.jsxs)(s.p,{children:["When you ",(0,r.jsx)(s.a,{href:"#endpoint",children:"configure the connector"}),", you specify a list of GitHub organizations and/or repositories\nfrom which to capture data."]}),"\n",(0,r.jsx)(s.p,{children:"From your selection, the following data resources are captured:"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Full refresh (batch) resources"}),(0,r.jsx)(s.th,{children:"Incremental (real-time supported) resources"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/issues/assignees#list-assignees",children:"Assignees"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/issues/comments#list-issue-comments-for-a-repository",children:"Comments"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/branches/branches#list-branches",children:"Branches"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/reactions#list-reactions-for-a-commit-comment",children:"Commit comment reactions"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/collaborators/collaborators#list-repository-collaborators",children:"Collaborators"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/commits/comments#list-commit-comments-for-a-repository",children:"Commit comments"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/issues/labels#list-labels-for-a-repository",children:"Issue labels"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/commits/commits#list-commits",children:"Commits"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/pulls/pulls#list-commits-on-a-pull-request",children:"Pull request commits"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/deployments#list-deployments",children:"Deployments"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/repos/repos#list-repository-tags",children:"Tags"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/activity/events#list-repository-events",children:"Events"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/teams/members#list-team-members",children:"Team members"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/reactions#list-reactions-for-an-issue-comment",children:"Issue comment reactions"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/teams/members#get-team-membership-for-a-user",children:"Team memberships"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/issues#list-issue-events-for-a-repository",children:"Issue events"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/teams#list-teams",children:"Teams"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/issues#list-milestones",children:"Issue milestones"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/orgs/members#list-organization-members",children:"Users"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/reactions#list-reactions-for-an-issue",children:"Issue reactions"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/issues/issues#list-repository-issues",children:"Issues"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/projects/cards#list-project-cards",children:"Project cards"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/projects#list-project-columns",children:"Project columns"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/projects/projects#list-repository-projects",children:"Projects"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/reactions#list-reactions-for-a-pull-request-review-comment",children:"Pull request comment reactions"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/pulls/pulls#get-a-pull-request",children:"Pull request stats"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/pulls/pulls#list-pull-requests",children:"Pull requests"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/releases/releases#list-releases",children:"Releases"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/repos/repos#list-organization-repositories",children:"Repositories"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/pulls/comments#list-review-comments-in-a-repository",children:"Review comments"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/pulls/reviews#list-reviews-for-a-pull-request",children:"Reviews"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/activity/starring#list-stargazers",children:"Stargazers"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/actions/workflow-runs#list-workflow-runs-for-a-repository",children:"Workflow runs"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/rest/actions/workflows#list-repository-workflows",children:"Workflows"})})]})]})]}),"\n",(0,r.jsx)(s.p,{children:"Each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,r.jsxs)(s.admonition,{type:"info",children:[(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"/start_date"})," ",(0,r.jsx)(s.a,{href:"#endpoint",children:"field"})," is not applicable to the following resources:"]}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"Assignees"}),"\n",(0,r.jsx)(s.li,{children:"Branches"}),"\n",(0,r.jsx)(s.li,{children:"Collaborators"}),"\n",(0,r.jsx)(s.li,{children:"Issue labels"}),"\n",(0,r.jsx)(s.li,{children:"Organizations"}),"\n",(0,r.jsx)(s.li,{children:"Pull request commits"}),"\n",(0,r.jsx)(s.li,{children:"Pull request stats"}),"\n",(0,r.jsx)(s.li,{children:"Repositories"}),"\n",(0,r.jsx)(s.li,{children:"Tags"}),"\n",(0,r.jsx)(s.li,{children:"Teams"}),"\n",(0,r.jsx)(s.li,{children:"Users"}),"\n"]})]}),"\n",(0,r.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(s.p,{children:"There are two ways to authenticate with GitHub when capturing data into Flow: using OAuth2, and manually, by generating a personal access token.\nTheir prerequisites differ."}),"\n",(0,r.jsx)(s.p,{children:"OAuth is recommended for simplicity in the Flow web app;\nthe access token method is the only supported method using the command line. Which authentication method you choose depends on the policies of your organization. Github has special organization settings that need to be enabled in order for users to be able to access repos that are part of an organization."}),"\n",(0,r.jsx)(s.h3,{id:"using-oauth2-to-authenticate-with-github-in-the-flow-web-app",children:"Using OAuth2 to authenticate with GitHub in the Flow web app"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"A GitHub user account with access to the repositories of interest, and which is a member of organizations of interest."}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:['User may need to request access in Github under the user\'s personal settings (not the organization settings) by going to Applications then Authorized OAuth Apps on Github. Click the app or the image next to the app and request access under "Organization access". After a user has made the request, the organization administrator can grant access on the "Third-party application access policy" page. See additional details on this ',(0,r.jsx)(s.a,{href:"https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/requesting-organization-approval-for-oauth-apps",children:"Github doc"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h3,{id:"configuring-the-connector-specification-manually-using-personal-access-token",children:"Configuring the connector specification manually using personal access token"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"A GitHub user account with access to the repositories of interest, and which is a member of organizations of interest."}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["A GitHub ",(0,r.jsx)(s.a,{href:"https://github.com/settings/tokens",children:"personal access token"}),".\nYou may use multiple tokens to balance the load on your API quota."]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:'User may need to get the organization\'s administrator to grant access under "Third-party Access" then "Personal access tokens".'}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(s.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector."]}),"\n",(0,r.jsx)(s.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(s.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(s.p,{children:["The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use ",(0,r.jsx)(s.a,{href:"#using-oauth2-to-authenticate-with-github-in-the-flow-web-app",children:"OAuth2"}),", so some of these properties aren't required."]}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Property"}),(0,r.jsx)(s.th,{children:"Title"}),(0,r.jsx)(s.th,{children:"Description"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Required/Default"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"/branch"})}),(0,r.jsx)(s.td,{children:"Branch (Optional)"}),(0,r.jsx)(s.td,{children:"Space-delimited list of GitHub repository branches to pull commits for, e.g. `estuary/flow/your-branch`. If no branches are specified for a repository, the default branch will be pulled."}),(0,r.jsx)(s.td,{children:"string"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"/credentials"})})}),(0,r.jsx)(s.td,{children:"Authentication"}),(0,r.jsx)(s.td,{children:"Choose how to authenticate to GitHub"}),(0,r.jsx)(s.td,{children:"object"}),(0,r.jsx)(s.td,{children:"Required"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"/credentials/option_title"})}),(0,r.jsx)(s.td,{children:"Authentication method"}),(0,r.jsxs)(s.td,{children:["Set to ",(0,r.jsx)(s.code,{children:"PAT Credentials"})," for manual authentication"]}),(0,r.jsx)(s.td,{children:"string"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"/credentials/personal_access_token"})}),(0,r.jsx)(s.td,{children:"Access token"}),(0,r.jsx)(s.td,{children:"Personal access token, used for manual authentication. You may include multiple access tokens as a comma separated list."}),(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"/page_size_for_large_streams"})}),(0,r.jsx)(s.td,{children:"Page size for large streams (Optional)"}),(0,r.jsx)(s.td,{children:"The Github connector captures from several resources with a large amount of data. The page size of such resources depends on the size of your repository. We recommended that you specify values between 10 and 30."}),(0,r.jsx)(s.td,{children:"integer"}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"10"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"/repository"})})}),(0,r.jsx)(s.td,{children:"GitHub Repositories"}),(0,r.jsx)(s.td,{children:"Space-delimited list of GitHub organizations/repositories, e.g. `estuary/flow` for a single repository, `estuary/*` to get all repositories from an organization and `estuary/flow estuary/another-repo` for multiple repositories."}),(0,r.jsx)(s.td,{children:"string"}),(0,r.jsx)(s.td,{children:"Required"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"/start_date"})})}),(0,r.jsx)(s.td,{children:"Start date"}),(0,r.jsxs)(s.td,{children:["The date from which you'd like to replicate data from GitHub in the format YYYY-MM-DDT00:00:00Z. For the resources that support this configuration, only data generated on or after the start date will be replicated. This field doesn't apply to all ",(0,r.jsx)(s.a,{href:"#supported-data-resources",children:"resources"}),"."]}),(0,r.jsx)(s.td,{children:"string"}),(0,r.jsx)(s.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(s.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Property"}),(0,r.jsx)(s.th,{children:"Title"}),(0,r.jsx)(s.th,{children:"Description"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Required/Default"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"/stream"})})}),(0,r.jsx)(s.td,{children:"Stream"}),(0,r.jsx)(s.td,{children:"GitHub resource from which collection is captured."}),(0,r.jsx)(s.td,{children:"string"}),(0,r.jsx)(s.td,{children:"Required"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"/syncMode"})})}),(0,r.jsx)(s.td,{children:"Sync mode"}),(0,r.jsx)(s.td,{children:"Connection method."}),(0,r.jsx)(s.td,{children:"string"}),(0,r.jsx)(s.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(s.p,{children:"This sample specification reflects the manual authentication method."}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-github:dev\n config:\n credentials:\n option_title: PAT Credentials\n personal_access_token: {secret}\n page_size_for_large_streams: 10\n repository: estuary/flow\n start_date: 2022-01-01T00:00:00Z\n bindings:\n - resource:\n stream: assignees\n syncMode: full_refresh\n target: ${PREFIX}/assignees\n {...}\n"})})]})}function a(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},28453:(e,s,t)=>{t.d(s,{R:()=>o,x:()=>c});var r=t(96540);const n={},i=r.createContext(n);function o(e){const s=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/6e2958ef.adf03a04.js b/pr-preview/pr-1594/assets/js/6e2958ef.adf03a04.js deleted file mode 100644 index 5f71a78283..0000000000 --- a/pr-preview/pr-1594/assets/js/6e2958ef.adf03a04.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5109],{77175:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var i=n(74848),r=n(28453);const s={},l="CSV Files in Google GCS",c={id:"reference/Connectors/materialization-connectors/google-gcs-csv",title:"CSV Files in Google GCS",description:"This connector materializes delta updates of",source:"@site/docs/reference/Connectors/materialization-connectors/google-gcs-csv.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/google-gcs-csv",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/google-gcs-csv.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Firebolt",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt"},next:{title:"Apache Parquet Files in Google GCS",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet"}},o={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"File Names",id:"file-names",level:2},{value:"Eventual Consistency",id:"eventual-consistency",level:2}];function a(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"csv-files-in-google-gcs",children:"CSV Files in Google GCS"}),"\n",(0,i.jsxs)(t.p,{children:["This connector materializes ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})," of\nFlow collections into files in a GCS bucket per the CSV format described in\n",(0,i.jsx)(t.a,{href:"https://www.rfc-editor.org/rfc/rfc4180.html",children:"RFC-4180"}),". The CSV files are compressed using Gzip\ncompression."]}),"\n",(0,i.jsx)(t.p,{children:"The delta updates are batched within Flow, converted to CSV files, and then pushed to the S3 bucket\nat a time interval that you set. Files are limited to a configurable maximum size. Each materialized\nFlow collection will produce many separate files."}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://ghcr.io/estuary/materialize-gcs-csv:dev",children:(0,i.jsx)(t.code,{children:"ghcr.io/estuary/materialize-gcs-csv:dev"})}),"\nprovides the latest connector image. You can also follow the link in your browser to see past image\nversions."]}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(t.p,{children:"To use this connector, you'll need:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["A GCS bucket to write files to. See ",(0,i.jsx)(t.a,{href:"https://cloud.google.com/storage/docs/creating-buckets",children:"this\nguide"})," for instructions on setting up a\nnew GCS bucket."]}),"\n",(0,i.jsxs)(t.li,{children:["A Google Cloud ",(0,i.jsx)(t.a,{href:"https://cloud.google.com/docs/authentication/getting-started",children:"service account"}),"\nwith ",(0,i.jsx)(t.a,{href:"https://cloud.google.com/storage/docs/access-control/iam-roles#standard-roles",children:(0,i.jsx)(t.code,{children:"roles/storage.objectCreator"})}),"\nfor the GCS bucket created above."]}),"\n",(0,i.jsx)(t.li,{children:"A key file for the service account."}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsx)(t.p,{children:"Use the below properties to configure the materialization, which will direct one or more of your\nFlow collections to your bucket."}),"\n",(0,i.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,i.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Property"}),(0,i.jsx)(t.th,{children:"Title"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Required/Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/bucket"})})}),(0,i.jsx)(t.td,{children:"Bucket"}),(0,i.jsx)(t.td,{children:"Bucket to store materialized objects."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/credentialsJson"})})}),(0,i.jsx)(t.td,{children:"Service Account JSON"}),(0,i.jsx)(t.td,{children:"The JSON credentials of the service account to use for authorization."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/uploadInterval"})})}),(0,i.jsx)(t.td,{children:"Upload Interval"}),(0,i.jsx)(t.td,{children:"Frequency at which files will be uploaded."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"5m"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/prefix"})}),(0,i.jsx)(t.td,{children:"Prefix"}),(0,i.jsx)(t.td,{children:"Optional prefix that will be used to store objects."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/fileSizeLimit"})}),(0,i.jsx)(t.td,{children:"File Size Limit"}),(0,i.jsx)(t.td,{children:"Approximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank."}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/csvConfig/delimiter"})}),(0,i.jsx)(t.td,{children:"Delimiter"}),(0,i.jsx)(t.td,{children:"Character to separate columns within a row. Defaults to a comma if blank. Must be a single character with a byte length of 1."}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/csvConfig/nullString"})}),(0,i.jsx)(t.td,{children:"Null String"}),(0,i.jsx)(t.td,{children:"String to use to represent NULL values. Defaults to an empty string if blank."}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/csvConfig/skipHeaders"})}),(0,i.jsx)(t.td,{children:"Skip Headers"}),(0,i.jsx)(t.td,{children:"Do not write headers to files."}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Property"}),(0,i.jsx)(t.th,{children:"Title"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Required/Default"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/path"})})}),(0,i.jsx)(t.td,{children:"Path"}),(0,i.jsx)(t.td,{children:"The path that objects will be materialized to."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]})})]}),"\n",(0,i.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:'materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/materialize-gcs-csv:dev"\n config:\n bucket: bucket\n credentialsJson: <credentialsJson>\n uploadInterval: 5m\n bindings:\n - resource:\n path: ${COLLECTION_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,i.jsx)(t.h2,{id:"file-names",children:"File Names"}),"\n",(0,i.jsx)(t.p,{children:"Materialized files are named with monotonically increasing integer values, padded with leading 0's\nso they remain lexically sortable. For example, a set of files may be materialized like this for a\ngiven collection:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"bucket/prefix/path/v0000000000/00000000000000000000.csv\nbucket/prefix/path/v0000000000/00000000000000000001.csv\nbucket/prefix/path/v0000000000/00000000000000000002.csv\n"})}),"\n",(0,i.jsxs)(t.p,{children:["Here the values for ",(0,i.jsx)(t.strong,{children:"bucket"})," and ",(0,i.jsx)(t.strong,{children:"prefix"})," are from your endpoint configuration. The ",(0,i.jsx)(t.strong,{children:"path"})," is\nspecific to the binding configuration. ",(0,i.jsx)(t.strong,{children:"v0000000000"})," represents the current ",(0,i.jsx)(t.strong,{children:"backfill counter"}),"\nfor binding and will be increased if the binding is re-backfilled, along with the file names\nstarting back over from 0."]}),"\n",(0,i.jsx)(t.h2,{id:"eventual-consistency",children:"Eventual Consistency"}),"\n",(0,i.jsx)(t.p,{children:"In rare circumstances, recently materialized files may be re-written by files with the same name if\nthe materialization shard is interrupted in the middle of processing a Flow transaction and the\ntransaction must be re-started. Files that were committed as part of a completed transaction will\nnever be re-written. In this way, eventually all collection data will be written to files\neffectively-once, although inconsistencies are possible when accessing the most recently written\ndata."})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>c});var i=n(96540);const r={},s=i.createContext(r);function l(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/6e773b1a.8f6d9140.js b/pr-preview/pr-1594/assets/js/6e773b1a.8f6d9140.js deleted file mode 100644 index 5651629e80..0000000000 --- a/pr-preview/pr-1594/assets/js/6e773b1a.8f6d9140.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5719],{25139:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>h,frontMatter:()=>t,metadata:()=>c,toc:()=>l});var r=i(74848),s=i(28453);const t={},d="SFTP",c={id:"reference/Connectors/capture-connectors/sftp",title:"SFTP",description:"This connector captures data from an SFTP server.",source:"@site/docs/reference/Connectors/capture-connectors/sftp.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/sftp",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/sftp.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Sentry",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry"},next:{title:"Slack",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack"}},o={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Subdirectories and Symbolic Links",id:"subdirectories-and-symbolic-links",level:2},{value:"File Capturing Order",id:"file-capturing-order",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Advanced: Parsing SFTP Files",id:"advanced-parsing-sftp-files",level:3},{value:"CSV configuration",id:"csv-configuration",level:4}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"sftp",children:"SFTP"}),"\n",(0,r.jsx)(n.p,{children:"This connector captures data from an SFTP server."}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://ghcr.io/estuary/source-sftp:dev",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-sftp:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.p,{children:["You'll need an SFTP server that can accept connections from the ",(0,r.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"})," using password authentication."]}),"\n",(0,r.jsx)(n.h2,{id:"subdirectories-and-symbolic-links",children:"Subdirectories and Symbolic Links"}),"\n",(0,r.jsxs)(n.p,{children:["The connector must be configured with a ",(0,r.jsx)(n.code,{children:"Directory"})," to capture files from. It will also descend into and capture files in normal subdirectories of the configured ",(0,r.jsx)(n.code,{children:"Directory"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Symbolic links to files are captured from the referent files. Symbolic links to subdirectories are ",(0,r.jsx)(n.em,{children:"not"})," captured, although the configured ",(0,r.jsx)(n.code,{children:"Directory"})," may itself be a symbolic link."]}),"\n",(0,r.jsx)(n.h2,{id:"file-capturing-order",children:"File Capturing Order"}),"\n",(0,r.jsx)(n.p,{children:"The standard mode of operation for the connector is to capture files according to their modification time. All files available on the server will initially be captured, and on an on-going basis new files that are added to the server are captured incrementally. New files added to the server are captured based on their modification time: If the connector finds a file with a more recent modification time than any previously observed, it will be captured. This means that any actions that update the modification time of a file on the server may cause it to be re-captured. For symbolic links to files the modification time of referent file is used, not of the symbolic link."}),"\n",(0,r.jsxs)(n.p,{children:["Alternatively, the advanced option ",(0,r.jsx)(n.code,{children:"Ascending Keys"})," may be set. In this mode of operation the connector processes files strictly based on their path. New files are captured if they have a path lexically greater than any previously captured file. Lexical ordering considers the full path of the file."]}),"\n",(0,r.jsxs)(n.p,{children:["As an example, consider a directory structure like the following with a data file initially in the directory ",(0,r.jsx)(n.code,{children:"/root/b/"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"/root/\n a/\n b/data.csv\n c/\n"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["In the normal mode of operation (",(0,r.jsx)(n.code,{children:"Ascending Keys"})," not set) the path ",(0,r.jsx)(n.code,{children:"/root/b/data.csv"})," will initially be captured. Any added files will be captured by the connector on an on-going basis as they have increasingly more recent modification times."]}),"\n",(0,r.jsxs)(n.li,{children:["With ",(0,r.jsx)(n.code,{children:"Ascending Keys"})," set the path ",(0,r.jsx)(n.code,{children:"/root/b/data.csv"})," will initially be captured, but after that only added files in a higher lexical order will be captured:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Any file added to the directory ",(0,r.jsx)(n.code,{children:"/root/a/"})," will ",(0,r.jsx)(n.em,{children:"not"})," be captured, becuase ",(0,r.jsx)(n.code,{children:"/root/a/"})," comes before ",(0,r.jsx)(n.code,{children:"/root/b/"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Any file added to the directory ",(0,r.jsx)(n.code,{children:"/root/c/"})," ",(0,r.jsx)(n.em,{children:"will"})," captured, because ",(0,r.jsx)(n.code,{children:"/root/c/"})," comes after ",(0,r.jsx)(n.code,{children:"/root/b/"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["A file added to the directory ",(0,r.jsx)(n.code,{children:"/root/b/"})," may be captured if its name comes after ",(0,r.jsx)(n.code,{children:"data.csv"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["This ordering applies on an on-going basis. If a file is added to ",(0,r.jsx)(n.code,{children:"/root/c/"}),", after that only files with a higher lexical ordering than that file to be captured."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Setting ",(0,r.jsx)(n.code,{children:"Ascending Keys"})," is only recommended if you have strict control over the naming of files and can ensure they are added in increasing lexical ordering."]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the SFTP source connector."]}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/address"})})}),(0,r.jsx)(n.td,{children:"Address"}),(0,r.jsxs)(n.td,{children:["Host and port of the SFTP server. Example: ",(0,r.jsx)(n.code,{children:"myserver.com:22"})]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/username"})})}),(0,r.jsx)(n.td,{children:"Username"}),(0,r.jsx)(n.td,{children:"Username for authentication."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/password"})}),(0,r.jsx)(n.td,{children:"Password"}),(0,r.jsx)(n.td,{children:"Password for authentication. Only one of Password or SSHKey must be provided."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/sshKey"})}),(0,r.jsx)(n.td,{children:"SSH Key"}),(0,r.jsx)(n.td,{children:"SSH Key for authentication. Only one of Password or SSHKey must be provided."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/directory"})})}),(0,r.jsx)(n.td,{children:"Directory"}),(0,r.jsx)(n.td,{children:"Directory to capture files from. All files in this directory and any subdirectories will be included."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/matchFiles"})}),(0,r.jsx)(n.td,{children:"Match Files Regex"}),(0,r.jsxs)(n.td,{children:["Filter applied to all file names in the directory. If provided, only files whose path (relative to the directory) matches this regex will be captured. For example, you can use ",(0,r.jsx)(n.code,{children:".*\\.json"})," to only capture json files."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced"})}),(0,r.jsx)(n.td,{}),(0,r.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/ascendingKeys"})}),(0,r.jsx)(n.td,{children:"Ascending Keys"}),(0,r.jsx)(n.td,{children:"May improve sync speeds by listing files from the end of the last sync, rather than listing all files in the configured directory. This requires that you write files in ascending lexicographic order, such as an RFC-3339 timestamp, so that lexical path ordering matches modification time ordering."}),(0,r.jsx)(n.td,{children:"boolean"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/parser"})}),(0,r.jsx)(n.td,{children:"Parser Configuration"}),(0,r.jsx)(n.td,{children:"Configures how files are parsed (optional, see below)"}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/parser/compression"})}),(0,r.jsx)(n.td,{children:"Compression"}),(0,r.jsx)(n.td,{children:"Determines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically."}),(0,r.jsx)(n.td,{children:"null, string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"null"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/parser/format"})}),(0,r.jsx)(n.td,{children:"Format"}),(0,r.jsx)(n.td,{children:"Determines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available."}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'{"type":"auto"}'})})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Prefix"}),(0,r.jsx)(n.td,{children:"Path to the captured directory."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${CAPTURE_NAME}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/source-sftp:dev"\n config:\n address: myserver.com:22\n username: <SECRET>\n password: <SECRET>\n directory: /data\n parser:\n compression: zip\n format:\n type: csv\n config:\n delimiter: ","\n encoding: UTF-8\n errorThreshold: 5\n headers: [ID, username, first_name, last_name]\n lineEnding: "\\\\r"\n quote: \'"\'\n bindings:\n - resource:\n stream: /data\n target: ${COLLECTION_NAME}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"advanced-parsing-sftp-files",children:"Advanced: Parsing SFTP Files"}),"\n",(0,r.jsx)(n.p,{children:"SFTP servers can support a wider variety of file types than other data source systems. For each of\nthese file types, Flow must parse and translate data into collections with defined fields and JSON\nschemas."}),"\n",(0,r.jsx)(n.p,{children:"By default, the parser will automatically detect the type and shape of the data in your bucket,\nso you won't need to change the parser configuration for most captures."}),"\n",(0,r.jsxs)(n.p,{children:["However, the automatic detection may be incorrect in some cases.\nTo fix or prevent this, you can provide explicit information in the parser configuration,\nwhich is part of the ",(0,r.jsx)(n.a,{href:"#endpoint",children:"endpoint configuration"})," for this connector."]}),"\n",(0,r.jsx)(n.p,{children:"The parser configuration includes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Compression"}),": Specify how the bucket contents are compressed.\nIf no compression type is specified, the connector will try to determine the compression type automatically.\nOptions are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"zip"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"gzip"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"zstd"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"none"})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Format"}),": Specify the data format, which determines how it will be parsed.\nOptions are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Auto"}),": If no format is specified, the connector will try to determine it automatically."]}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Avro"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"CSV"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"JSON"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Protobuf"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"W3C Extended Log"})}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsx)(n.p,{children:"At this time, Flow only supports SFTP captures with data of a single file type.\nSupport for multiple file types, which can be configured on a per-binding basis,\nwill be added in the future."}),(0,r.jsx)(n.p,{children:"For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type."})]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"csv-configuration",children:"CSV configuration"}),"\n",(0,r.jsx)(n.p,{children:"CSV files include several additional properties that are important to the parser.\nIn most cases, Flow is able to automatically determine the correct values,\nbut you may need to specify for unusual datasets. These properties are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Delimiter"}),". Options are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Comma (",(0,r.jsx)(n.code,{children:'","'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Pipe (",(0,r.jsx)(n.code,{children:'"|"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Space (",(0,r.jsx)(n.code,{children:'"0x20"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Semicolon (",(0,r.jsx)(n.code,{children:'";"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Tab (",(0,r.jsx)(n.code,{children:'"0x09"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Vertical tab (",(0,r.jsx)(n.code,{children:'"0x0B"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Unit separator (",(0,r.jsx)(n.code,{children:'"0x1F"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["SOH (",(0,r.jsx)(n.code,{children:'"0x01"'}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Encoding"})," type, specified by its ",(0,r.jsx)(n.a,{href:"https://encoding.spec.whatwg.org/#names-and-labels",children:"WHATWG label"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optionally, an ",(0,r.jsx)(n.strong,{children:"Error threshold"}),", as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Escape characters"}),". Options are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Backslash (",(0,r.jsx)(n.code,{children:'"\\\\"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Disable escapes (",(0,r.jsx)(n.code,{children:'""'}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optionally, a list of column ",(0,r.jsx)(n.strong,{children:"Headers"}),", if not already included in the first row of the CSV file."]}),"\n",(0,r.jsx)(n.p,{children:"If any headers are provided, it is assumed that the provided list of headers is complete and authoritative.\nThe first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Line ending"})," values"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["CRLF (",(0,r.jsx)(n.code,{children:'"\\\\r\\\\n"'}),") (Windows)"]}),"\n",(0,r.jsxs)(n.li,{children:["CR (",(0,r.jsx)(n.code,{children:'"\\\\r"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["LF (",(0,r.jsx)(n.code,{children:'"\\\\n"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Record Separator (",(0,r.jsx)(n.code,{children:'"0x1E"'}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Quote character"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Double Quote (",(0,r.jsx)(n.code,{children:'"\\""'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Single Quote (",(0,r.jsx)(n.code,{children:'"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Disable Quoting (",(0,r.jsx)(n.code,{children:'""'}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The sample specification ",(0,r.jsx)(n.a,{href:"#sample",children:"above"})," includes these fields."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>d,x:()=>c});var r=i(96540);const s={},t=r.createContext(s);function d(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/6f6bf398.23c7fab7.js b/pr-preview/pr-1594/assets/js/6f6bf398.23c7fab7.js deleted file mode 100644 index 1eef2de3b3..0000000000 --- a/pr-preview/pr-1594/assets/js/6f6bf398.23c7fab7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9017],{77163:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var t=n(74848),s=n(28453);const a={sidebar_position:1},o="Authorizing users and authenticating with Flow",r={id:"reference/authentication",title:"Authorizing users and authenticating with Flow",description:"Read, write, and admin capabilities over Flow catalogs and the collections that comprise them",source:"@site/docs/reference/authentication.md",sourceDirName:"reference",slug:"/reference/authentication",permalink:"/pr-preview/pr-1594/reference/authentication",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/authentication.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Materialization Protocol",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-protocol"},next:{title:"Editing considerations",permalink:"/pr-preview/pr-1594/reference/editing"}},c={},l=[{value:"Subjects, objects, and inherited capabilities",id:"subjects-objects-and-inherited-capabilities",level:2},{value:"Default authorization settings",id:"default-authorization-settings",level:2},{value:"Authenticating Flow in the web app",id:"authenticating-flow-in-the-web-app",level:2},{value:"Authenticating Flow using the CLI",id:"authenticating-flow-using-the-cli",level:2},{value:"Provisioning capabilities",id:"provisioning-capabilities",level:2}];function d(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"authorizing-users-and-authenticating-with-flow",children:"Authorizing users and authenticating with Flow"}),"\n",(0,t.jsxs)(i.p,{children:["Read, write, and admin capabilities over Flow catalogs and the ",(0,t.jsx)(i.a,{href:"/pr-preview/pr-1594/concepts/collections",children:"collections"})," that comprise them\nare granted to Flow users through ",(0,t.jsx)(i.strong,{children:"capabilities"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["Capabilities are granted in terms of ",(0,t.jsx)(i.strong,{children:"prefixes"})," within the Flow ",(0,t.jsx)(i.a,{href:"/pr-preview/pr-1594/concepts/#namespace",children:"namespace"}),".\nBy default, each organization has a unique top-level prefix.\nFor example, if you worked for Acme Co, your assigned organization prefix would be ",(0,t.jsx)(i.code,{children:"acmeCo/"}),".\nYou may further divide your namespace however you'd like; for example ",(0,t.jsx)(i.code,{children:"acmeCo/anvils"})," and ",(0,t.jsx)(i.code,{children:"acmeCo/roadrunners"}),".\nWhen you name a collection, you can customize the prefix, and capabilities can be configured at any prefix level.\nThis allows you to flexibly control access to your Flow data."]}),"\n",(0,t.jsx)(i.p,{children:"The available capabilities are:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.code,{children:"read"})}),": Allows the subject to read data from collections of the given prefix."]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.code,{children:"write"})}),": Allows the subject to read and write data from collections of the given prefix."]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.code,{children:"admin"})}),": Allows the subject to read and write data from collections of the given prefix,\nand to manage storage mappings, catalog specifications, and capability grants within the prefix.\nThe admin capability also inherits capabilities granted to the prefix, as discussed below."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"subjects-objects-and-inherited-capabilities",children:"Subjects, objects, and inherited capabilities"}),"\n",(0,t.jsxs)(i.p,{children:["The entity to which you grant a capability is called the ",(0,t.jsx)(i.strong,{children:"subject"}),", and the entity over which access is granted is called the ",(0,t.jsx)(i.strong,{children:"object"}),".\nThe subject can be either a user or a prefix, and the object is always a prefix. This allows subjects to inherit nested capabilities,\nso long as they are granted ",(0,t.jsx)(i.code,{children:"admin"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["For example, user X of Acme Co has admin access to the ",(0,t.jsx)(i.code,{children:"acmeCo/"})," prefix, and user Y has write access.\nA third party has granted ",(0,t.jsx)(i.code,{children:"acmeCo/"})," read access to shared data at ",(0,t.jsx)(i.code,{children:"outside-org/acmeCo-share/"}),".\nUser X automatically inherits read access to ",(0,t.jsx)(i.code,{children:"outside-org/acmeCo-share/"}),", but user Y does not."]}),"\n",(0,t.jsx)(i.h2,{id:"default-authorization-settings",children:"Default authorization settings"}),"\n",(0,t.jsxs)(i.p,{children:["When you first sign up to use Flow, your organization is provisioned a prefix, and your username is granted admin access to the prefix.\nYour prefix is granted write access to itself and read access to its logs, which are stored under a unique sub-prefix of the global ",(0,t.jsx)(i.code,{children:"ops/"})," prefix."]}),"\n",(0,t.jsxs)(i.p,{children:["Using the same example, say user X signs up on behalf of their company, AcmeCo. User X is automatically granted ",(0,t.jsx)(i.code,{children:"admin"})," access to the ",(0,t.jsx)(i.code,{children:"acmeCo/"})," prefix.\n",(0,t.jsx)(i.code,{children:"acmeCo/"}),", in turn, has write access to ",(0,t.jsx)(i.code,{children:"acmeCo/"})," and read access to ",(0,t.jsx)(i.code,{children:"ops/acmeCo/"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["As more users and prefixes are added, admins can ",(0,t.jsx)(i.a,{href:"#provisioning-capabilities",children:"provision capabilities"})," using the CLI."]}),"\n",(0,t.jsx)(i.h2,{id:"authenticating-flow-in-the-web-app",children:"Authenticating Flow in the web app"}),"\n",(0,t.jsxs)(i.p,{children:["You must sign in to begin a new session using the ",(0,t.jsx)(i.a,{href:"https://dashboard.estuary.dev",children:"Flow web application"}),".\nFor the duration of the session, you'll be able to perform actions depending on the capabilities granted to the user profile."]}),"\n",(0,t.jsxs)(i.p,{children:["You can view the capabilities currently provisioned in your organization on the ",(0,t.jsx)(i.strong,{children:"Admin"})," tab."]}),"\n",(0,t.jsx)(i.h2,{id:"authenticating-flow-using-the-cli",children:"Authenticating Flow using the CLI"}),"\n",(0,t.jsxs)(i.p,{children:["You can use the ",(0,t.jsx)(i.a,{href:"/pr-preview/pr-1594/concepts/flowctl",children:"flowctl"})," CLI to work with your organization's catalogs and drafts in your local development environment."]}),"\n",(0,t.jsx)(i.p,{children:"To authenticate a local development session using the CLI, do the following:"}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsx)(i.p,{children:"Ensure that you have an Estuary account and have signed into the Flow web app before."}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsx)(i.p,{children:"In the terminal of your local development environment, run:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-console",children:"flowctl auth login\n"})}),"\n",(0,t.jsx)(i.p,{children:"In a browser window, the web app opens to the CLI-API tab."}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsx)(i.p,{children:"Copy the access token."}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsx)(i.p,{children:"Return to the terminal, paste the access token, and press Enter."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"The token will expire after a predetermined duration. Repeat this process to re-authenticate."}),"\n",(0,t.jsx)(i.h2,{id:"provisioning-capabilities",children:"Provisioning capabilities"}),"\n",(0,t.jsxs)(i.p,{children:["As an admin, you can provision capabilities using the CLI with the subcommands of ",(0,t.jsx)(i.code,{children:"flowctl auth roles"}),"."]}),"\n",(0,t.jsx)(i.p,{children:"For example:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"flowctl auth roles list"})," returns a list of all currently provisioned capabilities"]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"flowctl auth roles grant --object-role=acmeCo/ --capability=admin --subject-user-id=userZ"})," grants user Z admin access to ",(0,t.jsx)(i.code,{children:"acmeCo"})]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"flowctl auth roles revoke --object-role=outside-org/acmeCo-share/ --capability=read --subject-role=acmeCo/"})," would be used by an admin of ",(0,t.jsx)(i.code,{children:"outside-org"}),"\nto revoke ",(0,t.jsx)(i.code,{children:"acmeCo/"}),"'s read access to ",(0,t.jsx)(i.code,{children:"outside-org/acmeCo-share/"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["You can find detailed help for all subcommands using the ",(0,t.jsx)(i.code,{children:"--help"})," or ",(0,t.jsx)(i.code,{children:"-h"})," flag."]})]})}function h(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,i,n)=>{n.d(i,{R:()=>o,x:()=>r});var t=n(96540);const s={},a=t.createContext(s);function o(e){const i=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/706.eb973759.js b/pr-preview/pr-1594/assets/js/706.eb973759.js deleted file mode 100644 index e1f203a8bc..0000000000 --- a/pr-preview/pr-1594/assets/js/706.eb973759.js +++ /dev/null @@ -1,10065 +0,0 @@ -"use strict"; -exports.id = 706; -exports.ids = [706]; -exports.modules = { - -/***/ 21176: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - Zp: () => (/* reexport */ layout) -}); - -// UNUSED EXPORTS: acyclic, normalize, rank - -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js -var uniqueId = __webpack_require__(5664); -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/map.js -var map = __webpack_require__(74722); -// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules -var range = __webpack_require__(91395); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js -var graphlib = __webpack_require__(697); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js -/* - * Simple doubly linked list implementation derived from Cormen, et al., - * "Introduction to Algorithms". - */ - - - -class List { - constructor() { - var sentinel = {}; - sentinel._next = sentinel._prev = sentinel; - this._sentinel = sentinel; - } - dequeue() { - var sentinel = this._sentinel; - var entry = sentinel._prev; - if (entry !== sentinel) { - unlink(entry); - return entry; - } - } - enqueue(entry) { - var sentinel = this._sentinel; - if (entry._prev && entry._next) { - unlink(entry); - } - entry._next = sentinel._next; - sentinel._next._prev = entry; - sentinel._next = entry; - entry._prev = sentinel; - } - toString() { - var strs = []; - var sentinel = this._sentinel; - var curr = sentinel._prev; - while (curr !== sentinel) { - strs.push(JSON.stringify(curr, filterOutLinks)); - curr = curr._prev; - } - return '[' + strs.join(', ') + ']'; - } -} - -function unlink(entry) { - entry._prev._next = entry._next; - entry._next._prev = entry._prev; - delete entry._next; - delete entry._prev; -} - -function filterOutLinks(k, v) { - if (k !== '_next' && k !== '_prev') { - return v; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js - - - - -/* - * A greedy heuristic for finding a feedback arc set for a graph. A feedback - * arc set is a set of edges that can be removed to make a graph acyclic. - * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and - * effective heuristic for the feedback arc set problem." This implementation - * adjusts that from the paper to allow for weighted edges. - */ - - -var DEFAULT_WEIGHT_FN = constant/* default */.A(1); - -function greedyFAS(g, weightFn) { - if (g.nodeCount() <= 1) { - return []; - } - var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); - var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); - - // Expand multi-edges - return flatten/* default */.A( - map/* default */.A(results, function (e) { - return g.outEdges(e.v, e.w); - }) - ); -} - -function doGreedyFAS(g, buckets, zeroIdx) { - var results = []; - var sources = buckets[buckets.length - 1]; - var sinks = buckets[0]; - - var entry; - while (g.nodeCount()) { - while ((entry = sinks.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - while ((entry = sources.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - if (g.nodeCount()) { - for (var i = buckets.length - 2; i > 0; --i) { - entry = buckets[i].dequeue(); - if (entry) { - results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); - break; - } - } - } - } - - return results; -} - -function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { - var results = collectPredecessors ? [] : undefined; - - forEach/* default */.A(g.inEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var uEntry = g.node(edge.v); - - if (collectPredecessors) { - results.push({ v: edge.v, w: edge.w }); - } - - uEntry.out -= weight; - assignBucket(buckets, zeroIdx, uEntry); - }); - - forEach/* default */.A(g.outEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var w = edge.w; - var wEntry = g.node(w); - wEntry['in'] -= weight; - assignBucket(buckets, zeroIdx, wEntry); - }); - - g.removeNode(entry.v); - - return results; -} - -function buildState(g, weightFn) { - var fasGraph = new graphlib/* Graph */.T(); - var maxIn = 0; - var maxOut = 0; - - forEach/* default */.A(g.nodes(), function (v) { - fasGraph.setNode(v, { v: v, in: 0, out: 0 }); - }); - - // Aggregate weights on nodes, but also sum the weights across multi-edges - // into a single edge for the fasGraph. - forEach/* default */.A(g.edges(), function (e) { - var prevWeight = fasGraph.edge(e.v, e.w) || 0; - var weight = weightFn(e); - var edgeWeight = prevWeight + weight; - fasGraph.setEdge(e.v, e.w, edgeWeight); - maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); - maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); - }); - - var buckets = range/* default */.A(maxOut + maxIn + 3).map(function () { - return new List(); - }); - var zeroIdx = maxIn + 1; - - forEach/* default */.A(fasGraph.nodes(), function (v) { - assignBucket(buckets, zeroIdx, fasGraph.node(v)); - }); - - return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; -} - -function assignBucket(buckets, zeroIdx, entry) { - if (!entry.out) { - buckets[0].enqueue(entry); - } else if (!entry['in']) { - buckets[buckets.length - 1].enqueue(entry); - } else { - buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js - - - - - -function run(g) { - var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); - forEach/* default */.A(fas, function (e) { - var label = g.edge(e); - g.removeEdge(e); - label.forwardName = e.name; - label.reversed = true; - g.setEdge(e.w, e.v, label, uniqueId/* default */.A('rev')); - }); - - function weightFn(g) { - return function (e) { - return g.edge(e).weight; - }; - } -} - -function dfsFAS(g) { - var fas = []; - var stack = {}; - var visited = {}; - - function dfs(v) { - if (has/* default */.A(visited, v)) { - return; - } - visited[v] = true; - stack[v] = true; - forEach/* default */.A(g.outEdges(v), function (e) { - if (has/* default */.A(stack, e.w)) { - fas.push(e); - } else { - dfs(e.w); - } - }); - delete stack[v]; - } - - forEach/* default */.A(g.nodes(), dfs); - return fas; -} - -function undo(g) { - forEach/* default */.A(g.edges(), function (e) { - var label = g.edge(e); - if (label.reversed) { - g.removeEdge(e); - - var forwardName = label.forwardName; - delete label.reversed; - delete label.forwardName; - g.setEdge(e.w, e.v, label, forwardName); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules -var merge = __webpack_require__(98879); -// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules -var pick = __webpack_require__(81942); -// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js -var defaults = __webpack_require__(23068); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js - - -/** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ -function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !(0,isSymbol/* default */.A)(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; -} - -/* harmony default export */ const _baseExtremum = (baseExtremum); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js -/** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ -function baseGt(value, other) { - return value > other; -} - -/* harmony default export */ const _baseGt = (baseGt); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js - - - - -/** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ -function max(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseGt) - : undefined; -} - -/* harmony default export */ const lodash_es_max = (max); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; -} - -/* harmony default export */ const lodash_es_last = (last); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js -var _baseAssignValue = __webpack_require__(52528); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js - - - - -/** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ -function mapValues(object, iteratee) { - var result = {}; - iteratee = (0,_baseIteratee/* default */.A)(iteratee, 3); - - (0,_baseForOwn/* default */.A)(object, function(value, key, object) { - (0,_baseAssignValue/* default */.A)(result, key, iteratee(value, key, object)); - }); - return result; -} - -/* harmony default export */ const lodash_es_mapValues = (mapValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js -/** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ -function baseLt(value, other) { - return value < other; -} - -/* harmony default export */ const _baseLt = (baseLt); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js - - - - -/** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ -function min(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_min = (min); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js -var _root = __webpack_require__(41917); -;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js - - -/** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ -var now = function() { - return _root/* default */.A.Date.now(); -}; - -/* harmony default export */ const lodash_es_now = (now); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js - - - - - -/* - * Adds a dummy node to the graph and return v. - */ -function addDummyNode(g, type, attrs, name) { - var v; - do { - v = uniqueId/* default */.A(name); - } while (g.hasNode(v)); - - attrs.dummy = type; - g.setNode(v, attrs); - return v; -} - -/* - * Returns a new graph with only simple edges. Handles aggregation of data - * associated with multi-edges. - */ -function simplify(g) { - var simplified = new graphlib/* Graph */.T().setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - simplified.setNode(v, g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; - var label = g.edge(e); - simplified.setEdge(e.v, e.w, { - weight: simpleLabel.weight + label.weight, - minlen: Math.max(simpleLabel.minlen, label.minlen), - }); - }); - return simplified; -} - -function asNonCompoundGraph(g) { - var simplified = new graphlib/* Graph */.T({ multigraph: g.isMultigraph() }).setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - if (!g.children(v).length) { - simplified.setNode(v, g.node(v)); - } - }); - forEach/* default */.A(g.edges(), function (e) { - simplified.setEdge(e, g.edge(e)); - }); - return simplified; -} - -function successorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var sucs = {}; - _.forEach(g.outEdges(v), function (e) { - sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; - }); - return sucs; - }); - return _.zipObject(g.nodes(), weightMap); -} - -function predecessorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var preds = {}; - _.forEach(g.inEdges(v), function (e) { - preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; - }); - return preds; - }); - return _.zipObject(g.nodes(), weightMap); -} - -/* - * Finds where a line starting at point ({x, y}) would intersect a rectangle - * ({x, y, width, height}) if it were pointing at the rectangle's center. - */ -function intersectRect(rect, point) { - var x = rect.x; - var y = rect.y; - - // Rectangle intersection algorithm from: - // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes - var dx = point.x - x; - var dy = point.y - y; - var w = rect.width / 2; - var h = rect.height / 2; - - if (!dx && !dy) { - throw new Error('Not possible to find intersection inside of the rectangle'); - } - - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - // Intersection is top or bottom of rect. - if (dy < 0) { - h = -h; - } - sx = (h * dx) / dy; - sy = h; - } else { - // Intersection is left or right of rect. - if (dx < 0) { - w = -w; - } - sx = w; - sy = (w * dy) / dx; - } - - return { x: x + sx, y: y + sy }; -} - -/* - * Given a DAG with each node assigned "rank" and "order" properties, this - * function will produce a matrix with the ids of each node. - */ -function buildLayerMatrix(g) { - var layering = map/* default */.A(range/* default */.A(util_maxRank(g) + 1), function () { - return []; - }); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - var rank = node.rank; - if (!isUndefined/* default */.A(rank)) { - layering[rank][node.order] = v; - } - }); - return layering; -} - -/* - * Adjusts the ranks for all nodes in the graph such that all nodes v have - * rank(v) >= 0 and at least one node w has rank(w) = 0. - */ -function normalizeRanks(g) { - var min = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (has/* default */.A(node, 'rank')) { - node.rank -= min; - } - }); -} - -function removeEmptyRanks(g) { - // Ranks may not start at 0, so we need to offset them - var offset = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - - var layers = []; - forEach/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank - offset; - if (!layers[rank]) { - layers[rank] = []; - } - layers[rank].push(v); - }); - - var delta = 0; - var nodeRankFactor = g.graph().nodeRankFactor; - forEach/* default */.A(layers, function (vs, i) { - if (isUndefined/* default */.A(vs) && i % nodeRankFactor !== 0) { - --delta; - } else if (delta) { - forEach/* default */.A(vs, function (v) { - g.node(v).rank += delta; - }); - } - }); -} - -function addBorderNode(g, prefix, rank, order) { - var node = { - width: 0, - height: 0, - }; - if (arguments.length >= 4) { - node.rank = rank; - node.order = order; - } - return addDummyNode(g, 'border', node, prefix); -} - -function util_maxRank(g) { - return lodash_es_max( - map/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank; - if (!isUndefined/* default */.A(rank)) { - return rank; - } - }) - ); -} - -/* - * Partition a collection into two groups: `lhs` and `rhs`. If the supplied - * function returns true for an entry it goes into `lhs`. Otherwise it goes - * into `rhs. - */ -function partition(collection, fn) { - var result = { lhs: [], rhs: [] }; - forEach/* default */.A(collection, function (value) { - if (fn(value)) { - result.lhs.push(value); - } else { - result.rhs.push(value); - } - }); - return result; -} - -/* - * Returns a new function that wraps `fn` with a timer. The wrapper logs the - * time it takes to execute the function. - */ -function util_time(name, fn) { - var start = lodash_es_now(); - try { - return fn(); - } finally { - console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); - } -} - -function notime(name, fn) { - return fn(); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js - - - - - -function addBorderSegments(g) { - function dfs(v) { - var children = g.children(v); - var node = g.node(v); - if (children.length) { - forEach/* default */.A(children, dfs); - } - - if (has/* default */.A(node, 'minRank')) { - node.borderLeft = []; - node.borderRight = []; - for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { - add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); - add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); - } - } - } - - forEach/* default */.A(g.children(), dfs); -} - -function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { - var label = { width: 0, height: 0, rank: rank, borderType: prop }; - var prev = sgNode[prop][rank - 1]; - var curr = addDummyNode(g, 'border', label, prefix); - sgNode[prop][rank] = curr; - g.setParent(curr, sg); - if (prev) { - g.setEdge(prev, curr, { weight: 1 }); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js - - - - -function adjust(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'lr' || rankDir === 'rl') { - swapWidthHeight(g); - } -} - -function coordinate_system_undo(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'bt' || rankDir === 'rl') { - reverseY(g); - } - - if (rankDir === 'lr' || rankDir === 'rl') { - swapXY(g); - swapWidthHeight(g); - } -} - -function swapWidthHeight(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapWidthHeightOne(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - swapWidthHeightOne(g.edge(e)); - }); -} - -function swapWidthHeightOne(attrs) { - var w = attrs.width; - attrs.width = attrs.height; - attrs.height = w; -} - -function reverseY(g) { - forEach/* default */.A(g.nodes(), function (v) { - reverseYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, reverseYOne); - if (has/* default */.A(edge, 'y')) { - reverseYOne(edge); - } - }); -} - -function reverseYOne(attrs) { - attrs.y = -attrs.y; -} - -function swapXY(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapXYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, swapXYOne); - if (has/* default */.A(edge, 'x')) { - swapXYOne(edge); - } - }); -} - -function swapXYOne(attrs) { - var x = attrs.x; - attrs.x = attrs.y; - attrs.y = x; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js - - - - - -/* - * Breaks any long edges in the graph into short segments that span 1 layer - * each. This operation is undoable with the denormalize function. - * - * Pre-conditions: - * - * 1. The input graph is a DAG. - * 2. Each node in the graph has a "rank" property. - * - * Post-condition: - * - * 1. All edges in the graph have a length of 1. - * 2. Dummy nodes are added where edges have been split into segments. - * 3. The graph is augmented with a "dummyChains" attribute which contains - * the first dummy in each chain of dummy nodes produced. - */ -function normalize_run(g) { - g.graph().dummyChains = []; - forEach/* default */.A(g.edges(), function (edge) { - normalizeEdge(g, edge); - }); -} - -function normalizeEdge(g, e) { - var v = e.v; - var vRank = g.node(v).rank; - var w = e.w; - var wRank = g.node(w).rank; - var name = e.name; - var edgeLabel = g.edge(e); - var labelRank = edgeLabel.labelRank; - - if (wRank === vRank + 1) return; - - g.removeEdge(e); - - var dummy, attrs, i; - for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { - edgeLabel.points = []; - attrs = { - width: 0, - height: 0, - edgeLabel: edgeLabel, - edgeObj: e, - rank: vRank, - }; - dummy = addDummyNode(g, 'edge', attrs, '_d'); - if (vRank === labelRank) { - attrs.width = edgeLabel.width; - attrs.height = edgeLabel.height; - // @ts-expect-error - attrs.dummy = 'edge-label'; - // @ts-expect-error - attrs.labelpos = edgeLabel.labelpos; - } - g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); - if (i === 0) { - g.graph().dummyChains.push(dummy); - } - v = dummy; - } - - g.setEdge(v, w, { weight: edgeLabel.weight }, name); -} - -function normalize_undo(g) { - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var origLabel = node.edgeLabel; - var w; - g.setEdge(node.edgeObj, origLabel); - while (node.dummy) { - w = g.successors(v)[0]; - g.removeNode(v); - origLabel.points.push({ x: node.x, y: node.y }); - if (node.dummy === 'edge-label') { - origLabel.x = node.x; - origLabel.y = node.y; - origLabel.width = node.width; - origLabel.height = node.height; - } - v = w; - node = g.node(v); - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js - - - - -/** - * This method is like `_.min` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * the value is ranked. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Math - * @param {Array} array The array to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {*} Returns the minimum value. - * @example - * - * var objects = [{ 'n': 1 }, { 'n': 2 }]; - * - * _.minBy(objects, function(o) { return o.n; }); - * // => { 'n': 1 } - * - * // The `_.property` iteratee shorthand. - * _.minBy(objects, 'n'); - * // => { 'n': 1 } - */ -function minBy(array, iteratee) { - return (array && array.length) - ? _baseExtremum(array, (0,_baseIteratee/* default */.A)(iteratee, 2), _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_minBy = (minBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js - - - - -/* - * Initializes ranks for the input graph using the longest path algorithm. This - * algorithm scales well and is fast in practice, it yields rather poor - * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom - * ranks wide and leaving edges longer than necessary. However, due to its - * speed, this algorithm is good for getting an initial ranking that can be fed - * into other algorithms. - * - * This algorithm does not normalize layers because it will be used by other - * algorithms in most cases. If using this algorithm directly, be sure to - * run normalize at the end. - * - * Pre-conditions: - * - * 1. Input graph is a DAG. - * 2. Input graph node labels can be assigned properties. - * - * Post-conditions: - * - * 1. Each node will be assign an (unnormalized) "rank" property. - */ -function longestPath(g) { - var visited = {}; - - function dfs(v) { - var label = g.node(v); - if (has/* default */.A(visited, v)) { - return label.rank; - } - visited[v] = true; - - var rank = lodash_es_min( - map/* default */.A(g.outEdges(v), function (e) { - return dfs(e.w) - g.edge(e).minlen; - }) - ); - - if ( - rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 - rank === undefined || // return value of _.map([]) for Lodash 4 - rank === null - ) { - // return value of _.map([null]) - rank = 0; - } - - return (label.rank = rank); - } - - forEach/* default */.A(g.sources(), dfs); -} - -/* - * Returns the amount of slack for the given edge. The slack is defined as the - * difference between the length of the edge and its minimum length. - */ -function slack(g, e) { - return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js - - - - - - -/* - * Constructs a spanning tree with tight edges and adjusted the input node's - * ranks to achieve this. A tight edge is one that is has a length that matches - * its "minlen" attribute. - * - * The basic structure for this function is derived from Gansner, et al., "A - * Technique for Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a DAG. - * 2. Graph must be connected. - * 3. Graph must have at least one node. - * 5. Graph nodes must have been previously assigned a "rank" property that - * respects the "minlen" property of incident edges. - * 6. Graph edges must have a "minlen" property. - * - * Post-conditions: - * - * - Graph nodes will have their rank adjusted to ensure that all edges are - * tight. - * - * Returns a tree (undirected graph) that is constructed using only "tight" - * edges. - */ -function feasibleTree(g) { - var t = new graphlib/* Graph */.T({ directed: false }); - - // Choose arbitrary node from which to start our tree - var start = g.nodes()[0]; - var size = g.nodeCount(); - t.setNode(start, {}); - - var edge, delta; - while (tightTree(t, g) < size) { - edge = findMinSlackEdge(t, g); - delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); - shiftRanks(t, g, delta); - } - - return t; -} - -/* - * Finds a maximal tree of tight edges and returns the number of nodes in the - * tree. - */ -function tightTree(t, g) { - function dfs(v) { - forEach/* default */.A(g.nodeEdges(v), function (e) { - var edgeV = e.v, - w = v === edgeV ? e.w : edgeV; - if (!t.hasNode(w) && !slack(g, e)) { - t.setNode(w, {}); - t.setEdge(v, w, {}); - dfs(w); - } - }); - } - - forEach/* default */.A(t.nodes(), dfs); - return t.nodeCount(); -} - -/* - * Finds the edge with the smallest slack that is incident on tree and returns - * it. - */ -function findMinSlackEdge(t, g) { - return lodash_es_minBy(g.edges(), function (e) { - if (t.hasNode(e.v) !== t.hasNode(e.w)) { - return slack(g, e); - } - }); -} - -function shiftRanks(t, g, delta) { - forEach/* default */.A(t.nodes(), function (v) { - g.node(v).rank += delta; - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js - - - - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!(0,isArrayLike/* default */.A)(collection)) { - var iteratee = (0,_baseIteratee/* default */.A)(predicate, 3); - collection = (0,keys/* default */.A)(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; -} - -/* harmony default export */ const _createFind = (createFind); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js - - -/** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ -function toInteger(value) { - var result = (0,toFinite/* default */.A)(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; -} - -/* harmony default export */ const lodash_es_toInteger = (toInteger); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return (0,_baseFindIndex/* default */.A)(array, (0,_baseIteratee/* default */.A)(predicate, 3), index); -} - -/* harmony default export */ const lodash_es_findIndex = (findIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js - - - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = _createFind(lodash_es_findIndex); - -/* harmony default export */ const lodash_es_find = (find); - -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js - - - - - -var DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function dijkstra_dijkstra(g, source, weightFn, edgeFn) { - return runDijkstra( - g, - String(source), - weightFn || DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runDijkstra(g, source, weightFn, edgeFn) { - var results = {}; - var pq = new PriorityQueue(); - var v, vEntry; - - var updateNeighbors = function (edge) { - var w = edge.v !== v ? edge.v : edge.w; - var wEntry = results[w]; - var weight = weightFn(edge); - var distance = vEntry.distance + weight; - - if (weight < 0) { - throw new Error( - 'dijkstra does not allow negative edge weights. ' + - 'Bad edge: ' + - edge + - ' Weight: ' + - weight - ); - } - - if (distance < wEntry.distance) { - wEntry.distance = distance; - wEntry.predecessor = v; - pq.decrease(w, distance); - } - }; - - g.nodes().forEach(function (v) { - var distance = v === source ? 0 : Number.POSITIVE_INFINITY; - results[v] = { distance: distance }; - pq.add(v, distance); - }); - - while (pq.size() > 0) { - v = pq.removeMin(); - vEntry = results[v]; - if (vEntry.distance === Number.POSITIVE_INFINITY) { - break; - } - - edgeFn(v).forEach(updateNeighbors); - } - - return results; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js - - - - - -function dijkstraAll(g, weightFunc, edgeFunc) { - return _.transform( - g.nodes(), - function (acc, v) { - acc[v] = dijkstra(g, v, weightFunc, edgeFunc); - }, - {} - ); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js - - - - -var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function floydWarshall(g, weightFn, edgeFn) { - return runFloydWarshall( - g, - weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runFloydWarshall(g, weightFn, edgeFn) { - var results = {}; - var nodes = g.nodes(); - - nodes.forEach(function (v) { - results[v] = {}; - results[v][v] = { distance: 0 }; - nodes.forEach(function (w) { - if (v !== w) { - results[v][w] = { distance: Number.POSITIVE_INFINITY }; - } - }); - edgeFn(v).forEach(function (edge) { - var w = edge.v === v ? edge.w : edge.v; - var d = weightFn(edge); - results[v][w] = { distance: d, predecessor: v }; - }); - }); - - nodes.forEach(function (k) { - var rowK = results[k]; - nodes.forEach(function (i) { - var rowI = results[i]; - nodes.forEach(function (j) { - var ik = rowI[k]; - var kj = rowK[j]; - var ij = rowI[j]; - var altDistance = ik.distance + kj.distance; - if (altDistance < ij.distance) { - ij.distance = altDistance; - ij.predecessor = kj.predecessor; - } - }); - }); - }); - - return results; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules -var _baseKeys = __webpack_require__(69471); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules -var _baseGetTag = __webpack_require__(88496); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js - - - - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!(0,isArray/* default */.A)(value) && (0,isObjectLike/* default */.A)(value) && (0,_baseGetTag/* default */.A)(value) == stringTag); -} - -/* harmony default export */ const lodash_es_isString = (isString); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js - - -/** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -var asciiSize = (0,_baseProperty/* default */.A)('length'); - -/* harmony default export */ const _asciiSize = (asciiSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -/* harmony default export */ const _hasUnicode = (hasUnicode); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js -/** Used to compose unicode character classes. */ -var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', - _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', - _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', - _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', - _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, - _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', - rsCombo = '[' + _unicodeSize_rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - _unicodeSize_rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', - rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; -} - -/* harmony default export */ const _unicodeSize = (unicodeSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js - - - - -/** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ -function stringSize(string) { - return _hasUnicode(string) - ? _unicodeSize(string) - : _asciiSize(string); -} - -/* harmony default export */ const _stringSize = (stringSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js - - - - - - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ -function size(collection) { - if (collection == null) { - return 0; - } - if ((0,isArrayLike/* default */.A)(collection)) { - return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; - } - var tag = (0,_getTag/* default */.A)(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return (0,_baseKeys/* default */.A)(collection).length; -} - -/* harmony default export */ const lodash_es_size = (size); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js - - - - -topsort_topsort.CycleException = topsort_CycleException; - -function topsort_topsort(g) { - var visited = {}; - var stack = {}; - var results = []; - - function visit(node) { - if (has/* default */.A(stack, node)) { - throw new topsort_CycleException(); - } - - if (!has/* default */.A(visited, node)) { - stack[node] = true; - visited[node] = true; - forEach/* default */.A(g.predecessors(node), visit); - delete stack[node]; - results.push(node); - } - } - - forEach/* default */.A(g.sinks(), visit); - - if (lodash_es_size(visited) !== g.nodeCount()) { - throw new topsort_CycleException(); - } - - return results; -} - -function topsort_CycleException() {} -topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js - - - - -function isAcyclic(g) { - try { - topsort(g); - } catch (e) { - if (e instanceof CycleException) { - return false; - } - throw e; - } - return true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js - - - - -/* - * A helper that preforms a pre- or post-order traversal on the input graph - * and returns the nodes in the order they were visited. If the graph is - * undirected then this algorithm will navigate using neighbors. If the graph - * is directed then this algorithm will navigate using successors. - * - * Order must be one of "pre" or "post". - */ -function dfs(g, vs, order) { - if (!isArray/* default */.A(vs)) { - vs = [vs]; - } - - var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); - - var acc = []; - var visited = {}; - forEach/* default */.A(vs, function (v) { - if (!g.hasNode(v)) { - throw new Error('Graph does not have node: ' + v); - } - - doDfs(g, v, order === 'post', visited, navigation, acc); - }); - return acc; -} - -function doDfs(g, v, postorder, visited, navigation, acc) { - if (!has/* default */.A(visited, v)) { - visited[v] = true; - - if (!postorder) { - acc.push(v); - } - forEach/* default */.A(navigation(v), function (w) { - doDfs(g, w, postorder, visited, navigation, acc); - }); - if (postorder) { - acc.push(v); - } - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js - - - - -function postorder(g, vs) { - return dfs(g, vs, 'post'); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js - - - - -function preorder(g, vs) { - return dfs(g, vs, 'pre'); -} - -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules -var graph = __webpack_require__(73046); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js - - - - - - -function prim(g, weightFunc) { - var result = new Graph(); - var parents = {}; - var pq = new PriorityQueue(); - var v; - - function updateNeighbors(edge) { - var w = edge.v === v ? edge.w : edge.v; - var pri = pq.priority(w); - if (pri !== undefined) { - var edgeWeight = weightFunc(edge); - if (edgeWeight < pri) { - parents[w] = v; - pq.decrease(w, edgeWeight); - } - } - } - - if (g.nodeCount() === 0) { - return result; - } - - _.each(g.nodes(), function (v) { - pq.add(v, Number.POSITIVE_INFINITY); - result.setNode(v); - }); - - // Start from an arbitrary node - pq.decrease(g.nodes()[0], 0); - - var init = false; - while (pq.size() > 0) { - v = pq.removeMin(); - if (_.has(parents, v)) { - result.setEdge(v, parents[v]); - } else if (init) { - throw new Error('Input graph is not connected: ' + g); - } else { - init = true; - } - - g.nodeEdges(v).forEach(updateNeighbors); - } - - return result; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js - - - - - - - - - - - - - - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js - - - - - - - - -// Expose some internals for testing purposes -networkSimplex.initLowLimValues = initLowLimValues; -networkSimplex.initCutValues = initCutValues; -networkSimplex.calcCutValue = calcCutValue; -networkSimplex.leaveEdge = leaveEdge; -networkSimplex.enterEdge = enterEdge; -networkSimplex.exchangeEdges = exchangeEdges; - -/* - * The network simplex algorithm assigns ranks to each node in the input graph - * and iteratively improves the ranking to reduce the length of edges. - * - * Preconditions: - * - * 1. The input graph must be a DAG. - * 2. All nodes in the graph must have an object value. - * 3. All edges in the graph must have "minlen" and "weight" attributes. - * - * Postconditions: - * - * 1. All nodes in the graph will have an assigned "rank" attribute that has - * been optimized by the network simplex algorithm. Ranks start at 0. - * - * - * A rough sketch of the algorithm is as follows: - * - * 1. Assign initial ranks to each node. We use the longest path algorithm, - * which assigns ranks to the lowest position possible. In general this - * leads to very wide bottom ranks and unnecessarily long edges. - * 2. Construct a feasible tight tree. A tight tree is one such that all - * edges in the tree have no slack (difference between length of edge - * and minlen for the edge). This by itself greatly improves the assigned - * rankings by shorting edges. - * 3. Iteratively find edges that have negative cut values. Generally a - * negative cut value indicates that the edge could be removed and a new - * tree edge could be added to produce a more compact graph. - * - * Much of the algorithms here are derived from Gansner, et al., "A Technique - * for Drawing Directed Graphs." The structure of the file roughly follows the - * structure of the overall algorithm. - */ -function networkSimplex(g) { - g = simplify(g); - longestPath(g); - var t = feasibleTree(g); - initLowLimValues(t); - initCutValues(t, g); - - var e, f; - while ((e = leaveEdge(t))) { - f = enterEdge(t, g, e); - exchangeEdges(t, g, e, f); - } -} - -/* - * Initializes cut values for all edges in the tree. - */ -function initCutValues(t, g) { - var vs = postorder(t, t.nodes()); - vs = vs.slice(0, vs.length - 1); - forEach/* default */.A(vs, function (v) { - assignCutValue(t, g, v); - }); -} - -function assignCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - t.edge(child, parent).cutvalue = calcCutValue(t, g, child); -} - -/* - * Given the tight tree, its graph, and a child in the graph calculate and - * return the cut value for the edge between the child and its parent. - */ -function calcCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - // True if the child is on the tail end of the edge in the directed graph - var childIsTail = true; - // The graph's view of the tree edge we're inspecting - var graphEdge = g.edge(child, parent); - // The accumulated cut value for the edge between this node and its parent - var cutValue = 0; - - if (!graphEdge) { - childIsTail = false; - graphEdge = g.edge(parent, child); - } - - cutValue = graphEdge.weight; - - forEach/* default */.A(g.nodeEdges(child), function (e) { - var isOutEdge = e.v === child, - other = isOutEdge ? e.w : e.v; - - if (other !== parent) { - var pointsToHead = isOutEdge === childIsTail, - otherWeight = g.edge(e).weight; - - cutValue += pointsToHead ? otherWeight : -otherWeight; - if (isTreeEdge(t, child, other)) { - var otherCutValue = t.edge(child, other).cutvalue; - cutValue += pointsToHead ? -otherCutValue : otherCutValue; - } - } - }); - - return cutValue; -} - -function initLowLimValues(tree, root) { - if (arguments.length < 2) { - root = tree.nodes()[0]; - } - dfsAssignLowLim(tree, {}, 1, root); -} - -function dfsAssignLowLim(tree, visited, nextLim, v, parent) { - var low = nextLim; - var label = tree.node(v); - - visited[v] = true; - forEach/* default */.A(tree.neighbors(v), function (w) { - if (!has/* default */.A(visited, w)) { - nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); - } - }); - - label.low = low; - label.lim = nextLim++; - if (parent) { - label.parent = parent; - } else { - // TODO should be able to remove this when we incrementally update low lim - delete label.parent; - } - - return nextLim; -} - -function leaveEdge(tree) { - return lodash_es_find(tree.edges(), function (e) { - return tree.edge(e).cutvalue < 0; - }); -} - -function enterEdge(t, g, edge) { - var v = edge.v; - var w = edge.w; - - // For the rest of this function we assume that v is the tail and w is the - // head, so if we don't have this edge in the graph we should flip it to - // match the correct orientation. - if (!g.hasEdge(v, w)) { - v = edge.w; - w = edge.v; - } - - var vLabel = t.node(v); - var wLabel = t.node(w); - var tailLabel = vLabel; - var flip = false; - - // If the root is in the tail of the edge then we need to flip the logic that - // checks for the head and tail nodes in the candidates function below. - if (vLabel.lim > wLabel.lim) { - tailLabel = wLabel; - flip = true; - } - - var candidates = filter/* default */.A(g.edges(), function (edge) { - return ( - flip === isDescendant(t, t.node(edge.v), tailLabel) && - flip !== isDescendant(t, t.node(edge.w), tailLabel) - ); - }); - - return lodash_es_minBy(candidates, function (edge) { - return slack(g, edge); - }); -} - -function exchangeEdges(t, g, e, f) { - var v = e.v; - var w = e.w; - t.removeEdge(v, w); - t.setEdge(f.v, f.w, {}); - initLowLimValues(t); - initCutValues(t, g); - updateRanks(t, g); -} - -function updateRanks(t, g) { - var root = lodash_es_find(t.nodes(), function (v) { - return !g.node(v).parent; - }); - var vs = preorder(t, root); - vs = vs.slice(1); - forEach/* default */.A(vs, function (v) { - var parent = t.node(v).parent, - edge = g.edge(v, parent), - flipped = false; - - if (!edge) { - edge = g.edge(parent, v); - flipped = true; - } - - g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); - }); -} - -/* - * Returns true if the edge is in the tree. - */ -function isTreeEdge(tree, u, v) { - return tree.hasEdge(u, v); -} - -/* - * Returns true if the specified node is descendant of the root node per the - * assigned low and lim attributes in the tree. - */ -function isDescendant(tree, vLabel, rootLabel) { - return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js - - - - - - -/* - * Assigns a rank to each node in the input graph that respects the "minlen" - * constraint specified on edges between nodes. - * - * This basic structure is derived from Gansner, et al., "A Technique for - * Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a connected DAG - * 2. Graph nodes must be objects - * 3. Graph edges must have "weight" and "minlen" attributes - * - * Post-conditions: - * - * 1. Graph nodes will have a "rank" attribute based on the results of the - * algorithm. Ranks can start at any index (including negative), we'll - * fix them up later. - */ -function rank(g) { - switch (g.graph().ranker) { - case 'network-simplex': - networkSimplexRanker(g); - break; - case 'tight-tree': - tightTreeRanker(g); - break; - case 'longest-path': - longestPathRanker(g); - break; - default: - networkSimplexRanker(g); - } -} - -// A fast and simple ranker, but results are far from optimal. -var longestPathRanker = longestPath; - -function tightTreeRanker(g) { - longestPath(g); - feasibleTree(g); -} - -function networkSimplexRanker(g) { - networkSimplex(g); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js - - - - - -/* - * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, - * adds appropriate edges to ensure that all cluster nodes are placed between - * these boundries, and ensures that the graph is connected. - * - * In addition we ensure, through the use of the minlen property, that nodes - * and subgraph border nodes to not end up on the same rank. - * - * Preconditions: - * - * 1. Input graph is a DAG - * 2. Nodes in the input graph has a minlen attribute - * - * Postconditions: - * - * 1. Input graph is connected. - * 2. Dummy nodes are added for the tops and bottoms of subgraphs. - * 3. The minlen attribute for nodes is adjusted to ensure nodes do not - * get placed on the same rank as subgraph border nodes. - * - * The nesting graph idea comes from Sander, "Layout of Compound Directed - * Graphs." - */ -function nesting_graph_run(g) { - var root = addDummyNode(g, 'root', {}, '_root'); - var depths = treeDepths(g); - var height = lodash_es_max(values/* default */.A(depths)) - 1; // Note: depths is an Object not an array - var nodeSep = 2 * height + 1; - - g.graph().nestingRoot = root; - - // Multiply minlen by nodeSep to align nodes on non-border ranks. - forEach/* default */.A(g.edges(), function (e) { - g.edge(e).minlen *= nodeSep; - }); - - // Calculate a weight that is sufficient to keep subgraphs vertically compact - var weight = sumWeights(g) + 1; - - // Create border nodes and link them up - forEach/* default */.A(g.children(), function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - }); - - // Save the multiplier for node layers for later removal of empty border - // layers. - g.graph().nodeRankFactor = nodeSep; -} - -function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { - var children = g.children(v); - if (!children.length) { - if (v !== root) { - g.setEdge(root, v, { weight: 0, minlen: nodeSep }); - } - return; - } - - var top = addBorderNode(g, '_bt'); - var bottom = addBorderNode(g, '_bb'); - var label = g.node(v); - - g.setParent(top, v); - label.borderTop = top; - g.setParent(bottom, v); - label.borderBottom = bottom; - - forEach/* default */.A(children, function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - - var childNode = g.node(child); - var childTop = childNode.borderTop ? childNode.borderTop : child; - var childBottom = childNode.borderBottom ? childNode.borderBottom : child; - var thisWeight = childNode.borderTop ? weight : 2 * weight; - var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; - - g.setEdge(top, childTop, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - - g.setEdge(childBottom, bottom, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - }); - - if (!g.parent(v)) { - g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); - } -} - -function treeDepths(g) { - var depths = {}; - function dfs(v, depth) { - var children = g.children(v); - if (children && children.length) { - forEach/* default */.A(children, function (child) { - dfs(child, depth + 1); - }); - } - depths[v] = depth; - } - forEach/* default */.A(g.children(), function (v) { - dfs(v, 1); - }); - return depths; -} - -function sumWeights(g) { - return reduce/* default */.A( - g.edges(), - function (acc, e) { - return acc + g.edge(e).weight; - }, - 0 - ); -} - -function cleanup(g) { - var graphLabel = g.graph(); - g.removeNode(graphLabel.nestingRoot); - delete graphLabel.nestingRoot; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.nestingEdge) { - g.removeEdge(e); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules -var _baseClone = __webpack_require__(91641); -;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return (0,_baseClone/* default */.A)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js - - - - -function addSubgraphConstraints(g, cg, vs) { - var prev = {}, - rootPrev; - - forEach/* default */.A(vs, function (v) { - var child = g.parent(v), - parent, - prevChild; - while (child) { - parent = g.parent(child); - if (parent) { - prevChild = prev[parent]; - prev[parent] = child; - } else { - prevChild = rootPrev; - rootPrev = child; - } - if (prevChild && prevChild !== child) { - cg.setEdge(prevChild, child); - return; - } - child = parent; - } - }); - - /* - function dfs(v) { - var children = v ? g.children(v) : g.children(); - if (children.length) { - var min = Number.POSITIVE_INFINITY, - subgraphs = []; - _.each(children, function(child) { - var childMin = dfs(child); - if (g.children(child).length) { - subgraphs.push({ v: child, order: childMin }); - } - min = Math.min(min, childMin); - }); - _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { - cg.setEdge(prev.v, curr.v); - return curr; - }); - return min; - } - return g.node(v).order; - } - dfs(undefined); - */ -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js - - - - - -/* - * Constructs a graph that can be used to sort a layer of nodes. The graph will - * contain all base and subgraph nodes from the request layer in their original - * hierarchy and any edges that are incident on these nodes and are of the type - * requested by the "relationship" parameter. - * - * Nodes from the requested rank that do not have parents are assigned a root - * node in the output graph, which is set in the root graph attribute. This - * makes it easy to walk the hierarchy of movable nodes during ordering. - * - * Pre-conditions: - * - * 1. Input graph is a DAG - * 2. Base nodes in the input graph have a rank attribute - * 3. Subgraph nodes in the input graph has minRank and maxRank attributes - * 4. Edges have an assigned weight - * - * Post-conditions: - * - * 1. Output graph has all nodes in the movable rank with preserved - * hierarchy. - * 2. Root nodes in the movable layer are made children of the node - * indicated by the root attribute of the graph. - * 3. Non-movable nodes incident on movable nodes, selected by the - * relationship parameter, are included in the graph (without hierarchy). - * 4. Edges incident on movable nodes, selected by the relationship - * parameter, are added to the output graph. - * 5. The weights for copied edges are aggregated as need, since the output - * graph is not a multi-graph. - */ -function buildLayerGraph(g, rank, relationship) { - var root = createRootNode(g), - result = new graphlib/* Graph */.T({ compound: true }) - .setGraph({ root: root }) - .setDefaultNodeLabel(function (v) { - return g.node(v); - }); - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v), - parent = g.parent(v); - - if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { - result.setNode(v); - result.setParent(v, parent || root); - - // This assumes we have only short edges! - forEach/* default */.A(g[relationship](v), function (e) { - var u = e.v === v ? e.w : e.v, - edge = result.edge(u, v), - weight = !isUndefined/* default */.A(edge) ? edge.weight : 0; - result.setEdge(u, v, { weight: g.edge(e).weight + weight }); - }); - - if (has/* default */.A(node, 'minRank')) { - result.setNode(v, { - borderLeft: node.borderLeft[rank], - borderRight: node.borderRight[rank], - }); - } - } - }); - - return result; -} - -function createRootNode(g) { - var v; - while (g.hasNode((v = uniqueId/* default */.A('_root')))); - return v; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js -/** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ -function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; -} - -/* harmony default export */ const _baseZipObject = (baseZipObject); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js - - - -/** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ -function zipObject(props, values) { - return _baseZipObject(props || [], values || [], _assignValue/* default */.A); -} - -/* harmony default export */ const lodash_es_zipObject = (zipObject); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js -var _baseMap = __webpack_require__(52568); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js -/** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ -function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; -} - -/* harmony default export */ const _baseSortBy = (baseSortBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js - - -/** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ -function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = (0,isSymbol/* default */.A)(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = (0,isSymbol/* default */.A)(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; -} - -/* harmony default export */ const _compareAscending = (compareAscending); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js - - -/** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ -function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = _compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; -} - -/* harmony default export */ const _compareMultiple = (compareMultiple); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js - - - - - - - - - - -/** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ -function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - if ((0,isArray/* default */.A)(iteratee)) { - return function(value) { - return (0,_baseGet/* default */.A)(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } - } - return iteratee; - }); - } else { - iteratees = [identity/* default */.A]; - } - - var index = -1; - iteratees = (0,_arrayMap/* default */.A)(iteratees, (0,_baseUnary/* default */.A)(_baseIteratee/* default */.A)); - - var result = (0,_baseMap/* default */.A)(collection, function(value, key, collection) { - var criteria = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return _baseSortBy(result, function(object, other) { - return _compareMultiple(object, other, orders); - }); -} - -/* harmony default export */ const _baseOrderBy = (baseOrderBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js - - - - - -/** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 30 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] - */ -var sortBy = (0,_baseRest/* default */.A)(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && (0,_isIterateeCall/* default */.A)(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && (0,_isIterateeCall/* default */.A)(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return _baseOrderBy(collection, (0,_baseFlatten/* default */.A)(iteratees, 1), []); -}); - -/* harmony default export */ const lodash_es_sortBy = (sortBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js - - - - -/* - * A function that takes a layering (an array of layers, each with an array of - * ordererd nodes) and a graph and returns a weighted crossing count. - * - * Pre-conditions: - * - * 1. Input graph must be simple (not a multigraph), directed, and include - * only simple edges. - * 2. Edges in the input graph must have assigned weights. - * - * Post-conditions: - * - * 1. The graph and layering matrix are left unchanged. - * - * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." - */ -function crossCount(g, layering) { - var cc = 0; - for (var i = 1; i < layering.length; ++i) { - cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); - } - return cc; -} - -function twoLayerCrossCount(g, northLayer, southLayer) { - // Sort all of the edges between the north and south layers by their position - // in the north layer and then the south. Map these edges to the position of - // their head in the south layer. - var southPos = lodash_es_zipObject( - southLayer, - map/* default */.A(southLayer, function (v, i) { - return i; - }) - ); - var southEntries = flatten/* default */.A( - map/* default */.A(northLayer, function (v) { - return lodash_es_sortBy( - map/* default */.A(g.outEdges(v), function (e) { - return { pos: southPos[e.w], weight: g.edge(e).weight }; - }), - 'pos' - ); - }) - ); - - // Build the accumulator tree - var firstIndex = 1; - while (firstIndex < southLayer.length) firstIndex <<= 1; - var treeSize = 2 * firstIndex - 1; - firstIndex -= 1; - var tree = map/* default */.A(new Array(treeSize), function () { - return 0; - }); - - // Calculate the weighted crossings - var cc = 0; - forEach/* default */.A( - // @ts-expect-error - southEntries.forEach(function (entry) { - var index = entry.pos + firstIndex; - tree[index] += entry.weight; - var weightSum = 0; - // @ts-expect-error - while (index > 0) { - // @ts-expect-error - if (index % 2) { - weightSum += tree[index + 1]; - } - // @ts-expect-error - index = (index - 1) >> 1; - tree[index] += entry.weight; - } - cc += entry.weight * weightSum; - }) - ); - - return cc; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js - - - - -/* - * Assigns an initial order value for each node by performing a DFS search - * starting from nodes in the first rank. Nodes are assigned an order in their - * rank as they are first visited. - * - * This approach comes from Gansner, et al., "A Technique for Drawing Directed - * Graphs." - * - * Returns a layering matrix with an array per layer and each layer sorted by - * the order of its nodes. - */ -function initOrder(g) { - var visited = {}; - var simpleNodes = filter/* default */.A(g.nodes(), function (v) { - return !g.children(v).length; - }); - var maxRank = lodash_es_max( - map/* default */.A(simpleNodes, function (v) { - return g.node(v).rank; - }) - ); - var layers = map/* default */.A(range/* default */.A(maxRank + 1), function () { - return []; - }); - - function dfs(v) { - if (has/* default */.A(visited, v)) return; - visited[v] = true; - var node = g.node(v); - layers[node.rank].push(v); - forEach/* default */.A(g.successors(v), dfs); - } - - var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { - return g.node(v).rank; - }); - forEach/* default */.A(orderedVs, dfs); - - return layers; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js - - - - -function barycenter(g, movable) { - return map/* default */.A(movable, function (v) { - var inV = g.inEdges(v); - if (!inV.length) { - return { v: v }; - } else { - var result = reduce/* default */.A( - inV, - function (acc, e) { - var edge = g.edge(e), - nodeU = g.node(e.v); - return { - sum: acc.sum + edge.weight * nodeU.order, - weight: acc.weight + edge.weight, - }; - }, - { sum: 0, weight: 0 } - ); - - return { - v: v, - barycenter: result.sum / result.weight, - weight: result.weight, - }; - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js - - - - -/* - * Given a list of entries of the form {v, barycenter, weight} and a - * constraint graph this function will resolve any conflicts between the - * constraint graph and the barycenters for the entries. If the barycenters for - * an entry would violate a constraint in the constraint graph then we coalesce - * the nodes in the conflict into a new node that respects the contraint and - * aggregates barycenter and weight information. - * - * This implementation is based on the description in Forster, "A Fast and - * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it - * differs in some specific details. - * - * Pre-conditions: - * - * 1. Each entry has the form {v, barycenter, weight}, or if the node has - * no barycenter, then {v}. - * - * Returns: - * - * A new list of entries of the form {vs, i, barycenter, weight}. The list - * `vs` may either be a singleton or it may be an aggregation of nodes - * ordered such that they do not violate constraints from the constraint - * graph. The property `i` is the lowest original index of any of the - * elements in `vs`. - */ -function resolveConflicts(entries, cg) { - var mappedEntries = {}; - forEach/* default */.A(entries, function (entry, i) { - var tmp = (mappedEntries[entry.v] = { - indegree: 0, - in: [], - out: [], - vs: [entry.v], - i: i, - }); - if (!isUndefined/* default */.A(entry.barycenter)) { - // @ts-expect-error - tmp.barycenter = entry.barycenter; - // @ts-expect-error - tmp.weight = entry.weight; - } - }); - - forEach/* default */.A(cg.edges(), function (e) { - var entryV = mappedEntries[e.v]; - var entryW = mappedEntries[e.w]; - if (!isUndefined/* default */.A(entryV) && !isUndefined/* default */.A(entryW)) { - entryW.indegree++; - entryV.out.push(mappedEntries[e.w]); - } - }); - - var sourceSet = filter/* default */.A(mappedEntries, function (entry) { - // @ts-expect-error - return !entry.indegree; - }); - - return doResolveConflicts(sourceSet); -} - -function doResolveConflicts(sourceSet) { - var entries = []; - - function handleIn(vEntry) { - return function (uEntry) { - if (uEntry.merged) { - return; - } - if ( - isUndefined/* default */.A(uEntry.barycenter) || - isUndefined/* default */.A(vEntry.barycenter) || - uEntry.barycenter >= vEntry.barycenter - ) { - mergeEntries(vEntry, uEntry); - } - }; - } - - function handleOut(vEntry) { - return function (wEntry) { - wEntry['in'].push(vEntry); - if (--wEntry.indegree === 0) { - sourceSet.push(wEntry); - } - }; - } - - while (sourceSet.length) { - var entry = sourceSet.pop(); - entries.push(entry); - forEach/* default */.A(entry['in'].reverse(), handleIn(entry)); - forEach/* default */.A(entry.out, handleOut(entry)); - } - - return map/* default */.A( - filter/* default */.A(entries, function (entry) { - return !entry.merged; - }), - function (entry) { - return pick/* default */.A(entry, ['vs', 'i', 'barycenter', 'weight']); - } - ); -} - -function mergeEntries(target, source) { - var sum = 0; - var weight = 0; - - if (target.weight) { - sum += target.barycenter * target.weight; - weight += target.weight; - } - - if (source.weight) { - sum += source.barycenter * source.weight; - weight += source.weight; - } - - target.vs = source.vs.concat(target.vs); - target.barycenter = sum / weight; - target.weight = weight; - target.i = Math.min(source.i, target.i); - source.merged = true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js - - - - - -function sort(entries, biasRight) { - var parts = partition(entries, function (entry) { - return has/* default */.A(entry, 'barycenter'); - }); - var sortable = parts.lhs, - unsortable = lodash_es_sortBy(parts.rhs, function (entry) { - return -entry.i; - }), - vs = [], - sum = 0, - weight = 0, - vsIndex = 0; - - sortable.sort(compareWithBias(!!biasRight)); - - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - - forEach/* default */.A(sortable, function (entry) { - vsIndex += entry.vs.length; - vs.push(entry.vs); - sum += entry.barycenter * entry.weight; - weight += entry.weight; - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - }); - - var result = { vs: flatten/* default */.A(vs) }; - if (weight) { - result.barycenter = sum / weight; - result.weight = weight; - } - return result; -} - -function consumeUnsortable(vs, unsortable, index) { - var last; - while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { - unsortable.pop(); - vs.push(last.vs); - index++; - } - return index; -} - -function compareWithBias(bias) { - return function (entryV, entryW) { - if (entryV.barycenter < entryW.barycenter) { - return -1; - } else if (entryV.barycenter > entryW.barycenter) { - return 1; - } - - return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; - }; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js - - - - - - - -function sortSubgraph(g, v, cg, biasRight) { - var movable = g.children(v); - var node = g.node(v); - var bl = node ? node.borderLeft : undefined; - var br = node ? node.borderRight : undefined; - var subgraphs = {}; - - if (bl) { - movable = filter/* default */.A(movable, function (w) { - return w !== bl && w !== br; - }); - } - - var barycenters = barycenter(g, movable); - forEach/* default */.A(barycenters, function (entry) { - if (g.children(entry.v).length) { - var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); - subgraphs[entry.v] = subgraphResult; - if (has/* default */.A(subgraphResult, 'barycenter')) { - mergeBarycenters(entry, subgraphResult); - } - } - }); - - var entries = resolveConflicts(barycenters, cg); - expandSubgraphs(entries, subgraphs); - - var result = sort(entries, biasRight); - - if (bl) { - result.vs = flatten/* default */.A([bl, result.vs, br]); - if (g.predecessors(bl).length) { - var blPred = g.node(g.predecessors(bl)[0]), - brPred = g.node(g.predecessors(br)[0]); - if (!has/* default */.A(result, 'barycenter')) { - result.barycenter = 0; - result.weight = 0; - } - result.barycenter = - (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); - result.weight += 2; - } - } - - return result; -} - -function expandSubgraphs(entries, subgraphs) { - forEach/* default */.A(entries, function (entry) { - entry.vs = flatten/* default */.A( - entry.vs.map(function (v) { - if (subgraphs[v]) { - return subgraphs[v].vs; - } - return v; - }) - ); - }); -} - -function mergeBarycenters(target, other) { - if (!isUndefined/* default */.A(target.barycenter)) { - target.barycenter = - (target.barycenter * target.weight + other.barycenter * other.weight) / - (target.weight + other.weight); - target.weight += other.weight; - } else { - target.barycenter = other.barycenter; - target.weight = other.weight; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js - - - - - - - - - - - -/* - * Applies heuristics to minimize edge crossings in the graph and sets the best - * order solution as an order attribute on each node. - * - * Pre-conditions: - * - * 1. Graph must be DAG - * 2. Graph nodes must be objects with a "rank" attribute - * 3. Graph edges must have the "weight" attribute - * - * Post-conditions: - * - * 1. Graph nodes will have an "order" attribute based on the results of the - * algorithm. - */ -function order(g) { - var maxRank = util_maxRank(g), - downLayerGraphs = buildLayerGraphs(g, range/* default */.A(1, maxRank + 1), 'inEdges'), - upLayerGraphs = buildLayerGraphs(g, range/* default */.A(maxRank - 1, -1, -1), 'outEdges'); - - var layering = initOrder(g); - assignOrder(g, layering); - - var bestCC = Number.POSITIVE_INFINITY, - best; - - for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { - sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); - - layering = buildLayerMatrix(g); - var cc = crossCount(g, layering); - if (cc < bestCC) { - lastBest = 0; - best = lodash_es_cloneDeep(layering); - bestCC = cc; - } - } - - assignOrder(g, best); -} - -function buildLayerGraphs(g, ranks, relationship) { - return map/* default */.A(ranks, function (rank) { - return buildLayerGraph(g, rank, relationship); - }); -} - -function sweepLayerGraphs(layerGraphs, biasRight) { - var cg = new graphlib/* Graph */.T(); - forEach/* default */.A(layerGraphs, function (lg) { - var root = lg.graph().root; - var sorted = sortSubgraph(lg, root, cg, biasRight); - forEach/* default */.A(sorted.vs, function (v, i) { - lg.node(v).order = i; - }); - addSubgraphConstraints(lg, cg, sorted.vs); - }); -} - -function assignOrder(g, layering) { - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, i) { - g.node(v).order = i; - }); - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js - - - - -function parentDummyChains(g) { - var postorderNums = parent_dummy_chains_postorder(g); - - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var edgeObj = node.edgeObj; - var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); - var path = pathData.path; - var lca = pathData.lca; - var pathIdx = 0; - var pathV = path[pathIdx]; - var ascending = true; - - while (v !== edgeObj.w) { - node = g.node(v); - - if (ascending) { - while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { - pathIdx++; - } - - if (pathV === lca) { - ascending = false; - } - } - - if (!ascending) { - while ( - pathIdx < path.length - 1 && - g.node((pathV = path[pathIdx + 1])).minRank <= node.rank - ) { - pathIdx++; - } - pathV = path[pathIdx]; - } - - g.setParent(v, pathV); - v = g.successors(v)[0]; - } - }); -} - -// Find a path from v to w through the lowest common ancestor (LCA). Return the -// full path and the LCA. -function findPath(g, postorderNums, v, w) { - var vPath = []; - var wPath = []; - var low = Math.min(postorderNums[v].low, postorderNums[w].low); - var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); - var parent; - var lca; - - // Traverse up from v to find the LCA - parent = v; - do { - parent = g.parent(parent); - vPath.push(parent); - } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); - lca = parent; - - // Traverse from w to LCA - parent = w; - while ((parent = g.parent(parent)) !== lca) { - wPath.push(parent); - } - - return { path: vPath.concat(wPath.reverse()), lca: lca }; -} - -function parent_dummy_chains_postorder(g) { - var result = {}; - var lim = 0; - - function dfs(v) { - var low = lim; - forEach/* default */.A(g.children(v), dfs); - result[v] = { low: low, lim: lim++ }; - } - forEach/* default */.A(g.children(), dfs); - - return result; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js -var _castFunction = __webpack_require__(99922); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js - - - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && (0,_baseForOwn/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee)); -} - -/* harmony default export */ const lodash_es_forOwn = (forOwn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules -var _baseFor = __webpack_require__(4574); -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js - - - - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : (0,_baseFor/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee), keysIn/* default */.A); -} - -/* harmony default export */ const lodash_es_forIn = (forIn); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js - - - - -/* - * This module provides coordinate assignment based on Brandes and Köpf, "Fast - * and Simple Horizontal Coordinate Assignment." - */ - - - -/* - * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" - * property. A type-1 conflict is one where a non-inner segment crosses an - * inner segment. An inner segment is an edge with both incident nodes marked - * with the "dummy" property. - * - * This algorithm scans layer by layer, starting with the second, for type-1 - * conflicts between the current layer and the previous layer. For each layer - * it scans the nodes from left to right until it reaches one that is incident - * on an inner segment. It then scans predecessors to determine if they have - * edges that cross that inner segment. At the end a final scan is done for all - * nodes on the current rank to see if they cross the last visited inner - * segment. - * - * This algorithm (safely) assumes that a dummy node will only be incident on a - * single node in the layers being scanned. - */ -function findType1Conflicts(g, layering) { - var conflicts = {}; - - function visitLayer(prevLayer, layer) { - var // last visited node in the previous layer that is incident on an inner - // segment. - k0 = 0, - // Tracks the last node in this layer scanned for crossings with a type-1 - // segment. - scanPos = 0, - prevLayerLength = prevLayer.length, - lastNode = lodash_es_last(layer); - - forEach/* default */.A(layer, function (v, i) { - var w = findOtherInnerSegmentNode(g, v), - k1 = w ? g.node(w).order : prevLayerLength; - - if (w || v === lastNode) { - forEach/* default */.A(layer.slice(scanPos, i + 1), function (scanNode) { - forEach/* default */.A(g.predecessors(scanNode), function (u) { - var uLabel = g.node(u), - uPos = uLabel.order; - if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { - addConflict(conflicts, u, scanNode); - } - }); - }); - // @ts-expect-error - scanPos = i + 1; - k0 = k1; - } - }); - - return layer; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findType2Conflicts(g, layering) { - var conflicts = {}; - - function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { - var v; - forEach/* default */.A(range/* default */.A(southPos, southEnd), function (i) { - v = south[i]; - if (g.node(v).dummy) { - forEach/* default */.A(g.predecessors(v), function (u) { - var uNode = g.node(u); - if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { - addConflict(conflicts, u, v); - } - }); - } - }); - } - - function visitLayer(north, south) { - var prevNorthPos = -1, - nextNorthPos, - southPos = 0; - - forEach/* default */.A(south, function (v, southLookahead) { - if (g.node(v).dummy === 'border') { - var predecessors = g.predecessors(v); - if (predecessors.length) { - nextNorthPos = g.node(predecessors[0]).order; - scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); - // @ts-expect-error - southPos = southLookahead; - prevNorthPos = nextNorthPos; - } - } - scan(south, southPos, south.length, nextNorthPos, north.length); - }); - - return south; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findOtherInnerSegmentNode(g, v) { - if (g.node(v).dummy) { - return lodash_es_find(g.predecessors(v), function (u) { - return g.node(u).dummy; - }); - } -} - -function addConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - - var conflictsV = conflicts[v]; - if (!conflictsV) { - conflicts[v] = conflictsV = {}; - } - conflictsV[w] = true; -} - -function hasConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - return has/* default */.A(conflicts[v], w); -} - -/* - * Try to align nodes into vertical "blocks" where possible. This algorithm - * attempts to align a node with one of its median neighbors. If the edge - * connecting a neighbor is a type-1 conflict then we ignore that possibility. - * If a previous node has already formed a block with a node after the node - * we're trying to form a block with, we also ignore that possibility - our - * blocks would be split in that scenario. - */ -function verticalAlignment(g, layering, conflicts, neighborFn) { - var root = {}, - align = {}, - pos = {}; - - // We cache the position here based on the layering because the graph and - // layering may be out of sync. The layering matrix is manipulated to - // generate different extreme alignments. - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, order) { - root[v] = v; - align[v] = v; - pos[v] = order; - }); - }); - - forEach/* default */.A(layering, function (layer) { - var prevIdx = -1; - forEach/* default */.A(layer, function (v) { - var ws = neighborFn(v); - if (ws.length) { - ws = lodash_es_sortBy(ws, function (w) { - return pos[w]; - }); - var mp = (ws.length - 1) / 2; - for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { - var w = ws[i]; - if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { - align[w] = v; - align[v] = root[v] = root[w]; - prevIdx = pos[w]; - } - } - } - }); - }); - - return { root: root, align: align }; -} - -function horizontalCompaction(g, layering, root, align, reverseSep) { - // This portion of the algorithm differs from BK due to a number of problems. - // Instead of their algorithm we construct a new block graph and do two - // sweeps. The first sweep places blocks with the smallest possible - // coordinates. The second sweep removes unused space by moving blocks to the - // greatest coordinates without violating separation. - var xs = {}, - blockG = buildBlockGraph(g, layering, root, reverseSep), - borderType = reverseSep ? 'borderLeft' : 'borderRight'; - - function iterate(setXsFunc, nextNodesFunc) { - var stack = blockG.nodes(); - var elem = stack.pop(); - var visited = {}; - while (elem) { - if (visited[elem]) { - setXsFunc(elem); - } else { - visited[elem] = true; - stack.push(elem); - stack = stack.concat(nextNodesFunc(elem)); - } - - elem = stack.pop(); - } - } - - // First pass, assign smallest coordinates - function pass1(elem) { - xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { - return Math.max(acc, xs[e.v] + blockG.edge(e)); - }, 0); - } - - // Second pass, assign greatest coordinates - function pass2(elem) { - var min = blockG.outEdges(elem).reduce(function (acc, e) { - return Math.min(acc, xs[e.w] - blockG.edge(e)); - }, Number.POSITIVE_INFINITY); - - var node = g.node(elem); - if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { - xs[elem] = Math.max(xs[elem], min); - } - } - - iterate(pass1, blockG.predecessors.bind(blockG)); - iterate(pass2, blockG.successors.bind(blockG)); - - // Assign x coordinates to all nodes - forEach/* default */.A(align, function (v) { - xs[v] = xs[root[v]]; - }); - - return xs; -} - -function buildBlockGraph(g, layering, root, reverseSep) { - var blockGraph = new graphlib/* Graph */.T(), - graphLabel = g.graph(), - sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); - - forEach/* default */.A(layering, function (layer) { - var u; - forEach/* default */.A(layer, function (v) { - var vRoot = root[v]; - blockGraph.setNode(vRoot); - if (u) { - var uRoot = root[u], - prevMax = blockGraph.edge(uRoot, vRoot); - blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); - } - u = v; - }); - }); - - return blockGraph; -} - -/* - * Returns the alignment that has the smallest width of the given alignments. - */ -function findSmallestWidthAlignment(g, xss) { - return lodash_es_minBy(values/* default */.A(xss), function (xs) { - var max = Number.NEGATIVE_INFINITY; - var min = Number.POSITIVE_INFINITY; - - lodash_es_forIn(xs, function (x, v) { - var halfWidth = width(g, v) / 2; - - max = Math.max(x + halfWidth, max); - min = Math.min(x - halfWidth, min); - }); - - return max - min; - }); -} - -/* - * Align the coordinates of each of the layout alignments such that - * left-biased alignments have their minimum coordinate at the same point as - * the minimum coordinate of the smallest width alignment and right-biased - * alignments have their maximum coordinate at the same point as the maximum - * coordinate of the smallest width alignment. - */ -function alignCoordinates(xss, alignTo) { - var alignToVals = values/* default */.A(alignTo), - alignToMin = lodash_es_min(alignToVals), - alignToMax = lodash_es_max(alignToVals); - - forEach/* default */.A(['u', 'd'], function (vert) { - forEach/* default */.A(['l', 'r'], function (horiz) { - var alignment = vert + horiz, - xs = xss[alignment], - delta; - if (xs === alignTo) return; - - var xsVals = values/* default */.A(xs); - delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); - - if (delta) { - xss[alignment] = lodash_es_mapValues(xs, function (x) { - return x + delta; - }); - } - }); - }); -} - -function balance(xss, align) { - return lodash_es_mapValues(xss.ul, function (ignore, v) { - if (align) { - return xss[align.toLowerCase()][v]; - } else { - var xs = lodash_es_sortBy(map/* default */.A(xss, v)); - return (xs[1] + xs[2]) / 2; - } - }); -} - -function positionX(g) { - var layering = buildLayerMatrix(g); - var conflicts = merge/* default */.A(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); - - var xss = {}; - var adjustedLayering; - forEach/* default */.A(['u', 'd'], function (vert) { - adjustedLayering = vert === 'u' ? layering : values/* default */.A(layering).reverse(); - forEach/* default */.A(['l', 'r'], function (horiz) { - if (horiz === 'r') { - adjustedLayering = map/* default */.A(adjustedLayering, function (inner) { - return values/* default */.A(inner).reverse(); - }); - } - - var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); - var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); - var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); - if (horiz === 'r') { - xs = lodash_es_mapValues(xs, function (x) { - return -x; - }); - } - xss[vert + horiz] = xs; - }); - }); - - var smallestWidth = findSmallestWidthAlignment(g, xss); - alignCoordinates(xss, smallestWidth); - return balance(xss, g.graph().align); -} - -function sep(nodeSep, edgeSep, reverseSep) { - return function (g, v, w) { - var vLabel = g.node(v); - var wLabel = g.node(w); - var sum = 0; - var delta; - - sum += vLabel.width / 2; - if (has/* default */.A(vLabel, 'labelpos')) { - switch (vLabel.labelpos.toLowerCase()) { - case 'l': - delta = -vLabel.width / 2; - break; - case 'r': - delta = vLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; - sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; - - sum += wLabel.width / 2; - if (has/* default */.A(wLabel, 'labelpos')) { - switch (wLabel.labelpos.toLowerCase()) { - case 'l': - delta = wLabel.width / 2; - break; - case 'r': - delta = -wLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - return sum; - }; -} - -function width(g, v) { - return g.node(v).width; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js - - - - - - -function position(g) { - g = asNonCompoundGraph(g); - - positionY(g); - lodash_es_forOwn(positionX(g), function (x, v) { - g.node(v).x = x; - }); -} - -function positionY(g) { - var layering = buildLayerMatrix(g); - var rankSep = g.graph().ranksep; - var prevY = 0; - forEach/* default */.A(layering, function (layer) { - var maxHeight = lodash_es_max( - map/* default */.A(layer, function (v) { - return g.node(v).height; - }) - ); - forEach/* default */.A(layer, function (v) { - g.node(v).y = prevY + maxHeight / 2; - }); - prevY += maxHeight + rankSep; - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js - - - - - - - - - - - - - - - -function layout(g, opts) { - var time = opts && opts.debugTiming ? util_time : notime; - time('layout', function () { - var layoutGraph = time(' buildLayoutGraph', function () { - return buildLayoutGraph(g); - }); - time(' runLayout', function () { - runLayout(layoutGraph, time); - }); - time(' updateInputGraph', function () { - updateInputGraph(g, layoutGraph); - }); - }); -} - -function runLayout(g, time) { - time(' makeSpaceForEdgeLabels', function () { - makeSpaceForEdgeLabels(g); - }); - time(' removeSelfEdges', function () { - removeSelfEdges(g); - }); - time(' acyclic', function () { - run(g); - }); - time(' nestingGraph.run', function () { - nesting_graph_run(g); - }); - time(' rank', function () { - rank(asNonCompoundGraph(g)); - }); - time(' injectEdgeLabelProxies', function () { - injectEdgeLabelProxies(g); - }); - time(' removeEmptyRanks', function () { - removeEmptyRanks(g); - }); - time(' nestingGraph.cleanup', function () { - cleanup(g); - }); - time(' normalizeRanks', function () { - normalizeRanks(g); - }); - time(' assignRankMinMax', function () { - assignRankMinMax(g); - }); - time(' removeEdgeLabelProxies', function () { - removeEdgeLabelProxies(g); - }); - time(' normalize.run', function () { - normalize_run(g); - }); - time(' parentDummyChains', function () { - parentDummyChains(g); - }); - time(' addBorderSegments', function () { - addBorderSegments(g); - }); - time(' order', function () { - order(g); - }); - time(' insertSelfEdges', function () { - insertSelfEdges(g); - }); - time(' adjustCoordinateSystem', function () { - adjust(g); - }); - time(' position', function () { - position(g); - }); - time(' positionSelfEdges', function () { - positionSelfEdges(g); - }); - time(' removeBorderNodes', function () { - removeBorderNodes(g); - }); - time(' normalize.undo', function () { - normalize_undo(g); - }); - time(' fixupEdgeLabelCoords', function () { - fixupEdgeLabelCoords(g); - }); - time(' undoCoordinateSystem', function () { - coordinate_system_undo(g); - }); - time(' translateGraph', function () { - translateGraph(g); - }); - time(' assignNodeIntersects', function () { - assignNodeIntersects(g); - }); - time(' reversePoints', function () { - reversePointsForReversedEdges(g); - }); - time(' acyclic.undo', function () { - undo(g); - }); -} - -/* - * Copies final layout information from the layout graph back to the input - * graph. This process only copies whitelisted attributes from the layout graph - * to the input graph, so it serves as a good place to determine what - * attributes can influence layout. - */ -function updateInputGraph(inputGraph, layoutGraph) { - forEach/* default */.A(inputGraph.nodes(), function (v) { - var inputLabel = inputGraph.node(v); - var layoutLabel = layoutGraph.node(v); - - if (inputLabel) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - - if (layoutGraph.children(v).length) { - inputLabel.width = layoutLabel.width; - inputLabel.height = layoutLabel.height; - } - } - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var inputLabel = inputGraph.edge(e); - var layoutLabel = layoutGraph.edge(e); - - inputLabel.points = layoutLabel.points; - if (has/* default */.A(layoutLabel, 'x')) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - } - }); - - inputGraph.graph().width = layoutGraph.graph().width; - inputGraph.graph().height = layoutGraph.graph().height; -} - -var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; -var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; -var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; -var nodeNumAttrs = ['width', 'height']; -var nodeDefaults = { width: 0, height: 0 }; -var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; -var edgeDefaults = { - minlen: 1, - weight: 1, - width: 0, - height: 0, - labeloffset: 10, - labelpos: 'r', -}; -var edgeAttrs = ['labelpos']; - -/* - * Constructs a new graph from the input graph, which can be used for layout. - * This process copies only whitelisted attributes from the input graph to the - * layout graph. Thus this function serves as a good place to determine what - * attributes can influence layout. - */ -function buildLayoutGraph(inputGraph) { - var g = new graphlib/* Graph */.T({ multigraph: true, compound: true }); - var graph = canonicalize(inputGraph.graph()); - - g.setGraph( - merge/* default */.A({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.A(graph, graphAttrs)) - ); - - forEach/* default */.A(inputGraph.nodes(), function (v) { - var node = canonicalize(inputGraph.node(v)); - g.setNode(v, defaults/* default */.A(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); - g.setParent(v, inputGraph.parent(v)); - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var edge = canonicalize(inputGraph.edge(e)); - g.setEdge( - e, - merge/* default */.A({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.A(edge, edgeAttrs)) - ); - }); - - return g; -} - -/* - * This idea comes from the Gansner paper: to account for edge labels in our - * layout we split each rank in half by doubling minlen and halving ranksep. - * Then we can place labels at these mid-points between nodes. - * - * We also add some minimal padding to the width to push the label for the edge - * away from the edge itself a bit. - */ -function makeSpaceForEdgeLabels(g) { - var graph = g.graph(); - graph.ranksep /= 2; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - edge.minlen *= 2; - if (edge.labelpos.toLowerCase() !== 'c') { - if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { - edge.width += edge.labeloffset; - } else { - edge.height += edge.labeloffset; - } - } - }); -} - -/* - * Creates temporary dummy nodes that capture the rank in which each edge's - * label is going to, if it has one of non-zero width and height. We do this - * so that we can safely remove empty ranks while preserving balance for the - * label's position. - */ -function injectEdgeLabelProxies(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.width && edge.height) { - var v = g.node(e.v); - var w = g.node(e.w); - var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; - addDummyNode(g, 'edge-proxy', label, '_ep'); - } - }); -} - -function assignRankMinMax(g) { - var maxRank = 0; - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.borderTop) { - node.minRank = g.node(node.borderTop).rank; - node.maxRank = g.node(node.borderBottom).rank; - // @ts-expect-error - maxRank = lodash_es_max(maxRank, node.maxRank); - } - }); - g.graph().maxRank = maxRank; -} - -function removeEdgeLabelProxies(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'edge-proxy') { - g.edge(node.e).labelRank = node.rank; - g.removeNode(v); - } - }); -} - -function translateGraph(g) { - var minX = Number.POSITIVE_INFINITY; - var maxX = 0; - var minY = Number.POSITIVE_INFINITY; - var maxY = 0; - var graphLabel = g.graph(); - var marginX = graphLabel.marginx || 0; - var marginY = graphLabel.marginy || 0; - - function getExtremes(attrs) { - var x = attrs.x; - var y = attrs.y; - var w = attrs.width; - var h = attrs.height; - minX = Math.min(minX, x - w / 2); - maxX = Math.max(maxX, x + w / 2); - minY = Math.min(minY, y - h / 2); - maxY = Math.max(maxY, y + h / 2); - } - - forEach/* default */.A(g.nodes(), function (v) { - getExtremes(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - getExtremes(edge); - } - }); - - minX -= marginX; - minY -= marginY; - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - node.x -= minX; - node.y -= minY; - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, function (p) { - p.x -= minX; - p.y -= minY; - }); - if (has/* default */.A(edge, 'x')) { - edge.x -= minX; - } - if (has/* default */.A(edge, 'y')) { - edge.y -= minY; - } - }); - - graphLabel.width = maxX - minX + marginX; - graphLabel.height = maxY - minY + marginY; -} - -function assignNodeIntersects(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - var nodeV = g.node(e.v); - var nodeW = g.node(e.w); - var p1, p2; - if (!edge.points) { - edge.points = []; - p1 = nodeW; - p2 = nodeV; - } else { - p1 = edge.points[0]; - p2 = edge.points[edge.points.length - 1]; - } - edge.points.unshift(intersectRect(nodeV, p1)); - edge.points.push(intersectRect(nodeW, p2)); - }); -} - -function fixupEdgeLabelCoords(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - if (edge.labelpos === 'l' || edge.labelpos === 'r') { - edge.width -= edge.labeloffset; - } - switch (edge.labelpos) { - case 'l': - edge.x -= edge.width / 2 + edge.labeloffset; - break; - case 'r': - edge.x += edge.width / 2 + edge.labeloffset; - break; - } - } - }); -} - -function reversePointsForReversedEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.reversed) { - edge.points.reverse(); - } - }); -} - -function removeBorderNodes(g) { - forEach/* default */.A(g.nodes(), function (v) { - if (g.children(v).length) { - var node = g.node(v); - var t = g.node(node.borderTop); - var b = g.node(node.borderBottom); - var l = g.node(lodash_es_last(node.borderLeft)); - var r = g.node(lodash_es_last(node.borderRight)); - - node.width = Math.abs(r.x - l.x); - node.height = Math.abs(b.y - t.y); - node.x = l.x + node.width / 2; - node.y = t.y + node.height / 2; - } - }); - - forEach/* default */.A(g.nodes(), function (v) { - if (g.node(v).dummy === 'border') { - g.removeNode(v); - } - }); -} - -function removeSelfEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - if (e.v === e.w) { - var node = g.node(e.v); - if (!node.selfEdges) { - node.selfEdges = []; - } - node.selfEdges.push({ e: e, label: g.edge(e) }); - g.removeEdge(e); - } - }); -} - -function insertSelfEdges(g) { - var layers = buildLayerMatrix(g); - forEach/* default */.A(layers, function (layer) { - var orderShift = 0; - forEach/* default */.A(layer, function (v, i) { - var node = g.node(v); - node.order = i + orderShift; - forEach/* default */.A(node.selfEdges, function (selfEdge) { - addDummyNode( - g, - 'selfedge', - { - width: selfEdge.label.width, - height: selfEdge.label.height, - rank: node.rank, - order: i + ++orderShift, - e: selfEdge.e, - label: selfEdge.label, - }, - '_se' - ); - }); - delete node.selfEdges; - }); - }); -} - -function positionSelfEdges(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'selfedge') { - var selfNode = g.node(node.e.v); - var x = selfNode.x + selfNode.width / 2; - var y = selfNode.y; - var dx = node.x - x; - var dy = selfNode.height / 2; - g.setEdge(node.e, node.label); - g.removeNode(v); - node.label.points = [ - { x: x + (2 * dx) / 3, y: y - dy }, - { x: x + (5 * dx) / 6, y: y - dy }, - { x: x + dx, y: y }, - { x: x + (5 * dx) / 6, y: y + dy }, - { x: x + (2 * dx) / 3, y: y + dy }, - ]; - node.label.x = node.x; - node.label.y = node.y; - } - }); -} - -function selectNumberAttrs(obj, attrs) { - return lodash_es_mapValues(pick/* default */.A(obj, attrs), Number); -} - -function canonicalize(attrs) { - var newAttrs = {}; - forEach/* default */.A(attrs, function (v, k) { - newAttrs[k.toLowerCase()] = v; - }); - return newAttrs; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js - - - - - - - - -/***/ }), - -/***/ 73046: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - T: () => (/* binding */ Graph) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js -var isFunction = __webpack_require__(89610); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js -var isEmpty = __webpack_require__(66401); -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -/* harmony default export */ const _baseIsNaN = (baseIsNaN); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -/* harmony default export */ const _strictIndexOf = (strictIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js - - - - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? _strictIndexOf(array, value, fromIndex) - : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); -} - -/* harmony default export */ const _baseIndexOf = (baseIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js - - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && _baseIndexOf(array, value, 0) > -1; -} - -/* harmony default export */ const _arrayIncludes = (arrayIncludes); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js -var _Set = __webpack_require__(39857); -;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js -/** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ -function noop() { - // No operation performed. -} - -/* harmony default export */ const lodash_es_noop = (noop); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { - return new _Set/* default */.A(values); -}; - -/* harmony default export */ const _createSet = (createSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js - - - - - - - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = _arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = _arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : _createSet(array); - if (set) { - return (0,_setToArray/* default */.A)(set); - } - isCommon = false; - includes = _cacheHas/* default */.A; - seen = new _SetCache/* default */.A; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -/* harmony default export */ const _baseUniq = (baseUniq); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js -var isArrayLikeObject = __webpack_require__(53533); -;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js - - - - - -/** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ -var union = (0,_baseRest/* default */.A)(function(arrays) { - return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); -}); - -/* harmony default export */ const lodash_es_union = (union); - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js - - -var DEFAULT_EDGE_NAME = '\x00'; -var GRAPH_NODE = '\x00'; -var EDGE_KEY_DELIM = '\x01'; - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. -class Graph { - constructor(opts = {}) { - this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; - this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; - this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; - - // Label for the graph itself - this._label = undefined; - - // Defaults to be set when creating a new node - this._defaultNodeLabelFn = constant/* default */.A(undefined); - - // Defaults to be set when creating a new edge - this._defaultEdgeLabelFn = constant/* default */.A(undefined); - - // v -> label - this._nodes = {}; - - if (this._isCompound) { - // v -> parent - this._parent = {}; - - // v -> children - this._children = {}; - this._children[GRAPH_NODE] = {}; - } - - // v -> edgeObj - this._in = {}; - - // u -> v -> Number - this._preds = {}; - - // v -> edgeObj - this._out = {}; - - // v -> w -> Number - this._sucs = {}; - - // e -> edgeObj - this._edgeObjs = {}; - - // e -> label - this._edgeLabels = {}; - } - /* === Graph functions ========= */ - isDirected() { - return this._isDirected; - } - isMultigraph() { - return this._isMultigraph; - } - isCompound() { - return this._isCompound; - } - setGraph(label) { - this._label = label; - return this; - } - graph() { - return this._label; - } - /* === Node functions ========== */ - setDefaultNodeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultNodeLabelFn = newDefault; - return this; - } - nodeCount() { - return this._nodeCount; - } - nodes() { - return keys/* default */.A(this._nodes); - } - sources() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._in[v]); - }); - } - sinks() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._out[v]); - }); - } - setNodes(vs, value) { - var args = arguments; - var self = this; - forEach/* default */.A(vs, function (v) { - if (args.length > 1) { - self.setNode(v, value); - } else { - self.setNode(v); - } - }); - return this; - } - setNode(v, value) { - if (has/* default */.A(this._nodes, v)) { - if (arguments.length > 1) { - this._nodes[v] = value; - } - return this; - } - - // @ts-expect-error - this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); - if (this._isCompound) { - this._parent[v] = GRAPH_NODE; - this._children[v] = {}; - this._children[GRAPH_NODE][v] = true; - } - this._in[v] = {}; - this._preds[v] = {}; - this._out[v] = {}; - this._sucs[v] = {}; - ++this._nodeCount; - return this; - } - node(v) { - return this._nodes[v]; - } - hasNode(v) { - return has/* default */.A(this._nodes, v); - } - removeNode(v) { - var self = this; - if (has/* default */.A(this._nodes, v)) { - var removeEdge = function (e) { - self.removeEdge(self._edgeObjs[e]); - }; - delete this._nodes[v]; - if (this._isCompound) { - this._removeFromParentsChildList(v); - delete this._parent[v]; - forEach/* default */.A(this.children(v), function (child) { - self.setParent(child); - }); - delete this._children[v]; - } - forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); - delete this._in[v]; - delete this._preds[v]; - forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); - delete this._out[v]; - delete this._sucs[v]; - --this._nodeCount; - } - return this; - } - setParent(v, parent) { - if (!this._isCompound) { - throw new Error('Cannot set parent in a non-compound graph'); - } - - if (isUndefined/* default */.A(parent)) { - parent = GRAPH_NODE; - } else { - // Coerce parent to string - parent += ''; - for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { - if (ancestor === v) { - throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); - } - } - - this.setNode(parent); - } - - this.setNode(v); - this._removeFromParentsChildList(v); - this._parent[v] = parent; - this._children[parent][v] = true; - return this; - } - _removeFromParentsChildList(v) { - delete this._children[this._parent[v]][v]; - } - parent(v) { - if (this._isCompound) { - var parent = this._parent[v]; - if (parent !== GRAPH_NODE) { - return parent; - } - } - } - children(v) { - if (isUndefined/* default */.A(v)) { - v = GRAPH_NODE; - } - - if (this._isCompound) { - var children = this._children[v]; - if (children) { - return keys/* default */.A(children); - } - } else if (v === GRAPH_NODE) { - return this.nodes(); - } else if (this.hasNode(v)) { - return []; - } - } - predecessors(v) { - var predsV = this._preds[v]; - if (predsV) { - return keys/* default */.A(predsV); - } - } - successors(v) { - var sucsV = this._sucs[v]; - if (sucsV) { - return keys/* default */.A(sucsV); - } - } - neighbors(v) { - var preds = this.predecessors(v); - if (preds) { - return lodash_es_union(preds, this.successors(v)); - } - } - isLeaf(v) { - var neighbors; - if (this.isDirected()) { - neighbors = this.successors(v); - } else { - neighbors = this.neighbors(v); - } - return neighbors.length === 0; - } - filterNodes(filter) { - // @ts-expect-error - var copy = new this.constructor({ - directed: this._isDirected, - multigraph: this._isMultigraph, - compound: this._isCompound, - }); - - copy.setGraph(this.graph()); - - var self = this; - forEach/* default */.A(this._nodes, function (value, v) { - if (filter(v)) { - copy.setNode(v, value); - } - }); - - forEach/* default */.A(this._edgeObjs, function (e) { - // @ts-expect-error - if (copy.hasNode(e.v) && copy.hasNode(e.w)) { - copy.setEdge(e, self.edge(e)); - } - }); - - var parents = {}; - function findParent(v) { - var parent = self.parent(v); - if (parent === undefined || copy.hasNode(parent)) { - parents[v] = parent; - return parent; - } else if (parent in parents) { - return parents[parent]; - } else { - return findParent(parent); - } - } - - if (this._isCompound) { - forEach/* default */.A(copy.nodes(), function (v) { - copy.setParent(v, findParent(v)); - }); - } - - return copy; - } - /* === Edge functions ========== */ - setDefaultEdgeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultEdgeLabelFn = newDefault; - return this; - } - edgeCount() { - return this._edgeCount; - } - edges() { - return values/* default */.A(this._edgeObjs); - } - setPath(vs, value) { - var self = this; - var args = arguments; - reduce/* default */.A(vs, function (v, w) { - if (args.length > 1) { - self.setEdge(v, w, value); - } else { - self.setEdge(v, w); - } - return w; - }); - return this; - } - /* - * setEdge(v, w, [value, [name]]) - * setEdge({ v, w, [name] }, [value]) - */ - setEdge() { - var v, w, name, value; - var valueSpecified = false; - var arg0 = arguments[0]; - - if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { - v = arg0.v; - w = arg0.w; - name = arg0.name; - if (arguments.length === 2) { - value = arguments[1]; - valueSpecified = true; - } - } else { - v = arg0; - w = arguments[1]; - name = arguments[3]; - if (arguments.length > 2) { - value = arguments[2]; - valueSpecified = true; - } - } - - v = '' + v; - w = '' + w; - if (!isUndefined/* default */.A(name)) { - name = '' + name; - } - - var e = edgeArgsToId(this._isDirected, v, w, name); - if (has/* default */.A(this._edgeLabels, e)) { - if (valueSpecified) { - this._edgeLabels[e] = value; - } - return this; - } - - if (!isUndefined/* default */.A(name) && !this._isMultigraph) { - throw new Error('Cannot set a named edge when isMultigraph = false'); - } - - // It didn't exist, so we need to create it. - // First ensure the nodes exist. - this.setNode(v); - this.setNode(w); - - // @ts-expect-error - this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); - - var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); - // Ensure we add undirected edges in a consistent way. - v = edgeObj.v; - w = edgeObj.w; - - Object.freeze(edgeObj); - this._edgeObjs[e] = edgeObj; - incrementOrInitEntry(this._preds[w], v); - incrementOrInitEntry(this._sucs[v], w); - this._in[w][e] = edgeObj; - this._out[v][e] = edgeObj; - this._edgeCount++; - return this; - } - edge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return this._edgeLabels[e]; - } - hasEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return has/* default */.A(this._edgeLabels, e); - } - removeEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - var edge = this._edgeObjs[e]; - if (edge) { - v = edge.v; - w = edge.w; - delete this._edgeLabels[e]; - delete this._edgeObjs[e]; - decrementOrRemoveEntry(this._preds[w], v); - decrementOrRemoveEntry(this._sucs[v], w); - delete this._in[w][e]; - delete this._out[v][e]; - this._edgeCount--; - } - return this; - } - inEdges(v, u) { - var inV = this._in[v]; - if (inV) { - var edges = values/* default */.A(inV); - if (!u) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.v === u; - }); - } - } - outEdges(v, w) { - var outV = this._out[v]; - if (outV) { - var edges = values/* default */.A(outV); - if (!w) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.w === w; - }); - } - } - nodeEdges(v, w) { - var inEdges = this.inEdges(v, w); - if (inEdges) { - return inEdges.concat(this.outEdges(v, w)); - } - } -} - -/* Number of nodes in the graph. Should only be changed by the implementation. */ -Graph.prototype._nodeCount = 0; - -/* Number of edges in the graph. Should only be changed by the implementation. */ -Graph.prototype._edgeCount = 0; - -function incrementOrInitEntry(map, k) { - if (map[k]) { - map[k]++; - } else { - map[k] = 1; - } -} - -function decrementOrRemoveEntry(map, k) { - if (!--map[k]) { - delete map[k]; - } -} - -function edgeArgsToId(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); -} - -function edgeArgsToObj(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - var edgeObj = { v: v, w: w }; - if (name) { - edgeObj.name = name; - } - return edgeObj; -} - -function edgeObjToId(isDirected, edgeObj) { - return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); -} - - -/***/ }), - -/***/ 697: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) -/* harmony export */ }); -/* unused harmony export version */ -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); -// Includes only the "core" of graphlib - - - -const version = '2.1.9-pre'; - - - - -/***/ }), - -/***/ 62062: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _SetCache) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules -var _MapCache = __webpack_require__(29471); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -/* harmony default export */ const _setCacheAdd = (setCacheAdd); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -/* harmony default export */ const _setCacheHas = (setCacheHas); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js - - - - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new _MapCache/* default */.A; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; -SetCache.prototype.has = _setCacheHas; - -/* harmony default export */ const _SetCache = (SetCache); - - -/***/ }), - -/***/ 72641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); - - -/***/ }), - -/***/ 2634: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); - - -/***/ }), - -/***/ 45572: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); - - -/***/ }), - -/***/ 76912: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); - - -/***/ }), - -/***/ 91641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseClone) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js -var _arrayEach = __webpack_require__(72641); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js -var _copyObject = __webpack_require__(22031); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js - - - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssign = (baseAssign); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js - - - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssignIn = (baseAssignIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js -var _cloneBuffer = __webpack_require__(80154); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js -var _copyArray = __webpack_require__(39759); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js -var _getSymbols = __webpack_require__(14792); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js - - - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); -} - -/* harmony default export */ const _copySymbols = (copySymbols); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js -var _getPrototype = __webpack_require__(15647); -// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js -var stubArray = __webpack_require__(13153); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js - - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { - var result = []; - while (object) { - (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); - object = (0,_getPrototype/* default */.A)(object); - } - return result; -}; - -/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js - - - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); -} - -/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js -var _baseGetAllKeys = __webpack_require__(33831); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js - - - - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); -} - -/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/* harmony default export */ const _initCloneArray = (initCloneArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js -var _cloneArrayBuffer = __webpack_require__(90565); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js - - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -/* harmony default export */ const _cloneDataView = (cloneDataView); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -/* harmony default export */ const _cloneRegExp = (cloneRegExp); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js - - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -/* harmony default export */ const _cloneSymbol = (cloneSymbol); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js -var _cloneTypedArray = __webpack_require__(1801); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js - - - - - - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return (0,_cloneArrayBuffer/* default */.A)(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return _cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return (0,_cloneTypedArray/* default */.A)(object, isDeep); - - case mapTag: - return new Ctor; - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return _cloneRegExp(object); - - case setTag: - return new Ctor; - - case symbolTag: - return _cloneSymbol(object); - } -} - -/* harmony default export */ const _initCloneByTag = (initCloneByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules -var _initCloneObject = __webpack_require__(18598); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js - - - -/** `Object#toString` result references. */ -var _baseIsMap_mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; -} - -/* harmony default export */ const _baseIsMap = (baseIsMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js -var _nodeUtil = __webpack_require__(64841); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js - - - - -/* Node.js helper references. */ -var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; - -/* harmony default export */ const lodash_es_isMap = (isMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js - - - -/** `Object#toString` result references. */ -var _baseIsSet_setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; -} - -/* harmony default export */ const _baseIsSet = (baseIsSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js - - - - -/* Node.js helper references. */ -var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; - -/* harmony default export */ const lodash_es_isSet = (isSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js - - - - - - - - - - - - - - - - - - - - - - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - _baseClone_boolTag = '[object Boolean]', - _baseClone_dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - _baseClone_mapTag = '[object Map]', - _baseClone_numberTag = '[object Number]', - objectTag = '[object Object]', - _baseClone_regexpTag = '[object RegExp]', - _baseClone_setTag = '[object Set]', - _baseClone_stringTag = '[object String]', - _baseClone_symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var _baseClone_arrayBufferTag = '[object ArrayBuffer]', - _baseClone_dataViewTag = '[object DataView]', - _baseClone_float32Tag = '[object Float32Array]', - _baseClone_float64Tag = '[object Float64Array]', - _baseClone_int8Tag = '[object Int8Array]', - _baseClone_int16Tag = '[object Int16Array]', - _baseClone_int32Tag = '[object Int32Array]', - _baseClone_uint8Tag = '[object Uint8Array]', - _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', - _baseClone_uint16Tag = '[object Uint16Array]', - _baseClone_uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = -cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = -cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = -cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = -cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = -cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = -cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = -cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = -cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = -cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!(0,isObject/* default */.A)(value)) { - return value; - } - var isArr = (0,isArray/* default */.A)(value); - if (isArr) { - result = _initCloneArray(value); - if (!isDeep) { - return (0,_copyArray/* default */.A)(value, result); - } - } else { - var tag = (0,_getTag/* default */.A)(value), - isFunc = tag == funcTag || tag == genTag; - - if ((0,isBuffer/* default */.A)(value)) { - return (0,_cloneBuffer/* default */.A)(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); - if (!isDeep) { - return isFlat - ? _copySymbolsIn(value, _baseAssignIn(result, value)) - : _copySymbols(value, _baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = _initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new _Stack/* default */.A); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (lodash_es_isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (lodash_es_isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } - - var keysFunc = isFull - ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) - : (isFlat ? keysIn/* default */.A : keys/* default */.A); - - var props = isArr ? undefined : keysFunc(value); - (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -/* harmony default export */ const _baseClone = (baseClone); - - -/***/ }), - -/***/ 6240: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseEach) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js - - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!(0,isArrayLike/* default */.A)(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -/* harmony default export */ const _createBaseEach = (createBaseEach); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js - - - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = _createBaseEach(_baseForOwn/* default */.A); - -/* harmony default export */ const _baseEach = (baseEach); - - -/***/ }), - -/***/ 25707: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); - - -/***/ }), - -/***/ 13588: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseFlatten) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules -var isArguments = __webpack_require__(52274); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js - - - - -/** Built-in value references. */ -var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -/* harmony default export */ const _isFlattenable = (isFlattenable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js - - - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = _isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - (0,_arrayPush/* default */.A)(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -/* harmony default export */ const _baseFlatten = (baseFlatten); - - -/***/ }), - -/***/ 79841: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); - - -/***/ }), - -/***/ 66318: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); - - -/***/ }), - -/***/ 33831: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); - - -/***/ }), - -/***/ 49574: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseIteratee) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arraySome = (arraySome); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js - - - - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!_arraySome(other, function(othValue, othIndex) { - if (!(0,_cacheHas/* default */.A)(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalArrays = (equalArrays); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js -var _Uint8Array = __webpack_require__(43988); -// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js -var eq = __webpack_require__(66984); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -/* harmony default export */ const _mapToArray = (mapToArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _equalByTag_COMPARE_PARTIAL_FLAG = 1, - _equalByTag_COMPARE_UNORDERED_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return (0,eq/* default */.A)(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = _mapToArray; - - case setTag: - var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; - convert || (convert = _setToArray/* default */.A); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -/* harmony default export */ const _equalByTag = (equalByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js - - -/** Used to compose bitmasks for value comparisons. */ -var _equalObjects_COMPARE_PARTIAL_FLAG = 1; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, - objProps = (0,_getAllKeys/* default */.A)(object), - objLength = objProps.length, - othProps = (0,_getAllKeys/* default */.A)(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalObjects = (equalObjects); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules -var isTypedArray = __webpack_require__(33858); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js - - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var _baseIsEqualDeep_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = (0,isArray/* default */.A)(object), - othIsArr = (0,isArray/* default */.A)(other), - objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), - othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && (0,isBuffer/* default */.A)(object)) { - if (!(0,isBuffer/* default */.A)(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new _Stack/* default */.A); - return (objIsArr || (0,isTypedArray/* default */.A)(object)) - ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new _Stack/* default */.A); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new _Stack/* default */.A); - return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js - - - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { - return value !== value && other !== other; - } - return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -/* harmony default export */ const _baseIsEqual = (baseIsEqual); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, - _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new _Stack/* default */.A; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -/* harmony default export */ const _baseIsMatch = (baseIsMatch); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js - - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !(0,isObject/* default */.A)(value); -} - -/* harmony default export */ const _isStrictComparable = (isStrictComparable); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js - - - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = (0,keys/* default */.A)(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, _isStrictComparable(value)]; - } - return result; -} - -/* harmony default export */ const _getMatchData = (getMatchData); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js - - - - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = _getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return _matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || _baseIsMatch(object, source, matchData); - }; -} - -/* harmony default export */ const _baseMatches = (baseMatches); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js - - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); - return result === undefined ? defaultValue : result; -} - -/* harmony default export */ const lodash_es_get = (get); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, - _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { - return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); - } - return function(object) { - var objValue = lodash_es_get(object, path); - return (objValue === undefined && objValue === srcValue) - ? (0,hasIn/* default */.A)(object, path) - : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); - }; -} - -/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js - - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return (0,_baseGet/* default */.A)(object, path); - }; -} - -/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js - - - - - -/** - * Creates a function that returns the value at `path` of a given object. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - * @example - * - * var objects = [ - * { 'a': { 'b': 2 } }, - * { 'a': { 'b': 1 } } - * ]; - * - * _.map(objects, _.property('a.b')); - * // => [2, 1] - * - * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); - * // => [1, 2] - */ -function property(path) { - return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); -} - -/* harmony default export */ const lodash_es_property = (property); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js - - - - - - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity/* default */.A; - } - if (typeof value == 'object') { - return (0,isArray/* default */.A)(value) - ? _baseMatchesProperty(value[0], value[1]) - : _baseMatches(value); - } - return lodash_es_property(value); -} - -/* harmony default export */ const _baseIteratee = (baseIteratee); - - -/***/ }), - -/***/ 52568: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6240); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? Array(collection.length) : []; - - (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); - - -/***/ }), - -/***/ 70805: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); - - -/***/ }), - -/***/ 64099: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); - - -/***/ }), - -/***/ 99922: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); - - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); - - -/***/ }), - -/***/ 7819: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _castPath) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js -var memoize = __webpack_require__(46632); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js - - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = (0,memoize/* default */.A)(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -/* harmony default export */ const _memoizeCapped = (memoizeCapped); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js - - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = _memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/* harmony default export */ const _stringToPath = (stringToPath); - -// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules -var lodash_es_toString = __webpack_require__(28894); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js - - - - - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if ((0,isArray/* default */.A)(value)) { - return value; - } - return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); -} - -/* harmony default export */ const _castPath = (castPath); - - -/***/ }), - -/***/ 19042: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); -/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); - - -/***/ }), - -/***/ 14792: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); -/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); - - -/***/ }), - -/***/ 85054: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); -/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); -/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - - - - - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && - ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); - - -/***/ }), - -/***/ 86586: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); - - - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); - - -/***/ }), - -/***/ 29959: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); - - -/***/ }), - -/***/ 30901: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); - - -/***/ }), - -/***/ 23068: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24326); -/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66984); -/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832); -/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55615); - - - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); - - -/***/ }), - -/***/ 11662: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_filter) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js -var _arrayFilter = __webpack_require__(2634); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js - - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - (0,_baseEach/* default */.A)(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -/* harmony default export */ const _baseFilter = (baseFilter); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js - - - - - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ -function filter(collection, predicate) { - var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; - return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); -} - -/* harmony default export */ const lodash_es_filter = (filter); - - -/***/ }), - -/***/ 34098: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13588); - - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(array, 1) : []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); - - -/***/ }), - -/***/ 8058: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); -/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); - - -/***/ }), - -/***/ 48585: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_has) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && _baseHas_hasOwnProperty.call(object, key); -} - -/* harmony default export */ const _baseHas = (baseHas); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js - - - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); -} - -/* harmony default export */ const lodash_es_has = (has); - - -/***/ }), - -/***/ 39188: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_hasIn) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -/* harmony default export */ const _baseHasIn = (baseHasIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js - - - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); -} - -/* harmony default export */ const lodash_es_hasIn = (hasIn); - - -/***/ }), - -/***/ 61882: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); -/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); - - - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); - - -/***/ }), - -/***/ 69592: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); - - -/***/ }), - -/***/ 27422: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); -/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); - - -/***/ }), - -/***/ 74722: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45572); -/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574); -/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52568); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ -function map(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee, 3)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); - - -/***/ }), - -/***/ 81942: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_pick) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules -var _castPath = __webpack_require__(7819); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js -var _isIndex = __webpack_require__(25353); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js - - - - - - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!(0,isObject/* default */.A)(object)) { - return object; - } - path = (0,_castPath/* default */.A)(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = (0,_toKey/* default */.A)(path[index]), - newValue = value; - - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = (0,isObject/* default */.A)(objValue) - ? objValue - : ((0,_isIndex/* default */.A)(path[index + 1]) ? [] : {}); - } - } - (0,_assignValue/* default */.A)(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -/* harmony default export */ const _baseSet = (baseSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js - - - - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = (0,_baseGet/* default */.A)(object, path); - - if (predicate(value, path)) { - _baseSet(result, (0,_castPath/* default */.A)(path, object), value); - } - } - return result; -} - -/* harmony default export */ const _basePickBy = (basePickBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js - - - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, paths) { - return _basePickBy(object, paths, function(value, path) { - return (0,hasIn/* default */.A)(object, path); - }); -} - -/* harmony default export */ const _basePick = (basePick); - -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules -var _overRest = __webpack_require__(76875); -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules -var _setToString = __webpack_require__(67525); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js - - - - -/** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -function flatRest(func) { - return (0,_setToString/* default */.A)((0,_overRest/* default */.A)(func, undefined, flatten/* default */.A), func + ''); -} - -/* harmony default export */ const _flatRest = (flatRest); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js - - - -/** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ -var pick = _flatRest(function(object, paths) { - return object == null ? {} : _basePick(object, paths); -}); - -/* harmony default export */ const lodash_es_pick = (pick); - - -/***/ }), - -/***/ 91395: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_range) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -/* harmony default export */ const _baseRange = (baseRange); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js - - - - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.A)(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = (0,toFinite/* default */.A)(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = (0,toFinite/* default */.A)(end); - } - step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.A)(step); - return _baseRange(start, end, step, fromRight); - }; -} - -/* harmony default export */ const _createRange = (createRange); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js - - -/** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ -var range = _createRange(); - -/* harmony default export */ const lodash_es_range = (range); - - -/***/ }), - -/***/ 89463: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_reduce) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -/* harmony default export */ const _arrayReduce = (arrayReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -/* harmony default export */ const _baseReduce = (baseReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js - - - - - - -/** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ -function reduce(collection, iteratee, accumulator) { - var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, - initAccum = arguments.length < 3; - - return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); -} - -/* harmony default export */ const lodash_es_reduce = (reduce); - - -/***/ }), - -/***/ 13153: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ -function stubArray() { - return []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); - - -/***/ }), - -/***/ 74342: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toFinite) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js - - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/* harmony default export */ const _baseTrim = (baseTrim); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js - - - - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if ((0,isSymbol/* default */.A)(value)) { - return NAN; - } - if ((0,isObject/* default */.A)(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = (0,isObject/* default */.A)(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = _baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/* harmony default export */ const lodash_es_toNumber = (toNumber); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = lodash_es_toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/* harmony default export */ const lodash_es_toFinite = (toFinite); - - -/***/ }), - -/***/ 28894: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toString) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js - - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if ((0,isArray/* default */.A)(value)) { - // Recursively convert values (susceptible to call stack limits). - return (0,_arrayMap/* default */.A)(value, baseToString) + ''; - } - if ((0,isSymbol/* default */.A)(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const _baseToString = (baseToString); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js - - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString_toString(value) { - return value == null ? '' : _baseToString(value); -} - -/* harmony default export */ const lodash_es_toString = (toString_toString); - - -/***/ }), - -/***/ 5664: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28894); - - -/** Used to generate unique IDs. */ -var idCounter = 0; - -/** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ -function uniqueId(prefix) { - var id = ++idCounter; - return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(prefix) + id; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); - - -/***/ }), - -/***/ 38207: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_values) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js - - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return (0,_arrayMap/* default */.A)(props, function(key) { - return object[key]; - }); -} - -/* harmony default export */ const _baseValues = (baseValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js - - - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values(object) { - return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); -} - -/* harmony default export */ const lodash_es_values = (values); - - -/***/ }), - -/***/ 43706: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21176); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(697); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99418); - - - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 3], $V1 = [1, 4], $V2 = [1, 5], $V3 = [1, 6], $V4 = [5, 6, 8, 9, 11, 13, 31, 32, 33, 34, 35, 36, 44, 62, 63], $V5 = [1, 18], $V6 = [2, 7], $V7 = [1, 22], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 20], $Ve = [1, 28], $Vf = [1, 29], $Vg = [62, 63], $Vh = [5, 8, 9, 11, 13, 31, 32, 33, 34, 35, 36, 44, 51, 53, 62, 63], $Vi = [1, 47], $Vj = [1, 48], $Vk = [1, 49], $Vl = [1, 50], $Vm = [1, 51], $Vn = [1, 52], $Vo = [1, 53], $Vp = [53, 54], $Vq = [1, 64], $Vr = [1, 60], $Vs = [1, 61], $Vt = [1, 62], $Vu = [1, 63], $Vv = [1, 65], $Vw = [1, 69], $Vx = [1, 70], $Vy = [1, 67], $Vz = [1, 68], $VA = [5, 8, 9, 11, 13, 31, 32, 33, 34, 35, 36, 44, 62, 63]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "directive": 4, "NEWLINE": 5, "RD": 6, "diagram": 7, "EOF": 8, "acc_title": 9, "acc_title_value": 10, "acc_descr": 11, "acc_descr_value": 12, "acc_descr_multiline_value": 13, "requirementDef": 14, "elementDef": 15, "relationshipDef": 16, "requirementType": 17, "requirementName": 18, "STRUCT_START": 19, "requirementBody": 20, "ID": 21, "COLONSEP": 22, "id": 23, "TEXT": 24, "text": 25, "RISK": 26, "riskLevel": 27, "VERIFYMTHD": 28, "verifyType": 29, "STRUCT_STOP": 30, "REQUIREMENT": 31, "FUNCTIONAL_REQUIREMENT": 32, "INTERFACE_REQUIREMENT": 33, "PERFORMANCE_REQUIREMENT": 34, "PHYSICAL_REQUIREMENT": 35, "DESIGN_CONSTRAINT": 36, "LOW_RISK": 37, "MED_RISK": 38, "HIGH_RISK": 39, "VERIFY_ANALYSIS": 40, "VERIFY_DEMONSTRATION": 41, "VERIFY_INSPECTION": 42, "VERIFY_TEST": 43, "ELEMENT": 44, "elementName": 45, "elementBody": 46, "TYPE": 47, "type": 48, "DOCREF": 49, "ref": 50, "END_ARROW_L": 51, "relationship": 52, "LINE": 53, "END_ARROW_R": 54, "CONTAINS": 55, "COPIES": 56, "DERIVES": 57, "SATISFIES": 58, "VERIFIES": 59, "REFINES": 60, "TRACES": 61, "unqString": 62, "qString": 63, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 5: "NEWLINE", 6: "RD", 8: "EOF", 9: "acc_title", 10: "acc_title_value", 11: "acc_descr", 12: "acc_descr_value", 13: "acc_descr_multiline_value", 19: "STRUCT_START", 21: "ID", 22: "COLONSEP", 24: "TEXT", 26: "RISK", 28: "VERIFYMTHD", 30: "STRUCT_STOP", 31: "REQUIREMENT", 32: "FUNCTIONAL_REQUIREMENT", 33: "INTERFACE_REQUIREMENT", 34: "PERFORMANCE_REQUIREMENT", 35: "PHYSICAL_REQUIREMENT", 36: "DESIGN_CONSTRAINT", 37: "LOW_RISK", 38: "MED_RISK", 39: "HIGH_RISK", 40: "VERIFY_ANALYSIS", 41: "VERIFY_DEMONSTRATION", 42: "VERIFY_INSPECTION", 43: "VERIFY_TEST", 44: "ELEMENT", 47: "TYPE", 49: "DOCREF", 51: "END_ARROW_L", 53: "LINE", 54: "END_ARROW_R", 55: "CONTAINS", 56: "COPIES", 57: "DERIVES", 58: "SATISFIES", 59: "VERIFIES", 60: "REFINES", 61: "TRACES", 62: "unqString", 63: "qString" }, - productions_: [0, [3, 3], [3, 2], [3, 4], [4, 2], [4, 2], [4, 1], [7, 0], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [14, 5], [20, 5], [20, 5], [20, 5], [20, 5], [20, 2], [20, 1], [17, 1], [17, 1], [17, 1], [17, 1], [17, 1], [17, 1], [27, 1], [27, 1], [27, 1], [29, 1], [29, 1], [29, 1], [29, 1], [15, 5], [46, 5], [46, 5], [46, 2], [46, 1], [16, 5], [16, 5], [52, 1], [52, 1], [52, 1], [52, 1], [52, 1], [52, 1], [52, 1], [18, 1], [18, 1], [23, 1], [23, 1], [25, 1], [25, 1], [45, 1], [45, 1], [48, 1], [48, 1], [50, 1], [50, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 4: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 5: - case 6: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 7: - this.$ = []; - break; - case 13: - yy.addRequirement($$[$0 - 3], $$[$0 - 4]); - break; - case 14: - yy.setNewReqId($$[$0 - 2]); - break; - case 15: - yy.setNewReqText($$[$0 - 2]); - break; - case 16: - yy.setNewReqRisk($$[$0 - 2]); - break; - case 17: - yy.setNewReqVerifyMethod($$[$0 - 2]); - break; - case 20: - this.$ = yy.RequirementType.REQUIREMENT; - break; - case 21: - this.$ = yy.RequirementType.FUNCTIONAL_REQUIREMENT; - break; - case 22: - this.$ = yy.RequirementType.INTERFACE_REQUIREMENT; - break; - case 23: - this.$ = yy.RequirementType.PERFORMANCE_REQUIREMENT; - break; - case 24: - this.$ = yy.RequirementType.PHYSICAL_REQUIREMENT; - break; - case 25: - this.$ = yy.RequirementType.DESIGN_CONSTRAINT; - break; - case 26: - this.$ = yy.RiskLevel.LOW_RISK; - break; - case 27: - this.$ = yy.RiskLevel.MED_RISK; - break; - case 28: - this.$ = yy.RiskLevel.HIGH_RISK; - break; - case 29: - this.$ = yy.VerifyType.VERIFY_ANALYSIS; - break; - case 30: - this.$ = yy.VerifyType.VERIFY_DEMONSTRATION; - break; - case 31: - this.$ = yy.VerifyType.VERIFY_INSPECTION; - break; - case 32: - this.$ = yy.VerifyType.VERIFY_TEST; - break; - case 33: - yy.addElement($$[$0 - 3]); - break; - case 34: - yy.setNewElementType($$[$0 - 2]); - break; - case 35: - yy.setNewElementDocRef($$[$0 - 2]); - break; - case 38: - yy.addRelationship($$[$0 - 2], $$[$0], $$[$0 - 4]); - break; - case 39: - yy.addRelationship($$[$0 - 2], $$[$0 - 4], $$[$0]); - break; - case 40: - this.$ = yy.Relationships.CONTAINS; - break; - case 41: - this.$ = yy.Relationships.COPIES; - break; - case 42: - this.$ = yy.Relationships.DERIVES; - break; - case 43: - this.$ = yy.Relationships.SATISFIES; - break; - case 44: - this.$ = yy.Relationships.VERIFIES; - break; - case 45: - this.$ = yy.Relationships.REFINES; - break; - case 46: - this.$ = yy.Relationships.TRACES; - break; - } - }, - table: [{ 3: 1, 4: 2, 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 1: [3] }, { 3: 8, 4: 2, 5: [1, 7], 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 5: [1, 9] }, { 10: [1, 10] }, { 12: [1, 11] }, o($V4, [2, 6]), { 3: 12, 4: 2, 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 1: [2, 2] }, { 4: 17, 5: $V5, 7: 13, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, o($V4, [2, 4]), o($V4, [2, 5]), { 1: [2, 1] }, { 8: [1, 30] }, { 4: 17, 5: $V5, 7: 31, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 32, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 33, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 34, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 35, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 18: 36, 62: [1, 37], 63: [1, 38] }, { 45: 39, 62: [1, 40], 63: [1, 41] }, { 51: [1, 42], 53: [1, 43] }, o($Vg, [2, 20]), o($Vg, [2, 21]), o($Vg, [2, 22]), o($Vg, [2, 23]), o($Vg, [2, 24]), o($Vg, [2, 25]), o($Vh, [2, 49]), o($Vh, [2, 50]), { 1: [2, 3] }, { 8: [2, 8] }, { 8: [2, 9] }, { 8: [2, 10] }, { 8: [2, 11] }, { 8: [2, 12] }, { 19: [1, 44] }, { 19: [2, 47] }, { 19: [2, 48] }, { 19: [1, 45] }, { 19: [2, 53] }, { 19: [2, 54] }, { 52: 46, 55: $Vi, 56: $Vj, 57: $Vk, 58: $Vl, 59: $Vm, 60: $Vn, 61: $Vo }, { 52: 54, 55: $Vi, 56: $Vj, 57: $Vk, 58: $Vl, 59: $Vm, 60: $Vn, 61: $Vo }, { 5: [1, 55] }, { 5: [1, 56] }, { 53: [1, 57] }, o($Vp, [2, 40]), o($Vp, [2, 41]), o($Vp, [2, 42]), o($Vp, [2, 43]), o($Vp, [2, 44]), o($Vp, [2, 45]), o($Vp, [2, 46]), { 54: [1, 58] }, { 5: $Vq, 20: 59, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vw, 30: $Vx, 46: 66, 47: $Vy, 49: $Vz }, { 23: 71, 62: $Ve, 63: $Vf }, { 23: 72, 62: $Ve, 63: $Vf }, o($VA, [2, 13]), { 22: [1, 73] }, { 22: [1, 74] }, { 22: [1, 75] }, { 22: [1, 76] }, { 5: $Vq, 20: 77, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, o($VA, [2, 19]), o($VA, [2, 33]), { 22: [1, 78] }, { 22: [1, 79] }, { 5: $Vw, 30: $Vx, 46: 80, 47: $Vy, 49: $Vz }, o($VA, [2, 37]), o($VA, [2, 38]), o($VA, [2, 39]), { 23: 81, 62: $Ve, 63: $Vf }, { 25: 82, 62: [1, 83], 63: [1, 84] }, { 27: 85, 37: [1, 86], 38: [1, 87], 39: [1, 88] }, { 29: 89, 40: [1, 90], 41: [1, 91], 42: [1, 92], 43: [1, 93] }, o($VA, [2, 18]), { 48: 94, 62: [1, 95], 63: [1, 96] }, { 50: 97, 62: [1, 98], 63: [1, 99] }, o($VA, [2, 36]), { 5: [1, 100] }, { 5: [1, 101] }, { 5: [2, 51] }, { 5: [2, 52] }, { 5: [1, 102] }, { 5: [2, 26] }, { 5: [2, 27] }, { 5: [2, 28] }, { 5: [1, 103] }, { 5: [2, 29] }, { 5: [2, 30] }, { 5: [2, 31] }, { 5: [2, 32] }, { 5: [1, 104] }, { 5: [2, 55] }, { 5: [2, 56] }, { 5: [1, 105] }, { 5: [2, 57] }, { 5: [2, 58] }, { 5: $Vq, 20: 106, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vq, 20: 107, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vq, 20: 108, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vq, 20: 109, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vw, 30: $Vx, 46: 110, 47: $Vy, 49: $Vz }, { 5: $Vw, 30: $Vx, 46: 111, 47: $Vy, 49: $Vz }, o($VA, [2, 14]), o($VA, [2, 15]), o($VA, [2, 16]), o($VA, [2, 17]), o($VA, [2, 34]), o($VA, [2, 35])], - defaultActions: { 8: [2, 2], 12: [2, 1], 30: [2, 3], 31: [2, 8], 32: [2, 9], 33: [2, 10], 34: [2, 11], 35: [2, 12], 37: [2, 47], 38: [2, 48], 40: [2, 53], 41: [2, 54], 83: [2, 51], 84: [2, 52], 86: [2, 26], 87: [2, 27], 88: [2, 28], 90: [2, 29], 91: [2, 30], 92: [2, 31], 93: [2, 32], 95: [2, 55], 96: [2, 56], 98: [2, 57], 99: [2, 58] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - return "title"; - case 1: - this.begin("acc_title"); - return 9; - case 2: - this.popState(); - return "acc_title_value"; - case 3: - this.begin("acc_descr"); - return 11; - case 4: - this.popState(); - return "acc_descr_value"; - case 5: - this.begin("acc_descr_multiline"); - break; - case 6: - this.popState(); - break; - case 7: - return "acc_descr_multiline_value"; - case 8: - return 5; - case 9: - break; - case 10: - break; - case 11: - break; - case 12: - return 8; - case 13: - return 6; - case 14: - return 19; - case 15: - return 30; - case 16: - return 22; - case 17: - return 21; - case 18: - return 24; - case 19: - return 26; - case 20: - return 28; - case 21: - return 31; - case 22: - return 32; - case 23: - return 33; - case 24: - return 34; - case 25: - return 35; - case 26: - return 36; - case 27: - return 37; - case 28: - return 38; - case 29: - return 39; - case 30: - return 40; - case 31: - return 41; - case 32: - return 42; - case 33: - return 43; - case 34: - return 44; - case 35: - return 55; - case 36: - return 56; - case 37: - return 57; - case 38: - return 58; - case 39: - return 59; - case 40: - return 60; - case 41: - return 61; - case 42: - return 47; - case 43: - return 49; - case 44: - return 51; - case 45: - return 54; - case 46: - return 53; - case 47: - this.begin("string"); - break; - case 48: - this.popState(); - break; - case 49: - return "qString"; - case 50: - yy_.yytext = yy_.yytext.trim(); - return 62; - } - }, - rules: [/^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:(\r?\n)+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:$)/i, /^(?:requirementDiagram\b)/i, /^(?:\{)/i, /^(?:\})/i, /^(?::)/i, /^(?:id\b)/i, /^(?:text\b)/i, /^(?:risk\b)/i, /^(?:verifyMethod\b)/i, /^(?:requirement\b)/i, /^(?:functionalRequirement\b)/i, /^(?:interfaceRequirement\b)/i, /^(?:performanceRequirement\b)/i, /^(?:physicalRequirement\b)/i, /^(?:designConstraint\b)/i, /^(?:low\b)/i, /^(?:medium\b)/i, /^(?:high\b)/i, /^(?:analysis\b)/i, /^(?:demonstration\b)/i, /^(?:inspection\b)/i, /^(?:test\b)/i, /^(?:element\b)/i, /^(?:contains\b)/i, /^(?:copies\b)/i, /^(?:derives\b)/i, /^(?:satisfies\b)/i, /^(?:verifies\b)/i, /^(?:refines\b)/i, /^(?:traces\b)/i, /^(?:type\b)/i, /^(?:docref\b)/i, /^(?:<-)/i, /^(?:->)/i, /^(?:-)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[\w][^\r\n\{\<\>\-\=]*)/i], - conditions: { "acc_descr_multiline": { "rules": [6, 7], "inclusive": false }, "acc_descr": { "rules": [4], "inclusive": false }, "acc_title": { "rules": [2], "inclusive": false }, "unqString": { "rules": [], "inclusive": false }, "token": { "rules": [], "inclusive": false }, "string": { "rules": [48, 49], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -let relations = []; -let latestRequirement = {}; -let requirements = {}; -let latestElement = {}; -let elements = {}; -const RequirementType = { - REQUIREMENT: "Requirement", - FUNCTIONAL_REQUIREMENT: "Functional Requirement", - INTERFACE_REQUIREMENT: "Interface Requirement", - PERFORMANCE_REQUIREMENT: "Performance Requirement", - PHYSICAL_REQUIREMENT: "Physical Requirement", - DESIGN_CONSTRAINT: "Design Constraint" -}; -const RiskLevel = { - LOW_RISK: "Low", - MED_RISK: "Medium", - HIGH_RISK: "High" -}; -const VerifyType = { - VERIFY_ANALYSIS: "Analysis", - VERIFY_DEMONSTRATION: "Demonstration", - VERIFY_INSPECTION: "Inspection", - VERIFY_TEST: "Test" -}; -const Relationships = { - CONTAINS: "contains", - COPIES: "copies", - DERIVES: "derives", - SATISFIES: "satisfies", - VERIFIES: "verifies", - REFINES: "refines", - TRACES: "traces" -}; -const addRequirement = (name, type) => { - if (requirements[name] === void 0) { - requirements[name] = { - name, - type, - id: latestRequirement.id, - text: latestRequirement.text, - risk: latestRequirement.risk, - verifyMethod: latestRequirement.verifyMethod - }; - } - latestRequirement = {}; - return requirements[name]; -}; -const getRequirements = () => requirements; -const setNewReqId = (id) => { - if (latestRequirement !== void 0) { - latestRequirement.id = id; - } -}; -const setNewReqText = (text) => { - if (latestRequirement !== void 0) { - latestRequirement.text = text; - } -}; -const setNewReqRisk = (risk) => { - if (latestRequirement !== void 0) { - latestRequirement.risk = risk; - } -}; -const setNewReqVerifyMethod = (verifyMethod) => { - if (latestRequirement !== void 0) { - latestRequirement.verifyMethod = verifyMethod; - } -}; -const addElement = (name) => { - if (elements[name] === void 0) { - elements[name] = { - name, - type: latestElement.type, - docRef: latestElement.docRef - }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Added new requirement: ", name); - } - latestElement = {}; - return elements[name]; -}; -const getElements = () => elements; -const setNewElementType = (type) => { - if (latestElement !== void 0) { - latestElement.type = type; - } -}; -const setNewElementDocRef = (docRef) => { - if (latestElement !== void 0) { - latestElement.docRef = docRef; - } -}; -const addRelationship = (type, src, dst) => { - relations.push({ - type, - src, - dst - }); -}; -const getRelationships = () => relations; -const clear = () => { - relations = []; - latestRequirement = {}; - requirements = {}; - latestElement = {}; - elements = {}; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.v)(); -}; -const db = { - RequirementType, - RiskLevel, - VerifyType, - Relationships, - getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().req, - addRequirement, - getRequirements, - setNewReqId, - setNewReqText, - setNewReqRisk, - setNewReqVerifyMethod, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.g, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.b, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.a, - addElement, - getElements, - setNewElementType, - setNewElementDocRef, - addRelationship, - getRelationships, - clear -}; -const getStyles = (options) => ` - - marker { - fill: ${options.relationColor}; - stroke: ${options.relationColor}; - } - - marker.cross { - stroke: ${options.lineColor}; - } - - svg { - font-family: ${options.fontFamily}; - font-size: ${options.fontSize}; - } - - .reqBox { - fill: ${options.requirementBackground}; - fill-opacity: 1.0; - stroke: ${options.requirementBorderColor}; - stroke-width: ${options.requirementBorderSize}; - } - - .reqTitle, .reqLabel{ - fill: ${options.requirementTextColor}; - } - .reqLabelBox { - fill: ${options.relationLabelBackground}; - fill-opacity: 1.0; - } - - .req-title-line { - stroke: ${options.requirementBorderColor}; - stroke-width: ${options.requirementBorderSize}; - } - .relationshipLine { - stroke: ${options.relationColor}; - stroke-width: 1; - } - .relationshipLabel { - fill: ${options.relationLabelColor}; - } - -`; -const styles = getStyles; -const ReqMarkers = { - CONTAINS: "contains", - ARROW: "arrow" -}; -const insertLineEndings = (parentNode, conf2) => { - let containsNode = parentNode.append("defs").append("marker").attr("id", ReqMarkers.CONTAINS + "_line_ending").attr("refX", 0).attr("refY", conf2.line_height / 2).attr("markerWidth", conf2.line_height).attr("markerHeight", conf2.line_height).attr("orient", "auto").append("g"); - containsNode.append("circle").attr("cx", conf2.line_height / 2).attr("cy", conf2.line_height / 2).attr("r", conf2.line_height / 2).attr("fill", "none"); - containsNode.append("line").attr("x1", 0).attr("x2", conf2.line_height).attr("y1", conf2.line_height / 2).attr("y2", conf2.line_height / 2).attr("stroke-width", 1); - containsNode.append("line").attr("y1", 0).attr("y2", conf2.line_height).attr("x1", conf2.line_height / 2).attr("x2", conf2.line_height / 2).attr("stroke-width", 1); - parentNode.append("defs").append("marker").attr("id", ReqMarkers.ARROW + "_line_ending").attr("refX", conf2.line_height).attr("refY", 0.5 * conf2.line_height).attr("markerWidth", conf2.line_height).attr("markerHeight", conf2.line_height).attr("orient", "auto").append("path").attr( - "d", - `M0,0 - L${conf2.line_height},${conf2.line_height / 2} - M${conf2.line_height},${conf2.line_height / 2} - L0,${conf2.line_height}` - ).attr("stroke-width", 1); -}; -const markers = { - ReqMarkers, - insertLineEndings -}; -let conf = {}; -let relCnt = 0; -const newRectNode = (parentNode, id) => { - return parentNode.insert("rect", "#" + id).attr("class", "req reqBox").attr("x", 0).attr("y", 0).attr("width", conf.rect_min_width + "px").attr("height", conf.rect_min_height + "px"); -}; -const newTitleNode = (parentNode, id, txts) => { - let x = conf.rect_min_width / 2; - let title = parentNode.append("text").attr("class", "req reqLabel reqTitle").attr("id", id).attr("x", x).attr("y", conf.rect_padding).attr("dominant-baseline", "hanging"); - let i = 0; - txts.forEach((textStr) => { - if (i == 0) { - title.append("tspan").attr("text-anchor", "middle").attr("x", conf.rect_min_width / 2).attr("dy", 0).text(textStr); - } else { - title.append("tspan").attr("text-anchor", "middle").attr("x", conf.rect_min_width / 2).attr("dy", conf.line_height * 0.75).text(textStr); - } - i++; - }); - let yPadding = 1.5 * conf.rect_padding; - let linePadding = i * conf.line_height * 0.75; - let totalY = yPadding + linePadding; - parentNode.append("line").attr("class", "req-title-line").attr("x1", "0").attr("x2", conf.rect_min_width).attr("y1", totalY).attr("y2", totalY); - return { - titleNode: title, - y: totalY - }; -}; -const newBodyNode = (parentNode, id, txts, yStart) => { - let body = parentNode.append("text").attr("class", "req reqLabel").attr("id", id).attr("x", conf.rect_padding).attr("y", yStart).attr("dominant-baseline", "hanging"); - let currentRow = 0; - const charLimit = 30; - let wrappedTxts = []; - txts.forEach((textStr) => { - let currentTextLen = textStr.length; - while (currentTextLen > charLimit && currentRow < 3) { - let firstPart = textStr.substring(0, charLimit); - textStr = textStr.substring(charLimit, textStr.length); - currentTextLen = textStr.length; - wrappedTxts[wrappedTxts.length] = firstPart; - currentRow++; - } - if (currentRow == 3) { - let lastStr = wrappedTxts[wrappedTxts.length - 1]; - wrappedTxts[wrappedTxts.length - 1] = lastStr.substring(0, lastStr.length - 4) + "..."; - } else { - wrappedTxts[wrappedTxts.length] = textStr; - } - currentRow = 0; - }); - wrappedTxts.forEach((textStr) => { - body.append("tspan").attr("x", conf.rect_padding).attr("dy", conf.line_height).text(textStr); - }); - return body; -}; -const addEdgeLabel = (parentNode, svgPath, conf2, txt) => { - const len = svgPath.node().getTotalLength(); - const labelPoint = svgPath.node().getPointAtLength(len * 0.5); - const labelId = "rel" + relCnt; - relCnt++; - const labelNode = parentNode.append("text").attr("class", "req relationshipLabel").attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(txt); - const labelBBox = labelNode.node().getBBox(); - parentNode.insert("rect", "#" + labelId).attr("class", "req reqLabelBox").attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height).attr("fill", "white").attr("fill-opacity", "85%"); -}; -const drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) { - const edge = g.edge(elementString(rel.src), elementString(rel.dst)); - const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(function(d) { - return d.x; - }).y(function(d) { - return d.y; - }); - const svgPath = svg.insert("path", "#" + insert).attr("class", "er relationshipLine").attr("d", lineFunction(edge.points)).attr("fill", "none"); - if (rel.type == diagObj.db.Relationships.CONTAINS) { - svgPath.attr( - "marker-start", - "url(" + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.e.getUrl(conf.arrowMarkerAbsolute) + "#" + rel.type + "_line_ending)" - ); - } else { - svgPath.attr("stroke-dasharray", "10,7"); - svgPath.attr( - "marker-end", - "url(" + _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.e.getUrl(conf.arrowMarkerAbsolute) + "#" + markers.ReqMarkers.ARROW + "_line_ending)" - ); - } - addEdgeLabel(svg, svgPath, conf, `<<${rel.type}>>`); - return; -}; -const drawReqs = (reqs, graph, svgNode) => { - Object.keys(reqs).forEach((reqName) => { - let req = reqs[reqName]; - reqName = elementString(reqName); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Added new requirement: ", reqName); - const groupNode = svgNode.append("g").attr("id", reqName); - const textId = "req-" + reqName; - const rectNode = newRectNode(groupNode, textId); - let titleNodeInfo = newTitleNode(groupNode, reqName + "_title", [ - `<<${req.type}>>`, - `${req.name}` - ]); - newBodyNode( - groupNode, - reqName + "_body", - [ - `Id: ${req.id}`, - `Text: ${req.text}`, - `Risk: ${req.risk}`, - `Verification: ${req.verifyMethod}` - ], - titleNodeInfo.y - ); - const rectBBox = rectNode.node().getBBox(); - graph.setNode(reqName, { - width: rectBBox.width, - height: rectBBox.height, - shape: "rect", - id: reqName - }); - }); -}; -const drawElements = (els, graph, svgNode) => { - Object.keys(els).forEach((elName) => { - let el = els[elName]; - const id = elementString(elName); - const groupNode = svgNode.append("g").attr("id", id); - const textId = "element-" + id; - const rectNode = newRectNode(groupNode, textId); - let titleNodeInfo = newTitleNode(groupNode, textId + "_title", [`<<Element>>`, `${elName}`]); - newBodyNode( - groupNode, - textId + "_body", - [`Type: ${el.type || "Not Specified"}`, `Doc Ref: ${el.docRef || "None"}`], - titleNodeInfo.y - ); - const rectBBox = rectNode.node().getBBox(); - graph.setNode(id, { - width: rectBBox.width, - height: rectBBox.height, - shape: "rect", - id - }); - }); -}; -const addRelationships = (relationships, g) => { - relationships.forEach(function(r) { - let src = elementString(r.src); - let dst = elementString(r.dst); - g.setEdge(src, dst, { relationship: r }); - }); - return relationships; -}; -const adjustEntities = function(svgNode, graph) { - graph.nodes().forEach(function(v) { - if (v !== void 0 && graph.node(v) !== void 0) { - svgNode.select("#" + v); - svgNode.select("#" + v).attr( - "transform", - "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y - graph.node(v).height / 2) + " )" - ); - } - }); - return; -}; -const elementString = (str) => { - return str.replace(/\s/g, "").replace(/\./g, "_"); -}; -const draw = (text, id, _version, diagObj) => { - conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.c)().requirement; - const securityLevel = conf.securityLevel; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); - const svg = root.select(`[id='${id}']`); - markers.insertLineEndings(svg, conf); - const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .T({ - multigraph: false, - compound: false, - directed: true - }).setGraph({ - rankdir: conf.layoutDirection, - marginx: 20, - marginy: 20, - nodesep: 100, - edgesep: 100, - ranksep: 100 - }).setDefaultEdgeLabel(function() { - return {}; - }); - let requirements2 = diagObj.db.getRequirements(); - let elements2 = diagObj.db.getElements(); - let relationships = diagObj.db.getRelationships(); - drawReqs(requirements2, g, svg); - drawElements(elements2, g, svg); - addRelationships(relationships, g); - (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .Zp)(g); - adjustEntities(svg, g); - relationships.forEach(function(rel) { - drawRelationshipFromLayout(svg, rel, g, id, diagObj); - }); - const padding = conf.rect_padding; - const svgBounds = svg.node().getBBox(); - const width = svgBounds.width + padding * 2; - const height = svgBounds.height + padding * 2; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_6__.i)(svg, height, width, conf.useMaxWidth); - svg.attr("viewBox", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); -}; -const renderer = { - draw -}; -const diagram = { - parser: parser$1, - db, - renderer, - styles -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/741.b53f607c.js b/pr-preview/pr-1594/assets/js/741.b53f607c.js deleted file mode 100644 index 90cc6aabab..0000000000 --- a/pr-preview/pr-1594/assets/js/741.b53f607c.js +++ /dev/null @@ -1,23923 +0,0 @@ -exports.id = 741; -exports.ids = [741]; -exports.modules = { - -/***/ 62954: -/***/ ((module) => { - -(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=undefined,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/******************************************************************************* - * Copyright (c) 2017 Kiel University and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -var ELK = function () { - function ELK() { - var _this = this; - - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref$defaultLayoutOpt = _ref.defaultLayoutOptions, - defaultLayoutOptions = _ref$defaultLayoutOpt === undefined ? {} : _ref$defaultLayoutOpt, - _ref$algorithms = _ref.algorithms, - algorithms = _ref$algorithms === undefined ? ['layered', 'stress', 'mrtree', 'radial', 'force', 'disco', 'sporeOverlap', 'sporeCompaction', 'rectpacking'] : _ref$algorithms, - workerFactory = _ref.workerFactory, - workerUrl = _ref.workerUrl; - - _classCallCheck(this, ELK); - - this.defaultLayoutOptions = defaultLayoutOptions; - this.initialized = false; - - // check valid worker construction possible - if (typeof workerUrl === 'undefined' && typeof workerFactory === 'undefined') { - throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'."); - } - var factory = workerFactory; - if (typeof workerUrl !== 'undefined' && typeof workerFactory === 'undefined') { - // use default Web Worker - factory = function factory(url) { - return new Worker(url); - }; - } - - // create the worker - var worker = factory(workerUrl); - if (typeof worker.postMessage !== 'function') { - throw new TypeError("Created worker does not provide" + " the required 'postMessage' function."); - } - - // wrap the worker to return promises - this.worker = new PromisedWorker(worker); - - // initially register algorithms - this.worker.postMessage({ - cmd: 'register', - algorithms: algorithms - }).then(function (r) { - return _this.initialized = true; - }).catch(console.err); - } - - _createClass(ELK, [{ - key: 'layout', - value: function layout(graph) { - var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref2$layoutOptions = _ref2.layoutOptions, - layoutOptions = _ref2$layoutOptions === undefined ? this.defaultLayoutOptions : _ref2$layoutOptions, - _ref2$logging = _ref2.logging, - logging = _ref2$logging === undefined ? false : _ref2$logging, - _ref2$measureExecutio = _ref2.measureExecutionTime, - measureExecutionTime = _ref2$measureExecutio === undefined ? false : _ref2$measureExecutio; - - if (!graph) { - return Promise.reject(new Error("Missing mandatory parameter 'graph'.")); - } - return this.worker.postMessage({ - cmd: 'layout', - graph: graph, - layoutOptions: layoutOptions, - options: { - logging: logging, - measureExecutionTime: measureExecutionTime - } - }); - } - }, { - key: 'knownLayoutAlgorithms', - value: function knownLayoutAlgorithms() { - return this.worker.postMessage({ cmd: 'algorithms' }); - } - }, { - key: 'knownLayoutOptions', - value: function knownLayoutOptions() { - return this.worker.postMessage({ cmd: 'options' }); - } - }, { - key: 'knownLayoutCategories', - value: function knownLayoutCategories() { - return this.worker.postMessage({ cmd: 'categories' }); - } - }, { - key: 'terminateWorker', - value: function terminateWorker() { - this.worker.terminate(); - } - }]); - - return ELK; -}(); - -exports.default = ELK; - -var PromisedWorker = function () { - function PromisedWorker(worker) { - var _this2 = this; - - _classCallCheck(this, PromisedWorker); - - if (worker === undefined) { - throw new Error("Missing mandatory parameter 'worker'."); - } - this.resolvers = {}; - this.worker = worker; - this.worker.onmessage = function (answer) { - // why is this necessary? - setTimeout(function () { - _this2.receive(_this2, answer); - }, 0); - }; - } - - _createClass(PromisedWorker, [{ - key: 'postMessage', - value: function postMessage(msg) { - var id = this.id || 0; - this.id = id + 1; - msg.id = id; - var self = this; - return new Promise(function (resolve, reject) { - // prepare the resolver - self.resolvers[id] = function (err, res) { - if (err) { - self.convertGwtStyleError(err); - reject(err); - } else { - resolve(res); - } - }; - // post the message - self.worker.postMessage(msg); - }); - } - }, { - key: 'receive', - value: function receive(self, answer) { - var json = answer.data; - var resolver = self.resolvers[json.id]; - if (resolver) { - delete self.resolvers[json.id]; - if (json.error) { - resolver(json.error); - } else { - resolver(null, json.data); - } - } - } - }, { - key: 'terminate', - value: function terminate() { - if (this.worker.terminate) { - this.worker.terminate(); - } - } - }, { - key: 'convertGwtStyleError', - value: function convertGwtStyleError(err) { - if (!err) { - return; - } - // Somewhat flatten the way GWT stores nested exception(s) - var javaException = err['__java$exception']; - if (javaException) { - // Note that the property name of the nested exception is different - // in the non-minified ('cause') and the minified (not deterministic) version. - // Hence, the version below only works for the non-minified version. - // However, as the minified stack trace is not of much use anyway, one - // should switch the used version for debugging in such a case. - if (javaException.cause && javaException.cause.backingJsObject) { - err.cause = javaException.cause.backingJsObject; - this.convertGwtStyleError(err.cause); - } - delete err['__java$exception']; - } - } - }]); - - return PromisedWorker; -}(); -},{}],2:[function(require,module,exports){ -(function (global){(function (){ -'use strict'; - -// -------------- FAKE ELEMENTS GWT ASSUMES EXIST -------------- -var $wnd; -if (typeof window !== 'undefined') - $wnd = window -else if (typeof global !== 'undefined') - $wnd = global // nodejs -else if (typeof self !== 'undefined') - $wnd = self // web worker - -var $moduleName, - $moduleBase; - -// -------------- WORKAROUND STRICT MODE, SEE #127 -------------- -var g, i, o; - -// -------------- GENERATED CODE -------------- -function nb(){} -function xb(){} -function Fd(){} -function hh(){} -function lq(){} -function Nq(){} -function ir(){} -function Ws(){} -function Zw(){} -function jx(){} -function rx(){} -function sx(){} -function My(){} -function bA(){} -function mA(){} -function tA(){} -function aB(){} -function dB(){} -function jB(){} -function dC(){} -function keb(){} -function geb(){} -function oeb(){} -function iob(){} -function Job(){} -function Rob(){} -function apb(){} -function ipb(){} -function nrb(){} -function wrb(){} -function Brb(){} -function Prb(){} -function ltb(){} -function svb(){} -function xvb(){} -function zvb(){} -function $xb(){} -function Gzb(){} -function NAb(){} -function VAb(){} -function rBb(){} -function RBb(){} -function TBb(){} -function XBb(){} -function ZBb(){} -function _Bb(){} -function bCb(){} -function dCb(){} -function fCb(){} -function jCb(){} -function rCb(){} -function uCb(){} -function wCb(){} -function yCb(){} -function ACb(){} -function ECb(){} -function FEb(){} -function IEb(){} -function KEb(){} -function MEb(){} -function gFb(){} -function FFb(){} -function JFb(){} -function xGb(){} -function AGb(){} -function YGb(){} -function oHb(){} -function tHb(){} -function xHb(){} -function pIb(){} -function BJb(){} -function kLb(){} -function mLb(){} -function oLb(){} -function qLb(){} -function FLb(){} -function JLb(){} -function KMb(){} -function MMb(){} -function OMb(){} -function YMb(){} -function MNb(){} -function ONb(){} -function aOb(){} -function eOb(){} -function xOb(){} -function BOb(){} -function DOb(){} -function FOb(){} -function IOb(){} -function MOb(){} -function POb(){} -function UOb(){} -function ZOb(){} -function cPb(){} -function gPb(){} -function nPb(){} -function qPb(){} -function tPb(){} -function wPb(){} -function CPb(){} -function qQb(){} -function GQb(){} -function bRb(){} -function gRb(){} -function kRb(){} -function pRb(){} -function wRb(){} -function xSb(){} -function TSb(){} -function VSb(){} -function XSb(){} -function ZSb(){} -function _Sb(){} -function tTb(){} -function DTb(){} -function FTb(){} -function FXb(){} -function hXb(){} -function hWb(){} -function mWb(){} -function CVb(){} -function XXb(){} -function $Xb(){} -function bYb(){} -function lYb(){} -function FYb(){} -function XYb(){} -function aZb(){} -function SZb(){} -function ZZb(){} -function Z_b(){} -function j_b(){} -function j$b(){} -function b$b(){} -function f$b(){} -function n$b(){} -function K_b(){} -function V_b(){} -function b0b(){} -function l0b(){} -function X1b(){} -function _1b(){} -function x3b(){} -function r4b(){} -function w4b(){} -function A4b(){} -function E4b(){} -function I4b(){} -function M4b(){} -function o5b(){} -function q5b(){} -function w5b(){} -function A5b(){} -function E5b(){} -function h6b(){} -function j6b(){} -function l6b(){} -function q6b(){} -function v6b(){} -function y6b(){} -function G6b(){} -function K6b(){} -function N6b(){} -function P6b(){} -function R6b(){} -function b7b(){} -function f7b(){} -function j7b(){} -function n7b(){} -function C7b(){} -function H7b(){} -function J7b(){} -function L7b(){} -function N7b(){} -function P7b(){} -function a8b(){} -function c8b(){} -function e8b(){} -function g8b(){} -function i8b(){} -function m8b(){} -function Z8b(){} -function f9b(){} -function i9b(){} -function o9b(){} -function C9b(){} -function F9b(){} -function K9b(){} -function Q9b(){} -function aac(){} -function bac(){} -function eac(){} -function mac(){} -function pac(){} -function rac(){} -function tac(){} -function xac(){} -function Aac(){} -function Dac(){} -function Iac(){} -function Oac(){} -function Uac(){} -function Ucc(){} -function scc(){} -function ycc(){} -function Acc(){} -function Ccc(){} -function Ncc(){} -function Wcc(){} -function ydc(){} -function Adc(){} -function Gdc(){} -function Ldc(){} -function Zdc(){} -function fec(){} -function Dec(){} -function Gec(){} -function Kec(){} -function efc(){} -function jfc(){} -function nfc(){} -function Bfc(){} -function Ifc(){} -function Lfc(){} -function Rfc(){} -function Ufc(){} -function Zfc(){} -function cgc(){} -function egc(){} -function ggc(){} -function igc(){} -function kgc(){} -function Dgc(){} -function Hgc(){} -function Lgc(){} -function Ngc(){} -function Pgc(){} -function Vgc(){} -function Ygc(){} -function chc(){} -function ehc(){} -function ghc(){} -function ihc(){} -function mhc(){} -function rhc(){} -function uhc(){} -function whc(){} -function yhc(){} -function Ahc(){} -function Chc(){} -function Ghc(){} -function Nhc(){} -function Phc(){} -function Rhc(){} -function Thc(){} -function $hc(){} -function aic(){} -function cic(){} -function eic(){} -function jic(){} -function nic(){} -function pic(){} -function ric(){} -function vic(){} -function yic(){} -function Dic(){} -function Ric(){} -function Zic(){} -function bjc(){} -function djc(){} -function jjc(){} -function njc(){} -function rjc(){} -function tjc(){} -function zjc(){} -function Djc(){} -function Fjc(){} -function Ljc(){} -function Pjc(){} -function Rjc(){} -function fkc(){} -function Kkc(){} -function Mkc(){} -function Okc(){} -function Qkc(){} -function Skc(){} -function Ukc(){} -function Wkc(){} -function clc(){} -function elc(){} -function klc(){} -function mlc(){} -function olc(){} -function qlc(){} -function wlc(){} -function ylc(){} -function Alc(){} -function Jlc(){} -function Joc(){} -function poc(){} -function roc(){} -function toc(){} -function voc(){} -function Boc(){} -function Foc(){} -function Hoc(){} -function Loc(){} -function Noc(){} -function Poc(){} -function qnc(){} -function unc(){} -function upc(){} -function kpc(){} -function mpc(){} -function opc(){} -function qpc(){} -function ypc(){} -function Cpc(){} -function Mpc(){} -function Qpc(){} -function dqc(){} -function jqc(){} -function Aqc(){} -function Eqc(){} -function Gqc(){} -function Sqc(){} -function arc(){} -function lrc(){} -function zrc(){} -function Hrc(){} -function bsc(){} -function dsc(){} -function fsc(){} -function ksc(){} -function msc(){} -function Asc(){} -function Csc(){} -function Esc(){} -function Ksc(){} -function Nsc(){} -function Ssc(){} -function CCc(){} -function tGc(){} -function aHc(){} -function gHc(){} -function nIc(){} -function PJc(){} -function XKc(){} -function fLc(){} -function hLc(){} -function lLc(){} -function eNc(){} -function IOc(){} -function MOc(){} -function WOc(){} -function YOc(){} -function $Oc(){} -function cPc(){} -function iPc(){} -function mPc(){} -function oPc(){} -function qPc(){} -function sPc(){} -function wPc(){} -function APc(){} -function FPc(){} -function HPc(){} -function NPc(){} -function PPc(){} -function TPc(){} -function VPc(){} -function ZPc(){} -function _Pc(){} -function bQc(){} -function dQc(){} -function SQc(){} -function hRc(){} -function HRc(){} -function HSc(){} -function pSc(){} -function xSc(){} -function zSc(){} -function BSc(){} -function DSc(){} -function FSc(){} -function CTc(){} -function ITc(){} -function KTc(){} -function MTc(){} -function XTc(){} -function ZTc(){} -function jVc(){} -function lVc(){} -function zVc(){} -function IVc(){} -function KVc(){} -function KWc(){} -function uWc(){} -function xWc(){} -function AWc(){} -function QWc(){} -function UWc(){} -function qXc(){} -function KXc(){} -function OXc(){} -function SXc(){} -function $Xc(){} -function mYc(){} -function rYc(){} -function zYc(){} -function DYc(){} -function FYc(){} -function HYc(){} -function JYc(){} -function cZc(){} -function gZc(){} -function iZc(){} -function pZc(){} -function tZc(){} -function vZc(){} -function AZc(){} -function GZc(){} -function l_c(){} -function l1c(){} -function b1c(){} -function d1c(){} -function h1c(){} -function n1c(){} -function r1c(){} -function v1c(){} -function x1c(){} -function D1c(){} -function H1c(){} -function L1c(){} -function R1c(){} -function V1c(){} -function Z1c(){} -function Z0c(){} -function a0c(){} -function c0c(){} -function e0c(){} -function k0c(){} -function o0c(){} -function b2c(){} -function l2c(){} -function p2c(){} -function Y2c(){} -function _2c(){} -function A3c(){} -function F3c(){} -function I3c(){} -function K3c(){} -function M3c(){} -function Q3c(){} -function U3c(){} -function c5c(){} -function D5c(){} -function G5c(){} -function J5c(){} -function N5c(){} -function V5c(){} -function p6c(){} -function s6c(){} -function H6c(){} -function K6c(){} -function _7c(){} -function h8c(){} -function j8c(){} -function o8c(){} -function r8c(){} -function u8c(){} -function R8c(){} -function X8c(){} -function o9c(){} -function s9c(){} -function x9c(){} -function Qad(){} -function rcd(){} -function Xcd(){} -function vdd(){} -function Tdd(){} -function _dd(){} -function qed(){} -function sed(){} -function ved(){} -function Hed(){} -function Zed(){} -function bfd(){} -function ifd(){} -function Gfd(){} -function Ifd(){} -function Igd(){} -function agd(){} -function dgd(){} -function pgd(){} -function Hgd(){} -function Kgd(){} -function Mgd(){} -function Ogd(){} -function Qgd(){} -function Sgd(){} -function Ugd(){} -function Wgd(){} -function Ygd(){} -function $gd(){} -function ahd(){} -function chd(){} -function ehd(){} -function ghd(){} -function ihd(){} -function khd(){} -function mhd(){} -function ohd(){} -function qhd(){} -function shd(){} -function Shd(){} -function lkd(){} -function znd(){} -function Jpd(){} -function jrd(){} -function Mrd(){} -function Qrd(){} -function Urd(){} -function Yrd(){} -function Yud(){} -function eud(){} -function asd(){} -function Lsd(){} -function btd(){} -function dtd(){} -function jtd(){} -function otd(){} -function ztd(){} -function Xxd(){} -function $yd(){} -function rzd(){} -function Rzd(){} -function KAd(){} -function hCd(){} -function _Cd(){} -function _Sd(){} -function OSd(){} -function BDd(){} -function BId(){} -function JId(){} -function YHd(){} -function fLd(){} -function cPd(){} -function hQd(){} -function AQd(){} -function kUd(){} -function VUd(){} -function pVd(){} -function W$d(){} -function Z$d(){} -function a_d(){} -function i_d(){} -function v_d(){} -function y_d(){} -function f1d(){} -function L5d(){} -function v6d(){} -function b8d(){} -function e8d(){} -function h8d(){} -function k8d(){} -function n8d(){} -function q8d(){} -function t8d(){} -function w8d(){} -function z8d(){} -function X9d(){} -function _9d(){} -function Mae(){} -function cbe(){} -function ebe(){} -function hbe(){} -function kbe(){} -function nbe(){} -function qbe(){} -function tbe(){} -function wbe(){} -function zbe(){} -function Cbe(){} -function Fbe(){} -function Ibe(){} -function Lbe(){} -function Obe(){} -function Rbe(){} -function Ube(){} -function Xbe(){} -function $be(){} -function bce(){} -function ece(){} -function hce(){} -function kce(){} -function nce(){} -function qce(){} -function tce(){} -function wce(){} -function zce(){} -function Cce(){} -function Fce(){} -function Ice(){} -function Lce(){} -function Oce(){} -function Rce(){} -function Uce(){} -function Xce(){} -function $ce(){} -function bde(){} -function ede(){} -function hde(){} -function kde(){} -function nde(){} -function qde(){} -function tde(){} -function wde(){} -function Hie(){} -function rke(){} -function rne(){} -function Ene(){} -function Gne(){} -function Jne(){} -function Mne(){} -function Pne(){} -function Sne(){} -function Vne(){} -function Yne(){} -function _ne(){} -function yme(){} -function coe(){} -function foe(){} -function ioe(){} -function loe(){} -function ooe(){} -function roe(){} -function uoe(){} -function xoe(){} -function Aoe(){} -function Doe(){} -function Goe(){} -function Joe(){} -function Moe(){} -function Poe(){} -function Soe(){} -function Voe(){} -function Yoe(){} -function _oe(){} -function cpe(){} -function fpe(){} -function ipe(){} -function lpe(){} -function ope(){} -function rpe(){} -function upe(){} -function xpe(){} -function Ape(){} -function Dpe(){} -function Gpe(){} -function Jpe(){} -function Mpe(){} -function Ppe(){} -function Spe(){} -function Vpe(){} -function Ype(){} -function _pe(){} -function cqe(){} -function fqe(){} -function iqe(){} -function lqe(){} -function oqe(){} -function rqe(){} -function uqe(){} -function Tqe(){} -function sue(){} -function Cue(){} -function A2b(a){} -function J3d(a){} -function zl(){wb()} -function z7b(){s7b()} -function ZHb(){YHb()} -function fSb(){eSb()} -function vSb(){tSb()} -function PUb(){OUb()} -function AVb(){yVb()} -function RVb(){QVb()} -function fWb(){dWb()} -function N5b(){H5b()} -function $9b(){U9b()} -function Lcc(){Hcc()} -function pdc(){Zcc()} -function pec(){iec()} -function pGc(){nGc()} -function jGc(){gGc()} -function YGc(){SGc()} -function cGc(){_Fc()} -function NFc(){KFc()} -function xgc(){sgc()} -function xHc(){tHc()} -function pHc(){lHc()} -function IHc(){CHc()} -function XHc(){RHc()} -function boc(){Mnc()} -function yqc(){mqc()} -function Pzc(){Ozc()} -function ACc(){yCc()} -function aKc(){YJc()} -function FLc(){DLc()} -function DNc(){ANc()} -function TNc(){JNc()} -function iQc(){gQc()} -function WRc(){TRc()} -function C$c(){B$c()} -function J0c(){B0c()} -function x0c(){r0c()} -function j_c(){h_c()} -function N_c(){H_c()} -function V_c(){R_c()} -function E4c(){D4c()} -function a5c(){$4c()} -function v7c(){u7c()} -function Z7c(){X7c()} -function pcd(){ncd()} -function Lcd(){Kcd()} -function Vcd(){Tcd()} -function fUd(){TTd()} -function Bfd(){Afd()} -function jkd(){hkd()} -function vmd(){umd()} -function xnd(){vnd()} -function Hpd(){Fpd()} -function HYd(){lYd()} -function yAd(){qAd()} -function gke(){rue()} -function Yxb(a){uFb(a)} -function Yb(a){this.a=a} -function cc(a){this.a=a} -function df(a){this.a=a} -function kf(a){this.a=a} -function kj(a){this.a=a} -function qj(a){this.a=a} -function Lj(a){this.a=a} -function jh(a){this.a=a} -function th(a){this.a=a} -function Bh(a){this.a=a} -function Xh(a){this.a=a} -function Xn(a){this.a=a} -function Di(a){this.a=a} -function Ki(a){this.a=a} -function Ik(a){this.a=a} -function Qk(a){this.a=a} -function mp(a){this.a=a} -function Lp(a){this.a=a} -function iq(a){this.a=a} -function Eq(a){this.a=a} -function Vq(a){this.a=a} -function Or(a){this.a=a} -function $r(a){this.b=a} -function Aj(a){this.c=a} -function vu(a){this.a=a} -function vw(a){this.a=a} -function gw(a){this.a=a} -function lw(a){this.a=a} -function Iw(a){this.a=a} -function Nw(a){this.a=a} -function Sw(a){this.a=a} -function ex(a){this.a=a} -function fx(a){this.a=a} -function lx(a){this.a=a} -function my(a){this.a=a} -function qy(a){this.a=a} -function Oy(a){this.a=a} -function NB(a){this.a=a} -function XB(a){this.a=a} -function hC(a){this.a=a} -function vC(a){this.a=a} -function MB(){this.a=[]} -function HEb(a,b){a.a=b} -function E2b(a,b){a.a=b} -function F2b(a,b){a.b=b} -function PRb(a,b){a.b=b} -function RRb(a,b){a.b=b} -function QJb(a,b){a.j=b} -function hQb(a,b){a.g=b} -function iQb(a,b){a.i=b} -function _Tb(a,b){a.c=b} -function G2b(a,b){a.c=b} -function H2b(a,b){a.d=b} -function aUb(a,b){a.d=b} -function h3b(a,b){a.k=b} -function O3b(a,b){a.c=b} -function Tmc(a,b){a.c=b} -function Smc(a,b){a.a=b} -function DJc(a,b){a.a=b} -function EJc(a,b){a.f=b} -function NSc(a,b){a.a=b} -function OSc(a,b){a.b=b} -function PSc(a,b){a.d=b} -function QSc(a,b){a.i=b} -function RSc(a,b){a.o=b} -function SSc(a,b){a.r=b} -function yUc(a,b){a.a=b} -function zUc(a,b){a.b=b} -function q3c(a,b){a.e=b} -function r3c(a,b){a.f=b} -function s3c(a,b){a.g=b} -function Y9c(a,b){a.e=b} -function Z9c(a,b){a.f=b} -function kad(a,b){a.f=b} -function Ntd(a,b){a.a=b} -function Otd(a,b){a.b=b} -function BWd(a,b){a.n=b} -function $ee(a,b){a.a=b} -function _ee(a,b){a.c=b} -function ife(a,b){a.c=b} -function Efe(a,b){a.c=b} -function hfe(a,b){a.a=b} -function Dfe(a,b){a.a=b} -function jfe(a,b){a.d=b} -function Ffe(a,b){a.d=b} -function kfe(a,b){a.e=b} -function Gfe(a,b){a.e=b} -function lfe(a,b){a.g=b} -function Hfe(a,b){a.f=b} -function Ife(a,b){a.j=b} -function wme(a,b){a.a=b} -function Fme(a,b){a.a=b} -function xme(a,b){a.b=b} -function gmc(a){a.b=a.a} -function Lg(a){a.c=a.d.d} -function fgb(a){this.a=a} -function zgb(a){this.a=a} -function Xgb(a){this.a=a} -function Xkb(a){this.a=a} -function mkb(a){this.a=a} -function reb(a){this.a=a} -function Seb(a){this.a=a} -function bfb(a){this.a=a} -function Tfb(a){this.a=a} -function blb(a){this.a=a} -function glb(a){this.a=a} -function llb(a){this.a=a} -function Ulb(a){this.a=a} -function _lb(a){this.a=a} -function Plb(a){this.b=a} -function Ppb(a){this.b=a} -function xpb(a){this.b=a} -function mpb(a){this.a=a} -function Yqb(a){this.a=a} -function uqb(a){this.c=a} -function Anb(a){this.c=a} -function zwb(a){this.c=a} -function Dkb(a){this.d=a} -function brb(a){this.a=a} -function Frb(a){this.a=a} -function hsb(a){this.a=a} -function ctb(a){this.a=a} -function cxb(a){this.a=a} -function axb(a){this.a=a} -function exb(a){this.a=a} -function gxb(a){this.a=a} -function wub(a){this.a=a} -function zAb(a){this.a=a} -function JAb(a){this.a=a} -function LAb(a){this.a=a} -function PAb(a){this.a=a} -function VBb(a){this.a=a} -function lCb(a){this.a=a} -function nCb(a){this.a=a} -function pCb(a){this.a=a} -function CCb(a){this.a=a} -function GCb(a){this.a=a} -function bDb(a){this.a=a} -function dDb(a){this.a=a} -function fDb(a){this.a=a} -function uDb(a){this.a=a} -function $Db(a){this.a=a} -function aEb(a){this.a=a} -function eEb(a){this.a=a} -function OEb(a){this.a=a} -function SEb(a){this.a=a} -function SFb(a){this.a=a} -function HFb(a){this.a=a} -function NFb(a){this.a=a} -function WGb(a){this.a=a} -function HJb(a){this.a=a} -function PJb(a){this.a=a} -function kNb(a){this.a=a} -function tOb(a){this.a=a} -function APb(a){this.a=a} -function IQb(a){this.a=a} -function bTb(a){this.a=a} -function dTb(a){this.a=a} -function wTb(a){this.a=a} -function GWb(a){this.a=a} -function UWb(a){this.a=a} -function WWb(a){this.a=a} -function fXb(a){this.a=a} -function jXb(a){this.a=a} -function M0b(a){this.a=a} -function r1b(a){this.a=a} -function D1b(a){this.e=a} -function T3b(a){this.a=a} -function W3b(a){this.a=a} -function _3b(a){this.a=a} -function c4b(a){this.a=a} -function s5b(a){this.a=a} -function u5b(a){this.a=a} -function y5b(a){this.a=a} -function C5b(a){this.a=a} -function Q5b(a){this.a=a} -function S5b(a){this.a=a} -function U5b(a){this.a=a} -function W5b(a){this.a=a} -function l7b(a){this.a=a} -function p7b(a){this.a=a} -function k8b(a){this.a=a} -function L8b(a){this.a=a} -function Rac(a){this.a=a} -function Xac(a){this.a=a} -function $ac(a){this.a=a} -function bbc(a){this.a=a} -function Cdc(a){this.a=a} -function Edc(a){this.a=a} -function Ehc(a){this.a=a} -function khc(a){this.a=a} -function Ihc(a){this.a=a} -function qfc(a){this.a=a} -function tfc(a){this.a=a} -function Wfc(a){this.a=a} -function Fic(a){this.a=a} -function Vic(a){this.a=a} -function fjc(a){this.a=a} -function pjc(a){this.a=a} -function ckc(a){this.a=a} -function hkc(a){this.a=a} -function Ykc(a){this.a=a} -function $kc(a){this.a=a} -function alc(a){this.a=a} -function glc(a){this.a=a} -function ilc(a){this.a=a} -function slc(a){this.a=a} -function Clc(a){this.a=a} -function xoc(a){this.a=a} -function zoc(a){this.a=a} -function spc(a){this.a=a} -function Vqc(a){this.a=a} -function Xqc(a){this.a=a} -function Gsc(a){this.a=a} -function Isc(a){this.a=a} -function JGc(a){this.a=a} -function NGc(a){this.a=a} -function MHc(a){this.a=a} -function JIc(a){this.a=a} -function fJc(a){this.a=a} -function BJc(a){this.a=a} -function dJc(a){this.c=a} -function Trc(a){this.b=a} -function eKc(a){this.a=a} -function IKc(a){this.a=a} -function KKc(a){this.a=a} -function MKc(a){this.a=a} -function yLc(a){this.a=a} -function HMc(a){this.a=a} -function LMc(a){this.a=a} -function PMc(a){this.a=a} -function TMc(a){this.a=a} -function XMc(a){this.a=a} -function ZMc(a){this.a=a} -function aNc(a){this.a=a} -function jNc(a){this.a=a} -function aPc(a){this.a=a} -function gPc(a){this.a=a} -function kPc(a){this.a=a} -function yPc(a){this.a=a} -function CPc(a){this.a=a} -function JPc(a){this.a=a} -function RPc(a){this.a=a} -function XPc(a){this.a=a} -function mRc(a){this.a=a} -function xTc(a){this.a=a} -function CWc(a){this.a=a} -function EWc(a){this.a=a} -function IWc(a){this.a=a} -function OWc(a){this.a=a} -function dXc(a){this.a=a} -function gXc(a){this.a=a} -function EXc(a){this.a=a} -function WXc(a){this.a=a} -function YXc(a){this.a=a} -function aYc(a){this.a=a} -function cYc(a){this.a=a} -function eYc(a){this.a=a} -function iYc(a){this.a=a} -function i0c(a){this.a=a} -function g0c(a){this.a=a} -function P1c(a){this.a=a} -function Sad(a){this.a=a} -function Uad(a){this.a=a} -function Wad(a){this.a=a} -function Yad(a){this.a=a} -function cbd(a){this.a=a} -function ydd(a){this.a=a} -function Kdd(a){this.a=a} -function Mdd(a){this.a=a} -function _ed(a){this.a=a} -function dfd(a){this.a=a} -function Kfd(a){this.a=a} -function prd(a){this.a=a} -function $rd(a){this.a=a} -function csd(a){this.a=a} -function Usd(a){this.a=a} -function Vtd(a){this.a=a} -function wud(a){this.a=a} -function Rud(a){this.f=a} -function LEd(a){this.a=a} -function UEd(a){this.a=a} -function VEd(a){this.a=a} -function WEd(a){this.a=a} -function XEd(a){this.a=a} -function YEd(a){this.a=a} -function ZEd(a){this.a=a} -function $Ed(a){this.a=a} -function _Ed(a){this.a=a} -function aFd(a){this.a=a} -function gFd(a){this.a=a} -function iFd(a){this.a=a} -function jFd(a){this.a=a} -function kFd(a){this.a=a} -function lFd(a){this.a=a} -function nFd(a){this.a=a} -function qFd(a){this.a=a} -function wFd(a){this.a=a} -function xFd(a){this.a=a} -function zFd(a){this.a=a} -function AFd(a){this.a=a} -function BFd(a){this.a=a} -function CFd(a){this.a=a} -function DFd(a){this.a=a} -function MFd(a){this.a=a} -function OFd(a){this.a=a} -function QFd(a){this.a=a} -function SFd(a){this.a=a} -function uGd(a){this.a=a} -function QGd(a){this.a=a} -function jGd(a){this.b=a} -function YOd(a){this.a=a} -function ePd(a){this.a=a} -function kPd(a){this.a=a} -function qPd(a){this.a=a} -function IPd(a){this.a=a} -function w$d(a){this.a=a} -function e_d(a){this.a=a} -function Q_d(a){this.b=a} -function c1d(a){this.a=a} -function c2d(a){this.a=a} -function l5d(a){this.a=a} -function I9d(a){this.a=a} -function L6d(a){this.c=a} -function t7d(a){this.e=a} -function pae(a){this.a=a} -function xae(a){this.a=a} -function Zde(a){this.a=a} -function Sde(a){this.d=a} -function mee(a){this.a=a} -function uje(a){this.a=a} -function Bte(a){this.a=a} -function Wse(a){this.e=a} -function Xsd(){this.a=0} -function Tsb(){akb(this)} -function bnb(){Pmb(this)} -function cHb(){bHb(this)} -function I2b(){A2b(this)} -function s2d(){this.c=d2d} -function Prc(a,b){a.b+=b} -function Uje(a,b){b.Wb(a)} -function UC(a){return a.a} -function nC(a){return a.a} -function BC(a){return a.a} -function TB(a){return a.a} -function _B(a){return a.a} -function Adb(a){return a.e} -function gC(){return null} -function MC(){return null} -function leb(){MId();OId()} -function qMb(a){a.b.Of(a.e)} -function A$b(a){a.b=new Ri} -function A8b(a,b){a.b=b-a.b} -function x8b(a,b){a.a=b-a.a} -function ZEb(a,b){a.push(b)} -function bFb(a,b){a.sort(b)} -function Q5c(a,b){b.jd(a.a)} -function Voc(a,b){Q3b(b,a)} -function tp(a,b,c){a.Yd(c,b)} -function Ss(a,b){a.e=b;b.b=a} -function im(a){_l();this.a=a} -function xq(a){_l();this.a=a} -function Gq(a){_l();this.a=a} -function Xq(a){tm();this.a=a} -function gA(a){fA();eA.le(a)} -function vA(){vA=geb;new Tsb} -function xz(){mz.call(this)} -function Ceb(){mz.call(this)} -function ueb(){xz.call(this)} -function yeb(){xz.call(this)} -function Hfb(){xz.call(this)} -function _fb(){xz.call(this)} -function cgb(){xz.call(this)} -function Ngb(){xz.call(this)} -function jib(){xz.call(this)} -function Jrb(){xz.call(this)} -function Srb(){xz.call(this)} -function Dvb(){xz.call(this)} -function Ied(){xz.call(this)} -function R1d(){this.a=this} -function k1d(){this.Bb|=256} -function vWb(){this.b=new Et} -function aFb(a,b){a.length=b} -function dyb(a,b){Rmb(a.a,b)} -function jNb(a,b){LKb(a.c,b)} -function qRc(a,b){Ysb(a.b,b)} -function VOd(a,b){UNd(a.a,b)} -function WOd(a,b){VNd(a.a,b)} -function eZd(a,b){qvd(a.e,b)} -function Cke(a){bge(a.c,a.b)} -function uj(a,b){a.kc().Nb(b)} -function Ufb(a){this.a=Zfb(a)} -function _sb(){this.a=new Tsb} -function $Ab(){this.a=new Tsb} -function xAb(){this.a=new dzb} -function gyb(){this.a=new bnb} -function BIb(){this.a=new bnb} -function GIb(){this.a=new bnb} -function wIb(){this.a=new pIb} -function gJb(){this.a=new DIb} -function TTb(){this.a=new DTb} -function jGb(){this.a=new fGb} -function qGb(){this.a=new kGb} -function q_b(){this.a=new bnb} -function E_b(){this.a=new bnb} -function EZb(){this.a=new bnb} -function J$b(){this.a=new bnb} -function YNb(){this.d=new bnb} -function lXb(){this.a=new RWb} -function y_b(){this.a=new _sb} -function k5b(){this.a=new Tsb} -function E0b(){this.b=new Tsb} -function jHc(){this.b=new bnb} -function ZNc(){this.e=new bnb} -function ahc(){this.a=new boc} -function UQc(){this.d=new bnb} -function uRc(){tRc.call(this)} -function BRc(){tRc.call(this)} -function VOc(){bnb.call(this)} -function web(){ueb.call(this)} -function Fyb(){gyb.call(this)} -function fKb(){RJb.call(this)} -function N$b(){J$b.call(this)} -function P2b(){I2b.call(this)} -function T2b(){P2b.call(this)} -function z3b(){I2b.call(this)} -function C3b(){z3b.call(this)} -function cUc(){aUc.call(this)} -function hUc(){aUc.call(this)} -function mUc(){aUc.call(this)} -function Hdd(){Ddd.call(this)} -function ACd(){$yd.call(this)} -function PCd(){$yd.call(this)} -function Ejd(){Yub.call(this)} -function LQd(){wQd.call(this)} -function lRd(){wQd.call(this)} -function MSd(){Tsb.call(this)} -function VSd(){Tsb.call(this)} -function eTd(){Tsb.call(this)} -function mXd(){HWd.call(this)} -function i1d(){_sb.call(this)} -function A1d(){k1d.call(this)} -function q4d(){dWd.call(this)} -function O5d(){Tsb.call(this)} -function R5d(){dWd.call(this)} -function lae(){Tsb.call(this)} -function Cae(){Tsb.call(this)} -function ome(){kUd.call(this)} -function Hme(){ome.call(this)} -function Nme(){kUd.call(this)} -function Gre(){Tqe.call(this)} -function aUc(){this.a=new _sb} -function nZc(){this.a=new Tsb} -function DZc(){this.a=new bnb} -function Ddd(){this.a=new Tsb} -function Oqd(){this.a=new Yub} -function Oed(){this.j=new bnb} -function obd(){this.a=new nbd} -function wQd(){this.a=new AQd} -function R5c(){this.a=new V5c} -function wb(){wb=geb;vb=new xb} -function Wk(){Wk=geb;Vk=new Xk} -function kl(){kl=geb;jl=new ll} -function ll(){Qk.call(this,'')} -function Xk(){Qk.call(this,'')} -function Dd(a){yd.call(this,a)} -function Hd(a){yd.call(this,a)} -function xh(a){th.call(this,a)} -function $h(a){Wc.call(this,a)} -function Qi(a){Wc.call(this,a)} -function wi(a){$h.call(this,a)} -function Sp(a){$h.call(this,a)} -function Js(a){$h.call(this,a)} -function Jp(a){Xo.call(this,a)} -function Qp(a){Xo.call(this,a)} -function dq(a){ho.call(this,a)} -function Fv(a){uv.call(this,a)} -function aw(a){Tr.call(this,a)} -function cw(a){Tr.call(this,a)} -function _w(a){Tr.call(this,a)} -function Mx(a){Gn.call(this,a)} -function Nx(a){Mx.call(this,a)} -function yz(a){nz.call(this,a)} -function aC(a){yz.call(this,a)} -function uC(){vC.call(this,{})} -function cC(){cC=geb;bC=new dC} -function zs(){zs=geb;ys=new As} -function Az(){Az=geb;zz=new nb} -function $z(){$z=geb;Zz=new bA} -function $A(){$A=geb;ZA=new aB} -function Ovb(a){Kvb();this.a=a} -function FKc(a){jKc();this.a=a} -function zud(a){nud();this.f=a} -function Bud(a){nud();this.f=a} -function Cde(a){KMd();this.a=a} -function Lyb(a){a.b=null;a.c=0} -function kz(a,b){a.e=b;hz(a,b)} -function NYb(a,b){a.a=b;PYb(a)} -function cLb(a,b,c){a.a[b.g]=c} -function zsd(a,b,c){Hsd(c,a,b)} -function shc(a,b){Xmc(b.i,a.n)} -function HCc(a,b){ICc(a).Cd(b)} -function yw(a,b){a.a.ec().Mc(b)} -function ns(a,b){return a.g-b.g} -function AUb(a,b){return a*a/b} -function Heb(a){return uFb(a),a} -function Kfb(a){return uFb(a),a} -function Mfb(a){return uFb(a),a} -function JC(a){return new hC(a)} -function LC(a){return new OC(a)} -function shb(a){return uFb(a),a} -function Chb(a){return uFb(a),a} -function teb(a){yz.call(this,a)} -function veb(a){yz.call(this,a)} -function zeb(a){yz.call(this,a)} -function Aeb(a){nz.call(this,a)} -function Ifb(a){yz.call(this,a)} -function agb(a){yz.call(this,a)} -function dgb(a){yz.call(this,a)} -function Mgb(a){yz.call(this,a)} -function Ogb(a){yz.call(this,a)} -function kib(a){yz.call(this,a)} -function Jed(a){yz.call(this,a)} -function Ked(a){yz.call(this,a)} -function CDd(a){yz.call(this,a)} -function Mle(a){yz.call(this,a)} -function Lqe(a){yz.call(this,a)} -function mob(a){uFb(a);this.a=a} -function yYb(a){sYb(a);return a} -function Nnb(a){Snb(a,a.length)} -function nmb(a){return a.b==a.c} -function Vyb(a){return !!a&&a.b} -function gLb(a){return !!a&&a.k} -function hLb(a){return !!a&&a.j} -function F_b(a,b,c){a.c.Ef(b,c)} -function Ts(a,b){a.be(b);b.ae(a)} -function Fy(a){_l();this.a=Qb(a)} -function Gb(){this.a=WD(Qb(pve))} -function jc(){throw Adb(new jib)} -function jn(){throw Adb(new jib)} -function Hh(){throw Adb(new jib)} -function Xi(){throw Adb(new jib)} -function Xj(){throw Adb(new jib)} -function Yj(){throw Adb(new jib)} -function Qz(){Qz=geb;!!(fA(),eA)} -function Qhb(){reb.call(this,'')} -function Rhb(){reb.call(this,'')} -function bib(){reb.call(this,'')} -function cib(){reb.call(this,'')} -function eib(a){veb.call(this,a)} -function xeb(a){veb.call(this,a)} -function Vgb(a){agb.call(this,a)} -function Lqb(a){xpb.call(this,a)} -function Sqb(a){Lqb.call(this,a)} -function irb(a){Upb.call(this,a)} -function pc(a){qc.call(this,a,0)} -function Ri(){Si.call(this,12,3)} -function WC(a,b){return xfb(a,b)} -function cFb(a,b){return dD(a,b)} -function Reb(a,b){return a.a-b.a} -function afb(a,b){return a.a-b.a} -function Wgb(a,b){return a.a-b.a} -function pC(b,a){return a in b.a} -function Vvb(a){return a.a?a.b:0} -function cwb(a){return a.a?a.b:0} -function Fxb(a,b,c){b.Cd(a.a[c])} -function Kxb(a,b,c){b.Pe(a.a[c])} -function uKb(a,b){a.b=new sjd(b)} -function QGb(a,b){a.b=b;return a} -function RGb(a,b){a.c=b;return a} -function SGb(a,b){a.f=b;return a} -function TGb(a,b){a.g=b;return a} -function yJb(a,b){a.a=b;return a} -function zJb(a,b){a.f=b;return a} -function AJb(a,b){a.k=b;return a} -function WNb(a,b){a.a=b;return a} -function XNb(a,b){a.e=b;return a} -function BYb(a,b){a.e=b;return a} -function CYb(a,b){a.f=b;return a} -function BRb(a,b){a.b=true;a.d=b} -function WNc(a,b){return a.b-b.b} -function KSc(a,b){return a.g-b.g} -function pmc(a,b){return a?0:b-1} -function qKc(a,b){return a?0:b-1} -function pKc(a,b){return a?b-1:0} -function uVc(a,b){return a.s-b.s} -function Xed(a,b){return b.rg(a)} -function Xfd(a,b){a.b=b;return a} -function Wfd(a,b){a.a=b;return a} -function Yfd(a,b){a.c=b;return a} -function Zfd(a,b){a.d=b;return a} -function $fd(a,b){a.e=b;return a} -function _fd(a,b){a.f=b;return a} -function mgd(a,b){a.a=b;return a} -function ngd(a,b){a.b=b;return a} -function ogd(a,b){a.c=b;return a} -function Khd(a,b){a.c=b;return a} -function Jhd(a,b){a.b=b;return a} -function Lhd(a,b){a.d=b;return a} -function Mhd(a,b){a.e=b;return a} -function Nhd(a,b){a.f=b;return a} -function Ohd(a,b){a.g=b;return a} -function Phd(a,b){a.a=b;return a} -function Qhd(a,b){a.i=b;return a} -function Rhd(a,b){a.j=b;return a} -function coc(a,b){Mnc();P3b(b,a)} -function bbd(a,b,c){_ad(a.a,b,c)} -function Fjd(a){Zub.call(this,a)} -function TRb(a){SRb.call(this,a)} -function pLc(a){CIc.call(this,a)} -function ILc(a){CIc.call(this,a)} -function gLd(a){ZHd.call(this,a)} -function DPd(a){xPd.call(this,a)} -function FPd(a){xPd.call(this,a)} -function x2b(){y2b.call(this,'')} -function pjd(){this.a=0;this.b=0} -function ATc(){this.b=0;this.a=0} -function lXd(a,b){a.b=0;bWd(a,b)} -function Kqd(a,b){a.k=b;return a} -function Lqd(a,b){a.j=b;return a} -function vfe(a,b){a.c=b;a.b=true} -function Etb(){Etb=geb;Dtb=Gtb()} -function bvd(){bvd=geb;avd=OAd()} -function dvd(){dvd=geb;cvd=aCd()} -function MId(){MId=geb;LId=ygd()} -function jTd(){jTd=geb;iTd=Qae()} -function Ole(){Ole=geb;Nle=vne()} -function Qle(){Qle=geb;Ple=Cne()} -function mfb(a){return a.e&&a.e()} -function FD(a){return a.l|a.m<<22} -function Oc(a,b){return a.c._b(b)} -function En(a,b){return Wv(a.b,b)} -function Vd(a){return !a?null:a.d} -function Vv(a){return !a?null:a.g} -function $v(a){return !a?null:a.i} -function nfb(a){lfb(a);return a.o} -function Khb(a,b){a.a+=b;return a} -function Lhb(a,b){a.a+=b;return a} -function Ohb(a,b){a.a+=b;return a} -function Uhb(a,b){a.a+=b;return a} -function _wb(a,b){while(a.Bd(b));} -function atb(a){this.a=new Usb(a)} -function $tb(){throw Adb(new jib)} -function qpb(){throw Adb(new jib)} -function rpb(){throw Adb(new jib)} -function spb(){throw Adb(new jib)} -function vpb(){throw Adb(new jib)} -function Opb(){throw Adb(new jib)} -function yAb(a){this.a=new ezb(a)} -function H2c(){this.a=new Wed(s0)} -function TVc(){this.b=new Wed(H$)} -function l6c(){this.a=new Wed(V0)} -function $ad(){this.b=new Wed(I1)} -function nbd(){this.b=new Wed(I1)} -function T2c(a){this.a=0;this.b=a} -function Bib(a){tib();vib(this,a)} -function QDb(a){LCb(a);return a.a} -function dvb(a){return a.b!=a.d.c} -function AMc(a,b){return a.d[b.p]} -function ued(a,b){return ned(a,b)} -function $Eb(a,b,c){a.splice(b,c)} -function ixb(a,b){while(a.Re(b));} -function NKb(a){a.c?MKb(a):OKb(a)} -function mQd(){throw Adb(new jib)} -function nQd(){throw Adb(new jib)} -function oQd(){throw Adb(new jib)} -function pQd(){throw Adb(new jib)} -function qQd(){throw Adb(new jib)} -function rQd(){throw Adb(new jib)} -function sQd(){throw Adb(new jib)} -function tQd(){throw Adb(new jib)} -function uQd(){throw Adb(new jib)} -function vQd(){throw Adb(new jib)} -function zue(){throw Adb(new Dvb)} -function Aue(){throw Adb(new Dvb)} -function oue(a){this.a=new Dte(a)} -function Dte(a){Cte(this,a,sse())} -function cve(a){return !a||bve(a)} -function Cqe(a){return xqe[a]!=-1} -function Yz(){Nz!=0&&(Nz=0);Pz=-1} -function beb(){_db==null&&(_db=[])} -function eg(a,b){zf.call(this,a,b)} -function gg(a,b){eg.call(this,a,b)} -function Nj(a,b){this.a=a;this.b=b} -function hk(a,b){this.a=a;this.b=b} -function nk(a,b){this.a=a;this.b=b} -function pk(a,b){this.a=a;this.b=b} -function xk(a,b){this.a=a;this.b=b} -function zk(a,b){this.a=a;this.b=b} -function Kk(a,b){this.a=a;this.b=b} -function ne(a,b){this.e=a;this.d=b} -function Hf(a,b){this.b=a;this.c=b} -function cp(a,b){this.b=a;this.a=b} -function Cp(a,b){this.b=a;this.a=b} -function qr(a,b){this.b=a;this.a=b} -function Rr(a,b){this.b=a;this.a=b} -function vr(a,b){this.a=a;this.b=b} -function su(a,b){this.a=a;this.b=b} -function Hu(a,b){this.a=a;this.f=b} -function gp(a,b){this.g=a;this.i=b} -function qs(a,b){this.f=a;this.g=b} -function Gv(a,b){this.b=a;this.c=b} -function Wc(a){Lb(a.dc());this.c=a} -function Ex(a,b){this.a=a;this.b=b} -function ey(a,b){this.a=a;this.b=b} -function pv(a){this.a=RD(Qb(a),15)} -function uv(a){this.a=RD(Qb(a),15)} -function nw(a){this.a=RD(Qb(a),85)} -function rf(a){this.b=RD(Qb(a),85)} -function Tr(a){this.b=RD(Qb(a),51)} -function uB(){this.q=new $wnd.Date} -function CC(a,b){this.a=a;this.b=b} -function Bt(a,b){return Ujb(a.b,b)} -function tpb(a,b){return a.b.Hc(b)} -function upb(a,b){return a.b.Ic(b)} -function wpb(a,b){return a.b.Qc(b)} -function Pqb(a,b){return a.b.Hc(b)} -function pqb(a,b){return a.c.uc(b)} -function rqb(a,b){return pb(a.c,b)} -function Zsb(a,b){return a.a._b(b)} -function Xp(a,b){return a>b&&b<hwe} -function bkb(a){return a.f.c+a.i.c} -function IC(a){return WB(),a?VB:UB} -function Usb(a){ckb.call(this,a,0)} -function dzb(){ezb.call(this,null)} -function Osb(a){this.c=a;Lsb(this)} -function Yub(){Lub(this);Xub(this)} -function gib(){gib=geb;fib=new oeb} -function Qob(){Qob=geb;Pob=new Rob} -function Tvb(){Tvb=geb;Svb=new Xvb} -function bwb(){bwb=geb;awb=new dwb} -function SAb(){SAb=geb;RAb=new VAb} -function rDb(){NCb.call(this,null)} -function xDb(){xDb=geb;wDb=new KEb} -function FDb(a,b){LCb(a);a.a.Nb(b)} -function sAb(a,b){return a.a.Xc(b)} -function tAb(a,b){return a.a.Yc(b)} -function uAb(a,b){return a.a.$c(b)} -function vAb(a,b){return a.a._c(b)} -function JBb(a,b){return a.Gc(b),a} -function KBb(a,b){return ye(a,b),a} -function m_d(a,b){pLd(xYd(a.a),b)} -function r_d(a,b){pLd(xYd(a.a),b)} -function EBb(a,b){a.Gc(b);return a} -function hGb(a,b){a.a.f=b;return a} -function nGb(a,b){a.a.d=b;return a} -function oGb(a,b){a.a.g=b;return a} -function pGb(a,b){a.a.j=b;return a} -function sIb(a,b){a.a.a=b;return a} -function tIb(a,b){a.a.d=b;return a} -function uIb(a,b){a.a.e=b;return a} -function vIb(a,b){a.a.g=b;return a} -function fJb(a,b){a.a.f=b;return a} -function KJb(a){a.b=false;return a} -function wGb(){wGb=geb;vGb=new xGb} -function VRb(){VRb=geb;URb=new WRb} -function zXb(){zXb=geb;yXb=new FXb} -function kYb(){kYb=geb;jYb=new lYb} -function pYb(){pYb=geb;oYb=new QYb} -function NZb(){NZb=geb;MZb=new SZb} -function g0b(){g0b=geb;f0b=new l0b} -function i1b(){i1b=geb;h1b=new X1b} -function s7b(){s7b=geb;r7b=new C7b} -function H5b(){H5b=geb;G5b=new pjd} -function Hcc(){Hcc=geb;Gcc=new Ncc} -function Wjc(){Wjc=geb;Vjc=new Jlc} -function mqc(){mqc=geb;lqc=new Aqc} -function GCc(){GCc=geb;FCc=new Yrd} -function sbd(){sbd=geb;rbd=new ubd} -function Cbd(){Cbd=geb;Bbd=new Dbd} -function _cd(){_cd=geb;$cd=new cdd} -function GGc(){yGc();this.c=new Ri} -function ubd(){qs.call(this,DBe,0)} -function Mfd(a,b,c){$jb(a.d,b.f,c)} -function bNb(a,b,c,d){aNb(a,d,b,c)} -function V6b(a,b,c,d){$6b(d,a,b,c)} -function vcc(a,b,c,d){wcc(d,a,b,c)} -function Dgd(a,b){dub(a.c.c,b.b,b)} -function Cgd(a,b){dub(a.c.b,b.c,b)} -function BYc(a){return a.e.b+a.f.b} -function AYc(a){return a.e.a+a.f.a} -function N1d(a){return a.b?a.b:a.a} -function yTc(a){return (a.c+a.a)/2} -function b2d(a,b){return GA(a.a,b)} -function rfd(a,b){a.a=b.g;return a} -function hTd(){hTd=geb;gTd=new Cae} -function cTd(){cTd=geb;bTd=new eTd} -function lud(){lud=geb;kud=new Yud} -function $Sd(){$Sd=geb;ZSd=new _Sd} -function TSd(){TSd=geb;SSd=new VSd} -function YSd(){YSd=geb;XSd=new O5d} -function PRd(){PRd=geb;ORd=new Tsb} -function N2d(){N2d=geb;M2d=new Uhe} -function j3d(){j3d=geb;i3d=new Yhe} -function Gie(){Gie=geb;Fie=new Hie} -function nke(){nke=geb;mke=new rke} -function uue(){uue=geb;tue=new Cue} -function Tae(){Tae=geb;Rae=new bnb} -function _v(a){return RD(a,44).ld()} -function Akb(a){return a.b<a.d.gc()} -function meb(b,a){return a.split(b)} -function Idb(a,b){return Ddb(a,b)>0} -function Ldb(a,b){return Ddb(a,b)<0} -function Urb(a,b){return Bsb(a.a,b)} -function Beb(a,b){oz.call(this,a,b)} -function Qx(a){Px();ho.call(this,a)} -function Lnb(a,b){Pnb(a,a.length,b)} -function Mnb(a,b){Rnb(a,a.length,b)} -function Ktb(a,b){return a.a.get(b)} -function bub(a,b){return Ujb(a.e,b)} -function Zxb(a){return uFb(a),false} -function zw(a){this.a=RD(Qb(a),229)} -function $wb(a){Swb.call(this,a,21)} -function dAb(a,b){qs.call(this,a,b)} -function yBb(a,b){qs.call(this,a,b)} -function ssb(a,b){this.b=a;this.a=b} -function xlb(a,b){this.d=a;this.e=b} -function jEb(a,b){this.a=a;this.b=b} -function pEb(a,b){this.a=a;this.b=b} -function vEb(a,b){this.a=a;this.b=b} -function BEb(a,b){this.a=a;this.b=b} -function TFb(a,b){this.a=a;this.b=b} -function QEb(a,b){this.b=a;this.a=b} -function sHb(a,b){this.b=a;this.a=b} -function EHb(a,b){qs.call(this,a,b)} -function MHb(a,b){qs.call(this,a,b)} -function jIb(a,b){qs.call(this,a,b)} -function $Jb(a,b){qs.call(this,a,b)} -function FKb(a,b){qs.call(this,a,b)} -function wLb(a,b){qs.call(this,a,b)} -function nOb(a,b){qs.call(this,a,b)} -function kPb(a,b){this.b=a;this.a=b} -function JPb(a,b){qs.call(this,a,b)} -function fRb(a,b){this.b=a;this.a=b} -function JRb(a,b){qs.call(this,a,b)} -function OTb(a,b){this.b=a;this.a=b} -function UUb(a,b){qs.call(this,a,b)} -function BWb(a,b){qs.call(this,a,b)} -function tXb(a,b){qs.call(this,a,b)} -function XEb(a,b,c){a.splice(b,0,c)} -function pr(a,b,c){a.Mb(c)&&b.Cd(c)} -function lEb(a,b,c){b.Pe(a.a.Ye(c))} -function rEb(a,b,c){b.Dd(a.a.Ze(c))} -function xEb(a,b,c){b.Cd(a.a.Kb(c))} -function eYb(a,b){return Csb(a.c,b)} -function cGb(a,b){return Csb(a.e,b)} -function qZb(a,b){qs.call(this,a,b)} -function V$b(a,b){qs.call(this,a,b)} -function s3b(a,b){qs.call(this,a,b)} -function Q8b(a,b){qs.call(this,a,b)} -function icc(a,b){qs.call(this,a,b)} -function xec(a,b){qs.call(this,a,b)} -function gic(a,b){this.a=a;this.b=b} -function Xic(a,b){this.a=a;this.b=b} -function h4b(a,b){this.a=a;this.b=b} -function vjc(a,b){this.a=a;this.b=b} -function xjc(a,b){this.a=a;this.b=b} -function Hjc(a,b){this.a=a;this.b=b} -function hjc(a,b){this.b=a;this.a=b} -function Jjc(a,b){this.b=a;this.a=b} -function _Yb(a,b){this.b=a;this.a=b} -function eZb(a,b){this.c=a;this.d=b} -function Q1b(a,b){this.e=a;this.d=b} -function Tjc(a,b){this.a=a;this.b=b} -function ulc(a,b){this.a=a;this.b=b} -function Elc(a,b){this.a=a;this.b=b} -function fqc(a,b){this.b=a;this.a=b} -function smc(a,b){this.b=b;this.c=a} -function fnc(a,b){qs.call(this,a,b)} -function Cnc(a,b){qs.call(this,a,b)} -function koc(a,b){qs.call(this,a,b)} -function ktc(a,b){qs.call(this,a,b)} -function ctc(a,b){qs.call(this,a,b)} -function utc(a,b){qs.call(this,a,b)} -function Ftc(a,b){qs.call(this,a,b)} -function Rtc(a,b){qs.call(this,a,b)} -function _tc(a,b){qs.call(this,a,b)} -function iuc(a,b){qs.call(this,a,b)} -function vuc(a,b){qs.call(this,a,b)} -function Duc(a,b){qs.call(this,a,b)} -function Puc(a,b){qs.call(this,a,b)} -function _uc(a,b){qs.call(this,a,b)} -function pvc(a,b){qs.call(this,a,b)} -function yvc(a,b){qs.call(this,a,b)} -function Hvc(a,b){qs.call(this,a,b)} -function Pvc(a,b){qs.call(this,a,b)} -function dxc(a,b){qs.call(this,a,b)} -function bDc(a,b){qs.call(this,a,b)} -function nDc(a,b){qs.call(this,a,b)} -function yDc(a,b){qs.call(this,a,b)} -function LDc(a,b){qs.call(this,a,b)} -function bEc(a,b){qs.call(this,a,b)} -function lEc(a,b){qs.call(this,a,b)} -function tEc(a,b){qs.call(this,a,b)} -function CEc(a,b){qs.call(this,a,b)} -function LEc(a,b){qs.call(this,a,b)} -function UEc(a,b){qs.call(this,a,b)} -function mFc(a,b){qs.call(this,a,b)} -function vFc(a,b){qs.call(this,a,b)} -function EFc(a,b){qs.call(this,a,b)} -function SKc(a,b){qs.call(this,a,b)} -function cNc(a,b){this.b=a;this.a=b} -function tNc(a,b){qs.call(this,a,b)} -function QOc(a,b){this.a=a;this.b=b} -function ePc(a,b){this.a=a;this.b=b} -function LPc(a,b){this.a=a;this.b=b} -function xQc(a,b){qs.call(this,a,b)} -function FQc(a,b){qs.call(this,a,b)} -function MQc(a,b){this.a=a;this.b=b} -function FMc(a,b){dMc();return b!=a} -function Uvb(a){sFb(a.a);return a.b} -function qYb(a){rYb(a,a.c);return a} -function Itb(){Etb();return new Dtb} -function _ec(){Rec();this.a=new e6b} -function lSc(){dSc();this.a=new _sb} -function aRc(){WQc();this.b=new _sb} -function xRc(a,b){this.b=a;this.d=b} -function nVc(a,b){this.a=a;this.b=b} -function pVc(a,b){this.a=a;this.b=b} -function GWc(a,b){this.a=a;this.b=b} -function IXc(a,b){this.b=a;this.a=b} -function gTc(a,b){qs.call(this,a,b)} -function eVc(a,b){qs.call(this,a,b)} -function $Vc(a,b){qs.call(this,a,b)} -function XYc(a,b){qs.call(this,a,b)} -function MZc(a,b){qs.call(this,a,b)} -function t_c(a,b){qs.call(this,a,b)} -function B_c(a,b){qs.call(this,a,b)} -function z2c(a,b){qs.call(this,a,b)} -function h3c(a,b){qs.call(this,a,b)} -function $3c(a,b){qs.call(this,a,b)} -function i4c(a,b){qs.call(this,a,b)} -function l5c(a,b){qs.call(this,a,b)} -function v5c(a,b){qs.call(this,a,b)} -function g6c(a,b){qs.call(this,a,b)} -function A6c(a,b){qs.call(this,a,b)} -function a7c(a,b){qs.call(this,a,b)} -function B8c(a,b){qs.call(this,a,b)} -function d9c(a,b){qs.call(this,a,b)} -function D9c(a,b){qs.call(this,a,b)} -function tad(a,b){qs.call(this,a,b)} -function hbd(a,b){qs.call(this,a,b)} -function Nbd(a,b){qs.call(this,a,b)} -function Ybd(a,b){qs.call(this,a,b)} -function ndd(a,b){qs.call(this,a,b)} -function z1c(a,b){this.b=a;this.a=b} -function B1c(a,b){this.b=a;this.a=b} -function d2c(a,b){this.b=a;this.a=b} -function f2c(a,b){this.b=a;this.a=b} -function m9c(a,b){this.a=a;this.b=b} -function xed(a,b){this.a=a;this.b=b} -function ffd(a,b){this.a=a;this.b=b} -function rjd(a,b){this.a=a;this.b=b} -function Sjd(a,b){qs.call(this,a,b)} -function Zhd(a,b){qs.call(this,a,b)} -function lid(a,b){qs.call(this,a,b)} -function vkd(a,b){qs.call(this,a,b)} -function Gmd(a,b){qs.call(this,a,b)} -function Pmd(a,b){qs.call(this,a,b)} -function Zmd(a,b){qs.call(this,a,b)} -function jnd(a,b){qs.call(this,a,b)} -function Gnd(a,b){qs.call(this,a,b)} -function Rnd(a,b){qs.call(this,a,b)} -function eod(a,b){qs.call(this,a,b)} -function qod(a,b){qs.call(this,a,b)} -function Eod(a,b){qs.call(this,a,b)} -function Qod(a,b){qs.call(this,a,b)} -function upd(a,b){qs.call(this,a,b)} -function Rpd(a,b){qs.call(this,a,b)} -function eqd(a,b){qs.call(this,a,b)} -function nqd(a,b){qs.call(this,a,b)} -function vqd(a,b){qs.call(this,a,b)} -function Hrd(a,b){qs.call(this,a,b)} -function esd(a,b){this.a=a;this.b=b} -function gsd(a,b){this.a=a;this.b=b} -function isd(a,b){this.a=a;this.b=b} -function Osd(a,b){this.a=a;this.b=b} -function Qsd(a,b){this.a=a;this.b=b} -function Ssd(a,b){this.a=a;this.b=b} -function Ptd(a,b){this.a=a;this.b=b} -function JEd(a,b){this.a=a;this.b=b} -function KEd(a,b){this.a=a;this.b=b} -function MEd(a,b){this.a=a;this.b=b} -function NEd(a,b){this.a=a;this.b=b} -function QEd(a,b){this.a=a;this.b=b} -function REd(a,b){this.a=a;this.b=b} -function SEd(a,b){this.b=a;this.a=b} -function TEd(a,b){this.b=a;this.a=b} -function bFd(a,b){this.b=a;this.a=b} -function dFd(a,b){this.b=a;this.a=b} -function fFd(a,b){this.a=a;this.b=b} -function hFd(a,b){this.a=a;this.b=b} -function utd(a,b){qs.call(this,a,b)} -function sFd(a,b){this.a=a;this.b=b} -function uFd(a,b){this.a=a;this.b=b} -function bGd(a,b){qs.call(this,a,b)} -function uId(a,b){this.f=a;this.c=b} -function Ofd(a,b){return Csb(a.g,b)} -function Tqc(a,b){return Csb(b.b,a)} -function HPd(a,b){return QNd(a.a,b)} -function Idd(a,b){return -a.b.af(b)} -function IId(a,b){!!a&&Zjb(CId,a,b)} -function yWd(a,b){a.i=null;zWd(a,b)} -function kEd(a,b,c){pDd(b,KDd(a,c))} -function lEd(a,b,c){pDd(b,KDd(a,c))} -function mFd(a,b){vEd(a.a,RD(b,58))} -function _Mc(a,b){GMc(a.a,RD(b,12))} -function KTd(a,b){this.a=a;this.b=b} -function NTd(a,b){this.a=a;this.b=b} -function B5d(a,b){this.a=a;this.b=b} -function Z6d(a,b){this.a=a;this.b=b} -function Ble(a,b){this.a=a;this.b=b} -function afe(a,b){this.d=a;this.b=b} -function wfe(a,b){this.e=a;this.a=b} -function Eke(a,b){this.b=a;this.c=b} -function zNd(a,b){this.i=a;this.g=b} -function kZd(a,b){this.d=a;this.e=b} -function ave(a,b){eve(new dMd(a),b)} -function Dke(a){return pge(a.c,a.b)} -function Wd(a){return !a?null:a.md()} -function dE(a){return a==null?null:a} -function bE(a){return typeof a===jve} -function $D(a){return typeof a===hve} -function _D(a){return typeof a===ive} -function Gdb(a,b){return Ddb(a,b)==0} -function Jdb(a,b){return Ddb(a,b)>=0} -function Pdb(a,b){return Ddb(a,b)!=0} -function ar(a,b){return zr(a.Kc(),b)} -function Qm(a,b){return a.Rd().Xb(b)} -function kg(a){ig(a);return a.d.gc()} -function fE(a){CFb(a==null);return a} -function Mhb(a,b){a.a+=''+b;return a} -function Nhb(a,b){a.a+=''+b;return a} -function Whb(a,b){a.a+=''+b;return a} -function Yhb(a,b){a.a+=''+b;return a} -function Zhb(a,b){a.a+=''+b;return a} -function Vhb(a,b){return a.a+=''+b,a} -function Pfb(a){return ''+(uFb(a),a)} -function Vsb(a){akb(this);Ld(this,a)} -function YFc(){RFc();UFc.call(this)} -function pxb(a,b){kxb.call(this,a,b)} -function txb(a,b){kxb.call(this,a,b)} -function xxb(a,b){kxb.call(this,a,b)} -function Oub(a,b){Pub(a,b,a.c.b,a.c)} -function Nub(a,b){Pub(a,b,a.a,a.a.a)} -function Iob(a){tFb(a,0);return null} -function Xvb(){this.b=0;this.a=false} -function dwb(){this.b=0;this.a=false} -function Et(){this.b=new Usb(Sv(12))} -function pMb(){pMb=geb;oMb=ss(nMb())} -function ncc(){ncc=geb;mcc=ss(lcc())} -function aZc(){aZc=geb;_Yc=ss($Yc())} -function WA(){WA=geb;vA();VA=new Tsb} -function hjd(a){a.a=0;a.b=0;return a} -function qfd(a,b){a.a=b.g+1;return a} -function yNd(a,b){aMd.call(this,a,b)} -function lGd(a,b){kGd.call(this,a,b)} -function N$d(a,b){zNd.call(this,a,b)} -function Whe(a,b){Q2d.call(this,a,b)} -function She(a,b){Phe.call(this,a,b)} -function RRd(a,b){PRd();Zjb(ORd,a,b)} -function sB(a,b){a.q.setTime(Xdb(b))} -function Xz(a){$wnd.clearTimeout(a)} -function cr(a){return Qb(a),new Dl(a)} -function mb(a,b){return dE(a)===dE(b)} -function Mw(a,b){return a.a.a.a.cc(b)} -function qeb(a,b){return zhb(a.a,0,b)} -function SSb(a){return MSb(RD(a,74))} -function Nfb(a){return eE((uFb(a),a))} -function Ofb(a){return eE((uFb(a),a))} -function gD(a){return hD(a.l,a.m,a.h)} -function egb(a,b){return hgb(a.a,b.a)} -function ygb(a,b){return Agb(a.a,b.a)} -function Sfb(a,b){return Qfb(a.a,b.a)} -function qhb(a,b){return a.indexOf(b)} -function nOc(a,b){return a.j[b.p]==2} -function cz(a,b){return a==b?0:a?1:-1} -function AB(a){return a<10?'0'+a:''+a} -function Kdb(a){return typeof a===ive} -function oZb(a){return a==jZb||a==mZb} -function pZb(a){return a==jZb||a==kZb} -function ELb(a,b){return hgb(a.g,b.g)} -function Q4b(a){return Wmb(a.b.b,a,0)} -function Q2b(){J2b.call(this,0,0,0,0)} -function Iub(){ctb.call(this,new gub)} -function Znb(a,b){Wnb(a,0,a.length,b)} -function Eyb(a,b){Rmb(a.a,b);return b} -function Fkc(a,b){lkc();return b.a+=a} -function Hkc(a,b){lkc();return b.a+=a} -function Gkc(a,b){lkc();return b.c+=a} -function ied(a,b){Rmb(a.c,b);return a} -function Ped(a,b){ofd(a.a,b);return a} -function ttb(a){this.a=Itb();this.b=a} -function Ntb(a){this.a=Itb();this.b=a} -function sjd(a){this.a=a.a;this.b=a.b} -function Dl(a){this.a=a;zl.call(this)} -function Gl(a){this.a=a;zl.call(this)} -function Tid(){Uid.call(this,0,0,0,0)} -function vfd(a){return ofd(new ufd,a)} -function Ksd(a){return iyd(RD(a,123))} -function Mvd(a){return a.vh()&&a.wh()} -function Dod(a){return a!=zod&&a!=Aod} -function Dmd(a){return a==ymd||a==zmd} -function Emd(a){return a==Bmd||a==xmd} -function xDc(a){return a==tDc||a==sDc} -function yrc(a,b){return hgb(a.g,b.g)} -function Yfe(a,b){return new Phe(b,a)} -function Zfe(a,b){return new Phe(b,a)} -function lr(a){return Dr(a.b.Kc(),a.a)} -function IXd(a,b){yXd(a,b);zXd(a,a.D)} -function Uxd(a,b,c){Vxd(a,b);Wxd(a,c)} -function zyd(a,b,c){Cyd(a,b);Ayd(a,c)} -function Byd(a,b,c){Dyd(a,b);Eyd(a,c)} -function Gzd(a,b,c){Hzd(a,b);Izd(a,c)} -function Nzd(a,b,c){Ozd(a,b);Pzd(a,c)} -function eh(a,b,c){bh.call(this,a,b,c)} -function zId(a){uId.call(this,a,true)} -function nAb(){dAb.call(this,'Tail',3)} -function iAb(){dAb.call(this,'Head',1)} -function ejb(a){Pib();fjb.call(this,a)} -function A3b(a){J2b.call(this,a,a,a,a)} -function Pmb(a){a.c=$C(jJ,rve,1,0,5,1)} -function yRb(a){a.b&&CRb(a);return a.a} -function zRb(a){a.b&&CRb(a);return a.c} -function mBb(a,b){if(dBb){return}a.b=b} -function YCb(a,b){return a[a.length]=b} -function _Cb(a,b){return a[a.length]=b} -function l5b(a,b){return NGd(b,MCd(a))} -function m5b(a,b){return NGd(b,MCd(a))} -function DDd(a,b){return lp(Co(a.d),b)} -function EDd(a,b){return lp(Co(a.g),b)} -function FDd(a,b){return lp(Co(a.j),b)} -function mGd(a,b){kGd.call(this,a.b,b)} -function s0d(a,b){WGd(tYd(a.a),v0d(b))} -function B4d(a,b){WGd(o4d(a.a),E4d(b))} -function Asd(a,b,c){Byd(c,c.i+a,c.j+b)} -function eFc(a,b,c){bD(a.c[b.g],b.g,c)} -function zVd(a,b,c){RD(a.c,71).Gi(b,c)} -function LMd(a,b,c){bD(a,b,c);return c} -function DJb(a){Umb(a.Sf(),new HJb(a))} -function Gvb(a){return a!=null?tb(a):0} -function aOd(a){return a==null?0:tb(a)} -function iue(a){Vse();Wse.call(this,a)} -function Ug(a){this.a=a;Og.call(this,a)} -function Zy(){Zy=geb;$wnd.Math.log(2)} -function s7d(){s7d=geb;r7d=($Sd(),ZSd)} -function FRc(){FRc=geb;ERc=new Zrb(u3)} -function Hde(){Hde=geb;new Ide;new bnb} -function Ide(){new Tsb;new Tsb;new Tsb} -function yue(){throw Adb(new kib(bMe))} -function Nue(){throw Adb(new kib(bMe))} -function Bue(){throw Adb(new kib(cMe))} -function Que(){throw Adb(new kib(cMe))} -function Gp(a){this.a=a;rf.call(this,a)} -function Np(a){this.a=a;rf.call(this,a)} -function Sq(a,b){tm();this.a=a;this.b=b} -function Jh(a,b){Qb(b);Ih(a).Jc(new jx)} -function _mb(a,b){Ynb(a.c,a.c.length,b)} -function xnb(a){return a.a<a.c.c.length} -function Msb(a){return a.a<a.c.a.length} -function Wvb(a,b){return a.a?a.b:b.We()} -function hgb(a,b){return a<b?-1:a>b?1:0} -function Kgb(a,b){return Ddb(a,b)>0?a:b} -function hD(a,b,c){return {l:a,m:b,h:c}} -function Mvb(a,b){a.a!=null&&_Mc(b,a.a)} -function Lhc(a){Y0b(a,null);Z0b(a,null)} -function xkc(a,b,c){return Zjb(a.g,c,b)} -function bFc(a,b,c){return _Ec(b,c,a.c)} -function jOc(a,b,c){return Zjb(a.k,c,b)} -function pOc(a,b,c){qOc(a,b,c);return c} -function FOc(a,b){dOc();return b.n.b+=a} -function lUb(a){VTb.call(this);this.b=a} -function y2b(a){v2b.call(this);this.a=a} -function kAb(){dAb.call(this,'Range',2)} -function $Fb(a){this.b=a;this.a=new bnb} -function WQb(a){this.b=new gRb;this.a=a} -function Lub(a){a.a=new svb;a.c=new svb} -function nrc(a){a.a=new Tsb;a.d=new Tsb} -function $Sc(a){_Sc(a,null);aTc(a,null)} -function a2d(a,b){return xA(a.a,b,null)} -function Cdd(a,b){return Zjb(a.a,b.a,b)} -function ajd(a){return new rjd(a.a,a.b)} -function Pid(a){return new rjd(a.c,a.d)} -function Qid(a){return new rjd(a.c,a.d)} -function Ake(a,b){return Tfe(a.c,a.b,b)} -function ZD(a,b){return a!=null&&QD(a,b)} -function br(a,b){return Jr(a.Kc(),b)!=-1} -function Hr(a){return a.Ob()?a.Pb():null} -function _p(a){this.b=(yob(),new uqb(a))} -function zke(a){this.a=a;Tsb.call(this)} -function Uhe(){Q2d.call(this,null,null)} -function Yhe(){p3d.call(this,null,null)} -function As(){qs.call(this,'INSTANCE',0)} -function dXb(){_Wb();this.a=new Wed(UP)} -function Hhb(a){return Ihb(a,0,a.length)} -function Rv(a,b){return new ew(a.Kc(),b)} -function $sb(a,b){return a.a.Bc(b)!=null} -function hZd(a,b){sLd(a);a.Gc(RD(b,15))} -function ONd(a,b,c){a.c.bd(b,RD(c,136))} -function eOd(a,b,c){a.c.Ui(b,RD(c,136))} -function eub(a,b){if(a.c){rub(b);qub(b)}} -function oB(a,b){a.q.setHours(b);mB(a,b)} -function vTb(a,b){Zid(b,a.a.a.a,a.a.a.b)} -function tKb(a,b,c,d){bD(a.a[b.g],c.g,d)} -function oKb(a,b,c){return a.a[b.g][c.g]} -function AIc(a,b){return a.e[b.c.p][b.p]} -function TIc(a,b){return a.c[b.c.p][b.p]} -function pJc(a,b){return a.a[b.c.p][b.p]} -function mOc(a,b){return a.j[b.p]=AOc(b)} -function wAb(a,b){return a.a.Bc(b)!=null} -function wXc(a,b){return Kfb(UD(b.a))<=a} -function xXc(a,b){return Kfb(UD(b.a))>=a} -function vhd(a,b){return jhb(a.f,b.Pg())} -function cjd(a,b){return a.a*b.a+a.b*b.b} -function Wsd(a,b){return a.a<Qeb(b)?-1:1} -function gGd(a,b){return jhb(a.b,b.Pg())} -function xIc(a,b,c){return c?b!=0:b!=a-1} -function Mwb(a,b,c){a.a=b^1502;a.b=c^Mxe} -function ljd(a,b,c){a.a=b;a.b=c;return a} -function ijd(a,b){a.a*=b;a.b*=b;return a} -function Rmb(a,b){ZEb(a.c,b);return true} -function MHd(a,b,c){bD(a.g,b,c);return c} -function XZd(a,b,c){PZd.call(this,a,b,c)} -function _Zd(a,b,c){XZd.call(this,a,b,c)} -function aie(a,b,c){Kfe.call(this,a,b,c)} -function eie(a,b,c){Kfe.call(this,a,b,c)} -function gie(a,b,c){aie.call(this,a,b,c)} -function iie(a,b,c){XZd.call(this,a,b,c)} -function lie(a,b,c){_Zd.call(this,a,b,c)} -function vie(a,b,c){PZd.call(this,a,b,c)} -function zie(a,b,c){PZd.call(this,a,b,c)} -function Cie(a,b,c){vie.call(this,a,b,c)} -function ez(a){a.j=$C(mJ,Nve,319,0,0,1)} -function wmb(){this.a=$C(jJ,rve,1,8,5,1)} -function dWd(){this.Bb|=256;this.Bb|=512} -function dMd(a){this.i=a;this.f=this.i.j} -function Rue(a){this.c=a;this.a=this.c.a} -function zf(a,b){this.a=a;rf.call(this,b)} -function Eb(a,b){return Db(a,new bib,b).a} -function Lb(a){if(!a){throw Adb(new _fb)}} -function Ub(a){if(!a){throw Adb(new cgb)}} -function Txb(){Txb=geb;Txb();Sxb=new $xb} -function fke(){fke=geb;Gie();eke=new gke} -function Kvb(){Kvb=geb;Jvb=new Ovb(null)} -function OGd(a){Ivb(a,IIe);pzd(a,GGd(a))} -function mNd(a){a.a=RD(Ywd(a.b.a,4),129)} -function uNd(a){a.a=RD(Ywd(a.b.a,4),129)} -function Mg(a){a.b.Qb();--a.d.f.d;jg(a.d)} -function Zj(a){this.a=a;Aj.call(this,a.d)} -function ij(a,b){this.a=a;pc.call(this,b)} -function sj(a,b){this.a=a;pc.call(this,b)} -function Rj(a,b){this.a=a;pc.call(this,b)} -function Il(a,b){this.a=b;pc.call(this,a)} -function ap(a,b){this.a=b;Xo.call(this,a)} -function Ap(a,b){this.a=a;Xo.call(this,b)} -function Yr(a,b){this.a=b;Tr.call(this,a)} -function ew(a,b){this.a=b;Tr.call(this,a)} -function Mr(a,b){Qb(b);return new Yr(a,b)} -function ru(a,b){return new Ou(a.a,a.b,b)} -function rhb(a,b,c){return a.indexOf(b,c)} -function thb(a,b){return a.lastIndexOf(b)} -function Ghb(a){return a==null?vve:jeb(a)} -function Ez(a){return a==null?null:a.name} -function qD(a){return a.l+a.m*gxe+a.h*hxe} -function Gr(a){return dvb(a.a)?Fr(a):null} -function Shb(a){reb.call(this,(uFb(a),a))} -function dib(a){reb.call(this,(uFb(a),a))} -function dl(a){Qk.call(this,RD(Qb(a),34))} -function tl(a){Qk.call(this,RD(Qb(a),34))} -function Jub(a){ctb.call(this,new hub(a))} -function Upb(a){xpb.call(this,a);this.a=a} -function hqb(a){Ppb.call(this,a);this.a=a} -function jrb(a){Lqb.call(this,a);this.a=a} -function mz(){ez(this);gz(this);this.je()} -function Dzb(a){this.a=a;Plb.call(this,a)} -function Lvb(a){sFb(a.a!=null);return a.a} -function gGb(a,b){Rmb(b.a,a.a);return a.a} -function mGb(a,b){Rmb(b.b,a.a);return a.a} -function eJb(a,b){Rmb(b.a,a.a);return a.a} -function aib(a,b,c){peb(a,b,b,c);return a} -function EIb(a,b){++a.b;return Rmb(a.a,b)} -function FIb(a,b){++a.b;return Ymb(a.a,b)} -function NNb(a,b){return Qfb(a.c.d,b.c.d)} -function ZNb(a,b){return Qfb(a.c.c,b.c.c)} -function E9b(a,b){return Qfb(a.n.a,b.n.a)} -function B$b(a,b){return RD(Qc(a.b,b),15)} -function Jac(a,b){return a.n.b=(uFb(b),b)} -function Kac(a,b){return a.n.b=(uFb(b),b)} -function Csb(a,b){return !!b&&a.b[b.g]==b} -function k4b(a){return xnb(a.a)||xnb(a.b)} -function kFb(a){return a.$H||(a.$H=++iFb)} -function Nvb(a){return a.a!=null?a.a:null} -function uXc(a,b){return Qfb(a.e.b,b.e.b)} -function CXc(a,b){return Qfb(a.e.a,b.e.a)} -function ZEc(a,b,c){return $Ec(a,b,c,a.b)} -function aFc(a,b,c){return $Ec(a,b,c,a.c)} -function Ikc(a){lkc();return !!a&&!a.dc()} -function Yjc(){Wjc();this.b=new ckc(this)} -function tNb(){tNb=geb;sNb=new kGd(Xye,0)} -function Geb(){Geb=geb;Eeb=false;Feb=true} -function E8b(a){var b;b=a.a;a.a=a.b;a.b=b} -function Q2d(a,b){N2d();this.a=a;this.b=b} -function p3d(a,b){j3d();this.b=a;this.c=b} -function Fud(a,b){nud();this.f=b;this.d=a} -function qc(a,b){Sb(b,a);this.d=a;this.c=b} -function IXb(a,b){JXb.call(this,a,b,null)} -function Kg(a,b,c,d){yg.call(this,a,b,c,d)} -function mMd(a){this.d=a;dMd.call(this,a)} -function yMd(a){this.c=a;dMd.call(this,a)} -function BMd(a){this.c=a;mMd.call(this,a)} -function Zse(a){++Use;return new Kte(3,a)} -function ev(a){dk(a,iwe);return new cnb(a)} -function jA(a){fA();return parseInt(a)||-1} -function Fs(a){zs();return ws((Is(),Hs),a)} -function phb(a,b,c){return rhb(a,Fhb(b),c)} -function um(a,b){return new fq(a,a.gc(),b)} -function zj(a,b){return hn(a.c).Md().Xb(b)} -function hu(a,b,c){var d;d=a.fd(b);d.Rb(c)} -function tfd(a,b,c){RD(Med(a,b),21).Fc(c)} -function XOd(a,b,c){VNd(a.a,c);UNd(a.a,b)} -function aAd(a){ZD(a,158)&&RD(a,158).pi()} -function tub(a){uub.call(this,a,null,null)} -function Yvb(a){Tvb();this.b=a;this.a=true} -function ewb(a){bwb();this.b=a;this.a=true} -function Qub(a){sFb(a.b!=0);return a.a.a.c} -function Rub(a){sFb(a.b!=0);return a.c.b.c} -function Phb(a,b){peb(a,b,b+1,'');return a} -function nQb(a,b){return !!a.q&&Ujb(a.q,b)} -function vzb(a){return a.b=RD(Bkb(a.a),44)} -function os(a){return a.f!=null?a.f:''+a.g} -function ps(a){return a.f!=null?a.f:''+a.g} -function yUb(a,b){return a>0?b/(a*a):b*100} -function FUb(a,b){return a>0?b*b/a:b*b*100} -function $5b(a,b){return RD(cub(a.a,b),34)} -function doc(a,b){Mnc();return Rc(a,b.e,b)} -function NCc(a,b,c){GCc();return c.Mg(a,b)} -function L0c(a){B0c();return a.e.a+a.f.a/2} -function N0c(a,b,c){B0c();return c.e.a-a*b} -function V0c(a){B0c();return a.e.b+a.f.b/2} -function X0c(a,b,c){B0c();return c.e.b-a*b} -function _tb(a){a.d=new tub(a);a.e=new Tsb} -function x3c(){this.a=new Tp;this.b=new Tp} -function hmc(a){this.c=a;this.a=1;this.b=1} -function C$b(a){z$b();A$b(this);this.Ff(a)} -function Efd(a,b,c){Afd();a.pf(b)&&c.Cd(a)} -function Red(a,b,c){return Rmb(b,Ted(a,c))} -function Zid(a,b,c){a.a+=b;a.b+=c;return a} -function jjd(a,b,c){a.a*=b;a.b*=c;return a} -function mjd(a,b){a.a=b.a;a.b=b.b;return a} -function fjd(a){a.a=-a.a;a.b=-a.b;return a} -function njd(a,b,c){a.a-=b;a.b-=c;return a} -function Gjd(a){Yub.call(this);zjd(this,a)} -function Dbd(){qs.call(this,'GROW_TREE',0)} -function WRb(){qs.call(this,'POLYOMINO',0)} -function SVd(a,b,c){DVd.call(this,a,b,c,2)} -function r0d(a,b,c){VGd(tYd(a.a),b,v0d(c))} -function e3d(a,b){N2d();Q2d.call(this,a,b)} -function D3d(a,b){j3d();p3d.call(this,a,b)} -function F3d(a,b){j3d();D3d.call(this,a,b)} -function H3d(a,b){j3d();p3d.call(this,a,b)} -function PNd(a,b){return a.c.Fc(RD(b,136))} -function A4d(a,b,c){VGd(o4d(a.a),b,E4d(c))} -function Ard(a){this.c=a;Dyd(a,0);Eyd(a,0)} -function Z8d(a,b){s7d();N8d.call(this,a,b)} -function _8d(a,b){s7d();Z8d.call(this,a,b)} -function b9d(a,b){s7d();Z8d.call(this,a,b)} -function n9d(a,b){s7d();N8d.call(this,a,b)} -function d9d(a,b){s7d();b9d.call(this,a,b)} -function p9d(a,b){s7d();n9d.call(this,a,b)} -function v9d(a,b){s7d();N8d.call(this,a,b)} -function lge(a,b,c){return b.zl(a.e,a.c,c)} -function nge(a,b,c){return b.Al(a.e,a.c,c)} -function Wee(a,b,c){return tfe(Pee(a,b),c)} -function Age(a,b){return Vvd(a.e,RD(b,54))} -function _me(a){return a==null?null:Bqe(a)} -function dne(a){return a==null?null:Iqe(a)} -function gne(a){return a==null?null:jeb(a)} -function hne(a){return a==null?null:jeb(a)} -function TD(a){CFb(a==null||$D(a));return a} -function UD(a){CFb(a==null||_D(a));return a} -function WD(a){CFb(a==null||bE(a));return a} -function lfb(a){if(a.o!=null){return}Bfb(a)} -function lFb(a){if(!a){throw Adb(new _fb)}} -function pFb(a){if(!a){throw Adb(new yeb)}} -function sFb(a){if(!a){throw Adb(new Dvb)}} -function yFb(a){if(!a){throw Adb(new cgb)}} -function zmb(a){if(!a){throw Adb(new Jrb)}} -function jQd(){jQd=geb;iQd=new LQd;new lRd} -function u2c(){u2c=geb;t2c=new jGd('root')} -function d6d(){HWd.call(this);this.Bb|=txe} -function Pg(a,b){this.d=a;Lg(this);this.b=b} -function WCb(a,b){NCb.call(this,a);this.a=b} -function oDb(a,b){NCb.call(this,a);this.a=b} -function bh(a,b,c){lg.call(this,a,b,c,null)} -function fh(a,b,c){lg.call(this,a,b,c,null)} -function Mf(a,b){this.c=a;ne.call(this,a,b)} -function Uf(a,b){this.a=a;Mf.call(this,a,b)} -function wB(a){this.q=new $wnd.Date(Xdb(a))} -function OPb(a){if(a>8){return 0}return a+1} -function iBb(a,b){if(dBb){return}Rmb(a.a,b)} -function P5b(a,b){H5b();return n2b(b.d.i,a)} -function qdc(a,b){Zcc();return new xdc(b,a)} -function HAb(a,b,c){return a.Ne(b,c)<=0?c:b} -function IAb(a,b,c){return a.Ne(b,c)<=0?b:c} -function rgd(a,b){return RD(cub(a.b,b),143)} -function tgd(a,b){return RD(cub(a.c,b),233)} -function amc(a){return RD(Vmb(a.a,a.b),293)} -function Mid(a){return new rjd(a.c,a.d+a.a)} -function Jeb(a){return (uFb(a),a)?1231:1237} -function EPc(a){return dOc(),xDc(RD(a,203))} -function RMb(){RMb=geb;QMb=xsb((Qpd(),Ppd))} -function YQb(a,b){b.a?ZQb(a,b):wAb(a.a,b.b)} -function aJd(a,b,c){++a.j;a.tj();$Gd(a,b,c)} -function $Id(a,b,c){++a.j;a.qj(b,a.Zi(b,c))} -function B2d(a,b,c){var d;d=a.fd(b);d.Rb(c)} -function Bzd(a,b,c){c=xvd(a,b,6,c);return c} -function izd(a,b,c){c=xvd(a,b,3,c);return c} -function KCd(a,b,c){c=xvd(a,b,9,c);return c} -function SKb(a,b){Ivb(b,Pye);a.f=b;return a} -function bOd(a,b){return (b&lve)%a.d.length} -function Bke(a,b,c){return age(a.c,a.b,b,c)} -function ZLd(a,b){this.c=a;ZHd.call(this,b)} -function w0d(a,b){this.a=a;Q_d.call(this,b)} -function F4d(a,b){this.a=a;Q_d.call(this,b)} -function kGd(a,b){jGd.call(this,a);this.a=b} -function U6d(a,b){L6d.call(this,a);this.a=b} -function S9d(a,b){L6d.call(this,a);this.a=b} -function jQb(a){gQb.call(this,0,0);this.f=a} -function _hb(a,b,c){a.a+=Ihb(b,0,c);return a} -function _A(a){!a.a&&(a.a=new jB);return a.a} -function qlb(a,b){var c;c=a.e;a.e=b;return c} -function Clb(a,b){var c;c=b;return !!a.Fe(c)} -function Keb(a,b){Geb();return a==b?0:a?1:-1} -function Ikb(a,b){a.a.bd(a.b,b);++a.b;a.c=-1} -function hg(a){a.b?hg(a.b):a.f.c.zc(a.e,a.d)} -function aub(a){akb(a.e);a.d.b=a.d;a.d.a=a.d} -function VDb(a,b,c){xDb();HEb(a,b.Ve(a.a,c))} -function Xrb(a,b,c){return Wrb(a,RD(b,22),c)} -function WEb(a,b){return cFb(new Array(b),a)} -function Fgb(a){return Ydb(Udb(a,32))^Ydb(a)} -function XD(a){return String.fromCharCode(a)} -function Dz(a){return a==null?null:a.message} -function Rz(a,b,c){return a.apply(b,c);var d} -function Btb(a,b){var c;c=a[Jxe];c.call(a,b)} -function Ctb(a,b){var c;c=a[Jxe];c.call(a,b)} -function O5b(a,b){H5b();return !n2b(b.d.i,a)} -function R2b(a,b,c,d){J2b.call(this,a,b,c,d)} -function TJb(){RJb.call(this);this.a=new pjd} -function v2b(){this.n=new pjd;this.o=new pjd} -function kGb(){this.b=new pjd;this.c=new bnb} -function cUb(){this.a=new bnb;this.b=new bnb} -function kWb(){this.a=new DTb;this.b=new vWb} -function e6b(){this.b=new gub;this.a=new gub} -function jIc(){this.b=new _sb;this.a=new _sb} -function vYc(){this.b=new Tsb;this.a=new Tsb} -function fWc(){this.b=new TVc;this.a=new IVc} -function Yhc(){this.a=new yqc;this.b=new Sqc} -function lNc(){this.a=new bnb;this.d=new bnb} -function RJb(){this.n=new z3b;this.i=new Tid} -function hq(a){this.a=(dk(a,iwe),new cnb(a))} -function oq(a){this.a=(dk(a,iwe),new cnb(a))} -function tLd(a){return a<100?null:new gLd(a)} -function Lac(a,b){return a.n.a=(uFb(b),b)+10} -function Mac(a,b){return a.n.a=(uFb(b),b)+10} -function DYd(a,b){return b==a||PHd(sYd(b),a)} -function nae(a,b){return Zjb(a.a,b,'')==null} -function Hee(a,b){var c;c=b.qi(a.a);return c} -function $id(a,b){a.a+=b.a;a.b+=b.b;return a} -function ojd(a,b){a.a-=b.a;a.b-=b.b;return a} -function sfd(a){aFb(a.j.c,0);a.a=-1;return a} -function rCd(a,b,c){c=xvd(a,b,11,c);return c} -function SDd(a,b,c){c!=null&&Kzd(b,uEd(a,c))} -function TDd(a,b,c){c!=null&&Lzd(b,uEd(a,c))} -function G5d(a,b,c,d){C5d.call(this,a,b,c,d)} -function oie(a,b,c,d){C5d.call(this,a,b,c,d)} -function sie(a,b,c,d){oie.call(this,a,b,c,d)} -function Nie(a,b,c,d){Iie.call(this,a,b,c,d)} -function Pie(a,b,c,d){Iie.call(this,a,b,c,d)} -function Vie(a,b,c,d){Iie.call(this,a,b,c,d)} -function Tie(a,b,c,d){Pie.call(this,a,b,c,d)} -function $ie(a,b,c,d){Pie.call(this,a,b,c,d)} -function Yie(a,b,c,d){Vie.call(this,a,b,c,d)} -function bje(a,b,c,d){$ie.call(this,a,b,c,d)} -function Dje(a,b,c,d){wje.call(this,a,b,c,d)} -function aMd(a,b){veb.call(this,HJe+a+NIe+b)} -function Hje(a,b){return a.jk().wi().ri(a,b)} -function Ije(a,b){return a.jk().wi().ti(a,b)} -function Lfb(a,b){return uFb(a),dE(a)===dE(b)} -function lhb(a,b){return uFb(a),dE(a)===dE(b)} -function mEb(a,b){return a.b.Bd(new pEb(a,b))} -function sEb(a,b){return a.b.Bd(new vEb(a,b))} -function yEb(a,b){return a.b.Bd(new BEb(a,b))} -function Bk(a,b){return a.e=RD(a.d.Kb(b),159)} -function uhb(a,b,c){return a.lastIndexOf(b,c)} -function wWb(a,b,c){return Qfb(a[b.a],a[c.a])} -function TWb(a,b){return pQb(b,(yCc(),gAc),a)} -function Lpc(a,b){return hgb(b.a.d.p,a.a.d.p)} -function Kpc(a,b){return hgb(a.a.d.p,b.a.d.p)} -function zTc(a,b){return Qfb(a.c-a.s,b.c-b.s)} -function qWc(a,b){return Qfb(a.b.e.a,b.b.e.a)} -function sWc(a,b){return Qfb(a.c.e.a,b.c.e.a)} -function $2b(a){return !a.c?-1:Wmb(a.c.a,a,0)} -function Cod(a){return a==vod||a==xod||a==wod} -function CMd(a,b){this.c=a;nMd.call(this,a,b)} -function fq(a,b,c){this.a=a;qc.call(this,b,c)} -function YDb(a){this.c=a;xxb.call(this,Sve,0)} -function rk(a,b,c){this.c=b;this.b=c;this.a=a} -function DMc(a){dMc();this.d=a;this.a=new wmb} -function ho(a){_l();this.a=(yob(),new Lqb(a))} -function Xmc(a,b){Dmd(a.f)?Ymc(a,b):Zmc(a,b)} -function Lxb(a,b){Mxb.call(this,a,a.length,b)} -function nBb(a,b){if(dBb){return}!!b&&(a.d=b)} -function ZNd(a,b){return ZD(b,15)&&_Gd(a.c,b)} -function AVd(a,b,c){return RD(a.c,71).Wk(b,c)} -function BVd(a,b,c){return RD(a.c,71).Xk(b,c)} -function mge(a,b,c){return lge(a,RD(b,343),c)} -function oge(a,b,c){return nge(a,RD(b,343),c)} -function Ige(a,b,c){return Hge(a,RD(b,343),c)} -function Kge(a,b,c){return Jge(a,RD(b,343),c)} -function Fn(a,b){return b==null?null:Xv(a.b,b)} -function Qeb(a){return _D(a)?(uFb(a),a):a.ue()} -function Rfb(a){return !isNaN(a)&&!isFinite(a)} -function Zub(a){Lub(this);Xub(this);ye(this,a)} -function dnb(a){Pmb(this);YEb(this.c,0,a.Pc())} -function Fsb(a,b,c){this.a=a;this.b=b;this.c=c} -function Vtb(a,b,c){this.a=a;this.b=b;this.c=c} -function hvb(a,b,c){this.d=a;this.b=c;this.a=b} -function aBb(a){this.a=a;gib();Hdb(Date.now())} -function wzb(a){Ckb(a.a);Yyb(a.c,a.b);a.b=null} -function wvb(){wvb=geb;uvb=new xvb;vvb=new zvb} -function KMd(){KMd=geb;JMd=$C(jJ,rve,1,0,5,1)} -function TTd(){TTd=geb;STd=$C(jJ,rve,1,0,5,1)} -function yUd(){yUd=geb;xUd=$C(jJ,rve,1,0,5,1)} -function _l(){_l=geb;new im((yob(),yob(),vob))} -function gAb(a){cAb();return ws((qAb(),pAb),a)} -function zBb(a){xBb();return ws((CBb(),BBb),a)} -function FHb(a){DHb();return ws((IHb(),HHb),a)} -function NHb(a){LHb();return ws((QHb(),PHb),a)} -function kIb(a){iIb();return ws((nIb(),mIb),a)} -function _Jb(a){ZJb();return ws((cKb(),bKb),a)} -function GKb(a){EKb();return ws((JKb(),IKb),a)} -function xLb(a){vLb();return ws((ALb(),zLb),a)} -function mMb(a){hMb();return ws((pMb(),oMb),a)} -function oOb(a){mOb();return ws((rOb(),qOb),a)} -function KPb(a){IPb();return ws((NPb(),MPb),a)} -function KRb(a){IRb();return ws((NRb(),MRb),a)} -function XRb(a){VRb();return ws(($Rb(),ZRb),a)} -function VUb(a){TUb();return ws((YUb(),XUb),a)} -function CWb(a){AWb();return ws((FWb(),EWb),a)} -function uXb(a){sXb();return ws((xXb(),wXb),a)} -function tZb(a){nZb();return ws((wZb(),vZb),a)} -function W$b(a){U$b();return ws((Z$b(),Y$b),a)} -function Mb(a,b){if(!a){throw Adb(new agb(b))}} -function Vb(a){if(!a){throw Adb(new dgb(tve))}} -function rFb(a,b){if(a!=b){throw Adb(new Jrb)}} -function KQb(a,b,c){this.a=a;this.b=b;this.c=c} -function lRb(a,b,c){this.a=a;this.b=b;this.c=c} -function h7b(a,b,c){this.a=a;this.b=b;this.c=c} -function J0b(a,b,c){this.b=a;this.a=b;this.c=c} -function dNb(a,b,c){this.b=a;this.c=b;this.a=c} -function oac(a,b,c){this.a=a;this.b=b;this.c=c} -function F1b(a,b,c){this.e=b;this.b=a;this.d=c} -function Ecc(a,b,c){this.b=a;this.a=b;this.c=c} -function UDb(a,b,c){xDb();a.a.Yd(b,c);return b} -function CJb(a){var b;b=new BJb;b.e=a;return b} -function _Nb(a){var b;b=new YNb;b.b=a;return b} -function U9b(){U9b=geb;S9b=new bac;T9b=new eac} -function Rec(){Rec=geb;Qec=new efc;Pec=new jfc} -function lkc(){lkc=geb;jkc=new Mkc;kkc=new Okc} -function loc(a){joc();return ws((ooc(),noc),a)} -function kcc(a){hcc();return ws((ncc(),mcc),a)} -function yec(a){vec();return ws((Bec(),Aec),a)} -function gnc(a){enc();return ws((jnc(),inc),a)} -function Enc(a){Bnc();return ws((Hnc(),Gnc),a)} -function gpc(a){epc();return ws((jpc(),ipc),a)} -function dtc(a){btc();return ws((gtc(),ftc),a)} -function ltc(a){jtc();return ws((otc(),ntc),a)} -function xtc(a){stc();return ws((Atc(),ztc),a)} -function Gtc(a){Etc();return ws((Jtc(),Itc),a)} -function Utc(a){Ptc();return ws((Xtc(),Wtc),a)} -function auc(a){$tc();return ws((duc(),cuc),a)} -function avc(a){$uc();return ws((dvc(),cvc),a)} -function qvc(a){ovc();return ws((tvc(),svc),a)} -function zvc(a){xvc();return ws((Cvc(),Bvc),a)} -function Ivc(a){Gvc();return ws((Lvc(),Kvc),a)} -function Qvc(a){Ovc();return ws((Tvc(),Svc),a)} -function Quc(a){Ouc();return ws((Tuc(),Suc),a)} -function juc(a){huc();return ws((muc(),luc),a)} -function wuc(a){tuc();return ws((zuc(),yuc),a)} -function Euc(a){Cuc();return ws((Huc(),Guc),a)} -function exc(a){cxc();return ws((hxc(),gxc),a)} -function eDc(a){_Cc();return ws((hDc(),gDc),a)} -function oDc(a){lDc();return ws((rDc(),qDc),a)} -function ADc(a){wDc();return ws((DDc(),CDc),a)} -function ODc(a){JDc();return ws((RDc(),QDc),a)} -function cEc(a){aEc();return ws((fEc(),eEc),a)} -function mEc(a){kEc();return ws((pEc(),oEc),a)} -function uEc(a){sEc();return ws((xEc(),wEc),a)} -function DEc(a){BEc();return ws((GEc(),FEc),a)} -function MEc(a){KEc();return ws((PEc(),OEc),a)} -function VEc(a){TEc();return ws((YEc(),XEc),a)} -function nFc(a){lFc();return ws((qFc(),pFc),a)} -function wFc(a){uFc();return ws((zFc(),yFc),a)} -function FFc(a){DFc();return ws((IFc(),HFc),a)} -function TKc(a){RKc();return ws((WKc(),VKc),a)} -function uNc(a){sNc();return ws((xNc(),wNc),a)} -function yQc(a){wQc();return ws((BQc(),AQc),a)} -function GQc(a){EQc();return ws((JQc(),IQc),a)} -function hTc(a){fTc();return ws((kTc(),jTc),a)} -function fVc(a){dVc();return ws((iVc(),hVc),a)} -function bWc(a){YVc();return ws((eWc(),dWc),a)} -function ZYc(a){WYc();return ws((aZc(),_Yc),a)} -function NZc(a){LZc();return ws((QZc(),PZc),a)} -function u_c(a){s_c();return ws((x_c(),w_c),a)} -function C_c(a){A_c();return ws((F_c(),E_c),a)} -function C2c(a){x2c();return ws((F2c(),E2c),a)} -function j3c(a){g3c();return ws((m3c(),l3c),a)} -function j4c(a){g4c();return ws((m4c(),l4c),a)} -function _3c(a){Y3c();return ws((c4c(),b4c),a)} -function m5c(a){j5c();return ws((p5c(),o5c),a)} -function w5c(a){t5c();return ws((z5c(),y5c),a)} -function h6c(a){f6c();return ws((k6c(),j6c),a)} -function C6c(a){z6c();return ws((F6c(),E6c),a)} -function b7c(a){_6c();return ws((e7c(),d7c),a)} -function E8c(a){z8c();return ws((H8c(),G8c),a)} -function R8b(a){P8b();return ws((U8b(),T8b),a)} -function t3b(a){r3b();return ws((w3b(),v3b),a)} -function g9c(a){b9c();return ws((j9c(),i9c),a)} -function G9c(a){B9c();return ws((J9c(),I9c),a)} -function uad(a){sad();return ws((xad(),wad),a)} -function xbd(a){sbd();return ws((Abd(),zbd),a)} -function ibd(a){gbd();return ws((lbd(),kbd),a)} -function Gbd(a){Cbd();return ws((Jbd(),Ibd),a)} -function Obd(a){Mbd();return ws((Rbd(),Qbd),a)} -function Zbd(a){Xbd();return ws((acd(),_bd),a)} -function fdd(a){_cd();return ws((idd(),hdd),a)} -function qdd(a){ldd();return ws((tdd(),sdd),a)} -function $hd(a){Yhd();return ws((bid(),aid),a)} -function mid(a){kid();return ws((pid(),oid),a)} -function Tjd(a){Rjd();return ws((Wjd(),Vjd),a)} -function wkd(a){ukd();return ws((zkd(),ykd),a)} -function Hmd(a){Cmd();return ws((Kmd(),Jmd),a)} -function Qmd(a){Omd();return ws((Tmd(),Smd),a)} -function $md(a){Ymd();return ws((bnd(),and),a)} -function knd(a){ind();return ws((nnd(),mnd),a)} -function Hnd(a){Fnd();return ws((Knd(),Jnd),a)} -function Snd(a){Pnd();return ws((Vnd(),Und),a)} -function god(a){dod();return ws((jod(),iod),a)} -function rod(a){pod();return ws((uod(),tod),a)} -function Fod(a){Bod();return ws((Iod(),Hod),a)} -function Tod(a){Pod();return ws((Wod(),Vod),a)} -function wpd(a){qpd();return ws((zpd(),ypd),a)} -function Spd(a){Qpd();return ws((Vpd(),Upd),a)} -function fqd(a){dqd();return ws((iqd(),hqd),a)} -function oqd(a){mqd();return ws((rqd(),qqd),a)} -function zsc(a,b){return (uFb(a),a)+(uFb(b),b)} -function wqd(a){uqd();return ws((Eqd(),Dqd),a)} -function Ird(a){Grd();return ws((Lrd(),Krd),a)} -function vtd(a){ttd();return ws((ytd(),xtd),a)} -function dMc(){dMc=geb;bMc=(qpd(),ppd);cMc=Xod} -function uqd(){uqd=geb;sqd=new zqd;tqd=new Bqd} -function wJc(a){!a.e&&(a.e=new bnb);return a.e} -function BTc(a,b){this.c=a;this.a=b;this.b=b-a} -function g8c(a,b,c){this.a=a;this.b=b;this.c=c} -function gud(a,b,c){this.a=a;this.b=b;this.c=c} -function Wdd(a,b,c){this.a=a;this.b=b;this.c=c} -function ced(a,b,c){this.a=a;this.b=b;this.c=c} -function pFd(a,b,c){this.a=a;this.b=b;this.c=c} -function ZPd(a,b,c){this.a=a;this.b=b;this.c=c} -function g7d(a,b,c){this.e=a;this.a=b;this.c=c} -function K7d(a,b,c){s7d();C7d.call(this,a,b,c)} -function f9d(a,b,c){s7d();O8d.call(this,a,b,c)} -function r9d(a,b,c){s7d();O8d.call(this,a,b,c)} -function x9d(a,b,c){s7d();O8d.call(this,a,b,c)} -function h9d(a,b,c){s7d();f9d.call(this,a,b,c)} -function j9d(a,b,c){s7d();f9d.call(this,a,b,c)} -function l9d(a,b,c){s7d();j9d.call(this,a,b,c)} -function t9d(a,b,c){s7d();r9d.call(this,a,b,c)} -function z9d(a,b,c){s7d();x9d.call(this,a,b,c)} -function S2b(a){J2b.call(this,a.d,a.c,a.a,a.b)} -function B3b(a){J2b.call(this,a.d,a.c,a.a,a.b)} -function Og(a){this.d=a;Lg(this);this.b=ed(a.d)} -function cGd(a){aGd();return ws((fGd(),eGd),a)} -function gk(a,b){Qb(a);Qb(b);return new hk(a,b)} -function dr(a,b){Qb(a);Qb(b);return new mr(a,b)} -function hr(a,b){Qb(a);Qb(b);return new sr(a,b)} -function Dr(a,b){Qb(a);Qb(b);return new Rr(a,b)} -function Uub(a){sFb(a.b!=0);return Wub(a,a.a.a)} -function Vub(a){sFb(a.b!=0);return Wub(a,a.c.b)} -function q$d(a){!a.c&&(a.c=new X9d);return a.c} -function cv(a){var b;b=new bnb;xr(b,a);return b} -function Vx(a){var b;b=new _sb;xr(b,a);return b} -function Yx(a){var b;b=new xAb;_q(b,a);return b} -function gv(a){var b;b=new Yub;_q(b,a);return b} -function RD(a,b){CFb(a==null||QD(a,b));return a} -function Mxb(a,b,c){Axb.call(this,b,c);this.a=a} -function kB(a,b){this.c=a;this.b=b;this.a=false} -function hCb(){this.a=';,;';this.b='';this.c=''} -function $Cb(a,b,c){this.b=a;pxb.call(this,b,c)} -function uub(a,b,c){this.c=a;xlb.call(this,b,c)} -function fZb(a,b,c){eZb.call(this,a,b);this.b=c} -function YEb(a,b,c){VEb(c,0,a,b,c.length,false)} -function JYb(a,b,c,d,e){a.b=b;a.c=c;a.d=d;a.a=e} -function D2b(a,b,c,d,e){a.d=b;a.c=c;a.a=d;a.b=e} -function XDb(a,b){if(b){a.b=b;a.a=(LCb(b),b.a)}} -function mFb(a,b){if(!a){throw Adb(new agb(b))}} -function zFb(a,b){if(!a){throw Adb(new dgb(b))}} -function qFb(a,b){if(!a){throw Adb(new zeb(b))}} -function zqc(a,b){mqc();return hgb(a.d.p,b.d.p)} -function T0c(a,b){B0c();return Qfb(a.e.b,b.e.b)} -function U0c(a,b){B0c();return Qfb(a.e.a,b.e.a)} -function Xoc(a,b){return hgb(N3b(a.d),N3b(b.d))} -function Izb(a,b){return !!b&&Jzb(a,b.d)?b:null} -function $lc(a,b){return b==(qpd(),ppd)?a.c:a.d} -function Qdb(a){return Edb(yD(Kdb(a)?Wdb(a):a))} -function Nid(a){return new rjd(a.c+a.b,a.d+a.a)} -function GSd(a){return a!=null&&!mSd(a,aSd,bSd)} -function DSd(a,b){return (JSd(a)<<4|JSd(b))&Bwe} -function Rid(a,b,c,d,e){a.c=b;a.d=c;a.b=d;a.a=e} -function y8b(a){var b,c;b=a.b;c=a.c;a.b=c;a.c=b} -function B8b(a){var b,c;c=a.d;b=a.a;a.d=b;a.a=c} -function u6d(a,b){var c;c=a.c;t6d(a,b);return c} -function Nqd(a,b){b<0?(a.g=-1):(a.g=b);return a} -function kjd(a,b){gjd(a);a.a*=b;a.b*=b;return a} -function hrc(a,b,c){grc.call(this,b,c);this.d=a} -function PZd(a,b,c){kZd.call(this,a,b);this.c=c} -function Kfe(a,b,c){kZd.call(this,a,b);this.c=c} -function zUd(a){yUd();kUd.call(this);this.ci(a)} -function Yee(){ree();Zee.call(this,(YSd(),XSd))} -function Yse(a){Vse();++Use;return new Hte(0,a)} -function uke(){uke=geb;tke=(yob(),new mpb(eLe))} -function ux(){ux=geb;new wx((kl(),jl),(Wk(),Vk))} -function ugb(){ugb=geb;tgb=$C(bJ,Nve,17,256,0,1)} -function zUb(){this.b=Kfb(UD(iGd((yVb(),sVb))))} -function Pq(a){this.b=a;this.a=gn(this.b.a).Od()} -function mr(a,b){this.b=a;this.a=b;zl.call(this)} -function sr(a,b){this.a=a;this.b=b;zl.call(this)} -function s_d(a,b,c){this.a=a;N$d.call(this,b,c)} -function n_d(a,b,c){this.a=a;N$d.call(this,b,c)} -function sDd(a,b,c){var d;d=new OC(c);sC(a,b,d)} -function _Eb(a,b,c){var d;d=a[b];a[b]=c;return d} -function UEb(a){var b;b=a.slice();return dD(b,a)} -function SJb(a){var b;b=a.n;return a.a.b+b.d+b.a} -function PKb(a){var b;b=a.n;return a.e.b+b.d+b.a} -function QKb(a){var b;b=a.n;return a.e.a+b.b+b.c} -function rub(a){a.a.b=a.b;a.b.a=a.a;a.a=a.b=null} -function Mub(a,b){Pub(a,b,a.c.b,a.c);return true} -function w2b(a){if(a.a){return a.a}return R0b(a)} -function NSb(a){HSb();return JGd(a)==vCd(LGd(a))} -function OSb(a){HSb();return LGd(a)==vCd(JGd(a))} -function l_b(a,b){return k_b(a,new eZb(b.a,b.b))} -function xn(a,b){return fn(),ck(a,b),new zy(a,b)} -function fmc(a,b){return a.c<b.c?-1:a.c==b.c?0:1} -function snc(a){return a.b.c.length-a.e.c.length} -function N3b(a){return a.e.c.length-a.g.c.length} -function L3b(a){return a.e.c.length+a.g.c.length} -function Lgb(a){return a==0||isNaN(a)?a:a<0?-1:1} -function V0b(a){return !W0b(a)&&a.c.i.c==a.d.i.c} -function DOc(a){dOc();return (qpd(),apd).Hc(a.j)} -function M0c(a,b,c){B0c();return c.e.a+c.f.a+a*b} -function W0c(a,b,c){B0c();return c.e.b+c.f.b+a*b} -function SUc(a,b,c){return Zjb(a.b,RD(c.b,18),b)} -function TUc(a,b,c){return Zjb(a.b,RD(c.b,18),b)} -function oFd(a,b,c){iEd(a.a,a.b,a.c,RD(b,166),c)} -function lad(a,b,c,d){mad.call(this,a,b,c,d,0,0)} -function LUd(a){yUd();zUd.call(this,a);this.a=-1} -function Gxb(a,b){Axb.call(this,b,1040);this.a=a} -function zqd(){vqd.call(this,'COUNT_CHILDREN',0)} -function ole(a,b){Eke.call(this,a,b);this.a=this} -function ufb(a,b){var c;c=rfb(a,b);c.i=2;return c} -function cJd(a,b){var c;++a.j;c=a.Cj(b);return c} -function pfd(a,b,c){a.a=-1;tfd(a,b.g,c);return a} -function Bsd(a,b){return Rmb(a,new rjd(b.a,b.b))} -function __c(a){return R_c(),$C(Z$,NEe,39,a,0,1)} -function dj(a){return a.e.Rd().gc()*a.c.Rd().gc()} -function fk(a,b,c){return new rk(hDb(a)._e(),c,b)} -function mVd(a,b){nVd(a,b==null?null:(uFb(b),b))} -function q6d(a,b){s6d(a,b==null?null:(uFb(b),b))} -function r6d(a,b){s6d(a,b==null?null:(uFb(b),b))} -function CFb(a){if(!a){throw Adb(new Ifb(null))}} -function tt(a){if(a.c.e!=a.a){throw Adb(new Jrb)}} -function Au(a){if(a.e.c!=a.b){throw Adb(new Jrb)}} -function Ar(a){Qb(a);while(a.Ob()){a.Pb();a.Qb()}} -function Dy(a){tm();this.a=(yob(),new mpb(Qb(a)))} -function mf(a){this.c=a;this.b=this.c.d.vc().Kc()} -function hx(a){a.a.ld();RD(a.a.md(),16).gc();Hh()} -function $hb(a,b){a.a+=Ihb(b,0,b.length);return a} -function Vmb(a,b){tFb(b,a.c.length);return a.c[b]} -function kob(a,b){tFb(b,a.a.length);return a.a[b]} -function Arb(a,b){return uFb(b),Leb(b,(uFb(a),a))} -function vrb(a,b){return uFb(a),Leb(a,(uFb(b),b))} -function YC(a,b,c,d,e,f){return ZC(a,b,c,d,e,0,f)} -function GBb(a,b){return bD(b,0,tCb(b[0],Hgb(1)))} -function IBb(a,b){return Hgb(Bdb(Hgb(a.a).a,b.a))} -function tCb(a,b){return IBb(RD(a,168),RD(b,168))} -function Jgb(){Jgb=geb;Igb=$C(eJ,Nve,168,256,0,1)} -function dhb(){dhb=geb;chb=$C(lJ,Nve,191,256,0,1)} -function Zeb(){Zeb=geb;Yeb=$C(RI,Nve,222,256,0,1)} -function jfb(){jfb=geb;ifb=$C(SI,Nve,180,128,0,1)} -function KYb(){JYb(this,false,false,false,false)} -function Kub(a){ctb.call(this,new gub);ye(this,a)} -function btb(a){this.a=new Usb(a.gc());ye(this,a)} -function nsb(a){this.c=a;this.a=new Osb(this.c.a)} -function Kmc(a){this.a=a;this.c=new Tsb;Emc(this)} -function DRb(){this.d=new rjd(0,0);this.e=new _sb} -function SDb(a,b){xDb();NCb.call(this,a);this.a=b} -function J2b(a,b,c,d){A2b(this);D2b(this,a,b,c,d)} -function Uqc(a,b,c){return hgb(b.d[a.g],c.d[a.g])} -function wMc(a,b,c){return hgb(a.d[b.p],a.d[c.p])} -function xMc(a,b,c){return hgb(a.d[b.p],a.d[c.p])} -function yMc(a,b,c){return hgb(a.d[b.p],a.d[c.p])} -function zMc(a,b,c){return hgb(a.d[b.p],a.d[c.p])} -function Aad(a,b,c){return $wnd.Math.min(c/a,1/b)} -function SIc(a,b){return a?0:$wnd.Math.max(0,b-1)} -function qSd(a,b){return a==null?b==null:lhb(a,b)} -function rSd(a,b){return a==null?b==null:mhb(a,b)} -function lQb(a){return !a.q?(yob(),yob(),wob):a.q} -function _lc(a){return a.c-RD(Vmb(a.a,a.b),293).b} -function trd(a){if(a.c){return a.c.f}return a.e.b} -function urd(a){if(a.c){return a.c.g}return a.e.a} -function wsc(a,b){a.a==null&&usc(a);return a.a[b]} -function L2c(a){var b;b=R2c(a);return !b?a:L2c(b)} -function $se(a,b){Vse();++Use;return new Qte(a,b)} -function Hte(a,b){Vse();Wse.call(this,a);this.a=b} -function N8d(a,b){s7d();t7d.call(this,b);this.a=a} -function iae(a,b,c){this.a=a;XZd.call(this,b,c,2)} -function ntd(a){this.b=new Yub;this.a=a;this.c=-1} -function ds(a){qc.call(this,0,0);this.a=a;this.b=0} -function PSd(a){ZHd.call(this,a.gc());YGd(this,a)} -function jg(a){a.b?jg(a.b):a.d.dc()&&a.f.c.Bc(a.e)} -function aD(a){return Array.isArray(a)&&a.Tm===keb} -function Bsb(a,b){return ZD(b,22)&&Csb(a,RD(b,22))} -function Dsb(a,b){return ZD(b,22)&&Esb(a,RD(b,22))} -function qtb(a,b){return otb(a,b,ptb(a,a.b.Ce(b)))} -function Jtb(a,b){return !(a.a.get(b)===undefined)} -function Iwb(a){return Kwb(a,26)*Kxe+Kwb(a,27)*Lxe} -function OBb(a,b){return FBb(new jCb,new VBb(a),b)} -function Ynb(a,b,c){nFb(0,b,a.length);Wnb(a,0,b,c)} -function Qmb(a,b,c){wFb(b,a.c.length);XEb(a.c,b,c)} -function dKb(a,b,c){var d;if(a){d=a.i;d.c=b;d.b=c}} -function eKb(a,b,c){var d;if(a){d=a.i;d.d=b;d.a=c}} -function Pnb(a,b,c){var d;for(d=0;d<b;++d){a[d]=c}} -function Qnb(a,b){var c;for(c=0;c<b;++c){a[c]=-1}} -function ysb(a,b){var c;c=xsb(a);zob(c,b);return c} -function cA(a,b){!a&&(a=[]);a[a.length]=b;return a} -function RQb(a,b){$id(a.c,b);a.b.c+=b.a;a.b.d+=b.b} -function QQb(a,b){RQb(a,ojd(new rjd(b.a,b.b),a.c))} -function sOb(a,b){this.b=new Yub;this.a=a;this.c=b} -function QYb(){this.b=new aZb;this.c=new UYb(this)} -function fHb(){this.d=new tHb;this.e=new lHb(this)} -function UFc(){RFc();this.f=new Yub;this.e=new Yub} -function yOc(){dOc();this.k=new Tsb;this.d=new _sb} -function nud(){nud=geb;mud=new mGd((umd(),Gld),0)} -function cs(){cs=geb;bs=new ds($C(jJ,rve,1,0,5,1))} -function _ad(a,b,c){return Ysb(a,new TFb(b.a,c.a))} -function DGc(a,b,c){return -hgb(a.f[b.p],a.f[c.p])} -function Mic(a,b,c){Hic(c,a,1);Rmb(b,new xjc(c,a))} -function Nic(a,b,c){Iic(c,a,1);Rmb(b,new Jjc(c,a))} -function h$d(a,b,c){this.a=a;_Zd.call(this,b,c,22)} -function s5d(a,b,c){this.a=a;_Zd.call(this,b,c,14)} -function E8d(a,b,c,d){s7d();N7d.call(this,a,b,c,d)} -function L8d(a,b,c,d){s7d();N7d.call(this,a,b,c,d)} -function nfd(a,b,c){a.a=-1;tfd(a,b.g+1,c);return a} -function bCd(a,b,c){c=xvd(a,RD(b,54),7,c);return c} -function hVd(a,b,c){c=xvd(a,RD(b,54),3,c);return c} -function Ydb(a){if(Kdb(a)){return a|0}return FD(a)} -function cte(a){Vse();++Use;return new eue(10,a,0)} -function fe(a){var b;b=a.f;return !b?(a.f=a.Dc()):b} -function Ec(a){var b;b=a.i;return !b?(a.i=a.bc()):b} -function Ahe(a){if(a.e.j!=a.d){throw Adb(new Jrb)}} -function gn(a){if(a.c){return a.c}return a.c=a.Sd()} -function hn(a){if(a.d){return a.d}return a.d=a.Td()} -function Uee(a,b){return ufe(Pee(a,b))?b.zi():null} -function ed(a){return ZD(a,15)?RD(a,15).ed():a.Kc()} -function De(a){return a.Qc($C(jJ,rve,1,a.gc(),5,1))} -function aE(a){return a!=null&&cE(a)&&!(a.Tm===keb)} -function YD(a){return !Array.isArray(a)&&a.Tm===keb} -function vx(a,b){return Qb(b),a.a.Jd(b)&&!a.b.Jd(b)} -function tD(a,b){return hD(a.l&b.l,a.m&b.m,a.h&b.h)} -function zD(a,b){return hD(a.l|b.l,a.m|b.m,a.h|b.h)} -function HD(a,b){return hD(a.l^b.l,a.m^b.m,a.h^b.h)} -function Sdb(a,b){return Edb(AD(Kdb(a)?Wdb(a):a,b))} -function Tdb(a,b){return Edb(BD(Kdb(a)?Wdb(a):a,b))} -function Udb(a,b){return Edb(CD(Kdb(a)?Wdb(a):a,b))} -function Ieb(a,b){return Keb((uFb(a),a),(uFb(b),b))} -function Jfb(a,b){return Qfb((uFb(a),a),(uFb(b),b))} -function pwb(a){this.b=new cnb(11);this.a=(urb(),a)} -function is(a){this.a=(cs(),bs);this.d=RD(Qb(a),51)} -function Axb(a,b){this.c=0;this.d=a;this.b=b|64|Ove} -function kxb(a,b){this.e=a;this.d=(b&64)!=0?b|Ove:b} -function ezb(a){this.b=null;this.a=(urb(),!a?rrb:a)} -function nz(a){ez(this);this.g=a;gz(this);this.je()} -function vue(a){uue();this.a=0;this.b=a-1;this.c=1} -function yg(a,b,c,d){this.a=a;lg.call(this,a,b,c,d)} -function gEb(a,b,c){if(a.a.Mb(c)){a.b=true;b.Cd(c)}} -function Qwb(a){if(!a.d){a.d=a.b.Kc();a.c=a.b.gc()}} -function lyb(a,b){if(a<0||a>=b){throw Adb(new web)}} -function JDb(a,b){return MDb(a,(uFb(b),new JAb(b)))} -function KDb(a,b){return MDb(a,(uFb(b),new LAb(b)))} -function prc(a,b,c){return qrc(a,RD(b,12),RD(c,12))} -function q4b(a){return J3b(),RD(a,12).g.c.length!=0} -function v4b(a){return J3b(),RD(a,12).e.c.length!=0} -function sdc(a,b){Zcc();return Qfb(b.a.o.a,a.a.o.a)} -function d_d(a,b){(b.Bb&QHe)!=0&&!a.a.o&&(a.a.o=b)} -function T3c(a,b){b.Ug("General 'Rotator",1);S3c(a)} -function MCc(a,b,c){b.qf(c,Kfb(UD(Wjb(a.b,c)))*a.a)} -function yid(a,b,c){tid();return xid(a,b)&&xid(a,c)} -function Rod(a){Pod();return !a.Hc(Lod)&&!a.Hc(Nod)} -function Nrc(a){if(a.e){return Src(a.e)}return null} -function Zdb(a){if(Kdb(a)){return ''+a}return GD(a)} -function XNc(a){var b;b=a;while(b.f){b=b.f}return b} -function HBb(a,b,c){bD(b,0,tCb(b[0],c[0]));return b} -function Gpc(a,b,c,d){var e;e=a.i;e.i=b;e.a=c;e.b=d} -function C5d(a,b,c,d){XZd.call(this,a,b,c);this.b=d} -function N3d(a,b,c,d,e){O3d.call(this,a,b,c,d,e,-1)} -function b4d(a,b,c,d,e){c4d.call(this,a,b,c,d,e,-1)} -function Iie(a,b,c,d){PZd.call(this,a,b,c);this.b=d} -function Xde(a){uId.call(this,a,false);this.a=false} -function Bqd(){vqd.call(this,'LOOKAHEAD_LAYOUT',1)} -function nNd(a){this.b=a;mMd.call(this,a);mNd(this)} -function vNd(a){this.b=a;BMd.call(this,a);uNd(this)} -function J5d(a,b,c){this.a=a;G5d.call(this,b,c,5,6)} -function wje(a,b,c,d){this.b=a;XZd.call(this,b,c,d)} -function Tj(a,b){this.b=a;Aj.call(this,a.b);this.a=b} -function NLc(a){this.a=LLc(a.a);this.b=new dnb(a.b)} -function Fx(a,b){tm();Ex.call(this,a,Pm(new mob(b)))} -function _se(a,b){Vse();++Use;return new aue(a,b,0)} -function bte(a,b){Vse();++Use;return new aue(6,a,b)} -function Ztb(a,b){uFb(b);while(a.Ob()){b.Cd(a.Pb())}} -function Ujb(a,b){return bE(b)?Yjb(a,b):!!qtb(a.f,b)} -function O_d(a,b){return b.Vh()?Vvd(a.b,RD(b,54)):b} -function whb(a,b){return lhb(a.substr(0,b.length),b)} -function Fl(a){return new is(new Il(a.a.length,a.a))} -function Oid(a){return new rjd(a.c+a.b/2,a.d+a.a/2)} -function yD(a){return hD(~a.l&dxe,~a.m&dxe,~a.h&exe)} -function cE(a){return typeof a===gve||typeof a===kve} -function akb(a){a.f=new ttb(a);a.i=new Ntb(a);++a.g} -function Klb(a){if(!a){throw Adb(new Dvb)}return a.d} -function smb(a){var b;b=omb(a);sFb(b!=null);return b} -function tmb(a){var b;b=pmb(a);sFb(b!=null);return b} -function tv(a,b){var c;c=a.a.gc();Sb(b,c);return c-b} -function Ysb(a,b){var c;c=a.a.zc(b,a);return c==null} -function rAb(a,b){return a.a.zc(b,(Geb(),Eeb))==null} -function _nb(a){return new SDb(null,$nb(a,a.length))} -function yPb(a,b,c){return zPb(a,RD(b,42),RD(c,176))} -function Wrb(a,b,c){zsb(a.a,b);return _Eb(a.b,b.g,c)} -function fyb(a,b,c){lyb(c,a.a.c.length);$mb(a.a,c,b)} -function Knb(a,b,c,d){nFb(b,c,a.length);Onb(a,b,c,d)} -function Onb(a,b,c,d){var e;for(e=b;e<c;++e){a[e]=d}} -function Snb(a,b){var c;for(c=0;c<b;++c){a[c]=false}} -function cjb(a,b,c){Pib();this.e=a;this.d=b;this.a=c} -function DBb(a,b,c){this.c=a;this.a=b;yob();this.b=c} -function nMd(a,b){this.d=a;dMd.call(this,a);this.e=b} -function Ved(a,b,c){Ned(a,b.g,c);zsb(a.c,b);return a} -function xYb(a){vYb(a,(Cmd(),ymd));a.d=true;return a} -function Cfe(a){!a.j&&Ife(a,Dee(a.g,a.b));return a.j} -function At(a){a.a=null;a.e=null;akb(a.b);a.d=0;++a.c} -function znb(a){yFb(a.b!=-1);Xmb(a.c,a.a=a.b);a.b=-1} -function Qte(a,b){Wse.call(this,1);this.a=a;this.b=b} -function uUb(a,b){return a>0?$wnd.Math.log(a/b):-100} -function Agb(a,b){return Ddb(a,b)<0?-1:Ddb(a,b)>0?1:0} -function Dge(a,b){hZd(a,ZD(b,160)?b:RD(b,2036).Rl())} -function vFb(a,b){if(a==null){throw Adb(new Ogb(b))}} -function $nb(a,b){return jxb(b,a.length),new Gxb(a,b)} -function hsc(a,b){if(!b){return false}return ye(a,b)} -function Gs(){zs();return cD(WC(RG,1),jwe,549,0,[ys])} -function Xib(a){return a.e==0?a:new cjb(-a.e,a.d,a.a)} -function $Nb(a,b){return Qfb(a.c.c+a.c.b,b.c.c+b.c.b)} -function cvb(a,b){Pub(a.d,b,a.b.b,a.b);++a.a;a.c=null} -function JCb(a,b){!a.c?Rmb(a.b,b):JCb(a.c,b);return a} -function KB(a,b,c){var d;d=JB(a,b);LB(a,b,c);return d} -function Rnb(a,b,c){var d;for(d=0;d<b;++d){bD(a,d,c)}} -function nhb(a,b,c,d,e){while(b<c){d[e++]=ihb(a,b++)}} -function Qnc(a,b,c,d,e){Pnc(a,RD(Qc(b.k,c),15),c,d,e)} -function Nnc(a,b){FDb(GDb(a.Oc(),new voc),new xoc(b))} -function tXc(a,b){return Qfb(a.e.a+a.f.a,b.e.a+b.f.a)} -function vXc(a,b){return Qfb(a.e.b+a.f.b,b.e.b+b.f.b)} -function GOc(a){return $wnd.Math.abs(a.d.e-a.e.e)-a.a} -function ane(a){return a==oxe?mLe:a==pxe?'-INF':''+a} -function cne(a){return a==oxe?mLe:a==pxe?'-INF':''+a} -function MSb(a){HSb();return vCd(JGd(a))==vCd(LGd(a))} -function kOd(a,b,c){return RD(a.c.hd(b,RD(c,136)),44)} -function IFd(a,b){oDd(a,new OC(b.f!=null?b.f:''+b.g))} -function KFd(a,b){oDd(a,new OC(b.f!=null?b.f:''+b.g))} -function YGd(a,b){a.Si()&&(b=bHd(a,b));return a.Fi(b)} -function VVd(a,b){b=a.Yk(null,b);return UVd(a,null,b)} -function Wfe(a,b){++a.j;Tge(a,a.i,b);Vfe(a,RD(b,343))} -function UId(a){a?iz(a,(gib(),fib),''):neb((gib(),a))} -function Twb(a){this.d=(uFb(a),a);this.a=0;this.c=Sve} -function TTc(a,b){this.d=bUc(a);this.c=b;this.a=0.5*b} -function WTb(a){VTb.call(this);this.a=a;Rmb(a.a,this)} -function Zje(){gub.call(this);this.a=true;this.b=true} -function WB(){WB=geb;UB=new XB(false);VB=new XB(true)} -function Pc(a){var b;return b=a.g,!b?(a.g=new th(a)):b} -function Uc(a){var b;return b=a.k,!b?(a.k=new Bh(a)):b} -function ki(a){var b;return b=a.k,!b?(a.k=new Bh(a)):b} -function ej(a){var b;return b=a.i,!b?(a.i=new Ki(a)):b} -function bj(a){var b;b=a.f;return !b?(a.f=new Zj(a)):b} -function Fc(a){var b;b=a.j;return !b?(a.j=new Sw(a)):b} -function Co(a){var b;b=a.d;return !b?(a.d=new mp(a)):b} -function ate(a,b,c){Vse();++Use;return new Yte(a,b,c)} -function yj(a,b){Pb(b,a.c.b.c.gc());return new Nj(a,b)} -function sv(a,b){var c;c=a.a.gc();Pb(b,c);return c-1-b} -function sfb(a,b,c){var d;d=rfb(a,b);Ffb(c,d);return d} -function rfb(a,b){var c;c=new pfb;c.j=a;c.d=b;return c} -function Qb(a){if(a==null){throw Adb(new Ngb)}return a} -function OC(a){if(a==null){throw Adb(new Ngb)}this.a=a} -function XA(a){vA();this.b=new bnb;this.a=a;IA(this,a)} -function Zs(a){this.b=a;this.a=RD(Hvb(this.b.a.e),227)} -function tm(){tm=geb;_l();sm=new Kx((yob(),yob(),vob))} -function Px(){Px=geb;_l();Ox=new Qx((yob(),yob(),xob))} -function lTd(){lTd=geb;kTd=_ae();!!(JTd(),nTd)&&bbe()} -function LSc(a){a.s=NaN;a.c=NaN;MSc(a,a.e);MSc(a,a.j)} -function AYd(a){return (a.i==null&&rYd(a),a.i).length} -function wq(a,b){return RD(gn(a.a).Md().Xb(b),44).ld()} -function Wjb(a,b){return bE(b)?Xjb(a,b):Wd(qtb(a.f,b))} -function QSb(a,b){HSb();return a==JGd(b)?LGd(b):JGd(b)} -function rWb(a,b,c,d){return c==0||(c-d)/c<a.e||b>=a.g} -function bD(a,b,c){pFb(c==null||VC(a,c));return a[b]=c} -function yhb(a,b){BFb(b,a.length+1);return a.substr(b)} -function yxb(a,b){uFb(b);while(a.c<a.d){a.Se(b,a.c++)}} -function Dub(a){this.d=a;this.c=a.a.d.a;this.b=a.a.e.g} -function Ggd(a){this.c=a;this.a=new Yub;this.b=new Yub} -function R4b(a){this.c=new pjd;this.a=new bnb;this.b=a} -function fYb(a){this.b=new bnb;this.a=new bnb;this.c=a} -function Pdd(a,b,c){RD(b.b,68);Umb(b.a,new Wdd(a,c,b))} -function rdc(a,b){Zcc();return RD(Vrb(a,b.d),15).Fc(b)} -function oDd(a,b){var c;c=a.a.length;JB(a,c);LB(a,c,b)} -function eFb(a,b){var c;c=console[a];c.call(console,b)} -function _Id(a,b){var c;++a.j;c=a.Ej();a.rj(a.Zi(c,b))} -function lMc(a,b,c){var d;d=rMc(a,b,c);return kMc(a,d)} -function j2d(a){!a.d&&(a.d=new XZd(o7,a,1));return a.d} -function jVd(a){!a.a&&(a.a=new XZd(r7,a,4));return a.a} -function Jhb(a,b){a.a+=String.fromCharCode(b);return a} -function Thb(a,b){a.a+=String.fromCharCode(b);return a} -function D9d(a,b,c){this.a=a;L6d.call(this,b);this.b=c} -function Fde(a,b,c){this.a=a;MKd.call(this,8,b,null,c)} -function aue(a,b,c){Wse.call(this,a);this.a=b;this.b=c} -function O8d(a,b,c){t7d.call(this,b);this.a=a;this.b=c} -function ut(a){this.c=a;this.b=this.c.a;this.a=this.c.e} -function Zee(a){this.a=(uFb(qKe),qKe);this.b=a;new O5d} -function Trb(a){Ae(a.a);a.b=$C(jJ,rve,1,a.b.length,5,1)} -function Ckb(a){yFb(a.c!=-1);a.d.gd(a.c);a.b=a.c;a.c=-1} -function ejd(a){return $wnd.Math.sqrt(a.a*a.a+a.b*a.b)} -function Jzb(a,b){return Tyb(a.c,a.f,b,a.b,a.a,a.e,a.d)} -function eyb(a,b){return lyb(b,a.a.c.length),Vmb(a.a,b)} -function Hb(a,b){return dE(a)===dE(b)||a!=null&&pb(a,b)} -function O2d(a){return ZD(a,102)&&(RD(a,19).Bb&QHe)!=0} -function Fb(a){Hvb(a);return ZD(a,483)?RD(a,483):jeb(a)} -function bve(a){if(a)return a.dc();return !a.Kc().Ob()} -function kte(a){if(!Ase)return false;return Yjb(Ase,a)} -function hDb(a){if(0>=a){return new rDb}return iDb(a-1)} -function Y2b(a){if(!a.a&&!!a.c){return a.c.b}return a.a} -function Zx(a){if(ZD(a,616)){return a}return new sy(a)} -function LCb(a){if(!a.c){MCb(a);a.d=true}else{LCb(a.c)}} -function ICb(a){if(!a.c){a.d=true;KCb(a)}else{a.c.$e()}} -function bHb(a){a.b=false;a.c=false;a.d=false;a.a=false} -function uMc(a){var b,c;b=a.c.i.c;c=a.d.i.c;return b==c} -function _vd(a,b){var c;c=a.Ih(b);c>=0?a.ki(c):Tvd(a,b)} -function mtd(a,b){a.c<0||a.b.b<a.c?Oub(a.b,b):a.a.tf(b)} -function aBd(a,b){WGd((!a.a&&(a.a=new F4d(a,a)),a.a),b)} -function DQb(a,b){RQb(RD(b.b,68),a);Umb(b.a,new IQb(a))} -function Woc(a,b){return hgb(b.j.c.length,a.j.c.length)} -function oed(a,b,c){hed();return c.Lg(a,RD(b.ld(),149))} -function Hvb(a){if(a==null){throw Adb(new Ngb)}return a} -function uFb(a){if(a==null){throw Adb(new Ngb)}return a} -function uKd(a){if(a.p!=4)throw Adb(new cgb);return a.e} -function tKd(a){if(a.p!=3)throw Adb(new cgb);return a.e} -function CKd(a){if(a.p!=3)throw Adb(new cgb);return a.j} -function DKd(a){if(a.p!=4)throw Adb(new cgb);return a.j} -function wKd(a){if(a.p!=6)throw Adb(new cgb);return a.f} -function FKd(a){if(a.p!=6)throw Adb(new cgb);return a.k} -function $9d(a){!a.b&&(a.b=new pae(new lae));return a.b} -function yfe(a){a.c==-2&&Efe(a,vee(a.g,a.b));return a.c} -function vfb(a,b){var c;c=rfb('',a);c.n=b;c.i=1;return c} -function kp(a,b,c,d){gp.call(this,a,c);this.a=b;this.f=d} -function ct(a,b,c,d){gp.call(this,a,b);this.d=c;this.a=d} -function zy(a,b){_p.call(this,Gob(Qb(a),Qb(b)));this.a=b} -function ufd(){Oed.call(this);aFb(this.j.c,0);this.a=-1} -function $ae(){FBd.call(this,AKe,(jTd(),iTd));Uae(this)} -function Bne(){FBd.call(this,dLe,(Ole(),Nle));xne(this)} -function cdd(){qs.call(this,'DELAUNAY_TRIANGULATION',0)} -function Ehb(a){return String.fromCharCode.apply(null,a)} -function Zjb(a,b,c){return bE(b)?$jb(a,b,c):rtb(a.f,b,c)} -function Fob(a){yob();return !a?(urb(),urb(),trb):a.Oe()} -function Zu(a){dk(a,lwe);return dz(Bdb(Bdb(5,a),a/10|0))} -function yx(a,b){ux();return new wx(new tl(a),new dl(b))} -function fn(){fn=geb;en=new Nx(cD(WC(UK,1),Zve,44,0,[]))} -function tqb(a){!a.d&&(a.d=new xpb(a.c.Cc()));return a.d} -function qqb(a){!a.a&&(a.a=new Sqb(a.c.vc()));return a.a} -function sqb(a){!a.b&&(a.b=new Lqb(a.c.ec()));return a.b} -function qgb(a,b){while(b-->0){a=a<<1|(a<0?1:0)}return a} -function BGc(a,b){var c;c=new R4b(a);ZEb(b.c,c);return c} -function FMb(a,b){a.u.Hc((Pod(),Lod))&&DMb(a,b);HMb(a,b)} -function Fvb(a,b){return dE(a)===dE(b)||a!=null&&pb(a,b)} -function Vrb(a,b){return Bsb(a.a,b)?a.b[RD(b,22).g]:null} -function YRb(){VRb();return cD(WC($O,1),jwe,488,0,[URb])} -function ybd(){sbd();return cD(WC(M1,1),jwe,489,0,[rbd])} -function Hbd(){Cbd();return cD(WC(N1,1),jwe,558,0,[Bbd])} -function gdd(){_cd();return cD(WC(V1,1),jwe,539,0,[$cd])} -function iyd(a){!a.n&&(a.n=new C5d(I4,a,1,7));return a.n} -function wCd(a){!a.c&&(a.c=new C5d(K4,a,9,9));return a.c} -function mzd(a){!a.c&&(a.c=new Yie(E4,a,5,8));return a.c} -function lzd(a){!a.b&&(a.b=new Yie(E4,a,4,7));return a.b} -function Sed(a){a.j.c.length=0;Ae(a.c);sfd(a.a);return a} -function Afe(a){a.e==fLe&&Gfe(a,Aee(a.g,a.b));return a.e} -function Bfe(a){a.f==fLe&&Hfe(a,Bee(a.g,a.b));return a.f} -function xBd(a,b,c,d){wBd(a,b,c,false);j1d(a,d);return a} -function oNd(a,b){this.b=a;nMd.call(this,a,b);mNd(this)} -function wNd(a,b){this.b=a;CMd.call(this,a,b);uNd(this)} -function Kmb(a){this.d=a;this.a=this.d.b;this.b=this.d.c} -function oy(a,b){this.b=a;this.c=b;this.a=new Osb(this.b)} -function ihb(a,b){BFb(b,a.length);return a.charCodeAt(b)} -function NDd(a,b){CGd(a,Kfb(vDd(b,'x')),Kfb(vDd(b,'y')))} -function $Dd(a,b){CGd(a,Kfb(vDd(b,'x')),Kfb(vDd(b,'y')))} -function CDb(a,b){MCb(a);return new SDb(a,new hEb(b,a.a))} -function GDb(a,b){MCb(a);return new SDb(a,new zEb(b,a.a))} -function HDb(a,b){MCb(a);return new WCb(a,new nEb(b,a.a))} -function IDb(a,b){MCb(a);return new oDb(a,new tEb(b,a.a))} -function Ty(a,b){return new Ry(RD(Qb(a),50),RD(Qb(b),50))} -function nHb(a,b){return Qfb(a.d.c+a.d.b/2,b.d.c+b.d.b/2)} -function gTb(a,b,c){c.a?Eyd(a,b.b-a.f/2):Dyd(a,b.a-a.g/2)} -function WYb(a,b){return Qfb(a.g.c+a.g.b/2,b.g.c+b.g.b/2)} -function RZb(a,b){NZb();return Qfb((uFb(a),a),(uFb(b),b))} -function wSd(a){return a!=null&&tpb(eSd,a.toLowerCase())} -function Ae(a){var b;for(b=a.Kc();b.Ob();){b.Pb();b.Qb()}} -function Ih(a){var b;b=a.b;!b&&(a.b=b=new Xh(a));return b} -function R0b(a){var b;b=Z5b(a);if(b){return b}return null} -function BSb(a,b){var c,d;c=a/b;d=eE(c);c>d&&++d;return d} -function Ck(a,b,c){var d;d=RD(a.d.Kb(c),159);!!d&&d.Nb(b)} -function Vhc(a,b,c){tqc(a.a,c);Jpc(c);Kqc(a.b,c);bqc(b,c)} -function oNc(a,b,c,d){this.a=a;this.c=b;this.b=c;this.d=d} -function ROc(a,b,c,d){this.c=a;this.b=b;this.a=c;this.d=d} -function uPc(a,b,c,d){this.c=a;this.b=b;this.d=c;this.a=d} -function Uid(a,b,c,d){this.c=a;this.d=b;this.b=c;this.a=d} -function GTc(a,b,c,d){this.a=a;this.d=b;this.c=c;this.b=d} -function t1b(a,b,c,d){this.a=a;this.e=b;this.d=c;this.c=d} -function $td(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} -function ehb(a,b,c){this.a=ywe;this.d=a;this.b=b;this.c=c} -function fpc(a,b,c,d){qs.call(this,a,b);this.a=c;this.b=d} -function Uwb(a,b){this.d=(uFb(a),a);this.a=16449;this.c=b} -function CIc(a){this.a=new bnb;this.e=$C(kE,Nve,53,a,0,2)} -function ELc(a){a.Ug('No crossing minimization',1);a.Vg()} -function Evb(){yz.call(this,'There is no more element.')} -function OEd(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} -function PEd(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} -function h7d(a,b,c,d){this.e=a;this.a=b;this.c=c;this.d=d} -function x7d(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} -function C8d(a,b,c,d){s7d();M7d.call(this,b,c,d);this.a=a} -function J8d(a,b,c,d){s7d();M7d.call(this,b,c,d);this.a=a} -function lwd(a,b,c){var d,e;d=oSd(a);e=b.ti(c,d);return e} -function lBd(a){var b,c;c=(b=new s2d,b);l2d(c,a);return c} -function mBd(a){var b,c;c=(b=new s2d,b);p2d(c,a);return c} -function HDd(a,b){var c;c=Wjb(a.f,b);wEd(b,c);return null} -function uCd(a){!a.b&&(a.b=new C5d(G4,a,12,3));return a.b} -function VD(a){CFb(a==null||cE(a)&&!(a.Tm===keb));return a} -function gz(a){if(a.n){a.e!==rwe&&a.je();a.j=null}return a} -function Ng(a){ig(a.d);if(a.d.d!=a.c){throw Adb(new Jrb)}} -function Bkb(a){sFb(a.b<a.d.gc());return a.d.Xb(a.c=a.b++)} -function Xub(a){a.a.a=a.c;a.c.b=a.a;a.a.b=a.c.a=null;a.b=0} -function xPd(a){this.f=a;this.c=this.f.e;a.f>0&&wPd(this)} -function Vg(a,b){this.a=a;Pg.call(this,a,RD(a.d,15).fd(b))} -function lrd(a,b){return Qfb(urd(a)*trd(a),urd(b)*trd(b))} -function mrd(a,b){return Qfb(urd(a)*trd(a),urd(b)*trd(b))} -function n5b(a){return ozd(a)&&Heb(TD(Gxd(a,(yCc(),OAc))))} -function Sfc(a,b){return Rc(a,RD(mQb(b,(yCc(),tBc)),17),b)} -function lic(a,b){RD(mQb(a,(Ywc(),qwc)),15).Fc(b);return b} -function C2b(a,b){a.b=b.b;a.c=b.c;a.d=b.d;a.a=b.a;return a} -function cEb(a,b,c,d){this.b=a;this.c=d;xxb.call(this,b,c)} -function Ulc(a,b,c){a.i=0;a.e=0;if(b==c){return}Qlc(a,b,c)} -function Vlc(a,b,c){a.i=0;a.e=0;if(b==c){return}Rlc(a,b,c)} -function akc(a,b,c){Wjc();return _Gb(RD(Wjb(a.e,b),529),c)} -function nd(a){var b;return b=a.f,!b?(a.f=new ne(a,a.c)):b} -function nTc(a,b){return VTc(a.j,b.s,b.c)+VTc(b.e,a.s,a.c)} -function Rrc(a,b){if(!!a.e&&!a.e.a){Prc(a.e,b);Rrc(a.e,b)}} -function Qrc(a,b){if(!!a.d&&!a.d.a){Prc(a.d,b);Qrc(a.d,b)}} -function krd(a,b){return -Qfb(urd(a)*trd(a),urd(b)*trd(b))} -function gtd(a){return RD(a.ld(),149).Pg()+':'+jeb(a.md())} -function EBd(){BBd(this,new yAd);this.wb=(lTd(),kTd);jTd()} -function G7b(a){this.b=new bnb;Tmb(this.b,this.b);this.a=a} -function WWc(a,b){new Yub;this.a=new Ejd;this.b=a;this.c=b} -function urb(){urb=geb;rrb=new wrb;srb=new wrb;trb=new Brb} -function yob(){yob=geb;vob=new Job;wob=new apb;xob=new ipb} -function FGb(){FGb=geb;CGb=new AGb;EGb=new fHb;DGb=new YGb} -function HSb(){HSb=geb;GSb=new bnb;FSb=new Tsb;ESb=new bnb} -function Rb(a,b){if(a==null){throw Adb(new Ogb(b))}return a} -function tCd(a){!a.a&&(a.a=new C5d(J4,a,10,11));return a.a} -function uYd(a){!a.q&&(a.q=new C5d(s7,a,11,10));return a.q} -function xYd(a){!a.s&&(a.s=new C5d(y7,a,21,17));return a.s} -function er(a){Qb(a);return Er(new is(Mr(a.a.Kc(),new ir)))} -function hfd(a,b){rb(a);rb(b);return ns(RD(a,22),RD(b,22))} -function qDd(a,b,c){var d,e;d=Qeb(c);e=new hC(d);sC(a,b,e)} -function d4d(a,b,c,d,e,f){c4d.call(this,a,b,c,d,e,f?-2:-1)} -function sje(a,b,c,d){kZd.call(this,b,c);this.b=a;this.a=d} -function Ry(a,b){wi.call(this,new ezb(a));this.a=a;this.b=b} -function Gu(a){this.b=a;this.c=a;a.e=null;a.c=null;this.a=1} -function Dkc(a){lkc();var b;b=RD(a.g,10);b.n.a=a.d.c+b.d.b} -function fA(){fA=geb;var a,b;b=!lA();a=new tA;eA=b?new mA:a} -function Hob(a){yob();return ZD(a,59)?new irb(a):new Upb(a)} -function Ux(a){return ZD(a,16)?new btb(RD(a,16)):Vx(a.Kc())} -function Vi(a){return new ij(a,a.e.Rd().gc()*a.c.Rd().gc())} -function fj(a){return new sj(a,a.e.Rd().gc()*a.c.Rd().gc())} -function Iz(a){return !!a&&!!a.hashCode?a.hashCode():kFb(a)} -function Yjb(a,b){return b==null?!!qtb(a.f,null):Jtb(a.i,b)} -function hYb(a,b){var c;c=$sb(a.a,b);c&&(b.d=null);return c} -function MGb(a,b,c){if(a.f){return a.f.ef(b,c)}return false} -function cFc(a,b,c,d){bD(a.c[b.g],c.g,d);bD(a.c[c.g],b.g,d)} -function fFc(a,b,c,d){bD(a.c[b.g],b.g,c);bD(a.b[b.g],b.g,d)} -function sXc(a,b,c){return Kfb(UD(c.a))<=a&&Kfb(UD(c.b))>=b} -function yJc(a,b){this.g=a;this.d=cD(WC(jR,1),WAe,10,0,[b])} -function lHb(a){this.c=a;this.b=new yAb(RD(Qb(new oHb),50))} -function UYb(a){this.c=a;this.b=new yAb(RD(Qb(new XYb),50))} -function $Qb(a){this.b=a;this.a=new yAb(RD(Qb(new bRb),50))} -function tRc(){this.b=new _sb;this.d=new Yub;this.e=new Fyb} -function VTb(){this.c=new pjd;this.d=new pjd;this.e=new pjd} -function a1b(){this.a=new Ejd;this.b=(dk(3,iwe),new cnb(3))} -function i7d(a,b){this.e=a;this.a=jJ;this.b=pje(b);this.c=b} -function Vid(a){this.c=a.c;this.d=a.d;this.b=a.b;this.a=a.a} -function VLd(a,b,c,d,e,f){this.a=a;NKd.call(this,b,c,d,e,f)} -function aLd(a,b,c,d,e,f){this.a=a;NKd.call(this,b,c,d,e,f)} -function fge(a,b,c,d,e,f,g){return new lle(a.e,b,c,d,e,f,g)} -function xhb(a,b,c){return c>=0&&lhb(a.substr(c,b.length),b)} -function hGd(a,b){return ZD(b,149)&&lhb(a.b,RD(b,149).Pg())} -function Tde(a,b){return a.a?b.Gh().Kc():RD(b.Gh(),71).Ii()} -function Qqb(a,b){var c;c=a.b.Qc(b);Rqb(c,a.b.gc());return c} -function Ivb(a,b){if(a==null){throw Adb(new Ogb(b))}return a} -function zYd(a){if(!a.u){yYd(a);a.u=new w0d(a,a)}return a.u} -function Kx(a){this.a=(yob(),ZD(a,59)?new irb(a):new Upb(a))} -function Uwd(a){var b;b=RD(Ywd(a,16),29);return !b?a.ii():b} -function lz(a,b){var c;c=nfb(a.Rm);return b==null?c:c+': '+b} -function zhb(a,b,c){AFb(b,c,a.length);return a.substr(b,c-b)} -function VKb(a,b){RJb.call(this);KKb(this);this.a=a;this.c=b} -function neb(a){!a?vve:lz(a,a.ie());String.fromCharCode(10)} -function Wz(a){Qz();$wnd.setTimeout(function(){throw a},0)} -function GHb(){DHb();return cD(WC(uN,1),jwe,436,0,[CHb,BHb])} -function OHb(){LHb();return cD(WC(vN,1),jwe,435,0,[JHb,KHb])} -function WUb(){TUb();return cD(WC(BP,1),jwe,432,0,[RUb,SUb])} -function S8b(){P8b();return cD(WC(vS,1),jwe,517,0,[O8b,N8b])} -function Fuc(){Cuc();return cD(WC(fX,1),jwe,487,0,[Buc,Auc])} -function buc(){$tc();return cD(WC(cX,1),jwe,428,0,[Ytc,Ztc])} -function mtc(){jtc();return cD(WC($W,1),jwe,431,0,[htc,itc])} -function vEc(){sEc();return cD(WC(xX,1),jwe,430,0,[qEc,rEc])} -function vNc(){sNc();return cD(WC(MY,1),jwe,531,0,[rNc,qNc])} -function zQc(){wQc();return cD(WC(FZ,1),jwe,523,0,[vQc,uQc])} -function HQc(){EQc();return cD(WC(GZ,1),jwe,522,0,[CQc,DQc])} -function iTc(){fTc();return cD(WC(b$,1),jwe,528,0,[eTc,dTc])} -function Rvc(){Ovc();return cD(WC(lX,1),jwe,429,0,[Mvc,Nvc])} -function F8c(){z8c();return cD(WC(l1,1),jwe,490,0,[x8c,y8c])} -function H9c(){B9c();return cD(WC(t1,1),jwe,491,0,[z9c,A9c])} -function D_c(){A_c();return cD(WC(K_,1),jwe,433,0,[z_c,y_c])} -function a4c(){Y3c();return cD(WC(H0,1),jwe,434,0,[W3c,X3c])} -function gVc(){dVc();return cD(WC(w$,1),jwe,464,0,[bVc,cVc])} -function D2c(){x2c();return cD(WC(s0,1),jwe,500,0,[v2c,w2c])} -function Pbd(){Mbd();return cD(WC(O1,1),jwe,438,0,[Lbd,Kbd])} -function rdd(){ldd();return cD(WC(W1,1),jwe,437,0,[kdd,jdd])} -function xqd(){uqd();return cD(WC(M3,1),jwe,347,0,[sqd,tqd])} -function Jvd(a,b,c,d){return c>=0?a.Uh(b,c,d):a.Ch(null,c,d)} -function ltd(a){if(a.b.b==0){return a.a.sf()}return Uub(a.b)} -function vKd(a){if(a.p!=5)throw Adb(new cgb);return Ydb(a.f)} -function EKd(a){if(a.p!=5)throw Adb(new cgb);return Ydb(a.k)} -function P$d(a){dE(a.a)===dE((lYd(),kYd))&&Q$d(a);return a.a} -function iad(a,b){a.b=b;a.c>0&&a.b>0&&(a.g=Aad(a.c,a.b,a.a))} -function jad(a,b){a.c=b;a.c>0&&a.b>0&&(a.g=Aad(a.c,a.b,a.a))} -function BUc(a,b){yUc(this,new rjd(a.a,a.b));zUc(this,gv(b))} -function Tp(){Sp.call(this,new Usb(Sv(12)));Lb(true);this.a=2} -function eue(a,b,c){Vse();Wse.call(this,a);this.b=b;this.a=c} -function C7d(a,b,c){s7d();t7d.call(this,b);this.a=a;this.b=c} -function qub(a){var b;b=a.c.d.b;a.b=b;a.a=a.c.d;b.a=a.c.d.b=a} -function Tub(a){return a.b==0?null:(sFb(a.b!=0),Wub(a,a.a.a))} -function Xjb(a,b){return b==null?Wd(qtb(a.f,null)):Ktb(a.i,b)} -function bzb(a,b,c,d,e){return new Kzb(a,(cAb(),aAb),b,c,d,e)} -function Fnb(a,b){oFb(b);return Hnb(a,$C(kE,Pwe,28,b,15,1),b)} -function Tx(a,b){Rb(a,'set1');Rb(b,'set2');return new ey(a,b)} -function Kz(a,b){var c=Jz[a.charCodeAt(0)];return c==null?a:c} -function Xyb(a,b){var c,d;c=b;d=new Gzb;Zyb(a,c,d);return d.d} -function EMb(a,b,c,d){var e;e=new TJb;b.a[c.g]=e;Wrb(a.b,d,e)} -function SXb(a,b){var c;c=BXb(a.f,b);return $id(fjd(c),a.f.d)} -function RFb(a){var b;EJb(a.a);DJb(a.a);b=new PJb(a.a);LJb(b)} -function _Mb(a,b){$Mb(a,true);Umb(a.e.Rf(),new dNb(a,true,b))} -function PSb(a,b){HSb();return a==vCd(JGd(b))||a==vCd(LGd(b))} -function R0c(a,b){B0c();return RD(mQb(b,(h_c(),f_c)),17).a==a} -function eE(a){return Math.max(Math.min(a,lve),-2147483648)|0} -function sy(a){this.a=RD(Qb(a),277);this.b=(yob(),new jrb(a))} -function qbd(a,b,c){this.i=new bnb;this.b=a;this.g=b;this.a=c} -function had(a,b,c){this.a=new bnb;this.e=a;this.f=b;this.c=c} -function _9c(a,b,c){this.c=new bnb;this.e=a;this.f=b;this.b=c} -function TKb(a){RJb.call(this);KKb(this);this.a=a;this.c=true} -function ieb(a){function b(){} -;b.prototype=a||{};return new b} -function zfb(a){if(a.Ae()){return null}var b=a.n;return eeb[b]} -function kzd(a){if(a.Db>>16!=3)return null;return RD(a.Cb,27)} -function MCd(a){if(a.Db>>16!=9)return null;return RD(a.Cb,27)} -function Fzd(a){if(a.Db>>16!=6)return null;return RD(a.Cb,74)} -function dVc(){dVc=geb;bVc=new eVc(Nye,0);cVc=new eVc(Oye,1)} -function wQc(){wQc=geb;vQc=new xQc(Oye,0);uQc=new xQc(Nye,1)} -function EQc(){EQc=geb;CQc=new FQc(Zye,0);DQc=new FQc('UP',1)} -function Is(){Is=geb;Hs=ss((zs(),cD(WC(RG,1),jwe,549,0,[ys])))} -function Wx(a){var b;b=new atb(Sv(a.length));zob(b,a);return b} -function B2b(a,b){a.b+=b.b;a.c+=b.c;a.d+=b.d;a.a+=b.a;return a} -function qmb(a,b){if(kmb(a,b)){Jmb(a);return true}return false} -function qC(a,b){if(b==null){throw Adb(new Ngb)}return rC(a,b)} -function nB(a,b){var c;c=a.q.getHours();a.q.setDate(b);mB(a,c)} -function Xvd(a,b,c){var d;d=a.Ih(b);d>=0?a.bi(d,c):Svd(a,b,c)} -function Lvd(a,b){var c;c=a.Ih(b);return c>=0?a.Wh(c):Rvd(a,b)} -function zo(a,b){var c;Qb(b);for(c=a.a;c;c=c.c){b.Yd(c.g,c.i)}} -function pMc(a,b,c){var d;d=qMc(a,b,c);a.b=new _Lc(d.c.length)} -function HId(a,b,c){EId();!!a&&Zjb(DId,a,b);!!a&&Zjb(CId,a,c)} -function bfc(a,b){Rec();return Geb(),RD(b.a,17).a<a?true:false} -function afc(a,b){Rec();return Geb(),RD(b.b,17).a<a?true:false} -function R7b(a,b){return $wnd.Math.abs(a)<$wnd.Math.abs(b)?a:b} -function xCd(a){return !a.a&&(a.a=new C5d(J4,a,10,11)),a.a.i>0} -function sId(a){var b;b=a.d;b=a.bj(a.f);WGd(a,b);return b.Ob()} -function bHd(a,b){var c;c=new Kub(b);Ve(c,a);return new dnb(c)} -function qKd(a){if(a.p!=0)throw Adb(new cgb);return Pdb(a.f,0)} -function zKd(a){if(a.p!=0)throw Adb(new cgb);return Pdb(a.k,0)} -function gBd(a){if(a.Db>>16!=7)return null;return RD(a.Cb,241)} -function xXd(a){if(a.Db>>16!=6)return null;return RD(a.Cb,241)} -function dCd(a){if(a.Db>>16!=7)return null;return RD(a.Cb,167)} -function vCd(a){if(a.Db>>16!=11)return null;return RD(a.Cb,27)} -function uWd(a){if(a.Db>>16!=17)return null;return RD(a.Cb,29)} -function kVd(a){if(a.Db>>16!=3)return null;return RD(a.Cb,155)} -function BDb(a){var b;MCb(a);b=new _sb;return CDb(a,new aEb(b))} -function xfb(a,b){var c=a.a=a.a||[];return c[b]||(c[b]=a.ve(b))} -function qB(a,b){var c;c=a.q.getHours();a.q.setMonth(b);mB(a,c)} -function oz(a,b){ez(this);this.f=b;this.g=a;gz(this);this.je()} -function TQb(a,b){this.a=a;this.c=ajd(this.a);this.b=new Vid(b)} -function aGb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new dnb(c))} -function s$b(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new dnb(c))} -function _Kc(a){this.a=a;this.b=$C(qY,Nve,2043,a.e.length,0,2)} -function fGb(){this.a=new Iub;this.e=new _sb;this.g=0;this.i=0} -function EId(){EId=geb;DId=new Tsb;CId=new Tsb;IId(zK,new JId)} -function KFc(){KFc=geb;JFc=nfd(new ufd,(sXb(),rXb),(hcc(),$bc))} -function RFc(){RFc=geb;QFc=nfd(new ufd,(sXb(),rXb),(hcc(),$bc))} -function gGc(){gGc=geb;fGc=nfd(new ufd,(sXb(),rXb),(hcc(),$bc))} -function ANc(){ANc=geb;zNc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc))} -function dOc(){dOc=geb;cOc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc))} -function gQc(){gQc=geb;fQc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc))} -function WQc(){WQc=geb;VQc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc))} -function dZd(a,b,c,d,e,f){return new P3d(a.e,b,a.Lj(),c,d,e,f)} -function $jb(a,b,c){return b==null?rtb(a.f,null,c):Ltb(a.i,b,c)} -function Y0b(a,b){!!a.c&&Ymb(a.c.g,a);a.c=b;!!a.c&&Rmb(a.c.g,a)} -function g3b(a,b){!!a.c&&Ymb(a.c.a,a);a.c=b;!!a.c&&Rmb(a.c.a,a)} -function P3b(a,b){!!a.i&&Ymb(a.i.j,a);a.i=b;!!a.i&&Rmb(a.i.j,a)} -function Z0b(a,b){!!a.d&&Ymb(a.d.e,a);a.d=b;!!a.d&&Rmb(a.d.e,a)} -function _Sc(a,b){!!a.a&&Ymb(a.a.k,a);a.a=b;!!a.a&&Rmb(a.a.k,a)} -function aTc(a,b){!!a.b&&Ymb(a.b.f,a);a.b=b;!!a.b&&Rmb(a.b.f,a)} -function Odd(a,b){Pdd(a,a.b,a.c);RD(a.b.b,68);!!b&&RD(b.b,68).b} -function j2c(a,b){return Qfb(RD(a.c,65).c.e.b,RD(b.c,65).c.e.b)} -function k2c(a,b){return Qfb(RD(a.c,65).c.e.a,RD(b.c,65).c.e.a)} -function YXb(a){NXb();return Geb(),RD(a.a,86).d.e!=0?true:false} -function LXd(a,b){ZD(a.Cb,184)&&(RD(a.Cb,184).tb=null);PAd(a,b)} -function CWd(a,b){ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),4);PAd(a,b)} -function _5d(a,b){a6d(a,b);ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),2)} -function JFd(a,b){var c,d;c=b.c;d=c!=null;d&&oDd(a,new OC(b.c))} -function v0d(a){var b,c;c=(jTd(),b=new s2d,b);l2d(c,a);return c} -function E4d(a){var b,c;c=(jTd(),b=new s2d,b);l2d(c,a);return c} -function Fr(a){var b;while(true){b=a.Pb();if(!a.Ob()){return b}}} -function nq(a,b,c){Rmb(a.a,(fn(),ck(b,c),new gp(b,c)));return a} -function rge(a,b){return nke(),wWd(b)?new ole(b,a):new Eke(b,a)} -function ojb(a){Pib();return Ddb(a,0)>=0?jjb(a):Xib(jjb(Odb(a)))} -function Asb(a){var b;b=RD(UEb(a.b),9);return new Fsb(a.a,b,a.c)} -function Qw(a,b){var c;c=RD(Xv(nd(a.a),b),16);return !c?0:c.gc()} -function Zmb(a,b,c){var d;xFb(b,c,a.c.length);d=c-b;$Eb(a.c,b,d)} -function Rkb(a,b,c){xFb(b,c,a.gc());this.c=a;this.a=b;this.b=c-b} -function fgd(a){this.c=new Yub;this.b=a.b;this.d=a.c;this.a=a.a} -function qjd(a){this.a=$wnd.Math.cos(a);this.b=$wnd.Math.sin(a)} -function bTc(a,b,c,d){this.c=a;this.d=d;_Sc(this,b);aTc(this,c)} -function Si(a,b){Qi.call(this,new Usb(Sv(a)));dk(b,Mve);this.a=b} -function Ryb(a,b,c){return new Kzb(a,(cAb(),_zb),null,false,b,c)} -function czb(a,b,c){return new Kzb(a,(cAb(),bAb),b,c,null,false)} -function ABb(){xBb();return cD(WC(QL,1),jwe,108,0,[uBb,vBb,wBb])} -function yLb(){vLb();return cD(WC(TN,1),jwe,471,0,[uLb,tLb,sLb])} -function HKb(){EKb();return cD(WC(MN,1),jwe,470,0,[CKb,BKb,DKb])} -function aKb(){ZJb();return cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])} -function DWb(){AWb();return cD(WC(JP,1),jwe,391,0,[yWb,xWb,zWb])} -function moc(){joc();return cD(WC(UV,1),jwe,372,0,[ioc,hoc,goc])} -function ytc(){stc();return cD(WC(_W,1),jwe,322,0,[qtc,ptc,rtc])} -function Htc(){Etc();return cD(WC(aX,1),jwe,351,0,[Btc,Dtc,Ctc])} -function kuc(){huc();return cD(WC(dX,1),jwe,459,0,[fuc,euc,guc])} -function Avc(){xvc();return cD(WC(jX,1),jwe,298,0,[vvc,wvc,uvc])} -function Jvc(){Gvc();return cD(WC(kX,1),jwe,311,0,[Evc,Fvc,Dvc])} -function pDc(){lDc();return cD(WC(sX,1),jwe,390,0,[iDc,jDc,kDc])} -function EEc(){BEc();return cD(WC(yX,1),jwe,462,0,[AEc,yEc,zEc])} -function NEc(){KEc();return cD(WC(zX,1),jwe,387,0,[HEc,IEc,JEc])} -function WEc(){TEc();return cD(WC(AX,1),jwe,349,0,[SEc,QEc,REc])} -function oFc(){lFc();return cD(WC(CX,1),jwe,350,0,[iFc,jFc,kFc])} -function xFc(){uFc();return cD(WC(DX,1),jwe,352,0,[tFc,rFc,sFc])} -function GFc(){DFc();return cD(WC(EX,1),jwe,388,0,[BFc,CFc,AFc])} -function UKc(){RKc();return cD(WC(nY,1),jwe,463,0,[OKc,PKc,QKc])} -function K3b(a){return xjd(cD(WC(l3,1),Nve,8,0,[a.i.n,a.n,a.a]))} -function OZc(){LZc();return cD(WC(F_,1),jwe,392,0,[KZc,JZc,IZc])} -function H_c(){H_c=geb;G_c=nfd(new ufd,(YVc(),WVc),(WYc(),MYc))} -function A_c(){A_c=geb;z_c=new B_c('DFS',0);y_c=new B_c('BFS',1)} -function TQc(a,b,c){var d;d=new SQc;d.b=b;d.a=c;++b.b;Rmb(a.d,d)} -function NTb(a,b,c){var d;d=new sjd(c.d);$id(d,a);CGd(b,d.a,d.b)} -function Nwb(a,b){Mwb(a,Ydb(Cdb(Tdb(b,24),Pxe)),Ydb(Cdb(b,Pxe)))} -function wFb(a,b){if(a<0||a>b){throw Adb(new veb(cye+a+dye+b))}} -function tFb(a,b){if(a<0||a>=b){throw Adb(new veb(cye+a+dye+b))}} -function BFb(a,b){if(a<0||a>=b){throw Adb(new eib(cye+a+dye+b))}} -function Swb(a,b){this.b=(uFb(a),a);this.a=(b&qxe)==0?b|64|Ove:b} -function ODb(a){var b;MCb(a);b=(urb(),urb(),srb);return PDb(a,b)} -function R9c(a,b,c){var d;d=S9c(a,b,false);return d.b<=b&&d.a<=c} -function h9c(){b9c();return cD(WC(o1,1),jwe,439,0,[$8c,a9c,_8c])} -function c7c(){_6c();return cD(WC(a1,1),jwe,394,0,[Z6c,$6c,Y6c])} -function i6c(){f6c();return cD(WC(V0,1),jwe,445,0,[c6c,d6c,e6c])} -function D6c(){z6c();return cD(WC(Z0,1),jwe,455,0,[w6c,y6c,x6c])} -function k4c(){g4c();return cD(WC(I0,1),jwe,393,0,[d4c,e4c,f4c])} -function x5c(){t5c();return cD(WC(N0,1),jwe,299,0,[r5c,s5c,q5c])} -function Rmd(){Omd();return cD(WC(t3,1),jwe,278,0,[Lmd,Mmd,Nmd])} -function pqd(){mqd();return cD(WC(J3,1),jwe,280,0,[kqd,jqd,lqd])} -function Ind(){Fnd();return cD(WC(y3,1),jwe,346,0,[Dnd,Cnd,End])} -function jbd(){gbd();return cD(WC(I1,1),jwe,444,0,[dbd,ebd,fbd])} -function bv(a){Qb(a);return ZD(a,16)?new dnb(RD(a,16)):cv(a.Kc())} -function Hz(a,b){return !!a&&!!a.equals?a.equals(b):dE(a)===dE(b)} -function Cdb(a,b){return Edb(tD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} -function Rdb(a,b){return Edb(zD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} -function $db(a,b){return Edb(HD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} -function xs(a,b){var c;c=(uFb(a),a).g;lFb(!!c);uFb(b);return c(b)} -function rv(a,b){var c,d;d=tv(a,b);c=a.a.fd(d);return new Gv(a,c)} -function CXd(a){if(a.Db>>16!=6)return null;return RD(yvd(a),241)} -function sKd(a){if(a.p!=2)throw Adb(new cgb);return Ydb(a.f)&Bwe} -function BKd(a){if(a.p!=2)throw Adb(new cgb);return Ydb(a.k)&Bwe} -function ynb(a){sFb(a.a<a.c.c.length);a.b=a.a++;return a.c.c[a.b]} -function $Gb(a,b){a.b=a.b|b.b;a.c=a.c|b.c;a.d=a.d|b.d;a.a=a.a|b.a} -function NJb(a,b){var c;c=Kfb(UD(a.a.of((umd(),cmd))));OJb(a,b,c)} -function bjb(a,b){cjb.call(this,1,2,cD(WC(kE,1),Pwe,28,15,[a,b]))} -function Yte(a,b,c){Wse.call(this,25);this.b=a;this.a=b;this.c=c} -function xte(a){Vse();Wse.call(this,a);this.c=false;this.a=false} -function xfe(a){a.a==(ree(),qee)&&Dfe(a,see(a.g,a.b));return a.a} -function zfe(a){a.d==(ree(),qee)&&Ffe(a,wee(a.g,a.b));return a.d} -function IZb(a,b){CZb();return a.c==b.c?Qfb(b.d,a.d):Qfb(b.c,a.c)} -function GZb(a,b){CZb();return a.c==b.c?Qfb(b.d,a.d):Qfb(a.c,b.c)} -function HZb(a,b){CZb();return a.c==b.c?Qfb(a.d,b.d):Qfb(a.c,b.c)} -function JZb(a,b){CZb();return a.c==b.c?Qfb(a.d,b.d):Qfb(b.c,a.c)} -function Yrb(a,b){return Dsb(a.a,b)?_Eb(a.b,RD(b,22).g,null):null} -function Lwb(a){return Bdb(Sdb(Hdb(Kwb(a,32)),32),Hdb(Kwb(a,32)))} -function kUb(a){return a.b==null||a.b.length==0?'n_'+a.a:'n_'+a.b} -function aXc(a){return a.c==null||a.c.length==0?'n_'+a.g:'n_'+a.c} -function wYc(a,b){var c;c=a+'';while(c.length<b){c='0'+c}return c} -function vkc(a,b){var c;c=RD(Wjb(a.g,b),60);Umb(b.d,new ulc(a,c))} -function J_b(a,b){var c,d;c=l2b(a);d=l2b(b);return c<d?-1:c>d?1:0} -function Hmc(a,b){var c,d;c=Gmc(b);d=c;return RD(Wjb(a.c,d),17).a} -function CMc(a,b,c){var d;d=a.d[b.p];a.d[b.p]=a.d[c.p];a.d[c.p]=d} -function Jqd(a,b,c){var d;if(a.n&&!!b&&!!c){d=new otd;Rmb(a.e,d)}} -function gYb(a,b){Ysb(a.a,b);if(b.d){throw Adb(new yz(jye))}b.d=a} -function Had(a,b){this.a=new bnb;this.d=new bnb;this.f=a;this.c=b} -function RWb(){this.c=new dXb;this.a=new I_b;this.b=new E0b;g0b()} -function med(){hed();this.b=new Tsb;this.a=new Tsb;this.c=new bnb} -function KKd(a,b,c){this.d=a;this.j=b;this.e=c;this.o=-1;this.p=3} -function LKd(a,b,c){this.d=a;this.k=b;this.f=c;this.o=-1;this.p=5} -function S3d(a,b,c,d,e,f){R3d.call(this,a,b,c,d,e);f&&(this.o=-2)} -function U3d(a,b,c,d,e,f){T3d.call(this,a,b,c,d,e);f&&(this.o=-2)} -function W3d(a,b,c,d,e,f){V3d.call(this,a,b,c,d,e);f&&(this.o=-2)} -function Y3d(a,b,c,d,e,f){X3d.call(this,a,b,c,d,e);f&&(this.o=-2)} -function $3d(a,b,c,d,e,f){Z3d.call(this,a,b,c,d,e);f&&(this.o=-2)} -function a4d(a,b,c,d,e,f){_3d.call(this,a,b,c,d,e);f&&(this.o=-2)} -function f4d(a,b,c,d,e,f){e4d.call(this,a,b,c,d,e);f&&(this.o=-2)} -function h4d(a,b,c,d,e,f){g4d.call(this,a,b,c,d,e);f&&(this.o=-2)} -function N7d(a,b,c,d){t7d.call(this,c);this.b=a;this.c=b;this.d=d} -function mfe(a,b){this.f=a;this.a=(ree(),pee);this.c=pee;this.b=b} -function Jfe(a,b){this.g=a;this.d=(ree(),qee);this.a=qee;this.b=b} -function Gme(a,b){!a.c&&(a.c=new Uge(a,0));Fge(a.c,(nme(),fme),b)} -function Oge(a,b){return Pge(a,b,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)} -function lB(a,b){return Agb(Hdb(a.q.getTime()),Hdb(b.q.getTime()))} -function gj(a){return fk(a.e.Rd().gc()*a.c.Rd().gc(),16,new qj(a))} -function CYd(a){return !!a.u&&tYd(a.u.a).i!=0&&!(!!a.n&&d$d(a.n))} -function p4d(a){return !!a.a&&o4d(a.a.a).i!=0&&!(!!a.b&&o5d(a.b))} -function Cxd(a,b){if(b==0){return !!a.o&&a.o.f!=0}return Kvd(a,b)} -function Cc(a,b,c){var d;d=RD(a.Zb().xc(b),16);return !!d&&d.Hc(c)} -function Gc(a,b,c){var d;d=RD(a.Zb().xc(b),16);return !!d&&d.Mc(c)} -function _yb(a,b){var c;c=1-b;a.a[c]=azb(a.a[c],c);return azb(a,b)} -function DFb(a,b){var c,d;d=Cdb(a,yxe);c=Sdb(b,32);return Rdb(c,d)} -function bGb(a,b,c){var d;d=(Qb(a),new dnb(a));_Fb(new aGb(d,b,c))} -function t$b(a,b,c){var d;d=(Qb(a),new dnb(a));r$b(new s$b(d,b,c))} -function vBd(a,b,c,d,e,f){wBd(a,b,c,f);EYd(a,d);FYd(a,e);return a} -function Xhb(a,b,c,d){a.a+=''+zhb(b==null?vve:jeb(b),c,d);return a} -function Jkb(a,b){this.a=a;Dkb.call(this,a);wFb(b,a.gc());this.b=b} -function xmb(a){this.a=$C(jJ,rve,1,mgb($wnd.Math.max(8,a))<<1,5,1)} -function t2b(a){return RD(anb(a,$C(jR,WAe,10,a.c.length,0,1)),199)} -function s2b(a){return RD(anb(a,$C(WQ,VAe,18,a.c.length,0,1)),482)} -function Iyb(a){return !a.a?a.c:a.e.length==0?a.a.a:a.a.a+(''+a.e)} -function Rib(a){while(a.d>0&&a.a[--a.d]==0);a.a[a.d++]==0&&(a.e=0)} -function fvb(a){sFb(a.b.b!=a.d.a);a.c=a.b=a.b.b;--a.a;return a.c.c} -function sRc(a,b,c){a.a=b;a.c=c;a.b.a.$b();Xub(a.d);aFb(a.e.a.c,0)} -function Z5c(a,b){var c;a.e=new R5c;c=Q2c(b);_mb(c,a.c);$5c(a,c,0)} -function zgd(a,b,c,d){var e;e=new Hgd;e.a=b;e.b=c;e.c=d;Mub(a.a,e)} -function Agd(a,b,c,d){var e;e=new Hgd;e.a=b;e.b=c;e.c=d;Mub(a.b,e)} -function Tb(a,b,c){if(a<0||b<a||b>c){throw Adb(new veb(Kb(a,b,c)))}} -function Pb(a,b){if(a<0||a>=b){throw Adb(new veb(Ib(a,b)))}return a} -function qz(b){if(!('stack' in b)){try{throw b}catch(a){}}return b} -function Zjc(a){Wjc();if(ZD(a.g,10)){return RD(a.g,10)}return null} -function nx(a){if(Ih(a).dc()){return false}Jh(a,new rx);return true} -function Xdb(a){var b;if(Kdb(a)){b=a;return b==-0.?0:b}return ED(a)} -function lkb(a,b){if(ZD(b,44)){return Jd(a.a,RD(b,44))}return false} -function gsb(a,b){if(ZD(b,44)){return Jd(a.a,RD(b,44))}return false} -function vub(a,b){if(ZD(b,44)){return Jd(a.a,RD(b,44))}return false} -function RCb(a){var b;LCb(a);b=new Prb;ixb(a.a,new fDb(b));return b} -function Vae(){var a,b,c;b=(c=(a=new s2d,a),c);Rmb(Rae,b);return b} -function mDb(a){var b;LCb(a);b=new ltb;ixb(a.a,new uDb(b));return b} -function jDb(a,b){if(a.a<=a.b){b.Dd(a.a++);return true}return false} -function xzb(a){yzb.call(this,a,(cAb(),$zb),null,false,null,false)} -function $Rb(){$Rb=geb;ZRb=ss((VRb(),cD(WC($O,1),jwe,488,0,[URb])))} -function CHc(){CHc=geb;BHc=yx(sgb(1),sgb(4));AHc=yx(sgb(1),sgb(2))} -function yXc(a,b){return new gud(b,njd(ajd(b.e),a,a),(Geb(),true))} -function fv(a){return new cnb((dk(a,lwe),dz(Bdb(Bdb(5,a),a/10|0))))} -function Wi(a){return fk(a.e.Rd().gc()*a.c.Rd().gc(),273,new kj(a))} -function u2b(a){return RD(anb(a,$C(xR,XAe,12,a.c.length,0,1)),2042)} -function COc(a){dOc();return !W0b(a)&&!(!W0b(a)&&a.c.i.c==a.d.i.c)} -function Y_c(a,b){R_c();return RD(mQb(b,(h_c(),W$c)),17).a>=a.gc()} -function q8b(a,b){w8b(b,a);y8b(a.d);y8b(RD(mQb(a,(yCc(),cBc)),214))} -function r8b(a,b){z8b(b,a);B8b(a.d);B8b(RD(mQb(a,(yCc(),cBc)),214))} -function $0b(a,b,c){!!a.d&&Ymb(a.d.e,a);a.d=b;!!a.d&&Qmb(a.d.e,c,a)} -function jPb(a,b,c){return c.f.c.length>0?yPb(a.a,b,c):yPb(a.b,b,c)} -function Uz(a,b,c){var d;d=Sz();try{return Rz(a,b,c)}finally{Vz(d)}} -function wDd(a,b){var c,d;c=qC(a,b);d=null;!!c&&(d=c.pe());return d} -function yDd(a,b){var c,d;c=qC(a,b);d=null;!!c&&(d=c.se());return d} -function xDd(a,b){var c,d;c=JB(a,b);d=null;!!c&&(d=c.se());return d} -function zDd(a,b){var c,d;c=qC(a,b);d=null;!!c&&(d=ADd(c));return d} -function rEd(a,b,c){var d;d=uDd(c);Do(a.g,d,b);Do(a.i,b,c);return b} -function UIc(a,b,c){this.d=new fJc(this);this.e=a;this.i=b;this.f=c} -function Mk(a,b,c,d){this.e=null;this.c=a;this.d=b;this.a=c;this.b=d} -function urc(a,b,c,d){nrc(this);this.c=a;this.e=b;this.f=c;this.b=d} -function MKd(a,b,c,d){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1} -function Vc(a,b,c,d){return ZD(c,59)?new Kg(a,b,c,d):new yg(a,b,c,d)} -function gr(a){if(ZD(a,16)){return RD(a,16).dc()}return !a.Kc().Ob()} -function Wo(a){if(a.e.g!=a.b){throw Adb(new Jrb)}return !!a.c&&a.d>0} -function evb(a){sFb(a.b!=a.d.c);a.c=a.b;a.b=a.b.a;++a.a;return a.c.c} -function imb(a,b){uFb(b);bD(a.a,a.c,b);a.c=a.c+1&a.a.length-1;mmb(a)} -function hmb(a,b){uFb(b);a.b=a.b-1&a.a.length-1;bD(a.a,a.b,b);mmb(a)} -function _je(a){var b;b=a.Gh();this.a=ZD(b,71)?RD(b,71).Ii():b.Kc()} -function px(a){return new Swb(Dob(RD(a.a.md(),16).gc(),a.a.ld()),16)} -function Abd(){Abd=geb;zbd=ss((sbd(),cD(WC(M1,1),jwe,489,0,[rbd])))} -function Jbd(){Jbd=geb;Ibd=ss((Cbd(),cD(WC(N1,1),jwe,558,0,[Bbd])))} -function idd(){idd=geb;hdd=ss((_cd(),cD(WC(V1,1),jwe,539,0,[$cd])))} -function X$b(){U$b();return cD(WC(CQ,1),jwe,389,0,[T$b,R$b,Q$b,S$b])} -function hAb(){cAb();return cD(WC(AL,1),jwe,303,0,[$zb,_zb,aAb,bAb])} -function LPb(){IPb();return cD(WC(DO,1),jwe,332,0,[FPb,EPb,GPb,HPb])} -function LRb(){IRb();return cD(WC(WO,1),jwe,406,0,[FRb,ERb,GRb,HRb])} -function pOb(){mOb();return cD(WC(hO,1),jwe,417,0,[lOb,iOb,jOb,kOb])} -function uZb(){nZb();return cD(WC(lQ,1),jwe,416,0,[jZb,mZb,kZb,lZb])} -function hnc(){enc();return cD(WC(LV,1),jwe,421,0,[anc,bnc,cnc,dnc])} -function zec(){vec();return cD(WC(qT,1),jwe,371,0,[uec,sec,tec,rec])} -function BDc(){wDc();return cD(WC(tX,1),jwe,203,0,[uDc,vDc,tDc,sDc])} -function nEc(){kEc();return cD(WC(wX,1),jwe,284,0,[hEc,gEc,iEc,jEc])} -function Unc(a){var b;return a.j==(qpd(),npd)&&(b=Vnc(a),Csb(b,Xod))} -function qhc(a,b){var c;c=b.a;Y0b(c,b.c.d);Z0b(c,b.d.d);Cjd(c.a,a.n)} -function _5b(a,b){var c;c=RD(cub(a.b,b),67);!c&&(c=new Yub);return c} -function $jc(a){Wjc();if(ZD(a.g,154)){return RD(a.g,154)}return null} -function gRc(a){a.a=null;a.e=null;aFb(a.b.c,0);aFb(a.f.c,0);a.c=null} -function Ovc(){Ovc=geb;Mvc=new Pvc(Kye,0);Nvc=new Pvc('TOP_LEFT',1)} -function sNc(){sNc=geb;rNc=new tNc('UPPER',0);qNc=new tNc('LOWER',1)} -function nWc(a,b){return cjd(new rjd(b.e.a+b.f.a/2,b.e.b+b.f.b/2),a)} -function wqc(a,b){return RD(Lvb(JDb(RD(Qc(a.k,b),15).Oc(),lqc)),113)} -function xqc(a,b){return RD(Lvb(KDb(RD(Qc(a.k,b),15).Oc(),lqc)),113)} -function cWc(){YVc();return cD(WC(H$,1),jwe,405,0,[UVc,VVc,WVc,XVc])} -function v_c(){s_c();return cD(WC(J_,1),jwe,353,0,[r_c,p_c,q_c,o_c])} -function n5c(){j5c();return cD(WC(M0,1),jwe,354,0,[i5c,g5c,h5c,f5c])} -function Tpd(){Qpd();return cD(WC(H3,1),jwe,386,0,[Opd,Ppd,Npd,Mpd])} -function Tnd(){Pnd();return cD(WC(z3,1),jwe,290,0,[Ond,Lnd,Mnd,Nnd])} -function _md(){Ymd();return cD(WC(u3,1),jwe,223,0,[Xmd,Vmd,Umd,Wmd])} -function Jrd(){Grd();return cD(WC(R3,1),jwe,320,0,[Frd,Crd,Erd,Drd])} -function wtd(){ttd();return cD(WC(n4,1),jwe,415,0,[qtd,rtd,ptd,std])} -function GId(a){EId();return Ujb(DId,a)?RD(Wjb(DId,a),341).Qg():null} -function Avd(a,b,c){return b<0?Rvd(a,c):RD(c,69).wk().Bk(a,a.hi(),b)} -function sEd(a,b,c){var d;d=uDd(c);Do(a.j,d,b);Zjb(a.k,b,c);return b} -function qEd(a,b,c){var d;d=uDd(c);Do(a.d,d,b);Zjb(a.e,b,c);return b} -function DGd(a){var b,c;b=(bvd(),c=new rzd,c);!!a&&pzd(b,a);return b} -function WHd(a){var b;b=a.aj(a.i);a.i>0&&hib(a.g,0,b,0,a.i);return b} -function Led(a,b){var c;for(c=a.j.c.length;c<b;c++){Rmb(a.j,a.Ng())}} -function $Ec(a,b,c,d){var e;e=d[b.g][c.g];return Kfb(UD(mQb(a.a,e)))} -function QRd(a,b){PRd();var c;c=RD(Wjb(ORd,a),57);return !c||c.fk(b)} -function rKd(a){if(a.p!=1)throw Adb(new cgb);return Ydb(a.f)<<24>>24} -function AKd(a){if(a.p!=1)throw Adb(new cgb);return Ydb(a.k)<<24>>24} -function GKd(a){if(a.p!=7)throw Adb(new cgb);return Ydb(a.k)<<16>>16} -function xKd(a){if(a.p!=7)throw Adb(new cgb);return Ydb(a.f)<<16>>16} -function Wib(a,b){if(b.e==0||a.e==0){return Oib}return Ljb(),Mjb(a,b)} -function Nd(a,b){return dE(b)===dE(a)?'(this Map)':b==null?vve:jeb(b)} -function MFb(a,b,c){return Jfb(UD(Wd(qtb(a.f,b))),UD(Wd(qtb(a.f,c))))} -function wkc(a,b,c){var d;d=RD(Wjb(a.g,c),60);Rmb(a.a.c,new Ptd(b,d))} -function Slc(a,b,c){a.i=0;a.e=0;if(b==c){return}Rlc(a,b,c);Qlc(a,b,c)} -function rTc(a,b,c,d,e){var f;f=mTc(e,c,d);Rmb(b,TSc(e,f));vTc(a,e,b)} -function Jrc(a,b,c,d,e){this.i=a;this.a=b;this.e=c;this.j=d;this.f=e} -function iUb(a,b){VTb.call(this);this.a=a;this.b=b;Rmb(this.a.b,this)} -function rTb(a){this.b=new Tsb;this.c=new Tsb;this.d=new Tsb;this.a=a} -function Dx(a,b){var c;c=new cib;a.Gd(c);c.a+='..';b.Hd(c);return c.a} -function Fsd(a,b){var c;c=b;while(c){Zid(a,c.i,c.j);c=vCd(c)}return a} -function pEd(a,b,c){var d;d=uDd(c);Zjb(a.b,d,b);Zjb(a.c,b,c);return b} -function Kr(a){var b;b=0;while(a.Ob()){a.Pb();b=Bdb(b,1)}return dz(b)} -function oke(a,b){nke();var c;c=RD(a,69).vk();K6d(c,b);return c.xl(b)} -function tC(d,a,b){if(b){var c=b.oe();d.a[a]=c(b)}else{delete d.a[a]}} -function tB(a,b){var c;c=a.q.getHours();a.q.setFullYear(b+Owe);mB(a,c)} -function KSd(a,b){return RD(b==null?Wd(qtb(a.f,null)):Ktb(a.i,b),288)} -function hOc(a,b){return a==(r3b(),p3b)&&b==p3b?4:a==p3b||b==p3b?8:32} -function cge(a,b,c){return dge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)} -function jge(a,b,c){return kge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)} -function Qge(a,b,c){return Rge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)} -function jmb(a){if(a.b==a.c){return}a.a=$C(jJ,rve,1,8,5,1);a.b=0;a.c=0} -function Nsb(a){sFb(a.a<a.c.a.length);a.b=a.a;Lsb(a);return a.c.b[a.b]} -function tYd(a){if(!a.n){yYd(a);a.n=new h$d(a,o7,a);zYd(a)}return a.n} -function oFb(a){if(a<0){throw Adb(new Mgb('Negative array size: '+a))}} -function LB(d,a,b){if(b){var c=b.oe();b=c(b)}else{b=undefined}d.a[a]=b} -function ygc(a,b){sgc();var c;c=a.j.g-b.j.g;if(c!=0){return c}return 0} -function l_d(a,b){gib();String.fromCharCode(10);return WGd(xYd(a.a),b)} -function q_d(a,b){gib();String.fromCharCode(10);return WGd(xYd(a.a),b)} -function ajb(a,b){Pib();cjb.call(this,a,1,cD(WC(kE,1),Pwe,28,15,[b]))} -function Kte(a,b){Vse();Wse.call(this,a);this.a=b;this.c=-1;this.b=-1} -function L3d(a,b,c,d){KKd.call(this,1,c,d);J3d(this);this.c=a;this.b=b} -function M3d(a,b,c,d){LKd.call(this,1,c,d);J3d(this);this.c=a;this.b=b} -function lle(a,b,c,d,e,f,g){NKd.call(this,b,d,e,f,g);this.c=a;this.a=c} -function j7d(a,b,c){this.e=a;this.a=jJ;this.b=pje(b);this.c=b;this.d=c} -function Xo(a){this.e=a;this.c=this.e.a;this.b=this.e.g;this.d=this.e.i} -function Qtb(a){this.d=a;this.b=this.d.a.entries();this.a=this.b.next()} -function N9d(a){this.c=a;this.a=RD(WVd(a),156);this.b=this.a.jk().wi()} -function gub(){Tsb.call(this);_tb(this);this.d.b=this.d;this.d.a=this.d} -function Pub(a,b,c,d){var e;e=new svb;e.c=b;e.b=c;e.a=d;d.b=c.a=e;++a.b} -function USd(a,b){var c;return c=b!=null?Xjb(a,b):Wd(qtb(a.f,b)),fE(c)} -function dTd(a,b){var c;return c=b!=null?Xjb(a,b):Wd(qtb(a.f,b)),fE(c)} -function zDb(a,b){var c;return b.b.Kb(LDb(a,b.c.Xe(),(c=new OEb(b),c)))} -function Gnb(a,b){var c;oFb(b);return c=a.slice(0,b),c.length=b,dD(c,a)} -function Rqb(a,b){var c;for(c=0;c<b;++c){bD(a,c,new brb(RD(a[c],44)))}} -function Tib(a,b){var c;for(c=a.d-1;c>=0&&a.a[c]===b[c];c--);return c<0} -function Xx(a){var b;if(a){return new Kub(a)}b=new Iub;_q(b,a);return b} -function nmc(a,b){var c,d;d=false;do{c=qmc(a,b);d=d|c}while(c);return d} -function Vz(a){a&&aA(($z(),Zz));--Nz;if(a){if(Pz!=-1){Xz(Pz);Pz=-1}}} -function Pwb(a){Hwb();Mwb(this,Ydb(Cdb(Tdb(a,24),Pxe)),Ydb(Cdb(a,Pxe)))} -function IHb(){IHb=geb;HHb=ss((DHb(),cD(WC(uN,1),jwe,436,0,[CHb,BHb])))} -function QHb(){QHb=geb;PHb=ss((LHb(),cD(WC(vN,1),jwe,435,0,[JHb,KHb])))} -function YUb(){YUb=geb;XUb=ss((TUb(),cD(WC(BP,1),jwe,432,0,[RUb,SUb])))} -function U8b(){U8b=geb;T8b=ss((P8b(),cD(WC(vS,1),jwe,517,0,[O8b,N8b])))} -function Huc(){Huc=geb;Guc=ss((Cuc(),cD(WC(fX,1),jwe,487,0,[Buc,Auc])))} -function duc(){duc=geb;cuc=ss(($tc(),cD(WC(cX,1),jwe,428,0,[Ytc,Ztc])))} -function otc(){otc=geb;ntc=ss((jtc(),cD(WC($W,1),jwe,431,0,[htc,itc])))} -function xEc(){xEc=geb;wEc=ss((sEc(),cD(WC(xX,1),jwe,430,0,[qEc,rEc])))} -function xNc(){xNc=geb;wNc=ss((sNc(),cD(WC(MY,1),jwe,531,0,[rNc,qNc])))} -function BQc(){BQc=geb;AQc=ss((wQc(),cD(WC(FZ,1),jwe,523,0,[vQc,uQc])))} -function JQc(){JQc=geb;IQc=ss((EQc(),cD(WC(GZ,1),jwe,522,0,[CQc,DQc])))} -function kTc(){kTc=geb;jTc=ss((fTc(),cD(WC(b$,1),jwe,528,0,[eTc,dTc])))} -function Tvc(){Tvc=geb;Svc=ss((Ovc(),cD(WC(lX,1),jwe,429,0,[Mvc,Nvc])))} -function iVc(){iVc=geb;hVc=ss((dVc(),cD(WC(w$,1),jwe,464,0,[bVc,cVc])))} -function c4c(){c4c=geb;b4c=ss((Y3c(),cD(WC(H0,1),jwe,434,0,[W3c,X3c])))} -function F_c(){F_c=geb;E_c=ss((A_c(),cD(WC(K_,1),jwe,433,0,[z_c,y_c])))} -function F2c(){F2c=geb;E2c=ss((x2c(),cD(WC(s0,1),jwe,500,0,[v2c,w2c])))} -function H8c(){H8c=geb;G8c=ss((z8c(),cD(WC(l1,1),jwe,490,0,[x8c,y8c])))} -function J9c(){J9c=geb;I9c=ss((B9c(),cD(WC(t1,1),jwe,491,0,[z9c,A9c])))} -function Rbd(){Rbd=geb;Qbd=ss((Mbd(),cD(WC(O1,1),jwe,438,0,[Lbd,Kbd])))} -function tdd(){tdd=geb;sdd=ss((ldd(),cD(WC(W1,1),jwe,437,0,[kdd,jdd])))} -function Eqd(){Eqd=geb;Dqd=ss((uqd(),cD(WC(M3,1),jwe,347,0,[sqd,tqd])))} -function Imd(){Cmd();return cD(WC(s3,1),jwe,88,0,[Amd,zmd,ymd,xmd,Bmd])} -function xpd(){qpd();return cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])} -function LSd(a,b,c){return RD(b==null?rtb(a.f,null,c):Ltb(a.i,b,c),288)} -function L6b(a){return (a.k==(r3b(),p3b)||a.k==m3b)&&nQb(a,(Ywc(),cwc))} -function bUb(a){return !!a.c&&!!a.d?kUb(a.c)+'->'+kUb(a.d):'e_'+kFb(a)} -function xgb(a,b){var c,d;uFb(b);for(d=a.Kc();d.Ob();){c=d.Pb();b.Cd(c)}} -function jEd(a,b){var c;c=new uC;qDd(c,'x',b.a);qDd(c,'y',b.b);oDd(a,c)} -function mEd(a,b){var c;c=new uC;qDd(c,'x',b.a);qDd(c,'y',b.b);oDd(a,c)} -function Gsd(a,b){var c;c=b;while(c){Zid(a,-c.i,-c.j);c=vCd(c)}return a} -function ZLc(a,b){var c,d;c=b;d=0;while(c>0){d+=a.a[c];c-=c&-c}return d} -function $mb(a,b,c){var d;d=(tFb(b,a.c.length),a.c[b]);a.c[b]=c;return d} -function uIc(a,b,c){a.a.c.length=0;yIc(a,b,c);a.a.c.length==0||rIc(a,b)} -function wo(a){a.i=0;Mnb(a.b,null);Mnb(a.c,null);a.a=null;a.e=null;++a.g} -function gBb(){gBb=geb;dBb=true;bBb=false;cBb=false;fBb=false;eBb=false} -function oBb(a){gBb();if(dBb){return}this.c=a;this.e=true;this.a=new bnb} -function kDb(a,b){this.c=0;this.b=b;txb.call(this,a,17493);this.a=this.c} -function S_b(a){P_b();A$b(this);this.a=new Yub;Q_b(this,a);Mub(this.a,a)} -function m_b(){Pmb(this);this.b=new rjd(oxe,oxe);this.a=new rjd(pxe,pxe)} -function z8c(){z8c=geb;x8c=new B8c(CBe,0);y8c=new B8c('TARGET_WIDTH',1)} -function yDb(a,b){return (MCb(a),QDb(new SDb(a,new hEb(b,a.a)))).Bd(wDb)} -function vXb(){sXb();return cD(WC(UP,1),jwe,367,0,[nXb,oXb,pXb,qXb,rXb])} -function Fnc(){Bnc();return cD(WC(TV,1),jwe,375,0,[xnc,znc,Anc,ync,wnc])} -function Vtc(){Ptc();return cD(WC(bX,1),jwe,348,0,[Ltc,Ktc,Ntc,Otc,Mtc])} -function PDc(){JDc();return cD(WC(uX,1),jwe,323,0,[IDc,FDc,GDc,EDc,HDc])} -function fxc(){cxc();return cD(WC(mX,1),jwe,171,0,[bxc,Zwc,$wc,_wc,axc])} -function k3c(){g3c();return cD(WC(x0,1),jwe,368,0,[e3c,b3c,f3c,c3c,d3c])} -function vad(){sad();return cD(WC(x1,1),jwe,373,0,[oad,nad,qad,pad,rad])} -function $bd(){Xbd();return cD(WC(P1,1),jwe,324,0,[Sbd,Tbd,Wbd,Ubd,Vbd])} -function _hd(){Yhd();return cD(WC(d3,1),jwe,170,0,[Whd,Vhd,Thd,Xhd,Uhd])} -function sod(){pod();return cD(WC(B3,1),jwe,256,0,[mod,ood,kod,lod,nod])} -function Tz(b){Qz();return function(){return Uz(b,this,arguments);var a}} -function W0b(a){if(!a.c||!a.d){return false}return !!a.c.i&&a.c.i==a.d.i} -function Nfd(a,b){if(ZD(b,143)){return lhb(a.c,RD(b,143).c)}return false} -function yYd(a){if(!a.t){a.t=new w$d(a);VGd(new Cde(a),0,a.t)}return a.t} -function jNd(a){this.b=a;dMd.call(this,a);this.a=RD(Ywd(this.b.a,4),129)} -function sNd(a){this.b=a;yMd.call(this,a);this.a=RD(Ywd(this.b.a,4),129)} -function Q3d(a,b,c,d,e){OKd.call(this,b,d,e);J3d(this);this.c=a;this.b=c} -function V3d(a,b,c,d,e){KKd.call(this,b,d,e);J3d(this);this.c=a;this.a=c} -function Z3d(a,b,c,d,e){LKd.call(this,b,d,e);J3d(this);this.c=a;this.a=c} -function g4d(a,b,c,d,e){OKd.call(this,b,d,e);J3d(this);this.c=a;this.a=c} -function ugd(a,b){var c;c=RD(cub(a.d,b),23);return c?c:RD(cub(a.e,b),23)} -function Blb(a,b){var c,d;c=b.ld();d=a.Fe(c);return !!d&&Fvb(d.e,b.md())} -function me(a,b){var c;c=b.ld();return new gp(c,a.e.pc(c,RD(b.md(),16)))} -function ptb(a,b){var c;c=a.a.get(b);return c==null?$C(jJ,rve,1,0,5,1):c} -function khb(a){var b;b=a.length;return lhb(sxe.substr(sxe.length-b,b),a)} -function hs(a){if(gs(a)){a.c=a.a;return a.a.Pb()}else{throw Adb(new Dvb)}} -function $ib(a,b){if(b==0||a.e==0){return a}return b>0?tjb(a,b):qjb(a,-b)} -function Zib(a,b){if(b==0||a.e==0){return a}return b>0?qjb(a,b):tjb(a,-b)} -function Deb(a){Beb.call(this,a==null?vve:jeb(a),ZD(a,82)?RD(a,82):null)} -function Y5d(a){var b;if(!a.c){b=a.r;ZD(b,90)&&(a.c=RD(b,29))}return a.c} -function s0b(a){var b;b=new a1b;kQb(b,a);pQb(b,(yCc(),RAc),null);return b} -function lec(a){var b,c;b=a.c.i;c=a.d.i;return b.k==(r3b(),m3b)&&c.k==m3b} -function fD(a){var b,c,d;b=a&dxe;c=a>>22&dxe;d=a<0?exe:0;return hD(b,c,d)} -function Ky(a){var b,c,d,e;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];ICb(b)}} -function Tc(a,b){var c,d;c=RD(Yv(a.c,b),16);if(c){d=c.gc();c.$b();a.d-=d}} -function Fvd(a,b,c){var d;return d=a.Ih(b),d>=0?a.Lh(d,c,true):Qvd(a,b,c)} -function AXc(a,b,c){return Qfb(cjd(jWc(a),ajd(b.b)),cjd(jWc(a),ajd(c.b)))} -function BXc(a,b,c){return Qfb(cjd(jWc(a),ajd(b.e)),cjd(jWc(a),ajd(c.e)))} -function Kad(a,b){return $wnd.Math.min(bjd(b.a,a.d.d.c),bjd(b.b,a.d.d.c))} -function LHd(a,b){a._i(a.i+1);MHd(a,a.i,a.Zi(a.i,b));a.Mi(a.i++,b);a.Ni()} -function OHd(a){var b,c;++a.j;b=a.g;c=a.i;a.g=null;a.i=0;a.Oi(c,b);a.Ni()} -function yke(a,b,c){var d;d=new zke(a.a);Ld(d,a.a.a);rtb(d.f,b,c);a.a.a=d} -function mKb(a,b,c,d){var e;for(e=0;e<jKb;e++){dKb(a.a[e][b.g],c,d[b.g])}} -function lKb(a,b,c,d){var e;for(e=0;e<iKb;e++){eKb(a.a[b.g][e],c,d[b.g])}} -function Qc(a,b){var c;c=RD(a.c.xc(b),16);!c&&(c=a.ic(b));return a.pc(b,c)} -function vm(a){var b;b=(Qb(a),a?new dnb(a):cv(a.Kc()));Eob(b);return Pm(b)} -function dv(a){var b,c;Qb(a);b=Zu(a.length);c=new cnb(b);zob(c,a);return c} -function Hjb(a,b,c,d){var e;e=$C(kE,Pwe,28,b,15,1);Ijb(e,a,b,c,d);return e} -function Sb(a,b){if(a<0||a>b){throw Adb(new veb(Jb(a,b,'index')))}return a} -function Xmb(a,b){var c;c=(tFb(b,a.c.length),a.c[b]);$Eb(a.c,b,1);return c} -function jhb(a,b){var c,d;c=(uFb(a),a);d=(uFb(b),b);return c==d?0:c<d?-1:1} -function Orb(a){var b;b=a.e+a.f;if(isNaN(b)&&Rfb(a.d)){return a.d}return b} -function zc(a){a.e=3;a.d=a.Yb();if(a.e!=2){a.e=0;return true}return false} -function Gyb(a,b){!a.a?(a.a=new dib(a.d)):Zhb(a.a,a.b);Whb(a.a,b);return a} -function _jb(a,b){return bE(b)?b==null?stb(a.f,null):Mtb(a.i,b):stb(a.f,b)} -function nEb(a,b){pxb.call(this,b.zd(),b.yd()&-6);uFb(a);this.a=a;this.b=b} -function tEb(a,b){txb.call(this,b.zd(),b.yd()&-6);uFb(a);this.a=a;this.b=b} -function zEb(a,b){xxb.call(this,b.zd(),b.yd()&-6);uFb(a);this.a=a;this.b=b} -function M7d(a,b,c){t7d.call(this,c);this.b=a;this.c=b;this.d=(a8d(),$7d)} -function OKd(a,b,c){this.d=a;this.k=b?1:0;this.f=c?1:0;this.o=-1;this.p=0} -function l4b(a){this.c=a;this.a=new Anb(this.c.a);this.b=new Anb(this.c.b)} -function gUb(){this.e=new bnb;this.c=new bnb;this.d=new bnb;this.b=new bnb} -function DIb(){this.g=new GIb;this.b=new GIb;this.a=new bnb;this.k=new bnb} -function I_b(){this.a=new J$b;this.b=new N$b;this.d=new Z_b;this.e=new V_b} -function knc(a,b,c){this.a=a;this.c=b;this.d=c;Rmb(b.e,this);Rmb(c.b,this)} -function sIc(a,b,c){var d,e;d=0;for(e=0;e<b.length;e++){d+=a.tg(b[e],d,c)}} -function nMc(a,b){var c;c=tMc(a,b);a.b=new _Lc(c.c.length);return mMc(a,c)} -function pB(a,b){var c;c=a.q.getHours()+(b/60|0);a.q.setMinutes(b);mB(a,c)} -function _Wc(a){var b;b=a.b;if(b.b==0){return null}return RD(ju(b,0),65).b} -function Src(a){if(a.a){if(a.e){return Src(a.e)}}else{return a}return null} -function mIc(a,b){if(a.p<b.p){return 1}else if(a.p>b.p){return -1}return 0} -function hXd(a){var b;if(!a.a){b=a.r;ZD(b,156)&&(a.a=RD(b,156))}return a.a} -function iOd(a,b,c){var d;++a.e;--a.f;d=RD(a.d[b].gd(c),136);return d.md()} -function fd(a){var b,c;b=a.ld();c=RD(a.md(),16);return gk(c.Nc(),new jh(b))} -function oae(a,b){if(Ujb(a.a,b)){_jb(a.a,b);return true}else{return false}} -function Ui(a,b,c){Pb(b,a.e.Rd().gc());Pb(c,a.c.Rd().gc());return a.a[b][c]} -function _Uc(a,b,c){this.a=a;this.b=b;this.c=c;Rmb(a.t,this);Rmb(b.i,this)} -function lg(a,b,c,d){this.f=a;this.e=b;this.d=c;this.b=d;this.c=!d?null:d.d} -function YWc(){this.b=new Yub;this.a=new Yub;this.b=new Yub;this.a=new Yub} -function ree(){ree=geb;var a,b;pee=(jTd(),b=new k1d,b);qee=(a=new mXd,a)} -function UCb(a){var b;MCb(a);b=new $Cb(a,a.a.e,a.a.d|4);return new WCb(a,b)} -function ADb(a){var b;LCb(a);b=0;while(a.a.Bd(new MEb)){b=Bdb(b,1)}return b} -function zxb(a,b){uFb(b);if(a.c<a.d){a.Se(b,a.c++);return true}return false} -function cnb(a){Pmb(this);mFb(a>=0,'Initial capacity must not be negative')} -function rid(){rid=geb;qid=new jGd('org.eclipse.elk.labels.labelManager')} -function iec(){iec=geb;hec=new kGd('separateLayerConnections',(vec(),uec))} -function fTc(){fTc=geb;eTc=new gTc('REGULAR',0);dTc=new gTc('CRITICAL',1)} -function Mbd(){Mbd=geb;Lbd=new Nbd('FIXED',0);Kbd=new Nbd('CENTER_NODE',1)} -function jtc(){jtc=geb;htc=new ktc('QUADRATIC',0);itc=new ktc('SCANLINE',1)} -function Atc(){Atc=geb;ztc=ss((stc(),cD(WC(_W,1),jwe,322,0,[qtc,ptc,rtc])))} -function Jtc(){Jtc=geb;Itc=ss((Etc(),cD(WC(aX,1),jwe,351,0,[Btc,Dtc,Ctc])))} -function muc(){muc=geb;luc=ss((huc(),cD(WC(dX,1),jwe,459,0,[fuc,euc,guc])))} -function ooc(){ooc=geb;noc=ss((joc(),cD(WC(UV,1),jwe,372,0,[ioc,hoc,goc])))} -function Lvc(){Lvc=geb;Kvc=ss((Gvc(),cD(WC(kX,1),jwe,311,0,[Evc,Fvc,Dvc])))} -function Cvc(){Cvc=geb;Bvc=ss((xvc(),cD(WC(jX,1),jwe,298,0,[vvc,wvc,uvc])))} -function rDc(){rDc=geb;qDc=ss((lDc(),cD(WC(sX,1),jwe,390,0,[iDc,jDc,kDc])))} -function PEc(){PEc=geb;OEc=ss((KEc(),cD(WC(zX,1),jwe,387,0,[HEc,IEc,JEc])))} -function YEc(){YEc=geb;XEc=ss((TEc(),cD(WC(AX,1),jwe,349,0,[SEc,QEc,REc])))} -function GEc(){GEc=geb;FEc=ss((BEc(),cD(WC(yX,1),jwe,462,0,[AEc,yEc,zEc])))} -function zFc(){zFc=geb;yFc=ss((uFc(),cD(WC(DX,1),jwe,352,0,[tFc,rFc,sFc])))} -function qFc(){qFc=geb;pFc=ss((lFc(),cD(WC(CX,1),jwe,350,0,[iFc,jFc,kFc])))} -function IFc(){IFc=geb;HFc=ss((DFc(),cD(WC(EX,1),jwe,388,0,[BFc,CFc,AFc])))} -function QZc(){QZc=geb;PZc=ss((LZc(),cD(WC(F_,1),jwe,392,0,[KZc,JZc,IZc])))} -function m4c(){m4c=geb;l4c=ss((g4c(),cD(WC(I0,1),jwe,393,0,[d4c,e4c,f4c])))} -function z5c(){z5c=geb;y5c=ss((t5c(),cD(WC(N0,1),jwe,299,0,[r5c,s5c,q5c])))} -function k6c(){k6c=geb;j6c=ss((f6c(),cD(WC(V0,1),jwe,445,0,[c6c,d6c,e6c])))} -function F6c(){F6c=geb;E6c=ss((z6c(),cD(WC(Z0,1),jwe,455,0,[w6c,y6c,x6c])))} -function e7c(){e7c=geb;d7c=ss((_6c(),cD(WC(a1,1),jwe,394,0,[Z6c,$6c,Y6c])))} -function j9c(){j9c=geb;i9c=ss((b9c(),cD(WC(o1,1),jwe,439,0,[$8c,a9c,_8c])))} -function WKc(){WKc=geb;VKc=ss((RKc(),cD(WC(nY,1),jwe,463,0,[OKc,PKc,QKc])))} -function JKb(){JKb=geb;IKb=ss((EKb(),cD(WC(MN,1),jwe,470,0,[CKb,BKb,DKb])))} -function cKb(){cKb=geb;bKb=ss((ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])))} -function ALb(){ALb=geb;zLb=ss((vLb(),cD(WC(TN,1),jwe,471,0,[uLb,tLb,sLb])))} -function CBb(){CBb=geb;BBb=ss((xBb(),cD(WC(QL,1),jwe,108,0,[uBb,vBb,wBb])))} -function FWb(){FWb=geb;EWb=ss((AWb(),cD(WC(JP,1),jwe,391,0,[yWb,xWb,zWb])))} -function Knd(){Knd=geb;Jnd=ss((Fnd(),cD(WC(y3,1),jwe,346,0,[Dnd,Cnd,End])))} -function lbd(){lbd=geb;kbd=ss((gbd(),cD(WC(I1,1),jwe,444,0,[dbd,ebd,fbd])))} -function Tmd(){Tmd=geb;Smd=ss((Omd(),cD(WC(t3,1),jwe,278,0,[Lmd,Mmd,Nmd])))} -function rqd(){rqd=geb;qqd=ss((mqd(),cD(WC(J3,1),jwe,280,0,[kqd,jqd,lqd])))} -function Hxd(a,b){return !a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),QNd(a.o,b)} -function HMb(a,b){var c;if(a.C){c=RD(Vrb(a.b,b),127).n;c.d=a.C.d;c.a=a.C.a}} -function F8b(a){var b,c,d,e;e=a.d;b=a.a;c=a.b;d=a.c;a.d=c;a.a=d;a.b=e;a.c=b} -function cOd(a){!a.g&&(a.g=new hQd);!a.g.b&&(a.g.b=new ePd(a));return a.g.b} -function dOd(a){!a.g&&(a.g=new hQd);!a.g.c&&(a.g.c=new IPd(a));return a.g.c} -function lOd(a){!a.g&&(a.g=new hQd);!a.g.d&&(a.g.d=new kPd(a));return a.g.d} -function YNd(a){!a.g&&(a.g=new hQd);!a.g.a&&(a.g.a=new qPd(a));return a.g.a} -function B9d(a,b,c,d){!!c&&(d=c.Rh(b,BYd(c.Dh(),a.c.uk()),null,d));return d} -function C9d(a,b,c,d){!!c&&(d=c.Th(b,BYd(c.Dh(),a.c.uk()),null,d));return d} -function Cjb(a,b,c,d){var e;e=$C(kE,Pwe,28,b+1,15,1);Djb(e,a,b,c,d);return e} -function $C(a,b,c,d,e,f){var g;g=_C(e,d);e!=10&&cD(WC(a,f),b,c,e,g);return g} -function $fe(a,b,c){var d,e;e=new Phe(b,a);for(d=0;d<c;++d){Dhe(e)}return e} -function $Gd(a,b,c){var d,e;if(c!=null){for(d=0;d<b;++d){e=c[d];a.Qi(d,e)}}} -function Yyb(a,b){var c;c=new Gzb;c.c=true;c.d=b.md();return Zyb(a,b.ld(),c)} -function rB(a,b){var c;c=a.q.getHours()+(b/3600|0);a.q.setSeconds(b);mB(a,c)} -function Ct(a,b){var c,d;c=b;d=Hob(cv(new Nu(a,c)));Ar(new Nu(a,c));return d} -function Kdc(a,b){b.Ug('Label management',1);fE(mQb(a,(rid(),qid)));b.Vg()} -function wge(a,b,c,d){vge(a,b,c,kge(a,b,d,ZD(b,102)&&(RD(b,19).Bb&txe)!=0))} -function BQb(a,b,c){RD(a.b,68);RD(a.b,68);RD(a.b,68);Umb(a.a,new KQb(c,b,a))} -function AFb(a,b,c){if(a<0||b>c||b<a){throw Adb(new eib(_xe+a+bye+b+Qxe+c))}} -function NCb(a){if(!a){this.c=null;this.b=new bnb}else{this.c=a;this.b=null}} -function Fzb(a,b){xlb.call(this,a,b);this.a=$C(vL,Zve,447,2,0,1);this.b=true} -function hub(a){ckb.call(this,a,0);_tb(this);this.d.b=this.d;this.d.a=this.d} -function wtb(a){this.e=a;this.b=this.e.a.entries();this.a=$C(jJ,rve,1,0,5,1)} -function _Fc(){_Fc=geb;$Fc=nfd(pfd(new ufd,(sXb(),nXb),(hcc(),Ebc)),rXb,$bc)} -function xuc(){tuc();return cD(WC(eX,1),jwe,283,0,[ouc,nuc,quc,puc,suc,ruc])} -function Ruc(){Ouc();return cD(WC(gX,1),jwe,281,0,[Luc,Kuc,Nuc,Juc,Muc,Iuc])} -function bvc(){$uc();return cD(WC(hX,1),jwe,282,0,[Yuc,Vuc,Zuc,Xuc,Wuc,Uuc])} -function etc(){btc();return cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc])} -function u3b(){r3b();return cD(WC(hR,1),jwe,273,0,[p3b,o3b,m3b,q3b,n3b,l3b])} -function Uod(){Pod();return cD(WC(D3,1),jwe,279,0,[Nod,Lod,Mod,Kod,Jod,Ood])} -function God(){Bod();return cD(WC(C3,1),jwe,101,0,[Aod,zod,yod,vod,xod,wod])} -function lnd(){ind();return cD(WC(v3,1),jwe,321,0,[gnd,end,hnd,cnd,fnd,dnd])} -function Ujd(){Rjd();return cD(WC(n3,1),jwe,255,0,[Ljd,Ojd,Pjd,Qjd,Mjd,Njd])} -function xkd(){ukd();return cD(WC(q3,1),jwe,297,0,[tkd,skd,rkd,pkd,okd,qkd])} -function K3d(a){var b;if(!a.a&&a.b!=-1){b=a.c.Dh();a.a=vYd(b,a.b)}return a.a} -function WGd(a,b){if(a.Si()&&a.Hc(b)){return false}else{a.Hi(b);return true}} -function RKb(a,b){Ivb(b,'Horizontal alignment cannot be null');a.b=b;return a} -function ite(a,b,c){Vse();var d;d=hte(a,b);c&&!!d&&kte(a)&&(d=null);return d} -function ZKc(a,b,c){var d;d=a.b[c.c.p][c.p];d.b+=b.b;d.c+=b.c;d.a+=b.a;++d.a} -function Umc(a,b,c){var d;a.d[b.g]=c;d=a.g.c;d[b.g]=$wnd.Math.max(d[b.g],c+1)} -function bjd(a,b){var c,d;c=a.a-b.a;d=a.b-b.b;return $wnd.Math.sqrt(c*c+d*d)} -function v$b(a,b){var c,d;for(d=b.Kc();d.Ob();){c=RD(d.Pb(),36);u$b(a,c,0,0)}} -function x$b(a,b,c){var d,e;for(e=a.Kc();e.Ob();){d=RD(e.Pb(),36);w$b(d,b,c)}} -function G0c(a){var b,c;for(c=Sub(a.a,0);c.b!=c.d.c;){b=RD(evb(c),65);H0c(b)}} -function nnc(a,b){bub(a.e,b)||dub(a.e,b,new tnc(b));return RD(cub(a.e,b),113)} -function tBb(a,b,c,d){uFb(a);uFb(b);uFb(c);uFb(d);return new DBb(a,b,new NAb)} -function DVd(a,b,c,d){this.ak();this.a=b;this.b=a;this.c=new wje(this,b,c,d)} -function O3d(a,b,c,d,e,f){MKd.call(this,b,d,e,f);J3d(this);this.c=a;this.b=c} -function c4d(a,b,c,d,e,f){MKd.call(this,b,d,e,f);J3d(this);this.c=a;this.a=c} -function Q9c(a,b){var c,d,e;e=a.r;d=a.d;c=S9c(a,b,true);return c.b!=e||c.a!=d} -function Vee(a,b,c){var d,e;e=(d=N5d(a.b,b),d);return !e?null:tfe(Pee(a,e),c)} -function _Dd(a,b,c){var d,e,f;d=qC(a,c);e=null;!!d&&(e=ADd(d));f=e;tEd(b,c,f)} -function aEd(a,b,c){var d,e,f;d=qC(a,c);e=null;!!d&&(e=ADd(d));f=e;tEd(b,c,f)} -function Evd(a,b){var c;return c=a.Ih(b),c>=0?a.Lh(c,true,true):Qvd(a,b,true)} -function gMc(a,b,c){var d;d=qMc(a,b,c);a.b=new _Lc(d.c.length);return iMc(a,d)} -function Pue(a){if(a.b<=0)throw Adb(new Dvb);--a.b;a.a-=a.c.c;return sgb(a.a)} -function PGd(a){var b;if(!a.a){throw Adb(new Evb)}b=a.a;a.a=vCd(a.a);return b} -function WDb(a){while(!a.a){if(!yEb(a.c,new $Db(a))){return false}}return true} -function Nr(a){var b;Qb(a);if(ZD(a,204)){b=RD(a,204);return b}return new Or(a)} -function Cfd(a){Afd();RD(a.of((umd(),Lld)),181).Fc((Pod(),Mod));a.qf(Kld,null)} -function Afd(){Afd=geb;xfd=new Gfd;zfd=new Ifd;yfd=yn((umd(),Kld),xfd,pld,zfd)} -function Y3c(){Y3c=geb;W3c=new $3c('LEAF_NUMBER',0);X3c=new $3c('NODE_SIZE',1)} -function YLc(a){a.a=$C(kE,Pwe,28,a.b+1,15,1);a.c=$C(kE,Pwe,28,a.b,15,1);a.d=0} -function OZb(a,b){if(a.a.Ne(b.d,a.b)>0){Rmb(a.c,new fZb(b.c,b.d,a.d));a.b=b.d}} -function NHd(a,b){if(a.g==null||b>=a.i)throw Adb(new yNd(b,a.i));return a.g[b]} -function P_d(a,b,c){gHd(a,c);if(c!=null&&!a.fk(c)){throw Adb(new yeb)}return c} -function dD(a,b){XC(b)!=10&&cD(rb(b),b.Sm,b.__elementTypeId$,XC(b),a);return a} -function Wnb(a,b,c,d){var e;d=(urb(),!d?rrb:d);e=a.slice(b,c);Xnb(e,a,b,c,-b,d)} -function zvd(a,b,c,d,e){return b<0?Qvd(a,c,d):RD(c,69).wk().yk(a,a.hi(),b,d,e)} -function J9b(a,b){return Qfb(Kfb(UD(mQb(a,(Ywc(),Jwc)))),Kfb(UD(mQb(b,Jwc))))} -function qAb(){qAb=geb;pAb=ss((cAb(),cD(WC(AL,1),jwe,303,0,[$zb,_zb,aAb,bAb])))} -function cAb(){cAb=geb;$zb=new dAb('All',0);_zb=new iAb;aAb=new kAb;bAb=new nAb} -function EKb(){EKb=geb;CKb=new FKb(Nye,0);BKb=new FKb(Kye,1);DKb=new FKb(Oye,2)} -function Zme(){Zme=geb;qAd();Wme=oxe;Vme=pxe;Yme=new Tfb(oxe);Xme=new Tfb(pxe)} -function rOb(){rOb=geb;qOb=ss((mOb(),cD(WC(hO,1),jwe,417,0,[lOb,iOb,jOb,kOb])))} -function NRb(){NRb=geb;MRb=ss((IRb(),cD(WC(WO,1),jwe,406,0,[FRb,ERb,GRb,HRb])))} -function NPb(){NPb=geb;MPb=ss((IPb(),cD(WC(DO,1),jwe,332,0,[FPb,EPb,GPb,HPb])))} -function Z$b(){Z$b=geb;Y$b=ss((U$b(),cD(WC(CQ,1),jwe,389,0,[T$b,R$b,Q$b,S$b])))} -function wZb(){wZb=geb;vZb=ss((nZb(),cD(WC(lQ,1),jwe,416,0,[jZb,mZb,kZb,lZb])))} -function jnc(){jnc=geb;inc=ss((enc(),cD(WC(LV,1),jwe,421,0,[anc,bnc,cnc,dnc])))} -function Bec(){Bec=geb;Aec=ss((vec(),cD(WC(qT,1),jwe,371,0,[uec,sec,tec,rec])))} -function DDc(){DDc=geb;CDc=ss((wDc(),cD(WC(tX,1),jwe,203,0,[uDc,vDc,tDc,sDc])))} -function pEc(){pEc=geb;oEc=ss((kEc(),cD(WC(wX,1),jwe,284,0,[hEc,gEc,iEc,jEc])))} -function Cuc(){Cuc=geb;Buc=new Duc(LAe,0);Auc=new Duc('IMPROVE_STRAIGHTNESS',1)} -function _i(a,b){var c,d;d=b/a.c.Rd().gc()|0;c=b%a.c.Rd().gc();return Ui(a,d,c)} -function iZd(a){var b;if(a.nl()){for(b=a.i-1;b>=0;--b){QHd(a,b)}}return WHd(a)} -function Nyb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[0]){c=b}return c} -function Oyb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[1]){c=b}return c} -function Hae(a){if(ZD(a,180)){return ''+RD(a,180).a}return a==null?null:jeb(a)} -function Iae(a){if(ZD(a,180)){return ''+RD(a,180).a}return a==null?null:jeb(a)} -function eGb(a,b){if(b.a){throw Adb(new yz(jye))}Ysb(a.a,b);b.a=a;!a.j&&(a.j=b)} -function hEb(a,b){xxb.call(this,b.zd(),b.yd()&-16449);uFb(a);this.a=a;this.c=b} -function zXc(a,b){return new gud(b,Zid(ajd(b.e),b.f.a+a,b.f.b+a),(Geb(),false))} -function EMc(a,b){dMc();return Rmb(a,new Ptd(b,sgb(b.e.c.length+b.g.c.length)))} -function GMc(a,b){dMc();return Rmb(a,new Ptd(b,sgb(b.e.c.length+b.g.c.length)))} -function p5c(){p5c=geb;o5c=ss((j5c(),cD(WC(M0,1),jwe,354,0,[i5c,g5c,h5c,f5c])))} -function x_c(){x_c=geb;w_c=ss((s_c(),cD(WC(J_,1),jwe,353,0,[r_c,p_c,q_c,o_c])))} -function eWc(){eWc=geb;dWc=ss((YVc(),cD(WC(H$,1),jwe,405,0,[UVc,VVc,WVc,XVc])))} -function bnd(){bnd=geb;and=ss((Ymd(),cD(WC(u3,1),jwe,223,0,[Xmd,Vmd,Umd,Wmd])))} -function Vnd(){Vnd=geb;Und=ss((Pnd(),cD(WC(z3,1),jwe,290,0,[Ond,Lnd,Mnd,Nnd])))} -function Vpd(){Vpd=geb;Upd=ss((Qpd(),cD(WC(H3,1),jwe,386,0,[Opd,Ppd,Npd,Mpd])))} -function Lrd(){Lrd=geb;Krd=ss((Grd(),cD(WC(R3,1),jwe,320,0,[Frd,Crd,Erd,Drd])))} -function ytd(){ytd=geb;xtd=ss((ttd(),cD(WC(n4,1),jwe,415,0,[qtd,rtd,ptd,std])))} -function b9c(){b9c=geb;$8c=new d9c(iFe,0);a9c=new d9c(mEe,1);_8c=new d9c(LAe,2)} -function sBb(a,b,c,d,e){uFb(a);uFb(b);uFb(c);uFb(d);uFb(e);return new DBb(a,b,d)} -function fub(a,b){var c;c=RD(_jb(a.e,b),400);if(c){rub(c);return c.e}return null} -function Ymb(a,b){var c;c=Wmb(a,b,0);if(c==-1){return false}Xmb(a,c);return true} -function LDb(a,b,c){var d;LCb(a);d=new IEb;d.a=b;a.a.Nb(new QEb(d,c));return d.a} -function VCb(a){var b;LCb(a);b=$C(iE,vxe,28,0,15,1);ixb(a.a,new dDb(b));return b} -function yc(a){var b;if(!xc(a)){throw Adb(new Dvb)}a.e=1;b=a.d;a.d=null;return b} -function Odb(a){var b;if(Kdb(a)){b=0-a;if(!isNaN(b)){return b}}return Edb(xD(a))} -function Wmb(a,b,c){for(;c<a.c.length;++c){if(Fvb(b,a.c[c])){return c}}return -1} -function Gmc(a){var b,c;c=RD(Vmb(a.j,0),12);b=RD(mQb(c,(Ywc(),Awc)),12);return b} -function Nu(a,b){var c;this.f=a;this.b=b;c=RD(Wjb(a.b,b),260);this.c=!c?null:c.b} -function Ckc(){lkc();this.b=new Tsb;this.f=new Tsb;this.g=new Tsb;this.e=new Tsb} -function RSd(a){ez(this);this.g=!a?null:lz(a,a.ie());this.f=a;gz(this);this.je()} -function pKd(a){var b;b=a.jj();b!=null&&a.d!=-1&&RD(b,94).xh(a);!!a.i&&a.i.oj()} -function asc(a){var b;for(b=a.p+1;b<a.c.a.c.length;++b){--RD(Vmb(a.c.a,b),10).p}} -function ukb(a){yFb(!!a.c);rFb(a.f.g,a.d);a.c.Qb();a.c=null;a.b=skb(a);a.d=a.f.g} -function o4d(a){if(!a.b){a.b=new s5d(a,o7,a);!a.a&&(a.a=new F4d(a,a))}return a.b} -function Pee(a,b){var c,d;c=RD(b,690);d=c.xi();!d&&c.Ai(d=new wfe(a,b));return d} -function Qee(a,b){var c,d;c=RD(b,692);d=c.$k();!d&&c.cl(d=new Jfe(a,b));return d} -function _jc(a,b){Wjc();var c,d;c=$jc(a);d=$jc(b);return !!c&&!!d&&!Aob(c.k,d.k)} -function WFb(a,b){return Fvb(b,Vmb(a.f,0))||Fvb(b,Vmb(a.f,1))||Fvb(b,Vmb(a.f,2))} -function Med(a,b){if(b<0){throw Adb(new veb(zGe+b))}Led(a,b+1);return Vmb(a.j,b)} -function Ob(a,b,c,d){if(!a){throw Adb(new agb(hc(b,cD(WC(jJ,1),rve,1,5,[c,d]))))}} -function P3d(a,b,c,d,e,f,g){NKd.call(this,b,d,e,f,g);J3d(this);this.c=a;this.b=c} -function UA(a,b,c){var d,e;d=10;for(e=0;e<c-1;e++){b<d&&(a.a+='0',a);d*=10}a.a+=b} -function Ahb(a){var b,c;c=a.length;b=$C(hE,zwe,28,c,15,1);nhb(a,0,c,b,0);return b} -function $eb(a){Zeb();var b,c;b=a+128;c=Yeb[b];!c&&(c=Yeb[b]=new Seb(a));return c} -function Cub(a){rFb(a.d.a.e.g,a.b);sFb(a.c!=a.d.a.d);a.a=a.c;a.c=a.c.a;return a.a} -function mDc(a){switch(a.g){case 0:return lve;case 1:return -1;default:return 0;}} -function ED(a){if(uD(a,(MD(),LD))<0){return -qD(xD(a))}return a.l+a.m*gxe+a.h*hxe} -function etd(a){(!this.q?(yob(),yob(),wob):this.q).Ac(!a.q?(yob(),yob(),wob):a.q)} -function Eud(a,b){Cod(RD(RD(a.f,27).of((umd(),Hld)),101))&&lQd(wCd(RD(a.f,27)),b)} -function Gvd(a,b){var c;c=BYd(a.d,b);return c>=0?Dvd(a,c,true,true):Qvd(a,b,true)} -function Vwd(a){var b;b=SD(Ywd(a,32));if(b==null){Wwd(a);b=SD(Ywd(a,32))}return b} -function Yvd(a){var b;if(!a.Oh()){b=AYd(a.Dh())-a.ji();a.$h().Mk(b)}return a.zh()} -function zQb(a,b){yQb=new kRb;wQb=b;xQb=a;RD(xQb.b,68);BQb(xQb,yQb,null);AQb(xQb)} -function AWb(){AWb=geb;yWb=new BWb('XY',0);xWb=new BWb('X',1);zWb=new BWb('Y',2)} -function vLb(){vLb=geb;uLb=new wLb('TOP',0);tLb=new wLb(Kye,1);sLb=new wLb(Qye,2)} -function Gvc(){Gvc=geb;Evc=new Hvc(LAe,0);Fvc=new Hvc('TOP',1);Dvc=new Hvc(Qye,2)} -function sEc(){sEc=geb;qEc=new tEc('INPUT_ORDER',0);rEc=new tEc('PORT_DEGREE',1)} -function MD(){MD=geb;ID=hD(dxe,dxe,524287);JD=hD(0,0,fxe);KD=fD(1);fD(2);LD=fD(0)} -function wWd(a){var b;if(a.d!=a.r){b=WVd(a);a.e=!!b&&b.lk()==aKe;a.d=b}return a.e} -function UHd(a,b,c){var d;d=a.g[b];MHd(a,b,a.Zi(b,c));a.Ri(b,c,d);a.Ni();return d} -function dHd(a,b){var c;c=a.dd(b);if(c>=0){a.gd(c);return true}else{return false}} -function xr(a,b){var c;Qb(a);Qb(b);c=false;while(b.Ob()){c=c|a.Fc(b.Pb())}return c} -function cub(a,b){var c;c=RD(Wjb(a.e,b),400);if(c){eub(a,c);return c.e}return null} -function iB(a){var b,c;b=a/60|0;c=a%60;if(c==0){return ''+b}return ''+b+':'+(''+c)} -function JB(d,a){var b=d.a[a];var c=(HC(),GC)[typeof b];return c?c(b):NC(typeof b)} -function EDb(a,b){var c,d;MCb(a);d=new zEb(b,a.a);c=new YDb(d);return new SDb(a,c)} -function mwb(a){var b;b=a.b.c.length==0?null:Vmb(a.b,0);b!=null&&owb(a,0);return b} -function ukc(a,b){var c,d,e;e=b.c.i;c=RD(Wjb(a.f,e),60);d=c.d.c-c.e.c;Bjd(b.a,d,0)} -function XLc(a,b){var c;++a.d;++a.c[b];c=b+1;while(c<a.a.length){++a.a[c];c+=c&-c}} -function Ute(a,b,c,d){Vse();Wse.call(this,26);this.c=a;this.a=b;this.d=c;this.b=d} -function KA(a,b){while(b[0]<a.length&&qhb(' \t\r\n',Fhb(ihb(a,b[0])))>=0){++b[0]}} -function eEd(a,b){Dyd(a,b==null||Rfb((uFb(b),b))||isNaN((uFb(b),b))?0:(uFb(b),b))} -function fEd(a,b){Eyd(a,b==null||Rfb((uFb(b),b))||isNaN((uFb(b),b))?0:(uFb(b),b))} -function gEd(a,b){Cyd(a,b==null||Rfb((uFb(b),b))||isNaN((uFb(b),b))?0:(uFb(b),b))} -function hEd(a,b){Ayd(a,b==null||Rfb((uFb(b),b))||isNaN((uFb(b),b))?0:(uFb(b),b))} -function oWc(a,b,c){return cjd(new rjd(c.e.a+c.f.a/2,c.e.b+c.f.b/2),a)==(uFb(b),b)} -function qge(a,b){return ZD(b,102)&&(RD(b,19).Bb&txe)!=0?new She(b,a):new Phe(b,a)} -function sge(a,b){return ZD(b,102)&&(RD(b,19).Bb&txe)!=0?new She(b,a):new Phe(b,a)} -function XC(a){return a.__elementTypeCategory$==null?10:a.__elementTypeCategory$} -function Bhb(a,b){return b==(wvb(),wvb(),vvb)?a.toLocaleLowerCase():a.toLowerCase()} -function Mu(a){if(!a.e){throw Adb(new Dvb)}a.c=a.a=a.e;a.e=a.e.e;--a.d;return a.a.f} -function Lu(a){if(!a.c){throw Adb(new Dvb)}a.e=a.a=a.c;a.c=a.c.c;++a.d;return a.a.f} -function Lsb(a){var b;++a.a;for(b=a.c.a.length;a.a<b;++a.a){if(a.c.b[a.a]){return}}} -function _z(a){var b,c;if(a.a){c=null;do{b=a.a;a.a=null;c=dA(b,c)}while(a.a);a.a=c}} -function aA(a){var b,c;if(a.b){c=null;do{b=a.b;a.b=null;c=dA(b,c)}while(a.b);a.b=c}} -function eve(a,b){var c;c=0;while(a.e!=a.i.gc()){oFd(b,bMd(a),sgb(c));c!=lve&&++c}} -function Llc(a,b){var c;c=$y(a.e.c,b.e.c);if(c==0){return Qfb(a.e.d,b.e.d)}return c} -function hdc(a,b){var c,d;d=b.c;for(c=d+1;c<=b.f;c++){a.a[c]>a.a[d]&&(d=c)}return d} -function Krc(a){var b;b=RD(mQb(a,(Ywc(),Wvc)),313);if(b){return b.a==a}return false} -function Lrc(a){var b;b=RD(mQb(a,(Ywc(),Wvc)),313);if(b){return b.i==a}return false} -function xXb(){xXb=geb;wXb=ss((sXb(),cD(WC(UP,1),jwe,367,0,[nXb,oXb,pXb,qXb,rXb])))} -function Hnc(){Hnc=geb;Gnc=ss((Bnc(),cD(WC(TV,1),jwe,375,0,[xnc,znc,Anc,ync,wnc])))} -function Xtc(){Xtc=geb;Wtc=ss((Ptc(),cD(WC(bX,1),jwe,348,0,[Ltc,Ktc,Ntc,Otc,Mtc])))} -function RDc(){RDc=geb;QDc=ss((JDc(),cD(WC(uX,1),jwe,323,0,[IDc,FDc,GDc,EDc,HDc])))} -function hxc(){hxc=geb;gxc=ss((cxc(),cD(WC(mX,1),jwe,171,0,[bxc,Zwc,$wc,_wc,axc])))} -function m3c(){m3c=geb;l3c=ss((g3c(),cD(WC(x0,1),jwe,368,0,[e3c,b3c,f3c,c3c,d3c])))} -function xad(){xad=geb;wad=ss((sad(),cD(WC(x1,1),jwe,373,0,[oad,nad,qad,pad,rad])))} -function acd(){acd=geb;_bd=ss((Xbd(),cD(WC(P1,1),jwe,324,0,[Sbd,Tbd,Wbd,Ubd,Vbd])))} -function Kmd(){Kmd=geb;Jmd=ss((Cmd(),cD(WC(s3,1),jwe,88,0,[Amd,zmd,ymd,xmd,Bmd])))} -function bid(){bid=geb;aid=ss((Yhd(),cD(WC(d3,1),jwe,170,0,[Whd,Vhd,Thd,Xhd,Uhd])))} -function uod(){uod=geb;tod=ss((pod(),cD(WC(B3,1),jwe,256,0,[mod,ood,kod,lod,nod])))} -function zpd(){zpd=geb;ypd=ss((qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])))} -function LHb(){LHb=geb;JHb=new MHb('BY_SIZE',0);KHb=new MHb('BY_SIZE_AND_SHAPE',1)} -function TUb(){TUb=geb;RUb=new UUb('EADES',0);SUb=new UUb('FRUCHTERMAN_REINGOLD',1)} -function $tc(){$tc=geb;Ytc=new _tc('READING_DIRECTION',0);Ztc=new _tc('ROTATION',1)} -function CZb(){CZb=geb;zZb=new ZZb;AZb=new b$b;xZb=new f$b;yZb=new j$b;BZb=new n$b} -function dGb(a){this.b=new bnb;this.a=new bnb;this.c=new bnb;this.d=new bnb;this.e=a} -function XZb(a){this.g=a;this.f=new bnb;this.a=$wnd.Math.min(this.g.c.c,this.g.d.c)} -function UKb(a,b,c){RJb.call(this);KKb(this);this.a=a;this.c=c;this.b=b.d;this.f=b.e} -function d6b(a,b,c){var d,e;for(e=new Anb(c);e.a<e.c.c.length;){d=ynb(e);c6b(a,b,d)}} -function sC(a,b,c){var d;if(b==null){throw Adb(new Ngb)}d=qC(a,b);tC(a,b,c);return d} -function ked(a,b){var c;c=RD(Wjb(a.a,b),137);if(!c){c=new qQb;Zjb(a.a,b,c)}return c} -function vYd(a,b){var c;c=(a.i==null&&rYd(a),a.i);return b>=0&&b<c.length?c[b]:null} -function Gqd(a,b){var c;c=b>0?b-1:b;return Kqd(Lqd(Mqd(Nqd(new Oqd,c),a.n),a.j),a.k)} -function nBd(a){var b,c;c=(b=new q4d,b);WGd((!a.q&&(a.q=new C5d(s7,a,11,10)),a.q),c)} -function ofb(a){return ((a.i&2)!=0?'interface ':(a.i&1)!=0?'':'class ')+(lfb(a),a.o)} -function dz(a){if(Ddb(a,lve)>0){return lve}if(Ddb(a,qwe)<0){return qwe}return Ydb(a)} -function Sv(a){if(a<3){dk(a,fwe);return a+1}if(a<hwe){return eE(a/0.75+1)}return lve} -function Rwb(a,b){uFb(b);Qwb(a);if(a.d.Ob()){b.Cd(a.d.Pb());return true}return false} -function ke(a,b){var c,d;c=RD(Xv(a.d,b),16);if(!c){return null}d=b;return a.e.pc(d,c)} -function Ufe(a,b,c,d){var e;a.j=-1;oLd(a,gge(a,b,c),(nke(),e=RD(b,69).vk(),e.xl(d)))} -function Z_c(a,b){R_c();return -hgb(RD(mQb(a,(h_c(),W$c)),17).a,RD(mQb(b,W$c),17).a)} -function xo(a,b){return !!Ho(a,b,Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15))))} -function dGd(){aGd();return cD(WC(T5,1),jwe,245,0,[_Fd,YFd,ZFd,XFd,$Fd,VFd,UFd,WFd])} -function nid(){kid();return cD(WC(e3,1),jwe,285,0,[jid,cid,gid,iid,did,eid,fid,hid])} -function hpc(){epc();return cD(WC(hW,1),jwe,276,0,[Zoc,apc,Yoc,dpc,_oc,$oc,cpc,bpc])} -function Kcc(a){var b;b=Kfb(UD(mQb(a,(yCc(),FAc))));if(b<0){b=0;pQb(a,FAc,b)}return b} -function Odc(a,b){var c,d;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),72);pQb(c,(Ywc(),swc),b)}} -function Oic(a,b,c){var d;d=$wnd.Math.max(0,a.b/2-0.5);Iic(c,d,1);Rmb(b,new Xic(c,d))} -function lRc(a,b,c){var d;d=a.a.e[RD(b.a,10).p]-a.a.e[RD(c.a,10).p];return eE(Lgb(d))} -function PDb(a,b){var c;MCb(a);c=new cEb(a,a.a.zd(),a.a.yd()|4,b);return new SDb(a,c)} -function gvb(a){var b;yFb(!!a.c);b=a.c.a;Wub(a.d,a.c);a.b==a.c?(a.b=b):--a.a;a.c=null} -function iqc(a){a.a>=-0.01&&a.a<=Tye&&(a.a=0);a.b>=-0.01&&a.b<=Tye&&(a.b=0);return a} -function Hid(a){tid();var b,c;c=KEe;for(b=0;b<a.length;b++){a[b]>c&&(c=a[b])}return c} -function Zvd(a,b){var c;c=wYd(a.Dh(),b);if(!c){throw Adb(new agb(KHe+b+NHe))}return c} -function NGd(a,b){var c;c=a;while(vCd(c)){c=vCd(c);if(c==b){return true}}return false} -function ix(a,b){var c,d,e;d=b.a.ld();c=RD(b.a.md(),16).gc();for(e=0;e<c;e++){a.Cd(d)}} -function Umb(a,b){var c,d,e,f;uFb(b);for(d=a.c,e=0,f=d.length;e<f;++e){c=d[e];b.Cd(c)}} -function q0b(a,b,c,d,e,f){var g;g=s0b(d);Y0b(g,e);Z0b(g,f);Rc(a.a,d,new J0b(g,b,c.f))} -function P8c(a,b){Ixd(a,(X6c(),T6c),b.f);Ixd(a,Q6c,b.e);Ixd(a,S6c,b.d);Ixd(a,P6c,b.c)} -function grc(a,b){this.a=new Tsb;this.e=new Tsb;this.b=(lDc(),kDc);this.c=a;this.b=b} -function yd(a){this.d=a;this.c=a.c.vc().Kc();this.b=null;this.a=null;this.e=(zs(),ys)} -function Wub(a,b){var c;c=b.c;b.a.b=b.b;b.b.a=b.a;b.a=b.b=null;b.c=null;--a.b;return c} -function Esb(a,b){if(!!b&&a.b[b.g]==b){bD(a.b,b.g,null);--a.c;return true}return false} -function jxb(a,b){if(0>a||a>b){throw Adb(new xeb('fromIndex: 0, toIndex: '+a+Qxe+b))}} -function ZHd(a){if(a<0){throw Adb(new agb('Illegal Capacity: '+a))}this.g=this.aj(a)} -function _y(a,b){Zy();bz(pwe);return $wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)} -function xJc(a,b){var c,d,e,f;for(d=a.d,e=0,f=d.length;e<f;++e){c=d[e];pJc(a.g,c).a=b}} -function BIc(a,b,c){var d,e,f;e=b[c];for(d=0;d<e.length;d++){f=e[d];a.e[f.c.p][f.p]=d}} -function nqc(a){var b;for(b=0;b<a.c.length;b++){(tFb(b,a.c.length),RD(a.c[b],12)).p=b}} -function qqc(a){var b,c;b=a.a.d.j;c=a.c.d.j;while(b!=c){zsb(a.b,b);b=tpd(b)}zsb(a.b,b)} -function gjd(a){var b;b=$wnd.Math.sqrt(a.a*a.a+a.b*a.b);if(b>0){a.a/=b;a.b/=b}return a} -function BXd(a){var b;if(a.w){return a.w}else{b=CXd(a);!!b&&!b.Vh()&&(a.w=b);return b}} -function l2d(a,b){var c,d;d=a.a;c=m2d(a,b,null);d!=b&&!a.e&&(c=o2d(a,b,c));!!c&&c.oj()} -function rQc(a,b,c){var d,e;d=b;do{e=Kfb(a.p[d.p])+c;a.p[d.p]=e;d=a.a[d.p]}while(d!=b)} -function heb(a,b,c){var d=function(){return a.apply(d,arguments)};b.apply(d,c);return d} -function Gae(a){var b;if(a==null){return null}else{b=RD(a,195);return sAd(b,b.length)}} -function QHd(a,b){if(a.g==null||b>=a.i)throw Adb(new yNd(b,a.i));return a.Wi(b,a.g[b])} -function Dob(a,b){yob();var c,d;d=new bnb;for(c=0;c<a;++c){ZEb(d.c,b)}return new irb(d)} -function NDb(a){MCb(a);zFb(true,'n may not be negative');return new SDb(a,new DEb(a.a))} -function KKb(a){a.b=(EKb(),BKb);a.f=(vLb(),tLb);a.d=(dk(2,iwe),new cnb(2));a.e=new pjd} -function zrd(a){this.b=(Qb(a),new dnb(a));this.a=new bnb;this.d=new bnb;this.e=new pjd} -function ZJb(){ZJb=geb;WJb=new $Jb('BEGIN',0);XJb=new $Jb(Kye,1);YJb=new $Jb('END',2)} -function Omd(){Omd=geb;Lmd=new Pmd(Kye,0);Mmd=new Pmd('HEAD',1);Nmd=new Pmd('TAIL',2)} -function R_c(){R_c=geb;Q_c=mfd(mfd(mfd(rfd(new ufd,(YVc(),VVc)),(WYc(),VYc)),OYc),SYc)} -function B0c(){B0c=geb;A0c=mfd(mfd(mfd(rfd(new ufd,(YVc(),XVc)),(WYc(),QYc)),LYc),PYc)} -function gtc(){gtc=geb;ftc=ss((btc(),cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc])))} -function zuc(){zuc=geb;yuc=ss((tuc(),cD(WC(eX,1),jwe,283,0,[ouc,nuc,quc,puc,suc,ruc])))} -function Tuc(){Tuc=geb;Suc=ss((Ouc(),cD(WC(gX,1),jwe,281,0,[Luc,Kuc,Nuc,Juc,Muc,Iuc])))} -function dvc(){dvc=geb;cvc=ss(($uc(),cD(WC(hX,1),jwe,282,0,[Yuc,Vuc,Zuc,Xuc,Wuc,Uuc])))} -function w3b(){w3b=geb;v3b=ss((r3b(),cD(WC(hR,1),jwe,273,0,[p3b,o3b,m3b,q3b,n3b,l3b])))} -function Wjd(){Wjd=geb;Vjd=ss((Rjd(),cD(WC(n3,1),jwe,255,0,[Ljd,Ojd,Pjd,Qjd,Mjd,Njd])))} -function zkd(){zkd=geb;ykd=ss((ukd(),cD(WC(q3,1),jwe,297,0,[tkd,skd,rkd,pkd,okd,qkd])))} -function nnd(){nnd=geb;mnd=ss((ind(),cD(WC(v3,1),jwe,321,0,[gnd,end,hnd,cnd,fnd,dnd])))} -function Iod(){Iod=geb;Hod=ss((Bod(),cD(WC(C3,1),jwe,101,0,[Aod,zod,yod,vod,xod,wod])))} -function Wod(){Wod=geb;Vod=ss((Pod(),cD(WC(D3,1),jwe,279,0,[Nod,Lod,Mod,Kod,Jod,Ood])))} -function kKb(){kKb=geb;jKb=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])).length;iKb=jKb} -function hod(){dod();return cD(WC(A3,1),jwe,95,0,[Xnd,Wnd,Znd,cod,bod,aod,$nd,_nd,Ynd])} -function eoc(a,b){Mnc();return hgb(a.b.c.length-a.e.c.length,b.b.c.length-b.e.c.length)} -function Ao(a,b){return $v(Go(a,b,Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)))))} -function rGb(a,b){return Zy(),bz(pwe),$wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)} -function Wxd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,1,c,a.b))} -function Hzd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,3,c,a.b))} -function Ayd(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,3,c,a.f))} -function Cyd(a,b){var c;c=a.g;a.g=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,4,c,a.g))} -function Dyd(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,5,c,a.i))} -function Eyd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,6,c,a.j))} -function Ozd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,1,c,a.j))} -function Izd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,4,c,a.c))} -function Pzd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,2,c,a.k))} -function Vxd(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,0,c,a.a))} -function $Vd(a,b){var c;c=a.s;a.s=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new M3d(a,4,c,a.s))} -function bWd(a,b){var c;c=a.t;a.t=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new M3d(a,5,c,a.t))} -function Q1d(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new M3d(a,2,c,a.d))} -function zXd(a,b){var c;c=a.F;a.F=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,5,c,b))} -function IMd(a,b){var c;c=RD(Wjb((PRd(),ORd),a),57);return c?c.gk(b):$C(jJ,rve,1,b,5,1)} -function BXb(a,b){var c;c=ojd(ajd(RD(Wjb(a.g,b),8)),Pid(RD(Wjb(a.f,b),469).b));return c} -function FGd(a,b){var c,d,e;c=(d=(bvd(),e=new hCd,e),!!b&&eCd(d,b),d);fCd(c,a);return c} -function vDd(a,b){var c,d;c=b in a.a;if(c){d=qC(a,b).re();if(d){return d.a}}return null} -function jZd(a,b,c){gHd(a,c);if(!a.kl()&&c!=null&&!a.fk(c)){throw Adb(new yeb)}return c} -function Mqd(a,b){a.n=b;if(a.n){a.f=new bnb;a.e=new bnb}else{a.f=null;a.e=null}return a} -function Ffb(a,b){var c;if(!a){return}b.n=a;var d=zfb(b);if(!d){eeb[a]=[b];return}d.Rm=b} -function SD(a){var b;CFb(a==null||Array.isArray(a)&&(b=XC(a),!(b>=14&&b<=16)));return a} -function ws(a,b){var c;uFb(b);c=a[':'+b];mFb(!!c,'Enum constant undefined: '+b);return c} -function tfb(a,b,c,d,e,f){var g;g=rfb(a,b);Ffb(c,g);g.i=e?8:0;g.f=d;g.e=e;g.g=f;return g} -function R3d(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=1;this.c=a;this.a=c} -function T3d(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=2;this.c=a;this.a=c} -function _3d(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=6;this.c=a;this.a=c} -function e4d(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=7;this.c=a;this.a=c} -function X3d(a,b,c,d,e){this.d=b;this.j=d;this.e=e;this.o=-1;this.p=4;this.c=a;this.a=c} -function iGb(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];eGb(a.a,c)}return a} -function Al(a){var b,c,d,e;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Qb(b)}return new Gl(a)} -function ZTb(a){var b;b=ojd(ajd(a.d.d),a.c.d);wid(b,a.c.e.a,a.c.e.b);return $id(b,a.c.d)} -function $Tb(a){var b;b=ojd(ajd(a.c.d),a.d.d);wid(b,a.d.e.a,a.d.e.b);return $id(b,a.d.d)} -function iA(a){var b=/function(?:\s+([\w$]+))?\s*\(/;var c=b.exec(a);return c&&c[1]||wwe} -function Hnb(a,b,c){var d,e;e=a.length;d=$wnd.Math.min(c,e);VEb(a,0,b,0,d,true);return b} -function ISb(a,b,c){var d,e;for(e=b.Kc();e.Ob();){d=RD(e.Pb(),74);Ysb(a,RD(c.Kb(d),27))}} -function E1b(a,b){Cod(RD(mQb(RD(a.e,10),(yCc(),BBc)),101))&&(yob(),_mb(RD(a.e,10).j,b))} -function lIb(){iIb();return cD(WC(xN,1),jwe,257,0,[hIb,cIb,dIb,bIb,fIb,gIb,eIb,aIb,_Hb])} -function fDc(){_Cc();return cD(WC(rX,1),jwe,265,0,[ZCc,WCc,XCc,TCc,VCc,$Cc,YCc,SCc,UCc])} -function RKc(){RKc=geb;OKc=new SKc('BARYCENTER',0);PKc=new SKc(jBe,1);QKc=new SKc(kBe,2)} -function uFc(){uFc=geb;tFc=new vFc('NO',0);rFc=new vFc(CBe,1);sFc=new vFc('LOOK_BACK',2)} -function Etc(){Etc=geb;Btc=new Ftc('ARD',0);Dtc=new Ftc('MSD',1);Ctc=new Ftc('MANUAL',2)} -function BEc(){BEc=geb;AEc=new CEc(Sye,0);yEc=new CEc('INPUT',1);zEc=new CEc('OUTPUT',2)} -function ygd(){if(!qgd){qgd=new xgd;wgd(qgd,cD(WC(B2,1),rve,134,0,[new vmd]))}return qgd} -function bz(a){if(!(a>=0)){throw Adb(new agb('tolerance ('+a+') must be >= 0'))}return a} -function hOd(a,b){var c;if(ZD(b,44)){return a.c.Mc(b)}else{c=QNd(a,b);jOd(a,b);return c}} -function yBd(a,b,c){YVd(a,b);PAd(a,c);$Vd(a,0);bWd(a,1);aWd(a,true);_Vd(a,true);return a} -function ZGd(a,b){var c;c=a.gc();if(b<0||b>c)throw Adb(new aMd(b,c));return new CMd(a,b)} -function Cad(a,b){a.b=$wnd.Math.max(a.b,b.d);a.e+=b.r+(a.a.c.length==0?0:a.c);Rmb(a.a,b)} -function Jmb(a){yFb(a.c>=0);if(rmb(a.d,a.c)<0){a.a=a.a-1&a.d.a.length-1;a.b=a.d.c}a.c=-1} -function Nc(a){var b,c;for(c=a.c.Cc().Kc();c.Ob();){b=RD(c.Pb(),16);b.$b()}a.c.$b();a.d=0} -function Zi(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;d<e;++d){b=c[d];Rnb(b,b.length,null)}} -function zjd(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];Pub(a,c,a.c.b,a.c)}} -function St(a,b){var c,d;for(c=0,d=a.gc();c<d;++c){if(Fvb(b,a.Xb(c))){return c}}return -1} -function ogb(a){var b,c;if(a==0){return 32}else{c=0;for(b=1;(b&a)==0;b<<=1){++c}return c}} -function dk(a,b){if(a<0){throw Adb(new agb(b+' cannot be negative but was: '+a))}return a} -function deb(a,b){typeof window===gve&&typeof window['$gwt']===gve&&(window['$gwt'][a]=b)} -function lp(a,b){return Vv(Ho(a.a,b,Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)))))} -function FBb(a,b,c){return sBb(a,new CCb(b),new ECb,new GCb(c),cD(WC(QL,1),jwe,108,0,[]))} -function gqd(){dqd();return cD(WC(I3,1),jwe,264,0,[Ypd,$pd,Xpd,_pd,aqd,cqd,bqd,Zpd,Wpd])} -function wgb(){wgb=geb;vgb=cD(WC(kE,1),Pwe,28,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])} -function stc(){stc=geb;qtc=new utc('LAYER_SWEEP',0);ptc=new utc(BBe,1);rtc=new utc(LAe,2)} -function nGc(){nGc=geb;mGc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} -function yGc(){yGc=geb;xGc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} -function SGc(){SGc=geb;RGc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} -function lHc(){lHc=geb;kHc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} -function tHc(){tHc=geb;sHc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} -function RHc(){RHc=geb;QHc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} -function YJc(){YJc=geb;XJc=nfd(pfd(pfd(new ufd,(sXb(),pXb),(hcc(),Qbc)),qXb,Gbc),rXb,Pbc)} -function EJb(a){var b,c;for(c=new Anb(yud(a));c.a<c.c.c.length;){b=RD(ynb(c),695);b._f()}} -function aeb(){beb();var a=_db;for(var b=0;b<arguments.length;b++){a.push(arguments[b])}} -function EXb(a){zXb();this.g=new Tsb;this.f=new Tsb;this.b=new Tsb;this.c=new Tp;this.i=a} -function d1b(){this.f=new pjd;this.d=new C3b;this.c=new pjd;this.a=new bnb;this.b=new bnb} -function Cje(a,b,c,d){this.ak();this.a=b;this.b=a;this.c=null;this.c=new Dje(this,b,c,d)} -function NKd(a,b,c,d,e){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1;e||(this.o=-2-d-1)} -function HWd(){dWd.call(this);this.n=-1;this.g=null;this.i=null;this.j=null;this.Bb|=gwe} -function DEb(a){xxb.call(this,a.Ad(64)?Kgb(0,Vdb(a.zd(),1)):Sve,a.yd());this.b=1;this.a=a} -function X_c(a,b){R_c();return RD(mQb(b,(h_c(),W$c)),17).a<a.gc()&&RD(mQb(b,W$c),17).a>=0} -function Iqd(a,b){if(a.r>0&&a.c<a.r){a.c+=b;!!a.i&&a.i.d>0&&a.g!=0&&Iqd(a.i,b/a.r*a.i.d)}} -function $Cd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,c,a.c))} -function P1d(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,4,c,a.c))} -function jyd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,2,c,a.k))} -function JXd(a,b){var c;c=a.D;a.D=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,2,c,a.D))} -function Kzd(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,8,c,a.f))} -function Lzd(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,7,c,a.i))} -function fCd(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,8,c,a.a))} -function ZCd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,0,c,a.b))} -function s6d(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,0,c,a.b))} -function t6d(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,c,a.c))} -function nVd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,c,a.d))} -function Cte(a,b,c){var d;a.b=b;a.a=c;d=(a.a&512)==512?new Gre:new Tqe;a.c=Nqe(d,a.b,a.a)} -function Gge(a,b){return qke(a.e,b)?(nke(),wWd(b)?new ole(b,a):new Eke(b,a)):new Ble(b,a)} -function iDb(a){var b,c;if(0>a){return new rDb}b=a+1;c=new kDb(b,a);return new oDb(null,c)} -function Gob(a,b){yob();var c;c=new Usb(1);bE(a)?$jb(c,a,b):rtb(c.f,a,b);return new uqb(c)} -function pQc(a,b){var c,d;c=a.c;d=b.e[a.p];if(d>0){return RD(Vmb(c.a,d-1),10)}return null} -function TOb(a,b){var c,d;c=a.o+a.p;d=b.o+b.p;if(c<d){return -1}if(c==d){return 0}return 1} -function Z5b(a){var b;b=mQb(a,(Ywc(),Awc));if(ZD(b,167)){return Y5b(RD(b,167))}return null} -function Wp(a){var b;a=$wnd.Math.max(a,2);b=mgb(a);if(a>b){b<<=1;return b>0?b:hwe}return b} -function xc(a){Ub(a.e!=3);switch(a.e){case 2:return false;case 0:return true;}return zc(a)} -function djd(a,b){var c;if(ZD(b,8)){c=RD(b,8);return a.a==c.a&&a.b==c.b}else{return false}} -function Ydd(a,b){var c;c=new kRb;RD(b.b,68);RD(b.b,68);RD(b.b,68);Umb(b.a,new ced(a,c,b))} -function gOd(a,b){var c,d;for(d=b.vc().Kc();d.Ob();){c=RD(d.Pb(),44);fOd(a,c.ld(),c.md())}} -function Jzd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,11,c,a.d))} -function zWd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,13,c,a.j))} -function b6d(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,21,c,a.b))} -function YAb(a,b){((gBb(),dBb)?null:b.c).length==0&&iBb(b,new rBb);$jb(a.a,dBb?null:b.c,b)} -function b9b(a,b){b.Ug('Hierarchical port constraint processing',1);c9b(a);e9b(a);b.Vg()} -function joc(){joc=geb;ioc=new koc('START',0);hoc=new koc('MIDDLE',1);goc=new koc('END',2)} -function x2c(){x2c=geb;v2c=new z2c('P1_NODE_PLACEMENT',0);w2c=new z2c('P2_EDGE_ROUTING',1)} -function JVb(){JVb=geb;HVb=new jGd(rAe);IVb=new jGd(sAe);GVb=new jGd(tAe);FVb=new jGd(uAe)} -function tkb(a){var b;rFb(a.f.g,a.d);sFb(a.b);a.c=a.a;b=RD(a.a.Pb(),44);a.b=skb(a);return b} -function P2d(a){var b;if(a.b==null){return j3d(),j3d(),i3d}b=a.ul()?a.tl():a.sl();return b} -function nwb(a,b){var c;c=b==null?-1:Wmb(a.b,b,0);if(c<0){return false}owb(a,c);return true} -function zsb(a,b){var c;uFb(b);c=b.g;if(!a.b[c]){bD(a.b,c,b);++a.c;return true}return false} -function azb(a,b){var c,d;c=1-b;d=a.a[c];a.a[c]=d.a[b];d.a[b]=a;a.b=true;d.b=false;return d} -function xRb(a,b){var c,d;for(d=b.Kc();d.Ob();){c=RD(d.Pb(),272);a.b=true;Ysb(a.e,c);c.b=a}} -function kic(a,b){var c,d;c=RD(mQb(a,(yCc(),IBc)),8);d=RD(mQb(b,IBc),8);return Qfb(c.b,d.b)} -function SPb(a,b,c){var d,e,f;f=b>>5;e=b&31;d=Cdb(Udb(a.n[c][f],Ydb(Sdb(e,1))),3);return d} -function lmb(a,b,c){var d,e,f;f=a.a.length-1;for(e=a.b,d=0;d<c;e=e+1&f,++d){bD(b,d,a.a[e])}} -function owb(a,b){var c;c=Xmb(a.b,a.b.c.length-1);if(b<a.b.c.length){$mb(a.b,b,c);kwb(a,b)}} -function NQc(a,b){var c;c=RD(Wjb(a.c,b),466);if(!c){c=new UQc;c.c=b;Zjb(a.c,c.c,c)}return c} -function PUc(a,b){var c,d;d=new bnb;c=b;do{ZEb(d.c,c);c=RD(Wjb(a.k,c),18)}while(c);return d} -function rMc(a,b,c){var d;d=new bnb;sMc(a,b,d,c,true,true);a.b=new _Lc(d.c.length);return d} -function tvb(a,b){var c,d;c=a.Pc();Wnb(c,0,c.length,b);for(d=0;d<c.length;d++){a.hd(d,c[d])}} -function Bad(a){var b,c;for(c=new dMd(a);c.e!=c.i.gc();){b=RD(bMd(c),27);Dyd(b,0);Eyd(b,0)}} -function Bu(a){this.e=a;this.d=new atb(Sv(Ec(this.e).gc()));this.c=this.e.a;this.b=this.e.c} -function _Lc(a){this.b=a;this.a=$C(kE,Pwe,28,a+1,15,1);this.c=$C(kE,Pwe,28,a,15,1);this.d=0} -function frc(a,b,c){grc.call(this,b,c);this.d=$C(jR,WAe,10,a.a.c.length,0,1);anb(a.a,this.d)} -function vLc(a,b,c){UIc.call(this,a,b,c);this.a=new Tsb;this.b=new Tsb;this.d=new yLc(this)} -function Pic(a){fHb.call(this);this.b=Kfb(UD(mQb(a,(yCc(),TBc))));this.a=RD(mQb(a,yAc),223)} -function _q(a,b){var c;if(ZD(b,16)){c=RD(b,16);return a.Gc(c)}return xr(a,RD(Qb(b),20).Kc())} -function KCc(a,b){FDb(CDb(new SDb(null,new Swb(new Xkb(a.b),1)),new esd(a,b)),new isd(a,b))} -function f6b(a,b){b.Ug(iBe,1);FDb(EDb(new SDb(null,new Swb(a.b,16)),new j6b),new l6b);b.Vg()} -function tb(a){return bE(a)?ohb(a):_D(a)?Nfb(a):$D(a)?Jeb(a):YD(a)?a.Hb():aD(a)?kFb(a):Iz(a)} -function xKc(a){var b,c;for(c=a.c.a.ec().Kc();c.Ob();){b=RD(c.Pb(),219);DJc(b,new NLc(b.f))}} -function yKc(a){var b,c;for(c=a.c.a.ec().Kc();c.Ob();){b=RD(c.Pb(),219);EJc(b,new OLc(b.e))}} -function PAd(a,b){var c;c=a.zb;a.zb=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,c,a.zb))} -function CBd(a,b){var c;c=a.xb;a.xb=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,c,a.xb))} -function DBd(a,b){var c;c=a.yb;a.yb=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,2,c,a.yb))} -function iBd(a,b){var c,d;c=(d=new mXd,d);c.n=b;WGd((!a.s&&(a.s=new C5d(y7,a,21,17)),a.s),c)} -function oBd(a,b){var c,d;d=(c=new d6d,c);d.n=b;WGd((!a.s&&(a.s=new C5d(y7,a,21,17)),a.s),d)} -function ye(a,b){var c,d,e;uFb(b);c=false;for(e=b.Kc();e.Ob();){d=e.Pb();c=c|a.Fc(d)}return c} -function Sx(a){var b,c,d;b=0;for(d=a.Kc();d.Ob();){c=d.Pb();b+=c!=null?tb(c):0;b=~~b}return b} -function oC(e,a){var b=e.a;var c=0;for(var d in b){b.hasOwnProperty(d)&&(a[c++]=d)}return a} -function gB(a){var b;if(a==0){return 'UTC'}if(a<0){a=-a;b='UTC+'}else{b='UTC-'}return b+iB(a)} -function xib(a){if(a.a<54){return a.f<0?-1:a.f>0?1:0}return (!a.c&&(a.c=ojb(Hdb(a.f))),a.c).e} -function GXd(a,b){if(b){if(a.B==null){a.B=a.D;a.D=null}}else if(a.B!=null){a.D=a.B;a.B=null}} -function rZb(a,b){nZb();return a==jZb&&b==mZb||a==mZb&&b==jZb||a==lZb&&b==kZb||a==kZb&&b==lZb} -function sZb(a,b){nZb();return a==jZb&&b==kZb||a==jZb&&b==lZb||a==mZb&&b==lZb||a==mZb&&b==kZb} -function zMb(a,b){return Zy(),bz(Tye),$wnd.Math.abs(0-b)<=Tye||0==b||isNaN(0)&&isNaN(b)?0:a/b} -function qsc(a,b){return Kfb(UD(Lvb(MDb(GDb(new SDb(null,new Swb(a.c.b,16)),new Isc(a)),b))))} -function tsc(a,b){return Kfb(UD(Lvb(MDb(GDb(new SDb(null,new Swb(a.c.b,16)),new Gsc(a)),b))))} -function rvc(){ovc();return cD(WC(iX,1),jwe,259,0,[fvc,hvc,ivc,jvc,kvc,lvc,nvc,evc,gvc,mvc])} -function dEc(){aEc();return cD(WC(vX,1),jwe,243,0,[$Dc,VDc,YDc,WDc,XDc,SDc,ZDc,_Dc,TDc,UDc])} -function z3c(a,b){var c;b.Ug('General Compactor',1);c=h4c(RD(Gxd(a,($4c(),I4c)),393));c.Cg(a)} -function T5c(a,b){var c,d;c=RD(Gxd(a,($4c(),P4c)),17);d=RD(Gxd(b,P4c),17);return hgb(c.a,d.a)} -function Bjd(a,b,c){var d,e;for(e=Sub(a,0);e.b!=e.d.c;){d=RD(evb(e),8);d.a+=b;d.b+=c}return a} -function Go(a,b,c){var d;for(d=a.b[c&a.f];d;d=d.b){if(c==d.a&&Hb(b,d.g)){return d}}return null} -function Ho(a,b,c){var d;for(d=a.c[c&a.f];d;d=d.d){if(c==d.f&&Hb(b,d.i)){return d}}return null} -function sjb(a,b,c){var d,e,f;d=0;for(e=0;e<c;e++){f=b[e];a[e]=f<<1|d;d=f>>>31}d!=0&&(a[c]=d)} -function yzb(a,b,c,d,e,f){var g;this.c=a;g=new bnb;Syb(a,g,b,a.b,c,d,e,f);this.a=new Jkb(g,0)} -function _5c(){this.c=new T2c(0);this.b=new T2c(FEe);this.d=new T2c(EEe);this.a=new T2c(Gze)} -function kMb(a,b,c,d,e,f,g){qs.call(this,a,b);this.d=c;this.e=d;this.c=e;this.b=f;this.a=dv(g)} -function tBd(a,b,c,d,e,f,g,h,i,j,k,l,m){ABd(a,b,c,d,e,f,g,h,i,j,k,l,m);kXd(a,false);return a} -function H0b(a){if(a.b.c.i.k==(r3b(),m3b)){return RD(mQb(a.b.c.i,(Ywc(),Awc)),12)}return a.b.c} -function I0b(a){if(a.b.d.i.k==(r3b(),m3b)){return RD(mQb(a.b.d.i,(Ywc(),Awc)),12)}return a.b.d} -function nDb(a){var b;b=mDb(a);if(Gdb(b.a,0)){return bwb(),bwb(),awb}return bwb(),new ewb(b.b)} -function SCb(a){var b;b=RCb(a);if(Gdb(b.a,0)){return Tvb(),Tvb(),Svb}return Tvb(),new Yvb(b.b)} -function TCb(a){var b;b=RCb(a);if(Gdb(b.a,0)){return Tvb(),Tvb(),Svb}return Tvb(),new Yvb(b.c)} -function o8b(a){switch(a.g){case 2:return qpd(),ppd;case 4:return qpd(),Xod;default:return a;}} -function p8b(a){switch(a.g){case 1:return qpd(),npd;case 3:return qpd(),Yod;default:return a;}} -function C9c(a){switch(a.g){case 0:return new s9c;case 1:return new x9c;default:return null;}} -function Zcc(){Zcc=geb;Ycc=new kGd('edgelabelcenterednessanalysis.includelabel',(Geb(),Eeb))} -function jKc(){jKc=geb;iKc=mfd(qfd(pfd(pfd(new ufd,(sXb(),pXb),(hcc(),Qbc)),qXb,Gbc),rXb),Pbc)} -function DLc(){DLc=geb;CLc=mfd(qfd(pfd(pfd(new ufd,(sXb(),pXb),(hcc(),Qbc)),qXb,Gbc),rXb),Pbc)} -function lYd(){lYd=geb;iYd=new i1d;kYd=cD(WC(y7,1),lKe,179,0,[]);jYd=cD(WC(s7,1),mKe,62,0,[])} -function P8b(){P8b=geb;O8b=new Q8b('TO_INTERNAL_LTR',0);N8b=new Q8b('TO_INPUT_DIRECTION',1)} -function J3b(){J3b=geb;G3b=new r4b;E3b=new w4b;F3b=new A4b;D3b=new E4b;H3b=new I4b;I3b=new M4b} -function Cac(a,b){b.Ug(iBe,1);LJb(KJb(new PJb((i1b(),new t1b(a,false,false,new _1b)))));b.Vg()} -function M_c(a,b,c){c.Ug('DFS Treeifying phase',1);L_c(a,b);J_c(a,b);a.a=null;a.b=null;c.Vg()} -function Leb(a,b){Geb();return bE(a)?jhb(a,WD(b)):_D(a)?Jfb(a,UD(b)):$D(a)?Ieb(a,TD(b)):a.Fd(b)} -function Ld(a,b){var c,d;uFb(b);for(d=b.vc().Kc();d.Ob();){c=RD(d.Pb(),44);a.zc(c.ld(),c.md())}} -function ege(a,b,c){var d;for(d=c.Kc();d.Ob();){if(!cge(a,b,d.Pb())){return false}}return true} -function S6d(a,b,c,d,e){var f;if(c){f=BYd(b.Dh(),a.c);e=c.Rh(b,-1-(f==-1?d:f),null,e)}return e} -function T6d(a,b,c,d,e){var f;if(c){f=BYd(b.Dh(),a.c);e=c.Th(b,-1-(f==-1?d:f),null,e)}return e} -function Uib(a){var b;if(a.b==-2){if(a.e==0){b=-1}else{for(b=0;a.a[b]==0;b++);}a.b=b}return a.b} -function fjb(a){uFb(a);if(a.length==0){throw Adb(new Vgb('Zero length BigInteger'))}mjb(this,a)} -function $Hd(a){this.i=a.gc();if(this.i>0){this.g=this.aj(this.i+(this.i/8|0)+1);a.Qc(this.g)}} -function dmc(a,b,c){this.g=a;this.d=b;this.e=c;this.a=new bnb;bmc(this);yob();_mb(this.a,null)} -function aad(a,b){b.q=a;a.d=$wnd.Math.max(a.d,b.r);a.b+=b.d+(a.a.c.length==0?0:a.c);Rmb(a.a,b)} -function xid(a,b){var c,d,e,f;e=a.c;c=a.c+a.b;f=a.d;d=a.d+a.a;return b.a>e&&b.a<c&&b.b>f&&b.b<d} -function Cjd(a,b){var c,d;for(d=Sub(a,0);d.b!=d.d.c;){c=RD(evb(d),8);c.a+=b.a;c.b+=b.b}return a} -function $cc(a){var b,c,d;d=0;for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),30);b.p=d;++d}} -function Tnc(a){var b,c,d;return a.j==(qpd(),Yod)&&(b=Vnc(a),c=Csb(b,Xod),d=Csb(b,ppd),d||d&&c)} -function rsd(a,b){var c;c=wsd(a);return qsd(new rjd(c.c,c.d),new rjd(c.b,c.a),a.Mf(),b,a.ag())} -function wEd(a,b){var c;c=RD(b,190);qDd(c,'x',a.i);qDd(c,'y',a.j);qDd(c,fIe,a.g);qDd(c,eIe,a.f)} -function CVd(a,b){var c;if(ZD(b,85)){RD(a.c,79).Gk();c=RD(b,85);gOd(a,c)}else{RD(a.c,79).Wb(b)}} -function Bvb(a,b){var c,d;uFb(b);for(d=a.vc().Kc();d.Ob();){c=RD(d.Pb(),44);b.Yd(c.ld(),c.md())}} -function zr(a,b){var c;Qb(b);while(a.Ob()){c=a.Pb();if(!oSc(RD(c,10))){return false}}return true} -function _Ab(){var a;if(!XAb){XAb=new $Ab;a=new oBb('');mBb(a,(SAb(),RAb));YAb(XAb,a)}return XAb} -function PBb(a,b){return sBb(new lCb(a),new nCb(b),new pCb(b),new rCb,cD(WC(QL,1),jwe,108,0,[]))} -function t5c(){t5c=geb;r5c=new v5c(LAe,0);s5c=new v5c('POLAR_COORDINATE',1);q5c=new v5c('ID',2)} -function KEc(){KEc=geb;HEc=new LEc('EQUALLY',0);IEc=new LEc(_ye,1);JEc=new LEc('NORTH_SOUTH',2)} -function OQb(){OQb=geb;MQb=new kGd('debugSVG',(Geb(),false));NQb=new kGd('overlapsExisted',true)} -function pid(){pid=geb;oid=ss((kid(),cD(WC(e3,1),jwe,285,0,[jid,cid,gid,iid,did,eid,fid,hid])))} -function fGd(){fGd=geb;eGd=ss((aGd(),cD(WC(T5,1),jwe,245,0,[_Fd,YFd,ZFd,XFd,$Fd,VFd,UFd,WFd])))} -function jpc(){jpc=geb;ipc=ss((epc(),cD(WC(hW,1),jwe,276,0,[Zoc,apc,Yoc,dpc,_oc,$oc,cpc,bpc])))} -function $Yc(){WYc();return cD(WC(u_,1),jwe,262,0,[VYc,OYc,SYc,TYc,RYc,NYc,UYc,LYc,QYc,PYc,MYc])} -function $i(a,b,c){var d,e;e=RD(Fn(a.d,b),17);d=RD(Fn(a.b,c),17);return !e||!d?null:Ui(a,e.a,d.a)} -function cgd(a,b){var c;c=sgd(ygd(),a);if(c){Ixd(b,(umd(),Tld),c);return true}else{return false}} -function TMb(a){RMb();if(a.A.Hc((Qpd(),Mpd))){if(!a.B.Hc((dqd(),$pd))){return SMb(a)}}return null} -function tUb(){this.a=RD(iGd((yVb(),aVb)),17).a;this.c=Kfb(UD(iGd(rVb)));this.b=Kfb(UD(iGd(nVb)))} -function vkb(a){this.f=a;this.e=new Qtb(this.f.i);this.a=this.e;this.b=skb(this);this.d=this.f.g} -function Uge(a,b){Kfe.call(this,Ibb,a,b);this.b=this;this.a=pke(a.Dh(),vYd(this.e.Dh(),this.c))} -function bdc(a,b){var c,d;for(d=new Anb(b.b);d.a<d.c.c.length;){c=RD(ynb(d),30);a.a[c.p]=h2b(c)}} -function ofd(a,b){var c;for(c=0;c<b.j.c.length;c++){RD(Med(a,c),21).Gc(RD(Med(b,c),16))}return a} -function peb(a,b,c,d){var e;e=a.a.length;c>e?(c=e):BFb(b,c+1);a.a=zhb(a.a,0,b)+(''+d)+yhb(a.a,c)} -function ktb(a,b){a.a=Bdb(a.a,1);a.c=$wnd.Math.min(a.c,b);a.b=$wnd.Math.max(a.b,b);a.d=Bdb(a.d,b)} -function wdc(a,b){return b<a.b.gc()?RD(a.b.Xb(b),10):b==a.b.gc()?a.a:RD(Vmb(a.e,b-a.b.gc()-1),10)} -function rXc(a,b,c){return Qfb(cjd(jWc(a),new rjd(b.e.a,b.e.b)),cjd(jWc(a),new rjd(c.e.a,c.e.b)))} -function WJc(a,b,c){return a==(RKc(),QKc)?new PJc:Kwb(b,1)!=0?new ILc(c.length):new pLc(c.length)} -function qvd(a,b){var c,d,e;c=a.th();if(c!=null&&a.wh()){for(d=0,e=c.length;d<e;++d){c[d].dj(b)}}} -function QBb(a,b){var c,d,e;c=a.c.Xe();for(e=b.Kc();e.Ob();){d=e.Pb();a.a.Yd(c,d)}return a.b.Kb(c)} -function n2b(a,b){var c,d;c=a;d=Y2b(c).e;while(d){c=d;if(c==b){return true}d=Y2b(c).e}return false} -function Edb(a){var b;b=a.h;if(b==0){return a.l+a.m*gxe}if(b==exe){return a.l+a.m*gxe-hxe}return a} -function LHc(a,b,c){var d,e;d=a.a.f[b.p];e=a.a.f[c.p];if(d<e){return -1}if(d==e){return 0}return 1} -function Wmc(a,b){var c,d;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),72);Rmb(a.d,c);$mc(a,c)}} -function E6b(a,b){var c;b.Ug('Edge and layer constraint edge reversal',1);c=D6b(a);C6b(c);b.Vg()} -function m6c(a,b){var c,d;for(d=new dMd(a);d.e!=d.i.gc();){c=RD(bMd(d),27);Byd(c,c.i+b.b,c.j+b.d)}} -function TNd(a){var b;if(a.d==null){++a.e;a.f=0;SNd(null)}else{++a.e;b=a.d;a.d=null;a.f=0;SNd(b)}} -function Ys(a){var b;if(a.a==a.b.a){throw Adb(new Dvb)}b=a.a;a.c=b;a.a=RD(Hvb(a.a.e),227);return b} -function Ywd(a,b){var c;if((a.Db&b)!=0){c=Xwd(a,b);return c==-1?a.Eb:SD(a.Eb)[c]}else{return null}} -function jBd(a,b){var c,d;c=(d=new HYd,d);c.G=b;!a.rb&&(a.rb=new J5d(a,i7,a));WGd(a.rb,c);return c} -function kBd(a,b){var c,d;c=(d=new k1d,d);c.G=b;!a.rb&&(a.rb=new J5d(a,i7,a));WGd(a.rb,c);return c} -function wBd(a,b,c,d){ZD(a.Cb,184)&&(RD(a.Cb,184).tb=null);PAd(a,c);!!b&&HXd(a,b);d&&a.gl(true)} -function nJc(a,b){if(a.c){oJc(a,b,true);FDb(new SDb(null,new Swb(b,16)),new BJc(a))}oJc(a,b,false)} -function KRc(a){FRc();var b;if(!Urb(ERc,a)){b=new HRc;b.a=a;Xrb(ERc,a,b)}return RD(Vrb(ERc,a),645)} -function k3d(a){var b;if(a.g>1||a.Ob()){++a.a;a.g=0;b=a.i;a.Ob();return b}else{throw Adb(new Dvb)}} -function GRc(a){switch(a.a.g){case 1:return new lSc;case 3:return new VUc;default:return new WRc;}} -function fyd(a,b){switch(b){case 1:return !!a.n&&a.n.i!=0;case 2:return a.k!=null;}return Cxd(a,b)} -function Hdb(a){if(jxe<a&&a<hxe){return a<0?$wnd.Math.ceil(a):$wnd.Math.floor(a)}return Edb(vD(a))} -function hfb(a){var b;if(a<128){return jfb(),b=ifb[a],!b&&(b=ifb[a]=new bfb(a)),b}return new bfb(a)} -function PCb(b,c){var d;try{c.de()}catch(a){a=zdb(a);if(ZD(a,82)){d=a;ZEb(b.c,d)}else throw Adb(a)}} -function Wdb(a){var b,c,d,e;e=a;d=0;if(e<0){e+=hxe;d=exe}c=eE(e/gxe);b=eE(e-c*gxe);return hD(b,c,d)} -function dy(a){var b,c,d;d=0;for(c=new Osb(a.a);c.a<c.c.a.length;){b=Nsb(c);a.b.Hc(b)&&++d}return d} -function _u(a){var b,c,d;b=1;for(d=a.Kc();d.Ob();){c=d.Pb();b=31*b+(c==null?0:tb(c));b=~~b}return b} -function kQb(a,b){var c;if(!b){return a}c=b.nf();c.dc()||(!a.q?(a.q=new Vsb(c)):Ld(a.q,c));return a} -function Mtb(a,b){var c;c=a.a.get(b);if(c===undefined){++a.d}else{Ctb(a.a,b);--a.c;++a.b.g}return c} -function a0b(a,b){var c,d,e;c=b.p-a.p;if(c==0){d=a.f.a*a.f.b;e=b.f.a*b.f.b;return Qfb(d,e)}return c} -function Jfc(a,b){var c,d;c=a.j;d=b.j;return c!=d?c.g-d.g:a.p==b.p?0:c==(qpd(),Yod)?a.p-b.p:b.p-a.p} -function dFc(a,b,c,d,e){bD(a.c[b.g],c.g,d);bD(a.c[c.g],b.g,d);bD(a.b[b.g],c.g,e);bD(a.b[c.g],b.g,e)} -function Jyb(a,b,c){this.b=(uFb(a),a);this.d=(uFb(b),b);this.e=(uFb(c),c);this.c=this.d+(''+this.e)} -function Phe(a,b){this.b=a;this.e=b;this.d=b.j;this.f=(nke(),RD(a,69).xk());this.k=pke(b.e.Dh(),a)} -function USc(a){this.n=new bnb;this.e=new Yub;this.j=new Yub;this.k=new bnb;this.f=new bnb;this.p=a} -function rVc(a){a.r=new _sb;a.w=new _sb;a.t=new bnb;a.i=new bnb;a.d=new _sb;a.a=new Tid;a.c=new Tsb} -function mOb(){mOb=geb;lOb=new nOb('UP',0);iOb=new nOb(Zye,1);jOb=new nOb(Nye,2);kOb=new nOb(Oye,3)} -function xvc(){xvc=geb;vvc=new yvc('ONE_SIDED',0);wvc=new yvc('TWO_SIDED',1);uvc=new yvc('OFF',2)} -function B9c(){B9c=geb;z9c=new D9c('EQUAL_BETWEEN_STRUCTURES',0);A9c=new D9c('TO_ASPECT_RATIO',1)} -function hDc(){hDc=geb;gDc=ss((_Cc(),cD(WC(rX,1),jwe,265,0,[ZCc,WCc,XCc,TCc,VCc,$Cc,YCc,SCc,UCc])))} -function iqd(){iqd=geb;hqd=ss((dqd(),cD(WC(I3,1),jwe,264,0,[Ypd,$pd,Xpd,_pd,aqd,cqd,bqd,Zpd,Wpd])))} -function jod(){jod=geb;iod=ss((dod(),cD(WC(A3,1),jwe,95,0,[Xnd,Wnd,Znd,cod,bod,aod,$nd,_nd,Ynd])))} -function nIb(){nIb=geb;mIb=ss((iIb(),cD(WC(xN,1),jwe,257,0,[hIb,cIb,dIb,bIb,fIb,gIb,eIb,aIb,_Hb])))} -function oSc(a){var b;b=RD(mQb(a,(Ywc(),hwc)),64);return a.k==(r3b(),m3b)&&(b==(qpd(),ppd)||b==Xod)} -function j0b(a,b,c){var d,e;e=RD(mQb(a,(yCc(),RAc)),75);if(e){d=new Ejd;Ajd(d,0,e);Cjd(d,c);ye(b,d)}} -function U2b(a,b,c){var d,e,f,g;g=Y2b(a);d=g.d;e=g.c;f=a.n;b&&(f.a=f.a-d.b-e.a);c&&(f.b=f.b-d.d-e.b)} -function OOb(a,b){var c,d;c=a.f.c.length;d=b.f.c.length;if(c<d){return -1}if(c==d){return 0}return 1} -function S0b(a){if(a.b.c.length!=0&&!!RD(Vmb(a.b,0),72).a){return RD(Vmb(a.b,0),72).a}return R0b(a)} -function fr(a){var b;if(a){b=a;if(b.dc()){throw Adb(new Dvb)}return b.Xb(b.gc()-1)}return Fr(a.Kc())} -function Dib(a){var b;Ddb(a,0)<0&&(a=Qdb(a));return b=Ydb(Udb(a,32)),64-(b!=0?ngb(b):ngb(Ydb(a))+32)} -function pBb(){gBb();if(dBb){return new oBb(null)}return ZAb(_Ab(),'com.google.common.base.Strings')} -function eyd(a,b,c,d){if(c==1){return !a.n&&(a.n=new C5d(I4,a,1,7)),rLd(a.n,b,d)}return Bxd(a,b,c,d)} -function eBd(a,b){var c,d;d=(c=new _9d,c);PAd(d,b);WGd((!a.A&&(a.A=new iie(z7,a,7)),a.A),d);return d} -function xEd(a,b,c){var d,e,f,g;f=null;g=b;e=wDd(g,iIe);d=new JEd(a,c);f=(LDd(d.a,d.b,e),e);return f} -function iXd(a){var b;if(!a.a||(a.Bb&1)==0&&a.a.Vh()){b=WVd(a);ZD(b,156)&&(a.a=RD(b,156))}return a.a} -function Be(a,b){var c,d;uFb(b);for(d=b.Kc();d.Ob();){c=d.Pb();if(!a.Hc(c)){return false}}return true} -function sD(a,b){var c,d,e;c=a.l+b.l;d=a.m+b.m+(c>>22);e=a.h+b.h+(d>>22);return hD(c&dxe,d&dxe,e&exe)} -function DD(a,b){var c,d,e;c=a.l-b.l;d=a.m-b.m+(c>>22);e=a.h-b.h+(d>>22);return hD(c&dxe,d&dxe,e&exe)} -function Jpc(a){var b,c;Hpc(a);for(c=new Anb(a.d);c.a<c.c.c.length;){b=RD(ynb(c),105);!!b.i&&Ipc(b)}} -function zdb(a){var b;if(ZD(a,82)){return a}b=a&&a.__java$exception;if(!b){b=new Cz(a);gA(b)}return b} -function BGd(a){if(ZD(a,193)){return RD(a,123)}else if(!a){throw Adb(new Ogb(HIe))}else{return null}} -function skb(a){if(a.a.Ob()){return true}if(a.a!=a.e){return false}a.a=new wtb(a.f.f);return a.a.Ob()} -function kmb(a,b){if(b==null){return false}while(a.a!=a.b){if(pb(b,Imb(a))){return true}}return false} -function dHb(a,b){if(!a||!b||a==b){return false}return tGb(a.d.c,b.d.c+b.d.b)&&tGb(b.d.c,a.d.c+a.d.b)} -function Tmb(a,b){var c,d;c=b.Pc();d=c.length;if(d==0){return false}YEb(a.c,a.c.length,c);return true} -function NBb(a,b,c){var d,e;for(e=b.vc().Kc();e.Ob();){d=RD(e.Pb(),44);a.yc(d.ld(),d.md(),c)}return a} -function $Wc(a){var b,c,d;b=new Yub;for(d=Sub(a.d,0);d.b!=d.d.c;){c=RD(evb(d),65);Mub(b,c.c)}return b} -function Pdc(a,b){var c,d;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),72);pQb(c,(Ywc(),swc),b)}} -function L9c(a,b,c){var d,e;for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),27);Byd(d,d.i+b,d.j+c)}} -function Nb(a,b){if(!a){throw Adb(new agb(hc('value already present: %s',cD(WC(jJ,1),rve,1,5,[b]))))}} -function Aid(a,b,c,d,e){tid();return $wnd.Math.min(Lid(a,b,c,d,e),Lid(c,d,a,b,fjd(new rjd(e.a,e.b))))} -function Rdd(a,b,c,d){RD(c.b,68);RD(c.b,68);RD(d.b,68);RD(d.b,68);RD(d.b,68);Umb(d.a,new Wdd(a,b,d))} -function NGb(a,b){a.d==(Cmd(),ymd)||a.d==Bmd?RD(b.a,60).c.Fc(RD(b.b,60)):RD(b.b,60).c.Fc(RD(b.a,60))} -function Ued(a,b){var c;c=ev(b.a.gc());FDb(PDb(new SDb(null,new Swb(b,1)),a.i),new ffd(a,c));return c} -function fBd(a){var b,c;c=(b=new _9d,b);PAd(c,'T');WGd((!a.d&&(a.d=new iie(z7,a,11)),a.d),c);return c} -function cHd(a){var b,c,d,e;b=1;for(c=0,e=a.gc();c<e;++c){d=a.Vi(c);b=31*b+(d==null?0:tb(d))}return b} -function cj(a,b,c,d){var e;Pb(b,a.e.Rd().gc());Pb(c,a.c.Rd().gc());e=a.a[b][c];bD(a.a[b],c,d);return e} -function cD(a,b,c,d,e){e.Rm=a;e.Sm=b;e.Tm=keb;e.__elementTypeId$=c;e.__elementTypeCategory$=d;return e} -function vec(){vec=geb;uec=new xec(LAe,0);sec=new xec(oBe,1);tec=new xec(pBe,2);rec=new xec('BOTH',3)} -function enc(){enc=geb;anc=new fnc(Kye,0);bnc=new fnc(Nye,1);cnc=new fnc(Oye,2);dnc=new fnc('TOP',3)} -function nZb(){nZb=geb;jZb=new qZb('Q1',0);mZb=new qZb('Q4',1);kZb=new qZb('Q2',2);lZb=new qZb('Q3',3)} -function DFc(){DFc=geb;BFc=new EFc('OFF',0);CFc=new EFc('SINGLE_EDGE',1);AFc=new EFc('MULTI_EDGE',2)} -function ldd(){ldd=geb;kdd=new ndd('MINIMUM_SPANNING_TREE',0);jdd=new ndd('MAXIMUM_SPANNING_TREE',1)} -function hed(){hed=geb;new jGd('org.eclipse.elk.addLayoutConfig');fed=new sed;eed=new qed;ged=new ved} -function EGd(a){var b,c;c=(bvd(),b=new Rzd,b);!!a&&WGd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),c);return c} -function N2c(a){var b,c,d,e;e=new bnb;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),27);b=Q2c(c);Tmb(e,b)}return e} -function Jr(a,b){var c,d;Rb(b,'predicate');for(d=0;a.Ob();d++){c=a.Pb();if(b.Lb(c)){return d}}return -1} -function xSd(a,b){var c,d;d=0;if(a<64&&a<=b){b=b<64?b:63;for(c=a;c<=b;c++){d=Rdb(d,Sdb(1,c))}}return d} -function oQc(a,b){var c,d;c=a.c;d=b.e[a.p];if(d<c.a.c.length-1){return RD(Vmb(c.a,d+1),10)}return null} -function Bob(a){yob();var b,c,d;d=0;for(c=a.Kc();c.Ob();){b=c.Pb();d=d+(b!=null?tb(b):0);d=d|0}return d} -function wsb(a){var b,c,d;b=RD(a.e&&a.e(),9);d=(c=b.slice(),RD(dD(c,b),9));return new Fsb(b,d,b.length)} -function Bdd(a,b,c){var d;akb(a.a);Umb(c.i,new Mdd(a));d=new $Fb(RD(Wjb(a.a,b.b),68));Add(a,d,b);c.f=d} -function bgc(a){var b;X0b(a,true);b=Awe;nQb(a,(yCc(),KBc))&&(b+=RD(mQb(a,KBc),17).a);pQb(a,KBc,sgb(b))} -function hB(a){var b;b=new dB;b.a=a;b.b=fB(a);b.c=$C(qJ,Nve,2,2,6,1);b.c[0]=gB(a);b.c[1]=gB(a);return b} -function Z7b(a){var b,c,d;c=a.n;d=a.o;b=a.d;return new Uid(c.a-b.b,c.b-b.d,d.a+(b.b+b.c),d.b+(b.d+b.a))} -function UQb(a,b){if(!a||!b||a==b){return false}return $y(a.b.c,b.b.c+b.b.b)<0&&$y(b.b.c,a.b.c+a.b.b)<0} -function Qnd(a){switch(a.g){case 1:return Mnd;case 2:return Lnd;case 3:return Nnd;default:return Ond;}} -function mec(a){switch(RD(mQb(a,(yCc(),UAc)),171).g){case 2:case 4:return true;default:return false;}} -function aHb(a,b,c){switch(c.g){case 2:a.b=b;break;case 1:a.c=b;break;case 4:a.d=b;break;case 3:a.a=b;}} -function Exd(a,b){switch(b){case 0:!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0));a.o.c.$b();return;}$vd(a,b)} -function Mad(a,b){var c,d;c=RD(RD(Wjb(a.g,b.a),42).a,68);d=RD(RD(Wjb(a.g,b.b),42).a,68);return SQb(c,d)} -function XGd(a,b,c){var d;d=a.gc();if(b>d)throw Adb(new aMd(b,d));a.Si()&&(c=bHd(a,c));return a.Ei(b,c)} -function eQb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){PPb(a,f,g)||TPb(a,f,g,true,false)}}} -function uid(a){tid();var b,c,d;c=$C(l3,Nve,8,2,0,1);d=0;for(b=0;b<2;b++){d+=0.5;c[b]=Cid(d,a)}return c} -function xD(a){var b,c,d;b=~a.l+1&dxe;c=~a.m+(b==0?1:0)&dxe;d=~a.h+(b==0&&c==0?1:0)&exe;return hD(b,c,d)} -function mgb(a){var b;if(a<0){return qwe}else if(a==0){return 0}else{for(b=hwe;(b&a)==0;b>>=1);return b}} -function zSd(a,b,c){if(a>=128)return false;return a<64?Pdb(Cdb(Sdb(1,a),c),0):Pdb(Cdb(Sdb(1,a-64),b),0)} -function oQb(a,b,c){return c==null?(!a.q&&(a.q=new Tsb),_jb(a.q,b)):(!a.q&&(a.q=new Tsb),Zjb(a.q,b,c)),a} -function pQb(a,b,c){c==null?(!a.q&&(a.q=new Tsb),_jb(a.q,b)):(!a.q&&(a.q=new Tsb),Zjb(a.q,b,c));return a} -function KTb(a){var b,c;c=new gUb;kQb(c,a);pQb(c,(JVb(),HVb),a);b=new Tsb;MTb(a,c,b);LTb(a,c,b);return c} -function cIc(a){var b,c;b=a.t-a.k[a.o.p]*a.d+a.j[a.o.p]>a.f;c=a.u+a.e[a.o.p]*a.d>a.f*a.s*a.d;return b||c} -function qmc(a,b){var c,d,e,f;c=false;d=a.a[b].length;for(f=0;f<d-1;f++){e=f+1;c=c|rmc(a,b,f,e)}return c} -function Emc(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;d<e;++d){b=c[d];Jmc(a,b,(qpd(),npd));Jmc(a,b,Yod)}} -function tvc(){tvc=geb;svc=ss((ovc(),cD(WC(iX,1),jwe,259,0,[fvc,hvc,ivc,jvc,kvc,lvc,nvc,evc,gvc,mvc])))} -function fEc(){fEc=geb;eEc=ss((aEc(),cD(WC(vX,1),jwe,243,0,[$Dc,VDc,YDc,WDc,XDc,SDc,ZDc,_Dc,TDc,UDc])))} -function huc(){huc=geb;fuc=new iuc(LAe,0);euc=new iuc('INCOMING_ONLY',1);guc=new iuc('OUTGOING_ONLY',2)} -function HC(){HC=geb;GC={'boolean':IC,'number':JC,'string':LC,'object':KC,'function':KC,'undefined':MC}} -function pfb(){++kfb;this.o=null;this.k=null;this.j=null;this.d=null;this.b=null;this.n=null;this.a=null} -function pj(a,b){this.c=a;this.d=b;this.b=this.d/this.c.c.Rd().gc()|0;this.a=this.d%this.c.c.Rd().gc()} -function R$d(a,b){this.b=a;N$d.call(this,(RD(QHd(xYd((lTd(),kTd).o),10),19),b.i),b.g);this.a=(lYd(),kYd)} -function vB(a,b,c){this.q=new $wnd.Date;this.q.setFullYear(a+Owe,b,c);this.q.setHours(0,0,0,0);mB(this,0)} -function ckb(a,b){mFb(a>=0,'Negative initial capacity');mFb(b>=0,'Non-positive load factor');akb(this)} -function iib(a,b,c,d,e){var f,g;g=a.length;f=c.length;if(b<0||d<0||e<0||b+e>g||d+e>f){throw Adb(new ueb)}} -function zob(a,b){yob();var c,d,e,f,g;g=false;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];g=g|a.Fc(c)}return g} -function Wyb(a,b,c){var d,e;d=new Fzb(b,c);e=new Gzb;a.b=Uyb(a,a.b,d,e);e.b||++a.c;a.b.b=false;return e.d} -function omb(a){var b;b=a.a[a.b];if(b==null){return null}bD(a.a,a.b,null);a.b=a.b+1&a.a.length-1;return b} -function oD(a){var b,c;c=ngb(a.h);if(c==32){b=ngb(a.m);return b==32?ngb(a.l)+32:b+20-10}else{return c-12}} -function $5d(a){var b;if(!a.c||(a.Bb&1)==0&&(a.c.Db&64)!=0){b=WVd(a);ZD(b,90)&&(a.c=RD(b,29))}return a.c} -function OGb(a){var b,c;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.d.c=-b.d.c-b.d.b}IGb(a)} -function zYb(a){var b,c;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);b.g.c=-b.g.c-b.g.b}uYb(a)} -function Jmc(a,b,c){var d,e,f,g;g=aMc(b,c);f=0;for(e=g.Kc();e.Ob();){d=RD(e.Pb(),12);Zjb(a.c,d,sgb(f++))}} -function qMc(a,b,c){var d;d=new bnb;sMc(a,b,d,(qpd(),Xod),true,false);sMc(a,c,d,ppd,false,false);return d} -function xjd(a){var b,c,d,e,f;b=new pjd;for(d=a,e=0,f=d.length;e<f;++e){c=d[e];b.a+=c.a;b.b+=c.b}return b} -function CEd(a,b,c){var d,e,f,g;f=null;g=b;e=wDd(g,'labels');d=new fFd(a,c);f=(bEd(d.a,d.b,e),e);return f} -function Jee(a,b,c,d){var e;e=Ree(a,b,c,d);if(!e){e=Iee(a,c,d);if(!!e&&!Eee(a,b,e)){return null}}return e} -function Mee(a,b,c,d){var e;e=See(a,b,c,d);if(!e){e=Lee(a,c,d);if(!!e&&!Eee(a,b,e)){return null}}return e} -function Cb(a,b,c){Qb(b);if(c.Ob()){Vhb(b,Fb(c.Pb()));while(c.Ob()){Vhb(b,a.a);Vhb(b,Fb(c.Pb()))}}return b} -function Xb(a,b){var c;for(c=0;c<a.a.a.length;c++){if(!RD(kob(a.a,c),178).Lb(b)){return false}}return true} -function fB(a){var b;if(a==0){return 'Etc/GMT'}if(a<0){a=-a;b='Etc/GMT-'}else{b='Etc/GMT+'}return b+iB(a)} -function DA(a){var b;if(a.b<=0){return false}b=qhb('MLydhHmsSDkK',Fhb(ihb(a.c,0)));return b>1||b>=0&&a.b<3} -function nD(a){var b,c,d;b=~a.l+1&dxe;c=~a.m+(b==0?1:0)&dxe;d=~a.h+(b==0&&c==0?1:0)&exe;a.l=b;a.m=c;a.h=d} -function Cob(a){yob();var b,c,d;d=1;for(c=a.Kc();c.Ob();){b=c.Pb();d=31*d+(b!=null?tb(b):0);d=d|0}return d} -function kD(a,b,c,d,e){var f;f=BD(a,b);c&&nD(f);if(e){a=mD(a,b);d?(eD=xD(a)):(eD=hD(a.l,a.m,a.h))}return f} -function Qlc(a,b,c){a.g=Wlc(a,b,(qpd(),Xod),a.b);a.d=Wlc(a,c,Xod,a.b);if(a.g.c==0||a.d.c==0){return}Tlc(a)} -function Rlc(a,b,c){a.g=Wlc(a,b,(qpd(),ppd),a.j);a.d=Wlc(a,c,ppd,a.j);if(a.g.c==0||a.d.c==0){return}Tlc(a)} -function Xyd(a,b){switch(b){case 7:return !!a.e&&a.e.i!=0;case 8:return !!a.d&&a.d.i!=0;}return wyd(a,b)} -function STb(a,b){switch(b.g){case 0:ZD(a.b,641)||(a.b=new tUb);break;case 1:ZD(a.b,642)||(a.b=new zUb);}} -function tbd(a){switch(a.g){case 0:return new _dd;default:throw Adb(new agb(eGe+(a.f!=null?a.f:''+a.g)));}} -function bdd(a){switch(a.g){case 0:return new vdd;default:throw Adb(new agb(eGe+(a.f!=null?a.f:''+a.g)));}} -function LCc(a,b,c){return !QDb(CDb(new SDb(null,new Swb(a.c,16)),new PAb(new gsd(b,c)))).Bd((xDb(),wDb))} -function mWc(a,b){return cjd(jWc(RD(mQb(b,(h_c(),H$c)),88)),new rjd(a.c.e.a-a.b.e.a,a.c.e.b-a.b.e.b))<=0} -function dve(a,b){while(a.g==null&&!a.c?sId(a):a.g==null||a.i!=0&&RD(a.g[a.i-1],51).Ob()){mFd(b,tId(a))}} -function sYb(a){var b,c;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);b.f.$b()}NYb(a.b,a);tYb(a)} -function Ijd(a){var b,c,d;b=new Ejd;for(d=Sub(a,0);d.b!=d.d.c;){c=RD(evb(d),8);hu(b,0,new sjd(c))}return b} -function DDb(a){var b;LCb(a);b=new IEb;if(a.a.Bd(b)){return Kvb(),new Ovb(uFb(b.a))}return Kvb(),Kvb(),Jvb} -function Dxd(a,b,c){switch(b){case 0:!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0));CVd(a.o,c);return;}Wvd(a,b,c)} -function bXc(a,b,c){this.g=a;this.e=new pjd;this.f=new pjd;this.d=new Yub;this.b=new Yub;this.a=b;this.c=c} -function V9c(a,b,c,d){this.b=new bnb;this.n=new bnb;this.i=d;this.j=c;this.s=a;this.t=b;this.r=0;this.d=0} -function gHd(a,b){if(!a.Li()&&b==null){throw Adb(new agb("The 'no null' constraint is violated"))}return b} -function ohb(a){var b,c;b=0;for(c=0;c<a.length;c++){b=(b<<5)-b+(BFb(c,a.length),a.charCodeAt(c))|0}return b} -function Myb(a,b){var c,d,e;e=a.b;while(e){c=a.a.Ne(b,e.d);if(c==0){return e}d=c<0?0:1;e=e.a[d]}return null} -function LBb(a,b,c){var d,e;d=(Geb(),SSb(c)?true:false);e=RD(b.xc(d),15);if(!e){e=new bnb;b.zc(d,e)}e.Fc(c)} -function q6c(a,b){var c,d;c=RD(Gxd(a,(X7c(),A7c)),17).a;d=RD(Gxd(b,A7c),17).a;return c==d?-1:c<d?-1:c>d?1:0} -function ICc(a){Rmb(a.c,(hed(),fed));if(_y(a.a,Kfb(UD(iGd((QCc(),OCc)))))){return new asd}return new csd(a)} -function fs(a){while(!a.d||!a.d.Ob()){if(!!a.b&&!nmb(a.b)){a.d=RD(smb(a.b),51)}else{return null}}return a.d} -function BVc(a){switch(a.g){case 1:return EEe;default:case 2:return 0;case 3:return Gze;case 4:return FEe;}} -function fte(){Vse();var a;if(Cse)return Cse;a=Zse(hte('M',true));a=$se(hte('M',false),a);Cse=a;return Cse} -function ttd(){ttd=geb;qtd=new utd('ELK',0);rtd=new utd('JSON',1);ptd=new utd('DOT',2);std=new utd('SVG',3)} -function TEc(){TEc=geb;SEc=new UEc('STACKED',0);QEc=new UEc('REVERSE_STACKED',1);REc=new UEc('SEQUENCED',2)} -function LZc(){LZc=geb;KZc=new MZc(LAe,0);JZc=new MZc('MIDDLE_TO_MIDDLE',1);IZc=new MZc('AVOID_OVERLAP',2)} -function sgc(){sgc=geb;qgc=new Lgc;rgc=new Ngc;pgc=new Dgc;ogc=new Pgc;ngc=new Hgc;mgc=(uFb(ngc),new nrb)} -function vnd(){vnd=geb;tnd=new A3b(15);snd=new mGd((umd(),tld),tnd);und=Qld;ond=Ekd;pnd=kld;rnd=nld;qnd=mld} -function wgd(a,b){var c,d,e,f,g;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];g=new Ggd(a);c.hf(g);Bgd(g)}akb(a.f)} -function xw(a,b){var c;if(b===a){return true}if(ZD(b,229)){c=RD(b,229);return pb(a.Zb(),c.Zb())}return false} -function Q_b(a,b){if(R_b(a,b)){Rc(a.b,RD(mQb(b,(Ywc(),ewc)),21),b);Mub(a.a,b);return true}else{return false}} -function u6b(a){var b,c;b=RD(mQb(a,(Ywc(),Iwc)),10);if(b){c=b.c;Ymb(c.a,b);c.a.c.length==0&&Ymb(Y2b(b).b,c)}} -function dfc(a,b){if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return RD(mQb(b,zwc),17).a-RD(mQb(a,zwc),17).a}return 0} -function ifc(a,b){if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return RD(mQb(a,zwc),17).a-RD(mQb(b,zwc),17).a}return 0} -function kBb(a){if(dBb){return $C(JL,Xxe,581,0,0,1)}return RD(anb(a.a,$C(JL,Xxe,581,a.a.c.length,0,1)),856)} -function yn(a,b,c,d){fn();return new Nx(cD(WC(UK,1),Zve,44,0,[(ck(a,b),new gp(a,b)),(ck(c,d),new gp(c,d))]))} -function bBd(a,b,c){var d,e;e=(d=new q4d,d);yBd(e,b,c);WGd((!a.q&&(a.q=new C5d(s7,a,11,10)),a.q),e);return e} -function xAd(a){var b,c,d,e;e=meb(pAd,a);c=e.length;d=$C(qJ,Nve,2,c,6,1);for(b=0;b<c;++b){d[b]=e[b]}return d} -function jwb(a,b){var c;if(b*2+1>=a.b.c.length){return}jwb(a,2*b+1);c=2*b+2;c<a.b.c.length&&jwb(a,c);kwb(a,b)} -function sKc(a,b){var c,d;for(d=Sub(a,0);d.b!=d.d.c;){c=RD(evb(d),219);if(c.e.length>0){b.Cd(c);c.i&&zKc(c)}}} -function Ejb(a,b,c){var d;for(d=c-1;d>=0&&a[d]===b[d];d--);return d<0?0:Ldb(Cdb(a[d],yxe),Cdb(b[d],yxe))?-1:1} -function it(a,b,c){var d,e;this.g=a;this.c=b;this.a=this;this.d=this;e=Wp(c);d=$C(UG,ewe,227,e,0,1);this.b=d} -function fQb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){if(PPb(a,f,g)){return true}}}return false} -function Dc(a,b){var c,d;for(d=a.Zb().Cc().Kc();d.Ob();){c=RD(d.Pb(),16);if(c.Hc(b)){return true}}return false} -function iu(a,b,c){var d,e,f,g;uFb(c);g=false;f=a.fd(b);for(e=c.Kc();e.Ob();){d=e.Pb();f.Rb(d);g=true}return g} -function NMd(a,b){var c,d;d=RD(Ywd(a.a,4),129);c=$C(d6,IJe,424,b,0,1);d!=null&&hib(d,0,c,0,d.length);return c} -function hSd(a,b){var c;c=new lSd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,b);a.e!=null||(c.c=a);return c} -function Tv(a,b){var c;if(a===b){return true}else if(ZD(b,85)){c=RD(b,85);return Rx(gn(a),c.vc())}return false} -function Vjb(a,b,c){var d,e;for(e=c.Kc();e.Ob();){d=RD(e.Pb(),44);if(a.Be(b,d.md())){return true}}return false} -function lmc(a,b,c){if(!a.d[b.p][c.p]){kmc(a,b,c);a.d[b.p][c.p]=true;a.d[c.p][b.p]=true}return a.a[b.p][c.p]} -function vMc(a,b){var c;if(!a||a==b||!nQb(b,(Ywc(),pwc))){return false}c=RD(mQb(b,(Ywc(),pwc)),10);return c!=a} -function Bhe(a){switch(a.i){case 2:{return true}case 1:{return false}case -1:{++a.c}default:{return a.$l()}}} -function Che(a){switch(a.i){case -2:{return true}case -1:{return false}case 1:{--a.c}default:{return a._l()}}} -function bgb(a){oz.call(this,'The given string does not match the expected format for individual spacings.',a)} -function J6c(a,b){var c;b.Ug('Min Size Preprocessing',1);c=vsd(a);Ixd(a,(X6c(),U6c),c.a);Ixd(a,R6c,c.b);b.Vg()} -function Djd(a){var b,c,d;b=0;d=$C(l3,Nve,8,a.b,0,1);c=Sub(a,0);while(c.b!=c.d.c){d[b++]=RD(evb(c),8)}return d} -function Ajd(a,b,c){var d,e,f;d=new Yub;for(f=Sub(c,0);f.b!=f.d.c;){e=RD(evb(f),8);Mub(d,new sjd(e))}iu(a,b,d)} -function az(a,b){var c;c=Bdb(a,b);if(Ldb($db(a,b),0)|Jdb($db(a,c),0)){return c}return Bdb(Sve,$db(Udb(c,63),1))} -function le(a,b){var c,d;c=RD(a.d.Bc(b),16);if(!c){return null}d=a.e.hc();d.Gc(c);a.e.d-=c.gc();c.$b();return d} -function Dyb(a){var b;b=a.a.c.length;if(b>0){return lyb(b-1,a.a.c.length),Xmb(a.a,b-1)}else{throw Adb(new Srb)}} -function nFb(a,b,c){if(a>b){throw Adb(new agb(_xe+a+aye+b))}if(a<0||b>c){throw Adb(new xeb(_xe+a+bye+b+Qxe+c))}} -function yXd(a,b){if(a.D==null&&a.B!=null){a.D=a.B;a.B=null}JXd(a,b==null?null:(uFb(b),b));!!a.C&&a.hl(null)} -function JCc(a,b){var c;c=iGd((QCc(),OCc))!=null&&b.Sg()!=null?Kfb(UD(b.Sg()))/Kfb(UD(iGd(OCc))):1;Zjb(a.b,b,c)} -function $Lc(a,b){var c,d;d=a.c[b];if(d==0){return}a.c[b]=0;a.d-=d;c=b+1;while(c<a.a.length){a.a[c]-=d;c+=c&-c}} -function VHd(a){var b;++a.j;if(a.i==0){a.g=null}else if(a.i<a.g.length){b=a.g;a.g=a.aj(a.i);hib(b,0,a.g,0,a.i)}} -function Ned(a,b,c){if(b<0){throw Adb(new veb(zGe+b))}if(b<a.j.c.length){$mb(a.j,b,c)}else{Led(a,b);Rmb(a.j,c)}} -function uhd(a){if(!a.a||(a.a.i&8)==0){throw Adb(new dgb('Enumeration class expected for layout option '+a.f))}} -function y1d(a){var b;b=(!a.a&&(a.a=new C5d(l7,a,9,5)),a.a);if(b.i!=0){return N1d(RD(QHd(b,0),694))}return null} -function yr(a){var b;Qb(a);Mb(true,'numberToAdvance must be nonnegative');for(b=0;b<0&&gs(a);b++){hs(a)}return b} -function eSb(){eSb=geb;bSb=(VRb(),URb);aSb=new lGd(vze,bSb);_Rb=new jGd(wze);cSb=new jGd(xze);dSb=new jGd(yze)} -function s_c(){s_c=geb;r_c=new t_c(MAe,0);p_c=new t_c(QEe,1);q_c=new t_c('FAN',2);o_c=new t_c('CONSTRAINT',3)} -function g4c(){g4c=geb;d4c=new i4c(LAe,0);e4c=new i4c('RADIAL_COMPACTION',1);f4c=new i4c('WEDGE_COMPACTION',2)} -function lFc(){lFc=geb;iFc=new mFc('CONSERVATIVE',0);jFc=new mFc('CONSERVATIVE_SOFT',1);kFc=new mFc('SLOPPY',2)} -function xBb(){xBb=geb;uBb=new yBb('CONCURRENT',0);vBb=new yBb('IDENTITY_FINISH',1);wBb=new yBb('UNORDERED',2)} -function NXb(){NXb=geb;LXb=Wx(cD(WC(s3,1),jwe,88,0,[(Cmd(),ymd),zmd]));MXb=Wx(cD(WC(s3,1),jwe,88,0,[Bmd,xmd]))} -function rb(a){return bE(a)?qJ:_D(a)?VI:$D(a)?QI:YD(a)?a.Rm:aD(a)?a.Rm:a.Rm||Array.isArray(a)&&WC(hI,1)||hI} -function Qje(a){return !a?null:(a.i&1)!=0?a==xdb?QI:a==kE?bJ:a==jE?ZI:a==iE?VI:a==lE?eJ:a==wdb?lJ:a==gE?RI:SI:a} -function CIb(a){if(a.c!=a.b.b||a.i!=a.g.b){aFb(a.a.c,0);Tmb(a.a,a.b);Tmb(a.a,a.g);a.c=a.b.b;a.i=a.g.b}return a.a} -function vmb(a,b){var c,d;c=a.a.length-1;while(b!=a.b){d=b-1&c;bD(a.a,b,a.a[d]);b=d}bD(a.a,a.b,null);a.b=a.b+1&c} -function umb(a,b){var c,d;c=a.a.length-1;a.c=a.c-1&c;while(b!=a.c){d=b+1&c;bD(a.a,b,a.a[d]);b=d}bD(a.a,a.c,null)} -function Smb(a,b,c){var d,e;wFb(b,a.c.length);d=c.Pc();e=d.length;if(e==0){return false}YEb(a.c,b,d);return true} -function otb(a,b,c){var d,e,f,g;for(e=c,f=0,g=e.length;f<g;++f){d=e[f];if(a.b.Be(b,d.ld())){return d}}return null} -function Tnb(a){var b,c,d,e,f;f=1;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];f=31*f+(b!=null?tb(b):0);f=f|0}return f} -function ss(a){var b,c,d,e,f;b={};for(d=a,e=0,f=d.length;e<f;++e){c=d[e];b[':'+(c.f!=null?c.f:''+c.g)]=c}return b} -function tSd(a){var b,c;if(a==null)return null;for(b=0,c=a.length;b<c;b++){if(!GSd(a[b]))return a[b]}return null} -function gKb(a,b){if(!a){return 0}if(b&&!a.j){return 0}if(ZD(a,127)){if(RD(a,127).a.b==0){return 0}}return a.jf()} -function hKb(a,b){if(!a){return 0}if(b&&!a.k){return 0}if(ZD(a,127)){if(RD(a,127).a.a==0){return 0}}return a.kf()} -function orc(a,b){if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return hgb(RD(mQb(a,zwc),17).a,RD(mQb(b,zwc),17).a)}return 0} -function EHc(a){var b,c,d;d=0;for(c=new is(Mr(a.a.Kc(),new ir));gs(c);){b=RD(hs(c),18);b.c.i==b.d.i||++d}return d} -function Gad(a,b){var c,d,e;e=b-a.f;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),315);fad(c,c.e,c.f+e)}a.f=b} -function YVd(a,b){var c,d,e;d=a.Yk(b,null);e=null;if(b){e=(jTd(),c=new s2d,c);l2d(e,a.r)}d=XVd(a,e,d);!!d&&d.oj()} -function P0b(a,b){var c,d,e;c=a;e=0;do{if(c==b){return e}d=c.e;if(!d){throw Adb(new _fb)}c=Y2b(d);++e}while(true)} -function uRb(a){var b,c,d,e;d=a.b.a;for(c=d.a.ec().Kc();c.Ob();){b=RD(c.Pb(),567);e=new DSb(b,a.e,a.f);Rmb(a.g,e)}} -function DZb(a){var b;b=new XZb(a);t$b(a.a,BZb,new mob(cD(WC(wQ,1),rve,382,0,[b])));!!b.d&&Rmb(b.f,b.d);return b.f} -function M2b(a,b){var c;for(c=0;c<b.length;c++){if(a==(BFb(c,b.length),b.charCodeAt(c))){return true}}return false} -function BSd(a,b){return b<a.length&&(BFb(b,a.length),a.charCodeAt(b)!=63)&&(BFb(b,a.length),a.charCodeAt(b)!=35)} -function trc(a,b,c,d){nrc(this);this.c=$C(jR,WAe,10,a.a.c.length,0,1);this.e=b;anb(a.a,this.c);this.f=c;this.b=d} -function Cz(a){Az();ez(this);gz(this);this.e=a;hz(this,a);this.g=a==null?vve:jeb(a);this.a='';this.b=a;this.a=''} -function Pad(){this.a=new Qad;this.f=new Sad(this);this.b=new Uad(this);this.i=new Wad(this);this.e=new Yad(this)} -function Ks(){Js.call(this,new hub(Sv(16)));dk(2,Mve);this.b=2;this.a=new ct(null,null,0,null);Ss(this.a,this.a)} -function NC(a){HC();throw Adb(new aC("Unexpected typeof result '"+a+"'; please report this bug to the GWT team"))} -function AVc(a,b,c){if($wnd.Math.abs(b-a)<DEe||$wnd.Math.abs(c-a)<DEe){return true}return b-a>DEe?a-c>DEe:c-a>DEe} -function vjd(a,b){var c;for(c=0;c<b.length;c++){if(a==(BFb(c,b.length),b.charCodeAt(c))){return true}}return false} -function HSd(a){var b,c;if(a==null)return false;for(b=0,c=a.length;b<c;b++){if(!GSd(a[b]))return false}return true} -function M8c(a,b){var c,d,e;d=false;c=b.q.d;if(b.d<a.b){e=dad(b.q,a.b);if(b.q.d>e){ead(b.q,e);d=c!=b.q.d}}return d} -function C3c(a,b){var c,d,e,f,g,h,i,j;i=b.i;j=b.j;d=a.f;e=d.i;f=d.j;g=i-e;h=j-f;c=$wnd.Math.sqrt(g*g+h*h);return c} -function pBd(a,b){var c,d;d=Hvd(a);if(!d){!$Ad&&($Ad=new L5d);c=(gSd(),nSd(b));d=new Sde(c);WGd(d.El(),a)}return d} -function Sc(a,b){var c,d;c=RD(a.c.Bc(b),16);if(!c){return a.jc()}d=a.hc();d.Gc(c);a.d-=c.gc();c.$b();return a.mc(d)} -function tKc(a,b){var c,d;d=Kwb(a.d,1)!=0;c=true;while(c){c=false;c=b.c.mg(b.e,d);c=c|DKc(a,b,d,false);d=!d}yKc(a)} -function omc(a,b,c,d){var e,f;a.a=b;f=d?0:1;a.f=(e=new mmc(a.c,a.a,c,f),new Pmc(c,a.a,e,a.e,a.b,a.c==(RKc(),PKc)))} -function Imb(a){var b;sFb(a.a!=a.b);b=a.d.a[a.a];zmb(a.b==a.d.c&&b!=null);a.c=a.a;a.a=a.a+1&a.d.a.length-1;return b} -function Vib(a){var b;if(a.c!=0){return a.c}for(b=0;b<a.a.length;b++){a.c=a.c*33+(a.a[b]&-1)}a.c=a.c*a.e;return a.c} -function Oue(a){var b;if(!(a.c.c<0?a.a>=a.c.b:a.a<=a.c.b)){throw Adb(new Dvb)}b=a.a;a.a+=a.c.c;++a.b;return sgb(b)} -function h5b(a){var b;b=new y2b(a.a);kQb(b,a);pQb(b,(Ywc(),Awc),a);b.o.a=a.g;b.o.b=a.f;b.n.a=a.i;b.n.b=a.j;return b} -function tVc(a){return (qpd(),hpd).Hc(a.j)?Kfb(UD(mQb(a,(Ywc(),Swc)))):xjd(cD(WC(l3,1),Nve,8,0,[a.i.n,a.n,a.a])).b} -function ZJc(a){var b;b=vfd(XJc);RD(mQb(a,(Ywc(),kwc)),21).Hc((ovc(),kvc))&&pfd(b,(sXb(),pXb),(hcc(),Ybc));return b} -function M2c(a){var b,c,d,e;e=new _sb;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),27);b=P2c(c);ye(e,b)}return e} -function hIc(a){var b,c;for(c=new Anb(a.r);c.a<c.c.c.length;){b=RD(ynb(c),10);if(a.n[b.p]<=0){return b}}return null} -function LGb(a,b,c){var d,e;for(e=b.a.a.ec().Kc();e.Ob();){d=RD(e.Pb(),60);if(MGb(a,d,c)){return true}}return false} -function Rcc(a,b,c,d){var e,f;for(f=a.Kc();f.Ob();){e=RD(f.Pb(),72);e.n.a=b.a+(d.a-e.o.a)/2;e.n.b=b.b;b.b+=e.o.b+c}} -function hNb(a,b,c){var d;d=new rMb(a,b);Rc(a.r,b.ag(),d);if(c&&!Rod(a.u)){d.c=new TKb(a.d);Umb(b.Rf(),new kNb(d))}} -function Ddb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a-b;if(!isNaN(c)){return c}}return uD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b)} -function Iid(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} -function Jid(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} -function Vvd(a,b){var c,d,e,f;f=(e=a?Hvd(a):null,Pje((d=b,e?e.Gl():null,d)));if(f==b){c=Hvd(a);!!c&&c.Gl()}return f} -function g2d(a,b,c){var d,e;e=a.f;a.f=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,0,e,b);!c?(c=d):c.nj(d)}return c} -function e2d(a,b,c){var d,e;e=a.b;a.b=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,3,e,b);!c?(c=d):c.nj(d)}return c} -function rAd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,1,e,b);!c?(c=d):c.nj(d)}return c} -function SNd(a){var b,c,d,e;if(a!=null){for(c=0;c<a.length;++c){b=a[c];if(b){RD(b.g,379);e=b.i;for(d=0;d<e;++d);}}}} -function Vnb(a,b,c,d,e,f,g,h){var i;i=c;while(f<g){i>=d||b<c&&h.Ne(a[b],a[i])<=0?bD(e,f++,a[b++]):bD(e,f++,a[i++])}} -function Njb(a,b,c,d,e){if(b==0||d==0){return}b==1?(e[d]=Pjb(e,c,d,a[0])):d==1?(e[b]=Pjb(e,a,b,c[0])):Ojb(a,c,e,b,d)} -function w9c(a,b,c){var d,e,f,g;d=c/a.gc();e=0;for(g=a.Kc();g.Ob();){f=RD(g.Pb(),186);Gad(f,f.f+d*e);Dad(f,b,d);++e}} -function cad(a){var b,c,d;d=0;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),172);d=$wnd.Math.max(d,b.g)}return d} -function EKc(a){var b,c,d;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),219);b=c.c.kg()?c.f:c.a;!!b&&MLc(b,c.j)}} -function lDc(){lDc=geb;iDc=new nDc('DUMMY_NODE_OVER',0);jDc=new nDc('DUMMY_NODE_UNDER',1);kDc=new nDc('EQUAL',2)} -function mqd(){mqd=geb;kqd=new nqd('PARALLEL_NODE',0);jqd=new nqd('HIERARCHICAL_NODE',1);lqd=new nqd('ROOT_NODE',2)} -function Fnd(){Fnd=geb;Dnd=new Gnd('INHERIT',0);Cnd=new Gnd('INCLUDE_CHILDREN',1);End=new Gnd('SEPARATE_CHILDREN',2)} -function hyd(a,b){switch(b){case 1:!a.n&&(a.n=new C5d(I4,a,1,7));sLd(a.n);return;case 2:jyd(a,null);return;}Exd(a,b)} -function c9c(a){switch(a.g){case 0:return new R8c;case 1:return new o9c;case 2:return new X8c;default:return null;}} -function eq(a){_l();switch(a.c){case 0:return Px(),Ox;case 1:return new Fy(Ir(new Osb(a)));default:return new dq(a);}} -function go(a){_l();switch(a.gc()){case 0:return Px(),Ox;case 1:return new Fy(a.Kc().Pb());default:return new Qx(a);}} -function Pm(a){var b;switch(a.gc()){case 0:return sm;case 1:return new Dy(Qb(a.Xb(0)));default:b=a;return new Kx(b);}} -function sgb(a){var b,c;if(a>-129&&a<128){return ugb(),b=a+128,c=tgb[b],!c&&(c=tgb[b]=new fgb(a)),c}return new fgb(a)} -function bhb(a){var b,c;if(a>-129&&a<128){return dhb(),b=a+128,c=chb[b],!c&&(c=chb[b]=new Xgb(a)),c}return new Xgb(a)} -function M$b(a,b){var c;if(a.a.c.length>0){c=RD(Vmb(a.a,a.a.c.length-1),579);if(Q_b(c,b)){return}}Rmb(a.a,new S_b(b))} -function Ekc(a){lkc();var b,c;b=a.d.c-a.e.c;c=RD(a.g,154);Umb(c.b,new Ykc(b));Umb(c.c,new $kc(b));xgb(c.i,new alc(b))} -function Mlc(a){var b;b=new bib;b.a+='VerticalSegment ';Yhb(b,a.e);b.a+=' ';Zhb(b,Eb(new Gb,new Anb(a.k)));return b.a} -function Fmc(a,b){var c,d,e;c=0;for(e=b3b(a,b).Kc();e.Ob();){d=RD(e.Pb(),12);c+=mQb(d,(Ywc(),Iwc))!=null?1:0}return c} -function VTc(a,b,c){var d,e,f;d=0;for(f=Sub(a,0);f.b!=f.d.c;){e=Kfb(UD(evb(f)));if(e>c){break}else e>=b&&++d}return d} -function Wv(b,c){Qb(b);try{return b._b(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return false}else throw Adb(a)}} -function Nk(b,c){Qb(b);try{return b.Hc(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return false}else throw Adb(a)}} -function Ok(b,c){Qb(b);try{return b.Mc(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return false}else throw Adb(a)}} -function Xv(b,c){Qb(b);try{return b.xc(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return null}else throw Adb(a)}} -function Yv(b,c){Qb(b);try{return b.Bc(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return null}else throw Adb(a)}} -function aMc(a,b){switch(b.g){case 2:case 1:return b3b(a,b);case 3:case 4:return hv(b3b(a,b));}return yob(),yob(),vob} -function QAd(a){var b;if((a.Db&64)!=0)return awd(a);b=new Shb(awd(a));b.a+=' (name: ';Nhb(b,a.zb);b.a+=')';return b.a} -function Fgd(a){var b;b=RD(cub(a.c.c,''),233);if(!b){b=new fgd(ogd(ngd(new pgd,''),'Other'));dub(a.c.c,'',b)}return b} -function hBd(a,b,c){var d,e;e=a.sb;a.sb=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,4,e,b);!c?(c=d):c.nj(d)}return c} -function ZVd(a,b,c){var d,e;e=a.r;a.r=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,8,e,a.r);!c?(c=d):c.nj(d)}return c} -function q5d(a,b,c){var d,e;d=new P3d(a.e,4,13,(e=b.c,e?e:(JTd(),wTd)),null,fZd(a,b),false);!c?(c=d):c.nj(d);return c} -function p5d(a,b,c){var d,e;d=new P3d(a.e,3,13,null,(e=b.c,e?e:(JTd(),wTd)),fZd(a,b),false);!c?(c=d):c.nj(d);return c} -function Oee(a,b){var c,d;c=RD(b,691);d=c.el();!d&&c.fl(d=ZD(b,90)?new afe(a,RD(b,29)):new mfe(a,RD(b,156)));return d} -function KHd(a,b,c){var d;a._i(a.i+1);d=a.Zi(b,c);b!=a.i&&hib(a.g,b,a.g,b+1,a.i-b);bD(a.g,b,d);++a.i;a.Mi(b,c);a.Ni()} -function Hyb(a,b){var c;if(b.a){c=b.a.a.length;!a.a?(a.a=new dib(a.d)):Zhb(a.a,a.b);Xhb(a.a,b.a,b.d.length,c)}return a} -function wib(a,b){var c;a.c=b;a.a=pjb(b);a.a<54&&(a.f=(c=b.d>1?DFb(b.a[0],b.a[1]):DFb(b.a[0],0),Xdb(b.e>0?c:Odb(c))))} -function MDb(a,b){var c;c=new IEb;if(!a.a.Bd(c)){LCb(a);return Kvb(),Kvb(),Jvb}return Kvb(),new Ovb(uFb(LDb(a,c.a,b)))} -function t9b(a,b){var c;if(a.c.length==0){return}c=RD(anb(a,$C(jR,WAe,10,a.c.length,0,1)),199);Znb(c,new F9b);q9b(c,b)} -function z9b(a,b){var c;if(a.c.length==0){return}c=RD(anb(a,$C(jR,WAe,10,a.c.length,0,1)),199);Znb(c,new K9b);q9b(c,b)} -function pb(a,b){return bE(a)?lhb(a,b):_D(a)?Lfb(a,b):$D(a)?(uFb(a),dE(a)===dE(b)):YD(a)?a.Fb(b):aD(a)?mb(a,b):Hz(a,b)} -function Cvd(a,b,c){if(b<0){Tvd(a,c)}else{if(!c.rk()){throw Adb(new agb(KHe+c.xe()+LHe))}RD(c,69).wk().Ek(a,a.hi(),b)}} -function xFb(a,b,c){if(a<0||b>c){throw Adb(new veb(_xe+a+bye+b+', size: '+c))}if(a>b){throw Adb(new agb(_xe+a+aye+b))}} -function oVd(a){var b;if((a.Db&64)!=0)return awd(a);b=new Shb(awd(a));b.a+=' (source: ';Nhb(b,a.d);b.a+=')';return b.a} -function JSd(a){if(a>=65&&a<=70){return a-65+10}if(a>=97&&a<=102){return a-97+10}if(a>=48&&a<=57){return a-48}return 0} -function lMb(a){hMb();var b,c,d,e;for(c=nMb(),d=0,e=c.length;d<e;++d){b=c[d];if(Wmb(b.a,a,0)!=-1){return b}}return gMb} -function zde(a,b){var c,d,e,f;b.ej(a.a);f=RD(Ywd(a.a,8),2035);if(f!=null){for(c=f,d=0,e=c.length;d<e;++d){null.Um()}}} -function _Vd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,2,c,b))} -function EYd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,8,c,b))} -function j1d(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,8,c,b))} -function aWd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,3,c,b))} -function FYd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,9,c,b))} -function m2d(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,5,e,a.a);!c?(c=d):oKd(c,d)}return c} -function kle(a,b){var c;if(a.b==-1&&!!a.a){c=a.a.pk();a.b=!c?BYd(a.c.Dh(),a.a):a.c.Hh(a.a.Lj(),c)}return a.c.yh(a.b,b)} -function t0d(a,b){var c,d;for(d=new dMd(a);d.e!=d.i.gc();){c=RD(bMd(d),29);if(dE(b)===dE(c)){return true}}return false} -function a9b(a){var b,c;b=a.k;if(b==(r3b(),m3b)){c=RD(mQb(a,(Ywc(),hwc)),64);return c==(qpd(),Yod)||c==npd}return false} -function QCb(a){var b;b=RCb(a);if(Gdb(b.a,0)){return Tvb(),Tvb(),Svb}return Tvb(),new Yvb(Idb(b.a,0)?Orb(b)/Xdb(b.a):0)} -function Aib(a,b){this.e=b;this.a=Dib(a);this.a<54?(this.f=Xdb(a)):(this.c=(Pib(),Ddb(a,0)>=0?jjb(a):Xib(jjb(Odb(a)))))} -function G0b(a,b,c,d,e,f){this.e=new bnb;this.f=(BEc(),AEc);Rmb(this.e,a);this.d=b;this.a=c;this.b=d;this.f=e;this.c=f} -function bQb(a,b,c){a.n=YC(lE,[Nve,rxe],[376,28],14,[c,eE($wnd.Math.ceil(b/32))],2);a.o=b;a.p=c;a.j=b-1>>1;a.k=c-1>>1} -function ggb(a){a-=a>>1&1431655765;a=(a>>2&858993459)+(a&858993459);a=(a>>4)+a&252645135;a+=a>>8;a+=a>>16;return a&63} -function C4d(a,b){var c,d;for(d=new dMd(a);d.e!=d.i.gc();){c=RD(bMd(d),142);if(dE(b)===dE(c)){return true}}return false} -function Iee(a,b,c){var d,e,f;f=(e=N5d(a.b,b),e);if(f){d=RD(tfe(Pee(a,f),''),29);if(d){return Ree(a,d,b,c)}}return null} -function Lee(a,b,c){var d,e,f;f=(e=N5d(a.b,b),e);if(f){d=RD(tfe(Pee(a,f),''),29);if(d){return See(a,d,b,c)}}return null} -function IDd(a,b){var c;c=Ao(a.i,b);if(c==null){throw Adb(new CDd('Node did not exist in input.'))}wEd(b,c);return null} -function wvd(a,b){var c;c=wYd(a,b);if(ZD(c,331)){return RD(c,35)}throw Adb(new agb(KHe+b+"' is not a valid attribute"))} -function VGd(a,b,c){var d;d=a.gc();if(b>d)throw Adb(new aMd(b,d));if(a.Si()&&a.Hc(c)){throw Adb(new agb(LIe))}a.Gi(b,c)} -function w7b(a,b){b.Ug('Sort end labels',1);FDb(CDb(EDb(new SDb(null,new Swb(a.b,16)),new H7b),new J7b),new L7b);b.Vg()} -function Cmd(){Cmd=geb;Amd=new Gmd(Sye,0);zmd=new Gmd(Oye,1);ymd=new Gmd(Nye,2);xmd=new Gmd(Zye,3);Bmd=new Gmd('UP',4)} -function gbd(){gbd=geb;dbd=new hbd('P1_STRUCTURE',0);ebd=new hbd('P2_PROCESSING_ORDER',1);fbd=new hbd('P3_EXECUTION',2)} -function r0c(){r0c=geb;q0c=mfd(mfd(rfd(mfd(mfd(rfd(pfd(new ufd,(YVc(),VVc),(WYc(),VYc)),WVc),RYc),TYc),XVc),NYc),UYc)} -function s8b(a){switch(RD(mQb(a,(Ywc(),owc)),311).g){case 1:pQb(a,owc,(Gvc(),Dvc));break;case 2:pQb(a,owc,(Gvc(),Fvc));}} -function bUc(a){switch(a){case 0:return new mUc;case 1:return new cUc;case 2:return new hUc;default:throw Adb(new _fb);}} -function Fmd(a){switch(a.g){case 2:return zmd;case 1:return ymd;case 4:return xmd;case 3:return Bmd;default:return Amd;}} -function UNb(a,b){switch(a.b.g){case 0:case 1:return b;case 2:case 3:return new Uid(b.d,0,b.a,b.b);default:return null;}} -function rpd(a){switch(a.g){case 1:return ppd;case 2:return Yod;case 3:return Xod;case 4:return npd;default:return opd;}} -function spd(a){switch(a.g){case 1:return npd;case 2:return ppd;case 3:return Yod;case 4:return Xod;default:return opd;}} -function tpd(a){switch(a.g){case 1:return Xod;case 2:return npd;case 3:return ppd;case 4:return Yod;default:return opd;}} -function cyd(a,b,c,d){switch(b){case 1:return !a.n&&(a.n=new C5d(I4,a,1,7)),a.n;case 2:return a.k;}return Axd(a,b,c,d)} -function uLd(a,b,c){var d,e;if(a.Pj()){e=a.Qj();d=SHd(a,b,c);a.Jj(a.Ij(7,sgb(c),d,b,e));return d}else{return SHd(a,b,c)}} -function VNd(a,b){var c,d,e;if(a.d==null){++a.e;--a.f}else{e=b.ld();c=b.Bi();d=(c&lve)%a.d.length;iOd(a,d,XNd(a,d,c,e))}} -function xWd(a,b){var c;c=(a.Bb&gwe)!=0;b?(a.Bb|=gwe):(a.Bb&=-1025);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,10,c,b))} -function DWd(a,b){var c;c=(a.Bb&qxe)!=0;b?(a.Bb|=qxe):(a.Bb&=-4097);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,12,c,b))} -function EWd(a,b){var c;c=(a.Bb&bKe)!=0;b?(a.Bb|=bKe):(a.Bb&=-8193);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,15,c,b))} -function FWd(a,b){var c;c=(a.Bb&cKe)!=0;b?(a.Bb|=cKe):(a.Bb&=-2049);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,11,c,b))} -function zKc(a){var b;if(a.g){b=a.c.kg()?a.f:a.a;BKc(b.a,a.o,true);BKc(b.a,a.o,false);pQb(a.o,(yCc(),BBc),(Bod(),vod))}} -function Orc(a){var b;if(!a.a){throw Adb(new dgb('Cannot offset an unassigned cut.'))}b=a.c-a.b;a.b+=b;Qrc(a,b);Rrc(a,b)} -function JDd(a,b){var c;c=Wjb(a.k,b);if(c==null){throw Adb(new CDd('Port did not exist in input.'))}wEd(b,c);return null} -function Jje(a){var b,c;for(c=Kje(BXd(a)).Kc();c.Ob();){b=WD(c.Pb());if(bAd(a,b)){return USd((TSd(),SSd),b)}}return null} -function qJb(a){var b,c;for(c=a.p.a.ec().Kc();c.Ob();){b=RD(c.Pb(),218);if(b.f&&a.b[b.c]<-1.0E-10){return b}}return null} -function Lr(a){var b,c;c=Thb(new bib,91);b=true;while(a.Ob()){b||(c.a+=pve,c);b=false;Yhb(c,a.Pb())}return (c.a+=']',c).a} -function o_b(a){var b,c,d;b=new bnb;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),602);Tmb(b,RD(c.Cf(),16))}return b} -function TXb(a,b){var c,d;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),42);Ymb(a.b.b,c.b);hYb(RD(c.a,194),RD(c.b,86))}} -function aRb(a,b){var c;c=Qfb(a.b.c,b.b.c);if(c!=0){return c}c=Qfb(a.a.a,b.a.a);if(c!=0){return c}return Qfb(a.a.b,b.a.b)} -function Qfb(a,b){if(a<b){return -1}if(a>b){return 1}if(a==b){return a==0?Qfb(1/a,1/b):0}return isNaN(a)?isNaN(b)?0:1:-1} -function pmb(a){var b;b=a.a[a.c-1&a.a.length-1];if(b==null){return null}a.c=a.c-1&a.a.length-1;bD(a.a,a.c,null);return b} -function Dqe(a){var b,c,d;d=0;c=a.length;for(b=0;b<c;b++){a[b]==32||a[b]==13||a[b]==10||a[b]==9||(a[d++]=a[b])}return d} -function Nge(a,b){var c,d,e,f,g;g=pke(a.e.Dh(),b);f=0;c=RD(a.g,124);for(e=0;e<a.i;++e){d=c[e];g.am(d.Lk())&&++f}return f} -function tge(a,b,c){var d,e;e=ZD(b,102)&&(RD(b,19).Bb&txe)!=0?new She(b,a):new Phe(b,a);for(d=0;d<c;++d){Dhe(e)}return e} -function yrd(a,b,c){var d,e;if(a.c){Isd(a.c,b,c)}else{for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),163);yrd(d,b,c)}}} -function tGd(a,b,c){var d,e;d=RD(b.of(a.a),34);e=RD(c.of(a.a),34);return d!=null&&e!=null?Leb(d,e):d!=null?-1:e!=null?1:0} -function Ce(a,b){var c,d,e;uFb(b);c=false;for(d=new Anb(a);d.a<d.c.c.length;){e=ynb(d);if(b.Hc(e)){znb(d);c=true}}return c} -function xsb(a){var b,c,d,e;c=(b=RD(mfb((d=a.Rm,e=d.f,e==WI?d:e)),9),new Fsb(b,RD(WEb(b,b.length),9),0));zsb(c,a);return c} -function i2b(a){var b,c;c=RD(mQb(a,(yCc(),rAc)),88);if(c==(Cmd(),Amd)){b=Kfb(UD(mQb(a,Tzc)));return b>=1?zmd:xmd}return c} -function Xhc(a){switch(RD(mQb(a,(yCc(),yAc)),223).g){case 1:return new jqc;case 3:return new arc;default:return new dqc;}} -function MCb(a){if(a.c){MCb(a.c)}else if(a.d){throw Adb(new dgb("Stream already terminated, can't be modified or used"))}} -function Ltb(a,b,c){var d;d=a.a.get(b);a.a.set(b,c===undefined?null:c);if(d===undefined){++a.c;++a.b.g}else{++a.d}return d} -function HHc(a,b,c){var d,e;for(e=a.a.ec().Kc();e.Ob();){d=RD(e.Pb(),10);if(Be(c,RD(Vmb(b,d.p),16))){return d}}return null} -function u0c(a,b,c){var d;d=0;!!b&&(Emd(a.a)?(d+=b.f.a/2):(d+=b.f.b/2));!!c&&(Emd(a.a)?(d+=c.f.a/2):(d+=c.f.b/2));return d} -function LWb(a,b,c){var d;d=c;!d&&(d=Nqd(new Oqd,0));d.Ug(EAe,2);y0b(a.b,b,d.eh(1));NWb(a,b,d.eh(1));h0b(b,d.eh(1));d.Vg()} -function CGd(a,b,c){var d,e;d=(bvd(),e=new Xxd,e);Vxd(d,b);Wxd(d,c);!!a&&WGd((!a.a&&(a.a=new XZd(D4,a,5)),a.a),d);return d} -function kyd(a){var b;if((a.Db&64)!=0)return awd(a);b=new Shb(awd(a));b.a+=' (identifier: ';Nhb(b,a.k);b.a+=')';return b.a} -function kXd(a,b){var c;c=(a.Bb&QHe)!=0;b?(a.Bb|=QHe):(a.Bb&=-32769);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,18,c,b))} -function a6d(a,b){var c;c=(a.Bb&QHe)!=0;b?(a.Bb|=QHe):(a.Bb&=-32769);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,18,c,b))} -function AWd(a,b){var c;c=(a.Bb&Ove)!=0;b?(a.Bb|=Ove):(a.Bb&=-16385);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,16,c,b))} -function c6d(a,b){var c;c=(a.Bb&txe)!=0;b?(a.Bb|=txe):(a.Bb&=-65537);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,20,c,b))} -function qse(a){var b;b=$C(hE,zwe,28,2,15,1);a-=txe;b[0]=(a>>10)+uxe&Bwe;b[1]=(a&1023)+56320&Bwe;return Ihb(b,0,b.length)} -function Zfb(a){var b;b=Neb(a);if(b>3.4028234663852886E38){return oxe}else if(b<-3.4028234663852886E38){return pxe}return b} -function Bdb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a+b;if(jxe<c&&c<hxe){return c}}return Edb(sD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} -function Ndb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a*b;if(jxe<c&&c<hxe){return c}}return Edb(wD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} -function Vdb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a-b;if(jxe<c&&c<hxe){return c}}return Edb(DD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} -function b3b(a,b){var c;a.i||V2b(a);c=RD(Vrb(a.g,b),42);return !c?(yob(),yob(),vob):new Rkb(a.j,RD(c.a,17).a,RD(c.b,17).a)} -function ZXb(a){NXb();return Geb(),IYb(RD(a.a,86).j,RD(a.b,88))||RD(a.a,86).d.e!=0&&IYb(RD(a.a,86).j,RD(a.b,88))?true:false} -function pWc(a,b){return lhb(!!b.b&&!!b.c?aXc(b.b)+'->'+aXc(b.c):'e_'+tb(b),!!a.b&&!!a.c?aXc(a.b)+'->'+aXc(a.c):'e_'+tb(a))} -function rWc(a,b){return lhb(!!b.b&&!!b.c?aXc(b.b)+'->'+aXc(b.c):'e_'+tb(b),!!a.b&&!!a.c?aXc(a.b)+'->'+aXc(a.c):'e_'+tb(a))} -function $y(a,b){Zy();return bz(pwe),$wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:cz(isNaN(a),isNaN(b))} -function Ymd(){Ymd=geb;Xmd=new Zmd(Sye,0);Vmd=new Zmd('POLYLINE',1);Umd=new Zmd('ORTHOGONAL',2);Wmd=new Zmd('SPLINES',3)} -function _6c(){_6c=geb;Z6c=new a7c('ASPECT_RATIO_DRIVEN',0);$6c=new a7c('MAX_SCALE_DRIVEN',1);Y6c=new a7c('AREA_DRIVEN',2)} -function Db(b,c,d){var e;try{Cb(b,c,d)}catch(a){a=zdb(a);if(ZD(a,606)){e=a;throw Adb(new Deb(e))}else throw Adb(a)}return c} -function Im(a){var b,c,d;for(c=0,d=a.length;c<d;c++){if(a[c]==null){throw Adb(new Ogb('at index '+c))}}b=a;return new mob(b)} -function W2b(a){var b,c,d;b=new bnb;for(d=new Anb(a.j);d.a<d.c.c.length;){c=RD(ynb(d),12);Rmb(b,c.b)}return Qb(b),new Dl(b)} -function Z2b(a){var b,c,d;b=new bnb;for(d=new Anb(a.j);d.a<d.c.c.length;){c=RD(ynb(d),12);Rmb(b,c.e)}return Qb(b),new Dl(b)} -function a3b(a){var b,c,d;b=new bnb;for(d=new Anb(a.j);d.a<d.c.c.length;){c=RD(ynb(d),12);Rmb(b,c.g)}return Qb(b),new Dl(b)} -function MBb(a,b){var c,d,e;e=new Tsb;for(d=b.vc().Kc();d.Ob();){c=RD(d.Pb(),44);Zjb(e,c.ld(),QBb(a,RD(c.md(),15)))}return e} -function Mje(a){var b,c;for(c=Nje(BXd(uWd(a))).Kc();c.Ob();){b=WD(c.Pb());if(bAd(a,b))return dTd((cTd(),bTd),b)}return null} -function Cgc(a,b){var c,d,e;e=0;for(d=RD(b.Kb(a),20).Kc();d.Ob();){c=RD(d.Pb(),18);Heb(TD(mQb(c,(Ywc(),Nwc))))||++e}return e} -function Uv(a){var b,c,d,e;b=new oq(a.Rd().gc());e=0;for(d=Nr(a.Rd().Kc());d.Ob();){c=d.Pb();nq(b,c,sgb(e++))}return sn(b.a)} -function Cvb(a,b,c,d){var e,f;uFb(d);uFb(c);e=a.xc(b);f=e==null?c:EBb(RD(e,15),RD(c,16));f==null?a.Bc(b):a.zc(b,f);return f} -function Unb(a,b,c,d){var e,f,g;for(e=b+1;e<c;++e){for(f=e;f>b&&d.Ne(a[f-1],a[f])>0;--f){g=a[f];bD(a,f,a[f-1]);bD(a,f-1,g)}}} -function Egd(a,b){var c,d,e,f,g;c=b.f;dub(a.c.d,c,b);if(b.g!=null){for(e=b.g,f=0,g=e.length;f<g;++f){d=e[f];dub(a.c.e,d,b)}}} -function YSc(a,b){var c,d;c=Sub(a,0);while(c.b!=c.d.c){d=Mfb(UD(evb(c)));if(d==b){return}else if(d>b){fvb(c);break}}cvb(c,b)} -function Kic(a,b){var c,d,e;d=Zjc(b);e=Kfb(UD(hFc(d,(yCc(),TBc))));c=$wnd.Math.max(0,e/2-0.5);Iic(b,c,1);Rmb(a,new hjc(b,c))} -function L5c(a,b,c){var d;c.Ug('Straight Line Edge Routing',1);c.dh(b,eFe);d=RD(Gxd(b,(u2c(),t2c)),27);M5c(a,d);c.dh(b,gFe)} -function K9c(a,b){a.n.c.length==0&&Rmb(a.n,new _9c(a.s,a.t,a.i));Rmb(a.b,b);W9c(RD(Vmb(a.n,a.n.c.length-1),209),b);M9c(a,b)} -function Zrb(a){var b;this.a=(b=RD(a.e&&a.e(),9),new Fsb(b,RD(WEb(b,b.length),9),0));this.b=$C(jJ,rve,1,this.a.a.length,5,1)} -function jeb(a){var b;if(Array.isArray(a)&&a.Tm===keb){return nfb(rb(a))+'@'+(b=tb(a)>>>0,b.toString(16))}return a.toString()} -function jD(a,b){if(a.h==fxe&&a.m==0&&a.l==0){b&&(eD=hD(0,0,0));return gD((MD(),KD))}b&&(eD=hD(a.l,a.m,a.h));return hD(0,0,0)} -function _Gb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} -function IYb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} -function vyd(a,b,c,d){switch(b){case 3:return a.f;case 4:return a.g;case 5:return a.i;case 6:return a.j;}return cyd(a,b,c,d)} -function oIb(a,b){if(b==a.d){return a.e}else if(b==a.e){return a.d}else{throw Adb(new agb('Node '+b+' not part of edge '+a))}} -function Uvd(a,b){var c;c=wYd(a.Dh(),b);if(ZD(c,102)){return RD(c,19)}throw Adb(new agb(KHe+b+"' is not a valid reference"))} -function Bvd(a,b,c,d){if(b<0){Svd(a,c,d)}else{if(!c.rk()){throw Adb(new agb(KHe+c.xe()+LHe))}RD(c,69).wk().Ck(a,a.hi(),b,d)}} -function ig(a){var b;if(a.b){ig(a.b);if(a.b.d!=a.c){throw Adb(new Jrb)}}else if(a.d.dc()){b=RD(a.f.c.xc(a.e),16);!!b&&(a.d=b)}} -function VMb(a){RMb();var b,c,d,e;b=a.o.b;for(d=RD(RD(Qc(a.r,(qpd(),npd)),21),87).Kc();d.Ob();){c=RD(d.Pb(),117);e=c.e;e.b+=b}} -function SRb(a){var b,c,d;this.a=new Iub;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),16);b=new DRb;xRb(b,c);Ysb(this.a,b)}} -function fdc(a,b){var c,d,e;d=cdc(a,b);e=d[d.length-1]/2;for(c=0;c<d.length;c++){if(d[c]>=e){return b.c+c}}return b.c+b.b.gc()} -function lQd(a,b){jQd();var c,d,e,f;d=iZd(a);e=b;Wnb(d,0,d.length,e);for(c=0;c<d.length;c++){f=kQd(a,d[c],c);c!=f&&uLd(a,c,f)}} -function mSd(a,b,c){var d,e;for(d=0,e=a.length;d<e;d++){if(zSd((BFb(d,a.length),a.charCodeAt(d)),b,c))return true}return false} -function ARb(a,b){var c,d;for(d=a.e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),272);if(Eid(b,c.d)||zid(b,c.d)){return true}}return false} -function oMc(a,b,c,d,e){var f,g,h;g=e;while(b.b!=b.c){f=RD(smb(b),10);h=RD(b3b(f,d).Xb(0),12);a.d[h.p]=g++;ZEb(c.c,h)}return g} -function vKb(a,b){var c,d,e,f,g,h;d=0;c=0;for(f=b,g=0,h=f.length;g<h;++g){e=f[g];if(e>0){d+=e;++c}}c>1&&(d+=a.d*(c-1));return d} -function FFd(a){var b,c,d,e,f;f=HFd(a);c=cve(a.c);d=!c;if(d){e=new MB;sC(f,'knownLayouters',e);b=new QFd(e);xgb(a.c,b)}return f} -function fHd(a){var b,c,d;d=new Qhb;d.a+='[';for(b=0,c=a.gc();b<c;){Nhb(d,Ghb(a.Vi(b)));++b<c&&(d.a+=pve,d)}d.a+=']';return d.a} -function kSd(a){if(a.e==null){return a}else !a.c&&(a.c=new lSd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,null));return a.c} -function pnc(a){if(a.k!=(r3b(),p3b)){return false}return yDb(new SDb(null,new Twb(new is(Mr(a3b(a).a.Kc(),new ir)))),new qnc)} -function hv(a){var b,c;if(ZD(a,306)){c=vm(RD(a,306));b=c;return b}else return ZD(a,441)?RD(a,441).a:ZD(a,59)?new Fv(a):new uv(a)} -function FSd(a){var b;if(a==null)return true;b=a.length;return b>0&&(BFb(b-1,a.length),a.charCodeAt(b-1)==58)&&!mSd(a,aSd,bSd)} -function Sib(a,b){var c;if(dE(a)===dE(b)){return true}if(ZD(b,92)){c=RD(b,92);return a.e==c.e&&a.d==c.d&&Tib(a,c.a)}return false} -function vpd(a){qpd();switch(a.g){case 4:return Yod;case 1:return Xod;case 3:return npd;case 2:return ppd;default:return opd;}} -function jBb(a){var b,c;if(a.b){return a.b}c=dBb?null:a.d;while(c){b=dBb?null:c.b;if(b){return b}c=dBb?null:c.d}return SAb(),RAb} -function LJb(a){var b,c,d;d=Kfb(UD(a.a.of((umd(),cmd))));for(c=new Anb(a.a.Sf());c.a<c.c.c.length;){b=RD(ynb(c),695);OJb(a,b,d)}} -function jz(a){var b,c,d,e;for(b=(a.j==null&&(a.j=(fA(),e=eA.me(a),hA(e))),a.j),c=0,d=b.length;c<d;++c){String.fromCharCode(10)}} -function OXb(a,b){var c,d;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),42);Rmb(a.b.b,RD(c.b,86));gYb(RD(c.a,194),RD(c.b,86))}} -function nHc(a,b,c){var d,e;e=a.a.b;for(d=e.c.length;d<c;d++){Qmb(e,0,new R4b(a.a))}g3b(b,RD(Vmb(e,e.c.length-c),30));a.b[b.p]=c} -function EOc(a,b,c,d,e){dOc();rIb(uIb(tIb(sIb(vIb(new wIb,0),e.d.e-a),b),e.d));rIb(uIb(tIb(sIb(vIb(new wIb,0),c-e.a.e),e.a),d))} -function Ted(a,b){var c;if(a.d){if(Ujb(a.b,b)){return RD(Wjb(a.b,b),47)}else{c=b.dg();Zjb(a.b,b,c);return c}}else{return b.dg()}} -function hFb(b){var c=b.e;function d(a){if(!a||a.length==0){return ''}return '\t'+a.join('\n\t')} -return c&&(c.stack||d(b[xwe]))} -function wyd(a,b){switch(b){case 3:return a.f!=0;case 4:return a.g!=0;case 5:return a.i!=0;case 6:return a.j!=0;}return fyd(a,b)} -function y2c(a){switch(a.g){case 0:return new D5c;case 1:return new N5c;default:throw Adb(new agb(lBe+(a.f!=null?a.f:''+a.g)));}} -function Z3c(a){switch(a.g){case 0:return new G5c;case 1:return new J5c;default:throw Adb(new agb(mFe+(a.f!=null?a.f:''+a.g)));}} -function h4c(a){switch(a.g){case 1:return new F3c;case 2:return new x3c;default:throw Adb(new agb(mFe+(a.f!=null?a.f:''+a.g)));}} -function mdd(a){switch(a.g){case 0:return new Ddd;case 1:return new Hdd;default:throw Adb(new agb(eGe+(a.f!=null?a.f:''+a.g)));}} -function Owb(){Hwb();var a,b,c;c=Gwb+++Date.now();a=eE($wnd.Math.floor(c*Nxe))&Pxe;b=eE(c-a*Oxe);this.a=a^1502;this.b=b^Mxe} -function cxc(){cxc=geb;bxc=new dxc(LAe,0);Zwc=new dxc('FIRST',1);$wc=new dxc(oBe,2);_wc=new dxc('LAST',3);axc=new dxc(pBe,4)} -function Grd(){Grd=geb;Frd=new Hrd(mEe,0);Crd=new Hrd('GROUP_DEC',1);Erd=new Hrd('GROUP_MIXED',2);Drd=new Hrd('GROUP_INC',3)} -function cEd(a,b){var c,d,e,f;if(b){e=vDd(b,'x');c=new wFd(a);Ozd(c.a,(uFb(e),e));f=vDd(b,'y');d=new zFd(a);Pzd(d.a,(uFb(f),f))}} -function nEd(a,b){var c,d,e,f;if(b){e=vDd(b,'x');c=new BFd(a);Hzd(c.a,(uFb(e),e));f=vDd(b,'y');d=new CFd(a);Izd(d.a,(uFb(f),f))}} -function Sje(a,b){var c,d,e,f;e=new cnb(b.gc());for(d=b.Kc();d.Ob();){c=d.Pb();f=Rje(a,RD(c,58));!!f&&(ZEb(e.c,f),true)}return e} -function ze(a,b,c){var d,e;for(e=a.Kc();e.Ob();){d=e.Pb();if(dE(b)===dE(d)||b!=null&&pb(b,d)){c&&e.Qb();return true}}return false} -function Y5b(a){var b,c,d;c=a.jh();if(c){b=a.Eh();if(ZD(b,167)){d=Y5b(RD(b,167));if(d!=null){return d+'.'+c}}return c}return null} -function pjb(a){var b,c,d;if(a.e==0){return 0}b=a.d<<5;c=a.a[a.d-1];if(a.e<0){d=Uib(a);if(d==a.d-1){--c;c=c|0}}b-=ngb(c);return b} -function kjb(a){var b,c,d;if(a<Nib.length){return Nib[a]}c=a>>5;b=a&31;d=$C(kE,Pwe,28,c+1,15,1);d[c]=1<<b;return new cjb(1,c+1,d)} -function eLd(a,b){var c,d;if(!b){return false}else{for(c=0;c<a.i;++c){d=RD(a.g[c],378);if(d.mj(b)){return false}}return WGd(a,b)}} -function ZId(a,b,c){var d,e;++a.j;if(c.dc()){return false}else{for(e=c.Kc();e.Ob();){d=e.Pb();a.qj(b,a.Zi(b,d));++b}return true}} -function OA(a,b,c,d){var e,f;f=c-b;if(f<3){while(f<3){a*=10;++f}}else{e=1;while(f>3){e*=10;--f}a=(a+(e>>1))/e|0}d.i=a;return true} -function BYd(a,b){var c,d,e;c=(a.i==null&&rYd(a),a.i);d=b.Lj();if(d!=-1){for(e=c.length;d<e;++d){if(c[d]==b){return d}}}return -1} -function T$d(a){var b,c,d,e,f;c=RD(a.g,689);for(d=a.i-1;d>=0;--d){b=c[d];for(e=0;e<d;++e){f=c[e];if(U$d(a,b,f)){THd(a,d);break}}}} -function PId(a){var b,c,d,e;b=new MB;for(e=new Ppb(a.b.Kc());e.b.Ob();){d=RD(e.b.Pb(),701);c=LFd(d);KB(b,b.a.length,c)}return b.a} -function VNb(a){var b;!a.c&&(a.c=new MNb);_mb(a.d,new aOb);SNb(a);b=LNb(a);FDb(new SDb(null,new Swb(a.d,16)),new tOb(a));return b} -function I6b(a,b){b.Ug('End label post-processing',1);FDb(CDb(EDb(new SDb(null,new Swb(a.b,16)),new N6b),new P6b),new R6b);b.Vg()} -function RCc(a){QCc();this.c=dv(cD(WC(g2,1),rve,845,0,[FCc]));this.b=new Tsb;this.a=a;Zjb(this.b,OCc,1);Umb(PCc,new $rd(this))} -function wKb(a,b,c){kKb();fKb.call(this);this.a=YC(IN,[Nve,Mye],[603,217],0,[jKb,iKb],2);this.c=new Tid;this.g=a;this.f=b;this.d=c} -function gQb(a,b){this.n=YC(lE,[Nve,rxe],[376,28],14,[b,eE($wnd.Math.ceil(a/32))],2);this.o=a;this.p=b;this.j=a-1>>1;this.k=b-1>>1} -function Dfd(a){Afd();if(RD(a.of((umd(),pld)),181).Hc((dqd(),bqd))){RD(a.of(Lld),181).Fc((Pod(),Ood));RD(a.of(pld),181).Mc(bqd)}} -function ndc(a){var b,c;b=a.d==(btc(),Ysc);c=jdc(a);b&&!c||!b&&c?pQb(a.a,(yCc(),Rzc),(Rjd(),Pjd)):pQb(a.a,(yCc(),Rzc),(Rjd(),Ojd))} -function QCc(){QCc=geb;GCc();OCc=(yCc(),bCc);PCc=dv(cD(WC(V5,1),kEe,149,0,[SBc,TBc,VBc,WBc,ZBc,$Bc,_Bc,aCc,dCc,fCc,UBc,XBc,cCc]))} -function RDb(a,b){var c;c=RD(zDb(a,tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);return c.Qc(__c(c.gc()))} -function nXc(a,b){var c,d;d=new zAb(a.a.ad(b,true));if(d.a.gc()<=1){throw Adb(new Ngb)}c=d.a.ec().Kc();c.Pb();return RD(c.Pb(),39)} -function lQc(a,b,c){var d,e;d=Kfb(a.p[b.i.p])+Kfb(a.d[b.i.p])+b.n.b+b.a.b;e=Kfb(a.p[c.i.p])+Kfb(a.d[c.i.p])+c.n.b+c.a.b;return e-d} -function XHd(a,b){var c;if(a.i>0){if(b.length<a.i){c=IMd(rb(b).c,a.i);b=c}hib(a.g,0,b,0,a.i)}b.length>a.i&&bD(b,a.i,null);return b} -function MXd(a){var b;if((a.Db&64)!=0)return QAd(a);b=new Shb(QAd(a));b.a+=' (instanceClassName: ';Nhb(b,a.D);b.a+=')';return b.a} -function ySd(a){var b,c,d,e;e=0;for(c=0,d=a.length;c<d;c++){b=(BFb(c,a.length),a.charCodeAt(c));b<64&&(e=Rdb(e,Sdb(1,b)))}return e} -function Fjb(a,b,c){var d,e;d=Cdb(c,yxe);for(e=0;Ddb(d,0)!=0&&e<b;e++){d=Bdb(d,Cdb(a[e],yxe));a[e]=Ydb(d);d=Tdb(d,32)}return Ydb(d)} -function pge(a,b){var c,d,e,f;f=pke(a.e.Dh(),b);c=RD(a.g,124);for(e=0;e<a.i;++e){d=c[e];if(f.am(d.Lk())){return false}}return true} -function QNd(a,b){var c,d,e;if(a.f>0){a._j();d=b==null?0:tb(b);e=(d&lve)%a.d.length;c=XNd(a,e,d,b);return c!=-1}else{return false}} -function Nrb(a,b){var c,d;a.a=Bdb(a.a,1);a.c=$wnd.Math.min(a.c,b);a.b=$wnd.Math.max(a.b,b);a.d+=b;c=b-a.f;d=a.e+c;a.f=d-a.e-c;a.e=d} -function yyd(a,b){switch(b){case 3:Ayd(a,0);return;case 4:Cyd(a,0);return;case 5:Dyd(a,0);return;case 6:Eyd(a,0);return;}hyd(a,b)} -function c3b(a,b){switch(b.g){case 1:return dr(a.j,(J3b(),E3b));case 2:return dr(a.j,(J3b(),G3b));default:return yob(),yob(),vob;}} -function zm(a){tm();var b;b=a.Pc();switch(b.length){case 0:return sm;case 1:return new Dy(Qb(b[0]));default:return new Kx(Im(b));}} -function kMd(b,c){b.Xj();try{b.d.bd(b.e++,c);b.f=b.d.j;b.g=-1}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}} -function a8d(){a8d=geb;$7d=new b8d;T7d=new e8d;U7d=new h8d;V7d=new k8d;W7d=new n8d;X7d=new q8d;Y7d=new t8d;Z7d=new w8d;_7d=new z8d} -function YA(a,b){WA();var c,d;c=_A(($A(),$A(),ZA));d=null;b==c&&(d=RD(Xjb(VA,a),624));if(!d){d=new XA(a);b==c&&$jb(VA,a,d)}return d} -function zDc(a){wDc();var b;(!a.q?(yob(),yob(),wob):a.q)._b((yCc(),iBc))?(b=RD(mQb(a,iBc),203)):(b=RD(mQb(Y2b(a),jBc),203));return b} -function hFc(a,b){var c,d;d=null;if(nQb(a,(yCc(),YBc))){c=RD(mQb(a,YBc),96);c.pf(b)&&(d=c.of(b))}d==null&&(d=mQb(Y2b(a),b));return d} -function Ze(a,b){var c,d,e;if(ZD(b,44)){c=RD(b,44);d=c.ld();e=Xv(a.Rc(),d);return Hb(e,c.md())&&(e!=null||a.Rc()._b(d))}return false} -function $Nd(a,b){var c,d,e;if(a.f>0){a._j();d=b==null?0:tb(b);e=(d&lve)%a.d.length;c=WNd(a,e,d,b);if(c){return c.md()}}return null} -function qLd(a,b,c){var d,e,f;if(a.Pj()){d=a.i;f=a.Qj();KHd(a,d,b);e=a.Ij(3,null,b,d,f);!c?(c=e):c.nj(e)}else{KHd(a,a.i,b)}return c} -function f$d(a,b,c){var d,e;d=new P3d(a.e,4,10,(e=b.c,ZD(e,90)?RD(e,29):(JTd(),zTd)),null,fZd(a,b),false);!c?(c=d):c.nj(d);return c} -function e$d(a,b,c){var d,e;d=new P3d(a.e,3,10,null,(e=b.c,ZD(e,90)?RD(e,29):(JTd(),zTd)),fZd(a,b),false);!c?(c=d):c.nj(d);return c} -function SMb(a){RMb();var b;b=new sjd(RD(a.e.of((umd(),nld)),8));if(a.B.Hc((dqd(),Ypd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b} -function jjb(a){Pib();var b,c;c=Ydb(a);b=Ydb(Udb(a,32));if(b!=0){return new bjb(c,b)}if(c>10||c<0){return new ajb(1,c)}return Lib[c]} -function Mdb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a%b;if(jxe<c&&c<hxe){return c}}return Edb((iD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b,true),eD))} -function G8b(a,b){var c;D8b(b);c=RD(mQb(a,(yCc(),xAc)),283);!!c&&pQb(a,xAc,uuc(c));E8b(a.c);E8b(a.f);F8b(a.d);F8b(RD(mQb(a,cBc),214))} -function y7b(a){var b,c,d,e;d=t7b(a);_mb(d,r7b);e=a.d;e.c.length=0;for(c=new Anb(d);c.a<c.c.c.length;){b=RD(ynb(c),465);Tmb(e,b.b)}} -function cmc(a){var b;if(a.c==0){return}b=RD(Vmb(a.a,a.b),293);b.b==1?(++a.b,a.b<a.a.c.length&&gmc(RD(Vmb(a.a,a.b),293))):--b.b;--a.c} -function vdc(a){var b;b=a.a;do{b=RD(hs(new is(Mr(a3b(b).a.Kc(),new ir))),18).d.i;b.k==(r3b(),o3b)&&Rmb(a.e,b)}while(b.k==(r3b(),o3b))} -function RLc(a){this.e=$C(kE,Pwe,28,a.length,15,1);this.c=$C(xdb,Hye,28,a.length,16,1);this.b=$C(xdb,Hye,28,a.length,16,1);this.f=0} -function _Hc(a){var b,c;a.j=$C(iE,vxe,28,a.p.c.length,15,1);for(c=new Anb(a.p);c.a<c.c.c.length;){b=RD(ynb(c),10);a.j[b.p]=b.o.b/a.i}} -function L_c(a,b){var c,d,e,f;f=b.b.b;a.a=new Yub;a.b=$C(kE,Pwe,28,f,15,1);c=0;for(e=Sub(b.b,0);e.b!=e.d.c;){d=RD(evb(e),39);d.g=c++}} -function fad(a,b,c){var d,e,f,g;f=b-a.e;g=c-a.f;for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),172);U9c(d,d.s+f,d.t+g)}a.e=b;a.f=c} -function ose(a,b){var c,d;d=b.length;for(c=0;c<d;c+=2)rte(a,(BFb(c,b.length),b.charCodeAt(c)),(BFb(c+1,b.length),b.charCodeAt(c+1)))} -function G6c(a,b){b.Ug('Min Size Postprocessing',1);Ixd(a,(X6c(),W6c),$wnd.Math.max(Kfb(UD(Gxd(a,W6c))),Kfb(UD(Gxd(a,U6c)))));b.Vg()} -function Fpd(){Fpd=geb;Cpd=new A3b(15);Bpd=new mGd((umd(),tld),Cpd);Epd=new mGd(fmd,15);Dpd=new mGd(Sld,sgb(0));Apd=new mGd(Dkd,Yze)} -function Qpd(){Qpd=geb;Opd=new Rpd('PORTS',0);Ppd=new Rpd('PORT_LABELS',1);Npd=new Rpd('NODE_LABELS',2);Mpd=new Rpd('MINIMUM_SIZE',3)} -function f6c(){f6c=geb;c6c=new g6c('P1_WIDTH_APPROXIMATION',0);d6c=new g6c('P2_PACKING',1);e6c=new g6c('P3_WHITESPACE_ELIMINATION',2)} -function $je(a){if(a.b==null){while(a.a.Ob()){a.b=a.a.Pb();if(!RD(a.b,54).Jh()){return true}}a.b=null;return false}else{return true}} -function Pyb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.Ne(b,f.d);if(c&&d==0){return f}if(d>=0){f=f.a[1]}else{e=f;f=f.a[0]}}return e} -function Qyb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.Ne(b,f.d);if(c&&d==0){return f}if(d<=0){f=f.a[0]}else{e=f;f=f.a[1]}}return e} -function rmc(a,b,c,d){var e,f,g;e=false;if(Lmc(a.f,c,d)){Omc(a.f,a.a[b][c],a.a[b][d]);f=a.a[b];g=f[d];f[d]=f[c];f[c]=g;e=true}return e} -function Nqc(a,b,c){var d,e,f,g;e=RD(Wjb(a.b,c),183);d=0;for(g=new Anb(b.j);g.a<g.c.c.length;){f=RD(ynb(g),113);e[f.d.p]&&++d}return d} -function lte(a,b,c){var d,e;d=RD(Xjb(wse,b),122);e=RD(Xjb(xse,b),122);if(c){$jb(wse,a,d);$jb(xse,a,e)}else{$jb(xse,a,d);$jb(wse,a,e)}} -function qjb(a,b){var c,d,e,f;c=b>>5;b&=31;e=a.d+c+(b==0?0:1);d=$C(kE,Pwe,28,e,15,1);rjb(d,a.a,c,b);f=new cjb(a.e,e,d);Rib(f);return f} -function zGc(a,b){var c,d,e;for(d=new is(Mr(a3b(a).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);e=c.d.i;if(e.c==b){return false}}return true} -function _Ec(a,b,c){var d,e,f,g,h;g=a.k;h=b.k;d=c[g.g][h.g];e=UD(hFc(a,d));f=UD(hFc(b,d));return $wnd.Math.max((uFb(e),e),(uFb(f),f))} -function lA(){if(Error.stackTraceLimit>0){$wnd.Error.stackTraceLimit=Error.stackTraceLimit=64;return true}return 'stack' in new Error} -function sGb(a,b){return Zy(),Zy(),bz(pwe),($wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:cz(isNaN(a),isNaN(b)))>0} -function uGb(a,b){return Zy(),Zy(),bz(pwe),($wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:cz(isNaN(a),isNaN(b)))<0} -function tGb(a,b){return Zy(),Zy(),bz(pwe),($wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:cz(isNaN(a),isNaN(b)))<=0} -function Efb(a,b){var c=0;while(!b[c]||b[c]==''){c++}var d=b[c++];for(;c<b.length;c++){if(!b[c]||b[c]==''){continue}d+=a+b[c]}return d} -function MMd(a){var b,c;b=RD(Ywd(a.a,4),129);if(b!=null){c=$C(d6,IJe,424,b.length,0,1);hib(b,0,c,0,b.length);return c}else{return JMd}} -function kne(a){var b,c,d,e,f;if(a==null)return null;f=new bnb;for(c=xAd(a),d=0,e=c.length;d<e;++d){b=c[d];Rmb(f,nue(b,true))}return f} -function nne(a){var b,c,d,e,f;if(a==null)return null;f=new bnb;for(c=xAd(a),d=0,e=c.length;d<e;++d){b=c[d];Rmb(f,nue(b,true))}return f} -function one(a){var b,c,d,e,f;if(a==null)return null;f=new bnb;for(c=xAd(a),d=0,e=c.length;d<e;++d){b=c[d];Rmb(f,nue(b,true))}return f} -function vrd(a,b){var c,d,e;if(a.c){Ayd(a.c,b)}else{c=b-trd(a);for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),163);vrd(d,trd(d)+c)}}} -function wrd(a,b){var c,d,e;if(a.c){Cyd(a.c,b)}else{c=b-urd(a);for(e=new Anb(a.d);e.a<e.c.c.length;){d=RD(ynb(e),163);wrd(d,urd(d)+c)}}} -function Ihb(a,b,c){var d,e,f,g;f=b+c;AFb(b,f,a.length);g='';for(e=b;e<f;){d=$wnd.Math.min(e+10000,f);g+=Ehb(a.slice(e,d));e=d}return g} -function jMb(a){switch(a.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return true;default:return false;}} -function Ptc(){Ptc=geb;Ltc=new Rtc(CBe,0);Ktc=new Rtc(DBe,1);Ntc=new Rtc(BBe,2);Otc=new Rtc(MAe,3);Mtc=new Rtc('GREEDY_MODEL_ORDER',4)} -function kEc(){kEc=geb;hEc=new lEc(LAe,0);gEc=new lEc('NODES_AND_EDGES',1);iEc=new lEc('PREFER_EDGES',2);jEc=new lEc('PREFER_NODES',3)} -function mad(a,b,c,d,e,f){this.a=a;this.c=b;this.b=c;this.f=d;this.d=e;this.e=f;this.c>0&&this.b>0&&(this.g=Aad(this.c,this.b,this.a))} -function rC(f,a){var b=f.a;var c;a=String(a);b.hasOwnProperty(a)&&(c=b[a]);var d=(HC(),GC)[typeof c];var e=d?d(c):NC(typeof c);return e} -function uDd(a){var b,c,d;d=null;b=uIe in a.a;c=!b;if(c){throw Adb(new CDd('Every element must have an id.'))}d=tDd(qC(a,uIe));return d} -function Qqe(a){var b,c;c=Rqe(a);b=null;while(a.c==2){Mqe(a);if(!b){b=(Vse(),Vse(),++Use,new iue(2));hue(b,c);c=b}c.Jm(Rqe(a))}return c} -function jOd(a,b){var c,d,e;a._j();d=b==null?0:tb(b);e=(d&lve)%a.d.length;c=WNd(a,e,d,b);if(c){hOd(a,c);return c.md()}else{return null}} -function Qib(a,b){if(a.e>b.e){return 1}if(a.e<b.e){return -1}if(a.d>b.d){return a.e}if(a.d<b.d){return -b.e}return a.e*Ejb(a.a,b.a,a.d)} -function dfb(a){if(a>=48&&a<48+$wnd.Math.min(10,10)){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1} -function UHc(a,b){if(b.c==a){return b.d}else if(b.d==a){return b.c}throw Adb(new agb('Input edge is not connected to the input port.'))} -function Fae(a){if(mhb(FGe,a)){return Geb(),Feb}else if(mhb(GGe,a)){return Geb(),Eeb}else{throw Adb(new agb('Expecting true or false'))}} -function jFb(a){switch(typeof(a)){case jve:return ohb(a);case ive:return Nfb(a);case hve:return Jeb(a);default:return a==null?0:kFb(a);}} -function mfd(a,b){if(a.a<0){throw Adb(new dgb('Did not call before(...) or after(...) before calling add(...).'))}tfd(a,a.a,b);return a} -function FId(a){EId();if(ZD(a,162)){return RD(Wjb(CId,zK),294).Rg(a)}if(Ujb(CId,rb(a))){return RD(Wjb(CId,rb(a)),294).Rg(a)}return null} -function Wwd(a){var b,c;if((a.Db&32)==0){c=(b=RD(Ywd(a,16),29),AYd(!b?a.ii():b)-AYd(a.ii()));c!=0&&$wd(a,32,$C(jJ,rve,1,c,5,1))}return a} -function $wd(a,b,c){var d;if((a.Db&b)!=0){if(c==null){Zwd(a,b)}else{d=Xwd(a,b);d==-1?(a.Eb=c):bD(SD(a.Eb),d,c)}}else c!=null&&Twd(a,b,c)} -function tTc(a,b,c,d){var e,f;if(b.c.length==0){return}e=pTc(c,d);f=oTc(b);FDb(PDb(new SDb(null,new Swb(f,1)),new CTc),new GTc(a,c,e,d))} -function rmb(a,b){var c,d,e,f;d=a.a.length-1;c=b-a.b&d;f=a.c-b&d;e=a.c-a.b&d;zmb(c<e);if(c>=f){umb(a,b);return -1}else{vmb(a,b);return 1}} -function Hvd(a){var b,c,d;d=a.Jh();if(!d){b=0;for(c=a.Ph();c;c=c.Ph()){if(++b>wxe){return c.Qh()}d=c.Jh();if(!!d||c==a){break}}}return d} -function Ue(a,b){var c;if(dE(b)===dE(a)){return true}if(!ZD(b,21)){return false}c=RD(b,21);if(c.gc()!=a.gc()){return false}return a.Ic(c)} -function kNc(a,b){if(a.e<b.e){return -1}else if(a.e>b.e){return 1}else if(a.f<b.f){return -1}else if(a.f>b.f){return 1}return tb(a)-tb(b)} -function mhb(a,b){uFb(a);if(b==null){return false}if(lhb(a,b)){return true}return a.length==b.length&&lhb(a.toLowerCase(),b.toLowerCase())} -function Hgb(a){var b,c;if(Ddb(a,-129)>0&&Ddb(a,128)<0){return Jgb(),b=Ydb(a)+128,c=Igb[b],!c&&(c=Igb[b]=new zgb(a)),c}return new zgb(a)} -function U$b(){U$b=geb;T$b=new V$b(LAe,0);R$b=new V$b('INSIDE_PORT_SIDE_GROUPS',1);Q$b=new V$b('GROUP_MODEL_ORDER',2);S$b=new V$b(MAe,3)} -function ufe(a){var b;a.b||vfe(a,(b=Hee(a.e,a.a),!b||!lhb(GGe,$Nd((!b.b&&(b.b=new SVd((JTd(),FTd),C8,b)),b.b),'qualified'))));return a.c} -function BA(a,b){var c,d;c=(BFb(b,a.length),a.charCodeAt(b));d=b+1;while(d<a.length&&(BFb(d,a.length),a.charCodeAt(d)==c)){++d}return d-b} -function dFb(a,b){(!b&&console.groupCollapsed!=null?console.groupCollapsed:console.group!=null?console.group:console.log).call(console,a)} -function EQb(a,b,c,d){d==a?(RD(c.b,68),RD(c.b,68),RD(d.b,68),RD(d.b,68).c.b):(RD(c.b,68),RD(c.b,68),RD(d.b,68),RD(d.b,68).c.b);BQb(d,b,a)} -function vRb(a){var b,c,d;b=0;for(c=new Anb(a.g);c.a<c.c.c.length;){RD(ynb(c),568);++b}d=new vQb(a.g,Kfb(a.a),a.c);vOb(d);a.g=d.b;a.d=d.a} -function Add(a,b,c){var d,e,f;for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),225);d=new $Fb(RD(Wjb(a.a,e.b),68));Rmb(b.a,d);Add(a,d,e)}} -function D4d(a,b,c){var d,e,f;d=RD(QHd(o4d(a.a),b),89);f=(e=d.c,e?e:(JTd(),wTd));(f.Vh()?Vvd(a.b,RD(f,54)):f)==c?i2d(d):l2d(d,c);return f} -function cqc(a,b,c){b.b=$wnd.Math.max(b.b,-c.a);b.c=$wnd.Math.max(b.c,c.a-a.a);b.d=$wnd.Math.max(b.d,-c.b);b.a=$wnd.Math.max(b.a,c.b-a.b)} -function JXb(a,b,c){this.c=a;this.f=new bnb;this.e=new pjd;this.j=new KYb;this.n=new KYb;this.b=b;this.g=new Uid(b.c,b.d,b.b,b.a);this.a=c} -function iYb(a){var b,c,d,e;this.a=new Iub;this.d=new _sb;this.e=0;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!this.f&&(this.f=b);gYb(this,b)}} -function djb(a){Pib();if(a.length==0){this.e=0;this.d=1;this.a=cD(WC(kE,1),Pwe,28,15,[0])}else{this.e=1;this.d=a.length;this.a=a;Rib(this)}} -function dLb(a,b,c){fKb.call(this);this.a=$C(IN,Mye,217,(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])).length,0,1);this.b=a;this.d=b;this.c=c} -function zfc(a){var b,c,d,e,f,g;g=RD(mQb(a,(Ywc(),Awc)),12);pQb(g,Swc,a.i.n.b);b=s2b(a.e);for(d=b,e=0,f=d.length;e<f;++e){c=d[e];Z0b(c,g)}} -function Afc(a){var b,c,d,e,f,g;c=RD(mQb(a,(Ywc(),Awc)),12);pQb(c,Swc,a.i.n.b);b=s2b(a.g);for(e=b,f=0,g=e.length;f<g;++f){d=e[f];Y0b(d,c)}} -function dRc(a,b){WQc();var c,d;for(d=new is(Mr(W2b(a).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(c.d.i==b||c.c.i==b){return c}}return null} -function zee(a,b){var c,d;c=b.qi(a.a);if(c){d=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),GIe));if(d!=null){return d}}return b.xe()} -function Aee(a,b){var c,d;c=b.qi(a.a);if(c){d=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),GIe));if(d!=null){return d}}return b.xe()} -function B7b(a,b){var c,d;c=hgb(a.a.c.p,b.a.c.p);if(c!=0){return c}d=hgb(a.a.d.i.p,b.a.d.i.p);if(d!=0){return d}return hgb(b.a.d.p,a.a.d.p)} -function Wje(a,b){var c,d,e,f;for(d=0,e=b.gc();d<e;++d){c=b.Tl(d);if(ZD(c,102)&&(RD(c,19).Bb&QHe)!=0){f=b.Ul(d);f!=null&&Rje(a,RD(f,58))}}} -function KSb(a,b){var c,d,e;Rmb(GSb,a);b.Fc(a);c=RD(Wjb(FSb,a),21);if(c){for(e=c.Kc();e.Ob();){d=RD(e.Pb(),27);Wmb(GSb,d,0)!=-1||KSb(d,b)}}} -function Omc(a,b,c){var d,e;BMc(a.e,b,c,(qpd(),ppd));BMc(a.i,b,c,Xod);if(a.a){e=RD(mQb(b,(Ywc(),Awc)),12);d=RD(mQb(c,Awc),12);CMc(a.g,e,d)}} -function mJc(a,b,c){var d,e,f;d=b.c.p;f=b.p;a.b[d][f]=new yJc(a,b);if(c){a.a[d][f]=new dJc(b);e=RD(mQb(b,(Ywc(),pwc)),10);!!e&&Rc(a.d,e,b)}} -function zIc(a,b,c){var d,e,f,g;f=b.j;g=c.j;if(f!=g){return f.g-g.g}else{d=a.f[b.p];e=a.f[c.p];return d==0&&e==0?0:d==0?-1:e==0?1:Qfb(d,e)}} -function Sz(){var a;if(Nz!=0){a=Date.now();if(a-Oz>2000){Oz=a;Pz=$wnd.setTimeout(Yz,10)}}if(Nz++==0){_z(($z(),Zz));return true}return false} -function lBb(a,b,c){var d;(bBb?(jBb(a),true):cBb?(SAb(),true):fBb?(SAb(),true):eBb&&(SAb(),false))&&(d=new aBb(b),d.b=c,hBb(a,d),undefined)} -function oNb(a,b){var c;c=!a.A.Hc((Qpd(),Ppd))||a.q==(Bod(),wod);a.u.Hc((Pod(),Lod))?c?mNb(a,b):qNb(a,b):a.u.Hc(Nod)&&(c?nNb(a,b):rNb(a,b))} -function Bed(a){var b;if(dE(Gxd(a,(umd(),Xkd)))===dE((Fnd(),Dnd))){if(!vCd(a)){Ixd(a,Xkd,End)}else{b=RD(Gxd(vCd(a),Xkd),346);Ixd(a,Xkd,b)}}} -function _fc(a){var b,c;if(nQb(a.d.i,(yCc(),tBc))){b=RD(mQb(a.c.i,tBc),17);c=RD(mQb(a.d.i,tBc),17);return hgb(b.a,c.a)>0}else{return false}} -function g_b(a,b,c){return new Uid($wnd.Math.min(a.a,b.a)-c/2,$wnd.Math.min(a.b,b.b)-c/2,$wnd.Math.abs(a.a-b.a)+c,$wnd.Math.abs(a.b-b.b)+c)} -function _mc(a){var b;this.d=new bnb;this.j=new pjd;this.g=new pjd;b=a.g.b;this.f=RD(mQb(Y2b(b),(yCc(),rAc)),88);this.e=Kfb(UD(k2b(b,ZBc)))} -function onc(a){this.d=new bnb;this.e=new gub;this.c=$C(kE,Pwe,28,(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,15,1);this.b=a} -function $pc(a,b,c){var d;d=c[a.g][b];switch(a.g){case 1:case 3:return new rjd(0,d);case 2:case 4:return new rjd(d,0);default:return null;}} -function Ced(b,c,d){var e,f;f=RD(ltd(c.f),205);try{f.rf(b,d);mtd(c.f,f)}catch(a){a=zdb(a);if(ZD(a,103)){e=a;throw Adb(e)}else throw Adb(a)}} -function tEd(a,b,c){var d,e,f,g,h,i;d=null;h=vgd(ygd(),b);f=null;if(h){e=null;i=zhd(h,c);g=null;i!=null&&(g=a.qf(h,i));e=g;f=e}d=f;return d} -function sSd(a,b,c,d){var e;e=a.length;if(b>=e)return e;for(b=b>0?b:0;b<e;b++){if(zSd((BFb(b,a.length),a.charCodeAt(b)),c,d))break}return b} -function anb(a,b){var c,d;d=a.c.length;b.length<d&&(b=cFb(new Array(d),b));for(c=0;c<d;++c){bD(b,c,a.c[c])}b.length>d&&bD(b,d,null);return b} -function lob(a,b){var c,d;d=a.a.length;b.length<d&&(b=cFb(new Array(d),b));for(c=0;c<d;++c){bD(b,c,a.a[c])}b.length>d&&bD(b,d,null);return b} -function Bde(a,b){var c,d;++a.j;if(b!=null){c=(d=a.a.Cb,ZD(d,99)?RD(d,99).th():null);if(Jnb(b,c)){$wd(a.a,4,c);return}}$wd(a.a,4,RD(b,129))} -function mne(a){var b;if(a==null)return null;b=Hqe(nue(a,true));if(b==null){throw Adb(new Mle("Invalid hexBinary value: '"+a+"'"))}return b} -function wA(a,b,c){var d;if(b.a.length>0){Rmb(a.b,new kB(b.a,c));d=b.a.length;0<d?(b.a=zhb(b.a,0,0)):0>d&&(b.a+=Hhb($C(hE,zwe,28,-d,15,1)))}} -function yIb(a,b,c){var d,e,f;if(c[b.d]){return}c[b.d]=true;for(e=new Anb(CIb(b));e.a<e.c.c.length;){d=RD(ynb(e),218);f=oIb(d,b);yIb(a,f,c)}} -function dub(a,b,c){var d,e,f;e=RD(Wjb(a.e,b),400);if(!e){d=new uub(a,b,c);Zjb(a.e,b,d);qub(d);return null}else{f=qlb(e,c);eub(a,e);return f}} -function r5d(a,b,c,d){var e,f,g;e=new P3d(a.e,1,13,(g=b.c,g?g:(JTd(),wTd)),(f=c.c,f?f:(JTd(),wTd)),fZd(a,b),false);!d?(d=e):d.nj(e);return d} -function nMb(){hMb();return cD(WC(XN,1),jwe,164,0,[eMb,dMb,fMb,XLb,WLb,YLb,_Lb,$Lb,ZLb,cMb,bMb,aMb,ULb,TLb,VLb,RLb,QLb,SLb,OLb,NLb,PLb,gMb])} -function jWc(a){switch(a.g){case 4:return new rjd(0,-1);case 1:return new rjd(1,0);case 2:return new rjd(-1,0);default:return new rjd(0,1);}} -function f_b(a){switch(a.g){case 1:return Cmd(),Bmd;case 4:return Cmd(),ymd;case 2:return Cmd(),zmd;case 3:return Cmd(),xmd;}return Cmd(),Amd} -function s$d(a){var b;b=a.hj(null);switch(b){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4;}return -1} -function Yhd(){Yhd=geb;Whd=new Zhd('PARENTS',0);Vhd=new Zhd('NODES',1);Thd=new Zhd('EDGES',2);Xhd=new Zhd('PORTS',3);Uhd=new Zhd('LABELS',4)} -function AA(a,b,c){var d;d=c.q.getFullYear()-Owe+Owe;d<0&&(d=-d);switch(b){case 1:a.a+=d;break;case 2:UA(a,d%100,2);break;default:UA(a,d,b);}} -function Sub(a,b){var c,d;wFb(b,a.b);if(b>=a.b>>1){d=a.c;for(c=a.b;c>b;--c){d=d.b}}else{d=a.a.a;for(c=0;c<b;++c){d=d.a}}return new hvb(a,b,d)} -function DHb(){DHb=geb;CHb=new EHb('NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST',0);BHb=new EHb('CORNER_CASES_THAN_SINGLE_SIDE_LAST',1)} -function tnc(a){this.b=new bnb;this.e=new bnb;this.d=a;this.a=!QDb(CDb(new SDb(null,new Twb(new l4b(a.b))),new PAb(new unc))).Bd((xDb(),wDb))} -function ssc(a,b){var c,d,e,f;c=0;for(e=new Anb(b.a);e.a<e.c.c.length;){d=RD(ynb(e),10);f=d.o.a+d.d.c+d.d.b+a.j;c=$wnd.Math.max(c,f)}return c} -function OUc(a,b){var c,d,e;e=b.d.i;d=e.k;if(d==(r3b(),p3b)||d==l3b){return}c=new is(Mr(a3b(e).a.Kc(),new ir));gs(c)&&Zjb(a.k,b,RD(hs(c),18))} -function O0c(a,b){B0c();return Qfb((a.a.b==0?new rjd(a.c.e.a,a.c.e.b):RD(Qub(a.a),8)).b,(b.a.b==0?new rjd(b.c.e.a,b.c.e.b):RD(Qub(b.a),8)).b)} -function P0c(a,b){B0c();return Qfb((a.a.b==0?new rjd(a.c.e.a,a.c.e.b):RD(Qub(a.a),8)).a,(b.a.b==0?new rjd(b.c.e.a,b.c.e.b):RD(Qub(b.a),8)).a)} -function S0c(a,b){B0c();return Qfb((a.a.b==0?new rjd(a.b.e.a,a.b.e.b):RD(Rub(a.a),8)).a,(b.a.b==0?new rjd(b.b.e.a,b.b.e.b):RD(Rub(b.a),8)).a)} -function Q0c(a,b){B0c();return Qfb((a.a.b==0?new rjd(a.b.e.a,a.b.e.b):RD(Rub(a.a),8)).b,(b.a.b==0?new rjd(b.b.e.a,b.b.e.b):RD(Rub(b.a),8)).b)} -function pod(){pod=geb;mod=new qod('DISTRIBUTED',0);ood=new qod('JUSTIFIED',1);kod=new qod('BEGIN',2);lod=new qod(Kye,3);nod=new qod('END',4)} -function Kvd(a,b){var c,d,e;d=vYd(a.Dh(),b);c=b-a.ji();return c<0?(e=a.Ih(d),e>=0?a.Wh(e):Rvd(a,d)):c<0?Rvd(a,d):RD(d,69).wk().Bk(a,a.hi(),c)} -function Fxd(a){var b,c,d;d=(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),a.o);for(c=d.c.Kc();c.e!=c.i.gc();){b=RD(c.Yj(),44);b.md()}return dOd(d)} -function iGd(a){var b;if(ZD(a.a,4)){b=FId(a.a);if(b==null){throw Adb(new dgb(HGe+a.b+"'. "+DGe+(lfb(b6),b6.k)+EGe))}return b}else{return a.a}} -function iSd(a,b){var c,d;if(a.j.length!=b.j.length)return false;for(c=0,d=a.j.length;c<d;c++){if(!lhb(a.j[c],b.j[c]))return false}return true} -function bMd(b){var c;try{c=b.i.Xb(b.e);b.Xj();b.g=b.e++;return c}catch(a){a=zdb(a);if(ZD(a,77)){b.Xj();throw Adb(new Dvb)}else throw Adb(a)}} -function xMd(b){var c;try{c=b.c.Vi(b.e);b.Xj();b.g=b.e++;return c}catch(a){a=zdb(a);if(ZD(a,77)){b.Xj();throw Adb(new Dvb)}else throw Adb(a)}} -function vSd(a){var b,c,d,e;e=0;for(c=0,d=a.length;c<d;c++){b=(BFb(c,a.length),a.charCodeAt(c));b>=64&&b<128&&(e=Rdb(e,Sdb(1,b-64)))}return e} -function k2b(a,b){var c,d;d=null;if(nQb(a,(umd(),amd))){c=RD(mQb(a,amd),96);c.pf(b)&&(d=c.of(b))}d==null&&!!Y2b(a)&&(d=mQb(Y2b(a),b));return d} -function i0b(a,b){var c;c=RD(mQb(a,(yCc(),RAc)),75);if(br(b,f0b)){if(!c){c=new Ejd;pQb(a,RAc,c)}else{Xub(c)}}else !!c&&pQb(a,RAc,null);return c} -function tSb(){tSb=geb;sSb=(umd(),Yld);mSb=Ukd;hSb=Dkd;nSb=tld;qSb=(YHb(),UHb);pSb=SHb;rSb=WHb;oSb=RHb;jSb=(eSb(),aSb);iSb=_Rb;kSb=cSb;lSb=dSb} -function PZb(a){NZb();this.c=new bnb;this.d=a;switch(a.g){case 0:case 2:this.a=Fob(MZb);this.b=oxe;break;case 3:case 1:this.a=MZb;this.b=pxe;}} -function c9b(a){var b;if(!Cod(RD(mQb(a,(yCc(),BBc)),101))){return}b=a.b;d9b((tFb(0,b.c.length),RD(b.c[0],30)));d9b(RD(Vmb(b,b.c.length-1),30))} -function ohc(a,b){b.Ug('Self-Loop post-processing',1);FDb(CDb(CDb(EDb(new SDb(null,new Swb(a.b,16)),new uhc),new whc),new yhc),new Ahc);b.Vg()} -function xrd(a,b,c){var d,e;if(a.c){Dyd(a.c,a.c.i+b);Eyd(a.c,a.c.j+c)}else{for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),163);xrd(d,b,c)}}} -function ine(a){var b;if(a==null)return null;b=Aqe(nue(a,true));if(b==null){throw Adb(new Mle("Invalid base64Binary value: '"+a+"'"))}return b} -function ju(b,c){var d;d=b.fd(c);try{return d.Pb()}catch(a){a=zdb(a);if(ZD(a,112)){throw Adb(new veb("Can't get element "+c))}else throw Adb(a)}} -function ANb(a,b){var c,d,e;c=a.o;for(e=RD(RD(Qc(a.r,b),21),87).Kc();e.Ob();){d=RD(e.Pb(),117);d.e.a=uNb(d,c.a);d.e.b=c.b*Kfb(UD(d.b.of(sNb)))}} -function kdc(a,b){var c,d,e;e=new cnb(b.gc());for(d=b.Kc();d.Ob();){c=RD(d.Pb(),292);c.c==c.f?_cc(a,c,c.c):adc(a,c)||(ZEb(e.c,c),true)}return e} -function i3b(a){var b;b=new bib;b.a+='n';a.k!=(r3b(),p3b)&&Zhb(Zhb((b.a+='(',b),ps(a.k).toLowerCase()),')');Zhb((b.a+='_',b),X2b(a));return b.a} -function h9b(a,b){var c,d,e,f;e=a.k;c=Kfb(UD(mQb(a,(Ywc(),Jwc))));f=b.k;d=Kfb(UD(mQb(b,Jwc)));return f!=(r3b(),m3b)?-1:e!=m3b?1:c==d?0:c<d?-1:1} -function Lad(a,b){var c,d;c=RD(RD(Wjb(a.g,b.a),42).a,68);d=RD(RD(Wjb(a.g,b.b),42).a,68);return bjd(b.a,b.b)-bjd(b.a,Pid(c.b))-bjd(b.b,Pid(d.b))} -function GMb(a,b){var c;c=RD(Vrb(a.b,b),127).n;switch(b.g){case 1:a.t>=0&&(c.d=a.t);break;case 3:a.t>=0&&(c.a=a.t);}if(a.C){c.b=a.C.b;c.c=a.C.c}} -function JDc(){JDc=geb;IDc=new LDc(mEe,0);FDc=new LDc(BBe,1);GDc=new LDc('LINEAR_SEGMENTS',2);EDc=new LDc('BRANDES_KOEPF',3);HDc=new LDc(lEe,4)} -function IRb(){IRb=geb;FRb=new JRb(_ye,0);ERb=new JRb(aze,1);GRb=new JRb(bze,2);HRb=new JRb(cze,3);FRb.a=false;ERb.a=true;GRb.a=false;HRb.a=true} -function IPb(){IPb=geb;FPb=new JPb(_ye,0);EPb=new JPb(aze,1);GPb=new JPb(bze,2);HPb=new JPb(cze,3);FPb.a=false;EPb.a=true;GPb.a=false;HPb.a=true} -function Ivd(a,b,c,d){var e;if(c>=0){return a.Sh(b,c,d)}else{!!a.Ph()&&(d=(e=a.Fh(),e>=0?a.Ah(d):a.Ph().Th(a,-1-e,null,d)));return a.Ch(b,c,d)}} -function Zyd(a,b){switch(b){case 7:!a.e&&(a.e=new Yie(G4,a,7,4));sLd(a.e);return;case 8:!a.d&&(a.d=new Yie(G4,a,8,5));sLd(a.d);return;}yyd(a,b)} -function Ixd(a,b,c){c==null?(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),jOd(a.o,b)):(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),fOd(a.o,b,c));return a} -function Aob(a,b){yob();var c,d,e,f;c=a;f=b;if(ZD(a,21)&&!ZD(b,21)){c=b;f=a}for(e=c.Kc();e.Ob();){d=e.Pb();if(f.Hc(d)){return false}}return true} -function qTc(a,b,c,d){if(b.a<d.a){return true}else if(b.a==d.a){if(b.b<d.b){return true}else if(b.b==d.b){if(a.b>c.b){return true}}}return false} -function QD(a,b){if(bE(a)){return !!PD[b]}else if(a.Sm){return !!a.Sm[b]}else if(_D(a)){return !!OD[b]}else if($D(a)){return !!ND[b]}return false} -function udc(a){var b;b=a.a;do{b=RD(hs(new is(Mr(Z2b(b).a.Kc(),new ir))),18).c.i;b.k==(r3b(),o3b)&&a.b.Fc(b)}while(b.k==(r3b(),o3b));a.b=hv(a.b)} -function UGc(a,b){var c,d,e;e=a;for(d=new is(Mr(Z2b(b).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);!!c.c.i.c&&(e=$wnd.Math.max(e,c.c.i.c.p))}return e} -function INb(a,b){var c,d,e;e=0;d=RD(RD(Qc(a.r,b),21),87).Kc();while(d.Ob()){c=RD(d.Pb(),117);e+=c.d.d+c.b.Mf().b+c.d.a;d.Ob()&&(e+=a.w)}return e} -function AMb(a,b){var c,d,e;e=0;d=RD(RD(Qc(a.r,b),21),87).Kc();while(d.Ob()){c=RD(d.Pb(),117);e+=c.d.b+c.b.Mf().a+c.d.c;d.Ob()&&(e+=a.w)}return e} -function O2c(a){var b,c,d,e;d=0;e=Q2c(a);if(e.c.length==0){return 1}else{for(c=new Anb(e);c.a<c.c.c.length;){b=RD(ynb(c),27);d+=O2c(b)}}return d} -function aIc(a){var b,c,d;d=a.c.a;a.p=(Qb(d),new dnb(d));for(c=new Anb(d);c.a<c.c.c.length;){b=RD(ynb(c),10);b.p=eIc(b).a}yob();_mb(a.p,new nIc)} -function UJd(a,b,c){var d,e,f,g;d=a.dd(b);if(d!=-1){if(a.Pj()){f=a.Qj();g=cJd(a,d);e=a.Ij(4,g,null,d,f);!c?(c=e):c.nj(e)}else{cJd(a,d)}}return c} -function rLd(a,b,c){var d,e,f,g;d=a.dd(b);if(d!=-1){if(a.Pj()){f=a.Qj();g=THd(a,d);e=a.Ij(4,g,null,d,f);!c?(c=e):c.nj(e)}else{THd(a,d)}}return c} -function Tje(a,b,c,d){var e,f,g;if(c.Xh(b)){nke();if(wWd(b)){e=RD(c.Mh(b),160);Wje(a,e)}else{f=(g=b,!g?null:RD(d,54).gi(g));!!f&&Uje(c.Mh(b),f)}}} -function Dvd(a,b,c,d){var e,f,g;f=vYd(a.Dh(),b);e=b-a.ji();return e<0?(g=a.Ih(f),g>=0?a.Lh(g,c,true):Qvd(a,f,c)):RD(f,69).wk().yk(a,a.hi(),e,c,d)} -function aNb(a,b,c,d){var e,f;f=b.pf((umd(),ild))?RD(b.of(ild),21):a.j;e=lMb(f);if(e==(hMb(),gMb)){return}if(c&&!jMb(e)){return}LKb(cNb(a,e,d),b)} -function Y6b(a){switch(a.g){case 1:return mOb(),lOb;case 3:return mOb(),iOb;case 2:return mOb(),kOb;case 4:return mOb(),jOb;default:return null;}} -function kmc(a,b,c){if(a.e){switch(a.b){case 1:Ulc(a.c,b,c);break;case 0:Vlc(a.c,b,c);}}else{Slc(a.c,b,c)}a.a[b.p][c.p]=a.c.i;a.a[c.p][b.p]=a.c.e} -function LLc(a){var b,c;if(a==null){return null}c=$C(jR,Nve,199,a.length,0,2);for(b=0;b<c.length;b++){c[b]=RD(Gnb(a[b],a[b].length),199)}return c} -function Dhe(a){var b;if(Bhe(a)){Ahe(a);if(a.ul()){b=Bge(a.e,a.b,a.c,a.a,a.j);a.j=b}a.g=a.a;++a.a;++a.c;a.i=0;return a.j}else{throw Adb(new Dvb)}} -function YOb(a,b){var c,d,e,f;f=a.o;c=a.p;f<c?(f*=f):(c*=c);d=f+c;f=b.o;c=b.p;f<c?(f*=f):(c*=c);e=f+c;if(d<e){return -1}if(d==e){return 0}return 1} -function fZd(a,b){var c,d,e;e=RHd(a,b);if(e>=0)return e;if(a.ol()){for(d=0;d<a.i;++d){c=a.pl(RD(a.g[d],58));if(dE(c)===dE(b)){return d}}}return -1} -function eHd(a,b,c){var d,e;e=a.gc();if(b>=e)throw Adb(new aMd(b,e));if(a.Si()){d=a.dd(c);if(d>=0&&d!=b){throw Adb(new agb(LIe))}}return a.Xi(b,c)} -function wx(a,b){this.a=RD(Qb(a),253);this.b=RD(Qb(b),253);if(a.Ed(b)>0||a==(Wk(),Vk)||b==(kl(),jl)){throw Adb(new agb('Invalid range: '+Dx(a,b)))}} -function p_b(a){var b,c;this.b=new bnb;this.c=a;this.a=false;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),10);this.a=this.a|b.k==(r3b(),p3b)}} -function xIb(a,b){var c,d,e;c=eJb(new gJb,a);for(e=new Anb(b);e.a<e.c.c.length;){d=RD(ynb(e),125);rIb(uIb(tIb(vIb(sIb(new wIb,0),0),c),d))}return c} -function y0b(a,b,c){c.Ug('Compound graph preprocessor',1);a.a=new Tp;D0b(a,b,null);x0b(a,b);C0b(a);pQb(b,(Ywc(),_vc),a.a);a.a=null;akb(a.b);c.Vg()} -function aec(a,b,c){var d,e,f;for(e=new is(Mr((b?Z2b(a):a3b(a)).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);f=b?d.c.i:d.d.i;f.k==(r3b(),n3b)&&g3b(f,c)}} -function FZc(a,b){var c,d,e;b.Ug('Untreeify',1);c=RD(mQb(a,(q$c(),k$c)),15);for(e=c.Kc();e.Ob();){d=RD(e.Pb(),65);Mub(d.b.d,d);Mub(d.c.b,d)}b.Vg()} -function Znc(a){var b,c,d;for(d=RD(Qc(a.a,(Bnc(),znc)),15).Kc();d.Ob();){c=RD(d.Pb(),105);b=foc(c);Qnc(a,c,b[0],(joc(),goc),0);Qnc(a,c,b[1],ioc,1)}} -function $nc(a){var b,c,d;for(d=RD(Qc(a.a,(Bnc(),Anc)),15).Kc();d.Ob();){c=RD(d.Pb(),105);b=foc(c);Qnc(a,c,b[0],(joc(),goc),0);Qnc(a,c,b[1],ioc,1)}} -function wDc(){wDc=geb;uDc=new yDc(LAe,0);vDc=new yDc('PORT_POSITION',1);tDc=new yDc('NODE_SIZE_WHERE_SPACE_PERMITS',2);sDc=new yDc('NODE_SIZE',3)} -function z6c(){z6c=geb;w6c=new A6c('INTERACTIVE_NODE_REORDERER',0);y6c=new A6c('MIN_SIZE_PRE_PROCESSOR',1);x6c=new A6c('MIN_SIZE_POST_PROCESSOR',2)} -function Rjd(){Rjd=geb;Ljd=new Sjd('AUTOMATIC',0);Ojd=new Sjd(Nye,1);Pjd=new Sjd(Oye,2);Qjd=new Sjd('TOP',3);Mjd=new Sjd(Qye,4);Njd=new Sjd(Kye,5)} -function Pjb(a,b,c,d){Ljb();var e,f;e=0;for(f=0;f<c;f++){e=Bdb(Ndb(Cdb(b[f],yxe),Cdb(d,yxe)),Cdb(Ydb(e),yxe));a[f]=Ydb(e);e=Udb(e,32)}return Ydb(e)} -function qKb(a,b,c){var d,e;e=0;for(d=0;d<iKb;d++){e=$wnd.Math.max(e,gKb(a.a[b.g][d],c))}b==(ZJb(),XJb)&&!!a.b&&(e=$wnd.Math.max(e,a.b.b));return e} -function Jwb(a,b){var c,d;lFb(b>0);if((b&-b)==b){return eE(b*Kwb(a,31)*4.6566128730773926E-10)}do{c=Kwb(a,31);d=c%b}while(c-d+(b-1)<0);return eE(d)} -function d2b(a,b,c){switch(c.g){case 1:a.a=b.a/2;a.b=0;break;case 2:a.a=b.a;a.b=b.b/2;break;case 3:a.a=b.a/2;a.b=b.b;break;case 4:a.a=0;a.b=b.b/2;}} -function Onc(a,b,c,d){var e,f;for(e=b;e<a.c.length;e++){f=(tFb(e,a.c.length),RD(a.c[e],12));if(c.Mb(f)){ZEb(d.c,f)}else{return e}}return a.c.length} -function u5c(a){switch(a.g){case 0:return null;case 1:return new _5c;case 2:return new R5c;default:throw Adb(new agb(mFe+(a.f!=null?a.f:''+a.g)));}} -function U9c(a,b,c){var d,e;L9c(a,b-a.s,c-a.t);for(e=new Anb(a.n);e.a<e.c.c.length;){d=RD(ynb(e),209);Y9c(d,d.e+b-a.s);Z9c(d,d.f+c-a.t)}a.s=b;a.t=c} -function AIb(a){var b,c,d,e,f;c=0;for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),125);d.d=c++}b=zIb(a);f=null;b.c.length>1&&(f=xIb(a,b));return f} -function yqd(a){var b;b=Kfb(UD(Gxd(a,(umd(),lmd))))*$wnd.Math.sqrt((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a).i);return new rjd(b,b/Kfb(UD(Gxd(a,kmd))))} -function Dzd(a){var b;if(!!a.f&&a.f.Vh()){b=RD(a.f,54);a.f=RD(Vvd(a,b),84);a.f!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,8,b,a.f))}return a.f} -function Ezd(a){var b;if(!!a.i&&a.i.Vh()){b=RD(a.i,54);a.i=RD(Vvd(a,b),84);a.i!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,7,b,a.i))}return a.i} -function Z5d(a){var b;if(!!a.b&&(a.b.Db&64)!=0){b=a.b;a.b=RD(Vvd(a,b),19);a.b!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,21,b,a.b))}return a.b} -function UNd(a,b){var c,d,e;if(a.d==null){++a.e;++a.f}else{d=b.Bi();_Nd(a,a.f+1);e=(d&lve)%a.d.length;c=a.d[e];!c&&(c=a.d[e]=a.dk());c.Fc(b);++a.f}} -function Mge(a,b,c){var d;if(b.tk()){return false}else if(b.Ik()!=-2){d=b.ik();return d==null?c==null:pb(d,c)}else return b.qk()==a.e.Dh()&&c==null} -function Io(){var a;dk(16,fwe);a=Wp(16);this.b=$C(XF,ewe,302,a,0,1);this.c=$C(XF,ewe,302,a,0,1);this.a=null;this.e=null;this.i=0;this.f=a-1;this.g=0} -function j3b(a){v2b.call(this);this.k=(r3b(),p3b);this.j=(dk(6,iwe),new cnb(6));this.b=(dk(2,iwe),new cnb(2));this.d=new T2b;this.f=new C3b;this.a=a} -function wgc(a){var b,c;if(a.c.length<=1){return}b=tgc(a,(qpd(),npd));vgc(a,RD(b.a,17).a,RD(b.b,17).a);c=tgc(a,ppd);vgc(a,RD(c.a,17).a,RD(c.b,17).a)} -function vHc(a,b,c){var d,e;e=a.a.b;for(d=e.c.length;d<c;d++){Qmb(e,e.c.length,new R4b(a.a))}g3b(b,(tFb(c-1,e.c.length),RD(e.c[c-1],30)));a.b[b.p]=c} -function K_c(a,b){var c,d,e;a.b[b.g]=1;for(d=Sub(b.d,0);d.b!=d.d.c;){c=RD(evb(d),65);e=c.c;a.b[e.g]==1?Mub(a.a,c):a.b[e.g]==2?(a.b[e.g]=1):K_c(a,e)}} -function u3c(a,b,c,d){var e,f,g;e=d?RD(Qc(a.a,b),21):RD(Qc(a.b,b),21);for(g=e.Kc();g.Ob();){f=RD(g.Pb(),27);if(o3c(a,c,f)){return true}}return false} -function d$d(a){var b,c;for(c=new dMd(a);c.e!=c.i.gc();){b=RD(bMd(c),89);if(!!b.e||(!b.d&&(b.d=new XZd(o7,b,1)),b.d).i!=0){return true}}return false} -function o5d(a){var b,c;for(c=new dMd(a);c.e!=c.i.gc();){b=RD(bMd(c),89);if(!!b.e||(!b.d&&(b.d=new XZd(o7,b,1)),b.d).i!=0){return true}}return false} -function dIc(a){var b,c,d;b=0;for(d=new Anb(a.c.a);d.a<d.c.c.length;){c=RD(ynb(d),10);b+=Kr(new is(Mr(a3b(c).a.Kc(),new ir)))}return b/a.c.a.c.length} -function Tcd(){Tcd=geb;Scd=(Kcd(),Jcd);Qcd=new A3b(8);new mGd((umd(),tld),Qcd);new mGd(fmd,8);Rcd=Hcd;Ocd=xcd;Pcd=ycd;Ncd=new mGd(Mkd,(Geb(),false))} -function $dd(a,b,c){var d;c.Ug('Shrinking tree compaction',1);if(Heb(TD(mQb(b,(OQb(),MQb))))){Ydd(a,b.f);zQb(b.f,(d=b.c,d))}else{zQb(b.f,b.c)}c.Vg()} -function Uyd(a,b,c,d){switch(b){case 7:return !a.e&&(a.e=new Yie(G4,a,7,4)),a.e;case 8:return !a.d&&(a.d=new Yie(G4,a,8,5)),a.d;}return vyd(a,b,c,d)} -function h2d(a){var b;if(!!a.a&&a.a.Vh()){b=RD(a.a,54);a.a=RD(Vvd(a,b),142);a.a!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,5,b,a.a))}return a.a} -function Xqe(a){if(a<48)return -1;if(a>102)return -1;if(a<=57)return a-48;if(a<65)return -1;if(a<=70)return a-65+10;if(a<97)return -1;return a-97+10} -function ck(a,b){if(a==null){throw Adb(new Ogb('null key in entry: null='+b))}else if(b==null){throw Adb(new Ogb('null value in entry: '+a+'=null'))}} -function Cr(a,b){var c,d;while(a.Ob()){if(!b.Ob()){return false}c=a.Pb();d=b.Pb();if(!(dE(c)===dE(d)||c!=null&&pb(c,d))){return false}}return !b.Ob()} -function aLb(a,b){var c;c=cD(WC(iE,1),vxe,28,15,[gKb(a.a[0],b),gKb(a.a[1],b),gKb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} -function bLb(a,b){var c;c=cD(WC(iE,1),vxe,28,15,[hKb(a.a[0],b),hKb(a.a[1],b),hKb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} -function vIc(a,b,c){if(!Cod(RD(mQb(b,(yCc(),BBc)),101))){uIc(a,b,e3b(b,c));uIc(a,b,e3b(b,(qpd(),npd)));uIc(a,b,e3b(b,Yod));yob();_mb(b.j,new JIc(a))}} -function sUc(a){var b,c;a.c||vUc(a);c=new Ejd;b=new Anb(a.a);ynb(b);while(b.a<b.c.c.length){Mub(c,RD(ynb(b),418).a)}sFb(c.b!=0);Wub(c,c.c.b);return c} -function O9c(a,b,c){var d,e,f,g,h;h=a.r+b;a.r+=b;a.d+=c;d=c/a.n.c.length;e=0;for(g=new Anb(a.n);g.a<g.c.c.length;){f=RD(ynb(g),209);X9c(f,h,d,e);++e}} -function kHb(a){var b,c,d;a.b.a.$b();a.a=$C(hN,rve,60,a.c.c.a.b.c.length,0,1);b=0;for(d=new Anb(a.c.c.a.b);d.a<d.c.c.length;){c=RD(ynb(d),60);c.f=b++}} -function TYb(a){var b,c,d;a.b.a.$b();a.a=$C(bQ,rve,86,a.c.a.a.b.c.length,0,1);b=0;for(d=new Anb(a.c.a.a.b);d.a<d.c.c.length;){c=RD(ynb(d),86);c.i=b++}} -function Er(a){var b;b=yr(a);if(!gs(a)){throw Adb(new veb('position (0) must be less than the number of elements that remained ('+b+')'))}return hs(a)} -function ZCb(a,b){var c;if(!a.a){c=$C(iE,vxe,28,0,15,1);ixb(a.b.a,new bDb(c));bFb(c,heb(iob.prototype.Me,iob,[]));a.a=new Lxb(c,a.d)}return zxb(a.a,b)} -function $Pb(b,c,d){var e;try{return PPb(b,c+b.j,d+b.k)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} -function _Pb(b,c,d){var e;try{return QPb(b,c+b.j,d+b.k)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} -function aQb(b,c,d){var e;try{return RPb(b,c+b.j,d+b.k)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} -function J8b(a){switch(a.g){case 1:return qpd(),ppd;case 4:return qpd(),Yod;case 3:return qpd(),Xod;case 2:return qpd(),npd;default:return qpd(),opd;}} -function Imc(a,b,c){if(b.k==(r3b(),p3b)&&c.k==o3b){a.d=Fmc(b,(qpd(),npd));a.b=Fmc(b,Yod)}if(c.k==p3b&&b.k==o3b){a.d=Fmc(c,(qpd(),Yod));a.b=Fmc(c,npd)}} -function Mmc(a,b){var c,d,e;e=b3b(a,b);for(d=e.Kc();d.Ob();){c=RD(d.Pb(),12);if(mQb(c,(Ywc(),Iwc))!=null||k4b(new l4b(c.b))){return true}}return false} -function RNc(a,b,c){c.Ug('Linear segments node placement',1);a.b=RD(mQb(b,(Ywc(),Qwc)),312);SNc(a,b);NNc(a,b);KNc(a,b);QNc(a);a.a=null;a.b=null;c.Vg()} -function W9c(a,b){Dyd(b,a.e+a.d+(a.c.c.length==0?0:a.b));Eyd(b,a.f);a.a=$wnd.Math.max(a.a,b.f);a.d+=b.g+(a.c.c.length==0?0:a.b);Rmb(a.c,b);return true} -function bad(a,b,c){var d,e,f,g;g=0;d=c/a.a.c.length;for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),172);U9c(e,e.s,e.t+g*d);O9c(e,a.d-e.r+b,d);++g}} -function Cid(a,b){var c,d,e,f,g,h;e=b.length-1;g=0;h=0;for(d=0;d<=e;d++){f=b[d];c=vid(e,d)*Iid(1-a,e-d)*Iid(a,d);g+=f.a*c;h+=f.b*c}return new rjd(g,h)} -function JHd(a,b){var c,d,e,f,g;c=b.gc();a._i(a.i+c);f=b.Kc();g=a.i;a.i+=c;for(d=g;d<a.i;++d){e=f.Pb();MHd(a,d,a.Zi(d,e));a.Mi(d,e);a.Ni()}return c!=0} -function TJd(a,b,c){var d,e,f;if(a.Pj()){d=a.Ej();f=a.Qj();++a.j;a.qj(d,a.Zi(d,b));e=a.Ij(3,null,b,d,f);!c?(c=e):c.nj(e)}else{$Id(a,a.Ej(),b)}return c} -function u0d(a,b,c){var d,e,f;d=RD(QHd(tYd(a.a),b),89);f=(e=d.c,ZD(e,90)?RD(e,29):(JTd(),zTd));((f.Db&64)!=0?Vvd(a.b,f):f)==c?i2d(d):l2d(d,c);return f} -function pne(a){var b;return a==null?null:new ejb((b=nue(a,true),b.length>0&&(BFb(0,b.length),b.charCodeAt(0)==43)?(BFb(1,b.length+1),b.substr(1)):b))} -function qne(a){var b;return a==null?null:new ejb((b=nue(a,true),b.length>0&&(BFb(0,b.length),b.charCodeAt(0)==43)?(BFb(1,b.length+1),b.substr(1)):b))} -function Syb(a,b,c,d,e,f,g,h){var i,j;if(!d){return}i=d.a[0];!!i&&Syb(a,b,c,i,e,f,g,h);Tyb(a,c,d.d,e,f,g,h)&&b.Fc(d);j=d.a[1];!!j&&Syb(a,b,c,j,e,f,g,h)} -function PPb(b,c,d){try{return Gdb(SPb(b,c,d),1)}catch(a){a=zdb(a);if(ZD(a,333)){throw Adb(new veb(fze+b.o+'*'+b.p+gze+c+pve+d+hze))}else throw Adb(a)}} -function QPb(b,c,d){try{return Gdb(SPb(b,c,d),0)}catch(a){a=zdb(a);if(ZD(a,333)){throw Adb(new veb(fze+b.o+'*'+b.p+gze+c+pve+d+hze))}else throw Adb(a)}} -function RPb(b,c,d){try{return Gdb(SPb(b,c,d),2)}catch(a){a=zdb(a);if(ZD(a,333)){throw Adb(new veb(fze+b.o+'*'+b.p+gze+c+pve+d+hze))}else throw Adb(a)}} -function lMd(b,c){if(b.g==-1){throw Adb(new cgb)}b.Xj();try{b.d.hd(b.g,c);b.f=b.d.j}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}} -function Y7b(a){var b,c,d,e,f;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);b=0;for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);e.p=b++}}} -function Ee(a,b){var c,d,e,f;f=a.gc();b.length<f&&(b=cFb(new Array(f),b));e=b;d=a.Kc();for(c=0;c<f;++c){bD(e,c,d.Pb())}b.length>f&&bD(b,f,null);return b} -function av(a,b){var c,d;d=a.gc();if(b==null){for(c=0;c<d;c++){if(a.Xb(c)==null){return c}}}else{for(c=0;c<d;c++){if(pb(b,a.Xb(c))){return c}}}return -1} -function Jd(a,b){var c,d,e;c=b.ld();e=b.md();d=a.xc(c);if(!(dE(e)===dE(d)||e!=null&&pb(e,d))){return false}if(d==null&&!a._b(c)){return false}return true} -function mD(a,b){var c,d,e;if(b<=22){c=a.l&(1<<b)-1;d=e=0}else if(b<=44){c=a.l;d=a.m&(1<<b-22)-1;e=0}else{c=a.l;d=a.m;e=a.h&(1<<b-44)-1}return hD(c,d,e)} -function pNb(a,b){switch(b.g){case 1:return a.f.n.d+a.t;case 3:return a.f.n.a+a.t;case 2:return a.f.n.c+a.s;case 4:return a.f.n.b+a.s;default:return 0;}} -function TNb(a,b){var c,d;d=b.c;c=b.a;switch(a.b.g){case 0:c.d=a.e-d.a-d.d;break;case 1:c.d+=a.e;break;case 2:c.c=a.e-d.a-d.d;break;case 3:c.c=a.e+d.d;}} -function QRb(a,b,c,d){var e,f;this.a=b;this.c=d;e=a.a;PRb(this,new rjd(-e.c,-e.d));$id(this.b,c);f=d/2;b.a?njd(this.b,0,f):njd(this.b,f,0);Rmb(a.c,this)} -function i2c(a,b,c,d){var e;this.c=a;this.d=b;e=new Yub;Pub(e,c,e.c.b,e.c);this.a=e;this.b=RD(mQb(d,(h_c(),H$c)),88);this.e=Kfb(UD(mQb(d,$$c)));h2c(this)} -function j5c(){j5c=geb;i5c=new l5c(LAe,0);g5c=new l5c(EBe,1);h5c=new l5c('EDGE_LENGTH_BY_POSITION',2);f5c=new l5c('CROSSING_MINIMIZATION_BY_POSITION',3)} -function uEd(a,b){var c,d;c=RD(Ao(a.g,b),27);if(c){return c}d=RD(Ao(a.j,b),123);if(d){return d}throw Adb(new CDd('Referenced shape does not exist: '+b))} -function Pk(b,c){var d,e;if(ZD(c,253)){e=RD(c,253);try{d=b.Ed(e);return d==0}catch(a){a=zdb(a);if(ZD(a,212)){return false}else throw Adb(a)}}return false} -function tWb(a,b){if(a.c==b){return a.d}else if(a.d==b){return a.c}else{throw Adb(new agb("Node 'one' must be either source or target of edge 'edge'."))}} -function rRc(a,b){if(a.c.i==b){return a.d.i}else if(a.d.i==b){return a.c.i}else{throw Adb(new agb('Node '+b+' is neither source nor target of edge '+a))}} -function $gc(a,b,c){c.Ug('Self-Loop ordering',1);FDb(GDb(CDb(CDb(EDb(new SDb(null,new Swb(b.b,16)),new chc),new ehc),new ghc),new ihc),new khc(a));c.Vg()} -function Fpc(a,b){var c;switch(b.g){case 2:case 4:c=a.a;a.c.d.n.b<c.d.n.b&&(c=a.c);Gpc(a,b,(enc(),dnc),c);break;case 1:case 3:Gpc(a,b,(enc(),anc),null);}} -function Ypc(a,b,c,d,e,f){var g,h,i,j,k;g=Wpc(b,c,f);h=c==(qpd(),Yod)||c==ppd?-1:1;j=a[c.g];for(k=0;k<j.length;k++){i=j[k];i>0&&(i+=e);j[k]=g;g+=h*(i+d)}} -function vsc(a){var b,c,d;d=a.f;a.n=$C(iE,vxe,28,d,15,1);a.d=$C(iE,vxe,28,d,15,1);for(b=0;b<d;b++){c=RD(Vmb(a.c.b,b),30);a.n[b]=ssc(a,c);a.d[b]=rsc(a,c)}} -function Xwd(a,b){var c,d,e;e=0;for(d=2;d<b;d<<=1){(a.Db&d)!=0&&++e}if(e==0){for(c=b<<=1;c<=128;c<<=1){if((a.Db&c)!=0){return 0}}return -1}else{return e}} -function Sge(a,b){var c,d,e,f,g;g=pke(a.e.Dh(),b);f=null;c=RD(a.g,124);for(e=0;e<a.i;++e){d=c[e];if(g.am(d.Lk())){!f&&(f=new YHd);WGd(f,d)}}!!f&&wLd(a,f)} -function ene(a){var b,c,d;if(!a)return null;if(a.dc())return '';d=new Qhb;for(c=a.Kc();c.Ob();){b=c.Pb();Nhb(d,WD(b));d.a+=' '}return qeb(d,d.a.length-1)} -function _C(a,b){var c=new Array(b);var d;switch(a){case 14:case 15:d=0;break;case 16:d=false;break;default:return c;}for(var e=0;e<b;++e){c[e]=d}return c} -function GGb(a){var b,c,d;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.c.$b()}Dmd(a.d)?(d=a.a.c):(d=a.a.d);Umb(d,new WGb(a));a.c.df(a);HGb(a)} -function oUb(a){var b,c,d,e;for(c=new Anb(a.e.c);c.a<c.c.c.length;){b=RD(ynb(c),289);for(e=new Anb(b.b);e.a<e.c.c.length;){d=RD(ynb(e),453);hUb(d)}YTb(b)}} -function gad(a){var b,c,d,e,f;d=0;f=0;e=0;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),172);f=$wnd.Math.max(f,b.r);d+=b.d+(e>0?a.c:0);++e}a.b=d;a.d=f} -function rKb(a,b){var c;c=cD(WC(iE,1),vxe,28,15,[qKb(a,(ZJb(),WJb),b),qKb(a,XJb,b),qKb(a,YJb,b)]);if(a.f){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} -function cQb(b,c,d){var e;try{TPb(b,c+b.j,d+b.k,false,true)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} -function dQb(b,c,d){var e;try{TPb(b,c+b.j,d+b.k,true,false)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} -function u8b(a){var b;if(!nQb(a,(yCc(),dBc))){return}b=RD(mQb(a,dBc),21);if(b.Hc((dod(),Xnd))){b.Mc(Xnd);b.Fc(Znd)}else if(b.Hc(Znd)){b.Mc(Znd);b.Fc(Xnd)}} -function v8b(a){var b;if(!nQb(a,(yCc(),dBc))){return}b=RD(mQb(a,dBc),21);if(b.Hc((dod(),cod))){b.Mc(cod);b.Fc(aod)}else if(b.Hc(aod)){b.Mc(aod);b.Fc(cod)}} -function oqc(a,b,c,d){var e,f,g,h;a.a==null&&rqc(a,b);g=b.b.j.c.length;f=c.d.p;h=d.d.p;e=h-1;e<0&&(e=g-1);return f<=e?a.a[e]-a.a[f]:a.a[g-1]-a.a[f]+a.a[e]} -function Cud(a){var b,c;if(!a.b){a.b=fv(RD(a.f,27).kh().i);for(c=new dMd(RD(a.f,27).kh());c.e!=c.i.gc();){b=RD(bMd(c),135);Rmb(a.b,new Bud(b))}}return a.b} -function Dud(a){var b,c;if(!a.e){a.e=fv(wCd(RD(a.f,27)).i);for(c=new dMd(wCd(RD(a.f,27)));c.e!=c.i.gc();){b=RD(bMd(c),123);Rmb(a.e,new Rud(b))}}return a.e} -function yud(a){var b,c;if(!a.a){a.a=fv(tCd(RD(a.f,27)).i);for(c=new dMd(tCd(RD(a.f,27)));c.e!=c.i.gc();){b=RD(bMd(c),27);Rmb(a.a,new Fud(a,b))}}return a.a} -function DXd(b){var c;if(!b.C&&(b.D!=null||b.B!=null)){c=EXd(b);if(c){b.hl(c)}else{try{b.hl(null)}catch(a){a=zdb(a);if(!ZD(a,63))throw Adb(a)}}}return b.C} -function xMb(a){switch(a.q.g){case 5:uMb(a,(qpd(),Yod));uMb(a,npd);break;case 4:vMb(a,(qpd(),Yod));vMb(a,npd);break;default:wMb(a,(qpd(),Yod));wMb(a,npd);}} -function GNb(a){switch(a.q.g){case 5:DNb(a,(qpd(),Xod));DNb(a,ppd);break;case 4:ENb(a,(qpd(),Xod));ENb(a,ppd);break;default:FNb(a,(qpd(),Xod));FNb(a,ppd);}} -function G$b(a,b){var c,d,e;e=new pjd;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),36);w$b(c,e.a,0);e.a+=c.f.a+b;e.b=$wnd.Math.max(e.b,c.f.b)}e.b>0&&(e.b+=b);return e} -function I$b(a,b){var c,d,e;e=new pjd;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),36);w$b(c,0,e.b);e.b+=c.f.b+b;e.a=$wnd.Math.max(e.a,c.f.a)}e.a>0&&(e.a+=b);return e} -function l2b(a){var b,c,d;d=lve;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),10);nQb(b,(Ywc(),zwc))&&(d=$wnd.Math.min(d,RD(mQb(b,zwc),17).a))}return d} -function PLc(a,b){var c,d;if(b.length==0){return 0}c=lMc(a.a,b[0],(qpd(),ppd));c+=lMc(a.a,b[b.length-1],Xod);for(d=0;d<b.length;d++){c+=QLc(a,d,b)}return c} -function VUc(){HUc();this.c=new bnb;this.i=new bnb;this.e=new Iub;this.f=new Iub;this.g=new Iub;this.j=new bnb;this.a=new bnb;this.b=new Tsb;this.k=new Tsb} -function AXd(a,b){var c,d;if(a.Db>>16==6){return a.Cb.Th(a,5,t7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?a.ii():c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} -function kA(a){fA();var b=a.e;if(b&&b.stack){var c=b.stack;var d=b+'\n';c.substring(0,d.length)==d&&(c=c.substring(d.length));return c.split('\n')}return []} -function pgb(a){var b;b=(wgb(),vgb);return b[a>>>28]|b[a>>24&15]<<4|b[a>>20&15]<<8|b[a>>16&15]<<12|b[a>>12&15]<<16|b[a>>8&15]<<20|b[a>>4&15]<<24|b[a&15]<<28} -function mmb(a){var b,c,d;if(a.b!=a.c){return}d=a.a.length;c=mgb($wnd.Math.max(8,d))<<1;if(a.b!=0){b=WEb(a.a,c);lmb(a,b,d);a.a=b;a.b=0}else{aFb(a.a,c)}a.c=d} -function uNb(a,b){var c;c=a.b;return c.pf((umd(),Gld))?c.ag()==(qpd(),ppd)?-c.Mf().a-Kfb(UD(c.of(Gld))):b+Kfb(UD(c.of(Gld))):c.ag()==(qpd(),ppd)?-c.Mf().a:b} -function X2b(a){var b;if(a.b.c.length!=0&&!!RD(Vmb(a.b,0),72).a){return RD(Vmb(a.b,0),72).a}b=R0b(a);if(b!=null){return b}return ''+(!a.c?-1:Wmb(a.c.a,a,0))} -function M3b(a){var b;if(a.f.c.length!=0&&!!RD(Vmb(a.f,0),72).a){return RD(Vmb(a.f,0),72).a}b=R0b(a);if(b!=null){return b}return ''+(!a.i?-1:Wmb(a.i.j,a,0))} -function skc(a,b){var c,d;if(b<0||b>=a.gc()){return null}for(c=b;c<a.gc();++c){d=RD(a.Xb(c),131);if(c==a.gc()-1||!d.o){return new Ptd(sgb(c),d)}}return null} -function Xrc(a,b,c){var d,e,f,g,h;f=a.c;h=c?b:a;d=c?a:b;for(e=h.p+1;e<d.p;++e){g=RD(Vmb(f.a,e),10);if(!(g.k==(r3b(),l3b)||Yrc(g))){return false}}return true} -function Ead(a){var b,c,d,e,f;f=0;e=pxe;d=0;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),172);f+=b.r+(d>0?a.c:0);e=$wnd.Math.max(e,b.d);++d}a.e=f;a.b=e} -function Qud(a){var b,c;if(!a.b){a.b=fv(RD(a.f,123).kh().i);for(c=new dMd(RD(a.f,123).kh());c.e!=c.i.gc();){b=RD(bMd(c),135);Rmb(a.b,new Bud(b))}}return a.b} -function aHd(a,b){var c,d,e;if(b.dc()){return jQd(),jQd(),iQd}else{c=new ZLd(a,b.gc());for(e=new dMd(a);e.e!=e.i.gc();){d=bMd(e);b.Hc(d)&&WGd(c,d)}return c}} -function Axd(a,b,c,d){if(b==0){return d?(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),a.o):(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),dOd(a.o))}return Dvd(a,b,c,d)} -function rBd(a){var b,c;if(a.rb){for(b=0,c=a.rb.i;b<c;++b){aAd(QHd(a.rb,b))}}if(a.vb){for(b=0,c=a.vb.i;b<c;++b){aAd(QHd(a.vb,b))}}Uee((lke(),jke),a);a.Bb|=1} -function zBd(a,b,c,d,e,f,g,h,i,j,k,l,m,n){ABd(a,b,d,null,e,f,g,h,i,j,m,true,n);a6d(a,k);ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),2);!!c&&b6d(a,c);c6d(a,l);return a} -function Jae(b){var c,d;if(b==null){return null}d=0;try{d=Oeb(b,qwe,lve)&Bwe}catch(a){a=zdb(a);if(ZD(a,130)){c=Ahb(b);d=c[0]}else throw Adb(a)}return hfb(d)} -function Kae(b){var c,d;if(b==null){return null}d=0;try{d=Oeb(b,qwe,lve)&Bwe}catch(a){a=zdb(a);if(ZD(a,130)){c=Ahb(b);d=c[0]}else throw Adb(a)}return hfb(d)} -function rD(a,b){var c,d,e;e=a.h-b.h;if(e<0){return false}c=a.l-b.l;d=a.m-b.m+(c>>22);e+=d>>22;if(e<0){return false}a.l=c&dxe;a.m=d&dxe;a.h=e&exe;return true} -function Tyb(a,b,c,d,e,f,g){var h,i;if(b.Te()&&(i=a.a.Ne(c,d),i<0||!e&&i==0)){return false}if(b.Ue()&&(h=a.a.Ne(c,f),h>0||!g&&h==0)){return false}return true} -function Agc(a,b){sgc();var c;c=a.j.g-b.j.g;if(c!=0){return 0}switch(a.j.g){case 2:return Cgc(b,rgc)-Cgc(a,rgc);case 4:return Cgc(a,qgc)-Cgc(b,qgc);}return 0} -function uuc(a){switch(a.g){case 0:return nuc;case 1:return ouc;case 2:return puc;case 3:return quc;case 4:return ruc;case 5:return suc;default:return null;}} -function cBd(a,b,c){var d,e;d=(e=new R5d,YVd(e,b),PAd(e,c),WGd((!a.c&&(a.c=new C5d(u7,a,12,10)),a.c),e),e);$Vd(d,0);bWd(d,1);aWd(d,true);_Vd(d,true);return d} -function THd(a,b){var c,d;if(b>=a.i)throw Adb(new yNd(b,a.i));++a.j;c=a.g[b];d=a.i-b-1;d>0&&hib(a.g,b+1,a.g,b,d);bD(a.g,--a.i,null);a.Qi(b,c);a.Ni();return c} -function sWd(a,b){var c,d;if(a.Db>>16==17){return a.Cb.Th(a,21,h7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?a.ii():c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} -function _Fb(a){var b,c,d,e;yob();_mb(a.c,a.a);for(e=new Anb(a.c);e.a<e.c.c.length;){d=ynb(e);for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),693);b.bf(d)}}} -function r$b(a){var b,c,d,e;yob();_mb(a.c,a.a);for(e=new Anb(a.c);e.a<e.c.c.length;){d=ynb(e);for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),382);b.bf(d)}}} -function rJb(a){var b,c,d,e,f;e=lve;f=null;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),218);if(c.d.j^c.e.j){b=c.e.e-c.d.e-c.a;if(b<e){e=b;f=c}}}return f} -function QVb(){QVb=geb;OVb=new lGd(vAe,(Geb(),false));KVb=new lGd(wAe,100);MVb=(AWb(),yWb);LVb=new lGd(xAe,MVb);NVb=new lGd(yAe,Vze);PVb=new lGd(zAe,sgb(lve))} -function Xlc(a,b,c){var d,e,f,g,h,i,j,k;j=0;for(e=a.a[b],f=0,g=e.length;f<g;++f){d=e[f];k=aMc(d,c);for(i=k.Kc();i.Ob();){h=RD(i.Pb(),12);Zjb(a.f,h,sgb(j++))}}} -function UDd(a,b,c){var d,e,f,g;if(c){e=c.a.length;d=new vue(e);for(g=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);g.Ob();){f=RD(g.Pb(),17);Rc(a,b,tDd(JB(c,f.a)))}}} -function VDd(a,b,c){var d,e,f,g;if(c){e=c.a.length;d=new vue(e);for(g=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);g.Ob();){f=RD(g.Pb(),17);Rc(a,b,tDd(JB(c,f.a)))}}} -function foc(a){Mnc();var b;b=RD(Ee(Ec(a.k),$C(E3,NAe,64,2,0,1)),126);Wnb(b,0,b.length,null);if(b[0]==(qpd(),Yod)&&b[1]==ppd){bD(b,0,ppd);bD(b,1,Yod)}return b} -function hMc(a,b,c){var d,e,f;e=fMc(a,b,c);f=iMc(a,e);YLc(a.b);CMc(a,b,c);yob();_mb(e,new HMc(a));d=iMc(a,e);YLc(a.b);CMc(a,c,b);return new Ptd(sgb(f),sgb(d))} -function JNc(){JNc=geb;GNc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc));HNc=new kGd('linearSegments.inputPrio',sgb(0));INc=new kGd('linearSegments.outputPrio',sgb(0))} -function YVc(){YVc=geb;UVc=new $Vc('P1_TREEIFICATION',0);VVc=new $Vc('P2_NODE_ORDERING',1);WVc=new $Vc('P3_NODE_PLACEMENT',2);XVc=new $Vc('P4_EDGE_ROUTING',3)} -function yad(a){var b,c,d,e;c=0;b=0;for(e=new dMd(a);e.e!=e.i.gc();){d=RD(bMd(e),27);c=$wnd.Math.max(d.g+d.i,c);b=$wnd.Math.max(d.f+d.j,b)}return new rjd(c,b)} -function ard(a,b){var c,d,e,f;f=0;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),27);f+=$wnd.Math.pow(c.g*c.f-b,2)}e=$wnd.Math.sqrt(f/(a.c.length-1));return e} -function Pnd(){Pnd=geb;Ond=new Rnd('UNKNOWN',0);Lnd=new Rnd('ABOVE',1);Mnd=new Rnd('BELOW',2);Nnd=new Rnd('INLINE',3);new kGd('org.eclipse.elk.labelSide',Ond)} -function RHd(a,b){var c;if(a.Yi()&&b!=null){for(c=0;c<a.i;++c){if(pb(b,a.g[c])){return c}}}else{for(c=0;c<a.i;++c){if(dE(a.g[c])===dE(b)){return c}}}return -1} -function L0b(a,b,c){var d,e;if(b.c==(BEc(),zEc)&&c.c==yEc){return -1}else if(b.c==yEc&&c.c==zEc){return 1}d=P0b(b.a,a.a);e=P0b(c.a,a.a);return b.c==zEc?e-d:d-e} -function f3b(a,b,c){if(!!c&&(b<0||b>c.a.c.length)){throw Adb(new agb('index must be >= 0 and <= layer node count'))}!!a.c&&Ymb(a.c.a,a);a.c=c;!!c&&Qmb(c.a,b,a)} -function Gac(a,b){var c,d,e;for(d=new is(Mr(W2b(a).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);e=RD(b.Kb(c),10);return new cc(Qb(e.n.b+e.o.b/2))}return wb(),wb(),vb} -function RQc(a,b){this.c=new Tsb;this.a=a;this.b=b;this.d=RD(mQb(a,(Ywc(),Qwc)),312);dE(mQb(a,(yCc(),eBc)))===dE((Cuc(),Auc))?(this.e=new BRc):(this.e=new uRc)} -function ftd(a,b){var c,d;d=null;if(a.pf((umd(),amd))){c=RD(a.of(amd),96);c.pf(b)&&(d=c.of(b))}d==null&&!!a.Tf()&&(d=a.Tf().of(b));d==null&&(d=iGd(b));return d} -function ku(b,c){var d,e;d=b.fd(c);try{e=d.Pb();d.Qb();return e}catch(a){a=zdb(a);if(ZD(a,112)){throw Adb(new veb("Can't remove element "+c))}else throw Adb(a)}} -function GA(a,b){var c,d,e;d=new uB;e=new vB(d.q.getFullYear()-Owe,d.q.getMonth(),d.q.getDate());c=FA(a,b,e);if(c==0||c<b.length){throw Adb(new agb(b))}return e} -function iwb(a,b){var c,d,e;uFb(b);lFb(b!=a);e=a.b.c.length;for(d=b.Kc();d.Ob();){c=d.Pb();Rmb(a.b,uFb(c))}if(e!=a.b.c.length){jwb(a,0);return true}return false} -function dWb(){dWb=geb;XVb=(umd(),ald);new mGd(Pkd,(Geb(),true));$Vb=kld;_Vb=nld;aWb=pld;ZVb=ild;bWb=sld;cWb=Lld;WVb=(QVb(),OVb);UVb=LVb;VVb=NVb;YVb=PVb;TVb=KVb} -function U0b(a,b){if(b==a.c){return a.d}else if(b==a.d){return a.c}else{throw Adb(new agb("'port' must be either the source port or target port of the edge."))}} -function T6b(a,b,c){var d,e;e=a.o;d=a.d;switch(b.g){case 1:return -d.d-c;case 3:return e.b+d.a+c;case 2:return e.a+d.c+c;case 4:return -d.b-c;default:return 0;}} -function Y9b(a,b,c,d){var e,f,g,h;g3b(b,RD(d.Xb(0),30));h=d.kd(1,d.gc());for(f=RD(c.Kb(b),20).Kc();f.Ob();){e=RD(f.Pb(),18);g=e.c.i==b?e.d.i:e.c.i;Y9b(a,g,c,h)}} -function Bic(a){var b;b=new Tsb;if(nQb(a,(Ywc(),Vwc))){return RD(mQb(a,Vwc),85)}FDb(CDb(new SDb(null,new Swb(a.j,16)),new Dic),new Fic(b));pQb(a,Vwc,b);return b} -function zad(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new Anb(a);g.a<g.c.c.length;){f=RD(ynb(g),186);d=$wnd.Math.max(d,f.e);e+=f.b+(c>0?b:0);++c}return new rjd(d,e)} -function Czd(a,b){var c,d;if(a.Db>>16==6){return a.Cb.Th(a,6,G4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),hvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} -function cCd(a,b){var c,d;if(a.Db>>16==7){return a.Cb.Th(a,1,H4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),jvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} -function LCd(a,b){var c,d;if(a.Db>>16==9){return a.Cb.Th(a,9,J4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),lvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} -function M1d(a,b){var c,d;if(a.Db>>16==5){return a.Cb.Th(a,9,m7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),tTd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} -function qBd(a,b){var c,d;if(a.Db>>16==7){return a.Cb.Th(a,6,t7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),CTd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} -function iVd(a,b){var c,d;if(a.Db>>16==3){return a.Cb.Th(a,0,p7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),mTd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} -function IEd(){this.a=new BDd;this.g=new Io;this.j=new Io;this.b=new Tsb;this.d=new Io;this.i=new Io;this.k=new Tsb;this.c=new Tsb;this.e=new Tsb;this.f=new Tsb} -function kQd(a,b,c){var d,e,f;c<0&&(c=0);f=a.i;for(e=c;e<f;e++){d=QHd(a,e);if(b==null){if(d==null){return e}}else if(dE(b)===dE(d)||pb(b,d)){return e}}return -1} -function Bee(a,b){var c,d;c=b.qi(a.a);if(!c){return null}else{d=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),_Ke));return lhb(aLe,d)?Uee(a,BXd(b.qk())):d}} -function Oje(a,b){var c,d;if(b){if(b==a){return true}c=0;for(d=RD(b,54).Ph();!!d&&d!=b;d=d.Ph()){if(++c>wxe){return Oje(a,d)}if(d==a){return true}}}return false} -function yNb(a){tNb();switch(a.q.g){case 5:vNb(a,(qpd(),Yod));vNb(a,npd);break;case 4:wNb(a,(qpd(),Yod));wNb(a,npd);break;default:xNb(a,(qpd(),Yod));xNb(a,npd);}} -function CNb(a){tNb();switch(a.q.g){case 5:zNb(a,(qpd(),Xod));zNb(a,ppd);break;case 4:ANb(a,(qpd(),Xod));ANb(a,ppd);break;default:BNb(a,(qpd(),Xod));BNb(a,ppd);}} -function RTb(a){var b,c;b=RD(mQb(a,(yVb(),mVb)),17);if(b){c=b.a;c==0?pQb(a,(JVb(),IVb),new Owb):pQb(a,(JVb(),IVb),new Pwb(c))}else{pQb(a,(JVb(),IVb),new Pwb(1))}} -function b2b(a,b){var c;c=a.i;switch(b.g){case 1:return -(a.n.b+a.o.b);case 2:return a.n.a-c.o.a;case 3:return a.n.b-c.o.b;case 4:return -(a.n.a+a.o.a);}return 0} -function wec(a,b){switch(a.g){case 0:return b==(cxc(),$wc)?sec:tec;case 1:return b==(cxc(),$wc)?sec:rec;case 2:return b==(cxc(),$wc)?rec:tec;default:return rec;}} -function Fad(a,b){var c,d,e;Ymb(a.a,b);a.e-=b.r+(a.a.c.length==0?0:a.c);e=fFe;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),172);e=$wnd.Math.max(e,c.d)}a.b=e} -function jzd(a,b){var c,d;if(a.Db>>16==3){return a.Cb.Th(a,12,J4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),gvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} -function sCd(a,b){var c,d;if(a.Db>>16==11){return a.Cb.Th(a,10,J4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),kvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} -function n4d(a,b){var c,d;if(a.Db>>16==10){return a.Cb.Th(a,11,h7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),ATd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} -function Q5d(a,b){var c,d;if(a.Db>>16==10){return a.Cb.Th(a,12,s7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),DTd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} -function WVd(a){var b;if((a.Bb&1)==0&&!!a.r&&a.r.Vh()){b=RD(a.r,54);a.r=RD(Vvd(a,b),142);a.r!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,8,b,a.r))}return a.r} -function pKb(a,b,c){var d;d=cD(WC(iE,1),vxe,28,15,[sKb(a,(ZJb(),WJb),b,c),sKb(a,XJb,b,c),sKb(a,YJb,b,c)]);if(a.f){d[0]=$wnd.Math.max(d[0],d[2]);d[2]=d[0]}return d} -function ddc(a,b){var c,d,e;e=kdc(a,b);if(e.c.length==0){return}_mb(e,new Gdc);c=e.c.length;for(d=0;d<c;d++){_cc(a,(tFb(d,e.c.length),RD(e.c[d],292)),gdc(a,e,d))}} -function Wnc(a){var b,c,d,e;for(e=RD(Qc(a.a,(Bnc(),wnc)),15).Kc();e.Ob();){d=RD(e.Pb(),105);for(c=Ec(d.k).Kc();c.Ob();){b=RD(c.Pb(),64);Qnc(a,d,b,(joc(),hoc),1)}}} -function Yrc(a){var b,c;if(a.k==(r3b(),o3b)){for(c=new is(Mr(W2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(!W0b(b)&&a.c==T0b(b,a).c){return true}}}return false} -function hSc(a){var b,c;if(a.k==(r3b(),o3b)){for(c=new is(Mr(W2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(!W0b(b)&&b.c.i.c==b.d.i.c){return true}}}return false} -function XDd(a,b){var c,d,e,f,g;if(b){e=b.a.length;c=new vue(e);for(g=(c.b-c.a)*c.c<0?(uue(),tue):new Rue(c);g.Ob();){f=RD(g.Pb(),17);d=xDd(b,f.a);!!d&&AEd(a,d)}}} -function bbe(){Tae();var a,b;Xae((lTd(),kTd));Wae(kTd);rBd(kTd);d2d=(JTd(),wTd);for(b=new Anb(Rae);b.a<b.c.c.length;){a=RD(ynb(b),248);o2d(a,wTd,null)}return true} -function uD(a,b){var c,d,e,f,g,h,i,j;i=a.h>>19;j=b.h>>19;if(i!=j){return j-i}e=a.h;h=b.h;if(e!=h){return e-h}d=a.m;g=b.m;if(d!=g){return d-g}c=a.l;f=b.l;return c-f} -function YHb(){YHb=geb;XHb=(iIb(),fIb);WHb=new lGd(Aye,XHb);VHb=(LHb(),KHb);UHb=new lGd(Bye,VHb);THb=(DHb(),CHb);SHb=new lGd(Cye,THb);RHb=new lGd(Dye,(Geb(),true))} -function Iic(a,b,c){var d,e;d=b*c;if(ZD(a.g,154)){e=$jc(a);if(e.f.d){e.f.a||(a.d.a+=d+Tye)}else{a.d.d-=d+Tye;a.d.a+=d+Tye}}else if(ZD(a.g,10)){a.d.d-=d;a.d.a+=2*d}} -function _pc(a,b,c){var d,e,f,g,h;e=a[c.g];for(h=new Anb(b.d);h.a<h.c.c.length;){g=RD(ynb(h),105);f=g.i;if(!!f&&f.i==c){d=g.d[c.g];e[d]=$wnd.Math.max(e[d],f.j.b)}}} -function k9c(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new Anb(b.d);g.a<g.c.c.length;){f=RD(ynb(g),315);gad(f);d=$wnd.Math.max(d,f.b);e+=f.d+(c>0?a.b:0);++c}b.b=d;b.e=e} -function Fo(a){var b,c,d;d=a.b;if(Xp(a.i,d.length)){c=d.length*2;a.b=$C(XF,ewe,302,c,0,1);a.c=$C(XF,ewe,302,c,0,1);a.f=c-1;a.i=0;for(b=a.a;b;b=b.c){Bo(a,b,b)}++a.g}} -function VPb(a,b,c,d){var e,f,g,h;for(e=0;e<b.o;e++){f=e-b.j+c;for(g=0;g<b.p;g++){h=g-b.k+d;PPb(b,e,g)?aQb(a,f,h)||cQb(a,f,h):RPb(b,e,g)&&($Pb(a,f,h)||dQb(a,f,h))}}} -function k_b(a,b){a.b.a=$wnd.Math.min(a.b.a,b.c);a.b.b=$wnd.Math.min(a.b.b,b.d);a.a.a=$wnd.Math.max(a.a.a,b.c);a.a.b=$wnd.Math.max(a.a.b,b.d);return ZEb(a.c,b),true} -function psc(a,b,c){var d;d=b.c.i;if(d.k==(r3b(),o3b)){pQb(a,(Ywc(),vwc),RD(mQb(d,vwc),12));pQb(a,wwc,RD(mQb(d,wwc),12))}else{pQb(a,(Ywc(),vwc),b.c);pQb(a,wwc,c.d)}} -function wid(a,b,c){tid();var d,e,f,g,h,i;g=b/2;f=c/2;d=$wnd.Math.abs(a.a);e=$wnd.Math.abs(a.b);h=1;i=1;d>g&&(h=g/d);e>f&&(i=f/e);ijd(a,$wnd.Math.min(h,i));return a} -function OAd(){qAd();var b,c;try{c=RD(M5d((YSd(),XSd),$He),2113);if(c){return c}}catch(a){a=zdb(a);if(ZD(a,103)){b=a;UId((Hde(),b))}else throw Adb(a)}return new KAd} -function Qae(){qAd();var b,c;try{c=RD(M5d((YSd(),XSd),AKe),2040);if(c){return c}}catch(a){a=zdb(a);if(ZD(a,103)){b=a;UId((Hde(),b))}else throw Adb(a)}return new Mae} -function vne(){Zme();var b,c;try{c=RD(M5d((YSd(),XSd),dLe),2122);if(c){return c}}catch(a){a=zdb(a);if(ZD(a,103)){b=a;UId((Hde(),b))}else throw Adb(a)}return new rne} -function f2d(a,b,c){var d,e;e=a.e;a.e=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,4,e,b);!c?(c=d):c.nj(d)}e!=b&&(b?(c=o2d(a,k2d(a,b),c)):(c=o2d(a,a.a,c)));return c} -function DB(){uB.call(this);this.e=-1;this.a=false;this.p=qwe;this.k=-1;this.c=-1;this.b=-1;this.g=false;this.f=-1;this.j=-1;this.n=-1;this.i=-1;this.d=-1;this.o=qwe} -function hHb(a,b){var c,d,e;d=a.b.d.d;a.a||(d+=a.b.d.a);e=b.b.d.d;b.a||(e+=b.b.d.a);c=Qfb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} -function XQb(a,b){var c,d,e;d=a.b.b.d;a.a||(d+=a.b.b.a);e=b.b.b.d;b.a||(e+=b.b.b.a);c=Qfb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} -function RYb(a,b){var c,d,e;d=a.b.g.d;a.a||(d+=a.b.g.a);e=b.b.g.d;b.a||(e+=b.b.g.a);c=Qfb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} -function _Wb(){_Wb=geb;YWb=nfd(pfd(pfd(pfd(new ufd,(sXb(),qXb),(hcc(),Dbc)),qXb,Hbc),rXb,Obc),rXb,rbc);$Wb=pfd(pfd(new ufd,qXb,hbc),qXb,sbc);ZWb=nfd(new ufd,rXb,ubc)} -function J6b(a){var b,c,d,e,f;b=RD(mQb(a,(Ywc(),cwc)),85);f=a.n;for(d=b.Cc().Kc();d.Ob();){c=RD(d.Pb(),314);e=c.i;e.c+=f.a;e.d+=f.b;c.c?MKb(c):OKb(c)}pQb(a,cwc,null)} -function Wpc(a,b,c){var d,e;e=a.b;d=e.d;switch(b.g){case 1:return -d.d-c;case 2:return e.o.a+d.c+c;case 3:return e.o.b+d.a+c;case 4:return -d.b-c;default:return -1;}} -function CNc(a,b,c){var d,e;c.Ug('Interactive node placement',1);a.a=RD(mQb(b,(Ywc(),Qwc)),312);for(e=new Anb(b.b);e.a<e.c.c.length;){d=RD(ynb(e),30);BNc(a,d)}c.Vg()} -function C5c(a){var b,c,d,e,f;d=0;e=Hze;if(a.b){for(b=0;b<360;b++){c=b*0.017453292519943295;A5c(a,a.d,0,0,dFe,c);f=a.b.Dg(a.d);if(f<e){d=c;e=f}}}A5c(a,a.d,0,0,dFe,d)} -function Oad(a,b){var c,d,e,f;f=new Tsb;b.e=null;b.f=null;for(d=new Anb(b.i);d.a<d.c.c.length;){c=RD(ynb(d),68);e=RD(Wjb(a.g,c.a),42);c.a=Oid(c.b);Zjb(f,c.a,e)}a.g=f} -function Dad(a,b,c){var d,e,f,g,h,i;e=b-a.e;f=e/a.d.c.length;g=0;for(i=new Anb(a.d);i.a<i.c.c.length;){h=RD(ynb(i),315);d=a.b-h.b+c;fad(h,h.e+g*f,h.f);bad(h,f,d);++g}} -function wPd(a){var b;a.f._j();if(a.b!=-1){++a.b;b=a.f.d[a.a];if(a.b<b.i){return}++a.a}for(;a.a<a.f.d.length;++a.a){b=a.f.d[a.a];if(!!b&&b.i!=0){a.b=0;return}}a.b=-1} -function Jde(a,b){var c,d,e;e=b.c.length;c=Lde(a,e==0?'':(tFb(0,b.c.length),WD(b.c[0])));for(d=1;d<e&&!!c;++d){c=RD(c,54).Zh((tFb(d,b.c.length),WD(b.c[d])))}return c} -function RIc(a,b){var c,d;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),10);a.c[c.c.p][c.p].a=Iwb(a.i);a.c[c.c.p][c.p].d=Kfb(a.c[c.c.p][c.p].a);a.c[c.c.p][c.p].b=1}} -function brd(a,b){var c,d,e,f;f=0;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),163);f+=$wnd.Math.pow(urd(c)*trd(c)-b,2)}e=$wnd.Math.sqrt(f/(a.c.length-1));return e} -function uMb(a,b){var c,d,e,f;f=0;for(e=RD(RD(Qc(a.r,b),21),87).Kc();e.Ob();){d=RD(e.Pb(),117);f=$wnd.Math.max(f,d.e.a+d.b.Mf().a)}c=RD(Vrb(a.b,b),127);c.n.b=0;c.a.a=f} -function DNb(a,b){var c,d,e,f;c=0;for(f=RD(RD(Qc(a.r,b),21),87).Kc();f.Ob();){e=RD(f.Pb(),117);c=$wnd.Math.max(c,e.e.b+e.b.Mf().b)}d=RD(Vrb(a.b,b),127);d.n.d=0;d.a.b=c} -function jMc(a,b,c,d){var e,f,g;f=eMc(a,b,c,d);g=kMc(a,f);BMc(a,b,c,d);YLc(a.b);yob();_mb(f,new LMc(a));e=kMc(a,f);BMc(a,c,b,d);YLc(a.b);return new Ptd(sgb(g),sgb(e))} -function udd(a,b){var c;b.Ug('Delaunay triangulation',1);c=new bnb;Umb(a.i,new ydd(c));Heb(TD(mQb(a,(OQb(),MQb))))&&'null10bw';!a.e?(a.e=EFb(c)):ye(a.e,EFb(c));b.Vg()} -function Hsd(a,b,c){var d,e;Nzd(a,a.j+b,a.k+c);for(e=new dMd((!a.a&&(a.a=new XZd(D4,a,5)),a.a));e.e!=e.i.gc();){d=RD(bMd(e),377);Uxd(d,d.a+b,d.b+c)}Gzd(a,a.b+b,a.c+c)} -function Vyd(a,b,c,d){switch(c){case 7:return !a.e&&(a.e=new Yie(G4,a,7,4)),qLd(a.e,b,d);case 8:return !a.d&&(a.d=new Yie(G4,a,8,5)),qLd(a.d,b,d);}return dyd(a,b,c,d)} -function Wyd(a,b,c,d){switch(c){case 7:return !a.e&&(a.e=new Yie(G4,a,7,4)),rLd(a.e,b,d);case 8:return !a.d&&(a.d=new Yie(G4,a,8,5)),rLd(a.d,b,d);}return eyd(a,b,c,d)} -function LDd(a,b,c){var d,e,f,g,h;if(c){f=c.a.length;d=new vue(f);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);e=xDd(c,g.a);!!e&&DEd(a,e,b)}}} -function fOd(a,b,c){var d,e,f,g,h;a._j();f=b==null?0:tb(b);if(a.f>0){g=(f&lve)%a.d.length;e=WNd(a,g,f,b);if(e){h=e.nd(c);return h}}d=a.ck(f,b,c);a.c.Fc(d);return null} -function Tee(a,b){var c,d,e,f;switch(Oee(a,b).Kl()){case 3:case 2:{c=mYd(b);for(e=0,f=c.i;e<f;++e){d=RD(QHd(c,e),35);if(yfe(Qee(a,d))==5){return d}}break}}return null} -function gt(a){var b,c,d,e,f;if(Xp(a.f,a.b.length)){d=$C(UG,ewe,227,a.b.length*2,0,1);a.b=d;e=d.length-1;for(c=a.a;c!=a;c=c._d()){f=RD(c,227);b=f.d&e;f.a=d[b];d[b]=f}}} -function gSc(a){var b,c;c=RD(mQb(a,(Ywc(),kwc)),21);b=vfd(ZRc);c.Hc((ovc(),lvc))&&ofd(b,aSc);c.Hc(nvc)&&ofd(b,cSc);c.Hc(evc)&&ofd(b,$Rc);c.Hc(gvc)&&ofd(b,_Rc);return b} -function Bid(a){if(a<0){throw Adb(new agb('The input must be positive'))}else return a<sid.length?Xdb(sid[a]):$wnd.Math.sqrt(dFe*a)*(Jid(a,a)/Iid(2.718281828459045,a))} -function PHd(a,b){var c;if(a.Yi()&&b!=null){for(c=0;c<a.i;++c){if(pb(b,a.g[c])){return true}}}else{for(c=0;c<a.i;++c){if(dE(a.g[c])===dE(b)){return true}}}return false} -function Br(a,b){if(b==null){while(a.a.Ob()){if(RD(a.a.Pb(),44).md()==null){return true}}}else{while(a.a.Ob()){if(pb(b,RD(a.a.Pb(),44).md())){return true}}}return false} -function Qy(a,b){var c,d,e;if(b===a){return true}else if(ZD(b,678)){e=RD(b,2046);return Ue((d=a.g,!d?(a.g=new Di(a)):d),(c=e.g,!c?(e.g=new Di(e)):c))}else{return false}} -function hA(a){var b,c,d,e;b='gA';c='vz';e=$wnd.Math.min(a.length,5);for(d=e-1;d>=0;d--){if(lhb(a[d].d,b)||lhb(a[d].d,c)){a.length>=d+1&&a.splice(0,d+1);break}}return a} -function Fdb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a/b;if(jxe<c&&c<hxe){return c<0?$wnd.Math.ceil(c):$wnd.Math.floor(c)}}return Edb(iD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b,false))} -function T0b(a,b){if(b==a.c.i){return a.d.i}else if(b==a.d.i){return a.c.i}else{throw Adb(new agb("'node' must either be the source node or target node of the edge."))}} -function M5b(a){var b,c,d,e;e=RD(mQb(a,(Ywc(),Zvc)),36);if(e){d=new pjd;b=Y2b(a.c.i);while(b!=e){c=b.e;b=Y2b(c);Zid($id($id(d,c.n),b.c),b.d.b,b.d.d)}return d}return G5b} -function phc(a){var b;b=RD(mQb(a,(Ywc(),Pwc)),337);FDb(EDb(new SDb(null,new Swb(b.d,16)),new Chc),new Ehc(a));FDb(CDb(new SDb(null,new Swb(b.d,16)),new Ghc),new Ihc(a))} -function Zrc(a,b){var c,d,e,f;e=b?a3b(a):Z2b(a);for(d=new is(Mr(e.a.Kc(),new ir));gs(d);){c=RD(hs(d),18);f=T0b(c,a);if(f.k==(r3b(),o3b)&&f.c!=a.c){return f}}return null} -function fIc(a){var b,c,d;for(c=new Anb(a.p);c.a<c.c.c.length;){b=RD(ynb(c),10);if(b.k!=(r3b(),p3b)){continue}d=b.o.b;a.i=$wnd.Math.min(a.i,d);a.g=$wnd.Math.max(a.g,d)}} -function OIc(a,b,c){var d,e,f;for(f=new Anb(b);f.a<f.c.c.length;){d=RD(ynb(f),10);a.c[d.c.p][d.p].e=false}for(e=new Anb(b);e.a<e.c.c.length;){d=RD(ynb(e),10);NIc(a,d,c)}} -function uTc(a,b,c){var d,e;d=VTc(b.j,c.s,c.c)+VTc(c.e,b.s,b.c);e=VTc(c.j,b.s,b.c)+VTc(b.e,c.s,c.c);if(d==e){if(d>0){a.b+=2;a.a+=d}}else{a.b+=1;a.a+=$wnd.Math.min(d,e)}} -function CVc(a){var b;b=RD(mQb(RD(ju(a.b,0),39),(h_c(),T$c)),107);pQb(a,(q$c(),SZc),new rjd(0,0));FVc(new YWc,a,b.b+b.c-Kfb(UD(mQb(a,ZZc))),b.d+b.a-Kfb(UD(mQb(a,_Zc))))} -function pDd(a,b){var c,d;d=false;if(bE(b)){d=true;oDd(a,new OC(WD(b)))}if(!d){if(ZD(b,242)){d=true;oDd(a,(c=Qeb(RD(b,242)),new hC(c)))}}if(!d){throw Adb(new Aeb(tIe))}} -function g$d(a,b,c,d){var e,f,g;e=new P3d(a.e,1,10,(g=b.c,ZD(g,90)?RD(g,29):(JTd(),zTd)),(f=c.c,ZD(f,90)?RD(f,29):(JTd(),zTd)),fZd(a,b),false);!d?(d=e):d.nj(e);return d} -function _2b(a){var b,c;switch(RD(mQb(Y2b(a),(yCc(),QAc)),429).g){case 0:b=a.n;c=a.o;return new rjd(b.a+c.a/2,b.b+c.b/2);case 1:return new sjd(a.n);default:return null;}} -function Ouc(){Ouc=geb;Luc=new Puc(LAe,0);Kuc=new Puc('LEFTUP',1);Nuc=new Puc('RIGHTUP',2);Juc=new Puc('LEFTDOWN',3);Muc=new Puc('RIGHTDOWN',4);Iuc=new Puc('BALANCED',5)} -function dKc(a,b,c){var d,e,f;d=Qfb(a.a[b.p],a.a[c.p]);if(d==0){e=RD(mQb(b,(Ywc(),qwc)),15);f=RD(mQb(c,qwc),15);if(e.Hc(c)){return -1}else if(f.Hc(b)){return 1}}return d} -function k5c(a){switch(a.g){case 1:return new K3c;case 2:return new M3c;case 3:return new I3c;case 0:return null;default:throw Adb(new agb(mFe+(a.f!=null?a.f:''+a.g)));}} -function gyd(a,b,c){switch(b){case 1:!a.n&&(a.n=new C5d(I4,a,1,7));sLd(a.n);!a.n&&(a.n=new C5d(I4,a,1,7));YGd(a.n,RD(c,16));return;case 2:jyd(a,WD(c));return;}Dxd(a,b,c)} -function xyd(a,b,c){switch(b){case 3:Ayd(a,Kfb(UD(c)));return;case 4:Cyd(a,Kfb(UD(c)));return;case 5:Dyd(a,Kfb(UD(c)));return;case 6:Eyd(a,Kfb(UD(c)));return;}gyd(a,b,c)} -function dBd(a,b,c){var d,e,f;f=(d=new R5d,d);e=XVd(f,b,null);!!e&&e.oj();PAd(f,c);WGd((!a.c&&(a.c=new C5d(u7,a,12,10)),a.c),f);$Vd(f,0);bWd(f,1);aWd(f,true);_Vd(f,true)} -function M5d(a,b){var c,d,e;c=Ktb(a.i,b);if(ZD(c,241)){e=RD(c,241);e.zi()==null&&undefined;return e.wi()}else if(ZD(c,507)){d=RD(c,2037);e=d.b;return e}else{return null}} -function aj(a,b,c,d){var e,f;Qb(b);Qb(c);f=RD(Fn(a.d,b),17);Ob(!!f,'Row %s not in %s',b,a.e);e=RD(Fn(a.b,c),17);Ob(!!e,'Column %s not in %s',c,a.c);return cj(a,f.a,e.a,d)} -function ZC(a,b,c,d,e,f,g){var h,i,j,k,l;k=e[f];j=f==g-1;h=j?d:0;l=_C(h,k);d!=10&&cD(WC(a,g-f),b[f],c[f],h,l);if(!j){++f;for(i=0;i<k;++i){l[i]=ZC(a,b,c,d,e,f,g)}}return l} -function cMd(b){if(b.g==-1){throw Adb(new cgb)}b.Xj();try{b.i.gd(b.g);b.f=b.i.j;b.g<b.e&&--b.e;b.g=-1}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}} -function v0b(a){var b,c,d,e;e=-1;d=0;for(c=new Anb(a);c.a<c.c.c.length;){b=RD(ynb(c),249);if(b.c==(BEc(),yEc)){e=d==0?0:d-1;break}else d==a.c.length-1&&(e=d);d+=1}return e} -function $9c(a){var b,c,d,e;e=0;b=0;for(d=new Anb(a.c);d.a<d.c.c.length;){c=RD(ynb(d),27);Dyd(c,a.e+e);Eyd(c,a.f);e+=c.g+a.b;b=$wnd.Math.max(b,c.f+a.b)}a.d=e-a.b;a.a=b-a.b} -function UGb(a){var b,c,d;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);d=b.d.c;b.d.c=b.d.d;b.d.d=d;d=b.d.b;b.d.b=b.d.a;b.d.a=d;d=b.b.a;b.b.a=b.b.b;b.b.b=d}IGb(a)} -function DYb(a){var b,c,d;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);d=b.g.c;b.g.c=b.g.d;b.g.d=d;d=b.g.b;b.g.b=b.g.a;b.g.a=d;d=b.e.a;b.e.a=b.e.b;b.e.b=d}uYb(a)} -function pqc(a){var b,c,d,e,f;f=Ec(a.k);for(c=(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])),d=0,e=c.length;d<e;++d){b=c[d];if(b!=opd&&!f.Hc(b)){return b}}return null} -function drc(a,b){var c,d;d=RD(Nvb(DDb(CDb(new SDb(null,new Swb(b.j,16)),new lrc))),12);if(d){c=RD(Vmb(d.e,0),18);if(c){return RD(mQb(c,(Ywc(),zwc)),17).a}}return mDc(a.b)} -function FGc(a,b){var c,d,e,f;for(f=new Anb(b.a);f.a<f.c.c.length;){e=RD(ynb(f),10);Nnb(a.d);for(d=new is(Mr(a3b(e).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);CGc(a,e,c.d.i)}}} -function T9c(a,b){var c,d;Ymb(a.b,b);for(d=new Anb(a.n);d.a<d.c.c.length;){c=RD(ynb(d),209);if(Wmb(c.c,b,0)!=-1){Ymb(c.c,b);$9c(c);c.c.c.length==0&&Ymb(a.n,c);break}}N9c(a)} -function ead(a,b){var c,d,e,f,g;g=a.f;e=0;f=0;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),172);U9c(c,a.e,g);Q9c(c,b);f=$wnd.Math.max(f,c.r);g+=c.d+a.c;e=g}a.d=f;a.b=e} -function R2c(a){var b,c;c=yGd(a);if(gr(c)){return null}else{b=(Qb(c),RD(Er(new is(Mr(c.a.Kc(),new ir))),74));return AGd(RD(QHd((!b.b&&(b.b=new Yie(E4,b,4,7)),b.b),0),84))}} -function vWd(a){var b;if(!a.o){b=a.uk();b?(a.o=new D9d(a,a,null)):a.al()?(a.o=new U6d(a,null)):yfe(Qee((lke(),jke),a))==1?(a.o=new N9d(a)):(a.o=new S9d(a,null))}return a.o} -function Vje(a,b,c,d){var e,f,g,h,i;if(c.Xh(b)){e=(g=b,!g?null:RD(d,54).gi(g));if(e){i=c.Mh(b);h=b.t;if(h>1||h==-1){f=RD(i,15);e.Wb(Sje(a,f))}else{e.Wb(Rje(a,RD(i,58)))}}}} -function ceb(b,c,d,e){beb();var f=_db;$moduleName=c;$moduleBase=d;ydb=e;function g(){for(var a=0;a<f.length;a++){f[a]()}} -if(b){try{fve(g)()}catch(a){b(c,a)}}else{fve(g)()}} -function a6b(a,b){var c,d,e,f;for(e=(f=(new Xkb(a.b)).a.vc().Kc(),new blb(f));e.a.Ob();){d=(c=RD(e.a.Pb(),44),RD(c.ld(),34));if(egb(b,RD(d,17))<0){return false}}return true} -function b6b(a,b){var c,d,e,f;for(e=(f=(new Xkb(a.b)).a.vc().Kc(),new blb(f));e.a.Ob();){d=(c=RD(e.a.Pb(),44),RD(c.ld(),34));if(egb(b,RD(d,17))>0){return false}}return true} -function okc(a){var b,c,d,e,f;for(d=new vkb((new mkb(a.b)).a);d.b;){c=tkb(d);b=RD(c.ld(),10);f=RD(RD(c.md(),42).a,10);e=RD(RD(c.md(),42).b,8);$id(hjd(b.n),$id(ajd(f.n),e))}} -function Roc(a){switch(RD(mQb(a.b,(yCc(),BAc)),387).g){case 1:FDb(GDb(EDb(new SDb(null,new Swb(a.d,16)),new kpc),new mpc),new opc);break;case 2:Toc(a);break;case 0:Soc(a);}} -function SVc(a,b,c){var d,e,f;d=c;!d&&(d=new Oqd);d.Ug('Layout',a.a.c.length);for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),47);if(d.$g()){return}e.Kf(b,d.eh(1))}d.Vg()} -function ukd(){ukd=geb;tkd=new vkd('V_TOP',0);skd=new vkd('V_CENTER',1);rkd=new vkd('V_BOTTOM',2);pkd=new vkd('H_LEFT',3);okd=new vkd('H_CENTER',4);qkd=new vkd('H_RIGHT',5)} -function GYd(a){var b;if((a.Db&64)!=0)return MXd(a);b=new Shb(MXd(a));b.a+=' (abstract: ';Ohb(b,(a.Bb&256)!=0);b.a+=', interface: ';Ohb(b,(a.Bb&512)!=0);b.a+=')';return b.a} -function Bz(a){var b;if(a.c==null){b=dE(a.b)===dE(zz)?null:a.b;a.d=b==null?vve:aE(b)?Ez(VD(b)):bE(b)?uwe:nfb(rb(b));a.a=a.a+': '+(aE(b)?Dz(VD(b)):b+'');a.c='('+a.d+') '+a.a}} -function Gtb(){function b(){try{return (new Map).entries().next().done}catch(a){return false}} -if(typeof Map===kve&&Map.prototype.entries&&b()){return Map}else{return Htb()}} -function tUc(a,b){var c,d,e,f;f=new Jkb(a.e,0);c=0;while(f.b<f.d.gc()){d=Kfb((sFb(f.b<f.d.gc()),UD(f.d.Xb(f.c=f.b++))));e=d-b;if(e>AEe){return c}else e>-1.0E-6&&++c}return c} -function n2d(a,b){var c;if(b!=a.b){c=null;!!a.b&&(c=Jvd(a.b,a,-4,c));!!b&&(c=Ivd(b,a,-4,c));c=e2d(a,b,c);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,b,b))} -function q2d(a,b){var c;if(b!=a.f){c=null;!!a.f&&(c=Jvd(a.f,a,-1,c));!!b&&(c=Ivd(b,a,-1,c));c=g2d(a,b,c);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,0,b,b))} -function Lge(a,b,c,d){var e,f,g,h;if(Mvd(a.e)){e=b.Lk();h=b.md();f=c.md();g=fge(a,1,e,h,f,e.Jk()?kge(a,e,f,ZD(e,102)&&(RD(e,19).Bb&txe)!=0):-1,true);d?d.nj(g):(d=g)}return d} -function bne(a){var b,c,d;if(a==null)return null;c=RD(a,15);if(c.dc())return '';d=new Qhb;for(b=c.Kc();b.Ob();){Nhb(d,(nme(),WD(b.Pb())));d.a+=' '}return qeb(d,d.a.length-1)} -function fne(a){var b,c,d;if(a==null)return null;c=RD(a,15);if(c.dc())return '';d=new Qhb;for(b=c.Kc();b.Ob();){Nhb(d,(nme(),WD(b.Pb())));d.a+=' '}return qeb(d,d.a.length-1)} -function QIc(a,b,c){var d,e;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){return Jfb(d.a,e.a)}else if(d.a!=null){return -1}else if(e.a!=null){return 1}return 0} -function RVc(a,b,c){c.Ug('Tree layout',1);Sed(a.b);Ved(a.b,(YVc(),UVc),UVc);Ved(a.b,VVc,VVc);Ved(a.b,WVc,WVc);Ved(a.b,XVc,XVc);a.a=Qed(a.b,b);SVc(a,b,c.eh(1));c.Vg();return b} -function ZDd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new vue(f);for(h=(c.b-c.a)*c.c<0?(uue(),tue):new Rue(c);h.Ob();){g=RD(h.Pb(),17);e=xDd(b,g.a);d=new aFd(a);$Dd(d.a,e)}}} -function oEd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new vue(f);for(h=(c.b-c.a)*c.c<0?(uue(),tue):new Rue(c);h.Ob();){g=RD(h.Pb(),17);e=xDd(b,g.a);d=new LEd(a);NDd(d.a,e)}}} -function ESd(b){var c;if(b!=null&&b.length>0&&ihb(b,b.length-1)==33){try{c=nSd(zhb(b,0,b.length-1));return c.e==null}catch(a){a=zdb(a);if(!ZD(a,33))throw Adb(a)}}return false} -function u0b(a,b,c){var d,e,f;d=Y2b(b);e=i2b(d);f=new R3b;P3b(f,b);switch(c.g){case 1:Q3b(f,spd(vpd(e)));break;case 2:Q3b(f,vpd(e));}pQb(f,(yCc(),ABc),UD(mQb(a,ABc)));return f} -function jdc(a){var b,c;b=RD(hs(new is(Mr(Z2b(a.a).a.Kc(),new ir))),18);c=RD(hs(new is(Mr(a3b(a.a).a.Kc(),new ir))),18);return Heb(TD(mQb(b,(Ywc(),Nwc))))||Heb(TD(mQb(c,Nwc)))} -function Bnc(){Bnc=geb;xnc=new Cnc('ONE_SIDE',0);znc=new Cnc('TWO_SIDES_CORNER',1);Anc=new Cnc('TWO_SIDES_OPPOSING',2);ync=new Cnc('THREE_SIDES',3);wnc=new Cnc('FOUR_SIDES',4)} -function Usc(a,b){var c,d,e,f;f=new bnb;e=0;d=b.Kc();while(d.Ob()){c=sgb(RD(d.Pb(),17).a+e);while(c.a<a.f&&!wsc(a,c.a)){c=sgb(c.a+1);++e}if(c.a>=a.f){break}ZEb(f.c,c)}return f} -function iIc(a,b){var c,d,e,f,g;for(f=new Anb(b.a);f.a<f.c.c.length;){e=RD(ynb(f),10);for(d=new is(Mr(Z2b(e).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);g=c.c.i.p;a.n[g]=a.n[g]-1}}} -function fOc(a){var b,c;for(c=new Anb(a.e.b);c.a<c.c.c.length;){b=RD(ynb(c),30);wOc(a,b)}FDb(CDb(EDb(EDb(new SDb(null,new Swb(a.e.b,16)),new wPc),new TPc),new VPc),new XPc(a))} -function oKd(a,b){if(!b){return false}else{if(a.mj(b)){return false}if(!a.i){if(ZD(b,152)){a.i=RD(b,152);return true}else{a.i=new fLd;return a.i.nj(b)}}else{return a.i.nj(b)}}} -function Hge(a,b,c){var d,e,f;d=b.Lk();f=b.md();e=d.Jk()?fge(a,3,d,null,f,kge(a,d,f,ZD(d,102)&&(RD(d,19).Bb&txe)!=0),true):fge(a,1,d,d.ik(),f,-1,true);c?c.nj(e):(c=e);return c} -function $me(a){a=nue(a,true);if(lhb(FGe,a)||lhb('1',a)){return Geb(),Feb}else if(lhb(GGe,a)||lhb('0',a)){return Geb(),Eeb}throw Adb(new Mle("Invalid boolean value: '"+a+"'"))} -function Kd(a,b,c){var d,e,f;for(e=a.vc().Kc();e.Ob();){d=RD(e.Pb(),44);f=d.ld();if(dE(b)===dE(f)||b!=null&&pb(b,f)){if(c){d=new xlb(d.ld(),d.md());e.Qb()}return d}}return null} -function WMb(a){RMb();var b,c,d;if(!a.B.Hc((dqd(),Xpd))){return}d=a.f.i;b=new Vid(a.a.c);c=new z3b;c.b=b.c-d.c;c.d=b.d-d.d;c.c=d.c+d.b-(b.c+b.b);c.a=d.d+d.a-(b.d+b.a);a.e.$f(c)} -function CQb(a,b,c,d){var e,f,g;g=$wnd.Math.min(c,FQb(RD(a.b,68),b,c,d));for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),225);e!=b&&(g=$wnd.Math.min(g,CQb(e,b,g,d)))}return g} -function c1b(a){var b,c,d,e;e=$C(jR,Nve,199,a.b.c.length,0,2);d=new Jkb(a.b,0);while(d.b<d.d.gc()){b=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),30));c=d.b-1;e[c]=t2b(b.a)}return e} -function c6b(a,b,c){var d,e,f;d=RD(cub(a.a,c),34);if(d!=null){f=RD(cub(a.b,d),67);ze(f,c,true)}e=RD(cub(a.b,b),67);if(!e){e=new Yub;dub(a.b,b,e)}Pub(e,c,e.c.b,e.c);dub(a.a,c,b)} -function _6b(a,b,c,d,e){var f,g,h,i;g=XNb(WNb(_Nb(Y6b(c)),d),T6b(a,c,e));for(i=e3b(a,c).Kc();i.Ob();){h=RD(i.Pb(),12);if(b[h.p]){f=b[h.p].i;Rmb(g.d,new sOb(f,UNb(g,f)))}}VNb(g)} -function Ylc(a,b){this.f=new Tsb;this.b=new Tsb;this.j=new Tsb;this.a=a;this.c=b;this.c>0&&Xlc(this,this.c-1,(qpd(),Xod));this.c<this.a.length-1&&Xlc(this,this.c+1,(qpd(),ppd))} -function Iqc(a,b){var c,d,e,f,g;for(f=new Anb(b.d);f.a<f.c.c.length;){e=RD(ynb(f),105);g=RD(Wjb(a.c,e),118).o;for(d=new Osb(e.b);d.a<d.c.a.length;){c=RD(Nsb(d),64);Umc(e,c,g)}}} -function qJc(a){a.length>0&&a[0].length>0&&(this.c=Heb(TD(mQb(Y2b(a[0][0]),(Ywc(),rwc)))));this.a=$C(aY,Nve,2117,a.length,0,2);this.b=$C(dY,Nve,2118,a.length,0,2);this.d=new Ks} -function TOc(a){if(a.c.length==0){return false}if((tFb(0,a.c.length),RD(a.c[0],18)).c.i.k==(r3b(),o3b)){return true}return yDb(GDb(new SDb(null,new Swb(a,16)),new WOc),new YOc)} -function I5c(a,b){var c,d,e,f,g,h,i;h=Q2c(b);f=b.f;i=b.g;g=$wnd.Math.sqrt(f*f+i*i);e=0;for(d=new Anb(h);d.a<d.c.c.length;){c=RD(ynb(d),27);e+=I5c(a,c)}return $wnd.Math.max(e,g)} -function Bod(){Bod=geb;Aod=new Eod(Sye,0);zod=new Eod('FREE',1);yod=new Eod('FIXED_SIDE',2);vod=new Eod('FIXED_ORDER',3);xod=new Eod('FIXED_RATIO',4);wod=new Eod('FIXED_POS',5)} -function Cee(a,b){var c,d,e;c=b.qi(a.a);if(c){e=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),bLe));for(d=1;d<(lke(),kke).length;++d){if(lhb(kke[d],e)){return d}}}return 0} -function aob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Gyb(f,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function gob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Gyb(f,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function Md(a){var b,c,d;d=new Jyb(pve,'{','}');for(c=a.vc().Kc();c.Ob();){b=RD(c.Pb(),44);Gyb(d,Nd(a,b.ld())+'='+Nd(a,b.md()))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} -function vJb(a){var b,c,d,e;while(!nmb(a.o)){c=RD(smb(a.o),42);d=RD(c.a,125);b=RD(c.b,218);e=oIb(b,d);if(b.e==d){EIb(e.g,b);d.e=e.e+b.a}else{EIb(e.b,b);d.e=e.e-b.a}Rmb(a.e.a,d)}} -function W9b(a,b){var c,d,e;c=null;for(e=RD(b.Kb(a),20).Kc();e.Ob();){d=RD(e.Pb(),18);if(!c){c=d.c.i==a?d.d.i:d.c.i}else{if((d.c.i==a?d.d.i:d.c.i)!=c){return false}}}return true} -function UTc(a,b){var c,d,e,f,g;c=uSc(a,false,b);for(e=new Anb(c);e.a<e.c.c.length;){d=RD(ynb(e),132);d.d==0?(_Sc(d,null),aTc(d,null)):(f=d.a,g=d.b,_Sc(d,g),aTc(d,f),undefined)}} -function QUc(a){var b,c;b=new ufd;ofd(b,CUc);c=RD(mQb(a,(Ywc(),kwc)),21);c.Hc((ovc(),nvc))&&ofd(b,GUc);c.Hc(evc)&&ofd(b,DUc);c.Hc(lvc)&&ofd(b,FUc);c.Hc(gvc)&&ofd(b,EUc);return b} -function iz(a,b,c){var d,e,f,g,h;String.fromCharCode(10);jz(a);for(e=(a.k==null&&(a.k=$C(rJ,Nve,82,0,0,1)),a.k),f=0,g=e.length;f<g;++f){d=e[f];iz(d,b,'\t'+c)}h=a.f;!!h&&iz(h,b,c)} -function kec(a){var b,c,d,e;jec(a);for(c=new is(Mr(W2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);d=b.c.i==a;e=d?b.d:b.c;d?Z0b(b,null):Y0b(b,null);pQb(b,(Ywc(),Ewc),e);oec(a,e.i)}} -function aqc(a,b,c,d){var e,f;f=b.i;e=c[f.g][a.d[f.g]];switch(f.g){case 1:e-=d+b.j.b;b.g.b=e;break;case 3:e+=d;b.g.b=e;break;case 4:e-=d+b.j.a;b.g.a=e;break;case 2:e+=d;b.g.a=e;}} -function K2c(a){var b,c,d;for(c=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));c.e!=c.i.gc();){b=RD(bMd(c),27);d=yGd(b);if(!gs(new is(Mr(d.a.Kc(),new ir)))){return b}}return null} -function g3c(){g3c=geb;e3c=new h3c('OVERLAP_REMOVAL',0);b3c=new h3c(iFe,1);f3c=new h3c('ROTATION',2);c3c=new h3c('GRAPH_SIZE_CALCULATION',3);d3c=new h3c('OUTGOING_EDGE_ANGLES',4)} -function aCd(){var a;if(YBd)return RD(N5d((YSd(),XSd),$He),2115);a=RD(ZD(Xjb((YSd(),XSd),$He),569)?Xjb(XSd,$He):new _Bd,569);YBd=true;ZBd(a);$Bd(a);rBd(a);$jb(XSd,$He,a);return a} -function Tge(a,b,c){var d,e;if(a.j==0)return c;e=RD(jZd(a,b,c),76);d=c.Lk();if(!d.rk()||!a.a.am(d)){throw Adb(new yz("Invalid entry feature '"+d.qk().zb+'.'+d.xe()+"'"))}return e} -function Yi(a,b){var c,d,e,f,g,h,i,j;for(h=a.a,i=0,j=h.length;i<j;++i){g=h[i];for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(dE(b)===dE(c)||b!=null&&pb(b,c)){return true}}}return false} -function yjb(a){var b,c,d;if(Ddb(a,0)>=0){c=Fdb(a,ixe);d=Mdb(a,ixe)}else{b=Udb(a,1);c=Fdb(b,500000000);d=Mdb(b,500000000);d=Bdb(Sdb(d,1),Cdb(a,1))}return Rdb(Sdb(d,32),Cdb(c,yxe))} -function fTb(a,b,c){var d,e;d=(sFb(b.b!=0),RD(Wub(b,b.a.a),8));switch(c.g){case 0:d.b=0;break;case 2:d.b=a.f;break;case 3:d.a=0;break;default:d.a=a.g;}e=Sub(b,0);cvb(e,d);return b} -function Vpc(a,b,c,d){var e,f,g,h,i;i=a.b;f=b.d;g=f.j;h=$pc(g,i.d[g.g],c);e=$id(ajd(f.n),f.a);switch(f.j.g){case 1:case 3:h.a+=e.a;break;case 2:case 4:h.b+=e.b;}Pub(d,h,d.c.b,d.c)} -function YNc(a,b,c){var d,e,f,g;g=Wmb(a.e,b,0);f=new ZNc;f.b=c;d=new Jkb(a.e,g);while(d.b<d.d.gc()){e=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),10));e.p=c;Rmb(f.e,e);Ckb(d)}return f} -function l8c(a,b,c,d){var e,f,g,h,i;e=null;f=0;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),27);i=g.i+g.g;if(a<g.j+g.f+d){!e?(e=g):c.i-i<c.i-f&&(e=g);f=e.i+e.g}}return !e?0:f+d} -function m8c(a,b,c,d){var e,f,g,h,i;f=null;e=0;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),27);i=g.j+g.f;if(a<g.i+g.g+d){!f?(f=g):c.j-i<c.j-e&&(f=g);e=f.j+f.f}}return !f?0:e+d} -function CA(a){var b,c,d;b=false;d=a.b.c.length;for(c=0;c<d;c++){if(DA(RD(Vmb(a.b,c),443))){if(!b&&c+1<d&&DA(RD(Vmb(a.b,c+1),443))){b=true;RD(Vmb(a.b,c),443).a=true}}else{b=false}}} -function Ijb(a,b,c,d,e){var f,g;f=0;for(g=0;g<e;g++){f=Bdb(f,Vdb(Cdb(b[g],yxe),Cdb(d[g],yxe)));a[g]=Ydb(f);f=Tdb(f,32)}for(;g<c;g++){f=Bdb(f,Cdb(b[g],yxe));a[g]=Ydb(f);f=Tdb(f,32)}} -function Rjb(a,b){Ljb();var c,d;d=(Pib(),Kib);c=a;for(;b>1;b>>=1){(b&1)!=0&&(d=Wib(d,c));c.d==1?(c=Wib(c,c)):(c=new djb(Tjb(c.a,c.d,$C(kE,Pwe,28,c.d<<1,15,1))))}d=Wib(d,c);return d} -function Hwb(){Hwb=geb;var a,b,c,d;Ewb=$C(iE,vxe,28,25,15,1);Fwb=$C(iE,vxe,28,33,15,1);d=1.52587890625E-5;for(b=32;b>=0;b--){Fwb[b]=d;d*=0.5}c=1;for(a=24;a>=0;a--){Ewb[a]=c;c*=0.5}} -function a5b(a){var b,c;if(Heb(TD(Gxd(a,(yCc(),NAc))))){for(c=new is(Mr(zGd(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),74);if(ozd(b)){if(Heb(TD(Gxd(b,OAc)))){return true}}}}return false} -function Qmc(a,b){var c,d,e;if(Ysb(a.f,b)){b.b=a;d=b.c;Wmb(a.j,d,0)!=-1||Rmb(a.j,d);e=b.d;Wmb(a.j,e,0)!=-1||Rmb(a.j,e);c=b.a.b;if(c.c.length!=0){!a.i&&(a.i=new _mc(a));Wmc(a.i,c)}}} -function Xpc(a){var b,c,d,e,f;c=a.c.d;d=c.j;e=a.d.d;f=e.j;if(d==f){return c.p<e.p?0:1}else if(tpd(d)==f){return 0}else if(rpd(d)==f){return 1}else{b=a.b;return Csb(b.b,tpd(d))?0:1}} -function Pfd(a){var b;this.d=new Tsb;this.c=a.c;this.e=a.d;this.b=a.b;this.f=new ntd(a.e);this.a=a.a;!a.f?(this.g=(b=RD(mfb(T5),9),new Fsb(b,RD(WEb(b,b.length),9),0))):(this.g=a.f)} -function GEd(a,b){var c,d,e,f,g,h;e=a;g=yDd(e,'layoutOptions');!g&&(g=yDd(e,cIe));if(g){h=g;d=null;!!h&&(d=(f=oC(h,$C(qJ,Nve,2,0,6,1)),new CC(h,f)));if(d){c=new bFd(h,b);xgb(d,c)}}} -function AGd(a){if(ZD(a,207)){return RD(a,27)}else if(ZD(a,193)){return MCd(RD(a,123))}else if(!a){throw Adb(new Ogb(HIe))}else{throw Adb(new kib('Only support nodes and ports.'))}} -function SA(a,b,c,d){if(b>=0&&lhb(a.substr(b,'GMT'.length),'GMT')){c[0]=b+3;return JA(a,c,d)}if(b>=0&&lhb(a.substr(b,'UTC'.length),'UTC')){c[0]=b+3;return JA(a,c,d)}return JA(a,c,d)} -function Zmc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),72);e=c.n;e.a=f;a.i==(qpd(),Yod)?(e.b=g+a.j.b-c.o.b):(e.b=g);$id(e,b);f+=c.o.a+a.e}} -function Fqd(a,b,c){if(a.b){throw Adb(new dgb('The task is already done.'))}else if(a.p!=null){return false}else{a.p=b;a.r=c;a.k&&(a.o=(gib(),Ndb(Hdb(Date.now()),Awe)));return true}} -function HFd(a){var b,c,d,e,f,g,h;h=new uC;c=a.Pg();e=c!=null;e&&sDd(h,uIe,a.Pg());d=a.xe();f=d!=null;f&&sDd(h,GIe,a.xe());b=a.Og();g=b!=null;g&&sDd(h,'description',a.Og());return h} -function UVd(a,b,c){var d,e,f;f=a.q;a.q=b;if((a.Db&4)!=0&&(a.Db&1)==0){e=new N3d(a,1,9,f,b);!c?(c=e):c.nj(e)}if(!b){!!a.r&&(c=a.Yk(null,c))}else{d=b.c;d!=a.r&&(c=a.Yk(d,c))}return c} -function gae(a,b,c){var d,e,f,g,h;c=(h=b,Ivd(h,a.e,-1-a.c,c));g=$9d(a.a);for(f=(d=new vkb((new mkb(g.a)).a),new xae(d));f.a.b;){e=RD(tkb(f.a).ld(),89);c=o2d(e,k2d(e,a.a),c)}return c} -function hae(a,b,c){var d,e,f,g,h;c=(h=b,Jvd(h,a.e,-1-a.c,c));g=$9d(a.a);for(f=(d=new vkb((new mkb(g.a)).a),new xae(d));f.a.b;){e=RD(tkb(f.a).ld(),89);c=o2d(e,k2d(e,a.a),c)}return c} -function rjb(a,b,c,d){var e,f,g;if(d==0){hib(b,0,a,c,a.length-c)}else{g=32-d;a[a.length-1]=0;for(f=a.length-1;f>c;f--){a[f]|=b[f-c-1]>>>g;a[f-1]=b[f-c-1]<<d}}for(e=0;e<c;e++){a[e]=0}} -function CMb(a){var b,c,d,e,f;b=0;c=0;for(f=a.Kc();f.Ob();){d=RD(f.Pb(),117);b=$wnd.Math.max(b,d.d.b);c=$wnd.Math.max(c,d.d.c)}for(e=a.Kc();e.Ob();){d=RD(e.Pb(),117);d.d.b=b;d.d.c=c}} -function KNb(a){var b,c,d,e,f;c=0;b=0;for(f=a.Kc();f.Ob();){d=RD(f.Pb(),117);c=$wnd.Math.max(c,d.d.d);b=$wnd.Math.max(b,d.d.a)}for(e=a.Kc();e.Ob();){d=RD(e.Pb(),117);d.d.d=c;d.d.a=b}} -function Pnc(a,b,c,d,e){var f,g;f=RD(zDb(CDb(b.Oc(),new Foc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);Eob(f);g=RD($i(a.b,c,d),15);e==0?g.cd(0,f):g.Gc(f)} -function Sdd(a,b,c){c.Ug('Grow Tree',1);a.b=b.f;if(Heb(TD(mQb(b,(OQb(),MQb))))){a.c=new kRb;Odd(a,null)}else{a.c=new kRb}a.a=false;Qdd(a,b.f);pQb(b,NQb,(Geb(),a.a?true:false));c.Vg()} -function wsd(a){var b,c,d,e;b=null;for(e=new Anb(a.Rf());e.a<e.c.c.length;){d=RD(ynb(e),187);c=new Uid(d.Lf().a,d.Lf().b,d.Mf().a,d.Mf().b);!b?(b=c):Sid(b,c)}!b&&(b=new Tid);return b} -function dyd(a,b,c,d){var e,f;if(c==1){return !a.n&&(a.n=new C5d(I4,a,1,7)),qLd(a.n,b,d)}return f=RD(vYd((e=RD(Ywd(a,16),29),!e?a.ii():e),c),69),f.wk().zk(a,Wwd(a),c-AYd(a.ii()),b,d)} -function IHd(a,b,c){var d,e,f,g,h;d=c.gc();a._i(a.i+d);h=a.i-b;h>0&&hib(a.g,b,a.g,b+d,h);g=c.Kc();a.i+=d;for(e=0;e<d;++e){f=g.Pb();MHd(a,b,a.Zi(b,f));a.Mi(b,f);a.Ni();++b}return d!=0} -function XVd(a,b,c){var d;if(b!=a.q){!!a.q&&(c=Jvd(a.q,a,-10,c));!!b&&(c=Ivd(b,a,-10,c));c=UVd(a,b,c)}else if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,9,b,b);!c?(c=d):c.nj(d)}return c} -function ek(a,b,c,d){Mb((c&Ove)==0,'flatMap does not support SUBSIZED characteristic');Mb((c&4)==0,'flatMap does not support SORTED characteristic');Qb(a);Qb(b);return new Mk(a,b,c,d)} -function fz(a,b){vFb(b,'Cannot suppress a null exception.');mFb(b!=a,'Exception can not suppress itself.');if(a.i){return}a.k==null?(a.k=cD(WC(rJ,1),Nve,82,0,[b])):(a.k[a.k.length]=b)} -function DLb(a,b){var c;c=ELb(a.b.ag(),b.b.ag());if(c!=0){return c}switch(a.b.ag().g){case 1:case 2:return hgb(a.b.Nf(),b.b.Nf());case 3:case 4:return hgb(b.b.Nf(),a.b.Nf());}return 0} -function eUb(a){var b,c,d;d=a.e.c.length;a.a=YC(kE,[Nve,Pwe],[53,28],15,[d,d],2);for(c=new Anb(a.c);c.a<c.c.c.length;){b=RD(ynb(c),289);a.a[b.c.a][b.d.a]+=RD(mQb(b,(yVb(),lVb)),17).a}} -function sAd(a,b){var c,d,e,f,g;if(a==null){return null}else{g=$C(hE,zwe,28,2*b,15,1);for(d=0,e=0;d<b;++d){c=a[d]>>4&15;f=a[d]&15;g[e++]=oAd[c];g[e++]=oAd[f]}return Ihb(g,0,g.length)}} -function Fhb(a){var b,c;if(a>=txe){b=uxe+(a-txe>>10&1023)&Bwe;c=56320+(a-txe&1023)&Bwe;return String.fromCharCode(b)+(''+String.fromCharCode(c))}else{return String.fromCharCode(a&Bwe)}} -function UMb(a,b){RMb();var c,d,e,f;e=RD(RD(Qc(a.r,b),21),87);if(e.gc()>=2){d=RD(e.Kc().Pb(),117);c=a.u.Hc((Pod(),Kod));f=a.u.Hc(Ood);return !d.a&&!c&&(e.gc()==2||f)}else{return false}} -function v3c(a,b,c,d,e){var f,g,h;f=w3c(a,b,c,d,e);h=false;while(!f){n3c(a,e,true);h=true;f=w3c(a,b,c,d,e)}h&&n3c(a,e,false);g=N2c(e);if(g.c.length!=0){!!a.d&&a.d.Gg(g);v3c(a,e,c,d,g)}} -function ind(){ind=geb;gnd=new jnd(LAe,0);end=new jnd('DIRECTED',1);hnd=new jnd('UNDIRECTED',2);cnd=new jnd('ASSOCIATION',3);fnd=new jnd('GENERALIZATION',4);dnd=new jnd('DEPENDENCY',5)} -function nsd(a,b){var c;if(!MCd(a)){throw Adb(new dgb(sHe))}c=MCd(a);switch(b.g){case 1:return -(a.j+a.f);case 2:return a.i-c.g;case 3:return a.j-c.f;case 4:return -(a.i+a.g);}return 0} -function Jge(a,b,c){var d,e,f;d=b.Lk();f=b.md();e=d.Jk()?fge(a,4,d,f,null,kge(a,d,f,ZD(d,102)&&(RD(d,19).Bb&txe)!=0),true):fge(a,d.tk()?2:1,d,f,d.ik(),-1,true);c?c.nj(e):(c=e);return c} -function lwb(a,b){var c,d;uFb(b);d=a.b.c.length;Rmb(a.b,b);while(d>0){c=d;d=(d-1)/2|0;if(a.a.Ne(Vmb(a.b,d),b)<=0){$mb(a.b,c,b);return true}$mb(a.b,c,Vmb(a.b,d))}$mb(a.b,d,b);return true} -function sKb(a,b,c,d){var e,f;e=0;if(!c){for(f=0;f<jKb;f++){e=$wnd.Math.max(e,hKb(a.a[f][b.g],d))}}else{e=hKb(a.a[c.g][b.g],d)}b==(ZJb(),XJb)&&!!a.b&&(e=$wnd.Math.max(e,a.b.a));return e} -function Qqc(a,b){var c,d,e,f,g,h;e=a.i;f=b.i;if(!e||!f){return false}if(e.i!=f.i||e.i==(qpd(),Xod)||e.i==(qpd(),ppd)){return false}g=e.g.a;c=g+e.j.a;h=f.g.a;d=h+f.j.a;return g<=d&&c>=h} -function A8c(a){switch(a.g){case 0:return new o8c;case 1:return new u8c;default:throw Adb(new agb('No implementation is available for the width approximator '+(a.f!=null?a.f:''+a.g)));}} -function rDd(a,b,c,d){var e;e=false;if(bE(d)){e=true;sDd(b,c,WD(d))}if(!e){if($D(d)){e=true;rDd(a,b,c,d)}}if(!e){if(ZD(d,242)){e=true;qDd(b,c,RD(d,242))}}if(!e){throw Adb(new Aeb(tIe))}} -function uee(a,b){var c,d,e;c=b.qi(a.a);if(c){e=$Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),rKe);if(e!=null){for(d=1;d<(lke(),hke).length;++d){if(lhb(hke[d],e)){return d}}}}return 0} -function vee(a,b){var c,d,e;c=b.qi(a.a);if(c){e=$Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),rKe);if(e!=null){for(d=1;d<(lke(),ike).length;++d){if(lhb(ike[d],e)){return d}}}}return 0} -function Ve(a,b){var c,d,e,f;uFb(b);f=a.a.gc();if(f<b.gc()){for(c=a.a.ec().Kc();c.Ob();){d=c.Pb();b.Hc(d)&&c.Qb()}}else{for(e=b.Kc();e.Ob();){d=e.Pb();a.a.Bc(d)!=null}}return f!=a.a.gc()} -function e_b(a){var b,c;c=ajd(xjd(cD(WC(l3,1),Nve,8,0,[a.i.n,a.n,a.a])));b=a.i.d;switch(a.j.g){case 1:c.b-=b.d;break;case 2:c.a+=b.c;break;case 3:c.b+=b.a;break;case 4:c.a-=b.b;}return c} -function edc(a){var b;b=(Zcc(),RD(hs(new is(Mr(Z2b(a).a.Kc(),new ir))),18).c.i);while(b.k==(r3b(),o3b)){pQb(b,(Ywc(),twc),(Geb(),true));b=RD(hs(new is(Mr(Z2b(b).a.Kc(),new ir))),18).c.i}} -function BMc(a,b,c,d){var e,f,g,h;h=aMc(b,d);for(g=h.Kc();g.Ob();){e=RD(g.Pb(),12);a.d[e.p]=a.d[e.p]+a.c[c.p]}h=aMc(c,d);for(f=h.Kc();f.Ob();){e=RD(f.Pb(),12);a.d[e.p]=a.d[e.p]-a.c[b.p]}} -function Isd(a,b,c){var d,e;for(e=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));e.e!=e.i.gc();){d=RD(bMd(e),27);Byd(d,d.i+b,d.j+c)}xgb((!a.b&&(a.b=new C5d(G4,a,12,3)),a.b),new Osd(b,c))} -function $yb(a,b,c,d){var e,f;f=b;e=f.d==null||a.a.Ne(c.d,f.d)>0?1:0;while(f.a[e]!=c){f=f.a[e];e=a.a.Ne(c.d,f.d)>0?1:0}f.a[e]=d;d.b=c.b;d.a[0]=c.a[0];d.a[1]=c.a[1];c.a[0]=null;c.a[1]=null} -function zIb(a){var b,c,d,e;b=new bnb;c=$C(xdb,Hye,28,a.a.c.length,16,1);Snb(c,c.length);for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),125);if(!c[d.d]){ZEb(b.c,d);yIb(a,d,c)}}return b} -function UXb(a,b){var c,d,e,f,g;e=b==1?MXb:LXb;for(d=e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),88);for(g=RD(Qc(a.f.c,c),21).Kc();g.Ob();){f=RD(g.Pb(),42);Ymb(a.b.b,f.b);Ymb(a.b.a,RD(f.b,86).d)}}} -function P9b(a,b){var c;b.Ug('Hierarchical port position processing',1);c=a.b;c.c.length>0&&O9b((tFb(0,c.c.length),RD(c.c[0],30)),a);c.c.length>1&&O9b(RD(Vmb(c,c.c.length-1),30),a);b.Vg()} -function Sod(a){Pod();var b,c;b=ysb(Lod,cD(WC(D3,1),jwe,279,0,[Nod]));if(dy(Tx(b,a))>1){return false}c=ysb(Kod,cD(WC(D3,1),jwe,279,0,[Jod,Ood]));if(dy(Tx(c,a))>1){return false}return true} -function FBd(a,b){var c;c=Xjb((YSd(),XSd),a);ZD(c,507)?$jb(XSd,a,new B5d(this,b)):$jb(XSd,a,this);BBd(this,b);if(b==(jTd(),iTd)){this.wb=RD(this,2038);RD(b,2040)}else{this.wb=(lTd(),kTd)}} -function Lae(b){var c,d,e;if(b==null){return null}c=null;for(d=0;d<nAd.length;++d){try{return b2d(nAd[d],b)}catch(a){a=zdb(a);if(ZD(a,33)){e=a;c=e}else throw Adb(a)}}throw Adb(new RSd(c))} -function Mrb(){Mrb=geb;Krb=cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']);Lrb=cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])} -function qBb(a){var b,c,d;b=lhb(typeof(b),Yxe)?null:new gFb;if(!b){return}SAb();c=(d=900,d>=Awe?'error':d>=900?'warn':d>=800?'info':'log');eFb(c,a.a);!!a.b&&fFb(b,c,a.b,'Exception: ',true)} -function mQb(a,b){var c,d;d=(!a.q&&(a.q=new Tsb),Wjb(a.q,b));if(d!=null){return d}c=b.Sg();ZD(c,4)&&(c==null?(!a.q&&(a.q=new Tsb),_jb(a.q,b)):(!a.q&&(a.q=new Tsb),Zjb(a.q,b,c)),a);return c} -function sXb(){sXb=geb;nXb=new tXb('P1_CYCLE_BREAKING',0);oXb=new tXb('P2_LAYERING',1);pXb=new tXb('P3_NODE_ORDERING',2);qXb=new tXb('P4_NODE_PLACEMENT',3);rXb=new tXb('P5_EDGE_ROUTING',4)} -function KZb(a,b){CZb();var c;if(a.c==b.c){if(a.b==b.b||rZb(a.b,b.b)){c=oZb(a.b)?1:-1;if(a.a&&!b.a){return c}else if(!a.a&&b.a){return -c}}return hgb(a.b.g,b.b.g)}else{return Qfb(a.c,b.c)}} -function E3c(a,b){var c,d,e;if(p3c(a,b)){return true}for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),27);e=R2c(c);if(o3c(a,c,e)){return true}if(C3c(a,c)-a.g<=a.a){return true}}return false} -function ncd(){ncd=geb;mcd=(Kcd(),Jcd);jcd=Fcd;icd=Dcd;gcd=zcd;hcd=Bcd;fcd=new A3b(8);ecd=new mGd((umd(),tld),fcd);kcd=new mGd(fmd,8);lcd=Hcd;bcd=ucd;ccd=wcd;dcd=new mGd(Mkd,(Geb(),false))} -function hkd(){hkd=geb;ekd=new A3b(15);dkd=new mGd((umd(),tld),ekd);gkd=new mGd(fmd,15);fkd=new mGd(Rld,sgb(0));$jd=Wkd;akd=kld;ckd=pld;Xjd=new mGd(Dkd,KGe);_jd=ald;bkd=nld;Yjd=Fkd;Zjd=Kkd} -function JGd(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i!=1){throw Adb(new agb(JIe))}return AGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84))} -function KGd(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i!=1){throw Adb(new agb(JIe))}return BGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84))} -function MGd(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i!=1){throw Adb(new agb(JIe))}return BGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84))} -function LGd(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i!=1){throw Adb(new agb(JIe))}return AGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84))} -function bJd(a,b,c){var d,e,f;++a.j;e=a.Ej();if(b>=e||b<0)throw Adb(new veb(MIe+b+NIe+e));if(c>=e||c<0)throw Adb(new veb(OIe+c+NIe+e));b!=c?(d=(f=a.Cj(c),a.qj(b,f),f)):(d=a.xj(c));return d} -function Lje(a){var b,c,d;d=a;if(a){b=0;for(c=a.Eh();c;c=c.Eh()){if(++b>wxe){return Lje(c)}d=c;if(c==a){throw Adb(new dgb('There is a cycle in the containment hierarchy of '+a))}}}return d} -function Fe(a){var b,c,d;d=new Jyb(pve,'[',']');for(c=a.Kc();c.Ob();){b=c.Pb();Gyb(d,dE(b)===dE(a)?'(this Collection)':b==null?vve:jeb(b))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} -function p3c(a,b){var c,d;d=false;if(b.gc()<2){return false}for(c=0;c<b.gc();c++){c<b.gc()-1?(d=d|o3c(a,RD(b.Xb(c),27),RD(b.Xb(c+1),27))):(d=d|o3c(a,RD(b.Xb(c),27),RD(b.Xb(0),27)))}return d} -function wAd(a,b){var c;if(b!=a.a){c=null;!!a.a&&(c=RD(a.a,54).Th(a,4,t7,c));!!b&&(c=RD(b,54).Rh(a,4,t7,c));c=rAd(a,b,c);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,b,b))} -function p2d(a,b){var c;if(b!=a.e){!!a.e&&oae($9d(a.e),a);!!b&&(!b.b&&(b.b=new pae(new lae)),nae(b.b,a));c=f2d(a,b,null);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,4,b,b))} -function $mc(a,b){var c;c=b.o;if(Dmd(a.f)){a.j.a=$wnd.Math.max(a.j.a,c.a);a.j.b+=c.b;a.d.c.length>1&&(a.j.b+=a.e)}else{a.j.a+=c.a;a.j.b=$wnd.Math.max(a.j.b,c.b);a.d.c.length>1&&(a.j.a+=a.e)}} -function Mnc(){Mnc=geb;Jnc=cD(WC(E3,1),NAe,64,0,[(qpd(),Yod),Xod,npd]);Inc=cD(WC(E3,1),NAe,64,0,[Xod,npd,ppd]);Knc=cD(WC(E3,1),NAe,64,0,[npd,ppd,Yod]);Lnc=cD(WC(E3,1),NAe,64,0,[ppd,Yod,Xod])} -function Upc(a,b,c,d){var e,f,g,h,i,j,k;g=a.c.d;h=a.d.d;if(g.j==h.j){return}k=a.b;e=g.j;i=null;while(e!=h.j){i=b==0?tpd(e):rpd(e);f=$pc(e,k.d[e.g],c);j=$pc(i,k.d[i.g],c);Mub(d,$id(f,j));e=i}} -function OJc(a,b,c,d){var e,f,g,h,i;g=hMc(a.a,b,c);h=RD(g.a,17).a;f=RD(g.b,17).a;if(d){i=RD(mQb(b,(Ywc(),Iwc)),10);e=RD(mQb(c,Iwc),10);if(!!i&&!!e){Slc(a.b,i,e);h+=a.b.i;f+=a.b.e}}return h>f} -function OLc(a){var b,c,d,e,f,g,h,i,j;this.a=LLc(a);this.b=new bnb;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];f=new bnb;Rmb(this.b,f);for(h=b,i=0,j=h.length;i<j;++i){g=h[i];Rmb(f,new dnb(g.j))}}} -function QLc(a,b,c){var d,e,f;f=0;d=c[b];if(b<c.length-1){e=c[b+1];if(a.b[b]){f=iNc(a.d,d,e);f+=lMc(a.a,d,(qpd(),Xod));f+=lMc(a.a,e,ppd)}else{f=gMc(a.a,d,e)}}a.c[b]&&(f+=nMc(a.a,d));return f} -function r0b(a,b,c,d,e){var f,g,h,i;i=null;for(h=new Anb(d);h.a<h.c.c.length;){g=RD(ynb(h),452);if(g!=c&&Wmb(g.e,e,0)!=-1){i=g;break}}f=s0b(e);Y0b(f,c.b);Z0b(f,i.b);Rc(a.a,e,new J0b(f,b,c.f))} -function h2b(a){var b,c,d,e;if(Emd(RD(mQb(a.b,(yCc(),rAc)),88))){return 0}b=0;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),10);if(c.k==(r3b(),p3b)){e=c.o.a;b=$wnd.Math.max(b,e)}}return b} -function Tlc(a){while(a.g.c!=0&&a.d.c!=0){if(amc(a.g).c>amc(a.d).c){a.i+=a.g.c;cmc(a.d)}else if(amc(a.d).c>amc(a.g).c){a.e+=a.d.c;cmc(a.g)}else{a.i+=_lc(a.g);a.e+=_lc(a.d);cmc(a.g);cmc(a.d)}}} -function vTc(a,b,c){var d,e,f,g;f=b.q;g=b.r;new bTc((fTc(),dTc),b,f,1);new bTc(dTc,f,g,1);for(e=new Anb(c);e.a<e.c.c.length;){d=RD(ynb(e),118);if(d!=f&&d!=b&&d!=g){PTc(a.a,d,b);PTc(a.a,d,g)}}} -function vVc(a,b,c,d){a.a.d=$wnd.Math.min(b,c);a.a.a=$wnd.Math.max(b,d)-a.a.d;if(b<c){a.b=0.5*(b+c);a.g=CEe*a.b+0.9*b;a.f=CEe*a.b+0.9*c}else{a.b=0.5*(b+d);a.g=CEe*a.b+0.9*d;a.f=CEe*a.b+0.9*b}} -function zZc(a){var b,c,d,e;if(a.b!=0){b=new Yub;for(e=Sub(a,0);e.b!=e.d.c;){d=RD(evb(e),39);ye(b,$Wc(d));c=d.e;c.a=RD(mQb(d,(q$c(),o$c)),17).a;c.b=RD(mQb(d,p$c),17).a}return b}return new Yub} -function t8b(a){switch(RD(mQb(a,(yCc(),UAc)),171).g){case 1:pQb(a,UAc,(cxc(),_wc));break;case 2:pQb(a,UAc,(cxc(),axc));break;case 3:pQb(a,UAc,(cxc(),Zwc));break;case 4:pQb(a,UAc,(cxc(),$wc));}} -function Whc(a,b,c){var d;c.Ug('Self-Loop routing',1);d=Xhc(b);fE(mQb(b,(rid(),qid)));FDb(GDb(CDb(CDb(EDb(new SDb(null,new Swb(b.b,16)),new $hc),new aic),new cic),new eic),new gic(a,d));c.Vg()} -function $uc(){$uc=geb;Yuc=new _uc(LAe,0);Vuc=new _uc(Nye,1);Zuc=new _uc(Oye,2);Xuc=new _uc('LEFT_RIGHT_CONSTRAINT_LOCKING',3);Wuc=new _uc('LEFT_RIGHT_CONNECTION_LOCKING',4);Uuc=new _uc(EBe,5)} -function tWc(a,b,c){var d,e,f,g,h,i,j;h=c.a/2;f=c.b/2;d=$wnd.Math.abs(b.a-a.a);e=$wnd.Math.abs(b.b-a.b);i=1;j=1;d>h&&(i=h/d);e>f&&(j=f/e);g=$wnd.Math.min(i,j);a.a+=g*(b.a-a.a);a.b+=g*(b.b-a.b)} -function I8c(a,b,c,d,e){var f,g;g=false;f=RD(Vmb(c.b,0),27);while(V8c(a,b,f,d,e)){g=true;T9c(c,f);if(c.b.c.length==0){break}f=RD(Vmb(c.b,0),27)}c.b.c.length==0&&Fad(c.j,c);g&&gad(b.q);return g} -function Eid(a,b){tid();var c,d,e,f;if(b.b<2){return false}f=Sub(b,0);c=RD(evb(f),8);d=c;while(f.b!=f.d.c){e=RD(evb(f),8);if(Did(a,d,e)){return true}d=e}if(Did(a,d,c)){return true}return false} -function Bxd(a,b,c,d){var e,f;if(c==0){return !a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),BVd(a.o,b,d)}return f=RD(vYd((e=RD(Ywd(a,16),29),!e?a.ii():e),c),69),f.wk().Ak(a,Wwd(a),c-AYd(a.ii()),b,d)} -function BBd(a,b){var c;if(b!=a.sb){c=null;!!a.sb&&(c=RD(a.sb,54).Th(a,1,n7,c));!!b&&(c=RD(b,54).Rh(a,1,n7,c));c=hBd(a,b,c);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,4,b,b))} -function YDd(a,b){var c,d,e,f;if(b){e=vDd(b,'x');c=new ZEd(a);Hzd(c.a,(uFb(e),e));f=vDd(b,'y');d=new $Ed(a);Izd(d.a,(uFb(f),f))}else{throw Adb(new CDd('All edge sections need an end point.'))}} -function WDd(a,b){var c,d,e,f;if(b){e=vDd(b,'x');c=new WEd(a);Ozd(c.a,(uFb(e),e));f=vDd(b,'y');d=new XEd(a);Pzd(d.a,(uFb(f),f))}else{throw Adb(new CDd('All edge sections need a start point.'))}} -function hBb(a,b){var c,d,e,f,g,h,i;for(d=kBb(a),f=0,h=d.length;f<h;++f){qBb(b)}i=!dBb&&a.e?dBb?null:a.d:null;while(i){for(c=kBb(i),e=0,g=c.length;e<g;++e){qBb(b)}i=!dBb&&i.e?dBb?null:i.d:null}} -function aXb(a,b){var c,d;d=RD(mQb(b,(yCc(),BBc)),101);pQb(b,(Ywc(),Fwc),d);c=b.e;!!c&&(FDb(new SDb(null,new Swb(c.a,16)),new fXb(a)),FDb(EDb(new SDb(null,new Swb(c.b,16)),new hXb),new jXb(a)))} -function r3b(){r3b=geb;p3b=new s3b('NORMAL',0);o3b=new s3b('LONG_EDGE',1);m3b=new s3b('EXTERNAL_PORT',2);q3b=new s3b('NORTH_SOUTH_PORT',3);n3b=new s3b('LABEL',4);l3b=new s3b('BREAKING_POINT',5)} -function x7b(a){var b,c,d,e;b=false;if(nQb(a,(Ywc(),cwc))){c=RD(mQb(a,cwc),85);for(e=new Anb(a.j);e.a<e.c.c.length;){d=RD(ynb(e),12);if(v7b(d)){if(!b){u7b(Y2b(a));b=true}y7b(RD(c.xc(d),314))}}}} -function GFd(a){var b,c,d,e,f,g,h,i,j;j=HFd(a);c=a.e;f=c!=null;f&&sDd(j,FIe,a.e);h=a.k;g=!!h;g&&sDd(j,'type',ps(a.k));d=cve(a.j);e=!d;if(e){i=new MB;sC(j,lIe,i);b=new SFd(i);xgb(a.j,b)}return j} -function Zv(a){var b,c,d,e;e=Thb((dk(a.gc(),'size'),new cib),123);d=true;for(c=gn(a).Kc();c.Ob();){b=RD(c.Pb(),44);d||(e.a+=pve,e);d=false;Yhb(Thb(Yhb(e,b.ld()),61),b.md())}return (e.a+='}',e).a} -function AD(a,b){var c,d,e;b&=63;if(b<22){c=a.l<<b;d=a.m<<b|a.l>>22-b;e=a.h<<b|a.m>>22-b}else if(b<44){c=0;d=a.l<<b-22;e=a.m<<b-22|a.l>>44-b}else{c=0;d=0;e=a.l<<b-44}return hD(c&dxe,d&dxe,e&exe)} -function Neb(a){Meb==null&&(Meb=new RegExp('^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$'));if(!Meb.test(a)){throw Adb(new Vgb(nxe+a+'"'))}return parseFloat(a)} -function PXb(a,b){var c,d,e,f,g;e=b==1?MXb:LXb;for(d=e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),88);for(g=RD(Qc(a.f.c,c),21).Kc();g.Ob();){f=RD(g.Pb(),42);Rmb(a.b.b,RD(f.b,86));Rmb(a.b.a,RD(f.b,86).d)}}} -function rqc(a,b){var c,d,e,f;f=b.b.j;a.a=$C(kE,Pwe,28,f.c.length,15,1);e=0;for(d=0;d<f.c.length;d++){c=(tFb(d,f.c.length),RD(f.c[d],12));c.e.c.length==0&&c.g.c.length==0?(e+=1):(e+=3);a.a[d]=e}} -function tuc(){tuc=geb;ouc=new vuc('ALWAYS_UP',0);nuc=new vuc('ALWAYS_DOWN',1);quc=new vuc('DIRECTION_UP',2);puc=new vuc('DIRECTION_DOWN',3);suc=new vuc('SMART_UP',4);ruc=new vuc('SMART_DOWN',5)} -function vid(a,b){if(a<0||b<0){throw Adb(new agb('k and n must be positive'))}else if(b>a){throw Adb(new agb('k must be smaller than n'))}else return b==0||b==a?1:a==0?0:Bid(a)/(Bid(b)*Bid(a-b))} -function msd(a,b){var c,d,e,f;c=new zId(a);while(c.g==null&&!c.c?sId(c):c.g==null||c.i!=0&&RD(c.g[c.i-1],51).Ob()){f=RD(tId(c),58);if(ZD(f,167)){d=RD(f,167);for(e=0;e<b.length;e++){b[e].Kg(d)}}}} -function Fyd(a){var b;if((a.Db&64)!=0)return kyd(a);b=new Shb(kyd(a));b.a+=' (height: ';Khb(b,a.f);b.a+=', width: ';Khb(b,a.g);b.a+=', x: ';Khb(b,a.i);b.a+=', y: ';Khb(b,a.j);b.a+=')';return b.a} -function Gn(a){var b,c,d,e,f,g,h;b=new gub;for(d=a,e=0,f=d.length;e<f;++e){c=d[e];g=Qb(c.ld());h=dub(b,g,Qb(c.md()));if(h!=null){throw Adb(new agb('duplicate key: '+g))}}this.b=(yob(),new uqb(b))} -function bob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Gyb(f,String.fromCharCode(b))}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function OUb(){OUb=geb;IUb=(TUb(),SUb);HUb=new lGd(Rze,IUb);sgb(1);GUb=new lGd(Sze,sgb(300));sgb(0);LUb=new lGd(Tze,sgb(0));new Xsd;MUb=new lGd(Uze,Vze);new Xsd;JUb=new lGd(Wze,5);NUb=SUb;KUb=RUb} -function K6d(a,b){var c;if(b!=null&&!a.c.Hk().fk(b)){c=ZD(b,58)?RD(b,58).Dh().zb:nfb(rb(b));throw Adb(new Ifb(KHe+a.c.xe()+"'s type '"+a.c.Hk().xe()+"' does not permit a value of type '"+c+"'"))}} -function k0b(a,b,c){var d,e;e=new Jkb(a.b,0);while(e.b<e.d.gc()){d=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),72));if(dE(mQb(d,(Ywc(),Dwc)))!==dE(b)){continue}e2b(d.n,Y2b(a.c.i),c);Ckb(e);Rmb(b.b,d)}} -function Arc(a){var b,c;c=$wnd.Math.sqrt((a.k==null&&(a.k=tsc(a,new Esc)),Kfb(a.k)/(a.b*(a.g==null&&(a.g=qsc(a,new Csc)),Kfb(a.g)))));b=Ydb(Hdb($wnd.Math.round(c)));b=$wnd.Math.min(b,a.f);return b} -function sse(){var a,b,c;b=0;for(a=0;a<'X'.length;a++){c=rse((BFb(a,'X'.length),'X'.charCodeAt(a)));if(c==0)throw Adb(new Lqe((BFb(a,'X'.length+1),'Unknown Option: '+'X'.substr(a))));b|=c}return b} -function R3b(){J3b();v2b.call(this);this.j=(qpd(),opd);this.a=new pjd;new T2b;this.f=(dk(2,iwe),new cnb(2));this.e=(dk(4,iwe),new cnb(4));this.g=(dk(4,iwe),new cnb(4));this.b=new h4b(this.e,this.g)} -function A6b(a,b){var c,d;if(Heb(TD(mQb(b,(Ywc(),Nwc))))){return false}d=b.c.i;if(a==(cxc(),Zwc)){if(d.k==(r3b(),n3b)){return false}}c=RD(mQb(d,(yCc(),UAc)),171);if(c==$wc){return false}return true} -function B6b(a,b){var c,d;if(Heb(TD(mQb(b,(Ywc(),Nwc))))){return false}d=b.d.i;if(a==(cxc(),_wc)){if(d.k==(r3b(),n3b)){return false}}c=RD(mQb(d,(yCc(),UAc)),171);if(c==axc){return false}return true} -function a7b(a,b){var c,d,e,f,g,h,i;g=a.d;i=a.o;h=new Uid(-g.b,-g.d,g.b+i.a+g.c,g.d+i.b+g.a);for(d=b,e=0,f=d.length;e<f;++e){c=d[e];!!c&&Sid(h,c.i)}g.b=-h.c;g.d=-h.d;g.c=h.b-g.b-i.a;g.a=h.a-g.d-i.b} -function _gc(a,b){if(b.a){switch(RD(mQb(b.b,(Ywc(),Fwc)),101).g){case 0:case 1:Roc(b);case 2:FDb(new SDb(null,new Swb(b.d,16)),new mhc);aoc(a.a,b);}}else{FDb(new SDb(null,new Swb(b.d,16)),new mhc)}} -function Xbd(){Xbd=geb;Sbd=new Ybd('CENTER_DISTANCE',0);Tbd=new Ybd('CIRCLE_UNDERLAP',1);Wbd=new Ybd('RECTANGLE_UNDERLAP',2);Ubd=new Ybd('INVERTED_OVERLAP',3);Vbd=new Ybd('MINIMUM_ROOT_DISTANCE',4)} -function Iqe(a){Gqe();var b,c,d,e,f;if(a==null)return null;d=a.length;e=d*2;b=$C(hE,zwe,28,e,15,1);for(c=0;c<d;c++){f=a[c];f<0&&(f+=256);b[c*2]=Fqe[f>>4];b[c*2+1]=Fqe[f&15]}return Ihb(b,0,b.length)} -function sn(a){fn();var b,c,d;d=a.c.length;switch(d){case 0:return en;case 1:b=RD(Ir(new Anb(a)),44);return xn(b.ld(),b.md());default:c=RD(anb(a,$C(UK,Zve,44,a.c.length,0,1)),173);return new Mx(c);}} -function KWb(a){var b,c,d,e,f,g;b=new wmb;c=new wmb;hmb(b,a);hmb(c,a);while(c.b!=c.c){e=RD(smb(c),36);for(g=new Anb(e.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(f.e){d=f.e;hmb(b,d);hmb(c,d)}}}return b} -function e3b(a,b){switch(b.g){case 1:return dr(a.j,(J3b(),F3b));case 2:return dr(a.j,(J3b(),D3b));case 3:return dr(a.j,(J3b(),H3b));case 4:return dr(a.j,(J3b(),I3b));default:return yob(),yob(),vob;}} -function Zlc(a,b){var c,d,e;c=$lc(b,a.e);d=RD(Wjb(a.g.f,c),17).a;e=a.a.c.length-1;if(a.a.c.length!=0&&RD(Vmb(a.a,e),293).c==d){++RD(Vmb(a.a,e),293).a;++RD(Vmb(a.a,e),293).b}else{Rmb(a.a,new hmc(d))}} -function tLc(a,b,c){var d,e;d=sLc(a,b,c);if(d!=0){return d}if(nQb(b,(Ywc(),zwc))&&nQb(c,zwc)){e=hgb(RD(mQb(b,zwc),17).a,RD(mQb(c,zwc),17).a);e<0?uLc(a,b,c):e>0&&uLc(a,c,b);return e}return rLc(a,b,c)} -function $4c(){$4c=geb;R4c=(umd(),Qld);Y4c=fmd;K4c=kld;L4c=nld;M4c=pld;J4c=ild;N4c=sld;Q4c=Lld;H4c=(D4c(),o4c);I4c=p4c;T4c=v4c;W4c=y4c;U4c=w4c;V4c=x4c;O4c=r4c;P4c=t4c;S4c=u4c;X4c=z4c;Z4c=B4c;G4c=n4c} -function P9c(a,b){var c,d,e,f,g;if(a.e<=b){return a.g}if(R9c(a,a.g,b)){return a.g}f=a.r;d=a.g;g=a.r;e=(f-d)/2+d;while(d+1<f){c=S9c(a,e,false);if(c.b<=e&&c.a<=b){g=e;f=e}else{d=e}e=(f-d)/2+d}return g} -function Eed(a,b,c){var d;d=zed(a,b,true);Fqd(c,'Recursive Graph Layout',d);msd(b,cD(WC(j4,1),rve,536,0,[new Bfd]));Hxd(b,(umd(),Tld))||msd(b,cD(WC(j4,1),rve,536,0,[new dgd]));Fed(a,b,null,c);Hqd(c)} -function Hqd(a){var b;if(a.p==null){throw Adb(new dgb('The task has not begun yet.'))}if(!a.b){if(a.k){b=(gib(),Ndb(Hdb(Date.now()),Awe));a.q=Xdb(Vdb(b,a.o))*1.0E-9}a.c<a.r&&Iqd(a,a.r-a.c);a.b=true}} -function ssd(a){var b,c,d;d=new Ejd;Mub(d,new rjd(a.j,a.k));for(c=new dMd((!a.a&&(a.a=new XZd(D4,a,5)),a.a));c.e!=c.i.gc();){b=RD(bMd(c),377);Mub(d,new rjd(b.a,b.b))}Mub(d,new rjd(a.b,a.c));return d} -function QDd(a,b,c,d,e){var f,g,h,i,j,k;if(e){i=e.a.length;f=new vue(i);for(k=(f.b-f.a)*f.c<0?(uue(),tue):new Rue(f);k.Ob();){j=RD(k.Pb(),17);h=xDd(e,j.a);g=new PEd(a,b,c,d);RDd(g.a,g.b,g.c,g.d,h)}}} -function Rx(b,c){var d;if(dE(b)===dE(c)){return true}if(ZD(c,21)){d=RD(c,21);try{return b.gc()==d.gc()&&b.Ic(d)}catch(a){a=zdb(a);if(ZD(a,169)||ZD(a,212)){return false}else throw Adb(a)}}return false} -function Kzb(a,b,c,d,e,f){this.c=a;switch(b.g){case 2:if(a.a.Ne(e,c)<0){throw Adb(new agb(Sxe+e+Txe+c))}break;case 1:a.a.Ne(e,e);break;case 3:a.a.Ne(c,c);}this.f=b;this.b=c;this.a=d;this.e=e;this.d=f} -function LKb(a,b){var c;Rmb(a.d,b);c=b.Mf();if(a.c){a.e.a=$wnd.Math.max(a.e.a,c.a);a.e.b+=c.b;a.d.c.length>1&&(a.e.b+=a.a)}else{a.e.a+=c.a;a.e.b=$wnd.Math.max(a.e.b,c.b);a.d.c.length>1&&(a.e.a+=a.a)}} -function Ipc(a){var b,c,d,e;e=a.i;b=e.b;d=e.j;c=e.g;switch(e.a.g){case 0:c.a=(a.g.b.o.a-d.a)/2;break;case 1:c.a=b.d.n.a+b.d.a.a;break;case 2:c.a=b.d.n.a+b.d.a.a-d.a;break;case 3:c.b=b.d.n.b+b.d.a.b;}} -function oOc(a,b,c){var d,e,f;for(e=new is(Mr(W2b(c).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);if(!(!W0b(d)&&!(!W0b(d)&&d.c.i.c==d.d.i.c))){continue}f=gOc(a,d,c,new VOc);f.c.length>1&&(ZEb(b.c,f),true)}} -function _id(a,b,c,d,e){if(d<b||e<c){throw Adb(new agb('The highx must be bigger then lowx and the highy must be bigger then lowy'))}a.a<b?(a.a=b):a.a>d&&(a.a=d);a.b<c?(a.b=c):a.b>e&&(a.b=e);return a} -function LFd(a){if(ZD(a,143)){return EFd(RD(a,143))}else if(ZD(a,233)){return FFd(RD(a,233))}else if(ZD(a,23)){return GFd(RD(a,23))}else{throw Adb(new agb(wIe+Fe(new mob(cD(WC(jJ,1),rve,1,5,[a])))))}} -function ujb(a,b,c,d,e){var f,g,h;f=true;for(g=0;g<d;g++){f=f&c[g]==0}if(e==0){hib(c,d,a,0,b);g=b}else{h=32-e;f=f&c[g]<<h==0;for(g=0;g<b-1;g++){a[g]=c[g+d]>>>e|c[g+d+1]<<h}a[g]=c[g+d]>>>e;++g}return f} -function ZQc(a,b,c,d){var e,f,g;if(b.k==(r3b(),o3b)){for(f=new is(Mr(Z2b(b).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);g=e.c.i.k;if(g==o3b&&a.c.a[e.c.i.c.p]==d&&a.c.a[b.c.p]==c){return true}}}return false} -function CD(a,b){var c,d,e,f;b&=63;c=a.h&exe;if(b<22){f=c>>>b;e=a.m>>b|c<<22-b;d=a.l>>b|a.m<<22-b}else if(b<44){f=0;e=c>>>b-22;d=a.m>>b-22|a.h<<44-b}else{f=0;e=0;d=c>>>b-44}return hD(d&dxe,e&dxe,f&exe)} -function mmc(a,b,c,d){var e;this.b=d;this.e=a==(RKc(),PKc);e=b[c];this.d=YC(xdb,[Nve,Hye],[183,28],16,[e.length,e.length],2);this.a=YC(kE,[Nve,Pwe],[53,28],15,[e.length,e.length],2);this.c=new Ylc(b,c)} -function Rmc(a){var b,c,d;a.k=new Si((qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,a.j.c.length);for(d=new Anb(a.j);d.a<d.c.c.length;){c=RD(ynb(d),113);b=c.d.j;Rc(a.k,b,c)}a.e=Dnc(Ec(a.k))} -function sVc(a,b){var c,d,e;Ysb(a.d,b);c=new zVc;Zjb(a.c,b,c);c.f=tVc(b.c);c.a=tVc(b.d);c.d=(HUc(),e=b.c.i.k,e==(r3b(),p3b)||e==l3b);c.e=(d=b.d.i.k,d==p3b||d==l3b);c.b=b.c.j==(qpd(),ppd);c.c=b.d.j==Xod} -function sJb(a){var b,c,d,e,f;f=lve;e=lve;for(d=new Anb(CIb(a));d.a<d.c.c.length;){c=RD(ynb(d),218);b=c.e.e-c.d.e;c.e==a&&b<e?(e=b):b<f&&(f=b)}e==lve&&(e=-1);f==lve&&(f=-1);return new Ptd(sgb(e),sgb(f))} -function qTb(a,b){var c,d,e;e=Hze;d=(IRb(),FRb);e=$wnd.Math.abs(a.b);c=$wnd.Math.abs(b.f-a.b);if(c<e){e=c;d=GRb}c=$wnd.Math.abs(a.a);if(c<e){e=c;d=HRb}c=$wnd.Math.abs(b.g-a.a);if(c<e){e=c;d=ERb}return d} -function adc(a,b){var c,d,e,f;c=b.a.o.a;f=new Rkb(Y2b(b.a).b,b.c,b.f+1);for(e=new Dkb(f);e.b<e.d.gc();){d=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),30));if(d.c.a>=c){_cc(a,b,d.p);return true}}return false} -function EA(a,b,c,d){var e,f,g,h,i,j;g=c.length;f=0;e=-1;j=Bhb((BFb(b,a.length+1),a.substr(b)),(wvb(),uvb));for(h=0;h<g;++h){i=c[h].length;if(i>f&&whb(j,Bhb(c[h],uvb))){e=h;f=i}}e>=0&&(d[0]=b+f);return e} -function gCd(a){var b;if((a.Db&64)!=0)return Fyd(a);b=new dib(FHe);!a.a||Zhb(Zhb((b.a+=' "',b),a.a),'"');Zhb(Uhb(Zhb(Uhb(Zhb(Uhb(Zhb(Uhb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} -function xge(a,b,c){var d,e,f,g,h;h=pke(a.e.Dh(),b);e=RD(a.g,124);d=0;for(g=0;g<a.i;++g){f=e[g];if(h.am(f.Lk())){if(d==c){vLd(a,g);return nke(),RD(b,69).xk()?f:f.md()}++d}}throw Adb(new veb(HJe+c+NIe+d))} -function Rqe(a){var b,c,d;b=a.c;if(b==2||b==7||b==1){return Vse(),Vse(),Ese}else{d=Pqe(a);c=null;while((b=a.c)!=2&&b!=7&&b!=1){if(!c){c=(Vse(),Vse(),++Use,new iue(1));hue(c,d);d=c}hue(c,Pqe(a))}return d}} -function Kb(a,b,c){if(a<0||a>c){return Jb(a,c,'start index')}if(b<0||b>c){return Jb(b,c,'end index')}return hc('end index (%s) must not be less than start index (%s)',cD(WC(jJ,1),rve,1,5,[sgb(b),sgb(a)]))} -function dA(b,c){var d,e,f,g;for(e=0,f=b.length;e<f;e++){g=b[e];try{g[1]?g[0].Um()&&(c=cA(c,g)):g[0].Um()}catch(a){a=zdb(a);if(ZD(a,82)){d=a;Qz();Wz(ZD(d,485)?RD(d,485).ke():d)}else throw Adb(a)}}return c} -function _cc(a,b,c){var d,e,f;c!=b.c+b.b.gc()&&odc(b.a,wdc(b,c-b.c));f=b.a.c.p;a.a[f]=$wnd.Math.max(a.a[f],b.a.o.a);for(e=RD(mQb(b.a,(Ywc(),Mwc)),15).Kc();e.Ob();){d=RD(e.Pb(),72);pQb(d,Ycc,(Geb(),true))}} -function Aic(a,b){var c,d,e;e=zic(b);pQb(b,(Ywc(),xwc),e);if(e){d=lve;!!qtb(a.f,e)&&(d=RD(Wd(qtb(a.f,e)),17).a);c=RD(Vmb(b.g,0),18);Heb(TD(mQb(c,Nwc)))||Zjb(a,e,sgb($wnd.Math.min(RD(mQb(c,zwc),17).a,d)))}} -function aGc(a,b,c){var d,e,f,g,h;b.p=-1;for(h=c3b(b,(BEc(),zEc)).Kc();h.Ob();){g=RD(h.Pb(),12);for(e=new Anb(g.g);e.a<e.c.c.length;){d=RD(ynb(e),18);f=d.d.i;b!=f&&(f.p<0?c.Fc(d):f.p>0&&aGc(a,f,c))}}b.p=0} -function Ahd(a){var b;this.c=new Yub;this.f=a.e;this.e=a.d;this.i=a.g;this.d=a.c;this.b=a.b;this.k=a.j;this.a=a.a;!a.i?(this.j=(b=RD(mfb(d3),9),new Fsb(b,RD(WEb(b,b.length),9),0))):(this.j=a.i);this.g=a.f} -function Wb(a){var b,c,d,e;b=Thb(Zhb(new dib('Predicates.'),'and'),40);c=true;for(e=new Dkb(a);e.b<e.d.gc();){d=(sFb(e.b<e.d.gc()),e.d.Xb(e.c=e.b++));c||(b.a+=',',b);b.a+=''+d;c=false}return (b.a+=')',b).a} -function vgc(a,b,c){var d,e,f;if(c<=b+2){return}e=(c-b)/2|0;for(d=0;d<e;++d){f=(tFb(b+d,a.c.length),RD(a.c[b+d],12));$mb(a,b+d,(tFb(c-d-1,a.c.length),RD(a.c[c-d-1],12)));tFb(c-d-1,a.c.length);a.c[c-d-1]=f}} -function Nmc(a,b,c){var d,e,f,g,h,i,j,k;f=a.d.p;h=f.e;i=f.r;a.g=new DMc(i);g=a.d.o.c.p;d=g>0?h[g-1]:$C(jR,WAe,10,0,0,1);e=h[g];j=g<h.length-1?h[g+1]:$C(jR,WAe,10,0,0,1);k=b==c-1;k?pMc(a.g,e,j):pMc(a.g,d,e)} -function Vmc(a){var b;this.j=new bnb;this.f=new _sb;this.b=(b=RD(mfb(E3),9),new Fsb(b,RD(WEb(b,b.length),9),0));this.d=$C(kE,Pwe,28,(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,15,1);this.g=a} -function D3c(a,b){var c,d,e;if(b.c.length!=0){c=E3c(a,b);e=false;while(!c){n3c(a,b,true);e=true;c=E3c(a,b)}e&&n3c(a,b,false);d=N2c(b);!!a.b&&a.b.Gg(d);a.a=C3c(a,(tFb(0,b.c.length),RD(b.c[0],27)));D3c(a,d)}} -function $vd(a,b){var c,d,e;d=vYd(a.Dh(),b);c=b-a.ji();if(c<0){if(!d){throw Adb(new agb(OHe+b+PHe))}else if(d.rk()){e=a.Ih(d);e>=0?a.ki(e):Tvd(a,d)}else{throw Adb(new agb(KHe+d.xe()+LHe))}}else{Cvd(a,c,d)}} -function ADd(a){var b,c;c=null;b=false;if(ZD(a,211)){b=true;c=RD(a,211).a}if(!b){if(ZD(a,263)){b=true;c=''+RD(a,263).a}}if(!b){if(ZD(a,492)){b=true;c=''+RD(a,492).a}}if(!b){throw Adb(new Aeb(tIe))}return c} -function gge(a,b,c){var d,e,f,g,h,i;i=pke(a.e.Dh(),b);d=0;h=a.i;e=RD(a.g,124);for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())){if(c==d){return g}++d;h=g+1}}if(c==d){return h}else{throw Adb(new veb(HJe+c+NIe+d))}} -function ucc(a,b){var c,d,e,f;if(a.f.c.length==0){return null}else{f=new Tid;for(d=new Anb(a.f);d.a<d.c.c.length;){c=RD(ynb(d),72);e=c.o;f.b=$wnd.Math.max(f.b,e.a);f.a+=e.b}f.a+=(a.f.c.length-1)*b;return f}} -function rOc(a){var b,c,d,e;c=new Yub;ye(c,a.o);d=new Fyb;while(c.b!=0){b=RD(c.b==0?null:(sFb(c.b!=0),Wub(c,c.a.a)),515);e=iOc(a,b,true);e&&Rmb(d.a,b)}while(d.a.c.length!=0){b=RD(Dyb(d),515);iOc(a,b,false)}} -function kid(){kid=geb;jid=new lid(Sye,0);cid=new lid('BOOLEAN',1);gid=new lid('INT',2);iid=new lid('STRING',3);did=new lid('DOUBLE',4);eid=new lid('ENUM',5);fid=new lid('ENUMSET',6);hid=new lid('OBJECT',7)} -function Sid(a,b){var c,d,e,f,g;d=$wnd.Math.min(a.c,b.c);f=$wnd.Math.min(a.d,b.d);e=$wnd.Math.max(a.c+a.b,b.c+b.b);g=$wnd.Math.max(a.d+a.a,b.d+b.a);if(e<d){c=d;d=e;e=c}if(g<f){c=f;f=g;g=c}Rid(a,d,f,e-d,g-f)} -function m3d(a,b){var c,d;if(a.f){while(b.Ob()){c=RD(b.Pb(),76);d=c.Lk();if(ZD(d,102)&&(RD(d,19).Bb&QHe)!=0&&(!a.e||d.pk()!=C4||d.Lj()!=0)&&c.md()!=null){b.Ub();return true}}return false}else{return b.Ob()}} -function o3d(a,b){var c,d;if(a.f){while(b.Sb()){c=RD(b.Ub(),76);d=c.Lk();if(ZD(d,102)&&(RD(d,19).Bb&QHe)!=0&&(!a.e||d.pk()!=C4||d.Lj()!=0)&&c.md()!=null){b.Pb();return true}}return false}else{return b.Sb()}} -function lke(){lke=geb;ike=cD(WC(qJ,1),Nve,2,6,[TKe,UKe,VKe,WKe,XKe,YKe,FIe]);hke=cD(WC(qJ,1),Nve,2,6,[TKe,'empty',UKe,pKe,'elementOnly']);kke=cD(WC(qJ,1),Nve,2,6,[TKe,'preserve','replace',ZKe]);jke=new Yee} -function e2b(a,b,c){var d,e,f;if(b==c){return}d=b;do{$id(a,d.c);e=d.e;if(e){f=d.d;Zid(a,f.b,f.d);$id(a,e.n);d=Y2b(e)}}while(e);d=c;do{ojd(a,d.c);e=d.e;if(e){f=d.d;njd(a,f.b,f.d);ojd(a,e.n);d=Y2b(e)}}while(e)} -function Wlc(a,b,c,d){var e,f,g,h,i;if(d.f.c+d.i.c==0){for(g=a.a[a.c],h=0,i=g.length;h<i;++h){f=g[h];Zjb(d,f,new dmc(a,f,c))}}e=RD(Wd(qtb(d.f,b)),677);e.b=0;e.c=e.f;e.c==0||gmc(RD(Vmb(e.a,e.b),293));return e} -function btc(){btc=geb;Zsc=new ctc('MEDIAN_LAYER',0);_sc=new ctc('TAIL_LAYER',1);Ysc=new ctc('HEAD_LAYER',2);$sc=new ctc('SPACE_EFFICIENT_LAYER',3);atc=new ctc('WIDEST_LAYER',4);Xsc=new ctc('CENTER_LAYER',5)} -function WGc(a){var b,c,d,e;a.e=0;for(e=Sub(a.f,0);e.b!=e.d.c;){d=RD(evb(e),10);if(d.p>=a.d.b.c.length){b=new R4b(a.d);b.p=d.p-1;Rmb(a.d.b,b);c=new R4b(a.d);c.p=d.p;Rmb(a.d.b,c)}g3b(d,RD(Vmb(a.d.b,d.p),30))}} -function DVc(a,b,c){var d,e,f;if(!a.b[b.g]){a.b[b.g]=true;d=c;!d&&(d=new YWc);Mub(d.b,b);for(f=a.a[b.g].Kc();f.Ob();){e=RD(f.Pb(),65);e.b!=b&&DVc(a,e.b,d);e.c!=b&&DVc(a,e.c,d);Mub(d.a,e)}return d}return null} -function iMb(a){switch(a.g){case 0:case 1:case 2:return qpd(),Yod;case 3:case 4:case 5:return qpd(),npd;case 6:case 7:case 8:return qpd(),ppd;case 9:case 10:case 11:return qpd(),Xod;default:return qpd(),opd;}} -function SOc(a,b){var c;if(a.c.length==0){return false}c=zDc((tFb(0,a.c.length),RD(a.c[0],18)).c.i);dOc();if(c==(wDc(),tDc)||c==sDc){return true}return yDb(GDb(new SDb(null,new Swb(a,16)),new $Oc),new aPc(b))} -function KDd(a,b){if(ZD(b,207)){return EDd(a,RD(b,27))}else if(ZD(b,193)){return FDd(a,RD(b,123))}else if(ZD(b,451)){return DDd(a,RD(b,166))}else{throw Adb(new agb(wIe+Fe(new mob(cD(WC(jJ,1),rve,1,5,[b])))))}} -function Ou(a,b,c){var d,e;this.f=a;d=RD(Wjb(a.b,b),260);e=!d?0:d.a;Sb(c,e);if(c>=(e/2|0)){this.e=!d?null:d.c;this.d=e;while(c++<e){Mu(this)}}else{this.c=!d?null:d.b;while(c-->0){Lu(this)}}this.b=b;this.a=null} -function iHb(a,b){var c,d;b.a?jHb(a,b):(c=RD(vAb(a.b,b.b),60),!!c&&c==a.a[b.b.f]&&!!c.a&&c.a!=b.b.a&&c.c.Fc(b.b),d=RD(uAb(a.b,b.b),60),!!d&&a.a[d.f]==b.b&&!!d.a&&d.a!=b.b.a&&b.b.c.Fc(d),wAb(a.b,b.b),undefined)} -function wMb(a,b){var c,d;c=RD(Vrb(a.b,b),127);if(RD(RD(Qc(a.r,b),21),87).dc()){c.n.b=0;c.n.c=0;return}c.n.b=a.C.b;c.n.c=a.C.c;a.A.Hc((Qpd(),Ppd))&&BMb(a,b);d=AMb(a,b);BLb(a,b)==(pod(),mod)&&(d+=2*a.w);c.a.a=d} -function FNb(a,b){var c,d;c=RD(Vrb(a.b,b),127);if(RD(RD(Qc(a.r,b),21),87).dc()){c.n.d=0;c.n.a=0;return}c.n.d=a.C.d;c.n.a=a.C.a;a.A.Hc((Qpd(),Ppd))&&JNb(a,b);d=INb(a,b);BLb(a,b)==(pod(),mod)&&(d+=2*a.w);c.a.b=d} -function VQb(a,b){var c,d,e,f;f=new bnb;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),68);Rmb(f,new fRb(c,true));Rmb(f,new fRb(c,false))}e=new $Qb(a);e.a.a.$b();bGb(f,a.b,new mob(cD(WC(bN,1),rve,693,0,[e])))} -function iTb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;i=a.a;n=a.b;j=b.a;o=b.b;k=c.a;p=c.b;l=d.a;q=d.b;f=i*o-n*j;g=k*q-p*l;e=(i-j)*(p-q)-(n-o)*(k-l);h=(f*(k-l)-g*(i-j))/e;m=(f*(p-q)-g*(n-o))/e;return new rjd(h,m)} -function Z6b(a,b){var c,d,e;b.Ug('End label pre-processing',1);c=Kfb(UD(mQb(a,(yCc(),VBc))));d=Kfb(UD(mQb(a,ZBc)));e=Emd(RD(mQb(a,rAc),88));FDb(EDb(new SDb(null,new Swb(a.b,16)),new f7b),new h7b(c,d,e));b.Vg()} -function LFc(a,b){var c,d,e;if(a.d[b.p]){return}a.d[b.p]=true;a.a[b.p]=true;for(d=new is(Mr(a3b(b).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(W0b(c)){continue}e=c.d.i;a.a[e.p]?Rmb(a.b,c):LFc(a,e)}a.a[b.p]=false} -function hGc(a,b,c){var d;d=0;switch(RD(mQb(b,(yCc(),UAc)),171).g){case 2:d=2*-c+a.a;++a.a;break;case 1:d=-c;break;case 3:d=c;break;case 4:d=2*c+a.b;++a.b;}nQb(b,(Ywc(),zwc))&&(d+=RD(mQb(b,zwc),17).a);return d} -function JSc(a,b,c){var d,e,f;c.zc(b,a);Rmb(a.n,b);f=a.p.zg(b);b.j==a.p.Ag()?YSc(a.e,f):YSc(a.j,f);LSc(a);for(e=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(b),new _3b(b)])));gs(e);){d=RD(hs(e),12);c._b(d)||JSc(a,d,c)}} -function rZc(a,b,c){var d,e,f;c.Ug('Processor set neighbors',1);a.a=b.b.b==0?1:b.b.b;e=null;d=Sub(b.b,0);while(!e&&d.b!=d.d.c){f=RD(evb(d),39);Heb(TD(mQb(f,(q$c(),n$c))))&&(e=f)}!!e&&sZc(a,new dXc(e),c);c.Vg()} -function vsd(a){var b,c,d;c=RD(Gxd(a,(umd(),kld)),21);if(c.Hc((Qpd(),Mpd))){d=RD(Gxd(a,pld),21);b=new sjd(RD(Gxd(a,nld),8));if(d.Hc((dqd(),Ypd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b}else{return new pjd}} -function nYd(a){var b,c,d;if(!a.b){d=new y_d;for(c=new yMd(qYd(a));c.e!=c.i.gc();){b=RD(xMd(c),19);(b.Bb&QHe)!=0&&WGd(d,b)}VHd(d);a.b=new N$d((RD(QHd(xYd((lTd(),kTd).o),8),19),d.i),d.g);yYd(a).b&=-9}return a.b} -function Dhb(a){var b,c,d;c=a.length;d=0;while(d<c&&(BFb(d,a.length),a.charCodeAt(d)<=32)){++d}b=c;while(b>d&&(BFb(b-1,a.length),a.charCodeAt(b-1)<=32)){--b}return d>0||b<c?(AFb(d,b,a.length),a.substr(d,b-d)):a} -function vqc(a,b){var c,d,e,f,g,h,i,j;i=RD(Ee(Ec(b.k),$C(E3,NAe,64,2,0,1)),126);j=b.g;c=xqc(b,i[0]);e=wqc(b,i[1]);d=oqc(a,j,c,e);f=xqc(b,i[1]);h=wqc(b,i[0]);g=oqc(a,j,f,h);if(d<=g){b.a=c;b.c=e}else{b.a=f;b.c=h}} -function Eob(a){var h;yob();var b,c,d,e,f,g;if(ZD(a,59)){for(e=0,d=a.gc()-1;e<d;++e,--d){h=a.Xb(e);a.hd(e,a.Xb(d));a.hd(d,h)}}else{b=a.ed();f=a.fd(a.gc());while(b.Tb()<f.Vb()){c=b.Pb();g=f.Ub();b.Wb(g);f.Wb(c)}}} -function lKc(a,b){var c,d,e,f,g,h;h=0;f=new wmb;hmb(f,b);while(f.b!=f.c){g=RD(smb(f),219);h+=PLc(g.d,g.e);for(e=new Anb(g.b);e.a<e.c.c.length;){d=RD(ynb(e),36);c=RD(Vmb(a.b,d.p),219);c.s||(h+=lKc(a,c))}}return h} -function QTc(a,b,c,d,e){var f,g,h,i,j;if(b){for(h=b.Kc();h.Ob();){g=RD(h.Pb(),10);for(j=d3b(g,(BEc(),zEc),c).Kc();j.Ob();){i=RD(j.Pb(),12);f=RD(Wd(qtb(e.f,i)),118);if(!f){f=new USc(a.d);ZEb(d.c,f);JSc(f,i,e)}}}}} -function wVc(a,b,c){var d,e;rVc(this);b==(dVc(),bVc)?Ysb(this.r,a.c):Ysb(this.w,a.c);c==bVc?Ysb(this.r,a.d):Ysb(this.w,a.d);sVc(this,a);d=tVc(a.c);e=tVc(a.d);vVc(this,d,e,e);this.o=(HUc(),$wnd.Math.abs(d-e)<0.2)} -function Ade(a,b,c){var d,e,f,g,h,i;h=RD(Ywd(a.a,8),2035);if(h!=null){for(e=h,f=0,g=e.length;f<g;++f){null.Um()}}d=c;if((a.a.Db&1)==0){i=new Fde(a,c,b);d.dj(i)}ZD(d,686)?RD(d,686).fj(a.a):d.cj()==a.a&&d.ej(null)} -function Cne(){var a;if(wne)return RD(N5d((YSd(),XSd),dLe),2044);Dne();a=RD(ZD(Xjb((YSd(),XSd),dLe),594)?Xjb(XSd,dLe):new Bne,594);wne=true;zne(a);Ane(a);Zjb((hTd(),gTd),a,new Ene);rBd(a);$jb(XSd,dLe,a);return a} -function NA(a,b,c,d){var e;e=EA(a,c,cD(WC(qJ,1),Nve,2,6,[Swe,Twe,Uwe,Vwe,Wwe,Xwe,Ywe]),b);e<0&&(e=EA(a,c,cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} -function QA(a,b,c,d){var e;e=EA(a,c,cD(WC(qJ,1),Nve,2,6,[Swe,Twe,Uwe,Vwe,Wwe,Xwe,Ywe]),b);e<0&&(e=EA(a,c,cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} -function rtb(a,b,c){var d,e,f,g;g=a.b.Ce(b);e=(d=a.a.get(g),d==null?$C(jJ,rve,1,0,5,1):d);if(e.length==0){a.a.set(g,e)}else{f=otb(a,b,e);if(f){return f.nd(c)}}bD(e,e.length,new xlb(b,c));++a.c;++a.b.g;return null} -function PYb(a){var b,c,d;MYb(a);d=new bnb;for(c=new Anb(a.a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);Rmb(d,new _Yb(b,true));Rmb(d,new _Yb(b,false))}TYb(a.c);t$b(d,a.b,new mob(cD(WC(wQ,1),rve,382,0,[a.c])));OYb(a)} -function eHb(a,b){var c,d,e;e=new bnb;for(d=new Anb(a.c.a.b);d.a<d.c.c.length;){c=RD(ynb(d),60);if(b.Lb(c)){Rmb(e,new sHb(c,true));Rmb(e,new sHb(c,false))}}kHb(a.e);bGb(e,a.d,new mob(cD(WC(bN,1),rve,693,0,[a.e])))} -function t7b(a){var b,c,d,e;c=new Tsb;for(e=new Anb(a.d);e.a<e.c.c.length;){d=RD(ynb(e),187);b=RD(d.of((Ywc(),dwc)),18);!!qtb(c.f,b)||Zjb(c,b,new G7b(b));Rmb(RD(Wd(qtb(c.f,b)),465).b,d)}return new dnb(new glb(c))} -function Xdc(a,b){var c,d,e,f,g;d=new xmb(a.j.c.length);c=null;for(f=new Anb(a.j);f.a<f.c.c.length;){e=RD(ynb(f),12);if(e.j!=c){d.b==d.c||Ydc(d,c,b);jmb(d);c=e.j}g=c7b(e);!!g&&(imb(d,g),true)}d.b==d.c||Ydc(d,c,b)} -function Lec(a,b){var c,d,e;d=new Jkb(a.b,0);while(d.b<d.d.gc()){c=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),72));e=RD(mQb(c,(yCc(),wAc)),278);if(e==(Omd(),Mmd)){Ckb(d);Rmb(b.b,c);nQb(c,(Ywc(),dwc))||pQb(c,dwc,a)}}} -function eIc(a){var b,c,d,e,f;b=Kr(new is(Mr(a3b(a).a.Kc(),new ir)));for(e=new is(Mr(Z2b(a).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);c=d.c.i;f=Kr(new is(Mr(a3b(c).a.Kc(),new ir)));b=$wnd.Math.max(b,f)}return sgb(b)} -function Jsd(a,b,c){var d,e,f;d=RD(Gxd(a,(umd(),Kkd)),21);e=0;f=0;b.a>c.a&&(d.Hc((ukd(),okd))?(e=(b.a-c.a)/2):d.Hc(qkd)&&(e=b.a-c.a));b.b>c.b&&(d.Hc((ukd(),skd))?(f=(b.b-c.b)/2):d.Hc(rkd)&&(f=b.b-c.b));Isd(a,e,f)} -function ABd(a,b,c,d,e,f,g,h,i,j,k,l,m){ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),4);PAd(a,c);a.f=g;DWd(a,h);FWd(a,i);xWd(a,j);EWd(a,k);aWd(a,l);AWd(a,m);_Vd(a,true);$Vd(a,e);a.Zk(f);YVd(a,b);d!=null&&(a.i=null,zWd(a,d))} -function Jb(a,b,c){if(a<0){return hc(qve,cD(WC(jJ,1),rve,1,5,[c,sgb(a)]))}else if(b<0){throw Adb(new agb(sve+b))}else{return hc('%s (%s) must not be greater than size (%s)',cD(WC(jJ,1),rve,1,5,[c,sgb(a),sgb(b)]))}} -function Xnb(a,b,c,d,e,f){var g,h,i,j;g=d-c;if(g<7){Unb(b,c,d,f);return}i=c+e;h=d+e;j=i+(h-i>>1);Xnb(b,a,i,j,-e,f);Xnb(b,a,j,h,-e,f);if(f.Ne(a[j-1],a[j])<=0){while(c<d){bD(b,c++,a[i++])}return}Vnb(a,i,j,h,b,c,d,f)} -function Mqc(a,b){var c,d,e,f,g,h,i;i=b.d;e=b.b.j;for(h=new Anb(i);h.a<h.c.c.length;){g=RD(ynb(h),105);f=$C(xdb,Hye,28,e.c.length,16,1);Zjb(a.b,g,f);c=g.a.d.p-1;d=g.c.d.p;while(c!=d){c=(c+1)%e.c.length;f[c]=true}}} -function rGc(a,b){nGc();if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return hgb(RD(mQb(a,zwc),17).a,RD(mQb(b,zwc),17).a)}throw Adb(new Ked('The BF model order layer assigner requires all real nodes to have a model order.'))} -function $Gc(a,b){SGc();if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return hgb(RD(mQb(a,zwc),17).a,RD(mQb(b,zwc),17).a)}throw Adb(new Ked('The DF model order layer assigner requires all real nodes to have a model order.'))} -function TSc(a,b){a.r=new USc(a.p);SSc(a.r,a);ye(a.r.j,a.j);Xub(a.j);Mub(a.j,b);Mub(a.r.e,b);LSc(a);LSc(a.r);while(a.f.c.length!=0){$Sc(RD(Vmb(a.f,0),132))}while(a.k.c.length!=0){$Sc(RD(Vmb(a.k,0),132))}return a.r} -function Wvd(a,b,c){var d,e,f;e=vYd(a.Dh(),b);d=b-a.ji();if(d<0){if(!e){throw Adb(new agb(OHe+b+PHe))}else if(e.rk()){f=a.Ih(e);f>=0?a.bi(f,c):Svd(a,e,c)}else{throw Adb(new agb(KHe+e.xe()+LHe))}}else{Bvd(a,d,e,c)}} -function n3d(a){var b,c;if(a.f){while(a.n>0){b=RD(a.k.Xb(a.n-1),76);c=b.Lk();if(ZD(c,102)&&(RD(c,19).Bb&QHe)!=0&&(!a.e||c.pk()!=C4||c.Lj()!=0)&&b.md()!=null){return true}else{--a.n}}return false}else{return a.n>0}} -function Pje(b){var c,d,e,f;d=RD(b,54)._h();if(d){try{e=null;c=N5d((YSd(),XSd),jSd(kSd(d)));if(c){f=c.ai();!!f&&(e=f.Fl(Chb(d.e)))}if(!!e&&e!=b){return Pje(e)}}catch(a){a=zdb(a);if(!ZD(a,63))throw Adb(a)}}return b} -function P3c(a,b,c){var d,e,f;c.Ug('Remove overlaps',1);c.dh(b,eFe);d=RD(Gxd(b,(u2c(),t2c)),27);a.f=d;a.a=u5c(RD(Gxd(b,($4c(),X4c)),299));e=UD(Gxd(b,(umd(),fmd)));s3c(a,(uFb(e),e));f=Q2c(d);O3c(a,b,f,c);c.dh(b,gFe)} -function Ded(a){var b,c,d;if(Heb(TD(Gxd(a,(umd(),$kd))))){d=new bnb;for(c=new is(Mr(zGd(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),74);ozd(b)&&Heb(TD(Gxd(b,_kd)))&&(ZEb(d.c,b),true)}return d}else{return yob(),yob(),vob}} -function KC(a){if(!a){return cC(),bC}var b=a.valueOf?a.valueOf():a;if(b!==a){var c=GC[typeof b];return c?c(b):NC(typeof b)}else if(a instanceof Array||a instanceof $wnd.Array){return new NB(a)}else{return new vC(a)}} -function IMb(a,b,c){var d,e,f;f=a.o;d=RD(Vrb(a.p,c),252);e=d.i;e.b=ZKb(d);e.a=YKb(d);e.b=$wnd.Math.max(e.b,f.a);e.b>f.a&&!b&&(e.b=f.a);e.c=-(e.b-f.a)/2;switch(c.g){case 1:e.d=-e.a;break;case 3:e.d=f.b;}$Kb(d);_Kb(d)} -function JMb(a,b,c){var d,e,f;f=a.o;d=RD(Vrb(a.p,c),252);e=d.i;e.b=ZKb(d);e.a=YKb(d);e.a=$wnd.Math.max(e.a,f.b);e.a>f.b&&!b&&(e.a=f.b);e.d=-(e.a-f.b)/2;switch(c.g){case 4:e.c=-e.b;break;case 2:e.c=f.a;}$Kb(d);_Kb(d)} -function nkc(a,b){var c,d,e,f,g;if(b.dc()){return}e=RD(b.Xb(0),131);if(b.gc()==1){mkc(a,e,e,1,0,b);return}c=1;while(c<b.gc()){if(e.j||!e.o){f=skc(b,c);if(f){d=RD(f.a,17).a;g=RD(f.b,131);mkc(a,e,g,c,d,b);c=d+1;e=g}}}} -function Soc(a){var b,c,d,e,f,g;g=new dnb(a.d);_mb(g,new upc);b=(epc(),cD(WC(hW,1),jwe,276,0,[Zoc,apc,Yoc,dpc,_oc,$oc,cpc,bpc]));c=0;for(f=new Anb(g);f.a<f.c.c.length;){e=RD(ynb(f),105);d=b[c%b.length];Uoc(e,d);++c}} -function zid(a,b){tid();var c,d,e,f;if(b.b<2){return false}f=Sub(b,0);c=RD(evb(f),8);d=c;while(f.b!=f.d.c){e=RD(evb(f),8);if(!(xid(a,d)&&xid(a,e))){return false}d=e}if(!(xid(a,d)&&xid(a,c))){return false}return true} -function HEd(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;l=a;g=vDd(l,'x');c=new iFd(b);eEd(c.a,g);h=vDd(l,'y');d=new jFd(b);fEd(d.a,h);i=vDd(l,fIe);e=new kFd(b);gEd(e.a,i);j=vDd(l,eIe);f=new lFd(b);k=(hEd(f.a,j),j);return k} -function v$d(a,b){r$d(a,b);(a.b&1)!=0&&(a.a.a=null);(a.b&2)!=0&&(a.a.f=null);if((a.b&4)!=0){a.a.g=null;a.a.i=null}if((a.b&16)!=0){a.a.d=null;a.a.e=null}(a.b&8)!=0&&(a.a.b=null);if((a.b&32)!=0){a.a.j=null;a.a.c=null}} -function Lde(b,c){var d,e,f;f=0;if(c.length>0){try{f=Oeb(c,qwe,lve)}catch(a){a=zdb(a);if(ZD(a,130)){e=a;throw Adb(new RSd(e))}else throw Adb(a)}}d=(!b.a&&(b.a=new Zde(b)),b.a);return f<d.i&&f>=0?RD(QHd(d,f),58):null} -function Ib(a,b){if(a<0){return hc(qve,cD(WC(jJ,1),rve,1,5,['index',sgb(a)]))}else if(b<0){throw Adb(new agb(sve+b))}else{return hc('%s (%s) must be less than size (%s)',cD(WC(jJ,1),rve,1,5,['index',sgb(a),sgb(b)]))}} -function cob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function dob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function eob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function hob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function kwb(a,b){var c,d,e,f,g,h;c=a.b.c.length;e=Vmb(a.b,b);while(b*2+1<c){d=(f=2*b+1,g=f+1,h=f,g<c&&a.a.Ne(Vmb(a.b,g),Vmb(a.b,f))<0&&(h=g),h);if(a.a.Ne(e,Vmb(a.b,d))<0){break}$mb(a.b,b,Vmb(a.b,d));b=d}$mb(a.b,b,e)} -function oJb(a,b,c){var d,e;d=c.d;e=c.e;if(a.g[d.d]<=a.i[b.d]&&a.i[b.d]<=a.i[d.d]&&a.g[e.d]<=a.i[b.d]&&a.i[b.d]<=a.i[e.d]){if(a.i[d.d]<a.i[e.d]){return false}return true}if(a.i[d.d]<a.i[e.d]){return true}return false} -function SWb(a,b){var c;c=RD(mQb(b,(yCc(),oAc)),322);if(c!=a){throw Adb(new Ked('The hierarchy aware processor '+c+' in child node '+b+' is only allowed if the root node specifies the same hierarchical processor.'))}} -function Kee(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new C5d(y7,b,21,17)),b.s);f=null;for(e=0,g=d.i;e<g;++e){c=RD(QHd(d,e),179);switch(yfe(Qee(a,c))){case 2:case 3:{!f&&(f=new bnb);ZEb(f.c,c)}}}return !f?(yob(),yob(),vob):f} -function PQb(a,b,c){var d,e,f,g,h,i;i=oxe;for(f=new Anb(nRb(a.b));f.a<f.c.c.length;){e=RD(ynb(f),177);for(h=new Anb(nRb(b.b));h.a<h.c.c.length;){g=RD(ynb(h),177);d=Aid(e.a,e.b,g.a,g.b,c);i=$wnd.Math.min(i,d)}}return i} -function Q3b(a,b){if(!b){throw Adb(new Ngb)}a.j=b;if(!a.d){switch(a.j.g){case 1:a.a.a=a.o.a/2;a.a.b=0;break;case 2:a.a.a=a.o.a;a.a.b=a.o.b/2;break;case 3:a.a.a=a.o.a/2;a.a.b=a.o.b;break;case 4:a.a.a=0;a.a.b=a.o.b/2;}}} -function Jic(a,b){var c,d,e;if(ZD(b.g,10)&&RD(b.g,10).k==(r3b(),m3b)){return oxe}e=$jc(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=Zjc(b);if(c){d=Kfb(UD(hFc(c,(yCc(),bCc))));return $wnd.Math.max(0,d/2-0.5)}return oxe} -function Lic(a,b){var c,d,e;if(ZD(b.g,10)&&RD(b.g,10).k==(r3b(),m3b)){return oxe}e=$jc(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=Zjc(b);if(c){d=Kfb(UD(hFc(c,(yCc(),bCc))));return $wnd.Math.max(0,d/2-0.5)}return oxe} -function Jkc(a,b){lkc();var c,d,e,f,g,h;c=null;for(g=b.Kc();g.Ob();){f=RD(g.Pb(),131);if(f.o){continue}d=Qid(f.a);e=Nid(f.a);h=new Nlc(d,e,null,RD(f.d.a.ec().Kc().Pb(),18));Rmb(h.c,f.a);ZEb(a.c,h);!!c&&Rmb(c.d,h);c=h}} -function bmc(a){var b,c,d,e,f,g;g=aMc(a.d,a.e);for(f=g.Kc();f.Ob();){e=RD(f.Pb(),12);d=a.e==(qpd(),ppd)?e.e:e.g;for(c=new Anb(d);c.a<c.c.c.length;){b=RD(ynb(c),18);if(!W0b(b)&&b.c.i.c!=b.d.i.c){Zlc(a,b);++a.f;++a.c}}}} -function Wsc(a,b){var c,d;if(b.dc()){return yob(),yob(),vob}d=new bnb;Rmb(d,sgb(qwe));for(c=1;c<a.f;++c){a.a==null&&usc(a);a.a[c]&&Rmb(d,sgb(c))}if(d.c.length==1){return yob(),yob(),vob}Rmb(d,sgb(lve));return Vsc(b,d)} -function kOc(a,b){var c,d,e,f,g,h,i;g=b.c.i.k!=(r3b(),p3b);i=g?b.d:b.c;c=U0b(b,i).i;e=RD(Wjb(a.k,i),125);d=a.i[c.p].a;if($2b(i.i)<(!c.c?-1:Wmb(c.c.a,c,0))){f=e;h=d}else{f=d;h=e}rIb(uIb(tIb(vIb(sIb(new wIb,0),4),f),h))} -function ODd(a,b,c){var d,e,f,g,h,i;if(c){e=c.a.length;d=new vue(e);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);i=uEd(a,tDd(JB(c,g.a)));if(i){f=(!b.b&&(b.b=new Yie(E4,b,4,7)),b.b);WGd(f,i)}}}} -function PDd(a,b,c){var d,e,f,g,h,i;if(c){e=c.a.length;d=new vue(e);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);i=uEd(a,tDd(JB(c,g.a)));if(i){f=(!b.c&&(b.c=new Yie(E4,b,5,8)),b.c);WGd(f,i)}}}} -function Bo(a,b,c){var d,e;d=b.a&a.f;b.b=a.b[d];a.b[d]=b;e=b.f&a.f;b.d=a.c[e];a.c[e]=b;if(!c){b.e=a.e;b.c=null;!a.e?(a.a=b):(a.e.c=b);a.e=b}else{b.e=c.e;!b.e?(a.a=b):(b.e.c=b);b.c=c.c;!b.c?(a.e=b):(b.c.e=b)}++a.i;++a.g} -function Ir(a){var b,c,d;b=a.Pb();if(!a.Ob()){return b}d=Yhb(Zhb(new bib,'expected one element but was: <'),b);for(c=0;c<4&&a.Ob();c++){Yhb((d.a+=pve,d),a.Pb())}a.Ob()&&(d.a+=', ...',d);d.a+='>';throw Adb(new agb(d.a))} -function cB(a){var b,c;c=-a.a;b=cD(WC(hE,1),zwe,28,15,[43,48,48,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&Bwe;b[2]=b[2]+(c/60|0)%10&Bwe;b[3]=b[3]+(c%60/10|0)&Bwe;b[4]=b[4]+c%10&Bwe;return Ihb(b,0,b.length)} -function V2b(a){var b,c,d,e;a.g=new Zrb(RD(Qb(E3),296));d=0;c=(qpd(),Yod);b=0;for(;b<a.j.c.length;b++){e=RD(Vmb(a.j,b),12);if(e.j!=c){d!=b&&Wrb(a.g,c,new Ptd(sgb(d),sgb(b)));c=e.j;d=b}}Wrb(a.g,c,new Ptd(sgb(d),sgb(b)))} -function u7b(a){var b,c,d,e,f,g,h;d=0;for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),30);for(f=new Anb(b.a);f.a<f.c.c.length;){e=RD(ynb(f),10);e.p=d++;for(h=new Anb(e.j);h.a<h.c.c.length;){g=RD(ynb(h),12);g.p=d++}}}} -function Tvd(a,b){var c,d,e;e=Eee((lke(),jke),a.Dh(),b);if(e){nke();RD(e,69).xk()||(e=zfe(Qee(jke,e)));d=(c=a.Ih(e),RD(c>=0?a.Lh(c,true,true):Qvd(a,e,true),160));RD(d,220).Zl(b)}else{throw Adb(new agb(KHe+b.xe()+LHe))}} -function Cib(a){var b,c;if(a>-140737488355328&&a<140737488355328){if(a==0){return 0}b=a<0;b&&(a=-a);c=eE($wnd.Math.floor($wnd.Math.log(a)/0.6931471805599453));(!b||a!=$wnd.Math.pow(2,c))&&++c;return c}return Dib(Hdb(a))} -function oTc(a){var b,c,d,e,f,g,h;f=new Iub;for(c=new Anb(a);c.a<c.c.c.length;){b=RD(ynb(c),132);g=b.a;h=b.b;if(f.a._b(g)||f.a._b(h)){continue}e=g;d=h;if(g.e.b+g.j.b>2&&h.e.b+h.j.b<=2){e=h;d=g}f.a.zc(e,f);e.q=d}return f} -function B5c(a,b,c){c.Ug('Eades radial',1);c.dh(b,gFe);a.d=RD(Gxd(b,(u2c(),t2c)),27);a.c=Kfb(UD(Gxd(b,($4c(),S4c))));a.e=u5c(RD(Gxd(b,X4c),299));a.a=Z3c(RD(Gxd(b,Z4c),434));a.b=k5c(RD(Gxd(b,O4c),354));C5c(a);c.dh(b,gFe)} -function t8c(a,b){b.Ug('Target Width Setter',1);if(Hxd(a,(X7c(),W7c))){Ixd(a,(X6c(),W6c),UD(Gxd(a,W7c)))}else{throw Adb(new Jed('A target width has to be set if the TargetWidthWidthApproximator should be used.'))}b.Vg()} -function _8b(a,b){var c,d,e;d=new j3b(a);kQb(d,b);pQb(d,(Ywc(),gwc),b);pQb(d,(yCc(),BBc),(Bod(),wod));pQb(d,Rzc,(Rjd(),Njd));h3b(d,(r3b(),m3b));c=new R3b;P3b(c,d);Q3b(c,(qpd(),ppd));e=new R3b;P3b(e,d);Q3b(e,Xod);return d} -function ttc(a){switch(a.g){case 0:return new FKc((RKc(),OKc));case 1:return new aKc;case 2:return new FLc;default:throw Adb(new agb('No implementation is available for the crossing minimizer '+(a.f!=null?a.f:''+a.g)));}} -function THc(a,b){var c,d,e,f,g;a.c[b.p]=true;Rmb(a.a,b);for(g=new Anb(b.j);g.a<g.c.c.length;){f=RD(ynb(g),12);for(d=new l4b(f.b);xnb(d.a)||xnb(d.b);){c=RD(xnb(d.a)?ynb(d.a):ynb(d.b),18);e=UHc(f,c).i;a.c[e.p]||THc(a,e)}}} -function J2c(a){var b,c,d,e,f,g,h;g=0;for(c=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));c.e!=c.i.gc();){b=RD(bMd(c),27);h=b.g;e=b.f;d=$wnd.Math.sqrt(h*h+e*e);g=$wnd.Math.max(d,g);f=J2c(b);g=$wnd.Math.max(f,g)}return g} -function Pod(){Pod=geb;Nod=new Qod('OUTSIDE',0);Lod=new Qod('INSIDE',1);Mod=new Qod('NEXT_TO_PORT_IF_POSSIBLE',2);Kod=new Qod('ALWAYS_SAME_SIDE',3);Jod=new Qod('ALWAYS_OTHER_SAME_SIDE',4);Ood=new Qod('SPACE_EFFICIENT',5)} -function DEd(a,b,c){var d,e,f,h,i,j;d=rEd(a,(e=(bvd(),f=new ACd,f),!!c&&yCd(e,c),e),b);jyd(d,zDd(b,uIe));GEd(b,d);BEd(b,d);HEd(b,d);g=null;h=b;i=wDd(h,'ports');j=new hFd(a,d);dEd(j.a,j.b,i);CEd(a,b,d);xEd(a,b,d);return d} -function bB(a){var b,c;c=-a.a;b=cD(WC(hE,1),zwe,28,15,[43,48,48,58,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&Bwe;b[2]=b[2]+(c/60|0)%10&Bwe;b[4]=b[4]+(c%60/10|0)&Bwe;b[5]=b[5]+c%10&Bwe;return Ihb(b,0,b.length)} -function eB(a){var b;b=cD(WC(hE,1),zwe,28,15,[71,77,84,45,48,48,58,48,48]);if(a<=0){b[3]=43;a=-a}b[4]=b[4]+((a/60|0)/10|0)&Bwe;b[5]=b[5]+(a/60|0)%10&Bwe;b[7]=b[7]+(a%60/10|0)&Bwe;b[8]=b[8]+a%10&Bwe;return Ihb(b,0,b.length)} -function fob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+Zdb(b))}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function uJb(a,b){var c,d,e;e=lve;for(d=new Anb(CIb(b));d.a<d.c.c.length;){c=RD(ynb(d),218);if(c.f&&!a.c[c.c]){a.c[c.c]=true;e=$wnd.Math.min(e,uJb(a,oIb(c,b)))}}a.i[b.d]=a.j;a.g[b.d]=$wnd.Math.min(e,a.j++);return a.g[b.d]} -function vNb(a,b){var c,d,e;for(e=RD(RD(Qc(a.r,b),21),87).Kc();e.Ob();){d=RD(e.Pb(),117);d.e.b=(c=d.b,c.pf((umd(),Gld))?c.ag()==(qpd(),Yod)?-c.Mf().b-Kfb(UD(c.of(Gld))):Kfb(UD(c.of(Gld))):c.ag()==(qpd(),Yod)?-c.Mf().b:0)}} -function CSb(a){var b,c,d,e,f,g,h;c=zRb(a.e);f=ijd(njd(ajd(yRb(a.e)),a.d*a.a,a.c*a.b),-0.5);b=c.a-f.a;e=c.b-f.b;for(h=0;h<a.c;h++){d=b;for(g=0;g<a.d;g++){ARb(a.e,new Uid(d,e,a.a,a.b))&&TPb(a,g,h,false,true);d+=a.a}e+=a.b}} -function H0c(a){var b,c,d,e,f;b=a.a;c=a.b;e=a.c;d=new rjd(c.e.a+c.f.a/2,c.e.b+c.f.b/2);f=new rjd(e.e.a+e.f.a/2,e.e.b+e.f.b/2);Pub(b,d,b.a,b.a.a);Pub(b,f,b.c.b,b.c);tWc(d,RD(ju(b,1),8),a.b.f);tWc(f,RD(ju(b,b.b-2),8),a.c.f)} -function tDd(a){var b,c;c=false;if(ZD(a,211)){c=true;return RD(a,211).a}if(!c){if(ZD(a,263)){b=RD(a,263).a%1==0;if(b){c=true;return sgb(Ofb(RD(a,263).a))}}}throw Adb(new CDd("Id must be a string or an integer: '"+a+"'."))} -function Kde(a,b){var c,d,e,f,g,h;f=null;for(e=new Xde((!a.a&&(a.a=new Zde(a)),a.a));Ude(e);){c=RD(tId(e),58);d=(g=c.Dh(),h=(mYd(g),g.o),!h||!c.Xh(h)?null:Hje(iXd(h),c.Mh(h)));if(d!=null){if(lhb(d,b)){f=c;break}}}return f} -function Rw(a,b,c){var d,e,f,g,h;dk(c,'occurrences');if(c==0){return h=RD(Xv(nd(a.a),b),16),!h?0:h.gc()}g=RD(Xv(nd(a.a),b),16);if(!g){return 0}f=g.gc();if(c>=f){g.$b()}else{e=g.Kc();for(d=0;d<c;d++){e.Pb();e.Qb()}}return f} -function qx(a,b,c){var d,e,f,g;dk(c,'oldCount');dk(0,'newCount');d=RD(Xv(nd(a.a),b),16);if((!d?0:d.gc())==c){dk(0,'count');e=(f=RD(Xv(nd(a.a),b),16),!f?0:f.gc());g=-e;g>0?Hh():g<0&&Rw(a,b,-g);return true}else{return false}} -function YKb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){g=aLb(a,true);b=0;for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(c>0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}else{h=Vvb(SCb(HDb(CDb(_nb(a.a),new oLb),new qLb)))}return h>0?h+a.n.d+a.n.a:0} -function ZKb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){h=Vvb(SCb(HDb(CDb(_nb(a.a),new kLb),new mLb)))}else{g=bLb(a,true);b=0;for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(c>0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}return h>0?h+a.n.b+a.n.c:0} -function UOc(a){var b,c;if(a.c.length!=2){throw Adb(new dgb('Order only allowed for two paths.'))}b=(tFb(0,a.c.length),RD(a.c[0],18));c=(tFb(1,a.c.length),RD(a.c[1],18));if(b.d.i!=c.c.i){a.c.length=0;ZEb(a.c,c);ZEb(a.c,b)}} -function O8c(a,b,c){var d;zyd(c,b.g,b.f);Byd(c,b.i,b.j);for(d=0;d<(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i;d++){O8c(a,RD(QHd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a),d),27),RD(QHd((!c.a&&(c.a=new C5d(J4,c,10,11)),c.a),d),27))}} -function DMb(a,b){var c,d,e,f;f=RD(Vrb(a.b,b),127);c=f.a;for(e=RD(RD(Qc(a.r,b),21),87).Kc();e.Ob();){d=RD(e.Pb(),117);!!d.c&&(c.a=$wnd.Math.max(c.a,QKb(d.c)))}if(c.a>0){switch(b.g){case 2:f.n.c=a.s;break;case 4:f.n.b=a.s;}}} -function ETb(a,b){var c,d,e;c=RD(mQb(b,(yVb(),lVb)),17).a-RD(mQb(a,lVb),17).a;if(c==0){d=ojd(ajd(RD(mQb(a,(JVb(),FVb)),8)),RD(mQb(a,GVb),8));e=ojd(ajd(RD(mQb(b,FVb),8)),RD(mQb(b,GVb),8));return Qfb(d.a*d.b,e.a*e.b)}return c} -function JVc(a,b){var c,d,e;c=RD(mQb(b,(h_c(),X$c)),17).a-RD(mQb(a,X$c),17).a;if(c==0){d=ojd(ajd(RD(mQb(a,(q$c(),RZc)),8)),RD(mQb(a,SZc),8));e=ojd(ajd(RD(mQb(b,RZc),8)),RD(mQb(b,SZc),8));return Qfb(d.a*d.b,e.a*e.b)}return c} -function _0b(a){var b,c;c=new bib;c.a+='e_';b=S0b(a);b!=null&&(c.a+=''+b,c);if(!!a.c&&!!a.d){Zhb((c.a+=' ',c),M3b(a.c));Zhb(Yhb((c.a+='[',c),a.c.i),']');Zhb((c.a+=SAe,c),M3b(a.d));Zhb(Yhb((c.a+='[',c),a.d.i),']')}return c.a} -function ZVc(a){switch(a.g){case 0:return new N_c;case 1:return new V_c;case 2:return new x0c;case 3:return new J0c;default:throw Adb(new agb('No implementation is available for the layout phase '+(a.f!=null?a.f:''+a.g)));}} -function qsd(a,b,c,d,e){var f;f=0;switch(e.g){case 1:f=$wnd.Math.max(0,b.b+a.b-(c.b+d));break;case 3:f=$wnd.Math.max(0,-a.b-d);break;case 2:f=$wnd.Math.max(0,-a.a-d);break;case 4:f=$wnd.Math.max(0,b.a+a.a-(c.a+d));}return f} -function MDd(a,b,c){var d,e,f,g,h;if(c){e=c.a.length;d=new vue(e);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);f=xDd(c,g.a);kIe in f.a||lIe in f.a?yEd(a,f,b):EEd(a,f,b);OGd(RD(Wjb(a.b,uDd(f)),74))}}} -function jXd(a){var b,c;switch(a.b){case -1:{return true}case 0:{c=a.t;if(c>1||c==-1){a.b=-1;return true}else{b=WVd(a);if(!!b&&(nke(),b.lk()==aKe)){a.b=-1;return true}else{a.b=1;return false}}}default:case 1:{return false}}} -function Sqe(a,b){var c,d,e,f;Mqe(a);if(a.c!=0||a.a!=123)throw Adb(new Lqe(TId((Hde(),eJe))));f=b==112;d=a.d;c=phb(a.i,125,d);if(c<0)throw Adb(new Lqe(TId((Hde(),fJe))));e=zhb(a.i,d,c);a.d=c+1;return ite(e,f,(a.e&512)==512)} -function YTb(a){var b,c,d,e,f,g,h;d=a.a.c.length;if(d>0){g=a.c.d;h=a.d.d;e=ijd(ojd(new rjd(h.a,h.b),g),1/(d+1));f=new rjd(g.a,g.b);for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),250);b.d.a=f.a+e.a;b.d.b=f.b+e.b;$id(f,e)}}} -function HXd(a,b){var c,d,e;if(!b){JXd(a,null);zXd(a,null)}else if((b.i&4)!=0){d='[]';for(c=b.c;;c=c.c){if((c.i&4)==0){e=shb((lfb(c),c.o+d));JXd(a,e);zXd(a,e);break}d+='[]'}}else{e=shb((lfb(b),b.o));JXd(a,e);zXd(a,e)}a.hl(b)} -function Bge(a,b,c,d,e){var f,g,h,i;i=Age(a,RD(e,58));if(dE(i)!==dE(e)){h=RD(a.g[c],76);f=oke(b,i);MHd(a,c,Tge(a,c,f));if(Mvd(a.e)){g=fge(a,9,f.Lk(),e,i,d,false);oKd(g,new P3d(a.e,9,a.c,h,f,d,false));pKd(g)}return i}return e} -function AGc(a,b,c){var d,e,f,g,h,i;d=RD(Qc(a.c,b),15);e=RD(Qc(a.c,c),15);f=d.fd(d.gc());g=e.fd(e.gc());while(f.Sb()&&g.Sb()){h=RD(f.Ub(),17);i=RD(g.Ub(),17);if(h!=i){return hgb(h.a,i.a)}}return !f.Ob()&&!g.Ob()?0:f.Ob()?1:-1} -function FHc(a){var b,c,d,e,f,g,h;h=ev(a.c.length);for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),10);g=new _sb;f=a3b(d);for(c=new is(Mr(f.a.Kc(),new ir));gs(c);){b=RD(hs(c),18);b.c.i==b.d.i||Ysb(g,b.d.i)}ZEb(h.c,g)}return h} -function xhd(c,d){var e,f,g;try{g=xs(c.a,d);return g}catch(b){b=zdb(b);if(ZD(b,33)){try{f=Oeb(d,qwe,lve);e=mfb(c.a);if(f>=0&&f<e.length){return e[f]}}catch(a){a=zdb(a);if(!ZD(a,130))throw Adb(a)}return null}else throw Adb(b)}} -function Rvd(a,b){var c,d,e;e=Eee((lke(),jke),a.Dh(),b);if(e){nke();RD(e,69).xk()||(e=zfe(Qee(jke,e)));d=(c=a.Ih(e),RD(c>=0?a.Lh(c,true,true):Qvd(a,e,true),160));return RD(d,220).Wl(b)}else{throw Adb(new agb(KHe+b.xe()+NHe))}} -function _ae(){Tae();var a;if(Sae)return RD(N5d((YSd(),XSd),AKe),2038);RRd(UK,new hde);abe();a=RD(ZD(Xjb((YSd(),XSd),AKe),560)?Xjb(XSd,AKe):new $ae,560);Sae=true;Yae(a);Zae(a);Zjb((hTd(),gTd),a,new cbe);$jb(XSd,AKe,a);return a} -function Vfe(a,b){var c,d,e,f;a.j=-1;if(Mvd(a.e)){c=a.i;f=a.i!=0;LHd(a,b);d=new P3d(a.e,3,a.c,null,b,c,f);e=b.zl(a.e,a.c,null);e=Hge(a,b,e);if(!e){qvd(a.e,d)}else{e.nj(d);e.oj()}}else{LHd(a,b);e=b.zl(a.e,a.c,null);!!e&&e.oj()}} -function HA(a,b){var c,d,e;e=0;d=b[0];if(d>=a.length){return -1}c=(BFb(d,a.length),a.charCodeAt(d));while(c>=48&&c<=57){e=e*10+(c-48);++d;if(d>=a.length){break}c=(BFb(d,a.length),a.charCodeAt(d))}d>b[0]?(b[0]=d):(e=-1);return e} -function mPb(a){var b,c,d,e,f;e=RD(a.a,17).a;f=RD(a.b,17).a;c=e;d=f;b=$wnd.Math.max($wnd.Math.abs(e),$wnd.Math.abs(f));if(e<=0&&e==f){c=0;d=f-1}else{if(e==-b&&f!=b){c=f;d=e;f>=0&&++c}else{c=-f;d=e}}return new Ptd(sgb(c),sgb(d))} -function YPb(a,b,c,d){var e,f,g,h,i,j;for(e=0;e<b.o;e++){f=e-b.j+c;for(g=0;g<b.p;g++){h=g-b.k+d;if((i=f,j=h,i+=a.j,j+=a.k,i>=0&&j>=0&&i<a.o&&j<a.p)&&(!QPb(b,e,g)&&$Pb(a,f,h)||PPb(b,e,g)&&!_Pb(a,f,h))){return true}}}return false} -function jSc(a,b,c){var d,e,f,g,h;g=a.c;h=a.d;f=xjd(cD(WC(l3,1),Nve,8,0,[g.i.n,g.n,g.a])).b;e=(f+xjd(cD(WC(l3,1),Nve,8,0,[h.i.n,h.n,h.a])).b)/2;d=null;g.j==(qpd(),Xod)?(d=new rjd(b+g.i.c.c.a+c,e)):(d=new rjd(b-c,e));hu(a.a,0,d)} -function ozd(a){var b,c,d,e;b=null;for(d=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c)])));gs(d);){c=RD(hs(d),84);e=AGd(c);if(!b){b=e}else if(b!=e){return false}}return true} -function SHd(a,b,c){var d;++a.j;if(b>=a.i)throw Adb(new veb(MIe+b+NIe+a.i));if(c>=a.i)throw Adb(new veb(OIe+c+NIe+a.i));d=a.g[c];if(b!=c){b<c?hib(a.g,b,a.g,b+1,c-b):hib(a.g,c+1,a.g,c,b-c);bD(a.g,b,d);a.Pi(b,d,c);a.Ni()}return d} -function Rc(a,b,c){var d;d=RD(a.c.xc(b),16);if(!d){d=a.ic(b);if(d.Fc(c)){++a.d;a.c.zc(b,d);return true}else{throw Adb(new Deb('New Collection violated the Collection spec'))}}else if(d.Fc(c)){++a.d;return true}else{return false}} -function ngb(a){var b,c,d;if(a<0){return 0}else if(a==0){return 32}else{d=-(a>>16);b=d>>16&16;c=16-b;a=a>>b;d=a-256;b=d>>16&8;c+=b;a<<=b;d=a-qxe;b=d>>16&4;c+=b;a<<=b;d=a-Ove;b=d>>16&2;c+=b;a<<=b;d=a>>14;b=d&~(d>>1);return c+2-b}} -function RSb(a){HSb();var b,c,d,e;GSb=new bnb;FSb=new Tsb;ESb=new bnb;b=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);JSb(b);for(e=new dMd(b);e.e!=e.i.gc();){d=RD(bMd(e),27);if(Wmb(GSb,d,0)==-1){c=new bnb;Rmb(ESb,c);KSb(d,c)}}return ESb} -function sTb(a,b,c){var d,e,f,g;a.a=c.b.d;if(ZD(b,326)){e=IGd(RD(b,74),false,false);f=ssd(e);d=new wTb(a);xgb(f,d);lsd(f,e);b.of((umd(),cld))!=null&&xgb(RD(b.of(cld),75),d)}else{g=RD(b,422);g.rh(g.nh()+a.a.a);g.sh(g.oh()+a.a.b)}} -function hWc(a,b){var c,d,e;e=new bnb;for(d=Sub(b.a,0);d.b!=d.d.c;){c=RD(evb(d),65);c.c.g==a.g&&dE(mQb(c.b,(h_c(),f_c)))!==dE(mQb(c.c,f_c))&&!yDb(new SDb(null,new Swb(e,16)),new IWc(c))&&(ZEb(e.c,c),true)}_mb(e,new KWc);return e} -function fUb(a,b,c){var d,e,f,g;if(ZD(b,153)&&ZD(c,153)){f=RD(b,153);g=RD(c,153);return a.a[f.a][g.a]+a.a[g.a][f.a]}else if(ZD(b,250)&&ZD(c,250)){d=RD(b,250);e=RD(c,250);if(d.a==e.a){return RD(mQb(e.a,(yVb(),lVb)),17).a}}return 0} -function q9b(a,b){var c,d,e,f,g,h,i,j;j=Kfb(UD(mQb(b,(yCc(),fCc))));i=a[0].n.a+a[0].o.a+a[0].d.c+j;for(h=1;h<a.length;h++){d=a[h].n;e=a[h].o;c=a[h].d;f=d.a-c.b-i;f<0&&(d.a-=f);g=b.f;g.a=$wnd.Math.max(g.a,d.a+e.a);i=d.a+e.a+c.c+j}} -function Nad(a,b){var c,d,e,f,g,h;d=RD(RD(Wjb(a.g,b.a),42).a,68);e=RD(RD(Wjb(a.g,b.b),42).a,68);f=d.b;g=e.b;c=Kid(f,g);if(c>=0){return c}h=ejd(ojd(new rjd(g.c+g.b/2,g.d+g.a/2),new rjd(f.c+f.b/2,f.d+f.a/2)));return -(oRb(f,g)-1)*h} -function ysd(a,b,c){var d;FDb(new SDb(null,(!c.a&&(c.a=new C5d(F4,c,6,6)),new Swb(c.a,16))),new Qsd(a,b));FDb(new SDb(null,(!c.n&&(c.n=new C5d(I4,c,1,7)),new Swb(c.n,16))),new Ssd(a,b));d=RD(Gxd(c,(umd(),cld)),75);!!d&&Bjd(d,a,b)} -function Qvd(a,b,c){var d,e,f;f=Eee((lke(),jke),a.Dh(),b);if(f){nke();RD(f,69).xk()||(f=zfe(Qee(jke,f)));e=(d=a.Ih(f),RD(d>=0?a.Lh(d,true,true):Qvd(a,f,true),160));return RD(e,220).Sl(b,c)}else{throw Adb(new agb(KHe+b.xe()+NHe))}} -function WNd(a,b,c,d){var e,f,g,h,i;e=a.d[b];if(e){f=e.g;i=e.i;if(d!=null){for(h=0;h<i;++h){g=RD(f[h],136);if(g.Bi()==c&&pb(d,g.ld())){return g}}}else{for(h=0;h<i;++h){g=RD(f[h],136);if(dE(g.ld())===dE(d)){return g}}}}return null} -function Nee(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new C5d(y7,b,21,17)),b.s);f=null;for(e=0,g=d.i;e<g;++e){c=RD(QHd(d,e),179);switch(yfe(Qee(a,c))){case 4:case 5:case 6:{!f&&(f=new bnb);ZEb(f.c,c);break}}}return !f?(yob(),yob(),vob):f} -function Yib(a,b){var c;if(b<0){throw Adb(new teb('Negative exponent'))}if(b==0){return Kib}else if(b==1||Sib(a,Kib)||Sib(a,Oib)){return a}if(!_ib(a,0)){c=1;while(!_ib(a,c)){++c}return Wib(kjb(c*b),Yib($ib(a,c),b))}return Rjb(a,b)} -function Jnb(a,b){var c,d,e;if(dE(a)===dE(b)){return true}if(a==null||b==null){return false}if(a.length!=b.length){return false}for(c=0;c<a.length;++c){d=a[c];e=b[c];if(!(dE(d)===dE(e)||d!=null&&pb(d,e))){return false}}return true} -function EYb(a){pYb();var b,c,d;this.b=oYb;this.c=(Cmd(),Amd);this.f=(kYb(),jYb);this.a=a;BYb(this,new FYb);uYb(this);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),86);if(!c.d){b=new iYb(cD(WC(bQ,1),rve,86,0,[c]));Rmb(a.a,b)}}} -function U6b(a,b,c){var d,e,f,g,h,i;if(!a||a.c.length==0){return null}f=new VKb(b,!c);for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),72);LKb(f,(i1b(),new D1b(d)))}g=f.i;g.a=(i=f.n,f.e.b+i.d+i.a);g.b=(h=f.n,f.e.a+h.b+h.c);return f} -function d9b(a){var b,c,d,e,f,g,h;h=t2b(a.a);Znb(h,new i9b);c=null;for(e=h,f=0,g=e.length;f<g;++f){d=e[f];if(d.k!=(r3b(),m3b)){break}b=RD(mQb(d,(Ywc(),hwc)),64);if(b!=(qpd(),ppd)&&b!=Xod){continue}!!c&&RD(mQb(c,qwc),15).Fc(d);c=d}} -function wTc(a,b,c){var d,e,f,g,h,i,j;i=(tFb(b,a.c.length),RD(a.c[b],339));Xmb(a,b);if(i.b/2>=c){d=b;j=(i.c+i.a)/2;g=j-c;if(i.c<=j-c){e=new BTc(i.c,g);Qmb(a,d++,e)}h=j+c;if(h<=i.a){f=new BTc(h,i.a);wFb(d,a.c.length);XEb(a.c,d,f)}}} -function mZc(a,b,c){var d,e,f,g,h,i;if(!b.dc()){e=new Yub;for(i=b.Kc();i.Ob();){h=RD(i.Pb(),39);Zjb(a.a,sgb(h.g),sgb(c));for(g=(d=Sub((new dXc(h)).a.d,0),new gXc(d));dvb(g.a);){f=RD(evb(g.a),65).c;Pub(e,f,e.c.b,e.c)}}mZc(a,e,c+1)}} -function Ude(a){var b;if(!a.c&&a.g==null){a.d=a.bj(a.f);WGd(a,a.d);b=a.d}else{if(a.g==null){return true}else if(a.i==0){return false}else{b=RD(a.g[a.i-1],51)}}if(b==a.b&&null.Vm>=null.Um()){tId(a);return Ude(a)}else{return b.Ob()}} -function t_b(a){this.a=a;if(a.c.i.k==(r3b(),m3b)){this.c=a.c;this.d=RD(mQb(a.c.i,(Ywc(),hwc)),64)}else if(a.d.i.k==m3b){this.c=a.d;this.d=RD(mQb(a.d.i,(Ywc(),hwc)),64)}else{throw Adb(new agb('Edge '+a+' is not an external edge.'))}} -function O1d(a,b){var c,d,e;e=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,e,a.b));if(!b){PAd(a,null);Q1d(a,0);P1d(a,null)}else if(b!=a){PAd(a,b.zb);Q1d(a,b.d);c=(d=b.c,d==null?b.zb:d);P1d(a,c==null||lhb(c,b.zb)?null:c)}} -function hj(a,b){var c;this.e=(tm(),Qb(a),tm(),zm(a));this.c=(Qb(b),zm(b));Lb(this.e.Rd().dc()==this.c.Rd().dc());this.d=Uv(this.e);this.b=Uv(this.c);c=YC(jJ,[Nve,rve],[5,1],5,[this.e.Rd().gc(),this.c.Rd().gc()],2);this.a=c;Zi(this)} -function Lz(b){var c=(!Jz&&(Jz=Mz()),Jz);var d=b.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,function(a){return Kz(a,c)});return '"'+d+'"'} -function VEb(a,b,c,d,e,f){var g,h,i,j,k;if(e==0){return}if(dE(a)===dE(c)){a=a.slice(b,b+e);b=0}i=c;for(h=b,j=b+e;h<j;){g=$wnd.Math.min(h+10000,j);e=g-h;k=a.slice(h,g);k.splice(0,0,d,f?e:0);Array.prototype.splice.apply(i,k);h=g;d+=e}} -function VGb(a){FGb();var b,c;this.b=CGb;this.c=EGb;this.g=(wGb(),vGb);this.d=(Cmd(),Amd);this.a=a;IGb(this);for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);!b.a&&gGb(iGb(new jGb,cD(WC(hN,1),rve,60,0,[b])),a);b.e=new Vid(b.d)}} -function yTb(a){var b,c,d,e,f,g;e=a.e.c.length;d=$C(QK,Ize,15,e,0,1);for(g=new Anb(a.e);g.a<g.c.c.length;){f=RD(ynb(g),153);d[f.a]=new Yub}for(c=new Anb(a.c);c.a<c.c.c.length;){b=RD(ynb(c),289);d[b.c.a].Fc(b);d[b.d.a].Fc(b)}return d} -function OMd(a,b){var c,d,e,f,g;c=RD(Ywd(a.a,4),129);g=c==null?0:c.length;if(b>=g)throw Adb(new aMd(b,g));e=c[b];if(g==1){d=null}else{d=$C(d6,IJe,424,g-1,0,1);hib(c,0,d,0,b);f=g-b-1;f>0&&hib(c,b+1,d,b,f)}Bde(a,d);Ade(a,b,e);return e} -function l3d(a){var b,c;if(a.f){while(a.n<a.o){b=RD(!a.j?a.k.Xb(a.n):a.j.$i(a.n),76);c=b.Lk();if(ZD(c,102)&&(RD(c,19).Bb&QHe)!=0&&(!a.e||c.pk()!=C4||c.Lj()!=0)&&b.md()!=null){return true}else{++a.n}}return false}else{return a.n<a.o}} -function Lle(){Lle=geb;Jle=RD(QHd(xYd((Qle(),Ple).qb),6),35);Gle=RD(QHd(xYd(Ple.qb),3),35);Hle=RD(QHd(xYd(Ple.qb),4),35);Ile=RD(QHd(xYd(Ple.qb),5),19);vWd(Jle);vWd(Gle);vWd(Hle);vWd(Ile);Kle=new mob(cD(WC(y7,1),lKe,179,0,[Jle,Gle]))} -function rMb(a,b){var c;this.d=new P2b;this.b=b;this.e=new sjd(b.Lf());c=a.u.Hc((Pod(),Mod));a.u.Hc(Lod)?a.D?(this.a=c&&!b.bg()):(this.a=true):a.u.Hc(Nod)?c?(this.a=!(b.Uf().Kc().Ob()||b.Wf().Kc().Ob())):(this.a=false):(this.a=false)} -function zNb(a,b){var c,d,e,f;c=a.o.a;for(f=RD(RD(Qc(a.r,b),21),87).Kc();f.Ob();){e=RD(f.Pb(),117);e.e.a=(d=e.b,d.pf((umd(),Gld))?d.ag()==(qpd(),ppd)?-d.Mf().a-Kfb(UD(d.of(Gld))):c+Kfb(UD(d.of(Gld))):d.ag()==(qpd(),ppd)?-d.Mf().a:c)}} -function $4b(a,b){var c,d,e,f;c=RD(mQb(a,(yCc(),rAc)),88);f=RD(Gxd(b,GBc),64);e=RD(mQb(a,BBc),101);if(e!=(Bod(),zod)&&e!=Aod){if(f==(qpd(),opd)){f=osd(b,c);f==opd&&(f=vpd(c))}}else{d=W4b(b);d>0?(f=vpd(c)):(f=spd(vpd(c)))}Ixd(b,GBc,f)} -function agc(a,b){var c;b.Ug('Partition preprocessing',1);c=RD(zDb(CDb(EDb(CDb(new SDb(null,new Swb(a.a,16)),new egc),new ggc),new igc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);FDb(c.Oc(),new kgc);b.Vg()} -function Uoc(a,b){var c,d,e,f,g;g=a.j;b.a!=b.b&&_mb(g,new ypc);e=g.c.length/2|0;for(d=0;d<e;d++){f=(tFb(d,g.c.length),RD(g.c[d],113));f.c&&Q3b(f.d,b.a)}for(c=e;c<g.c.length;c++){f=(tFb(c,g.c.length),RD(g.c[c],113));f.c&&Q3b(f.d,b.b)}} -function rLc(a,b,c){var d,e,f;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){f=Jfb(d.a,e.a);f<0?uLc(a,b,c):f>0&&uLc(a,c,b);return f}else if(d.a!=null){uLc(a,b,c);return -1}else if(e.a!=null){uLc(a,c,b);return 1}return 0} -function EVc(a,b){var c,d,e,f,g;e=b.b.b;a.a=$C(QK,Ize,15,e,0,1);a.b=$C(xdb,Hye,28,e,16,1);for(g=Sub(b.b,0);g.b!=g.d.c;){f=RD(evb(g),39);a.a[f.g]=new Yub}for(d=Sub(b.a,0);d.b!=d.d.c;){c=RD(evb(d),65);a.a[c.b.g].Fc(c);a.a[c.c.g].Fc(c)}} -function SJd(a,b){var c,d,e,f;if(a.Pj()){c=a.Ej();f=a.Qj();++a.j;a.qj(c,a.Zi(c,b));d=a.Ij(3,null,b,c,f);if(a.Mj()){e=a.Nj(b,null);if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Jj(d)}}else{_Id(a,b);if(a.Mj()){e=a.Nj(b,null);!!e&&e.oj()}}} -function oLd(a,b,c){var d,e,f;if(a.Pj()){f=a.Qj();KHd(a,b,c);d=a.Ij(3,null,c,b,f);if(a.Mj()){e=a.Nj(c,null);a.Tj()&&(e=a.Uj(c,e));if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Jj(d)}}else{KHd(a,b,c);if(a.Mj()){e=a.Nj(c,null);!!e&&e.oj()}}} -function bge(a,b){var c,d,e,f,g;g=pke(a.e.Dh(),b);e=new YHd;c=RD(a.g,124);for(f=a.i;--f>=0;){d=c[f];g.am(d.Lk())&&WGd(e,d)}!wLd(a,e)&&Mvd(a.e)&&eZd(a,b.Jk()?fge(a,6,b,(yob(),vob),null,-1,false):fge(a,b.tk()?2:1,b,null,null,-1,false))} -function _7b(a,b){var c,d,e,f,g;if(a.a==($uc(),Yuc)){return true}f=b.a.c;c=b.a.c+b.a.b;if(b.j){d=b.A;g=d.c.c.a-d.o.a/2;e=f-(d.n.a+d.o.a);if(e>g){return false}}if(b.q){d=b.C;g=d.c.c.a-d.o.a/2;e=d.n.a-c;if(e>g){return false}}return true} -function bRc(a){WQc();var b,c,d,e,f,g,h;c=new gub;for(e=new Anb(a.e.b);e.a<e.c.c.length;){d=RD(ynb(e),30);for(g=new Anb(d.a);g.a<g.c.c.length;){f=RD(ynb(g),10);h=a.g[f.p];b=RD(cub(c,h),15);if(!b){b=new bnb;dub(c,h,b)}b.Fc(f)}}return c} -function Qzd(a){var b;if((a.Db&64)!=0)return awd(a);b=new Shb(awd(a));b.a+=' (startX: ';Khb(b,a.j);b.a+=', startY: ';Khb(b,a.k);b.a+=', endX: ';Khb(b,a.b);b.a+=', endY: ';Khb(b,a.c);b.a+=', identifier: ';Nhb(b,a.d);b.a+=')';return b.a} -function cWd(a){var b;if((a.Db&64)!=0)return QAd(a);b=new Shb(QAd(a));b.a+=' (ordered: ';Ohb(b,(a.Bb&256)!=0);b.a+=', unique: ';Ohb(b,(a.Bb&512)!=0);b.a+=', lowerBound: ';Lhb(b,a.s);b.a+=', upperBound: ';Lhb(b,a.t);b.a+=')';return b.a} -function uBd(a,b,c,d,e,f,g,h){var i;ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),4);PAd(a,c);a.f=d;DWd(a,e);FWd(a,f);xWd(a,g);EWd(a,false);aWd(a,true);AWd(a,h);_Vd(a,true);$Vd(a,0);a.b=0;bWd(a,1);i=XVd(a,b,null);!!i&&i.oj();kXd(a,false);return a} -function ZAb(a,b){var c,d,e,f;c=RD(Xjb(a.a,b),525);if(!c){d=new oBb(b);e=(gBb(),dBb)?null:d.c;f=zhb(e,0,$wnd.Math.max(0,thb(e,Fhb(46))));nBb(d,ZAb(a,f));(dBb?null:d.c).length==0&&iBb(d,new rBb);$jb(a.a,dBb?null:d.c,d);return d}return c} -function sRb(a,b){var c;a.b=b;a.g=new bnb;c=tRb(a.b);a.e=c;a.f=c;a.c=Heb(TD(mQb(a.b,(YHb(),RHb))));a.a=UD(mQb(a.b,(umd(),Dkd)));a.a==null&&(a.a=1);Kfb(a.a)>1?(a.e*=Kfb(a.a)):(a.f/=Kfb(a.a));uRb(a);vRb(a);rRb(a);pQb(a.b,(tSb(),lSb),a.g)} -function n9b(a,b,c){var d,e,f,g,h,i;d=0;i=c;if(!b){d=c*(a.c.length-1);i*=-1}for(f=new Anb(a);f.a<f.c.c.length;){e=RD(ynb(f),10);pQb(e,(yCc(),Rzc),(Rjd(),Njd));e.o.a=d;for(h=e3b(e,(qpd(),Xod)).Kc();h.Ob();){g=RD(h.Pb(),12);g.n.a=d}d+=i}} -function gZd(a,b,c){var d,e,f,g,h,i;h=a.pl(c);if(h!=c){g=a.g[b];i=h;MHd(a,b,a.Zi(b,i));f=g;a.Ri(b,i,f);if(a.al()){d=c;e=a.Oj(d,null);!RD(h,54).Ph()&&(e=a.Nj(i,e));!!e&&e.oj()}Mvd(a.e)&&eZd(a,a.Ij(9,c,h,b,false));return h}else{return c}} -function rYb(a,b){var c,d,e,f;for(d=new Anb(a.a.a);d.a<d.c.c.length;){c=RD(ynb(d),194);c.g=true}for(f=new Anb(a.a.b);f.a<f.c.c.length;){e=RD(ynb(f),86);e.k=Heb(TD(a.e.Kb(new Ptd(e,b))));e.d.g=e.d.g&Heb(TD(a.e.Kb(new Ptd(e,b))))}return a} -function Rdc(a,b){var c,d;if(a.c.length!=0){if(a.c.length==2){Qdc((tFb(0,a.c.length),RD(a.c[0],10)),(Pnd(),Lnd));Qdc((tFb(1,a.c.length),RD(a.c[1],10)),Mnd)}else{for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),10);Qdc(c,b)}}a.c.length=0}} -function Vnc(a){var b,c,d,e,f;c=(b=RD(mfb(E3),9),new Fsb(b,RD(WEb(b,b.length),9),0));f=RD(mQb(a,(Ywc(),Iwc)),10);if(f){for(e=new Anb(f.j);e.a<e.c.c.length;){d=RD(ynb(e),12);dE(mQb(d,Awc))===dE(a)&&k4b(new l4b(d.b))&&zsb(c,d.j)}}return c} -function CGc(a,b,c){var d,e,f,g,h;if(a.d[c.p]){return}for(e=new is(Mr(a3b(c).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);h=d.d.i;for(g=new is(Mr(Z2b(h).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);f.c.i==b&&(a.a[f.p]=true)}CGc(a,b,h)}a.d[c.p]=true} -function Zwd(a,b){var c,d,e,f,g,h,i;d=ggb(a.Db&254);if(d==1){a.Eb=null}else{f=SD(a.Eb);if(d==2){e=Xwd(a,b);a.Eb=f[e==0?1:0]}else{g=$C(jJ,rve,1,d-1,5,1);for(c=2,h=0,i=0;c<=128;c<<=1){c==b?++h:(a.Db&c)!=0&&(g[i++]=f[h++])}a.Eb=g}}a.Db&=~b} -function rse(a){var b;b=0;switch(a){case 105:b=2;break;case 109:b=8;break;case 115:b=4;break;case 120:b=16;break;case 117:b=32;break;case 119:b=64;break;case 70:b=256;break;case 72:b=128;break;case 88:b=512;break;case 44:b=gwe;}return b} -function Ojb(a,b,c,d,e){var f,g,h,i;if(dE(a)===dE(b)&&d==e){Tjb(a,d,c);return}for(h=0;h<d;h++){g=0;f=a[h];for(i=0;i<e;i++){g=Bdb(Bdb(Ndb(Cdb(f,yxe),Cdb(b[i],yxe)),Cdb(c[h+i],yxe)),Cdb(Ydb(g),yxe));c[h+i]=Ydb(g);g=Udb(g,32)}c[h+e]=Ydb(g)}} -function tRb(a){var b,c,d,e,f,g,h,i,j,k,l;k=0;j=0;e=a.a;h=e.a.gc();for(d=e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),567);b=(c.b&&CRb(c),c.a);l=b.a;g=b.b;k+=l+g;j+=l*g}i=$wnd.Math.sqrt(400*h*j-4*j+k*k)+k;f=2*(100*h-1);if(f==0){return i}return i/f} -function MSc(a,b){if(b.b!=0){isNaN(a.s)?(a.s=Kfb((sFb(b.b!=0),UD(b.a.a.c)))):(a.s=$wnd.Math.min(a.s,Kfb((sFb(b.b!=0),UD(b.a.a.c)))));isNaN(a.c)?(a.c=Kfb((sFb(b.b!=0),UD(b.c.b.c)))):(a.c=$wnd.Math.max(a.c,Kfb((sFb(b.b!=0),UD(b.c.b.c)))))}} -function nzd(a){var b,c,d,e;b=null;for(d=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c)])));gs(d);){c=RD(hs(d),84);e=AGd(c);if(!b){b=vCd(e)}else if(b!=vCd(e)){return true}}return false} -function pLd(a,b){var c,d,e,f;if(a.Pj()){c=a.i;f=a.Qj();LHd(a,b);d=a.Ij(3,null,b,c,f);if(a.Mj()){e=a.Nj(b,null);a.Tj()&&(e=a.Uj(b,e));if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Jj(d)}}else{LHd(a,b);if(a.Mj()){e=a.Nj(b,null);!!e&&e.oj()}}} -function ZQb(a,b){var c,d,e,f;f=rAb(a.a,b.b);if(!f){throw Adb(new dgb('Invalid hitboxes for scanline overlap calculation.'))}e=false;for(d=a.a.a.ec().Kc();d.Ob();){c=RD(d.Pb(),68);if(UQb(b.b,c)){bbd(a.b.a,b.b,c);e=true}else{if(e){break}}}} -function whd(a){var b;if(!a.a){throw Adb(new dgb('IDataType class expected for layout option '+a.f))}b=GId(a.a);if(b==null){throw Adb(new dgb("Couldn't create new instance of property '"+a.f+"'. "+DGe+(lfb(b6),b6.k)+EGe))}return RD(b,423)} -function yvd(a){var b,c,d,e,f;f=a.Ph();if(f){if(f.Vh()){e=Vvd(a,f);if(e!=f){c=a.Fh();d=(b=a.Fh(),b>=0?a.Ah(null):a.Ph().Th(a,-1-b,null,null));a.Bh(RD(e,54),c);!!d&&d.oj();a.vh()&&a.wh()&&c>-1&&qvd(a,new N3d(a,9,c,f,e));return e}}}return f} -function stb(a,b){var c,d,e,f,g;f=a.b.Ce(b);d=(c=a.a.get(f),c==null?$C(jJ,rve,1,0,5,1):c);for(g=0;g<d.length;g++){e=d[g];if(a.b.Be(b,e.ld())){if(d.length==1){d.length=0;Btb(a.a,f)}else{d.splice(g,1)}--a.c;++a.b.g;return e.md()}}return null} -function pWb(a){var b,c,d,e,f,g,h,i;g=0;f=a.f.e;for(d=0;d<f.c.length;++d){h=(tFb(d,f.c.length),RD(f.c[d],153));for(e=d+1;e<f.c.length;++e){i=(tFb(e,f.c.length),RD(f.c[e],153));c=bjd(h.d,i.d);b=c-a.a[h.a][i.a];g+=a.i[h.a][i.a]*b*b}}return g} -function oec(a,b){var c;if(nQb(b,(yCc(),UAc))){return}c=wec(RD(mQb(b,hec),371),RD(mQb(a,UAc),171));pQb(b,hec,c);if(gs(new is(Mr(W2b(b).a.Kc(),new ir)))){return}switch(c.g){case 1:pQb(b,UAc,(cxc(),Zwc));break;case 2:pQb(b,UAc,(cxc(),_wc));}} -function aoc(a,b){var c;Snc(a);a.a=(c=new Ri,FDb(new SDb(null,new Swb(b.d,16)),new zoc(c)),c);Xnc(a,RD(mQb(b.b,(yCc(),CAc)),349));Znc(a);Ync(a);Wnc(a);$nc(a);_nc(a,b);FDb(EDb(new SDb(null,gj(ej(a.b).a)),new poc),new roc);b.a=false;a.a=null} -function B$c(){B$c=geb;r$c=new lGd(REe,(Geb(),false));s$c=new lGd(SEe,7);sgb(0);y$c=new lGd(TEe,sgb(0));v$c=new lGd(UEe,sgb(-1));A$c=(s_c(),r_c);z$c=new lGd(VEe,A$c);u$c=(LZc(),IZc);t$c=new lGd(WEe,u$c);x$c=(A_c(),z_c);w$c=new lGd(XEe,x$c)} -function _Bd(){FBd.call(this,$He,(bvd(),avd));this.p=null;this.a=null;this.f=null;this.n=null;this.g=null;this.c=null;this.i=null;this.j=null;this.d=null;this.b=null;this.e=null;this.k=null;this.o=null;this.s=null;this.q=false;this.r=false} -function aGd(){aGd=geb;_Fd=new bGd(FBe,0);YFd=new bGd('INSIDE_SELF_LOOPS',1);ZFd=new bGd('MULTI_EDGES',2);XFd=new bGd('EDGE_LABELS',3);$Fd=new bGd('PORTS',4);VFd=new bGd('COMPOUND',5);UFd=new bGd('CLUSTERS',6);WFd=new bGd('DISCONNECTED',7)} -function RJd(a,b,c){var d,e,f;if(a.Pj()){f=a.Qj();++a.j;a.qj(b,a.Zi(b,c));d=a.Ij(3,null,c,b,f);if(a.Mj()){e=a.Nj(c,null);if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Jj(d)}}else{++a.j;a.qj(b,a.Zi(b,c));if(a.Mj()){e=a.Nj(c,null);!!e&&e.oj()}}} -function _ib(a,b){var c,d,e;if(b==0){return (a.a[0]&1)!=0}if(b<0){throw Adb(new teb('Negative bit address'))}e=b>>5;if(e>=a.d){return a.e<0}c=a.a[e];b=1<<(b&31);if(a.e<0){d=Uib(a);if(e<d){return false}else d==e?(c=-c):(c=~c)}return (c&b)!=0} -function Zdd(a,b,c,d){var e;RD(c.b,68);RD(c.b,68);RD(d.b,68);RD(d.b,68);e=ojd(ajd(RD(c.b,68).c),RD(d.b,68).c);kjd(e,PQb(RD(c.b,68),RD(d.b,68),e));RD(d.b,68);RD(d.b,68);RD(d.b,68).c.a+e.a;RD(d.b,68).c.b+e.b;RD(d.b,68);Umb(d.a,new ced(a,b,d))} -function V$d(a,b){var c,d,e,f,g,h,i;f=b.e;if(f){c=yvd(f);d=RD(a.g,689);for(g=0;g<a.i;++g){i=d[g];if(h2d(i)==c){e=(!i.d&&(i.d=new XZd(o7,i,1)),i.d);h=RD(c.Mh(jwd(f,f.Cb,f.Db>>16)),15).dd(f);if(h<e.i){return V$d(a,RD(QHd(e,h),89))}}}}return b} -function feb(a,b,c){var d=eeb,h;var e=d[a];var f=e instanceof Array?e[0]:null;if(e&&!f){_=e}else{_=(h=b&&b.prototype,!h&&(h=eeb[b]),ieb(h));_.Sm=c;!b&&(_.Tm=keb);d[a]=_}for(var g=3;g<arguments.length;++g){arguments[g].prototype=_}f&&(_.Rm=f)} -function gs(a){var b;while(!RD(Qb(a.a),51).Ob()){a.d=fs(a);if(!a.d){return false}a.a=RD(a.d.Pb(),51);if(ZD(a.a,37)){b=RD(a.a,37);a.a=b.a;!a.b&&(a.b=new wmb);hmb(a.b,a.d);if(b.b){while(!nmb(b.b)){hmb(a.b,RD(tmb(b.b),51))}}a.d=b.d}}return true} -function xJb(a,b){var c,d,e,f;e=1;b.j=true;f=null;for(d=new Anb(CIb(b));d.a<d.c.c.length;){c=RD(ynb(d),218);if(!a.c[c.c]){a.c[c.c]=true;f=oIb(c,b);if(c.f){e+=xJb(a,f)}else if(!f.j&&c.a==c.e.e-c.d.e){c.f=true;Ysb(a.p,c);e+=xJb(a,f)}}}return e} -function OYb(a){var b,c,d;for(c=new Anb(a.a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);d=(uFb(0),0);if(d>0){!(Dmd(a.a.c)&&b.n.d)&&!(Emd(a.a.c)&&b.n.b)&&(b.g.d+=$wnd.Math.max(0,d/2-0.5));!(Dmd(a.a.c)&&b.n.a)&&!(Emd(a.a.c)&&b.n.c)&&(b.g.a-=d-1)}}} -function c7b(a){var b,c,d,e,f;e=new bnb;f=d7b(a,e);b=RD(mQb(a,(Ywc(),Iwc)),10);if(b){for(d=new Anb(b.j);d.a<d.c.c.length;){c=RD(ynb(d),12);dE(mQb(c,Awc))===dE(a)&&(f=$wnd.Math.max(f,d7b(c,e)))}}e.c.length==0||pQb(a,ywc,f);return f!=-1?e:null} -function rcc(a,b,c){var d,e,f,g,h,i;f=RD(Vmb(b.e,0),18).c;d=f.i;e=d.k;i=RD(Vmb(c.g,0),18).d;g=i.i;h=g.k;e==(r3b(),o3b)?pQb(a,(Ywc(),vwc),RD(mQb(d,vwc),12)):pQb(a,(Ywc(),vwc),f);h==o3b?pQb(a,(Ywc(),wwc),RD(mQb(g,wwc),12)):pQb(a,(Ywc(),wwc),i)} -function ysc(a){var b,c,d;this.c=a;d=RD(mQb(a,(yCc(),rAc)),88);b=Kfb(UD(mQb(a,Tzc)));c=Kfb(UD(mQb(a,oCc)));d==(Cmd(),ymd)||d==zmd||d==Amd?(this.b=b*c):(this.b=1/(b*c));this.j=Kfb(UD(mQb(a,cCc)));this.e=Kfb(UD(mQb(a,bCc)));this.f=a.b.c.length} -function BD(a,b){var c,d,e,f,g;b&=63;c=a.h;d=(c&fxe)!=0;d&&(c|=-1048576);if(b<22){g=c>>b;f=a.m>>b|c<<22-b;e=a.l>>b|a.m<<22-b}else if(b<44){g=d?exe:0;f=c>>b-22;e=a.m>>b-22|c<<44-b}else{g=d?exe:0;f=d?dxe:0;e=c>>b-44}return hD(e&dxe,f&dxe,g&exe)} -function ORb(a){var b,c,d,e,f,g;this.c=new bnb;this.d=a;d=oxe;e=oxe;b=pxe;c=pxe;for(g=Sub(a,0);g.b!=g.d.c;){f=RD(evb(g),8);d=$wnd.Math.min(d,f.a);e=$wnd.Math.min(e,f.b);b=$wnd.Math.max(b,f.a);c=$wnd.Math.max(c,f.b)}this.a=new Uid(d,e,b-d,c-e)} -function Udc(a,b){var c,d,e,f,g,h;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);g.k==(r3b(),n3b)&&Qdc(g,b);for(d=new is(Mr(a3b(g).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);Pdc(c,b)}}}} -function nec(a,b){var c,d,e;b.Ug('Layer constraint preprocessing',1);c=new bnb;e=new Jkb(a.a,0);while(e.b<e.d.gc()){d=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),10));if(mec(d)){kec(d);ZEb(c.c,d);Ckb(e)}}c.c.length==0||pQb(a,(Ywc(),lwc),c);b.Vg()} -function $Hc(a){var b,c;a.e=$C(kE,Pwe,28,a.p.c.length,15,1);a.k=$C(kE,Pwe,28,a.p.c.length,15,1);for(c=new Anb(a.p);c.a<c.c.c.length;){b=RD(ynb(c),10);a.e[b.p]=Kr(new is(Mr(Z2b(b).a.Kc(),new ir)));a.k[b.p]=Kr(new is(Mr(a3b(b).a.Kc(),new ir)))}} -function bIc(a){var b,c,d,e,f,g;e=0;a.q=new bnb;b=new _sb;for(g=new Anb(a.p);g.a<g.c.c.length;){f=RD(ynb(g),10);f.p=e;for(d=new is(Mr(a3b(f).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);Ysb(b,c.d.i)}b.a.Bc(f)!=null;Rmb(a.q,new btb(b));b.a.$b();++e}} -function pPd(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.f>0&&ZD(b,44)){a.a._j();j=RD(b,44);i=j.ld();f=i==null?0:tb(i);g=bOd(a.a,f);c=a.a.d[g];if(c){d=RD(c.g,379);k=c.i;for(h=0;h<k;++h){e=d[h];if(e.Bi()==f&&e.Fb(j)){pPd(a,j);return true}}}}return false} -function Nje(a){var b,c,d,e,f,g,h;b=a.qi(AKe);if(b){h=WD($Nd((!b.b&&(b.b=new SVd((JTd(),FTd),C8,b)),b.b),'settingDelegates'));if(h!=null){c=new bnb;for(e=vhb(h,'\\w+'),f=0,g=e.length;f<g;++f){d=e[f];ZEb(c.c,d)}return c}}return yob(),yob(),vob} -function Ync(a){var b,c,d,e;for(e=RD(Qc(a.a,(Bnc(),ync)),15).Kc();e.Ob();){d=RD(e.Pb(),105);c=(b=Ec(d.k),b.Hc((qpd(),Yod))?b.Hc(Xod)?b.Hc(npd)?b.Hc(ppd)?null:Jnc:Lnc:Knc:Inc);Qnc(a,d,c[0],(joc(),goc),0);Qnc(a,d,c[1],hoc,1);Qnc(a,d,c[2],ioc,1)}} -function Kqc(a,b){var c,d;c=Lqc(b);Oqc(a,b,c);UTc(a.a,RD(mQb(Y2b(b.b),(Ywc(),Lwc)),234));Jqc(a);Iqc(a,b);d=$C(kE,Pwe,28,b.b.j.c.length,15,1);Rqc(a,b,(qpd(),Yod),d,c);Rqc(a,b,Xod,d,c);Rqc(a,b,npd,d,c);Rqc(a,b,ppd,d,c);a.a=null;a.c=null;a.b=null} -function Yyd(a,b,c){switch(b){case 7:!a.e&&(a.e=new Yie(G4,a,7,4));sLd(a.e);!a.e&&(a.e=new Yie(G4,a,7,4));YGd(a.e,RD(c,16));return;case 8:!a.d&&(a.d=new Yie(G4,a,8,5));sLd(a.d);!a.d&&(a.d=new Yie(G4,a,8,5));YGd(a.d,RD(c,16));return;}xyd(a,b,c)} -function Rt(a,b){var c,d,e,f,g;if(dE(b)===dE(a)){return true}if(!ZD(b,15)){return false}g=RD(b,15);if(a.gc()!=g.gc()){return false}f=g.Kc();for(d=a.Kc();d.Ob();){c=d.Pb();e=f.Pb();if(!(dE(c)===dE(e)||c!=null&&pb(c,e))){return false}}return true} -function jac(a,b){var c,d,e,f;f=RD(zDb(EDb(EDb(new SDb(null,new Swb(b.b,16)),new pac),new rac),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);f.Jc(new tac);c=0;for(e=f.Kc();e.Ob();){d=RD(e.Pb(),12);d.p==-1&&iac(a,d,c++)}} -function KDc(a){switch(a.g){case 0:return new iQc;case 1:return new DNc;case 2:return new TNc;case 3:return new aRc;case 4:return new yOc;default:throw Adb(new agb('No implementation is available for the node placer '+(a.f!=null?a.f:''+a.g)));}} -function Qtc(a){switch(a.g){case 0:return new UFc;case 1:return new NFc;case 2:return new cGc;case 3:return new jGc;case 4:return new YFc;default:throw Adb(new agb('No implementation is available for the cycle breaker '+(a.f!=null?a.f:''+a.g)));}} -function I_c(a,b){var c,d,e,f,g;d=new Yub;Pub(d,b,d.c.b,d.c);do{c=(sFb(d.b!=0),RD(Wub(d,d.a.a),39));a.b[c.g]=1;for(f=Sub(c.d,0);f.b!=f.d.c;){e=RD(evb(f),65);g=e.c;a.b[g.g]==1?Mub(a.a,e):a.b[g.g]==2?(a.b[g.g]=1):Pub(d,g,d.c.b,d.c)}}while(d.b!=0)} -function $$b(a,b,c){var d;d=null;!!b&&(d=b.d);k_b(a,new eZb(b.n.a-d.b+c.a,b.n.b-d.d+c.b));k_b(a,new eZb(b.n.a-d.b+c.a,b.n.b+b.o.b+d.a+c.b));k_b(a,new eZb(b.n.a+b.o.a+d.c+c.a,b.n.b-d.d+c.b));k_b(a,new eZb(b.n.a+b.o.a+d.c+c.a,b.n.b+b.o.b+d.a+c.b))} -function iac(a,b,c){var d,e,f;b.p=c;for(f=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(b),new _3b(b)])));gs(f);){d=RD(hs(f),12);d.p==-1&&iac(a,d,c)}if(b.i.k==(r3b(),o3b)){for(e=new Anb(b.i.j);e.a<e.c.c.length;){d=RD(ynb(e),12);d!=b&&d.p==-1&&iac(a,d,c)}}} -function cRc(a,b){var c,d,e,f,g,h;d=new gub;g=Xx(new mob(a.g));for(f=g.a.ec().Kc();f.Ob();){e=RD(f.Pb(),10);if(!e){b.bh('There are no classes in a balanced layout.');break}h=a.j[e.p];c=RD(cub(d,h),15);if(!c){c=new bnb;dub(d,h,c)}c.Fc(e)}return d} -function RTc(a){var b,c,d,e,f;e=RD(zDb(BDb(ODb(a)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);d=Hze;if(e.gc()>=2){c=e.Kc();b=UD(c.Pb());while(c.Ob()){f=b;b=UD(c.Pb());d=$wnd.Math.min(d,(uFb(b),b)-(uFb(f),f))}}return d} -function iWc(a,b){var c,d,e;e=new bnb;for(d=Sub(b.a,0);d.b!=d.d.c;){c=RD(evb(d),65);c.b.g==a.g&&!lhb(c.b.c,IEe)&&dE(mQb(c.b,(h_c(),f_c)))!==dE(mQb(c.c,f_c))&&!yDb(new SDb(null,new Swb(e,16)),new OWc(c))&&(ZEb(e.c,c),true)}_mb(e,new QWc);return e} -function $u(a,b){var c,d,e;if(dE(b)===dE(Qb(a))){return true}if(!ZD(b,15)){return false}d=RD(b,15);e=a.gc();if(e!=d.gc()){return false}if(ZD(d,59)){for(c=0;c<e;c++){if(!Hb(a.Xb(c),d.Xb(c))){return false}}return true}else{return Cr(a.Kc(),d.Kc())}} -function Scc(a,b,c,d,e,f){var g,h,i,j;h=!QDb(CDb(a.Oc(),new PAb(new Wcc))).Bd((xDb(),wDb));g=a;f==(Cmd(),Bmd)&&(g=hv(g));for(j=g.Kc();j.Ob();){i=RD(j.Pb(),72);i.n.a=b.a;h?(i.n.b=b.b+(d.b-i.o.b)/2):e?(i.n.b=b.b):(i.n.b=b.b+d.b-i.o.b);b.a+=i.o.a+c}} -function Tgc(a,b){var c,d,e,f,g;b.Ug('Port side processing',1);for(g=new Anb(a.a);g.a<g.c.c.length;){e=RD(ynb(g),10);Ugc(e)}for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);Ugc(e)}}b.Vg()} -function bEd(a,b,c){var d,e,f,g,h,i,j;if(c){f=c.a.length;d=new vue(f);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);i=xDd(c,g.a);if(i){j=FGd(zDd(i,hIe),b);Zjb(a.f,j,i);e=uIe in i.a;e&&jyd(j,zDd(i,uIe));GEd(i,j);HEd(i,j)}}}} -function MWb(a,b,c){var d,e,f,g,h;h=c;!h&&(h=Nqd(new Oqd,0));h.Ug(EAe,1);cXb(a.c,b);g=H_b(a.a,b);if(g.gc()==1){OWb(RD(g.Xb(0),36),h)}else{f=1/g.gc();for(e=g.Kc();e.Ob();){d=RD(e.Pb(),36);if(c.$g()){return}OWb(d,h.eh(f))}}F_b(a.a,g,b);PWb(b);h.Vg()} -function Hic(a,b,c){var d,e,f,g,h;e=a.f;!e&&(e=RD(a.a.a.ec().Kc().Pb(),60));Iic(e,b,c);if(a.a.a.gc()==1){return}d=b*c;for(g=a.a.a.ec().Kc();g.Ob();){f=RD(g.Pb(),60);if(f!=e){h=$jc(f);if(h.f.d){f.d.d+=d+Tye;f.d.a-=d+Tye}else h.f.a&&(f.d.a-=d+Tye)}}} -function kTb(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;g=c-a;h=d-b;f=$wnd.Math.atan2(g,h);i=f+Gze;j=f-Gze;k=e*$wnd.Math.sin(i)+a;m=e*$wnd.Math.cos(i)+b;l=e*$wnd.Math.sin(j)+a;n=e*$wnd.Math.cos(j)+b;return dv(cD(WC(l3,1),Nve,8,0,[new rjd(k,m),new rjd(l,n)]))} -function mQc(a,b,c,d){var e,f,g,h,i,j,k,l;e=c;k=b;f=k;do{f=a.a[f.p];h=(l=a.g[f.p],Kfb(a.p[l.p])+Kfb(a.d[f.p])-f.d.d);i=pQc(f,d);if(i){g=(j=a.g[i.p],Kfb(a.p[j.p])+Kfb(a.d[i.p])+i.o.b+i.d.a);e=$wnd.Math.min(e,h-(g+bFc(a.k,f,i)))}}while(k!=f);return e} -function nQc(a,b,c,d){var e,f,g,h,i,j,k,l;e=c;k=b;f=k;do{f=a.a[f.p];g=(l=a.g[f.p],Kfb(a.p[l.p])+Kfb(a.d[f.p])+f.o.b+f.d.a);i=oQc(f,d);if(i){h=(j=a.g[i.p],Kfb(a.p[j.p])+Kfb(a.d[i.p])-i.d.d);e=$wnd.Math.min(e,h-(g+bFc(a.k,f,i)))}}while(k!=f);return e} -function r9c(a,b){var c;b.Ug('Equal Whitespace Eliminator',1);if(Hxd(a,(X6c(),V6c))){w9c(RD(Gxd(a,V6c),15),Kfb(UD(Gxd(a,O6c))),(c=Kfb(UD(Gxd(a,M6c))),Kfb(UD(Gxd(a,(X7c(),Q7c)))),c))}else{throw Adb(new Jed('The graph does not contain rows.'))}b.Vg()} -function Gxd(a,b){var c,d;d=(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),$Nd(a.o,b));if(d!=null){return d}c=b.Sg();ZD(c,4)&&(c==null?(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),jOd(a.o,b)):(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),fOd(a.o,b,c)),a);return c} -function dod(){dod=geb;Xnd=new eod('H_LEFT',0);Wnd=new eod('H_CENTER',1);Znd=new eod('H_RIGHT',2);cod=new eod('V_TOP',3);bod=new eod('V_CENTER',4);aod=new eod('V_BOTTOM',5);$nd=new eod('INSIDE',6);_nd=new eod('OUTSIDE',7);Ynd=new eod('H_PRIORITY',8)} -function jJb(a,b){var c,d,e,f,g,h,i;if(!b.f){throw Adb(new agb('The input edge is not a tree edge.'))}f=null;e=lve;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),218);h=c.d;i=c.e;if(oJb(a,h,b)&&!oJb(a,i,b)){g=i.e-h.e-c.a;if(g<e){e=g;f=c}}}return f} -function sWb(a){var b,c,d,e,f,g;if(a.f.e.c.length<=1){return}b=0;e=pWb(a);c=oxe;do{b>0&&(e=c);for(g=new Anb(a.f.e);g.a<g.c.c.length;){f=RD(ynb(g),153);if(Heb(TD(mQb(f,(dWb(),WVb))))){continue}d=oWb(a,f);$id(hjd(f.d),d)}c=pWb(a)}while(!rWb(a,b++,e,c))} -function Ymc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),72);e=c.n;a.a==(enc(),bnc)||a.i==(qpd(),Xod)?(e.a=f):a.a==cnc||a.i==(qpd(),ppd)?(e.a=f+a.j.a-c.o.a):(e.a=f+(a.j.a-c.o.a)/2);e.b=g;$id(e,b);g+=c.o.b+a.e}} -function BEd(a,b){var c,d,e,f,g,h,i,j,k,l;j=a;i=yDd(j,'individualSpacings');if(i){d=Hxd(b,(umd(),amd));g=!d;if(g){e=new dtd;Ixd(b,amd,e)}h=RD(Gxd(b,amd),385);l=i;f=null;!!l&&(f=(k=oC(l,$C(qJ,Nve,2,0,6,1)),new CC(l,k)));if(f){c=new dFd(l,h);xgb(f,c)}}} -function FEd(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=null;l=a;k=null;if(DIe in l.a||EIe in l.a||nIe in l.a){j=null;m=EGd(b);g=yDd(l,DIe);c=new gFd(m);cEd(c.a,g);h=yDd(l,EIe);d=new AFd(m);nEd(d.a,h);f=wDd(l,nIe);e=new DFd(m);j=(oEd(e.a,f),f);k=j}i=k;return i} -function ox(a,b){var c,d,e;if(b===a){return true}if(ZD(b,552)){e=RD(b,849);if(a.a.d!=e.a.d||Ih(a).gc()!=Ih(e).gc()){return false}for(d=Ih(e).Kc();d.Ob();){c=RD(d.Pb(),425);if(Qw(a,c.a.ld())!=RD(c.a.md(),16).gc()){return false}}return true}return false} -function sPb(a){var b,c,d,e;d=RD(a.a,17).a;e=RD(a.b,17).a;b=d;c=e;if(d==0&&e==0){c-=1}else{if(d==-1&&e<=0){b=0;c-=2}else{if(d<=0&&e>0){b-=1;c-=1}else{if(d>=0&&e<0){b+=1;c+=1}else{if(d>0&&e>=0){b-=1;c+=1}else{b+=1;c-=1}}}}}return new Ptd(sgb(b),sgb(c))} -function nNc(a,b){if(a.c<b.c){return -1}else if(a.c>b.c){return 1}else if(a.b<b.b){return -1}else if(a.b>b.b){return 1}else if(a.a!=b.a){return tb(a.a)-tb(b.a)}else if(a.d==(sNc(),rNc)&&b.d==qNc){return -1}else if(a.d==qNc&&b.d==rNc){return 1}return 0} -function ARc(a,b){var c,d,e,f,g;f=b.a;f.c.i==b.b?(g=f.d):(g=f.c);f.c.i==b.b?(d=f.c):(d=f.d);e=lQc(a.a,g,d);if(e>0&&e<Hze){c=mQc(a.a,d.i,e,a.c);rQc(a.a,d.i,-c);return c>0}else if(e<0&&-e<Hze){c=nQc(a.a,d.i,-e,a.c);rQc(a.a,d.i,c);return c>0}return false} -function X9c(a,b,c,d){var e,f,g,h,i,j,k,l;e=(b-a.d)/a.c.c.length;f=0;a.a+=c;a.d=b;for(l=new Anb(a.c);l.a<l.c.c.length;){k=RD(ynb(l),27);j=k.g;i=k.f;Dyd(k,k.i+f*e);Eyd(k,k.j+d*c);Cyd(k,k.g+e);Ayd(k,a.a);++f;h=k.g;g=k.f;Jsd(k,new rjd(h,g),new rjd(j,i))}} -function vAd(a){var b,c,d,e,f,g,h;if(a==null){return null}h=a.length;e=(h+1)/2|0;g=$C(gE,YHe,28,e,15,1);h%2!=0&&(g[--e]=JAd((BFb(h-1,a.length),a.charCodeAt(h-1))));for(c=0,d=0;c<e;++c){b=JAd(ihb(a,d++));f=JAd(ihb(a,d++));g[c]=(b<<4|f)<<24>>24}return g} -function Bfb(a){if(a.ze()){var b=a.c;b.Ae()?(a.o='['+b.n):!b.ze()?(a.o='[L'+b.xe()+';'):(a.o='['+b.xe());a.b=b.we()+'[]';a.k=b.ye()+'[]';return}var c=a.j;var d=a.d;d=d.split('/');a.o=Efb('.',[c,Efb('$',d)]);a.b=Efb('.',[c,Efb('.',d)]);a.k=d[d.length-1]} -function hJb(a,b){var c,d,e,f,g;g=null;for(f=new Anb(a.e.a);f.a<f.c.c.length;){e=RD(ynb(f),125);if(e.b.a.c.length==e.g.a.c.length){d=e.e;g=sJb(e);for(c=e.e-RD(g.a,17).a+1;c<e.e+RD(g.b,17).a;c++){b[c]<b[d]&&(d=c)}if(b[d]<b[e.e]){--b[e.e];++b[d];e.e=d}}}} -function qQc(a){var b,c,d,e,f,g,h,i;e=oxe;d=pxe;for(c=new Anb(a.e.b);c.a<c.c.c.length;){b=RD(ynb(c),30);for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),10);i=Kfb(a.p[f.p]);h=i+Kfb(a.b[a.g[f.p].p]);e=$wnd.Math.min(e,i);d=$wnd.Math.max(d,h)}}return d-e} -function nSd(a){gSd();var b,c,d,e;d=qhb(a,Fhb(35));b=d==-1?a:(AFb(0,d,a.length),a.substr(0,d));c=d==-1?null:(BFb(d+1,a.length+1),a.substr(d+1));e=KSd(fSd,b);if(!e){e=ASd(b);LSd(fSd,b,e);c!=null&&(e=hSd(e,c))}else c!=null&&(e=hSd(e,(uFb(c),c)));return e} -function Ree(a,b,c,d){var e,f,g,h,i,j;i=null;e=Fee(a,b);for(h=0,j=e.gc();h<j;++h){f=RD(e.Xb(h),179);if(lhb(d,Afe(Qee(a,f)))){g=Bfe(Qee(a,f));if(c==null){if(g==null){return f}else !i&&(i=f)}else if(lhb(c,g)){return f}else g==null&&!i&&(i=f)}}return null} -function See(a,b,c,d){var e,f,g,h,i,j;i=null;e=Gee(a,b);for(h=0,j=e.gc();h<j;++h){f=RD(e.Xb(h),179);if(lhb(d,Afe(Qee(a,f)))){g=Bfe(Qee(a,f));if(c==null){if(g==null){return f}else !i&&(i=f)}else if(lhb(c,g)){return f}else g==null&&!i&&(i=f)}}return null} -function Pge(a,b,c){var d,e,f,g,h,i;g=new YHd;h=pke(a.e.Dh(),b);d=RD(a.g,124);nke();if(RD(b,69).xk()){for(f=0;f<a.i;++f){e=d[f];h.am(e.Lk())&&WGd(g,e)}}else{for(f=0;f<a.i;++f){e=d[f];if(h.am(e.Lk())){i=e.md();WGd(g,c?Bge(a,b,f,g.i,i):i)}}}return WHd(g)} -function Kje(a){var b,c,d,e,f,g,h;if(a){b=a.qi(AKe);if(b){g=WD($Nd((!b.b&&(b.b=new SVd((JTd(),FTd),C8,b)),b.b),'conversionDelegates'));if(g!=null){h=new bnb;for(d=vhb(g,'\\w+'),e=0,f=d.length;e<f;++e){c=d[e];ZEb(h.c,c)}return h}}}return yob(),yob(),vob} -function WXb(a,b){var c,d,e,f,g,h,i,j;g=b==1?MXb:LXb;for(f=g.a.ec().Kc();f.Ob();){e=RD(f.Pb(),88);for(i=RD(Qc(a.f.c,e),21).Kc();i.Ob();){h=RD(i.Pb(),42);d=RD(h.b,86);j=RD(h.a,194);c=j.c;switch(e.g){case 2:case 1:d.g.d+=c;break;case 4:case 3:d.g.c+=c;}}}} -function idc(a,b){var c,d,e,f,g;c=new Zrb(ZW);for(e=(btc(),cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc])),f=0,g=e.length;f<g;++f){d=e[f];Xrb(c,d,new bnb)}FDb(GDb(CDb(EDb(new SDb(null,new Swb(a.b,16)),new ydc),new Adc),new Cdc(b)),new Edc(c));return c} -function n3c(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(f=b.Kc();f.Ob();){e=RD(f.Pb(),27);k=e.i+e.g/2;m=e.j+e.f/2;i=a.f;g=i.i+i.g/2;h=i.j+i.f/2;j=k-g;l=m-h;d=$wnd.Math.sqrt(j*j+l*l);j*=a.e/d;l*=a.e/d;if(c){k-=j;m-=l}else{k+=j;m+=l}Dyd(e,k-e.g/2);Eyd(e,m-e.f/2)}} -function vte(a){var b,c,d;if(a.c)return;if(a.b==null)return;for(b=a.b.length-4;b>=0;b-=2){for(c=0;c<=b;c+=2){if(a.b[c]>a.b[c+2]||a.b[c]===a.b[c+2]&&a.b[c+1]>a.b[c+3]){d=a.b[c+2];a.b[c+2]=a.b[c];a.b[c]=d;d=a.b[c+3];a.b[c+3]=a.b[c+1];a.b[c+1]=d}}}a.c=true} -function nKc(a,b){var c,d,e,f,g,h,i,j,k;j=-1;k=0;for(g=a,h=0,i=g.length;h<i;++h){f=g[h];c=new hrc(j==-1?a[0]:a[j],b,(lDc(),kDc));for(d=0;d<f.length;d++){for(e=d+1;e<f.length;e++){nQb(f[d],(Ywc(),zwc))&&nQb(f[e],zwc)&&crc(c,f[d],f[e])>0&&++k}}++j}return k} -function awd(a){var b,c;c=new dib(nfb(a.Rm));c.a+='@';Zhb(c,(b=tb(a)>>>0,b.toString(16)));if(a.Vh()){c.a+=' (eProxyURI: ';Yhb(c,a._h());if(a.Kh()){c.a+=' eClass: ';Yhb(c,a.Kh())}c.a+=')'}else if(a.Kh()){c.a+=' (eClass: ';Yhb(c,a.Kh());c.a+=')'}return c.a} -function KGb(a){var b,c,d,e;if(a.e){throw Adb(new dgb((lfb(lN),lye+lN.k+mye)))}a.d==(Cmd(),Amd)&&JGb(a,ymd);for(c=new Anb(a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),316);b.g=b.i}for(e=new Anb(a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);d.i=pxe}a.b.cf(a);return a} -function rUc(a,b){var c,d,e,f,g;if(b<2*a.b){throw Adb(new agb('The knot vector must have at least two time the dimension elements.'))}a.f=1;for(e=0;e<a.b;e++){Rmb(a.e,0)}g=b+1-2*a.b;c=g;for(f=1;f<g;f++){Rmb(a.e,f/c)}if(a.d){for(d=0;d<a.b;d++){Rmb(a.e,1)}}} -function AEd(a,b){var c,d,e,f,g,h,i,j,k;j=b;k=RD(lp(Co(a.i),j),27);if(!k){e=zDd(j,uIe);h="Unable to find elk node for json object '"+e;i=h+"' Panic!";throw Adb(new CDd(i))}f=wDd(j,'edges');c=new KEd(a,k);MDd(c.a,c.b,f);g=wDd(j,iIe);d=new VEd(a);XDd(d.a,g)} -function XNd(a,b,c,d){var e,f,g,h,i;if(d!=null){e=a.d[b];if(e){f=e.g;i=e.i;for(h=0;h<i;++h){g=RD(f[h],136);if(g.Bi()==c&&pb(d,g.ld())){return h}}}}else{e=a.d[b];if(e){f=e.g;i=e.i;for(h=0;h<i;++h){g=RD(f[h],136);if(dE(g.ld())===dE(d)){return h}}}}return -1} -function N5d(a,b){var c,d,e;c=b==null?Wd(qtb(a.f,null)):Ktb(a.i,b);if(ZD(c,241)){e=RD(c,241);e.zi()==null&&undefined;return e}else if(ZD(c,507)){d=RD(c,2037);e=d.a;!!e&&(e.yb==null?undefined:b==null?rtb(a.f,null,e):Ltb(a.i,b,e));return e}else{return null}} -function Hqe(a){Gqe();var b,c,d,e,f,g,h;if(a==null)return null;e=a.length;if(e%2!=0)return null;b=Ahb(a);f=e/2|0;c=$C(gE,YHe,28,f,15,1);for(d=0;d<f;d++){g=Eqe[b[d*2]];if(g==-1)return null;h=Eqe[b[d*2+1]];if(h==-1)return null;c[d]=(g<<4|h)<<24>>24}return c} -function cNb(a,b,c){var d,e,f;e=RD(Vrb(a.i,b),314);if(!e){e=new UKb(a.d,b,c);Wrb(a.i,b,e);if(jMb(b)){tKb(a.a,b.c,b.b,e)}else{f=iMb(b);d=RD(Vrb(a.p,f),252);switch(f.g){case 1:case 3:e.j=true;cLb(d,b.b,e);break;case 4:case 2:e.k=true;cLb(d,b.c,e);}}}return e} -function Ndc(a,b){var c,d,e,f,g,h,i,j,k;i=ev(a.c-a.b&a.a.length-1);j=null;k=null;for(f=new Kmb(a);f.a!=f.b;){e=RD(Imb(f),10);c=(h=RD(mQb(e,(Ywc(),vwc)),12),!h?null:h.i);d=(g=RD(mQb(e,wwc),12),!g?null:g.i);if(j!=c||k!=d){Rdc(i,b);j=c;k=d}ZEb(i.c,e)}Rdc(i,b)} -function Rge(a,b,c,d){var e,f,g,h,i,j;h=new YHd;i=pke(a.e.Dh(),b);e=RD(a.g,124);nke();if(RD(b,69).xk()){for(g=0;g<a.i;++g){f=e[g];i.am(f.Lk())&&WGd(h,f)}}else{for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())){j=f.md();WGd(h,d?Bge(a,b,g,h.i,j):j)}}}return XHd(h,c)} -function oHc(a,b){var c,d,e,f,g,h,i,j;e=a.b[b.p];if(e>=0){return e}else{f=1;for(h=new Anb(b.j);h.a<h.c.c.length;){g=RD(ynb(h),12);for(d=new Anb(g.g);d.a<d.c.c.length;){c=RD(ynb(d),18);j=c.d.i;if(b!=j){i=oHc(a,j);f=$wnd.Math.max(f,i+1)}}}nHc(a,b,f);return f}} -function wHc(a,b){var c,d,e,f,g,h,i,j;e=a.b[b.p];if(e>=0){return e}else{f=1;for(h=new Anb(b.j);h.a<h.c.c.length;){g=RD(ynb(h),12);for(d=new Anb(g.e);d.a<d.c.c.length;){c=RD(ynb(d),18);j=c.c.i;if(b!=j){i=wHc(a,j);f=$wnd.Math.max(f,i+1)}}}vHc(a,b,f);return f}} -function wLc(a,b,c){var d,e,f;for(d=1;d<a.c.length;d++){f=(tFb(d,a.c.length),RD(a.c[d],10));e=d;while(e>0&&b.Ne((tFb(e-1,a.c.length),RD(a.c[e-1],10)),f)>0){$mb(a,e,(tFb(e-1,a.c.length),RD(a.c[e-1],10)));--e}tFb(e,a.c.length);a.c[e]=f}c.a=new Tsb;c.b=new Tsb} -function yhd(a,b,c){var d,e,f,g,h,i,j,k;k=(d=RD(b.e&&b.e(),9),new Fsb(d,RD(WEb(d,d.length),9),0));i=vhb(c,'[\\[\\]\\s,]+');for(f=i,g=0,h=f.length;g<h;++g){e=f[g];if(Dhb(e).length==0){continue}j=xhd(a,e);if(j==null){return null}else{zsb(k,RD(j,22))}}return k} -function tse(a){var b,c,d,e;e=a.length;b=null;for(d=0;d<e;d++){c=(BFb(d,a.length),a.charCodeAt(d));if(qhb('.*+?{[()|\\^$',Fhb(c))>=0){if(!b){b=new Rhb;d>0&&Nhb(b,(AFb(0,d,a.length),a.substr(0,d)))}b.a+='\\';Jhb(b,c&Bwe)}else !!b&&Jhb(b,c&Bwe)}return b?b.a:a} -function MYb(a){var b,c,d;for(c=new Anb(a.a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);d=(uFb(0),0);if(d>0){!(Dmd(a.a.c)&&b.n.d)&&!(Emd(a.a.c)&&b.n.b)&&(b.g.d-=$wnd.Math.max(0,d/2-0.5));!(Dmd(a.a.c)&&b.n.a)&&!(Emd(a.a.c)&&b.n.c)&&(b.g.a+=$wnd.Math.max(0,d-1))}}} -function Ydc(a,b,c){var d,e;if((a.c-a.b&a.a.length-1)==2){if(b==(qpd(),Yod)||b==Xod){Odc(RD(omb(a),15),(Pnd(),Lnd));Odc(RD(omb(a),15),Mnd)}else{Odc(RD(omb(a),15),(Pnd(),Mnd));Odc(RD(omb(a),15),Lnd)}}else{for(e=new Kmb(a);e.a!=e.b;){d=RD(Imb(e),15);Odc(d,c)}}} -function HGd(a,b){var c,d,e,f,g,h,i;e=cv(new QGd(a));h=new Jkb(e,e.c.length);f=cv(new QGd(b));i=new Jkb(f,f.c.length);g=null;while(h.b>0&&i.b>0){c=(sFb(h.b>0),RD(h.a.Xb(h.c=--h.b),27));d=(sFb(i.b>0),RD(i.a.Xb(i.c=--i.b),27));if(c==d){g=c}else{break}}return g} -function Dmc(a,b,c){var d,e,f,g;if(Hmc(a,b)>Hmc(a,c)){d=b3b(c,(qpd(),Xod));a.d=d.dc()?0:L3b(RD(d.Xb(0),12));g=b3b(b,ppd);a.b=g.dc()?0:L3b(RD(g.Xb(0),12))}else{e=b3b(c,(qpd(),ppd));a.d=e.dc()?0:L3b(RD(e.Xb(0),12));f=b3b(b,Xod);a.b=f.dc()?0:L3b(RD(f.Xb(0),12))}} -function wNb(a,b){var c,d,e,f;c=a.o.a;for(f=RD(RD(Qc(a.r,b),21),87).Kc();f.Ob();){e=RD(f.Pb(),117);e.e.a=c*Kfb(UD(e.b.of(sNb)));e.e.b=(d=e.b,d.pf((umd(),Gld))?d.ag()==(qpd(),Yod)?-d.Mf().b-Kfb(UD(d.of(Gld))):Kfb(UD(d.of(Gld))):d.ag()==(qpd(),Yod)?-d.Mf().b:0)}} -function Mhc(a,b){var c,d,e,f;b.Ug('Self-Loop pre-processing',1);for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),10);if(pnc(c)){e=(f=new onc(c),pQb(c,(Ywc(),Pwc),f),lnc(f),f);FDb(GDb(EDb(new SDb(null,new Swb(e.d,16)),new Phc),new Rhc),new Thc);Khc(e)}}b.Vg()} -function xsc(a){var b,c,d,e,f,g,h,i;b=true;e=null;f=null;j:for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),10);for(d=new is(Mr(Z2b(h).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(!!e&&e!=h){b=false;break j}e=h;g=c.c.i;if(!!f&&f!=g){b=false;break j}f=g}}return b} -function mTc(a,b,c){var d,e,f,g,h,i;f=-1;h=-1;for(g=0;g<b.c.length;g++){e=(tFb(g,b.c.length),RD(b.c[g],339));if(e.c>a.c){break}else if(e.a>=a.s){f<0&&(f=g);h=g}}i=(a.s+a.c)/2;if(f>=0){d=lTc(a,b,f,h);i=yTc((tFb(d,b.c.length),RD(b.c[d],339)));wTc(b,d,c)}return i} -function _Ad(a,b,c){var d,e,f,g,h,i,j;g=(f=new pVd,f);nVd(g,(uFb(b),b));j=(!g.b&&(g.b=new SVd((JTd(),FTd),C8,g)),g.b);for(i=1;i<c.length;i+=2){fOd(j,c[i-1],c[i])}d=(!a.Ab&&(a.Ab=new C5d(f7,a,0,3)),a.Ab);for(h=0;h<0;++h){e=jVd(RD(QHd(d,d.i-1),598));d=e}WGd(d,g)} -function DSb(a,b,c){var d,e,f;jQb.call(this,new bnb);this.a=b;this.b=c;this.e=a;d=(a.b&&CRb(a),a.a);this.d=BSb(d.a,this.a);this.c=BSb(d.b,this.b);bQb(this,this.d,this.c);CSb(this);for(f=this.e.e.a.ec().Kc();f.Ob();){e=RD(f.Pb(),272);e.c.c.length>0&&ASb(this,e)}} -function zTb(a,b,c,d,e,f){var g,h,i;if(!e[b.a]){e[b.a]=true;g=d;!g&&(g=new gUb);Rmb(g.e,b);for(i=f[b.a].Kc();i.Ob();){h=RD(i.Pb(),289);if(h.d==c||h.c==c){continue}h.c!=b&&zTb(a,h.c,b,g,e,f);h.d!=b&&zTb(a,h.d,b,g,e,f);Rmb(g.c,h);Tmb(g.d,h.b)}return g}return null} -function v7b(a){var b,c,d,e,f,g,h;b=0;for(e=new Anb(a.e);e.a<e.c.c.length;){d=RD(ynb(e),18);c=yDb(new SDb(null,new Swb(d.b,16)),new N7b);c&&++b}for(g=new Anb(a.g);g.a<g.c.c.length;){f=RD(ynb(g),18);h=yDb(new SDb(null,new Swb(f.b,16)),new P7b);h&&++b}return b>=2} -function _qc(a,b,c,d,e){var f,g,h,i,j,k;f=a.c.d.j;g=RD(ju(c,0),8);for(k=1;k<c.b;k++){j=RD(ju(c,k),8);Pub(d,g,d.c.b,d.c);h=ijd($id(new sjd(g),j),0.5);i=ijd(new qjd(BVc(f)),e);$id(h,i);Pub(d,h,d.c.b,d.c);g=j;f=b==0?tpd(f):rpd(f)}Mub(d,(sFb(c.b!=0),RD(c.c.b.c,8)))} -function fod(a){dod();var b,c,d;c=ysb($nd,cD(WC(A3,1),jwe,95,0,[_nd]));if(dy(Tx(c,a))>1){return false}b=ysb(Xnd,cD(WC(A3,1),jwe,95,0,[Wnd,Znd]));if(dy(Tx(b,a))>1){return false}d=ysb(cod,cD(WC(A3,1),jwe,95,0,[bod,aod]));if(dy(Tx(d,a))>1){return false}return true} -function $Uc(a,b,c){var d,e,f;for(f=new Anb(a.t);f.a<f.c.c.length;){d=RD(ynb(f),274);if(d.b.s<0&&d.c>0){d.b.n-=d.c;d.b.n<=0&&d.b.u>0&&Mub(b,d.b)}}for(e=new Anb(a.i);e.a<e.c.c.length;){d=RD(ynb(e),274);if(d.a.s<0&&d.c>0){d.a.u-=d.c;d.a.u<=0&&d.a.n>0&&Mub(c,d.a)}}} -function tId(a){var b,c,d,e,f;if(a.g==null){a.d=a.bj(a.f);WGd(a,a.d);if(a.c){f=a.f;return f}}b=RD(a.g[a.i-1],51);e=b.Pb();a.e=b;c=a.bj(e);if(c.Ob()){a.d=c;WGd(a,c)}else{a.d=null;while(!b.Ob()){bD(a.g,--a.i,null);if(a.i==0){break}d=RD(a.g[a.i-1],51);b=d}}return e} -function Rfe(a,b){var c,d,e,f,g,h;d=b;e=d.Lk();if(qke(a.e,e)){if(e.Si()&&cge(a,e,d.md())){return false}}else{h=pke(a.e.Dh(),e);c=RD(a.g,124);for(f=0;f<a.i;++f){g=c[f];if(h.am(g.Lk())){if(pb(g,d)){return false}else{RD(eHd(a,f,b),76);return true}}}}return WGd(a,b)} -function Icc(a,b,c,d){var e,f,g,h;e=new j3b(a);h3b(e,(r3b(),n3b));pQb(e,(Ywc(),Awc),b);pQb(e,Mwc,d);pQb(e,(yCc(),BBc),(Bod(),wod));pQb(e,vwc,b.c);pQb(e,wwc,b.d);Oec(b,e);h=$wnd.Math.floor(c/2);for(g=new Anb(e.j);g.a<g.c.c.length;){f=RD(ynb(g),12);f.n.b=h}return e} -function fSc(a){var b,c,d,e,f,g,h;b=0;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),10);for(f=new is(Mr(a3b(c).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(a==e.d.i.c&&e.c.j==(qpd(),ppd)){g=K3b(e.c).b;h=K3b(e.d).b;b=$wnd.Math.max(b,$wnd.Math.abs(h-g))}}}return b} -function QTb(a,b,c){var d,e,f,g,h;c.Ug('ELK Force',1);Heb(TD(Gxd(b,(yVb(),gVb))))||RFb((d=new SFb((lud(),new zud(b))),d));h=KTb(b);RTb(h);STb(a,RD(mQb(h,bVb),432));g=CTb(a.a,h);for(f=g.Kc();f.Ob();){e=RD(f.Pb(),235);pUb(a.b,e,c.eh(1/g.gc()))}h=BTb(g);JTb(h);c.Vg()} -function d_b(a,b,c){switch(c.g){case 1:return new rjd(b.a,$wnd.Math.min(a.d.b,b.b));case 2:return new rjd($wnd.Math.max(a.c.a,b.a),b.b);case 3:return new rjd(b.a,$wnd.Math.max(a.c.b,b.b));case 4:return new rjd($wnd.Math.min(b.a,a.d.a),b.b);}return new rjd(b.a,b.b)} -function yGd(a){var b,c,d;b=ev(1+(!a.c&&(a.c=new C5d(K4,a,9,9)),a.c).i);Rmb(b,(!a.d&&(a.d=new Yie(G4,a,8,5)),a.d));for(d=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));d.e!=d.i.gc();){c=RD(bMd(d),123);Rmb(b,(!c.d&&(c.d=new Yie(G4,c,8,5)),c.d))}return Qb(b),new Dl(b)} -function zGd(a){var b,c,d;b=ev(1+(!a.c&&(a.c=new C5d(K4,a,9,9)),a.c).i);Rmb(b,(!a.e&&(a.e=new Yie(G4,a,7,4)),a.e));for(d=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));d.e!=d.i.gc();){c=RD(bMd(d),123);Rmb(b,(!c.e&&(c.e=new Yie(G4,c,7,4)),c.e))}return Qb(b),new Dl(b)} -function jne(a){var b,c,d,e;if(a==null){return null}else{d=nue(a,true);e=mLe.length;if(lhb(d.substr(d.length-e,e),mLe)){c=d.length;if(c==4){b=(BFb(0,d.length),d.charCodeAt(0));if(b==43){return Wme}else if(b==45){return Vme}}else if(c==3){return Wme}}return Neb(d)}} -function _rc(a,b){var c,d,e,f,g;b.Ug('Breaking Point Processor',1);$rc(a);if(Heb(TD(mQb(a,(yCc(),uCc))))){for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);c=0;for(g=new Anb(d.a);g.a<g.c.c.length;){f=RD(ynb(g),10);f.p=c++}}Vrc(a);Wrc(a,true);Wrc(a,false)}b.Vg()} -function MJc(a,b,c,d){var e,f,g,h,i,j,k,l,m;l=d?(qpd(),ppd):(qpd(),Xod);e=false;for(i=b[c],j=0,k=i.length;j<k;++j){h=i[j];if(Cod(RD(mQb(h,(yCc(),BBc)),101))){continue}g=h.e;m=!b3b(h,l).dc()&&!!g;if(m){f=c1b(g);a.b=new Ylc(f,d?0:f.length-1)}e=e|NJc(a,h,l,m)}return e} -function gOc(a,b,c,d){var e,f,g;g=T0b(b,c);ZEb(d.c,b);if(a.j[g.p]==-1||a.j[g.p]==2||a.a[b.p]){return d}a.j[g.p]=-1;for(f=new is(Mr(W2b(g).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(!(!W0b(e)&&!(!W0b(e)&&e.c.i.c==e.d.i.c))||e==b){continue}return gOc(a,e,g,d)}return d} -function AOc(a){var b,c,d,e;b=0;c=0;for(e=new Anb(a.j);e.a<e.c.c.length;){d=RD(ynb(e),12);b=Ydb(Bdb(b,ADb(CDb(new SDb(null,new Swb(d.e,16)),new NPc))));c=Ydb(Bdb(c,ADb(CDb(new SDb(null,new Swb(d.g,16)),new PPc))));if(b>1||c>1){return 2}}if(b+c==1){return 2}return 0} -function Kwb(a,b){var c,d,e,f,g,h;f=a.a*Mxe+a.b*1502;h=a.b*Mxe+11;c=$wnd.Math.floor(h*Nxe);f+=c;h-=c*Oxe;f%=Oxe;a.a=f;a.b=h;if(b<=24){return $wnd.Math.floor(a.a*Ewb[b])}else{e=a.a*(1<<b-24);g=$wnd.Math.floor(a.b*Fwb[b]);d=e+g;d>=2147483648&&(d-=4294967296);return d}} -function uSc(a,b,c){var d,e,f,g,h,i,j;f=new bnb;j=new Yub;g=new Yub;vSc(a,j,g,b);tSc(a,j,g,b,c);for(i=new Anb(a);i.a<i.c.c.length;){h=RD(ynb(i),118);for(e=new Anb(h.k);e.a<e.c.c.length;){d=RD(ynb(e),132);(!b||d.c==(fTc(),dTc))&&h.g>d.b.g&&(ZEb(f.c,d),true)}}return f} -function jed(a,b,c){var d,e,f,g,h,i;h=a.c;for(g=(!c.q?(yob(),yob(),wob):c.q).vc().Kc();g.Ob();){f=RD(g.Pb(),44);d=!QDb(CDb(new SDb(null,new Swb(h,16)),new PAb(new xed(b,f)))).Bd((xDb(),wDb));if(d){i=f.md();if(ZD(i,4)){e=FId(i);e!=null&&(i=e)}b.qf(RD(f.ld(),149),i)}}} -function mbd(a,b,c){var d,e;Sed(a.b);Ved(a.b,(gbd(),dbd),(_cd(),$cd));Ved(a.b,ebd,b.g);Ved(a.b,fbd,b.a);a.a=Qed(a.b,b);c.Ug('Compaction by shrinking a tree',a.a.c.length);if(b.i.c.length>1){for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),47);d.Kf(b,c.eh(1))}}c.Vg()} -function Svd(a,b,c){var d,e,f;f=Eee((lke(),jke),a.Dh(),b);if(f){nke();if(!RD(f,69).xk()){f=zfe(Qee(jke,f));if(!f){throw Adb(new agb(KHe+b.xe()+LHe))}}e=(d=a.Ih(f),RD(d>=0?a.Lh(d,true,true):Qvd(a,f,true),160));RD(e,220).Xl(b,c)}else{throw Adb(new agb(KHe+b.xe()+LHe))}} -function k2d(a,b){var c,d,e,f,g;if(!b){return null}else{f=ZD(a.Cb,90)||ZD(a.Cb,102);g=!f&&ZD(a.Cb,331);for(d=new dMd((!b.a&&(b.a=new iae(b,o7,b)),b.a));d.e!=d.i.gc();){c=RD(bMd(d),89);e=i2d(c);if(f?ZD(e,90):g?ZD(e,156):!!e){return e}}return f?(JTd(),zTd):(JTd(),wTd)}} -function W8b(a,b){var c,d,e,f;b.Ug('Resize child graph to fit parent.',1);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);Tmb(a.a,c.a);c.a.c.length=0}for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),10);g3b(e,null)}a.b.c.length=0;X8b(a);!!a.e&&V8b(a.e,a);b.Vg()} -function Fec(a,b){var c,d,e,f,g;b.Ug('Edge joining',1);c=Heb(TD(mQb(a,(yCc(),mCc))));for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);g=new Jkb(d.a,0);while(g.b<g.d.gc()){f=(sFb(g.b<g.d.gc()),RD(g.d.Xb(g.c=g.b++),10));if(f.k==(r3b(),o3b)){Hec(f,c);Ckb(g)}}}b.Vg()} -function pTc(a,b){var c,d,e,f,g;c=new bnb;e=EDb(new SDb(null,new Swb(a,16)),new ITc);f=EDb(new SDb(null,new Swb(a,16)),new KTc);g=VCb(UCb(HDb(Ly(cD(WC(RM,1),rve,848,0,[e,f])),new MTc)));for(d=1;d<g.length;d++){g[d]-g[d-1]>=2*b&&Rmb(c,new BTc(g[d-1]+b,g[d]-b))}return c} -function dEd(a,b,c){var d,e,f,g,h,j,k,l;if(c){f=c.a.length;d=new vue(f);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);e=xDd(c,g.a);!!e&&(i=null,j=sEd(a,(k=(bvd(),l=new PCd,l),!!b&&NCd(k,b),k),e),jyd(j,zDd(e,uIe)),GEd(e,j),HEd(e,j),CEd(a,e,j))}}} -function sYd(a){var b,c,d,e,f,g;if(!a.j){g=new f1d;b=iYd;f=b.a.zc(a,b);if(f==null){for(d=new dMd(zYd(a));d.e!=d.i.gc();){c=RD(bMd(d),29);e=sYd(c);YGd(g,e);WGd(g,c)}b.a.Bc(a)!=null}VHd(g);a.j=new N$d((RD(QHd(xYd((lTd(),kTd).o),11),19),g.i),g.g);yYd(a).b&=-33}return a.j} -function lne(a){var b,c,d,e;if(a==null){return null}else{d=nue(a,true);e=mLe.length;if(lhb(d.substr(d.length-e,e),mLe)){c=d.length;if(c==4){b=(BFb(0,d.length),d.charCodeAt(0));if(b==43){return Yme}else if(b==45){return Xme}}else if(c==3){return Yme}}return new Ufb(d)}} -function pD(a){var b,c,d;c=a.l;if((c&c-1)!=0){return -1}d=a.m;if((d&d-1)!=0){return -1}b=a.h;if((b&b-1)!=0){return -1}if(b==0&&d==0&&c==0){return -1}if(b==0&&d==0&&c!=0){return ogb(c)}if(b==0&&d!=0&&c==0){return ogb(d)+22}if(b!=0&&d==0&&c==0){return ogb(b)+44}return -1} -function yo(a,b){var c,d,e,f,g;e=b.a&a.f;f=null;for(d=a.b[e];true;d=d.b){if(d==b){!f?(a.b[e]=b.b):(f.b=b.b);break}f=d}g=b.f&a.f;f=null;for(c=a.c[g];true;c=c.d){if(c==b){!f?(a.c[g]=b.d):(f.d=b.d);break}f=c}!b.e?(a.a=b.c):(b.e.c=b.c);!b.c?(a.e=b.e):(b.c.e=b.e);--a.i;++a.g} -function Dt(a,b){var c;b.d?(b.d.b=b.b):(a.a=b.b);b.b?(b.b.d=b.d):(a.e=b.d);if(!b.e&&!b.c){c=RD(Hvb(RD(_jb(a.b,b.a),260)),260);c.a=0;++a.c}else{c=RD(Hvb(RD(Wjb(a.b,b.a),260)),260);--c.a;!b.e?(c.b=RD(Hvb(b.c),511)):(b.e.c=b.c);!b.c?(c.c=RD(Hvb(b.e),511)):(b.c.e=b.e)}--a.d} -function XPb(a){var b,c,d,e,f,g,h,i,j,k;c=a.o;b=a.p;g=lve;e=qwe;h=lve;f=qwe;for(j=0;j<c;++j){for(k=0;k<b;++k){if(PPb(a,j,k)){g=$wnd.Math.min(g,j);e=$wnd.Math.max(e,j);h=$wnd.Math.min(h,k);f=$wnd.Math.max(f,k)}}}i=e-g+1;d=f-h+1;return new $td(sgb(g),sgb(h),sgb(i),sgb(d))} -function FZb(a,b){var c,d,e,f;f=new Jkb(a,0);c=(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),148));while(f.b<f.d.gc()){d=(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),148));e=new fZb(d.c,c.d,b);sFb(f.b>0);f.a.Xb(f.c=--f.b);Ikb(f,e);sFb(f.b<f.d.gc());f.d.Xb(f.c=f.b++);e.a=false;c=d}} -function n6b(a){var b,c,d,e,f,g;e=RD(mQb(a,(Ywc(),Xvc)),12);for(g=new Anb(a.j);g.a<g.c.c.length;){f=RD(ynb(g),12);for(d=new Anb(f.g);d.a<d.c.c.length;){b=RD(ynb(d),18);Z0b(b,e);return f}for(c=new Anb(f.e);c.a<c.c.c.length;){b=RD(ynb(c),18);Y0b(b,e);return f}}return null} -function Xec(a,b,c){var d,e,f,g,h,i;i=RD($5b(a.a,b),17).a;c?c6b(a.a,sgb(i+1),b):c6b(a.a,sgb(i-1),b);g=new Iub;for(e=new is(Mr((c?a3b(b):Z2b(b)).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);c?(f=d.d.i):(f=d.c.i);dE($5b(a.a,f))===dE($5b(a.a,b))&&(h=g.a.zc(f,g),h==null)}return g} -function yA(a,b,c){var d,e;d=Hdb(c.q.getTime());if(Ddb(d,0)<0){e=Awe-Ydb(Mdb(Odb(d),Awe));e==Awe&&(e=0)}else{e=Ydb(Mdb(d,Awe))}if(b==1){e=$wnd.Math.min((e+50)/100|0,9);Thb(a,48+e&Bwe)}else if(b==2){e=$wnd.Math.min((e+5)/10|0,99);UA(a,e,2)}else{UA(a,e,3);b>3&&UA(a,0,b-3)}} -function eXb(a){var b,c,d,e;if(dE(mQb(a,(yCc(),IAc)))===dE((Fnd(),Cnd))){return !a.e&&dE(mQb(a,gAc))!==dE((xvc(),uvc))}d=RD(mQb(a,hAc),298);e=Heb(TD(mQb(a,nAc)))||dE(mQb(a,oAc))===dE((stc(),ptc));b=RD(mQb(a,fAc),17).a;c=a.a.c.length;return !e&&d!=(xvc(),uvc)&&(b==0||b>c)} -function Rnc(a){var b,c;c=0;for(;c<a.c.length;c++){if(snc((tFb(c,a.c.length),RD(a.c[c],113)))>0){break}}if(c>0&&c<a.c.length-1){return c}b=0;for(;b<a.c.length;b++){if(snc((tFb(b,a.c.length),RD(a.c[b],113)))>0){break}}if(b>0&&c<a.c.length-1){return b}return a.c.length/2|0} -function Mzd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=6&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+Qzd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Czd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=Ivd(b,a,6,d));d=Bzd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,6,b,b))} -function pzd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+qzd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?jzd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=Ivd(b,a,12,d));d=izd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,b,b))} -function NCd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=9&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+OCd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?LCd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=Ivd(b,a,9,d));d=KCd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,9,b,b))} -function tWd(b){var c,d,e,f,g;e=WVd(b);g=b.j;if(g==null&&!!e){return b.Jk()?null:e.ik()}else if(ZD(e,156)){d=e.jk();if(d){f=d.wi();if(f!=b.i){c=RD(e,156);if(c.nk()){try{b.g=f.ti(c,g)}catch(a){a=zdb(a);if(ZD(a,82)){b.g=null}else throw Adb(a)}}b.i=f}}return b.g}return null} -function nRb(a){var b;b=new bnb;Rmb(b,new TFb(new rjd(a.c,a.d),new rjd(a.c+a.b,a.d)));Rmb(b,new TFb(new rjd(a.c,a.d),new rjd(a.c,a.d+a.a)));Rmb(b,new TFb(new rjd(a.c+a.b,a.d+a.a),new rjd(a.c+a.b,a.d)));Rmb(b,new TFb(new rjd(a.c+a.b,a.d+a.a),new rjd(a.c,a.d+a.a)));return b} -function ic(b){var c,d,e;if(b==null){return vve}try{return jeb(b)}catch(a){a=zdb(a);if(ZD(a,103)){c=a;e=nfb(rb(b))+'@'+(d=(gib(),jFb(b))>>>0,d.toString(16));lBb(pBb(),(SAb(),'Exception during lenientFormat for '+e),c);return '<'+e+' threw '+nfb(c.Rm)+'>'}else throw Adb(a)}} -function mTb(a,b,c){var d,e,f;for(f=b.a.ec().Kc();f.Ob();){e=RD(f.Pb(),74);d=RD(Wjb(a.b,e),272);!d&&(vCd(JGd(e))==vCd(LGd(e))?lTb(a,e,c):JGd(e)==vCd(LGd(e))?Wjb(a.c,e)==null&&Wjb(a.b,LGd(e))!=null&&oTb(a,e,c,false):Wjb(a.d,e)==null&&Wjb(a.b,JGd(e))!=null&&oTb(a,e,c,true))}} -function Pfc(a,b){var c,d,e,f,g,h,i;for(e=a.Kc();e.Ob();){d=RD(e.Pb(),10);h=new R3b;P3b(h,d);Q3b(h,(qpd(),Xod));pQb(h,(Ywc(),Hwc),(Geb(),true));for(g=b.Kc();g.Ob();){f=RD(g.Pb(),10);i=new R3b;P3b(i,f);Q3b(i,ppd);pQb(i,Hwc,true);c=new a1b;pQb(c,Hwc,true);Y0b(c,h);Z0b(c,i)}}} -function Pqc(a,b,c,d){var e,f,g,h;e=Nqc(a,b,c);f=Nqc(a,c,b);g=RD(Wjb(a.c,b),118);h=RD(Wjb(a.c,c),118);if(e<f){new bTc((fTc(),eTc),g,h,f-e)}else if(f<e){new bTc((fTc(),eTc),h,g,e-f)}else if(e!=0||!(!b.i||!c.i)&&d[b.i.c][c.i.c]){new bTc((fTc(),eTc),g,h,0);new bTc(eTc,h,g,0)}} -function rsc(a,b){var c,d,e,f,g,h,i;e=0;for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),10);e+=f.o.b+f.d.a+f.d.d+a.e;for(d=new is(Mr(Z2b(f).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(c.c.i.k==(r3b(),q3b)){i=c.c.i;h=RD(mQb(i,(Ywc(),Awc)),10);e+=h.o.b+h.d.a+h.d.d}}}return e} -function sad(){sad=geb;oad=new tad('CANDIDATE_POSITION_LAST_PLACED_RIGHT',0);nad=new tad('CANDIDATE_POSITION_LAST_PLACED_BELOW',1);qad=new tad('CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT',2);pad=new tad('CANDIDATE_POSITION_WHOLE_DRAWING_BELOW',3);rad=new tad('WHOLE_DRAWING',4)} -function vEd(a,b){if(ZD(b,207)){return IDd(a,RD(b,27))}else if(ZD(b,193)){return JDd(a,RD(b,123))}else if(ZD(b,366)){return HDd(a,RD(b,135))}else if(ZD(b,326)){return GDd(a,RD(b,74))}else if(b){return null}else{throw Adb(new agb(wIe+Fe(new mob(cD(WC(jJ,1),rve,1,5,[b])))))}} -function Glc(a){var b,c,d,e,f,g,h;f=new Yub;for(e=new Anb(a.d.a);e.a<e.c.c.length;){d=RD(ynb(e),125);d.b.a.c.length==0&&(Pub(f,d,f.c.b,f.c),true)}if(f.b>1){b=eJb((c=new gJb,++a.b,c),a.d);for(h=Sub(f,0);h.b!=h.d.c;){g=RD(evb(h),125);rIb(uIb(tIb(vIb(sIb(new wIb,1),0),b),g))}}} -function isc(a,b,c){var d,e,f,g,h;c.Ug('Breaking Point Removing',1);a.a=RD(mQb(b,(yCc(),yAc)),223);for(f=new Anb(b.b);f.a<f.c.c.length;){e=RD(ynb(f),30);for(h=new Anb(bv(e.a));h.a<h.c.c.length;){g=RD(ynb(h),10);if(Krc(g)){d=RD(mQb(g,(Ywc(),Wvc)),313);!d.d&&jsc(a,d)}}}c.Vg()} -function yCd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=11&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+zCd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?sCd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=Ivd(b,a,10,d));d=rCd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,11,b,b))} -function C0b(a){var b,c,d,e;for(d=new vkb((new mkb(a.b)).a);d.b;){c=tkb(d);e=RD(c.ld(),12);b=RD(c.md(),10);pQb(b,(Ywc(),Awc),e);pQb(e,Iwc,b);pQb(e,nwc,(Geb(),true));Q3b(e,RD(mQb(b,hwc),64));mQb(b,hwc);pQb(e.i,(yCc(),BBc),(Bod(),yod));RD(mQb(Y2b(e.i),kwc),21).Fc((ovc(),kvc))}} -function X7b(a,b,c){var d,e,f,g,h,i;f=0;g=0;if(a.c){for(i=new Anb(a.d.i.j);i.a<i.c.c.length;){h=RD(ynb(i),12);f+=h.e.c.length}}else{f=1}if(a.d){for(i=new Anb(a.c.i.j);i.a<i.c.c.length;){h=RD(ynb(i),12);g+=h.g.c.length}}else{g=1}e=eE(Lgb(g-f));d=(c+b)/2+(c-b)*(0.4*e);return d} -function Dnc(a){Bnc();var b,c;if(a.Hc((qpd(),opd))){throw Adb(new agb('Port sides must not contain UNDEFINED'))}switch(a.gc()){case 1:return xnc;case 2:b=a.Hc(Xod)&&a.Hc(ppd);c=a.Hc(Yod)&&a.Hc(npd);return b||c?Anc:znc;case 3:return ync;case 4:return wnc;default:return null;}} -function Did(a,b,c){tid();if(xid(a,b)&&xid(a,c)){return false}return Fid(new rjd(a.c,a.d),new rjd(a.c+a.b,a.d),b,c)||Fid(new rjd(a.c+a.b,a.d),new rjd(a.c+a.b,a.d+a.a),b,c)||Fid(new rjd(a.c+a.b,a.d+a.a),new rjd(a.c,a.d+a.a),b,c)||Fid(new rjd(a.c,a.d+a.a),new rjd(a.c,a.d),b,c)} -function Xee(a,b){var c,d,e,f;if(!a.dc()){for(c=0,d=a.gc();c<d;++c){f=WD(a.Xb(c));if(f==null?b==null:lhb(f.substr(0,3),'!##')?b!=null&&(e=b.length,!lhb(f.substr(f.length-e,e),b)||f.length!=b.length+3)&&!lhb(dLe,b):lhb(f,eLe)&&!lhb(dLe,b)||lhb(f,b)){return true}}}return false} -function $6b(a,b,c,d){var e,f,g,h,i,j;g=a.j.c.length;i=$C(NN,Mye,314,g,0,1);for(h=0;h<g;h++){f=RD(Vmb(a.j,h),12);f.p=h;i[h]=U6b(c7b(f),c,d)}W6b(a,i,c,b,d);j=new Tsb;for(e=0;e<i.length;e++){!!i[e]&&Zjb(j,RD(Vmb(a.j,e),12),i[e])}if(j.f.c+j.i.c!=0){pQb(a,(Ywc(),cwc),j);a7b(a,i)}} -function Yfc(a,b){var c,d,e,f,g,h;b.Ug('Partition postprocessing',1);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);h=new Anb(e.j);while(h.a<h.c.c.length){g=RD(ynb(h),12);Heb(TD(mQb(g,(Ywc(),Hwc))))&&znb(h)}}}b.Vg()} -function pkc(a,b,c){var d,e,f;for(e=new Anb(a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);f=Zjc(d);if(f){if(f.k==(r3b(),m3b)){switch(RD(mQb(f,(Ywc(),hwc)),64).g){case 4:f.n.a=b.a;break;case 2:f.n.a=c.a-(f.o.a+f.d.c);break;case 1:f.n.b=b.b;break;case 3:f.n.b=c.b-(f.o.b+f.d.a);}}}}} -function eZc(a,b,c){var d,e,f;c.Ug('Processor determine the height for each level',1);a.a=b.b.b==0?1:b.b.b;e=null;d=Sub(b.b,0);while(!e&&d.b!=d.d.c){f=RD(evb(d),39);Heb(TD(mQb(f,(q$c(),n$c))))&&(e=f)}!!e&&fZc(a,dv(cD(WC(Z$,1),NEe,39,0,[e])),c,RD(mQb(b,(h_c(),H$c)),88));c.Vg()} -function N8c(a){var b,c,d,e,f,g;d=(bvd(),f=new ACd,f);zxd(d,a);for(c=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));c.e!=c.i.gc();){b=RD(bMd(c),27);g=(e=new ACd,e);yCd(g,d);zyd(g,b.g,b.f);jyd(g,b.k);Byd(g,b.i,b.j);WGd((!d.a&&(d.a=new C5d(J4,d,10,11)),d.a),g);zxd(g,b)}return d} -function ord(a,b,c){var d,e,f,g,h;e=RD(Gxd(b,(hkd(),fkd)),17);!e&&(e=sgb(0));f=RD(Gxd(c,fkd),17);!f&&(f=sgb(0));if(e.a>f.a){return -1}else if(e.a<f.a){return 1}else{if(a.a){d=Qfb(b.j,c.j);if(d!=0){return d}d=Qfb(b.i,c.i);if(d!=0){return d}}g=b.g*b.f;h=c.g*c.f;return Qfb(g,h)}} -function _Nd(a,b){var c,d,e,f,g,h,i,j,k,l;++a.e;i=a.d==null?0:a.d.length;if(b>i){k=a.d;a.d=$C(D6,KJe,66,2*i+4,0,1);for(f=0;f<i;++f){j=k[f];if(j){d=j.g;l=j.i;for(h=0;h<l;++h){e=RD(d[h],136);g=bOd(a,e.Bi());c=a.d[g];!c&&(c=a.d[g]=a.dk());c.Fc(e)}}}return true}else{return false}} -function Ofe(a,b,c){var d,e,f,g,h,i;e=c;f=e.Lk();if(qke(a.e,f)){if(f.Si()){d=RD(a.g,124);for(g=0;g<a.i;++g){h=d[g];if(pb(h,e)&&g!=b){throw Adb(new agb(LIe))}}}}else{i=pke(a.e.Dh(),f);d=RD(a.g,124);for(g=0;g<a.i;++g){h=d[g];if(i.am(h.Lk())){throw Adb(new agb(gLe))}}}VGd(a,b,c)} -function R_b(a,b){var c,d,e,f,g,h;c=RD(mQb(b,(Ywc(),ewc)),21);g=RD(Qc((z$b(),y$b),c),21);h=RD(Qc(O_b,c),21);for(f=g.Kc();f.Ob();){d=RD(f.Pb(),21);if(!RD(Qc(a.b,d),15).dc()){return false}}for(e=h.Kc();e.Ob();){d=RD(e.Pb(),21);if(!RD(Qc(a.b,d),15).dc()){return false}}return true} -function dad(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.c.length==1){return P9c(RD(Vmb(a.a,0),172),b)}g=cad(a);i=0;j=a.d;f=g;k=a.d;h=(j-f)/2+f;while(f+1<j){i=0;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),172);i+=(e=S9c(c,h,false),e.a)}if(i<b){k=h;j=h}else{f=h}h=(j-f)/2+f}return k} -function zxd(a,b){var c,d,e,f,g;if(!b){return a}if(ZD(b,342)){e=RD(b,342);f=(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),a.o);for(d=e.gh().c.Kc();d.e!=d.i.gc();){c=RD(d.Yj(),44);g=c.md();fOd(f,RD(c.ld(),149),g)}}else{!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0));gOd(a.o,b.nf())}return a} -function vD(a){var b,c,d,e,f;if(isNaN(a)){return MD(),LD}if(a<-9223372036854775808){return MD(),JD}if(a>=9223372036854775807){return MD(),ID}e=false;if(a<0){e=true;a=-a}d=0;if(a>=hxe){d=eE(a/hxe);a-=d*hxe}c=0;if(a>=gxe){c=eE(a/gxe);a-=c*gxe}b=eE(a);f=hD(b,c,d);e&&nD(f);return f} -function KCb(a){var b,c,d,e,f;f=new bnb;Umb(a.b,new SEb(f));a.b.c.length=0;if(f.c.length!=0){b=(tFb(0,f.c.length),RD(f.c[0],82));for(c=1,d=f.c.length;c<d;++c){e=(tFb(c,f.c.length),RD(f.c[c],82));e!=b&&fz(b,e)}if(ZD(b,63)){throw Adb(RD(b,63))}if(ZD(b,295)){throw Adb(RD(b,295))}}} -function iNb(a,b){var c,d,e,f;c=!b||!a.u.Hc((Pod(),Lod));f=0;for(e=new Anb(a.e.Xf());e.a<e.c.c.length;){d=RD(ynb(e),852);if(d.ag()==(qpd(),opd)){throw Adb(new agb('Label and node size calculator can only be used with ports that have port sides assigned.'))}d.Qf(f++);hNb(a,d,c)}} -function IGb(a){var b,c,d,e,f;for(c=new Anb(a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),316);b.j=null;for(f=b.a.a.ec().Kc();f.Ob();){d=RD(f.Pb(),60);hjd(d.b);(!b.j||d.d.c<b.j.d.c)&&(b.j=d)}for(e=b.a.a.ec().Kc();e.Ob();){d=RD(e.Pb(),60);d.b.a=d.d.c-b.j.d.c;d.b.b=d.d.d-b.j.d.d}}return a} -function uYb(a){var b,c,d,e,f;for(c=new Anb(a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),194);b.f=null;for(f=b.a.a.ec().Kc();f.Ob();){d=RD(f.Pb(),86);hjd(d.e);(!b.f||d.g.c<b.f.g.c)&&(b.f=d)}for(e=b.a.a.ec().Kc();e.Ob();){d=RD(e.Pb(),86);d.e.a=d.g.c-b.f.g.c;d.e.b=d.g.d-b.f.g.d}}return a} -function vPb(a){var b,c,d;c=RD(a.a,17).a;d=RD(a.b,17).a;b=$wnd.Math.max($wnd.Math.abs(c),$wnd.Math.abs(d));if(c<b&&d==-b){return new Ptd(sgb(c+1),sgb(d))}if(c==b&&d<b){return new Ptd(sgb(c),sgb(d+1))}if(c>=-b&&d==b){return new Ptd(sgb(c-1),sgb(d))}return new Ptd(sgb(c),sgb(d-1))} -function lcc(){hcc();return cD(WC(YS,1),jwe,81,0,[nbc,kbc,obc,Ebc,Xbc,Ibc,bcc,Nbc,Vbc,zbc,Rbc,Mbc,Wbc,vbc,dcc,ebc,Qbc,Zbc,Fbc,Ybc,fcc,Tbc,fbc,Ubc,gcc,_bc,ecc,Gbc,sbc,Hbc,Dbc,ccc,ibc,qbc,Kbc,hbc,Lbc,Bbc,wbc,Obc,ybc,lbc,jbc,Cbc,xbc,Pbc,acc,gbc,Sbc,Abc,Jbc,tbc,rbc,$bc,pbc,ubc,mbc])} -function Cmc(a,b,c){a.d=0;a.b=0;b.k==(r3b(),q3b)&&c.k==q3b&&RD(mQb(b,(Ywc(),Awc)),10)==RD(mQb(c,Awc),10)&&(Gmc(b).j==(qpd(),Yod)?Dmc(a,b,c):Dmc(a,c,b));b.k==q3b&&c.k==o3b?Gmc(b).j==(qpd(),Yod)?(a.d=1):(a.b=1):c.k==q3b&&b.k==o3b&&(Gmc(c).j==(qpd(),Yod)?(a.b=1):(a.d=1));Imc(a,b,c)} -function EFd(a){var b,c,d,e,f,g,h,i,j,k,l;l=HFd(a);b=a.a;i=b!=null;i&&sDd(l,'category',a.a);e=cve(new Xkb(a.d));g=!e;if(g){j=new MB;sC(l,'knownOptions',j);c=new MFd(j);xgb(new Xkb(a.d),c)}f=cve(a.g);h=!f;if(h){k=new MB;sC(l,'supportedFeatures',k);d=new OFd(k);xgb(a.g,d)}return l} -function Ly(a){var b,c,d,e,f,g,h,i,j;d=false;b=336;c=0;f=new hq(a.length);for(h=a,i=0,j=h.length;i<j;++i){g=h[i];d=d|(MCb(g),false);e=(LCb(g),g.a);Rmb(f.a,Qb(e));b&=e.yd();c=az(c,e.zd())}return RD(RD(JCb(new SDb(null,ek(new Swb((tm(),zm(f.a)),16),new My,b,c)),new Oy(a)),687),848)} -function WZb(a,b){var c;if(!!a.d&&(b.c!=a.e.c||sZb(a.e.b,b.b))){Rmb(a.f,a.d);a.a=a.d.c+a.d.b;a.d=null;a.e=null}pZb(b.b)?(a.c=b):(a.b=b);if(b.b==(nZb(),jZb)&&!b.a||b.b==kZb&&b.a||b.b==lZb&&b.a||b.b==mZb&&!b.a){if(!!a.c&&!!a.b){c=new Uid(a.a,a.c.d,b.c-a.a,a.b.d-a.c.d);a.d=c;a.e=b}}} -function Wed(a){var b;Oed.call(this);this.i=new ifd;this.g=a;this.f=RD(a.e&&a.e(),9).length;if(this.f==0){throw Adb(new agb('There must be at least one phase in the phase enumeration.'))}this.c=(b=RD(mfb(this.g),9),new Fsb(b,RD(WEb(b,b.length),9),0));this.a=new ufd;this.b=new Tsb} -function eCd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=7&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+gCd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?cCd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=RD(b,54).Rh(a,1,H4,d));d=bCd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,7,b,b))} -function lVd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+oVd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?iVd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=RD(b,54).Rh(a,0,p7,d));d=hVd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,b,b))} -function Mjb(a,b){Ljb();var c,d,e,f,g,h,i,j,k;if(b.d>a.d){h=a;a=b;b=h}if(b.d<63){return Qjb(a,b)}g=(a.d&-2)<<4;j=$ib(a,g);k=$ib(b,g);d=Gjb(a,Zib(j,g));e=Gjb(b,Zib(k,g));i=Mjb(j,k);c=Mjb(d,e);f=Mjb(Gjb(j,d),Gjb(e,k));f=Bjb(Bjb(f,i),c);f=Zib(f,g);i=Zib(i,g<<1);return Bjb(Bjb(i,f),c)} -function _Cc(){_Cc=geb;ZCc=new bDc(lEe,0);WCc=new bDc('LONGEST_PATH',1);XCc=new bDc('LONGEST_PATH_SOURCE',2);TCc=new bDc('COFFMAN_GRAHAM',3);VCc=new bDc(BBe,4);$Cc=new bDc('STRETCH_WIDTH',5);YCc=new bDc('MIN_WIDTH',6);SCc=new bDc('BF_MODEL_ORDER',7);UCc=new bDc('DF_MODEL_ORDER',8)} -function AKc(a,b,c){var d,e,f,g,h;g=aMc(a,c);h=$C(jR,WAe,10,b.length,0,1);d=0;for(f=g.Kc();f.Ob();){e=RD(f.Pb(),12);Heb(TD(mQb(e,(Ywc(),nwc))))&&(h[d++]=RD(mQb(e,Iwc),10))}if(d<b.length){throw Adb(new dgb('Expected '+b.length+' hierarchical ports, but found only '+d+'.'))}return h} -function sBd(a,b){var c,d,e,f,g,h;if(!a.tb){f=(!a.rb&&(a.rb=new J5d(a,i7,a)),a.rb);h=new Usb(f.i);for(e=new dMd(f);e.e!=e.i.gc();){d=RD(bMd(e),142);g=d.xe();c=RD(g==null?rtb(h.f,null,d):Ltb(h.i,g,d),142);!!c&&(g==null?rtb(h.f,null,c):Ltb(h.i,g,c))}a.tb=h}return RD(Xjb(a.tb,b),142)} -function wYd(a,b){var c,d,e,f,g;(a.i==null&&rYd(a),a.i).length;if(!a.p){g=new Usb((3*a.g.i/2|0)+1);for(e=new yMd(a.g);e.e!=e.i.gc();){d=RD(xMd(e),179);f=d.xe();c=RD(f==null?rtb(g.f,null,d):Ltb(g.i,f,d),179);!!c&&(f==null?rtb(g.f,null,c):Ltb(g.i,f,c))}a.p=g}return RD(Xjb(a.p,b),179)} -function fFb(a,b,c,d,e){var f,g,h,i,j;dFb(d+lz(c,c.ie()),e);eFb(b,hFb(c));f=c.f;!!f&&fFb(a,b,f,'Caused by: ',false);for(h=(c.k==null&&(c.k=$C(rJ,Nve,82,0,0,1)),c.k),i=0,j=h.length;i<j;++i){g=h[i];fFb(a,b,g,'Suppressed: ',false)}console.groupEnd!=null&&console.groupEnd.call(console)} -function DKc(a,b,c,d){var e,f,g,h,i;i=b.e;h=i.length;g=b.q.ug(i,c?0:h-1,c);e=i[c?0:h-1];g=g|CKc(a,e,c,d);for(f=c?1:h-2;c?f<h:f>=0;f+=c?1:-1){g=g|b.c.lg(i,f,c,d&&!Heb(TD(mQb(b.j,(Ywc(),jwc))))&&!Heb(TD(mQb(b.j,(Ywc(),Owc)))));g=g|b.q.ug(i,f,c);g=g|CKc(a,i[f],c,d)}Ysb(a.c,b);return g} -function F6b(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(k=u2b(a.j),l=0,m=k.length;l<m;++l){j=k[l];if(c==(BEc(),yEc)||c==AEc){i=s2b(j.g);for(e=i,f=0,g=e.length;f<g;++f){d=e[f];B6b(b,d)&&X0b(d,true)}}if(c==zEc||c==AEc){h=s2b(j.e);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];A6b(b,d)&&X0b(d,true)}}}} -function uqc(a){var b,c;b=null;c=null;switch(pqc(a).g){case 1:b=(qpd(),Xod);c=ppd;break;case 2:b=(qpd(),npd);c=Yod;break;case 3:b=(qpd(),ppd);c=Xod;break;case 4:b=(qpd(),Yod);c=npd;}Smc(a,RD(Lvb(KDb(RD(Qc(a.k,b),15).Oc(),lqc)),113));Tmc(a,RD(Lvb(JDb(RD(Qc(a.k,c),15).Oc(),lqc)),113))} -function r9b(a){var b,c,d,e,f,g;e=RD(Vmb(a.j,0),12);if(e.e.c.length+e.g.c.length==0){a.n.a=0}else{g=0;for(d=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(e),new _3b(e)])));gs(d);){c=RD(hs(d),12);g+=c.i.n.a+c.n.a+c.a.a}b=RD(mQb(a,(yCc(),zBc)),8);f=!b?0:b.a;a.n.a=g/(e.e.c.length+e.g.c.length)-f}} -function Qdd(a,b){var c,d,e;for(d=new Anb(b.a);d.a<d.c.c.length;){c=RD(ynb(d),225);RQb(RD(c.b,68),ojd(ajd(RD(b.b,68).c),RD(b.b,68).a));e=oRb(RD(b.b,68).b,RD(c.b,68).b);e>1&&(a.a=true);QQb(RD(c.b,68),$id(ajd(RD(b.b,68).c),ijd(ojd(ajd(RD(c.b,68).a),RD(b.b,68).a),e)));Odd(a,b);Qdd(a,c)}} -function tYb(a){var b,c,d,e,f,g,h;for(f=new Anb(a.a.a);f.a<f.c.c.length;){d=RD(ynb(f),194);d.e=0;d.d.a.$b()}for(e=new Anb(a.a.a);e.a<e.c.c.length;){d=RD(ynb(e),194);for(c=d.a.a.ec().Kc();c.Ob();){b=RD(c.Pb(),86);for(h=b.f.Kc();h.Ob();){g=RD(h.Pb(),86);if(g.d!=d){Ysb(d.d,g);++g.d.e}}}}} -function Hfc(a){var b,c,d,e,f,g,h,i;i=a.j.c.length;c=0;b=i;e=2*i;for(h=new Anb(a.j);h.a<h.c.c.length;){g=RD(ynb(h),12);switch(g.j.g){case 2:case 4:g.p=-1;break;case 1:case 3:d=g.e.c.length;f=g.g.c.length;d>0&&f>0?(g.p=b++):d>0?(g.p=c++):f>0?(g.p=e++):(g.p=c++);}}yob();_mb(a.j,new Lfc)} -function zic(a){var b,c;c=null;b=RD(Vmb(a.g,0),18);do{c=b.d.i;if(nQb(c,(Ywc(),wwc))){return RD(mQb(c,wwc),12).i}if(c.k!=(r3b(),p3b)&&gs(new is(Mr(a3b(c).a.Kc(),new ir)))){b=RD(hs(new is(Mr(a3b(c).a.Kc(),new ir))),18)}else if(c.k!=p3b){return null}}while(!!c&&c.k!=(r3b(),p3b));return c} -function sqc(a,b){var c,d,e,f,g,h,i,j,k;h=b.j;g=b.g;i=RD(Vmb(h,h.c.length-1),113);k=(tFb(0,h.c.length),RD(h.c[0],113));j=oqc(a,g,i,k);for(f=1;f<h.c.length;f++){c=(tFb(f-1,h.c.length),RD(h.c[f-1],113));e=(tFb(f,h.c.length),RD(h.c[f],113));d=oqc(a,g,c,e);if(d>j){i=c;k=e;j=d}}b.a=k;b.c=i} -function fMc(a,b,c){var d,e,f,g,h,i,j;j=new yAb(new TMc(a));for(g=cD(WC(xR,1),XAe,12,0,[b,c]),h=0,i=g.length;h<i;++h){f=g[h];j.a.zc(f,(Geb(),Eeb))==null;for(e=new l4b(f.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);d.c==d.d||rAb(j,f==d.c?d.d:d.c)}}return Qb(j),new dnb(j)} -function rIb(a){if(!a.a.d||!a.a.e){throw Adb(new dgb((lfb(zN),zN.k+' must have a source and target '+(lfb(DN),DN.k)+' specified.')))}if(a.a.d==a.a.e){throw Adb(new dgb('Network simplex does not support self-loops: '+a.a+' '+a.a.d+' '+a.a.e))}EIb(a.a.d.g,a.a);EIb(a.a.e.b,a.a);return a.a} -function x6b(a,b){var c,d,e,f,g,h,i;b.Ug('Constraints Postprocessor',1);g=0;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);i=0;h=false;for(d=new Anb(e.a);d.a<d.c.c.length;){c=RD(ynb(d),10);if(c.k==(r3b(),p3b)){h=true;pQb(c,(yCc(),VAc),sgb(g));pQb(c,mAc,sgb(i));++i}}h&&++g}b.Vg()} -function OTc(a,b,c){var d,e,f,g,h,i;d=0;if(b.b!=0&&c.b!=0){f=Sub(b,0);g=Sub(c,0);h=Kfb(UD(evb(f)));i=Kfb(UD(evb(g)));e=true;do{if(h>i-a.b&&h<i+a.b){return -1}else h>i-a.a&&h<i+a.a&&++d;h<=i&&f.b!=f.d.c?(h=Kfb(UD(evb(f)))):i<=h&&g.b!=g.d.c?(i=Kfb(UD(evb(g)))):(e=false)}while(e)}return d} -function G2c(a,b){var c,d;Sed(a.a);Ved(a.a,(x2c(),v2c),v2c);Ved(a.a,w2c,w2c);d=new ufd;pfd(d,w2c,(g3c(),e3c));dE(Gxd(b,($4c(),I4c)))!==dE((g4c(),d4c))&&pfd(d,w2c,b3c);Heb(TD(Gxd(b,T4c)))&&pfd(d,w2c,f3c);pfd(d,w2c,c3c);Heb(TD(Gxd(b,V4c)))&&nfd(d,w2c,d3c);Ped(a.a,d);c=Qed(a.a,b);return c} -function W6b(a,b,c,d,e){var f,g,h,i;i=(f=RD(mfb(E3),9),new Fsb(f,RD(WEb(f,f.length),9),0));for(h=new Anb(a.j);h.a<h.c.c.length;){g=RD(ynb(h),12);if(b[g.p]){X6b(g,b[g.p],d);zsb(i,g.j)}}if(e){_6b(a,b,(qpd(),Xod),2*c,d);_6b(a,b,ppd,2*c,d)}else{_6b(a,b,(qpd(),Yod),2*c,d);_6b(a,b,npd,2*c,d)}} -function eec(a){var b,c;for(c=new is(Mr(a3b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(b.d.i.k!=(r3b(),n3b)){throw Adb(new Jed(nBe+X2b(a)+"' has its layer constraint set to LAST, but has at least one outgoing edge that "+' does not go to a LAST_SEPARATE node. That must not happen.'))}}} -function mHc(a,b,c){var d,e,f,g,h;c.Ug('Longest path layering',1);a.a=b;h=a.a.a;a.b=$C(kE,Pwe,28,h.c.length,15,1);d=0;for(g=new Anb(h);g.a<g.c.c.length;){e=RD(ynb(g),10);e.p=d;a.b[d]=-1;++d}for(f=new Anb(h);f.a<f.c.c.length;){e=RD(ynb(f),10);oHc(a,e)}h.c.length=0;a.a=null;a.b=null;c.Vg()} -function JUc(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=0;for(k=new Anb(a.a);k.a<k.c.c.length;){j=RD(ynb(k),10);h=0;for(f=new is(Mr(Z2b(j).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);l=K3b(e.c).b;m=K3b(e.d).b;h=$wnd.Math.max(h,$wnd.Math.abs(m-l))}i=$wnd.Math.max(i,h)}g=d*$wnd.Math.min(1,b/c)*i;return g} -function J_c(a,b){var c,d,e,f,g;g=RD(mQb(b,(h_c(),Y$c)),433);for(f=Sub(b.b,0);f.b!=f.d.c;){e=RD(evb(f),39);if(a.b[e.g]==0){switch(g.g){case 0:K_c(a,e);break;case 1:I_c(a,e);}a.b[e.g]=2}}for(d=Sub(a.a,0);d.b!=d.d.c;){c=RD(evb(d),65);ze(c.b.d,c,true);ze(c.c.b,c,true)}pQb(b,(q$c(),k$c),a.a)} -function pse(a){var b;b=new Rhb;(a&256)!=0&&(b.a+='F',b);(a&128)!=0&&(b.a+='H',b);(a&512)!=0&&(b.a+='X',b);(a&2)!=0&&(b.a+='i',b);(a&8)!=0&&(b.a+='m',b);(a&4)!=0&&(b.a+='s',b);(a&32)!=0&&(b.a+='u',b);(a&64)!=0&&(b.a+='w',b);(a&16)!=0&&(b.a+='x',b);(a&gwe)!=0&&(b.a+=',',b);return shb(b.a)} -function W8c(a,b){var c,d,e,f,g,h;b.Ug(bGe,1);e=RD(Gxd(a,(X7c(),N7c)),107);f=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);g=yad(f);h=$wnd.Math.max(g.a,Kfb(UD(Gxd(a,(X6c(),U6c))))-(e.b+e.c));d=$wnd.Math.max(g.b,Kfb(UD(Gxd(a,R6c)))-(e.d+e.a));c=d-g.b;Ixd(a,M6c,c);Ixd(a,O6c,h);Ixd(a,N6c,d+c);b.Vg()} -function pke(a,b){nke();var c,d,e,f;if(!b){return mke}else if(b==(nme(),kme)||(b==Ule||b==Sle||b==Tle)&&a!=Rle){return new wke(a,b)}else{d=RD(b,692);c=d.$k();if(!c){Afe(Qee((lke(),jke),b));c=d.$k()}f=(!c.i&&(c.i=new Tsb),c.i);e=RD(Wd(qtb(f.f,a)),2041);!e&&Zjb(f,a,e=new wke(a,b));return e}} -function jHb(a,b){var c,d;d=rAb(a.b,b.b);if(!d){throw Adb(new dgb('Invalid hitboxes for scanline constraint calculation.'))}(dHb(b.b,RD(tAb(a.b,b.b),60))||dHb(b.b,RD(sAb(a.b,b.b),60)))&&(gib(),String.fromCharCode(10));a.a[b.b.f]=RD(vAb(a.b,b.b),60);c=RD(uAb(a.b,b.b),60);!!c&&(a.a[c.f]=b.b)} -function lTb(a,b,c){var d,e,f,g,h,i,j,k,l;f=IGd(b,false,false);j=ssd(f);l=Kfb(UD(Gxd(b,(tSb(),mSb))));e=jTb(j,l+a.a);k=new ORb(e);kQb(k,b);Zjb(a.b,b,k);ZEb(c.c,k);i=(!b.n&&(b.n=new C5d(I4,b,1,7)),b.n);for(h=new dMd(i);h.e!=h.i.gc();){g=RD(bMd(h),135);d=nTb(a,g,true,0,0);ZEb(c.c,d)}return k} -function Zec(a,b){var c,d,e,f,g,h,i;e=new bnb;for(c=0;c<=a.j;c++){d=new R4b(b);d.p=a.j-c;ZEb(e.c,d)}for(h=new Anb(a.p);h.a<h.c.c.length;){g=RD(ynb(h),10);g3b(g,RD(Vmb(e,a.j-a.g[g.p]),30))}f=new Anb(e);while(f.a<f.c.c.length){i=RD(ynb(f),30);i.a.c.length==0&&znb(f)}b.b.c.length=0;Tmb(b.b,e)} -function xfc(a,b){var c,d,e,f,g,h,i,j,k;i=RD(mQb(a,(Ywc(),Awc)),12);j=xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).a;k=a.i.n.b;c=s2b(a.e);for(e=c,f=0,g=e.length;f<g;++f){d=e[f];Z0b(d,i);Oub(d.a,new rjd(j,k));if(b){h=RD(mQb(d,(yCc(),RAc)),75);if(!h){h=new Ejd;pQb(d,RAc,h)}Mub(h,new rjd(j,k))}}} -function yfc(a,b){var c,d,e,f,g,h,i,j,k;e=RD(mQb(a,(Ywc(),Awc)),12);j=xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).a;k=a.i.n.b;c=s2b(a.g);for(g=c,h=0,i=g.length;h<i;++h){f=g[h];Y0b(f,e);Nub(f.a,new rjd(j,k));if(b){d=RD(mQb(f,(yCc(),RAc)),75);if(!d){d=new Ejd;pQb(f,RAc,d)}Mub(d,new rjd(j,k))}}} -function Khc(a){var b,c,d,e,f,g,h,i,j;d=a.b;f=d.e;g=Cod(RD(mQb(d,(yCc(),BBc)),101));c=!!f&&RD(mQb(f,(Ywc(),kwc)),21).Hc((ovc(),hvc));if(g||c){return}for(j=(h=(new glb(a.e)).a.vc().Kc(),new llb(h));j.a.Ob();){i=(b=RD(j.a.Pb(),44),RD(b.md(),113));if(i.a){e=i.d;P3b(e,null);i.c=true;a.a=true}}} -function iic(a,b){var c,d,e,f;b.Ug('Semi-Interactive Crossing Minimization Processor',1);c=false;for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);f=MDb(PDb(CDb(CDb(new SDb(null,new Swb(d.a,16)),new nic),new pic),new ric),new vic);c=c|f.a!=null}c&&pQb(a,(Ywc(),rwc),(Geb(),true));b.Vg()} -function rKc(a,b){var c,d,e,f,g,h;a.b=new bnb;a.d=RD(mQb(b,(Ywc(),Lwc)),234);a.e=Lwb(a.d);f=new Yub;e=dv(cD(WC(eR,1),OAe,36,0,[b]));g=0;while(g<e.c.length){d=(tFb(g,e.c.length),RD(e.c[g],36));d.p=g++;c=new FJc(d,a.a,a.b);Tmb(e,c.b);Rmb(a.b,c);c.s&&(h=Sub(f,0),cvb(h,c))}a.c=new _sb;return f} -function yMb(a,b){var c,d,e,f,g,h;for(g=RD(RD(Qc(a.r,b),21),87).Kc();g.Ob();){f=RD(g.Pb(),117);c=f.c?QKb(f.c):0;if(c>0){if(f.a){h=f.b.Mf().a;if(c>h){e=(c-h)/2;f.d.b=e;f.d.c=e}}else{f.d.c=a.s+c}}else if(Rod(a.u)){d=wsd(f.b);d.c<0&&(f.d.b=-d.c);d.c+d.b>f.b.Mf().a&&(f.d.c=d.c+d.b-f.b.Mf().a)}}} -function RUc(a,b){var c,d,e,f,g;g=new bnb;c=b;do{f=RD(Wjb(a.b,c),131);f.B=c.c;f.D=c.d;ZEb(g.c,f);c=RD(Wjb(a.k,c),18)}while(c);d=(tFb(0,g.c.length),RD(g.c[0],131));d.j=true;d.A=RD(d.d.a.ec().Kc().Pb(),18).c.i;e=RD(Vmb(g,g.c.length-1),131);e.q=true;e.C=RD(e.d.a.ec().Kc().Pb(),18).d.i;return g} -function pPb(a){var b,c;b=RD(a.a,17).a;c=RD(a.b,17).a;if(b>=0){if(b==c){return new Ptd(sgb(-b-1),sgb(-b-1))}if(b==-c){return new Ptd(sgb(-b),sgb(c+1))}}if($wnd.Math.abs(b)>$wnd.Math.abs(c)){if(b<0){return new Ptd(sgb(-b),sgb(c))}return new Ptd(sgb(-b),sgb(c+1))}return new Ptd(sgb(b+1),sgb(c))} -function H8b(a){var b,c;c=RD(mQb(a,(yCc(),UAc)),171);b=RD(mQb(a,(Ywc(),owc)),311);if(c==(cxc(),$wc)){pQb(a,UAc,bxc);pQb(a,owc,(Gvc(),Fvc))}else if(c==axc){pQb(a,UAc,bxc);pQb(a,owc,(Gvc(),Dvc))}else if(b==(Gvc(),Fvc)){pQb(a,UAc,$wc);pQb(a,owc,Evc)}else if(b==Dvc){pQb(a,UAc,axc);pQb(a,owc,Evc)}} -function dSc(){dSc=geb;bSc=new pSc;ZRc=pfd(new ufd,(sXb(),pXb),(hcc(),Fbc));aSc=nfd(pfd(new ufd,pXb,Tbc),rXb,Sbc);cSc=mfd(mfd(rfd(nfd(pfd(new ufd,nXb,bcc),rXb,acc),qXb),_bc),ccc);$Rc=nfd(pfd(pfd(pfd(new ufd,oXb,Ibc),qXb,Kbc),qXb,Lbc),rXb,Jbc);_Rc=nfd(pfd(pfd(new ufd,qXb,Lbc),qXb,qbc),rXb,pbc)} -function HUc(){HUc=geb;CUc=pfd(nfd(new ufd,(sXb(),rXb),(hcc(),tbc)),pXb,Fbc);GUc=mfd(mfd(rfd(nfd(pfd(new ufd,nXb,bcc),rXb,acc),qXb),_bc),ccc);DUc=nfd(pfd(pfd(pfd(new ufd,oXb,Ibc),qXb,Kbc),qXb,Lbc),rXb,Jbc);FUc=pfd(pfd(new ufd,pXb,Tbc),rXb,Sbc);EUc=nfd(pfd(pfd(new ufd,qXb,Lbc),qXb,qbc),rXb,pbc)} -function eSc(a,b,c,d,e){var f,g;if((!W0b(b)&&b.c.i.c==b.d.i.c||!djd(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])),c))&&!W0b(b)){b.c==e?hu(b.a,0,new sjd(c)):Mub(b.a,new sjd(c));if(d&&!Zsb(a.a,c)){g=RD(mQb(b,(yCc(),RAc)),75);if(!g){g=new Ejd;pQb(b,RAc,g)}f=new sjd(c);Pub(g,f,g.c.b,g.c);Ysb(a.a,f)}}} -function ht(a,b){var c,d,e,f;f=Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)));c=f&a.b.length-1;e=null;for(d=a.b[c];d;e=d,d=d.a){if(d.d==f&&Hb(d.i,b)){!e?(a.b[c]=d.a):(e.a=d.a);Ts(RD(Hvb(d.c),604),RD(Hvb(d.f),604));Ss(RD(Hvb(d.b),227),RD(Hvb(d.e),227));--a.f;++a.e;return true}}return false} -function dec(a){var b,c;for(c=new is(Mr(Z2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(b.c.i.k!=(r3b(),n3b)){throw Adb(new Jed(nBe+X2b(a)+"' has its layer constraint set to FIRST, but has at least one incoming edge that "+' does not come from a FIRST_SEPARATE node. That must not happen.'))}}} -function Twd(a,b,c){var d,e,f,g,h,i,j;e=ggb(a.Db&254);if(e==0){a.Eb=c}else{if(e==1){h=$C(jJ,rve,1,2,5,1);f=Xwd(a,b);if(f==0){h[0]=c;h[1]=a.Eb}else{h[0]=a.Eb;h[1]=c}}else{h=$C(jJ,rve,1,e+1,5,1);g=SD(a.Eb);for(d=2,i=0,j=0;d<=128;d<<=1){d==b?(h[j++]=c):(a.Db&d)!=0&&(h[j++]=g[i++])}}a.Eb=h}a.Db|=b} -function vQb(a,b,c){var d,e,f,g;this.b=new bnb;e=0;d=0;for(g=new Anb(a);g.a<g.c.c.length;){f=RD(ynb(g),176);c&&iPb(f);Rmb(this.b,f);e+=f.o;d+=f.p}if(this.b.c.length>0){f=RD(Vmb(this.b,0),176);e+=f.o;d+=f.p}e*=2;d*=2;b>1?(e=eE($wnd.Math.ceil(e*b))):(d=eE($wnd.Math.ceil(d/b)));this.a=new gQb(e,d)} -function mkc(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;k=d;if(b.j&&b.o){n=RD(Wjb(a.f,b.A),60);p=n.d.c+n.d.b;--k}else{p=b.a.c+b.a.b}l=e;if(c.q&&c.o){n=RD(Wjb(a.f,c.C),60);j=n.d.c;++l}else{j=c.a.c}q=j-p;i=$wnd.Math.max(2,l-k);h=q/i;o=p+h;for(m=k;m<l;++m){g=RD(f.Xb(m),131);r=g.a.b;g.a.c=o-r/2;o+=h}} -function Wrc(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b?new dsc:new fsc;f=false;do{f=false;j=b?hv(a.b):a.b;for(i=j.Kc();i.Ob();){h=RD(i.Pb(),30);m=bv(h.a);b||hv(m);for(l=new Anb(m);l.a<l.c.c.length;){k=RD(ynb(l),10);if(e.Mb(k)){d=k;c=RD(mQb(k,(Ywc(),Wvc)),313);g=b?c.b:c.k;f=Urc(d,g,b,false)}}}}while(f)} -function sMc(a,b,c,d,e,f){var g,h,i,j,k,l;j=c.c.length;f&&(a.c=$C(kE,Pwe,28,b.length,15,1));for(g=e?0:b.length-1;e?g<b.length:g>=0;g+=e?1:-1){h=b[g];i=d==(qpd(),Xod)?e?b3b(h,d):hv(b3b(h,d)):e?hv(b3b(h,d)):b3b(h,d);f&&(a.c[h.p]=i.gc());for(l=i.Kc();l.Ob();){k=RD(l.Pb(),12);a.d[k.p]=j++}Tmb(c,i)}} -function AUc(a,b,c){var d,e,f,g,h,i,j,k;f=Kfb(UD(a.b.Kc().Pb()));j=Kfb(UD(fr(b.b)));d=ijd(ajd(a.a),j-c);e=ijd(ajd(b.a),c-f);k=$id(d,e);ijd(k,1/(j-f));this.a=k;this.b=new bnb;h=true;g=a.b.Kc();g.Pb();while(g.Ob()){i=Kfb(UD(g.Pb()));if(h&&i-c>AEe){this.b.Fc(c);h=false}this.b.Fc(i)}h&&this.b.Fc(c)} -function mJb(a){var b,c,d,e;pJb(a,a.n);if(a.d.c.length>0){Nnb(a.c);while(xJb(a,RD(ynb(new Anb(a.e.a)),125))<a.e.a.c.length){b=rJb(a);e=b.e.e-b.d.e-b.a;b.e.j&&(e=-e);for(d=new Anb(a.e.a);d.a<d.c.c.length;){c=RD(ynb(d),125);c.j&&(c.e+=e)}Nnb(a.c)}Nnb(a.c);uJb(a,RD(ynb(new Anb(a.e.a)),125));iJb(a)}} -function ned(a,b){hed();var c,d;c=ugd(ygd(),b.Pg());if(c){d=c.j;if(ZD(a,207)){return xCd(RD(a,27))?Csb(d,(Yhd(),Vhd))||Csb(d,Whd):Csb(d,(Yhd(),Vhd))}else if(ZD(a,326)){return Csb(d,(Yhd(),Thd))}else if(ZD(a,193)){return Csb(d,(Yhd(),Xhd))}else if(ZD(a,366)){return Csb(d,(Yhd(),Uhd))}}return true} -function Cge(a,b,c){var d,e,f,g,h,i;e=c;f=e.Lk();if(qke(a.e,f)){if(f.Si()){d=RD(a.g,124);for(g=0;g<a.i;++g){h=d[g];if(pb(h,e)&&g!=b){throw Adb(new agb(LIe))}}}}else{i=pke(a.e.Dh(),f);d=RD(a.g,124);for(g=0;g<a.i;++g){h=d[g];if(i.am(h.Lk())&&g!=b){throw Adb(new agb(gLe))}}}return RD(eHd(a,b,c),76)} -function hz(d,b){if(b instanceof Object){try{b.__java$exception=d;if(navigator.userAgent.toLowerCase().indexOf('msie')!=-1&&$doc.documentMode<9){return}var c=d;Object.defineProperties(b,{cause:{get:function(){var a=c.he();return a&&a.fe()}},suppressed:{get:function(){return c.ge()}}})}catch(a){}}} -function tjb(a,b){var c,d,e,f,g;d=b>>5;b&=31;if(d>=a.d){return a.e<0?(Pib(),Jib):(Pib(),Oib)}f=a.d-d;e=$C(kE,Pwe,28,f+1,15,1);ujb(e,f,a.a,d,b);if(a.e<0){for(c=0;c<d&&a.a[c]==0;c++);if(c<d||b>0&&a.a[c]<<32-b!=0){for(c=0;c<f&&e[c]==-1;c++){e[c]=0}c==f&&++f;++e[c]}}g=new cjb(a.e,f,e);Rib(g);return g} -function LSb(a){var b,c,d,e;e=MCd(a);c=new bTb(e);d=new dTb(e);b=new bnb;Tmb(b,(!a.d&&(a.d=new Yie(G4,a,8,5)),a.d));Tmb(b,(!a.e&&(a.e=new Yie(G4,a,7,4)),a.e));return RD(zDb(GDb(CDb(new SDb(null,new Swb(b,16)),c),d),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21)} -function Tdc(a,b){var c;c=RD(mQb(a,(yCc(),xAc)),283);b.Ug('Label side selection ('+c+')',1);switch(c.g){case 0:Udc(a,(Pnd(),Lnd));break;case 1:Udc(a,(Pnd(),Mnd));break;case 2:Sdc(a,(Pnd(),Lnd));break;case 3:Sdc(a,(Pnd(),Mnd));break;case 4:Vdc(a,(Pnd(),Lnd));break;case 5:Vdc(a,(Pnd(),Mnd));}b.Vg()} -function qke(a,b){nke();var c,d,e;if(b.Jk()){return true}else if(b.Ik()==-2){if(b==(Lle(),Jle)||b==Gle||b==Hle||b==Ile){return true}else{e=a.Dh();if(BYd(e,b)>=0){return false}else{c=Eee((lke(),jke),e,b);if(!c){return true}else{d=c.Ik();return (d>1||d==-1)&&yfe(Qee(jke,c))!=3}}}}else{return false}} -function _4b(a,b,c,d){var e,f,g,h,i;h=AGd(RD(QHd((!b.b&&(b.b=new Yie(E4,b,4,7)),b.b),0),84));i=AGd(RD(QHd((!b.c&&(b.c=new Yie(E4,b,5,8)),b.c),0),84));if(vCd(h)==vCd(i)){return null}if(NGd(i,h)){return null}g=kzd(b);if(g==c){return d}else{f=RD(Wjb(a.a,g),10);if(f){e=f.e;if(e){return e}}}return null} -function uHc(a,b,c){var d,e,f,g,h;c.Ug('Longest path to source layering',1);a.a=b;h=a.a.a;a.b=$C(kE,Pwe,28,h.c.length,15,1);d=0;for(g=new Anb(h);g.a<g.c.c.length;){e=RD(ynb(g),10);e.p=d;a.b[d]=-1;++d}for(f=new Anb(h);f.a<f.c.c.length;){e=RD(ynb(f),10);wHc(a,e)}h.c.length=0;a.a=null;a.b=null;c.Vg()} -function BKc(a,b,c){var d,e,f,g,h,i;d=pKc(c,a.length);g=a[d];f=qKc(c,g.length);if(g[f].k!=(r3b(),m3b)){return}i=b.j;for(e=0;e<i.c.length;e++){h=(tFb(e,i.c.length),RD(i.c[e],12));if((c?h.j==(qpd(),Xod):h.j==(qpd(),ppd))&&Heb(TD(mQb(h,(Ywc(),nwc))))){$mb(i,e,RD(mQb(g[f],(Ywc(),Awc)),12));f+=c?1:-1}}} -function n8c(a,b){var c,d,e,f,g,h,i,j;b.Ug('Greedy Width Approximator',1);c=Kfb(UD(Gxd(a,(X7c(),x7c))));i=RD(Gxd(a,N7c),107);f=RD(Gxd(a,U7c),394);g=Heb(TD(Gxd(a,T7c)));h=Kfb(UD(Gxd(a,Q7c)));j=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);Bad(j);e=new g8c(c,f,g);d=c8c(e,j,h,i);Ixd(a,(X6c(),W6c),d.c);b.Vg()} -function yKd(a){if(a.g==null){switch(a.p){case 0:a.g=qKd(a)?(Geb(),Feb):(Geb(),Eeb);break;case 1:a.g=$eb(rKd(a));break;case 2:a.g=hfb(sKd(a));break;case 3:a.g=tKd(a);break;case 4:a.g=new Tfb(uKd(a));break;case 6:a.g=Hgb(wKd(a));break;case 5:a.g=sgb(vKd(a));break;case 7:a.g=bhb(xKd(a));}}return a.g} -function HKd(a){if(a.n==null){switch(a.p){case 0:a.n=zKd(a)?(Geb(),Feb):(Geb(),Eeb);break;case 1:a.n=$eb(AKd(a));break;case 2:a.n=hfb(BKd(a));break;case 3:a.n=CKd(a);break;case 4:a.n=new Tfb(DKd(a));break;case 6:a.n=Hgb(FKd(a));break;case 5:a.n=sgb(EKd(a));break;case 7:a.n=bhb(GKd(a));}}return a.n} -function Pfe(a,b,c,d){var e,f,g,h,i;h=(nke(),RD(b,69).xk());if(qke(a.e,b)){if(b.Si()&&dge(a,b,d,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)){throw Adb(new agb(LIe))}}else{i=pke(a.e.Dh(),b);e=RD(a.g,124);for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())){throw Adb(new agb(gLe))}}}VGd(a,gge(a,b,c),h?RD(d,76):oke(b,d))} -function HGb(a){var b,c,d,e,f,g,h;for(f=new Anb(a.a.a);f.a<f.c.c.length;){d=RD(ynb(f),316);d.g=0;d.i=0;d.e.a.$b()}for(e=new Anb(a.a.a);e.a<e.c.c.length;){d=RD(ynb(e),316);for(c=d.a.a.ec().Kc();c.Ob();){b=RD(c.Pb(),60);for(h=b.c.Kc();h.Ob();){g=RD(h.Pb(),60);if(g.a!=d){Ysb(d.e,g);++g.a.g;++g.a.i}}}}} -function X8b(a){var b,c,d,e,f;e=RD(mQb(a,(yCc(),lBc)),21);f=RD(mQb(a,oBc),21);c=new rjd(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);b=new sjd(c);if(e.Hc((Qpd(),Mpd))){d=RD(mQb(a,nBc),8);if(f.Hc((dqd(),Ypd))){d.a<=0&&(d.a=20);d.b<=0&&(d.b=20)}b.a=$wnd.Math.max(c.a,d.a);b.b=$wnd.Math.max(c.b,d.b)}Y8b(a,c,b)} -function SYb(a,b){var c,d,e;b.a?(rAb(a.b,b.b),a.a[b.b.i]=RD(vAb(a.b,b.b),86),c=RD(uAb(a.b,b.b),86),!!c&&(a.a[c.i]=b.b),undefined):(d=RD(vAb(a.b,b.b),86),!!d&&d==a.a[b.b.i]&&!!d.d&&d.d!=b.b.d&&d.f.Fc(b.b),e=RD(uAb(a.b,b.b),86),!!e&&a.a[e.i]==b.b&&!!e.d&&e.d!=b.b.d&&b.b.f.Fc(e),wAb(a.b,b.b),undefined)} -function Oec(a,b){var c,d,e,f,g,h;f=a.d;h=Kfb(UD(mQb(a,(yCc(),FAc))));if(h<0){h=0;pQb(a,FAc,h)}b.o.b=h;g=$wnd.Math.floor(h/2);d=new R3b;Q3b(d,(qpd(),ppd));P3b(d,b);d.n.b=g;e=new R3b;Q3b(e,Xod);P3b(e,b);e.n.b=g;Z0b(a,d);c=new a1b;kQb(c,a);pQb(c,RAc,null);Y0b(c,e);Z0b(c,f);Nec(b,a,c);Lec(a,c);return c} -function URc(a){var b,c;c=RD(mQb(a,(Ywc(),kwc)),21);b=new ufd;if(c.Hc((ovc(),ivc))){ofd(b,ORc);ofd(b,QRc)}if(c.Hc(kvc)||Heb(TD(mQb(a,(yCc(),GAc))))){ofd(b,QRc);c.Hc(lvc)&&ofd(b,RRc)}c.Hc(hvc)&&ofd(b,NRc);c.Hc(nvc)&&ofd(b,SRc);c.Hc(jvc)&&ofd(b,PRc);c.Hc(evc)&&ofd(b,LRc);c.Hc(gvc)&&ofd(b,MRc);return b} -function Qjb(a,b){var c,d,e,f,g,h,i,j,k,l,m;d=a.d;f=b.d;h=d+f;i=a.e!=b.e?-1:1;if(h==2){k=Ndb(Cdb(a.a[0],yxe),Cdb(b.a[0],yxe));m=Ydb(k);l=Ydb(Udb(k,32));return l==0?new ajb(i,m):new cjb(i,2,cD(WC(kE,1),Pwe,28,15,[m,l]))}c=a.a;e=b.a;g=$C(kE,Pwe,28,h,15,1);Njb(c,d,e,f,g);j=new cjb(i,h,g);Rib(j);return j} -function Uyb(a,b,c,d){var e,f;if(!b){return c}else{e=a.a.Ne(c.d,b.d);if(e==0){d.d=qlb(b,c.e);d.b=true;return b}f=e<0?0:1;b.a[f]=Uyb(a,b.a[f],c,d);if(Vyb(b.a[f])){if(Vyb(b.a[1-f])){b.b=true;b.a[0].b=false;b.a[1].b=false}else{Vyb(b.a[f].a[f])?(b=azb(b,1-f)):Vyb(b.a[f].a[1-f])&&(b=_yb(b,1-f))}}}return b} -function nKb(a,b,c){var d,e,f,g;e=a.i;d=a.n;mKb(a,(ZJb(),WJb),e.c+d.b,c);mKb(a,YJb,e.c+e.b-d.c-c[2],c);g=e.b-d.b-d.c;if(c[0]>0){c[0]+=a.d;g-=c[0]}if(c[2]>0){c[2]+=a.d;g-=c[2]}f=$wnd.Math.max(0,g);c[1]=$wnd.Math.max(c[1],g);mKb(a,XJb,e.c+d.b+c[0]-(c[1]-g)/2,c);if(b==XJb){a.c.b=f;a.c.c=e.c+d.b+(f-g)/2}} -function D_b(){this.c=$C(iE,vxe,28,(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,15,1);this.b=$C(iE,vxe,28,cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]).length,15,1);this.a=$C(iE,vxe,28,cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]).length,15,1);Lnb(this.c,oxe);Lnb(this.b,pxe);Lnb(this.a,pxe)} -function rte(a,b,c){var d,e,f,g;if(b<=c){e=b;f=c}else{e=c;f=b}d=0;if(a.b==null){a.b=$C(kE,Pwe,28,2,15,1);a.b[0]=e;a.b[1]=f;a.c=true}else{d=a.b.length;if(a.b[d-1]+1==e){a.b[d-1]=f;return}g=$C(kE,Pwe,28,d+2,15,1);hib(a.b,0,g,0,d);a.b=g;a.b[d-1]>=e&&(a.c=false,a.a=false);a.b[d++]=e;a.b[d]=f;a.c||vte(a)}} -function Oqc(a,b,c){var d,e,f,g,h,i,j;j=b.d;a.a=new cnb(j.c.length);a.c=new Tsb;for(h=new Anb(j);h.a<h.c.c.length;){g=RD(ynb(h),105);f=new USc(null);Rmb(a.a,f);Zjb(a.c,g,f)}a.b=new Tsb;Mqc(a,b);for(d=0;d<j.c.length-1;d++){i=RD(Vmb(b.d,d),105);for(e=d+1;e<j.c.length;e++){Pqc(a,i,RD(Vmb(b.d,e),105),c)}}} -function Q2c(a){var b,c,d,e,f;e=new bnb;b=new btb((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));for(d=new is(Mr(zGd(a).a.Kc(),new ir));gs(d);){c=RD(hs(d),74);if(!ZD(QHd((!c.b&&(c.b=new Yie(E4,c,4,7)),c.b),0),193)){f=AGd(RD(QHd((!c.c&&(c.c=new Yie(E4,c,5,8)),c.c),0),84));b.a._b(f)||(ZEb(e.c,f),true)}}return e} -function Nqe(a,b,c){var d,e,f;a.e=c;a.d=0;a.b=0;a.f=1;a.i=b;(a.e&16)==16&&(a.i=use(a.i));a.j=a.i.length;Mqe(a);f=Qqe(a);if(a.d!=a.j)throw Adb(new Lqe(TId((Hde(),TIe))));if(a.g){for(d=0;d<a.g.a.c.length;d++){e=RD(eyb(a.g,d),592);if(a.f<=e.a)throw Adb(new Lqe(TId((Hde(),UIe))))}a.g.a.c.length=0}return f} -function BNc(a,b){var c,d,e,f,g,h,i;c=pxe;h=(r3b(),p3b);for(e=new Anb(b.a);e.a<e.c.c.length;){d=RD(ynb(e),10);f=d.k;if(f!=p3b){g=UD(mQb(d,(Ywc(),Cwc)));if(g==null){c=$wnd.Math.max(c,0);d.n.b=c+aFc(a.a,f,h)}else{d.n.b=(uFb(g),g)}}i=aFc(a.a,f,h);d.n.b<c+i+d.d.d&&(d.n.b=c+i+d.d.d);c=d.n.b+d.o.b+d.d.a;h=f}} -function w3c(a,b,c,d,e){var f,g,h,i,j,k;!!a.d&&a.d.Gg(e);f=RD(e.Xb(0),27);if(u3c(a,c,f,false)){return true}g=RD(e.Xb(e.gc()-1),27);if(u3c(a,d,g,true)){return true}if(p3c(a,e)){return true}for(k=e.Kc();k.Ob();){j=RD(k.Pb(),27);for(i=b.Kc();i.Ob();){h=RD(i.Pb(),27);if(o3c(a,j,h)){return true}}}return false} -function Ovd(a,b,c){var d,e,f,g,h,i,j,k,l,m;m=b.c.length;l=(j=a.Ih(c),RD(j>=0?a.Lh(j,false,true):Qvd(a,c,false),61));n:for(f=l.Kc();f.Ob();){e=RD(f.Pb(),58);for(k=0;k<m;++k){g=(tFb(k,b.c.length),RD(b.c[k],76));i=g.md();h=g.Lk();d=e.Nh(h,false);if(i==null?d!=null:!pb(i,d)){continue n}}return e}return null} -function o6b(a,b){var c,d,e,f,g,h,i;b.Ug('Comment post-processing',1);for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);d=new bnb;for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);i=RD(mQb(g,(Ywc(),Xwc)),15);c=RD(mQb(g,Vvc),15);if(!!i||!!c){p6b(g,i,c);!!i&&Tmb(d,i);!!c&&Tmb(d,c)}}Tmb(e.a,d)}b.Vg()} -function kac(a,b,c,d){var e,f,g,h;e=RD(e3b(b,(qpd(),ppd)).Kc().Pb(),12);f=RD(e3b(b,Xod).Kc().Pb(),12);for(h=new Anb(a.j);h.a<h.c.c.length;){g=RD(ynb(h),12);while(g.e.c.length!=0){Z0b(RD(Vmb(g.e,0),18),e)}while(g.g.c.length!=0){Y0b(RD(Vmb(g.g,0),18),f)}}c||pQb(b,(Ywc(),vwc),null);d||pQb(b,(Ywc(),wwc),null)} -function IGd(a,b,c){var d,e;if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i==0){return EGd(a)}else{d=RD(QHd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),0),166);if(b){sLd((!d.a&&(d.a=new XZd(D4,d,5)),d.a));Ozd(d,0);Pzd(d,0);Hzd(d,0);Izd(d,0)}if(c){e=(!a.a&&(a.a=new C5d(F4,a,6,6)),a.a);while(e.i>1){vLd(e,e.i-1)}}return d}} -function Vdc(a,b){var c,d,e,f,g,h,i;c=new wmb;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);i=true;d=0;for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);switch(g.k.g){case 4:++d;case 1:imb(c,g);break;case 0:Xdc(g,b);default:c.b==c.c||Wdc(c,d,i,false,b);i=false;d=0;}}c.b==c.c||Wdc(c,d,i,true,b)}} -function iMc(a,b){var c,d,e,f,g,h;c=0;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),12);$Lc(a.b,a.d[g.p]);for(e=new l4b(g.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);f=AMc(a,g==d.c?d.d:d.c);if(f>a.d[g.p]){c+=ZLc(a.b,f);hmb(a.a,sgb(f))}}while(!nmb(a.a)){XLc(a.b,RD(smb(a.a),17).a)}}return c} -function Uec(a){var b,c,d,e,f,g,h,i,j;a.a=new e6b;j=0;e=0;for(d=new Anb(a.i.b);d.a<d.c.c.length;){b=RD(ynb(d),30);b.p=e;for(i=new Anb(b.a);i.a<i.c.c.length;){h=RD(ynb(i),10);h.p=j;++j}++e}f=a.r==(aEc(),TDc);g=f?Qec:Pec;for(c=new Anb(a.i.b);c.a<c.c.c.length;){b=RD(ynb(c),30);_mb(b.a,g);d6b(a.a,sgb(b.p),b.a)}} -function zed(a,b,c){var d,e,f,g;f=(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i;for(e=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));e.e!=e.i.gc();){d=RD(bMd(e),27);(!d.a&&(d.a=new C5d(J4,d,10,11)),d.a).i==0||(f+=zed(a,d,false))}if(c){g=vCd(b);while(g){f+=(!g.a&&(g.a=new C5d(J4,g,10,11)),g.a).i;g=vCd(g)}}return f} -function vLd(a,b){var c,d,e,f;if(a.Pj()){d=null;e=a.Qj();a.Tj()&&(d=a.Vj(a.$i(b),null));c=a.Ij(4,f=THd(a,b),null,b,e);if(a.Mj()&&f!=null){d=a.Oj(f,d);if(!d){a.Jj(c)}else{d.nj(c);d.oj()}}else{if(!d){a.Jj(c)}else{d.nj(c);d.oj()}}return f}else{f=THd(a,b);if(a.Mj()&&f!=null){d=a.Oj(f,null);!!d&&d.oj()}return f}} -function LNb(a){var b,c,d,e,f,g,h,i,j,k;j=a.a;b=new _sb;i=0;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),226);k=0;tvb(c.b,new ONb);for(g=Sub(c.b,0);g.b!=g.d.c;){f=RD(evb(g),226);if(b.a._b(f)){e=c.c;h=f.c;k<h.d+h.a+j&&k+e.a+j>h.d&&(k=h.d+h.a+j)}}c.c.d=k;b.a.zc(c,b);i=$wnd.Math.max(i,c.c.d+c.c.a)}return i} -function ovc(){ovc=geb;fvc=new pvc('COMMENTS',0);hvc=new pvc('EXTERNAL_PORTS',1);ivc=new pvc('HYPEREDGES',2);jvc=new pvc('HYPERNODES',3);kvc=new pvc('NON_FREE_PORTS',4);lvc=new pvc('NORTH_SOUTH_PORTS',5);nvc=new pvc(FBe,6);evc=new pvc('CENTER_LABELS',7);gvc=new pvc('END_LABELS',8);mvc=new pvc('PARTITIONS',9)} -function PA(a,b,c,d,e){if(d<0){d=EA(a,e,cD(WC(qJ,1),Nve,2,6,[Cwe,Dwe,Ewe,Fwe,Gwe,Hwe,Iwe,Jwe,Kwe,Lwe,Mwe,Nwe]),b);d<0&&(d=EA(a,e,cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} -function RA(a,b,c,d,e){if(d<0){d=EA(a,e,cD(WC(qJ,1),Nve,2,6,[Cwe,Dwe,Ewe,Fwe,Gwe,Hwe,Iwe,Jwe,Kwe,Lwe,Mwe,Nwe]),b);d<0&&(d=EA(a,e,cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} -function TA(a,b,c,d,e,f){var g,h,i,j;h=32;if(d<0){if(b[0]>=a.length){return false}h=ihb(a,b[0]);if(h!=43&&h!=45){return false}++b[0];d=HA(a,b);if(d<0){return false}h==45&&(d=-d)}if(h==32&&b[0]-c==2&&e.b==2){i=new uB;j=i.q.getFullYear()-Owe+Owe-80;g=j%100;f.a=d==g;d+=(j/100|0)*100+(d<g?100:0)}f.p=d;return true} -function V4b(a,b){var c,d,e,f,g;if(!vCd(a)){return}g=RD(mQb(b,(yCc(),lBc)),181);dE(Gxd(a,BBc))===dE((Bod(),Aod))&&Ixd(a,BBc,zod);d=(lud(),new zud(vCd(a)));f=new Fud(!vCd(a)?null:new zud(vCd(a)),a);e=GJb(d,f,false,true);zsb(g,(Qpd(),Mpd));c=RD(mQb(b,nBc),8);c.a=$wnd.Math.max(e.a,c.a);c.b=$wnd.Math.max(e.b,c.b)} -function cec(a,b,c){var d,e,f,g,h,i;for(g=RD(mQb(a,(Ywc(),lwc)),15).Kc();g.Ob();){f=RD(g.Pb(),10);switch(RD(mQb(f,(yCc(),UAc)),171).g){case 2:g3b(f,b);break;case 4:g3b(f,c);}for(e=new is(Mr(W2b(f).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);if(!!d.c&&!!d.d){continue}h=!d.d;i=RD(mQb(d,Ewc),12);h?Z0b(d,i):Y0b(d,i)}}} -function epc(){epc=geb;Zoc=new fpc(_ye,0,(qpd(),Yod),Yod);apc=new fpc(bze,1,npd,npd);Yoc=new fpc(aze,2,Xod,Xod);dpc=new fpc(cze,3,ppd,ppd);_oc=new fpc('NORTH_WEST_CORNER',4,ppd,Yod);$oc=new fpc('NORTH_EAST_CORNER',5,Yod,Xod);cpc=new fpc('SOUTH_WEST_CORNER',6,npd,ppd);bpc=new fpc('SOUTH_EAST_CORNER',7,Xod,npd)} -function P2c(a){var b,c,d,e,f,g;f=new _sb;b=new btb((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));for(e=new is(Mr(zGd(a).a.Kc(),new ir));gs(e);){d=RD(hs(e),74);if(!ZD(QHd((!d.b&&(d.b=new Yie(E4,d,4,7)),d.b),0),193)){g=AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84));b.a._b(g)||(c=f.a.zc(g,f),c==null)}}return f} -function tid(){tid=geb;sid=cD(WC(lE,1),rxe,28,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368000,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]);$wnd.Math.pow(2,-65)} -function Ljb(){Ljb=geb;var a,b;Jjb=$C(uJ,Nve,92,32,0,1);Kjb=$C(uJ,Nve,92,32,0,1);a=1;for(b=0;b<=18;b++){Jjb[b]=(Pib(),Ddb(a,0)>=0?jjb(a):Xib(jjb(Odb(a))));Kjb[b]=Jdb(Sdb(a,b),0)?jjb(Sdb(a,b)):Xib(jjb(Odb(Sdb(a,b))));a=Ndb(a,5)}for(;b<Kjb.length;b++){Jjb[b]=Wib(Jjb[b-1],Jjb[1]);Kjb[b]=Wib(Kjb[b-1],(Pib(),Mib))}} -function tgc(a,b){var c,d,e,f,g;if(a.c.length==0){return new Ptd(sgb(0),sgb(0))}c=(tFb(0,a.c.length),RD(a.c[0],12)).j;g=0;f=b.g;d=b.g+1;while(g<a.c.length-1&&c.g<f){++g;c=(tFb(g,a.c.length),RD(a.c[g],12)).j}e=g;while(e<a.c.length-1&&c.g<d){++e;c=(tFb(g,a.c.length),RD(a.c[g],12)).j}return new Ptd(sgb(g),sgb(e))} -function NJc(a,b,c,d){var e,f,g,h,i,j,k;i=b3b(b,c);(c==(qpd(),npd)||c==ppd)&&(i=hv(i));g=false;do{e=false;for(f=0;f<i.gc()-1;f++){j=RD(i.Xb(f),12);h=RD(i.Xb(f+1),12);if(OJc(a,j,h,d)){g=true;CMc(a.a,RD(i.Xb(f),12),RD(i.Xb(f+1),12));k=RD(i.Xb(f+1),12);i.hd(f+1,RD(i.Xb(f),12));i.hd(f,k);e=true}}}while(e);return g} -function lZc(a,b,c){var d,e,f,g;c.Ug(MEe,1);e=RD(zDb(CDb(new SDb(null,new Swb(b.b,16)),new pZc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);mZc(a,e,0);for(g=Sub(b.b,0);g.b!=g.d.c;){f=RD(evb(g),39);d=Wjb(a.a,sgb(f.g))!=null?RD(Wjb(a.a,sgb(f.g)),17).a:0;pQb(f,(h_c(),f_c),sgb(d))}c.Vg()} -function o3c(a,b,c){var d,e,f,g,h,i,j,k;h=b.i-a.g/2;i=c.i-a.g/2;j=b.j-a.g/2;k=c.j-a.g/2;f=b.g+a.g;g=c.g+a.g;d=b.f+a.g;e=c.f+a.g;if(h<i+g&&i<h&&j<k+e&&k<j){return true}else if(i<h+f&&h<i&&k<j+d&&j<k){return true}else if(h<i+g&&i<h&&j<k&&k<j+d){return true}else if(i<h+f&&h<i&&j<k+e&&k<j){return true}return false} -function gdc(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=b.c.length;g=(tFb(c,b.c.length),RD(b.c[c],292));h=g.a.o.a;l=g.c;m=0;for(j=g.c;j<=g.f;j++){if(h<=a.a[j]){return j}k=a.a[j];i=null;for(e=c+1;e<f;e++){d=(tFb(e,b.c.length),RD(b.c[e],292));d.c<=j&&d.f>=j&&(i=d)}!!i&&(k=$wnd.Math.max(k,i.a.o.a));if(k>m){l=j;m=k}}return l} -function SNb(a){var b,c,d,e,f,g,h;f=new yAb(RD(Qb(new eOb),50));h=pxe;for(c=new Anb(a.d);c.a<c.c.c.length;){b=RD(ynb(c),226);h=b.c.c;while(f.a.gc()!=0){g=RD(f.a.Tc(),226);if(g.c.c+g.c.b<h){f.a.Bc(g)!=null}else{break}}for(e=f.a.ec().Kc();e.Ob();){d=RD(e.Pb(),226);Mub(d.b,b);Mub(b.b,d)}f.a.zc(b,(Geb(),Eeb))==null}} -function sZc(a,b,c){var d,e,f,g,h;if(!gr(b)){h=c.eh((ZD(b,16)?RD(b,16).gc():Kr(b.Kc()))/a.a|0);h.Ug(OEe,1);g=new vZc;f=null;for(e=b.Kc();e.Ob();){d=RD(e.Pb(),39);g=Al(cD(WC(cJ,1),rve,20,0,[g,new dXc(d)]));if(f){pQb(f,(q$c(),l$c),d);pQb(d,b$c,f);if(_Wc(d)==_Wc(f)){pQb(f,m$c,d);pQb(d,c$c,f)}}f=d}h.Vg();sZc(a,g,c)}} -function z1d(a,b){var c,d,e;if(b==null){for(d=(!a.a&&(a.a=new C5d(l7,a,9,5)),new dMd(a.a));d.e!=d.i.gc();){c=RD(bMd(d),694);e=c.c;if((e==null?c.zb:e)==null){return c}}}else{for(d=(!a.a&&(a.a=new C5d(l7,a,9,5)),new dMd(a.a));d.e!=d.i.gc();){c=RD(bMd(d),694);if(lhb(b,(e=c.c,e==null?c.zb:e))){return c}}}return null} -function BLb(a,b){var c;c=null;switch(b.g){case 1:a.e.pf((umd(),Cld))&&(c=RD(a.e.of(Cld),256));break;case 3:a.e.pf((umd(),Dld))&&(c=RD(a.e.of(Dld),256));break;case 2:a.e.pf((umd(),Bld))&&(c=RD(a.e.of(Bld),256));break;case 4:a.e.pf((umd(),Eld))&&(c=RD(a.e.of(Eld),256));}!c&&(c=RD(a.e.of((umd(),zld)),256));return c} -function $5c(a,b,c){var d,e,f,g,h,i;e=c;f=0;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),27);Ixd(g,($4c(),P4c),sgb(e++));i=Q2c(g);d=$wnd.Math.atan2(g.j+g.f/2,g.i+g.g/2);d+=d<0?dFe:0;d<0.7853981633974483||d>FFe?_mb(i,a.b):d<=FFe&&d>GFe?_mb(i,a.d):d<=GFe&&d>HFe?_mb(i,a.c):d<=HFe&&_mb(i,a.a);f=$5c(a,i,f)}return e} -function sTc(a,b,c,d){var e,f,g,h,i,j;e=(d.c+d.a)/2;Xub(b.j);Mub(b.j,e);Xub(c.e);Mub(c.e,e);j=new ATc;for(h=new Anb(a.f);h.a<h.c.c.length;){f=RD(ynb(h),132);i=f.a;uTc(j,b,i);uTc(j,c,i)}for(g=new Anb(a.k);g.a<g.c.c.length;){f=RD(ynb(g),132);i=f.b;uTc(j,b,i);uTc(j,c,i)}j.b+=2;j.a+=nTc(b,a.q);j.a+=nTc(a.q,c);return j} -function U_c(a,b,c){var d;c.Ug('Processor arrange node',1);Heb(TD(mQb(b,(h_c(),G$c))));d=RD(Lvb(DDb(CDb(new SDb(null,new Swb(b.b,16)),new c0c))),39);a.a=RD(mQb(b,g_c),353);a.a==(s_c(),q_c)||a.a==p_c?T_c(a,new mob(cD(WC(Z$,1),NEe,39,0,[d])),c.eh(1)):a.a==o_c&&S_c(a,new mob(cD(WC(Z$,1),NEe,39,0,[d])),c.eh(1));c.Vg()} -function X7c(){X7c=geb;x7c=new mGd((umd(),Dkd),1.3);G7c=new mGd(mld,(Geb(),false));O7c=new A3b(15);N7c=new mGd(tld,O7c);Q7c=new mGd(fmd,15);y7c=Kkd;F7c=kld;H7c=nld;I7c=pld;E7c=ild;J7c=sld;P7c=Lld;U7c=(u7c(),p7c);T7c=o7c;W7c=t7c;V7c=r7c;M7c=k7c;L7c=j7c;K7c=i7c;S7c=n7c;B7c=ald;C7c=bld;A7c=g7c;z7c=f7c;D7c=h7c;R7c=m7c} -function MKb(a){var b,c,d,e,f,g,h;c=a.i;b=a.n;h=c.d;a.f==(vLb(),tLb)?(h+=(c.a-a.e.b)/2):a.f==sLb&&(h+=c.a-a.e.b);for(e=new Anb(a.d);e.a<e.c.c.length;){d=RD(ynb(e),187);g=d.Mf();f=new pjd;f.b=h;h+=g.b+a.a;switch(a.b.g){case 0:f.a=c.c+b.b;break;case 1:f.a=c.c+b.b+(c.b-g.a)/2;break;case 2:f.a=c.c+c.b-b.c-g.a;}d.Of(f)}} -function OKb(a){var b,c,d,e,f,g,h;c=a.i;b=a.n;h=c.c;a.b==(EKb(),BKb)?(h+=(c.b-a.e.a)/2):a.b==DKb&&(h+=c.b-a.e.a);for(e=new Anb(a.d);e.a<e.c.c.length;){d=RD(ynb(e),187);g=d.Mf();f=new pjd;f.a=h;h+=g.a+a.a;switch(a.f.g){case 0:f.b=c.d+b.d;break;case 1:f.b=c.d+b.d+(c.a-g.b)/2;break;case 2:f.b=c.d+c.a-b.a-g.b;}d.Of(f)}} -function U7b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;k=c.a.c;g=c.a.c+c.a.b;f=RD(Wjb(c.c,b),467);n=f.f;o=f.a;i=new rjd(k,n);l=new rjd(g,o);e=k;c.p||(e+=a.c);e+=c.F+c.v*a.b;j=new rjd(e,n);m=new rjd(e,o);zjd(b.a,cD(WC(l3,1),Nve,8,0,[i,j]));h=c.d.a.gc()>1;if(h){d=new rjd(e,c.b);Mub(b.a,d)}zjd(b.a,cD(WC(l3,1),Nve,8,0,[m,l]))} -function TGc(a,b,c){var d,e;if(b<a.d.b.c.length){a.b=RD(Vmb(a.d.b,b),30);a.a=RD(Vmb(a.d.b,b-1),30);a.c=b}else{a.a=new R4b(a.d);a.a.p=b-1;Rmb(a.d.b,a.a);a.b=new R4b(a.d);a.b.p=b;Rmb(a.d.b,a.b);a.c=b}g3b(c,a.b);for(e=new is(Mr(Z2b(c).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);!d.c.i.c&&d.c.i.k==(r3b(),n3b)&&g3b(d.c.i,a.a)}} -function Gpd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,qHe),'ELK Randomizer'),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new Jpd)));Agd(a,qHe,Eze,Cpd);Agd(a,qHe,_ze,15);Agd(a,qHe,bAe,sgb(0));Agd(a,qHe,Dze,Yze)} -function Gqe(){Gqe=geb;var a,b,c,d,e,f;Eqe=$C(gE,YHe,28,255,15,1);Fqe=$C(hE,zwe,28,16,15,1);for(b=0;b<255;b++){Eqe[b]=-1}for(c=57;c>=48;c--){Eqe[c]=c-48<<24>>24}for(d=70;d>=65;d--){Eqe[d]=d-65+10<<24>>24}for(e=102;e>=97;e--){Eqe[e]=e-97+10<<24>>24}for(f=0;f<10;f++)Fqe[f]=48+f&Bwe;for(a=10;a<=15;a++)Fqe[a]=65+a-10&Bwe} -function yYc(a,b){b.Ug('Process graph bounds',1);pQb(a,(q$c(),ZZc),Uvb(TCb(HDb(new SDb(null,new Swb(a.b,16)),new DYc))));pQb(a,_Zc,Uvb(TCb(HDb(new SDb(null,new Swb(a.b,16)),new FYc))));pQb(a,YZc,Uvb(SCb(HDb(new SDb(null,new Swb(a.b,16)),new HYc))));pQb(a,$Zc,Uvb(SCb(HDb(new SDb(null,new Swb(a.b,16)),new JYc))));b.Vg()} -function PWb(a){var b,c,d,e,f;e=RD(mQb(a,(yCc(),lBc)),21);f=RD(mQb(a,oBc),21);c=new rjd(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);b=new sjd(c);if(e.Hc((Qpd(),Mpd))){d=RD(mQb(a,nBc),8);if(f.Hc((dqd(),Ypd))){d.a<=0&&(d.a=20);d.b<=0&&(d.b=20)}b.a=$wnd.Math.max(c.a,d.a);b.b=$wnd.Math.max(c.b,d.b)}Heb(TD(mQb(a,mBc)))||QWb(a,c,b)} -function lOc(a,b){var c,d,e,f;for(f=b3b(b,(qpd(),npd)).Kc();f.Ob();){d=RD(f.Pb(),12);c=RD(mQb(d,(Ywc(),Iwc)),10);!!c&&rIb(uIb(tIb(vIb(sIb(new wIb,0),0.1),a.i[b.p].d),a.i[c.p].a))}for(e=b3b(b,Yod).Kc();e.Ob();){d=RD(e.Pb(),12);c=RD(mQb(d,(Ywc(),Iwc)),10);!!c&&rIb(uIb(tIb(vIb(sIb(new wIb,0),0.1),a.i[c.p].d),a.i[b.p].a))}} -function oYd(a){var b,c,d,e,f,g;if(!a.c){g=new W$d;b=iYd;f=b.a.zc(a,b);if(f==null){for(d=new dMd(tYd(a));d.e!=d.i.gc();){c=RD(bMd(d),89);e=i2d(c);ZD(e,90)&&YGd(g,oYd(RD(e,29)));WGd(g,c)}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}T$d(g);VHd(g);a.c=new N$d((RD(QHd(xYd((lTd(),kTd).o),15),19),g.i),g.g);yYd(a).b&=-33}return a.c} -function Dre(a){var b;if(a.c!=10)throw Adb(new Lqe(TId((Hde(),VIe))));b=a.a;switch(b){case 110:b=10;break;case 114:b=13;break;case 116:b=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw Adb(new Lqe(TId((Hde(),xJe))));}return b} -function GD(a){var b,c,d,e,f;if(a.l==0&&a.m==0&&a.h==0){return '0'}if(a.h==fxe&&a.m==0&&a.l==0){return '-9223372036854775808'}if(a.h>>19!=0){return '-'+GD(xD(a))}c=a;d='';while(!(c.l==0&&c.m==0&&c.h==0)){e=fD(ixe);c=iD(c,e,true);b=''+FD(eD);if(!(c.l==0&&c.m==0&&c.h==0)){f=9-b.length;for(;f>0;f--){b='0'+b}}d=b+d}return d} -function tkc(a){var b,c,d,e,f,g,h;b=false;c=0;for(e=new Anb(a.d.b);e.a<e.c.c.length;){d=RD(ynb(e),30);d.p=c++;for(g=new Anb(d.a);g.a<g.c.c.length;){f=RD(ynb(g),10);!b&&!gr(W2b(f))&&(b=true)}}h=ysb((Cmd(),Amd),cD(WC(s3,1),jwe,88,0,[ymd,zmd]));if(!b){zsb(h,Bmd);zsb(h,xmd)}a.a=new dGb(h);akb(a.f);akb(a.b);akb(a.e);akb(a.g)} -function Ftb(){if(!Object.create||!Object.getOwnPropertyNames){return false}var a='__proto__';var b=Object.create(null);if(b[a]!==undefined){return false}var c=Object.getOwnPropertyNames(b);if(c.length!=0){return false}b[a]=42;if(b[a]!==42){return false}if(Object.getOwnPropertyNames(b).length==0){return false}return true} -function c_b(a,b,c){var d,e,f,g,h,i,j,k,l;d=c.c;e=c.d;h=K3b(b.c);i=K3b(b.d);if(d==b.c){h=d_b(a,h,e);i=e_b(b.d)}else{h=e_b(b.c);i=d_b(a,i,e)}j=new Fjd(b.a);Pub(j,h,j.a,j.a.a);Pub(j,i,j.c.b,j.c);g=b.c==d;l=new E_b;for(f=0;f<j.b-1;++f){k=new Ptd(RD(ju(j,f),8),RD(ju(j,f+1),8));g&&f==0||!g&&f==j.b-2?(l.b=k):Rmb(l.a,k)}return l} -function W1b(a,b){var c,d,e,f;f=a.j.g-b.j.g;if(f!=0){return f}c=RD(mQb(a,(yCc(),CBc)),17);d=RD(mQb(b,CBc),17);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}switch(a.j.g){case 1:return Qfb(a.n.a,b.n.a);case 2:return Qfb(a.n.b,b.n.b);case 3:return Qfb(b.n.a,a.n.a);case 4:return Qfb(b.n.b,a.n.b);default:throw Adb(new dgb(UAe));}} -function X9b(a,b,c,d){var e,f,g,h,i;if(Kr((U9b(),new is(Mr(W2b(b).a.Kc(),new ir))))>=a.a){return -1}if(!W9b(b,c)){return -1}if(gr(RD(d.Kb(b),20))){return 1}e=0;for(g=RD(d.Kb(b),20).Kc();g.Ob();){f=RD(g.Pb(),18);i=f.c.i==b?f.d.i:f.c.i;h=X9b(a,i,c,d);if(h==-1){return -1}e=$wnd.Math.max(e,h);if(e>a.c-1){return -1}}return e+1} -function _Gd(a,b){var c,d,e,f,g,h;if(dE(b)===dE(a)){return true}if(!ZD(b,15)){return false}d=RD(b,15);h=a.gc();if(d.gc()!=h){return false}g=d.Kc();if(a.Yi()){for(c=0;c<h;++c){e=a.Vi(c);f=g.Pb();if(e==null?f!=null:!pb(e,f)){return false}}}else{for(c=0;c<h;++c){e=a.Vi(c);f=g.Pb();if(dE(e)!==dE(f)){return false}}}return true} -function RNd(a,b){var c,d,e,f,g,h;if(a.f>0){a._j();if(b!=null){for(f=0;f<a.d.length;++f){c=a.d[f];if(c){d=RD(c.g,379);h=c.i;for(g=0;g<h;++g){e=d[g];if(pb(b,e.md())){return true}}}}}else{for(f=0;f<a.d.length;++f){c=a.d[f];if(c){d=RD(c.g,379);h=c.i;for(g=0;g<h;++g){e=d[g];if(dE(b)===dE(e.md())){return true}}}}}}return false} -function see(a,b){var c,d,e;c=b.qi(a.a);if(c){e=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),'affiliation'));if(e!=null){d=thb(e,Fhb(35));return d==-1?Lee(a,Uee(a,BXd(b.qk())),e):d==0?Lee(a,null,(BFb(1,e.length+1),e.substr(1))):Lee(a,(AFb(0,d,e.length),e.substr(0,d)),(BFb(d+1,e.length+1),e.substr(d+1)))}}return null} -function v9b(a,b,c){var d,e,f,g;c.Ug('Orthogonally routing hierarchical port edges',1);a.a=0;d=y9b(b);B9b(b,d);A9b(a,b,d);w9b(b);e=RD(mQb(b,(yCc(),BBc)),101);f=b.b;u9b((tFb(0,f.c.length),RD(f.c[0],30)),e,b);u9b(RD(Vmb(f,f.c.length-1),30),e,b);g=b.b;s9b((tFb(0,g.c.length),RD(g.c[0],30)));s9b(RD(Vmb(g,g.c.length-1),30));c.Vg()} -function JAd(a){switch(a){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:{return a-48<<24>>24}case 97:case 98:case 99:case 100:case 101:case 102:{return a-97+10<<24>>24}case 65:case 66:case 67:case 68:case 69:case 70:{return a-65+10<<24>>24}default:{throw Adb(new Vgb('Invalid hexadecimal'))}}} -function iIb(){iIb=geb;hIb=new jIb('SPIRAL',0);cIb=new jIb('LINE_BY_LINE',1);dIb=new jIb('MANHATTAN',2);bIb=new jIb('JITTER',3);fIb=new jIb('QUADRANTS_LINE_BY_LINE',4);gIb=new jIb('QUADRANTS_MANHATTAN',5);eIb=new jIb('QUADRANTS_JITTER',6);aIb=new jIb('COMBINE_LINE_BY_LINE_MANHATTAN',7);_Hb=new jIb('COMBINE_JITTER_MANHATTAN',8)} -function Urc(a,b,c,d){var e,f,g,h,i,j;i=Zrc(a,c);j=Zrc(b,c);e=false;while(!!i&&!!j){if(d||Xrc(i,j,c)){g=Zrc(i,c);h=Zrc(j,c);asc(b);asc(a);f=i.c;Hec(i,false);Hec(j,false);if(c){f3b(b,j.p,f);b.p=j.p;f3b(a,i.p+1,f);a.p=i.p}else{f3b(a,i.p,f);a.p=i.p;f3b(b,j.p+1,f);b.p=j.p}g3b(i,null);g3b(j,null);i=g;j=h;e=true}else{break}}return e} -function aDc(a){switch(a.g){case 0:return new XHc;case 1:return new pHc;case 3:return new GGc;case 4:return new gHc;case 5:return new jIc;case 6:return new IHc;case 2:return new xHc;case 7:return new pGc;case 8:return new YGc;default:throw Adb(new agb('No implementation is available for the layerer '+(a.f!=null?a.f:''+a.g)));}} -function tIc(a,b,c,d){var e,f,g,h,i;e=false;f=false;for(h=new Anb(d.j);h.a<h.c.c.length;){g=RD(ynb(h),12);dE(mQb(g,(Ywc(),Awc)))===dE(c)&&(g.g.c.length==0?g.e.c.length==0||(e=true):(f=true))}i=0;e&&e^f?(i=c.j==(qpd(),Yod)?-a.e[d.c.p][d.p]:b-a.e[d.c.p][d.p]):f&&e^f?(i=a.e[d.c.p][d.p]+1):e&&f&&(i=c.j==(qpd(),Yod)?0:b/2);return i} -function lSd(a,b,c,d,e,f,g,h){var i,j,k;i=0;b!=null&&(i^=ohb(b.toLowerCase()));c!=null&&(i^=ohb(c));d!=null&&(i^=ohb(d));g!=null&&(i^=ohb(g));h!=null&&(i^=ohb(h));for(j=0,k=f.length;j<k;j++){i^=ohb(f[j])}a?(i|=256):(i&=-257);e?(i|=16):(i&=-17);this.f=i;this.i=b==null?null:(uFb(b),b);this.a=c;this.d=d;this.j=f;this.g=g;this.e=h} -function d3b(a,b,c){var d,e;e=null;switch(b.g){case 1:e=(J3b(),E3b);break;case 2:e=(J3b(),G3b);}d=null;switch(c.g){case 1:d=(J3b(),F3b);break;case 2:d=(J3b(),D3b);break;case 3:d=(J3b(),H3b);break;case 4:d=(J3b(),I3b);}return !!e&&!!d?dr(a.j,new Yb(new mob(cD(WC(pE,1),rve,178,0,[RD(Qb(e),178),RD(Qb(d),178)])))):(yob(),yob(),vob)} -function K8b(a){var b,c,d;b=RD(mQb(a,(yCc(),nBc)),8);pQb(a,nBc,new rjd(b.b,b.a));switch(RD(mQb(a,Rzc),255).g){case 1:pQb(a,Rzc,(Rjd(),Qjd));break;case 2:pQb(a,Rzc,(Rjd(),Mjd));break;case 3:pQb(a,Rzc,(Rjd(),Ojd));break;case 4:pQb(a,Rzc,(Rjd(),Pjd));}if((!a.q?(yob(),yob(),wob):a.q)._b(IBc)){c=RD(mQb(a,IBc),8);d=c.a;c.a=c.b;c.b=d}} -function Pmc(a,b,c,d,e,f){this.b=c;this.d=e;if(a>=b.length){throw Adb(new veb('Greedy SwitchDecider: Free layer not in graph.'))}this.c=b[a];this.e=new DMc(d);rMc(this.e,this.c,(qpd(),ppd));this.i=new DMc(d);rMc(this.i,this.c,Xod);this.f=new Kmc(this.c);this.a=!f&&e.i&&!e.s&&this.c[0].k==(r3b(),m3b);this.a&&Nmc(this,a,b.length)} -function $Mb(a,b){var c,d,e,f,g,h;f=!a.B.Hc((dqd(),Wpd));g=a.B.Hc(Zpd);a.a=new wKb(g,f,a.c);!!a.n&&C2b(a.a.n,a.n);cLb(a.g,(ZJb(),XJb),a.a);if(!b){d=new dLb(1,f,a.c);d.n.a=a.k;Wrb(a.p,(qpd(),Yod),d);e=new dLb(1,f,a.c);e.n.d=a.k;Wrb(a.p,npd,e);h=new dLb(0,f,a.c);h.n.c=a.k;Wrb(a.p,ppd,h);c=new dLb(0,f,a.c);c.n.b=a.k;Wrb(a.p,Xod,c)}} -function zkc(a){var b,c,d;b=RD(mQb(a.d,(yCc(),yAc)),223);switch(b.g){case 2:c=rkc(a);break;case 3:c=(d=new bnb,FDb(CDb(GDb(EDb(EDb(new SDb(null,new Swb(a.d.b,16)),new wlc),new ylc),new Alc),new Kkc),new Clc(d)),d);break;default:throw Adb(new dgb('Compaction not supported for '+b+' edges.'));}ykc(a,c);xgb(new Xkb(a.g),new ilc(a))} -function qYc(a,b){var c,d,e,f,g,h,i;b.Ug('Process directions',1);c=RD(mQb(a,(h_c(),H$c)),88);if(c!=(Cmd(),xmd)){for(e=Sub(a.b,0);e.b!=e.d.c;){d=RD(evb(e),39);h=RD(mQb(d,(q$c(),o$c)),17).a;i=RD(mQb(d,p$c),17).a;switch(c.g){case 4:i*=-1;break;case 1:f=h;h=i;i=f;break;case 2:g=h;h=-i;i=g;}pQb(d,o$c,sgb(h));pQb(d,p$c,sgb(i))}}b.Vg()} -function led(a,b){var c;c=new qQb;!!b&&kQb(c,RD(Wjb(a.a,H4),96));ZD(b,422)&&kQb(c,RD(Wjb(a.a,L4),96));if(ZD(b,366)){kQb(c,RD(Wjb(a.a,I4),96));return c}ZD(b,84)&&kQb(c,RD(Wjb(a.a,E4),96));if(ZD(b,207)){kQb(c,RD(Wjb(a.a,J4),96));return c}if(ZD(b,193)){kQb(c,RD(Wjb(a.a,K4),96));return c}ZD(b,326)&&kQb(c,RD(Wjb(a.a,G4),96));return c} -function a_b(a){var b,c,d,e,f,g,h,i;i=new m_b;for(h=new Anb(a.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k==(r3b(),m3b)){continue}$$b(i,g,new pjd);for(f=new is(Mr(a3b(g).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(e.c.i.k==m3b||e.d.i.k==m3b){continue}for(d=Sub(e.a,0);d.b!=d.d.c;){c=RD(evb(d),8);b=c;k_b(i,new eZb(b.a,b.b))}}}return i} -function Kcd(){Kcd=geb;Jcd=new jGd(iGe);Icd=(_cd(),$cd);Hcd=new lGd(nGe,Icd);Gcd=(ldd(),kdd);Fcd=new lGd(jGe,Gcd);Ecd=(Xbd(),Tbd);Dcd=new lGd(kGe,Ecd);zcd=new lGd(lGe,null);Ccd=(Mbd(),Kbd);Bcd=new lGd(mGe,Ccd);vcd=(sbd(),rbd);ucd=new lGd(oGe,vcd);wcd=new lGd(pGe,(Geb(),false));xcd=new lGd(qGe,sgb(64));ycd=new lGd(rGe,true);Acd=Lbd} -function eHc(a,b){var c,d,e,f,g,h,i,j,k,l;a.p=1;e=a.c;l=new Iub;for(k=c3b(a,(BEc(),zEc)).Kc();k.Ob();){j=RD(k.Pb(),12);for(d=new Anb(j.g);d.a<d.c.c.length;){c=RD(ynb(d),18);i=c.d.i;if(a!=i){f=i.c;if(f.p<=e.p){g=e.p+1;if(g==b.b.c.length){h=new R4b(b);h.p=g;Rmb(b.b,h);g3b(i,h)}else{h=RD(Vmb(b.b,g),30);g3b(i,h)}l.a.zc(i,l)}}}}return l} -function mXc(a,b){var c,d;c=RD(mQb(a,(q$c(),TZc)),15);if(!c||c.gc()<1){return null}else if(c.gc()==1){return RD(c.Xb(0),39)}d=null;switch(b.g){case 2:d=RD(Lvb(KDb(c.Oc(),new mYc)),39);break;case 1:d=RD(Lvb(JDb(c.Oc(),new KXc)),39);break;case 4:d=RD(Lvb(KDb(c.Oc(),new OXc)),39);break;case 3:d=RD(Lvb(JDb(c.Oc(),new SXc)),39);}return d} -function usc(a){var b,c,d,e,f,g;if(a.a!=null){return}a.a=$C(xdb,Hye,28,a.c.b.c.length,16,1);a.a[0]=false;if(nQb(a.c,(yCc(),wCc))){d=RD(mQb(a.c,wCc),15);for(c=d.Kc();c.Ob();){b=RD(c.Pb(),17).a;b>0&&b<a.a.length&&(a.a[b]=false)}}else{g=new Anb(a.c.b);g.a<g.c.c.length&&ynb(g);e=1;while(g.a<g.c.c.length){f=RD(ynb(g),30);a.a[e++]=xsc(f)}}} -function X6c(){X6c=geb;M6c=new jGd('additionalHeight');N6c=new jGd('drawingHeight');O6c=new jGd('drawingWidth');R6c=new jGd('minHeight');U6c=new jGd('minWidth');V6c=new jGd('rows');W6c=new jGd('targetWidth');T6c=new kGd('minRowIncrease',0);Q6c=new kGd('maxRowIncrease',0);S6c=new kGd('minRowDecrease',0);P6c=new kGd('maxRowDecrease',0)} -function r$d(a,b){var c,d,e,f;e=a.b;switch(b){case 1:{a.b|=1;a.b|=4;a.b|=8;break}case 2:{a.b|=2;a.b|=4;a.b|=8;break}case 4:{a.b|=1;a.b|=2;a.b|=4;a.b|=8;break}case 3:{a.b|=16;a.b|=8;break}case 0:{a.b|=32;a.b|=16;a.b|=8;a.b|=1;a.b|=2;a.b|=4;break}}if(a.b!=e&&!!a.c){for(d=new dMd(a.c);d.e!=d.i.gc();){f=RD(bMd(d),481);c=yYd(f);v$d(c,b)}}} -function CKc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;e=false;for(g=b,h=0,i=g.length;h<i;++h){f=g[h];Heb((Geb(),f.e?true:false))&&!RD(Vmb(a.b,f.e.p),219).s&&(e=e|(j=f.e,k=RD(Vmb(a.b,j.p),219),l=k.e,m=qKc(c,l.length),n=l[m][0],n.k==(r3b(),m3b)?(l[m]=AKc(f,l[m],c?(qpd(),ppd):(qpd(),Xod))):k.c.mg(l,c),o=DKc(a,k,c,d),BKc(k.e,k.o,c),o))}return e} -function Aed(a,b){var c,d,e,f,g;f=(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i;for(e=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));e.e!=e.i.gc();){d=RD(bMd(e),27);if(dE(Gxd(d,(umd(),Xkd)))!==dE((Fnd(),End))){g=RD(Gxd(b,Tld),143);c=RD(Gxd(d,Tld),143);(g==c||!!g&&Nfd(g,c))&&(!d.a&&(d.a=new C5d(J4,d,10,11)),d.a).i!=0&&(f+=Aed(a,d))}}return f} -function Toc(a){var b,c,d,e,f,g,h;d=0;h=0;for(g=new Anb(a.d);g.a<g.c.c.length;){f=RD(ynb(g),105);e=RD(zDb(CDb(new SDb(null,new Swb(f.j,16)),new Cpc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);c=null;if(d<=h){c=(qpd(),Yod);d+=e.gc()}else if(h<d){c=(qpd(),npd);h+=e.gc()}b=c;FDb(GDb(e.Oc(),new qpc),new spc(b))}} -function D6b(a){var b,c,d,e,f;f=new cnb(a.a.c.length);for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),10);c=RD(mQb(d,(yCc(),UAc)),171);b=null;switch(c.g){case 1:case 2:b=(huc(),guc);break;case 3:case 4:b=(huc(),euc);}if(b){pQb(d,(Ywc(),bwc),(huc(),guc));b==euc?F6b(d,c,(BEc(),yEc)):b==guc&&F6b(d,c,(BEc(),zEc))}else{ZEb(f.c,d)}}return f} -function Snc(a){var b,c,d,e,f,g,h,i;a.b=new hj(new mob((qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]))),new mob((joc(),cD(WC(UV,1),jwe,372,0,[ioc,hoc,goc]))));for(g=cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]),h=0,i=g.length;h<i;++h){f=g[h];for(c=cD(WC(UV,1),jwe,372,0,[ioc,hoc,goc]),d=0,e=c.length;d<e;++d){b=c[d];aj(a.b,f,b,new bnb)}}} -function BMb(a,b){var c,d,e,f,g,h,i,j,k,l;g=RD(RD(Qc(a.r,b),21),87);h=a.u.Hc((Pod(),Nod));c=a.u.Hc(Kod);d=a.u.Hc(Jod);j=a.u.Hc(Ood);l=a.B.Hc((dqd(),cqd));k=!c&&!d&&(j||g.gc()==2);yMb(a,b);e=null;i=null;if(h){f=g.Kc();e=RD(f.Pb(),117);i=e;while(f.Ob()){i=RD(f.Pb(),117)}e.d.b=0;i.d.c=0;k&&!e.a&&(e.d.c=0)}if(l){CMb(g);if(h){e.d.b=0;i.d.c=0}}} -function JNb(a,b){var c,d,e,f,g,h,i,j,k,l;g=RD(RD(Qc(a.r,b),21),87);h=a.u.Hc((Pod(),Nod));c=a.u.Hc(Kod);d=a.u.Hc(Jod);i=a.u.Hc(Ood);l=a.B.Hc((dqd(),cqd));j=!c&&!d&&(i||g.gc()==2);HNb(a,b);k=null;e=null;if(h){f=g.Kc();k=RD(f.Pb(),117);e=k;while(f.Ob()){e=RD(f.Pb(),117)}k.d.d=0;e.d.a=0;j&&!k.a&&(k.d.a=0)}if(l){KNb(g);if(h){k.d.d=0;e.d.a=0}}} -function ONc(a,b,c){var d,e,f,g,h,i,j,k;e=b.k;if(b.p>=0){return false}else{b.p=c.b;Rmb(c.e,b)}if(e==(r3b(),o3b)||e==q3b){for(g=new Anb(b.j);g.a<g.c.c.length;){f=RD(ynb(g),12);for(k=(d=new Anb((new _3b(f)).a.g),new c4b(d));xnb(k.a);){j=RD(ynb(k.a),18).d;h=j.i;i=h.k;if(b.c!=h.c){if(i==o3b||i==q3b){if(ONc(a,h,c)){return true}}}}}}return true} -function GWd(a){var b;if((a.Db&64)!=0)return cWd(a);b=new Shb(cWd(a));b.a+=' (changeable: ';Ohb(b,(a.Bb&gwe)!=0);b.a+=', volatile: ';Ohb(b,(a.Bb&cKe)!=0);b.a+=', transient: ';Ohb(b,(a.Bb&qxe)!=0);b.a+=', defaultValueLiteral: ';Nhb(b,a.j);b.a+=', unsettable: ';Ohb(b,(a.Bb&bKe)!=0);b.a+=', derived: ';Ohb(b,(a.Bb&Ove)!=0);b.a+=')';return b.a} -function tee(a,b){var c,d,e,f,g;e=b.qi(a.a);if(e){d=(!e.b&&(e.b=new SVd((JTd(),FTd),C8,e)),e.b);c=WD($Nd(d,DKe));if(c!=null){f=c.lastIndexOf('#');g=f==-1?Wee(a,b.jk(),c):f==0?Vee(a,null,(BFb(1,c.length+1),c.substr(1))):Vee(a,(AFb(0,f,c.length),c.substr(0,f)),(BFb(f+1,c.length+1),c.substr(f+1)));if(ZD(g,156)){return RD(g,156)}}}return null} -function xee(a,b){var c,d,e,f,g;d=b.qi(a.a);if(d){c=(!d.b&&(d.b=new SVd((JTd(),FTd),C8,d)),d.b);f=WD($Nd(c,$Ke));if(f!=null){e=f.lastIndexOf('#');g=e==-1?Wee(a,b.jk(),f):e==0?Vee(a,null,(BFb(1,f.length+1),f.substr(1))):Vee(a,(AFb(0,e,f.length),f.substr(0,e)),(BFb(e+1,f.length+1),f.substr(e+1)));if(ZD(g,156)){return RD(g,156)}}}return null} -function rRb(a){var b,c,d,e,f,g,h,i,j,k,l,m;e=XPb(a.d);g=RD(mQb(a.b,(tSb(),nSb)),107);h=g.b+g.c;i=g.d+g.a;k=e.d.a*a.e+h;j=e.b.a*a.f+i;RRb(a.b,new rjd(k,j));for(m=new Anb(a.g);m.a<m.c.c.length;){l=RD(ynb(m),568);b=l.g-e.a.a;c=l.i-e.c.a;d=$id(jjd(new rjd(b,c),l.a,l.b),ijd(njd(ajd(yRb(l.e)),l.d*l.a,l.c*l.b),-0.5));f=zRb(l.e);BRb(l.e,ojd(d,f))}} -function Xgc(a,b){var c,d,e,f,g,h,i,j,k,l,m;b.Ug('Restoring reversed edges',1);for(i=new Anb(a.b);i.a<i.c.c.length;){h=RD(ynb(i),30);for(k=new Anb(h.a);k.a<k.c.c.length;){j=RD(ynb(k),10);for(m=new Anb(j.j);m.a<m.c.c.length;){l=RD(ynb(m),12);g=s2b(l.g);for(d=g,e=0,f=d.length;e<f;++e){c=d[e];Heb(TD(mQb(c,(Ywc(),Nwc))))&&X0b(c,false)}}}}b.Vg()} -function Zpc(a,b,c,d){var e,f,g,h,i;i=$C(iE,Nve,109,(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,0,2);for(f=cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]),g=0,h=f.length;g<h;++g){e=f[g];i[e.g]=$C(iE,vxe,28,a.c[e.g],15,1)}_pc(i,a,Yod);_pc(i,a,npd);Ypc(i,a,Yod,b,c,d);Ypc(i,a,Xod,b,c,d);Ypc(i,a,npd,b,c,d);Ypc(i,a,ppd,b,c,d);return i} -function sLc(a,b,c){if(Ujb(a.a,b)){if(Zsb(RD(Wjb(a.a,b),49),c)){return 1}}else{Zjb(a.a,b,new _sb)}if(Ujb(a.a,c)){if(Zsb(RD(Wjb(a.a,c),49),b)){return -1}}else{Zjb(a.a,c,new _sb)}if(Ujb(a.b,b)){if(Zsb(RD(Wjb(a.b,b),49),c)){return -1}}else{Zjb(a.b,b,new _sb)}if(Ujb(a.b,c)){if(Zsb(RD(Wjb(a.b,c),49),b)){return 1}}else{Zjb(a.b,c,new _sb)}return 0} -function tMb(a){var b,c,d,e,f,g;if(a.q==(Bod(),xod)||a.q==wod){return}e=a.f.n.d+SJb(RD(Vrb(a.b,(qpd(),Yod)),127))+a.c;b=a.f.n.a+SJb(RD(Vrb(a.b,npd),127))+a.c;d=RD(Vrb(a.b,Xod),127);g=RD(Vrb(a.b,ppd),127);f=$wnd.Math.max(0,d.n.d-e);f=$wnd.Math.max(f,g.n.d-e);c=$wnd.Math.max(0,d.n.a-b);c=$wnd.Math.max(c,g.n.a-b);d.n.d=f;g.n.d=f;d.n.a=c;g.n.a=c} -function Xfe(a,b,c,d){var e,f,g,h,i,j;if(c==null){e=RD(a.g,124);for(h=0;h<a.i;++h){g=e[h];if(g.Lk()==b){return rLd(a,g,d)}}}f=(nke(),RD(b,69).xk()?RD(c,76):oke(b,c));if(Mvd(a.e)){j=!pge(a,b);d=qLd(a,f,d);i=b.Jk()?fge(a,3,b,null,c,kge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0),j):fge(a,1,b,b.ik(),c,-1,j);d?d.nj(i):(d=i)}else{d=qLd(a,f,d)}return d} -function xgd(){this.b=new gub;this.d=new gub;this.e=new gub;this.c=new gub;this.a=new Tsb;this.f=new Tsb;HId(l3,new Igd,new Kgd);HId(k3,new ehd,new ghd);HId(h3,new ihd,new khd);HId(i3,new mhd,new ohd);HId(l4,new qhd,new shd);HId(VJ,new Mgd,new Ogd);HId(PK,new Qgd,new Sgd);HId(BK,new Ugd,new Wgd);HId(MK,new Ygd,new $gd);HId(DL,new ahd,new chd)} -function hc(a,b){var c,d,e,f,g;a=a==null?vve:(uFb(a),a);for(e=0;e<b.length;e++){b[e]=ic(b[e])}c=new cib;g=0;d=0;while(d<b.length){f=a.indexOf('%s',g);if(f==-1){break}c.a+=''+zhb(a==null?vve:(uFb(a),a),g,f);Yhb(c,b[d++]);g=f+2}Xhb(c,a,g,a.length);if(d<b.length){c.a+=' [';Yhb(c,b[d++]);while(d<b.length){c.a+=pve;Yhb(c,b[d++])}c.a+=']'}return c.a} -function kMc(a,b){var c,d,e,f,g,h,i;c=0;for(i=new Anb(b);i.a<i.c.c.length;){h=RD(ynb(i),12);$Lc(a.b,a.d[h.p]);g=0;for(e=new l4b(h.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);if(uMc(d)){f=AMc(a,h==d.c?d.d:d.c);if(f>a.d[h.p]){c+=ZLc(a.b,f);hmb(a.a,sgb(f))}}else{++g}}c+=a.b.d*g;while(!nmb(a.a)){XLc(a.b,RD(smb(a.a),17).a)}}return c} -function pje(a){var b,c,d,e,f,g;f=0;b=WVd(a);!!b.kk()&&(f|=4);(a.Bb&bKe)!=0&&(f|=2);if(ZD(a,102)){c=RD(a,19);e=Z5d(c);(c.Bb&QHe)!=0&&(f|=32);if(e){AYd(uWd(e));f|=8;g=e.t;(g>1||g==-1)&&(f|=16);(e.Bb&QHe)!=0&&(f|=64)}(c.Bb&txe)!=0&&(f|=cKe);f|=gwe}else{if(ZD(b,468)){f|=512}else{d=b.kk();!!d&&(d.i&1)!=0&&(f|=256)}}(a.Bb&512)!=0&&(f|=128);return f} -function vke(a,b){var c;if(a.f==tke){c=yfe(Qee((lke(),jke),b));return a.e?c==4&&b!=(Lle(),Jle)&&b!=(Lle(),Gle)&&b!=(Lle(),Hle)&&b!=(Lle(),Ile):c==2}if(!!a.d&&(a.d.Hc(b)||a.d.Hc(zfe(Qee((lke(),jke),b)))||a.d.Hc(Eee((lke(),jke),a.b,b)))){return true}if(a.f){if(Xee((lke(),a.f),Bfe(Qee(jke,b)))){c=yfe(Qee(jke,b));return a.e?c==4:c==2}}return false} -function oKc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;m=-1;n=0;for(j=a,k=0,l=j.length;k<l;++k){i=j[k];for(f=i,g=0,h=f.length;g<h;++g){e=f[g];b=new urc(m==-1?a[0]:a[m],RD(mQb(Y2b(e),(yCc(),cAc)),284),Bic(e),Heb(TD(mQb(Y2b(e),bAc))));for(c=0;c<e.j.c.length;c++){for(d=c+1;d<e.j.c.length;d++){prc(b,RD(Vmb(e.j,c),12),RD(Vmb(e.j,d),12))>0&&++n}}}++m}return n} -function S2c(a,b,c,d){var e,f,g,h,i,j,k,l;g=RD(Gxd(c,(umd(),Qld)),8);i=g.a;k=g.b+a;e=$wnd.Math.atan2(k,i);e<0&&(e+=dFe);e+=b;e>dFe&&(e-=dFe);h=RD(Gxd(d,Qld),8);j=h.a;l=h.b+a;f=$wnd.Math.atan2(l,j);f<0&&(f+=dFe);f+=b;f>dFe&&(f-=dFe);return Zy(),bz(1.0E-10),$wnd.Math.abs(e-f)<=1.0E-10||e==f||isNaN(e)&&isNaN(f)?0:e<f?-1:e>f?1:cz(isNaN(e),isNaN(f))} -function PGb(a){var b,c,d,e,f,g,h;h=new Tsb;for(d=new Anb(a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),60);Zjb(h,b,new bnb)}for(e=new Anb(a.a.b);e.a<e.c.c.length;){b=RD(ynb(e),60);b.i=pxe;for(g=b.c.Kc();g.Ob();){f=RD(g.Pb(),60);RD(Wd(qtb(h.f,f)),15).Fc(b)}}for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.c.$b();b.c=RD(Wd(qtb(h.f,b)),15)}HGb(a)} -function AYb(a){var b,c,d,e,f,g,h;h=new Tsb;for(d=new Anb(a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),86);Zjb(h,b,new bnb)}for(e=new Anb(a.a.b);e.a<e.c.c.length;){b=RD(ynb(e),86);b.o=pxe;for(g=b.f.Kc();g.Ob();){f=RD(g.Pb(),86);RD(Wd(qtb(h.f,f)),15).Fc(b)}}for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);b.f.$b();b.f=RD(Wd(qtb(h.f,b)),15)}tYb(a)} -function WPb(a,b,c,d){var e,f;VPb(a,b,c,d);hQb(b,a.j-b.j+c);iQb(b,a.k-b.k+d);for(f=new Anb(b.f);f.a<f.c.c.length;){e=RD(ynb(f),334);switch(e.a.g){case 0:eQb(a,b.g+e.b.a,0,b.g+e.c.a,b.i-1);break;case 1:eQb(a,b.g+b.o,b.i+e.b.a,a.o-1,b.i+e.c.a);break;case 2:eQb(a,b.g+e.b.a,b.i+b.p,b.g+e.c.a,a.p-1);break;default:eQb(a,0,b.i+e.b.a,b.g-1,b.i+e.c.a);}}} -function $ec(a,b){var c,d,e,f,g,h,i,j;f=new bnb;b.b.c.length=0;c=RD(zDb(ODb(new SDb(null,new Swb(new Xkb(a.a.b),1))),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);for(e=c.Kc();e.Ob();){d=RD(e.Pb(),17);g=_5b(a.a,d);if(g.b!=0){h=new R4b(b);ZEb(f.c,h);h.p=d.a;for(j=Sub(g,0);j.b!=j.d.c;){i=RD(evb(j),10);g3b(i,h)}}}Tmb(b.b,f)} -function TPb(b,c,d,e,f){var g,h,i;try{if(c>=b.o){throw Adb(new web)}i=c>>5;h=c&31;g=Sdb(1,Ydb(Sdb(h,1)));f?(b.n[d][i]=Rdb(b.n[d][i],g)):(b.n[d][i]=Cdb(b.n[d][i],Qdb(g)));g=Sdb(g,1);e?(b.n[d][i]=Rdb(b.n[d][i],g)):(b.n[d][i]=Cdb(b.n[d][i],Qdb(g)))}catch(a){a=zdb(a);if(ZD(a,333)){throw Adb(new veb(fze+b.o+'*'+b.p+gze+c+pve+d+hze))}else throw Adb(a)}} -function eMc(a,b,c,d){var e,f,g,h,i,j,k,l,m;m=new yAb(new PMc(a));for(h=cD(WC(jR,1),WAe,10,0,[b,c]),i=0,j=h.length;i<j;++i){g=h[i];for(l=aMc(g,d).Kc();l.Ob();){k=RD(l.Pb(),12);for(f=new l4b(k.b);xnb(f.a)||xnb(f.b);){e=RD(xnb(f.a)?ynb(f.a):ynb(f.b),18);if(!W0b(e)){m.a.zc(k,(Geb(),Eeb))==null;uMc(e)&&rAb(m,k==e.c?e.d:e.c)}}}}return Qb(m),new dnb(m)} -function w0c(a,b,c,d){var e,f,g;if(b){f=Kfb(UD(mQb(b,(q$c(),j$c))))+d;g=c+Kfb(UD(mQb(b,d$c)))/2;pQb(b,o$c,sgb(Ydb(Hdb($wnd.Math.round(f)))));pQb(b,p$c,sgb(Ydb(Hdb($wnd.Math.round(g)))));b.d.b==0||w0c(a,RD(Hr((e=Sub((new dXc(b)).a.d,0),new gXc(e))),39),c+Kfb(UD(mQb(b,d$c)))+a.b,d+Kfb(UD(mQb(b,g$c))));mQb(b,m$c)!=null&&w0c(a,RD(mQb(b,m$c),39),c,d)}} -function cdc(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=Y2b(b.a);e=Kfb(UD(mQb(i,(yCc(),XBc))))*2;k=Kfb(UD(mQb(i,cCc)));j=$wnd.Math.max(e,k);f=$C(iE,vxe,28,b.f-b.c+1,15,1);d=-j;c=0;for(h=b.b.Kc();h.Ob();){g=RD(h.Pb(),10);d+=a.a[g.c.p]+j;f[c++]=d}d+=a.a[b.a.c.p]+j;f[c++]=d;for(m=new Anb(b.e);m.a<m.c.c.length;){l=RD(ynb(m),10);d+=a.a[l.c.p]+j;f[c++]=d}return f} -function Xud(a,b){var c,d,e,f;f=RD(Gxd(a,(umd(),Old)),64).g-RD(Gxd(b,Old),64).g;if(f!=0){return f}c=RD(Gxd(a,Jld),17);d=RD(Gxd(b,Jld),17);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}switch(RD(Gxd(a,Old),64).g){case 1:return Qfb(a.i,b.i);case 2:return Qfb(a.j,b.j);case 3:return Qfb(b.i,a.i);case 4:return Qfb(b.j,a.j);default:throw Adb(new dgb(UAe));}} -function zCd(a){var b,c,d;if((a.Db&64)!=0)return Fyd(a);b=new dib(GHe);c=a.k;if(!c){!a.n&&(a.n=new C5d(I4,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new C5d(I4,a,1,7)),RD(QHd(a.n,0),135)).a;!d||Zhb(Zhb((b.a+=' "',b),d),'"')}}else{Zhb(Zhb((b.a+=' "',b),c),'"')}Zhb(Uhb(Zhb(Uhb(Zhb(Uhb(Zhb(Uhb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} -function OCd(a){var b,c,d;if((a.Db&64)!=0)return Fyd(a);b=new dib(HHe);c=a.k;if(!c){!a.n&&(a.n=new C5d(I4,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new C5d(I4,a,1,7)),RD(QHd(a.n,0),135)).a;!d||Zhb(Zhb((b.a+=' "',b),d),'"')}}else{Zhb(Zhb((b.a+=' "',b),c),'"')}Zhb(Uhb(Zhb(Uhb(Zhb(Uhb(Zhb(Uhb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} -function Xnc(a,b){var c,d,e,f,g;b==(TEc(),QEc)&&Eob(RD(Qc(a.a,(Bnc(),xnc)),15));for(e=RD(Qc(a.a,(Bnc(),xnc)),15).Kc();e.Ob();){d=RD(e.Pb(),105);c=RD(Vmb(d.j,0),113).d.j;f=new dnb(d.j);_mb(f,new Boc);switch(b.g){case 2:Pnc(a,f,c,(joc(),hoc),1);break;case 1:case 0:g=Rnc(f);Pnc(a,new Rkb(f,0,g),c,(joc(),hoc),0);Pnc(a,new Rkb(f,g,f.c.length),c,hoc,1);}}} -function sgd(a,b){var c,d,e,f,g,h,i;if(b==null||b.length==0){return null}e=RD(Xjb(a.a,b),143);if(!e){for(d=(h=(new glb(a.b)).a.vc().Kc(),new llb(h));d.a.Ob();){c=(f=RD(d.a.Pb(),44),RD(f.md(),143));g=c.c;i=b.length;if(lhb(g.substr(g.length-i,i),b)&&(b.length==g.length||ihb(g,g.length-b.length-1)==46)){if(e){return null}e=c}}!!e&&$jb(a.a,b,e)}return e} -function HOb(a,b){var c,d,e,f;c=new MOb;d=RD(zDb(GDb(new SDb(null,new Swb(a.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21);e=d.gc();d=RD(zDb(GDb(new SDb(null,new Swb(b.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[wBb,vBb]))),21);f=d.gc();if(e<f){return -1}if(e==f){return 0}return 1} -function I8b(a){var b,c,d;if(!nQb(a,(yCc(),dBc))){return}d=RD(mQb(a,dBc),21);if(d.dc()){return}c=(b=RD(mfb(A3),9),new Fsb(b,RD(WEb(b,b.length),9),0));d.Hc((dod(),$nd))?zsb(c,$nd):zsb(c,_nd);d.Hc(Ynd)||zsb(c,Ynd);d.Hc(Xnd)?zsb(c,cod):d.Hc(Wnd)?zsb(c,bod):d.Hc(Znd)&&zsb(c,aod);d.Hc(cod)?zsb(c,Xnd):d.Hc(bod)?zsb(c,Wnd):d.Hc(aod)&&zsb(c,Znd);pQb(a,dBc,c)} -function KLc(a){var b,c,d,e,f,g,h;e=RD(mQb(a,(Ywc(),pwc)),10);d=a.j;c=(tFb(0,d.c.length),RD(d.c[0],12));for(g=new Anb(e.j);g.a<g.c.c.length;){f=RD(ynb(g),12);if(dE(f)===dE(mQb(c,Awc))){if(f.j==(qpd(),Yod)&&a.p>e.p){Q3b(f,npd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=h-b}}else if(f.j==npd&&e.p>a.p){Q3b(f,Yod);if(f.d){h=f.o.b;b=f.a.b;f.a.b=-(h-b)}}break}}return e} -function nTb(a,b,c,d,e){var f,g,h,i,j,k,l;if(!(ZD(b,207)||ZD(b,366)||ZD(b,193))){throw Adb(new agb('Method only works for ElkNode-, ElkLabel and ElkPort-objects.'))}g=a.a/2;i=b.i+d-g;k=b.j+e-g;j=i+b.g+a.a;l=k+b.f+a.a;f=new Ejd;Mub(f,new rjd(i,k));Mub(f,new rjd(i,l));Mub(f,new rjd(j,l));Mub(f,new rjd(j,k));h=new ORb(f);kQb(h,b);c&&Zjb(a.b,b,h);return h} -function w$b(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=new rjd(b,c);for(k=new Anb(a.a);k.a<k.c.c.length;){j=RD(ynb(k),10);$id(j.n,f);for(m=new Anb(j.j);m.a<m.c.c.length;){l=RD(ynb(m),12);for(e=new Anb(l.g);e.a<e.c.c.length;){d=RD(ynb(e),18);Cjd(d.a,f);g=RD(mQb(d,(yCc(),RAc)),75);!!g&&Cjd(g,f);for(i=new Anb(d.b);i.a<i.c.c.length;){h=RD(ynb(i),72);$id(h.n,f)}}}}} -function o2b(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=new rjd(b,c);for(k=new Anb(a.a);k.a<k.c.c.length;){j=RD(ynb(k),10);$id(j.n,f);for(m=new Anb(j.j);m.a<m.c.c.length;){l=RD(ynb(m),12);for(e=new Anb(l.g);e.a<e.c.c.length;){d=RD(ynb(e),18);Cjd(d.a,f);g=RD(mQb(d,(yCc(),RAc)),75);!!g&&Cjd(g,f);for(i=new Anb(d.b);i.a<i.c.c.length;){h=RD(ynb(i),72);$id(h.n,f)}}}}} -function X4b(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i==0){throw Adb(new Ked('Edges must have a source.'))}else if((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i==0){throw Adb(new Ked('Edges must have a target.'))}else{!a.b&&(a.b=new Yie(E4,a,4,7));if(!(a.b.i<=1&&(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c.i<=1))){throw Adb(new Ked('Hyperedges are not supported.'))}}} -function mKc(a,b){var c,d,e,f,g,h,i,j,k,l;l=0;f=new wmb;hmb(f,b);while(f.b!=f.c){i=RD(smb(f),219);j=0;k=RD(mQb(b.j,(yCc(),cAc)),284);g=Kfb(UD(mQb(b.j,Zzc)));h=Kfb(UD(mQb(b.j,$zc)));if(k!=(kEc(),hEc)){j+=g*nKc(i.e,k);j+=h*oKc(i.e)}l+=PLc(i.d,i.e)+j;for(e=new Anb(i.b);e.a<e.c.c.length;){d=RD(ynb(e),36);c=RD(Vmb(a.b,d.p),219);c.s||(l+=lKc(a,c))}}return l} -function Pib(){Pib=geb;var a;Kib=new ajb(1,1);Mib=new ajb(1,10);Oib=new ajb(0,0);Jib=new ajb(-1,1);Lib=cD(WC(uJ,1),Nve,92,0,[Oib,Kib,new ajb(1,2),new ajb(1,3),new ajb(1,4),new ajb(1,5),new ajb(1,6),new ajb(1,7),new ajb(1,8),new ajb(1,9),Mib]);Nib=$C(uJ,Nve,92,32,0,1);for(a=0;a<Nib.length;a++){Nib[a]=Jdb(Sdb(1,a),0)?jjb(Sdb(1,a)):Xib(jjb(Odb(Sdb(1,a))))}} -function JJb(a,b,c,d,e,f,g){a.c=d.Lf().a;a.d=d.Lf().b;if(e){a.c+=e.Lf().a;a.d+=e.Lf().b}a.b=b.Mf().a;a.a=b.Mf().b;if(!e){c?(a.c-=g+b.Mf().a):(a.c+=d.Mf().a+g)}else{switch(e.ag().g){case 0:case 2:a.c+=e.Mf().a+g+f.a+g;break;case 4:a.c-=g+f.a+g+b.Mf().a;break;case 1:a.c+=e.Mf().a+g;a.d-=g+f.b+g+b.Mf().b;break;case 3:a.c+=e.Mf().a+g;a.d+=e.Mf().b+g+f.b+g;}}} -function xdc(a,b){var c,d;this.b=new bnb;this.e=new bnb;this.a=a;this.d=b;udc(this);vdc(this);this.b.dc()?(this.c=a.c.p):(this.c=RD(this.b.Xb(0),10).c.p);this.e.c.length==0?(this.f=a.c.p):(this.f=RD(Vmb(this.e,this.e.c.length-1),10).c.p);for(d=RD(mQb(a,(Ywc(),Mwc)),15).Kc();d.Ob();){c=RD(d.Pb(),72);if(nQb(c,(yCc(),uAc))){this.d=RD(mQb(c,uAc),232);break}}} -function erc(a,b,c){var d,e,f,g,h,i,j,k;d=RD(Wjb(a.a,b),49);f=RD(Wjb(a.a,c),49);e=RD(Wjb(a.e,b),49);g=RD(Wjb(a.e,c),49);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=RD(k.Pb(),10);d.a.zc(j,d);Ysb(RD(Wjb(a.e,j),49),b);ye(RD(Wjb(a.e,j),49),e)}for(i=e.a.ec().Kc();i.Ob();){h=RD(i.Pb(),10);g.a.zc(h,g);Ysb(RD(Wjb(a.a,h),49),c);ye(RD(Wjb(a.a,h),49),f)}} -function uLc(a,b,c){var d,e,f,g,h,i,j,k;d=RD(Wjb(a.a,b),49);f=RD(Wjb(a.a,c),49);e=RD(Wjb(a.b,b),49);g=RD(Wjb(a.b,c),49);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=RD(k.Pb(),10);d.a.zc(j,d);Ysb(RD(Wjb(a.b,j),49),b);ye(RD(Wjb(a.b,j),49),e)}for(i=e.a.ec().Kc();i.Ob();){h=RD(i.Pb(),10);g.a.zc(h,g);Ysb(RD(Wjb(a.a,h),49),c);ye(RD(Wjb(a.a,h),49),f)}} -function rrc(a,b,c){var d,e,f,g,h,i,j,k;d=RD(Wjb(a.a,b),49);f=RD(Wjb(a.a,c),49);e=RD(Wjb(a.d,b),49);g=RD(Wjb(a.d,c),49);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=RD(k.Pb(),12);d.a.zc(j,d);Ysb(RD(Wjb(a.d,j),49),b);ye(RD(Wjb(a.d,j),49),e)}for(i=e.a.ec().Kc();i.Ob();){h=RD(i.Pb(),12);g.a.zc(h,g);Ysb(RD(Wjb(a.a,h),49),c);ye(RD(Wjb(a.a,h),49),f)}} -function lTc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;f=c;if(c<d){m=(n=new USc(a.p),o=new USc(a.p),ye(n.e,a.e),n.q=a.q,n.r=o,LSc(n),ye(o.j,a.j),o.r=n,LSc(o),new Ptd(n,o));l=RD(m.a,118);k=RD(m.b,118);e=(tFb(f,b.c.length),RD(b.c[f],339));g=sTc(a,l,k,e);for(j=c+1;j<=d;j++){h=(tFb(j,b.c.length),RD(b.c[j],339));i=sTc(a,l,k,h);if(qTc(h,i,e,g)){e=h;g=i;f=j}}}return f} -function c8c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;g=RD(QHd(b,0),27);Dyd(g,0);Eyd(g,0);m=new bnb;ZEb(m.c,g);h=g;f=new lad(a.a,g.g,g.f,(sad(),rad));for(n=1;n<b.i;n++){o=RD(QHd(b,n),27);i=d8c(a,oad,o,h,f,m,c);j=d8c(a,nad,o,h,f,m,c);k=d8c(a,qad,o,h,f,m,c);l=d8c(a,pad,o,h,f,m,c);e=f8c(a,i,j,k,l,o,h,d);Dyd(o,e.d);Eyd(o,e.e);kad(e,rad);f=e;h=o;ZEb(m.c,o)}return f} -function yEd(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=null;m=b;l=pEd(a,DGd(c),m);jyd(l,zDd(m,uIe));g=wDd(m,kIe);d=new MEd(a,l);ODd(d.a,d.b,g);h=wDd(m,lIe);e=new NEd(a,l);PDd(e.a,e.b,h);if((!l.b&&(l.b=new Yie(E4,l,4,7)),l.b).i==0||(!l.c&&(l.c=new Yie(E4,l,5,8)),l.c).i==0){f=zDd(m,uIe);i=yIe+f;j=i+zIe;throw Adb(new CDd(j))}GEd(m,l);zEd(a,m,l);k=CEd(a,m,l);return k} -function pJb(a,b){var c,d,e,f,g,h,i;e=$C(kE,Pwe,28,a.e.a.c.length,15,1);for(g=new Anb(a.e.a);g.a<g.c.c.length;){f=RD(ynb(g),125);e[f.d]+=f.b.a.c.length}h=gv(b);while(h.b!=0){f=RD(h.b==0?null:(sFb(h.b!=0),Wub(h,h.a.a)),125);for(d=Nr(new Anb(f.g.a));d.Ob();){c=RD(d.Pb(),218);i=c.e;i.e=$wnd.Math.max(i.e,f.e+c.a);--e[i.d];e[i.d]==0&&(Pub(h,i,h.c.b,h.c),true)}}} -function tJb(a){var b,c,d,e,f,g,h,i,j,k,l;c=qwe;e=lve;for(h=new Anb(a.e.a);h.a<h.c.c.length;){f=RD(ynb(h),125);e=$wnd.Math.min(e,f.e);c=$wnd.Math.max(c,f.e)}b=$C(kE,Pwe,28,c-e+1,15,1);for(g=new Anb(a.e.a);g.a<g.c.c.length;){f=RD(ynb(g),125);f.e-=e;++b[f.e]}d=0;if(a.k!=null){for(j=a.k,k=0,l=j.length;k<l;++k){i=j[k];b[d++]+=i;if(b.length==d){break}}}return b} -function I0c(a,b){var c,d,e,f,g,h;b.Ug('Edge routing',1);e=RD(mQb(a,(h_c(),K$c)),392);if(e==(LZc(),JZc)){G0c(a)}else if(e==IZc){RD(Lvb(DDb(CDb(new SDb(null,new Swb(a.b,16)),new AWc))),39);f=Kfb(UD(mQb(a,$$c)));g=Kfb(UD(mQb(a,J$c)));h=RD(mQb(a,H$c),88);E0c(a,h,f);F0c(a,h,f,g);D0c(a,h,f,g);for(d=Sub(a.a,0);d.b!=d.d.c;){c=RD(evb(d),65);c.a.b<2&&H0c(c)}}b.Vg()} -function IKd(a){switch(a.d){case 9:case 8:{return true}case 3:case 5:case 4:case 6:{return false}case 7:{return RD(HKd(a),17).a==a.o}case 1:case 2:{if(a.o==-2){return false}else{switch(a.p){case 0:case 1:case 2:case 6:case 5:case 7:{return Gdb(a.k,a.f)}case 3:case 4:{return a.j==a.e}default:{return a.n==null?a.g==null:pb(a.n,a.g)}}}}default:{return false}}} -function Grc(a,b){var c,d,e;b.Ug('Breaking Point Insertion',1);d=new ysc(a);switch(RD(mQb(a,(yCc(),rCc)),351).g){case 2:e=new Ksc;break;case 0:e=new zrc;break;default:e=new Nsc;}c=e.og(a,d);Heb(TD(mQb(a,tCc)))&&(c=Frc(a,c));if(!e.pg()&&nQb(a,xCc)){switch(RD(mQb(a,xCc),352).g){case 2:c=Wsc(d,c);break;case 1:c=Usc(d,c);}}if(c.dc()){b.Vg();return}Drc(a,c);b.Vg()} -function oJc(a,b,c){var d,e,f,g,h,i,j,k,l;f=new cnb(b.c.length);for(j=new Anb(b);j.a<j.c.c.length;){g=RD(ynb(j),10);Rmb(f,a.b[g.c.p][g.p])}jJc(a,f,c);l=null;while(l=kJc(f)){lJc(a,RD(l.a,239),RD(l.b,239),f)}b.c.length=0;for(e=new Anb(f);e.a<e.c.c.length;){d=RD(ynb(e),239);for(h=d.d,i=0,k=h.length;i<k;++i){g=h[i];ZEb(b.c,g);a.a[g.c.p][g.p].a=pJc(d.g,d.d[0]).a}}} -function wnd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,pHe),'ELK Fixed'),'Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points.'),new znd)));Agd(a,pHe,Eze,tnd);Agd(a,pHe,fEe,iGd(und));Agd(a,pHe,QGe,iGd(ond));Agd(a,pHe,jAe,iGd(pnd));Agd(a,pHe,CAe,iGd(rnd));Agd(a,pHe,hAe,iGd(qnd))} -function Do(a,b,c){var d,e,f,g,h;d=Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)));h=Ydb(Ndb(cwe,qgb(Ydb(Ndb(c==null?0:tb(c),dwe)),15)));f=Go(a,b,d);if(!!f&&h==f.f&&Hb(c,f.i)){return c}g=Ho(a,c,h);if(g){throw Adb(new agb('value already present: '+c))}e=new kp(b,d,c,h);if(f){yo(a,f);Bo(a,e,f);f.e=null;f.c=null;return f.i}else{Bo(a,e,null);Fo(a);return null}} -function V7b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;k=c.a.c;g=c.a.c+c.a.b;f=RD(Wjb(c.c,b),467);n=f.f;o=f.a;f.b?(i=new rjd(g,n)):(i=new rjd(k,n));f.c?(l=new rjd(k,o)):(l=new rjd(g,o));e=k;c.p||(e+=a.c);e+=c.F+c.v*a.b;j=new rjd(e,n);m=new rjd(e,o);zjd(b.a,cD(WC(l3,1),Nve,8,0,[i,j]));h=c.d.a.gc()>1;if(h){d=new rjd(e,c.b);Mub(b.a,d)}zjd(b.a,cD(WC(l3,1),Nve,8,0,[m,l]))} -function aEc(){aEc=geb;$Dc=new bEc(LAe,0);VDc=new bEc('NIKOLOV',1);YDc=new bEc('NIKOLOV_PIXEL',2);WDc=new bEc('NIKOLOV_IMPROVED',3);XDc=new bEc('NIKOLOV_IMPROVED_PIXEL',4);SDc=new bEc('DUMMYNODE_PERCENTAGE',5);ZDc=new bEc('NODECOUNT_PERCENTAGE',6);_Dc=new bEc('NO_BOUNDARY',7);TDc=new bEc('MODEL_ORDER_LEFT_TO_RIGHT',8);UDc=new bEc('MODEL_ORDER_RIGHT_TO_LEFT',9)} -function use(a){var b,c,d,e,f;d=a.length;b=new Rhb;f=0;while(f<d){c=ihb(a,f++);if(c==9||c==10||c==12||c==13||c==32)continue;if(c==35){while(f<d){c=ihb(a,f++);if(c==13||c==10)break}continue}if(c==92&&f<d){if((e=(BFb(f,a.length),a.charCodeAt(f)))==35||e==9||e==10||e==12||e==13||e==32){Jhb(b,e&Bwe);++f}else{b.a+='\\';Jhb(b,e&Bwe);++f}}else Jhb(b,c&Bwe)}return b.a} -function D4c(){D4c=geb;n4c=new lGd(oFe,(Geb(),false));t4c=new lGd(pFe,sgb(0));u4c=new lGd(qFe,0);v4c=new lGd(rFe,false);q4c=(g4c(),d4c);p4c=new lGd(sFe,q4c);sgb(0);o4c=new lGd(tFe,sgb(1));A4c=(t5c(),r5c);z4c=new lGd(uFe,A4c);C4c=(Y3c(),X3c);B4c=new lGd(vFe,C4c);s4c=(j5c(),i5c);r4c=new lGd(wFe,s4c);y4c=new lGd(xFe,0);w4c=new lGd(yFe,false);x4c=new lGd(zFe,false)} -function t3c(a,b){var c,d,e;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),27);Rc(a.a,c,c);Rc(a.b,c,c);e=Q2c(c);if(e.c.length!=0){!!a.d&&a.d.Gg(e);Rc(a.a,c,(tFb(0,e.c.length),RD(e.c[0],27)));Rc(a.b,c,RD(Vmb(e,e.c.length-1),27));while(N2c(e).c.length!=0){e=N2c(e);!!a.d&&a.d.Gg(e);Rc(a.a,c,(tFb(0,e.c.length),RD(e.c[0],27)));Rc(a.b,c,RD(Vmb(e,e.c.length-1),27))}}}} -function jwd(a,b,c){var d,e,f,g,h,i;if(!b){return null}else{if(c<=-1){d=vYd(b.Dh(),-1-c);if(ZD(d,102)){return RD(d,19)}else{g=RD(b.Mh(d),160);for(h=0,i=g.gc();h<i;++h){if(dE(g.Ul(h))===dE(a)){e=g.Tl(h);if(ZD(e,102)){f=RD(e,19);if((f.Bb&QHe)!=0){return f}}}}throw Adb(new dgb('The containment feature could not be located'))}}else{return Z5d(RD(vYd(a.Dh(),c),19))}}} -function Lqc(a){var b,c,d,e,f,g,h,i,j,k;c=0;for(h=new Anb(a.d);h.a<h.c.c.length;){g=RD(ynb(h),105);!!g.i&&(g.i.c=c++)}b=YC(xdb,[Nve,Hye],[183,28],16,[c,c],2);k=a.d;for(e=0;e<k.c.length;e++){i=(tFb(e,k.c.length),RD(k.c[e],105));if(i.i){for(f=e+1;f<k.c.length;f++){j=(tFb(f,k.c.length),RD(k.c[f],105));if(j.i){d=Qqc(i,j);b[i.i.c][j.i.c]=d;b[j.i.c][i.i.c]=d}}}}return b} -function u7c(){u7c=geb;m7c=new lGd(LFe,(Geb(),false));sgb(-1);f7c=new lGd(MFe,sgb(-1));sgb(-1);g7c=new lGd(NFe,sgb(-1));h7c=new lGd(OFe,false);s7c=(z8c(),x8c);r7c=new lGd(PFe,s7c);t7c=new lGd(QFe,-1);q7c=(_6c(),$6c);p7c=new lGd(RFe,q7c);o7c=new lGd(SFe,true);l7c=(b9c(),$8c);k7c=new lGd(TFe,l7c);j7c=new lGd(UFe,false);sgb(1);i7c=new lGd(VFe,sgb(1));n7c=new jGd(WFe)} -function WYc(){WYc=geb;VYc=new XYc('ROOT_PROC',0);OYc=new XYc('FAN_PROC',1);SYc=new XYc('LEVEL_PROC',2);TYc=new XYc('NEIGHBORS_PROC',3);RYc=new XYc('LEVEL_HEIGHT',4);NYc=new XYc('DIRECTION_PROC',5);UYc=new XYc('NODE_POSITION_PROC',6);LYc=new XYc('COMPACTION_PROC',7);QYc=new XYc('LEVEL_COORDS',8);PYc=new XYc('GRAPH_BOUNDS_PROC',9);MYc=new XYc('DETREEIFYING_PROC',10)} -function Fee(a,b){var c,d,e,f,g,h,i,j,k,l;l=zYd(b);j=null;e=false;for(h=0,k=tYd(l.a).i;h<k;++h){g=RD(N_d(l,h,(f=RD(QHd(tYd(l.a),h),89),i=f.c,ZD(i,90)?RD(i,29):(JTd(),zTd))),29);c=Fee(a,g);if(!c.dc()){if(!j){j=c}else{if(!e){e=true;j=new PSd(j)}j.Gc(c)}}}d=Kee(a,b);if(d.dc()){return !j?(yob(),yob(),vob):j}else{if(!j){return d}else{e||(j=new PSd(j));j.Gc(d);return j}}} -function Gee(a,b){var c,d,e,f,g,h,i,j,k,l;l=zYd(b);j=null;d=false;for(h=0,k=tYd(l.a).i;h<k;++h){f=RD(N_d(l,h,(e=RD(QHd(tYd(l.a),h),89),i=e.c,ZD(i,90)?RD(i,29):(JTd(),zTd))),29);c=Gee(a,f);if(!c.dc()){if(!j){j=c}else{if(!d){d=true;j=new PSd(j)}j.Gc(c)}}}g=Nee(a,b);if(g.dc()){return !j?(yob(),yob(),vob):j}else{if(!j){return g}else{d||(j=new PSd(j));j.Gc(g);return j}}} -function gNb(a){var b,c,d,e;d=a.o;RMb();if(a.A.dc()||pb(a.A,QMb)){e=d.a}else{e=ZKb(a.f);if(a.A.Hc((Qpd(),Npd))&&!a.B.Hc((dqd(),_pd))){e=$wnd.Math.max(e,ZKb(RD(Vrb(a.p,(qpd(),Yod)),252)));e=$wnd.Math.max(e,ZKb(RD(Vrb(a.p,npd),252)))}b=TMb(a);!!b&&(e=$wnd.Math.max(e,b.a))}Heb(TD(a.e.Tf().of((umd(),mld))))?(d.a=$wnd.Math.max(d.a,e)):(d.a=e);c=a.f.i;c.c=0;c.b=e;$Kb(a.f)} -function _fe(a,b,c){var d,e,f,g,h,i;if(ZD(b,76)){return rLd(a,b,c)}else{h=null;f=null;d=RD(a.g,124);for(g=0;g<a.i;++g){e=d[g];if(pb(b,e.md())){f=e.Lk();if(ZD(f,102)&&(RD(f,19).Bb&QHe)!=0){h=e;break}}}if(h){if(Mvd(a.e)){i=f.Jk()?fge(a,4,f,b,null,kge(a,f,b,ZD(f,102)&&(RD(f,19).Bb&txe)!=0),true):fge(a,f.tk()?2:1,f,b,f.ik(),-1,true);c?c.nj(i):(c=i)}c=_fe(a,h,c)}return c}} -function yge(a,b,c){var d,e,f,g;g=pke(a.e.Dh(),b);d=RD(a.g,124);nke();if(RD(b,69).xk()){for(f=0;f<a.i;++f){e=d[f];if(g.am(e.Lk())){if(pb(e,c)){vLd(a,f);return true}}}}else if(c!=null){for(f=0;f<a.i;++f){e=d[f];if(g.am(e.Lk())){if(pb(c,e.md())){vLd(a,f);return true}}}}else{for(f=0;f<a.i;++f){e=d[f];if(g.am(e.Lk())){if(e.md()==null){vLd(a,f);return true}}}}return false} -function xcc(a,b){var c,d,e,f,g;b.Ug('Node and Port Label Placement and Node Sizing',1);DJb((i1b(),new t1b(a,true,true,new Acc)));if(RD(mQb(a,(Ywc(),kwc)),21).Hc((ovc(),hvc))){f=RD(mQb(a,(yCc(),EBc)),21);e=f.Hc((Pod(),Mod));g=Heb(TD(mQb(a,FBc)));for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);FDb(CDb(new SDb(null,new Swb(c.a,16)),new Ccc),new Ecc(f,e,g))}}b.Vg()} -function SHc(a,b){var c,d,e,f,g;a.c==null||a.c.length<b.c.length?(a.c=$C(xdb,Hye,28,b.c.length,16,1)):Nnb(a.c);a.a=new bnb;d=0;for(g=new Anb(b);g.a<g.c.c.length;){e=RD(ynb(g),10);e.p=d++}c=new Yub;for(f=new Anb(b);f.a<f.c.c.length;){e=RD(ynb(f),10);if(!a.c[e.p]){THc(a,e);c.b==0||(sFb(c.b!=0),RD(c.a.a.c,15)).gc()<a.a.c.length?Nub(c,a.a):Oub(c,a.a);a.a=new bnb}}return c} -function Ucd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,uGe),'ELK SPOrE Overlap Removal'),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new Xcd)));Agd(a,uGe,iGe,iGd(Scd));Agd(a,uGe,Eze,Qcd);Agd(a,uGe,_ze,8);Agd(a,uGe,nGe,iGd(Rcd));Agd(a,uGe,qGe,iGd(Ocd));Agd(a,uGe,rGe,iGd(Pcd));Agd(a,uGe,LDe,(Geb(),false))} -function Dee(a,b){var c,d,e,f,g,h,i;c=b.qi(a.a);if(c){i=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),cLe));if(i!=null){d=new bnb;for(f=vhb(i,'\\w'),g=0,h=f.length;g<h;++g){e=f[g];lhb(e,'##other')?Rmb(d,'!##'+Uee(a,BXd(b.qk()))):lhb(e,'##local')?(d.c.push(null),undefined,true):lhb(e,aLe)?Rmb(d,Uee(a,BXd(b.qk()))):(ZEb(d.c,e),true)}return d}}return yob(),yob(),vob} -function u$b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;g=Zid(b.c,c,d);for(l=new Anb(b.a);l.a<l.c.c.length;){k=RD(ynb(l),10);$id(k.n,g);for(n=new Anb(k.j);n.a<n.c.c.length;){m=RD(ynb(n),12);for(f=new Anb(m.g);f.a<f.c.c.length;){e=RD(ynb(f),18);Cjd(e.a,g);h=RD(mQb(e,(yCc(),RAc)),75);!!h&&Cjd(h,g);for(j=new Anb(e.b);j.a<j.c.c.length;){i=RD(ynb(j),72);$id(i.n,g)}}}Rmb(a.a,k);k.a=a}} -function wYb(a){var b,c,d,e,f,g,h,i;if(a.d){throw Adb(new dgb((lfb(eQ),lye+eQ.k+mye)))}a.c==(Cmd(),Amd)&&vYb(a,ymd);for(c=new Anb(a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),194);b.e=0}for(g=new Anb(a.a.b);g.a<g.c.c.length;){f=RD(ynb(g),86);f.o=pxe;for(e=f.f.Kc();e.Ob();){d=RD(e.Pb(),86);++d.d.e}}LYb(a);for(i=new Anb(a.a.b);i.a<i.c.c.length;){h=RD(ynb(i),86);h.k=true}return a} -function mnc(a,b){var c,d,e,f,g,h,i,j;h=new Vmc(a);c=new Yub;Pub(c,b,c.c.b,c.c);while(c.b!=0){d=RD(c.b==0?null:(sFb(c.b!=0),Wub(c,c.a.a)),113);d.d.p=1;for(g=new Anb(d.e);g.a<g.c.c.length;){e=RD(ynb(g),340);Qmc(h,e);j=e.d;j.d.p==0&&(Pub(c,j,c.c.b,c.c),true)}for(f=new Anb(d.b);f.a<f.c.c.length;){e=RD(ynb(f),340);Qmc(h,e);i=e.c;i.d.p==0&&(Pub(c,i,c.c.b,c.c),true)}}return h} -function ksd(a){var b,c,d,e,f;d=Kfb(UD(Gxd(a,(umd(),Uld))));if(d==1){return}zyd(a,d*a.g,d*a.f);c=cr(hr((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c),new Lsd));for(f=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.n&&(a.n=new C5d(I4,a,1,7)),a.n),(!a.c&&(a.c=new C5d(K4,a,9,9)),a.c),c])));gs(f);){e=RD(hs(f),422);e.qh(d*e.nh(),d*e.oh());e.ph(d*e.mh(),d*e.lh());b=RD(e.of(Fld),8);if(b){b.a*=d;b.b*=d}}} -function Qfe(a,b,c){var d,e,f,g,h;g=(nke(),RD(b,69).xk());if(qke(a.e,b)){if(b.Si()&&dge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)){return false}}else{h=pke(a.e.Dh(),b);d=RD(a.g,124);for(f=0;f<a.i;++f){e=d[f];if(h.am(e.Lk())){if(g?pb(e,c):c==null?e.md()==null:pb(c,e.md())){return false}else{RD(eHd(a,f,g?RD(c,76):oke(b,c)),76);return true}}}}return WGd(a,g?RD(c,76):oke(b,c))} -function _dc(a,b,c,d,e){var f,g,h,i,j,k,l,m;for(g=new Anb(a.b);g.a<g.c.c.length;){f=RD(ynb(g),30);m=t2b(f.a);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];switch(RD(mQb(i,(yCc(),UAc)),171).g){case 1:dec(i);g3b(i,b);aec(i,true,d);break;case 3:eec(i);g3b(i,c);aec(i,false,e);}}}h=new Jkb(a.b,0);while(h.b<h.d.gc()){(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),30)).a.c.length==0&&Ckb(h)}} -function mjb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;n=b.length;i=n;BFb(0,b.length);if(b.charCodeAt(0)==45){l=-1;m=1;--n}else{l=1;m=0}f=(xjb(),wjb)[10];e=n/f|0;q=n%f;q!=0&&++e;h=$C(kE,Pwe,28,e,15,1);c=vjb[8];g=0;o=m+(q==0?f:q);for(p=m;p<i;p=o,o=p+f){d=Oeb((AFb(p,o,b.length),b.substr(p,o-p)),qwe,lve);j=(Ljb(),Pjb(h,h,g,c));j+=Fjb(h,g,d);h[g++]=j}k=g;a.e=l;a.d=k;a.a=h;Rib(a)} -function bPb(a,b){var c,d,e,f;c=new gPb;d=RD(zDb(GDb(new SDb(null,new Swb(a.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21);e=d.gc();d=RD(zDb(GDb(new SDb(null,new Swb(b.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[wBb,vBb]))),21);f=d.gc();e=e==1?1:0;f=f==1?1:0;if(e<f){return -1}if(e==f){return 0}return 1} -function p0b(a){var b,c,d,e,f,g,h,i,j,k,l,m;h=a.i;e=Heb(TD(mQb(h,(yCc(),NAc))));k=0;d=0;for(j=new Anb(a.g);j.a<j.c.c.length;){i=RD(ynb(j),18);g=W0b(i);f=g&&e&&Heb(TD(mQb(i,OAc)));m=i.d.i;g&&f?++d:g&&!f?++k:Y2b(m).e==h?++d:++k}for(c=new Anb(a.e);c.a<c.c.c.length;){b=RD(ynb(c),18);g=W0b(b);f=g&&e&&Heb(TD(mQb(b,OAc)));l=b.c.i;g&&f?++k:g&&!f?++d:Y2b(l).e==h?++k:++d}return k-d} -function sQc(a,b,c,d){this.e=a;this.k=RD(mQb(a,(Ywc(),Qwc)),312);this.g=$C(jR,WAe,10,b,0,1);this.b=$C(VI,Nve,345,b,7,1);this.a=$C(jR,WAe,10,b,0,1);this.d=$C(VI,Nve,345,b,7,1);this.j=$C(jR,WAe,10,b,0,1);this.i=$C(VI,Nve,345,b,7,1);this.p=$C(VI,Nve,345,b,7,1);this.n=$C(QI,Nve,484,b,8,1);Mnb(this.n,(Geb(),false));this.f=$C(QI,Nve,484,b,8,1);Mnb(this.f,true);this.o=c;this.c=d} -function mdc(a,b){var c,d,e,f,g,h;if(b.dc()){return}if(RD(b.Xb(0),292).d==(btc(),$sc)){ddc(a,b)}else{for(d=b.Kc();d.Ob();){c=RD(d.Pb(),292);switch(c.d.g){case 5:_cc(a,c,fdc(a,c));break;case 0:_cc(a,c,(g=c.f-c.c+1,h=(g-1)/2|0,c.c+h));break;case 4:_cc(a,c,hdc(a,c));break;case 2:ndc(c);_cc(a,c,(f=jdc(c),f?c.c:c.f));break;case 1:ndc(c);_cc(a,c,(e=jdc(c),e?c.f:c.c));}edc(c.a)}}} -function zt(a,b,c,d){var e,f,g;g=new Hu(b,c);if(!a.a){a.a=a.e=g;Zjb(a.b,b,new Gu(g));++a.c}else if(!d){RD(Hvb(a.e),511).b=g;g.d=a.e;a.e=g;e=RD(Wjb(a.b,b),260);if(!e){Zjb(a.b,b,e=new Gu(g));++a.c}else{++e.a;f=e.c;f.c=g;g.e=f;e.c=g}}else{e=RD(Hvb(RD(Wjb(a.b,b),260)),260);++e.a;g.d=d.d;g.e=d.e;g.b=d;g.c=d;!d.e?(e.b=g):(d.e.c=g);!d.d?(a.a=g):(d.d.b=g);d.d=g;d.e=g}++a.d;return g} -function lJb(a,b){var c,d,e,f,g;b.Ug('Network simplex',1);if(a.e.a.c.length<1){b.Vg();return}for(f=new Anb(a.e.a);f.a<f.c.c.length;){e=RD(ynb(f),125);e.e=0}g=a.e.a.c.length>=40;g&&wJb(a);nJb(a);mJb(a);c=qJb(a);d=0;while(!!c&&d<a.f){kJb(a,c,jJb(a,c));c=qJb(a);++d}g&&vJb(a);a.a?hJb(a,tJb(a)):tJb(a);a.b=null;a.d=null;a.p=null;a.c=null;a.g=null;a.i=null;a.n=null;a.o=null;b.Vg()} -function T7b(a,b){var c,d,e,f,g,h,i;if(b.e){return}b.e=true;for(d=b.d.a.ec().Kc();d.Ob();){c=RD(d.Pb(),18);if(b.o&&b.d.a.gc()<=1){g=b.a.c;h=b.a.c+b.a.b;i=new rjd(g+(h-g)/2,b.b);Mub(RD(b.d.a.ec().Kc().Pb(),18).a,i);continue}e=RD(Wjb(b.c,c),467);if(e.b||e.c){V7b(a,c,b);continue}f=a.d==(lFc(),kFc)&&(e.d||e.e)&&_7b(a,b)&&b.d.a.gc()<=1;f?W7b(c,b):U7b(a,c,b)}b.k&&xgb(b.d,new m8b)} -function A5c(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=f;h=(d+e)/2+m;q=c*$wnd.Math.cos(h);r=c*$wnd.Math.sin(h);s=q-b.g/2;t=r-b.f/2;Dyd(b,s);Eyd(b,t);l=a.a.Eg(b);p=2*$wnd.Math.acos(c/c+a.c);if(p<e-d){n=p/l;g=(d+e-p)/2}else{n=(e-d)/l;g=d}o=Q2c(b);if(a.e){a.e.Fg(a.d);a.e.Gg(o)}for(j=new Anb(o);j.a<j.c.c.length;){i=RD(ynb(j),27);k=a.a.Eg(i);A5c(a,i,c+a.c,g,g+n*k,f);g+=n*k}} -function zA(a,b,c){var d;d=c.q.getMonth();switch(b){case 5:Zhb(a,cD(WC(qJ,1),Nve,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[d]);break;case 4:Zhb(a,cD(WC(qJ,1),Nve,2,6,[Cwe,Dwe,Ewe,Fwe,Gwe,Hwe,Iwe,Jwe,Kwe,Lwe,Mwe,Nwe])[d]);break;case 3:Zhb(a,cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[d]);break;default:UA(a,d+1,b);}} -function ATb(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=new rjd(c,d);ojd(i,RD(mQb(b,(JVb(),GVb)),8));for(m=new Anb(b.e);m.a<m.c.c.length;){l=RD(ynb(m),153);$id(l.d,i);Rmb(a.e,l)}for(h=new Anb(b.c);h.a<h.c.c.length;){g=RD(ynb(h),289);for(f=new Anb(g.a);f.a<f.c.c.length;){e=RD(ynb(f),250);$id(e.d,i)}Rmb(a.c,g)}for(k=new Anb(b.d);k.a<k.c.c.length;){j=RD(ynb(k),453);$id(j.d,i);Rmb(a.d,j)}} -function TFc(a,b){var c,d,e,f,g,h,i,j;for(i=new Anb(b.j);i.a<i.c.c.length;){h=RD(ynb(i),12);for(e=new l4b(h.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);c=d.c==h?d.d:d.c;f=c.i;if(b==f){continue}j=RD(mQb(d,(yCc(),KBc)),17).a;j<0&&(j=0);g=f.p;if(a.b[g]==0){if(d.d==c){a.a[g]-=j+1;a.a[g]<=0&&a.c[g]>0&&Mub(a.f,f)}else{a.c[g]-=j+1;a.c[g]<=0&&a.a[g]>0&&Mub(a.e,f)}}}}} -function FVc(a,b,c,d){var e,f,g,h,i,j,k;i=new rjd(c,d);ojd(i,RD(mQb(b,(q$c(),SZc)),8));for(k=Sub(b.b,0);k.b!=k.d.c;){j=RD(evb(k),39);$id(j.e,i);Mub(a.b,j)}for(h=RD(zDb(BDb(new SDb(null,new Swb(b.a,16))),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15).Kc();h.Ob();){g=RD(h.Pb(),65);for(f=Sub(g.a,0);f.b!=f.d.c;){e=RD(evb(f),8);e.a+=i.a;e.b+=i.b}Mub(a.a,g)}} -function kWc(a,b){var c,d,e,f;if(0<(ZD(a,16)?RD(a,16).gc():Kr(a.Kc()))){e=b;if(1<e){--e;f=new uWc;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),39);f=Al(cD(WC(cJ,1),rve,20,0,[f,new dXc(c)]))}return kWc(f,e)}if(e<0){f=new xWc;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),39);f=Al(cD(WC(cJ,1),rve,20,0,[f,new dXc(c)]))}if(0<(ZD(f,16)?RD(f,16).gc():Kr(f.Kc()))){return kWc(f,e)}}}return RD(Hr(a.Kc()),39)} -function v0c(a,b,c){var d,e,f,g;c.Ug('Processor order nodes',2);a.b=Kfb(UD(mQb(b,(h_c(),_$c))));a.a=RD(mQb(b,H$c),88);if(a.a==(Cmd(),Amd)){a.a=xmd;pQb(b,H$c,a.a)}e=new Yub;for(g=Sub(b.b,0);g.b!=g.d.c;){f=RD(evb(g),39);Heb(TD(mQb(f,(q$c(),n$c))))&&(Pub(e,f,e.c.b,e.c),true)}d=(sFb(e.b!=0),RD(e.a.a.c,39));t0c(a,d);c.fh(1);w0c(a,d,0-Kfb(UD(mQb(d,(q$c(),d$c))))/2,0);c.fh(1);c.Vg()} -function dqd(){dqd=geb;Ypd=new eqd('DEFAULT_MINIMUM_SIZE',0);$pd=new eqd('MINIMUM_SIZE_ACCOUNTS_FOR_PADDING',1);Xpd=new eqd('COMPUTE_PADDING',2);_pd=new eqd('OUTSIDE_NODE_LABELS_OVERHANG',3);aqd=new eqd('PORTS_OVERHANG',4);cqd=new eqd('UNIFORM_PORT_SPACING',5);bqd=new eqd('SPACE_EFFICIENT_PORT_LABELS',6);Zpd=new eqd('FORCE_TABULAR_NODE_LABELS',7);Wpd=new eqd('ASYMMETRICAL',8)} -function Rje(a,b){var c,d,e,f,g,h,i,j;if(!b){return null}else{c=(f=b.Dh(),!f?null:BXd(f).wi().si(f));if(c){dub(a,b,c);e=b.Dh();for(i=0,j=(e.i==null&&rYd(e),e.i).length;i<j;++i){h=(d=(e.i==null&&rYd(e),e.i),i>=0&&i<d.length?d[i]:null);if(h.rk()&&!h.sk()){if(ZD(h,331)){Tje(a,RD(h,35),b,c)}else{g=RD(h,19);(g.Bb&QHe)!=0&&Vje(a,g,b,c)}}}b.Vh()&&RD(c,54).ei(RD(b,54)._h())}return c}} -function kJb(a,b,c){var d,e,f;if(!b.f){throw Adb(new agb('Given leave edge is no tree edge.'))}if(c.f){throw Adb(new agb('Given enter edge is a tree edge already.'))}b.f=false;$sb(a.p,b);c.f=true;Ysb(a.p,c);d=c.e.e-c.d.e-c.a;oJb(a,c.e,b)||(d=-d);for(f=new Anb(a.e.a);f.a<f.c.c.length;){e=RD(ynb(f),125);oJb(a,e,b)||(e.e+=d)}a.j=1;Nnb(a.c);uJb(a,RD(ynb(new Anb(a.e.a)),125));iJb(a)} -function wIc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;BIc(a,b,c);f=b[c];n=d?(qpd(),ppd):(qpd(),Xod);if(xIc(b.length,c,d)){e=b[d?c-1:c+1];sIc(a,e,d?(BEc(),zEc):(BEc(),yEc));for(i=f,k=0,m=i.length;k<m;++k){g=i[k];vIc(a,g,n)}sIc(a,f,d?(BEc(),yEc):(BEc(),zEc));for(h=e,j=0,l=h.length;j<l;++j){g=h[j];!!g.e||vIc(a,g,spd(n))}}else{for(h=f,j=0,l=h.length;j<l;++j){g=h[j];vIc(a,g,n)}}return false} -function erd(a,b,c,d,e){var f,g,h,i,j,k,l;yob();_mb(a,new Urd);h=new Jkb(a,0);l=new bnb;f=0;while(h.b<h.d.gc()){g=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),163));if(l.c.length!=0&&urd(g)*trd(g)>f*2){k=new zrd(l);j=urd(g)/trd(g);i=ird(k,b,new z3b,c,d,e,j);$id(hjd(k.e),i);l.c.length=0;f=0;ZEb(l.c,k);ZEb(l.c,g);f=urd(k)*trd(k)+urd(g)*trd(g)}else{ZEb(l.c,g);f+=urd(g)*trd(g)}}return l} -function O9b(a,b){var c,d,e,f,g,h;h=RD(mQb(b,(yCc(),BBc)),101);if(!(h==(Bod(),xod)||h==wod)){return}e=(new rjd(b.f.a+b.d.b+b.d.c,b.f.b+b.d.d+b.d.a)).b;for(g=new Anb(a.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(f.k!=(r3b(),m3b)){continue}c=RD(mQb(f,(Ywc(),hwc)),64);if(c!=(qpd(),Xod)&&c!=ppd){continue}d=Kfb(UD(mQb(f,Jwc)));h==xod&&(d*=e);f.n.b=d-RD(mQb(f,zBc),8).b;U2b(f,false,true)}} -function uge(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(Mvd(a.e)){if(b!=c){e=RD(a.g,124);n=e[c];g=n.Lk();if(qke(a.e,g)){o=pke(a.e.Dh(),g);i=-1;h=-1;d=0;for(j=0,l=b>c?b:c;j<=l;++j){if(j==c){h=d++}else{f=e[j];k=o.am(f.Lk());j==b&&(i=j==l&&!k?d-1:d);k&&++d}}m=RD(uLd(a,b,c),76);h!=i&&eZd(a,new c4d(a.e,7,g,sgb(h),n.md(),i));return m}}}else{return RD(SHd(a,b,c),76)}return RD(uLd(a,b,c),76)} -function ugc(a,b){var c,d,e,f,g,h,i;b.Ug('Port order processing',1);i=RD(mQb(a,(yCc(),HBc)),430);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);g=RD(mQb(e,BBc),101);h=e.j;if(g==(Bod(),vod)||g==xod||g==wod){yob();_mb(h,mgc)}else if(g!=zod&&g!=Aod){yob();_mb(h,pgc);wgc(h);i==(sEc(),rEc)&&_mb(h,ogc)}e.i=true;V2b(e)}}b.Vg()} -function VHc(a){var b,c,d,e,f,g,h,i;i=new Tsb;b=new BIb;for(g=a.Kc();g.Ob();){e=RD(g.Pb(),10);h=eJb(fJb(new gJb,e),b);rtb(i.f,e,h)}for(f=a.Kc();f.Ob();){e=RD(f.Pb(),10);for(d=new is(Mr(a3b(e).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(W0b(c)){continue}rIb(uIb(tIb(sIb(vIb(new wIb,$wnd.Math.max(1,RD(mQb(c,(yCc(),LBc)),17).a)),1),RD(Wjb(i,c.c.i),125)),RD(Wjb(i,c.d.i),125)))}}return b} -function TRc(){TRc=geb;ORc=pfd(new ufd,(sXb(),qXb),(hcc(),Bbc));QRc=pfd(new ufd,pXb,Fbc);RRc=nfd(pfd(new ufd,pXb,Tbc),rXb,Sbc);NRc=nfd(pfd(pfd(new ufd,pXb,vbc),qXb,wbc),rXb,xbc);SRc=mfd(mfd(rfd(nfd(pfd(new ufd,nXb,bcc),rXb,acc),qXb),_bc),ccc);PRc=nfd(new ufd,rXb,Cbc);LRc=nfd(pfd(pfd(pfd(new ufd,oXb,Ibc),qXb,Kbc),qXb,Lbc),rXb,Jbc);MRc=nfd(pfd(pfd(new ufd,qXb,Lbc),qXb,qbc),rXb,pbc)} -function lD(a,b,c,d,e,f){var g,h,i,j,k,l,m;j=oD(b)-oD(a);g=AD(b,j);i=hD(0,0,0);while(j>=0){h=rD(a,g);if(h){j<22?(i.l|=1<<j,undefined):j<44?(i.m|=1<<j-22,undefined):(i.h|=1<<j-44,undefined);if(a.l==0&&a.m==0&&a.h==0){break}}k=g.m;l=g.h;m=g.l;g.h=l>>>1;g.m=k>>>1|(l&1)<<21;g.l=m>>>1|(k&1)<<21;--j}c&&nD(i);if(f){if(d){eD=xD(a);e&&(eD=DD(eD,(MD(),KD)))}else{eD=hD(a.l,a.m,a.h)}}return i} -function rIc(a,b){var c,d,e,f,g,h,i,j,k,l;j=a.e[b.c.p][b.p]+1;i=b.c.a.c.length+1;for(h=new Anb(a.a);h.a<h.c.c.length;){g=RD(ynb(h),12);l=0;f=0;for(e=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(g),new _3b(g)])));gs(e);){d=RD(hs(e),12);if(d.i.c==b.c){l+=AIc(a,d.i)+1;++f}}c=l/f;k=g.j;k==(qpd(),Xod)?c<j?(a.f[g.p]=a.c-c):(a.f[g.p]=a.b+(i-c)):k==ppd&&(c<j?(a.f[g.p]=a.b+c):(a.f[g.p]=a.c-(i-c)))}} -function Oeb(a,b,c){var d,e,f,g,h;if(a==null){throw Adb(new Vgb(vve))}f=a.length;g=f>0&&(BFb(0,a.length),a.charCodeAt(0)==45||(BFb(0,a.length),a.charCodeAt(0)==43))?1:0;for(d=g;d<f;d++){if(dfb((BFb(d,a.length),a.charCodeAt(d)))==-1){throw Adb(new Vgb(nxe+a+'"'))}}h=parseInt(a,10);e=h<b;if(isNaN(h)){throw Adb(new Vgb(nxe+a+'"'))}else if(e||h>c){throw Adb(new Vgb(nxe+a+'"'))}return h} -function Jqc(a){var b,c,d,e,f,g,h;g=new Yub;for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),118);PSc(e,e.f.c.length);QSc(e,e.k.c.length);if(e.i==0){e.o=0;Pub(g,e,g.c.b,g.c)}}while(g.b!=0){e=RD(g.b==0?null:(sFb(g.b!=0),Wub(g,g.a.a)),118);d=e.o+1;for(c=new Anb(e.f);c.a<c.c.c.length;){b=RD(ynb(c),132);h=b.a;RSc(h,$wnd.Math.max(h.o,d));QSc(h,h.i-1);h.i==0&&(Pub(g,h,g.c.b,g.c),true)}}} -function Ged(a){var b,c,d,e,f,g,h,i;for(g=new Anb(a);g.a<g.c.c.length;){f=RD(ynb(g),74);d=AGd(RD(QHd((!f.b&&(f.b=new Yie(E4,f,4,7)),f.b),0),84));h=d.i;i=d.j;e=RD(QHd((!f.a&&(f.a=new C5d(F4,f,6,6)),f.a),0),166);Nzd(e,e.j+h,e.k+i);Gzd(e,e.b+h,e.c+i);for(c=new dMd((!e.a&&(e.a=new XZd(D4,e,5)),e.a));c.e!=c.i.gc();){b=RD(bMd(c),377);Uxd(b,b.a+h,b.b+i)}Bjd(RD(Gxd(f,(umd(),cld)),75),h,i)}} -function Ere(a){var b;switch(a){case 100:return Jre(OLe,true);case 68:return Jre(OLe,false);case 119:return Jre(PLe,true);case 87:return Jre(PLe,false);case 115:return Jre(QLe,true);case 83:return Jre(QLe,false);case 99:return Jre(RLe,true);case 67:return Jre(RLe,false);case 105:return Jre(SLe,true);case 73:return Jre(SLe,false);default:throw Adb(new yz((b=a,NLe+b.toString(16))));}} -function b_b(a){var b,c,d,e,f;e=RD(Vmb(a.a,0),10);b=new j3b(a);Rmb(a.a,b);b.o.a=$wnd.Math.max(1,e.o.a);b.o.b=$wnd.Math.max(1,e.o.b);b.n.a=e.n.a;b.n.b=e.n.b;switch(RD(mQb(e,(Ywc(),hwc)),64).g){case 4:b.n.a+=2;break;case 1:b.n.b+=2;break;case 2:b.n.a-=2;break;case 3:b.n.b-=2;}d=new R3b;P3b(d,b);c=new a1b;f=RD(Vmb(e.j,0),12);Y0b(c,f);Z0b(c,d);$id(hjd(d.n),f.n);$id(hjd(d.a),f.a);return b} -function Wdc(a,b,c,d,e){if(c&&(!d||(a.c-a.b&a.a.length-1)>1)&&b==1&&RD(a.a[a.b],10).k==(r3b(),n3b)){Qdc(RD(a.a[a.b],10),(Pnd(),Lnd))}else if(d&&(!c||(a.c-a.b&a.a.length-1)>1)&&b==1&&RD(a.a[a.c-1&a.a.length-1],10).k==(r3b(),n3b)){Qdc(RD(a.a[a.c-1&a.a.length-1],10),(Pnd(),Mnd))}else if((a.c-a.b&a.a.length-1)==2){Qdc(RD(omb(a),10),(Pnd(),Lnd));Qdc(RD(omb(a),10),Mnd)}else{Ndc(a,e)}jmb(a)} -function QVc(a,b,c){var d,e,f,g,h;f=0;for(e=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));e.e!=e.i.gc();){d=RD(bMd(e),27);g='';(!d.n&&(d.n=new C5d(I4,d,1,7)),d.n).i==0||(g=RD(QHd((!d.n&&(d.n=new C5d(I4,d,1,7)),d.n),0),135).a);h=new bXc(f++,b,g);kQb(h,d);pQb(h,(q$c(),h$c),d);h.e.b=d.j+d.f/2;h.f.a=$wnd.Math.max(d.g,1);h.e.a=d.i+d.g/2;h.f.b=$wnd.Math.max(d.f,1);Mub(b.b,h);rtb(c.f,d,h)}} -function L5b(a){var b,c,d,e,f;d=RD(mQb(a,(Ywc(),Awc)),27);f=RD(Gxd(d,(yCc(),lBc)),181).Hc((Qpd(),Ppd));if(!a.e){e=RD(mQb(a,kwc),21);b=new rjd(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);if(e.Hc((ovc(),hvc))){Ixd(d,BBc,(Bod(),wod));Esd(d,b.a,b.b,false,true)}else{Heb(TD(Gxd(d,mBc)))||Esd(d,b.a,b.b,true,true)}}f?Ixd(d,lBc,xsb(Ppd)):Ixd(d,lBc,(c=RD(mfb(H3),9),new Fsb(c,RD(WEb(c,c.length),9),0)))} -function JA(a,b,c){var d,e,f,g;if(b[0]>=a.length){c.o=0;return true}switch(ihb(a,b[0])){case 43:e=1;break;case 45:e=-1;break;default:c.o=0;return true;}++b[0];f=b[0];g=HA(a,b);if(g==0&&b[0]==f){return false}if(b[0]<a.length&&ihb(a,b[0])==58){d=g*60;++b[0];f=b[0];g=HA(a,b);if(g==0&&b[0]==f){return false}d+=g}else{d=g;d<24&&b[0]-f<=2?(d*=60):(d=d%100+(d/100|0)*60)}d*=e;c.o=-d;return true} -function lnc(a){var b,c,d,e,f,g,h,i,j;g=new bnb;for(d=new is(Mr(a3b(a.b).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);W0b(c)&&Rmb(g,new knc(c,nnc(a,c.c),nnc(a,c.d)))}for(j=(f=(new glb(a.e)).a.vc().Kc(),new llb(f));j.a.Ob();){h=(b=RD(j.a.Pb(),44),RD(b.md(),113));h.d.p=0}for(i=(e=(new glb(a.e)).a.vc().Kc(),new llb(e));i.a.Ob();){h=(b=RD(i.a.Pb(),44),RD(b.md(),113));h.d.p==0&&Rmb(a.d,mnc(a,h))}} -function e5b(a){var b,c,d,e,f,g,h;f=MCd(a);for(e=new dMd((!a.e&&(a.e=new Yie(G4,a,7,4)),a.e));e.e!=e.i.gc();){d=RD(bMd(e),74);h=AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84));if(!NGd(h,f)){return true}}for(c=new dMd((!a.d&&(a.d=new Yie(G4,a,8,5)),a.d));c.e!=c.i.gc();){b=RD(bMd(c),74);g=AGd(RD(QHd((!b.b&&(b.b=new Yie(E4,b,4,7)),b.b),0),84));if(!NGd(g,f)){return true}}return false} -function jRc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new Anb(b.b);g.a<g.c.c.length;){f=RD(ynb(g),30);for(j=new Anb(f.a);j.a<j.c.c.length;){i=RD(ynb(j),10);k=new bnb;h=0;for(d=new is(Mr(Z2b(i).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(W0b(c)||!W0b(c)&&c.c.i.c==c.d.i.c){continue}e=RD(mQb(c,(yCc(),MBc)),17).a;if(e>h){h=e;k.c.length=0}e==h&&Rmb(k,new Ptd(c.c.i,c))}yob();_mb(k,a.c);Qmb(a.b,i.p,k)}}} -function kRc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new Anb(b.b);g.a<g.c.c.length;){f=RD(ynb(g),30);for(j=new Anb(f.a);j.a<j.c.c.length;){i=RD(ynb(j),10);k=new bnb;h=0;for(d=new is(Mr(a3b(i).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(W0b(c)||!W0b(c)&&c.c.i.c==c.d.i.c){continue}e=RD(mQb(c,(yCc(),MBc)),17).a;if(e>h){h=e;k.c.length=0}e==h&&Rmb(k,new Ptd(c.d.i,c))}yob();_mb(k,a.c);Qmb(a.f,i.p,k)}}} -function HVc(a,b){var c,d,e,f,g,h,i,j;j=TD(mQb(b,(h_c(),Z$c)));if(j==null||(uFb(j),j)){EVc(a,b);e=new bnb;for(i=Sub(b.b,0);i.b!=i.d.c;){g=RD(evb(i),39);c=DVc(a,g,null);if(c){kQb(c,b);ZEb(e.c,c)}}a.a=null;a.b=null;if(e.c.length>1){for(d=new Anb(e);d.a<d.c.c.length;){c=RD(ynb(d),121);f=0;for(h=Sub(c.b,0);h.b!=h.d.c;){g=RD(evb(h),39);g.g=f++}}}return e}return dv(cD(WC(W$,1),Jze,121,0,[b]))} -function hqc(a){var b,c,d,e,f,g,h,i;i=new Ejd;b=Sub(a,0);h=null;c=RD(evb(b),8);e=RD(evb(b),8);while(b.b!=b.d.c){h=c;c=e;e=RD(evb(b),8);f=iqc(ojd(new rjd(h.a,h.b),c));g=iqc(ojd(new rjd(e.a,e.b),c));d=10;d=$wnd.Math.min(d,$wnd.Math.abs(f.a+f.b)/2);d=$wnd.Math.min(d,$wnd.Math.abs(g.a+g.b)/2);f.a=Lgb(f.a)*d;f.b=Lgb(f.b)*d;g.a=Lgb(g.a)*d;g.b=Lgb(g.b)*d;Mub(i,$id(f,c));Mub(i,$id(g,c))}return i} -function wKc(a,b,c){var d,e,f,g,h,i;c.Ug('Minimize Crossings '+a.a,1);d=b.b.c.length==0||!QDb(CDb(new SDb(null,new Swb(b.b,16)),new PAb(new XKc))).Bd((xDb(),wDb));i=b.b.c.length==1&&RD(Vmb(b.b,0),30).a.c.length==1;f=dE(mQb(b,(yCc(),IAc)))===dE((Fnd(),Cnd));if(d||i&&!f){c.Vg();return}e=rKc(a,b);g=(h=RD(ju(e,0),219),h.c.kg()?h.c.eg()?new KKc(a):new MKc(a):new IKc(a));sKc(e,g);EKc(a);c.Vg()} -function xvd(a,b,c,d){var e,f,g,h,i;g=a.Ph();i=a.Jh();e=null;if(i){if(!!b&&(jwd(a,b,c).Bb&txe)==0){d=rLd(i.El(),a,d);a.di(null);e=b.Qh()}else{i=null}}else{!!g&&(i=g.Qh());!!b&&(e=b.Qh())}i!=e&&!!i&&i.Il(a);h=a.Fh();a.Bh(b,c);i!=e&&!!e&&e.Hl(a);if(a.vh()&&a.wh()){if(!!g&&h>=0&&h!=c){f=new N3d(a,1,h,g,null);!d?(d=f):d.nj(f)}if(c>=0){f=new N3d(a,1,c,h==c?g:null,b);!d?(d=f):d.nj(f)}}return d} -function jSd(a){var b,c,d;if(a.b==null){d=new Qhb;if(a.i!=null){Nhb(d,a.i);d.a+=':'}if((a.f&256)!=0){if((a.f&256)!=0&&a.a!=null){wSd(a.i)||(d.a+='//',d);Nhb(d,a.a)}if(a.d!=null){d.a+='/';Nhb(d,a.d)}(a.f&16)!=0&&(d.a+='/',d);for(b=0,c=a.j.length;b<c;b++){b!=0&&(d.a+='/',d);Nhb(d,a.j[b])}if(a.g!=null){d.a+='?';Nhb(d,a.g)}}else{Nhb(d,a.a)}if(a.e!=null){d.a+='#';Nhb(d,a.e)}a.b=d.a}return a.b} -function V8b(a,b){var c,d,e,f,g,h;for(e=new Anb(b.a);e.a<e.c.c.length;){d=RD(ynb(e),10);f=mQb(d,(Ywc(),Awc));if(ZD(f,12)){g=RD(f,12);h=j2b(b,d,g.o.a,g.o.b);g.n.a=h.a;g.n.b=h.b;Q3b(g,RD(mQb(d,hwc),64))}}c=new rjd(b.f.a+b.d.b+b.d.c,b.f.b+b.d.d+b.d.a);if(RD(mQb(b,(Ywc(),kwc)),21).Hc((ovc(),hvc))){pQb(a,(yCc(),BBc),(Bod(),wod));RD(mQb(Y2b(a),kwc),21).Fc(kvc);r2b(a,c,false)}else{r2b(a,c,true)}} -function Ffc(a,b,c,d,e){var f,g,h,i;f=new j3b(a);h3b(f,(r3b(),q3b));pQb(f,(yCc(),BBc),(Bod(),wod));pQb(f,(Ywc(),Awc),b.c.i);g=new R3b;pQb(g,Awc,b.c);Q3b(g,e);P3b(g,f);pQb(b.c,Iwc,f);h=new j3b(a);h3b(h,q3b);pQb(h,BBc,wod);pQb(h,Awc,b.d.i);i=new R3b;pQb(i,Awc,b.d);Q3b(i,e);P3b(i,h);pQb(b.d,Iwc,h);Y0b(b,g);Z0b(b,i);wFb(0,c.c.length);XEb(c.c,0,f);ZEb(d.c,h);pQb(f,$vc,sgb(1));pQb(h,$vc,sgb(1))} -function Eo(a,b,c,d){var e,f,g,h,i;i=Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)));e=Ydb(Ndb(cwe,qgb(Ydb(Ndb(c==null?0:tb(c),dwe)),15)));h=Ho(a,b,i);g=Go(a,c,e);if(!!h&&e==h.a&&Hb(c,h.g)){return c}else if(!!g&&!d){throw Adb(new agb('key already present: '+c))}!!h&&yo(a,h);!!g&&yo(a,g);f=new kp(c,e,b,i);Bo(a,f,g);if(g){g.e=null;g.c=null}if(h){h.e=null;h.c=null}Fo(a);return !h?null:h.g} -function Tjb(a,b,c){var d,e,f,g,h;for(f=0;f<b;f++){d=0;for(h=f+1;h<b;h++){d=Bdb(Bdb(Ndb(Cdb(a[f],yxe),Cdb(a[h],yxe)),Cdb(c[f+h],yxe)),Cdb(Ydb(d),yxe));c[f+h]=Ydb(d);d=Udb(d,32)}c[f+b]=Ydb(d)}sjb(c,c,b<<1);d=0;for(e=0,g=0;e<b;++e,g++){d=Bdb(Bdb(Ndb(Cdb(a[e],yxe),Cdb(a[e],yxe)),Cdb(c[g],yxe)),Cdb(Ydb(d),yxe));c[g]=Ydb(d);d=Udb(d,32);++g;d=Bdb(d,Cdb(c[g],yxe));c[g]=Ydb(d);d=Udb(d,32)}return c} -function xOc(a,b,c){var d,e,f,g,h,i,j,k;if(gr(b)){return}i=Kfb(UD(hFc(c.c,(yCc(),fCc))));j=RD(hFc(c.c,eCc),140);!j&&(j=new P2b);d=c.a;e=null;for(h=b.Kc();h.Ob();){g=RD(h.Pb(),12);k=0;if(!e){k=j.d}else{k=i;k+=e.o.b}f=eJb(fJb(new gJb,g),a.f);Zjb(a.k,g,f);rIb(uIb(tIb(sIb(vIb(new wIb,0),eE($wnd.Math.ceil(k))),d),f));e=g;d=f}rIb(uIb(tIb(sIb(vIb(new wIb,0),eE($wnd.Math.ceil(j.a+e.o.b))),d),c.d))} -function K8c(a,b,c,d,e,f,g,h){var i,j,k,l,m,n;n=false;m=f-c.s;k=c.t-b.f+(j=S9c(c,m,false),j.a);if(d.g+h>m){return false}l=(i=S9c(d,m,false),i.a);if(k+h+l<=b.b){Q9c(c,f-c.s);c.c=true;Q9c(d,f-c.s);U9c(d,c.s,c.t+c.d+h);d.k=true;aad(c.q,d);n=true;if(e){Cad(b,d);d.j=b;if(a.c.length>g){Fad((tFb(g,a.c.length),RD(a.c[g],186)),d);(tFb(g,a.c.length),RD(a.c[g],186)).a.c.length==0&&Xmb(a,g)}}}return n} -function Qfc(a,b){var c,d,e,f,g,h;b.Ug('Partition midprocessing',1);e=new Tp;FDb(CDb(new SDb(null,new Swb(a.a,16)),new Ufc),new Wfc(e));if(e.d==0){return}h=RD(zDb(ODb((f=e.i,new SDb(null,(!f?(e.i=new zf(e,e.c)):f).Nc()))),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);d=h.Kc();c=RD(d.Pb(),17);while(d.Ob()){g=RD(d.Pb(),17);Pfc(RD(Qc(e,c),21),RD(Qc(e,g),21));c=g}b.Vg()} -function G_b(a,b,c){var d,e,f,g,h,i,j,k;if(b.p==0){b.p=1;g=c;if(!g){e=new bnb;f=(d=RD(mfb(E3),9),new Fsb(d,RD(WEb(d,d.length),9),0));g=new Ptd(e,f)}RD(g.a,15).Fc(b);b.k==(r3b(),m3b)&&RD(g.b,21).Fc(RD(mQb(b,(Ywc(),hwc)),64));for(i=new Anb(b.j);i.a<i.c.c.length;){h=RD(ynb(i),12);for(k=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(h),new _3b(h)])));gs(k);){j=RD(hs(k),12);G_b(a,j.i,g)}}return g}return null} -function bAd(a,b){var c,d,e,f,g;if(a.Ab){if(a.Ab){g=a.Ab.i;if(g>0){e=RD(a.Ab.g,2033);if(b==null){for(f=0;f<g;++f){c=e[f];if(c.d==null){return c}}}else{for(f=0;f<g;++f){c=e[f];if(lhb(b,c.d)){return c}}}}}else{if(b==null){for(d=new dMd(a.Ab);d.e!=d.i.gc();){c=RD(bMd(d),598);if(c.d==null){return c}}}else{for(d=new dMd(a.Ab);d.e!=d.i.gc();){c=RD(bMd(d),598);if(lhb(b,c.d)){return c}}}}}return null} -function RDd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r,s,t,u,v;n=qEd(a,EGd(b),e);Jzd(n,zDd(e,uIe));o=null;p=e;q=yDd(p,xIe);r=new UEd(n);WDd(r.a,q);s=yDd(p,'endPoint');t=new YEd(n);YDd(t.a,s);u=wDd(p,nIe);v=new _Ed(n);ZDd(v.a,u);l=zDd(e,pIe);f=new QEd(a,n);SDd(f.a,f.b,l);m=zDd(e,oIe);g=new REd(a,n);TDd(g.a,g.b,m);j=wDd(e,rIe);h=new SEd(c,n);UDd(h.b,h.a,j);k=wDd(e,qIe);i=new TEd(d,n);VDd(i.b,i.a,k)} -function q2b(a,b,c){var d,e,f,g,h;h=null;switch(b.g){case 1:for(e=new Anb(a.j);e.a<e.c.c.length;){d=RD(ynb(e),12);if(Heb(TD(mQb(d,(Ywc(),mwc))))){return d}}h=new R3b;pQb(h,(Ywc(),mwc),(Geb(),true));break;case 2:for(g=new Anb(a.j);g.a<g.c.c.length;){f=RD(ynb(g),12);if(Heb(TD(mQb(f,(Ywc(),Gwc))))){return f}}h=new R3b;pQb(h,(Ywc(),Gwc),(Geb(),true));}if(h){P3b(h,a);Q3b(h,c);d2b(h.n,a.o,c)}return h} -function d7b(a,b){var c,d,e,f,g,h;h=-1;g=new Yub;for(d=new l4b(a.b);xnb(d.a)||xnb(d.b);){c=RD(xnb(d.a)?ynb(d.a):ynb(d.b),18);h=$wnd.Math.max(h,Kfb(UD(mQb(c,(yCc(),FAc)))));c.c==a?FDb(CDb(new SDb(null,new Swb(c.b,16)),new j7b),new l7b(g)):FDb(CDb(new SDb(null,new Swb(c.b,16)),new n7b),new p7b(g));for(f=Sub(g,0);f.b!=f.d.c;){e=RD(evb(f),72);nQb(e,(Ywc(),dwc))||pQb(e,dwc,c)}Tmb(b,g);Xub(g)}return h} -function _Tc(a,b,c,d,e){var f,g,h,i,j;h=e?d.b:d.a;if(Zsb(a.a,d)){return}j=h>c.s&&h<c.c;i=false;if(c.e.b!=0&&c.j.b!=0){i=i|($wnd.Math.abs(h-Kfb(UD(Qub(c.e))))<Vze&&$wnd.Math.abs(h-Kfb(UD(Qub(c.j))))<Vze);i=i|($wnd.Math.abs(h-Kfb(UD(Rub(c.e))))<Vze&&$wnd.Math.abs(h-Kfb(UD(Rub(c.j))))<Vze)}if(j||i){g=RD(mQb(b,(yCc(),RAc)),75);if(!g){g=new Ejd;pQb(b,RAc,g)}f=new sjd(d);Pub(g,f,g.c.b,g.c);Ysb(a.a,f)}} -function ZPb(a,b,c,d){var e,f,g,h,i,j,k;if(YPb(a,b,c,d)){return true}else{for(g=new Anb(b.f);g.a<g.c.c.length;){f=RD(ynb(g),334);h=false;i=a.j-b.j+c;j=i+b.o;k=a.k-b.k+d;e=k+b.p;switch(f.a.g){case 0:h=fQb(a,i+f.b.a,0,i+f.c.a,k-1);break;case 1:h=fQb(a,j,k+f.b.a,a.o-1,k+f.c.a);break;case 2:h=fQb(a,i+f.b.a,e,i+f.c.a,a.p-1);break;default:h=fQb(a,0,k+f.b.a,i-1,k+f.c.a);}if(h){return true}}}return false} -function yZc(a,b,c){var d,e,f,g,h,i,j,k,l;c.Ug('Processor set coordinates',1);a.a=b.b.b==0?1:b.b.b;j=null;d=Sub(b.b,0);while(!j&&d.b!=d.d.c){l=RD(evb(d),39);if(Heb(TD(mQb(l,(q$c(),n$c))))){j=l;i=l.e;i.a=RD(mQb(l,o$c),17).a;i.b=RD(mQb(l,p$c),17).a}}h=$Wc(j);k=1;do{h=zZc((e=h,c.eh(k),e));k=h.b/a.a|0}while(h.b!=0);for(g=Sub(b.b,0);g.b!=g.d.c;){f=RD(evb(g),39);ojd(f.e,new rjd(f.f.a/2,f.f.b/2))}c.Vg()} -function uYc(a,b,c){var d,e,f,g,h,i,j,k;c.Ug(MEe,1);akb(a.b);akb(a.a);h=null;f=Sub(b.b,0);while(!h&&f.b!=f.d.c){j=RD(evb(f),39);Heb(TD(mQb(j,(q$c(),n$c))))&&(h=j)}i=new Yub;Pub(i,h,i.c.b,i.c);tYc(a,i);for(k=Sub(b.b,0);k.b!=k.d.c;){j=RD(evb(k),39);g=WD(mQb(j,(q$c(),a$c)));e=Xjb(a.b,g)!=null?RD(Xjb(a.b,g),17).a:0;pQb(j,XZc,sgb(e));d=1+(Xjb(a.a,g)!=null?RD(Xjb(a.a,g),17).a:0);pQb(j,VZc,sgb(d))}c.Vg()} -function ikd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,LGe),'ELK Box'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges.'),new lkd)));Agd(a,LGe,Eze,ekd);Agd(a,LGe,_ze,15);Agd(a,LGe,$ze,sgb(0));Agd(a,LGe,MGe,iGd($jd));Agd(a,LGe,jAe,iGd(akd));Agd(a,LGe,iAe,iGd(ckd));Agd(a,LGe,Dze,KGe);Agd(a,LGe,dAe,iGd(_jd));Agd(a,LGe,CAe,iGd(bkd));Agd(a,LGe,NGe,iGd(Yjd));Agd(a,LGe,YDe,iGd(Zjd))} -function c2b(a,b){var c,d,e,f,g,h,i,j,k;e=a.i;g=e.o.a;f=e.o.b;if(g<=0&&f<=0){return qpd(),opd}j=a.n.a;k=a.n.b;h=a.o.a;c=a.o.b;switch(b.g){case 2:case 1:if(j<0){return qpd(),ppd}else if(j+h>g){return qpd(),Xod}break;case 4:case 3:if(k<0){return qpd(),Yod}else if(k+c>f){return qpd(),npd}}i=(j+h/2)/g;d=(k+c/2)/f;return i+d<=1&&i-d<=0?(qpd(),ppd):i+d>=1&&i-d>=0?(qpd(),Xod):d<0.5?(qpd(),Yod):(qpd(),npd)} -function PNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=false;k=Kfb(UD(mQb(b,(yCc(),bCc))));o=pwe*k;for(e=new Anb(b.b);e.a<e.c.c.length;){d=RD(ynb(e),30);j=new Anb(d.a);f=RD(ynb(j),10);l=XNc(a.a[f.p]);while(j.a<j.c.c.length){h=RD(ynb(j),10);m=XNc(a.a[h.p]);if(l!=m){n=bFc(a.b,f,h);g=f.n.b+f.o.b+f.d.a+l.a+n;i=h.n.b-h.d.d+m.a;if(g>i+o){p=l.g+m.g;m.a=(m.g*m.a+l.g*l.a)/p;m.g=p;l.f=m;c=true}}f=h;l=m}}return c} -function MJb(a,b,c,d,e,f,g){var h,i,j,k,l,m;m=new Tid;for(j=b.Kc();j.Ob();){h=RD(j.Pb(),853);for(l=new Anb(h.Rf());l.a<l.c.c.length;){k=RD(ynb(l),187);if(dE(k.of((umd(),Qkd)))===dE((Omd(),Nmd))){JJb(m,k,false,d,e,f,g);Sid(a,m)}}}for(i=c.Kc();i.Ob();){h=RD(i.Pb(),853);for(l=new Anb(h.Rf());l.a<l.c.c.length;){k=RD(ynb(l),187);if(dE(k.of((umd(),Qkd)))===dE((Omd(),Mmd))){JJb(m,k,true,d,e,f,g);Sid(a,m)}}}} -function PVc(a,b,c){var d,e,f,g,h,i,j;for(g=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));g.e!=g.i.gc();){f=RD(bMd(g),27);for(e=new is(Mr(zGd(f).a.Kc(),new ir));gs(e);){d=RD(hs(e),74);if(!nzd(d)&&!nzd(d)&&!ozd(d)){i=RD(Wd(qtb(c.f,f)),39);j=RD(Wjb(c,AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84))),39);if(!!i&&!!j){h=new WWc(i,j);pQb(h,(q$c(),h$c),d);kQb(h,d);Mub(i.d,h);Mub(j.b,h);Mub(b.a,h)}}}}} -function HNb(a,b){var c,d,e,f,g,h,i,j;for(i=RD(RD(Qc(a.r,b),21),87).Kc();i.Ob();){h=RD(i.Pb(),117);e=h.c?PKb(h.c):0;if(e>0){if(h.a){j=h.b.Mf().b;if(e>j){if(a.v||h.c.d.c.length==1){g=(e-j)/2;h.d.d=g;h.d.a=g}else{c=RD(Vmb(h.c.d,0),187).Mf().b;d=(c-j)/2;h.d.d=$wnd.Math.max(0,d);h.d.a=e-d-j}}}else{h.d.a=a.t+e}}else if(Rod(a.u)){f=wsd(h.b);f.d<0&&(h.d.d=-f.d);f.d+f.a>h.b.Mf().b&&(h.d.a=f.d+f.a-h.b.Mf().b)}}} -function yVb(){yVb=geb;lVb=new mGd((umd(),Rld),sgb(1));rVb=new mGd(fmd,80);qVb=new mGd($ld,5);ZUb=new mGd(Dkd,Yze);mVb=new mGd(Sld,sgb(1));pVb=new mGd(Vld,(Geb(),true));iVb=new A3b(50);hVb=new mGd(tld,iVb);_Ub=ald;jVb=Hld;$Ub=new mGd(Pkd,false);gVb=sld;eVb=mld;fVb=pld;dVb=kld;cVb=ild;kVb=Lld;bVb=(OUb(),HUb);sVb=MUb;aVb=GUb;nVb=JUb;oVb=LUb;vVb=mmd;xVb=qmd;uVb=lmd;tVb=kmd;wVb=(mqd(),jqd);new mGd(nmd,wVb)} -function VC(a,b){var c;switch(XC(a)){case 6:return bE(b);case 7:return _D(b);case 8:return $D(b);case 3:return Array.isArray(b)&&(c=XC(b),!(c>=14&&c<=16));case 11:return b!=null&&typeof b===kve;case 12:return b!=null&&(typeof b===gve||typeof b==kve);case 0:return QD(b,a.__elementTypeId$);case 2:return cE(b)&&!(b.Tm===keb);case 1:return cE(b)&&!(b.Tm===keb)||QD(b,a.__elementTypeId$);default:return true;}} -function oRb(a,b){var c,d,e,f;d=$wnd.Math.min($wnd.Math.abs(a.c-(b.c+b.b)),$wnd.Math.abs(a.c+a.b-b.c));f=$wnd.Math.min($wnd.Math.abs(a.d-(b.d+b.a)),$wnd.Math.abs(a.d+a.a-b.d));c=$wnd.Math.abs(a.c+a.b/2-(b.c+b.b/2));if(c>a.b/2+b.b/2){return 1}e=$wnd.Math.abs(a.d+a.a/2-(b.d+b.a/2));if(e>a.a/2+b.a/2){return 1}if(c==0&&e==0){return 0}if(c==0){return f/e+1}if(e==0){return d/c+1}return $wnd.Math.min(d/c,f/e)+1} -function oWb(a,b){var c,d,e,f,g,h,i;f=0;h=0;i=0;for(e=new Anb(a.f.e);e.a<e.c.c.length;){d=RD(ynb(e),153);if(b==d){continue}g=a.i[b.a][d.a];f+=g;c=bjd(b.d,d.d);c>0&&a.d!=(AWb(),zWb)&&(h+=g*(d.d.a+a.a[b.a][d.a]*(b.d.a-d.d.a)/c));c>0&&a.d!=(AWb(),xWb)&&(i+=g*(d.d.b+a.a[b.a][d.a]*(b.d.b-d.d.b)/c))}switch(a.d.g){case 1:return new rjd(h/f,b.d.b);case 2:return new rjd(b.d.a,i/f);default:return new rjd(h/f,i/f);}} -function xsd(a){var b,c,d,e,f,g;c=(!a.a&&(a.a=new XZd(D4,a,5)),a.a).i+2;g=new cnb(c);Rmb(g,new rjd(a.j,a.k));FDb(new SDb(null,(!a.a&&(a.a=new XZd(D4,a,5)),new Swb(a.a,16))),new Usd(g));Rmb(g,new rjd(a.b,a.c));b=1;while(b<g.c.length-1){d=(tFb(b-1,g.c.length),RD(g.c[b-1],8));e=(tFb(b,g.c.length),RD(g.c[b],8));f=(tFb(b+1,g.c.length),RD(g.c[b+1],8));d.a==e.a&&e.a==f.a||d.b==e.b&&e.b==f.b?Xmb(g,b):++b}return g} -function zgc(a,b){sgc();var c,d,e,f,g;g=RD(mQb(a.i,(yCc(),BBc)),101);f=a.j.g-b.j.g;if(f!=0||!(g==(Bod(),vod)||g==xod||g==wod)){return 0}if(g==(Bod(),vod)){c=RD(mQb(a,CBc),17);d=RD(mQb(b,CBc),17);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}}switch(a.j.g){case 1:return Qfb(a.n.a,b.n.a);case 2:return Qfb(a.n.b,b.n.b);case 3:return Qfb(b.n.a,a.n.a);case 4:return Qfb(b.n.b,a.n.b);default:throw Adb(new dgb(UAe));}} -function Bkc(a,b){var c,d,e,f,g,h,i;c=mGb(pGb(nGb(oGb(new qGb,b),new Vid(b.e)),kkc),a.a);b.j.c.length==0||eGb(RD(Vmb(b.j,0),60).a,c);i=new cHb;Zjb(a.e,c,i);g=new _sb;h=new _sb;for(f=new Anb(b.k);f.a<f.c.c.length;){e=RD(ynb(f),18);Ysb(g,e.c);Ysb(h,e.d)}d=g.a.gc()-h.a.gc();if(d<0){aHb(i,true,(Cmd(),ymd));aHb(i,false,zmd)}else if(d>0){aHb(i,false,(Cmd(),ymd));aHb(i,true,zmd)}Umb(b.g,new Elc(a,c));Zjb(a.g,b,c)} -function Ugb(){Ugb=geb;var a;Qgb=cD(WC(kE,1),Pwe,28,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]);Rgb=$C(kE,Pwe,28,37,15,1);Sgb=cD(WC(kE,1),Pwe,28,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]);Tgb=$C(lE,rxe,28,37,14,1);for(a=2;a<=36;a++){Rgb[a]=eE($wnd.Math.pow(a,Qgb[a]));Tgb[a]=Fdb(Sve,Rgb[a])}} -function tsd(a){var b;if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i!=1){throw Adb(new agb(tHe+(!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i))}b=new Ejd;!!BGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84))&&ye(b,usd(a,BGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84)),false));!!BGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84))&&ye(b,usd(a,BGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84)),true));return b} -function zRc(a,b){var c,d,e,f,g;b.d?(e=a.a.c==(wQc(),vQc)?Z2b(b.b):a3b(b.b)):(e=a.a.c==(wQc(),uQc)?Z2b(b.b):a3b(b.b));f=false;for(d=new is(Mr(e.a.Kc(),new ir));gs(d);){c=RD(hs(d),18);g=Heb(a.a.f[a.a.g[b.b.p].p]);if(!g&&!W0b(c)&&c.c.i.c==c.d.i.c){continue}if(Heb(a.a.n[a.a.g[b.b.p].p])||Heb(a.a.n[a.a.g[b.b.p].p])){continue}f=true;if(Zsb(a.b,a.a.g[rRc(c,b.b).p])){b.c=true;b.a=c;return b}}b.c=f;b.a=null;return b} -function QJd(a,b,c){var d,e,f,g,h,i,j;d=c.gc();if(d==0){return false}else{if(a.Pj()){i=a.Qj();ZId(a,b,c);g=d==1?a.Ij(3,null,c.Kc().Pb(),b,i):a.Ij(5,null,c,b,i);if(a.Mj()){h=d<100?null:new gLd(d);f=b+d;for(e=b;e<f;++e){j=a.xj(e);h=a.Nj(j,h);h=h}if(!h){a.Jj(g)}else{h.nj(g);h.oj()}}else{a.Jj(g)}}else{ZId(a,b,c);if(a.Mj()){h=d<100?null:new gLd(d);f=b+d;for(e=b;e<f;++e){h=a.Nj(a.xj(e),h)}!!h&&h.oj()}}return true}} -function WJd(a,b,c){var d,e,f,g,h;if(a.Pj()){e=null;f=a.Qj();d=a.Ij(1,h=(g=a.Dj(b,a.Zi(b,c)),g),c,b,f);if(a.Mj()&&!(a.Yi()&&!!h?pb(h,c):dE(h)===dE(c))){!!h&&(e=a.Oj(h,e));e=a.Nj(c,e);if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}return h}else{h=(g=a.Dj(b,a.Zi(b,c)),g);if(a.Mj()&&!(a.Yi()&&!!h?pb(h,c):dE(h)===dE(c))){e=null;!!h&&(e=a.Oj(h,null));e=a.Nj(c,e);!!e&&e.oj()}return h}} -function nUb(a,b){var c,d,e,f,g,h,i,j,k;a.e=b;a.f=RD(mQb(b,(JVb(),IVb)),234);eUb(b);a.d=$wnd.Math.max(b.e.c.length*16+b.c.c.length,256);if(!Heb(TD(mQb(b,(yVb(),_Ub))))){k=a.e.e.c.length;for(i=new Anb(b.e);i.a<i.c.c.length;){h=RD(ynb(i),153);j=h.d;j.a=Iwb(a.f)*k;j.b=Iwb(a.f)*k}}c=b.b;for(f=new Anb(b.c);f.a<f.c.c.length;){e=RD(ynb(f),289);d=RD(mQb(e,oVb),17).a;if(d>0){for(g=0;g<d;g++){Rmb(c,new WTb(e))}YTb(e)}}} -function NId(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;m=new OC(a.Zg());sC(b,GIe,m);if(c&&!a.Xg().a.dc()){k=new MB;sC(b,'logs',k);h=0;for(o=new Ppb(a.Xg().b.Kc());o.b.Ob();){n=WD(o.b.Pb());l=new OC(n);JB(k,h);LB(k,h,l);++h}}if(d){j=new hC(a.Wg());sC(b,'executionTime',j)}if(!a.Yg().a.dc()){g=new MB;sC(b,iIe,g);h=0;for(f=new Ppb(a.Yg().b.Kc());f.b.Ob();){e=RD(f.b.Pb(),871);i=new uC;JB(g,h);LB(g,h,i);NId(e,i,c,d);++h}}} -function rue(){rue=geb;Gie();que=new sue;cD(WC(B7,2),Nve,381,0,[cD(WC(B7,1),_Le,600,0,[new oue(wLe)])]);cD(WC(B7,2),Nve,381,0,[cD(WC(B7,1),_Le,600,0,[new oue(xLe)])]);cD(WC(B7,2),Nve,381,0,[cD(WC(B7,1),_Le,600,0,[new oue(yLe)]),cD(WC(B7,1),_Le,600,0,[new oue(xLe)])]);new ejb('-1');cD(WC(B7,2),Nve,381,0,[cD(WC(B7,1),_Le,600,0,[new oue('\\c+')])]);new ejb('0');new ejb('0');new ejb('1');new ejb('0');new ejb(ILe)} -function wac(a,b){var c,d,e,f,g,h,i,j,k,l;b.Ug('Hypernodes processing',1);for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);for(h=new Anb(d.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(Heb(TD(mQb(g,(yCc(),MAc))))&&g.j.c.length<=2){l=0;k=0;c=0;f=0;for(j=new Anb(g.j);j.a<j.c.c.length;){i=RD(ynb(j),12);switch(i.j.g){case 1:++l;break;case 2:++k;break;case 3:++c;break;case 4:++f;}}l==0&&c==0&&vac(a,g,f<=k)}}}b.Vg()} -function MUc(a,b,c,d,e){var f,g,h,i,j,k,l;for(g=new Anb(b);g.a<g.c.c.length;){f=RD(ynb(g),18);i=f.c;if(c.a._b(i)){j=(dVc(),bVc)}else if(d.a._b(i)){j=(dVc(),cVc)}else{throw Adb(new agb('Source port must be in one of the port sets.'))}k=f.d;if(c.a._b(k)){l=(dVc(),bVc)}else if(d.a._b(k)){l=(dVc(),cVc)}else{throw Adb(new agb('Target port must be in one of the port sets.'))}h=new wVc(f,j,l);Zjb(a.b,f,h);ZEb(e.c,h)}} -function i2d(a){var b,c;if(!!a.c&&a.c.Vh()){c=RD(a.c,54);a.c=RD(Vvd(a,c),142);if(a.c!=c){(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,2,c,a.c));if(ZD(a.Cb,411)){a.Db>>16==-15&&a.Cb.Yh()&&pKd(new O3d(a.Cb,9,13,c,a.c,fZd(o4d(RD(a.Cb,62)),a)))}else if(ZD(a.Cb,90)){if(a.Db>>16==-23&&a.Cb.Yh()){b=a.c;ZD(b,90)||(b=(JTd(),zTd));ZD(c,90)||(c=(JTd(),zTd));pKd(new O3d(a.Cb,9,10,c,b,fZd(tYd(RD(a.Cb,29)),a)))}}}}return a.c} -function lac(a,b,c){var d,e,f,g,h,i,j,k,l;c.Ug('Hyperedge merging',1);jac(a,b);i=new Jkb(b.b,0);while(i.b<i.d.gc()){h=(sFb(i.b<i.d.gc()),RD(i.d.Xb(i.c=i.b++),30));k=h.a;if(k.c.length==0){continue}d=null;e=null;f=null;g=null;for(j=0;j<k.c.length;j++){d=(tFb(j,k.c.length),RD(k.c[j],10));e=d.k;if(e==(r3b(),o3b)&&g==o3b){l=hac(d,f);if(l.a){kac(d,f,l.b,l.c);tFb(j,k.c.length);$Eb(k.c,j,1);--j;d=f;e=g}}f=d;g=e}}c.Vg()} -function U$d(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(b==c){return true}else{b=V$d(a,b);c=V$d(a,c);d=h2d(b);if(d){k=h2d(c);if(k!=d){if(!k){return false}else{i=d.mk();o=k.mk();return i==o&&i!=null}}else{g=(!b.d&&(b.d=new XZd(o7,b,1)),b.d);f=g.i;m=(!c.d&&(c.d=new XZd(o7,c,1)),c.d);if(f==m.i){for(j=0;j<f;++j){e=RD(QHd(g,j),89);l=RD(QHd(m,j),89);if(!U$d(a,e,l)){return false}}}return true}}else{h=b.e;n=c.e;return h==n}}} -function vge(a,b,c,d){var e,f,g,h,i,j,k,l;if(qke(a.e,b)){l=pke(a.e.Dh(),b);f=RD(a.g,124);k=null;i=-1;h=-1;e=0;for(j=0;j<a.i;++j){g=f[j];if(l.am(g.Lk())){e==c&&(i=j);if(e==d){h=j;k=g.md()}++e}}if(i==-1){throw Adb(new veb(MIe+c+NIe+e))}if(h==-1){throw Adb(new veb(OIe+d+NIe+e))}uLd(a,i,h);Mvd(a.e)&&eZd(a,fge(a,7,b,sgb(d),k,c,true));return k}else{throw Adb(new agb('The feature must be many-valued to support move'))}} -function j2b(a,b,c,d){var e,f,g,h,i;i=new sjd(b.n);i.a+=b.o.a/2;i.b+=b.o.b/2;h=Kfb(UD(mQb(b,(yCc(),ABc))));f=a.f;g=a.d;e=a.c;switch(RD(mQb(b,(Ywc(),hwc)),64).g){case 1:i.a+=g.b+e.a-c/2;i.b=-d-h;b.n.b=-(g.d+h+e.b);break;case 2:i.a=f.a+g.b+g.c+h;i.b+=g.d+e.b-d/2;b.n.a=f.a+g.c+h-e.a;break;case 3:i.a+=g.b+e.a-c/2;i.b=f.b+g.d+g.a+h;b.n.b=f.b+g.a+h-e.b;break;case 4:i.a=-c-h;i.b+=g.d+e.b-d/2;b.n.a=-(g.b+h+e.a);}return i} -function Z4b(a){var b,c,d,e,f,g;d=new d1b;kQb(d,a);dE(mQb(d,(yCc(),rAc)))===dE((Cmd(),Amd))&&pQb(d,rAc,i2b(d));if(mQb(d,(rid(),qid))==null){g=RD(Lje(a),167);pQb(d,qid,fE(g.of(qid)))}pQb(d,(Ywc(),Awc),a);pQb(d,kwc,(b=RD(mfb(iX),9),new Fsb(b,RD(WEb(b,b.length),9),0)));e=FJb((!vCd(a)?null:(lud(),new zud(vCd(a))),lud(),new Fud(!vCd(a)?null:new zud(vCd(a)),a)),zmd);f=RD(mQb(d,qBc),107);c=d.d;B2b(c,f);B2b(c,e);return d} -function Nec(a,b,c){var d,e;d=b.c.i;e=c.d.i;if(d.k==(r3b(),o3b)){pQb(a,(Ywc(),vwc),RD(mQb(d,vwc),12));pQb(a,wwc,RD(mQb(d,wwc),12));pQb(a,uwc,TD(mQb(d,uwc)))}else if(d.k==n3b){pQb(a,(Ywc(),vwc),RD(mQb(d,vwc),12));pQb(a,wwc,RD(mQb(d,wwc),12));pQb(a,uwc,(Geb(),true))}else if(e.k==n3b){pQb(a,(Ywc(),vwc),RD(mQb(e,vwc),12));pQb(a,wwc,RD(mQb(e,wwc),12));pQb(a,uwc,(Geb(),true))}else{pQb(a,(Ywc(),vwc),b.c);pQb(a,wwc,c.d)}} -function wJb(a){var b,c,d,e,f,g,h;a.o=new wmb;d=new Yub;for(g=new Anb(a.e.a);g.a<g.c.c.length;){f=RD(ynb(g),125);CIb(f).c.length==1&&(Pub(d,f,d.c.b,d.c),true)}while(d.b!=0){f=RD(d.b==0?null:(sFb(d.b!=0),Wub(d,d.a.a)),125);if(CIb(f).c.length==0){continue}b=RD(Vmb(CIb(f),0),218);c=f.g.a.c.length>0;h=oIb(b,f);c?FIb(h.b,b):FIb(h.g,b);CIb(h).c.length==1&&(Pub(d,h,d.c.b,d.c),true);e=new Ptd(f,b);hmb(a.o,e);Ymb(a.e.a,f)}} -function SQb(a,b){var c,d,e,f,g,h,i;d=$wnd.Math.abs(Oid(a.b).a-Oid(b.b).a);h=$wnd.Math.abs(Oid(a.b).b-Oid(b.b).b);e=0;i=0;c=1;g=1;if(d>a.b.b/2+b.b.b/2){e=$wnd.Math.min($wnd.Math.abs(a.b.c-(b.b.c+b.b.b)),$wnd.Math.abs(a.b.c+a.b.b-b.b.c));c=1-e/d}if(h>a.b.a/2+b.b.a/2){i=$wnd.Math.min($wnd.Math.abs(a.b.d-(b.b.d+b.b.a)),$wnd.Math.abs(a.b.d+a.b.a-b.b.d));g=1-i/h}f=$wnd.Math.min(c,g);return (1-f)*$wnd.Math.sqrt(d*d+h*h)} -function LUc(a){var b,c,d,e;NUc(a,a.e,a.f,(dVc(),bVc),true,a.c,a.i);NUc(a,a.e,a.f,bVc,false,a.c,a.i);NUc(a,a.e,a.f,cVc,true,a.c,a.i);NUc(a,a.e,a.f,cVc,false,a.c,a.i);MUc(a,a.c,a.e,a.f,a.i);d=new Jkb(a.i,0);while(d.b<d.d.gc()){b=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),131));e=new Jkb(a.i,d.b);while(e.b<e.d.gc()){c=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),131));KUc(b,c)}}WUc(a.i,RD(mQb(a.d,(Ywc(),Lwc)),234));ZUc(a.i)} -function FXd(a,b){var c,d;if(b!=null){d=DXd(a);if(d){if((d.i&1)!=0){if(d==xdb){return $D(b)}else if(d==kE){return ZD(b,17)}else if(d==jE){return ZD(b,161)}else if(d==gE){return ZD(b,222)}else if(d==hE){return ZD(b,180)}else if(d==iE){return _D(b)}else if(d==wdb){return ZD(b,191)}else if(d==lE){return ZD(b,168)}}else{return PRd(),c=RD(Wjb(ORd,d),57),!c||c.fk(b)}}else if(ZD(b,58)){return a.dl(RD(b,58))}}return false} -function zqe(){zqe=geb;var a,b,c,d,e,f,g,h,i;xqe=$C(gE,YHe,28,255,15,1);yqe=$C(hE,zwe,28,64,15,1);for(b=0;b<255;b++){xqe[b]=-1}for(c=90;c>=65;c--){xqe[c]=c-65<<24>>24}for(d=122;d>=97;d--){xqe[d]=d-97+26<<24>>24}for(e=57;e>=48;e--){xqe[e]=e-48+52<<24>>24}xqe[43]=62;xqe[47]=63;for(f=0;f<=25;f++)yqe[f]=65+f&Bwe;for(g=26,i=0;g<=51;++g,i++)yqe[g]=97+i&Bwe;for(a=52,h=0;a<=61;++a,h++)yqe[a]=48+h&Bwe;yqe[62]=43;yqe[63]=47} -function uib(a,b){var c,d,e,f,g,h;e=xib(a);h=xib(b);if(e==h){if(a.e==b.e&&a.a<54&&b.a<54){return a.f<b.f?-1:a.f>b.f?1:0}d=a.e-b.e;c=(a.d>0?a.d:$wnd.Math.floor((a.a-1)*xxe)+1)-(b.d>0?b.d:$wnd.Math.floor((b.a-1)*xxe)+1);if(c>d+1){return e}else if(c<d-1){return -e}else{f=(!a.c&&(a.c=ojb(Hdb(a.f))),a.c);g=(!b.c&&(b.c=ojb(Hdb(b.f))),b.c);d<0?(f=Wib(f,Sjb(-d))):d>0&&(g=Wib(g,Sjb(d)));return Qib(f,g)}}else return e<h?-1:1} -function pUb(a,b,c){var d,e,f,g,h,i,j,k;c.Ug(Pze,1);a.vf(b);f=0;while(a.xf(f)&&!c.$g()){a.wf();for(k=Fl(Al(cD(WC(cJ,1),rve,20,0,[b.e,b.d,b.b])));gs(k);){i=RD(hs(k),309);for(h=Fl(Al(cD(WC(cJ,1),rve,20,0,[b.e,b.d,b.b])));gs(h);){g=RD(hs(h),309);if(g!=i){e=a.uf(g,i);!!e&&$id(i.c,e)}}}for(j=Fl(Al(cD(WC(cJ,1),rve,20,0,[b.e,b.d,b.b])));gs(j);){i=RD(hs(j),309);d=i.c;_id(d,-a.d,-a.d,a.d,a.d);$id(i.d,d);d.a=0;d.b=0}++f}c.Vg()} -function H$b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.dc()){return new pjd}j=0;l=0;for(e=a.Kc();e.Ob();){d=RD(e.Pb(),36);f=d.f;j=$wnd.Math.max(j,f.a);l+=f.a*f.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(l)*Kfb(UD(mQb(RD(a.Kc().Pb(),36),(yCc(),Tzc)))));m=0;n=0;i=0;c=b;for(h=a.Kc();h.Ob();){g=RD(h.Pb(),36);k=g.f;if(m+k.a>j){m=0;n+=i+b;i=0}w$b(g,m,n);c=$wnd.Math.max(c,m+k.a);i=$wnd.Math.max(i,k.b);m+=k.a+b}return new rjd(c+b,n+i+b)} -function osd(a,b){var c,d,e,f,g,h,i;if(!MCd(a)){throw Adb(new dgb(sHe))}d=MCd(a);f=d.g;e=d.f;if(f<=0&&e<=0){return qpd(),opd}h=a.i;i=a.j;switch(b.g){case 2:case 1:if(h<0){return qpd(),ppd}else if(h+a.g>f){return qpd(),Xod}break;case 4:case 3:if(i<0){return qpd(),Yod}else if(i+a.f>e){return qpd(),npd}}g=(h+a.g/2)/f;c=(i+a.f/2)/e;return g+c<=1&&g-c<=0?(qpd(),ppd):g+c>=1&&g-c>=0?(qpd(),Xod):c<0.5?(qpd(),Yod):(qpd(),npd)} -function Djb(a,b,c,d,e){var f,g;f=Bdb(Cdb(b[0],yxe),Cdb(d[0],yxe));a[0]=Ydb(f);f=Tdb(f,32);if(c>=e){for(g=1;g<e;g++){f=Bdb(f,Bdb(Cdb(b[g],yxe),Cdb(d[g],yxe)));a[g]=Ydb(f);f=Tdb(f,32)}for(;g<c;g++){f=Bdb(f,Cdb(b[g],yxe));a[g]=Ydb(f);f=Tdb(f,32)}}else{for(g=1;g<c;g++){f=Bdb(f,Bdb(Cdb(b[g],yxe),Cdb(d[g],yxe)));a[g]=Ydb(f);f=Tdb(f,32)}for(;g<e;g++){f=Bdb(f,Cdb(d[g],yxe));a[g]=Ydb(f);f=Tdb(f,32)}}Ddb(f,0)!=0&&(a[g]=Ydb(f))} -function yte(a){Vse();var b,c,d,e,f,g;if(a.e!=4&&a.e!=5)throw Adb(new agb('Token#complementRanges(): must be RANGE: '+a.e));f=a;vte(f);ste(f);d=f.b.length+2;f.b[0]==0&&(d-=2);c=f.b[f.b.length-1];c==MLe&&(d-=2);e=(++Use,new xte(4));e.b=$C(kE,Pwe,28,d,15,1);g=0;if(f.b[0]>0){e.b[g++]=0;e.b[g++]=f.b[0]-1}for(b=1;b<f.b.length-2;b+=2){e.b[g++]=f.b[b]+1;e.b[g++]=f.b[b+1]-1}if(c!=MLe){e.b[g++]=c+1;e.b[g]=MLe}e.a=true;return e} -function zac(a,b){var c,d,e,f,g,h,i,j,k;b.Ug('Layer constraint edge reversal',1);for(g=new Anb(a.b);g.a<g.c.c.length;){f=RD(ynb(g),30);k=-1;c=new bnb;j=t2b(f.a);for(e=0;e<j.length;e++){d=RD(mQb(j[e],(Ywc(),owc)),311);if(k==-1){d!=(Gvc(),Fvc)&&(k=e)}else{if(d==(Gvc(),Fvc)){g3b(j[e],null);f3b(j[e],k++,f)}}d==(Gvc(),Dvc)&&(ZEb(c.c,j[e]),true)}for(i=new Anb(c);i.a<i.c.c.length;){h=RD(ynb(i),10);g3b(h,null);g3b(h,f)}}b.Vg()} -function nLd(a,b,c){var d,e,f,g,h,i,j,k;d=c.gc();if(d==0){return false}else{if(a.Pj()){j=a.Qj();IHd(a,b,c);g=d==1?a.Ij(3,null,c.Kc().Pb(),b,j):a.Ij(5,null,c,b,j);if(a.Mj()){h=d<100?null:new gLd(d);f=b+d;for(e=b;e<f;++e){k=a.g[e];h=a.Nj(k,h);h=a.Uj(k,h)}if(!h){a.Jj(g)}else{h.nj(g);h.oj()}}else{a.Jj(g)}}else{IHd(a,b,c);if(a.Mj()){h=d<100?null:new gLd(d);f=b+d;for(e=b;e<f;++e){i=a.g[e];h=a.Nj(i,h)}!!h&&h.oj()}}return true}} -function m9b(a,b){var c,d,e,f,g,h,i,j,k;b.Ug('Hierarchical port dummy size processing',1);i=new bnb;k=new bnb;d=Kfb(UD(mQb(a,(yCc(),UBc))));c=d*2;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);i.c.length=0;k.c.length=0;for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k==(r3b(),m3b)){j=RD(mQb(g,(Ywc(),hwc)),64);j==(qpd(),Yod)?(ZEb(i.c,g),true):j==npd&&(ZEb(k.c,g),true)}}n9b(i,true,c);n9b(k,false,c)}b.Vg()} -function wSc(a,b,c,d){var e,f,g,h,i;for(g=new Anb(a.k);g.a<g.c.c.length;){e=RD(ynb(g),132);if(!d||e.c==(fTc(),dTc)){i=e.b;if(i.g<0&&e.d>0){PSc(i,i.d-e.d);e.c==(fTc(),dTc)&&NSc(i,i.a-e.d);i.d<=0&&i.i>0&&(Pub(b,i,b.c.b,b.c),true)}}}for(f=new Anb(a.f);f.a<f.c.c.length;){e=RD(ynb(f),132);if(!d||e.c==(fTc(),dTc)){h=e.a;if(h.g<0&&e.d>0){QSc(h,h.i-e.d);e.c==(fTc(),dTc)&&OSc(h,h.b-e.d);h.i<=0&&h.d>0&&(Pub(c,h,c.c.b,c.c),true)}}}} -function drd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;yob();_mb(a,new Mrd);g=gv(a);n=new bnb;m=new bnb;h=null;i=0;while(g.b!=0){f=RD(g.b==0?null:(sFb(g.b!=0),Wub(g,g.a.a)),163);if(!h||urd(h)*trd(h)/2<urd(f)*trd(f)){h=f;ZEb(n.c,f)}else{i+=urd(f)*trd(f);ZEb(m.c,f);if(m.c.length>1&&(i>urd(h)*trd(h)/2||g.b==0)){l=new zrd(m);k=urd(h)/trd(h);j=ird(l,b,new z3b,c,d,e,k);$id(hjd(l.e),j);h=l;ZEb(n.c,l);i=0;m.c.length=0}}}Tmb(n,m);return n} -function hib(a,b,c,d,e){gib();var f,g,h,i,j,k,l;vFb(a,'src');vFb(c,'dest');l=rb(a);i=rb(c);qFb((l.i&4)!=0,'srcType is not an array');qFb((i.i&4)!=0,'destType is not an array');k=l.c;g=i.c;qFb((k.i&1)!=0?k==g:(g.i&1)==0,"Array types don't match");iib(a,b,c,d,e);if((k.i&1)==0&&l!=i){j=SD(a);f=SD(c);if(dE(a)===dE(c)&&b<d){b+=e;for(h=d+e;h-->d;){bD(f,h,j[--b])}}else{for(h=d+e;d<h;){bD(f,d++,j[b++])}}}else{VEb(a,b,c,d,e,true)}} -function crd(a,b){var c,d,e,f,g,h,i,j,k;b.Ug('Box layout',2);e=Mfb(UD(Gxd(a,(hkd(),gkd))));f=RD(Gxd(a,dkd),107);c=Heb(TD(Gxd(a,$jd)));d=Heb(TD(Gxd(a,_jd)));switch(RD(Gxd(a,Yjd),320).g){case 0:g=(k=new dnb((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a)),yob(),_mb(k,new prd(d)),k);h=vsd(a);i=UD(Gxd(a,Xjd));(i==null||(uFb(i),i)<=0)&&(i=1.3);j=grd(g,e,f,h.a,h.b,c,(uFb(i),i));Esd(a,j.a,j.b,false,true);break;default:hrd(a,e,f,c);}b.Vg()} -function uUc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o;m=tUc(a,c);for(i=0;i<b;i++){Ikb(e,c);n=new bnb;o=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),418));for(k=m+i;k<a.b;k++){h=o;o=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),418));Rmb(n,new AUc(h,o,c))}for(l=m+i;l<a.b;l++){sFb(d.b>0);d.a.Xb(d.c=--d.b);l>m+i&&Ckb(d)}for(g=new Anb(n);g.a<g.c.c.length;){f=RD(ynb(g),418);Ikb(d,f)}if(i<b-1){for(j=m+i;j<a.b;j++){sFb(d.b>0);d.a.Xb(d.c=--d.b)}}}} -function gte(){Vse();var a,b,c,d,e,f;if(Fse)return Fse;a=(++Use,new xte(4));ute(a,hte(WLe,true));wte(a,hte('M',true));wte(a,hte('C',true));f=(++Use,new xte(4));for(d=0;d<11;d++){rte(f,d,d)}b=(++Use,new xte(4));ute(b,hte('M',true));rte(b,4448,4607);rte(b,65438,65439);e=(++Use,new iue(2));hue(e,a);hue(e,Ese);c=(++Use,new iue(2));c.Jm($se(f,hte('L',true)));c.Jm(b);c=(++Use,new Kte(3,c));c=(++Use,new Qte(e,c));Fse=c;return Fse} -function vhb(a,b){var c,d,e,f,g,h,i,j;c=new RegExp(b,'g');i=$C(qJ,Nve,2,0,6,1);d=0;j=a;f=null;while(true){h=c.exec(j);if(h==null||j==''){i[d]=j;break}else{g=h.index;i[d]=(AFb(0,g,j.length),j.substr(0,g));j=zhb(j,g+h[0].length,j.length);c.lastIndex=0;if(f==j){i[d]=(AFb(0,1,j.length),j.substr(0,1));j=(BFb(1,j.length+1),j.substr(1))}f=j;++d}}if(a.length>0){e=i.length;while(e>0&&i[e-1]==''){--e}e<i.length&&(i.length=e)}return i} -function h_c(){h_c=geb;U$c=new A3b(20);T$c=new mGd((umd(),tld),U$c);_$c=new mGd(fmd,20);$$c=new mGd(_ld,3);E$c=new mGd(Dkd,Yze);X$c=new mGd(Rld,sgb(1));Z$c=new mGd(Vld,(Geb(),true));G$c=Mkd;I$c=(Cmd(),Amd);H$c=new mGd(Nkd,I$c);L$c=ald;M$c=bld;O$c=kld;P$c=mld;Q$c=nld;R$c=pld;N$c=ild;S$c=sld;V$c=Lld;g_c=(B$c(),z$c);Y$c=w$c;c_c=mmd;e_c=qmd;b_c=lmd;a_c=kmd;d_c=(mqd(),jqd);new mGd(nmd,d_c);W$c=v$c;K$c=t$c;f_c=y$c;F$c=r$c;J$c=s$c} -function bgd(a){var b,c;b=WD(Gxd(a,(umd(),Akd)));if(cgd(b,a)){return}if(!Hxd(a,Tld)&&((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a).i!=0||Heb(TD(Gxd(a,$kd))))){if(b==null||Dhb(b).length==0){if(!cgd(sxe,a)){c=Zhb(Zhb(new dib('Unable to load default layout algorithm '),sxe),' for unconfigured node ');Csd(a,c);throw Adb(new Jed(c.a))}}else{c=Zhb(Zhb(new dib("Layout algorithm '"),b),"' not found for ");Csd(a,c);throw Adb(new Jed(c.a))}}} -function $Kb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;c=a.i;b=a.n;if(a.b==0){n=c.c+b.b;m=c.b-b.b-b.c;for(g=a.a,i=0,k=g.length;i<k;++i){e=g[i];dKb(e,n,m)}}else{d=bLb(a,false);dKb(a.a[0],c.c+b.b,d[0]);dKb(a.a[2],c.c+c.b-b.c-d[2],d[2]);l=c.b-b.b-b.c;if(d[0]>0){l-=d[0]+a.c;d[0]+=a.c}d[2]>0&&(l-=d[2]+a.c);d[1]=$wnd.Math.max(d[1],l);dKb(a.a[1],c.c+b.b+d[0]-(d[1]-l)/2,d[1])}for(f=a.a,h=0,j=f.length;h<j;++h){e=f[h];ZD(e,336)&&RD(e,336).lf()}} -function iRc(a){var b,c,d,e,f,g,h,i,j,k,l;l=new hRc;l.d=0;for(g=new Anb(a.b);g.a<g.c.c.length;){f=RD(ynb(g),30);l.d+=f.a.c.length}d=0;e=0;l.a=$C(kE,Pwe,28,a.b.c.length,15,1);j=0;k=0;l.e=$C(kE,Pwe,28,l.d,15,1);for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),30);b.p=d++;l.a[b.p]=e++;k=0;for(i=new Anb(b.a);i.a<i.c.c.length;){h=RD(ynb(i),10);h.p=j++;l.e[h.p]=k++}}l.c=new mRc(l);l.b=ev(l.d);jRc(l,a);l.f=ev(l.d);kRc(l,a);return l} -function M9c(a,b){var c,d,e,f;f=RD(Vmb(a.n,a.n.c.length-1),209).d;a.p=$wnd.Math.min(a.p,b.g);a.r=$wnd.Math.max(a.r,f);a.g=$wnd.Math.max(a.g,b.g+(a.b.c.length==1?0:a.i));a.o=$wnd.Math.min(a.o,b.f);a.e+=b.f+(a.b.c.length==1?0:a.i);a.f=$wnd.Math.max(a.f,b.f);e=a.n.c.length>0?(a.n.c.length-1)*a.i:0;for(d=new Anb(a.n);d.a<d.c.c.length;){c=RD(ynb(d),209);e+=c.a}a.d=e;a.a=a.e/a.b.c.length-a.i*((a.b.c.length-1)/a.b.c.length);Ead(a.j)} -function CTb(a,b){var c,d,e,f,g,h,i,j,k,l;k=TD(mQb(b,(yVb(),pVb)));if(k==null||(uFb(k),k)){l=$C(xdb,Hye,28,b.e.c.length,16,1);g=yTb(b);e=new Yub;for(j=new Anb(b.e);j.a<j.c.c.length;){h=RD(ynb(j),153);c=zTb(a,h,null,null,l,g);if(c){kQb(c,b);Pub(e,c,e.c.b,e.c)}}if(e.b>1){for(d=Sub(e,0);d.b!=d.d.c;){c=RD(evb(d),235);f=0;for(i=new Anb(c.e);i.a<i.c.c.length;){h=RD(ynb(i),153);h.a=f++}}}return e}return dv(cD(WC(tP,1),Jze,235,0,[b]))} -function rYd(a){var b,c,d,e,f,g,h;if(!a.g){h=new Z$d;b=iYd;g=b.a.zc(a,b);if(g==null){for(d=new dMd(zYd(a));d.e!=d.i.gc();){c=RD(bMd(d),29);YGd(h,rYd(c))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}e=h.i;for(f=(!a.s&&(a.s=new C5d(y7,a,21,17)),new dMd(a.s));f.e!=f.i.gc();++e){BWd(RD(bMd(f),461),e)}YGd(h,(!a.s&&(a.s=new C5d(y7,a,21,17)),a.s));VHd(h);a.g=new R$d(a,h);a.i=RD(h.g,254);a.i==null&&(a.i=kYd);a.p=null;yYd(a).b&=-5}return a.g} -function yee(a,b){var c,d,e,f,g,h,i,j,k;c=b.qi(a.a);if(c){i=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),'memberTypes'));if(i!=null){j=new bnb;for(f=vhb(i,'\\w'),g=0,h=f.length;g<h;++g){e=f[g];d=e.lastIndexOf('#');k=d==-1?Wee(a,b.jk(),e):d==0?Vee(a,null,(BFb(1,e.length+1),e.substr(1))):Vee(a,(AFb(0,d,e.length),e.substr(0,d)),(BFb(d+1,e.length+1),e.substr(d+1)));ZD(k,156)&&Rmb(j,RD(k,156))}return j}}return yob(),yob(),vob} -function _Kb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;d=a.i;c=a.n;if(a.b==0){b=aLb(a,false);eKb(a.a[0],d.d+c.d,b[0]);eKb(a.a[2],d.d+d.a-c.a-b[2],b[2]);m=d.a-c.d-c.a;l=m;if(b[0]>0){b[0]+=a.c;l-=b[0]}b[2]>0&&(l-=b[2]+a.c);b[1]=$wnd.Math.max(b[1],l);eKb(a.a[1],d.d+c.d+b[0]-(b[1]-l)/2,b[1])}else{o=d.d+c.d;n=d.a-c.d-c.a;for(g=a.a,i=0,k=g.length;i<k;++i){e=g[i];eKb(e,o,n)}}for(f=a.a,h=0,j=f.length;h<j;++h){e=f[h];ZD(e,336)&&RD(e,336).mf()}} -function Erc(a){var b,c,d,e,f,g,h,i,j,k;k=$C(kE,Pwe,28,a.b.c.length+1,15,1);j=new _sb;d=0;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);k[d++]=j.a.gc();for(i=new Anb(e.a);i.a<i.c.c.length;){g=RD(ynb(i),10);for(c=new is(Mr(a3b(g).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);j.a.zc(b,j)}}for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);for(c=new is(Mr(Z2b(g).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);j.a.Bc(b)!=null}}}return k} -function dge(a,b,c,d){var e,f,g,h,i;i=pke(a.e.Dh(),b);e=RD(a.g,124);nke();if(RD(b,69).xk()){for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())&&pb(f,c)){return true}}}else if(c!=null){for(h=0;h<a.i;++h){f=e[h];if(i.am(f.Lk())&&pb(c,f.md())){return true}}if(d){for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())&&dE(c)===dE(Age(a,RD(f.md(),58)))){return true}}}}else{for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())&&f.md()==null){return false}}}return false} -function wee(a,b){var c,d,e,f,g,h;c=b.qi(a.a);if(c){h=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),FIe));if(h!=null){e=thb(h,Fhb(35));d=b.qk();if(e==-1){g=Uee(a,BXd(d));f=h}else if(e==0){g=null;f=(BFb(1,h.length+1),h.substr(1))}else{g=(AFb(0,e,h.length),h.substr(0,e));f=(BFb(e+1,h.length+1),h.substr(e+1))}switch(yfe(Qee(a,b))){case 2:case 3:{return Jee(a,d,g,f)}case 0:case 4:case 5:case 6:{return Mee(a,d,g,f)}}}}return null} -function FQb(a,b,c,d){var e,f,g,h;h=c;for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),225);e=RD(f.b,68);if($y(a.b.c,e.b.c+e.b.b)<=0&&$y(e.b.c,a.b.c+a.b.b)<=0&&$y(a.b.d,e.b.d+e.b.a)<=0&&$y(e.b.d,a.b.d+a.b.a)<=0){if($y(e.b.c,a.b.c+a.b.b)==0&&d.a<0||$y(e.b.c+e.b.b,a.b.c)==0&&d.a>0||$y(e.b.d,a.b.d+a.b.a)==0&&d.b<0||$y(e.b.d+e.b.a,a.b.d)==0&&d.b>0){h=0;break}}else{h=$wnd.Math.min(h,PQb(a,e,d))}h=$wnd.Math.min(h,FQb(a,f,h,d))}return h} -function lsd(a,b){var c,d,e,f,g,h,i;if(a.b<2){throw Adb(new agb('The vector chain must contain at least a source and a target point.'))}e=(sFb(a.b!=0),RD(a.a.a.c,8));Nzd(b,e.a,e.b);i=new mMd((!b.a&&(b.a=new XZd(D4,b,5)),b.a));g=Sub(a,1);while(g.a<a.b-1){h=RD(evb(g),8);if(i.e!=i.i.gc()){c=RD(bMd(i),377)}else{c=(bvd(),d=new Xxd,d);kMd(i,c)}Uxd(c,h.a,h.b)}while(i.e!=i.i.gc()){bMd(i);cMd(i)}f=(sFb(a.b!=0),RD(a.c.b.c,8));Gzd(b,f.a,f.b)} -function Ege(a,b,c,d){var e,f,g,h,i,j;j=pke(a.e.Dh(),b);g=RD(a.g,124);if(qke(a.e,b)){if(b.Si()){f=kge(a,b,d,ZD(b,102)&&(RD(b,19).Bb&txe)!=0);if(f>=0&&f!=c){throw Adb(new agb(LIe))}}e=0;for(i=0;i<a.i;++i){h=g[i];if(j.am(h.Lk())){if(e==c){return RD(eHd(a,i,(nke(),RD(b,69).xk()?RD(d,76):oke(b,d))),76)}++e}}throw Adb(new veb(HJe+c+NIe+e))}else{for(i=0;i<a.i;++i){h=g[i];if(j.am(h.Lk())){return nke(),RD(b,69).xk()?h:h.md()}}return null}} -function Epc(a,b){var c,d,e,f,g,h,i,j,k;c=0;for(e=new Anb((tFb(0,a.c.length),RD(a.c[0],105)).g.b.j);e.a<e.c.c.length;){d=RD(ynb(e),12);d.p=c++}b==(qpd(),Yod)?_mb(a,new Mpc):_mb(a,new Qpc);h=0;k=a.c.length-1;while(h<k){g=(tFb(h,a.c.length),RD(a.c[h],105));j=(tFb(k,a.c.length),RD(a.c[k],105));f=b==Yod?g.c:g.a;i=b==Yod?j.a:j.c;Gpc(g,b,(enc(),cnc),f);Gpc(j,b,bnc,i);++h;--k}h==k&&Gpc((tFb(h,a.c.length),RD(a.c[h],105)),b,(enc(),anc),null)} -function lJc(a,b,c,d){var e,f,g,h,i,j;g=new zJc(a,b,c);i=new Jkb(d,0);e=false;while(i.b<i.d.gc()){h=(sFb(i.b<i.d.gc()),RD(i.d.Xb(i.c=i.b++),239));if(h==b||h==c){Ckb(i)}else if(!e&&Kfb(pJc(h.g,h.d[0]).a)>Kfb(pJc(g.g,g.d[0]).a)){sFb(i.b>0);i.a.Xb(i.c=--i.b);Ikb(i,g);e=true}else if(!!h.e&&h.e.gc()>0){f=(!h.e&&(h.e=new bnb),h.e).Mc(b);j=(!h.e&&(h.e=new bnb),h.e).Mc(c);if(f||j){(!h.e&&(h.e=new bnb),h.e).Fc(g);++g.c}}}e||(ZEb(d.c,g),true)} -function H3c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;l=a.a.i+a.a.g/2;m=a.a.i+a.a.g/2;o=b.i+b.g/2;q=b.j+b.f/2;h=new rjd(o,q);j=RD(Gxd(b,(umd(),Qld)),8);j.a=j.a+l;j.b=j.b+m;f=(h.b-j.b)/(h.a-j.a);d=h.b-f*h.a;p=c.i+c.g/2;r=c.j+c.f/2;i=new rjd(p,r);k=RD(Gxd(c,Qld),8);k.a=k.a+l;k.b=k.b+m;g=(i.b-k.b)/(i.a-k.a);e=i.b-g*i.a;n=(d-e)/(g-f);if(j.a<n&&h.a<n||n<j.a&&n<h.a){return false}else if(k.a<n&&i.a<n||n<k.a&&n<i.a){return false}return true} -function GDd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;m=RD(Wjb(a.c,b),190);if(!m){throw Adb(new CDd('Edge did not exist in input.'))}j=uDd(m);f=cve((!b.a&&(b.a=new C5d(F4,b,6,6)),b.a));h=!f;if(h){n=new MB;c=new pFd(a,j,n);ave((!b.a&&(b.a=new C5d(F4,b,6,6)),b.a),c);sC(m,mIe,n)}e=Hxd(b,(umd(),cld));if(e){k=RD(Gxd(b,cld),75);g=!k||bve(k);i=!g;if(i){l=new MB;d=new xFd(l);xgb(k,d);sC(m,'junctionPoints',l)}}sDd(m,'container',kzd(b).k);return null} -function fZc(a,b,c,d){var e,f,g,h,i,j;if(!gr(b)){j=c.eh((ZD(b,16)?RD(b,16).gc():Kr(b.Kc()))/a.a|0);j.Ug(OEe,1);i=new iZc;h=0;if(d==(Cmd(),ymd)||d==zmd){for(g=b.Kc();g.Ob();){e=RD(g.Pb(),39);i=Al(cD(WC(cJ,1),rve,20,0,[i,new dXc(e)]));h<e.f.a&&(h=e.f.a)}}else{for(g=b.Kc();g.Ob();){e=RD(g.Pb(),39);i=Al(cD(WC(cJ,1),rve,20,0,[i,new dXc(e)]));h<e.f.b&&(h=e.f.b)}}for(f=b.Kc();f.Ob();){e=RD(f.Pb(),39);pQb(e,(q$c(),d$c),h)}j.Vg();fZc(a,i,c,d)}} -function XFb(a,b,c){var d,e,f,g,h,i,j,k;this.a=a;this.b=b;this.c=c;this.e=dv(cD(WC($M,1),rve,177,0,[new TFb(a,b),new TFb(b,c),new TFb(c,a)]));this.f=dv(cD(WC(l3,1),Nve,8,0,[a,b,c]));this.d=(d=ojd(ajd(this.b),this.a),e=ojd(ajd(this.c),this.a),f=ojd(ajd(this.c),this.b),g=d.a*(this.a.a+this.b.a)+d.b*(this.a.b+this.b.b),h=e.a*(this.a.a+this.c.a)+e.b*(this.a.b+this.c.b),i=2*(d.a*f.b-d.b*f.a),j=(e.b*g-d.b*h)/i,k=(d.a*h-e.a*g)/i,new rjd(j,k))} -function X0b(a,b){var c,d,e,f,g,h;f=a.c;g=a.d;Y0b(a,null);Z0b(a,null);b&&Heb(TD(mQb(g,(Ywc(),mwc))))?Y0b(a,q2b(g.i,(BEc(),zEc),(qpd(),Xod))):Y0b(a,g);b&&Heb(TD(mQb(f,(Ywc(),Gwc))))?Z0b(a,q2b(f.i,(BEc(),yEc),(qpd(),ppd))):Z0b(a,f);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),72);e=RD(mQb(c,(yCc(),wAc)),278);e==(Omd(),Nmd)?pQb(c,wAc,Mmd):e==Mmd&&pQb(c,wAc,Nmd)}h=Heb(TD(mQb(a,(Ywc(),Nwc))));pQb(a,Nwc,(Geb(),h?false:true));a.a=Ijd(a.a)} -function lWc(a,b){var c,d,e,f,g;c=jWc(RD(mQb(b,(h_c(),H$c)),88));if(a.b.b==0){return null}g=RD(zDb(GDb(new SDb(null,new Swb(a.b,16)),new UWc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);f=RD(zDb(CDb(new SDb(null,new Swb(b.b,16)),new CWc(g)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);e=UD(Lvb(JDb(GDb(f.Oc(),new EWc(c)),(urb(),urb(),srb))));d=RD(Lvb(DDb(CDb(f.Oc(),new GWc(c,e)))),39);return d} -function vOc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;c=eJb(new gJb,a.f);j=a.i[b.c.i.p];n=a.i[b.d.i.p];i=b.c;m=b.d;h=i.a.b;l=m.a.b;j.b||(h+=i.n.b);n.b||(l+=m.n.b);k=eE($wnd.Math.max(0,h-l));g=eE($wnd.Math.max(0,l-h));o=(p=$wnd.Math.max(1,RD(mQb(b,(yCc(),MBc)),17).a),q=hOc(b.c.i.k,b.d.i.k),p*q);e=rIb(uIb(tIb(sIb(vIb(new wIb,o),g),c),RD(Wjb(a.k,b.c),125)));f=rIb(uIb(tIb(sIb(vIb(new wIb,o),k),c),RD(Wjb(a.k,b.d),125)));d=new QOc(e,f);a.c[b.p]=d} -function MTb(a,b,c){var d,e,f,g,h,i;d=0;for(f=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));f.e!=f.i.gc();){e=RD(bMd(f),27);g='';(!e.n&&(e.n=new C5d(I4,e,1,7)),e.n).i==0||(g=RD(QHd((!e.n&&(e.n=new C5d(I4,e,1,7)),e.n),0),135).a);h=new lUb(g);kQb(h,e);pQb(h,(JVb(),HVb),e);h.a=d++;h.d.a=e.i+e.g/2;h.d.b=e.j+e.f/2;h.e.a=$wnd.Math.max(e.g,1);h.e.b=$wnd.Math.max(e.f,1);Rmb(b.e,h);rtb(c.f,e,h);i=RD(Gxd(e,(yVb(),jVb)),101);i==(Bod(),Aod)&&(i=zod)}} -function bec(a,b){var c,d,e,f,g,h,i;b.Ug('Layer constraint postprocessing',1);i=a.b;if(i.c.length!=0){d=(tFb(0,i.c.length),RD(i.c[0],30));g=RD(Vmb(i,i.c.length-1),30);c=new R4b(a);f=new R4b(a);_dc(a,d,g,c,f);c.a.c.length==0||(wFb(0,i.c.length),XEb(i.c,0,c));f.a.c.length==0||(ZEb(i.c,f),true)}if(nQb(a,(Ywc(),lwc))){e=new R4b(a);h=new R4b(a);cec(a,e,h);e.a.c.length==0||(wFb(0,i.c.length),XEb(i.c,0,e));h.a.c.length==0||(ZEb(i.c,h),true)}b.Vg()} -function zte(a){var b,c,d;switch(a){case 91:case 93:case 45:case 94:case 44:case 92:d='\\'+String.fromCharCode(a&Bwe);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(a<32){c=(b=a>>>0,'0'+b.toString(16));d='\\x'+zhb(c,c.length-2,c.length)}else if(a>=txe){c=(b=a>>>0,'0'+b.toString(16));d='\\v'+zhb(c,c.length-6,c.length)}else d=''+String.fromCharCode(a&Bwe);}return d} -function Ugc(a){var b,c,d;if(Dod(RD(mQb(a,(yCc(),BBc)),101))){for(c=new Anb(a.j);c.a<c.c.c.length;){b=RD(ynb(c),12);b.j==(qpd(),opd)&&(d=RD(mQb(b,(Ywc(),Iwc)),10),d?Q3b(b,RD(mQb(d,hwc),64)):b.e.c.length-b.g.c.length<0?Q3b(b,Xod):Q3b(b,ppd))}}else{for(c=new Anb(a.j);c.a<c.c.c.length;){b=RD(ynb(c),12);d=RD(mQb(b,(Ywc(),Iwc)),10);d?Q3b(b,RD(mQb(d,hwc),64)):b.e.c.length-b.g.c.length<0?Q3b(b,(qpd(),Xod)):Q3b(b,(qpd(),ppd))}pQb(a,BBc,(Bod(),yod))}} -function wUc(a){var b,c,d,e,f,g;this.e=new bnb;this.a=new bnb;for(c=a.b-1;c<3;c++){hu(a,0,RD(ju(a,0),8))}if(a.b<4){throw Adb(new agb('At (least dimension + 1) control points are necessary!'))}else{this.b=3;this.d=true;this.c=false;rUc(this,a.b+this.b-1);g=new bnb;f=new Anb(this.e);for(b=0;b<this.b-1;b++){Rmb(g,UD(ynb(f)))}for(e=Sub(a,0);e.b!=e.d.c;){d=RD(evb(e),8);Rmb(g,UD(ynb(f)));Rmb(this.a,new BUc(d,g));tFb(0,g.c.length);g.c.splice(0,1)}}} -function Sdc(a,b){var c,d,e,f,g,h,i,j,k;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k==(r3b(),n3b)){i=(j=RD(hs(new is(Mr(Z2b(g).a.Kc(),new ir))),18),k=RD(hs(new is(Mr(a3b(g).a.Kc(),new ir))),18),!Heb(TD(mQb(j,(Ywc(),Nwc))))||!Heb(TD(mQb(k,Nwc))))?b:Qnd(b);Qdc(g,i)}for(d=new is(Mr(a3b(g).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);i=Heb(TD(mQb(c,(Ywc(),Nwc))))?Qnd(b):b;Pdc(c,i)}}}} -function V8c(a,b,c,d,e){var f,g,h;if(c.f>=b.o&&c.f<=b.f||b.a*0.5<=c.f&&b.a*1.5>=c.f){g=RD(Vmb(b.n,b.n.c.length-1),209);if(g.e+g.d+c.g+e<=d&&(f=RD(Vmb(b.n,b.n.c.length-1),209),f.f-a.f+c.f<=a.b||a.a.c.length==1)){K9c(b,c);return true}else if(b.s+c.g<=d&&(b.t+b.d+c.f+e<=a.b||a.a.c.length==1)){Rmb(b.b,c);h=RD(Vmb(b.n,b.n.c.length-1),209);Rmb(b.n,new _9c(b.s,h.f+h.a+b.i,b.i));W9c(RD(Vmb(b.n,b.n.c.length-1),209),c);M9c(b,c);return true}}return false} -function xLd(a,b,c){var d,e,f,g;if(a.Pj()){e=null;f=a.Qj();d=a.Ij(1,g=UHd(a,b,c),c,b,f);if(a.Mj()&&!(a.Yi()&&g!=null?pb(g,c):dE(g)===dE(c))){g!=null&&(e=a.Oj(g,e));e=a.Nj(c,e);a.Tj()&&(e=a.Wj(g,c,e));if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Tj()&&(e=a.Wj(g,c,e));if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}return g}else{g=UHd(a,b,c);if(a.Mj()&&!(a.Yi()&&g!=null?pb(g,c):dE(g)===dE(c))){e=null;g!=null&&(e=a.Oj(g,null));e=a.Nj(c,e);!!e&&e.oj()}return g}} -function Rsc(a,b){var c,d,e,f,g;b.Ug('Path-Like Graph Wrapping',1);if(a.b.c.length==0){b.Vg();return}e=new ysc(a);g=(e.i==null&&(e.i=tsc(e,new Asc)),Kfb(e.i)*e.f);c=g/(e.i==null&&(e.i=tsc(e,new Asc)),Kfb(e.i));if(e.b>c){b.Vg();return}switch(RD(mQb(a,(yCc(),rCc)),351).g){case 2:f=new Ksc;break;case 0:f=new zrc;break;default:f=new Nsc;}d=f.og(a,e);if(!f.pg()){switch(RD(mQb(a,xCc),352).g){case 2:d=Wsc(e,d);break;case 1:d=Usc(e,d);}}Qsc(a,e,d);b.Vg()} -function mB(a,b){var c,d,e,f,g,h,i,j;b%=24;if(a.q.getHours()!=b){d=new $wnd.Date(a.q.getTime());d.setDate(d.getDate()+1);h=a.q.getTimezoneOffset()-d.getTimezoneOffset();if(h>0){i=h/60|0;j=h%60;e=a.q.getDate();c=a.q.getHours();c+i>=24&&++e;f=new $wnd.Date(a.q.getFullYear(),a.q.getMonth(),e,b+i,a.q.getMinutes()+j,a.q.getSeconds(),a.q.getMilliseconds());a.q.setTime(f.getTime())}}g=a.q.getTime();a.q.setTime(g+3600000);a.q.getHours()!=b&&a.q.setTime(g)} -function kKc(a,b){var c,d,e,f;Nwb(a.d,a.e);a.c.a.$b();if(Kfb(UD(mQb(b.j,(yCc(),Zzc))))!=0||Kfb(UD(mQb(b.j,Zzc)))!=0){c=Hze;dE(mQb(b.j,cAc))!==dE((kEc(),hEc))&&pQb(b.j,(Ywc(),jwc),(Geb(),true));f=RD(mQb(b.j,gCc),17).a;for(e=0;e<f;e++){d=uKc(a,b);if(d<c){c=d;xKc(a);if(c==0){break}}}}else{c=lve;dE(mQb(b.j,cAc))!==dE((kEc(),hEc))&&pQb(b.j,(Ywc(),jwc),(Geb(),true));f=RD(mQb(b.j,gCc),17).a;for(e=0;e<f;e++){d=vKc(a,b);if(d<c){c=d;xKc(a);if(c==0){break}}}}} -function Vsc(a,b){var c,d,e,f,g,h,i,j;g=new bnb;h=0;c=0;i=0;while(h<b.c.length-1&&c<a.gc()){d=RD(a.Xb(c),17).a+i;while((tFb(h+1,b.c.length),RD(b.c[h+1],17)).a<d){++h}j=0;f=d-(tFb(h,b.c.length),RD(b.c[h],17)).a;e=(tFb(h+1,b.c.length),RD(b.c[h+1],17)).a-d;f>e&&++j;Rmb(g,(tFb(h+j,b.c.length),RD(b.c[h+j],17)));i+=(tFb(h+j,b.c.length),RD(b.c[h+j],17)).a-d;++c;while(c<a.gc()&&RD(a.Xb(c),17).a+i<=(tFb(h+j,b.c.length),RD(b.c[h+j],17)).a){++c}h+=1+j}return g} -function VGc(a,b){var c,d,e,f,g;for(g=new is(Mr(Z2b(b).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);if(a.f.b==0){e=f.c.i.k==(r3b(),p3b)&&!!f.c.i.c&&f.c.i.c.p==a.c;if(gs(new is(Mr(Z2b(f.c.i).a.Kc(),new ir)))){c=RD(hs(new is(Mr(Z2b(f.c.i).a.Kc(),new ir))),18).c.i.c;d=f.c.i.k==n3b&&!!c&&c.p==a.c}else{d=false}}else{e=f.c.i.k==(r3b(),p3b)&&f.c.i.p==a.c;d=f.c.i.k==n3b&&RD(hs(new is(Mr(Z2b(f.c.i).a.Kc(),new ir))),18).c.i.p==a.c}if(e||d){return true}}return false} -function DHc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=new bnb;r=Xx(d);q=b*a.a;l=0;o=0;f=new _sb;g=new _sb;h=new bnb;s=0;t=0;n=0;p=0;j=0;k=0;while(r.a.gc()!=0){i=HHc(r,e,g);if(i){r.a.Bc(i)!=null;ZEb(h.c,i);f.a.zc(i,f);o=a.f[i.p];s+=a.e[i.p]-o*a.b;l=a.c[i.p];t+=l*a.b;k+=o*a.b;p+=a.e[i.p]}if(!i||r.a.gc()==0||s>=q&&a.e[i.p]>o*a.b||t>=c*q){ZEb(m.c,h);h=new bnb;ye(g,f);f.a.$b();j-=k;n=$wnd.Math.max(n,j*a.b+p);j+=t;s=t;t=0;k=0;p=0}}return new Ptd(n,m)} -function pYd(a){var b,c,d,e,f,g,h;if(!a.d){h=new v_d;b=iYd;f=b.a.zc(a,b);if(f==null){for(d=new dMd(zYd(a));d.e!=d.i.gc();){c=RD(bMd(d),29);YGd(h,pYd(c))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}g=h.i;for(e=(!a.q&&(a.q=new C5d(s7,a,11,10)),new dMd(a.q));e.e!=e.i.gc();++g){RD(bMd(e),411)}YGd(h,(!a.q&&(a.q=new C5d(s7,a,11,10)),a.q));VHd(h);a.d=new N$d((RD(QHd(xYd((lTd(),kTd).o),9),19),h.i),h.g);a.e=RD(h.g,688);a.e==null&&(a.e=jYd);yYd(a).b&=-17}return a.d} -function kge(a,b,c,d){var e,f,g,h,i,j;j=pke(a.e.Dh(),b);i=0;e=RD(a.g,124);nke();if(RD(b,69).xk()){for(g=0;g<a.i;++g){f=e[g];if(j.am(f.Lk())){if(pb(f,c)){return i}++i}}}else if(c!=null){for(h=0;h<a.i;++h){f=e[h];if(j.am(f.Lk())){if(pb(c,f.md())){return i}++i}}if(d){i=0;for(g=0;g<a.i;++g){f=e[g];if(j.am(f.Lk())){if(dE(c)===dE(Age(a,RD(f.md(),58)))){return i}++i}}}}else{for(g=0;g<a.i;++g){f=e[g];if(j.am(f.Lk())){if(f.md()==null){return i}++i}}}return -1} -function Xje(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;if(c.Xh(b)){k=(n=b,!n?null:RD(d,54).gi(n));if(k){p=c.Nh(b,a.a);o=b.t;if(o>1||o==-1){l=RD(p,71);m=RD(k,71);if(l.dc()){m.$b()}else{g=!!Z5d(b);f=0;for(h=a.a?l.Kc():l.Ii();h.Ob();){j=RD(h.Pb(),58);e=RD(cub(a,j),58);if(!e){if(a.b&&!g){m.Gi(f,j);++f}}else{if(g){i=m.dd(e);i==-1?m.Gi(f,e):f!=i&&m.Ui(f,e)}else{m.Gi(f,e)}++f}}}}else{if(p==null){k.Wb(null)}else{e=cub(a,p);e==null?a.b&&!Z5d(b)&&k.Wb(p):k.Wb(e)}}}}} -function V9b(a,b){var c,d,e,f,g,h,i,j;c=new aac;for(e=new is(Mr(Z2b(b).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);if(W0b(d)){continue}h=d.c.i;if(W9b(h,T9b)){j=X9b(a,h,T9b,S9b);if(j==-1){continue}c.b=$wnd.Math.max(c.b,j);!c.a&&(c.a=new bnb);Rmb(c.a,h)}}for(g=new is(Mr(a3b(b).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);if(W0b(f)){continue}i=f.d.i;if(W9b(i,S9b)){j=X9b(a,i,S9b,T9b);if(j==-1){continue}c.d=$wnd.Math.max(c.d,j);!c.c&&(c.c=new bnb);Rmb(c.c,i)}}return c} -function pcc(a,b,c,d){var e,f,g,h,i,j,k;if(c.d.i==b.i){return}e=new j3b(a);h3b(e,(r3b(),o3b));pQb(e,(Ywc(),Awc),c);pQb(e,(yCc(),BBc),(Bod(),wod));ZEb(d.c,e);g=new R3b;P3b(g,e);Q3b(g,(qpd(),ppd));h=new R3b;P3b(h,e);Q3b(h,Xod);k=c.d;Z0b(c,g);f=new a1b;kQb(f,c);pQb(f,RAc,null);Y0b(f,h);Z0b(f,k);j=new Jkb(c.b,0);while(j.b<j.d.gc()){i=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),72));if(dE(mQb(i,wAc))===dE((Omd(),Mmd))){pQb(i,dwc,c);Ckb(j);Rmb(f.b,i)}}rcc(e,g,h)} -function occ(a,b,c,d){var e,f,g,h,i,j,k;if(c.c.i==b.i){return}e=new j3b(a);h3b(e,(r3b(),o3b));pQb(e,(Ywc(),Awc),c);pQb(e,(yCc(),BBc),(Bod(),wod));ZEb(d.c,e);g=new R3b;P3b(g,e);Q3b(g,(qpd(),ppd));h=new R3b;P3b(h,e);Q3b(h,Xod);Z0b(c,g);f=new a1b;kQb(f,c);pQb(f,RAc,null);Y0b(f,h);Z0b(f,b);rcc(e,g,h);j=new Jkb(c.b,0);while(j.b<j.d.gc()){i=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),72));k=RD(mQb(i,wAc),278);if(k==(Omd(),Mmd)){nQb(i,dwc)||pQb(i,dwc,c);Ckb(j);Rmb(f.b,i)}}} -function Sjb(a){Ljb();var b,c,d,e;b=eE(a);if(a<Kjb.length){return Kjb[b]}else if(a<=50){return Yib((Pib(),Mib),b)}else if(a<=Awe){return Zib(Yib(Jjb[1],b),b)}if(a>1000000){throw Adb(new teb('power of ten too big'))}if(a<=lve){return Zib(Yib(Jjb[1],b),b)}d=Yib(Jjb[1],lve);e=d;c=Hdb(a-lve);b=eE(a%lve);while(Ddb(c,lve)>0){e=Wib(e,d);c=Vdb(c,lve)}e=Wib(e,Yib(Jjb[1],b));e=Zib(e,lve);c=Hdb(a-lve);while(Ddb(c,lve)>0){e=Zib(e,lve);c=Vdb(c,lve)}e=Zib(e,b);return e} -function s9b(a){var b,c,d,e,f,g,h,i,j,k;for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),10);if(h.k!=(r3b(),m3b)){continue}e=RD(mQb(h,(Ywc(),hwc)),64);if(e==(qpd(),Xod)||e==ppd){for(d=new is(Mr(W2b(h).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);b=c.a;if(b.b==0){continue}j=c.c;if(j.i==h){f=(sFb(b.b!=0),RD(b.a.a.c,8));f.b=xjd(cD(WC(l3,1),Nve,8,0,[j.i.n,j.n,j.a])).b}k=c.d;if(k.i==h){g=(sFb(b.b!=0),RD(b.c.b.c,8));g.b=xjd(cD(WC(l3,1),Nve,8,0,[k.i.n,k.n,k.a])).b}}}}} -function Nlc(a,b,c,d){var e,f,g;this.j=new bnb;this.k=new bnb;this.b=new bnb;this.c=new bnb;this.e=new Tid;this.i=new Ejd;this.f=new cHb;this.d=new bnb;this.g=new bnb;Rmb(this.b,a);Rmb(this.b,b);this.e.c=$wnd.Math.min(a.a,b.a);this.e.d=$wnd.Math.min(a.b,b.b);this.e.b=$wnd.Math.abs(a.a-b.a);this.e.a=$wnd.Math.abs(a.b-b.b);e=RD(mQb(d,(yCc(),RAc)),75);if(e){for(g=Sub(e,0);g.b!=g.d.c;){f=RD(evb(g),8);rGb(f.a,a.a)&&Mub(this.i,f)}}!!c&&Rmb(this.j,c);Rmb(this.k,d)} -function vSc(a,b,c,d){var e,f,g,h,i,j,k;h=-1;for(k=new Anb(a);k.a<k.c.c.length;){j=RD(ynb(k),118);j.g=h--;e=Ydb(mDb(IDb(CDb(new SDb(null,new Swb(j.f,16)),new xSc),new zSc)).d);f=Ydb(mDb(IDb(CDb(new SDb(null,new Swb(j.k,16)),new BSc),new DSc)).d);g=e;i=f;if(!d){g=Ydb(mDb(IDb(new SDb(null,new Swb(j.f,16)),new FSc)).d);i=Ydb(mDb(IDb(new SDb(null,new Swb(j.k,16)),new HSc)).d)}j.d=g;j.a=e;j.i=i;j.b=f;i==0?(Pub(c,j,c.c.b,c.c),true):g==0&&(Pub(b,j,b.c.b,b.c),true)}} -function Qdc(a,b){var c,d,e,f,g,h;if(a.k==(r3b(),n3b)){c=a.k==n3b&&!QDb(CDb(RD(mQb(a,(Ywc(),Mwc)),15).Oc(),new PAb(new x3b))).Bd((xDb(),wDb))?(Pnd(),Nnd):b;pQb(a,(Ywc(),swc),c);if(c!=(Pnd(),Mnd)){d=RD(mQb(a,Awc),18);h=Kfb(UD(mQb(d,(yCc(),FAc))));g=0;if(c==Lnd){g=a.o.b-$wnd.Math.ceil(h/2)}else if(c==Nnd){g=$wnd.Math.ceil(a.o.b-Kfb(UD(mQb(Y2b(a),VBc)))-h)/2;a.o.b-=Kfb(UD(mQb(Y2b(a),VBc)));a.o.b-=h}for(f=new Anb(a.j);f.a<f.c.c.length;){e=RD(ynb(f),12);e.n.b=g}}}} -function XQc(a,b,c){var d,e,f,g,h,i,j,k,l;e=true;for(g=new Anb(a.b);g.a<g.c.c.length;){f=RD(ynb(g),30);j=pxe;k=null;for(i=new Anb(f.a);i.a<i.c.c.length;){h=RD(ynb(i),10);l=Kfb(b.p[h.p])+Kfb(b.d[h.p])-h.d.d;d=Kfb(b.p[h.p])+Kfb(b.d[h.p])+h.o.b+h.d.a;if(l>j&&d>j){k=h;j=Kfb(b.p[h.p])+Kfb(b.d[h.p])+h.o.b+h.d.a}else{e=false;c._g()&&c.bh('bk node placement breaks on '+h+' which should have been after '+k);break}}if(!e){break}}c._g()&&c.bh(b+' is feasible: '+e);return e} -function Dfc(a,b,c,d){var e,f,g,h,i,j,k,l,m;f=new j3b(a);h3b(f,(r3b(),q3b));pQb(f,(yCc(),BBc),(Bod(),wod));e=0;if(b){g=new R3b;pQb(g,(Ywc(),Awc),b);pQb(f,Awc,b.i);Q3b(g,(qpd(),ppd));P3b(g,f);m=s2b(b.e);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];Z0b(i,g)}pQb(b,Iwc,f);++e}if(c){h=new R3b;pQb(f,(Ywc(),Awc),c.i);pQb(h,Awc,c);Q3b(h,(qpd(),Xod));P3b(h,f);m=s2b(c.g);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];Y0b(i,h)}pQb(c,Iwc,f);++e}pQb(f,(Ywc(),$vc),sgb(e));ZEb(d.c,f);return f} -function Bgd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;for(c=(j=(new glb(a.c.b)).a.vc().Kc(),new llb(j));c.a.Ob();){b=(h=RD(c.a.Pb(),44),RD(h.md(),143));e=b.a;e==null&&(e='');d=tgd(a.c,e);!d&&e.length==0&&(d=Fgd(a));!!d&&!ze(d.c,b,false)&&Mub(d.c,b)}for(g=Sub(a.a,0);g.b!=g.d.c;){f=RD(evb(g),486);k=ugd(a.c,f.a);n=ugd(a.c,f.b);!!k&&!!n&&Mub(k.c,new Ptd(n,f.c))}Xub(a.a);for(m=Sub(a.b,0);m.b!=m.d.c;){l=RD(evb(m),486);b=rgd(a.c,l.a);i=ugd(a.c,l.b);!!b&&!!i&&Mfd(b,i,l.c)}Xub(a.b)} -function QId(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=new vC(a);g=new IEd;e=(wo(g.g),wo(g.j),akb(g.b),wo(g.d),wo(g.i),akb(g.k),akb(g.c),akb(g.e),n=DEd(g,f,null),AEd(g,f),n);if(b){j=new vC(b);h=RId(j);msd(e,cD(WC(j4,1),rve,536,0,[h]))}m=false;l=false;if(c){j=new vC(c);RIe in j.a&&(m=qC(j,RIe).qe().a);SIe in j.a&&(l=qC(j,SIe).qe().a)}k=Kqd(Mqd(new Oqd,m),l);Eed(new Hed,e,k);RIe in f.a&&sC(f,RIe,null);if(m||l){i=new uC;NId(k,i,m,l);sC(f,RIe,i)}d=new nFd(g);dve(new zId(e),d)} -function FA(a,b,c){var d,e,f,g,h,i,j,k,l;g=new DB;j=cD(WC(kE,1),Pwe,28,15,[0]);e=-1;f=0;d=0;for(i=0;i<a.b.c.length;++i){k=RD(Vmb(a.b,i),443);if(k.b>0){if(e<0&&k.a){e=i;f=j[0];d=0}if(e>=0){h=k.b;if(i==e){h-=d++;if(h==0){return 0}}if(!MA(b,j,k,h,g)){i=e-1;j[0]=f;continue}}else{e=-1;if(!MA(b,j,k,0,g)){return 0}}}else{e=-1;if(ihb(k.c,0)==32){l=j[0];KA(b,j);if(j[0]>l){continue}}else if(xhb(b,k.c,j[0])){j[0]+=k.c.length;continue}return 0}}if(!CB(g,c)){return 0}return j[0]} -function qWb(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=new pwb(new GWb(c));h=$C(xdb,Hye,28,a.f.e.c.length,16,1);Snb(h,h.length);c[b.a]=0;for(j=new Anb(a.f.e);j.a<j.c.c.length;){i=RD(ynb(j),153);i.a!=b.a&&(c[i.a]=lve);zFb(lwb(k,i),Bxe)}while(k.b.c.length!=0){l=RD(mwb(k),153);h[l.a]=true;for(f=ru(new su(a.b,l),0);f.c;){e=RD(Lu(f),289);m=tWb(e,l);if(h[m.a]){continue}nQb(e,(dWb(),TVb))?(g=Kfb(UD(mQb(e,TVb)))):(g=a.c);d=c[l.a]+g;if(d<c[m.a]){c[m.a]=d;nwb(k,m);zFb(lwb(k,m),Bxe)}}}} -function iPb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.o;d=$C(kE,Pwe,28,g,15,1);e=$C(kE,Pwe,28,g,15,1);c=a.p;b=$C(kE,Pwe,28,c,15,1);f=$C(kE,Pwe,28,c,15,1);for(j=0;j<g;j++){l=0;while(l<c&&!PPb(a,j,l)){++l}d[j]=l}for(k=0;k<g;k++){l=c-1;while(l>=0&&!PPb(a,k,l)){--l}e[k]=l}for(n=0;n<c;n++){h=0;while(h<g&&!PPb(a,h,n)){++h}b[n]=h}for(o=0;o<c;o++){h=g-1;while(h>=0&&!PPb(a,h,o)){--h}f[o]=h}for(i=0;i<g;i++){for(m=0;m<c;m++){i<f[m]&&i>b[m]&&m<e[i]&&m>d[i]&&TPb(a,i,m,false,true)}}} -function hUb(a){var b,c,d,e,f,g,h,i;c=Heb(TD(mQb(a,(yVb(),$Ub))));f=a.a.c.d;h=a.a.d.d;if(c){g=ijd(ojd(new rjd(h.a,h.b),f),0.5);i=ijd(ajd(a.e),0.5);b=ojd($id(new rjd(f.a,f.b),g),i);mjd(a.d,b)}else{e=Kfb(UD(mQb(a.a,qVb)));d=a.d;if(f.a>=h.a){if(f.b>=h.b){d.a=h.a+(f.a-h.a)/2+e;d.b=h.b+(f.b-h.b)/2-e-a.e.b}else{d.a=h.a+(f.a-h.a)/2+e;d.b=f.b+(h.b-f.b)/2+e}}else{if(f.b>=h.b){d.a=f.a+(h.a-f.a)/2+e;d.b=h.b+(f.b-h.b)/2+e}else{d.a=f.a+(h.a-f.a)/2+e;d.b=f.b+(h.b-f.b)/2-e-a.e.b}}}} -function qYd(a){var b,c,d,e,f,g,h,i;if(!a.f){i=new a_d;h=new a_d;b=iYd;g=b.a.zc(a,b);if(g==null){for(f=new dMd(zYd(a));f.e!=f.i.gc();){e=RD(bMd(f),29);YGd(i,qYd(e))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}for(d=(!a.s&&(a.s=new C5d(y7,a,21,17)),new dMd(a.s));d.e!=d.i.gc();){c=RD(bMd(d),179);ZD(c,102)&&WGd(h,RD(c,19))}VHd(h);a.r=new s_d(a,(RD(QHd(xYd((lTd(),kTd).o),6),19),h.i),h.g);YGd(i,a.r);VHd(i);a.f=new N$d((RD(QHd(xYd(kTd.o),5),19),i.i),i.g);yYd(a).b&=-3}return a.f} -function uSb(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,Aze),'ELK DisCo'),'Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out.'),new xSb)));Agd(a,Aze,Bze,iGd(sSb));Agd(a,Aze,Cze,iGd(mSb));Agd(a,Aze,Dze,iGd(hSb));Agd(a,Aze,Eze,iGd(nSb));Agd(a,Aze,Bye,iGd(qSb));Agd(a,Aze,Cye,iGd(pSb));Agd(a,Aze,Aye,iGd(rSb));Agd(a,Aze,Dye,iGd(oSb));Agd(a,Aze,vze,iGd(jSb));Agd(a,Aze,wze,iGd(iSb));Agd(a,Aze,xze,iGd(kSb));Agd(a,Aze,yze,iGd(lSb))} -function qAd(){qAd=geb;oAd=cD(WC(hE,1),zwe,28,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]);pAd=new RegExp('[ \t\n\r\f]+');try{nAd=cD(WC(h8,1),rve,2114,0,[new c2d((WA(),YA("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",_A(($A(),$A(),ZA))))),new c2d(YA("yyyy-MM-dd'T'HH:mm:ss'.'SSS",_A((null,ZA)))),new c2d(YA("yyyy-MM-dd'T'HH:mm:ss",_A((null,ZA)))),new c2d(YA("yyyy-MM-dd'T'HH:mm",_A((null,ZA)))),new c2d(YA('yyyy-MM-dd',_A((null,ZA))))])}catch(a){a=zdb(a);if(!ZD(a,82))throw Adb(a)}} -function uKc(a,b){var c,d,e,f;e=Kwb(a.d,1)!=0;d=mKc(a,b);if(d==0&&Heb(TD(mQb(b.j,(Ywc(),jwc))))){return 0}!Heb(TD(mQb(b.j,(Ywc(),jwc))))&&!Heb(TD(mQb(b.j,Owc)))||dE(mQb(b.j,(yCc(),cAc)))===dE((kEc(),hEc))?b.c.mg(b.e,e):(e=Heb(TD(mQb(b.j,jwc))));DKc(a,b,e,true);Heb(TD(mQb(b.j,Owc)))&&pQb(b.j,Owc,(Geb(),false));if(Heb(TD(mQb(b.j,jwc)))){pQb(b.j,jwc,(Geb(),false));pQb(b.j,Owc,true)}c=mKc(a,b);do{yKc(a);if(c==0){return 0}e=!e;f=c;DKc(a,b,e,false);c=mKc(a,b)}while(f>c);return f} -function vKc(a,b){var c,d,e,f;e=Kwb(a.d,1)!=0;d=lKc(a,b);if(d==0&&Heb(TD(mQb(b.j,(Ywc(),jwc))))){return 0}!Heb(TD(mQb(b.j,(Ywc(),jwc))))&&!Heb(TD(mQb(b.j,Owc)))||dE(mQb(b.j,(yCc(),cAc)))===dE((kEc(),hEc))?b.c.mg(b.e,e):(e=Heb(TD(mQb(b.j,jwc))));DKc(a,b,e,true);Heb(TD(mQb(b.j,Owc)))&&pQb(b.j,Owc,(Geb(),false));if(Heb(TD(mQb(b.j,jwc)))){pQb(b.j,jwc,(Geb(),false));pQb(b.j,Owc,true)}c=lKc(a,b);do{yKc(a);if(c==0){return 0}e=!e;f=c;DKc(a,b,e,false);c=lKc(a,b)}while(f>c);return f} -function Gid(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=ojd(new rjd(c.a,c.b),a);j=i.a*b.b-i.b*b.a;k=b.a*d.b-b.b*d.a;l=(i.a*d.b-i.b*d.a)/k;m=j/k;if(k==0){if(j==0){e=$id(new rjd(c.a,c.b),ijd(new rjd(d.a,d.b),0.5));f=bjd(a,e);g=bjd($id(new rjd(a.a,a.b),b),e);h=$wnd.Math.sqrt(d.a*d.a+d.b*d.b)*0.5;if(f<g&&f<=h){return new rjd(a.a,a.b)}if(g<=h){return $id(new rjd(a.a,a.b),b)}return null}else{return null}}else{return l>=0&&l<=1&&m>=0&&m<=1?$id(new rjd(a.a,a.b),ijd(new rjd(b.a,b.b),l)):null}} -function QWb(a,b,c){var d,e,f,g,h;d=RD(mQb(a,(yCc(),dAc)),21);c.a>b.a&&(d.Hc((ukd(),okd))?(a.c.a+=(c.a-b.a)/2):d.Hc(qkd)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((ukd(),skd))?(a.c.b+=(c.b-b.b)/2):d.Hc(rkd)&&(a.c.b+=c.b-b.b));if(RD(mQb(a,(Ywc(),kwc)),21).Hc((ovc(),hvc))&&(c.a>b.a||c.b>b.b)){for(h=new Anb(a.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k==(r3b(),m3b)){e=RD(mQb(g,hwc),64);e==(qpd(),Xod)?(g.n.a+=c.a-b.a):e==npd&&(g.n.b+=c.b-b.b)}}}f=a.d;a.f.a=c.a-f.b-f.c;a.f.b=c.b-f.d-f.a} -function Y8b(a,b,c){var d,e,f,g,h;d=RD(mQb(a,(yCc(),dAc)),21);c.a>b.a&&(d.Hc((ukd(),okd))?(a.c.a+=(c.a-b.a)/2):d.Hc(qkd)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((ukd(),skd))?(a.c.b+=(c.b-b.b)/2):d.Hc(rkd)&&(a.c.b+=c.b-b.b));if(RD(mQb(a,(Ywc(),kwc)),21).Hc((ovc(),hvc))&&(c.a>b.a||c.b>b.b)){for(g=new Anb(a.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(f.k==(r3b(),m3b)){e=RD(mQb(f,hwc),64);e==(qpd(),Xod)?(f.n.a+=c.a-b.a):e==npd&&(f.n.b+=c.b-b.b)}}}h=a.d;a.f.a=c.a-h.b-h.c;a.f.b=c.b-h.d-h.a} -function KQc(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=bRc(a);for(k=(h=(new Xkb(b)).a.vc().Kc(),new blb(h));k.a.Ob();){j=(e=RD(k.a.Pb(),44),RD(e.ld(),10));l=0;m=0;l=j.d.d;m=j.o.b+j.d.a;a.d[j.p]=0;c=j;while((f=a.a[c.p])!=j){d=dRc(c,f);i=0;a.c==(wQc(),uQc)?(i=d.d.n.b+d.d.a.b-d.c.n.b-d.c.a.b):(i=d.c.n.b+d.c.a.b-d.d.n.b-d.d.a.b);g=Kfb(a.d[c.p])+i;a.d[f.p]=g;l=$wnd.Math.max(l,f.d.d-g);m=$wnd.Math.max(m,g+f.o.b+f.d.a);c=f}c=j;do{a.d[c.p]=Kfb(a.d[c.p])+l;c=a.a[c.p]}while(c!=j);a.b[j.p]=l+m}} -function S9c(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=0;g=a.t;e=0;d=0;i=0;m=0;l=0;if(c){a.n.c.length=0;Rmb(a.n,new _9c(a.s,a.t,a.i))}h=0;for(k=new Anb(a.b);k.a<k.c.c.length;){j=RD(ynb(k),27);if(f+j.g+(h>0?a.i:0)>b&&i>0){f=0;g+=i+a.i;e=$wnd.Math.max(e,m);d+=i+a.i;i=0;m=0;if(c){++l;Rmb(a.n,new _9c(a.s,g,a.i))}h=0}m+=j.g+(h>0?a.i:0);i=$wnd.Math.max(i,j.f);c&&W9c(RD(Vmb(a.n,l),209),j);f+=j.g+(h>0?a.i:0);++h}e=$wnd.Math.max(e,m);d+=i;if(c){a.r=e;a.d=d;Ead(a.j)}return new Uid(a.s,a.t,e,d)} -function CRb(a){var b,c,d,e,f,g,h,i,j,k,l,m;a.b=false;l=oxe;i=pxe;m=oxe;j=pxe;for(d=a.e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),272);e=c.a;l=$wnd.Math.min(l,e.c);i=$wnd.Math.max(i,e.c+e.b);m=$wnd.Math.min(m,e.d);j=$wnd.Math.max(j,e.d+e.a);for(g=new Anb(c.c);g.a<g.c.c.length;){f=RD(ynb(g),407);b=f.a;if(b.a){k=e.d+f.b.b;h=k+f.c;m=$wnd.Math.min(m,k);j=$wnd.Math.max(j,h)}else{k=e.c+f.b.a;h=k+f.c;l=$wnd.Math.min(l,k);i=$wnd.Math.max(i,h)}}}a.a=new rjd(i-l,j-m);a.c=new rjd(l+a.d.a,m+a.d.b)} -function mYd(a){var b,c,d,e,f,g,h,i;if(!a.a){a.o=null;i=new e_d(a);b=new i_d;c=iYd;h=c.a.zc(a,c);if(h==null){for(g=new dMd(zYd(a));g.e!=g.i.gc();){f=RD(bMd(g),29);YGd(i,mYd(f))}c.a.Bc(a)!=null;c.a.gc()==0&&undefined}for(e=(!a.s&&(a.s=new C5d(y7,a,21,17)),new dMd(a.s));e.e!=e.i.gc();){d=RD(bMd(e),179);ZD(d,331)&&WGd(b,RD(d,35))}VHd(b);a.k=new n_d(a,(RD(QHd(xYd((lTd(),kTd).o),7),19),b.i),b.g);YGd(i,a.k);VHd(i);a.a=new N$d((RD(QHd(xYd(kTd.o),4),19),i.i),i.g);yYd(a).b&=-2}return a.a} -function age(a,b,c,d){var e,f,g,h,i,j,k;k=pke(a.e.Dh(),b);e=0;f=RD(a.g,124);i=null;nke();if(RD(b,69).xk()){for(h=0;h<a.i;++h){g=f[h];if(k.am(g.Lk())){if(pb(g,c)){i=g;break}++e}}}else if(c!=null){for(h=0;h<a.i;++h){g=f[h];if(k.am(g.Lk())){if(pb(c,g.md())){i=g;break}++e}}}else{for(h=0;h<a.i;++h){g=f[h];if(k.am(g.Lk())){if(g.md()==null){i=g;break}++e}}}if(i){if(Mvd(a.e)){j=b.Jk()?new lle(a.e,4,b,c,null,e,true):fge(a,b.tk()?2:1,b,c,b.ik(),-1,true);d?d.nj(j):(d=j)}d=_fe(a,i,d)}return d} -function d8c(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p;o=0;p=0;i=e.c;h=e.b;k=c.f;n=c.g;switch(b.g){case 0:o=d.i+d.g+g;a.c?(p=m8c(o,f,d,g)):(p=d.j);m=$wnd.Math.max(i,o+n);j=$wnd.Math.max(h,p+k);break;case 1:p=d.j+d.f+g;a.c?(o=l8c(p,f,d,g)):(o=d.i);m=$wnd.Math.max(i,o+n);j=$wnd.Math.max(h,p+k);break;case 2:o=i+g;p=0;m=i+g+n;j=$wnd.Math.max(h,k);break;case 3:o=0;p=h+g;m=$wnd.Math.max(i,n);j=h+g+k;break;default:throw Adb(new agb('IllegalPlacementOption.'));}l=new mad(a.a,m,j,b,o,p);return l} -function g6b(a){var b,c,d,e,f,g,h,i,j,k,l,m;h=a.d;l=RD(mQb(a,(Ywc(),Xwc)),15);b=RD(mQb(a,Vvc),15);if(!l&&!b){return}f=Kfb(UD(hFc(a,(yCc(),QBc))));g=Kfb(UD(hFc(a,RBc)));m=0;if(l){j=0;for(e=l.Kc();e.Ob();){d=RD(e.Pb(),10);j=$wnd.Math.max(j,d.o.b);m+=d.o.a}m+=f*(l.gc()-1);h.d+=j+g}c=0;if(b){j=0;for(e=b.Kc();e.Ob();){d=RD(e.Pb(),10);j=$wnd.Math.max(j,d.o.b);c+=d.o.a}c+=f*(b.gc()-1);h.a+=j+g}i=$wnd.Math.max(m,c);if(i>a.o.a){k=(i-a.o.a)/2;h.b=$wnd.Math.max(h.b,k);h.c=$wnd.Math.max(h.c,k)}} -function RId(a){var b,c,d,e,f,g,h,i;f=new med;ied(f,(hed(),eed));for(d=(e=oC(a,$C(qJ,Nve,2,0,6,1)),new Dkb(new mob((new CC(a,e)).b)));d.b<d.d.gc();){c=(sFb(d.b<d.d.gc()),WD(d.d.Xb(d.c=d.b++)));g=vgd(LId,c);if(g){b=qC(a,c);b.te()?(h=b.te().a):b.qe()?(h=''+b.qe().a):b.re()?(h=''+b.re().a):(h=b.Ib());i=zhd(g,h);if(i!=null){(Csb(g.j,(Yhd(),Vhd))||Csb(g.j,Whd))&&oQb(ked(f,J4),g,i);Csb(g.j,Thd)&&oQb(ked(f,G4),g,i);Csb(g.j,Xhd)&&oQb(ked(f,K4),g,i);Csb(g.j,Uhd)&&oQb(ked(f,I4),g,i)}}}return f} -function ige(a,b,c){var d,e,f,g,h,i,j,k;e=RD(a.g,124);if(qke(a.e,b)){return nke(),RD(b,69).xk()?new ole(b,a):new Eke(b,a)}else{j=pke(a.e.Dh(),b);d=0;for(h=0;h<a.i;++h){f=e[h];g=f.Lk();if(j.am(g)){nke();if(RD(b,69).xk()){return f}else if(g==(Lle(),Jle)||g==Gle){i=new dib(jeb(f.md()));while(++h<a.i){f=e[h];g=f.Lk();(g==Jle||g==Gle)&&Zhb(i,jeb(f.md()))}return Ije(RD(b.Hk(),156),i.a)}else{k=f.md();k!=null&&c&&ZD(b,102)&&(RD(b,19).Bb&txe)!=0&&(k=Bge(a,b,h,d,k));return k}}++d}return b.ik()}} -function hge(a,b,c,d){var e,f,g,h,i,j;i=pke(a.e.Dh(),b);f=RD(a.g,124);if(qke(a.e,b)){e=0;for(h=0;h<a.i;++h){g=f[h];if(i.am(g.Lk())){if(e==c){nke();if(RD(b,69).xk()){return g}else{j=g.md();j!=null&&d&&ZD(b,102)&&(RD(b,19).Bb&txe)!=0&&(j=Bge(a,b,h,e,j));return j}}++e}}throw Adb(new veb(HJe+c+NIe+e))}else{e=0;for(h=0;h<a.i;++h){g=f[h];if(i.am(g.Lk())){nke();if(RD(b,69).xk()){return g}else{j=g.md();j!=null&&d&&ZD(b,102)&&(RD(b,19).Bb&txe)!=0&&(j=Bge(a,b,h,e,j));return j}}++e}return b.ik()}} -function xjb(){xjb=geb;vjb=cD(WC(kE,1),Pwe,28,15,[qwe,1162261467,hwe,1220703125,362797056,1977326743,hwe,387420489,ixe,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,1280000000,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729000000,887503681,hwe,1291467969,1544804416,1838265625,60466176]);wjb=cD(WC(kE,1),Pwe,28,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])} -function Gjb(a,b){var c,d,e,f,g,h,i,j,k,l;g=a.e;i=b.e;if(i==0){return a}if(g==0){return b.e==0?b:new cjb(-b.e,b.d,b.a)}f=a.d;h=b.d;if(f+h==2){c=Cdb(a.a[0],yxe);d=Cdb(b.a[0],yxe);g<0&&(c=Odb(c));i<0&&(d=Odb(d));return Pib(),Jdb(Vdb(c,d),0)?jjb(Vdb(c,d)):Xib(jjb(Odb(Vdb(c,d))))}e=f!=h?f>h?1:-1:Ejb(a.a,b.a,f);if(e==-1){l=-i;k=g==i?Hjb(b.a,h,a.a,f):Cjb(b.a,h,a.a,f)}else{l=g;if(g==i){if(e==0){return Pib(),Oib}k=Hjb(a.a,f,b.a,h)}else{k=Cjb(a.a,f,b.a,h)}}j=new cjb(l,k.length,k);Rib(j);return j} -function c5b(a,b){var c,d,e,f;f=Z4b(b);!b.c&&(b.c=new C5d(K4,b,9,9));FDb(new SDb(null,(!b.c&&(b.c=new C5d(K4,b,9,9)),new Swb(b.c,16))),new s5b(f));e=RD(mQb(f,(Ywc(),kwc)),21);Y4b(b,e);if(e.Hc((ovc(),hvc))){for(d=new dMd((!b.c&&(b.c=new C5d(K4,b,9,9)),b.c));d.e!=d.i.gc();){c=RD(bMd(d),123);g5b(a,b,f,c)}}RD(Gxd(b,(yCc(),lBc)),181).gc()!=0&&V4b(b,f);Heb(TD(mQb(f,sBc)))&&e.Fc(mvc);nQb(f,PBc)&&HCc(new RCc(Kfb(UD(mQb(f,PBc)))),f);dE(Gxd(b,IAc))===dE((Fnd(),Cnd))?d5b(a,b,f):b5b(a,b,f);return f} -function Vrc(a){var b,c,d,e,f,g,h,i;for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);for(g=new Anb(bv(d.a));g.a<g.c.c.length;){f=RD(ynb(g),10);if(Lrc(f)){c=RD(mQb(f,(Ywc(),Wvc)),313);if(!c.g&&!!c.d){b=c;i=c.d;while(i){Urc(i.i,i.k,false,true);asc(b.a);asc(i.i);asc(i.k);asc(i.b);Z0b(i.c,b.c.d);Z0b(b.c,null);g3b(b.a,null);g3b(i.i,null);g3b(i.k,null);g3b(i.b,null);h=new Jrc(b.i,i.a,b.e,i.j,i.f);h.k=b.k;h.n=b.n;h.b=b.b;h.c=i.c;h.g=b.g;h.d=i.d;pQb(b.i,Wvc,h);pQb(i.a,Wvc,h);i=i.d;b=h}}}}}} -function nue(a,b){var c,d,e,f,g,h,i;if(a==null){return null}f=a.length;if(f==0){return ''}i=$C(hE,zwe,28,f,15,1);AFb(0,f,a.length);AFb(0,f,i.length);nhb(a,0,f,i,0);c=null;h=b;for(e=0,g=0;e<f;e++){d=i[e];Kqe();if(d<=32&&(Jqe[d]&2)!=0){if(h){!c&&(c=new Shb(a));Phb(c,e-g++)}else{h=b;if(d!=32){!c&&(c=new Shb(a));peb(c,e-g,e-g+1,String.fromCharCode(32))}}}else{h=false}}if(h){if(!c){return AFb(0,f-1,a.length),a.substr(0,f-1)}else{f=c.a.length;return f>0?zhb(c.a,0,f-1):''}}else{return !c?a:c.a}} -function xic(a,b){var c,d,e,f,g,h,i;b.Ug('Sort By Input Model '+mQb(a,(yCc(),cAc)),1);e=0;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);i=e==0?0:e-1;h=RD(Vmb(a.b,i),30);for(g=new Anb(c.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(dE(mQb(f,BBc))!==dE((Bod(),vod))&&dE(mQb(f,BBc))!==dE(wod)){yob();_mb(f.j,new trc(h,RD(mQb(a,cAc),284),Bic(f),Heb(TD(mQb(a,bAc)))));b.bh('Node '+f+' ports: '+f.j)}}yob();_mb(c.a,new frc(h,RD(mQb(a,cAc),284),RD(mQb(a,_zc),390)));b.bh('Layer '+e+': '+c);++e}b.Vg()} -function ute(a,b){var c,d,e,f,g;g=RD(b,138);vte(a);vte(g);if(g.b==null)return;a.c=true;if(a.b==null){a.b=$C(kE,Pwe,28,g.b.length,15,1);hib(g.b,0,a.b,0,g.b.length);return}f=$C(kE,Pwe,28,a.b.length+g.b.length,15,1);for(c=0,d=0,e=0;c<a.b.length||d<g.b.length;){if(c>=a.b.length){f[e++]=g.b[d++];f[e++]=g.b[d++]}else if(d>=g.b.length){f[e++]=a.b[c++];f[e++]=a.b[c++]}else if(g.b[d]<a.b[c]||g.b[d]===a.b[c]&&g.b[d+1]<a.b[c+1]){f[e++]=g.b[d++];f[e++]=g.b[d++]}else{f[e++]=a.b[c++];f[e++]=a.b[c++]}}a.b=f} -function hac(a,b){var c,d,e,f,g,h,i,j,k,l;c=Heb(TD(mQb(a,(Ywc(),uwc))));h=Heb(TD(mQb(b,uwc)));d=RD(mQb(a,vwc),12);i=RD(mQb(b,vwc),12);e=RD(mQb(a,wwc),12);j=RD(mQb(b,wwc),12);k=!!d&&d==i;l=!!e&&e==j;if(!c&&!h){return new oac(RD(ynb(new Anb(a.j)),12).p==RD(ynb(new Anb(b.j)),12).p,k,l)}f=(!Heb(TD(mQb(a,uwc)))||Heb(TD(mQb(a,twc))))&&(!Heb(TD(mQb(b,uwc)))||Heb(TD(mQb(b,twc))));g=(!Heb(TD(mQb(a,uwc)))||!Heb(TD(mQb(a,twc))))&&(!Heb(TD(mQb(b,uwc)))||!Heb(TD(mQb(b,twc))));return new oac(k&&f||l&&g,k,l)} -function N9c(a){var b,c,d,e,f,g,h,i;d=0;c=0;i=new Yub;b=0;for(h=new Anb(a.n);h.a<h.c.c.length;){g=RD(ynb(h),209);if(g.c.c.length==0){Pub(i,g,i.c.b,i.c)}else{d=$wnd.Math.max(d,g.d);c+=g.a+(b>0?a.i:0)}++b}Ce(a.n,i);a.d=c;a.r=d;a.g=0;a.f=0;a.e=0;a.o=oxe;a.p=oxe;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),27);a.p=$wnd.Math.min(a.p,e.g);a.g=$wnd.Math.max(a.g,e.g);a.f=$wnd.Math.max(a.f,e.f);a.o=$wnd.Math.min(a.o,e.f);a.e+=e.f+a.i}a.a=a.e/a.b.c.length-a.i*((a.b.c.length-1)/a.b.c.length);Ead(a.j)} -function qzd(a){var b,c,d,e;if((a.Db&64)!=0)return kyd(a);b=new dib(BHe);d=a.k;if(!d){!a.n&&(a.n=new C5d(I4,a,1,7));if(a.n.i>0){e=(!a.n&&(a.n=new C5d(I4,a,1,7)),RD(QHd(a.n,0),135)).a;!e||Zhb(Zhb((b.a+=' "',b),e),'"')}}else{Zhb(Zhb((b.a+=' "',b),d),'"')}c=(!a.b&&(a.b=new Yie(E4,a,4,7)),!(a.b.i<=1&&(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c.i<=1)));c?(b.a+=' [',b):(b.a+=' ',b);Zhb(b,Eb(new Gb,new dMd(a.b)));c&&(b.a+=']',b);b.a+=SAe;c&&(b.a+='[',b);Zhb(b,Eb(new Gb,new dMd(a.c)));c&&(b.a+=']',b);return b.a} -function odc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;v=a.c;w=b.c;c=Wmb(v.a,a,0);d=Wmb(w.a,b,0);t=RD(c3b(a,(BEc(),yEc)).Kc().Pb(),12);C=RD(c3b(a,zEc).Kc().Pb(),12);u=RD(c3b(b,yEc).Kc().Pb(),12);D=RD(c3b(b,zEc).Kc().Pb(),12);r=s2b(t.e);A=s2b(C.g);s=s2b(u.e);B=s2b(D.g);f3b(a,d,w);for(g=s,k=0,o=g.length;k<o;++k){e=g[k];Z0b(e,t)}for(h=B,l=0,p=h.length;l<p;++l){e=h[l];Y0b(e,C)}f3b(b,c,v);for(i=r,m=0,q=i.length;m<q;++m){e=i[m];Z0b(e,u)}for(f=A,j=0,n=f.length;j<n;++j){e=f[j];Y0b(e,D)}} -function $2c(a){var b,c,d,e,f,g,h;g=RD(Gxd(a,(u2c(),t2c)),27);for(d=new dMd((!g.e&&(g.e=new Yie(G4,g,7,4)),g.e));d.e!=d.i.gc();){c=RD(bMd(d),74);h=new rjd(RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166).j,RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166).k);f=new rjd(RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166).b,RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166).c);e=new rjd(f.a-h.a,f.b-h.b);b=$wnd.Math.atan2(e.b,e.a);RD(QHd((!c.c&&(c.c=new Yie(E4,c,5,8)),c.c),0),84).qf(($4c(),W4c),b)}} -function o6c(a,b){var c,d,e,f,g,h,i,j,k;b.Ug('Interactive Node Reorderer',1);k=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);h=new bnb;for(e=new dMd(k);e.e!=e.i.gc();){c=RD(bMd(e),27);Hxd(c,(X7c(),A7c))&&(ZEb(h.c,c),true)}for(f=new Anb(h);f.a<f.c.c.length;){c=RD(ynb(f),27);dHd(k,c)}yob();_mb(h,new s6c);for(g=new Anb(h);g.a<g.c.c.length;){c=RD(ynb(g),27);j=RD(Gxd(c,(X7c(),A7c)),17).a;j=$wnd.Math.min(j,k.i);VGd(k,j,c)}i=0;for(d=new dMd(k);d.e!=d.i.gc();){c=RD(bMd(d),27);Ixd(c,(X7c(),z7c),sgb(i));++i}b.Vg()} -function PTc(a,b,c){var d,e,f,g,h,i,j,k;if($wnd.Math.abs(b.s-b.c)<Vze||$wnd.Math.abs(c.s-c.c)<Vze){return 0}d=OTc(a,b.j,c.e);e=OTc(a,c.j,b.e);f=d==-1||e==-1;g=0;if(f){if(d==-1){new bTc((fTc(),dTc),c,b,1);++g}if(e==-1){new bTc((fTc(),dTc),b,c,1);++g}}else{h=VTc(b.j,c.s,c.c);h+=VTc(c.e,b.s,b.c);i=VTc(c.j,b.s,b.c);i+=VTc(b.e,c.s,c.c);j=d+16*h;k=e+16*i;if(j<k){new bTc((fTc(),eTc),b,c,k-j)}else if(j>k){new bTc((fTc(),eTc),c,b,j-k)}else if(j>0&&k>0){new bTc((fTc(),eTc),b,c,0);new bTc(eTc,c,b,0)}}return g} -function pXc(a,b,c){var d,e,f;a.a=new bnb;for(f=Sub(b.b,0);f.b!=f.d.c;){e=RD(evb(f),39);while(RD(mQb(e,(h_c(),f_c)),17).a>a.a.c.length-1){Rmb(a.a,new Ptd(Hze,KEe))}d=RD(mQb(e,f_c),17).a;if(c==(Cmd(),ymd)||c==zmd){e.e.a<Kfb(UD(RD(Vmb(a.a,d),42).a))&&Ntd(RD(Vmb(a.a,d),42),e.e.a);e.e.a+e.f.a>Kfb(UD(RD(Vmb(a.a,d),42).b))&&Otd(RD(Vmb(a.a,d),42),e.e.a+e.f.a)}else{e.e.b<Kfb(UD(RD(Vmb(a.a,d),42).a))&&Ntd(RD(Vmb(a.a,d),42),e.e.b);e.e.b+e.f.b>Kfb(UD(RD(Vmb(a.a,d),42).b))&&Otd(RD(Vmb(a.a,d),42),e.e.b+e.f.b)}}} -function g2b(a,b,c,d){var e,f,g,h,i,j,k;f=i2b(d);h=Heb(TD(mQb(d,(yCc(),aBc))));if((h||Heb(TD(mQb(a,MAc))))&&!Dod(RD(mQb(a,BBc),101))){e=vpd(f);i=q2b(a,c,c==(BEc(),zEc)?e:spd(e))}else{i=new R3b;P3b(i,a);if(b){k=i.n;k.a=b.a-a.n.a;k.b=b.b-a.n.b;_id(k,0,0,a.o.a,a.o.b);Q3b(i,c2b(i,f))}else{e=vpd(f);Q3b(i,c==(BEc(),zEc)?e:spd(e))}g=RD(mQb(d,(Ywc(),kwc)),21);j=i.j;switch(f.g){case 2:case 1:(j==(qpd(),Yod)||j==npd)&&g.Fc((ovc(),lvc));break;case 4:case 3:(j==(qpd(),Xod)||j==ppd)&&g.Fc((ovc(),lvc));}}return i} -function VXb(a,b){var c,d,e,f,g,h;for(g=new vkb((new mkb(a.f.b)).a);g.b;){f=tkb(g);e=RD(f.ld(),602);if(b==1){if(e.Af()!=(Cmd(),Bmd)&&e.Af()!=xmd){continue}}else{if(e.Af()!=(Cmd(),ymd)&&e.Af()!=zmd){continue}}d=RD(RD(f.md(),42).b,86);h=RD(RD(f.md(),42).a,194);c=h.c;switch(e.Af().g){case 2:d.g.c=a.e.a;d.g.b=$wnd.Math.max(1,d.g.b+c);break;case 1:d.g.c=d.g.c+c;d.g.b=$wnd.Math.max(1,d.g.b-c);break;case 4:d.g.d=a.e.b;d.g.a=$wnd.Math.max(1,d.g.a+c);break;case 3:d.g.d=d.g.d+c;d.g.a=$wnd.Math.max(1,d.g.a-c);}}} -function NNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;h=$C(kE,Pwe,28,b.b.c.length,15,1);j=$C(hR,jwe,273,b.b.c.length,0,1);i=$C(jR,WAe,10,b.b.c.length,0,1);for(l=a.a,m=0,n=l.length;m<n;++m){k=l[m];p=0;for(g=new Anb(k.e);g.a<g.c.c.length;){e=RD(ynb(g),10);d=Q4b(e.c);++h[d];o=Kfb(UD(mQb(b,(yCc(),TBc))));h[d]>0&&!!i[d]&&(o=bFc(a.b,i[d],e));p=$wnd.Math.max(p,e.c.c.b+o)}for(f=new Anb(k.e);f.a<f.c.c.length;){e=RD(ynb(f),10);e.n.b=p+e.d.d;c=e.c;c.c.b=p+e.d.d+e.o.b+e.d.a;j[Wmb(c.b.b,c,0)]=e.k;i[Wmb(c.b.b,c,0)]=e}}} -function M5c(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(d=new is(Mr(zGd(b).a.Kc(),new ir));gs(d);){c=RD(hs(d),74);if(!ZD(QHd((!c.b&&(c.b=new Yie(E4,c,4,7)),c.b),0),193)){i=AGd(RD(QHd((!c.c&&(c.c=new Yie(E4,c,5,8)),c.c),0),84));if(!nzd(c)){g=b.i+b.g/2;h=b.j+b.f/2;k=i.i+i.g/2;l=i.j+i.f/2;m=new pjd;m.a=k-g;m.b=l-h;f=new rjd(m.a,m.b);wid(f,b.g,b.f);m.a-=f.a;m.b-=f.b;g=k-m.a;h=l-m.b;j=new rjd(m.a,m.b);wid(j,i.g,i.f);m.a-=j.a;m.b-=j.b;k=g+m.a;l=h+m.b;e=IGd(c,true,true);Ozd(e,g);Pzd(e,h);Hzd(e,k);Izd(e,l);M5c(a,i)}}}} -function ocd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,hGe),'ELK SPOrE Compaction'),'ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree.'),new rcd)));Agd(a,hGe,iGe,iGd(mcd));Agd(a,hGe,jGe,iGd(jcd));Agd(a,hGe,kGe,iGd(icd));Agd(a,hGe,lGe,iGd(gcd));Agd(a,hGe,mGe,iGd(hcd));Agd(a,hGe,Eze,fcd);Agd(a,hGe,_ze,8);Agd(a,hGe,nGe,iGd(lcd));Agd(a,hGe,oGe,iGd(bcd));Agd(a,hGe,pGe,iGd(ccd));Agd(a,hGe,LDe,(Geb(),false))} -function hQc(a,b){var c,d,e,f,g,h,i,j,k,l;b.Ug('Simple node placement',1);l=RD(mQb(a,(Ywc(),Qwc)),312);h=0;for(f=new Anb(a.b);f.a<f.c.c.length;){d=RD(ynb(f),30);g=d.c;g.b=0;c=null;for(j=new Anb(d.a);j.a<j.c.c.length;){i=RD(ynb(j),10);!!c&&(g.b+=_Ec(i,c,l.c));g.b+=i.d.d+i.o.b+i.d.a;c=i}h=$wnd.Math.max(h,g.b)}for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);g=d.c;k=(h-g.b)/2;c=null;for(j=new Anb(d.a);j.a<j.c.c.length;){i=RD(ynb(j),10);!!c&&(k+=_Ec(i,c,l.c));k+=i.d.d;i.n.b=k;k+=i.o.b+i.d.a;c=i}}b.Vg()} -function tqc(a,b){var c,d,e,f;nqc(b.b.j);FDb(GDb(new SDb(null,new Swb(b.d,16)),new Eqc),new Gqc);for(f=new Anb(b.d);f.a<f.c.c.length;){e=RD(ynb(f),105);switch(e.e.g){case 0:c=RD(Vmb(e.j,0),113).d.j;Smc(e,RD(Lvb(KDb(RD(Qc(e.k,c),15).Oc(),lqc)),113));Tmc(e,RD(Lvb(JDb(RD(Qc(e.k,c),15).Oc(),lqc)),113));break;case 1:d=foc(e);Smc(e,RD(Lvb(KDb(RD(Qc(e.k,d[0]),15).Oc(),lqc)),113));Tmc(e,RD(Lvb(JDb(RD(Qc(e.k,d[1]),15).Oc(),lqc)),113));break;case 2:vqc(a,e);break;case 3:uqc(e);break;case 4:sqc(a,e);}qqc(e)}a.a=null} -function yRc(a,b,c){var d,e,f,g,h,i,j,k;d=a.a.o==(EQc(),DQc)?oxe:pxe;h=zRc(a,new xRc(b,c));if(!h.a&&h.c){Mub(a.d,h);return d}else if(h.a){e=h.a.c;i=h.a.d;if(c){j=a.a.c==(wQc(),vQc)?i:e;f=a.a.c==vQc?e:i;g=a.a.g[f.i.p];k=Kfb(a.a.p[g.p])+Kfb(a.a.d[f.i.p])+f.n.b+f.a.b-Kfb(a.a.d[j.i.p])-j.n.b-j.a.b}else{j=a.a.c==(wQc(),uQc)?i:e;f=a.a.c==uQc?e:i;k=Kfb(a.a.p[a.a.g[f.i.p].p])+Kfb(a.a.d[f.i.p])+f.n.b+f.a.b-Kfb(a.a.d[j.i.p])-j.n.b-j.a.b}a.a.n[a.a.g[e.i.p].p]=(Geb(),true);a.a.n[a.a.g[i.i.p].p]=true;return k}return d} -function Sfe(a,b,c,d){var e,f,g,h,i,j,k,l;if(d.gc()==0){return false}i=(nke(),RD(b,69).xk());g=i?d:new ZHd(d.gc());if(qke(a.e,b)){if(b.Si()){for(k=d.Kc();k.Ob();){j=k.Pb();if(!dge(a,b,j,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)){f=oke(b,j);g.Fc(f)}}}else if(!i){for(k=d.Kc();k.Ob();){j=k.Pb();f=oke(b,j);g.Fc(f)}}}else{l=pke(a.e.Dh(),b);e=RD(a.g,124);for(h=0;h<a.i;++h){f=e[h];if(l.am(f.Lk())){throw Adb(new agb(gLe))}}if(d.gc()>1){throw Adb(new agb(gLe))}if(!i){f=oke(b,d.Kc().Pb());g.Fc(f)}}return XGd(a,gge(a,b,c),g)} -function Fge(a,b,c){var d,e,f,g,h,i,j,k;if(qke(a.e,b)){i=(nke(),RD(b,69).xk()?new ole(b,a):new Eke(b,a));bge(i.c,i.b);Ake(i,RD(c,16))}else{k=pke(a.e.Dh(),b);d=RD(a.g,124);for(g=0;g<a.i;++g){e=d[g];f=e.Lk();if(k.am(f)){if(f==(Lle(),Jle)||f==Gle){j=Mge(a,b,c);h=g;j?vLd(a,g):++g;while(g<a.i){e=d[g];f=e.Lk();f==Jle||f==Gle?vLd(a,g):++g}j||RD(eHd(a,h,oke(b,c)),76)}else Mge(a,b,c)?vLd(a,g):RD(eHd(a,g,(nke(),RD(b,69).xk()?RD(c,76):oke(b,c))),76);return}}Mge(a,b,c)||WGd(a,(nke(),RD(b,69).xk()?RD(c,76):oke(b,c)))}} -function zPb(a,b,c){var d,e,f,g,h,i,j,k;if(!pb(c,a.b)){a.b=c;f=new CPb;g=RD(zDb(GDb(new SDb(null,new Swb(c.f,16)),f),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21);a.e=true;a.f=true;a.c=true;a.d=true;e=g.Hc((IPb(),FPb));d=g.Hc(GPb);e&&!d&&(a.f=false);!e&&d&&(a.d=false);e=g.Hc(EPb);d=g.Hc(HPb);e&&!d&&(a.c=false);!e&&d&&(a.e=false)}k=RD(a.a.Ve(b,c),42);i=RD(k.a,17).a;j=RD(k.b,17).a;h=false;i<0?a.c||(h=true):a.e||(h=true);j<0?a.d||(h=true):a.f||(h=true);return h?zPb(a,k,c):k} -function fNb(a){var b,c,d,e;e=a.o;RMb();if(a.A.dc()||pb(a.A,QMb)){b=e.b}else{b=YKb(a.f);if(a.A.Hc((Qpd(),Npd))&&!a.B.Hc((dqd(),_pd))){b=$wnd.Math.max(b,YKb(RD(Vrb(a.p,(qpd(),Xod)),252)));b=$wnd.Math.max(b,YKb(RD(Vrb(a.p,ppd),252)))}c=TMb(a);!!c&&(b=$wnd.Math.max(b,c.b));if(a.A.Hc(Opd)){if(a.q==(Bod(),xod)||a.q==wod){b=$wnd.Math.max(b,SJb(RD(Vrb(a.b,(qpd(),Xod)),127)));b=$wnd.Math.max(b,SJb(RD(Vrb(a.b,ppd),127)))}}}Heb(TD(a.e.Tf().of((umd(),mld))))?(e.b=$wnd.Math.max(e.b,b)):(e.b=b);d=a.f.i;d.d=0;d.a=b;_Kb(a.f)} -function yNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;for(l=0;l<b.length;l++){for(h=a.Kc();h.Ob();){f=RD(h.Pb(),230);f.hg(l,b)}for(m=0;m<b[l].length;m++){for(i=a.Kc();i.Ob();){f=RD(i.Pb(),230);f.ig(l,m,b)}p=b[l][m].j;for(n=0;n<p.c.length;n++){for(j=a.Kc();j.Ob();){f=RD(j.Pb(),230);f.jg(l,m,n,b)}o=(tFb(n,p.c.length),RD(p.c[n],12));c=0;for(e=new l4b(o.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);for(k=a.Kc();k.Ob();){f=RD(k.Pb(),230);f.gg(l,m,n,c++,d,b)}}}}}for(g=a.Kc();g.Ob();){f=RD(g.Pb(),230);f.fg()}} -function $7b(a,b){var c,d,e,f,g,h,i;a.b=Kfb(UD(mQb(b,(yCc(),UBc))));a.c=Kfb(UD(mQb(b,XBc)));a.d=RD(mQb(b,DAc),350);a.a=RD(mQb(b,Xzc),282);Y7b(b);h=RD(zDb(CDb(CDb(EDb(EDb(new SDb(null,new Swb(b.b,16)),new c8b),new e8b),new g8b),new i8b),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);for(e=h.Kc();e.Ob();){c=RD(e.Pb(),18);g=RD(mQb(c,(Ywc(),Twc)),15);g.Jc(new k8b(a));pQb(c,Twc,null)}for(d=h.Kc();d.Ob();){c=RD(d.Pb(),18);i=RD(mQb(c,(Ywc(),Uwc)),18);f=RD(mQb(c,Rwc),15);S7b(a,f,i);pQb(c,Rwc,null)}} -function r2d(a,b){var c,d,e,f,g,h,i;if(a.a){h=a.a.xe();i=null;if(h!=null){b.a+=''+h}else{g=a.a.mk();if(g!=null){f=qhb(g,Fhb(91));if(f!=-1){i=(BFb(f,g.length+1),g.substr(f));b.a+=''+zhb(g==null?vve:(uFb(g),g),0,f)}else{b.a+=''+g}}}if(!!a.d&&a.d.i!=0){e=true;b.a+='<';for(d=new dMd(a.d);d.e!=d.i.gc();){c=RD(bMd(d),89);e?(e=false):(b.a+=pve,b);r2d(c,b)}b.a+='>'}i!=null&&(b.a+=''+i,b)}else if(a.e){h=a.e.zb;h!=null&&(b.a+=''+h,b)}else{b.a+='?';if(a.b){b.a+=' super ';r2d(a.b,b)}else{if(a.f){b.a+=' extends ';r2d(a.f,b)}}}} -function Uae(a){a.b=null;a.a=null;a.o=null;a.q=null;a.v=null;a.w=null;a.B=null;a.p=null;a.Q=null;a.R=null;a.S=null;a.T=null;a.U=null;a.V=null;a.W=null;a.bb=null;a.eb=null;a.ab=null;a.H=null;a.db=null;a.c=null;a.d=null;a.f=null;a.n=null;a.r=null;a.s=null;a.u=null;a.G=null;a.J=null;a.e=null;a.j=null;a.i=null;a.g=null;a.k=null;a.t=null;a.F=null;a.I=null;a.L=null;a.M=null;a.O=null;a.P=null;a.$=null;a.N=null;a.Z=null;a.cb=null;a.K=null;a.D=null;a.A=null;a.C=null;a._=null;a.fb=null;a.X=null;a.Y=null;a.gb=false;a.hb=false} -function yib(a){var b,c,d,e;d=Ajb((!a.c&&(a.c=ojb(Hdb(a.f))),a.c),0);if(a.e==0||a.a==0&&a.f!=-1&&a.e<0){return d}b=xib(a)<0?1:0;c=a.e;e=(d.length+1+$wnd.Math.abs(eE(a.e)),new cib);b==1&&(e.a+='-',e);if(a.e>0){c-=d.length-b;if(c>=0){e.a+='0.';for(;c>mib.length;c-=mib.length){$hb(e,mib)}_hb(e,mib,eE(c));Zhb(e,(BFb(b,d.length+1),d.substr(b)))}else{c=b-c;Zhb(e,zhb(d,b,eE(c)));e.a+='.';Zhb(e,yhb(d,eE(c)))}}else{Zhb(e,(BFb(b,d.length+1),d.substr(b)));for(;c<-mib.length;c+=mib.length){$hb(e,mib)}_hb(e,mib,eE(-c))}return e.a} -function BOc(a){var b,c,d,e,f,g,h,i,j;if(a.k!=(r3b(),p3b)){return false}if(a.j.c.length<=1){return false}f=RD(mQb(a,(yCc(),BBc)),101);if(f==(Bod(),wod)){return false}e=(wDc(),(!a.q?(yob(),yob(),wob):a.q)._b(iBc)?(d=RD(mQb(a,iBc),203)):(d=RD(mQb(Y2b(a),jBc),203)),d);if(e==uDc){return false}if(!(e==tDc||e==sDc)){g=Kfb(UD(hFc(a,fCc)));b=RD(mQb(a,eCc),140);!b&&(b=new R2b(g,g,g,g));j=b3b(a,(qpd(),ppd));i=b.d+b.a+(j.gc()-1)*g;if(i>a.o.b){return false}c=b3b(a,Xod);h=b.d+b.a+(c.gc()-1)*g;if(h>a.o.b){return false}}return true} -function VRc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;b.Ug('Orthogonal edge routing',1);j=Kfb(UD(mQb(a,(yCc(),cCc))));c=Kfb(UD(mQb(a,UBc)));d=Kfb(UD(mQb(a,XBc)));m=new TTc(0,c);q=0;g=new Jkb(a.b,0);h=null;k=null;i=null;l=null;do{k=g.b<g.d.gc()?(sFb(g.b<g.d.gc()),RD(g.d.Xb(g.c=g.b++),30)):null;l=!k?null:k.a;if(h){p2b(h,q);q+=h.c.a}p=!h?q:q+d;o=STc(m,a,i,l,p);e=!h||ar(i,(dSc(),bSc));f=!k||ar(l,(dSc(),bSc));if(o>0){n=(o-1)*c;!!h&&(n+=d);!!k&&(n+=d);n<j&&!e&&!f&&(n=j);q+=n}else !e&&!f&&(q+=j);h=k;i=l}while(k);a.f.a=q;b.Vg()} -function tfe(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;!!a.d&&(k=RD(Xjb(a.d,b),142));if(!k){f=a.a.vi();l=f.i;if(!a.d||bkb(a.d)!=l){i=new Tsb;!!a.d&&Ld(i,a.d);j=i.f.c+i.i.c;for(h=j;h<l;++h){d=RD(QHd(f,h),142);e=Oee(a.e,d).xe();c=RD(e==null?rtb(i.f,null,d):Ltb(i.i,e,d),142);!!c&&c!=d&&(e==null?rtb(i.f,null,c):Ltb(i.i,e,c))}if(i.f.c+i.i.c!=l){for(g=0;g<j;++g){d=RD(QHd(f,g),142);e=Oee(a.e,d).xe();c=RD(e==null?rtb(i.f,null,d):Ltb(i.i,e,d),142);!!c&&c!=d&&(e==null?rtb(i.f,null,c):Ltb(i.i,e,c))}}a.d=i}k=RD(Xjb(a.d,b),142)}return k} -function w0b(a,b,c,d,e,f,g){var h,i,j,k,l,m,n;l=Heb(TD(mQb(b,(yCc(),bBc))));m=null;f==(BEc(),yEc)&&d.c.i==c?(m=d.c):f==zEc&&d.d.i==c&&(m=d.d);j=g;if(!j||!l||!!m){k=(qpd(),opd);m?(k=m.j):Dod(RD(mQb(c,BBc),101))&&(k=f==yEc?ppd:Xod);i=t0b(a,b,c,f,k,d);h=s0b((Y2b(c),d));if(f==yEc){Y0b(h,RD(Vmb(i.j,0),12));Z0b(h,e)}else{Y0b(h,e);Z0b(h,RD(Vmb(i.j,0),12))}j=new G0b(d,h,i,RD(mQb(i,(Ywc(),Awc)),12),f,!m)}else{Rmb(j.e,d);n=$wnd.Math.max(Kfb(UD(mQb(j.d,FAc))),Kfb(UD(mQb(d,FAc))));pQb(j.d,FAc,n)}Rc(a.a,d,new J0b(j.d,b,f));return j} -function gSd(){gSd=geb;var a;fSd=new MSd;_Rd=$C(qJ,Nve,2,0,6,1);URd=Rdb(xSd(33,58),xSd(1,26));VRd=Rdb(xSd(97,122),xSd(65,90));WRd=xSd(48,57);SRd=Rdb(URd,0);TRd=Rdb(VRd,WRd);XRd=Rdb(Rdb(0,xSd(1,6)),xSd(33,38));YRd=Rdb(Rdb(WRd,xSd(65,70)),xSd(97,102));cSd=Rdb(SRd,vSd("-_.!~*'()"));dSd=Rdb(TRd,ySd("-_.!~*'()"));vSd(MJe);ySd(MJe);Rdb(cSd,vSd(';:@&=+$,'));Rdb(dSd,ySd(';:@&=+$,'));ZRd=vSd(':/?#');$Rd=ySd(':/?#');aSd=vSd('/?#');bSd=ySd('/?#');a=new _sb;a.a.zc('jar',a);a.a.zc('zip',a);a.a.zc('archive',a);eSd=(yob(),new Lqb(a))} -function t0b(a,b,c,d,e,f){var g,h,i,j,k,l;g=null;j=d==(BEc(),yEc)?f.c:f.d;i=i2b(b);if(j.i==c){g=RD(Wjb(a.b,j),10);if(!g){g=f2b(j,RD(mQb(c,(yCc(),BBc)),101),e,p0b(j),null,j.n,j.o,i,b);pQb(g,(Ywc(),Awc),j);Zjb(a.b,j,g)}}else{g=f2b((k=new qQb,l=Kfb(UD(mQb(b,(yCc(),TBc))))/2,oQb(k,ABc,l),k),RD(mQb(c,BBc),101),e,d==yEc?-1:1,null,new pjd,new rjd(0,0),i,b);h=u0b(g,c,d);pQb(g,(Ywc(),Awc),h);Zjb(a.b,h,g)}RD(mQb(b,(Ywc(),kwc)),21).Fc((ovc(),hvc));Dod(RD(mQb(b,(yCc(),BBc)),101))?pQb(b,BBc,(Bod(),yod)):pQb(b,BBc,(Bod(),zod));return g} -function Yec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;h=0;o=0;i=Fnb(a.g,a.g.length);f=a.e;g=a.j;d=a.b;e=a.c;do{n=0;for(k=new Anb(a.q);k.a<k.c.c.length;){j=RD(ynb(k),10);m=Wec(a,j);c=true;(a.r==(aEc(),VDc)||a.r==YDc)&&(c=Heb(TD(m.b)));if(RD(m.a,17).a<0&&c){++n;i=Fnb(a.g,a.g.length);a.e=a.e+RD(m.a,17).a;o+=f-a.e;f=a.e+RD(m.a,17).a;g=a.j;d=bv(a.b);e=bv(a.c)}else{a.g=Fnb(i,i.length);a.e=f;a.b=(Qb(d),d?new dnb(d):cv(new Anb(d)));a.c=(Qb(e),e?new dnb(e):cv(new Anb(e)));a.j=g}}++h;l=n!=0&&Heb(TD(b.Kb(new Ptd(sgb(o),sgb(h)))))}while(l)} -function e8c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;g=a.f;m=b.f;h=g==(sad(),nad)||g==pad;n=m==nad||m==pad;i=g==oad||g==qad;o=m==oad||m==qad;j=g==oad||g==nad;p=m==oad||m==nad;if(h&&n){return a.f==pad?a:b}else if(i&&o){return a.f==qad?a:b}else if(j&&p){if(g==oad){l=a;k=b}else{l=b;k=a}f=(q=c.j+c.f,r=l.e+d.f,s=$wnd.Math.max(q,r),t=s-$wnd.Math.min(c.j,l.e),u=l.d+d.g-c.i,u*t);e=(v=c.i+c.g,w=k.d+d.g,A=$wnd.Math.max(v,w),B=A-$wnd.Math.min(c.i,k.d),C=k.e+d.f-c.j,B*C);return f<=e?a.f==oad?a:b:a.f==nad?a:b}return a} -function t0c(a,b){var c,d,e,f,g,h,i,j,k,l;pQb(b,(q$c(),g$c),0);i=RD(mQb(b,c$c),39);if(b.d.b==0){if(i){k=Kfb(UD(mQb(i,j$c)))+a.b+u0c(a,i,b);pQb(b,j$c,k)}else{pQb(b,j$c,0)}}else{for(d=(f=Sub((new dXc(b)).a.d,0),new gXc(f));dvb(d.a);){c=RD(evb(d.a),65).c;t0c(a,c)}h=RD(Hr((g=Sub((new dXc(b)).a.d,0),new gXc(g))),39);l=RD(Gr((e=Sub((new dXc(b)).a.d,0),new gXc(e))),39);j=(Kfb(UD(mQb(l,j$c)))+Kfb(UD(mQb(h,j$c))))/2;if(i){k=Kfb(UD(mQb(i,j$c)))+a.b+u0c(a,i,b);pQb(b,j$c,k);pQb(b,g$c,Kfb(UD(mQb(b,j$c)))-j);s0c(a,b)}else{pQb(b,j$c,j)}}} -function nJb(a){var b,c,d,e,f,g,h,i,j,k,l;k=a.e.a.c.length;for(g=new Anb(a.e.a);g.a<g.c.c.length;){f=RD(ynb(g),125);f.j=false}a.i=$C(kE,Pwe,28,k,15,1);a.g=$C(kE,Pwe,28,k,15,1);a.n=new bnb;e=0;l=new bnb;for(i=new Anb(a.e.a);i.a<i.c.c.length;){h=RD(ynb(i),125);h.d=e++;h.b.a.c.length==0&&Rmb(a.n,h);Tmb(l,h.g)}b=0;for(d=new Anb(l);d.a<d.c.c.length;){c=RD(ynb(d),218);c.c=b++;c.f=false}j=l.c.length;if(a.b==null||a.b.length<j){a.b=$C(iE,vxe,28,j,15,1);a.c=$C(xdb,Hye,28,j,16,1)}else{Nnb(a.c)}a.d=l;a.p=new Jub(Sv(a.d.c.length));a.j=1} -function uWb(a,b){var c,d,e,f,g,h,i,j,k;if(b.e.c.length<=1){return}a.f=b;a.d=RD(mQb(a.f,(dWb(),UVb)),391);a.g=RD(mQb(a.f,YVb),17).a;a.e=Kfb(UD(mQb(a.f,VVb)));a.c=Kfb(UD(mQb(a.f,TVb)));At(a.b);for(e=new Anb(a.f.c);e.a<e.c.c.length;){d=RD(ynb(e),289);zt(a.b,d.c,d,null);zt(a.b,d.d,d,null)}h=a.f.e.c.length;a.a=YC(iE,[Nve,vxe],[109,28],15,[h,h],2);for(j=new Anb(a.f.e);j.a<j.c.c.length;){i=RD(ynb(j),153);qWb(a,i,a.a[i.a])}a.i=YC(iE,[Nve,vxe],[109,28],15,[h,h],2);for(f=0;f<h;++f){for(g=0;g<h;++g){c=a.a[f][g];k=1/(c*c);a.i[f][g]=k}}} -function OWb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;h=b.ah();h||b.Ug(Pze,1);c=RD(mQb(a,(Ywc(),Kwc)),15);g=1/c.gc();if(b._g()){b.bh('ELK Layered uses the following '+c.gc()+' modules:');n=0;for(m=c.Kc();m.Ob();){k=RD(m.Pb(),47);d=(n<10?'0':'')+n++;b.bh(' Slot '+d+': '+nfb(rb(k)))}}o=0;for(l=c.Kc();l.Ob();){k=RD(l.Pb(),47);if(b.$g()){return}k.Kf(a,b.eh(g));++o}for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);Tmb(a.a,e.a);e.a.c.length=0}for(j=new Anb(a.a);j.a<j.c.c.length;){i=RD(ynb(j),10);g3b(i,null)}a.b.c.length=0;h||b.Vg()} -function y9b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;j=new bnb;if(!nQb(a,(Ywc(),fwc))){return j}for(d=RD(mQb(a,fwc),15).Kc();d.Ob();){b=RD(d.Pb(),10);x9b(b,a);ZEb(j.c,b)}for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k!=(r3b(),m3b)){continue}i=RD(mQb(g,gwc),10);!!i&&(k=new R3b,P3b(k,g),l=RD(mQb(g,hwc),64),Q3b(k,l),m=RD(Vmb(i.j,0),12),n=new a1b,Y0b(n,k),Z0b(n,m),undefined)}}for(c=new Anb(j);c.a<c.c.c.length;){b=RD(ynb(c),10);g3b(b,RD(Vmb(a.b,a.b.c.length-1),30))}return j} -function U8c(a,b,c){var d,e,f,g,h,i,j,k,l;l=new bnb;k=new Had(0,c);f=0;Cad(k,new V9c(0,0,k,c));e=0;for(j=new dMd(a);j.e!=j.i.gc();){i=RD(bMd(j),27);d=RD(Vmb(k.a,k.a.c.length-1),172);h=e+i.g+(RD(Vmb(k.a,0),172).b.c.length==0?0:c);if(h>b||Heb(TD(Gxd(i,(X7c(),D7c))))){e=0;f+=k.b+c;ZEb(l.c,k);k=new Had(f,c);d=new V9c(0,k.f,k,c);Cad(k,d);e=0}if(d.b.c.length==0||!Heb(TD(Gxd(vCd(i),(X7c(),L7c))))&&(i.f>=d.o&&i.f<=d.f||d.a*0.5<=i.f&&d.a*1.5>=i.f)){K9c(d,i)}else{g=new V9c(d.s+d.r+c,k.f,k,c);Cad(k,g);K9c(g,i)}e=i.i+i.g}ZEb(l.c,k);return l} -function ste(a){var b,c,d,e;if(a.b==null||a.b.length<=2)return;if(a.a)return;b=0;e=0;while(e<a.b.length){if(b!=e){a.b[b]=a.b[e++];a.b[b+1]=a.b[e++]}else e+=2;c=a.b[b+1];while(e<a.b.length){if(c+1<a.b[e])break;if(c+1==a.b[e]){a.b[b+1]=a.b[e+1];c=a.b[b+1];e+=2}else if(c>=a.b[e+1]){e+=2}else if(c<a.b[e+1]){a.b[b+1]=a.b[e+1];c=a.b[b+1];e+=2}else{throw Adb(new yz('Token#compactRanges(): Internel Error: ['+a.b[b]+','+a.b[b+1]+'] ['+a.b[e]+','+a.b[e+1]+']'))}}b+=2}if(b!=a.b.length){d=$C(kE,Pwe,28,b,15,1);hib(a.b,0,d,0,b);a.b=d}a.a=true} -function x0b(a,b){var c,d,e,f,g,h,i;for(g=Ec(a.a).Kc();g.Ob();){f=RD(g.Pb(),18);if(f.b.c.length>0){d=new dnb(RD(Qc(a.a,f),21));yob();_mb(d,new M0b(b));e=new Jkb(f.b,0);while(e.b<e.d.gc()){c=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),72));h=-1;switch(RD(mQb(c,(yCc(),wAc)),278).g){case 1:h=d.c.length-1;break;case 0:h=v0b(d);break;case 2:h=0;}if(h!=-1){i=(tFb(h,d.c.length),RD(d.c[h],249));Rmb(i.b.b,c);RD(mQb(Y2b(i.b.c.i),(Ywc(),kwc)),21).Fc((ovc(),gvc));RD(mQb(Y2b(i.b.c.i),kwc),21).Fc(evc);Ckb(e);pQb(c,Dwc,f)}}}Y0b(f,null);Z0b(f,null)}} -function wOb(a,b){var c,d,e,f;c=new BOb;d=RD(zDb(GDb(new SDb(null,new Swb(a.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21);e=d.gc();e=e==2?1:0;e==1&&Gdb(Mdb(RD(zDb(CDb(d.Lc(),new DOb),PBb(Hgb(0),new uCb)),168).a,2),0)&&(e=0);d=RD(zDb(GDb(new SDb(null,new Swb(b.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[wBb,vBb]))),21);f=d.gc();f=f==2?1:0;f==1&&Gdb(Mdb(RD(zDb(CDb(d.Lc(),new FOb),PBb(Hgb(0),new uCb)),168).a,2),0)&&(f=0);if(e<f){return -1}if(e==f){return 0}return 1} -function W4b(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=MCd(a);f=Heb(TD(Gxd(b,(yCc(),NAc))));k=0;e=0;for(j=new dMd((!a.e&&(a.e=new Yie(G4,a,7,4)),a.e));j.e!=j.i.gc();){i=RD(bMd(j),74);h=ozd(i);g=h&&f&&Heb(TD(Gxd(i,OAc)));m=AGd(RD(QHd((!i.c&&(i.c=new Yie(E4,i,5,8)),i.c),0),84));h&&g?++e:h&&!g?++k:vCd(m)==b||m==b?++e:++k}for(d=new dMd((!a.d&&(a.d=new Yie(G4,a,8,5)),a.d));d.e!=d.i.gc();){c=RD(bMd(d),74);h=ozd(c);g=h&&f&&Heb(TD(Gxd(c,OAc)));l=AGd(RD(QHd((!c.b&&(c.b=new Yie(E4,c,4,7)),c.b),0),84));h&&g?++k:h&&!g?++e:vCd(l)==b||l==b?++k:++e}return k-e} -function Jec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;b.Ug('Edge splitting',1);if(a.b.c.length<=2){b.Vg();return}f=new Jkb(a.b,0);g=(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),30));while(f.b<f.d.gc()){e=g;g=(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),30));for(i=new Anb(e.a);i.a<i.c.c.length;){h=RD(ynb(i),10);for(k=new Anb(h.j);k.a<k.c.c.length;){j=RD(ynb(k),12);for(d=new Anb(j.g);d.a<d.c.c.length;){c=RD(ynb(d),18);m=c.d;l=m.i.c;l!=e&&l!=g&&Oec(c,(n=new j3b(a),h3b(n,(r3b(),o3b)),pQb(n,(Ywc(),Awc),c),pQb(n,(yCc(),BBc),(Bod(),wod)),g3b(n,g),n))}}}}b.Vg()} -function MLc(a,b){var c,d,e,f,g,h,i,j,k,l,m;k=new bnb;m=new _sb;g=b.b;for(e=0;e<g.c.length;e++){j=(tFb(e,g.c.length),RD(g.c[e],30)).a;k.c.length=0;for(f=0;f<j.c.length;f++){h=a.a[e][f];h.p=f;h.k==(r3b(),q3b)&&(ZEb(k.c,h),true);$mb(RD(Vmb(b.b,e),30).a,f,h);h.j.c.length=0;Tmb(h.j,RD(RD(Vmb(a.b,e),15).Xb(f),16));Cod(RD(mQb(h,(yCc(),BBc)),101))||pQb(h,BBc,(Bod(),vod))}for(d=new Anb(k);d.a<d.c.c.length;){c=RD(ynb(d),10);l=KLc(c);m.a.zc(l,m);m.a.zc(c,m)}}for(i=m.a.ec().Kc();i.Ob();){h=RD(i.Pb(),10);yob();_mb(h.j,(sgc(),mgc));h.i=true;V2b(h)}} -function zib(a){var b,c,d,e,f;if(a.g!=null){return a.g}if(a.a<32){a.g=zjb(Hdb(a.f),eE(a.e));return a.g}e=Ajb((!a.c&&(a.c=ojb(Hdb(a.f))),a.c),0);if(a.e==0){return e}b=(!a.c&&(a.c=ojb(Hdb(a.f))),a.c).e<0?2:1;c=e.length;d=-a.e+c-b;f=new bib;f.a+=''+e;if(a.e>0&&d>=-6){if(d>=0){aib(f,c-eE(a.e),String.fromCharCode(46))}else{peb(f,b-1,b-1,'0.');aib(f,b+1,Ihb(mib,0,-eE(d)-1))}}else{if(c-b>=1){aib(f,b,String.fromCharCode(46));++c}aib(f,c,String.fromCharCode(69));d>0&&aib(f,++c,String.fromCharCode(43));aib(f,++c,''+Zdb(Hdb(d)))}a.g=f.a;return a.g} -function KNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;d=Kfb(UD(mQb(b,(yCc(),hBc))));v=RD(mQb(b,gCc),17).a;m=4;e=3;w=20/v;n=false;i=0;g=lve;do{f=i!=1;l=i!=0;A=0;for(q=a.a,s=0,u=q.length;s<u;++s){o=q[s];o.f=null;LNc(a,o,f,l,d);A+=$wnd.Math.abs(o.a)}do{h=PNc(a,b)}while(h);for(p=a.a,r=0,t=p.length;r<t;++r){o=p[r];c=XNc(o).a;if(c!=0){for(k=new Anb(o.e);k.a<k.c.c.length;){j=RD(ynb(k),10);j.n.b+=c}}}if(i==0||i==1){--m;if(m<=0&&(A<g||-m>v)){i=2;g=lve}else if(i==0){i=1;g=A}else{i=0;g=A}}else{n=A>=g||g-A<w;g=A;n&&--e}}while(!(n&&e<=0))} -function LFb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;o=new Tsb;for(f=a.a.ec().Kc();f.Ob();){d=RD(f.Pb(),177);Zjb(o,d,c.af(d))}g=(Qb(a),a?new dnb(a):cv(a.a.ec().Kc()));_mb(g,new NFb(o));h=Xx(g);i=new $Fb(b);n=new Tsb;rtb(n.f,b,i);while(h.a.gc()!=0){j=null;k=null;l=null;for(e=h.a.ec().Kc();e.Ob();){d=RD(e.Pb(),177);if(Kfb(UD(Wd(qtb(o.f,d))))<=oxe){if(Ujb(n,d.a)&&!Ujb(n,d.b)){k=d.b;l=d.a;j=d;break}if(Ujb(n,d.b)){if(!Ujb(n,d.a)){k=d.a;l=d.b;j=d;break}}}}if(!j){break}m=new $Fb(k);Rmb(RD(Wd(qtb(n.f,l)),225).a,m);rtb(n.f,k,m);h.a.Bc(j)!=null}return i} -function MFc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;c.Ug('Depth-first cycle removal',1);l=b.a;k=l.c.length;a.c=new bnb;a.d=$C(xdb,Hye,28,k,16,1);a.a=$C(xdb,Hye,28,k,16,1);a.b=new bnb;g=0;for(j=new Anb(l);j.a<j.c.c.length;){i=RD(ynb(j),10);i.p=g;gr(Z2b(i))&&Rmb(a.c,i);++g}for(n=new Anb(a.c);n.a<n.c.c.length;){m=RD(ynb(n),10);LFc(a,m)}for(f=0;f<k;f++){if(!a.d[f]){h=(tFb(f,l.c.length),RD(l.c[f],10));LFc(a,h)}}for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),18);X0b(d,true);pQb(b,(Ywc(),awc),(Geb(),true))}a.c=null;a.d=null;a.a=null;a.b=null;c.Vg()} -function Kid(a,b){tid();var c,d,e,f,g,h;f=b.c-(a.c+a.b);e=a.c-(b.c+b.b);g=a.d-(b.d+b.a);c=b.d-(a.d+a.a);d=$wnd.Math.max(e,f);h=$wnd.Math.max(g,c);Zy();bz(vEe);if(($wnd.Math.abs(d)<=vEe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:cz(isNaN(d),isNaN(0)))>=0^(null,bz(vEe),($wnd.Math.abs(h)<=vEe||h==0||isNaN(h)&&isNaN(0)?0:h<0?-1:h>0?1:cz(isNaN(h),isNaN(0)))>=0)){return $wnd.Math.max(h,d)}bz(vEe);if(($wnd.Math.abs(d)<=vEe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:cz(isNaN(d),isNaN(0)))>0){return $wnd.Math.sqrt(h*h+d*d)}return -$wnd.Math.sqrt(h*h+d*d)} -function hue(a,b){var c,d,e,f,g,h;if(!b)return;!a.a&&(a.a=new gyb);if(a.e==2){dyb(a.a,b);return}if(b.e==1){for(e=0;e<b.Pm();e++)hue(a,b.Lm(e));return}h=a.a.a.c.length;if(h==0){dyb(a.a,b);return}g=RD(eyb(a.a,h-1),122);if(!((g.e==0||g.e==10)&&(b.e==0||b.e==10))){dyb(a.a,b);return}f=b.e==0?2:b.Mm().length;if(g.e==0){c=new Rhb;d=g.Km();d>=txe?Nhb(c,qse(d)):Jhb(c,d&Bwe);g=(++Use,new eue(10,null,0));fyb(a.a,g,h-1)}else{c=(g.Mm().length+f,new Rhb);Nhb(c,g.Mm())}if(b.e==0){d=b.Km();d>=txe?Nhb(c,qse(d)):Jhb(c,d&Bwe)}else{Nhb(c,b.Mm())}RD(g,530).b=c.a} -function Qsc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(c.dc()){return}h=0;m=0;d=c.Kc();o=RD(d.Pb(),17).a;while(h<b.f){if(h==o){m=0;d.Ob()?(o=RD(d.Pb(),17).a):(o=b.f+1)}if(h!=m){q=RD(Vmb(a.b,h),30);n=RD(Vmb(a.b,m),30);p=bv(q.a);for(l=new Anb(p);l.a<l.c.c.length;){k=RD(ynb(l),10);f3b(k,n.a.c.length,n);if(m==0){g=bv(Z2b(k));for(f=new Anb(g);f.a<f.c.c.length;){e=RD(ynb(f),18);X0b(e,true);pQb(a,(Ywc(),awc),(Geb(),true));osc(a,e,1)}}}}++m;++h}i=new Jkb(a.b,0);while(i.b<i.d.gc()){j=(sFb(i.b<i.d.gc()),RD(i.d.Xb(i.c=i.b++),30));j.a.c.length==0&&Ckb(i)}} -function Xjc(a,b,c){var d,e,f;e=RD(mQb(b,(yCc(),Xzc)),282);if(e==($uc(),Yuc)){return}c.Ug('Horizontal Compaction',1);a.a=b;f=new Ckc;d=new VGb((f.d=b,f.c=RD(mQb(f.d,yAc),223),tkc(f),Akc(f),zkc(f),f.a));TGb(d,a.b);switch(RD(mQb(b,Wzc),431).g){case 1:RGb(d,new Pic(a.a));break;default:RGb(d,(FGb(),DGb));}switch(e.g){case 1:KGb(d);break;case 2:KGb(JGb(d,(Cmd(),zmd)));break;case 3:KGb(SGb(JGb(KGb(d),(Cmd(),zmd)),new fkc));break;case 4:KGb(SGb(JGb(KGb(d),(Cmd(),zmd)),new hkc(f)));break;case 5:KGb(QGb(d,Vjc));}JGb(d,(Cmd(),ymd));d.e=true;qkc(f);c.Vg()} -function bqc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;g=b.b;k=g.o;i=g.d;d=Kfb(UD(k2b(g,(yCc(),TBc))));e=Kfb(UD(k2b(g,VBc)));j=Kfb(UD(k2b(g,dCc)));h=new T2b;D2b(h,i.d,i.c,i.a,i.b);m=Zpc(b,d,e,j);for(r=new Anb(b.d);r.a<r.c.c.length;){q=RD(ynb(r),105);for(o=q.f.a.ec().Kc();o.Ob();){n=RD(o.Pb(),340);f=n.a;l=Xpc(n);c=(s=new Ejd,Vpc(n,n.c,m,s),Upc(n,l,m,s),Vpc(n,n.d,m,s),s);c=a.ng(n,l,c);Xub(f.a);ye(f.a,c);FDb(new SDb(null,new Swb(c,16)),new fqc(k,h))}p=q.i;if(p){aqc(q,p,m,e);t=new sjd(p.g);cqc(k,h,t);$id(t,p.j);cqc(k,h,t)}}D2b(i,h.d,h.c,h.a,h.b)} -function f8c(a,b,c,d,e,f,g,h){var i,j,k,l;i=dv(cD(WC(y1,1),rve,238,0,[b,c,d,e]));l=null;switch(a.b.g){case 1:l=dv(cD(WC(h1,1),rve,535,0,[new r8c,new h8c,new j8c]));break;case 0:l=dv(cD(WC(h1,1),rve,535,0,[new j8c,new h8c,new r8c]));break;case 2:l=dv(cD(WC(h1,1),rve,535,0,[new h8c,new r8c,new j8c]));}for(k=new Anb(l);k.a<k.c.c.length;){j=RD(ynb(k),535);i.c.length>1&&(i=j.Hg(i,a.a,h))}if(i.c.length==1){return RD(Vmb(i,i.c.length-1),238)}if(i.c.length==2){return e8c((tFb(0,i.c.length),RD(i.c[0],238)),(tFb(1,i.c.length),RD(i.c[1],238)),g,f)}return null} -function CZc(a,b,c){var d,e,f,g,h,i,j;c.Ug('Find roots',1);a.a.c.length=0;for(e=Sub(b.b,0);e.b!=e.d.c;){d=RD(evb(e),39);if(d.b.b==0){pQb(d,(q$c(),n$c),(Geb(),true));Rmb(a.a,d)}}switch(a.a.c.length){case 0:f=new bXc(0,b,'DUMMY_ROOT');pQb(f,(q$c(),n$c),(Geb(),true));pQb(f,WZc,true);Mub(b.b,f);break;case 1:break;default:g=new bXc(0,b,IEe);for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),39);j=new WWc(g,h);pQb(j,(q$c(),WZc),(Geb(),true));Mub(g.a.a,j);Mub(g.d,j);Mub(h.b,j);pQb(h,n$c,false)}pQb(g,(q$c(),n$c),(Geb(),true));pQb(g,WZc,true);Mub(b.b,g);}c.Vg()} -function AQb(a){var b,c,d,e,f,g;Umb(a.a,new GQb);for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),225);d=ojd(ajd(RD(a.b,68).c),RD(b.b,68).c);if(wQb){g=RD(a.b,68).b;f=RD(b.b,68).b;if($wnd.Math.abs(d.a)>=$wnd.Math.abs(d.b)){d.b=0;f.d+f.a>g.d&&f.d<g.d+g.a&&kjd(d,$wnd.Math.max(g.c-(f.c+f.b),f.c-(g.c+g.b)))}else{d.a=0;f.c+f.b>g.c&&f.c<g.c+g.b&&kjd(d,$wnd.Math.max(g.d-(f.d+f.a),f.d-(g.d+g.a)))}}else{kjd(d,SQb(RD(a.b,68),RD(b.b,68)))}e=$wnd.Math.sqrt(d.a*d.a+d.b*d.b);e=CQb(xQb,b,e,d);kjd(d,e);RQb(RD(b.b,68),d);Umb(b.a,new IQb(d));RD(xQb.b,68);BQb(xQb,yQb,b)}} -function tOc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;a.f=new BIb;j=0;e=0;for(g=new Anb(a.e.b);g.a<g.c.c.length;){f=RD(ynb(g),30);for(i=new Anb(f.a);i.a<i.c.c.length;){h=RD(ynb(i),10);h.p=j++;for(d=new is(Mr(a3b(h).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);c.p=e++}b=BOc(h);for(m=new Anb(h.j);m.a<m.c.c.length;){l=RD(ynb(m),12);if(b){o=l.a.b;if(o!=$wnd.Math.floor(o)){k=o-Xdb(Hdb($wnd.Math.round(o)));l.a.b-=k}}n=l.n.b+l.a.b;if(n!=$wnd.Math.floor(n)){k=n-Xdb(Hdb($wnd.Math.round(n)));l.n.b-=k}}}}a.g=j;a.b=e;a.i=$C(XY,rve,412,j,0,1);a.c=$C(WY,rve,655,e,0,1);a.d.a.$b()} -function sLd(a){var b,c,d,e,f,g,h,i,j;if(a.Pj()){i=a.Qj();if(a.i>0){b=new zNd(a.i,a.g);c=a.i;f=c<100?null:new gLd(c);if(a.Tj()){for(d=0;d<a.i;++d){g=a.g[d];f=a.Vj(g,f)}}OHd(a);e=c==1?a.Ij(4,QHd(b,0),null,0,i):a.Ij(6,b,null,-1,i);if(a.Mj()){for(d=new yMd(b);d.e!=d.i.gc();){f=a.Oj(xMd(d),f)}if(!f){a.Jj(e)}else{f.nj(e);f.oj()}}else{if(!f){a.Jj(e)}else{f.nj(e);f.oj()}}}else{OHd(a);a.Jj(a.Ij(6,(yob(),vob),null,-1,i))}}else if(a.Mj()){if(a.i>0){h=a.g;j=a.i;OHd(a);f=j<100?null:new gLd(j);for(d=0;d<j;++d){g=h[d];f=a.Oj(g,f)}!!f&&f.oj()}else{OHd(a)}}else{OHd(a)}} -function xVc(a,b,c){var d,e,f,g,h,i,j,k,l,m;rVc(this);c==(dVc(),bVc)?Ysb(this.r,a):Ysb(this.w,a);k=oxe;j=pxe;for(g=b.a.ec().Kc();g.Ob();){e=RD(g.Pb(),42);h=RD(e.a,464);d=RD(e.b,18);i=d.c;i==a&&(i=d.d);h==bVc?Ysb(this.r,i):Ysb(this.w,i);m=(qpd(),hpd).Hc(i.j)?Kfb(UD(mQb(i,(Ywc(),Swc)))):xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).b;k=$wnd.Math.min(k,m);j=$wnd.Math.max(j,m)}l=(qpd(),hpd).Hc(a.j)?Kfb(UD(mQb(a,(Ywc(),Swc)))):xjd(cD(WC(l3,1),Nve,8,0,[a.i.n,a.n,a.a])).b;vVc(this,l,k,j);for(f=b.a.ec().Kc();f.Ob();){e=RD(f.Pb(),42);sVc(this,RD(e.b,18))}this.o=false} -function wD(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;c=a.l&8191;d=a.l>>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;i=b.l>>13|(b.m&15)<<9;j=b.m>>4&8191;k=b.m>>17|(b.h&255)<<5;l=(b.h&1048320)>>8;B=c*h;C=d*h;D=e*h;F=f*h;G=g*h;if(i!=0){C+=c*i;D+=d*i;F+=e*i;G+=f*i}if(j!=0){D+=c*j;F+=d*j;G+=e*j}if(k!=0){F+=c*k;G+=d*k}l!=0&&(G+=c*l);n=B&dxe;o=(C&511)<<13;m=n+o;q=B>>22;r=C>>9;s=(D&262143)<<4;t=(F&31)<<17;p=q+r+s+t;v=D>>18;w=F>>5;A=(G&4095)<<8;u=v+w+A;p+=m>>22;m&=dxe;u+=p>>22;p&=dxe;u&=exe;return hD(m,p,u)} -function Fac(a){var b,c,d,e,f,g,h;h=RD(Vmb(a.j,0),12);if(h.g.c.length!=0&&h.e.c.length!=0){throw Adb(new dgb('Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges.'))}if(h.g.c.length!=0){f=oxe;for(c=new Anb(h.g);c.a<c.c.c.length;){b=RD(ynb(c),18);g=b.d.i;d=RD(mQb(g,(yCc(),_Ac)),140);f=$wnd.Math.min(f,g.n.a-d.b)}return new cc(Qb(f))}if(h.e.c.length!=0){e=pxe;for(c=new Anb(h.e);c.a<c.c.c.length;){b=RD(ynb(c),18);g=b.c.i;d=RD(mQb(g,(yCc(),_Ac)),140);e=$wnd.Math.max(e,g.n.a+g.o.a+d.c)}return new cc(Qb(e))}return wb(),wb(),vb} -function cZd(a,b){var c,d,e,f,g,h,i;if(a.ol()){if(a.i>4){if(a.fk(b)){if(a.al()){e=RD(b,54);d=e.Eh();i=d==a.e&&(a.ml()?e.yh(e.Fh(),a.il())==a.jl():-1-e.Fh()==a.Lj());if(a.nl()&&!i&&!d&&!!e.Jh()){for(f=0;f<a.i;++f){c=a.pl(RD(a.g[f],58));if(dE(c)===dE(b)){return true}}}return i}else if(a.ml()&&!a.ll()){g=RD(b,58).Mh(Z5d(RD(a.Lk(),19)));if(dE(g)===dE(a.e)){return true}else if(g==null||!RD(g,58).Vh()){return false}}}else{return false}}h=PHd(a,b);if(a.nl()&&!h){for(f=0;f<a.i;++f){e=a.pl(RD(a.g[f],58));if(dE(e)===dE(b)){return true}}}return h}else{return PHd(a,b)}} -function bGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;c.Ug('Interactive cycle breaking',1);l=new bnb;for(n=new Anb(b.a);n.a<n.c.c.length;){m=RD(ynb(n),10);m.p=1;o=_2b(m).a;for(k=c3b(m,(BEc(),zEc)).Kc();k.Ob();){j=RD(k.Pb(),12);for(f=new Anb(j.g);f.a<f.c.c.length;){d=RD(ynb(f),18);p=d.d.i;if(p!=m){q=_2b(p).a;q<o&&(ZEb(l.c,d),true)}}}}for(g=new Anb(l);g.a<g.c.c.length;){d=RD(ynb(g),18);X0b(d,true)}l.c.length=0;for(i=new Anb(b.a);i.a<i.c.c.length;){h=RD(ynb(i),10);h.p>0&&aGc(a,h,l)}for(e=new Anb(l);e.a<e.c.c.length;){d=RD(ynb(e),18);X0b(d,true)}l.c.length=0;c.Vg()} -function mMc(a,b){var c,d,e,f,g,h,i,j,k;c=0;k=new bnb;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),12);$Lc(a.b,a.d[g.p]);k.c.length=0;switch(g.i.k.g){case 0:d=RD(mQb(g,(Ywc(),Iwc)),10);Umb(d.j,new XMc(k));break;case 1:Mvb(DDb(CDb(new SDb(null,new Swb(g.i.j,16)),new ZMc(g))),new aNc(k));break;case 3:e=RD(mQb(g,(Ywc(),Awc)),12);Rmb(k,new Ptd(e,sgb(g.e.c.length+g.g.c.length)));}for(j=new Anb(k);j.a<j.c.c.length;){i=RD(ynb(j),42);f=AMc(a,RD(i.a,12));if(f>a.d[g.p]){c+=ZLc(a.b,f)*RD(i.b,17).a;hmb(a.a,sgb(f))}}while(!nmb(a.a)){XLc(a.b,RD(smb(a.a),17).a)}}return c} -function x9b(a,b){var c,d,e,f,g,h,i,j,k,l;k=RD(mQb(a,(Ywc(),hwc)),64);d=RD(Vmb(a.j,0),12);k==(qpd(),Yod)?Q3b(d,npd):k==npd&&Q3b(d,Yod);if(RD(mQb(b,(yCc(),lBc)),181).Hc((Qpd(),Ppd))){i=Kfb(UD(mQb(a,_Bc)));j=Kfb(UD(mQb(a,aCc)));g=Kfb(UD(mQb(a,ZBc)));h=RD(mQb(b,EBc),21);if(h.Hc((Pod(),Lod))){c=j;l=a.o.a/2-d.n.a;for(f=new Anb(d.f);f.a<f.c.c.length;){e=RD(ynb(f),72);e.n.b=c;e.n.a=l-e.o.a/2;c+=e.o.b+g}}else if(h.Hc(Nod)){for(f=new Anb(d.f);f.a<f.c.c.length;){e=RD(ynb(f),72);e.n.a=i+a.o.a-d.n.a}}NJb(new PJb((i1b(),new t1b(b,false,false,new _1b))),new F1b(null,a,false))}} -function ykc(a,b){var c,d,e,f,g,h,i,j,k;if(b.c.length==0){return}yob();Ynb(b.c,b.c.length,null);e=new Anb(b);d=RD(ynb(e),154);while(e.a<e.c.c.length){c=RD(ynb(e),154);if(rGb(d.e.c,c.e.c)&&!(uGb(Mid(d.e).b,c.e.d)||uGb(Mid(c.e).b,d.e.d))){d=(Tmb(d.k,c.k),Tmb(d.b,c.b),Tmb(d.c,c.c),ye(d.i,c.i),Tmb(d.d,c.d),Tmb(d.j,c.j),f=$wnd.Math.min(d.e.c,c.e.c),g=$wnd.Math.min(d.e.d,c.e.d),h=$wnd.Math.max(d.e.c+d.e.b,c.e.c+c.e.b),i=h-f,j=$wnd.Math.max(d.e.d+d.e.a,c.e.d+c.e.a),k=j-g,Rid(d.e,f,g,i,k),$Gb(d.f,c.f),!d.a&&(d.a=c.a),Tmb(d.g,c.g),Rmb(d.g,c),d)}else{Bkc(a,d);d=c}}Bkc(a,d)} -function B0b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;i=new bnb;for(f=new Anb(b.a);f.a<f.c.c.length;){e=RD(ynb(f),10);for(h=new Anb(e.j);h.a<h.c.c.length;){g=RD(ynb(h),12);k=null;for(t=s2b(g.g),u=0,v=t.length;u<v;++u){s=t[u];if(!n2b(s.d.i,c)){r=w0b(a,b,c,s,s.c,(BEc(),zEc),k);r!=k&&(ZEb(i.c,r),true);r.c&&(k=r)}}j=null;for(o=s2b(g.e),p=0,q=o.length;p<q;++p){n=o[p];if(!n2b(n.c.i,c)){r=w0b(a,b,c,n,n.d,(BEc(),yEc),j);r!=j&&(ZEb(i.c,r),true);r.c&&(j=r)}}}}for(m=new Anb(i);m.a<m.c.c.length;){l=RD(ynb(m),452);Wmb(b.a,l.a,0)!=-1||Rmb(b.a,l.a);l.c&&(ZEb(d.c,l),true)}} -function hrd(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;l=new sjd(RD(Gxd(a,(hkd(),bkd)),8));l.a=$wnd.Math.max(l.a-c.b-c.c,0);l.b=$wnd.Math.max(l.b-c.d-c.a,0);e=UD(Gxd(a,Xjd));(e==null||(uFb(e),e)<=0)&&(e=1.3);h=new bnb;for(o=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));o.e!=o.i.gc();){n=RD(bMd(o),27);g=new Ard(n);ZEb(h.c,g)}m=RD(Gxd(a,Yjd),320);switch(m.g){case 3:q=erd(h,b,l.a,l.b,(j=d,uFb(e),e,j));break;case 1:q=drd(h,b,l.a,l.b,(k=d,uFb(e),e,k));break;default:q=frd(h,b,l.a,l.b,(i=d,uFb(e),e,i));}f=new zrd(q);p=ird(f,b,c,l.a,l.b,d,(uFb(e),e));Esd(a,p.a,p.b,false,true)} -function m2b(a,b,c,d){var e,f,g,h,i,j;h=a.j;if(h==(qpd(),opd)&&b!=(Bod(),zod)&&b!=(Bod(),Aod)){h=c2b(a,c);Q3b(a,h);!(!a.q?(yob(),yob(),wob):a.q)._b((yCc(),ABc))&&h!=opd&&(a.n.a!=0||a.n.b!=0)&&pQb(a,ABc,b2b(a,h))}if(b==(Bod(),xod)){j=0;switch(h.g){case 1:case 3:f=a.i.o.a;f>0&&(j=a.n.a/f);break;case 2:case 4:e=a.i.o.b;e>0&&(j=a.n.b/e);}pQb(a,(Ywc(),Jwc),j)}i=a.o;g=a.a;if(d){g.a=d.a;g.b=d.b;a.d=true}else if(b!=zod&&b!=Aod&&h!=opd){switch(h.g){case 1:g.a=i.a/2;break;case 2:g.a=i.a;g.b=i.b/2;break;case 3:g.a=i.a/2;g.b=i.b;break;case 4:g.b=i.b/2;}}else{g.a=i.a/2;g.b=i.b/2}} -function VJd(a){var b,c,d,e,f,g,h,i,j,k;if(a.Pj()){k=a.Ej();i=a.Qj();if(k>0){b=new $Hd(a.pj());c=k;f=c<100?null:new gLd(c);aJd(a,c,b.g);e=c==1?a.Ij(4,QHd(b,0),null,0,i):a.Ij(6,b,null,-1,i);if(a.Mj()){for(d=new dMd(b);d.e!=d.i.gc();){f=a.Oj(bMd(d),f)}if(!f){a.Jj(e)}else{f.nj(e);f.oj()}}else{if(!f){a.Jj(e)}else{f.nj(e);f.oj()}}}else{aJd(a,a.Ej(),a.Fj());a.Jj(a.Ij(6,(yob(),vob),null,-1,i))}}else if(a.Mj()){k=a.Ej();if(k>0){h=a.Fj();j=k;aJd(a,k,h);f=j<100?null:new gLd(j);for(d=0;d<j;++d){g=h[d];f=a.Oj(g,f)}!!f&&f.oj()}else{aJd(a,a.Ej(),a.Fj())}}else{aJd(a,a.Ej(),a.Fj())}} -function frd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;h=$C(iE,vxe,28,a.c.length,15,1);m=new pwb(new Qrd);iwb(m,a);j=0;p=new bnb;while(m.b.c.length!=0){g=RD(m.b.c.length==0?null:Vmb(m.b,0),163);if(j>1&&urd(g)*trd(g)/2>h[0]){f=0;while(f<p.c.length-1&&urd(g)*trd(g)/2>h[f]){++f}o=new Rkb(p,0,f+1);l=new zrd(o);k=urd(g)/trd(g);i=ird(l,b,new z3b,c,d,e,k);$id(hjd(l.e),i);zFb(lwb(m,l),Bxe);n=new Rkb(p,f+1,p.c.length);iwb(m,n);p.c.length=0;j=0;Pnb(h,h.length,0)}else{q=m.b.c.length==0?null:Vmb(m.b,0);q!=null&&owb(m,0);j>0&&(h[j]=h[j-1]);h[j]+=urd(g)*trd(g);++j;ZEb(p.c,g)}}return p} -function _nc(a,b){var c,d,e,f;c=b.b;f=new dnb(c.j);e=0;d=c.j;d.c.length=0;Nnc(RD($i(a.b,(qpd(),Yod),(joc(),ioc)),15),c);e=Onc(f,e,new Hoc,d);Nnc(RD($i(a.b,Yod,hoc),15),c);e=Onc(f,e,new Joc,d);Nnc(RD($i(a.b,Yod,goc),15),c);Nnc(RD($i(a.b,Xod,ioc),15),c);Nnc(RD($i(a.b,Xod,hoc),15),c);e=Onc(f,e,new Loc,d);Nnc(RD($i(a.b,Xod,goc),15),c);Nnc(RD($i(a.b,npd,ioc),15),c);e=Onc(f,e,new Noc,d);Nnc(RD($i(a.b,npd,hoc),15),c);e=Onc(f,e,new Poc,d);Nnc(RD($i(a.b,npd,goc),15),c);Nnc(RD($i(a.b,ppd,ioc),15),c);e=Onc(f,e,new toc,d);Nnc(RD($i(a.b,ppd,hoc),15),c);Nnc(RD($i(a.b,ppd,goc),15),c)} -function jJc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;for(h=new Anb(b);h.a<h.c.c.length;){f=RD(ynb(h),239);f.e=null;f.c=0}i=null;for(g=new Anb(b);g.a<g.c.c.length;){f=RD(ynb(g),239);l=f.d[0];if(c&&l.k!=(r3b(),p3b)){continue}for(n=RD(mQb(l,(Ywc(),qwc)),15).Kc();n.Ob();){m=RD(n.Pb(),10);if(!c||m.k==(r3b(),p3b)){(!f.e&&(f.e=new bnb),f.e).Fc(a.b[m.c.p][m.p]);++a.b[m.c.p][m.p].c}}if(!c&&l.k==(r3b(),p3b)){if(i){for(k=RD(Qc(a.d,i),21).Kc();k.Ob();){j=RD(k.Pb(),10);for(e=RD(Qc(a.d,l),21).Kc();e.Ob();){d=RD(e.Pb(),10);wJc(a.b[j.c.p][j.p]).Fc(a.b[d.c.p][d.p]);++a.b[d.c.p][d.p].c}}}i=l}}} -function iGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;c.Ug('Model order cycle breaking',1);a.a=0;a.b=0;n=new bnb;k=b.a.c.length;for(j=new Anb(b.a);j.a<j.c.c.length;){i=RD(ynb(j),10);nQb(i,(Ywc(),zwc))&&(k=$wnd.Math.max(k,RD(mQb(i,zwc),17).a+1))}for(p=new Anb(b.a);p.a<p.c.c.length;){o=RD(ynb(p),10);g=hGc(a,o,k);for(m=c3b(o,(BEc(),zEc)).Kc();m.Ob();){l=RD(m.Pb(),12);for(f=new Anb(l.g);f.a<f.c.c.length;){d=RD(ynb(f),18);q=d.d.i;h=hGc(a,q,k);h<g&&(ZEb(n.c,d),true)}}}for(e=new Anb(n);e.a<e.c.c.length;){d=RD(ynb(e),18);X0b(d,true);pQb(b,(Ywc(),awc),(Geb(),true))}n.c.length=0;c.Vg()} -function qUb(a,b,c){var d,e,f,g,h,i,j,k,l,m;g=b.d;h=c.d;while(g.a-h.a==0&&g.b-h.b==0){i=false;if(ZD(b,250)&&ZD(c,250)&&!i){j=RD(b,250).a;k=ojd(new sjd($Tb(j)),ZTb(j));d=2;e=new rjd(k.a/$wnd.Math.sqrt(k.a*k.a+k.b*k.b)*d,-k.b/$wnd.Math.sqrt(k.a*k.a+k.b*k.b)*d);$id(g,e);l=RD(c,250).a;m=ojd(new sjd($Tb(l)),ZTb(l));d=k==m?-2:2;f=new rjd(m.a/$wnd.Math.sqrt(m.a*m.a+m.b*m.b)*d,-(m.b/$wnd.Math.sqrt(m.a*m.a+m.b*m.b))*d);$id(g,f);i=true}else{g.a+=Kwb(a,26)*Kxe+Kwb(a,27)*Lxe-0.5;g.b+=Kwb(a,26)*Kxe+Kwb(a,27)*Lxe-0.5;h.a+=Kwb(a,26)*Kxe+Kwb(a,27)*Lxe-0.5;h.b+=Kwb(a,26)*Kxe+Kwb(a,27)*Lxe-0.5}}} -function NWb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;j=KWb(b);q=RD(mQb(b,(yCc(),oAc)),322);xgb(j,new UWb(q));r=RD(mQb(b,gAc),298);xgb(j,new WWb(r));p=0;k=new bnb;for(f=new Kmb(j);f.a!=f.b;){e=RD(Imb(f),36);cXb(a.c,e);m=RD(mQb(e,(Ywc(),Kwc)),15);p+=m.gc();d=m.Kc();Rmb(k,new Ptd(e,d))}c.Ug('Recursive hierarchical layout',p);o=0;n=RD(RD(Vmb(k,k.c.length-1),42).b,51);while(n.Ob()){for(i=new Anb(k);i.a<i.c.c.length;){h=RD(ynb(i),42);m=RD(h.b,51);g=RD(h.a,36);while(m.Ob()){l=RD(m.Pb(),47);if(ZD(l,514)){if(!g.e){l.Kf(g,c.eh(1));++o;break}else{break}}else{l.Kf(g,c.eh(1));++o}}}}c.Vg()} -function Cec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;b.Ug('Layer size calculation',1);k=oxe;j=pxe;e=false;for(h=new Anb(a.b);h.a<h.c.c.length;){g=RD(ynb(h),30);i=g.c;i.a=0;i.b=0;if(g.a.c.length==0){continue}e=true;for(m=new Anb(g.a);m.a<m.c.c.length;){l=RD(ynb(m),10);o=l.o;n=l.d;i.a=$wnd.Math.max(i.a,o.a+n.b+n.c)}d=RD(Vmb(g.a,0),10);p=d.n.b-d.d.d;d.k==(r3b(),m3b)&&(p-=RD(mQb(a,(yCc(),eCc)),140).d);f=RD(Vmb(g.a,g.a.c.length-1),10);c=f.n.b+f.o.b+f.d.a;f.k==m3b&&(c+=RD(mQb(a,(yCc(),eCc)),140).a);i.b=c-p;k=$wnd.Math.min(k,p);j=$wnd.Math.max(j,c)}if(!e){k=0;j=0}a.f.b=j-k;a.c.b-=k;b.Vg()} -function p2b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;f=0;g=0;for(j=new Anb(a.a);j.a<j.c.c.length;){h=RD(ynb(j),10);f=$wnd.Math.max(f,h.d.b);g=$wnd.Math.max(g,h.d.c)}for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),10);c=RD(mQb(h,(yCc(),Rzc)),255);switch(c.g){case 1:o=0;break;case 2:o=1;break;case 5:o=0.5;break;default:d=0;l=0;for(n=new Anb(h.j);n.a<n.c.c.length;){m=RD(ynb(n),12);m.e.c.length==0||++d;m.g.c.length==0||++l}d+l==0?(o=0.5):(o=l/(d+l));}q=a.c;k=h.o.a;r=(q.a-k)*o;o>0.5?(r-=g*2*(o-0.5)):o<0.5&&(r+=f*2*(0.5-o));e=h.d.b;r<e&&(r=e);p=h.d.c;r>q.a-p-k&&(r=q.a-p-k);h.n.a=b+r}} -function jec(a){var b,c,d,e,f;d=RD(mQb(a,(yCc(),UAc)),171);if(d==(cxc(),$wc)){for(c=new is(Mr(Z2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(!lec(b)){throw Adb(new Jed(nBe+X2b(a)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. "+'FIRST_SEPARATE nodes must not have incoming edges.'))}}}else if(d==axc){for(f=new is(Mr(a3b(a).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(!lec(e)){throw Adb(new Jed(nBe+X2b(a)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. "+'LAST_SEPARATE nodes must not have outgoing edges.'))}}}} -function Qed(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(a.e&&a.c.c<a.f){throw Adb(new dgb('Expected '+a.f+' phases to be configured; '+'only found '+a.c.c))}k=RD(mfb(a.g),9);n=ev(a.f);for(f=k,h=0,j=f.length;h<j;++h){d=f[h];l=RD(Med(a,d.g),188);l?Rmb(n,RD(Ted(a,l),106)):(n.c.push(null),undefined,true)}o=new ufd;FDb(CDb(GDb(CDb(new SDb(null,new Swb(n,16)),new Zed),new _ed(b)),new bfd),new dfd(o));ofd(o,a.a);c=new bnb;for(e=k,g=0,i=e.length;g<i;++g){d=e[g];Tmb(c,Ued(a,Ux(RD(Med(o,d.g),20))));m=RD(Vmb(n,d.g),106);!!m&&(ZEb(c.c,m),true)}Tmb(c,Ued(a,Ux(RD(Med(o,k[k.length-1].g+1),20))));return c} -function Frc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;m=new bnb;e=new bnb;p=null;for(h=b.Kc();h.Ob();){g=RD(h.Pb(),17);f=new Trc(g.a);ZEb(e.c,f);if(p){f.d=p;p.e=f}p=f}t=Erc(a);for(k=0;k<e.c.length;++k){n=null;q=Src((tFb(0,e.c.length),RD(e.c[0],661)));c=null;d=oxe;for(l=1;l<a.b.c.length;++l){r=q?$wnd.Math.abs(q.b-l):$wnd.Math.abs(l-n.b)+1;o=n?$wnd.Math.abs(l-n.b):r+1;if(o<r){j=n;i=o}else{j=q;i=r}s=(u=Kfb(UD(mQb(a,(yCc(),sCc)))),t[l]+$wnd.Math.pow(i,u));if(s<d){d=s;c=j;c.c=l}if(!!q&&l==q.b){n=q;q=Nrc(q)}}if(c){Rmb(m,sgb(c.c));c.a=true;Orc(c)}}yob();Ynb(m.c,m.c.length,null);return m} -function iD(a,b,c){var d,e,f,g,h,i;if(b.l==0&&b.m==0&&b.h==0){throw Adb(new teb('divide by zero'))}if(a.l==0&&a.m==0&&a.h==0){c&&(eD=hD(0,0,0));return hD(0,0,0)}if(b.h==fxe&&b.m==0&&b.l==0){return jD(a,c)}i=false;if(b.h>>19!=0){b=xD(b);i=!i}g=pD(b);f=false;e=false;d=false;if(a.h==fxe&&a.m==0&&a.l==0){e=true;f=true;if(g==-1){a=gD((MD(),ID));d=true;i=!i}else{h=BD(a,g);i&&nD(h);c&&(eD=hD(0,0,0));return h}}else if(a.h>>19!=0){f=true;a=xD(a);d=true;i=!i}if(g!=-1){return kD(a,g,i,f,c)}if(uD(a,b)<0){c&&(f?(eD=xD(a)):(eD=hD(a.l,a.m,a.h)));return hD(0,0,0)}return lD(d?a:hD(a.l,a.m,a.h),b,i,f,e,c)} -function Bjb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.e;i=b.e;if(g==0){return b}if(i==0){return a}f=a.d;h=b.d;if(f+h==2){c=Cdb(a.a[0],yxe);d=Cdb(b.a[0],yxe);if(g==i){k=Bdb(c,d);o=Ydb(k);n=Ydb(Udb(k,32));return n==0?new ajb(g,o):new cjb(g,2,cD(WC(kE,1),Pwe,28,15,[o,n]))}return Pib(),Jdb(g<0?Vdb(d,c):Vdb(c,d),0)?jjb(g<0?Vdb(d,c):Vdb(c,d)):Xib(jjb(Odb(g<0?Vdb(d,c):Vdb(c,d))))}else if(g==i){m=g;l=f>=h?Cjb(a.a,f,b.a,h):Cjb(b.a,h,a.a,f)}else{e=f!=h?f>h?1:-1:Ejb(a.a,b.a,f);if(e==0){return Pib(),Oib}if(e==1){m=g;l=Hjb(a.a,f,b.a,h)}else{m=i;l=Hjb(b.a,h,a.a,f)}}j=new cjb(m,l.length,l);Rib(j);return j} -function KUc(a,b){var c,d,e,f,g,h,i;if(a.g>b.f||b.g>a.f){return}c=0;d=0;for(g=a.w.a.ec().Kc();g.Ob();){e=RD(g.Pb(),12);AVc(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&++c}for(h=a.r.a.ec().Kc();h.Ob();){e=RD(h.Pb(),12);AVc(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&--c}for(i=b.w.a.ec().Kc();i.Ob();){e=RD(i.Pb(),12);AVc(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&++d}for(f=b.r.a.ec().Kc();f.Ob();){e=RD(f.Pb(),12);AVc(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&--d}if(c<d){new _Uc(a,b,d-c)}else if(d<c){new _Uc(b,a,c-d)}else{new _Uc(b,a,0);new _Uc(a,b,0)}} -function ASb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=b.c;e=zRb(a.e);l=ijd(njd(ajd(yRb(a.e)),a.d*a.a,a.c*a.b),-0.5);c=e.a-l.a;d=e.b-l.b;g=b.a;c=g.c-c;d=g.d-d;for(i=new Anb(j);i.a<i.c.c.length;){h=RD(ynb(i),407);m=h.b;n=c+m.a;q=d+m.b;o=eE(n/a.a);r=eE(q/a.b);f=h.a;switch(f.g){case 0:k=(IPb(),FPb);break;case 1:k=(IPb(),EPb);break;case 2:k=(IPb(),GPb);break;default:k=(IPb(),HPb);}if(f.a){s=eE((q+h.c)/a.b);Rmb(a.f,new lRb(k,sgb(r),sgb(s)));f==(IRb(),HRb)?eQb(a,0,r,o,s):eQb(a,o,r,a.d-1,s)}else{p=eE((n+h.c)/a.a);Rmb(a.f,new lRb(k,sgb(o),sgb(p)));f==(IRb(),FRb)?eQb(a,o,0,p,r):eQb(a,o,r,p,a.c-1)}}} -function Q$d(a){var b,c,d,e,f,g,h,i,j,k;b=new Z$d;c=new Z$d;j=lhb(pKe,(e=bAd(a.b,qKe),!e?null:WD($Nd((!e.b&&(e.b=new SVd((JTd(),FTd),C8,e)),e.b),rKe))));for(i=0;i<a.i;++i){h=RD(a.g[i],179);if(ZD(h,102)){g=RD(h,19);(g.Bb&QHe)!=0?((g.Bb&Ove)==0||!j&&(f=bAd(g,qKe),(!f?null:WD($Nd((!f.b&&(f.b=new SVd((JTd(),FTd),C8,f)),f.b),FIe)))==null))&&WGd(b,g):(k=Z5d(g),!!k&&(k.Bb&QHe)!=0||((g.Bb&Ove)==0||!j&&(d=bAd(g,qKe),(!d?null:WD($Nd((!d.b&&(d.b=new SVd((JTd(),FTd),C8,d)),d.b),FIe)))==null))&&WGd(c,g))}else{nke();if(RD(h,69).xk()){if(!h.sk()){WGd(b,h);WGd(c,h)}}}}VHd(b);VHd(c);a.a=RD(b.g,254);RD(c.g,254)} -function Eee(a,b,c){var d,e,f,g,h,i,j,k,l;if(BYd(b,c)>=0){return c}switch(yfe(Qee(a,c))){case 2:{if(lhb('',Oee(a,c.qk()).xe())){i=Bfe(Qee(a,c));h=Afe(Qee(a,c));k=Ree(a,b,i,h);if(k){return k}e=Fee(a,b);for(g=0,l=e.gc();g<l;++g){k=RD(e.Xb(g),179);if(Xee(Cfe(Qee(a,k)),i)){return k}}}return null}case 4:{if(lhb('',Oee(a,c.qk()).xe())){for(d=c;d;d=xfe(Qee(a,d))){j=Bfe(Qee(a,d));h=Afe(Qee(a,d));k=See(a,b,j,h);if(k){return k}}i=Bfe(Qee(a,c));if(lhb(dLe,i)){return Tee(a,b)}else{f=Gee(a,b);for(g=0,l=f.gc();g<l;++g){k=RD(f.Xb(g),179);if(Xee(Cfe(Qee(a,k)),i)){return k}}}}return null}default:{return null}}} -function Tfe(a,b,c){var d,e,f,g,h,i,j,k;if(c.gc()==0){return false}h=(nke(),RD(b,69).xk());f=h?c:new ZHd(c.gc());if(qke(a.e,b)){if(b.Si()){for(j=c.Kc();j.Ob();){i=j.Pb();if(!dge(a,b,i,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)){e=oke(b,i);f.Hc(e)||f.Fc(e)}}}else if(!h){for(j=c.Kc();j.Ob();){i=j.Pb();e=oke(b,i);f.Fc(e)}}}else{if(c.gc()>1){throw Adb(new agb(gLe))}k=pke(a.e.Dh(),b);d=RD(a.g,124);for(g=0;g<a.i;++g){e=d[g];if(k.am(e.Lk())){if(c.Hc(h?e:e.md())){return false}else{for(j=c.Kc();j.Ob();){i=j.Pb();RD(eHd(a,g,h?RD(i,76):oke(b,i)),76)}return true}}}if(!h){e=oke(b,c.Kc().Pb());f.Fc(e)}}return YGd(a,f)} -function QQc(a,b){var c,d,e,f,g,h,i,j,k;k=new Yub;for(h=(j=(new glb(a.c)).a.vc().Kc(),new llb(j));h.a.Ob();){f=(e=RD(h.a.Pb(),44),RD(e.md(),466));f.b==0&&(Pub(k,f,k.c.b,k.c),true)}while(k.b!=0){f=RD(k.b==0?null:(sFb(k.b!=0),Wub(k,k.a.a)),466);f.a==null&&(f.a=0);for(d=new Anb(f.d);d.a<d.c.c.length;){c=RD(ynb(d),663);c.b.a==null?(c.b.a=Kfb(f.a)+c.a):b.o==(EQc(),CQc)?(c.b.a=$wnd.Math.min(Kfb(c.b.a),Kfb(f.a)+c.a)):(c.b.a=$wnd.Math.max(Kfb(c.b.a),Kfb(f.a)+c.a));--c.b.b;c.b.b==0&&Mub(k,c.b)}}for(g=(i=(new glb(a.c)).a.vc().Kc(),new llb(i));g.a.Ob();){f=(e=RD(g.a.Pb(),44),RD(e.md(),466));b.i[f.c.p]=f.a}} -function kSc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;k=c+b.c.c.a;for(n=new Anb(b.j);n.a<n.c.c.length;){m=RD(ynb(n),12);e=xjd(cD(WC(l3,1),Nve,8,0,[m.i.n,m.n,m.a]));if(b.k==(r3b(),q3b)){h=RD(mQb(m,(Ywc(),Awc)),12);e.a=xjd(cD(WC(l3,1),Nve,8,0,[h.i.n,h.n,h.a])).a;b.n.a=e.a}g=new rjd(0,e.b);if(m.j==(qpd(),Xod)){g.a=k}else if(m.j==ppd){g.a=c}else{continue}o=$wnd.Math.abs(e.a-g.a);if(o<=d&&!hSc(b)){continue}f=m.g.c.length+m.e.c.length>1;for(j=new l4b(m.b);xnb(j.a)||xnb(j.b);){i=RD(xnb(j.a)?ynb(j.a):ynb(j.b),18);l=i.c==m?i.d:i.c;$wnd.Math.abs(xjd(cD(WC(l3,1),Nve,8,0,[l.i.n,l.n,l.a])).b-g.b)>1&&eSc(a,i,g,f,m)}}} -function vUc(a){var b,c,d,e,f,g;e=new Jkb(a.e,0);d=new Jkb(a.a,0);if(a.d){for(c=0;c<a.b;c++){sFb(e.b<e.d.gc());e.d.Xb(e.c=e.b++)}}else{for(c=0;c<a.b-1;c++){sFb(e.b<e.d.gc());e.d.Xb(e.c=e.b++);Ckb(e)}}b=Kfb((sFb(e.b<e.d.gc()),UD(e.d.Xb(e.c=e.b++))));while(a.f-b>AEe){f=b;g=0;while($wnd.Math.abs(b-f)<AEe){++g;b=Kfb((sFb(e.b<e.d.gc()),UD(e.d.Xb(e.c=e.b++))));sFb(d.b<d.d.gc());d.d.Xb(d.c=d.b++)}if(g<a.b){sFb(e.b>0);e.a.Xb(e.c=--e.b);uUc(a,a.b-g,f,d,e);sFb(e.b<e.d.gc());e.d.Xb(e.c=e.b++)}sFb(d.b>0);d.a.Xb(d.c=--d.b)}if(!a.d){for(c=0;c<a.b-1;c++){sFb(e.b<e.d.gc());e.d.Xb(e.c=e.b++);Ckb(e)}}a.d=true;a.c=true} -function nme(){nme=geb;Rle=(Qle(),Ple).b;Ule=RD(QHd(xYd(Ple.b),0),35);Sle=RD(QHd(xYd(Ple.b),1),35);Tle=RD(QHd(xYd(Ple.b),2),35);cme=Ple.bb;RD(QHd(xYd(Ple.bb),0),35);RD(QHd(xYd(Ple.bb),1),35);eme=Ple.fb;fme=RD(QHd(xYd(Ple.fb),0),35);RD(QHd(xYd(Ple.fb),1),35);RD(QHd(xYd(Ple.fb),2),19);hme=Ple.qb;kme=RD(QHd(xYd(Ple.qb),0),35);RD(QHd(xYd(Ple.qb),1),19);RD(QHd(xYd(Ple.qb),2),19);ime=RD(QHd(xYd(Ple.qb),3),35);jme=RD(QHd(xYd(Ple.qb),4),35);mme=RD(QHd(xYd(Ple.qb),6),35);lme=RD(QHd(xYd(Ple.qb),5),19);Vle=Ple.j;Wle=Ple.k;Xle=Ple.q;Yle=Ple.w;Zle=Ple.B;$le=Ple.A;_le=Ple.C;ame=Ple.D;bme=Ple._;dme=Ple.cb;gme=Ple.hb} -function yIc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.c=0;a.b=0;d=2*b.c.a.c.length+1;o:for(l=c.Kc();l.Ob();){k=RD(l.Pb(),12);h=k.j==(qpd(),Yod)||k.j==npd;n=0;if(h){m=RD(mQb(k,(Ywc(),Iwc)),10);if(!m){continue}n+=tIc(a,d,k,m)}else{for(j=new Anb(k.g);j.a<j.c.c.length;){i=RD(ynb(j),18);e=i.d;if(e.i.c==b.c){Rmb(a.a,k);continue o}else{n+=a.g[e.p]}}for(g=new Anb(k.e);g.a<g.c.c.length;){f=RD(ynb(g),18);e=f.c;if(e.i.c==b.c){Rmb(a.a,k);continue o}else{n-=a.g[e.p]}}}if(k.e.c.length+k.g.c.length>0){a.f[k.p]=n/(k.e.c.length+k.g.c.length);a.c=$wnd.Math.min(a.c,a.f[k.p]);a.b=$wnd.Math.max(a.b,a.f[k.p])}else h&&(a.f[k.p]=n)}} -function xne(a){a.b=null;a.bb=null;a.fb=null;a.qb=null;a.a=null;a.c=null;a.d=null;a.e=null;a.f=null;a.n=null;a.M=null;a.L=null;a.Q=null;a.R=null;a.K=null;a.db=null;a.eb=null;a.g=null;a.i=null;a.j=null;a.k=null;a.gb=null;a.o=null;a.p=null;a.q=null;a.r=null;a.$=null;a.ib=null;a.S=null;a.T=null;a.t=null;a.s=null;a.u=null;a.v=null;a.w=null;a.B=null;a.A=null;a.C=null;a.D=null;a.F=null;a.G=null;a.H=null;a.I=null;a.J=null;a.P=null;a.Z=null;a.U=null;a.V=null;a.W=null;a.X=null;a.Y=null;a._=null;a.ab=null;a.cb=null;a.hb=null;a.nb=null;a.lb=null;a.mb=null;a.ob=null;a.pb=null;a.jb=null;a.kb=null;a.N=false;a.O=false} -function C8b(a,b,c){var d,e,f,g;c.Ug('Graph transformation ('+a.a+')',1);g=bv(b.a);for(f=new Anb(b.b);f.a<f.c.c.length;){e=RD(ynb(f),30);Tmb(g,e.a)}d=RD(mQb(b,(yCc(),sAc)),428);if(d==($tc(),Ytc)){switch(RD(mQb(b,rAc),88).g){case 2:q8b(b,g);break;case 3:G8b(b,g);break;case 4:if(a.a==(P8b(),O8b)){G8b(b,g);r8b(b,g)}else{r8b(b,g);G8b(b,g)}}}else{if(a.a==(P8b(),O8b)){switch(RD(mQb(b,rAc),88).g){case 2:q8b(b,g);r8b(b,g);break;case 3:G8b(b,g);q8b(b,g);break;case 4:q8b(b,g);G8b(b,g);}}else{switch(RD(mQb(b,rAc),88).g){case 2:q8b(b,g);r8b(b,g);break;case 3:q8b(b,g);G8b(b,g);break;case 4:G8b(b,g);q8b(b,g);}}}c.Vg()} -function AXb(a){var b,c,d,e,f,g,h,i;for(f=new Anb(a.a.b);f.a<f.c.c.length;){e=RD(ynb(f),86);e.b.c=e.g.c;e.b.d=e.g.d}i=new rjd(oxe,oxe);b=new rjd(pxe,pxe);for(d=new Anb(a.a.b);d.a<d.c.c.length;){c=RD(ynb(d),86);i.a=$wnd.Math.min(i.a,c.g.c);i.b=$wnd.Math.min(i.b,c.g.d);b.a=$wnd.Math.max(b.a,c.g.c+c.g.b);b.b=$wnd.Math.max(b.b,c.g.d+c.g.a)}for(h=Uc(a.c).a.nc();h.Ob();){g=RD(h.Pb(),42);c=RD(g.b,86);i.a=$wnd.Math.min(i.a,c.g.c);i.b=$wnd.Math.min(i.b,c.g.d);b.a=$wnd.Math.max(b.a,c.g.c+c.g.b);b.b=$wnd.Math.max(b.b,c.g.d+c.g.a)}a.d=fjd(new rjd(i.a,i.b));a.e=ojd(new rjd(b.a,b.b),i);a.a.a.c.length=0;a.a.b.c.length=0} -function LZb(a){CZb();var b,c,d,e,f,g,h;h=new EZb;for(c=new Anb(a);c.a<c.c.c.length;){b=RD(ynb(c),148);(!h.b||b.c>=h.b.c)&&(h.b=b);if(!h.c||b.c<=h.c.c){h.d=h.c;h.c=b}(!h.e||b.d>=h.e.d)&&(h.e=b);(!h.f||b.d<=h.f.d)&&(h.f=b)}d=new PZb((nZb(),jZb));t$b(a,AZb,new mob(cD(WC(wQ,1),rve,382,0,[d])));g=new PZb(mZb);t$b(a,zZb,new mob(cD(WC(wQ,1),rve,382,0,[g])));e=new PZb(kZb);t$b(a,yZb,new mob(cD(WC(wQ,1),rve,382,0,[e])));f=new PZb(lZb);t$b(a,xZb,new mob(cD(WC(wQ,1),rve,382,0,[f])));FZb(d.c,jZb);FZb(e.c,kZb);FZb(f.c,lZb);FZb(g.c,mZb);h.a.c.length=0;Tmb(h.a,d.c);Tmb(h.a,hv(e.c));Tmb(h.a,f.c);Tmb(h.a,hv(g.c));return h} -function n9c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;b.Ug(bGe,1);n=Kfb(UD(Gxd(a,(X6c(),W6c))));g=Kfb(UD(Gxd(a,(X7c(),Q7c))));h=RD(Gxd(a,N7c),107);Bad((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));k=U8c((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a),n,g);!a.a&&(a.a=new C5d(J4,a,10,11));for(j=new Anb(k);j.a<j.c.c.length;){i=RD(ynb(j),186);for(e=new Anb(i.a);e.a<e.c.c.length;){d=RD(ynb(e),172);m=new had(d.s,d.t,Kfb(UD(Gxd(a,Q7c))));aad(m,d);Rmb(i.d,m)}}l=zad(k,g);o=$wnd.Math.max(l.a,Kfb(UD(Gxd(a,U6c)))-(h.b+h.c));f=$wnd.Math.max(l.b,Kfb(UD(Gxd(a,R6c)))-(h.d+h.a));c=f-l.b;Ixd(a,M6c,c);Ixd(a,O6c,o);Ixd(a,N6c,f+c);Ixd(a,V6c,k);b.Vg()} -function A9b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;j=new Iub;k=new Iub;o=new Iub;p=new Iub;i=Kfb(UD(mQb(b,(yCc(),bCc))));f=Kfb(UD(mQb(b,TBc)));for(h=new Anb(c);h.a<h.c.c.length;){g=RD(ynb(h),10);l=RD(mQb(g,(Ywc(),hwc)),64);if(l==(qpd(),Yod)){k.a.zc(g,k);for(e=new is(Mr(Z2b(g).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);Ysb(j,d.c.i)}}else if(l==npd){p.a.zc(g,p);for(e=new is(Mr(Z2b(g).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);Ysb(o,d.c.i)}}}if(j.a.gc()!=0){m=new TTc(2,f);n=STc(m,b,j,k,-i-b.c.b);if(n>0){a.a=i+(n-1)*f;b.c.b+=a.a;b.f.b+=a.a}}if(o.a.gc()!=0){m=new TTc(1,f);n=STc(m,b,o,p,b.f.b+i-b.c.b);n>0&&(b.f.b+=i+(n-1)*f)}} -function osc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;k=Kfb(UD(mQb(a,(yCc(),WBc))));d=Kfb(UD(mQb(a,nCc)));m=new dtd;pQb(m,WBc,k+d);j=b;r=j.d;p=j.c.i;s=j.d.i;q=Q4b(p.c);t=Q4b(s.c);e=new bnb;for(l=q;l<=t;l++){h=new j3b(a);h3b(h,(r3b(),o3b));pQb(h,(Ywc(),Awc),j);pQb(h,BBc,(Bod(),wod));pQb(h,YBc,m);n=RD(Vmb(a.b,l),30);l==q?f3b(h,n.a.c.length-c,n):g3b(h,n);u=Kfb(UD(mQb(j,FAc)));if(u<0){u=0;pQb(j,FAc,u)}h.o.b=u;o=$wnd.Math.floor(u/2);g=new R3b;Q3b(g,(qpd(),ppd));P3b(g,h);g.n.b=o;i=new R3b;Q3b(i,Xod);P3b(i,h);i.n.b=o;Z0b(j,g);f=new a1b;kQb(f,j);pQb(f,RAc,null);Y0b(f,i);Z0b(f,r);psc(h,j,f);ZEb(e.c,f);j=f}return e} -function Hec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=RD(e3b(a,(qpd(),ppd)).Kc().Pb(),12).e;n=RD(e3b(a,Xod).Kc().Pb(),12).g;h=i.c.length;t=K3b(RD(Vmb(a.j,0),12));while(h-->0){p=(tFb(0,i.c.length),RD(i.c[0],18));e=(tFb(0,n.c.length),RD(n.c[0],18));s=e.d.e;f=Wmb(s,e,0);$0b(p,e.d,f);Y0b(e,null);Z0b(e,null);o=p.a;b&&Mub(o,new sjd(t));for(d=Sub(e.a,0);d.b!=d.d.c;){c=RD(evb(d),8);Mub(o,new sjd(c))}r=p.b;for(m=new Anb(e.b);m.a<m.c.c.length;){l=RD(ynb(m),72);ZEb(r.c,l)}q=RD(mQb(p,(yCc(),RAc)),75);g=RD(mQb(e,RAc),75);if(g){if(!q){q=new Ejd;pQb(p,RAc,q)}for(k=Sub(g,0);k.b!=k.d.c;){j=RD(evb(k),8);Mub(q,new sjd(j))}}}} -function $Qc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;p=b.b.c.length;if(p<3){return}n=$C(kE,Pwe,28,p,15,1);l=0;for(k=new Anb(b.b);k.a<k.c.c.length;){j=RD(ynb(k),30);n[l++]=j.a.c.length}m=new Jkb(b.b,2);for(d=1;d<p-1;d++){c=(sFb(m.b<m.d.gc()),RD(m.d.Xb(m.c=m.b++),30));o=new Anb(c.a);f=0;h=0;for(i=0;i<n[d+1];i++){t=RD(ynb(o),10);if(i==n[d+1]-1||ZQc(a,t,d+1,d)){g=n[d]-1;ZQc(a,t,d+1,d)&&(g=a.c.e[RD(RD(RD(Vmb(a.c.b,t.p),15).Xb(0),42).a,10).p]);while(h<=i){s=RD(Vmb(c.a,h),10);if(!ZQc(a,s,d+1,d)){for(r=RD(Vmb(a.c.b,s.p),15).Kc();r.Ob();){q=RD(r.Pb(),42);e=a.c.e[RD(q.a,10).p];(e<f||e>g)&&Ysb(a.b,RD(q.b,18))}}++h}f=g}}}} -function zhd(b,c){var d;if(c==null||lhb(c,vve)){return null}if(c.length==0&&b.k!=(kid(),fid)){return null}switch(b.k.g){case 1:return mhb(c,FGe)?(Geb(),Feb):mhb(c,GGe)?(Geb(),Eeb):null;case 2:try{return sgb(Oeb(c,qwe,lve))}catch(a){a=zdb(a);if(ZD(a,130)){return null}else throw Adb(a)}case 4:try{return Neb(c)}catch(a){a=zdb(a);if(ZD(a,130)){return null}else throw Adb(a)}case 3:return c;case 5:uhd(b);return xhd(b,c);case 6:uhd(b);return yhd(b,b.a,c);case 7:try{d=whd(b);d.cg(c);return d}catch(a){a=zdb(a);if(ZD(a,33)){return null}else throw Adb(a)}default:throw Adb(new dgb('Invalid type set for this layout option.'));}} -function JKd(a){var b;switch(a.d){case 1:{if(a.Sj()){return a.o!=-2}break}case 2:{if(a.Sj()){return a.o==-2}break}case 3:case 5:case 4:case 6:case 7:{return a.o>-2}default:{return false}}b=a.Rj();switch(a.p){case 0:return b!=null&&Heb(TD(b))!=Pdb(a.k,0);case 1:return b!=null&&RD(b,222).a!=Ydb(a.k)<<24>>24;case 2:return b!=null&&RD(b,180).a!=(Ydb(a.k)&Bwe);case 6:return b!=null&&Pdb(RD(b,168).a,a.k);case 5:return b!=null&&RD(b,17).a!=Ydb(a.k);case 7:return b!=null&&RD(b,191).a!=Ydb(a.k)<<16>>16;case 3:return b!=null&&Kfb(UD(b))!=a.j;case 4:return b!=null&&RD(b,161).a!=a.j;default:return b==null?a.n!=null:!pb(b,a.n);}} -function N_d(a,b,c){var d,e,f,g;if(a.ol()&&a.nl()){g=O_d(a,RD(c,58));if(dE(g)!==dE(c)){a.xj(b);a.Dj(b,P_d(a,b,g));if(a.al()){f=(e=RD(c,54),a.ml()?a.kl()?e.Th(a.b,Z5d(RD(vYd(Uwd(a.b),a.Lj()),19)).n,RD(vYd(Uwd(a.b),a.Lj()).Hk(),29).kk(),null):e.Th(a.b,BYd(e.Dh(),Z5d(RD(vYd(Uwd(a.b),a.Lj()),19))),null,null):e.Th(a.b,-1-a.Lj(),null,null));!RD(g,54).Ph()&&(f=(d=RD(g,54),a.ml()?a.kl()?d.Rh(a.b,Z5d(RD(vYd(Uwd(a.b),a.Lj()),19)).n,RD(vYd(Uwd(a.b),a.Lj()).Hk(),29).kk(),f):d.Rh(a.b,BYd(d.Dh(),Z5d(RD(vYd(Uwd(a.b),a.Lj()),19))),null,f):d.Rh(a.b,-1-a.Lj(),null,f)));!!f&&f.oj()}Mvd(a.b)&&a.Jj(a.Ij(9,c,g,b,false));return g}}return c} -function iJb(a){var b,c,d,e,f,g,h,i,j,k;d=new bnb;for(g=new Anb(a.e.a);g.a<g.c.c.length;){e=RD(ynb(g),125);k=0;e.k.c.length=0;for(c=new Anb(CIb(e));c.a<c.c.c.length;){b=RD(ynb(c),218);if(b.f){Rmb(e.k,b);++k}}k==1&&(ZEb(d.c,e),true)}for(f=new Anb(d);f.a<f.c.c.length;){e=RD(ynb(f),125);while(e.k.c.length==1){j=RD(ynb(new Anb(e.k)),218);a.b[j.c]=j.g;h=j.d;i=j.e;for(c=new Anb(CIb(e));c.a<c.c.c.length;){b=RD(ynb(c),218);pb(b,j)||(b.f?h==b.d||i==b.e?(a.b[j.c]-=a.b[b.c]-b.g):(a.b[j.c]+=a.b[b.c]-b.g):e==h?b.d==e?(a.b[j.c]+=b.g):(a.b[j.c]-=b.g):b.d==e?(a.b[j.c]-=b.g):(a.b[j.c]+=b.g))}Ymb(h.k,j);Ymb(i.k,j);h==e?(e=j.e):(e=j.d)}}} -function vMb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=RD(Vrb(a.b,b),127);i=RD(RD(Qc(a.r,b),21),87);if(i.dc()){c.n.b=0;c.n.c=0;return}j=a.u.Hc((Pod(),Lod));g=0;h=i.Kc();k=null;l=0;m=0;while(h.Ob()){d=RD(h.Pb(),117);e=Kfb(UD(d.b.of((tNb(),sNb))));f=d.b.Mf().a;a.A.Hc((Qpd(),Ppd))&&BMb(a,b);if(!k){!!a.C&&a.C.b>0&&(g=$wnd.Math.max(g,zMb(a.C.b+d.d.b,e)))}else{n=m+k.d.c+a.w+d.d.b;g=$wnd.Math.max(g,(Zy(),bz(Tye),$wnd.Math.abs(l-e)<=Tye||l==e||isNaN(l)&&isNaN(e)?0:n/(e-l)))}k=d;l=e;m=f}if(!!a.C&&a.C.c>0){n=m+a.C.c;j&&(n+=k.d.c);g=$wnd.Math.max(g,(Zy(),bz(Tye),$wnd.Math.abs(l-1)<=Tye||l==1||isNaN(l)&&isNaN(1)?0:n/(1-l)))}c.n.b=0;c.a.a=g} -function ENb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=RD(Vrb(a.b,b),127);i=RD(RD(Qc(a.r,b),21),87);if(i.dc()){c.n.d=0;c.n.a=0;return}j=a.u.Hc((Pod(),Lod));g=0;a.A.Hc((Qpd(),Ppd))&&JNb(a,b);h=i.Kc();k=null;m=0;l=0;while(h.Ob()){d=RD(h.Pb(),117);f=Kfb(UD(d.b.of((tNb(),sNb))));e=d.b.Mf().b;if(!k){!!a.C&&a.C.d>0&&(g=$wnd.Math.max(g,zMb(a.C.d+d.d.d,f)))}else{n=l+k.d.a+a.w+d.d.d;g=$wnd.Math.max(g,(Zy(),bz(Tye),$wnd.Math.abs(m-f)<=Tye||m==f||isNaN(m)&&isNaN(f)?0:n/(f-m)))}k=d;m=f;l=e}if(!!a.C&&a.C.a>0){n=l+a.C.a;j&&(n+=k.d.a);g=$wnd.Math.max(g,(Zy(),bz(Tye),$wnd.Math.abs(m-1)<=Tye||m==1||isNaN(m)&&isNaN(1)?0:n/(1-m)))}c.n.d=0;c.a.b=g} -function L8c(a,b,c,d,e,f,g,h){var i,j,k,l,m,n,o,p,q,r;o=false;j=dad(c.q,b.f+b.b-c.q.f);n=d.f>b.b&&h;r=e-(c.q.e+j-g);l=(i=S9c(d,r,false),i.a);if(n&&l>d.f){return false}if(n){m=0;for(q=new Anb(b.d);q.a<q.c.c.length;){p=RD(ynb(q),315);m+=dad(p,d.f)+g}r=e-m}if(r<d.g){return false}k=f==a.c.length-1&&r>=(tFb(f,a.c.length),RD(a.c[f],186)).e;if(!n&&l>b.b&&!k){return false}if(k||n||l<=b.b){if(k&&l>b.b){c.d=l;Q9c(c,P9c(c,l))}else{ead(c.q,j);c.c=true}Q9c(d,e-(c.s+c.r));U9c(d,c.q.e+c.q.d,b.f);Cad(b,d);if(a.c.length>f){Fad((tFb(f,a.c.length),RD(a.c[f],186)),d);(tFb(f,a.c.length),RD(a.c[f],186)).a.c.length==0&&Xmb(a,f)}o=true}return o} -function zJc(a,b,c){var d,e,f,g,h,i;this.g=a;h=b.d.length;i=c.d.length;this.d=$C(jR,WAe,10,h+i,0,1);for(g=0;g<h;g++){this.d[g]=b.d[g]}for(f=0;f<i;f++){this.d[h+f]=c.d[f]}if(b.e){this.e=gv(b.e);this.e.Mc(c);if(c.e){for(e=c.e.Kc();e.Ob();){d=RD(e.Pb(),239);if(d==b){continue}else this.e.Hc(d)?--d.c:this.e.Fc(d)}}}else if(c.e){this.e=gv(c.e);this.e.Mc(b)}this.f=b.f+c.f;this.a=b.a+c.a;this.a>0?xJc(this,this.f/this.a):pJc(b.g,b.d[0]).a!=null&&pJc(c.g,c.d[0]).a!=null?xJc(this,(Kfb(pJc(b.g,b.d[0]).a)+Kfb(pJc(c.g,c.d[0]).a))/2):pJc(b.g,b.d[0]).a!=null?xJc(this,pJc(b.g,b.d[0]).a):pJc(c.g,c.d[0]).a!=null&&xJc(this,pJc(c.g,c.d[0]).a)} -function DXb(a,b){var c,d,e,f,g,h,i,j,k,l;a.a=new fYb(wsb(s3));for(d=new Anb(b.a);d.a<d.c.c.length;){c=RD(ynb(d),855);h=new iYb(cD(WC(bQ,1),rve,86,0,[]));Rmb(a.a.a,h);for(j=new Anb(c.d);j.a<j.c.c.length;){i=RD(ynb(j),116);k=new IXb(a,i);CXb(k,RD(mQb(c.c,(Ywc(),ewc)),21));if(!Ujb(a.g,c)){Zjb(a.g,c,new rjd(i.c,i.d));Zjb(a.f,c,k)}Rmb(a.a.b,k);gYb(h,k)}for(g=new Anb(c.b);g.a<g.c.c.length;){f=RD(ynb(g),602);k=new IXb(a,f.Df());Zjb(a.b,f,new Ptd(h,k));CXb(k,RD(mQb(c.c,(Ywc(),ewc)),21));if(f.Bf()){l=new JXb(a,f.Bf(),1);CXb(l,RD(mQb(c.c,ewc),21));e=new iYb(cD(WC(bQ,1),rve,86,0,[]));gYb(e,l);Rc(a.c,f.Af(),new Ptd(h,l))}}}return a.a} -function gFc(a){var b;this.a=a;b=(r3b(),cD(WC(hR,1),jwe,273,0,[p3b,o3b,m3b,q3b,n3b,l3b])).length;this.b=YC(V5,[Nve,kEe],[601,149],0,[b,b],2);this.c=YC(V5,[Nve,kEe],[601,149],0,[b,b],2);fFc(this,p3b,(yCc(),bCc),cCc);dFc(this,p3b,o3b,WBc,XBc);cFc(this,p3b,q3b,WBc);cFc(this,p3b,m3b,WBc);dFc(this,p3b,n3b,bCc,cCc);fFc(this,o3b,TBc,UBc);cFc(this,o3b,q3b,TBc);cFc(this,o3b,m3b,TBc);dFc(this,o3b,n3b,WBc,XBc);eFc(this,q3b,TBc);cFc(this,q3b,m3b,TBc);cFc(this,q3b,n3b,$Bc);eFc(this,m3b,fCc);dFc(this,m3b,n3b,aCc,_Bc);fFc(this,n3b,TBc,TBc);fFc(this,l3b,TBc,UBc);dFc(this,l3b,p3b,WBc,XBc);dFc(this,l3b,n3b,WBc,XBc);dFc(this,l3b,o3b,WBc,XBc)} -function zge(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;g=c.Lk();if(ZD(g,102)&&(RD(g,19).Bb&txe)!=0){m=RD(c.md(),54);p=Vvd(a.e,m);if(p!=m){k=oke(g,p);MHd(a,b,Tge(a,b,k));l=null;if(Mvd(a.e)){d=Eee((lke(),jke),a.e.Dh(),g);if(d!=vYd(a.e.Dh(),a.c)){q=pke(a.e.Dh(),g);h=0;f=RD(a.g,124);for(i=0;i<b;++i){e=f[i];q.am(e.Lk())&&++h}l=new lle(a.e,9,d,m,p,h,false);l.nj(new P3d(a.e,9,a.c,c,k,b,false))}}o=RD(g,19);n=Z5d(o);if(n){l=m.Th(a.e,BYd(m.Dh(),n),null,l);l=RD(p,54).Rh(a.e,BYd(p.Dh(),n),null,l)}else if((o.Bb&QHe)!=0){j=-1-BYd(a.e.Dh(),o);l=m.Th(a.e,j,null,null);!RD(p,54).Ph()&&(l=RD(p,54).Rh(a.e,j,null,l))}!!l&&l.oj();return k}}return c} -function SId(a){var b,c,d;wgd(LId,cD(WC(B2,1),rve,134,0,[new vmd]));c=new NB(a);for(d=0;d<c.a.length;++d){b=JB(c,d).te().a;lhb(b,'layered')?wgd(LId,cD(WC(B2,1),rve,134,0,[new Pzc])):lhb(b,'force')?wgd(LId,cD(WC(B2,1),rve,134,0,[new PUb])):lhb(b,'stress')?wgd(LId,cD(WC(B2,1),rve,134,0,[new RVb])):lhb(b,'mrtree')?wgd(LId,cD(WC(B2,1),rve,134,0,[new C$c])):lhb(b,'radial')?wgd(LId,cD(WC(B2,1),rve,134,0,[new E4c])):lhb(b,'disco')?wgd(LId,cD(WC(B2,1),rve,134,0,[new ZHb,new fSb])):lhb(b,'sporeOverlap')||lhb(b,'sporeCompaction')?wgd(LId,cD(WC(B2,1),rve,134,0,[new Lcd])):lhb(b,'rectpacking')&&wgd(LId,cD(WC(B2,1),rve,134,0,[new v7c]))}} -function r2b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;m=new sjd(a.o);r=b.a/m.a;h=b.b/m.b;p=b.a-m.a;f=b.b-m.b;if(c){e=dE(mQb(a,(yCc(),BBc)))===dE((Bod(),wod));for(o=new Anb(a.j);o.a<o.c.c.length;){n=RD(ynb(o),12);switch(n.j.g){case 1:e||(n.n.a*=r);break;case 2:n.n.a+=p;e||(n.n.b*=h);break;case 3:e||(n.n.a*=r);n.n.b+=f;break;case 4:e||(n.n.b*=h);}}}for(j=new Anb(a.b);j.a<j.c.c.length;){i=RD(ynb(j),72);k=i.n.a+i.o.a/2;l=i.n.b+i.o.b/2;q=k/m.a;g=l/m.b;if(q+g>=1){if(q-g>0&&l>=0){i.n.a+=p;i.n.b+=f*g}else if(q-g<0&&k>=0){i.n.a+=p*q;i.n.b+=f}}}a.o.a=b.a;a.o.b=b.b;pQb(a,(yCc(),lBc),(Qpd(),d=RD(mfb(H3),9),new Fsb(d,RD(WEb(d,d.length),9),0)))} -function ISd(a,b,c,d,e,f){var g;if(!(b==null||!mSd(b,ZRd,$Rd))){throw Adb(new agb('invalid scheme: '+b))}if(!a&&!(c!=null&&qhb(c,Fhb(35))==-1&&c.length>0&&(BFb(0,c.length),c.charCodeAt(0)!=47))){throw Adb(new agb('invalid opaquePart: '+c))}if(a&&!(b!=null&&tpb(eSd,b.toLowerCase()))&&!(c==null||!mSd(c,aSd,bSd))){throw Adb(new agb(NJe+c))}if(a&&b!=null&&tpb(eSd,b.toLowerCase())&&!ESd(c)){throw Adb(new agb(NJe+c))}if(!FSd(d)){throw Adb(new agb('invalid device: '+d))}if(!HSd(e)){g=e==null?'invalid segments: null':'invalid segment: '+tSd(e);throw Adb(new agb(g))}if(!(f==null||qhb(f,Fhb(35))==-1)){throw Adb(new agb('invalid query: '+f))}} -function WHc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;c.Ug('Network simplex layering',1);a.b=b;r=RD(mQb(b,(yCc(),gCc)),17).a*4;q=a.b.a;if(q.c.length<1){c.Vg();return}f=SHc(a,q);p=null;for(e=Sub(f,0);e.b!=e.d.c;){d=RD(evb(e),15);h=r*eE($wnd.Math.sqrt(d.gc()));g=VHc(d);lJb(yJb(AJb(zJb(CJb(g),h),p),true),c.eh(1));m=a.b.b;for(o=new Anb(g.a);o.a<o.c.c.length;){n=RD(ynb(o),125);while(m.c.length<=n.e){Qmb(m,m.c.length,new R4b(a.b))}k=RD(n.f,10);g3b(k,RD(Vmb(m,n.e),30))}if(f.b>1){p=$C(kE,Pwe,28,a.b.b.c.length,15,1);l=0;for(j=new Anb(a.b.b);j.a<j.c.c.length;){i=RD(ynb(j),30);p[l++]=i.a.c.length}}}q.c.length=0;a.a=null;a.b=null;a.c=null;c.Vg()} -function tMc(a,b){var c,d,e,f,g,h,i,j,k,l;k=new bnb;l=new wmb;f=null;e=0;for(d=0;d<b.length;++d){c=b[d];vMc(f,c)&&(e=oMc(a,l,k,cMc,e));nQb(c,(Ywc(),pwc))&&(f=RD(mQb(c,pwc),10));switch(c.k.g){case 0:for(i=lr(dr(b3b(c,(qpd(),Yod)),new eNc));xc(i);){g=RD(yc(i),12);a.d[g.p]=e++;ZEb(k.c,g)}e=oMc(a,l,k,cMc,e);for(j=lr(dr(b3b(c,npd),new eNc));xc(j);){g=RD(yc(j),12);a.d[g.p]=e++;ZEb(k.c,g)}break;case 3:if(!b3b(c,bMc).dc()){g=RD(b3b(c,bMc).Xb(0),12);a.d[g.p]=e++;ZEb(k.c,g)}b3b(c,cMc).dc()||hmb(l,c);break;case 1:for(h=b3b(c,(qpd(),ppd)).Kc();h.Ob();){g=RD(h.Pb(),12);a.d[g.p]=e++;ZEb(k.c,g)}b3b(c,Xod).Jc(new cNc(l,c));}}oMc(a,l,k,cMc,e);return k} -function vgd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(b==null||b.length==0){return null}f=RD(Xjb(a.f,b),23);if(!f){for(e=(n=(new glb(a.d)).a.vc().Kc(),new llb(n));e.a.Ob();){c=(g=RD(e.a.Pb(),44),RD(g.md(),23));h=c.f;o=b.length;if(lhb(h.substr(h.length-o,o),b)&&(b.length==h.length||ihb(h,h.length-b.length-1)==46)){if(f){return null}f=c}}if(!f){for(d=(m=(new glb(a.d)).a.vc().Kc(),new llb(m));d.a.Ob();){c=(g=RD(d.a.Pb(),44),RD(g.md(),23));l=c.g;if(l!=null){for(i=l,j=0,k=i.length;j<k;++j){h=i[j];o=b.length;if(lhb(h.substr(h.length-o,o),b)&&(b.length==h.length||ihb(h,h.length-b.length-1)==46)){if(f){return null}f=c}}}}}!!f&&$jb(a.f,b,f)}return f} -function IA(a,b){var c,d,e,f,g;c=new cib;g=false;for(f=0;f<b.length;f++){d=(BFb(f,b.length),b.charCodeAt(f));if(d==32){wA(a,c,0);c.a+=' ';wA(a,c,0);while(f+1<b.length&&(BFb(f+1,b.length),b.charCodeAt(f+1)==32)){++f}continue}if(g){if(d==39){if(f+1<b.length&&(BFb(f+1,b.length),b.charCodeAt(f+1)==39)){c.a+=String.fromCharCode(d);++f}else{g=false}}else{c.a+=String.fromCharCode(d)}continue}if(qhb('GyMLdkHmsSEcDahKzZv',Fhb(d))>0){wA(a,c,0);c.a+=String.fromCharCode(d);e=BA(b,f);wA(a,c,e);f+=e-1;continue}if(d==39){if(f+1<b.length&&(BFb(f+1,b.length),b.charCodeAt(f+1)==39)){c.a+="'";++f}else{g=true}}else{c.a+=String.fromCharCode(d)}}wA(a,c,0);CA(a)} -function tSc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;t=Yx(a);i=new bnb;f=a.c.length;j=f-1;k=f+1;while(t.a.gc()!=0){while(c.b!=0){r=(sFb(c.b!=0),RD(Wub(c,c.a.a),118));t.a.Bc(r)!=null;r.g=j--;wSc(r,b,c,d)}while(b.b!=0){s=(sFb(b.b!=0),RD(Wub(b,b.a.a),118));t.a.Bc(s)!=null;s.g=k++;wSc(s,b,c,d)}h=qwe;for(p=t.a.ec().Kc();p.Ob();){o=RD(p.Pb(),118);if(!d&&o.b>0&&o.a<=0){i.c.length=0;ZEb(i.c,o);break}n=o.i-o.d;if(n>=h){if(n>h){i.c.length=0;h=n}ZEb(i.c,o)}}if(i.c.length!=0){g=RD(Vmb(i,Jwb(e,i.c.length)),118);t.a.Bc(g)!=null;g.g=k++;wSc(g,b,c,d);i.c.length=0}}q=a.c.length+1;for(m=new Anb(a);m.a<m.c.c.length;){l=RD(ynb(m),118);l.g<f&&(l.g=l.g+q)}} -function FJc(a,b,c){var d,e,f,g;this.j=a;this.e=c1b(a);this.o=this.j.e;this.i=!!this.o;this.p=this.i?RD(Vmb(c,Y2b(this.o).p),219):null;e=RD(mQb(a,(Ywc(),kwc)),21);this.g=e.Hc((ovc(),hvc));this.b=new bnb;this.d=new RLc(this.e);g=RD(mQb(this.j,Lwc),234);this.q=WJc(b,g,this.e);this.k=new _Kc(this);f=dv(cD(WC(QY,1),rve,230,0,[this,this.d,this.k,this.q]));if(b==(RKc(),OKc)&&!Heb(TD(mQb(a,(yCc(),eAc))))){d=new qJc(this.e);ZEb(f.c,d);this.c=new UIc(d,g,RD(this.q,413))}else if(b==OKc&&Heb(TD(mQb(a,(yCc(),eAc))))){d=new qJc(this.e);ZEb(f.c,d);this.c=new vLc(d,g,RD(this.q,413))}else{this.c=new smc(b,this)}Rmb(f,this.c);yNc(f,this.e);this.s=$Kc(this.k)} -function z0b(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;f=new bnb;for(j=new Anb(d);j.a<j.c.c.length;){h=RD(ynb(j),452);g=null;if(h.f==(BEc(),zEc)){for(o=new Anb(h.e);o.a<o.c.c.length;){n=RD(ynb(o),18);q=n.d.i;if(Y2b(q)==b){q0b(a,b,h,n,h.b,n.d)}else if(!c||n2b(q,c)){r0b(a,b,h,d,n)}else{m=w0b(a,b,c,n,h.b,zEc,g);m!=g&&(ZEb(f.c,m),true);m.c&&(g=m)}}}else{for(l=new Anb(h.e);l.a<l.c.c.length;){k=RD(ynb(l),18);p=k.c.i;if(Y2b(p)==b){q0b(a,b,h,k,k.c,h.b)}else if(!c||n2b(p,c)){continue}else{m=w0b(a,b,c,k,h.b,yEc,g);m!=g&&(ZEb(f.c,m),true);m.c&&(g=m)}}}}for(i=new Anb(f);i.a<i.c.c.length;){h=RD(ynb(i),452);Wmb(b.a,h.a,0)!=-1||Rmb(b.a,h.a);h.c&&(ZEb(e.c,h),true)}} -function QXb(a){var b,c,d,e,f,g,h;b=0;for(f=new Anb(a.b.a);f.a<f.c.c.length;){d=RD(ynb(f),194);d.b=0;d.c=0}PXb(a,0);OXb(a,a.g);uYb(a.c);yYb(a.c);c=(Cmd(),ymd);wYb(qYb(vYb(wYb(qYb(vYb(wYb(vYb(a.c,c)),Fmd(c)))),c)));vYb(a.c,ymd);TXb(a,a.g);UXb(a,0);VXb(a,0);WXb(a,1);PXb(a,1);OXb(a,a.d);uYb(a.c);for(g=new Anb(a.b.a);g.a<g.c.c.length;){d=RD(ynb(g),194);b+=$wnd.Math.abs(d.c)}for(h=new Anb(a.b.a);h.a<h.c.c.length;){d=RD(ynb(h),194);d.b=0;d.c=0}c=Bmd;wYb(qYb(vYb(wYb(qYb(vYb(wYb(yYb(vYb(a.c,c))),Fmd(c)))),c)));vYb(a.c,ymd);TXb(a,a.d);UXb(a,1);VXb(a,1);WXb(a,0);yYb(a.c);for(e=new Anb(a.b.a);e.a<e.c.c.length;){d=RD(ynb(e),194);b+=$wnd.Math.abs(d.c)}return b} -function A0b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(!Heb(TD(mQb(c,(yCc(),NAc))))){return}for(h=new Anb(c.j);h.a<h.c.c.length;){g=RD(ynb(h),12);m=s2b(g.g);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];f=i.d.i==c;e=f&&Heb(TD(mQb(i,OAc)));if(e){o=i.c;n=RD(Wjb(a.b,o),10);if(!n){n=f2b(o,(Bod(),zod),o.j,-1,null,null,o.o,RD(mQb(b,rAc),88),b);pQb(n,(Ywc(),Awc),o);Zjb(a.b,o,n);Rmb(b.a,n)}q=i.d;p=RD(Wjb(a.b,q),10);if(!p){p=f2b(q,(Bod(),zod),q.j,1,null,null,q.o,RD(mQb(b,rAc),88),b);pQb(p,(Ywc(),Awc),q);Zjb(a.b,q,p);Rmb(b.a,p)}d=s0b(i);Y0b(d,RD(Vmb(n.j,0),12));Z0b(d,RD(Vmb(p.j,0),12));Rc(a.a,i,new J0b(d,b,(BEc(),zEc)));RD(mQb(b,(Ywc(),kwc)),21).Fc((ovc(),hvc))}}}} -function OQc(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(e=new Anb(a.a.b);e.a<e.c.c.length;){c=RD(ynb(e),30);for(i=new Anb(c.a);i.a<i.c.c.length;){h=RD(ynb(i),10);b.j[h.p]=h;b.i[h.p]=b.o==(EQc(),DQc)?pxe:oxe}}akb(a.c);g=a.a.b;b.c==(wQc(),uQc)&&(g=hv(g));sRc(a.e,b,a.b);Mnb(b.p,null);for(f=g.Kc();f.Ob();){c=RD(f.Pb(),30);j=c.a;b.o==(EQc(),DQc)&&(j=hv(j));for(m=j.Kc();m.Ob();){l=RD(m.Pb(),10);b.g[l.p]==l&&PQc(a,l,b)}}QQc(a,b);for(d=g.Kc();d.Ob();){c=RD(d.Pb(),30);for(m=new Anb(c.a);m.a<m.c.c.length;){l=RD(ynb(m),10);b.p[l.p]=b.p[b.g[l.p].p];if(l==b.g[l.p]){k=Kfb(b.i[b.j[l.p].p]);(b.o==(EQc(),DQc)&&k>pxe||b.o==CQc&&k<oxe)&&(b.p[l.p]=Kfb(b.p[l.p])+k)}}}a.e.xg()} -function ldc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;c.Ug('Label dummy switching',1);d=RD(mQb(b,(yCc(),uAc)),232);$cc(b);e=idc(b,d);a.a=$C(iE,vxe,28,b.b.c.length,15,1);for(h=(btc(),cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc])),k=0,n=h.length;k<n;++k){f=h[k];if((f==atc||f==Xsc||f==$sc)&&!RD(Csb(e.a,f)?e.b[f.g]:null,15).dc()){bdc(a,b);break}}for(i=cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc]),l=0,o=i.length;l<o;++l){f=i[l];f==atc||f==Xsc||f==$sc||mdc(a,RD(Csb(e.a,f)?e.b[f.g]:null,15))}for(g=cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc]),j=0,m=g.length;j<m;++j){f=g[j];(f==atc||f==Xsc||f==$sc)&&mdc(a,RD(Csb(e.a,f)?e.b[f.g]:null,15))}a.a=null;c.Vg()} -function tte(a,b){var c,d,e,f,g,h,i,j,k;j=b;if(j.b==null||a.b==null)return;vte(a);ste(a);vte(j);ste(j);c=$C(kE,Pwe,28,a.b.length+j.b.length,15,1);k=0;d=0;g=0;while(d<a.b.length&&g<j.b.length){e=a.b[d];f=a.b[d+1];h=j.b[g];i=j.b[g+1];if(f<h){d+=2}else if(f>=h&&e<=i){if(h<=e&&f<=i){c[k++]=e;c[k++]=f;d+=2}else if(h<=e){c[k++]=e;c[k++]=i;a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=h;c[k++]=f;d+=2}else{c[k++]=h;c[k++]=i;a.b[d]=i+1}}else if(i<e){g+=2}else{throw Adb(new yz('Token#intersectRanges(): Internal Error: ['+a.b[d]+','+a.b[d+1]+'] & ['+j.b[g]+','+j.b[g+1]+']'))}}while(d<a.b.length){c[k++]=a.b[d++];c[k++]=a.b[d++]}a.b=$C(kE,Pwe,28,k,15,1);hib(c,0,a.b,0,k)} -function RXb(a){var b,c,d,e,f,g,h;b=new bnb;a.g=new bnb;a.d=new bnb;for(g=new vkb((new mkb(a.f.b)).a);g.b;){f=tkb(g);Rmb(b,RD(RD(f.md(),42).b,86));Dmd(RD(f.ld(),602).Af())?Rmb(a.d,RD(f.md(),42)):Rmb(a.g,RD(f.md(),42))}OXb(a,a.d);OXb(a,a.g);a.c=new EYb(a.b);CYb(a.c,(zXb(),yXb));TXb(a,a.d);TXb(a,a.g);Tmb(b,a.c.a.b);a.e=new rjd(oxe,oxe);a.a=new rjd(pxe,pxe);for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),86);a.e.a=$wnd.Math.min(a.e.a,c.g.c);a.e.b=$wnd.Math.min(a.e.b,c.g.d);a.a.a=$wnd.Math.max(a.a.a,c.g.c+c.g.b);a.a.b=$wnd.Math.max(a.a.b,c.g.d+c.g.a)}BYb(a.c,new $Xb);h=0;do{e=QXb(a);++h}while((h<2||e>pwe)&&h<10);BYb(a.c,new bYb);QXb(a);xYb(a.c);AXb(a.f)} -function B9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=RD(mQb(a,(yCc(),BBc)),101);g=a.f;f=a.d;h=g.a+f.b+f.c;i=0-f.d-a.c.b;k=g.b+f.d+f.a-a.c.b;j=new bnb;l=new bnb;for(e=new Anb(b);e.a<e.c.c.length;){d=RD(ynb(e),10);switch(c.g){case 1:case 2:case 3:r9b(d);break;case 4:m=RD(mQb(d,zBc),8);n=!m?0:m.a;d.n.a=h*Kfb(UD(mQb(d,(Ywc(),Jwc))))-n;U2b(d,true,false);break;case 5:o=RD(mQb(d,zBc),8);p=!o?0:o.a;d.n.a=Kfb(UD(mQb(d,(Ywc(),Jwc))))-p;U2b(d,true,false);g.a=$wnd.Math.max(g.a,d.n.a+d.o.a/2);}switch(RD(mQb(d,(Ywc(),hwc)),64).g){case 1:d.n.b=i;ZEb(j.c,d);break;case 3:d.n.b=k;ZEb(l.c,d);}}switch(c.g){case 1:case 2:t9b(j,a);t9b(l,a);break;case 3:z9b(j,a);z9b(l,a);}} -function $Jc(a,b){var c,d,e,f,g,h,i,j,k,l,m;switch(a.k.g){case 1:d=RD(mQb(a,(Ywc(),Awc)),18);c=RD(mQb(d,Bwc),75);!c?(c=new Ejd):Heb(TD(mQb(d,Nwc)))&&(c=Ijd(c));j=RD(mQb(a,vwc),12);if(j){k=xjd(cD(WC(l3,1),Nve,8,0,[j.i.n,j.n,j.a]));if(b<=k.a){return k.b}Pub(c,k,c.a,c.a.a)}l=RD(mQb(a,wwc),12);if(l){m=xjd(cD(WC(l3,1),Nve,8,0,[l.i.n,l.n,l.a]));if(m.a<=b){return m.b}Pub(c,m,c.c.b,c.c)}if(c.b>=2){i=Sub(c,0);g=RD(evb(i),8);h=RD(evb(i),8);while(h.a<b&&i.b!=i.d.c){g=h;h=RD(evb(i),8)}return g.b+(b-g.a)/(h.a-g.a)*(h.b-g.b)}break;case 3:f=RD(mQb(RD(Vmb(a.j,0),12),(Ywc(),Awc)),12);e=f.i;switch(f.j.g){case 1:return e.n.b;case 3:return e.n.b+e.o.b;}}return _2b(a).b} -function Akc(a){var b,c,d,e,f,g,h,i,j,k,l;for(g=new Anb(a.d.b);g.a<g.c.c.length;){f=RD(ynb(g),30);for(i=new Anb(f.a);i.a<i.c.c.length;){h=RD(ynb(i),10);if(Heb(TD(mQb(h,(yCc(),Uzc))))){if(!gr(W2b(h))){d=RD(er(W2b(h)),18);k=d.c.i;k==h&&(k=d.d.i);l=new Ptd(k,ojd(ajd(h.n),k.n));Zjb(a.b,h,l);continue}}e=new Uid(h.n.a-h.d.b,h.n.b-h.d.d,h.o.a+h.d.b+h.d.c,h.o.b+h.d.d+h.d.a);b=mGb(pGb(nGb(oGb(new qGb,h),e),jkc),a.a);gGb(hGb(iGb(new jGb,cD(WC(hN,1),rve,60,0,[b])),b),a.a);j=new cHb;Zjb(a.e,b,j);c=Kr(new is(Mr(Z2b(h).a.Kc(),new ir)))-Kr(new is(Mr(a3b(h).a.Kc(),new ir)));c<0?aHb(j,true,(Cmd(),ymd)):c>0&&aHb(j,true,(Cmd(),zmd));h.k==(r3b(),m3b)&&bHb(j);Zjb(a.f,h,b)}}} -function OVc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;e=RD(mQb(a,(q$c(),h$c)),27);j=lve;k=lve;h=qwe;i=qwe;for(t=Sub(a.b,0);t.b!=t.d.c;){r=RD(evb(t),39);n=r.e;o=r.f;j=$wnd.Math.min(j,n.a-o.a/2);k=$wnd.Math.min(k,n.b-o.b/2);h=$wnd.Math.max(h,n.a+o.a/2);i=$wnd.Math.max(i,n.b+o.b/2)}m=RD(Gxd(e,(h_c(),T$c)),107);for(s=Sub(a.b,0);s.b!=s.d.c;){r=RD(evb(s),39);l=mQb(r,h$c);if(ZD(l,207)){f=RD(l,27);Byd(f,r.e.a,r.e.b);zxd(f,r)}}for(q=Sub(a.a,0);q.b!=q.d.c;){p=RD(evb(q),65);d=RD(mQb(p,h$c),74);if(d){b=p.a;c=IGd(d,true,true);lsd(b,c)}}u=h-j+(m.b+m.c);g=i-k+(m.d+m.a);Heb(TD(Gxd(e,(umd(),mld))))||Esd(e,u,g,false,false);Ixd(e,Ikd,u-(m.b+m.c));Ixd(e,Hkd,g-(m.d+m.a))} -function Wec(a,b){var c,d,e,f,g,h,i,j,k,l;i=true;e=0;j=a.g[b.p];k=b.o.b+a.o;c=a.d[b.p][2];$mb(a.b,j,sgb(RD(Vmb(a.b,j),17).a-1+c));$mb(a.c,j,Kfb(UD(Vmb(a.c,j)))-k+c*a.f);++j;if(j>=a.j){++a.j;Rmb(a.b,sgb(1));Rmb(a.c,k)}else{d=a.d[b.p][1];$mb(a.b,j,sgb(RD(Vmb(a.b,j),17).a+1-d));$mb(a.c,j,Kfb(UD(Vmb(a.c,j)))+k-d*a.f)}(a.r==(aEc(),VDc)&&(RD(Vmb(a.b,j),17).a>a.k||RD(Vmb(a.b,j-1),17).a>a.k)||a.r==YDc&&(Kfb(UD(Vmb(a.c,j)))>a.n||Kfb(UD(Vmb(a.c,j-1)))>a.n))&&(i=false);for(g=new is(Mr(Z2b(b).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);h=f.c.i;if(a.g[h.p]==j){l=Wec(a,h);e=e+RD(l.a,17).a;i=i&&Heb(TD(l.b))}}a.g[b.p]=j;e=e+a.d[b.p][0];return new Ptd(sgb(e),(Geb(),i?true:false))} -function cXb(a,b){var c,d,e,f,g;c=Kfb(UD(mQb(b,(yCc(),TBc))));c<2&&pQb(b,TBc,2);d=RD(mQb(b,rAc),88);d==(Cmd(),Amd)&&pQb(b,rAc,i2b(b));e=RD(mQb(b,NBc),17);e.a==0?pQb(b,(Ywc(),Lwc),new Owb):pQb(b,(Ywc(),Lwc),new Pwb(e.a));f=TD(mQb(b,gBc));f==null&&pQb(b,gBc,(Geb(),dE(mQb(b,yAc))===dE((Ymd(),Umd))?true:false));FDb(new SDb(null,new Swb(b.a,16)),new fXb(a));FDb(EDb(new SDb(null,new Swb(b.b,16)),new hXb),new jXb(a));g=new gFc(b);pQb(b,(Ywc(),Qwc),g);Sed(a.a);Ved(a.a,(sXb(),nXb),RD(mQb(b,pAc),188));Ved(a.a,oXb,RD(mQb(b,$Ac),188));Ved(a.a,pXb,RD(mQb(b,oAc),188));Ved(a.a,qXb,RD(mQb(b,kBc),188));Ved(a.a,rXb,KRc(RD(mQb(b,yAc),223)));Ped(a.a,bXb(b));pQb(b,Kwc,Qed(a.a,b))} -function STc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;l=new Tsb;g=new bnb;QTc(a,c,a.d.Ag(),g,l);QTc(a,d,a.d.Bg(),g,l);a.b=0.2*(p=RTc(EDb(new SDb(null,new Swb(g,16)),new XTc)),q=RTc(EDb(new SDb(null,new Swb(g,16)),new ZTc)),$wnd.Math.min(p,q));f=0;for(h=0;h<g.c.length-1;h++){i=(tFb(h,g.c.length),RD(g.c[h],118));for(o=h+1;o<g.c.length;o++){f+=PTc(a,i,(tFb(o,g.c.length),RD(g.c[o],118)))}}m=RD(mQb(b,(Ywc(),Lwc)),234);f>=2&&(r=uSc(g,true,m),!a.e&&(a.e=new xTc(a)),tTc(a.e,r,g,a.b),undefined);UTc(g,m);WTc(g);n=-1;for(k=new Anb(g);k.a<k.c.c.length;){j=RD(ynb(k),118);if($wnd.Math.abs(j.s-j.c)<Vze){continue}n=$wnd.Math.max(n,j.o);a.d.yg(j,e,a.c)}a.d.a.a.$b();return n+1} -function s0c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;l=RD(Hr((g=Sub((new dXc(b)).a.d,0),new gXc(g))),39);o=l?RD(mQb(l,(q$c(),b$c)),39):null;e=1;while(!!l&&!!o){i=0;u=0;c=l;d=o;for(h=0;h<e;h++){c=_Wc(c);d=_Wc(d);u+=Kfb(UD(mQb(c,(q$c(),g$c))));i+=Kfb(UD(mQb(d,g$c)))}t=Kfb(UD(mQb(o,(q$c(),j$c))));s=Kfb(UD(mQb(l,j$c)));m=u0c(a,l,o);n=t+i+a.b+m-s-u;if(0<n){j=b;k=0;while(!!j&&j!=d){++k;j=RD(mQb(j,c$c),39)}if(j){r=n/k;j=b;while(j!=d){q=Kfb(UD(mQb(j,j$c)))+n;pQb(j,j$c,q);p=Kfb(UD(mQb(j,g$c)))+n;pQb(j,g$c,p);n-=r;j=RD(mQb(j,c$c),39)}}else{return}}++e;l.d.b==0?(l=kWc(new dXc(b),e)):(l=RD(Hr((f=Sub((new dXc(l)).a.d,0),new gXc(f))),39));o=l?RD(mQb(l,b$c),39):null}} -function Lmc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(m=a.c[b],n=a.c[c],(o=RD(mQb(m,(Ywc(),qwc)),15),!!o&&o.gc()!=0&&o.Hc(n))||(p=m.k!=(r3b(),o3b)&&n.k!=o3b,q=RD(mQb(m,pwc),10),r=RD(mQb(n,pwc),10),s=q!=r,t=!!q&&q!=m||!!r&&r!=n,u=Mmc(m,(qpd(),Yod)),v=Mmc(n,npd),t=t|(Mmc(m,npd)||Mmc(n,Yod)),w=t&&s||u||v,p&&w)||m.k==(r3b(),q3b)&&n.k==p3b||n.k==(r3b(),q3b)&&m.k==p3b){return false}k=a.c[b];f=a.c[c];e=jMc(a.e,k,f,(qpd(),ppd));i=jMc(a.i,k,f,Xod);Cmc(a.f,k,f);j=lmc(a.b,k,f)+RD(e.a,17).a+RD(i.a,17).a+a.f.d;h=lmc(a.b,f,k)+RD(e.b,17).a+RD(i.b,17).a+a.f.b;if(a.a){l=RD(mQb(k,Awc),12);g=RD(mQb(f,Awc),12);d=hMc(a.g,l,g);j+=RD(d.a,17).a;h+=RD(d.b,17).a}return j>h} -function Iad(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=oxe;k=oxe;h=pxe;i=pxe;for(m=new Anb(b.i);m.a<m.c.c.length;){l=RD(ynb(m),68);e=RD(RD(Wjb(a.g,l.a),42).b,27);Byd(e,l.b.c,l.b.d);j=$wnd.Math.min(j,e.i);k=$wnd.Math.min(k,e.j);h=$wnd.Math.max(h,e.i+e.g);i=$wnd.Math.max(i,e.j+e.f)}n=RD(Gxd(a.c,(ncd(),ecd)),107);Esd(a.c,h-j+(n.b+n.c),i-k+(n.d+n.a),true,true);Isd(a.c,-j+n.b,-k+n.d);for(d=new dMd(uCd(a.c));d.e!=d.i.gc();){c=RD(bMd(d),74);g=IGd(c,true,true);o=JGd(c);q=LGd(c);p=new rjd(o.i+o.g/2,o.j+o.f/2);f=new rjd(q.i+q.g/2,q.j+q.f/2);r=ojd(new rjd(f.a,f.b),p);wid(r,o.g,o.f);$id(p,r);s=ojd(new rjd(p.a,p.b),f);wid(s,q.g,q.f);$id(f,s);Nzd(g,p.a,p.b);Gzd(g,f.a,f.b)}} -function Tcc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;b.Ug('Label dummy removal',1);d=Kfb(UD(mQb(a,(yCc(),VBc))));e=Kfb(UD(mQb(a,ZBc)));j=RD(mQb(a,rAc),88);for(i=new Anb(a.b);i.a<i.c.c.length;){h=RD(ynb(i),30);l=new Jkb(h.a,0);while(l.b<l.d.gc()){k=(sFb(l.b<l.d.gc()),RD(l.d.Xb(l.c=l.b++),10));if(k.k==(r3b(),n3b)){m=RD(mQb(k,(Ywc(),Awc)),18);o=Kfb(UD(mQb(m,FAc)));g=dE(mQb(k,swc))===dE((Pnd(),Mnd));c=new sjd(k.n);g&&(c.b+=o+d);f=new rjd(k.o.a,k.o.b+(k.k==n3b&&!QDb(CDb(RD(mQb(k,Mwc),15).Oc(),new PAb(new x3b))).Bd((xDb(),wDb))?0:-o-d));n=RD(mQb(k,Mwc),15);j==(Cmd(),Bmd)||j==xmd?Scc(n,c,e,f,g,j):Rcc(n,c,e,f);Tmb(m.b,n);Hec(k,dE(mQb(a,yAc))===dE((Ymd(),Vmd)));Ckb(l)}}}b.Vg()} -function ZBd(a){if(a.q)return;a.q=true;a.p=jBd(a,0);a.a=jBd(a,1);oBd(a.a,0);a.f=jBd(a,2);oBd(a.f,1);iBd(a.f,2);a.n=jBd(a,3);iBd(a.n,3);iBd(a.n,4);iBd(a.n,5);iBd(a.n,6);a.g=jBd(a,4);oBd(a.g,7);iBd(a.g,8);a.c=jBd(a,5);oBd(a.c,7);oBd(a.c,8);a.i=jBd(a,6);oBd(a.i,9);oBd(a.i,10);oBd(a.i,11);oBd(a.i,12);iBd(a.i,13);a.j=jBd(a,7);oBd(a.j,9);a.d=jBd(a,8);oBd(a.d,3);oBd(a.d,4);oBd(a.d,5);oBd(a.d,6);iBd(a.d,7);iBd(a.d,8);iBd(a.d,9);iBd(a.d,10);a.b=jBd(a,9);iBd(a.b,0);iBd(a.b,1);a.e=jBd(a,10);iBd(a.e,1);iBd(a.e,2);iBd(a.e,3);iBd(a.e,4);oBd(a.e,5);oBd(a.e,6);oBd(a.e,7);oBd(a.e,8);oBd(a.e,9);oBd(a.e,10);iBd(a.e,11);a.k=jBd(a,11);iBd(a.k,0);iBd(a.k,1);a.o=kBd(a,12);a.s=kBd(a,13)} -function CXb(a,b){b.dc()&&JYb(a.j,true,true,true,true);pb(b,(qpd(),cpd))&&JYb(a.j,true,true,true,false);pb(b,Zod)&&JYb(a.j,false,true,true,true);pb(b,kpd)&&JYb(a.j,true,true,false,true);pb(b,mpd)&&JYb(a.j,true,false,true,true);pb(b,dpd)&&JYb(a.j,false,true,true,false);pb(b,$od)&&JYb(a.j,false,true,false,true);pb(b,lpd)&&JYb(a.j,true,false,false,true);pb(b,jpd)&&JYb(a.j,true,false,true,false);pb(b,hpd)&&JYb(a.j,true,true,true,true);pb(b,apd)&&JYb(a.j,true,true,true,true);pb(b,hpd)&&JYb(a.j,true,true,true,true);pb(b,_od)&&JYb(a.j,true,true,true,true);pb(b,ipd)&&JYb(a.j,true,true,true,true);pb(b,gpd)&&JYb(a.j,true,true,true,true);pb(b,fpd)&&JYb(a.j,true,true,true,true)} -function tAd(b,c,d){var e,f,g,h,i,j,k,l,m;if(b.a!=c.jk()){throw Adb(new agb(VHe+c.xe()+WHe))}e=Oee((lke(),jke),c).Jl();if(e){return e.jk().wi().ri(e,d)}h=Oee(jke,c).Ll();if(h){if(d==null){return null}i=RD(d,15);if(i.dc()){return ''}m=new Qhb;for(g=i.Kc();g.Ob();){f=g.Pb();Nhb(m,h.jk().wi().ri(h,f));m.a+=' '}return qeb(m,m.a.length-1)}l=Oee(jke,c).Ml();if(!l.dc()){for(k=l.Kc();k.Ob();){j=RD(k.Pb(),156);if(j.fk(d)){try{m=j.jk().wi().ri(j,d);if(m!=null){return m}}catch(a){a=zdb(a);if(!ZD(a,103))throw Adb(a)}}}throw Adb(new agb("Invalid value: '"+d+"' for datatype :"+c.xe()))}RD(c,847).ok();return d==null?null:ZD(d,180)?''+RD(d,180).a:rb(d)==qK?a2d(nAd[0],RD(d,206)):jeb(d)} -function ZUc(a){var b,c,d,e,f,g,h,i,j,k;j=new Yub;h=new Yub;for(f=new Anb(a);f.a<f.c.c.length;){d=RD(ynb(f),131);d.v=0;d.n=d.i.c.length;d.u=d.t.c.length;d.n==0&&(Pub(j,d,j.c.b,j.c),true);d.u==0&&d.r.a.gc()==0&&(Pub(h,d,h.c.b,h.c),true)}g=-1;while(j.b!=0){d=RD(ku(j,0),131);for(c=new Anb(d.t);c.a<c.c.c.length;){b=RD(ynb(c),274);k=b.b;k.v=$wnd.Math.max(k.v,d.v+1);g=$wnd.Math.max(g,k.v);--k.n;k.n==0&&(Pub(j,k,j.c.b,j.c),true)}}if(g>-1){for(e=Sub(h,0);e.b!=e.d.c;){d=RD(evb(e),131);d.v=g}while(h.b!=0){d=RD(ku(h,0),131);for(c=new Anb(d.i);c.a<c.c.c.length;){b=RD(ynb(c),274);i=b.a;if(i.r.a.gc()!=0){continue}i.v=$wnd.Math.min(i.v,d.v-1);--i.u;i.u==0&&(Pub(h,i,h.c.b,h.c),true)}}}} -function WTc(a){var b,c,d,e,f,g,h,i,j,k;j=new bnb;h=new bnb;for(g=new Anb(a);g.a<g.c.c.length;){e=RD(ynb(g),118);PSc(e,e.f.c.length);QSc(e,e.k.c.length);e.d==0&&(ZEb(j.c,e),true);e.i==0&&e.e.b==0&&(ZEb(h.c,e),true)}d=-1;while(j.c.length!=0){e=RD(Xmb(j,0),118);for(c=new Anb(e.k);c.a<c.c.c.length;){b=RD(ynb(c),132);k=b.b;RSc(k,$wnd.Math.max(k.o,e.o+1));d=$wnd.Math.max(d,k.o);PSc(k,k.d-1);k.d==0&&(ZEb(j.c,k),true)}}if(d>-1){for(f=new Anb(h);f.a<f.c.c.length;){e=RD(ynb(f),118);e.o=d}while(h.c.length!=0){e=RD(Xmb(h,0),118);for(c=new Anb(e.f);c.a<c.c.c.length;){b=RD(ynb(c),132);i=b.a;if(i.e.b>0){continue}RSc(i,$wnd.Math.min(i.o,e.o-1));QSc(i,i.i-1);i.i==0&&(ZEb(h.c,i),true)}}}} -function Lid(a,b,c,d,e){var f,g,h,i;i=oxe;g=false;h=Gid(a,ojd(new rjd(b.a,b.b),a),$id(new rjd(c.a,c.b),e),ojd(new rjd(d.a,d.b),c));f=!!h&&!($wnd.Math.abs(h.a-a.a)<=IGe&&$wnd.Math.abs(h.b-a.b)<=IGe||$wnd.Math.abs(h.a-b.a)<=IGe&&$wnd.Math.abs(h.b-b.b)<=IGe);h=Gid(a,ojd(new rjd(b.a,b.b),a),c,e);!!h&&(($wnd.Math.abs(h.a-a.a)<=IGe&&$wnd.Math.abs(h.b-a.b)<=IGe)==($wnd.Math.abs(h.a-b.a)<=IGe&&$wnd.Math.abs(h.b-b.b)<=IGe)||f?(i=$wnd.Math.min(i,ejd(ojd(h,c)))):(g=true));h=Gid(a,ojd(new rjd(b.a,b.b),a),d,e);!!h&&(g||($wnd.Math.abs(h.a-a.a)<=IGe&&$wnd.Math.abs(h.b-a.b)<=IGe)==($wnd.Math.abs(h.a-b.a)<=IGe&&$wnd.Math.abs(h.b-b.b)<=IGe)||f)&&(i=$wnd.Math.min(i,ejd(ojd(h,d))));return i} -function eWb(a){Cgd(a,new Pfd(Wfd($fd(Xfd(Zfd(Yfd(new agd,AAe),BAe),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new hWb),Zze)));Agd(a,AAe,dAe,iGd(XVb));Agd(a,AAe,fAe,(Geb(),true));Agd(a,AAe,jAe,iGd($Vb));Agd(a,AAe,CAe,iGd(_Vb));Agd(a,AAe,iAe,iGd(aWb));Agd(a,AAe,kAe,iGd(ZVb));Agd(a,AAe,gAe,iGd(bWb));Agd(a,AAe,lAe,iGd(cWb));Agd(a,AAe,vAe,iGd(WVb));Agd(a,AAe,xAe,iGd(UVb));Agd(a,AAe,yAe,iGd(VVb));Agd(a,AAe,zAe,iGd(YVb));Agd(a,AAe,wAe,iGd(TVb))} -function kJc(a){var b,c,d,e,f,g,h,i;b=null;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),239);Kfb(pJc(c.g,c.d[0]).a);c.b=null;if(!!c.e&&c.e.gc()>0&&c.c==0){!b&&(b=new bnb);ZEb(b.c,c)}}if(b){while(b.c.length!=0){c=RD(Xmb(b,0),239);if(!!c.b&&c.b.c.length>0){for(f=(!c.b&&(c.b=new bnb),new Anb(c.b));f.a<f.c.c.length;){e=RD(ynb(f),239);if(Mfb(pJc(e.g,e.d[0]).a)==Mfb(pJc(c.g,c.d[0]).a)){if(Wmb(a,e,0)>Wmb(a,c,0)){return new Ptd(e,c)}}else if(Kfb(pJc(e.g,e.d[0]).a)>Kfb(pJc(c.g,c.d[0]).a)){return new Ptd(e,c)}}}for(h=(!c.e&&(c.e=new bnb),c.e).Kc();h.Ob();){g=RD(h.Pb(),239);i=(!g.b&&(g.b=new bnb),g.b);wFb(0,i.c.length);XEb(i.c,0,c);g.c==i.c.length&&(ZEb(b.c,g),true)}}}return null} -function _Jc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;b.Ug('Interactive crossing minimization',1);g=0;for(f=new Anb(a.b);f.a<f.c.c.length;){d=RD(ynb(f),30);d.p=g++}m=c1b(a);q=new ILc(m.length);yNc(new mob(cD(WC(QY,1),rve,230,0,[q])),m);p=0;g=0;for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);c=0;l=0;for(k=new Anb(d.a);k.a<k.c.c.length;){i=RD(ynb(k),10);if(i.n.a>0){c+=i.n.a+i.o.a/2;++l}for(o=new Anb(i.j);o.a<o.c.c.length;){n=RD(ynb(o),12);n.p=p++}}l>0&&(c/=l);r=$C(iE,vxe,28,d.a.c.length,15,1);h=0;for(j=new Anb(d.a);j.a<j.c.c.length;){i=RD(ynb(j),10);i.p=h++;r[i.p]=$Jc(i,c);i.k==(r3b(),o3b)&&pQb(i,(Ywc(),Cwc),r[i.p])}yob();_mb(d.a,new eKc(r));wIc(q,m,g,true);++g}b.Vg()} -function wte(a,b){var c,d,e,f,g,h,i,j,k;if(b.e==5){tte(a,b);return}j=b;if(j.b==null||a.b==null)return;vte(a);ste(a);vte(j);ste(j);c=$C(kE,Pwe,28,a.b.length+j.b.length,15,1);k=0;d=0;g=0;while(d<a.b.length&&g<j.b.length){e=a.b[d];f=a.b[d+1];h=j.b[g];i=j.b[g+1];if(f<h){c[k++]=a.b[d++];c[k++]=a.b[d++]}else if(f>=h&&e<=i){if(h<=e&&f<=i){d+=2}else if(h<=e){a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=e;c[k++]=h-1;d+=2}else{c[k++]=e;c[k++]=h-1;a.b[d]=i+1;g+=2}}else if(i<e){g+=2}else{throw Adb(new yz('Token#subtractRanges(): Internal Error: ['+a.b[d]+','+a.b[d+1]+'] - ['+j.b[g]+','+j.b[g+1]+']'))}}while(d<a.b.length){c[k++]=a.b[d++];c[k++]=a.b[d++]}a.b=$C(kE,Pwe,28,k,15,1);hib(c,0,a.b,0,k)} -function oTb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;h=IGd(b,false,false);r=ssd(h);d&&(r=Ijd(r));t=Kfb(UD(Gxd(b,(tSb(),mSb))));q=(sFb(r.b!=0),RD(r.a.a.c,8));l=RD(ju(r,1),8);if(r.b>2){k=new bnb;Tmb(k,new Rkb(r,1,r.b));f=jTb(k,t+a.a);s=new ORb(f);kQb(s,b);ZEb(c.c,s)}else{d?(s=RD(Wjb(a.b,JGd(b)),272)):(s=RD(Wjb(a.b,LGd(b)),272))}i=JGd(b);d&&(i=LGd(b));g=qTb(q,i);j=t+a.a;if(g.a){j+=$wnd.Math.abs(q.b-l.b);p=new rjd(l.a,(l.b+q.b)/2)}else{j+=$wnd.Math.abs(q.a-l.a);p=new rjd((l.a+q.a)/2,l.b)}d?Zjb(a.d,b,new QRb(s,g,p,j)):Zjb(a.c,b,new QRb(s,g,p,j));Zjb(a.b,b,s);o=(!b.n&&(b.n=new C5d(I4,b,1,7)),b.n);for(n=new dMd(o);n.e!=n.i.gc();){m=RD(bMd(n),135);e=nTb(a,m,true,0,0);ZEb(c.c,e)}} -function sMb(a){var b,c,d,e,f,g,h;if(a.A.dc()){return}if(a.A.Hc((Qpd(),Opd))){RD(Vrb(a.b,(qpd(),Yod)),127).k=true;RD(Vrb(a.b,npd),127).k=true;b=a.q!=(Bod(),xod)&&a.q!=wod;QJb(RD(Vrb(a.b,Xod),127),b);QJb(RD(Vrb(a.b,ppd),127),b);QJb(a.g,b);if(a.A.Hc(Ppd)){RD(Vrb(a.b,Yod),127).j=true;RD(Vrb(a.b,npd),127).j=true;RD(Vrb(a.b,Xod),127).k=true;RD(Vrb(a.b,ppd),127).k=true;a.g.k=true}}if(a.A.Hc(Npd)){a.a.j=true;a.a.k=true;a.g.j=true;a.g.k=true;h=a.B.Hc((dqd(),_pd));for(e=nMb(),f=0,g=e.length;f<g;++f){d=e[f];c=RD(Vrb(a.i,d),314);if(c){if(jMb(d)){c.j=true;c.k=true}else{c.j=!h;c.k=!h}}}}if(a.A.Hc(Mpd)&&a.B.Hc((dqd(),$pd))){a.g.j=true;a.g.j=true;if(!a.a.j){a.a.j=true;a.a.k=true;a.a.e=true}}} -function eOc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;for(d=new Anb(a.e.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);n=a.i[e.p];j=n.a.e;i=n.d.e;e.n.b=j;r=i-j-e.o.b;b=BOc(e);m=(wDc(),(!e.q?(yob(),yob(),wob):e.q)._b((yCc(),iBc))?(l=RD(mQb(e,iBc),203)):(l=RD(mQb(Y2b(e),jBc),203)),l);b&&(m==tDc||m==sDc)&&(e.o.b+=r);if(b&&(m==vDc||m==tDc||m==sDc)){for(p=new Anb(e.j);p.a<p.c.c.length;){o=RD(ynb(p),12);if((qpd(),apd).Hc(o.j)){k=RD(Wjb(a.k,o),125);o.n.b=k.e-j}}for(h=new Anb(e.b);h.a<h.c.c.length;){g=RD(ynb(h),72);q=RD(mQb(e,dBc),21);q.Hc((dod(),aod))?(g.n.b+=r):q.Hc(bod)&&(g.n.b+=r/2)}(m==tDc||m==sDc)&&b3b(e,(qpd(),npd)).Jc(new yPc(r))}}}} -function qOc(a,b,c){var d,e,f,g,h,i,j,k,l,m;j=new bnb;for(i=new Anb(b.a);i.a<i.c.c.length;){g=RD(ynb(i),10);for(m=b3b(g,(qpd(),Xod)).Kc();m.Ob();){l=RD(m.Pb(),12);for(e=new Anb(l.g);e.a<e.c.c.length;){d=RD(ynb(e),18);if(!W0b(d)&&d.c.i.c==d.d.i.c||W0b(d)||d.d.i.c!=c){continue}ZEb(j.c,d)}}}for(h=hv(c.a).Kc();h.Ob();){g=RD(h.Pb(),10);for(m=b3b(g,(qpd(),ppd)).Kc();m.Ob();){l=RD(m.Pb(),12);for(e=new Anb(l.e);e.a<e.c.c.length;){d=RD(ynb(e),18);if(!W0b(d)&&d.c.i.c==d.d.i.c||W0b(d)||d.c.i.c!=b){continue}if(j.c.length!=0){k=new Jkb(j,j.c.length);f=(sFb(k.b>0),RD(k.a.Xb(k.c=--k.b),18));while(f!=d&&k.b>0){a.a[f.p]=true;a.a[d.p]=true;f=(sFb(k.b>0),RD(k.a.Xb(k.c=--k.b),18))}k.b>0&&Ckb(k)}}}}} -function Zyb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;if(!a.b){return false}g=null;m=null;i=new Fzb(null,null);e=1;i.a[1]=a.b;l=i;while(l.a[e]){j=e;h=m;m=l;l=l.a[e];d=a.a.Ne(b,l.d);e=d<0?0:1;d==0&&(!c.c||Fvb(l.e,c.d))&&(g=l);if(!(!!l&&l.b)&&!Vyb(l.a[e])){if(Vyb(l.a[1-e])){m=m.a[j]=azb(l,e)}else if(!Vyb(l.a[1-e])){n=m.a[1-j];if(n){if(!Vyb(n.a[1-j])&&!Vyb(n.a[j])){m.b=false;n.b=true;l.b=true}else{f=h.a[1]==m?1:0;Vyb(n.a[j])?(h.a[f]=_yb(m,j)):Vyb(n.a[1-j])&&(h.a[f]=azb(m,j));l.b=h.a[f].b=true;h.a[f].a[0].b=false;h.a[f].a[1].b=false}}}}}if(g){c.b=true;c.d=g.e;if(l!=g){k=new Fzb(l.d,l.e);$yb(a,i,g,k);m==g&&(m=k)}m.a[m.a[1]==l?1:0]=l.a[!l.a[0]?1:0];--a.c}a.b=i.a[1];!!a.b&&(a.b.b=false);return c.b} -function Ilc(a){var b,c,d,e,f,g,h,i,j,k,l,m;for(e=new Anb(a.a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);for(i=d.c.Kc();i.Ob();){h=RD(i.Pb(),60);if(d.a==h.a){continue}Dmd(a.a.d)?(l=a.a.g.ff(d,h)):(l=a.a.g.gf(d,h));f=d.b.a+d.d.b+l-h.b.a;f=$wnd.Math.ceil(f);f=$wnd.Math.max(0,f);if(_jc(d,h)){g=eJb(new gJb,a.d);j=eE($wnd.Math.ceil(h.b.a-d.b.a));b=j-(h.b.a-d.b.a);k=$jc(d).a;c=d;if(!k){k=$jc(h).a;b=-b;c=h}if(k){c.b.a-=b;k.n.a-=b}rIb(uIb(tIb(vIb(sIb(new wIb,$wnd.Math.max(0,j)),1),g),a.c[d.a.d]));rIb(uIb(tIb(vIb(sIb(new wIb,$wnd.Math.max(0,-j)),1),g),a.c[h.a.d]))}else{m=1;(ZD(d.g,154)&&ZD(h.g,10)||ZD(h.g,154)&&ZD(d.g,10))&&(m=2);rIb(uIb(tIb(vIb(sIb(new wIb,eE(f)),m),a.c[d.a.d]),a.c[h.a.d]))}}}} -function PIc(a,b,c){var d,e,f,g,h,i,j,k,l,m;if(c){d=-1;k=new Jkb(b,0);while(k.b<k.d.gc()){h=(sFb(k.b<k.d.gc()),RD(k.d.Xb(k.c=k.b++),10));l=a.c[h.c.p][h.p].a;if(l==null){g=d+1;f=new Jkb(b,k.b);while(f.b<f.d.gc()){m=TIc(a,(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),10))).a;if(m!=null){g=(uFb(m),m);break}}l=(d+g)/2;a.c[h.c.p][h.p].a=l;a.c[h.c.p][h.p].d=(uFb(l),l);a.c[h.c.p][h.p].b=1}d=(uFb(l),l)}}else{e=0;for(j=new Anb(b);j.a<j.c.c.length;){h=RD(ynb(j),10);a.c[h.c.p][h.p].a!=null&&(e=$wnd.Math.max(e,Kfb(a.c[h.c.p][h.p].a)))}e+=2;for(i=new Anb(b);i.a<i.c.c.length;){h=RD(ynb(i),10);if(a.c[h.c.p][h.p].a==null){l=Kwb(a.i,24)*Nxe*e-1;a.c[h.c.p][h.p].a=l;a.c[h.c.p][h.p].d=l;a.c[h.c.p][h.p].b=1}}}} -function xA(a,b,c){var d,e,f,g,h,i,j,k,l;!c&&(c=hB(b.q.getTimezoneOffset()));e=(b.q.getTimezoneOffset()-c.a)*60000;h=new wB(Bdb(Hdb(b.q.getTime()),e));i=h;if(h.q.getTimezoneOffset()!=b.q.getTimezoneOffset()){e>0?(e-=86400000):(e+=86400000);i=new wB(Bdb(Hdb(b.q.getTime()),e))}k=new cib;j=a.a.length;for(f=0;f<j;){d=ihb(a.a,f);if(d>=97&&d<=122||d>=65&&d<=90){for(g=f+1;g<j&&ihb(a.a,g)==d;++g);LA(k,d,g-f,h,i,c);f=g}else if(d==39){++f;if(f<j&&ihb(a.a,f)==39){k.a+="'";++f;continue}l=false;while(!l){g=f;while(g<j&&ihb(a.a,g)!=39){++g}if(g>=j){throw Adb(new agb("Missing trailing '"))}g+1<j&&ihb(a.a,g+1)==39?++g:(l=true);Zhb(k,zhb(a.a,f,g));f=g+1}}else{k.a+=String.fromCharCode(d);++f}}return k.a} -function abe(){RRd(g7,new Ibe);RRd(f7,new nce);RRd(h7,new Uce);RRd(i7,new kde);RRd(k7,new nde);RRd(m7,new qde);RRd(l7,new tde);RRd(n7,new wde);RRd(p7,new ebe);RRd(q7,new hbe);RRd(r7,new kbe);RRd(s7,new nbe);RRd(t7,new qbe);RRd(u7,new tbe);RRd(v7,new wbe);RRd(y7,new zbe);RRd(A7,new Cbe);RRd(C8,new Fbe);RRd(o7,new Lbe);RRd(z7,new Obe);RRd(QI,new Rbe);RRd(WC(gE,1),new Ube);RRd(RI,new Xbe);RRd(SI,new $be);RRd(qK,new bce);RRd(T6,new ece);RRd(VI,new hce);RRd(Y6,new kce);RRd(Z6,new qce);RRd(Tbb,new tce);RRd(Jbb,new wce);RRd(ZI,new zce);RRd(bJ,new Cce);RRd(UI,new Fce);RRd(eJ,new Ice);RRd(VK,new Lce);RRd(Aab,new Oce);RRd(zab,new Rce);RRd(lJ,new Xce);RRd(qJ,new $ce);RRd(a7,new bde);RRd($6,new ede)} -function Inb(a,b){var c,d,e,f,g,h,i,j,k;if(a==null){return vve}i=b.a.zc(a,b);if(i!=null){return '[...]'}c=new Jyb(pve,'[',']');for(e=a,f=0,g=e.length;f<g;++f){d=e[f];if(d!=null&&(rb(d).i&4)!=0){if(Array.isArray(d)&&(k=XC(d),!(k>=14&&k<=16))){if(b.a._b(d)){!c.a?(c.a=new dib(c.d)):Zhb(c.a,c.b);Whb(c.a,'[...]')}else{h=SD(d);j=new btb(b);Gyb(c,Inb(h,j))}}else ZD(d,183)?Gyb(c,hob(RD(d,183))):ZD(d,195)?Gyb(c,aob(RD(d,195))):ZD(d,201)?Gyb(c,bob(RD(d,201))):ZD(d,2111)?Gyb(c,gob(RD(d,2111))):ZD(d,53)?Gyb(c,eob(RD(d,53))):ZD(d,376)?Gyb(c,fob(RD(d,376))):ZD(d,846)?Gyb(c,dob(RD(d,846))):ZD(d,109)&&Gyb(c,cob(RD(d,109)))}else{Gyb(c,d==null?vve:jeb(d))}}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)} -function KXd(a,b){var c,d,e,f;f=a.F;if(b==null){a.F=null;yXd(a,null)}else{a.F=(uFb(b),b);d=qhb(b,Fhb(60));if(d!=-1){e=(AFb(0,d,b.length),b.substr(0,d));qhb(b,Fhb(46))==-1&&!lhb(e,hve)&&!lhb(e,dKe)&&!lhb(e,eKe)&&!lhb(e,fKe)&&!lhb(e,gKe)&&!lhb(e,hKe)&&!lhb(e,iKe)&&!lhb(e,jKe)&&(e=kKe);c=thb(b,Fhb(62));c!=-1&&(e+=''+(BFb(c+1,b.length+1),b.substr(c+1)));yXd(a,e)}else{e=b;if(qhb(b,Fhb(46))==-1){d=qhb(b,Fhb(91));d!=-1&&(e=(AFb(0,d,b.length),b.substr(0,d)));if(!lhb(e,hve)&&!lhb(e,dKe)&&!lhb(e,eKe)&&!lhb(e,fKe)&&!lhb(e,gKe)&&!lhb(e,hKe)&&!lhb(e,iKe)&&!lhb(e,jKe)){e=kKe;d!=-1&&(e+=''+(BFb(d,b.length+1),b.substr(d)))}else{e=b}}yXd(a,e);e==b&&(a.F=a.D)}}(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,5,f,b))} -function Pvd(b,c){var d,e,f,g,h,i,j,k,l,m;j=c.length-1;i=(BFb(j,c.length),c.charCodeAt(j));if(i==93){h=qhb(c,Fhb(91));if(h>=0){f=Uvd(b,(AFb(1,h,c.length),c.substr(1,h-1)));l=(AFb(h+1,j,c.length),c.substr(h+1,j-(h+1)));return Nvd(b,l,f)}}else{d=-1;_eb==null&&(_eb=new RegExp('\\d'));if(_eb.test(String.fromCharCode(i))){d=uhb(c,Fhb(46),j-1);if(d>=0){e=RD(Fvd(b,Zvd(b,(AFb(1,d,c.length),c.substr(1,d-1))),false),61);k=0;try{k=Oeb((BFb(d+1,c.length+1),c.substr(d+1)),qwe,lve)}catch(a){a=zdb(a);if(ZD(a,130)){g=a;throw Adb(new RSd(g))}else throw Adb(a)}if(k<e.gc()){m=e.Xb(k);ZD(m,76)&&(m=RD(m,76).md());return RD(m,58)}}}if(d<0){return RD(Fvd(b,Zvd(b,(BFb(1,c.length+1),c.substr(1))),false),58)}}return null} -function Jcc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;b.Ug('Label dummy insertions',1);l=new bnb;g=Kfb(UD(mQb(a,(yCc(),VBc))));j=Kfb(UD(mQb(a,ZBc)));k=RD(mQb(a,rAc),88);for(n=new Anb(a.a);n.a<n.c.c.length;){m=RD(ynb(n),10);for(f=new is(Mr(a3b(m).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(e.c.i!=e.d.i&&br(e.b,Gcc)){p=Kcc(e);o=ev(e.b.c.length);c=Icc(a,e,p,o);ZEb(l.c,c);d=c.o;h=new Jkb(e.b,0);while(h.b<h.d.gc()){i=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),72));if(dE(mQb(i,wAc))===dE((Omd(),Lmd))){if(k==(Cmd(),Bmd)||k==xmd){d.a+=i.o.a+j;d.b=$wnd.Math.max(d.b,i.o.b)}else{d.a=$wnd.Math.max(d.a,i.o.a);d.b+=i.o.b+j}ZEb(o.c,i);Ckb(h)}}if(k==(Cmd(),Bmd)||k==xmd){d.a-=j;d.b+=g+p}else{d.b+=g-j+p}}}}Tmb(a.a,l);b.Vg()} -function H_b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;a.c=a.e;o=TD(mQb(b,(yCc(),OBc)));n=o==null||(uFb(o),o);f=RD(mQb(b,(Ywc(),kwc)),21).Hc((ovc(),hvc));e=RD(mQb(b,BBc),101);c=!(e==(Bod(),vod)||e==xod||e==wod);if(n&&(c||!f)){for(l=new Anb(b.a);l.a<l.c.c.length;){j=RD(ynb(l),10);j.p=0}m=new bnb;for(k=new Anb(b.a);k.a<k.c.c.length;){j=RD(ynb(k),10);d=G_b(a,j,null);if(d){i=new d1b;kQb(i,b);pQb(i,ewc,RD(d.b,21));C2b(i.d,b.d);pQb(i,nBc,null);for(h=RD(d.a,15).Kc();h.Ob();){g=RD(h.Pb(),10);Rmb(i.a,g);g.a=i}m.Fc(i)}}f&&(dE(mQb(b,Yzc))===dE((U$b(),Q$b))?(a.c=a.b):dE(mQb(b,Yzc))===dE(S$b)?(a.c=a.d):(a.c=a.a))}else{m=new mob(cD(WC(eR,1),OAe,36,0,[b]))}dE(mQb(b,Yzc))!==dE((U$b(),T$b))&&(yob(),m.jd(new K_b));return m} -function o2d(a,b,c){var d,e,f,g,h,i,j;j=a.c;!b&&(b=d2d);a.c=b;if((a.Db&4)!=0&&(a.Db&1)==0){i=new N3d(a,1,2,j,a.c);!c?(c=i):c.nj(i)}if(j!=b){if(ZD(a.Cb,291)){if(a.Db>>16==-10){c=RD(a.Cb,291).Yk(b,c)}else if(a.Db>>16==-15){!b&&(b=(JTd(),wTd));!j&&(j=(JTd(),wTd));if(a.Cb.Yh()){i=new P3d(a.Cb,1,13,j,b,fZd(o4d(RD(a.Cb,62)),a),false);!c?(c=i):c.nj(i)}}}else if(ZD(a.Cb,90)){if(a.Db>>16==-23){ZD(b,90)||(b=(JTd(),zTd));ZD(j,90)||(j=(JTd(),zTd));if(a.Cb.Yh()){i=new P3d(a.Cb,1,10,j,b,fZd(tYd(RD(a.Cb,29)),a),false);!c?(c=i):c.nj(i)}}}else if(ZD(a.Cb,456)){h=RD(a.Cb,850);g=(!h.b&&(h.b=new pae(new lae)),h.b);for(f=(d=new vkb((new mkb(g.a)).a),new xae(d));f.a.b;){e=RD(tkb(f.a).ld(),89);c=o2d(e,k2d(e,h),c)}}}return c} -function Y4b(a,b){var c,d,e,f,g,h,i,j,k,l,m;g=Heb(TD(Gxd(a,(yCc(),NAc))));m=RD(Gxd(a,EBc),21);i=false;j=false;l=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));while(l.e!=l.i.gc()&&(!i||!j)){f=RD(bMd(l),123);h=0;for(e=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!f.d&&(f.d=new Yie(G4,f,8,5)),f.d),(!f.e&&(f.e=new Yie(G4,f,7,4)),f.e)])));gs(e);){d=RD(hs(e),74);k=g&&ozd(d)&&Heb(TD(Gxd(d,OAc)));c=cZd((!d.b&&(d.b=new Yie(E4,d,4,7)),d.b),f)?a==vCd(AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84))):a==vCd(AGd(RD(QHd((!d.b&&(d.b=new Yie(E4,d,4,7)),d.b),0),84)));if(k||c){++h;if(h>1){break}}}h>0?(i=true):m.Hc((Pod(),Lod))&&(!f.n&&(f.n=new C5d(I4,f,1,7)),f.n).i>0&&(i=true);h>1&&(j=true)}i&&b.Fc((ovc(),hvc));j&&b.Fc((ovc(),ivc))} -function Dsd(a){var b,c,d,e,f,g,h,i,j,k,l,m;m=RD(Gxd(a,(umd(),kld)),21);if(m.dc()){return null}h=0;g=0;if(m.Hc((Qpd(),Opd))){k=RD(Gxd(a,Hld),101);d=2;c=2;e=2;f=2;b=!vCd(a)?RD(Gxd(a,Nkd),88):RD(Gxd(vCd(a),Nkd),88);for(j=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));j.e!=j.i.gc();){i=RD(bMd(j),123);l=RD(Gxd(i,Old),64);if(l==(qpd(),opd)){l=osd(i,b);Ixd(i,Old,l)}if(k==(Bod(),wod)){switch(l.g){case 1:d=$wnd.Math.max(d,i.i+i.g);break;case 2:c=$wnd.Math.max(c,i.j+i.f);break;case 3:e=$wnd.Math.max(e,i.i+i.g);break;case 4:f=$wnd.Math.max(f,i.j+i.f);}}else{switch(l.g){case 1:d+=i.g+2;break;case 2:c+=i.f+2;break;case 3:e+=i.g+2;break;case 4:f+=i.f+2;}}}h=$wnd.Math.max(d,e);g=$wnd.Math.max(c,f)}return Esd(a,h,g,true,true)} -function Rqc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=RD(zDb(PDb(CDb(new SDb(null,new Swb(b.d,16)),new Vqc(c)),new Xqc(c)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);l=lve;k=qwe;for(i=new Anb(b.b.j);i.a<i.c.c.length;){h=RD(ynb(i),12);if(h.j==c){l=$wnd.Math.min(l,h.p);k=$wnd.Math.max(k,h.p)}}if(l==lve){for(g=0;g<s.gc();g++){Umc(RD(s.Xb(g),105),c,g)}}else{t=$C(kE,Pwe,28,e.length,15,1);Qnb(t,t.length);for(r=s.Kc();r.Ob();){q=RD(r.Pb(),105);f=RD(Wjb(a.b,q),183);j=0;for(p=l;p<=k;p++){f[p]&&(j=$wnd.Math.max(j,d[p]))}if(q.i){n=q.i.c;u=new _sb;for(m=0;m<e.length;m++){e[n][m]&&Ysb(u,sgb(t[m]))}while(Zsb(u,sgb(j))){++j}}Umc(q,c,j);for(o=l;o<=k;o++){f[o]&&(d[o]=j+1)}!!q.i&&(t[q.i.c]=j)}}} -function wOc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;e=null;for(d=new Anb(b.a);d.a<d.c.c.length;){c=RD(ynb(d),10);BOc(c)?(f=(h=eJb(fJb(new gJb,c),a.f),i=eJb(fJb(new gJb,c),a.f),j=new ROc(c,true,h,i),k=c.o.b,l=(wDc(),(!c.q?(yob(),yob(),wob):c.q)._b((yCc(),iBc))?(m=RD(mQb(c,iBc),203)):(m=RD(mQb(Y2b(c),jBc),203)),m),n=10000,l==sDc&&(n=1),o=rIb(uIb(tIb(sIb(vIb(new wIb,n),eE($wnd.Math.ceil(k))),h),i)),l==tDc&&Ysb(a.d,o),xOc(a,hv(b3b(c,(qpd(),ppd))),j),xOc(a,b3b(c,Xod),j),j)):(f=(p=eJb(fJb(new gJb,c),a.f),FDb(CDb(new SDb(null,new Swb(c.j,16)),new cPc),new ePc(a,p)),new ROc(c,false,p,p)));a.i[c.p]=f;if(e){g=e.c.d.a+bFc(a.n,e.c,c)+c.d.d;e.b||(g+=e.c.o.b);rIb(uIb(tIb(vIb(sIb(new wIb,eE($wnd.Math.ceil(g))),0),e.d),f.a))}e=f}} -function h_b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;f=new t_b(b);l=c_b(a,b,f);n=$wnd.Math.max(Kfb(UD(mQb(b,(yCc(),FAc)))),1);for(k=new Anb(l.a);k.a<k.c.c.length;){j=RD(ynb(k),42);i=g_b(RD(j.a,8),RD(j.b,8),n);o=true;o=o&l_b(c,new rjd(i.c,i.d));o=o&l_b(c,Zid(new rjd(i.c,i.d),i.b,0));o=o&l_b(c,Zid(new rjd(i.c,i.d),0,i.a));o&l_b(c,Zid(new rjd(i.c,i.d),i.b,i.a))}m=f.d;h=g_b(RD(l.b.a,8),RD(l.b.b,8),n);if(m==(qpd(),ppd)||m==Xod){d.c[m.g]=$wnd.Math.min(d.c[m.g],h.d);d.b[m.g]=$wnd.Math.max(d.b[m.g],h.d+h.a)}else{d.c[m.g]=$wnd.Math.min(d.c[m.g],h.c);d.b[m.g]=$wnd.Math.max(d.b[m.g],h.c+h.b)}e=pxe;g=f.c.i.d;switch(m.g){case 4:e=g.c;break;case 2:e=g.b;break;case 1:e=g.a;break;case 3:e=g.d;}d.a[m.g]=$wnd.Math.max(d.a[m.g],e);return f} -function W7b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;h=RD(Wjb(b.c,a),467);s=b.a.c;i=b.a.c+b.a.b;C=h.f;D=h.a;g=C<D;p=new rjd(s,C);t=new rjd(i,D);e=(s+i)/2;q=new rjd(e,C);u=new rjd(e,D);f=X7b(a,C,D);w=K3b(b.B);A=new rjd(e,f);B=K3b(b.D);c=uid(cD(WC(l3,1),Nve,8,0,[w,A,B]));n=false;r=b.B.i;if(!!r&&!!r.c&&h.d){j=g&&r.p<r.c.a.c.length-1||!g&&r.p>0;if(j){if(j){m=r.p;g?++m:--m;l=RD(Vmb(r.c.a,m),10);d=Z7b(l);n=!(Did(d,w,c[0])||yid(d,w,c[0]))}}else{n=true}}o=false;v=b.D.i;if(!!v&&!!v.c&&h.e){k=g&&v.p>0||!g&&v.p<v.c.a.c.length-1;if(k){m=v.p;g?--m:++m;l=RD(Vmb(v.c.a,m),10);d=Z7b(l);o=!(Did(d,c[0],B)||yid(d,c[0],B))}else{o=true}}n&&o&&Mub(a.a,A);n||zjd(a.a,cD(WC(l3,1),Nve,8,0,[p,q]));o||zjd(a.a,cD(WC(l3,1),Nve,8,0,[u,t]))} -function MNc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;n=b.c.length;m=0;for(l=new Anb(a.b);l.a<l.c.c.length;){k=RD(ynb(l),30);r=k.a;if(r.c.length==0){continue}q=new Anb(r);j=0;s=null;e=RD(ynb(q),10);f=null;while(e){f=RD(Vmb(b,e.p),261);if(f.c>=0){i=null;h=new Jkb(k.a,j+1);while(h.b<h.d.gc()){g=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),10));i=RD(Vmb(b,g.p),261);if(i.d==f.d&&i.c<f.c){break}else{i=null}}if(i){if(s){$mb(d,e.p,sgb(RD(Vmb(d,e.p),17).a-1));RD(Vmb(c,s.p),15).Mc(f)}f=YNc(f,e,n++);ZEb(b.c,f);Rmb(c,new bnb);if(s){RD(Vmb(c,s.p),15).Fc(f);Rmb(d,sgb(1))}else{Rmb(d,sgb(0))}}}o=null;if(q.a<q.c.c.length){o=RD(ynb(q),10);p=RD(Vmb(b,o.p),261);RD(Vmb(c,e.p),15).Fc(p);$mb(d,o.p,sgb(RD(Vmb(d,o.p),17).a+1))}f.d=m;f.c=j++;s=e;e=o}++m}} -function I5b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=RD(mQb(a,(Ywc(),Awc)),74);if(!f){return}d=a.a;e=new sjd(c);$id(e,M5b(a));if(n2b(a.d.i,a.c.i)){m=a.c;l=xjd(cD(WC(l3,1),Nve,8,0,[m.n,m.a]));ojd(l,c)}else{l=K3b(a.c)}Pub(d,l,d.a,d.a.a);n=K3b(a.d);mQb(a,Wwc)!=null&&$id(n,RD(mQb(a,Wwc),8));Pub(d,n,d.c.b,d.c);Cjd(d,e);g=IGd(f,true,true);Kzd(g,RD(QHd((!f.b&&(f.b=new Yie(E4,f,4,7)),f.b),0),84));Lzd(g,RD(QHd((!f.c&&(f.c=new Yie(E4,f,5,8)),f.c),0),84));lsd(d,g);for(k=new Anb(a.b);k.a<k.c.c.length;){j=RD(ynb(k),72);h=RD(mQb(j,Awc),135);Cyd(h,j.o.a);Ayd(h,j.o.b);Byd(h,j.n.a+e.a,j.n.b+e.b);Ixd(h,(Zcc(),Ycc),TD(mQb(j,Ycc)))}i=RD(mQb(a,(yCc(),RAc)),75);if(i){Cjd(i,e);Ixd(f,RAc,i)}else{Ixd(f,RAc,null)}b==(Ymd(),Wmd)?Ixd(f,yAc,Wmd):Ixd(f,yAc,null)} -function O3c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;if(c.c.length!=0){o=new bnb;for(n=new Anb(c);n.a<n.c.c.length;){m=RD(ynb(n),27);Rmb(o,new rjd(m.i,m.j))}d.dh(b,'Before removing overlaps');while(p3c(a,c)){n3c(a,c,false)}d.dh(b,'After removing overlaps');h=0;i=0;e=null;if(c.c.length!=0){e=(tFb(0,c.c.length),RD(c.c[0],27));h=e.i-(tFb(0,o.c.length),RD(o.c[0],8)).a;i=e.j-(tFb(0,o.c.length),RD(o.c[0],8)).b}g=$wnd.Math.sqrt(h*h+i*i);l=M2c(c);f=1;if(l.a.gc()!=0){for(k=l.a.ec().Kc();k.Ob();){j=RD(k.Pb(),27);p=a.f;q=p.i+p.g/2;r=p.j+p.f/2;s=j.i+j.g/2;t=j.j+j.f/2;u=s-q;v=t-r;w=$wnd.Math.sqrt(u*u+v*v);A=u/w;B=v/w;Dyd(j,j.i+A*g);Eyd(j,j.j+B*g)}d.dh(b,'Child movement '+f);++f}!!a.a&&a.a.Gg(new dnb(l));O3c(a,b,new dnb(l),d)}} -function Fid(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=a;k=ojd(new rjd(b.a,b.b),a);j=c;l=ojd(new rjd(d.a,d.b),c);m=i.a;q=i.b;o=j.a;s=j.b;n=k.a;r=k.b;p=l.a;t=l.b;e=p*r-n*t;Zy();bz(vEe);if($wnd.Math.abs(0-e)<=vEe||0==e||isNaN(0)&&isNaN(e)){return false}g=1/e*((m-o)*r-(q-s)*n);h=1/e*-(-(m-o)*t+(q-s)*p);f=(null,bz(vEe),($wnd.Math.abs(0-g)<=vEe||0==g||isNaN(0)&&isNaN(g)?0:0<g?-1:0>g?1:cz(isNaN(0),isNaN(g)))<0&&(null,bz(vEe),($wnd.Math.abs(g-1)<=vEe||g==1||isNaN(g)&&isNaN(1)?0:g<1?-1:g>1?1:cz(isNaN(g),isNaN(1)))<0)&&(null,bz(vEe),($wnd.Math.abs(0-h)<=vEe||0==h||isNaN(0)&&isNaN(h)?0:0<h?-1:0>h?1:cz(isNaN(0),isNaN(h)))<0)&&(null,bz(vEe),($wnd.Math.abs(h-1)<=vEe||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:cz(isNaN(h),isNaN(1)))<0));return f} -function EXd(b){var c,d,e,f;d=b.D!=null?b.D:b.B;c=qhb(d,Fhb(91));if(c!=-1){e=(AFb(0,c,d.length),d.substr(0,c));f=new Qhb;do f.a+='[';while((c=phb(d,91,++c))!=-1);if(lhb(e,hve))f.a+='Z';else if(lhb(e,dKe))f.a+='B';else if(lhb(e,eKe))f.a+='C';else if(lhb(e,fKe))f.a+='D';else if(lhb(e,gKe))f.a+='F';else if(lhb(e,hKe))f.a+='I';else if(lhb(e,iKe))f.a+='J';else if(lhb(e,jKe))f.a+='S';else{f.a+='L';f.a+=''+e;f.a+=';'}try{return null}catch(a){a=zdb(a);if(!ZD(a,63))throw Adb(a)}}else if(qhb(d,Fhb(46))==-1){if(lhb(d,hve))return xdb;else if(lhb(d,dKe))return gE;else if(lhb(d,eKe))return hE;else if(lhb(d,fKe))return iE;else if(lhb(d,gKe))return jE;else if(lhb(d,hKe))return kE;else if(lhb(d,iKe))return lE;else if(lhb(d,jKe))return wdb}return null} -function pTb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;a.e=b;h=RSb(b);w=new bnb;for(d=new Anb(h);d.a<d.c.c.length;){c=RD(ynb(d),15);A=new bnb;ZEb(w.c,A);i=new _sb;for(o=c.Kc();o.Ob();){n=RD(o.Pb(),27);f=nTb(a,n,true,0,0);ZEb(A.c,f);p=n.i;q=n.j;new rjd(p,q);m=(!n.n&&(n.n=new C5d(I4,n,1,7)),n.n);for(l=new dMd(m);l.e!=l.i.gc();){j=RD(bMd(l),135);e=nTb(a,j,false,p,q);ZEb(A.c,e)}v=(!n.c&&(n.c=new C5d(K4,n,9,9)),n.c);for(s=new dMd(v);s.e!=s.i.gc();){r=RD(bMd(s),123);g=nTb(a,r,false,p,q);ZEb(A.c,g);t=r.i+p;u=r.j+q;m=(!r.n&&(r.n=new C5d(I4,r,1,7)),r.n);for(k=new dMd(m);k.e!=k.i.gc();){j=RD(bMd(k),135);e=nTb(a,j,false,t,u);ZEb(A.c,e)}}ye(i,Ux(Al(cD(WC(cJ,1),rve,20,0,[zGd(n),yGd(n)]))))}mTb(a,i,A)}a.f=new TRb(w);kQb(a.f,b);return a.f} -function Yje(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;for(l=new Dub(new wub(a));l.c!=l.d.a.d;){k=Cub(l);h=RD(k.d,58);b=RD(k.e,58);g=h.Dh();for(p=0,u=(g.i==null&&rYd(g),g.i).length;p<u;++p){j=(f=(g.i==null&&rYd(g),g.i),p>=0&&p<f.length?f[p]:null);if(j.rk()&&!j.sk()){if(ZD(j,102)){i=RD(j,19);(i.Bb&QHe)==0&&(w=Z5d(i),!(!!w&&(w.Bb&QHe)!=0))&&Xje(a,i,h,b)}else{nke();if(RD(j,69).xk()){c=(v=j,RD(!v?null:RD(b,54).gi(v),160));if(c){n=RD(h.Mh(j),160);d=c.gc();for(q=0,o=n.gc();q<o;++q){m=n.Tl(q);if(ZD(m,102)){t=n.Ul(q);e=cub(a,t);if(e==null&&t!=null){s=RD(m,19);if(!a.b||(s.Bb&QHe)!=0||!!Z5d(s)){continue}e=t}if(!c.Ol(m,e)){for(r=0;r<d;++r){if(c.Tl(r)==m&&dE(c.Ul(r))===dE(e)){c.Ti(c.gc()-1,r);--d;break}}}}else{c.Ol(n.Tl(q),n.Ul(q))}}}}}}}}} -function gIc(a,b,c){var d;c.Ug('StretchWidth layering',1);if(b.a.c.length==0){c.Vg();return}a.c=b;a.t=0;a.u=0;a.i=oxe;a.g=pxe;a.d=Kfb(UD(mQb(b,(yCc(),TBc))));aIc(a);bIc(a);$Hc(a);fIc(a);_Hc(a);a.i=$wnd.Math.max(1,a.i);a.g=$wnd.Math.max(1,a.g);a.d=a.d/a.i;a.f=a.g/a.i;a.s=dIc(a);d=new R4b(a.c);Rmb(a.c.b,d);a.r=bv(a.p);a.n=Fnb(a.k,a.k.length);while(a.r.c.length!=0){a.o=hIc(a);if(!a.o||cIc(a)&&a.b.a.gc()!=0){iIc(a,d);d=new R4b(a.c);Rmb(a.c.b,d);ye(a.a,a.b);a.b.a.$b();a.t=a.u;a.u=0}else{if(cIc(a)){a.c.b.c.length=0;d=new R4b(a.c);Rmb(a.c.b,d);a.t=0;a.u=0;a.b.a.$b();a.a.a.$b();++a.f;a.r=bv(a.p);a.n=Fnb(a.k,a.k.length)}else{g3b(a.o,d);Ymb(a.r,a.o);Ysb(a.b,a.o);a.t=a.t-a.k[a.o.p]*a.d+a.j[a.o.p];a.u+=a.e[a.o.p]*a.d}}}b.a.c.length=0;Eob(b.b);c.Vg()} -function sOc(a){var b,c,d,e,f,g,h,i,j,k,l;a.j=$C(kE,Pwe,28,a.g,15,1);a.o=new bnb;FDb(EDb(new SDb(null,new Swb(a.e.b,16)),new APc),new CPc(a));a.a=$C(xdb,Hye,28,a.b,16,1);MDb(new SDb(null,new Swb(a.e.b,16)),new RPc(a));d=(l=new bnb,FDb(CDb(EDb(new SDb(null,new Swb(a.e.b,16)),new HPc),new JPc(a)),new LPc(a,l)),l);for(i=new Anb(d);i.a<i.c.c.length;){h=RD(ynb(i),515);if(h.c.length<=1){continue}if(h.c.length==2){UOc(h);BOc((tFb(0,h.c.length),RD(h.c[0],18)).d.i)||Rmb(a.o,h);continue}if(TOc(h)||SOc(h,new FPc)){continue}j=new Anb(h);e=null;while(j.a<j.c.c.length){b=RD(ynb(j),18);c=a.c[b.p];!e||j.a>=j.c.c.length?(k=hOc((r3b(),p3b),o3b)):(k=hOc((r3b(),o3b),o3b));k*=2;f=c.a.g;c.a.g=$wnd.Math.max(f,f+(k-f));g=c.b.g;c.b.g=$wnd.Math.max(g,g+(k-g));e=b}}} -function qkc(a){var b,c,d,e;FDb(CDb(new SDb(null,new Swb(a.a.b,16)),new Qkc),new Skc);okc(a);FDb(CDb(new SDb(null,new Swb(a.a.b,16)),new Ukc),new Wkc);if(a.c==(Ymd(),Wmd)){FDb(CDb(EDb(new SDb(null,new Swb(new Xkb(a.f),1)),new clc),new elc),new glc(a));FDb(CDb(GDb(EDb(EDb(new SDb(null,new Swb(a.d.b,16)),new klc),new mlc),new olc),new qlc),new slc(a))}e=new rjd(oxe,oxe);b=new rjd(pxe,pxe);for(d=new Anb(a.a.b);d.a<d.c.c.length;){c=RD(ynb(d),60);e.a=$wnd.Math.min(e.a,c.d.c);e.b=$wnd.Math.min(e.b,c.d.d);b.a=$wnd.Math.max(b.a,c.d.c+c.d.b);b.b=$wnd.Math.max(b.b,c.d.d+c.d.a)}$id(hjd(a.d.c),fjd(new rjd(e.a,e.b)));$id(hjd(a.d.f),ojd(new rjd(b.a,b.b),e));pkc(a,e,b);akb(a.f);akb(a.b);akb(a.g);akb(a.e);a.a.a.c.length=0;a.a.b.c.length=0;a.a=null;a.d=null} -function JGb(a,b){var c;if(a.e){throw Adb(new dgb((lfb(lN),lye+lN.k+mye)))}if(!cGb(a.a,b)){throw Adb(new yz(nye+b+oye))}if(b==a.d){return a}c=a.d;a.d=b;switch(c.g){case 0:switch(b.g){case 2:GGb(a);break;case 1:OGb(a);GGb(a);break;case 4:UGb(a);GGb(a);break;case 3:UGb(a);OGb(a);GGb(a);}break;case 2:switch(b.g){case 1:OGb(a);PGb(a);break;case 4:UGb(a);GGb(a);break;case 3:UGb(a);OGb(a);GGb(a);}break;case 1:switch(b.g){case 2:OGb(a);PGb(a);break;case 4:OGb(a);UGb(a);GGb(a);break;case 3:OGb(a);UGb(a);OGb(a);GGb(a);}break;case 4:switch(b.g){case 2:UGb(a);GGb(a);break;case 1:UGb(a);OGb(a);GGb(a);break;case 3:OGb(a);PGb(a);}break;case 3:switch(b.g){case 2:OGb(a);UGb(a);GGb(a);break;case 1:OGb(a);UGb(a);OGb(a);GGb(a);break;case 4:OGb(a);PGb(a);}}return a} -function vYb(a,b){var c;if(a.d){throw Adb(new dgb((lfb(eQ),lye+eQ.k+mye)))}if(!eYb(a.a,b)){throw Adb(new yz(nye+b+oye))}if(b==a.c){return a}c=a.c;a.c=b;switch(c.g){case 0:switch(b.g){case 2:sYb(a);break;case 1:zYb(a);sYb(a);break;case 4:DYb(a);sYb(a);break;case 3:DYb(a);zYb(a);sYb(a);}break;case 2:switch(b.g){case 1:zYb(a);AYb(a);break;case 4:DYb(a);sYb(a);break;case 3:DYb(a);zYb(a);sYb(a);}break;case 1:switch(b.g){case 2:zYb(a);AYb(a);break;case 4:zYb(a);DYb(a);sYb(a);break;case 3:zYb(a);DYb(a);zYb(a);sYb(a);}break;case 4:switch(b.g){case 2:DYb(a);sYb(a);break;case 1:DYb(a);zYb(a);sYb(a);break;case 3:zYb(a);AYb(a);}break;case 3:switch(b.g){case 2:zYb(a);DYb(a);sYb(a);break;case 1:zYb(a);DYb(a);zYb(a);sYb(a);break;case 4:zYb(a);AYb(a);}}return a} -function Csd(a,b){var c,d,e,f,g,h,i,j;if(ZD(a.Eh(),167)){Csd(RD(a.Eh(),167),b);b.a+=' > '}else{b.a+='Root '}c=a.Dh().zb;lhb(c.substr(0,3),'Elk')?Zhb(b,(BFb(3,c.length+1),c.substr(3))):(b.a+=''+c,b);e=a.jh();if(e){Zhb((b.a+=' ',b),e);return}if(ZD(a,366)){j=RD(a,135).a;if(j){Zhb((b.a+=' ',b),j);return}}for(g=new dMd(a.kh());g.e!=g.i.gc();){f=RD(bMd(g),135);j=f.a;if(j){Zhb((b.a+=' ',b),j);return}}if(ZD(a,326)){d=RD(a,74);!d.b&&(d.b=new Yie(E4,d,4,7));if(d.b.i!=0&&(!d.c&&(d.c=new Yie(E4,d,5,8)),d.c.i!=0)){b.a+=' (';h=new mMd((!d.b&&(d.b=new Yie(E4,d,4,7)),d.b));while(h.e!=h.i.gc()){h.e>0&&(b.a+=pve,b);Csd(RD(bMd(h),167),b)}b.a+=SAe;i=new mMd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c));while(i.e!=i.i.gc()){i.e>0&&(b.a+=pve,b);Csd(RD(bMd(i),167),b)}b.a+=')'}}} -function LTb(a,b,c){var d,e,f,g,h,i,j,k;for(i=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));i.e!=i.i.gc();){h=RD(bMd(i),27);for(e=new is(Mr(zGd(h).a.Kc(),new ir));gs(e);){d=RD(hs(e),74);!d.b&&(d.b=new Yie(E4,d,4,7));if(!(d.b.i<=1&&(!d.c&&(d.c=new Yie(E4,d,5,8)),d.c.i<=1))){throw Adb(new Ked('Graph must not contain hyperedges.'))}if(!nzd(d)&&h!=AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84))){j=new cUb;kQb(j,d);pQb(j,(JVb(),HVb),d);_Tb(j,RD(Wd(qtb(c.f,h)),153));aUb(j,RD(Wjb(c,AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84))),153));Rmb(b.c,j);for(g=new dMd((!d.n&&(d.n=new C5d(I4,d,1,7)),d.n));g.e!=g.i.gc();){f=RD(bMd(g),135);k=new iUb(j,f.a);kQb(k,f);pQb(k,HVb,f);k.e.a=$wnd.Math.max(f.g,1);k.e.b=$wnd.Math.max(f.f,1);hUb(k);Rmb(b.d,k)}}}}} -function Vec(a,b,c){var d,e,f,g,h,i,j,k,l,m;c.Ug('Node promotion heuristic',1);a.i=b;a.r=RD(mQb(b,(yCc(),ZAc)),243);a.r!=(aEc(),TDc)&&a.r!=UDc?Tec(a):Uec(a);k=RD(mQb(a.i,YAc),17).a;f=new nfc;switch(a.r.g){case 2:case 1:Yec(a,f);break;case 3:a.r=_Dc;Yec(a,f);i=0;for(h=new Anb(a.b);h.a<h.c.c.length;){g=RD(ynb(h),17);i=$wnd.Math.max(i,g.a)}if(i>a.k){a.r=VDc;Yec(a,f)}break;case 4:a.r=_Dc;Yec(a,f);j=0;for(e=new Anb(a.c);e.a<e.c.c.length;){d=UD(ynb(e));j=$wnd.Math.max(j,(uFb(d),d))}if(j>a.n){a.r=YDc;Yec(a,f)}break;case 6:m=eE($wnd.Math.ceil(a.g.length*k/100));Yec(a,new qfc(m));break;case 5:l=eE($wnd.Math.ceil(a.e*k/100));Yec(a,new tfc(l));break;case 8:Sec(a,true);break;case 9:Sec(a,false);break;default:Yec(a,f);}a.r!=TDc&&a.r!=UDc?Zec(a,b):$ec(a,b);c.Vg()} -function $rc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;l=a.b;k=new Jkb(l,0);Ikb(k,new R4b(a));s=false;g=1;while(k.b<k.d.gc()){j=(sFb(k.b<k.d.gc()),RD(k.d.Xb(k.c=k.b++),30));p=(tFb(g,l.c.length),RD(l.c[g],30));q=bv(j.a);r=q.c.length;for(o=new Anb(q);o.a<o.c.c.length;){m=RD(ynb(o),10);g3b(m,p)}if(s){for(n=hv(q).Kc();n.Ob();){m=RD(n.Pb(),10);for(f=new Anb(bv(Z2b(m)));f.a<f.c.c.length;){e=RD(ynb(f),18);X0b(e,true);pQb(a,(Ywc(),awc),(Geb(),true));d=osc(a,e,r);c=RD(mQb(m,Wvc),313);t=RD(Vmb(d,d.c.length-1),18);c.k=t.c.i;c.n=t;c.b=e.d.i;c.c=e}}s=false}else{if(q.c.length!=0){b=(tFb(0,q.c.length),RD(q.c[0],10));if(b.k==(r3b(),l3b)){s=true;g=-1}}}++g}h=new Jkb(a.b,0);while(h.b<h.d.gc()){i=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),30));i.a.c.length==0&&Ckb(h)}} -function FJb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;l=new CLb(a);_Mb(l,!(b==(Cmd(),Bmd)||b==xmd));k=l.a;m=new z3b;for(e=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])),g=0,i=e.length;g<i;++g){c=e[g];j=oKb(k,WJb,c);!!j&&(m.d=$wnd.Math.max(m.d,j.jf()))}for(d=cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb]),f=0,h=d.length;f<h;++f){c=d[f];j=oKb(k,YJb,c);!!j&&(m.a=$wnd.Math.max(m.a,j.jf()))}for(p=cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb]),r=0,t=p.length;r<t;++r){n=p[r];j=oKb(k,n,WJb);!!j&&(m.b=$wnd.Math.max(m.b,j.kf()))}for(o=cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb]),q=0,s=o.length;q<s;++q){n=o[q];j=oKb(k,n,YJb);!!j&&(m.c=$wnd.Math.max(m.c,j.kf()))}if(m.d>0){m.d+=k.n.d;m.d+=k.d}if(m.a>0){m.a+=k.n.a;m.a+=k.d}if(m.b>0){m.b+=k.n.b;m.b+=k.d}if(m.c>0){m.c+=k.n.c;m.c+=k.d}return m} -function u9b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;m=c.d;l=c.c;f=new rjd(c.f.a+c.d.b+c.d.c,c.f.b+c.d.d+c.d.a);g=f.b;for(j=new Anb(a.a);j.a<j.c.c.length;){h=RD(ynb(j),10);if(h.k!=(r3b(),m3b)){continue}d=RD(mQb(h,(Ywc(),hwc)),64);e=RD(mQb(h,iwc),8);k=h.n;switch(d.g){case 2:k.a=c.f.a+m.c-l.a;break;case 4:k.a=-l.a-m.b;}o=0;switch(d.g){case 2:case 4:if(b==(Bod(),xod)){n=Kfb(UD(mQb(h,Jwc)));k.b=f.b*n-RD(mQb(h,(yCc(),zBc)),8).b;o=k.b+e.b;U2b(h,false,true)}else if(b==wod){k.b=Kfb(UD(mQb(h,Jwc)))-RD(mQb(h,(yCc(),zBc)),8).b;o=k.b+e.b;U2b(h,false,true)}}g=$wnd.Math.max(g,o)}c.f.b+=g-f.b;for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),10);if(h.k!=(r3b(),m3b)){continue}d=RD(mQb(h,(Ywc(),hwc)),64);k=h.n;switch(d.g){case 1:k.b=-l.b-m.d;break;case 3:k.b=c.f.b+m.a-l.b;}}} -function nNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;k=RD(RD(Qc(a.r,b),21),87);if(k.gc()<=2||b==(qpd(),Xod)||b==(qpd(),ppd)){rNb(a,b);return}p=a.u.Hc((Pod(),Ood));c=b==(qpd(),Yod)?(mOb(),lOb):(mOb(),iOb);r=b==Yod?(vLb(),sLb):(vLb(),uLb);d=WNb(_Nb(c),a.s);q=b==Yod?oxe:pxe;for(j=k.Kc();j.Ob();){h=RD(j.Pb(),117);if(!h.c||h.c.d.c.length<=0){continue}o=h.b.Mf();n=h.e;l=h.c;m=l.i;m.b=(f=l.n,l.e.a+f.b+f.c);m.a=(g=l.n,l.e.b+g.d+g.a);if(p){m.c=n.a-(e=l.n,l.e.a+e.b+e.c)-a.s;p=false}else{m.c=n.a+o.a+a.s}Ivb(r,Pye);l.f=r;RKb(l,(EKb(),DKb));Rmb(d.d,new sOb(m,UNb(d,m)));q=b==Yod?$wnd.Math.min(q,n.b):$wnd.Math.max(q,n.b+h.b.Mf().b)}q+=b==Yod?-a.t:a.t;VNb((d.e=q,d));for(i=k.Kc();i.Ob();){h=RD(i.Pb(),117);if(!h.c||h.c.d.c.length<=0){continue}m=h.c.i;m.c-=h.e.a;m.d-=h.e.b}} -function D0b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;e=new bnb;for(p=new Anb(b.a);p.a<p.c.c.length;){o=RD(ynb(p),10);n=o.e;if(n){d=D0b(a,n,o);Tmb(e,d);A0b(a,n,o);if(RD(mQb(n,(Ywc(),kwc)),21).Hc((ovc(),hvc))){s=RD(mQb(o,(yCc(),BBc)),101);m=RD(mQb(o,EBc),181).Hc((Pod(),Lod));for(r=new Anb(o.j);r.a<r.c.c.length;){q=RD(ynb(r),12);f=RD(Wjb(a.b,q),10);if(!f){f=f2b(q,s,q.j,-(q.e.c.length-q.g.c.length),null,new pjd,q.o,RD(mQb(n,rAc),88),n);pQb(f,Awc,q);Zjb(a.b,q,f);Rmb(n.a,f)}g=RD(Vmb(f.j,0),12);for(k=new Anb(q.f);k.a<k.c.c.length;){j=RD(ynb(k),72);h=new x2b;h.o.a=j.o.a;h.o.b=j.o.b;Rmb(g.f,h);if(!m){t=q.j;l=0;Rod(RD(mQb(o,EBc),21))&&(l=qsd(j.n,j.o,q.o,0,t));s==(Bod(),zod)||(qpd(),apd).Hc(t)?(h.o.a=l):(h.o.b=l)}}}}}}i=new bnb;z0b(a,b,c,e,i);!!c&&B0b(a,b,c,i);return i} -function NIc(a,b,c){var d,e,f,g,h,i,j,k,l;if(a.c[b.c.p][b.p].e){return}else{a.c[b.c.p][b.p].e=true}a.c[b.c.p][b.p].b=0;a.c[b.c.p][b.p].d=0;a.c[b.c.p][b.p].a=null;for(k=new Anb(b.j);k.a<k.c.c.length;){j=RD(ynb(k),12);l=c?new T3b(j):new _3b(j);for(i=l.Kc();i.Ob();){h=RD(i.Pb(),12);g=h.i;if(g.c==b.c){if(g!=b){NIc(a,g,c);a.c[b.c.p][b.p].b+=a.c[g.c.p][g.p].b;a.c[b.c.p][b.p].d+=a.c[g.c.p][g.p].d}}else{a.c[b.c.p][b.p].d+=a.g[h.p];++a.c[b.c.p][b.p].b}}}f=RD(mQb(b,(Ywc(),Uvc)),15);if(f){for(e=f.Kc();e.Ob();){d=RD(e.Pb(),10);if(b.c==d.c){NIc(a,d,c);a.c[b.c.p][b.p].b+=a.c[d.c.p][d.p].b;a.c[b.c.p][b.p].d+=a.c[d.c.p][d.p].d}}}if(a.c[b.c.p][b.p].b>0){a.c[b.c.p][b.p].d+=Kwb(a.i,24)*Nxe*0.07000000029802322-0.03500000014901161;a.c[b.c.p][b.p].a=a.c[b.c.p][b.p].d/a.c[b.c.p][b.p].b}} -function D8b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;for(o=new Anb(a);o.a<o.c.c.length;){n=RD(ynb(o),10);E8b(n.n);E8b(n.o);F8b(n.f);I8b(n);K8b(n);for(q=new Anb(n.j);q.a<q.c.c.length;){p=RD(ynb(q),12);E8b(p.n);E8b(p.a);E8b(p.o);Q3b(p,J8b(p.j));f=RD(mQb(p,(yCc(),CBc)),17);!!f&&pQb(p,CBc,sgb(-f.a));for(e=new Anb(p.g);e.a<e.c.c.length;){d=RD(ynb(e),18);for(c=Sub(d.a,0);c.b!=c.d.c;){b=RD(evb(c),8);E8b(b)}i=RD(mQb(d,RAc),75);if(i){for(h=Sub(i,0);h.b!=h.d.c;){g=RD(evb(h),8);E8b(g)}}for(l=new Anb(d.b);l.a<l.c.c.length;){j=RD(ynb(l),72);E8b(j.n);E8b(j.o)}}for(m=new Anb(p.f);m.a<m.c.c.length;){j=RD(ynb(m),72);E8b(j.n);E8b(j.o)}}if(n.k==(r3b(),m3b)){pQb(n,(Ywc(),hwc),J8b(RD(mQb(n,hwc),64)));H8b(n)}for(k=new Anb(n.b);k.a<k.c.c.length;){j=RD(ynb(k),72);I8b(j);E8b(j.o);E8b(j.n)}}} -function iEd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;D=Wjb(a.e,d);if(D==null){D=new uC;n=RD(D,190);s=b+'_s';t=s+e;m=new OC(t);sC(n,uIe,m)}C=RD(D,190);oDd(c,C);G=new uC;qDd(G,'x',d.j);qDd(G,'y',d.k);sC(C,xIe,G);A=new uC;qDd(A,'x',d.b);qDd(A,'y',d.c);sC(C,'endPoint',A);l=cve((!d.a&&(d.a=new XZd(D4,d,5)),d.a));o=!l;if(o){w=new MB;f=new qFd(w);xgb((!d.a&&(d.a=new XZd(D4,d,5)),d.a),f);sC(C,nIe,w)}i=Dzd(d);u=!!i;u&&rDd(a.a,C,pIe,KDd(a,Dzd(d)));r=Ezd(d);v=!!r;v&&rDd(a.a,C,oIe,KDd(a,Ezd(d)));j=(!d.e&&(d.e=new Yie(F4,d,10,9)),d.e).i==0;p=!j;if(p){B=new MB;g=new sFd(a,B);xgb((!d.e&&(d.e=new Yie(F4,d,10,9)),d.e),g);sC(C,rIe,B)}k=(!d.g&&(d.g=new Yie(F4,d,9,10)),d.g).i==0;q=!k;if(q){F=new MB;h=new uFd(a,F);xgb((!d.g&&(d.g=new Yie(F4,d,9,10)),d.g),h);sC(C,qIe,F)}} -function XMb(a){RMb();var b,c,d,e,f,g,h;d=a.f.n;for(g=ki(a.r).a.nc();g.Ob();){f=RD(g.Pb(),117);e=0;if(f.b.pf((umd(),Gld))){e=Kfb(UD(f.b.of(Gld)));if(e<0){switch(f.b.ag().g){case 1:d.d=$wnd.Math.max(d.d,-e);break;case 3:d.a=$wnd.Math.max(d.a,-e);break;case 2:d.c=$wnd.Math.max(d.c,-e);break;case 4:d.b=$wnd.Math.max(d.b,-e);}}}if(Rod(a.u)){b=rsd(f.b,e);h=!RD(a.e.of(pld),181).Hc((dqd(),Wpd));c=false;switch(f.b.ag().g){case 1:c=b>d.d;d.d=$wnd.Math.max(d.d,b);if(h&&c){d.d=$wnd.Math.max(d.d,d.a);d.a=d.d+e}break;case 3:c=b>d.a;d.a=$wnd.Math.max(d.a,b);if(h&&c){d.a=$wnd.Math.max(d.a,d.d);d.d=d.a+e}break;case 2:c=b>d.c;d.c=$wnd.Math.max(d.c,b);if(h&&c){d.c=$wnd.Math.max(d.b,d.c);d.b=d.c+e}break;case 4:c=b>d.b;d.b=$wnd.Math.max(d.b,b);if(h&&c){d.b=$wnd.Math.max(d.b,d.c);d.c=d.b+e}}}}} -function pA(a,b){var c,d,e,f,g,h,i,j,k;j='';if(b.length==0){return a.ne(ywe,wwe,-1,-1)}k=Dhb(b);lhb(k.substr(0,3),'at ')&&(k=(BFb(3,k.length+1),k.substr(3)));k=k.replace(/\[.*?\]/g,'');g=k.indexOf('(');if(g==-1){g=k.indexOf('@');if(g==-1){j=k;k=''}else{j=Dhb((BFb(g+1,k.length+1),k.substr(g+1)));k=Dhb((AFb(0,g,k.length),k.substr(0,g)))}}else{c=k.indexOf(')',g);j=(AFb(g+1,c,k.length),k.substr(g+1,c-(g+1)));k=Dhb((AFb(0,g,k.length),k.substr(0,g)))}g=qhb(k,Fhb(46));g!=-1&&(k=(BFb(g+1,k.length+1),k.substr(g+1)));(k.length==0||lhb(k,'Anonymous function'))&&(k=wwe);h=thb(j,Fhb(58));e=uhb(j,Fhb(58),h-1);i=-1;d=-1;f=ywe;if(h!=-1&&e!=-1){f=(AFb(0,e,j.length),j.substr(0,e));i=jA((AFb(e+1,h,j.length),j.substr(e+1,h-(e+1))));d=jA((BFb(h+1,j.length+1),j.substr(h+1)))}return a.ne(f,k,i,d)} -function C6b(a){var b,c,d,e,f,g,h,i,j,k,l;for(j=new Anb(a);j.a<j.c.c.length;){i=RD(ynb(j),10);g=RD(mQb(i,(yCc(),UAc)),171);f=null;switch(g.g){case 1:case 2:f=(huc(),guc);break;case 3:case 4:f=(huc(),euc);}if(f){pQb(i,(Ywc(),bwc),(huc(),guc));f==euc?F6b(i,g,(BEc(),yEc)):f==guc&&F6b(i,g,(BEc(),zEc))}else{if(Dod(RD(mQb(i,BBc),101))&&i.j.c.length!=0){b=true;for(l=new Anb(i.j);l.a<l.c.c.length;){k=RD(ynb(l),12);if(!(k.j==(qpd(),Xod)&&k.e.c.length-k.g.c.length>0||k.j==ppd&&k.e.c.length-k.g.c.length<0)){b=false;break}for(e=new Anb(k.g);e.a<e.c.c.length;){c=RD(ynb(e),18);h=RD(mQb(c.d.i,UAc),171);if(h==(cxc(),_wc)||h==axc){b=false;break}}for(d=new Anb(k.e);d.a<d.c.c.length;){c=RD(ynb(d),18);h=RD(mQb(c.c.i,UAc),171);if(h==(cxc(),Zwc)||h==$wc){b=false;break}}}b&&F6b(i,g,(BEc(),AEc))}}}} -function LNc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;w=0;n=0;for(l=new Anb(b.e);l.a<l.c.c.length;){k=RD(ynb(l),10);m=0;h=0;i=c?RD(mQb(k,HNc),17).a:qwe;r=d?RD(mQb(k,INc),17).a:qwe;j=$wnd.Math.max(i,r);for(t=new Anb(k.j);t.a<t.c.c.length;){s=RD(ynb(t),12);u=k.n.b+s.n.b+s.a.b;if(d){for(g=new Anb(s.g);g.a<g.c.c.length;){f=RD(ynb(g),18);p=f.d;o=p.i;if(b!=a.a[o.p]){q=$wnd.Math.max(RD(mQb(o,HNc),17).a,RD(mQb(o,INc),17).a);v=RD(mQb(f,(yCc(),MBc)),17).a;if(v>=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}if(c){for(g=new Anb(s.e);g.a<g.c.c.length;){f=RD(ynb(g),18);p=f.c;o=p.i;if(b!=a.a[o.p]){q=$wnd.Math.max(RD(mQb(o,HNc),17).a,RD(mQb(o,INc),17).a);v=RD(mQb(f,(yCc(),MBc)),17).a;if(v>=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}}if(h>0){w+=m/h;++n}}if(n>0){b.a=e*w/n;b.g=n}else{b.a=0;b.g=0}} -function hTb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;f=a.f.b;m=f.a;k=f.b;o=a.e.g;n=a.e.f;zyd(a.e,f.a,f.b);w=m/o;A=k/n;for(j=new dMd(iyd(a.e));j.e!=j.i.gc();){i=RD(bMd(j),135);Dyd(i,i.i*w);Eyd(i,i.j*A)}for(s=new dMd(wCd(a.e));s.e!=s.i.gc();){r=RD(bMd(s),123);u=r.i;v=r.j;u>0&&Dyd(r,u*w);v>0&&Eyd(r,v*A)}Bvb(a.b,new tTb);b=new bnb;for(h=new vkb((new mkb(a.c)).a);h.b;){g=tkb(h);d=RD(g.ld(),74);c=RD(g.md(),407).a;e=IGd(d,false,false);l=fTb(JGd(d),ssd(e),c);lsd(l,e);t=KGd(d);if(!!t&&Wmb(b,t,0)==-1){ZEb(b.c,t);gTb(t,(sFb(l.b!=0),RD(l.a.a.c,8)),c)}}for(q=new vkb((new mkb(a.d)).a);q.b;){p=tkb(q);d=RD(p.ld(),74);c=RD(p.md(),407).a;e=IGd(d,false,false);l=fTb(LGd(d),Ijd(ssd(e)),c);l=Ijd(l);lsd(l,e);t=MGd(d);if(!!t&&Wmb(b,t,0)==-1){ZEb(b.c,t);gTb(t,(sFb(l.b!=0),RD(l.c.b.c,8)),c)}}} -function GJb(a,b,c,d){var e,f,g,h,i;h=new CLb(b);iNb(h,d);e=true;if(!!a&&a.pf((umd(),Nkd))){f=RD(a.of((umd(),Nkd)),88);e=f==(Cmd(),Amd)||f==ymd||f==zmd}$Mb(h,false);Umb(h.e.Rf(),new dNb(h,false,e));EMb(h,h.f,(ZJb(),WJb),(qpd(),Yod));EMb(h,h.f,YJb,npd);EMb(h,h.g,WJb,ppd);EMb(h,h.g,YJb,Xod);GMb(h,Yod);GMb(h,npd);FMb(h,Xod);FMb(h,ppd);RMb();g=h.A.Hc((Qpd(),Mpd))&&h.B.Hc((dqd(),$pd))?SMb(h):null;!!g&&uKb(h.a,g);XMb(h);xMb(h);GNb(h);sMb(h);gNb(h);yNb(h);oNb(h,Yod);oNb(h,npd);tMb(h);fNb(h);if(!c){return h.o}VMb(h);CNb(h);oNb(h,Xod);oNb(h,ppd);i=h.B.Hc((dqd(),_pd));IMb(h,i,Yod);IMb(h,i,npd);JMb(h,i,Xod);JMb(h,i,ppd);FDb(new SDb(null,new Swb(new glb(h.i),0)),new KMb);FDb(CDb(new SDb(null,ki(h.r).a.oc()),new MMb),new OMb);WMb(h);h.e.Pf(h.o);FDb(new SDb(null,ki(h.r).a.oc()),new YMb);return h.o} -function LYb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=oxe;for(d=new Anb(a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),86);j=$wnd.Math.min(j,b.d.f.g.c+b.e.a)}n=new Yub;for(g=new Anb(a.a.a);g.a<g.c.c.length;){f=RD(ynb(g),194);f.i=j;f.e==0&&(Pub(n,f,n.c.b,n.c),true)}while(n.b!=0){f=RD(n.b==0?null:(sFb(n.b!=0),Wub(n,n.a.a)),194);e=f.f.g.c;for(m=f.a.a.ec().Kc();m.Ob();){k=RD(m.Pb(),86);p=f.i+k.e.a;k.d.g||k.g.c<p?(k.o=p):(k.o=k.g.c)}e-=f.f.o;f.b+=e;a.c==(Cmd(),zmd)||a.c==xmd?(f.c+=e):(f.c-=e);for(l=f.a.a.ec().Kc();l.Ob();){k=RD(l.Pb(),86);for(i=k.f.Kc();i.Ob();){h=RD(i.Pb(),86);Dmd(a.c)?(o=a.f.yf(k,h)):(o=a.f.zf(k,h));h.d.i=$wnd.Math.max(h.d.i,k.o+k.g.b+o-h.e.a);h.k||(h.d.i=$wnd.Math.max(h.d.i,h.g.c-h.e.a));--h.d.e;h.d.e==0&&Mub(n,h.d)}}}for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);b.g.c=b.o}} -function vOb(a){var b,c,d,e,f,g,h,i;h=a.b;b=a.a;switch(RD(mQb(a,(YHb(),UHb)),435).g){case 0:_mb(h,new Frb(new UOb));break;case 1:default:_mb(h,new Frb(new ZOb));}switch(RD(mQb(a,SHb),436).g){case 1:_mb(h,new POb);_mb(h,new cPb);_mb(h,new xOb);break;case 0:default:_mb(h,new POb);_mb(h,new IOb);}switch(RD(mQb(a,WHb),257).g){case 0:i=new wPb;break;case 1:i=new qPb;break;case 2:i=new tPb;break;case 3:i=new nPb;break;case 5:i=new APb(new tPb);break;case 4:i=new APb(new qPb);break;case 7:i=new kPb(new APb(new qPb),new APb(new tPb));break;case 8:i=new kPb(new APb(new nPb),new APb(new tPb));break;case 6:default:i=new APb(new nPb);}for(g=new Anb(h);g.a<g.c.c.length;){f=RD(ynb(g),176);d=0;e=0;c=new Ptd(sgb(d),sgb(e));while(ZPb(b,f,d,e)){c=RD(i.Ve(c,f),42);d=RD(c.a,17).a;e=RD(c.b,17).a}WPb(b,f,d,e)}} -function T_c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;c.Ug(_Ee,1);m=(q$c(),XZc);a.a==(s_c(),p_c)&&(m=VZc);k=0;yob();b.jd(new uGd(m));f=b.gc();h=b.fd(b.gc());j=true;while(j&&h.Sb()){s=RD(h.Ub(),39);RD(mQb(s,m),17).a==0?--f:(j=false)}w=b.kd(0,f);g=new Zub(w);w=b.kd(f,b.gc());i=new Zub(w);if(g.b==0){for(p=Sub(i,0);p.b!=p.d.c;){o=RD(evb(p),39);pQb(o,i$c,sgb(k++))}}else{l=g.b;for(v=Sub(g,0);v.b!=v.d.c;){u=RD(evb(v),39);pQb(u,i$c,sgb(k++));d=$Wc(u);T_c(a,d,c.eh(1/l|0));tvb(d,Fob(new uGd(i$c)));n=new Yub;for(t=Sub(d,0);t.b!=t.d.c;){s=RD(evb(t),39);for(r=Sub(u.d,0);r.b!=r.d.c;){q=RD(evb(r),65);q.c==s&&(Pub(n,q,n.c.b,n.c),true)}}Xub(u.d);ye(u.d,n);h=Sub(i,i.b);e=u.d.b;j=true;while(0<e&&j&&h.Sb()){s=RD(h.Ub(),39);if(RD(mQb(s,m),17).a==0){pQb(s,i$c,sgb(k++));--e;h.Qb()}else{j=false}}}}c.Vg()} -function S3c(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;l=Kfb(UD(Gxd(a,($4c(),W4c))));if(Heb(TD(Gxd(a,U4c)))){k=RD(Gxd(a,(u2c(),t2c)),27);f=RD(QHd(mzd(RD(QHd((!k.e&&(k.e=new Yie(G4,k,7,4)),k.e),(!k.e&&(k.e=new Yie(G4,k,7,4)),k.e).i-1),74)),0),27);d=RD(QHd(mzd(RD(QHd((!k.e&&(k.e=new Yie(G4,k,7,4)),k.e),0),74)),0),27);g=new rjd(f.i+f.g/2,f.j+f.f/2);e=new rjd(d.i+d.g/2,d.j+d.f/2);c=l;c<=0&&(c+=dFe);m=$wnd.Math.acos((g.a*e.a+g.b*e.b)/($wnd.Math.sqrt(g.a*g.a+g.b*g.b)*$wnd.Math.sqrt(e.a*e.a+e.b*e.b)));m<=0&&(m+=dFe);b=$wnd.Math.atan2(g.b,g.a);b<=0&&(b+=dFe);l=FEe-(b-c+m/2)}for(i=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));i.e!=i.i.gc();){h=RD(bMd(i),27);j=new rjd(h.i+h.g/2,h.j+h.f/2);n=j.a*$wnd.Math.cos(l)-j.b*$wnd.Math.sin(l);j.b=j.a*$wnd.Math.sin(l)+j.b*$wnd.Math.cos(l);j.a=n;Byd(h,j.a-h.g/2,j.b-h.f/2)}} -function qcc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;b.Ug('Inverted port preprocessing',1);k=a.b;j=new Jkb(k,0);c=null;t=new bnb;while(j.b<j.d.gc()){s=c;c=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),30));for(n=new Anb(t);n.a<n.c.c.length;){l=RD(ynb(n),10);g3b(l,s)}t.c.length=0;for(o=new Anb(c.a);o.a<o.c.c.length;){l=RD(ynb(o),10);if(l.k!=(r3b(),p3b)){continue}if(!Dod(RD(mQb(l,(yCc(),BBc)),101))){continue}for(r=d3b(l,(BEc(),yEc),(qpd(),Xod)).Kc();r.Ob();){p=RD(r.Pb(),12);i=p.e;h=RD(anb(i,$C(WQ,VAe,18,i.c.length,0,1)),482);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];occ(a,p,d,t)}}for(q=d3b(l,zEc,ppd).Kc();q.Ob();){p=RD(q.Pb(),12);i=p.g;h=RD(anb(i,$C(WQ,VAe,18,i.c.length,0,1)),482);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];pcc(a,p,d,t)}}}}for(m=new Anb(t);m.a<m.c.c.length;){l=RD(ynb(m),10);g3b(l,c)}b.Vg()} -function NUc(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t;m=null;d==(dVc(),bVc)?(m=b):d==cVc&&(m=c);for(p=m.a.ec().Kc();p.Ob();){o=RD(p.Pb(),12);q=xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).b;t=new _sb;h=new _sb;for(j=new l4b(o.b);xnb(j.a)||xnb(j.b);){i=RD(xnb(j.a)?ynb(j.a):ynb(j.b),18);if(Heb(TD(mQb(i,(Ywc(),Nwc))))!=e){continue}if(Wmb(f,i,0)!=-1){i.d==o?(r=i.c):(r=i.d);s=xjd(cD(WC(l3,1),Nve,8,0,[r.i.n,r.n,r.a])).b;if($wnd.Math.abs(s-q)<0.2){continue}s<q?b.a._b(r)?Ysb(t,new Ptd(bVc,i)):Ysb(t,new Ptd(cVc,i)):b.a._b(r)?Ysb(h,new Ptd(bVc,i)):Ysb(h,new Ptd(cVc,i))}}if(t.a.gc()>1){n=new xVc(o,t,d);xgb(t,new nVc(a,n));ZEb(g.c,n);for(l=t.a.ec().Kc();l.Ob();){k=RD(l.Pb(),42);Ymb(f,k.b)}}if(h.a.gc()>1){n=new xVc(o,h,d);xgb(h,new pVc(a,n));ZEb(g.c,n);for(l=h.a.ec().Kc();l.Ob();){k=RD(l.Pb(),42);Ymb(f,k.b)}}}} -function p6b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;p=a.n;q=a.o;m=a.d;l=Kfb(UD(hFc(a,(yCc(),QBc))));if(b){k=l*(b.gc()-1);n=0;for(i=b.Kc();i.Ob();){g=RD(i.Pb(),10);k+=g.o.a;n=$wnd.Math.max(n,g.o.b)}r=p.a-(k-q.a)/2;f=p.b-m.d+n;d=q.a/(b.gc()+1);e=d;for(h=b.Kc();h.Ob();){g=RD(h.Pb(),10);g.n.a=r;g.n.b=f-g.o.b;r+=g.o.a+l;j=n6b(g);j.n.a=g.o.a/2-j.a.a;j.n.b=g.o.b;o=RD(mQb(g,(Ywc(),Xvc)),12);if(o.e.c.length+o.g.c.length==1){o.n.a=e-o.a.a;o.n.b=0;P3b(o,a)}e+=d}}if(c){k=l*(c.gc()-1);n=0;for(i=c.Kc();i.Ob();){g=RD(i.Pb(),10);k+=g.o.a;n=$wnd.Math.max(n,g.o.b)}r=p.a-(k-q.a)/2;f=p.b+q.b+m.a-n;d=q.a/(c.gc()+1);e=d;for(h=c.Kc();h.Ob();){g=RD(h.Pb(),10);g.n.a=r;g.n.b=f;r+=g.o.a+l;j=n6b(g);j.n.a=g.o.a/2-j.a.a;j.n.b=0;o=RD(mQb(g,(Ywc(),Xvc)),12);if(o.e.c.length+o.g.c.length==1){o.n.a=e-o.a.a;o.n.b=q.b;P3b(o,a)}e+=d}}} -function Hac(a,b){var c,d,e,f,g,h;if(!RD(mQb(b,(Ywc(),kwc)),21).Hc((ovc(),hvc))){return}for(h=new Anb(b.a);h.a<h.c.c.length;){f=RD(ynb(h),10);if(f.k==(r3b(),p3b)){e=RD(mQb(f,(yCc(),_Ac)),140);a.c=$wnd.Math.min(a.c,f.n.a-e.b);a.a=$wnd.Math.max(a.a,f.n.a+f.o.a+e.c);a.d=$wnd.Math.min(a.d,f.n.b-e.d);a.b=$wnd.Math.max(a.b,f.n.b+f.o.b+e.a)}}for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(f.k!=(r3b(),p3b)){switch(f.k.g){case 2:d=RD(mQb(f,(yCc(),UAc)),171);if(d==(cxc(),$wc)){f.n.a=a.c-10;Gac(f,new Oac).Jb(new Rac(f));break}if(d==axc){f.n.a=a.a+10;Gac(f,new Uac).Jb(new Xac(f));break}c=RD(mQb(f,owc),311);if(c==(Gvc(),Fvc)){Fac(f).Jb(new $ac(f));f.n.b=a.d-10;break}if(c==Dvc){Fac(f).Jb(new bbc(f));f.n.b=a.b+10;break}break;default:throw Adb(new agb('The node type '+f.k+' is not supported by the '+XS));}}}} -function g5b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;i=new rjd(d.i+d.g/2,d.j+d.f/2);n=W4b(d);o=RD(Gxd(b,(yCc(),BBc)),101);q=RD(Gxd(d,GBc),64);if(!HPd(Fxd(d),ABc)){d.i==0&&d.j==0?(p=0):(p=nsd(d,q));Ixd(d,ABc,p)}j=new rjd(b.g,b.f);e=f2b(d,o,q,n,j,i,new rjd(d.g,d.f),RD(mQb(c,rAc),88),c);pQb(e,(Ywc(),Awc),d);f=RD(Vmb(e.j,0),12);O3b(f,e5b(d));pQb(e,EBc,(Pod(),xsb(Nod)));l=RD(Gxd(b,EBc),181).Hc(Lod);for(h=new dMd((!d.n&&(d.n=new C5d(I4,d,1,7)),d.n));h.e!=h.i.gc();){g=RD(bMd(h),135);if(!Heb(TD(Gxd(g,pBc)))&&!!g.a){m=h5b(g);Rmb(f.f,m);if(!l){k=0;Rod(RD(Gxd(b,EBc),21))&&(k=qsd(new rjd(g.i,g.j),new rjd(g.g,g.f),new rjd(d.g,d.f),0,q));switch(q.g){case 2:case 4:m.o.a=k;break;case 1:case 3:m.o.b=k;}}}}pQb(e,_Bc,UD(Gxd(vCd(b),_Bc)));pQb(e,aCc,UD(Gxd(vCd(b),aCc)));pQb(e,ZBc,UD(Gxd(vCd(b),ZBc)));Rmb(c.a,e);Zjb(a.a,d,e)} -function j5b(a,b,c,d,e,f){var g,h,i,j,k,l;j=new R3b;kQb(j,b);Q3b(j,RD(Gxd(b,(yCc(),GBc)),64));pQb(j,(Ywc(),Awc),b);P3b(j,c);l=j.o;l.a=b.g;l.b=b.f;k=j.n;k.a=b.i;k.b=b.j;Zjb(a.a,b,j);g=yDb(GDb(EDb(new SDb(null,(!b.e&&(b.e=new Yie(G4,b,7,4)),new Swb(b.e,16))),new w5b),new o5b),new y5b(b));g||(g=yDb(GDb(EDb(new SDb(null,(!b.d&&(b.d=new Yie(G4,b,8,5)),new Swb(b.d,16))),new A5b),new q5b),new C5b(b)));g||(g=yDb(new SDb(null,(!b.e&&(b.e=new Yie(G4,b,7,4)),new Swb(b.e,16))),new E5b));pQb(j,nwc,(Geb(),g?true:false));m2b(j,f,e,RD(Gxd(b,zBc),8));for(i=new dMd((!b.n&&(b.n=new C5d(I4,b,1,7)),b.n));i.e!=i.i.gc();){h=RD(bMd(i),135);!Heb(TD(Gxd(h,pBc)))&&!!h.a&&Rmb(j.f,h5b(h))}switch(e.g){case 2:case 1:(j.j==(qpd(),Yod)||j.j==npd)&&d.Fc((ovc(),lvc));break;case 4:case 3:(j.j==(qpd(),Xod)||j.j==ppd)&&d.Fc((ovc(),lvc));}return j} -function dud(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;t=0;o=0;n=0;m=1;for(s=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));s.e!=s.i.gc();){q=RD(bMd(s),27);m+=Kr(new is(Mr(zGd(q).a.Kc(),new ir)));B=q.g;o=$wnd.Math.max(o,B);l=q.f;n=$wnd.Math.max(n,l);t+=B*l}p=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a).i;g=t+2*d*d*m*p;f=$wnd.Math.sqrt(g);i=$wnd.Math.max(f*c,o);h=$wnd.Math.max(f/c,n);for(r=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));r.e!=r.i.gc();){q=RD(bMd(r),27);C=e.b+(Kwb(b,26)*Kxe+Kwb(b,27)*Lxe)*(i-q.g);D=e.b+(Kwb(b,26)*Kxe+Kwb(b,27)*Lxe)*(h-q.f);Dyd(q,C);Eyd(q,D)}A=i+(e.b+e.c);w=h+(e.d+e.a);for(v=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));v.e!=v.i.gc();){u=RD(bMd(v),27);for(k=new is(Mr(zGd(u).a.Kc(),new ir));gs(k);){j=RD(hs(k),74);nzd(j)||cud(j,b,A,w)}}A+=e.b+e.c;w+=e.d+e.a;Esd(a,A,w,false,true)} -function CLb(a){var b;this.r=Ty(new FLb,new JLb);this.b=new Zrb(RD(Qb(E3),296));this.p=new Zrb(RD(Qb(E3),296));this.i=new Zrb(RD(Qb(XN),296));this.e=a;this.o=new sjd(a.Mf());this.D=a.Yf()||Heb(TD(a.of((umd(),$kd))));this.A=RD(a.of((umd(),kld)),21);this.B=RD(a.of(pld),21);this.q=RD(a.of(Hld),101);this.u=RD(a.of(Lld),21);if(!Sod(this.u)){throw Adb(new Jed('Invalid port label placement: '+this.u))}this.v=Heb(TD(a.of(Nld)));this.j=RD(a.of(ild),21);if(!fod(this.j)){throw Adb(new Jed('Invalid node label placement: '+this.j))}this.n=RD(ftd(a,gld),107);this.k=Kfb(UD(ftd(a,cmd)));this.d=Kfb(UD(ftd(a,bmd)));this.w=Kfb(UD(ftd(a,jmd)));this.s=Kfb(UD(ftd(a,dmd)));this.t=Kfb(UD(ftd(a,emd)));this.C=RD(ftd(a,hmd),140);this.c=2*this.d;b=!this.B.Hc((dqd(),Wpd));this.f=new dLb(0,b,0);this.g=new dLb(1,b,0);cLb(this.f,(ZJb(),XJb),this.g)} -function s6b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;b.Ug('Comment pre-processing',1);c=0;i=new Anb(a.a);while(i.a<i.c.c.length){h=RD(ynb(i),10);if(Heb(TD(mQb(h,(yCc(),Uzc))))){++c;e=0;d=null;j=null;for(o=new Anb(h.j);o.a<o.c.c.length;){m=RD(ynb(o),12);e+=m.e.c.length+m.g.c.length;if(m.e.c.length==1){d=RD(Vmb(m.e,0),18);j=d.c}if(m.g.c.length==1){d=RD(Vmb(m.g,0),18);j=d.d}}if(e==1&&j.e.c.length+j.g.c.length==1&&!Heb(TD(mQb(j.i,Uzc)))){t6b(h,d,j,j.i);znb(i)}else{r=new bnb;for(n=new Anb(h.j);n.a<n.c.c.length;){m=RD(ynb(n),12);for(l=new Anb(m.g);l.a<l.c.c.length;){k=RD(ynb(l),18);k.d.g.c.length==0||(ZEb(r.c,k),true)}for(g=new Anb(m.e);g.a<g.c.c.length;){f=RD(ynb(g),18);f.c.e.c.length==0||(ZEb(r.c,f),true)}}for(q=new Anb(r);q.a<q.c.c.length;){p=RD(ynb(q),18);X0b(p,true)}}}}b._g()&&b.bh('Found '+c+' comment boxes');b.Vg()} -function wke(a,b){uke();var c,d,e,f,g,h,i;this.a=new zke(this);this.b=a;this.c=b;this.f=Cfe(Qee((lke(),jke),b));if(this.f.dc()){if((h=Tee(jke,a))==b){this.e=true;this.d=new bnb;this.f=new OSd;this.f.Fc(dLe);RD(tfe(Pee(jke,BXd(a)),''),29)==a&&this.f.Fc(Uee(jke,BXd(a)));for(e=Gee(jke,a).Kc();e.Ob();){d=RD(e.Pb(),179);switch(yfe(Qee(jke,d))){case 4:{this.d.Fc(d);break}case 5:{this.f.Gc(Cfe(Qee(jke,d)));break}}}}else{nke();if(RD(b,69).xk()){this.e=true;this.f=null;this.d=new bnb;for(g=0,i=(a.i==null&&rYd(a),a.i).length;g<i;++g){d=(c=(a.i==null&&rYd(a),a.i),g>=0&&g<c.length?c[g]:null);for(f=zfe(Qee(jke,d));f;f=zfe(Qee(jke,f))){f==b&&this.d.Fc(d)}}}else if(yfe(Qee(jke,b))==1&&!!h){this.f=null;this.d=(Lle(),Kle)}else{this.f=null;this.e=true;this.d=(yob(),new mpb(b))}}}else{this.e=yfe(Qee(jke,b))==5;this.f.Fb(tke)&&(this.f=tke)}} -function qNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;c=0;d=pNb(a,b);m=a.s;n=a.t;for(j=RD(RD(Qc(a.r,b),21),87).Kc();j.Ob();){i=RD(j.Pb(),117);if(!i.c||i.c.d.c.length<=0){continue}o=i.b.Mf();h=i.b.pf((umd(),Gld))?Kfb(UD(i.b.of(Gld))):0;k=i.c;l=k.i;l.b=(g=k.n,k.e.a+g.b+g.c);l.a=(f=k.n,k.e.b+f.d+f.a);switch(b.g){case 1:l.c=i.a?(o.a-l.b)/2:o.a+m;l.d=o.b+h+d;RKb(k,(EKb(),BKb));SKb(k,(vLb(),uLb));break;case 3:l.c=i.a?(o.a-l.b)/2:o.a+m;l.d=-h-d-l.a;RKb(k,(EKb(),BKb));SKb(k,(vLb(),sLb));break;case 2:l.c=-h-d-l.b;if(i.a){e=a.v?l.a:RD(Vmb(k.d,0),187).Mf().b;l.d=(o.b-e)/2}else{l.d=o.b+n}RKb(k,(EKb(),DKb));SKb(k,(vLb(),tLb));break;case 4:l.c=o.a+h+d;if(i.a){e=a.v?l.a:RD(Vmb(k.d,0),187).Mf().b;l.d=(o.b-e)/2}else{l.d=o.b+n}RKb(k,(EKb(),CKb));SKb(k,(vLb(),tLb));}(b==(qpd(),Yod)||b==npd)&&(c=$wnd.Math.max(c,l.a))}c>0&&(RD(Vrb(a.b,b),127).a.b=c)} -function wcc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;m=Kfb(UD(mQb(a,(yCc(),_Bc))));n=Kfb(UD(mQb(a,aCc)));l=Kfb(UD(mQb(a,ZBc)));h=a.o;f=RD(Vmb(a.j,0),12);g=f.n;p=ucc(f,l);if(!p){return}if(b.Hc((Pod(),Lod))){switch(RD(mQb(a,(Ywc(),hwc)),64).g){case 1:p.c=(h.a-p.b)/2-g.a;p.d=n;break;case 3:p.c=(h.a-p.b)/2-g.a;p.d=-n-p.a;break;case 2:if(c&&f.e.c.length==0&&f.g.c.length==0){k=d?p.a:RD(Vmb(f.f,0),72).o.b;p.d=(h.b-k)/2-g.b}else{p.d=h.b+n-g.b}p.c=-m-p.b;break;case 4:if(c&&f.e.c.length==0&&f.g.c.length==0){k=d?p.a:RD(Vmb(f.f,0),72).o.b;p.d=(h.b-k)/2-g.b}else{p.d=h.b+n-g.b}p.c=m;}}else if(b.Hc(Nod)){switch(RD(mQb(a,(Ywc(),hwc)),64).g){case 1:case 3:p.c=g.a+m;break;case 2:case 4:if(c&&!f.c){k=d?p.a:RD(Vmb(f.f,0),72).o.b;p.d=(h.b-k)/2-g.b}else{p.d=g.b+n}}}e=p.d;for(j=new Anb(f.f);j.a<j.c.c.length;){i=RD(ynb(j),72);o=i.n;o.a=p.c;o.b=e;e+=i.o.b+l}} -function w9b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;w=new bnb;for(o=new Anb(a.b);o.a<o.c.c.length;){n=RD(ynb(o),30);for(r=new Anb(n.a);r.a<r.c.c.length;){p=RD(ynb(r),10);if(p.k!=(r3b(),m3b)){continue}if(!nQb(p,(Ywc(),gwc))){continue}s=null;u=null;t=null;for(C=new Anb(p.j);C.a<C.c.c.length;){B=RD(ynb(C),12);switch(B.j.g){case 4:s=B;break;case 2:u=B;break;default:t=B;}}v=RD(Vmb(t.g,0),18);k=new Fjd(v.a);j=new sjd(t.n);$id(j,p.n);l=Sub(k,0);cvb(l,j);A=Ijd(v.a);m=new sjd(t.n);$id(m,p.n);Pub(A,m,A.c.b,A.c);D=RD(mQb(p,gwc),10);F=RD(Vmb(D.j,0),12);i=RD(anb(s.e,$C(WQ,VAe,18,0,0,1)),482);for(d=i,f=0,h=d.length;f<h;++f){b=d[f];Z0b(b,F);Ajd(b.a,b.a.b,k)}i=s2b(u.g);for(c=i,e=0,g=c.length;e<g;++e){b=c[e];Y0b(b,F);Ajd(b.a,0,A)}Y0b(v,null);Z0b(v,null);ZEb(w.c,p)}}for(q=new Anb(w);q.a<q.c.c.length;){p=RD(ynb(q),10);g3b(p,null)}} -function Dne(){RRd(Vbb,new ioe);RRd(Xbb,new Poe);RRd(Ybb,new upe);RRd(Zbb,new _pe);RRd(qJ,new lqe);RRd(WC(gE,1),new oqe);RRd(QI,new rqe);RRd(RI,new uqe);RRd(qJ,new Gne);RRd(qJ,new Jne);RRd(qJ,new Mne);RRd(VI,new Pne);RRd(qJ,new Sne);RRd(QK,new Vne);RRd(QK,new Yne);RRd(qJ,new _ne);RRd(ZI,new coe);RRd(qJ,new foe);RRd(qJ,new loe);RRd(qJ,new ooe);RRd(qJ,new roe);RRd(qJ,new uoe);RRd(WC(gE,1),new xoe);RRd(qJ,new Aoe);RRd(qJ,new Doe);RRd(QK,new Goe);RRd(QK,new Joe);RRd(qJ,new Moe);RRd(bJ,new Soe);RRd(qJ,new Voe);RRd(eJ,new Yoe);RRd(qJ,new _oe);RRd(qJ,new cpe);RRd(qJ,new fpe);RRd(qJ,new ipe);RRd(QK,new lpe);RRd(QK,new ope);RRd(qJ,new rpe);RRd(qJ,new xpe);RRd(qJ,new Ape);RRd(qJ,new Dpe);RRd(qJ,new Gpe);RRd(qJ,new Jpe);RRd(lJ,new Mpe);RRd(qJ,new Ppe);RRd(qJ,new Spe);RRd(qJ,new Vpe);RRd(lJ,new Ype);RRd(eJ,new cqe);RRd(qJ,new fqe);RRd(bJ,new iqe)} -function jsc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;k=new Ejd;switch(a.a.g){case 3:m=RD(mQb(b.e,(Ywc(),Twc)),15);n=RD(mQb(b.j,Twc),15);o=RD(mQb(b.f,Twc),15);c=RD(mQb(b.e,Rwc),15);d=RD(mQb(b.j,Rwc),15);e=RD(mQb(b.f,Rwc),15);g=new bnb;Tmb(g,m);n.Jc(new msc);Tmb(g,hv(n));Tmb(g,o);f=new bnb;Tmb(f,c);Tmb(f,hv(d));Tmb(f,e);pQb(b.f,Twc,g);pQb(b.f,Rwc,f);pQb(b.f,Uwc,b.f);pQb(b.e,Twc,null);pQb(b.e,Rwc,null);pQb(b.j,Twc,null);pQb(b.j,Rwc,null);break;case 1:ye(k,b.e.a);Mub(k,b.i.n);ye(k,hv(b.j.a));Mub(k,b.a.n);ye(k,b.f.a);break;default:ye(k,b.e.a);ye(k,hv(b.j.a));ye(k,b.f.a);}Xub(b.f.a);ye(b.f.a,k);Y0b(b.f,b.e.c);h=RD(mQb(b.e,(yCc(),RAc)),75);j=RD(mQb(b.j,RAc),75);i=RD(mQb(b.f,RAc),75);if(!!h||!!j||!!i){l=new Ejd;hsc(l,i);hsc(l,j);hsc(l,h);pQb(b.f,RAc,l)}Y0b(b.j,null);Z0b(b.j,null);Y0b(b.e,null);Z0b(b.e,null);g3b(b.a,null);g3b(b.i,null);!!b.g&&jsc(a,b.g)} -function tib(){tib=geb;var a,b,c;new Aib(1,0);new Aib(10,0);new Aib(0,0);lib=$C(tJ,Nve,247,11,0,1);mib=$C(hE,zwe,28,100,15,1);nib=cD(WC(iE,1),vxe,28,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,2384185791015625]);oib=$C(kE,Pwe,28,nib.length,15,1);pib=cD(WC(iE,1),vxe,28,15,[1,10,100,Awe,10000,wxe,1000000,10000000,100000000,ixe,10000000000,100000000000,1000000000000,10000000000000,100000000000000,1000000000000000,10000000000000000]);qib=$C(kE,Pwe,28,pib.length,15,1);rib=$C(tJ,Nve,247,11,0,1);a=0;for(;a<rib.length;a++){lib[a]=new Aib(a,0);rib[a]=new Aib(0,a);mib[a]=48}for(;a<mib.length;a++){mib[a]=48}for(c=0;c<oib.length;c++){oib[c]=Cib(nib[c])}for(b=0;b<qib.length;b++){qib[b]=Cib(pib[b])}Ljb()} -function Htb(){function e(){this.obj=this.createObject()} -;e.prototype.createObject=function(a){return Object.create(null)};e.prototype.get=function(a){return this.obj[a]};e.prototype.set=function(a,b){this.obj[a]=b};e.prototype[Jxe]=function(a){delete this.obj[a]};e.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)};e.prototype.entries=function(){var b=this.keys();var c=this;var d=0;return {next:function(){if(d>=b.length)return {done:true};var a=b[d++];return {value:[a,c.get(a)],done:false}}}};if(!Ftb()){e.prototype.createObject=function(){return {}};e.prototype.get=function(a){return this.obj[':'+a]};e.prototype.set=function(a,b){this.obj[':'+a]=b};e.prototype[Jxe]=function(a){delete this.obj[':'+a]};e.prototype.keys=function(){var a=[];for(var b in this.obj){b.charCodeAt(0)==58&&a.push(b.substring(1))}return a}}return e} -function q$c(){q$c=geb;h$c=new jGd(rAe);new jGd(sAe);new kGd('DEPTH',sgb(0));XZc=new kGd('FAN',sgb(0));VZc=new kGd(QEe,sgb(0));n$c=new kGd('ROOT',(Geb(),false));b$c=new kGd('LEFTNEIGHBOR',null);l$c=new kGd('RIGHTNEIGHBOR',null);c$c=new kGd('LEFTSIBLING',null);m$c=new kGd('RIGHTSIBLING',null);WZc=new kGd('DUMMY',false);new kGd('LEVEL',sgb(0));k$c=new kGd('REMOVABLE_EDGES',new Yub);o$c=new kGd('XCOOR',sgb(0));p$c=new kGd('YCOOR',sgb(0));d$c=new kGd('LEVELHEIGHT',0);f$c=new kGd('LEVELMIN',0);e$c=new kGd('LEVELMAX',0);ZZc=new kGd('GRAPH_XMIN',0);_Zc=new kGd('GRAPH_YMIN',0);YZc=new kGd('GRAPH_XMAX',0);$Zc=new kGd('GRAPH_YMAX',0);UZc=new kGd('COMPACT_LEVEL_ASCENSION',false);TZc=new kGd('COMPACT_CONSTRAINTS',new bnb);a$c=new kGd('ID','');i$c=new kGd('POSITION',sgb(0));j$c=new kGd('PRELIM',0);g$c=new kGd('MODIFIER',0);SZc=new jGd(tAe);RZc=new jGd(uAe)} -function Bqe(a){zqe();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;l=a.length*8;if(l==0){return ''}h=l%24;n=l/24|0;m=h!=0?n+1:n;f=null;f=$C(hE,zwe,28,m*4,15,1);j=0;k=0;b=0;c=0;d=0;g=0;e=0;for(i=0;i<n;i++){b=a[e++];c=a[e++];d=a[e++];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;q=(d&-128)==0?d>>6<<24>>24:(d>>6^252)<<24>>24;f[g++]=yqe[o];f[g++]=yqe[p|j<<4];f[g++]=yqe[k<<2|q];f[g++]=yqe[d&63]}if(h==8){b=a[e];j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;f[g++]=yqe[o];f[g++]=yqe[j<<4];f[g++]=61;f[g++]=61}else if(h==16){b=a[e];c=a[e+1];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;f[g++]=yqe[o];f[g++]=yqe[p|j<<4];f[g++]=yqe[k<<2];f[g++]=61}return Ihb(f,0,f.length)} -function CB(a,b){var c,d,e,f,g,h,i;a.e==0&&a.p>0&&(a.p=-(a.p-1));a.p>qwe&&tB(b,a.p-Owe);g=b.q.getDate();nB(b,1);a.k>=0&&qB(b,a.k);if(a.c>=0){nB(b,a.c)}else if(a.k>=0){i=new vB(b.q.getFullYear()-Owe,b.q.getMonth(),35);d=35-i.q.getDate();nB(b,$wnd.Math.min(d,g))}else{nB(b,g)}a.f<0&&(a.f=b.q.getHours());a.b>0&&a.f<12&&(a.f+=12);oB(b,a.f==24&&a.g?0:a.f);a.j>=0&&pB(b,a.j);a.n>=0&&rB(b,a.n);a.i>=0&&sB(b,Bdb(Ndb(Fdb(Hdb(b.q.getTime()),Awe),Awe),a.i));if(a.a){e=new uB;tB(e,e.q.getFullYear()-Owe-80);Ldb(Hdb(b.q.getTime()),Hdb(e.q.getTime()))&&tB(b,e.q.getFullYear()-Owe+100)}if(a.d>=0){if(a.c==-1){c=(7+a.d-b.q.getDay())%7;c>3&&(c-=7);h=b.q.getMonth();nB(b,b.q.getDate()+c);b.q.getMonth()!=h&&nB(b,b.q.getDate()+(c>0?-7:7))}else{if(b.q.getDay()!=a.d){return false}}}if(a.o>qwe){f=b.q.getTimezoneOffset();sB(b,Bdb(Hdb(b.q.getTime()),(a.o-f)*60*Awe))}return true} -function J5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;e=mQb(b,(Ywc(),Awc));if(!ZD(e,207)){return}o=RD(e,27);p=b.e;m=new sjd(b.c);f=b.d;m.a+=f.b;m.b+=f.d;u=RD(Gxd(o,(yCc(),oBc)),181);if(Csb(u,(dqd(),Xpd))){n=RD(Gxd(o,qBc),107);E2b(n,f.a);H2b(n,f.d);F2b(n,f.b);G2b(n,f.c)}c=new bnb;for(k=new Anb(b.a);k.a<k.c.c.length;){i=RD(ynb(k),10);if(ZD(mQb(i,Awc),207)){K5b(i,m)}else if(ZD(mQb(i,Awc),193)&&!p){d=RD(mQb(i,Awc),123);s=j2b(b,i,d.g,d.f);Byd(d,s.a,s.b)}for(r=new Anb(i.j);r.a<r.c.c.length;){q=RD(ynb(r),12);FDb(CDb(new SDb(null,new Swb(q.g,16)),new Q5b(i)),new S5b(c))}}if(p){for(r=new Anb(p.j);r.a<r.c.c.length;){q=RD(ynb(r),12);FDb(CDb(new SDb(null,new Swb(q.g,16)),new U5b(p)),new W5b(c))}}t=RD(Gxd(o,yAc),223);for(h=new Anb(c);h.a<h.c.c.length;){g=RD(ynb(h),18);I5b(g,t,m)}L5b(b);for(j=new Anb(b.a);j.a<j.c.c.length;){i=RD(ynb(j),10);l=i.e;!!l&&J5b(a,l)}} -function xNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(RD(RD(Qc(a.r,b),21),87).dc()){return}g=RD(Vrb(a.b,b),127);i=g.i;h=g.n;k=BLb(a,b);d=i.b-h.b-h.c;e=g.a.a;f=i.c+h.b;n=a.w;if((k==(pod(),mod)||k==ood)&&RD(RD(Qc(a.r,b),21),87).gc()==1){e=k==mod?e-2*a.w:e;k=lod}if(d<e&&!a.B.Hc((dqd(),aqd))){if(k==mod){n+=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()+1);f+=n}else{n+=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()-1)}}else{if(d<e){e=k==mod?e-2*a.w:e;k=lod}switch(k.g){case 3:f+=(d-e)/2;break;case 4:f+=d-e;break;case 0:c=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()+1);n+=$wnd.Math.max(0,c);f+=n;break;case 1:c=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()-1);n+=$wnd.Math.max(0,c);}}for(m=RD(RD(Qc(a.r,b),21),87).Kc();m.Ob();){l=RD(m.Pb(),117);l.e.a=f+l.d.b;l.e.b=(j=l.b,j.pf((umd(),Gld))?j.ag()==(qpd(),Yod)?-j.Mf().b-Kfb(UD(j.of(Gld))):Kfb(UD(j.of(Gld))):j.ag()==(qpd(),Yod)?-j.Mf().b:0);f+=l.d.b+l.b.Mf().a+l.d.c+n}} -function BNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(RD(RD(Qc(a.r,b),21),87).dc()){return}g=RD(Vrb(a.b,b),127);i=g.i;h=g.n;l=BLb(a,b);d=i.a-h.d-h.a;e=g.a.b;f=i.d+h.d;o=a.w;j=a.o.a;if((l==(pod(),mod)||l==ood)&&RD(RD(Qc(a.r,b),21),87).gc()==1){e=l==mod?e-2*a.w:e;l=lod}if(d<e&&!a.B.Hc((dqd(),aqd))){if(l==mod){o+=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()+1);f+=o}else{o+=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()-1)}}else{if(d<e){e=l==mod?e-2*a.w:e;l=lod}switch(l.g){case 3:f+=(d-e)/2;break;case 4:f+=d-e;break;case 0:c=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()+1);o+=$wnd.Math.max(0,c);f+=o;break;case 1:c=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()-1);o+=$wnd.Math.max(0,c);}}for(n=RD(RD(Qc(a.r,b),21),87).Kc();n.Ob();){m=RD(n.Pb(),117);m.e.a=(k=m.b,k.pf((umd(),Gld))?k.ag()==(qpd(),ppd)?-k.Mf().a-Kfb(UD(k.of(Gld))):j+Kfb(UD(k.of(Gld))):k.ag()==(qpd(),ppd)?-k.Mf().a:j);m.e.b=f+m.d.d;f+=m.d.d+m.b.Mf().b+m.d.a+o}} -function bZc(a,b){var c,d,e,f,g;b.Ug('Processor determine the coords for each level',1);d=new bnb;for(g=Sub(a.b,0);g.b!=g.d.c;){e=RD(evb(g),39);while(RD(mQb(e,(h_c(),f_c)),17).a>d.c.length-1){Rmb(d,new Ptd(Hze,KEe))}c=RD(mQb(e,f_c),17).a;if(Dmd(RD(mQb(a,H$c),88))){e.e.a<Kfb(UD((tFb(c,d.c.length),RD(d.c[c],42)).a))&&Ntd((tFb(c,d.c.length),RD(d.c[c],42)),e.e.a);e.e.a+e.f.a>Kfb(UD((tFb(c,d.c.length),RD(d.c[c],42)).b))&&Otd((tFb(c,d.c.length),RD(d.c[c],42)),e.e.a+e.f.a)}else{e.e.b<Kfb(UD((tFb(c,d.c.length),RD(d.c[c],42)).a))&&Ntd((tFb(c,d.c.length),RD(d.c[c],42)),e.e.b);e.e.b+e.f.b>Kfb(UD((tFb(c,d.c.length),RD(d.c[c],42)).b))&&Otd((tFb(c,d.c.length),RD(d.c[c],42)),e.e.b+e.f.b)}}for(f=Sub(a.b,0);f.b!=f.d.c;){e=RD(evb(f),39);c=RD(mQb(e,(h_c(),f_c)),17).a;pQb(e,(q$c(),f$c),UD((tFb(c,d.c.length),RD(d.c[c],42)).a));pQb(e,e$c,UD((tFb(c,d.c.length),RD(d.c[c],42)).b))}b.Vg()} -function Tec(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;a.o=Kfb(UD(mQb(a.i,(yCc(),bCc))));a.f=Kfb(UD(mQb(a.i,XBc)));a.j=a.i.b.c.length;h=a.j-1;m=0;a.k=0;a.n=0;a.b=dv($C(bJ,Nve,17,a.j,0,1));a.c=dv($C(VI,Nve,345,a.j,7,1));for(g=new Anb(a.i.b);g.a<g.c.c.length;){e=RD(ynb(g),30);e.p=h;for(l=new Anb(e.a);l.a<l.c.c.length;){k=RD(ynb(l),10);k.p=m;++m}--h}a.g=$C(kE,Pwe,28,m,15,1);a.d=YC(kE,[Nve,Pwe],[53,28],15,[m,3],2);a.p=new bnb;a.q=new bnb;b=0;a.e=0;for(f=new Anb(a.i.b);f.a<f.c.c.length;){e=RD(ynb(f),30);h=e.p;d=0;p=0;i=e.a.c.length;j=0;for(l=new Anb(e.a);l.a<l.c.c.length;){k=RD(ynb(l),10);m=k.p;a.g[m]=k.c.p;j+=k.o.b+a.o;c=Kr(new is(Mr(Z2b(k).a.Kc(),new ir)));o=Kr(new is(Mr(a3b(k).a.Kc(),new ir)));a.d[m][0]=o-c;a.d[m][1]=c;a.d[m][2]=o;d+=c;p+=o;c>0&&Rmb(a.q,k);Rmb(a.p,k)}b-=d;n=i+b;j+=b*a.f;$mb(a.b,h,sgb(n));$mb(a.c,h,j);a.k=$wnd.Math.max(a.k,n);a.n=$wnd.Math.max(a.n,j);a.e+=b;b+=p}} -function qpd(){qpd=geb;var a;opd=new upd(Sye,0);Yod=new upd(_ye,1);Xod=new upd(aze,2);npd=new upd(bze,3);ppd=new upd(cze,4);bpd=(yob(),new Lqb((a=RD(mfb(E3),9),new Fsb(a,RD(WEb(a,a.length),9),0))));cpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[])));Zod=eq(ysb(Xod,cD(WC(E3,1),NAe,64,0,[])));kpd=eq(ysb(npd,cD(WC(E3,1),NAe,64,0,[])));mpd=eq(ysb(ppd,cD(WC(E3,1),NAe,64,0,[])));hpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[npd])));apd=eq(ysb(Xod,cD(WC(E3,1),NAe,64,0,[ppd])));jpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[ppd])));dpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[Xod])));lpd=eq(ysb(npd,cD(WC(E3,1),NAe,64,0,[ppd])));$od=eq(ysb(Xod,cD(WC(E3,1),NAe,64,0,[npd])));gpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[Xod,ppd])));_od=eq(ysb(Xod,cD(WC(E3,1),NAe,64,0,[npd,ppd])));ipd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[npd,ppd])));epd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[Xod,npd])));fpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[Xod,npd,ppd])))} -function Gfc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;b.Ug(qBe,1);p=new bnb;w=new bnb;for(j=new Anb(a.b);j.a<j.c.c.length;){i=RD(ynb(j),30);r=-1;o=t2b(i.a);for(l=o,m=0,n=l.length;m<n;++m){k=l[m];++r;if(!(k.k==(r3b(),p3b)&&Dod(RD(mQb(k,(yCc(),BBc)),101)))){continue}Cod(RD(mQb(k,(yCc(),BBc)),101))||Hfc(k);pQb(k,(Ywc(),pwc),k);p.c.length=0;w.c.length=0;c=new bnb;u=new Yub;_q(u,e3b(k,(qpd(),Yod)));Efc(a,u,p,w,c);h=r;A=k;for(f=new Anb(p);f.a<f.c.c.length;){d=RD(ynb(f),10);f3b(d,h,i);++r;pQb(d,pwc,k);g=RD(Vmb(d.j,0),12);q=RD(mQb(g,Awc),12);Heb(TD(mQb(q,Szc)))||RD(mQb(d,qwc),15).Fc(A)}Xub(u);for(t=e3b(k,npd).Kc();t.Ob();){s=RD(t.Pb(),12);Pub(u,s,u.a,u.a.a)}Efc(a,u,w,null,c);v=k;for(e=new Anb(w);e.a<e.c.c.length;){d=RD(ynb(e),10);f3b(d,++r,i);pQb(d,pwc,k);g=RD(Vmb(d.j,0),12);q=RD(mQb(g,Awc),12);Heb(TD(mQb(q,Szc)))||RD(mQb(v,qwc),15).Fc(d)}c.c.length==0||pQb(k,Uvc,c)}}b.Vg()} -function tYc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;if(b.b!=0){n=new Yub;h=null;o=null;d=eE($wnd.Math.floor($wnd.Math.log(b.b)*$wnd.Math.LOG10E)+1);i=0;for(t=Sub(b,0);t.b!=t.d.c;){r=RD(evb(t),39);if(dE(o)!==dE(mQb(r,(q$c(),a$c)))){o=WD(mQb(r,a$c));i=0}o!=null?(h=o+wYc(i++,d)):(h=wYc(i++,d));pQb(r,a$c,h);for(q=(e=Sub((new dXc(r)).a.d,0),new gXc(e));dvb(q.a);){p=RD(evb(q.a),65).c;Pub(n,p,n.c.b,n.c);pQb(p,a$c,h)}}m=new Tsb;for(g=0;g<h.length-d;g++){for(s=Sub(b,0);s.b!=s.d.c;){r=RD(evb(s),39);j=zhb(WD(mQb(r,(q$c(),a$c))),0,g+1);c=(j==null?Wd(qtb(m.f,null)):Ktb(m.i,j))!=null?RD(j==null?Wd(qtb(m.f,null)):Ktb(m.i,j),17).a+1:1;$jb(m,j,sgb(c))}}for(l=new vkb((new mkb(m)).a);l.b;){k=tkb(l);f=sgb(Wjb(a.a,k.ld())!=null?RD(Wjb(a.a,k.ld()),17).a:0);$jb(a.a,WD(k.ld()),sgb(RD(k.md(),17).a+f.a));f=RD(Wjb(a.b,k.ld()),17);(!f||f.a<RD(k.md(),17).a)&&$jb(a.b,WD(k.ld()),RD(k.md(),17))}tYc(a,n)}} -function Hpc(a){var b,c,d,e,f,g,h,i,j,k,l,m;c=null;i=null;e=RD(mQb(a.b,(yCc(),CAc)),349);if(e==(TEc(),REc)){c=new bnb;i=new bnb}for(h=new Anb(a.d);h.a<h.c.c.length;){g=RD(ynb(h),105);f=g.i;if(!f){continue}switch(g.e.g){case 0:b=RD(Nsb(new Osb(g.b)),64);e==REc&&b==(qpd(),Yod)?(ZEb(c.c,g),true):e==REc&&b==(qpd(),npd)?(ZEb(i.c,g),true):Fpc(g,b);break;case 1:j=g.a.d.j;k=g.c.d.j;j==(qpd(),Yod)?Gpc(g,Yod,(enc(),bnc),g.a):k==Yod?Gpc(g,Yod,(enc(),cnc),g.c):j==npd?Gpc(g,npd,(enc(),cnc),g.a):k==npd&&Gpc(g,npd,(enc(),bnc),g.c);break;case 2:case 3:d=g.b;Csb(d,(qpd(),Yod))?Csb(d,npd)?Csb(d,ppd)?Csb(d,Xod)||Gpc(g,Yod,(enc(),cnc),g.c):Gpc(g,Yod,(enc(),bnc),g.a):Gpc(g,Yod,(enc(),anc),null):Gpc(g,npd,(enc(),anc),null);break;case 4:l=g.a.d.j;m=g.a.d.j;l==(qpd(),Yod)||m==Yod?Gpc(g,npd,(enc(),anc),null):Gpc(g,Yod,(enc(),anc),null);}}if(c){c.c.length==0||Epc(c,(qpd(),Yod));i.c.length==0||Epc(i,(qpd(),npd))}} -function oGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;c.Ug('Breadth first model order layering',1);a.a=b;q=new bnb;for(p=new Anb(a.a.a);p.a<p.c.c.length;){n=RD(ynb(p),10);n.k==(r3b(),p3b)&&(ZEb(q.c,n),true)}yob();_mb(q,new tGc);i=true;e=new R4b(a.a);d=null;Rmb(a.a.b,e);for(o=new Anb(q);o.a<o.c.c.length;){n=RD(ynb(o),10);if(i){g3b(n,e);i=false}else{for(h=new is(Mr(Z2b(n).a.Kc(),new ir));gs(h);){f=RD(hs(h),18);if(f.c.i.k==(r3b(),p3b)&&f.c.i.c==e||f.c.i.k==n3b&&RD(hs(new is(Mr(Z2b(f.c.i).a.Kc(),new ir))),18).c.i.c==e){d=new R4b(a.a);Rmb(a.a.b,d);e=new R4b(a.a);Rmb(a.a.b,e)}}for(g=new is(Mr(Z2b(n).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);f.c.i.k==(r3b(),n3b)&&!f.c.i.c&&g3b(f.c.i,d)}g3b(n,e)}}a.a.a.c.length=0;r=new bnb;for(l=new Anb(a.a.b);l.a<l.c.c.length;){j=RD(ynb(l),30);j.a.c.length==0&&(ZEb(r.c,j),true)}Ce(a.a.b,r);m=0;for(k=new Anb(a.a.b);k.a<k.c.c.length;){j=RD(ynb(k),30);j.p=m;++m}c.Vg()} -function K5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;d=RD(mQb(a,(Ywc(),Awc)),27);o=RD(mQb(a,(yCc(),mAc)),17).a;f=RD(mQb(a,VAc),17).a;Ixd(d,mAc,sgb(o));Ixd(d,VAc,sgb(f));Dyd(d,a.n.a+b.a);Eyd(d,a.n.b+b.b);if(RD(Gxd(d,lBc),181).gc()!=0||!!a.e||dE(mQb(Y2b(a),kBc))===dE((JDc(),HDc))&&xDc((wDc(),(!a.q?(yob(),yob(),wob):a.q)._b(iBc)?(m=RD(mQb(a,iBc),203)):(m=RD(mQb(Y2b(a),jBc),203)),m))){Cyd(d,a.o.a);Ayd(d,a.o.b)}for(l=new Anb(a.j);l.a<l.c.c.length;){j=RD(ynb(l),12);p=mQb(j,Awc);if(ZD(p,193)){e=RD(p,123);Byd(e,j.n.a,j.n.b);Ixd(e,GBc,j.j)}}n=RD(mQb(a,dBc),181).gc()!=0;for(i=new Anb(a.b);i.a<i.c.c.length;){g=RD(ynb(i),72);if(n||RD(mQb(g,dBc),181).gc()!=0){c=RD(mQb(g,Awc),135);zyd(c,g.o.a,g.o.b);Byd(c,g.n.a,g.n.b)}}if(!Rod(RD(mQb(a,EBc),21))){for(k=new Anb(a.j);k.a<k.c.c.length;){j=RD(ynb(k),12);for(h=new Anb(j.f);h.a<h.c.c.length;){g=RD(ynb(h),72);c=RD(mQb(g,Awc),135);Cyd(c,g.o.a);Ayd(c,g.o.b);Byd(c,g.n.a,g.n.b)}}}} -function X2c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;b.Ug('Calculate Graph Size',1);b.dh(a,eFe);l=Hze;m=Hze;j=fFe;k=fFe;for(p=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));p.e!=p.i.gc();){n=RD(bMd(p),27);s=n.i;t=n.j;C=n.g;h=n.f;i=RD(Gxd(n,(umd(),eld)),140);l=$wnd.Math.min(l,s-i.b);m=$wnd.Math.min(m,t-i.d);j=$wnd.Math.max(j,s+C+i.c);k=$wnd.Math.max(k,t+h+i.a)}r=RD(Gxd(a,(umd(),tld)),107);q=new rjd(l-r.b,m-r.d);B=j-l+(r.b+r.c);g=k-m+(r.d+r.a);if(Heb(TD(Gxd(a,($4c(),G4c))))){u=RD(Gxd(a,(u2c(),t2c)),27);v=RD(Gxd(u,eld),140);w=u.i+u.g/2+(v.b+v.c)/2-q.a;A=u.j+u.f/2+(v.d+v.a)/2-q.b;e=B-w;f=g-A;if(e<B/2){c=e-w;B+=c;q.a-=c}else{c=w-e;B+=c}if(f<g/2){d=f-A;g+=d;q.b-=d}else{d=A-f;g+=d}}for(o=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));o.e!=o.i.gc();){n=RD(bMd(o),27);Dyd(n,n.i-q.a);Eyd(n,n.j-q.b)}if(!Heb(TD(Gxd(a,mld)))){Cyd(a,B);Ayd(a,g)}Ixd(a,Ikd,B-(r.b+r.c));Ixd(a,Hkd,g-(r.d+r.a));b.dh(a,gFe)} -function IUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.e.a.$b();a.f.a.$b();a.c.c.length=0;a.i.c.length=0;a.g.a.$b();if(b){for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),10);for(l=e3b(f,(qpd(),Xod)).Kc();l.Ob();){k=RD(l.Pb(),12);Ysb(a.e,k);for(e=new Anb(k.g);e.a<e.c.c.length;){d=RD(ynb(e),18);if(W0b(d)){continue}Rmb(a.c,d);OUc(a,d);h=d.c.i.k;(h==(r3b(),p3b)||h==q3b||h==m3b||h==l3b)&&Rmb(a.j,d);n=d.d;m=n.i.c;m==c?Ysb(a.f,n):m==b?Ysb(a.e,n):Ymb(a.c,d)}}}}if(c){for(g=new Anb(c.a);g.a<g.c.c.length;){f=RD(ynb(g),10);for(j=new Anb(f.j);j.a<j.c.c.length;){i=RD(ynb(j),12);for(e=new Anb(i.g);e.a<e.c.c.length;){d=RD(ynb(e),18);W0b(d)&&Ysb(a.g,d)}}for(l=e3b(f,(qpd(),ppd)).Kc();l.Ob();){k=RD(l.Pb(),12);Ysb(a.f,k);for(e=new Anb(k.g);e.a<e.c.c.length;){d=RD(ynb(e),18);if(W0b(d)){continue}Rmb(a.c,d);OUc(a,d);h=d.c.i.k;(h==(r3b(),p3b)||h==q3b||h==m3b||h==l3b)&&Rmb(a.j,d);n=d.d;m=n.i.c;m==c?Ysb(a.f,n):m==b?Ysb(a.e,n):Ymb(a.c,d)}}}}} -function iSc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;c.Ug('Polyline edge routing',1);q=Kfb(UD(mQb(b,(yCc(),AAc))));n=Kfb(UD(mQb(b,cCc)));e=Kfb(UD(mQb(b,UBc)));d=$wnd.Math.min(1,e/n);t=0;i=0;if(b.b.c.length!=0){u=fSc(RD(Vmb(b.b,0),30));t=0.4*d*u}h=new Jkb(b.b,0);while(h.b<h.d.gc()){g=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),30));f=ar(g,bSc);f&&t>0&&(t-=n);p2b(g,t);k=0;for(m=new Anb(g.a);m.a<m.c.c.length;){l=RD(ynb(m),10);j=0;for(p=new is(Mr(a3b(l).a.Kc(),new ir));gs(p);){o=RD(hs(p),18);r=K3b(o.c).b;s=K3b(o.d).b;if(g==o.d.i.c&&!W0b(o)){jSc(o,t,0.4*d*$wnd.Math.abs(r-s));if(o.c.j==(qpd(),ppd)){r=0;s=0}}j=$wnd.Math.max(j,$wnd.Math.abs(s-r))}switch(l.k.g){case 0:case 4:case 1:case 3:case 5:kSc(a,l,t,q);}k=$wnd.Math.max(k,j)}if(h.b<h.d.gc()){u=fSc((sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),30)));k=$wnd.Math.max(k,u);sFb(h.b>0);h.a.Xb(h.c=--h.b)}i=0.4*d*k;!f&&h.b<h.d.gc()&&(i+=n);t+=g.c.a+i}a.a.a.$b();b.f.a=t;c.Vg()} -function GGd(a){var b,c,d,e,f;Ivb(a,IIe);switch((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i+(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i){case 0:throw Adb(new agb('The edge must have at least one source or target.'));case 1:return (!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i==0?vCd(AGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84))):vCd(AGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84)));}if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i==1&&(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i==1){e=AGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84));f=AGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84));if(vCd(e)==vCd(f)){return vCd(e)}else if(e==vCd(f)){return e}else if(f==vCd(e)){return f}}d=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c)])));b=AGd(RD(hs(d),84));while(gs(d)){c=AGd(RD(hs(d),84));if(c!=b&&!NGd(c,b)){if(vCd(c)==vCd(b)){b=vCd(c)}else{b=HGd(b,c);if(!b){return null}}}}return b} -function _zd(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;n=c.length;if(n>0){j=(BFb(0,c.length),c.charCodeAt(0));if(j!=64){if(j==37){m=c.lastIndexOf('%');k=false;if(m!=0&&(m==n-1||(k=(BFb(m+1,c.length),c.charCodeAt(m+1)==46)))){h=(AFb(1,m,c.length),c.substr(1,m-1));u=lhb('%',h)?null:oSd(h);e=0;if(k){try{e=Oeb((BFb(m+2,c.length+1),c.substr(m+2)),qwe,lve)}catch(a){a=zdb(a);if(ZD(a,130)){i=a;throw Adb(new RSd(i))}else throw Adb(a)}}for(r=P2d(b.Gh());r.Ob();){p=k3d(r);if(ZD(p,519)){f=RD(p,598);t=f.d;if((u==null?t==null:lhb(u,t))&&e--==0){return f}}}return null}}l=c.lastIndexOf('.');o=l==-1?c:(AFb(0,l,c.length),c.substr(0,l));d=0;if(l!=-1){try{d=Oeb((BFb(l+1,c.length+1),c.substr(l+1)),qwe,lve)}catch(a){a=zdb(a);if(ZD(a,130)){o=c}else throw Adb(a)}}o=lhb('%',o)?null:oSd(o);for(q=P2d(b.Gh());q.Ob();){p=k3d(q);if(ZD(p,197)){g=RD(p,197);s=g.xe();if((o==null?s==null:lhb(o,s))&&d--==0){return g}}}return null}}return Pvd(b,c)} -function Hlc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;k=new Tsb;i=new Tp;for(d=new Anb(a.a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),60);j=Zjc(b);if(j){rtb(k.f,j,b)}else{s=$jc(b);if(s){for(f=new Anb(s.k);f.a<f.c.c.length;){e=RD(ynb(f),18);Rc(i,e,b)}}}}for(c=new Anb(a.a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);j=Zjc(b);if(j){for(h=new is(Mr(a3b(j).a.Kc(),new ir));gs(h);){g=RD(hs(h),18);if(W0b(g)){continue}o=g.c;r=g.d;if((qpd(),hpd).Hc(g.c.j)&&hpd.Hc(g.d.j)){continue}p=RD(Wjb(k,g.d.i),60);rIb(uIb(tIb(vIb(sIb(new wIb,0),100),a.c[b.a.d]),a.c[p.a.d]));if(o.j==ppd&&q4b((J3b(),G3b,o))){for(m=RD(Qc(i,g),21).Kc();m.Ob();){l=RD(m.Pb(),60);if(l.d.c<b.d.c){n=a.c[l.a.d];q=a.c[b.a.d];if(n==q){continue}rIb(uIb(tIb(vIb(sIb(new wIb,1),100),n),q))}}}if(r.j==Xod&&v4b((J3b(),E3b,r))){for(m=RD(Qc(i,g),21).Kc();m.Ob();){l=RD(m.Pb(),60);if(l.d.c>b.d.c){n=a.c[b.a.d];q=a.c[l.a.d];if(n==q){continue}rIb(uIb(tIb(vIb(sIb(new wIb,1),100),n),q))}}}}}}} -function mNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;m=RD(RD(Qc(a.r,b),21),87);if(b==(qpd(),Xod)||b==ppd){qNb(a,b);return}f=b==Yod?(mOb(),iOb):(mOb(),lOb);u=b==Yod?(vLb(),uLb):(vLb(),sLb);c=RD(Vrb(a.b,b),127);d=c.i;e=d.c+Hid(cD(WC(iE,1),vxe,28,15,[c.n.b,a.C.b,a.k]));r=d.c+d.b-Hid(cD(WC(iE,1),vxe,28,15,[c.n.c,a.C.c,a.k]));g=WNb(_Nb(f),a.t);s=b==Yod?pxe:oxe;for(l=m.Kc();l.Ob();){j=RD(l.Pb(),117);if(!j.c||j.c.d.c.length<=0){continue}q=j.b.Mf();p=j.e;n=j.c;o=n.i;o.b=(i=n.n,n.e.a+i.b+i.c);o.a=(h=n.n,n.e.b+h.d+h.a);Ivb(u,Pye);n.f=u;RKb(n,(EKb(),DKb));o.c=p.a-(o.b-q.a)/2;v=$wnd.Math.min(e,p.a);w=$wnd.Math.max(r,p.a+q.a);o.c<v?(o.c=v):o.c+o.b>w&&(o.c=w-o.b);Rmb(g.d,new sOb(o,UNb(g,o)));s=b==Yod?$wnd.Math.max(s,p.b+j.b.Mf().b):$wnd.Math.min(s,p.b)}s+=b==Yod?a.t:-a.t;t=VNb((g.e=s,g));t>0&&(RD(Vrb(a.b,b),127).a.b=t);for(k=m.Kc();k.Ob();){j=RD(k.Pb(),117);if(!j.c||j.c.d.c.length<=0){continue}o=j.c.i;o.c-=j.e.a;o.d-=j.e.b}} -function JSb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;b=new Tsb;for(i=new dMd(a);i.e!=i.i.gc();){h=RD(bMd(i),27);c=new _sb;Zjb(FSb,h,c);n=new TSb;e=RD(zDb(new SDb(null,new Twb(new is(Mr(yGd(h).a.Kc(),new ir)))),OBb(n,tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)])))),85);ISb(c,RD(e.xc((Geb(),true)),16),new VSb);d=RD(zDb(CDb(RD(e.xc(false),15).Lc(),new XSb),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);for(g=d.Kc();g.Ob();){f=RD(g.Pb(),74);m=KGd(f);if(m){j=RD(Wd(qtb(b.f,m)),21);if(!j){j=LSb(m);rtb(b.f,m,j)}ye(c,j)}}e=RD(zDb(new SDb(null,new Twb(new is(Mr(zGd(h).a.Kc(),new ir)))),OBb(n,tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb])))),85);ISb(c,RD(e.xc(true),16),new ZSb);d=RD(zDb(CDb(RD(e.xc(false),15).Lc(),new _Sb),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);for(l=d.Kc();l.Ob();){k=RD(l.Pb(),74);m=MGd(k);if(m){j=RD(Wd(qtb(b.f,m)),21);if(!j){j=LSb(m);rtb(b.f,m,j)}ye(c,j)}}}} -function zjb(a,b){xjb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p;i=Ddb(a,0)<0;i&&(a=Odb(a));if(Ddb(a,0)==0){switch(b){case 0:return '0';case 1:return zxe;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:n=new bib;b<0?(n.a+='0E+',n):(n.a+='0E',n);n.a+=b==qwe?'2147483648':''+-b;return n.a;}}k=18;l=$C(hE,zwe,28,k+1,15,1);c=k;p=a;do{j=p;p=Fdb(p,10);l[--c]=Ydb(Bdb(48,Vdb(j,Ndb(p,10))))&Bwe}while(Ddb(p,0)!=0);e=Vdb(Vdb(Vdb(k,c),b),1);if(b==0){i&&(l[--c]=45);return Ihb(l,c,k-c)}if(b>0&&Ddb(e,-6)>=0){if(Ddb(e,0)>=0){f=c+Ydb(e);for(h=k-1;h>=f;h--){l[h+1]=l[h]}l[++f]=46;i&&(l[--c]=45);return Ihb(l,c,k-c+1)}for(g=2;Ldb(g,Bdb(Odb(e),1));g++){l[--c]=48}l[--c]=46;l[--c]=48;i&&(l[--c]=45);return Ihb(l,c,k-c)}o=c+1;d=k;m=new cib;i&&(m.a+='-',m);if(d-o>=1){Thb(m,l[c]);m.a+='.';m.a+=Ihb(l,c+1,k-c-1)}else{m.a+=Ihb(l,c,k-c)}m.a+='E';Ddb(e,0)>0&&(m.a+='+',m);m.a+=''+Zdb(e);return m.a} -function Esd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;q=new rjd(a.g,a.f);p=vsd(a);p.a=$wnd.Math.max(p.a,b);p.b=$wnd.Math.max(p.b,c);w=p.a/q.a;k=p.b/q.b;u=p.a-q.a;i=p.b-q.b;if(d){g=!vCd(a)?RD(Gxd(a,(umd(),Nkd)),88):RD(Gxd(vCd(a),(umd(),Nkd)),88);h=dE(Gxd(a,(umd(),Hld)))===dE((Bod(),wod));for(s=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));s.e!=s.i.gc();){r=RD(bMd(s),123);t=RD(Gxd(r,Old),64);if(t==(qpd(),opd)){t=osd(r,g);Ixd(r,Old,t)}switch(t.g){case 1:h||Dyd(r,r.i*w);break;case 2:Dyd(r,r.i+u);h||Eyd(r,r.j*k);break;case 3:h||Dyd(r,r.i*w);Eyd(r,r.j+i);break;case 4:h||Eyd(r,r.j*k);}}}zyd(a,p.a,p.b);if(e){for(m=new dMd((!a.n&&(a.n=new C5d(I4,a,1,7)),a.n));m.e!=m.i.gc();){l=RD(bMd(m),135);n=l.i+l.g/2;o=l.j+l.f/2;v=n/q.a;j=o/q.b;if(v+j>=1){if(v-j>0&&o>=0){Dyd(l,l.i+u);Eyd(l,l.j+i*j)}else if(v-j<0&&n>=0){Dyd(l,l.i+u*v);Eyd(l,l.j+i)}}}}Ixd(a,(umd(),kld),(Qpd(),f=RD(mfb(H3),9),new Fsb(f,RD(WEb(f,f.length),9),0)));return new rjd(w,k)} -function _4c(a){Cgd(a,new Pfd(Wfd($fd(Xfd(Zfd(Yfd(new agd,CFe),'ELK Radial'),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new c5c),CFe)));Agd(a,CFe,fEe,iGd(R4c));Agd(a,CFe,_ze,iGd(Y4c));Agd(a,CFe,jAe,iGd(K4c));Agd(a,CFe,CAe,iGd(L4c));Agd(a,CFe,iAe,iGd(M4c));Agd(a,CFe,kAe,iGd(J4c));Agd(a,CFe,gAe,iGd(N4c));Agd(a,CFe,lAe,iGd(Q4c));Agd(a,CFe,tFe,iGd(H4c));Agd(a,CFe,sFe,iGd(I4c));Agd(a,CFe,rFe,iGd(T4c));Agd(a,CFe,xFe,iGd(W4c));Agd(a,CFe,yFe,iGd(U4c));Agd(a,CFe,zFe,iGd(V4c));Agd(a,CFe,wFe,iGd(O4c));Agd(a,CFe,pFe,iGd(P4c));Agd(a,CFe,qFe,iGd(S4c));Agd(a,CFe,uFe,iGd(X4c));Agd(a,CFe,vFe,iGd(Z4c));Agd(a,CFe,oFe,iGd(G4c))} -function Peb(a){var b,c,d,e,f,g,h,i,j,k,l;if(a==null){throw Adb(new Vgb(vve))}j=a;f=a.length;i=false;if(f>0){b=(BFb(0,a.length),a.charCodeAt(0));if(b==45||b==43){a=(BFb(1,a.length+1),a.substr(1));--f;i=b==45}}if(f==0){throw Adb(new Vgb(nxe+j+'"'))}while(a.length>0&&(BFb(0,a.length),a.charCodeAt(0)==48)){a=(BFb(1,a.length+1),a.substr(1));--f}if(f>(Ugb(),Sgb)[10]){throw Adb(new Vgb(nxe+j+'"'))}for(e=0;e<f;e++){if(dfb((BFb(e,a.length),a.charCodeAt(e)))==-1){throw Adb(new Vgb(nxe+j+'"'))}}l=0;g=Qgb[10];k=Rgb[10];h=Odb(Tgb[10]);c=true;d=f%g;if(d>0){l=-parseInt((AFb(0,d,a.length),a.substr(0,d)),10);a=(BFb(d,a.length+1),a.substr(d));f-=d;c=false}while(f>=g){d=parseInt((AFb(0,g,a.length),a.substr(0,g)),10);a=(BFb(g,a.length+1),a.substr(g));f-=g;if(c){c=false}else{if(Ddb(l,h)<0){throw Adb(new Vgb(nxe+j+'"'))}l=Ndb(l,k)}l=Vdb(l,d)}if(Ddb(l,0)>0){throw Adb(new Vgb(nxe+j+'"'))}if(!i){l=Odb(l);if(Ddb(l,0)<0){throw Adb(new Vgb(nxe+j+'"'))}}return l} -function oSd(a){gSd();var b,c,d,e,f,g,h,i;if(a==null)return null;e=qhb(a,Fhb(37));if(e<0){return a}else{i=new dib((AFb(0,e,a.length),a.substr(0,e)));b=$C(gE,YHe,28,4,15,1);h=0;d=0;for(g=a.length;e<g;e++){BFb(e,a.length);if(a.charCodeAt(e)==37&&a.length>e+2&&zSd((BFb(e+1,a.length),a.charCodeAt(e+1)),XRd,YRd)&&zSd((BFb(e+2,a.length),a.charCodeAt(e+2)),XRd,YRd)){c=DSd((BFb(e+1,a.length),a.charCodeAt(e+1)),(BFb(e+2,a.length),a.charCodeAt(e+2)));e+=2;if(d>0){(c&192)==128?(b[h++]=c<<24>>24):(d=0)}else if(c>=128){if((c&224)==192){b[h++]=c<<24>>24;d=2}else if((c&240)==224){b[h++]=c<<24>>24;d=3}else if((c&248)==240){b[h++]=c<<24>>24;d=4}}if(d>0){if(h==d){switch(h){case 2:{Thb(i,((b[0]&31)<<6|b[1]&63)&Bwe);break}case 3:{Thb(i,((b[0]&15)<<12|(b[1]&63)<<6|b[2]&63)&Bwe);break}}h=0;d=0}}else{for(f=0;f<h;++f){Thb(i,b[f]&Bwe)}h=0;i.a+=String.fromCharCode(c)}}else{for(f=0;f<h;++f){Thb(i,b[f]&Bwe)}h=0;Thb(i,(BFb(e,a.length),a.charCodeAt(e)))}}return i.a}} -function atd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;n=vCd(AGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84)));o=vCd(AGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84)));l=n==o;h=new pjd;b=RD(Gxd(a,(vnd(),ond)),75);if(!!b&&b.b>=2){if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i==0){c=(bvd(),e=new Rzd,e);WGd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),c)}else if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i>1){m=new mMd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a));while(m.e!=m.i.gc()){cMd(m)}}lsd(b,RD(QHd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),0),166))}if(l){for(d=new dMd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a));d.e!=d.i.gc();){c=RD(bMd(d),166);for(j=new dMd((!c.a&&(c.a=new XZd(D4,c,5)),c.a));j.e!=j.i.gc();){i=RD(bMd(j),377);h.a=$wnd.Math.max(h.a,i.a);h.b=$wnd.Math.max(h.b,i.b)}}}for(g=new dMd((!a.n&&(a.n=new C5d(I4,a,1,7)),a.n));g.e!=g.i.gc();){f=RD(bMd(g),135);k=RD(Gxd(f,und),8);!!k&&Byd(f,k.a,k.b);if(l){h.a=$wnd.Math.max(h.a,f.i+f.g);h.b=$wnd.Math.max(h.b,f.j+f.f)}}return h} -function MA(a,b,c,d,e){var f,g,h;KA(a,b);g=b[0];f=ihb(c.c,0);h=-1;if(DA(c)){if(d>0){if(g+d>a.length){return false}h=HA((AFb(0,g+d,a.length),a.substr(0,g+d)),b)}else{h=HA(a,b)}}switch(f){case 71:h=EA(a,g,cD(WC(qJ,1),Nve,2,6,[Qwe,Rwe]),b);e.e=h;return true;case 77:return PA(a,b,e,h,g);case 76:return RA(a,b,e,h,g);case 69:return NA(a,b,g,e);case 99:return QA(a,b,g,e);case 97:h=EA(a,g,cD(WC(qJ,1),Nve,2,6,['AM','PM']),b);e.b=h;return true;case 121:return TA(a,b,g,h,c,e);case 100:if(h<=0){return false}e.c=h;return true;case 83:if(h<0){return false}return OA(h,g,b[0],e);case 104:h==12&&(h=0);case 75:case 72:if(h<0){return false}e.f=h;e.g=false;return true;case 107:if(h<0){return false}e.f=h;e.g=true;return true;case 109:if(h<0){return false}e.j=h;return true;case 115:if(h<0){return false}e.n=h;return true;case 90:if(g<a.length&&(BFb(g,a.length),a.charCodeAt(g)==90)){++b[0];e.o=0;return true}case 122:case 118:return SA(a,g,b,e);default:return false;}} -function YQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=b.c.length;e=new sQc(a.a,c,null,null);B=$C(iE,vxe,28,t,15,1);p=$C(iE,vxe,28,t,15,1);o=$C(iE,vxe,28,t,15,1);q=0;for(h=0;h<t;h++){p[h]=lve;o[h]=qwe}for(i=0;i<t;i++){d=(tFb(i,b.c.length),RD(b.c[i],185));B[i]=qQc(d);B[q]>B[i]&&(q=i);for(l=new Anb(a.a.b);l.a<l.c.c.length;){k=RD(ynb(l),30);for(s=new Anb(k.a);s.a<s.c.c.length;){r=RD(ynb(s),10);w=Kfb(d.p[r.p])+Kfb(d.d[r.p]);p[i]=$wnd.Math.min(p[i],w);o[i]=$wnd.Math.max(o[i],w+r.o.b)}}}A=$C(iE,vxe,28,t,15,1);for(j=0;j<t;j++){(tFb(j,b.c.length),RD(b.c[j],185)).o==(EQc(),CQc)?(A[j]=p[q]-p[j]):(A[j]=o[q]-o[j])}f=$C(iE,vxe,28,t,15,1);for(n=new Anb(a.a.b);n.a<n.c.c.length;){m=RD(ynb(n),30);for(v=new Anb(m.a);v.a<v.c.c.length;){u=RD(ynb(v),10);for(g=0;g<t;g++){f[g]=Kfb((tFb(g,b.c.length),RD(b.c[g],185)).p[u.p])+Kfb((tFb(g,b.c.length),RD(b.c[g],185)).d[u.p])+A[g]}bFb(f,heb(iob.prototype.Me,iob,[]));e.p[u.p]=(f[1]+f[2])/2;e.d[u.p]=0}}return e} -function X6b(a,b,c){var d,e,f,g,h;d=b.i;f=a.i.o;e=a.i.d;h=a.n;g=xjd(cD(WC(l3,1),Nve,8,0,[h,a.a]));switch(a.j.g){case 1:SKb(b,(vLb(),sLb));d.d=-e.d-c-d.a;if(RD(RD(Vmb(b.d,0),187).of((Ywc(),swc)),290)==(Pnd(),Lnd)){RKb(b,(EKb(),DKb));d.c=g.a-Kfb(UD(mQb(a,ywc)))-c-d.b}else{RKb(b,(EKb(),CKb));d.c=g.a+Kfb(UD(mQb(a,ywc)))+c}break;case 2:RKb(b,(EKb(),CKb));d.c=f.a+e.c+c;if(RD(RD(Vmb(b.d,0),187).of((Ywc(),swc)),290)==(Pnd(),Lnd)){SKb(b,(vLb(),sLb));d.d=g.b-Kfb(UD(mQb(a,ywc)))-c-d.a}else{SKb(b,(vLb(),uLb));d.d=g.b+Kfb(UD(mQb(a,ywc)))+c}break;case 3:SKb(b,(vLb(),uLb));d.d=f.b+e.a+c;if(RD(RD(Vmb(b.d,0),187).of((Ywc(),swc)),290)==(Pnd(),Lnd)){RKb(b,(EKb(),DKb));d.c=g.a-Kfb(UD(mQb(a,ywc)))-c-d.b}else{RKb(b,(EKb(),CKb));d.c=g.a+Kfb(UD(mQb(a,ywc)))+c}break;case 4:RKb(b,(EKb(),DKb));d.c=-e.b-c-d.b;if(RD(RD(Vmb(b.d,0),187).of((Ywc(),swc)),290)==(Pnd(),Lnd)){SKb(b,(vLb(),sLb));d.d=g.b-Kfb(UD(mQb(a,ywc)))-c-d.a}else{SKb(b,(vLb(),uLb));d.d=g.b+Kfb(UD(mQb(a,ywc)))+c}}} -function Q8c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;c.Ug(AFe,1);!b.a&&(b.a=new C5d(J4,b,10,11));d=Kfb(UD(Gxd(b,(X7c(),x7c))));k=Kfb(UD(Gxd(b,Q7c)));m=RD(Gxd(b,N7c),107);n=new m9c(d,k);f=l9c(n,b,m);P8c(b,n);h=RD(Gxd(b,K7c),17).a;while(h>1){e=N8c(b);l=f.g;o=RD(Gxd(b,N7c),107);p=Kfb(UD(Gxd(b,x7c)));(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i>1&&Kfb(UD(Gxd(b,(X6c(),T6c))))!=oxe&&(f.c+(o.b+o.c))/(f.b+(o.d+o.a))<p?Ixd(e,(X6c(),W6c),Kfb(UD(Gxd(b,W6c)))+Kfb(UD(Gxd(b,T6c)))):(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i>1&&Kfb(UD(Gxd(b,(X6c(),S6c))))!=oxe&&(f.c+(o.b+o.c))/(f.b+(o.d+o.a))>p&&Ixd(e,(X6c(),W6c),$wnd.Math.max(Kfb(UD(Gxd(b,U6c))),Kfb(UD(Gxd(e,W6c)))-Kfb(UD(Gxd(b,S6c)))));n=new m9c(d,k);i=l9c(n,e,m);j=i.g;if(j>=l&&j==j){for(g=0;g<(!e.a&&(e.a=new C5d(J4,e,10,11)),e.a).i;g++){O8c(a,RD(QHd((!e.a&&(e.a=new C5d(J4,e,10,11)),e.a),g),27),RD(QHd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a),g),27))}P8c(b,n);jad(f,i.c);iad(f,i.b)}--h}Ixd(b,(X6c(),N6c),f.b);Ixd(b,O6c,f.c);c.Vg()} -function fHc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;b.Ug('Interactive node layering',1);c=new bnb;for(m=new Anb(a.a);m.a<m.c.c.length;){k=RD(ynb(m),10);i=k.n.a;h=i+k.o.a;h=$wnd.Math.max(i+1,h);s=new Jkb(c,0);d=null;while(s.b<s.d.gc()){q=(sFb(s.b<s.d.gc()),RD(s.d.Xb(s.c=s.b++),578));if(q.c>=h){sFb(s.b>0);s.a.Xb(s.c=--s.b);break}else if(q.a>i){if(!d){Rmb(q.b,k);q.c=$wnd.Math.min(q.c,i);q.a=$wnd.Math.max(q.a,h);d=q}else{Tmb(d.b,q.b);d.a=$wnd.Math.max(d.a,q.a);Ckb(s)}}}if(!d){d=new jHc;d.c=i;d.a=h;Ikb(s,d);Rmb(d.b,k)}}g=a.b;j=0;for(r=new Anb(c);r.a<r.c.c.length;){q=RD(ynb(r),578);e=new R4b(a);e.p=j++;ZEb(g.c,e);for(n=new Anb(q.b);n.a<n.c.c.length;){k=RD(ynb(n),10);g3b(k,e);k.p=0}}for(l=new Anb(a.a);l.a<l.c.c.length;){k=RD(ynb(l),10);if(k.p==0){p=eHc(k,a);while(p.a.gc()!=0){o=RD(p.a.ec().Kc().Pb(),10);p.a.Bc(o)!=null;ye(p,eHc(o,a))}}}f=new Jkb(g,0);while(f.b<f.d.gc()){(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),30)).a.c.length==0&&Ckb(f)}a.a.c.length=0;b.Vg()} -function grd(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;n=0;D=0;for(i=new Anb(a);i.a<i.c.c.length;){h=RD(ynb(i),27);Dsd(h);n=$wnd.Math.max(n,h.g);D+=h.g*h.f}o=D/a.c.length;C=ard(a,o);D+=a.c.length*C;n=$wnd.Math.max(n,$wnd.Math.sqrt(D*g))+c.b;H=c.b;I=c.d;m=0;k=c.b+c.c;B=new Yub;Mub(B,sgb(0));w=new Yub;j=new Jkb(a,0);while(j.b<j.d.gc()){h=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),27));G=h.g;l=h.f;if(H+G>n){if(f){Oub(w,m);Oub(B,sgb(j.b-1))}H=c.b;I+=m+b;m=0;k=$wnd.Math.max(k,c.b+c.c+G)}Dyd(h,H);Eyd(h,I);k=$wnd.Math.max(k,H+G+c.c);m=$wnd.Math.max(m,l);H+=G+b}k=$wnd.Math.max(k,d);F=I+m+c.a;if(F<e){m+=e-F;F=e}if(f){H=c.b;j=new Jkb(a,0);Oub(B,sgb(a.c.length));A=Sub(B,0);r=RD(evb(A),17).a;Oub(w,m);v=Sub(w,0);u=0;while(j.b<j.d.gc()){if(j.b==r){H=c.b;u=Kfb(UD(evb(v)));r=RD(evb(A),17).a}h=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),27));s=h.f;Ayd(h,u);p=u;if(j.b==r){q=k-H-c.c;t=h.g;Cyd(h,q);Jsd(h,new rjd(q,p),new rjd(t,s))}H+=h.g+b}}return new rjd(k,F)} -function h0b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;b.Ug('Compound graph postprocessor',1);c=Heb(TD(mQb(a,(yCc(),mCc))));h=RD(mQb(a,(Ywc(),_vc)),229);k=new _sb;for(r=h.ec().Kc();r.Ob();){q=RD(r.Pb(),18);g=new dnb(h.cc(q));yob();_mb(g,new M0b(a));v=H0b((tFb(0,g.c.length),RD(g.c[0],249)));A=I0b(RD(Vmb(g,g.c.length-1),249));t=v.i;n2b(A.i,t)?(s=t.e):(s=Y2b(t));l=i0b(q,g);Xub(q.a);m=null;for(f=new Anb(g);f.a<f.c.c.length;){e=RD(ynb(f),249);p=new pjd;e2b(p,e.a,s);n=e.b;d=new Ejd;Ajd(d,0,n.a);Cjd(d,p);u=new sjd(K3b(n.c));w=new sjd(K3b(n.d));$id(u,p);$id(w,p);if(m){d.b==0?(o=w):(o=(sFb(d.b!=0),RD(d.a.a.c,8)));B=$wnd.Math.abs(m.a-o.a)>Vze;C=$wnd.Math.abs(m.b-o.b)>Vze;(!c&&B&&C||c&&(B||C))&&Mub(q.a,u)}ye(q.a,d);d.b==0?(m=u):(m=(sFb(d.b!=0),RD(d.c.b.c,8)));j0b(n,l,p);if(I0b(e)==A){if(Y2b(A.i)!=e.a){p=new pjd;e2b(p,Y2b(A.i),s)}pQb(q,Wwc,p)}k0b(n,q,s);k.a.zc(n,k)}Y0b(q,v);Z0b(q,A)}for(j=k.a.ec().Kc();j.Ob();){i=RD(j.Pb(),18);Y0b(i,null);Z0b(i,null)}b.Vg()} -function lXc(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=RD(mQb(a,(h_c(),H$c)),88);k=e==(Cmd(),ymd)||e==zmd?xmd:zmd;c=RD(zDb(CDb(new SDb(null,new Swb(a.b,16)),new $Xc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);i=RD(zDb(GDb(c.Oc(),new aYc(b)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);i.Gc(RD(zDb(GDb(c.Oc(),new cYc(b)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),16));i.jd(new eYc(k));m=new yAb(new iYc(e));d=new Tsb;for(h=i.Kc();h.Ob();){g=RD(h.Pb(),240);j=RD(g.a,39);if(Heb(TD(g.c))){m.a.zc(j,(Geb(),Eeb))==null;(new zAb(m.a.Zc(j,false))).a.gc()>0&&Zjb(d,j,RD((new zAb(m.a.Zc(j,false))).a.Vc(),39));(new zAb(m.a.ad(j,true))).a.gc()>1&&Zjb(d,nXc(m,j),j)}else{if((new zAb(m.a.Zc(j,false))).a.gc()>0){f=RD((new zAb(m.a.Zc(j,false))).a.Vc(),39);dE(f)===dE(Wd(qtb(d.f,j)))&&RD(mQb(j,(q$c(),TZc)),15).Fc(f)}if((new zAb(m.a.ad(j,true))).a.gc()>1){l=nXc(m,j);dE(Wd(qtb(d.f,l)))===dE(j)&&RD(mQb(l,(q$c(),TZc)),15).Fc(j)}m.a.Bc(j)!=null}}} -function BTb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;if(a.gc()==1){return RD(a.Xb(0),235)}else if(a.gc()<=0){return new gUb}for(e=a.Kc();e.Ob();){c=RD(e.Pb(),235);o=0;k=lve;l=lve;i=qwe;j=qwe;for(n=new Anb(c.e);n.a<n.c.c.length;){m=RD(ynb(n),153);o+=RD(mQb(m,(yVb(),lVb)),17).a;k=$wnd.Math.min(k,m.d.a-m.e.a/2);l=$wnd.Math.min(l,m.d.b-m.e.b/2);i=$wnd.Math.max(i,m.d.a+m.e.a/2);j=$wnd.Math.max(j,m.d.b+m.e.b/2)}pQb(c,(yVb(),lVb),sgb(o));pQb(c,(JVb(),GVb),new rjd(k,l));pQb(c,FVb,new rjd(i,j))}yob();a.jd(new FTb);p=new gUb;kQb(p,RD(a.Xb(0),96));h=0;s=0;for(f=a.Kc();f.Ob();){c=RD(f.Pb(),235);q=ojd(ajd(RD(mQb(c,(JVb(),FVb)),8)),RD(mQb(c,GVb),8));h=$wnd.Math.max(h,q.a);s+=q.a*q.b}h=$wnd.Math.max(h,$wnd.Math.sqrt(s)*Kfb(UD(mQb(p,(yVb(),ZUb)))));r=Kfb(UD(mQb(p,rVb)));t=0;u=0;g=0;b=r;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),235);q=ojd(ajd(RD(mQb(c,(JVb(),FVb)),8)),RD(mQb(c,GVb),8));if(t+q.a>h){t=0;u+=g+r;g=0}ATb(p,c,t,u);b=$wnd.Math.max(b,t+q.a);g=$wnd.Math.max(g,q.b);t+=q.a+r}return p} -function Aqe(a){zqe();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;f=Ahb(a);o=Dqe(f);if(o%4!=0){return null}p=o/4|0;if(p==0)return $C(gE,YHe,28,0,15,1);l=null;b=0;c=0;d=0;e=0;g=0;h=0;i=0;j=0;n=0;m=0;k=0;l=$C(gE,YHe,28,p*3,15,1);for(;n<p-1;n++){if(!Cqe(g=f[k++])||!Cqe(h=f[k++])||!Cqe(i=f[k++])||!Cqe(j=f[k++]))return null;b=xqe[g];c=xqe[h];d=xqe[i];e=xqe[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}if(!Cqe(g=f[k++])||!Cqe(h=f[k++])){return null}b=xqe[g];c=xqe[h];i=f[k++];j=f[k++];if(xqe[i]==-1||xqe[j]==-1){if(i==61&&j==61){if((c&15)!=0)return null;q=$C(gE,YHe,28,n*3+1,15,1);hib(l,0,q,0,n*3);q[m]=(b<<2|c>>4)<<24>>24;return q}else if(i!=61&&j==61){d=xqe[i];if((d&3)!=0)return null;q=$C(gE,YHe,28,n*3+2,15,1);hib(l,0,q,0,n*3);q[m++]=(b<<2|c>>4)<<24>>24;q[m]=((c&15)<<4|d>>2&15)<<24>>24;return q}else{return null}}else{d=xqe[i];e=xqe[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}return l} -function wfc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;b.Ug(qBe,1);o=RD(mQb(a,(yCc(),yAc)),223);for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);j=t2b(d.a);for(g=j,h=0,i=g.length;h<i;++h){f=g[h];if(f.k!=(r3b(),q3b)){continue}if(o==(Ymd(),Wmd)){for(l=new Anb(f.j);l.a<l.c.c.length;){k=RD(ynb(l),12);k.e.c.length==0||zfc(k);k.g.c.length==0||Afc(k)}}else if(ZD(mQb(f,(Ywc(),Awc)),18)){q=RD(mQb(f,Awc),18);r=RD(e3b(f,(qpd(),ppd)).Kc().Pb(),12);s=RD(e3b(f,Xod).Kc().Pb(),12);t=RD(mQb(r,Awc),12);u=RD(mQb(s,Awc),12);Y0b(q,u);Z0b(q,t);v=new sjd(s.i.n);v.a=xjd(cD(WC(l3,1),Nve,8,0,[u.i.n,u.n,u.a])).a;Mub(q.a,v);v=new sjd(r.i.n);v.a=xjd(cD(WC(l3,1),Nve,8,0,[t.i.n,t.n,t.a])).a;Mub(q.a,v)}else{if(f.j.c.length>=2){p=true;m=new Anb(f.j);c=RD(ynb(m),12);n=null;while(m.a<m.c.c.length){n=c;c=RD(ynb(m),12);if(!pb(mQb(n,Awc),mQb(c,Awc))){p=false;break}}}else{p=false}for(l=new Anb(f.j);l.a<l.c.c.length;){k=RD(ynb(l),12);k.e.c.length==0||xfc(k,p);k.g.c.length==0||yfc(k,p)}}g3b(f,null)}}b.Vg()} -function LQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;for(h=new Anb(a.a.b);h.a<h.c.c.length;){f=RD(ynb(h),30);for(t=new Anb(f.a);t.a<t.c.c.length;){s=RD(ynb(t),10);b.g[s.p]=s;b.a[s.p]=s;b.d[s.p]=0}}i=a.a.b;b.c==(wQc(),uQc)&&(i=hv(i));for(g=i.Kc();g.Ob();){f=RD(g.Pb(),30);n=-1;m=f.a;if(b.o==(EQc(),DQc)){n=lve;m=hv(m)}for(v=m.Kc();v.Ob();){u=RD(v.Pb(),10);l=null;b.c==uQc?(l=RD(Vmb(a.b.f,u.p),15)):(l=RD(Vmb(a.b.b,u.p),15));if(l.gc()>0){d=l.gc();j=eE($wnd.Math.floor((d+1)/2))-1;e=eE($wnd.Math.ceil((d+1)/2))-1;if(b.o==DQc){for(k=e;k>=j;k--){if(b.a[u.p]==u){p=RD(l.Xb(k),42);o=RD(p.a,10);if(!Zsb(c,p.b)&&n>a.b.e[o.p]){b.a[o.p]=u;b.g[u.p]=b.g[o.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Geb(),Heb(b.f[b.g[u.p].p])&u.k==(r3b(),o3b)?true:false);n=a.b.e[o.p]}}}}else{for(k=j;k<=e;k++){if(b.a[u.p]==u){r=RD(l.Xb(k),42);q=RD(r.a,10);if(!Zsb(c,r.b)&&n<a.b.e[q.p]){b.a[q.p]=u;b.g[u.p]=b.g[q.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Geb(),Heb(b.f[b.g[u.p].p])&u.k==(r3b(),o3b)?true:false);n=a.b.e[q.p]}}}}}}}} -function iOc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=a.c[(tFb(0,b.c.length),RD(b.c[0],18)).p];A=a.c[(tFb(1,b.c.length),RD(b.c[1],18)).p];if(t.a.e.e-t.a.a-(t.b.e.e-t.b.a)==0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)==0){return false}r=t.b.e.f;if(!ZD(r,10)){return false}q=RD(r,10);v=a.i[q.p];w=!q.c?-1:Wmb(q.c.a,q,0);f=oxe;if(w>0){e=RD(Vmb(q.c.a,w-1),10);g=a.i[e.p];B=$wnd.Math.ceil(bFc(a.n,e,q));f=v.a.e-q.d.d-(g.a.e+e.o.b+e.d.a)-B}j=oxe;if(w<q.c.a.c.length-1){i=RD(Vmb(q.c.a,w+1),10);k=a.i[i.p];B=$wnd.Math.ceil(bFc(a.n,i,q));j=k.a.e-i.d.d-(v.a.e+q.o.b+q.d.a)-B}if(c&&(Zy(),bz(vEe),$wnd.Math.abs(f-j)<=vEe||f==j||isNaN(f)&&isNaN(j))){return true}d=GOc(t.a);h=-GOc(t.b);l=-GOc(A.a);s=GOc(A.b);p=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)>0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)<0;o=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)<0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)>0;n=t.a.e.e+t.b.a<A.b.e.e+A.a.a;m=t.a.e.e+t.b.a>A.b.e.e+A.a.a;u=0;!p&&!o&&(m?f+l>0?(u=l):j-d>0&&(u=d):n&&(f+h>0?(u=h):j-s>0&&(u=s)));v.a.e+=u;v.b&&(v.d.e+=u);return false} -function OJb(a,b,c){var d,e,f,g,h,i,j,k,l,m;d=new Uid(b.Lf().a,b.Lf().b,b.Mf().a,b.Mf().b);e=new Tid;if(a.c){for(g=new Anb(b.Rf());g.a<g.c.c.length;){f=RD(ynb(g),187);e.c=f.Lf().a+b.Lf().a;e.d=f.Lf().b+b.Lf().b;e.b=f.Mf().a;e.a=f.Mf().b;Sid(d,e)}}for(j=new Anb(b.Xf());j.a<j.c.c.length;){i=RD(ynb(j),852);k=i.Lf().a+b.Lf().a;l=i.Lf().b+b.Lf().b;if(a.e){e.c=k;e.d=l;e.b=i.Mf().a;e.a=i.Mf().b;Sid(d,e)}if(a.d){for(g=new Anb(i.Rf());g.a<g.c.c.length;){f=RD(ynb(g),187);e.c=f.Lf().a+k;e.d=f.Lf().b+l;e.b=f.Mf().a;e.a=f.Mf().b;Sid(d,e)}}if(a.b){m=new rjd(-c,-c);if(RD(b.of((umd(),Lld)),181).Hc((Pod(),Nod))){for(g=new Anb(i.Rf());g.a<g.c.c.length;){f=RD(ynb(g),187);m.a+=f.Mf().a+c;m.b+=f.Mf().b+c}}m.a=$wnd.Math.max(m.a,0);m.b=$wnd.Math.max(m.b,0);MJb(d,i.Wf(),i.Uf(),b,i,m,c)}}a.b&&MJb(d,b.Wf(),b.Uf(),b,null,null,c);h=new S2b(b.Vf());h.d=$wnd.Math.max(0,b.Lf().b-d.d);h.a=$wnd.Math.max(0,d.d+d.a-(b.Lf().b+b.Mf().b));h.b=$wnd.Math.max(0,b.Lf().a-d.c);h.c=$wnd.Math.max(0,d.c+d.b-(b.Lf().a+b.Mf().a));b.Zf(h)} -function Mz(){var a=['\\u0000','\\u0001','\\u0002','\\u0003','\\u0004','\\u0005','\\u0006','\\u0007','\\b','\\t','\\n','\\u000B','\\f','\\r','\\u000E','\\u000F','\\u0010','\\u0011','\\u0012','\\u0013','\\u0014','\\u0015','\\u0016','\\u0017','\\u0018','\\u0019','\\u001A','\\u001B','\\u001C','\\u001D','\\u001E','\\u001F'];a[34]='\\"';a[92]='\\\\';a[173]='\\u00ad';a[1536]='\\u0600';a[1537]='\\u0601';a[1538]='\\u0602';a[1539]='\\u0603';a[1757]='\\u06dd';a[1807]='\\u070f';a[6068]='\\u17b4';a[6069]='\\u17b5';a[8203]='\\u200b';a[8204]='\\u200c';a[8205]='\\u200d';a[8206]='\\u200e';a[8207]='\\u200f';a[8232]='\\u2028';a[8233]='\\u2029';a[8234]='\\u202a';a[8235]='\\u202b';a[8236]='\\u202c';a[8237]='\\u202d';a[8238]='\\u202e';a[8288]='\\u2060';a[8289]='\\u2061';a[8290]='\\u2062';a[8291]='\\u2063';a[8292]='\\u2064';a[8298]='\\u206a';a[8299]='\\u206b';a[8300]='\\u206c';a[8301]='\\u206d';a[8302]='\\u206e';a[8303]='\\u206f';a[65279]='\\ufeff';a[65529]='\\ufff9';a[65530]='\\ufffa';a[65531]='\\ufffb';return a} -function zVb(a){Cgd(a,new Pfd(_fd(Wfd($fd(Xfd(Zfd(Yfd(new agd,Zze),'ELK Force'),'Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported.'),new CVb),Zze),ysb((aGd(),ZFd),cD(WC(T5,1),jwe,245,0,[XFd])))));Agd(a,Zze,$ze,sgb(1));Agd(a,Zze,_ze,80);Agd(a,Zze,aAe,5);Agd(a,Zze,Dze,Yze);Agd(a,Zze,bAe,sgb(1));Agd(a,Zze,cAe,(Geb(),true));Agd(a,Zze,Eze,iVb);Agd(a,Zze,dAe,iGd(_Ub));Agd(a,Zze,eAe,iGd(jVb));Agd(a,Zze,fAe,false);Agd(a,Zze,gAe,iGd(gVb));Agd(a,Zze,hAe,iGd(eVb));Agd(a,Zze,iAe,iGd(fVb));Agd(a,Zze,jAe,iGd(dVb));Agd(a,Zze,kAe,iGd(cVb));Agd(a,Zze,lAe,iGd(kVb));Agd(a,Zze,Rze,iGd(bVb));Agd(a,Zze,Uze,iGd(sVb));Agd(a,Zze,Sze,iGd(aVb));Agd(a,Zze,Wze,iGd(nVb));Agd(a,Zze,Tze,iGd(oVb));Agd(a,Zze,mAe,iGd(vVb));Agd(a,Zze,nAe,iGd(xVb));Agd(a,Zze,oAe,iGd(uVb));Agd(a,Zze,pAe,iGd(tVb));Agd(a,Zze,qAe,wVb)} -function hte(a,b){Vse();var c,d,e,f,g,h,i,j,k,l,m,n,o;if(bkb(wse)==0){l=$C(qdb,Nve,122,yse.length,0,1);for(g=0;g<l.length;g++){l[g]=(++Use,new xte(4))}d=new Rhb;for(f=0;f<vse.length;f++){k=(++Use,new xte(4));if(f<84){h=f*2;n=(BFb(h,XLe.length),XLe.charCodeAt(h));m=(BFb(h+1,XLe.length),XLe.charCodeAt(h+1));rte(k,n,m)}else{h=(f-84)*2;rte(k,zse[h],zse[h+1])}i=vse[f];lhb(i,'Specials')&&rte(k,65520,65533);if(lhb(i,VLe)){rte(k,983040,1048573);rte(k,1048576,1114109)}$jb(wse,i,k);$jb(xse,i,yte(k));j=d.a.length;0<j?(d.a=zhb(d.a,0,0)):0>j&&(d.a+=Hhb($C(hE,zwe,28,-j,15,1)));d.a+='Is';if(qhb(i,Fhb(32))>=0){for(e=0;e<i.length;e++){BFb(e,i.length);i.charCodeAt(e)!=32&&Jhb(d,(BFb(e,i.length),i.charCodeAt(e)))}}else{d.a+=''+i}lte(d.a,i,true)}lte(WLe,'Cn',false);lte(YLe,'Cn',true);c=(++Use,new xte(4));rte(c,0,MLe);$jb(wse,'ALL',c);$jb(xse,'ALL',yte(c));!Ase&&(Ase=new Tsb);$jb(Ase,WLe,WLe);!Ase&&(Ase=new Tsb);$jb(Ase,YLe,YLe);!Ase&&(Ase=new Tsb);$jb(Ase,'ALL','ALL')}o=b?RD(Xjb(wse,a),138):RD(Xjb(xse,a),138);return o} -function i_c(a){Cgd(a,new Pfd(_fd(Wfd($fd(Xfd(Zfd(Yfd(new agd,ZEe),'ELK Mr. Tree'),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new l_c),$Ee),xsb((aGd(),WFd)))));Agd(a,ZEe,Eze,U$c);Agd(a,ZEe,_ze,20);Agd(a,ZEe,ADe,3);Agd(a,ZEe,Dze,Yze);Agd(a,ZEe,$ze,sgb(1));Agd(a,ZEe,cAe,(Geb(),true));Agd(a,ZEe,LDe,iGd(G$c));Agd(a,ZEe,PDe,I$c);Agd(a,ZEe,dAe,iGd(L$c));Agd(a,ZEe,iEe,iGd(M$c));Agd(a,ZEe,jAe,iGd(O$c));Agd(a,ZEe,hAe,iGd(P$c));Agd(a,ZEe,CAe,iGd(Q$c));Agd(a,ZEe,iAe,iGd(R$c));Agd(a,ZEe,kAe,iGd(N$c));Agd(a,ZEe,gAe,iGd(S$c));Agd(a,ZEe,lAe,iGd(V$c));Agd(a,ZEe,VEe,iGd(g_c));Agd(a,ZEe,XEe,iGd(Y$c));Agd(a,ZEe,mAe,iGd(c_c));Agd(a,ZEe,nAe,iGd(e_c));Agd(a,ZEe,oAe,iGd(b_c));Agd(a,ZEe,pAe,iGd(a_c));Agd(a,ZEe,qAe,d_c);Agd(a,ZEe,UEe,iGd(W$c));Agd(a,ZEe,WEe,iGd(K$c));Agd(a,ZEe,TEe,iGd(f_c));Agd(a,ZEe,REe,iGd(F$c));Agd(a,ZEe,SEe,iGd(J$c))} -function rNb(a,b){var c,d,e,f,g,h,i,j,k,l,m;j=RD(RD(Qc(a.r,b),21),87);g=UMb(a,b);c=a.u.Hc((Pod(),Jod));for(i=j.Kc();i.Ob();){h=RD(i.Pb(),117);if(!h.c||h.c.d.c.length<=0){continue}m=h.b.Mf();k=h.c;l=k.i;l.b=(f=k.n,k.e.a+f.b+f.c);l.a=(e=k.n,k.e.b+e.d+e.a);switch(b.g){case 1:if(h.a){l.c=(m.a-l.b)/2;RKb(k,(EKb(),BKb))}else if(g||c){l.c=-l.b-a.s;RKb(k,(EKb(),DKb))}else{l.c=m.a+a.s;RKb(k,(EKb(),CKb))}l.d=-l.a-a.t;SKb(k,(vLb(),sLb));break;case 3:if(h.a){l.c=(m.a-l.b)/2;RKb(k,(EKb(),BKb))}else if(g||c){l.c=-l.b-a.s;RKb(k,(EKb(),DKb))}else{l.c=m.a+a.s;RKb(k,(EKb(),CKb))}l.d=m.b+a.t;SKb(k,(vLb(),uLb));break;case 2:if(h.a){d=a.v?l.a:RD(Vmb(k.d,0),187).Mf().b;l.d=(m.b-d)/2;SKb(k,(vLb(),tLb))}else if(g||c){l.d=-l.a-a.t;SKb(k,(vLb(),sLb))}else{l.d=m.b+a.t;SKb(k,(vLb(),uLb))}l.c=m.a+a.s;RKb(k,(EKb(),CKb));break;case 4:if(h.a){d=a.v?l.a:RD(Vmb(k.d,0),187).Mf().b;l.d=(m.b-d)/2;SKb(k,(vLb(),tLb))}else if(g||c){l.d=-l.a-a.t;SKb(k,(vLb(),sLb))}else{l.d=m.b+a.t;SKb(k,(vLb(),uLb))}l.c=-l.b-a.s;RKb(k,(EKb(),DKb));}g=false}} -function t6b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;m=false;l=false;if(Dod(RD(mQb(d,(yCc(),BBc)),101))){g=false;h=false;t:for(o=new Anb(d.j);o.a<o.c.c.length;){n=RD(ynb(o),12);for(q=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(n),new _3b(n)])));gs(q);){p=RD(hs(q),12);if(!Heb(TD(mQb(p.i,Uzc)))){if(n.j==(qpd(),Yod)){g=true;break t}if(n.j==npd){h=true;break t}}}}m=h&&!g;l=g&&!h}if(!m&&!l&&d.b.c.length!=0){k=0;for(j=new Anb(d.b);j.a<j.c.c.length;){i=RD(ynb(j),72);k+=i.n.b+i.o.b/2}k/=d.b.c.length;s=k>=d.o.b/2}else{s=!l}if(s){r=RD(mQb(d,(Ywc(),Xwc)),15);if(!r){f=new bnb;pQb(d,Xwc,f)}else if(m){f=r}else{e=RD(mQb(d,Vvc),15);if(!e){f=new bnb;pQb(d,Vvc,f)}else{r.gc()<=e.gc()?(f=r):(f=e)}}}else{e=RD(mQb(d,(Ywc(),Vvc)),15);if(!e){f=new bnb;pQb(d,Vvc,f)}else if(l){f=e}else{r=RD(mQb(d,Xwc),15);if(!r){f=new bnb;pQb(d,Xwc,f)}else{e.gc()<=r.gc()?(f=e):(f=r)}}}f.Fc(a);pQb(a,(Ywc(),Xvc),c);if(b.d==c){Z0b(b,null);c.e.c.length+c.g.c.length==0&&P3b(c,null);u6b(c)}else{Y0b(b,null);c.e.c.length+c.g.c.length==0&&P3b(c,null)}Xub(b.a)} -function GHc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;c.Ug('MinWidth layering',1);n=b.b;A=b.a;I=RD(mQb(b,(yCc(),WAc)),17).a;h=RD(mQb(b,XAc),17).a;a.b=Kfb(UD(mQb(b,TBc)));a.d=oxe;for(u=new Anb(A);u.a<u.c.c.length;){s=RD(ynb(u),10);if(s.k!=(r3b(),p3b)){continue}D=s.o.b;a.d=$wnd.Math.min(a.d,D)}a.d=$wnd.Math.max(1,a.d);B=A.c.length;a.c=$C(kE,Pwe,28,B,15,1);a.f=$C(kE,Pwe,28,B,15,1);a.e=$C(iE,vxe,28,B,15,1);j=0;a.a=0;for(v=new Anb(A);v.a<v.c.c.length;){s=RD(ynb(v),10);s.p=j++;a.c[s.p]=EHc(Z2b(s));a.f[s.p]=EHc(a3b(s));a.e[s.p]=s.o.b/a.d;a.a+=a.e[s.p]}a.b/=a.d;a.a/=B;w=FHc(A);_mb(A,Fob(new MHc(a)));p=oxe;o=lve;g=null;H=I;G=I;f=h;e=h;if(I<0){H=RD(BHc.a.Id(),17).a;G=RD(BHc.b.Id(),17).a}if(h<0){f=RD(AHc.a.Id(),17).a;e=RD(AHc.b.Id(),17).a}for(F=H;F<=G;F++){for(d=f;d<=e;d++){C=DHc(a,F,d,A,w);r=Kfb(UD(C.a));m=RD(C.b,15);q=m.gc();if(r<p||r==p&&q<o){p=r;o=q;g=m}}}for(l=g.Kc();l.Ob();){k=RD(l.Pb(),15);i=new R4b(b);for(t=k.Kc();t.Ob();){s=RD(t.Pb(),10);g3b(s,i)}ZEb(n.c,i)}Eob(n);A.c.length=0;c.Vg()} -function UUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;c.Ug('Spline edge routing',1);if(b.b.c.length==0){b.f.a=0;c.Vg();return}s=Kfb(UD(mQb(b,(yCc(),cCc))));h=Kfb(UD(mQb(b,XBc)));g=Kfb(UD(mQb(b,UBc)));r=RD(mQb(b,DAc),350);B=r==(lFc(),kFc);A=Kfb(UD(mQb(b,EAc)));a.d=b;a.j.c.length=0;a.a.c.length=0;akb(a.k);i=RD(Vmb(b.b,0),30);k=ar(i.a,(dSc(),bSc));o=RD(Vmb(b.b,b.b.c.length-1),30);l=ar(o.a,bSc);p=new Anb(b.b);q=null;G=0;do{t=p.a<p.c.c.length?RD(ynb(p),30):null;IUc(a,q,t);LUc(a);C=cwb(nDb(IDb(CDb(new SDb(null,new Swb(a.i,16)),new jVc),new lVc)));F=0;u=G;m=!q||k&&q==i;n=!t||l&&t==o;if(C>0){j=0;!!q&&(j+=h);j+=(C-1)*g;!!t&&(j+=h);B&&!!t&&(j=$wnd.Math.max(j,JUc(t,g,s,A)));if(j<s&&!m&&!n){F=(s-j)/2;j=s}u+=j}else !m&&!n&&(u+=s);!!t&&p2b(t,u);for(w=new Anb(a.i);w.a<w.c.c.length;){v=RD(ynb(w),131);v.a.c=G;v.a.b=u-G;v.F=F;v.p=!q}Tmb(a.a,a.i);G=u;!!t&&(G+=t.c.a);q=t;m=n}while(t);for(e=new Anb(a.j);e.a<e.c.c.length;){d=RD(ynb(e),18);f=PUc(a,d);pQb(d,(Ywc(),Rwc),f);D=RUc(a,d);pQb(d,Twc,D)}b.f.a=G;a.d=null;c.Vg()} -function Z9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;a.b=b;a.a=RD(mQb(b,(yCc(),JAc)),17).a;a.c=RD(mQb(b,LAc),17).a;a.c==0&&(a.c=lve);q=new Jkb(b.b,0);while(q.b<q.d.gc()){p=(sFb(q.b<q.d.gc()),RD(q.d.Xb(q.c=q.b++),30));h=new bnb;k=-1;u=-1;for(t=new Anb(p.a);t.a<t.c.c.length;){s=RD(ynb(t),10);if(Kr((U9b(),new is(Mr(W2b(s).a.Kc(),new ir))))>=a.a){d=V9b(a,s);k=$wnd.Math.max(k,d.b);u=$wnd.Math.max(u,d.d);Rmb(h,new Ptd(s,d))}}B=new bnb;for(j=0;j<k;++j){Qmb(B,0,(sFb(q.b>0),q.a.Xb(q.c=--q.b),C=new R4b(a.b),Ikb(q,C),sFb(q.b<q.d.gc()),q.d.Xb(q.c=q.b++),C))}for(g=new Anb(h);g.a<g.c.c.length;){e=RD(ynb(g),42);n=RD(e.b,580).a;if(!n){continue}for(m=new Anb(n);m.a<m.c.c.length;){l=RD(ynb(m),10);Y9b(a,l,S9b,B)}}c=new bnb;for(i=0;i<u;++i){Rmb(c,(D=new R4b(a.b),Ikb(q,D),D))}for(f=new Anb(h);f.a<f.c.c.length;){e=RD(ynb(f),42);A=RD(e.b,580).c;if(!A){continue}for(w=new Anb(A);w.a<w.c.c.length;){v=RD(ynb(w),10);Y9b(a,v,T9b,c)}}}r=new Jkb(b.b,0);while(r.b<r.d.gc()){o=(sFb(r.b<r.d.gc()),RD(r.d.Xb(r.c=r.b++),30));o.a.c.length==0&&Ckb(r)}} -function wLd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;p=a.i!=0;t=false;r=null;if(Mvd(a.e)){k=b.gc();if(k>0){m=k<100?null:new gLd(k);j=new $Hd(b);o=j.g;r=$C(kE,Pwe,28,k,15,1);d=0;u=new ZHd(k);for(e=0;e<a.i;++e){h=a.g[e];n=h;v:for(s=0;s<2;++s){for(i=k;--i>=0;){if(n!=null?pb(n,o[i]):dE(n)===dE(o[i])){if(r.length<=d){q=r;r=$C(kE,Pwe,28,2*r.length,15,1);hib(q,0,r,0,d)}r[d++]=e;WGd(u,o[i]);break v}}n=n;if(dE(n)===dE(h)){break}}}j=u;o=u.g;k=d;if(d>r.length){q=r;r=$C(kE,Pwe,28,d,15,1);hib(q,0,r,0,d)}if(d>0){t=true;for(f=0;f<d;++f){n=o[f];m=Kge(a,RD(n,76),m)}for(g=d;--g>=0;){THd(a,r[g])}if(d!=k){for(e=k;--e>=d;){THd(j,e)}q=r;r=$C(kE,Pwe,28,d,15,1);hib(q,0,r,0,d)}b=j}}}else{b=aHd(a,b);for(e=a.i;--e>=0;){if(b.Hc(a.g[e])){THd(a,e);t=true}}}if(t){if(r!=null){c=b.gc();l=c==1?dZd(a,4,b.Kc().Pb(),null,r[0],p):dZd(a,6,b,r,r[0],p);m=c<100?null:new gLd(c);for(e=b.Kc();e.Ob();){n=e.Pb();m=oge(a,RD(n,76),m)}if(!m){qvd(a.e,l)}else{m.nj(l);m.oj()}}else{m=tLd(b.gc());for(e=b.Kc();e.Ob();){n=e.Pb();m=oge(a,RD(n,76),m)}!!m&&m.oj()}return true}else{return false}} -function i_b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c=new p_b(b);c.a||b_b(b);j=a_b(b);i=new Tp;q=new D_b;for(p=new Anb(b.a);p.a<p.c.c.length;){o=RD(ynb(p),10);for(e=new is(Mr(a3b(o).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);if(d.c.i.k==(r3b(),m3b)||d.d.i.k==m3b){k=h_b(a,d,j,q);Rc(i,f_b(k.d),k.a)}}}g=new bnb;for(t=RD(mQb(c.c,(Ywc(),ewc)),21).Kc();t.Ob();){s=RD(t.Pb(),64);n=q.c[s.g];m=q.b[s.g];h=q.a[s.g];f=null;r=null;switch(s.g){case 4:f=new Uid(a.d.a,n,j.b.a-a.d.a,m-n);r=new Uid(a.d.a,n,h,m-n);l_b(j,new rjd(f.c+f.b,f.d));l_b(j,new rjd(f.c+f.b,f.d+f.a));break;case 2:f=new Uid(j.a.a,n,a.c.a-j.a.a,m-n);r=new Uid(a.c.a-h,n,h,m-n);l_b(j,new rjd(f.c,f.d));l_b(j,new rjd(f.c,f.d+f.a));break;case 1:f=new Uid(n,a.d.b,m-n,j.b.b-a.d.b);r=new Uid(n,a.d.b,m-n,h);l_b(j,new rjd(f.c,f.d+f.a));l_b(j,new rjd(f.c+f.b,f.d+f.a));break;case 3:f=new Uid(n,j.a.b,m-n,a.c.b-j.a.b);r=new Uid(n,a.c.b-h,m-n,h);l_b(j,new rjd(f.c,f.d));l_b(j,new rjd(f.c+f.b,f.d));}if(f){l=new y_b;l.d=s;l.b=f;l.c=r;l.a=Ux(RD(Qc(i,f_b(s)),21));ZEb(g.c,l)}}Tmb(c.b,g);c.d=DZb(LZb(j));return c} -function PQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(c.p[b.p]!=null){return}h=true;c.p[b.p]=0;g=b;p=c.o==(EQc(),CQc)?pxe:oxe;do{e=a.b.e[g.p];f=g.c.a.c.length;if(c.o==CQc&&e>0||c.o==DQc&&e<f-1){i=null;j=null;c.o==DQc?(i=RD(Vmb(g.c.a,e+1),10)):(i=RD(Vmb(g.c.a,e-1),10));j=c.g[i.p];PQc(a,j,c);p=a.e.wg(p,b,g);c.j[b.p]==b&&(c.j[b.p]=c.j[j.p]);if(c.j[b.p]==c.j[j.p]){o=bFc(a.d,g,i);if(c.o==DQc){d=Kfb(c.p[b.p]);l=Kfb(c.p[j.p])+Kfb(c.d[i.p])-i.d.d-o-g.d.a-g.o.b-Kfb(c.d[g.p]);if(h){h=false;c.p[b.p]=$wnd.Math.min(l,p)}else{c.p[b.p]=$wnd.Math.min(d,$wnd.Math.min(l,p))}}else{d=Kfb(c.p[b.p]);l=Kfb(c.p[j.p])+Kfb(c.d[i.p])+i.o.b+i.d.a+o+g.d.d-Kfb(c.d[g.p]);if(h){h=false;c.p[b.p]=$wnd.Math.max(l,p)}else{c.p[b.p]=$wnd.Math.max(d,$wnd.Math.max(l,p))}}}else{o=Kfb(UD(mQb(a.a,(yCc(),bCc))));n=NQc(a,c.j[b.p]);k=NQc(a,c.j[j.p]);if(c.o==DQc){m=Kfb(c.p[b.p])+Kfb(c.d[g.p])+g.o.b+g.d.a+o-(Kfb(c.p[j.p])+Kfb(c.d[i.p])-i.d.d);TQc(n,k,m)}else{m=Kfb(c.p[b.p])+Kfb(c.d[g.p])-g.d.d-Kfb(c.p[j.p])-Kfb(c.d[i.p])-i.o.b-i.d.a-o;TQc(n,k,m)}}}else{p=a.e.wg(p,b,g)}g=c.a[g.p]}while(g!=b);qRc(a.e,b)} -function $Kc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;c=Kfb(UD(mQb(a.a.j,(yCc(),iAc))));if(c<-1||!a.a.i||Cod(RD(mQb(a.a.o,BBc),101))||b3b(a.a.o,(qpd(),Xod)).gc()<2&&b3b(a.a.o,ppd).gc()<2){return true}if(a.a.c.kg()){return false}v=0;u=0;t=new bnb;for(i=a.a.e,j=0,k=i.length;j<k;++j){h=i[j];for(m=h,n=0,p=m.length;n<p;++n){l=m[n];if(l.k==(r3b(),q3b)){ZEb(t.c,l);continue}d=a.b[l.c.p][l.p];if(l.k==m3b){d.b=1;RD(mQb(l,(Ywc(),Awc)),12).j==(qpd(),Xod)&&(u+=d.a)}else{C=b3b(l,(qpd(),ppd));C.dc()||!br(C,new lLc)?(d.c=1):(e=b3b(l,Xod),(e.dc()||!br(e,new hLc))&&(v+=d.a))}for(g=new is(Mr(a3b(l).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);v+=d.c;u+=d.b;B=f.d.i;ZKc(a,d,B)}r=Al(cD(WC(cJ,1),rve,20,0,[b3b(l,(qpd(),Yod)),b3b(l,npd)]));for(A=new is(new Il(r.a.length,r.a));gs(A);){w=RD(hs(A),12);s=RD(mQb(w,(Ywc(),Iwc)),10);if(s){v+=d.c;u+=d.b;ZKc(a,d,s)}}}for(o=new Anb(t);o.a<o.c.c.length;){l=RD(ynb(o),10);d=a.b[l.c.p][l.p];for(g=new is(Mr(a3b(l).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);v+=d.c;u+=d.b;B=f.d.i;ZKc(a,d,B)}}t.c.length=0}b=v+u;q=b==0?oxe:(v-u)/b;return q>=c} -function zEd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;t=b;s=new Tp;u=new Tp;k=wDd(t,mIe);d=new OEd(a,c,s,u);QDd(d.a,d.b,d.c,d.d,k);i=(A=s.i,!A?(s.i=new zf(s,s.c)):A);for(C=i.Kc();C.Ob();){B=RD(C.Pb(),166);e=RD(Qc(s,B),21);for(p=e.Kc();p.Ob();){o=p.Pb();v=RD(Ao(a.d,o),166);if(v){h=(!B.e&&(B.e=new Yie(F4,B,10,9)),B.e);WGd(h,v)}else{g=zDd(t,uIe);m=AIe+o+BIe+g;n=m+zIe;throw Adb(new CDd(n))}}}j=(w=u.i,!w?(u.i=new zf(u,u.c)):w);for(F=j.Kc();F.Ob();){D=RD(F.Pb(),166);f=RD(Qc(u,D),21);for(r=f.Kc();r.Ob();){q=r.Pb();v=RD(Ao(a.d,q),166);if(v){l=(!D.g&&(D.g=new Yie(F4,D,9,10)),D.g);WGd(l,v)}else{g=zDd(t,uIe);m=AIe+q+BIe+g;n=m+zIe;throw Adb(new CDd(n))}}}!c.b&&(c.b=new Yie(E4,c,4,7));if(c.b.i!=0&&(!c.c&&(c.c=new Yie(E4,c,5,8)),c.c.i!=0)&&(!c.b&&(c.b=new Yie(E4,c,4,7)),c.b.i<=1&&(!c.c&&(c.c=new Yie(E4,c,5,8)),c.c.i<=1))&&(!c.a&&(c.a=new C5d(F4,c,6,6)),c.a).i==1){G=RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166);if(!Dzd(G)&&!Ezd(G)){Kzd(G,RD(QHd((!c.b&&(c.b=new Yie(E4,c,4,7)),c.b),0),84));Lzd(G,RD(QHd((!c.c&&(c.c=new Yie(E4,c,5,8)),c.c),0),84))}}} -function QNc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;for(t=a.a,u=0,v=t.length;u<v;++u){s=t[u];j=lve;k=lve;for(o=new Anb(s.e);o.a<o.c.c.length;){m=RD(ynb(o),10);g=!m.c?-1:Wmb(m.c.a,m,0);if(g>0){l=RD(Vmb(m.c.a,g-1),10);B=bFc(a.b,m,l);q=m.n.b-m.d.d-(l.n.b+l.o.b+l.d.a+B)}else{q=m.n.b-m.d.d}j=$wnd.Math.min(q,j);if(g<m.c.a.c.length-1){l=RD(Vmb(m.c.a,g+1),10);B=bFc(a.b,m,l);r=l.n.b-l.d.d-(m.n.b+m.o.b+m.d.a+B)}else{r=2*m.n.b}k=$wnd.Math.min(r,k)}i=lve;f=false;e=RD(Vmb(s.e,0),10);for(D=new Anb(e.j);D.a<D.c.c.length;){C=RD(ynb(D),12);p=e.n.b+C.n.b+C.a.b;for(d=new Anb(C.e);d.a<d.c.c.length;){c=RD(ynb(d),18);w=c.c;b=w.i.n.b+w.n.b+w.a.b-p;if($wnd.Math.abs(b)<$wnd.Math.abs(i)&&$wnd.Math.abs(b)<(b<0?j:k)){i=b;f=true}}}h=RD(Vmb(s.e,s.e.c.length-1),10);for(A=new Anb(h.j);A.a<A.c.c.length;){w=RD(ynb(A),12);p=h.n.b+w.n.b+w.a.b;for(d=new Anb(w.g);d.a<d.c.c.length;){c=RD(ynb(d),18);C=c.d;b=C.i.n.b+C.n.b+C.a.b-p;if($wnd.Math.abs(b)<$wnd.Math.abs(i)&&$wnd.Math.abs(b)<(b<0?j:k)){i=b;f=true}}}if(f&&i!=0){for(n=new Anb(s.e);n.a<n.c.c.length;){m=RD(ynb(n),10);m.n.b+=i}}}} -function vac(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new bnb;e=lve;f=lve;g=lve;if(c){e=a.f.a;for(p=new Anb(b.j);p.a<p.c.c.length;){o=RD(ynb(p),12);for(i=new Anb(o.g);i.a<i.c.c.length;){h=RD(ynb(i),18);if(h.a.b!=0){k=RD(Qub(h.a),8);if(k.a<e){f=e-k.a;g=lve;d.c.length=0;e=k.a}if(k.a<=e){ZEb(d.c,h);h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(RD(ju(h.a,1),8).b-k.b)))}}}}}else{for(p=new Anb(b.j);p.a<p.c.c.length;){o=RD(ynb(p),12);for(i=new Anb(o.e);i.a<i.c.c.length;){h=RD(ynb(i),18);if(h.a.b!=0){m=RD(Rub(h.a),8);if(m.a>e){f=m.a-e;g=lve;d.c.length=0;e=m.a}if(m.a>=e){ZEb(d.c,h);h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(RD(ju(h.a,h.a.b-2),8).b-m.b)))}}}}}if(d.c.length!=0&&f>b.o.a/2&&g>b.o.b/2){n=new R3b;P3b(n,b);Q3b(n,(qpd(),Yod));n.n.a=b.o.a/2;r=new R3b;P3b(r,b);Q3b(r,npd);r.n.a=b.o.a/2;r.n.b=b.o.b;for(i=new Anb(d);i.a<i.c.c.length;){h=RD(ynb(i),18);if(c){j=RD(Uub(h.a),8);q=h.a.b==0?K3b(h.d):RD(Qub(h.a),8);q.b>=j.b?Y0b(h,r):Y0b(h,n)}else{j=RD(Vub(h.a),8);q=h.a.b==0?K3b(h.c):RD(Rub(h.a),8);q.b>=j.b?Z0b(h,r):Z0b(h,n)}l=RD(mQb(h,(yCc(),RAc)),75);!!l&&ze(l,j,true)}b.n.a=e-b.o.a/2}} -function E0c(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(h=Sub(a.b,0);h.b!=h.d.c;){g=RD(evb(h),39);if(lhb(g.c,IEe)){continue}j=iWc(g,a);b==(Cmd(),ymd)||b==zmd?_mb(j,new D1c):_mb(j,new H1c);i=j.c.length;for(d=0;d<i;d++){k=(tFb(d,j.c.length),RD(j.c[d],65)).c;lhb(k.c,'n11')&&o0;if(Heb(TD(mQb(g,(q$c(),UZc))))&&!mWc((tFb(d,j.c.length),RD(j.c[d],65)),a)){continue}e=i==1?0.5:(d+1)/(i+1);if(b==ymd){f=Kfb(UD(mQb(g,f$c)));m=g.e.b+g.f.b*e;Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd($wnd.Math.min(f,g.e.a-c),m));Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(g.e.a,m))}else if(b==zmd){f=Kfb(UD(mQb(g,e$c)))+c;m=g.e.b+g.f.b*e;Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(f,m));Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(g.e.a+g.f.a,m))}else if(b==Bmd){f=Kfb(UD(mQb(g,f$c)));l=g.e.a+g.f.a*e;Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(l,$wnd.Math.min(g.e.b-c,f)));Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(l,g.e.b))}else{f=Kfb(UD(mQb(g,e$c)))+c;l=g.e.a+g.f.a*e;Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(l,f));Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(l,g.e.b+g.f.b))}}}} -function f2b(a,b,c,d,e,f,g,h,i){var j,k,l,m,n,o,p;n=c;k=new j3b(i);h3b(k,(r3b(),m3b));pQb(k,(Ywc(),iwc),g);pQb(k,(yCc(),BBc),(Bod(),wod));p=Kfb(UD(a.of(ABc)));pQb(k,ABc,p);l=new R3b;P3b(l,k);if(!(b!=zod&&b!=Aod)){d>=0?(n=vpd(h)):(n=spd(vpd(h)));a.qf(GBc,n)}j=new pjd;m=false;if(a.pf(zBc)){mjd(j,RD(a.of(zBc),8));m=true}else{ljd(j,g.a/2,g.b/2)}switch(n.g){case 4:pQb(k,UAc,(cxc(),$wc));pQb(k,bwc,(huc(),guc));k.o.b=g.b;p<0&&(k.o.a=-p);Q3b(l,(qpd(),Xod));m||(j.a=g.a);j.a-=g.a;break;case 2:pQb(k,UAc,(cxc(),axc));pQb(k,bwc,(huc(),euc));k.o.b=g.b;p<0&&(k.o.a=-p);Q3b(l,(qpd(),ppd));m||(j.a=0);break;case 1:pQb(k,owc,(Gvc(),Fvc));k.o.a=g.a;p<0&&(k.o.b=-p);Q3b(l,(qpd(),npd));m||(j.b=g.b);j.b-=g.b;break;case 3:pQb(k,owc,(Gvc(),Dvc));k.o.a=g.a;p<0&&(k.o.b=-p);Q3b(l,(qpd(),Yod));m||(j.b=0);}mjd(l.n,j);pQb(k,zBc,j);if(b==vod||b==xod||b==wod){o=0;if(b==vod&&a.pf(CBc)){switch(n.g){case 1:case 2:o=RD(a.of(CBc),17).a;break;case 3:case 4:o=-RD(a.of(CBc),17).a;}}else{switch(n.g){case 4:case 2:o=f.b;b==xod&&(o/=e.b);break;case 1:case 3:o=f.a;b==xod&&(o/=e.a);}}pQb(k,Jwc,o)}pQb(k,hwc,n);return k} -function OId(){MId();function h(f){var g=this;this.dispatch=function(a){var b=a.data;switch(b.cmd){case 'algorithms':var c=PId((yob(),new xpb(new glb(LId.b))));f.postMessage({id:b.id,data:c});break;case 'categories':var d=PId((yob(),new xpb(new glb(LId.c))));f.postMessage({id:b.id,data:d});break;case 'options':var e=PId((yob(),new xpb(new glb(LId.d))));f.postMessage({id:b.id,data:e});break;case 'register':SId(b.algorithms);f.postMessage({id:b.id});break;case 'layout':QId(b.graph,b.layoutOptions||{},b.options||{});f.postMessage({id:b.id,data:b.graph});break;}};this.saveDispatch=function(b){try{g.dispatch(b)}catch(a){f.postMessage({id:b.data.id,error:a})}}} -function j(b){var c=this;this.dispatcher=new h({postMessage:function(a){c.onmessage({data:a})}});this.postMessage=function(a){setTimeout(function(){c.dispatcher.saveDispatch({data:a})},0)}} -if(typeof document===Yxe&&typeof self!==Yxe){var i=new h(self);self.onmessage=i.saveDispatch}else if(typeof module!==Yxe&&module.exports){Object.defineProperty(exports,'__esModule',{value:true});module.exports={'default':j,Worker:j}}} -function i5b(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=new j3b(c);kQb(k,b);pQb(k,(Ywc(),Awc),b);k.o.a=b.g;k.o.b=b.f;k.n.a=b.i;k.n.b=b.j;Rmb(c.a,k);Zjb(a.a,b,k);((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i!=0||Heb(TD(Gxd(b,(yCc(),NAc)))))&&pQb(k,Yvc,(Geb(),true));j=RD(mQb(c,kwc),21);l=RD(mQb(k,(yCc(),BBc)),101);l==(Bod(),Aod)?pQb(k,BBc,zod):l!=zod&&j.Fc((ovc(),kvc));m=0;d=RD(mQb(c,rAc),88);for(i=new dMd((!b.c&&(b.c=new C5d(K4,b,9,9)),b.c));i.e!=i.i.gc();){h=RD(bMd(i),123);e=vCd(b);(dE(Gxd(e,cAc))!==dE((kEc(),hEc))||dE(Gxd(e,pAc))===dE((Ptc(),Otc))||dE(Gxd(e,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(e,eAc)))||dE(Gxd(e,Yzc))!==dE((U$b(),T$b))||dE(Gxd(e,ZAc))===dE((aEc(),TDc))||dE(Gxd(e,ZAc))===dE((aEc(),UDc))||dE(Gxd(e,$Ac))===dE((_Cc(),SCc))||dE(Gxd(e,$Ac))===dE((_Cc(),UCc)))&&!Heb(TD(Gxd(b,aAc)))&&Ixd(h,zwc,sgb(m++));Heb(TD(Gxd(h,pBc)))||j5b(a,h,k,j,d,l)}for(g=new dMd((!b.n&&(b.n=new C5d(I4,b,1,7)),b.n));g.e!=g.i.gc();){f=RD(bMd(g),135);!Heb(TD(Gxd(f,pBc)))&&!!f.a&&Rmb(k.b,h5b(f))}Heb(TD(mQb(k,Uzc)))&&j.Fc((ovc(),fvc));if(Heb(TD(mQb(k,MAc)))){j.Fc((ovc(),jvc));j.Fc(ivc);pQb(k,BBc,zod)}return k} -function ird(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;p=0;D=0;for(j=new Anb(a.b);j.a<j.c.c.length;){i=RD(ynb(j),163);!!i.c&&Dsd(i.c);p=$wnd.Math.max(p,urd(i));D+=urd(i)*trd(i)}q=D/a.b.c.length;C=brd(a.b,q);D+=a.b.c.length*C;p=$wnd.Math.max(p,$wnd.Math.sqrt(D*g))+c.b;H=c.b;I=c.d;n=0;l=c.b+c.c;B=new Yub;Mub(B,sgb(0));w=new Yub;k=new Jkb(a.b,0);o=null;h=new bnb;while(k.b<k.d.gc()){i=(sFb(k.b<k.d.gc()),RD(k.d.Xb(k.c=k.b++),163));G=urd(i);m=trd(i);if(H+G>p){if(f){Oub(w,n);Oub(B,sgb(k.b-1));Rmb(a.d,o);h.c.length=0}H=c.b;I+=n+b;n=0;l=$wnd.Math.max(l,c.b+c.c+G)}ZEb(h.c,i);xrd(i,H,I);l=$wnd.Math.max(l,H+G+c.c);n=$wnd.Math.max(n,m);H+=G+b;o=i}Tmb(a.a,h);Rmb(a.d,RD(Vmb(h,h.c.length-1),163));l=$wnd.Math.max(l,d);F=I+n+c.a;if(F<e){n+=e-F;F=e}if(f){H=c.b;k=new Jkb(a.b,0);Oub(B,sgb(a.b.c.length));A=Sub(B,0);s=RD(evb(A),17).a;Oub(w,n);v=Sub(w,0);u=0;while(k.b<k.d.gc()){if(k.b==s){H=c.b;u=Kfb(UD(evb(v)));s=RD(evb(A),17).a}i=(sFb(k.b<k.d.gc()),RD(k.d.Xb(k.c=k.b++),163));vrd(i,u);if(k.b==s){r=l-H-c.c;t=urd(i);wrd(i,r);yrd(i,(r-t)/2,0)}H+=urd(i)+b}}return new rjd(l,F)} -function zne(a){if(a.N)return;a.N=true;a.b=jBd(a,0);iBd(a.b,0);iBd(a.b,1);iBd(a.b,2);a.bb=jBd(a,1);iBd(a.bb,0);iBd(a.bb,1);a.fb=jBd(a,2);iBd(a.fb,3);iBd(a.fb,4);oBd(a.fb,5);a.qb=jBd(a,3);iBd(a.qb,0);oBd(a.qb,1);oBd(a.qb,2);iBd(a.qb,3);iBd(a.qb,4);oBd(a.qb,5);iBd(a.qb,6);a.a=kBd(a,4);a.c=kBd(a,5);a.d=kBd(a,6);a.e=kBd(a,7);a.f=kBd(a,8);a.g=kBd(a,9);a.i=kBd(a,10);a.j=kBd(a,11);a.k=kBd(a,12);a.n=kBd(a,13);a.o=kBd(a,14);a.p=kBd(a,15);a.q=kBd(a,16);a.s=kBd(a,17);a.r=kBd(a,18);a.t=kBd(a,19);a.u=kBd(a,20);a.v=kBd(a,21);a.w=kBd(a,22);a.B=kBd(a,23);a.A=kBd(a,24);a.C=kBd(a,25);a.D=kBd(a,26);a.F=kBd(a,27);a.G=kBd(a,28);a.H=kBd(a,29);a.J=kBd(a,30);a.I=kBd(a,31);a.K=kBd(a,32);a.M=kBd(a,33);a.L=kBd(a,34);a.P=kBd(a,35);a.Q=kBd(a,36);a.R=kBd(a,37);a.S=kBd(a,38);a.T=kBd(a,39);a.U=kBd(a,40);a.V=kBd(a,41);a.X=kBd(a,42);a.W=kBd(a,43);a.Y=kBd(a,44);a.Z=kBd(a,45);a.$=kBd(a,46);a._=kBd(a,47);a.ab=kBd(a,48);a.cb=kBd(a,49);a.db=kBd(a,50);a.eb=kBd(a,51);a.gb=kBd(a,52);a.hb=kBd(a,53);a.ib=kBd(a,54);a.jb=kBd(a,55);a.kb=kBd(a,56);a.lb=kBd(a,57);a.mb=kBd(a,58);a.nb=kBd(a,59);a.ob=kBd(a,60);a.pb=kBd(a,61)} -function w8b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.a==0){for(q=new Anb(a);q.a<q.c.c.length;){o=RD(ynb(q),10);s=$wnd.Math.max(s,o.n.a+o.o.a+o.d.c)}}else{s=b.f.a-b.c.a}s-=b.c.a;for(p=new Anb(a);p.a<p.c.c.length;){o=RD(ynb(p),10);x8b(o.n,s-o.o.a);y8b(o.f);u8b(o);(!o.q?(yob(),yob(),wob):o.q)._b((yCc(),IBc))&&x8b(RD(mQb(o,IBc),8),s-o.o.a);switch(RD(mQb(o,Rzc),255).g){case 1:pQb(o,Rzc,(Rjd(),Pjd));break;case 2:pQb(o,Rzc,(Rjd(),Ojd));}r=o.o;for(u=new Anb(o.j);u.a<u.c.c.length;){t=RD(ynb(u),12);x8b(t.n,r.a-t.o.a);x8b(t.a,t.o.a);Q3b(t,o8b(t.j));g=RD(mQb(t,CBc),17);!!g&&pQb(t,CBc,sgb(-g.a));for(f=new Anb(t.g);f.a<f.c.c.length;){e=RD(ynb(f),18);for(d=Sub(e.a,0);d.b!=d.d.c;){c=RD(evb(d),8);c.a=s-c.a}j=RD(mQb(e,RAc),75);if(j){for(i=Sub(j,0);i.b!=i.d.c;){h=RD(evb(i),8);h.a=s-h.a}}for(m=new Anb(e.b);m.a<m.c.c.length;){k=RD(ynb(m),72);x8b(k.n,s-k.o.a)}}for(n=new Anb(t.f);n.a<n.c.c.length;){k=RD(ynb(n),72);x8b(k.n,t.o.a-k.o.a)}}if(o.k==(r3b(),m3b)){pQb(o,(Ywc(),hwc),o8b(RD(mQb(o,hwc),64)));t8b(o)}for(l=new Anb(o.b);l.a<l.c.c.length;){k=RD(ynb(l),72);u8b(k);x8b(k.n,r.a-k.o.a)}}} -function z8b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.b==0){for(q=new Anb(a);q.a<q.c.c.length;){o=RD(ynb(q),10);s=$wnd.Math.max(s,o.n.b+o.o.b+o.d.a)}}else{s=b.f.b-b.c.b}s-=b.c.b;for(p=new Anb(a);p.a<p.c.c.length;){o=RD(ynb(p),10);A8b(o.n,s-o.o.b);B8b(o.f);v8b(o);(!o.q?(yob(),yob(),wob):o.q)._b((yCc(),IBc))&&A8b(RD(mQb(o,IBc),8),s-o.o.b);switch(RD(mQb(o,Rzc),255).g){case 3:pQb(o,Rzc,(Rjd(),Mjd));break;case 4:pQb(o,Rzc,(Rjd(),Qjd));}r=o.o;for(u=new Anb(o.j);u.a<u.c.c.length;){t=RD(ynb(u),12);A8b(t.n,r.b-t.o.b);A8b(t.a,t.o.b);Q3b(t,p8b(t.j));g=RD(mQb(t,CBc),17);!!g&&pQb(t,CBc,sgb(-g.a));for(f=new Anb(t.g);f.a<f.c.c.length;){e=RD(ynb(f),18);for(d=Sub(e.a,0);d.b!=d.d.c;){c=RD(evb(d),8);c.b=s-c.b}j=RD(mQb(e,RAc),75);if(j){for(i=Sub(j,0);i.b!=i.d.c;){h=RD(evb(i),8);h.b=s-h.b}}for(m=new Anb(e.b);m.a<m.c.c.length;){k=RD(ynb(m),72);A8b(k.n,s-k.o.b)}}for(n=new Anb(t.f);n.a<n.c.c.length;){k=RD(ynb(n),72);A8b(k.n,t.o.b-k.o.b)}}if(o.k==(r3b(),m3b)){pQb(o,(Ywc(),hwc),p8b(RD(mQb(o,hwc),64)));s8b(o)}for(l=new Anb(o.b);l.a<l.c.c.length;){k=RD(ynb(l),72);v8b(k);A8b(k.n,r.b-k.o.b)}}} -function Drc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;s=new Jkb(a.b,0);k=b.Kc();o=0;j=RD(k.Pb(),17).a;v=0;c=new _sb;A=new Iub;while(s.b<s.d.gc()){r=(sFb(s.b<s.d.gc()),RD(s.d.Xb(s.c=s.b++),30));for(u=new Anb(r.a);u.a<u.c.c.length;){t=RD(ynb(u),10);for(n=new is(Mr(a3b(t).a.Kc(),new ir));gs(n);){l=RD(hs(n),18);A.a.zc(l,A)}for(m=new is(Mr(Z2b(t).a.Kc(),new ir));gs(m);){l=RD(hs(m),18);A.a.Bc(l)!=null}}if(o+1==j){e=new R4b(a);Ikb(s,e);f=new R4b(a);Ikb(s,f);for(C=A.a.ec().Kc();C.Ob();){B=RD(C.Pb(),18);if(!c.a._b(B)){++v;c.a.zc(B,c)}g=new j3b(a);pQb(g,(yCc(),BBc),(Bod(),yod));g3b(g,e);h3b(g,(r3b(),l3b));p=new R3b;P3b(p,g);Q3b(p,(qpd(),ppd));D=new R3b;P3b(D,g);Q3b(D,Xod);d=new j3b(a);pQb(d,BBc,yod);g3b(d,f);h3b(d,l3b);q=new R3b;P3b(q,d);Q3b(q,ppd);F=new R3b;P3b(F,d);Q3b(F,Xod);w=new a1b;Y0b(w,B.c);Z0b(w,p);pQb(w,(Ywc(),zwc),RD(mQb(B,zwc),17));H=new a1b;Y0b(H,D);Z0b(H,q);pQb(H,zwc,RD(mQb(B,zwc),17));Y0b(B,F);h=new Jrc(g,d,w,H,B);pQb(g,Wvc,h);pQb(d,Wvc,h);G=w.c.i;if(G.k==l3b){i=RD(mQb(G,Wvc),313);i.d=h;h.g=i}}if(k.Ob()){j=RD(k.Pb(),17).a}else{break}}++o}return sgb(v)} -function rkc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;p=new bnb;for(m=new Anb(a.d.b);m.a<m.c.c.length;){l=RD(ynb(m),30);for(o=new Anb(l.a);o.a<o.c.c.length;){n=RD(ynb(o),10);e=RD(Wjb(a.f,n),60);for(i=new is(Mr(a3b(n).a.Kc(),new ir));gs(i);){g=RD(hs(i),18);d=Sub(g.a,0);j=true;k=null;if(d.b!=d.d.c){b=RD(evb(d),8);c=null;if(g.c.j==(qpd(),Yod)){q=new Nlc(b,new rjd(b.a,e.d.d),e,g);q.f.a=true;q.a=g.c;ZEb(p.c,q)}if(g.c.j==npd){q=new Nlc(b,new rjd(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.c;ZEb(p.c,q)}while(d.b!=d.d.c){c=RD(evb(d),8);if(!rGb(b.b,c.b)){k=new Nlc(b,c,null,g);ZEb(p.c,k);if(j){j=false;if(c.b<e.d.d){k.f.a=true}else if(c.b>e.d.d+e.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}d.b!=d.d.c&&(b=c)}if(k){f=RD(Wjb(a.f,g.d.i),60);if(b.b<f.d.d){k.f.a=true}else if(b.b>f.d.d+f.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}}for(h=new is(Mr(Z2b(n).a.Kc(),new ir));gs(h);){g=RD(hs(h),18);if(g.a.b!=0){b=RD(Rub(g.a),8);if(g.d.j==(qpd(),Yod)){q=new Nlc(b,new rjd(b.a,e.d.d),e,g);q.f.a=true;q.a=g.d;ZEb(p.c,q)}if(g.d.j==npd){q=new Nlc(b,new rjd(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.d;ZEb(p.c,q)}}}}}return p} -function Nvd(a,b,c){var d,e,f,g,h,i,j,k,l,m;i=new bnb;l=b.length;g=$5d(c);for(j=0;j<l;++j){k=rhb(b,Fhb(61),j);d=wvd(g,(AFb(j,k,b.length),b.substr(j,k-j)));e=iXd(d);f=e.jk().wi();switch(ihb(b,++k)){case 39:{h=phb(b,39,++k);Rmb(i,new KTd(d,lwd((AFb(k,h,b.length),b.substr(k,h-k)),f,e)));j=h+1;break}case 34:{h=phb(b,34,++k);Rmb(i,new KTd(d,lwd((AFb(k,h,b.length),b.substr(k,h-k)),f,e)));j=h+1;break}case 91:{m=new bnb;Rmb(i,new KTd(d,m));n:for(;;){switch(ihb(b,++k)){case 39:{h=phb(b,39,++k);Rmb(m,lwd((AFb(k,h,b.length),b.substr(k,h-k)),f,e));k=h+1;break}case 34:{h=phb(b,34,++k);Rmb(m,lwd((AFb(k,h,b.length),b.substr(k,h-k)),f,e));k=h+1;break}case 110:{++k;if(b.indexOf('ull',k)==k){m.c.push(null)}else{throw Adb(new yz(MHe))}k+=3;break}}if(k<l){switch(BFb(k,b.length),b.charCodeAt(k)){case 44:{break}case 93:{break n}default:{throw Adb(new yz('Expecting , or ]'))}}}else{break}}j=k+1;break}case 110:{++k;if(b.indexOf('ull',k)==k){Rmb(i,new KTd(d,null))}else{throw Adb(new yz(MHe))}j=k+3;break}}if(j<l){BFb(j,b.length);if(b.charCodeAt(j)!=44){throw Adb(new yz('Expecting ,'))}}else{break}}return Ovd(a,i,c)} -function Oqe(a){var b,c,d,e,f;b=a.c;f=null;switch(b){case 6:return a.Em();case 13:return a.Fm();case 23:return a.wm();case 22:return a.Bm();case 18:return a.ym();case 8:Mqe(a);f=(Vse(),Dse);break;case 9:return a.em(true);case 19:return a.fm();case 10:switch(a.a){case 100:case 68:case 119:case 87:case 115:case 83:f=a.dm(a.a);Mqe(a);return f;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:{c=a.cm();c<txe?(f=(Vse(),Vse(),++Use,new Hte(0,c))):(f=cte(qse(c)))}break;case 99:return a.om();case 67:return a.jm();case 105:return a.rm();case 73:return a.km();case 103:return a.pm();case 88:return a.lm();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return a.gm();case 80:case 112:f=Sqe(a,a.a);if(!f)throw Adb(new Lqe(TId((Hde(),hJe))));break;default:f=Yse(a.a);}Mqe(a);break;case 0:if(a.a==93||a.a==123||a.a==125)throw Adb(new Lqe(TId((Hde(),gJe))));f=Yse(a.a);d=a.a;Mqe(a);if((d&64512)==uxe&&a.c==0&&(a.a&64512)==56320){e=$C(hE,zwe,28,2,15,1);e[0]=d&Bwe;e[1]=a.a&Bwe;f=bte(cte(Ihb(e,0,e.length)),0);Mqe(a)}break;default:throw Adb(new Lqe(TId((Hde(),gJe))));}return f} -function WUc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;C=new Yub;w=new Yub;q=-1;for(i=new Anb(a);i.a<i.c.c.length;){g=RD(ynb(i),131);g.s=q--;k=0;t=0;for(f=new Anb(g.t);f.a<f.c.c.length;){d=RD(ynb(f),274);t+=d.c}for(e=new Anb(g.i);e.a<e.c.c.length;){d=RD(ynb(e),274);k+=d.c}g.n=k;g.u=t;t==0?(Pub(w,g,w.c.b,w.c),true):k==0&&(Pub(C,g,C.c.b,C.c),true)}F=Xx(a);l=a.c.length;p=l+1;r=l-1;n=new bnb;while(F.a.gc()!=0){while(w.b!=0){v=(sFb(w.b!=0),RD(Wub(w,w.a.a),131));F.a.Bc(v)!=null;v.s=r--;$Uc(v,C,w)}while(C.b!=0){A=(sFb(C.b!=0),RD(Wub(C,C.a.a),131));F.a.Bc(A)!=null;A.s=p++;$Uc(A,C,w)}o=qwe;for(j=F.a.ec().Kc();j.Ob();){g=RD(j.Pb(),131);s=g.u-g.n;if(s>=o){if(s>o){n.c.length=0;o=s}ZEb(n.c,g)}}if(n.c.length!=0){m=RD(Vmb(n,Jwb(b,n.c.length)),131);F.a.Bc(m)!=null;m.s=p++;$Uc(m,C,w);n.c.length=0}}u=a.c.length+1;for(h=new Anb(a);h.a<h.c.c.length;){g=RD(ynb(h),131);g.s<l&&(g.s+=u)}for(B=new Anb(a);B.a<B.c.c.length;){A=RD(ynb(B),131);c=new Jkb(A.t,0);while(c.b<c.d.gc()){d=(sFb(c.b<c.d.gc()),RD(c.d.Xb(c.c=c.b++),274));D=d.b;if(A.s>D.s){Ckb(c);Ymb(D.i,d);if(d.c>0){d.a=D;Rmb(D.t,d);d.b=A;Rmb(A.i,d)}}}}} -function Efc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;p=new cnb(b.b);u=new cnb(b.b);m=new cnb(b.b);B=new cnb(b.b);q=new cnb(b.b);for(A=Sub(b,0);A.b!=A.d.c;){v=RD(evb(A),12);for(h=new Anb(v.g);h.a<h.c.c.length;){f=RD(ynb(h),18);if(f.c.i==f.d.i){if(v.j==f.d.j){ZEb(B.c,f);continue}else if(v.j==(qpd(),Yod)&&f.d.j==npd){ZEb(q.c,f);continue}}}}for(i=new Anb(q);i.a<i.c.c.length;){f=RD(ynb(i),18);Ffc(a,f,c,d,(qpd(),Xod))}for(g=new Anb(B);g.a<g.c.c.length;){f=RD(ynb(g),18);C=new j3b(a);h3b(C,(r3b(),q3b));pQb(C,(yCc(),BBc),(Bod(),wod));pQb(C,(Ywc(),Awc),f);D=new R3b;pQb(D,Awc,f.d);Q3b(D,(qpd(),ppd));P3b(D,C);F=new R3b;pQb(F,Awc,f.c);Q3b(F,Xod);P3b(F,C);pQb(f.c,Iwc,C);pQb(f.d,Iwc,C);Y0b(f,null);Z0b(f,null);ZEb(c.c,C);pQb(C,$vc,sgb(2))}for(w=Sub(b,0);w.b!=w.d.c;){v=RD(evb(w),12);j=v.e.c.length>0;r=v.g.c.length>0;j&&r?(ZEb(m.c,v),true):j?(ZEb(p.c,v),true):r&&(ZEb(u.c,v),true)}for(o=new Anb(p);o.a<o.c.c.length;){n=RD(ynb(o),12);Rmb(e,Dfc(a,n,null,c))}for(t=new Anb(u);t.a<t.c.c.length;){s=RD(ynb(t),12);Rmb(e,Dfc(a,null,s,c))}for(l=new Anb(m);l.a<l.c.c.length;){k=RD(ynb(l),12);Rmb(e,Dfc(a,k,k,c))}} -function psd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=oxe;n=oxe;k=0;l=0;i=new bnb;for(h=new dMd((!a.b&&(a.b=new C5d(G4,a,12,3)),a.b));h.e!=h.i.gc();){f=RD(bMd(h),74);i=Al(cD(WC(cJ,1),rve,20,0,[i,(!f.n&&(f.n=new C5d(I4,f,1,7)),f.n)]))}for(t=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.n&&(a.n=new C5d(I4,a,1,7)),a.n),(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a),i])));gs(t);){s=RD(hs(t),422);j=RD(s.of((umd(),eld)),140);m>s.nh()-j.b&&(m=s.nh()-j.b);n>s.oh()-j.d&&(n=s.oh()-j.d);k<s.nh()+s.mh()+j.c&&(k=s.nh()+s.mh()+j.c);l<s.oh()+s.lh()+j.a&&(l=s.oh()+s.lh()+j.a)}for(g=new dMd((!a.b&&(a.b=new C5d(G4,a,12,3)),a.b));g.e!=g.i.gc();){f=RD(bMd(g),74);for(r=new dMd((!f.a&&(f.a=new C5d(F4,f,6,6)),f.a));r.e!=r.i.gc();){q=RD(bMd(r),166);o=q.j;d=q.b;p=q.k;e=q.c;m=$wnd.Math.min(m,o);m=$wnd.Math.min(m,d);k=$wnd.Math.max(k,o);k=$wnd.Math.max(k,d);n=$wnd.Math.min(n,p);n=$wnd.Math.min(n,e);l=$wnd.Math.max(l,p);l=$wnd.Math.max(l,e);for(c=new dMd((!q.a&&(q.a=new XZd(D4,q,5)),q.a));c.e!=c.i.gc();){b=RD(bMd(c),377);m=$wnd.Math.min(m,b.a);k=$wnd.Math.max(k,b.a);n=$wnd.Math.min(n,b.b);l=$wnd.Math.max(l,b.b)}}}Ixd(a,(umd(),Ikd),k-m);Ixd(a,Hkd,l-n)} -function uOc(a,b,c){var d,e,f,g,h,i,j,k,l;c.Ug('Network simplex node placement',1);a.e=b;a.n=RD(mQb(b,(Ywc(),Qwc)),312);tOc(a);fOc(a);FDb(EDb(new SDb(null,new Swb(a.e.b,16)),new iPc),new kPc(a));FDb(CDb(EDb(CDb(EDb(new SDb(null,new Swb(a.e.b,16)),new ZPc),new _Pc),new bQc),new dQc),new gPc(a));if(Heb(TD(mQb(a.e,(yCc(),gBc))))){g=c.eh(1);g.Ug('Straight Edges Pre-Processing',1);sOc(a);g.Vg()}AIb(a.f);f=RD(mQb(b,gCc),17).a*a.f.a.c.length;lJb(yJb(zJb(CJb(a.f),f),false),c.eh(1));if(a.d.a.gc()!=0){g=c.eh(1);g.Ug('Flexible Where Space Processing',1);h=RD(Lvb(KDb(GDb(new SDb(null,new Swb(a.f.a,16)),new mPc),new IOc)),17).a;i=RD(Lvb(JDb(GDb(new SDb(null,new Swb(a.f.a,16)),new oPc),new MOc)),17).a;j=i-h;k=eJb(new gJb,a.f);l=eJb(new gJb,a.f);rIb(uIb(tIb(sIb(vIb(new wIb,20000),j),k),l));FDb(CDb(CDb(_nb(a.i),new qPc),new sPc),new uPc(h,k,j,l));for(e=a.d.a.ec().Kc();e.Ob();){d=RD(e.Pb(),218);d.g=1}lJb(yJb(zJb(CJb(a.f),f),false),g.eh(1));g.Vg()}if(Heb(TD(mQb(b,gBc)))){g=c.eh(1);g.Ug('Straight Edges Post-Processing',1);rOc(a);g.Vg()}eOc(a);a.e=null;a.f=null;a.i=null;a.c=null;akb(a.k);a.j=null;a.a=null;a.o=null;a.d.a.$b();c.Vg()} -function XGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c.Ug('Depth first model order layering',1);a.d=b;q=new bnb;for(p=new Anb(a.d.a);p.a<p.c.c.length;){n=RD(ynb(p),10);n.k==(r3b(),p3b)&&(ZEb(q.c,n),true)}yob();_mb(q,new aHc);g=true;a.b=new R4b(a.d);a.a=null;Rmb(a.d.b,a.b);a.b.p=0;a.c=0;a.f=new Yub;for(o=new Anb(q);o.a<o.c.c.length;){n=RD(ynb(o),10);if(g){g3b(n,a.b);g=false}else{if(VGc(a,n)){m=a.c;m=UGc(m,n);d=m+2;k=m-a.c;if(a.f.b==0){TGc(a,d,n)}else{if(k>0){for(t=Sub(a.f,0);t.b!=t.d.c;){s=RD(evb(t),10);s.p+=m-a.e}WGc(a);Xub(a.f);TGc(a,d,n)}else{Mub(a.f,n);n.p=d;a.e=$wnd.Math.max(a.e,d);for(f=new is(Mr(Z2b(n).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(!e.c.i.c&&e.c.i.k==(r3b(),n3b)){Mub(a.f,e.c.i);e.c.i.p=d-1}}a.c=d}}}else{WGc(a);Xub(a.f);d=0;if(gs(new is(Mr(Z2b(n).a.Kc(),new ir)))){m=0;m=UGc(m,n);d=m+2;TGc(a,d,n)}else{Mub(a.f,n);n.p=0;a.e=$wnd.Math.max(a.e,0);a.b=RD(Vmb(a.d.b,0),30);a.c=0}}}}a.f.b==0||WGc(a);a.d.a.c.length=0;r=new bnb;for(j=new Anb(a.d.b);j.a<j.c.c.length;){h=RD(ynb(j),30);h.a.c.length==0&&(ZEb(r.c,h),true)}Ce(a.d.b,r);l=0;for(i=new Anb(a.d.b);i.a<i.c.c.length;){h=RD(ynb(i),30);h.p=l;++l}c.Vg()} -function EEd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;D=null;G=b;F=pEd(a,DGd(c),G);jyd(F,zDd(G,uIe));H=RD(Ao(a.g,tDd(qC(G,bIe))),27);m=qC(G,'sourcePort');d=null;!!m&&(d=tDd(m));I=RD(Ao(a.j,d),123);if(!H){h=uDd(G);o="An edge must have a source node (edge id: '"+h;p=o+zIe;throw Adb(new CDd(p))}if(!!I&&!Hb(MCd(I),H)){i=zDd(G,uIe);q="The source port of an edge must be a port of the edge's source node (edge id: '"+i;r=q+zIe;throw Adb(new CDd(r))}B=(!F.b&&(F.b=new Yie(E4,F,4,7)),F.b);f=null;I?(f=I):(f=H);WGd(B,f);J=RD(Ao(a.g,tDd(qC(G,CIe))),27);n=qC(G,'targetPort');e=null;!!n&&(e=tDd(n));K=RD(Ao(a.j,e),123);if(!J){l=uDd(G);s="An edge must have a target node (edge id: '"+l;t=s+zIe;throw Adb(new CDd(t))}if(!!K&&!Hb(MCd(K),J)){j=zDd(G,uIe);u="The target port of an edge must be a port of the edge's target node (edge id: '"+j;v=u+zIe;throw Adb(new CDd(v))}C=(!F.c&&(F.c=new Yie(E4,F,5,8)),F.c);g=null;K?(g=K):(g=J);WGd(C,g);if((!F.b&&(F.b=new Yie(E4,F,4,7)),F.b).i==0||(!F.c&&(F.c=new Yie(E4,F,5,8)),F.c).i==0){k=zDd(G,uIe);w=yIe+k;A=w+zIe;throw Adb(new CDd(A))}GEd(G,F);FEd(G,F);D=CEd(a,G,F);return D} -function JTb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;n=RD(mQb(a,(JVb(),HVb)),27);t=lve;u=lve;r=qwe;s=qwe;for(w=new Anb(a.e);w.a<w.c.c.length;){v=RD(ynb(w),153);F=v.d;G=v.e;t=$wnd.Math.min(t,F.a-G.a/2);u=$wnd.Math.min(u,F.b-G.b/2);r=$wnd.Math.max(r,F.a+G.a/2);s=$wnd.Math.max(s,F.b+G.b/2)}for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),250);F=b.d;G=b.e;t=$wnd.Math.min(t,F.a-G.a/2);u=$wnd.Math.min(u,F.b-G.b/2);r=$wnd.Math.max(r,F.a+G.a/2);s=$wnd.Math.max(s,F.b+G.b/2)}D=RD(Gxd(n,(yVb(),hVb)),107);C=new rjd(D.b-t,D.d-u);for(j=new Anb(a.e);j.a<j.c.c.length;){i=RD(ynb(j),153);B=mQb(i,HVb);if(ZD(B,207)){p=RD(B,27);A=$id(new sjd(i.d),C);Byd(p,A.a-p.g/2,A.b-p.f/2)}}for(f=new Anb(a.c);f.a<f.c.c.length;){e=RD(ynb(f),289);l=RD(mQb(e,HVb),74);m=IGd(l,true,true);H=new sjd(ZTb(e));$id(H,C);Nzd(m,H.a,H.b);Umb(e.a,new OTb(C,m));d=new sjd($Tb(e));$id(d,C);Gzd(m,d.a,d.b)}for(h=new Anb(a.d);h.a<h.c.c.length;){g=RD(ynb(h),453);o=RD(mQb(g,HVb),135);q=$id(new sjd(g.d),C);Byd(o,q.a,q.b)}I=r-t+(D.b+D.c);k=s-u+(D.d+D.a);Heb(TD(Gxd(n,(umd(),mld))))||Esd(n,I,k,false,true);Ixd(n,Ikd,I-(D.b+D.c));Ixd(n,Hkd,k-(D.d+D.a))} -function F$b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;l=H$b(B$b(a,(qpd(),bpd)),b);o=G$b(B$b(a,cpd),b);u=G$b(B$b(a,kpd),b);B=I$b(B$b(a,mpd),b);m=I$b(B$b(a,Zod),b);s=G$b(B$b(a,jpd),b);p=G$b(B$b(a,dpd),b);w=G$b(B$b(a,lpd),b);v=G$b(B$b(a,$od),b);C=I$b(B$b(a,apd),b);r=G$b(B$b(a,hpd),b);t=G$b(B$b(a,gpd),b);A=G$b(B$b(a,_od),b);D=I$b(B$b(a,ipd),b);n=I$b(B$b(a,epd),b);q=G$b(B$b(a,fpd),b);c=Hid(cD(WC(iE,1),vxe,28,15,[s.a,B.a,w.a,D.a]));d=Hid(cD(WC(iE,1),vxe,28,15,[o.a,l.a,u.a,q.a]));e=r.a;f=Hid(cD(WC(iE,1),vxe,28,15,[p.a,m.a,v.a,n.a]));j=Hid(cD(WC(iE,1),vxe,28,15,[s.b,o.b,p.b,t.b]));i=Hid(cD(WC(iE,1),vxe,28,15,[B.b,l.b,m.b,q.b]));k=C.b;h=Hid(cD(WC(iE,1),vxe,28,15,[w.b,u.b,v.b,A.b]));x$b(B$b(a,bpd),c+e,j+k);x$b(B$b(a,fpd),c+e,j+k);x$b(B$b(a,cpd),c+e,0);x$b(B$b(a,kpd),c+e,j+k+i);x$b(B$b(a,mpd),0,j+k);x$b(B$b(a,Zod),c+e+d,j+k);x$b(B$b(a,dpd),c+e+d,0);x$b(B$b(a,lpd),0,j+k+i);x$b(B$b(a,$od),c+e+d,j+k+i);x$b(B$b(a,apd),0,j);x$b(B$b(a,hpd),c,0);x$b(B$b(a,_od),0,j+k+i);x$b(B$b(a,epd),c+e+d,0);g=new pjd;g.a=Hid(cD(WC(iE,1),vxe,28,15,[c+d+e+f,C.a,t.a,A.a]));g.b=Hid(cD(WC(iE,1),vxe,28,15,[j+i+k+h,r.b,D.b,n.b]));return g} -function EFb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;s=new rjd(oxe,oxe);b=new rjd(pxe,pxe);for(B=new Anb(a);B.a<B.c.c.length;){A=RD(ynb(B),8);s.a=$wnd.Math.min(s.a,A.a);s.b=$wnd.Math.min(s.b,A.b);b.a=$wnd.Math.max(b.a,A.a);b.b=$wnd.Math.max(b.b,A.b)}m=new rjd(b.a-s.a,b.b-s.b);j=new rjd(s.a-50,s.b-m.a-50);k=new rjd(s.a-50,b.b+m.a+50);l=new rjd(b.a+m.b/2+50,s.b+m.b/2);n=new XFb(j,k,l);w=new _sb;f=new bnb;c=new bnb;w.a.zc(n,w);for(D=new Anb(a);D.a<D.c.c.length;){C=RD(ynb(D),8);f.c.length=0;for(v=w.a.ec().Kc();v.Ob();){t=RD(v.Pb(),317);d=t.d;bjd(d,t.a);$y(bjd(t.d,C),bjd(t.d,t.a))<0&&(ZEb(f.c,t),true)}c.c.length=0;for(u=new Anb(f);u.a<u.c.c.length;){t=RD(ynb(u),317);for(q=new Anb(t.e);q.a<q.c.c.length;){o=RD(ynb(q),177);g=true;for(i=new Anb(f);i.a<i.c.c.length;){h=RD(ynb(i),317);h!=t&&(Fvb(o,Vmb(h.e,0))||Fvb(o,Vmb(h.e,1))||Fvb(o,Vmb(h.e,2)))&&(g=false)}g&&(ZEb(c.c,o),true)}}Ve(w,f);xgb(w,new FFb);for(p=new Anb(c);p.a<p.c.c.length;){o=RD(ynb(p),177);Ysb(w,new XFb(C,o.a,o.b))}}r=new _sb;xgb(w,new HFb(r));e=r.a.ec().Kc();while(e.Ob()){o=RD(e.Pb(),177);(WFb(n,o.a)||WFb(n,o.b))&&e.Qb()}xgb(r,new JFb);return r} -function pvd(){pvd=geb;dvd();ovd=cvd.a;RD(QHd(xYd(cvd.a),0),19);ivd=cvd.f;RD(QHd(xYd(cvd.f),0),19);RD(QHd(xYd(cvd.f),1),35);nvd=cvd.n;RD(QHd(xYd(cvd.n),0),35);RD(QHd(xYd(cvd.n),1),35);RD(QHd(xYd(cvd.n),2),35);RD(QHd(xYd(cvd.n),3),35);jvd=cvd.g;RD(QHd(xYd(cvd.g),0),19);RD(QHd(xYd(cvd.g),1),35);fvd=cvd.c;RD(QHd(xYd(cvd.c),0),19);RD(QHd(xYd(cvd.c),1),19);kvd=cvd.i;RD(QHd(xYd(cvd.i),0),19);RD(QHd(xYd(cvd.i),1),19);RD(QHd(xYd(cvd.i),2),19);RD(QHd(xYd(cvd.i),3),19);RD(QHd(xYd(cvd.i),4),35);lvd=cvd.j;RD(QHd(xYd(cvd.j),0),19);gvd=cvd.d;RD(QHd(xYd(cvd.d),0),19);RD(QHd(xYd(cvd.d),1),19);RD(QHd(xYd(cvd.d),2),19);RD(QHd(xYd(cvd.d),3),19);RD(QHd(xYd(cvd.d),4),35);RD(QHd(xYd(cvd.d),5),35);RD(QHd(xYd(cvd.d),6),35);RD(QHd(xYd(cvd.d),7),35);evd=cvd.b;RD(QHd(xYd(cvd.b),0),35);RD(QHd(xYd(cvd.b),1),35);hvd=cvd.e;RD(QHd(xYd(cvd.e),0),35);RD(QHd(xYd(cvd.e),1),35);RD(QHd(xYd(cvd.e),2),35);RD(QHd(xYd(cvd.e),3),35);RD(QHd(xYd(cvd.e),4),19);RD(QHd(xYd(cvd.e),5),19);RD(QHd(xYd(cvd.e),6),19);RD(QHd(xYd(cvd.e),7),19);RD(QHd(xYd(cvd.e),8),19);RD(QHd(xYd(cvd.e),9),19);RD(QHd(xYd(cvd.e),10),35);mvd=cvd.k;RD(QHd(xYd(cvd.k),0),35);RD(QHd(xYd(cvd.k),1),35)} -function Pqe(a){var b,c,d,e,f;b=a.c;switch(b){case 11:return a.vm();case 12:return a.xm();case 14:return a.zm();case 15:return a.Cm();case 16:return a.Am();case 17:return a.Dm();case 21:Mqe(a);return Vse(),Vse(),Ese;case 10:switch(a.a){case 65:return a.hm();case 90:return a.mm();case 122:return a.tm();case 98:return a.nm();case 66:return a.im();case 60:return a.sm();case 62:return a.qm();}}f=Oqe(a);b=a.c;switch(b){case 3:return a.Im(f);case 4:return a.Gm(f);case 5:return a.Hm(f);case 0:if(a.a==123&&a.d<a.j){e=a.d;d=0;c=-1;if((b=ihb(a.i,e++))>=48&&b<=57){d=b-48;while(e<a.j&&(b=ihb(a.i,e++))>=48&&b<=57){d=d*10+b-48;if(d<0)throw Adb(new Lqe(TId((Hde(),CJe))))}}else{throw Adb(new Lqe(TId((Hde(),yJe))))}c=d;if(b==44){if(e>=a.j){throw Adb(new Lqe(TId((Hde(),AJe))))}else if((b=ihb(a.i,e++))>=48&&b<=57){c=b-48;while(e<a.j&&(b=ihb(a.i,e++))>=48&&b<=57){c=c*10+b-48;if(c<0)throw Adb(new Lqe(TId((Hde(),CJe))))}if(d>c)throw Adb(new Lqe(TId((Hde(),BJe))))}else{c=-1}}if(b!=125)throw Adb(new Lqe(TId((Hde(),zJe))));if(a.bm(e)){f=(Vse(),Vse(),++Use,new Kte(9,f));a.d=e+1}else{f=(Vse(),Vse(),++Use,new Kte(3,f));a.d=e}f.Om(d);f.Nm(c);Mqe(a)}}return f} -function bXb(a){var b,c,d,e,f;c=RD(mQb(a,(Ywc(),kwc)),21);b=vfd(YWb);e=RD(mQb(a,(yCc(),IAc)),346);e==(Fnd(),Cnd)&&ofd(b,ZWb);Heb(TD(mQb(a,GAc)))?pfd(b,(sXb(),nXb),(hcc(),Zbc)):pfd(b,(sXb(),pXb),(hcc(),Zbc));mQb(a,(rid(),qid))!=null&&ofd(b,$Wb);(Heb(TD(mQb(a,PAc)))||Heb(TD(mQb(a,HAc))))&&nfd(b,(sXb(),rXb),(hcc(),lbc));switch(RD(mQb(a,rAc),88).g){case 2:case 3:case 4:nfd(pfd(b,(sXb(),nXb),(hcc(),nbc)),rXb,mbc);}c.Hc((ovc(),fvc))&&nfd(pfd(pfd(b,(sXb(),nXb),(hcc(),kbc)),qXb,ibc),rXb,jbc);dE(mQb(a,ZAc))!==dE((aEc(),$Dc))&&pfd(b,(sXb(),pXb),(hcc(),Rbc));if(c.Hc(mvc)){pfd(b,(sXb(),nXb),(hcc(),Xbc));pfd(b,oXb,Vbc);pfd(b,pXb,Wbc)}dE(mQb(a,Xzc))!==dE(($uc(),Yuc))&&dE(mQb(a,yAc))!==dE((Ymd(),Vmd))&&nfd(b,(sXb(),rXb),(hcc(),Abc));Heb(TD(mQb(a,KAc)))&&pfd(b,(sXb(),pXb),(hcc(),zbc));Heb(TD(mQb(a,nAc)))&&pfd(b,(sXb(),pXb),(hcc(),dcc));if(eXb(a)){dE(mQb(a,IAc))===dE(Cnd)?(d=RD(mQb(a,gAc),298)):(d=RD(mQb(a,hAc),298));f=d==(xvc(),vvc)?(hcc(),Ubc):(hcc(),gcc);pfd(b,(sXb(),qXb),f)}switch(RD(mQb(a,vCc),388).g){case 1:pfd(b,(sXb(),qXb),(hcc(),ecc));break;case 2:nfd(pfd(pfd(b,(sXb(),pXb),(hcc(),ebc)),qXb,fbc),rXb,gbc);}dE(mQb(a,cAc))!==dE((kEc(),hEc))&&pfd(b,(sXb(),pXb),(hcc(),fcc));return b} -function crc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;if(Ujb(a.a,b)){if(Zsb(RD(Wjb(a.a,b),49),c)){return 1}}else{Zjb(a.a,b,new _sb)}if(Ujb(a.a,c)){if(Zsb(RD(Wjb(a.a,c),49),b)){return -1}}else{Zjb(a.a,c,new _sb)}if(Ujb(a.e,b)){if(Zsb(RD(Wjb(a.e,b),49),c)){return -1}}else{Zjb(a.e,b,new _sb)}if(Ujb(a.e,c)){if(Zsb(RD(Wjb(a.a,c),49),b)){return 1}}else{Zjb(a.e,c,new _sb)}if(a.c==(kEc(),iEc)||!nQb(b,(Ywc(),zwc))||!nQb(c,(Ywc(),zwc))){l=null;for(j=new Anb(b.j);j.a<j.c.c.length;){h=RD(ynb(j),12);h.e.c.length==0||RD(Vmb(h.e,0),18).c.i.c!=b.c&&(l=RD(Vmb(h.e,0),18).c)}n=null;for(i=new Anb(c.j);i.a<i.c.c.length;){h=RD(ynb(i),12);h.e.c.length==0||RD(Vmb(h.e,0),18).c.i.c!=c.c&&(n=RD(Vmb(h.e,0),18).c)}if(!!l&&!!n){k=l.i;m=n.i;if(!!k&&k==m){for(p=new Anb(k.j);p.a<p.c.c.length;){o=RD(ynb(p),12);if(o==l){erc(a,c,b);return -1}else if(o==n){erc(a,b,c);return 1}}return hgb(drc(a,b),drc(a,c))}for(r=a.d,s=0,t=r.length;s<t;++s){q=r[s];if(q==k){erc(a,c,b);return -1}else if(q==m){erc(a,b,c);return 1}}}if(!nQb(b,(Ywc(),zwc))||!nQb(c,zwc)){e=drc(a,b);g=drc(a,c);e>g?erc(a,b,c):erc(a,c,b);return e<g?-1:e>g?1:0}}d=RD(mQb(b,(Ywc(),zwc)),17).a;f=RD(mQb(c,zwc),17).a;d>f?erc(a,b,c):erc(a,c,b);return d<f?-1:d>f?1:0} -function uAd(b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r;if(d==null){return null}if(b.a!=c.jk()){throw Adb(new agb(VHe+c.xe()+WHe))}if(ZD(c,468)){r=z1d(RD(c,685),d);if(!r){throw Adb(new agb(XHe+d+"' is not a valid enumerator of '"+c.xe()+"'"))}return r}switch(Oee((lke(),jke),c).Nl()){case 2:{d=nue(d,false);break}case 3:{d=nue(d,true);break}}e=Oee(jke,c).Jl();if(e){return e.jk().wi().ti(e,d)}n=Oee(jke,c).Ll();if(n){r=new bnb;for(k=xAd(d),l=0,m=k.length;l<m;++l){j=k[l];Rmb(r,n.jk().wi().ti(n,j))}return r}q=Oee(jke,c).Ml();if(!q.dc()){for(p=q.Kc();p.Ob();){o=RD(p.Pb(),156);try{r=o.jk().wi().ti(o,d);if(r!=null){return r}}catch(a){a=zdb(a);if(!ZD(a,63))throw Adb(a)}}throw Adb(new agb(XHe+d+"' does not match any member types of the union datatype '"+c.xe()+"'"))}RD(c,847).ok();f=Qje(c.kk());if(!f)return null;if(f==SI){h=0;try{h=Oeb(d,qwe,lve)&Bwe}catch(a){a=zdb(a);if(ZD(a,130)){g=Ahb(d);h=g[0]}else throw Adb(a)}return hfb(h)}if(f==qK){for(i=0;i<nAd.length;++i){try{return b2d(nAd[i],d)}catch(a){a=zdb(a);if(!ZD(a,33))throw Adb(a)}}throw Adb(new agb(XHe+d+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw Adb(new agb(XHe+d+"' is invalid. "))} -function z$b(){z$b=geb;y$b=new Tp;Rc(y$b,(qpd(),bpd),fpd);Rc(y$b,mpd,fpd);Rc(y$b,mpd,ipd);Rc(y$b,Zod,epd);Rc(y$b,Zod,fpd);Rc(y$b,cpd,fpd);Rc(y$b,cpd,gpd);Rc(y$b,kpd,_od);Rc(y$b,kpd,fpd);Rc(y$b,hpd,apd);Rc(y$b,hpd,fpd);Rc(y$b,hpd,gpd);Rc(y$b,hpd,_od);Rc(y$b,apd,hpd);Rc(y$b,apd,ipd);Rc(y$b,apd,epd);Rc(y$b,apd,fpd);Rc(y$b,jpd,jpd);Rc(y$b,jpd,gpd);Rc(y$b,jpd,ipd);Rc(y$b,dpd,dpd);Rc(y$b,dpd,gpd);Rc(y$b,dpd,epd);Rc(y$b,lpd,lpd);Rc(y$b,lpd,_od);Rc(y$b,lpd,ipd);Rc(y$b,$od,$od);Rc(y$b,$od,_od);Rc(y$b,$od,epd);Rc(y$b,gpd,cpd);Rc(y$b,gpd,hpd);Rc(y$b,gpd,jpd);Rc(y$b,gpd,dpd);Rc(y$b,gpd,fpd);Rc(y$b,gpd,gpd);Rc(y$b,gpd,ipd);Rc(y$b,gpd,epd);Rc(y$b,_od,kpd);Rc(y$b,_od,hpd);Rc(y$b,_od,lpd);Rc(y$b,_od,$od);Rc(y$b,_od,_od);Rc(y$b,_od,ipd);Rc(y$b,_od,epd);Rc(y$b,_od,fpd);Rc(y$b,ipd,mpd);Rc(y$b,ipd,apd);Rc(y$b,ipd,jpd);Rc(y$b,ipd,lpd);Rc(y$b,ipd,gpd);Rc(y$b,ipd,_od);Rc(y$b,ipd,ipd);Rc(y$b,ipd,fpd);Rc(y$b,epd,Zod);Rc(y$b,epd,apd);Rc(y$b,epd,dpd);Rc(y$b,epd,$od);Rc(y$b,epd,gpd);Rc(y$b,epd,_od);Rc(y$b,epd,epd);Rc(y$b,epd,fpd);Rc(y$b,fpd,bpd);Rc(y$b,fpd,mpd);Rc(y$b,fpd,Zod);Rc(y$b,fpd,cpd);Rc(y$b,fpd,kpd);Rc(y$b,fpd,hpd);Rc(y$b,fpd,apd);Rc(y$b,fpd,gpd);Rc(y$b,fpd,_od);Rc(y$b,fpd,ipd);Rc(y$b,fpd,epd);Rc(y$b,fpd,fpd)} -function _$b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;a.d=new rjd(oxe,oxe);a.c=new rjd(pxe,pxe);for(m=b.Kc();m.Ob();){k=RD(m.Pb(),36);for(t=new Anb(k.a);t.a<t.c.c.length;){s=RD(ynb(t),10);a.d.a=$wnd.Math.min(a.d.a,s.n.a-s.d.b);a.d.b=$wnd.Math.min(a.d.b,s.n.b-s.d.d);a.c.a=$wnd.Math.max(a.c.a,s.n.a+s.o.a+s.d.c);a.c.b=$wnd.Math.max(a.c.b,s.n.b+s.o.b+s.d.a)}}h=new q_b;for(l=b.Kc();l.Ob();){k=RD(l.Pb(),36);d=i_b(a,k);Rmb(h.a,d);d.a=d.a|!RD(mQb(d.c,(Ywc(),ewc)),21).dc()}a.b=(NXb(),B=new XXb,B.f=new EXb(c),B.b=DXb(B.f,h),B);RXb((o=a.b,new Oqd,o));a.e=new pjd;a.a=a.b.f.e;for(g=new Anb(h.a);g.a<g.c.c.length;){e=RD(ynb(g),855);u=SXb(a.b,e);o2b(e.c,u.a,u.b);for(q=new Anb(e.c.a);q.a<q.c.c.length;){p=RD(ynb(q),10);if(p.k==(r3b(),m3b)){r=d_b(a,p.n,RD(mQb(p,(Ywc(),hwc)),64));$id(hjd(p.n),r)}}}for(f=new Anb(h.a);f.a<f.c.c.length;){e=RD(ynb(f),855);for(j=new Anb(o_b(e));j.a<j.c.c.length;){i=RD(ynb(j),18);A=new Fjd(i.a);hu(A,0,K3b(i.c));Mub(A,K3b(i.d));n=null;for(w=Sub(A,0);w.b!=w.d.c;){v=RD(evb(w),8);if(!n){n=v;continue}if(_y(n.a,v.a)){a.e.a=$wnd.Math.min(a.e.a,n.a);a.a.a=$wnd.Math.max(a.a.a,n.a)}else if(_y(n.b,v.b)){a.e.b=$wnd.Math.min(a.e.b,n.b);a.a.b=$wnd.Math.max(a.a.b,n.b)}n=v}}}fjd(a.e);$id(a.a,a.e)} -function vib(a,b){var c,d,e,f,g,h,i,j;c=0;g=0;f=b.length;h=null;j=new cib;if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==43)){++g;++c;if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==43||(BFb(g,b.length),b.charCodeAt(g)==45))){throw Adb(new Vgb(nxe+b+'"'))}}while(g<f&&(BFb(g,b.length),b.charCodeAt(g)!=46)&&(BFb(g,b.length),b.charCodeAt(g)!=101)&&(BFb(g,b.length),b.charCodeAt(g)!=69)){++g}j.a+=''+zhb(b==null?vve:(uFb(b),b),c,g);if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==46)){++g;c=g;while(g<f&&(BFb(g,b.length),b.charCodeAt(g)!=101)&&(BFb(g,b.length),b.charCodeAt(g)!=69)){++g}a.e=g-c;j.a+=''+zhb(b==null?vve:(uFb(b),b),c,g)}else{a.e=0}if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==101||(BFb(g,b.length),b.charCodeAt(g)==69))){++g;c=g;if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==43)){++g;g<f&&(BFb(g,b.length),b.charCodeAt(g)!=45)&&++c}h=(AFb(c,f,b.length),b.substr(c,f-c));a.e=a.e-Oeb(h,qwe,lve);if(a.e!=eE(a.e)){throw Adb(new Vgb('Scale out of range.'))}}i=j.a;if(i.length<16){a.f=(sib==null&&(sib=new RegExp('^[+-]?\\d*$','i')),sib.test(i)?parseInt(i,10):NaN);if(isNaN(a.f)){throw Adb(new Vgb(nxe+b+'"'))}a.a=Cib(a.f)}else{wib(a,new ejb(i))}a.d=j.a.length;for(e=0;e<j.a.length;++e){d=ihb(j.a,e);if(d!=45&&d!=48){break}--a.d}a.d==0&&(a.d=1)} -function Wae(a){_Ad(a.b,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ConsistentTransient']));_Ad(a.a,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'WellFormedSourceURI']));_Ad(a.o,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures']));_Ad(a.p,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'WellFormedInstanceTypeName UniqueTypeParameterNames']));_Ad(a.v,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'UniqueEnumeratorNames UniqueEnumeratorLiterals']));_Ad(a.R,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'WellFormedName']));_Ad(a.T,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid']));_Ad(a.U,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs']));_Ad(a.W,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer']));_Ad(a.bb,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ValidDefaultValueLiteral']));_Ad(a.eb,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ValidLowerBound ValidUpperBound ConsistentBounds ValidType']));_Ad(a.H,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ConsistentType ConsistentBounds ConsistentArguments']))} -function S7b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;if(b.dc()){return}e=new Ejd;h=c?c:RD(b.Xb(0),18);o=h.c;HUc();m=o.i.k;if(!(m==(r3b(),p3b)||m==q3b||m==m3b||m==l3b)){throw Adb(new agb('The target node of the edge must be a normal node or a northSouthPort.'))}Oub(e,xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])));if((qpd(),hpd).Hc(o.j)){q=Kfb(UD(mQb(o,(Ywc(),Swc))));l=new rjd(xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).a,q);Pub(e,l,e.c.b,e.c)}k=null;d=false;i=b.Kc();while(i.Ob()){g=RD(i.Pb(),18);f=g.a;if(f.b!=0){if(d){j=ijd($id(k,(sFb(f.b!=0),RD(f.a.a.c,8))),0.5);Pub(e,j,e.c.b,e.c);d=false}else{d=true}k=ajd((sFb(f.b!=0),RD(f.c.b.c,8)));ye(e,f);Xub(f)}}p=h.d;if(hpd.Hc(p.j)){q=Kfb(UD(mQb(p,(Ywc(),Swc))));l=new rjd(xjd(cD(WC(l3,1),Nve,8,0,[p.i.n,p.n,p.a])).a,q);Pub(e,l,e.c.b,e.c)}Oub(e,xjd(cD(WC(l3,1),Nve,8,0,[p.i.n,p.n,p.a])));a.d==(lFc(),iFc)&&(r=(sFb(e.b!=0),RD(e.a.a.c,8)),s=RD(ju(e,1),8),t=new qjd(BVc(o.j)),t.a*=5,t.b*=5,u=ojd(new rjd(s.a,s.b),r),v=new rjd(R7b(t.a,u.a),R7b(t.b,u.b)),$id(v,r),w=Sub(e,1),cvb(w,v),A=(sFb(e.b!=0),RD(e.c.b.c,8)),B=RD(ju(e,e.b-2),8),t=new qjd(BVc(p.j)),t.a*=5,t.b*=5,u=ojd(new rjd(B.a,B.b),A),C=new rjd(R7b(t.a,u.a),R7b(t.b,u.b)),$id(C,A),hu(e,e.b-1,C),undefined);n=new wUc(e);ye(h.a,sUc(n))} -function cud(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P;t=RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84);v=t.nh();w=t.oh();u=t.mh()/2;p=t.lh()/2;if(ZD(t,193)){s=RD(t,123);v+=MCd(s).i;v+=MCd(s).i}v+=u;w+=p;F=RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84);H=F.nh();I=F.oh();G=F.mh()/2;A=F.lh()/2;if(ZD(F,193)){D=RD(F,123);H+=MCd(D).i;H+=MCd(D).i}H+=G;I+=A;if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i==0){h=(bvd(),j=new Rzd,j);WGd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),h)}else if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i>1){o=new mMd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a));while(o.e!=o.i.gc()){cMd(o)}}g=RD(QHd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),0),166);q=H;H>v+u?(q=v+u):H<v-u&&(q=v-u);r=I;I>w+p?(r=w+p):I<w-p&&(r=w-p);q>v-u&&q<v+u&&r>w-p&&r<w+p&&(q=v+u);Ozd(g,q);Pzd(g,r);B=v;v>H+G?(B=H+G):v<H-G&&(B=H-G);C=w;w>I+A?(C=I+A):w<I-A&&(C=I-A);B>H-G&&B<H+G&&C>I-A&&C<I+A&&(C=I+A);Hzd(g,B);Izd(g,C);sLd((!g.a&&(g.a=new XZd(D4,g,5)),g.a));f=Jwb(b,5);t==F&&++f;L=B-q;O=C-r;J=$wnd.Math.sqrt(L*L+O*O);l=J*0.20000000298023224;M=L/(f+1);P=O/(f+1);K=q;N=r;for(k=0;k<f;k++){K+=M;N+=P;m=K+Kwb(b,24)*Nxe*l-l/2;m<0?(m=1):m>c&&(m=c-1);n=N+Kwb(b,24)*Nxe*l-l/2;n<0?(n=1):n>d&&(n=d-1);e=(bvd(),i=new Xxd,i);Vxd(e,m);Wxd(e,n);WGd((!g.a&&(g.a=new XZd(D4,g,5)),g.a),e)}} -function Y7c(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,$Fe),'ELK Rectangle Packing'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces.'),new _7c)));Agd(a,$Fe,Dze,1.3);Agd(a,$Fe,hAe,(Geb(),false));Agd(a,$Fe,Eze,O7c);Agd(a,$Fe,_ze,15);Agd(a,$Fe,YDe,iGd(y7c));Agd(a,$Fe,jAe,iGd(F7c));Agd(a,$Fe,CAe,iGd(H7c));Agd(a,$Fe,iAe,iGd(I7c));Agd(a,$Fe,kAe,iGd(E7c));Agd(a,$Fe,gAe,iGd(J7c));Agd(a,$Fe,lAe,iGd(P7c));Agd(a,$Fe,RFe,iGd(U7c));Agd(a,$Fe,SFe,iGd(T7c));Agd(a,$Fe,QFe,iGd(W7c));Agd(a,$Fe,PFe,iGd(V7c));Agd(a,$Fe,TFe,iGd(M7c));Agd(a,$Fe,UFe,iGd(L7c));Agd(a,$Fe,VFe,iGd(K7c));Agd(a,$Fe,WFe,iGd(S7c));Agd(a,$Fe,dAe,iGd(B7c));Agd(a,$Fe,iEe,iGd(C7c));Agd(a,$Fe,NFe,iGd(A7c));Agd(a,$Fe,MFe,iGd(z7c));Agd(a,$Fe,OFe,iGd(D7c));Agd(a,$Fe,LFe,iGd(R7c))} -function Ajb(a,b){xjb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;B=a.e;o=a.d;e=a.a;if(B==0){switch(b){case 0:return '0';case 1:return zxe;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:w=new bib;b<0?(w.a+='0E+',w):(w.a+='0E',w);w.a+=-b;return w.a;}}t=o*10+1+7;u=$C(hE,zwe,28,t+1,15,1);c=t;if(o==1){h=e[0];if(h<0){H=Cdb(h,yxe);do{p=H;H=Fdb(H,10);u[--c]=48+Ydb(Vdb(p,Ndb(H,10)))&Bwe}while(Ddb(H,0)!=0)}else{H=h;do{p=H;H=H/10|0;u[--c]=48+(p-H*10)&Bwe}while(H!=0)}}else{D=$C(kE,Pwe,28,o,15,1);G=o;hib(e,0,D,0,G);I:while(true){A=0;for(j=G-1;j>=0;j--){F=Bdb(Sdb(A,32),Cdb(D[j],yxe));r=yjb(F);D[j]=Ydb(r);A=Ydb(Tdb(r,32))}s=Ydb(A);q=c;do{u[--c]=48+s%10&Bwe}while((s=s/10|0)!=0&&c!=0);d=9-q+c;for(i=0;i<d&&c>0;i++){u[--c]=48}l=G-1;for(;D[l]==0;l--){if(l==0){break I}}G=l+1}while(u[c]==48){++c}}n=B<0;g=t-c-b-1;if(b==0){n&&(u[--c]=45);return Ihb(u,c,t-c)}if(b>0&&g>=-6){if(g>=0){k=c+g;for(m=t-1;m>=k;m--){u[m+1]=u[m]}u[++k]=46;n&&(u[--c]=45);return Ihb(u,c,t-c+1)}for(l=2;l<-g+1;l++){u[--c]=48}u[--c]=46;u[--c]=48;n&&(u[--c]=45);return Ihb(u,c,t-c)}C=c+1;f=t;v=new cib;n&&(v.a+='-',v);if(f-C>=1){Thb(v,u[c]);v.a+='.';v.a+=Ihb(u,c+1,t-c-1)}else{v.a+=Ihb(u,c,t-c)}v.a+='E';g>0&&(v.a+='+',v);v.a+=''+g;return v.a} -function Jad(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;a.c=b;a.g=new Tsb;c=(lud(),new zud(a.c));d=new PJb(c);LJb(d);t=WD(Gxd(a.c,(ncd(),gcd)));i=RD(Gxd(a.c,icd),324);v=RD(Gxd(a.c,jcd),437);g=RD(Gxd(a.c,bcd),489);u=RD(Gxd(a.c,hcd),438);a.j=Kfb(UD(Gxd(a.c,kcd)));h=a.a;switch(i.g){case 0:h=a.a;break;case 1:h=a.b;break;case 2:h=a.i;break;case 3:h=a.e;break;case 4:h=a.f;break;default:throw Adb(new agb(eGe+(i.f!=null?i.f:''+i.g)));}a.d=new qbd(h,v,g);pQb(a.d,(OQb(),MQb),TD(Gxd(a.c,dcd)));a.d.c=Heb(TD(Gxd(a.c,ccd)));if(tCd(a.c).i==0){return a.d}for(l=new dMd(tCd(a.c));l.e!=l.i.gc();){k=RD(bMd(l),27);n=k.g/2;m=k.f/2;w=new rjd(k.i+n,k.j+m);while(Ujb(a.g,w)){Zid(w,($wnd.Math.random()-0.5)*Vze,($wnd.Math.random()-0.5)*Vze)}p=RD(Gxd(k,(umd(),eld)),140);q=new TQb(w,new Uid(w.a-n-a.j/2-p.b,w.b-m-a.j/2-p.d,k.g+a.j+(p.b+p.c),k.f+a.j+(p.d+p.a)));Rmb(a.d.i,q);Zjb(a.g,w,new Ptd(q,k))}switch(u.g){case 0:if(t==null){a.d.d=RD(Vmb(a.d.i,0),68)}else{for(s=new Anb(a.d.i);s.a<s.c.c.length;){q=RD(ynb(s),68);o=RD(RD(Wjb(a.g,q.a),42).b,27).jh();o!=null&&lhb(o,t)&&(a.d.d=q)}}break;case 1:e=new rjd(a.c.g,a.c.f);e.a*=0.5;e.b*=0.5;Zid(e,a.c.i,a.c.j);f=oxe;for(r=new Anb(a.d.i);r.a<r.c.c.length;){q=RD(ynb(r),68);j=bjd(q.a,e);if(j<f){f=j;a.d.d=q}}break;default:throw Adb(new agb(eGe+(u.f!=null?u.f:''+u.g)));}return a.d} -function b5b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;m=0;for(e=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));e.e!=e.i.gc();){d=RD(bMd(e),27);if(!Heb(TD(Gxd(d,(yCc(),pBc))))){k=vCd(d);if((dE(Gxd(k,cAc))!==dE((kEc(),hEc))||dE(Gxd(k,pAc))===dE((Ptc(),Otc))||dE(Gxd(k,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(k,eAc)))||dE(Gxd(k,Yzc))!==dE((U$b(),T$b))||dE(Gxd(k,ZAc))===dE((aEc(),TDc))||dE(Gxd(k,ZAc))===dE((aEc(),UDc))||dE(Gxd(k,$Ac))===dE((_Cc(),SCc))||dE(Gxd(k,$Ac))===dE((_Cc(),UCc)))&&!Heb(TD(Gxd(d,aAc)))){Ixd(d,(Ywc(),zwc),sgb(m));++m}i5b(a,d,c)}}m=0;for(j=new dMd((!b.b&&(b.b=new C5d(G4,b,12,3)),b.b));j.e!=j.i.gc();){h=RD(bMd(j),74);if(dE(Gxd(b,(yCc(),cAc)))!==dE((kEc(),hEc))||dE(Gxd(b,pAc))===dE((Ptc(),Otc))||dE(Gxd(b,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(b,eAc)))||dE(Gxd(b,Yzc))!==dE((U$b(),T$b))||dE(Gxd(b,ZAc))===dE((aEc(),TDc))||dE(Gxd(b,ZAc))===dE((aEc(),UDc))||dE(Gxd(b,$Ac))===dE((_Cc(),SCc))||dE(Gxd(b,$Ac))===dE((_Cc(),UCc))){Ixd(h,(Ywc(),zwc),sgb(m));++m}p=JGd(h);q=LGd(h);l=Heb(TD(Gxd(p,NAc)));o=!Heb(TD(Gxd(h,pBc)));n=l&&ozd(h)&&Heb(TD(Gxd(h,OAc)));f=vCd(p)==b&&vCd(p)==vCd(q);g=(vCd(p)==b&&q==b)^(vCd(q)==b&&p==b);o&&!n&&(g||f)&&f5b(a,h,b,c)}if(vCd(b)){for(i=new dMd(uCd(vCd(b)));i.e!=i.i.gc();){h=RD(bMd(i),74);p=JGd(h);if(p==b&&ozd(h)){n=Heb(TD(Gxd(p,(yCc(),NAc))))&&Heb(TD(Gxd(h,OAc)));n&&f5b(a,h,b,c)}}}} -function SFc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L;c.Ug('Greedy cycle removal',1);t=b.a;L=t.c.length;a.a=$C(kE,Pwe,28,L,15,1);a.c=$C(kE,Pwe,28,L,15,1);a.b=$C(kE,Pwe,28,L,15,1);j=0;for(r=new Anb(t);r.a<r.c.c.length;){p=RD(ynb(r),10);p.p=j;for(C=new Anb(p.j);C.a<C.c.c.length;){w=RD(ynb(C),12);for(h=new Anb(w.e);h.a<h.c.c.length;){d=RD(ynb(h),18);if(d.c.i==p){continue}G=RD(mQb(d,(yCc(),KBc)),17).a;a.a[j]+=G>0?G+1:1}for(g=new Anb(w.g);g.a<g.c.c.length;){d=RD(ynb(g),18);if(d.d.i==p){continue}G=RD(mQb(d,(yCc(),KBc)),17).a;a.c[j]+=G>0?G+1:1}}a.c[j]==0?Mub(a.e,p):a.a[j]==0&&Mub(a.f,p);++j}o=-1;n=1;l=new bnb;a.d=RD(mQb(b,(Ywc(),Lwc)),234);while(L>0){while(a.e.b!=0){I=RD(Uub(a.e),10);a.b[I.p]=o--;TFc(a,I);--L}while(a.f.b!=0){J=RD(Uub(a.f),10);a.b[J.p]=n++;TFc(a,J);--L}if(L>0){m=qwe;for(s=new Anb(t);s.a<s.c.c.length;){p=RD(ynb(s),10);if(a.b[p.p]==0){u=a.c[p.p]-a.a[p.p];if(u>=m){if(u>m){l.c.length=0;m=u}ZEb(l.c,p)}}}k=a.sg(l);a.b[k.p]=n++;TFc(a,k);--L}}H=t.c.length+1;for(j=0;j<t.c.length;j++){a.b[j]<0&&(a.b[j]+=H)}for(q=new Anb(t);q.a<q.c.c.length;){p=RD(ynb(q),10);F=u2b(p.j);for(A=F,B=0,D=A.length;B<D;++B){w=A[B];v=s2b(w.g);for(e=v,f=0,i=e.length;f<i;++f){d=e[f];K=d.d.i.p;if(a.b[p.p]>a.b[K]){X0b(d,true);pQb(b,awc,(Geb(),true))}}}}a.a=null;a.c=null;a.b=null;Xub(a.f);Xub(a.e);c.Vg()} -function usd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;v=RD(QHd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),0),166);k=new Ejd;u=new Tsb;w=xsd(v);rtb(u.f,v,w);m=new Tsb;d=new Yub;for(o=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!b.d&&(b.d=new Yie(G4,b,8,5)),b.d),(!b.e&&(b.e=new Yie(G4,b,7,4)),b.e)])));gs(o);){n=RD(hs(o),74);if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i!=1){throw Adb(new agb(tHe+(!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i))}if(n!=a){q=RD(QHd((!n.a&&(n.a=new C5d(F4,n,6,6)),n.a),0),166);Pub(d,q,d.c.b,d.c);p=RD(Wd(qtb(u.f,q)),13);if(!p){p=xsd(q);rtb(u.f,q,p)}l=c?ojd(new sjd(RD(Vmb(w,w.c.length-1),8)),RD(Vmb(p,p.c.length-1),8)):ojd(new sjd((tFb(0,w.c.length),RD(w.c[0],8))),(tFb(0,p.c.length),RD(p.c[0],8)));rtb(m.f,q,l)}}if(d.b!=0){r=RD(Vmb(w,c?w.c.length-1:0),8);for(j=1;j<w.c.length;j++){s=RD(Vmb(w,c?w.c.length-1-j:j),8);e=Sub(d,0);while(e.b!=e.d.c){q=RD(evb(e),166);p=RD(Wd(qtb(u.f,q)),13);if(p.c.length<=j){gvb(e)}else{t=$id(new sjd(RD(Vmb(p,c?p.c.length-1-j:j),8)),RD(Wd(qtb(m.f,q)),8));if(s.a!=t.a||s.b!=t.b){f=s.a-r.a;h=s.b-r.b;g=t.a-r.a;i=t.b-r.b;g*h==i*f&&(f==0||isNaN(f)?f:f<0?-1:1)==(g==0||isNaN(g)?g:g<0?-1:1)&&(h==0||isNaN(h)?h:h<0?-1:1)==(i==0||isNaN(i)?i:i<0?-1:1)?($wnd.Math.abs(f)<$wnd.Math.abs(g)||$wnd.Math.abs(h)<$wnd.Math.abs(i))&&(Pub(k,s,k.c.b,k.c),true):j>1&&(Pub(k,r,k.c.b,k.c),true);gvb(e)}}}r=s}}return k} -function S_c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;c.Ug(_Ee,1);D=RD(zDb(CDb(new SDb(null,new Swb(b,16)),new e0c),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);k=RD(zDb(CDb(new SDb(null,new Swb(b,16)),new g0c(b)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);o=RD(zDb(CDb(new SDb(null,new Swb(b,16)),new i0c(b)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);p=$C(Z$,NEe,39,b.gc(),0,1);for(g=0;g<k.gc();g++){e=RD(k.Xb(g),39);C=RD(mQb(e,(h_c(),W$c)),17).a;if(C>=0&&C<k.gc()&&!p[C]){p[C]=e;k.gd(g);--g}}for(h=0;h<k.gc();h++){e=RD(k.Xb(h),39);C=RD(mQb(e,(h_c(),W$c)),17).a;for(m=0;;m++){n=C+m;if(n<p.length&&n>=0&&!p[n]){p[n]=e;k.gd(h);--h;break}n=C-m;if(n<p.length&&n>=0&&!p[n]){p[n]=e;k.gd(h);--h;break}}}o.jd(new k0c);for(i=p.length-1;i>=0;i--){if(!p[i]&&!o.dc()){p[i]=RD(o.Xb(0),39);o.gd(0)}}for(j=0;j<p.length;j++){if(!p[j]&&!D.dc()){p[j]=RD(D.Xb(0),39);D.gd(0)}}for(f=0;f<p.length;f++){pQb(p[f],(q$c(),i$c),sgb(f))}l=RD(RDb(CDb(new SDb(null,new Swb(b,16)),new o0c),new a0c),534);for(w=l,A=0,B=w.length;A<B;++A){v=w[A];d=$Wc(v);S_c(a,d,c.eh(1/l.length|0));yob();tvb(d,new uGd((q$c(),i$c)));q=new Yub;for(u=Sub(d,0);u.b!=u.d.c;){t=RD(evb(u),39);for(s=Sub(v.d,0);s.b!=s.d.c;){r=RD(evb(s),65);r.c==t&&(Pub(q,r,q.c.b,q.c),true)}}Xub(v.d);ye(v.d,q)}c.Vg()} -function jTb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new bnb;h=new bnb;q=b/2;n=a.gc();e=RD(a.Xb(0),8);r=RD(a.Xb(1),8);o=kTb(e.a,e.b,r.a,r.b,q);Rmb(d,(tFb(0,o.c.length),RD(o.c[0],8)));Rmb(h,(tFb(1,o.c.length),RD(o.c[1],8)));for(j=2;j<n;j++){p=e;e=r;r=RD(a.Xb(j),8);o=kTb(e.a,e.b,p.a,p.b,q);Rmb(d,(tFb(1,o.c.length),RD(o.c[1],8)));Rmb(h,(tFb(0,o.c.length),RD(o.c[0],8)));o=kTb(e.a,e.b,r.a,r.b,q);Rmb(d,(tFb(0,o.c.length),RD(o.c[0],8)));Rmb(h,(tFb(1,o.c.length),RD(o.c[1],8)))}o=kTb(r.a,r.b,e.a,e.b,q);Rmb(d,(tFb(1,o.c.length),RD(o.c[1],8)));Rmb(h,(tFb(0,o.c.length),RD(o.c[0],8)));c=new Ejd;g=new bnb;Mub(c,(tFb(0,d.c.length),RD(d.c[0],8)));for(k=1;k<d.c.length-2;k+=2){f=(tFb(k,d.c.length),RD(d.c[k],8));m=iTb((tFb(k-1,d.c.length),RD(d.c[k-1],8)),f,(tFb(k+1,d.c.length),RD(d.c[k+1],8)),(tFb(k+2,d.c.length),RD(d.c[k+2],8)));!isFinite(m.a)||!isFinite(m.b)?(Pub(c,f,c.c.b,c.c),true):(Pub(c,m,c.c.b,c.c),true)}Mub(c,RD(Vmb(d,d.c.length-1),8));Rmb(g,(tFb(0,h.c.length),RD(h.c[0],8)));for(l=1;l<h.c.length-2;l+=2){f=(tFb(l,h.c.length),RD(h.c[l],8));m=iTb((tFb(l-1,h.c.length),RD(h.c[l-1],8)),f,(tFb(l+1,h.c.length),RD(h.c[l+1],8)),(tFb(l+2,h.c.length),RD(h.c[l+2],8)));!isFinite(m.a)||!isFinite(m.b)?(ZEb(g.c,f),true):(ZEb(g.c,m),true)}Rmb(g,RD(Vmb(h,h.c.length-1),8));for(i=g.c.length-1;i>=0;i--){Mub(c,(tFb(i,g.c.length),RD(g.c[i],8)))}return c} -function l9c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;t=Kfb(UD(Gxd(b,(X6c(),W6c))));n=Kfb(UD(Gxd(b,U6c)));m=Kfb(UD(Gxd(b,R6c)));Bad((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));r=U8c((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a),t,a.b);for(q=0;q<r.c.length;q++){i=(tFb(q,r.c.length),RD(r.c[q],186));if(q!=0){o=(tFb(q-1,r.c.length),RD(r.c[q-1],186));Gad(i,o.f+o.b+a.b)}p=J8c(q,r,t,a.b,Heb(TD(Gxd(b,(X7c(),L7c)))));if(Heb(TD(p.b))){for(f=new Anb(i.a);f.a<f.c.c.length;){e=RD(ynb(f),172);e.c=false;e.k=false;N9c(e)}i.d=new bnb;i.e=t;--q}else{k9c(a,i);if(q+1<r.c.length){a.e=$wnd.Math.max(i.e+a.b+RD(Vmb((tFb(q+1,r.c.length),RD(r.c[q+1],186)).a,0),172).r-t,a.c);a.f=$wnd.Math.min(i.e+a.b+RD(Vmb((tFb(q+1,r.c.length),RD(r.c[q+1],186)).a,0),172).r-t,a.d);if(i.d.c.length!=0){a.c=$wnd.Math.max(a.c,RD(Vmb(i.d,i.d.c.length-1),315).d+(i.d.c.length<=1?0:a.b));a.d=$wnd.Math.min(a.c,RD(Vmb(i.d,i.d.c.length-1),315).d+(i.d.c.length<=1?0:a.b))}}if(r.c.length==1){l=RD(Vmb(i.d,i.d.c.length-1),315);k=RD(Vmb(l.a,l.a.c.length-1),172);for(h=new Anb(k.n);h.a<h.c.c.length;){g=RD(ynb(h),209);a.c=$wnd.Math.max(a.c,k.r-g.d);a.d=$wnd.Math.min(a.d,k.r-g.d);a.e=$wnd.Math.max(a.e,g.d+a.b);a.f=$wnd.Math.min(a.f,g.d+a.b)}}}}s=zad(r,a.b);u=$wnd.Math.max(s.a,n-(c.b+c.c));j=$wnd.Math.max(s.b,m-(c.d+c.a));d=j-s.b;Ixd(b,M6c,d);Ixd(b,V6c,r);return new lad(a.a,u,s.b+d,(sad(),rad))} -function e9b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;A=RD(mQb(a,(yCc(),BBc)),101);if(!(A!=(Bod(),zod)&&A!=Aod)){return}o=a.b;n=o.c.length;k=new cnb((dk(n+2,lwe),dz(Bdb(Bdb(5,n+2),(n+2)/10|0))));p=new cnb((dk(n+2,lwe),dz(Bdb(Bdb(5,n+2),(n+2)/10|0))));Rmb(k,new Tsb);Rmb(k,new Tsb);Rmb(p,new bnb);Rmb(p,new bnb);w=new bnb;for(b=0;b<n;b++){c=(tFb(b,o.c.length),RD(o.c[b],30));B=(tFb(b,k.c.length),RD(k.c[b],85));q=new Tsb;ZEb(k.c,q);D=(tFb(b,p.c.length),RD(p.c[b],15));s=new bnb;ZEb(p.c,s);for(e=new Anb(c.a);e.a<e.c.c.length;){d=RD(ynb(e),10);if(a9b(d)){ZEb(w.c,d);continue}for(j=new is(Mr(Z2b(d).a.Kc(),new ir));gs(j);){h=RD(hs(j),18);F=h.c.i;if(!a9b(F)){continue}C=RD(B.xc(mQb(F,(Ywc(),Awc))),10);if(!C){C=_8b(a,F);B.zc(mQb(F,Awc),C);D.Fc(C)}Y0b(h,RD(Vmb(C.j,1),12))}for(i=new is(Mr(a3b(d).a.Kc(),new ir));gs(i);){h=RD(hs(i),18);G=h.d.i;if(!a9b(G)){continue}r=RD(Wjb(q,mQb(G,(Ywc(),Awc))),10);if(!r){r=_8b(a,G);Zjb(q,mQb(G,Awc),r);ZEb(s.c,r)}Z0b(h,RD(Vmb(r.j,0),12))}}}for(l=0;l<p.c.length;l++){t=(tFb(l,p.c.length),RD(p.c[l],15));if(t.dc()){continue}m=null;if(l==0){m=new R4b(a);wFb(0,o.c.length);XEb(o.c,0,m)}else if(l==k.c.length-1){m=new R4b(a);ZEb(o.c,m)}else{m=(tFb(l-1,o.c.length),RD(o.c[l-1],30))}for(g=t.Kc();g.Ob();){f=RD(g.Pb(),10);g3b(f,m)}}for(v=new Anb(w);v.a<v.c.c.length;){u=RD(ynb(v),10);g3b(u,null)}pQb(a,(Ywc(),fwc),w)} -function SNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;I=new bnb;for(o=new Anb(b.b);o.a<o.c.c.length;){m=RD(ynb(o),30);for(v=new Anb(m.a);v.a<v.c.c.length;){u=RD(ynb(v),10);u.p=-1;l=qwe;B=qwe;for(D=new Anb(u.j);D.a<D.c.c.length;){C=RD(ynb(D),12);for(e=new Anb(C.e);e.a<e.c.c.length;){c=RD(ynb(e),18);F=RD(mQb(c,(yCc(),MBc)),17).a;l=$wnd.Math.max(l,F)}for(d=new Anb(C.g);d.a<d.c.c.length;){c=RD(ynb(d),18);F=RD(mQb(c,(yCc(),MBc)),17).a;B=$wnd.Math.max(B,F)}}pQb(u,HNc,sgb(l));pQb(u,INc,sgb(B))}}r=0;for(n=new Anb(b.b);n.a<n.c.c.length;){m=RD(ynb(n),30);for(v=new Anb(m.a);v.a<v.c.c.length;){u=RD(ynb(v),10);if(u.p<0){H=new ZNc;H.b=r++;ONc(a,u,H);ZEb(I.c,H)}}}A=ev(I.c.length);k=ev(I.c.length);for(g=0;g<I.c.length;g++){Rmb(A,new bnb);Rmb(k,sgb(0))}MNc(b,I,A,k);J=RD(anb(I,$C(SY,uEe,261,I.c.length,0,1)),854);w=RD(anb(A,$C(QK,Ize,15,A.c.length,0,1)),198);j=$C(kE,Pwe,28,k.c.length,15,1);for(h=0;h<j.length;h++){j[h]=(tFb(h,k.c.length),RD(k.c[h],17)).a}s=0;t=new bnb;for(i=0;i<J.length;i++){j[i]==0&&(ZEb(t.c,J[i]),true)}q=$C(kE,Pwe,28,J.length,15,1);while(t.c.length!=0){H=RD(Xmb(t,0),261);q[H.b]=s++;while(!w[H.b].dc()){K=RD(w[H.b].gd(0),261);--j[K.b];j[K.b]==0&&(ZEb(t.c,K),true)}}a.a=$C(SY,uEe,261,J.length,0,1);for(f=0;f<J.length;f++){p=J[f];G=q[f];a.a[G]=p;p.b=G;for(v=new Anb(p.e);v.a<v.c.c.length;){u=RD(ynb(v),10);u.p=G}}return a.a} -function J8c(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;p=false;i=false;m=a+1;o=(tFb(a,b.c.length),RD(b.c[a],186));h=o.a;j=null;for(g=0;g<o.a.c.length;g++){f=(tFb(g,h.c.length),RD(h.c[g],172));if(f.c){continue}if(f.b.c.length==0){gib();String.fromCharCode(10);Fad(o,f);--g;p=true;continue}if(!f.k){!!j&&gad(j);j=new had(!j?0:j.e+j.d+d,o.f,d);U9c(f,j.e+j.d,o.f);Rmb(o.d,j);aad(j,f);f.k=true}k=null;k=(r=null,g<o.a.c.length-1?(r=RD(Vmb(o.a,g+1),172)):m<b.c.length&&(tFb(m,b.c.length),RD(b.c[m],186)).a.c.length!=0&&(r=RD(Vmb((tFb(m,b.c.length),RD(b.c[m],186)).a,0),172)),r);q=false;!!k&&(q=!pb(k.j,o));if(k){if(k.b.c.length!=0&&!Heb(TD(RD(Vmb(k.b,0),27).of((X7c(),D7c))))){Q9c(f,c-f.s);gad(f.q);p=p|I8c(o,f,k,c,d)}else{Fad(o,k);break}if(k.b.c.length==0){b.c.length>m&&Fad((tFb(m,b.c.length),RD(b.c[m],186)),k);k=null;while(b.c.length>m&&(tFb(m,b.c.length),RD(b.c[m],186)).a.c.length==0){Ymb(b,(tFb(m,b.c.length),b.c[m]))}}if(!k){--g;continue}if(!Heb(TD(RD(Vmb(k.b,0),27).of((X7c(),D7c))))&&K8c(b,o,f,k,q,c,m,d)){p=true;continue}if(q){n=o.b;l=k.f;if(!Heb(TD(RD(Vmb(k.b,0),27).of(D7c)))&&L8c(b,o,f,k,c,m,d,e)){p=true;if(n<l){i=true;k.j=o;break}continue}else if(M8c(o,f)){f.c=true;p=true;continue}}else if(M8c(o,f)){f.c=true;p=true;continue}if(p){continue}}if(M8c(o,f)){f.c=true;p=true;!!k&&(k.k=false);continue}else{gad(f.q)}}return new Ptd((Geb(),p?true:false),i?true:false)} -function yCc(){yCc=geb;QBc=(umd(),Wld);RBc=Xld;SBc=Yld;TBc=Zld;VBc=$ld;WBc=_ld;ZBc=bmd;_Bc=dmd;aCc=emd;$Bc=cmd;bCc=fmd;dCc=gmd;fCc=jmd;YBc=amd;PBc=(Ozc(),ezc);UBc=fzc;XBc=gzc;cCc=hzc;JBc=new mGd(Rld,sgb(0));KBc=bzc;LBc=czc;MBc=dzc;vCc=Fzc;nCc=kzc;oCc=nzc;rCc=vzc;pCc=qzc;qCc=szc;xCc=Kzc;wCc=Hzc;tCc=Bzc;sCc=zzc;uCc=Dzc;iBc=Uyc;jBc=Vyc;DAc=dyc;EAc=gyc;jCc=mmd;lCc=qmd;iCc=lmd;hCc=kmd;kCc=(mqd(),jqd);new mGd(nmd,kCc);rBc=new A3b(12);qBc=new mGd(tld,rBc);zAc=(Ymd(),Umd);yAc=new mGd(Skd,zAc);ABc=new mGd(Gld,0);NBc=new mGd(Sld,sgb(1));Tzc=new mGd(Dkd,Yze);pBc=rld;BBc=Hld;GBc=Old;qAc=Mkd;Rzc=Bkd;IAc=Xkd;OBc=new mGd(Vld,(Geb(),true));NAc=$kd;OAc=_kd;lBc=kld;oBc=pld;mBc=mld;tAc=(Cmd(),Amd);rAc=new mGd(Nkd,tAc);dBc=ild;cBc=gld;EBc=Lld;DBc=Kld;FBc=Nld;uBc=(pod(),ood);new mGd(zld,uBc);wBc=Cld;xBc=Dld;yBc=Eld;vBc=Bld;mCc=jzc;$Ac=Fyc;ZAc=Dyc;gCc=izc;UAc=vyc;pAc=Rxc;oAc=Pxc;eAc=yxc;fAc=zxc;hAc=Exc;gAc=Axc;nAc=Nxc;aBc=Hyc;bBc=Iyc;QAc=oyc;kBc=Zyc;fBc=Myc;GAc=jyc;hBc=Syc;BAc=_xc;CAc=byc;dAc=Kkd;eBc=Jyc;Xzc=mxc;Wzc=kxc;Vzc=jxc;KAc=myc;JAc=lyc;LAc=nyc;nBc=nld;RAc=cld;FAc=Ukd;wAc=Qkd;vAc=Pkd;iAc=Hxc;CBc=Jld;Uzc=Jkd;MAc=Zkd;zBc=Fld;sBc=vld;tBc=xld;WAc=yyc;XAc=Ayc;IBc=Qld;Szc=ixc;YAc=Cyc;xAc=Xxc;uAc=Vxc;_Ac=eld;SAc=syc;gBc=Pyc;eCc=hmd;sAc=Txc;HBc=_yc;AAc=Zxc;jAc=Jxc;kAc=Kxc;TAc=uyc;lAc=Lxc;PAc=bld;VAc=xyc;mAc=Mxc;cAc=wxc;_zc=sxc;Zzc=qxc;$zc=rxc;aAc=uxc;Yzc=oxc;bAc=vxc;HAc=kyc} -function Mqe(a){var b,c,d;if(a.d>=a.j){a.a=-1;a.c=1;return}b=ihb(a.i,a.d++);a.a=b;if(a.b==1){switch(b){case 92:d=10;if(a.d>=a.j)throw Adb(new Lqe(TId((Hde(),VIe))));a.a=ihb(a.i,a.d++);break;case 45:if((a.e&512)==512&&a.d<a.j&&ihb(a.i,a.d)==91){++a.d;d=24}else d=0;break;case 91:if((a.e&512)!=512&&a.d<a.j&&ihb(a.i,a.d)==58){++a.d;d=20;break}default:if((b&64512)==uxe&&a.d<a.j){c=ihb(a.i,a.d);if((c&64512)==56320){a.a=txe+(b-uxe<<10)+c-56320;++a.d}}d=0;}a.c=d;return}switch(b){case 124:d=2;break;case 42:d=3;break;case 43:d=4;break;case 63:d=5;break;case 41:d=7;break;case 46:d=8;break;case 91:d=9;break;case 94:d=11;break;case 36:d=12;break;case 40:d=6;if(a.d>=a.j)break;if(ihb(a.i,a.d)!=63)break;if(++a.d>=a.j)throw Adb(new Lqe(TId((Hde(),WIe))));b=ihb(a.i,a.d++);switch(b){case 58:d=13;break;case 61:d=14;break;case 33:d=15;break;case 91:d=19;break;case 62:d=18;break;case 60:if(a.d>=a.j)throw Adb(new Lqe(TId((Hde(),WIe))));b=ihb(a.i,a.d++);if(b==61){d=16}else if(b==33){d=17}else throw Adb(new Lqe(TId((Hde(),XIe))));break;case 35:while(a.d<a.j){b=ihb(a.i,a.d++);if(b==41)break}if(b!=41)throw Adb(new Lqe(TId((Hde(),YIe))));d=21;break;default:if(b==45||97<=b&&b<=122||65<=b&&b<=90){--a.d;d=22;break}else if(b==40){d=23;break}throw Adb(new Lqe(TId((Hde(),WIe))));}break;case 92:d=10;if(a.d>=a.j)throw Adb(new Lqe(TId((Hde(),VIe))));a.a=ihb(a.i,a.d++);break;default:d=0;}a.c=d} -function oXc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;c.Ug('Process compaction',1);if(!Heb(TD(mQb(b,(h_c(),F$c))))){return}e=RD(mQb(b,H$c),88);n=Kfb(UD(mQb(b,_$c)));pXc(a,b,e);lXc(b,n/2/2);o=b.b;tvb(o,new EXc(e));for(j=Sub(o,0);j.b!=j.d.c;){i=RD(evb(j),39);if(!Heb(TD(mQb(i,(q$c(),n$c))))){d=mXc(i,e);p=lWc(i,b);l=0;m=0;if(d){q=d.e;switch(e.g){case 2:l=q.a-n-i.f.a;p.e.a-n-i.f.a<l&&(l=p.e.a-n-i.f.a);m=l+i.f.a;break;case 1:l=q.a+d.f.a+n;p.e.a+n>l&&(l=p.e.a+p.f.a+n);m=l+i.f.a;break;case 4:l=q.b-n-i.f.b;p.e.b-n-i.f.b<l&&(l=p.e.b-n-i.f.b);m=l+i.f.b;break;case 3:l=q.b+d.f.b+n;p.e.b+n>l&&(l=p.e.b+p.f.b+n);m=l+i.f.b;}}else if(p){switch(e.g){case 2:l=p.e.a-n-i.f.a;m=l+i.f.a;break;case 1:l=p.e.a+p.f.a+n;m=l+i.f.a;break;case 4:l=p.e.b-n-i.f.b;m=l+i.f.b;break;case 3:l=p.e.b+p.f.b+n;m=l+i.f.b;}}if(dE(mQb(b,K$c))===dE((LZc(),IZc))){f=l;g=m;h=DDb(CDb(new SDb(null,new Swb(a.a,16)),new IXc(f,g)));if(h.a!=null){e==(Cmd(),ymd)||e==zmd?(i.e.a=l):(i.e.b=l)}else{e==(Cmd(),ymd)||e==Bmd?(h=DDb(CDb(NDb(new SDb(null,new Swb(a.a,16))),new WXc(f)))):(h=DDb(CDb(NDb(new SDb(null,new Swb(a.a,16))),new YXc(f))));h.a!=null&&(e==ymd||e==zmd?(i.e.a=Kfb(UD((sFb(h.a!=null),RD(h.a,42)).a))):(i.e.b=Kfb(UD((sFb(h.a!=null),RD(h.a,42)).a))))}if(h.a!=null){k=Wmb(a.a,(sFb(h.a!=null),h.a),0);if(k>0&&k!=RD(mQb(i,f_c),17).a){pQb(i,UZc,(Geb(),true));pQb(i,f_c,sgb(k))}}}else{e==(Cmd(),ymd)||e==zmd?(i.e.a=l):(i.e.b=l)}}}c.Vg()} -function Fre(a){var b,c,d,e,f,g,h,i,j;a.b=1;Mqe(a);b=null;if(a.c==0&&a.a==94){Mqe(a);b=(Vse(),Vse(),++Use,new xte(4));rte(b,0,MLe);h=(null,++Use,new xte(4))}else{h=(Vse(),Vse(),++Use,new xte(4))}e=true;while((j=a.c)!=1){if(j==0&&a.a==93&&!e){if(b){wte(b,h);h=b}break}c=a.a;d=false;if(j==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:ute(h,Ere(c));d=true;break;case 105:case 73:case 99:case 67:c=(ute(h,Ere(c)),-1);c<0&&(d=true);break;case 112:case 80:i=Sqe(a,c);if(!i)throw Adb(new Lqe(TId((Hde(),hJe))));ute(h,i);d=true;break;default:c=Dre(a);}}else if(j==24&&!e){if(b){wte(b,h);h=b}f=Fre(a);wte(h,f);if(a.c!=0||a.a!=93)throw Adb(new Lqe(TId((Hde(),lJe))));break}Mqe(a);if(!d){if(j==0){if(c==91)throw Adb(new Lqe(TId((Hde(),mJe))));if(c==93)throw Adb(new Lqe(TId((Hde(),nJe))));if(c==45&&!e&&a.a!=93)throw Adb(new Lqe(TId((Hde(),oJe))))}if(a.c!=0||a.a!=45||c==45&&e){rte(h,c,c)}else{Mqe(a);if((j=a.c)==1)throw Adb(new Lqe(TId((Hde(),jJe))));if(j==0&&a.a==93){rte(h,c,c);rte(h,45,45)}else if(j==0&&a.a==93||j==24){throw Adb(new Lqe(TId((Hde(),oJe))))}else{g=a.a;if(j==0){if(g==91)throw Adb(new Lqe(TId((Hde(),mJe))));if(g==93)throw Adb(new Lqe(TId((Hde(),nJe))));if(g==45)throw Adb(new Lqe(TId((Hde(),oJe))))}else j==10&&(g=Dre(a));Mqe(a);if(c>g)throw Adb(new Lqe(TId((Hde(),rJe))));rte(h,c,g)}}}e=false}if(a.c==1)throw Adb(new Lqe(TId((Hde(),jJe))));vte(h);ste(h);a.b=0;Mqe(a);return h} -function EGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;c.Ug('Coffman-Graham Layering',1);if(b.a.c.length==0){c.Vg();return}v=RD(mQb(b,(yCc(),SAc)),17).a;i=0;g=0;for(m=new Anb(b.a);m.a<m.c.c.length;){l=RD(ynb(m),10);l.p=i++;for(f=new is(Mr(a3b(l).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);e.p=g++}}a.d=$C(xdb,Hye,28,i,16,1);a.a=$C(xdb,Hye,28,g,16,1);a.b=$C(kE,Pwe,28,i,15,1);a.e=$C(kE,Pwe,28,i,15,1);a.f=$C(kE,Pwe,28,i,15,1);Nc(a.c);FGc(a,b);o=new pwb(new JGc(a));for(u=new Anb(b.a);u.a<u.c.c.length;){s=RD(ynb(u),10);for(f=new is(Mr(Z2b(s).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);a.a[e.p]||++a.b[s.p]}a.b[s.p]==0&&(zFb(lwb(o,s),Bxe),true)}h=0;while(o.b.c.length!=0){s=RD(mwb(o),10);a.f[s.p]=h++;for(f=new is(Mr(a3b(s).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(a.a[e.p]){continue}q=e.d.i;--a.b[q.p];Rc(a.c,q,sgb(a.f[s.p]));a.b[q.p]==0&&(zFb(lwb(o,q),Bxe),true)}}n=new pwb(new NGc(a));for(t=new Anb(b.a);t.a<t.c.c.length;){s=RD(ynb(t),10);for(f=new is(Mr(a3b(s).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);a.a[e.p]||++a.e[s.p]}a.e[s.p]==0&&(zFb(lwb(n,s),Bxe),true)}k=new bnb;d=BGc(b,k);while(n.b.c.length!=0){r=RD(mwb(n),10);(d.a.c.length>=v||!zGc(r,d))&&(d=BGc(b,k));g3b(r,d);for(f=new is(Mr(Z2b(r).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(a.a[e.p]){continue}p=e.c.i;--a.e[p.p];a.e[p.p]==0&&(zFb(lwb(n,p),Bxe),true)}}for(j=k.c.length-1;j>=0;--j){Rmb(b.b,(tFb(j,k.c.length),RD(k.c[j],30)))}b.a.c.length=0;c.Vg()} -function Sec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;u=false;do{u=false;for(f=b?(new Xkb(a.a.b)).a.gc()-2:1;b?f>=0:f<(new Xkb(a.a.b)).a.gc();f+=b?-1:1){e=_5b(a.a,sgb(f));for(n=0;n<e.b;n++){l=RD(ju(e,n),10);if(!nQb(l,(Ywc(),zwc))){continue}if(a6b(a.a,sgb(f))&&a.r==(aEc(),TDc)||b6b(a.a,sgb(f))&&a.r==(aEc(),UDc)){continue}t=true;for(r=0;r<e.b;r++){q=RD(ju(e,r),10);nQb(q,zwc)&&(b&&RD(mQb(l,zwc),17).a<RD(mQb(q,zwc),17).a||!b&&RD(mQb(l,zwc),17).a>RD(mQb(q,zwc),17).a)&&(t=false)}if(!t){continue}i=b?f+1:f-1;h=_5b(a.a,sgb(i));g=false;s=true;d=false;for(k=Sub(h,0);k.b!=k.d.c;){j=RD(evb(k),10);if(nQb(j,zwc)){if(j.p!=l.p){g=g|(b?RD(mQb(j,zwc),17).a<RD(mQb(l,zwc),17).a:RD(mQb(j,zwc),17).a>RD(mQb(l,zwc),17).a);s=false}}else if(!g&&s){if(j.k==(r3b(),n3b)){d=true;b?(m=RD(hs(new is(Mr(Z2b(j).a.Kc(),new ir))),18).c.i):(m=RD(hs(new is(Mr(a3b(j).a.Kc(),new ir))),18).d.i);if(m==l){b?(c=RD(hs(new is(Mr(a3b(j).a.Kc(),new ir))),18).d.i):(c=RD(hs(new is(Mr(Z2b(j).a.Kc(),new ir))),18).c.i);(b?RD($5b(a.a,c),17).a-RD($5b(a.a,m),17).a:RD($5b(a.a,m),17).a-RD($5b(a.a,c),17).a)<=2&&(s=false)}}}}if(d&&s){b?(c=RD(hs(new is(Mr(a3b(l).a.Kc(),new ir))),18).d.i):(c=RD(hs(new is(Mr(Z2b(l).a.Kc(),new ir))),18).c.i);(b?RD($5b(a.a,c),17).a-RD($5b(a.a,l),17).a:RD($5b(a.a,l),17).a-RD($5b(a.a,c),17).a)<=2&&c.k==(r3b(),p3b)&&(s=false)}if(g||s){p=Xec(a,l,b);while(p.a.gc()!=0){o=RD(p.a.ec().Kc().Pb(),10);p.a.Bc(o)!=null;ye(p,Xec(a,o,b))}--n;u=true}}}}while(u)} -function Xae(a){_Ad(a.c,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#decimal']));_Ad(a.d,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#integer']));_Ad(a.e,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#boolean']));_Ad(a.f,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EBoolean',GIe,'EBoolean:Object']));_Ad(a.i,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#byte']));_Ad(a.g,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#hexBinary']));_Ad(a.j,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EByte',GIe,'EByte:Object']));_Ad(a.n,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EChar',GIe,'EChar:Object']));_Ad(a.t,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#double']));_Ad(a.u,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EDouble',GIe,'EDouble:Object']));_Ad(a.F,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#float']));_Ad(a.G,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EFloat',GIe,'EFloat:Object']));_Ad(a.I,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#int']));_Ad(a.J,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EInt',GIe,'EInt:Object']));_Ad(a.N,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#long']));_Ad(a.O,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'ELong',GIe,'ELong:Object']));_Ad(a.Z,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#short']));_Ad(a.$,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EShort',GIe,'EShort:Object']));_Ad(a._,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#string']))} -function C0c(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o;m=RD(d.a,17).a;n=RD(d.b,17).a;l=a.b;o=a.c;h=0;k=0;if(b==(Cmd(),ymd)||b==zmd){k=Uvb(QCb(HDb(GDb(new SDb(null,new Swb(c.b,16)),new b2c),new b1c)));if(l.e.b+l.f.b/2>k){j=++n;h=Kfb(UD(Lvb(JDb(GDb(new SDb(null,new Swb(c.b,16)),new d2c(e,j)),new d1c))))}else{i=++m;h=Kfb(UD(Lvb(KDb(GDb(new SDb(null,new Swb(c.b,16)),new f2c(e,i)),new h1c))))}}else{k=Uvb(QCb(HDb(GDb(new SDb(null,new Swb(c.b,16)),new x1c),new l1c)));if(l.e.a+l.f.a/2>k){j=++n;h=Kfb(UD(Lvb(JDb(GDb(new SDb(null,new Swb(c.b,16)),new z1c(e,j)),new n1c))))}else{i=++m;h=Kfb(UD(Lvb(KDb(GDb(new SDb(null,new Swb(c.b,16)),new B1c(e,i)),new r1c))))}}if(b==ymd){Oub(a.a,new rjd(Kfb(UD(mQb(l,(q$c(),f$c))))-e,h));Oub(a.a,new rjd(o.e.a+o.f.a+e+f,h));Oub(a.a,new rjd(o.e.a+o.f.a+e+f,o.e.b+o.f.b/2));Oub(a.a,new rjd(o.e.a+o.f.a,o.e.b+o.f.b/2))}else if(b==zmd){Oub(a.a,new rjd(Kfb(UD(mQb(l,(q$c(),e$c))))+e,l.e.b+l.f.b/2));Oub(a.a,new rjd(l.e.a+l.f.a+e,h));Oub(a.a,new rjd(o.e.a-e-f,h));Oub(a.a,new rjd(o.e.a-e-f,o.e.b+o.f.b/2));Oub(a.a,new rjd(o.e.a,o.e.b+o.f.b/2))}else if(b==Bmd){Oub(a.a,new rjd(h,Kfb(UD(mQb(l,(q$c(),f$c))))-e));Oub(a.a,new rjd(h,o.e.b+o.f.b+e+f));Oub(a.a,new rjd(o.e.a+o.f.a/2,o.e.b+o.f.b+e+f));Oub(a.a,new rjd(o.e.a+o.f.a/2,o.e.b+o.f.b+e))}else{a.a.b==0||(RD(Rub(a.a),8).b=Kfb(UD(mQb(l,(q$c(),e$c))))+e*RD(g.b,17).a);Oub(a.a,new rjd(h,Kfb(UD(mQb(l,(q$c(),e$c))))+e*RD(g.b,17).a));Oub(a.a,new rjd(h,o.e.b-e*RD(g.a,17).a-f))}return new Ptd(sgb(m),sgb(n))} -function ASd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;g=true;l=null;d=null;e=null;b=false;n=_Rd;j=null;f=null;h=0;i=sSd(a,h,ZRd,$Rd);if(i<a.length&&(BFb(i,a.length),a.charCodeAt(i)==58)){l=(AFb(h,i,a.length),a.substr(h,i-h));h=i+1}c=l!=null&&tpb(eSd,l.toLowerCase());if(c){i=a.lastIndexOf('!/');if(i==-1){throw Adb(new agb('no archive separator'))}g=true;d=zhb(a,h,++i);h=i}else if(h>=0&&lhb(a.substr(h,'//'.length),'//')){h+=2;i=sSd(a,h,aSd,bSd);d=(AFb(h,i,a.length),a.substr(h,i-h));h=i}else if(l!=null&&(h==a.length||(BFb(h,a.length),a.charCodeAt(h)!=47))){g=false;i=rhb(a,Fhb(35),h);i==-1&&(i=a.length);d=(AFb(h,i,a.length),a.substr(h,i-h));h=i}if(!c&&h<a.length&&(BFb(h,a.length),a.charCodeAt(h)==47)){i=sSd(a,h+1,aSd,bSd);k=(AFb(h+1,i,a.length),a.substr(h+1,i-(h+1)));if(k.length>0&&ihb(k,k.length-1)==58){e=k;h=i}}if(h<a.length&&(BFb(h,a.length),a.charCodeAt(h)==47)){++h;b=true}if(h<a.length&&(BFb(h,a.length),a.charCodeAt(h)!=63)&&(BFb(h,a.length),a.charCodeAt(h)!=35)){m=new bnb;while(h<a.length&&(BFb(h,a.length),a.charCodeAt(h)!=63)&&(BFb(h,a.length),a.charCodeAt(h)!=35)){i=sSd(a,h,aSd,bSd);Rmb(m,(AFb(h,i,a.length),a.substr(h,i-h)));h=i;h<a.length&&(BFb(h,a.length),a.charCodeAt(h)==47)&&(BSd(a,++h)||(m.c.push(''),undefined,true))}n=$C(qJ,Nve,2,m.c.length,6,1);anb(m,n)}if(h<a.length&&(BFb(h,a.length),a.charCodeAt(h)==63)){i=phb(a,35,++h);i==-1&&(i=a.length);j=(AFb(h,i,a.length),a.substr(h,i-h));h=i}h<a.length&&(f=yhb(a,++h));ISd(g,l,d,e,n,j);return new lSd(g,l,d,e,b,n,j,f)} -function P_b(){P_b=geb;z$b();O_b=new Tp;Rc(O_b,(qpd(),cpd),bpd);Rc(O_b,mpd,bpd);Rc(O_b,dpd,bpd);Rc(O_b,jpd,bpd);Rc(O_b,ipd,bpd);Rc(O_b,gpd,bpd);Rc(O_b,jpd,cpd);Rc(O_b,bpd,Zod);Rc(O_b,cpd,Zod);Rc(O_b,mpd,Zod);Rc(O_b,dpd,Zod);Rc(O_b,hpd,Zod);Rc(O_b,jpd,Zod);Rc(O_b,ipd,Zod);Rc(O_b,gpd,Zod);Rc(O_b,apd,Zod);Rc(O_b,bpd,kpd);Rc(O_b,cpd,kpd);Rc(O_b,Zod,kpd);Rc(O_b,mpd,kpd);Rc(O_b,dpd,kpd);Rc(O_b,hpd,kpd);Rc(O_b,jpd,kpd);Rc(O_b,apd,kpd);Rc(O_b,lpd,kpd);Rc(O_b,ipd,kpd);Rc(O_b,epd,kpd);Rc(O_b,gpd,kpd);Rc(O_b,cpd,mpd);Rc(O_b,dpd,mpd);Rc(O_b,jpd,mpd);Rc(O_b,gpd,mpd);Rc(O_b,cpd,dpd);Rc(O_b,mpd,dpd);Rc(O_b,jpd,dpd);Rc(O_b,dpd,dpd);Rc(O_b,ipd,dpd);Rc(O_b,bpd,$od);Rc(O_b,cpd,$od);Rc(O_b,Zod,$od);Rc(O_b,kpd,$od);Rc(O_b,mpd,$od);Rc(O_b,dpd,$od);Rc(O_b,hpd,$od);Rc(O_b,jpd,$od);Rc(O_b,lpd,$od);Rc(O_b,apd,$od);Rc(O_b,gpd,$od);Rc(O_b,ipd,$od);Rc(O_b,fpd,$od);Rc(O_b,bpd,lpd);Rc(O_b,cpd,lpd);Rc(O_b,Zod,lpd);Rc(O_b,mpd,lpd);Rc(O_b,dpd,lpd);Rc(O_b,hpd,lpd);Rc(O_b,jpd,lpd);Rc(O_b,apd,lpd);Rc(O_b,gpd,lpd);Rc(O_b,epd,lpd);Rc(O_b,fpd,lpd);Rc(O_b,cpd,apd);Rc(O_b,mpd,apd);Rc(O_b,dpd,apd);Rc(O_b,jpd,apd);Rc(O_b,lpd,apd);Rc(O_b,gpd,apd);Rc(O_b,ipd,apd);Rc(O_b,bpd,_od);Rc(O_b,cpd,_od);Rc(O_b,Zod,_od);Rc(O_b,mpd,_od);Rc(O_b,dpd,_od);Rc(O_b,hpd,_od);Rc(O_b,jpd,_od);Rc(O_b,apd,_od);Rc(O_b,gpd,_od);Rc(O_b,cpd,ipd);Rc(O_b,Zod,ipd);Rc(O_b,kpd,ipd);Rc(O_b,dpd,ipd);Rc(O_b,bpd,epd);Rc(O_b,cpd,epd);Rc(O_b,kpd,epd);Rc(O_b,mpd,epd);Rc(O_b,dpd,epd);Rc(O_b,hpd,epd);Rc(O_b,jpd,epd);Rc(O_b,jpd,fpd);Rc(O_b,dpd,fpd);Rc(O_b,apd,bpd);Rc(O_b,apd,mpd);Rc(O_b,apd,Zod);Rc(O_b,hpd,bpd);Rc(O_b,hpd,cpd);Rc(O_b,hpd,kpd)} -function _Qc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;c.Ug('Brandes & Koepf node placement',1);a.a=b;a.c=iRc(b);d=RD(mQb(b,(yCc(),fBc)),281);n=Heb(TD(mQb(b,gBc)));a.d=d==(Ouc(),Luc)&&!n||d==Iuc;$Qc(a,b);v=null;w=null;r=null;s=null;q=(dk(4,iwe),new cnb(4));switch(RD(mQb(b,fBc),281).g){case 3:r=new sQc(b,a.c.d,(EQc(),CQc),(wQc(),uQc));ZEb(q.c,r);break;case 1:s=new sQc(b,a.c.d,(EQc(),DQc),(wQc(),uQc));ZEb(q.c,s);break;case 4:v=new sQc(b,a.c.d,(EQc(),CQc),(wQc(),vQc));ZEb(q.c,v);break;case 2:w=new sQc(b,a.c.d,(EQc(),DQc),(wQc(),vQc));ZEb(q.c,w);break;default:r=new sQc(b,a.c.d,(EQc(),CQc),(wQc(),uQc));s=new sQc(b,a.c.d,DQc,uQc);v=new sQc(b,a.c.d,CQc,vQc);w=new sQc(b,a.c.d,DQc,vQc);ZEb(q.c,v);ZEb(q.c,w);ZEb(q.c,r);ZEb(q.c,s);}e=new MQc(b,a.c);for(h=new Anb(q);h.a<h.c.c.length;){f=RD(ynb(h),185);LQc(e,f,a.b);KQc(f)}m=new RQc(b,a.c);for(i=new Anb(q);i.a<i.c.c.length;){f=RD(ynb(i),185);OQc(m,f)}if(c._g()){for(j=new Anb(q);j.a<j.c.c.length;){f=RD(ynb(j),185);c.bh(f+' size is '+qQc(f))}}l=null;if(a.d){k=YQc(a,q,a.c.d);XQc(b,k,c)&&(l=k)}if(!l){for(j=new Anb(q);j.a<j.c.c.length;){f=RD(ynb(j),185);XQc(b,f,c)&&(!l||qQc(l)>qQc(f))&&(l=f)}}!l&&(l=(tFb(0,q.c.length),RD(q.c[0],185)));for(p=new Anb(b.b);p.a<p.c.c.length;){o=RD(ynb(p),30);for(u=new Anb(o.a);u.a<u.c.c.length;){t=RD(ynb(u),10);t.n.b=Kfb(l.p[t.p])+Kfb(l.d[t.p])}}if(c._g()){c.bh('Chosen node placement: '+l);c.bh('Blocks: '+bRc(l));c.bh('Classes: '+cRc(l,c));c.bh('Marked edges: '+a.b)}for(g=new Anb(q);g.a<g.c.c.length;){f=RD(ynb(g),185);f.g=null;f.b=null;f.a=null;f.d=null;f.j=null;f.i=null;f.p=null}gRc(a.c);a.b.a.$b();c.Vg()} -function GVc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;if(a.c.length==1){CVc((tFb(0,a.c.length),RD(a.c[0],121)));return tFb(0,a.c.length),RD(a.c[0],121)}else if(a.c.length<=0){return new YWc}for(i=new Anb(a);i.a<i.c.c.length;){g=RD(ynb(i),121);s=0;o=lve;p=lve;m=qwe;n=qwe;for(r=Sub(g.b,0);r.b!=r.d.c;){q=RD(evb(r),39);s+=RD(mQb(q,(h_c(),X$c)),17).a;o=$wnd.Math.min(o,q.e.a);p=$wnd.Math.min(p,q.e.b);m=$wnd.Math.max(m,q.e.a+q.f.a);n=$wnd.Math.max(n,q.e.b+q.f.b)}pQb(g,(h_c(),X$c),sgb(s));pQb(g,(q$c(),SZc),new rjd(o,p));pQb(g,RZc,new rjd(m,n))}yob();_mb(a,new KVc);v=new YWc;kQb(v,(tFb(0,a.c.length),RD(a.c[0],96)));l=0;D=0;for(j=new Anb(a);j.a<j.c.c.length;){g=RD(ynb(j),121);w=ojd(ajd(RD(mQb(g,(q$c(),RZc)),8)),RD(mQb(g,SZc),8));l=$wnd.Math.max(l,w.a);D+=w.a*w.b}l=$wnd.Math.max(l,$wnd.Math.sqrt(D)*Kfb(UD(mQb(v,(h_c(),E$c)))));A=Kfb(UD(mQb(v,_$c)));F=0;G=0;k=0;b=A;for(h=new Anb(a);h.a<h.c.c.length;){g=RD(ynb(h),121);w=ojd(ajd(RD(mQb(g,(q$c(),RZc)),8)),RD(mQb(g,SZc),8));if(F+w.a>l){F=0;G+=k+A;k=0}FVc(v,g,F,G);b=$wnd.Math.max(b,F+w.a);k=$wnd.Math.max(k,w.b);F+=w.a+A}u=new Tsb;c=new Tsb;for(C=new Anb(a);C.a<C.c.c.length;){B=RD(ynb(C),121);d=Heb(TD(mQb(B,(umd(),Mkd))));t=!B.q?(null,wob):B.q;for(f=t.vc().Kc();f.Ob();){e=RD(f.Pb(),44);if(Ujb(u,e.ld())){if(dE(RD(e.ld(),149).Sg())!==dE(e.md())){if(d&&Ujb(c,e.ld())){gib();'Found different values for property '+RD(e.ld(),149).Pg()+' in components.';String.fromCharCode(10)}else{Zjb(u,RD(e.ld(),149),e.md());pQb(v,RD(e.ld(),149),e.md());d&&Zjb(c,RD(e.ld(),149),e.md())}}}else{Zjb(u,RD(e.ld(),149),e.md());pQb(v,RD(e.ld(),149),e.md())}}}CVc(v);return v} -function f7d(a,b){switch(a.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new sje(a.b,a.a,b,a.c);case 1:return new _Zd(a.a,b,BYd(b.Dh(),a.c));case 43:return new lie(a.a,b,BYd(b.Dh(),a.c));case 3:return new XZd(a.a,b,BYd(b.Dh(),a.c));case 45:return new iie(a.a,b,BYd(b.Dh(),a.c));case 41:return new DVd(RD(WVd(a.c),29),a.a,b,BYd(b.Dh(),a.c));case 50:return new Cje(RD(WVd(a.c),29),a.a,b,BYd(b.Dh(),a.c));case 5:return new oie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 47:return new sie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 7:return new C5d(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 49:return new G5d(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 9:return new gie(a.a,b,BYd(b.Dh(),a.c));case 11:return new eie(a.a,b,BYd(b.Dh(),a.c));case 13:return new aie(a.a,b,BYd(b.Dh(),a.c));case 15:return new Kfe(a.a,b,BYd(b.Dh(),a.c));case 17:return new Cie(a.a,b,BYd(b.Dh(),a.c));case 19:return new zie(a.a,b,BYd(b.Dh(),a.c));case 21:return new vie(a.a,b,BYd(b.Dh(),a.c));case 23:return new PZd(a.a,b,BYd(b.Dh(),a.c));case 25:return new bje(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 27:return new Yie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 29:return new Tie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 31:return new Nie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 33:return new $ie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 35:return new Vie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 37:return new Pie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 39:return new Iie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 40:return new Uge(b,BYd(b.Dh(),a.c));default:throw Adb(new yz('Unknown feature style: '+a.e));}} -function h2c(a){var b,c,d,e,f,g,h,i;f=0;e=a.a.b;for(i=Sub(a.a,0);i.b!=i.d.c;){h=RD(evb(i),240);g=(f+1)/(e+1);if(!a.c&&!a.d){return}else if(!!a.c&&!a.d){a.g=true;if(a.b==(Cmd(),ymd)){d=a.c.e.b+a.c.f.b+a.e*(f+1);b=new rjd(Kfb(UD(mQb(a.c,(q$c(),e$c))))+a.e,d);c=new rjd(Kfb(UD(mQb(a.c,f$c)))-a.e,d)}else if(a.b==zmd){d=a.c.e.b+a.c.f.b+a.e*(f+1);b=new rjd(Kfb(UD(mQb(a.c,(q$c(),f$c))))-a.e,d);c=new rjd(Kfb(UD(mQb(a.c,e$c)))+a.e,d)}else if(a.b==Bmd){d=a.c.e.a+a.c.f.a+a.e*(f+1);b=new rjd(d,Kfb(UD(mQb(a.c,(q$c(),e$c))))+a.e);c=new rjd(d,Kfb(UD(mQb(a.c,f$c)))-a.e)}else{d=a.c.e.a+a.c.f.a+a.e*(f+1);b=new rjd(d,Kfb(UD(mQb(a.c,(q$c(),f$c))))-a.e);c=new rjd(d,Kfb(UD(mQb(a.c,e$c)))+a.e)}}else if(!!a.c&&!!a.d){if(a.b==(Cmd(),ymd)){d=a.d.e.b*g+(a.c.e.b+a.c.f.b)*(1-g);b=new rjd(Kfb(UD(mQb(a.c,(q$c(),e$c))))+a.e,d);c=new rjd(Kfb(UD(mQb(a.c,f$c)))-a.e,d)}else if(a.b==zmd){d=a.d.e.b*g+(a.c.e.b+a.c.f.b)*(1-g);b=new rjd(Kfb(UD(mQb(a.c,(q$c(),f$c))))-a.e,d);c=new rjd(Kfb(UD(mQb(a.c,e$c)))+a.e,d)}else if(a.b==Bmd){d=a.d.e.a*g+(a.c.e.a+a.c.f.a)*(1-g);b=new rjd(d,Kfb(UD(mQb(a.c,(q$c(),e$c))))+a.e);c=new rjd(d,Kfb(UD(mQb(a.c,f$c)))-a.e)}else{d=a.d.e.a*g+(a.c.e.a+a.c.f.a)*(1-g);b=new rjd(d,Kfb(UD(mQb(a.c,(q$c(),f$c))))-a.e);c=new rjd(d,Kfb(UD(mQb(a.c,e$c)))+a.e)}}else{a.f=true;if(a.b==(Cmd(),ymd)){d=a.d.e.b-a.e*(f+1);b=new rjd(Kfb(UD(mQb(a.d,(q$c(),e$c))))+a.e,d);c=new rjd(Kfb(UD(mQb(a.d,f$c)))-a.e,d)}else if(a.b==zmd){d=a.d.e.b-a.e*(f+1);b=new rjd(Kfb(UD(mQb(a.d,(q$c(),f$c))))-a.e,d);c=new rjd(Kfb(UD(mQb(a.d,e$c)))+a.e,d)}else if(a.b==Bmd){d=a.d.e.a-a.e*(f+1);b=new rjd(d,Kfb(UD(mQb(a.d,(q$c(),e$c))))+a.e);c=new rjd(d,Kfb(UD(mQb(a.d,f$c)))-a.e)}else{d=a.d.e.a-a.e*(f+1);b=new rjd(d,Kfb(UD(mQb(a.d,(q$c(),f$c))))-a.e);c=new rjd(d,Kfb(UD(mQb(a.d,e$c)))+a.e)}}RD(h.a,8).a=b.a;RD(h.a,8).b=b.b;h.b.a=c.a;h.b.b=c.b;++f}} -function LA(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;switch(b){case 71:h=d.q.getFullYear()-Owe>=-1900?1:0;c>=4?Zhb(a,cD(WC(qJ,1),Nve,2,6,[Qwe,Rwe])[h]):Zhb(a,cD(WC(qJ,1),Nve,2,6,['BC','AD'])[h]);break;case 121:AA(a,c,d);break;case 77:zA(a,c,d);break;case 107:i=e.q.getHours();i==0?UA(a,24,c):UA(a,i,c);break;case 83:yA(a,c,e);break;case 69:k=d.q.getDay();c==5?Zhb(a,cD(WC(qJ,1),Nve,2,6,['S','M','T','W','T','F','S'])[k]):c==4?Zhb(a,cD(WC(qJ,1),Nve,2,6,[Swe,Twe,Uwe,Vwe,Wwe,Xwe,Ywe])[k]):Zhb(a,cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[k]);break;case 97:e.q.getHours()>=12&&e.q.getHours()<24?Zhb(a,cD(WC(qJ,1),Nve,2,6,['AM','PM'])[1]):Zhb(a,cD(WC(qJ,1),Nve,2,6,['AM','PM'])[0]);break;case 104:l=e.q.getHours()%12;l==0?UA(a,12,c):UA(a,l,c);break;case 75:m=e.q.getHours()%12;UA(a,m,c);break;case 72:n=e.q.getHours();UA(a,n,c);break;case 99:o=d.q.getDay();c==5?Zhb(a,cD(WC(qJ,1),Nve,2,6,['S','M','T','W','T','F','S'])[o]):c==4?Zhb(a,cD(WC(qJ,1),Nve,2,6,[Swe,Twe,Uwe,Vwe,Wwe,Xwe,Ywe])[o]):c==3?Zhb(a,cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[o]):UA(a,o,1);break;case 76:p=d.q.getMonth();c==5?Zhb(a,cD(WC(qJ,1),Nve,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[p]):c==4?Zhb(a,cD(WC(qJ,1),Nve,2,6,[Cwe,Dwe,Ewe,Fwe,Gwe,Hwe,Iwe,Jwe,Kwe,Lwe,Mwe,Nwe])[p]):c==3?Zhb(a,cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[p]):UA(a,p+1,c);break;case 81:q=d.q.getMonth()/3|0;c<4?Zhb(a,cD(WC(qJ,1),Nve,2,6,['Q1','Q2','Q3','Q4'])[q]):Zhb(a,cD(WC(qJ,1),Nve,2,6,['1st quarter','2nd quarter','3rd quarter','4th quarter'])[q]);break;case 100:r=d.q.getDate();UA(a,r,c);break;case 109:j=e.q.getMinutes();UA(a,j,c);break;case 115:g=e.q.getSeconds();UA(a,g,c);break;case 122:c<4?Zhb(a,f.c[0]):Zhb(a,f.c[1]);break;case 118:Zhb(a,f.b);break;case 90:c<3?Zhb(a,cB(f)):c==3?Zhb(a,bB(f)):Zhb(a,eB(f.a));break;default:return false;}return true} -function f5b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;X4b(b);i=RD(QHd((!b.b&&(b.b=new Yie(E4,b,4,7)),b.b),0),84);k=RD(QHd((!b.c&&(b.c=new Yie(E4,b,5,8)),b.c),0),84);h=AGd(i);j=AGd(k);g=(!b.a&&(b.a=new C5d(F4,b,6,6)),b.a).i==0?null:RD(QHd((!b.a&&(b.a=new C5d(F4,b,6,6)),b.a),0),166);A=RD(Wjb(a.a,h),10);F=RD(Wjb(a.a,j),10);B=null;G=null;if(ZD(i,193)){w=RD(Wjb(a.a,i),304);if(ZD(w,12)){B=RD(w,12)}else if(ZD(w,10)){A=RD(w,10);B=RD(Vmb(A.j,0),12)}}if(ZD(k,193)){D=RD(Wjb(a.a,k),304);if(ZD(D,12)){G=RD(D,12)}else if(ZD(D,10)){F=RD(D,10);G=RD(Vmb(F.j,0),12)}}if(!A||!F){throw Adb(new Ked('The source or the target of edge '+b+' could not be found. '+'This usually happens when an edge connects a node laid out by ELK Layered to a node in '+'another level of hierarchy laid out by either another instance of ELK Layered or another '+'layout algorithm alltogether. The former can be solved by setting the hierarchyHandling '+'option to INCLUDE_CHILDREN.'))}p=new a1b;kQb(p,b);pQb(p,(Ywc(),Awc),b);pQb(p,(yCc(),RAc),null);n=RD(mQb(d,kwc),21);A==F&&n.Fc((ovc(),nvc));if(!B){v=(BEc(),zEc);C=null;if(!!g&&Dod(RD(mQb(A,BBc),101))){C=new rjd(g.j,g.k);Fsd(C,kzd(b));Gsd(C,c);if(NGd(j,h)){v=yEc;$id(C,A.n)}}B=g2b(A,C,v,d)}if(!G){v=(BEc(),yEc);H=null;if(!!g&&Dod(RD(mQb(F,BBc),101))){H=new rjd(g.b,g.c);Fsd(H,kzd(b));Gsd(H,c)}G=g2b(F,H,v,Y2b(F))}Y0b(p,B);Z0b(p,G);(B.e.c.length>1||B.g.c.length>1||G.e.c.length>1||G.g.c.length>1)&&n.Fc((ovc(),ivc));for(m=new dMd((!b.n&&(b.n=new C5d(I4,b,1,7)),b.n));m.e!=m.i.gc();){l=RD(bMd(m),135);if(!Heb(TD(Gxd(l,pBc)))&&!!l.a){q=h5b(l);Rmb(p.b,q);switch(RD(mQb(q,wAc),278).g){case 1:case 2:n.Fc((ovc(),gvc));break;case 0:n.Fc((ovc(),evc));pQb(q,wAc,(Omd(),Lmd));}}}f=RD(mQb(d,oAc),322);r=RD(mQb(d,kBc),323);e=f==(stc(),ptc)||r==(JDc(),FDc);if(!!g&&(!g.a&&(g.a=new XZd(D4,g,5)),g.a).i!=0&&e){s=ssd(g);o=new Ejd;for(u=Sub(s,0);u.b!=u.d.c;){t=RD(evb(u),8);Mub(o,new sjd(t))}pQb(p,Bwc,o)}return p} -function F0c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;C=0;D=0;A=new Tsb;v=RD(Lvb(JDb(GDb(new SDb(null,new Swb(a.b,16)),new v1c),new Z0c)),17).a+1;B=$C(kE,Pwe,28,v,15,1);q=$C(kE,Pwe,28,v,15,1);for(p=0;p<v;p++){B[p]=0;q[p]=0}i=RD(zDb(BDb(new SDb(null,new Swb(a.a,16))),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);for(k=i.Kc();k.Ob();){j=RD(k.Pb(),65);G=RD(mQb(j.b,(h_c(),f_c)),17).a;I=RD(mQb(j.c,f_c),17).a;u=I-G;if(u>1){for(h=G+1;h<I;h++){l=h;w=RD(zDb(CDb(new SDb(null,new Swb(a.b,16)),new P1c(l)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);o=0;if(b==(Cmd(),ymd)||b==zmd){w.jd(new V1c);for(o=0;o<w.gc();o++){r=(h-G)/(I-G);if(RD(w.Xb(o),39).e.b>j.b.e.b*(1-r)+j.c.e.b*r){break}}if(w.gc()>0){H=j.a.b==0?ajd(j.b.e):RD(Rub(j.a),8);t=$id(ajd(RD(w.Xb(w.gc()-1),39).e),RD(w.Xb(w.gc()-1),39).f);m=$id(ajd(RD(w.Xb(0),39).e),RD(w.Xb(0),39).f);if(o>=w.gc()-1&&H.b>t.b&&j.c.e.b>t.b){continue}if(o<=0&&H.b<m.a&&j.c.e.b<m.b){continue}}}else{w.jd(new Z1c);for(o=0;o<w.gc();o++){r=(h-G)/(I-G);if(RD(w.Xb(o),39).e.a>j.b.e.a*(1-r)+j.c.e.a*r){break}}if(w.gc()>0){H=j.a.b==0?ajd(j.b.e):RD(Rub(j.a),8);t=$id(ajd(RD(w.Xb(w.gc()-1),39).e),RD(w.Xb(w.gc()-1),39).f);m=$id(ajd(RD(w.Xb(0),39).e),RD(w.Xb(0),39).f);if(o>=w.gc()-1&&H.a>t.a&&j.c.e.a>t.a){continue}if(o<=0&&H.a<m.a&&j.c.e.a<m.a){continue}}}e=new pjd;f=new pjd;Mub(j.a,e);Mub(j.a,f);g=new gud(e,f,j);s=Rdb(Sdb(h,32),Cdb(o,yxe));if(Ujb(A,Hgb(s))){n=RD(Wjb(A,Hgb(s)),675);Mub(n.a,g);Dmd(n.b)?tvb(n.a,new l2c):tvb(n.a,new p2c);h2c(n)}else{n=new i2c(o==0?null:RD(w.Xb(o-1),39),o==w.gc()?null:RD(w.Xb(o),39),g,a);Zjb(A,Hgb(s),n)}if(b==ymd||b==zmd){n.f&&n.d.e.b<=Kfb(UD(mQb(a,(q$c(),_Zc))))&&++C;n.g&&n.c.e.b+n.c.f.b>=Kfb(UD(mQb(a,(q$c(),$Zc))))&&++D}else{n.f&&n.d.e.a<=Kfb(UD(mQb(a,(q$c(),ZZc))))&&++C;n.g&&n.c.e.a+n.c.f.a>=Kfb(UD(mQb(a,(q$c(),YZc))))&&++D}}}else if(u==0){H0c(j)}else if(u<0){++B[G];++q[I];F=C0c(j,b,a,new Ptd(sgb(C),sgb(D)),c,d,new Ptd(sgb(q[I]),sgb(B[G])));C=RD(F.a,17).a;D=RD(F.b,17).a}}} -function qrc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;d=b;i=c;if(a.b&&d.j==(qpd(),ppd)&&i.j==(qpd(),ppd)){s=d;d=i;i=s}if(Ujb(a.a,d)){if(Zsb(RD(Wjb(a.a,d),49),i)){return 1}}else{Zjb(a.a,d,new _sb)}if(Ujb(a.a,i)){if(Zsb(RD(Wjb(a.a,i),49),d)){return -1}}else{Zjb(a.a,i,new _sb)}if(Ujb(a.d,d)){if(Zsb(RD(Wjb(a.d,d),49),i)){return -1}}else{Zjb(a.d,d,new _sb)}if(Ujb(a.d,i)){if(Zsb(RD(Wjb(a.a,i),49),d)){return 1}}else{Zjb(a.d,i,new _sb)}if(d.j!=i.j){r=yrc(d.j,i.j);r==-1?rrc(a,i,d):rrc(a,d,i);return r}if(d.e.c.length!=0&&i.e.c.length!=0){if(a.b){r=orc(d,i);if(r!=0){r==-1?rrc(a,i,d):r==1&&rrc(a,d,i);return r}}f=RD(Vmb(d.e,0),18).c.i;k=RD(Vmb(i.e,0),18).c.i;if(f==k){e=RD(mQb(RD(Vmb(d.e,0),18),(Ywc(),zwc)),17).a;j=RD(mQb(RD(Vmb(i.e,0),18),zwc),17).a;e>j?rrc(a,d,i):rrc(a,i,d);return e<j?-1:e>j?1:0}for(o=a.c,p=0,q=o.length;p<q;++p){n=o[p];if(n==f){rrc(a,d,i);return 1}else if(n==k){rrc(a,i,d);return -1}}}if(d.g.c.length!=0&&i.g.c.length!=0){h=RD(mQb(d,(Ywc(),xwc)),10);m=RD(mQb(i,xwc),10);if(a.e==(kEc(),jEc)&&!!h&&!!m&&nQb(h,zwc)&&nQb(m,zwc)){e=RD(mQb(h,zwc),17).a;j=RD(mQb(m,zwc),17).a;e>j?rrc(a,d,i):rrc(a,i,d);return e<j?-1:e>j?1:0}if(a.b){r=orc(d,i);if(r!=0){r==-1?rrc(a,i,d):r==1&&rrc(a,d,i);return r}}g=0;l=0;nQb(RD(Vmb(d.g,0),18),zwc)&&(g=RD(mQb(RD(Vmb(d.g,0),18),zwc),17).a);nQb(RD(Vmb(i.g,0),18),zwc)&&(l=RD(mQb(RD(Vmb(d.g,0),18),zwc),17).a);if(!!h&&h==m){if(Heb(TD(mQb(RD(Vmb(d.g,0),18),Nwc)))&&!Heb(TD(mQb(RD(Vmb(i.g,0),18),Nwc)))){rrc(a,d,i);return 1}else if(!Heb(TD(mQb(RD(Vmb(d.g,0),18),Nwc)))&&Heb(TD(mQb(RD(Vmb(i.g,0),18),Nwc)))){rrc(a,i,d);return -1}g>l?rrc(a,d,i):rrc(a,i,d);return g<l?-1:g>l?1:0}if(a.f){a.f._b(h)&&(g=RD(a.f.xc(h),17).a);a.f._b(m)&&(l=RD(a.f.xc(m),17).a)}g>l?rrc(a,d,i):rrc(a,i,d);return g<l?-1:g>l?1:0}if(d.e.c.length!=0&&i.g.c.length!=0){rrc(a,d,i);return 1}else if(d.g.c.length!=0&&i.e.c.length!=0){rrc(a,i,d);return -1}else if(nQb(d,(Ywc(),zwc))&&nQb(i,zwc)){e=RD(mQb(d,zwc),17).a;j=RD(mQb(i,zwc),17).a;e>j?rrc(a,d,i):rrc(a,i,d);return e<j?-1:e>j?1:0}else{rrc(a,i,d);return -1}} -function Yae(a){if(a.gb)return;a.gb=true;a.b=jBd(a,0);iBd(a.b,18);oBd(a.b,19);a.a=jBd(a,1);iBd(a.a,1);oBd(a.a,2);oBd(a.a,3);oBd(a.a,4);oBd(a.a,5);a.o=jBd(a,2);iBd(a.o,8);iBd(a.o,9);oBd(a.o,10);oBd(a.o,11);oBd(a.o,12);oBd(a.o,13);oBd(a.o,14);oBd(a.o,15);oBd(a.o,16);oBd(a.o,17);oBd(a.o,18);oBd(a.o,19);oBd(a.o,20);oBd(a.o,21);oBd(a.o,22);oBd(a.o,23);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);a.p=jBd(a,3);iBd(a.p,2);iBd(a.p,3);iBd(a.p,4);iBd(a.p,5);oBd(a.p,6);oBd(a.p,7);nBd(a.p);nBd(a.p);a.q=jBd(a,4);iBd(a.q,8);a.v=jBd(a,5);oBd(a.v,9);nBd(a.v);nBd(a.v);nBd(a.v);a.w=jBd(a,6);iBd(a.w,2);iBd(a.w,3);iBd(a.w,4);oBd(a.w,5);a.B=jBd(a,7);oBd(a.B,1);nBd(a.B);nBd(a.B);nBd(a.B);a.Q=jBd(a,8);oBd(a.Q,0);nBd(a.Q);a.R=jBd(a,9);iBd(a.R,1);a.S=jBd(a,10);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);a.T=jBd(a,11);oBd(a.T,10);oBd(a.T,11);oBd(a.T,12);oBd(a.T,13);oBd(a.T,14);nBd(a.T);nBd(a.T);a.U=jBd(a,12);iBd(a.U,2);iBd(a.U,3);oBd(a.U,4);oBd(a.U,5);oBd(a.U,6);oBd(a.U,7);nBd(a.U);a.V=jBd(a,13);oBd(a.V,10);a.W=jBd(a,14);iBd(a.W,18);iBd(a.W,19);iBd(a.W,20);oBd(a.W,21);oBd(a.W,22);oBd(a.W,23);a.bb=jBd(a,15);iBd(a.bb,10);iBd(a.bb,11);iBd(a.bb,12);iBd(a.bb,13);iBd(a.bb,14);iBd(a.bb,15);iBd(a.bb,16);oBd(a.bb,17);nBd(a.bb);nBd(a.bb);a.eb=jBd(a,16);iBd(a.eb,2);iBd(a.eb,3);iBd(a.eb,4);iBd(a.eb,5);iBd(a.eb,6);iBd(a.eb,7);oBd(a.eb,8);oBd(a.eb,9);a.ab=jBd(a,17);iBd(a.ab,0);iBd(a.ab,1);a.H=jBd(a,18);oBd(a.H,0);oBd(a.H,1);oBd(a.H,2);oBd(a.H,3);oBd(a.H,4);oBd(a.H,5);nBd(a.H);a.db=jBd(a,19);oBd(a.db,2);a.c=kBd(a,20);a.d=kBd(a,21);a.e=kBd(a,22);a.f=kBd(a,23);a.i=kBd(a,24);a.g=kBd(a,25);a.j=kBd(a,26);a.k=kBd(a,27);a.n=kBd(a,28);a.r=kBd(a,29);a.s=kBd(a,30);a.t=kBd(a,31);a.u=kBd(a,32);a.fb=kBd(a,33);a.A=kBd(a,34);a.C=kBd(a,35);a.D=kBd(a,36);a.F=kBd(a,37);a.G=kBd(a,38);a.I=kBd(a,39);a.J=kBd(a,40);a.L=kBd(a,41);a.M=kBd(a,42);a.N=kBd(a,43);a.O=kBd(a,44);a.P=kBd(a,45);a.X=kBd(a,46);a.Y=kBd(a,47);a.Z=kBd(a,48);a.$=kBd(a,49);a._=kBd(a,50);a.cb=kBd(a,51);a.K=kBd(a,52)} -function d5b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;g=new Yub;w=RD(mQb(c,(yCc(),rAc)),88);p=0;ye(g,(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));while(g.b!=0){k=RD(g.b==0?null:(sFb(g.b!=0),Wub(g,g.a.a)),27);j=vCd(k);(dE(Gxd(j,cAc))!==dE((kEc(),hEc))||dE(Gxd(j,pAc))===dE((Ptc(),Otc))||dE(Gxd(j,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(j,eAc)))||dE(Gxd(j,Yzc))!==dE((U$b(),T$b))||dE(Gxd(j,ZAc))===dE((aEc(),TDc))||dE(Gxd(j,ZAc))===dE((aEc(),UDc))||dE(Gxd(j,$Ac))===dE((_Cc(),SCc))||dE(Gxd(j,$Ac))===dE((_Cc(),UCc)))&&!Heb(TD(Gxd(k,aAc)))&&Ixd(k,(Ywc(),zwc),sgb(p++));r=!Heb(TD(Gxd(k,pBc)));if(r){m=(!k.a&&(k.a=new C5d(J4,k,10,11)),k.a).i!=0;o=a5b(k);n=dE(Gxd(k,IAc))===dE((Fnd(),Cnd));G=!Hxd(k,(umd(),Akd))||khb(WD(Gxd(k,Akd)));u=null;if(G&&n&&(m||o)){u=Z4b(k);pQb(u,rAc,w);nQb(u,PBc)&&HCc(new RCc(Kfb(UD(mQb(u,PBc)))),u);if(RD(Gxd(k,lBc),181).gc()!=0){l=u;FDb(new SDb(null,(!k.c&&(k.c=new C5d(K4,k,9,9)),new Swb(k.c,16))),new u5b(l));V4b(k,u)}}A=c;B=RD(Wjb(a.a,vCd(k)),10);!!B&&(A=B.e);t=i5b(a,k,A);if(u){t.e=u;u.e=t;ye(g,(!k.a&&(k.a=new C5d(J4,k,10,11)),k.a))}}}p=0;Pub(g,b,g.c.b,g.c);while(g.b!=0){f=RD(g.b==0?null:(sFb(g.b!=0),Wub(g,g.a.a)),27);for(i=new dMd((!f.b&&(f.b=new C5d(G4,f,12,3)),f.b));i.e!=i.i.gc();){h=RD(bMd(i),74);X4b(h);(dE(Gxd(b,cAc))!==dE((kEc(),hEc))||dE(Gxd(b,pAc))===dE((Ptc(),Otc))||dE(Gxd(b,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(b,eAc)))||dE(Gxd(b,Yzc))!==dE((U$b(),T$b))||dE(Gxd(b,ZAc))===dE((aEc(),TDc))||dE(Gxd(b,ZAc))===dE((aEc(),UDc))||dE(Gxd(b,$Ac))===dE((_Cc(),SCc))||dE(Gxd(b,$Ac))===dE((_Cc(),UCc)))&&Ixd(h,(Ywc(),zwc),sgb(p++));D=AGd(RD(QHd((!h.b&&(h.b=new Yie(E4,h,4,7)),h.b),0),84));F=AGd(RD(QHd((!h.c&&(h.c=new Yie(E4,h,5,8)),h.c),0),84));if(Heb(TD(Gxd(h,pBc)))||Heb(TD(Gxd(D,pBc)))||Heb(TD(Gxd(F,pBc)))){continue}q=ozd(h)&&Heb(TD(Gxd(D,NAc)))&&Heb(TD(Gxd(h,OAc)));v=f;q||NGd(F,D)?(v=D):NGd(D,F)&&(v=F);A=c;B=RD(Wjb(a.a,v),10);!!B&&(A=B.e);s=f5b(a,h,v,A);pQb(s,(Ywc(),Zvc),_4b(a,h,b,c))}n=dE(Gxd(f,IAc))===dE((Fnd(),Cnd));if(n){for(e=new dMd((!f.a&&(f.a=new C5d(J4,f,10,11)),f.a));e.e!=e.i.gc();){d=RD(bMd(e),27);G=!Hxd(d,(umd(),Akd))||khb(WD(Gxd(d,Akd)));C=dE(Gxd(d,IAc))===dE(Cnd);G&&C&&(Pub(g,d,g.c.b,g.c),true)}}}} -function Ywc(){Ywc=geb;var a,b;Awc=new jGd(rAe);Zvc=new jGd('coordinateOrigin');Kwc=new jGd('processors');Yvc=new kGd('compoundNode',(Geb(),false));nwc=new kGd('insideConnections',false);Bwc=new jGd('originalBendpoints');Cwc=new jGd('originalDummyNodePosition');Dwc=new jGd('originalLabelEdge');Mwc=new jGd('representedLabels');cwc=new jGd('endLabels');dwc=new jGd('endLabel.origin');swc=new kGd('labelSide',(Pnd(),Ond));ywc=new kGd('maxEdgeThickness',0);Nwc=new kGd('reversed',false);Lwc=new jGd(sAe);vwc=new kGd('longEdgeSource',null);wwc=new kGd('longEdgeTarget',null);uwc=new kGd('longEdgeHasLabelDummies',false);twc=new kGd('longEdgeBeforeLabelDummy',false);bwc=new kGd('edgeConstraint',(huc(),fuc));pwc=new jGd('inLayerLayoutUnit');owc=new kGd('inLayerConstraint',(Gvc(),Evc));qwc=new kGd('inLayerSuccessorConstraint',new bnb);rwc=new kGd('inLayerSuccessorConstraintBetweenNonDummies',false);Iwc=new jGd('portDummy');$vc=new kGd('crossingHint',sgb(0));kwc=new kGd('graphProperties',(b=RD(mfb(iX),9),new Fsb(b,RD(WEb(b,b.length),9),0)));hwc=new kGd('externalPortSide',(qpd(),opd));iwc=new kGd('externalPortSize',new pjd);fwc=new jGd('externalPortReplacedDummies');gwc=new jGd('externalPortReplacedDummy');ewc=new kGd('externalPortConnections',(a=RD(mfb(E3),9),new Fsb(a,RD(WEb(a,a.length),9),0)));Jwc=new kGd(Xye,0);Uvc=new jGd('barycenterAssociates');Xwc=new jGd('TopSideComments');Vvc=new jGd('BottomSideComments');Xvc=new jGd('CommentConnectionPort');mwc=new kGd('inputCollect',false);Gwc=new kGd('outputCollect',false);awc=new kGd('cyclic',false);_vc=new jGd('crossHierarchyMap');Wwc=new jGd('targetOffset');new kGd('splineLabelSize',new pjd);Qwc=new jGd('spacings');Hwc=new kGd('partitionConstraint',false);Wvc=new jGd('breakingPoint.info');Uwc=new jGd('splines.survivingEdge');Twc=new jGd('splines.route.start');Rwc=new jGd('splines.edgeChain');Fwc=new jGd('originalPortConstraints');Pwc=new jGd('selfLoopHolder');Swc=new jGd('splines.nsPortY');zwc=new jGd('modelOrder');xwc=new jGd('longEdgeTargetNode');jwc=new kGd(GBe,false);Owc=new kGd(GBe,false);lwc=new jGd('layerConstraints.hiddenNodes');Ewc=new jGd('layerConstraints.opposidePort');Vwc=new jGd('targetNode.modelOrder')} -function D0c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;for(l=Sub(a.b,0);l.b!=l.d.c;){k=RD(evb(l),39);if(lhb(k.c,IEe)){continue}f=RD(zDb(new SDb(null,new Swb(hWc(k,a),16)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);b==(Cmd(),ymd)||b==zmd?f.jd(new L1c):f.jd(new R1c);o=f.gc();for(e=0;e<o;e++){g=o==1?0.5:(1+e)/(o+1);if(b==ymd){j=Kfb(UD(mQb(k,(q$c(),e$c))));if(k.e.a+k.f.a+d<j){Oub(RD(f.Xb(e),65).a,new rjd(j+c,k.e.b+k.f.b*g))}else if(RD(f.Xb(e),65).a.b>0){h=RD(Rub(RD(f.Xb(e),65).a),8).a;m=k.e.a+k.f.a/2;i=RD(Rub(RD(f.Xb(e),65).a),8).b;n=k.e.b+k.f.b/2;d>0&&$wnd.Math.abs(i-n)/($wnd.Math.abs(h-m)/40)>50&&(n>i?Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a+d/5.3,k.e.b+k.f.b*g-d/2)):Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a+d/5.3,k.e.b+k.f.b*g+d/2)))}Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a,k.e.b+k.f.b*g))}else if(b==zmd){j=Kfb(UD(mQb(k,(q$c(),f$c))));if(k.e.a-d>j){Oub(RD(f.Xb(e),65).a,new rjd(j-c,k.e.b+k.f.b*g))}else if(RD(f.Xb(e),65).a.b>0){h=RD(Rub(RD(f.Xb(e),65).a),8).a;m=k.e.a+k.f.a/2;i=RD(Rub(RD(f.Xb(e),65).a),8).b;n=k.e.b+k.f.b/2;d>0&&$wnd.Math.abs(i-n)/($wnd.Math.abs(h-m)/40)>50&&(n>i?Oub(RD(f.Xb(e),65).a,new rjd(k.e.a-d/5.3,k.e.b+k.f.b*g-d/2)):Oub(RD(f.Xb(e),65).a,new rjd(k.e.a-d/5.3,k.e.b+k.f.b*g+d/2)))}Oub(RD(f.Xb(e),65).a,new rjd(k.e.a,k.e.b+k.f.b*g))}else if(b==Bmd){j=Kfb(UD(mQb(k,(q$c(),e$c))));if(k.e.b+k.f.b+d<j){Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,j+c))}else if(RD(f.Xb(e),65).a.b>0){h=RD(Rub(RD(f.Xb(e),65).a),8).a;m=k.e.a+k.f.a/2;i=RD(Rub(RD(f.Xb(e),65).a),8).b;n=k.e.b+k.f.b/2;d>0&&$wnd.Math.abs(h-m)/($wnd.Math.abs(i-n)/40)>50&&(m>h?Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g-d/2,k.e.b+d/5.3+k.f.b)):Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g+d/2,k.e.b+d/5.3+k.f.b)))}Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,k.e.b+k.f.b))}else{j=Kfb(UD(mQb(k,(q$c(),f$c))));if(mWc(RD(f.Xb(e),65),a)){Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,RD(Rub(RD(f.Xb(e),65).a),8).b))}else if(k.e.b-d>j){Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,j-c))}else if(RD(f.Xb(e),65).a.b>0){h=RD(Rub(RD(f.Xb(e),65).a),8).a;m=k.e.a+k.f.a/2;i=RD(Rub(RD(f.Xb(e),65).a),8).b;n=k.e.b+k.f.b/2;d>0&&$wnd.Math.abs(h-m)/($wnd.Math.abs(i-n)/40)>50&&(m>h?Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g-d/2,k.e.b-d/5.3)):Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g+d/2,k.e.b-d/5.3)))}Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,k.e.b))}}}} -function umd(){umd=geb;var a,b;Akd=new jGd(OGe);Tld=new jGd(PGe);Ckd=(Rjd(),Ljd);Bkd=new lGd(MDe,Ckd);new Xsd;Dkd=new lGd(Dze,null);Ekd=new jGd(QGe);Lkd=(ukd(),ysb(tkd,cD(WC(q3,1),jwe,297,0,[pkd])));Kkd=new lGd(YDe,Lkd);Mkd=new lGd(LDe,(Geb(),false));Okd=(Cmd(),Amd);Nkd=new lGd(PDe,Okd);Tkd=(Ymd(),Xmd);Skd=new lGd(kDe,Tkd);Wkd=new lGd(MGe,false);Ykd=(Fnd(),Dnd);Xkd=new lGd(fDe,Ykd);uld=new A3b(12);tld=new lGd(Eze,uld);ald=new lGd(dAe,false);bld=new lGd(iEe,false);sld=new lGd(gAe,false);Ild=(Bod(),Aod);Hld=new lGd(eAe,Ild);Qld=new jGd(fEe);Rld=new jGd($ze);Sld=new jGd(bAe);Vld=new jGd(cAe);dld=new Ejd;cld=new lGd(ZDe,dld);Jkd=new lGd(aEe,false);Zkd=new lGd(bEe,false);new jGd(RGe);fld=new P2b;eld=new lGd(gEe,fld);rld=new lGd(JDe,false);new Xsd;Uld=new lGd(SGe,1);Ikd=new jGd(TGe);Hkd=new jGd(UGe);mmd=new lGd(mAe,false);new lGd(VGe,true);sgb(0);new lGd(WGe,sgb(100));new lGd(XGe,false);sgb(0);new lGd(YGe,sgb(4000));sgb(0);new lGd(ZGe,sgb(400));new lGd($Ge,false);new lGd(_Ge,false);new lGd(aHe,true);new lGd(bHe,false);Gkd=(Grd(),Frd);Fkd=new lGd(NGe,Gkd);Wld=new lGd(xDe,10);Xld=new lGd(yDe,10);Yld=new lGd(Bze,20);Zld=new lGd(zDe,10);$ld=new lGd(aAe,2);_ld=new lGd(ADe,10);bmd=new lGd(BDe,0);cmd=new lGd(EDe,5);dmd=new lGd(CDe,1);emd=new lGd(DDe,1);fmd=new lGd(_ze,20);gmd=new lGd(FDe,10);jmd=new lGd(GDe,10);amd=new jGd(HDe);imd=new Q2b;hmd=new lGd(hEe,imd);xld=new jGd(eEe);wld=false;vld=new lGd(dEe,wld);hld=new A3b(5);gld=new lGd(QDe,hld);jld=(dod(),b=RD(mfb(A3),9),new Fsb(b,RD(WEb(b,b.length),9),0));ild=new lGd(kAe,jld);Ald=(pod(),mod);zld=new lGd(TDe,Ald);Cld=new jGd(UDe);Dld=new jGd(VDe);Eld=new jGd(WDe);Bld=new jGd(XDe);lld=(a=RD(mfb(H3),9),new Fsb(a,RD(WEb(a,a.length),9),0));kld=new lGd(jAe,lld);qld=xsb((dqd(),Ypd));pld=new lGd(iAe,qld);old=new rjd(0,0);nld=new lGd(CAe,old);mld=new lGd(hAe,false);Rkd=(Omd(),Lmd);Qkd=new lGd($De,Rkd);Pkd=new lGd(fAe,false);new jGd(cHe);sgb(1);new lGd(dHe,null);Fld=new jGd(cEe);Jld=new jGd(_De);Pld=(qpd(),opd);Old=new lGd(KDe,Pld);Gld=new jGd(IDe);Mld=(Pod(),xsb(Nod));Lld=new lGd(lAe,Mld);Kld=new lGd(RDe,false);Nld=new lGd(SDe,true);new Xsd;qmd=new lGd(nAe,1);smd=new lGd(eHe,null);lmd=new lGd(oAe,150);kmd=new lGd(pAe,1.414);nmd=new lGd(qAe,null);omd=new lGd(fHe,1);$kd=new lGd(NDe,false);_kd=new lGd(ODe,false);Ukd=new lGd(Cze,1);Vkd=(ind(),gnd);new lGd(gHe,Vkd);yld=true;rmd=(mqd(),jqd);tmd=jqd;pmd=jqd} -function hcc(){hcc=geb;nbc=new icc('DIRECTION_PREPROCESSOR',0);kbc=new icc('COMMENT_PREPROCESSOR',1);obc=new icc('EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER',2);Ebc=new icc('INTERACTIVE_EXTERNAL_PORT_POSITIONER',3);Xbc=new icc('PARTITION_PREPROCESSOR',4);Ibc=new icc('LABEL_DUMMY_INSERTER',5);bcc=new icc('SELF_LOOP_PREPROCESSOR',6);Nbc=new icc('LAYER_CONSTRAINT_PREPROCESSOR',7);Vbc=new icc('PARTITION_MIDPROCESSOR',8);zbc=new icc('HIGH_DEGREE_NODE_LAYER_PROCESSOR',9);Rbc=new icc('NODE_PROMOTION',10);Mbc=new icc('LAYER_CONSTRAINT_POSTPROCESSOR',11);Wbc=new icc('PARTITION_POSTPROCESSOR',12);vbc=new icc('HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR',13);dcc=new icc('SEMI_INTERACTIVE_CROSSMIN_PROCESSOR',14);ebc=new icc('BREAKING_POINT_INSERTER',15);Qbc=new icc('LONG_EDGE_SPLITTER',16);Zbc=new icc('PORT_SIDE_PROCESSOR',17);Fbc=new icc('INVERTED_PORT_PROCESSOR',18);Ybc=new icc('PORT_LIST_SORTER',19);fcc=new icc('SORT_BY_INPUT_ORDER_OF_MODEL',20);Tbc=new icc('NORTH_SOUTH_PORT_PREPROCESSOR',21);fbc=new icc('BREAKING_POINT_PROCESSOR',22);Ubc=new icc(jBe,23);gcc=new icc(kBe,24);_bc=new icc('SELF_LOOP_PORT_RESTORER',25);ecc=new icc('SINGLE_EDGE_GRAPH_WRAPPER',26);Gbc=new icc('IN_LAYER_CONSTRAINT_PROCESSOR',27);sbc=new icc('END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR',28);Hbc=new icc('LABEL_AND_NODE_SIZE_PROCESSOR',29);Dbc=new icc('INNERMOST_NODE_MARGIN_CALCULATOR',30);ccc=new icc('SELF_LOOP_ROUTER',31);ibc=new icc('COMMENT_NODE_MARGIN_CALCULATOR',32);qbc=new icc('END_LABEL_PREPROCESSOR',33);Kbc=new icc('LABEL_DUMMY_SWITCHER',34);hbc=new icc('CENTER_LABEL_MANAGEMENT_PROCESSOR',35);Lbc=new icc('LABEL_SIDE_SELECTOR',36);Bbc=new icc('HYPEREDGE_DUMMY_MERGER',37);wbc=new icc('HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR',38);Obc=new icc('LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR',39);ybc=new icc('HIERARCHICAL_PORT_POSITION_PROCESSOR',40);lbc=new icc('CONSTRAINTS_POSTPROCESSOR',41);jbc=new icc('COMMENT_POSTPROCESSOR',42);Cbc=new icc('HYPERNODE_PROCESSOR',43);xbc=new icc('HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER',44);Pbc=new icc('LONG_EDGE_JOINER',45);acc=new icc('SELF_LOOP_POSTPROCESSOR',46);gbc=new icc('BREAKING_POINT_REMOVER',47);Sbc=new icc('NORTH_SOUTH_PORT_POSTPROCESSOR',48);Abc=new icc('HORIZONTAL_COMPACTOR',49);Jbc=new icc('LABEL_DUMMY_REMOVER',50);tbc=new icc('FINAL_SPLINE_BENDPOINTS_CALCULATOR',51);rbc=new icc('END_LABEL_SORTER',52);$bc=new icc('REVERSED_EDGE_RESTORER',53);pbc=new icc('END_LABEL_POSTPROCESSOR',54);ubc=new icc('HIERARCHICAL_NODE_RESIZER',55);mbc=new icc('DIRECTION_POSTPROCESSOR',56)} -function Ozc(){Ozc=geb;Uxc=($tc(),Ytc);Txc=new lGd(HBe,Uxc);jyc=new lGd(IBe,(Geb(),false));pyc=(Ovc(),Mvc);oyc=new lGd(JBe,pyc);Hyc=new lGd(KBe,false);Iyc=new lGd(LBe,true);ixc=new lGd(MBe,false);azc=(sEc(),qEc);_yc=new lGd(NBe,azc);sgb(1);izc=new lGd(OBe,sgb(7));jzc=new lGd(PBe,false);kyc=new lGd(QBe,false);Sxc=(Ptc(),Ltc);Rxc=new lGd(RBe,Sxc);Gyc=(_Cc(),ZCc);Fyc=new lGd(SBe,Gyc);wyc=(cxc(),bxc);vyc=new lGd(TBe,wyc);sgb(-1);uyc=new lGd(UBe,null);sgb(-1);xyc=new lGd(VBe,sgb(-1));sgb(-1);yyc=new lGd(WBe,sgb(4));sgb(-1);Ayc=new lGd(XBe,sgb(2));Eyc=(aEc(),$Dc);Dyc=new lGd(YBe,Eyc);sgb(0);Cyc=new lGd(ZBe,sgb(0));syc=new lGd($Be,sgb(lve));Qxc=(stc(),qtc);Pxc=new lGd(_Be,Qxc);yxc=new lGd(aCe,false);Hxc=new lGd(bCe,0.1);Nxc=new lGd(cCe,false);Jxc=new lGd(dCe,null);Kxc=new lGd(eCe,null);sgb(-1);Lxc=new lGd(fCe,null);sgb(-1);Mxc=new lGd(gCe,sgb(-1));sgb(0);zxc=new lGd(hCe,sgb(40));Fxc=(xvc(),wvc);Exc=new lGd(iCe,Fxc);Bxc=uvc;Axc=new lGd(jCe,Bxc);$yc=(JDc(),EDc);Zyc=new lGd(kCe,$yc);Pyc=new jGd(lCe);Kyc=(Cuc(),Auc);Jyc=new lGd(mCe,Kyc);Nyc=(Ouc(),Luc);Myc=new lGd(nCe,Nyc);new Xsd;Syc=new lGd(oCe,0.3);Uyc=new jGd(pCe);Wyc=(wDc(),uDc);Vyc=new lGd(qCe,Wyc);ayc=(KEc(),IEc);_xc=new lGd(rCe,ayc);cyc=(TEc(),SEc);byc=new lGd(sCe,cyc);eyc=(lFc(),kFc);dyc=new lGd(tCe,eyc);gyc=new lGd(uCe,0.2);Zxc=new lGd(vCe,2);ezc=new lGd(wCe,null);gzc=new lGd(xCe,10);fzc=new lGd(yCe,10);hzc=new lGd(zCe,20);sgb(0);bzc=new lGd(ACe,sgb(0));sgb(0);czc=new lGd(BCe,sgb(0));sgb(0);dzc=new lGd(CCe,sgb(0));jxc=new lGd(DCe,false);nxc=($uc(),Yuc);mxc=new lGd(ECe,nxc);lxc=(jtc(),itc);kxc=new lGd(FCe,lxc);myc=new lGd(GCe,false);sgb(0);lyc=new lGd(HCe,sgb(16));sgb(0);nyc=new lGd(ICe,sgb(5));Gzc=(DFc(),BFc);Fzc=new lGd(JCe,Gzc);kzc=new lGd(KCe,10);nzc=new lGd(LCe,1);wzc=(Etc(),Dtc);vzc=new lGd(MCe,wzc);qzc=new jGd(NCe);tzc=sgb(1);sgb(0);szc=new lGd(OCe,tzc);Lzc=(uFc(),rFc);Kzc=new lGd(PCe,Lzc);Hzc=new jGd(QCe);Bzc=new lGd(RCe,true);zzc=new lGd(SCe,2);Dzc=new lGd(TCe,true);Yxc=(tuc(),ruc);Xxc=new lGd(UCe,Yxc);Wxc=(btc(),Zsc);Vxc=new lGd(VCe,Wxc);xxc=(kEc(),hEc);wxc=new lGd(WCe,xxc);vxc=new lGd(XCe,false);uxc=new lGd(YCe,false);pxc=(U$b(),T$b);oxc=new lGd(ZCe,pxc);txc=(lDc(),iDc);sxc=new lGd($Ce,txc);qxc=new lGd(_Ce,0);rxc=new lGd(aDe,0);ryc=Ntc;qyc=ptc;zyc=YCc;Byc=YCc;tyc=TCc;Ixc=(Fnd(),Cnd);Oxc=qtc;Gxc=qtc;Cxc=qtc;Dxc=Cnd;Qyc=HDc;Ryc=EDc;Lyc=EDc;Oyc=EDc;Tyc=GDc;Yyc=HDc;Xyc=HDc;fyc=(Ymd(),Wmd);hyc=Wmd;iyc=kFc;$xc=Vmd;lzc=CFc;mzc=AFc;ozc=CFc;pzc=AFc;xzc=CFc;yzc=AFc;rzc=Ctc;uzc=Dtc;Mzc=CFc;Nzc=AFc;Izc=CFc;Jzc=AFc;Czc=AFc;Azc=AFc;Ezc=AFc} -function iNc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb;cb=0;for(H=b,K=0,N=H.length;K<N;++K){F=H[K];for(V=new Anb(F.j);V.a<V.c.c.length;){U=RD(ynb(V),12);X=0;for(h=new Anb(U.g);h.a<h.c.c.length;){g=RD(ynb(h),18);F.c!=g.d.i.c&&++X}X>0&&(a.a[U.p]=cb++)}}hb=0;for(I=c,L=0,O=I.length;L<O;++L){F=I[L];P=0;for(V=new Anb(F.j);V.a<V.c.c.length;){U=RD(ynb(V),12);if(U.j==(qpd(),Yod)){for(h=new Anb(U.e);h.a<h.c.c.length;){g=RD(ynb(h),18);if(F.c!=g.c.i.c){++P;break}}}else{break}}R=0;Y=new Jkb(F.j,F.j.c.length);while(Y.b>0){U=(sFb(Y.b>0),RD(Y.a.Xb(Y.c=--Y.b),12));X=0;for(h=new Anb(U.e);h.a<h.c.c.length;){g=RD(ynb(h),18);F.c!=g.c.i.c&&++X}if(X>0){if(U.j==(qpd(),Yod)){a.a[U.p]=hb;++hb}else{a.a[U.p]=hb+P+R;++R}}}hb+=R}W=new Tsb;o=new Iub;for(G=b,J=0,M=G.length;J<M;++J){F=G[J];for(fb=new Anb(F.j);fb.a<fb.c.c.length;){eb=RD(ynb(fb),12);for(h=new Anb(eb.g);h.a<h.c.c.length;){g=RD(ynb(h),18);jb=g.d;if(F.c!=jb.i.c){db=RD(Wd(qtb(W.f,eb)),477);ib=RD(Wd(qtb(W.f,jb)),477);if(!db&&!ib){n=new lNc;o.a.zc(n,o);Rmb(n.a,g);Rmb(n.d,eb);rtb(W.f,eb,n);Rmb(n.d,jb);rtb(W.f,jb,n)}else if(!db){Rmb(ib.a,g);Rmb(ib.d,eb);rtb(W.f,eb,ib)}else if(!ib){Rmb(db.a,g);Rmb(db.d,jb);rtb(W.f,jb,db)}else if(db==ib){Rmb(db.a,g)}else{Rmb(db.a,g);for(T=new Anb(ib.d);T.a<T.c.c.length;){S=RD(ynb(T),12);rtb(W.f,S,db)}Tmb(db.a,ib.a);Tmb(db.d,ib.d);o.a.Bc(ib)!=null}}}}}p=RD(Ee(o,$C(OY,{3:1,4:1,5:1,2045:1},477,o.a.gc(),0,1)),2045);D=b[0].c;bb=c[0].c;for(k=p,l=0,m=k.length;l<m;++l){j=k[l];j.e=cb;j.f=hb;for(V=new Anb(j.d);V.a<V.c.c.length;){U=RD(ynb(V),12);Z=a.a[U.p];if(U.i.c==D){Z<j.e&&(j.e=Z);Z>j.b&&(j.b=Z)}else if(U.i.c==bb){Z<j.f&&(j.f=Z);Z>j.c&&(j.c=Z)}}}Wnb(p,0,p.length,null);gb=$C(kE,Pwe,28,p.length,15,1);d=$C(kE,Pwe,28,hb+1,15,1);for(r=0;r<p.length;r++){gb[r]=p[r].f;d[gb[r]]=1}f=0;for(s=0;s<d.length;s++){d[s]==1?(d[s]=f):--f}$=0;for(t=0;t<gb.length;t++){gb[t]+=d[gb[t]];$=$wnd.Math.max($,gb[t]+1)}i=1;while(i<$){i*=2}lb=2*i-1;i-=1;kb=$C(kE,Pwe,28,lb,15,1);e=0;for(B=0;B<gb.length;B++){A=gb[B]+i;++kb[A];while(A>0){A%2>0&&(e+=kb[A+1]);A=(A-1)/2|0;++kb[A]}}C=$C(NY,rve,374,p.length*2,0,1);for(u=0;u<p.length;u++){C[2*u]=new oNc(p[u],p[u].e,p[u].b,(sNc(),rNc));C[2*u+1]=new oNc(p[u],p[u].b,p[u].e,qNc)}Wnb(C,0,C.length,null);Q=0;for(v=0;v<C.length;v++){switch(C[v].d.g){case 0:++Q;break;case 1:--Q;e+=Q;}}ab=$C(NY,rve,374,p.length*2,0,1);for(w=0;w<p.length;w++){ab[2*w]=new oNc(p[w],p[w].f,p[w].c,(sNc(),rNc));ab[2*w+1]=new oNc(p[w],p[w].c,p[w].f,qNc)}Wnb(ab,0,ab.length,null);Q=0;for(q=0;q<ab.length;q++){switch(ab[q].d.g){case 0:++Q;break;case 1:--Q;e+=Q;}}return e} -function Vse(){Vse=geb;Ese=new Wse(7);Gse=(++Use,new Hte(8,94));++Use;new Hte(8,64);Hse=(++Use,new Hte(8,36));Nse=(++Use,new Hte(8,65));Ose=(++Use,new Hte(8,122));Pse=(++Use,new Hte(8,90));Sse=(++Use,new Hte(8,98));Lse=(++Use,new Hte(8,66));Qse=(++Use,new Hte(8,60));Tse=(++Use,new Hte(8,62));Dse=new Wse(11);Bse=(++Use,new xte(4));rte(Bse,48,57);Rse=(++Use,new xte(4));rte(Rse,48,57);rte(Rse,65,90);rte(Rse,95,95);rte(Rse,97,122);Mse=(++Use,new xte(4));rte(Mse,9,9);rte(Mse,10,10);rte(Mse,12,12);rte(Mse,13,13);rte(Mse,32,32);Ise=yte(Bse);Kse=yte(Rse);Jse=yte(Mse);wse=new Tsb;xse=new Tsb;yse=cD(WC(qJ,1),Nve,2,6,['Cn','Lu','Ll','Lt','Lm','Lo','Mn','Me','Mc','Nd','Nl','No','Zs','Zl','Zp','Cc','Cf',null,'Co','Cs','Pd','Ps','Pe','Pc','Po','Sm','Sc','Sk','So','Pi','Pf','L','M','N','Z','C','P','S']);vse=cD(WC(qJ,1),Nve,2,6,['Basic Latin','Latin-1 Supplement','Latin Extended-A','Latin Extended-B','IPA Extensions','Spacing Modifier Letters','Combining Diacritical Marks','Greek','Cyrillic','Armenian','Hebrew','Arabic','Syriac','Thaana','Devanagari','Bengali','Gurmukhi','Gujarati','Oriya','Tamil','Telugu','Kannada','Malayalam','Sinhala','Thai','Lao','Tibetan','Myanmar','Georgian','Hangul Jamo','Ethiopic','Cherokee','Unified Canadian Aboriginal Syllabics','Ogham','Runic','Khmer','Mongolian','Latin Extended Additional','Greek Extended','General Punctuation','Superscripts and Subscripts','Currency Symbols','Combining Marks for Symbols','Letterlike Symbols','Number Forms','Arrows','Mathematical Operators','Miscellaneous Technical','Control Pictures','Optical Character Recognition','Enclosed Alphanumerics','Box Drawing','Block Elements','Geometric Shapes','Miscellaneous Symbols','Dingbats','Braille Patterns','CJK Radicals Supplement','Kangxi Radicals','Ideographic Description Characters','CJK Symbols and Punctuation','Hiragana','Katakana','Bopomofo','Hangul Compatibility Jamo','Kanbun','Bopomofo Extended','Enclosed CJK Letters and Months','CJK Compatibility','CJK Unified Ideographs Extension A','CJK Unified Ideographs','Yi Syllables','Yi Radicals','Hangul Syllables',VLe,'CJK Compatibility Ideographs','Alphabetic Presentation Forms','Arabic Presentation Forms-A','Combining Half Marks','CJK Compatibility Forms','Small Form Variants','Arabic Presentation Forms-B','Specials','Halfwidth and Fullwidth Forms','Old Italic','Gothic','Deseret','Byzantine Musical Symbols','Musical Symbols','Mathematical Alphanumeric Symbols','CJK Unified Ideographs Extension B','CJK Compatibility Ideographs Supplement','Tags']);zse=cD(WC(kE,1),Pwe,28,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])} -function hMb(){hMb=geb;eMb=new kMb('OUT_T_L',0,(EKb(),CKb),(vLb(),sLb),(ZJb(),WJb),WJb,cD(WC(bL,1),rve,21,0,[ysb((dod(),_nd),cD(WC(A3,1),jwe,95,0,[cod,Xnd]))]));dMb=new kMb('OUT_T_C',1,BKb,sLb,WJb,XJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[cod,Wnd])),ysb(_nd,cD(WC(A3,1),jwe,95,0,[cod,Wnd,Ynd]))]));fMb=new kMb('OUT_T_R',2,DKb,sLb,WJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[cod,Znd]))]));XLb=new kMb('OUT_B_L',3,CKb,uLb,YJb,WJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[aod,Xnd]))]));WLb=new kMb('OUT_B_C',4,BKb,uLb,YJb,XJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[aod,Wnd])),ysb(_nd,cD(WC(A3,1),jwe,95,0,[aod,Wnd,Ynd]))]));YLb=new kMb('OUT_B_R',5,DKb,uLb,YJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[aod,Znd]))]));_Lb=new kMb('OUT_L_T',6,DKb,uLb,WJb,WJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Xnd,cod,Ynd]))]));$Lb=new kMb('OUT_L_C',7,DKb,tLb,XJb,WJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Xnd,bod])),ysb(_nd,cD(WC(A3,1),jwe,95,0,[Xnd,bod,Ynd]))]));ZLb=new kMb('OUT_L_B',8,DKb,sLb,YJb,WJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Xnd,aod,Ynd]))]));cMb=new kMb('OUT_R_T',9,CKb,uLb,WJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Znd,cod,Ynd]))]));bMb=new kMb('OUT_R_C',10,CKb,tLb,XJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Znd,bod])),ysb(_nd,cD(WC(A3,1),jwe,95,0,[Znd,bod,Ynd]))]));aMb=new kMb('OUT_R_B',11,CKb,sLb,YJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Znd,aod,Ynd]))]));ULb=new kMb('IN_T_L',12,CKb,uLb,WJb,WJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Xnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Xnd,Ynd]))]));TLb=new kMb('IN_T_C',13,BKb,uLb,WJb,XJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Wnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Wnd,Ynd]))]));VLb=new kMb('IN_T_R',14,DKb,uLb,WJb,YJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Znd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Znd,Ynd]))]));RLb=new kMb('IN_C_L',15,CKb,tLb,XJb,WJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Xnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Xnd,Ynd]))]));QLb=new kMb('IN_C_C',16,BKb,tLb,XJb,XJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Wnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Wnd,Ynd]))]));SLb=new kMb('IN_C_R',17,DKb,tLb,XJb,YJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Znd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Znd,Ynd]))]));OLb=new kMb('IN_B_L',18,CKb,sLb,YJb,WJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Xnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Xnd,Ynd]))]));NLb=new kMb('IN_B_C',19,BKb,sLb,YJb,XJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Wnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Wnd,Ynd]))]));PLb=new kMb('IN_B_R',20,DKb,sLb,YJb,YJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Znd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Znd,Ynd]))]));gMb=new kMb(Sye,21,null,null,null,null,cD(WC(bL,1),rve,21,0,[]))} -function JTd(){JTd=geb;nTd=(lTd(),kTd).b;RD(QHd(xYd(kTd.b),0),35);RD(QHd(xYd(kTd.b),1),19);mTd=kTd.a;RD(QHd(xYd(kTd.a),0),35);RD(QHd(xYd(kTd.a),1),19);RD(QHd(xYd(kTd.a),2),19);RD(QHd(xYd(kTd.a),3),19);RD(QHd(xYd(kTd.a),4),19);oTd=kTd.o;RD(QHd(xYd(kTd.o),0),35);RD(QHd(xYd(kTd.o),1),35);qTd=RD(QHd(xYd(kTd.o),2),19);RD(QHd(xYd(kTd.o),3),19);RD(QHd(xYd(kTd.o),4),19);RD(QHd(xYd(kTd.o),5),19);RD(QHd(xYd(kTd.o),6),19);RD(QHd(xYd(kTd.o),7),19);RD(QHd(xYd(kTd.o),8),19);RD(QHd(xYd(kTd.o),9),19);RD(QHd(xYd(kTd.o),10),19);RD(QHd(xYd(kTd.o),11),19);RD(QHd(xYd(kTd.o),12),19);RD(QHd(xYd(kTd.o),13),19);RD(QHd(xYd(kTd.o),14),19);RD(QHd(xYd(kTd.o),15),19);RD(QHd(uYd(kTd.o),0),62);RD(QHd(uYd(kTd.o),1),62);RD(QHd(uYd(kTd.o),2),62);RD(QHd(uYd(kTd.o),3),62);RD(QHd(uYd(kTd.o),4),62);RD(QHd(uYd(kTd.o),5),62);RD(QHd(uYd(kTd.o),6),62);RD(QHd(uYd(kTd.o),7),62);RD(QHd(uYd(kTd.o),8),62);RD(QHd(uYd(kTd.o),9),62);pTd=kTd.p;RD(QHd(xYd(kTd.p),0),35);RD(QHd(xYd(kTd.p),1),35);RD(QHd(xYd(kTd.p),2),35);RD(QHd(xYd(kTd.p),3),35);RD(QHd(xYd(kTd.p),4),19);RD(QHd(xYd(kTd.p),5),19);RD(QHd(uYd(kTd.p),0),62);RD(QHd(uYd(kTd.p),1),62);rTd=kTd.q;RD(QHd(xYd(kTd.q),0),35);sTd=kTd.v;RD(QHd(xYd(kTd.v),0),19);RD(QHd(uYd(kTd.v),0),62);RD(QHd(uYd(kTd.v),1),62);RD(QHd(uYd(kTd.v),2),62);tTd=kTd.w;RD(QHd(xYd(kTd.w),0),35);RD(QHd(xYd(kTd.w),1),35);RD(QHd(xYd(kTd.w),2),35);RD(QHd(xYd(kTd.w),3),19);uTd=kTd.B;RD(QHd(xYd(kTd.B),0),19);RD(QHd(uYd(kTd.B),0),62);RD(QHd(uYd(kTd.B),1),62);RD(QHd(uYd(kTd.B),2),62);xTd=kTd.Q;RD(QHd(xYd(kTd.Q),0),19);RD(QHd(uYd(kTd.Q),0),62);yTd=kTd.R;RD(QHd(xYd(kTd.R),0),35);zTd=kTd.S;RD(QHd(uYd(kTd.S),0),62);RD(QHd(uYd(kTd.S),1),62);RD(QHd(uYd(kTd.S),2),62);RD(QHd(uYd(kTd.S),3),62);RD(QHd(uYd(kTd.S),4),62);RD(QHd(uYd(kTd.S),5),62);RD(QHd(uYd(kTd.S),6),62);RD(QHd(uYd(kTd.S),7),62);RD(QHd(uYd(kTd.S),8),62);RD(QHd(uYd(kTd.S),9),62);RD(QHd(uYd(kTd.S),10),62);RD(QHd(uYd(kTd.S),11),62);RD(QHd(uYd(kTd.S),12),62);RD(QHd(uYd(kTd.S),13),62);RD(QHd(uYd(kTd.S),14),62);ATd=kTd.T;RD(QHd(xYd(kTd.T),0),19);RD(QHd(xYd(kTd.T),2),19);BTd=RD(QHd(xYd(kTd.T),3),19);RD(QHd(xYd(kTd.T),4),19);RD(QHd(uYd(kTd.T),0),62);RD(QHd(uYd(kTd.T),1),62);RD(QHd(xYd(kTd.T),1),19);CTd=kTd.U;RD(QHd(xYd(kTd.U),0),35);RD(QHd(xYd(kTd.U),1),35);RD(QHd(xYd(kTd.U),2),19);RD(QHd(xYd(kTd.U),3),19);RD(QHd(xYd(kTd.U),4),19);RD(QHd(xYd(kTd.U),5),19);RD(QHd(uYd(kTd.U),0),62);DTd=kTd.V;RD(QHd(xYd(kTd.V),0),19);ETd=kTd.W;RD(QHd(xYd(kTd.W),0),35);RD(QHd(xYd(kTd.W),1),35);RD(QHd(xYd(kTd.W),2),35);RD(QHd(xYd(kTd.W),3),19);RD(QHd(xYd(kTd.W),4),19);RD(QHd(xYd(kTd.W),5),19);GTd=kTd.bb;RD(QHd(xYd(kTd.bb),0),35);RD(QHd(xYd(kTd.bb),1),35);RD(QHd(xYd(kTd.bb),2),35);RD(QHd(xYd(kTd.bb),3),35);RD(QHd(xYd(kTd.bb),4),35);RD(QHd(xYd(kTd.bb),5),35);RD(QHd(xYd(kTd.bb),6),35);RD(QHd(xYd(kTd.bb),7),19);RD(QHd(uYd(kTd.bb),0),62);RD(QHd(uYd(kTd.bb),1),62);HTd=kTd.eb;RD(QHd(xYd(kTd.eb),0),35);RD(QHd(xYd(kTd.eb),1),35);RD(QHd(xYd(kTd.eb),2),35);RD(QHd(xYd(kTd.eb),3),35);RD(QHd(xYd(kTd.eb),4),35);RD(QHd(xYd(kTd.eb),5),35);RD(QHd(xYd(kTd.eb),6),19);RD(QHd(xYd(kTd.eb),7),19);FTd=kTd.ab;RD(QHd(xYd(kTd.ab),0),35);RD(QHd(xYd(kTd.ab),1),35);vTd=kTd.H;RD(QHd(xYd(kTd.H),0),19);RD(QHd(xYd(kTd.H),1),19);RD(QHd(xYd(kTd.H),2),19);RD(QHd(xYd(kTd.H),3),19);RD(QHd(xYd(kTd.H),4),19);RD(QHd(xYd(kTd.H),5),19);RD(QHd(uYd(kTd.H),0),62);ITd=kTd.db;RD(QHd(xYd(kTd.db),0),19);wTd=kTd.M} -function Ane(a){var b;if(a.O)return;a.O=true;PAd(a,'type');CBd(a,'ecore.xml.type');DBd(a,dLe);b=RD(N5d((YSd(),XSd),dLe),2044);WGd(zYd(a.fb),a.b);vBd(a.b,Vbb,'AnyType',false,false,true);tBd(RD(QHd(xYd(a.b),0),35),a.wb.D,pKe,null,0,-1,Vbb,false,false,true,false,false,false);tBd(RD(QHd(xYd(a.b),1),35),a.wb.D,'any',null,0,-1,Vbb,true,true,true,false,false,true);tBd(RD(QHd(xYd(a.b),2),35),a.wb.D,'anyAttribute',null,0,-1,Vbb,false,false,true,false,false,false);vBd(a.bb,Xbb,iLe,false,false,true);tBd(RD(QHd(xYd(a.bb),0),35),a.gb,'data',null,0,1,Xbb,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),1),35),a.gb,CIe,null,1,1,Xbb,false,false,true,false,true,false);vBd(a.fb,Ybb,jLe,false,false,true);tBd(RD(QHd(xYd(a.fb),0),35),b.gb,'rawValue',null,0,1,Ybb,true,true,true,false,true,true);tBd(RD(QHd(xYd(a.fb),1),35),b.a,aIe,null,0,1,Ybb,true,true,true,false,true,true);zBd(RD(QHd(xYd(a.fb),2),19),a.wb.q,null,'instanceType',1,1,Ybb,false,false,true,false,false,false,false);vBd(a.qb,Zbb,kLe,false,false,true);tBd(RD(QHd(xYd(a.qb),0),35),a.wb.D,pKe,null,0,-1,null,false,false,true,false,false,false);zBd(RD(QHd(xYd(a.qb),1),19),a.wb.ab,null,'xMLNSPrefixMap',0,-1,null,true,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.qb),2),19),a.wb.ab,null,'xSISchemaLocation',0,-1,null,true,false,true,true,false,false,false);tBd(RD(QHd(xYd(a.qb),3),35),a.gb,'cDATA',null,0,-2,null,true,true,true,false,false,true);tBd(RD(QHd(xYd(a.qb),4),35),a.gb,'comment',null,0,-2,null,true,true,true,false,false,true);zBd(RD(QHd(xYd(a.qb),5),19),a.bb,null,KLe,0,-2,null,true,true,true,true,false,false,true);tBd(RD(QHd(xYd(a.qb),6),35),a.gb,hIe,null,0,-2,null,true,true,true,false,false,true);xBd(a.a,jJ,'AnySimpleType',true);xBd(a.c,qJ,'AnyURI',true);xBd(a.d,WC(gE,1),'Base64Binary',true);xBd(a.e,xdb,'Boolean',true);xBd(a.f,QI,'BooleanObject',true);xBd(a.g,gE,'Byte',true);xBd(a.i,RI,'ByteObject',true);xBd(a.j,qJ,'Date',true);xBd(a.k,qJ,'DateTime',true);xBd(a.n,tJ,'Decimal',true);xBd(a.o,iE,'Double',true);xBd(a.p,VI,'DoubleObject',true);xBd(a.q,qJ,'Duration',true);xBd(a.s,QK,'ENTITIES',true);xBd(a.r,QK,'ENTITIESBase',true);xBd(a.t,qJ,qLe,true);xBd(a.u,jE,'Float',true);xBd(a.v,ZI,'FloatObject',true);xBd(a.w,qJ,'GDay',true);xBd(a.B,qJ,'GMonth',true);xBd(a.A,qJ,'GMonthDay',true);xBd(a.C,qJ,'GYear',true);xBd(a.D,qJ,'GYearMonth',true);xBd(a.F,WC(gE,1),'HexBinary',true);xBd(a.G,qJ,'ID',true);xBd(a.H,qJ,'IDREF',true);xBd(a.J,QK,'IDREFS',true);xBd(a.I,QK,'IDREFSBase',true);xBd(a.K,kE,'Int',true);xBd(a.M,uJ,'Integer',true);xBd(a.L,bJ,'IntObject',true);xBd(a.P,qJ,'Language',true);xBd(a.Q,lE,'Long',true);xBd(a.R,eJ,'LongObject',true);xBd(a.S,qJ,'Name',true);xBd(a.T,qJ,rLe,true);xBd(a.U,uJ,'NegativeInteger',true);xBd(a.V,qJ,BLe,true);xBd(a.X,QK,'NMTOKENS',true);xBd(a.W,QK,'NMTOKENSBase',true);xBd(a.Y,uJ,'NonNegativeInteger',true);xBd(a.Z,uJ,'NonPositiveInteger',true);xBd(a.$,qJ,'NormalizedString',true);xBd(a._,qJ,'NOTATION',true);xBd(a.ab,qJ,'PositiveInteger',true);xBd(a.cb,qJ,'QName',true);xBd(a.db,wdb,'Short',true);xBd(a.eb,lJ,'ShortObject',true);xBd(a.gb,qJ,uwe,true);xBd(a.hb,qJ,'Time',true);xBd(a.ib,qJ,'Token',true);xBd(a.jb,wdb,'UnsignedByte',true);xBd(a.kb,lJ,'UnsignedByteObject',true);xBd(a.lb,lE,'UnsignedInt',true);xBd(a.mb,eJ,'UnsignedIntObject',true);xBd(a.nb,uJ,'UnsignedLong',true);xBd(a.ob,kE,'UnsignedShort',true);xBd(a.pb,bJ,'UnsignedShortObject',true);pBd(a,dLe);yne(a)} -function Fed(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab;if(d.$g()){return yob(),yob(),vob}if(Heb(TD(Gxd(b,(umd(),rld))))){return yob(),yob(),vob}A=(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i!=0;C=Ded(b);B=!C.dc();if(A||B){e=RD(Gxd(b,Tld),143);if(!e){throw Adb(new Jed('Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout.'))}Y=Ofd(e,(aGd(),YFd));Bed(b);if(!A&&B&&!Y){return yob(),yob(),vob}t=new bnb;if(dE(Gxd(b,Xkd))===dE((Fnd(),Cnd))&&(Ofd(e,VFd)||Ofd(e,UFd))){if(Heb(TD(Gxd(b,mmd)))){throw Adb(new Jed('Topdown layout cannot be used together with hierarchy handling.'))}M=Aed(a,b);N=new Yub;ye(N,(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));while(N.b!=0){K=RD(N.b==0?null:(sFb(N.b!=0),Wub(N,N.a.a)),27);Bed(K);X=dE(Gxd(K,Xkd))===dE(End);if(X||Hxd(K,Akd)&&!Nfd(e,Gxd(K,Tld))){q=Fed(a,K,c,d);Tmb(t,q);Ixd(K,Xkd,End);ksd(K)}else{ye(N,(!K.a&&(K.a=new C5d(J4,K,10,11)),K.a))}}}else{M=(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i;if(Heb(TD(Gxd(b,mmd)))){Z=d.eh(1);Z.Ug(yGe,1);if(Gxd(b,nmd)==null){throw Adb(new Jed(b.k+' has not been assigned a top-down node type.'))}if(RD(Gxd(b,nmd),280)==(mqd(),jqd)||RD(Gxd(b,nmd),280)==lqd){for(s=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));s.e!=s.i.gc();){r=RD(bMd(s),27);J=RD(Gxd(r,Tld),143);if((!r.a&&(r.a=new C5d(J4,r,10,11)),r.a).i>0&&(ltd(J.f),false)){if(RD(Gxd(r,nmd),280)==jqd){throw Adb(new Jed('Topdown Layout Providers should only be used on parallel nodes.'))}fE(ltd(J.f));null.Um();zyd(r,$wnd.Math.max(r.g,null.Vm),$wnd.Math.max(r.f,null.Vm))}else if(Gxd(r,smd)!=null){h=RD(Gxd(r,smd),347);W=h.Tg(r);zyd(r,$wnd.Math.max(r.g,W.a),$wnd.Math.max(r.f,W.b))}}}O=RD(Gxd(b,tld),107);n=b.g-(O.b+O.c);m=b.f-(O.d+O.a);Z.bh('Available Child Area: ('+n+'|'+m+')');Ixd(b,Dkd,n/m);Ced(b,e,d.eh(M));if(RD(Gxd(b,nmd),280)==lqd){psd(b);zyd(b,O.b+Kfb(UD(Gxd(b,Ikd)))+O.c,O.d+Kfb(UD(Gxd(b,Hkd)))+O.a)}Z.bh('Executed layout algorithm: '+WD(Gxd(b,Akd))+' on node '+b.k);if(RD(Gxd(b,nmd),280)==jqd){if(n<0||m<0){throw Adb(new Jed('The size defined by the parent parallel node is too small for the space provided by the paddings of the child hierarchical node. '+b.k))}Hxd(b,Ikd)||Hxd(b,Hkd)||psd(b);p=Kfb(UD(Gxd(b,Ikd)));o=Kfb(UD(Gxd(b,Hkd)));Z.bh('Desired Child Area: ('+p+'|'+o+')');Q=n/p;R=m/o;P=$wnd.Math.min(Q,$wnd.Math.min(R,Kfb(UD(Gxd(b,omd)))));Ixd(b,qmd,P);Z.bh(b.k+' -- Local Scale Factor (X|Y): ('+Q+'|'+R+')');u=RD(Gxd(b,Kkd),21);f=0;g=0;P<Q&&(u.Hc((ukd(),okd))?(f=(n/2-p*P/2)/P):u.Hc(qkd)&&(f=(n-p*P)/P));P<R&&(u.Hc((ukd(),skd))?(g=(m/2-o*P/2)/P):u.Hc(rkd)&&(g=(m-o*P)/P));$=f+(O.b/P-O.b);ab=g+(O.d/P-O.d);Z.bh('Shift: ('+$+'|'+ab+')');for(L=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));L.e!=L.i.gc();){K=RD(bMd(L),27);Dyd(K,K.i+$);Eyd(K,K.j+ab)}for(w=new dMd((!b.b&&(b.b=new C5d(G4,b,12,3)),b.b));w.e!=w.i.gc();){v=RD(bMd(w),74);for(T=new dMd((!v.a&&(v.a=new C5d(F4,v,6,6)),v.a));T.e!=T.i.gc();){S=RD(bMd(T),166);Nzd(S,S.j+$,S.k+ab);Gzd(S,S.b+$,S.c+ab);for(j=new dMd((!S.a&&(S.a=new XZd(D4,S,5)),S.a));j.e!=j.i.gc();){i=RD(bMd(j),377);Uxd(i,i.a+$,i.b+ab)}}for(I=new dMd((!v.n&&(v.n=new C5d(I4,v,1,7)),v.n));I.e!=I.i.gc();){H=RD(bMd(I),135);Byd(H,H.i+$,H.j+ab)}G=RD(Gxd(v,cld),75);for(F=Sub(G,0);F.b!=F.d.c;){D=RD(evb(F),8);D.a+=$;D.b+=ab}Ixd(v,cld,G)}}Z.Vg()}for(l=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));l.e!=l.i.gc();){k=RD(bMd(l),27);q=Fed(a,k,c,d);Tmb(t,q);ksd(k)}}if(d.$g()){return yob(),yob(),vob}for(V=new Anb(t);V.a<V.c.c.length;){U=RD(ynb(V),74);Ixd(U,rld,(Geb(),true))}Heb(TD(Gxd(b,mmd)))||Ced(b,e,d.eh(M));Ged(t);return B&&Y?C:(yob(),yob(),vob)}else{return yob(),yob(),vob}} -function Jre(a,b){var c,d;if(!Bre){Bre=new Tsb;Cre=new Tsb;d=(Vse(),Vse(),++Use,new xte(4));ose(d,'\t\n\r\r ');$jb(Bre,QLe,d);$jb(Cre,QLe,yte(d));d=(null,++Use,new xte(4));ose(d,TLe);$jb(Bre,OLe,d);$jb(Cre,OLe,yte(d));d=(null,++Use,new xte(4));ose(d,TLe);$jb(Bre,OLe,d);$jb(Cre,OLe,yte(d));d=(null,++Use,new xte(4));ose(d,ULe);ute(d,RD(Xjb(Bre,OLe),122));$jb(Bre,PLe,d);$jb(Cre,PLe,yte(d));d=(null,++Use,new xte(4));ose(d,'-.0:AZ__az\xB7\xB7\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u02D0\u02D1\u0300\u0345\u0360\u0361\u0386\u038A\u038C\u038C\u038E\u03A1\u03A3\u03CE\u03D0\u03D6\u03DA\u03DA\u03DC\u03DC\u03DE\u03DE\u03E0\u03E0\u03E2\u03F3\u0401\u040C\u040E\u044F\u0451\u045C\u045E\u0481\u0483\u0486\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05A1\u05A3\u05B9\u05BB\u05BD\u05BF\u05BF\u05C1\u05C2\u05C4\u05C4\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0640\u0652\u0660\u0669\u0670\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06E8\u06EA\u06ED\u06F0\u06F9\u0901\u0903\u0905\u0939\u093C\u094D\u0951\u0954\u0958\u0963\u0966\u096F\u0981\u0983\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09BC\u09BC\u09BE\u09C4\u09C7\u09C8\u09CB\u09CD\u09D7\u09D7\u09DC\u09DD\u09DF\u09E3\u09E6\u09F1\u0A02\u0A02\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3C\u0A3E\u0A42\u0A47\u0A48\u0A4B\u0A4D\u0A59\u0A5C\u0A5E\u0A5E\u0A66\u0A74\u0A81\u0A83\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABC\u0AC5\u0AC7\u0AC9\u0ACB\u0ACD\u0AE0\u0AE0\u0AE6\u0AEF\u0B01\u0B03\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3C\u0B43\u0B47\u0B48\u0B4B\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F\u0B61\u0B66\u0B6F\u0B82\u0B83\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0BBE\u0BC2\u0BC6\u0BC8\u0BCA\u0BCD\u0BD7\u0BD7\u0BE7\u0BEF\u0C01\u0C03\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C3E\u0C44\u0C46\u0C48\u0C4A\u0C4D\u0C55\u0C56\u0C60\u0C61\u0C66\u0C6F\u0C82\u0C83\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CBE\u0CC4\u0CC6\u0CC8\u0CCA\u0CCD\u0CD5\u0CD6\u0CDE\u0CDE\u0CE0\u0CE1\u0CE6\u0CEF\u0D02\u0D03\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D3E\u0D43\u0D46\u0D48\u0D4A\u0D4D\u0D57\u0D57\u0D60\u0D61\u0D66\u0D6F\u0E01\u0E2E\u0E30\u0E3A\u0E40\u0E4E\u0E50\u0E59\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB9\u0EBB\u0EBD\u0EC0\u0EC4\u0EC6\u0EC6\u0EC8\u0ECD\u0ED0\u0ED9\u0F18\u0F19\u0F20\u0F29\u0F35\u0F35\u0F37\u0F37\u0F39\u0F39\u0F3E\u0F47\u0F49\u0F69\u0F71\u0F84\u0F86\u0F8B\u0F90\u0F95\u0F97\u0F97\u0F99\u0FAD\u0FB1\u0FB7\u0FB9\u0FB9\u10A0\u10C5\u10D0\u10F6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110B\u110C\u110E\u1112\u113C\u113C\u113E\u113E\u1140\u1140\u114C\u114C\u114E\u114E\u1150\u1150\u1154\u1155\u1159\u1159\u115F\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116D\u116E\u1172\u1173\u1175\u1175\u119E\u119E\u11A8\u11A8\u11AB\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BA\u11BC\u11C2\u11EB\u11EB\u11F0\u11F0\u11F9\u11F9\u1E00\u1E9B\u1EA0\u1EF9\u1F00\u1F15\u1F18\u1F1D\u1F20\u1F45\u1F48\u1F4D\u1F50\u1F57\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F7D\u1F80\u1FB4\u1FB6\u1FBC\u1FBE\u1FBE\u1FC2\u1FC4\u1FC6\u1FCC\u1FD0\u1FD3\u1FD6\u1FDB\u1FE0\u1FEC\u1FF2\u1FF4\u1FF6\u1FFC\u20D0\u20DC\u20E1\u20E1\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302F\u3031\u3035\u3041\u3094\u3099\u309A\u309D\u309E\u30A1\u30FA\u30FC\u30FE\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3');$jb(Bre,RLe,d);$jb(Cre,RLe,yte(d));d=(null,++Use,new xte(4));ose(d,ULe);rte(d,95,95);rte(d,58,58);$jb(Bre,SLe,d);$jb(Cre,SLe,yte(d))}c=b?RD(Xjb(Bre,a),138):RD(Xjb(Cre,a),138);return c} -function zCc(a){Cgd(a,new Pfd(_fd(Wfd($fd(Xfd(Zfd(Yfd(new agd,sxe),'ELK Layered'),'Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level.'),new CCc),sxe),ysb((aGd(),_Fd),cD(WC(T5,1),jwe,245,0,[YFd,ZFd,XFd,$Fd,VFd,UFd])))));Agd(a,sxe,xDe,iGd(QBc));Agd(a,sxe,yDe,iGd(RBc));Agd(a,sxe,Bze,iGd(SBc));Agd(a,sxe,zDe,iGd(TBc));Agd(a,sxe,aAe,iGd(VBc));Agd(a,sxe,ADe,iGd(WBc));Agd(a,sxe,BDe,iGd(ZBc));Agd(a,sxe,CDe,iGd(_Bc));Agd(a,sxe,DDe,iGd(aCc));Agd(a,sxe,EDe,iGd($Bc));Agd(a,sxe,_ze,iGd(bCc));Agd(a,sxe,FDe,iGd(dCc));Agd(a,sxe,GDe,iGd(fCc));Agd(a,sxe,HDe,iGd(YBc));Agd(a,sxe,wCe,iGd(PBc));Agd(a,sxe,yCe,iGd(UBc));Agd(a,sxe,xCe,iGd(XBc));Agd(a,sxe,zCe,iGd(cCc));Agd(a,sxe,$ze,sgb(0));Agd(a,sxe,ACe,iGd(KBc));Agd(a,sxe,BCe,iGd(LBc));Agd(a,sxe,CCe,iGd(MBc));Agd(a,sxe,JCe,iGd(vCc));Agd(a,sxe,KCe,iGd(nCc));Agd(a,sxe,LCe,iGd(oCc));Agd(a,sxe,MCe,iGd(rCc));Agd(a,sxe,NCe,iGd(pCc));Agd(a,sxe,OCe,iGd(qCc));Agd(a,sxe,PCe,iGd(xCc));Agd(a,sxe,QCe,iGd(wCc));Agd(a,sxe,RCe,iGd(tCc));Agd(a,sxe,SCe,iGd(sCc));Agd(a,sxe,TCe,iGd(uCc));Agd(a,sxe,pCe,iGd(iBc));Agd(a,sxe,qCe,iGd(jBc));Agd(a,sxe,tCe,iGd(DAc));Agd(a,sxe,uCe,iGd(EAc));Agd(a,sxe,mAe,iGd(jCc));Agd(a,sxe,nAe,iGd(lCc));Agd(a,sxe,oAe,iGd(iCc));Agd(a,sxe,pAe,iGd(hCc));Agd(a,sxe,qAe,kCc);Agd(a,sxe,Eze,rBc);Agd(a,sxe,kDe,zAc);Agd(a,sxe,IDe,0);Agd(a,sxe,bAe,sgb(1));Agd(a,sxe,Dze,Yze);Agd(a,sxe,JDe,iGd(pBc));Agd(a,sxe,eAe,iGd(BBc));Agd(a,sxe,KDe,iGd(GBc));Agd(a,sxe,LDe,iGd(qAc));Agd(a,sxe,MDe,iGd(Rzc));Agd(a,sxe,fDe,iGd(IAc));Agd(a,sxe,cAe,(Geb(),true));Agd(a,sxe,NDe,iGd(NAc));Agd(a,sxe,ODe,iGd(OAc));Agd(a,sxe,jAe,iGd(lBc));Agd(a,sxe,iAe,iGd(oBc));Agd(a,sxe,hAe,iGd(mBc));Agd(a,sxe,PDe,tAc);Agd(a,sxe,kAe,iGd(dBc));Agd(a,sxe,QDe,iGd(cBc));Agd(a,sxe,lAe,iGd(EBc));Agd(a,sxe,RDe,iGd(DBc));Agd(a,sxe,SDe,iGd(FBc));Agd(a,sxe,TDe,uBc);Agd(a,sxe,UDe,iGd(wBc));Agd(a,sxe,VDe,iGd(xBc));Agd(a,sxe,WDe,iGd(yBc));Agd(a,sxe,XDe,iGd(vBc));Agd(a,sxe,PBe,iGd(mCc));Agd(a,sxe,SBe,iGd($Ac));Agd(a,sxe,YBe,iGd(ZAc));Agd(a,sxe,OBe,iGd(gCc));Agd(a,sxe,TBe,iGd(UAc));Agd(a,sxe,RBe,iGd(pAc));Agd(a,sxe,_Be,iGd(oAc));Agd(a,sxe,aCe,iGd(eAc));Agd(a,sxe,hCe,iGd(fAc));Agd(a,sxe,iCe,iGd(hAc));Agd(a,sxe,jCe,iGd(gAc));Agd(a,sxe,cCe,iGd(nAc));Agd(a,sxe,KBe,iGd(aBc));Agd(a,sxe,LBe,iGd(bBc));Agd(a,sxe,JBe,iGd(QAc));Agd(a,sxe,kCe,iGd(kBc));Agd(a,sxe,nCe,iGd(fBc));Agd(a,sxe,IBe,iGd(GAc));Agd(a,sxe,oCe,iGd(hBc));Agd(a,sxe,rCe,iGd(BAc));Agd(a,sxe,sCe,iGd(CAc));Agd(a,sxe,YDe,iGd(dAc));Agd(a,sxe,mCe,iGd(eBc));Agd(a,sxe,ECe,iGd(Xzc));Agd(a,sxe,FCe,iGd(Wzc));Agd(a,sxe,DCe,iGd(Vzc));Agd(a,sxe,GCe,iGd(KAc));Agd(a,sxe,HCe,iGd(JAc));Agd(a,sxe,ICe,iGd(LAc));Agd(a,sxe,CAe,iGd(nBc));Agd(a,sxe,ZDe,iGd(RAc));Agd(a,sxe,Cze,iGd(FAc));Agd(a,sxe,$De,iGd(wAc));Agd(a,sxe,fAe,iGd(vAc));Agd(a,sxe,bCe,iGd(iAc));Agd(a,sxe,_De,iGd(CBc));Agd(a,sxe,aEe,iGd(Uzc));Agd(a,sxe,bEe,iGd(MAc));Agd(a,sxe,cEe,iGd(zBc));Agd(a,sxe,dEe,iGd(sBc));Agd(a,sxe,eEe,iGd(tBc));Agd(a,sxe,WBe,iGd(WAc));Agd(a,sxe,XBe,iGd(XAc));Agd(a,sxe,fEe,iGd(IBc));Agd(a,sxe,MBe,iGd(Szc));Agd(a,sxe,ZBe,iGd(YAc));Agd(a,sxe,UCe,iGd(xAc));Agd(a,sxe,VCe,iGd(uAc));Agd(a,sxe,gEe,iGd(_Ac));Agd(a,sxe,$Be,iGd(SAc));Agd(a,sxe,lCe,iGd(gBc));Agd(a,sxe,hEe,iGd(eCc));Agd(a,sxe,HBe,iGd(sAc));Agd(a,sxe,NBe,iGd(HBc));Agd(a,sxe,vCe,iGd(AAc));Agd(a,sxe,dCe,iGd(jAc));Agd(a,sxe,eCe,iGd(kAc));Agd(a,sxe,UBe,iGd(TAc));Agd(a,sxe,fCe,iGd(lAc));Agd(a,sxe,iEe,iGd(PAc));Agd(a,sxe,VBe,iGd(VAc));Agd(a,sxe,gCe,iGd(mAc));Agd(a,sxe,WCe,iGd(cAc));Agd(a,sxe,$Ce,iGd(_zc));Agd(a,sxe,_Ce,iGd(Zzc));Agd(a,sxe,aDe,iGd($zc));Agd(a,sxe,YCe,iGd(aAc));Agd(a,sxe,ZCe,iGd(Yzc));Agd(a,sxe,XCe,iGd(bAc));Agd(a,sxe,QBe,iGd(HAc))} -function yne(a){_Ad(a.a,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'anySimpleType']));_Ad(a.b,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'anyType',rKe,pKe]));_Ad(RD(QHd(xYd(a.b),0),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,YKe,GIe,':mixed']));_Ad(RD(QHd(xYd(a.b),1),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,YKe,cLe,eLe,GIe,':1',nLe,'lax']));_Ad(RD(QHd(xYd(a.b),2),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,WKe,cLe,eLe,GIe,':2',nLe,'lax']));_Ad(a.c,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'anyURI',bLe,ZKe]));_Ad(a.d,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'base64Binary',bLe,ZKe]));_Ad(a.e,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,hve,bLe,ZKe]));_Ad(a.f,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'boolean:Object',DKe,hve]));_Ad(a.g,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,dKe]));_Ad(a.i,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'byte:Object',DKe,dKe]));_Ad(a.j,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'date',bLe,ZKe]));_Ad(a.k,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'dateTime',bLe,ZKe]));_Ad(a.n,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'decimal',bLe,ZKe]));_Ad(a.o,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,fKe,bLe,ZKe]));_Ad(a.p,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'double:Object',DKe,fKe]));_Ad(a.q,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'duration',bLe,ZKe]));_Ad(a.s,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'ENTITIES',DKe,oLe,pLe,'1']));_Ad(a.r,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,oLe,$Ke,qLe]));_Ad(a.t,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,qLe,DKe,rLe]));_Ad(a.u,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,gKe,bLe,ZKe]));_Ad(a.v,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'float:Object',DKe,gKe]));_Ad(a.w,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gDay',bLe,ZKe]));_Ad(a.B,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gMonth',bLe,ZKe]));_Ad(a.A,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gMonthDay',bLe,ZKe]));_Ad(a.C,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gYear',bLe,ZKe]));_Ad(a.D,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gYearMonth',bLe,ZKe]));_Ad(a.F,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'hexBinary',bLe,ZKe]));_Ad(a.G,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'ID',DKe,rLe]));_Ad(a.H,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'IDREF',DKe,rLe]));_Ad(a.J,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'IDREFS',DKe,sLe,pLe,'1']));_Ad(a.I,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,sLe,$Ke,'IDREF']));_Ad(a.K,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,hKe]));_Ad(a.M,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,tLe]));_Ad(a.L,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'int:Object',DKe,hKe]));_Ad(a.P,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'language',DKe,uLe,vLe,wLe]));_Ad(a.Q,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,iKe]));_Ad(a.R,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'long:Object',DKe,iKe]));_Ad(a.S,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'Name',DKe,uLe,vLe,xLe]));_Ad(a.T,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,rLe,DKe,'Name',vLe,yLe]));_Ad(a.U,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'negativeInteger',DKe,zLe,ALe,'-1']));_Ad(a.V,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,BLe,DKe,uLe,vLe,'\\c+']));_Ad(a.X,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'NMTOKENS',DKe,CLe,pLe,'1']));_Ad(a.W,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,CLe,$Ke,BLe]));_Ad(a.Y,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,DLe,DKe,tLe,ELe,'0']));_Ad(a.Z,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,zLe,DKe,tLe,ALe,'0']));_Ad(a.$,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,FLe,DKe,jve,bLe,'replace']));_Ad(a._,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'NOTATION',bLe,ZKe]));_Ad(a.ab,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'positiveInteger',DKe,DLe,ELe,'1']));_Ad(a.bb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'processingInstruction_._type',rKe,'empty']));_Ad(RD(QHd(xYd(a.bb),0),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,VKe,GIe,'data']));_Ad(RD(QHd(xYd(a.bb),1),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,VKe,GIe,CIe]));_Ad(a.cb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'QName',bLe,ZKe]));_Ad(a.db,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,jKe]));_Ad(a.eb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'short:Object',DKe,jKe]));_Ad(a.fb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'simpleAnyType',rKe,UKe]));_Ad(RD(QHd(xYd(a.fb),0),35),qKe,cD(WC(qJ,1),Nve,2,6,[GIe,':3',rKe,UKe]));_Ad(RD(QHd(xYd(a.fb),1),35),qKe,cD(WC(qJ,1),Nve,2,6,[GIe,':4',rKe,UKe]));_Ad(RD(QHd(xYd(a.fb),2),19),qKe,cD(WC(qJ,1),Nve,2,6,[GIe,':5',rKe,UKe]));_Ad(a.gb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,jve,bLe,'preserve']));_Ad(a.hb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'time',bLe,ZKe]));_Ad(a.ib,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,uLe,DKe,FLe,bLe,ZKe]));_Ad(a.jb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,GLe,ALe,'255',ELe,'0']));_Ad(a.kb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'unsignedByte:Object',DKe,GLe]));_Ad(a.lb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,HLe,ALe,'4294967295',ELe,'0']));_Ad(a.mb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'unsignedInt:Object',DKe,HLe]));_Ad(a.nb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'unsignedLong',DKe,DLe,ALe,ILe,ELe,'0']));_Ad(a.ob,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,JLe,ALe,'65535',ELe,'0']));_Ad(a.pb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'unsignedShort:Object',DKe,JLe]));_Ad(a.qb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'',rKe,pKe]));_Ad(RD(QHd(xYd(a.qb),0),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,YKe,GIe,':mixed']));_Ad(RD(QHd(xYd(a.qb),1),19),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,VKe,GIe,'xmlns:prefix']));_Ad(RD(QHd(xYd(a.qb),2),19),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,VKe,GIe,'xsi:schemaLocation']));_Ad(RD(QHd(xYd(a.qb),3),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,XKe,GIe,'cDATA',_Ke,aLe]));_Ad(RD(QHd(xYd(a.qb),4),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,XKe,GIe,'comment',_Ke,aLe]));_Ad(RD(QHd(xYd(a.qb),5),19),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,XKe,GIe,KLe,_Ke,aLe]));_Ad(RD(QHd(xYd(a.qb),6),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,XKe,GIe,hIe,_Ke,aLe]))} -function TId(a){return lhb('_UI_EMFDiagnostic_marker',a)?'EMF Problem':lhb('_UI_CircularContainment_diagnostic',a)?'An object may not circularly contain itself':lhb(TIe,a)?'Wrong character.':lhb(UIe,a)?'Invalid reference number.':lhb(VIe,a)?'A character is required after \\.':lhb(WIe,a)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":lhb(XIe,a)?"'(?<' or '(?<!' is expected.":lhb(YIe,a)?'A comment is not terminated.':lhb(ZIe,a)?"')' is expected.":lhb($Ie,a)?'Unexpected end of the pattern in a modifier group.':lhb(_Ie,a)?"':' is expected.":lhb(aJe,a)?'Unexpected end of the pattern in a conditional group.':lhb(bJe,a)?'A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.':lhb(cJe,a)?'There are more than three choices in a conditional group.':lhb(dJe,a)?'A character in U+0040-U+005f must follow \\c.':lhb(eJe,a)?"A '{' is required before a character category.":lhb(fJe,a)?"A property name is not closed by '}'.":lhb(gJe,a)?'Unexpected meta character.':lhb(hJe,a)?'Unknown property.':lhb(iJe,a)?"A POSIX character class must be closed by ':]'.":lhb(jJe,a)?'Unexpected end of the pattern in a character class.':lhb(kJe,a)?'Unknown name for a POSIX character class.':lhb('parser.cc.4',a)?"'-' is invalid here.":lhb(lJe,a)?"']' is expected.":lhb(mJe,a)?"'[' is invalid in a character class. Write '\\['.":lhb(nJe,a)?"']' is invalid in a character class. Write '\\]'.":lhb(oJe,a)?"'-' is an invalid character range. Write '\\-'.":lhb(pJe,a)?"'[' is expected.":lhb(qJe,a)?"')' or '-[' or '+[' or '&[' is expected.":lhb(rJe,a)?'The range end code point is less than the start code point.':lhb(sJe,a)?'Invalid Unicode hex notation.':lhb(tJe,a)?'Overflow in a hex notation.':lhb(uJe,a)?"'\\x{' must be closed by '}'.":lhb(vJe,a)?'Invalid Unicode code point.':lhb(wJe,a)?'An anchor must not be here.':lhb(xJe,a)?'This expression is not supported in the current option setting.':lhb(yJe,a)?'Invalid quantifier. A digit is expected.':lhb(zJe,a)?"Invalid quantifier. Invalid quantity or a '}' is missing.":lhb(AJe,a)?"Invalid quantifier. A digit or '}' is expected.":lhb(BJe,a)?'Invalid quantifier. A min quantity must be <= a max quantity.':lhb(CJe,a)?'Invalid quantifier. A quantity value overflow.':lhb('_UI_PackageRegistry_extensionpoint',a)?'Ecore Package Registry for Generated Packages':lhb('_UI_DynamicPackageRegistry_extensionpoint',a)?'Ecore Package Registry for Dynamic Packages':lhb('_UI_FactoryRegistry_extensionpoint',a)?'Ecore Factory Override Registry':lhb('_UI_URIExtensionParserRegistry_extensionpoint',a)?'URI Extension Parser Registry':lhb('_UI_URIProtocolParserRegistry_extensionpoint',a)?'URI Protocol Parser Registry':lhb('_UI_URIContentParserRegistry_extensionpoint',a)?'URI Content Parser Registry':lhb('_UI_ContentHandlerRegistry_extensionpoint',a)?'Content Handler Registry':lhb('_UI_URIMappingRegistry_extensionpoint',a)?'URI Converter Mapping Registry':lhb('_UI_PackageRegistryImplementation_extensionpoint',a)?'Ecore Package Registry Implementation':lhb('_UI_ValidationDelegateRegistry_extensionpoint',a)?'Validation Delegate Registry':lhb('_UI_SettingDelegateRegistry_extensionpoint',a)?'Feature Setting Delegate Factory Registry':lhb('_UI_InvocationDelegateRegistry_extensionpoint',a)?'Operation Invocation Delegate Factory Registry':lhb('_UI_EClassInterfaceNotAbstract_diagnostic',a)?'A class that is an interface must also be abstract':lhb('_UI_EClassNoCircularSuperTypes_diagnostic',a)?'A class may not be a super type of itself':lhb('_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic',a)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":lhb('_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic',a)?'The opposite of the opposite may not be a reference different from this one':lhb('_UI_EReferenceOppositeNotFeatureOfType_diagnostic',a)?"The opposite must be a feature of the reference's type":lhb('_UI_EReferenceTransientOppositeNotTransient_diagnostic',a)?'The opposite of a transient reference must be transient if it is proxy resolving':lhb('_UI_EReferenceOppositeBothContainment_diagnostic',a)?'The opposite of a containment reference must not be a containment reference':lhb('_UI_EReferenceConsistentUnique_diagnostic',a)?'A containment or bidirectional reference must be unique if its upper bound is different from 1':lhb('_UI_ETypedElementNoType_diagnostic',a)?'The typed element must have a type':lhb('_UI_EAttributeNoDataType_diagnostic',a)?'The generic attribute type must not refer to a class':lhb('_UI_EReferenceNoClass_diagnostic',a)?'The generic reference type must not refer to a data type':lhb('_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic',a)?"A generic type can't refer to both a type parameter and a classifier":lhb('_UI_EGenericTypeNoClass_diagnostic',a)?'A generic super type must refer to a class':lhb('_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic',a)?'A generic type in this context must refer to a classifier or a type parameter':lhb('_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic',a)?'A generic type may have bounds only when used as a type argument':lhb('_UI_EGenericTypeNoUpperAndLowerBound_diagnostic',a)?'A generic type must not have both a lower and an upper bound':lhb('_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic',a)?'A generic type with bounds must not also refer to a type parameter or classifier':lhb('_UI_EGenericTypeNoArguments_diagnostic',a)?'A generic type may have arguments only if it refers to a classifier':lhb('_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic',a)?'A generic type may only refer to a type parameter that is in scope':a} -function $Bd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;if(a.r)return;a.r=true;PAd(a,'graph');CBd(a,'graph');DBd(a,$He);eBd(a.o,'T');WGd(zYd(a.a),a.p);WGd(zYd(a.f),a.a);WGd(zYd(a.n),a.f);WGd(zYd(a.g),a.n);WGd(zYd(a.c),a.n);WGd(zYd(a.i),a.c);WGd(zYd(a.j),a.c);WGd(zYd(a.d),a.f);WGd(zYd(a.e),a.a);vBd(a.p,U5,kze,true,true,false);o=bBd(a.p,a.p,'setProperty');p=fBd(o);j=lBd(a.o);k=(c=(d=new s2d,d),c);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);l=mBd(p);n2d(k,l);dBd(o,j,_He);j=mBd(p);dBd(o,j,aIe);o=bBd(a.p,null,'getProperty');p=fBd(o);j=lBd(a.o);k=mBd(p);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);dBd(o,j,_He);j=mBd(p);n=XVd(o,j,null);!!n&&n.oj();o=bBd(a.p,a.wb.e,'hasProperty');j=lBd(a.o);k=(e=(f=new s2d,f),e);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);dBd(o,j,_He);o=bBd(a.p,a.p,'copyProperties');cBd(o,a.p,bIe);o=bBd(a.p,null,'getAllProperties');j=lBd(a.wb.P);k=lBd(a.o);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);l=(g=(h=new s2d,h),g);WGd((!k.d&&(k.d=new XZd(o7,k,1)),k.d),l);k=lBd(a.wb.M);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);m=XVd(o,j,null);!!m&&m.oj();vBd(a.a,C4,xHe,true,false,true);zBd(RD(QHd(xYd(a.a),0),19),a.k,null,cIe,0,-1,C4,false,false,true,true,false,false,false);vBd(a.f,H4,zHe,true,false,true);zBd(RD(QHd(xYd(a.f),0),19),a.g,RD(QHd(xYd(a.g),0),19),'labels',0,-1,H4,false,false,true,true,false,false,false);tBd(RD(QHd(xYd(a.f),1),35),a.wb._,dIe,null,0,1,H4,false,false,true,false,true,false);vBd(a.n,L4,'ElkShape',true,false,true);tBd(RD(QHd(xYd(a.n),0),35),a.wb.t,eIe,zxe,1,1,L4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.n),1),35),a.wb.t,fIe,zxe,1,1,L4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.n),2),35),a.wb.t,'x',zxe,1,1,L4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.n),3),35),a.wb.t,'y',zxe,1,1,L4,false,false,true,false,true,false);o=bBd(a.n,null,'setDimensions');cBd(o,a.wb.t,fIe);cBd(o,a.wb.t,eIe);o=bBd(a.n,null,'setLocation');cBd(o,a.wb.t,'x');cBd(o,a.wb.t,'y');vBd(a.g,I4,FHe,false,false,true);zBd(RD(QHd(xYd(a.g),0),19),a.f,RD(QHd(xYd(a.f),0),19),gIe,0,1,I4,false,false,true,false,false,false,false);tBd(RD(QHd(xYd(a.g),1),35),a.wb._,hIe,'',0,1,I4,false,false,true,false,true,false);vBd(a.c,E4,AHe,true,false,true);zBd(RD(QHd(xYd(a.c),0),19),a.d,RD(QHd(xYd(a.d),1),19),'outgoingEdges',0,-1,E4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.c),1),19),a.d,RD(QHd(xYd(a.d),2),19),'incomingEdges',0,-1,E4,false,false,true,false,true,false,false);vBd(a.i,J4,GHe,false,false,true);zBd(RD(QHd(xYd(a.i),0),19),a.j,RD(QHd(xYd(a.j),0),19),'ports',0,-1,J4,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.i),1),19),a.i,RD(QHd(xYd(a.i),2),19),iIe,0,-1,J4,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.i),2),19),a.i,RD(QHd(xYd(a.i),1),19),gIe,0,1,J4,false,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.i),3),19),a.d,RD(QHd(xYd(a.d),0),19),'containedEdges',0,-1,J4,false,false,true,true,false,false,false);tBd(RD(QHd(xYd(a.i),4),35),a.wb.e,jIe,null,0,1,J4,true,true,false,false,true,true);vBd(a.j,K4,HHe,false,false,true);zBd(RD(QHd(xYd(a.j),0),19),a.i,RD(QHd(xYd(a.i),0),19),gIe,0,1,K4,false,false,true,false,false,false,false);vBd(a.d,G4,BHe,false,false,true);zBd(RD(QHd(xYd(a.d),0),19),a.i,RD(QHd(xYd(a.i),3),19),'containingNode',0,1,G4,false,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.d),1),19),a.c,RD(QHd(xYd(a.c),0),19),kIe,0,-1,G4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.d),2),19),a.c,RD(QHd(xYd(a.c),1),19),lIe,0,-1,G4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.d),3),19),a.e,RD(QHd(xYd(a.e),5),19),mIe,0,-1,G4,false,false,true,true,false,false,false);tBd(RD(QHd(xYd(a.d),4),35),a.wb.e,'hyperedge',null,0,1,G4,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.d),5),35),a.wb.e,jIe,null,0,1,G4,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.d),6),35),a.wb.e,'selfloop',null,0,1,G4,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.d),7),35),a.wb.e,'connected',null,0,1,G4,true,true,false,false,true,true);vBd(a.b,D4,yHe,false,false,true);tBd(RD(QHd(xYd(a.b),0),35),a.wb.t,'x',zxe,1,1,D4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.b),1),35),a.wb.t,'y',zxe,1,1,D4,false,false,true,false,true,false);o=bBd(a.b,null,'set');cBd(o,a.wb.t,'x');cBd(o,a.wb.t,'y');vBd(a.e,F4,CHe,false,false,true);tBd(RD(QHd(xYd(a.e),0),35),a.wb.t,'startX',null,0,1,F4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.e),1),35),a.wb.t,'startY',null,0,1,F4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.e),2),35),a.wb.t,'endX',null,0,1,F4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.e),3),35),a.wb.t,'endY',null,0,1,F4,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.e),4),19),a.b,null,nIe,0,-1,F4,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.e),5),19),a.d,RD(QHd(xYd(a.d),3),19),gIe,0,1,F4,false,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.e),6),19),a.c,null,oIe,0,1,F4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.e),7),19),a.c,null,pIe,0,1,F4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.e),8),19),a.e,RD(QHd(xYd(a.e),9),19),qIe,0,-1,F4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.e),9),19),a.e,RD(QHd(xYd(a.e),8),19),rIe,0,-1,F4,false,false,true,false,true,false,false);tBd(RD(QHd(xYd(a.e),10),35),a.wb._,dIe,null,0,1,F4,false,false,true,false,true,false);o=bBd(a.e,null,'setStartLocation');cBd(o,a.wb.t,'x');cBd(o,a.wb.t,'y');o=bBd(a.e,null,'setEndLocation');cBd(o,a.wb.t,'x');cBd(o,a.wb.t,'y');vBd(a.k,UK,'ElkPropertyToValueMapEntry',false,false,false);j=lBd(a.o);k=(i=(b=new s2d,b),i);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);uBd(RD(QHd(xYd(a.k),0),35),j,'key',UK,false,false,true,false);tBd(RD(QHd(xYd(a.k),1),35),a.s,aIe,null,0,1,UK,false,false,true,false,true,false);xBd(a.o,V5,'IProperty',true);xBd(a.s,jJ,'PropertyValue',true);pBd(a,$He)} -function Kqe(){Kqe=geb;Jqe=$C(gE,YHe,28,txe,15,1);Jqe[9]=35;Jqe[10]=19;Jqe[13]=19;Jqe[32]=51;Jqe[33]=49;Jqe[34]=33;Knb(Jqe,35,38,49);Jqe[38]=1;Knb(Jqe,39,45,49);Knb(Jqe,45,47,-71);Jqe[47]=49;Knb(Jqe,48,58,-71);Jqe[58]=61;Jqe[59]=49;Jqe[60]=1;Jqe[61]=49;Jqe[62]=33;Knb(Jqe,63,65,49);Knb(Jqe,65,91,-3);Knb(Jqe,91,93,33);Jqe[93]=1;Jqe[94]=33;Jqe[95]=-3;Jqe[96]=33;Knb(Jqe,97,123,-3);Knb(Jqe,123,183,33);Jqe[183]=-87;Knb(Jqe,184,192,33);Knb(Jqe,192,215,-19);Jqe[215]=33;Knb(Jqe,216,247,-19);Jqe[247]=33;Knb(Jqe,248,306,-19);Knb(Jqe,306,308,33);Knb(Jqe,308,319,-19);Knb(Jqe,319,321,33);Knb(Jqe,321,329,-19);Jqe[329]=33;Knb(Jqe,330,383,-19);Jqe[383]=33;Knb(Jqe,384,452,-19);Knb(Jqe,452,461,33);Knb(Jqe,461,497,-19);Knb(Jqe,497,500,33);Knb(Jqe,500,502,-19);Knb(Jqe,502,506,33);Knb(Jqe,506,536,-19);Knb(Jqe,536,592,33);Knb(Jqe,592,681,-19);Knb(Jqe,681,699,33);Knb(Jqe,699,706,-19);Knb(Jqe,706,720,33);Knb(Jqe,720,722,-87);Knb(Jqe,722,768,33);Knb(Jqe,768,838,-87);Knb(Jqe,838,864,33);Knb(Jqe,864,866,-87);Knb(Jqe,866,902,33);Jqe[902]=-19;Jqe[903]=-87;Knb(Jqe,904,907,-19);Jqe[907]=33;Jqe[908]=-19;Jqe[909]=33;Knb(Jqe,910,930,-19);Jqe[930]=33;Knb(Jqe,931,975,-19);Jqe[975]=33;Knb(Jqe,976,983,-19);Knb(Jqe,983,986,33);Jqe[986]=-19;Jqe[987]=33;Jqe[988]=-19;Jqe[989]=33;Jqe[990]=-19;Jqe[991]=33;Jqe[992]=-19;Jqe[993]=33;Knb(Jqe,994,1012,-19);Knb(Jqe,1012,1025,33);Knb(Jqe,1025,1037,-19);Jqe[1037]=33;Knb(Jqe,1038,1104,-19);Jqe[1104]=33;Knb(Jqe,1105,1117,-19);Jqe[1117]=33;Knb(Jqe,1118,1154,-19);Jqe[1154]=33;Knb(Jqe,1155,1159,-87);Knb(Jqe,1159,1168,33);Knb(Jqe,1168,1221,-19);Knb(Jqe,1221,1223,33);Knb(Jqe,1223,1225,-19);Knb(Jqe,1225,1227,33);Knb(Jqe,1227,1229,-19);Knb(Jqe,1229,1232,33);Knb(Jqe,1232,1260,-19);Knb(Jqe,1260,1262,33);Knb(Jqe,1262,1270,-19);Knb(Jqe,1270,1272,33);Knb(Jqe,1272,1274,-19);Knb(Jqe,1274,1329,33);Knb(Jqe,1329,1367,-19);Knb(Jqe,1367,1369,33);Jqe[1369]=-19;Knb(Jqe,1370,1377,33);Knb(Jqe,1377,1415,-19);Knb(Jqe,1415,1425,33);Knb(Jqe,1425,1442,-87);Jqe[1442]=33;Knb(Jqe,1443,1466,-87);Jqe[1466]=33;Knb(Jqe,1467,1470,-87);Jqe[1470]=33;Jqe[1471]=-87;Jqe[1472]=33;Knb(Jqe,1473,1475,-87);Jqe[1475]=33;Jqe[1476]=-87;Knb(Jqe,1477,1488,33);Knb(Jqe,1488,1515,-19);Knb(Jqe,1515,1520,33);Knb(Jqe,1520,1523,-19);Knb(Jqe,1523,1569,33);Knb(Jqe,1569,1595,-19);Knb(Jqe,1595,1600,33);Jqe[1600]=-87;Knb(Jqe,1601,1611,-19);Knb(Jqe,1611,1619,-87);Knb(Jqe,1619,1632,33);Knb(Jqe,1632,1642,-87);Knb(Jqe,1642,1648,33);Jqe[1648]=-87;Knb(Jqe,1649,1720,-19);Knb(Jqe,1720,1722,33);Knb(Jqe,1722,1727,-19);Jqe[1727]=33;Knb(Jqe,1728,1743,-19);Jqe[1743]=33;Knb(Jqe,1744,1748,-19);Jqe[1748]=33;Jqe[1749]=-19;Knb(Jqe,1750,1765,-87);Knb(Jqe,1765,1767,-19);Knb(Jqe,1767,1769,-87);Jqe[1769]=33;Knb(Jqe,1770,1774,-87);Knb(Jqe,1774,1776,33);Knb(Jqe,1776,1786,-87);Knb(Jqe,1786,2305,33);Knb(Jqe,2305,2308,-87);Jqe[2308]=33;Knb(Jqe,2309,2362,-19);Knb(Jqe,2362,2364,33);Jqe[2364]=-87;Jqe[2365]=-19;Knb(Jqe,2366,2382,-87);Knb(Jqe,2382,2385,33);Knb(Jqe,2385,2389,-87);Knb(Jqe,2389,2392,33);Knb(Jqe,2392,2402,-19);Knb(Jqe,2402,2404,-87);Knb(Jqe,2404,2406,33);Knb(Jqe,2406,2416,-87);Knb(Jqe,2416,2433,33);Knb(Jqe,2433,2436,-87);Jqe[2436]=33;Knb(Jqe,2437,2445,-19);Knb(Jqe,2445,2447,33);Knb(Jqe,2447,2449,-19);Knb(Jqe,2449,2451,33);Knb(Jqe,2451,2473,-19);Jqe[2473]=33;Knb(Jqe,2474,2481,-19);Jqe[2481]=33;Jqe[2482]=-19;Knb(Jqe,2483,2486,33);Knb(Jqe,2486,2490,-19);Knb(Jqe,2490,2492,33);Jqe[2492]=-87;Jqe[2493]=33;Knb(Jqe,2494,2501,-87);Knb(Jqe,2501,2503,33);Knb(Jqe,2503,2505,-87);Knb(Jqe,2505,2507,33);Knb(Jqe,2507,2510,-87);Knb(Jqe,2510,2519,33);Jqe[2519]=-87;Knb(Jqe,2520,2524,33);Knb(Jqe,2524,2526,-19);Jqe[2526]=33;Knb(Jqe,2527,2530,-19);Knb(Jqe,2530,2532,-87);Knb(Jqe,2532,2534,33);Knb(Jqe,2534,2544,-87);Knb(Jqe,2544,2546,-19);Knb(Jqe,2546,2562,33);Jqe[2562]=-87;Knb(Jqe,2563,2565,33);Knb(Jqe,2565,2571,-19);Knb(Jqe,2571,2575,33);Knb(Jqe,2575,2577,-19);Knb(Jqe,2577,2579,33);Knb(Jqe,2579,2601,-19);Jqe[2601]=33;Knb(Jqe,2602,2609,-19);Jqe[2609]=33;Knb(Jqe,2610,2612,-19);Jqe[2612]=33;Knb(Jqe,2613,2615,-19);Jqe[2615]=33;Knb(Jqe,2616,2618,-19);Knb(Jqe,2618,2620,33);Jqe[2620]=-87;Jqe[2621]=33;Knb(Jqe,2622,2627,-87);Knb(Jqe,2627,2631,33);Knb(Jqe,2631,2633,-87);Knb(Jqe,2633,2635,33);Knb(Jqe,2635,2638,-87);Knb(Jqe,2638,2649,33);Knb(Jqe,2649,2653,-19);Jqe[2653]=33;Jqe[2654]=-19;Knb(Jqe,2655,2662,33);Knb(Jqe,2662,2674,-87);Knb(Jqe,2674,2677,-19);Knb(Jqe,2677,2689,33);Knb(Jqe,2689,2692,-87);Jqe[2692]=33;Knb(Jqe,2693,2700,-19);Jqe[2700]=33;Jqe[2701]=-19;Jqe[2702]=33;Knb(Jqe,2703,2706,-19);Jqe[2706]=33;Knb(Jqe,2707,2729,-19);Jqe[2729]=33;Knb(Jqe,2730,2737,-19);Jqe[2737]=33;Knb(Jqe,2738,2740,-19);Jqe[2740]=33;Knb(Jqe,2741,2746,-19);Knb(Jqe,2746,2748,33);Jqe[2748]=-87;Jqe[2749]=-19;Knb(Jqe,2750,2758,-87);Jqe[2758]=33;Knb(Jqe,2759,2762,-87);Jqe[2762]=33;Knb(Jqe,2763,2766,-87);Knb(Jqe,2766,2784,33);Jqe[2784]=-19;Knb(Jqe,2785,2790,33);Knb(Jqe,2790,2800,-87);Knb(Jqe,2800,2817,33);Knb(Jqe,2817,2820,-87);Jqe[2820]=33;Knb(Jqe,2821,2829,-19);Knb(Jqe,2829,2831,33);Knb(Jqe,2831,2833,-19);Knb(Jqe,2833,2835,33);Knb(Jqe,2835,2857,-19);Jqe[2857]=33;Knb(Jqe,2858,2865,-19);Jqe[2865]=33;Knb(Jqe,2866,2868,-19);Knb(Jqe,2868,2870,33);Knb(Jqe,2870,2874,-19);Knb(Jqe,2874,2876,33);Jqe[2876]=-87;Jqe[2877]=-19;Knb(Jqe,2878,2884,-87);Knb(Jqe,2884,2887,33);Knb(Jqe,2887,2889,-87);Knb(Jqe,2889,2891,33);Knb(Jqe,2891,2894,-87);Knb(Jqe,2894,2902,33);Knb(Jqe,2902,2904,-87);Knb(Jqe,2904,2908,33);Knb(Jqe,2908,2910,-19);Jqe[2910]=33;Knb(Jqe,2911,2914,-19);Knb(Jqe,2914,2918,33);Knb(Jqe,2918,2928,-87);Knb(Jqe,2928,2946,33);Knb(Jqe,2946,2948,-87);Jqe[2948]=33;Knb(Jqe,2949,2955,-19);Knb(Jqe,2955,2958,33);Knb(Jqe,2958,2961,-19);Jqe[2961]=33;Knb(Jqe,2962,2966,-19);Knb(Jqe,2966,2969,33);Knb(Jqe,2969,2971,-19);Jqe[2971]=33;Jqe[2972]=-19;Jqe[2973]=33;Knb(Jqe,2974,2976,-19);Knb(Jqe,2976,2979,33);Knb(Jqe,2979,2981,-19);Knb(Jqe,2981,2984,33);Knb(Jqe,2984,2987,-19);Knb(Jqe,2987,2990,33);Knb(Jqe,2990,2998,-19);Jqe[2998]=33;Knb(Jqe,2999,3002,-19);Knb(Jqe,3002,3006,33);Knb(Jqe,3006,3011,-87);Knb(Jqe,3011,3014,33);Knb(Jqe,3014,3017,-87);Jqe[3017]=33;Knb(Jqe,3018,3022,-87);Knb(Jqe,3022,3031,33);Jqe[3031]=-87;Knb(Jqe,3032,3047,33);Knb(Jqe,3047,3056,-87);Knb(Jqe,3056,3073,33);Knb(Jqe,3073,3076,-87);Jqe[3076]=33;Knb(Jqe,3077,3085,-19);Jqe[3085]=33;Knb(Jqe,3086,3089,-19);Jqe[3089]=33;Knb(Jqe,3090,3113,-19);Jqe[3113]=33;Knb(Jqe,3114,3124,-19);Jqe[3124]=33;Knb(Jqe,3125,3130,-19);Knb(Jqe,3130,3134,33);Knb(Jqe,3134,3141,-87);Jqe[3141]=33;Knb(Jqe,3142,3145,-87);Jqe[3145]=33;Knb(Jqe,3146,3150,-87);Knb(Jqe,3150,3157,33);Knb(Jqe,3157,3159,-87);Knb(Jqe,3159,3168,33);Knb(Jqe,3168,3170,-19);Knb(Jqe,3170,3174,33);Knb(Jqe,3174,3184,-87);Knb(Jqe,3184,3202,33);Knb(Jqe,3202,3204,-87);Jqe[3204]=33;Knb(Jqe,3205,3213,-19);Jqe[3213]=33;Knb(Jqe,3214,3217,-19);Jqe[3217]=33;Knb(Jqe,3218,3241,-19);Jqe[3241]=33;Knb(Jqe,3242,3252,-19);Jqe[3252]=33;Knb(Jqe,3253,3258,-19);Knb(Jqe,3258,3262,33);Knb(Jqe,3262,3269,-87);Jqe[3269]=33;Knb(Jqe,3270,3273,-87);Jqe[3273]=33;Knb(Jqe,3274,3278,-87);Knb(Jqe,3278,3285,33);Knb(Jqe,3285,3287,-87);Knb(Jqe,3287,3294,33);Jqe[3294]=-19;Jqe[3295]=33;Knb(Jqe,3296,3298,-19);Knb(Jqe,3298,3302,33);Knb(Jqe,3302,3312,-87);Knb(Jqe,3312,3330,33);Knb(Jqe,3330,3332,-87);Jqe[3332]=33;Knb(Jqe,3333,3341,-19);Jqe[3341]=33;Knb(Jqe,3342,3345,-19);Jqe[3345]=33;Knb(Jqe,3346,3369,-19);Jqe[3369]=33;Knb(Jqe,3370,3386,-19);Knb(Jqe,3386,3390,33);Knb(Jqe,3390,3396,-87);Knb(Jqe,3396,3398,33);Knb(Jqe,3398,3401,-87);Jqe[3401]=33;Knb(Jqe,3402,3406,-87);Knb(Jqe,3406,3415,33);Jqe[3415]=-87;Knb(Jqe,3416,3424,33);Knb(Jqe,3424,3426,-19);Knb(Jqe,3426,3430,33);Knb(Jqe,3430,3440,-87);Knb(Jqe,3440,3585,33);Knb(Jqe,3585,3631,-19);Jqe[3631]=33;Jqe[3632]=-19;Jqe[3633]=-87;Knb(Jqe,3634,3636,-19);Knb(Jqe,3636,3643,-87);Knb(Jqe,3643,3648,33);Knb(Jqe,3648,3654,-19);Knb(Jqe,3654,3663,-87);Jqe[3663]=33;Knb(Jqe,3664,3674,-87);Knb(Jqe,3674,3713,33);Knb(Jqe,3713,3715,-19);Jqe[3715]=33;Jqe[3716]=-19;Knb(Jqe,3717,3719,33);Knb(Jqe,3719,3721,-19);Jqe[3721]=33;Jqe[3722]=-19;Knb(Jqe,3723,3725,33);Jqe[3725]=-19;Knb(Jqe,3726,3732,33);Knb(Jqe,3732,3736,-19);Jqe[3736]=33;Knb(Jqe,3737,3744,-19);Jqe[3744]=33;Knb(Jqe,3745,3748,-19);Jqe[3748]=33;Jqe[3749]=-19;Jqe[3750]=33;Jqe[3751]=-19;Knb(Jqe,3752,3754,33);Knb(Jqe,3754,3756,-19);Jqe[3756]=33;Knb(Jqe,3757,3759,-19);Jqe[3759]=33;Jqe[3760]=-19;Jqe[3761]=-87;Knb(Jqe,3762,3764,-19);Knb(Jqe,3764,3770,-87);Jqe[3770]=33;Knb(Jqe,3771,3773,-87);Jqe[3773]=-19;Knb(Jqe,3774,3776,33);Knb(Jqe,3776,3781,-19);Jqe[3781]=33;Jqe[3782]=-87;Jqe[3783]=33;Knb(Jqe,3784,3790,-87);Knb(Jqe,3790,3792,33);Knb(Jqe,3792,3802,-87);Knb(Jqe,3802,3864,33);Knb(Jqe,3864,3866,-87);Knb(Jqe,3866,3872,33);Knb(Jqe,3872,3882,-87);Knb(Jqe,3882,3893,33);Jqe[3893]=-87;Jqe[3894]=33;Jqe[3895]=-87;Jqe[3896]=33;Jqe[3897]=-87;Knb(Jqe,3898,3902,33);Knb(Jqe,3902,3904,-87);Knb(Jqe,3904,3912,-19);Jqe[3912]=33;Knb(Jqe,3913,3946,-19);Knb(Jqe,3946,3953,33);Knb(Jqe,3953,3973,-87);Jqe[3973]=33;Knb(Jqe,3974,3980,-87);Knb(Jqe,3980,3984,33);Knb(Jqe,3984,3990,-87);Jqe[3990]=33;Jqe[3991]=-87;Jqe[3992]=33;Knb(Jqe,3993,4014,-87);Knb(Jqe,4014,4017,33);Knb(Jqe,4017,4024,-87);Jqe[4024]=33;Jqe[4025]=-87;Knb(Jqe,4026,4256,33);Knb(Jqe,4256,4294,-19);Knb(Jqe,4294,4304,33);Knb(Jqe,4304,4343,-19);Knb(Jqe,4343,4352,33);Jqe[4352]=-19;Jqe[4353]=33;Knb(Jqe,4354,4356,-19);Jqe[4356]=33;Knb(Jqe,4357,4360,-19);Jqe[4360]=33;Jqe[4361]=-19;Jqe[4362]=33;Knb(Jqe,4363,4365,-19);Jqe[4365]=33;Knb(Jqe,4366,4371,-19);Knb(Jqe,4371,4412,33);Jqe[4412]=-19;Jqe[4413]=33;Jqe[4414]=-19;Jqe[4415]=33;Jqe[4416]=-19;Knb(Jqe,4417,4428,33);Jqe[4428]=-19;Jqe[4429]=33;Jqe[4430]=-19;Jqe[4431]=33;Jqe[4432]=-19;Knb(Jqe,4433,4436,33);Knb(Jqe,4436,4438,-19);Knb(Jqe,4438,4441,33);Jqe[4441]=-19;Knb(Jqe,4442,4447,33);Knb(Jqe,4447,4450,-19);Jqe[4450]=33;Jqe[4451]=-19;Jqe[4452]=33;Jqe[4453]=-19;Jqe[4454]=33;Jqe[4455]=-19;Jqe[4456]=33;Jqe[4457]=-19;Knb(Jqe,4458,4461,33);Knb(Jqe,4461,4463,-19);Knb(Jqe,4463,4466,33);Knb(Jqe,4466,4468,-19);Jqe[4468]=33;Jqe[4469]=-19;Knb(Jqe,4470,4510,33);Jqe[4510]=-19;Knb(Jqe,4511,4520,33);Jqe[4520]=-19;Knb(Jqe,4521,4523,33);Jqe[4523]=-19;Knb(Jqe,4524,4526,33);Knb(Jqe,4526,4528,-19);Knb(Jqe,4528,4535,33);Knb(Jqe,4535,4537,-19);Jqe[4537]=33;Jqe[4538]=-19;Jqe[4539]=33;Knb(Jqe,4540,4547,-19);Knb(Jqe,4547,4587,33);Jqe[4587]=-19;Knb(Jqe,4588,4592,33);Jqe[4592]=-19;Knb(Jqe,4593,4601,33);Jqe[4601]=-19;Knb(Jqe,4602,7680,33);Knb(Jqe,7680,7836,-19);Knb(Jqe,7836,7840,33);Knb(Jqe,7840,7930,-19);Knb(Jqe,7930,7936,33);Knb(Jqe,7936,7958,-19);Knb(Jqe,7958,7960,33);Knb(Jqe,7960,7966,-19);Knb(Jqe,7966,7968,33);Knb(Jqe,7968,8006,-19);Knb(Jqe,8006,8008,33);Knb(Jqe,8008,8014,-19);Knb(Jqe,8014,8016,33);Knb(Jqe,8016,8024,-19);Jqe[8024]=33;Jqe[8025]=-19;Jqe[8026]=33;Jqe[8027]=-19;Jqe[8028]=33;Jqe[8029]=-19;Jqe[8030]=33;Knb(Jqe,8031,8062,-19);Knb(Jqe,8062,8064,33);Knb(Jqe,8064,8117,-19);Jqe[8117]=33;Knb(Jqe,8118,8125,-19);Jqe[8125]=33;Jqe[8126]=-19;Knb(Jqe,8127,8130,33);Knb(Jqe,8130,8133,-19);Jqe[8133]=33;Knb(Jqe,8134,8141,-19);Knb(Jqe,8141,8144,33);Knb(Jqe,8144,8148,-19);Knb(Jqe,8148,8150,33);Knb(Jqe,8150,8156,-19);Knb(Jqe,8156,8160,33);Knb(Jqe,8160,8173,-19);Knb(Jqe,8173,8178,33);Knb(Jqe,8178,8181,-19);Jqe[8181]=33;Knb(Jqe,8182,8189,-19);Knb(Jqe,8189,8400,33);Knb(Jqe,8400,8413,-87);Knb(Jqe,8413,8417,33);Jqe[8417]=-87;Knb(Jqe,8418,8486,33);Jqe[8486]=-19;Knb(Jqe,8487,8490,33);Knb(Jqe,8490,8492,-19);Knb(Jqe,8492,8494,33);Jqe[8494]=-19;Knb(Jqe,8495,8576,33);Knb(Jqe,8576,8579,-19);Knb(Jqe,8579,12293,33);Jqe[12293]=-87;Jqe[12294]=33;Jqe[12295]=-19;Knb(Jqe,12296,12321,33);Knb(Jqe,12321,12330,-19);Knb(Jqe,12330,12336,-87);Jqe[12336]=33;Knb(Jqe,12337,12342,-87);Knb(Jqe,12342,12353,33);Knb(Jqe,12353,12437,-19);Knb(Jqe,12437,12441,33);Knb(Jqe,12441,12443,-87);Knb(Jqe,12443,12445,33);Knb(Jqe,12445,12447,-87);Knb(Jqe,12447,12449,33);Knb(Jqe,12449,12539,-19);Jqe[12539]=33;Knb(Jqe,12540,12543,-87);Knb(Jqe,12543,12549,33);Knb(Jqe,12549,12589,-19);Knb(Jqe,12589,19968,33);Knb(Jqe,19968,40870,-19);Knb(Jqe,40870,44032,33);Knb(Jqe,44032,55204,-19);Knb(Jqe,55204,uxe,33);Knb(Jqe,57344,65534,33)} -function Zae(a){var b,c,d,e,f,g,h;if(a.hb)return;a.hb=true;PAd(a,'ecore');CBd(a,'ecore');DBd(a,AKe);eBd(a.fb,'E');eBd(a.L,'T');eBd(a.P,'K');eBd(a.P,'V');eBd(a.cb,'E');WGd(zYd(a.b),a.bb);WGd(zYd(a.a),a.Q);WGd(zYd(a.o),a.p);WGd(zYd(a.p),a.R);WGd(zYd(a.q),a.p);WGd(zYd(a.v),a.q);WGd(zYd(a.w),a.R);WGd(zYd(a.B),a.Q);WGd(zYd(a.R),a.Q);WGd(zYd(a.T),a.eb);WGd(zYd(a.U),a.R);WGd(zYd(a.V),a.eb);WGd(zYd(a.W),a.bb);WGd(zYd(a.bb),a.eb);WGd(zYd(a.eb),a.R);WGd(zYd(a.db),a.R);vBd(a.b,g7,RJe,false,false,true);tBd(RD(QHd(xYd(a.b),0),35),a.e,'iD',null,0,1,g7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.b),1),19),a.q,null,'eAttributeType',1,1,g7,true,true,false,false,true,false,true);vBd(a.a,f7,OJe,false,false,true);tBd(RD(QHd(xYd(a.a),0),35),a._,bIe,null,0,1,f7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.a),1),19),a.ab,null,'details',0,-1,f7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.a),2),19),a.Q,RD(QHd(xYd(a.Q),0),19),'eModelElement',0,1,f7,true,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.a),3),19),a.S,null,'contents',0,-1,f7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.a),4),19),a.S,null,'references',0,-1,f7,false,false,true,false,true,false,false);vBd(a.o,h7,'EClass',false,false,true);tBd(RD(QHd(xYd(a.o),0),35),a.e,'abstract',null,0,1,h7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.o),1),35),a.e,'interface',null,0,1,h7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.o),2),19),a.o,null,'eSuperTypes',0,-1,h7,false,false,true,false,true,true,false);zBd(RD(QHd(xYd(a.o),3),19),a.T,RD(QHd(xYd(a.T),0),19),'eOperations',0,-1,h7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.o),4),19),a.b,null,'eAllAttributes',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),5),19),a.W,null,'eAllReferences',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),6),19),a.W,null,'eReferences',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),7),19),a.b,null,'eAttributes',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),8),19),a.W,null,'eAllContainments',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),9),19),a.T,null,'eAllOperations',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),10),19),a.bb,null,'eAllStructuralFeatures',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),11),19),a.o,null,'eAllSuperTypes',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),12),19),a.b,null,'eIDAttribute',0,1,h7,true,true,false,false,false,false,true);zBd(RD(QHd(xYd(a.o),13),19),a.bb,RD(QHd(xYd(a.bb),7),19),'eStructuralFeatures',0,-1,h7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.o),14),19),a.H,null,'eGenericSuperTypes',0,-1,h7,false,false,true,true,false,true,false);zBd(RD(QHd(xYd(a.o),15),19),a.H,null,'eAllGenericSuperTypes',0,-1,h7,true,true,false,false,true,false,true);h=yBd(RD(QHd(uYd(a.o),0),62),a.e,'isSuperTypeOf');cBd(h,a.o,'someClass');yBd(RD(QHd(uYd(a.o),1),62),a.I,'getFeatureCount');h=yBd(RD(QHd(uYd(a.o),2),62),a.bb,EKe);cBd(h,a.I,'featureID');h=yBd(RD(QHd(uYd(a.o),3),62),a.I,FKe);cBd(h,a.bb,GKe);h=yBd(RD(QHd(uYd(a.o),4),62),a.bb,EKe);cBd(h,a._,'featureName');yBd(RD(QHd(uYd(a.o),5),62),a.I,'getOperationCount');h=yBd(RD(QHd(uYd(a.o),6),62),a.T,'getEOperation');cBd(h,a.I,'operationID');h=yBd(RD(QHd(uYd(a.o),7),62),a.I,HKe);cBd(h,a.T,IKe);h=yBd(RD(QHd(uYd(a.o),8),62),a.T,'getOverride');cBd(h,a.T,IKe);h=yBd(RD(QHd(uYd(a.o),9),62),a.H,'getFeatureType');cBd(h,a.bb,GKe);vBd(a.p,i7,SJe,true,false,true);tBd(RD(QHd(xYd(a.p),0),35),a._,'instanceClassName',null,0,1,i7,false,true,true,true,true,false);b=lBd(a.L);c=Vae();WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);uBd(RD(QHd(xYd(a.p),1),35),b,'instanceClass',i7,true,true,false,true);tBd(RD(QHd(xYd(a.p),2),35),a.M,JKe,null,0,1,i7,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.p),3),35),a._,'instanceTypeName',null,0,1,i7,false,true,true,true,true,false);zBd(RD(QHd(xYd(a.p),4),19),a.U,RD(QHd(xYd(a.U),3),19),'ePackage',0,1,i7,true,false,false,false,true,false,false);zBd(RD(QHd(xYd(a.p),5),19),a.db,null,KKe,0,-1,i7,false,false,true,true,true,false,false);h=yBd(RD(QHd(uYd(a.p),0),62),a.e,LKe);cBd(h,a.M,gve);yBd(RD(QHd(uYd(a.p),1),62),a.I,'getClassifierID');vBd(a.q,k7,'EDataType',false,false,true);tBd(RD(QHd(xYd(a.q),0),35),a.e,'serializable',FGe,0,1,k7,false,false,true,false,true,false);vBd(a.v,m7,'EEnum',false,false,true);zBd(RD(QHd(xYd(a.v),0),19),a.w,RD(QHd(xYd(a.w),3),19),'eLiterals',0,-1,m7,false,false,true,true,false,false,false);h=yBd(RD(QHd(uYd(a.v),0),62),a.w,MKe);cBd(h,a._,GIe);h=yBd(RD(QHd(uYd(a.v),1),62),a.w,MKe);cBd(h,a.I,aIe);h=yBd(RD(QHd(uYd(a.v),2),62),a.w,'getEEnumLiteralByLiteral');cBd(h,a._,'literal');vBd(a.w,l7,TJe,false,false,true);tBd(RD(QHd(xYd(a.w),0),35),a.I,aIe,null,0,1,l7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.w),1),35),a.A,'instance',null,0,1,l7,true,false,true,false,true,false);tBd(RD(QHd(xYd(a.w),2),35),a._,'literal',null,0,1,l7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.w),3),19),a.v,RD(QHd(xYd(a.v),0),19),'eEnum',0,1,l7,true,false,false,false,false,false,false);vBd(a.B,n7,'EFactory',false,false,true);zBd(RD(QHd(xYd(a.B),0),19),a.U,RD(QHd(xYd(a.U),2),19),'ePackage',1,1,n7,true,false,true,false,false,false,false);h=yBd(RD(QHd(uYd(a.B),0),62),a.S,'create');cBd(h,a.o,'eClass');h=yBd(RD(QHd(uYd(a.B),1),62),a.M,'createFromString');cBd(h,a.q,'eDataType');cBd(h,a._,'literalValue');h=yBd(RD(QHd(uYd(a.B),2),62),a._,'convertToString');cBd(h,a.q,'eDataType');cBd(h,a.M,'instanceValue');vBd(a.Q,p7,DHe,true,false,true);zBd(RD(QHd(xYd(a.Q),0),19),a.a,RD(QHd(xYd(a.a),2),19),'eAnnotations',0,-1,p7,false,false,true,true,false,false,false);h=yBd(RD(QHd(uYd(a.Q),0),62),a.a,'getEAnnotation');cBd(h,a._,bIe);vBd(a.R,q7,EHe,true,false,true);tBd(RD(QHd(xYd(a.R),0),35),a._,GIe,null,0,1,q7,false,false,true,false,true,false);vBd(a.S,r7,'EObject',false,false,true);yBd(RD(QHd(uYd(a.S),0),62),a.o,'eClass');yBd(RD(QHd(uYd(a.S),1),62),a.e,'eIsProxy');yBd(RD(QHd(uYd(a.S),2),62),a.X,'eResource');yBd(RD(QHd(uYd(a.S),3),62),a.S,'eContainer');yBd(RD(QHd(uYd(a.S),4),62),a.bb,'eContainingFeature');yBd(RD(QHd(uYd(a.S),5),62),a.W,'eContainmentFeature');h=yBd(RD(QHd(uYd(a.S),6),62),null,'eContents');b=lBd(a.fb);c=lBd(a.S);WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);e=XVd(h,b,null);!!e&&e.oj();h=yBd(RD(QHd(uYd(a.S),7),62),null,'eAllContents');b=lBd(a.cb);c=lBd(a.S);WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);f=XVd(h,b,null);!!f&&f.oj();h=yBd(RD(QHd(uYd(a.S),8),62),null,'eCrossReferences');b=lBd(a.fb);c=lBd(a.S);WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);g=XVd(h,b,null);!!g&&g.oj();h=yBd(RD(QHd(uYd(a.S),9),62),a.M,'eGet');cBd(h,a.bb,GKe);h=yBd(RD(QHd(uYd(a.S),10),62),a.M,'eGet');cBd(h,a.bb,GKe);cBd(h,a.e,'resolve');h=yBd(RD(QHd(uYd(a.S),11),62),null,'eSet');cBd(h,a.bb,GKe);cBd(h,a.M,'newValue');h=yBd(RD(QHd(uYd(a.S),12),62),a.e,'eIsSet');cBd(h,a.bb,GKe);h=yBd(RD(QHd(uYd(a.S),13),62),null,'eUnset');cBd(h,a.bb,GKe);h=yBd(RD(QHd(uYd(a.S),14),62),a.M,'eInvoke');cBd(h,a.T,IKe);b=lBd(a.fb);c=Vae();WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);dBd(h,b,'arguments');aBd(h,a.K);vBd(a.T,s7,VJe,false,false,true);zBd(RD(QHd(xYd(a.T),0),19),a.o,RD(QHd(xYd(a.o),3),19),NKe,0,1,s7,true,false,false,false,false,false,false);zBd(RD(QHd(xYd(a.T),1),19),a.db,null,KKe,0,-1,s7,false,false,true,true,true,false,false);zBd(RD(QHd(xYd(a.T),2),19),a.V,RD(QHd(xYd(a.V),0),19),'eParameters',0,-1,s7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.T),3),19),a.p,null,'eExceptions',0,-1,s7,false,false,true,false,true,true,false);zBd(RD(QHd(xYd(a.T),4),19),a.H,null,'eGenericExceptions',0,-1,s7,false,false,true,true,false,true,false);yBd(RD(QHd(uYd(a.T),0),62),a.I,HKe);h=yBd(RD(QHd(uYd(a.T),1),62),a.e,'isOverrideOf');cBd(h,a.T,'someOperation');vBd(a.U,t7,'EPackage',false,false,true);tBd(RD(QHd(xYd(a.U),0),35),a._,'nsURI',null,0,1,t7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.U),1),35),a._,'nsPrefix',null,0,1,t7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.U),2),19),a.B,RD(QHd(xYd(a.B),0),19),'eFactoryInstance',1,1,t7,true,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.U),3),19),a.p,RD(QHd(xYd(a.p),4),19),'eClassifiers',0,-1,t7,false,false,true,true,true,false,false);zBd(RD(QHd(xYd(a.U),4),19),a.U,RD(QHd(xYd(a.U),5),19),'eSubpackages',0,-1,t7,false,false,true,true,true,false,false);zBd(RD(QHd(xYd(a.U),5),19),a.U,RD(QHd(xYd(a.U),4),19),'eSuperPackage',0,1,t7,true,false,false,false,true,false,false);h=yBd(RD(QHd(uYd(a.U),0),62),a.p,'getEClassifier');cBd(h,a._,GIe);vBd(a.V,u7,WJe,false,false,true);zBd(RD(QHd(xYd(a.V),0),19),a.T,RD(QHd(xYd(a.T),2),19),'eOperation',0,1,u7,true,false,false,false,false,false,false);vBd(a.W,v7,XJe,false,false,true);tBd(RD(QHd(xYd(a.W),0),35),a.e,'containment',null,0,1,v7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.W),1),35),a.e,'container',null,0,1,v7,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.W),2),35),a.e,'resolveProxies',FGe,0,1,v7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.W),3),19),a.W,null,'eOpposite',0,1,v7,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.W),4),19),a.o,null,'eReferenceType',1,1,v7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.W),5),19),a.b,null,'eKeys',0,-1,v7,false,false,true,false,true,false,false);vBd(a.bb,y7,QJe,true,false,true);tBd(RD(QHd(xYd(a.bb),0),35),a.e,'changeable',FGe,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),1),35),a.e,'volatile',null,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),2),35),a.e,'transient',null,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),3),35),a._,'defaultValueLiteral',null,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),4),35),a.M,JKe,null,0,1,y7,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.bb),5),35),a.e,'unsettable',null,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),6),35),a.e,'derived',null,0,1,y7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.bb),7),19),a.o,RD(QHd(xYd(a.o),13),19),NKe,0,1,y7,true,false,false,false,false,false,false);yBd(RD(QHd(uYd(a.bb),0),62),a.I,FKe);h=yBd(RD(QHd(uYd(a.bb),1),62),null,'getContainerClass');b=lBd(a.L);c=Vae();WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);d=XVd(h,b,null);!!d&&d.oj();vBd(a.eb,A7,PJe,true,false,true);tBd(RD(QHd(xYd(a.eb),0),35),a.e,'ordered',FGe,0,1,A7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.eb),1),35),a.e,'unique',FGe,0,1,A7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.eb),2),35),a.I,'lowerBound',null,0,1,A7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.eb),3),35),a.I,'upperBound','1',0,1,A7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.eb),4),35),a.e,'many',null,0,1,A7,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.eb),5),35),a.e,'required',null,0,1,A7,true,true,false,false,true,true);zBd(RD(QHd(xYd(a.eb),6),19),a.p,null,'eType',0,1,A7,false,true,true,false,true,true,false);zBd(RD(QHd(xYd(a.eb),7),19),a.H,null,'eGenericType',0,1,A7,false,true,true,true,false,true,false);vBd(a.ab,UK,'EStringToStringMapEntry',false,false,false);tBd(RD(QHd(xYd(a.ab),0),35),a._,'key',null,0,1,UK,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.ab),1),35),a._,aIe,null,0,1,UK,false,false,true,false,true,false);vBd(a.H,o7,UJe,false,false,true);zBd(RD(QHd(xYd(a.H),0),19),a.H,null,'eUpperBound',0,1,o7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.H),1),19),a.H,null,'eTypeArguments',0,-1,o7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.H),2),19),a.p,null,'eRawType',1,1,o7,true,false,false,false,true,false,true);zBd(RD(QHd(xYd(a.H),3),19),a.H,null,'eLowerBound',0,1,o7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.H),4),19),a.db,null,'eTypeParameter',0,1,o7,false,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.H),5),19),a.p,null,'eClassifier',0,1,o7,false,false,true,false,true,false,false);h=yBd(RD(QHd(uYd(a.H),0),62),a.e,LKe);cBd(h,a.M,gve);vBd(a.db,z7,YJe,false,false,true);zBd(RD(QHd(xYd(a.db),0),19),a.H,null,'eBounds',0,-1,z7,false,false,true,true,false,false,false);xBd(a.c,tJ,'EBigDecimal',true);xBd(a.d,uJ,'EBigInteger',true);xBd(a.e,xdb,'EBoolean',true);xBd(a.f,QI,'EBooleanObject',true);xBd(a.i,gE,'EByte',true);xBd(a.g,WC(gE,1),'EByteArray',true);xBd(a.j,RI,'EByteObject',true);xBd(a.k,hE,'EChar',true);xBd(a.n,SI,'ECharacterObject',true);xBd(a.r,qK,'EDate',true);xBd(a.s,T6,'EDiagnosticChain',false);xBd(a.t,iE,'EDouble',true);xBd(a.u,VI,'EDoubleObject',true);xBd(a.fb,Y6,'EEList',false);xBd(a.A,Z6,'EEnumerator',false);xBd(a.C,Tbb,'EFeatureMap',false);xBd(a.D,Jbb,'EFeatureMapEntry',false);xBd(a.F,jE,'EFloat',true);xBd(a.G,ZI,'EFloatObject',true);xBd(a.I,kE,'EInt',true);xBd(a.J,bJ,'EIntegerObject',true);xBd(a.L,UI,'EJavaClass',true);xBd(a.M,jJ,'EJavaObject',true);xBd(a.N,lE,'ELong',true);xBd(a.O,eJ,'ELongObject',true);xBd(a.P,VK,'EMap',false);xBd(a.X,Aab,'EResource',false);xBd(a.Y,zab,'EResourceSet',false);xBd(a.Z,wdb,'EShort',true);xBd(a.$,lJ,'EShortObject',true);xBd(a._,qJ,'EString',true);xBd(a.cb,a7,'ETreeIterator',false);xBd(a.K,$6,'EInvocationTargetException',false);pBd(a,AKe)} -var gve='object',hve='boolean',ive='number',jve='string',kve='function',lve=2147483647,mve='java.lang',nve={3:1},ove='com.google.common.base',pve=', ',qve='%s (%s) must not be negative',rve={3:1,4:1,5:1},sve='negative size: ',tve='no calls to next() since the last call to remove()',uve='Optional.of(',vve='null',wve={204:1,51:1},xve='com.google.common.collect',yve={204:1,51:1,128:1},zve={229:1,3:1},Ave={51:1},Bve='java.util',Cve={85:1},Dve={20:1,31:1,16:1},Eve=2063,Fve={20:1,31:1,16:1,21:1},Gve={85:1,139:1,133:1},Hve={20:1,31:1,16:1,21:1,87:1},Ive={20:1,31:1,16:1,277:1,21:1,87:1},Jve={51:1,128:1},Kve={358:1,44:1},Lve='AbstractMapEntry',Mve='expectedValuesPerKey',Nve={3:1,6:1,4:1,5:1},Ove=16384,Pve={159:1},Qve={41:1},Rve={202:1},Sve={l:4194303,m:4194303,h:524287},Tve={253:1,3:1,34:1},Uve='range unbounded on this side',Vve={20:1},Wve={20:1,16:1},Xve={3:1,20:1,31:1,16:1},Yve={306:1,3:1,20:1,31:1,16:1,15:1,59:1},Zve={3:1,4:1,5:1,173:1},$ve={3:1,85:1},_ve={20:1,16:1,21:1},awe={3:1,20:1,31:1,16:1,21:1},bwe={20:1,16:1,21:1,87:1},cwe=461845907,dwe=-862048943,ewe={3:1,6:1,4:1,5:1,173:1},fwe='expectedSize',gwe=1024,hwe=1073741824,iwe='initialArraySize',jwe={3:1,6:1,4:1,9:1,5:1},kwe={20:1,31:1,56:1,16:1,15:1},lwe='arraySize',mwe={20:1,31:1,56:1,16:1,15:1,59:1},nwe={46:1},owe={380:1},pwe=1.0E-4,qwe=-2147483648,rwe='__noinit__',swe={3:1,103:1,63:1,82:1},twe='com.google.gwt.core.client.impl',uwe='String',vwe='com.google.gwt.core.client',wwe='anonymous',xwe='fnStack',ywe='Unknown',zwe={201:1,3:1,4:1},Awe=1000,Bwe=65535,Cwe='January',Dwe='February',Ewe='March',Fwe='April',Gwe='May',Hwe='June',Iwe='July',Jwe='August',Kwe='September',Lwe='October',Mwe='November',Nwe='December',Owe=1900,Pwe={53:1,3:1,4:1},Qwe='Before Christ',Rwe='Anno Domini',Swe='Sunday',Twe='Monday',Uwe='Tuesday',Vwe='Wednesday',Wwe='Thursday',Xwe='Friday',Ywe='Saturday',Zwe='com.google.gwt.i18n.shared',$we='DateTimeFormat',_we='com.google.gwt.i18n.client',axe='DefaultDateTimeFormatInfo',bxe={3:1,4:1,34:1,206:1},cxe='com.google.gwt.json.client',dxe=4194303,exe=1048575,fxe=524288,gxe=4194304,hxe=17592186044416,ixe=1000000000,jxe=-17592186044416,kxe='java.io',lxe={3:1,103:1,77:1,63:1,82:1},mxe={3:1,295:1,82:1},nxe='For input string: "',oxe=Infinity,pxe=-Infinity,qxe=4096,rxe={3:1,4:1,376:1},sxe='org.eclipse.elk.layered',txe=65536,uxe=55296,vxe={109:1,3:1,4:1},wxe=100000,xxe=0.3010299956639812,yxe=4294967295,zxe='0.0',Axe={44:1},Bxe='Unable to add element to queue',Cxe={3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1},Dxe={3:1,20:1,31:1,56:1,16:1,15:1,59:1},Exe={20:1,16:1,15:1},Fxe={3:1,50:1},Gxe={189:1},Hxe={3:1,4:1,85:1},Ixe={3:1,4:1,20:1,31:1,16:1,49:1,21:1},Jxe='delete',Kxe=1.4901161193847656E-8,Lxe=1.1102230246251565E-16,Mxe=15525485,Nxe=5.9604644775390625E-8,Oxe=16777216,Pxe=16777215,Qxe=', length: ',Rxe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1},Sxe='subMap: ',Txe=' less than ',Uxe={3:1,34:1,22:1,303:1},Vxe='java.util.function',Wxe='java.util.logging',Xxe={3:1,4:1,5:1,856:1},Yxe='undefined',Zxe='java.util.stream',$xe={533:1,687:1},_xe='fromIndex: ',aye=' > toIndex: ',bye=', toIndex: ',cye='Index: ',dye=', Size: ',eye='org.eclipse.elk.alg.common',fye={50:1},gye='org.eclipse.elk.alg.common.compaction',hye='Scanline/EventHandler',iye='org.eclipse.elk.alg.common.compaction.oned',jye='CNode belongs to another CGroup.',kye='ISpacingsHandler/1',lye='The ',mye=' instance has been finished already.',nye='The direction ',oye=' is not supported by the CGraph instance.',pye='OneDimensionalCompactor',qye='OneDimensionalCompactor/lambda$0$Type',rye='Quadruplet',sye='ScanlineConstraintCalculator',tye='ScanlineConstraintCalculator/ConstraintsScanlineHandler',uye='ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type',vye='ScanlineConstraintCalculator/Timestamp',wye='ScanlineConstraintCalculator/lambda$0$Type',xye={178:1,46:1},yye='org.eclipse.elk.alg.common.compaction.options',zye='org.eclipse.elk.core.data',Aye='org.eclipse.elk.polyomino.traversalStrategy',Bye='org.eclipse.elk.polyomino.lowLevelSort',Cye='org.eclipse.elk.polyomino.highLevelSort',Dye='org.eclipse.elk.polyomino.fill',Eye={134:1},Fye='polyomino',Gye='org.eclipse.elk.alg.common.networksimplex',Hye={183:1,3:1,4:1},Iye='org.eclipse.elk.alg.common.nodespacing',Jye='org.eclipse.elk.alg.common.nodespacing.cellsystem',Kye='CENTER',Lye={217:1,336:1},Mye={3:1,4:1,5:1,603:1},Nye='LEFT',Oye='RIGHT',Pye='Vertical alignment cannot be null',Qye='BOTTOM',Rye='org.eclipse.elk.alg.common.nodespacing.internal',Sye='UNDEFINED',Tye=0.01,Uye='org.eclipse.elk.alg.common.nodespacing.internal.algorithm',Vye='LabelPlacer/lambda$0$Type',Wye='LabelPlacer/lambda$1$Type',Xye='portRatioOrPosition',Yye='org.eclipse.elk.alg.common.overlaps',Zye='DOWN',$ye='org.eclipse.elk.alg.common.polyomino',_ye='NORTH',aze='EAST',bze='SOUTH',cze='WEST',dze='org.eclipse.elk.alg.common.polyomino.structures',eze='Direction',fze='Grid is only of size ',gze='. Requested point (',hze=') is out of bounds.',ize=' Given center based coordinates were (',jze='org.eclipse.elk.graph.properties',kze='IPropertyHolder',lze={3:1,96:1,137:1},mze='org.eclipse.elk.alg.common.spore',nze='org.eclipse.elk.alg.common.utils',oze={205:1},pze='org.eclipse.elk.core',qze='Connected Components Compaction',rze='org.eclipse.elk.alg.disco',sze='org.eclipse.elk.alg.disco.graph',tze='org.eclipse.elk.alg.disco.options',uze='CompactionStrategy',vze='org.eclipse.elk.disco.componentCompaction.strategy',wze='org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm',xze='org.eclipse.elk.disco.debug.discoGraph',yze='org.eclipse.elk.disco.debug.discoPolys',zze='componentCompaction',Aze='org.eclipse.elk.disco',Bze='org.eclipse.elk.spacing.componentComponent',Cze='org.eclipse.elk.edge.thickness',Dze='org.eclipse.elk.aspectRatio',Eze='org.eclipse.elk.padding',Fze='org.eclipse.elk.alg.disco.transform',Gze=1.5707963267948966,Hze=1.7976931348623157E308,Ize={3:1,4:1,5:1,198:1},Jze={3:1,6:1,4:1,5:1,100:1,115:1},Kze='org.eclipse.elk.alg.force',Lze='ComponentsProcessor',Mze='ComponentsProcessor/1',Nze='ElkGraphImporter/lambda$0$Type',Oze='org.eclipse.elk.alg.force.graph',Pze='Component Layout',Qze='org.eclipse.elk.alg.force.model',Rze='org.eclipse.elk.force.model',Sze='org.eclipse.elk.force.iterations',Tze='org.eclipse.elk.force.repulsivePower',Uze='org.eclipse.elk.force.temperature',Vze=0.001,Wze='org.eclipse.elk.force.repulsion',Xze='org.eclipse.elk.alg.force.options',Yze=1.600000023841858,Zze='org.eclipse.elk.force',$ze='org.eclipse.elk.priority',_ze='org.eclipse.elk.spacing.nodeNode',aAe='org.eclipse.elk.spacing.edgeLabel',bAe='org.eclipse.elk.randomSeed',cAe='org.eclipse.elk.separateConnectedComponents',dAe='org.eclipse.elk.interactive',eAe='org.eclipse.elk.portConstraints',fAe='org.eclipse.elk.edgeLabels.inline',gAe='org.eclipse.elk.omitNodeMicroLayout',hAe='org.eclipse.elk.nodeSize.fixedGraphSize',iAe='org.eclipse.elk.nodeSize.options',jAe='org.eclipse.elk.nodeSize.constraints',kAe='org.eclipse.elk.nodeLabels.placement',lAe='org.eclipse.elk.portLabels.placement',mAe='org.eclipse.elk.topdownLayout',nAe='org.eclipse.elk.topdown.scaleFactor',oAe='org.eclipse.elk.topdown.hierarchicalNodeWidth',pAe='org.eclipse.elk.topdown.hierarchicalNodeAspectRatio',qAe='org.eclipse.elk.topdown.nodeType',rAe='origin',sAe='random',tAe='boundingBox.upLeft',uAe='boundingBox.lowRight',vAe='org.eclipse.elk.stress.fixed',wAe='org.eclipse.elk.stress.desiredEdgeLength',xAe='org.eclipse.elk.stress.dimension',yAe='org.eclipse.elk.stress.epsilon',zAe='org.eclipse.elk.stress.iterationLimit',AAe='org.eclipse.elk.stress',BAe='ELK Stress',CAe='org.eclipse.elk.nodeSize.minimum',DAe='org.eclipse.elk.alg.force.stress',EAe='Layered layout',FAe='org.eclipse.elk.alg.layered',GAe='org.eclipse.elk.alg.layered.compaction.components',HAe='org.eclipse.elk.alg.layered.compaction.oned',IAe='org.eclipse.elk.alg.layered.compaction.oned.algs',JAe='org.eclipse.elk.alg.layered.compaction.recthull',KAe='org.eclipse.elk.alg.layered.components',LAe='NONE',MAe='MODEL_ORDER',NAe={3:1,6:1,4:1,9:1,5:1,126:1},OAe={3:1,6:1,4:1,5:1,150:1,100:1,115:1},PAe='org.eclipse.elk.alg.layered.compound',QAe={47:1},RAe='org.eclipse.elk.alg.layered.graph',SAe=' -> ',TAe='Not supported by LGraph',UAe='Port side is undefined',VAe={3:1,6:1,4:1,5:1,482:1,150:1,100:1,115:1},WAe={3:1,6:1,4:1,5:1,150:1,199:1,210:1,100:1,115:1},XAe={3:1,6:1,4:1,5:1,150:1,2042:1,210:1,100:1,115:1},YAe='([{"\' \t\r\n',ZAe=')]}"\' \t\r\n',$Ae='The given string contains parts that cannot be parsed as numbers.',_Ae='org.eclipse.elk.core.math',aBe={3:1,4:1,140:1,214:1,423:1},bBe={3:1,4:1,107:1,214:1,423:1},cBe='org.eclipse.elk.alg.layered.graph.transform',dBe='ElkGraphImporter',eBe='ElkGraphImporter/lambda$1$Type',fBe='ElkGraphImporter/lambda$2$Type',gBe='ElkGraphImporter/lambda$4$Type',hBe='org.eclipse.elk.alg.layered.intermediate',iBe='Node margin calculation',jBe='ONE_SIDED_GREEDY_SWITCH',kBe='TWO_SIDED_GREEDY_SWITCH',lBe='No implementation is available for the layout processor ',mBe='IntermediateProcessorStrategy',nBe="Node '",oBe='FIRST_SEPARATE',pBe='LAST_SEPARATE',qBe='Odd port side processing',rBe='org.eclipse.elk.alg.layered.intermediate.compaction',sBe='org.eclipse.elk.alg.layered.intermediate.greedyswitch',tBe='org.eclipse.elk.alg.layered.p3order.counting',uBe={230:1},vBe='org.eclipse.elk.alg.layered.intermediate.loops',wBe='org.eclipse.elk.alg.layered.intermediate.loops.ordering',xBe='org.eclipse.elk.alg.layered.intermediate.loops.routing',yBe='org.eclipse.elk.alg.layered.intermediate.preserveorder',zBe='org.eclipse.elk.alg.layered.intermediate.wrapping',ABe='org.eclipse.elk.alg.layered.options',BBe='INTERACTIVE',CBe='GREEDY',DBe='DEPTH_FIRST',EBe='EDGE_LENGTH',FBe='SELF_LOOPS',GBe='firstTryWithInitialOrder',HBe='org.eclipse.elk.layered.directionCongruency',IBe='org.eclipse.elk.layered.feedbackEdges',JBe='org.eclipse.elk.layered.interactiveReferencePoint',KBe='org.eclipse.elk.layered.mergeEdges',LBe='org.eclipse.elk.layered.mergeHierarchyEdges',MBe='org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides',NBe='org.eclipse.elk.layered.portSortingStrategy',OBe='org.eclipse.elk.layered.thoroughness',PBe='org.eclipse.elk.layered.unnecessaryBendpoints',QBe='org.eclipse.elk.layered.generatePositionAndLayerIds',RBe='org.eclipse.elk.layered.cycleBreaking.strategy',SBe='org.eclipse.elk.layered.layering.strategy',TBe='org.eclipse.elk.layered.layering.layerConstraint',UBe='org.eclipse.elk.layered.layering.layerChoiceConstraint',VBe='org.eclipse.elk.layered.layering.layerId',WBe='org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth',XBe='org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor',YBe='org.eclipse.elk.layered.layering.nodePromotion.strategy',ZBe='org.eclipse.elk.layered.layering.nodePromotion.maxIterations',$Be='org.eclipse.elk.layered.layering.coffmanGraham.layerBound',_Be='org.eclipse.elk.layered.crossingMinimization.strategy',aCe='org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder',bCe='org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness',cCe='org.eclipse.elk.layered.crossingMinimization.semiInteractive',dCe='org.eclipse.elk.layered.crossingMinimization.inLayerPredOf',eCe='org.eclipse.elk.layered.crossingMinimization.inLayerSuccOf',fCe='org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint',gCe='org.eclipse.elk.layered.crossingMinimization.positionId',hCe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold',iCe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.type',jCe='org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type',kCe='org.eclipse.elk.layered.nodePlacement.strategy',lCe='org.eclipse.elk.layered.nodePlacement.favorStraightEdges',mCe='org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening',nCe='org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment',oCe='org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening',pCe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility',qCe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default',rCe='org.eclipse.elk.layered.edgeRouting.selfLoopDistribution',sCe='org.eclipse.elk.layered.edgeRouting.selfLoopOrdering',tCe='org.eclipse.elk.layered.edgeRouting.splines.mode',uCe='org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor',vCe='org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth',wCe='org.eclipse.elk.layered.spacing.baseValue',xCe='org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers',yCe='org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers',zCe='org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers',ACe='org.eclipse.elk.layered.priority.direction',BCe='org.eclipse.elk.layered.priority.shortness',CCe='org.eclipse.elk.layered.priority.straightness',DCe='org.eclipse.elk.layered.compaction.connectedComponents',ECe='org.eclipse.elk.layered.compaction.postCompaction.strategy',FCe='org.eclipse.elk.layered.compaction.postCompaction.constraints',GCe='org.eclipse.elk.layered.highDegreeNodes.treatment',HCe='org.eclipse.elk.layered.highDegreeNodes.threshold',ICe='org.eclipse.elk.layered.highDegreeNodes.treeHeight',JCe='org.eclipse.elk.layered.wrapping.strategy',KCe='org.eclipse.elk.layered.wrapping.additionalEdgeSpacing',LCe='org.eclipse.elk.layered.wrapping.correctionFactor',MCe='org.eclipse.elk.layered.wrapping.cutting.strategy',NCe='org.eclipse.elk.layered.wrapping.cutting.cuts',OCe='org.eclipse.elk.layered.wrapping.cutting.msd.freedom',PCe='org.eclipse.elk.layered.wrapping.validify.strategy',QCe='org.eclipse.elk.layered.wrapping.validify.forbiddenIndices',RCe='org.eclipse.elk.layered.wrapping.multiEdge.improveCuts',SCe='org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty',TCe='org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges',UCe='org.eclipse.elk.layered.edgeLabels.sideSelection',VCe='org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy',WCe='org.eclipse.elk.layered.considerModelOrder.strategy',XCe='org.eclipse.elk.layered.considerModelOrder.portModelOrder',YCe='org.eclipse.elk.layered.considerModelOrder.noModelOrder',ZCe='org.eclipse.elk.layered.considerModelOrder.components',$Ce='org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy',_Ce='org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence',aDe='org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence',bDe='layering',cDe='layering.minWidth',dDe='layering.nodePromotion',eDe='crossingMinimization',fDe='org.eclipse.elk.hierarchyHandling',gDe='crossingMinimization.greedySwitch',hDe='nodePlacement',iDe='nodePlacement.bk',jDe='edgeRouting',kDe='org.eclipse.elk.edgeRouting',lDe='spacing',mDe='priority',nDe='compaction',oDe='compaction.postCompaction',pDe='Specifies whether and how post-process compaction is applied.',qDe='highDegreeNodes',rDe='wrapping',sDe='wrapping.cutting',tDe='wrapping.validify',uDe='wrapping.multiEdge',vDe='edgeLabels',wDe='considerModelOrder',xDe='org.eclipse.elk.spacing.commentComment',yDe='org.eclipse.elk.spacing.commentNode',zDe='org.eclipse.elk.spacing.edgeEdge',ADe='org.eclipse.elk.spacing.edgeNode',BDe='org.eclipse.elk.spacing.labelLabel',CDe='org.eclipse.elk.spacing.labelPortHorizontal',DDe='org.eclipse.elk.spacing.labelPortVertical',EDe='org.eclipse.elk.spacing.labelNode',FDe='org.eclipse.elk.spacing.nodeSelfLoop',GDe='org.eclipse.elk.spacing.portPort',HDe='org.eclipse.elk.spacing.individual',IDe='org.eclipse.elk.port.borderOffset',JDe='org.eclipse.elk.noLayout',KDe='org.eclipse.elk.port.side',LDe='org.eclipse.elk.debugMode',MDe='org.eclipse.elk.alignment',NDe='org.eclipse.elk.insideSelfLoops.activate',ODe='org.eclipse.elk.insideSelfLoops.yo',PDe='org.eclipse.elk.direction',QDe='org.eclipse.elk.nodeLabels.padding',RDe='org.eclipse.elk.portLabels.nextToPortIfPossible',SDe='org.eclipse.elk.portLabels.treatAsGroup',TDe='org.eclipse.elk.portAlignment.default',UDe='org.eclipse.elk.portAlignment.north',VDe='org.eclipse.elk.portAlignment.south',WDe='org.eclipse.elk.portAlignment.west',XDe='org.eclipse.elk.portAlignment.east',YDe='org.eclipse.elk.contentAlignment',ZDe='org.eclipse.elk.junctionPoints',$De='org.eclipse.elk.edgeLabels.placement',_De='org.eclipse.elk.port.index',aEe='org.eclipse.elk.commentBox',bEe='org.eclipse.elk.hypernode',cEe='org.eclipse.elk.port.anchor',dEe='org.eclipse.elk.partitioning.activate',eEe='org.eclipse.elk.partitioning.partition',fEe='org.eclipse.elk.position',gEe='org.eclipse.elk.margins',hEe='org.eclipse.elk.spacing.portsSurrounding',iEe='org.eclipse.elk.interactiveLayout',jEe='org.eclipse.elk.core.util',kEe={3:1,4:1,5:1,601:1},lEe='NETWORK_SIMPLEX',mEe='SIMPLE',nEe={106:1,47:1},oEe='org.eclipse.elk.alg.layered.p1cycles',pEe='org.eclipse.elk.alg.layered.p2layers',qEe={413:1,230:1},rEe={846:1,3:1,4:1},sEe='org.eclipse.elk.alg.layered.p3order',tEe='org.eclipse.elk.alg.layered.p4nodes',uEe={3:1,4:1,5:1,854:1},vEe=1.0E-5,wEe='org.eclipse.elk.alg.layered.p4nodes.bk',xEe='org.eclipse.elk.alg.layered.p5edges',yEe='org.eclipse.elk.alg.layered.p5edges.orthogonal',zEe='org.eclipse.elk.alg.layered.p5edges.orthogonal.direction',AEe=1.0E-6,BEe='org.eclipse.elk.alg.layered.p5edges.splines',CEe=0.09999999999999998,DEe=1.0E-8,EEe=4.71238898038469,FEe=3.141592653589793,GEe='org.eclipse.elk.alg.mrtree',HEe=0.10000000149011612,IEe='SUPER_ROOT',JEe='org.eclipse.elk.alg.mrtree.graph',KEe=-1.7976931348623157E308,LEe='org.eclipse.elk.alg.mrtree.intermediate',MEe='Processor compute fanout',NEe={3:1,6:1,4:1,5:1,534:1,100:1,115:1},OEe='Set neighbors in level',PEe='org.eclipse.elk.alg.mrtree.options',QEe='DESCENDANTS',REe='org.eclipse.elk.mrtree.compaction',SEe='org.eclipse.elk.mrtree.edgeEndTextureLength',TEe='org.eclipse.elk.mrtree.treeLevel',UEe='org.eclipse.elk.mrtree.positionConstraint',VEe='org.eclipse.elk.mrtree.weighting',WEe='org.eclipse.elk.mrtree.edgeRoutingMode',XEe='org.eclipse.elk.mrtree.searchOrder',YEe='Position Constraint',ZEe='org.eclipse.elk.mrtree',$Ee='org.eclipse.elk.tree',_Ee='Processor arrange level',aFe='org.eclipse.elk.alg.mrtree.p2order',bFe='org.eclipse.elk.alg.mrtree.p4route',cFe='org.eclipse.elk.alg.radial',dFe=6.283185307179586,eFe='Before',fFe=4.9E-324,gFe='After',hFe='org.eclipse.elk.alg.radial.intermediate',iFe='COMPACTION',jFe='org.eclipse.elk.alg.radial.intermediate.compaction',kFe={3:1,4:1,5:1,100:1},lFe='org.eclipse.elk.alg.radial.intermediate.optimization',mFe='No implementation is available for the layout option ',nFe='org.eclipse.elk.alg.radial.options',oFe='org.eclipse.elk.radial.centerOnRoot',pFe='org.eclipse.elk.radial.orderId',qFe='org.eclipse.elk.radial.radius',rFe='org.eclipse.elk.radial.rotate',sFe='org.eclipse.elk.radial.compactor',tFe='org.eclipse.elk.radial.compactionStepSize',uFe='org.eclipse.elk.radial.sorter',vFe='org.eclipse.elk.radial.wedgeCriteria',wFe='org.eclipse.elk.radial.optimizationCriteria',xFe='org.eclipse.elk.radial.rotation.targetAngle',yFe='org.eclipse.elk.radial.rotation.computeAdditionalWedgeSpace',zFe='org.eclipse.elk.radial.rotation.outgoingEdgeAngles',AFe='Compaction',BFe='rotation',CFe='org.eclipse.elk.radial',DFe='org.eclipse.elk.alg.radial.p1position.wedge',EFe='org.eclipse.elk.alg.radial.sorting',FFe=5.497787143782138,GFe=3.9269908169872414,HFe=2.356194490192345,IFe='org.eclipse.elk.alg.rectpacking',JFe='org.eclipse.elk.alg.rectpacking.intermediate',KFe='org.eclipse.elk.alg.rectpacking.options',LFe='org.eclipse.elk.rectpacking.trybox',MFe='org.eclipse.elk.rectpacking.currentPosition',NFe='org.eclipse.elk.rectpacking.desiredPosition',OFe='org.eclipse.elk.rectpacking.inNewRow',PFe='org.eclipse.elk.rectpacking.widthApproximation.strategy',QFe='org.eclipse.elk.rectpacking.widthApproximation.targetWidth',RFe='org.eclipse.elk.rectpacking.widthApproximation.optimizationGoal',SFe='org.eclipse.elk.rectpacking.widthApproximation.lastPlaceShift',TFe='org.eclipse.elk.rectpacking.packing.strategy',UFe='org.eclipse.elk.rectpacking.packing.compaction.rowHeightReevaluation',VFe='org.eclipse.elk.rectpacking.packing.compaction.iterations',WFe='org.eclipse.elk.rectpacking.whiteSpaceElimination.strategy',XFe='widthApproximation',YFe='Compaction Strategy',ZFe='packing.compaction',$Fe='org.eclipse.elk.rectpacking',_Fe='org.eclipse.elk.alg.rectpacking.p1widthapproximation',aGe='org.eclipse.elk.alg.rectpacking.p2packing',bGe='No Compaction',cGe='org.eclipse.elk.alg.rectpacking.p3whitespaceelimination',dGe='org.eclipse.elk.alg.rectpacking.util',eGe='No implementation available for ',fGe='org.eclipse.elk.alg.spore',gGe='org.eclipse.elk.alg.spore.options',hGe='org.eclipse.elk.sporeCompaction',iGe='org.eclipse.elk.underlyingLayoutAlgorithm',jGe='org.eclipse.elk.processingOrder.treeConstruction',kGe='org.eclipse.elk.processingOrder.spanningTreeCostFunction',lGe='org.eclipse.elk.processingOrder.preferredRoot',mGe='org.eclipse.elk.processingOrder.rootSelection',nGe='org.eclipse.elk.structure.structureExtractionStrategy',oGe='org.eclipse.elk.compaction.compactionStrategy',pGe='org.eclipse.elk.compaction.orthogonal',qGe='org.eclipse.elk.overlapRemoval.maxIterations',rGe='org.eclipse.elk.overlapRemoval.runScanline',sGe='processingOrder',tGe='overlapRemoval',uGe='org.eclipse.elk.sporeOverlap',vGe='org.eclipse.elk.alg.spore.p1structure',wGe='org.eclipse.elk.alg.spore.p2processingorder',xGe='org.eclipse.elk.alg.spore.p3execution',yGe='Topdown Layout',zGe='Invalid index: ',AGe='org.eclipse.elk.core.alg',BGe={341:1},CGe={294:1},DGe='Make sure its type is registered with the ',EGe=' utility class.',FGe='true',GGe='false',HGe="Couldn't clone property '",IGe=0.05,JGe='org.eclipse.elk.core.options',KGe=1.2999999523162842,LGe='org.eclipse.elk.box',MGe='org.eclipse.elk.expandNodes',NGe='org.eclipse.elk.box.packingMode',OGe='org.eclipse.elk.algorithm',PGe='org.eclipse.elk.resolvedAlgorithm',QGe='org.eclipse.elk.bendPoints',RGe='org.eclipse.elk.labelManager',SGe='org.eclipse.elk.scaleFactor',TGe='org.eclipse.elk.childAreaWidth',UGe='org.eclipse.elk.childAreaHeight',VGe='org.eclipse.elk.animate',WGe='org.eclipse.elk.animTimeFactor',XGe='org.eclipse.elk.layoutAncestors',YGe='org.eclipse.elk.maxAnimTime',ZGe='org.eclipse.elk.minAnimTime',$Ge='org.eclipse.elk.progressBar',_Ge='org.eclipse.elk.validateGraph',aHe='org.eclipse.elk.validateOptions',bHe='org.eclipse.elk.zoomToFit',cHe='org.eclipse.elk.font.name',dHe='org.eclipse.elk.font.size',eHe='org.eclipse.elk.topdown.sizeApproximator',fHe='org.eclipse.elk.topdown.scaleCap',gHe='org.eclipse.elk.edge.type',hHe='partitioning',iHe='nodeLabels',jHe='portAlignment',kHe='nodeSize',lHe='port',mHe='portLabels',nHe='topdown',oHe='insideSelfLoops',pHe='org.eclipse.elk.fixed',qHe='org.eclipse.elk.random',rHe={3:1,34:1,22:1,347:1},sHe='port must have a parent node to calculate the port side',tHe='The edge needs to have exactly one edge section. Found: ',uHe='org.eclipse.elk.core.util.adapters',vHe='org.eclipse.emf.ecore',wHe='org.eclipse.elk.graph',xHe='EMapPropertyHolder',yHe='ElkBendPoint',zHe='ElkGraphElement',AHe='ElkConnectableShape',BHe='ElkEdge',CHe='ElkEdgeSection',DHe='EModelElement',EHe='ENamedElement',FHe='ElkLabel',GHe='ElkNode',HHe='ElkPort',IHe={94:1,93:1},JHe='org.eclipse.emf.common.notify.impl',KHe="The feature '",LHe="' is not a valid changeable feature",MHe='Expecting null',NHe="' is not a valid feature",OHe='The feature ID',PHe=' is not a valid feature ID',QHe=32768,RHe={110:1,94:1,93:1,58:1,54:1,99:1},SHe='org.eclipse.emf.ecore.impl',THe='org.eclipse.elk.graph.impl',UHe='Recursive containment not allowed for ',VHe="The datatype '",WHe="' is not a valid classifier",XHe="The value '",YHe={195:1,3:1,4:1},ZHe="The class '",$He='http://www.eclipse.org/elk/ElkGraph',_He='property',aIe='value',bIe='source',cIe='properties',dIe='identifier',eIe='height',fIe='width',gIe='parent',hIe='text',iIe='children',jIe='hierarchical',kIe='sources',lIe='targets',mIe='sections',nIe='bendPoints',oIe='outgoingShape',pIe='incomingShape',qIe='outgoingSections',rIe='incomingSections',sIe='org.eclipse.emf.common.util',tIe='Severe implementation error in the Json to ElkGraph importer.',uIe='id',vIe='org.eclipse.elk.graph.json',wIe='Unhandled parameter types: ',xIe='startPoint',yIe="An edge must have at least one source and one target (edge id: '",zIe="').",AIe='Referenced edge section does not exist: ',BIe=" (edge id: '",CIe='target',DIe='sourcePoint',EIe='targetPoint',FIe='group',GIe='name',HIe='connectableShape cannot be null',IIe='edge cannot be null',JIe="Passed edge is not 'simple'.",KIe='org.eclipse.elk.graph.util',LIe="The 'no duplicates' constraint is violated",MIe='targetIndex=',NIe=', size=',OIe='sourceIndex=',PIe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1},QIe={3:1,4:1,20:1,31:1,56:1,16:1,51:1,15:1,59:1,70:1,66:1,61:1,596:1},RIe='logging',SIe='measureExecutionTime',TIe='parser.parse.1',UIe='parser.parse.2',VIe='parser.next.1',WIe='parser.next.2',XIe='parser.next.3',YIe='parser.next.4',ZIe='parser.factor.1',$Ie='parser.factor.2',_Ie='parser.factor.3',aJe='parser.factor.4',bJe='parser.factor.5',cJe='parser.factor.6',dJe='parser.atom.1',eJe='parser.atom.2',fJe='parser.atom.3',gJe='parser.atom.4',hJe='parser.atom.5',iJe='parser.cc.1',jJe='parser.cc.2',kJe='parser.cc.3',lJe='parser.cc.5',mJe='parser.cc.6',nJe='parser.cc.7',oJe='parser.cc.8',pJe='parser.ope.1',qJe='parser.ope.2',rJe='parser.ope.3',sJe='parser.descape.1',tJe='parser.descape.2',uJe='parser.descape.3',vJe='parser.descape.4',wJe='parser.descape.5',xJe='parser.process.1',yJe='parser.quantifier.1',zJe='parser.quantifier.2',AJe='parser.quantifier.3',BJe='parser.quantifier.4',CJe='parser.quantifier.5',DJe='org.eclipse.emf.common.notify',EJe={424:1,686:1},FJe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1},GJe={378:1,152:1},HJe='index=',IJe={3:1,4:1,5:1,129:1},JJe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,61:1},KJe={3:1,6:1,4:1,5:1,198:1},LJe={3:1,4:1,5:1,173:1,379:1},MJe=';/?:@&=+$,',NJe='invalid authority: ',OJe='EAnnotation',PJe='ETypedElement',QJe='EStructuralFeature',RJe='EAttribute',SJe='EClassifier',TJe='EEnumLiteral',UJe='EGenericType',VJe='EOperation',WJe='EParameter',XJe='EReference',YJe='ETypeParameter',ZJe='org.eclipse.emf.ecore.util',$Je={79:1},_Je={3:1,20:1,16:1,15:1,61:1,597:1,79:1,71:1,97:1},aKe='org.eclipse.emf.ecore.util.FeatureMap$Entry',bKe=8192,cKe=2048,dKe='byte',eKe='char',fKe='double',gKe='float',hKe='int',iKe='long',jKe='short',kKe='java.lang.Object',lKe={3:1,4:1,5:1,254:1},mKe={3:1,4:1,5:1,688:1},nKe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,71:1},oKe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,71:1,97:1},pKe='mixed',qKe='http:///org/eclipse/emf/ecore/util/ExtendedMetaData',rKe='kind',sKe={3:1,4:1,5:1,689:1},tKe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,79:1,71:1,97:1},uKe={20:1,31:1,56:1,16:1,15:1,61:1,71:1},vKe={51:1,128:1,287:1},wKe={76:1,343:1},xKe="The value of type '",yKe="' must be of type '",zKe=1352,AKe='http://www.eclipse.org/emf/2002/Ecore',BKe=-32768,CKe='constraints',DKe='baseType',EKe='getEStructuralFeature',FKe='getFeatureID',GKe='feature',HKe='getOperationID',IKe='operation',JKe='defaultValue',KKe='eTypeParameters',LKe='isInstance',MKe='getEEnumLiteral',NKe='eContainingClass',OKe={57:1},PKe={3:1,4:1,5:1,124:1},QKe='org.eclipse.emf.ecore.resource',RKe={94:1,93:1,599:1,2034:1},SKe='org.eclipse.emf.ecore.resource.impl',TKe='unspecified',UKe='simple',VKe='attribute',WKe='attributeWildcard',XKe='element',YKe='elementWildcard',ZKe='collapse',$Ke='itemType',_Ke='namespace',aLe='##targetNamespace',bLe='whiteSpace',cLe='wildcards',dLe='http://www.eclipse.org/emf/2003/XMLType',eLe='##any',fLe='uninitialized',gLe='The multiplicity constraint is violated',hLe='org.eclipse.emf.ecore.xml.type',iLe='ProcessingInstruction',jLe='SimpleAnyType',kLe='XMLTypeDocumentRoot',lLe='org.eclipse.emf.ecore.xml.type.impl',mLe='INF',nLe='processing',oLe='ENTITIES_._base',pLe='minLength',qLe='ENTITY',rLe='NCName',sLe='IDREFS_._base',tLe='integer',uLe='token',vLe='pattern',wLe='[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*',xLe='\\i\\c*',yLe='[\\i-[:]][\\c-[:]]*',zLe='nonPositiveInteger',ALe='maxInclusive',BLe='NMTOKEN',CLe='NMTOKENS_._base',DLe='nonNegativeInteger',ELe='minInclusive',FLe='normalizedString',GLe='unsignedByte',HLe='unsignedInt',ILe='18446744073709551615',JLe='unsignedShort',KLe='processingInstruction',LLe='org.eclipse.emf.ecore.xml.type.internal',MLe=1114111,NLe='Internal Error: shorthands: \\u',OLe='xml:isDigit',PLe='xml:isWord',QLe='xml:isSpace',RLe='xml:isNameChar',SLe='xml:isInitialNameChar',TLe='09\u0660\u0669\u06F0\u06F9\u0966\u096F\u09E6\u09EF\u0A66\u0A6F\u0AE6\u0AEF\u0B66\u0B6F\u0BE7\u0BEF\u0C66\u0C6F\u0CE6\u0CEF\u0D66\u0D6F\u0E50\u0E59\u0ED0\u0ED9\u0F20\u0F29',ULe='AZaz\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u0386\u0386\u0388\u038A\u038C\u038C\u038E\u03A1\u03A3\u03CE\u03D0\u03D6\u03DA\u03DA\u03DC\u03DC\u03DE\u03DE\u03E0\u03E0\u03E2\u03F3\u0401\u040C\u040E\u044F\u0451\u045C\u045E\u0481\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0641\u064A\u0671\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06D5\u06E5\u06E6\u0905\u0939\u093D\u093D\u0958\u0961\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09DC\u09DD\u09DF\u09E1\u09F0\u09F1\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59\u0A5C\u0A5E\u0A5E\u0A72\u0A74\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABD\u0ABD\u0AE0\u0AE0\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3D\u0B3D\u0B5C\u0B5D\u0B5F\u0B61\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C60\u0C61\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CDE\u0CDE\u0CE0\u0CE1\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D60\u0D61\u0E01\u0E2E\u0E30\u0E30\u0E32\u0E33\u0E40\u0E45\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB0\u0EB2\u0EB3\u0EBD\u0EBD\u0EC0\u0EC4\u0F40\u0F47\u0F49\u0F69\u10A0\u10C5\u10D0\u10F6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110B\u110C\u110E\u1112\u113C\u113C\u113E\u113E\u1140\u1140\u114C\u114C\u114E\u114E\u1150\u1150\u1154\u1155\u1159\u1159\u115F\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116D\u116E\u1172\u1173\u1175\u1175\u119E\u119E\u11A8\u11A8\u11AB\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BA\u11BC\u11C2\u11EB\u11EB\u11F0\u11F0\u11F9\u11F9\u1E00\u1E9B\u1EA0\u1EF9\u1F00\u1F15\u1F18\u1F1D\u1F20\u1F45\u1F48\u1F4D\u1F50\u1F57\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F7D\u1F80\u1FB4\u1FB6\u1FBC\u1FBE\u1FBE\u1FC2\u1FC4\u1FC6\u1FCC\u1FD0\u1FD3\u1FD6\u1FDB\u1FE0\u1FEC\u1FF2\u1FF4\u1FF6\u1FFC\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30A1\u30FA\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3',VLe='Private Use',WLe='ASSIGNED',XLe='\x00\x7F\x80\xFF\u0100\u017F\u0180\u024F\u0250\u02AF\u02B0\u02FF\u0300\u036F\u0370\u03FF\u0400\u04FF\u0530\u058F\u0590\u05FF\u0600\u06FF\u0700\u074F\u0780\u07BF\u0900\u097F\u0980\u09FF\u0A00\u0A7F\u0A80\u0AFF\u0B00\u0B7F\u0B80\u0BFF\u0C00\u0C7F\u0C80\u0CFF\u0D00\u0D7F\u0D80\u0DFF\u0E00\u0E7F\u0E80\u0EFF\u0F00\u0FFF\u1000\u109F\u10A0\u10FF\u1100\u11FF\u1200\u137F\u13A0\u13FF\u1400\u167F\u1680\u169F\u16A0\u16FF\u1780\u17FF\u1800\u18AF\u1E00\u1EFF\u1F00\u1FFF\u2000\u206F\u2070\u209F\u20A0\u20CF\u20D0\u20FF\u2100\u214F\u2150\u218F\u2190\u21FF\u2200\u22FF\u2300\u23FF\u2400\u243F\u2440\u245F\u2460\u24FF\u2500\u257F\u2580\u259F\u25A0\u25FF\u2600\u26FF\u2700\u27BF\u2800\u28FF\u2E80\u2EFF\u2F00\u2FDF\u2FF0\u2FFF\u3000\u303F\u3040\u309F\u30A0\u30FF\u3100\u312F\u3130\u318F\u3190\u319F\u31A0\u31BF\u3200\u32FF\u3300\u33FF\u3400\u4DB5\u4E00\u9FFF\uA000\uA48F\uA490\uA4CF\uAC00\uD7A3\uE000\uF8FF\uF900\uFAFF\uFB00\uFB4F\uFB50\uFDFF\uFE20\uFE2F\uFE30\uFE4F\uFE50\uFE6F\uFE70\uFEFE\uFEFF\uFEFF\uFF00\uFFEF',YLe='UNASSIGNED',ZLe={3:1,122:1},$Le='org.eclipse.emf.ecore.xml.type.util',_Le={3:1,4:1,5:1,381:1},aMe='org.eclipse.xtext.xbase.lib',bMe='Cannot add elements to a Range',cMe='Cannot set elements in a Range',dMe='Cannot remove elements from a Range',eMe='user.agent';var _,eeb,_db,ydb=-1;$wnd.goog=$wnd.goog||{};$wnd.goog.global=$wnd.goog.global||$wnd;eeb={};feb(1,null,{},nb);_.Fb=function ob(a){return mb(this,a)};_.Gb=function qb(){return this.Rm};_.Hb=function sb(){return kFb(this)};_.Ib=function ub(){var a;return nfb(rb(this))+'@'+(a=tb(this)>>>0,a.toString(16))};_.equals=function(a){return this.Fb(a)};_.hashCode=function(){return this.Hb()};_.toString=function(){return this.Ib()};var ND,OD,PD;feb(296,1,{296:1,2124:1},pfb);_.ve=function qfb(a){var b;b=new pfb;b.i=4;a>1?(b.c=xfb(this,a-1)):(b.c=this);return b};_.we=function wfb(){lfb(this);return this.b};_.xe=function yfb(){return nfb(this)};_.ye=function Afb(){return lfb(this),this.k};_.ze=function Cfb(){return (this.i&4)!=0};_.Ae=function Dfb(){return (this.i&1)!=0};_.Ib=function Gfb(){return ofb(this)};_.i=0;var kfb=1;var jJ=sfb(mve,'Object',1);var UI=sfb(mve,'Class',296);feb(2096,1,nve);var oE=sfb(ove,'Optional',2096);feb(1191,2096,nve,xb);_.Fb=function yb(a){return a===this};_.Hb=function zb(){return 2040732332};_.Ib=function Ab(){return 'Optional.absent()'};_.Jb=function Bb(a){Qb(a);return wb(),vb};var vb;var mE=sfb(ove,'Absent',1191);feb(636,1,{},Gb);var nE=sfb(ove,'Joiner',636);var pE=ufb(ove,'Predicate');feb(589,1,{178:1,589:1,3:1,46:1},Yb);_.Mb=function ac(a){return Xb(this,a)};_.Lb=function Zb(a){return Xb(this,a)};_.Fb=function $b(a){var b;if(ZD(a,589)){b=RD(a,589);return Rt(this.a,b.a)}return false};_.Hb=function _b(){return Cob(this.a)+306654252};_.Ib=function bc(){return Wb(this.a)};var qE=sfb(ove,'Predicates/AndPredicate',589);feb(419,2096,{419:1,3:1},cc);_.Fb=function dc(a){var b;if(ZD(a,419)){b=RD(a,419);return pb(this.a,b.a)}return false};_.Hb=function ec(){return 1502476572+tb(this.a)};_.Ib=function fc(){return uve+this.a+')'};_.Jb=function gc(a){return new cc(Rb(a.Kb(this.a),'the Function passed to Optional.transform() must not return null.'))};var rE=sfb(ove,'Present',419);feb(204,1,wve);_.Nb=function kc(a){Ztb(this,a)};_.Qb=function lc(){jc()};var eI=sfb(xve,'UnmodifiableIterator',204);feb(2076,204,yve);_.Qb=function nc(){jc()};_.Rb=function mc(a){throw Adb(new jib)};_.Wb=function oc(a){throw Adb(new jib)};var fI=sfb(xve,'UnmodifiableListIterator',2076);feb(399,2076,yve);_.Ob=function rc(){return this.c<this.d};_.Sb=function sc(){return this.c>0};_.Pb=function tc(){if(this.c>=this.d){throw Adb(new Dvb)}return this.Xb(this.c++)};_.Tb=function uc(){return this.c};_.Ub=function vc(){if(this.c<=0){throw Adb(new Dvb)}return this.Xb(--this.c)};_.Vb=function wc(){return this.c-1};_.c=0;_.d=0;var sE=sfb(xve,'AbstractIndexedListIterator',399);feb(713,204,wve);_.Ob=function Ac(){return xc(this)};_.Pb=function Bc(){return yc(this)};_.e=1;var tE=sfb(xve,'AbstractIterator',713);feb(2084,1,{229:1});_.Zb=function Hc(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.Fb=function Ic(a){return xw(this,a)};_.Hb=function Jc(){return tb(this.Zb())};_.dc=function Kc(){return this.gc()==0};_.ec=function Lc(){return Ec(this)};_.Ib=function Mc(){return jeb(this.Zb())};var YE=sfb(xve,'AbstractMultimap',2084);feb(742,2084,zve);_.$b=function Xc(){Nc(this)};_._b=function Yc(a){return Oc(this,a)};_.ac=function Zc(){return new ne(this,this.c)};_.ic=function $c(a){return this.hc()};_.bc=function _c(){return new zf(this,this.c)};_.jc=function ad(){return this.mc(this.hc())};_.kc=function bd(){return new Hd(this)};_.lc=function cd(){return ek(this.c.vc().Nc(),new hh,64,this.d)};_.cc=function dd(a){return Qc(this,a)};_.fc=function gd(a){return Sc(this,a)};_.gc=function hd(){return this.d};_.mc=function jd(a){return yob(),new xpb(a)};_.nc=function kd(){return new Dd(this)};_.oc=function ld(){return ek(this.c.Cc().Nc(),new Fd,64,this.d)};_.pc=function md(a,b){return new lg(this,a,b,null)};_.d=0;var TE=sfb(xve,'AbstractMapBasedMultimap',742);feb(1696,742,zve);_.hc=function pd(){return new cnb(this.a)};_.jc=function qd(){return yob(),yob(),vob};_.cc=function sd(a){return RD(Qc(this,a),15)};_.fc=function ud(a){return RD(Sc(this,a),15)};_.Zb=function od(){return nd(this)};_.Fb=function rd(a){return xw(this,a)};_.qc=function td(a){return RD(Qc(this,a),15)};_.rc=function vd(a){return RD(Sc(this,a),15)};_.mc=function wd(a){return Hob(RD(a,15))};_.pc=function xd(a,b){return Vc(this,a,RD(b,15),null)};var uE=sfb(xve,'AbstractListMultimap',1696);feb(748,1,Ave);_.Nb=function zd(a){Ztb(this,a)};_.Ob=function Ad(){return this.c.Ob()||this.e.Ob()};_.Pb=function Bd(){var a;if(!this.e.Ob()){a=RD(this.c.Pb(),44);this.b=a.ld();this.a=RD(a.md(),16);this.e=this.a.Kc()}return this.sc(this.b,this.e.Pb())};_.Qb=function Cd(){this.e.Qb();RD(Hvb(this.a),16).dc()&&this.c.Qb();--this.d.d};var CE=sfb(xve,'AbstractMapBasedMultimap/Itr',748);feb(1129,748,Ave,Dd);_.sc=function Ed(a,b){return b};var vE=sfb(xve,'AbstractMapBasedMultimap/1',1129);feb(1130,1,{},Fd);_.Kb=function Gd(a){return RD(a,16).Nc()};var wE=sfb(xve,'AbstractMapBasedMultimap/1methodref$spliterator$Type',1130);feb(1131,748,Ave,Hd);_.sc=function Id(a,b){return new gp(a,b)};var xE=sfb(xve,'AbstractMapBasedMultimap/2',1131);var VK=ufb(Bve,'Map');feb(2065,1,Cve);_.wc=function Td(a){Bvb(this,a)};_.yc=function $d(a,b,c){return Cvb(this,a,b,c)};_.$b=function Od(){this.vc().$b()};_.tc=function Pd(a){return Jd(this,a)};_._b=function Qd(a){return !!Kd(this,a,false)};_.uc=function Rd(a){var b,c,d;for(c=this.vc().Kc();c.Ob();){b=RD(c.Pb(),44);d=b.md();if(dE(a)===dE(d)||a!=null&&pb(a,d)){return true}}return false};_.Fb=function Sd(a){var b,c,d;if(a===this){return true}if(!ZD(a,85)){return false}d=RD(a,85);if(this.gc()!=d.gc()){return false}for(c=d.vc().Kc();c.Ob();){b=RD(c.Pb(),44);if(!this.tc(b)){return false}}return true};_.xc=function Ud(a){return Wd(Kd(this,a,false))};_.Hb=function Xd(){return Bob(this.vc())};_.dc=function Yd(){return this.gc()==0};_.ec=function Zd(){return new Xkb(this)};_.zc=function _d(a,b){throw Adb(new kib('Put not supported on this map'))};_.Ac=function ae(a){Ld(this,a)};_.Bc=function be(a){return Wd(Kd(this,a,true))};_.gc=function ce(){return this.vc().gc()};_.Ib=function de(){return Md(this)};_.Cc=function ee(){return new glb(this)};var KJ=sfb(Bve,'AbstractMap',2065);feb(2085,2065,Cve);_.bc=function ge(){return new rf(this)};_.vc=function he(){return fe(this)};_.ec=function ie(){var a;a=this.g;return !a?(this.g=this.bc()):a};_.Cc=function je(){var a;a=this.i;return !a?(this.i=new nw(this)):a};var uH=sfb(xve,'Maps/ViewCachingAbstractMap',2085);feb(402,2085,Cve,ne);_.xc=function se(a){return ke(this,a)};_.Bc=function ve(a){return le(this,a)};_.$b=function oe(){this.d==this.e.c?this.e.$b():Ar(new mf(this))};_._b=function pe(a){return Wv(this.d,a)};_.Ec=function qe(){return new df(this)};_.Dc=function(){return this.Ec()};_.Fb=function re(a){return this===a||pb(this.d,a)};_.Hb=function te(){return tb(this.d)};_.ec=function ue(){return this.e.ec()};_.gc=function we(){return this.d.gc()};_.Ib=function xe(){return jeb(this.d)};var BE=sfb(xve,'AbstractMapBasedMultimap/AsMap',402);var cJ=ufb(mve,'Iterable');feb(31,1,Dve);_.Jc=function Le(a){xgb(this,a)};_.Lc=function Ne(){return this.Oc()};_.Nc=function Pe(){return new Swb(this,0)};_.Oc=function Qe(){return new SDb(null,this.Nc())};_.Fc=function Ge(a){throw Adb(new kib('Add not supported on this collection'))};_.Gc=function He(a){return ye(this,a)};_.$b=function Ie(){Ae(this)};_.Hc=function Je(a){return ze(this,a,false)};_.Ic=function Ke(a){return Be(this,a)};_.dc=function Me(){return this.gc()==0};_.Mc=function Oe(a){return ze(this,a,true)};_.Pc=function Re(){return De(this)};_.Qc=function Se(a){return Ee(this,a)};_.Ib=function Te(){return Fe(this)};var vJ=sfb(Bve,'AbstractCollection',31);var bL=ufb(Bve,'Set');feb(Eve,31,Fve);_.Nc=function Ye(){return new Swb(this,1)};_.Fb=function We(a){return Ue(this,a)};_.Hb=function Xe(){return Bob(this)};var RJ=sfb(Bve,'AbstractSet',Eve);feb(2068,Eve,Fve);var UH=sfb(xve,'Sets/ImprovedAbstractSet',2068);feb(2069,2068,Fve);_.$b=function $e(){this.Rc().$b()};_.Hc=function _e(a){return Ze(this,a)};_.dc=function af(){return this.Rc().dc()};_.Mc=function bf(a){var b;if(this.Hc(a)&&ZD(a,44)){b=RD(a,44);return this.Rc().ec().Mc(b.ld())}return false};_.gc=function cf(){return this.Rc().gc()};var nH=sfb(xve,'Maps/EntrySet',2069);feb(1127,2069,Fve,df);_.Hc=function ef(a){return Nk(this.a.d.vc(),a)};_.Kc=function ff(){return new mf(this.a)};_.Rc=function gf(){return this.a};_.Mc=function hf(a){var b;if(!Nk(this.a.d.vc(),a)){return false}b=RD(Hvb(RD(a,44)),44);Tc(this.a.e,b.ld());return true};_.Nc=function jf(){return gk(this.a.d.vc().Nc(),new kf(this.a))};var zE=sfb(xve,'AbstractMapBasedMultimap/AsMap/AsMapEntries',1127);feb(1128,1,{},kf);_.Kb=function lf(a){return me(this.a,RD(a,44))};var yE=sfb(xve,'AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type',1128);feb(746,1,Ave,mf);_.Nb=function nf(a){Ztb(this,a)};_.Pb=function pf(){var a;return a=RD(this.b.Pb(),44),this.a=RD(a.md(),16),me(this.c,a)};_.Ob=function of(){return this.b.Ob()};_.Qb=function qf(){Vb(!!this.a);this.b.Qb();this.c.e.d-=this.a.gc();this.a.$b();this.a=null};var AE=sfb(xve,'AbstractMapBasedMultimap/AsMap/AsMapIterator',746);feb(542,2068,Fve,rf);_.$b=function sf(){this.b.$b()};_.Hc=function tf(a){return this.b._b(a)};_.Jc=function uf(a){Qb(a);this.b.wc(new lw(a))};_.dc=function vf(){return this.b.dc()};_.Kc=function wf(){return new aw(this.b.vc().Kc())};_.Mc=function xf(a){if(this.b._b(a)){this.b.Bc(a);return true}return false};_.gc=function yf(){return this.b.gc()};var rH=sfb(xve,'Maps/KeySet',542);feb(327,542,Fve,zf);_.$b=function Af(){var a;Ar((a=this.b.vc().Kc(),new Hf(this,a)))};_.Ic=function Bf(a){return this.b.ec().Ic(a)};_.Fb=function Cf(a){return this===a||pb(this.b.ec(),a)};_.Hb=function Df(){return tb(this.b.ec())};_.Kc=function Ef(){var a;return a=this.b.vc().Kc(),new Hf(this,a)};_.Mc=function Ff(a){var b,c;c=0;b=RD(this.b.Bc(a),16);if(b){c=b.gc();b.$b();this.a.d-=c}return c>0};_.Nc=function Gf(){return this.b.ec().Nc()};var EE=sfb(xve,'AbstractMapBasedMultimap/KeySet',327);feb(747,1,Ave,Hf);_.Nb=function If(a){Ztb(this,a)};_.Ob=function Jf(){return this.c.Ob()};_.Pb=function Kf(){this.a=RD(this.c.Pb(),44);return this.a.ld()};_.Qb=function Lf(){var a;Vb(!!this.a);a=RD(this.a.md(),16);this.c.Qb();this.b.a.d-=a.gc();a.$b();this.a=null};var DE=sfb(xve,'AbstractMapBasedMultimap/KeySet/1',747);feb(502,402,{85:1,133:1},Mf);_.bc=function Nf(){return this.Sc()};_.ec=function Qf(){return this.Uc()};_.Sc=function Of(){return new eg(this.c,this.Wc())};_.Tc=function Pf(){return this.Wc().Tc()};_.Uc=function Rf(){var a;return a=this.b,!a?(this.b=this.Sc()):a};_.Vc=function Sf(){return this.Wc().Vc()};_.Wc=function Tf(){return RD(this.d,133)};var IE=sfb(xve,'AbstractMapBasedMultimap/SortedAsMap',502);feb(446,502,Gve,Uf);_.bc=function Wf(){return new gg(this.a,RD(RD(this.d,133),139))};_.Sc=function Xf(){return new gg(this.a,RD(RD(this.d,133),139))};_.ec=function _f(){var a;return a=this.b,RD(!a?(this.b=new gg(this.a,RD(RD(this.d,133),139))):a,277)};_.Uc=function ag(){var a;return a=this.b,RD(!a?(this.b=new gg(this.a,RD(RD(this.d,133),139))):a,277)};_.Wc=function cg(){return RD(RD(this.d,133),139)};_.Xc=function Vf(a){return RD(RD(this.d,133),139).Xc(a)};_.Yc=function Yf(a){return RD(RD(this.d,133),139).Yc(a)};_.Zc=function Zf(a,b){return new Uf(this.a,RD(RD(this.d,133),139).Zc(a,b))};_.$c=function $f(a){return RD(RD(this.d,133),139).$c(a)};_._c=function bg(a){return RD(RD(this.d,133),139)._c(a)};_.ad=function dg(a,b){return new Uf(this.a,RD(RD(this.d,133),139).ad(a,b))};var FE=sfb(xve,'AbstractMapBasedMultimap/NavigableAsMap',446);feb(501,327,Hve,eg);_.Nc=function fg(){return this.b.ec().Nc()};var JE=sfb(xve,'AbstractMapBasedMultimap/SortedKeySet',501);feb(401,501,Ive,gg);var GE=sfb(xve,'AbstractMapBasedMultimap/NavigableKeySet',401);feb(551,31,Dve,lg);_.Fc=function mg(a){var b,c;ig(this);c=this.d.dc();b=this.d.Fc(a);if(b){++this.f.d;c&&hg(this)}return b};_.Gc=function ng(a){var b,c,d;if(a.dc()){return false}d=(ig(this),this.d.gc());b=this.d.Gc(a);if(b){c=this.d.gc();this.f.d+=c-d;d==0&&hg(this)}return b};_.$b=function og(){var a;a=(ig(this),this.d.gc());if(a==0){return}this.d.$b();this.f.d-=a;jg(this)};_.Hc=function pg(a){ig(this);return this.d.Hc(a)};_.Ic=function qg(a){ig(this);return this.d.Ic(a)};_.Fb=function rg(a){if(a===this){return true}ig(this);return pb(this.d,a)};_.Hb=function sg(){ig(this);return tb(this.d)};_.Kc=function tg(){ig(this);return new Og(this)};_.Mc=function ug(a){var b;ig(this);b=this.d.Mc(a);if(b){--this.f.d;jg(this)}return b};_.gc=function vg(){return kg(this)};_.Nc=function wg(){return ig(this),this.d.Nc()};_.Ib=function xg(){ig(this);return jeb(this.d)};var LE=sfb(xve,'AbstractMapBasedMultimap/WrappedCollection',551);var QK=ufb(Bve,'List');feb(744,551,{20:1,31:1,16:1,15:1},yg);_.jd=function Hg(a){tvb(this,a)};_.Nc=function Ig(){return ig(this),this.d.Nc()};_.bd=function zg(a,b){var c;ig(this);c=this.d.dc();RD(this.d,15).bd(a,b);++this.a.d;c&&hg(this)};_.cd=function Ag(a,b){var c,d,e;if(b.dc()){return false}e=(ig(this),this.d.gc());c=RD(this.d,15).cd(a,b);if(c){d=this.d.gc();this.a.d+=d-e;e==0&&hg(this)}return c};_.Xb=function Bg(a){ig(this);return RD(this.d,15).Xb(a)};_.dd=function Cg(a){ig(this);return RD(this.d,15).dd(a)};_.ed=function Dg(){ig(this);return new Ug(this)};_.fd=function Eg(a){ig(this);return new Vg(this,a)};_.gd=function Fg(a){var b;ig(this);b=RD(this.d,15).gd(a);--this.a.d;jg(this);return b};_.hd=function Gg(a,b){ig(this);return RD(this.d,15).hd(a,b)};_.kd=function Jg(a,b){ig(this);return Vc(this.a,this.e,RD(this.d,15).kd(a,b),!this.b?this:this.b)};var NE=sfb(xve,'AbstractMapBasedMultimap/WrappedList',744);feb(1126,744,{20:1,31:1,16:1,15:1,59:1},Kg);var HE=sfb(xve,'AbstractMapBasedMultimap/RandomAccessWrappedList',1126);feb(628,1,Ave,Og);_.Nb=function Qg(a){Ztb(this,a)};_.Ob=function Rg(){Ng(this);return this.b.Ob()};_.Pb=function Sg(){Ng(this);return this.b.Pb()};_.Qb=function Tg(){Mg(this)};var KE=sfb(xve,'AbstractMapBasedMultimap/WrappedCollection/WrappedIterator',628);feb(745,628,Jve,Ug,Vg);_.Qb=function _g(){Mg(this)};_.Rb=function Wg(a){var b;b=kg(this.a)==0;(Ng(this),RD(this.b,128)).Rb(a);++this.a.a.d;b&&hg(this.a)};_.Sb=function Xg(){return (Ng(this),RD(this.b,128)).Sb()};_.Tb=function Yg(){return (Ng(this),RD(this.b,128)).Tb()};_.Ub=function Zg(){return (Ng(this),RD(this.b,128)).Ub()};_.Vb=function $g(){return (Ng(this),RD(this.b,128)).Vb()};_.Wb=function ah(a){(Ng(this),RD(this.b,128)).Wb(a)};var ME=sfb(xve,'AbstractMapBasedMultimap/WrappedList/WrappedListIterator',745);feb(743,551,Hve,bh);_.Nc=function dh(){return ig(this),this.d.Nc()};var QE=sfb(xve,'AbstractMapBasedMultimap/WrappedSortedSet',743);feb(1125,743,Ive,eh);var OE=sfb(xve,'AbstractMapBasedMultimap/WrappedNavigableSet',1125);feb(1124,551,Fve,fh);_.Nc=function gh(){return ig(this),this.d.Nc()};var PE=sfb(xve,'AbstractMapBasedMultimap/WrappedSet',1124);feb(1133,1,{},hh);_.Kb=function ih(a){return fd(RD(a,44))};var RE=sfb(xve,'AbstractMapBasedMultimap/lambda$1$Type',1133);feb(1132,1,{},jh);_.Kb=function kh(a){return new gp(this.a,a)};var SE=sfb(xve,'AbstractMapBasedMultimap/lambda$2$Type',1132);var UK=ufb(Bve,'Map/Entry');feb(358,1,Kve);_.Fb=function lh(a){var b;if(ZD(a,44)){b=RD(a,44);return Hb(this.ld(),b.ld())&&Hb(this.md(),b.md())}return false};_.Hb=function mh(){var a,b;a=this.ld();b=this.md();return (a==null?0:tb(a))^(b==null?0:tb(b))};_.nd=function nh(a){throw Adb(new jib)};_.Ib=function oh(){return this.ld()+'='+this.md()};var UE=sfb(xve,Lve,358);feb(2086,31,Dve);_.$b=function ph(){this.od().$b()};_.Hc=function qh(a){var b;if(ZD(a,44)){b=RD(a,44);return Cc(this.od(),b.ld(),b.md())}return false};_.Mc=function rh(a){var b;if(ZD(a,44)){b=RD(a,44);return Gc(this.od(),b.ld(),b.md())}return false};_.gc=function sh(){return this.od().d};var yH=sfb(xve,'Multimaps/Entries',2086);feb(749,2086,Dve,th);_.Kc=function uh(){return this.a.kc()};_.od=function vh(){return this.a};_.Nc=function wh(){return this.a.lc()};var VE=sfb(xve,'AbstractMultimap/Entries',749);feb(750,749,Fve,xh);_.Nc=function Ah(){return this.a.lc()};_.Fb=function yh(a){return Rx(this,a)};_.Hb=function zh(){return Sx(this)};var WE=sfb(xve,'AbstractMultimap/EntrySet',750);feb(751,31,Dve,Bh);_.$b=function Ch(){this.a.$b()};_.Hc=function Dh(a){return Dc(this.a,a)};_.Kc=function Eh(){return this.a.nc()};_.gc=function Fh(){return this.a.d};_.Nc=function Gh(){return this.a.oc()};var XE=sfb(xve,'AbstractMultimap/Values',751);feb(2087,31,{849:1,20:1,31:1,16:1});_.Jc=function Oh(a){Qb(a);Ih(this).Jc(new lx(a))};_.Nc=function Sh(){var a;return a=Ih(this).Nc(),ek(a,new sx,64|a.yd()&1296,this.a.d)};_.Fc=function Kh(a){Hh();return true};_.Gc=function Lh(a){return Qb(this),Qb(a),ZD(a,552)?nx(RD(a,849)):!a.dc()&&xr(this,a.Kc())};_.Hc=function Mh(a){var b;return b=RD(Xv(nd(this.a),a),16),(!b?0:b.gc())>0};_.Fb=function Nh(a){return ox(this,a)};_.Hb=function Ph(){return tb(Ih(this))};_.dc=function Qh(){return Ih(this).dc()};_.Mc=function Rh(a){return Rw(this,a,1)>0};_.Ib=function Th(){return jeb(Ih(this))};var $E=sfb(xve,'AbstractMultiset',2087);feb(2089,2068,Fve);_.$b=function Uh(){Nc(this.a.a)};_.Hc=function Vh(a){var b,c;if(ZD(a,503)){c=RD(a,425);if(RD(c.a.md(),16).gc()<=0){return false}b=Qw(this.a,c.a.ld());return b==RD(c.a.md(),16).gc()}return false};_.Mc=function Wh(a){var b,c,d,e;if(ZD(a,503)){c=RD(a,425);b=c.a.ld();d=RD(c.a.md(),16).gc();if(d!=0){e=this.a;return qx(e,b,d)}}return false};var IH=sfb(xve,'Multisets/EntrySet',2089);feb(1139,2089,Fve,Xh);_.Kc=function Yh(){return new _w(fe(nd(this.a.a)).Kc())};_.gc=function Zh(){return nd(this.a.a).gc()};var ZE=sfb(xve,'AbstractMultiset/EntrySet',1139);feb(627,742,zve);_.hc=function ai(){return this.pd()};_.jc=function bi(){return this.qd()};_.cc=function ei(a){return this.rd(a)};_.fc=function gi(a){return this.sd(a)};_.Zb=function _h(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.qd=function ci(){return yob(),yob(),xob};_.Fb=function di(a){return xw(this,a)};_.rd=function fi(a){return RD(Qc(this,a),21)};_.sd=function hi(a){return RD(Sc(this,a),21)};_.mc=function ii(a){return yob(),new Lqb(RD(a,21))};_.pc=function ji(a,b){return new fh(this,a,RD(b,21))};var _E=sfb(xve,'AbstractSetMultimap',627);feb(1723,627,zve);_.hc=function mi(){return new yAb(this.b)};_.pd=function ni(){return new yAb(this.b)};_.jc=function oi(){return Zx(new yAb(this.b))};_.qd=function pi(){return Zx(new yAb(this.b))};_.cc=function qi(a){return RD(RD(Qc(this,a),21),87)};_.rd=function ri(a){return RD(RD(Qc(this,a),21),87)};_.fc=function si(a){return RD(RD(Sc(this,a),21),87)};_.sd=function ti(a){return RD(RD(Sc(this,a),21),87)};_.mc=function ui(a){return ZD(a,277)?Zx(RD(a,277)):(yob(),new jrb(RD(a,87)))};_.Zb=function li(){var a;return a=this.f,!a?(this.f=ZD(this.c,139)?new Uf(this,RD(this.c,139)):ZD(this.c,133)?new Mf(this,RD(this.c,133)):new ne(this,this.c)):a};_.pc=function vi(a,b){return ZD(b,277)?new eh(this,a,RD(b,277)):new bh(this,a,RD(b,87))};var bF=sfb(xve,'AbstractSortedSetMultimap',1723);feb(1724,1723,zve);_.Zb=function xi(){var a;return a=this.f,RD(RD(!a?(this.f=ZD(this.c,139)?new Uf(this,RD(this.c,139)):ZD(this.c,133)?new Mf(this,RD(this.c,133)):new ne(this,this.c)):a,133),139)};_.ec=function zi(){var a;return a=this.i,RD(RD(!a?(this.i=ZD(this.c,139)?new gg(this,RD(this.c,139)):ZD(this.c,133)?new eg(this,RD(this.c,133)):new zf(this,this.c)):a,87),277)};_.bc=function yi(){return ZD(this.c,139)?new gg(this,RD(this.c,139)):ZD(this.c,133)?new eg(this,RD(this.c,133)):new zf(this,this.c)};var aF=sfb(xve,'AbstractSortedKeySortedSetMultimap',1724);feb(2109,1,{2046:1});_.Fb=function Ai(a){return Qy(this,a)};_.Hb=function Bi(){var a;return Bob((a=this.g,!a?(this.g=new Di(this)):a))};_.Ib=function Ci(){var a;return Md((a=this.f,!a?(this.f=new Zj(this)):a))};var eF=sfb(xve,'AbstractTable',2109);feb(679,Eve,Fve,Di);_.$b=function Ei(){Xi()};_.Hc=function Fi(a){var b,c;if(ZD(a,478)){b=RD(a,697);c=RD(Xv(bj(this.a),Qm(b.c.e,b.b)),85);return !!c&&Nk(c.vc(),new gp(Qm(b.c.c,b.a),Ui(b.c,b.b,b.a)))}return false};_.Kc=function Gi(){return Vi(this.a)};_.Mc=function Hi(a){var b,c;if(ZD(a,478)){b=RD(a,697);c=RD(Xv(bj(this.a),Qm(b.c.e,b.b)),85);return !!c&&Ok(c.vc(),new gp(Qm(b.c.c,b.a),Ui(b.c,b.b,b.a)))}return false};_.gc=function Ii(){return dj(this.a)};_.Nc=function Ji(){return Wi(this.a)};var cF=sfb(xve,'AbstractTable/CellSet',679);feb(2025,31,Dve,Ki);_.$b=function Li(){Xi()};_.Hc=function Mi(a){return Yi(this.a,a)};_.Kc=function Ni(){return fj(this.a)};_.gc=function Oi(){return dj(this.a)};_.Nc=function Pi(){return gj(this.a)};var dF=sfb(xve,'AbstractTable/Values',2025);feb(1697,1696,zve);var fF=sfb(xve,'ArrayListMultimapGwtSerializationDependencies',1697);feb(520,1697,zve,Ri,Si);_.hc=function Ti(){return new cnb(this.a)};_.a=0;var gF=sfb(xve,'ArrayListMultimap',520);feb(678,2109,{678:1,2046:1,3:1},hj);var sF=sfb(xve,'ArrayTable',678);feb(2021,399,yve,ij);_.Xb=function jj(a){return new pj(this.a,a)};var hF=sfb(xve,'ArrayTable/1',2021);feb(2022,1,{},kj);_.td=function lj(a){return new pj(this.a,a)};var iF=sfb(xve,'ArrayTable/1methodref$getCell$Type',2022);feb(2110,1,{697:1});_.Fb=function mj(a){var b;if(a===this){return true}if(ZD(a,478)){b=RD(a,697);return Hb(Qm(this.c.e,this.b),Qm(b.c.e,b.b))&&Hb(Qm(this.c.c,this.a),Qm(b.c.c,b.a))&&Hb(Ui(this.c,this.b,this.a),Ui(b.c,b.b,b.a))}return false};_.Hb=function nj(){return Tnb(cD(WC(jJ,1),rve,1,5,[Qm(this.c.e,this.b),Qm(this.c.c,this.a),Ui(this.c,this.b,this.a)]))};_.Ib=function oj(){return '('+Qm(this.c.e,this.b)+','+Qm(this.c.c,this.a)+')='+Ui(this.c,this.b,this.a)};var bI=sfb(xve,'Tables/AbstractCell',2110);feb(478,2110,{478:1,697:1},pj);_.a=0;_.b=0;_.d=0;var jF=sfb(xve,'ArrayTable/2',478);feb(2024,1,{},qj);_.td=function rj(a){return _i(this.a,a)};var kF=sfb(xve,'ArrayTable/2methodref$getValue$Type',2024);feb(2023,399,yve,sj);_.Xb=function tj(a){return _i(this.a,a)};var lF=sfb(xve,'ArrayTable/3',2023);feb(2077,2065,Cve);_.$b=function vj(){Ar(this.kc())};_.vc=function wj(){return new gw(this)};_.lc=function xj(){return new Uwb(this.kc(),this.gc())};var pH=sfb(xve,'Maps/IteratorBasedAbstractMap',2077);feb(842,2077,Cve);_.$b=function Bj(){throw Adb(new jib)};_._b=function Cj(a){return En(this.c,a)};_.kc=function Dj(){return new Rj(this,this.c.b.c.gc())};_.lc=function Ej(){return fk(this.c.b.c.gc(),16,new Lj(this))};_.xc=function Fj(a){var b;b=RD(Fn(this.c,a),17);return !b?null:this.vd(b.a)};_.dc=function Gj(){return this.c.b.c.dc()};_.ec=function Hj(){return hn(this.c)};_.zc=function Ij(a,b){var c;c=RD(Fn(this.c,a),17);if(!c){throw Adb(new agb(this.ud()+' '+a+' not in '+hn(this.c)))}return this.wd(c.a,b)};_.Bc=function Jj(a){throw Adb(new jib)};_.gc=function Kj(){return this.c.b.c.gc()};var pF=sfb(xve,'ArrayTable/ArrayMap',842);feb(2020,1,{},Lj);_.td=function Mj(a){return yj(this.a,a)};var mF=sfb(xve,'ArrayTable/ArrayMap/0methodref$getEntry$Type',2020);feb(2018,358,Kve,Nj);_.ld=function Oj(){return zj(this.a,this.b)};_.md=function Pj(){return this.a.vd(this.b)};_.nd=function Qj(a){return this.a.wd(this.b,a)};_.b=0;var nF=sfb(xve,'ArrayTable/ArrayMap/1',2018);feb(2019,399,yve,Rj);_.Xb=function Sj(a){return yj(this.a,a)};var oF=sfb(xve,'ArrayTable/ArrayMap/2',2019);feb(2017,842,Cve,Tj);_.ud=function Uj(){return 'Column'};_.vd=function Vj(a){return Ui(this.b,this.a,a)};_.wd=function Wj(a,b){return cj(this.b,this.a,a,b)};_.a=0;var rF=sfb(xve,'ArrayTable/Row',2017);feb(843,842,Cve,Zj);_.vd=function _j(a){return new Tj(this.a,a)};_.zc=function ak(a,b){return RD(b,85),Xj()};_.wd=function bk(a,b){return RD(b,85),Yj()};_.ud=function $j(){return 'Row'};var qF=sfb(xve,'ArrayTable/RowMap',843);feb(1157,1,Pve,hk);_.Ad=function lk(a){return (this.a.yd()&-262&a)!=0};_.yd=function ik(){return this.a.yd()&-262};_.zd=function jk(){return this.a.zd()};_.Nb=function kk(a){this.a.Nb(new pk(a,this.b))};_.Bd=function mk(a){return this.a.Bd(new nk(a,this.b))};var yF=sfb(xve,'CollectSpliterators/1',1157);feb(1158,1,Qve,nk);_.Cd=function ok(a){this.a.Cd(this.b.Kb(a))};var tF=sfb(xve,'CollectSpliterators/1/lambda$0$Type',1158);feb(1159,1,Qve,pk);_.Cd=function qk(a){this.a.Cd(this.b.Kb(a))};var uF=sfb(xve,'CollectSpliterators/1/lambda$1$Type',1159);feb(1154,1,Pve,rk);_.Ad=function vk(a){return ((16464|this.b)&a)!=0};_.yd=function sk(){return 16464|this.b};_.zd=function tk(){return this.a.zd()};_.Nb=function uk(a){this.a.Qe(new zk(a,this.c))};_.Bd=function wk(a){return this.a.Re(new xk(a,this.c))};_.b=0;var xF=sfb(xve,'CollectSpliterators/1WithCharacteristics',1154);feb(1155,1,Rve,xk);_.Dd=function yk(a){this.a.Cd(this.b.td(a))};var vF=sfb(xve,'CollectSpliterators/1WithCharacteristics/lambda$0$Type',1155);feb(1156,1,Rve,zk);_.Dd=function Ak(a){this.a.Cd(this.b.td(a))};var wF=sfb(xve,'CollectSpliterators/1WithCharacteristics/lambda$1$Type',1156);feb(1150,1,Pve);_.Ad=function Gk(a){return (this.a&a)!=0};_.yd=function Dk(){return this.a};_.zd=function Ek(){!!this.e&&(this.b=Kgb(this.b,this.e.zd()));return Kgb(this.b,0)};_.Nb=function Fk(a){if(this.e){this.e.Nb(a);this.e=null}this.c.Nb(new Kk(this,a));this.b=0};_.Bd=function Hk(a){while(true){if(!!this.e&&this.e.Bd(a)){Pdb(this.b,Sve)&&(this.b=Vdb(this.b,1));return true}else{this.e=null}if(!this.c.Bd(new Ik(this))){return false}}};_.a=0;_.b=0;var CF=sfb(xve,'CollectSpliterators/FlatMapSpliterator',1150);feb(1152,1,Qve,Ik);_.Cd=function Jk(a){Bk(this.a,a)};var zF=sfb(xve,'CollectSpliterators/FlatMapSpliterator/lambda$0$Type',1152);feb(1153,1,Qve,Kk);_.Cd=function Lk(a){Ck(this.a,this.b,a)};var AF=sfb(xve,'CollectSpliterators/FlatMapSpliterator/lambda$1$Type',1153);feb(1151,1150,Pve,Mk);var BF=sfb(xve,'CollectSpliterators/FlatMapSpliteratorOfObject',1151);feb(253,1,Tve);_.Fd=function Sk(a){return this.Ed(RD(a,253))};_.Ed=function Rk(a){var b;if(a==(kl(),jl)){return 1}if(a==(Wk(),Vk)){return -1}b=(ux(),Leb(this.a,a.a));if(b!=0){return b}return ZD(this,526)==ZD(a,526)?0:ZD(this,526)?1:-1};_.Id=function Tk(){return this.a};_.Fb=function Uk(a){return Pk(this,a)};var HF=sfb(xve,'Cut',253);feb(1823,253,Tve,Xk);_.Ed=function Yk(a){return a==this?0:1};_.Gd=function Zk(a){throw Adb(new Ceb)};_.Hd=function $k(a){a.a+='+\u221E)'};_.Id=function _k(){throw Adb(new dgb(Uve))};_.Hb=function al(){return gib(),jFb(this)};_.Jd=function bl(a){return false};_.Ib=function cl(){return '+\u221E'};var Vk;var DF=sfb(xve,'Cut/AboveAll',1823);feb(526,253,{253:1,526:1,3:1,34:1},dl);_.Gd=function el(a){Yhb((a.a+='(',a),this.a)};_.Hd=function fl(a){Thb(Yhb(a,this.a),93)};_.Hb=function gl(){return ~tb(this.a)};_.Jd=function hl(a){return ux(),Leb(this.a,a)<0};_.Ib=function il(){return '/'+this.a+'\\'};var EF=sfb(xve,'Cut/AboveValue',526);feb(1822,253,Tve,ll);_.Ed=function ml(a){return a==this?0:-1};_.Gd=function nl(a){a.a+='(-\u221E'};_.Hd=function ol(a){throw Adb(new Ceb)};_.Id=function pl(){throw Adb(new dgb(Uve))};_.Hb=function ql(){return gib(),jFb(this)};_.Jd=function rl(a){return true};_.Ib=function sl(){return '-\u221E'};var jl;var FF=sfb(xve,'Cut/BelowAll',1822);feb(1824,253,Tve,tl);_.Gd=function ul(a){Yhb((a.a+='[',a),this.a)};_.Hd=function vl(a){Thb(Yhb(a,this.a),41)};_.Hb=function wl(){return tb(this.a)};_.Jd=function xl(a){return ux(),Leb(this.a,a)<=0};_.Ib=function yl(){return '\\'+this.a+'/'};var GF=sfb(xve,'Cut/BelowValue',1824);feb(547,1,Vve);_.Jc=function Bl(a){xgb(this,a)};_.Ib=function Cl(){return Lr(RD(Rb(this,'use Optional.orNull() instead of Optional.or(null)'),20).Kc())};var LF=sfb(xve,'FluentIterable',547);feb(442,547,Vve,Dl);_.Kc=function El(){return new is(Mr(this.a.Kc(),new ir))};var IF=sfb(xve,'FluentIterable/2',442);feb(1059,547,Vve,Gl);_.Kc=function Hl(){return Fl(this)};var KF=sfb(xve,'FluentIterable/3',1059);feb(724,399,yve,Il);_.Xb=function Jl(a){return this.a[a].Kc()};var JF=sfb(xve,'FluentIterable/3/1',724);feb(2070,1,{});_.Ib=function Kl(){return jeb(this.Kd().b)};var SF=sfb(xve,'ForwardingObject',2070);feb(2071,2070,Wve);_.Kd=function Ql(){return this.Ld()};_.Jc=function Rl(a){xgb(this,a)};_.Lc=function Ul(){return this.Oc()};_.Nc=function Xl(){return new Swb(this,0)};_.Oc=function Yl(){return new SDb(null,this.Nc())};_.Fc=function Ll(a){return this.Ld(),qpb()};_.Gc=function Ml(a){return this.Ld(),rpb()};_.$b=function Nl(){this.Ld(),spb()};_.Hc=function Ol(a){return this.Ld().Hc(a)};_.Ic=function Pl(a){return this.Ld().Ic(a)};_.dc=function Sl(){return this.Ld().b.dc()};_.Kc=function Tl(){return this.Ld().Kc()};_.Mc=function Vl(a){return this.Ld(),vpb()};_.gc=function Wl(){return this.Ld().b.gc()};_.Pc=function Zl(){return this.Ld().Pc()};_.Qc=function $l(a){return this.Ld().Qc(a)};var MF=sfb(xve,'ForwardingCollection',2071);feb(2078,31,Xve);_.Kc=function gm(){return this.Od()};_.Fc=function am(a){throw Adb(new jib)};_.Gc=function bm(a){throw Adb(new jib)};_.Md=function cm(){var a;a=this.c;return !a?(this.c=this.Nd()):a};_.$b=function dm(){throw Adb(new jib)};_.Hc=function em(a){return a!=null&&ze(this,a,false)};_.Nd=function fm(){switch(this.gc()){case 0:return tm(),tm(),sm;case 1:return tm(),new Dy(Qb(this.Od().Pb()));default:return new Fx(this,this.Pc());}};_.Mc=function hm(a){throw Adb(new jib)};var lG=sfb(xve,'ImmutableCollection',2078);feb(727,2078,Xve,im);_.Kc=function nm(){return Nr(this.a.Kc())};_.Hc=function jm(a){return a!=null&&this.a.Hc(a)};_.Ic=function km(a){return this.a.Ic(a)};_.dc=function lm(){return this.a.dc()};_.Od=function mm(){return Nr(this.a.Kc())};_.gc=function om(){return this.a.gc()};_.Pc=function pm(){return this.a.Pc()};_.Qc=function qm(a){return this.a.Qc(a)};_.Ib=function rm(){return jeb(this.a)};var NF=sfb(xve,'ForwardingImmutableCollection',727);feb(306,2078,Yve);_.Kc=function Em(){return this.Od()};_.ed=function Fm(){return this.Pd(0)};_.fd=function Hm(a){return this.Pd(a)};_.jd=function Lm(a){tvb(this,a)};_.Nc=function Mm(){return new Swb(this,16)};_.kd=function Om(a,b){return this.Qd(a,b)};_.bd=function wm(a,b){throw Adb(new jib)};_.cd=function xm(a,b){throw Adb(new jib)};_.Md=function ym(){return this};_.Fb=function Am(a){return $u(this,a)};_.Hb=function Bm(){return _u(this)};_.dd=function Cm(a){return a==null?-1:av(this,a)};_.Od=function Dm(){return this.Pd(0)};_.Pd=function Gm(a){return um(this,a)};_.gd=function Jm(a){throw Adb(new jib)};_.hd=function Km(a,b){throw Adb(new jib)};_.Qd=function Nm(a,b){var c;return Pm((c=new pv(this),new Rkb(c,a,b)))};var sm;var qG=sfb(xve,'ImmutableList',306);feb(2105,306,Yve);_.Kc=function Zm(){return Nr(this.Rd().Kc())};_.kd=function an(a,b){return Pm(this.Rd().kd(a,b))};_.Hc=function Rm(a){return a!=null&&this.Rd().Hc(a)};_.Ic=function Sm(a){return this.Rd().Ic(a)};_.Fb=function Tm(a){return pb(this.Rd(),a)};_.Xb=function Um(a){return Qm(this,a)};_.Hb=function Vm(){return tb(this.Rd())};_.dd=function Wm(a){return this.Rd().dd(a)};_.dc=function Xm(){return this.Rd().dc()};_.Od=function Ym(){return Nr(this.Rd().Kc())};_.gc=function $m(){return this.Rd().gc()};_.Qd=function _m(a,b){return Pm(this.Rd().kd(a,b))};_.Pc=function bn(){return this.Rd().Qc($C(jJ,rve,1,this.Rd().gc(),5,1))};_.Qc=function cn(a){return this.Rd().Qc(a)};_.Ib=function dn(){return jeb(this.Rd())};var OF=sfb(xve,'ForwardingImmutableList',2105);feb(729,1,$ve);_.vc=function pn(){return gn(this)};_.wc=function rn(a){Bvb(this,a)};_.ec=function vn(){return hn(this)};_.yc=function wn(a,b,c){return Cvb(this,a,b,c)};_.Cc=function Dn(){return this.Vd()};_.$b=function kn(){throw Adb(new jib)};_._b=function ln(a){return this.xc(a)!=null};_.uc=function mn(a){return this.Vd().Hc(a)};_.Td=function nn(){return new xq(this)};_.Ud=function on(){return new Gq(this)};_.Fb=function qn(a){return Tv(this,a)};_.Hb=function tn(){return gn(this).Hb()};_.dc=function un(){return this.gc()==0};_.zc=function zn(a,b){return jn()};_.Bc=function An(a){throw Adb(new jib)};_.Ib=function Bn(){return Zv(this)};_.Vd=function Cn(){if(this.e){return this.e}return this.e=this.Ud()};_.c=null;_.d=null;_.e=null;var en;var AG=sfb(xve,'ImmutableMap',729);feb(730,729,$ve);_._b=function Hn(a){return En(this,a)};_.uc=function In(a){return pqb(this.b,a)};_.Sd=function Jn(){return go(new Xn(this))};_.Td=function Kn(){return go(sqb(this.b))};_.Ud=function Ln(){return _l(),new im(tqb(this.b))};_.Fb=function Mn(a){return rqb(this.b,a)};_.xc=function Nn(a){return Fn(this,a)};_.Hb=function On(){return tb(this.b.c)};_.dc=function Pn(){return this.b.c.dc()};_.gc=function Qn(){return this.b.c.gc()};_.Ib=function Rn(){return jeb(this.b.c)};var QF=sfb(xve,'ForwardingImmutableMap',730);feb(2072,2071,_ve);_.Kd=function Sn(){return this.Wd()};_.Ld=function Tn(){return this.Wd()};_.Nc=function Wn(){return new Swb(this,1)};_.Fb=function Un(a){return a===this||this.Wd().Fb(a)};_.Hb=function Vn(){return this.Wd().Hb()};var TF=sfb(xve,'ForwardingSet',2072);feb(1085,2072,_ve,Xn);_.Kd=function Zn(){return qqb(this.a.b)};_.Ld=function $n(){return qqb(this.a.b)};_.Hc=function Yn(b){if(ZD(b,44)&&RD(b,44).ld()==null){return false}try{return Pqb(qqb(this.a.b),b)}catch(a){a=zdb(a);if(ZD(a,212)){return false}else throw Adb(a)}};_.Wd=function _n(){return qqb(this.a.b)};_.Qc=function ao(a){var b;b=Qqb(qqb(this.a.b),a);qqb(this.a.b).b.gc()<b.length&&bD(b,qqb(this.a.b).b.gc(),null);return b};var PF=sfb(xve,'ForwardingImmutableMap/1',1085);feb(2079,2078,awe);_.Kc=function eo(){return this.Od()};_.Nc=function fo(){return new Swb(this,1)};_.Fb=function bo(a){return Rx(this,a)};_.Hb=function co(){return Sx(this)};var CG=sfb(xve,'ImmutableSet',2079);feb(719,2079,awe);_.Kc=function no(){return Nr(new Ppb(this.a.b.Kc()))};_.Hc=function io(a){return a!=null&&tpb(this.a,a)};_.Ic=function jo(a){return upb(this.a,a)};_.Hb=function ko(){return tb(this.a.b)};_.dc=function lo(){return this.a.b.dc()};_.Od=function mo(){return Nr(new Ppb(this.a.b.Kc()))};_.gc=function oo(){return this.a.b.gc()};_.Pc=function po(){return this.a.b.Pc()};_.Qc=function qo(a){return wpb(this.a,a)};_.Ib=function ro(){return jeb(this.a.b)};var RF=sfb(xve,'ForwardingImmutableSet',719);feb(2073,2072,bwe);_.Kd=function so(){return this.b};_.Ld=function to(){return this.b};_.Wd=function uo(){return this.b};_.Nc=function vo(){return new $wb(this)};var UF=sfb(xve,'ForwardingSortedSet',2073);feb(543,2077,$ve,Io);_.Ac=function Ro(a){Ld(this,a)};_.Cc=function Uo(){var a;return a=this.d,new Gp(!a?(this.d=new mp(this)):a)};_.$b=function Jo(){wo(this)};_._b=function Ko(a){return !!Go(this,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))))};_.uc=function Lo(a){return xo(this,a)};_.kc=function Mo(){return new ap(this,this)};_.wc=function No(a){zo(this,a)};_.xc=function Oo(a){return Ao(this,a)};_.ec=function Po(){return new Np(this)};_.zc=function Qo(a,b){return Do(this,a,b)};_.Bc=function So(a){var b;b=Go(this,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))));if(!b){return null}else{yo(this,b);b.e=null;b.c=null;return b.i}};_.gc=function To(){return this.i};_.xd=function Vo(){var a;return a=this.d,new Gp(!a?(this.d=new mp(this)):a)};_.f=0;_.g=0;_.i=0;var fG=sfb(xve,'HashBiMap',543);feb(544,1,Ave);_.Nb=function Yo(a){Ztb(this,a)};_.Ob=function Zo(){return Wo(this)};_.Pb=function $o(){var a;if(!Wo(this)){throw Adb(new Dvb)}a=RD(Hvb(this.c),302);this.c=a.c;this.f=a;--this.d;return this.Xd(a)};_.Qb=function _o(){if(this.e.g!=this.b){throw Adb(new Jrb)}if(!this.f){throw Adb(new dgb(tve))}yo(this.e,this.f);this.b=this.e.g;this.f=null};_.b=0;_.d=0;_.f=null;var cG=sfb(xve,'HashBiMap/Itr',544);feb(1023,544,Ave,ap);_.Xd=function bp(a){return new cp(this,a)};var WF=sfb(xve,'HashBiMap/1',1023);feb(gwe,358,Kve,cp);_.ld=function dp(){return this.a.g};_.md=function ep(){return this.a.i};_.nd=function fp(a){var b,c,d;c=this.a.i;d=Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15)));if(d==this.a.f&&(dE(a)===dE(c)||a!=null&&pb(a,c))){return a}Nb(!Ho(this.b.a,a,d),a);yo(this.b.a,this.a);b=new kp(this.a.g,this.a.a,a,d);Bo(this.b.a,b,this.a);this.a.e=null;this.a.c=null;this.b.b=this.b.a.g;this.b.f==this.a&&(this.b.f=b);this.a=b;return c};var VF=sfb(xve,'HashBiMap/1/MapEntry',gwe);feb(246,358,{358:1,246:1,3:1,44:1},gp);_.ld=function hp(){return this.g};_.md=function ip(){return this.i};_.nd=function jp(a){throw Adb(new jib)};var mG=sfb(xve,'ImmutableEntry',246);feb(302,246,{358:1,302:1,246:1,3:1,44:1},kp);_.a=0;_.f=0;var XF=sfb(xve,'HashBiMap/BiEntry',302);feb(619,2077,$ve,mp);_.Ac=function vp(a){Ld(this,a)};_.Cc=function yp(){return new Np(this.a)};_.$b=function np(){wo(this.a)};_._b=function op(a){return xo(this.a,a)};_.kc=function pp(){return new Ap(this,this.a)};_.wc=function qp(a){Qb(a);zo(this.a,new Lp(a))};_.xc=function rp(a){return lp(this,a)};_.ec=function sp(){return new Gp(this)};_.zc=function up(a,b){return Eo(this.a,a,b,false)};_.Bc=function wp(a){var b;b=Ho(this.a,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))));if(!b){return null}else{yo(this.a,b);b.e=null;b.c=null;return b.g}};_.gc=function xp(){return this.a.i};_.xd=function zp(){return new Np(this.a)};var bG=sfb(xve,'HashBiMap/Inverse',619);feb(1020,544,Ave,Ap);_.Xd=function Bp(a){return new Cp(this,a)};var ZF=sfb(xve,'HashBiMap/Inverse/1',1020);feb(1021,358,Kve,Cp);_.ld=function Dp(){return this.a.i};_.md=function Ep(){return this.a.g};_.nd=function Fp(a){var b,c,d;d=this.a.g;b=Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15)));if(b==this.a.a&&(dE(a)===dE(d)||a!=null&&pb(a,d))){return a}Nb(!Go(this.b.a.a,a,b),a);yo(this.b.a.a,this.a);c=new kp(a,b,this.a.i,this.a.f);this.a=c;Bo(this.b.a.a,c,null);this.b.b=this.b.a.a.g;return d};var YF=sfb(xve,'HashBiMap/Inverse/1/InverseEntry',1021);feb(620,542,Fve,Gp);_.Kc=function Hp(){return new Jp(this.a.a)};_.Mc=function Ip(a){var b;b=Ho(this.a.a,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))));if(!b){return false}else{yo(this.a.a,b);return true}};var _F=sfb(xve,'HashBiMap/Inverse/InverseKeySet',620);feb(1019,544,Ave,Jp);_.Xd=function Kp(a){return a.i};var $F=sfb(xve,'HashBiMap/Inverse/InverseKeySet/1',1019);feb(1022,1,{},Lp);_.Yd=function Mp(a,b){tp(this.a,a,b)};var aG=sfb(xve,'HashBiMap/Inverse/lambda$0$Type',1022);feb(618,542,Fve,Np);_.Kc=function Op(){return new Qp(this.a)};_.Mc=function Pp(a){var b;b=Go(this.a,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))));if(!b){return false}else{yo(this.a,b);b.e=null;b.c=null;return true}};var eG=sfb(xve,'HashBiMap/KeySet',618);feb(1018,544,Ave,Qp);_.Xd=function Rp(a){return a.g};var dG=sfb(xve,'HashBiMap/KeySet/1',1018);feb(1123,627,zve);var gG=sfb(xve,'HashMultimapGwtSerializationDependencies',1123);feb(271,1123,zve,Tp);_.hc=function Up(){return new atb(Sv(this.a))};_.pd=function Vp(){return new atb(Sv(this.a))};_.a=2;var hG=sfb(xve,'HashMultimap',271);feb(2097,306,Yve);_.Hc=function Yp(a){return this.Zd().Hc(a)};_.dc=function Zp(){return this.Zd().dc()};_.gc=function $p(){return this.Zd().gc()};var iG=sfb(xve,'ImmutableAsList',2097);feb(2030,730,$ve);_.Vd=function aq(){return _l(),new Fy(this.a)};_.Cc=function bq(){return _l(),new Fy(this.a)};_.xd=function cq(){return _l(),new Fy(this.a)};var jG=sfb(xve,'ImmutableBiMap',2030);feb(2075,1,{});var kG=sfb(xve,'ImmutableCollection/Builder',2075);feb(1035,719,awe,dq);var nG=sfb(xve,'ImmutableEnumSet',1035);feb(980,399,yve,fq);_.Xb=function gq(a){return this.a.Xb(a)};var oG=sfb(xve,'ImmutableList/1',980);feb(979,2075,{},hq);var pG=sfb(xve,'ImmutableList/Builder',979);feb(623,204,wve,iq);_.Ob=function jq(){return this.a.Ob()};_.Pb=function kq(){return RD(this.a.Pb(),44).ld()};var rG=sfb(xve,'ImmutableMap/1',623);feb(1054,1,{},lq);_.Kb=function mq(a){return RD(a,44).ld()};var sG=sfb(xve,'ImmutableMap/2methodref$getKey$Type',1054);feb(1053,1,{},oq);var tG=sfb(xve,'ImmutableMap/Builder',1053);feb(2098,2079,awe);_.Md=function pq(){var a;return a=this.b,!a?(this.b=new Xq(this)):a};_.Nd=function qq(){return new Fx(this,Ee(this,$C(jJ,rve,1,this.gc(),5,1)))};var BG=sfb(xve,'ImmutableSet/CachingAsList',2098);feb(2099,2098,awe);_.Kc=function uq(){var a;return a=gn(this.a).Od(),new iq(a)};_.Nd=function rq(){return new Xq(this)};_.Jc=function sq(a){var b,c;Qb(a);c=this.gc();for(b=0;b<c;b++){a.Cd(RD(gn(this.a).Md().Xb(b),44).ld())}};_.Od=function tq(){var a;return a=this.b,um(!a?(this.b=new Xq(this)):a,0)};_.Nc=function vq(){return fk(this.gc(),1296,new Vq(this))};var FG=sfb(xve,'IndexedImmutableSet',2099);feb(1230,2099,awe,xq);_.Kc=function Bq(){var a;return a=gn(this.a).Od(),new iq(a)};_.Hc=function yq(a){return this.a._b(a)};_.Jc=function zq(a){Qb(a);Bvb(this.a,new Eq(a))};_.Od=function Aq(){var a;return a=gn(this.a).Od(),new iq(a)};_.gc=function Cq(){return this.a.gc()};_.Nc=function Dq(){return gk(gn(this.a).Nc(),new lq)};var vG=sfb(xve,'ImmutableMapKeySet',1230);feb(1231,1,{},Eq);_.Yd=function Fq(a,b){_l();this.a.Cd(a)};var uG=sfb(xve,'ImmutableMapKeySet/lambda$0$Type',1231);feb(1227,2078,Xve,Gq);_.Kc=function Kq(){return new Pq(this)};_.Md=function Hq(){var a;a=gn(this.a).Md();return new Sq(this,a)};_.Hc=function Iq(a){return a!=null&&Br(new Pq(this),a)};_.Od=function Jq(){return new Pq(this)};_.gc=function Lq(){return this.a.gc()};_.Nc=function Mq(){return gk(gn(this.a).Nc(),new Nq)};var zG=sfb(xve,'ImmutableMapValues',1227);feb(1228,1,{},Nq);_.Kb=function Oq(a){return RD(a,44).md()};var wG=sfb(xve,'ImmutableMapValues/0methodref$getValue$Type',1228);feb(637,204,wve,Pq);_.Ob=function Qq(){return this.a.Ob()};_.Pb=function Rq(){return RD(this.a.Pb(),44).md()};var xG=sfb(xve,'ImmutableMapValues/1',637);feb(1229,2097,Yve,Sq);_.Zd=function Tq(){return this.a};_.Xb=function Uq(a){return RD(this.b.Xb(a),44).md()};var yG=sfb(xve,'ImmutableMapValues/2',1229);feb(1232,1,{},Vq);_.td=function Wq(a){return wq(this.a,a)};var DG=sfb(xve,'IndexedImmutableSet/0methodref$get$Type',1232);feb(638,2097,Yve,Xq);_.Zd=function Yq(){return this.a};_.Xb=function Zq(a){return wq(this.a,a)};_.gc=function $q(){return this.a.a.gc()};var EG=sfb(xve,'IndexedImmutableSet/1',638);feb(43,1,{},ir);_.Kb=function jr(a){return RD(a,20).Kc()};_.Fb=function kr(a){return this===a};var GG=sfb(xve,'Iterables/10',43);feb(1055,547,Vve,mr);_.Jc=function nr(a){Qb(a);this.b.Jc(new qr(this.a,a))};_.Kc=function or(){return lr(this)};var IG=sfb(xve,'Iterables/4',1055);feb(1056,1,Qve,qr);_.Cd=function rr(a){pr(this.b,this.a,a)};var HG=sfb(xve,'Iterables/4/lambda$0$Type',1056);feb(1057,547,Vve,sr);_.Jc=function tr(a){Qb(a);xgb(this.a,new vr(a,this.b))};_.Kc=function ur(){return Mr(new dMd(this.a),this.b)};var KG=sfb(xve,'Iterables/5',1057);feb(1058,1,Qve,vr);_.Cd=function wr(a){this.a.Cd(Ksd(a))};var JG=sfb(xve,'Iterables/5/lambda$0$Type',1058);feb(1087,204,wve,Or);_.Ob=function Pr(){return this.a.Ob()};_.Pb=function Qr(){return this.a.Pb()};var LG=sfb(xve,'Iterators/1',1087);feb(1088,713,wve,Rr);_.Yb=function Sr(){var a;while(this.b.Ob()){a=this.b.Pb();if(this.a.Lb(a)){return a}}return this.e=2,null};var MG=sfb(xve,'Iterators/5',1088);feb(496,1,Ave);_.Nb=function Ur(a){Ztb(this,a)};_.Ob=function Vr(){return this.b.Ob()};_.Pb=function Wr(){return this.$d(this.b.Pb())};_.Qb=function Xr(){this.b.Qb()};var cI=sfb(xve,'TransformedIterator',496);feb(1089,496,Ave,Yr);_.$d=function Zr(a){return this.a.Kb(a)};var NG=sfb(xve,'Iterators/6',1089);feb(732,204,wve,$r);_.Ob=function _r(){return !this.a};_.Pb=function as(){if(this.a){throw Adb(new Dvb)}this.a=true;return this.b};_.a=false;var OG=sfb(xve,'Iterators/9',732);feb(1086,399,yve,ds);_.Xb=function es(a){return this.a[this.b+a]};_.b=0;var bs;var PG=sfb(xve,'Iterators/ArrayItr',1086);feb(37,1,{37:1,51:1},is);_.Nb=function js(a){Ztb(this,a)};_.Ob=function ks(){return gs(this)};_.Pb=function ls(){return hs(this)};_.Qb=function ms(){if(!this.c){throw Adb(new dgb(tve))}this.c.Qb();this.c=null};var QG=sfb(xve,'Iterators/ConcatenatedIterator',37);feb(22,1,{3:1,34:1,22:1});_.Fd=function rs(a){return ns(this,RD(a,22))};_.Fb=function ts(a){return this===a};_.Hb=function us(){return kFb(this)};_.Ib=function vs(){return ps(this)};_.g=0;var WI=sfb(mve,'Enum',22);feb(549,22,{549:1,3:1,34:1,22:1,51:1},As);_.Nb=function Bs(a){Ztb(this,a)};_.Ob=function Cs(){return false};_.Pb=function Ds(){throw Adb(new Dvb)};_.Qb=function Es(){Vb(false)};var ys;var RG=tfb(xve,'Iterators/EmptyModifiableIterator',549,WI,Gs,Fs);var Hs;feb(1907,627,zve);var XG=sfb(xve,'LinkedHashMultimapGwtSerializationDependencies',1907);feb(1908,1907,zve,Ks);_.hc=function Ms(){return new Jub(Sv(this.b))};_.$b=function Ls(){Nc(this);Ss(this.a,this.a)};_.pd=function Ns(){return new Jub(Sv(this.b))};_.ic=function Os(a){return new it(this,a,this.b)};_.kc=function Ps(){return new Zs(this)};_.lc=function Qs(){var a;return new Swb((a=this.g,RD(!a?(this.g=new xh(this)):a,21)),17)};_.ec=function Rs(){var a;return a=this.i,!a?(this.i=new zf(this,this.c)):a};_.nc=function Us(){return new cw(new Zs(this))};_.oc=function Vs(){var a;return gk(new Swb((a=this.g,RD(!a?(this.g=new xh(this)):a,21)),17),new Ws)};_.b=2;var YG=sfb(xve,'LinkedHashMultimap',1908);feb(1911,1,{},Ws);_.Kb=function Xs(a){return RD(a,44).md()};var SG=sfb(xve,'LinkedHashMultimap/0methodref$getValue$Type',1911);feb(834,1,Ave,Zs);_.Nb=function $s(a){Ztb(this,a)};_.Pb=function at(){return Ys(this)};_.Ob=function _s(){return this.a!=this.b.a};_.Qb=function bt(){Vb(!!this.c);Gc(this.b,this.c.g,this.c.i);this.c=null};var TG=sfb(xve,'LinkedHashMultimap/1',834);feb(227,246,{358:1,246:1,227:1,604:1,3:1,44:1},ct);_._d=function dt(){return RD(Hvb(this.f),604)};_.ae=function et(a){this.c=a};_.be=function ft(a){this.f=a};_.d=0;var UG=sfb(xve,'LinkedHashMultimap/ValueEntry',227);feb(1909,2068,{604:1,20:1,31:1,16:1,21:1},it);_.Fc=function jt(a){var b,c,d,e,f;f=Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15)));b=f&this.b.length-1;e=this.b[b];for(c=e;c;c=c.a){if(c.d==f&&Hb(c.i,a)){return false}}d=new ct(this.c,a,f,e);Ts(this.d,d);d.f=this;this.d=d;Ss(RD(Hvb(this.g.a.b),227),d);Ss(d,this.g.a);this.b[b]=d;++this.f;++this.e;gt(this);return true};_.$b=function kt(){var a,b;Mnb(this.b,null);this.f=0;for(a=this.a;a!=this;a=a._d()){b=RD(a,227);Ss(RD(Hvb(b.b),227),RD(Hvb(b.e),227))}this.a=this;this.d=this;++this.e};_.Hc=function lt(a){var b,c;c=Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15)));for(b=this.b[c&this.b.length-1];b;b=b.a){if(b.d==c&&Hb(b.i,a)){return true}}return false};_.Jc=function mt(a){var b;Qb(a);for(b=this.a;b!=this;b=b._d()){a.Cd(RD(b,227).i)}};_._d=function nt(){return this.a};_.Kc=function ot(){return new ut(this)};_.Mc=function pt(a){return ht(this,a)};_.ae=function qt(a){this.d=a};_.be=function rt(a){this.a=a};_.gc=function st(){return this.f};_.e=0;_.f=0;var WG=sfb(xve,'LinkedHashMultimap/ValueSet',1909);feb(1910,1,Ave,ut);_.Nb=function vt(a){Ztb(this,a)};_.Ob=function wt(){return tt(this),this.b!=this.c};_.Pb=function xt(){var a,b;tt(this);if(this.b==this.c){throw Adb(new Dvb)}a=RD(this.b,227);b=a.i;this.d=a;this.b=RD(Hvb(a.f),604);return b};_.Qb=function yt(){tt(this);Vb(!!this.d);ht(this.c,this.d.i);this.a=this.c.e;this.d=null};_.a=0;var VG=sfb(xve,'LinkedHashMultimap/ValueSet/1',1910);feb(780,2084,zve,Et);_.Zb=function Ft(){var a;return a=this.f,!a?(this.f=new zw(this)):a};_.Fb=function Kt(a){return xw(this,a)};_.cc=function Lt(a){return new su(this,a)};_.fc=function Ot(a){return Ct(this,a)};_.$b=function Gt(){At(this)};_._b=function Ht(a){return Bt(this,a)};_.ac=function It(){return new zw(this)};_.bc=function Jt(){return new vu(this)};_.qc=function Mt(a){return new su(this,a)};_.dc=function Nt(){return !this.a};_.rc=function Pt(a){return Ct(this,a)};_.gc=function Qt(){return this.d};_.c=0;_.d=0;var dH=sfb(xve,'LinkedListMultimap',780);feb(56,31,kwe);_.jd=function eu(a){tvb(this,a)};_.Nc=function fu(){return new Swb(this,16)};_.bd=function Tt(a,b){throw Adb(new kib('Add not supported on this list'))};_.Fc=function Ut(a){this.bd(this.gc(),a);return true};_.cd=function Vt(a,b){var c,d,e;uFb(b);c=false;for(e=b.Kc();e.Ob();){d=e.Pb();this.bd(a++,d);c=true}return c};_.$b=function Wt(){this.ce(0,this.gc())};_.Fb=function Xt(a){return Rt(this,a)};_.Hb=function Yt(){return Cob(this)};_.dd=function Zt(a){return St(this,a)};_.Kc=function $t(){return new Dkb(this)};_.ed=function _t(){return this.fd(0)};_.fd=function au(a){return new Jkb(this,a)};_.gd=function bu(a){throw Adb(new kib('Remove not supported on this list'))};_.ce=function cu(a,b){var c,d;d=this.fd(a);for(c=a;c<b;++c){d.Pb();d.Qb()}};_.hd=function du(a,b){throw Adb(new kib('Set not supported on this list'))};_.kd=function gu(a,b){return new Rkb(this,a,b)};_.j=0;var CJ=sfb(Bve,'AbstractList',56);feb(2062,56,kwe);_.bd=function lu(a,b){hu(this,a,b)};_.cd=function mu(a,b){return iu(this,a,b)};_.Xb=function nu(a){return ju(this,a)};_.Kc=function ou(){return this.fd(0)};_.gd=function pu(a){return ku(this,a)};_.hd=function qu(b,c){var d,e;d=this.fd(b);try{e=d.Pb();d.Wb(c);return e}catch(a){a=zdb(a);if(ZD(a,112)){throw Adb(new veb("Can't set element "+b))}else throw Adb(a)}};var QJ=sfb(Bve,'AbstractSequentialList',2062);feb(646,2062,kwe,su);_.fd=function tu(a){return ru(this,a)};_.gc=function uu(){var a;a=RD(Wjb(this.a.b,this.b),260);return !a?0:a.a};var $G=sfb(xve,'LinkedListMultimap/1',646);feb(1316,2068,Fve,vu);_.Hc=function wu(a){return Bt(this.a,a)};_.Kc=function xu(){return new Bu(this.a)};_.Mc=function yu(a){return !Ct(this.a,a).a.dc()};_.gc=function zu(){return bkb(this.a.b)};var ZG=sfb(xve,'LinkedListMultimap/1KeySetImpl',1316);feb(1315,1,Ave,Bu);_.Nb=function Cu(a){Ztb(this,a)};_.Ob=function Du(){Au(this);return !!this.c};_.Pb=function Eu(){Au(this);if(!this.c){throw Adb(new Dvb)}this.a=this.c;Ysb(this.d,this.a.a);do{this.c=this.c.b}while(!!this.c&&!Ysb(this.d,this.c.a));return this.a.a};_.Qb=function Fu(){Au(this);Vb(!!this.a);Ar(new Nu(this.e,this.a.a));this.a=null;this.b=this.e.c};_.b=0;var _G=sfb(xve,'LinkedListMultimap/DistinctKeyIterator',1315);feb(260,1,{260:1},Gu);_.a=0;var aH=sfb(xve,'LinkedListMultimap/KeyList',260);feb(511,358,{358:1,511:1,44:1},Hu);_.ld=function Iu(){return this.a};_.md=function Ju(){return this.f};_.nd=function Ku(a){var b;b=this.f;this.f=a;return b};var bH=sfb(xve,'LinkedListMultimap/Node',511);feb(566,1,Jve,Nu,Ou);_.Nb=function Qu(a){Ztb(this,a)};_.Rb=function Pu(a){this.e=zt(this.f,this.b,a,this.c);++this.d;this.a=null};_.Ob=function Ru(){return !!this.c};_.Sb=function Su(){return !!this.e};_.Pb=function Tu(){return Lu(this)};_.Tb=function Uu(){return this.d};_.Ub=function Vu(){return Mu(this)};_.Vb=function Wu(){return this.d-1};_.Qb=function Xu(){Vb(!!this.a);if(this.a!=this.c){this.e=this.a.e;--this.d}else{this.c=this.a.c}Dt(this.f,this.a);this.a=null};_.Wb=function Yu(a){Ub(!!this.a);this.a.f=a};_.d=0;var cH=sfb(xve,'LinkedListMultimap/ValueForKeyIterator',566);feb(1031,56,kwe);_.bd=function iv(a,b){this.a.bd(a,b)};_.cd=function jv(a,b){return this.a.cd(a,b)};_.Hc=function kv(a){return this.a.Hc(a)};_.Xb=function lv(a){return this.a.Xb(a)};_.gd=function mv(a){return this.a.gd(a)};_.hd=function nv(a,b){return this.a.hd(a,b)};_.gc=function ov(){return this.a.gc()};var fH=sfb(xve,'Lists/AbstractListWrapper',1031);feb(1032,1031,mwe);var gH=sfb(xve,'Lists/RandomAccessListWrapper',1032);feb(1034,1032,mwe,pv);_.fd=function qv(a){return this.a.fd(a)};var eH=sfb(xve,'Lists/1',1034);feb(441,56,{441:1,20:1,31:1,56:1,16:1,15:1},uv);_.bd=function vv(a,b){this.a.bd(tv(this,a),b)};_.$b=function wv(){this.a.$b()};_.Xb=function xv(a){return this.a.Xb(sv(this,a))};_.Kc=function yv(){return rv(this,0)};_.fd=function zv(a){return rv(this,a)};_.gd=function Av(a){return this.a.gd(sv(this,a))};_.ce=function Bv(a,b){(Tb(a,b,this.a.gc()),hv(this.a.kd(tv(this,b),tv(this,a)))).$b()};_.hd=function Cv(a,b){return this.a.hd(sv(this,a),b)};_.gc=function Dv(){return this.a.gc()};_.kd=function Ev(a,b){return Tb(a,b,this.a.gc()),hv(this.a.kd(tv(this,b),tv(this,a)))};var jH=sfb(xve,'Lists/ReverseList',441);feb(1030,441,{441:1,20:1,31:1,56:1,16:1,15:1,59:1},Fv);var hH=sfb(xve,'Lists/RandomAccessReverseList',1030);feb(1033,1,Jve,Gv);_.Nb=function Iv(a){Ztb(this,a)};_.Rb=function Hv(a){this.c.Rb(a);this.c.Ub();this.a=false};_.Ob=function Jv(){return this.c.Sb()};_.Sb=function Kv(){return this.c.Ob()};_.Pb=function Lv(){if(!this.c.Sb()){throw Adb(new Dvb)}this.a=true;return this.c.Ub()};_.Tb=function Mv(){return tv(this.b,this.c.Tb())};_.Ub=function Nv(){if(!this.c.Ob()){throw Adb(new Dvb)}this.a=true;return this.c.Pb()};_.Vb=function Ov(){return tv(this.b,this.c.Tb())-1};_.Qb=function Pv(){Vb(this.a);this.c.Qb();this.a=false};_.Wb=function Qv(a){Ub(this.a);this.c.Wb(a)};_.a=false;var iH=sfb(xve,'Lists/ReverseList/1',1033);feb(440,496,Ave,aw);_.$d=function bw(a){return _v(a)};var kH=sfb(xve,'Maps/1',440);feb(712,496,Ave,cw);_.$d=function dw(a){return RD(a,44).md()};var lH=sfb(xve,'Maps/2',712);feb(975,496,Ave,ew);_.$d=function fw(a){return new gp(a,Mw(this.a,a))};var mH=sfb(xve,'Maps/3',975);feb(972,2069,Fve,gw);_.Jc=function hw(a){uj(this.a,a)};_.Kc=function iw(){return this.a.kc()};_.Rc=function jw(){return this.a};_.Nc=function kw(){return this.a.lc()};var oH=sfb(xve,'Maps/IteratorBasedAbstractMap/1',972);feb(973,1,{},lw);_.Yd=function mw(a,b){this.a.Cd(a)};var qH=sfb(xve,'Maps/KeySet/lambda$0$Type',973);feb(971,31,Dve,nw);_.$b=function ow(){this.a.$b()};_.Hc=function pw(a){return this.a.uc(a)};_.Jc=function qw(a){Qb(a);this.a.wc(new vw(a))};_.dc=function rw(){return this.a.dc()};_.Kc=function sw(){return new cw(this.a.vc().Kc())};_.Mc=function tw(b){var c,d;try{return ze(this,b,true)}catch(a){a=zdb(a);if(ZD(a,48)){for(d=this.a.vc().Kc();d.Ob();){c=RD(d.Pb(),44);if(Hb(b,c.md())){this.a.Bc(c.ld());return true}}return false}else throw Adb(a)}};_.gc=function uw(){return this.a.gc()};var tH=sfb(xve,'Maps/Values',971);feb(974,1,{},vw);_.Yd=function ww(a,b){this.a.Cd(b)};var sH=sfb(xve,'Maps/Values/lambda$0$Type',974);feb(752,2085,Cve,zw);_.xc=function Dw(a){return this.a._b(a)?this.a.cc(a):null};_.Bc=function Gw(a){return this.a._b(a)?this.a.fc(a):null};_.$b=function Aw(){this.a.$b()};_._b=function Bw(a){return this.a._b(a)};_.Ec=function Cw(){return new Iw(this)};_.Dc=function(){return this.Ec()};_.dc=function Ew(){return this.a.dc()};_.ec=function Fw(){return this.a.ec()};_.gc=function Hw(){return this.a.ec().gc()};var xH=sfb(xve,'Multimaps/AsMap',752);feb(1134,2069,Fve,Iw);_.Kc=function Jw(){return Rv(this.a.a.ec(),new Nw(this))};_.Rc=function Kw(){return this.a};_.Mc=function Lw(a){var b;if(!Ze(this,a)){return false}b=RD(Hvb(RD(a,44)),44);yw(this.a,b.ld());return true};var wH=sfb(xve,'Multimaps/AsMap/EntrySet',1134);feb(1138,1,{},Nw);_.Kb=function Ow(a){return Mw(this,a)};_.Fb=function Pw(a){return this===a};var vH=sfb(xve,'Multimaps/AsMap/EntrySet/1',1138);feb(552,2087,{552:1,849:1,20:1,31:1,16:1},Sw);_.$b=function Tw(){Nc(this.a)};_.Hc=function Uw(a){return Oc(this.a,a)};_.Jc=function Vw(a){Qb(a);xgb(Pc(this.a),new fx(a))};_.Kc=function Ww(){return new aw(Pc(this.a).a.kc())};_.gc=function Xw(){return this.a.d};_.Nc=function Yw(){return gk(Pc(this.a).Nc(),new Zw)};var DH=sfb(xve,'Multimaps/Keys',552);feb(1136,1,{},Zw);_.Kb=function $w(a){return RD(a,44).ld()};var zH=sfb(xve,'Multimaps/Keys/0methodref$getKey$Type',1136);feb(1135,496,Ave,_w);_.$d=function ax(a){return new ex(RD(a,44))};var BH=sfb(xve,'Multimaps/Keys/1',1135);feb(2088,1,{425:1});_.Fb=function bx(a){var b;if(ZD(a,503)){b=RD(a,425);return RD(this.a.md(),16).gc()==RD(b.a.md(),16).gc()&&Hb(this.a.ld(),b.a.ld())}return false};_.Hb=function cx(){var a;a=this.a.ld();return (a==null?0:tb(a))^RD(this.a.md(),16).gc()};_.Ib=function dx(){var a,b;b=Ghb(this.a.ld());a=RD(this.a.md(),16).gc();return a==1?b:b+' x '+a};var HH=sfb(xve,'Multisets/AbstractEntry',2088);feb(503,2088,{503:1,425:1},ex);var AH=sfb(xve,'Multimaps/Keys/1/1',503);feb(1137,1,Qve,fx);_.Cd=function gx(a){this.a.Cd(RD(a,44).ld())};var CH=sfb(xve,'Multimaps/Keys/lambda$1$Type',1137);feb(1140,1,Qve,jx);_.Cd=function kx(a){hx(RD(a,425))};var EH=sfb(xve,'Multiset/lambda$0$Type',1140);feb(753,1,Qve,lx);_.Cd=function mx(a){ix(this.a,RD(a,425))};var FH=sfb(xve,'Multiset/lambda$1$Type',753);feb(1141,1,{},rx);var GH=sfb(xve,'Multisets/0methodref$add$Type',1141);feb(754,1,{},sx);_.Kb=function tx(a){return px(RD(a,425))};var JH=sfb(xve,'Multisets/lambda$1$Type',754);feb(2106,1,nve);var KH=sfb(xve,'RangeGwtSerializationDependencies',2106);feb(521,2106,{178:1,521:1,3:1,46:1},wx);_.Lb=function xx(a){return vx(this,RD(a,34))};_.Mb=function Bx(a){return vx(this,RD(a,34))};_.Fb=function zx(a){var b;if(ZD(a,521)){b=RD(a,521);return Pk(this.a,b.a)&&Pk(this.b,b.b)}return false};_.Hb=function Ax(){return this.a.Hb()*31+this.b.Hb()};_.Ib=function Cx(){return Dx(this.a,this.b)};var LH=sfb(xve,'Range',521);feb(654,2097,Yve,Fx);_.fd=function Jx(a){return um(this.b,a)};_.Zd=function Gx(){return this.a};_.Xb=function Hx(a){return Qm(this.b,a)};_.Pd=function Ix(a){return um(this.b,a)};var MH=sfb(xve,'RegularImmutableAsList',654);feb(656,2105,Yve,Kx);_.Rd=function Lx(){return this.a};var NH=sfb(xve,'RegularImmutableList',656);feb(548,730,$ve,Mx,Nx);var OH=sfb(xve,'RegularImmutableMap',548);feb(731,719,awe,Qx);var Ox;var PH=sfb(xve,'RegularImmutableSet',731);feb(2074,Eve,Fve);_.Kc=function by(){return new oy(this.a,this.b)};_.Fc=function $x(a){throw Adb(new jib)};_.Gc=function _x(a){throw Adb(new jib)};_.$b=function ay(){throw Adb(new jib)};_.Mc=function cy(a){throw Adb(new jib)};var VH=sfb(xve,'Sets/SetView',2074);feb(976,2074,Fve,ey);_.Kc=function iy(){return new oy(this.a,this.b)};_.Hc=function fy(a){return Bsb(this.a,a)&&this.b.Hc(a)};_.Ic=function gy(a){return Be(this.a,a)&&this.b.Ic(a)};_.dc=function hy(){return Aob(this.b,this.a)};_.Lc=function jy(){return CDb(new SDb(null,new Swb(this.a,1)),new qy(this.b))};_.gc=function ky(){return dy(this)};_.Oc=function ly(){return CDb(new SDb(null,new Swb(this.a,1)),new my(this.b))};var TH=sfb(xve,'Sets/2',976);feb(977,1,nwe,my);_.Mb=function ny(a){return this.a.Hc(a)};var QH=sfb(xve,'Sets/2/0methodref$contains$Type',977);feb(714,713,wve,oy);_.Yb=function py(){var a;while(Msb(this.a)){a=Nsb(this.a);if(this.c.Hc(a)){return a}}return this.e=2,null};var RH=sfb(xve,'Sets/2/1',714);feb(978,1,nwe,qy);_.Mb=function ry(a){return this.a.Hc(a)};var SH=sfb(xve,'Sets/2/1methodref$contains$Type',978);feb(616,2073,{616:1,3:1,20:1,16:1,277:1,21:1,87:1},sy);_.Kd=function ty(){return this.b};_.Ld=function uy(){return this.b};_.Wd=function vy(){return this.b};_.Jc=function wy(a){this.a.Jc(a)};_.Lc=function xy(){return this.a.Lc()};_.Oc=function yy(){return this.a.Oc()};var WH=sfb(xve,'Sets/UnmodifiableNavigableSet',616);feb(2031,2030,$ve,zy);_.Vd=function Ay(){return _l(),new Fy(this.a)};_.Cc=function By(){return _l(),new Fy(this.a)};_.xd=function Cy(){return _l(),new Fy(this.a)};var XH=sfb(xve,'SingletonImmutableBiMap',2031);feb(657,2105,Yve,Dy);_.Rd=function Ey(){return this.a};var YH=sfb(xve,'SingletonImmutableList',657);feb(363,2079,awe,Fy);_.Kc=function Iy(){return new $r(this.a)};_.Hc=function Gy(a){return pb(this.a,a)};_.Od=function Hy(){return new $r(this.a)};_.gc=function Jy(){return 1};var ZH=sfb(xve,'SingletonImmutableSet',363);feb(1148,1,{},My);_.Kb=function Ny(a){return RD(a,159)};var _H=sfb(xve,'Streams/lambda$0$Type',1148);feb(1149,1,owe,Oy);_.de=function Py(){Ky(this.a)};var aI=sfb(xve,'Streams/lambda$1$Type',1149);feb(1725,1724,zve,Ry);_.Zb=function Sy(){var a;return a=this.f,RD(RD(!a?(this.f=ZD(this.c,139)?new Uf(this,RD(this.c,139)):ZD(this.c,133)?new Mf(this,RD(this.c,133)):new ne(this,this.c)):a,133),139)};_.hc=function Vy(){return new yAb(this.b)};_.pd=function Wy(){return new yAb(this.b)};_.ec=function Yy(){var a;return a=this.i,RD(RD(!a?(this.i=ZD(this.c,139)?new gg(this,RD(this.c,139)):ZD(this.c,133)?new eg(this,RD(this.c,133)):new zf(this,this.c)):a,87),277)};_.ac=function Uy(){return ZD(this.c,139)?new Uf(this,RD(this.c,139)):ZD(this.c,133)?new Mf(this,RD(this.c,133)):new ne(this,this.c)};_.ic=function Xy(a){a==null&&this.a.Ne(a,a);return new yAb(this.b)};var dI=sfb(xve,'TreeMultimap',1725);feb(82,1,{3:1,82:1});_.ee=function pz(a){return new Error(a)};_.fe=function rz(){return this.e};_.ge=function sz(){var a,b,c;c=(this.k==null&&(this.k=$C(rJ,Nve,82,0,0,1)),this.k);b=$C(jJ,rve,1,c.length,5,1);for(a=0;a<c.length;a++){b[a]=c[a].e}return b};_.he=function tz(){return this.f};_.ie=function uz(){return this.g};_.je=function vz(){kz(this,qz(this.ee(lz(this,this.g))));gA(this)};_.Ib=function wz(){return lz(this,this.ie())};_.e=rwe;_.i=false;_.n=true;var rJ=sfb(mve,'Throwable',82);feb(103,82,{3:1,103:1,82:1});var YI=sfb(mve,'Exception',103);feb(63,103,swe,xz,yz);var kJ=sfb(mve,'RuntimeException',63);feb(607,63,swe);var dJ=sfb(mve,'JsException',607);feb(875,607,swe);var jI=sfb(twe,'JavaScriptExceptionBase',875);feb(485,875,{485:1,3:1,103:1,63:1,82:1},Cz);_.ie=function Fz(){Bz(this);return this.c};_.ke=function Gz(){return dE(this.b)===dE(zz)?null:this.b};var zz;var gI=sfb(vwe,'JavaScriptException',485);var hI=sfb(vwe,'JavaScriptObject$',0);var Jz;feb(2047,1,{});var iI=sfb(vwe,'Scheduler',2047);var Nz=0,Oz=0,Pz=-1;feb(902,2047,{},bA);var Zz;var kI=sfb(twe,'SchedulerImpl',902);var eA;feb(2058,1,{});var oI=sfb(twe,'StackTraceCreator/Collector',2058);feb(876,2058,{},mA);_.le=function nA(a){var b={},j;var c=[];a[xwe]=c;var d=arguments.callee.caller;while(d){var e=(fA(),d.name||(d.name=iA(d.toString())));c.push(e);var f=':'+e;var g=b[f];if(g){var h,i;for(h=0,i=g.length;h<i;h++){if(g[h]===d){return}}}(g||(b[f]=[])).push(d);d=d.caller}};_.me=function oA(a){var b,c,d,e;d=(fA(),a&&a[xwe]?a[xwe]:[]);c=d.length;e=$C(mJ,Nve,319,c,0,1);for(b=0;b<c;b++){e[b]=new ehb(d[b],null,-1)}return e};var lI=sfb(twe,'StackTraceCreator/CollectorLegacy',876);feb(2059,2058,{});_.le=function qA(a){};_.ne=function rA(a,b,c,d){return new ehb(b,a+'@'+d,c<0?-1:c)};_.me=function sA(a){var b,c,d,e,f,g;e=kA(a);f=$C(mJ,Nve,319,0,0,1);b=0;d=e.length;if(d==0){return f}g=pA(this,e[0]);lhb(g.d,wwe)||(f[b++]=g);for(c=1;c<d;c++){f[b++]=pA(this,e[c])}return f};var nI=sfb(twe,'StackTraceCreator/CollectorModern',2059);feb(877,2059,{},tA);_.ne=function uA(a,b,c,d){return new ehb(b,a,-1)};var mI=sfb(twe,'StackTraceCreator/CollectorModernNoSourceMap',877);feb(1064,1,{});var vI=sfb(Zwe,$we,1064);feb(624,1064,{624:1},XA);var VA;var pI=sfb(_we,$we,624);feb(2101,1,{});var wI=sfb(Zwe,axe,2101);feb(2102,2101,{});var qI=sfb(_we,axe,2102);feb(1120,1,{},aB);var ZA;var rI=sfb(_we,'LocaleInfo',1120);feb(2027,1,{},dB);_.a=0;var sI=sfb(_we,'TimeZone',2027);feb(1293,2102,{},jB);var tI=sfb('com.google.gwt.i18n.client.impl.cldr','DateTimeFormatInfoImpl',1293);feb(443,1,{443:1},kB);_.a=false;_.b=0;var uI=sfb(Zwe,'DateTimeFormat/PatternPart',443);feb(206,1,bxe,uB,vB,wB);_.Fd=function xB(a){return lB(this,RD(a,206))};_.Fb=function yB(a){return ZD(a,206)&&Gdb(Hdb(this.q.getTime()),Hdb(RD(a,206).q.getTime()))};_.Hb=function zB(){var a;a=Hdb(this.q.getTime());return Ydb($db(a,Udb(a,32)))};_.Ib=function BB(){var a,b,c;c=-this.q.getTimezoneOffset();a=(c>=0?'+':'')+(c/60|0);b=AB($wnd.Math.abs(c)%60);return (Mrb(),Krb)[this.q.getDay()]+' '+Lrb[this.q.getMonth()]+' '+AB(this.q.getDate())+' '+AB(this.q.getHours())+':'+AB(this.q.getMinutes())+':'+AB(this.q.getSeconds())+' GMT'+a+b+' '+this.q.getFullYear()};var qK=sfb(Bve,'Date',206);feb(2015,206,bxe,DB);_.a=false;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;_.g=false;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.p=0;var xI=sfb('com.google.gwt.i18n.shared.impl','DateRecord',2015);feb(2064,1,{});_.pe=function EB(){return null};_.qe=function FB(){return null};_.re=function GB(){return null};_.se=function HB(){return null};_.te=function IB(){return null};var GI=sfb(cxe,'JSONValue',2064);feb(221,2064,{221:1},MB,NB);_.Fb=function OB(a){if(!ZD(a,221)){return false}return Hz(this.a,RD(a,221).a)};_.oe=function PB(){return TB};_.Hb=function QB(){return Iz(this.a)};_.pe=function RB(){return this};_.Ib=function SB(){var a,b,c;c=new dib('[');for(b=0,a=this.a.length;b<a;b++){b>0&&(c.a+=',',c);Yhb(c,JB(this,b))}c.a+=']';return c.a};var yI=sfb(cxe,'JSONArray',221);feb(492,2064,{492:1},XB);_.oe=function YB(){return _B};_.qe=function ZB(){return this};_.Ib=function $B(){return Geb(),''+this.a};_.a=false;var UB,VB;var zI=sfb(cxe,'JSONBoolean',492);feb(997,63,swe,aC);var AI=sfb(cxe,'JSONException',997);feb(1036,2064,{},dC);_.oe=function eC(){return gC};_.Ib=function fC(){return vve};var bC;var BI=sfb(cxe,'JSONNull',1036);feb(263,2064,{263:1},hC);_.Fb=function iC(a){if(!ZD(a,263)){return false}return this.a==RD(a,263).a};_.oe=function jC(){return nC};_.Hb=function kC(){return Nfb(this.a)};_.re=function lC(){return this};_.Ib=function mC(){return this.a+''};_.a=0;var CI=sfb(cxe,'JSONNumber',263);feb(190,2064,{190:1},uC,vC);_.Fb=function wC(a){if(!ZD(a,190)){return false}return Hz(this.a,RD(a,190).a)};_.oe=function xC(){return BC};_.Hb=function yC(){return Iz(this.a)};_.se=function zC(){return this};_.Ib=function AC(){var a,b,c,d,e,f,g;g=new dib('{');a=true;f=oC(this,$C(qJ,Nve,2,0,6,1));for(c=f,d=0,e=c.length;d<e;++d){b=c[d];a?(a=false):(g.a+=pve,g);Zhb(g,Lz(b));g.a+=':';Yhb(g,qC(this,b))}g.a+='}';return g.a};var EI=sfb(cxe,'JSONObject',190);feb(605,Eve,Fve,CC);_.Hc=function DC(a){return bE(a)&&pC(this.a,WD(a))};_.Kc=function EC(){return new Dkb(new mob(this.b))};_.gc=function FC(){return this.b.length};var DI=sfb(cxe,'JSONObject/1',605);var GC;feb(211,2064,{211:1},OC);_.Fb=function PC(a){if(!ZD(a,211)){return false}return lhb(this.a,RD(a,211).a)};_.oe=function QC(){return UC};_.Hb=function RC(){return ohb(this.a)};_.te=function SC(){return this};_.Ib=function TC(){return Lz(this.a)};var FI=sfb(cxe,'JSONString',211);var eD;var ID,JD,KD,LD;feb(2060,1,{533:1});var II=sfb(kxe,'OutputStream',2060);feb(2061,2060,{533:1});var HI=sfb(kxe,'FilterOutputStream',2061);feb(878,2061,{533:1},oeb);var JI=sfb(kxe,'PrintStream',878);feb(427,1,{483:1});_.Ib=function seb(){return this.a};var KI=sfb(mve,'AbstractStringBuilder',427);feb(538,63,swe,teb);var LI=sfb(mve,'ArithmeticException',538);feb(77,63,lxe,ueb,veb);var aJ=sfb(mve,'IndexOutOfBoundsException',77);feb(333,77,{3:1,333:1,103:1,77:1,63:1,82:1},web,xeb);var MI=sfb(mve,'ArrayIndexOutOfBoundsException',333);feb(537,63,swe,yeb,zeb);var NI=sfb(mve,'ArrayStoreException',537);feb(295,82,mxe,Aeb);var XI=sfb(mve,'Error',295);feb(200,295,mxe,Ceb,Deb);var OI=sfb(mve,'AssertionError',200);ND={3:1,484:1,34:1};var Eeb,Feb;var QI=sfb(mve,'Boolean',484);feb(242,1,{3:1,242:1});var Meb;var iJ=sfb(mve,'Number',242);feb(222,242,{3:1,222:1,34:1,242:1},Seb);_.Fd=function Teb(a){return Reb(this,RD(a,222))};_.ue=function Ueb(){return this.a};_.Fb=function Veb(a){return ZD(a,222)&&RD(a,222).a==this.a};_.Hb=function Web(){return this.a};_.Ib=function Xeb(){return ''+this.a};_.a=0;var RI=sfb(mve,'Byte',222);var Yeb;feb(180,1,{3:1,180:1,34:1},bfb);_.Fd=function cfb(a){return afb(this,RD(a,180))};_.Fb=function efb(a){return ZD(a,180)&&RD(a,180).a==this.a};_.Hb=function ffb(){return this.a};_.Ib=function gfb(){return String.fromCharCode(this.a)};_.a=0;var _eb;var SI=sfb(mve,'Character',180);var ifb;feb(212,63,{3:1,212:1,103:1,63:1,82:1},Hfb,Ifb);var TI=sfb(mve,'ClassCastException',212);OD={3:1,34:1,345:1,242:1};var VI=sfb(mve,'Double',345);feb(161,242,{3:1,34:1,161:1,242:1},Tfb,Ufb);_.Fd=function Vfb(a){return Sfb(this,RD(a,161))};_.ue=function Wfb(){return this.a};_.Fb=function Xfb(a){return ZD(a,161)&&Lfb(this.a,RD(a,161).a)};_.Hb=function Yfb(){return eE(this.a)};_.Ib=function $fb(){return ''+this.a};_.a=0;var ZI=sfb(mve,'Float',161);feb(33,63,{3:1,103:1,33:1,63:1,82:1},_fb,agb,bgb);var $I=sfb(mve,'IllegalArgumentException',33);feb(73,63,swe,cgb,dgb);var _I=sfb(mve,'IllegalStateException',73);feb(17,242,{3:1,34:1,17:1,242:1},fgb);_.Fd=function igb(a){return egb(this,RD(a,17))};_.ue=function jgb(){return this.a};_.Fb=function kgb(a){return ZD(a,17)&&RD(a,17).a==this.a};_.Hb=function lgb(){return this.a};_.Ib=function rgb(){return ''+this.a};_.a=0;var bJ=sfb(mve,'Integer',17);var tgb;var vgb;feb(168,242,{3:1,34:1,168:1,242:1},zgb);_.Fd=function Bgb(a){return ygb(this,RD(a,168))};_.ue=function Cgb(){return Xdb(this.a)};_.Fb=function Dgb(a){return ZD(a,168)&&Gdb(RD(a,168).a,this.a)};_.Hb=function Egb(){return Fgb(this.a)};_.Ib=function Ggb(){return ''+Zdb(this.a)};_.a=0;var eJ=sfb(mve,'Long',168);var Igb;feb(2140,1,{});feb(1904,63,swe,Mgb);var fJ=sfb(mve,'NegativeArraySizeException',1904);feb(169,607,{3:1,103:1,169:1,63:1,82:1},Ngb,Ogb);_.ee=function Pgb(a){return new TypeError(a)};var gJ=sfb(mve,'NullPointerException',169);var Qgb,Rgb,Sgb,Tgb;feb(130,33,{3:1,103:1,33:1,130:1,63:1,82:1},Vgb);var hJ=sfb(mve,'NumberFormatException',130);feb(191,242,{3:1,34:1,242:1,191:1},Xgb);_.Fd=function Ygb(a){return Wgb(this,RD(a,191))};_.ue=function Zgb(){return this.a};_.Fb=function $gb(a){return ZD(a,191)&&RD(a,191).a==this.a};_.Hb=function _gb(){return this.a};_.Ib=function ahb(){return ''+this.a};_.a=0;var lJ=sfb(mve,'Short',191);var chb;feb(319,1,{3:1,319:1},ehb);_.Fb=function fhb(a){var b;if(ZD(a,319)){b=RD(a,319);return this.c==b.c&&this.d==b.d&&this.a==b.a&&this.b==b.b}return false};_.Hb=function ghb(){return Tnb(cD(WC(jJ,1),rve,1,5,[sgb(this.c),this.a,this.d,this.b]))};_.Ib=function hhb(){return this.a+'.'+this.d+'('+(this.b!=null?this.b:'Unknown Source')+(this.c>=0?':'+this.c:'')+')'};_.c=0;var mJ=sfb(mve,'StackTraceElement',319);PD={3:1,483:1,34:1,2:1};var qJ=sfb(mve,uwe,2);feb(111,427,{483:1},Qhb,Rhb,Shb);var nJ=sfb(mve,'StringBuffer',111);feb(104,427,{483:1},bib,cib,dib);var oJ=sfb(mve,'StringBuilder',104);feb(702,77,lxe,eib);var pJ=sfb(mve,'StringIndexOutOfBoundsException',702);feb(2145,1,{});var fib;feb(48,63,{3:1,103:1,63:1,82:1,48:1},jib,kib);var sJ=sfb(mve,'UnsupportedOperationException',48);feb(247,242,{3:1,34:1,242:1,247:1},Aib,Bib);_.Fd=function Eib(a){return uib(this,RD(a,247))};_.ue=function Fib(){return Neb(zib(this))};_.Fb=function Gib(a){var b;if(this===a){return true}if(ZD(a,247)){b=RD(a,247);return this.e==b.e&&uib(this,b)==0}return false};_.Hb=function Hib(){var a;if(this.b!=0){return this.b}if(this.a<54){a=Hdb(this.f);this.b=Ydb(Cdb(a,-1));this.b=33*this.b+Ydb(Cdb(Tdb(a,32),-1));this.b=17*this.b+eE(this.e);return this.b}this.b=17*Vib(this.c)+eE(this.e);return this.b};_.Ib=function Iib(){return zib(this)};_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var lib,mib,nib,oib,pib,qib,rib,sib;var tJ=sfb('java.math','BigDecimal',247);feb(92,242,{3:1,34:1,242:1,92:1},ajb,bjb,cjb,djb,ejb);_.Fd=function gjb(a){return Qib(this,RD(a,92))};_.ue=function hjb(){return Neb(Ajb(this,0))};_.Fb=function ijb(a){return Sib(this,a)};_.Hb=function ljb(){return Vib(this)};_.Ib=function njb(){return Ajb(this,0)};_.b=-2;_.c=0;_.d=0;_.e=0;var Jib,Kib,Lib,Mib,Nib,Oib;var uJ=sfb('java.math','BigInteger',92);var vjb,wjb;var Jjb,Kjb;feb(497,2065,Cve);_.$b=function dkb(){akb(this)};_._b=function ekb(a){return Ujb(this,a)};_.uc=function fkb(a){return Vjb(this,a,this.i)||Vjb(this,a,this.f)};_.vc=function gkb(){return new mkb(this)};_.xc=function hkb(a){return Wjb(this,a)};_.zc=function ikb(a,b){return Zjb(this,a,b)};_.Bc=function jkb(a){return _jb(this,a)};_.gc=function kkb(){return bkb(this)};_.g=0;var yJ=sfb(Bve,'AbstractHashMap',497);feb(267,Eve,Fve,mkb);_.$b=function nkb(){this.a.$b()};_.Hc=function okb(a){return lkb(this,a)};_.Kc=function pkb(){return new vkb(this.a)};_.Mc=function qkb(a){var b;if(lkb(this,a)){b=RD(a,44).ld();this.a.Bc(b);return true}return false};_.gc=function rkb(){return this.a.gc()};var xJ=sfb(Bve,'AbstractHashMap/EntrySet',267);feb(268,1,Ave,vkb);_.Nb=function wkb(a){Ztb(this,a)};_.Pb=function ykb(){return tkb(this)};_.Ob=function xkb(){return this.b};_.Qb=function zkb(){ukb(this)};_.b=false;_.d=0;var wJ=sfb(Bve,'AbstractHashMap/EntrySetIterator',268);feb(426,1,Ave,Dkb);_.Nb=function Ekb(a){Ztb(this,a)};_.Ob=function Fkb(){return Akb(this)};_.Pb=function Gkb(){return Bkb(this)};_.Qb=function Hkb(){Ckb(this)};_.b=0;_.c=-1;var zJ=sfb(Bve,'AbstractList/IteratorImpl',426);feb(98,426,Jve,Jkb);_.Qb=function Pkb(){Ckb(this)};_.Rb=function Kkb(a){Ikb(this,a)};_.Sb=function Lkb(){return this.b>0};_.Tb=function Mkb(){return this.b};_.Ub=function Nkb(){return sFb(this.b>0),this.a.Xb(this.c=--this.b)};_.Vb=function Okb(){return this.b-1};_.Wb=function Qkb(a){yFb(this.c!=-1);this.a.hd(this.c,a)};var AJ=sfb(Bve,'AbstractList/ListIteratorImpl',98);feb(244,56,kwe,Rkb);_.bd=function Skb(a,b){wFb(a,this.b);this.c.bd(this.a+a,b);++this.b};_.Xb=function Tkb(a){tFb(a,this.b);return this.c.Xb(this.a+a)};_.gd=function Ukb(a){var b;tFb(a,this.b);b=this.c.gd(this.a+a);--this.b;return b};_.hd=function Vkb(a,b){tFb(a,this.b);return this.c.hd(this.a+a,b)};_.gc=function Wkb(){return this.b};_.a=0;_.b=0;var BJ=sfb(Bve,'AbstractList/SubList',244);feb(266,Eve,Fve,Xkb);_.$b=function Ykb(){this.a.$b()};_.Hc=function Zkb(a){return this.a._b(a)};_.Kc=function $kb(){var a;return a=this.a.vc().Kc(),new blb(a)};_.Mc=function _kb(a){if(this.a._b(a)){this.a.Bc(a);return true}return false};_.gc=function alb(){return this.a.gc()};var EJ=sfb(Bve,'AbstractMap/1',266);feb(541,1,Ave,blb);_.Nb=function clb(a){Ztb(this,a)};_.Ob=function dlb(){return this.a.Ob()};_.Pb=function elb(){var a;return a=RD(this.a.Pb(),44),a.ld()};_.Qb=function flb(){this.a.Qb()};var DJ=sfb(Bve,'AbstractMap/1/1',541);feb(231,31,Dve,glb);_.$b=function hlb(){this.a.$b()};_.Hc=function ilb(a){return this.a.uc(a)};_.Kc=function jlb(){var a;return a=this.a.vc().Kc(),new llb(a)};_.gc=function klb(){return this.a.gc()};var GJ=sfb(Bve,'AbstractMap/2',231);feb(300,1,Ave,llb);_.Nb=function mlb(a){Ztb(this,a)};_.Ob=function nlb(){return this.a.Ob()};_.Pb=function olb(){var a;return a=RD(this.a.Pb(),44),a.md()};_.Qb=function plb(){this.a.Qb()};var FJ=sfb(Bve,'AbstractMap/2/1',300);feb(493,1,{493:1,44:1});_.Fb=function rlb(a){var b;if(!ZD(a,44)){return false}b=RD(a,44);return Fvb(this.d,b.ld())&&Fvb(this.e,b.md())};_.ld=function slb(){return this.d};_.md=function tlb(){return this.e};_.Hb=function ulb(){return Gvb(this.d)^Gvb(this.e)};_.nd=function vlb(a){return qlb(this,a)};_.Ib=function wlb(){return this.d+'='+this.e};var HJ=sfb(Bve,'AbstractMap/AbstractEntry',493);feb(397,493,{493:1,397:1,44:1},xlb);var IJ=sfb(Bve,'AbstractMap/SimpleEntry',397);feb(2082,1,Axe);_.Fb=function ylb(a){var b;if(!ZD(a,44)){return false}b=RD(a,44);return Fvb(this.ld(),b.ld())&&Fvb(this.md(),b.md())};_.Hb=function zlb(){return Gvb(this.ld())^Gvb(this.md())};_.Ib=function Alb(){return this.ld()+'='+this.md()};var JJ=sfb(Bve,Lve,2082);feb(2090,2065,Gve);_.Xc=function Dlb(a){return Vd(this.Ee(a))};_.tc=function Elb(a){return Blb(this,a)};_._b=function Flb(a){return Clb(this,a)};_.vc=function Glb(){return new Plb(this)};_.Tc=function Hlb(){return Klb(this.Ge())};_.Yc=function Ilb(a){return Vd(this.He(a))};_.xc=function Jlb(a){var b;b=a;return Wd(this.Fe(b))};_.$c=function Llb(a){return Vd(this.Ie(a))};_.ec=function Mlb(){return new Ulb(this)};_.Vc=function Nlb(){return Klb(this.Je())};_._c=function Olb(a){return Vd(this.Ke(a))};var OJ=sfb(Bve,'AbstractNavigableMap',2090);feb(629,Eve,Fve,Plb);_.Hc=function Qlb(a){return ZD(a,44)&&Blb(this.b,RD(a,44))};_.Kc=function Rlb(){return this.b.De()};_.Mc=function Slb(a){var b;if(ZD(a,44)){b=RD(a,44);return this.b.Le(b)}return false};_.gc=function Tlb(){return this.b.gc()};var LJ=sfb(Bve,'AbstractNavigableMap/EntrySet',629);feb(1146,Eve,Ive,Ulb);_.Nc=function $lb(){return new $wb(this)};_.$b=function Vlb(){this.a.$b()};_.Hc=function Wlb(a){return Clb(this.a,a)};_.Kc=function Xlb(){var a;a=this.a.vc().b.De();return new _lb(a)};_.Mc=function Ylb(a){if(Clb(this.a,a)){this.a.Bc(a);return true}return false};_.gc=function Zlb(){return this.a.gc()};var NJ=sfb(Bve,'AbstractNavigableMap/NavigableKeySet',1146);feb(1147,1,Ave,_lb);_.Nb=function amb(a){Ztb(this,a)};_.Ob=function bmb(){return Akb(this.a.a)};_.Pb=function cmb(){var a;a=vzb(this.a);return a.ld()};_.Qb=function dmb(){wzb(this.a)};var MJ=sfb(Bve,'AbstractNavigableMap/NavigableKeySet/1',1147);feb(2103,31,Dve);_.Fc=function emb(a){return zFb(lwb(this,a),Bxe),true};_.Gc=function fmb(a){uFb(a);mFb(a!=this,"Can't add a queue to itself");return ye(this,a)};_.$b=function gmb(){while(mwb(this)!=null);};var PJ=sfb(Bve,'AbstractQueue',2103);feb(310,31,{4:1,20:1,31:1,16:1},wmb,xmb);_.Fc=function ymb(a){return imb(this,a),true};_.$b=function Amb(){jmb(this)};_.Hc=function Bmb(a){return kmb(new Kmb(this),a)};_.dc=function Cmb(){return nmb(this)};_.Kc=function Dmb(){return new Kmb(this)};_.Mc=function Emb(a){return qmb(new Kmb(this),a)};_.gc=function Fmb(){return this.c-this.b&this.a.length-1};_.Nc=function Gmb(){return new Swb(this,272)};_.Qc=function Hmb(a){var b;b=this.c-this.b&this.a.length-1;a.length<b&&(a=cFb(new Array(b),a));lmb(this,a,b);a.length>b&&bD(a,b,null);return a};_.b=0;_.c=0;var TJ=sfb(Bve,'ArrayDeque',310);feb(458,1,Ave,Kmb);_.Nb=function Lmb(a){Ztb(this,a)};_.Ob=function Mmb(){return this.a!=this.b};_.Pb=function Nmb(){return Imb(this)};_.Qb=function Omb(){Jmb(this)};_.a=0;_.b=0;_.c=-1;var SJ=sfb(Bve,'ArrayDeque/IteratorImpl',458);feb(13,56,Cxe,bnb,cnb,dnb);_.bd=function enb(a,b){Qmb(this,a,b)};_.Fc=function fnb(a){return Rmb(this,a)};_.cd=function gnb(a,b){return Smb(this,a,b)};_.Gc=function hnb(a){return Tmb(this,a)};_.$b=function inb(){aFb(this.c,0)};_.Hc=function jnb(a){return Wmb(this,a,0)!=-1};_.Jc=function knb(a){Umb(this,a)};_.Xb=function lnb(a){return Vmb(this,a)};_.dd=function mnb(a){return Wmb(this,a,0)};_.dc=function nnb(){return this.c.length==0};_.Kc=function onb(){return new Anb(this)};_.gd=function pnb(a){return Xmb(this,a)};_.Mc=function qnb(a){return Ymb(this,a)};_.ce=function rnb(a,b){Zmb(this,a,b)};_.hd=function snb(a,b){return $mb(this,a,b)};_.gc=function tnb(){return this.c.length};_.jd=function unb(a){_mb(this,a)};_.Pc=function vnb(){return UEb(this.c)};_.Qc=function wnb(a){return anb(this,a)};var VJ=sfb(Bve,'ArrayList',13);feb(7,1,Ave,Anb);_.Nb=function Bnb(a){Ztb(this,a)};_.Ob=function Cnb(){return xnb(this)};_.Pb=function Dnb(){return ynb(this)};_.Qb=function Enb(){znb(this)};_.a=0;_.b=-1;var UJ=sfb(Bve,'ArrayList/1',7);feb(2112,$wnd.Function,{},iob);_.Me=function job(a,b){return Qfb(a,b)};feb(151,56,Dxe,mob);_.Hc=function nob(a){return St(this,a)!=-1};_.Jc=function oob(a){var b,c,d,e;uFb(a);for(c=this.a,d=0,e=c.length;d<e;++d){b=c[d];a.Cd(b)}};_.Xb=function pob(a){return kob(this,a)};_.hd=function qob(a,b){var c;c=(tFb(a,this.a.length),this.a[a]);bD(this.a,a,b);return c};_.gc=function rob(){return this.a.length};_.jd=function sob(a){Ynb(this.a,this.a.length,a)};_.Pc=function tob(){return lob(this,$C(jJ,rve,1,this.a.length,5,1))};_.Qc=function uob(a){return lob(this,a)};var WJ=sfb(Bve,'Arrays/ArrayList',151);var vob,wob,xob;feb(953,56,Dxe,Job);_.Hc=function Kob(a){return false};_.Xb=function Lob(a){return Iob(a)};_.Kc=function Mob(){return yob(),Qob(),Pob};_.ed=function Nob(){return yob(),Qob(),Pob};_.gc=function Oob(){return 0};var YJ=sfb(Bve,'Collections/EmptyList',953);feb(954,1,Jve,Rob);_.Nb=function Tob(a){Ztb(this,a)};_.Rb=function Sob(a){throw Adb(new jib)};_.Ob=function Uob(){return false};_.Sb=function Vob(){return false};_.Pb=function Wob(){throw Adb(new Dvb)};_.Tb=function Xob(){return 0};_.Ub=function Yob(){throw Adb(new Dvb)};_.Vb=function Zob(){return -1};_.Qb=function $ob(){throw Adb(new cgb)};_.Wb=function _ob(a){throw Adb(new cgb)};var Pob;var XJ=sfb(Bve,'Collections/EmptyListIterator',954);feb(956,2065,$ve,apb);_._b=function bpb(a){return false};_.uc=function cpb(a){return false};_.vc=function dpb(){return yob(),xob};_.xc=function epb(a){return null};_.ec=function fpb(){return yob(),xob};_.gc=function gpb(){return 0};_.Cc=function hpb(){return yob(),vob};var ZJ=sfb(Bve,'Collections/EmptyMap',956);feb(955,Eve,awe,ipb);_.Hc=function jpb(a){return false};_.Kc=function kpb(){return yob(),Qob(),Pob};_.gc=function lpb(){return 0};var $J=sfb(Bve,'Collections/EmptySet',955);feb(608,56,{3:1,20:1,31:1,56:1,16:1,15:1},mpb);_.Hc=function npb(a){return Fvb(this.a,a)};_.Xb=function opb(a){tFb(a,1);return this.a};_.gc=function ppb(){return 1};var _J=sfb(Bve,'Collections/SingletonList',608);feb(384,1,Wve,xpb);_.Jc=function Dpb(a){xgb(this,a)};_.Lc=function Gpb(){return new SDb(null,this.Nc())};_.Nc=function Jpb(){return new Swb(this,0)};_.Oc=function Kpb(){return new SDb(null,this.Nc())};_.Fc=function ypb(a){return qpb()};_.Gc=function zpb(a){return rpb()};_.$b=function Apb(){spb()};_.Hc=function Bpb(a){return tpb(this,a)};_.Ic=function Cpb(a){return upb(this,a)};_.dc=function Epb(){return this.b.dc()};_.Kc=function Fpb(){return new Ppb(this.b.Kc())};_.Mc=function Hpb(a){return vpb()};_.gc=function Ipb(){return this.b.gc()};_.Pc=function Lpb(){return this.b.Pc()};_.Qc=function Mpb(a){return wpb(this,a)};_.Ib=function Npb(){return jeb(this.b)};var bK=sfb(Bve,'Collections/UnmodifiableCollection',384);feb(383,1,Ave,Ppb);_.Nb=function Qpb(a){Ztb(this,a)};_.Ob=function Rpb(){return this.b.Ob()};_.Pb=function Spb(){return this.b.Pb()};_.Qb=function Tpb(){Opb()};var aK=sfb(Bve,'Collections/UnmodifiableCollectionIterator',383);feb(540,384,Exe,Upb);_.Nc=function fqb(){return new Swb(this,16)};_.bd=function Vpb(a,b){throw Adb(new jib)};_.cd=function Wpb(a,b){throw Adb(new jib)};_.Fb=function Xpb(a){return pb(this.a,a)};_.Xb=function Ypb(a){return this.a.Xb(a)};_.Hb=function Zpb(){return tb(this.a)};_.dd=function $pb(a){return this.a.dd(a)};_.dc=function _pb(){return this.a.dc()};_.ed=function aqb(){return new hqb(this.a.fd(0))};_.fd=function bqb(a){return new hqb(this.a.fd(a))};_.gd=function cqb(a){throw Adb(new jib)};_.hd=function dqb(a,b){throw Adb(new jib)};_.jd=function eqb(a){throw Adb(new jib)};_.kd=function gqb(a,b){return new Upb(this.a.kd(a,b))};var dK=sfb(Bve,'Collections/UnmodifiableList',540);feb(705,383,Jve,hqb);_.Qb=function nqb(){Opb()};_.Rb=function iqb(a){throw Adb(new jib)};_.Sb=function jqb(){return this.a.Sb()};_.Tb=function kqb(){return this.a.Tb()};_.Ub=function lqb(){return this.a.Ub()};_.Vb=function mqb(){return this.a.Vb()};_.Wb=function oqb(a){throw Adb(new jib)};var cK=sfb(Bve,'Collections/UnmodifiableListIterator',705);feb(609,1,Cve,uqb);_.wc=function Aqb(a){Bvb(this,a)};_.yc=function Fqb(a,b,c){return Cvb(this,a,b,c)};_.$b=function vqb(){throw Adb(new jib)};_._b=function wqb(a){return this.c._b(a)};_.uc=function xqb(a){return pqb(this,a)};_.vc=function yqb(){return qqb(this)};_.Fb=function zqb(a){return rqb(this,a)};_.xc=function Bqb(a){return this.c.xc(a)};_.Hb=function Cqb(){return tb(this.c)};_.dc=function Dqb(){return this.c.dc()};_.ec=function Eqb(){return sqb(this)};_.zc=function Gqb(a,b){throw Adb(new jib)};_.Bc=function Hqb(a){throw Adb(new jib)};_.gc=function Iqb(){return this.c.gc()};_.Ib=function Jqb(){return jeb(this.c)};_.Cc=function Kqb(){return tqb(this)};var hK=sfb(Bve,'Collections/UnmodifiableMap',609);feb(396,384,_ve,Lqb);_.Nc=function Oqb(){return new Swb(this,1)};_.Fb=function Mqb(a){return pb(this.b,a)};_.Hb=function Nqb(){return tb(this.b)};var jK=sfb(Bve,'Collections/UnmodifiableSet',396);feb(957,396,_ve,Sqb);_.Hc=function Tqb(a){return Pqb(this,a)};_.Ic=function Uqb(a){return this.b.Ic(a)};_.Kc=function Vqb(){var a;a=this.b.Kc();return new Yqb(a)};_.Pc=function Wqb(){var a;a=this.b.Pc();Rqb(a,a.length);return a};_.Qc=function Xqb(a){return Qqb(this,a)};var gK=sfb(Bve,'Collections/UnmodifiableMap/UnmodifiableEntrySet',957);feb(958,1,Ave,Yqb);_.Nb=function Zqb(a){Ztb(this,a)};_.Pb=function _qb(){return new brb(RD(this.a.Pb(),44))};_.Ob=function $qb(){return this.a.Ob()};_.Qb=function arb(){throw Adb(new jib)};var eK=sfb(Bve,'Collections/UnmodifiableMap/UnmodifiableEntrySet/1',958);feb(703,1,Axe,brb);_.Fb=function crb(a){return this.a.Fb(a)};_.ld=function drb(){return this.a.ld()};_.md=function erb(){return this.a.md()};_.Hb=function frb(){return this.a.Hb()};_.nd=function grb(a){throw Adb(new jib)};_.Ib=function hrb(){return jeb(this.a)};var fK=sfb(Bve,'Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry',703);feb(610,540,{20:1,16:1,15:1,59:1},irb);var iK=sfb(Bve,'Collections/UnmodifiableRandomAccessList',610);feb(704,396,bwe,jrb);_.Nc=function mrb(){return new $wb(this)};_.Fb=function krb(a){return pb(this.a,a)};_.Hb=function lrb(){return tb(this.a)};var kK=sfb(Bve,'Collections/UnmodifiableSortedSet',704);feb(858,1,Fxe,nrb);_.Ne=function orb(a,b){var c;return c=ygc(RD(a,12),RD(b,12)),c!=0?c:zgc(RD(a,12),RD(b,12))};_.Fb=function prb(a){return this===a};_.Oe=function qrb(){return new Frb(this)};var lK=sfb(Bve,'Comparator/lambda$0$Type',858);var rrb,srb,trb;feb(769,1,Fxe,wrb);_.Ne=function xrb(a,b){return vrb(RD(a,34),RD(b,34))};_.Fb=function yrb(a){return this===a};_.Oe=function zrb(){return urb(),trb};var mK=sfb(Bve,'Comparators/NaturalOrderComparator',769);feb(1226,1,Fxe,Brb);_.Ne=function Crb(a,b){return Arb(RD(a,34),RD(b,34))};_.Fb=function Drb(a){return this===a};_.Oe=function Erb(){return urb(),srb};var nK=sfb(Bve,'Comparators/ReverseNaturalOrderComparator',1226);feb(52,1,Fxe,Frb);_.Fb=function Hrb(a){return this===a};_.Ne=function Grb(a,b){return this.a.Ne(b,a)};_.Oe=function Irb(){return this.a};var oK=sfb(Bve,'Comparators/ReversedComparator',52);feb(175,63,swe,Jrb);var pK=sfb(Bve,'ConcurrentModificationException',175);var Krb,Lrb;feb(1948,1,Gxe,Prb);_.Pe=function Qrb(a){Nrb(this,a)};_.Ib=function Rrb(){return 'DoubleSummaryStatistics[count = '+Zdb(this.a)+', avg = '+(Idb(this.a,0)?Orb(this)/Xdb(this.a):0)+', min = '+this.c+', max = '+this.b+', sum = '+Orb(this)+']'};_.a=0;_.b=pxe;_.c=oxe;_.d=0;_.e=0;_.f=0;var rK=sfb(Bve,'DoubleSummaryStatistics',1948);feb(1868,63,swe,Srb);var sK=sfb(Bve,'EmptyStackException',1868);feb(460,2065,Cve,Zrb);_.zc=function dsb(a,b){return Xrb(this,a,b)};_.$b=function $rb(){Trb(this)};_._b=function _rb(a){return Urb(this,a)};_.uc=function asb(a){var b,c;for(c=new Osb(this.a);c.a<c.c.a.length;){b=Nsb(c);if(Fvb(a,this.b[b.g])){return true}}return false};_.vc=function bsb(){return new hsb(this)};_.xc=function csb(a){return Vrb(this,a)};_.Bc=function esb(a){return Yrb(this,a)};_.gc=function fsb(){return this.a.c};var wK=sfb(Bve,'EnumMap',460);feb(1340,Eve,Fve,hsb);_.$b=function isb(){Trb(this.a)};_.Hc=function jsb(a){return gsb(this,a)};_.Kc=function ksb(){return new nsb(this.a)};_.Mc=function lsb(a){var b;if(gsb(this,a)){b=RD(a,44).ld();Yrb(this.a,b);return true}return false};_.gc=function msb(){return this.a.a.c};var uK=sfb(Bve,'EnumMap/EntrySet',1340);feb(1341,1,Ave,nsb);_.Nb=function osb(a){Ztb(this,a)};_.Pb=function qsb(){return this.b=Nsb(this.a),new ssb(this.c,this.b)};_.Ob=function psb(){return Msb(this.a)};_.Qb=function rsb(){yFb(!!this.b);Yrb(this.c,this.b);this.b=null};var tK=sfb(Bve,'EnumMap/EntrySetIterator',1341);feb(1342,2082,Axe,ssb);_.ld=function tsb(){return this.a};_.md=function usb(){return this.b.b[this.a.g]};_.nd=function vsb(a){return _Eb(this.b.b,this.a.g,a)};var vK=sfb(Bve,'EnumMap/MapEntry',1342);feb(181,Eve,{20:1,31:1,16:1,181:1,21:1});var zK=sfb(Bve,'EnumSet',181);feb(162,181,{20:1,31:1,16:1,181:1,162:1,21:1},Fsb);_.Fc=function Gsb(a){return zsb(this,RD(a,22))};_.Hc=function Hsb(a){return Bsb(this,a)};_.Kc=function Isb(){return new Osb(this)};_.Mc=function Jsb(a){return Dsb(this,a)};_.gc=function Ksb(){return this.c};_.c=0;var yK=sfb(Bve,'EnumSet/EnumSetImpl',162);feb(356,1,Ave,Osb);_.Nb=function Psb(a){Ztb(this,a)};_.Pb=function Rsb(){return Nsb(this)};_.Ob=function Qsb(){return Msb(this)};_.Qb=function Ssb(){yFb(this.b!=-1);bD(this.c.b,this.b,null);--this.c.c;this.b=-1};_.a=-1;_.b=-1;var xK=sfb(Bve,'EnumSet/EnumSetImpl/IteratorImpl',356);feb(45,497,Hxe,Tsb,Usb,Vsb);_.Be=function Wsb(a,b){return dE(a)===dE(b)||a!=null&&pb(a,b)};_.Ce=function Xsb(a){var b;if(a==null){return 0}b=tb(a);return b|0};var AK=sfb(Bve,'HashMap',45);feb(49,Eve,Ixe,_sb,atb,btb);_.Fc=function dtb(a){return Ysb(this,a)};_.$b=function etb(){this.a.$b()};_.Hc=function ftb(a){return Zsb(this,a)};_.dc=function gtb(){return this.a.gc()==0};_.Kc=function htb(){return this.a.ec().Kc()};_.Mc=function itb(a){return $sb(this,a)};_.gc=function jtb(){return this.a.gc()};var BK=sfb(Bve,'HashSet',49);feb(1897,1,Rve,ltb);_.Dd=function mtb(a){ktb(this,a)};_.Ib=function ntb(){return 'IntSummaryStatistics[count = '+Zdb(this.a)+', avg = '+(Idb(this.a,0)?Xdb(this.d)/Xdb(this.a):0)+', min = '+this.c+', max = '+this.b+', sum = '+Zdb(this.d)+']'};_.a=0;_.b=qwe;_.c=lve;_.d=0;var CK=sfb(Bve,'IntSummaryStatistics',1897);feb(1062,1,Vve,ttb);_.Jc=function utb(a){xgb(this,a)};_.Kc=function vtb(){return new wtb(this)};_.c=0;var EK=sfb(Bve,'InternalHashCodeMap',1062);feb(726,1,Ave,wtb);_.Nb=function xtb(a){Ztb(this,a)};_.Pb=function ztb(){return this.d=this.a[this.c++],this.d};_.Ob=function ytb(){var a;if(this.c<this.a.length){return true}a=this.b.next();if(!a.done){this.a=a.value[1];this.c=0;return true}return false};_.Qb=function Atb(){stb(this.e,this.d.ld());this.c!=0&&--this.c};_.c=0;_.d=null;var DK=sfb(Bve,'InternalHashCodeMap/1',726);var Dtb;feb(1060,1,Vve,Ntb);_.Jc=function Otb(a){xgb(this,a)};_.Kc=function Ptb(){return new Qtb(this)};_.c=0;_.d=0;var HK=sfb(Bve,'InternalStringMap',1060);feb(725,1,Ave,Qtb);_.Nb=function Rtb(a){Ztb(this,a)};_.Pb=function Ttb(){return this.c=this.a,this.a=this.b.next(),new Vtb(this.d,this.c,this.d.d)};_.Ob=function Stb(){return !this.a.done};_.Qb=function Utb(){Mtb(this.d,this.c.value[0])};var FK=sfb(Bve,'InternalStringMap/1',725);feb(1061,2082,Axe,Vtb);_.ld=function Wtb(){return this.b.value[0]};_.md=function Xtb(){if(this.a.d!=this.c){return Ktb(this.a,this.b.value[0])}return this.b.value[1]};_.nd=function Ytb(a){return Ltb(this.a,this.b.value[0],a)};_.c=0;var GK=sfb(Bve,'InternalStringMap/2',1061);feb(215,45,Hxe,gub,hub);_.$b=function iub(){aub(this)};_._b=function jub(a){return bub(this,a)};_.uc=function kub(a){var b;b=this.d.a;while(b!=this.d){if(Fvb(b.e,a)){return true}b=b.a}return false};_.vc=function lub(){return new wub(this)};_.xc=function mub(a){return cub(this,a)};_.zc=function nub(a,b){return dub(this,a,b)};_.Bc=function oub(a){return fub(this,a)};_.gc=function pub(){return bkb(this.e)};_.c=false;var LK=sfb(Bve,'LinkedHashMap',215);feb(400,397,{493:1,397:1,400:1,44:1},tub,uub);var IK=sfb(Bve,'LinkedHashMap/ChainEntry',400);feb(715,Eve,Fve,wub);_.$b=function xub(){aub(this.a)};_.Hc=function yub(a){return vub(this,a)};_.Kc=function zub(){return new Dub(this)};_.Mc=function Aub(a){var b;if(vub(this,a)){b=RD(a,44).ld();fub(this.a,b);return true}return false};_.gc=function Bub(){return bkb(this.a.e)};var KK=sfb(Bve,'LinkedHashMap/EntrySet',715);feb(716,1,Ave,Dub);_.Nb=function Eub(a){Ztb(this,a)};_.Pb=function Gub(){return Cub(this)};_.Ob=function Fub(){return this.c!=this.d.a.d};_.Qb=function Hub(){yFb(!!this.a);rFb(this.d.a.e.g,this.b);rub(this.a);_jb(this.d.a.e,this.a.d);this.b=this.d.a.e.g;this.a=null};_.b=0;var JK=sfb(Bve,'LinkedHashMap/EntrySet/EntryIterator',716);feb(174,49,Ixe,Iub,Jub,Kub);var MK=sfb(Bve,'LinkedHashSet',174);feb(67,2062,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1},Yub,Zub);_.Fc=function $ub(a){return Mub(this,a)};_.$b=function _ub(){Xub(this)};_.fd=function avb(a){return Sub(this,a)};_.gc=function bvb(){return this.b};_.b=0;var PK=sfb(Bve,'LinkedList',67);feb(981,1,Jve,hvb);_.Nb=function jvb(a){Ztb(this,a)};_.Rb=function ivb(a){cvb(this,a)};_.Ob=function kvb(){return dvb(this)};_.Sb=function lvb(){return this.b.b!=this.d.a};_.Pb=function mvb(){return evb(this)};_.Tb=function nvb(){return this.a};_.Ub=function ovb(){return fvb(this)};_.Vb=function pvb(){return this.a-1};_.Qb=function qvb(){gvb(this)};_.Wb=function rvb(a){yFb(!!this.c);this.c.c=a};_.a=0;_.c=null;var NK=sfb(Bve,'LinkedList/ListIteratorImpl',981);feb(617,1,{},svb);var OK=sfb(Bve,'LinkedList/Node',617);feb(2057,1,{});var uvb,vvb;var TK=sfb(Bve,'Locale',2057);feb(873,2057,{},xvb);_.Ib=function yvb(){return ''};var RK=sfb(Bve,'Locale/1',873);feb(874,2057,{},zvb);_.Ib=function Avb(){return 'unknown'};var SK=sfb(Bve,'Locale/4',874);feb(112,63,{3:1,103:1,63:1,82:1,112:1},Dvb,Evb);var WK=sfb(Bve,'NoSuchElementException',112);feb(474,1,{474:1},Ovb);_.Fb=function Pvb(a){var b;if(a===this){return true}if(!ZD(a,474)){return false}b=RD(a,474);return Fvb(this.a,b.a)};_.Hb=function Qvb(){return Gvb(this.a)};_.Ib=function Rvb(){return this.a!=null?uve+Ghb(this.a)+')':'Optional.empty()'};var Jvb;var ZK=sfb(Bve,'Optional',474);feb(414,1,{414:1},Xvb,Yvb);_.Fb=function Zvb(a){var b;if(a===this){return true}if(!ZD(a,414)){return false}b=RD(a,414);return this.a==b.a&&Qfb(this.b,b.b)==0};_.Hb=function $vb(){return this.a?eE(this.b):0};_.Ib=function _vb(){return this.a?'OptionalDouble.of('+(''+this.b)+')':'OptionalDouble.empty()'};_.a=false;_.b=0;var Svb;var XK=sfb(Bve,'OptionalDouble',414);feb(524,1,{524:1},dwb,ewb);_.Fb=function fwb(a){var b;if(a===this){return true}if(!ZD(a,524)){return false}b=RD(a,524);return this.a==b.a&&hgb(this.b,b.b)==0};_.Hb=function gwb(){return this.a?this.b:0};_.Ib=function hwb(){return this.a?'OptionalInt.of('+(''+this.b)+')':'OptionalInt.empty()'};_.a=false;_.b=0;var awb;var YK=sfb(Bve,'OptionalInt',524);feb(510,2103,Dve,pwb);_.Gc=function qwb(a){return iwb(this,a)};_.$b=function rwb(){aFb(this.b.c,0)};_.Hc=function swb(a){return (a==null?-1:Wmb(this.b,a,0))!=-1};_.Kc=function twb(){return new zwb(this)};_.Mc=function uwb(a){return nwb(this,a)};_.gc=function vwb(){return this.b.c.length};_.Nc=function wwb(){return new Swb(this,256)};_.Pc=function xwb(){return UEb(this.b.c)};_.Qc=function ywb(a){return anb(this.b,a)};var _K=sfb(Bve,'PriorityQueue',510);feb(1296,1,Ave,zwb);_.Nb=function Awb(a){Ztb(this,a)};_.Ob=function Bwb(){return this.a<this.c.b.c.length};_.Pb=function Cwb(){sFb(this.a<this.c.b.c.length);this.b=this.a++;return Vmb(this.c.b,this.b)};_.Qb=function Dwb(){yFb(this.b!=-1);owb(this.c,this.a=this.b);this.b=-1};_.a=0;_.b=-1;var $K=sfb(Bve,'PriorityQueue/1',1296);feb(234,1,{234:1},Owb,Pwb);_.a=0;_.b=0;var Ewb,Fwb,Gwb=0;var aL=sfb(Bve,'Random',234);feb(25,1,Pve,Swb,Twb,Uwb);_.Ad=function Ywb(a){return (this.a&a)!=0};_.yd=function Vwb(){return this.a};_.zd=function Wwb(){Qwb(this);return this.c};_.Nb=function Xwb(a){Qwb(this);this.d.Nb(a)};_.Bd=function Zwb(a){return Rwb(this,a)};_.a=0;_.c=0;var qL=sfb(Bve,'Spliterators/IteratorSpliterator',25);feb(494,25,Pve,$wb);var cL=sfb(Bve,'SortedSet/1',494);feb(611,1,Gxe,axb);_.Pe=function bxb(a){this.a.Cd(a)};var dL=sfb(Bve,'Spliterator/OfDouble/0methodref$accept$Type',611);feb(612,1,Gxe,cxb);_.Pe=function dxb(a){this.a.Cd(a)};var eL=sfb(Bve,'Spliterator/OfDouble/1methodref$accept$Type',612);feb(613,1,Rve,exb);_.Dd=function fxb(a){this.a.Cd(sgb(a))};var fL=sfb(Bve,'Spliterator/OfInt/2methodref$accept$Type',613);feb(614,1,Rve,gxb);_.Dd=function hxb(a){this.a.Cd(sgb(a))};var gL=sfb(Bve,'Spliterator/OfInt/3methodref$accept$Type',614);feb(625,1,Pve);_.Nb=function nxb(a){_wb(this,a)};_.Ad=function oxb(a){return (this.d&a)!=0};_.yd=function lxb(){return this.d};_.zd=function mxb(){return this.e};_.d=0;_.e=0;var mL=sfb(Bve,'Spliterators/BaseSpliterator',625);feb(736,625,Pve);_.Qe=function qxb(a){ixb(this,a)};_.Nb=function rxb(a){ZD(a,189)?ixb(this,RD(a,189)):ixb(this,new cxb(a))};_.Bd=function sxb(a){return ZD(a,189)?this.Re(RD(a,189)):this.Re(new axb(a))};var hL=sfb(Bve,'Spliterators/AbstractDoubleSpliterator',736);feb(735,625,Pve);_.Qe=function uxb(a){ixb(this,a)};_.Nb=function vxb(a){ZD(a,202)?ixb(this,RD(a,202)):ixb(this,new gxb(a))};_.Bd=function wxb(a){return ZD(a,202)?this.Re(RD(a,202)):this.Re(new exb(a))};var iL=sfb(Bve,'Spliterators/AbstractIntSpliterator',735);feb(499,625,Pve);var jL=sfb(Bve,'Spliterators/AbstractSpliterator',499);feb(706,1,Pve);_.Nb=function Dxb(a){_wb(this,a)};_.Ad=function Exb(a){return (this.b&a)!=0};_.yd=function Bxb(){return this.b};_.zd=function Cxb(){return this.d-this.c};_.b=0;_.c=0;_.d=0;var lL=sfb(Bve,'Spliterators/BaseArraySpliterator',706);feb(960,706,Pve,Gxb);_.Se=function Hxb(a,b){Fxb(this,RD(a,41),b)};_.Nb=function Ixb(a){yxb(this,a)};_.Bd=function Jxb(a){return zxb(this,a)};var kL=sfb(Bve,'Spliterators/ArraySpliterator',960);feb(707,706,Pve,Lxb);_.Se=function Nxb(a,b){Kxb(this,RD(a,189),b)};_.Qe=function Oxb(a){yxb(this,a)};_.Nb=function Pxb(a){ZD(a,189)?yxb(this,RD(a,189)):yxb(this,new cxb(a))};_.Re=function Qxb(a){return zxb(this,a)};_.Bd=function Rxb(a){return ZD(a,189)?zxb(this,RD(a,189)):zxb(this,new axb(a))};var nL=sfb(Bve,'Spliterators/DoubleArraySpliterator',707);feb(2066,1,Pve);_.Nb=function Wxb(a){_wb(this,a)};_.Ad=function Xxb(a){return (16448&a)!=0};_.yd=function Uxb(){return 16448};_.zd=function Vxb(){return 0};var Sxb;var pL=sfb(Bve,'Spliterators/EmptySpliterator',2066);feb(959,2066,Pve,$xb);_.Qe=function _xb(a){Yxb(a)};_.Nb=function ayb(a){ZD(a,202)?Yxb(RD(a,202)):Yxb(new gxb(a))};_.Re=function byb(a){return Zxb(a)};_.Bd=function cyb(a){return ZD(a,202)?Zxb(RD(a,202)):Zxb(new exb(a))};var oL=sfb(Bve,'Spliterators/EmptySpliterator/OfInt',959);feb(588,56,Rxe,gyb);_.bd=function hyb(a,b){lyb(a,this.a.c.length+1);Qmb(this.a,a,b)};_.Fc=function iyb(a){return Rmb(this.a,a)};_.cd=function jyb(a,b){lyb(a,this.a.c.length+1);return Smb(this.a,a,b)};_.Gc=function kyb(a){return Tmb(this.a,a)};_.$b=function myb(){aFb(this.a.c,0)};_.Hc=function nyb(a){return Wmb(this.a,a,0)!=-1};_.Ic=function oyb(a){return Be(this.a,a)};_.Jc=function pyb(a){Umb(this.a,a)};_.Xb=function qyb(a){return lyb(a,this.a.c.length),Vmb(this.a,a)};_.dd=function ryb(a){return Wmb(this.a,a,0)};_.dc=function syb(){return this.a.c.length==0};_.Kc=function tyb(){return new Anb(this.a)};_.gd=function uyb(a){return lyb(a,this.a.c.length),Xmb(this.a,a)};_.ce=function vyb(a,b){Zmb(this.a,a,b)};_.hd=function wyb(a,b){return lyb(a,this.a.c.length),$mb(this.a,a,b)};_.gc=function xyb(){return this.a.c.length};_.jd=function yyb(a){_mb(this.a,a)};_.kd=function zyb(a,b){return new Rkb(this.a,a,b)};_.Pc=function Ayb(){return UEb(this.a.c)};_.Qc=function Byb(a){return anb(this.a,a)};_.Ib=function Cyb(){return Fe(this.a)};var EL=sfb(Bve,'Vector',588);feb(824,588,Rxe,Fyb);var rL=sfb(Bve,'Stack',824);feb(213,1,{213:1},Jyb);_.Ib=function Kyb(){return Iyb(this)};var sL=sfb(Bve,'StringJoiner',213);feb(553,2090,{3:1,85:1,139:1,133:1},dzb,ezb);_.$b=function fzb(){Lyb(this)};_.De=function gzb(){return new xzb(this)};_.vc=function hzb(){return new Dzb(this)};_.Ee=function izb(a){return Pyb(this,a,true)};_.Fe=function jzb(a){return Myb(this,a)};_.Ge=function kzb(){return Nyb(this)};_.He=function lzb(a){return Qyb(this,a,true)};_.Ie=function mzb(a){return Pyb(this,a,false)};_.Je=function nzb(){return Oyb(this)};_.Ke=function ozb(a){return Qyb(this,a,false)};_.Zc=function pzb(a,b){return Ryb(this,a,b)};_.zc=function qzb(a,b){return Wyb(this,a,b)};_.Bc=function rzb(a){return Xyb(this,a)};_.Le=function szb(a){return Yyb(this,a)};_.gc=function tzb(){return this.c};_.ad=function uzb(a,b){return czb(this,a,b)};_.c=0;var CL=sfb(Bve,'TreeMap',553);feb(554,1,Ave,xzb,yzb);_.Nb=function zzb(a){Ztb(this,a)};_.Pb=function Bzb(){return vzb(this)};_.Ob=function Azb(){return Akb(this.a)};_.Qb=function Czb(){wzb(this)};var tL=sfb(Bve,'TreeMap/EntryIterator',554);feb(1142,629,Fve,Dzb);_.$b=function Ezb(){Lyb(this.a)};var uL=sfb(Bve,'TreeMap/EntrySet',1142);feb(447,397,{493:1,397:1,44:1,447:1},Fzb);_.b=false;var vL=sfb(Bve,'TreeMap/Node',447);feb(630,1,{},Gzb);_.Ib=function Hzb(){return 'State: mv='+this.c+' value='+this.d+' done='+this.a+' found='+this.b};_.a=false;_.b=false;_.c=false;var wL=sfb(Bve,'TreeMap/State',630);feb(631,2090,Gve,Kzb);_.De=function Lzb(){return new yzb(this.c,this.f,this.b,this.a,this.e,this.d)};_.vc=function Mzb(){return new Plb(this)};_.Ee=function Nzb(a){return Izb(this,Pyb(this.c,a,true))};_.Fe=function Ozb(a){return Izb(this,Myb(this.c,a))};_.Ge=function Pzb(){var a;return this.f.Te()?this.a?(a=Pyb(this.c,this.b,true)):(a=Pyb(this.c,this.b,false)):(a=Nyb(this.c)),!!a&&Jzb(this,a.d)?a:null};_.He=function Qzb(a){return Izb(this,Qyb(this.c,a,true))};_.Ie=function Rzb(a){return Izb(this,Pyb(this.c,a,false))};_.Je=function Szb(){var a;this.f.Ue()?this.d?(a=Qyb(this.c,this.e,true)):(a=Qyb(this.c,this.e,false)):(a=Oyb(this.c));return !!a&&Jzb(this,a.d)?a:null};_.Ke=function Tzb(a){return Izb(this,Qyb(this.c,a,false))};_.Zc=function Uzb(a,b){if(this.f.Ue()&&this.c.a.Ne(a,this.e)>0){throw Adb(new agb(Sxe+a+' greater than '+this.e))}return this.f.Te()?bzb(this.c,this.b,this.a,a,b):Ryb(this.c,a,b)};_.zc=function Vzb(a,b){if(!Tyb(this.c,this.f,a,this.b,this.a,this.e,this.d)){throw Adb(new agb(a+' outside the range '+this.b+' to '+this.e))}return Wyb(this.c,a,b)};_.Bc=function Wzb(a){var b;b=a;if(!Tyb(this.c,this.f,b,this.b,this.a,this.e,this.d)){return null}return Xyb(this.c,b)};_.Le=function Xzb(a){return Jzb(this,a.ld())&&Yyb(this.c,a)};_.gc=function Yzb(){var a,b,c;this.f.Te()?this.a?(b=Pyb(this.c,this.b,true)):(b=Pyb(this.c,this.b,false)):(b=Nyb(this.c));if(!(!!b&&Jzb(this,b.d)?b:null)){return 0}a=0;for(c=new yzb(this.c,this.f,this.b,this.a,this.e,this.d);Akb(c.a);c.b=RD(Bkb(c.a),44)){++a}return a};_.ad=function Zzb(a,b){if(this.f.Te()&&this.c.a.Ne(a,this.b)<0){throw Adb(new agb(Sxe+a+Txe+this.b))}return this.f.Ue()?bzb(this.c,a,b,this.e,this.d):czb(this.c,a,b)};_.a=false;_.d=false;var BL=sfb(Bve,'TreeMap/SubMap',631);feb(303,22,Uxe,dAb);_.Te=function eAb(){return false};_.Ue=function fAb(){return false};var $zb,_zb,aAb,bAb;var AL=tfb(Bve,'TreeMap/SubMapType',303,WI,hAb,gAb);feb(1143,303,Uxe,iAb);_.Ue=function jAb(){return true};var xL=tfb(Bve,'TreeMap/SubMapType/1',1143,AL,null,null);feb(1144,303,Uxe,kAb);_.Te=function lAb(){return true};_.Ue=function mAb(){return true};var yL=tfb(Bve,'TreeMap/SubMapType/2',1144,AL,null,null);feb(1145,303,Uxe,nAb);_.Te=function oAb(){return true};var zL=tfb(Bve,'TreeMap/SubMapType/3',1145,AL,null,null);var pAb;feb(157,Eve,{3:1,20:1,31:1,16:1,277:1,21:1,87:1,157:1},xAb,yAb,zAb);_.Nc=function GAb(){return new $wb(this)};_.Fc=function AAb(a){return rAb(this,a)};_.$b=function BAb(){this.a.$b()};_.Hc=function CAb(a){return this.a._b(a)};_.Kc=function DAb(){return this.a.ec().Kc()};_.Mc=function EAb(a){return wAb(this,a)};_.gc=function FAb(){return this.a.gc()};var DL=sfb(Bve,'TreeSet',157);feb(1082,1,{},JAb);_.Ve=function KAb(a,b){return HAb(this.a,a,b)};var FL=sfb(Vxe,'BinaryOperator/lambda$0$Type',1082);feb(1083,1,{},LAb);_.Ve=function MAb(a,b){return IAb(this.a,a,b)};var GL=sfb(Vxe,'BinaryOperator/lambda$1$Type',1083);feb(952,1,{},NAb);_.Kb=function OAb(a){return a};var HL=sfb(Vxe,'Function/lambda$0$Type',952);feb(395,1,nwe,PAb);_.Mb=function QAb(a){return !this.a.Mb(a)};var IL=sfb(Vxe,'Predicate/lambda$2$Type',395);feb(581,1,{581:1});var JL=sfb(Wxe,'Handler',581);feb(2107,1,nve);_.xe=function TAb(){return 'DUMMY'};_.Ib=function UAb(){return this.xe()};var RAb;var LL=sfb(Wxe,'Level',2107);feb(1706,2107,nve,VAb);_.xe=function WAb(){return 'INFO'};var KL=sfb(Wxe,'Level/LevelInfo',1706);feb(1843,1,{},$Ab);var XAb;var ML=sfb(Wxe,'LogManager',1843);feb(1896,1,nve,aBb);_.b=null;var NL=sfb(Wxe,'LogRecord',1896);feb(525,1,{525:1},oBb);_.e=false;var bBb=false,cBb=false,dBb=false,eBb=false,fBb=false;var OL=sfb(Wxe,'Logger',525);feb(835,581,{581:1},rBb);var PL=sfb(Wxe,'SimpleConsoleLogHandler',835);feb(108,22,{3:1,34:1,22:1,108:1},yBb);var uBb,vBb,wBb;var QL=tfb(Zxe,'Collector/Characteristics',108,WI,ABb,zBb);var BBb;feb(758,1,{},DBb);var RL=sfb(Zxe,'CollectorImpl',758);feb(1074,1,{},RBb);_.Ve=function SBb(a,b){return Hyb(RD(a,213),RD(b,213))};var SL=sfb(Zxe,'Collectors/10methodref$merge$Type',1074);feb(1075,1,{},TBb);_.Kb=function UBb(a){return Iyb(RD(a,213))};var TL=sfb(Zxe,'Collectors/11methodref$toString$Type',1075);feb(1076,1,{},VBb);_.Kb=function WBb(a){return Geb(),SSb(a)?true:false};var UL=sfb(Zxe,'Collectors/12methodref$test$Type',1076);feb(144,1,{},XBb);_.Yd=function YBb(a,b){RD(a,16).Fc(b)};var VL=sfb(Zxe,'Collectors/20methodref$add$Type',144);feb(146,1,{},ZBb);_.Xe=function $Bb(){return new bnb};var WL=sfb(Zxe,'Collectors/21methodref$ctor$Type',146);feb(359,1,{},_Bb);_.Xe=function aCb(){return new _sb};var XL=sfb(Zxe,'Collectors/23methodref$ctor$Type',359);feb(360,1,{},bCb);_.Yd=function cCb(a,b){Ysb(RD(a,49),b)};var YL=sfb(Zxe,'Collectors/24methodref$add$Type',360);feb(1069,1,{},dCb);_.Ve=function eCb(a,b){return EBb(RD(a,15),RD(b,16))};var ZL=sfb(Zxe,'Collectors/4methodref$addAll$Type',1069);feb(1073,1,{},fCb);_.Yd=function gCb(a,b){Gyb(RD(a,213),RD(b,483))};var $L=sfb(Zxe,'Collectors/9methodref$add$Type',1073);feb(1072,1,{},hCb);_.Xe=function iCb(){return new Jyb(this.a,this.b,this.c)};var _L=sfb(Zxe,'Collectors/lambda$15$Type',1072);feb(1077,1,{},jCb);_.Xe=function kCb(){var a;return a=new gub,dub(a,(Geb(),false),new bnb),dub(a,true,new bnb),a};var aM=sfb(Zxe,'Collectors/lambda$22$Type',1077);feb(1078,1,{},lCb);_.Xe=function mCb(){return cD(WC(jJ,1),rve,1,5,[this.a])};var bM=sfb(Zxe,'Collectors/lambda$25$Type',1078);feb(1079,1,{},nCb);_.Yd=function oCb(a,b){GBb(this.a,SD(a))};var cM=sfb(Zxe,'Collectors/lambda$26$Type',1079);feb(1080,1,{},pCb);_.Ve=function qCb(a,b){return HBb(this.a,SD(a),SD(b))};var dM=sfb(Zxe,'Collectors/lambda$27$Type',1080);feb(1081,1,{},rCb);_.Kb=function sCb(a){return SD(a)[0]};var eM=sfb(Zxe,'Collectors/lambda$28$Type',1081);feb(728,1,{},uCb);_.Ve=function vCb(a,b){return tCb(a,b)};var fM=sfb(Zxe,'Collectors/lambda$4$Type',728);feb(145,1,{},wCb);_.Ve=function xCb(a,b){return JBb(RD(a,16),RD(b,16))};var gM=sfb(Zxe,'Collectors/lambda$42$Type',145);feb(361,1,{},yCb);_.Ve=function zCb(a,b){return KBb(RD(a,49),RD(b,49))};var hM=sfb(Zxe,'Collectors/lambda$50$Type',361);feb(362,1,{},ACb);_.Kb=function BCb(a){return RD(a,49)};var iM=sfb(Zxe,'Collectors/lambda$51$Type',362);feb(1068,1,{},CCb);_.Yd=function DCb(a,b){LBb(this.a,RD(a,85),b)};var jM=sfb(Zxe,'Collectors/lambda$7$Type',1068);feb(1070,1,{},ECb);_.Ve=function FCb(a,b){return NBb(RD(a,85),RD(b,85),new dCb)};var kM=sfb(Zxe,'Collectors/lambda$8$Type',1070);feb(1071,1,{},GCb);_.Kb=function HCb(a){return MBb(this.a,RD(a,85))};var lM=sfb(Zxe,'Collectors/lambda$9$Type',1071);feb(550,1,{});_.$e=function OCb(){ICb(this)};_.d=false;var TM=sfb(Zxe,'TerminatableStream',550);feb(827,550,$xe,WCb);_.$e=function XCb(){ICb(this)};var qM=sfb(Zxe,'DoubleStreamImpl',827);feb(1847,736,Pve,$Cb);_.Re=function aDb(a){return ZCb(this,RD(a,189))};_.a=null;var nM=sfb(Zxe,'DoubleStreamImpl/2',1847);feb(1848,1,Gxe,bDb);_.Pe=function cDb(a){_Cb(this.a,a)};var mM=sfb(Zxe,'DoubleStreamImpl/2/lambda$0$Type',1848);feb(1845,1,Gxe,dDb);_.Pe=function eDb(a){YCb(this.a,a)};var oM=sfb(Zxe,'DoubleStreamImpl/lambda$0$Type',1845);feb(1846,1,Gxe,fDb);_.Pe=function gDb(a){Nrb(this.a,a)};var pM=sfb(Zxe,'DoubleStreamImpl/lambda$2$Type',1846);feb(1397,735,Pve,kDb);_.Re=function lDb(a){return jDb(this,RD(a,202))};_.a=0;_.b=0;_.c=0;var rM=sfb(Zxe,'IntStream/5',1397);feb(806,550,$xe,oDb);_.$e=function pDb(){ICb(this)};_._e=function qDb(){return LCb(this),this.a};var vM=sfb(Zxe,'IntStreamImpl',806);feb(807,550,$xe,rDb);_.$e=function sDb(){ICb(this)};_._e=function tDb(){return LCb(this),Txb(),Sxb};var sM=sfb(Zxe,'IntStreamImpl/Empty',807);feb(1687,1,Rve,uDb);_.Dd=function vDb(a){ktb(this.a,a)};var uM=sfb(Zxe,'IntStreamImpl/lambda$4$Type',1687);var RM=ufb(Zxe,'Stream');feb(26,550,{533:1,687:1,848:1},SDb);_.$e=function TDb(){ICb(this)};var wDb;var QM=sfb(Zxe,'StreamImpl',26);feb(1102,499,Pve,YDb);_.Bd=function ZDb(a){while(WDb(this)){if(this.a.Bd(a)){return true}else{ICb(this.b);this.b=null;this.a=null}}return false};var xM=sfb(Zxe,'StreamImpl/1',1102);feb(1103,1,Qve,$Db);_.Cd=function _Db(a){XDb(this.a,RD(a,848))};var wM=sfb(Zxe,'StreamImpl/1/lambda$0$Type',1103);feb(1104,1,nwe,aEb);_.Mb=function bEb(a){return Ysb(this.a,a)};var yM=sfb(Zxe,'StreamImpl/1methodref$add$Type',1104);feb(1105,499,Pve,cEb);_.Bd=function dEb(a){var b;if(!this.a){b=new bnb;this.b.a.Nb(new eEb(b));yob();_mb(b,this.c);this.a=new Swb(b,16)}return Rwb(this.a,a)};_.a=null;var AM=sfb(Zxe,'StreamImpl/5',1105);feb(1106,1,Qve,eEb);_.Cd=function fEb(a){Rmb(this.a,a)};var zM=sfb(Zxe,'StreamImpl/5/2methodref$add$Type',1106);feb(737,499,Pve,hEb);_.Bd=function iEb(a){this.b=false;while(!this.b&&this.c.Bd(new jEb(this,a)));return this.b};_.b=false;var CM=sfb(Zxe,'StreamImpl/FilterSpliterator',737);feb(1096,1,Qve,jEb);_.Cd=function kEb(a){gEb(this.a,this.b,a)};var BM=sfb(Zxe,'StreamImpl/FilterSpliterator/lambda$0$Type',1096);feb(1091,736,Pve,nEb);_.Re=function oEb(a){return mEb(this,RD(a,189))};var EM=sfb(Zxe,'StreamImpl/MapToDoubleSpliterator',1091);feb(1095,1,Qve,pEb);_.Cd=function qEb(a){lEb(this.a,this.b,a)};var DM=sfb(Zxe,'StreamImpl/MapToDoubleSpliterator/lambda$0$Type',1095);feb(1090,735,Pve,tEb);_.Re=function uEb(a){return sEb(this,RD(a,202))};var GM=sfb(Zxe,'StreamImpl/MapToIntSpliterator',1090);feb(1094,1,Qve,vEb);_.Cd=function wEb(a){rEb(this.a,this.b,a)};var FM=sfb(Zxe,'StreamImpl/MapToIntSpliterator/lambda$0$Type',1094);feb(734,499,Pve,zEb);_.Bd=function AEb(a){return yEb(this,a)};var IM=sfb(Zxe,'StreamImpl/MapToObjSpliterator',734);feb(1093,1,Qve,BEb);_.Cd=function CEb(a){xEb(this.a,this.b,a)};var HM=sfb(Zxe,'StreamImpl/MapToObjSpliterator/lambda$0$Type',1093);feb(1092,499,Pve,DEb);_.Bd=function EEb(a){while(Idb(this.b,0)){if(!this.a.Bd(new FEb)){return false}this.b=Vdb(this.b,1)}return this.a.Bd(a)};_.b=0;var KM=sfb(Zxe,'StreamImpl/SkipSpliterator',1092);feb(1097,1,Qve,FEb);_.Cd=function GEb(a){};var JM=sfb(Zxe,'StreamImpl/SkipSpliterator/lambda$0$Type',1097);feb(626,1,Qve,IEb);_.Cd=function JEb(a){HEb(this,a)};var LM=sfb(Zxe,'StreamImpl/ValueConsumer',626);feb(1098,1,Qve,KEb);_.Cd=function LEb(a){xDb()};var MM=sfb(Zxe,'StreamImpl/lambda$0$Type',1098);feb(1099,1,Qve,MEb);_.Cd=function NEb(a){xDb()};var NM=sfb(Zxe,'StreamImpl/lambda$1$Type',1099);feb(1100,1,{},OEb);_.Ve=function PEb(a,b){return UDb(this.a,a,b)};var OM=sfb(Zxe,'StreamImpl/lambda$4$Type',1100);feb(1101,1,Qve,QEb);_.Cd=function REb(a){VDb(this.b,this.a,a)};var PM=sfb(Zxe,'StreamImpl/lambda$5$Type',1101);feb(1107,1,Qve,SEb);_.Cd=function TEb(a){PCb(this.a,RD(a,380))};var SM=sfb(Zxe,'TerminatableStream/lambda$0$Type',1107);feb(2142,1,{});feb(2014,1,{},gFb);var UM=sfb('javaemul.internal','ConsoleLogger',2014);var iFb=0;feb(2134,1,{});feb(1830,1,Qve,FFb);_.Cd=function GFb(a){RD(a,317)};var VM=sfb(eye,'BowyerWatsonTriangulation/lambda$0$Type',1830);feb(1831,1,Qve,HFb);_.Cd=function IFb(a){ye(this.a,RD(a,317).e)};var WM=sfb(eye,'BowyerWatsonTriangulation/lambda$1$Type',1831);feb(1832,1,Qve,JFb);_.Cd=function KFb(a){RD(a,177)};var XM=sfb(eye,'BowyerWatsonTriangulation/lambda$2$Type',1832);feb(1827,1,fye,NFb);_.Ne=function OFb(a,b){return MFb(this.a,RD(a,177),RD(b,177))};_.Fb=function PFb(a){return this===a};_.Oe=function QFb(){return new Frb(this)};var YM=sfb(eye,'NaiveMinST/lambda$0$Type',1827);feb(506,1,{},SFb);var ZM=sfb(eye,'NodeMicroLayout',506);feb(177,1,{177:1},TFb);_.Fb=function UFb(a){var b;if(ZD(a,177)){b=RD(a,177);return Fvb(this.a,b.a)&&Fvb(this.b,b.b)||Fvb(this.a,b.b)&&Fvb(this.b,b.a)}else{return false}};_.Hb=function VFb(){return Gvb(this.a)+Gvb(this.b)};var $M=sfb(eye,'TEdge',177);feb(317,1,{317:1},XFb);_.Fb=function YFb(a){var b;if(ZD(a,317)){b=RD(a,317);return WFb(this,b.a)&&WFb(this,b.b)&&WFb(this,b.c)}else{return false}};_.Hb=function ZFb(){return Gvb(this.a)+Gvb(this.b)+Gvb(this.c)};var _M=sfb(eye,'TTriangle',317);feb(225,1,{225:1},$Fb);var aN=sfb(eye,'Tree',225);feb(1218,1,{},aGb);var cN=sfb(gye,'Scanline',1218);var bN=ufb(gye,hye);feb(1758,1,{},dGb);var dN=sfb(iye,'CGraph',1758);feb(316,1,{316:1},fGb);_.b=0;_.c=0;_.d=0;_.g=0;_.i=0;_.k=pxe;var fN=sfb(iye,'CGroup',316);feb(830,1,{},jGb);var eN=sfb(iye,'CGroup/CGroupBuilder',830);feb(60,1,{60:1},kGb);_.Ib=function lGb(){var a;if(this.j){return WD(this.j.Kb(this))}return lfb(hN),hN.o+'@'+(a=kFb(this)>>>0,a.toString(16))};_.f=0;_.i=pxe;var hN=sfb(iye,'CNode',60);feb(829,1,{},qGb);var gN=sfb(iye,'CNode/CNodeBuilder',829);var vGb;feb(1590,1,{},xGb);_.ff=function yGb(a,b){return 0};_.gf=function zGb(a,b){return 0};var iN=sfb(iye,kye,1590);feb(1853,1,{},AGb);_.cf=function BGb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=oxe;for(d=new Anb(a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),60);j=$wnd.Math.min(j,b.a.j.d.c+b.b.a)}n=new Yub;for(g=new Anb(a.a.a);g.a<g.c.c.length;){f=RD(ynb(g),316);f.k=j;f.g==0&&(Pub(n,f,n.c.b,n.c),true)}while(n.b!=0){f=RD(n.b==0?null:(sFb(n.b!=0),Wub(n,n.a.a)),316);e=f.j.d.c;for(m=f.a.a.ec().Kc();m.Ob();){k=RD(m.Pb(),60);p=f.k+k.b.a;!LGb(a,f,a.d)||k.d.c<p?(k.i=p):(k.i=k.d.c)}e-=f.j.i;f.b+=e;a.d==(Cmd(),zmd)||a.d==xmd?(f.c+=e):(f.c-=e);for(l=f.a.a.ec().Kc();l.Ob();){k=RD(l.Pb(),60);for(i=k.c.Kc();i.Ob();){h=RD(i.Pb(),60);Dmd(a.d)?(o=a.g.ff(k,h)):(o=a.g.gf(k,h));h.a.k=$wnd.Math.max(h.a.k,k.i+k.d.b+o-h.b.a);MGb(a,h,a.d)&&(h.a.k=$wnd.Math.max(h.a.k,h.d.c-h.b.a));--h.a.g;h.a.g==0&&Mub(n,h.a)}}}for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.d.c=b.i}};var jN=sfb(iye,'LongestPathCompaction',1853);feb(1756,1,{},VGb);_.e=false;var CGb,DGb,EGb;var lN=sfb(iye,pye,1756);feb(1757,1,Qve,WGb);_.Cd=function XGb(a){NGb(this.a,RD(a,42))};var kN=sfb(iye,qye,1757);feb(1854,1,{},YGb);_.df=function ZGb(a){var b,c,d,e,f,g,h;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.c.$b()}for(e=new Anb(a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);for(g=new Anb(a.a.b);g.a<g.c.c.length;){f=RD(ynb(g),60);if(d==f){continue}if(!!d.a&&d.a==f.a){continue}Dmd(a.d)?(h=a.g.gf(d,f)):(h=a.g.ff(d,f));(f.d.c>d.d.c||d.d.c==f.d.c&&d.d.b<f.d.b)&&sGb(f.d.d+f.d.a+h,d.d.d)&&uGb(f.d.d,d.d.d+d.d.a+h)&&d.c.Fc(f)}}};var mN=sfb(iye,'QuadraticConstraintCalculation',1854);feb(529,1,{529:1},cHb);_.a=false;_.b=false;_.c=false;_.d=false;var nN=sfb(iye,rye,529);feb(817,1,{},fHb);_.df=function gHb(a){this.c=a;eHb(this,new xHb)};var tN=sfb(iye,sye,817);feb(1784,1,{693:1},lHb);_.bf=function mHb(a){iHb(this,RD(a,472))};var pN=sfb(iye,tye,1784);feb(1785,1,fye,oHb);_.Ne=function pHb(a,b){return nHb(RD(a,60),RD(b,60))};_.Fb=function qHb(a){return this===a};_.Oe=function rHb(){return new Frb(this)};var oN=sfb(iye,uye,1785);feb(472,1,{472:1},sHb);_.a=false;var qN=sfb(iye,vye,472);feb(1786,1,fye,tHb);_.Ne=function uHb(a,b){return hHb(RD(a,472),RD(b,472))};_.Fb=function vHb(a){return this===a};_.Oe=function wHb(){return new Frb(this)};var rN=sfb(iye,wye,1786);feb(1787,1,xye,xHb);_.Lb=function yHb(a){return RD(a,60),true};_.Fb=function zHb(a){return this===a};_.Mb=function AHb(a){return RD(a,60),true};var sN=sfb(iye,'ScanlineConstraintCalculator/lambda$1$Type',1787);feb(436,22,{3:1,34:1,22:1,436:1},EHb);var BHb,CHb;var uN=tfb(yye,'HighLevelSortingCriterion',436,WI,GHb,FHb);var HHb;feb(435,22,{3:1,34:1,22:1,435:1},MHb);var JHb,KHb;var vN=tfb(yye,'LowLevelSortingCriterion',435,WI,OHb,NHb);var PHb;var B2=ufb(zye,'ILayoutMetaDataProvider');feb(864,1,Eye,ZHb);_.hf=function $Hb(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Aye),Fye),'Polyomino Traversal Strategy'),'Traversal strategy for trying different candidate positions for polyominoes.'),XHb),(kid(),eid)),xN),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Bye),Fye),'Polyomino Secondary Sorting Criterion'),'Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion.'),VHb),eid),vN),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Cye),Fye),'Polyomino Primary Sorting Criterion'),'Possible primary sorting criteria for the processing order of polyominoes.'),THb),eid),uN),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Dye),Fye),'Fill Polyominoes'),'Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area.'),(Geb(),true)),cid),QI),xsb(Whd))))};var RHb,SHb,THb,UHb,VHb,WHb,XHb;var wN=sfb(yye,'PolyominoOptions',864);feb(257,22,{3:1,34:1,22:1,257:1},jIb);var _Hb,aIb,bIb,cIb,dIb,eIb,fIb,gIb,hIb;var xN=tfb(yye,'TraversalStrategy',257,WI,lIb,kIb);var mIb;feb(218,1,{218:1},pIb);_.Ib=function qIb(){return 'NEdge[id='+this.b+' w='+this.g+' d='+this.a+']'};_.a=1;_.b=0;_.c=0;_.f=false;_.g=0;var zN=sfb(Gye,'NEdge',218);feb(182,1,{},wIb);var yN=sfb(Gye,'NEdge/NEdgeBuilder',182);feb(662,1,{},BIb);var AN=sfb(Gye,'NGraph',662);feb(125,1,{125:1},DIb);_.c=-1;_.d=0;_.e=0;_.i=-1;_.j=false;var DN=sfb(Gye,'NNode',125);feb(808,1,Exe,GIb);_.Jc=function OIb(a){xgb(this,a)};_.Lc=function VIb(){return new SDb(null,new Swb(this,16))};_.jd=function $Ib(a){tvb(this,a)};_.Nc=function _Ib(){return new Swb(this,16)};_.Oc=function aJb(){return new SDb(null,new Swb(this,16))};_.bd=function HIb(a,b){++this.b;Qmb(this.a,a,b)};_.Fc=function IIb(a){return EIb(this,a)};_.cd=function JIb(a,b){++this.b;return Smb(this.a,a,b)};_.Gc=function KIb(a){++this.b;return Tmb(this.a,a)};_.$b=function LIb(){++this.b;aFb(this.a.c,0)};_.Hc=function MIb(a){return Wmb(this.a,a,0)!=-1};_.Ic=function NIb(a){return Be(this.a,a)};_.Xb=function PIb(a){return Vmb(this.a,a)};_.dd=function QIb(a){return Wmb(this.a,a,0)};_.dc=function RIb(){return this.a.c.length==0};_.Kc=function SIb(){return Nr(new Anb(this.a))};_.ed=function TIb(){throw Adb(new jib)};_.fd=function UIb(a){throw Adb(new jib)};_.gd=function WIb(a){++this.b;return Xmb(this.a,a)};_.Mc=function XIb(a){return FIb(this,a)};_.hd=function YIb(a,b){++this.b;return $mb(this.a,a,b)};_.gc=function ZIb(){return this.a.c.length};_.kd=function bJb(a,b){return new Rkb(this.a,a,b)};_.Pc=function cJb(){return UEb(this.a.c)};_.Qc=function dJb(a){return anb(this.a,a)};_.b=0;var BN=sfb(Gye,'NNode/ChangeAwareArrayList',808);feb(275,1,{},gJb);var CN=sfb(Gye,'NNode/NNodeBuilder',275);feb(1695,1,{},BJb);_.a=false;_.f=lve;_.j=0;var EN=sfb(Gye,'NetworkSimplex',1695);feb(1314,1,Qve,HJb);_.Cd=function IJb(a){GJb(this.a,RD(a,695),true,false)};var FN=sfb(Iye,'NodeLabelAndSizeCalculator/lambda$0$Type',1314);feb(565,1,{},PJb);_.b=true;_.c=true;_.d=true;_.e=true;var GN=sfb(Iye,'NodeMarginCalculator',565);feb(217,1,{217:1});_.j=false;_.k=false;var IN=sfb(Jye,'Cell',217);feb(127,217,{127:1,217:1},TJb);_.jf=function UJb(){return SJb(this)};_.kf=function VJb(){var a;a=this.n;return this.a.a+a.b+a.c};var HN=sfb(Jye,'AtomicCell',127);feb(237,22,{3:1,34:1,22:1,237:1},$Jb);var WJb,XJb,YJb;var JN=tfb(Jye,'ContainerArea',237,WI,aKb,_Jb);var bKb;feb(336,217,Lye);var KN=sfb(Jye,'ContainerCell',336);feb(1538,336,Lye,wKb);_.jf=function xKb(){var a;a=0;this.e?this.b?(a=this.b.b):!!this.a[1][1]&&(a=this.a[1][1].jf()):(a=vKb(this,rKb(this,true)));return a>0?a+this.n.d+this.n.a:0};_.kf=function yKb(){var a,b,c,d,e;e=0;if(this.e){this.b?(e=this.b.a):!!this.a[1][1]&&(e=this.a[1][1].kf())}else if(this.g){e=vKb(this,pKb(this,null,true))}else{for(b=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])),c=0,d=b.length;c<d;++c){a=b[c];e=$wnd.Math.max(e,vKb(this,pKb(this,a,true)))}}return e>0?e+this.n.b+this.n.c:0};_.lf=function zKb(){var a,b,c,d,e;if(this.g){a=pKb(this,null,false);for(c=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])),d=0,e=c.length;d<e;++d){b=c[d];nKb(this,b,a)}}else{for(c=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])),d=0,e=c.length;d<e;++d){b=c[d];a=pKb(this,b,false);nKb(this,b,a)}}};_.mf=function AKb(){var a,b,c,d;b=this.i;a=this.n;d=rKb(this,false);lKb(this,(ZJb(),WJb),b.d+a.d,d);lKb(this,YJb,b.d+b.a-a.a-d[2],d);c=b.a-a.d-a.a;if(d[0]>0){d[0]+=this.d;c-=d[0]}if(d[2]>0){d[2]+=this.d;c-=d[2]}this.c.a=$wnd.Math.max(0,c);this.c.d=b.d+a.d+(this.c.a-c)/2;d[1]=$wnd.Math.max(d[1],c);lKb(this,XJb,b.d+a.d+d[0]-(d[1]-c)/2,d)};_.b=null;_.d=0;_.e=false;_.f=false;_.g=false;var iKb=0,jKb=0;var LN=sfb(Jye,'GridContainerCell',1538);feb(470,22,{3:1,34:1,22:1,470:1},FKb);var BKb,CKb,DKb;var MN=tfb(Jye,'HorizontalLabelAlignment',470,WI,HKb,GKb);var IKb;feb(314,217,{217:1,314:1},TKb,UKb,VKb);_.jf=function WKb(){return PKb(this)};_.kf=function XKb(){return QKb(this)};_.a=0;_.c=false;var NN=sfb(Jye,'LabelCell',314);feb(252,336,{217:1,336:1,252:1},dLb);_.jf=function eLb(){return YKb(this)};_.kf=function fLb(){return ZKb(this)};_.lf=function iLb(){$Kb(this)};_.mf=function jLb(){_Kb(this)};_.b=0;_.c=0;_.d=false;var SN=sfb(Jye,'StripContainerCell',252);feb(1691,1,nwe,kLb);_.Mb=function lLb(a){return gLb(RD(a,217))};var ON=sfb(Jye,'StripContainerCell/lambda$0$Type',1691);feb(1692,1,{},mLb);_.Ye=function nLb(a){return RD(a,217).kf()};var PN=sfb(Jye,'StripContainerCell/lambda$1$Type',1692);feb(1693,1,nwe,oLb);_.Mb=function pLb(a){return hLb(RD(a,217))};var QN=sfb(Jye,'StripContainerCell/lambda$2$Type',1693);feb(1694,1,{},qLb);_.Ye=function rLb(a){return RD(a,217).jf()};var RN=sfb(Jye,'StripContainerCell/lambda$3$Type',1694);feb(471,22,{3:1,34:1,22:1,471:1},wLb);var sLb,tLb,uLb;var TN=tfb(Jye,'VerticalLabelAlignment',471,WI,yLb,xLb);var zLb;feb(800,1,{},CLb);_.c=0;_.d=0;_.k=0;_.s=0;_.t=0;_.v=false;_.w=0;_.D=false;var WN=sfb(Rye,'NodeContext',800);feb(1536,1,fye,FLb);_.Ne=function GLb(a,b){return ELb(RD(a,64),RD(b,64))};_.Fb=function HLb(a){return this===a};_.Oe=function ILb(){return new Frb(this)};var UN=sfb(Rye,'NodeContext/0methodref$comparePortSides$Type',1536);feb(1537,1,fye,JLb);_.Ne=function KLb(a,b){return DLb(RD(a,117),RD(b,117))};_.Fb=function LLb(a){return this===a};_.Oe=function MLb(){return new Frb(this)};var VN=sfb(Rye,'NodeContext/1methodref$comparePortContexts$Type',1537);feb(164,22,{3:1,34:1,22:1,164:1},kMb);var NLb,OLb,PLb,QLb,RLb,SLb,TLb,ULb,VLb,WLb,XLb,YLb,ZLb,$Lb,_Lb,aMb,bMb,cMb,dMb,eMb,fMb,gMb;var XN=tfb(Rye,'NodeLabelLocation',164,WI,nMb,mMb);var oMb;feb(117,1,{117:1},rMb);_.a=false;var YN=sfb(Rye,'PortContext',117);feb(1541,1,Qve,KMb);_.Cd=function LMb(a){NKb(RD(a,314))};var ZN=sfb(Uye,Vye,1541);feb(1542,1,nwe,MMb);_.Mb=function NMb(a){return !!RD(a,117).c};var $N=sfb(Uye,Wye,1542);feb(1543,1,Qve,OMb);_.Cd=function PMb(a){NKb(RD(a,117).c)};var _N=sfb(Uye,'LabelPlacer/lambda$2$Type',1543);var QMb;feb(1540,1,Qve,YMb);_.Cd=function ZMb(a){RMb();qMb(RD(a,117))};var aO=sfb(Uye,'NodeLabelAndSizeUtilities/lambda$0$Type',1540);feb(801,1,Qve,dNb);_.Cd=function eNb(a){bNb(this.b,this.c,this.a,RD(a,187))};_.a=false;_.c=false;var bO=sfb(Uye,'NodeLabelCellCreator/lambda$0$Type',801);feb(1539,1,Qve,kNb);_.Cd=function lNb(a){jNb(this.a,RD(a,187))};var cO=sfb(Uye,'PortContextCreator/lambda$0$Type',1539);var sNb;feb(1902,1,{},MNb);var eO=sfb(Yye,'GreedyRectangleStripOverlapRemover',1902);feb(1903,1,fye,ONb);_.Ne=function PNb(a,b){return NNb(RD(a,226),RD(b,226))};_.Fb=function QNb(a){return this===a};_.Oe=function RNb(){return new Frb(this)};var dO=sfb(Yye,'GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type',1903);feb(1849,1,{},YNb);_.a=5;_.e=0;var kO=sfb(Yye,'RectangleStripOverlapRemover',1849);feb(1850,1,fye,aOb);_.Ne=function bOb(a,b){return ZNb(RD(a,226),RD(b,226))};_.Fb=function cOb(a){return this===a};_.Oe=function dOb(){return new Frb(this)};var fO=sfb(Yye,'RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type',1850);feb(1852,1,fye,eOb);_.Ne=function fOb(a,b){return $Nb(RD(a,226),RD(b,226))};_.Fb=function gOb(a){return this===a};_.Oe=function hOb(){return new Frb(this)};var gO=sfb(Yye,'RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type',1852);feb(417,22,{3:1,34:1,22:1,417:1},nOb);var iOb,jOb,kOb,lOb;var hO=tfb(Yye,'RectangleStripOverlapRemover/OverlapRemovalDirection',417,WI,pOb,oOb);var qOb;feb(226,1,{226:1},sOb);var iO=sfb(Yye,'RectangleStripOverlapRemover/RectangleNode',226);feb(1851,1,Qve,tOb);_.Cd=function uOb(a){TNb(this.a,RD(a,226))};var jO=sfb(Yye,'RectangleStripOverlapRemover/lambda$1$Type',1851);feb(1323,1,fye,xOb);_.Ne=function yOb(a,b){return wOb(RD(a,176),RD(b,176))};_.Fb=function zOb(a){return this===a};_.Oe=function AOb(){return new Frb(this)};var oO=sfb($ye,'PolyominoCompactor/CornerCasesGreaterThanRestComparator',1323);feb(1326,1,{},BOb);_.Kb=function COb(a){return RD(a,334).a};var lO=sfb($ye,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type',1326);feb(1327,1,nwe,DOb);_.Mb=function EOb(a){return RD(a,332).a};var mO=sfb($ye,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type',1327);feb(1328,1,nwe,FOb);_.Mb=function GOb(a){return RD(a,332).a};var nO=sfb($ye,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type',1328);feb(1321,1,fye,IOb);_.Ne=function JOb(a,b){return HOb(RD(a,176),RD(b,176))};_.Fb=function KOb(a){return this===a};_.Oe=function LOb(){return new Frb(this)};var qO=sfb($ye,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator',1321);feb(1324,1,{},MOb);_.Kb=function NOb(a){return RD(a,334).a};var pO=sfb($ye,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type',1324);feb(781,1,fye,POb);_.Ne=function QOb(a,b){return OOb(RD(a,176),RD(b,176))};_.Fb=function ROb(a){return this===a};_.Oe=function SOb(){return new Frb(this)};var rO=sfb($ye,'PolyominoCompactor/MinNumOfExtensionsComparator',781);feb(1319,1,fye,UOb);_.Ne=function VOb(a,b){return TOb(RD(a,330),RD(b,330))};_.Fb=function WOb(a){return this===a};_.Oe=function XOb(){return new Frb(this)};var tO=sfb($ye,'PolyominoCompactor/MinPerimeterComparator',1319);feb(1320,1,fye,ZOb);_.Ne=function $Ob(a,b){return YOb(RD(a,330),RD(b,330))};_.Fb=function _Ob(a){return this===a};_.Oe=function aPb(){return new Frb(this)};var sO=sfb($ye,'PolyominoCompactor/MinPerimeterComparatorWithShape',1320);feb(1322,1,fye,cPb);_.Ne=function dPb(a,b){return bPb(RD(a,176),RD(b,176))};_.Fb=function ePb(a){return this===a};_.Oe=function fPb(){return new Frb(this)};var vO=sfb($ye,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator',1322);feb(1325,1,{},gPb);_.Kb=function hPb(a){return RD(a,334).a};var uO=sfb($ye,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type',1325);feb(782,1,{},kPb);_.Ve=function lPb(a,b){return jPb(this,RD(a,42),RD(b,176))};var wO=sfb($ye,'SuccessorCombination',782);feb(649,1,{},nPb);_.Ve=function oPb(a,b){var c;return mPb((c=RD(a,42),RD(b,176),c))};var xO=sfb($ye,'SuccessorJitter',649);feb(648,1,{},qPb);_.Ve=function rPb(a,b){var c;return pPb((c=RD(a,42),RD(b,176),c))};var yO=sfb($ye,'SuccessorLineByLine',648);feb(573,1,{},tPb);_.Ve=function uPb(a,b){var c;return sPb((c=RD(a,42),RD(b,176),c))};var zO=sfb($ye,'SuccessorManhattan',573);feb(1344,1,{},wPb);_.Ve=function xPb(a,b){var c;return vPb((c=RD(a,42),RD(b,176),c))};var AO=sfb($ye,'SuccessorMaxNormWindingInMathPosSense',1344);feb(409,1,{},APb);_.Ve=function BPb(a,b){return yPb(this,a,b)};_.c=false;_.d=false;_.e=false;_.f=false;var CO=sfb($ye,'SuccessorQuadrantsGeneric',409);feb(1345,1,{},CPb);_.Kb=function DPb(a){return RD(a,334).a};var BO=sfb($ye,'SuccessorQuadrantsGeneric/lambda$0$Type',1345);feb(332,22,{3:1,34:1,22:1,332:1},JPb);_.a=false;var EPb,FPb,GPb,HPb;var DO=tfb(dze,eze,332,WI,LPb,KPb);var MPb;feb(1317,1,{});_.Ib=function UPb(){var a,b,c,d,e,f;c=' ';a=sgb(0);for(e=0;e<this.o;e++){c+=''+a.a;a=sgb(OPb(a.a))}c+='\n';a=sgb(0);for(f=0;f<this.p;f++){c+=''+a.a;a=sgb(OPb(a.a));for(d=0;d<this.o;d++){b=SPb(this,d,f);Ddb(b,0)==0?(c+='_'):Ddb(b,1)==0?(c+='X'):(c+='0')}c+='\n'}return zhb(c,0,c.length-1)};_.o=0;_.p=0;var HO=sfb(dze,'TwoBitGrid',1317);feb(330,1317,{330:1},gQb);_.j=0;_.k=0;var EO=sfb(dze,'PlanarGrid',330);feb(176,330,{330:1,176:1});_.g=0;_.i=0;var FO=sfb(dze,'Polyomino',176);var U5=ufb(jze,kze);feb(137,1,lze,qQb);_.qf=function uQb(a,b){return oQb(this,a,b)};_.nf=function rQb(){return lQb(this)};_.of=function sQb(a){return mQb(this,a)};_.pf=function tQb(a){return nQb(this,a)};var W5=sfb(jze,'MapPropertyHolder',137);feb(1318,137,lze,vQb);var GO=sfb(dze,'Polyominoes',1318);var wQb=false,xQb,yQb;feb(1828,1,Qve,GQb);_.Cd=function HQb(a){AQb(RD(a,225))};var IO=sfb(mze,'DepthFirstCompaction/0methodref$compactTree$Type',1828);feb(825,1,Qve,IQb);_.Cd=function JQb(a){DQb(this.a,RD(a,225))};var JO=sfb(mze,'DepthFirstCompaction/lambda$1$Type',825);feb(1829,1,Qve,KQb);_.Cd=function LQb(a){EQb(this.a,this.b,this.c,RD(a,225))};var KO=sfb(mze,'DepthFirstCompaction/lambda$2$Type',1829);var MQb,NQb;feb(68,1,{68:1},TQb);var LO=sfb(mze,'Node',68);feb(1214,1,{},WQb);var QO=sfb(mze,'ScanlineOverlapCheck',1214);feb(1215,1,{693:1},$Qb);_.bf=function _Qb(a){YQb(this,RD(a,450))};var NO=sfb(mze,'ScanlineOverlapCheck/OverlapsScanlineHandler',1215);feb(1216,1,fye,bRb);_.Ne=function cRb(a,b){return aRb(RD(a,68),RD(b,68))};_.Fb=function dRb(a){return this===a};_.Oe=function eRb(){return new Frb(this)};var MO=sfb(mze,'ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type',1216);feb(450,1,{450:1},fRb);_.a=false;var OO=sfb(mze,'ScanlineOverlapCheck/Timestamp',450);feb(1217,1,fye,gRb);_.Ne=function hRb(a,b){return XQb(RD(a,450),RD(b,450))};_.Fb=function iRb(a){return this===a};_.Oe=function jRb(){return new Frb(this)};var PO=sfb(mze,'ScanlineOverlapCheck/lambda$0$Type',1217);feb(557,1,{},kRb);var RO=sfb(nze,'SVGImage',557);feb(334,1,{334:1},lRb);_.Ib=function mRb(){return '('+this.a+pve+this.b+pve+this.c+')'};var SO=sfb(nze,'UniqueTriple',334);feb(205,1,oze);var f2=sfb(pze,'AbstractLayoutProvider',205);feb(1114,205,oze,pRb);_.rf=function qRb(a,b){var c,d,e,f;b.Ug(qze,1);this.a=Kfb(UD(Gxd(a,(tSb(),sSb))));if(Hxd(a,iSb)){e=WD(Gxd(a,iSb));c=sgd(ygd(),e);if(c){d=RD(ltd(c.f),205);d.rf(a,b.eh(1))}}f=new rTb(this.a);this.b=pTb(f,a);switch(RD(Gxd(a,(eSb(),aSb)),488).g){case 0:sRb(new wRb,this.b);Ixd(a,lSb,mQb(this.b,lSb));break;default:gib();String.fromCharCode(10);}hTb(f);Ixd(a,kSb,this.b);b.Vg()};_.a=0;var TO=sfb(rze,'DisCoLayoutProvider',1114);feb(1208,1,{},wRb);_.c=false;_.e=0;_.f=0;var UO=sfb(rze,'DisCoPolyominoCompactor',1208);feb(567,1,{567:1},DRb);_.b=true;var VO=sfb(sze,'DCComponent',567);feb(406,22,{3:1,34:1,22:1,406:1},JRb);_.a=false;var ERb,FRb,GRb,HRb;var WO=tfb(sze,'DCDirection',406,WI,LRb,KRb);var MRb;feb(272,137,{3:1,272:1,96:1,137:1},ORb);var XO=sfb(sze,'DCElement',272);feb(407,1,{407:1},QRb);_.c=0;var YO=sfb(sze,'DCExtension',407);feb(762,137,lze,TRb);var ZO=sfb(sze,'DCGraph',762);feb(488,22,{3:1,34:1,22:1,488:1},WRb);var URb;var $O=tfb(tze,uze,488,WI,YRb,XRb);var ZRb;feb(865,1,Eye,fSb);_.hf=function gSb(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,vze),zze),'Connected Components Compaction Strategy'),'Strategy for packing different connected components in order to save space and enhance readability of a graph.'),bSb),(kid(),eid)),$O),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,wze),zze),'Connected Components Layout Algorithm'),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),iid),qJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,xze),'debug'),'DCGraph'),'Access to the DCGraph is intended for the debug view,'),hid),jJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,yze),'debug'),'List of Polyominoes'),'Access to the polyominoes is intended for the debug view,'),hid),jJ),xsb(Whd))));uSb((new vSb,a))};var _Rb,aSb,bSb,cSb,dSb;var _O=sfb(tze,'DisCoMetaDataProvider',865);feb(1010,1,Eye,vSb);_.hf=function wSb(a){uSb(a)};var hSb,iSb,jSb,kSb,lSb,mSb,nSb,oSb,pSb,qSb,rSb,sSb;var bP=sfb(tze,'DisCoOptions',1010);feb(1011,1,{},xSb);_.sf=function ySb(){var a;return a=new pRb,a};_.tf=function zSb(a){};var aP=sfb(tze,'DisCoOptions/DiscoFactory',1011);feb(568,176,{330:1,176:1,568:1},DSb);_.a=0;_.b=0;_.c=0;_.d=0;var cP=sfb('org.eclipse.elk.alg.disco.structures','DCPolyomino',568);var ESb,FSb,GSb;feb(1286,1,nwe,TSb);_.Mb=function USb(a){return SSb(a)};var dP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$0$Type',1286);feb(1287,1,{},VSb);_.Kb=function WSb(a){return HSb(),JGd(RD(a,74))};var eP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$1$Type',1287);feb(1288,1,nwe,XSb);_.Mb=function YSb(a){return NSb(RD(a,74))};var fP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$2$Type',1288);feb(1289,1,{},ZSb);_.Kb=function $Sb(a){return HSb(),LGd(RD(a,74))};var gP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$3$Type',1289);feb(1290,1,nwe,_Sb);_.Mb=function aTb(a){return OSb(RD(a,74))};var hP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$4$Type',1290);feb(1291,1,nwe,bTb);_.Mb=function cTb(a){return PSb(this.a,RD(a,74))};var iP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$5$Type',1291);feb(1292,1,{},dTb);_.Kb=function eTb(a){return QSb(this.a,RD(a,74))};var jP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$6$Type',1292);feb(1205,1,{},rTb);_.a=0;var mP=sfb(Fze,'ElkGraphTransformer',1205);feb(1206,1,{},tTb);_.Yd=function uTb(a,b){sTb(this,RD(a,167),RD(b,272))};var lP=sfb(Fze,'ElkGraphTransformer/OffsetApplier',1206);feb(1207,1,Qve,wTb);_.Cd=function xTb(a){vTb(this,RD(a,8))};var kP=sfb(Fze,'ElkGraphTransformer/OffsetApplier/OffSetToChainApplier',1207);feb(760,1,{},DTb);var oP=sfb(Kze,Lze,760);feb(1195,1,fye,FTb);_.Ne=function GTb(a,b){return ETb(RD(a,235),RD(b,235))};_.Fb=function HTb(a){return this===a};_.Oe=function ITb(){return new Frb(this)};var nP=sfb(Kze,Mze,1195);feb(1196,1,Qve,OTb);_.Cd=function PTb(a){NTb(this.b,this.a,RD(a,250))};var pP=sfb(Kze,Nze,1196);feb(738,205,oze,TTb);_.rf=function UTb(a,b){QTb(this,a,b)};var qP=sfb(Kze,'ForceLayoutProvider',738);feb(309,137,{3:1,309:1,96:1,137:1});var wP=sfb(Oze,'FParticle',309);feb(250,309,{3:1,250:1,309:1,96:1,137:1},WTb);_.Ib=function XTb(){var a;if(this.a){a=Wmb(this.a.a,this,0);return a>=0?'b'+a+'['+bUb(this.a)+']':'b['+bUb(this.a)+']'}return 'b_'+kFb(this)};var rP=sfb(Oze,'FBendpoint',250);feb(289,137,{3:1,289:1,96:1,137:1},cUb);_.Ib=function dUb(){return bUb(this)};var sP=sfb(Oze,'FEdge',289);feb(235,137,{3:1,235:1,96:1,137:1},gUb);var tP=sfb(Oze,'FGraph',235);feb(453,309,{3:1,453:1,309:1,96:1,137:1},iUb);_.Ib=function jUb(){return this.b==null||this.b.length==0?'l['+bUb(this.a)+']':'l_'+this.b};var uP=sfb(Oze,'FLabel',453);feb(153,309,{3:1,153:1,309:1,96:1,137:1},lUb);_.Ib=function mUb(){return kUb(this)};_.a=0;var vP=sfb(Oze,'FNode',153);feb(2100,1,{});_.vf=function rUb(a){nUb(this,a)};_.wf=function sUb(){oUb(this)};_.d=0;var xP=sfb(Qze,'AbstractForceModel',2100);feb(641,2100,{641:1},tUb);_.uf=function vUb(a,b){var c,d,e,f,g;qUb(this.f,a,b);e=ojd(ajd(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-ejd(a.e)/2-ejd(b.e)/2);c=fUb(this.e,a,b);c>0?(f=-uUb(d,this.c)*c):(f=yUb(d,this.b)*RD(mQb(a,(yVb(),lVb)),17).a);ijd(e,f/g);return e};_.vf=function wUb(a){nUb(this,a);this.a=RD(mQb(a,(yVb(),aVb)),17).a;this.c=Kfb(UD(mQb(a,rVb)));this.b=Kfb(UD(mQb(a,nVb)))};_.xf=function xUb(a){return a<this.a};_.a=0;_.b=0;_.c=0;var yP=sfb(Qze,'EadesModel',641);feb(642,2100,{642:1},zUb);_.uf=function BUb(a,b){var c,d,e,f,g;qUb(this.f,a,b);e=ojd(ajd(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-ejd(a.e)/2-ejd(b.e)/2);f=FUb(d,this.a)*RD(mQb(a,(yVb(),lVb)),17).a;c=fUb(this.e,a,b);c>0&&(f-=AUb(d,this.a)*c);ijd(e,f*this.b/g);return e};_.vf=function CUb(a){var b,c,d,e,f,g,h;nUb(this,a);this.b=Kfb(UD(mQb(a,(yVb(),sVb))));this.c=this.b/RD(mQb(a,aVb),17).a;d=a.e.c.length;f=0;e=0;for(h=new Anb(a.e);h.a<h.c.c.length;){g=RD(ynb(h),153);f+=g.e.a;e+=g.e.b}b=f*e;c=Kfb(UD(mQb(a,rVb)))*Tye;this.a=$wnd.Math.sqrt(b/(2*d))*c};_.wf=function DUb(){oUb(this);this.b-=this.c};_.xf=function EUb(a){return this.b>0};_.a=0;_.b=0;_.c=0;var zP=sfb(Qze,'FruchtermanReingoldModel',642);feb(860,1,Eye,PUb);_.hf=function QUb(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Rze),''),'Force Model'),'Determines the model for force calculation.'),IUb),(kid(),eid)),BP),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Sze),''),'Iterations'),'The number of iterations on the force model.'),sgb(300)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Tze),''),'Repulsive Power'),'Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model'),sgb(0)),gid),bJ),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Uze),''),'FR Temperature'),'The temperature is used as a scaling factor for particle displacements.'),Vze),did),VI),xsb(Whd))));zgd(a,Uze,Rze,NUb);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Wze),''),'Eades Repulsion'),"Factor for repulsive forces in Eades' model."),5),did),VI),xsb(Whd))));zgd(a,Wze,Rze,KUb);zVb((new AVb,a))};var GUb,HUb,IUb,JUb,KUb,LUb,MUb,NUb;var AP=sfb(Xze,'ForceMetaDataProvider',860);feb(432,22,{3:1,34:1,22:1,432:1},UUb);var RUb,SUb;var BP=tfb(Xze,'ForceModelStrategy',432,WI,WUb,VUb);var XUb;feb(Awe,1,Eye,AVb);_.hf=function BVb(a){zVb(a)};var ZUb,$Ub,_Ub,aVb,bVb,cVb,dVb,eVb,fVb,gVb,hVb,iVb,jVb,kVb,lVb,mVb,nVb,oVb,pVb,qVb,rVb,sVb,tVb,uVb,vVb,wVb,xVb;var DP=sfb(Xze,'ForceOptions',Awe);feb(1001,1,{},CVb);_.sf=function DVb(){var a;return a=new TTb,a};_.tf=function EVb(a){};var CP=sfb(Xze,'ForceOptions/ForceFactory',1001);var FVb,GVb,HVb,IVb;feb(861,1,Eye,RVb);_.hf=function SVb(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,vAe),''),'Fixed Position'),'Prevent that the node is moved by the layout algorithm.'),(Geb(),false)),(kid(),cid)),QI),xsb((Yhd(),Vhd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,wAe),''),'Desired Edge Length'),'Either specified for parent nodes or for individual edges, where the latter takes higher precedence.'),100),did),VI),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Thd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,xAe),''),'Layout Dimension'),'Dimensions that are permitted to be altered during layout.'),MVb),eid),JP),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,yAe),''),'Stress Epsilon'),'Termination criterion for the iterative process.'),Vze),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,zAe),''),'Iteration Limit'),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),sgb(lve)),gid),bJ),xsb(Whd))));eWb((new fWb,a))};var KVb,LVb,MVb,NVb,OVb,PVb;var EP=sfb(Xze,'StressMetaDataProvider',861);feb(1004,1,Eye,fWb);_.hf=function gWb(a){eWb(a)};var TVb,UVb,VVb,WVb,XVb,YVb,ZVb,$Vb,_Vb,aWb,bWb,cWb;var GP=sfb(Xze,'StressOptions',1004);feb(1005,1,{},hWb);_.sf=function iWb(){var a;return a=new kWb,a};_.tf=function jWb(a){};var FP=sfb(Xze,'StressOptions/StressFactory',1005);feb(1110,205,oze,kWb);_.rf=function lWb(a,b){var c,d,e,f,g;b.Ug(BAe,1);Heb(TD(Gxd(a,(dWb(),XVb))))?Heb(TD(Gxd(a,bWb)))||RFb((c=new SFb((lud(),new zud(a))),c)):QTb(new TTb,a,b.eh(1));e=KTb(a);d=CTb(this.a,e);for(g=d.Kc();g.Ob();){f=RD(g.Pb(),235);if(f.e.c.length<=1){continue}uWb(this.b,f);sWb(this.b);Umb(f.d,new mWb)}e=BTb(d);JTb(e);b.Vg()};var IP=sfb(DAe,'StressLayoutProvider',1110);feb(1111,1,Qve,mWb);_.Cd=function nWb(a){hUb(RD(a,453))};var HP=sfb(DAe,'StressLayoutProvider/lambda$0$Type',1111);feb(1002,1,{},vWb);_.c=0;_.e=0;_.g=0;var LP=sfb(DAe,'StressMajorization',1002);feb(391,22,{3:1,34:1,22:1,391:1},BWb);var xWb,yWb,zWb;var JP=tfb(DAe,'StressMajorization/Dimension',391,WI,DWb,CWb);var EWb;feb(1003,1,fye,GWb);_.Ne=function HWb(a,b){return wWb(this.a,RD(a,153),RD(b,153))};_.Fb=function IWb(a){return this===a};_.Oe=function JWb(){return new Frb(this)};var KP=sfb(DAe,'StressMajorization/lambda$0$Type',1003);feb(1192,1,{},RWb);var OP=sfb(FAe,'ElkLayered',1192);feb(1193,1,Qve,UWb);_.Cd=function VWb(a){SWb(this.a,RD(a,36))};var MP=sfb(FAe,'ElkLayered/lambda$0$Type',1193);feb(1194,1,Qve,WWb);_.Cd=function XWb(a){TWb(this.a,RD(a,36))};var NP=sfb(FAe,'ElkLayered/lambda$1$Type',1194);feb(1281,1,{},dXb);var YWb,ZWb,$Wb;var SP=sfb(FAe,'GraphConfigurator',1281);feb(770,1,Qve,fXb);_.Cd=function gXb(a){aXb(this.a,RD(a,10))};var PP=sfb(FAe,'GraphConfigurator/lambda$0$Type',770);feb(771,1,{},hXb);_.Kb=function iXb(a){return _Wb(),new SDb(null,new Swb(RD(a,30).a,16))};var QP=sfb(FAe,'GraphConfigurator/lambda$1$Type',771);feb(772,1,Qve,jXb);_.Cd=function kXb(a){aXb(this.a,RD(a,10))};var RP=sfb(FAe,'GraphConfigurator/lambda$2$Type',772);feb(1109,205,oze,lXb);_.rf=function mXb(a,b){var c;c=c5b(new k5b,a);dE(Gxd(a,(yCc(),IAc)))===dE((Fnd(),Cnd))?LWb(this.a,c,b):MWb(this.a,c,b);b.$g()||J5b(new N5b,c)};var TP=sfb(FAe,'LayeredLayoutProvider',1109);feb(367,22,{3:1,34:1,22:1,367:1},tXb);var nXb,oXb,pXb,qXb,rXb;var UP=tfb(FAe,'LayeredPhases',367,WI,vXb,uXb);var wXb;feb(1717,1,{},EXb);_.i=0;var yXb;var XP=sfb(GAe,'ComponentsToCGraphTransformer',1717);var jYb;feb(1718,1,{},FXb);_.yf=function GXb(a,b){return $wnd.Math.min(a.a!=null?Kfb(a.a):a.c.i,b.a!=null?Kfb(b.a):b.c.i)};_.zf=function HXb(a,b){return $wnd.Math.min(a.a!=null?Kfb(a.a):a.c.i,b.a!=null?Kfb(b.a):b.c.i)};var VP=sfb(GAe,'ComponentsToCGraphTransformer/1',1718);feb(86,1,{86:1});_.i=0;_.k=true;_.o=pxe;var bQ=sfb(HAe,'CNode',86);feb(469,86,{469:1,86:1},IXb,JXb);_.Ib=function KXb(){return ''};var WP=sfb(GAe,'ComponentsToCGraphTransformer/CRectNode',469);feb(1688,1,{},XXb);var LXb,MXb;var $P=sfb(GAe,'OneDimensionalComponentsCompaction',1688);feb(1689,1,{},$Xb);_.Kb=function _Xb(a){return YXb(RD(a,42))};_.Fb=function aYb(a){return this===a};var YP=sfb(GAe,'OneDimensionalComponentsCompaction/lambda$0$Type',1689);feb(1690,1,{},bYb);_.Kb=function cYb(a){return ZXb(RD(a,42))};_.Fb=function dYb(a){return this===a};var ZP=sfb(GAe,'OneDimensionalComponentsCompaction/lambda$1$Type',1690);feb(1720,1,{},fYb);var _P=sfb(HAe,'CGraph',1720);feb(194,1,{194:1},iYb);_.b=0;_.c=0;_.e=0;_.g=true;_.i=pxe;var aQ=sfb(HAe,'CGroup',194);feb(1719,1,{},lYb);_.yf=function mYb(a,b){return $wnd.Math.max(a.a!=null?Kfb(a.a):a.c.i,b.a!=null?Kfb(b.a):b.c.i)};_.zf=function nYb(a,b){return $wnd.Math.max(a.a!=null?Kfb(a.a):a.c.i,b.a!=null?Kfb(b.a):b.c.i)};var cQ=sfb(HAe,kye,1719);feb(1721,1,{},EYb);_.d=false;var oYb;var eQ=sfb(HAe,pye,1721);feb(1722,1,{},FYb);_.Kb=function GYb(a){return pYb(),Geb(),RD(RD(a,42).a,86).d.e!=0?true:false};_.Fb=function HYb(a){return this===a};var dQ=sfb(HAe,qye,1722);feb(833,1,{},KYb);_.a=false;_.b=false;_.c=false;_.d=false;var fQ=sfb(HAe,rye,833);feb(1898,1,{},QYb);var kQ=sfb(IAe,sye,1898);var wQ=ufb(JAe,hye);feb(1899,1,{382:1},UYb);_.bf=function VYb(a){SYb(this,RD(a,475))};var hQ=sfb(IAe,tye,1899);feb(Owe,1,fye,XYb);_.Ne=function YYb(a,b){return WYb(RD(a,86),RD(b,86))};_.Fb=function ZYb(a){return this===a};_.Oe=function $Yb(){return new Frb(this)};var gQ=sfb(IAe,uye,Owe);feb(475,1,{475:1},_Yb);_.a=false;var iQ=sfb(IAe,vye,475);feb(1901,1,fye,aZb);_.Ne=function bZb(a,b){return RYb(RD(a,475),RD(b,475))};_.Fb=function cZb(a){return this===a};_.Oe=function dZb(){return new Frb(this)};var jQ=sfb(IAe,wye,1901);feb(148,1,{148:1},eZb,fZb);_.Fb=function gZb(a){var b;if(a==null){return false}if(mQ!=rb(a)){return false}b=RD(a,148);return Fvb(this.c,b.c)&&Fvb(this.d,b.d)};_.Hb=function hZb(){return Tnb(cD(WC(jJ,1),rve,1,5,[this.c,this.d]))};_.Ib=function iZb(){return '('+this.c+pve+this.d+(this.a?'cx':'')+this.b+')'};_.a=true;_.c=0;_.d=0;var mQ=sfb(JAe,'Point',148);feb(416,22,{3:1,34:1,22:1,416:1},qZb);var jZb,kZb,lZb,mZb;var lQ=tfb(JAe,'Point/Quadrant',416,WI,uZb,tZb);var vZb;feb(1708,1,{},EZb);_.b=null;_.c=null;_.d=null;_.e=null;_.f=null;var xZb,yZb,zZb,AZb,BZb;var vQ=sfb(JAe,'RectilinearConvexHull',1708);feb(583,1,{382:1},PZb);_.bf=function QZb(a){OZb(this,RD(a,148))};_.b=0;var MZb;var oQ=sfb(JAe,'RectilinearConvexHull/MaximalElementsEventHandler',583);feb(1710,1,fye,SZb);_.Ne=function TZb(a,b){return RZb(UD(a),UD(b))};_.Fb=function UZb(a){return this===a};_.Oe=function VZb(){return new Frb(this)};var nQ=sfb(JAe,'RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type',1710);feb(1709,1,{382:1},XZb);_.bf=function YZb(a){WZb(this,RD(a,148))};_.a=0;_.b=null;_.c=null;_.d=null;_.e=null;var pQ=sfb(JAe,'RectilinearConvexHull/RectangleEventHandler',1709);feb(1711,1,fye,ZZb);_.Ne=function $Zb(a,b){return GZb(RD(a,148),RD(b,148))};_.Fb=function _Zb(a){return this===a};_.Oe=function a$b(){return new Frb(this)};var qQ=sfb(JAe,'RectilinearConvexHull/lambda$0$Type',1711);feb(1712,1,fye,b$b);_.Ne=function c$b(a,b){return HZb(RD(a,148),RD(b,148))};_.Fb=function d$b(a){return this===a};_.Oe=function e$b(){return new Frb(this)};var rQ=sfb(JAe,'RectilinearConvexHull/lambda$1$Type',1712);feb(1713,1,fye,f$b);_.Ne=function g$b(a,b){return IZb(RD(a,148),RD(b,148))};_.Fb=function h$b(a){return this===a};_.Oe=function i$b(){return new Frb(this)};var sQ=sfb(JAe,'RectilinearConvexHull/lambda$2$Type',1713);feb(1714,1,fye,j$b);_.Ne=function k$b(a,b){return JZb(RD(a,148),RD(b,148))};_.Fb=function l$b(a){return this===a};_.Oe=function m$b(){return new Frb(this)};var tQ=sfb(JAe,'RectilinearConvexHull/lambda$3$Type',1714);feb(1715,1,fye,n$b);_.Ne=function o$b(a,b){return KZb(RD(a,148),RD(b,148))};_.Fb=function p$b(a){return this===a};_.Oe=function q$b(){return new Frb(this)};var uQ=sfb(JAe,'RectilinearConvexHull/lambda$4$Type',1715);feb(1716,1,{},s$b);var xQ=sfb(JAe,'Scanline',1716);feb(2104,1,{});var yQ=sfb(KAe,'AbstractGraphPlacer',2104);feb(335,1,{335:1},C$b);_.Ff=function D$b(a){if(this.Gf(a)){Rc(this.b,RD(mQb(a,(Ywc(),ewc)),21),a);return true}else{return false}};_.Gf=function E$b(a){var b,c,d,e;b=RD(mQb(a,(Ywc(),ewc)),21);e=RD(Qc(y$b,b),21);for(d=e.Kc();d.Ob();){c=RD(d.Pb(),21);if(!RD(Qc(this.b,c),15).dc()){return false}}return true};var y$b;var BQ=sfb(KAe,'ComponentGroup',335);feb(779,2104,{},J$b);_.Hf=function K$b(a){var b,c;for(c=new Anb(this.a);c.a<c.c.c.length;){b=RD(ynb(c),335);if(b.Ff(a)){return}}Rmb(this.a,new C$b(a))};_.Ef=function L$b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;this.a.c.length=0;b.a.c.length=0;if(a.dc()){b.f.a=0;b.f.b=0;return}g=RD(a.Xb(0),36);kQb(b,g);for(e=a.Kc();e.Ob();){d=RD(e.Pb(),36);this.Hf(d)}o=new pjd;f=Kfb(UD(mQb(g,(yCc(),SBc))));for(j=new Anb(this.a);j.a<j.c.c.length;){h=RD(ynb(j),335);k=F$b(h,f);x$b(Uc(h.b),o.a,o.b);o.a+=k.a;o.b+=k.b}b.f.a=o.a-f;b.f.b=o.b-f;if(Heb(TD(mQb(g,Vzc)))&&dE(mQb(g,yAc))===dE((Ymd(),Umd))){for(n=a.Kc();n.Ob();){l=RD(n.Pb(),36);w$b(l,l.c.a,l.c.b)}c=new j_b;_$b(c,a,f);for(m=a.Kc();m.Ob();){l=RD(m.Pb(),36);$id(hjd(l.c),c.e)}$id(hjd(b.f),c.a)}for(i=new Anb(this.a);i.a<i.c.c.length;){h=RD(ynb(i),335);v$b(b,Uc(h.b))}};var zQ=sfb(KAe,'ComponentGroupGraphPlacer',779);feb(1312,779,{},N$b);_.Hf=function O$b(a){M$b(this,a)};_.Ef=function P$b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;this.a.c.length=0;b.a.c.length=0;if(a.dc()){b.f.a=0;b.f.b=0;return}g=RD(a.Xb(0),36);kQb(b,g);for(e=a.Kc();e.Ob();){d=RD(e.Pb(),36);M$b(this,d)}t=new pjd;s=new pjd;p=new pjd;o=new pjd;f=Kfb(UD(mQb(g,(yCc(),SBc))));for(j=new Anb(this.a);j.a<j.c.c.length;){h=RD(ynb(j),335);if(Dmd(RD(mQb(b,(umd(),Nkd)),88))){p.a=t.a;for(r=new aw(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=RD(_v(r.b.Pb()),21);if(q.Hc((qpd(),Yod))){p.a=s.a;break}}}else if(Emd(RD(mQb(b,Nkd),88))){p.b=t.b;for(r=new aw(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=RD(_v(r.b.Pb()),21);if(q.Hc((qpd(),ppd))){p.b=s.b;break}}}k=F$b(RD(h,579),f);x$b(Uc(h.b),p.a,p.b);if(Dmd(RD(mQb(b,Nkd),88))){s.a=p.a+k.a;o.a=$wnd.Math.max(o.a,s.a);for(r=new aw(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=RD(_v(r.b.Pb()),21);if(q.Hc((qpd(),npd))){t.a=p.a+k.a;break}}s.b=p.b+k.b;p.b=s.b;o.b=$wnd.Math.max(o.b,p.b)}else if(Emd(RD(mQb(b,Nkd),88))){s.b=p.b+k.b;o.b=$wnd.Math.max(o.b,s.b);for(r=new aw(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=RD(_v(r.b.Pb()),21);if(q.Hc((qpd(),Xod))){t.b=p.b+k.b;break}}s.a=p.a+k.a;p.a=s.a;o.a=$wnd.Math.max(o.a,p.a)}}b.f.a=o.a-f;b.f.b=o.b-f;if(Heb(TD(mQb(g,Vzc)))&&dE(mQb(g,yAc))===dE((Ymd(),Umd))){for(n=a.Kc();n.Ob();){l=RD(n.Pb(),36);w$b(l,l.c.a,l.c.b)}c=new j_b;_$b(c,a,f);for(m=a.Kc();m.Ob();){l=RD(m.Pb(),36);$id(hjd(l.c),c.e)}$id(hjd(b.f),c.a)}for(i=new Anb(this.a);i.a<i.c.c.length;){h=RD(ynb(i),335);v$b(b,Uc(h.b))}};var AQ=sfb(KAe,'ComponentGroupModelOrderGraphPlacer',1312);feb(389,22,{3:1,34:1,22:1,389:1},V$b);var Q$b,R$b,S$b,T$b;var CQ=tfb(KAe,'ComponentOrderingStrategy',389,WI,X$b,W$b);var Y$b;feb(659,1,{},j_b);var KQ=sfb(KAe,'ComponentsCompactor',659);feb(1533,13,Cxe,m_b);_.Fc=function n_b(a){return k_b(this,RD(a,148))};var DQ=sfb(KAe,'ComponentsCompactor/Hullpoints',1533);feb(1530,1,{855:1},p_b);_.a=false;var EQ=sfb(KAe,'ComponentsCompactor/InternalComponent',1530);feb(1529,1,Vve,q_b);_.Jc=function r_b(a){xgb(this,a)};_.Kc=function s_b(){return new Anb(this.a)};var FQ=sfb(KAe,'ComponentsCompactor/InternalConnectedComponents',1529);feb(1532,1,{602:1},t_b);_.Bf=function v_b(){return null};_.Cf=function w_b(){return this.a};_.Af=function u_b(){return f_b(this.d)};_.Df=function x_b(){return this.b};var GQ=sfb(KAe,'ComponentsCompactor/InternalExternalExtension',1532);feb(1531,1,{602:1},y_b);_.Cf=function B_b(){return this.a};_.Af=function z_b(){return f_b(this.d)};_.Bf=function A_b(){return this.c};_.Df=function C_b(){return this.b};var HQ=sfb(KAe,'ComponentsCompactor/InternalUnionExternalExtension',1531);feb(1535,1,{},D_b);var IQ=sfb(KAe,'ComponentsCompactor/OuterSegments',1535);feb(1534,1,{},E_b);var JQ=sfb(KAe,'ComponentsCompactor/Segments',1534);feb(1282,1,{},I_b);var MQ=sfb(KAe,Lze,1282);feb(1283,1,fye,K_b);_.Ne=function L_b(a,b){return J_b(RD(a,36),RD(b,36))};_.Fb=function M_b(a){return this===a};_.Oe=function N_b(){return new Frb(this)};var LQ=sfb(KAe,'ComponentsProcessor/lambda$0$Type',1283);feb(579,335,{335:1,579:1},S_b);_.Ff=function T_b(a){return Q_b(this,a)};_.Gf=function U_b(a){return R_b(this,a)};var O_b;var NQ=sfb(KAe,'ModelOrderComponentGroup',579);feb(1310,2104,{},V_b);_.Ef=function W_b(a,b){var c,d,e,f,g,h,i,j,k,l,m;if(a.gc()==1){l=RD(a.Xb(0),36);if(l!=b){b.a.c.length=0;u$b(b,l,0,0);kQb(b,l);C2b(b.d,l.d);b.f.a=l.f.a;b.f.b=l.f.b}return}else if(a.dc()){b.a.c.length=0;b.f.a=0;b.f.b=0;return}this.Jf(a,b);e=RD(a.Xb(0),36);b.a.c.length=0;kQb(b,e);j=0;m=0;for(g=a.Kc();g.Ob();){f=RD(g.Pb(),36);k=f.f;j=$wnd.Math.max(j,k.a);m+=k.a*k.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(m)*Kfb(UD(mQb(b,(yCc(),Tzc)))));d=Kfb(UD(mQb(b,SBc)));this.If(a,b,j,d);if(Heb(TD(mQb(e,Vzc)))){c=new j_b;_$b(c,a,d);for(i=a.Kc();i.Ob();){h=RD(i.Pb(),36);$id(hjd(h.c),c.e)}$id(hjd(b.f),c.a)}v$b(b,a)};_.If=function X_b(a,b,c,d){var e,f,g,h,i,j,k,l;k=0;l=0;h=0;e=d;for(g=a.Kc();g.Ob();){f=RD(g.Pb(),36);j=f.f;if(k+j.a>c){k=0;l+=h+d;h=0}i=f.c;w$b(f,k+i.a,l+i.b);hjd(i);e=$wnd.Math.max(e,k+j.a);h=$wnd.Math.max(h,j.b);k+=j.a+d}b.f.a=e;b.f.b=l+h};_.Jf=function Y_b(a,b){var c,d,e,f,g;if(dE(mQb(b,(yCc(),Yzc)))===dE((U$b(),T$b))){for(d=a.Kc();d.Ob();){c=RD(d.Pb(),36);g=0;for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);g+=RD(mQb(e,JBc),17).a}c.p=g}yob();a.jd(new b0b)}};var QQ=sfb(KAe,'SimpleRowGraphPlacer',1310);feb(1313,1310,{},Z_b);_.If=function $_b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;m=0;n=0;h=0;e=d;i=null;l=0;for(g=a.Kc();g.Ob();){f=RD(g.Pb(),36);k=f.f;if(m+k.a>c&&!RD(mQb(f,(Ywc(),ewc)),21).Hc((qpd(),Yod))||!!i&&RD(mQb(i,(Ywc(),ewc)),21).Hc((qpd(),Xod))||RD(mQb(f,(Ywc(),ewc)),21).Hc((qpd(),ppd))){m=l;n+=h+d;h=0}j=f.c;RD(mQb(f,(Ywc(),ewc)),21).Hc((qpd(),Yod))&&(m=e+d);w$b(f,m+j.a,n+j.b);e=$wnd.Math.max(e,m+k.a);RD(mQb(f,ewc),21).Hc(npd)&&(l=$wnd.Math.max(l,m+k.a+d));hjd(j);h=$wnd.Math.max(h,k.b);m+=k.a+d;i=f}b.f.a=e;b.f.b=n+h};_.Jf=function __b(a,b){};var OQ=sfb(KAe,'ModelOrderRowGraphPlacer',1313);feb(1311,1,fye,b0b);_.Ne=function c0b(a,b){return a0b(RD(a,36),RD(b,36))};_.Fb=function d0b(a){return this===a};_.Oe=function e0b(){return new Frb(this)};var PQ=sfb(KAe,'SimpleRowGraphPlacer/1',1311);var f0b;feb(1280,1,xye,l0b);_.Lb=function m0b(a){var b;return b=RD(mQb(RD(a,249).b,(yCc(),RAc)),75),!!b&&b.b!=0};_.Fb=function n0b(a){return this===a};_.Mb=function o0b(a){var b;return b=RD(mQb(RD(a,249).b,(yCc(),RAc)),75),!!b&&b.b!=0};var RQ=sfb(PAe,'CompoundGraphPostprocessor/1',1280);feb(1279,1,QAe,E0b);_.Kf=function F0b(a,b){y0b(this,RD(a,36),b)};var TQ=sfb(PAe,'CompoundGraphPreprocessor',1279);feb(452,1,{452:1},G0b);_.c=false;var SQ=sfb(PAe,'CompoundGraphPreprocessor/ExternalPort',452);feb(249,1,{249:1},J0b);_.Ib=function K0b(){return ps(this.c)+':'+_0b(this.b)};var VQ=sfb(PAe,'CrossHierarchyEdge',249);feb(777,1,fye,M0b);_.Ne=function N0b(a,b){return L0b(this,RD(a,249),RD(b,249))};_.Fb=function O0b(a){return this===a};_.Oe=function Q0b(){return new Frb(this)};var UQ=sfb(PAe,'CrossHierarchyEdgeComparator',777);feb(304,137,{3:1,304:1,96:1,137:1});_.p=0;var dR=sfb(RAe,'LGraphElement',304);feb(18,304,{3:1,18:1,304:1,96:1,137:1},a1b);_.Ib=function b1b(){return _0b(this)};var WQ=sfb(RAe,'LEdge',18);feb(36,304,{3:1,20:1,36:1,304:1,96:1,137:1},d1b);_.Jc=function e1b(a){xgb(this,a)};_.Kc=function f1b(){return new Anb(this.b)};_.Ib=function g1b(){if(this.b.c.length==0){return 'G-unlayered'+Fe(this.a)}else if(this.a.c.length==0){return 'G-layered'+Fe(this.b)}return 'G[layerless'+Fe(this.a)+', layers'+Fe(this.b)+']'};var eR=sfb(RAe,'LGraph',36);var h1b;feb(666,1,{});_.Lf=function j1b(){return this.e.n};_.of=function k1b(a){return mQb(this.e,a)};_.Mf=function l1b(){return this.e.o};_.Nf=function m1b(){return this.e.p};_.pf=function n1b(a){return nQb(this.e,a)};_.Of=function o1b(a){this.e.n.a=a.a;this.e.n.b=a.b};_.Pf=function p1b(a){this.e.o.a=a.a;this.e.o.b=a.b};_.Qf=function q1b(a){this.e.p=a};var XQ=sfb(RAe,'LGraphAdapters/AbstractLShapeAdapter',666);feb(473,1,{853:1},r1b);_.Rf=function s1b(){var a,b;if(!this.b){this.b=ev(this.a.b.c.length);for(b=new Anb(this.a.b);b.a<b.c.c.length;){a=RD(ynb(b),72);Rmb(this.b,new D1b(a))}}return this.b};_.b=null;var YQ=sfb(RAe,'LGraphAdapters/LEdgeAdapter',473);feb(665,1,{},t1b);_.Sf=function u1b(){var a,b,c,d,e,f;if(!this.b){this.b=new bnb;for(d=new Anb(this.a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);if(this.c.Mb(e)){Rmb(this.b,new F1b(this,e,this.e));if(this.d){if(nQb(e,(Ywc(),Xwc))){for(b=RD(mQb(e,Xwc),15).Kc();b.Ob();){a=RD(b.Pb(),10);Rmb(this.b,new F1b(this,a,false))}}if(nQb(e,Vvc)){for(b=RD(mQb(e,Vvc),15).Kc();b.Ob();){a=RD(b.Pb(),10);Rmb(this.b,new F1b(this,a,false))}}}}}}}return this.b};_.Lf=function v1b(){throw Adb(new kib(TAe))};_.of=function w1b(a){return mQb(this.a,a)};_.Mf=function x1b(){return this.a.f};_.Nf=function y1b(){return this.a.p};_.pf=function z1b(a){return nQb(this.a,a)};_.Of=function A1b(a){throw Adb(new kib(TAe))};_.Pf=function B1b(a){this.a.f.a=a.a;this.a.f.b=a.b};_.Qf=function C1b(a){this.a.p=a};_.b=null;_.d=false;_.e=false;var ZQ=sfb(RAe,'LGraphAdapters/LGraphAdapter',665);feb(585,666,{187:1},D1b);var $Q=sfb(RAe,'LGraphAdapters/LLabelAdapter',585);feb(584,666,{695:1},F1b);_.Tf=function G1b(){return this.b};_.Uf=function H1b(){return yob(),yob(),vob};_.Rf=function I1b(){var a,b;if(!this.a){this.a=ev(RD(this.e,10).b.c.length);for(b=new Anb(RD(this.e,10).b);b.a<b.c.c.length;){a=RD(ynb(b),72);Rmb(this.a,new D1b(a))}}return this.a};_.Vf=function J1b(){var a;a=RD(this.e,10).d;return new R2b(a.d,a.c,a.a,a.b)};_.Wf=function K1b(){return yob(),yob(),vob};_.Xf=function L1b(){var a,b;if(!this.c){this.c=ev(RD(this.e,10).j.c.length);for(b=new Anb(RD(this.e,10).j);b.a<b.c.c.length;){a=RD(ynb(b),12);Rmb(this.c,new Q1b(a,this.d))}}return this.c};_.Yf=function M1b(){return Heb(TD(mQb(RD(this.e,10),(Ywc(),Yvc))))};_.Zf=function N1b(a){RD(this.e,10).d.b=a.b;RD(this.e,10).d.d=a.d;RD(this.e,10).d.c=a.c;RD(this.e,10).d.a=a.a};_.$f=function O1b(a){RD(this.e,10).f.b=a.b;RD(this.e,10).f.d=a.d;RD(this.e,10).f.c=a.c;RD(this.e,10).f.a=a.a};_._f=function P1b(){E1b(this,(i1b(),h1b))};_.a=null;_.b=null;_.c=null;_.d=false;var _Q=sfb(RAe,'LGraphAdapters/LNodeAdapter',584);feb(1788,666,{852:1},Q1b);_.Uf=function R1b(){var a,b,c,d,e,f,g,h;if(this.d&&RD(this.e,12).i.k==(r3b(),q3b)){return yob(),yob(),vob}else if(!this.a){this.a=new bnb;for(c=new Anb(RD(this.e,12).e);c.a<c.c.c.length;){a=RD(ynb(c),18);Rmb(this.a,new r1b(a))}if(this.d){d=RD(mQb(RD(this.e,12),(Ywc(),Iwc)),10);if(d){for(b=new is(Mr(Z2b(d).a.Kc(),new ir));gs(b);){a=RD(hs(b),18);Rmb(this.a,new r1b(a))}}}if(nQb(RD(this.e,12).i,(Ywc(),Pwc))){g=RD(mQb(RD(this.e,12).i,Pwc),337);h=RD(cub(g.e,this.e),113);if(h){for(f=new Anb(h.b);f.a<f.c.c.length;){e=RD(ynb(f),340);Rmb(this.a,new r1b(e.a))}}}}return this.a};_.Rf=function S1b(){var a,b;if(!this.b){this.b=ev(RD(this.e,12).f.c.length);for(b=new Anb(RD(this.e,12).f);b.a<b.c.c.length;){a=RD(ynb(b),72);Rmb(this.b,new D1b(a))}}return this.b};_.Wf=function T1b(){var a,b,c,d,e,f,g,h;if(this.d&&RD(this.e,12).i.k==(r3b(),q3b)){return yob(),yob(),vob}else if(!this.c){this.c=new bnb;for(c=new Anb(RD(this.e,12).g);c.a<c.c.c.length;){a=RD(ynb(c),18);Rmb(this.c,new r1b(a))}if(this.d){d=RD(mQb(RD(this.e,12),(Ywc(),Iwc)),10);if(d){for(b=new is(Mr(a3b(d).a.Kc(),new ir));gs(b);){a=RD(hs(b),18);Rmb(this.c,new r1b(a))}}}if(nQb(RD(this.e,12).i,(Ywc(),Pwc))){g=RD(mQb(RD(this.e,12).i,Pwc),337);h=RD(cub(g.e,this.e),113);if(h){for(f=new Anb(h.e);f.a<f.c.c.length;){e=RD(ynb(f),340);Rmb(this.c,new r1b(e.a))}}}}return this.c};_.ag=function U1b(){return RD(this.e,12).j};_.bg=function V1b(){return Heb(TD(mQb(RD(this.e,12),(Ywc(),nwc))))};_.a=null;_.b=null;_.c=null;_.d=false;var aR=sfb(RAe,'LGraphAdapters/LPortAdapter',1788);feb(1789,1,fye,X1b);_.Ne=function Y1b(a,b){return W1b(RD(a,12),RD(b,12))};_.Fb=function Z1b(a){return this===a};_.Oe=function $1b(){return new Frb(this)};var bR=sfb(RAe,'LGraphAdapters/PortComparator',1789);feb(818,1,nwe,_1b);_.Mb=function a2b(a){return RD(a,10),i1b(),true};var cR=sfb(RAe,'LGraphAdapters/lambda$0$Type',818);feb(404,304,{3:1,304:1,404:1,96:1,137:1});var yR=sfb(RAe,'LShape',404);feb(72,404,{3:1,304:1,72:1,404:1,96:1,137:1},x2b,y2b);_.Ib=function z2b(){var a;a=w2b(this);return a==null?'label':'l_'+a};var fR=sfb(RAe,'LLabel',72);feb(214,1,{3:1,4:1,214:1,423:1});_.Fb=function K2b(a){var b;if(ZD(a,214)){b=RD(a,214);return this.d==b.d&&this.a==b.a&&this.b==b.b&&this.c==b.c}else{return false}};_.Hb=function L2b(){var a,b;a=Nfb(this.b)<<16;a|=Nfb(this.a)&Bwe;b=Nfb(this.c)<<16;b|=Nfb(this.d)&Bwe;return a^b};_.cg=function N2b(b){var c,d,e,f,g,h,i,j,k,l,m;g=0;while(g<b.length&&M2b((BFb(g,b.length),b.charCodeAt(g)),YAe)){++g}c=b.length;while(c>0&&M2b((BFb(c-1,b.length),b.charCodeAt(c-1)),ZAe)){--c}if(g<c){l=vhb((AFb(g,c,b.length),b.substr(g,c-g)),',|;');try{for(i=l,j=0,k=i.length;j<k;++j){h=i[j];f=vhb(h,'=');if(f.length!=2){throw Adb(new agb('Expecting a list of key-value pairs.'))}e=Dhb(f[0]);m=Neb(Dhb(f[1]));lhb(e,'top')?(this.d=m):lhb(e,'left')?(this.b=m):lhb(e,'bottom')?(this.a=m):lhb(e,'right')&&(this.c=m)}}catch(a){a=zdb(a);if(ZD(a,130)){d=a;throw Adb(new agb($Ae+d))}else throw Adb(a)}}};_.Ib=function O2b(){return '[top='+this.d+',left='+this.b+',bottom='+this.a+',right='+this.c+']'};_.a=0;_.b=0;_.c=0;_.d=0;var m3=sfb(_Ae,'Spacing',214);feb(140,214,aBe,P2b,Q2b,R2b,S2b);var h3=sfb(_Ae,'ElkMargin',140);feb(660,140,aBe,T2b);var gR=sfb(RAe,'LMargin',660);feb(10,404,{3:1,304:1,10:1,404:1,96:1,137:1},j3b);_.Ib=function k3b(){return i3b(this)};_.i=false;var jR=sfb(RAe,'LNode',10);feb(273,22,{3:1,34:1,22:1,273:1},s3b);var l3b,m3b,n3b,o3b,p3b,q3b;var hR=tfb(RAe,'LNode/NodeType',273,WI,u3b,t3b);var v3b;feb(775,1,nwe,x3b);_.Mb=function y3b(a){return Heb(TD(mQb(RD(a,72),(yCc(),vAc))))};var iR=sfb(RAe,'LNode/lambda$0$Type',775);feb(107,214,bBe,z3b,A3b,B3b);var i3=sfb(_Ae,'ElkPadding',107);feb(778,107,bBe,C3b);var kR=sfb(RAe,'LPadding',778);feb(12,404,{3:1,304:1,12:1,404:1,96:1,137:1},R3b);_.Ib=function S3b(){var a,b,c;a=new bib;Zhb((a.a+='p_',a),M3b(this));!!this.i&&Zhb(Yhb((a.a+='[',a),this.i),']');if(this.e.c.length==1&&this.g.c.length==0&&RD(Vmb(this.e,0),18).c!=this){b=RD(Vmb(this.e,0),18).c;Zhb((a.a+=' << ',a),M3b(b));Zhb(Yhb((a.a+='[',a),b.i),']')}if(this.e.c.length==0&&this.g.c.length==1&&RD(Vmb(this.g,0),18).d!=this){c=RD(Vmb(this.g,0),18).d;Zhb((a.a+=' >> ',a),M3b(c));Zhb(Yhb((a.a+='[',a),c.i),']')}return a.a};_.c=true;_.d=false;var D3b,E3b,F3b,G3b,H3b,I3b;var xR=sfb(RAe,'LPort',12);feb(408,1,Vve,T3b);_.Jc=function U3b(a){xgb(this,a)};_.Kc=function V3b(){var a;a=new Anb(this.a.e);return new W3b(a)};var mR=sfb(RAe,'LPort/1',408);feb(1309,1,Ave,W3b);_.Nb=function X3b(a){Ztb(this,a)};_.Pb=function Z3b(){return RD(ynb(this.a),18).c};_.Ob=function Y3b(){return xnb(this.a)};_.Qb=function $3b(){znb(this.a)};var lR=sfb(RAe,'LPort/1/1',1309);feb(369,1,Vve,_3b);_.Jc=function a4b(a){xgb(this,a)};_.Kc=function b4b(){var a;return a=new Anb(this.a.g),new c4b(a)};var oR=sfb(RAe,'LPort/2',369);feb(776,1,Ave,c4b);_.Nb=function d4b(a){Ztb(this,a)};_.Pb=function f4b(){return RD(ynb(this.a),18).d};_.Ob=function e4b(){return xnb(this.a)};_.Qb=function g4b(){znb(this.a)};var nR=sfb(RAe,'LPort/2/1',776);feb(1302,1,Vve,h4b);_.Jc=function i4b(a){xgb(this,a)};_.Kc=function j4b(){return new l4b(this)};var qR=sfb(RAe,'LPort/CombineIter',1302);feb(208,1,Ave,l4b);_.Nb=function m4b(a){Ztb(this,a)};_.Qb=function p4b(){$tb()};_.Ob=function n4b(){return k4b(this)};_.Pb=function o4b(){return xnb(this.a)?ynb(this.a):ynb(this.b)};var pR=sfb(RAe,'LPort/CombineIter/1',208);feb(1303,1,xye,r4b);_.Lb=function s4b(a){return q4b(a)};_.Fb=function t4b(a){return this===a};_.Mb=function u4b(a){return J3b(),RD(a,12).g.c.length!=0};var rR=sfb(RAe,'LPort/lambda$0$Type',1303);feb(1304,1,xye,w4b);_.Lb=function x4b(a){return v4b(a)};_.Fb=function y4b(a){return this===a};_.Mb=function z4b(a){return J3b(),RD(a,12).e.c.length!=0};var sR=sfb(RAe,'LPort/lambda$1$Type',1304);feb(1305,1,xye,A4b);_.Lb=function B4b(a){return J3b(),RD(a,12).j==(qpd(),Yod)};_.Fb=function C4b(a){return this===a};_.Mb=function D4b(a){return J3b(),RD(a,12).j==(qpd(),Yod)};var tR=sfb(RAe,'LPort/lambda$2$Type',1305);feb(1306,1,xye,E4b);_.Lb=function F4b(a){return J3b(),RD(a,12).j==(qpd(),Xod)};_.Fb=function G4b(a){return this===a};_.Mb=function H4b(a){return J3b(),RD(a,12).j==(qpd(),Xod)};var uR=sfb(RAe,'LPort/lambda$3$Type',1306);feb(1307,1,xye,I4b);_.Lb=function J4b(a){return J3b(),RD(a,12).j==(qpd(),npd)};_.Fb=function K4b(a){return this===a};_.Mb=function L4b(a){return J3b(),RD(a,12).j==(qpd(),npd)};var vR=sfb(RAe,'LPort/lambda$4$Type',1307);feb(1308,1,xye,M4b);_.Lb=function N4b(a){return J3b(),RD(a,12).j==(qpd(),ppd)};_.Fb=function O4b(a){return this===a};_.Mb=function P4b(a){return J3b(),RD(a,12).j==(qpd(),ppd)};var wR=sfb(RAe,'LPort/lambda$5$Type',1308);feb(30,304,{3:1,20:1,304:1,30:1,96:1,137:1},R4b);_.Jc=function S4b(a){xgb(this,a)};_.Kc=function T4b(){return new Anb(this.a)};_.Ib=function U4b(){return 'L_'+Wmb(this.b.b,this,0)+Fe(this.a)};var zR=sfb(RAe,'Layer',30);feb(1330,1,{},k5b);var JR=sfb(cBe,dBe,1330);feb(1334,1,{},o5b);_.Kb=function p5b(a){return AGd(RD(a,84))};var AR=sfb(cBe,'ElkGraphImporter/0methodref$connectableShapeToNode$Type',1334);feb(1337,1,{},q5b);_.Kb=function r5b(a){return AGd(RD(a,84))};var BR=sfb(cBe,'ElkGraphImporter/1methodref$connectableShapeToNode$Type',1337);feb(1331,1,Qve,s5b);_.Cd=function t5b(a){$4b(this.a,RD(a,123))};var CR=sfb(cBe,Nze,1331);feb(1332,1,Qve,u5b);_.Cd=function v5b(a){$4b(this.a,RD(a,123))};var DR=sfb(cBe,eBe,1332);feb(1333,1,{},w5b);_.Kb=function x5b(a){return new SDb(null,new Swb(mzd(RD(a,74)),16))};var ER=sfb(cBe,fBe,1333);feb(1335,1,nwe,y5b);_.Mb=function z5b(a){return l5b(this.a,RD(a,27))};var FR=sfb(cBe,gBe,1335);feb(1336,1,{},A5b);_.Kb=function B5b(a){return new SDb(null,new Swb(lzd(RD(a,74)),16))};var GR=sfb(cBe,'ElkGraphImporter/lambda$5$Type',1336);feb(1338,1,nwe,C5b);_.Mb=function D5b(a){return m5b(this.a,RD(a,27))};var HR=sfb(cBe,'ElkGraphImporter/lambda$7$Type',1338);feb(1339,1,nwe,E5b);_.Mb=function F5b(a){return n5b(RD(a,74))};var IR=sfb(cBe,'ElkGraphImporter/lambda$8$Type',1339);feb(1297,1,{},N5b);var G5b;var OR=sfb(cBe,'ElkGraphLayoutTransferrer',1297);feb(1298,1,nwe,Q5b);_.Mb=function R5b(a){return O5b(this.a,RD(a,18))};var KR=sfb(cBe,'ElkGraphLayoutTransferrer/lambda$0$Type',1298);feb(1299,1,Qve,S5b);_.Cd=function T5b(a){H5b();Rmb(this.a,RD(a,18))};var LR=sfb(cBe,'ElkGraphLayoutTransferrer/lambda$1$Type',1299);feb(1300,1,nwe,U5b);_.Mb=function V5b(a){return P5b(this.a,RD(a,18))};var MR=sfb(cBe,'ElkGraphLayoutTransferrer/lambda$2$Type',1300);feb(1301,1,Qve,W5b);_.Cd=function X5b(a){H5b();Rmb(this.a,RD(a,18))};var NR=sfb(cBe,'ElkGraphLayoutTransferrer/lambda$3$Type',1301);feb(819,1,{},e6b);var PR=sfb(hBe,'BiLinkedHashMultiMap',819);feb(1550,1,QAe,h6b);_.Kf=function i6b(a,b){f6b(RD(a,36),b)};var SR=sfb(hBe,'CommentNodeMarginCalculator',1550);feb(1551,1,{},j6b);_.Kb=function k6b(a){return new SDb(null,new Swb(RD(a,30).a,16))};var QR=sfb(hBe,'CommentNodeMarginCalculator/lambda$0$Type',1551);feb(1552,1,Qve,l6b);_.Cd=function m6b(a){g6b(RD(a,10))};var RR=sfb(hBe,'CommentNodeMarginCalculator/lambda$1$Type',1552);feb(1553,1,QAe,q6b);_.Kf=function r6b(a,b){o6b(RD(a,36),b)};var TR=sfb(hBe,'CommentPostprocessor',1553);feb(1554,1,QAe,v6b);_.Kf=function w6b(a,b){s6b(RD(a,36),b)};var UR=sfb(hBe,'CommentPreprocessor',1554);feb(1555,1,QAe,y6b);_.Kf=function z6b(a,b){x6b(RD(a,36),b)};var VR=sfb(hBe,'ConstraintsPostprocessor',1555);feb(1556,1,QAe,G6b);_.Kf=function H6b(a,b){E6b(RD(a,36),b)};var WR=sfb(hBe,'EdgeAndLayerConstraintEdgeReverser',1556);feb(1557,1,QAe,K6b);_.Kf=function M6b(a,b){I6b(RD(a,36),b)};var $R=sfb(hBe,'EndLabelPostprocessor',1557);feb(1558,1,{},N6b);_.Kb=function O6b(a){return new SDb(null,new Swb(RD(a,30).a,16))};var XR=sfb(hBe,'EndLabelPostprocessor/lambda$0$Type',1558);feb(1559,1,nwe,P6b);_.Mb=function Q6b(a){return L6b(RD(a,10))};var YR=sfb(hBe,'EndLabelPostprocessor/lambda$1$Type',1559);feb(1560,1,Qve,R6b);_.Cd=function S6b(a){J6b(RD(a,10))};var ZR=sfb(hBe,'EndLabelPostprocessor/lambda$2$Type',1560);feb(1561,1,QAe,b7b);_.Kf=function e7b(a,b){Z6b(RD(a,36),b)};var fS=sfb(hBe,'EndLabelPreprocessor',1561);feb(1562,1,{},f7b);_.Kb=function g7b(a){return new SDb(null,new Swb(RD(a,30).a,16))};var _R=sfb(hBe,'EndLabelPreprocessor/lambda$0$Type',1562);feb(1563,1,Qve,h7b);_.Cd=function i7b(a){V6b(this.a,this.b,this.c,RD(a,10))};_.a=0;_.b=0;_.c=false;var aS=sfb(hBe,'EndLabelPreprocessor/lambda$1$Type',1563);feb(1564,1,nwe,j7b);_.Mb=function k7b(a){return dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Nmd))};var bS=sfb(hBe,'EndLabelPreprocessor/lambda$2$Type',1564);feb(1565,1,Qve,l7b);_.Cd=function m7b(a){Mub(this.a,RD(a,72))};var cS=sfb(hBe,'EndLabelPreprocessor/lambda$3$Type',1565);feb(1566,1,nwe,n7b);_.Mb=function o7b(a){return dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Mmd))};var dS=sfb(hBe,'EndLabelPreprocessor/lambda$4$Type',1566);feb(1567,1,Qve,p7b);_.Cd=function q7b(a){Mub(this.a,RD(a,72))};var eS=sfb(hBe,'EndLabelPreprocessor/lambda$5$Type',1567);feb(1615,1,QAe,z7b);_.Kf=function A7b(a,b){w7b(RD(a,36),b)};var r7b;var nS=sfb(hBe,'EndLabelSorter',1615);feb(1616,1,fye,C7b);_.Ne=function D7b(a,b){return B7b(RD(a,465),RD(b,465))};_.Fb=function E7b(a){return this===a};_.Oe=function F7b(){return new Frb(this)};var gS=sfb(hBe,'EndLabelSorter/1',1616);feb(465,1,{465:1},G7b);var hS=sfb(hBe,'EndLabelSorter/LabelGroup',465);feb(1617,1,{},H7b);_.Kb=function I7b(a){return s7b(),new SDb(null,new Swb(RD(a,30).a,16))};var iS=sfb(hBe,'EndLabelSorter/lambda$0$Type',1617);feb(1618,1,nwe,J7b);_.Mb=function K7b(a){return s7b(),RD(a,10).k==(r3b(),p3b)};var jS=sfb(hBe,'EndLabelSorter/lambda$1$Type',1618);feb(1619,1,Qve,L7b);_.Cd=function M7b(a){x7b(RD(a,10))};var kS=sfb(hBe,'EndLabelSorter/lambda$2$Type',1619);feb(1620,1,nwe,N7b);_.Mb=function O7b(a){return s7b(),dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Mmd))};var lS=sfb(hBe,'EndLabelSorter/lambda$3$Type',1620);feb(1621,1,nwe,P7b);_.Mb=function Q7b(a){return s7b(),dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Nmd))};var mS=sfb(hBe,'EndLabelSorter/lambda$4$Type',1621);feb(1568,1,QAe,a8b);_.Kf=function b8b(a,b){$7b(this,RD(a,36))};_.b=0;_.c=0;var uS=sfb(hBe,'FinalSplineBendpointsCalculator',1568);feb(1569,1,{},c8b);_.Kb=function d8b(a){return new SDb(null,new Swb(RD(a,30).a,16))};var oS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$0$Type',1569);feb(1570,1,{},e8b);_.Kb=function f8b(a){return new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var pS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$1$Type',1570);feb(1571,1,nwe,g8b);_.Mb=function h8b(a){return !W0b(RD(a,18))};var qS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$2$Type',1571);feb(1572,1,nwe,i8b);_.Mb=function j8b(a){return nQb(RD(a,18),(Ywc(),Twc))};var rS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$3$Type',1572);feb(1573,1,Qve,k8b);_.Cd=function l8b(a){T7b(this.a,RD(a,131))};var sS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$4$Type',1573);feb(1574,1,Qve,m8b);_.Cd=function n8b(a){Eob(RD(a,18).a)};var tS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$5$Type',1574);feb(803,1,QAe,L8b);_.Kf=function M8b(a,b){C8b(this,RD(a,36),b)};var wS=sfb(hBe,'GraphTransformer',803);feb(517,22,{3:1,34:1,22:1,517:1},Q8b);var N8b,O8b;var vS=tfb(hBe,'GraphTransformer/Mode',517,WI,S8b,R8b);var T8b;feb(1575,1,QAe,Z8b);_.Kf=function $8b(a,b){W8b(RD(a,36),b)};var xS=sfb(hBe,'HierarchicalNodeResizingProcessor',1575);feb(1576,1,QAe,f9b);_.Kf=function g9b(a,b){b9b(RD(a,36),b)};var zS=sfb(hBe,'HierarchicalPortConstraintProcessor',1576);feb(1577,1,fye,i9b);_.Ne=function j9b(a,b){return h9b(RD(a,10),RD(b,10))};_.Fb=function k9b(a){return this===a};_.Oe=function l9b(){return new Frb(this)};var yS=sfb(hBe,'HierarchicalPortConstraintProcessor/NodeComparator',1577);feb(1578,1,QAe,o9b);_.Kf=function p9b(a,b){m9b(RD(a,36),b)};var AS=sfb(hBe,'HierarchicalPortDummySizeProcessor',1578);feb(1579,1,QAe,C9b);_.Kf=function D9b(a,b){v9b(this,RD(a,36),b)};_.a=0;var DS=sfb(hBe,'HierarchicalPortOrthogonalEdgeRouter',1579);feb(1580,1,fye,F9b);_.Ne=function G9b(a,b){return E9b(RD(a,10),RD(b,10))};_.Fb=function H9b(a){return this===a};_.Oe=function I9b(){return new Frb(this)};var BS=sfb(hBe,'HierarchicalPortOrthogonalEdgeRouter/1',1580);feb(1581,1,fye,K9b);_.Ne=function L9b(a,b){return J9b(RD(a,10),RD(b,10))};_.Fb=function M9b(a){return this===a};_.Oe=function N9b(){return new Frb(this)};var CS=sfb(hBe,'HierarchicalPortOrthogonalEdgeRouter/2',1581);feb(1582,1,QAe,Q9b);_.Kf=function R9b(a,b){P9b(RD(a,36),b)};var ES=sfb(hBe,'HierarchicalPortPositionProcessor',1582);feb(1583,1,QAe,$9b);_.Kf=function _9b(a,b){Z9b(this,RD(a,36))};_.a=0;_.c=0;var S9b,T9b;var IS=sfb(hBe,'HighDegreeNodeLayeringProcessor',1583);feb(580,1,{580:1},aac);_.b=-1;_.d=-1;var FS=sfb(hBe,'HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation',580);feb(1584,1,{},bac);_.Kb=function cac(a){return U9b(),Z2b(RD(a,10))};_.Fb=function dac(a){return this===a};var GS=sfb(hBe,'HighDegreeNodeLayeringProcessor/lambda$0$Type',1584);feb(1585,1,{},eac);_.Kb=function fac(a){return U9b(),a3b(RD(a,10))};_.Fb=function gac(a){return this===a};var HS=sfb(hBe,'HighDegreeNodeLayeringProcessor/lambda$1$Type',1585);feb(1591,1,QAe,mac);_.Kf=function nac(a,b){lac(this,RD(a,36),b)};var NS=sfb(hBe,'HyperedgeDummyMerger',1591);feb(804,1,{},oac);_.a=false;_.b=false;_.c=false;var JS=sfb(hBe,'HyperedgeDummyMerger/MergeState',804);feb(1592,1,{},pac);_.Kb=function qac(a){return new SDb(null,new Swb(RD(a,30).a,16))};var KS=sfb(hBe,'HyperedgeDummyMerger/lambda$0$Type',1592);feb(1593,1,{},rac);_.Kb=function sac(a){return new SDb(null,new Swb(RD(a,10).j,16))};var LS=sfb(hBe,'HyperedgeDummyMerger/lambda$1$Type',1593);feb(1594,1,Qve,tac);_.Cd=function uac(a){RD(a,12).p=-1};var MS=sfb(hBe,'HyperedgeDummyMerger/lambda$2$Type',1594);feb(1595,1,QAe,xac);_.Kf=function yac(a,b){wac(RD(a,36),b)};var OS=sfb(hBe,'HypernodesProcessor',1595);feb(1596,1,QAe,Aac);_.Kf=function Bac(a,b){zac(RD(a,36),b)};var PS=sfb(hBe,'InLayerConstraintProcessor',1596);feb(1597,1,QAe,Dac);_.Kf=function Eac(a,b){Cac(RD(a,36),b)};var QS=sfb(hBe,'InnermostNodeMarginCalculator',1597);feb(1598,1,QAe,Iac);_.Kf=function Nac(a,b){Hac(this,RD(a,36))};_.a=pxe;_.b=pxe;_.c=oxe;_.d=oxe;var XS=sfb(hBe,'InteractiveExternalPortPositioner',1598);feb(1599,1,{},Oac);_.Kb=function Pac(a){return RD(a,18).d.i};_.Fb=function Qac(a){return this===a};var RS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$0$Type',1599);feb(1600,1,{},Rac);_.Kb=function Sac(a){return Jac(this.a,UD(a))};_.Fb=function Tac(a){return this===a};var SS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$1$Type',1600);feb(1601,1,{},Uac);_.Kb=function Vac(a){return RD(a,18).c.i};_.Fb=function Wac(a){return this===a};var TS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$2$Type',1601);feb(1602,1,{},Xac);_.Kb=function Yac(a){return Kac(this.a,UD(a))};_.Fb=function Zac(a){return this===a};var US=sfb(hBe,'InteractiveExternalPortPositioner/lambda$3$Type',1602);feb(1603,1,{},$ac);_.Kb=function _ac(a){return Lac(this.a,UD(a))};_.Fb=function abc(a){return this===a};var VS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$4$Type',1603);feb(1604,1,{},bbc);_.Kb=function cbc(a){return Mac(this.a,UD(a))};_.Fb=function dbc(a){return this===a};var WS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$5$Type',1604);feb(81,22,{3:1,34:1,22:1,81:1,196:1},icc);_.dg=function jcc(){switch(this.g){case 15:return new Hrc;case 22:return new bsc;case 47:return new ksc;case 28:case 35:return new Ldc;case 32:return new h6b;case 42:return new q6b;case 1:return new v6b;case 41:return new y6b;case 56:return new L8b((P8b(),O8b));case 0:return new L8b((P8b(),N8b));case 2:return new G6b;case 54:return new K6b;case 33:return new b7b;case 51:return new a8b;case 55:return new Z8b;case 13:return new f9b;case 38:return new o9b;case 44:return new C9b;case 40:return new Q9b;case 9:return new $9b;case 49:return new Yjc;case 37:return new mac;case 43:return new xac;case 27:return new Aac;case 30:return new Dac;case 3:return new Iac;case 18:return new scc;case 29:return new ycc;case 5:return new Lcc;case 50:return new Ucc;case 34:return new pdc;case 36:return new Zdc;case 52:return new z7b;case 11:return new fec;case 7:return new pec;case 39:return new Dec;case 45:return new Gec;case 16:return new Kec;case 10:return new _ec;case 48:return new Bfc;case 21:return new Ifc;case 23:return new FKc((RKc(),PKc));case 8:return new Rfc;case 12:return new Zfc;case 4:return new cgc;case 19:return new xgc;case 17:return new Vgc;case 53:return new Ygc;case 6:return new Nhc;case 25:return new ahc;case 46:return new rhc;case 31:return new Yhc;case 14:return new jic;case 26:return new Ssc;case 20:return new yic;case 24:return new FKc((RKc(),QKc));default:throw Adb(new agb(lBe+(this.f!=null?this.f:''+this.g)));}};var ebc,fbc,gbc,hbc,ibc,jbc,kbc,lbc,mbc,nbc,obc,pbc,qbc,rbc,sbc,tbc,ubc,vbc,wbc,xbc,ybc,zbc,Abc,Bbc,Cbc,Dbc,Ebc,Fbc,Gbc,Hbc,Ibc,Jbc,Kbc,Lbc,Mbc,Nbc,Obc,Pbc,Qbc,Rbc,Sbc,Tbc,Ubc,Vbc,Wbc,Xbc,Ybc,Zbc,$bc,_bc,acc,bcc,ccc,dcc,ecc,fcc,gcc;var YS=tfb(hBe,mBe,81,WI,lcc,kcc);var mcc;feb(1605,1,QAe,scc);_.Kf=function tcc(a,b){qcc(RD(a,36),b)};var ZS=sfb(hBe,'InvertedPortProcessor',1605);feb(1606,1,QAe,ycc);_.Kf=function zcc(a,b){xcc(RD(a,36),b)};var bT=sfb(hBe,'LabelAndNodeSizeProcessor',1606);feb(1607,1,nwe,Acc);_.Mb=function Bcc(a){return RD(a,10).k==(r3b(),p3b)};var $S=sfb(hBe,'LabelAndNodeSizeProcessor/lambda$0$Type',1607);feb(1608,1,nwe,Ccc);_.Mb=function Dcc(a){return RD(a,10).k==(r3b(),m3b)};var _S=sfb(hBe,'LabelAndNodeSizeProcessor/lambda$1$Type',1608);feb(1609,1,Qve,Ecc);_.Cd=function Fcc(a){vcc(this.b,this.a,this.c,RD(a,10))};_.a=false;_.c=false;var aT=sfb(hBe,'LabelAndNodeSizeProcessor/lambda$2$Type',1609);feb(1610,1,QAe,Lcc);_.Kf=function Mcc(a,b){Jcc(RD(a,36),b)};var Gcc;var dT=sfb(hBe,'LabelDummyInserter',1610);feb(1611,1,xye,Ncc);_.Lb=function Occ(a){return dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Lmd))};_.Fb=function Pcc(a){return this===a};_.Mb=function Qcc(a){return dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Lmd))};var cT=sfb(hBe,'LabelDummyInserter/1',1611);feb(1612,1,QAe,Ucc);_.Kf=function Vcc(a,b){Tcc(RD(a,36),b)};var fT=sfb(hBe,'LabelDummyRemover',1612);feb(1613,1,nwe,Wcc);_.Mb=function Xcc(a){return Heb(TD(mQb(RD(a,72),(yCc(),vAc))))};var eT=sfb(hBe,'LabelDummyRemover/lambda$0$Type',1613);feb(1378,1,QAe,pdc);_.Kf=function tdc(a,b){ldc(this,RD(a,36),b)};_.a=null;var Ycc;var mT=sfb(hBe,'LabelDummySwitcher',1378);feb(292,1,{292:1},xdc);_.c=0;_.d=null;_.f=0;var gT=sfb(hBe,'LabelDummySwitcher/LabelDummyInfo',292);feb(1379,1,{},ydc);_.Kb=function zdc(a){return Zcc(),new SDb(null,new Swb(RD(a,30).a,16))};var hT=sfb(hBe,'LabelDummySwitcher/lambda$0$Type',1379);feb(1380,1,nwe,Adc);_.Mb=function Bdc(a){return Zcc(),RD(a,10).k==(r3b(),n3b)};var iT=sfb(hBe,'LabelDummySwitcher/lambda$1$Type',1380);feb(1381,1,{},Cdc);_.Kb=function Ddc(a){return qdc(this.a,RD(a,10))};var jT=sfb(hBe,'LabelDummySwitcher/lambda$2$Type',1381);feb(1382,1,Qve,Edc);_.Cd=function Fdc(a){rdc(this.a,RD(a,292))};var kT=sfb(hBe,'LabelDummySwitcher/lambda$3$Type',1382);feb(1383,1,fye,Gdc);_.Ne=function Hdc(a,b){return sdc(RD(a,292),RD(b,292))};_.Fb=function Idc(a){return this===a};_.Oe=function Jdc(){return new Frb(this)};var lT=sfb(hBe,'LabelDummySwitcher/lambda$4$Type',1383);feb(802,1,QAe,Ldc);_.Kf=function Mdc(a,b){Kdc(RD(a,36),b)};var nT=sfb(hBe,'LabelManagementProcessor',802);feb(1614,1,QAe,Zdc);_.Kf=function $dc(a,b){Tdc(RD(a,36),b)};var oT=sfb(hBe,'LabelSideSelector',1614);feb(1622,1,QAe,fec);_.Kf=function gec(a,b){bec(RD(a,36),b)};var pT=sfb(hBe,'LayerConstraintPostprocessor',1622);feb(1623,1,QAe,pec);_.Kf=function qec(a,b){nec(RD(a,36),b)};var hec;var rT=sfb(hBe,'LayerConstraintPreprocessor',1623);feb(371,22,{3:1,34:1,22:1,371:1},xec);var rec,sec,tec,uec;var qT=tfb(hBe,'LayerConstraintPreprocessor/HiddenNodeConnections',371,WI,zec,yec);var Aec;feb(1624,1,QAe,Dec);_.Kf=function Eec(a,b){Cec(RD(a,36),b)};var sT=sfb(hBe,'LayerSizeAndGraphHeightCalculator',1624);feb(1625,1,QAe,Gec);_.Kf=function Iec(a,b){Fec(RD(a,36),b)};var tT=sfb(hBe,'LongEdgeJoiner',1625);feb(1626,1,QAe,Kec);_.Kf=function Mec(a,b){Jec(RD(a,36),b)};var uT=sfb(hBe,'LongEdgeSplitter',1626);feb(1627,1,QAe,_ec);_.Kf=function cfc(a,b){Vec(this,RD(a,36),b)};_.e=0;_.f=0;_.j=0;_.k=0;_.n=0;_.o=0;var Pec,Qec;var AT=sfb(hBe,'NodePromotion',1627);feb(1628,1,fye,efc);_.Ne=function ffc(a,b){return dfc(RD(a,10),RD(b,10))};_.Fb=function gfc(a){return this===a};_.Oe=function hfc(){return new Frb(this)};var vT=sfb(hBe,'NodePromotion/1',1628);feb(1629,1,fye,jfc);_.Ne=function kfc(a,b){return ifc(RD(a,10),RD(b,10))};_.Fb=function lfc(a){return this===a};_.Oe=function mfc(){return new Frb(this)};var wT=sfb(hBe,'NodePromotion/2',1629);feb(1630,1,{},nfc);_.Kb=function ofc(a){return RD(a,42),Rec(),Geb(),true};_.Fb=function pfc(a){return this===a};var xT=sfb(hBe,'NodePromotion/lambda$0$Type',1630);feb(1631,1,{},qfc);_.Kb=function rfc(a){return afc(this.a,RD(a,42))};_.Fb=function sfc(a){return this===a};_.a=0;var yT=sfb(hBe,'NodePromotion/lambda$1$Type',1631);feb(1632,1,{},tfc);_.Kb=function ufc(a){return bfc(this.a,RD(a,42))};_.Fb=function vfc(a){return this===a};_.a=0;var zT=sfb(hBe,'NodePromotion/lambda$2$Type',1632);feb(1633,1,QAe,Bfc);_.Kf=function Cfc(a,b){wfc(RD(a,36),b)};var BT=sfb(hBe,'NorthSouthPortPostprocessor',1633);feb(1634,1,QAe,Ifc);_.Kf=function Kfc(a,b){Gfc(RD(a,36),b)};var DT=sfb(hBe,'NorthSouthPortPreprocessor',1634);feb(1635,1,fye,Lfc);_.Ne=function Mfc(a,b){return Jfc(RD(a,12),RD(b,12))};_.Fb=function Nfc(a){return this===a};_.Oe=function Ofc(){return new Frb(this)};var CT=sfb(hBe,'NorthSouthPortPreprocessor/lambda$0$Type',1635);feb(1636,1,QAe,Rfc);_.Kf=function Tfc(a,b){Qfc(RD(a,36),b)};var GT=sfb(hBe,'PartitionMidprocessor',1636);feb(1637,1,nwe,Ufc);_.Mb=function Vfc(a){return nQb(RD(a,10),(yCc(),tBc))};var ET=sfb(hBe,'PartitionMidprocessor/lambda$0$Type',1637);feb(1638,1,Qve,Wfc);_.Cd=function Xfc(a){Sfc(this.a,RD(a,10))};var FT=sfb(hBe,'PartitionMidprocessor/lambda$1$Type',1638);feb(1639,1,QAe,Zfc);_.Kf=function $fc(a,b){Yfc(RD(a,36),b)};var HT=sfb(hBe,'PartitionPostprocessor',1639);feb(1640,1,QAe,cgc);_.Kf=function dgc(a,b){agc(RD(a,36),b)};var MT=sfb(hBe,'PartitionPreprocessor',1640);feb(1641,1,nwe,egc);_.Mb=function fgc(a){return nQb(RD(a,10),(yCc(),tBc))};var IT=sfb(hBe,'PartitionPreprocessor/lambda$0$Type',1641);feb(1642,1,{},ggc);_.Kb=function hgc(a){return new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var JT=sfb(hBe,'PartitionPreprocessor/lambda$1$Type',1642);feb(1643,1,nwe,igc);_.Mb=function jgc(a){return _fc(RD(a,18))};var KT=sfb(hBe,'PartitionPreprocessor/lambda$2$Type',1643);feb(1644,1,Qve,kgc);_.Cd=function lgc(a){bgc(RD(a,18))};var LT=sfb(hBe,'PartitionPreprocessor/lambda$3$Type',1644);feb(1645,1,QAe,xgc);_.Kf=function Bgc(a,b){ugc(RD(a,36),b)};var mgc,ngc,ogc,pgc,qgc,rgc;var ST=sfb(hBe,'PortListSorter',1645);feb(1648,1,fye,Dgc);_.Ne=function Egc(a,b){return ygc(RD(a,12),RD(b,12))};_.Fb=function Fgc(a){return this===a};_.Oe=function Ggc(){return new Frb(this)};var NT=sfb(hBe,'PortListSorter/lambda$0$Type',1648);feb(1650,1,fye,Hgc);_.Ne=function Igc(a,b){return zgc(RD(a,12),RD(b,12))};_.Fb=function Jgc(a){return this===a};_.Oe=function Kgc(){return new Frb(this)};var OT=sfb(hBe,'PortListSorter/lambda$1$Type',1650);feb(1646,1,{},Lgc);_.Kb=function Mgc(a){return sgc(),RD(a,12).e};var PT=sfb(hBe,'PortListSorter/lambda$2$Type',1646);feb(1647,1,{},Ngc);_.Kb=function Ogc(a){return sgc(),RD(a,12).g};var QT=sfb(hBe,'PortListSorter/lambda$3$Type',1647);feb(1649,1,fye,Pgc);_.Ne=function Qgc(a,b){return Agc(RD(a,12),RD(b,12))};_.Fb=function Rgc(a){return this===a};_.Oe=function Sgc(){return new Frb(this)};var RT=sfb(hBe,'PortListSorter/lambda$4$Type',1649);feb(1651,1,QAe,Vgc);_.Kf=function Wgc(a,b){Tgc(RD(a,36),b)};var TT=sfb(hBe,'PortSideProcessor',1651);feb(1652,1,QAe,Ygc);_.Kf=function Zgc(a,b){Xgc(RD(a,36),b)};var UT=sfb(hBe,'ReversedEdgeRestorer',1652);feb(1657,1,QAe,ahc);_.Kf=function bhc(a,b){$gc(this,RD(a,36),b)};var _T=sfb(hBe,'SelfLoopPortRestorer',1657);feb(1658,1,{},chc);_.Kb=function dhc(a){return new SDb(null,new Swb(RD(a,30).a,16))};var VT=sfb(hBe,'SelfLoopPortRestorer/lambda$0$Type',1658);feb(1659,1,nwe,ehc);_.Mb=function fhc(a){return RD(a,10).k==(r3b(),p3b)};var WT=sfb(hBe,'SelfLoopPortRestorer/lambda$1$Type',1659);feb(1660,1,nwe,ghc);_.Mb=function hhc(a){return nQb(RD(a,10),(Ywc(),Pwc))};var XT=sfb(hBe,'SelfLoopPortRestorer/lambda$2$Type',1660);feb(1661,1,{},ihc);_.Kb=function jhc(a){return RD(mQb(RD(a,10),(Ywc(),Pwc)),337)};var YT=sfb(hBe,'SelfLoopPortRestorer/lambda$3$Type',1661);feb(1662,1,Qve,khc);_.Cd=function lhc(a){_gc(this.a,RD(a,337))};var ZT=sfb(hBe,'SelfLoopPortRestorer/lambda$4$Type',1662);feb(805,1,Qve,mhc);_.Cd=function nhc(a){Rmc(RD(a,105))};var $T=sfb(hBe,'SelfLoopPortRestorer/lambda$5$Type',805);feb(1663,1,QAe,rhc);_.Kf=function thc(a,b){ohc(RD(a,36),b)};var iU=sfb(hBe,'SelfLoopPostProcessor',1663);feb(1664,1,{},uhc);_.Kb=function vhc(a){return new SDb(null,new Swb(RD(a,30).a,16))};var aU=sfb(hBe,'SelfLoopPostProcessor/lambda$0$Type',1664);feb(1665,1,nwe,whc);_.Mb=function xhc(a){return RD(a,10).k==(r3b(),p3b)};var bU=sfb(hBe,'SelfLoopPostProcessor/lambda$1$Type',1665);feb(1666,1,nwe,yhc);_.Mb=function zhc(a){return nQb(RD(a,10),(Ywc(),Pwc))};var cU=sfb(hBe,'SelfLoopPostProcessor/lambda$2$Type',1666);feb(1667,1,Qve,Ahc);_.Cd=function Bhc(a){phc(RD(a,10))};var dU=sfb(hBe,'SelfLoopPostProcessor/lambda$3$Type',1667);feb(1668,1,{},Chc);_.Kb=function Dhc(a){return new SDb(null,new Swb(RD(a,105).f,1))};var eU=sfb(hBe,'SelfLoopPostProcessor/lambda$4$Type',1668);feb(1669,1,Qve,Ehc);_.Cd=function Fhc(a){qhc(this.a,RD(a,340))};var fU=sfb(hBe,'SelfLoopPostProcessor/lambda$5$Type',1669);feb(1670,1,nwe,Ghc);_.Mb=function Hhc(a){return !!RD(a,105).i};var gU=sfb(hBe,'SelfLoopPostProcessor/lambda$6$Type',1670);feb(1671,1,Qve,Ihc);_.Cd=function Jhc(a){shc(this.a,RD(a,105))};var hU=sfb(hBe,'SelfLoopPostProcessor/lambda$7$Type',1671);feb(1653,1,QAe,Nhc);_.Kf=function Ohc(a,b){Mhc(RD(a,36),b)};var mU=sfb(hBe,'SelfLoopPreProcessor',1653);feb(1654,1,{},Phc);_.Kb=function Qhc(a){return new SDb(null,new Swb(RD(a,105).f,1))};var jU=sfb(hBe,'SelfLoopPreProcessor/lambda$0$Type',1654);feb(1655,1,{},Rhc);_.Kb=function Shc(a){return RD(a,340).a};var kU=sfb(hBe,'SelfLoopPreProcessor/lambda$1$Type',1655);feb(1656,1,Qve,Thc);_.Cd=function Uhc(a){Lhc(RD(a,18))};var lU=sfb(hBe,'SelfLoopPreProcessor/lambda$2$Type',1656);feb(1672,1,QAe,Yhc);_.Kf=function Zhc(a,b){Whc(this,RD(a,36),b)};var sU=sfb(hBe,'SelfLoopRouter',1672);feb(1673,1,{},$hc);_.Kb=function _hc(a){return new SDb(null,new Swb(RD(a,30).a,16))};var nU=sfb(hBe,'SelfLoopRouter/lambda$0$Type',1673);feb(1674,1,nwe,aic);_.Mb=function bic(a){return RD(a,10).k==(r3b(),p3b)};var oU=sfb(hBe,'SelfLoopRouter/lambda$1$Type',1674);feb(1675,1,nwe,cic);_.Mb=function dic(a){return nQb(RD(a,10),(Ywc(),Pwc))};var pU=sfb(hBe,'SelfLoopRouter/lambda$2$Type',1675);feb(1676,1,{},eic);_.Kb=function fic(a){return RD(mQb(RD(a,10),(Ywc(),Pwc)),337)};var qU=sfb(hBe,'SelfLoopRouter/lambda$3$Type',1676);feb(1677,1,Qve,gic);_.Cd=function hic(a){Vhc(this.a,this.b,RD(a,337))};var rU=sfb(hBe,'SelfLoopRouter/lambda$4$Type',1677);feb(1678,1,QAe,jic);_.Kf=function mic(a,b){iic(RD(a,36),b)};var xU=sfb(hBe,'SemiInteractiveCrossMinProcessor',1678);feb(1679,1,nwe,nic);_.Mb=function oic(a){return RD(a,10).k==(r3b(),p3b)};var tU=sfb(hBe,'SemiInteractiveCrossMinProcessor/lambda$0$Type',1679);feb(1680,1,nwe,pic);_.Mb=function qic(a){return lQb(RD(a,10))._b((yCc(),IBc))};var uU=sfb(hBe,'SemiInteractiveCrossMinProcessor/lambda$1$Type',1680);feb(1681,1,fye,ric);_.Ne=function sic(a,b){return kic(RD(a,10),RD(b,10))};_.Fb=function tic(a){return this===a};_.Oe=function uic(){return new Frb(this)};var vU=sfb(hBe,'SemiInteractiveCrossMinProcessor/lambda$2$Type',1681);feb(1682,1,{},vic);_.Ve=function wic(a,b){return lic(RD(a,10),RD(b,10))};var wU=sfb(hBe,'SemiInteractiveCrossMinProcessor/lambda$3$Type',1682);feb(1684,1,QAe,yic);_.Kf=function Cic(a,b){xic(RD(a,36),b)};var AU=sfb(hBe,'SortByInputModelProcessor',1684);feb(1685,1,nwe,Dic);_.Mb=function Eic(a){return RD(a,12).g.c.length!=0};var yU=sfb(hBe,'SortByInputModelProcessor/lambda$0$Type',1685);feb(1686,1,Qve,Fic);_.Cd=function Gic(a){Aic(this.a,RD(a,12))};var zU=sfb(hBe,'SortByInputModelProcessor/lambda$1$Type',1686);feb(1759,817,{},Pic);_.df=function Qic(a){var b,c,d,e;this.c=a;switch(this.a.g){case 2:b=new bnb;FDb(CDb(new SDb(null,new Swb(this.c.a.b,16)),new Rjc),new Tjc(this,b));eHb(this,new Zic);Umb(b,new bjc);b.c.length=0;FDb(CDb(new SDb(null,new Swb(this.c.a.b,16)),new djc),new fjc(b));eHb(this,new jjc);Umb(b,new njc);b.c.length=0;c=Wvb(TCb(HDb(new SDb(null,new Swb(this.c.a.b,16)),new pjc(this))),new rjc);FDb(new SDb(null,new Swb(this.c.a.a,16)),new vjc(c,b));eHb(this,new zjc);Umb(b,new Djc);b.c.length=0;break;case 3:d=new bnb;eHb(this,new Ric);e=Wvb(TCb(HDb(new SDb(null,new Swb(this.c.a.b,16)),new Vic(this))),new tjc);FDb(CDb(new SDb(null,new Swb(this.c.a.b,16)),new Fjc),new Hjc(e,d));eHb(this,new Ljc);Umb(d,new Pjc);d.c.length=0;break;default:throw Adb(new Ied);}};_.b=0;var ZU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation',1759);feb(1760,1,xye,Ric);_.Lb=function Sic(a){return ZD(RD(a,60).g,154)};_.Fb=function Tic(a){return this===a};_.Mb=function Uic(a){return ZD(RD(a,60).g,154)};var BU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$0$Type',1760);feb(1761,1,{},Vic);_.Ye=function Wic(a){return Jic(this.a,RD(a,60))};var CU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$1$Type',1761);feb(1769,1,owe,Xic);_.de=function Yic(){Iic(this.a,this.b,-1)};_.b=0;var DU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$10$Type',1769);feb(1771,1,xye,Zic);_.Lb=function $ic(a){return ZD(RD(a,60).g,154)};_.Fb=function _ic(a){return this===a};_.Mb=function ajc(a){return ZD(RD(a,60).g,154)};var EU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$11$Type',1771);feb(1772,1,Qve,bjc);_.Cd=function cjc(a){RD(a,380).de()};var FU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$12$Type',1772);feb(1773,1,nwe,djc);_.Mb=function ejc(a){return ZD(RD(a,60).g,10)};var GU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$13$Type',1773);feb(1775,1,Qve,fjc);_.Cd=function gjc(a){Kic(this.a,RD(a,60))};var HU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$14$Type',1775);feb(1774,1,owe,hjc);_.de=function ijc(){Iic(this.b,this.a,-1)};_.a=0;var IU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$15$Type',1774);feb(1776,1,xye,jjc);_.Lb=function kjc(a){return ZD(RD(a,60).g,10)};_.Fb=function ljc(a){return this===a};_.Mb=function mjc(a){return ZD(RD(a,60).g,10)};var JU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$16$Type',1776);feb(1777,1,Qve,njc);_.Cd=function ojc(a){RD(a,380).de()};var KU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$17$Type',1777);feb(1778,1,{},pjc);_.Ye=function qjc(a){return Lic(this.a,RD(a,60))};var LU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$18$Type',1778);feb(1779,1,{},rjc);_.We=function sjc(){return 0};var MU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$19$Type',1779);feb(1762,1,{},tjc);_.We=function ujc(){return 0};var NU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$2$Type',1762);feb(1781,1,Qve,vjc);_.Cd=function wjc(a){Mic(this.a,this.b,RD(a,316))};_.a=0;var OU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$20$Type',1781);feb(1780,1,owe,xjc);_.de=function yjc(){Hic(this.a,this.b,-1)};_.b=0;var PU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$21$Type',1780);feb(1782,1,xye,zjc);_.Lb=function Ajc(a){return RD(a,60),true};_.Fb=function Bjc(a){return this===a};_.Mb=function Cjc(a){return RD(a,60),true};var QU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$22$Type',1782);feb(1783,1,Qve,Djc);_.Cd=function Ejc(a){RD(a,380).de()};var RU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$23$Type',1783);feb(1763,1,nwe,Fjc);_.Mb=function Gjc(a){return ZD(RD(a,60).g,10)};var SU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$3$Type',1763);feb(1765,1,Qve,Hjc);_.Cd=function Ijc(a){Nic(this.a,this.b,RD(a,60))};_.a=0;var TU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$4$Type',1765);feb(1764,1,owe,Jjc);_.de=function Kjc(){Iic(this.b,this.a,-1)};_.a=0;var UU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$5$Type',1764);feb(1766,1,xye,Ljc);_.Lb=function Mjc(a){return RD(a,60),true};_.Fb=function Njc(a){return this===a};_.Mb=function Ojc(a){return RD(a,60),true};var VU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$6$Type',1766);feb(1767,1,Qve,Pjc);_.Cd=function Qjc(a){RD(a,380).de()};var WU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$7$Type',1767);feb(1768,1,nwe,Rjc);_.Mb=function Sjc(a){return ZD(RD(a,60).g,154)};var XU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$8$Type',1768);feb(1770,1,Qve,Tjc);_.Cd=function Ujc(a){Oic(this.a,this.b,RD(a,60))};var YU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$9$Type',1770);feb(1586,1,QAe,Yjc);_.Kf=function bkc(a,b){Xjc(this,RD(a,36),b)};var Vjc;var bV=sfb(rBe,'HorizontalGraphCompactor',1586);feb(1587,1,{},ckc);_.ff=function dkc(a,b){var c,d,e;if(_jc(a,b)){return 0}c=Zjc(a);d=Zjc(b);if(!!c&&c.k==(r3b(),m3b)||!!d&&d.k==(r3b(),m3b)){return 0}e=RD(mQb(this.a.a,(Ywc(),Qwc)),312);return ZEc(e,c?c.k:(r3b(),o3b),d?d.k:(r3b(),o3b))};_.gf=function ekc(a,b){var c,d,e;if(_jc(a,b)){return 1}c=Zjc(a);d=Zjc(b);e=RD(mQb(this.a.a,(Ywc(),Qwc)),312);return aFc(e,c?c.k:(r3b(),o3b),d?d.k:(r3b(),o3b))};var $U=sfb(rBe,'HorizontalGraphCompactor/1',1587);feb(1588,1,{},fkc);_.ef=function gkc(a,b){return Wjc(),a.a.i==0};var _U=sfb(rBe,'HorizontalGraphCompactor/lambda$0$Type',1588);feb(1589,1,{},hkc);_.ef=function ikc(a,b){return akc(this.a,a,b)};var aV=sfb(rBe,'HorizontalGraphCompactor/lambda$1$Type',1589);feb(1730,1,{},Ckc);var jkc,kkc;var BV=sfb(rBe,'LGraphToCGraphTransformer',1730);feb(1738,1,nwe,Kkc);_.Mb=function Lkc(a){return a!=null};var cV=sfb(rBe,'LGraphToCGraphTransformer/0methodref$nonNull$Type',1738);feb(1731,1,{},Mkc);_.Kb=function Nkc(a){return lkc(),jeb(mQb(RD(RD(a,60).g,10),(Ywc(),Awc)))};var dV=sfb(rBe,'LGraphToCGraphTransformer/lambda$0$Type',1731);feb(1732,1,{},Okc);_.Kb=function Pkc(a){return lkc(),Mlc(RD(RD(a,60).g,154))};var eV=sfb(rBe,'LGraphToCGraphTransformer/lambda$1$Type',1732);feb(1741,1,nwe,Qkc);_.Mb=function Rkc(a){return lkc(),ZD(RD(a,60).g,10)};var fV=sfb(rBe,'LGraphToCGraphTransformer/lambda$10$Type',1741);feb(1742,1,Qve,Skc);_.Cd=function Tkc(a){Dkc(RD(a,60))};var gV=sfb(rBe,'LGraphToCGraphTransformer/lambda$11$Type',1742);feb(1743,1,nwe,Ukc);_.Mb=function Vkc(a){return lkc(),ZD(RD(a,60).g,154)};var hV=sfb(rBe,'LGraphToCGraphTransformer/lambda$12$Type',1743);feb(1747,1,Qve,Wkc);_.Cd=function Xkc(a){Ekc(RD(a,60))};var iV=sfb(rBe,'LGraphToCGraphTransformer/lambda$13$Type',1747);feb(1744,1,Qve,Ykc);_.Cd=function Zkc(a){Fkc(this.a,RD(a,8))};_.a=0;var jV=sfb(rBe,'LGraphToCGraphTransformer/lambda$14$Type',1744);feb(1745,1,Qve,$kc);_.Cd=function _kc(a){Gkc(this.a,RD(a,116))};_.a=0;var kV=sfb(rBe,'LGraphToCGraphTransformer/lambda$15$Type',1745);feb(1746,1,Qve,alc);_.Cd=function blc(a){Hkc(this.a,RD(a,8))};_.a=0;var lV=sfb(rBe,'LGraphToCGraphTransformer/lambda$16$Type',1746);feb(1748,1,{},clc);_.Kb=function dlc(a){return lkc(),new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var mV=sfb(rBe,'LGraphToCGraphTransformer/lambda$17$Type',1748);feb(1749,1,nwe,elc);_.Mb=function flc(a){return lkc(),W0b(RD(a,18))};var nV=sfb(rBe,'LGraphToCGraphTransformer/lambda$18$Type',1749);feb(1750,1,Qve,glc);_.Cd=function hlc(a){ukc(this.a,RD(a,18))};var oV=sfb(rBe,'LGraphToCGraphTransformer/lambda$19$Type',1750);feb(1734,1,Qve,ilc);_.Cd=function jlc(a){vkc(this.a,RD(a,154))};var pV=sfb(rBe,'LGraphToCGraphTransformer/lambda$2$Type',1734);feb(1751,1,{},klc);_.Kb=function llc(a){return lkc(),new SDb(null,new Swb(RD(a,30).a,16))};var qV=sfb(rBe,'LGraphToCGraphTransformer/lambda$20$Type',1751);feb(1752,1,{},mlc);_.Kb=function nlc(a){return lkc(),new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var rV=sfb(rBe,'LGraphToCGraphTransformer/lambda$21$Type',1752);feb(1753,1,{},olc);_.Kb=function plc(a){return lkc(),RD(mQb(RD(a,18),(Ywc(),Twc)),15)};var sV=sfb(rBe,'LGraphToCGraphTransformer/lambda$22$Type',1753);feb(1754,1,nwe,qlc);_.Mb=function rlc(a){return Ikc(RD(a,15))};var tV=sfb(rBe,'LGraphToCGraphTransformer/lambda$23$Type',1754);feb(1755,1,Qve,slc);_.Cd=function tlc(a){nkc(this.a,RD(a,15))};var uV=sfb(rBe,'LGraphToCGraphTransformer/lambda$24$Type',1755);feb(1733,1,Qve,ulc);_.Cd=function vlc(a){wkc(this.a,this.b,RD(a,154))};var vV=sfb(rBe,'LGraphToCGraphTransformer/lambda$3$Type',1733);feb(1735,1,{},wlc);_.Kb=function xlc(a){return lkc(),new SDb(null,new Swb(RD(a,30).a,16))};var wV=sfb(rBe,'LGraphToCGraphTransformer/lambda$4$Type',1735);feb(1736,1,{},ylc);_.Kb=function zlc(a){return lkc(),new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var xV=sfb(rBe,'LGraphToCGraphTransformer/lambda$5$Type',1736);feb(1737,1,{},Alc);_.Kb=function Blc(a){return lkc(),RD(mQb(RD(a,18),(Ywc(),Twc)),15)};var yV=sfb(rBe,'LGraphToCGraphTransformer/lambda$6$Type',1737);feb(1739,1,Qve,Clc);_.Cd=function Dlc(a){Jkc(this.a,RD(a,15))};var zV=sfb(rBe,'LGraphToCGraphTransformer/lambda$8$Type',1739);feb(1740,1,Qve,Elc);_.Cd=function Flc(a){xkc(this.a,this.b,RD(a,154))};var AV=sfb(rBe,'LGraphToCGraphTransformer/lambda$9$Type',1740);feb(1729,1,{},Jlc);_.cf=function Klc(a){var b,c,d,e,f;this.a=a;this.d=new BIb;this.c=$C(DN,rve,125,this.a.a.a.c.length,0,1);this.b=0;for(c=new Anb(this.a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),316);b.d=this.b;f=eJb(fJb(new gJb,b),this.d);this.c[this.b]=f;++this.b}Ilc(this);Hlc(this);Glc(this);lJb(CJb(this.d),new Oqd);for(e=new Anb(this.a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);d.d.c=this.c[d.a.d].e+d.b.a}};_.b=0;var CV=sfb(rBe,'NetworkSimplexCompaction',1729);feb(154,1,{34:1,154:1},Nlc);_.Fd=function Olc(a){return Llc(this,RD(a,154))};_.Ib=function Plc(){return Mlc(this)};var DV=sfb(rBe,'VerticalSegment',154);feb(841,1,{},Ylc);_.c=0;_.e=0;_.i=0;var GV=sfb(sBe,'BetweenLayerEdgeTwoNodeCrossingsCounter',841);feb(677,1,{677:1},dmc);_.Ib=function emc(){return 'AdjacencyList [node='+this.d+', adjacencies= '+this.a+']'};_.b=0;_.c=0;_.f=0;var FV=sfb(sBe,'BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList',677);feb(293,1,{34:1,293:1},hmc);_.Fd=function imc(a){return fmc(this,RD(a,293))};_.Ib=function jmc(){return 'Adjacency [position='+this.c+', cardinality='+this.a+', currentCardinality='+this.b+']'};_.a=0;_.b=0;_.c=0;var EV=sfb(sBe,'BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency',293);feb(2026,1,{},mmc);_.b=0;_.e=false;var HV=sfb(sBe,'CrossingMatrixFiller',2026);var QY=ufb(tBe,'IInitializable');feb(1867,1,uBe,smc);_.gg=function vmc(a,b,c,d,e,f){};_.ig=function xmc(a,b,c){};_.eg=function tmc(){return this.c!=(RKc(),PKc)};_.fg=function umc(){this.e=$C(kE,Pwe,28,this.d,15,1)};_.hg=function wmc(a,b){b[a][0].c.p=a};_.jg=function ymc(a,b,c,d){++this.d};_.kg=function zmc(){return true};_.lg=function Amc(a,b,c,d){omc(this,a,b,c);return nmc(this,b)};_.mg=function Bmc(a,b){var c;c=pmc(b,a.length);omc(this,a,c,b);return qmc(this,c)};_.d=0;var IV=sfb(sBe,'GreedySwitchHeuristic',1867);feb(2029,1,{},Kmc);_.b=0;_.d=0;var JV=sfb(sBe,'NorthSouthEdgeNeighbouringNodeCrossingsCounter',2029);feb(2016,1,{},Pmc);_.a=false;var KV=sfb(sBe,'SwitchDecider',2016);feb(105,1,{105:1},Vmc);_.a=null;_.c=null;_.i=null;var NV=sfb(vBe,'SelfHyperLoop',105);feb(2013,1,{},_mc);_.c=0;_.e=0;var MV=sfb(vBe,'SelfHyperLoopLabels',2013);feb(421,22,{3:1,34:1,22:1,421:1},fnc);var anc,bnc,cnc,dnc;var LV=tfb(vBe,'SelfHyperLoopLabels/Alignment',421,WI,hnc,gnc);var inc;feb(340,1,{340:1},knc);var OV=sfb(vBe,'SelfLoopEdge',340);feb(337,1,{337:1},onc);_.a=false;var QV=sfb(vBe,'SelfLoopHolder',337);feb(1790,1,nwe,qnc);_.Mb=function rnc(a){return W0b(RD(a,18))};var PV=sfb(vBe,'SelfLoopHolder/lambda$0$Type',1790);feb(113,1,{113:1},tnc);_.a=false;_.c=false;var SV=sfb(vBe,'SelfLoopPort',113);feb(1855,1,nwe,unc);_.Mb=function vnc(a){return W0b(RD(a,18))};var RV=sfb(vBe,'SelfLoopPort/lambda$0$Type',1855);feb(375,22,{3:1,34:1,22:1,375:1},Cnc);var wnc,xnc,ync,znc,Anc;var TV=tfb(vBe,'SelfLoopType',375,WI,Fnc,Enc);var Gnc;feb(1798,1,{},boc);var Inc,Jnc,Knc,Lnc;var gW=sfb(wBe,'PortRestorer',1798);feb(372,22,{3:1,34:1,22:1,372:1},koc);var goc,hoc,ioc;var UV=tfb(wBe,'PortRestorer/PortSideArea',372,WI,moc,loc);var noc;feb(1799,1,{},poc);_.Kb=function qoc(a){return Mnc(),RD(a,15).Oc()};var VV=sfb(wBe,'PortRestorer/lambda$0$Type',1799);feb(1800,1,Qve,roc);_.Cd=function soc(a){Mnc();RD(a,113).c=false};var WV=sfb(wBe,'PortRestorer/lambda$1$Type',1800);feb(1809,1,nwe,toc);_.Mb=function uoc(a){return Mnc(),RD(a,12).j==(qpd(),ppd)};var XV=sfb(wBe,'PortRestorer/lambda$10$Type',1809);feb(1810,1,{},voc);_.Kb=function woc(a){return Mnc(),RD(a,113).d};var YV=sfb(wBe,'PortRestorer/lambda$11$Type',1810);feb(1811,1,Qve,xoc);_.Cd=function yoc(a){coc(this.a,RD(a,12))};var ZV=sfb(wBe,'PortRestorer/lambda$12$Type',1811);feb(1801,1,Qve,zoc);_.Cd=function Aoc(a){doc(this.a,RD(a,105))};var $V=sfb(wBe,'PortRestorer/lambda$2$Type',1801);feb(1802,1,fye,Boc);_.Ne=function Coc(a,b){return eoc(RD(a,113),RD(b,113))};_.Fb=function Doc(a){return this===a};_.Oe=function Eoc(){return new Frb(this)};var _V=sfb(wBe,'PortRestorer/lambda$3$Type',1802);feb(1803,1,nwe,Foc);_.Mb=function Goc(a){return Mnc(),RD(a,113).c};var aW=sfb(wBe,'PortRestorer/lambda$4$Type',1803);feb(1804,1,nwe,Hoc);_.Mb=function Ioc(a){return Tnc(RD(a,12))};var bW=sfb(wBe,'PortRestorer/lambda$5$Type',1804);feb(1805,1,nwe,Joc);_.Mb=function Koc(a){return Mnc(),RD(a,12).j==(qpd(),Yod)};var cW=sfb(wBe,'PortRestorer/lambda$6$Type',1805);feb(1806,1,nwe,Loc);_.Mb=function Moc(a){return Mnc(),RD(a,12).j==(qpd(),Xod)};var dW=sfb(wBe,'PortRestorer/lambda$7$Type',1806);feb(1807,1,nwe,Noc);_.Mb=function Ooc(a){return Unc(RD(a,12))};var eW=sfb(wBe,'PortRestorer/lambda$8$Type',1807);feb(1808,1,nwe,Poc);_.Mb=function Qoc(a){return Mnc(),RD(a,12).j==(qpd(),npd)};var fW=sfb(wBe,'PortRestorer/lambda$9$Type',1808);feb(276,22,{3:1,34:1,22:1,276:1},fpc);var Yoc,Zoc,$oc,_oc,apc,bpc,cpc,dpc;var hW=tfb(wBe,'PortSideAssigner/Target',276,WI,hpc,gpc);var ipc;feb(1791,1,{},kpc);_.Kb=function lpc(a){return CDb(new SDb(null,new Swb(RD(a,105).j,16)),new Cpc)};var iW=sfb(wBe,'PortSideAssigner/lambda$1$Type',1791);feb(1792,1,{},mpc);_.Kb=function npc(a){return RD(a,113).d};var jW=sfb(wBe,'PortSideAssigner/lambda$2$Type',1792);feb(1793,1,Qve,opc);_.Cd=function ppc(a){Q3b(RD(a,12),(qpd(),Yod))};var kW=sfb(wBe,'PortSideAssigner/lambda$3$Type',1793);feb(1794,1,{},qpc);_.Kb=function rpc(a){return RD(a,113).d};var lW=sfb(wBe,'PortSideAssigner/lambda$4$Type',1794);feb(1795,1,Qve,spc);_.Cd=function tpc(a){Voc(this.a,RD(a,12))};var mW=sfb(wBe,'PortSideAssigner/lambda$5$Type',1795);feb(1796,1,fye,upc);_.Ne=function vpc(a,b){return Woc(RD(a,105),RD(b,105))};_.Fb=function wpc(a){return this===a};_.Oe=function xpc(){return new Frb(this)};var nW=sfb(wBe,'PortSideAssigner/lambda$6$Type',1796);feb(1797,1,fye,ypc);_.Ne=function zpc(a,b){return Xoc(RD(a,113),RD(b,113))};_.Fb=function Apc(a){return this===a};_.Oe=function Bpc(){return new Frb(this)};var oW=sfb(wBe,'PortSideAssigner/lambda$7$Type',1797);feb(820,1,nwe,Cpc);_.Mb=function Dpc(a){return RD(a,113).c};var pW=sfb(wBe,'PortSideAssigner/lambda$8$Type',820);feb(2108,1,{});var qW=sfb(xBe,'AbstractSelfLoopRouter',2108);feb(1816,1,fye,Mpc);_.Ne=function Npc(a,b){return Kpc(RD(a,105),RD(b,105))};_.Fb=function Opc(a){return this===a};_.Oe=function Ppc(){return new Frb(this)};var rW=sfb(xBe,Vye,1816);feb(1817,1,fye,Qpc);_.Ne=function Rpc(a,b){return Lpc(RD(a,105),RD(b,105))};_.Fb=function Spc(a){return this===a};_.Oe=function Tpc(){return new Frb(this)};var sW=sfb(xBe,Wye,1817);feb(1856,2108,{},dqc);_.ng=function eqc(a,b,c){return c};var uW=sfb(xBe,'OrthogonalSelfLoopRouter',1856);feb(1858,1,Qve,fqc);_.Cd=function gqc(a){cqc(this.b,this.a,RD(a,8))};var tW=sfb(xBe,'OrthogonalSelfLoopRouter/lambda$0$Type',1858);feb(1857,1856,{},jqc);_.ng=function kqc(a,b,c){var d,e;d=a.c.d;hu(c,0,$id(ajd(d.n),d.a));e=a.d.d;Mub(c,$id(ajd(e.n),e.a));return hqc(c)};var vW=sfb(xBe,'PolylineSelfLoopRouter',1857);feb(1812,1,{},yqc);_.a=null;var lqc;var zW=sfb(xBe,'RoutingDirector',1812);feb(1813,1,fye,Aqc);_.Ne=function Bqc(a,b){return zqc(RD(a,113),RD(b,113))};_.Fb=function Cqc(a){return this===a};_.Oe=function Dqc(){return new Frb(this)};var wW=sfb(xBe,'RoutingDirector/lambda$0$Type',1813);feb(1814,1,{},Eqc);_.Kb=function Fqc(a){return mqc(),RD(a,105).j};var xW=sfb(xBe,'RoutingDirector/lambda$1$Type',1814);feb(1815,1,Qve,Gqc);_.Cd=function Hqc(a){mqc();RD(a,15).jd(lqc)};var yW=sfb(xBe,'RoutingDirector/lambda$2$Type',1815);feb(1818,1,{},Sqc);var CW=sfb(xBe,'RoutingSlotAssigner',1818);feb(1819,1,nwe,Vqc);_.Mb=function Wqc(a){return Tqc(this.a,RD(a,105))};var AW=sfb(xBe,'RoutingSlotAssigner/lambda$0$Type',1819);feb(1820,1,fye,Xqc);_.Ne=function Yqc(a,b){return Uqc(this.a,RD(a,105),RD(b,105))};_.Fb=function Zqc(a){return this===a};_.Oe=function $qc(){return new Frb(this)};var BW=sfb(xBe,'RoutingSlotAssigner/lambda$1$Type',1820);feb(1859,1856,{},arc);_.ng=function brc(a,b,c){var d,e,f,g;d=Kfb(UD(k2b(a.b.g.b,(yCc(),VBc))));g=new Gjd(cD(WC(l3,1),Nve,8,0,[(f=a.c.d,$id(new sjd(f.n),f.a))]));_qc(a,b,c,g,d);Mub(g,(e=a.d.d,$id(new sjd(e.n),e.a)));return sUc(new wUc(g))};var DW=sfb(xBe,'SplineSelfLoopRouter',1859);feb(586,1,fye,frc,hrc);_.Ne=function irc(a,b){return crc(this,RD(a,10),RD(b,10))};_.Fb=function jrc(a){return this===a};_.Oe=function krc(){return new Frb(this)};var FW=sfb(yBe,'ModelOrderNodeComparator',586);feb(1821,1,nwe,lrc);_.Mb=function mrc(a){return RD(a,12).e.c.length!=0};var EW=sfb(yBe,'ModelOrderNodeComparator/lambda$0$Type',1821);feb(821,1,fye,trc,urc);_.Ne=function vrc(a,b){return prc(this,a,b)};_.Fb=function wrc(a){return this===a};_.Oe=function xrc(){return new Frb(this)};_.b=false;var GW=sfb(yBe,'ModelOrderPortComparator',821);feb(815,1,{},zrc);_.og=function Brc(a,b){var c,d,e,f;e=Arc(b);c=new bnb;f=b.f/e;for(d=1;d<e;++d){Rmb(c,sgb(Ydb(Hdb($wnd.Math.round(d*f)))))}return c};_.pg=function Crc(){return false};var HW=sfb(zBe,'ARDCutIndexHeuristic',815);feb(1544,1,QAe,Hrc);_.Kf=function Irc(a,b){Grc(RD(a,36),b)};var KW=sfb(zBe,'BreakingPointInserter',1544);feb(313,1,{313:1},Jrc);_.Ib=function Mrc(){var a;a=new bib;a.a+='BPInfo[';a.a+='\n\tstart=';Yhb(a,this.i);a.a+='\n\tend=';Yhb(a,this.a);a.a+='\n\tnodeStartEdge=';Yhb(a,this.e);a.a+='\n\tstartEndEdge=';Yhb(a,this.j);a.a+='\n\toriginalEdge=';Yhb(a,this.f);a.a+='\n\tstartInLayerDummy=';Yhb(a,this.k);a.a+='\n\tstartInLayerEdge=';Yhb(a,this.n);a.a+='\n\tendInLayerDummy=';Yhb(a,this.b);a.a+='\n\tendInLayerEdge=';Yhb(a,this.c);return a.a};var IW=sfb(zBe,'BreakingPointInserter/BPInfo',313);feb(661,1,{661:1},Trc);_.a=false;_.b=0;_.c=0;var JW=sfb(zBe,'BreakingPointInserter/Cut',661);feb(1545,1,QAe,bsc);_.Kf=function csc(a,b){_rc(RD(a,36),b)};var NW=sfb(zBe,'BreakingPointProcessor',1545);feb(1546,1,nwe,dsc);_.Mb=function esc(a){return Krc(RD(a,10))};var LW=sfb(zBe,'BreakingPointProcessor/0methodref$isEnd$Type',1546);feb(1547,1,nwe,fsc);_.Mb=function gsc(a){return Lrc(RD(a,10))};var MW=sfb(zBe,'BreakingPointProcessor/1methodref$isStart$Type',1547);feb(1548,1,QAe,ksc);_.Kf=function lsc(a,b){isc(this,RD(a,36),b)};var PW=sfb(zBe,'BreakingPointRemover',1548);feb(1549,1,Qve,msc);_.Cd=function nsc(a){RD(a,131).k=true};var OW=sfb(zBe,'BreakingPointRemover/lambda$0$Type',1549);feb(811,1,{},ysc);_.b=0;_.e=0;_.f=0;_.j=0;var VW=sfb(zBe,'GraphStats',811);feb(812,1,{},Asc);_.Ve=function Bsc(a,b){return $wnd.Math.max(Kfb(UD(a)),Kfb(UD(b)))};var QW=sfb(zBe,'GraphStats/0methodref$max$Type',812);feb(813,1,{},Csc);_.Ve=function Dsc(a,b){return $wnd.Math.max(Kfb(UD(a)),Kfb(UD(b)))};var RW=sfb(zBe,'GraphStats/2methodref$max$Type',813);feb(1726,1,{},Esc);_.Ve=function Fsc(a,b){return zsc(UD(a),UD(b))};var SW=sfb(zBe,'GraphStats/lambda$1$Type',1726);feb(1727,1,{},Gsc);_.Kb=function Hsc(a){return ssc(this.a,RD(a,30))};var TW=sfb(zBe,'GraphStats/lambda$2$Type',1727);feb(1728,1,{},Isc);_.Kb=function Jsc(a){return rsc(this.a,RD(a,30))};var UW=sfb(zBe,'GraphStats/lambda$6$Type',1728);feb(814,1,{},Ksc);_.og=function Lsc(a,b){var c;c=RD(mQb(a,(yCc(),pCc)),15);return c?c:(yob(),yob(),vob)};_.pg=function Msc(){return false};var WW=sfb(zBe,'ICutIndexCalculator/ManualCutIndexCalculator',814);feb(816,1,{},Nsc);_.og=function Osc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;u=(b.n==null&&vsc(b),b.n);i=(b.d==null&&vsc(b),b.d);t=$C(iE,vxe,28,u.length,15,1);t[0]=u[0];r=u[0];for(j=1;j<u.length;j++){t[j]=t[j-1]+u[j];r+=u[j]}e=Arc(b)-1;g=RD(mQb(a,(yCc(),qCc)),17).a;d=pxe;c=new bnb;for(m=$wnd.Math.max(0,e-g);m<=$wnd.Math.min(b.f-1,e+g);m++){p=r/(m+1);q=0;k=1;f=new bnb;s=pxe;l=0;h=0;o=i[0];if(m==0){s=r;h=(b.g==null&&(b.g=qsc(b,new Csc)),Kfb(b.g))}else{while(k<b.f){if(t[k-1]-q>=p){Rmb(f,sgb(k));s=$wnd.Math.max(s,t[k-1]-l);h+=o;q+=t[k-1]-q;l=t[k-1];o=i[k]}o=$wnd.Math.max(o,i[k]);++k}h+=o}n=$wnd.Math.min(1/s,1/b.b/h);if(n>d){d=n;c=f}}return c};_.pg=function Psc(){return false};var XW=sfb(zBe,'MSDCutIndexHeuristic',816);feb(1683,1,QAe,Ssc);_.Kf=function Tsc(a,b){Rsc(RD(a,36),b)};var YW=sfb(zBe,'SingleEdgeGraphWrapper',1683);feb(232,22,{3:1,34:1,22:1,232:1},ctc);var Xsc,Ysc,Zsc,$sc,_sc,atc;var ZW=tfb(ABe,'CenterEdgeLabelPlacementStrategy',232,WI,etc,dtc);var ftc;feb(431,22,{3:1,34:1,22:1,431:1},ktc);var htc,itc;var $W=tfb(ABe,'ConstraintCalculationStrategy',431,WI,mtc,ltc);var ntc;feb(322,22,{3:1,34:1,22:1,322:1,188:1,196:1},utc);_.dg=function wtc(){return ttc(this)};_.qg=function vtc(){return ttc(this)};var ptc,qtc,rtc;var _W=tfb(ABe,'CrossingMinimizationStrategy',322,WI,ytc,xtc);var ztc;feb(351,22,{3:1,34:1,22:1,351:1},Ftc);var Btc,Ctc,Dtc;var aX=tfb(ABe,'CuttingStrategy',351,WI,Htc,Gtc);var Itc;feb(348,22,{3:1,34:1,22:1,348:1,188:1,196:1},Rtc);_.dg=function Ttc(){return Qtc(this)};_.qg=function Stc(){return Qtc(this)};var Ktc,Ltc,Mtc,Ntc,Otc;var bX=tfb(ABe,'CycleBreakingStrategy',348,WI,Vtc,Utc);var Wtc;feb(428,22,{3:1,34:1,22:1,428:1},_tc);var Ytc,Ztc;var cX=tfb(ABe,'DirectionCongruency',428,WI,buc,auc);var cuc;feb(459,22,{3:1,34:1,22:1,459:1},iuc);var euc,fuc,guc;var dX=tfb(ABe,'EdgeConstraint',459,WI,kuc,juc);var luc;feb(283,22,{3:1,34:1,22:1,283:1},vuc);var nuc,ouc,puc,quc,ruc,suc;var eX=tfb(ABe,'EdgeLabelSideSelection',283,WI,xuc,wuc);var yuc;feb(487,22,{3:1,34:1,22:1,487:1},Duc);var Auc,Buc;var fX=tfb(ABe,'EdgeStraighteningStrategy',487,WI,Fuc,Euc);var Guc;feb(281,22,{3:1,34:1,22:1,281:1},Puc);var Iuc,Juc,Kuc,Luc,Muc,Nuc;var gX=tfb(ABe,'FixedAlignment',281,WI,Ruc,Quc);var Suc;feb(282,22,{3:1,34:1,22:1,282:1},_uc);var Uuc,Vuc,Wuc,Xuc,Yuc,Zuc;var hX=tfb(ABe,'GraphCompactionStrategy',282,WI,bvc,avc);var cvc;feb(259,22,{3:1,34:1,22:1,259:1},pvc);var evc,fvc,gvc,hvc,ivc,jvc,kvc,lvc,mvc,nvc;var iX=tfb(ABe,'GraphProperties',259,WI,rvc,qvc);var svc;feb(298,22,{3:1,34:1,22:1,298:1},yvc);var uvc,vvc,wvc;var jX=tfb(ABe,'GreedySwitchType',298,WI,Avc,zvc);var Bvc;feb(311,22,{3:1,34:1,22:1,311:1},Hvc);var Dvc,Evc,Fvc;var kX=tfb(ABe,'InLayerConstraint',311,WI,Jvc,Ivc);var Kvc;feb(429,22,{3:1,34:1,22:1,429:1},Pvc);var Mvc,Nvc;var lX=tfb(ABe,'InteractiveReferencePoint',429,WI,Rvc,Qvc);var Svc;var Uvc,Vvc,Wvc,Xvc,Yvc,Zvc,$vc,_vc,awc,bwc,cwc,dwc,ewc,fwc,gwc,hwc,iwc,jwc,kwc,lwc,mwc,nwc,owc,pwc,qwc,rwc,swc,twc,uwc,vwc,wwc,xwc,ywc,zwc,Awc,Bwc,Cwc,Dwc,Ewc,Fwc,Gwc,Hwc,Iwc,Jwc,Kwc,Lwc,Mwc,Nwc,Owc,Pwc,Qwc,Rwc,Swc,Twc,Uwc,Vwc,Wwc,Xwc;feb(171,22,{3:1,34:1,22:1,171:1},dxc);var Zwc,$wc,_wc,axc,bxc;var mX=tfb(ABe,'LayerConstraint',171,WI,fxc,exc);var gxc;feb(859,1,Eye,Pzc);_.hf=function Qzc(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,HBe),''),'Direction Congruency'),'Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other.'),Uxc),(kid(),eid)),cX),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,IBe),''),'Feedback Edges'),'Whether feedback edges should be highlighted by routing around the nodes.'),(Geb(),false)),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,JBe),''),'Interactive Reference Point'),'Determines which point of a node is considered by interactive layout phases.'),pyc),eid),lX),xsb(Whd))));zgd(a,JBe,RBe,ryc);zgd(a,JBe,_Be,qyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,KBe),''),'Merge Edges'),'Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,LBe),''),'Merge Hierarchy-Crossing Edges'),'If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port.'),true),cid),QI),xsb(Whd))));Egd(a,new Ahd(Nhd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MBe),''),'Allow Non-Flow Ports To Switch Sides'),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),false),cid),QI),xsb(Xhd)),cD(WC(qJ,1),Nve,2,6,['org.eclipse.elk.layered.northOrSouthPort']))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,NBe),''),'Port Sorting Strategy'),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),azc),eid),xX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,OBe),''),'Thoroughness'),'How much effort should be spent to produce a nice layout.'),sgb(7)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,PBe),''),'Add Unnecessary Bendpoints'),'Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,QBe),''),'Generate Position and Layer IDs'),'If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,RBe),'cycleBreaking'),'Cycle Breaking Strategy'),'Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right).'),Sxc),eid),bX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SBe),bDe),'Node Layering Strategy'),'Strategy for node layering.'),Gyc),eid),rX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TBe),bDe),'Layer Constraint'),'Determines a constraint on the placement of the node regarding the layering.'),wyc),eid),mX),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,UBe),bDe),'Layer Choice Constraint'),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VBe),bDe),'Layer ID'),'Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,WBe),cDe),'Upper Bound On Width [MinWidth Layerer]'),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),sgb(4)),gid),bJ),xsb(Whd))));zgd(a,WBe,SBe,zyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,XBe),cDe),'Upper Layer Estimation Scaling Factor [MinWidth Layerer]'),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),sgb(2)),gid),bJ),xsb(Whd))));zgd(a,XBe,SBe,Byc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,YBe),dDe),'Node Promotion Strategy'),'Reduces number of dummy nodes after layering phase (if possible).'),Eyc),eid),vX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ZBe),dDe),'Max Node Promotion Iterations'),'Limits the number of iterations for node promotion.'),sgb(0)),gid),bJ),xsb(Whd))));zgd(a,ZBe,YBe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,$Be),'layering.coffmanGraham'),'Layer Bound'),'The maximum number of nodes allowed per layer.'),sgb(lve)),gid),bJ),xsb(Whd))));zgd(a,$Be,SBe,tyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,_Be),eDe),'Crossing Minimization Strategy'),'Strategy for crossing minimization.'),Qxc),eid),_W),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aCe),eDe),'Force Node Model Order'),'The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,bCe),eDe),'Hierarchical Sweepiness'),'How likely it is to use cross-hierarchy (1) vs bottom-up (-1).'),0.1),did),VI),xsb(Whd))));zgd(a,bCe,fDe,Ixc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,cCe),eDe),'Semi-Interactive Crossing Minimization'),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),false),cid),QI),xsb(Whd))));zgd(a,cCe,_Be,Oxc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,dCe),eDe),'In Layer Predecessor of'),"Allows to set a constraint which specifies of which node the current node is the predecessor. If set to 's' then the node is the predecessor of 's' and is in the same layer"),null),iid),qJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,eCe),eDe),'In Layer Successor of'),"Allows to set a constraint which specifies of which node the current node is the successor. If set to 's' then the node is the successor of 's' and is in the same layer"),null),iid),qJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,fCe),eDe),'Position Choice Constraint'),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,gCe),eDe),'Position ID'),'Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,hCe),gDe),'Greedy Switch Activation Threshold'),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),sgb(40)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,iCe),gDe),'Greedy Switch Crossing Minimization'),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),Fxc),eid),jX),xsb(Whd))));zgd(a,iCe,_Be,Gxc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,jCe),'crossingMinimization.greedySwitchHierarchical'),'Greedy Switch Crossing Minimization (hierarchical)'),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),Bxc),eid),jX),xsb(Whd))));zgd(a,jCe,_Be,Cxc);zgd(a,jCe,fDe,Dxc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,kCe),hDe),'Node Placement Strategy'),'Strategy for node placement.'),$yc),eid),uX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,lCe),hDe),'Favor Straight Edges Over Balancing'),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),cid),QI),xsb(Whd))));zgd(a,lCe,kCe,Qyc);zgd(a,lCe,kCe,Ryc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,mCe),iDe),'BK Edge Straightening'),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),Kyc),eid),fX),xsb(Whd))));zgd(a,mCe,kCe,Lyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,nCe),iDe),'BK Fixed Alignment'),'Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four.'),Nyc),eid),gX),xsb(Whd))));zgd(a,nCe,kCe,Oyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,oCe),'nodePlacement.linearSegments'),'Linear Segments Deflection Dampening'),'Dampens the movement of nodes to keep the diagram from getting too large.'),0.3),did),VI),xsb(Whd))));zgd(a,oCe,kCe,Tyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,pCe),'nodePlacement.networkSimplex'),'Node Flexibility'),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),eid),tX),xsb(Vhd))));zgd(a,pCe,kCe,Yyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,qCe),'nodePlacement.networkSimplex.nodeFlexibility'),'Node Flexibility Default'),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),Wyc),eid),tX),xsb(Whd))));zgd(a,qCe,kCe,Xyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,rCe),jDe),'Self-Loop Distribution'),'Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE.'),ayc),eid),zX),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,sCe),jDe),'Self-Loop Ordering'),'Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE.'),cyc),eid),AX),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,tCe),'edgeRouting.splines'),'Spline Routing Mode'),'Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes.'),eyc),eid),CX),xsb(Whd))));zgd(a,tCe,kDe,fyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,uCe),'edgeRouting.splines.sloppy'),'Sloppy Spline Layer Spacing Factor'),'Spacing factor for routing area between layers when using sloppy spline routing.'),0.2),did),VI),xsb(Whd))));zgd(a,uCe,kDe,hyc);zgd(a,uCe,tCe,iyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,vCe),'edgeRouting.polyline'),'Sloped Edge Zone Width'),'Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer.'),2),did),VI),xsb(Whd))));zgd(a,vCe,kDe,$xc);Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,wCe),lDe),'Spacing Base Value'),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,xCe),lDe),'Edge Node Between Layers Spacing'),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,yCe),lDe),'Edge Edge Between Layer Spacing'),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,zCe),lDe),'Node Node Between Layers Spacing'),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ACe),mDe),'Direction Priority'),'Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase.'),sgb(0)),gid),bJ),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,BCe),mDe),'Shortness Priority'),'Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase.'),sgb(0)),gid),bJ),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,CCe),mDe),'Straightness Priority'),'Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement.'),sgb(0)),gid),bJ),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,DCe),nDe),qze),'Tries to further compact components (disconnected sub-graphs).'),false),cid),QI),xsb(Whd))));zgd(a,DCe,cAe,true);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ECe),oDe),'Post Compaction Strategy'),pDe),nxc),eid),hX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,FCe),oDe),'Post Compaction Constraint Calculation'),pDe),lxc),eid),$W),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,GCe),qDe),'High Degree Node Treatment'),'Makes room around high degree nodes to place leafs and trees.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,HCe),qDe),'High Degree Node Threshold'),'Whether a node is considered to have a high degree.'),sgb(16)),gid),bJ),xsb(Whd))));zgd(a,HCe,GCe,true);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ICe),qDe),'High Degree Node Maximum Tree Height'),'Maximum height of a subtree connected to a high degree node to be moved to separate layers.'),sgb(5)),gid),bJ),xsb(Whd))));zgd(a,ICe,GCe,true);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,JCe),rDe),'Graph Wrapping Strategy'),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),Gzc),eid),EX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,KCe),rDe),'Additional Wrapped Edges Spacing'),'To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing.'),10),did),VI),xsb(Whd))));zgd(a,KCe,JCe,lzc);zgd(a,KCe,JCe,mzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,LCe),rDe),'Correction Factor for Wrapping'),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),did),VI),xsb(Whd))));zgd(a,LCe,JCe,ozc);zgd(a,LCe,JCe,pzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MCe),sDe),'Cutting Strategy'),'The strategy by which the layer indexes are determined at which the layering crumbles into chunks.'),wzc),eid),aX),xsb(Whd))));zgd(a,MCe,JCe,xzc);zgd(a,MCe,JCe,yzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,NCe),sDe),'Manually Specified Cuts'),'Allows the user to specify her own cuts for a certain graph.'),hid),QK),xsb(Whd))));zgd(a,NCe,MCe,rzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,OCe),'wrapping.cutting.msd'),'MSD Freedom'),'The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts.'),tzc),gid),bJ),xsb(Whd))));zgd(a,OCe,MCe,uzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,PCe),tDe),'Validification Strategy'),'When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed.'),Lzc),eid),DX),xsb(Whd))));zgd(a,PCe,JCe,Mzc);zgd(a,PCe,JCe,Nzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,QCe),tDe),'Valid Indices for Wrapping'),null),hid),QK),xsb(Whd))));zgd(a,QCe,JCe,Izc);zgd(a,QCe,JCe,Jzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,RCe),uDe),'Improve Cuts'),'For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought.'),true),cid),QI),xsb(Whd))));zgd(a,RCe,JCe,Czc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SCe),uDe),'Distance Penalty When Improving Cuts'),null),2),did),VI),xsb(Whd))));zgd(a,SCe,JCe,Azc);zgd(a,SCe,RCe,true);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TCe),uDe),'Improve Wrapped Edges'),'The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges.'),true),cid),QI),xsb(Whd))));zgd(a,TCe,JCe,Ezc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,UCe),vDe),'Edge Label Side Selection'),'Method to decide on edge label sides.'),Yxc),eid),eX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VCe),vDe),'Edge Center Label Placement Strategy'),'Determines in which layer center labels of long edges should be placed.'),Wxc),eid),ZW),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,WCe),wDe),'Consider Model Order'),'Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting.'),xxc),eid),wX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,XCe),wDe),'Consider Port Order'),'If disabled the port order of output ports is derived from the edge order and input ports are ordered by their incoming connections. If enabled all ports are ordered by the port model order.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,YCe),wDe),'No Model Order'),'Set on a node to not set a model order for this node even though it is a real node.'),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ZCe),wDe),'Consider Model Order for Components'),'If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected.'),pxc),eid),CQ),xsb(Whd))));zgd(a,ZCe,cAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,$Ce),wDe),'Long Edge Ordering Strategy'),'Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout.'),txc),eid),sX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,_Ce),wDe),'Crossing Counter Node Order Influence'),'Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0).'),0),did),VI),xsb(Whd))));zgd(a,_Ce,WCe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aDe),wDe),'Crossing Counter Port Order Influence'),'Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0).'),0),did),VI),xsb(Whd))));zgd(a,aDe,WCe,null);zCc((new ACc,a))};var ixc,jxc,kxc,lxc,mxc,nxc,oxc,pxc,qxc,rxc,sxc,txc,uxc,vxc,wxc,xxc,yxc,zxc,Axc,Bxc,Cxc,Dxc,Exc,Fxc,Gxc,Hxc,Ixc,Jxc,Kxc,Lxc,Mxc,Nxc,Oxc,Pxc,Qxc,Rxc,Sxc,Txc,Uxc,Vxc,Wxc,Xxc,Yxc,Zxc,$xc,_xc,ayc,byc,cyc,dyc,eyc,fyc,gyc,hyc,iyc,jyc,kyc,lyc,myc,nyc,oyc,pyc,qyc,ryc,syc,tyc,uyc,vyc,wyc,xyc,yyc,zyc,Ayc,Byc,Cyc,Dyc,Eyc,Fyc,Gyc,Hyc,Iyc,Jyc,Kyc,Lyc,Myc,Nyc,Oyc,Pyc,Qyc,Ryc,Syc,Tyc,Uyc,Vyc,Wyc,Xyc,Yyc,Zyc,$yc,_yc,azc,bzc,czc,dzc,ezc,fzc,gzc,hzc,izc,jzc,kzc,lzc,mzc,nzc,ozc,pzc,qzc,rzc,szc,tzc,uzc,vzc,wzc,xzc,yzc,zzc,Azc,Bzc,Czc,Dzc,Ezc,Fzc,Gzc,Hzc,Izc,Jzc,Kzc,Lzc,Mzc,Nzc;var nX=sfb(ABe,'LayeredMetaDataProvider',859);feb(998,1,Eye,ACc);_.hf=function BCc(a){zCc(a)};var Rzc,Szc,Tzc,Uzc,Vzc,Wzc,Xzc,Yzc,Zzc,$zc,_zc,aAc,bAc,cAc,dAc,eAc,fAc,gAc,hAc,iAc,jAc,kAc,lAc,mAc,nAc,oAc,pAc,qAc,rAc,sAc,tAc,uAc,vAc,wAc,xAc,yAc,zAc,AAc,BAc,CAc,DAc,EAc,FAc,GAc,HAc,IAc,JAc,KAc,LAc,MAc,NAc,OAc,PAc,QAc,RAc,SAc,TAc,UAc,VAc,WAc,XAc,YAc,ZAc,$Ac,_Ac,aBc,bBc,cBc,dBc,eBc,fBc,gBc,hBc,iBc,jBc,kBc,lBc,mBc,nBc,oBc,pBc,qBc,rBc,sBc,tBc,uBc,vBc,wBc,xBc,yBc,zBc,ABc,BBc,CBc,DBc,EBc,FBc,GBc,HBc,IBc,JBc,KBc,LBc,MBc,NBc,OBc,PBc,QBc,RBc,SBc,TBc,UBc,VBc,WBc,XBc,YBc,ZBc,$Bc,_Bc,aCc,bCc,cCc,dCc,eCc,fCc,gCc,hCc,iCc,jCc,kCc,lCc,mCc,nCc,oCc,pCc,qCc,rCc,sCc,tCc,uCc,vCc,wCc,xCc;var pX=sfb(ABe,'LayeredOptions',998);feb(999,1,{},CCc);_.sf=function DCc(){var a;return a=new lXb,a};_.tf=function ECc(a){};var oX=sfb(ABe,'LayeredOptions/LayeredFactory',999);feb(1391,1,{});_.a=0;var FCc;var b4=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder',1391);feb(792,1391,{},RCc);var OCc,PCc;var qX=sfb(ABe,'LayeredSpacings/LayeredSpacingsBuilder',792);feb(265,22,{3:1,34:1,22:1,265:1,188:1,196:1},bDc);_.dg=function dDc(){return aDc(this)};_.qg=function cDc(){return aDc(this)};var SCc,TCc,UCc,VCc,WCc,XCc,YCc,ZCc,$Cc;var rX=tfb(ABe,'LayeringStrategy',265,WI,fDc,eDc);var gDc;feb(390,22,{3:1,34:1,22:1,390:1},nDc);var iDc,jDc,kDc;var sX=tfb(ABe,'LongEdgeOrderingStrategy',390,WI,pDc,oDc);var qDc;feb(203,22,{3:1,34:1,22:1,203:1},yDc);var sDc,tDc,uDc,vDc;var tX=tfb(ABe,'NodeFlexibility',203,WI,BDc,ADc);var CDc;feb(323,22,{3:1,34:1,22:1,323:1,188:1,196:1},LDc);_.dg=function NDc(){return KDc(this)};_.qg=function MDc(){return KDc(this)};var EDc,FDc,GDc,HDc,IDc;var uX=tfb(ABe,'NodePlacementStrategy',323,WI,PDc,ODc);var QDc;feb(243,22,{3:1,34:1,22:1,243:1},bEc);var SDc,TDc,UDc,VDc,WDc,XDc,YDc,ZDc,$Dc,_Dc;var vX=tfb(ABe,'NodePromotionStrategy',243,WI,dEc,cEc);var eEc;feb(284,22,{3:1,34:1,22:1,284:1},lEc);var gEc,hEc,iEc,jEc;var wX=tfb(ABe,'OrderingStrategy',284,WI,nEc,mEc);var oEc;feb(430,22,{3:1,34:1,22:1,430:1},tEc);var qEc,rEc;var xX=tfb(ABe,'PortSortingStrategy',430,WI,vEc,uEc);var wEc;feb(462,22,{3:1,34:1,22:1,462:1},CEc);var yEc,zEc,AEc;var yX=tfb(ABe,'PortType',462,WI,EEc,DEc);var FEc;feb(387,22,{3:1,34:1,22:1,387:1},LEc);var HEc,IEc,JEc;var zX=tfb(ABe,'SelfLoopDistributionStrategy',387,WI,NEc,MEc);var OEc;feb(349,22,{3:1,34:1,22:1,349:1},UEc);var QEc,REc,SEc;var AX=tfb(ABe,'SelfLoopOrderingStrategy',349,WI,WEc,VEc);var XEc;feb(312,1,{312:1},gFc);var BX=sfb(ABe,'Spacings',312);feb(350,22,{3:1,34:1,22:1,350:1},mFc);var iFc,jFc,kFc;var CX=tfb(ABe,'SplineRoutingMode',350,WI,oFc,nFc);var pFc;feb(352,22,{3:1,34:1,22:1,352:1},vFc);var rFc,sFc,tFc;var DX=tfb(ABe,'ValidifyStrategy',352,WI,xFc,wFc);var yFc;feb(388,22,{3:1,34:1,22:1,388:1},EFc);var AFc,BFc,CFc;var EX=tfb(ABe,'WrappingStrategy',388,WI,GFc,FFc);var HFc;feb(1398,1,nEe,NFc);_.rg=function OFc(a){return RD(a,36),JFc};_.Kf=function PFc(a,b){MFc(this,RD(a,36),b)};var JFc;var FX=sfb(oEe,'DepthFirstCycleBreaker',1398);feb(793,1,nEe,UFc);_.rg=function WFc(a){return RD(a,36),QFc};_.Kf=function XFc(a,b){SFc(this,RD(a,36),b)};_.sg=function VFc(a){return RD(Vmb(a,Jwb(this.d,a.c.length)),10)};var QFc;var GX=sfb(oEe,'GreedyCycleBreaker',793);feb(1401,793,nEe,YFc);_.sg=function ZFc(a){var b,c,d,e;e=null;b=lve;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),10);if(nQb(c,(Ywc(),zwc))&&RD(mQb(c,zwc),17).a<b){b=RD(mQb(c,zwc),17).a;e=c}}if(!e){return RD(Vmb(a,Jwb(this.d,a.c.length)),10)}return e};var HX=sfb(oEe,'GreedyModelOrderCycleBreaker',1401);feb(1399,1,nEe,cGc);_.rg=function dGc(a){return RD(a,36),$Fc};_.Kf=function eGc(a,b){bGc(this,RD(a,36),b)};var $Fc;var IX=sfb(oEe,'InteractiveCycleBreaker',1399);feb(1400,1,nEe,jGc);_.rg=function kGc(a){return RD(a,36),fGc};_.Kf=function lGc(a,b){iGc(this,RD(a,36),b)};_.a=0;_.b=0;var fGc;var JX=sfb(oEe,'ModelOrderCycleBreaker',1400);feb(1413,1,nEe,pGc);_.rg=function qGc(a){return RD(a,36),mGc};_.Kf=function sGc(a,b){oGc(this,RD(a,36),b)};var mGc;var LX=sfb(pEe,'BreadthFirstModelOrderLayerer',1413);feb(1414,1,fye,tGc);_.Ne=function uGc(a,b){return rGc(RD(a,10),RD(b,10))};_.Fb=function vGc(a){return this===a};_.Oe=function wGc(){return new Frb(this)};var KX=sfb(pEe,'BreadthFirstModelOrderLayerer/lambda$0$Type',1414);feb(1404,1,nEe,GGc);_.rg=function HGc(a){return RD(a,36),xGc};_.Kf=function IGc(a,b){EGc(this,RD(a,36),b)};var xGc;var OX=sfb(pEe,'CoffmanGrahamLayerer',1404);feb(1405,1,fye,JGc);_.Ne=function KGc(a,b){return AGc(this.a,RD(a,10),RD(b,10))};_.Fb=function LGc(a){return this===a};_.Oe=function MGc(){return new Frb(this)};var MX=sfb(pEe,'CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type',1405);feb(1406,1,fye,NGc);_.Ne=function OGc(a,b){return DGc(this.a,RD(a,10),RD(b,10))};_.Fb=function PGc(a){return this===a};_.Oe=function QGc(){return new Frb(this)};var NX=sfb(pEe,'CoffmanGrahamLayerer/lambda$1$Type',1406);feb(1415,1,nEe,YGc);_.rg=function ZGc(a){return RD(a,36),RGc};_.Kf=function _Gc(a,b){XGc(this,RD(a,36),b)};_.c=0;_.e=0;var RGc;var QX=sfb(pEe,'DepthFirstModelOrderLayerer',1415);feb(1416,1,fye,aHc);_.Ne=function bHc(a,b){return $Gc(RD(a,10),RD(b,10))};_.Fb=function cHc(a){return this===a};_.Oe=function dHc(){return new Frb(this)};var PX=sfb(pEe,'DepthFirstModelOrderLayerer/lambda$0$Type',1416);feb(1407,1,nEe,gHc);_.rg=function hHc(a){return RD(a,36),pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),Ebc)),oXb,Nbc),pXb,Mbc)};_.Kf=function iHc(a,b){fHc(RD(a,36),b)};var SX=sfb(pEe,'InteractiveLayerer',1407);feb(578,1,{578:1},jHc);_.a=0;_.c=0;var RX=sfb(pEe,'InteractiveLayerer/LayerSpan',578);feb(1403,1,nEe,pHc);_.rg=function qHc(a){return RD(a,36),kHc};_.Kf=function rHc(a,b){mHc(this,RD(a,36),b)};var kHc;var TX=sfb(pEe,'LongestPathLayerer',1403);feb(1412,1,nEe,xHc);_.rg=function yHc(a){return RD(a,36),sHc};_.Kf=function zHc(a,b){uHc(this,RD(a,36),b)};var sHc;var UX=sfb(pEe,'LongestPathSourceLayerer',1412);feb(1410,1,nEe,IHc);_.rg=function JHc(a){return RD(a,36),pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)};_.Kf=function KHc(a,b){GHc(this,RD(a,36),b)};_.a=0;_.b=0;_.d=0;var AHc,BHc;var WX=sfb(pEe,'MinWidthLayerer',1410);feb(1411,1,fye,MHc);_.Ne=function NHc(a,b){return LHc(this,RD(a,10),RD(b,10))};_.Fb=function OHc(a){return this===a};_.Oe=function PHc(){return new Frb(this)};var VX=sfb(pEe,'MinWidthLayerer/MinOutgoingEdgesComparator',1411);feb(1402,1,nEe,XHc);_.rg=function YHc(a){return RD(a,36),QHc};_.Kf=function ZHc(a,b){WHc(this,RD(a,36),b)};var QHc;var XX=sfb(pEe,'NetworkSimplexLayerer',1402);feb(1408,1,nEe,jIc);_.rg=function kIc(a){return RD(a,36),pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)};_.Kf=function lIc(a,b){gIc(this,RD(a,36),b)};_.d=0;_.f=0;_.g=0;_.i=0;_.s=0;_.t=0;_.u=0;var ZX=sfb(pEe,'StretchWidthLayerer',1408);feb(1409,1,fye,nIc);_.Ne=function oIc(a,b){return mIc(RD(a,10),RD(b,10))};_.Fb=function pIc(a){return this===a};_.Oe=function qIc(){return new Frb(this)};var YX=sfb(pEe,'StretchWidthLayerer/1',1409);feb(413,1,qEe);_.gg=function FIc(a,b,c,d,e,f){};_.ug=function DIc(a,b,c){return wIc(this,a,b,c)};_.fg=function EIc(){this.g=$C(jE,rEe,28,this.d,15,1);this.f=$C(jE,rEe,28,this.d,15,1)};_.hg=function GIc(a,b){this.e[a]=$C(kE,Pwe,28,b[a].length,15,1)};_.ig=function HIc(a,b,c){var d;d=c[a][b];d.p=b;this.e[a][b]=b};_.jg=function IIc(a,b,c,d){RD(Vmb(d[a][b].j,c),12).p=this.d++};_.b=0;_.c=0;_.d=0;var _X=sfb(sEe,'AbstractBarycenterPortDistributor',413);feb(1698,1,fye,JIc);_.Ne=function KIc(a,b){return zIc(this.a,RD(a,12),RD(b,12))};_.Fb=function LIc(a){return this===a};_.Oe=function MIc(){return new Frb(this)};var $X=sfb(sEe,'AbstractBarycenterPortDistributor/lambda$0$Type',1698);feb(832,1,uBe,UIc);_.gg=function XIc(a,b,c,d,e,f){};_.ig=function ZIc(a,b,c){};_.jg=function $Ic(a,b,c,d){};_.eg=function VIc(){return false};_.fg=function WIc(){this.c=this.e.a;this.g=this.f.g};_.hg=function YIc(a,b){b[a][0].c.p=a};_.kg=function _Ic(){return false};_.vg=function aJc(a,b,c,d){if(c){RIc(this,a)}else{OIc(this,a,d);PIc(this,a,b)}if(a.c.length>1){Heb(TD(mQb(Y2b((tFb(0,a.c.length),RD(a.c[0],10))),(yCc(),eAc))))?wLc(a,this.d,RD(this,669)):(yob(),_mb(a,this.d));nJc(this.e,a)}};_.lg=function bJc(a,b,c,d){var e,f,g,h,i,j,k;if(b!=SIc(c,a.length)){f=a[b-(c?1:-1)];sIc(this.f,f,c?(BEc(),zEc):(BEc(),yEc))}e=a[b][0];k=!d||e.k==(r3b(),m3b);j=dv(a[b]);this.vg(j,k,false,c);g=0;for(i=new Anb(j);i.a<i.c.c.length;){h=RD(ynb(i),10);a[b][g++]=h}return false};_.mg=function cJc(a,b){var c,d,e,f,g;g=SIc(b,a.length);f=dv(a[g]);this.vg(f,false,true,b);c=0;for(e=new Anb(f);e.a<e.c.c.length;){d=RD(ynb(e),10);a[g][c++]=d}return false};var cY=sfb(sEe,'BarycenterHeuristic',832);feb(667,1,{667:1},dJc);_.Ib=function eJc(){return 'BarycenterState [node='+this.c+', summedWeight='+this.d+', degree='+this.b+', barycenter='+this.a+', visited='+this.e+']'};_.b=0;_.d=0;_.e=false;var aY=sfb(sEe,'BarycenterHeuristic/BarycenterState',667);feb(1865,1,fye,fJc);_.Ne=function gJc(a,b){return QIc(this.a,RD(a,10),RD(b,10))};_.Fb=function hJc(a){return this===a};_.Oe=function iJc(){return new Frb(this)};var bY=sfb(sEe,'BarycenterHeuristic/lambda$0$Type',1865);feb(831,1,uBe,qJc);_.fg=function rJc(){};_.gg=function sJc(a,b,c,d,e,f){};_.jg=function vJc(a,b,c,d){};_.hg=function tJc(a,b){this.a[a]=$C(aY,{3:1,4:1,5:1,2117:1},667,b[a].length,0,1);this.b[a]=$C(dY,{3:1,4:1,5:1,2118:1},239,b[a].length,0,1)};_.ig=function uJc(a,b,c){mJc(this,c[a][b],true)};_.c=false;var fY=sfb(sEe,'ForsterConstraintResolver',831);feb(239,1,{239:1},yJc,zJc);_.Ib=function AJc(){var a,b;b=new bib;b.a+='[';for(a=0;a<this.d.length;a++){Zhb(b,i3b(this.d[a]));pJc(this.g,this.d[0]).a!=null&&Zhb(Zhb((b.a+='<',b),Pfb(pJc(this.g,this.d[0]).a)),'>');a<this.d.length-1&&(b.a+=pve,b)}return (b.a+=']',b).a};_.a=0;_.c=0;_.f=0;var dY=sfb(sEe,'ForsterConstraintResolver/ConstraintGroup',239);feb(1860,1,Qve,BJc);_.Cd=function CJc(a){mJc(this.a,RD(a,10),false)};var eY=sfb(sEe,'ForsterConstraintResolver/lambda$0$Type',1860);feb(219,1,{219:1,230:1},FJc);_.gg=function HJc(a,b,c,d,e,f){};_.hg=function IJc(a,b){};_.fg=function GJc(){this.r=$C(kE,Pwe,28,this.n,15,1)};_.ig=function JJc(a,b,c){var d,e;e=c[a][b];d=e.e;!!d&&Rmb(this.b,d)};_.jg=function KJc(a,b,c,d){++this.n};_.Ib=function LJc(){return Inb(this.e,new _sb)};_.g=false;_.i=false;_.n=0;_.s=false;var gY=sfb(sEe,'GraphInfoHolder',219);feb(1905,1,uBe,PJc);_.gg=function SJc(a,b,c,d,e,f){};_.hg=function TJc(a,b){};_.jg=function VJc(a,b,c,d){};_.ug=function QJc(a,b,c){c&&b>0?(pMc(this.a,a[b-1],a[b]),undefined):!c&&b<a.length-1?(pMc(this.a,a[b],a[b+1]),undefined):rMc(this.a,a[b],c?(qpd(),ppd):(qpd(),Xod));return MJc(this,a,b,c)};_.fg=function RJc(){this.d=$C(kE,Pwe,28,this.c,15,1);this.a=new DMc(this.d)};_.ig=function UJc(a,b,c){var d;d=c[a][b];this.c+=d.j.c.length};_.c=0;var hY=sfb(sEe,'GreedyPortDistributor',1905);feb(1421,1,nEe,aKc);_.rg=function bKc(a){return ZJc(RD(a,36))};_.Kf=function cKc(a,b){_Jc(RD(a,36),b)};var XJc;var jY=sfb(sEe,'InteractiveCrossingMinimizer',1421);feb(1422,1,fye,eKc);_.Ne=function fKc(a,b){return dKc(this,RD(a,10),RD(b,10))};_.Fb=function gKc(a){return this===a};_.Oe=function hKc(){return new Frb(this)};var iY=sfb(sEe,'InteractiveCrossingMinimizer/1',1422);feb(514,1,{514:1,106:1,47:1},FKc);_.rg=function GKc(a){var b;return RD(a,36),b=vfd(iKc),pfd(b,(sXb(),pXb),(hcc(),Ybc)),b};_.Kf=function HKc(a,b){wKc(this,RD(a,36),b)};_.e=0;var iKc;var pY=sfb(sEe,'LayerSweepCrossingMinimizer',514);feb(1418,1,Qve,IKc);_.Cd=function JKc(a){kKc(this.a,RD(a,219))};var kY=sfb(sEe,'LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type',1418);feb(1419,1,Qve,KKc);_.Cd=function LKc(a){tKc(this.a,RD(a,219))};var lY=sfb(sEe,'LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type',1419);feb(1420,1,Qve,MKc);_.Cd=function NKc(a){vKc(this.a,RD(a,219))};var mY=sfb(sEe,'LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type',1420);feb(463,22,{3:1,34:1,22:1,463:1},SKc);var OKc,PKc,QKc;var nY=tfb(sEe,'LayerSweepCrossingMinimizer/CrossMinType',463,WI,UKc,TKc);var VKc;feb(1417,1,nwe,XKc);_.Mb=function YKc(a){return jKc(),RD(a,30).a.c.length==0};var oY=sfb(sEe,'LayerSweepCrossingMinimizer/lambda$0$Type',1417);feb(1862,1,uBe,_Kc);_.fg=function aLc(){};_.gg=function bLc(a,b,c,d,e,f){};_.jg=function eLc(a,b,c,d){};_.hg=function cLc(a,b){b[a][0].c.p=a;this.b[a]=$C(qY,{3:1,4:1,5:1,2043:1},668,b[a].length,0,1)};_.ig=function dLc(a,b,c){var d;d=c[a][b];d.p=b;bD(this.b[a],b,new fLc)};var tY=sfb(sEe,'LayerSweepTypeDecider',1862);feb(668,1,{668:1},fLc);_.Ib=function gLc(){return 'NodeInfo [connectedEdges='+this.a+', hierarchicalInfluence='+this.b+', randomInfluence='+this.c+']'};_.a=0;_.b=0;_.c=0;var qY=sfb(sEe,'LayerSweepTypeDecider/NodeInfo',668);feb(1863,1,xye,hLc);_.Lb=function iLc(a){return k4b(new l4b(RD(a,12).b))};_.Fb=function jLc(a){return this===a};_.Mb=function kLc(a){return k4b(new l4b(RD(a,12).b))};var rY=sfb(sEe,'LayerSweepTypeDecider/lambda$0$Type',1863);feb(1864,1,xye,lLc);_.Lb=function mLc(a){return k4b(new l4b(RD(a,12).b))};_.Fb=function nLc(a){return this===a};_.Mb=function oLc(a){return k4b(new l4b(RD(a,12).b))};var sY=sfb(sEe,'LayerSweepTypeDecider/lambda$1$Type',1864);feb(1906,413,qEe,pLc);_.tg=function qLc(a,b,c){var d,e,f,g,h,i,j,k,l;j=this.g;switch(c.g){case 1:{d=0;e=0;for(i=new Anb(a.j);i.a<i.c.c.length;){g=RD(ynb(i),12);if(g.e.c.length!=0){++d;g.j==(qpd(),Yod)&&++e}}f=b+e;l=b+d;for(h=c3b(a,(BEc(),yEc)).Kc();h.Ob();){g=RD(h.Pb(),12);if(g.j==(qpd(),Yod)){j[g.p]=f;--f}else{j[g.p]=l;--l}}return d}case 2:{k=0;for(h=c3b(a,(BEc(),zEc)).Kc();h.Ob();){g=RD(h.Pb(),12);++k;j[g.p]=b+k}return k}default:throw Adb(new _fb);}};var uY=sfb(sEe,'LayerTotalPortDistributor',1906);feb(669,832,{669:1,230:1},vLc);_.vg=function xLc(a,b,c,d){if(c){RIc(this,a)}else{OIc(this,a,d);PIc(this,a,b)}if(a.c.length>1){Heb(TD(mQb(Y2b((tFb(0,a.c.length),RD(a.c[0],10))),(yCc(),eAc))))?wLc(a,this.d,this):(yob(),_mb(a,this.d));Heb(TD(mQb(Y2b((tFb(0,a.c.length),RD(a.c[0],10))),eAc)))||nJc(this.e,a)}};var wY=sfb(sEe,'ModelOrderBarycenterHeuristic',669);feb(1866,1,fye,yLc);_.Ne=function zLc(a,b){return tLc(this.a,RD(a,10),RD(b,10))};_.Fb=function ALc(a){return this===a};_.Oe=function BLc(){return new Frb(this)};var vY=sfb(sEe,'ModelOrderBarycenterHeuristic/lambda$0$Type',1866);feb(1423,1,nEe,FLc);_.rg=function GLc(a){var b;return RD(a,36),b=vfd(CLc),pfd(b,(sXb(),pXb),(hcc(),Ybc)),b};_.Kf=function HLc(a,b){ELc((RD(a,36),b))};var CLc;var xY=sfb(sEe,'NoCrossingMinimizer',1423);feb(809,413,qEe,ILc);_.tg=function JLc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;l=this.g;switch(c.g){case 1:{e=0;f=0;for(k=new Anb(a.j);k.a<k.c.c.length;){i=RD(ynb(k),12);if(i.e.c.length!=0){++e;i.j==(qpd(),Yod)&&++f}}d=1/(e+1);g=b+f*d;n=b+1-d;for(j=c3b(a,(BEc(),yEc)).Kc();j.Ob();){i=RD(j.Pb(),12);if(i.j==(qpd(),Yod)){l[i.p]=g;g-=d}else{l[i.p]=n;n-=d}}break}case 2:{h=0;for(k=new Anb(a.j);k.a<k.c.c.length;){i=RD(ynb(k),12);i.g.c.length==0||++h}d=1/(h+1);m=b+d;for(j=c3b(a,(BEc(),zEc)).Kc();j.Ob();){i=RD(j.Pb(),12);l[i.p]=m;m+=d}break}default:throw Adb(new agb('Port type is undefined'));}return 1};var yY=sfb(sEe,'NodeRelativePortDistributor',809);feb(822,1,{},NLc,OLc);var zY=sfb(sEe,'SweepCopy',822);feb(1861,1,uBe,RLc);_.hg=function ULc(a,b){};_.fg=function SLc(){var a;a=$C(kE,Pwe,28,this.f,15,1);this.d=new jNc(a);this.a=new DMc(a)};_.gg=function TLc(a,b,c,d,e,f){var g;g=RD(Vmb(f[a][b].j,c),12);e.c==g&&e.c.i.c==e.d.i.c&&++this.e[a]};_.ig=function VLc(a,b,c){var d;d=c[a][b];this.c[a]=this.c[a]|d.k==(r3b(),q3b)};_.jg=function WLc(a,b,c,d){var e;e=RD(Vmb(d[a][b].j,c),12);e.p=this.f++;e.g.c.length+e.e.c.length>1&&(e.j==(qpd(),Xod)?(this.b[a]=true):e.j==ppd&&a>0&&(this.b[a-1]=true))};_.f=0;var AY=sfb(tBe,'AllCrossingsCounter',1861);feb(595,1,{},_Lc);_.b=0;_.d=0;var BY=sfb(tBe,'BinaryIndexedTree',595);feb(532,1,{},DMc);var bMc,cMc;var LY=sfb(tBe,'CrossingsCounter',532);feb(1950,1,fye,HMc);_.Ne=function IMc(a,b){return wMc(this.a,RD(a,12),RD(b,12))};_.Fb=function JMc(a){return this===a};_.Oe=function KMc(){return new Frb(this)};var CY=sfb(tBe,'CrossingsCounter/lambda$0$Type',1950);feb(1951,1,fye,LMc);_.Ne=function MMc(a,b){return xMc(this.a,RD(a,12),RD(b,12))};_.Fb=function NMc(a){return this===a};_.Oe=function OMc(){return new Frb(this)};var DY=sfb(tBe,'CrossingsCounter/lambda$1$Type',1951);feb(1952,1,fye,PMc);_.Ne=function QMc(a,b){return yMc(this.a,RD(a,12),RD(b,12))};_.Fb=function RMc(a){return this===a};_.Oe=function SMc(){return new Frb(this)};var EY=sfb(tBe,'CrossingsCounter/lambda$2$Type',1952);feb(1953,1,fye,TMc);_.Ne=function UMc(a,b){return zMc(this.a,RD(a,12),RD(b,12))};_.Fb=function VMc(a){return this===a};_.Oe=function WMc(){return new Frb(this)};var FY=sfb(tBe,'CrossingsCounter/lambda$3$Type',1953);feb(1954,1,Qve,XMc);_.Cd=function YMc(a){EMc(this.a,RD(a,12))};var GY=sfb(tBe,'CrossingsCounter/lambda$4$Type',1954);feb(1955,1,nwe,ZMc);_.Mb=function $Mc(a){return FMc(this.a,RD(a,12))};var HY=sfb(tBe,'CrossingsCounter/lambda$5$Type',1955);feb(1956,1,Qve,aNc);_.Cd=function bNc(a){_Mc(this,a)};var IY=sfb(tBe,'CrossingsCounter/lambda$6$Type',1956);feb(1957,1,Qve,cNc);_.Cd=function dNc(a){var b;dMc();hmb(this.b,(b=this.a,RD(a,12),b))};var JY=sfb(tBe,'CrossingsCounter/lambda$7$Type',1957);feb(839,1,xye,eNc);_.Lb=function fNc(a){return dMc(),nQb(RD(a,12),(Ywc(),Iwc))};_.Fb=function gNc(a){return this===a};_.Mb=function hNc(a){return dMc(),nQb(RD(a,12),(Ywc(),Iwc))};var KY=sfb(tBe,'CrossingsCounter/lambda$8$Type',839);feb(1949,1,{},jNc);var PY=sfb(tBe,'HyperedgeCrossingsCounter',1949);feb(477,1,{34:1,477:1},lNc);_.Fd=function mNc(a){return kNc(this,RD(a,477))};_.b=0;_.c=0;_.e=0;_.f=0;var OY=sfb(tBe,'HyperedgeCrossingsCounter/Hyperedge',477);feb(374,1,{34:1,374:1},oNc);_.Fd=function pNc(a){return nNc(this,RD(a,374))};_.b=0;_.c=0;var NY=sfb(tBe,'HyperedgeCrossingsCounter/HyperedgeCorner',374);feb(531,22,{3:1,34:1,22:1,531:1},tNc);var qNc,rNc;var MY=tfb(tBe,'HyperedgeCrossingsCounter/HyperedgeCorner/Type',531,WI,vNc,uNc);var wNc;feb(1425,1,nEe,DNc);_.rg=function ENc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?zNc:null};_.Kf=function FNc(a,b){CNc(this,RD(a,36),b)};var zNc;var RY=sfb(tEe,'InteractiveNodePlacer',1425);feb(1426,1,nEe,TNc);_.rg=function UNc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?GNc:null};_.Kf=function VNc(a,b){RNc(this,RD(a,36),b)};var GNc,HNc,INc;var TY=sfb(tEe,'LinearSegmentsNodePlacer',1426);feb(261,1,{34:1,261:1},ZNc);_.Fd=function $Nc(a){return WNc(this,RD(a,261))};_.Fb=function _Nc(a){var b;if(ZD(a,261)){b=RD(a,261);return this.b==b.b}return false};_.Hb=function aOc(){return this.b};_.Ib=function bOc(){return 'ls'+Fe(this.e)};_.a=0;_.b=0;_.c=-1;_.d=-1;_.g=0;var SY=sfb(tEe,'LinearSegmentsNodePlacer/LinearSegment',261);feb(1428,1,nEe,yOc);_.rg=function zOc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?cOc:null};_.Kf=function HOc(a,b){uOc(this,RD(a,36),b)};_.b=0;_.g=0;var cOc;var DZ=sfb(tEe,'NetworkSimplexPlacer',1428);feb(1447,1,fye,IOc);_.Ne=function JOc(a,b){return hgb(RD(a,17).a,RD(b,17).a)};_.Fb=function KOc(a){return this===a};_.Oe=function LOc(){return new Frb(this)};var UY=sfb(tEe,'NetworkSimplexPlacer/0methodref$compare$Type',1447);feb(1449,1,fye,MOc);_.Ne=function NOc(a,b){return hgb(RD(a,17).a,RD(b,17).a)};_.Fb=function OOc(a){return this===a};_.Oe=function POc(){return new Frb(this)};var VY=sfb(tEe,'NetworkSimplexPlacer/1methodref$compare$Type',1449);feb(655,1,{655:1},QOc);var WY=sfb(tEe,'NetworkSimplexPlacer/EdgeRep',655);feb(412,1,{412:1},ROc);_.b=false;var XY=sfb(tEe,'NetworkSimplexPlacer/NodeRep',412);feb(515,13,{3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1,515:1},VOc);var aZ=sfb(tEe,'NetworkSimplexPlacer/Path',515);feb(1429,1,{},WOc);_.Kb=function XOc(a){return RD(a,18).d.i.k};var YY=sfb(tEe,'NetworkSimplexPlacer/Path/lambda$0$Type',1429);feb(1430,1,nwe,YOc);_.Mb=function ZOc(a){return RD(a,273)==(r3b(),o3b)};var ZY=sfb(tEe,'NetworkSimplexPlacer/Path/lambda$1$Type',1430);feb(1431,1,{},$Oc);_.Kb=function _Oc(a){return RD(a,18).d.i};var $Y=sfb(tEe,'NetworkSimplexPlacer/Path/lambda$2$Type',1431);feb(1432,1,nwe,aPc);_.Mb=function bPc(a){return EPc(zDc(RD(a,10)))};var _Y=sfb(tEe,'NetworkSimplexPlacer/Path/lambda$3$Type',1432);feb(1433,1,nwe,cPc);_.Mb=function dPc(a){return DOc(RD(a,12))};var bZ=sfb(tEe,'NetworkSimplexPlacer/lambda$0$Type',1433);feb(1434,1,Qve,ePc);_.Cd=function fPc(a){jOc(this.a,this.b,RD(a,12))};var cZ=sfb(tEe,'NetworkSimplexPlacer/lambda$1$Type',1434);feb(1443,1,Qve,gPc);_.Cd=function hPc(a){kOc(this.a,RD(a,18))};var dZ=sfb(tEe,'NetworkSimplexPlacer/lambda$10$Type',1443);feb(1444,1,{},iPc);_.Kb=function jPc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var eZ=sfb(tEe,'NetworkSimplexPlacer/lambda$11$Type',1444);feb(1445,1,Qve,kPc);_.Cd=function lPc(a){lOc(this.a,RD(a,10))};var fZ=sfb(tEe,'NetworkSimplexPlacer/lambda$12$Type',1445);feb(1446,1,{},mPc);_.Kb=function nPc(a){return dOc(),sgb(RD(a,125).e)};var gZ=sfb(tEe,'NetworkSimplexPlacer/lambda$13$Type',1446);feb(1448,1,{},oPc);_.Kb=function pPc(a){return dOc(),sgb(RD(a,125).e)};var hZ=sfb(tEe,'NetworkSimplexPlacer/lambda$15$Type',1448);feb(1450,1,nwe,qPc);_.Mb=function rPc(a){return dOc(),RD(a,412).c.k==(r3b(),p3b)};var iZ=sfb(tEe,'NetworkSimplexPlacer/lambda$17$Type',1450);feb(1451,1,nwe,sPc);_.Mb=function tPc(a){return dOc(),RD(a,412).c.j.c.length>1};var jZ=sfb(tEe,'NetworkSimplexPlacer/lambda$18$Type',1451);feb(1452,1,Qve,uPc);_.Cd=function vPc(a){EOc(this.c,this.b,this.d,this.a,RD(a,412))};_.c=0;_.d=0;var kZ=sfb(tEe,'NetworkSimplexPlacer/lambda$19$Type',1452);feb(1435,1,{},wPc);_.Kb=function xPc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var lZ=sfb(tEe,'NetworkSimplexPlacer/lambda$2$Type',1435);feb(1453,1,Qve,yPc);_.Cd=function zPc(a){FOc(this.a,RD(a,12))};_.a=0;var mZ=sfb(tEe,'NetworkSimplexPlacer/lambda$20$Type',1453);feb(1454,1,{},APc);_.Kb=function BPc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var nZ=sfb(tEe,'NetworkSimplexPlacer/lambda$21$Type',1454);feb(1455,1,Qve,CPc);_.Cd=function DPc(a){mOc(this.a,RD(a,10))};var oZ=sfb(tEe,'NetworkSimplexPlacer/lambda$22$Type',1455);feb(1456,1,nwe,FPc);_.Mb=function GPc(a){return EPc(a)};var pZ=sfb(tEe,'NetworkSimplexPlacer/lambda$23$Type',1456);feb(1457,1,{},HPc);_.Kb=function IPc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var qZ=sfb(tEe,'NetworkSimplexPlacer/lambda$24$Type',1457);feb(1458,1,nwe,JPc);_.Mb=function KPc(a){return nOc(this.a,RD(a,10))};var rZ=sfb(tEe,'NetworkSimplexPlacer/lambda$25$Type',1458);feb(1459,1,Qve,LPc);_.Cd=function MPc(a){oOc(this.a,this.b,RD(a,10))};var sZ=sfb(tEe,'NetworkSimplexPlacer/lambda$26$Type',1459);feb(1460,1,nwe,NPc);_.Mb=function OPc(a){return dOc(),!W0b(RD(a,18))};var tZ=sfb(tEe,'NetworkSimplexPlacer/lambda$27$Type',1460);feb(1461,1,nwe,PPc);_.Mb=function QPc(a){return dOc(),!W0b(RD(a,18))};var uZ=sfb(tEe,'NetworkSimplexPlacer/lambda$28$Type',1461);feb(1462,1,{},RPc);_.Ve=function SPc(a,b){return pOc(this.a,RD(a,30),RD(b,30))};var vZ=sfb(tEe,'NetworkSimplexPlacer/lambda$29$Type',1462);feb(1436,1,{},TPc);_.Kb=function UPc(a){return dOc(),new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var wZ=sfb(tEe,'NetworkSimplexPlacer/lambda$3$Type',1436);feb(1437,1,nwe,VPc);_.Mb=function WPc(a){return dOc(),COc(RD(a,18))};var xZ=sfb(tEe,'NetworkSimplexPlacer/lambda$4$Type',1437);feb(1438,1,Qve,XPc);_.Cd=function YPc(a){vOc(this.a,RD(a,18))};var yZ=sfb(tEe,'NetworkSimplexPlacer/lambda$5$Type',1438);feb(1439,1,{},ZPc);_.Kb=function $Pc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var zZ=sfb(tEe,'NetworkSimplexPlacer/lambda$6$Type',1439);feb(1440,1,nwe,_Pc);_.Mb=function aQc(a){return dOc(),RD(a,10).k==(r3b(),p3b)};var AZ=sfb(tEe,'NetworkSimplexPlacer/lambda$7$Type',1440);feb(1441,1,{},bQc);_.Kb=function cQc(a){return dOc(),new SDb(null,new Twb(new is(Mr(W2b(RD(a,10)).a.Kc(),new ir))))};var BZ=sfb(tEe,'NetworkSimplexPlacer/lambda$8$Type',1441);feb(1442,1,nwe,dQc);_.Mb=function eQc(a){return dOc(),V0b(RD(a,18))};var CZ=sfb(tEe,'NetworkSimplexPlacer/lambda$9$Type',1442);feb(1424,1,nEe,iQc);_.rg=function jQc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?fQc:null};_.Kf=function kQc(a,b){hQc(RD(a,36),b)};var fQc;var EZ=sfb(tEe,'SimpleNodePlacer',1424);feb(185,1,{185:1},sQc);_.Ib=function tQc(){var a;a='';this.c==(wQc(),vQc)?(a+=Oye):this.c==uQc&&(a+=Nye);this.o==(EQc(),CQc)?(a+=Zye):this.o==DQc?(a+='UP'):(a+='BALANCED');return a};var HZ=sfb(wEe,'BKAlignedLayout',185);feb(523,22,{3:1,34:1,22:1,523:1},xQc);var uQc,vQc;var FZ=tfb(wEe,'BKAlignedLayout/HDirection',523,WI,zQc,yQc);var AQc;feb(522,22,{3:1,34:1,22:1,522:1},FQc);var CQc,DQc;var GZ=tfb(wEe,'BKAlignedLayout/VDirection',522,WI,HQc,GQc);var IQc;feb(1699,1,{},MQc);var IZ=sfb(wEe,'BKAligner',1699);feb(1702,1,{},RQc);var LZ=sfb(wEe,'BKCompactor',1702);feb(663,1,{663:1},SQc);_.a=0;var JZ=sfb(wEe,'BKCompactor/ClassEdge',663);feb(466,1,{466:1},UQc);_.a=null;_.b=0;var KZ=sfb(wEe,'BKCompactor/ClassNode',466);feb(1427,1,nEe,aRc);_.rg=function eRc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?VQc:null};_.Kf=function fRc(a,b){_Qc(this,RD(a,36),b)};_.d=false;var VQc;var MZ=sfb(wEe,'BKNodePlacer',1427);feb(1700,1,{},hRc);_.d=0;var OZ=sfb(wEe,'NeighborhoodInformation',1700);feb(1701,1,fye,mRc);_.Ne=function nRc(a,b){return lRc(this,RD(a,42),RD(b,42))};_.Fb=function oRc(a){return this===a};_.Oe=function pRc(){return new Frb(this)};var NZ=sfb(wEe,'NeighborhoodInformation/NeighborComparator',1701);feb(823,1,{});var SZ=sfb(wEe,'ThresholdStrategy',823);feb(1825,823,{},uRc);_.wg=function vRc(a,b,c){return this.a.o==(EQc(),DQc)?oxe:pxe};_.xg=function wRc(){};var PZ=sfb(wEe,'ThresholdStrategy/NullThresholdStrategy',1825);feb(587,1,{587:1},xRc);_.c=false;_.d=false;var QZ=sfb(wEe,'ThresholdStrategy/Postprocessable',587);feb(1826,823,{},BRc);_.wg=function CRc(a,b,c){var d,e,f;e=b==c;d=this.a.a[c.p]==b;if(!(e||d)){return a}f=a;if(this.a.c==(wQc(),vQc)){e&&(f=yRc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=yRc(this,c,false))}else{e&&(f=yRc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=yRc(this,c,false))}return f};_.xg=function DRc(){var a,b,c,d,e;while(this.d.b!=0){e=RD(Tub(this.d),587);d=zRc(this,e);if(!d.a){continue}a=d.a;c=Heb(this.a.f[this.a.g[e.b.p].p]);if(!c&&!W0b(a)&&a.c.i.c==a.d.i.c){continue}b=ARc(this,e);b||Eyb(this.e,e)}while(this.e.a.c.length!=0){ARc(this,RD(Dyb(this.e),587))}};var RZ=sfb(wEe,'ThresholdStrategy/SimpleThresholdStrategy',1826);feb(645,1,{645:1,188:1,196:1},HRc);_.dg=function JRc(){return GRc(this)};_.qg=function IRc(){return GRc(this)};var ERc;var TZ=sfb(xEe,'EdgeRouterFactory',645);feb(1485,1,nEe,WRc);_.rg=function XRc(a){return URc(RD(a,36))};_.Kf=function YRc(a,b){VRc(RD(a,36),b)};var LRc,MRc,NRc,ORc,PRc,QRc,RRc,SRc;var UZ=sfb(xEe,'OrthogonalEdgeRouter',1485);feb(1478,1,nEe,lSc);_.rg=function mSc(a){return gSc(RD(a,36))};_.Kf=function nSc(a,b){iSc(this,RD(a,36),b)};var ZRc,$Rc,_Rc,aSc,bSc,cSc;var WZ=sfb(xEe,'PolylineEdgeRouter',1478);feb(1479,1,xye,pSc);_.Lb=function qSc(a){return oSc(RD(a,10))};_.Fb=function rSc(a){return this===a};_.Mb=function sSc(a){return oSc(RD(a,10))};var VZ=sfb(xEe,'PolylineEdgeRouter/1',1479);feb(1872,1,nwe,xSc);_.Mb=function ySc(a){return RD(a,132).c==(fTc(),dTc)};var XZ=sfb(yEe,'HyperEdgeCycleDetector/lambda$0$Type',1872);feb(1873,1,{},zSc);_.Ze=function ASc(a){return RD(a,132).d};var YZ=sfb(yEe,'HyperEdgeCycleDetector/lambda$1$Type',1873);feb(1874,1,nwe,BSc);_.Mb=function CSc(a){return RD(a,132).c==(fTc(),dTc)};var ZZ=sfb(yEe,'HyperEdgeCycleDetector/lambda$2$Type',1874);feb(1875,1,{},DSc);_.Ze=function ESc(a){return RD(a,132).d};var $Z=sfb(yEe,'HyperEdgeCycleDetector/lambda$3$Type',1875);feb(1876,1,{},FSc);_.Ze=function GSc(a){return RD(a,132).d};var _Z=sfb(yEe,'HyperEdgeCycleDetector/lambda$4$Type',1876);feb(1877,1,{},HSc);_.Ze=function ISc(a){return RD(a,132).d};var a$=sfb(yEe,'HyperEdgeCycleDetector/lambda$5$Type',1877);feb(118,1,{34:1,118:1},USc);_.Fd=function VSc(a){return KSc(this,RD(a,118))};_.Fb=function WSc(a){var b;if(ZD(a,118)){b=RD(a,118);return this.g==b.g}return false};_.Hb=function XSc(){return this.g};_.Ib=function ZSc(){var a,b,c,d;a=new dib('{');d=new Anb(this.n);while(d.a<d.c.c.length){c=RD(ynb(d),12);b=X2b(c.i);b==null&&(b='n'+$2b(c.i));a.a+=''+b;d.a<d.c.c.length&&(a.a+=',',a)}a.a+='}';return a.a};_.a=0;_.b=0;_.c=NaN;_.d=0;_.g=0;_.i=0;_.o=0;_.s=NaN;var l$=sfb(yEe,'HyperEdgeSegment',118);feb(132,1,{132:1},bTc);_.Ib=function cTc(){return this.a+'->'+this.b+' ('+os(this.c)+')'};_.d=0;var c$=sfb(yEe,'HyperEdgeSegmentDependency',132);feb(528,22,{3:1,34:1,22:1,528:1},gTc);var dTc,eTc;var b$=tfb(yEe,'HyperEdgeSegmentDependency/DependencyType',528,WI,iTc,hTc);var jTc;feb(1878,1,{},xTc);var k$=sfb(yEe,'HyperEdgeSegmentSplitter',1878);feb(1879,1,{},ATc);_.a=0;_.b=0;var d$=sfb(yEe,'HyperEdgeSegmentSplitter/AreaRating',1879);feb(339,1,{339:1},BTc);_.a=0;_.b=0;_.c=0;var e$=sfb(yEe,'HyperEdgeSegmentSplitter/FreeArea',339);feb(1880,1,fye,CTc);_.Ne=function DTc(a,b){return zTc(RD(a,118),RD(b,118))};_.Fb=function ETc(a){return this===a};_.Oe=function FTc(){return new Frb(this)};var f$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$0$Type',1880);feb(1881,1,Qve,GTc);_.Cd=function HTc(a){rTc(this.a,this.d,this.c,this.b,RD(a,118))};_.b=0;var g$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$1$Type',1881);feb(1882,1,{},ITc);_.Kb=function JTc(a){return new SDb(null,new Swb(RD(a,118).e,16))};var h$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$2$Type',1882);feb(1883,1,{},KTc);_.Kb=function LTc(a){return new SDb(null,new Swb(RD(a,118).j,16))};var i$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$3$Type',1883);feb(1884,1,{},MTc);_.Ye=function NTc(a){return Kfb(UD(a))};var j$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$4$Type',1884);feb(664,1,{},TTc);_.a=0;_.b=0;_.c=0;var o$=sfb(yEe,'OrthogonalRoutingGenerator',664);feb(1703,1,{},XTc);_.Kb=function YTc(a){return new SDb(null,new Swb(RD(a,118).e,16))};var m$=sfb(yEe,'OrthogonalRoutingGenerator/lambda$0$Type',1703);feb(1704,1,{},ZTc);_.Kb=function $Tc(a){return new SDb(null,new Swb(RD(a,118).j,16))};var n$=sfb(yEe,'OrthogonalRoutingGenerator/lambda$1$Type',1704);feb(670,1,{});var p$=sfb(zEe,'BaseRoutingDirectionStrategy',670);feb(1870,670,{},cUc);_.yg=function dUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new Anb(a.n);j.a<j.c.c.length;){i=RD(ynb(j),12);l=xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).a;for(h=new Anb(i.g);h.a<h.c.c.length;){g=RD(ynb(h),18);if(!W0b(g)){o=g.d;p=xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).a;if($wnd.Math.abs(l-p)>Vze){f=k;e=a;d=new rjd(l,f);Mub(g.a,d);_Tc(this,g,e,d,false);m=a.r;if(m){n=Kfb(UD(ju(m.e,0)));d=new rjd(n,f);Mub(g.a,d);_Tc(this,g,e,d,false);f=b+m.o*c;e=m;d=new rjd(n,f);Mub(g.a,d);_Tc(this,g,e,d,false)}d=new rjd(p,f);Mub(g.a,d);_Tc(this,g,e,d,false)}}}}};_.zg=function eUc(a){return a.i.n.a+a.n.a+a.a.a};_.Ag=function fUc(){return qpd(),npd};_.Bg=function gUc(){return qpd(),Yod};var q$=sfb(zEe,'NorthToSouthRoutingStrategy',1870);feb(1871,670,{},hUc);_.yg=function iUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b-a.o*c;for(j=new Anb(a.n);j.a<j.c.c.length;){i=RD(ynb(j),12);l=xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).a;for(h=new Anb(i.g);h.a<h.c.c.length;){g=RD(ynb(h),18);if(!W0b(g)){o=g.d;p=xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).a;if($wnd.Math.abs(l-p)>Vze){f=k;e=a;d=new rjd(l,f);Mub(g.a,d);_Tc(this,g,e,d,false);m=a.r;if(m){n=Kfb(UD(ju(m.e,0)));d=new rjd(n,f);Mub(g.a,d);_Tc(this,g,e,d,false);f=b-m.o*c;e=m;d=new rjd(n,f);Mub(g.a,d);_Tc(this,g,e,d,false)}d=new rjd(p,f);Mub(g.a,d);_Tc(this,g,e,d,false)}}}}};_.zg=function jUc(a){return a.i.n.a+a.n.a+a.a.a};_.Ag=function kUc(){return qpd(),Yod};_.Bg=function lUc(){return qpd(),npd};var r$=sfb(zEe,'SouthToNorthRoutingStrategy',1871);feb(1869,670,{},mUc);_.yg=function nUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new Anb(a.n);j.a<j.c.c.length;){i=RD(ynb(j),12);l=xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).b;for(h=new Anb(i.g);h.a<h.c.c.length;){g=RD(ynb(h),18);if(!W0b(g)){o=g.d;p=xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).b;if($wnd.Math.abs(l-p)>Vze){f=k;e=a;d=new rjd(f,l);Mub(g.a,d);_Tc(this,g,e,d,true);m=a.r;if(m){n=Kfb(UD(ju(m.e,0)));d=new rjd(f,n);Mub(g.a,d);_Tc(this,g,e,d,true);f=b+m.o*c;e=m;d=new rjd(f,n);Mub(g.a,d);_Tc(this,g,e,d,true)}d=new rjd(f,p);Mub(g.a,d);_Tc(this,g,e,d,true)}}}}};_.zg=function oUc(a){return a.i.n.b+a.n.b+a.a.b};_.Ag=function pUc(){return qpd(),Xod};_.Bg=function qUc(){return qpd(),ppd};var s$=sfb(zEe,'WestToEastRoutingStrategy',1869);feb(828,1,{},wUc);_.Ib=function xUc(){return Fe(this.a)};_.b=0;_.c=false;_.d=false;_.f=0;var u$=sfb(BEe,'NubSpline',828);feb(418,1,{418:1},AUc,BUc);var t$=sfb(BEe,'NubSpline/PolarCP',418);feb(1480,1,nEe,VUc);_.rg=function XUc(a){return QUc(RD(a,36))};_.Kf=function YUc(a,b){UUc(this,RD(a,36),b)};var CUc,DUc,EUc,FUc,GUc;var B$=sfb(BEe,'SplineEdgeRouter',1480);feb(274,1,{274:1},_Uc);_.Ib=function aVc(){return this.a+' ->('+this.c+') '+this.b};_.c=0;var v$=sfb(BEe,'SplineEdgeRouter/Dependency',274);feb(464,22,{3:1,34:1,22:1,464:1},eVc);var bVc,cVc;var w$=tfb(BEe,'SplineEdgeRouter/SideToProcess',464,WI,gVc,fVc);var hVc;feb(1481,1,nwe,jVc);_.Mb=function kVc(a){return HUc(),!RD(a,131).o};var x$=sfb(BEe,'SplineEdgeRouter/lambda$0$Type',1481);feb(1482,1,{},lVc);_.Ze=function mVc(a){return HUc(),RD(a,131).v+1};var y$=sfb(BEe,'SplineEdgeRouter/lambda$1$Type',1482);feb(1483,1,Qve,nVc);_.Cd=function oVc(a){SUc(this.a,this.b,RD(a,42))};var z$=sfb(BEe,'SplineEdgeRouter/lambda$2$Type',1483);feb(1484,1,Qve,pVc);_.Cd=function qVc(a){TUc(this.a,this.b,RD(a,42))};var A$=sfb(BEe,'SplineEdgeRouter/lambda$3$Type',1484);feb(131,1,{34:1,131:1},wVc,xVc);_.Fd=function yVc(a){return uVc(this,RD(a,131))};_.b=0;_.e=false;_.f=0;_.g=0;_.j=false;_.k=false;_.n=0;_.o=false;_.p=false;_.q=false;_.s=0;_.u=0;_.v=0;_.F=0;var D$=sfb(BEe,'SplineSegment',131);feb(467,1,{467:1},zVc);_.a=0;_.b=false;_.c=false;_.d=false;_.e=false;_.f=0;var C$=sfb(BEe,'SplineSegment/EdgeInformation',467);feb(1198,1,{},IVc);var F$=sfb(GEe,Lze,1198);feb(1199,1,fye,KVc);_.Ne=function LVc(a,b){return JVc(RD(a,121),RD(b,121))};_.Fb=function MVc(a){return this===a};_.Oe=function NVc(){return new Frb(this)};var E$=sfb(GEe,Mze,1199);feb(1197,1,{},TVc);var G$=sfb(GEe,'MrTree',1197);feb(405,22,{3:1,34:1,22:1,405:1,188:1,196:1},$Vc);_.dg=function aWc(){return ZVc(this)};_.qg=function _Vc(){return ZVc(this)};var UVc,VVc,WVc,XVc;var H$=tfb(GEe,'TreeLayoutPhases',405,WI,cWc,bWc);var dWc;feb(1112,205,oze,fWc);_.rf=function gWc(a,b){var c,d,e,f,g,h,i,j;Heb(TD(Gxd(a,(h_c(),S$c))))||RFb((c=new SFb((lud(),new zud(a))),c));g=b.eh(HEe);g.Ug('build tGraph',1);h=(i=new YWc,kQb(i,a),pQb(i,(q$c(),h$c),a),j=new Tsb,QVc(a,i,j),PVc(a,i,j),i);g.Vg();g=b.eh(HEe);g.Ug('Split graph',1);f=HVc(this.a,h);g.Vg();for(e=new Anb(f);e.a<e.c.c.length;){d=RD(ynb(e),121);RVc(this.b,d,b.eh(0.5999999940395355/f.c.length))}g=b.eh(HEe);g.Ug('Pack components',1);h=GVc(f);g.Vg();g=b.eh(HEe);g.Ug('Apply layout results',1);OVc(h);g.Vg()};var I$=sfb(GEe,'TreeLayoutProvider',1112);feb(1894,1,Vve,uWc);_.Jc=function vWc(a){xgb(this,a)};_.Kc=function wWc(){return yob(),Qob(),Pob};var J$=sfb(GEe,'TreeUtil/1',1894);feb(1895,1,Vve,xWc);_.Jc=function yWc(a){xgb(this,a)};_.Kc=function zWc(){return yob(),Qob(),Pob};var K$=sfb(GEe,'TreeUtil/2',1895);feb(1885,1,nwe,AWc);_.Mb=function BWc(a){return Heb(TD(mQb(RD(a,39),(q$c(),n$c))))};var L$=sfb(GEe,'TreeUtil/lambda$0$Type',1885);feb(1891,1,nwe,CWc);_.Mb=function DWc(a){return this.a.Hc(RD(a,39))};var M$=sfb(GEe,'TreeUtil/lambda$10$Type',1891);feb(1892,1,{},EWc);_.Kb=function FWc(a){return nWc(this.a,RD(a,39))};var N$=sfb(GEe,'TreeUtil/lambda$11$Type',1892);feb(1893,1,nwe,GWc);_.Mb=function HWc(a){return oWc(this.a,this.b,RD(a,39))};var O$=sfb(GEe,'TreeUtil/lambda$12$Type',1893);feb(1886,1,nwe,IWc);_.Mb=function JWc(a){return pWc(this.a,RD(a,65))};var P$=sfb(GEe,'TreeUtil/lambda$3$Type',1886);feb(1887,1,fye,KWc);_.Ne=function LWc(a,b){return qWc(RD(a,65),RD(b,65))};_.Fb=function MWc(a){return this===a};_.Oe=function NWc(){return new Frb(this)};var Q$=sfb(GEe,'TreeUtil/lambda$4$Type',1887);feb(1888,1,nwe,OWc);_.Mb=function PWc(a){return rWc(this.a,RD(a,65))};var R$=sfb(GEe,'TreeUtil/lambda$7$Type',1888);feb(1889,1,fye,QWc);_.Ne=function RWc(a,b){return sWc(RD(a,65),RD(b,65))};_.Fb=function SWc(a){return this===a};_.Oe=function TWc(){return new Frb(this)};var S$=sfb(GEe,'TreeUtil/lambda$8$Type',1889);feb(1890,1,{},UWc);_.Kb=function VWc(a){return RD(a,65).b};var T$=sfb(GEe,'TreeUtil/lambda$9$Type',1890);feb(508,137,{3:1,508:1,96:1,137:1});_.g=0;var V$=sfb(JEe,'TGraphElement',508);feb(65,508,{3:1,65:1,508:1,96:1,137:1},WWc);_.Ib=function XWc(){return !!this.b&&!!this.c?aXc(this.b)+'->'+aXc(this.c):'e_'+tb(this)};var U$=sfb(JEe,'TEdge',65);feb(121,137,{3:1,121:1,96:1,137:1},YWc);_.Ib=function ZWc(){var a,b,c,d,e;e=null;for(d=Sub(this.b,0);d.b!=d.d.c;){c=RD(evb(d),39);e+=(c.c==null||c.c.length==0?'n_'+c.g:'n_'+c.c)+'\n'}for(b=Sub(this.a,0);b.b!=b.d.c;){a=RD(evb(b),65);e+=(!!a.b&&!!a.c?aXc(a.b)+'->'+aXc(a.c):'e_'+tb(a))+'\n'}return e};var W$=sfb(JEe,'TGraph',121);feb(643,508,{3:1,508:1,643:1,96:1,137:1});var $$=sfb(JEe,'TShape',643);feb(39,643,{3:1,508:1,39:1,643:1,96:1,137:1},bXc);_.Ib=function cXc(){return aXc(this)};var Z$=sfb(JEe,'TNode',39);feb(236,1,Vve,dXc);_.Jc=function eXc(a){xgb(this,a)};_.Kc=function fXc(){var a;return a=Sub(this.a.d,0),new gXc(a)};var Y$=sfb(JEe,'TNode/2',236);feb(329,1,Ave,gXc);_.Nb=function hXc(a){Ztb(this,a)};_.Pb=function jXc(){return RD(evb(this.a),65).c};_.Ob=function iXc(){return dvb(this.a)};_.Qb=function kXc(){gvb(this.a)};var X$=sfb(JEe,'TNode/2/1',329);feb(1923,1,QAe,qXc);_.Kf=function DXc(a,b){oXc(this,RD(a,121),b)};var m_=sfb(LEe,'CompactionProcessor',1923);feb(1924,1,fye,EXc);_.Ne=function FXc(a,b){return rXc(this.a,RD(a,39),RD(b,39))};_.Fb=function GXc(a){return this===a};_.Oe=function HXc(){return new Frb(this)};var _$=sfb(LEe,'CompactionProcessor/lambda$0$Type',1924);feb(1925,1,nwe,IXc);_.Mb=function JXc(a){return sXc(this.b,this.a,RD(a,42))};_.a=0;_.b=0;var a_=sfb(LEe,'CompactionProcessor/lambda$1$Type',1925);feb(1934,1,fye,KXc);_.Ne=function LXc(a,b){return tXc(RD(a,39),RD(b,39))};_.Fb=function MXc(a){return this===a};_.Oe=function NXc(){return new Frb(this)};var b_=sfb(LEe,'CompactionProcessor/lambda$10$Type',1934);feb(1935,1,fye,OXc);_.Ne=function PXc(a,b){return uXc(RD(a,39),RD(b,39))};_.Fb=function QXc(a){return this===a};_.Oe=function RXc(){return new Frb(this)};var c_=sfb(LEe,'CompactionProcessor/lambda$11$Type',1935);feb(1936,1,fye,SXc);_.Ne=function TXc(a,b){return vXc(RD(a,39),RD(b,39))};_.Fb=function UXc(a){return this===a};_.Oe=function VXc(){return new Frb(this)};var d_=sfb(LEe,'CompactionProcessor/lambda$12$Type',1936);feb(1926,1,nwe,WXc);_.Mb=function XXc(a){return wXc(this.a,RD(a,42))};_.a=0;var e_=sfb(LEe,'CompactionProcessor/lambda$2$Type',1926);feb(1927,1,nwe,YXc);_.Mb=function ZXc(a){return xXc(this.a,RD(a,42))};_.a=0;var f_=sfb(LEe,'CompactionProcessor/lambda$3$Type',1927);feb(1928,1,nwe,$Xc);_.Mb=function _Xc(a){return RD(a,39).c.indexOf(IEe)==-1};var g_=sfb(LEe,'CompactionProcessor/lambda$4$Type',1928);feb(1929,1,{},aYc);_.Kb=function bYc(a){return yXc(this.a,RD(a,39))};_.a=0;var h_=sfb(LEe,'CompactionProcessor/lambda$5$Type',1929);feb(1930,1,{},cYc);_.Kb=function dYc(a){return zXc(this.a,RD(a,39))};_.a=0;var i_=sfb(LEe,'CompactionProcessor/lambda$6$Type',1930);feb(1931,1,fye,eYc);_.Ne=function fYc(a,b){return AXc(this.a,RD(a,240),RD(b,240))};_.Fb=function gYc(a){return this===a};_.Oe=function hYc(){return new Frb(this)};var j_=sfb(LEe,'CompactionProcessor/lambda$7$Type',1931);feb(1932,1,fye,iYc);_.Ne=function jYc(a,b){return BXc(this.a,RD(a,39),RD(b,39))};_.Fb=function kYc(a){return this===a};_.Oe=function lYc(){return new Frb(this)};var k_=sfb(LEe,'CompactionProcessor/lambda$8$Type',1932);feb(1933,1,fye,mYc);_.Ne=function nYc(a,b){return CXc(RD(a,39),RD(b,39))};_.Fb=function oYc(a){return this===a};_.Oe=function pYc(){return new Frb(this)};var l_=sfb(LEe,'CompactionProcessor/lambda$9$Type',1933);feb(1921,1,QAe,rYc);_.Kf=function sYc(a,b){qYc(RD(a,121),b)};var n_=sfb(LEe,'DirectionProcessor',1921);feb(1913,1,QAe,vYc);_.Kf=function xYc(a,b){uYc(this,RD(a,121),b)};var o_=sfb(LEe,'FanProcessor',1913);feb(1937,1,QAe,zYc);_.Kf=function CYc(a,b){yYc(RD(a,121),b)};var t_=sfb(LEe,'GraphBoundsProcessor',1937);feb(1938,1,{},DYc);_.Ye=function EYc(a){return RD(a,39).e.a};var p_=sfb(LEe,'GraphBoundsProcessor/lambda$0$Type',1938);feb(1939,1,{},FYc);_.Ye=function GYc(a){return RD(a,39).e.b};var q_=sfb(LEe,'GraphBoundsProcessor/lambda$1$Type',1939);feb(1940,1,{},HYc);_.Ye=function IYc(a){return AYc(RD(a,39))};var r_=sfb(LEe,'GraphBoundsProcessor/lambda$2$Type',1940);feb(1941,1,{},JYc);_.Ye=function KYc(a){return BYc(RD(a,39))};var s_=sfb(LEe,'GraphBoundsProcessor/lambda$3$Type',1941);feb(262,22,{3:1,34:1,22:1,262:1,196:1},XYc);_.dg=function YYc(){switch(this.g){case 0:return new DZc;case 1:return new vYc;case 2:return new nZc;case 3:return new tZc;case 4:return new gZc;case 8:return new cZc;case 5:return new rYc;case 6:return new AZc;case 7:return new qXc;case 9:return new zYc;case 10:return new GZc;default:throw Adb(new agb(lBe+(this.f!=null?this.f:''+this.g)));}};var LYc,MYc,NYc,OYc,PYc,QYc,RYc,SYc,TYc,UYc,VYc;var u_=tfb(LEe,mBe,262,WI,$Yc,ZYc);var _Yc;feb(1920,1,QAe,cZc);_.Kf=function dZc(a,b){bZc(RD(a,121),b)};var v_=sfb(LEe,'LevelCoordinatesProcessor',1920);feb(1918,1,QAe,gZc);_.Kf=function hZc(a,b){eZc(this,RD(a,121),b)};_.a=0;var x_=sfb(LEe,'LevelHeightProcessor',1918);feb(1919,1,Vve,iZc);_.Jc=function jZc(a){xgb(this,a)};_.Kc=function kZc(){return yob(),Qob(),Pob};var w_=sfb(LEe,'LevelHeightProcessor/1',1919);feb(1914,1,QAe,nZc);_.Kf=function oZc(a,b){lZc(this,RD(a,121),b)};var z_=sfb(LEe,'LevelProcessor',1914);feb(1915,1,nwe,pZc);_.Mb=function qZc(a){return Heb(TD(mQb(RD(a,39),(q$c(),n$c))))};var y_=sfb(LEe,'LevelProcessor/lambda$0$Type',1915);feb(1916,1,QAe,tZc);_.Kf=function uZc(a,b){rZc(this,RD(a,121),b)};_.a=0;var B_=sfb(LEe,'NeighborsProcessor',1916);feb(1917,1,Vve,vZc);_.Jc=function wZc(a){xgb(this,a)};_.Kc=function xZc(){return yob(),Qob(),Pob};var A_=sfb(LEe,'NeighborsProcessor/1',1917);feb(1922,1,QAe,AZc);_.Kf=function BZc(a,b){yZc(this,RD(a,121),b)};_.a=0;var C_=sfb(LEe,'NodePositionProcessor',1922);feb(1912,1,QAe,DZc);_.Kf=function EZc(a,b){CZc(this,RD(a,121),b)};var D_=sfb(LEe,'RootProcessor',1912);feb(1942,1,QAe,GZc);_.Kf=function HZc(a,b){FZc(RD(a,121),b)};var E_=sfb(LEe,'Untreeifyer',1942);feb(392,22,{3:1,34:1,22:1,392:1},MZc);var IZc,JZc,KZc;var F_=tfb(PEe,'EdgeRoutingMode',392,WI,OZc,NZc);var PZc;var RZc,SZc,TZc,UZc,VZc,WZc,XZc,YZc,ZZc,$Zc,_Zc,a$c,b$c,c$c,d$c,e$c,f$c,g$c,h$c,i$c,j$c,k$c,l$c,m$c,n$c,o$c,p$c;feb(862,1,Eye,C$c);_.hf=function D$c(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,REe),''),YEe),'Turns on Tree compaction which decreases the size of the whole tree by placing nodes of multiple levels in one large level'),(Geb(),false)),(kid(),cid)),QI),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SEe),''),'Edge End Texture Length'),'Should be set to the length of the texture at the end of an edge. This value can be used to improve the Edge Routing.'),7),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TEe),''),'Tree Level'),'The index for the tree level the node is in'),sgb(0)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,UEe),''),YEe),'When set to a positive number this option will force the algorithm to place the node to the specified position within the trees layer if weighting is set to constraint'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VEe),''),'Weighting of Nodes'),'Which weighting to use when computing a node order.'),A$c),eid),J_),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,WEe),''),'Edge Routing Mode'),'Chooses an Edge Routing algorithm.'),u$c),eid),F_),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,XEe),''),'Search Order'),'Which search order to use when computing a spanning tree.'),x$c),eid),K_),xsb(Whd))));i_c((new j_c,a))};var r$c,s$c,t$c,u$c,v$c,w$c,x$c,y$c,z$c,A$c;var G_=sfb(PEe,'MrTreeMetaDataProvider',862);feb(1006,1,Eye,j_c);_.hf=function k_c(a){i_c(a)};var E$c,F$c,G$c,H$c,I$c,J$c,K$c,L$c,M$c,N$c,O$c,P$c,Q$c,R$c,S$c,T$c,U$c,V$c,W$c,X$c,Y$c,Z$c,$$c,_$c,a_c,b_c,c_c,d_c,e_c,f_c,g_c;var I_=sfb(PEe,'MrTreeOptions',1006);feb(1007,1,{},l_c);_.sf=function m_c(){var a;return a=new fWc,a};_.tf=function n_c(a){};var H_=sfb(PEe,'MrTreeOptions/MrtreeFactory',1007);feb(353,22,{3:1,34:1,22:1,353:1},t_c);var o_c,p_c,q_c,r_c;var J_=tfb(PEe,'OrderWeighting',353,WI,v_c,u_c);var w_c;feb(433,22,{3:1,34:1,22:1,433:1},B_c);var y_c,z_c;var K_=tfb(PEe,'TreeifyingOrder',433,WI,D_c,C_c);var E_c;feb(1486,1,nEe,N_c);_.rg=function O_c(a){return RD(a,121),G_c};_.Kf=function P_c(a,b){M_c(this,RD(a,121),b)};var G_c;var L_=sfb('org.eclipse.elk.alg.mrtree.p1treeify','DFSTreeifyer',1486);feb(1487,1,nEe,V_c);_.rg=function W_c(a){return RD(a,121),Q_c};_.Kf=function $_c(a,b){U_c(this,RD(a,121),b)};var Q_c;var T_=sfb(aFe,'NodeOrderer',1487);feb(1494,1,{},a0c);_.td=function b0c(a){return __c(a)};var M_=sfb(aFe,'NodeOrderer/0methodref$lambda$6$Type',1494);feb(1488,1,nwe,c0c);_.Mb=function d0c(a){return R_c(),Heb(TD(mQb(RD(a,39),(q$c(),n$c))))};var N_=sfb(aFe,'NodeOrderer/lambda$0$Type',1488);feb(1489,1,nwe,e0c);_.Mb=function f0c(a){return R_c(),RD(mQb(RD(a,39),(h_c(),W$c)),17).a<0};var O_=sfb(aFe,'NodeOrderer/lambda$1$Type',1489);feb(1490,1,nwe,g0c);_.Mb=function h0c(a){return X_c(this.a,RD(a,39))};var P_=sfb(aFe,'NodeOrderer/lambda$2$Type',1490);feb(1491,1,nwe,i0c);_.Mb=function j0c(a){return Y_c(this.a,RD(a,39))};var Q_=sfb(aFe,'NodeOrderer/lambda$3$Type',1491);feb(1492,1,fye,k0c);_.Ne=function l0c(a,b){return Z_c(RD(a,39),RD(b,39))};_.Fb=function m0c(a){return this===a};_.Oe=function n0c(){return new Frb(this)};var R_=sfb(aFe,'NodeOrderer/lambda$4$Type',1492);feb(1493,1,nwe,o0c);_.Mb=function p0c(a){return R_c(),RD(mQb(RD(a,39),(q$c(),XZc)),17).a!=0};var S_=sfb(aFe,'NodeOrderer/lambda$5$Type',1493);feb(1495,1,nEe,x0c);_.rg=function y0c(a){return RD(a,121),q0c};_.Kf=function z0c(a,b){v0c(this,RD(a,121),b)};_.b=0;var q0c;var U_=sfb('org.eclipse.elk.alg.mrtree.p3place','NodePlacer',1495);feb(1496,1,nEe,J0c);_.rg=function K0c(a){return RD(a,121),A0c};_.Kf=function Y0c(a,b){I0c(RD(a,121),b)};var A0c;var o0=sfb(bFe,'EdgeRouter',1496);feb(1498,1,fye,Z0c);_.Ne=function $0c(a,b){return hgb(RD(a,17).a,RD(b,17).a)};_.Fb=function _0c(a){return this===a};_.Oe=function a1c(){return new Frb(this)};var V_=sfb(bFe,'EdgeRouter/0methodref$compare$Type',1498);feb(1503,1,{},b1c);_.Ye=function c1c(a){return Kfb(UD(a))};var W_=sfb(bFe,'EdgeRouter/1methodref$doubleValue$Type',1503);feb(1505,1,fye,d1c);_.Ne=function e1c(a,b){return Qfb(Kfb(UD(a)),Kfb(UD(b)))};_.Fb=function f1c(a){return this===a};_.Oe=function g1c(){return new Frb(this)};var X_=sfb(bFe,'EdgeRouter/2methodref$compare$Type',1505);feb(1507,1,fye,h1c);_.Ne=function i1c(a,b){return Qfb(Kfb(UD(a)),Kfb(UD(b)))};_.Fb=function j1c(a){return this===a};_.Oe=function k1c(){return new Frb(this)};var Y_=sfb(bFe,'EdgeRouter/3methodref$compare$Type',1507);feb(1509,1,{},l1c);_.Ye=function m1c(a){return Kfb(UD(a))};var Z_=sfb(bFe,'EdgeRouter/4methodref$doubleValue$Type',1509);feb(1511,1,fye,n1c);_.Ne=function o1c(a,b){return Qfb(Kfb(UD(a)),Kfb(UD(b)))};_.Fb=function p1c(a){return this===a};_.Oe=function q1c(){return new Frb(this)};var $_=sfb(bFe,'EdgeRouter/5methodref$compare$Type',1511);feb(1513,1,fye,r1c);_.Ne=function s1c(a,b){return Qfb(Kfb(UD(a)),Kfb(UD(b)))};_.Fb=function t1c(a){return this===a};_.Oe=function u1c(){return new Frb(this)};var __=sfb(bFe,'EdgeRouter/6methodref$compare$Type',1513);feb(1497,1,{},v1c);_.Kb=function w1c(a){return B0c(),RD(mQb(RD(a,39),(h_c(),f_c)),17)};var a0=sfb(bFe,'EdgeRouter/lambda$0$Type',1497);feb(1508,1,{},x1c);_.Kb=function y1c(a){return L0c(RD(a,39))};var b0=sfb(bFe,'EdgeRouter/lambda$11$Type',1508);feb(1510,1,{},z1c);_.Kb=function A1c(a){return M0c(this.b,this.a,RD(a,39))};_.a=0;_.b=0;var c0=sfb(bFe,'EdgeRouter/lambda$13$Type',1510);feb(1512,1,{},B1c);_.Kb=function C1c(a){return N0c(this.b,this.a,RD(a,39))};_.a=0;_.b=0;var d0=sfb(bFe,'EdgeRouter/lambda$15$Type',1512);feb(1514,1,fye,D1c);_.Ne=function E1c(a,b){return O0c(RD(a,65),RD(b,65))};_.Fb=function F1c(a){return this===a};_.Oe=function G1c(){return new Frb(this)};var e0=sfb(bFe,'EdgeRouter/lambda$17$Type',1514);feb(1515,1,fye,H1c);_.Ne=function I1c(a,b){return P0c(RD(a,65),RD(b,65))};_.Fb=function J1c(a){return this===a};_.Oe=function K1c(){return new Frb(this)};var f0=sfb(bFe,'EdgeRouter/lambda$18$Type',1515);feb(1516,1,fye,L1c);_.Ne=function M1c(a,b){return Q0c(RD(a,65),RD(b,65))};_.Fb=function N1c(a){return this===a};_.Oe=function O1c(){return new Frb(this)};var g0=sfb(bFe,'EdgeRouter/lambda$19$Type',1516);feb(1499,1,nwe,P1c);_.Mb=function Q1c(a){return R0c(this.a,RD(a,39))};_.a=0;var h0=sfb(bFe,'EdgeRouter/lambda$2$Type',1499);feb(1517,1,fye,R1c);_.Ne=function S1c(a,b){return S0c(RD(a,65),RD(b,65))};_.Fb=function T1c(a){return this===a};_.Oe=function U1c(){return new Frb(this)};var i0=sfb(bFe,'EdgeRouter/lambda$20$Type',1517);feb(1500,1,fye,V1c);_.Ne=function W1c(a,b){return T0c(RD(a,39),RD(b,39))};_.Fb=function X1c(a){return this===a};_.Oe=function Y1c(){return new Frb(this)};var j0=sfb(bFe,'EdgeRouter/lambda$3$Type',1500);feb(1501,1,fye,Z1c);_.Ne=function $1c(a,b){return U0c(RD(a,39),RD(b,39))};_.Fb=function _1c(a){return this===a};_.Oe=function a2c(){return new Frb(this)};var k0=sfb(bFe,'EdgeRouter/lambda$4$Type',1501);feb(1502,1,{},b2c);_.Kb=function c2c(a){return V0c(RD(a,39))};var l0=sfb(bFe,'EdgeRouter/lambda$5$Type',1502);feb(1504,1,{},d2c);_.Kb=function e2c(a){return W0c(this.b,this.a,RD(a,39))};_.a=0;_.b=0;var m0=sfb(bFe,'EdgeRouter/lambda$7$Type',1504);feb(1506,1,{},f2c);_.Kb=function g2c(a){return X0c(this.b,this.a,RD(a,39))};_.a=0;_.b=0;var n0=sfb(bFe,'EdgeRouter/lambda$9$Type',1506);feb(675,1,{675:1},i2c);_.e=0;_.f=false;_.g=false;var r0=sfb(bFe,'MultiLevelEdgeNodeNodeGap',675);feb(1943,1,fye,l2c);_.Ne=function m2c(a,b){return j2c(RD(a,240),RD(b,240))};_.Fb=function n2c(a){return this===a};_.Oe=function o2c(){return new Frb(this)};var p0=sfb(bFe,'MultiLevelEdgeNodeNodeGap/lambda$0$Type',1943);feb(1944,1,fye,p2c);_.Ne=function q2c(a,b){return k2c(RD(a,240),RD(b,240))};_.Fb=function r2c(a){return this===a};_.Oe=function s2c(){return new Frb(this)};var q0=sfb(bFe,'MultiLevelEdgeNodeNodeGap/lambda$1$Type',1944);var t2c;feb(500,22,{3:1,34:1,22:1,500:1,188:1,196:1},z2c);_.dg=function B2c(){return y2c(this)};_.qg=function A2c(){return y2c(this)};var v2c,w2c;var s0=tfb(cFe,'RadialLayoutPhases',500,WI,D2c,C2c);var E2c;feb(1113,205,oze,H2c);_.rf=function I2c(a,b){var c,d,e,f,g,h;c=G2c(this,a);b.Ug('Radial layout',c.c.length);Heb(TD(Gxd(a,($4c(),N4c))))||RFb((d=new SFb((lud(),new zud(a))),d));h=K2c(a);Ixd(a,(u2c(),t2c),h);if(!h){throw Adb(new agb('The given graph is not a tree!'))}e=Kfb(UD(Gxd(a,S4c)));e==0&&(e=J2c(a));Ixd(a,S4c,e);for(g=new Anb(G2c(this,a));g.a<g.c.c.length;){f=RD(ynb(g),47);f.Kf(a,b.eh(1))}b.Vg()};var t0=sfb(cFe,'RadialLayoutProvider',1113);feb(556,1,fye,T2c);_.Ne=function U2c(a,b){return S2c(this.a,this.b,RD(a,27),RD(b,27))};_.Fb=function V2c(a){return this===a};_.Oe=function W2c(){return new Frb(this)};_.a=0;_.b=0;var u0=sfb(cFe,'RadialUtil/lambda$0$Type',556);feb(1395,1,QAe,Y2c);_.Kf=function Z2c(a,b){X2c(RD(a,27),b)};var v0=sfb(hFe,'CalculateGraphSize',1395);feb(1396,1,QAe,_2c);_.Kf=function a3c(a,b){$2c(RD(a,27))};var w0=sfb(hFe,'EdgeAngleCalculator',1396);feb(368,22,{3:1,34:1,22:1,368:1,196:1},h3c);_.dg=function i3c(){switch(this.g){case 0:return new Q3c;case 1:return new A3c;case 2:return new U3c;case 3:return new Y2c;case 4:return new _2c;default:throw Adb(new agb(lBe+(this.f!=null?this.f:''+this.g)));}};var b3c,c3c,d3c,e3c,f3c;var x0=tfb(hFe,mBe,368,WI,k3c,j3c);var l3c;feb(653,1,{});_.e=1;_.g=0;var y0=sfb(jFe,'AbstractRadiusExtensionCompaction',653);feb(1834,653,{},x3c);_.Cg=function y3c(a){var b,c,d,e,f,g,h,i,j;this.c=RD(Gxd(a,(u2c(),t2c)),27);r3c(this,this.c);this.d=u5c(RD(Gxd(a,($4c(),X4c)),299));i=RD(Gxd(a,H4c),17);!!i&&q3c(this,i.a);h=UD(Gxd(a,(umd(),fmd)));s3c(this,(uFb(h),h));j=Q2c(this.c);!!this.d&&this.d.Gg(j);t3c(this,j);g=new mob(cD(WC(J4,1),kFe,27,0,[this.c]));for(c=0;c<2;c++){for(b=0;b<j.c.length;b++){e=new mob(cD(WC(J4,1),kFe,27,0,[(tFb(b,j.c.length),RD(j.c[b],27))]));f=b<j.c.length-1?(tFb(b+1,j.c.length),RD(j.c[b+1],27)):(tFb(0,j.c.length),RD(j.c[0],27));d=b==0?RD(Vmb(j,j.c.length-1),27):(tFb(b-1,j.c.length),RD(j.c[b-1],27));v3c(this,(tFb(b,j.c.length),RD(j.c[b],27),g),d,f,e)}}};var z0=sfb(jFe,'AnnulusWedgeCompaction',1834);feb(1393,1,QAe,A3c);_.Kf=function B3c(a,b){z3c(RD(a,27),b)};var A0=sfb(jFe,'GeneralCompactor',1393);feb(1833,653,{},F3c);_.Cg=function G3c(a){var b,c,d,e;c=RD(Gxd(a,(u2c(),t2c)),27);this.f=c;this.b=u5c(RD(Gxd(a,($4c(),X4c)),299));e=RD(Gxd(a,H4c),17);!!e&&q3c(this,e.a);d=UD(Gxd(a,(umd(),fmd)));s3c(this,(uFb(d),d));b=Q2c(c);!!this.b&&this.b.Gg(b);D3c(this,b)};_.a=0;var B0=sfb(jFe,'RadialCompaction',1833);feb(1842,1,{},I3c);_.Dg=function J3c(a){var b,c,d,e,f,g;this.a=a;b=0;g=Q2c(a);d=0;for(f=new Anb(g);f.a<f.c.c.length;){e=RD(ynb(f),27);++d;for(c=d;c<g.c.length;c++){H3c(this,e,(tFb(c,g.c.length),RD(g.c[c],27)))&&(b+=1)}}return b};var C0=sfb(lFe,'CrossingMinimizationPosition',1842);feb(1840,1,{},K3c);_.Dg=function L3c(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;d=0;for(c=new is(Mr(zGd(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),74);h=AGd(RD(QHd((!b.c&&(b.c=new Yie(E4,b,5,8)),b.c),0),84));j=h.i+h.g/2;k=h.j+h.f/2;e=a.i+a.g/2;f=a.j+a.f/2;l=new pjd;l.a=j-e;l.b=k-f;g=new rjd(l.a,l.b);wid(g,a.g,a.f);l.a-=g.a;l.b-=g.b;e=j-l.a;f=k-l.b;i=new rjd(l.a,l.b);wid(i,h.g,h.f);l.a-=i.a;l.b-=i.b;j=e+l.a;k=f+l.b;m=j-e;n=k-f;d+=$wnd.Math.sqrt(m*m+n*n)}return d};var D0=sfb(lFe,'EdgeLengthOptimization',1840);feb(1841,1,{},M3c);_.Dg=function N3c(a){var b,c,d,e,f,g,h,i,j,k,l;d=0;for(c=new is(Mr(zGd(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),74);h=AGd(RD(QHd((!b.c&&(b.c=new Yie(E4,b,5,8)),b.c),0),84));i=h.i+h.g/2;j=h.j+h.f/2;e=RD(Gxd(h,(umd(),Qld)),8);f=a.i+e.a+a.g/2;g=a.j+e.b+a.f;k=i-f;l=j-g;d+=$wnd.Math.sqrt(k*k+l*l)}return d};var E0=sfb(lFe,'EdgeLengthPositionOptimization',1841);feb(1392,653,QAe,Q3c);_.Kf=function R3c(a,b){P3c(this,RD(a,27),b)};var F0=sfb('org.eclipse.elk.alg.radial.intermediate.overlaps','RadiusExtensionOverlapRemoval',1392);feb(1394,1,QAe,U3c);_.Kf=function V3c(a,b){T3c(RD(a,27),b)};var G0=sfb('org.eclipse.elk.alg.radial.intermediate.rotation','GeneralRotator',1394);feb(434,22,{3:1,34:1,22:1,434:1},$3c);var W3c,X3c;var H0=tfb(nFe,'AnnulusWedgeCriteria',434,WI,a4c,_3c);var b4c;feb(393,22,{3:1,34:1,22:1,393:1},i4c);var d4c,e4c,f4c;var I0=tfb(nFe,uze,393,WI,k4c,j4c);var l4c;feb(863,1,Eye,E4c);_.hf=function F4c(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,oFe),''),'Center On Root'),'Centers the layout on the root of the tree i.e. so that the central node is also the center node of the final layout. This introduces additional whitespace.'),(Geb(),false)),(kid(),cid)),QI),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,pFe),''),'Order ID'),'The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly.'),sgb(0)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,qFe),''),'Radius'),'The radius option can be used to set the initial radius for the radial layouter.'),0),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,rFe),''),'Rotate'),'The rotate option determines whether a rotation of the layout should be performed.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,sFe),''),AFe),'With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately.'),q4c),eid),I0),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,tFe),''),'Compaction Step Size'),'Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration.'),sgb(1)),gid),bJ),xsb(Whd))));zgd(a,tFe,sFe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,uFe),''),'Sorter'),'Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates.'),A4c),eid),N0),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,vFe),''),'Annulus Wedge Criteria'),'Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals.'),C4c),eid),H0),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,wFe),''),'Translation Optimization'),'Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized.'),s4c),eid),M0),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,xFe),BFe),'Target Angle'),'The angle in radians that the layout should be rotated to after layout.'),0),did),VI),xsb(Whd))));zgd(a,xFe,rFe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,yFe),BFe),'Additional Wedge Space'),'If set to true, modifies the target angle by rotating further such that space is left for an edge to pass in between the nodes. This option should only be used in conjunction with top-down layout.'),false),cid),QI),xsb(Whd))));zgd(a,yFe,rFe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,zFe),BFe),'Outgoing Edge Angles'),'Calculate the required angle of connected nodes to leave space for an incoming edge. This option should only be used in conjunction with top-down layout.'),false),cid),QI),xsb(Whd))));_4c((new a5c,a))};var n4c,o4c,p4c,q4c,r4c,s4c,t4c,u4c,v4c,w4c,x4c,y4c,z4c,A4c,B4c,C4c;var J0=sfb(nFe,'RadialMetaDataProvider',863);feb(1008,1,Eye,a5c);_.hf=function b5c(a){_4c(a)};var G4c,H4c,I4c,J4c,K4c,L4c,M4c,N4c,O4c,P4c,Q4c,R4c,S4c,T4c,U4c,V4c,W4c,X4c,Y4c,Z4c;var L0=sfb(nFe,'RadialOptions',1008);feb(1009,1,{},c5c);_.sf=function d5c(){var a;return a=new H2c,a};_.tf=function e5c(a){};var K0=sfb(nFe,'RadialOptions/RadialFactory',1009);feb(354,22,{3:1,34:1,22:1,354:1},l5c);var f5c,g5c,h5c,i5c;var M0=tfb(nFe,'RadialTranslationStrategy',354,WI,n5c,m5c);var o5c;feb(299,22,{3:1,34:1,22:1,299:1},v5c);var q5c,r5c,s5c;var N0=tfb(nFe,'SortingStrategy',299,WI,x5c,w5c);var y5c;feb(1476,1,nEe,D5c);_.rg=function E5c(a){return RD(a,27),null};_.Kf=function F5c(a,b){B5c(this,RD(a,27),b)};_.c=0;var O0=sfb('org.eclipse.elk.alg.radial.p1position','EadesRadial',1476);feb(1838,1,{},G5c);_.Eg=function H5c(a){return O2c(a)};var P0=sfb(DFe,'AnnulusWedgeByLeafs',1838);feb(1839,1,{},J5c);_.Eg=function K5c(a){return I5c(this,a)};var Q0=sfb(DFe,'AnnulusWedgeByNodeSpace',1839);feb(1477,1,nEe,N5c);_.rg=function O5c(a){return RD(a,27),null};_.Kf=function P5c(a,b){L5c(this,RD(a,27),b)};var R0=sfb('org.eclipse.elk.alg.radial.p2routing','StraightLineEdgeRouter',1477);feb(826,1,{},R5c);_.Fg=function S5c(a){};_.Gg=function U5c(a){Q5c(this,a)};var T0=sfb(EFe,'IDSorter',826);feb(1837,1,fye,V5c);_.Ne=function W5c(a,b){return T5c(RD(a,27),RD(b,27))};_.Fb=function X5c(a){return this===a};_.Oe=function Y5c(){return new Frb(this)};var S0=sfb(EFe,'IDSorter/lambda$0$Type',1837);feb(1836,1,{},_5c);_.Fg=function a6c(a){Z5c(this,a)};_.Gg=function b6c(a){var b;if(!a.dc()){if(!this.e){b=L2c(RD(a.Xb(0),27));Z5c(this,b)}Q5c(this.e,a)}};var U0=sfb(EFe,'PolarCoordinateSorter',1836);feb(445,22,{3:1,34:1,22:1,445:1},g6c);var c6c,d6c,e6c;var V0=tfb(IFe,'RectPackingLayoutPhases',445,WI,i6c,h6c);var j6c;feb(1118,205,oze,l6c);_.rf=function n6c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;b.Ug('Rectangle Packing',1);k=RD(Gxd(a,(X7c(),N7c)),107);h=Heb(TD(Gxd(a,G7c)));j=Kfb(UD(Gxd(a,Q7c)));u=Heb(TD(Gxd(a,R7c)));o=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);t=false;if(u&&o.i>=3){q=RD(QHd(o,0),27);r=RD(QHd(o,1),27);e=0;while(e+2<o.i){p=q;q=r;r=RD(QHd(o,e+2),27);if(p.f>=q.f+r.f+j||r.f>=p.f+q.f+j){t=true;break}else{++e}}}else{t=true}if(!t){l=o.i;for(g=new dMd(o);g.e!=g.i.gc();){f=RD(bMd(g),27);Ixd(f,(umd(),Rld),sgb(l));--l}crd(a,new Oqd);b.Vg();return}c=(Sed(this.a),Ved(this.a,(f6c(),c6c),RD(Gxd(a,V7c),188)),Ved(this.a,d6c,RD(Gxd(a,M7c),188)),Ved(this.a,e6c,RD(Gxd(a,S7c),188)),Ped(this.a,(v=new ufd,pfd(v,c6c,(z6c(),y6c)),pfd(v,d6c,x6c),Heb(TD(Gxd(a,B7c)))&&pfd(v,c6c,w6c),v)),Qed(this.a,a));i=1/c.c.length;s=0;for(n=new Anb(c);n.a<n.c.c.length;){m=RD(ynb(n),47);if(b.$g()){return}m.Kf(a,b.eh(i));++s}m6c(o,k);h||Esd(a,Kfb(UD(Gxd(a,(X6c(),O6c))))+(k.b+k.c),Kfb(UD(Gxd(a,N6c)))+(k.d+k.a),false,true);Heb(TD(Gxd(a,J7c)))||RFb((d=new SFb((lud(),new zud(a))),d));b.Vg()};var W0=sfb(IFe,'RectPackingLayoutProvider',1118);feb(1518,1,QAe,p6c);_.Kf=function r6c(a,b){o6c(RD(a,27),b)};var Y0=sfb(JFe,'InteractiveNodeReorderer',1518);feb(1519,1,fye,s6c);_.Ne=function t6c(a,b){return q6c(RD(a,27),RD(b,27))};_.Fb=function u6c(a){return this===a};_.Oe=function v6c(){return new Frb(this)};var X0=sfb(JFe,'InteractiveNodeReorderer/lambda$0$Type',1519);feb(455,22,{3:1,34:1,22:1,455:1,196:1},A6c);_.dg=function B6c(){switch(this.g){case 0:return new p6c;case 1:return new K6c;case 2:return new H6c;}return null};var w6c,x6c,y6c;var Z0=tfb(JFe,mBe,455,WI,D6c,C6c);var E6c;feb(1521,1,QAe,H6c);_.Kf=function I6c(a,b){G6c(RD(a,27),b)};var $0=sfb(JFe,'MinSizePostProcessor',1521);feb(1520,1,QAe,K6c);_.Kf=function L6c(a,b){J6c(RD(a,27),b)};var _0=sfb(JFe,'MinSizePreProcessor',1520);var M6c,N6c,O6c,P6c,Q6c,R6c,S6c,T6c,U6c,V6c,W6c;feb(394,22,{3:1,34:1,22:1,394:1},a7c);var Y6c,Z6c,$6c;var a1=tfb(KFe,'OptimizationGoal',394,WI,c7c,b7c);var d7c;feb(867,1,Eye,v7c);_.hf=function w7c(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,LFe),''),'Try box layout first'),'Whether one should check whether the regions are stackable to see whether box layout would do the job. For example, nodes with the same height are not stackable inside a row. Therefore, box layout will perform better and faster.'),(Geb(),false)),(kid(),cid)),QI),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MFe),''),'Current position of a node in the order of nodes'),'The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node.'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,NFe),''),'Desired index of node'),'The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position.'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,OFe),''),'In new Row'),'If set to true this node begins in a new row. Consequently this node cannot be moved in a previous layer during compaction. Width approximation does does not take this into account.'),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,PFe),XFe),'Width Approximation Strategy'),'Strategy for finding an initial width of the drawing.'),s7c),eid),l1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,QFe),XFe),'Target Width'),'Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding.'),-1),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,RFe),XFe),'Optimization Goal'),'Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored.'),q7c),eid),a1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SFe),XFe),'Shift Last Placed.'),'When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces.'),true),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TFe),'packing'),YFe),'Strategy for finding an initial placement on nodes.'),l7c),eid),o1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,UFe),ZFe),'Row Height Reevaluation'),'During the compaction step the height of a row is normally not changed. If this options is set, the blocks of other rows might be added if they exceed the row height. If this is the case the whole row has to be packed again to be optimal regarding the new row height. This option should, therefore, be used with care since it might be computation heavy.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VFe),ZFe),'Compaction iterations'),'Defines the number of compaction iterations. E.g. if set to 2 the width is initially approximated, then the drawing is compacted and based on the resulting drawing the target width is decreased or increased and a second compaction step is executed and the result compared to the first one. The best run is used based on the scale measure.'),sgb(1)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,WFe),'whiteSpaceElimination'),'White Space Approximation Strategy'),'Strategy for expanding nodes such that whitespace in the parent is eliminated.'),eid),t1),xsb(Whd))));Y7c((new Z7c,a))};var f7c,g7c,h7c,i7c,j7c,k7c,l7c,m7c,n7c,o7c,p7c,q7c,r7c,s7c,t7c;var b1=sfb(KFe,'RectPackingMetaDataProvider',867);feb(1016,1,Eye,Z7c);_.hf=function $7c(a){Y7c(a)};var x7c,y7c,z7c,A7c,B7c,C7c,D7c,E7c,F7c,G7c,H7c,I7c,J7c,K7c,L7c,M7c,N7c,O7c,P7c,Q7c,R7c,S7c,T7c,U7c,V7c,W7c;var d1=sfb(KFe,'RectPackingOptions',1016);feb(1017,1,{},_7c);_.sf=function a8c(){var a;return a=new l6c,a};_.tf=function b8c(a){};var c1=sfb(KFe,'RectPackingOptions/RectpackingFactory',1017);feb(1705,1,{},g8c);_.a=0;_.c=false;var e1=sfb(_Fe,'AreaApproximation',1705);var h1=ufb(_Fe,'BestCandidateFilter');feb(673,1,{535:1},h8c);_.Hg=function i8c(a,b,c){var d,e,f,g,h,i;i=new bnb;f=oxe;for(h=new Anb(a);h.a<h.c.c.length;){g=RD(ynb(h),238);f=$wnd.Math.min(f,(g.c+(c.b+c.c))*(g.b+(c.d+c.a)))}for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),238);(d.c+(c.b+c.c))*(d.b+(c.d+c.a))==f&&(ZEb(i.c,d),true)}return i};var f1=sfb(_Fe,'AreaFilter',673);feb(674,1,{535:1},j8c);_.Hg=function k8c(a,b,c){var d,e,f,g,h,i;h=new bnb;i=oxe;for(g=new Anb(a);g.a<g.c.c.length;){f=RD(ynb(g),238);i=$wnd.Math.min(i,$wnd.Math.abs((f.c+(c.b+c.c))/(f.b+(c.d+c.a))-b))}for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),238);$wnd.Math.abs((d.c+(c.b+c.c))/(d.b+(c.d+c.a))-b)==i&&(ZEb(h.c,d),true)}return h};var g1=sfb(_Fe,'AspectRatioFilter',674);feb(1469,1,nEe,o8c);_.rg=function p8c(a){return RD(a,27),null};_.Kf=function q8c(a,b){n8c(RD(a,27),b)};var i1=sfb(_Fe,'GreedyWidthApproximator',1469);feb(672,1,{535:1},r8c);_.Hg=function s8c(a,b,c){var d,e,f,g,h,i;i=new bnb;f=pxe;for(h=new Anb(a);h.a<h.c.c.length;){g=RD(ynb(h),238);f=$wnd.Math.max(f,Aad(g.c+(c.b+c.c),g.b+(c.d+c.a),g.a))}for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),238);Aad(d.c+(c.b+c.c),d.b+(c.d+c.a),d.a)==f&&(ZEb(i.c,d),true)}return i};var j1=sfb(_Fe,'ScaleMeasureFilter',672);feb(1470,1,nEe,u8c);_.rg=function v8c(a){return RD(a,27),null};_.Kf=function w8c(a,b){t8c(RD(a,27),b)};var k1=sfb(_Fe,'TargetWidthWidthApproximator',1470);feb(490,22,{3:1,34:1,22:1,490:1,188:1,196:1},B8c);_.dg=function D8c(){return A8c(this)};_.qg=function C8c(){return A8c(this)};var x8c,y8c;var l1=tfb(_Fe,'WidthApproximationStrategy',490,WI,F8c,E8c);var G8c;feb(1471,1,nEe,R8c);_.rg=function S8c(a){return RD(a,27),null};_.Kf=function T8c(a,b){Q8c(this,RD(a,27),b)};var m1=sfb(aGe,'Compactor',1471);feb(1473,1,nEe,X8c);_.rg=function Y8c(a){return RD(a,27),null};_.Kf=function Z8c(a,b){W8c(RD(a,27),b)};var n1=sfb(aGe,'NoPlacement',1473);feb(439,22,{3:1,34:1,22:1,439:1,188:1,196:1},d9c);_.dg=function f9c(){return c9c(this)};_.qg=function e9c(){return c9c(this)};var $8c,_8c,a9c;var o1=tfb(aGe,'PackingStrategy',439,WI,h9c,g9c);var i9c;feb(810,1,{},m9c);_.a=0;_.b=0;_.c=0;_.d=oxe;_.e=0;_.f=oxe;var p1=sfb(aGe,'RowFillingAndCompaction',810);feb(1472,1,nEe,o9c);_.rg=function p9c(a){return RD(a,27),null};_.Kf=function q9c(a,b){n9c(RD(a,27),b)};var q1=sfb(aGe,'SimplePlacement',1472);feb(1474,1,nEe,s9c);_.rg=function t9c(a){return RD(a,27),null};_.Kf=function u9c(a,b){this.Ig(RD(a,27),b)};_.Ig=function v9c(a,b){r9c(a,b)};var r1=sfb(cGe,'EqualWhitespaceEliminator',1474);feb(1475,1474,nEe,x9c);_.Ig=function y9c(a,b){var c,d,e,f,g;b.Ug('To Aspect Ratio Whitesapce Eliminator',1);g=Kfb(UD(Gxd(a,(X6c(),O6c))));f=Kfb(UD(Gxd(a,N6c)));e=Kfb(UD(Gxd(a,(X7c(),x7c))));c=Kfb(UD(Gxd(a,M6c)));d=g/f;if(d<e){g=f*e;Ixd(a,O6c,g)}else{c+=g/e-f;Ixd(a,M6c,c);Ixd(a,N6c,f+c)}r9c(a,b);b.Vg()};var s1=sfb(cGe,'ToAspectratioNodeExpander',1475);feb(491,22,{3:1,34:1,22:1,491:1,188:1,196:1},D9c);_.dg=function F9c(){return C9c(this)};_.qg=function E9c(){return C9c(this)};var z9c,A9c;var t1=tfb(cGe,'WhiteSpaceEliminationStrategy',491,WI,H9c,G9c);var I9c;feb(172,1,{172:1},V9c);_.a=0;_.c=false;_.d=0;_.e=0;_.f=0;_.g=0;_.i=0;_.k=false;_.o=oxe;_.p=oxe;_.r=0;_.s=0;_.t=0;var w1=sfb(dGe,'Block',172);feb(209,1,{209:1},_9c);_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var u1=sfb(dGe,'BlockRow',209);feb(315,1,{315:1},had);_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;var v1=sfb(dGe,'BlockStack',315);feb(238,1,{238:1},lad,mad);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.g=0;var y1=sfb(dGe,'DrawingData',238);feb(373,22,{3:1,34:1,22:1,373:1},tad);var nad,oad,pad,qad,rad;var x1=tfb(dGe,'DrawingDataDescriptor',373,WI,vad,uad);var wad;feb(186,1,{186:1},Had);_.b=0;_.c=0;_.e=0;_.f=0;var z1=sfb(dGe,'RectRow',186);feb(763,1,{},Pad);_.j=0;var F1=sfb(fGe,dBe,763);feb(1209,1,{},Qad);_.af=function Rad(a){return bjd(a.a,a.b)};var A1=sfb(fGe,Nze,1209);feb(1210,1,{},Sad);_.af=function Tad(a){return Kad(this.a,a)};var B1=sfb(fGe,eBe,1210);feb(1211,1,{},Uad);_.af=function Vad(a){return Lad(this.a,a)};var C1=sfb(fGe,fBe,1211);feb(1212,1,{},Wad);_.af=function Xad(a){return Mad(this.a,a)};var D1=sfb(fGe,'ElkGraphImporter/lambda$3$Type',1212);feb(1213,1,{},Yad);_.af=function Zad(a){return Nad(this.a,a)};var E1=sfb(fGe,gBe,1213);feb(1115,205,oze,$ad);_.rf=function abd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(Hxd(a,(ncd(),mcd))){n=WD(Gxd(a,(Tcd(),Scd)));f=sgd(ygd(),n);if(f){g=RD(ltd(f.f),205);g.rf(a,b.eh(1))}}Ixd(a,hcd,(Mbd(),Kbd));Ixd(a,icd,(Xbd(),Ubd));Ixd(a,jcd,(ldd(),kdd));h=RD(Gxd(a,(Tcd(),Ocd)),17).a;b.Ug('Overlap removal',1);Heb(TD(Gxd(a,Ncd)))&&'null45scanlineOverlaps';i=new _sb;j=new cbd(i);d=new Pad;c=Jad(d,a);k=true;e=0;while(e<h&&k){if(Heb(TD(Gxd(a,Pcd)))){i.a.$b();VQb(new WQb(j),c.i);if(i.a.gc()==0){break}c.e=i}Sed(this.b);Ved(this.b,(gbd(),dbd),(_cd(),$cd));Ved(this.b,ebd,c.g);Ved(this.b,fbd,(Cbd(),Bbd));this.a=Qed(this.b,c);for(m=new Anb(this.a);m.a<m.c.c.length;){l=RD(ynb(m),47);l.Kf(c,b.eh(1))}Oad(d,c);k=Heb(TD(mQb(c,(OQb(),NQb))));++e}Iad(d,c);b.Vg()};var H1=sfb(fGe,'OverlapRemovalLayoutProvider',1115);feb(1116,1,{},cbd);var G1=sfb(fGe,'OverlapRemovalLayoutProvider/lambda$0$Type',1116);feb(444,22,{3:1,34:1,22:1,444:1},hbd);var dbd,ebd,fbd;var I1=tfb(fGe,'SPOrEPhases',444,WI,jbd,ibd);var kbd;feb(1219,1,{},nbd);var K1=sfb(fGe,'ShrinkTree',1219);feb(1117,205,oze,obd);_.rf=function pbd(a,b){var c,d,e,f,g;if(Hxd(a,(ncd(),mcd))){g=WD(Gxd(a,mcd));e=sgd(ygd(),g);if(e){f=RD(ltd(e.f),205);f.rf(a,b.eh(1))}}d=new Pad;c=Jad(d,a);mbd(this.a,c,b.eh(1));Iad(d,c)};var J1=sfb(fGe,'ShrinkTreeLayoutProvider',1117);feb(305,137,{3:1,305:1,96:1,137:1},qbd);_.c=false;var L1=sfb('org.eclipse.elk.alg.spore.graph','Graph',305);feb(489,22,{3:1,34:1,22:1,489:1,188:1,196:1},ubd);_.dg=function wbd(){return tbd(this)};_.qg=function vbd(){return tbd(this)};var rbd;var M1=tfb(gGe,uze,489,WI,ybd,xbd);var zbd;feb(558,22,{3:1,34:1,22:1,558:1,188:1,196:1},Dbd);_.dg=function Fbd(){return new Tdd};_.qg=function Ebd(){return new Tdd};var Bbd;var N1=tfb(gGe,'OverlapRemovalStrategy',558,WI,Hbd,Gbd);var Ibd;feb(438,22,{3:1,34:1,22:1,438:1},Nbd);var Kbd,Lbd;var O1=tfb(gGe,'RootSelection',438,WI,Pbd,Obd);var Qbd;feb(324,22,{3:1,34:1,22:1,324:1},Ybd);var Sbd,Tbd,Ubd,Vbd,Wbd;var P1=tfb(gGe,'SpanningTreeCostFunction',324,WI,$bd,Zbd);var _bd;feb(1014,1,Eye,pcd);_.hf=function qcd(a){ocd(a)};var bcd,ccd,dcd,ecd,fcd,gcd,hcd,icd,jcd,kcd,lcd,mcd;var R1=sfb(gGe,'SporeCompactionOptions',1014);feb(1015,1,{},rcd);_.sf=function scd(){var a;return a=new obd,a};_.tf=function tcd(a){};var Q1=sfb(gGe,'SporeCompactionOptions/SporeCompactionFactory',1015);feb(866,1,Eye,Lcd);_.hf=function Mcd(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,iGe),''),'Underlying Layout Algorithm'),'A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction.'),(kid(),iid)),qJ),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,nGe),'structure'),'Structure Extraction Strategy'),'This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices.'),Icd),eid),V1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,jGe),sGe),'Tree Construction Strategy'),'Whether a minimum spanning tree or a maximum spanning tree should be constructed.'),Gcd),eid),W1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,kGe),sGe),'Cost Function for Spanning Tree'),'The cost function is used in the creation of the spanning tree.'),Ecd),eid),P1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,lGe),sGe),'Root node for spanning tree construction'),'The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen.'),null),iid),qJ),xsb(Whd))));zgd(a,lGe,mGe,Acd);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,mGe),sGe),'Root selection for spanning tree'),'This sets the method used to select a root node for the construction of a spanning tree'),Ccd),eid),O1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,oGe),nDe),YFe),'This option defines how the compaction is applied.'),vcd),eid),M1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,pGe),nDe),'Orthogonal Compaction'),'Restricts the translation of nodes to orthogonal directions in the compaction phase.'),(Geb(),false)),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,qGe),tGe),'Upper limit for iterations of overlap removal'),null),sgb(64)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,rGe),tGe),'Whether to run a supplementary scanline overlap check.'),null),true),cid),QI),xsb(Whd))));Ucd((new Vcd,a));ocd((new pcd,a))};var ucd,vcd,wcd,xcd,ycd,zcd,Acd,Bcd,Ccd,Dcd,Ecd,Fcd,Gcd,Hcd,Icd,Jcd;var S1=sfb(gGe,'SporeMetaDataProvider',866);feb(1012,1,Eye,Vcd);_.hf=function Wcd(a){Ucd(a)};var Ncd,Ocd,Pcd,Qcd,Rcd,Scd;var U1=sfb(gGe,'SporeOverlapRemovalOptions',1012);feb(1013,1,{},Xcd);_.sf=function Ycd(){var a;return a=new $ad,a};_.tf=function Zcd(a){};var T1=sfb(gGe,'SporeOverlapRemovalOptions/SporeOverlapFactory',1013);feb(539,22,{3:1,34:1,22:1,539:1,188:1,196:1},cdd);_.dg=function edd(){return bdd(this)};_.qg=function ddd(){return bdd(this)};var $cd;var V1=tfb(gGe,'StructureExtractionStrategy',539,WI,gdd,fdd);var hdd;feb(437,22,{3:1,34:1,22:1,437:1,188:1,196:1},ndd);_.dg=function pdd(){return mdd(this)};_.qg=function odd(){return mdd(this)};var jdd,kdd;var W1=tfb(gGe,'TreeConstructionStrategy',437,WI,rdd,qdd);var sdd;feb(1463,1,nEe,vdd);_.rg=function wdd(a){return RD(a,305),new ufd};_.Kf=function xdd(a,b){udd(RD(a,305),b)};var Y1=sfb(vGe,'DelaunayTriangulationPhase',1463);feb(1464,1,Qve,ydd);_.Cd=function zdd(a){Rmb(this.a,RD(a,68).a)};var X1=sfb(vGe,'DelaunayTriangulationPhase/lambda$0$Type',1464);feb(794,1,nEe,Ddd);_.rg=function Edd(a){return RD(a,305),new ufd};_.Kf=function Fdd(a,b){this.Jg(RD(a,305),b)};_.Jg=function Gdd(a,b){var c,d,e;b.Ug('Minimum spanning tree construction',1);a.d?(d=a.d.a):(d=RD(Vmb(a.i,0),68).a);Heb(TD(mQb(a,(OQb(),MQb))))?(e=LFb(a.e,d,(c=a.b,c))):(e=LFb(a.e,d,a.b));Bdd(this,e,a);b.Vg()};var a2=sfb(wGe,'MinSTPhase',794);feb(1466,794,nEe,Hdd);_.Jg=function Jdd(a,b){var c,d,e,f;b.Ug('Maximum spanning tree construction',1);c=new Kdd(a);a.d?(e=a.d.c):(e=RD(Vmb(a.i,0),68).c);Heb(TD(mQb(a,(OQb(),MQb))))?(f=LFb(a.e,e,(d=c,d))):(f=LFb(a.e,e,c));Bdd(this,f,a);b.Vg()};var $1=sfb(wGe,'MaxSTPhase',1466);feb(1467,1,{},Kdd);_.af=function Ldd(a){return Idd(this.a,a)};var Z1=sfb(wGe,'MaxSTPhase/lambda$0$Type',1467);feb(1465,1,Qve,Mdd);_.Cd=function Ndd(a){Cdd(this.a,RD(a,68))};var _1=sfb(wGe,'MinSTPhase/lambda$0$Type',1465);feb(796,1,nEe,Tdd);_.rg=function Udd(a){return RD(a,305),new ufd};_.Kf=function Vdd(a,b){Sdd(this,RD(a,305),b)};_.a=false;var c2=sfb(xGe,'GrowTreePhase',796);feb(797,1,Qve,Wdd);_.Cd=function Xdd(a){Rdd(this.a,this.b,this.c,RD(a,225))};var b2=sfb(xGe,'GrowTreePhase/lambda$0$Type',797);feb(1468,1,nEe,_dd);_.rg=function aed(a){return RD(a,305),new ufd};_.Kf=function bed(a,b){$dd(this,RD(a,305),b)};var e2=sfb(xGe,'ShrinkTreeCompactionPhase',1468);feb(795,1,Qve,ced);_.Cd=function ded(a){Zdd(this.a,this.b,this.c,RD(a,225))};var d2=sfb(xGe,'ShrinkTreeCompactionPhase/lambda$0$Type',795);var j4=ufb(jEe,'IGraphElementVisitor');feb(872,1,{536:1},med);_.Kg=function ped(a){var b;b=led(this,a);kQb(b,RD(Wjb(this.b,a),96));jed(this,a,b)};var eed,fed,ged;var l2=sfb(pze,'LayoutConfigurator',872);var g2=ufb(pze,'LayoutConfigurator/IPropertyHolderOptionFilter');feb(944,1,{2032:1},qed);_.Lg=function red(a,b){return hed(),!a.pf(b)};var h2=sfb(pze,'LayoutConfigurator/lambda$0$Type',944);feb(943,1,{845:1},sed);_.Mg=function ted(a,b){return hed(),!a.pf(b)};var i2=sfb(pze,'LayoutConfigurator/lambda$1$Type',943);feb(945,1,{2032:1},ved);_.Lg=function wed(a,b){return ued(a,b)};var j2=sfb(pze,'LayoutConfigurator/lambda$2$Type',945);feb(946,1,nwe,xed);_.Mb=function yed(a){return oed(this.a,this.b,RD(a,2032))};var k2=sfb(pze,'LayoutConfigurator/lambda$3$Type',946);feb(869,1,{},Hed);var m2=sfb(pze,'RecursiveGraphLayoutEngine',869);feb(224,63,swe,Ied,Jed);var n2=sfb(pze,'UnsupportedConfigurationException',224);feb(370,63,swe,Ked);var o2=sfb(pze,'UnsupportedGraphException',370);feb(761,1,{});var N3=sfb(jEe,'AbstractRandomListAccessor',761);feb(449,761,{},Wed);_.Ng=function Yed(){return null};_.d=true;_.e=true;_.f=0;var u2=sfb(AGe,'AlgorithmAssembler',449);feb(1200,1,nwe,Zed);_.Mb=function $ed(a){return !!RD(a,106)};var p2=sfb(AGe,'AlgorithmAssembler/lambda$0$Type',1200);feb(1201,1,{},_ed);_.Kb=function afd(a){return Xed(this.a,RD(a,106))};var q2=sfb(AGe,'AlgorithmAssembler/lambda$1$Type',1201);feb(1202,1,nwe,bfd);_.Mb=function cfd(a){return !!RD(a,80)};var r2=sfb(AGe,'AlgorithmAssembler/lambda$2$Type',1202);feb(1203,1,Qve,dfd);_.Cd=function efd(a){ofd(this.a,RD(a,80))};var s2=sfb(AGe,'AlgorithmAssembler/lambda$3$Type',1203);feb(1204,1,Qve,ffd);_.Cd=function gfd(a){Red(this.a,this.b,RD(a,196))};var t2=sfb(AGe,'AlgorithmAssembler/lambda$4$Type',1204);feb(1343,1,fye,ifd);_.Ne=function jfd(a,b){return hfd(RD(a,196),RD(b,196))};_.Fb=function kfd(a){return this===a};_.Oe=function lfd(){return new Frb(this)};var v2=sfb(AGe,'EnumBasedFactoryComparator',1343);feb(80,761,{80:1},ufd);_.Ng=function wfd(){return new _sb};_.a=0;var w2=sfb(AGe,'LayoutProcessorConfiguration',80);feb(1025,1,{536:1},Bfd);_.Kg=function Ffd(a){Bvb(yfd,new Kfd(a))};var xfd,yfd,zfd;var A2=sfb(zye,'DeprecatedLayoutOptionReplacer',1025);feb(1026,1,Qve,Gfd);_.Cd=function Hfd(a){Cfd(RD(a,167))};var x2=sfb(zye,'DeprecatedLayoutOptionReplacer/lambda$0$Type',1026);feb(1027,1,Qve,Ifd);_.Cd=function Jfd(a){Dfd(RD(a,167))};var y2=sfb(zye,'DeprecatedLayoutOptionReplacer/lambda$1$Type',1027);feb(1028,1,{},Kfd);_.Yd=function Lfd(a,b){Efd(this.a,RD(a,149),RD(b,41))};var z2=sfb(zye,'DeprecatedLayoutOptionReplacer/lambda$2$Type',1028);feb(143,1,{701:1,143:1},Pfd);_.Fb=function Qfd(a){return Nfd(this,a)};_.Og=function Rfd(){return this.b};_.Pg=function Sfd(){return this.c};_.xe=function Tfd(){return this.e};_.Hb=function Ufd(){return ohb(this.c)};_.Ib=function Vfd(){return 'Layout Algorithm: '+this.c};var D2=sfb(zye,'LayoutAlgorithmData',143);feb(269,1,{},agd);var C2=sfb(zye,'LayoutAlgorithmData/Builder',269);feb(1029,1,{536:1},dgd);_.Kg=function egd(a){ZD(a,207)&&!Heb(TD(a.of((umd(),rld))))&&bgd(RD(a,27))};var E2=sfb(zye,'LayoutAlgorithmResolver',1029);feb(233,1,{701:1,233:1},fgd);_.Fb=function ggd(a){if(ZD(a,233)){return lhb(this.b,RD(a,233).b)}return false};_.Og=function hgd(){return this.a};_.Pg=function igd(){return this.b};_.xe=function jgd(){return this.d};_.Hb=function kgd(){return ohb(this.b)};_.Ib=function lgd(){return 'Layout Type: '+this.b};var G2=sfb(zye,'LayoutCategoryData',233);feb(357,1,{},pgd);var F2=sfb(zye,'LayoutCategoryData/Builder',357);feb(879,1,{},xgd);var qgd;var b3=sfb(zye,'LayoutMetaDataService',879);feb(880,1,{},Ggd);var I2=sfb(zye,'LayoutMetaDataService/Registry',880);feb(486,1,{486:1},Hgd);var H2=sfb(zye,'LayoutMetaDataService/Registry/Triple',486);feb(881,1,BGe,Igd);_.Qg=function Jgd(){return new pjd};var J2=sfb(zye,'LayoutMetaDataService/lambda$0$Type',881);feb(882,1,CGe,Kgd);_.Rg=function Lgd(a){return ajd(RD(a,8))};var K2=sfb(zye,'LayoutMetaDataService/lambda$1$Type',882);feb(891,1,BGe,Mgd);_.Qg=function Ngd(){return new bnb};var L2=sfb(zye,'LayoutMetaDataService/lambda$10$Type',891);feb(892,1,CGe,Ogd);_.Rg=function Pgd(a){return new dnb(RD(a,13))};var M2=sfb(zye,'LayoutMetaDataService/lambda$11$Type',892);feb(893,1,BGe,Qgd);_.Qg=function Rgd(){return new Yub};var N2=sfb(zye,'LayoutMetaDataService/lambda$12$Type',893);feb(894,1,CGe,Sgd);_.Rg=function Tgd(a){return gv(RD(a,67))};var O2=sfb(zye,'LayoutMetaDataService/lambda$13$Type',894);feb(895,1,BGe,Ugd);_.Qg=function Vgd(){return new _sb};var P2=sfb(zye,'LayoutMetaDataService/lambda$14$Type',895);feb(896,1,CGe,Wgd);_.Rg=function Xgd(a){return Ux(RD(a,49))};var Q2=sfb(zye,'LayoutMetaDataService/lambda$15$Type',896);feb(897,1,BGe,Ygd);_.Qg=function Zgd(){return new Iub};var R2=sfb(zye,'LayoutMetaDataService/lambda$16$Type',897);feb(898,1,CGe,$gd);_.Rg=function _gd(a){return Xx(RD(a,49))};var S2=sfb(zye,'LayoutMetaDataService/lambda$17$Type',898);feb(899,1,BGe,ahd);_.Qg=function bhd(){return new xAb};var T2=sfb(zye,'LayoutMetaDataService/lambda$18$Type',899);feb(900,1,CGe,chd);_.Rg=function dhd(a){return Yx(RD(a,157))};var U2=sfb(zye,'LayoutMetaDataService/lambda$19$Type',900);feb(883,1,BGe,ehd);_.Qg=function fhd(){return new Ejd};var V2=sfb(zye,'LayoutMetaDataService/lambda$2$Type',883);feb(884,1,CGe,ghd);_.Rg=function hhd(a){return new Fjd(RD(a,75))};var W2=sfb(zye,'LayoutMetaDataService/lambda$3$Type',884);feb(885,1,BGe,ihd);_.Qg=function jhd(){return new P2b};var X2=sfb(zye,'LayoutMetaDataService/lambda$4$Type',885);feb(886,1,CGe,khd);_.Rg=function lhd(a){return new S2b(RD(a,140))};var Y2=sfb(zye,'LayoutMetaDataService/lambda$5$Type',886);feb(887,1,BGe,mhd);_.Qg=function nhd(){return new z3b};var Z2=sfb(zye,'LayoutMetaDataService/lambda$6$Type',887);feb(888,1,CGe,ohd);_.Rg=function phd(a){return new B3b(RD(a,107))};var $2=sfb(zye,'LayoutMetaDataService/lambda$7$Type',888);feb(889,1,BGe,qhd);_.Qg=function rhd(){return new dtd};var _2=sfb(zye,'LayoutMetaDataService/lambda$8$Type',889);feb(890,1,CGe,shd);_.Rg=function thd(a){return new etd(RD(a,385))};var a3=sfb(zye,'LayoutMetaDataService/lambda$9$Type',890);var V5=ufb(jze,'IProperty');feb(23,1,{34:1,701:1,23:1,149:1},Ahd);_.Fd=function Bhd(a){return vhd(this,RD(a,149))};_.Fb=function Chd(a){return ZD(a,23)?lhb(this.f,RD(a,23).f):ZD(a,149)&&lhb(this.f,RD(a,149).Pg())};_.Sg=function Dhd(){var a;if(ZD(this.b,4)){a=FId(this.b);if(a==null){throw Adb(new dgb(HGe+this.f+"'. "+"Make sure it's type is registered with the "+(lfb(b6),b6.k)+EGe))}return a}else{return this.b}};_.Og=function Ehd(){return this.d};_.Pg=function Fhd(){return this.f};_.xe=function Ghd(){return this.i};_.Hb=function Hhd(){return ohb(this.f)};_.Ib=function Ihd(){return 'Layout Option: '+this.f};var f3=sfb(zye,'LayoutOptionData',23);feb(24,1,{},Shd);var c3=sfb(zye,'LayoutOptionData/Builder',24);feb(170,22,{3:1,34:1,22:1,170:1},Zhd);var Thd,Uhd,Vhd,Whd,Xhd;var d3=tfb(zye,'LayoutOptionData/Target',170,WI,_hd,$hd);var aid;feb(285,22,{3:1,34:1,22:1,285:1},lid);var cid,did,eid,fid,gid,hid,iid,jid;var e3=tfb(zye,'LayoutOptionData/Type',285,WI,nid,mid);var oid;var qid;var sid;feb(116,1,{116:1},Tid,Uid,Vid);_.Fb=function Wid(a){var b;if(a==null||!ZD(a,116)){return false}b=RD(a,116);return Fvb(this.c,b.c)&&Fvb(this.d,b.d)&&Fvb(this.b,b.b)&&Fvb(this.a,b.a)};_.Hb=function Xid(){return Tnb(cD(WC(jJ,1),rve,1,5,[this.c,this.d,this.b,this.a]))};_.Ib=function Yid(){return 'Rect[x='+this.c+',y='+this.d+',w='+this.b+',h='+this.a+']'};_.a=0;_.b=0;_.c=0;_.d=0;var j3=sfb(_Ae,'ElkRectangle',116);feb(8,1,{3:1,4:1,8:1,423:1},pjd,qjd,rjd,sjd);_.Fb=function tjd(a){return djd(this,a)};_.Hb=function ujd(){return Nfb(this.a)+pgb(Nfb(this.b))};_.cg=function wjd(b){var c,d,e,f;e=0;while(e<b.length&&vjd((BFb(e,b.length),b.charCodeAt(e)),YAe)){++e}c=b.length;while(c>0&&vjd((BFb(c-1,b.length),b.charCodeAt(c-1)),ZAe)){--c}if(e>=c){throw Adb(new agb('The given string does not contain any numbers.'))}f=vhb((AFb(e,c,b.length),b.substr(e,c-e)),',|;|\r|\n');if(f.length!=2){throw Adb(new agb('Exactly two numbers are expected, '+f.length+' were found.'))}try{this.a=Neb(Dhb(f[0]));this.b=Neb(Dhb(f[1]))}catch(a){a=zdb(a);if(ZD(a,130)){d=a;throw Adb(new agb($Ae+d))}else throw Adb(a)}};_.Ib=function yjd(){return '('+this.a+','+this.b+')'};_.a=0;_.b=0;var l3=sfb(_Ae,'KVector',8);feb(75,67,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1,75:1,423:1},Ejd,Fjd,Gjd);_.Pc=function Jjd(){return Djd(this)};_.cg=function Hjd(b){var c,d,e,f,g,h;e=vhb(b,',|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n');Xub(this);try{d=0;g=0;f=0;h=0;while(d<e.length){if(e[d]!=null&&Dhb(e[d]).length>0){g%2==0?(f=Neb(e[d])):(h=Neb(e[d]));g>0&&g%2!=0&&Mub(this,new rjd(f,h));++g}++d}}catch(a){a=zdb(a);if(ZD(a,130)){c=a;throw Adb(new agb('The given string does not match the expected format for vectors.'+c))}else throw Adb(a)}};_.Ib=function Kjd(){var a,b,c;a=new dib('(');b=Sub(this,0);while(b.b!=b.d.c){c=RD(evb(b),8);Zhb(a,c.a+','+c.b);b.b!=b.d.c&&(a.a+='; ',a)}return (a.a+=')',a).a};var k3=sfb(_Ae,'KVectorChain',75);feb(255,22,{3:1,34:1,22:1,255:1},Sjd);var Ljd,Mjd,Njd,Ojd,Pjd,Qjd;var n3=tfb(JGe,'Alignment',255,WI,Ujd,Tjd);var Vjd;feb(991,1,Eye,jkd);_.hf=function kkd(a){ikd(a)};var Xjd,Yjd,Zjd,$jd,_jd,akd,bkd,ckd,dkd,ekd,fkd,gkd;var p3=sfb(JGe,'BoxLayouterOptions',991);feb(992,1,{},lkd);_.sf=function mkd(){var a;return a=new jrd,a};_.tf=function nkd(a){};var o3=sfb(JGe,'BoxLayouterOptions/BoxFactory',992);feb(297,22,{3:1,34:1,22:1,297:1},vkd);var okd,pkd,qkd,rkd,skd,tkd;var q3=tfb(JGe,'ContentAlignment',297,WI,xkd,wkd);var ykd;feb(699,1,Eye,vmd);_.hf=function wmd(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,OGe),''),'Layout Algorithm'),'Select a specific layout algorithm.'),(kid(),iid)),qJ),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,PGe),''),'Resolved Layout Algorithm'),'Meta data associated with the selected algorithm.'),hid),D2),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MDe),''),'Alignment'),'Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm.'),Ckd),eid),n3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,Dze),''),'Aspect Ratio'),'The desired aspect ratio of the drawing, that is the quotient of width by height.'),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,QGe),''),'Bend Points'),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),hid),k3),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,YDe),''),'Content Alignment'),'Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option.'),Lkd),fid),q3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,LDe),''),'Debug Mode'),'Whether additional debug information shall be generated.'),(Geb(),false)),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,PDe),''),eze),'Overall direction of edges: horizontal (right / left) or vertical (down / up).'),Okd),eid),s3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,kDe),''),'Edge Routing'),'What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline.'),Tkd),eid),u3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MGe),''),'Expand Nodes'),'If active, nodes are expanded to fill the area of their parent.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,fDe),''),'Hierarchy Handling'),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),Ykd),eid),y3),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Eze),''),'Padding'),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),uld),hid),i3),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,dAe),''),'Interactive'),'Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,iEe),''),'interactive Layout'),'Whether the graph should be changeable interactively and by setting constraints'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,gAe),''),'Omit Node Micro Layout'),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,eAe),''),'Port Constraints'),'Defines constraints of the position of the ports of a node.'),Ild),eid),C3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,fEe),''),'Position'),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),hid),l3),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Xhd,Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,$ze),''),'Priority'),'Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used.'),gid),bJ),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Thd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,bAe),''),'Randomization Seed'),'Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time).'),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,cAe),''),'Separate Connected Components'),'Whether each connected component should be processed separately.'),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ZDe),''),'Junction Points'),'This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order.'),dld),hid),k3),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aEe),''),'Comment Box'),'Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related.'),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,bEe),''),'Hypernode'),'Whether the node should be handled as a hypernode.'),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,RGe),''),'Label Manager'),"Label managers can shorten labels upon a layout algorithm's request."),hid),g3),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,gEe),''),'Margins'),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),fld),hid),h3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,JDe),''),'No Layout'),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),false),cid),QI),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Thd,Xhd,Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SGe),''),'Scale Factor'),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),did),VI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,TGe),''),'Child Area Width'),'The width of the area occupied by the laid out children of a node.'),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,UGe),''),'Child Area Height'),'The height of the area occupied by the laid out children of a node.'),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,mAe),''),yGe),"Turns topdown layout on and off. If this option is enabled, hierarchical layout will be computed first for the root node and then for its children recursively. Layouts are then scaled down to fit the area provided by their parents. Graphs must follow a certain structure for topdown layout to work properly. {@link TopdownNodeTypes.PARALLEL_NODE} nodes must have children of type {@link TopdownNodeTypes.HIERARCHICAL_NODE} and must define {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} for their children. Furthermore they need to be laid out using an algorithm that is a {@link TopdownLayoutProvider}. Hierarchical nodes can also be parents of other hierarchical nodes and can optionally use a {@link TopdownSizeApproximator} to dynamically set sizes during topdown layout. In this case {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} should be set on the node itself rather than the parent. The values are then used by the size approximator as base values. Hierarchical nodes require the layout option {@link nodeSize.fixedGraphSize} to be true to prevent the algorithm used there from resizing the hierarchical node. This option is not supported if 'Hierarchy Handling' is set to 'INCLUDE_CHILDREN'"),false),cid),QI),xsb(Whd))));zgd(a,mAe,qAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VGe),''),'Animate'),'Whether the shift from the old layout to the new computed layout shall be animated.'),true),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,WGe),''),'Animation Time Factor'),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),sgb(100)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,XGe),''),'Layout Ancestors'),'Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,YGe),''),'Maximal Animation Time'),'The maximal time for animations, in milliseconds.'),sgb(4000)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ZGe),''),'Minimal Animation Time'),'The minimal time for animations, in milliseconds.'),sgb(400)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,$Ge),''),'Progress Bar'),'Whether a progress bar shall be displayed during layout computations.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,_Ge),''),'Validate Graph'),'Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aHe),''),'Validate Options'),'Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),true),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,bHe),''),'Zoom to Fit'),'Whether the zoom level shall be set to view the whole diagram after layout.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,NGe),'box'),'Box Layout Mode'),'Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better.'),Gkd),eid),R3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,xDe),lDe),'Comment Comment Spacing'),'Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing.'),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,yDe),lDe),'Comment Node Spacing'),'Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing.'),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Bze),lDe),'Components Spacing'),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,zDe),lDe),'Edge Spacing'),'Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines.'),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aAe),lDe),'Edge Label Spacing'),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ADe),lDe),'Edge Node Spacing'),'Spacing to be preserved between nodes and edges.'),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,BDe),lDe),'Label Spacing'),'Determines the amount of space to be left between two labels of the same graph element.'),0),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,EDe),lDe),'Label Node Spacing'),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,CDe),lDe),'Horizontal spacing between Label and Port'),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,DDe),lDe),'Vertical spacing between Label and Port'),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,_ze),lDe),'Node Spacing'),'The minimal distance to be preserved between each two nodes.'),20),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,FDe),lDe),'Node Self Loop Spacing'),'Spacing to be preserved between a node and its self loops.'),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,GDe),lDe),'Port Spacing'),'Spacing between pairs of ports of the same node.'),10),did),VI),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,HDe),lDe),'Individual Spacing'),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),hid),l4),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Thd,Xhd,Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,hEe),lDe),'Additional Port Space'),'Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border.'),imd),hid),h3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,eEe),hHe),'Layout Partition'),'Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction).'),gid),bJ),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));zgd(a,eEe,dEe,yld);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,dEe),hHe),'Layout Partitioning'),'Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle.'),wld),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,QDe),iHe),'Node Label Padding'),'Define padding for node labels that are placed inside of a node.'),hld),hid),i3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,kAe),iHe),'Node Label Placement'),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),jld),fid),A3),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TDe),jHe),'Port Alignment'),'Defines the default port distribution for a node. May be overridden for each side individually.'),Ald),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,UDe),jHe),'Port Alignment (North)'),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,VDe),jHe),'Port Alignment (South)'),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,WDe),jHe),'Port Alignment (West)'),"Defines how ports on the western side are placed, overriding the node's general port alignment."),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,XDe),jHe),'Port Alignment (East)'),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,jAe),kHe),'Node Size Constraints'),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),lld),fid),H3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,iAe),kHe),'Node Size Options'),'Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications.'),qld),fid),I3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,CAe),kHe),'Node Size Minimum'),'The minimal size to which a node can be reduced.'),old),hid),l3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,hAe),kHe),'Fixed Graph Size'),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,$De),vDe),'Edge Label Placement'),'Gives a hint on where to put edge labels.'),Rkd),eid),t3),xsb(Uhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,fAe),vDe),'Inline Edge Labels'),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),false),cid),QI),xsb(Uhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,cHe),'font'),'Font Name'),'Font name used for a label.'),iid),qJ),xsb(Uhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,dHe),'font'),'Font Size'),'Font size used for a label.'),gid),bJ),xsb(Uhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,cEe),lHe),'Port Anchor Offset'),'The offset to the port position where connections shall be attached.'),hid),l3),xsb(Xhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,_De),lHe),'Port Index'),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),gid),bJ),xsb(Xhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,KDe),lHe),'Port Side'),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),Pld),eid),E3),xsb(Xhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,IDe),lHe),'Port Border Offset'),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),did),VI),xsb(Xhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,lAe),mHe),'Port Label Placement'),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),Mld),fid),D3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,RDe),mHe),'Port Labels Next to Port'),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SDe),mHe),'Treat Port Labels as Group'),'If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port.'),true),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,nAe),nHe),'Topdown Scale Factor'),"The scaling factor to be applied to the nodes laid out within the node in recursive topdown layout. The difference to 'Scale Factor' is that the node itself is not scaled. This value has to be set on hierarchical nodes."),1),did),VI),xsb(Whd))));zgd(a,nAe,qAe,rmd);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,eHe),nHe),'Topdown Size Approximator'),'The size approximator to be used to set sizes of hierarchical nodes during topdown layout. The default value is null, which results in nodes keeping whatever size is defined for them e.g. through parent parallel node or by manually setting the size.'),null),eid),M3),xsb(Vhd))));zgd(a,eHe,qAe,tmd);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,oAe),nHe),'Topdown Hierarchical Node Width'),'The fixed size of a hierarchical node when using topdown layout. If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself.'),150),did),VI),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));zgd(a,oAe,qAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,pAe),nHe),'Topdown Hierarchical Node Aspect Ratio'),'The fixed aspect ratio of a hierarchical node when using topdown layout. Default is 1/sqrt(2). If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself.'),1.414),did),VI),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));zgd(a,pAe,qAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,qAe),nHe),'Topdown Node Type'),'The different node types used for topdown layout. If the node type is set to {@link TopdownNodeTypes.PARALLEL_NODE} the algorithm must be set to a {@link TopdownLayoutProvider} such as {@link TopdownPacking}. The {@link nodeSize.fixedGraphSize} option is technically only required for hierarchical nodes.'),null),eid),J3),xsb(Vhd))));zgd(a,qAe,hAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,fHe),nHe),'Topdown Scale Cap'),'Determines the upper limit for the topdown scale factor. The default value is 1.0 which ensures that nested children never end up appearing larger than their parents in terms of unit sizes such as the font size. If the limit is larger, nodes will fully utilize the available space, but it is counteriniuitive for inner nodes to have a larger scale than outer nodes.'),1),did),VI),xsb(Whd))));zgd(a,fHe,qAe,pmd);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,NDe),oHe),'Activate Inside Self Loops'),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ODe),oHe),'Inside Self Loop'),'Whether a self loop should be routed inside a node instead of around that node.'),false),cid),QI),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Cze),'edge'),'Edge Thickness'),'The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it.'),1),did),VI),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,gHe),'edge'),'Edge Type'),'The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations.'),Vkd),eid),v3),xsb(Thd))));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,sxe),'Layered'),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,'org.eclipse.elk.orthogonal'),'Orthogonal'),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,Zze),'Force'),'Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,'org.eclipse.elk.circle'),'Circle'),'Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,$Ee),'Tree'),'Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,'org.eclipse.elk.planar'),'Planar'),'Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,CFe),'Radial'),'Radial layout algorithms usually position the nodes of the graph on concentric circles.')));wnd((new xnd,a));ikd((new jkd,a));Gpd((new Hpd,a))};var Akd,Bkd,Ckd,Dkd,Ekd,Fkd,Gkd,Hkd,Ikd,Jkd,Kkd,Lkd,Mkd,Nkd,Okd,Pkd,Qkd,Rkd,Skd,Tkd,Ukd,Vkd,Wkd,Xkd,Ykd,Zkd,$kd,_kd,ald,bld,cld,dld,eld,fld,gld,hld,ild,jld,kld,lld,mld,nld,old,pld,qld,rld,sld,tld,uld,vld,wld,xld,yld,zld,Ald,Bld,Cld,Dld,Eld,Fld,Gld,Hld,Ild,Jld,Kld,Lld,Mld,Nld,Old,Pld,Qld,Rld,Sld,Tld,Uld,Vld,Wld,Xld,Yld,Zld,$ld,_ld,amd,bmd,cmd,dmd,emd,fmd,gmd,hmd,imd,jmd,kmd,lmd,mmd,nmd,omd,pmd,qmd,rmd,smd,tmd;var r3=sfb(JGe,'CoreOptions',699);feb(88,22,{3:1,34:1,22:1,88:1},Gmd);var xmd,ymd,zmd,Amd,Bmd;var s3=tfb(JGe,eze,88,WI,Imd,Hmd);var Jmd;feb(278,22,{3:1,34:1,22:1,278:1},Pmd);var Lmd,Mmd,Nmd;var t3=tfb(JGe,'EdgeLabelPlacement',278,WI,Rmd,Qmd);var Smd;feb(223,22,{3:1,34:1,22:1,223:1},Zmd);var Umd,Vmd,Wmd,Xmd;var u3=tfb(JGe,'EdgeRouting',223,WI,_md,$md);var and;feb(321,22,{3:1,34:1,22:1,321:1},jnd);var cnd,dnd,end,fnd,gnd,hnd;var v3=tfb(JGe,'EdgeType',321,WI,lnd,knd);var mnd;feb(989,1,Eye,xnd);_.hf=function ynd(a){wnd(a)};var ond,pnd,qnd,rnd,snd,tnd,und;var x3=sfb(JGe,'FixedLayouterOptions',989);feb(990,1,{},znd);_.sf=function And(){var a;return a=new btd,a};_.tf=function Bnd(a){};var w3=sfb(JGe,'FixedLayouterOptions/FixedFactory',990);feb(346,22,{3:1,34:1,22:1,346:1},Gnd);var Cnd,Dnd,End;var y3=tfb(JGe,'HierarchyHandling',346,WI,Ind,Hnd);var Jnd;feb(290,22,{3:1,34:1,22:1,290:1},Rnd);var Lnd,Mnd,Nnd,Ond;var z3=tfb(JGe,'LabelSide',290,WI,Tnd,Snd);var Und;feb(95,22,{3:1,34:1,22:1,95:1},eod);var Wnd,Xnd,Ynd,Znd,$nd,_nd,aod,bod,cod;var A3=tfb(JGe,'NodeLabelPlacement',95,WI,hod,god);var iod;feb(256,22,{3:1,34:1,22:1,256:1},qod);var kod,lod,mod,nod,ood;var B3=tfb(JGe,'PortAlignment',256,WI,sod,rod);var tod;feb(101,22,{3:1,34:1,22:1,101:1},Eod);var vod,wod,xod,yod,zod,Aod;var C3=tfb(JGe,'PortConstraints',101,WI,God,Fod);var Hod;feb(279,22,{3:1,34:1,22:1,279:1},Qod);var Jod,Kod,Lod,Mod,Nod,Ood;var D3=tfb(JGe,'PortLabelPlacement',279,WI,Uod,Tod);var Vod;feb(64,22,{3:1,34:1,22:1,64:1},upd);var Xod,Yod,Zod,$od,_od,apd,bpd,cpd,dpd,epd,fpd,gpd,hpd,ipd,jpd,kpd,lpd,mpd,npd,opd,ppd;var E3=tfb(JGe,'PortSide',64,WI,xpd,wpd);var ypd;feb(993,1,Eye,Hpd);_.hf=function Ipd(a){Gpd(a)};var Apd,Bpd,Cpd,Dpd,Epd;var G3=sfb(JGe,'RandomLayouterOptions',993);feb(994,1,{},Jpd);_.sf=function Kpd(){var a;return a=new eud,a};_.tf=function Lpd(a){};var F3=sfb(JGe,'RandomLayouterOptions/RandomFactory',994);feb(386,22,{3:1,34:1,22:1,386:1},Rpd);var Mpd,Npd,Opd,Ppd;var H3=tfb(JGe,'SizeConstraint',386,WI,Tpd,Spd);var Upd;feb(264,22,{3:1,34:1,22:1,264:1},eqd);var Wpd,Xpd,Ypd,Zpd,$pd,_pd,aqd,bqd,cqd;var I3=tfb(JGe,'SizeOptions',264,WI,gqd,fqd);var hqd;feb(280,22,{3:1,34:1,22:1,280:1},nqd);var jqd,kqd,lqd;var J3=tfb(JGe,'TopdownNodeTypes',280,WI,pqd,oqd);var qqd;feb(347,22,rHe);var sqd,tqd;var M3=tfb(JGe,'TopdownSizeApproximator',347,WI,xqd,wqd);feb(987,347,rHe,zqd);_.Tg=function Aqd(a){return yqd(a)};var K3=tfb(JGe,'TopdownSizeApproximator/1',987,M3,null,null);feb(988,347,rHe,Bqd);_.Tg=function Cqd(b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;c=RD(Gxd(b,(umd(),Tld)),143);A=(bvd(),o=new ACd,o);zxd(A,b);B=new Tsb;for(g=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));g.e!=g.i.gc();){e=RD(bMd(g),27);t=(n=new ACd,n);yCd(t,A);zxd(t,e);D=yqd(e);zyd(t,$wnd.Math.max(e.g,D.a),$wnd.Math.max(e.f,D.b));rtb(B.f,e,t)}for(f=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));f.e!=f.i.gc();){e=RD(bMd(f),27);for(l=new dMd((!e.e&&(e.e=new Yie(G4,e,7,4)),e.e));l.e!=l.i.gc();){k=RD(bMd(l),74);v=RD(Wd(qtb(B.f,e)),27);w=RD(Wjb(B,QHd((!k.c&&(k.c=new Yie(E4,k,5,8)),k.c),0)),27);u=(m=new rzd,m);WGd((!u.b&&(u.b=new Yie(E4,u,4,7)),u.b),v);WGd((!u.c&&(u.c=new Yie(E4,u,5,8)),u.c),w);pzd(u,vCd(v));zxd(u,k)}}q=RD(ltd(c.f),205);try{q.rf(A,new ztd);mtd(c.f,q)}catch(a){a=zdb(a);if(ZD(a,103)){p=a;throw Adb(p)}else throw Adb(a)}Hxd(A,Ikd)||Hxd(A,Hkd)||psd(A);j=Kfb(UD(Gxd(A,Ikd)));i=Kfb(UD(Gxd(A,Hkd)));h=j/i;d=Kfb(UD(Gxd(A,lmd)))*$wnd.Math.sqrt((!A.a&&(A.a=new C5d(J4,A,10,11)),A.a).i);C=RD(Gxd(A,tld),107);s=C.b+C.c+1;r=C.d+C.a+1;return new rjd($wnd.Math.max(s,d),$wnd.Math.max(r,d/h))};var L3=tfb(JGe,'TopdownSizeApproximator/2',988,M3,null,null);var Dqd;feb(344,1,{871:1},Oqd);_.Ug=function Pqd(a,b){return Fqd(this,a,b)};_.Vg=function Qqd(){Hqd(this)};_.Wg=function Rqd(){return this.q};_.Xg=function Sqd(){return !this.f?null:Hob(this.f)};_.Yg=function Tqd(){return Hob(this.a)};_.Zg=function Uqd(){return this.p};_.$g=function Vqd(){return false};_._g=function Wqd(){return this.n};_.ah=function Xqd(){return this.p!=null&&!this.b};_.bh=function Yqd(a){var b;if(this.n){b=a;Rmb(this.f,b)}};_.dh=function Zqd(a,b){var c,d;this.n&&!!a&&Jqd(this,(c=new Zje,d=Rje(c,a),Yje(c),d),(ttd(),qtd))};_.eh=function $qd(a){var b;if(this.b){return null}else{b=Gqd(this,this.g);Mub(this.a,b);b.i=this;this.d=a;return b}};_.fh=function _qd(a){a>0&&!this.b&&Iqd(this,a)};_.b=false;_.c=0;_.d=-1;_.e=null;_.f=null;_.g=-1;_.j=false;_.k=false;_.n=false;_.o=0;_.q=0;_.r=0;var O3=sfb(jEe,'BasicProgressMonitor',344);feb(717,205,oze,jrd);_.rf=function nrd(a,b){crd(a,b)};var V3=sfb(jEe,'BoxLayoutProvider',717);feb(983,1,fye,prd);_.Ne=function qrd(a,b){return ord(this,RD(a,27),RD(b,27))};_.Fb=function rrd(a){return this===a};_.Oe=function srd(){return new Frb(this)};_.a=false;var P3=sfb(jEe,'BoxLayoutProvider/1',983);feb(163,1,{163:1},zrd,Ard);_.Ib=function Brd(){return this.c?zCd(this.c):Fe(this.b)};var Q3=sfb(jEe,'BoxLayoutProvider/Group',163);feb(320,22,{3:1,34:1,22:1,320:1},Hrd);var Crd,Drd,Erd,Frd;var R3=tfb(jEe,'BoxLayoutProvider/PackingMode',320,WI,Jrd,Ird);var Krd;feb(984,1,fye,Mrd);_.Ne=function Nrd(a,b){return krd(RD(a,163),RD(b,163))};_.Fb=function Ord(a){return this===a};_.Oe=function Prd(){return new Frb(this)};var S3=sfb(jEe,'BoxLayoutProvider/lambda$0$Type',984);feb(985,1,fye,Qrd);_.Ne=function Rrd(a,b){return lrd(RD(a,163),RD(b,163))};_.Fb=function Srd(a){return this===a};_.Oe=function Trd(){return new Frb(this)};var T3=sfb(jEe,'BoxLayoutProvider/lambda$1$Type',985);feb(986,1,fye,Urd);_.Ne=function Vrd(a,b){return mrd(RD(a,163),RD(b,163))};_.Fb=function Wrd(a){return this===a};_.Oe=function Xrd(){return new Frb(this)};var U3=sfb(jEe,'BoxLayoutProvider/lambda$2$Type',986);feb(1384,1,{845:1},Yrd);_.Mg=function Zrd(a,b){return GCc(),!ZD(b,167)||ued((hed(),ged,RD(a,167)),b)};var W3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type',1384);feb(1385,1,Qve,$rd);_.Cd=function _rd(a){JCc(this.a,RD(a,149))};var X3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type',1385);feb(1386,1,Qve,asd);_.Cd=function bsd(a){RD(a,96);GCc()};var Y3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type',1386);feb(1390,1,Qve,csd);_.Cd=function dsd(a){KCc(this.a,RD(a,96))};var Z3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type',1390);feb(1388,1,nwe,esd);_.Mb=function fsd(a){return LCc(this.a,this.b,RD(a,149))};var $3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type',1388);feb(1387,1,nwe,gsd);_.Mb=function hsd(a){return NCc(this.a,this.b,RD(a,845))};var _3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type',1387);feb(1389,1,Qve,isd);_.Cd=function jsd(a){MCc(this.a,this.b,RD(a,149))};var a4=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type',1389);feb(947,1,{},Lsd);_.Kb=function Msd(a){return Ksd(a)};_.Fb=function Nsd(a){return this===a};var c4=sfb(jEe,'ElkUtil/lambda$0$Type',947);feb(948,1,Qve,Osd);_.Cd=function Psd(a){ysd(this.a,this.b,RD(a,74))};_.a=0;_.b=0;var d4=sfb(jEe,'ElkUtil/lambda$1$Type',948);feb(949,1,Qve,Qsd);_.Cd=function Rsd(a){zsd(this.a,this.b,RD(a,166))};_.a=0;_.b=0;var e4=sfb(jEe,'ElkUtil/lambda$2$Type',949);feb(950,1,Qve,Ssd);_.Cd=function Tsd(a){Asd(this.a,this.b,RD(a,135))};_.a=0;_.b=0;var f4=sfb(jEe,'ElkUtil/lambda$3$Type',950);feb(951,1,Qve,Usd);_.Cd=function Vsd(a){Bsd(this.a,RD(a,377))};var g4=sfb(jEe,'ElkUtil/lambda$4$Type',951);feb(325,1,{34:1,325:1},Xsd);_.Fd=function Ysd(a){return Wsd(this,RD(a,242))};_.Fb=function Zsd(a){var b;if(ZD(a,325)){b=RD(a,325);return this.a==b.a}return false};_.Hb=function $sd(){return eE(this.a)};_.Ib=function _sd(){return this.a+' (exclusive)'};_.a=0;var h4=sfb(jEe,'ExclusiveBounds/ExclusiveLowerBound',325);feb(1119,205,oze,btd);_.rf=function ctd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;b.Ug('Fixed Layout',1);f=RD(Gxd(a,(umd(),Skd)),223);l=0;m=0;for(s=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));s.e!=s.i.gc();){q=RD(bMd(s),27);B=RD(Gxd(q,(vnd(),und)),8);if(B){Byd(q,B.a,B.b);if(RD(Gxd(q,pnd),181).Hc((Qpd(),Mpd))){n=RD(Gxd(q,rnd),8);n.a>0&&n.b>0&&Esd(q,n.a,n.b,true,true)}}l=$wnd.Math.max(l,q.i+q.g);m=$wnd.Math.max(m,q.j+q.f);for(j=new dMd((!q.n&&(q.n=new C5d(I4,q,1,7)),q.n));j.e!=j.i.gc();){h=RD(bMd(j),135);B=RD(Gxd(h,und),8);!!B&&Byd(h,B.a,B.b);l=$wnd.Math.max(l,q.i+h.i+h.g);m=$wnd.Math.max(m,q.j+h.j+h.f)}for(v=new dMd((!q.c&&(q.c=new C5d(K4,q,9,9)),q.c));v.e!=v.i.gc();){u=RD(bMd(v),123);B=RD(Gxd(u,und),8);!!B&&Byd(u,B.a,B.b);w=q.i+u.i;A=q.j+u.j;l=$wnd.Math.max(l,w+u.g);m=$wnd.Math.max(m,A+u.f);for(i=new dMd((!u.n&&(u.n=new C5d(I4,u,1,7)),u.n));i.e!=i.i.gc();){h=RD(bMd(i),135);B=RD(Gxd(h,und),8);!!B&&Byd(h,B.a,B.b);l=$wnd.Math.max(l,w+h.i+h.g);m=$wnd.Math.max(m,A+h.j+h.f)}}for(e=new is(Mr(zGd(q).a.Kc(),new ir));gs(e);){c=RD(hs(e),74);k=atd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}for(d=new is(Mr(yGd(q).a.Kc(),new ir));gs(d);){c=RD(hs(d),74);if(vCd(JGd(c))!=a){k=atd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}}}if(f==(Ymd(),Umd)){for(r=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));r.e!=r.i.gc();){q=RD(bMd(r),27);for(d=new is(Mr(zGd(q).a.Kc(),new ir));gs(d);){c=RD(hs(d),74);g=tsd(c);g.b==0?Ixd(c,cld,null):Ixd(c,cld,g)}}}if(!Heb(TD(Gxd(a,(vnd(),qnd))))){t=RD(Gxd(a,snd),107);p=l+t.b+t.c;o=m+t.d+t.a;Esd(a,p,o,true,true)}b.Vg()};var i4=sfb(jEe,'FixedLayoutProvider',1119);feb(385,137,{3:1,423:1,385:1,96:1,137:1},dtd,etd);_.cg=function htd(b){var c,d,e,f,g,h,i,j,k;if(!b){return}try{j=vhb(b,';,;');for(g=j,h=0,i=g.length;h<i;++h){f=g[h];d=vhb(f,'\\:');e=vgd(ygd(),d[0]);if(!e){throw Adb(new agb('Invalid option id: '+d[0]))}k=zhd(e,d[1]);if(k==null){throw Adb(new agb('Invalid option value: '+d[1]))}k==null?(!this.q&&(this.q=new Tsb),_jb(this.q,e)):(!this.q&&(this.q=new Tsb),Zjb(this.q,e,k))}}catch(a){a=zdb(a);if(ZD(a,103)){c=a;throw Adb(new bgb(c))}else throw Adb(a)}};_.Ib=function itd(){var a;a=WD(zDb(GDb((!this.q?(yob(),yob(),wob):this.q).vc().Oc(),new jtd),sBb(new hCb,new fCb,new RBb,new TBb,cD(WC(QL,1),jwe,108,0,[]))));return a};var l4=sfb(jEe,'IndividualSpacings',385);feb(982,1,{},jtd);_.Kb=function ktd(a){return gtd(RD(a,44))};var k4=sfb(jEe,'IndividualSpacings/lambda$0$Type',982);feb(718,1,{},ntd);_.c=0;var m4=sfb(jEe,'InstancePool',718);feb(1835,1,{},otd);var o4=sfb(jEe,'LoggedGraph',1835);feb(415,22,{3:1,34:1,22:1,415:1},utd);var ptd,qtd,rtd,std;var n4=tfb(jEe,'LoggedGraph/Type',415,WI,wtd,vtd);var xtd;feb(1063,1,{871:1},ztd);_.Ug=function Atd(a,b){return false};_.Vg=function Btd(){};_.Wg=function Ctd(){return 0};_.Xg=function Dtd(){return null};_.Yg=function Etd(){return null};_.Zg=function Ftd(){return null};_.$g=function Gtd(){return false};_._g=function Htd(){return false};_.ah=function Itd(){return false};_.bh=function Jtd(a){};_.dh=function Ktd(a,b){};_.eh=function Ltd(a){return this};_.fh=function Mtd(a){};var p4=sfb(jEe,'NullElkProgressMonitor',1063);feb(42,1,{20:1,42:1},Ptd);_.Jc=function Rtd(a){xgb(this,a)};_.Fb=function Qtd(a){var b,c,d;if(ZD(a,42)){c=RD(a,42);b=this.a==null?c.a==null:pb(this.a,c.a);d=this.b==null?c.b==null:pb(this.b,c.b);return b&&d}else{return false}};_.Hb=function Std(){var a,b,c,d,e,f;c=this.a==null?0:tb(this.a);a=c&Bwe;b=c&-65536;f=this.b==null?0:tb(this.b);d=f&Bwe;e=f&-65536;return a^e>>16&Bwe|b^d<<16};_.Kc=function Ttd(){return new Vtd(this)};_.Ib=function Utd(){return this.a==null&&this.b==null?'pair(null,null)':this.a==null?'pair(null,'+jeb(this.b)+')':this.b==null?'pair('+jeb(this.a)+',null)':'pair('+jeb(this.a)+','+jeb(this.b)+')'};var r4=sfb(jEe,'Pair',42);feb(995,1,Ave,Vtd);_.Nb=function Wtd(a){Ztb(this,a)};_.Ob=function Xtd(){return !this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)};_.Pb=function Ytd(){if(!this.c&&!this.b&&this.a.a!=null){this.b=true;return this.a.a}else if(!this.c&&this.a.b!=null){this.c=true;return this.a.b}throw Adb(new Dvb)};_.Qb=function Ztd(){this.c&&this.a.b!=null?(this.a.b=null):this.b&&this.a.a!=null&&(this.a.a=null);throw Adb(new cgb)};_.b=false;_.c=false;var q4=sfb(jEe,'Pair/1',995);feb(454,1,{454:1},$td);_.Fb=function _td(a){return Fvb(this.a,RD(a,454).a)&&Fvb(this.c,RD(a,454).c)&&Fvb(this.d,RD(a,454).d)&&Fvb(this.b,RD(a,454).b)};_.Hb=function aud(){return Tnb(cD(WC(jJ,1),rve,1,5,[this.a,this.c,this.d,this.b]))};_.Ib=function bud(){return '('+this.a+pve+this.c+pve+this.d+pve+this.b+')'};var s4=sfb(jEe,'Quadruple',454);feb(1108,205,oze,eud);_.rf=function fud(a,b){var c,d,e,f,g;b.Ug('Random Layout',1);if((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a).i==0){b.Vg();return}f=RD(Gxd(a,(Fpd(),Dpd)),17);!!f&&f.a!=0?(e=new Pwb(f.a)):(e=new Owb);c=Mfb(UD(Gxd(a,Apd)));g=Mfb(UD(Gxd(a,Epd)));d=RD(Gxd(a,Bpd),107);dud(a,e,c,g,d);b.Vg()};var t4=sfb(jEe,'RandomLayoutProvider',1108);feb(240,1,{240:1},gud);_.Fb=function hud(a){return Fvb(this.a,RD(a,240).a)&&Fvb(this.b,RD(a,240).b)&&Fvb(this.c,RD(a,240).c)};_.Hb=function iud(){return Tnb(cD(WC(jJ,1),rve,1,5,[this.a,this.b,this.c]))};_.Ib=function jud(){return '('+this.a+pve+this.b+pve+this.c+')'};var u4=sfb(jEe,'Triple',240);var kud;feb(562,1,{});_.Lf=function oud(){return new rjd(this.f.i,this.f.j)};_.of=function pud(a){if(hGd(a,(umd(),Gld))){return Gxd(this.f,mud)}return Gxd(this.f,a)};_.Mf=function qud(){return new rjd(this.f.g,this.f.f)};_.Nf=function rud(){return this.g};_.pf=function sud(a){return Hxd(this.f,a)};_.Of=function tud(a){Dyd(this.f,a.a);Eyd(this.f,a.b)};_.Pf=function uud(a){Cyd(this.f,a.a);Ayd(this.f,a.b)};_.Qf=function vud(a){this.g=a};_.g=0;var mud;var v4=sfb(uHe,'ElkGraphAdapters/AbstractElkGraphElementAdapter',562);feb(563,1,{853:1},wud);_.Rf=function xud(){var a,b;if(!this.b){this.b=fv(iyd(this.a).i);for(b=new dMd(iyd(this.a));b.e!=b.i.gc();){a=RD(bMd(b),135);Rmb(this.b,new Bud(a))}}return this.b};_.b=null;var w4=sfb(uHe,'ElkGraphAdapters/ElkEdgeAdapter',563);feb(308,562,{},zud);_.Sf=function Aud(){return yud(this)};_.a=null;var x4=sfb(uHe,'ElkGraphAdapters/ElkGraphAdapter',308);feb(640,562,{187:1},Bud);var y4=sfb(uHe,'ElkGraphAdapters/ElkLabelAdapter',640);feb(639,562,{695:1},Fud);_.Rf=function Iud(){return Cud(this)};_.Vf=function Jud(){var a;return a=RD(Gxd(this.f,(umd(),eld)),140),!a&&(a=new P2b),a};_.Xf=function Lud(){return Dud(this)};_.Zf=function Nud(a){var b;b=new S2b(a);Ixd(this.f,(umd(),eld),b)};_.$f=function Oud(a){Ixd(this.f,(umd(),tld),new B3b(a))};_.Tf=function Gud(){return this.d};_.Uf=function Hud(){var a,b;if(!this.a){this.a=new bnb;for(b=new is(Mr(yGd(RD(this.f,27)).a.Kc(),new ir));gs(b);){a=RD(hs(b),74);Rmb(this.a,new wud(a))}}return this.a};_.Wf=function Kud(){var a,b;if(!this.c){this.c=new bnb;for(b=new is(Mr(zGd(RD(this.f,27)).a.Kc(),new ir));gs(b);){a=RD(hs(b),74);Rmb(this.c,new wud(a))}}return this.c};_.Yf=function Mud(){return tCd(RD(this.f,27)).i!=0||Heb(TD(RD(this.f,27).of((umd(),$kd))))};_._f=function Pud(){Eud(this,(lud(),kud))};_.a=null;_.b=null;_.c=null;_.d=null;_.e=null;var z4=sfb(uHe,'ElkGraphAdapters/ElkNodeAdapter',639);feb(1284,562,{852:1},Rud);_.Rf=function Tud(){return Qud(this)};_.Uf=function Sud(){var a,b;if(!this.a){this.a=ev(RD(this.f,123).hh().i);for(b=new dMd(RD(this.f,123).hh());b.e!=b.i.gc();){a=RD(bMd(b),74);Rmb(this.a,new wud(a))}}return this.a};_.Wf=function Uud(){var a,b;if(!this.c){this.c=ev(RD(this.f,123).ih().i);for(b=new dMd(RD(this.f,123).ih());b.e!=b.i.gc();){a=RD(bMd(b),74);Rmb(this.c,new wud(a))}}return this.c};_.ag=function Vud(){return RD(RD(this.f,123).of((umd(),Old)),64)};_.bg=function Wud(){var a,b,c,d,e,f,g,h;d=MCd(RD(this.f,123));for(c=new dMd(RD(this.f,123).ih());c.e!=c.i.gc();){a=RD(bMd(c),74);for(h=new dMd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c));h.e!=h.i.gc();){g=RD(bMd(h),84);if(NGd(AGd(g),d)){return true}else if(AGd(g)==d&&Heb(TD(Gxd(a,(umd(),_kd))))){return true}}}for(b=new dMd(RD(this.f,123).hh());b.e!=b.i.gc();){a=RD(bMd(b),74);for(f=new dMd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b));f.e!=f.i.gc();){e=RD(bMd(f),84);if(NGd(AGd(e),d)){return true}}}return false};_.a=null;_.b=null;_.c=null;var A4=sfb(uHe,'ElkGraphAdapters/ElkPortAdapter',1284);feb(1285,1,fye,Yud);_.Ne=function Zud(a,b){return Xud(RD(a,123),RD(b,123))};_.Fb=function $ud(a){return this===a};_.Oe=function _ud(){return new Frb(this)};var B4=sfb(uHe,'ElkGraphAdapters/PortComparator',1285);var r7=ufb(vHe,'EObject');var C4=ufb(wHe,xHe);var D4=ufb(wHe,yHe);var H4=ufb(wHe,zHe);var L4=ufb(wHe,'ElkShape');var E4=ufb(wHe,AHe);var G4=ufb(wHe,BHe);var F4=ufb(wHe,CHe);var p7=ufb(vHe,DHe);var n7=ufb(vHe,'EFactory');var avd;var q7=ufb(vHe,EHe);var t7=ufb(vHe,'EPackage');var cvd;var evd,fvd,gvd,hvd,ivd,jvd,kvd,lvd,mvd,nvd,ovd;var I4=ufb(wHe,FHe);var J4=ufb(wHe,GHe);var K4=ufb(wHe,HHe);feb(93,1,IHe);_.th=function rvd(){this.uh();return null};_.uh=function svd(){return null};_.vh=function tvd(){return this.uh(),false};_.wh=function uvd(){return false};_.xh=function vvd(a){qvd(this,a)};var g6=sfb(JHe,'BasicNotifierImpl',93);feb(99,93,RHe);_.Yh=function Dwd(){return Mvd(this)};_.yh=function bwd(a,b){return a};_.zh=function cwd(){throw Adb(new jib)};_.Ah=function dwd(a){var b;return b=Z5d(RD(vYd(this.Dh(),this.Fh()),19)),this.Ph().Th(this,b.n,b.f,a)};_.Bh=function ewd(a,b){throw Adb(new jib)};_.Ch=function fwd(a,b,c){return xvd(this,a,b,c)};_.Dh=function gwd(){var a;if(this.zh()){a=this.zh().Nk();if(a){return a}}return this.ii()};_.Eh=function hwd(){return yvd(this)};_.Fh=function iwd(){throw Adb(new jib)};_.Gh=function kwd(){var a,b;b=this.$h().Ok();!b&&this.zh().Tk(b=(N2d(),a=P$d(rYd(this.Dh())),a==null?M2d:new Q2d(this,a)));return b};_.Hh=function mwd(a,b){return a};_.Ih=function nwd(a){var b;b=a.pk();return !b?BYd(this.Dh(),a):a.Lj()};_.Jh=function owd(){var a;a=this.zh();return !a?null:a.Qk()};_.Kh=function pwd(){return !this.zh()?null:this.zh().Nk()};_.Lh=function qwd(a,b,c){return Dvd(this,a,b,c)};_.Mh=function rwd(a){return Evd(this,a)};_.Nh=function swd(a,b){return Fvd(this,a,b)};_.Oh=function twd(){var a;a=this.zh();return !!a&&a.Rk()};_.Ph=function uwd(){throw Adb(new jib)};_.Qh=function vwd(){return Hvd(this)};_.Rh=function wwd(a,b,c,d){return Ivd(this,a,b,d)};_.Sh=function xwd(a,b,c){var d;return d=RD(vYd(this.Dh(),b),69),d.wk().zk(this,this.hi(),b-this.ji(),a,c)};_.Th=function ywd(a,b,c,d){return Jvd(this,a,b,d)};_.Uh=function zwd(a,b,c){var d;return d=RD(vYd(this.Dh(),b),69),d.wk().Ak(this,this.hi(),b-this.ji(),a,c)};_.Vh=function Awd(){return !!this.zh()&&!!this.zh().Pk()};_.Wh=function Bwd(a){return Kvd(this,a)};_.Xh=function Cwd(a){return Lvd(this,a)};_.Zh=function Ewd(a){return Pvd(this,a)};_.$h=function Fwd(){throw Adb(new jib)};_._h=function Gwd(){return !this.zh()?null:this.zh().Pk()};_.ai=function Hwd(){return Hvd(this)};_.bi=function Iwd(a,b){Wvd(this,a,b)};_.ci=function Jwd(a){this.$h().Sk(a)};_.di=function Kwd(a){this.$h().Vk(a)};_.ei=function Lwd(a){this.$h().Uk(a)};_.fi=function Mwd(a,b){var c,d,e,f;f=this.Jh();if(!!f&&!!a){b=rLd(f.El(),this,b);f.Il(this)}d=this.Ph();if(d){if((jwd(this,this.Ph(),this.Fh()).Bb&txe)!=0){e=d.Qh();!!e&&(!a?e.Hl(this):!f&&e.Il(this))}else{b=(c=this.Fh(),c>=0?this.Ah(b):this.Ph().Th(this,-1-c,null,b));b=this.Ch(null,-1,b)}}this.di(a);return b};_.gi=function Nwd(a){var b,c,d,e,f,g,h,i;c=this.Dh();f=BYd(c,a);b=this.ji();if(f>=b){return RD(a,69).wk().Dk(this,this.hi(),f-b)}else if(f<=-1){g=Eee((lke(),jke),c,a);if(g){nke();RD(g,69).xk()||(g=zfe(Qee(jke,g)));e=(d=this.Ih(g),RD(d>=0?this.Lh(d,true,true):Qvd(this,g,true),160));i=g.Ik();if(i>1||i==-1){return RD(RD(e,220).Sl(a,false),79)}}else{throw Adb(new agb(KHe+a.xe()+NHe))}}else if(a.Jk()){return d=this.Ih(a),RD(d>=0?this.Lh(d,false,true):Qvd(this,a,false),79)}h=new NTd(this,a);return h};_.hi=function Owd(){return Yvd(this)};_.ii=function Pwd(){return (lTd(),kTd).S};_.ji=function Qwd(){return AYd(this.ii())};_.ki=function Rwd(a){$vd(this,a)};_.Ib=function Swd(){return awd(this)};var G7=sfb(SHe,'BasicEObjectImpl',99);var ZSd;feb(119,99,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1});_.li=function _wd(a){var b;b=Vwd(this);return b[a]};_.mi=function axd(a,b){var c;c=Vwd(this);bD(c,a,b)};_.ni=function bxd(a){var b;b=Vwd(this);bD(b,a,null)};_.th=function cxd(){return RD(Ywd(this,4),129)};_.uh=function dxd(){throw Adb(new jib)};_.vh=function exd(){return (this.Db&4)!=0};_.zh=function fxd(){throw Adb(new jib)};_.oi=function gxd(a){$wd(this,2,a)};_.Bh=function hxd(a,b){this.Db=b<<16|this.Db&255;this.oi(a)};_.Dh=function ixd(){return Uwd(this)};_.Fh=function jxd(){return this.Db>>16};_.Gh=function kxd(){var a,b;return N2d(),b=P$d(rYd((a=RD(Ywd(this,16),29),!a?this.ii():a))),b==null?(null,M2d):new Q2d(this,b)};_.wh=function lxd(){return (this.Db&1)==0};_.Jh=function mxd(){return RD(Ywd(this,128),2034)};_.Kh=function nxd(){return RD(Ywd(this,16),29)};_.Oh=function oxd(){return (this.Db&32)!=0};_.Ph=function pxd(){return RD(Ywd(this,2),54)};_.Vh=function qxd(){return (this.Db&64)!=0};_.$h=function rxd(){throw Adb(new jib)};_._h=function sxd(){return RD(Ywd(this,64),288)};_.ci=function txd(a){$wd(this,16,a)};_.di=function uxd(a){$wd(this,128,a)};_.ei=function vxd(a){$wd(this,64,a)};_.hi=function wxd(){return Wwd(this)};_.Db=0;var xab=sfb(SHe,'MinimalEObjectImpl',119);feb(120,119,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1});_.oi=function xxd(a){this.Cb=a};_.Ph=function yxd(){return this.Cb};var wab=sfb(SHe,'MinimalEObjectImpl/Container',120);feb(2083,120,{110:1,342:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1});_.Lh=function Jxd(a,b,c){return Axd(this,a,b,c)};_.Uh=function Kxd(a,b,c){return Bxd(this,a,b,c)};_.Wh=function Lxd(a){return Cxd(this,a)};_.bi=function Mxd(a,b){Dxd(this,a,b)};_.ii=function Nxd(){return pvd(),ovd};_.ki=function Oxd(a){Exd(this,a)};_.nf=function Pxd(){return Fxd(this)};_.gh=function Qxd(){return !this.o&&(this.o=new DVd((pvd(),mvd),X4,this,0)),this.o};_.of=function Rxd(a){return Gxd(this,a)};_.pf=function Sxd(a){return Hxd(this,a)};_.qf=function Txd(a,b){return Ixd(this,a,b)};var M4=sfb(THe,'EMapPropertyHolderImpl',2083);feb(572,120,{110:1,377:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Xxd);_.Lh=function Yxd(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return Dvd(this,a,b,c)};_.Wh=function Zxd(a){switch(a){case 0:return this.a!=0;case 1:return this.b!=0;}return Kvd(this,a)};_.bi=function $xd(a,b){switch(a){case 0:Vxd(this,Kfb(UD(b)));return;case 1:Wxd(this,Kfb(UD(b)));return;}Wvd(this,a,b)};_.ii=function _xd(){return pvd(),evd};_.ki=function ayd(a){switch(a){case 0:Vxd(this,0);return;case 1:Wxd(this,0);return;}$vd(this,a)};_.Ib=function byd(){var a;if((this.Db&64)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (x: ';Khb(a,this.a);a.a+=', y: ';Khb(a,this.b);a.a+=')';return a.a};_.a=0;_.b=0;var N4=sfb(THe,'ElkBendPointImpl',572);feb(739,2083,{110:1,342:1,167:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1});_.Lh=function lyd(a,b,c){return cyd(this,a,b,c)};_.Sh=function myd(a,b,c){return dyd(this,a,b,c)};_.Uh=function nyd(a,b,c){return eyd(this,a,b,c)};_.Wh=function oyd(a){return fyd(this,a)};_.bi=function pyd(a,b){gyd(this,a,b)};_.ii=function qyd(){return pvd(),ivd};_.ki=function ryd(a){hyd(this,a)};_.jh=function syd(){return this.k};_.kh=function tyd(){return iyd(this)};_.Ib=function uyd(){return kyd(this)};_.k=null;var R4=sfb(THe,'ElkGraphElementImpl',739);feb(740,739,{110:1,342:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1});_.Lh=function Gyd(a,b,c){return vyd(this,a,b,c)};_.Wh=function Hyd(a){return wyd(this,a)};_.bi=function Iyd(a,b){xyd(this,a,b)};_.ii=function Jyd(){return pvd(),nvd};_.ki=function Kyd(a){yyd(this,a)};_.lh=function Lyd(){return this.f};_.mh=function Myd(){return this.g};_.nh=function Nyd(){return this.i};_.oh=function Oyd(){return this.j};_.ph=function Pyd(a,b){zyd(this,a,b)};_.qh=function Qyd(a,b){Byd(this,a,b)};_.rh=function Ryd(a){Dyd(this,a)};_.sh=function Syd(a){Eyd(this,a)};_.Ib=function Tyd(){return Fyd(this)};_.f=0;_.g=0;_.i=0;_.j=0;var Y4=sfb(THe,'ElkShapeImpl',740);feb(741,740,{110:1,342:1,84:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1});_.Lh=function _yd(a,b,c){return Uyd(this,a,b,c)};_.Sh=function azd(a,b,c){return Vyd(this,a,b,c)};_.Uh=function bzd(a,b,c){return Wyd(this,a,b,c)};_.Wh=function czd(a){return Xyd(this,a)};_.bi=function dzd(a,b){Yyd(this,a,b)};_.ii=function ezd(){return pvd(),fvd};_.ki=function fzd(a){Zyd(this,a)};_.hh=function gzd(){return !this.d&&(this.d=new Yie(G4,this,8,5)),this.d};_.ih=function hzd(){return !this.e&&(this.e=new Yie(G4,this,7,4)),this.e};var O4=sfb(THe,'ElkConnectableShapeImpl',741);feb(326,739,{110:1,342:1,74:1,167:1,326:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},rzd);_.Ah=function szd(a){return jzd(this,a)};_.Lh=function tzd(a,b,c){switch(a){case 3:return kzd(this);case 4:return !this.b&&(this.b=new Yie(E4,this,4,7)),this.b;case 5:return !this.c&&(this.c=new Yie(E4,this,5,8)),this.c;case 6:return !this.a&&(this.a=new C5d(F4,this,6,6)),this.a;case 7:return Geb(),!this.b&&(this.b=new Yie(E4,this,4,7)),this.b.i<=1&&(!this.c&&(this.c=new Yie(E4,this,5,8)),this.c.i<=1)?false:true;case 8:return Geb(),nzd(this)?true:false;case 9:return Geb(),ozd(this)?true:false;case 10:return Geb(),!this.b&&(this.b=new Yie(E4,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Yie(E4,this,5,8)),this.c.i!=0)?true:false;}return cyd(this,a,b,c)};_.Sh=function uzd(a,b,c){var d;switch(b){case 3:!!this.Cb&&(c=(d=this.Db>>16,d>=0?jzd(this,c):this.Cb.Th(this,-1-d,null,c)));return izd(this,RD(a,27),c);case 4:return !this.b&&(this.b=new Yie(E4,this,4,7)),qLd(this.b,a,c);case 5:return !this.c&&(this.c=new Yie(E4,this,5,8)),qLd(this.c,a,c);case 6:return !this.a&&(this.a=new C5d(F4,this,6,6)),qLd(this.a,a,c);}return dyd(this,a,b,c)};_.Uh=function vzd(a,b,c){switch(b){case 3:return izd(this,null,c);case 4:return !this.b&&(this.b=new Yie(E4,this,4,7)),rLd(this.b,a,c);case 5:return !this.c&&(this.c=new Yie(E4,this,5,8)),rLd(this.c,a,c);case 6:return !this.a&&(this.a=new C5d(F4,this,6,6)),rLd(this.a,a,c);}return eyd(this,a,b,c)};_.Wh=function wzd(a){switch(a){case 3:return !!kzd(this);case 4:return !!this.b&&this.b.i!=0;case 5:return !!this.c&&this.c.i!=0;case 6:return !!this.a&&this.a.i!=0;case 7:return !this.b&&(this.b=new Yie(E4,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Yie(E4,this,5,8)),this.c.i<=1));case 8:return nzd(this);case 9:return ozd(this);case 10:return !this.b&&(this.b=new Yie(E4,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Yie(E4,this,5,8)),this.c.i!=0);}return fyd(this,a)};_.bi=function xzd(a,b){switch(a){case 3:pzd(this,RD(b,27));return;case 4:!this.b&&(this.b=new Yie(E4,this,4,7));sLd(this.b);!this.b&&(this.b=new Yie(E4,this,4,7));YGd(this.b,RD(b,16));return;case 5:!this.c&&(this.c=new Yie(E4,this,5,8));sLd(this.c);!this.c&&(this.c=new Yie(E4,this,5,8));YGd(this.c,RD(b,16));return;case 6:!this.a&&(this.a=new C5d(F4,this,6,6));sLd(this.a);!this.a&&(this.a=new C5d(F4,this,6,6));YGd(this.a,RD(b,16));return;}gyd(this,a,b)};_.ii=function yzd(){return pvd(),gvd};_.ki=function zzd(a){switch(a){case 3:pzd(this,null);return;case 4:!this.b&&(this.b=new Yie(E4,this,4,7));sLd(this.b);return;case 5:!this.c&&(this.c=new Yie(E4,this,5,8));sLd(this.c);return;case 6:!this.a&&(this.a=new C5d(F4,this,6,6));sLd(this.a);return;}hyd(this,a)};_.Ib=function Azd(){return qzd(this)};var P4=sfb(THe,'ElkEdgeImpl',326);feb(451,2083,{110:1,342:1,166:1,451:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Rzd);_.Ah=function Szd(a){return Czd(this,a)};_.Lh=function Tzd(a,b,c){switch(a){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return !this.a&&(this.a=new XZd(D4,this,5)),this.a;case 6:return Fzd(this);case 7:if(b)return Ezd(this);return this.i;case 8:if(b)return Dzd(this);return this.f;case 9:return !this.g&&(this.g=new Yie(F4,this,9,10)),this.g;case 10:return !this.e&&(this.e=new Yie(F4,this,10,9)),this.e;case 11:return this.d;}return Axd(this,a,b,c)};_.Sh=function Uzd(a,b,c){var d,e,f;switch(b){case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Czd(this,c):this.Cb.Th(this,-1-e,null,c)));return Bzd(this,RD(a,74),c);case 9:return !this.g&&(this.g=new Yie(F4,this,9,10)),qLd(this.g,a,c);case 10:return !this.e&&(this.e=new Yie(F4,this,10,9)),qLd(this.e,a,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(pvd(),hvd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((pvd(),hvd)),a,c)};_.Uh=function Vzd(a,b,c){switch(b){case 5:return !this.a&&(this.a=new XZd(D4,this,5)),rLd(this.a,a,c);case 6:return Bzd(this,null,c);case 9:return !this.g&&(this.g=new Yie(F4,this,9,10)),rLd(this.g,a,c);case 10:return !this.e&&(this.e=new Yie(F4,this,10,9)),rLd(this.e,a,c);}return Bxd(this,a,b,c)};_.Wh=function Wzd(a){switch(a){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return !!this.a&&this.a.i!=0;case 6:return !!Fzd(this);case 7:return !!this.i;case 8:return !!this.f;case 9:return !!this.g&&this.g.i!=0;case 10:return !!this.e&&this.e.i!=0;case 11:return this.d!=null;}return Cxd(this,a)};_.bi=function Xzd(a,b){switch(a){case 1:Ozd(this,Kfb(UD(b)));return;case 2:Pzd(this,Kfb(UD(b)));return;case 3:Hzd(this,Kfb(UD(b)));return;case 4:Izd(this,Kfb(UD(b)));return;case 5:!this.a&&(this.a=new XZd(D4,this,5));sLd(this.a);!this.a&&(this.a=new XZd(D4,this,5));YGd(this.a,RD(b,16));return;case 6:Mzd(this,RD(b,74));return;case 7:Lzd(this,RD(b,84));return;case 8:Kzd(this,RD(b,84));return;case 9:!this.g&&(this.g=new Yie(F4,this,9,10));sLd(this.g);!this.g&&(this.g=new Yie(F4,this,9,10));YGd(this.g,RD(b,16));return;case 10:!this.e&&(this.e=new Yie(F4,this,10,9));sLd(this.e);!this.e&&(this.e=new Yie(F4,this,10,9));YGd(this.e,RD(b,16));return;case 11:Jzd(this,WD(b));return;}Dxd(this,a,b)};_.ii=function Yzd(){return pvd(),hvd};_.ki=function Zzd(a){switch(a){case 1:Ozd(this,0);return;case 2:Pzd(this,0);return;case 3:Hzd(this,0);return;case 4:Izd(this,0);return;case 5:!this.a&&(this.a=new XZd(D4,this,5));sLd(this.a);return;case 6:Mzd(this,null);return;case 7:Lzd(this,null);return;case 8:Kzd(this,null);return;case 9:!this.g&&(this.g=new Yie(F4,this,9,10));sLd(this.g);return;case 10:!this.e&&(this.e=new Yie(F4,this,10,9));sLd(this.e);return;case 11:Jzd(this,null);return;}Exd(this,a)};_.Ib=function $zd(){return Qzd(this)};_.b=0;_.c=0;_.d=null;_.j=0;_.k=0;var Q4=sfb(THe,'ElkEdgeSectionImpl',451);feb(158,120,{110:1,94:1,93:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1});_.Lh=function cAd(a,b,c){var d;if(a==0){return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Sh=function dAd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c)}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().zk(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Uh=function eAd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c)}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().Ak(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Wh=function fAd(a){var b;if(a==0){return !!this.Ab&&this.Ab.i!=0}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.Zh=function gAd(a){return _zd(this,a)};_.bi=function hAd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.di=function iAd(a){$wd(this,128,a)};_.ii=function jAd(){return JTd(),xTd};_.ki=function kAd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.pi=function lAd(){this.Bb|=1};_.qi=function mAd(a){return bAd(this,a)};_.Bb=0;var k8=sfb(SHe,'EModelElementImpl',158);feb(720,158,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},yAd);_.ri=function zAd(a,b){return tAd(this,a,b)};_.si=function AAd(a){var b,c,d,e,f;if(this.a!=BXd(a)||(a.Bb&256)!=0){throw Adb(new agb(ZHe+a.zb+WHe))}for(d=zYd(a);tYd(d.a).i!=0;){c=RD(N_d(d,0,(b=RD(QHd(tYd(d.a),0),89),f=b.c,ZD(f,90)?RD(f,29):(JTd(),zTd))),29);if(DXd(c)){e=BXd(c).wi().si(c);RD(e,54).ci(a);return e}d=zYd(c)}return (a.D!=null?a.D:a.B)=='java.util.Map$Entry'?new LUd(a):new zUd(a)};_.ti=function BAd(a,b){return uAd(this,a,b)};_.Lh=function CAd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.a;}return zvd(this,a-AYd((JTd(),uTd)),vYd((d=RD(Ywd(this,16),29),!d?uTd:d),a),b,c)};_.Sh=function DAd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 1:!!this.a&&(c=RD(this.a,54).Th(this,4,t7,c));return rAd(this,RD(a,241),c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),uTd):d),b),69),e.wk().zk(this,Wwd(this),b-AYd((JTd(),uTd)),a,c)};_.Uh=function EAd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 1:return rAd(this,null,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),uTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),uTd)),a,c)};_.Wh=function FAd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return !!this.a;}return Avd(this,a-AYd((JTd(),uTd)),vYd((b=RD(Ywd(this,16),29),!b?uTd:b),a))};_.bi=function GAd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:wAd(this,RD(b,241));return;}Bvd(this,a-AYd((JTd(),uTd)),vYd((c=RD(Ywd(this,16),29),!c?uTd:c),a),b)};_.ii=function HAd(){return JTd(),uTd};_.ki=function IAd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:wAd(this,null);return;}Cvd(this,a-AYd((JTd(),uTd)),vYd((b=RD(Ywd(this,16),29),!b?uTd:b),a))};var nAd,oAd,pAd;var i8=sfb(SHe,'EFactoryImpl',720);feb(1037,720,{110:1,2113:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},KAd);_.ri=function LAd(a,b){switch(a.hk()){case 12:return RD(b,149).Pg();case 13:return jeb(b);default:throw Adb(new agb(VHe+a.xe()+WHe));}};_.si=function MAd(a){var b,c,d,e,f,g,h,i;switch(a.G==-1&&(a.G=(b=BXd(a),b?fZd(b.vi(),a):-1)),a.G){case 4:return f=new hCd,f;case 6:return g=new ACd,g;case 7:return h=new PCd,h;case 8:return d=new rzd,d;case 9:return c=new Xxd,c;case 10:return e=new Rzd,e;case 11:return i=new _Cd,i;default:throw Adb(new agb(ZHe+a.zb+WHe));}};_.ti=function NAd(a,b){switch(a.hk()){case 13:case 12:return null;default:throw Adb(new agb(VHe+a.xe()+WHe));}};var S4=sfb(THe,'ElkGraphFactoryImpl',1037);feb(448,158,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1});_.Gh=function RAd(){var a,b;b=(a=RD(Ywd(this,16),29),P$d(rYd(!a?this.ii():a)));return b==null?(N2d(),N2d(),M2d):new e3d(this,b)};_.Lh=function SAd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.xe();}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Wh=function TAd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function UAd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:this.ui(WD(b));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function VAd(){return JTd(),yTd};_.ki=function WAd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:this.ui(null);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.xe=function XAd(){return this.zb};_.ui=function YAd(a){PAd(this,a)};_.Ib=function ZAd(){return QAd(this)};_.zb=null;var o8=sfb(SHe,'ENamedElementImpl',448);feb(184,448,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},EBd);_.Ah=function GBd(a){return qBd(this,a)};_.Lh=function HBd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return !this.rb&&(this.rb=new J5d(this,i7,this)),this.rb;case 6:return !this.vb&&(this.vb=new G5d(t7,this,6,7)),this.vb;case 7:if(b)return this.Db>>16==7?RD(this.Cb,241):null;return gBd(this);}return zvd(this,a-AYd((JTd(),CTd)),vYd((d=RD(Ywd(this,16),29),!d?CTd:d),a),b,c)};_.Sh=function IBd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 4:!!this.sb&&(c=RD(this.sb,54).Th(this,1,n7,c));return hBd(this,RD(a,479),c);case 5:return !this.rb&&(this.rb=new J5d(this,i7,this)),qLd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new G5d(t7,this,6,7)),qLd(this.vb,a,c);case 7:!!this.Cb&&(c=(e=this.Db>>16,e>=0?qBd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,7,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),CTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),CTd)),a,c)};_.Uh=function JBd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 4:return hBd(this,null,c);case 5:return !this.rb&&(this.rb=new J5d(this,i7,this)),rLd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new G5d(t7,this,6,7)),rLd(this.vb,a,c);case 7:return xvd(this,null,7,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),CTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),CTd)),a,c)};_.Wh=function KBd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return !!this.sb;case 5:return !!this.rb&&this.rb.i!=0;case 6:return !!this.vb&&this.vb.i!=0;case 7:return !!gBd(this);}return Avd(this,a-AYd((JTd(),CTd)),vYd((b=RD(Ywd(this,16),29),!b?CTd:b),a))};_.Zh=function LBd(a){var b;b=sBd(this,a);return b?b:_zd(this,a)};_.bi=function MBd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:PAd(this,WD(b));return;case 2:DBd(this,WD(b));return;case 3:CBd(this,WD(b));return;case 4:BBd(this,RD(b,479));return;case 5:!this.rb&&(this.rb=new J5d(this,i7,this));sLd(this.rb);!this.rb&&(this.rb=new J5d(this,i7,this));YGd(this.rb,RD(b,16));return;case 6:!this.vb&&(this.vb=new G5d(t7,this,6,7));sLd(this.vb);!this.vb&&(this.vb=new G5d(t7,this,6,7));YGd(this.vb,RD(b,16));return;}Bvd(this,a-AYd((JTd(),CTd)),vYd((c=RD(Ywd(this,16),29),!c?CTd:c),a),b)};_.ei=function NBd(a){var b,c;if(!!a&&!!this.rb){for(c=new dMd(this.rb);c.e!=c.i.gc();){b=bMd(c);ZD(b,364)&&(RD(b,364).w=null)}}$wd(this,64,a)};_.ii=function OBd(){return JTd(),CTd};_.ki=function PBd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:PAd(this,null);return;case 2:DBd(this,null);return;case 3:CBd(this,null);return;case 4:BBd(this,null);return;case 5:!this.rb&&(this.rb=new J5d(this,i7,this));sLd(this.rb);return;case 6:!this.vb&&(this.vb=new G5d(t7,this,6,7));sLd(this.vb);return;}Cvd(this,a-AYd((JTd(),CTd)),vYd((b=RD(Ywd(this,16),29),!b?CTd:b),a))};_.pi=function QBd(){rBd(this)};_.vi=function RBd(){return !this.rb&&(this.rb=new J5d(this,i7,this)),this.rb};_.wi=function SBd(){return this.sb};_.xi=function TBd(){return this.ub};_.yi=function UBd(){return this.xb};_.zi=function VBd(){return this.yb};_.Ai=function WBd(a){this.ub=a};_.Ib=function XBd(){var a;if((this.Db&64)!=0)return QAd(this);a=new Shb(QAd(this));a.a+=' (nsURI: ';Nhb(a,this.yb);a.a+=', nsPrefix: ';Nhb(a,this.xb);a.a+=')';return a.a};_.xb=null;_.yb=null;var $Ad;var y8=sfb(SHe,'EPackageImpl',184);feb(569,184,{110:1,2115:1,569:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},_Bd);_.q=false;_.r=false;var YBd=false;var T4=sfb(THe,'ElkGraphPackageImpl',569);feb(366,740,{110:1,342:1,167:1,135:1,422:1,366:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},hCd);_.Ah=function iCd(a){return cCd(this,a)};_.Lh=function jCd(a,b,c){switch(a){case 7:return dCd(this);case 8:return this.a;}return vyd(this,a,b,c)};_.Sh=function kCd(a,b,c){var d;switch(b){case 7:!!this.Cb&&(c=(d=this.Db>>16,d>=0?cCd(this,c):this.Cb.Th(this,-1-d,null,c)));return bCd(this,RD(a,167),c);}return dyd(this,a,b,c)};_.Uh=function lCd(a,b,c){if(b==7){return bCd(this,null,c)}return eyd(this,a,b,c)};_.Wh=function mCd(a){switch(a){case 7:return !!dCd(this);case 8:return !lhb('',this.a);}return wyd(this,a)};_.bi=function nCd(a,b){switch(a){case 7:eCd(this,RD(b,167));return;case 8:fCd(this,WD(b));return;}xyd(this,a,b)};_.ii=function oCd(){return pvd(),jvd};_.ki=function pCd(a){switch(a){case 7:eCd(this,null);return;case 8:fCd(this,'');return;}yyd(this,a)};_.Ib=function qCd(){return gCd(this)};_.a='';var U4=sfb(THe,'ElkLabelImpl',366);feb(207,741,{110:1,342:1,84:1,167:1,27:1,422:1,207:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},ACd);_.Ah=function BCd(a){return sCd(this,a)};_.Lh=function CCd(a,b,c){switch(a){case 9:return !this.c&&(this.c=new C5d(K4,this,9,9)),this.c;case 10:return !this.a&&(this.a=new C5d(J4,this,10,11)),this.a;case 11:return vCd(this);case 12:return !this.b&&(this.b=new C5d(G4,this,12,3)),this.b;case 13:return Geb(),!this.a&&(this.a=new C5d(J4,this,10,11)),this.a.i>0?true:false;}return Uyd(this,a,b,c)};_.Sh=function DCd(a,b,c){var d;switch(b){case 9:return !this.c&&(this.c=new C5d(K4,this,9,9)),qLd(this.c,a,c);case 10:return !this.a&&(this.a=new C5d(J4,this,10,11)),qLd(this.a,a,c);case 11:!!this.Cb&&(c=(d=this.Db>>16,d>=0?sCd(this,c):this.Cb.Th(this,-1-d,null,c)));return rCd(this,RD(a,27),c);case 12:return !this.b&&(this.b=new C5d(G4,this,12,3)),qLd(this.b,a,c);}return Vyd(this,a,b,c)};_.Uh=function ECd(a,b,c){switch(b){case 9:return !this.c&&(this.c=new C5d(K4,this,9,9)),rLd(this.c,a,c);case 10:return !this.a&&(this.a=new C5d(J4,this,10,11)),rLd(this.a,a,c);case 11:return rCd(this,null,c);case 12:return !this.b&&(this.b=new C5d(G4,this,12,3)),rLd(this.b,a,c);}return Wyd(this,a,b,c)};_.Wh=function FCd(a){switch(a){case 9:return !!this.c&&this.c.i!=0;case 10:return !!this.a&&this.a.i!=0;case 11:return !!vCd(this);case 12:return !!this.b&&this.b.i!=0;case 13:return !this.a&&(this.a=new C5d(J4,this,10,11)),this.a.i>0;}return Xyd(this,a)};_.bi=function GCd(a,b){switch(a){case 9:!this.c&&(this.c=new C5d(K4,this,9,9));sLd(this.c);!this.c&&(this.c=new C5d(K4,this,9,9));YGd(this.c,RD(b,16));return;case 10:!this.a&&(this.a=new C5d(J4,this,10,11));sLd(this.a);!this.a&&(this.a=new C5d(J4,this,10,11));YGd(this.a,RD(b,16));return;case 11:yCd(this,RD(b,27));return;case 12:!this.b&&(this.b=new C5d(G4,this,12,3));sLd(this.b);!this.b&&(this.b=new C5d(G4,this,12,3));YGd(this.b,RD(b,16));return;}Yyd(this,a,b)};_.ii=function HCd(){return pvd(),kvd};_.ki=function ICd(a){switch(a){case 9:!this.c&&(this.c=new C5d(K4,this,9,9));sLd(this.c);return;case 10:!this.a&&(this.a=new C5d(J4,this,10,11));sLd(this.a);return;case 11:yCd(this,null);return;case 12:!this.b&&(this.b=new C5d(G4,this,12,3));sLd(this.b);return;}Zyd(this,a)};_.Ib=function JCd(){return zCd(this)};var V4=sfb(THe,'ElkNodeImpl',207);feb(193,741,{110:1,342:1,84:1,167:1,123:1,422:1,193:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},PCd);_.Ah=function QCd(a){return LCd(this,a)};_.Lh=function RCd(a,b,c){if(a==9){return MCd(this)}return Uyd(this,a,b,c)};_.Sh=function SCd(a,b,c){var d;switch(b){case 9:!!this.Cb&&(c=(d=this.Db>>16,d>=0?LCd(this,c):this.Cb.Th(this,-1-d,null,c)));return KCd(this,RD(a,27),c);}return Vyd(this,a,b,c)};_.Uh=function TCd(a,b,c){if(b==9){return KCd(this,null,c)}return Wyd(this,a,b,c)};_.Wh=function UCd(a){if(a==9){return !!MCd(this)}return Xyd(this,a)};_.bi=function VCd(a,b){switch(a){case 9:NCd(this,RD(b,27));return;}Yyd(this,a,b)};_.ii=function WCd(){return pvd(),lvd};_.ki=function XCd(a){switch(a){case 9:NCd(this,null);return;}Zyd(this,a)};_.Ib=function YCd(){return OCd(this)};var W4=sfb(THe,'ElkPortImpl',193);var O6=ufb(sIe,'BasicEMap/Entry');feb(1122,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,119:1,120:1},_Cd);_.Fb=function fDd(a){return this===a};_.ld=function hDd(){return this.b};_.Hb=function jDd(){return kFb(this)};_.Di=function lDd(a){ZCd(this,RD(a,149))};_.Lh=function aDd(a,b,c){switch(a){case 0:return this.b;case 1:return this.c;}return Dvd(this,a,b,c)};_.Wh=function bDd(a){switch(a){case 0:return !!this.b;case 1:return this.c!=null;}return Kvd(this,a)};_.bi=function cDd(a,b){switch(a){case 0:ZCd(this,RD(b,149));return;case 1:$Cd(this,b);return;}Wvd(this,a,b)};_.ii=function dDd(){return pvd(),mvd};_.ki=function eDd(a){switch(a){case 0:ZCd(this,null);return;case 1:$Cd(this,null);return;}$vd(this,a)};_.Bi=function gDd(){var a;if(this.a==-1){a=this.b;this.a=!a?0:tb(a)}return this.a};_.md=function iDd(){return this.c};_.Ci=function kDd(a){this.a=a};_.nd=function mDd(a){var b;b=this.c;$Cd(this,a);return b};_.Ib=function nDd(){var a;if((this.Db&64)!=0)return awd(this);a=new bib;Zhb(Zhb(Zhb(a,this.b?this.b.Pg():vve),SAe),Ghb(this.c));return a.a};_.a=-1;_.c=null;var X4=sfb(THe,'ElkPropertyToValueMapEntryImpl',1122);feb(996,1,{},BDd);var Z4=sfb(vIe,'JsonAdapter',996);feb(216,63,swe,CDd);var $4=sfb(vIe,'JsonImportException',216);feb(868,1,{},IEd);var O5=sfb(vIe,'JsonImporter',868);feb(903,1,{},JEd);var _4=sfb(vIe,'JsonImporter/lambda$0$Type',903);feb(904,1,{},KEd);var a5=sfb(vIe,'JsonImporter/lambda$1$Type',904);feb(912,1,{},LEd);var b5=sfb(vIe,'JsonImporter/lambda$10$Type',912);feb(914,1,{},MEd);var c5=sfb(vIe,'JsonImporter/lambda$11$Type',914);feb(915,1,{},NEd);var d5=sfb(vIe,'JsonImporter/lambda$12$Type',915);feb(921,1,{},OEd);var e5=sfb(vIe,'JsonImporter/lambda$13$Type',921);feb(920,1,{},PEd);var f5=sfb(vIe,'JsonImporter/lambda$14$Type',920);feb(916,1,{},QEd);var g5=sfb(vIe,'JsonImporter/lambda$15$Type',916);feb(917,1,{},REd);var h5=sfb(vIe,'JsonImporter/lambda$16$Type',917);feb(918,1,{},SEd);var i5=sfb(vIe,'JsonImporter/lambda$17$Type',918);feb(919,1,{},TEd);var j5=sfb(vIe,'JsonImporter/lambda$18$Type',919);feb(924,1,{},UEd);var k5=sfb(vIe,'JsonImporter/lambda$19$Type',924);feb(905,1,{},VEd);var l5=sfb(vIe,'JsonImporter/lambda$2$Type',905);feb(922,1,{},WEd);var m5=sfb(vIe,'JsonImporter/lambda$20$Type',922);feb(923,1,{},XEd);var n5=sfb(vIe,'JsonImporter/lambda$21$Type',923);feb(927,1,{},YEd);var o5=sfb(vIe,'JsonImporter/lambda$22$Type',927);feb(925,1,{},ZEd);var p5=sfb(vIe,'JsonImporter/lambda$23$Type',925);feb(926,1,{},$Ed);var q5=sfb(vIe,'JsonImporter/lambda$24$Type',926);feb(929,1,{},_Ed);var r5=sfb(vIe,'JsonImporter/lambda$25$Type',929);feb(928,1,{},aFd);var s5=sfb(vIe,'JsonImporter/lambda$26$Type',928);feb(930,1,Qve,bFd);_.Cd=function cFd(a){_Dd(this.b,this.a,WD(a))};var t5=sfb(vIe,'JsonImporter/lambda$27$Type',930);feb(931,1,Qve,dFd);_.Cd=function eFd(a){aEd(this.b,this.a,WD(a))};var u5=sfb(vIe,'JsonImporter/lambda$28$Type',931);feb(932,1,{},fFd);var v5=sfb(vIe,'JsonImporter/lambda$29$Type',932);feb(908,1,{},gFd);var w5=sfb(vIe,'JsonImporter/lambda$3$Type',908);feb(933,1,{},hFd);var x5=sfb(vIe,'JsonImporter/lambda$30$Type',933);feb(934,1,{},iFd);var y5=sfb(vIe,'JsonImporter/lambda$31$Type',934);feb(935,1,{},jFd);var z5=sfb(vIe,'JsonImporter/lambda$32$Type',935);feb(936,1,{},kFd);var A5=sfb(vIe,'JsonImporter/lambda$33$Type',936);feb(937,1,{},lFd);var B5=sfb(vIe,'JsonImporter/lambda$34$Type',937);feb(870,1,{},nFd);var C5=sfb(vIe,'JsonImporter/lambda$35$Type',870);feb(941,1,{},pFd);var D5=sfb(vIe,'JsonImporter/lambda$36$Type',941);feb(938,1,Qve,qFd);_.Cd=function rFd(a){jEd(this.a,RD(a,377))};var E5=sfb(vIe,'JsonImporter/lambda$37$Type',938);feb(939,1,Qve,sFd);_.Cd=function tFd(a){kEd(this.a,this.b,RD(a,166))};var F5=sfb(vIe,'JsonImporter/lambda$38$Type',939);feb(940,1,Qve,uFd);_.Cd=function vFd(a){lEd(this.a,this.b,RD(a,166))};var G5=sfb(vIe,'JsonImporter/lambda$39$Type',940);feb(906,1,{},wFd);var H5=sfb(vIe,'JsonImporter/lambda$4$Type',906);feb(942,1,Qve,xFd);_.Cd=function yFd(a){mEd(this.a,RD(a,8))};var I5=sfb(vIe,'JsonImporter/lambda$40$Type',942);feb(907,1,{},zFd);var J5=sfb(vIe,'JsonImporter/lambda$5$Type',907);feb(911,1,{},AFd);var K5=sfb(vIe,'JsonImporter/lambda$6$Type',911);feb(909,1,{},BFd);var L5=sfb(vIe,'JsonImporter/lambda$7$Type',909);feb(910,1,{},CFd);var M5=sfb(vIe,'JsonImporter/lambda$8$Type',910);feb(913,1,{},DFd);var N5=sfb(vIe,'JsonImporter/lambda$9$Type',913);feb(961,1,Qve,MFd);_.Cd=function NFd(a){oDd(this.a,new OC(WD(a)))};var P5=sfb(vIe,'JsonMetaDataConverter/lambda$0$Type',961);feb(962,1,Qve,OFd);_.Cd=function PFd(a){IFd(this.a,RD(a,245))};var Q5=sfb(vIe,'JsonMetaDataConverter/lambda$1$Type',962);feb(963,1,Qve,QFd);_.Cd=function RFd(a){JFd(this.a,RD(a,143))};var R5=sfb(vIe,'JsonMetaDataConverter/lambda$2$Type',963);feb(964,1,Qve,SFd);_.Cd=function TFd(a){KFd(this.a,RD(a,170))};var S5=sfb(vIe,'JsonMetaDataConverter/lambda$3$Type',964);feb(245,22,{3:1,34:1,22:1,245:1},bGd);var UFd,VFd,WFd,XFd,YFd,ZFd,$Fd,_Fd;var T5=tfb(jze,'GraphFeature',245,WI,dGd,cGd);var eGd;feb(11,1,{34:1,149:1},jGd,kGd,lGd,mGd);_.Fd=function nGd(a){return gGd(this,RD(a,149))};_.Fb=function oGd(a){return hGd(this,a)};_.Sg=function pGd(){return iGd(this)};_.Pg=function qGd(){return this.b};_.Hb=function rGd(){return ohb(this.b)};_.Ib=function sGd(){return this.b};var Y5=sfb(jze,'Property',11);feb(671,1,fye,uGd);_.Ne=function vGd(a,b){return tGd(this,RD(a,96),RD(b,96))};_.Fb=function wGd(a){return this===a};_.Oe=function xGd(){return new Frb(this)};var X5=sfb(jze,'PropertyHolderComparator',671);feb(709,1,Ave,QGd);_.Nb=function RGd(a){Ztb(this,a)};_.Pb=function TGd(){return PGd(this)};_.Qb=function UGd(){$tb()};_.Ob=function SGd(){return !!this.a};var Z5=sfb(KIe,'ElkGraphUtil/AncestorIterator',709);var Y6=ufb(sIe,'EList');feb(70,56,{20:1,31:1,56:1,16:1,15:1,70:1,61:1});_.bd=function hHd(a,b){VGd(this,a,b)};_.Fc=function iHd(a){return WGd(this,a)};_.cd=function jHd(a,b){return XGd(this,a,b)};_.Gc=function kHd(a){return YGd(this,a)};_.Ii=function lHd(){return new yMd(this)};_.Ji=function mHd(){return new BMd(this)};_.Ki=function nHd(a){return ZGd(this,a)};_.Li=function oHd(){return true};_.Mi=function pHd(a,b){};_.Ni=function qHd(){};_.Oi=function rHd(a,b){$Gd(this,a,b)};_.Pi=function sHd(a,b,c){};_.Qi=function tHd(a,b){};_.Ri=function uHd(a,b,c){};_.Fb=function vHd(a){return _Gd(this,a)};_.Hb=function wHd(){return cHd(this)};_.Si=function xHd(){return false};_.Kc=function yHd(){return new dMd(this)};_.ed=function zHd(){return new mMd(this)};_.fd=function AHd(a){var b;b=this.gc();if(a<0||a>b)throw Adb(new aMd(a,b));return new nMd(this,a)};_.Ui=function BHd(a,b){this.Ti(a,this.dd(b))};_.Mc=function CHd(a){return dHd(this,a)};_.Wi=function DHd(a,b){return b};_.hd=function EHd(a,b){return eHd(this,a,b)};_.Ib=function FHd(){return fHd(this)};_.Yi=function GHd(){return true};_.Zi=function HHd(a,b){return gHd(this,b)};var u6=sfb(sIe,'AbstractEList',70);feb(66,70,PIe,YHd,ZHd,$Hd);_.Ei=function _Hd(a,b){return IHd(this,a,b)};_.Fi=function aId(a){return JHd(this,a)};_.Gi=function bId(a,b){KHd(this,a,b)};_.Hi=function cId(a){LHd(this,a)};_.$i=function dId(a){return NHd(this,a)};_.$b=function eId(){OHd(this)};_.Hc=function fId(a){return PHd(this,a)};_.Xb=function gId(a){return QHd(this,a)};_._i=function hId(a){var b,c,d;++this.j;c=this.g==null?0:this.g.length;if(a>c){d=this.g;b=c+(c/2|0)+4;b<a&&(b=a);this.g=this.aj(b);d!=null&&hib(d,0,this.g,0,this.i)}};_.dd=function iId(a){return RHd(this,a)};_.dc=function jId(){return this.i==0};_.Ti=function kId(a,b){return SHd(this,a,b)};_.aj=function lId(a){return $C(jJ,rve,1,a,5,1)};_.Vi=function mId(a){return this.g[a]};_.gd=function nId(a){return THd(this,a)};_.Xi=function oId(a,b){return UHd(this,a,b)};_.gc=function pId(){return this.i};_.Pc=function qId(){return WHd(this)};_.Qc=function rId(a){return XHd(this,a)};_.i=0;var D6=sfb(sIe,'BasicEList',66);var a7=ufb(sIe,'TreeIterator');feb(708,66,QIe);_.Nb=function vId(a){Ztb(this,a)};_.Ob=function wId(){return this.g==null&&!this.c?sId(this):this.g==null||this.i!=0&&RD(this.g[this.i-1],51).Ob()};_.Pb=function xId(){return tId(this)};_.Qb=function yId(){if(!this.e){throw Adb(new dgb('There is no valid object to remove.'))}this.e.Qb()};_.c=false;var v6=sfb(sIe,'AbstractTreeIterator',708);feb(700,708,QIe,zId);_.bj=function AId(a){var b;b=RD(a,58).Gh().Kc();ZD(b,287)&&RD(b,287).wl(new BId);return b};var _5=sfb(KIe,'ElkGraphUtil/PropertiesSkippingTreeIterator',700);feb(965,1,{},BId);var $5=sfb(KIe,'ElkGraphUtil/PropertiesSkippingTreeIterator/1',965);var CId,DId;var b6=sfb(KIe,'ElkReflect',null);feb(901,1,CGe,JId);_.Rg=function KId(a){return EId(),Asb(RD(a,181))};var a6=sfb(KIe,'ElkReflect/lambda$0$Type',901);var LId;var _6=ufb(sIe,'ResourceLocator');feb(1065,1,{});var S6=sfb(sIe,'DelegatingResourceLocator',1065);feb(1066,1065,{});var c6=sfb('org.eclipse.emf.common','EMFPlugin',1066);var d6=ufb(DJe,'Adapter');var e6=ufb(DJe,'Notification');feb(1174,1,EJe);_.cj=function VId(){return this.d};_.dj=function WId(a){};_.ej=function XId(a){this.d=a};_.fj=function YId(a){this.d==a&&(this.d=null)};_.d=null;var f6=sfb(JHe,'AdapterImpl',1174);feb(2093,70,FJe);_.Ei=function dJd(a,b){return ZId(this,a,b)};_.Fi=function eJd(a){var b,c,d;++this.j;if(a.dc()){return false}else{b=this.Ej();for(d=a.Kc();d.Ob();){c=d.Pb();this.rj(this.Zi(b,c));++b}return true}};_.Gi=function fJd(a,b){$Id(this,a,b)};_.Hi=function gJd(a){_Id(this,a)};_.pj=function hJd(){return this.sj()};_.$b=function iJd(){aJd(this,this.Ej(),this.Fj())};_.Hc=function jJd(a){return this.uj(a)};_.Ic=function kJd(a){return this.vj(a)};_.qj=function lJd(a,b){this.Bj().Um()};_.rj=function mJd(a){this.Bj().Um()};_.sj=function nJd(){return this.Bj()};_.tj=function oJd(){this.Bj().Um()};_.uj=function pJd(a){return this.Bj().Um()};_.vj=function qJd(a){return this.Bj().Um()};_.wj=function rJd(a){return this.Bj().Um()};_.xj=function sJd(a){return this.Bj().Um()};_.yj=function tJd(){return this.Bj().Um()};_.zj=function uJd(a){return this.Bj().Um()};_.Aj=function vJd(){return this.Bj().Um()};_.Cj=function wJd(a){return this.Bj().Um()};_.Dj=function xJd(a,b){return this.Bj().Um()};_.Ej=function yJd(){return this.Bj().Um()};_.Fj=function zJd(){return this.Bj().Um()};_.Gj=function AJd(a){return this.Bj().Um()};_.Hj=function BJd(){return this.Bj().Um()};_.Fb=function CJd(a){return this.wj(a)};_.Xb=function DJd(a){return this.Wi(a,this.xj(a))};_.Hb=function EJd(){return this.yj()};_.dd=function FJd(a){return this.zj(a)};_.dc=function GJd(){return this.Aj()};_.Ti=function HJd(a,b){return bJd(this,a,b)};_.Vi=function IJd(a){return this.xj(a)};_.gd=function JJd(a){return cJd(this,a)};_.Mc=function KJd(a){var b;b=this.dd(a);if(b>=0){this.gd(b);return true}else{return false}};_.Xi=function LJd(a,b){return this.Dj(a,this.Zi(a,b))};_.gc=function MJd(){return this.Ej()};_.Pc=function NJd(){return this.Fj()};_.Qc=function OJd(a){return this.Gj(a)};_.Ib=function PJd(){return this.Hj()};var R6=sfb(sIe,'DelegatingEList',2093);feb(2094,2093,FJe);_.Ei=function XJd(a,b){return QJd(this,a,b)};_.Fi=function YJd(a){return this.Ei(this.Ej(),a)};_.Gi=function ZJd(a,b){RJd(this,a,b)};_.Hi=function $Jd(a){SJd(this,a)};_.Li=function _Jd(){return !this.Mj()};_.$b=function aKd(){VJd(this)};_.Ij=function bKd(a,b,c,d,e){return new aLd(this,a,b,c,d,e)};_.Jj=function cKd(a){qvd(this.jj(),a)};_.Kj=function dKd(){return null};_.Lj=function eKd(){return -1};_.jj=function fKd(){return null};_.Mj=function gKd(){return false};_.Nj=function hKd(a,b){return b};_.Oj=function iKd(a,b){return b};_.Pj=function jKd(){return false};_.Qj=function kKd(){return !this.Aj()};_.Ti=function lKd(a,b){var c,d;if(this.Pj()){d=this.Qj();c=bJd(this,a,b);this.Jj(this.Ij(7,sgb(b),c,a,d));return c}else{return bJd(this,a,b)}};_.gd=function mKd(a){var b,c,d,e;if(this.Pj()){c=null;d=this.Qj();b=this.Ij(4,e=cJd(this,a),null,a,d);if(this.Mj()&&!!e){c=this.Oj(e,c);if(!c){this.Jj(b)}else{c.nj(b);c.oj()}}else{if(!c){this.Jj(b)}else{c.nj(b);c.oj()}}return e}else{e=cJd(this,a);if(this.Mj()&&!!e){c=this.Oj(e,null);!!c&&c.oj()}return e}};_.Xi=function nKd(a,b){return WJd(this,a,b)};var i6=sfb(JHe,'DelegatingNotifyingListImpl',2094);feb(152,1,GJe);_.nj=function PKd(a){return oKd(this,a)};_.oj=function QKd(){pKd(this)};_.gj=function RKd(){return this.d};_.Kj=function SKd(){return null};_.Rj=function TKd(){return null};_.hj=function UKd(a){return -1};_.ij=function VKd(){return yKd(this)};_.jj=function WKd(){return null};_.kj=function XKd(){return HKd(this)};_.lj=function YKd(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o};_.Sj=function ZKd(){return false};_.mj=function $Kd(a){var b,c,d,e,f,g,h,i,j,k,l;switch(this.d){case 1:case 2:{e=a.gj();switch(e){case 1:case 2:{f=a.jj();if(dE(f)===dE(this.jj())&&this.hj(null)==a.hj(null)){this.g=a.ij();a.gj()==1&&(this.d=1);return true}}}}case 4:{e=a.gj();switch(e){case 4:{f=a.jj();if(dE(f)===dE(this.jj())&&this.hj(null)==a.hj(null)){j=JKd(this);i=this.o<0?this.o<-2?-2-this.o-1:-1:this.o;g=a.lj();this.d=6;l=new ZHd(2);if(i<=g){WGd(l,this.n);WGd(l,a.kj());this.g=cD(WC(kE,1),Pwe,28,15,[this.o=i,g+1])}else{WGd(l,a.kj());WGd(l,this.n);this.g=cD(WC(kE,1),Pwe,28,15,[this.o=g,i])}this.n=l;j||(this.o=-2-this.o-1);return true}break}}break}case 6:{e=a.gj();switch(e){case 4:{f=a.jj();if(dE(f)===dE(this.jj())&&this.hj(null)==a.hj(null)){j=JKd(this);g=a.lj();k=RD(this.g,53);d=$C(kE,Pwe,28,k.length+1,15,1);b=0;while(b<k.length){h=k[b];if(h<=g){d[b++]=h;++g}else{break}}c=RD(this.n,15);c.bd(b,a.kj());d[b]=g;while(++b<d.length){d[b]=k[b-1]}this.g=d;j||(this.o=-2-d[0]);return true}break}}break}}return false};_.Ib=function _Kd(){var a,b,c,d;d=new Shb(nfb(this.Rm)+'@'+(b=tb(this)>>>0,b.toString(16)));d.a+=' (eventType: ';switch(this.d){case 1:{d.a+='SET';break}case 2:{d.a+='UNSET';break}case 3:{d.a+='ADD';break}case 5:{d.a+='ADD_MANY';break}case 4:{d.a+='REMOVE';break}case 6:{d.a+='REMOVE_MANY';break}case 7:{d.a+='MOVE';break}case 8:{d.a+='REMOVING_ADAPTER';break}case 9:{d.a+='RESOLVE';break}default:{Lhb(d,this.d);break}}IKd(this)&&(d.a+=', touch: true',d);d.a+=', position: ';Lhb(d,this.o<0?this.o<-2?-2-this.o-1:-1:this.o);d.a+=', notifier: ';Mhb(d,this.jj());d.a+=', feature: ';Mhb(d,this.Kj());d.a+=', oldValue: ';Mhb(d,HKd(this));d.a+=', newValue: ';if(this.d==6&&ZD(this.g,53)){c=RD(this.g,53);d.a+='[';for(a=0;a<c.length;){d.a+=c[a];++a<c.length&&(d.a+=pve,d)}d.a+=']'}else{Mhb(d,yKd(this))}d.a+=', isTouch: ';Ohb(d,IKd(this));d.a+=', wasSet: ';Ohb(d,JKd(this));d.a+=')';return d.a};_.d=0;_.e=0;_.f=0;_.j=0;_.k=0;_.o=0;_.p=0;var k6=sfb(JHe,'NotificationImpl',152);feb(1188,152,GJe,aLd);_.Kj=function bLd(){return this.a.Kj()};_.hj=function cLd(a){return this.a.Lj()};_.jj=function dLd(){return this.a.jj()};var h6=sfb(JHe,'DelegatingNotifyingListImpl/1',1188);feb(251,66,PIe,fLd,gLd);_.Fc=function hLd(a){return eLd(this,RD(a,378))};_.nj=function iLd(a){return eLd(this,a)};_.oj=function jLd(){var a,b,c;for(a=0;a<this.i;++a){b=RD(this.g[a],378);c=b.jj();c!=null&&b.gj()!=-1&&RD(c,94).xh(b)}};_.aj=function kLd(a){return $C(e6,rve,378,a,0,1)};var j6=sfb(JHe,'NotificationChainImpl',251);feb(1524,93,IHe);_.uh=function lLd(){return this.e};_.wh=function mLd(){return (this.f&1)!=0};_.f=1;var l6=sfb(JHe,'NotifierImpl',1524);feb(2091,66,PIe);_.Ei=function yLd(a,b){return nLd(this,a,b)};_.Fi=function zLd(a){return this.Ei(this.i,a)};_.Gi=function ALd(a,b){oLd(this,a,b)};_.Hi=function BLd(a){pLd(this,a)};_.Li=function CLd(){return !this.Mj()};_.$b=function DLd(){sLd(this)};_.Ij=function ELd(a,b,c,d,e){return new VLd(this,a,b,c,d,e)};_.Jj=function FLd(a){qvd(this.jj(),a)};_.Kj=function GLd(){return null};_.Lj=function HLd(){return -1};_.jj=function ILd(){return null};_.Mj=function JLd(){return false};_.Tj=function KLd(){return false};_.Nj=function LLd(a,b){return b};_.Oj=function MLd(a,b){return b};_.Pj=function NLd(){return false};_.Qj=function OLd(){return this.i!=0};_.Ti=function PLd(a,b){return uLd(this,a,b)};_.gd=function QLd(a){return vLd(this,a)};_.Xi=function RLd(a,b){return xLd(this,a,b)};_.Uj=function SLd(a,b){return b};_.Vj=function TLd(a,b){return b};_.Wj=function ULd(a,b,c){return c};var n6=sfb(JHe,'NotifyingListImpl',2091);feb(1187,152,GJe,VLd);_.Kj=function WLd(){return this.a.Kj()};_.hj=function XLd(a){return this.a.Lj()};_.jj=function YLd(){return this.a.jj()};var m6=sfb(JHe,'NotifyingListImpl/1',1187);feb(966,66,PIe,ZLd);_.Hc=function $Ld(a){if(this.i>10){if(!this.b||this.c.j!=this.a){this.b=new btb(this);this.a=this.j}return Zsb(this.b,a)}else{return PHd(this,a)}};_.Yi=function _Ld(){return true};_.a=0;var o6=sfb(sIe,'AbstractEList/1',966);feb(301,77,lxe,aMd);var p6=sfb(sIe,'AbstractEList/BasicIndexOutOfBoundsException',301);feb(40,1,Ave,dMd);_.Nb=function gMd(a){Ztb(this,a)};_.Xj=function eMd(){if(this.i.j!=this.f){throw Adb(new Jrb)}};_.Yj=function fMd(){return bMd(this)};_.Ob=function hMd(){return this.e!=this.i.gc()};_.Pb=function iMd(){return this.Yj()};_.Qb=function jMd(){cMd(this)};_.e=0;_.f=0;_.g=-1;var q6=sfb(sIe,'AbstractEList/EIterator',40);feb(286,40,Jve,mMd,nMd);_.Qb=function vMd(){cMd(this)};_.Rb=function oMd(a){kMd(this,a)};_.Zj=function pMd(){var b;try{b=this.d.Xb(--this.e);this.Xj();this.g=this.e;return b}catch(a){a=zdb(a);if(ZD(a,77)){this.Xj();throw Adb(new Dvb)}else throw Adb(a)}};_.$j=function qMd(a){lMd(this,a)};_.Sb=function rMd(){return this.e!=0};_.Tb=function sMd(){return this.e};_.Ub=function tMd(){return this.Zj()};_.Vb=function uMd(){return this.e-1};_.Wb=function wMd(a){this.$j(a)};var r6=sfb(sIe,'AbstractEList/EListIterator',286);feb(355,40,Ave,yMd);_.Yj=function zMd(){return xMd(this)};_.Qb=function AMd(){throw Adb(new jib)};var s6=sfb(sIe,'AbstractEList/NonResolvingEIterator',355);feb(398,286,Jve,BMd,CMd);_.Rb=function DMd(a){throw Adb(new jib)};_.Yj=function EMd(){var b;try{b=this.c.Vi(this.e);this.Xj();this.g=this.e++;return b}catch(a){a=zdb(a);if(ZD(a,77)){this.Xj();throw Adb(new Dvb)}else throw Adb(a)}};_.Zj=function FMd(){var b;try{b=this.c.Vi(--this.e);this.Xj();this.g=this.e;return b}catch(a){a=zdb(a);if(ZD(a,77)){this.Xj();throw Adb(new Dvb)}else throw Adb(a)}};_.Qb=function GMd(){throw Adb(new jib)};_.Wb=function HMd(a){throw Adb(new jib)};var t6=sfb(sIe,'AbstractEList/NonResolvingEListIterator',398);feb(2080,70,JJe);_.Ei=function PMd(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b.gc();if(e!=0){j=RD(Ywd(this.a,4),129);k=j==null?0:j.length;m=k+e;d=NMd(this,m);l=k-a;l>0&&hib(j,a,d,a+e,l);i=b.Kc();for(g=0;g<e;++g){h=i.Pb();c=a+g;LMd(d,c,gHd(this,h))}Bde(this,d);for(f=0;f<e;++f){h=d[a];this.Mi(a,h);++a}return true}else{++this.j;return false}};_.Fi=function QMd(a){var b,c,d,e,f,g,h,i,j;d=a.gc();if(d!=0){i=(c=RD(Ywd(this.a,4),129),c==null?0:c.length);j=i+d;b=NMd(this,j);h=a.Kc();for(f=i;f<j;++f){g=h.Pb();LMd(b,f,gHd(this,g))}Bde(this,b);for(e=i;e<j;++e){g=b[e];this.Mi(e,g)}return true}else{++this.j;return false}};_.Gi=function RMd(a,b){var c,d,e,f;d=RD(Ywd(this.a,4),129);e=d==null?0:d.length;c=NMd(this,e+1);f=gHd(this,b);a!=e&&hib(d,a,c,a+1,e-a);bD(c,a,f);Bde(this,c);this.Mi(a,b)};_.Hi=function SMd(a){var b,c,d;d=(c=RD(Ywd(this.a,4),129),c==null?0:c.length);b=NMd(this,d+1);LMd(b,d,gHd(this,a));Bde(this,b);this.Mi(d,a)};_.Ii=function TMd(){return new sNd(this)};_.Ji=function UMd(){return new vNd(this)};_.Ki=function VMd(a){var b,c;c=(b=RD(Ywd(this.a,4),129),b==null?0:b.length);if(a<0||a>c)throw Adb(new aMd(a,c));return new wNd(this,a)};_.$b=function WMd(){var a,b;++this.j;a=RD(Ywd(this.a,4),129);b=a==null?0:a.length;Bde(this,null);$Gd(this,b,a)};_.Hc=function XMd(a){var b,c,d,e,f;b=RD(Ywd(this.a,4),129);if(b!=null){if(a!=null){for(d=b,e=0,f=d.length;e<f;++e){c=d[e];if(pb(a,c)){return true}}}else{for(d=b,e=0,f=d.length;e<f;++e){c=d[e];if(dE(c)===dE(a)){return true}}}}return false};_.Xb=function YMd(a){var b,c;b=RD(Ywd(this.a,4),129);c=b==null?0:b.length;if(a>=c)throw Adb(new aMd(a,c));return b[a]};_.dd=function ZMd(a){var b,c,d;b=RD(Ywd(this.a,4),129);if(b!=null){if(a!=null){for(c=0,d=b.length;c<d;++c){if(pb(a,b[c])){return c}}}else{for(c=0,d=b.length;c<d;++c){if(dE(b[c])===dE(a)){return c}}}}return -1};_.dc=function $Md(){return RD(Ywd(this.a,4),129)==null};_.Kc=function _Md(){return new jNd(this)};_.ed=function aNd(){return new nNd(this)};_.fd=function bNd(a){var b,c;c=(b=RD(Ywd(this.a,4),129),b==null?0:b.length);if(a<0||a>c)throw Adb(new aMd(a,c));return new oNd(this,a)};_.Ti=function cNd(a,b){var c,d,e;c=MMd(this);e=c==null?0:c.length;if(a>=e)throw Adb(new veb(MIe+a+NIe+e));if(b>=e)throw Adb(new veb(OIe+b+NIe+e));d=c[b];if(a!=b){a<b?hib(c,a,c,a+1,b-a):hib(c,b+1,c,b,a-b);bD(c,a,d);Bde(this,c)}return d};_.Vi=function dNd(a){return RD(Ywd(this.a,4),129)[a]};_.gd=function eNd(a){return OMd(this,a)};_.Xi=function fNd(a,b){var c,d;c=MMd(this);d=c[a];LMd(c,a,gHd(this,b));Bde(this,c);return d};_.gc=function gNd(){var a;return a=RD(Ywd(this.a,4),129),a==null?0:a.length};_.Pc=function hNd(){var a,b,c;a=RD(Ywd(this.a,4),129);c=a==null?0:a.length;b=$C(d6,IJe,424,c,0,1);c>0&&hib(a,0,b,0,c);return b};_.Qc=function iNd(a){var b,c,d;b=RD(Ywd(this.a,4),129);d=b==null?0:b.length;if(d>0){if(a.length<d){c=IMd(rb(a).c,d);a=c}hib(b,0,a,0,d)}a.length>d&&bD(a,d,null);return a};var JMd;var A6=sfb(sIe,'ArrayDelegatingEList',2080);feb(1051,40,Ave,jNd);_.Xj=function kNd(){if(this.b.j!=this.f||dE(RD(Ywd(this.b.a,4),129))!==dE(this.a)){throw Adb(new Jrb)}};_.Qb=function lNd(){cMd(this);this.a=RD(Ywd(this.b.a,4),129)};var w6=sfb(sIe,'ArrayDelegatingEList/EIterator',1051);feb(722,286,Jve,nNd,oNd);_.Xj=function pNd(){if(this.b.j!=this.f||dE(RD(Ywd(this.b.a,4),129))!==dE(this.a)){throw Adb(new Jrb)}};_.$j=function qNd(a){lMd(this,a);this.a=RD(Ywd(this.b.a,4),129)};_.Qb=function rNd(){cMd(this);this.a=RD(Ywd(this.b.a,4),129)};var x6=sfb(sIe,'ArrayDelegatingEList/EListIterator',722);feb(1052,355,Ave,sNd);_.Xj=function tNd(){if(this.b.j!=this.f||dE(RD(Ywd(this.b.a,4),129))!==dE(this.a)){throw Adb(new Jrb)}};var y6=sfb(sIe,'ArrayDelegatingEList/NonResolvingEIterator',1052);feb(723,398,Jve,vNd,wNd);_.Xj=function xNd(){if(this.b.j!=this.f||dE(RD(Ywd(this.b.a,4),129))!==dE(this.a)){throw Adb(new Jrb)}};var z6=sfb(sIe,'ArrayDelegatingEList/NonResolvingEListIterator',723);feb(615,301,lxe,yNd);var B6=sfb(sIe,'BasicEList/BasicIndexOutOfBoundsException',615);feb(710,66,PIe,zNd);_.bd=function ANd(a,b){throw Adb(new jib)};_.Fc=function BNd(a){throw Adb(new jib)};_.cd=function CNd(a,b){throw Adb(new jib)};_.Gc=function DNd(a){throw Adb(new jib)};_.$b=function ENd(){throw Adb(new jib)};_._i=function FNd(a){throw Adb(new jib)};_.Kc=function GNd(){return this.Ii()};_.ed=function HNd(){return this.Ji()};_.fd=function INd(a){return this.Ki(a)};_.Ti=function JNd(a,b){throw Adb(new jib)};_.Ui=function KNd(a,b){throw Adb(new jib)};_.gd=function LNd(a){throw Adb(new jib)};_.Mc=function MNd(a){throw Adb(new jib)};_.hd=function NNd(a,b){throw Adb(new jib)};var C6=sfb(sIe,'BasicEList/UnmodifiableEList',710);feb(721,1,{3:1,20:1,16:1,15:1,61:1,597:1});_.bd=function mOd(a,b){ONd(this,a,RD(b,44))};_.Fc=function nOd(a){return PNd(this,RD(a,44))};_.Jc=function vOd(a){xgb(this,a)};_.Xb=function wOd(a){return RD(QHd(this.c,a),136)};_.Ti=function FOd(a,b){return RD(this.c.Ti(a,b),44)};_.Ui=function GOd(a,b){eOd(this,a,RD(b,44))};_.Lc=function JOd(){return new SDb(null,new Swb(this,16))};_.gd=function KOd(a){return RD(this.c.gd(a),44)};_.hd=function MOd(a,b){return kOd(this,a,RD(b,44))};_.jd=function OOd(a){tvb(this,a)};_.Nc=function POd(){return new Swb(this,16)};_.Oc=function QOd(){return new SDb(null,new Swb(this,16))};_.cd=function oOd(a,b){return this.c.cd(a,b)};_.Gc=function pOd(a){return this.c.Gc(a)};_.$b=function qOd(){this.c.$b()};_.Hc=function rOd(a){return this.c.Hc(a)};_.Ic=function sOd(a){return Be(this.c,a)};_._j=function tOd(){var a,b,c;if(this.d==null){this.d=$C(D6,KJe,66,2*this.f+1,0,1);c=this.e;this.f=0;for(b=this.c.Kc();b.e!=b.i.gc();){a=RD(b.Yj(),136);UNd(this,a)}this.e=c}};_.Fb=function uOd(a){return ZNd(this,a)};_.Hb=function xOd(){return cHd(this.c)};_.dd=function yOd(a){return this.c.dd(a)};_.ak=function zOd(){this.c=new YOd(this)};_.dc=function AOd(){return this.f==0};_.Kc=function BOd(){return this.c.Kc()};_.ed=function COd(){return this.c.ed()};_.fd=function DOd(a){return this.c.fd(a)};_.bk=function EOd(){return dOd(this)};_.ck=function HOd(a,b,c){return new ZPd(a,b,c)};_.dk=function IOd(){return new cPd};_.Mc=function LOd(a){return hOd(this,a)};_.gc=function NOd(){return this.f};_.kd=function ROd(a,b){return new Rkb(this.c,a,b)};_.Pc=function SOd(){return this.c.Pc()};_.Qc=function TOd(a){return this.c.Qc(a)};_.Ib=function UOd(){return fHd(this.c)};_.e=0;_.f=0;var Q6=sfb(sIe,'BasicEMap',721);feb(1046,66,PIe,YOd);_.Mi=function ZOd(a,b){VOd(this,RD(b,136))};_.Pi=function _Od(a,b,c){var d;++(d=this,RD(b,136),d).a.e};_.Qi=function aPd(a,b){WOd(this,RD(b,136))};_.Ri=function bPd(a,b,c){XOd(this,RD(b,136),RD(c,136))};_.Oi=function $Od(a,b){TNd(this.a)};var E6=sfb(sIe,'BasicEMap/1',1046);feb(1047,66,PIe,cPd);_.aj=function dPd(a){return $C(N6,LJe,621,a,0,1)};var F6=sfb(sIe,'BasicEMap/2',1047);feb(1048,Eve,Fve,ePd);_.$b=function fPd(){this.a.c.$b()};_.Hc=function gPd(a){return QNd(this.a,a)};_.Kc=function hPd(){return this.a.f==0?(jQd(),iQd.a):new DPd(this.a)};_.Mc=function iPd(a){var b;b=this.a.f;jOd(this.a,a);return this.a.f!=b};_.gc=function jPd(){return this.a.f};var G6=sfb(sIe,'BasicEMap/3',1048);feb(1049,31,Dve,kPd);_.$b=function lPd(){this.a.c.$b()};_.Hc=function mPd(a){return RNd(this.a,a)};_.Kc=function nPd(){return this.a.f==0?(jQd(),iQd.a):new FPd(this.a)};_.gc=function oPd(){return this.a.f};var H6=sfb(sIe,'BasicEMap/4',1049);feb(1050,Eve,Fve,qPd);_.$b=function rPd(){this.a.c.$b()};_.Hc=function sPd(a){var b,c,d,e,f,g,h,i,j;if(this.a.f>0&&ZD(a,44)){this.a._j();i=RD(a,44);h=i.ld();e=h==null?0:tb(h);f=bOd(this.a,e);b=this.a.d[f];if(b){c=RD(b.g,379);j=b.i;for(g=0;g<j;++g){d=c[g];if(d.Bi()==e&&d.Fb(i)){return true}}}}return false};_.Kc=function tPd(){return this.a.f==0?(jQd(),iQd.a):new xPd(this.a)};_.Mc=function uPd(a){return pPd(this,a)};_.gc=function vPd(){return this.a.f};var I6=sfb(sIe,'BasicEMap/5',1050);feb(622,1,Ave,xPd);_.Nb=function yPd(a){Ztb(this,a)};_.Ob=function zPd(){return this.b!=-1};_.Pb=function APd(){var a;if(this.f.e!=this.c){throw Adb(new Jrb)}if(this.b==-1){throw Adb(new Dvb)}this.d=this.a;this.e=this.b;wPd(this);a=RD(this.f.d[this.d].g[this.e],136);return this.ek(a)};_.Qb=function BPd(){if(this.f.e!=this.c){throw Adb(new Jrb)}if(this.e==-1){throw Adb(new cgb)}this.f.c.Mc(QHd(this.f.d[this.d],this.e));this.c=this.f.e;this.e=-1;this.a==this.d&&this.b!=-1&&--this.b};_.ek=function CPd(a){return a};_.a=0;_.b=-1;_.c=0;_.d=0;_.e=0;var J6=sfb(sIe,'BasicEMap/BasicEMapIterator',622);feb(1044,622,Ave,DPd);_.ek=function EPd(a){return a.ld()};var K6=sfb(sIe,'BasicEMap/BasicEMapKeyIterator',1044);feb(1045,622,Ave,FPd);_.ek=function GPd(a){return a.md()};var L6=sfb(sIe,'BasicEMap/BasicEMapValueIterator',1045);feb(1043,1,Cve,IPd);_.wc=function OPd(a){Bvb(this,a)};_.yc=function TPd(a,b,c){return Cvb(this,a,b,c)};_.$b=function JPd(){this.a.c.$b()};_._b=function KPd(a){return HPd(this,a)};_.uc=function LPd(a){return RNd(this.a,a)};_.vc=function MPd(){return YNd(this.a)};_.Fb=function NPd(a){return ZNd(this.a,a)};_.xc=function PPd(a){return $Nd(this.a,a)};_.Hb=function QPd(){return cHd(this.a.c)};_.dc=function RPd(){return this.a.f==0};_.ec=function SPd(){return cOd(this.a)};_.zc=function UPd(a,b){return fOd(this.a,a,b)};_.Bc=function VPd(a){return jOd(this.a,a)};_.gc=function WPd(){return this.a.f};_.Ib=function XPd(){return fHd(this.a.c)};_.Cc=function YPd(){return lOd(this.a)};var M6=sfb(sIe,'BasicEMap/DelegatingMap',1043);feb(621,1,{44:1,136:1,621:1},ZPd);_.Fb=function $Pd(a){var b;if(ZD(a,44)){b=RD(a,44);return (this.b!=null?pb(this.b,b.ld()):dE(this.b)===dE(b.ld()))&&(this.c!=null?pb(this.c,b.md()):dE(this.c)===dE(b.md()))}else{return false}};_.Bi=function _Pd(){return this.a};_.ld=function aQd(){return this.b};_.md=function bQd(){return this.c};_.Hb=function cQd(){return this.a^(this.c==null?0:tb(this.c))};_.Ci=function dQd(a){this.a=a};_.Di=function eQd(a){throw Adb(new xz)};_.nd=function fQd(a){var b;b=this.c;this.c=a;return b};_.Ib=function gQd(){return this.b+'->'+this.c};_.a=0;var N6=sfb(sIe,'BasicEMap/EntryImpl',621);feb(546,1,{},hQd);var P6=sfb(sIe,'BasicEMap/View',546);var iQd;feb(783,1,{});_.Fb=function xQd(a){return Rt((yob(),vob),a)};_.Hb=function yQd(){return Cob((yob(),vob))};_.Ib=function zQd(){return Fe((yob(),vob))};var V6=sfb(sIe,'ECollections/BasicEmptyUnmodifiableEList',783);feb(1348,1,Jve,AQd);_.Nb=function CQd(a){Ztb(this,a)};_.Rb=function BQd(a){throw Adb(new jib)};_.Ob=function DQd(){return false};_.Sb=function EQd(){return false};_.Pb=function FQd(){throw Adb(new Dvb)};_.Tb=function GQd(){return 0};_.Ub=function HQd(){throw Adb(new Dvb)};_.Vb=function IQd(){return -1};_.Qb=function JQd(){throw Adb(new jib)};_.Wb=function KQd(a){throw Adb(new jib)};var U6=sfb(sIe,'ECollections/BasicEmptyUnmodifiableEList/1',1348);feb(1346,783,{20:1,16:1,15:1,61:1},LQd);_.bd=function MQd(a,b){mQd()};_.Fc=function NQd(a){return nQd()};_.cd=function OQd(a,b){return oQd()};_.Gc=function PQd(a){return pQd()};_.$b=function QQd(){qQd()};_.Hc=function RQd(a){return false};_.Ic=function SQd(a){return false};_.Jc=function TQd(a){xgb(this,a)};_.Xb=function UQd(a){return Iob((yob(),vob,a)),null};_.dd=function VQd(a){return -1};_.dc=function WQd(){return true};_.Kc=function XQd(){return this.a};_.ed=function YQd(){return this.a};_.fd=function ZQd(a){return this.a};_.Ti=function $Qd(a,b){return rQd()};_.Ui=function _Qd(a,b){sQd()};_.Lc=function aRd(){return new SDb(null,new Swb(this,16))};_.gd=function bRd(a){return tQd()};_.Mc=function cRd(a){return uQd()};_.hd=function dRd(a,b){return vQd()};_.gc=function eRd(){return 0};_.jd=function fRd(a){tvb(this,a)};_.Nc=function gRd(){return new Swb(this,16)};_.Oc=function hRd(){return new SDb(null,new Swb(this,16))};_.kd=function iRd(a,b){return yob(),new Rkb(vob,a,b)};_.Pc=function jRd(){return De((yob(),vob))};_.Qc=function kRd(a){return yob(),Ee(vob,a)};var W6=sfb(sIe,'ECollections/EmptyUnmodifiableEList',1346);feb(1347,783,{20:1,16:1,15:1,61:1,597:1},lRd);_.bd=function mRd(a,b){mQd()};_.Fc=function nRd(a){return nQd()};_.cd=function oRd(a,b){return oQd()};_.Gc=function pRd(a){return pQd()};_.$b=function qRd(){qQd()};_.Hc=function rRd(a){return false};_.Ic=function sRd(a){return false};_.Jc=function tRd(a){xgb(this,a)};_.Xb=function uRd(a){return Iob((yob(),vob,a)),null};_.dd=function vRd(a){return -1};_.dc=function wRd(){return true};_.Kc=function xRd(){return this.a};_.ed=function yRd(){return this.a};_.fd=function zRd(a){return this.a};_.Ti=function BRd(a,b){return rQd()};_.Ui=function CRd(a,b){sQd()};_.Lc=function DRd(){return new SDb(null,new Swb(this,16))};_.gd=function ERd(a){return tQd()};_.Mc=function FRd(a){return uQd()};_.hd=function GRd(a,b){return vQd()};_.gc=function HRd(){return 0};_.jd=function IRd(a){tvb(this,a)};_.Nc=function JRd(){return new Swb(this,16)};_.Oc=function KRd(){return new SDb(null,new Swb(this,16))};_.kd=function LRd(a,b){return yob(),new Rkb(vob,a,b)};_.Pc=function MRd(){return De((yob(),vob))};_.Qc=function NRd(a){return yob(),Ee(vob,a)};_.bk=function ARd(){return yob(),yob(),wob};var X6=sfb(sIe,'ECollections/EmptyUnmodifiableEMap',1347);var Z6=ufb(sIe,'Enumerator');var ORd;feb(288,1,{288:1},lSd);_.Fb=function pSd(a){var b;if(this===a)return true;if(!ZD(a,288))return false;b=RD(a,288);return this.f==b.f&&rSd(this.i,b.i)&&qSd(this.a,(this.f&256)!=0?(b.f&256)!=0?b.a:null:(b.f&256)!=0?null:b.a)&&qSd(this.d,b.d)&&qSd(this.g,b.g)&&qSd(this.e,b.e)&&iSd(this,b)};_.Hb=function uSd(){return this.f};_.Ib=function CSd(){return jSd(this)};_.f=0;var SRd=0,TRd=0,URd=0,VRd=0,WRd=0,XRd=0,YRd=0,ZRd=0,$Rd=0,_Rd,aSd=0,bSd=0,cSd=0,dSd=0,eSd,fSd;var c7=sfb(sIe,'URI',288);feb(1121,45,Hxe,MSd);_.zc=function NSd(a,b){return RD($jb(this,WD(a),RD(b,288)),288)};var b7=sfb(sIe,'URI/URICache',1121);feb(505,66,PIe,OSd,PSd);_.Si=function QSd(){return true};var d7=sfb(sIe,'UniqueEList',505);feb(590,63,swe,RSd);var e7=sfb(sIe,'WrappedException',590);var f7=ufb(vHe,OJe);var A7=ufb(vHe,PJe);var y7=ufb(vHe,QJe);var g7=ufb(vHe,RJe);var i7=ufb(vHe,SJe);var h7=ufb(vHe,'EClass');var k7=ufb(vHe,'EDataType');var SSd;feb(1233,45,Hxe,VSd);_.xc=function WSd(a){return bE(a)?Xjb(this,a):Wd(qtb(this.f,a))};var j7=sfb(vHe,'EDataType/Internal/ConversionDelegate/Factory/Registry/Impl',1233);var m7=ufb(vHe,'EEnum');var l7=ufb(vHe,TJe);var o7=ufb(vHe,UJe);var s7=ufb(vHe,VJe);var XSd;var u7=ufb(vHe,WJe);var v7=ufb(vHe,XJe);feb(1042,1,{},_Sd);_.Ib=function aTd(){return 'NIL'};var w7=sfb(vHe,'EStructuralFeature/Internal/DynamicValueHolder/1',1042);var bTd;feb(1041,45,Hxe,eTd);_.xc=function fTd(a){return bE(a)?Xjb(this,a):Wd(qtb(this.f,a))};var x7=sfb(vHe,'EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl',1041);var z7=ufb(vHe,YJe);var B7=ufb(vHe,'EValidator/PatternMatcher');var gTd;var iTd;var kTd;var mTd,nTd,oTd,pTd,qTd,rTd,sTd,tTd,uTd,vTd,wTd,xTd,yTd,zTd,ATd,BTd,CTd,DTd,ETd,FTd,GTd,HTd,ITd;var Jbb=ufb(ZJe,'FeatureMap/Entry');feb(545,1,{76:1},KTd);_.Lk=function LTd(){return this.a};_.md=function MTd(){return this.b};var C7=sfb(SHe,'BasicEObjectImpl/1',545);feb(1040,1,$Je,NTd);_.Fk=function OTd(a){return Fvd(this.a,this.b,a)};_.Qj=function PTd(){return Lvd(this.a,this.b)};_.Wb=function QTd(a){Xvd(this.a,this.b,a)};_.Gk=function RTd(){_vd(this.a,this.b)};var D7=sfb(SHe,'BasicEObjectImpl/4',1040);feb(2081,1,{114:1});_.Mk=function UTd(a){this.e=a==0?STd:$C(jJ,rve,1,a,5,1)};_.li=function VTd(a){return this.e[a]};_.mi=function WTd(a,b){this.e[a]=b};_.ni=function XTd(a){this.e[a]=null};_.Nk=function YTd(){return this.c};_.Ok=function ZTd(){throw Adb(new jib)};_.Pk=function $Td(){throw Adb(new jib)};_.Qk=function _Td(){return this.d};_.Rk=function aUd(){return this.e!=null};_.Sk=function bUd(a){this.c=a};_.Tk=function cUd(a){throw Adb(new jib)};_.Uk=function dUd(a){throw Adb(new jib)};_.Vk=function eUd(a){this.d=a};var STd;var E7=sfb(SHe,'BasicEObjectImpl/EPropertiesHolderBaseImpl',2081);feb(192,2081,{114:1},fUd);_.Ok=function gUd(){return this.a};_.Pk=function hUd(){return this.b};_.Tk=function iUd(a){this.a=a};_.Uk=function jUd(a){this.b=a};var F7=sfb(SHe,'BasicEObjectImpl/EPropertiesHolderImpl',192);feb(516,99,RHe,kUd);_.uh=function lUd(){return this.f};_.zh=function mUd(){return this.k};_.Bh=function nUd(a,b){this.g=a;this.i=b};_.Dh=function oUd(){return (this.j&2)==0?this.ii():this.$h().Nk()};_.Fh=function pUd(){return this.i};_.wh=function qUd(){return (this.j&1)!=0};_.Ph=function rUd(){return this.g};_.Vh=function sUd(){return (this.j&4)!=0};_.$h=function tUd(){return !this.k&&(this.k=new fUd),this.k};_.ci=function uUd(a){this.$h().Sk(a);a?(this.j|=2):(this.j&=-3)};_.ei=function vUd(a){this.$h().Uk(a);a?(this.j|=4):(this.j&=-5)};_.ii=function wUd(){return (lTd(),kTd).S};_.i=0;_.j=1;var q8=sfb(SHe,'EObjectImpl',516);feb(798,516,{110:1,94:1,93:1,58:1,114:1,54:1,99:1},zUd);_.li=function AUd(a){return this.e[a]};_.mi=function BUd(a,b){this.e[a]=b};_.ni=function CUd(a){this.e[a]=null};_.Dh=function DUd(){return this.d};_.Ih=function EUd(a){return BYd(this.d,a)};_.Kh=function FUd(){return this.d};_.Oh=function GUd(){return this.e!=null};_.$h=function HUd(){!this.k&&(this.k=new VUd);return this.k};_.ci=function IUd(a){this.d=a};_.hi=function JUd(){var a;if(this.e==null){a=AYd(this.d);this.e=a==0?xUd:$C(jJ,rve,1,a,5,1)}return this};_.ji=function KUd(){return 0};var xUd;var J7=sfb(SHe,'DynamicEObjectImpl',798);feb(1522,798,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1},LUd);_.Fb=function NUd(a){return this===a};_.Hb=function RUd(){return kFb(this)};_.ci=function MUd(a){this.d=a;this.b=wYd(a,'key');this.c=wYd(a,aIe)};_.Bi=function OUd(){var a;if(this.a==-1){a=Gvd(this,this.b);this.a=a==null?0:tb(a)}return this.a};_.ld=function PUd(){return Gvd(this,this.b)};_.md=function QUd(){return Gvd(this,this.c)};_.Ci=function SUd(a){this.a=a};_.Di=function TUd(a){Xvd(this,this.b,a)};_.nd=function UUd(a){var b;b=Gvd(this,this.c);Xvd(this,this.c,a);return b};_.a=0;var H7=sfb(SHe,'DynamicEObjectImpl/BasicEMapEntry',1522);feb(1523,1,{114:1},VUd);_.Mk=function WUd(a){throw Adb(new jib)};_.li=function XUd(a){throw Adb(new jib)};_.mi=function YUd(a,b){throw Adb(new jib)};_.ni=function ZUd(a){throw Adb(new jib)};_.Nk=function $Ud(){throw Adb(new jib)};_.Ok=function _Ud(){return this.a};_.Pk=function aVd(){return this.b};_.Qk=function bVd(){return this.c};_.Rk=function cVd(){throw Adb(new jib)};_.Sk=function dVd(a){throw Adb(new jib)};_.Tk=function eVd(a){this.a=a};_.Uk=function fVd(a){this.b=a};_.Vk=function gVd(a){this.c=a};var I7=sfb(SHe,'DynamicEObjectImpl/DynamicEPropertiesHolderImpl',1523);feb(519,158,{110:1,94:1,93:1,598:1,155:1,58:1,114:1,54:1,99:1,519:1,158:1,119:1,120:1},pVd);_.Ah=function qVd(a){return iVd(this,a)};_.Lh=function rVd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.d;case 2:return c?(!this.b&&(this.b=new SVd((JTd(),FTd),C8,this)),this.b):(!this.b&&(this.b=new SVd((JTd(),FTd),C8,this)),dOd(this.b));case 3:return kVd(this);case 4:return !this.a&&(this.a=new XZd(r7,this,4)),this.a;case 5:return !this.c&&(this.c=new zie(r7,this,5)),this.c;}return zvd(this,a-AYd((JTd(),mTd)),vYd((d=RD(Ywd(this,16),29),!d?mTd:d),a),b,c)};_.Sh=function sVd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 3:!!this.Cb&&(c=(e=this.Db>>16,e>=0?iVd(this,c):this.Cb.Th(this,-1-e,null,c)));return hVd(this,RD(a,155),c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),mTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),mTd)),a,c)};_.Uh=function tVd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 2:return !this.b&&(this.b=new SVd((JTd(),FTd),C8,this)),BVd(this.b,a,c);case 3:return hVd(this,null,c);case 4:return !this.a&&(this.a=new XZd(r7,this,4)),rLd(this.a,a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),mTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),mTd)),a,c)};_.Wh=function uVd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return !!this.b&&this.b.f!=0;case 3:return !!kVd(this);case 4:return !!this.a&&this.a.i!=0;case 5:return !!this.c&&this.c.i!=0;}return Avd(this,a-AYd((JTd(),mTd)),vYd((b=RD(Ywd(this,16),29),!b?mTd:b),a))};_.bi=function vVd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:mVd(this,WD(b));return;case 2:!this.b&&(this.b=new SVd((JTd(),FTd),C8,this));CVd(this.b,b);return;case 3:lVd(this,RD(b,155));return;case 4:!this.a&&(this.a=new XZd(r7,this,4));sLd(this.a);!this.a&&(this.a=new XZd(r7,this,4));YGd(this.a,RD(b,16));return;case 5:!this.c&&(this.c=new zie(r7,this,5));sLd(this.c);!this.c&&(this.c=new zie(r7,this,5));YGd(this.c,RD(b,16));return;}Bvd(this,a-AYd((JTd(),mTd)),vYd((c=RD(Ywd(this,16),29),!c?mTd:c),a),b)};_.ii=function wVd(){return JTd(),mTd};_.ki=function xVd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:nVd(this,null);return;case 2:!this.b&&(this.b=new SVd((JTd(),FTd),C8,this));this.b.c.$b();return;case 3:lVd(this,null);return;case 4:!this.a&&(this.a=new XZd(r7,this,4));sLd(this.a);return;case 5:!this.c&&(this.c=new zie(r7,this,5));sLd(this.c);return;}Cvd(this,a-AYd((JTd(),mTd)),vYd((b=RD(Ywd(this,16),29),!b?mTd:b),a))};_.Ib=function yVd(){return oVd(this)};_.d=null;var L7=sfb(SHe,'EAnnotationImpl',519);feb(141,721,_Je,DVd);_.Gi=function EVd(a,b){zVd(this,a,RD(b,44))};_.Wk=function FVd(a,b){return AVd(this,RD(a,44),b)};_.$i=function GVd(a){return RD(RD(this.c,71).$i(a),136)};_.Ii=function HVd(){return RD(this.c,71).Ii()};_.Ji=function IVd(){return RD(this.c,71).Ji()};_.Ki=function JVd(a){return RD(this.c,71).Ki(a)};_.Xk=function KVd(a,b){return BVd(this,a,b)};_.Fk=function LVd(a){return RD(this.c,79).Fk(a)};_.ak=function MVd(){};_.Qj=function NVd(){return RD(this.c,79).Qj()};_.ck=function OVd(a,b,c){var d;d=RD(BXd(this.b).wi().si(this.b),136);d.Ci(a);d.Di(b);d.nd(c);return d};_.dk=function PVd(){return new uje(this)};_.Wb=function QVd(a){CVd(this,a)};_.Gk=function RVd(){RD(this.c,79).Gk()};var Dbb=sfb(ZJe,'EcoreEMap',141);feb(165,141,_Je,SVd);_._j=function TVd(){var a,b,c,d,e,f;if(this.d==null){f=$C(D6,KJe,66,2*this.f+1,0,1);for(c=this.c.Kc();c.e!=c.i.gc();){b=RD(c.Yj(),136);d=b.Bi();e=(d&lve)%f.length;a=f[e];!a&&(a=f[e]=new uje(this));a.Fc(b)}this.d=f}};var K7=sfb(SHe,'EAnnotationImpl/1',165);feb(291,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,480:1,54:1,99:1,158:1,291:1,119:1,120:1});_.Lh=function eWd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),this.Jk()?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Uh=function fWd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 9:return VVd(this,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().Ak(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Wh=function gWd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.Jk();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function hWd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:this.ui(WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:this.Zk(RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function iWd(){return JTd(),HTd};_.ki=function jWd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:this.ui(null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:this.Zk(1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.pi=function kWd(){WVd(this);this.Bb|=1};_.Hk=function lWd(){return WVd(this)};_.Ik=function mWd(){return this.t};_.Jk=function nWd(){var a;return a=this.t,a>1||a==-1};_.Si=function oWd(){return (this.Bb&512)!=0};_.Yk=function pWd(a,b){return ZVd(this,a,b)};_.Zk=function qWd(a){bWd(this,a)};_.Ib=function rWd(){return cWd(this)};_.s=0;_.t=1;var A9=sfb(SHe,'ETypedElementImpl',291);feb(461,291,{110:1,94:1,93:1,155:1,197:1,58:1,179:1,69:1,114:1,480:1,54:1,99:1,158:1,461:1,291:1,119:1,120:1,692:1});_.Ah=function IWd(a){return sWd(this,a)};_.Lh=function JWd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),this.Jk()?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return Geb(),(this.Bb&gwe)!=0?true:false;case 11:return Geb(),(this.Bb&cKe)!=0?true:false;case 12:return Geb(),(this.Bb&qxe)!=0?true:false;case 13:return this.j;case 14:return tWd(this);case 15:return Geb(),(this.Bb&bKe)!=0?true:false;case 16:return Geb(),(this.Bb&Ove)!=0?true:false;case 17:return uWd(this);}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Sh=function KWd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 17:!!this.Cb&&(c=(e=this.Db>>16,e>=0?sWd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,17,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),f.wk().zk(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Uh=function LWd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 9:return VVd(this,c);case 17:return xvd(this,null,17,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().Ak(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Wh=function MWd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.Jk();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return (this.Bb&gwe)==0;case 11:return (this.Bb&cKe)!=0;case 12:return (this.Bb&qxe)!=0;case 13:return this.j!=null;case 14:return tWd(this)!=null;case 15:return (this.Bb&bKe)!=0;case 16:return (this.Bb&Ove)!=0;case 17:return !!uWd(this);}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function NWd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:CWd(this,WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:this.Zk(RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;case 10:xWd(this,Heb(TD(b)));return;case 11:FWd(this,Heb(TD(b)));return;case 12:DWd(this,Heb(TD(b)));return;case 13:yWd(this,WD(b));return;case 15:EWd(this,Heb(TD(b)));return;case 16:AWd(this,Heb(TD(b)));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function OWd(){return JTd(),GTd};_.ki=function PWd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,90)&&v$d(yYd(RD(this.Cb,90)),4);PAd(this,null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:this.Zk(1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;case 10:xWd(this,true);return;case 11:FWd(this,false);return;case 12:DWd(this,false);return;case 13:this.i=null;zWd(this,null);return;case 15:EWd(this,false);return;case 16:AWd(this,false);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.pi=function QWd(){Afe(Qee((lke(),jke),this));WVd(this);this.Bb|=1};_.pk=function RWd(){return this.f};_.ik=function SWd(){return tWd(this)};_.qk=function TWd(){return uWd(this)};_.uk=function UWd(){return null};_.$k=function VWd(){return this.k};_.Lj=function WWd(){return this.n};_.vk=function XWd(){return vWd(this)};_.wk=function YWd(){var a,b,c,d,e,f,g,h,i;if(!this.p){c=uWd(this);(c.i==null&&rYd(c),c.i).length;d=this.uk();!!d&&AYd(uWd(d));e=WVd(this);g=e.kk();a=!g?null:(g.i&1)!=0?g==xdb?QI:g==kE?bJ:g==jE?ZI:g==iE?VI:g==lE?eJ:g==wdb?lJ:g==gE?RI:SI:g;b=tWd(this);h=e.ik();Mje(this);(this.Bb&Ove)!=0&&(!!(f=Tee((lke(),jke),c))&&f!=this||!!(f=zfe(Qee(jke,this))))?(this.p=new Z6d(this,f)):this.Jk()?this.al()?!d?(this.Bb&bKe)!=0?!a?this.bl()?(this.p=new i7d(42,this)):(this.p=new i7d(0,this)):a==UK?(this.p=new g7d(50,O6,this)):this.bl()?(this.p=new g7d(43,a,this)):(this.p=new g7d(1,a,this)):!a?this.bl()?(this.p=new i7d(44,this)):(this.p=new i7d(2,this)):a==UK?(this.p=new g7d(41,O6,this)):this.bl()?(this.p=new g7d(45,a,this)):(this.p=new g7d(3,a,this)):(this.Bb&bKe)!=0?!a?this.bl()?(this.p=new j7d(46,this,d)):(this.p=new j7d(4,this,d)):this.bl()?(this.p=new h7d(47,a,this,d)):(this.p=new h7d(5,a,this,d)):!a?this.bl()?(this.p=new j7d(48,this,d)):(this.p=new j7d(6,this,d)):this.bl()?(this.p=new h7d(49,a,this,d)):(this.p=new h7d(7,a,this,d)):ZD(e,156)?a==Jbb?(this.p=new i7d(40,this)):(this.Bb&512)!=0?(this.Bb&bKe)!=0?!a?(this.p=new i7d(8,this)):(this.p=new g7d(9,a,this)):!a?(this.p=new i7d(10,this)):(this.p=new g7d(11,a,this)):(this.Bb&bKe)!=0?!a?(this.p=new i7d(12,this)):(this.p=new g7d(13,a,this)):!a?(this.p=new i7d(14,this)):(this.p=new g7d(15,a,this)):!d?this.bl()?(this.Bb&bKe)!=0?!a?(this.p=new i7d(16,this)):(this.p=new g7d(17,a,this)):!a?(this.p=new i7d(18,this)):(this.p=new g7d(19,a,this)):(this.Bb&bKe)!=0?!a?(this.p=new i7d(20,this)):(this.p=new g7d(21,a,this)):!a?(this.p=new i7d(22,this)):(this.p=new g7d(23,a,this)):(i=d.t,i>1||i==-1?this.bl()?(this.Bb&bKe)!=0?!a?(this.p=new j7d(24,this,d)):(this.p=new h7d(25,a,this,d)):!a?(this.p=new j7d(26,this,d)):(this.p=new h7d(27,a,this,d)):(this.Bb&bKe)!=0?!a?(this.p=new j7d(28,this,d)):(this.p=new h7d(29,a,this,d)):!a?(this.p=new j7d(30,this,d)):(this.p=new h7d(31,a,this,d)):this.bl()?(this.Bb&bKe)!=0?!a?(this.p=new j7d(32,this,d)):(this.p=new h7d(33,a,this,d)):!a?(this.p=new j7d(34,this,d)):(this.p=new h7d(35,a,this,d)):(this.Bb&bKe)!=0?!a?(this.p=new j7d(36,this,d)):(this.p=new h7d(37,a,this,d)):!a?(this.p=new j7d(38,this,d)):(this.p=new h7d(39,a,this,d))):this._k()?this.bl()?(this.p=new K7d(RD(e,29),this,d)):(this.p=new C7d(RD(e,29),this,d)):ZD(e,156)?a==Jbb?(this.p=new i7d(40,this)):(this.Bb&bKe)!=0?!a?(this.p=new J8d(RD(e,156),b,h,this)):(this.p=new L8d(b,h,this,(a8d(),g==kE?Y7d:g==xdb?T7d:g==lE?Z7d:g==jE?X7d:g==iE?W7d:g==wdb?_7d:g==gE?U7d:g==hE?V7d:$7d))):!a?(this.p=new C8d(RD(e,156),b,h,this)):(this.p=new E8d(b,h,this,(a8d(),g==kE?Y7d:g==xdb?T7d:g==lE?Z7d:g==jE?X7d:g==iE?W7d:g==wdb?_7d:g==gE?U7d:g==hE?V7d:$7d))):this.al()?!d?(this.Bb&bKe)!=0?this.bl()?(this.p=new d9d(RD(e,29),this)):(this.p=new b9d(RD(e,29),this)):this.bl()?(this.p=new _8d(RD(e,29),this)):(this.p=new Z8d(RD(e,29),this)):(this.Bb&bKe)!=0?this.bl()?(this.p=new l9d(RD(e,29),this,d)):(this.p=new j9d(RD(e,29),this,d)):this.bl()?(this.p=new h9d(RD(e,29),this,d)):(this.p=new f9d(RD(e,29),this,d)):this.bl()?!d?(this.Bb&bKe)!=0?(this.p=new p9d(RD(e,29),this)):(this.p=new n9d(RD(e,29),this)):(this.Bb&bKe)!=0?(this.p=new t9d(RD(e,29),this,d)):(this.p=new r9d(RD(e,29),this,d)):!d?(this.Bb&bKe)!=0?(this.p=new v9d(RD(e,29),this)):(this.p=new N8d(RD(e,29),this)):(this.Bb&bKe)!=0?(this.p=new z9d(RD(e,29),this,d)):(this.p=new x9d(RD(e,29),this,d))}return this.p};_.rk=function ZWd(){return (this.Bb&gwe)!=0};_._k=function $Wd(){return false};_.al=function _Wd(){return false};_.sk=function aXd(){return (this.Bb&Ove)!=0};_.xk=function bXd(){return wWd(this)};_.bl=function cXd(){return false};_.tk=function dXd(){return (this.Bb&bKe)!=0};_.cl=function eXd(a){this.k=a};_.ui=function fXd(a){CWd(this,a)};_.Ib=function gXd(){return GWd(this)};_.e=false;_.n=0;var s9=sfb(SHe,'EStructuralFeatureImpl',461);feb(331,461,{110:1,94:1,93:1,35:1,155:1,197:1,58:1,179:1,69:1,114:1,480:1,54:1,99:1,331:1,158:1,461:1,291:1,119:1,120:1,692:1},mXd);_.Lh=function nXd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),jXd(this)?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return Geb(),(this.Bb&gwe)!=0?true:false;case 11:return Geb(),(this.Bb&cKe)!=0?true:false;case 12:return Geb(),(this.Bb&qxe)!=0?true:false;case 13:return this.j;case 14:return tWd(this);case 15:return Geb(),(this.Bb&bKe)!=0?true:false;case 16:return Geb(),(this.Bb&Ove)!=0?true:false;case 17:return uWd(this);case 18:return Geb(),(this.Bb&QHe)!=0?true:false;case 19:if(b)return iXd(this);return hXd(this);}return zvd(this,a-AYd((JTd(),nTd)),vYd((d=RD(Ywd(this,16),29),!d?nTd:d),a),b,c)};_.Wh=function oXd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return jXd(this);case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return (this.Bb&gwe)==0;case 11:return (this.Bb&cKe)!=0;case 12:return (this.Bb&qxe)!=0;case 13:return this.j!=null;case 14:return tWd(this)!=null;case 15:return (this.Bb&bKe)!=0;case 16:return (this.Bb&Ove)!=0;case 17:return !!uWd(this);case 18:return (this.Bb&QHe)!=0;case 19:return !!hXd(this);}return Avd(this,a-AYd((JTd(),nTd)),vYd((b=RD(Ywd(this,16),29),!b?nTd:b),a))};_.bi=function pXd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:CWd(this,WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:lXd(this,RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;case 10:xWd(this,Heb(TD(b)));return;case 11:FWd(this,Heb(TD(b)));return;case 12:DWd(this,Heb(TD(b)));return;case 13:yWd(this,WD(b));return;case 15:EWd(this,Heb(TD(b)));return;case 16:AWd(this,Heb(TD(b)));return;case 18:kXd(this,Heb(TD(b)));return;}Bvd(this,a-AYd((JTd(),nTd)),vYd((c=RD(Ywd(this,16),29),!c?nTd:c),a),b)};_.ii=function qXd(){return JTd(),nTd};_.ki=function rXd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,90)&&v$d(yYd(RD(this.Cb,90)),4);PAd(this,null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:this.b=0;bWd(this,1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;case 10:xWd(this,true);return;case 11:FWd(this,false);return;case 12:DWd(this,false);return;case 13:this.i=null;zWd(this,null);return;case 15:EWd(this,false);return;case 16:AWd(this,false);return;case 18:kXd(this,false);return;}Cvd(this,a-AYd((JTd(),nTd)),vYd((b=RD(Ywd(this,16),29),!b?nTd:b),a))};_.pi=function sXd(){iXd(this);Afe(Qee((lke(),jke),this));WVd(this);this.Bb|=1};_.Jk=function tXd(){return jXd(this)};_.Yk=function uXd(a,b){this.b=0;this.a=null;return ZVd(this,a,b)};_.Zk=function vXd(a){lXd(this,a)};_.Ib=function wXd(){var a;if((this.Db&64)!=0)return GWd(this);a=new Shb(GWd(this));a.a+=' (iD: ';Ohb(a,(this.Bb&QHe)!=0);a.a+=')';return a.a};_.b=0;var M7=sfb(SHe,'EAttributeImpl',331);feb(364,448,{110:1,94:1,93:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1});_.dl=function NXd(a){return a.Dh()==this};_.Ah=function OXd(a){return AXd(this,a)};_.Bh=function PXd(a,b){this.w=null;this.Db=b<<16|this.Db&255;this.Cb=a};_.Lh=function QXd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return DXd(this);case 4:return this.ik();case 5:return this.F;case 6:if(b)return BXd(this);return xXd(this);case 7:return !this.A&&(this.A=new iie(z7,this,7)),this.A;}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Sh=function RXd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?AXd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,6,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),f.wk().zk(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Uh=function SXd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 6:return xvd(this,null,6,c);case 7:return !this.A&&(this.A=new iie(z7,this,7)),rLd(this.A,a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().Ak(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Wh=function TXd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!DXd(this);case 4:return this.ik()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!xXd(this);case 7:return !!this.A&&this.A.i!=0;}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function UXd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:LXd(this,WD(b));return;case 2:IXd(this,WD(b));return;case 5:KXd(this,WD(b));return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);!this.A&&(this.A=new iie(z7,this,7));YGd(this.A,RD(b,16));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function VXd(){return JTd(),pTd};_.ki=function WXd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,184)&&(RD(this.Cb,184).tb=null);PAd(this,null);return;case 2:yXd(this,null);zXd(this,this.D);return;case 5:KXd(this,null);return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.hk=function XXd(){var a;return this.G==-1&&(this.G=(a=BXd(this),a?fZd(a.vi(),this):-1)),this.G};_.ik=function YXd(){return null};_.jk=function ZXd(){return BXd(this)};_.el=function $Xd(){return this.v};_.kk=function _Xd(){return DXd(this)};_.lk=function aYd(){return this.D!=null?this.D:this.B};_.mk=function bYd(){return this.F};_.fk=function cYd(a){return FXd(this,a)};_.fl=function dYd(a){this.v=a};_.gl=function eYd(a){GXd(this,a)};_.hl=function fYd(a){this.C=a};_.ui=function gYd(a){LXd(this,a)};_.Ib=function hYd(){return MXd(this)};_.C=null;_.D=null;_.G=-1;var c8=sfb(SHe,'EClassifierImpl',364);feb(90,364,{110:1,94:1,93:1,29:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,90:1,364:1,158:1,481:1,119:1,120:1,691:1},HYd);_.dl=function IYd(a){return DYd(this,a.Dh())};_.Lh=function JYd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return DXd(this);case 4:return null;case 5:return this.F;case 6:if(b)return BXd(this);return xXd(this);case 7:return !this.A&&(this.A=new iie(z7,this,7)),this.A;case 8:return Geb(),(this.Bb&256)!=0?true:false;case 9:return Geb(),(this.Bb&512)!=0?true:false;case 10:return zYd(this);case 11:return !this.q&&(this.q=new C5d(s7,this,11,10)),this.q;case 12:return mYd(this);case 13:return qYd(this);case 14:return qYd(this),this.r;case 15:return mYd(this),this.k;case 16:return nYd(this);case 17:return pYd(this);case 18:return rYd(this);case 19:return sYd(this);case 20:return mYd(this),this.o;case 21:return !this.s&&(this.s=new C5d(y7,this,21,17)),this.s;case 22:return tYd(this);case 23:return oYd(this);}return zvd(this,a-AYd((JTd(),oTd)),vYd((d=RD(Ywd(this,16),29),!d?oTd:d),a),b,c)};_.Sh=function KYd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?AXd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,6,c);case 11:return !this.q&&(this.q=new C5d(s7,this,11,10)),qLd(this.q,a,c);case 21:return !this.s&&(this.s=new C5d(y7,this,21,17)),qLd(this.s,a,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),oTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),oTd)),a,c)};_.Uh=function LYd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 6:return xvd(this,null,6,c);case 7:return !this.A&&(this.A=new iie(z7,this,7)),rLd(this.A,a,c);case 11:return !this.q&&(this.q=new C5d(s7,this,11,10)),rLd(this.q,a,c);case 21:return !this.s&&(this.s=new C5d(y7,this,21,17)),rLd(this.s,a,c);case 22:return rLd(tYd(this),a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),oTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),oTd)),a,c)};_.Wh=function MYd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!DXd(this);case 4:return false;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!xXd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)!=0;case 9:return (this.Bb&512)!=0;case 10:return !!this.u&&tYd(this.u.a).i!=0&&!(!!this.n&&d$d(this.n));case 11:return !!this.q&&this.q.i!=0;case 12:return mYd(this).i!=0;case 13:return qYd(this).i!=0;case 14:return qYd(this),this.r.i!=0;case 15:return mYd(this),this.k.i!=0;case 16:return nYd(this).i!=0;case 17:return pYd(this).i!=0;case 18:return rYd(this).i!=0;case 19:return sYd(this).i!=0;case 20:return mYd(this),!!this.o;case 21:return !!this.s&&this.s.i!=0;case 22:return !!this.n&&d$d(this.n);case 23:return oYd(this).i!=0;}return Avd(this,a-AYd((JTd(),oTd)),vYd((b=RD(Ywd(this,16),29),!b?oTd:b),a))};_.Zh=function NYd(a){var b;b=this.i==null||!!this.q&&this.q.i!=0?null:wYd(this,a);return b?b:_zd(this,a)};_.bi=function OYd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:LXd(this,WD(b));return;case 2:IXd(this,WD(b));return;case 5:KXd(this,WD(b));return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);!this.A&&(this.A=new iie(z7,this,7));YGd(this.A,RD(b,16));return;case 8:EYd(this,Heb(TD(b)));return;case 9:FYd(this,Heb(TD(b)));return;case 10:VJd(zYd(this));YGd(zYd(this),RD(b,16));return;case 11:!this.q&&(this.q=new C5d(s7,this,11,10));sLd(this.q);!this.q&&(this.q=new C5d(s7,this,11,10));YGd(this.q,RD(b,16));return;case 21:!this.s&&(this.s=new C5d(y7,this,21,17));sLd(this.s);!this.s&&(this.s=new C5d(y7,this,21,17));YGd(this.s,RD(b,16));return;case 22:sLd(tYd(this));YGd(tYd(this),RD(b,16));return;}Bvd(this,a-AYd((JTd(),oTd)),vYd((c=RD(Ywd(this,16),29),!c?oTd:c),a),b)};_.ii=function PYd(){return JTd(),oTd};_.ki=function QYd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,184)&&(RD(this.Cb,184).tb=null);PAd(this,null);return;case 2:yXd(this,null);zXd(this,this.D);return;case 5:KXd(this,null);return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);return;case 8:EYd(this,false);return;case 9:FYd(this,false);return;case 10:!!this.u&&VJd(this.u);return;case 11:!this.q&&(this.q=new C5d(s7,this,11,10));sLd(this.q);return;case 21:!this.s&&(this.s=new C5d(y7,this,21,17));sLd(this.s);return;case 22:!!this.n&&sLd(this.n);return;}Cvd(this,a-AYd((JTd(),oTd)),vYd((b=RD(Ywd(this,16),29),!b?oTd:b),a))};_.pi=function RYd(){var a,b;mYd(this);qYd(this);nYd(this);pYd(this);rYd(this);sYd(this);oYd(this);OHd(q$d(yYd(this)));if(this.s){for(a=0,b=this.s.i;a<b;++a){aAd(QHd(this.s,a))}}if(this.q){for(a=0,b=this.q.i;a<b;++a){aAd(QHd(this.q,a))}}Oee((lke(),jke),this).xe();this.Bb|=1};_.Ib=function SYd(){return GYd(this)};_.k=null;_.r=null;var iYd,jYd,kYd;var b8=sfb(SHe,'EClassImpl',90);feb(2092,2091,nKe);_.Ei=function TYd(a,b){return nLd(this,a,b)};_.Fi=function UYd(a){return nLd(this,this.i,a)};_.Gi=function VYd(a,b){oLd(this,a,b)};_.Hi=function WYd(a){pLd(this,a)};_.Wk=function XYd(a,b){return qLd(this,a,b)};_.$i=function YYd(a){return NHd(this,a)};_.Xk=function aZd(a,b){return rLd(this,a,b)};_.Xi=function bZd(a,b){return xLd(this,a,b)};_.Ii=function ZYd(){return new yMd(this)};_.Ji=function $Yd(){return new BMd(this)};_.Ki=function _Yd(a){return ZGd(this,a)};var Ubb=sfb(ZJe,'NotifyingInternalEListImpl',2092);feb(632,2092,oKe);_.Hc=function lZd(a){return cZd(this,a)};_.Ij=function mZd(a,b,c,d,e){return dZd(this,a,b,c,d,e)};_.Jj=function nZd(a){eZd(this,a)};_.Fk=function oZd(a){return this};_.Lk=function pZd(){return vYd(this.e.Dh(),this.Lj())};_.Kj=function qZd(){return this.Lk()};_.Lj=function rZd(){return BYd(this.e.Dh(),this.Lk())};_.il=function sZd(){return RD(this.Lk().Hk(),29).kk()};_.jl=function tZd(){return Z5d(RD(this.Lk(),19)).n};_.jj=function uZd(){return this.e};_.kl=function vZd(){return true};_.ll=function wZd(){return false};_.ml=function xZd(){return false};_.nl=function yZd(){return false};_.dd=function zZd(a){return fZd(this,a)};_.Nj=function AZd(a,b){var c;return c=RD(a,54),this.ml()?this.kl()?c.Rh(this.e,this.jl(),this.il(),b):c.Rh(this.e,BYd(c.Dh(),Z5d(RD(this.Lk(),19))),null,b):c.Rh(this.e,-1-this.Lj(),null,b)};_.Oj=function BZd(a,b){var c;return c=RD(a,54),this.ml()?this.kl()?c.Th(this.e,this.jl(),this.il(),b):c.Th(this.e,BYd(c.Dh(),Z5d(RD(this.Lk(),19))),null,b):c.Th(this.e,-1-this.Lj(),null,b)};_.al=function CZd(){return false};_.ol=function DZd(){return true};_.fk=function EZd(a){return QRd(this.d,a)};_.Pj=function FZd(){return Mvd(this.e)};_.Qj=function GZd(){return this.i!=0};_.aj=function HZd(a){return IMd(this.d,a)};_.Wi=function IZd(a,b){return this.ol()&&this.nl()?gZd(this,a,RD(b,58)):b};_.pl=function JZd(a){return a.Vh()?Vvd(this.e,RD(a,54)):a};_.Wb=function KZd(a){hZd(this,a)};_.Pc=function LZd(){return iZd(this)};_.Qc=function MZd(a){var b;if(this.nl()){for(b=this.i-1;b>=0;--b){QHd(this,b)}}return XHd(this,a)};_.Gk=function NZd(){sLd(this)};_.Zi=function OZd(a,b){return jZd(this,a,b)};var ybb=sfb(ZJe,'EcoreEList',632);feb(504,632,oKe,PZd);_.Li=function QZd(){return false};_.Lj=function RZd(){return this.c};_.Mj=function SZd(){return false};_.ol=function TZd(){return true};_.Si=function UZd(){return true};_.Wi=function VZd(a,b){return b};_.Yi=function WZd(){return false};_.c=0;var ibb=sfb(ZJe,'EObjectEList',504);feb(83,504,oKe,XZd);_.Mj=function YZd(){return true};_.ml=function ZZd(){return false};_.al=function $Zd(){return true};var cbb=sfb(ZJe,'EObjectContainmentEList',83);feb(555,83,oKe,_Zd);_.Ni=function a$d(){this.b=true};_.Qj=function b$d(){return this.b};_.Gk=function c$d(){var a;sLd(this);if(Mvd(this.e)){a=this.b;this.b=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.b=false}};_.b=false;var bbb=sfb(ZJe,'EObjectContainmentEList/Unsettable',555);feb(1161,555,oKe,h$d);_.Ti=function l$d(a,b){var c,d;return c=RD(uLd(this,a,b),89),Mvd(this.e)&&eZd(this,new c4d(this.a,7,(JTd(),qTd),sgb(b),(d=c.c,ZD(d,90)?RD(d,29):zTd),a)),c};_.Uj=function m$d(a,b){return e$d(this,RD(a,89),b)};_.Vj=function n$d(a,b){return f$d(this,RD(a,89),b)};_.Wj=function o$d(a,b,c){return g$d(this,RD(a,89),RD(b,89),c)};_.Ij=function i$d(a,b,c,d,e){switch(a){case 3:{return dZd(this,a,b,c,d,this.i>1)}case 5:{return dZd(this,a,b,c,d,this.i-RD(c,15).gc()>0)}default:{return new P3d(this.e,a,this.c,b,c,d,true)}}};_.Tj=function j$d(){return true};_.Qj=function k$d(){return d$d(this)};_.Gk=function p$d(){sLd(this)};var S7=sfb(SHe,'EClassImpl/1',1161);feb(1175,1174,EJe);_.dj=function t$d(a){var b,c,d,e,f,g,h;c=a.gj();if(c!=8){d=s$d(a);if(d==0){switch(c){case 1:case 9:{h=a.kj();if(h!=null){b=yYd(RD(h,481));!b.c&&(b.c=new X9d);dHd(b.c,a.jj())}g=a.ij();if(g!=null){e=RD(g,481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);WGd(b.c,RD(a.jj(),29))}}break}case 3:{g=a.ij();if(g!=null){e=RD(g,481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);WGd(b.c,RD(a.jj(),29))}}break}case 5:{g=a.ij();if(g!=null){for(f=RD(g,16).Kc();f.Ob();){e=RD(f.Pb(),481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);WGd(b.c,RD(a.jj(),29))}}}break}case 4:{h=a.kj();if(h!=null){e=RD(h,481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);dHd(b.c,a.jj())}}break}case 6:{h=a.kj();if(h!=null){for(f=RD(h,16).Kc();f.Ob();){e=RD(f.Pb(),481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);dHd(b.c,a.jj())}}}break}}}this.ql(d)}};_.ql=function u$d(a){r$d(this,a)};_.b=63;var u9=sfb(SHe,'ESuperAdapter',1175);feb(1176,1175,EJe,w$d);_.ql=function x$d(a){v$d(this,a)};var N7=sfb(SHe,'EClassImpl/10',1176);feb(1165,710,oKe);_.Ei=function y$d(a,b){return IHd(this,a,b)};_.Fi=function z$d(a){return JHd(this,a)};_.Gi=function A$d(a,b){KHd(this,a,b)};_.Hi=function B$d(a){LHd(this,a)};_.$i=function D$d(a){return NHd(this,a)};_.Xi=function L$d(a,b){return UHd(this,a,b)};_.Wk=function C$d(a,b){throw Adb(new jib)};_.Ii=function E$d(){return new yMd(this)};_.Ji=function F$d(){return new BMd(this)};_.Ki=function G$d(a){return ZGd(this,a)};_.Xk=function H$d(a,b){throw Adb(new jib)};_.Fk=function I$d(a){return this};_.Qj=function J$d(){return this.i!=0};_.Wb=function K$d(a){throw Adb(new jib)};_.Gk=function M$d(){throw Adb(new jib)};var xbb=sfb(ZJe,'EcoreEList/UnmodifiableEList',1165);feb(328,1165,oKe,N$d);_.Yi=function O$d(){return false};var wbb=sfb(ZJe,'EcoreEList/UnmodifiableEList/FastCompare',328);feb(1168,328,oKe,R$d);_.dd=function S$d(a){var b,c,d;if(ZD(a,179)){b=RD(a,179);c=b.Lj();if(c!=-1){for(d=this.i;c<d;++c){if(dE(this.g[c])===dE(a)){return c}}}}return -1};var O7=sfb(SHe,'EClassImpl/1EAllStructuralFeaturesList',1168);feb(1162,505,PIe,W$d);_.aj=function X$d(a){return $C(o7,sKe,89,a,0,1)};_.Yi=function Y$d(){return false};var P7=sfb(SHe,'EClassImpl/1EGenericSuperTypeEList',1162);feb(633,505,PIe,Z$d);_.aj=function $$d(a){return $C(y7,lKe,179,a,0,1)};_.Yi=function _$d(){return false};var Q7=sfb(SHe,'EClassImpl/1EStructuralFeatureUniqueEList',633);feb(755,505,PIe,a_d);_.aj=function b_d(a){return $C(v7,lKe,19,a,0,1)};_.Yi=function c_d(){return false};var R7=sfb(SHe,'EClassImpl/1ReferenceList',755);feb(1163,505,PIe,e_d);_.Mi=function f_d(a,b){d_d(this,RD(b,35))};_.aj=function g_d(a){return $C(g7,lKe,35,a,0,1)};_.Yi=function h_d(){return false};var T7=sfb(SHe,'EClassImpl/2',1163);feb(1164,505,PIe,i_d);_.aj=function j_d(a){return $C(g7,lKe,35,a,0,1)};_.Yi=function k_d(){return false};var U7=sfb(SHe,'EClassImpl/3',1164);feb(1166,328,oKe,n_d);_.Fc=function o_d(a){return l_d(this,RD(a,35))};_.Hi=function p_d(a){m_d(this,RD(a,35))};var V7=sfb(SHe,'EClassImpl/4',1166);feb(1167,328,oKe,s_d);_.Fc=function t_d(a){return q_d(this,RD(a,19))};_.Hi=function u_d(a){r_d(this,RD(a,19))};var W7=sfb(SHe,'EClassImpl/5',1167);feb(1169,505,PIe,v_d);_.aj=function w_d(a){return $C(s7,mKe,62,a,0,1)};_.Yi=function x_d(){return false};var X7=sfb(SHe,'EClassImpl/6',1169);feb(1170,505,PIe,y_d);_.aj=function z_d(a){return $C(v7,lKe,19,a,0,1)};_.Yi=function A_d(){return false};var Y7=sfb(SHe,'EClassImpl/7',1170);feb(2095,2094,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,71:1});_.Ei=function B_d(a,b){return QJd(this,a,b)};_.Fi=function C_d(a){return QJd(this,this.Ej(),a)};_.Gi=function D_d(a,b){RJd(this,a,b)};_.Hi=function E_d(a){SJd(this,a)};_.Wk=function F_d(a,b){return TJd(this,a,b)};_.Xk=function L_d(a,b){return UJd(this,a,b)};_.Xi=function M_d(a,b){return WJd(this,a,b)};_.$i=function G_d(a){return this.xj(a)};_.Ii=function H_d(){return new yMd(this)};_.pj=function I_d(){return this.sj()};_.Ji=function J_d(){return new BMd(this)};_.Ki=function K_d(a){return ZGd(this,a)};var Qab=sfb(ZJe,'DelegatingNotifyingInternalEListImpl',2095);feb(756,2095,tKe);_.Li=function R_d(){var a;a=vYd(Uwd(this.b),this.Lj()).Hk();return ZD(a,156)&&!ZD(a,468)&&(a.kk().i&1)==0};_.Hc=function S_d(a){var b,c,d,e,f,g,h,i;if(this.ol()){i=this.Ej();if(i>4){if(this.fk(a)){if(this.al()){d=RD(a,54);c=d.Eh();h=c==this.b&&(this.ml()?d.yh(d.Fh(),RD(vYd(Uwd(this.b),this.Lj()).Hk(),29).kk())==Z5d(RD(vYd(Uwd(this.b),this.Lj()),19)).n:-1-d.Fh()==this.Lj());if(this.nl()&&!h&&!c&&!!d.Jh()){for(e=0;e<i;++e){b=O_d(this,this.xj(e));if(dE(b)===dE(a)){return true}}}return h}else if(this.ml()&&!this.ll()){f=RD(a,58).Mh(Z5d(RD(vYd(Uwd(this.b),this.Lj()),19)));if(dE(f)===dE(this.b)){return true}else if(f==null||!RD(f,58).Vh()){return false}}}else{return false}}g=this.uj(a);if(this.nl()&&!g){for(e=0;e<i;++e){d=O_d(this,this.xj(e));if(dE(d)===dE(a)){return true}}}return g}else{return this.uj(a)}};_.Ij=function T_d(a,b,c,d,e){return new P3d(this.b,a,this.Lj(),b,c,d,e)};_.Jj=function U_d(a){qvd(this.b,a)};_.Fk=function V_d(a){return this};_.Kj=function W_d(){return vYd(Uwd(this.b),this.Lj())};_.Lj=function X_d(){return BYd(Uwd(this.b),vYd(Uwd(this.b),this.Lj()))};_.jj=function Y_d(){return this.b};_.kl=function Z_d(){return !!vYd(Uwd(this.b),this.Lj()).Hk().kk()};_.Mj=function $_d(){var a,b;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);return (a.Bb&QHe)!=0||!!Z5d(RD(b,19))}else{return false}};_.ll=function __d(){var a,b,c,d;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);c=Z5d(a);return !!c&&(d=c.t,d>1||d==-1)}else{return false}};_.ml=function a0d(){var a,b,c;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);c=Z5d(a);return !!c}else{return false}};_.nl=function b0d(){var a,b;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);return (a.Bb&txe)!=0}else{return false}};_.dd=function c0d(a){var b,c,d,e;d=this.zj(a);if(d>=0)return d;if(this.ol()){for(c=0,e=this.Ej();c<e;++c){b=O_d(this,this.xj(c));if(dE(b)===dE(a)){return c}}}return -1};_.Nj=function d0d(a,b){var c;return c=RD(a,54),this.ml()?this.kl()?c.Rh(this.b,Z5d(RD(vYd(Uwd(this.b),this.Lj()),19)).n,RD(vYd(Uwd(this.b),this.Lj()).Hk(),29).kk(),b):c.Rh(this.b,BYd(c.Dh(),Z5d(RD(vYd(Uwd(this.b),this.Lj()),19))),null,b):c.Rh(this.b,-1-this.Lj(),null,b)};_.Oj=function e0d(a,b){var c;return c=RD(a,54),this.ml()?this.kl()?c.Th(this.b,Z5d(RD(vYd(Uwd(this.b),this.Lj()),19)).n,RD(vYd(Uwd(this.b),this.Lj()).Hk(),29).kk(),b):c.Th(this.b,BYd(c.Dh(),Z5d(RD(vYd(Uwd(this.b),this.Lj()),19))),null,b):c.Th(this.b,-1-this.Lj(),null,b)};_.al=function f0d(){var a,b;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);return (a.Bb&QHe)!=0}else{return false}};_.ol=function g0d(){return ZD(vYd(Uwd(this.b),this.Lj()).Hk(),90)};_.fk=function h0d(a){return vYd(Uwd(this.b),this.Lj()).Hk().fk(a)};_.Pj=function i0d(){return Mvd(this.b)};_.Qj=function j0d(){return !this.Aj()};_.Si=function k0d(){return vYd(Uwd(this.b),this.Lj()).Si()};_.Wi=function l0d(a,b){return N_d(this,a,b)};_.Wb=function m0d(a){VJd(this);YGd(this,RD(a,15))};_.Pc=function n0d(){var a;if(this.nl()){for(a=this.Ej()-1;a>=0;--a){N_d(this,a,this.xj(a))}}return this.Fj()};_.Qc=function o0d(a){var b;if(this.nl()){for(b=this.Ej()-1;b>=0;--b){N_d(this,b,this.xj(b))}}return this.Gj(a)};_.Gk=function p0d(){VJd(this)};_.Zi=function q0d(a,b){return P_d(this,a,b)};var Pab=sfb(ZJe,'DelegatingEcoreEList',756);feb(1171,756,tKe,w0d);_.qj=function z0d(a,b){r0d(this,a,RD(b,29))};_.rj=function A0d(a){s0d(this,RD(a,29))};_.xj=function G0d(a){var b,c;return b=RD(QHd(tYd(this.a),a),89),c=b.c,ZD(c,90)?RD(c,29):(JTd(),zTd)};_.Cj=function L0d(a){var b,c;return b=RD(vLd(tYd(this.a),a),89),c=b.c,ZD(c,90)?RD(c,29):(JTd(),zTd)};_.Dj=function M0d(a,b){return u0d(this,a,RD(b,29))};_.Li=function x0d(){return false};_.Ij=function y0d(a,b,c,d,e){return null};_.sj=function B0d(){return new c1d(this)};_.tj=function C0d(){sLd(tYd(this.a))};_.uj=function D0d(a){return t0d(this,a)};_.vj=function E0d(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!t0d(this,b)){return false}}return true};_.wj=function F0d(a){var b,c,d;if(ZD(a,15)){d=RD(a,15);if(d.gc()==tYd(this.a).i){for(b=d.Kc(),c=new dMd(this);b.Ob();){if(dE(b.Pb())!==dE(bMd(c))){return false}}return true}}return false};_.yj=function H0d(){var a,b,c,d,e;c=1;for(b=new dMd(tYd(this.a));b.e!=b.i.gc();){a=RD(bMd(b),89);d=(e=a.c,ZD(e,90)?RD(e,29):(JTd(),zTd));c=31*c+(!d?0:kFb(d))}return c};_.zj=function I0d(a){var b,c,d,e;d=0;for(c=new dMd(tYd(this.a));c.e!=c.i.gc();){b=RD(bMd(c),89);if(dE(a)===dE((e=b.c,ZD(e,90)?RD(e,29):(JTd(),zTd)))){return d}++d}return -1};_.Aj=function J0d(){return tYd(this.a).i==0};_.Bj=function K0d(){return null};_.Ej=function N0d(){return tYd(this.a).i};_.Fj=function O0d(){var a,b,c,d,e,f;f=tYd(this.a).i;e=$C(jJ,rve,1,f,5,1);c=0;for(b=new dMd(tYd(this.a));b.e!=b.i.gc();){a=RD(bMd(b),89);e[c++]=(d=a.c,ZD(d,90)?RD(d,29):(JTd(),zTd))}return e};_.Gj=function P0d(a){var b,c,d,e,f,g,h;h=tYd(this.a).i;if(a.length<h){e=IMd(rb(a).c,h);a=e}a.length>h&&bD(a,h,null);d=0;for(c=new dMd(tYd(this.a));c.e!=c.i.gc();){b=RD(bMd(c),89);f=(g=b.c,ZD(g,90)?RD(g,29):(JTd(),zTd));bD(a,d++,f)}return a};_.Hj=function Q0d(){var a,b,c,d,e;e=new Qhb;e.a+='[';a=tYd(this.a);for(b=0,d=tYd(this.a).i;b<d;){Nhb(e,Ghb((c=RD(QHd(a,b),89).c,ZD(c,90)?RD(c,29):(JTd(),zTd))));++b<d&&(e.a+=pve,e)}e.a+=']';return e.a};_.Jj=function R0d(a){};_.Lj=function S0d(){return 10};_.kl=function T0d(){return true};_.Mj=function U0d(){return false};_.ll=function V0d(){return false};_.ml=function W0d(){return false};_.nl=function X0d(){return true};_.al=function Y0d(){return false};_.ol=function Z0d(){return true};_.fk=function $0d(a){return ZD(a,90)};_.Qj=function _0d(){return CYd(this.a)};_.Si=function a1d(){return true};_.Yi=function b1d(){return true};var $7=sfb(SHe,'EClassImpl/8',1171);feb(1172,2062,kwe,c1d);_.fd=function d1d(a){return ZGd(this.a,a)};_.gc=function e1d(){return tYd(this.a.a).i};var Z7=sfb(SHe,'EClassImpl/8/1',1172);feb(1173,505,PIe,f1d);_.aj=function g1d(a){return $C(i7,rve,142,a,0,1)};_.Yi=function h1d(){return false};var _7=sfb(SHe,'EClassImpl/9',1173);feb(1160,49,Ixe,i1d);var a8=sfb(SHe,'EClassImpl/MyHashSet',1160);feb(577,364,{110:1,94:1,93:1,142:1,156:1,847:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1},k1d);_.Lh=function l1d(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return DXd(this);case 4:return this.ik();case 5:return this.F;case 6:if(b)return BXd(this);return xXd(this);case 7:return !this.A&&(this.A=new iie(z7,this,7)),this.A;case 8:return Geb(),(this.Bb&256)!=0?true:false;}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Wh=function m1d(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!DXd(this);case 4:return this.ik()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!xXd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function n1d(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:LXd(this,WD(b));return;case 2:IXd(this,WD(b));return;case 5:KXd(this,WD(b));return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);!this.A&&(this.A=new iie(z7,this,7));YGd(this.A,RD(b,16));return;case 8:j1d(this,Heb(TD(b)));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function o1d(){return JTd(),rTd};_.ki=function p1d(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,184)&&(RD(this.Cb,184).tb=null);PAd(this,null);return;case 2:yXd(this,null);zXd(this,this.D);return;case 5:KXd(this,null);return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);return;case 8:j1d(this,true);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.pi=function q1d(){Oee((lke(),jke),this).xe();this.Bb|=1};_.ok=function r1d(){var a,b,c;if(!this.c){a=Kje(BXd(this));if(!a.dc()){for(c=a.Kc();c.Ob();){b=WD(c.Pb());!!bAd(this,b)&&Jje(this)}}}return this.b};_.ik=function s1d(){var b;if(!this.e){b=null;try{b=DXd(this)}catch(a){a=zdb(a);if(!ZD(a,103))throw Adb(a)}this.d=null;!!b&&(b.i&1)!=0&&(b==xdb?(this.d=(Geb(),Eeb)):b==kE?(this.d=sgb(0)):b==jE?(this.d=new Tfb(0)):b==iE?(this.d=0):b==lE?(this.d=Hgb(0)):b==wdb?(this.d=bhb(0)):b==gE?(this.d=$eb(0)):(this.d=hfb(0)));this.e=true}return this.d};_.nk=function t1d(){return (this.Bb&256)!=0};_.rl=function u1d(a){a&&(this.D='org.eclipse.emf.common.util.AbstractEnumerator')};_.gl=function v1d(a){GXd(this,a);this.rl(a)};_.hl=function w1d(a){this.C=a;this.e=false};_.Ib=function x1d(){var a;if((this.Db&64)!=0)return MXd(this);a=new Shb(MXd(this));a.a+=' (serializable: ';Ohb(a,(this.Bb&256)!=0);a.a+=')';return a.a};_.c=false;_.d=null;_.e=false;var d8=sfb(SHe,'EDataTypeImpl',577);feb(468,577,{110:1,94:1,93:1,142:1,156:1,847:1,685:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,468:1,158:1,119:1,120:1,691:1},A1d);_.Lh=function B1d(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return DXd(this);case 4:return y1d(this);case 5:return this.F;case 6:if(b)return BXd(this);return xXd(this);case 7:return !this.A&&(this.A=new iie(z7,this,7)),this.A;case 8:return Geb(),(this.Bb&256)!=0?true:false;case 9:return !this.a&&(this.a=new C5d(l7,this,9,5)),this.a;}return zvd(this,a-AYd((JTd(),sTd)),vYd((d=RD(Ywd(this,16),29),!d?sTd:d),a),b,c)};_.Sh=function C1d(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?AXd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,6,c);case 9:return !this.a&&(this.a=new C5d(l7,this,9,5)),qLd(this.a,a,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),sTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),sTd)),a,c)};_.Uh=function D1d(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 6:return xvd(this,null,6,c);case 7:return !this.A&&(this.A=new iie(z7,this,7)),rLd(this.A,a,c);case 9:return !this.a&&(this.a=new C5d(l7,this,9,5)),rLd(this.a,a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),sTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),sTd)),a,c)};_.Wh=function E1d(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!DXd(this);case 4:return !!y1d(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!xXd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;case 9:return !!this.a&&this.a.i!=0;}return Avd(this,a-AYd((JTd(),sTd)),vYd((b=RD(Ywd(this,16),29),!b?sTd:b),a))};_.bi=function F1d(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:LXd(this,WD(b));return;case 2:IXd(this,WD(b));return;case 5:KXd(this,WD(b));return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);!this.A&&(this.A=new iie(z7,this,7));YGd(this.A,RD(b,16));return;case 8:j1d(this,Heb(TD(b)));return;case 9:!this.a&&(this.a=new C5d(l7,this,9,5));sLd(this.a);!this.a&&(this.a=new C5d(l7,this,9,5));YGd(this.a,RD(b,16));return;}Bvd(this,a-AYd((JTd(),sTd)),vYd((c=RD(Ywd(this,16),29),!c?sTd:c),a),b)};_.ii=function G1d(){return JTd(),sTd};_.ki=function H1d(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,184)&&(RD(this.Cb,184).tb=null);PAd(this,null);return;case 2:yXd(this,null);zXd(this,this.D);return;case 5:KXd(this,null);return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);return;case 8:j1d(this,true);return;case 9:!this.a&&(this.a=new C5d(l7,this,9,5));sLd(this.a);return;}Cvd(this,a-AYd((JTd(),sTd)),vYd((b=RD(Ywd(this,16),29),!b?sTd:b),a))};_.pi=function I1d(){var a,b;if(this.a){for(a=0,b=this.a.i;a<b;++a){aAd(QHd(this.a,a))}}Oee((lke(),jke),this).xe();this.Bb|=1};_.ik=function J1d(){return y1d(this)};_.fk=function K1d(a){if(a!=null){return true}return false};_.rl=function L1d(a){};var e8=sfb(SHe,'EEnumImpl',468);feb(582,448,{110:1,94:1,93:1,2039:1,694:1,155:1,197:1,58:1,114:1,54:1,99:1,582:1,158:1,119:1,120:1},R1d);_.xe=function $1d(){return this.zb};_.Ah=function S1d(a){return M1d(this,a)};_.Lh=function T1d(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return sgb(this.d);case 3:return this.b?this.b:this.a;case 4:return e=this.c,e==null?this.zb:e;case 5:return this.Db>>16==5?RD(this.Cb,685):null;}return zvd(this,a-AYd((JTd(),tTd)),vYd((d=RD(Ywd(this,16),29),!d?tTd:d),a),b,c)};_.Sh=function U1d(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 5:!!this.Cb&&(c=(e=this.Db>>16,e>=0?M1d(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,5,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),tTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),tTd)),a,c)};_.Uh=function V1d(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 5:return xvd(this,null,5,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),tTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),tTd)),a,c)};_.Wh=function W1d(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return !!this.b;case 4:return this.c!=null;case 5:return !!(this.Db>>16==5?RD(this.Cb,685):null);}return Avd(this,a-AYd((JTd(),tTd)),vYd((b=RD(Ywd(this,16),29),!b?tTd:b),a))};_.bi=function X1d(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:PAd(this,WD(b));return;case 2:Q1d(this,RD(b,17).a);return;case 3:O1d(this,RD(b,2039));return;case 4:P1d(this,WD(b));return;}Bvd(this,a-AYd((JTd(),tTd)),vYd((c=RD(Ywd(this,16),29),!c?tTd:c),a),b)};_.ii=function Y1d(){return JTd(),tTd};_.ki=function Z1d(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:PAd(this,null);return;case 2:Q1d(this,0);return;case 3:O1d(this,null);return;case 4:P1d(this,null);return;}Cvd(this,a-AYd((JTd(),tTd)),vYd((b=RD(Ywd(this,16),29),!b?tTd:b),a))};_.Ib=function _1d(){var a;return a=this.c,a==null?this.zb:a};_.b=null;_.c=null;_.d=0;var f8=sfb(SHe,'EEnumLiteralImpl',582);var h8=ufb(SHe,'EFactoryImpl/InternalEDateTimeFormat');feb(498,1,{2114:1},c2d);var g8=sfb(SHe,'EFactoryImpl/1ClientInternalEDateTimeFormat',498);feb(248,120,{110:1,94:1,93:1,89:1,58:1,114:1,54:1,99:1,248:1,119:1,120:1},s2d);_.Ch=function t2d(a,b,c){var d;c=xvd(this,a,b,c);if(!!this.e&&ZD(a,179)){d=k2d(this,this.e);d!=this.c&&(c=o2d(this,d,c))}return c};_.Lh=function u2d(a,b,c){var d;switch(a){case 0:return this.f;case 1:return !this.d&&(this.d=new XZd(o7,this,1)),this.d;case 2:if(b)return i2d(this);return this.c;case 3:return this.b;case 4:return this.e;case 5:if(b)return h2d(this);return this.a;}return zvd(this,a-AYd((JTd(),vTd)),vYd((d=RD(Ywd(this,16),29),!d?vTd:d),a),b,c)};_.Uh=function v2d(a,b,c){var d,e;switch(b){case 0:return g2d(this,null,c);case 1:return !this.d&&(this.d=new XZd(o7,this,1)),rLd(this.d,a,c);case 3:return e2d(this,null,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),vTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),vTd)),a,c)};_.Wh=function w2d(a){var b;switch(a){case 0:return !!this.f;case 1:return !!this.d&&this.d.i!=0;case 2:return !!this.c;case 3:return !!this.b;case 4:return !!this.e;case 5:return !!this.a;}return Avd(this,a-AYd((JTd(),vTd)),vYd((b=RD(Ywd(this,16),29),!b?vTd:b),a))};_.bi=function x2d(a,b){var c;switch(a){case 0:q2d(this,RD(b,89));return;case 1:!this.d&&(this.d=new XZd(o7,this,1));sLd(this.d);!this.d&&(this.d=new XZd(o7,this,1));YGd(this.d,RD(b,16));return;case 3:n2d(this,RD(b,89));return;case 4:p2d(this,RD(b,850));return;case 5:l2d(this,RD(b,142));return;}Bvd(this,a-AYd((JTd(),vTd)),vYd((c=RD(Ywd(this,16),29),!c?vTd:c),a),b)};_.ii=function y2d(){return JTd(),vTd};_.ki=function z2d(a){var b;switch(a){case 0:q2d(this,null);return;case 1:!this.d&&(this.d=new XZd(o7,this,1));sLd(this.d);return;case 3:n2d(this,null);return;case 4:p2d(this,null);return;case 5:l2d(this,null);return;}Cvd(this,a-AYd((JTd(),vTd)),vYd((b=RD(Ywd(this,16),29),!b?vTd:b),a))};_.Ib=function A2d(){var a;a=new dib(awd(this));a.a+=' (expression: ';r2d(this,a);a.a+=')';return a.a};var d2d;var j8=sfb(SHe,'EGenericTypeImpl',248);feb(2067,2062,uKe);_.Gi=function C2d(a,b){B2d(this,a,b)};_.Wk=function D2d(a,b){B2d(this,this.gc(),a);return b};_.$i=function E2d(a){return ju(this.pj(),a)};_.Ii=function F2d(){return this.Ji()};_.pj=function G2d(){return new mee(this)};_.Ji=function H2d(){return this.Ki(0)};_.Ki=function I2d(a){return this.pj().fd(a)};_.Xk=function J2d(a,b){ze(this,a,true);return b};_.Ti=function K2d(a,b){var c,d;d=ku(this,b);c=this.fd(a);c.Rb(d);return d};_.Ui=function L2d(a,b){var c;ze(this,b,true);c=this.fd(a);c.Rb(b)};var Gab=sfb(ZJe,'AbstractSequentialInternalEList',2067);feb(495,2067,uKe,Q2d);_.$i=function R2d(a){return ju(this.pj(),a)};_.Ii=function S2d(){if(this.b==null){return j3d(),j3d(),i3d}return this.sl()};_.pj=function T2d(){return new Whe(this.a,this.b)};_.Ji=function U2d(){if(this.b==null){return j3d(),j3d(),i3d}return this.sl()};_.Ki=function V2d(a){var b,c;if(this.b==null){if(a<0||a>1){throw Adb(new veb(HJe+a+', size=0'))}return j3d(),j3d(),i3d}c=this.sl();for(b=0;b<a;++b){k3d(c)}return c};_.dc=function W2d(){var a,b,c,d,e,f;if(this.b!=null){for(c=0;c<this.b.length;++c){a=this.b[c];if(!this.vl()||this.a.Xh(a)){f=this.a.Nh(a,false);nke();if(RD(a,69).xk()){b=RD(f,160);for(d=0,e=b.gc();d<e;++d){if(O2d(b.Tl(d))&&b.Ul(d)!=null){return false}}}else if(a.Jk()){if(!RD(f,16).dc()){return false}}else if(f!=null){return false}}}}return true};_.Kc=function X2d(){return P2d(this)};_.fd=function Y2d(a){var b,c;if(this.b==null){if(a!=0){throw Adb(new veb(HJe+a+', size=0'))}return j3d(),j3d(),i3d}c=this.ul()?this.tl():this.sl();for(b=0;b<a;++b){k3d(c)}return c};_.Ti=function Z2d(a,b){throw Adb(new jib)};_.Ui=function $2d(a,b){throw Adb(new jib)};_.sl=function _2d(){return new p3d(this.a,this.b)};_.tl=function a3d(){return new D3d(this.a,this.b)};_.ul=function b3d(){return true};_.gc=function c3d(){var a,b,c,d,e,f,g;e=0;if(this.b!=null){for(c=0;c<this.b.length;++c){a=this.b[c];if(!this.vl()||this.a.Xh(a)){g=this.a.Nh(a,false);nke();if(RD(a,69).xk()){b=RD(g,160);for(d=0,f=b.gc();d<f;++d){O2d(b.Tl(d))&&b.Ul(d)!=null&&++e}}else a.Jk()?(e+=RD(g,16).gc()):g!=null&&++e}}}return e};_.vl=function d3d(){return true};var M2d;var Wab=sfb(ZJe,'EContentsEList',495);feb(1177,495,uKe,e3d);_.sl=function f3d(){return new H3d(this.a,this.b)};_.tl=function g3d(){return new F3d(this.a,this.b)};_.vl=function h3d(){return false};var n8=sfb(SHe,'ENamedElementImpl/1',1177);feb(287,1,vKe,p3d);_.Nb=function s3d(a){Ztb(this,a)};_.Rb=function q3d(a){throw Adb(new jib)};_.wl=function r3d(a){if(this.g!=0||!!this.e){throw Adb(new dgb('Iterator already in use or already filtered'))}this.e=a};_.Ob=function t3d(){var a,b,c,d,e,f;switch(this.g){case 3:case 2:{return true}case 1:{return false}case -3:{!this.p?++this.n:this.p.Pb()}default:{if(!this.k||(!this.p?!l3d(this):!m3d(this,this.p))){while(this.d<this.c.length){b=this.c[this.d++];if((!this.e||b.pk()!=C4||b.Lj()!=0)&&(!this.vl()||this.b.Xh(b))){f=this.b.Nh(b,this.ul());this.f=(nke(),RD(b,69).xk());if(this.f||b.Jk()){if(this.ul()){d=RD(f,15);this.k=d}else{d=RD(f,71);this.k=this.j=d}if(ZD(this.k,59)){this.p=null;this.o=this.k.gc();this.n=0}else{this.p=!this.j?this.k.ed():this.j.Ji()}if(!this.p?l3d(this):m3d(this,this.p)){e=!this.p?!this.j?this.k.Xb(this.n++):this.j.$i(this.n++):this.p.Pb();if(this.f){a=RD(e,76);a.Lk();c=a.md();this.i=c}else{c=e;this.i=c}this.g=3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=2;return true}}}this.k=null;this.p=null;this.f=false;this.g=1;return false}else{e=!this.p?!this.j?this.k.Xb(this.n++):this.j.$i(this.n++):this.p.Pb();if(this.f){a=RD(e,76);a.Lk();c=a.md();this.i=c}else{c=e;this.i=c}this.g=3;return true}}}};_.Sb=function u3d(){var a,b,c,d,e,f;switch(this.g){case -3:case -2:{return true}case -1:{return false}case 3:{!this.p?--this.n:this.p.Ub()}default:{if(!this.k||(!this.p?!n3d(this):!o3d(this,this.p))){while(this.d>0){b=this.c[--this.d];if((!this.e||b.pk()!=C4||b.Lj()!=0)&&(!this.vl()||this.b.Xh(b))){f=this.b.Nh(b,this.ul());this.f=(nke(),RD(b,69).xk());if(this.f||b.Jk()){if(this.ul()){d=RD(f,15);this.k=d}else{d=RD(f,71);this.k=this.j=d}if(ZD(this.k,59)){this.o=this.k.gc();this.n=this.o}else{this.p=!this.j?this.k.fd(this.k.gc()):this.j.Ki(this.k.gc())}if(!this.p?n3d(this):o3d(this,this.p)){e=!this.p?!this.j?this.k.Xb(--this.n):this.j.$i(--this.n):this.p.Ub();if(this.f){a=RD(e,76);a.Lk();c=a.md();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=-2;return true}}}this.k=null;this.p=null;this.g=-1;return false}else{e=!this.p?!this.j?this.k.Xb(--this.n):this.j.$i(--this.n):this.p.Ub();if(this.f){a=RD(e,76);a.Lk();c=a.md();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}}};_.Pb=function v3d(){return k3d(this)};_.Tb=function w3d(){return this.a};_.Ub=function x3d(){var a;if(this.g<-1||this.Sb()){--this.a;this.g=0;a=this.i;this.Sb();return a}else{throw Adb(new Dvb)}};_.Vb=function y3d(){return this.a-1};_.Qb=function z3d(){throw Adb(new jib)};_.ul=function A3d(){return false};_.Wb=function B3d(a){throw Adb(new jib)};_.vl=function C3d(){return true};_.a=0;_.d=0;_.f=false;_.g=0;_.n=0;_.o=0;var i3d;var Uab=sfb(ZJe,'EContentsEList/FeatureIteratorImpl',287);feb(711,287,vKe,D3d);_.ul=function E3d(){return true};var Vab=sfb(ZJe,'EContentsEList/ResolvingFeatureIteratorImpl',711);feb(1178,711,vKe,F3d);_.vl=function G3d(){return false};var l8=sfb(SHe,'ENamedElementImpl/1/1',1178);feb(1179,287,vKe,H3d);_.vl=function I3d(){return false};var m8=sfb(SHe,'ENamedElementImpl/1/2',1179);feb(38,152,GJe,L3d,M3d,N3d,O3d,P3d,Q3d,R3d,S3d,T3d,U3d,V3d,W3d,X3d,Y3d,Z3d,$3d,_3d,a4d,b4d,c4d,d4d,e4d,f4d,g4d,h4d);_.Kj=function i4d(){return K3d(this)};_.Rj=function j4d(){var a;a=K3d(this);if(a){return a.ik()}return null};_.hj=function k4d(a){this.b==-1&&!!this.a&&(this.b=this.c.Hh(this.a.Lj(),this.a.pk()));return this.c.yh(this.b,a)};_.jj=function l4d(){return this.c};_.Sj=function m4d(){var a;a=K3d(this);if(a){return a.tk()}return false};_.b=-1;var p8=sfb(SHe,'ENotificationImpl',38);feb(411,291,{110:1,94:1,93:1,155:1,197:1,58:1,62:1,114:1,480:1,54:1,99:1,158:1,411:1,291:1,119:1,120:1},q4d);_.Ah=function r4d(a){return n4d(this,a)};_.Lh=function s4d(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),f=this.t,f>1||f==-1?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?RD(this.Cb,29):null;case 11:return !this.d&&(this.d=new iie(z7,this,11)),this.d;case 12:return !this.c&&(this.c=new C5d(u7,this,12,10)),this.c;case 13:return !this.a&&(this.a=new F4d(this,this)),this.a;case 14:return o4d(this);}return zvd(this,a-AYd((JTd(),ATd)),vYd((d=RD(Ywd(this,16),29),!d?ATd:d),a),b,c)};_.Sh=function t4d(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?n4d(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,10,c);case 12:return !this.c&&(this.c=new C5d(u7,this,12,10)),qLd(this.c,a,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),ATd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),ATd)),a,c)};_.Uh=function u4d(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 9:return VVd(this,c);case 10:return xvd(this,null,10,c);case 11:return !this.d&&(this.d=new iie(z7,this,11)),rLd(this.d,a,c);case 12:return !this.c&&(this.c=new C5d(u7,this,12,10)),rLd(this.c,a,c);case 14:return rLd(o4d(this),a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),ATd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),ATd)),a,c)};_.Wh=function v4d(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return !!(this.Db>>16==10?RD(this.Cb,29):null);case 11:return !!this.d&&this.d.i!=0;case 12:return !!this.c&&this.c.i!=0;case 13:return !!this.a&&o4d(this.a.a).i!=0&&!(!!this.b&&o5d(this.b));case 14:return !!this.b&&o5d(this.b);}return Avd(this,a-AYd((JTd(),ATd)),vYd((b=RD(Ywd(this,16),29),!b?ATd:b),a))};_.bi=function w4d(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:PAd(this,WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:bWd(this,RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;case 11:!this.d&&(this.d=new iie(z7,this,11));sLd(this.d);!this.d&&(this.d=new iie(z7,this,11));YGd(this.d,RD(b,16));return;case 12:!this.c&&(this.c=new C5d(u7,this,12,10));sLd(this.c);!this.c&&(this.c=new C5d(u7,this,12,10));YGd(this.c,RD(b,16));return;case 13:!this.a&&(this.a=new F4d(this,this));VJd(this.a);!this.a&&(this.a=new F4d(this,this));YGd(this.a,RD(b,16));return;case 14:sLd(o4d(this));YGd(o4d(this),RD(b,16));return;}Bvd(this,a-AYd((JTd(),ATd)),vYd((c=RD(Ywd(this,16),29),!c?ATd:c),a),b)};_.ii=function x4d(){return JTd(),ATd};_.ki=function y4d(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:PAd(this,null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:bWd(this,1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;case 11:!this.d&&(this.d=new iie(z7,this,11));sLd(this.d);return;case 12:!this.c&&(this.c=new C5d(u7,this,12,10));sLd(this.c);return;case 13:!!this.a&&VJd(this.a);return;case 14:!!this.b&&sLd(this.b);return;}Cvd(this,a-AYd((JTd(),ATd)),vYd((b=RD(Ywd(this,16),29),!b?ATd:b),a))};_.pi=function z4d(){var a,b;if(this.c){for(a=0,b=this.c.i;a<b;++a){aAd(QHd(this.c,a))}}WVd(this);this.Bb|=1};var u8=sfb(SHe,'EOperationImpl',411);feb(513,756,tKe,F4d);_.qj=function I4d(a,b){A4d(this,a,RD(b,142))};_.rj=function J4d(a){B4d(this,RD(a,142))};_.xj=function P4d(a){var b,c;return b=RD(QHd(o4d(this.a),a),89),c=b.c,c?c:(JTd(),wTd)};_.Cj=function U4d(a){var b,c;return b=RD(vLd(o4d(this.a),a),89),c=b.c,c?c:(JTd(),wTd)};_.Dj=function V4d(a,b){return D4d(this,a,RD(b,142))};_.Li=function G4d(){return false};_.Ij=function H4d(a,b,c,d,e){return null};_.sj=function K4d(){return new l5d(this)};_.tj=function L4d(){sLd(o4d(this.a))};_.uj=function M4d(a){return C4d(this,a)};_.vj=function N4d(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!C4d(this,b)){return false}}return true};_.wj=function O4d(a){var b,c,d;if(ZD(a,15)){d=RD(a,15);if(d.gc()==o4d(this.a).i){for(b=d.Kc(),c=new dMd(this);b.Ob();){if(dE(b.Pb())!==dE(bMd(c))){return false}}return true}}return false};_.yj=function Q4d(){var a,b,c,d,e;c=1;for(b=new dMd(o4d(this.a));b.e!=b.i.gc();){a=RD(bMd(b),89);d=(e=a.c,e?e:(JTd(),wTd));c=31*c+(!d?0:tb(d))}return c};_.zj=function R4d(a){var b,c,d,e;d=0;for(c=new dMd(o4d(this.a));c.e!=c.i.gc();){b=RD(bMd(c),89);if(dE(a)===dE((e=b.c,e?e:(JTd(),wTd)))){return d}++d}return -1};_.Aj=function S4d(){return o4d(this.a).i==0};_.Bj=function T4d(){return null};_.Ej=function W4d(){return o4d(this.a).i};_.Fj=function X4d(){var a,b,c,d,e,f;f=o4d(this.a).i;e=$C(jJ,rve,1,f,5,1);c=0;for(b=new dMd(o4d(this.a));b.e!=b.i.gc();){a=RD(bMd(b),89);e[c++]=(d=a.c,d?d:(JTd(),wTd))}return e};_.Gj=function Y4d(a){var b,c,d,e,f,g,h;h=o4d(this.a).i;if(a.length<h){e=IMd(rb(a).c,h);a=e}a.length>h&&bD(a,h,null);d=0;for(c=new dMd(o4d(this.a));c.e!=c.i.gc();){b=RD(bMd(c),89);f=(g=b.c,g?g:(JTd(),wTd));bD(a,d++,f)}return a};_.Hj=function Z4d(){var a,b,c,d,e;e=new Qhb;e.a+='[';a=o4d(this.a);for(b=0,d=o4d(this.a).i;b<d;){Nhb(e,Ghb((c=RD(QHd(a,b),89).c,c?c:(JTd(),wTd))));++b<d&&(e.a+=pve,e)}e.a+=']';return e.a};_.Jj=function $4d(a){};_.Lj=function _4d(){return 13};_.kl=function a5d(){return true};_.Mj=function b5d(){return false};_.ll=function c5d(){return false};_.ml=function d5d(){return false};_.nl=function e5d(){return true};_.al=function f5d(){return false};_.ol=function g5d(){return true};_.fk=function h5d(a){return ZD(a,142)};_.Qj=function i5d(){return p4d(this.a)};_.Si=function j5d(){return true};_.Yi=function k5d(){return true};var s8=sfb(SHe,'EOperationImpl/1',513);feb(1376,2062,kwe,l5d);_.fd=function m5d(a){return ZGd(this.a,a)};_.gc=function n5d(){return o4d(this.a.a).i};var r8=sfb(SHe,'EOperationImpl/1/1',1376);feb(1377,555,oKe,s5d);_.Ti=function w5d(a,b){var c,d;return c=RD(uLd(this,a,b),89),Mvd(this.e)&&eZd(this,new c4d(this.a,7,(JTd(),BTd),sgb(b),(d=c.c,d?d:wTd),a)),c};_.Uj=function x5d(a,b){return p5d(this,RD(a,89),b)};_.Vj=function y5d(a,b){return q5d(this,RD(a,89),b)};_.Wj=function z5d(a,b,c){return r5d(this,RD(a,89),RD(b,89),c)};_.Ij=function t5d(a,b,c,d,e){switch(a){case 3:{return dZd(this,a,b,c,d,this.i>1)}case 5:{return dZd(this,a,b,c,d,this.i-RD(c,15).gc()>0)}default:{return new P3d(this.e,a,this.c,b,c,d,true)}}};_.Tj=function u5d(){return true};_.Qj=function v5d(){return o5d(this)};_.Gk=function A5d(){sLd(this)};var t8=sfb(SHe,'EOperationImpl/2',1377);feb(507,1,{2037:1,507:1},B5d);var v8=sfb(SHe,'EPackageImpl/1',507);feb(14,83,oKe,C5d);_.il=function D5d(){return this.d};_.jl=function E5d(){return this.b};_.ml=function F5d(){return true};_.b=0;var gbb=sfb(ZJe,'EObjectContainmentWithInverseEList',14);feb(365,14,oKe,G5d);_.nl=function H5d(){return true};_.Wi=function I5d(a,b){return gZd(this,a,RD(b,58))};var dbb=sfb(ZJe,'EObjectContainmentWithInverseEList/Resolving',365);feb(307,365,oKe,J5d);_.Ni=function K5d(){this.a.tb=null};var w8=sfb(SHe,'EPackageImpl/2',307);feb(1278,1,{},L5d);var x8=sfb(SHe,'EPackageImpl/3',1278);feb(733,45,Hxe,O5d);_._b=function P5d(a){return bE(a)?Yjb(this,a):!!qtb(this.f,a)};var z8=sfb(SHe,'EPackageRegistryImpl',733);feb(518,291,{110:1,94:1,93:1,155:1,197:1,58:1,2116:1,114:1,480:1,54:1,99:1,158:1,518:1,291:1,119:1,120:1},R5d);_.Ah=function S5d(a){return Q5d(this,a)};_.Lh=function T5d(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),f=this.t,f>1||f==-1?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?RD(this.Cb,62):null;}return zvd(this,a-AYd((JTd(),DTd)),vYd((d=RD(Ywd(this,16),29),!d?DTd:d),a),b,c)};_.Sh=function U5d(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Q5d(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,10,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),DTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),DTd)),a,c)};_.Uh=function V5d(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 9:return VVd(this,c);case 10:return xvd(this,null,10,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),DTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),DTd)),a,c)};_.Wh=function W5d(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return !!(this.Db>>16==10?RD(this.Cb,62):null);}return Avd(this,a-AYd((JTd(),DTd)),vYd((b=RD(Ywd(this,16),29),!b?DTd:b),a))};_.ii=function X5d(){return JTd(),DTd};var A8=sfb(SHe,'EParameterImpl',518);feb(102,461,{110:1,94:1,93:1,155:1,197:1,58:1,19:1,179:1,69:1,114:1,480:1,54:1,99:1,158:1,102:1,461:1,291:1,119:1,120:1,692:1},d6d);_.Lh=function e6d(a,b,c){var d,e,f,g;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),g=this.t,g>1||g==-1?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return Geb(),(this.Bb&gwe)!=0?true:false;case 11:return Geb(),(this.Bb&cKe)!=0?true:false;case 12:return Geb(),(this.Bb&qxe)!=0?true:false;case 13:return this.j;case 14:return tWd(this);case 15:return Geb(),(this.Bb&bKe)!=0?true:false;case 16:return Geb(),(this.Bb&Ove)!=0?true:false;case 17:return uWd(this);case 18:return Geb(),(this.Bb&QHe)!=0?true:false;case 19:return Geb(),f=Z5d(this),!!f&&(f.Bb&QHe)!=0?true:false;case 20:return Geb(),(this.Bb&txe)!=0?true:false;case 21:if(b)return Z5d(this);return this.b;case 22:if(b)return $5d(this);return Y5d(this);case 23:return !this.a&&(this.a=new zie(g7,this,23)),this.a;}return zvd(this,a-AYd((JTd(),ETd)),vYd((d=RD(Ywd(this,16),29),!d?ETd:d),a),b,c)};_.Wh=function f6d(a){var b,c,d,e;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return e=this.t,e>1||e==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return (this.Bb&gwe)==0;case 11:return (this.Bb&cKe)!=0;case 12:return (this.Bb&qxe)!=0;case 13:return this.j!=null;case 14:return tWd(this)!=null;case 15:return (this.Bb&bKe)!=0;case 16:return (this.Bb&Ove)!=0;case 17:return !!uWd(this);case 18:return (this.Bb&QHe)!=0;case 19:return d=Z5d(this),!!d&&(d.Bb&QHe)!=0;case 20:return (this.Bb&txe)==0;case 21:return !!this.b;case 22:return !!Y5d(this);case 23:return !!this.a&&this.a.i!=0;}return Avd(this,a-AYd((JTd(),ETd)),vYd((b=RD(Ywd(this,16),29),!b?ETd:b),a))};_.bi=function g6d(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:CWd(this,WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:bWd(this,RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;case 10:xWd(this,Heb(TD(b)));return;case 11:FWd(this,Heb(TD(b)));return;case 12:DWd(this,Heb(TD(b)));return;case 13:yWd(this,WD(b));return;case 15:EWd(this,Heb(TD(b)));return;case 16:AWd(this,Heb(TD(b)));return;case 18:_5d(this,Heb(TD(b)));return;case 20:c6d(this,Heb(TD(b)));return;case 21:b6d(this,RD(b,19));return;case 23:!this.a&&(this.a=new zie(g7,this,23));sLd(this.a);!this.a&&(this.a=new zie(g7,this,23));YGd(this.a,RD(b,16));return;}Bvd(this,a-AYd((JTd(),ETd)),vYd((c=RD(Ywd(this,16),29),!c?ETd:c),a),b)};_.ii=function h6d(){return JTd(),ETd};_.ki=function i6d(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,90)&&v$d(yYd(RD(this.Cb,90)),4);PAd(this,null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:bWd(this,1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;case 10:xWd(this,true);return;case 11:FWd(this,false);return;case 12:DWd(this,false);return;case 13:this.i=null;zWd(this,null);return;case 15:EWd(this,false);return;case 16:AWd(this,false);return;case 18:a6d(this,false);ZD(this.Cb,90)&&v$d(yYd(RD(this.Cb,90)),2);return;case 20:c6d(this,true);return;case 21:b6d(this,null);return;case 23:!this.a&&(this.a=new zie(g7,this,23));sLd(this.a);return;}Cvd(this,a-AYd((JTd(),ETd)),vYd((b=RD(Ywd(this,16),29),!b?ETd:b),a))};_.pi=function j6d(){$5d(this);Afe(Qee((lke(),jke),this));WVd(this);this.Bb|=1};_.uk=function k6d(){return Z5d(this)};_._k=function l6d(){var a;return a=Z5d(this),!!a&&(a.Bb&QHe)!=0};_.al=function m6d(){return (this.Bb&QHe)!=0};_.bl=function n6d(){return (this.Bb&txe)!=0};_.Yk=function o6d(a,b){this.c=null;return ZVd(this,a,b)};_.Ib=function p6d(){var a;if((this.Db&64)!=0)return GWd(this);a=new Shb(GWd(this));a.a+=' (containment: ';Ohb(a,(this.Bb&QHe)!=0);a.a+=', resolveProxies: ';Ohb(a,(this.Bb&txe)!=0);a.a+=')';return a.a};var B8=sfb(SHe,'EReferenceImpl',102);feb(561,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,561:1,119:1,120:1},v6d);_.Fb=function B6d(a){return this===a};_.ld=function D6d(){return this.b};_.md=function E6d(){return this.c};_.Hb=function F6d(){return kFb(this)};_.Di=function H6d(a){q6d(this,WD(a))};_.nd=function I6d(a){return u6d(this,WD(a))};_.Lh=function w6d(a,b,c){var d;switch(a){case 0:return this.b;case 1:return this.c;}return zvd(this,a-AYd((JTd(),FTd)),vYd((d=RD(Ywd(this,16),29),!d?FTd:d),a),b,c)};_.Wh=function x6d(a){var b;switch(a){case 0:return this.b!=null;case 1:return this.c!=null;}return Avd(this,a-AYd((JTd(),FTd)),vYd((b=RD(Ywd(this,16),29),!b?FTd:b),a))};_.bi=function y6d(a,b){var c;switch(a){case 0:r6d(this,WD(b));return;case 1:t6d(this,WD(b));return;}Bvd(this,a-AYd((JTd(),FTd)),vYd((c=RD(Ywd(this,16),29),!c?FTd:c),a),b)};_.ii=function z6d(){return JTd(),FTd};_.ki=function A6d(a){var b;switch(a){case 0:s6d(this,null);return;case 1:t6d(this,null);return;}Cvd(this,a-AYd((JTd(),FTd)),vYd((b=RD(Ywd(this,16),29),!b?FTd:b),a))};_.Bi=function C6d(){var a;if(this.a==-1){a=this.b;this.a=a==null?0:ohb(a)}return this.a};_.Ci=function G6d(a){this.a=a};_.Ib=function J6d(){var a;if((this.Db&64)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (key: ';Nhb(a,this.b);a.a+=', value: ';Nhb(a,this.c);a.a+=')';return a.a};_.a=-1;_.b=null;_.c=null;var C8=sfb(SHe,'EStringToStringMapEntryImpl',561);var Ibb=ufb(ZJe,'FeatureMap/Entry/Internal');feb(576,1,wKe);_.xl=function M6d(a){return this.yl(RD(a,54))};_.yl=function N6d(a){return this.xl(a)};_.Fb=function O6d(a){var b,c;if(this===a){return true}else if(ZD(a,76)){b=RD(a,76);if(b.Lk()==this.c){c=this.md();return c==null?b.md()==null:pb(c,b.md())}else{return false}}else{return false}};_.Lk=function P6d(){return this.c};_.Hb=function Q6d(){var a;a=this.md();return tb(this.c)^(a==null?0:tb(a))};_.Ib=function R6d(){var a,b;a=this.c;b=BXd(a.qk()).yi();a.xe();return (b!=null&&b.length!=0?b+':'+a.xe():a.xe())+'='+this.md()};var D8=sfb(SHe,'EStructuralFeatureImpl/BasicFeatureMapEntry',576);feb(791,576,wKe,U6d);_.yl=function V6d(a){return new U6d(this.c,a)};_.md=function W6d(){return this.a};_.zl=function X6d(a,b,c){return S6d(this,a,this.a,b,c)};_.Al=function Y6d(a,b,c){return T6d(this,a,this.a,b,c)};var E8=sfb(SHe,'EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry',791);feb(1350,1,{},Z6d);_.yk=function $6d(a,b,c,d,e){var f;f=RD(Evd(a,this.b),220);return f.Yl(this.a).Fk(d)};_.zk=function _6d(a,b,c,d,e){var f;f=RD(Evd(a,this.b),220);return f.Pl(this.a,d,e)};_.Ak=function a7d(a,b,c,d,e){var f;f=RD(Evd(a,this.b),220);return f.Ql(this.a,d,e)};_.Bk=function b7d(a,b,c){var d;d=RD(Evd(a,this.b),220);return d.Yl(this.a).Qj()};_.Ck=function c7d(a,b,c,d){var e;e=RD(Evd(a,this.b),220);e.Yl(this.a).Wb(d)};_.Dk=function d7d(a,b,c){return RD(Evd(a,this.b),220).Yl(this.a)};_.Ek=function e7d(a,b,c){var d;d=RD(Evd(a,this.b),220);d.Yl(this.a).Gk()};var F8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator',1350);feb(91,1,{},g7d,h7d,i7d,j7d);_.yk=function k7d(a,b,c,d,e){var f;f=b.li(c);f==null&&b.mi(c,f=f7d(this,a));if(!e){switch(this.e){case 50:case 41:return RD(f,597).bk();case 40:return RD(f,220).Vl();}}return f};_.zk=function l7d(a,b,c,d,e){var f,g;g=b.li(c);g==null&&b.mi(c,g=f7d(this,a));f=RD(g,71).Wk(d,e);return f};_.Ak=function m7d(a,b,c,d,e){var f;f=b.li(c);f!=null&&(e=RD(f,71).Xk(d,e));return e};_.Bk=function n7d(a,b,c){var d;d=b.li(c);return d!=null&&RD(d,79).Qj()};_.Ck=function o7d(a,b,c,d){var e;e=RD(b.li(c),79);!e&&b.mi(c,e=f7d(this,a));e.Wb(d)};_.Dk=function p7d(a,b,c){var d,e;e=b.li(c);e==null&&b.mi(c,e=f7d(this,a));if(ZD(e,79)){return RD(e,79)}else{d=RD(b.li(c),15);return new I9d(d)}};_.Ek=function q7d(a,b,c){var d;d=RD(b.li(c),79);!d&&b.mi(c,d=f7d(this,a));d.Gk()};_.b=0;_.e=0;var G8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateMany',91);feb(512,1,{});_.zk=function u7d(a,b,c,d,e){throw Adb(new jib)};_.Ak=function v7d(a,b,c,d,e){throw Adb(new jib)};_.Dk=function w7d(a,b,c){return new x7d(this,a,b,c)};var r7d;var n9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingle',512);feb(1367,1,$Je,x7d);_.Fk=function y7d(a){return this.a.yk(this.c,this.d,this.b,a,true)};_.Qj=function z7d(){return this.a.Bk(this.c,this.d,this.b)};_.Wb=function A7d(a){this.a.Ck(this.c,this.d,this.b,a)};_.Gk=function B7d(){this.a.Ek(this.c,this.d,this.b)};_.b=0;var H8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingle/1',1367);feb(784,512,{},C7d);_.yk=function D7d(a,b,c,d,e){return jwd(a,a.Ph(),a.Fh())==this.b?this.bl()&&d?yvd(a):a.Ph():null};_.zk=function E7d(a,b,c,d,e){var f,g;!!a.Ph()&&(e=(f=a.Fh(),f>=0?a.Ah(e):a.Ph().Th(a,-1-f,null,e)));g=BYd(a.Dh(),this.e);return a.Ch(d,g,e)};_.Ak=function F7d(a,b,c,d,e){var f;f=BYd(a.Dh(),this.e);return a.Ch(null,f,e)};_.Bk=function G7d(a,b,c){var d;d=BYd(a.Dh(),this.e);return !!a.Ph()&&a.Fh()==d};_.Ck=function H7d(a,b,c,d){var e,f,g,h,i;if(d!=null&&!FXd(this.a,d)){throw Adb(new Ifb(xKe+(ZD(d,58)?GYd(RD(d,58).Dh()):ofb(rb(d)))+yKe+this.a+"'"))}e=a.Ph();g=BYd(a.Dh(),this.e);if(dE(d)!==dE(e)||a.Fh()!=g&&d!=null){if(Oje(a,RD(d,58)))throw Adb(new agb(UHe+a.Ib()));i=null;!!e&&(i=(f=a.Fh(),f>=0?a.Ah(i):a.Ph().Th(a,-1-f,null,i)));h=RD(d,54);!!h&&(i=h.Rh(a,BYd(h.Dh(),this.b),null,i));i=a.Ch(h,g,i);!!i&&i.oj()}else{a.vh()&&a.wh()&&qvd(a,new N3d(a,1,g,d,d))}};_.Ek=function I7d(a,b,c){var d,e,f,g;d=a.Ph();if(d){g=(e=a.Fh(),e>=0?a.Ah(null):a.Ph().Th(a,-1-e,null,null));f=BYd(a.Dh(),this.e);g=a.Ch(null,f,g);!!g&&g.oj()}else{a.vh()&&a.wh()&&qvd(a,new b4d(a,1,this.e,null,null))}};_.bl=function J7d(){return false};var J8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainer',784);feb(1351,784,{},K7d);_.bl=function L7d(){return true};var I8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving',1351);feb(574,512,{});_.yk=function O7d(a,b,c,d,e){var f;return f=b.li(c),f==null?this.b:dE(f)===dE(r7d)?null:f};_.Bk=function P7d(a,b,c){var d;d=b.li(c);return d!=null&&(dE(d)===dE(r7d)||!pb(d,this.b))};_.Ck=function Q7d(a,b,c,d){var e,f;if(a.vh()&&a.wh()){e=(f=b.li(c),f==null?this.b:dE(f)===dE(r7d)?null:f);if(d==null){if(this.c!=null){b.mi(c,null);d=this.b}else this.b!=null?b.mi(c,r7d):b.mi(c,null)}else{this.Bl(d);b.mi(c,d)}qvd(a,this.d.Cl(a,1,this.e,e,d))}else{if(d==null){this.c!=null?b.mi(c,null):this.b!=null?b.mi(c,r7d):b.mi(c,null)}else{this.Bl(d);b.mi(c,d)}}};_.Ek=function R7d(a,b,c){var d,e;if(a.vh()&&a.wh()){d=(e=b.li(c),e==null?this.b:dE(e)===dE(r7d)?null:e);b.ni(c);qvd(a,this.d.Cl(a,1,this.e,d,this.b))}else{b.ni(c)}};_.Bl=function S7d(a){throw Adb(new Hfb)};var Y8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData',574);feb(zKe,1,{},b8d);_.Cl=function c8d(a,b,c,d,e){return new b4d(a,b,c,d,e)};_.Dl=function d8d(a,b,c,d,e,f){return new d4d(a,b,c,d,e,f)};var T7d,U7d,V7d,W7d,X7d,Y7d,Z7d,$7d,_7d;var S8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator',zKe);feb(1368,zKe,{},e8d);_.Cl=function f8d(a,b,c,d,e){return new g4d(a,b,c,Heb(TD(d)),Heb(TD(e)))};_.Dl=function g8d(a,b,c,d,e,f){return new h4d(a,b,c,Heb(TD(d)),Heb(TD(e)),f)};var K8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1',1368);feb(1369,zKe,{},h8d);_.Cl=function i8d(a,b,c,d,e){return new R3d(a,b,c,RD(d,222).a,RD(e,222).a)};_.Dl=function j8d(a,b,c,d,e,f){return new S3d(a,b,c,RD(d,222).a,RD(e,222).a,f)};var L8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2',1369);feb(1370,zKe,{},k8d);_.Cl=function l8d(a,b,c,d,e){return new T3d(a,b,c,RD(d,180).a,RD(e,180).a)};_.Dl=function m8d(a,b,c,d,e,f){return new U3d(a,b,c,RD(d,180).a,RD(e,180).a,f)};var M8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3',1370);feb(1371,zKe,{},n8d);_.Cl=function o8d(a,b,c,d,e){return new V3d(a,b,c,Kfb(UD(d)),Kfb(UD(e)))};_.Dl=function p8d(a,b,c,d,e,f){return new W3d(a,b,c,Kfb(UD(d)),Kfb(UD(e)),f)};var N8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4',1371);feb(1372,zKe,{},q8d);_.Cl=function r8d(a,b,c,d,e){return new X3d(a,b,c,RD(d,161).a,RD(e,161).a)};_.Dl=function s8d(a,b,c,d,e,f){return new Y3d(a,b,c,RD(d,161).a,RD(e,161).a,f)};var O8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5',1372);feb(1373,zKe,{},t8d);_.Cl=function u8d(a,b,c,d,e){return new Z3d(a,b,c,RD(d,17).a,RD(e,17).a)};_.Dl=function v8d(a,b,c,d,e,f){return new $3d(a,b,c,RD(d,17).a,RD(e,17).a,f)};var P8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6',1373);feb(1374,zKe,{},w8d);_.Cl=function x8d(a,b,c,d,e){return new _3d(a,b,c,RD(d,168).a,RD(e,168).a)};_.Dl=function y8d(a,b,c,d,e,f){return new a4d(a,b,c,RD(d,168).a,RD(e,168).a,f)};var Q8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7',1374);feb(1375,zKe,{},z8d);_.Cl=function A8d(a,b,c,d,e){return new e4d(a,b,c,RD(d,191).a,RD(e,191).a)};_.Dl=function B8d(a,b,c,d,e,f){return new f4d(a,b,c,RD(d,191).a,RD(e,191).a,f)};var R8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8',1375);feb(1353,574,{},C8d);_.Bl=function D8d(a){if(!this.a.fk(a)){throw Adb(new Ifb(xKe+rb(a)+yKe+this.a+"'"))}};var T8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic',1353);feb(1354,574,{},E8d);_.Bl=function F8d(a){};var U8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic',1354);feb(785,574,{});_.Bk=function G8d(a,b,c){var d;d=b.li(c);return d!=null};_.Ck=function H8d(a,b,c,d){var e,f;if(a.vh()&&a.wh()){e=true;f=b.li(c);if(f==null){e=false;f=this.b}else dE(f)===dE(r7d)&&(f=null);if(d==null){if(this.c!=null){b.mi(c,null);d=this.b}else{b.mi(c,r7d)}}else{this.Bl(d);b.mi(c,d)}qvd(a,this.d.Dl(a,1,this.e,f,d,!e))}else{if(d==null){this.c!=null?b.mi(c,null):b.mi(c,r7d)}else{this.Bl(d);b.mi(c,d)}}};_.Ek=function I8d(a,b,c){var d,e;if(a.vh()&&a.wh()){d=true;e=b.li(c);if(e==null){d=false;e=this.b}else dE(e)===dE(r7d)&&(e=null);b.ni(c);qvd(a,this.d.Dl(a,2,this.e,e,this.b,d))}else{b.ni(c)}};var X8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable',785);feb(1355,785,{},J8d);_.Bl=function K8d(a){if(!this.a.fk(a)){throw Adb(new Ifb(xKe+rb(a)+yKe+this.a+"'"))}};var V8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic',1355);feb(1356,785,{},L8d);_.Bl=function M8d(a){};var W8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic',1356);feb(410,512,{},N8d);_.yk=function P8d(a,b,c,d,e){var f,g,h,i,j;j=b.li(c);if(this.tk()&&dE(j)===dE(r7d)){return null}else if(this.bl()&&d&&j!=null){h=RD(j,54);if(h.Vh()){i=Vvd(a,h);if(h!=i){if(!FXd(this.a,i)){throw Adb(new Ifb(xKe+rb(i)+yKe+this.a+"'"))}b.mi(c,j=i);if(this.al()){f=RD(i,54);g=h.Th(a,!this.b?-1-BYd(a.Dh(),this.e):BYd(h.Dh(),this.b),null,null);!f.Ph()&&(g=f.Rh(a,!this.b?-1-BYd(a.Dh(),this.e):BYd(f.Dh(),this.b),null,g));!!g&&g.oj()}a.vh()&&a.wh()&&qvd(a,new b4d(a,9,this.e,h,i))}}return j}else{return j}};_.zk=function Q8d(a,b,c,d,e){var f,g;g=b.li(c);dE(g)===dE(r7d)&&(g=null);b.mi(c,d);if(this.Mj()){if(dE(g)!==dE(d)&&g!=null){f=RD(g,54);e=f.Th(a,BYd(f.Dh(),this.b),null,e)}}else this.al()&&g!=null&&(e=RD(g,54).Th(a,-1-BYd(a.Dh(),this.e),null,e));if(a.vh()&&a.wh()){!e&&(e=new gLd(4));e.nj(new b4d(a,1,this.e,g,d))}return e};_.Ak=function R8d(a,b,c,d,e){var f;f=b.li(c);dE(f)===dE(r7d)&&(f=null);b.ni(c);if(a.vh()&&a.wh()){!e&&(e=new gLd(4));this.tk()?e.nj(new b4d(a,2,this.e,f,null)):e.nj(new b4d(a,1,this.e,f,null))}return e};_.Bk=function S8d(a,b,c){var d;d=b.li(c);return d!=null};_.Ck=function T8d(a,b,c,d){var e,f,g,h,i;if(d!=null&&!FXd(this.a,d)){throw Adb(new Ifb(xKe+(ZD(d,58)?GYd(RD(d,58).Dh()):ofb(rb(d)))+yKe+this.a+"'"))}i=b.li(c);h=i!=null;this.tk()&&dE(i)===dE(r7d)&&(i=null);g=null;if(this.Mj()){if(dE(i)!==dE(d)){if(i!=null){e=RD(i,54);g=e.Th(a,BYd(e.Dh(),this.b),null,g)}if(d!=null){e=RD(d,54);g=e.Rh(a,BYd(e.Dh(),this.b),null,g)}}}else if(this.al()){if(dE(i)!==dE(d)){i!=null&&(g=RD(i,54).Th(a,-1-BYd(a.Dh(),this.e),null,g));d!=null&&(g=RD(d,54).Rh(a,-1-BYd(a.Dh(),this.e),null,g))}}d==null&&this.tk()?b.mi(c,r7d):b.mi(c,d);if(a.vh()&&a.wh()){f=new d4d(a,1,this.e,i,d,this.tk()&&!h);if(!g){qvd(a,f)}else{g.nj(f);g.oj()}}else !!g&&g.oj()};_.Ek=function U8d(a,b,c){var d,e,f,g,h;h=b.li(c);g=h!=null;this.tk()&&dE(h)===dE(r7d)&&(h=null);f=null;if(h!=null){if(this.Mj()){d=RD(h,54);f=d.Th(a,BYd(d.Dh(),this.b),null,f)}else this.al()&&(f=RD(h,54).Th(a,-1-BYd(a.Dh(),this.e),null,f))}b.ni(c);if(a.vh()&&a.wh()){e=new d4d(a,this.tk()?2:1,this.e,h,null,g);if(!f){qvd(a,e)}else{f.nj(e);f.oj()}}else !!f&&f.oj()};_.Mj=function V8d(){return false};_.al=function W8d(){return false};_.bl=function X8d(){return false};_.tk=function Y8d(){return false};var m9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObject',410);feb(575,410,{},Z8d);_.al=function $8d(){return true};var e9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment',575);feb(1359,575,{},_8d);_.bl=function a9d(){return true};var Z8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving',1359);feb(787,575,{},b9d);_.tk=function c9d(){return true};var _8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable',787);feb(1361,787,{},d9d);_.bl=function e9d(){return true};var $8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving',1361);feb(650,575,{},f9d);_.Mj=function g9d(){return true};var d9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse',650);feb(1360,650,{},h9d);_.bl=function i9d(){return true};var a9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving',1360);feb(788,650,{},j9d);_.tk=function k9d(){return true};var c9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable',788);feb(1362,788,{},l9d);_.bl=function m9d(){return true};var b9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving',1362);feb(651,410,{},n9d);_.bl=function o9d(){return true};var i9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving',651);feb(1363,651,{},p9d);_.tk=function q9d(){return true};var f9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable',1363);feb(789,651,{},r9d);_.Mj=function s9d(){return true};var h9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse',789);feb(1364,789,{},t9d);_.tk=function u9d(){return true};var g9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable',1364);feb(1357,410,{},v9d);_.tk=function w9d(){return true};var j9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable',1357);feb(786,410,{},x9d);_.Mj=function y9d(){return true};var l9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse',786);feb(1358,786,{},z9d);_.tk=function A9d(){return true};var k9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable',1358);feb(790,576,wKe,D9d);_.yl=function E9d(a){return new D9d(this.a,this.c,a)};_.md=function F9d(){return this.b};_.zl=function G9d(a,b,c){return B9d(this,a,this.b,c)};_.Al=function H9d(a,b,c){return C9d(this,a,this.b,c)};var o9=sfb(SHe,'EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry',790);feb(1365,1,$Je,I9d);_.Fk=function J9d(a){return this.a};_.Qj=function K9d(){return ZD(this.a,97)?RD(this.a,97).Qj():!this.a.dc()};_.Wb=function L9d(a){this.a.$b();this.a.Gc(RD(a,15))};_.Gk=function M9d(){ZD(this.a,97)?RD(this.a,97).Gk():this.a.$b()};var p9=sfb(SHe,'EStructuralFeatureImpl/SettingMany',1365);feb(1366,576,wKe,N9d);_.xl=function O9d(a){return new S9d((nme(),mme),this.b.ri(this.a,a))};_.md=function P9d(){return null};_.zl=function Q9d(a,b,c){return c};_.Al=function R9d(a,b,c){return c};var q9=sfb(SHe,'EStructuralFeatureImpl/SimpleContentFeatureMapEntry',1366);feb(652,576,wKe,S9d);_.xl=function T9d(a){return new S9d(this.c,a)};_.md=function U9d(){return this.a};_.zl=function V9d(a,b,c){return c};_.Al=function W9d(a,b,c){return c};var r9=sfb(SHe,'EStructuralFeatureImpl/SimpleFeatureMapEntry',652);feb(403,505,PIe,X9d);_.aj=function Y9d(a){return $C(h7,rve,29,a,0,1)};_.Yi=function Z9d(){return false};var t9=sfb(SHe,'ESuperAdapter/1',403);feb(456,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,850:1,54:1,99:1,158:1,456:1,119:1,120:1},_9d);_.Lh=function aae(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return !this.a&&(this.a=new iae(this,o7,this)),this.a;}return zvd(this,a-AYd((JTd(),ITd)),vYd((d=RD(Ywd(this,16),29),!d?ITd:d),a),b,c)};_.Uh=function bae(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 2:return !this.a&&(this.a=new iae(this,o7,this)),rLd(this.a,a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),ITd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),ITd)),a,c)};_.Wh=function cae(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return !!this.a&&this.a.i!=0;}return Avd(this,a-AYd((JTd(),ITd)),vYd((b=RD(Ywd(this,16),29),!b?ITd:b),a))};_.bi=function dae(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:PAd(this,WD(b));return;case 2:!this.a&&(this.a=new iae(this,o7,this));sLd(this.a);!this.a&&(this.a=new iae(this,o7,this));YGd(this.a,RD(b,16));return;}Bvd(this,a-AYd((JTd(),ITd)),vYd((c=RD(Ywd(this,16),29),!c?ITd:c),a),b)};_.ii=function eae(){return JTd(),ITd};_.ki=function fae(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:PAd(this,null);return;case 2:!this.a&&(this.a=new iae(this,o7,this));sLd(this.a);return;}Cvd(this,a-AYd((JTd(),ITd)),vYd((b=RD(Ywd(this,16),29),!b?ITd:b),a))};var z9=sfb(SHe,'ETypeParameterImpl',456);feb(457,83,oKe,iae);_.Nj=function jae(a,b){return gae(this,RD(a,89),b)};_.Oj=function kae(a,b){return hae(this,RD(a,89),b)};var v9=sfb(SHe,'ETypeParameterImpl/1',457);feb(647,45,Hxe,lae);_.ec=function mae(){return new pae(this)};var y9=sfb(SHe,'ETypeParameterImpl/2',647);feb(570,Eve,Fve,pae);_.Fc=function qae(a){return nae(this,RD(a,89))};_.Gc=function rae(a){var b,c,d;d=false;for(c=a.Kc();c.Ob();){b=RD(c.Pb(),89);Zjb(this.a,b,'')==null&&(d=true)}return d};_.$b=function sae(){akb(this.a)};_.Hc=function tae(a){return Ujb(this.a,a)};_.Kc=function uae(){var a;return a=new vkb((new mkb(this.a)).a),new xae(a)};_.Mc=function vae(a){return oae(this,a)};_.gc=function wae(){return bkb(this.a)};var x9=sfb(SHe,'ETypeParameterImpl/2/1',570);feb(571,1,Ave,xae);_.Nb=function yae(a){Ztb(this,a)};_.Pb=function Aae(){return RD(tkb(this.a).ld(),89)};_.Ob=function zae(){return this.a.b};_.Qb=function Bae(){ukb(this.a)};var w9=sfb(SHe,'ETypeParameterImpl/2/1/1',571);feb(1329,45,Hxe,Cae);_._b=function Dae(a){return bE(a)?Yjb(this,a):!!qtb(this.f,a)};_.xc=function Eae(a){var b,c;b=bE(a)?Xjb(this,a):Wd(qtb(this.f,a));if(ZD(b,851)){c=RD(b,851);b=c.Kk();Zjb(this,RD(a,241),b);return b}else return b!=null?b:a==null?(Gie(),Fie):null};var B9=sfb(SHe,'EValidatorRegistryImpl',1329);feb(1349,720,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,2040:1,54:1,99:1,158:1,119:1,120:1},Mae);_.ri=function Nae(a,b){switch(a.hk()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return b==null?null:jeb(b);case 25:return Gae(b);case 27:return Hae(b);case 28:return Iae(b);case 29:return b==null?null:a2d(nAd[0],RD(b,206));case 41:return b==null?'':nfb(RD(b,296));case 42:return jeb(b);case 50:return WD(b);default:throw Adb(new agb(VHe+a.xe()+WHe));}};_.si=function Oae(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;switch(a.G==-1&&(a.G=(m=BXd(a),m?fZd(m.vi(),a):-1)),a.G){case 0:return c=new mXd,c;case 1:return b=new pVd,b;case 2:return d=new HYd,d;case 4:return e=new k1d,e;case 5:return f=new A1d,f;case 6:return g=new R1d,g;case 7:return h=new yAd,h;case 10:return j=new kUd,j;case 11:return k=new q4d,k;case 12:return l=new EBd,l;case 13:return n=new R5d,n;case 14:return o=new d6d,o;case 17:return p=new v6d,p;case 18:return i=new s2d,i;case 19:return q=new _9d,q;default:throw Adb(new agb(ZHe+a.zb+WHe));}};_.ti=function Pae(a,b){switch(a.hk()){case 20:return b==null?null:new Bib(b);case 21:return b==null?null:new ejb(b);case 23:case 22:return b==null?null:Fae(b);case 26:case 24:return b==null?null:$eb(Oeb(b,-128,127)<<24>>24);case 25:return vAd(b);case 27:return Jae(b);case 28:return Kae(b);case 29:return Lae(b);case 32:case 31:return b==null?null:Neb(b);case 38:case 37:return b==null?null:new Ufb(b);case 40:case 39:return b==null?null:sgb(Oeb(b,qwe,lve));case 41:return null;case 42:return b==null?null:null;case 44:case 43:return b==null?null:Hgb(Peb(b));case 49:case 48:return b==null?null:bhb(Oeb(b,BKe,32767)<<16>>16);case 50:return b;default:throw Adb(new agb(VHe+a.xe()+WHe));}};var C9=sfb(SHe,'EcoreFactoryImpl',1349);feb(560,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,2038:1,54:1,99:1,158:1,184:1,560:1,119:1,120:1,690:1},$ae);_.gb=false;_.hb=false;var Rae,Sae=false;var tab=sfb(SHe,'EcorePackageImpl',560);feb(1234,1,{851:1},cbe);_.Kk=function dbe(){return fke(),eke};var N9=sfb(SHe,'EcorePackageImpl/1',1234);feb(1243,1,OKe,ebe);_.fk=function fbe(a){return ZD(a,155)};_.gk=function gbe(a){return $C(p7,rve,155,a,0,1)};var D9=sfb(SHe,'EcorePackageImpl/10',1243);feb(1244,1,OKe,hbe);_.fk=function ibe(a){return ZD(a,197)};_.gk=function jbe(a){return $C(q7,rve,197,a,0,1)};var E9=sfb(SHe,'EcorePackageImpl/11',1244);feb(1245,1,OKe,kbe);_.fk=function lbe(a){return ZD(a,58)};_.gk=function mbe(a){return $C(r7,rve,58,a,0,1)};var F9=sfb(SHe,'EcorePackageImpl/12',1245);feb(1246,1,OKe,nbe);_.fk=function obe(a){return ZD(a,411)};_.gk=function pbe(a){return $C(s7,mKe,62,a,0,1)};var G9=sfb(SHe,'EcorePackageImpl/13',1246);feb(1247,1,OKe,qbe);_.fk=function rbe(a){return ZD(a,241)};_.gk=function sbe(a){return $C(t7,rve,241,a,0,1)};var H9=sfb(SHe,'EcorePackageImpl/14',1247);feb(1248,1,OKe,tbe);_.fk=function ube(a){return ZD(a,518)};_.gk=function vbe(a){return $C(u7,rve,2116,a,0,1)};var I9=sfb(SHe,'EcorePackageImpl/15',1248);feb(1249,1,OKe,wbe);_.fk=function xbe(a){return ZD(a,102)};_.gk=function ybe(a){return $C(v7,lKe,19,a,0,1)};var J9=sfb(SHe,'EcorePackageImpl/16',1249);feb(1250,1,OKe,zbe);_.fk=function Abe(a){return ZD(a,179)};_.gk=function Bbe(a){return $C(y7,lKe,179,a,0,1)};var K9=sfb(SHe,'EcorePackageImpl/17',1250);feb(1251,1,OKe,Cbe);_.fk=function Dbe(a){return ZD(a,480)};_.gk=function Ebe(a){return $C(A7,rve,480,a,0,1)};var L9=sfb(SHe,'EcorePackageImpl/18',1251);feb(1252,1,OKe,Fbe);_.fk=function Gbe(a){return ZD(a,561)};_.gk=function Hbe(a){return $C(C8,LJe,561,a,0,1)};var M9=sfb(SHe,'EcorePackageImpl/19',1252);feb(1235,1,OKe,Ibe);_.fk=function Jbe(a){return ZD(a,331)};_.gk=function Kbe(a){return $C(g7,lKe,35,a,0,1)};var Y9=sfb(SHe,'EcorePackageImpl/2',1235);feb(1253,1,OKe,Lbe);_.fk=function Mbe(a){return ZD(a,248)};_.gk=function Nbe(a){return $C(o7,sKe,89,a,0,1)};var O9=sfb(SHe,'EcorePackageImpl/20',1253);feb(1254,1,OKe,Obe);_.fk=function Pbe(a){return ZD(a,456)};_.gk=function Qbe(a){return $C(z7,rve,850,a,0,1)};var P9=sfb(SHe,'EcorePackageImpl/21',1254);feb(1255,1,OKe,Rbe);_.fk=function Sbe(a){return $D(a)};_.gk=function Tbe(a){return $C(QI,Nve,484,a,8,1)};var Q9=sfb(SHe,'EcorePackageImpl/22',1255);feb(1256,1,OKe,Ube);_.fk=function Vbe(a){return ZD(a,195)};_.gk=function Wbe(a){return $C(gE,Nve,195,a,0,2)};var R9=sfb(SHe,'EcorePackageImpl/23',1256);feb(1257,1,OKe,Xbe);_.fk=function Ybe(a){return ZD(a,222)};_.gk=function Zbe(a){return $C(RI,Nve,222,a,0,1)};var S9=sfb(SHe,'EcorePackageImpl/24',1257);feb(1258,1,OKe,$be);_.fk=function _be(a){return ZD(a,180)};_.gk=function ace(a){return $C(SI,Nve,180,a,0,1)};var T9=sfb(SHe,'EcorePackageImpl/25',1258);feb(1259,1,OKe,bce);_.fk=function cce(a){return ZD(a,206)};_.gk=function dce(a){return $C(qK,Nve,206,a,0,1)};var U9=sfb(SHe,'EcorePackageImpl/26',1259);feb(1260,1,OKe,ece);_.fk=function fce(a){return false};_.gk=function gce(a){return $C(T6,rve,2215,a,0,1)};var V9=sfb(SHe,'EcorePackageImpl/27',1260);feb(1261,1,OKe,hce);_.fk=function ice(a){return _D(a)};_.gk=function jce(a){return $C(VI,Nve,345,a,7,1)};var W9=sfb(SHe,'EcorePackageImpl/28',1261);feb(1262,1,OKe,kce);_.fk=function lce(a){return ZD(a,61)};_.gk=function mce(a){return $C(Y6,Ize,61,a,0,1)};var X9=sfb(SHe,'EcorePackageImpl/29',1262);feb(1236,1,OKe,nce);_.fk=function oce(a){return ZD(a,519)};_.gk=function pce(a){return $C(f7,{3:1,4:1,5:1,2033:1},598,a,0,1)};var hab=sfb(SHe,'EcorePackageImpl/3',1236);feb(1263,1,OKe,qce);_.fk=function rce(a){return ZD(a,582)};_.gk=function sce(a){return $C(Z6,rve,2039,a,0,1)};var Z9=sfb(SHe,'EcorePackageImpl/30',1263);feb(1264,1,OKe,tce);_.fk=function uce(a){return ZD(a,160)};_.gk=function vce(a){return $C(Tbb,Ize,160,a,0,1)};var $9=sfb(SHe,'EcorePackageImpl/31',1264);feb(1265,1,OKe,wce);_.fk=function xce(a){return ZD(a,76)};_.gk=function yce(a){return $C(Jbb,PKe,76,a,0,1)};var _9=sfb(SHe,'EcorePackageImpl/32',1265);feb(1266,1,OKe,zce);_.fk=function Ace(a){return ZD(a,161)};_.gk=function Bce(a){return $C(ZI,Nve,161,a,0,1)};var aab=sfb(SHe,'EcorePackageImpl/33',1266);feb(1267,1,OKe,Cce);_.fk=function Dce(a){return ZD(a,17)};_.gk=function Ece(a){return $C(bJ,Nve,17,a,0,1)};var bab=sfb(SHe,'EcorePackageImpl/34',1267);feb(1268,1,OKe,Fce);_.fk=function Gce(a){return ZD(a,296)};_.gk=function Hce(a){return $C(UI,rve,296,a,0,1)};var cab=sfb(SHe,'EcorePackageImpl/35',1268);feb(1269,1,OKe,Ice);_.fk=function Jce(a){return ZD(a,168)};_.gk=function Kce(a){return $C(eJ,Nve,168,a,0,1)};var dab=sfb(SHe,'EcorePackageImpl/36',1269);feb(1270,1,OKe,Lce);_.fk=function Mce(a){return ZD(a,85)};_.gk=function Nce(a){return $C(VK,rve,85,a,0,1)};var eab=sfb(SHe,'EcorePackageImpl/37',1270);feb(1271,1,OKe,Oce);_.fk=function Pce(a){return ZD(a,599)};_.gk=function Qce(a){return $C(Aab,rve,599,a,0,1)};var fab=sfb(SHe,'EcorePackageImpl/38',1271);feb(1272,1,OKe,Rce);_.fk=function Sce(a){return false};_.gk=function Tce(a){return $C(zab,rve,2216,a,0,1)};var gab=sfb(SHe,'EcorePackageImpl/39',1272);feb(1237,1,OKe,Uce);_.fk=function Vce(a){return ZD(a,90)};_.gk=function Wce(a){return $C(h7,rve,29,a,0,1)};var nab=sfb(SHe,'EcorePackageImpl/4',1237);feb(1273,1,OKe,Xce);_.fk=function Yce(a){return ZD(a,191)};_.gk=function Zce(a){return $C(lJ,Nve,191,a,0,1)};var iab=sfb(SHe,'EcorePackageImpl/40',1273);feb(1274,1,OKe,$ce);_.fk=function _ce(a){return bE(a)};_.gk=function ade(a){return $C(qJ,Nve,2,a,6,1)};var jab=sfb(SHe,'EcorePackageImpl/41',1274);feb(1275,1,OKe,bde);_.fk=function cde(a){return ZD(a,596)};_.gk=function dde(a){return $C(a7,rve,596,a,0,1)};var kab=sfb(SHe,'EcorePackageImpl/42',1275);feb(1276,1,OKe,ede);_.fk=function fde(a){return false};_.gk=function gde(a){return $C($6,Nve,2217,a,0,1)};var lab=sfb(SHe,'EcorePackageImpl/43',1276);feb(1277,1,OKe,hde);_.fk=function ide(a){return ZD(a,44)};_.gk=function jde(a){return $C(UK,Zve,44,a,0,1)};var mab=sfb(SHe,'EcorePackageImpl/44',1277);feb(1238,1,OKe,kde);_.fk=function lde(a){return ZD(a,142)};_.gk=function mde(a){return $C(i7,rve,142,a,0,1)};var oab=sfb(SHe,'EcorePackageImpl/5',1238);feb(1239,1,OKe,nde);_.fk=function ode(a){return ZD(a,156)};_.gk=function pde(a){return $C(k7,rve,156,a,0,1)};var pab=sfb(SHe,'EcorePackageImpl/6',1239);feb(1240,1,OKe,qde);_.fk=function rde(a){return ZD(a,468)};_.gk=function sde(a){return $C(m7,rve,685,a,0,1)};var qab=sfb(SHe,'EcorePackageImpl/7',1240);feb(1241,1,OKe,tde);_.fk=function ude(a){return ZD(a,582)};_.gk=function vde(a){return $C(l7,rve,694,a,0,1)};var rab=sfb(SHe,'EcorePackageImpl/8',1241);feb(1242,1,OKe,wde);_.fk=function xde(a){return ZD(a,479)};_.gk=function yde(a){return $C(n7,rve,479,a,0,1)};var sab=sfb(SHe,'EcorePackageImpl/9',1242);feb(1038,2080,JJe,Cde);_.Mi=function Dde(a,b){zde(this,RD(b,424))};_.Qi=function Ede(a,b){Ade(this,a,RD(b,424))};var vab=sfb(SHe,'MinimalEObjectImpl/1ArrayDelegatingAdapterList',1038);feb(1039,152,GJe,Fde);_.jj=function Gde(){return this.a.a};var uab=sfb(SHe,'MinimalEObjectImpl/1ArrayDelegatingAdapterList/1',1039);feb(1067,1066,{},Ide);var yab=sfb('org.eclipse.emf.ecore.plugin','EcorePlugin',1067);var Aab=ufb(QKe,'Resource');feb(799,1524,RKe);_.Hl=function Mde(a){};_.Il=function Nde(a){};_.El=function Ode(){return !this.a&&(this.a=new Zde(this)),this.a};_.Fl=function Pde(a){var b,c,d,e,f;d=a.length;if(d>0){BFb(0,a.length);if(a.charCodeAt(0)==47){f=new cnb(4);e=1;for(b=1;b<d;++b){BFb(b,a.length);if(a.charCodeAt(b)==47){Rmb(f,e==b?'':(AFb(e,b,a.length),a.substr(e,b-e)));e=b+1}}Rmb(f,(BFb(e,a.length+1),a.substr(e)));return Jde(this,f)}else{BFb(d-1,a.length);if(a.charCodeAt(d-1)==63){c=uhb(a,Fhb(63),d-2);c>0&&(a=(AFb(0,c,a.length),a.substr(0,c)))}}}return Kde(this,a)};_.Gl=function Qde(){return this.c};_.Ib=function Rde(){var a;return nfb(this.Rm)+'@'+(a=tb(this)>>>0,a.toString(16))+" uri='"+this.d+"'"};_.b=false;var Eab=sfb(SKe,'ResourceImpl',799);feb(1525,799,RKe,Sde);var Bab=sfb(SKe,'BinaryResourceImpl',1525);feb(1190,708,QIe);_.bj=function Vde(a){return ZD(a,58)?Tde(this,RD(a,58)):ZD(a,599)?new dMd(RD(a,599).El()):dE(a)===dE(this.f)?RD(a,16).Kc():(jQd(),iQd.a)};_.Ob=function Wde(){return Ude(this)};_.a=false;var Ebb=sfb(ZJe,'EcoreUtil/ContentTreeIterator',1190);feb(1526,1190,QIe,Xde);_.bj=function Yde(a){return dE(a)===dE(this.f)?RD(a,15).Kc():new _je(RD(a,58))};var Cab=sfb(SKe,'ResourceImpl/5',1526);feb(658,2092,nKe,Zde);_.Hc=function $de(a){return this.i<=4?PHd(this,a):ZD(a,54)&&RD(a,54).Jh()==this.a};_.Mi=function _de(a,b){a==this.i-1&&(this.a.b||(this.a.b=true,null))};_.Oi=function aee(a,b){a==0?this.a.b||(this.a.b=true,null):$Gd(this,a,b)};_.Qi=function bee(a,b){};_.Ri=function cee(a,b,c){};_.Lj=function dee(){return 2};_.jj=function eee(){return this.a};_.Mj=function fee(){return true};_.Nj=function gee(a,b){var c;c=RD(a,54);b=c.fi(this.a,b);return b};_.Oj=function hee(a,b){var c;c=RD(a,54);return c.fi(null,b)};_.Pj=function iee(){return false};_.Si=function jee(){return true};_.aj=function kee(a){return $C(r7,rve,58,a,0,1)};_.Yi=function lee(){return false};var Dab=sfb(SKe,'ResourceImpl/ContentsEList',658);feb(970,2062,kwe,mee);_.fd=function nee(a){return this.a.Ki(a)};_.gc=function oee(){return this.a.gc()};var Fab=sfb(ZJe,'AbstractSequentialInternalEList/1',970);var hke,ike,jke,kke;feb(634,1,{},Yee);var pee,qee;var Lab=sfb(ZJe,'BasicExtendedMetaData',634);feb(1181,1,{},afe);_.Jl=function bfe(){return null};_.Kl=function cfe(){this.a==-2&&$ee(this,uee(this.d,this.b));return this.a};_.Ll=function dfe(){return null};_.Ml=function efe(){return yob(),yob(),vob};_.xe=function ffe(){this.c==fLe&&_ee(this,zee(this.d,this.b));return this.c};_.Nl=function gfe(){return 0};_.a=-2;_.c=fLe;var Hab=sfb(ZJe,'BasicExtendedMetaData/EClassExtendedMetaDataImpl',1181);feb(1182,1,{},mfe);_.Jl=function nfe(){this.a==(ree(),pee)&&hfe(this,tee(this.f,this.b));return this.a};_.Kl=function ofe(){return 0};_.Ll=function pfe(){this.c==(ree(),pee)&&ife(this,xee(this.f,this.b));return this.c};_.Ml=function qfe(){!this.d&&jfe(this,yee(this.f,this.b));return this.d};_.xe=function rfe(){this.e==fLe&&kfe(this,zee(this.f,this.b));return this.e};_.Nl=function sfe(){this.g==-2&&lfe(this,Cee(this.f,this.b));return this.g};_.e=fLe;_.g=-2;var Iab=sfb(ZJe,'BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl',1182);feb(1180,1,{},wfe);_.b=false;_.c=false;var Jab=sfb(ZJe,'BasicExtendedMetaData/EPackageExtendedMetaDataImpl',1180);feb(1183,1,{},Jfe);_.c=-2;_.e=fLe;_.f=fLe;var Kab=sfb(ZJe,'BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl',1183);feb(593,632,oKe,Kfe);_.Lj=function Lfe(){return this.c};_.ol=function Mfe(){return false};_.Wi=function Nfe(a,b){return b};_.c=0;var Yab=sfb(ZJe,'EDataTypeEList',593);var Tbb=ufb(ZJe,'FeatureMap');feb(78,593,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},Uge);_.bd=function Vge(a,b){Ofe(this,a,RD(b,76))};_.Fc=function Wge(a){return Rfe(this,RD(a,76))};_.Hi=function _ge(a){Wfe(this,RD(a,76))};_.Nj=function khe(a,b){return mge(this,RD(a,76),b)};_.Oj=function lhe(a,b){return oge(this,RD(a,76),b)};_.Ti=function nhe(a,b){return uge(this,a,b)};_.Wi=function phe(a,b){return zge(this,a,RD(b,76))};_.hd=function rhe(a,b){return Cge(this,a,RD(b,76))};_.Uj=function vhe(a,b){return Ige(this,RD(a,76),b)};_.Vj=function whe(a,b){return Kge(this,RD(a,76),b)};_.Wj=function xhe(a,b,c){return Lge(this,RD(a,76),RD(b,76),c)};_.Zi=function zhe(a,b){return Tge(this,a,RD(b,76))};_.Ol=function Xge(a,b){return Qfe(this,a,b)};_.cd=function Yge(a,b){var c,d,e,f,g,h,i,j,k;j=new ZHd(b.gc());for(e=b.Kc();e.Ob();){d=RD(e.Pb(),76);f=d.Lk();if(qke(this.e,f)){(!f.Si()||!cge(this,f,d.md())&&!PHd(j,d))&&WGd(j,d)}else{k=pke(this.e.Dh(),f);c=RD(this.g,124);g=true;for(h=0;h<this.i;++h){i=c[h];if(k.am(i.Lk())){RD(eHd(this,h,d),76);g=false;break}}g&&WGd(j,d)}}return XGd(this,a,j)};_.Gc=function Zge(a){var b,c,d,e,f,g,h,i,j;i=new ZHd(a.gc());for(d=a.Kc();d.Ob();){c=RD(d.Pb(),76);e=c.Lk();if(qke(this.e,e)){(!e.Si()||!cge(this,e,c.md())&&!PHd(i,c))&&WGd(i,c)}else{j=pke(this.e.Dh(),e);b=RD(this.g,124);f=true;for(g=0;g<this.i;++g){h=b[g];if(j.am(h.Lk())){RD(eHd(this,g,c),76);f=false;break}}f&&WGd(i,c)}}return YGd(this,i)};_.Fi=function $ge(a){this.j=-1;return nLd(this,this.i,a)};_.Pl=function ahe(a,b,c){return Xfe(this,a,b,c)};_.Xk=function bhe(a,b){return _fe(this,a,b)};_.Ql=function che(a,b,c){return age(this,a,b,c)};_.Rl=function dhe(){return this};_.Sl=function ehe(a,b){return ige(this,a,b)};_.Tl=function fhe(a){return RD(QHd(this,a),76).Lk()};_.Ul=function ghe(a){return RD(QHd(this,a),76).md()};_.Vl=function hhe(){return this.b};_.Mj=function ihe(){return true};_.Tj=function jhe(){return true};_.Wl=function mhe(a){return !pge(this,a)};_.aj=function ohe(a){return $C(Ibb,PKe,343,a,0,1)};_.pl=function qhe(a){return Age(this,a)};_.Wb=function she(a){Dge(this,a)};_.Xl=function the(a,b){Fge(this,a,b)};_.Yl=function uhe(a){return Gge(this,a)};_.Zl=function yhe(a){Sge(this,a)};var Oab=sfb(ZJe,'BasicFeatureMap',78);feb(1960,1,Jve);_.Nb=function Fhe(a){Ztb(this,a)};_.Rb=function Ehe(b){if(this.g==-1){throw Adb(new cgb)}Ahe(this);try{Pfe(this.e,this.b,this.a,b);this.d=this.e.j;Dhe(this)}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}};_.Ob=function Ghe(){return Bhe(this)};_.Sb=function Hhe(){return Che(this)};_.Pb=function Ihe(){return Dhe(this)};_.Tb=function Jhe(){return this.a};_.Ub=function Khe(){var a;if(Che(this)){Ahe(this);this.g=--this.a;if(this.ul()){a=Bge(this.e,this.b,this.c,this.a,this.j);this.j=a}this.i=0;return this.j}else{throw Adb(new Dvb)}};_.Vb=function Lhe(){return this.a-1};_.Qb=function Mhe(){if(this.g==-1){throw Adb(new cgb)}Ahe(this);try{xge(this.e,this.b,this.g);this.d=this.e.j;if(this.g<this.a){--this.a;--this.c}--this.g}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}};_.ul=function Nhe(){return false};_.Wb=function Ohe(b){if(this.g==-1){throw Adb(new cgb)}Ahe(this);try{Ege(this.e,this.b,this.g,b);this.d=this.e.j}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}};_.a=0;_.c=0;_.d=0;_.f=false;_.g=0;_.i=0;var Lbb=sfb(ZJe,'FeatureMapUtil/BasicFeatureEIterator',1960);feb(420,1960,Jve,Phe);_.$l=function Qhe(){var a,b,c;c=this.e.i;a=RD(this.e.g,124);while(this.c<c){b=a[this.c];if(this.k.am(b.Lk())){this.j=this.f?b:b.md();this.i=2;return true}++this.c}this.i=1;this.g=-1;return false};_._l=function Rhe(){var a,b;a=RD(this.e.g,124);while(--this.c>=0){b=a[this.c];if(this.k.am(b.Lk())){this.j=this.f?b:b.md();this.i=-2;return true}}this.i=-1;this.g=-1;return false};var Mab=sfb(ZJe,'BasicFeatureMap/FeatureEIterator',420);feb(676,420,Jve,She);_.ul=function The(){return true};var Nab=sfb(ZJe,'BasicFeatureMap/ResolvingFeatureEIterator',676);feb(968,495,uKe,Uhe);_.pj=function Vhe(){return this};var Rab=sfb(ZJe,'EContentsEList/1',968);feb(969,495,uKe,Whe);_.ul=function Xhe(){return false};var Sab=sfb(ZJe,'EContentsEList/2',969);feb(967,287,vKe,Yhe);_.wl=function Zhe(a){};_.Ob=function $he(){return false};_.Sb=function _he(){return false};var Tab=sfb(ZJe,'EContentsEList/FeatureIteratorImpl/1',967);feb(840,593,oKe,aie);_.Ni=function bie(){this.a=true};_.Qj=function cie(){return this.a};_.Gk=function die(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var Xab=sfb(ZJe,'EDataTypeEList/Unsettable',840);feb(1958,593,oKe,eie);_.Si=function fie(){return true};var $ab=sfb(ZJe,'EDataTypeUniqueEList',1958);feb(1959,840,oKe,gie);_.Si=function hie(){return true};var Zab=sfb(ZJe,'EDataTypeUniqueEList/Unsettable',1959);feb(147,83,oKe,iie);_.nl=function jie(){return true};_.Wi=function kie(a,b){return gZd(this,a,RD(b,58))};var _ab=sfb(ZJe,'EObjectContainmentEList/Resolving',147);feb(1184,555,oKe,lie);_.nl=function mie(){return true};_.Wi=function nie(a,b){return gZd(this,a,RD(b,58))};var abb=sfb(ZJe,'EObjectContainmentEList/Unsettable/Resolving',1184);feb(766,14,oKe,oie);_.Ni=function pie(){this.a=true};_.Qj=function qie(){return this.a};_.Gk=function rie(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var fbb=sfb(ZJe,'EObjectContainmentWithInverseEList/Unsettable',766);feb(1222,766,oKe,sie);_.nl=function tie(){return true};_.Wi=function uie(a,b){return gZd(this,a,RD(b,58))};var ebb=sfb(ZJe,'EObjectContainmentWithInverseEList/Unsettable/Resolving',1222);feb(757,504,oKe,vie);_.Ni=function wie(){this.a=true};_.Qj=function xie(){return this.a};_.Gk=function yie(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var hbb=sfb(ZJe,'EObjectEList/Unsettable',757);feb(338,504,oKe,zie);_.nl=function Aie(){return true};_.Wi=function Bie(a,b){return gZd(this,a,RD(b,58))};var kbb=sfb(ZJe,'EObjectResolvingEList',338);feb(1844,757,oKe,Cie);_.nl=function Die(){return true};_.Wi=function Eie(a,b){return gZd(this,a,RD(b,58))};var jbb=sfb(ZJe,'EObjectResolvingEList/Unsettable',1844);feb(1527,1,{},Hie);var Fie;var lbb=sfb(ZJe,'EObjectValidator',1527);feb(559,504,oKe,Iie);_.il=function Jie(){return this.d};_.jl=function Kie(){return this.b};_.Mj=function Lie(){return true};_.ml=function Mie(){return true};_.b=0;var pbb=sfb(ZJe,'EObjectWithInverseEList',559);feb(1225,559,oKe,Nie);_.ll=function Oie(){return true};var mbb=sfb(ZJe,'EObjectWithInverseEList/ManyInverse',1225);feb(635,559,oKe,Pie);_.Ni=function Qie(){this.a=true};_.Qj=function Rie(){return this.a};_.Gk=function Sie(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var obb=sfb(ZJe,'EObjectWithInverseEList/Unsettable',635);feb(1224,635,oKe,Tie);_.ll=function Uie(){return true};var nbb=sfb(ZJe,'EObjectWithInverseEList/Unsettable/ManyInverse',1224);feb(767,559,oKe,Vie);_.nl=function Wie(){return true};_.Wi=function Xie(a,b){return gZd(this,a,RD(b,58))};var tbb=sfb(ZJe,'EObjectWithInverseResolvingEList',767);feb(32,767,oKe,Yie);_.ll=function Zie(){return true};var qbb=sfb(ZJe,'EObjectWithInverseResolvingEList/ManyInverse',32);feb(768,635,oKe,$ie);_.nl=function _ie(){return true};_.Wi=function aje(a,b){return gZd(this,a,RD(b,58))};var sbb=sfb(ZJe,'EObjectWithInverseResolvingEList/Unsettable',768);feb(1223,768,oKe,bje);_.ll=function cje(){return true};var rbb=sfb(ZJe,'EObjectWithInverseResolvingEList/Unsettable/ManyInverse',1223);feb(1185,632,oKe);_.Li=function dje(){return (this.b&1792)==0};_.Ni=function eje(){this.b|=1};_.kl=function fje(){return (this.b&4)!=0};_.Mj=function gje(){return (this.b&40)!=0};_.ll=function hje(){return (this.b&16)!=0};_.ml=function ije(){return (this.b&8)!=0};_.nl=function jje(){return (this.b&cKe)!=0};_.al=function kje(){return (this.b&32)!=0};_.ol=function lje(){return (this.b&gwe)!=0};_.fk=function mje(a){return !this.d?this.Lk().Hk().fk(a):QRd(this.d,a)};_.Qj=function nje(){return (this.b&2)!=0?(this.b&1)!=0:this.i!=0};_.Si=function oje(){return (this.b&128)!=0};_.Gk=function qje(){var a;sLd(this);if((this.b&2)!=0){if(Mvd(this.e)){a=(this.b&1)!=0;this.b&=-2;eZd(this,new Q3d(this.e,2,BYd(this.e.Dh(),this.Lk()),a,false))}else{this.b&=-2}}};_.Yi=function rje(){return (this.b&1536)==0};_.b=0;var vbb=sfb(ZJe,'EcoreEList/Generic',1185);feb(1186,1185,oKe,sje);_.Lk=function tje(){return this.a};var ubb=sfb(ZJe,'EcoreEList/Dynamic',1186);feb(765,66,PIe,uje);_.aj=function vje(a){return IMd(this.a.a,a)};var zbb=sfb(ZJe,'EcoreEMap/1',765);feb(764,83,oKe,wje);_.Mi=function xje(a,b){UNd(this.b,RD(b,136))};_.Oi=function yje(a,b){TNd(this.b)};_.Pi=function zje(a,b,c){var d;++(d=this.b,RD(b,136),d).e};_.Qi=function Aje(a,b){VNd(this.b,RD(b,136))};_.Ri=function Bje(a,b,c){VNd(this.b,RD(c,136));dE(c)===dE(b)&&RD(c,136).Ci(aOd(RD(b,136).ld()));UNd(this.b,RD(b,136))};var Abb=sfb(ZJe,'EcoreEMap/DelegateEObjectContainmentEList',764);feb(1220,141,_Je,Cje);var Cbb=sfb(ZJe,'EcoreEMap/Unsettable',1220);feb(1221,764,oKe,Dje);_.Ni=function Eje(){this.a=true};_.Qj=function Fje(){return this.a};_.Gk=function Gje(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var Bbb=sfb(ZJe,'EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList',1221);feb(1189,215,Hxe,Zje);_.a=false;_.b=false;var Fbb=sfb(ZJe,'EcoreUtil/Copier',1189);feb(759,1,Ave,_je);_.Nb=function ake(a){Ztb(this,a)};_.Ob=function bke(){return $je(this)};_.Pb=function cke(){var a;$je(this);a=this.b;this.b=null;return a};_.Qb=function dke(){this.a.Qb()};var Gbb=sfb(ZJe,'EcoreUtil/ProperContentIterator',759);feb(1528,1527,{},gke);var eke;var Hbb=sfb(ZJe,'EcoreValidator',1528);var mke;var Sbb=ufb(ZJe,'FeatureMapUtil/Validator');feb(1295,1,{2041:1},rke);_.am=function ske(a){return true};var Kbb=sfb(ZJe,'FeatureMapUtil/1',1295);feb(773,1,{2041:1},wke);_.am=function xke(a){var b;if(this.c==a)return true;b=TD(Wjb(this.a,a));if(b==null){if(vke(this,a)){yke(this.a,a,(Geb(),Feb));return true}else{yke(this.a,a,(Geb(),Eeb));return false}}else{return b==(Geb(),Feb)}};_.e=false;var tke;var Nbb=sfb(ZJe,'FeatureMapUtil/BasicValidator',773);feb(774,45,Hxe,zke);var Mbb=sfb(ZJe,'FeatureMapUtil/BasicValidator/Cache',774);feb(509,56,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,71:1,97:1},Eke);_.bd=function Fke(a,b){Pfe(this.c,this.b,a,b)};_.Fc=function Gke(a){return Qfe(this.c,this.b,a)};_.cd=function Hke(a,b){return Sfe(this.c,this.b,a,b)};_.Gc=function Ike(a){return Ake(this,a)};_.Gi=function Jke(a,b){Ufe(this.c,this.b,a,b)};_.Wk=function Kke(a,b){return Xfe(this.c,this.b,a,b)};_.$i=function Lke(a){return hge(this.c,this.b,a,false)};_.Ii=function Mke(){return Yfe(this.c,this.b)};_.Ji=function Nke(){return Zfe(this.c,this.b)};_.Ki=function Oke(a){return $fe(this.c,this.b,a)};_.Xk=function Pke(a,b){return Bke(this,a,b)};_.$b=function Qke(){Cke(this)};_.Hc=function Rke(a){return cge(this.c,this.b,a)};_.Ic=function Ske(a){return ege(this.c,this.b,a)};_.Xb=function Tke(a){return hge(this.c,this.b,a,true)};_.Fk=function Uke(a){return this};_.dd=function Vke(a){return jge(this.c,this.b,a)};_.dc=function Wke(){return Dke(this)};_.Qj=function Xke(){return !pge(this.c,this.b)};_.Kc=function Yke(){return qge(this.c,this.b)};_.ed=function Zke(){return sge(this.c,this.b)};_.fd=function $ke(a){return tge(this.c,this.b,a)};_.Ti=function _ke(a,b){return vge(this.c,this.b,a,b)};_.Ui=function ale(a,b){wge(this.c,this.b,a,b)};_.gd=function ble(a){return xge(this.c,this.b,a)};_.Mc=function cle(a){return yge(this.c,this.b,a)};_.hd=function dle(a,b){return Ege(this.c,this.b,a,b)};_.Wb=function ele(a){bge(this.c,this.b);Ake(this,RD(a,15))};_.gc=function fle(){return Nge(this.c,this.b)};_.Pc=function gle(){return Oge(this.c,this.b)};_.Qc=function hle(a){return Qge(this.c,this.b,a)};_.Ib=function ile(){var a,b;b=new Qhb;b.a+='[';for(a=Yfe(this.c,this.b);Bhe(a);){Nhb(b,Ghb(Dhe(a)));Bhe(a)&&(b.a+=pve,b)}b.a+=']';return b.a};_.Gk=function jle(){bge(this.c,this.b)};var Obb=sfb(ZJe,'FeatureMapUtil/FeatureEList',509);feb(644,38,GJe,lle);_.hj=function mle(a){return kle(this,a)};_.mj=function nle(a){var b,c,d,e,f,g,h;switch(this.d){case 1:case 2:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){this.g=a.ij();a.gj()==1&&(this.d=1);return true}break}case 3:{e=a.gj();switch(e){case 3:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){this.d=5;b=new ZHd(2);WGd(b,this.g);WGd(b,a.ij());this.g=b;return true}break}}break}case 5:{e=a.gj();switch(e){case 3:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){c=RD(this.g,16);c.Fc(a.ij());return true}break}}break}case 4:{e=a.gj();switch(e){case 3:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){this.d=1;this.g=a.ij();return true}break}case 4:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){this.d=6;h=new ZHd(2);WGd(h,this.n);WGd(h,a.kj());this.n=h;g=cD(WC(kE,1),Pwe,28,15,[this.o,a.lj()]);this.g=g;return true}break}}break}case 6:{e=a.gj();switch(e){case 4:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){c=RD(this.n,16);c.Fc(a.kj());g=RD(this.g,53);d=$C(kE,Pwe,28,g.length+1,15,1);hib(g,0,d,0,g.length);d[g.length]=a.lj();this.g=d;return true}break}}break}}return false};var Pbb=sfb(ZJe,'FeatureMapUtil/FeatureENotificationImpl',644);feb(564,509,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},ole);_.Ol=function ple(a,b){return Qfe(this.c,a,b)};_.Pl=function qle(a,b,c){return Xfe(this.c,a,b,c)};_.Ql=function rle(a,b,c){return age(this.c,a,b,c)};_.Rl=function sle(){return this};_.Sl=function tle(a,b){return ige(this.c,a,b)};_.Tl=function ule(a){return RD(hge(this.c,this.b,a,false),76).Lk()};_.Ul=function vle(a){return RD(hge(this.c,this.b,a,false),76).md()};_.Vl=function wle(){return this.a};_.Wl=function xle(a){return !pge(this.c,a)};_.Xl=function yle(a,b){Fge(this.c,a,b)};_.Yl=function zle(a){return Gge(this.c,a)};_.Zl=function Ale(a){Sge(this.c,a)};var Qbb=sfb(ZJe,'FeatureMapUtil/FeatureFeatureMap',564);feb(1294,1,$Je,Ble);_.Fk=function Cle(a){return hge(this.b,this.a,-1,a)};_.Qj=function Dle(){return !pge(this.b,this.a)};_.Wb=function Ele(a){Fge(this.b,this.a,a)};_.Gk=function Fle(){bge(this.b,this.a)};var Rbb=sfb(ZJe,'FeatureMapUtil/FeatureValue',1294);var Gle,Hle,Ile,Jle,Kle;var Vbb=ufb(hLe,'AnyType');feb(680,63,swe,Mle);var Wbb=sfb(hLe,'InvalidDatatypeValueException',680);var Xbb=ufb(hLe,iLe);var Ybb=ufb(hLe,jLe);var Zbb=ufb(hLe,kLe);var Nle;var Ple;var Rle,Sle,Tle,Ule,Vle,Wle,Xle,Yle,Zle,$le,_le,ame,bme,cme,dme,eme,fme,gme,hme,ime,jme,kme,lme,mme;feb(844,516,{110:1,94:1,93:1,58:1,54:1,99:1,857:1},ome);_.Lh=function pme(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new Uge(this,0)),this.c;return !this.c&&(this.c=new Uge(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160);return (!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),220)).Vl();case 2:if(c)return !this.b&&(this.b=new Uge(this,2)),this.b;return !this.b&&(this.b=new Uge(this,2)),this.b.b;}return zvd(this,a-AYd(this.ii()),vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),a),b,c)};_.Uh=function qme(a,b,c){var d;switch(b){case 0:return !this.c&&(this.c=new Uge(this,0)),_fe(this.c,a,c);case 1:return (!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),71)).Xk(a,c);case 2:return !this.b&&(this.b=new Uge(this,2)),_fe(this.b,a,c);}return d=RD(vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),b),69),d.wk().Ak(this,Yvd(this),b-AYd(this.ii()),a,c)};_.Wh=function rme(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160)).dc();case 2:return !!this.b&&this.b.i!=0;}return Avd(this,a-AYd(this.ii()),vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.bi=function sme(a,b){switch(a){case 0:!this.c&&(this.c=new Uge(this,0));Dge(this.c,b);return;case 1:(!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),220)).Wb(b);return;case 2:!this.b&&(this.b=new Uge(this,2));Dge(this.b,b);return;}Bvd(this,a-AYd(this.ii()),vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),a),b)};_.ii=function tme(){return nme(),Rle};_.ki=function ume(a){switch(a){case 0:!this.c&&(this.c=new Uge(this,0));sLd(this.c);return;case 1:(!this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160)).$b();return;case 2:!this.b&&(this.b=new Uge(this,2));sLd(this.b);return;}Cvd(this,a-AYd(this.ii()),vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.Ib=function vme(){var a;if((this.j&4)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (mixed: ';Mhb(a,this.c);a.a+=', anyAttribute: ';Mhb(a,this.b);a.a+=')';return a.a};var $bb=sfb(lLe,'AnyTypeImpl',844);feb(681,516,{110:1,94:1,93:1,58:1,54:1,99:1,2119:1,681:1},yme);_.Lh=function zme(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return zvd(this,a-AYd((nme(),cme)),vYd((this.j&2)==0?cme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b,c)};_.Wh=function Ame(a){switch(a){case 0:return this.a!=null;case 1:return this.b!=null;}return Avd(this,a-AYd((nme(),cme)),vYd((this.j&2)==0?cme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.bi=function Bme(a,b){switch(a){case 0:wme(this,WD(b));return;case 1:xme(this,WD(b));return;}Bvd(this,a-AYd((nme(),cme)),vYd((this.j&2)==0?cme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b)};_.ii=function Cme(){return nme(),cme};_.ki=function Dme(a){switch(a){case 0:this.a=null;return;case 1:this.b=null;return;}Cvd(this,a-AYd((nme(),cme)),vYd((this.j&2)==0?cme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.Ib=function Eme(){var a;if((this.j&4)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (data: ';Nhb(a,this.a);a.a+=', target: ';Nhb(a,this.b);a.a+=')';return a.a};_.a=null;_.b=null;var _bb=sfb(lLe,'ProcessingInstructionImpl',681);feb(682,844,{110:1,94:1,93:1,58:1,54:1,99:1,857:1,2120:1,682:1},Hme);_.Lh=function Ime(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new Uge(this,0)),this.c;return !this.c&&(this.c=new Uge(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160);return (!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),220)).Vl();case 2:if(c)return !this.b&&(this.b=new Uge(this,2)),this.b;return !this.b&&(this.b=new Uge(this,2)),this.b.b;case 3:return !this.c&&(this.c=new Uge(this,0)),WD(ige(this.c,(nme(),fme),true));case 4:return Ije(this.a,(!this.c&&(this.c=new Uge(this,0)),WD(ige(this.c,(nme(),fme),true))));case 5:return this.a;}return zvd(this,a-AYd((nme(),eme)),vYd((this.j&2)==0?eme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b,c)};_.Wh=function Jme(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160)).dc();case 2:return !!this.b&&this.b.i!=0;case 3:return !this.c&&(this.c=new Uge(this,0)),WD(ige(this.c,(nme(),fme),true))!=null;case 4:return Ije(this.a,(!this.c&&(this.c=new Uge(this,0)),WD(ige(this.c,(nme(),fme),true))))!=null;case 5:return !!this.a;}return Avd(this,a-AYd((nme(),eme)),vYd((this.j&2)==0?eme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.bi=function Kme(a,b){switch(a){case 0:!this.c&&(this.c=new Uge(this,0));Dge(this.c,b);return;case 1:(!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),220)).Wb(b);return;case 2:!this.b&&(this.b=new Uge(this,2));Dge(this.b,b);return;case 3:Gme(this,WD(b));return;case 4:Gme(this,Hje(this.a,b));return;case 5:Fme(this,RD(b,156));return;}Bvd(this,a-AYd((nme(),eme)),vYd((this.j&2)==0?eme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b)};_.ii=function Lme(){return nme(),eme};_.ki=function Mme(a){switch(a){case 0:!this.c&&(this.c=new Uge(this,0));sLd(this.c);return;case 1:(!this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160)).$b();return;case 2:!this.b&&(this.b=new Uge(this,2));sLd(this.b);return;case 3:!this.c&&(this.c=new Uge(this,0));Fge(this.c,(nme(),fme),null);return;case 4:Gme(this,Hje(this.a,null));return;case 5:this.a=null;return;}Cvd(this,a-AYd((nme(),eme)),vYd((this.j&2)==0?eme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};var acb=sfb(lLe,'SimpleAnyTypeImpl',682);feb(683,516,{110:1,94:1,93:1,58:1,54:1,99:1,2121:1,683:1},Nme);_.Lh=function Ome(a,b,c){switch(a){case 0:if(c)return !this.a&&(this.a=new Uge(this,0)),this.a;return !this.a&&(this.a=new Uge(this,0)),this.a.b;case 1:return c?(!this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1)),this.b):(!this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1)),dOd(this.b));case 2:return c?(!this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2)),this.c):(!this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2)),dOd(this.c));case 3:return !this.a&&(this.a=new Uge(this,0)),rge(this.a,(nme(),ime));case 4:return !this.a&&(this.a=new Uge(this,0)),rge(this.a,(nme(),jme));case 5:return !this.a&&(this.a=new Uge(this,0)),rge(this.a,(nme(),lme));case 6:return !this.a&&(this.a=new Uge(this,0)),rge(this.a,(nme(),mme));}return zvd(this,a-AYd((nme(),hme)),vYd((this.j&2)==0?hme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b,c)};_.Uh=function Pme(a,b,c){var d;switch(b){case 0:return !this.a&&(this.a=new Uge(this,0)),_fe(this.a,a,c);case 1:return !this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1)),BVd(this.b,a,c);case 2:return !this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2)),BVd(this.c,a,c);case 5:return !this.a&&(this.a=new Uge(this,0)),Bke(rge(this.a,(nme(),lme)),a,c);}return d=RD(vYd((this.j&2)==0?(nme(),hme):(!this.k&&(this.k=new fUd),this.k).Nk(),b),69),d.wk().Ak(this,Yvd(this),b-AYd((nme(),hme)),a,c)};_.Wh=function Qme(a){switch(a){case 0:return !!this.a&&this.a.i!=0;case 1:return !!this.b&&this.b.f!=0;case 2:return !!this.c&&this.c.f!=0;case 3:return !this.a&&(this.a=new Uge(this,0)),!Dke(rge(this.a,(nme(),ime)));case 4:return !this.a&&(this.a=new Uge(this,0)),!Dke(rge(this.a,(nme(),jme)));case 5:return !this.a&&(this.a=new Uge(this,0)),!Dke(rge(this.a,(nme(),lme)));case 6:return !this.a&&(this.a=new Uge(this,0)),!Dke(rge(this.a,(nme(),mme)));}return Avd(this,a-AYd((nme(),hme)),vYd((this.j&2)==0?hme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.bi=function Rme(a,b){switch(a){case 0:!this.a&&(this.a=new Uge(this,0));Dge(this.a,b);return;case 1:!this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1));CVd(this.b,b);return;case 2:!this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2));CVd(this.c,b);return;case 3:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),ime)));!this.a&&(this.a=new Uge(this,0));Ake(rge(this.a,ime),RD(b,16));return;case 4:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),jme)));!this.a&&(this.a=new Uge(this,0));Ake(rge(this.a,jme),RD(b,16));return;case 5:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),lme)));!this.a&&(this.a=new Uge(this,0));Ake(rge(this.a,lme),RD(b,16));return;case 6:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),mme)));!this.a&&(this.a=new Uge(this,0));Ake(rge(this.a,mme),RD(b,16));return;}Bvd(this,a-AYd((nme(),hme)),vYd((this.j&2)==0?hme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b)};_.ii=function Sme(){return nme(),hme};_.ki=function Tme(a){switch(a){case 0:!this.a&&(this.a=new Uge(this,0));sLd(this.a);return;case 1:!this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1));this.b.c.$b();return;case 2:!this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2));this.c.c.$b();return;case 3:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),ime)));return;case 4:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),jme)));return;case 5:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),lme)));return;case 6:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),mme)));return;}Cvd(this,a-AYd((nme(),hme)),vYd((this.j&2)==0?hme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.Ib=function Ume(){var a;if((this.j&4)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (mixed: ';Mhb(a,this.a);a.a+=')';return a.a};var bcb=sfb(lLe,'XMLTypeDocumentRootImpl',683);feb(2028,720,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1,2122:1},rne);_.ri=function sne(a,b){switch(a.hk()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return b==null?null:jeb(b);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return WD(b);case 6:return _me(RD(b,195));case 12:case 47:case 49:case 11:return tAd(this,a,b);case 13:return b==null?null:yib(RD(b,247));case 15:case 14:return b==null?null:ane(Kfb(UD(b)));case 17:return bne((nme(),b));case 18:return bne(b);case 21:case 20:return b==null?null:cne(RD(b,161).a);case 27:return dne(RD(b,195));case 30:return ene((nme(),RD(b,15)));case 31:return ene(RD(b,15));case 40:return hne((nme(),b));case 42:return fne((nme(),b));case 43:return fne(b);case 59:case 48:return gne((nme(),b));default:throw Adb(new agb(VHe+a.xe()+WHe));}};_.si=function tne(a){var b,c,d,e,f;switch(a.G==-1&&(a.G=(c=BXd(a),c?fZd(c.vi(),a):-1)),a.G){case 0:return b=new ome,b;case 1:return d=new yme,d;case 2:return e=new Hme,e;case 3:return f=new Nme,f;default:throw Adb(new agb(ZHe+a.zb+WHe));}};_.ti=function une(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;switch(a.hk()){case 5:case 52:case 4:return b;case 6:return ine(b);case 8:case 7:return b==null?null:$me(b);case 9:return b==null?null:$eb(Oeb((d=nue(b,true),d.length>0&&(BFb(0,d.length),d.charCodeAt(0)==43)?(BFb(1,d.length+1),d.substr(1)):d),-128,127)<<24>>24);case 10:return b==null?null:$eb(Oeb((e=nue(b,true),e.length>0&&(BFb(0,e.length),e.charCodeAt(0)==43)?(BFb(1,e.length+1),e.substr(1)):e),-128,127)<<24>>24);case 11:return WD(uAd(this,(nme(),Vle),b));case 12:return WD(uAd(this,(nme(),Wle),b));case 13:return b==null?null:new Bib(nue(b,true));case 15:case 14:return jne(b);case 16:return WD(uAd(this,(nme(),Xle),b));case 17:return kne((nme(),b));case 18:return kne(b);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return nue(b,true);case 21:case 20:return lne(b);case 22:return WD(uAd(this,(nme(),Yle),b));case 23:return WD(uAd(this,(nme(),Zle),b));case 24:return WD(uAd(this,(nme(),$le),b));case 25:return WD(uAd(this,(nme(),_le),b));case 26:return WD(uAd(this,(nme(),ame),b));case 27:return mne(b);case 30:return nne((nme(),b));case 31:return nne(b);case 32:return b==null?null:sgb(Oeb((k=nue(b,true),k.length>0&&(BFb(0,k.length),k.charCodeAt(0)==43)?(BFb(1,k.length+1),k.substr(1)):k),qwe,lve));case 33:return b==null?null:new ejb((l=nue(b,true),l.length>0&&(BFb(0,l.length),l.charCodeAt(0)==43)?(BFb(1,l.length+1),l.substr(1)):l));case 34:return b==null?null:sgb(Oeb((m=nue(b,true),m.length>0&&(BFb(0,m.length),m.charCodeAt(0)==43)?(BFb(1,m.length+1),m.substr(1)):m),qwe,lve));case 36:return b==null?null:Hgb(Peb((n=nue(b,true),n.length>0&&(BFb(0,n.length),n.charCodeAt(0)==43)?(BFb(1,n.length+1),n.substr(1)):n)));case 37:return b==null?null:Hgb(Peb((o=nue(b,true),o.length>0&&(BFb(0,o.length),o.charCodeAt(0)==43)?(BFb(1,o.length+1),o.substr(1)):o)));case 40:return qne((nme(),b));case 42:return one((nme(),b));case 43:return one(b);case 44:return b==null?null:new ejb((p=nue(b,true),p.length>0&&(BFb(0,p.length),p.charCodeAt(0)==43)?(BFb(1,p.length+1),p.substr(1)):p));case 45:return b==null?null:new ejb((q=nue(b,true),q.length>0&&(BFb(0,q.length),q.charCodeAt(0)==43)?(BFb(1,q.length+1),q.substr(1)):q));case 46:return nue(b,false);case 47:return WD(uAd(this,(nme(),bme),b));case 59:case 48:return pne((nme(),b));case 49:return WD(uAd(this,(nme(),dme),b));case 50:return b==null?null:bhb(Oeb((r=nue(b,true),r.length>0&&(BFb(0,r.length),r.charCodeAt(0)==43)?(BFb(1,r.length+1),r.substr(1)):r),BKe,32767)<<16>>16);case 51:return b==null?null:bhb(Oeb((f=nue(b,true),f.length>0&&(BFb(0,f.length),f.charCodeAt(0)==43)?(BFb(1,f.length+1),f.substr(1)):f),BKe,32767)<<16>>16);case 53:return WD(uAd(this,(nme(),gme),b));case 55:return b==null?null:bhb(Oeb((g=nue(b,true),g.length>0&&(BFb(0,g.length),g.charCodeAt(0)==43)?(BFb(1,g.length+1),g.substr(1)):g),BKe,32767)<<16>>16);case 56:return b==null?null:bhb(Oeb((h=nue(b,true),h.length>0&&(BFb(0,h.length),h.charCodeAt(0)==43)?(BFb(1,h.length+1),h.substr(1)):h),BKe,32767)<<16>>16);case 57:return b==null?null:Hgb(Peb((i=nue(b,true),i.length>0&&(BFb(0,i.length),i.charCodeAt(0)==43)?(BFb(1,i.length+1),i.substr(1)):i)));case 58:return b==null?null:Hgb(Peb((j=nue(b,true),j.length>0&&(BFb(0,j.length),j.charCodeAt(0)==43)?(BFb(1,j.length+1),j.substr(1)):j)));case 60:return b==null?null:sgb(Oeb((c=nue(b,true),c.length>0&&(BFb(0,c.length),c.charCodeAt(0)==43)?(BFb(1,c.length+1),c.substr(1)):c),qwe,lve));case 61:return b==null?null:sgb(Oeb(nue(b,true),qwe,lve));default:throw Adb(new agb(VHe+a.xe()+WHe));}};var Vme,Wme,Xme,Yme;var ccb=sfb(lLe,'XMLTypeFactoryImpl',2028);feb(594,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1,2044:1,594:1},Bne);_.N=false;_.O=false;var wne=false;var bdb=sfb(lLe,'XMLTypePackageImpl',594);feb(1961,1,{851:1},Ene);_.Kk=function Fne(){return rue(),que};var ncb=sfb(lLe,'XMLTypePackageImpl/1',1961);feb(1970,1,OKe,Gne);_.fk=function Hne(a){return bE(a)};_.gk=function Ine(a){return $C(qJ,Nve,2,a,6,1)};var dcb=sfb(lLe,'XMLTypePackageImpl/10',1970);feb(1971,1,OKe,Jne);_.fk=function Kne(a){return bE(a)};_.gk=function Lne(a){return $C(qJ,Nve,2,a,6,1)};var ecb=sfb(lLe,'XMLTypePackageImpl/11',1971);feb(1972,1,OKe,Mne);_.fk=function Nne(a){return bE(a)};_.gk=function One(a){return $C(qJ,Nve,2,a,6,1)};var fcb=sfb(lLe,'XMLTypePackageImpl/12',1972);feb(1973,1,OKe,Pne);_.fk=function Qne(a){return _D(a)};_.gk=function Rne(a){return $C(VI,Nve,345,a,7,1)};var gcb=sfb(lLe,'XMLTypePackageImpl/13',1973);feb(1974,1,OKe,Sne);_.fk=function Tne(a){return bE(a)};_.gk=function Une(a){return $C(qJ,Nve,2,a,6,1)};var hcb=sfb(lLe,'XMLTypePackageImpl/14',1974);feb(1975,1,OKe,Vne);_.fk=function Wne(a){return ZD(a,15)};_.gk=function Xne(a){return $C(QK,Ize,15,a,0,1)};var icb=sfb(lLe,'XMLTypePackageImpl/15',1975);feb(1976,1,OKe,Yne);_.fk=function Zne(a){return ZD(a,15)};_.gk=function $ne(a){return $C(QK,Ize,15,a,0,1)};var jcb=sfb(lLe,'XMLTypePackageImpl/16',1976);feb(1977,1,OKe,_ne);_.fk=function aoe(a){return bE(a)};_.gk=function boe(a){return $C(qJ,Nve,2,a,6,1)};var kcb=sfb(lLe,'XMLTypePackageImpl/17',1977);feb(1978,1,OKe,coe);_.fk=function doe(a){return ZD(a,161)};_.gk=function eoe(a){return $C(ZI,Nve,161,a,0,1)};var lcb=sfb(lLe,'XMLTypePackageImpl/18',1978);feb(1979,1,OKe,foe);_.fk=function goe(a){return bE(a)};_.gk=function hoe(a){return $C(qJ,Nve,2,a,6,1)};var mcb=sfb(lLe,'XMLTypePackageImpl/19',1979);feb(1962,1,OKe,ioe);_.fk=function joe(a){return ZD(a,857)};_.gk=function koe(a){return $C(Vbb,rve,857,a,0,1)};var ycb=sfb(lLe,'XMLTypePackageImpl/2',1962);feb(1980,1,OKe,loe);_.fk=function moe(a){return bE(a)};_.gk=function noe(a){return $C(qJ,Nve,2,a,6,1)};var ocb=sfb(lLe,'XMLTypePackageImpl/20',1980);feb(1981,1,OKe,ooe);_.fk=function poe(a){return bE(a)};_.gk=function qoe(a){return $C(qJ,Nve,2,a,6,1)};var pcb=sfb(lLe,'XMLTypePackageImpl/21',1981);feb(1982,1,OKe,roe);_.fk=function soe(a){return bE(a)};_.gk=function toe(a){return $C(qJ,Nve,2,a,6,1)};var qcb=sfb(lLe,'XMLTypePackageImpl/22',1982);feb(1983,1,OKe,uoe);_.fk=function voe(a){return bE(a)};_.gk=function woe(a){return $C(qJ,Nve,2,a,6,1)};var rcb=sfb(lLe,'XMLTypePackageImpl/23',1983);feb(1984,1,OKe,xoe);_.fk=function yoe(a){return ZD(a,195)};_.gk=function zoe(a){return $C(gE,Nve,195,a,0,2)};var scb=sfb(lLe,'XMLTypePackageImpl/24',1984);feb(1985,1,OKe,Aoe);_.fk=function Boe(a){return bE(a)};_.gk=function Coe(a){return $C(qJ,Nve,2,a,6,1)};var tcb=sfb(lLe,'XMLTypePackageImpl/25',1985);feb(1986,1,OKe,Doe);_.fk=function Eoe(a){return bE(a)};_.gk=function Foe(a){return $C(qJ,Nve,2,a,6,1)};var ucb=sfb(lLe,'XMLTypePackageImpl/26',1986);feb(1987,1,OKe,Goe);_.fk=function Hoe(a){return ZD(a,15)};_.gk=function Ioe(a){return $C(QK,Ize,15,a,0,1)};var vcb=sfb(lLe,'XMLTypePackageImpl/27',1987);feb(1988,1,OKe,Joe);_.fk=function Koe(a){return ZD(a,15)};_.gk=function Loe(a){return $C(QK,Ize,15,a,0,1)};var wcb=sfb(lLe,'XMLTypePackageImpl/28',1988);feb(1989,1,OKe,Moe);_.fk=function Noe(a){return bE(a)};_.gk=function Ooe(a){return $C(qJ,Nve,2,a,6,1)};var xcb=sfb(lLe,'XMLTypePackageImpl/29',1989);feb(1963,1,OKe,Poe);_.fk=function Qoe(a){return ZD(a,681)};_.gk=function Roe(a){return $C(Xbb,rve,2119,a,0,1)};var Jcb=sfb(lLe,'XMLTypePackageImpl/3',1963);feb(1990,1,OKe,Soe);_.fk=function Toe(a){return ZD(a,17)};_.gk=function Uoe(a){return $C(bJ,Nve,17,a,0,1)};var zcb=sfb(lLe,'XMLTypePackageImpl/30',1990);feb(1991,1,OKe,Voe);_.fk=function Woe(a){return bE(a)};_.gk=function Xoe(a){return $C(qJ,Nve,2,a,6,1)};var Acb=sfb(lLe,'XMLTypePackageImpl/31',1991);feb(1992,1,OKe,Yoe);_.fk=function Zoe(a){return ZD(a,168)};_.gk=function $oe(a){return $C(eJ,Nve,168,a,0,1)};var Bcb=sfb(lLe,'XMLTypePackageImpl/32',1992);feb(1993,1,OKe,_oe);_.fk=function ape(a){return bE(a)};_.gk=function bpe(a){return $C(qJ,Nve,2,a,6,1)};var Ccb=sfb(lLe,'XMLTypePackageImpl/33',1993);feb(1994,1,OKe,cpe);_.fk=function dpe(a){return bE(a)};_.gk=function epe(a){return $C(qJ,Nve,2,a,6,1)};var Dcb=sfb(lLe,'XMLTypePackageImpl/34',1994);feb(1995,1,OKe,fpe);_.fk=function gpe(a){return bE(a)};_.gk=function hpe(a){return $C(qJ,Nve,2,a,6,1)};var Ecb=sfb(lLe,'XMLTypePackageImpl/35',1995);feb(1996,1,OKe,ipe);_.fk=function jpe(a){return bE(a)};_.gk=function kpe(a){return $C(qJ,Nve,2,a,6,1)};var Fcb=sfb(lLe,'XMLTypePackageImpl/36',1996);feb(1997,1,OKe,lpe);_.fk=function mpe(a){return ZD(a,15)};_.gk=function npe(a){return $C(QK,Ize,15,a,0,1)};var Gcb=sfb(lLe,'XMLTypePackageImpl/37',1997);feb(1998,1,OKe,ope);_.fk=function ppe(a){return ZD(a,15)};_.gk=function qpe(a){return $C(QK,Ize,15,a,0,1)};var Hcb=sfb(lLe,'XMLTypePackageImpl/38',1998);feb(1999,1,OKe,rpe);_.fk=function spe(a){return bE(a)};_.gk=function tpe(a){return $C(qJ,Nve,2,a,6,1)};var Icb=sfb(lLe,'XMLTypePackageImpl/39',1999);feb(1964,1,OKe,upe);_.fk=function vpe(a){return ZD(a,682)};_.gk=function wpe(a){return $C(Ybb,rve,2120,a,0,1)};var Ucb=sfb(lLe,'XMLTypePackageImpl/4',1964);feb(2000,1,OKe,xpe);_.fk=function ype(a){return bE(a)};_.gk=function zpe(a){return $C(qJ,Nve,2,a,6,1)};var Kcb=sfb(lLe,'XMLTypePackageImpl/40',2000);feb(2001,1,OKe,Ape);_.fk=function Bpe(a){return bE(a)};_.gk=function Cpe(a){return $C(qJ,Nve,2,a,6,1)};var Lcb=sfb(lLe,'XMLTypePackageImpl/41',2001);feb(2002,1,OKe,Dpe);_.fk=function Epe(a){return bE(a)};_.gk=function Fpe(a){return $C(qJ,Nve,2,a,6,1)};var Mcb=sfb(lLe,'XMLTypePackageImpl/42',2002);feb(2003,1,OKe,Gpe);_.fk=function Hpe(a){return bE(a)};_.gk=function Ipe(a){return $C(qJ,Nve,2,a,6,1)};var Ncb=sfb(lLe,'XMLTypePackageImpl/43',2003);feb(2004,1,OKe,Jpe);_.fk=function Kpe(a){return bE(a)};_.gk=function Lpe(a){return $C(qJ,Nve,2,a,6,1)};var Ocb=sfb(lLe,'XMLTypePackageImpl/44',2004);feb(2005,1,OKe,Mpe);_.fk=function Npe(a){return ZD(a,191)};_.gk=function Ope(a){return $C(lJ,Nve,191,a,0,1)};var Pcb=sfb(lLe,'XMLTypePackageImpl/45',2005);feb(2006,1,OKe,Ppe);_.fk=function Qpe(a){return bE(a)};_.gk=function Rpe(a){return $C(qJ,Nve,2,a,6,1)};var Qcb=sfb(lLe,'XMLTypePackageImpl/46',2006);feb(2007,1,OKe,Spe);_.fk=function Tpe(a){return bE(a)};_.gk=function Upe(a){return $C(qJ,Nve,2,a,6,1)};var Rcb=sfb(lLe,'XMLTypePackageImpl/47',2007);feb(2008,1,OKe,Vpe);_.fk=function Wpe(a){return bE(a)};_.gk=function Xpe(a){return $C(qJ,Nve,2,a,6,1)};var Scb=sfb(lLe,'XMLTypePackageImpl/48',2008);feb(2009,1,OKe,Ype);_.fk=function Zpe(a){return ZD(a,191)};_.gk=function $pe(a){return $C(lJ,Nve,191,a,0,1)};var Tcb=sfb(lLe,'XMLTypePackageImpl/49',2009);feb(1965,1,OKe,_pe);_.fk=function aqe(a){return ZD(a,683)};_.gk=function bqe(a){return $C(Zbb,rve,2121,a,0,1)};var Ycb=sfb(lLe,'XMLTypePackageImpl/5',1965);feb(2010,1,OKe,cqe);_.fk=function dqe(a){return ZD(a,168)};_.gk=function eqe(a){return $C(eJ,Nve,168,a,0,1)};var Vcb=sfb(lLe,'XMLTypePackageImpl/50',2010);feb(2011,1,OKe,fqe);_.fk=function gqe(a){return bE(a)};_.gk=function hqe(a){return $C(qJ,Nve,2,a,6,1)};var Wcb=sfb(lLe,'XMLTypePackageImpl/51',2011);feb(2012,1,OKe,iqe);_.fk=function jqe(a){return ZD(a,17)};_.gk=function kqe(a){return $C(bJ,Nve,17,a,0,1)};var Xcb=sfb(lLe,'XMLTypePackageImpl/52',2012);feb(1966,1,OKe,lqe);_.fk=function mqe(a){return bE(a)};_.gk=function nqe(a){return $C(qJ,Nve,2,a,6,1)};var Zcb=sfb(lLe,'XMLTypePackageImpl/6',1966);feb(1967,1,OKe,oqe);_.fk=function pqe(a){return ZD(a,195)};_.gk=function qqe(a){return $C(gE,Nve,195,a,0,2)};var $cb=sfb(lLe,'XMLTypePackageImpl/7',1967);feb(1968,1,OKe,rqe);_.fk=function sqe(a){return $D(a)};_.gk=function tqe(a){return $C(QI,Nve,484,a,8,1)};var _cb=sfb(lLe,'XMLTypePackageImpl/8',1968);feb(1969,1,OKe,uqe);_.fk=function vqe(a){return ZD(a,222)};_.gk=function wqe(a){return $C(RI,Nve,222,a,0,1)};var adb=sfb(lLe,'XMLTypePackageImpl/9',1969);var xqe,yqe;var Eqe,Fqe;var Jqe;feb(55,63,swe,Lqe);var cdb=sfb(LLe,'RegEx/ParseException',55);feb(836,1,{},Tqe);_.bm=function Uqe(a){return a<this.j&&ihb(this.i,a)==63};_.cm=function Vqe(){var a,b,c,d,e;if(this.c!=10)throw Adb(new Lqe(TId((Hde(),VIe))));a=this.a;switch(a){case 101:a=27;break;case 102:a=12;break;case 110:a=10;break;case 114:a=13;break;case 116:a=9;break;case 120:Mqe(this);if(this.c!=0)throw Adb(new Lqe(TId((Hde(),sJe))));if(this.a==123){e=0;c=0;do{Mqe(this);if(this.c!=0)throw Adb(new Lqe(TId((Hde(),sJe))));if((e=Xqe(this.a))<0)break;if(c>c*16)throw Adb(new Lqe(TId((Hde(),tJe))));c=c*16+e}while(true);if(this.a!=125)throw Adb(new Lqe(TId((Hde(),uJe))));if(c>MLe)throw Adb(new Lqe(TId((Hde(),vJe))));a=c}else{e=0;if(this.c!=0||(e=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));c=e;Mqe(this);if(this.c!=0||(e=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));c=c*16+e;a=c}break;case 117:d=0;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;a=b;break;case 118:Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;if(b>MLe)throw Adb(new Lqe(TId((Hde(),'parser.descappe.4'))));a=b;break;case 65:case 90:case 122:throw Adb(new Lqe(TId((Hde(),wJe))));}return a};_.dm=function Wqe(a){var b,c;switch(a){case 100:c=(this.e&32)==32?hte('Nd',true):(Vse(),Bse);break;case 68:c=(this.e&32)==32?hte('Nd',false):(Vse(),Ise);break;case 119:c=(this.e&32)==32?hte('IsWord',true):(Vse(),Rse);break;case 87:c=(this.e&32)==32?hte('IsWord',false):(Vse(),Kse);break;case 115:c=(this.e&32)==32?hte('IsSpace',true):(Vse(),Mse);break;case 83:c=(this.e&32)==32?hte('IsSpace',false):(Vse(),Jse);break;default:throw Adb(new yz((b=a,NLe+b.toString(16))));}return c};_.em=function Yqe(a){var b,c,d,e,f,g,h,i,j,k,l,m;this.b=1;Mqe(this);b=null;if(this.c==0&&this.a==94){Mqe(this);if(a){k=(Vse(),Vse(),++Use,new xte(5))}else{b=(Vse(),Vse(),++Use,new xte(4));rte(b,0,MLe);k=(null,++Use,new xte(4))}}else{k=(Vse(),Vse(),++Use,new xte(4))}e=true;while((m=this.c)!=1){if(m==0&&this.a==93&&!e)break;e=false;c=this.a;d=false;if(m==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:ute(k,this.dm(c));d=true;break;case 105:case 73:case 99:case 67:c=this.um(k,c);c<0&&(d=true);break;case 112:case 80:l=Sqe(this,c);if(!l)throw Adb(new Lqe(TId((Hde(),hJe))));ute(k,l);d=true;break;default:c=this.cm();}}else if(m==20){g=phb(this.i,58,this.d);if(g<0)throw Adb(new Lqe(TId((Hde(),iJe))));h=true;if(ihb(this.i,this.d)==94){++this.d;h=false}f=zhb(this.i,this.d,g);i=ite(f,h,(this.e&512)==512);if(!i)throw Adb(new Lqe(TId((Hde(),kJe))));ute(k,i);d=true;if(g+1>=this.j||ihb(this.i,g+1)!=93)throw Adb(new Lqe(TId((Hde(),iJe))));this.d=g+2}Mqe(this);if(!d){if(this.c!=0||this.a!=45){rte(k,c,c)}else{Mqe(this);if((m=this.c)==1)throw Adb(new Lqe(TId((Hde(),jJe))));if(m==0&&this.a==93){rte(k,c,c);rte(k,45,45)}else{j=this.a;m==10&&(j=this.cm());Mqe(this);rte(k,c,j)}}}(this.e&gwe)==gwe&&this.c==0&&this.a==44&&Mqe(this)}if(this.c==1)throw Adb(new Lqe(TId((Hde(),jJe))));if(b){wte(b,k);k=b}vte(k);ste(k);this.b=0;Mqe(this);return k};_.fm=function Zqe(){var a,b,c,d;c=this.em(false);while((d=this.c)!=7){a=this.a;if(d==0&&(a==45||a==38)||d==4){Mqe(this);if(this.c!=9)throw Adb(new Lqe(TId((Hde(),pJe))));b=this.em(false);if(d==4)ute(c,b);else if(a==45)wte(c,b);else if(a==38)tte(c,b);else throw Adb(new yz('ASSERT'))}else{throw Adb(new Lqe(TId((Hde(),qJe))))}}Mqe(this);return c};_.gm=function $qe(){var a,b;a=this.a-48;b=(Vse(),Vse(),++Use,new eue(12,null,a));!this.g&&(this.g=new gyb);dyb(this.g,new Bte(a));Mqe(this);return b};_.hm=function _qe(){Mqe(this);return Vse(),Nse};_.im=function are(){Mqe(this);return Vse(),Lse};_.jm=function bre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.km=function cre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.lm=function dre(){Mqe(this);return fte()};_.mm=function ere(){Mqe(this);return Vse(),Pse};_.nm=function fre(){Mqe(this);return Vse(),Sse};_.om=function gre(){var a;if(this.d>=this.j||((a=ihb(this.i,this.d++))&65504)!=64)throw Adb(new Lqe(TId((Hde(),dJe))));Mqe(this);return Vse(),Vse(),++Use,new Hte(0,a-64)};_.pm=function hre(){Mqe(this);return gte()};_.qm=function ire(){Mqe(this);return Vse(),Tse};_.rm=function jre(){var a;a=(Vse(),Vse(),++Use,new Hte(0,105));Mqe(this);return a};_.sm=function kre(){Mqe(this);return Vse(),Qse};_.tm=function lre(){Mqe(this);return Vse(),Ose};_.um=function mre(a,b){return this.cm()};_.vm=function nre(){Mqe(this);return Vse(),Gse};_.wm=function ore(){var a,b,c,d,e;if(this.d+1>=this.j)throw Adb(new Lqe(TId((Hde(),aJe))));d=-1;b=null;a=ihb(this.i,this.d);if(49<=a&&a<=57){d=a-48;!this.g&&(this.g=new gyb);dyb(this.g,new Bte(d));++this.d;if(ihb(this.i,this.d)!=41)throw Adb(new Lqe(TId((Hde(),ZIe))));++this.d}else{a==63&&--this.d;Mqe(this);b=Pqe(this);switch(b.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));break;default:throw Adb(new Lqe(TId((Hde(),bJe))));}}Mqe(this);e=Qqe(this);c=null;if(e.e==2){if(e.Pm()!=2)throw Adb(new Lqe(TId((Hde(),cJe))));c=e.Lm(1);e=e.Lm(0)}if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return Vse(),Vse(),++Use,new Ute(d,b,e,c)};_.xm=function pre(){Mqe(this);return Vse(),Hse};_.ym=function qre(){var a;Mqe(this);a=_se(24,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.zm=function rre(){var a;Mqe(this);a=_se(20,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Am=function sre(){var a;Mqe(this);a=_se(22,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Bm=function tre(){var a,b,c,d,e;a=0;c=0;b=-1;while(this.d<this.j){b=ihb(this.i,this.d);e=rse(b);if(e==0)break;a|=e;++this.d}if(this.d>=this.j)throw Adb(new Lqe(TId((Hde(),$Ie))));if(b==45){++this.d;while(this.d<this.j){b=ihb(this.i,this.d);e=rse(b);if(e==0)break;c|=e;++this.d}if(this.d>=this.j)throw Adb(new Lqe(TId((Hde(),$Ie))))}if(b==58){++this.d;Mqe(this);d=ate(Qqe(this),a,c);if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this)}else if(b==41){++this.d;Mqe(this);d=ate(Qqe(this),a,c)}else throw Adb(new Lqe(TId((Hde(),_Ie))));return d};_.Cm=function ure(){var a;Mqe(this);a=_se(21,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Dm=function vre(){var a;Mqe(this);a=_se(23,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Em=function wre(){var a,b;Mqe(this);a=this.f++;b=bte(Qqe(this),a);if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return b};_.Fm=function xre(){var a;Mqe(this);a=bte(Qqe(this),0);if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Gm=function yre(a){Mqe(this);if(this.c==5){Mqe(this);return $se(a,(Vse(),Vse(),++Use,new Kte(9,a)))}else return $se(a,(Vse(),Vse(),++Use,new Kte(3,a)))};_.Hm=function zre(a){var b;Mqe(this);b=(Vse(),Vse(),++Use,new iue(2));if(this.c==5){Mqe(this);hue(b,(null,Ese));hue(b,a)}else{hue(b,a);hue(b,(null,Ese))}return b};_.Im=function Are(a){Mqe(this);if(this.c==5){Mqe(this);return Vse(),Vse(),++Use,new Kte(9,a)}else return Vse(),Vse(),++Use,new Kte(3,a)};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=1;_.g=null;_.j=0;var gdb=sfb(LLe,'RegEx/RegexParser',836);feb(1947,836,{},Gre);_.bm=function Hre(a){return false};_.cm=function Ire(){return Dre(this)};_.dm=function Kre(a){return Ere(a)};_.em=function Lre(a){return Fre(this)};_.fm=function Mre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.gm=function Nre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.hm=function Ore(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.im=function Pre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.jm=function Qre(){Mqe(this);return Ere(67)};_.km=function Rre(){Mqe(this);return Ere(73)};_.lm=function Sre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.mm=function Tre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.nm=function Ure(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.om=function Vre(){Mqe(this);return Ere(99)};_.pm=function Wre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.qm=function Xre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.rm=function Yre(){Mqe(this);return Ere(105)};_.sm=function Zre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.tm=function $re(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.um=function _re(a,b){return ute(a,Ere(b)),-1};_.vm=function ase(){Mqe(this);return Vse(),Vse(),++Use,new Hte(0,94)};_.wm=function bse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.xm=function cse(){Mqe(this);return Vse(),Vse(),++Use,new Hte(0,36)};_.ym=function dse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.zm=function ese(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Am=function fse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Bm=function gse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Cm=function hse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Dm=function ise(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Em=function jse(){var a;Mqe(this);a=bte(Qqe(this),0);if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Fm=function kse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Gm=function lse(a){Mqe(this);return $se(a,(Vse(),Vse(),++Use,new Kte(3,a)))};_.Hm=function mse(a){var b;Mqe(this);b=(Vse(),Vse(),++Use,new iue(2));hue(b,a);hue(b,(null,Ese));return b};_.Im=function nse(a){Mqe(this);return Vse(),Vse(),++Use,new Kte(3,a)};var Bre=null,Cre=null;var ddb=sfb(LLe,'RegEx/ParserForXMLSchema',1947);feb(122,1,ZLe,Wse);_.Jm=function Xse(a){throw Adb(new yz('Not supported.'))};_.Km=function dte(){return -1};_.Lm=function ete(a){return null};_.Mm=function jte(){return null};_.Nm=function mte(a){};_.Om=function nte(a){};_.Pm=function ote(){return 0};_.Ib=function pte(){return this.Qm(0)};_.Qm=function qte(a){return this.e==11?'.':''};_.e=0;var vse,wse,xse,yse,zse,Ase=null,Bse,Cse=null,Dse,Ese,Fse=null,Gse,Hse,Ise,Jse,Kse,Lse,Mse,Nse,Ose,Pse,Qse,Rse,Sse,Tse,Use=0;var qdb=sfb(LLe,'RegEx/Token',122);feb(138,122,{3:1,138:1,122:1},xte);_.Qm=function Ate(a){var b,c,d;if(this.e==4){if(this==Dse)c='.';else if(this==Bse)c='\\d';else if(this==Rse)c='\\w';else if(this==Mse)c='\\s';else{d=new Qhb;d.a+='[';for(b=0;b<this.b.length;b+=2){(a&gwe)!=0&&b>0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Nhb(d,zte(this.b[b]))}else{Nhb(d,zte(this.b[b]));d.a+='-';Nhb(d,zte(this.b[b+1]))}}d.a+=']';c=d.a}}else{if(this==Ise)c='\\D';else if(this==Kse)c='\\W';else if(this==Jse)c='\\S';else{d=new Qhb;d.a+='[^';for(b=0;b<this.b.length;b+=2){(a&gwe)!=0&&b>0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Nhb(d,zte(this.b[b]))}else{Nhb(d,zte(this.b[b]));d.a+='-';Nhb(d,zte(this.b[b+1]))}}d.a+=']';c=d.a}}return c};_.a=false;_.c=false;var edb=sfb(LLe,'RegEx/RangeToken',138);feb(592,1,{592:1},Bte);_.a=0;var fdb=sfb(LLe,'RegEx/RegexParser/ReferencePosition',592);feb(591,1,{3:1,591:1},Dte);_.Fb=function Ete(a){var b;if(a==null)return false;if(!ZD(a,591))return false;b=RD(a,591);return lhb(this.b,b.b)&&this.a==b.a};_.Hb=function Fte(){return ohb(this.b+'/'+pse(this.a))};_.Ib=function Gte(){return this.c.Qm(this.a)};_.a=0;var hdb=sfb(LLe,'RegEx/RegularExpression',591);feb(228,122,ZLe,Hte);_.Km=function Ite(){return this.a};_.Qm=function Jte(a){var b,c,d;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:d='\\'+XD(this.a&Bwe);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(this.a>=txe){c=(b=this.a>>>0,'0'+b.toString(16));d='\\v'+zhb(c,c.length-6,c.length)}else d=''+XD(this.a&Bwe);}break;case 8:this==Gse||this==Hse?(d=''+XD(this.a&Bwe)):(d='\\'+XD(this.a&Bwe));break;default:d=null;}return d};_.a=0;var idb=sfb(LLe,'RegEx/Token/CharToken',228);feb(318,122,ZLe,Kte);_.Lm=function Lte(a){return this.a};_.Nm=function Mte(a){this.b=a};_.Om=function Nte(a){this.c=a};_.Pm=function Ote(){return 1};_.Qm=function Pte(a){var b;if(this.e==3){if(this.c<0&&this.b<0){b=this.a.Qm(a)+'*'}else if(this.c==this.b){b=this.a.Qm(a)+'{'+this.c+'}'}else if(this.c>=0&&this.b>=0){b=this.a.Qm(a)+'{'+this.c+','+this.b+'}'}else if(this.c>=0&&this.b<0){b=this.a.Qm(a)+'{'+this.c+',}'}else throw Adb(new yz('Token#toString(): CLOSURE '+this.c+pve+this.b))}else{if(this.c<0&&this.b<0){b=this.a.Qm(a)+'*?'}else if(this.c==this.b){b=this.a.Qm(a)+'{'+this.c+'}?'}else if(this.c>=0&&this.b>=0){b=this.a.Qm(a)+'{'+this.c+','+this.b+'}?'}else if(this.c>=0&&this.b<0){b=this.a.Qm(a)+'{'+this.c+',}?'}else throw Adb(new yz('Token#toString(): NONGREEDYCLOSURE '+this.c+pve+this.b))}return b};_.b=0;_.c=0;var jdb=sfb(LLe,'RegEx/Token/ClosureToken',318);feb(837,122,ZLe,Qte);_.Lm=function Rte(a){return a==0?this.a:this.b};_.Pm=function Ste(){return 2};_.Qm=function Tte(a){var b;this.b.e==3&&this.b.Lm(0)==this.a?(b=this.a.Qm(a)+'+'):this.b.e==9&&this.b.Lm(0)==this.a?(b=this.a.Qm(a)+'+?'):(b=this.a.Qm(a)+(''+this.b.Qm(a)));return b};var kdb=sfb(LLe,'RegEx/Token/ConcatToken',837);feb(1945,122,ZLe,Ute);_.Lm=function Vte(a){if(a==0)return this.d;if(a==1)return this.b;throw Adb(new yz('Internal Error: '+a))};_.Pm=function Wte(){return !this.b?1:2};_.Qm=function Xte(a){var b;this.c>0?(b='(?('+this.c+')'):this.a.e==8?(b='(?('+this.a+')'):(b='(?'+this.a);!this.b?(b+=this.d+')'):(b+=this.d+'|'+this.b+')');return b};_.c=0;var ldb=sfb(LLe,'RegEx/Token/ConditionToken',1945);feb(1946,122,ZLe,Yte);_.Lm=function Zte(a){return this.b};_.Pm=function $te(){return 1};_.Qm=function _te(a){return '(?'+(this.a==0?'':pse(this.a))+(this.c==0?'':pse(this.c))+':'+this.b.Qm(a)+')'};_.a=0;_.c=0;var mdb=sfb(LLe,'RegEx/Token/ModifierToken',1946);feb(838,122,ZLe,aue);_.Lm=function bue(a){return this.a};_.Pm=function cue(){return 1};_.Qm=function due(a){var b;b=null;switch(this.e){case 6:this.b==0?(b='(?:'+this.a.Qm(a)+')'):(b='('+this.a.Qm(a)+')');break;case 20:b='(?='+this.a.Qm(a)+')';break;case 21:b='(?!'+this.a.Qm(a)+')';break;case 22:b='(?<='+this.a.Qm(a)+')';break;case 23:b='(?<!'+this.a.Qm(a)+')';break;case 24:b='(?>'+this.a.Qm(a)+')';}return b};_.b=0;var ndb=sfb(LLe,'RegEx/Token/ParenToken',838);feb(530,122,{3:1,122:1,530:1},eue);_.Mm=function fue(){return this.b};_.Qm=function gue(a){return this.e==12?'\\'+this.a:tse(this.b)};_.a=0;var odb=sfb(LLe,'RegEx/Token/StringToken',530);feb(476,122,ZLe,iue);_.Jm=function jue(a){hue(this,a)};_.Lm=function kue(a){return RD(eyb(this.a,a),122)};_.Pm=function lue(){return !this.a?0:this.a.a.c.length};_.Qm=function mue(a){var b,c,d,e,f;if(this.e==1){if(this.a.a.c.length==2){b=RD(eyb(this.a,0),122);c=RD(eyb(this.a,1),122);c.e==3&&c.Lm(0)==b?(e=b.Qm(a)+'+'):c.e==9&&c.Lm(0)==b?(e=b.Qm(a)+'+?'):(e=b.Qm(a)+(''+c.Qm(a)))}else{f=new Qhb;for(d=0;d<this.a.a.c.length;d++){Nhb(f,RD(eyb(this.a,d),122).Qm(a))}e=f.a}return e}if(this.a.a.c.length==2&&RD(eyb(this.a,1),122).e==7){e=RD(eyb(this.a,0),122).Qm(a)+'?'}else if(this.a.a.c.length==2&&RD(eyb(this.a,0),122).e==7){e=RD(eyb(this.a,1),122).Qm(a)+'??'}else{f=new Qhb;Nhb(f,RD(eyb(this.a,0),122).Qm(a));for(d=1;d<this.a.a.c.length;d++){f.a+='|';Nhb(f,RD(eyb(this.a,d),122).Qm(a))}e=f.a}return e};var pdb=sfb(LLe,'RegEx/Token/UnionToken',476);feb(527,1,{600:1},oue);_.Ib=function pue(){return this.a.b};var rdb=sfb($Le,'XMLTypeUtil/PatternMatcherImpl',527);feb(1707,1527,{},sue);var que;var sdb=sfb($Le,'XMLTypeValidator',1707);feb(270,1,Vve,vue);_.Jc=function wue(a){xgb(this,a)};_.Kc=function xue(){return (this.b-this.a)*this.c<0?tue:new Rue(this)};_.a=0;_.b=0;_.c=0;var tue;var vdb=sfb(aMe,'ExclusiveRange',270);feb(1084,1,Jve,Cue);_.Rb=function Due(a){RD(a,17);yue()};_.Nb=function Eue(a){Ztb(this,a)};_.Pb=function Hue(){return zue()};_.Ub=function Jue(){return Aue()};_.Wb=function Mue(a){RD(a,17);Bue()};_.Ob=function Fue(){return false};_.Sb=function Gue(){return false};_.Tb=function Iue(){return -1};_.Vb=function Kue(){return -1};_.Qb=function Lue(){throw Adb(new kib(dMe))};var tdb=sfb(aMe,'ExclusiveRange/1',1084);feb(258,1,Jve,Rue);_.Rb=function Sue(a){RD(a,17);Nue()};_.Nb=function Tue(a){Ztb(this,a)};_.Pb=function Wue(){return Oue(this)};_.Ub=function Yue(){return Pue(this)};_.Wb=function _ue(a){RD(a,17);Que()};_.Ob=function Uue(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b};_.Sb=function Vue(){return this.b>0};_.Tb=function Xue(){return this.b};_.Vb=function Zue(){return this.b-1};_.Qb=function $ue(){throw Adb(new kib(dMe))};_.a=0;_.b=0;var udb=sfb(aMe,'ExclusiveRange/RangeIterator',258);var hE=vfb(eKe,'C');var kE=vfb(hKe,'I');var xdb=vfb(hve,'Z');var lE=vfb(iKe,'J');var gE=vfb(dKe,'B');var iE=vfb(fKe,'D');var jE=vfb(gKe,'F');var wdb=vfb(jKe,'S');var g3=ufb('org.eclipse.elk.core.labels','ILabelManager');var T6=ufb(sIe,'DiagnosticChain');var zab=ufb(QKe,'ResourceSet');var $6=sfb(sIe,'InvocationTargetException',null);var fve=(Qz(),Tz);var gwtOnLoad=gwtOnLoad=ceb;aeb(leb);deb('permProps',[[['locale','default'],[eMe,'gecko1_8']],[['locale','default'],[eMe,'safari']]]); -// -------------- RUN GWT INITIALIZATION CODE -------------- -gwtOnLoad(null, 'elk', null); - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],3:[function(require,module,exports){ -'use strict'; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/******************************************************************************* - * Copyright (c) 2021 Kiel University and others. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -var ELK = require('./elk-api.js').default; - -var ELKNode = function (_ELK) { - _inherits(ELKNode, _ELK); - - function ELKNode() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, ELKNode); - - var optionsClone = Object.assign({}, options); - - var workerThreadsExist = false; - try { - require.resolve('web-worker'); - workerThreadsExist = true; - } catch (e) {} - - // user requested a worker - if (options.workerUrl) { - if (workerThreadsExist) { - var Worker = require('web-worker'); - optionsClone.workerFactory = function (url) { - return new Worker(url); - }; - } else { - console.warn('Web worker requested but \'web-worker\' package not installed. \nConsider installing the package or pass your own \'workerFactory\' to ELK\'s constructor.\n... Falling back to non-web worker version.'); - } - } - - // unless no other workerFactory is registered, use the fake worker - if (!optionsClone.workerFactory) { - var _require = require('./elk-worker.min.js'), - _Worker = _require.Worker; - - optionsClone.workerFactory = function (url) { - return new _Worker(url); - }; - } - - return _possibleConstructorReturn(this, (ELKNode.__proto__ || Object.getPrototypeOf(ELKNode)).call(this, optionsClone)); - } - - return ELKNode; -}(ELK); - -Object.defineProperty(module.exports, "__esModule", { - value: true -}); -module.exports = ELKNode; -ELKNode.default = ELKNode; -},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(require,module,exports){ -/** - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -module.exports = Worker; -},{}]},{},[3])(3) -}); - - -/***/ }), - -/***/ 18897: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - a: () => (/* binding */ createText), - c: () => (/* binding */ computeDimensionOfText) -}); - -// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -var constructs_namespaceObject = {}; -__webpack_require__.r(constructs_namespaceObject); -__webpack_require__.d(constructs_namespaceObject, { - attentionMarkers: () => (attentionMarkers), - contentInitial: () => (contentInitial), - disable: () => (disable), - document: () => (constructs_document), - flow: () => (constructs_flow), - flowInitial: () => (flowInitial), - insideSpan: () => (insideSpan), - string: () => (constructs_string), - text: () => (constructs_text) -}); - -// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules -var mermaid_6dc72991 = __webpack_require__(99702); -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js -/** - * @typedef {import('mdast').Root|import('mdast').Content} Node - * - * @typedef Options - * Configuration (optional). - * @property {boolean | null | undefined} [includeImageAlt=true] - * Whether to use `alt` for `image`s. - * @property {boolean | null | undefined} [includeHtml=true] - * Whether to use `value` of HTML. - */ - -/** @type {Options} */ -const emptyOptions = {} - -/** - * Get the text content of a node or list of nodes. - * - * Prefers the node’s plain-text fields, otherwise serializes its children, - * and if the given value is an array, serialize the nodes in it. - * - * @param {unknown} value - * Thing to serialize, typically `Node`. - * @param {Options | null | undefined} [options] - * Configuration (optional). - * @returns {string} - * Serialized `value`. - */ -function lib_toString(value, options) { - const settings = options || emptyOptions - const includeImageAlt = - typeof settings.includeImageAlt === 'boolean' - ? settings.includeImageAlt - : true - const includeHtml = - typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true - - return one(value, includeImageAlt, includeHtml) -} - -/** - * One node or several nodes. - * - * @param {unknown} value - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized node. - */ -function one(value, includeImageAlt, includeHtml) { - if (node(value)) { - if ('value' in value) { - return value.type === 'html' && !includeHtml ? '' : value.value - } - - if (includeImageAlt && 'alt' in value && value.alt) { - return value.alt - } - - if ('children' in value) { - return lib_all(value.children, includeImageAlt, includeHtml) - } - } - - if (Array.isArray(value)) { - return lib_all(value, includeImageAlt, includeHtml) - } - - return '' -} - -/** - * Serialize a list of nodes. - * - * @param {Array<unknown>} values - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized nodes. - */ -function lib_all(values, includeImageAlt, includeHtml) { - /** @type {Array<string>} */ - const result = [] - let index = -1 - - while (++index < values.length) { - result[index] = one(values[index], includeImageAlt, includeHtml) - } - - return result.join('') -} - -/** - * Check if `value` looks like a node. - * - * @param {unknown} value - * Thing. - * @returns {value is Node} - * Whether `value` is a node. - */ -function node(value) { - return Boolean(value && typeof value === 'object') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array<T>} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array<T>} items - * Items to inject into `list`. - * @returns {void} - * Nothing. - */ -function splice(list, start, remove, items) { - const end = list.length - let chunkStart = 0 - /** @type {Array<unknown>} */ - let parameters - - // Make start between zero and `end` (included). - if (start < 0) { - start = -start > end ? 0 : end + start - } else { - start = start > end ? end : start - } - remove = remove > 0 ? remove : 0 - - // No need to chunk the items if there’s only a couple (10k) items. - if (items.length < 10000) { - parameters = Array.from(items) - parameters.unshift(start, remove) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - } else { - // Delete `remove` items starting from `start` - if (remove) list.splice(start, remove) - - // Insert the items in chunks to not cause stack overflows. - while (chunkStart < items.length) { - parameters = items.slice(chunkStart, chunkStart + 10000) - parameters.unshift(start, 0) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - chunkStart += 10000 - start += 10000 - } - } -} - -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array<T>} list - * List to operate on. - * @param {Array<T>} items - * Items to add to `list`. - * @returns {Array<T>} - * Either `list` or `items`. - */ -function push(list, items) { - if (list.length > 0) { - splice(list, list.length, 0, items) - return list - } - return items -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - * @typedef {import('micromark-util-types').Handles} Handles - * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension - * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension - */ - - - -const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty - -/** - * Combine multiple syntax extensions into one. - * - * @param {Array<Extension>} extensions - * List of syntax extensions. - * @returns {NormalizedExtension} - * A single combined extension. - */ -function combineExtensions(extensions) { - /** @type {NormalizedExtension} */ - const all = {} - let index = -1 - - while (++index < extensions.length) { - syntaxExtension(all, extensions[index]) - } - - return all -} - -/** - * Merge `extension` into `all`. - * - * @param {NormalizedExtension} all - * Extension to merge into. - * @param {Extension} extension - * Extension to merge. - * @returns {void} - */ -function syntaxExtension(all, extension) { - /** @type {keyof Extension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - /** @type {Record<string, unknown>} */ - const left = maybe || (all[hook] = {}) - /** @type {Record<string, unknown> | undefined} */ - const right = extension[hook] - /** @type {string} */ - let code - - if (right) { - for (code in right) { - if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] - const value = right[code] - constructs( - // @ts-expect-error Looks like a list. - left[code], - Array.isArray(value) ? value : value ? [value] : [] - ) - } - } - } -} - -/** - * Merge `list` into `existing` (both lists of constructs). - * Mutates `existing`. - * - * @param {Array<unknown>} existing - * @param {Array<unknown>} list - * @returns {void} - */ -function constructs(existing, list) { - let index = -1 - /** @type {Array<unknown>} */ - const before = [] - - while (++index < list.length) { - // @ts-expect-error Looks like an object. - ;(list[index].add === 'after' ? existing : before).push(list[index]) - } - - splice(existing, 0, 0, before) -} - -/** - * Combine multiple HTML extensions into one. - * - * @param {Array<HtmlExtension>} htmlExtensions - * List of HTML extensions. - * @returns {HtmlExtension} - * A single combined HTML extension. - */ -function combineHtmlExtensions(htmlExtensions) { - /** @type {HtmlExtension} */ - const handlers = {} - let index = -1 - - while (++index < htmlExtensions.length) { - htmlExtension(handlers, htmlExtensions[index]) - } - - return handlers -} - -/** - * Merge `extension` into `all`. - * - * @param {HtmlExtension} all - * Extension to merge into. - * @param {HtmlExtension} extension - * Extension to merge. - * @returns {void} - */ -function htmlExtension(all, extension) { - /** @type {keyof HtmlExtension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - const left = maybe || (all[hook] = {}) - const right = extension[hook] - /** @type {keyof Handles} */ - let type - - if (right) { - for (type in right) { - // @ts-expect-error assume document vs regular handler are managed correctly. - left[type] = right[type] - } - } - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js -// This module is generated by `script/`. -// -// CommonMark handles attention (emphasis, strong) markers based on what comes -// before or after them. -// One such difference is if those characters are Unicode punctuation. -// This script is generated from the Unicode data. - -/** - * Regular expression that matches a unicode punctuation character. - */ -const unicodePunctuationRegex = - /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - - -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlpha = regexCheck(/[A-Za-z]/) - -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) - -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) - -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function asciiControl(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code !== null && (code < 32 || code === 127) - ) -} - -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiDigit = regexCheck(/\d/) - -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) - -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) - -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEnding(code) { - return code !== null && code < -2 -} - -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEndingOrSpace(code) { - return code !== null && (code < 0 || code === 32) -} - -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownSpace(code) { - return code === -2 || code === -1 || code === 32 -} - -// Size note: removing ASCII from the regex and using `asciiPunctuation` here -// In fact adds to the bundle size. -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodePunctuation = regexCheck(unicodePunctuationRegex) - -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodeWhitespace = regexCheck(/\s/) - -/** - * Create a code check from a regex. - * - * @param {RegExp} regex - * @returns {(code: Code) => boolean} - */ -function regexCheck(regex) { - return check - - /** - * Check whether a code matches the bound regex. - * - * @param {Code} code - * Character code. - * @returns {boolean} - * Whether the character code matches the bound regex. - */ - function check(code) { - return code !== null && regex.test(String.fromCharCode(code)) - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns - * Start state. - */ -function factorySpace(effects, ok, type, max) { - const limit = max ? max - 1 : Number.POSITIVE_INFINITY - let size = 0 - return start - - /** @type {State} */ - function start(code) { - if (markdownSpace(code)) { - effects.enter(type) - return prefix(code) - } - return ok(code) - } - - /** @type {State} */ - function prefix(code) { - if (markdownSpace(code) && size++ < limit) { - effects.consume(code) - return prefix - } - effects.exit(type) - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - -/** @type {InitialConstruct} */ -const content = { - tokenize: initializeContent -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeContent(effects) { - const contentStart = effects.attempt( - this.parser.constructs.contentInitial, - afterContentStartConstruct, - paragraphInitial - ) - /** @type {Token} */ - let previous - return contentStart - - /** @type {State} */ - function afterContentStartConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, contentStart, 'linePrefix') - } - - /** @type {State} */ - function paragraphInitial(code) { - effects.enter('paragraph') - return lineStart(code) - } - - /** @type {State} */ - function lineStart(code) { - const token = effects.enter('chunkText', { - contentType: 'text', - previous - }) - if (previous) { - previous.next = token - } - previous = token - return data(code) - } - - /** @type {State} */ - function data(code) { - if (code === null) { - effects.exit('chunkText') - effects.exit('paragraph') - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - effects.exit('chunkText') - return lineStart - } - - // Data. - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - -/** - * @typedef {[Construct, ContainerState]} StackItem - */ - - - - -/** @type {InitialConstruct} */ -const document_document = { - tokenize: initializeDocument -} - -/** @type {Construct} */ -const containerConstruct = { - tokenize: tokenizeContainer -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeDocument(effects) { - const self = this - /** @type {Array<StackItem>} */ - const stack = [] - let continued = 0 - /** @type {TokenizeContext | undefined} */ - let childFlow - /** @type {Token | undefined} */ - let childToken - /** @type {number} */ - let lineStartOffset - return start - - /** @type {State} */ - function start(code) { - // First we iterate through the open blocks, starting with the root - // document, and descending through last children down to the last open - // block. - // Each block imposes a condition that the line must satisfy if the block is - // to remain open. - // For example, a block quote requires a `>` character. - // A paragraph requires a non-blank line. - // In this phase we may match all or just some of the open blocks. - // But we cannot close unmatched blocks yet, because we may have a lazy - // continuation line. - if (continued < stack.length) { - const item = stack[continued] - self.containerState = item[1] - return effects.attempt( - item[0].continuation, - documentContinue, - checkNewContainers - )(code) - } - - // Done. - return checkNewContainers(code) - } - - /** @type {State} */ - function documentContinue(code) { - continued++ - - // Note: this field is called `_closeFlow` but it also closes containers. - // Perhaps a good idea to rename it but it’s already used in the wild by - // extensions. - if (self.containerState._closeFlow) { - self.containerState._closeFlow = undefined - if (childFlow) { - closeFlow() - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when dealing with lazy lines in `writeToChild`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {Point | undefined} */ - let point - - // Find the flow chunk. - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - point = self.events[indexBeforeFlow][1].end - break - } - } - exitContainers(continued) - - // Fix positions. - let index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - return checkNewContainers(code) - } - return start(code) - } - - /** @type {State} */ - function checkNewContainers(code) { - // Next, after consuming the continuation markers for existing blocks, we - // look for new block starts (e.g. `>` for a block quote). - // If we encounter a new block start, we close any blocks unmatched in - // step 1 before creating the new block as a child of the last matched - // block. - if (continued === stack.length) { - // No need to `check` whether there’s a container, of `exitContainers` - // would be moot. - // We can instead immediately `attempt` to parse one. - if (!childFlow) { - return documentContinued(code) - } - - // If we have concrete content, such as block HTML or fenced code, - // we can’t have containers “pierce” into them, so we can immediately - // start. - if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { - return flowStart(code) - } - - // If we do have flow, it could still be a blank line, - // but we’d be interrupting it w/ a new container if there’s a current - // construct. - // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer - // needed in micromark-extension-gfm-table@1.0.6). - self.interrupt = Boolean( - childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack - ) - } - - // Check if there is a new container. - self.containerState = {} - return effects.check( - containerConstruct, - thereIsANewContainer, - thereIsNoNewContainer - )(code) - } - - /** @type {State} */ - function thereIsANewContainer(code) { - if (childFlow) closeFlow() - exitContainers(continued) - return documentContinued(code) - } - - /** @type {State} */ - function thereIsNoNewContainer(code) { - self.parser.lazy[self.now().line] = continued !== stack.length - lineStartOffset = self.now().offset - return flowStart(code) - } - - /** @type {State} */ - function documentContinued(code) { - // Try new containers. - self.containerState = {} - return effects.attempt( - containerConstruct, - containerContinue, - flowStart - )(code) - } - - /** @type {State} */ - function containerContinue(code) { - continued++ - stack.push([self.currentConstruct, self.containerState]) - // Try another. - return documentContinued(code) - } - - /** @type {State} */ - function flowStart(code) { - if (code === null) { - if (childFlow) closeFlow() - exitContainers(0) - effects.consume(code) - return - } - childFlow = childFlow || self.parser.flow(self.now()) - effects.enter('chunkFlow', { - contentType: 'flow', - previous: childToken, - _tokenizer: childFlow - }) - return flowContinue(code) - } - - /** @type {State} */ - function flowContinue(code) { - if (code === null) { - writeToChild(effects.exit('chunkFlow'), true) - exitContainers(0) - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - writeToChild(effects.exit('chunkFlow')) - // Get ready for the next line. - continued = 0 - self.interrupt = undefined - return start - } - effects.consume(code) - return flowContinue - } - - /** - * @param {Token} token - * @param {boolean | undefined} [eof] - * @returns {void} - */ - function writeToChild(token, eof) { - const stream = self.sliceStream(token) - if (eof) stream.push(null) - token.previous = childToken - if (childToken) childToken.next = token - childToken = token - childFlow.defineSkip(token.start) - childFlow.write(stream) - - // Alright, so we just added a lazy line: - // - // ```markdown - // > a - // b. - // - // Or: - // - // > ~~~c - // d - // - // Or: - // - // > | e | - // f - // ``` - // - // The construct in the second example (fenced code) does not accept lazy - // lines, so it marked itself as done at the end of its first line, and - // then the content construct parses `d`. - // Most constructs in markdown match on the first line: if the first line - // forms a construct, a non-lazy line can’t “unmake” it. - // - // The construct in the third example is potentially a GFM table, and - // those are *weird*. - // It *could* be a table, from the first line, if the following line - // matches a condition. - // In this case, that second line is lazy, which “unmakes” the first line - // and turns the whole into one content block. - // - // We’ve now parsed the non-lazy and the lazy line, and can figure out - // whether the lazy line started a new flow block. - // If it did, we exit the current containers between the two flow blocks. - if (self.parser.lazy[token.start.line]) { - let index = childFlow.events.length - while (index--) { - if ( - // The token starts before the line ending… - childFlow.events[index][1].start.offset < lineStartOffset && - // …and either is not ended yet… - (!childFlow.events[index][1].end || - // …or ends after it. - childFlow.events[index][1].end.offset > lineStartOffset) - ) { - // Exit: there’s still something open, which means it’s a lazy line - // part of something. - return - } - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when closing flow in `documentContinue`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {boolean | undefined} */ - let seen - /** @type {Point | undefined} */ - let point - - // Find the previous chunk (the one before the lazy line). - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - if (seen) { - point = self.events[indexBeforeFlow][1].end - break - } - seen = true - } - } - exitContainers(continued) - - // Fix positions. - index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - } - } - - /** - * @param {number} size - * @returns {void} - */ - function exitContainers(size) { - let index = stack.length - - // Exit open containers. - while (index-- > size) { - const entry = stack[index] - self.containerState = entry[1] - entry[0].exit.call(self, effects) - } - stack.length = size - } - function closeFlow() { - childFlow.write([null]) - childToken = undefined - childFlow = undefined - self.containerState._closeFlow = undefined - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContainer(effects, ok, nok) { - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(this.parser.constructs.document, ok, nok), - 'linePrefix', - this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blankLine = { - tokenize: tokenizeBlankLine, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLine(effects, ok, nok) { - return start - - /** - * Start of blank line. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - return markdownSpace(code) - ? factorySpace(effects, after, 'linePrefix')(code) - : after(code) - } - - /** - * At eof/eol, after optional whitespace. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Token} Token - */ - - -/** - * Tokenize subcontent. - * - * @param {Array<Event>} events - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -function subtokenize(events) { - /** @type {Record<string, number>} */ - const jumps = {} - let index = -1 - /** @type {Event} */ - let event - /** @type {number | undefined} */ - let lineIndex - /** @type {number} */ - let otherIndex - /** @type {Event} */ - let otherEvent - /** @type {Array<Event>} */ - let parameters - /** @type {Array<Event>} */ - let subevents - /** @type {boolean | undefined} */ - let more - while (++index < events.length) { - while (index in jumps) { - index = jumps[index] - } - event = events[index] - - // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. - if ( - index && - event[1].type === 'chunkFlow' && - events[index - 1][1].type === 'listItemPrefix' - ) { - subevents = event[1]._tokenizer.events - otherIndex = 0 - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'lineEndingBlank' - ) { - otherIndex += 2 - } - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'content' - ) { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === 'content') { - break - } - if (subevents[otherIndex][1].type === 'chunkText') { - subevents[otherIndex][1]._isInFirstContentOfListItem = true - otherIndex++ - } - } - } - } - - // Enter. - if (event[0] === 'enter') { - if (event[1].contentType) { - Object.assign(jumps, subcontent(events, index)) - index = jumps[index] - more = true - } - } - // Exit. - else if (event[1]._container) { - otherIndex = index - lineIndex = undefined - while (otherIndex--) { - otherEvent = events[otherIndex] - if ( - otherEvent[1].type === 'lineEnding' || - otherEvent[1].type === 'lineEndingBlank' - ) { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - } - otherEvent[1].type = 'lineEnding' - lineIndex = otherIndex - } - } else { - break - } - } - if (lineIndex) { - // Fix position. - event[1].end = Object.assign({}, events[lineIndex][1].start) - - // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index) - parameters.unshift(event) - splice(events, lineIndex, index - lineIndex + 1, parameters) - } - } - } - return !more -} - -/** - * Tokenize embedded tokens. - * - * @param {Array<Event>} events - * @param {number} eventIndex - * @returns {Record<string, number>} - */ -function subcontent(events, eventIndex) { - const token = events[eventIndex][1] - const context = events[eventIndex][2] - let startPosition = eventIndex - 1 - /** @type {Array<number>} */ - const startPositions = [] - const tokenizer = - token._tokenizer || context.parser[token.contentType](token.start) - const childEvents = tokenizer.events - /** @type {Array<[number, number]>} */ - const jumps = [] - /** @type {Record<string, number>} */ - const gaps = {} - /** @type {Array<Chunk>} */ - let stream - /** @type {Token | undefined} */ - let previous - let index = -1 - /** @type {Token | undefined} */ - let current = token - let adjust = 0 - let start = 0 - const breaks = [start] - - // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. - while (current) { - // Find the position of the event for this token. - while (events[++startPosition][1] !== current) { - // Empty. - } - startPositions.push(startPosition) - if (!current._tokenizer) { - stream = context.sliceStream(current) - if (!current.next) { - stream.push(null) - } - if (previous) { - tokenizer.defineSkip(current.start) - } - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true - } - tokenizer.write(stream) - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined - } - } - - // Unravel the next token. - previous = current - current = current.next - } - - // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. - current = token - while (++index < childEvents.length) { - if ( - // Find a void token that includes a break. - childEvents[index][0] === 'exit' && - childEvents[index - 1][0] === 'enter' && - childEvents[index][1].type === childEvents[index - 1][1].type && - childEvents[index][1].start.line !== childEvents[index][1].end.line - ) { - start = index + 1 - breaks.push(start) - // Help GC. - current._tokenizer = undefined - current.previous = undefined - current = current.next - } - } - - // Help GC. - tokenizer.events = [] - - // If there’s one more token (which is the cases for lines that end in an - // EOF), that’s perfect: the last point we found starts it. - // If there isn’t then make sure any remaining content is added to it. - if (current) { - // Help GC. - current._tokenizer = undefined - current.previous = undefined - } else { - breaks.pop() - } - - // Now splice the events from the subtokenizer into the current events, - // moving back to front so that splice indices aren’t affected. - index = breaks.length - while (index--) { - const slice = childEvents.slice(breaks[index], breaks[index + 1]) - const start = startPositions.pop() - jumps.unshift([start, start + slice.length - 1]) - splice(events, start, 2, slice) - } - index = -1 - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] - adjust += jumps[index][1] - jumps[index][0] - 1 - } - return gaps -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** - * No name because it must not be turned off. - * @type {Construct} - */ -const content_content = { - tokenize: tokenizeContent, - resolve: resolveContent -} - -/** @type {Construct} */ -const continuationConstruct = { - tokenize: tokenizeContinuation, - partial: true -} - -/** - * Content is transparent: it’s parsed right now. That way, definitions are also - * parsed right now: before text in paragraphs (specifically, media) are parsed. - * - * @type {Resolver} - */ -function resolveContent(events) { - subtokenize(events) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContent(effects, ok) { - /** @type {Token | undefined} */ - let previous - return chunkStart - - /** - * Before a content chunk. - * - * ```markdown - * > | abc - * ^ - * ``` - * - * @type {State} - */ - function chunkStart(code) { - effects.enter('content') - previous = effects.enter('chunkContent', { - contentType: 'content' - }) - return chunkInside(code) - } - - /** - * In a content chunk. - * - * ```markdown - * > | abc - * ^^^ - * ``` - * - * @type {State} - */ - function chunkInside(code) { - if (code === null) { - return contentEnd(code) - } - - // To do: in `markdown-rs`, each line is parsed on its own, and everything - // is stitched together resolving. - if (markdownLineEnding(code)) { - return effects.check( - continuationConstruct, - contentContinue, - contentEnd - )(code) - } - - // Data. - effects.consume(code) - return chunkInside - } - - /** - * - * - * @type {State} - */ - function contentEnd(code) { - effects.exit('chunkContent') - effects.exit('content') - return ok(code) - } - - /** - * - * - * @type {State} - */ - function contentContinue(code) { - effects.consume(code) - effects.exit('chunkContent') - previous.next = effects.enter('chunkContent', { - contentType: 'content', - previous - }) - previous = previous.next - return chunkInside - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContinuation(effects, ok, nok) { - const self = this - return startLookahead - - /** - * - * - * @type {State} - */ - function startLookahead(code) { - effects.exit('chunkContent') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, prefixed, 'linePrefix') - } - - /** - * - * - * @type {State} - */ - function prefixed(code) { - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - - // Always populated by defaults. - - const tail = self.events[self.events.length - 1] - if ( - !self.parser.constructs.disable.null.includes('codeIndented') && - tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ) { - return ok(code) - } - return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - - -/** @type {InitialConstruct} */ -const flow = { - tokenize: initializeFlow -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeFlow(effects) { - const self = this - const initial = effects.attempt( - // Try to parse a blank line. - blankLine, - atBlankEnding, - // Try to parse initial flow (essentially, only code). - effects.attempt( - this.parser.constructs.flowInitial, - afterConstruct, - factorySpace( - effects, - effects.attempt( - this.parser.constructs.flow, - afterConstruct, - effects.attempt(content_content, afterConstruct) - ), - 'linePrefix' - ) - ) - ) - return initial - - /** @type {State} */ - function atBlankEnding(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEndingBlank') - effects.consume(code) - effects.exit('lineEndingBlank') - self.currentConstruct = undefined - return initial - } - - /** @type {State} */ - function afterConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - self.currentConstruct = undefined - return initial - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -const resolver = { - resolveAll: createResolver() -} -const string = initializeFactory('string') -const text_text = initializeFactory('text') - -/** - * @param {'string' | 'text'} field - * @returns {InitialConstruct} - */ -function initializeFactory(field) { - return { - tokenize: initializeText, - resolveAll: createResolver( - field === 'text' ? resolveAllLineSuffixes : undefined - ) - } - - /** - * @this {TokenizeContext} - * @type {Initializer} - */ - function initializeText(effects) { - const self = this - const constructs = this.parser.constructs[field] - const text = effects.attempt(constructs, start, notText) - return start - - /** @type {State} */ - function start(code) { - return atBreak(code) ? text(code) : notText(code) - } - - /** @type {State} */ - function notText(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('data') - effects.consume(code) - return data - } - - /** @type {State} */ - function data(code) { - if (atBreak(code)) { - effects.exit('data') - return text(code) - } - - // Data. - effects.consume(code) - return data - } - - /** - * @param {Code} code - * @returns {boolean} - */ - function atBreak(code) { - if (code === null) { - return true - } - const list = constructs[code] - let index = -1 - if (list) { - // Always populated by defaults. - - while (++index < list.length) { - const item = list[index] - if (!item.previous || item.previous.call(self, self.previous)) { - return true - } - } - } - return false - } - } -} - -/** - * @param {Resolver | undefined} [extraResolver] - * @returns {Resolver} - */ -function createResolver(extraResolver) { - return resolveAllText - - /** @type {Resolver} */ - function resolveAllText(events, context) { - let index = -1 - /** @type {number | undefined} */ - let enter - - // A rather boring computation (to merge adjacent `data` events) which - // improves mm performance by 29%. - while (++index <= events.length) { - if (enter === undefined) { - if (events[index] && events[index][1].type === 'data') { - enter = index - index++ - } - } else if (!events[index] || events[index][1].type !== 'data') { - // Don’t do anything if there is one data token. - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - index = enter + 2 - } - enter = undefined - } - } - return extraResolver ? extraResolver(events, context) : events - } -} - -/** - * A rather ugly set of instructions which again looks at chunks in the input - * stream. - * The reason to do this here is that it is *much* faster to parse in reverse. - * And that we can’t hook into `null` to split the line suffix before an EOF. - * To do: figure out if we can make this into a clean utility, or even in core. - * As it will be useful for GFMs literal autolink extension (and maybe even - * tables?) - * - * @type {Resolver} - */ -function resolveAllLineSuffixes(events, context) { - let eventIndex = 0 // Skip first. - - while (++eventIndex <= events.length) { - if ( - (eventIndex === events.length || - events[eventIndex][1].type === 'lineEnding') && - events[eventIndex - 1][1].type === 'data' - ) { - const data = events[eventIndex - 1][1] - const chunks = context.sliceStream(data) - let index = chunks.length - let bufferIndex = -1 - let size = 0 - /** @type {boolean | undefined} */ - let tabs - while (index--) { - const chunk = chunks[index] - if (typeof chunk === 'string') { - bufferIndex = chunk.length - while (chunk.charCodeAt(bufferIndex - 1) === 32) { - size++ - bufferIndex-- - } - if (bufferIndex) break - bufferIndex = -1 - } - // Number - else if (chunk === -2) { - tabs = true - size++ - } else if (chunk === -1) { - // Empty - } else { - // Replacement character, exit. - index++ - break - } - } - if (size) { - const token = { - type: - eventIndex === events.length || tabs || size < 2 - ? 'lineSuffix' - : 'hardBreakTrailing', - start: { - line: data.end.line, - column: data.end.column - size, - offset: data.end.offset - size, - _index: data.start._index + index, - _bufferIndex: index - ? bufferIndex - : data.start._bufferIndex + bufferIndex - }, - end: Object.assign({}, data.end) - } - data.end = Object.assign({}, token.start) - if (data.start.offset === data.end.offset) { - Object.assign(data, token) - } else { - events.splice( - eventIndex, - 0, - ['enter', token, context], - ['exit', token, context] - ) - eventIndex += 2 - } - } - eventIndex++ - } - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js -/** - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * Call all `resolveAll`s. - * - * @param {Array<{resolveAll?: Resolver | undefined}>} constructs - * List of constructs, optionally with `resolveAll`s. - * @param {Array<Event>} events - * List of events. - * @param {TokenizeContext} context - * Context used by `tokenize`. - * @returns {Array<Event>} - * Changed events. - */ -function resolveAll(constructs, events, context) { - /** @type {Array<Resolver>} */ - const called = [] - let index = -1 - - while (++index < constructs.length) { - const resolve = constructs[index].resolveAll - - if (resolve && !called.includes(resolve)) { - events = resolve(events, context) - called.push(resolve) - } - } - - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenType} TokenType - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * @callback Restore - * @returns {void} - * - * @typedef Info - * @property {Restore} restore - * @property {number} from - * - * @callback ReturnHandle - * Handle a successful run. - * @param {Construct} construct - * @param {Info} info - * @returns {void} - */ - - - - -/** - * Create a tokenizer. - * Tokenizers deal with one type of data (e.g., containers, flow, text). - * The parser is the object dealing with it all. - * `initialize` works like other constructs, except that only its `tokenize` - * function is used, in which case it doesn’t receive an `ok` or `nok`. - * `from` can be given to set the point before the first character, although - * when further lines are indented, they must be set with `defineSkip`. - * - * @param {ParseContext} parser - * @param {InitialConstruct} initialize - * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] - * @returns {TokenizeContext} - */ -function createTokenizer(parser, initialize, from) { - /** @type {Point} */ - let point = Object.assign( - from - ? Object.assign({}, from) - : { - line: 1, - column: 1, - offset: 0 - }, - { - _index: 0, - _bufferIndex: -1 - } - ) - /** @type {Record<string, number>} */ - const columnStart = {} - /** @type {Array<Construct>} */ - const resolveAllConstructs = [] - /** @type {Array<Chunk>} */ - let chunks = [] - /** @type {Array<Token>} */ - let stack = [] - /** @type {boolean | undefined} */ - let consumed = true - - /** - * Tools used for tokenizing. - * - * @type {Effects} - */ - const effects = { - consume, - enter, - exit, - attempt: constructFactory(onsuccessfulconstruct), - check: constructFactory(onsuccessfulcheck), - interrupt: constructFactory(onsuccessfulcheck, { - interrupt: true - }) - } - - /** - * State and tools for resolving and serializing. - * - * @type {TokenizeContext} - */ - const context = { - previous: null, - code: null, - containerState: {}, - events: [], - parser, - sliceStream, - sliceSerialize, - now, - defineSkip, - write - } - - /** - * The state function. - * - * @type {State | void} - */ - let state = initialize.tokenize.call(context, effects) - - /** - * Track which character we expect to be consumed, to catch bugs. - * - * @type {Code} - */ - let expectedCode - if (initialize.resolveAll) { - resolveAllConstructs.push(initialize) - } - return context - - /** @type {TokenizeContext['write']} */ - function write(slice) { - chunks = push(chunks, slice) - main() - - // Exit if we’re not done, resolve might change stuff. - if (chunks[chunks.length - 1] !== null) { - return [] - } - addResult(initialize, 0) - - // Otherwise, resolve, and exit. - context.events = resolveAll(resolveAllConstructs, context.events, context) - return context.events - } - - // - // Tools. - // - - /** @type {TokenizeContext['sliceSerialize']} */ - function sliceSerialize(token, expandTabs) { - return serializeChunks(sliceStream(token), expandTabs) - } - - /** @type {TokenizeContext['sliceStream']} */ - function sliceStream(token) { - return sliceChunks(chunks, token) - } - - /** @type {TokenizeContext['now']} */ - function now() { - // This is a hot path, so we clone manually instead of `Object.assign({}, point)` - const {line, column, offset, _index, _bufferIndex} = point - return { - line, - column, - offset, - _index, - _bufferIndex - } - } - - /** @type {TokenizeContext['defineSkip']} */ - function defineSkip(value) { - columnStart[value.line] = value.column - accountForPotentialSkip() - } - - // - // State management. - // - - /** - * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by - * `consume`). - * Here is where we walk through the chunks, which either include strings of - * several characters, or numerical character codes. - * The reason to do this in a loop instead of a call is so the stack can - * drain. - * - * @returns {void} - */ - function main() { - /** @type {number} */ - let chunkIndex - while (point._index < chunks.length) { - const chunk = chunks[point._index] - - // If we’re in a buffer chunk, loop through it. - if (typeof chunk === 'string') { - chunkIndex = point._index - if (point._bufferIndex < 0) { - point._bufferIndex = 0 - } - while ( - point._index === chunkIndex && - point._bufferIndex < chunk.length - ) { - go(chunk.charCodeAt(point._bufferIndex)) - } - } else { - go(chunk) - } - } - } - - /** - * Deal with one code. - * - * @param {Code} code - * @returns {void} - */ - function go(code) { - consumed = undefined - expectedCode = code - state = state(code) - } - - /** @type {Effects['consume']} */ - function consume(code) { - if (markdownLineEnding(code)) { - point.line++ - point.column = 1 - point.offset += code === -3 ? 2 : 1 - accountForPotentialSkip() - } else if (code !== -1) { - point.column++ - point.offset++ - } - - // Not in a string chunk. - if (point._bufferIndex < 0) { - point._index++ - } else { - point._bufferIndex++ - - // At end of string chunk. - // @ts-expect-error Points w/ non-negative `_bufferIndex` reference - // strings. - if (point._bufferIndex === chunks[point._index].length) { - point._bufferIndex = -1 - point._index++ - } - } - - // Expose the previous character. - context.previous = code - - // Mark as consumed. - consumed = true - } - - /** @type {Effects['enter']} */ - function enter(type, fields) { - /** @type {Token} */ - // @ts-expect-error Patch instead of assign required fields to help GC. - const token = fields || {} - token.type = type - token.start = now() - context.events.push(['enter', token, context]) - stack.push(token) - return token - } - - /** @type {Effects['exit']} */ - function exit(type) { - const token = stack.pop() - token.end = now() - context.events.push(['exit', token, context]) - return token - } - - /** - * Use results. - * - * @type {ReturnHandle} - */ - function onsuccessfulconstruct(construct, info) { - addResult(construct, info.from) - } - - /** - * Discard results. - * - * @type {ReturnHandle} - */ - function onsuccessfulcheck(_, info) { - info.restore() - } - - /** - * Factory to attempt/check/interrupt. - * - * @param {ReturnHandle} onreturn - * @param {{interrupt?: boolean | undefined} | undefined} [fields] - */ - function constructFactory(onreturn, fields) { - return hook - - /** - * Handle either an object mapping codes to constructs, a list of - * constructs, or a single construct. - * - * @param {Array<Construct> | Construct | ConstructRecord} constructs - * @param {State} returnState - * @param {State | undefined} [bogusState] - * @returns {State} - */ - function hook(constructs, returnState, bogusState) { - /** @type {Array<Construct>} */ - let listOfConstructs - /** @type {number} */ - let constructIndex - /** @type {Construct} */ - let currentConstruct - /** @type {Info} */ - let info - return Array.isArray(constructs) /* c8 ignore next 1 */ - ? handleListOfConstructs(constructs) - : 'tokenize' in constructs - ? // @ts-expect-error Looks like a construct. - handleListOfConstructs([constructs]) - : handleMapOfConstructs(constructs) - - /** - * Handle a list of construct. - * - * @param {ConstructRecord} map - * @returns {State} - */ - function handleMapOfConstructs(map) { - return start - - /** @type {State} */ - function start(code) { - const def = code !== null && map[code] - const all = code !== null && map.null - const list = [ - // To do: add more extension tests. - /* c8 ignore next 2 */ - ...(Array.isArray(def) ? def : def ? [def] : []), - ...(Array.isArray(all) ? all : all ? [all] : []) - ] - return handleListOfConstructs(list)(code) - } - } - - /** - * Handle a list of construct. - * - * @param {Array<Construct>} list - * @returns {State} - */ - function handleListOfConstructs(list) { - listOfConstructs = list - constructIndex = 0 - if (list.length === 0) { - return bogusState - } - return handleConstruct(list[constructIndex]) - } - - /** - * Handle a single construct. - * - * @param {Construct} construct - * @returns {State} - */ - function handleConstruct(construct) { - return start - - /** @type {State} */ - function start(code) { - // To do: not needed to store if there is no bogus state, probably? - // Currently doesn’t work because `inspect` in document does a check - // w/o a bogus, which doesn’t make sense. But it does seem to help perf - // by not storing. - info = store() - currentConstruct = construct - if (!construct.partial) { - context.currentConstruct = construct - } - - // Always populated by defaults. - - if ( - construct.name && - context.parser.constructs.disable.null.includes(construct.name) - ) { - return nok(code) - } - return construct.tokenize.call( - // If we do have fields, create an object w/ `context` as its - // prototype. - // This allows a “live binding”, which is needed for `interrupt`. - fields ? Object.assign(Object.create(context), fields) : context, - effects, - ok, - nok - )(code) - } - } - - /** @type {State} */ - function ok(code) { - consumed = true - onreturn(currentConstruct, info) - return returnState - } - - /** @type {State} */ - function nok(code) { - consumed = true - info.restore() - if (++constructIndex < listOfConstructs.length) { - return handleConstruct(listOfConstructs[constructIndex]) - } - return bogusState - } - } - } - - /** - * @param {Construct} construct - * @param {number} from - * @returns {void} - */ - function addResult(construct, from) { - if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { - resolveAllConstructs.push(construct) - } - if (construct.resolve) { - splice( - context.events, - from, - context.events.length - from, - construct.resolve(context.events.slice(from), context) - ) - } - if (construct.resolveTo) { - context.events = construct.resolveTo(context.events, context) - } - } - - /** - * Store state. - * - * @returns {Info} - */ - function store() { - const startPoint = now() - const startPrevious = context.previous - const startCurrentConstruct = context.currentConstruct - const startEventsIndex = context.events.length - const startStack = Array.from(stack) - return { - restore, - from: startEventsIndex - } - - /** - * Restore state. - * - * @returns {void} - */ - function restore() { - point = startPoint - context.previous = startPrevious - context.currentConstruct = startCurrentConstruct - context.events.length = startEventsIndex - stack = startStack - accountForPotentialSkip() - } - } - - /** - * Move the current point a bit forward in the line when it’s on a column - * skip. - * - * @returns {void} - */ - function accountForPotentialSkip() { - if (point.line in columnStart && point.column < 2) { - point.column = columnStart[point.line] - point.offset += columnStart[point.line] - 1 - } - } -} - -/** - * Get the chunks from a slice of chunks in the range of a token. - * - * @param {Array<Chunk>} chunks - * @param {Pick<Token, 'end' | 'start'>} token - * @returns {Array<Chunk>} - */ -function sliceChunks(chunks, token) { - const startIndex = token.start._index - const startBufferIndex = token.start._bufferIndex - const endIndex = token.end._index - const endBufferIndex = token.end._bufferIndex - /** @type {Array<Chunk>} */ - let view - if (startIndex === endIndex) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] - } else { - view = chunks.slice(startIndex, endIndex) - if (startBufferIndex > -1) { - const head = view[0] - if (typeof head === 'string') { - view[0] = head.slice(startBufferIndex) - } else { - view.shift() - } - } - if (endBufferIndex > 0) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view.push(chunks[endIndex].slice(0, endBufferIndex)) - } - } - return view -} - -/** - * Get the string value of a slice of chunks. - * - * @param {Array<Chunk>} chunks - * @param {boolean | undefined} [expandTabs=false] - * @returns {string} - */ -function serializeChunks(chunks, expandTabs) { - let index = -1 - /** @type {Array<string>} */ - const result = [] - /** @type {boolean | undefined} */ - let atTab - while (++index < chunks.length) { - const chunk = chunks[index] - /** @type {string} */ - let value - if (typeof chunk === 'string') { - value = chunk - } else - switch (chunk) { - case -5: { - value = '\r' - break - } - case -4: { - value = '\n' - break - } - case -3: { - value = '\r' + '\n' - break - } - case -2: { - value = expandTabs ? ' ' : '\t' - break - } - case -1: { - if (!expandTabs && atTab) continue - value = ' ' - break - } - default: { - // Currently only replacement character. - value = String.fromCharCode(chunk) - } - } - atTab = chunk === -2 - result.push(value) - } - return result.join('') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const thematicBreak = { - name: 'thematicBreak', - tokenize: tokenizeThematicBreak -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeThematicBreak(effects, ok, nok) { - let size = 0 - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of thematic break. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('thematicBreak') - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * After optional whitespace, at marker. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - marker = code - return atBreak(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.enter('thematicBreakSequence') - return sequence(code) - } - if (size >= 3 && (code === null || markdownLineEnding(code))) { - effects.exit('thematicBreak') - return ok(code) - } - return nok(code) - } - - /** - * In sequence. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function sequence(code) { - if (code === marker) { - effects.consume(code) - size++ - return sequence - } - effects.exit('thematicBreakSequence') - return markdownSpace(code) - ? factorySpace(effects, atBreak, 'whitespace')(code) - : atBreak(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - -/** @type {Construct} */ -const list = { - name: 'list', - tokenize: tokenizeListStart, - continuation: { - tokenize: tokenizeListContinuation - }, - exit: tokenizeListEnd -} - -/** @type {Construct} */ -const listItemPrefixWhitespaceConstruct = { - tokenize: tokenizeListItemPrefixWhitespace, - partial: true -} - -/** @type {Construct} */ -const indentConstruct = { - tokenize: tokenizeIndent, - partial: true -} - -// To do: `markdown-rs` parses list items on their own and later stitches them -// together. - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListStart(effects, ok, nok) { - const self = this - const tail = self.events[self.events.length - 1] - let initialSize = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - let size = 0 - return start - - /** @type {State} */ - function start(code) { - const kind = - self.containerState.type || - (code === 42 || code === 43 || code === 45 - ? 'listUnordered' - : 'listOrdered') - if ( - kind === 'listUnordered' - ? !self.containerState.marker || code === self.containerState.marker - : asciiDigit(code) - ) { - if (!self.containerState.type) { - self.containerState.type = kind - effects.enter(kind, { - _container: true - }) - } - if (kind === 'listUnordered') { - effects.enter('listItemPrefix') - return code === 42 || code === 45 - ? effects.check(thematicBreak, nok, atMarker)(code) - : atMarker(code) - } - if (!self.interrupt || code === 49) { - effects.enter('listItemPrefix') - effects.enter('listItemValue') - return inside(code) - } - } - return nok(code) - } - - /** @type {State} */ - function inside(code) { - if (asciiDigit(code) && ++size < 10) { - effects.consume(code) - return inside - } - if ( - (!self.interrupt || size < 2) && - (self.containerState.marker - ? code === self.containerState.marker - : code === 41 || code === 46) - ) { - effects.exit('listItemValue') - return atMarker(code) - } - return nok(code) - } - - /** - * @type {State} - **/ - function atMarker(code) { - effects.enter('listItemMarker') - effects.consume(code) - effects.exit('listItemMarker') - self.containerState.marker = self.containerState.marker || code - return effects.check( - blankLine, - // Can’t be empty when interrupting. - self.interrupt ? nok : onBlank, - effects.attempt( - listItemPrefixWhitespaceConstruct, - endOfPrefix, - otherPrefix - ) - ) - } - - /** @type {State} */ - function onBlank(code) { - self.containerState.initialBlankLine = true - initialSize++ - return endOfPrefix(code) - } - - /** @type {State} */ - function otherPrefix(code) { - if (markdownSpace(code)) { - effects.enter('listItemPrefixWhitespace') - effects.consume(code) - effects.exit('listItemPrefixWhitespace') - return endOfPrefix - } - return nok(code) - } - - /** @type {State} */ - function endOfPrefix(code) { - self.containerState.size = - initialSize + - self.sliceSerialize(effects.exit('listItemPrefix'), true).length - return ok(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListContinuation(effects, ok, nok) { - const self = this - self.containerState._closeFlow = undefined - return effects.check(blankLine, onBlank, notBlank) - - /** @type {State} */ - function onBlank(code) { - self.containerState.furtherBlankLines = - self.containerState.furtherBlankLines || - self.containerState.initialBlankLine - - // We have a blank line. - // Still, try to consume at most the items size. - return factorySpace( - effects, - ok, - 'listItemIndent', - self.containerState.size + 1 - )(code) - } - - /** @type {State} */ - function notBlank(code) { - if (self.containerState.furtherBlankLines || !markdownSpace(code)) { - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return notInCurrentItem(code) - } - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) - } - - /** @type {State} */ - function notInCurrentItem(code) { - // While we do continue, we signal that the flow should be closed. - self.containerState._closeFlow = true - // As we’re closing flow, we’re no longer interrupting. - self.interrupt = undefined - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(list, ok, nok), - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeIndent(effects, ok, nok) { - const self = this - return factorySpace( - effects, - afterPrefix, - 'listItemIndent', - self.containerState.size + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'listItemIndent' && - tail[2].sliceSerialize(tail[1], true).length === self.containerState.size - ? ok(code) - : nok(code) - } -} - -/** - * @type {Exiter} - * @this {TokenizeContext} - */ -function tokenizeListEnd(effects) { - effects.exit(this.containerState.type) -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListItemPrefixWhitespace(effects, ok, nok) { - const self = this - - // Always populated by defaults. - - return factorySpace( - effects, - afterPrefix, - 'listItemPrefixWhitespace', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return !markdownSpace(code) && - tail && - tail[1].type === 'listItemPrefixWhitespace' - ? ok(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blockQuote = { - name: 'blockQuote', - tokenize: tokenizeBlockQuoteStart, - continuation: { - tokenize: tokenizeBlockQuoteContinuation - }, - exit -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteStart(effects, ok, nok) { - const self = this - return start - - /** - * Start of block quote. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 62) { - const state = self.containerState - if (!state.open) { - effects.enter('blockQuote', { - _container: true - }) - state.open = true - } - effects.enter('blockQuotePrefix') - effects.enter('blockQuoteMarker') - effects.consume(code) - effects.exit('blockQuoteMarker') - return after - } - return nok(code) - } - - /** - * After `>`, before optional whitespace. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownSpace(code)) { - effects.enter('blockQuotePrefixWhitespace') - effects.consume(code) - effects.exit('blockQuotePrefixWhitespace') - effects.exit('blockQuotePrefix') - return ok - } - effects.exit('blockQuotePrefix') - return ok(code) - } -} - -/** - * Start of block quote continuation. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteContinuation(effects, ok, nok) { - const self = this - return contStart - - /** - * Start of block quote continuation. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contStart(code) { - if (markdownSpace(code)) { - // Always populated by defaults. - - return factorySpace( - effects, - contBefore, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } - return contBefore(code) - } - - /** - * At `>`, after optional whitespace. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contBefore(code) { - return effects.attempt(blockQuote, ok, nok)(code) - } -} - -/** @type {Exiter} */ -function exit(effects) { - effects.exit('blockQuote') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * <a> - * <a\>b> - * <a b> - * <a)> - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`<a>` or `b`). - * @param {TokenType} literalType - * Type when enclosed (`<a>`). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryDestination( - effects, - ok, - nok, - type, - literalType, - literalMarkerType, - rawType, - stringType, - max -) { - const limit = max || Number.POSITIVE_INFINITY - let balance = 0 - return start - - /** - * Start of destination. - * - * ```markdown - * > | <aa> - * ^ - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 60) { - effects.enter(type) - effects.enter(literalType) - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - return enclosedBefore - } - - // ASCII control, space, closing paren. - if (code === null || code === 32 || code === 41 || asciiControl(code)) { - return nok(code) - } - effects.enter(type) - effects.enter(rawType) - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return raw(code) - } - - /** - * After `<`, at an enclosed destination. - * - * ```markdown - * > | <aa> - * ^ - * ``` - * - * @type {State} - */ - function enclosedBefore(code) { - if (code === 62) { - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - effects.exit(literalType) - effects.exit(type) - return ok - } - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return enclosed(code) - } - - /** - * In enclosed destination. - * - * ```markdown - * > | <aa> - * ^ - * ``` - * - * @type {State} - */ - function enclosed(code) { - if (code === 62) { - effects.exit('chunkString') - effects.exit(stringType) - return enclosedBefore(code) - } - if (code === null || code === 60 || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? enclosedEscape : enclosed - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | <a\*a> - * ^ - * ``` - * - * @type {State} - */ - function enclosedEscape(code) { - if (code === 60 || code === 62 || code === 92) { - effects.consume(code) - return enclosed - } - return enclosed(code) - } - - /** - * In raw destination. - * - * ```markdown - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function raw(code) { - if ( - !balance && - (code === null || code === 41 || markdownLineEndingOrSpace(code)) - ) { - effects.exit('chunkString') - effects.exit(stringType) - effects.exit(rawType) - effects.exit(type) - return ok(code) - } - if (balance < limit && code === 40) { - effects.consume(code) - balance++ - return raw - } - if (code === 41) { - effects.consume(code) - balance-- - return raw - } - - // ASCII control (but *not* `\0`) and space and `(`. - // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it - // doesn’t. - if (code === null || code === 32 || code === 40 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? rawEscape : raw - } - - /** - * After `\`, at special character. - * - * ```markdown - * > | a\*a - * ^ - * ``` - * - * @type {State} - */ - function rawEscape(code) { - if (code === 40 || code === 41 || code === 92) { - effects.consume(code) - return raw - } - return raw(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryLabel(effects, ok, nok, type, markerType, stringType) { - const self = this - let size = 0 - /** @type {boolean} */ - let seen - return start - - /** - * Start of label. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.enter(stringType) - return atBreak - } - - /** - * In label, at something, before something else. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if ( - size > 999 || - code === null || - code === 91 || - (code === 93 && !seen) || - // To do: remove in the future once we’ve switched from - // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, - // which doesn’t need this. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - (code === 94 && - !size && - '_hiddenFootnoteSupport' in self.parser.constructs) - ) { - return nok(code) - } - if (code === 93) { - effects.exit(stringType) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - - // To do: indent? Link chunks and EOLs together? - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return atBreak - } - effects.enter('chunkString', { - contentType: 'string' - }) - return labelInside(code) - } - - /** - * In label, in text. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function labelInside(code) { - if ( - code === null || - code === 91 || - code === 93 || - markdownLineEnding(code) || - size++ > 999 - ) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - if (!seen) seen = !markdownSpace(code) - return code === 92 ? labelEscape : labelInside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | [a\*a] - * ^ - * ``` - * - * @type {State} - */ - function labelEscape(code) { - if (code === 91 || code === 92 || code === 93) { - effects.consume(code) - size++ - return labelInside - } - return labelInside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryTitle(effects, ok, nok, type, markerType, stringType) { - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of title. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 34 || code === 39 || code === 40) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - marker = code === 40 ? 41 : code - return begin - } - return nok(code) - } - - /** - * After opening marker. - * - * This is also used at the closing marker. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function begin(code) { - if (code === marker) { - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - effects.enter(stringType) - return atBreak(code) - } - - /** - * At something, before something else. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.exit(stringType) - return begin(marker) - } - if (code === null) { - return nok(code) - } - - // Note: blank lines can’t exist in content. - if (markdownLineEnding(code)) { - // To do: use `space_or_tab_eol_with_options`, connect. - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, atBreak, 'linePrefix') - } - effects.enter('chunkString', { - contentType: 'string' - }) - return inside(code) - } - - /** - * - * - * @type {State} - */ - function inside(code) { - if (code === marker || code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - return code === 92 ? escape : inside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | "a\*b" - * ^ - * ``` - * - * @type {State} - */ - function escape(code) { - if (code === marker || code === 92) { - effects.consume(code) - return inside - } - return inside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - */ - - - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns - * Start state. - */ -function factoryWhitespace(effects, ok) { - /** @type {boolean} */ - let seen - return start - - /** @type {State} */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - seen = true - return start - } - if (markdownSpace(code)) { - return factorySpace( - effects, - start, - seen ? 'linePrefix' : 'lineSuffix' - )(code) - } - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -function normalizeIdentifier(value) { - return ( - value - // Collapse markdown whitespace. - .replace(/[\t\n\r ]+/g, ' ') - // Trim. - .replace(/^ | $/g, '') - // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase() - .toUpperCase() - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - -/** @type {Construct} */ -const definition = { - name: 'definition', - tokenize: tokenizeDefinition -} - -/** @type {Construct} */ -const titleBefore = { - tokenize: tokenizeTitleBefore, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeDefinition(effects, ok, nok) { - const self = this - /** @type {string} */ - let identifier - return start - - /** - * At start of a definition. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Do not interrupt paragraphs (but do follow definitions). - // To do: do `interrupt` the way `markdown-rs` does. - // To do: parse whitespace the way `markdown-rs` does. - effects.enter('definition') - return before(code) - } - - /** - * After optional whitespace, at `[`. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - // To do: parse whitespace the way `markdown-rs` does. - - return factoryLabel.call( - self, - effects, - labelAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionLabel', - 'definitionLabelMarker', - 'definitionLabelString' - )(code) - } - - /** - * After label. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function labelAfter(code) { - identifier = normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - if (code === 58) { - effects.enter('definitionMarker') - effects.consume(code) - effects.exit('definitionMarker') - return markerAfter - } - return nok(code) - } - - /** - * After marker. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function markerAfter(code) { - // Note: whitespace is optional. - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, destinationBefore)(code) - : destinationBefore(code) - } - - /** - * Before destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationBefore(code) { - return factoryDestination( - effects, - destinationAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionDestination', - 'definitionDestinationLiteral', - 'definitionDestinationLiteralMarker', - 'definitionDestinationRaw', - 'definitionDestinationString' - )(code) - } - - /** - * After destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationAfter(code) { - return effects.attempt(titleBefore, after, after)(code) - } - - /** - * After definition. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return markdownSpace(code) - ? factorySpace(effects, afterWhitespace, 'whitespace')(code) - : afterWhitespace(code) - } - - /** - * After definition, after optional whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function afterWhitespace(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('definition') - - // Note: we don’t care about uniqueness. - // It’s likely that that doesn’t happen very frequently. - // It is more likely that it wastes precious time. - self.parser.defined.push(identifier) - - // To do: `markdown-rs` interrupt. - // // You’d be interrupting. - // tokenizer.interrupt = true - return ok(code) - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeTitleBefore(effects, ok, nok) { - return titleBefore - - /** - * After destination, at whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, beforeMarker)(code) - : nok(code) - } - - /** - * At title. - * - * ```markdown - * | [a]: b - * > | "c" - * ^ - * ``` - * - * @type {State} - */ - function beforeMarker(code) { - return factoryTitle( - effects, - titleAfter, - nok, - 'definitionTitle', - 'definitionTitleMarker', - 'definitionTitleString' - )(code) - } - - /** - * After title. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfter(code) { - return markdownSpace(code) - ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) - : titleAfterOptionalWhitespace(code) - } - - /** - * After title, after optional whitespace. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfterOptionalWhitespace(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const codeIndented = { - name: 'codeIndented', - tokenize: tokenizeCodeIndented -} - -/** @type {Construct} */ -const furtherStart = { - tokenize: tokenizeFurtherStart, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeIndented(effects, ok, nok) { - const self = this - return start - - /** - * Start of code (indented). - * - * > **Parsing note**: it is not needed to check if this first line is a - * > filled line (that it has a non-whitespace character), because blank lines - * > are parsed already, so we never run into that. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: manually check if interrupting like `markdown-rs`. - - effects.enter('codeIndented') - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? atBreak(code) - : nok(code) - } - - /** - * At a break. - * - * ```markdown - * > | aaa - * ^ ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === null) { - return after(code) - } - if (markdownLineEnding(code)) { - return effects.attempt(furtherStart, atBreak, after)(code) - } - effects.enter('codeFlowValue') - return inside(code) - } - - /** - * In code content. - * - * ```markdown - * > | aaa - * ^^^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return atBreak(code) - } - effects.consume(code) - return inside - } - - /** @type {State} */ - function after(code) { - effects.exit('codeIndented') - // To do: allow interrupting like `markdown-rs`. - // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeFurtherStart(effects, ok, nok) { - const self = this - return furtherStart - - /** - * At eol, trying to parse another indent. - * - * ```markdown - * > | aaa - * ^ - * | bbb - * ``` - * - * @type {State} - */ - function furtherStart(code) { - // To do: improve `lazy` / `pierce` handling. - // If this is a lazy line, it can’t be code. - if (self.parser.lazy[self.now().line]) { - return nok(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return furtherStart - } - - // To do: the code here in `micromark-js` is a bit different from - // `markdown-rs` because there it can attempt spaces. - // We can’t yet. - // - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? ok(code) - : markdownLineEnding(code) - ? furtherStart(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const headingAtx = { - name: 'headingAtx', - tokenize: tokenizeHeadingAtx, - resolve: resolveHeadingAtx -} - -/** @type {Resolver} */ -function resolveHeadingAtx(events, context) { - let contentEnd = events.length - 2 - let contentStart = 3 - /** @type {Token} */ - let content - /** @type {Token} */ - let text - - // Prefix whitespace, part of the opening. - if (events[contentStart][1].type === 'whitespace') { - contentStart += 2 - } - - // Suffix whitespace, part of the closing. - if ( - contentEnd - 2 > contentStart && - events[contentEnd][1].type === 'whitespace' - ) { - contentEnd -= 2 - } - if ( - events[contentEnd][1].type === 'atxHeadingSequence' && - (contentStart === contentEnd - 1 || - (contentEnd - 4 > contentStart && - events[contentEnd - 2][1].type === 'whitespace')) - ) { - contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 - } - if (contentEnd > contentStart) { - content = { - type: 'atxHeadingText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end - } - text = { - type: 'chunkText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end, - contentType: 'text' - } - splice(events, contentStart, contentEnd - contentStart + 1, [ - ['enter', content, context], - ['enter', text, context], - ['exit', text, context], - ['exit', content, context] - ]) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHeadingAtx(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of a heading (atx). - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - effects.enter('atxHeading') - return before(code) - } - - /** - * After optional whitespace, at `#`. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('atxHeadingSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 35 && size++ < 6) { - effects.consume(code) - return sequenceOpen - } - - // Always at least one `#`. - if (code === null || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingSequence') - return atBreak(code) - } - return nok(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === 35) { - effects.enter('atxHeadingSequence') - return sequenceFurther(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('atxHeading') - // To do: interrupt like `markdown-rs`. - // // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } - if (markdownSpace(code)) { - return factorySpace(effects, atBreak, 'whitespace')(code) - } - - // To do: generate `data` tokens, add the `text` token later. - // Needs edit map, see: `markdown.rs`. - effects.enter('atxHeadingText') - return data(code) - } - - /** - * In further sequence (after whitespace). - * - * Could be normal “visible” hashes in the heading or a final sequence. - * - * ```markdown - * > | ## aa ## - * ^ - * ``` - * - * @type {State} - */ - function sequenceFurther(code) { - if (code === 35) { - effects.consume(code) - return sequenceFurther - } - effects.exit('atxHeadingSequence') - return atBreak(code) - } - - /** - * In text. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingText') - return atBreak(code) - } - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const setextUnderline = { - name: 'setextUnderline', - tokenize: tokenizeSetextUnderline, - resolveTo: resolveToSetextUnderline -} - -/** @type {Resolver} */ -function resolveToSetextUnderline(events, context) { - // To do: resolve like `markdown-rs`. - let index = events.length - /** @type {number | undefined} */ - let content - /** @type {number | undefined} */ - let text - /** @type {number | undefined} */ - let definition - - // Find the opening of the content. - // It’ll always exist: we don’t tokenize if it isn’t there. - while (index--) { - if (events[index][0] === 'enter') { - if (events[index][1].type === 'content') { - content = index - break - } - if (events[index][1].type === 'paragraph') { - text = index - } - } - // Exit - else { - if (events[index][1].type === 'content') { - // Remove the content end (if needed we’ll add it later) - events.splice(index, 1) - } - if (!definition && events[index][1].type === 'definition') { - definition = index - } - } - } - const heading = { - type: 'setextHeading', - start: Object.assign({}, events[text][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - - // Change the paragraph to setext heading text. - events[text][1].type = 'setextHeadingText' - - // If we have definitions in the content, we’ll keep on having content, - // but we need move it. - if (definition) { - events.splice(text, 0, ['enter', heading, context]) - events.splice(definition + 1, 0, ['exit', events[content][1], context]) - events[content][1].end = Object.assign({}, events[definition][1].end) - } else { - events[content][1] = heading - } - - // Add the heading exit at the end. - events.push(['exit', heading, context]) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeSetextUnderline(effects, ok, nok) { - const self = this - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * At start of heading (setext) underline. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - let index = self.events.length - /** @type {boolean | undefined} */ - let paragraph - // Find an opening. - while (index--) { - // Skip enter/exit of line ending, line prefix, and content. - // We can now either have a definition or a paragraph. - if ( - self.events[index][1].type !== 'lineEnding' && - self.events[index][1].type !== 'linePrefix' && - self.events[index][1].type !== 'content' - ) { - paragraph = self.events[index][1].type === 'paragraph' - break - } - } - - // To do: handle lazy/pierce like `markdown-rs`. - // To do: parse indent like `markdown-rs`. - if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { - effects.enter('setextHeadingLine') - marker = code - return before(code) - } - return nok(code) - } - - /** - * After optional whitespace, at `-` or `=`. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('setextHeadingLineSequence') - return inside(code) - } - - /** - * In sequence. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - effects.exit('setextHeadingLineSequence') - return markdownSpace(code) - ? factorySpace(effects, after, 'lineSuffix')(code) - : after(code) - } - - /** - * After sequence, after optional whitespace. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('setextHeadingLine') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js -/** - * List of lowercase HTML “block” tag names. - * - * The list, when parsing HTML (flow), results in more relaxed rules (condition - * 6). - * Because they are known blocks, the HTML-like syntax doesn’t have to be - * strictly parsed. - * For tag names not in this list, a more strict algorithm (condition 7) is used - * to detect whether the HTML-like syntax is seen as HTML (flow) or not. - * - * This is copied from: - * <https://spec.commonmark.org/0.30/#html-blocks>. - * - * > 👉 **Note**: `search` was added in `CommonMark@0.31`. - */ -const htmlBlockNames = [ - 'address', - 'article', - 'aside', - 'base', - 'basefont', - 'blockquote', - 'body', - 'caption', - 'center', - 'col', - 'colgroup', - 'dd', - 'details', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'frame', - 'frameset', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hr', - 'html', - 'iframe', - 'legend', - 'li', - 'link', - 'main', - 'menu', - 'menuitem', - 'nav', - 'noframes', - 'ol', - 'optgroup', - 'option', - 'p', - 'param', - 'search', - 'section', - 'summary', - 'table', - 'tbody', - 'td', - 'tfoot', - 'th', - 'thead', - 'title', - 'tr', - 'track', - 'ul' -] - -/** - * List of lowercase HTML “raw” tag names. - * - * The list, when parsing HTML (flow), results in HTML that can include lines - * without exiting, until a closing tag also in this list is found (condition - * 1). - * - * This module is copied from: - * <https://spec.commonmark.org/0.30/#html-blocks>. - * - * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - */ -const htmlRawNames = ['pre', 'script', 'style', 'textarea'] - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - -/** @type {Construct} */ -const htmlFlow = { - name: 'htmlFlow', - tokenize: tokenizeHtmlFlow, - resolveTo: resolveToHtmlFlow, - concrete: true -} - -/** @type {Construct} */ -const blankLineBefore = { - tokenize: tokenizeBlankLineBefore, - partial: true -} -const nonLazyContinuationStart = { - tokenize: tokenizeNonLazyContinuationStart, - partial: true -} - -/** @type {Resolver} */ -function resolveToHtmlFlow(events) { - let index = events.length - while (index--) { - if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { - break - } - } - if (index > 1 && events[index - 2][1].type === 'linePrefix') { - // Add the prefix start to the HTML token. - events[index][1].start = events[index - 2][1].start - // Add the prefix start to the HTML line token. - events[index + 1][1].start = events[index - 2][1].start - // Remove the line prefix. - events.splice(index - 2, 2) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlFlow(effects, ok, nok) { - const self = this - /** @type {number} */ - let marker - /** @type {boolean} */ - let closingTag - /** @type {string} */ - let buffer - /** @type {number} */ - let index - /** @type {Code} */ - let markerB - return start - - /** - * Start of HTML (flow). - * - * ```markdown - * > | <x /> - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * At `<`, after optional whitespace. - * - * ```markdown - * > | <x /> - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('htmlFlow') - effects.enter('htmlFlowData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | <x /> - * ^ - * > | <!doctype> - * ^ - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - closingTag = true - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - marker = 3 - // To do: - // tokenizer.concrete = true - // To do: use `markdown-rs` style interrupt. - // While we’re in an instruction instead of a declaration, we’re on a `?` - // right now, so we do need to search for `>`, similar to declarations. - return self.interrupt ? ok : continuationDeclarationInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After `<!`, at declaration, comment, or CDATA. - * - * ```markdown - * > | <!doctype> - * ^ - * > | <!--xxx--> - * ^ - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - marker = 2 - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - marker = 5 - index = 0 - return cdataOpenInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - marker = 4 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After `<!-`, inside a comment, at another `-`. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After `<![`, inside CDATA, expecting `CDATA[`. - * - * ```markdown - * > | <![CDATA[>&<]]> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - if (index === value.length) { - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return cdataOpenInside - } - return nok(code) - } - - /** - * After `</`, in closing tag, at tag name. - * - * ```markdown - * > | </x> - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * In tag name. - * - * ```markdown - * > | <ab> - * ^^ - * > | </ab> - * ^^ - * ``` - * - * @type {State} - */ - function tagName(code) { - if ( - code === null || - code === 47 || - code === 62 || - markdownLineEndingOrSpace(code) - ) { - const slash = code === 47 - const name = buffer.toLowerCase() - if (!slash && !closingTag && htmlRawNames.includes(name)) { - marker = 1 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - if (htmlBlockNames.includes(buffer.toLowerCase())) { - marker = 6 - if (slash) { - effects.consume(code) - return basicSelfClosing - } - - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - marker = 7 - // Do not support complete HTML when interrupting. - return self.interrupt && !self.parser.lazy[self.now().line] - ? nok(code) - : closingTag - ? completeClosingTagAfter(code) - : completeAttributeNameBefore(code) - } - - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - buffer += String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After closing slash of a basic tag name. - * - * ```markdown - * > | <div/> - * ^ - * ``` - * - * @type {State} - */ - function basicSelfClosing(code) { - if (code === 62) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return nok(code) - } - - /** - * After closing slash of a complete tag name. - * - * ```markdown - * > | <x/> - * ^ - * ``` - * - * @type {State} - */ - function completeClosingTagAfter(code) { - if (markdownSpace(code)) { - effects.consume(code) - return completeClosingTagAfter - } - return completeEnd(code) - } - - /** - * At an attribute name. - * - * At first, this state is used after a complete tag name, after whitespace, - * where it expects optional attributes or the end of the tag. - * It is also reused after attributes, when expecting more optional - * attributes. - * - * ```markdown - * > | <a /> - * ^ - * > | <a :b> - * ^ - * > | <a _b> - * ^ - * > | <a b> - * ^ - * > | <a > - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameBefore(code) { - if (code === 47) { - effects.consume(code) - return completeEnd - } - - // ASCII alphanumerical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return completeAttributeName - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameBefore - } - return completeEnd(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | <a :b> - * ^ - * > | <a _b> - * ^ - * > | <a b> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeName(code) { - // ASCII alphanumerical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return completeAttributeName - } - return completeAttributeNameAfter(code) - } - - /** - * After attribute name, at an optional initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | <a b> - * ^ - * > | <a b=c> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return completeAttributeValueBefore - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameAfter - } - return completeAttributeNameBefore(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | <a b=c> - * ^ - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - markerB = code - return completeAttributeValueQuoted - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeValueBefore - } - return completeAttributeValueUnquoted(code) - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | <a b="c"> - * ^ - * > | <a b='c'> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuoted(code) { - if (code === markerB) { - effects.consume(code) - markerB = null - return completeAttributeValueQuotedAfter - } - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return completeAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | <a b=c> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 47 || - code === 60 || - code === 61 || - code === 62 || - code === 96 || - markdownLineEndingOrSpace(code) - ) { - return completeAttributeNameAfter(code) - } - effects.consume(code) - return completeAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the - * end of the tag. - * - * ```markdown - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownSpace(code)) { - return completeAttributeNameBefore(code) - } - return nok(code) - } - - /** - * In certain circumstances of a complete tag where only an `>` is allowed. - * - * ```markdown - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeEnd(code) { - if (code === 62) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * After `>` in a complete tag. - * - * ```markdown - * > | <x> - * ^ - * ``` - * - * @type {State} - */ - function completeAfter(code) { - if (code === null || markdownLineEnding(code)) { - // // Do not form containers. - // tokenizer.concrete = true - return continuation(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * In continuation of any HTML kind. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function continuation(code) { - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationCommentInside - } - if (code === 60 && marker === 1) { - effects.consume(code) - return continuationRawTagOpen - } - if (code === 62 && marker === 4) { - effects.consume(code) - return continuationClose - } - if (code === 63 && marker === 3) { - effects.consume(code) - return continuationDeclarationInside - } - if (code === 93 && marker === 5) { - effects.consume(code) - return continuationCdataInside - } - if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { - effects.exit('htmlFlowData') - return effects.check( - blankLineBefore, - continuationAfter, - continuationStart - )(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationStart(code) - } - effects.consume(code) - return continuation - } - - /** - * In continuation, at eol. - * - * ```markdown - * > | <x> - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStart(code) { - return effects.check( - nonLazyContinuationStart, - continuationStartNonLazy, - continuationAfter - )(code) - } - - /** - * In continuation, at eol, before non-lazy content. - * - * ```markdown - * > | <x> - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStartNonLazy(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return continuationBefore - } - - /** - * In continuation, before non-lazy content. - * - * ```markdown - * | <x> - * > | asd - * ^ - * ``` - * - * @type {State} - */ - function continuationBefore(code) { - if (code === null || markdownLineEnding(code)) { - return continuationStart(code) - } - effects.enter('htmlFlowData') - return continuation(code) - } - - /** - * In comment continuation, after one `-`, expecting another. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function continuationCommentInside(code) { - if (code === 45) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In raw continuation, after `<`, at `/`. - * - * ```markdown - * > | <script>console.log(1)</script> - * ^ - * ``` - * - * @type {State} - */ - function continuationRawTagOpen(code) { - if (code === 47) { - effects.consume(code) - buffer = '' - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In raw continuation, after `</`, in a raw tag name. - * - * ```markdown - * > | <script>console.log(1)</script> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function continuationRawEndTag(code) { - if (code === 62) { - const name = buffer.toLowerCase() - if (htmlRawNames.includes(name)) { - effects.consume(code) - return continuationClose - } - return continuation(code) - } - if (asciiAlpha(code) && buffer.length < 8) { - effects.consume(code) - // @ts-expect-error: not null. - buffer += String.fromCharCode(code) - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In cdata continuation, after `]`, expecting `]>`. - * - * ```markdown - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationCdataInside(code) { - if (code === 93) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In declaration or instruction continuation, at `>`. - * - * ```markdown - * > | <!--> - * ^ - * > | <?> - * ^ - * > | <!q> - * ^ - * > | <!--ab--> - * ^ - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationDeclarationInside(code) { - if (code === 62) { - effects.consume(code) - return continuationClose - } - - // More dashes. - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In closed continuation: everything we get until the eol/eof is part of it. - * - * ```markdown - * > | <!doctype> - * ^ - * ``` - * - * @type {State} - */ - function continuationClose(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationAfter(code) - } - effects.consume(code) - return continuationClose - } - - /** - * Done. - * - * ```markdown - * > | <!doctype> - * ^ - * ``` - * - * @type {State} - */ - function continuationAfter(code) { - effects.exit('htmlFlow') - // // Feel free to interrupt. - // tokenizer.interrupt = false - // // No longer concrete. - // tokenizer.concrete = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuationStart(effects, ok, nok) { - const self = this - return start - - /** - * At eol, before continuation. - * - * ```markdown - * > | * ```js - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return after - } - return nok(code) - } - - /** - * A continuation. - * - * ```markdown - * | * ```js - * > | b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLineBefore(effects, ok, nok) { - return start - - /** - * Before eol, expecting blank line. - * - * ```markdown - * > | <div> - * ^ - * | - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return effects.attempt(blankLine, ok, nok) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const nonLazyContinuation = { - tokenize: tokenizeNonLazyContinuation, - partial: true -} - -/** @type {Construct} */ -const codeFenced = { - name: 'codeFenced', - tokenize: tokenizeCodeFenced, - concrete: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeFenced(effects, ok, nok) { - const self = this - /** @type {Construct} */ - const closeStart = { - tokenize: tokenizeCloseStart, - partial: true - } - let initialPrefix = 0 - let sizeOpen = 0 - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of code. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse whitespace like `markdown-rs`. - return beforeSequenceOpen(code) - } - - /** - * In opening fence, after prefix, at sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeSequenceOpen(code) { - const tail = self.events[self.events.length - 1] - initialPrefix = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - marker = code - effects.enter('codeFenced') - effects.enter('codeFencedFence') - effects.enter('codeFencedFenceSequence') - return sequenceOpen(code) - } - - /** - * In opening fence sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === marker) { - sizeOpen++ - effects.consume(code) - return sequenceOpen - } - if (sizeOpen < 3) { - return nok(code) - } - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, infoBefore, 'whitespace')(code) - : infoBefore(code) - } - - /** - * In opening fence, after the sequence (and optional whitespace), before info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function infoBefore(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return self.interrupt - ? ok(code) - : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFencedFenceInfo') - effects.enter('chunkString', { - contentType: 'string' - }) - return info(code) - } - - /** - * In info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function info(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return infoBefore(code) - } - if (markdownSpace(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return factorySpace(effects, metaBefore, 'whitespace')(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return info - } - - /** - * In opening fence, after info and whitespace, before meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function metaBefore(code) { - if (code === null || markdownLineEnding(code)) { - return infoBefore(code) - } - effects.enter('codeFencedFenceMeta') - effects.enter('chunkString', { - contentType: 'string' - }) - return meta(code) - } - - /** - * In meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function meta(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceMeta') - return infoBefore(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return meta - } - - /** - * At eol/eof in code, before a non-lazy closing fence or content. - * - * ```markdown - * > | ~~~js - * ^ - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function atNonLazyBreak(code) { - return effects.attempt(closeStart, after, contentBefore)(code) - } - - /** - * Before code content, not a closing fence, at eol. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return contentStart - } - - /** - * Before code content, not a closing fence. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentStart(code) { - return initialPrefix > 0 && markdownSpace(code) - ? factorySpace( - effects, - beforeContentChunk, - 'linePrefix', - initialPrefix + 1 - )(code) - : beforeContentChunk(code) - } - - /** - * Before code content, after optional prefix. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeContentChunk(code) { - if (code === null || markdownLineEnding(code)) { - return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFlowValue') - return contentChunk(code) - } - - /** - * In code content. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^^^^^^^^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentChunk(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return beforeContentChunk(code) - } - effects.consume(code) - return contentChunk - } - - /** - * After code. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - effects.exit('codeFenced') - return ok(code) - } - - /** - * @this {TokenizeContext} - * @type {Tokenizer} - */ - function tokenizeCloseStart(effects, ok, nok) { - let size = 0 - return startBefore - - /** - * - * - * @type {State} - */ - function startBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return start - } - - /** - * Before closing fence, at optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Always populated by defaults. - - // To do: `enter` here or in next state? - effects.enter('codeFencedFence') - return markdownSpace(code) - ? factorySpace( - effects, - beforeSequenceClose, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : beforeSequenceClose(code) - } - - /** - * In closing fence, after optional whitespace, at sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function beforeSequenceClose(code) { - if (code === marker) { - effects.enter('codeFencedFenceSequence') - return sequenceClose(code) - } - return nok(code) - } - - /** - * In closing fence sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - if (code === marker) { - size++ - effects.consume(code) - return sequenceClose - } - if (size >= sizeOpen) { - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) - : sequenceCloseAfter(code) - } - return nok(code) - } - - /** - * After closing fence sequence, after optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceCloseAfter(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return ok(code) - } - return nok(code) - } - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuation(effects, ok, nok) { - const self = this - return start - - /** - * - * - * @type {State} - */ - function start(code) { - if (code === null) { - return nok(code) - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineStart - } - - /** - * - * - * @type {State} - */ - function lineStart(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/character-entities/index.js -/** - * Map of named character references. - * - * @type {Record<string, string>} - */ -const characterEntities = { - AElig: 'Æ', - AMP: '&', - Aacute: 'Á', - Abreve: 'Ă', - Acirc: 'Â', - Acy: 'А', - Afr: '𝔄', - Agrave: 'À', - Alpha: 'Α', - Amacr: 'Ā', - And: '⩓', - Aogon: 'Ą', - Aopf: '𝔸', - ApplyFunction: '⁡', - Aring: 'Å', - Ascr: '𝒜', - Assign: '≔', - Atilde: 'Ã', - Auml: 'Ä', - Backslash: '∖', - Barv: '⫧', - Barwed: '⌆', - Bcy: 'Б', - Because: '∵', - Bernoullis: 'ℬ', - Beta: 'Β', - Bfr: '𝔅', - Bopf: '𝔹', - Breve: '˘', - Bscr: 'ℬ', - Bumpeq: '≎', - CHcy: 'Ч', - COPY: '©', - Cacute: 'Ć', - Cap: '⋒', - CapitalDifferentialD: 'ⅅ', - Cayleys: 'ℭ', - Ccaron: 'Č', - Ccedil: 'Ç', - Ccirc: 'Ĉ', - Cconint: '∰', - Cdot: 'Ċ', - Cedilla: '¸', - CenterDot: '·', - Cfr: 'ℭ', - Chi: 'Χ', - CircleDot: '⊙', - CircleMinus: '⊖', - CirclePlus: '⊕', - CircleTimes: '⊗', - ClockwiseContourIntegral: '∲', - CloseCurlyDoubleQuote: '”', - CloseCurlyQuote: '’', - Colon: '∷', - Colone: '⩴', - Congruent: '≡', - Conint: '∯', - ContourIntegral: '∮', - Copf: 'ℂ', - Coproduct: '∐', - CounterClockwiseContourIntegral: '∳', - Cross: '⨯', - Cscr: '𝒞', - Cup: '⋓', - CupCap: '≍', - DD: 'ⅅ', - DDotrahd: '⤑', - DJcy: 'Ђ', - DScy: 'Ѕ', - DZcy: 'Џ', - Dagger: '‡', - Darr: '↡', - Dashv: '⫤', - Dcaron: 'Ď', - Dcy: 'Д', - Del: '∇', - Delta: 'Δ', - Dfr: '𝔇', - DiacriticalAcute: '´', - DiacriticalDot: '˙', - DiacriticalDoubleAcute: '˝', - DiacriticalGrave: '`', - DiacriticalTilde: '˜', - Diamond: '⋄', - DifferentialD: 'ⅆ', - Dopf: '𝔻', - Dot: '¨', - DotDot: '⃜', - DotEqual: '≐', - DoubleContourIntegral: '∯', - DoubleDot: '¨', - DoubleDownArrow: '⇓', - DoubleLeftArrow: '⇐', - DoubleLeftRightArrow: '⇔', - DoubleLeftTee: '⫤', - DoubleLongLeftArrow: '⟸', - DoubleLongLeftRightArrow: '⟺', - DoubleLongRightArrow: '⟹', - DoubleRightArrow: '⇒', - DoubleRightTee: '⊨', - DoubleUpArrow: '⇑', - DoubleUpDownArrow: '⇕', - DoubleVerticalBar: '∥', - DownArrow: '↓', - DownArrowBar: '⤓', - DownArrowUpArrow: '⇵', - DownBreve: '̑', - DownLeftRightVector: '⥐', - DownLeftTeeVector: '⥞', - DownLeftVector: '↽', - DownLeftVectorBar: '⥖', - DownRightTeeVector: '⥟', - DownRightVector: '⇁', - DownRightVectorBar: '⥗', - DownTee: '⊤', - DownTeeArrow: '↧', - Downarrow: '⇓', - Dscr: '𝒟', - Dstrok: 'Đ', - ENG: 'Ŋ', - ETH: 'Ð', - Eacute: 'É', - Ecaron: 'Ě', - Ecirc: 'Ê', - Ecy: 'Э', - Edot: 'Ė', - Efr: '𝔈', - Egrave: 'È', - Element: '∈', - Emacr: 'Ē', - EmptySmallSquare: '◻', - EmptyVerySmallSquare: '▫', - Eogon: 'Ę', - Eopf: '𝔼', - Epsilon: 'Ε', - Equal: '⩵', - EqualTilde: '≂', - Equilibrium: '⇌', - Escr: 'ℰ', - Esim: '⩳', - Eta: 'Η', - Euml: 'Ë', - Exists: '∃', - ExponentialE: 'ⅇ', - Fcy: 'Ф', - Ffr: '𝔉', - FilledSmallSquare: '◼', - FilledVerySmallSquare: '▪', - Fopf: '𝔽', - ForAll: '∀', - Fouriertrf: 'ℱ', - Fscr: 'ℱ', - GJcy: 'Ѓ', - GT: '>', - Gamma: 'Γ', - Gammad: 'Ϝ', - Gbreve: 'Ğ', - Gcedil: 'Ģ', - Gcirc: 'Ĝ', - Gcy: 'Г', - Gdot: 'Ġ', - Gfr: '𝔊', - Gg: '⋙', - Gopf: '𝔾', - GreaterEqual: '≥', - GreaterEqualLess: '⋛', - GreaterFullEqual: '≧', - GreaterGreater: '⪢', - GreaterLess: '≷', - GreaterSlantEqual: '⩾', - GreaterTilde: '≳', - Gscr: '𝒢', - Gt: '≫', - HARDcy: 'Ъ', - Hacek: 'ˇ', - Hat: '^', - Hcirc: 'Ĥ', - Hfr: 'ℌ', - HilbertSpace: 'ℋ', - Hopf: 'ℍ', - HorizontalLine: '─', - Hscr: 'ℋ', - Hstrok: 'Ħ', - HumpDownHump: '≎', - HumpEqual: '≏', - IEcy: 'Е', - IJlig: 'IJ', - IOcy: 'Ё', - Iacute: 'Í', - Icirc: 'Î', - Icy: 'И', - Idot: 'İ', - Ifr: 'ℑ', - Igrave: 'Ì', - Im: 'ℑ', - Imacr: 'Ī', - ImaginaryI: 'ⅈ', - Implies: '⇒', - Int: '∬', - Integral: '∫', - Intersection: '⋂', - InvisibleComma: '⁣', - InvisibleTimes: '⁢', - Iogon: 'Į', - Iopf: '𝕀', - Iota: 'Ι', - Iscr: 'ℐ', - Itilde: 'Ĩ', - Iukcy: 'І', - Iuml: 'Ï', - Jcirc: 'Ĵ', - Jcy: 'Й', - Jfr: '𝔍', - Jopf: '𝕁', - Jscr: '𝒥', - Jsercy: 'Ј', - Jukcy: 'Є', - KHcy: 'Х', - KJcy: 'Ќ', - Kappa: 'Κ', - Kcedil: 'Ķ', - Kcy: 'К', - Kfr: '𝔎', - Kopf: '𝕂', - Kscr: '𝒦', - LJcy: 'Љ', - LT: '<', - Lacute: 'Ĺ', - Lambda: 'Λ', - Lang: '⟪', - Laplacetrf: 'ℒ', - Larr: '↞', - Lcaron: 'Ľ', - Lcedil: 'Ļ', - Lcy: 'Л', - LeftAngleBracket: '⟨', - LeftArrow: '←', - LeftArrowBar: '⇤', - LeftArrowRightArrow: '⇆', - LeftCeiling: '⌈', - LeftDoubleBracket: '⟦', - LeftDownTeeVector: '⥡', - LeftDownVector: '⇃', - LeftDownVectorBar: '⥙', - LeftFloor: '⌊', - LeftRightArrow: '↔', - LeftRightVector: '⥎', - LeftTee: '⊣', - LeftTeeArrow: '↤', - LeftTeeVector: '⥚', - LeftTriangle: '⊲', - LeftTriangleBar: '⧏', - LeftTriangleEqual: '⊴', - LeftUpDownVector: '⥑', - LeftUpTeeVector: '⥠', - LeftUpVector: '↿', - LeftUpVectorBar: '⥘', - LeftVector: '↼', - LeftVectorBar: '⥒', - Leftarrow: '⇐', - Leftrightarrow: '⇔', - LessEqualGreater: '⋚', - LessFullEqual: '≦', - LessGreater: '≶', - LessLess: '⪡', - LessSlantEqual: '⩽', - LessTilde: '≲', - Lfr: '𝔏', - Ll: '⋘', - Lleftarrow: '⇚', - Lmidot: 'Ŀ', - LongLeftArrow: '⟵', - LongLeftRightArrow: '⟷', - LongRightArrow: '⟶', - Longleftarrow: '⟸', - Longleftrightarrow: '⟺', - Longrightarrow: '⟹', - Lopf: '𝕃', - LowerLeftArrow: '↙', - LowerRightArrow: '↘', - Lscr: 'ℒ', - Lsh: '↰', - Lstrok: 'Ł', - Lt: '≪', - Map: '⤅', - Mcy: 'М', - MediumSpace: ' ', - Mellintrf: 'ℳ', - Mfr: '𝔐', - MinusPlus: '∓', - Mopf: '𝕄', - Mscr: 'ℳ', - Mu: 'Μ', - NJcy: 'Њ', - Nacute: 'Ń', - Ncaron: 'Ň', - Ncedil: 'Ņ', - Ncy: 'Н', - NegativeMediumSpace: '​', - NegativeThickSpace: '​', - NegativeThinSpace: '​', - NegativeVeryThinSpace: '​', - NestedGreaterGreater: '≫', - NestedLessLess: '≪', - NewLine: '\n', - Nfr: '𝔑', - NoBreak: '⁠', - NonBreakingSpace: ' ', - Nopf: 'ℕ', - Not: '⫬', - NotCongruent: '≢', - NotCupCap: '≭', - NotDoubleVerticalBar: '∦', - NotElement: '∉', - NotEqual: '≠', - NotEqualTilde: '≂̸', - NotExists: '∄', - NotGreater: '≯', - NotGreaterEqual: '≱', - NotGreaterFullEqual: '≧̸', - NotGreaterGreater: '≫̸', - NotGreaterLess: '≹', - NotGreaterSlantEqual: '⩾̸', - NotGreaterTilde: '≵', - NotHumpDownHump: '≎̸', - NotHumpEqual: '≏̸', - NotLeftTriangle: '⋪', - NotLeftTriangleBar: '⧏̸', - NotLeftTriangleEqual: '⋬', - NotLess: '≮', - NotLessEqual: '≰', - NotLessGreater: '≸', - NotLessLess: '≪̸', - NotLessSlantEqual: '⩽̸', - NotLessTilde: '≴', - NotNestedGreaterGreater: '⪢̸', - NotNestedLessLess: '⪡̸', - NotPrecedes: '⊀', - NotPrecedesEqual: '⪯̸', - NotPrecedesSlantEqual: '⋠', - NotReverseElement: '∌', - NotRightTriangle: '⋫', - NotRightTriangleBar: '⧐̸', - NotRightTriangleEqual: '⋭', - NotSquareSubset: '⊏̸', - NotSquareSubsetEqual: '⋢', - NotSquareSuperset: '⊐̸', - NotSquareSupersetEqual: '⋣', - NotSubset: '⊂⃒', - NotSubsetEqual: '⊈', - NotSucceeds: '⊁', - NotSucceedsEqual: '⪰̸', - NotSucceedsSlantEqual: '⋡', - NotSucceedsTilde: '≿̸', - NotSuperset: '⊃⃒', - NotSupersetEqual: '⊉', - NotTilde: '≁', - NotTildeEqual: '≄', - NotTildeFullEqual: '≇', - NotTildeTilde: '≉', - NotVerticalBar: '∤', - Nscr: '𝒩', - Ntilde: 'Ñ', - Nu: 'Ν', - OElig: 'Œ', - Oacute: 'Ó', - Ocirc: 'Ô', - Ocy: 'О', - Odblac: 'Ő', - Ofr: '𝔒', - Ograve: 'Ò', - Omacr: 'Ō', - Omega: 'Ω', - Omicron: 'Ο', - Oopf: '𝕆', - OpenCurlyDoubleQuote: '“', - OpenCurlyQuote: '‘', - Or: '⩔', - Oscr: '𝒪', - Oslash: 'Ø', - Otilde: 'Õ', - Otimes: '⨷', - Ouml: 'Ö', - OverBar: '‾', - OverBrace: '⏞', - OverBracket: '⎴', - OverParenthesis: '⏜', - PartialD: '∂', - Pcy: 'П', - Pfr: '𝔓', - Phi: 'Φ', - Pi: 'Π', - PlusMinus: '±', - Poincareplane: 'ℌ', - Popf: 'ℙ', - Pr: '⪻', - Precedes: '≺', - PrecedesEqual: '⪯', - PrecedesSlantEqual: '≼', - PrecedesTilde: '≾', - Prime: '″', - Product: '∏', - Proportion: '∷', - Proportional: '∝', - Pscr: '𝒫', - Psi: 'Ψ', - QUOT: '"', - Qfr: '𝔔', - Qopf: 'ℚ', - Qscr: '𝒬', - RBarr: '⤐', - REG: '®', - Racute: 'Ŕ', - Rang: '⟫', - Rarr: '↠', - Rarrtl: '⤖', - Rcaron: 'Ř', - Rcedil: 'Ŗ', - Rcy: 'Р', - Re: 'ℜ', - ReverseElement: '∋', - ReverseEquilibrium: '⇋', - ReverseUpEquilibrium: '⥯', - Rfr: 'ℜ', - Rho: 'Ρ', - RightAngleBracket: '⟩', - RightArrow: '→', - RightArrowBar: '⇥', - RightArrowLeftArrow: '⇄', - RightCeiling: '⌉', - RightDoubleBracket: '⟧', - RightDownTeeVector: '⥝', - RightDownVector: '⇂', - RightDownVectorBar: '⥕', - RightFloor: '⌋', - RightTee: '⊢', - RightTeeArrow: '↦', - RightTeeVector: '⥛', - RightTriangle: '⊳', - RightTriangleBar: '⧐', - RightTriangleEqual: '⊵', - RightUpDownVector: '⥏', - RightUpTeeVector: '⥜', - RightUpVector: '↾', - RightUpVectorBar: '⥔', - RightVector: '⇀', - RightVectorBar: '⥓', - Rightarrow: '⇒', - Ropf: 'ℝ', - RoundImplies: '⥰', - Rrightarrow: '⇛', - Rscr: 'ℛ', - Rsh: '↱', - RuleDelayed: '⧴', - SHCHcy: 'Щ', - SHcy: 'Ш', - SOFTcy: 'Ь', - Sacute: 'Ś', - Sc: '⪼', - Scaron: 'Š', - Scedil: 'Ş', - Scirc: 'Ŝ', - Scy: 'С', - Sfr: '𝔖', - ShortDownArrow: '↓', - ShortLeftArrow: '←', - ShortRightArrow: '→', - ShortUpArrow: '↑', - Sigma: 'Σ', - SmallCircle: '∘', - Sopf: '𝕊', - Sqrt: '√', - Square: '□', - SquareIntersection: '⊓', - SquareSubset: '⊏', - SquareSubsetEqual: '⊑', - SquareSuperset: '⊐', - SquareSupersetEqual: '⊒', - SquareUnion: '⊔', - Sscr: '𝒮', - Star: '⋆', - Sub: '⋐', - Subset: '⋐', - SubsetEqual: '⊆', - Succeeds: '≻', - SucceedsEqual: '⪰', - SucceedsSlantEqual: '≽', - SucceedsTilde: '≿', - SuchThat: '∋', - Sum: '∑', - Sup: '⋑', - Superset: '⊃', - SupersetEqual: '⊇', - Supset: '⋑', - THORN: 'Þ', - TRADE: '™', - TSHcy: 'Ћ', - TScy: 'Ц', - Tab: '\t', - Tau: 'Τ', - Tcaron: 'Ť', - Tcedil: 'Ţ', - Tcy: 'Т', - Tfr: '𝔗', - Therefore: '∴', - Theta: 'Θ', - ThickSpace: '  ', - ThinSpace: ' ', - Tilde: '∼', - TildeEqual: '≃', - TildeFullEqual: '≅', - TildeTilde: '≈', - Topf: '𝕋', - TripleDot: '⃛', - Tscr: '𝒯', - Tstrok: 'Ŧ', - Uacute: 'Ú', - Uarr: '↟', - Uarrocir: '⥉', - Ubrcy: 'Ў', - Ubreve: 'Ŭ', - Ucirc: 'Û', - Ucy: 'У', - Udblac: 'Ű', - Ufr: '𝔘', - Ugrave: 'Ù', - Umacr: 'Ū', - UnderBar: '_', - UnderBrace: '⏟', - UnderBracket: '⎵', - UnderParenthesis: '⏝', - Union: '⋃', - UnionPlus: '⊎', - Uogon: 'Ų', - Uopf: '𝕌', - UpArrow: '↑', - UpArrowBar: '⤒', - UpArrowDownArrow: '⇅', - UpDownArrow: '↕', - UpEquilibrium: '⥮', - UpTee: '⊥', - UpTeeArrow: '↥', - Uparrow: '⇑', - Updownarrow: '⇕', - UpperLeftArrow: '↖', - UpperRightArrow: '↗', - Upsi: 'ϒ', - Upsilon: 'Υ', - Uring: 'Ů', - Uscr: '𝒰', - Utilde: 'Ũ', - Uuml: 'Ü', - VDash: '⊫', - Vbar: '⫫', - Vcy: 'В', - Vdash: '⊩', - Vdashl: '⫦', - Vee: '⋁', - Verbar: '‖', - Vert: '‖', - VerticalBar: '∣', - VerticalLine: '|', - VerticalSeparator: '❘', - VerticalTilde: '≀', - VeryThinSpace: ' ', - Vfr: '𝔙', - Vopf: '𝕍', - Vscr: '𝒱', - Vvdash: '⊪', - Wcirc: 'Ŵ', - Wedge: '⋀', - Wfr: '𝔚', - Wopf: '𝕎', - Wscr: '𝒲', - Xfr: '𝔛', - Xi: 'Ξ', - Xopf: '𝕏', - Xscr: '𝒳', - YAcy: 'Я', - YIcy: 'Ї', - YUcy: 'Ю', - Yacute: 'Ý', - Ycirc: 'Ŷ', - Ycy: 'Ы', - Yfr: '𝔜', - Yopf: '𝕐', - Yscr: '𝒴', - Yuml: 'Ÿ', - ZHcy: 'Ж', - Zacute: 'Ź', - Zcaron: 'Ž', - Zcy: 'З', - Zdot: 'Ż', - ZeroWidthSpace: '​', - Zeta: 'Ζ', - Zfr: 'ℨ', - Zopf: 'ℤ', - Zscr: '𝒵', - aacute: 'á', - abreve: 'ă', - ac: '∾', - acE: '∾̳', - acd: '∿', - acirc: 'â', - acute: '´', - acy: 'а', - aelig: 'æ', - af: '⁡', - afr: '𝔞', - agrave: 'à', - alefsym: 'ℵ', - aleph: 'ℵ', - alpha: 'α', - amacr: 'ā', - amalg: '⨿', - amp: '&', - and: '∧', - andand: '⩕', - andd: '⩜', - andslope: '⩘', - andv: '⩚', - ang: '∠', - ange: '⦤', - angle: '∠', - angmsd: '∡', - angmsdaa: '⦨', - angmsdab: '⦩', - angmsdac: '⦪', - angmsdad: '⦫', - angmsdae: '⦬', - angmsdaf: '⦭', - angmsdag: '⦮', - angmsdah: '⦯', - angrt: '∟', - angrtvb: '⊾', - angrtvbd: '⦝', - angsph: '∢', - angst: 'Å', - angzarr: '⍼', - aogon: 'ą', - aopf: '𝕒', - ap: '≈', - apE: '⩰', - apacir: '⩯', - ape: '≊', - apid: '≋', - apos: "'", - approx: '≈', - approxeq: '≊', - aring: 'å', - ascr: '𝒶', - ast: '*', - asymp: '≈', - asympeq: '≍', - atilde: 'ã', - auml: 'ä', - awconint: '∳', - awint: '⨑', - bNot: '⫭', - backcong: '≌', - backepsilon: '϶', - backprime: '‵', - backsim: '∽', - backsimeq: '⋍', - barvee: '⊽', - barwed: '⌅', - barwedge: '⌅', - bbrk: '⎵', - bbrktbrk: '⎶', - bcong: '≌', - bcy: 'б', - bdquo: '„', - becaus: '∵', - because: '∵', - bemptyv: '⦰', - bepsi: '϶', - bernou: 'ℬ', - beta: 'β', - beth: 'ℶ', - between: '≬', - bfr: '𝔟', - bigcap: '⋂', - bigcirc: '◯', - bigcup: '⋃', - bigodot: '⨀', - bigoplus: '⨁', - bigotimes: '⨂', - bigsqcup: '⨆', - bigstar: '★', - bigtriangledown: '▽', - bigtriangleup: '△', - biguplus: '⨄', - bigvee: '⋁', - bigwedge: '⋀', - bkarow: '⤍', - blacklozenge: '⧫', - blacksquare: '▪', - blacktriangle: '▴', - blacktriangledown: '▾', - blacktriangleleft: '◂', - blacktriangleright: '▸', - blank: '␣', - blk12: '▒', - blk14: '░', - blk34: '▓', - block: '█', - bne: '=⃥', - bnequiv: '≡⃥', - bnot: '⌐', - bopf: '𝕓', - bot: '⊥', - bottom: '⊥', - bowtie: '⋈', - boxDL: '╗', - boxDR: '╔', - boxDl: '╖', - boxDr: '╓', - boxH: '═', - boxHD: '╦', - boxHU: '╩', - boxHd: '╤', - boxHu: '╧', - boxUL: '╝', - boxUR: '╚', - boxUl: '╜', - boxUr: '╙', - boxV: '║', - boxVH: '╬', - boxVL: '╣', - boxVR: '╠', - boxVh: '╫', - boxVl: '╢', - boxVr: '╟', - boxbox: '⧉', - boxdL: '╕', - boxdR: '╒', - boxdl: '┐', - boxdr: '┌', - boxh: '─', - boxhD: '╥', - boxhU: '╨', - boxhd: '┬', - boxhu: '┴', - boxminus: '⊟', - boxplus: '⊞', - boxtimes: '⊠', - boxuL: '╛', - boxuR: '╘', - boxul: '┘', - boxur: '└', - boxv: '│', - boxvH: '╪', - boxvL: '╡', - boxvR: '╞', - boxvh: '┼', - boxvl: '┤', - boxvr: '├', - bprime: '‵', - breve: '˘', - brvbar: '¦', - bscr: '𝒷', - bsemi: '⁏', - bsim: '∽', - bsime: '⋍', - bsol: '\\', - bsolb: '⧅', - bsolhsub: '⟈', - bull: '•', - bullet: '•', - bump: '≎', - bumpE: '⪮', - bumpe: '≏', - bumpeq: '≏', - cacute: 'ć', - cap: '∩', - capand: '⩄', - capbrcup: '⩉', - capcap: '⩋', - capcup: '⩇', - capdot: '⩀', - caps: '∩︀', - caret: '⁁', - caron: 'ˇ', - ccaps: '⩍', - ccaron: 'č', - ccedil: 'ç', - ccirc: 'ĉ', - ccups: '⩌', - ccupssm: '⩐', - cdot: 'ċ', - cedil: '¸', - cemptyv: '⦲', - cent: '¢', - centerdot: '·', - cfr: '𝔠', - chcy: 'ч', - check: '✓', - checkmark: '✓', - chi: 'χ', - cir: '○', - cirE: '⧃', - circ: 'ˆ', - circeq: '≗', - circlearrowleft: '↺', - circlearrowright: '↻', - circledR: '®', - circledS: 'Ⓢ', - circledast: '⊛', - circledcirc: '⊚', - circleddash: '⊝', - cire: '≗', - cirfnint: '⨐', - cirmid: '⫯', - cirscir: '⧂', - clubs: '♣', - clubsuit: '♣', - colon: ':', - colone: '≔', - coloneq: '≔', - comma: ',', - commat: '@', - comp: '∁', - compfn: '∘', - complement: '∁', - complexes: 'ℂ', - cong: '≅', - congdot: '⩭', - conint: '∮', - copf: '𝕔', - coprod: '∐', - copy: '©', - copysr: '℗', - crarr: '↵', - cross: '✗', - cscr: '𝒸', - csub: '⫏', - csube: '⫑', - csup: '⫐', - csupe: '⫒', - ctdot: '⋯', - cudarrl: '⤸', - cudarrr: '⤵', - cuepr: '⋞', - cuesc: '⋟', - cularr: '↶', - cularrp: '⤽', - cup: '∪', - cupbrcap: '⩈', - cupcap: '⩆', - cupcup: '⩊', - cupdot: '⊍', - cupor: '⩅', - cups: '∪︀', - curarr: '↷', - curarrm: '⤼', - curlyeqprec: '⋞', - curlyeqsucc: '⋟', - curlyvee: '⋎', - curlywedge: '⋏', - curren: '¤', - curvearrowleft: '↶', - curvearrowright: '↷', - cuvee: '⋎', - cuwed: '⋏', - cwconint: '∲', - cwint: '∱', - cylcty: '⌭', - dArr: '⇓', - dHar: '⥥', - dagger: '†', - daleth: 'ℸ', - darr: '↓', - dash: '‐', - dashv: '⊣', - dbkarow: '⤏', - dblac: '˝', - dcaron: 'ď', - dcy: 'д', - dd: 'ⅆ', - ddagger: '‡', - ddarr: '⇊', - ddotseq: '⩷', - deg: '°', - delta: 'δ', - demptyv: '⦱', - dfisht: '⥿', - dfr: '𝔡', - dharl: '⇃', - dharr: '⇂', - diam: '⋄', - diamond: '⋄', - diamondsuit: '♦', - diams: '♦', - die: '¨', - digamma: 'ϝ', - disin: '⋲', - div: '÷', - divide: '÷', - divideontimes: '⋇', - divonx: '⋇', - djcy: 'ђ', - dlcorn: '⌞', - dlcrop: '⌍', - dollar: '$', - dopf: '𝕕', - dot: '˙', - doteq: '≐', - doteqdot: '≑', - dotminus: '∸', - dotplus: '∔', - dotsquare: '⊡', - doublebarwedge: '⌆', - downarrow: '↓', - downdownarrows: '⇊', - downharpoonleft: '⇃', - downharpoonright: '⇂', - drbkarow: '⤐', - drcorn: '⌟', - drcrop: '⌌', - dscr: '𝒹', - dscy: 'ѕ', - dsol: '⧶', - dstrok: 'đ', - dtdot: '⋱', - dtri: '▿', - dtrif: '▾', - duarr: '⇵', - duhar: '⥯', - dwangle: '⦦', - dzcy: 'џ', - dzigrarr: '⟿', - eDDot: '⩷', - eDot: '≑', - eacute: 'é', - easter: '⩮', - ecaron: 'ě', - ecir: '≖', - ecirc: 'ê', - ecolon: '≕', - ecy: 'э', - edot: 'ė', - ee: 'ⅇ', - efDot: '≒', - efr: '𝔢', - eg: '⪚', - egrave: 'è', - egs: '⪖', - egsdot: '⪘', - el: '⪙', - elinters: '⏧', - ell: 'ℓ', - els: '⪕', - elsdot: '⪗', - emacr: 'ē', - empty: '∅', - emptyset: '∅', - emptyv: '∅', - emsp13: ' ', - emsp14: ' ', - emsp: ' ', - eng: 'ŋ', - ensp: ' ', - eogon: 'ę', - eopf: '𝕖', - epar: '⋕', - eparsl: '⧣', - eplus: '⩱', - epsi: 'ε', - epsilon: 'ε', - epsiv: 'ϵ', - eqcirc: '≖', - eqcolon: '≕', - eqsim: '≂', - eqslantgtr: '⪖', - eqslantless: '⪕', - equals: '=', - equest: '≟', - equiv: '≡', - equivDD: '⩸', - eqvparsl: '⧥', - erDot: '≓', - erarr: '⥱', - escr: 'ℯ', - esdot: '≐', - esim: '≂', - eta: 'η', - eth: 'ð', - euml: 'ë', - euro: '€', - excl: '!', - exist: '∃', - expectation: 'ℰ', - exponentiale: 'ⅇ', - fallingdotseq: '≒', - fcy: 'ф', - female: '♀', - ffilig: 'ffi', - fflig: 'ff', - ffllig: 'ffl', - ffr: '𝔣', - filig: 'fi', - fjlig: 'fj', - flat: '♭', - fllig: 'fl', - fltns: '▱', - fnof: 'ƒ', - fopf: '𝕗', - forall: '∀', - fork: '⋔', - forkv: '⫙', - fpartint: '⨍', - frac12: '½', - frac13: '⅓', - frac14: '¼', - frac15: '⅕', - frac16: '⅙', - frac18: '⅛', - frac23: '⅔', - frac25: '⅖', - frac34: '¾', - frac35: '⅗', - frac38: '⅜', - frac45: '⅘', - frac56: '⅚', - frac58: '⅝', - frac78: '⅞', - frasl: '⁄', - frown: '⌢', - fscr: '𝒻', - gE: '≧', - gEl: '⪌', - gacute: 'ǵ', - gamma: 'γ', - gammad: 'ϝ', - gap: '⪆', - gbreve: 'ğ', - gcirc: 'ĝ', - gcy: 'г', - gdot: 'ġ', - ge: '≥', - gel: '⋛', - geq: '≥', - geqq: '≧', - geqslant: '⩾', - ges: '⩾', - gescc: '⪩', - gesdot: '⪀', - gesdoto: '⪂', - gesdotol: '⪄', - gesl: '⋛︀', - gesles: '⪔', - gfr: '𝔤', - gg: '≫', - ggg: '⋙', - gimel: 'ℷ', - gjcy: 'ѓ', - gl: '≷', - glE: '⪒', - gla: '⪥', - glj: '⪤', - gnE: '≩', - gnap: '⪊', - gnapprox: '⪊', - gne: '⪈', - gneq: '⪈', - gneqq: '≩', - gnsim: '⋧', - gopf: '𝕘', - grave: '`', - gscr: 'ℊ', - gsim: '≳', - gsime: '⪎', - gsiml: '⪐', - gt: '>', - gtcc: '⪧', - gtcir: '⩺', - gtdot: '⋗', - gtlPar: '⦕', - gtquest: '⩼', - gtrapprox: '⪆', - gtrarr: '⥸', - gtrdot: '⋗', - gtreqless: '⋛', - gtreqqless: '⪌', - gtrless: '≷', - gtrsim: '≳', - gvertneqq: '≩︀', - gvnE: '≩︀', - hArr: '⇔', - hairsp: ' ', - half: '½', - hamilt: 'ℋ', - hardcy: 'ъ', - harr: '↔', - harrcir: '⥈', - harrw: '↭', - hbar: 'ℏ', - hcirc: 'ĥ', - hearts: '♥', - heartsuit: '♥', - hellip: '…', - hercon: '⊹', - hfr: '𝔥', - hksearow: '⤥', - hkswarow: '⤦', - hoarr: '⇿', - homtht: '∻', - hookleftarrow: '↩', - hookrightarrow: '↪', - hopf: '𝕙', - horbar: '―', - hscr: '𝒽', - hslash: 'ℏ', - hstrok: 'ħ', - hybull: '⁃', - hyphen: '‐', - iacute: 'í', - ic: '⁣', - icirc: 'î', - icy: 'и', - iecy: 'е', - iexcl: '¡', - iff: '⇔', - ifr: '𝔦', - igrave: 'ì', - ii: 'ⅈ', - iiiint: '⨌', - iiint: '∭', - iinfin: '⧜', - iiota: '℩', - ijlig: 'ij', - imacr: 'ī', - image: 'ℑ', - imagline: 'ℐ', - imagpart: 'ℑ', - imath: 'ı', - imof: '⊷', - imped: 'Ƶ', - in: '∈', - incare: '℅', - infin: '∞', - infintie: '⧝', - inodot: 'ı', - int: '∫', - intcal: '⊺', - integers: 'ℤ', - intercal: '⊺', - intlarhk: '⨗', - intprod: '⨼', - iocy: 'ё', - iogon: 'į', - iopf: '𝕚', - iota: 'ι', - iprod: '⨼', - iquest: '¿', - iscr: '𝒾', - isin: '∈', - isinE: '⋹', - isindot: '⋵', - isins: '⋴', - isinsv: '⋳', - isinv: '∈', - it: '⁢', - itilde: 'ĩ', - iukcy: 'і', - iuml: 'ï', - jcirc: 'ĵ', - jcy: 'й', - jfr: '𝔧', - jmath: 'ȷ', - jopf: '𝕛', - jscr: '𝒿', - jsercy: 'ј', - jukcy: 'є', - kappa: 'κ', - kappav: 'ϰ', - kcedil: 'ķ', - kcy: 'к', - kfr: '𝔨', - kgreen: 'ĸ', - khcy: 'х', - kjcy: 'ќ', - kopf: '𝕜', - kscr: '𝓀', - lAarr: '⇚', - lArr: '⇐', - lAtail: '⤛', - lBarr: '⤎', - lE: '≦', - lEg: '⪋', - lHar: '⥢', - lacute: 'ĺ', - laemptyv: '⦴', - lagran: 'ℒ', - lambda: 'λ', - lang: '⟨', - langd: '⦑', - langle: '⟨', - lap: '⪅', - laquo: '«', - larr: '←', - larrb: '⇤', - larrbfs: '⤟', - larrfs: '⤝', - larrhk: '↩', - larrlp: '↫', - larrpl: '⤹', - larrsim: '⥳', - larrtl: '↢', - lat: '⪫', - latail: '⤙', - late: '⪭', - lates: '⪭︀', - lbarr: '⤌', - lbbrk: '❲', - lbrace: '{', - lbrack: '[', - lbrke: '⦋', - lbrksld: '⦏', - lbrkslu: '⦍', - lcaron: 'ľ', - lcedil: 'ļ', - lceil: '⌈', - lcub: '{', - lcy: 'л', - ldca: '⤶', - ldquo: '“', - ldquor: '„', - ldrdhar: '⥧', - ldrushar: '⥋', - ldsh: '↲', - le: '≤', - leftarrow: '←', - leftarrowtail: '↢', - leftharpoondown: '↽', - leftharpoonup: '↼', - leftleftarrows: '⇇', - leftrightarrow: '↔', - leftrightarrows: '⇆', - leftrightharpoons: '⇋', - leftrightsquigarrow: '↭', - leftthreetimes: '⋋', - leg: '⋚', - leq: '≤', - leqq: '≦', - leqslant: '⩽', - les: '⩽', - lescc: '⪨', - lesdot: '⩿', - lesdoto: '⪁', - lesdotor: '⪃', - lesg: '⋚︀', - lesges: '⪓', - lessapprox: '⪅', - lessdot: '⋖', - lesseqgtr: '⋚', - lesseqqgtr: '⪋', - lessgtr: '≶', - lesssim: '≲', - lfisht: '⥼', - lfloor: '⌊', - lfr: '𝔩', - lg: '≶', - lgE: '⪑', - lhard: '↽', - lharu: '↼', - lharul: '⥪', - lhblk: '▄', - ljcy: 'љ', - ll: '≪', - llarr: '⇇', - llcorner: '⌞', - llhard: '⥫', - lltri: '◺', - lmidot: 'ŀ', - lmoust: '⎰', - lmoustache: '⎰', - lnE: '≨', - lnap: '⪉', - lnapprox: '⪉', - lne: '⪇', - lneq: '⪇', - lneqq: '≨', - lnsim: '⋦', - loang: '⟬', - loarr: '⇽', - lobrk: '⟦', - longleftarrow: '⟵', - longleftrightarrow: '⟷', - longmapsto: '⟼', - longrightarrow: '⟶', - looparrowleft: '↫', - looparrowright: '↬', - lopar: '⦅', - lopf: '𝕝', - loplus: '⨭', - lotimes: '⨴', - lowast: '∗', - lowbar: '_', - loz: '◊', - lozenge: '◊', - lozf: '⧫', - lpar: '(', - lparlt: '⦓', - lrarr: '⇆', - lrcorner: '⌟', - lrhar: '⇋', - lrhard: '⥭', - lrm: '‎', - lrtri: '⊿', - lsaquo: '‹', - lscr: '𝓁', - lsh: '↰', - lsim: '≲', - lsime: '⪍', - lsimg: '⪏', - lsqb: '[', - lsquo: '‘', - lsquor: '‚', - lstrok: 'ł', - lt: '<', - ltcc: '⪦', - ltcir: '⩹', - ltdot: '⋖', - lthree: '⋋', - ltimes: '⋉', - ltlarr: '⥶', - ltquest: '⩻', - ltrPar: '⦖', - ltri: '◃', - ltrie: '⊴', - ltrif: '◂', - lurdshar: '⥊', - luruhar: '⥦', - lvertneqq: '≨︀', - lvnE: '≨︀', - mDDot: '∺', - macr: '¯', - male: '♂', - malt: '✠', - maltese: '✠', - map: '↦', - mapsto: '↦', - mapstodown: '↧', - mapstoleft: '↤', - mapstoup: '↥', - marker: '▮', - mcomma: '⨩', - mcy: 'м', - mdash: '—', - measuredangle: '∡', - mfr: '𝔪', - mho: '℧', - micro: 'µ', - mid: '∣', - midast: '*', - midcir: '⫰', - middot: '·', - minus: '−', - minusb: '⊟', - minusd: '∸', - minusdu: '⨪', - mlcp: '⫛', - mldr: '…', - mnplus: '∓', - models: '⊧', - mopf: '𝕞', - mp: '∓', - mscr: '𝓂', - mstpos: '∾', - mu: 'μ', - multimap: '⊸', - mumap: '⊸', - nGg: '⋙̸', - nGt: '≫⃒', - nGtv: '≫̸', - nLeftarrow: '⇍', - nLeftrightarrow: '⇎', - nLl: '⋘̸', - nLt: '≪⃒', - nLtv: '≪̸', - nRightarrow: '⇏', - nVDash: '⊯', - nVdash: '⊮', - nabla: '∇', - nacute: 'ń', - nang: '∠⃒', - nap: '≉', - napE: '⩰̸', - napid: '≋̸', - napos: 'ʼn', - napprox: '≉', - natur: '♮', - natural: '♮', - naturals: 'ℕ', - nbsp: ' ', - nbump: '≎̸', - nbumpe: '≏̸', - ncap: '⩃', - ncaron: 'ň', - ncedil: 'ņ', - ncong: '≇', - ncongdot: '⩭̸', - ncup: '⩂', - ncy: 'н', - ndash: '–', - ne: '≠', - neArr: '⇗', - nearhk: '⤤', - nearr: '↗', - nearrow: '↗', - nedot: '≐̸', - nequiv: '≢', - nesear: '⤨', - nesim: '≂̸', - nexist: '∄', - nexists: '∄', - nfr: '𝔫', - ngE: '≧̸', - nge: '≱', - ngeq: '≱', - ngeqq: '≧̸', - ngeqslant: '⩾̸', - nges: '⩾̸', - ngsim: '≵', - ngt: '≯', - ngtr: '≯', - nhArr: '⇎', - nharr: '↮', - nhpar: '⫲', - ni: '∋', - nis: '⋼', - nisd: '⋺', - niv: '∋', - njcy: 'њ', - nlArr: '⇍', - nlE: '≦̸', - nlarr: '↚', - nldr: '‥', - nle: '≰', - nleftarrow: '↚', - nleftrightarrow: '↮', - nleq: '≰', - nleqq: '≦̸', - nleqslant: '⩽̸', - nles: '⩽̸', - nless: '≮', - nlsim: '≴', - nlt: '≮', - nltri: '⋪', - nltrie: '⋬', - nmid: '∤', - nopf: '𝕟', - not: '¬', - notin: '∉', - notinE: '⋹̸', - notindot: '⋵̸', - notinva: '∉', - notinvb: '⋷', - notinvc: '⋶', - notni: '∌', - notniva: '∌', - notnivb: '⋾', - notnivc: '⋽', - npar: '∦', - nparallel: '∦', - nparsl: '⫽⃥', - npart: '∂̸', - npolint: '⨔', - npr: '⊀', - nprcue: '⋠', - npre: '⪯̸', - nprec: '⊀', - npreceq: '⪯̸', - nrArr: '⇏', - nrarr: '↛', - nrarrc: '⤳̸', - nrarrw: '↝̸', - nrightarrow: '↛', - nrtri: '⋫', - nrtrie: '⋭', - nsc: '⊁', - nsccue: '⋡', - nsce: '⪰̸', - nscr: '𝓃', - nshortmid: '∤', - nshortparallel: '∦', - nsim: '≁', - nsime: '≄', - nsimeq: '≄', - nsmid: '∤', - nspar: '∦', - nsqsube: '⋢', - nsqsupe: '⋣', - nsub: '⊄', - nsubE: '⫅̸', - nsube: '⊈', - nsubset: '⊂⃒', - nsubseteq: '⊈', - nsubseteqq: '⫅̸', - nsucc: '⊁', - nsucceq: '⪰̸', - nsup: '⊅', - nsupE: '⫆̸', - nsupe: '⊉', - nsupset: '⊃⃒', - nsupseteq: '⊉', - nsupseteqq: '⫆̸', - ntgl: '≹', - ntilde: 'ñ', - ntlg: '≸', - ntriangleleft: '⋪', - ntrianglelefteq: '⋬', - ntriangleright: '⋫', - ntrianglerighteq: '⋭', - nu: 'ν', - num: '#', - numero: '№', - numsp: ' ', - nvDash: '⊭', - nvHarr: '⤄', - nvap: '≍⃒', - nvdash: '⊬', - nvge: '≥⃒', - nvgt: '>⃒', - nvinfin: '⧞', - nvlArr: '⤂', - nvle: '≤⃒', - nvlt: '<⃒', - nvltrie: '⊴⃒', - nvrArr: '⤃', - nvrtrie: '⊵⃒', - nvsim: '∼⃒', - nwArr: '⇖', - nwarhk: '⤣', - nwarr: '↖', - nwarrow: '↖', - nwnear: '⤧', - oS: 'Ⓢ', - oacute: 'ó', - oast: '⊛', - ocir: '⊚', - ocirc: 'ô', - ocy: 'о', - odash: '⊝', - odblac: 'ő', - odiv: '⨸', - odot: '⊙', - odsold: '⦼', - oelig: 'œ', - ofcir: '⦿', - ofr: '𝔬', - ogon: '˛', - ograve: 'ò', - ogt: '⧁', - ohbar: '⦵', - ohm: 'Ω', - oint: '∮', - olarr: '↺', - olcir: '⦾', - olcross: '⦻', - oline: '‾', - olt: '⧀', - omacr: 'ō', - omega: 'ω', - omicron: 'ο', - omid: '⦶', - ominus: '⊖', - oopf: '𝕠', - opar: '⦷', - operp: '⦹', - oplus: '⊕', - or: '∨', - orarr: '↻', - ord: '⩝', - order: 'ℴ', - orderof: 'ℴ', - ordf: 'ª', - ordm: 'º', - origof: '⊶', - oror: '⩖', - orslope: '⩗', - orv: '⩛', - oscr: 'ℴ', - oslash: 'ø', - osol: '⊘', - otilde: 'õ', - otimes: '⊗', - otimesas: '⨶', - ouml: 'ö', - ovbar: '⌽', - par: '∥', - para: '¶', - parallel: '∥', - parsim: '⫳', - parsl: '⫽', - part: '∂', - pcy: 'п', - percnt: '%', - period: '.', - permil: '‰', - perp: '⊥', - pertenk: '‱', - pfr: '𝔭', - phi: 'φ', - phiv: 'ϕ', - phmmat: 'ℳ', - phone: '☎', - pi: 'π', - pitchfork: '⋔', - piv: 'ϖ', - planck: 'ℏ', - planckh: 'ℎ', - plankv: 'ℏ', - plus: '+', - plusacir: '⨣', - plusb: '⊞', - pluscir: '⨢', - plusdo: '∔', - plusdu: '⨥', - pluse: '⩲', - plusmn: '±', - plussim: '⨦', - plustwo: '⨧', - pm: '±', - pointint: '⨕', - popf: '𝕡', - pound: '£', - pr: '≺', - prE: '⪳', - prap: '⪷', - prcue: '≼', - pre: '⪯', - prec: '≺', - precapprox: '⪷', - preccurlyeq: '≼', - preceq: '⪯', - precnapprox: '⪹', - precneqq: '⪵', - precnsim: '⋨', - precsim: '≾', - prime: '′', - primes: 'ℙ', - prnE: '⪵', - prnap: '⪹', - prnsim: '⋨', - prod: '∏', - profalar: '⌮', - profline: '⌒', - profsurf: '⌓', - prop: '∝', - propto: '∝', - prsim: '≾', - prurel: '⊰', - pscr: '𝓅', - psi: 'ψ', - puncsp: ' ', - qfr: '𝔮', - qint: '⨌', - qopf: '𝕢', - qprime: '⁗', - qscr: '𝓆', - quaternions: 'ℍ', - quatint: '⨖', - quest: '?', - questeq: '≟', - quot: '"', - rAarr: '⇛', - rArr: '⇒', - rAtail: '⤜', - rBarr: '⤏', - rHar: '⥤', - race: '∽̱', - racute: 'ŕ', - radic: '√', - raemptyv: '⦳', - rang: '⟩', - rangd: '⦒', - range: '⦥', - rangle: '⟩', - raquo: '»', - rarr: '→', - rarrap: '⥵', - rarrb: '⇥', - rarrbfs: '⤠', - rarrc: '⤳', - rarrfs: '⤞', - rarrhk: '↪', - rarrlp: '↬', - rarrpl: '⥅', - rarrsim: '⥴', - rarrtl: '↣', - rarrw: '↝', - ratail: '⤚', - ratio: '∶', - rationals: 'ℚ', - rbarr: '⤍', - rbbrk: '❳', - rbrace: '}', - rbrack: ']', - rbrke: '⦌', - rbrksld: '⦎', - rbrkslu: '⦐', - rcaron: 'ř', - rcedil: 'ŗ', - rceil: '⌉', - rcub: '}', - rcy: 'р', - rdca: '⤷', - rdldhar: '⥩', - rdquo: '”', - rdquor: '”', - rdsh: '↳', - real: 'ℜ', - realine: 'ℛ', - realpart: 'ℜ', - reals: 'ℝ', - rect: '▭', - reg: '®', - rfisht: '⥽', - rfloor: '⌋', - rfr: '𝔯', - rhard: '⇁', - rharu: '⇀', - rharul: '⥬', - rho: 'ρ', - rhov: 'ϱ', - rightarrow: '→', - rightarrowtail: '↣', - rightharpoondown: '⇁', - rightharpoonup: '⇀', - rightleftarrows: '⇄', - rightleftharpoons: '⇌', - rightrightarrows: '⇉', - rightsquigarrow: '↝', - rightthreetimes: '⋌', - ring: '˚', - risingdotseq: '≓', - rlarr: '⇄', - rlhar: '⇌', - rlm: '‏', - rmoust: '⎱', - rmoustache: '⎱', - rnmid: '⫮', - roang: '⟭', - roarr: '⇾', - robrk: '⟧', - ropar: '⦆', - ropf: '𝕣', - roplus: '⨮', - rotimes: '⨵', - rpar: ')', - rpargt: '⦔', - rppolint: '⨒', - rrarr: '⇉', - rsaquo: '›', - rscr: '𝓇', - rsh: '↱', - rsqb: ']', - rsquo: '’', - rsquor: '’', - rthree: '⋌', - rtimes: '⋊', - rtri: '▹', - rtrie: '⊵', - rtrif: '▸', - rtriltri: '⧎', - ruluhar: '⥨', - rx: '℞', - sacute: 'ś', - sbquo: '‚', - sc: '≻', - scE: '⪴', - scap: '⪸', - scaron: 'š', - sccue: '≽', - sce: '⪰', - scedil: 'ş', - scirc: 'ŝ', - scnE: '⪶', - scnap: '⪺', - scnsim: '⋩', - scpolint: '⨓', - scsim: '≿', - scy: 'с', - sdot: '⋅', - sdotb: '⊡', - sdote: '⩦', - seArr: '⇘', - searhk: '⤥', - searr: '↘', - searrow: '↘', - sect: '§', - semi: ';', - seswar: '⤩', - setminus: '∖', - setmn: '∖', - sext: '✶', - sfr: '𝔰', - sfrown: '⌢', - sharp: '♯', - shchcy: 'щ', - shcy: 'ш', - shortmid: '∣', - shortparallel: '∥', - shy: '­', - sigma: 'σ', - sigmaf: 'ς', - sigmav: 'ς', - sim: '∼', - simdot: '⩪', - sime: '≃', - simeq: '≃', - simg: '⪞', - simgE: '⪠', - siml: '⪝', - simlE: '⪟', - simne: '≆', - simplus: '⨤', - simrarr: '⥲', - slarr: '←', - smallsetminus: '∖', - smashp: '⨳', - smeparsl: '⧤', - smid: '∣', - smile: '⌣', - smt: '⪪', - smte: '⪬', - smtes: '⪬︀', - softcy: 'ь', - sol: '/', - solb: '⧄', - solbar: '⌿', - sopf: '𝕤', - spades: '♠', - spadesuit: '♠', - spar: '∥', - sqcap: '⊓', - sqcaps: '⊓︀', - sqcup: '⊔', - sqcups: '⊔︀', - sqsub: '⊏', - sqsube: '⊑', - sqsubset: '⊏', - sqsubseteq: '⊑', - sqsup: '⊐', - sqsupe: '⊒', - sqsupset: '⊐', - sqsupseteq: '⊒', - squ: '□', - square: '□', - squarf: '▪', - squf: '▪', - srarr: '→', - sscr: '𝓈', - ssetmn: '∖', - ssmile: '⌣', - sstarf: '⋆', - star: '☆', - starf: '★', - straightepsilon: 'ϵ', - straightphi: 'ϕ', - strns: '¯', - sub: '⊂', - subE: '⫅', - subdot: '⪽', - sube: '⊆', - subedot: '⫃', - submult: '⫁', - subnE: '⫋', - subne: '⊊', - subplus: '⪿', - subrarr: '⥹', - subset: '⊂', - subseteq: '⊆', - subseteqq: '⫅', - subsetneq: '⊊', - subsetneqq: '⫋', - subsim: '⫇', - subsub: '⫕', - subsup: '⫓', - succ: '≻', - succapprox: '⪸', - succcurlyeq: '≽', - succeq: '⪰', - succnapprox: '⪺', - succneqq: '⪶', - succnsim: '⋩', - succsim: '≿', - sum: '∑', - sung: '♪', - sup1: '¹', - sup2: '²', - sup3: '³', - sup: '⊃', - supE: '⫆', - supdot: '⪾', - supdsub: '⫘', - supe: '⊇', - supedot: '⫄', - suphsol: '⟉', - suphsub: '⫗', - suplarr: '⥻', - supmult: '⫂', - supnE: '⫌', - supne: '⊋', - supplus: '⫀', - supset: '⊃', - supseteq: '⊇', - supseteqq: '⫆', - supsetneq: '⊋', - supsetneqq: '⫌', - supsim: '⫈', - supsub: '⫔', - supsup: '⫖', - swArr: '⇙', - swarhk: '⤦', - swarr: '↙', - swarrow: '↙', - swnwar: '⤪', - szlig: 'ß', - target: '⌖', - tau: 'τ', - tbrk: '⎴', - tcaron: 'ť', - tcedil: 'ţ', - tcy: 'т', - tdot: '⃛', - telrec: '⌕', - tfr: '𝔱', - there4: '∴', - therefore: '∴', - theta: 'θ', - thetasym: 'ϑ', - thetav: 'ϑ', - thickapprox: '≈', - thicksim: '∼', - thinsp: ' ', - thkap: '≈', - thksim: '∼', - thorn: 'þ', - tilde: '˜', - times: '×', - timesb: '⊠', - timesbar: '⨱', - timesd: '⨰', - tint: '∭', - toea: '⤨', - top: '⊤', - topbot: '⌶', - topcir: '⫱', - topf: '𝕥', - topfork: '⫚', - tosa: '⤩', - tprime: '‴', - trade: '™', - triangle: '▵', - triangledown: '▿', - triangleleft: '◃', - trianglelefteq: '⊴', - triangleq: '≜', - triangleright: '▹', - trianglerighteq: '⊵', - tridot: '◬', - trie: '≜', - triminus: '⨺', - triplus: '⨹', - trisb: '⧍', - tritime: '⨻', - trpezium: '⏢', - tscr: '𝓉', - tscy: 'ц', - tshcy: 'ћ', - tstrok: 'ŧ', - twixt: '≬', - twoheadleftarrow: '↞', - twoheadrightarrow: '↠', - uArr: '⇑', - uHar: '⥣', - uacute: 'ú', - uarr: '↑', - ubrcy: 'ў', - ubreve: 'ŭ', - ucirc: 'û', - ucy: 'у', - udarr: '⇅', - udblac: 'ű', - udhar: '⥮', - ufisht: '⥾', - ufr: '𝔲', - ugrave: 'ù', - uharl: '↿', - uharr: '↾', - uhblk: '▀', - ulcorn: '⌜', - ulcorner: '⌜', - ulcrop: '⌏', - ultri: '◸', - umacr: 'ū', - uml: '¨', - uogon: 'ų', - uopf: '𝕦', - uparrow: '↑', - updownarrow: '↕', - upharpoonleft: '↿', - upharpoonright: '↾', - uplus: '⊎', - upsi: 'υ', - upsih: 'ϒ', - upsilon: 'υ', - upuparrows: '⇈', - urcorn: '⌝', - urcorner: '⌝', - urcrop: '⌎', - uring: 'ů', - urtri: '◹', - uscr: '𝓊', - utdot: '⋰', - utilde: 'ũ', - utri: '▵', - utrif: '▴', - uuarr: '⇈', - uuml: 'ü', - uwangle: '⦧', - vArr: '⇕', - vBar: '⫨', - vBarv: '⫩', - vDash: '⊨', - vangrt: '⦜', - varepsilon: 'ϵ', - varkappa: 'ϰ', - varnothing: '∅', - varphi: 'ϕ', - varpi: 'ϖ', - varpropto: '∝', - varr: '↕', - varrho: 'ϱ', - varsigma: 'ς', - varsubsetneq: '⊊︀', - varsubsetneqq: '⫋︀', - varsupsetneq: '⊋︀', - varsupsetneqq: '⫌︀', - vartheta: 'ϑ', - vartriangleleft: '⊲', - vartriangleright: '⊳', - vcy: 'в', - vdash: '⊢', - vee: '∨', - veebar: '⊻', - veeeq: '≚', - vellip: '⋮', - verbar: '|', - vert: '|', - vfr: '𝔳', - vltri: '⊲', - vnsub: '⊂⃒', - vnsup: '⊃⃒', - vopf: '𝕧', - vprop: '∝', - vrtri: '⊳', - vscr: '𝓋', - vsubnE: '⫋︀', - vsubne: '⊊︀', - vsupnE: '⫌︀', - vsupne: '⊋︀', - vzigzag: '⦚', - wcirc: 'ŵ', - wedbar: '⩟', - wedge: '∧', - wedgeq: '≙', - weierp: '℘', - wfr: '𝔴', - wopf: '𝕨', - wp: '℘', - wr: '≀', - wreath: '≀', - wscr: '𝓌', - xcap: '⋂', - xcirc: '◯', - xcup: '⋃', - xdtri: '▽', - xfr: '𝔵', - xhArr: '⟺', - xharr: '⟷', - xi: 'ξ', - xlArr: '⟸', - xlarr: '⟵', - xmap: '⟼', - xnis: '⋻', - xodot: '⨀', - xopf: '𝕩', - xoplus: '⨁', - xotime: '⨂', - xrArr: '⟹', - xrarr: '⟶', - xscr: '𝓍', - xsqcup: '⨆', - xuplus: '⨄', - xutri: '△', - xvee: '⋁', - xwedge: '⋀', - yacute: 'ý', - yacy: 'я', - ycirc: 'ŷ', - ycy: 'ы', - yen: '¥', - yfr: '𝔶', - yicy: 'ї', - yopf: '𝕪', - yscr: '𝓎', - yucy: 'ю', - yuml: 'ÿ', - zacute: 'ź', - zcaron: 'ž', - zcy: 'з', - zdot: 'ż', - zeetrf: 'ℨ', - zeta: 'ζ', - zfr: '𝔷', - zhcy: 'ж', - zigrarr: '⇝', - zopf: '𝕫', - zscr: '𝓏', - zwj: '‍', - zwnj: '‌' -} - -;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js - - -const own = {}.hasOwnProperty - -/** - * Decode a single character reference (without the `&` or `;`). - * You probably only need this when you’re building parsers yourself that follow - * different rules compared to HTML. - * This is optimized to be tiny in browsers. - * - * @param {string} value - * `notin` (named), `#123` (deci), `#x123` (hexa). - * @returns {string|false} - * Decoded reference. - */ -function decodeNamedCharacterReference(value) { - return own.call(characterEntities, value) ? characterEntities[value] : false -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const characterReference = { - name: 'characterReference', - tokenize: tokenizeCharacterReference -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterReference(effects, ok, nok) { - const self = this - let size = 0 - /** @type {number} */ - let max - /** @type {(code: Code) => boolean} */ - let test - return start - - /** - * Start of character reference. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterReference') - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - return open - } - - /** - * After `&`, at `#` for numeric references or alphanumeric for named - * references. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 35) { - effects.enter('characterReferenceMarkerNumeric') - effects.consume(code) - effects.exit('characterReferenceMarkerNumeric') - return numeric - } - effects.enter('characterReferenceValue') - max = 31 - test = asciiAlphanumeric - return value(code) - } - - /** - * After `#`, at `x` for hexadecimals or digit for decimals. - * - * ```markdown - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function numeric(code) { - if (code === 88 || code === 120) { - effects.enter('characterReferenceMarkerHexadecimal') - effects.consume(code) - effects.exit('characterReferenceMarkerHexadecimal') - effects.enter('characterReferenceValue') - max = 6 - test = asciiHexDigit - return value - } - effects.enter('characterReferenceValue') - max = 7 - test = asciiDigit - return value(code) - } - - /** - * After markers (`&#x`, `&#`, or `&`), in value, before `;`. - * - * The character reference kind defines what and how many characters are - * allowed. - * - * ```markdown - * > | a&b - * ^^^ - * > | a{b - * ^^^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function value(code) { - if (code === 59 && size) { - const token = effects.exit('characterReferenceValue') - if ( - test === asciiAlphanumeric && - !decodeNamedCharacterReference(self.sliceSerialize(token)) - ) { - return nok(code) - } - - // To do: `markdown-rs` uses a different name: - // `CharacterReferenceMarkerSemi`. - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - effects.exit('characterReference') - return ok - } - if (test(code) && size++ < max) { - effects.consume(code) - return value - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const characterEscape = { - name: 'characterEscape', - tokenize: tokenizeCharacterEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterEscape(effects, ok, nok) { - return start - - /** - * Start of character escape. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterEscape') - effects.enter('escapeMarker') - effects.consume(code) - effects.exit('escapeMarker') - return inside - } - - /** - * After `\`, at punctuation. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - // ASCII punctuation. - if (asciiPunctuation(code)) { - effects.enter('characterEscapeValue') - effects.consume(code) - effects.exit('characterEscapeValue') - effects.exit('characterEscape') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const lineEnding = { - name: 'lineEnding', - tokenize: tokenizeLineEnding -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLineEnding(effects, ok) { - return start - - /** @type {State} */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, ok, 'linePrefix') - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - - -/** @type {Construct} */ -const labelEnd = { - name: 'labelEnd', - tokenize: tokenizeLabelEnd, - resolveTo: resolveToLabelEnd, - resolveAll: resolveAllLabelEnd -} - -/** @type {Construct} */ -const resourceConstruct = { - tokenize: tokenizeResource -} -/** @type {Construct} */ -const referenceFullConstruct = { - tokenize: tokenizeReferenceFull -} -/** @type {Construct} */ -const referenceCollapsedConstruct = { - tokenize: tokenizeReferenceCollapsed -} - -/** @type {Resolver} */ -function resolveAllLabelEnd(events) { - let index = -1 - while (++index < events.length) { - const token = events[index][1] - if ( - token.type === 'labelImage' || - token.type === 'labelLink' || - token.type === 'labelEnd' - ) { - // Remove the marker. - events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) - token.type = 'data' - index++ - } - } - return events -} - -/** @type {Resolver} */ -function resolveToLabelEnd(events, context) { - let index = events.length - let offset = 0 - /** @type {Token} */ - let token - /** @type {number | undefined} */ - let open - /** @type {number | undefined} */ - let close - /** @type {Array<Event>} */ - let media - - // Find an opening. - while (index--) { - token = events[index][1] - if (open) { - // If we see another link, or inactive link label, we’ve been here before. - if ( - token.type === 'link' || - (token.type === 'labelLink' && token._inactive) - ) { - break - } - - // Mark other link openings as inactive, as we can’t have links in - // links. - if (events[index][0] === 'enter' && token.type === 'labelLink') { - token._inactive = true - } - } else if (close) { - if ( - events[index][0] === 'enter' && - (token.type === 'labelImage' || token.type === 'labelLink') && - !token._balanced - ) { - open = index - if (token.type !== 'labelLink') { - offset = 2 - break - } - } - } else if (token.type === 'labelEnd') { - close = index - } - } - const group = { - type: events[open][1].type === 'labelLink' ? 'link' : 'image', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - const label = { - type: 'label', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[close][1].end) - } - const text = { - type: 'labelText', - start: Object.assign({}, events[open + offset + 2][1].end), - end: Object.assign({}, events[close - 2][1].start) - } - media = [ - ['enter', group, context], - ['enter', label, context] - ] - - // Opening marker. - media = push(media, events.slice(open + 1, open + offset + 3)) - - // Text open. - media = push(media, [['enter', text, context]]) - - // Always populated by defaults. - - // Between. - media = push( - media, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + offset + 4, close - 3), - context - ) - ) - - // Text close, marker close, label close. - media = push(media, [ - ['exit', text, context], - events[close - 2], - events[close - 1], - ['exit', label, context] - ]) - - // Reference, resource, or so. - media = push(media, events.slice(close + 1)) - - // Media close. - media = push(media, [['exit', group, context]]) - splice(events, open, events.length, media) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelEnd(effects, ok, nok) { - const self = this - let index = self.events.length - /** @type {Token} */ - let labelStart - /** @type {boolean} */ - let defined - - // Find an opening. - while (index--) { - if ( - (self.events[index][1].type === 'labelImage' || - self.events[index][1].type === 'labelLink') && - !self.events[index][1]._balanced - ) { - labelStart = self.events[index][1] - break - } - } - return start - - /** - * Start of label end. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ``` - * - * @type {State} - */ - function start(code) { - // If there is not an okay opening. - if (!labelStart) { - return nok(code) - } - - // If the corresponding label (link) start is marked as inactive, - // it means we’d be wrapping a link, like this: - // - // ```markdown - // > | a [b [c](d) e](f) g. - // ^ - // ``` - // - // We can’t have that, so it’s just balanced brackets. - if (labelStart._inactive) { - return labelEndNok(code) - } - defined = self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize({ - start: labelStart.end, - end: self.now() - }) - ) - ) - effects.enter('labelEnd') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelEnd') - return after - } - - /** - * After `]`. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - // Note: `markdown-rs` also parses GFM footnotes here, which for us is in - // an extension. - - // Resource (`[asd](fgh)`)? - if (code === 40) { - return effects.attempt( - resourceConstruct, - labelEndOk, - defined ? labelEndOk : labelEndNok - )(code) - } - - // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? - if (code === 91) { - return effects.attempt( - referenceFullConstruct, - labelEndOk, - defined ? referenceNotFull : labelEndNok - )(code) - } - - // Shortcut (`[asd]`) reference? - return defined ? labelEndOk(code) : labelEndNok(code) - } - - /** - * After `]`, at `[`, but not at a full reference. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function referenceNotFull(code) { - return effects.attempt( - referenceCollapsedConstruct, - labelEndOk, - labelEndNok - )(code) - } - - /** - * Done, we found something. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndOk(code) { - // Note: `markdown-rs` does a bunch of stuff here. - return ok(code) - } - - /** - * Done, it’s nothing. - * - * There was an okay opening, but we didn’t match anything. - * - * ```markdown - * > | [a](b c - * ^ - * > | [a][b c - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndNok(code) { - labelStart._balanced = true - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeResource(effects, ok, nok) { - return resourceStart - - /** - * At a resource. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceStart(code) { - effects.enter('resource') - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - return resourceBefore - } - - /** - * In resource, after `(`, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceOpen)(code) - : resourceOpen(code) - } - - /** - * In resource, after optional whitespace, at `)` or a destination. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceOpen(code) { - if (code === 41) { - return resourceEnd(code) - } - return factoryDestination( - effects, - resourceDestinationAfter, - resourceDestinationMissing, - 'resourceDestination', - 'resourceDestinationLiteral', - 'resourceDestinationLiteralMarker', - 'resourceDestinationRaw', - 'resourceDestinationString', - 32 - )(code) - } - - /** - * In resource, after destination, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceBetween)(code) - : resourceEnd(code) - } - - /** - * At invalid destination. - * - * ```markdown - * > | [a](<<) b - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationMissing(code) { - return nok(code) - } - - /** - * In resource, after destination and whitespace, at `(` or title. - * - * ```markdown - * > | [a](b ) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBetween(code) { - if (code === 34 || code === 39 || code === 40) { - return factoryTitle( - effects, - resourceTitleAfter, - nok, - 'resourceTitle', - 'resourceTitleMarker', - 'resourceTitleString' - )(code) - } - return resourceEnd(code) - } - - /** - * In resource, after title, at optional whitespace. - * - * ```markdown - * > | [a](b "c") d - * ^ - * ``` - * - * @type {State} - */ - function resourceTitleAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceEnd)(code) - : resourceEnd(code) - } - - /** - * In resource, at `)`. - * - * ```markdown - * > | [a](b) d - * ^ - * ``` - * - * @type {State} - */ - function resourceEnd(code) { - if (code === 41) { - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - effects.exit('resource') - return ok - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceFull(effects, ok, nok) { - const self = this - return referenceFull - - /** - * In a reference (full), at the `[`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFull(code) { - return factoryLabel.call( - self, - effects, - referenceFullAfter, - referenceFullMissing, - 'reference', - 'referenceMarker', - 'referenceString' - )(code) - } - - /** - * In a reference (full), after `]`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullAfter(code) { - return self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - ) - ? ok(code) - : nok(code) - } - - /** - * In reference (full) that was missing. - * - * ```markdown - * > | [a][b d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullMissing(code) { - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceCollapsed(effects, ok, nok) { - return referenceCollapsedStart - - /** - * In reference (collapsed), at `[`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedStart(code) { - // We only attempt a collapsed label if there’s a `[`. - - effects.enter('reference') - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - return referenceCollapsedOpen - } - - /** - * In reference (collapsed), at `]`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedOpen(code) { - if (code === 93) { - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - effects.exit('reference') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartImage = { - name: 'labelStartImage', - tokenize: tokenizeLabelStartImage, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartImage(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (image) start. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelImage') - effects.enter('labelImageMarker') - effects.consume(code) - effects.exit('labelImageMarker') - return open - } - - /** - * After `!`, at `[`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 91) { - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelImage') - return after - } - return nok(code) - } - - /** - * After `![`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * This is needed in because, when GFM footnotes are enabled, images never - * form when started with a `^`. - * Instead, links form: - * - * ```markdown - * ![^a](b) - * - * ![^a][b] - * - * [b]: c - * ``` - * - * ```html - * <p>!<a href=\"b\">^a</a></p> - * <p>!<a href=\"c\">^a</a></p> - * ``` - * - * @type {State} - */ - function after(code) { - // To do: use a new field to do this, this is still needed for - // `micromark-extension-gfm-footnote`, but the `label-start-link` - // behavior isn’t. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -function classifyCharacter(code) { - if ( - code === null || - markdownLineEndingOrSpace(code) || - unicodeWhitespace(code) - ) { - return 1 - } - if (unicodePunctuation(code)) { - return 2 - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const attention = { - name: 'attention', - tokenize: tokenizeAttention, - resolveAll: resolveAllAttention -} - -/** - * Take all events and resolve attention to emphasis or strong. - * - * @type {Resolver} - */ -function resolveAllAttention(events, context) { - let index = -1 - /** @type {number} */ - let open - /** @type {Token} */ - let group - /** @type {Token} */ - let text - /** @type {Token} */ - let openingSequence - /** @type {Token} */ - let closingSequence - /** @type {number} */ - let use - /** @type {Array<Event>} */ - let nextEvents - /** @type {number} */ - let offset - - // Walk through all events. - // - // Note: performance of this is fine on an mb of normal markdown, but it’s - // a bottleneck for malicious stuff. - while (++index < events.length) { - // Find a token that can close. - if ( - events[index][0] === 'enter' && - events[index][1].type === 'attentionSequence' && - events[index][1]._close - ) { - open = index - - // Now walk back to find an opener. - while (open--) { - // Find a token that can open the closer. - if ( - events[open][0] === 'exit' && - events[open][1].type === 'attentionSequence' && - events[open][1]._open && - // If the markers are the same: - context.sliceSerialize(events[open][1]).charCodeAt(0) === - context.sliceSerialize(events[index][1]).charCodeAt(0) - ) { - // If the opening can close or the closing can open, - // and the close size *is not* a multiple of three, - // but the sum of the opening and closing size *is* multiple of three, - // then don’t match. - if ( - (events[open][1]._close || events[index][1]._open) && - (events[index][1].end.offset - events[index][1].start.offset) % 3 && - !( - (events[open][1].end.offset - - events[open][1].start.offset + - events[index][1].end.offset - - events[index][1].start.offset) % - 3 - ) - ) { - continue - } - - // Number of markers to use from the sequence. - use = - events[open][1].end.offset - events[open][1].start.offset > 1 && - events[index][1].end.offset - events[index][1].start.offset > 1 - ? 2 - : 1 - const start = Object.assign({}, events[open][1].end) - const end = Object.assign({}, events[index][1].start) - movePoint(start, -use) - movePoint(end, use) - openingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start, - end: Object.assign({}, events[open][1].end) - } - closingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start: Object.assign({}, events[index][1].start), - end - } - text = { - type: use > 1 ? 'strongText' : 'emphasisText', - start: Object.assign({}, events[open][1].end), - end: Object.assign({}, events[index][1].start) - } - group = { - type: use > 1 ? 'strong' : 'emphasis', - start: Object.assign({}, openingSequence.start), - end: Object.assign({}, closingSequence.end) - } - events[open][1].end = Object.assign({}, openingSequence.start) - events[index][1].start = Object.assign({}, closingSequence.end) - nextEvents = [] - - // If there are more markers in the opening, add them before. - if (events[open][1].end.offset - events[open][1].start.offset) { - nextEvents = push(nextEvents, [ - ['enter', events[open][1], context], - ['exit', events[open][1], context] - ]) - } - - // Opening. - nextEvents = push(nextEvents, [ - ['enter', group, context], - ['enter', openingSequence, context], - ['exit', openingSequence, context], - ['enter', text, context] - ]) - - // Always populated by defaults. - - // Between. - nextEvents = push( - nextEvents, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + 1, index), - context - ) - ) - - // Closing. - nextEvents = push(nextEvents, [ - ['exit', text, context], - ['enter', closingSequence, context], - ['exit', closingSequence, context], - ['exit', group, context] - ]) - - // If there are more markers in the closing, add them after. - if (events[index][1].end.offset - events[index][1].start.offset) { - offset = 2 - nextEvents = push(nextEvents, [ - ['enter', events[index][1], context], - ['exit', events[index][1], context] - ]) - } else { - offset = 0 - } - splice(events, open - 1, index - open + 3, nextEvents) - index = open + nextEvents.length - offset - 2 - break - } - } - } - } - - // Remove remaining sequences. - index = -1 - while (++index < events.length) { - if (events[index][1].type === 'attentionSequence') { - events[index][1].type = 'data' - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAttention(effects, ok) { - const attentionMarkers = this.parser.constructs.attentionMarkers.null - const previous = this.previous - const before = classifyCharacter(previous) - - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Before a sequence. - * - * ```markdown - * > | ** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - marker = code - effects.enter('attentionSequence') - return inside(code) - } - - /** - * In a sequence. - * - * ```markdown - * > | ** - * ^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - const token = effects.exit('attentionSequence') - - // To do: next major: move this to resolver, just like `markdown-rs`. - const after = classifyCharacter(code) - - // Always populated by defaults. - - const open = - !after || (after === 2 && before) || attentionMarkers.includes(code) - const close = - !before || (before === 2 && after) || attentionMarkers.includes(previous) - token._open = Boolean(marker === 42 ? open : open && (before || !close)) - token._close = Boolean(marker === 42 ? close : close && (after || !open)) - return ok(code) - } -} - -/** - * Move a point a bit. - * - * Note: `move` only works inside lines! It’s not possible to move past other - * chunks (replacement characters, tabs, or line endings). - * - * @param {Point} point - * @param {number} offset - * @returns {void} - */ -function movePoint(point, offset) { - point.column += offset - point.offset += offset - point._bufferIndex += offset -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const autolink = { - name: 'autolink', - tokenize: tokenizeAutolink -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAutolink(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of an autolink. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('autolink') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.enter('autolinkProtocol') - return open - } - - /** - * After `<`, at protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (asciiAlpha(code)) { - effects.consume(code) - return schemeOrEmailAtext - } - return emailAtext(code) - } - - /** - * At second byte of protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function schemeOrEmailAtext(code) { - // ASCII alphanumeric and `+`, `-`, and `.`. - if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { - // Count the previous alphabetical from `open` too. - size = 1 - return schemeInsideOrEmailAtext(code) - } - return emailAtext(code) - } - - /** - * In ambiguous protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function schemeInsideOrEmailAtext(code) { - if (code === 58) { - effects.consume(code) - size = 0 - return urlInside - } - - // ASCII alphanumeric and `+`, `-`, and `.`. - if ( - (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && - size++ < 32 - ) { - effects.consume(code) - return schemeInsideOrEmailAtext - } - size = 0 - return emailAtext(code) - } - - /** - * After protocol, in URL. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * ``` - * - * @type {State} - */ - function urlInside(code) { - if (code === 62) { - effects.exit('autolinkProtocol') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - - // ASCII control, space, or `<`. - if (code === null || code === 32 || code === 60 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return urlInside - } - - /** - * In email atext. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailAtext(code) { - if (code === 64) { - effects.consume(code) - return emailAtSignOrDot - } - if (asciiAtext(code)) { - effects.consume(code) - return emailAtext - } - return nok(code) - } - - /** - * In label, after at-sign or dot. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ ^ - * ``` - * - * @type {State} - */ - function emailAtSignOrDot(code) { - return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) - } - - /** - * In label, where `.` and `>` are allowed. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailLabel(code) { - if (code === 46) { - effects.consume(code) - size = 0 - return emailAtSignOrDot - } - if (code === 62) { - // Exit, then change the token type. - effects.exit('autolinkProtocol').type = 'autolinkEmail' - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - return emailValue(code) - } - - /** - * In label, where `.` and `>` are *not* allowed. - * - * Though, this is also used in `emailLabel` to parse other values. - * - * ```markdown - * > | a<user.name@ex-ample.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailValue(code) { - // ASCII alphanumeric or `-`. - if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { - const next = code === 45 ? emailValue : emailLabel - effects.consume(code) - return next - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const htmlText = { - name: 'htmlText', - tokenize: tokenizeHtmlText -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlText(effects, ok, nok) { - const self = this - /** @type {NonNullable<Code> | undefined} */ - let marker - /** @type {number} */ - let index - /** @type {State} */ - let returnState - return start - - /** - * Start of HTML (text). - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('htmlText') - effects.enter('htmlTextData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | a <b> c - * ^ - * > | a <!doctype> c - * ^ - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - return instruction - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagOpen - } - return nok(code) - } - - /** - * After `<!`, at declaration, comment, or CDATA. - * - * ```markdown - * > | a <!doctype> c - * ^ - * > | a <!--b--> c - * ^ - * > | a <![CDATA[>&<]]> c - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - index = 0 - return cdataOpenInside - } - if (asciiAlpha(code)) { - effects.consume(code) - return declaration - } - return nok(code) - } - - /** - * In a comment, after `<!-`, at another `-`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return nok(code) - } - - /** - * In comment. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function comment(code) { - if (code === null) { - return nok(code) - } - if (code === 45) { - effects.consume(code) - return commentClose - } - if (markdownLineEnding(code)) { - returnState = comment - return lineEndingBefore(code) - } - effects.consume(code) - return comment - } - - /** - * In comment, after `-`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentClose(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return comment(code) - } - - /** - * In comment, after `--`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentEnd(code) { - return code === 62 - ? end(code) - : code === 45 - ? commentClose(code) - : comment(code) - } - - /** - * After `<![`, in CDATA, expecting `CDATA[`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - return index === value.length ? cdata : cdataOpenInside - } - return nok(code) - } - - /** - * In CDATA. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^^^ - * ``` - * - * @type {State} - */ - function cdata(code) { - if (code === null) { - return nok(code) - } - if (code === 93) { - effects.consume(code) - return cdataClose - } - if (markdownLineEnding(code)) { - returnState = cdata - return lineEndingBefore(code) - } - effects.consume(code) - return cdata - } - - /** - * In CDATA, after `]`, at another `]`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataClose(code) { - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In CDATA, after `]]`, at `>`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataEnd(code) { - if (code === 62) { - return end(code) - } - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In declaration. - * - * ```markdown - * > | a <!b> c - * ^ - * ``` - * - * @type {State} - */ - function declaration(code) { - if (code === null || code === 62) { - return end(code) - } - if (markdownLineEnding(code)) { - returnState = declaration - return lineEndingBefore(code) - } - effects.consume(code) - return declaration - } - - /** - * In instruction. - * - * ```markdown - * > | a <?b?> c - * ^ - * ``` - * - * @type {State} - */ - function instruction(code) { - if (code === null) { - return nok(code) - } - if (code === 63) { - effects.consume(code) - return instructionClose - } - if (markdownLineEnding(code)) { - returnState = instruction - return lineEndingBefore(code) - } - effects.consume(code) - return instruction - } - - /** - * In instruction, after `?`, at `>`. - * - * ```markdown - * > | a <?b?> c - * ^ - * ``` - * - * @type {State} - */ - function instructionClose(code) { - return code === 62 ? end(code) : instruction(code) - } - - /** - * After `</`, in closing tag, at tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagClose - } - return nok(code) - } - - /** - * After `</x`, in a tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagClose(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagClose - } - return tagCloseBetween(code) - } - - /** - * In closing tag, after tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseBetween(code) { - if (markdownLineEnding(code)) { - returnState = tagCloseBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagCloseBetween - } - return end(code) - } - - /** - * After `<x`, in opening tag name. - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function tagOpen(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagOpen - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In opening tag, after tag name. - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function tagOpenBetween(code) { - if (code === 47) { - effects.consume(code) - return end - } - - // ASCII alphabetical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return tagOpenAttributeName - } - if (markdownLineEnding(code)) { - returnState = tagOpenBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenBetween - } - return end(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | a <b c> d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeName(code) { - // ASCII alphabetical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return tagOpenAttributeName - } - return tagOpenAttributeNameAfter(code) - } - - /** - * After attribute name, before initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | a <b c> d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeNameAfter - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeNameAfter - } - return tagOpenBetween(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | a <b c=d> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - marker = code - return tagOpenAttributeValueQuoted - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueBefore - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuoted(code) { - if (code === marker) { - effects.consume(code) - marker = undefined - return tagOpenAttributeValueQuotedAfter - } - if (code === null) { - return nok(code) - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueQuoted - return lineEndingBefore(code) - } - effects.consume(code) - return tagOpenAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | a <b c=d> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 60 || - code === 61 || - code === 96 - ) { - return nok(code) - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the end - * of the tag. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In certain circumstances of a tag where only an `>` is allowed. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function end(code) { - if (code === 62) { - effects.consume(code) - effects.exit('htmlTextData') - effects.exit('htmlText') - return ok - } - return nok(code) - } - - /** - * At eol. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * > | a <!--a - * ^ - * | b--> - * ``` - * - * @type {State} - */ - function lineEndingBefore(code) { - effects.exit('htmlTextData') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineEndingAfter - } - - /** - * After eol, at optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a <!--a - * > | b--> - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfter(code) { - // Always populated by defaults. - - return markdownSpace(code) - ? factorySpace( - effects, - lineEndingAfterPrefix, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : lineEndingAfterPrefix(code) - } - - /** - * After eol, after optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a <!--a - * > | b--> - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfterPrefix(code) { - effects.enter('htmlTextData') - return returnState(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartLink = { - name: 'labelStartLink', - tokenize: tokenizeLabelStartLink, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartLink(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (link) start. - * - * ```markdown - * > | a [b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelLink') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelLink') - return after - } - - /** @type {State} */ - function after(code) { - // To do: this isn’t needed in `micromark-extension-gfm-footnote`, - // remove. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const hardBreakEscape = { - name: 'hardBreakEscape', - tokenize: tokenizeHardBreakEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHardBreakEscape(effects, ok, nok) { - return start - - /** - * Start of a hard break (escape). - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('hardBreakEscape') - effects.consume(code) - return after - } - - /** - * After `\`, at eol. - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownLineEnding(code)) { - effects.exit('hardBreakEscape') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Previous} Previous - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const codeText = { - name: 'codeText', - tokenize: tokenizeCodeText, - resolve: resolveCodeText, - previous -} - -// To do: next major: don’t resolve, like `markdown-rs`. -/** @type {Resolver} */ -function resolveCodeText(events) { - let tailExitIndex = events.length - 4 - let headEnterIndex = 3 - /** @type {number} */ - let index - /** @type {number | undefined} */ - let enter - - // If we start and end with an EOL or a space. - if ( - (events[headEnterIndex][1].type === 'lineEnding' || - events[headEnterIndex][1].type === 'space') && - (events[tailExitIndex][1].type === 'lineEnding' || - events[tailExitIndex][1].type === 'space') - ) { - index = headEnterIndex - - // And we have data. - while (++index < tailExitIndex) { - if (events[index][1].type === 'codeTextData') { - // Then we have padding. - events[headEnterIndex][1].type = 'codeTextPadding' - events[tailExitIndex][1].type = 'codeTextPadding' - headEnterIndex += 2 - tailExitIndex -= 2 - break - } - } - } - - // Merge adjacent spaces and data. - index = headEnterIndex - 1 - tailExitIndex++ - while (++index <= tailExitIndex) { - if (enter === undefined) { - if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { - enter = index - } - } else if ( - index === tailExitIndex || - events[index][1].type === 'lineEnding' - ) { - events[enter][1].type = 'codeTextData' - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - tailExitIndex -= index - enter - 2 - index = enter + 2 - } - enter = undefined - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Previous} - */ -function previous(code) { - // If there is a previous code, there will always be a tail. - return ( - code !== 96 || - this.events[this.events.length - 1][1].type === 'characterEscape' - ) -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeText(effects, ok, nok) { - const self = this - let sizeOpen = 0 - /** @type {number} */ - let size - /** @type {Token} */ - let token - return start - - /** - * Start of code (text). - * - * ```markdown - * > | `a` - * ^ - * > | \`a` - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('codeText') - effects.enter('codeTextSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 96) { - effects.consume(code) - sizeOpen++ - return sequenceOpen - } - effects.exit('codeTextSequence') - return between(code) - } - - /** - * Between something and something else. - * - * ```markdown - * > | `a` - * ^^ - * ``` - * - * @type {State} - */ - function between(code) { - // EOF. - if (code === null) { - return nok(code) - } - - // To do: next major: don’t do spaces in resolve, but when compiling, - // like `markdown-rs`. - // Tabs don’t work, and virtual spaces don’t make sense. - if (code === 32) { - effects.enter('space') - effects.consume(code) - effects.exit('space') - return between - } - - // Closing fence? Could also be data. - if (code === 96) { - token = effects.enter('codeTextSequence') - size = 0 - return sequenceClose(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return between - } - - // Data. - effects.enter('codeTextData') - return data(code) - } - - /** - * In data. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if ( - code === null || - code === 32 || - code === 96 || - markdownLineEnding(code) - ) { - effects.exit('codeTextData') - return between(code) - } - effects.consume(code) - return data - } - - /** - * In closing sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - // More. - if (code === 96) { - effects.consume(code) - size++ - return sequenceClose - } - - // Done! - if (size === sizeOpen) { - effects.exit('codeTextSequence') - effects.exit('codeText') - return ok(code) - } - - // More or less accents: mark as data. - token.type = 'codeTextData' - return data(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - */ - - - - -/** @satisfies {Extension['document']} */ -const constructs_document = { - [42]: list, - [43]: list, - [45]: list, - [48]: list, - [49]: list, - [50]: list, - [51]: list, - [52]: list, - [53]: list, - [54]: list, - [55]: list, - [56]: list, - [57]: list, - [62]: blockQuote -} - -/** @satisfies {Extension['contentInitial']} */ -const contentInitial = { - [91]: definition -} - -/** @satisfies {Extension['flowInitial']} */ -const flowInitial = { - [-2]: codeIndented, - [-1]: codeIndented, - [32]: codeIndented -} - -/** @satisfies {Extension['flow']} */ -const constructs_flow = { - [35]: headingAtx, - [42]: thematicBreak, - [45]: [setextUnderline, thematicBreak], - [60]: htmlFlow, - [61]: setextUnderline, - [95]: thematicBreak, - [96]: codeFenced, - [126]: codeFenced -} - -/** @satisfies {Extension['string']} */ -const constructs_string = { - [38]: characterReference, - [92]: characterEscape -} - -/** @satisfies {Extension['text']} */ -const constructs_text = { - [-5]: lineEnding, - [-4]: lineEnding, - [-3]: lineEnding, - [33]: labelStartImage, - [38]: characterReference, - [42]: attention, - [60]: [autolink, htmlText], - [91]: labelStartLink, - [92]: [hardBreakEscape, characterEscape], - [93]: labelEnd, - [95]: attention, - [96]: codeText -} - -/** @satisfies {Extension['insideSpan']} */ -const insideSpan = { - null: [attention, resolver] -} - -/** @satisfies {Extension['attentionMarkers']} */ -const attentionMarkers = { - null: [42, 95] -} - -/** @satisfies {Extension['disable']} */ -const disable = { - null: [] -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js -/** - * @typedef {import('micromark-util-types').Create} Create - * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - */ - - - - - - - - - -/** - * @param {ParseOptions | null | undefined} [options] - * @returns {ParseContext} - */ -function parse(options) { - const settings = options || {} - const constructs = - /** @type {FullNormalizedExtension} */ - combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) - - /** @type {ParseContext} */ - const parser = { - defined: [], - lazy: {}, - constructs, - content: create(content), - document: create(document_document), - flow: create(flow), - string: create(string), - text: create(text_text) - } - return parser - - /** - * @param {InitialConstruct} initial - */ - function create(initial) { - return creator - /** @type {Create} */ - function creator(from) { - return createTokenizer(parser, initial, from) - } - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Value} Value - */ - -/** - * @callback Preprocessor - * @param {Value} value - * @param {Encoding | null | undefined} [encoding] - * @param {boolean | null | undefined} [end=false] - * @returns {Array<Chunk>} - */ - -const search = /[\0\t\n\r]/g - -/** - * @returns {Preprocessor} - */ -function preprocess() { - let column = 1 - let buffer = '' - /** @type {boolean | undefined} */ - let start = true - /** @type {boolean | undefined} */ - let atCarriageReturn - return preprocessor - - /** @type {Preprocessor} */ - function preprocessor(value, encoding, end) { - /** @type {Array<Chunk>} */ - const chunks = [] - /** @type {RegExpMatchArray | null} */ - let match - /** @type {number} */ - let next - /** @type {number} */ - let startPosition - /** @type {number} */ - let endPosition - /** @type {Code} */ - let code - - // @ts-expect-error `Buffer` does allow an encoding. - value = buffer + value.toString(encoding) - startPosition = 0 - buffer = '' - if (start) { - // To do: `markdown-rs` actually parses BOMs (byte order mark). - if (value.charCodeAt(0) === 65279) { - startPosition++ - } - start = undefined - } - while (startPosition < value.length) { - search.lastIndex = startPosition - match = search.exec(value) - endPosition = - match && match.index !== undefined ? match.index : value.length - code = value.charCodeAt(endPosition) - if (!match) { - buffer = value.slice(startPosition) - break - } - if (code === 10 && startPosition === endPosition && atCarriageReturn) { - chunks.push(-3) - atCarriageReturn = undefined - } else { - if (atCarriageReturn) { - chunks.push(-5) - atCarriageReturn = undefined - } - if (startPosition < endPosition) { - chunks.push(value.slice(startPosition, endPosition)) - column += endPosition - startPosition - } - switch (code) { - case 0: { - chunks.push(65533) - column++ - break - } - case 9: { - next = Math.ceil(column / 4) * 4 - chunks.push(-2) - while (column++ < next) chunks.push(-1) - break - } - case 10: { - chunks.push(-4) - column = 1 - break - } - default: { - atCarriageReturn = true - column = 1 - } - } - } - startPosition = endPosition + 1 - } - if (end) { - if (atCarriageReturn) chunks.push(-5) - if (buffer) chunks.push(buffer) - chunks.push(null) - } - return chunks - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js -/** - * @typedef {import('micromark-util-types').Event} Event - */ - - - -/** - * @param {Array<Event>} events - * @returns {Array<Event>} - */ -function postprocess(events) { - while (!subtokenize(events)) { - // Empty - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -function decodeNumericCharacterReference(value, base) { - const code = Number.parseInt(value, base) - if ( - // C0 except for HT, LF, FF, CR, space. - code < 9 || - code === 11 || - (code > 13 && code < 32) || - // Control character (DEL) of C0, and C1 controls. - (code > 126 && code < 160) || - // Lone high surrogates and low surrogates. - (code > 55295 && code < 57344) || - // Noncharacters. - (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || - (code & 65535) === 65535 || - (code & 65535) === 65534 /* eslint-enable no-bitwise */ || - // Out of range - code > 1114111 - ) { - return '\uFFFD' - } - return String.fromCharCode(code) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js - - -const characterEscapeOrReference = - /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi - -/** - * Decode markdown strings (which occur in places such as fenced code info - * strings, destinations, labels, and titles). - * - * The “string” content type allows character escapes and -references. - * This decodes those. - * - * @param {string} value - * Value to decode. - * @returns {string} - * Decoded value. - */ -function decodeString(value) { - return value.replace(characterEscapeOrReference, decode) -} - -/** - * @param {string} $0 - * @param {string} $1 - * @param {string} $2 - * @returns {string} - */ -function decode($0, $1, $2) { - if ($1) { - // Escape. - return $1 - } - - // Reference. - const head = $2.charCodeAt(0) - if (head === 35) { - const head = $2.charCodeAt(1) - const hex = head === 120 || head === 88 - return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) - } - return decodeNamedCharacterReference($2) || $0 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Point} Point - * @typedef {import('unist').Position} Position - */ - -/** - * @typedef NodeLike - * @property {string} type - * @property {PositionLike | null | undefined} [position] - * - * @typedef PositionLike - * @property {PointLike | null | undefined} [start] - * @property {PointLike | null | undefined} [end] - * - * @typedef PointLike - * @property {number | null | undefined} [line] - * @property {number | null | undefined} [column] - * @property {number | null | undefined} [offset] - */ - -/** - * Serialize the positional info of a point, position (start and end points), - * or node. - * - * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] - * Node, position, or point. - * @returns {string} - * Pretty printed positional info of a node (`string`). - * - * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) - * or a point `l:c` (when given `point`), where `l` stands for line, `c` for - * column, `s` for `start`, and `e` for end. - * An empty string (`''`) is returned if the given value is neither `node`, - * `position`, nor `point`. - */ -function stringifyPosition(value) { - // Nothing. - if (!value || typeof value !== 'object') { - return '' - } - - // Node. - if ('position' in value || 'type' in value) { - return position(value.position) - } - - // Position. - if ('start' in value || 'end' in value) { - return position(value) - } - - // Point. - if ('line' in value || 'column' in value) { - return point(value) - } - - // ? - return '' -} - -/** - * @param {Point | PointLike | null | undefined} point - * @returns {string} - */ -function point(point) { - return index(point && point.line) + ':' + index(point && point.column) -} - -/** - * @param {Position | PositionLike | null | undefined} pos - * @returns {string} - */ -function position(pos) { - return point(pos && pos.start) + '-' + point(pos && pos.end) -} - -/** - * @param {number | null | undefined} value - * @returns {number} - */ -function index(value) { - return value && typeof value === 'number' ? value : 1 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js -/** - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Value} Value - * - * @typedef {import('unist').Parent} UnistParent - * @typedef {import('unist').Point} Point - * - * @typedef {import('mdast').PhrasingContent} PhrasingContent - * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent - * @typedef {import('mdast').Content} Content - * @typedef {import('mdast').Break} Break - * @typedef {import('mdast').Blockquote} Blockquote - * @typedef {import('mdast').Code} Code - * @typedef {import('mdast').Definition} Definition - * @typedef {import('mdast').Emphasis} Emphasis - * @typedef {import('mdast').Heading} Heading - * @typedef {import('mdast').HTML} HTML - * @typedef {import('mdast').Image} Image - * @typedef {import('mdast').ImageReference} ImageReference - * @typedef {import('mdast').InlineCode} InlineCode - * @typedef {import('mdast').Link} Link - * @typedef {import('mdast').LinkReference} LinkReference - * @typedef {import('mdast').List} List - * @typedef {import('mdast').ListItem} ListItem - * @typedef {import('mdast').Paragraph} Paragraph - * @typedef {import('mdast').Root} Root - * @typedef {import('mdast').Strong} Strong - * @typedef {import('mdast').Text} Text - * @typedef {import('mdast').ThematicBreak} ThematicBreak - * @typedef {import('mdast').ReferenceType} ReferenceType - * @typedef {import('../index.js').CompileData} CompileData - */ - -/** - * @typedef {Root | Content} Node - * @typedef {Extract<Node, UnistParent>} Parent - * - * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment - */ - -/** - * @callback Transform - * Extra transform, to change the AST afterwards. - * @param {Root} tree - * Tree to transform. - * @returns {Root | undefined | null | void} - * New tree or nothing (in which case the current tree is used). - * - * @callback Handle - * Handle a token. - * @param {CompileContext} this - * Context. - * @param {Token} token - * Current token. - * @returns {void} - * Nothing. - * - * @typedef {Record<string, Handle>} Handles - * Token types mapping to handles - * - * @callback OnEnterError - * Handle the case where the `right` token is open, but it is closed (by the - * `left` token) or because we reached the end of the document. - * @param {Omit<CompileContext, 'sliceSerialize'>} this - * Context. - * @param {Token | undefined} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @callback OnExitError - * Handle the case where the `right` token is open but it is closed by - * exiting the `left` token. - * @param {Omit<CompileContext, 'sliceSerialize'>} this - * Context. - * @param {Token} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @typedef {[Token, OnEnterError | undefined]} TokenTuple - * Open token on the stack, with an optional error handler for when - * that token isn’t closed properly. - */ - -/** - * @typedef Config - * Configuration. - * - * We have our defaults, but extensions will add more. - * @property {Array<string>} canContainEols - * Token types where line endings are used. - * @property {Handles} enter - * Opening handles. - * @property {Handles} exit - * Closing handles. - * @property {Array<Transform>} transforms - * Tree transforms. - * - * @typedef {Partial<Config>} Extension - * Change how markdown tokens from micromark are turned into mdast. - * - * @typedef CompileContext - * mdast compiler context. - * @property {Array<Node | Fragment>} stack - * Stack of nodes. - * @property {Array<TokenTuple>} tokenStack - * Stack of tokens. - * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData - * Get data from the key/value store. - * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData - * Set data into the key/value store. - * @property {(this: CompileContext) => void} buffer - * Capture some of the output data. - * @property {(this: CompileContext) => string} resume - * Stop capturing and access the output data. - * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter - * Enter a token. - * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit - * Exit a token. - * @property {TokenizeContext['sliceSerialize']} sliceSerialize - * Get the string value of a token. - * @property {Config} config - * Configuration. - * - * @typedef FromMarkdownOptions - * Configuration for how to build mdast. - * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] - * Extensions for this utility to change how tokens are turned into a tree. - * - * @typedef {ParseOptions & FromMarkdownOptions} Options - * Configuration. - */ - -// To do: micromark: create a registry of tokens? -// To do: next major: don’t return given `Node` from `enter`. -// To do: next major: remove setter/getter. - - - - - - - - - - -const lib_own = {}.hasOwnProperty - -/** - * @param value - * Markdown to parse. - * @param encoding - * Character encoding for when `value` is `Buffer`. - * @param options - * Configuration. - * @returns - * mdast tree. - */ -const fromMarkdown = - /** - * @type {( - * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & - * ((value: Value, options?: Options | null | undefined) => Root) - * )} - */ - - /** - * @param {Value} value - * @param {Encoding | Options | null | undefined} [encoding] - * @param {Options | null | undefined} [options] - * @returns {Root} - */ - function (value, encoding, options) { - if (typeof encoding !== 'string') { - options = encoding - encoding = undefined - } - return compiler(options)( - postprocess( - parse(options).document().write(preprocess()(value, encoding, true)) - ) - ) - } - -/** - * Note this compiler only understand complete buffering, not streaming. - * - * @param {Options | null | undefined} [options] - */ -function compiler(options) { - /** @type {Config} */ - const config = { - transforms: [], - canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], - enter: { - autolink: opener(link), - autolinkProtocol: onenterdata, - autolinkEmail: onenterdata, - atxHeading: opener(heading), - blockQuote: opener(blockQuote), - characterEscape: onenterdata, - characterReference: onenterdata, - codeFenced: opener(codeFlow), - codeFencedFenceInfo: buffer, - codeFencedFenceMeta: buffer, - codeIndented: opener(codeFlow, buffer), - codeText: opener(codeText, buffer), - codeTextData: onenterdata, - data: onenterdata, - codeFlowValue: onenterdata, - definition: opener(definition), - definitionDestinationString: buffer, - definitionLabelString: buffer, - definitionTitleString: buffer, - emphasis: opener(emphasis), - hardBreakEscape: opener(hardBreak), - hardBreakTrailing: opener(hardBreak), - htmlFlow: opener(html, buffer), - htmlFlowData: onenterdata, - htmlText: opener(html, buffer), - htmlTextData: onenterdata, - image: opener(image), - label: buffer, - link: opener(link), - listItem: opener(listItem), - listItemValue: onenterlistitemvalue, - listOrdered: opener(list, onenterlistordered), - listUnordered: opener(list), - paragraph: opener(paragraph), - reference: onenterreference, - referenceString: buffer, - resourceDestinationString: buffer, - resourceTitleString: buffer, - setextHeading: opener(heading), - strong: opener(strong), - thematicBreak: opener(thematicBreak) - }, - exit: { - atxHeading: closer(), - atxHeadingSequence: onexitatxheadingsequence, - autolink: closer(), - autolinkEmail: onexitautolinkemail, - autolinkProtocol: onexitautolinkprotocol, - blockQuote: closer(), - characterEscapeValue: onexitdata, - characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, - characterReferenceMarkerNumeric: onexitcharacterreferencemarker, - characterReferenceValue: onexitcharacterreferencevalue, - codeFenced: closer(onexitcodefenced), - codeFencedFence: onexitcodefencedfence, - codeFencedFenceInfo: onexitcodefencedfenceinfo, - codeFencedFenceMeta: onexitcodefencedfencemeta, - codeFlowValue: onexitdata, - codeIndented: closer(onexitcodeindented), - codeText: closer(onexitcodetext), - codeTextData: onexitdata, - data: onexitdata, - definition: closer(), - definitionDestinationString: onexitdefinitiondestinationstring, - definitionLabelString: onexitdefinitionlabelstring, - definitionTitleString: onexitdefinitiontitlestring, - emphasis: closer(), - hardBreakEscape: closer(onexithardbreak), - hardBreakTrailing: closer(onexithardbreak), - htmlFlow: closer(onexithtmlflow), - htmlFlowData: onexitdata, - htmlText: closer(onexithtmltext), - htmlTextData: onexitdata, - image: closer(onexitimage), - label: onexitlabel, - labelText: onexitlabeltext, - lineEnding: onexitlineending, - link: closer(onexitlink), - listItem: closer(), - listOrdered: closer(), - listUnordered: closer(), - paragraph: closer(), - referenceString: onexitreferencestring, - resourceDestinationString: onexitresourcedestinationstring, - resourceTitleString: onexitresourcetitlestring, - resource: onexitresource, - setextHeading: closer(onexitsetextheading), - setextHeadingLineSequence: onexitsetextheadinglinesequence, - setextHeadingText: onexitsetextheadingtext, - strong: closer(), - thematicBreak: closer() - } - } - configure(config, (options || {}).mdastExtensions || []) - - /** @type {CompileData} */ - const data = {} - return compile - - /** - * Turn micromark events into an mdast tree. - * - * @param {Array<Event>} events - * Events. - * @returns {Root} - * mdast tree. - */ - function compile(events) { - /** @type {Root} */ - let tree = { - type: 'root', - children: [] - } - /** @type {Omit<CompileContext, 'sliceSerialize'>} */ - const context = { - stack: [tree], - tokenStack: [], - config, - enter, - exit, - buffer, - resume, - setData, - getData - } - /** @type {Array<number>} */ - const listStack = [] - let index = -1 - while (++index < events.length) { - // We preprocess lists to add `listItem` tokens, and to infer whether - // items the list itself are spread out. - if ( - events[index][1].type === 'listOrdered' || - events[index][1].type === 'listUnordered' - ) { - if (events[index][0] === 'enter') { - listStack.push(index) - } else { - const tail = listStack.pop() - index = prepareList(events, tail, index) - } - } - } - index = -1 - while (++index < events.length) { - const handler = config[events[index][0]] - if (lib_own.call(handler, events[index][1].type)) { - handler[events[index][1].type].call( - Object.assign( - { - sliceSerialize: events[index][2].sliceSerialize - }, - context - ), - events[index][1] - ) - } - } - - // Handle tokens still being open. - if (context.tokenStack.length > 0) { - const tail = context.tokenStack[context.tokenStack.length - 1] - const handler = tail[1] || defaultOnError - handler.call(context, undefined, tail[0]) - } - - // Figure out `root` position. - tree.position = { - start: lib_point( - events.length > 0 - ? events[0][1].start - : { - line: 1, - column: 1, - offset: 0 - } - ), - end: lib_point( - events.length > 0 - ? events[events.length - 2][1].end - : { - line: 1, - column: 1, - offset: 0 - } - ) - } - - // Call transforms. - index = -1 - while (++index < config.transforms.length) { - tree = config.transforms[index](tree) || tree - } - return tree - } - - /** - * @param {Array<Event>} events - * @param {number} start - * @param {number} length - * @returns {number} - */ - function prepareList(events, start, length) { - let index = start - 1 - let containerBalance = -1 - let listSpread = false - /** @type {Token | undefined} */ - let listItem - /** @type {number | undefined} */ - let lineIndex - /** @type {number | undefined} */ - let firstBlankLineIndex - /** @type {boolean | undefined} */ - let atMarker - while (++index <= length) { - const event = events[index] - if ( - event[1].type === 'listUnordered' || - event[1].type === 'listOrdered' || - event[1].type === 'blockQuote' - ) { - if (event[0] === 'enter') { - containerBalance++ - } else { - containerBalance-- - } - atMarker = undefined - } else if (event[1].type === 'lineEndingBlank') { - if (event[0] === 'enter') { - if ( - listItem && - !atMarker && - !containerBalance && - !firstBlankLineIndex - ) { - firstBlankLineIndex = index - } - atMarker = undefined - } - } else if ( - event[1].type === 'linePrefix' || - event[1].type === 'listItemValue' || - event[1].type === 'listItemMarker' || - event[1].type === 'listItemPrefix' || - event[1].type === 'listItemPrefixWhitespace' - ) { - // Empty. - } else { - atMarker = undefined - } - if ( - (!containerBalance && - event[0] === 'enter' && - event[1].type === 'listItemPrefix') || - (containerBalance === -1 && - event[0] === 'exit' && - (event[1].type === 'listUnordered' || - event[1].type === 'listOrdered')) - ) { - if (listItem) { - let tailIndex = index - lineIndex = undefined - while (tailIndex--) { - const tailEvent = events[tailIndex] - if ( - tailEvent[1].type === 'lineEnding' || - tailEvent[1].type === 'lineEndingBlank' - ) { - if (tailEvent[0] === 'exit') continue - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - listSpread = true - } - tailEvent[1].type = 'lineEnding' - lineIndex = tailIndex - } else if ( - tailEvent[1].type === 'linePrefix' || - tailEvent[1].type === 'blockQuotePrefix' || - tailEvent[1].type === 'blockQuotePrefixWhitespace' || - tailEvent[1].type === 'blockQuoteMarker' || - tailEvent[1].type === 'listItemIndent' - ) { - // Empty - } else { - break - } - } - if ( - firstBlankLineIndex && - (!lineIndex || firstBlankLineIndex < lineIndex) - ) { - listItem._spread = true - } - - // Fix position. - listItem.end = Object.assign( - {}, - lineIndex ? events[lineIndex][1].start : event[1].end - ) - events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) - index++ - length++ - } - - // Create a new list item. - if (event[1].type === 'listItemPrefix') { - listItem = { - type: 'listItem', - _spread: false, - start: Object.assign({}, event[1].start), - // @ts-expect-error: we’ll add `end` in a second. - end: undefined - } - // @ts-expect-error: `listItem` is most definitely defined, TS... - events.splice(index, 0, ['enter', listItem, event[2]]) - index++ - length++ - firstBlankLineIndex = undefined - atMarker = true - } - } - } - events[start][1]._spread = listSpread - return length - } - - /** - * Set data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @param {CompileData[Key]} [value] - * New value. - * @returns {void} - * Nothing. - */ - function setData(key, value) { - data[key] = value - } - - /** - * Get data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @returns {CompileData[Key]} - * Value. - */ - function getData(key) { - return data[key] - } - - /** - * Create an opener handle. - * - * @param {(token: Token) => Node} create - * Create a node. - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function opener(create, and) { - return open - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function open(token) { - enter.call(this, create(token), token) - if (and) and.call(this, token) - } - } - - /** - * @this {CompileContext} - * @returns {void} - */ - function buffer() { - this.stack.push({ - type: 'fragment', - children: [] - }) - } - - /** - * @template {Node} Kind - * Node type. - * @this {CompileContext} - * Context. - * @param {Kind} node - * Node to enter. - * @param {Token} token - * Corresponding token. - * @param {OnEnterError | undefined} [errorHandler] - * Handle the case where this token is open, but it is closed by something else. - * @returns {Kind} - * The given node. - */ - function enter(node, token, errorHandler) { - const parent = this.stack[this.stack.length - 1] - // @ts-expect-error: Assume `Node` can exist as a child of `parent`. - parent.children.push(node) - this.stack.push(node) - this.tokenStack.push([token, errorHandler]) - // @ts-expect-error: `end` will be patched later. - node.position = { - start: lib_point(token.start) - } - return node - } - - /** - * Create a closer handle. - * - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function closer(and) { - return close - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function close(token) { - if (and) and.call(this, token) - exit.call(this, token) - } - } - - /** - * @this {CompileContext} - * Context. - * @param {Token} token - * Corresponding token. - * @param {OnExitError | undefined} [onExitError] - * Handle the case where another token is open. - * @returns {Node} - * The closed node. - */ - function exit(token, onExitError) { - const node = this.stack.pop() - const open = this.tokenStack.pop() - if (!open) { - throw new Error( - 'Cannot close `' + - token.type + - '` (' + - stringifyPosition({ - start: token.start, - end: token.end - }) + - '): it’s not open' - ) - } else if (open[0].type !== token.type) { - if (onExitError) { - onExitError.call(this, token, open[0]) - } else { - const handler = open[1] || defaultOnError - handler.call(this, token, open[0]) - } - } - node.position.end = lib_point(token.end) - return node - } - - /** - * @this {CompileContext} - * @returns {string} - */ - function resume() { - return lib_toString(this.stack.pop()) - } - - // - // Handlers. - // - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistordered() { - setData('expectingFirstListItemValue', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistitemvalue(token) { - if (getData('expectingFirstListItemValue')) { - const ancestor = this.stack[this.stack.length - 2] - ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) - setData('expectingFirstListItemValue') - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfenceinfo() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.lang = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfencemeta() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.meta = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfence() { - // Exit if this is the closing fence. - if (getData('flowCodeInside')) return - this.buffer() - setData('flowCodeInside', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefenced() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') - setData('flowCodeInside') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodeindented() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/(\r?\n|\r)$/g, '') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitionlabelstring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - node.label = label - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiontitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiondestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitatxheadingsequence(token) { - const node = this.stack[this.stack.length - 1] - if (!node.depth) { - const depth = this.sliceSerialize(token).length - node.depth = depth - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadingtext() { - setData('setextHeadingSlurpLineEnding', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadinglinesequence(token) { - const node = this.stack[this.stack.length - 1] - node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheading() { - setData('setextHeadingSlurpLineEnding') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterdata(token) { - const node = this.stack[this.stack.length - 1] - let tail = node.children[node.children.length - 1] - if (!tail || tail.type !== 'text') { - // Add a new text node. - tail = text() - // @ts-expect-error: we’ll add `end` later. - tail.position = { - start: lib_point(token.start) - } - // @ts-expect-error: Assume `parent` accepts `text`. - node.children.push(tail) - } - this.stack.push(tail) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitdata(token) { - const tail = this.stack.pop() - tail.value += this.sliceSerialize(token) - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlineending(token) { - const context = this.stack[this.stack.length - 1] - // If we’re at a hard break, include the line ending in there. - if (getData('atHardBreak')) { - const tail = context.children[context.children.length - 1] - tail.position.end = lib_point(token.end) - setData('atHardBreak') - return - } - if ( - !getData('setextHeadingSlurpLineEnding') && - config.canContainEols.includes(context.type) - ) { - onenterdata.call(this, token) - onexitdata.call(this, token) - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithardbreak() { - setData('atHardBreak', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmlflow() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmltext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcodetext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlink() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitimage() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabeltext(token) { - const string = this.sliceSerialize(token) - const ancestor = this.stack[this.stack.length - 2] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - ancestor.label = decodeString(string) - // @ts-expect-error: same as above. - ancestor.identifier = normalizeIdentifier(string).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabel() { - const fragment = this.stack[this.stack.length - 1] - const value = this.resume() - const node = this.stack[this.stack.length - 1] - // Assume a reference. - setData('inReference', true) - if (node.type === 'link') { - /** @type {Array<StaticPhrasingContent>} */ - // @ts-expect-error: Assume static phrasing content. - const children = fragment.children - node.children = children - } else { - node.alt = value - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcedestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcetitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresource() { - setData('inReference') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterreference() { - setData('referenceType', 'collapsed') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitreferencestring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - node.label = label - // @ts-expect-error: same as above. - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - setData('referenceType', 'full') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcharacterreferencemarker(token) { - setData('characterReferenceType', token.type) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcharacterreferencevalue(token) { - const data = this.sliceSerialize(token) - const type = getData('characterReferenceType') - /** @type {string} */ - let value - if (type) { - value = decodeNumericCharacterReference( - data, - type === 'characterReferenceMarkerNumeric' ? 10 : 16 - ) - setData('characterReferenceType') - } else { - const result = decodeNamedCharacterReference(data) - value = result - } - const tail = this.stack.pop() - tail.value += value - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkprotocol(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = this.sliceSerialize(token) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkemail(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = 'mailto:' + this.sliceSerialize(token) - } - - // - // Creaters. - // - - /** @returns {Blockquote} */ - function blockQuote() { - return { - type: 'blockquote', - children: [] - } - } - - /** @returns {Code} */ - function codeFlow() { - return { - type: 'code', - lang: null, - meta: null, - value: '' - } - } - - /** @returns {InlineCode} */ - function codeText() { - return { - type: 'inlineCode', - value: '' - } - } - - /** @returns {Definition} */ - function definition() { - return { - type: 'definition', - identifier: '', - label: null, - title: null, - url: '' - } - } - - /** @returns {Emphasis} */ - function emphasis() { - return { - type: 'emphasis', - children: [] - } - } - - /** @returns {Heading} */ - function heading() { - // @ts-expect-error `depth` will be set later. - return { - type: 'heading', - depth: undefined, - children: [] - } - } - - /** @returns {Break} */ - function hardBreak() { - return { - type: 'break' - } - } - - /** @returns {HTML} */ - function html() { - return { - type: 'html', - value: '' - } - } - - /** @returns {Image} */ - function image() { - return { - type: 'image', - title: null, - url: '', - alt: null - } - } - - /** @returns {Link} */ - function link() { - return { - type: 'link', - title: null, - url: '', - children: [] - } - } - - /** - * @param {Token} token - * @returns {List} - */ - function list(token) { - return { - type: 'list', - ordered: token.type === 'listOrdered', - start: null, - spread: token._spread, - children: [] - } - } - - /** - * @param {Token} token - * @returns {ListItem} - */ - function listItem(token) { - return { - type: 'listItem', - spread: token._spread, - checked: null, - children: [] - } - } - - /** @returns {Paragraph} */ - function paragraph() { - return { - type: 'paragraph', - children: [] - } - } - - /** @returns {Strong} */ - function strong() { - return { - type: 'strong', - children: [] - } - } - - /** @returns {Text} */ - function text() { - return { - type: 'text', - value: '' - } - } - - /** @returns {ThematicBreak} */ - function thematicBreak() { - return { - type: 'thematicBreak' - } - } -} - -/** - * Copy a point-like value. - * - * @param {Point} d - * Point-like value. - * @returns {Point} - * unist point. - */ -function lib_point(d) { - return { - line: d.line, - column: d.column, - offset: d.offset - } -} - -/** - * @param {Config} combined - * @param {Array<Extension | Array<Extension>>} extensions - * @returns {void} - */ -function configure(combined, extensions) { - let index = -1 - while (++index < extensions.length) { - const value = extensions[index] - if (Array.isArray(value)) { - configure(combined, value) - } else { - extension(combined, value) - } - } -} - -/** - * @param {Config} combined - * @param {Extension} extension - * @returns {void} - */ -function extension(combined, extension) { - /** @type {keyof Extension} */ - let key - for (key in extension) { - if (lib_own.call(extension, key)) { - if (key === 'canContainEols') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'transforms') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'enter' || key === 'exit') { - const right = extension[key] - if (right) { - Object.assign(combined[key], right) - } - } - } - } -} - -/** @type {OnEnterError} */ -function defaultOnError(left, right) { - if (left) { - throw new Error( - 'Cannot close `' + - left.type + - '` (' + - stringifyPosition({ - start: left.start, - end: left.end - }) + - '): a different token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is open' - ) - } else { - throw new Error( - 'Cannot close document, a token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is still open' - ) - } -} - -// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js -var esm = __webpack_require__(60513); -;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-ca0c5216.js - - - -function preprocessMarkdown(markdown) { - const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); - const withoutExtraSpaces = (0,esm/* dedent */.T)(withoutMultipleNewlines); - return withoutExtraSpaces; -} -function markdownToLines(markdown) { - const preprocessedMarkdown = preprocessMarkdown(markdown); - const { children } = fromMarkdown(preprocessedMarkdown); - const lines = [[]]; - let currentLine = 0; - function processNode(node, parentType = "normal") { - if (node.type === "text") { - const textLines = node.value.split("\n"); - textLines.forEach((textLine, index) => { - if (index !== 0) { - currentLine++; - lines.push([]); - } - textLine.split(" ").forEach((word) => { - if (word) { - lines[currentLine].push({ content: word, type: parentType }); - } - }); - }); - } else if (node.type === "strong" || node.type === "emphasis") { - node.children.forEach((contentNode) => { - processNode(contentNode, node.type); - }); - } - } - children.forEach((treeNode) => { - if (treeNode.type === "paragraph") { - treeNode.children.forEach((contentNode) => { - processNode(contentNode); - }); - } - }); - return lines; -} -function markdownToHTML(markdown) { - const { children } = fromMarkdown(markdown); - function output(node) { - if (node.type === "text") { - return node.value.replace(/\n/g, "<br/>"); - } else if (node.type === "strong") { - return `<strong>${node.children.map(output).join("")}</strong>`; - } else if (node.type === "emphasis") { - return `<em>${node.children.map(output).join("")}</em>`; - } else if (node.type === "paragraph") { - return `<p>${node.children.map(output).join("")}</p>`; - } - return `Unsupported markdown: ${node.type}`; - } - return children.map(output).join(""); -} -function splitTextToChars(text) { - if (Intl.Segmenter) { - return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); - } - return [...text]; -} -function splitWordToFitWidth(checkFit, word) { - const characters = splitTextToChars(word.content); - return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); -} -function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { - if (remainingChars.length === 0) { - return [ - { content: usedChars.join(""), type }, - { content: "", type } - ]; - } - const [nextChar, ...rest] = remainingChars; - const newWord = [...usedChars, nextChar]; - if (checkFit([{ content: newWord.join(""), type }])) { - return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); - } - if (usedChars.length === 0 && nextChar) { - usedChars.push(nextChar); - remainingChars.shift(); - } - return [ - { content: usedChars.join(""), type }, - { content: remainingChars.join(""), type } - ]; -} -function splitLineToFitWidth(line, checkFit) { - if (line.some(({ content }) => content.includes("\n"))) { - throw new Error("splitLineToFitWidth does not support newlines in the line"); - } - return splitLineToFitWidthRecursion(line, checkFit); -} -function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { - if (words.length === 0) { - if (newLine.length > 0) { - lines.push(newLine); - } - return lines.length > 0 ? lines : []; - } - let joiner = ""; - if (words[0].content === " ") { - joiner = " "; - words.shift(); - } - const nextWord = words.shift() ?? { content: " ", type: "normal" }; - const lineWithNextWord = [...newLine]; - if (joiner !== "") { - lineWithNextWord.push({ content: joiner, type: "normal" }); - } - lineWithNextWord.push(nextWord); - if (checkFit(lineWithNextWord)) { - return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); - } - if (newLine.length > 0) { - lines.push(newLine); - words.unshift(nextWord); - } else if (nextWord.content) { - const [line, rest] = splitWordToFitWidth(checkFit, nextWord); - lines.push([line]); - if (rest.content) { - words.unshift(rest); - } - } - return splitLineToFitWidthRecursion(words, checkFit, lines); -} -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlSpan(element, node, width, classes, addBackground = false) { - const fo = element.append("foreignObject"); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - ` - <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" - ); - applyStyle(div, node.labelStyle); - div.style("display", "table-cell"); - div.style("white-space", "nowrap"); - div.style("max-width", width + "px"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - if (addBackground) { - div.attr("class", "labelBkg"); - } - let bbox = div.node().getBoundingClientRect(); - if (bbox.width === width) { - div.style("display", "table"); - div.style("white-space", "break-spaces"); - div.style("width", width + "px"); - bbox = div.node().getBoundingClientRect(); - } - fo.style("width", bbox.width); - fo.style("height", bbox.height); - return fo.node(); -} -function createTspan(textElement, lineIndex, lineHeight) { - return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); -} -function computeWidthOfText(parentNode, lineHeight, line) { - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, line); - const textLength = testSpan.node().getComputedTextLength(); - testElement.remove(); - return textLength; -} -function computeDimensionOfText(parentNode, lineHeight, text) { - var _a; - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); - const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); - if (textDimension) { - testElement.remove(); - } - return textDimension; -} -function createFormattedText(width, g, structuredText, addBackground = false) { - const lineHeight = 1.1; - const labelGroup = g.append("g"); - const bkg = labelGroup.insert("rect").attr("class", "background"); - const textElement = labelGroup.append("text").attr("y", "-10.1"); - let lineIndex = 0; - for (const line of structuredText) { - const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; - const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); - for (const preparedLine of linesUnderWidth) { - const tspan = createTspan(textElement, lineIndex, lineHeight); - updateTextContentAndStyles(tspan, preparedLine); - lineIndex++; - } - } - if (addBackground) { - const bbox = textElement.node().getBBox(); - const padding = 2; - bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); - return labelGroup.node(); - } else { - return textElement.node(); - } -} -function updateTextContentAndStyles(tspan, wrappedLine) { - tspan.text(""); - wrappedLine.forEach((word, index) => { - const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); - if (index === 0) { - innerTspan.text(word.content); - } else { - innerTspan.text(" " + word.content); - } - }); -} -const createText = (el, text = "", { - style = "", - isTitle = false, - classes = "", - useHtmlLabels = true, - isNode = true, - width = 200, - addSvgBackground = false -} = {}) => { - mermaid_6dc72991.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); - if (useHtmlLabels) { - const htmlText = markdownToHTML(text); - const node = { - isNode, - label: (0,mermaid_6dc72991.M)(htmlText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - labelStyle: style.replace("fill:", "color:") - }; - const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); - return vertexNode; - } else { - const structuredText = markdownToLines(text); - const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); - return svgLabel; - } -}; - - - -/***/ }), - -/***/ 98055: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ a: () => (/* binding */ insertMarkers$1), -/* harmony export */ b: () => (/* binding */ clear$1), -/* harmony export */ c: () => (/* binding */ createLabel$1), -/* harmony export */ d: () => (/* binding */ clear), -/* harmony export */ e: () => (/* binding */ insertNode), -/* harmony export */ f: () => (/* binding */ insertEdgeLabel), -/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), -/* harmony export */ h: () => (/* binding */ insertEdge), -/* harmony export */ i: () => (/* binding */ intersectRect$1), -/* harmony export */ j: () => (/* binding */ positionEdgeLabel), -/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), -/* harmony export */ l: () => (/* binding */ labelHelper), -/* harmony export */ m: () => (/* binding */ addEdgeMarkers), -/* harmony export */ p: () => (/* binding */ positionNode), -/* harmony export */ s: () => (/* binding */ setNodeElem), -/* harmony export */ u: () => (/* binding */ updateNodeBounds) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(18897); - - - -const insertMarkers = (elem, markerArray, type, id) => { - markerArray.forEach((markerName) => { - markers[markerName](elem, type, id); - }); -}; -const extension = (elem, type, id) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); -}; -const composition = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); -}; -const aggregation = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); -}; -const dependency = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); -}; -const lollipop = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); -}; -const point = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); -}; -const circle$1 = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); -}; -const cross = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); -}; -const barb = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); -}; -const markers = { - extension, - composition, - aggregation, - dependency, - lollipop, - point, - circle: circle$1, - cross, - barb -}; -const insertMarkers$1 = insertMarkers; -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlLabel(node) { - const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" - ); - applyStyle(div, node.labelStyle); - div.style("display", "inline-block"); - div.style("white-space", "nowrap"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - return fo.node(); -} -const createLabel = (_vertexText, style, isTitle, isNode) => { - let vertexText = _vertexText || ""; - if (typeof vertexText === "object") { - vertexText = vertexText[0]; - } - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - vertexText = vertexText.replace(/\\n|\n/g, "<br />"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); - const node = { - isNode, - label: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(vertexText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - labelStyle: style.replace("fill:", "color:") - }; - let vertexNode = addHtmlLabel(node); - return vertexNode; - } else { - const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); - svgLabel.setAttribute("style", style.replace("color:", "fill:")); - let rows = []; - if (typeof vertexText === "string") { - rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); - } else if (Array.isArray(vertexText)) { - rows = vertexText; - } else { - rows = []; - } - for (const row of rows) { - const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); - tspan.setAttribute("dy", "1em"); - tspan.setAttribute("x", "0"); - if (isTitle) { - tspan.setAttribute("class", "title-row"); - } else { - tspan.setAttribute("class", "row"); - } - tspan.textContent = row.trim(); - svgLabel.appendChild(tspan); - } - return svgLabel; - } -}; -const createLabel$1 = createLabel; -const labelHelper = async (parent, node, _classes, isNode) => { - let classes; - const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); - if (!_classes) { - classes = "node default"; - } else { - classes = _classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); - let labelText; - if (node.labelText === void 0) { - labelText = ""; - } else { - labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; - } - const textNode = label.node(); - let text; - if (node.labelType === "markdown") { - text = (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { - useHtmlLabels, - width: node.width || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, - classes: "markdown-node-label" - }); - } else { - text = textNode.appendChild( - createLabel$1( - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), - node.labelStyle, - false, - isNode - ) - ); - } - let bbox = text.getBBox(); - const halfPadding = node.padding / 2; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); - const images = div.getElementsByTagName("img"); - if (images) { - const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; - await Promise.all( - [...images].map( - (img) => new Promise((res) => { - function setupImage() { - img.style.display = "flex"; - img.style.flexDirection = "column"; - if (noImgText) { - const bodyFontSize = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; - const enlargingFactor = 5; - const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; - img.style.minWidth = width; - img.style.maxWidth = width; - } else { - img.style.width = "100%"; - } - res(img); - } - setTimeout(() => { - if (img.complete) { - setupImage(); - } - }); - img.addEventListener("error", setupImage); - img.addEventListener("load", setupImage); - }) - ) - ); - } - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (useHtmlLabels) { - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - } else { - label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); - } - if (node.centerLabel) { - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - } - label.insert("rect", ":first-child"); - return { shapeSvg, bbox, halfPadding, label }; -}; -const updateNodeBounds = (node, element) => { - const bbox = element.node().getBBox(); - node.width = bbox.width; - node.height = bbox.height; -}; -function insertPolygonShape(parent, w, h, points) { - return parent.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); -} -function intersectNode(node, point2) { - return node.intersect(point2); -} -function intersectEllipse(node, rx, ry, point2) { - var cx = node.x; - var cy = node.y; - var px = cx - point2.x; - var py = cy - point2.y; - var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); - var dx = Math.abs(rx * ry * px / det); - if (point2.x < cx) { - dx = -dx; - } - var dy = Math.abs(rx * ry * py / det); - if (point2.y < cy) { - dy = -dy; - } - return { x: cx + dx, y: cy + dy }; -} -function intersectCircle(node, rx, point2) { - return intersectEllipse(node, rx, rx, point2); -} -function intersectLine(p1, p2, q1, q2) { - var a1, a2, b1, b2, c1, c2; - var r1, r2, r3, r4; - var denom, offset, num; - var x, y; - a1 = p2.y - p1.y; - b1 = p1.x - p2.x; - c1 = p2.x * p1.y - p1.x * p2.y; - r3 = a1 * q1.x + b1 * q1.y + c1; - r4 = a1 * q2.x + b1 * q2.y + c1; - if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { - return; - } - a2 = q2.y - q1.y; - b2 = q1.x - q2.x; - c2 = q2.x * q1.y - q1.x * q2.y; - r1 = a2 * p1.x + b2 * p1.y + c2; - r2 = a2 * p2.x + b2 * p2.y + c2; - if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { - return; - } - denom = a1 * b2 - a2 * b1; - if (denom === 0) { - return; - } - offset = Math.abs(denom / 2); - num = b1 * c2 - b2 * c1; - x = num < 0 ? (num - offset) / denom : (num + offset) / denom; - num = a2 * c1 - a1 * c2; - y = num < 0 ? (num - offset) / denom : (num + offset) / denom; - return { x, y }; -} -function sameSign(r1, r2) { - return r1 * r2 > 0; -} -function intersectPolygon(node, polyPoints, point2) { - var x1 = node.x; - var y1 = node.y; - var intersections = []; - var minX = Number.POSITIVE_INFINITY; - var minY = Number.POSITIVE_INFINITY; - if (typeof polyPoints.forEach === "function") { - polyPoints.forEach(function(entry) { - minX = Math.min(minX, entry.x); - minY = Math.min(minY, entry.y); - }); - } else { - minX = Math.min(minX, polyPoints.x); - minY = Math.min(minY, polyPoints.y); - } - var left = x1 - node.width / 2 - minX; - var top = y1 - node.height / 2 - minY; - for (var i = 0; i < polyPoints.length; i++) { - var p1 = polyPoints[i]; - var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; - var intersect2 = intersectLine( - node, - point2, - { x: left + p1.x, y: top + p1.y }, - { x: left + p2.x, y: top + p2.y } - ); - if (intersect2) { - intersections.push(intersect2); - } - } - if (!intersections.length) { - return node; - } - if (intersections.length > 1) { - intersections.sort(function(p, q) { - var pdx = p.x - point2.x; - var pdy = p.y - point2.y; - var distp = Math.sqrt(pdx * pdx + pdy * pdy); - var qdx = q.x - point2.x; - var qdy = q.y - point2.y; - var distq = Math.sqrt(qdx * qdx + qdy * qdy); - return distp < distq ? -1 : distp === distq ? 0 : 1; - }); - } - return intersections[0]; -} -const intersectRect = (node, point2) => { - var x = node.x; - var y = node.y; - var dx = point2.x - x; - var dy = point2.y - y; - var w = node.width / 2; - var h = node.height / 2; - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - if (dy < 0) { - h = -h; - } - sx = dy === 0 ? 0 : h * dx / dy; - sy = h; - } else { - if (dx < 0) { - w = -w; - } - sx = w; - sy = dx === 0 ? 0 : w * dy / dx; - } - return { x: x + sx, y: y + sy }; -}; -const intersectRect$1 = intersectRect; -const intersect = { - node: intersectNode, - circle: intersectCircle, - ellipse: intersectEllipse, - polygon: intersectPolygon, - rect: intersectRect$1 -}; -const note = async (parent, node) => { - const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; - if (!useHtmlLabels) { - node.centerLabel = true; - } - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes, - true - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); - const rect2 = shapeSvg.insert("rect", ":first-child"); - rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const note$1 = note; -const expandAndDeduplicateDirections = (directions) => { - const uniqueDirections = /* @__PURE__ */ new Set(); - for (const direction of directions) { - switch (direction) { - case "x": - uniqueDirections.add("right"); - uniqueDirections.add("left"); - break; - case "y": - uniqueDirections.add("up"); - uniqueDirections.add("down"); - break; - default: - uniqueDirections.add(direction); - break; - } - } - return uniqueDirections; -}; -const getArrowPoints = (duplicatedDirections, bbox, node) => { - const directions = expandAndDeduplicateDirections(duplicatedDirections); - const f = 2; - const height = bbox.height + 2 * node.padding; - const midpoint = height / f; - const width = bbox.width + 2 * midpoint + node.padding; - const padding = node.padding / 2; - if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { - return [ - // Bottom - { x: 0, y: 0 }, - { x: midpoint, y: 0 }, - { x: width / 2, y: 2 * padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: 0 }, - // Right - { x: width, y: -height / 3 }, - { x: width + 2 * padding, y: -height / 2 }, - { x: width, y: -2 * height / 3 }, - { x: width, y: -height }, - // Top - { x: width - midpoint, y: -height }, - { x: width / 2, y: -height - 2 * padding }, - { x: midpoint, y: -height }, - // Left - { x: 0, y: -height }, - { x: 0, y: -2 * height / 3 }, - { x: -2 * padding, y: -height / 2 }, - { x: 0, y: -height / 3 } - ]; - } - if (directions.has("right") && directions.has("left") && directions.has("up")) { - return [ - { x: midpoint, y: 0 }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("right") && directions.has("left") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: midpoint, y: -height }, - { x: width - midpoint, y: -height }, - { x: width, y: 0 } - ]; - } - if (directions.has("right") && directions.has("up") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: width, y: -midpoint }, - { x: width, y: -height + midpoint }, - { x: 0, y: -height } - ]; - } - if (directions.has("left") && directions.has("up") && directions.has("down")) { - return [ - { x: width, y: 0 }, - { x: 0, y: -midpoint }, - { x: 0, y: -height + midpoint }, - { x: width, y: -height } - ]; - } - if (directions.has("right") && directions.has("left")) { - return [ - { x: midpoint, y: 0 }, - { x: midpoint, y: -padding }, - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: width - midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("up") && directions.has("down")) { - return [ - // Bottom center - { x: width / 2, y: 0 }, - // Left pont of bottom arrow - { x: 0, y: -padding }, - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: 0, y: -height + padding }, - // Top of arrow - { x: width / 2, y: -height }, - { x: width, y: -height + padding }, - // Top of right vertical bar - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding }, - { x: width, y: -padding } - ]; - } - if (directions.has("right") && directions.has("up")) { - return [ - { x: 0, y: 0 }, - { x: width, y: -midpoint }, - { x: 0, y: -height } - ]; - } - if (directions.has("right") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: width, y: 0 }, - { x: 0, y: -height } - ]; - } - if (directions.has("left") && directions.has("up")) { - return [ - { x: width, y: 0 }, - { x: 0, y: -midpoint }, - { x: width, y: -height } - ]; - } - if (directions.has("left") && directions.has("down")) { - return [ - { x: width, y: 0 }, - { x: 0, y: 0 }, - { x: width, y: -height } - ]; - } - if (directions.has("right")) { - return [ - { x: midpoint, y: -padding }, - { x: midpoint, y: -padding }, - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: width - midpoint, y: -height + padding }, - // top left corner of arrow - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding } - ]; - } - if (directions.has("left")) { - return [ - { x: midpoint, y: 0 }, - { x: midpoint, y: -padding }, - // Two points, the right corners - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("up")) { - return [ - // Bottom center - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: 0, y: -height + padding }, - // Top of arrow - { x: width / 2, y: -height }, - { x: width, y: -height + padding }, - // Top of right vertical bar - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding } - ]; - } - if (directions.has("down")) { - return [ - // Bottom center - { x: width / 2, y: 0 }, - // Left pont of bottom arrow - { x: 0, y: -padding }, - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding }, - { x: width, y: -padding } - ]; - } - return [{ x: 0, y: 0 }]; -}; -const formatClass = (str) => { - if (str) { - return " " + str; - } - return ""; -}; -const getClassesFromNode = (node, otherClasses) => { - return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( - node.class - )}`; -}; -const question = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const s = w + h; - const points = [ - { x: s / 2, y: 0 }, - { x: s, y: -s / 2 }, - { x: s / 2, y: -s }, - { x: 0, y: -s / 2 } - ]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); - const questionElem = insertPolygonShape(shapeSvg, s, s, points); - questionElem.attr("style", node.style); - updateNodeBounds(node, questionElem); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const choice = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const s = 28; - const points = [ - { x: 0, y: s / 2 }, - { x: s / 2, y: 0 }, - { x: 0, y: -s / 2 }, - { x: -s / 2, y: 0 } - ]; - const choice2 = shapeSvg.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ); - choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); - node.width = 28; - node.height = 28; - node.intersect = function(point2) { - return intersect.circle(node, 14, point2); - }; - return shapeSvg; -}; -const hexagon = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const f = 4; - const h = bbox.height + node.padding; - const m = h / f; - const w = bbox.width + 2 * m + node.padding; - const points = [ - { x: m, y: 0 }, - { x: w - m, y: 0 }, - { x: w, y: -h / 2 }, - { x: w - m, y: -h }, - { x: m, y: -h }, - { x: 0, y: -h / 2 } - ]; - const hex = insertPolygonShape(shapeSvg, w, h, points); - hex.attr("style", node.style); - updateNodeBounds(node, hex); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const block_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); - const f = 2; - const h = bbox.height + 2 * node.padding; - const m = h / f; - const w = bbox.width + 2 * m + node.padding; - const points = getArrowPoints(node.directions, bbox, node); - const blockArrow = insertPolygonShape(shapeSvg, w, h, points); - blockArrow.attr("style", node.style); - updateNodeBounds(node, blockArrow); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const rect_left_inv_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -h / 2, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: -h / 2, y: -h }, - { x: 0, y: -h / 2 } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - node.width = w + h; - node.height = h; - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const lean_right = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const lean_left = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 2 * h / 6, y: 0 }, - { x: w + h / 6, y: 0 }, - { x: w - 2 * h / 6, y: -h }, - { x: -h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const trapezoid = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w + 2 * h / 6, y: 0 }, - { x: w - h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const inv_trapezoid = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: -2 * h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const rect_right_inv_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 0, y: 0 }, - { x: w + h / 2, y: 0 }, - { x: w, y: -h / 2 }, - { x: w + h / 2, y: -h }, - { x: 0, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const cylinder = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const rx = w / 2; - const ry = rx / (2.5 + w / 50); - const h = bbox.height + ry + node.padding; - const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; - const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); - updateNodeBounds(node, el); - node.intersect = function(point2) { - const pos = intersect.rect(node, point2); - const x = pos.x - node.x; - if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { - let y = ry * ry * (1 - x * x / (rx * rx)); - if (y != 0) { - y = Math.sqrt(y); - } - y = ry - y; - if (point2.y - node.y > 0) { - y = -y; - } - pos.y += y; - } - return pos; - }; - return shapeSvg; -}; -const rect = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes + " " + node.class, - true - ); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = node.positioned ? node.width : bbox.width + node.padding; - const totalHeight = node.positioned ? node.height : bbox.height + node.padding; - const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; - const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; - rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const composite = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes, - true - ); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = node.positioned ? node.width : bbox.width + node.padding; - const totalHeight = node.positioned ? node.height : bbox.height + node.padding; - const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; - const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; - rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const labelRect = async (parent, node) => { - const { shapeSvg } = await labelHelper(parent, node, "label", true); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = 0; - const totalHeight = 0; - rect2.attr("width", totalWidth).attr("height", totalHeight); - shapeSvg.attr("class", "label edgeLabel"); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { - const strokeDashArray = []; - const addBorder = (length) => { - strokeDashArray.push(length, 0); - }; - const skipBorder = (length) => { - strokeDashArray.push(0, length); - }; - if (borders.includes("t")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); - addBorder(totalWidth); - } else { - skipBorder(totalWidth); - } - if (borders.includes("r")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); - addBorder(totalHeight); - } else { - skipBorder(totalHeight); - } - if (borders.includes("b")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); - addBorder(totalWidth); - } else { - skipBorder(totalWidth); - } - if (borders.includes("l")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); - addBorder(totalHeight); - } else { - skipBorder(totalHeight); - } - rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); -} -const rectWithTitle = (parent, node) => { - let classes; - if (!node.classes) { - classes = "node default"; - } else { - classes = "node " + node.classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const innerLine = shapeSvg.insert("line"); - const label = shapeSvg.insert("g").attr("class", "label"); - const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; - let title = ""; - if (typeof text2 === "object") { - title = text2[0]; - } else { - title = text2; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); - const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); - let bbox = { width: 0, height: 0 }; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); - const textRows = text2.slice(1, text2.length); - let titleBox = text.getBBox(); - const descr = label.node().appendChild( - createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) - ); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = descr.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - const halfPadding = node.padding / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr).attr( - "transform", - "translate( " + // (titleBox.width - bbox.width) / 2 + - (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" - ); - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text).attr( - "transform", - "translate( " + // (titleBox.width - bbox.width) / 2 + - (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" - ); - bbox = label.node().getBBox(); - label.attr( - "transform", - "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" - ); - rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const stadium = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const h = bbox.height + node.padding; - const w = bbox.width + h / 4 + node.padding; - const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const circle = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); - return intersect.circle(node, bbox.width / 2 + halfPadding, point2); - }; - return shapeSvg; -}; -const doublecircle = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const gap = 5; - const circleGroup = shapeSvg.insert("g", ":first-child"); - const outerCircle = circleGroup.insert("circle"); - const innerCircle = circleGroup.insert("circle"); - circleGroup.attr("class", node.class); - outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); - innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); - updateNodeBounds(node, outerCircle); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); - return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); - }; - return shapeSvg; -}; -const subroutine = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 0, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: 0, y: -h }, - { x: 0, y: 0 }, - { x: -8, y: 0 }, - { x: w + 8, y: 0 }, - { x: w + 8, y: -h }, - { x: -8, y: -h }, - { x: -8, y: 0 } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const start = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - return intersect.circle(node, 7, point2); - }; - return shapeSvg; -}; -const forkJoin = (parent, node, dir) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - let width = 70; - let height = 10; - if (dir === "LR") { - width = 10; - height = 70; - } - const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); - updateNodeBounds(node, shape); - node.height = node.height + node.padding / 2; - node.width = node.width + node.padding / 2; - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const end = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const innerCircle = shapeSvg.insert("circle", ":first-child"); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); - innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - return intersect.circle(node, 7, point2); - }; - return shapeSvg; -}; -const class_box = (parent, node) => { - const halfPadding = node.padding / 2; - const rowPadding = 4; - const lineHeight = 8; - let classes; - if (!node.classes) { - classes = "node default"; - } else { - classes = "node " + node.classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const topLine = shapeSvg.insert("line"); - const bottomLine = shapeSvg.insert("line"); - let maxWidth = 0; - let maxHeight = rowPadding; - const labelContainer = shapeSvg.insert("g").attr("class", "label"); - let verticalPos = 0; - const hasInterface = node.classData.annotations && node.classData.annotations[0]; - const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; - const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); - let interfaceBBox = interfaceLabel.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = interfaceLabel.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel); - interfaceBBox = div.getBoundingClientRect(); - dv.attr("width", interfaceBBox.width); - dv.attr("height", interfaceBBox.height); - } - if (node.classData.annotations[0]) { - maxHeight += interfaceBBox.height + rowPadding; - maxWidth += interfaceBBox.width; - } - let classTitleString = node.classData.label; - if (node.classData.type !== void 0 && node.classData.type !== "") { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - classTitleString += "<" + node.classData.type + ">"; - } else { - classTitleString += "<" + node.classData.type + ">"; - } - } - const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr("class", "classTitle"); - let classTitleBBox = classTitleLabel.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = classTitleLabel.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel); - classTitleBBox = div.getBoundingClientRect(); - dv.attr("width", classTitleBBox.width); - dv.attr("height", classTitleBBox.height); - } - maxHeight += classTitleBBox.height + rowPadding; - if (classTitleBBox.width > maxWidth) { - maxWidth = classTitleBBox.width; - } - const classAttributes = []; - node.classData.members.forEach((member) => { - const parsedInfo = member.getDisplayDetails(); - let parsedText = parsedInfo.displayText; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); - } - const lbl = labelContainer.node().appendChild( - createLabel$1( - parsedText, - parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, - true, - true - ) - ); - let bbox = lbl.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = lbl.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (bbox.width > maxWidth) { - maxWidth = bbox.width; - } - maxHeight += bbox.height + rowPadding; - classAttributes.push(lbl); - }); - maxHeight += lineHeight; - const classMethods = []; - node.classData.methods.forEach((member) => { - const parsedInfo = member.getDisplayDetails(); - let displayText = parsedInfo.displayText; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); - } - const lbl = labelContainer.node().appendChild( - createLabel$1( - displayText, - parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, - true, - true - ) - ); - let bbox = lbl.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = lbl.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (bbox.width > maxWidth) { - maxWidth = bbox.width; - } - maxHeight += bbox.height + rowPadding; - classMethods.push(lbl); - }); - maxHeight += lineHeight; - if (hasInterface) { - let diffX2 = (maxWidth - interfaceBBox.width) / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel).attr( - "transform", - "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" - ); - verticalPos = interfaceBBox.height + rowPadding; - } - let diffX = (maxWidth - classTitleBBox.width) / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr( - "transform", - "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" - ); - verticalPos += classTitleBBox.height + rowPadding; - topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); - verticalPos += lineHeight; - classAttributes.forEach((lbl) => { - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( - "transform", - "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" - ); - const memberBBox = lbl == null ? void 0 : lbl.getBBox(); - verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; - }); - verticalPos += lineHeight; - bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); - verticalPos += lineHeight; - classMethods.forEach((lbl) => { - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( - "transform", - "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" - ); - const memberBBox = lbl == null ? void 0 : lbl.getBBox(); - verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; - }); - rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const shapes = { - rhombus: question, - composite, - question, - rect, - labelRect, - rectWithTitle, - choice, - circle, - doublecircle, - stadium, - hexagon, - block_arrow, - rect_left_inv_arrow, - lean_right, - lean_left, - trapezoid, - inv_trapezoid, - rect_right_inv_arrow, - cylinder, - start, - end, - note: note$1, - subroutine, - fork: forkJoin, - join: forkJoin, - class_box -}; -let nodeElems = {}; -const insertNode = async (elem, node, dir) => { - let newEl; - let el; - if (node.link) { - let target; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { - target = "_top"; - } else if (node.linkTarget) { - target = node.linkTarget || "_blank"; - } - newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); - el = await shapes[node.shape](newEl, node, dir); - } else { - el = await shapes[node.shape](elem, node, dir); - newEl = el; - } - if (node.tooltip) { - el.attr("title", node.tooltip); - } - if (node.class) { - el.attr("class", "node default " + node.class); - } - newEl.attr("data-node", "true"); - newEl.attr("data-id", node.id); - nodeElems[node.id] = newEl; - if (node.haveCallback) { - nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); - } - return newEl; -}; -const setNodeElem = (elem, node) => { - nodeElems[node.id] = elem; -}; -const clear$1 = () => { - nodeElems = {}; -}; -const positionNode = (node) => { - const el = nodeElems[node.id]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( - "Transforming node", - node.diff, - node, - "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" - ); - const padding = 8; - const diff = node.diff || 0; - if (node.clusterNode) { - el.attr( - "transform", - "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" - ); - } else { - el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); - } - return diff; -}; -const getSubGraphTitleMargins = ({ - flowchart -}) => { - var _a, _b; - const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; - const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; - const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; - return { - subGraphTitleTopMargin, - subGraphTitleBottomMargin, - subGraphTitleTotalMargin - }; -}; -const markerOffsets = { - aggregation: 18, - extension: 18, - composition: 18, - dependency: 6, - lollipop: 13.5, - arrow_point: 5.3 -}; -function calculateDeltaAndAngle(point1, point2) { - if (point1 === void 0 || point2 === void 0) { - return { angle: 0, deltaX: 0, deltaY: 0 }; - } - point1 = pointTransformer(point1); - point2 = pointTransformer(point2); - const [x1, y1] = [point1.x, point1.y]; - const [x2, y2] = [point2.x, point2.y]; - const deltaX = x2 - x1; - const deltaY = y2 - y1; - return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; -} -const pointTransformer = (data) => { - if (Array.isArray(data)) { - return { x: data[0], y: data[1] }; - } - return data; -}; -const getLineFunctionsWithOffset = (edge) => { - return { - x: function(d, i, data) { - let offset = 0; - if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { - const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); - offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); - } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { - const { angle, deltaX } = calculateDeltaAndAngle( - data[data.length - 1], - data[data.length - 2] - ); - offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); - } - return pointTransformer(d).x + offset; - }, - y: function(d, i, data) { - let offset = 0; - if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { - const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); - offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); - } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { - const { angle, deltaY } = calculateDeltaAndAngle( - data[data.length - 1], - data[data.length - 2] - ); - offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); - } - return pointTransformer(d).y + offset; - } - }; -}; -const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { - if (edge.arrowTypeStart) { - addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); - } - if (edge.arrowTypeEnd) { - addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); - } -}; -const arrowTypesMap = { - arrow_cross: "cross", - arrow_point: "point", - arrow_barb: "barb", - arrow_circle: "circle", - aggregation: "aggregation", - extension: "extension", - composition: "composition", - dependency: "dependency", - lollipop: "lollipop" -}; -const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { - const endMarkerType = arrowTypesMap[arrowType]; - if (!endMarkerType) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); - return; - } - const suffix = position === "start" ? "Start" : "End"; - svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); -}; -let edgeLabels = {}; -let terminalLabels = {}; -const clear = () => { - edgeLabels = {}; - terminalLabels = {}; -}; -const insertEdgeLabel = (elem, edge) => { - const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); - const labelElement = edge.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { - style: edge.labelStyle, - useHtmlLabels, - addSvgBackground: true - }) : createLabel$1(edge.label, edge.labelStyle); - const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); - const label = edgeLabel.insert("g").attr("class", "label"); - label.node().appendChild(labelElement); - let bbox = labelElement.getBBox(); - if (useHtmlLabels) { - const div = labelElement.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(labelElement); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - edgeLabels[edge.id] = edgeLabel; - edge.width = bbox.width; - edge.height = bbox.height; - let fo; - if (edge.startLabelLeft) { - const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); - const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); - const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(startLabelElement); - const slBox = startLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].startLeft = startEdgeLabelLeft; - setTerminalWidth(fo, edge.startLabelLeft); - } - if (edge.startLabelRight) { - const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); - const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); - const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); - fo = startEdgeLabelRight.node().appendChild(startLabelElement); - inner.node().appendChild(startLabelElement); - const slBox = startLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].startRight = startEdgeLabelRight; - setTerminalWidth(fo, edge.startLabelRight); - } - if (edge.endLabelLeft) { - const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); - const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); - const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(endLabelElement); - const slBox = endLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - endEdgeLabelLeft.node().appendChild(endLabelElement); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].endLeft = endEdgeLabelLeft; - setTerminalWidth(fo, edge.endLabelLeft); - } - if (edge.endLabelRight) { - const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); - const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); - const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(endLabelElement); - const slBox = endLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - endEdgeLabelRight.node().appendChild(endLabelElement); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].endRight = endEdgeLabelRight; - setTerminalWidth(fo, edge.endLabelRight); - } - return labelElement; -}; -function setTerminalWidth(fo, value) { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { - fo.style.width = value.length * 9 + "px"; - fo.style.height = "12px"; - } -} -const positionEdgeLabel = (edge, paths) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); - let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); - if (edge.label) { - const el = edgeLabels[edge.id]; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( - "Moving label " + edge.label + " from (", - x, - ",", - y, - ") to (", - pos.x, - ",", - pos.y, - ") abc88" - ); - if (paths.updatedPath) { - x = pos.x; - y = pos.y; - } - } - el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); - } - if (edge.startLabelLeft) { - const el = terminalLabels[edge.id].startLeft; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.startLabelRight) { - const el = terminalLabels[edge.id].startRight; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( - edge.arrowTypeStart ? 10 : 0, - "start_right", - path - ); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.endLabelLeft) { - const el = terminalLabels[edge.id].endLeft; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.endLabelRight) { - const el = terminalLabels[edge.id].endRight; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } -}; -const outsideNode = (node, point2) => { - const x = node.x; - const y = node.y; - const dx = Math.abs(point2.x - x); - const dy = Math.abs(point2.y - y); - const w = node.width / 2; - const h = node.height / 2; - if (dx >= w || dy >= h) { - return true; - } - return false; -}; -const intersection = (node, outsidePoint, insidePoint) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: - outsidePoint: ${JSON.stringify(outsidePoint)} - insidePoint : ${JSON.stringify(insidePoint)} - node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); - const x = node.x; - const y = node.y; - const dx = Math.abs(x - insidePoint.x); - const w = node.width / 2; - let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; - const h = node.height / 2; - const Q = Math.abs(outsidePoint.y - insidePoint.y); - const R = Math.abs(outsidePoint.x - insidePoint.x); - if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { - let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; - r = R * q / Q; - const res = { - x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, - y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q - }; - if (r === 0) { - res.x = outsidePoint.x; - res.y = outsidePoint.y; - } - if (R === 0) { - res.x = outsidePoint.x; - } - if (Q === 0) { - res.y = outsidePoint.y; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); - return res; - } else { - if (insidePoint.x < outsidePoint.x) { - r = outsidePoint.x - w - x; - } else { - r = x - w - outsidePoint.x; - } - let q = Q * r / R; - let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; - let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); - if (r === 0) { - _x = outsidePoint.x; - _y = outsidePoint.y; - } - if (R === 0) { - _x = outsidePoint.x; - } - if (Q === 0) { - _y = outsidePoint.y; - } - return { x: _x, y: _y }; - } -}; -const cutPathAtIntersect = (_points, boundaryNode) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundaryNode); - let points = []; - let lastPointOutside = _points[0]; - let isInside = false; - _points.forEach((point2) => { - if (!outsideNode(boundaryNode, point2) && !isInside) { - const inter = intersection(boundaryNode, lastPointOutside, point2); - let pointPresent = false; - points.forEach((p) => { - pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; - }); - if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { - points.push(inter); - } - isInside = true; - } else { - lastPointOutside = point2; - if (!isInside) { - points.push(point2); - } - } - }); - return points; -}; -const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { - let points = edge.points; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); - let pointsHasChanged = false; - const tail = graph.node(e.v); - var head = graph.node(e.w); - if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { - points = points.slice(1, edge.points.length - 1); - points.unshift(tail.intersect(points[0])); - points.push(head.intersect(points[points.length - 1])); - } - if (edge.toCluster) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); - points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); - pointsHasChanged = true; - } - if (edge.fromCluster) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); - points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); - pointsHasChanged = true; - } - const lineData = points.filter((p) => !Number.isNaN(p.y)); - let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .qrM; - if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { - curve = edge.curve; - } - const { x, y } = getLineFunctionsWithOffset(edge); - const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(x).y(y).curve(curve); - let strokeClasses; - switch (edge.thickness) { - case "normal": - strokeClasses = "edge-thickness-normal"; - break; - case "thick": - strokeClasses = "edge-thickness-thick"; - break; - case "invisible": - strokeClasses = "edge-thickness-thick"; - break; - default: - strokeClasses = ""; - } - switch (edge.pattern) { - case "solid": - strokeClasses += " edge-pattern-solid"; - break; - case "dotted": - strokeClasses += " edge-pattern-dotted"; - break; - case "dashed": - strokeClasses += " edge-pattern-dashed"; - break; - } - const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); - let url = ""; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { - url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; - url = url.replace(/\(/g, "\\("); - url = url.replace(/\)/g, "\\)"); - } - addEdgeMarkers(svgPath, edge, url, id, diagramType); - let paths = {}; - if (pointsHasChanged) { - paths.updatedPath = points; - } - paths.originalPath = edge.points; - return paths; -}; - - - -/***/ }), - -/***/ 32548: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ d: () => (/* binding */ db), -/* harmony export */ f: () => (/* binding */ flowDb), -/* harmony export */ p: () => (/* binding */ parser$1) -/* harmony export */ }); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 27, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $V4 = [2, 2], $V5 = [1, 13], $V6 = [1, 14], $V7 = [1, 15], $V8 = [1, 16], $V9 = [1, 23], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 49], $Ve = [1, 48], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 44], $Vl = [1, 46], $Vm = [1, 42], $Vn = [1, 47], $Vo = [1, 43], $Vp = [1, 50], $Vq = [1, 45], $Vr = [1, 51], $Vs = [1, 52], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 57], $Vy = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vz = [1, 61], $VA = [1, 60], $VB = [1, 62], $VC = [8, 9, 11, 73, 75], $VD = [1, 88], $VE = [1, 93], $VF = [1, 92], $VG = [1, 89], $VH = [1, 85], $VI = [1, 91], $VJ = [1, 87], $VK = [1, 94], $VL = [1, 90], $VM = [1, 95], $VN = [1, 86], $VO = [8, 9, 10, 11, 73, 75], $VP = [8, 9, 10, 11, 44, 73, 75], $VQ = [8, 9, 10, 11, 29, 42, 44, 46, 48, 50, 52, 54, 56, 58, 61, 63, 65, 66, 68, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VR = [8, 9, 11, 42, 58, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VS = [42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VT = [1, 121], $VU = [1, 120], $VV = [1, 128], $VW = [1, 142], $VX = [1, 143], $VY = [1, 144], $VZ = [1, 145], $V_ = [1, 130], $V$ = [1, 132], $V01 = [1, 136], $V11 = [1, 137], $V21 = [1, 138], $V31 = [1, 139], $V41 = [1, 140], $V51 = [1, 141], $V61 = [1, 146], $V71 = [1, 147], $V81 = [1, 126], $V91 = [1, 127], $Va1 = [1, 134], $Vb1 = [1, 129], $Vc1 = [1, 133], $Vd1 = [1, 131], $Ve1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vf1 = [1, 149], $Vg1 = [8, 9, 11], $Vh1 = [8, 9, 10, 11, 14, 42, 58, 86, 102, 103, 106, 108, 111, 112, 113], $Vi1 = [1, 169], $Vj1 = [1, 165], $Vk1 = [1, 166], $Vl1 = [1, 170], $Vm1 = [1, 167], $Vn1 = [1, 168], $Vo1 = [75, 113, 116], $Vp1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 42, 58, 73, 81, 82, 83, 84, 85, 86, 87, 102, 106, 108, 111, 112, 113], $Vq1 = [10, 103], $Vr1 = [31, 47, 49, 51, 53, 55, 60, 62, 64, 65, 67, 69, 113, 114, 115], $Vs1 = [1, 235], $Vt1 = [1, 233], $Vu1 = [1, 237], $Vv1 = [1, 231], $Vw1 = [1, 232], $Vx1 = [1, 234], $Vy1 = [1, 236], $Vz1 = [1, 238], $VA1 = [1, 255], $VB1 = [8, 9, 11, 103], $VC1 = [8, 9, 10, 11, 58, 81, 102, 103, 106, 107, 108, 109]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "graphConfig": 4, "document": 5, "line": 6, "statement": 7, "SEMI": 8, "NEWLINE": 9, "SPACE": 10, "EOF": 11, "GRAPH": 12, "NODIR": 13, "DIR": 14, "FirstStmtSeparator": 15, "ending": 16, "endToken": 17, "spaceList": 18, "spaceListNewline": 19, "vertexStatement": 20, "separator": 21, "styleStatement": 22, "linkStyleStatement": 23, "classDefStatement": 24, "classStatement": 25, "clickStatement": 26, "subgraph": 27, "textNoTags": 28, "SQS": 29, "text": 30, "SQE": 31, "end": 32, "direction": 33, "acc_title": 34, "acc_title_value": 35, "acc_descr": 36, "acc_descr_value": 37, "acc_descr_multiline_value": 38, "link": 39, "node": 40, "styledVertex": 41, "AMP": 42, "vertex": 43, "STYLE_SEPARATOR": 44, "idString": 45, "DOUBLECIRCLESTART": 46, "DOUBLECIRCLEEND": 47, "PS": 48, "PE": 49, "(-": 50, "-)": 51, "STADIUMSTART": 52, "STADIUMEND": 53, "SUBROUTINESTART": 54, "SUBROUTINEEND": 55, "VERTEX_WITH_PROPS_START": 56, "NODE_STRING[field]": 57, "COLON": 58, "NODE_STRING[value]": 59, "PIPE": 60, "CYLINDERSTART": 61, "CYLINDEREND": 62, "DIAMOND_START": 63, "DIAMOND_STOP": 64, "TAGEND": 65, "TRAPSTART": 66, "TRAPEND": 67, "INVTRAPSTART": 68, "INVTRAPEND": 69, "linkStatement": 70, "arrowText": 71, "TESTSTR": 72, "START_LINK": 73, "edgeText": 74, "LINK": 75, "edgeTextToken": 76, "STR": 77, "MD_STR": 78, "textToken": 79, "keywords": 80, "STYLE": 81, "LINKSTYLE": 82, "CLASSDEF": 83, "CLASS": 84, "CLICK": 85, "DOWN": 86, "UP": 87, "textNoTagsToken": 88, "stylesOpt": 89, "idString[vertex]": 90, "idString[class]": 91, "CALLBACKNAME": 92, "CALLBACKARGS": 93, "HREF": 94, "LINK_TARGET": 95, "STR[link]": 96, "STR[tooltip]": 97, "alphaNum": 98, "DEFAULT": 99, "numList": 100, "INTERPOLATE": 101, "NUM": 102, "COMMA": 103, "style": 104, "styleComponent": 105, "NODE_STRING": 106, "UNIT": 107, "BRKT": 108, "PCT": 109, "idStringToken": 110, "MINUS": 111, "MULT": 112, "UNICODE_TEXT": 113, "TEXT": 114, "TAGSTART": 115, "EDGE_TEXT": 116, "alphaNumToken": 117, "direction_tb": 118, "direction_bt": 119, "direction_rl": 120, "direction_lr": 121, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 8: "SEMI", 9: "NEWLINE", 10: "SPACE", 11: "EOF", 12: "GRAPH", 13: "NODIR", 14: "DIR", 27: "subgraph", 29: "SQS", 31: "SQE", 32: "end", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 42: "AMP", 44: "STYLE_SEPARATOR", 46: "DOUBLECIRCLESTART", 47: "DOUBLECIRCLEEND", 48: "PS", 49: "PE", 50: "(-", 51: "-)", 52: "STADIUMSTART", 53: "STADIUMEND", 54: "SUBROUTINESTART", 55: "SUBROUTINEEND", 56: "VERTEX_WITH_PROPS_START", 57: "NODE_STRING[field]", 58: "COLON", 59: "NODE_STRING[value]", 60: "PIPE", 61: "CYLINDERSTART", 62: "CYLINDEREND", 63: "DIAMOND_START", 64: "DIAMOND_STOP", 65: "TAGEND", 66: "TRAPSTART", 67: "TRAPEND", 68: "INVTRAPSTART", 69: "INVTRAPEND", 72: "TESTSTR", 73: "START_LINK", 75: "LINK", 77: "STR", 78: "MD_STR", 81: "STYLE", 82: "LINKSTYLE", 83: "CLASSDEF", 84: "CLASS", 85: "CLICK", 86: "DOWN", 87: "UP", 90: "idString[vertex]", 91: "idString[class]", 92: "CALLBACKNAME", 93: "CALLBACKARGS", 94: "HREF", 95: "LINK_TARGET", 96: "STR[link]", 97: "STR[tooltip]", 99: "DEFAULT", 101: "INTERPOLATE", 102: "NUM", 103: "COMMA", 106: "NODE_STRING", 107: "UNIT", 108: "BRKT", 109: "PCT", 111: "MINUS", 112: "MULT", 113: "UNICODE_TEXT", 114: "TEXT", 115: "TAGSTART", 116: "EDGE_TEXT", 118: "direction_tb", 119: "direction_bt", 120: "direction_rl", 121: "direction_lr" }, - productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [20, 3], [20, 4], [20, 2], [20, 1], [40, 1], [40, 5], [41, 1], [41, 3], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 8], [43, 4], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 4], [43, 4], [43, 1], [39, 2], [39, 3], [39, 3], [39, 1], [39, 3], [74, 1], [74, 2], [74, 1], [74, 1], [70, 1], [71, 3], [30, 1], [30, 2], [30, 1], [30, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [100, 1], [100, 3], [89, 1], [89, 3], [104, 1], [104, 2], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [79, 1], [79, 1], [79, 1], [79, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [76, 1], [76, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [45, 1], [45, 2], [98, 1], [98, 2], [33, 1], [33, 1], [33, 1], [33, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 2: - this.$ = []; - break; - case 3: - if (!Array.isArray($$[$0]) || $$[$0].length > 0) { - $$[$0 - 1].push($$[$0]); - } - this.$ = $$[$0 - 1]; - break; - case 4: - case 176: - this.$ = $$[$0]; - break; - case 11: - yy.setDirection("TB"); - this.$ = "TB"; - break; - case 12: - yy.setDirection($$[$0 - 1]); - this.$ = $$[$0 - 1]; - break; - case 27: - this.$ = $$[$0 - 1].nodes; - break; - case 28: - case 29: - case 30: - case 31: - case 32: - this.$ = []; - break; - case 33: - this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); - break; - case 34: - this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); - break; - case 35: - this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); - break; - case 37: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 38: - case 39: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 43: - yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); - this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; - break; - case 44: - yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); - this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; - break; - case 45: - this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; - break; - case 46: - this.$ = { stmt: $$[$0], nodes: $$[$0] }; - break; - case 47: - this.$ = [$$[$0]]; - break; - case 48: - this.$ = $$[$0 - 4].concat($$[$0]); - break; - case 49: - this.$ = $$[$0]; - break; - case 50: - this.$ = $$[$0 - 2]; - yy.setClass($$[$0 - 2], $$[$0]); - break; - case 51: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); - break; - case 52: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); - break; - case 53: - this.$ = $$[$0 - 5]; - yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); - break; - case 54: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); - break; - case 55: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); - break; - case 56: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); - break; - case 57: - this.$ = $$[$0 - 7]; - yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); - break; - case 58: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); - break; - case 59: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); - break; - case 60: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); - break; - case 61: - this.$ = $$[$0 - 5]; - yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); - break; - case 62: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); - break; - case 63: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); - break; - case 64: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); - break; - case 65: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); - break; - case 66: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); - break; - case 67: - this.$ = $$[$0]; - yy.addVertex($$[$0]); - break; - case 68: - $$[$0 - 1].text = $$[$0]; - this.$ = $$[$0 - 1]; - break; - case 69: - case 70: - $$[$0 - 2].text = $$[$0 - 1]; - this.$ = $$[$0 - 2]; - break; - case 71: - this.$ = $$[$0]; - break; - case 72: - var inf = yy.destructLink($$[$0], $$[$0 - 2]); - this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; - break; - case 73: - this.$ = { text: $$[$0], type: "text" }; - break; - case 74: - this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; - break; - case 75: - this.$ = { text: $$[$0], type: "string" }; - break; - case 76: - this.$ = { text: $$[$0], type: "markdown" }; - break; - case 77: - var inf = yy.destructLink($$[$0]); - this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; - break; - case 78: - this.$ = $$[$0 - 1]; - break; - case 79: - this.$ = { text: $$[$0], type: "text" }; - break; - case 80: - this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; - break; - case 81: - this.$ = { text: $$[$0], type: "string" }; - break; - case 82: - case 97: - this.$ = { text: $$[$0], type: "markdown" }; - break; - case 94: - this.$ = { text: $$[$0], type: "text" }; - break; - case 95: - this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; - break; - case 96: - this.$ = { text: $$[$0], type: "text" }; - break; - case 98: - this.$ = $$[$0 - 4]; - yy.addClass($$[$0 - 2], $$[$0]); - break; - case 99: - this.$ = $$[$0 - 4]; - yy.setClass($$[$0 - 2], $$[$0]); - break; - case 100: - case 108: - this.$ = $$[$0 - 1]; - yy.setClickEvent($$[$0 - 1], $$[$0]); - break; - case 101: - case 109: - this.$ = $$[$0 - 3]; - yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); - yy.setTooltip($$[$0 - 3], $$[$0]); - break; - case 102: - this.$ = $$[$0 - 2]; - yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); - break; - case 103: - this.$ = $$[$0 - 4]; - yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); - yy.setTooltip($$[$0 - 4], $$[$0]); - break; - case 104: - this.$ = $$[$0 - 2]; - yy.setLink($$[$0 - 2], $$[$0]); - break; - case 105: - this.$ = $$[$0 - 4]; - yy.setLink($$[$0 - 4], $$[$0 - 2]); - yy.setTooltip($$[$0 - 4], $$[$0]); - break; - case 106: - this.$ = $$[$0 - 4]; - yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); - break; - case 107: - this.$ = $$[$0 - 6]; - yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]); - yy.setTooltip($$[$0 - 6], $$[$0 - 2]); - break; - case 110: - this.$ = $$[$0 - 1]; - yy.setLink($$[$0 - 1], $$[$0]); - break; - case 111: - this.$ = $$[$0 - 3]; - yy.setLink($$[$0 - 3], $$[$0 - 2]); - yy.setTooltip($$[$0 - 3], $$[$0]); - break; - case 112: - this.$ = $$[$0 - 3]; - yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); - break; - case 113: - this.$ = $$[$0 - 5]; - yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); - yy.setTooltip($$[$0 - 5], $$[$0 - 2]); - break; - case 114: - this.$ = $$[$0 - 4]; - yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); - break; - case 115: - this.$ = $$[$0 - 4]; - yy.updateLink([$$[$0 - 2]], $$[$0]); - break; - case 116: - this.$ = $$[$0 - 4]; - yy.updateLink($$[$0 - 2], $$[$0]); - break; - case 117: - this.$ = $$[$0 - 8]; - yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); - yy.updateLink([$$[$0 - 6]], $$[$0]); - break; - case 118: - this.$ = $$[$0 - 8]; - yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); - yy.updateLink($$[$0 - 6], $$[$0]); - break; - case 119: - this.$ = $$[$0 - 6]; - yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); - break; - case 120: - this.$ = $$[$0 - 6]; - yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); - break; - case 121: - case 123: - this.$ = [$$[$0]]; - break; - case 122: - case 124: - $$[$0 - 2].push($$[$0]); - this.$ = $$[$0 - 2]; - break; - case 126: - this.$ = $$[$0 - 1] + $$[$0]; - break; - case 174: - this.$ = $$[$0]; - break; - case 175: - this.$ = $$[$0 - 1] + "" + $$[$0]; - break; - case 177: - this.$ = $$[$0 - 1] + "" + $$[$0]; - break; - case 178: - this.$ = { stmt: "dir", value: "TB" }; - break; - case 179: - this.$ = { stmt: "dir", value: "BT" }; - break; - case 180: - this.$ = { stmt: "dir", value: "RL" }; - break; - case 181: - this.$ = { stmt: "dir", value: "LR" }; - break; - } - }, - table: [{ 3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2 }, { 1: [3] }, o($V3, $V4, { 5: 6 }), { 4: 7, 9: $V0, 10: $V1, 12: $V2 }, { 4: 8, 9: $V0, 10: $V1, 12: $V2 }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($V3, [2, 9]), o($V3, [2, 10]), o($V3, [2, 11]), { 8: [1, 54], 9: [1, 55], 10: $Vx, 15: 53, 18: 56 }, o($Vy, [2, 3]), o($Vy, [2, 4]), o($Vy, [2, 5]), o($Vy, [2, 6]), o($Vy, [2, 7]), o($Vy, [2, 8]), { 8: $Vz, 9: $VA, 11: $VB, 21: 58, 39: 59, 70: 63, 73: [1, 64], 75: [1, 65] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 66 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 67 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 68 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 69 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 70 }, { 8: $Vz, 9: $VA, 10: [1, 71], 11: $VB, 21: 72 }, o($Vy, [2, 36]), { 35: [1, 73] }, { 37: [1, 74] }, o($Vy, [2, 39]), o($VC, [2, 46], { 18: 75, 10: $Vx }), { 10: [1, 76] }, { 10: [1, 77] }, { 10: [1, 78] }, { 10: [1, 79] }, { 14: $VD, 42: $VE, 58: $VF, 77: [1, 83], 86: $VG, 92: [1, 80], 94: [1, 81], 98: 82, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, o($Vy, [2, 178]), o($Vy, [2, 179]), o($Vy, [2, 180]), o($Vy, [2, 181]), o($VO, [2, 47]), o($VO, [2, 49], { 44: [1, 96] }), o($VP, [2, 67], { 110: 109, 29: [1, 97], 42: $Vd, 46: [1, 98], 48: [1, 99], 50: [1, 100], 52: [1, 101], 54: [1, 102], 56: [1, 103], 58: $Ve, 61: [1, 104], 63: [1, 105], 65: [1, 106], 66: [1, 107], 68: [1, 108], 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($VQ, [2, 174]), o($VQ, [2, 135]), o($VQ, [2, 136]), o($VQ, [2, 137]), o($VQ, [2, 138]), o($VQ, [2, 139]), o($VQ, [2, 140]), o($VQ, [2, 141]), o($VQ, [2, 142]), o($VQ, [2, 143]), o($VQ, [2, 144]), o($VQ, [2, 145]), o($V3, [2, 12]), o($V3, [2, 18]), o($V3, [2, 19]), { 9: [1, 110] }, o($VR, [2, 26], { 18: 111, 10: $Vx }), o($Vy, [2, 27]), { 40: 112, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vy, [2, 40]), o($Vy, [2, 41]), o($Vy, [2, 42]), o($VS, [2, 71], { 71: 113, 60: [1, 115], 72: [1, 114] }), { 74: 116, 76: 117, 77: [1, 118], 78: [1, 119], 113: $VT, 116: $VU }, o([42, 58, 60, 72, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 77]), o($Vy, [2, 28]), o($Vy, [2, 29]), o($Vy, [2, 30]), o($Vy, [2, 31]), o($Vy, [2, 32]), { 10: $VV, 12: $VW, 14: $VX, 27: $VY, 28: 122, 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 77: [1, 124], 78: [1, 125], 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 123, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Ve1, $V4, { 5: 148 }), o($Vy, [2, 37]), o($Vy, [2, 38]), o($VC, [2, 45], { 42: $Vf1 }), { 42: $Vd, 45: 150, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 99: [1, 151], 100: 152, 102: [1, 153] }, { 42: $Vd, 45: 154, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 42: $Vd, 45: 155, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 100], { 10: [1, 156], 93: [1, 157] }), { 77: [1, 158] }, o($Vg1, [2, 108], { 117: 160, 10: [1, 159], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 110], { 10: [1, 161] }), o($Vh1, [2, 176]), o($Vh1, [2, 163]), o($Vh1, [2, 164]), o($Vh1, [2, 165]), o($Vh1, [2, 166]), o($Vh1, [2, 167]), o($Vh1, [2, 168]), o($Vh1, [2, 169]), o($Vh1, [2, 170]), o($Vh1, [2, 171]), o($Vh1, [2, 172]), o($Vh1, [2, 173]), { 42: $Vd, 45: 162, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 30: 163, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 171, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 173, 48: [1, 172], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 174, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 175, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 176, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 106: [1, 177] }, { 30: 178, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 179, 63: [1, 180], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 181, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 182, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 183, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VQ, [2, 175]), o($V3, [2, 20]), o($VR, [2, 25]), o($VC, [2, 43], { 18: 184, 10: $Vx }), o($VS, [2, 68], { 10: [1, 185] }), { 10: [1, 186] }, { 30: 187, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 75: [1, 188], 76: 189, 113: $VT, 116: $VU }, o($Vo1, [2, 73]), o($Vo1, [2, 75]), o($Vo1, [2, 76]), o($Vo1, [2, 161]), o($Vo1, [2, 162]), { 8: $Vz, 9: $VA, 10: $VV, 11: $VB, 12: $VW, 14: $VX, 21: 191, 27: $VY, 29: [1, 190], 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 192, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Vp1, [2, 94]), o($Vp1, [2, 96]), o($Vp1, [2, 97]), o($Vp1, [2, 150]), o($Vp1, [2, 151]), o($Vp1, [2, 152]), o($Vp1, [2, 153]), o($Vp1, [2, 154]), o($Vp1, [2, 155]), o($Vp1, [2, 156]), o($Vp1, [2, 157]), o($Vp1, [2, 158]), o($Vp1, [2, 159]), o($Vp1, [2, 160]), o($Vp1, [2, 83]), o($Vp1, [2, 84]), o($Vp1, [2, 85]), o($Vp1, [2, 86]), o($Vp1, [2, 87]), o($Vp1, [2, 88]), o($Vp1, [2, 89]), o($Vp1, [2, 90]), o($Vp1, [2, 91]), o($Vp1, [2, 92]), o($Vp1, [2, 93]), { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 193], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vx, 18: 194 }, { 10: [1, 195], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 196] }, { 10: [1, 197], 103: [1, 198] }, o($Vq1, [2, 121]), { 10: [1, 199], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 200], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 77: [1, 201] }, o($Vg1, [2, 102], { 10: [1, 202] }), o($Vg1, [2, 104], { 10: [1, 203] }), { 77: [1, 204] }, o($Vh1, [2, 177]), { 77: [1, 205], 95: [1, 206] }, o($VO, [2, 50], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), { 31: [1, 207], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Vr1, [2, 79]), o($Vr1, [2, 81]), o($Vr1, [2, 82]), o($Vr1, [2, 146]), o($Vr1, [2, 147]), o($Vr1, [2, 148]), o($Vr1, [2, 149]), { 47: [1, 209], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 210, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 49: [1, 211], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 51: [1, 212], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 53: [1, 213], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 55: [1, 214], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 58: [1, 215] }, { 62: [1, 216], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 64: [1, 217], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 218, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 31: [1, 219], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 220], 69: [1, 221], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 223], 69: [1, 222], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VC, [2, 44], { 42: $Vf1 }), o($VS, [2, 70]), o($VS, [2, 69]), { 60: [1, 224], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VS, [2, 72]), o($Vo1, [2, 74]), { 30: 225, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Ve1, $V4, { 5: 226 }), o($Vp1, [2, 95]), o($Vy, [2, 35]), { 41: 227, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 228, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 239, 101: [1, 240], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 241, 101: [1, 242], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 102: [1, 243] }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 244, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 42: $Vd, 45: 245, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 101]), { 77: [1, 246] }, { 77: [1, 247], 95: [1, 248] }, o($Vg1, [2, 109]), o($Vg1, [2, 111], { 10: [1, 249] }), o($Vg1, [2, 112]), o($VP, [2, 51]), o($Vr1, [2, 80]), o($VP, [2, 52]), { 49: [1, 250], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 59]), o($VP, [2, 54]), o($VP, [2, 55]), o($VP, [2, 56]), { 106: [1, 251] }, o($VP, [2, 58]), o($VP, [2, 60]), { 64: [1, 252], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 62]), o($VP, [2, 63]), o($VP, [2, 65]), o($VP, [2, 64]), o($VP, [2, 66]), o([10, 42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 78]), { 31: [1, 253], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 254], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($VO, [2, 48]), o($Vg1, [2, 114], { 103: $VA1 }), o($VB1, [2, 123], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($VC1, [2, 125]), o($VC1, [2, 127]), o($VC1, [2, 128]), o($VC1, [2, 129]), o($VC1, [2, 130]), o($VC1, [2, 131]), o($VC1, [2, 132]), o($VC1, [2, 133]), o($VC1, [2, 134]), o($Vg1, [2, 115], { 103: $VA1 }), { 10: [1, 257] }, o($Vg1, [2, 116], { 103: $VA1 }), { 10: [1, 258] }, o($Vq1, [2, 122]), o($Vg1, [2, 98], { 103: $VA1 }), o($Vg1, [2, 99], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($Vg1, [2, 103]), o($Vg1, [2, 105], { 10: [1, 259] }), o($Vg1, [2, 106]), { 95: [1, 260] }, { 49: [1, 261] }, { 60: [1, 262] }, { 64: [1, 263] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 264 }, o($Vy, [2, 34]), { 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 104: 265, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VC1, [2, 126]), { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 266, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 267, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 95: [1, 268] }, o($Vg1, [2, 113]), o($VP, [2, 53]), { 30: 269, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 61]), o($Ve1, $V4, { 5: 270 }), o($VB1, [2, 124], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($Vg1, [2, 119], { 117: 160, 10: [1, 271], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 120], { 117: 160, 10: [1, 272], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 107]), { 31: [1, 273], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 274], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 275, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 276, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VP, [2, 57]), o($Vy, [2, 33]), o($Vg1, [2, 117], { 103: $VA1 }), o($Vg1, [2, 118], { 103: $VA1 })], - defaultActions: {}, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex2() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex2(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex2() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: {}, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - this.begin("acc_title"); - return 34; - case 1: - this.popState(); - return "acc_title_value"; - case 2: - this.begin("acc_descr"); - return 36; - case 3: - this.popState(); - return "acc_descr_value"; - case 4: - this.begin("acc_descr_multiline"); - break; - case 5: - this.popState(); - break; - case 6: - return "acc_descr_multiline_value"; - case 7: - this.begin("callbackname"); - break; - case 8: - this.popState(); - break; - case 9: - this.popState(); - this.begin("callbackargs"); - break; - case 10: - return 92; - case 11: - this.popState(); - break; - case 12: - return 93; - case 13: - return "MD_STR"; - case 14: - this.popState(); - break; - case 15: - this.begin("md_string"); - break; - case 16: - return "STR"; - case 17: - this.popState(); - break; - case 18: - this.pushState("string"); - break; - case 19: - return 81; - case 20: - return 99; - case 21: - return 82; - case 22: - return 101; - case 23: - return 83; - case 24: - return 84; - case 25: - return 94; - case 26: - this.begin("click"); - break; - case 27: - this.popState(); - break; - case 28: - return 85; - case 29: - if (yy.lex.firstGraph()) { - this.begin("dir"); - } - return 12; - case 30: - if (yy.lex.firstGraph()) { - this.begin("dir"); - } - return 12; - case 31: - if (yy.lex.firstGraph()) { - this.begin("dir"); - } - return 12; - case 32: - return 27; - case 33: - return 32; - case 34: - return 95; - case 35: - return 95; - case 36: - return 95; - case 37: - return 95; - case 38: - this.popState(); - return 13; - case 39: - this.popState(); - return 14; - case 40: - this.popState(); - return 14; - case 41: - this.popState(); - return 14; - case 42: - this.popState(); - return 14; - case 43: - this.popState(); - return 14; - case 44: - this.popState(); - return 14; - case 45: - this.popState(); - return 14; - case 46: - this.popState(); - return 14; - case 47: - this.popState(); - return 14; - case 48: - this.popState(); - return 14; - case 49: - return 118; - case 50: - return 119; - case 51: - return 120; - case 52: - return 121; - case 53: - return 102; - case 54: - return 108; - case 55: - return 44; - case 56: - return 58; - case 57: - return 42; - case 58: - return 8; - case 59: - return 103; - case 60: - return 112; - case 61: - this.popState(); - return 75; - case 62: - this.pushState("edgeText"); - return 73; - case 63: - return 116; - case 64: - this.popState(); - return 75; - case 65: - this.pushState("thickEdgeText"); - return 73; - case 66: - return 116; - case 67: - this.popState(); - return 75; - case 68: - this.pushState("dottedEdgeText"); - return 73; - case 69: - return 116; - case 70: - return 75; - case 71: - this.popState(); - return 51; - case 72: - return "TEXT"; - case 73: - this.pushState("ellipseText"); - return 50; - case 74: - this.popState(); - return 53; - case 75: - this.pushState("text"); - return 52; - case 76: - this.popState(); - return 55; - case 77: - this.pushState("text"); - return 54; - case 78: - return 56; - case 79: - this.pushState("text"); - return 65; - case 80: - this.popState(); - return 62; - case 81: - this.pushState("text"); - return 61; - case 82: - this.popState(); - return 47; - case 83: - this.pushState("text"); - return 46; - case 84: - this.popState(); - return 67; - case 85: - this.popState(); - return 69; - case 86: - return 114; - case 87: - this.pushState("trapText"); - return 66; - case 88: - this.pushState("trapText"); - return 68; - case 89: - return 115; - case 90: - return 65; - case 91: - return 87; - case 92: - return "SEP"; - case 93: - return 86; - case 94: - return 112; - case 95: - return 108; - case 96: - return 42; - case 97: - return 106; - case 98: - return 111; - case 99: - return 113; - case 100: - this.popState(); - return 60; - case 101: - this.pushState("text"); - return 60; - case 102: - this.popState(); - return 49; - case 103: - this.pushState("text"); - return 48; - case 104: - this.popState(); - return 31; - case 105: - this.pushState("text"); - return 29; - case 106: - this.popState(); - return 64; - case 107: - this.pushState("text"); - return 63; - case 108: - return "TEXT"; - case 109: - return "QUOTE"; - case 110: - return 9; - case 111: - return 10; - case 112: - return 11; - } - }, - rules: [/^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["][`])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:["])/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s])/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:[^=]|=(?!))/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:[^\.]|\.(?!))/, /^(?:\s*~~[\~]+\s*)/, /^(?:[-/\)][\)])/, /^(?:[^\(\)\[\]\{\}]|!\)+)/, /^(?:\(-)/, /^(?:\]\))/, /^(?:\(\[)/, /^(?:\]\])/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:>)/, /^(?:\)\])/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\(\(\()/, /^(?:[\\(?=\])][\]])/, /^(?:\/(?=\])\])/, /^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/, /^(?:-)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\|)/, /^(?:\))/, /^(?:\()/, /^(?:\])/, /^(?:\[)/, /^(?:(\}))/, /^(?:\{)/, /^(?:[^\[\]\(\)\{\}\|\"]+)/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], - conditions: { "callbackargs": { "rules": [11, 12, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "callbackname": { "rules": [8, 9, 10, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "href": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "click": { "rules": [15, 18, 27, 28, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dottedEdgeText": { "rules": [15, 18, 67, 69, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "thickEdgeText": { "rules": [15, 18, 64, 66, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "edgeText": { "rules": [15, 18, 61, 63, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "trapText": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 84, 85, 86, 87, 88, 101, 103, 105, 107], "inclusive": false }, "ellipseText": { "rules": [15, 18, 70, 71, 72, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "text": { "rules": [15, 18, 70, 73, 74, 75, 76, 77, 80, 81, 82, 83, 87, 88, 100, 101, 102, 103, 104, 105, 106, 107, 108], "inclusive": false }, "vertex": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dir": { "rules": [15, 18, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr_multiline": { "rules": [5, 6, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr": { "rules": [3, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_title": { "rules": [1, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "md_string": { "rules": [13, 14, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "string": { "rules": [15, 16, 17, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 67, 68, 70, 73, 75, 77, 78, 79, 81, 83, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 105, 107, 109, 110, 111, 112], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -const MERMAID_DOM_ID_PREFIX = "flowchart-"; -let vertexCounter = 0; -let config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); -let vertices = {}; -let edges = []; -let classes = {}; -let subGraphs = []; -let subGraphLookup = {}; -let tooltips = {}; -let subCount = 0; -let firstGraphFlag = true; -let direction; -let version; -let funs = []; -const sanitizeText = (txt) => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); -const lookUpDomId = function(id) { - const vertexKeys = Object.keys(vertices); - for (const vertexKey of vertexKeys) { - if (vertices[vertexKey].id === id) { - return vertices[vertexKey].domId; - } - } - return id; -}; -const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { - let txt; - let id = _id; - if (id === void 0) { - return; - } - if (id.trim().length === 0) { - return; - } - if (vertices[id] === void 0) { - vertices[id] = { - id, - labelType: "text", - domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, - styles: [], - classes: [] - }; - } - vertexCounter++; - if (textObj !== void 0) { - config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - txt = sanitizeText(textObj.text.trim()); - vertices[id].labelType = textObj.type; - if (txt[0] === '"' && txt[txt.length - 1] === '"') { - txt = txt.substring(1, txt.length - 1); - } - vertices[id].text = txt; - } else { - if (vertices[id].text === void 0) { - vertices[id].text = _id; - } - } - if (type !== void 0) { - vertices[id].type = type; - } - if (style !== void 0 && style !== null) { - style.forEach(function(s) { - vertices[id].styles.push(s); - }); - } - if (classes2 !== void 0 && classes2 !== null) { - classes2.forEach(function(s) { - vertices[id].classes.push(s); - }); - } - if (dir !== void 0) { - vertices[id].dir = dir; - } - if (vertices[id].props === void 0) { - vertices[id].props = props; - } else if (props !== void 0) { - Object.assign(vertices[id].props, props); - } -}; -const addSingleLink = function(_start, _end, type) { - let start = _start; - let end = _end; - const edge = { start, end, type: void 0, text: "", labelType: "text" }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); - const linkTextObj = type.text; - if (linkTextObj !== void 0) { - edge.text = sanitizeText(linkTextObj.text.trim()); - if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { - edge.text = edge.text.substring(1, edge.text.length - 1); - } - edge.labelType = linkTextObj.type; - } - if (type !== void 0) { - edge.type = type.type; - edge.stroke = type.stroke; - edge.length = type.length; - } - if ((edge == null ? void 0 : edge.length) > 10) { - edge.length = 10; - } - if (edges.length < (config.maxEdges ?? 500)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 pushing edge..."); - edges.push(edge); - } else { - throw new Error( - `Edge limit exceeded. ${edges.length} edges found, but the limit is ${config.maxEdges}. - -Initialize mermaid with maxEdges set to a higher number to allow more edges. -You cannot set this config via configuration inside the diagram as it is a secure config. -You have to call mermaid.initialize.` - ); - } -}; -const addLink = function(_start, _end, type) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); - let i, j; - for (i = 0; i < _start.length; i++) { - for (j = 0; j < _end.length; j++) { - addSingleLink(_start[i], _end[j], type); - } - } -}; -const updateLinkInterpolate = function(positions, interp) { - positions.forEach(function(pos) { - if (pos === "default") { - edges.defaultInterpolate = interp; - } else { - edges[pos].interpolate = interp; - } - }); -}; -const updateLink = function(positions, style) { - positions.forEach(function(pos) { - if (pos >= edges.length) { - throw new Error( - `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)` - ); - } - if (pos === "default") { - edges.defaultStyle = style; - } else { - if (_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.isSubstringInArray("fill", style) === -1) { - style.push("fill:none"); - } - edges[pos].style = style; - } - }); -}; -const addClass = function(ids, style) { - ids.split(",").forEach(function(id) { - if (classes[id] === void 0) { - classes[id] = { id, styles: [], textStyles: [] }; - } - if (style !== void 0 && style !== null) { - style.forEach(function(s) { - if (s.match("color")) { - const newStyle = s.replace("fill", "bgFill").replace("color", "fill"); - classes[id].textStyles.push(newStyle); - } - classes[id].styles.push(s); - }); - } - }); -}; -const setDirection = function(dir) { - direction = dir; - if (direction.match(/.*</)) { - direction = "RL"; - } - if (direction.match(/.*\^/)) { - direction = "BT"; - } - if (direction.match(/.*>/)) { - direction = "LR"; - } - if (direction.match(/.*v/)) { - direction = "TB"; - } - if (direction === "TD") { - direction = "TB"; - } -}; -const setClass = function(ids, className) { - ids.split(",").forEach(function(_id) { - let id = _id; - if (vertices[id] !== void 0) { - vertices[id].classes.push(className); - } - if (subGraphLookup[id] !== void 0) { - subGraphLookup[id].classes.push(className); - } - }); -}; -const setTooltip = function(ids, tooltip) { - ids.split(",").forEach(function(id) { - if (tooltip !== void 0) { - tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); - } - }); -}; -const setClickFun = function(id, functionName, functionArgs) { - let domId = lookUpDomId(id); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel !== "loose") { - return; - } - if (functionName === void 0) { - return; - } - let argList = []; - if (typeof functionArgs === "string") { - argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); - for (let i = 0; i < argList.length; i++) { - let item = argList[i].trim(); - if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { - item = item.substr(1, item.length - 2); - } - argList[i] = item; - } - } - if (argList.length === 0) { - argList.push(id); - } - if (vertices[id] !== void 0) { - vertices[id].haveCallback = true; - funs.push(function() { - const elem = document.querySelector(`[id="${domId}"]`); - if (elem !== null) { - elem.addEventListener( - "click", - function() { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); - }, - false - ); - } - }); - } -}; -const setLink = function(ids, linkStr, target) { - ids.split(",").forEach(function(id) { - if (vertices[id] !== void 0) { - vertices[id].link = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); - vertices[id].linkTarget = target; - } - }); - setClass(ids, "clickable"); -}; -const getTooltip = function(id) { - if (tooltips.hasOwnProperty(id)) { - return tooltips[id]; - } - return void 0; -}; -const setClickEvent = function(ids, functionName, functionArgs) { - ids.split(",").forEach(function(id) { - setClickFun(id, functionName, functionArgs); - }); - setClass(ids, "clickable"); -}; -const bindFunctions = function(element) { - funs.forEach(function(fun) { - fun(element); - }); -}; -const getDirection = function() { - return direction.trim(); -}; -const getVertices = function() { - return vertices; -}; -const getEdges = function() { - return edges; -}; -const getClasses = function() { - return classes; -}; -const setupToolTips = function(element) { - let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(".mermaidTooltip"); - if ((tooltipElem._groups || tooltipElem)[0][0] === null) { - tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); - } - const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(element).select("svg"); - const nodes = svg.selectAll("g.node"); - nodes.on("mouseover", function() { - const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); - const title = el.attr("title"); - if (title === null) { - return; - } - const rect = this.getBoundingClientRect(); - tooltipElem.transition().duration(200).style("opacity", ".9"); - tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.bottom + "px"); - tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); - el.classed("hover", true); - }).on("mouseout", function() { - tooltipElem.transition().duration(500).style("opacity", 0); - const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); - el.classed("hover", false); - }); -}; -funs.push(setupToolTips); -const clear = function(ver = "gen-1") { - vertices = {}; - classes = {}; - edges = []; - funs = [setupToolTips]; - subGraphs = []; - subGraphLookup = {}; - subCount = 0; - tooltips = {}; - firstGraphFlag = true; - version = ver; - config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.v)(); -}; -const setGen = (ver) => { - version = ver || "gen-2"; -}; -const defaultStyle = function() { - return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; -}; -const addSubGraph = function(_id, list, _title) { - let id = _id.text.trim(); - let title = _title.text; - if (_id === _title && _title.text.match(/\s/)) { - id = void 0; - } - function uniq(a) { - const prims = { boolean: {}, number: {}, string: {} }; - const objs = []; - let dir2; - const nodeList2 = a.filter(function(item) { - const type = typeof item; - if (item.stmt && item.stmt === "dir") { - dir2 = item.value; - return false; - } - if (item.trim() === "") { - return false; - } - if (type in prims) { - return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; - } else { - return objs.includes(item) ? false : objs.push(item); - } - }); - return { nodeList: nodeList2, dir: dir2 }; - } - let nodeList = []; - const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); - nodeList = nl; - if (version === "gen-1") { - for (let i = 0; i < nodeList.length; i++) { - nodeList[i] = lookUpDomId(nodeList[i]); - } - } - id = id || "subGraph" + subCount; - title = title || ""; - title = sanitizeText(title); - subCount = subCount + 1; - const subGraph = { - id, - nodes: nodeList, - title: title.trim(), - classes: [], - dir, - labelType: _title.type - }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); - subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; - subGraphs.push(subGraph); - subGraphLookup[id] = subGraph; - return id; -}; -const getPosForId = function(id) { - for (const [i, subGraph] of subGraphs.entries()) { - if (subGraph.id === id) { - return i; - } - } - return -1; -}; -let secCount = -1; -const posCrossRef = []; -const indexNodes2 = function(id, pos) { - const nodes = subGraphs[pos].nodes; - secCount = secCount + 1; - if (secCount > 2e3) { - return; - } - posCrossRef[secCount] = pos; - if (subGraphs[pos].id === id) { - return { - result: true, - count: 0 - }; - } - let count = 0; - let posCount = 1; - while (count < nodes.length) { - const childPos = getPosForId(nodes[count]); - if (childPos >= 0) { - const res = indexNodes2(id, childPos); - if (res.result) { - return { - result: true, - count: posCount + res.count - }; - } else { - posCount = posCount + res.count; - } - } - count = count + 1; - } - return { - result: false, - count: posCount - }; -}; -const getDepthFirstPos = function(pos) { - return posCrossRef[pos]; -}; -const indexNodes = function() { - secCount = -1; - if (subGraphs.length > 0) { - indexNodes2("none", subGraphs.length - 1); - } -}; -const getSubGraphs = function() { - return subGraphs; -}; -const firstGraph = () => { - if (firstGraphFlag) { - firstGraphFlag = false; - return true; - } - return false; -}; -const destructStartLink = (_str) => { - let str = _str.trim(); - let type = "arrow_open"; - switch (str[0]) { - case "<": - type = "arrow_point"; - str = str.slice(1); - break; - case "x": - type = "arrow_cross"; - str = str.slice(1); - break; - case "o": - type = "arrow_circle"; - str = str.slice(1); - break; - } - let stroke = "normal"; - if (str.includes("=")) { - stroke = "thick"; - } - if (str.includes(".")) { - stroke = "dotted"; - } - return { type, stroke }; -}; -const countChar = (char, str) => { - const length = str.length; - let count = 0; - for (let i = 0; i < length; ++i) { - if (str[i] === char) { - ++count; - } - } - return count; -}; -const destructEndLink = (_str) => { - const str = _str.trim(); - let line = str.slice(0, -1); - let type = "arrow_open"; - switch (str.slice(-1)) { - case "x": - type = "arrow_cross"; - if (str[0] === "x") { - type = "double_" + type; - line = line.slice(1); - } - break; - case ">": - type = "arrow_point"; - if (str[0] === "<") { - type = "double_" + type; - line = line.slice(1); - } - break; - case "o": - type = "arrow_circle"; - if (str[0] === "o") { - type = "double_" + type; - line = line.slice(1); - } - break; - } - let stroke = "normal"; - let length = line.length - 1; - if (line[0] === "=") { - stroke = "thick"; - } - if (line[0] === "~") { - stroke = "invisible"; - } - let dots = countChar(".", line); - if (dots) { - stroke = "dotted"; - length = dots; - } - return { type, stroke, length }; -}; -const destructLink = (_str, _startStr) => { - const info = destructEndLink(_str); - let startInfo; - if (_startStr) { - startInfo = destructStartLink(_startStr); - if (startInfo.stroke !== info.stroke) { - return { type: "INVALID", stroke: "INVALID" }; - } - if (startInfo.type === "arrow_open") { - startInfo.type = info.type; - } else { - if (startInfo.type !== info.type) { - return { type: "INVALID", stroke: "INVALID" }; - } - startInfo.type = "double_" + startInfo.type; - } - if (startInfo.type === "double_arrow") { - startInfo.type = "double_arrow_point"; - } - startInfo.length = info.length; - return startInfo; - } - return info; -}; -const exists = (allSgs, _id) => { - let res = false; - allSgs.forEach((sg) => { - const pos = sg.nodes.indexOf(_id); - if (pos >= 0) { - res = true; - } - }); - return res; -}; -const makeUniq = (sg, allSubgraphs) => { - const res = []; - sg.nodes.forEach((_id, pos) => { - if (!exists(allSubgraphs, _id)) { - res.push(sg.nodes[pos]); - } - }); - return { nodes: res }; -}; -const lex = { - firstGraph -}; -const flowDb = { - defaultConfig: () => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.K.flowchart, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.g, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.a, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.b, - addVertex, - lookUpDomId, - addLink, - updateLinkInterpolate, - updateLink, - addClass, - setDirection, - setClass, - setTooltip, - getTooltip, - setClickEvent, - setLink, - bindFunctions, - getDirection, - getVertices, - getEdges, - getClasses, - clear, - setGen, - defaultStyle, - addSubGraph, - getDepthFirstPos, - indexNodes, - getSubGraphs, - destructLink, - lex, - exists, - makeUniq, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.t -}; -const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ - __proto__: null, - addClass, - addLink, - addSingleLink, - addSubGraph, - addVertex, - bindFunctions, - clear, - default: flowDb, - defaultStyle, - destructLink, - firstGraph, - getClasses, - getDepthFirstPos, - getDirection, - getEdges, - getSubGraphs, - getTooltip, - getVertices, - indexNodes, - lex, - lookUpDomId, - setClass, - setClickEvent, - setDirection, - setGen, - setLink, - updateLink, - updateLinkInterpolate -}, Symbol.toStringTag, { value: "Module" })); - - - -/***/ }), - -/***/ 74741: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(32548); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(98055); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99702); -/* harmony import */ var elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62954); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99418); - - - - - - - - - - - - - - - - -const findCommonAncestor = (id1, id2, treeData) => { - const { parentById } = treeData; - const visited = /* @__PURE__ */ new Set(); - let currentId = id1; - while (currentId) { - visited.add(currentId); - if (currentId === id2) { - return currentId; - } - currentId = parentById[currentId]; - } - currentId = id2; - while (currentId) { - if (visited.has(currentId)) { - return currentId; - } - currentId = parentById[currentId]; - } - return "root"; -}; -const elk = new elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__(); -let portPos = {}; -const conf = {}; -let nodeDb = {}; -const addVertices = async function(vert, svgId, root, doc, diagObj, parentLookupDb, graph) { - const svg = root.select(`[id="${svgId}"]`); - const nodes = svg.insert("g").attr("class", "nodes"); - const keys = Object.keys(vert); - await Promise.all( - keys.map(async function(id) { - const vertex = vert[id]; - let classStr = "default"; - if (vertex.classes.length > 0) { - classStr = vertex.classes.join(" "); - } - classStr = classStr + " flowchart-label"; - const styles2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.k)(vertex.styles); - let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; - const labelData = { width: 0, height: 0 }; - const ports = [ - { - id: vertex.id + "-west", - layoutOptions: { - "port.side": "WEST" - } - }, - { - id: vertex.id + "-east", - layoutOptions: { - "port.side": "EAST" - } - }, - { - id: vertex.id + "-south", - layoutOptions: { - "port.side": "SOUTH" - } - }, - { - id: vertex.id + "-north", - layoutOptions: { - "port.side": "NORTH" - } - } - ]; - let radius = 0; - let _shape = ""; - let layoutOptions = {}; - switch (vertex.type) { - case "round": - radius = 5; - _shape = "rect"; - break; - case "square": - _shape = "rect"; - break; - case "diamond": - _shape = "question"; - layoutOptions = { - portConstraints: "FIXED_SIDE" - }; - break; - case "hexagon": - _shape = "hexagon"; - break; - case "odd": - _shape = "rect_left_inv_arrow"; - break; - case "lean_right": - _shape = "lean_right"; - break; - case "lean_left": - _shape = "lean_left"; - break; - case "trapezoid": - _shape = "trapezoid"; - break; - case "inv_trapezoid": - _shape = "inv_trapezoid"; - break; - case "odd_right": - _shape = "rect_left_inv_arrow"; - break; - case "circle": - _shape = "circle"; - break; - case "ellipse": - _shape = "ellipse"; - break; - case "stadium": - _shape = "stadium"; - break; - case "subroutine": - _shape = "subroutine"; - break; - case "cylinder": - _shape = "cylinder"; - break; - case "group": - _shape = "rect"; - break; - case "doublecircle": - _shape = "doublecircle"; - break; - default: - _shape = "rect"; - } - const node = { - labelStyle: styles2.labelStyle, - shape: _shape, - labelText: vertexText, - labelType: vertex.labelType, - rx: radius, - ry: radius, - class: classStr, - style: styles2.style, - id: vertex.id, - link: vertex.link, - linkTarget: vertex.linkTarget, - tooltip: diagObj.db.getTooltip(vertex.id) || "", - domId: diagObj.db.lookUpDomId(vertex.id), - haveCallback: vertex.haveCallback, - width: vertex.type === "group" ? 500 : void 0, - dir: vertex.dir, - type: vertex.type, - props: vertex.props, - padding: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)().flowchart.padding - }; - let boundingBox; - let nodeEl; - if (node.type !== "group") { - nodeEl = await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, node, vertex.dir); - boundingBox = nodeEl.node().getBBox(); - } else { - doc.createElementNS("http://www.w3.org/2000/svg", "text"); - const { shapeSvg, bbox } = await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.l)(nodes, node, void 0, true); - labelData.width = bbox.width; - labelData.wrappingWidth = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)().flowchart.wrappingWidth; - labelData.height = bbox.height; - labelData.labelNode = shapeSvg.node(); - node.labelData = labelData; - } - const data = { - id: vertex.id, - ports: vertex.type === "diamond" ? ports : [], - // labelStyle: styles.labelStyle, - // shape: _shape, - layoutOptions, - labelText: vertexText, - labelData, - // labels: [{ text: vertexText }], - // rx: radius, - // ry: radius, - // class: classStr, - // style: styles.style, - // link: vertex.link, - // linkTarget: vertex.linkTarget, - // tooltip: diagObj.db.getTooltip(vertex.id) || '', - domId: diagObj.db.lookUpDomId(vertex.id), - // haveCallback: vertex.haveCallback, - width: boundingBox == null ? void 0 : boundingBox.width, - height: boundingBox == null ? void 0 : boundingBox.height, - // dir: vertex.dir, - type: vertex.type, - // props: vertex.props, - // padding: getConfig().flowchart.padding, - // boundingBox, - el: nodeEl, - parent: parentLookupDb.parentById[vertex.id] - }; - nodeDb[node.id] = data; - }) - ); - return graph; -}; -const getNextPosition = (position, edgeDirection, graphDirection) => { - const portPos2 = { - TB: { - in: { - north: "north" - }, - out: { - south: "west", - west: "east", - east: "south" - } - }, - LR: { - in: { - west: "west" - }, - out: { - east: "south", - south: "north", - north: "east" - } - }, - RL: { - in: { - east: "east" - }, - out: { - west: "north", - north: "south", - south: "west" - } - }, - BT: { - in: { - south: "south" - }, - out: { - north: "east", - east: "west", - west: "north" - } - } - }; - portPos2.TD = portPos2.TB; - return portPos2[graphDirection][edgeDirection][position]; -}; -const getNextPort = (node, edgeDirection, graphDirection) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("getNextPort", { node, edgeDirection, graphDirection }); - if (!portPos[node]) { - switch (graphDirection) { - case "TB": - case "TD": - portPos[node] = { - inPosition: "north", - outPosition: "south" - }; - break; - case "BT": - portPos[node] = { - inPosition: "south", - outPosition: "north" - }; - break; - case "RL": - portPos[node] = { - inPosition: "east", - outPosition: "west" - }; - break; - case "LR": - portPos[node] = { - inPosition: "west", - outPosition: "east" - }; - break; - } - } - const result = edgeDirection === "in" ? portPos[node].inPosition : portPos[node].outPosition; - if (edgeDirection === "in") { - portPos[node].inPosition = getNextPosition( - portPos[node].inPosition, - edgeDirection, - graphDirection - ); - } else { - portPos[node].outPosition = getNextPosition( - portPos[node].outPosition, - edgeDirection, - graphDirection - ); - } - return result; -}; -const getEdgeStartEndPoint = (edge, dir) => { - let source = edge.start; - let target = edge.end; - const sourceId = source; - const targetId = target; - const startNode = nodeDb[source]; - const endNode = nodeDb[target]; - if (!startNode || !endNode) { - return { source, target }; - } - if (startNode.type === "diamond") { - source = `${source}-${getNextPort(source, "out", dir)}`; - } - if (endNode.type === "diamond") { - target = `${target}-${getNextPort(target, "in", dir)}`; - } - return { source, target, sourceId, targetId }; -}; -const addEdges = function(edges, diagObj, graph, svg) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 edges = ", edges); - const labelsEl = svg.insert("g").attr("class", "edgeLabels"); - let linkIdCnt = {}; - let dir = diagObj.db.getDirection(); - let defaultStyle; - let defaultLabelStyle; - if (edges.defaultStyle !== void 0) { - const defaultStyles = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.k)(edges.defaultStyle); - defaultStyle = defaultStyles.style; - defaultLabelStyle = defaultStyles.labelStyle; - } - edges.forEach(function(edge) { - const linkIdBase = "L-" + edge.start + "-" + edge.end; - if (linkIdCnt[linkIdBase] === void 0) { - linkIdCnt[linkIdBase] = 0; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); - } else { - linkIdCnt[linkIdBase]++; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); - } - let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); - const linkNameStart = "LS-" + edge.start; - const linkNameEnd = "LE-" + edge.end; - const edgeData = { style: "", labelStyle: "" }; - edgeData.minlen = edge.length || 1; - if (edge.type === "arrow_open") { - edgeData.arrowhead = "none"; - } else { - edgeData.arrowhead = "normal"; - } - edgeData.arrowTypeStart = "arrow_open"; - edgeData.arrowTypeEnd = "arrow_open"; - switch (edge.type) { - case "double_arrow_cross": - edgeData.arrowTypeStart = "arrow_cross"; - case "arrow_cross": - edgeData.arrowTypeEnd = "arrow_cross"; - break; - case "double_arrow_point": - edgeData.arrowTypeStart = "arrow_point"; - case "arrow_point": - edgeData.arrowTypeEnd = "arrow_point"; - break; - case "double_arrow_circle": - edgeData.arrowTypeStart = "arrow_circle"; - case "arrow_circle": - edgeData.arrowTypeEnd = "arrow_circle"; - break; - } - let style = ""; - let labelStyle = ""; - switch (edge.stroke) { - case "normal": - style = "fill:none;"; - if (defaultStyle !== void 0) { - style = defaultStyle; - } - if (defaultLabelStyle !== void 0) { - labelStyle = defaultLabelStyle; - } - edgeData.thickness = "normal"; - edgeData.pattern = "solid"; - break; - case "dotted": - edgeData.thickness = "normal"; - edgeData.pattern = "dotted"; - edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; - break; - case "thick": - edgeData.thickness = "thick"; - edgeData.pattern = "solid"; - edgeData.style = "stroke-width: 3.5px;fill:none;"; - break; - } - if (edge.style !== void 0) { - const styles2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.k)(edge.style); - style = styles2.style; - labelStyle = styles2.labelStyle; - } - edgeData.style = edgeData.style += style; - edgeData.labelStyle = edgeData.labelStyle += labelStyle; - if (edge.interpolate !== void 0) { - edgeData.curve = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.n)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .lUB); - } else if (edges.defaultInterpolate !== void 0) { - edgeData.curve = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.n)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .lUB); - } else { - edgeData.curve = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.n)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .lUB); - } - if (edge.text === void 0) { - if (edge.style !== void 0) { - edgeData.arrowheadStyle = "fill: #333"; - } - } else { - edgeData.arrowheadStyle = "fill: #333"; - edgeData.labelpos = "c"; - } - edgeData.labelType = edge.labelType; - edgeData.label = edge.text.replace(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex, "\n"); - if (edge.style === void 0) { - edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; - } - edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); - edgeData.id = linkId; - edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; - const labelEl = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.f)(labelsEl, edgeData); - const { source, target, sourceId, targetId } = getEdgeStartEndPoint(edge, dir); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("abc78 source and target", source, target); - graph.edges.push({ - id: "e" + edge.start + edge.end, - sources: [source], - targets: [target], - sourceId, - targetId, - labelEl, - labels: [ - { - width: edgeData.width, - height: edgeData.height, - orgWidth: edgeData.width, - orgHeight: edgeData.height, - text: edgeData.label, - layoutOptions: { - "edgeLabels.inline": "true", - "edgeLabels.placement": "CENTER" - } - } - ], - edgeData - }); - }); - return graph; -}; -const addMarkersToEdge = function(svgPath, edgeData, diagramType, arrowMarkerAbsolute, id) { - let url = ""; - if (arrowMarkerAbsolute) { - url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; - url = url.replace(/\(/g, "\\("); - url = url.replace(/\)/g, "\\)"); - } - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.m)(svgPath, edgeData, url, id, diagramType); -}; -const getClasses = function(text, diagObj) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Extracting classes"); - return diagObj.db.getClasses(); -}; -const addSubGraphs = function(db2) { - const parentLookupDb = { parentById: {}, childrenById: {} }; - const subgraphs = db2.getSubGraphs(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Subgraphs - ", subgraphs); - subgraphs.forEach(function(subgraph) { - subgraph.nodes.forEach(function(node) { - parentLookupDb.parentById[node] = subgraph.id; - if (parentLookupDb.childrenById[subgraph.id] === void 0) { - parentLookupDb.childrenById[subgraph.id] = []; - } - parentLookupDb.childrenById[subgraph.id].push(node); - }); - }); - subgraphs.forEach(function(subgraph) { - ({ id: subgraph.id }); - if (parentLookupDb.parentById[subgraph.id] !== void 0) { - parentLookupDb.parentById[subgraph.id]; - } - }); - return parentLookupDb; -}; -const calcOffset = function(src, dest, parentLookupDb) { - const ancestor = findCommonAncestor(src, dest, parentLookupDb); - if (ancestor === void 0 || ancestor === "root") { - return { x: 0, y: 0 }; - } - const ancestorOffset = nodeDb[ancestor].offset; - return { x: ancestorOffset.posX, y: ancestorOffset.posY }; -}; -const insertEdge = function(edgesEl, edge, edgeData, diagObj, parentLookupDb, id) { - const offset = calcOffset(edge.sourceId, edge.targetId, parentLookupDb); - const src = edge.sections[0].startPoint; - const dest = edge.sections[0].endPoint; - const segments = edge.sections[0].bendPoints ? edge.sections[0].bendPoints : []; - const segPoints = segments.map((segment) => [segment.x + offset.x, segment.y + offset.y]); - const points = [ - [src.x + offset.x, src.y + offset.y], - ...segPoints, - [dest.x + offset.x, dest.y + offset.y] - ]; - const { x, y } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.k)(edge.edgeData); - const curve = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(x).y(y).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .lUB); - const edgePath = edgesEl.insert("path").attr("d", curve(points)).attr("class", "path " + edgeData.classes).attr("fill", "none"); - const edgeG = edgesEl.insert("g").attr("class", "edgeLabel"); - const edgeWithLabel = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(edgeG.node().appendChild(edge.labelEl)); - const box = edgeWithLabel.node().firstChild.getBoundingClientRect(); - edgeWithLabel.attr("width", box.width); - edgeWithLabel.attr("height", box.height); - edgeG.attr( - "transform", - `translate(${edge.labels[0].x + offset.x}, ${edge.labels[0].y + offset.y})` - ); - addMarkersToEdge(edgePath, edgeData, diagObj.type, diagObj.arrowMarkerAbsolute, id); -}; -const insertChildren = (nodeArray, parentLookupDb) => { - nodeArray.forEach((node) => { - if (!node.children) { - node.children = []; - } - const childIds = parentLookupDb.childrenById[node.id]; - if (childIds) { - childIds.forEach((childId) => { - node.children.push(nodeDb[childId]); - }); - } - insertChildren(node.children, parentLookupDb); - }); -}; -const draw = async function(text, id, _version, diagObj) { - var _a; - diagObj.db.clear(); - nodeDb = {}; - portPos = {}; - diagObj.db.setGen("gen-2"); - diagObj.parser.parse(text); - const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body").append("div").attr("style", "height:400px").attr("id", "cy"); - let graph = { - id: "root", - layoutOptions: { - "elk.hierarchyHandling": "INCLUDE_CHILDREN", - "org.eclipse.elk.padding": "[top=100, left=100, bottom=110, right=110]", - "elk.layered.spacing.edgeNodeBetweenLayers": "30", - // 'elk.layered.mergeEdges': 'true', - "elk.direction": "DOWN" - // 'elk.ports.sameLayerEdges': true, - // 'nodePlacement.strategy': 'SIMPLE', - }, - children: [], - edges: [] - }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Drawing flowchart using v3 renderer", elk); - let dir = diagObj.db.getDirection(); - switch (dir) { - case "BT": - graph.layoutOptions["elk.direction"] = "UP"; - break; - case "TB": - graph.layoutOptions["elk.direction"] = "DOWN"; - break; - case "LR": - graph.layoutOptions["elk.direction"] = "RIGHT"; - break; - case "RL": - graph.layoutOptions["elk.direction"] = "LEFT"; - break; - } - const { securityLevel, flowchart: conf2 } = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)(); - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); - const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; - const svg = root.select(`[id="${id}"]`); - const markers = ["point", "circle", "cross"]; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.a)(svg, markers, diagObj.type, id); - const vert = diagObj.db.getVertices(); - let subG; - const subGraphs = diagObj.db.getSubGraphs(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Subgraphs - ", subGraphs); - for (let i = subGraphs.length - 1; i >= 0; i--) { - subG = subGraphs[i]; - diagObj.db.addVertex( - subG.id, - { text: subG.title, type: subG.labelType }, - "group", - void 0, - subG.classes, - subG.dir - ); - } - const subGraphsEl = svg.insert("g").attr("class", "subgraphs"); - const parentLookupDb = addSubGraphs(diagObj.db); - graph = await addVertices(vert, id, root, doc, diagObj, parentLookupDb, graph); - const edgesEl = svg.insert("g").attr("class", "edges edgePath"); - const edges = diagObj.db.getEdges(); - graph = addEdges(edges, diagObj, graph, svg); - const nodes = Object.keys(nodeDb); - nodes.forEach((nodeId) => { - const node = nodeDb[nodeId]; - if (!node.parent) { - graph.children.push(node); - } - if (parentLookupDb.childrenById[nodeId] !== void 0) { - node.labels = [ - { - text: node.labelText, - layoutOptions: { - "nodeLabels.placement": "[H_CENTER, V_TOP, INSIDE]" - }, - width: node.labelData.width, - height: node.labelData.height - // width: 100, - // height: 100, - } - ]; - delete node.x; - delete node.y; - delete node.width; - delete node.height; - } - }); - insertChildren(graph.children, parentLookupDb); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("after layout", JSON.stringify(graph, null, 2)); - const g = await elk.layout(graph); - drawNodes(0, 0, g.children, svg, subGraphsEl, diagObj, 0); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("after layout", g); - (_a = g.edges) == null ? void 0 : _a.map((edge) => { - insertEdge(edgesEl, edge, edge.edgeData, diagObj, parentLookupDb, id); - }); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.o)({}, svg, conf2.diagramPadding, conf2.useMaxWidth); - renderEl.remove(); -}; -const drawNodes = (relX, relY, nodeArray, svg, subgraphsEl, diagObj, depth) => { - nodeArray.forEach(function(node) { - if (node) { - nodeDb[node.id].offset = { - posX: node.x + relX, - posY: node.y + relY, - x: relX, - y: relY, - depth, - width: node.width, - height: node.height - }; - if (node.type === "group") { - const subgraphEl = subgraphsEl.insert("g").attr("class", "subgraph"); - subgraphEl.insert("rect").attr("class", "subgraph subgraph-lvl-" + depth % 5 + " node").attr("x", node.x + relX).attr("y", node.y + relY).attr("width", node.width).attr("height", node.height); - const label = subgraphEl.insert("g").attr("class", "label"); - const labelCentering = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)().flowchart.htmlLabels ? node.labelData.width / 2 : 0; - label.attr( - "transform", - `translate(${node.labels[0].x + relX + node.x + labelCentering}, ${node.labels[0].y + relY + node.y + 3})` - ); - label.node().appendChild(node.labelData.labelNode); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Id (UGH)= ", node.type, node.labels); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Id (UGH)= ", node.id); - node.el.attr( - "transform", - `translate(${node.x + relX + node.width / 2}, ${node.y + relY + node.height / 2})` - ); - } - } - }); - nodeArray.forEach(function(node) { - if (node && node.type === "group") { - drawNodes(relX + node.x, relY + node.y, node.children, svg, subgraphsEl, diagObj, depth + 1); - } - }); -}; -const renderer = { - getClasses, - draw -}; -const genSections = (options) => { - let sections = ""; - for (let i = 0; i < 5; i++) { - sections += ` - .subgraph-lvl-${i} { - fill: ${options[`surface${i}`]}; - stroke: ${options[`surfacePeer${i}`]}; - } - `; - } - return sections; -}; -const getStyles = (options) => `.label { - font-family: ${options.fontFamily}; - color: ${options.nodeTextColor || options.textColor}; - } - .cluster-label text { - fill: ${options.titleColor}; - } - .cluster-label span { - color: ${options.titleColor}; - } - - .label text,span { - fill: ${options.nodeTextColor || options.textColor}; - color: ${options.nodeTextColor || options.textColor}; - } - - .node rect, - .node circle, - .node ellipse, - .node polygon, - .node path { - fill: ${options.mainBkg}; - stroke: ${options.nodeBorder}; - stroke-width: 1px; - } - - .node .label { - text-align: center; - } - .node.clickable { - cursor: pointer; - } - - .arrowheadPath { - fill: ${options.arrowheadColor}; - } - - .edgePath .path { - stroke: ${options.lineColor}; - stroke-width: 2.0px; - } - - .flowchart-link { - stroke: ${options.lineColor}; - fill: none; - } - - .edgeLabel { - background-color: ${options.edgeLabelBackground}; - rect { - opacity: 0.85; - background-color: ${options.edgeLabelBackground}; - fill: ${options.edgeLabelBackground}; - } - text-align: center; - } - - .cluster rect { - fill: ${options.clusterBkg}; - stroke: ${options.clusterBorder}; - stroke-width: 1px; - } - - .cluster text { - fill: ${options.titleColor}; - } - - .cluster span { - color: ${options.titleColor}; - } - /* .cluster div { - color: ${options.titleColor}; - } */ - - div.mermaidTooltip { - position: absolute; - text-align: center; - max-width: 200px; - padding: 2px; - font-family: ${options.fontFamily}; - font-size: 12px; - background: ${options.tertiaryColor}; - border: 1px solid ${options.border2}; - border-radius: 2px; - pointer-events: none; - z-index: 100; - } - - .flowchartTitleText { - text-anchor: middle; - font-size: 18px; - fill: ${options.textColor}; - } - .subgraph { - stroke-width:2; - rx:3; - } - // .subgraph-lvl-1 { - // fill:#ccc; - // // stroke:black; - // } - - .flowchart-label text { - text-anchor: middle; - } - - ${genSections(options)} -`; -const styles = getStyles; -const diagram = { - db: _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__.d, - renderer, - parser: _flowDb_c1833063_js__WEBPACK_IMPORTED_MODULE_7__.p, - styles -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/7426.ae5481b0.js b/pr-preview/pr-1594/assets/js/7426.ae5481b0.js deleted file mode 100644 index d483449dbe..0000000000 --- a/pr-preview/pr-1594/assets/js/7426.ae5481b0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7426],{87426:(t,e,a)=>{a.d(e,{diagram:()=>y});var r=a(63626),i=a(26312),n=a(21176),d=a(697),o=a(99702);a(74353),a(16750),a(42838);let s=0;const l=function(t){let e=t.id;return t.type&&(e+="<"+(0,o.x)(t.type)+">"),e},p=function(t,e,a,r){const{displayText:i,cssStyle:n}=e.getDisplayDetails(),d=t.append("tspan").attr("x",r.padding).text(i);""!==n&&d.attr("style",e.cssStyle),a||d.attr("dy",r.textHeight)},c=function(t,e,a,r){o.l.debug("Rendering class ",e,a);const i=e.id,n={id:i,label:e.id,width:0,height:0},d=t.append("g").attr("id",r.db.lookUpDomId(i)).attr("class","classGroup");let s;s=e.link?d.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",a.textHeight+a.padding).attr("x",0):d.append("text").attr("y",a.textHeight+a.padding).attr("x",0);let c=!0;e.annotations.forEach((function(t){const e=s.append("tspan").text("\xab"+t+"\xbb");c||e.attr("dy",a.textHeight),c=!1}));let g=l(e);const h=s.append("tspan").text(g).attr("class","title");c||h.attr("dy",a.textHeight);const f=s.node().getBBox().height;let x,u,y;if(e.members.length>0){x=d.append("line").attr("x1",0).attr("y1",a.padding+f+a.dividerMargin/2).attr("y2",a.padding+f+a.dividerMargin/2);const t=d.append("text").attr("x",a.padding).attr("y",f+a.dividerMargin+a.textHeight).attr("fill","white").attr("class","classText");c=!0,e.members.forEach((function(e){p(t,e,c,a),c=!1})),u=t.node().getBBox()}if(e.methods.length>0){y=d.append("line").attr("x1",0).attr("y1",a.padding+f+a.dividerMargin+u.height).attr("y2",a.padding+f+a.dividerMargin+u.height);const t=d.append("text").attr("x",a.padding).attr("y",f+2*a.dividerMargin+u.height+a.textHeight).attr("fill","white").attr("class","classText");c=!0,e.methods.forEach((function(e){p(t,e,c,a),c=!1}))}const b=d.node().getBBox();var m=" ";e.cssClasses.length>0&&(m+=e.cssClasses.join(" "));const k=d.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",b.width+2*a.padding).attr("height",b.height+a.padding+.5*a.dividerMargin).attr("class",m).node().getBBox().width;return s.node().childNodes.forEach((function(t){t.setAttribute("x",(k-t.getBBox().width)/2)})),e.tooltip&&s.insert("title").text(e.tooltip),x&&x.attr("x2",k),y&&y.attr("x2",k),n.width=k,n.height=b.height+a.padding+.5*a.dividerMargin,n},g=function(t,e,a,r,n){const d=function(t){switch(t){case n.db.relationType.AGGREGATION:return"aggregation";case n.db.relationType.EXTENSION:return"extension";case n.db.relationType.COMPOSITION:return"composition";case n.db.relationType.DEPENDENCY:return"dependency";case n.db.relationType.LOLLIPOP:return"lollipop"}};e.points=e.points.filter((t=>!Number.isNaN(t.y)));const l=e.points,p=(0,i.n8j)().x((function(t){return t.x})).y((function(t){return t.y})).curve(i.qrM),c=t.append("path").attr("d",p(l)).attr("id","edge"+s).attr("class","relation");let g,h,f="";r.arrowMarkerAbsolute&&(f=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,f=f.replace(/\(/g,"\\("),f=f.replace(/\)/g,"\\)")),1==a.relation.lineType&&c.attr("class","relation dashed-line"),10==a.relation.lineType&&c.attr("class","relation dotted-line"),"none"!==a.relation.type1&&c.attr("marker-start","url("+f+"#"+d(a.relation.type1)+"Start)"),"none"!==a.relation.type2&&c.attr("marker-end","url("+f+"#"+d(a.relation.type2)+"End)");const x=e.points.length;let u,y,b,m,k=o.u.calcLabelPosition(e.points);if(g=k.x,h=k.y,x%2!=0&&x>1){let t=o.u.calcCardinalityPosition("none"!==a.relation.type1,e.points,e.points[0]),r=o.u.calcCardinalityPosition("none"!==a.relation.type2,e.points,e.points[x-1]);o.l.debug("cardinality_1_point "+JSON.stringify(t)),o.l.debug("cardinality_2_point "+JSON.stringify(r)),u=t.x,y=t.y,b=r.x,m=r.y}if(void 0!==a.title){const e=t.append("g").attr("class","classLabel"),i=e.append("text").attr("class","label").attr("x",g).attr("y",h).attr("fill","red").attr("text-anchor","middle").text(a.title);window.label=i;const n=i.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",n.x-r.padding/2).attr("y",n.y-r.padding/2).attr("width",n.width+r.padding).attr("height",n.height+r.padding)}if(o.l.info("Rendering relation "+JSON.stringify(a)),void 0!==a.relationTitle1&&"none"!==a.relationTitle1){t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",u).attr("y",y).attr("fill","black").attr("font-size","6").text(a.relationTitle1)}if(void 0!==a.relationTitle2&&"none"!==a.relationTitle2){t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",b).attr("y",m).attr("fill","black").attr("font-size","6").text(a.relationTitle2)}s++},h=function(t,e,a,r){o.l.debug("Rendering note ",e,a);const i=e.id,n={id:i,text:e.text,width:0,height:0},d=t.append("g").attr("id",i).attr("class","classGroup");let s=d.append("text").attr("y",a.textHeight+a.padding).attr("x",0);const l=JSON.parse(`"${e.text}"`).split("\n");l.forEach((function(t){o.l.debug(`Adding line: ${t}`),s.append("tspan").text(t).attr("class","title").attr("dy",a.textHeight)}));const p=d.node().getBBox(),c=d.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",p.width+2*a.padding).attr("height",p.height+l.length*a.textHeight+a.padding+.5*a.dividerMargin).node().getBBox().width;return s.node().childNodes.forEach((function(t){t.setAttribute("x",(c-t.getBBox().width)/2)})),n.width=c,n.height=p.height+l.length*a.textHeight+a.padding+.5*a.dividerMargin,n};let f={};const x=function(t){const e=Object.entries(f).find((e=>e[1].label===t));if(e)return e[0]},u={draw:function(t,e,a,r){const s=(0,o.c)().class;f={},o.l.info("Rendering diagram "+t);const l=(0,o.c)().securityLevel;let p;"sandbox"===l&&(p=(0,i.Ltv)("#i"+e));const u="sandbox"===l?(0,i.Ltv)(p.nodes()[0].contentDocument.body):(0,i.Ltv)("body"),y=u.select(`[id='${e}']`);var b;(b=y).append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),b.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),b.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),b.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),b.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),b.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),b.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),b.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z");const m=new d.T({multigraph:!0});m.setGraph({isMultiGraph:!0}),m.setDefaultEdgeLabel((function(){return{}}));const k=r.db.getClasses(),w=Object.keys(k);for(const i of w){const t=k[i],e=c(y,t,s,r);f[e.id]=e,m.setNode(e.id,e),o.l.info("Org height: "+e.height)}r.db.getRelations().forEach((function(t){o.l.info("tjoho"+x(t.id1)+x(t.id2)+JSON.stringify(t)),m.setEdge(x(t.id1),x(t.id2),{relation:t},t.title||"DEFAULT")}));r.db.getNotes().forEach((function(t){o.l.debug(`Adding note: ${JSON.stringify(t)}`);const e=h(y,t,s,r);f[e.id]=e,m.setNode(e.id,e),t.class&&t.class in k&&m.setEdge(t.id,x(t.class),{relation:{id1:t.id,id2:t.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")})),(0,n.Zp)(m),m.nodes().forEach((function(t){void 0!==t&&void 0!==m.node(t)&&(o.l.debug("Node "+t+": "+JSON.stringify(m.node(t))),u.select("#"+(r.db.lookUpDomId(t)||t)).attr("transform","translate("+(m.node(t).x-m.node(t).width/2)+","+(m.node(t).y-m.node(t).height/2)+" )"))})),m.edges().forEach((function(t){void 0!==t&&void 0!==m.edge(t)&&(o.l.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(m.edge(t))),g(y,m.edge(t),m.edge(t).relation,s,r))}));const L=y.node().getBBox(),v=L.width+40,E=L.height+40;(0,o.i)(y,E,v,s.useMaxWidth);const M=`${L.x-20} ${L.y-20} ${v} ${E}`;o.l.debug(`viewBox ${M}`),y.attr("viewBox",M)}},y={parser:r.p,db:r.d,renderer:u,styles:r.s,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,r.d.clear()}}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/76bcc235.e9a356aa.js b/pr-preview/pr-1594/assets/js/76bcc235.e9a356aa.js deleted file mode 100644 index 16b1f4012b..0000000000 --- a/pr-preview/pr-1594/assets/js/76bcc235.e9a356aa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2902],{97297:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>a,frontMatter:()=>t,metadata:()=>c,toc:()=>l});var n=r(74848),i=r(28453);const t={},o="Freshdesk",c={id:"reference/Connectors/capture-connectors/freshdesk",title:"Freshdesk",description:"This connector captures Freshdesk data into Flow collections via the Freshdesk API.",source:"@site/docs/reference/Connectors/capture-connectors/freshdesk.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/freshdesk",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/freshdesk.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Facebook Marketing",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing"},next:{title:"Google Cloud Storage",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs"}},d={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function h(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"freshdesk",children:"Freshdesk"}),"\n",(0,n.jsxs)(s.p,{children:["This connector captures Freshdesk data into Flow collections via the ",(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#introduction",children:"Freshdesk API"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,n.jsx)(s.a,{href:"https://ghcr.io/estuary/source-freshdesk:dev",children:(0,n.jsx)(s.code,{children:"ghcr.io/estuary/source-freshdesk:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,n.jsxs)(s.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,n.jsx)(s.a,{href:"https://docs.airbyte.com/integrations/sources/freshdesk/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,n.jsx)(s.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,n.jsx)(s.p,{children:"The following data resources are supported:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#agents",children:"Agents"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#business-hours",children:"Business hours"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#list_all_canned_response_folders",children:"Canned response folders"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#canned-responses",children:"Canned responses"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#companies",children:"Companies"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#contacts",children:"Contacts"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#conversations",children:"Conversations"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#category_attributes",children:"Discussion categories"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#comment_attributes",children:"Discussion comments"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#forum_attributes",children:"Discussion forums"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#topic_attributes",children:"Discussion topics"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#email-configs",children:"Email configs"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#email-mailboxes",children:"Email mailboxes"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#groups",children:"Groups"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#products",children:"Products"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#roles",children:"Roles"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#satisfaction-ratings",children:"Satisfaction ratings"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#scenario-automations",children:"Scenario automations"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#settings",children:"Settings"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#skills",children:"Skills"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#sla-policies",children:"SLA policies"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#solution_article_attributes",children:"Solution articles"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#solution_category_attributes",children:"Solution categories"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#solution_folder_attributes",children:"Solution folders"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#surveys",children:"Surveys"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#ticket-fields",children:"Ticket fields"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#tickets",children:"Tickets"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.freshdesk.com/api/#time-entries",children:"Time entries"})}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,n.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsx)(s.p,{children:"To use this connector, you'll need:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Your ",(0,n.jsx)(s.a,{href:"https://support.freshdesk.com/en/support/solutions/articles/237264-how-do-i-find-my-freshdesk-account-url-using-my-email-address-",children:"Freshdesk account URL"})]}),"\n",(0,n.jsxs)(s.li,{children:["Your ",(0,n.jsx)(s.a,{href:"https://support.freshdesk.com/en/support/solutions/articles/215517",children:"Freshdesk API key"})]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsxs)(s.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,n.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Freshdesk source connector."]}),"\n",(0,n.jsx)(s.h3,{id:"properties",children:"Properties"}),"\n",(0,n.jsx)(s.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Property"}),(0,n.jsx)(s.th,{children:"Title"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Type"}),(0,n.jsx)(s.th,{children:"Required/Default"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"/api_key"})})}),(0,n.jsx)(s.td,{children:"API Key"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.a,{href:"https://support.freshdesk.com/en/support/solutions/articles/215517",children:"Freshdesk API Key."})}),(0,n.jsx)(s.td,{children:"string"}),(0,n.jsx)(s.td,{children:"Required"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"/domain"})})}),(0,n.jsx)(s.td,{children:"Domain"}),(0,n.jsx)(s.td,{children:"Freshdesk domain"}),(0,n.jsx)(s.td,{children:"string"}),(0,n.jsx)(s.td,{children:"Required"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"/requests_per_minute"})}),(0,n.jsx)(s.td,{children:"Requests per minute"}),(0,n.jsx)(s.td,{children:"The number of requests per minute that this source is allowed to use. There is a rate limit of 50 requests per minute per app per account."}),(0,n.jsx)(s.td,{children:"integer"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"/start_date"})}),(0,n.jsx)(s.td,{children:"Start Date"}),(0,n.jsx)(s.td,{children:"UTC date and time. Any data created after this date will be replicated. If this parameter is not set, all data will be replicated."}),(0,n.jsx)(s.td,{children:"string"}),(0,n.jsx)(s.td,{})]})]})]}),"\n",(0,n.jsx)(s.h4,{id:"bindings",children:"Bindings"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Property"}),(0,n.jsx)(s.th,{children:"Title"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Type"}),(0,n.jsx)(s.th,{children:"Required/Default"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"/stream"})})}),(0,n.jsx)(s.td,{children:"Stream"}),(0,n.jsx)(s.td,{children:"Resource from the Freshdesk API from which a collection is captured."}),(0,n.jsx)(s.td,{children:"string"}),(0,n.jsx)(s.td,{children:"Required"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"/syncMode"})})}),(0,n.jsx)(s.td,{children:"Sync mode"}),(0,n.jsx)(s.td,{children:"Connection method."}),(0,n.jsx)(s.td,{children:"string"}),(0,n.jsx)(s.td,{children:"Required"})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"sample",children:"Sample"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-freshdesk:dev\n config:\n api_key: xxxxxxxxxxxxxxxx\n domain: acmesupport.freshdesk.com\n bindings:\n - resource:\n stream: agents\n syncMode: incremental\n target: ${PREFIX}/agents\n {...}\n"})})]})}function a(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},28453:(e,s,r)=>{r.d(s,{R:()=>o,x:()=>c});var n=r(96540);const i={},t=n.createContext(i);function o(e){const s=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/770e6532.6787aeaf.js b/pr-preview/pr-1594/assets/js/770e6532.6787aeaf.js deleted file mode 100644 index 37d23f8ec8..0000000000 --- a/pr-preview/pr-1594/assets/js/770e6532.6787aeaf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3756],{32652:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var r=t(74848),s=t(28453);const i={},o="Snowflake CDC Connector",a={id:"reference/Connectors/capture-connectors/snowflake",title:"Snowflake CDC Connector",description:"This connector captures change events from source tables in a Snowflake database.",source:"@site/docs/reference/Connectors/capture-connectors/snowflake.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/snowflake",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/snowflake.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Snapchat Marketing",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat"},next:{title:"Stripe",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe"}},c={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Endpoint Properties",id:"endpoint-properties",level:3},{value:"Binding Properties",id:"binding-properties",level:3},{value:"Polling Interval",id:"polling-interval",level:3},{value:"Sample Configuration",id:"sample-configuration",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"snowflake-cdc-connector",children:"Snowflake CDC Connector"}),"\n",(0,r.jsx)(n.p,{children:"This connector captures change events from source tables in a Snowflake database."}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["A Snowflake account that includes:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"A target database containing the tables you want to capture from."}),"\n",(0,r.jsxs)(n.li,{children:["A ",(0,r.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/warehouses",children:"virtual warehouse"})," which the connector can use to execute queries."]}),"\n",(0,r.jsxs)(n.li,{children:["A ",(0,r.jsx)(n.a,{href:"https://docs.snowflake.com/en/sql-reference/ddl-database.html",children:"schema"})," which will hold ",(0,r.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/streams-intro",children:"streams"})," and staging tables managed by the connector. The default name for this schema is ",(0,r.jsx)(n.code,{children:"ESTUARY_STAGING"})," unless overridden in the capture's advanced configuration."]}),"\n",(0,r.jsx)(n.li,{children:"A user with access grants for these resources, as well as authorization to read from the desired source tables, and to create streams and transient tables in the staging schema based on the source tables."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["The host URL for your Snowflake account. This is formatted using your ",(0,r.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/admin-account-identifier.html#where-are-account-identifiers-used",children:"Snowflake account identifier"}),", and might look something like ",(0,r.jsx)(n.code,{children:"sg31386.snowflakecomputing.com"})," or ",(0,r.jsx)(n.code,{children:"df98701.us-central1.gcp.snowflakecomputing.com"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["See the ",(0,r.jsx)(n.a,{href:"#setup",children:"script below"})," for details."]}),"\n",(0,r.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,r.jsx)(n.p,{children:"To set up a user account and warehouse for use with the Snowflake CDC connector,\ncopy and paste the following script into the Snowflake SQL editor. Modify the\nvariable declarations in the first few lines to set the password and optionally\ncustomize the names involved."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"set database_name = 'SOURCE_DB'; -- The database to capture from\nset warehouse_name = 'ESTUARY_WH'; -- The warehouse to execute queries in\nset estuary_user = 'ESTUARY_USER'; -- The name of the capture user\nset estuary_password = 'secret'; -- The password of the capture user\nset estuary_role = 'ESTUARY_ROLE'; -- A role for the capture user's permissions\n\n-- Create a role and user for Estuary\ncreate role if not exists identifier($estuary_role);\ngrant role identifier($estuary_role) to role SYSADMIN;\ncreate user if not exists identifier($estuary_user)\n password = $estuary_password\n default_role = $estuary_role\n default_warehouse = $warehouse_name;\ngrant role identifier($estuary_role) to user identifier($estuary_user);\n\n-- Create a warehouse for Estuary and grant access to it\ncreate warehouse if not exists identifier($warehouse_name)\n warehouse_size = xsmall\n warehouse_type = standard\n auto_suspend = 60\n auto_resume = true\n initially_suspended = true;\ngrant USAGE\n on warehouse identifier($warehouse_name)\n to role identifier($estuary_role);\n\n-- Grant Estuary access to read from all tables in the database and to create a staging schema\ngrant CREATE SCHEMA, MONITOR, USAGE\n on database identifier($database_name)\n to role identifier($estuary_role);\ngrant USAGE\n on future schemas in database identifier($database_name)\n to role identifier($estuary_role);\ngrant USAGE\n on all schemas in database identifier($database_name)\n to role identifier($estuary_role);\ngrant SELECT\n on future tables in database identifier($database_name)\n to role identifier($estuary_role);\ngrant SELECT\n on all tables in database identifier($database_name)\n to role identifier($estuary_role);\n\ncommit;\n"})}),"\n",(0,r.jsx)(n.p,{children:'Be sure to run the entire script with the "Run All" option.'}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You can configure connectors either in the Flow web app, or by directly editing the catalog specification file. See ",(0,r.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Snowflake CDC source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"endpoint-properties",children:"Endpoint Properties"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/host"})})}),(0,r.jsx)(n.td,{children:"Host URL"}),(0,r.jsx)(n.td,{children:"The Snowflake Host used for the connection. Example: orgname-accountname.snowflakecomputing.com (do not include the protocol)."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/account"})})}),(0,r.jsx)(n.td,{children:"Account"}),(0,r.jsx)(n.td,{children:"The Snowflake account identifier"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/database"})})}),(0,r.jsx)(n.td,{children:"Database"}),(0,r.jsx)(n.td,{children:"The name of the Snowflake database to capture from"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/user"})})}),(0,r.jsx)(n.td,{children:"User"}),(0,r.jsx)(n.td,{children:"The Snowflake user login name"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/password"})})}),(0,r.jsx)(n.td,{children:"Password"}),(0,r.jsx)(n.td,{children:"The password for the specified login user"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/warehouse"})}),(0,r.jsx)(n.td,{children:"Warehouse"}),(0,r.jsx)(n.td,{children:"The Snowflake virtual warehouse used to execute queries. The default warehouse for the user will be used if this is blank."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced"})}),(0,r.jsx)(n.td,{children:"Advanced Options"}),(0,r.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/flowSchema"})}),(0,r.jsx)(n.td,{children:"Flow Schema"}),(0,r.jsx)(n.td,{children:"The schema in which Flow will create and manage its streams and staging tables."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"ESTUARY_STAGING"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"binding-properties",children:"Binding Properties"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/table"})})}),(0,r.jsx)(n.td,{children:"Table"}),(0,r.jsx)(n.td,{children:"The name of the table to capture"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/schema"})})}),(0,r.jsx)(n.td,{children:"Schema"}),(0,r.jsx)(n.td,{children:"The schema in which the table resides"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"polling-interval",children:"Polling Interval"}),"\n",(0,r.jsxs)(n.p,{children:['Keeping a Snowflake compute warehouse active 24/7 can be prohibitively expensive for many users,\nso the Snowflake CDC connector is designed to poll for changes at a configurable interval, at\nwhich time it will capture into Flow all new changes since the previous execution. This polling\ninterval is set to 5 minutes by default, in an attempt to strike a balance between cost savings\nwhile still providing "good enough" capture latency for most streaming uses. The interval may\nbe configured by editing the task spec ',(0,r.jsx)(n.code,{children:"interval"})," property ",(0,r.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/captures/#specification",children:"as described here"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Specifying a smaller interval can provide even lower capture latencies but is likely to incur\nhigher costs for Snowflake warehouse usage. A higher interval will reduce Snowflake costs by\nallowing the warehouse to be idle for longer, in cases where it's okay for the captured data\nto lag the source dataset by a few hours. Note that regardless of the polling interval the\noutput collections will contain an accurate representation of the source tables up to some\nmoment in time, the interval merely controls how frequent and fine-grained the updates are."}),"\n",(0,r.jsx)(n.h3,{id:"sample-configuration",children:"Sample Configuration"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${prefix}/source-snowflake:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-snowflake:v1\n config:\n host: cf22902.us-central1.gcp.snowflakecomputing.com\n account: cf22902\n database: SOURCE_DB\n user: ESTUARY_USER\n password: secret\n bindings:\n - resource:\n schema: ${schema_name}\n table: ${table_name}\n target: ${prefix}/collection_name\n interval: 30m\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var r=t(96540);const s={},i=r.createContext(s);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/7718f40c.fd132592.js b/pr-preview/pr-1594/assets/js/7718f40c.fd132592.js deleted file mode 100644 index 0535e1e445..0000000000 --- a/pr-preview/pr-1594/assets/js/7718f40c.fd132592.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9595],{7106:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>o});var s=t(74848),r=t(28453);const i={},c="Apache Iceberg Tables in Amazon S3",d={id:"reference/Connectors/materialization-connectors/amazon-s3-iceberg",title:"Apache Iceberg Tables in Amazon S3",description:"This connector materializes delta updates of",source:"@site/docs/reference/Connectors/materialization-connectors/amazon-s3-iceberg.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/amazon-s3-iceberg",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/amazon-s3-iceberg.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"CSV Files in Amazon S3",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv"},next:{title:"Apache Parquet Files in Amazon S3",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet"}},l={},o=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Iceberg Column Types",id:"iceberg-column-types",level:2},{value:"Table Maintenance",id:"table-maintenance",level:2},{value:"At-Least-Once Semantics",id:"at-least-once-semantics",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"apache-iceberg-tables-in-amazon-s3",children:"Apache Iceberg Tables in Amazon S3"}),"\n",(0,s.jsxs)(n.p,{children:["This connector materializes ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})," of\nFlow collections into Apache Iceberg tables using Amazon S3 for object storage and ",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-iceberg.html",children:"AWS\nGlue"})," as\nthe Iceberg catalog."]}),"\n",(0,s.jsx)(n.p,{children:"The delta updates are batched within Flow, converted to parquet files, and then append to Iceberg\ntables at a time interval that you set."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/materialize-s3-iceberg:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/materialize-s3-iceberg:dev"})}),"\nprovides the latest connector image. You can also follow the link in your browser to see past image\nversions."]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["An S3 bucket to write files to. See ",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html",children:"this\nguide"})," for\ninstructions on setting up a new S3 bucket."]}),"\n",(0,s.jsxs)(n.li,{children:["An AWS root or IAM user with access to AWS Glue. See ",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/glue/latest/dg/set-up-iam.html",children:"this\nguide"})," for instructions on setting up\nIAM permissions for a user to access AWS Glue. Make sure to select ",(0,s.jsx)(n.strong,{children:"Read and write"})," access for\nyour bucket to enable the connector to write data."]}),"\n",(0,s.jsxs)(n.li,{children:["For this user, you'll need the ",(0,s.jsx)(n.strong,{children:"access key"})," and ",(0,s.jsx)(n.strong,{children:"secret access key"}),". See the ",(0,s.jsx)(n.a,{href:"https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/",children:"AWS\nblog"})," for help finding these\ncredentials."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsx)(n.p,{children:"Use the below properties to configure the materialization, which will direct one or more of your\nFlow collections to your tables."}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/aws_access_key_id"})})}),(0,s.jsx)(n.td,{children:"AWS Access Key ID"}),(0,s.jsx)(n.td,{children:"Access Key ID for accessing AWS services."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/aws_secret_access_key"})})}),(0,s.jsx)(n.td,{children:"AWS Secret Access key"}),(0,s.jsx)(n.td,{children:"Secret Access Key for accessing AWS services."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/bucket"})})}),(0,s.jsx)(n.td,{children:"Bucket"}),(0,s.jsx)(n.td,{children:"The S3 bucket to write data files to."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/prefix"})}),(0,s.jsx)(n.td,{children:"Prefix"}),(0,s.jsx)(n.td,{children:"Optional prefix that will be used to store objects."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/region"})})}),(0,s.jsx)(n.td,{children:"Region"}),(0,s.jsx)(n.td,{children:"AWS Region."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/namespace"})})}),(0,s.jsx)(n.td,{children:"Namespace"}),(0,s.jsx)(n.td,{children:"Namespace for bound collection tables (unless overridden within the binding resource configuration)."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/upload_interval"})}),(0,s.jsx)(n.td,{children:"Upload Interval"}),(0,s.jsx)(n.td,{children:"Frequency at which files will be uploaded. Must be a valid ISO8601 duration string no greater than 4 hours."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"PT5M"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/table"})})}),(0,s.jsx)(n.td,{children:"Table"}),(0,s.jsx)(n.td,{children:"Name of the database table."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/namespace"})}),(0,s.jsx)(n.td,{children:"Alternative Namespace"}),(0,s.jsx)(n.td,{children:"Alternative namespace for this table (optional)."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/delta_updates"})}),(0,s.jsx)(n.td,{children:"Delta Updates"}),(0,s.jsx)(n.td,{children:"Should updates to this table be done via delta updates. Currently this connector only supports delta updates."}),(0,s.jsx)(n.td,{children:"bool"}),(0,s.jsx)(n.td,{children:"true"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/materialize-s3-iceberg:dev"\n config:\n aws_access_key_id: <access_key_id>\n aws_secret_access_key: <secret_access_key>\n bucket: bucket\n region: us-east-2\n namespace: namespace\n upload_interval: PT5M\n bindings:\n - resource:\n table: ${COLLECTION_NAME}\n delta_updates: true\n source: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,s.jsx)(n.h2,{id:"iceberg-column-types",children:"Iceberg Column Types"}),"\n",(0,s.jsxs)(n.p,{children:["Flow collection fields are written to Iceberg table columns based on the data type of the field.\nIceberg ",(0,s.jsx)(n.a,{href:"https://iceberg.apache.org/spec/#primitive-types",children:"V2 primitive type"})," columns are created\nfor these Flow collection fields:"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Collection Field Data Type"}),(0,s.jsx)(n.th,{children:"Iceberg Column Type"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"array"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"string"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"object"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"string"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"boolean"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"boolean"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"integer"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"long"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"number"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"double"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.strong,{children:"string"})," with ",(0,s.jsx)(n.code,{children:"{contentEncoding: base64}"})]}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"binary"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.strong,{children:"string"})," with ",(0,s.jsx)(n.code,{children:"{format: date-time}"})]}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.strong,{children:"timestamptz"})," (with microsecond precision)"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.strong,{children:"string"})," with ",(0,s.jsx)(n.code,{children:"{format: date}"})]}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"date"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.strong,{children:"string"})," with ",(0,s.jsx)(n.code,{children:"{format: integer}"})]}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"long"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.strong,{children:"string"})," with ",(0,s.jsx)(n.code,{children:"{format: number}"})]}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"double"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.strong,{children:"string"})," (all others)"]}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"string"})})]})]})]}),"\n",(0,s.jsxs)(n.p,{children:["Flow collection fields with ",(0,s.jsx)(n.code,{children:"{type: string, format: time}"})," and ",(0,s.jsx)(n.code,{children:"{type: string, format: uuid}"})," are\nmaterialized as ",(0,s.jsx)(n.strong,{children:"string"})," columns rather than ",(0,s.jsx)(n.strong,{children:"time"})," and ",(0,s.jsx)(n.strong,{children:"uuid"})," columns for compatibility with\nApache Spark. ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://iceberg.apache.org/spec/#nested-types",children:"Nested types"})})," are not currently\nsupported."]}),"\n",(0,s.jsx)(n.h2,{id:"table-maintenance",children:"Table Maintenance"}),"\n",(0,s.jsxs)(n.p,{children:["To ensure optimal query performance, you should conduct ",(0,s.jsx)(n.a,{href:"https://iceberg.apache.org/docs/latest/maintenance/",children:"regular\nmaintenance"})," for your materialized tables since\nthe connector will not perform this maintenance automatically (support for automatic table\nmaintenance is planned)."]}),"\n",(0,s.jsxs)(n.p,{children:["If you're using the AWS Glue catalog, you can enable automatic data file compaction by following\n",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/lake-formation/latest/dg/data-compaction.html",children:"this guide"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"at-least-once-semantics",children:"At-Least-Once Semantics"}),"\n",(0,s.jsx)(n.p,{children:"In rare cases, it may be possible for documents from a source collection to be appended to a target\ntable more than once. Users of materialized tables should take this possibility into consideration\nwhen querying these tables."})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>d});var s=t(96540);const r={},i=s.createContext(r);function c(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/788.e94a45f6.js b/pr-preview/pr-1594/assets/js/788.e94a45f6.js deleted file mode 100644 index efd7a774b3..0000000000 --- a/pr-preview/pr-1594/assets/js/788.e94a45f6.js +++ /dev/null @@ -1,1410 +0,0 @@ -"use strict"; -exports.id = 788; -exports.ids = [788]; -exports.modules = { - -/***/ 16788: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - diagram: () => (/* binding */ diagram) -}); - -// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules -var mermaid_6dc72991 = __webpack_require__(99702); -// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 197 modules -var src = __webpack_require__(26312); -;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-array/src/min.js -function min(values, valueof) { - let min; - if (valueof === undefined) { - for (const value of values) { - if (value != null - && (min > value || (min === undefined && value >= value))) { - min = value; - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null - && (min > value || (min === undefined && value >= value))) { - min = value; - } - } - } - return min; -} - -;// CONCATENATED MODULE: ./node_modules/d3-sankey/src/align.js - - -function targetDepth(d) { - return d.target.depth; -} - -function left(node) { - return node.depth; -} - -function right(node, n) { - return n - 1 - node.height; -} - -function justify(node, n) { - return node.sourceLinks.length ? node.depth : n - 1; -} - -function center(node) { - return node.targetLinks.length ? node.depth - : node.sourceLinks.length ? min(node.sourceLinks, targetDepth) - 1 - : 0; -} - -;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-array/src/sum.js -function sum(values, valueof) { - let sum = 0; - if (valueof === undefined) { - for (let value of values) { - if (value = +value) { - sum += value; - } - } - } else { - let index = -1; - for (let value of values) { - if (value = +valueof(value, ++index, values)) { - sum += value; - } - } - } - return sum; -} - -;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-array/src/max.js -function max(values, valueof) { - let max; - if (valueof === undefined) { - for (const value of values) { - if (value != null - && (max < value || (max === undefined && value >= value))) { - max = value; - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null - && (max < value || (max === undefined && value >= value))) { - max = value; - } - } - } - return max; -} - -;// CONCATENATED MODULE: ./node_modules/d3-sankey/src/constant.js -function constant(x) { - return function() { - return x; - }; -} - -;// CONCATENATED MODULE: ./node_modules/d3-sankey/src/sankey.js - - - - -function ascendingSourceBreadth(a, b) { - return ascendingBreadth(a.source, b.source) || a.index - b.index; -} - -function ascendingTargetBreadth(a, b) { - return ascendingBreadth(a.target, b.target) || a.index - b.index; -} - -function ascendingBreadth(a, b) { - return a.y0 - b.y0; -} - -function value(d) { - return d.value; -} - -function defaultId(d) { - return d.index; -} - -function defaultNodes(graph) { - return graph.nodes; -} - -function defaultLinks(graph) { - return graph.links; -} - -function find(nodeById, id) { - const node = nodeById.get(id); - if (!node) throw new Error("missing: " + id); - return node; -} - -function computeLinkBreadths({nodes}) { - for (const node of nodes) { - let y0 = node.y0; - let y1 = y0; - for (const link of node.sourceLinks) { - link.y0 = y0 + link.width / 2; - y0 += link.width; - } - for (const link of node.targetLinks) { - link.y1 = y1 + link.width / 2; - y1 += link.width; - } - } -} - -function Sankey() { - let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent - let dx = 24; // nodeWidth - let dy = 8, py; // nodePadding - let id = defaultId; - let align = justify; - let sort; - let linkSort; - let nodes = defaultNodes; - let links = defaultLinks; - let iterations = 6; - - function sankey() { - const graph = {nodes: nodes.apply(null, arguments), links: links.apply(null, arguments)}; - computeNodeLinks(graph); - computeNodeValues(graph); - computeNodeDepths(graph); - computeNodeHeights(graph); - computeNodeBreadths(graph); - computeLinkBreadths(graph); - return graph; - } - - sankey.update = function(graph) { - computeLinkBreadths(graph); - return graph; - }; - - sankey.nodeId = function(_) { - return arguments.length ? (id = typeof _ === "function" ? _ : constant(_), sankey) : id; - }; - - sankey.nodeAlign = function(_) { - return arguments.length ? (align = typeof _ === "function" ? _ : constant(_), sankey) : align; - }; - - sankey.nodeSort = function(_) { - return arguments.length ? (sort = _, sankey) : sort; - }; - - sankey.nodeWidth = function(_) { - return arguments.length ? (dx = +_, sankey) : dx; - }; - - sankey.nodePadding = function(_) { - return arguments.length ? (dy = py = +_, sankey) : dy; - }; - - sankey.nodes = function(_) { - return arguments.length ? (nodes = typeof _ === "function" ? _ : constant(_), sankey) : nodes; - }; - - sankey.links = function(_) { - return arguments.length ? (links = typeof _ === "function" ? _ : constant(_), sankey) : links; - }; - - sankey.linkSort = function(_) { - return arguments.length ? (linkSort = _, sankey) : linkSort; - }; - - sankey.size = function(_) { - return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0]; - }; - - sankey.extent = function(_) { - return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]]; - }; - - sankey.iterations = function(_) { - return arguments.length ? (iterations = +_, sankey) : iterations; - }; - - function computeNodeLinks({nodes, links}) { - for (const [i, node] of nodes.entries()) { - node.index = i; - node.sourceLinks = []; - node.targetLinks = []; - } - const nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])); - for (const [i, link] of links.entries()) { - link.index = i; - let {source, target} = link; - if (typeof source !== "object") source = link.source = find(nodeById, source); - if (typeof target !== "object") target = link.target = find(nodeById, target); - source.sourceLinks.push(link); - target.targetLinks.push(link); - } - if (linkSort != null) { - for (const {sourceLinks, targetLinks} of nodes) { - sourceLinks.sort(linkSort); - targetLinks.sort(linkSort); - } - } - } - - function computeNodeValues({nodes}) { - for (const node of nodes) { - node.value = node.fixedValue === undefined - ? Math.max(sum(node.sourceLinks, value), sum(node.targetLinks, value)) - : node.fixedValue; - } - } - - function computeNodeDepths({nodes}) { - const n = nodes.length; - let current = new Set(nodes); - let next = new Set; - let x = 0; - while (current.size) { - for (const node of current) { - node.depth = x; - for (const {target} of node.sourceLinks) { - next.add(target); - } - } - if (++x > n) throw new Error("circular link"); - current = next; - next = new Set; - } - } - - function computeNodeHeights({nodes}) { - const n = nodes.length; - let current = new Set(nodes); - let next = new Set; - let x = 0; - while (current.size) { - for (const node of current) { - node.height = x; - for (const {source} of node.targetLinks) { - next.add(source); - } - } - if (++x > n) throw new Error("circular link"); - current = next; - next = new Set; - } - } - - function computeNodeLayers({nodes}) { - const x = max(nodes, d => d.depth) + 1; - const kx = (x1 - x0 - dx) / (x - 1); - const columns = new Array(x); - for (const node of nodes) { - const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x)))); - node.layer = i; - node.x0 = x0 + i * kx; - node.x1 = node.x0 + dx; - if (columns[i]) columns[i].push(node); - else columns[i] = [node]; - } - if (sort) for (const column of columns) { - column.sort(sort); - } - return columns; - } - - function initializeNodeBreadths(columns) { - const ky = min(columns, c => (y1 - y0 - (c.length - 1) * py) / sum(c, value)); - for (const nodes of columns) { - let y = y0; - for (const node of nodes) { - node.y0 = y; - node.y1 = y + node.value * ky; - y = node.y1 + py; - for (const link of node.sourceLinks) { - link.width = link.value * ky; - } - } - y = (y1 - y + py) / (nodes.length + 1); - for (let i = 0; i < nodes.length; ++i) { - const node = nodes[i]; - node.y0 += y * (i + 1); - node.y1 += y * (i + 1); - } - reorderLinks(nodes); - } - } - - function computeNodeBreadths(graph) { - const columns = computeNodeLayers(graph); - py = Math.min(dy, (y1 - y0) / (max(columns, c => c.length) - 1)); - initializeNodeBreadths(columns); - for (let i = 0; i < iterations; ++i) { - const alpha = Math.pow(0.99, i); - const beta = Math.max(1 - alpha, (i + 1) / iterations); - relaxRightToLeft(columns, alpha, beta); - relaxLeftToRight(columns, alpha, beta); - } - } - - // Reposition each node based on its incoming (target) links. - function relaxLeftToRight(columns, alpha, beta) { - for (let i = 1, n = columns.length; i < n; ++i) { - const column = columns[i]; - for (const target of column) { - let y = 0; - let w = 0; - for (const {source, value} of target.targetLinks) { - let v = value * (target.layer - source.layer); - y += targetTop(source, target) * v; - w += v; - } - if (!(w > 0)) continue; - let dy = (y / w - target.y0) * alpha; - target.y0 += dy; - target.y1 += dy; - reorderNodeLinks(target); - } - if (sort === undefined) column.sort(ascendingBreadth); - resolveCollisions(column, beta); - } - } - - // Reposition each node based on its outgoing (source) links. - function relaxRightToLeft(columns, alpha, beta) { - for (let n = columns.length, i = n - 2; i >= 0; --i) { - const column = columns[i]; - for (const source of column) { - let y = 0; - let w = 0; - for (const {target, value} of source.sourceLinks) { - let v = value * (target.layer - source.layer); - y += sourceTop(source, target) * v; - w += v; - } - if (!(w > 0)) continue; - let dy = (y / w - source.y0) * alpha; - source.y0 += dy; - source.y1 += dy; - reorderNodeLinks(source); - } - if (sort === undefined) column.sort(ascendingBreadth); - resolveCollisions(column, beta); - } - } - - function resolveCollisions(nodes, alpha) { - const i = nodes.length >> 1; - const subject = nodes[i]; - resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha); - resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha); - resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha); - resolveCollisionsTopToBottom(nodes, y0, 0, alpha); - } - - // Push any overlapping nodes down. - function resolveCollisionsTopToBottom(nodes, y, i, alpha) { - for (; i < nodes.length; ++i) { - const node = nodes[i]; - const dy = (y - node.y0) * alpha; - if (dy > 1e-6) node.y0 += dy, node.y1 += dy; - y = node.y1 + py; - } - } - - // Push any overlapping nodes up. - function resolveCollisionsBottomToTop(nodes, y, i, alpha) { - for (; i >= 0; --i) { - const node = nodes[i]; - const dy = (node.y1 - y) * alpha; - if (dy > 1e-6) node.y0 -= dy, node.y1 -= dy; - y = node.y0 - py; - } - } - - function reorderNodeLinks({sourceLinks, targetLinks}) { - if (linkSort === undefined) { - for (const {source: {sourceLinks}} of targetLinks) { - sourceLinks.sort(ascendingTargetBreadth); - } - for (const {target: {targetLinks}} of sourceLinks) { - targetLinks.sort(ascendingSourceBreadth); - } - } - } - - function reorderLinks(nodes) { - if (linkSort === undefined) { - for (const {sourceLinks, targetLinks} of nodes) { - sourceLinks.sort(ascendingTargetBreadth); - targetLinks.sort(ascendingSourceBreadth); - } - } - } - - // Returns the target.y0 that would produce an ideal link from source to target. - function targetTop(source, target) { - let y = source.y0 - (source.sourceLinks.length - 1) * py / 2; - for (const {target: node, width} of source.sourceLinks) { - if (node === target) break; - y += width + py; - } - for (const {source: node, width} of target.targetLinks) { - if (node === source) break; - y -= width; - } - return y; - } - - // Returns the source.y0 that would produce an ideal link from source to target. - function sourceTop(source, target) { - let y = target.y0 - (target.targetLinks.length - 1) * py / 2; - for (const {source: node, width} of target.targetLinks) { - if (node === source) break; - y += width + py; - } - for (const {target: node, width} of source.sourceLinks) { - if (node === target) break; - y -= width; - } - return y; - } - - return sankey; -} - -;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-path/src/path.js -var pi = Math.PI, - tau = 2 * pi, - epsilon = 1e-6, - tauEpsilon = tau - epsilon; - -function Path() { - this._x0 = this._y0 = // start of current subpath - this._x1 = this._y1 = null; // end of current subpath - this._ = ""; -} - -function path() { - return new Path; -} - -Path.prototype = path.prototype = { - constructor: Path, - moveTo: function(x, y) { - this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); - }, - closePath: function() { - if (this._x1 !== null) { - this._x1 = this._x0, this._y1 = this._y0; - this._ += "Z"; - } - }, - lineTo: function(x, y) { - this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); - }, - quadraticCurveTo: function(x1, y1, x, y) { - this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); - }, - bezierCurveTo: function(x1, y1, x2, y2, x, y) { - this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); - }, - arcTo: function(x1, y1, x2, y2, r) { - x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; - var x0 = this._x1, - y0 = this._y1, - x21 = x2 - x1, - y21 = y2 - y1, - x01 = x0 - x1, - y01 = y0 - y1, - l01_2 = x01 * x01 + y01 * y01; - - // Is the radius negative? Error. - if (r < 0) throw new Error("negative radius: " + r); - - // Is this path empty? Move to (x1,y1). - if (this._x1 === null) { - this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); - } - - // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. - else if (!(l01_2 > epsilon)); - - // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? - // Equivalently, is (x1,y1) coincident with (x2,y2)? - // Or, is the radius zero? Line to (x1,y1). - else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) { - this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); - } - - // Otherwise, draw an arc! - else { - var x20 = x2 - x0, - y20 = y2 - y0, - l21_2 = x21 * x21 + y21 * y21, - l20_2 = x20 * x20 + y20 * y20, - l21 = Math.sqrt(l21_2), - l01 = Math.sqrt(l01_2), - l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), - t01 = l / l01, - t21 = l / l21; - - // If the start tangent is not coincident with (x0,y0), line to. - if (Math.abs(t01 - 1) > epsilon) { - this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); - } - - this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); - } - }, - arc: function(x, y, r, a0, a1, ccw) { - x = +x, y = +y, r = +r, ccw = !!ccw; - var dx = r * Math.cos(a0), - dy = r * Math.sin(a0), - x0 = x + dx, - y0 = y + dy, - cw = 1 ^ ccw, - da = ccw ? a0 - a1 : a1 - a0; - - // Is the radius negative? Error. - if (r < 0) throw new Error("negative radius: " + r); - - // Is this path empty? Move to (x0,y0). - if (this._x1 === null) { - this._ += "M" + x0 + "," + y0; - } - - // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). - else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) { - this._ += "L" + x0 + "," + y0; - } - - // Is this arc empty? We’re done. - if (!r) return; - - // Does the angle go the wrong way? Flip the direction. - if (da < 0) da = da % tau + tau; - - // Is this a complete circle? Draw two arcs to complete the circle. - if (da > tauEpsilon) { - this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); - } - - // Is this arc non-empty? Draw an arc! - else if (da > epsilon) { - this._ += "A" + r + "," + r + ",0," + (+(da >= pi)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); - } - }, - rect: function(x, y, w, h) { - this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; - }, - toString: function() { - return this._; - } -}; - -/* harmony default export */ const src_path = (path); - -;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-shape/src/array.js -var slice = Array.prototype.slice; - -;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-shape/src/constant.js -/* harmony default export */ function src_constant(x) { - return function constant() { - return x; - }; -} - -;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-shape/src/point.js -function point_x(p) { - return p[0]; -} - -function point_y(p) { - return p[1]; -} - -;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-shape/src/link/index.js - - - - - - -function linkSource(d) { - return d.source; -} - -function linkTarget(d) { - return d.target; -} - -function link_link(curve) { - var source = linkSource, - target = linkTarget, - x = point_x, - y = point_y, - context = null; - - function link() { - var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv); - if (!context) context = buffer = src_path(); - curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv)); - if (buffer) return context = null, buffer + "" || null; - } - - link.source = function(_) { - return arguments.length ? (source = _, link) : source; - }; - - link.target = function(_) { - return arguments.length ? (target = _, link) : target; - }; - - link.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : src_constant(+_), link) : x; - }; - - link.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : src_constant(+_), link) : y; - }; - - link.context = function(_) { - return arguments.length ? ((context = _ == null ? null : _), link) : context; - }; - - return link; -} - -function curveHorizontal(context, x0, y0, x1, y1) { - context.moveTo(x0, y0); - context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1); -} - -function curveVertical(context, x0, y0, x1, y1) { - context.moveTo(x0, y0); - context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1); -} - -function curveRadial(context, x0, y0, x1, y1) { - var p0 = pointRadial(x0, y0), - p1 = pointRadial(x0, y0 = (y0 + y1) / 2), - p2 = pointRadial(x1, y0), - p3 = pointRadial(x1, y1); - context.moveTo(p0[0], p0[1]); - context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); -} - -function linkHorizontal() { - return link_link(curveHorizontal); -} - -function linkVertical() { - return link_link(curveVertical); -} - -function linkRadial() { - var l = link_link(curveRadial); - l.angle = l.x, delete l.x; - l.radius = l.y, delete l.y; - return l; -} - -;// CONCATENATED MODULE: ./node_modules/d3-sankey/src/sankeyLinkHorizontal.js - - -function horizontalSource(d) { - return [d.source.x1, d.y0]; -} - -function horizontalTarget(d) { - return [d.target.x0, d.y1]; -} - -/* harmony default export */ function sankeyLinkHorizontal() { - return linkHorizontal() - .source(horizontalSource) - .target(horizontalTarget); -} - -// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js -var dayjs_min = __webpack_require__(74353); -// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js -var dist = __webpack_require__(16750); -// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.mjs -var purify_es = __webpack_require__(99418); -;// CONCATENATED MODULE: ./node_modules/mermaid/dist/sankeyDiagram-707fac0f.js - - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 9], $V1 = [1, 10], $V2 = [1, 5, 10, 12]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "SANKEY": 4, "NEWLINE": 5, "csv": 6, "opt_eof": 7, "record": 8, "csv_tail": 9, "EOF": 10, "field[source]": 11, "COMMA": 12, "field[target]": 13, "field[value]": 14, "field": 15, "escaped": 16, "non_escaped": 17, "DQUOTE": 18, "ESCAPED_TEXT": 19, "NON_ESCAPED_TEXT": 20, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 4: "SANKEY", 5: "NEWLINE", 10: "EOF", 11: "field[source]", 12: "COMMA", 13: "field[target]", 14: "field[value]", 18: "DQUOTE", 19: "ESCAPED_TEXT", 20: "NON_ESCAPED_TEXT" }, - productions_: [0, [3, 4], [6, 2], [9, 2], [9, 0], [7, 1], [7, 0], [8, 5], [15, 1], [15, 1], [16, 3], [17, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 7: - const source = yy.findOrCreateNode($$[$0 - 4].trim().replaceAll('""', '"')); - const target = yy.findOrCreateNode($$[$0 - 2].trim().replaceAll('""', '"')); - const value = parseFloat($$[$0].trim()); - yy.addLink(source, target, value); - break; - case 8: - case 9: - case 11: - this.$ = $$[$0]; - break; - case 10: - this.$ = $$[$0 - 1]; - break; - } - }, - table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, { 5: [1, 3] }, { 6: 4, 8: 5, 15: 6, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 1: [2, 6], 7: 11, 10: [1, 12] }, o($V1, [2, 4], { 9: 13, 5: [1, 14] }), { 12: [1, 15] }, o($V2, [2, 8]), o($V2, [2, 9]), { 19: [1, 16] }, o($V2, [2, 11]), { 1: [2, 1] }, { 1: [2, 5] }, o($V1, [2, 2]), { 6: 17, 8: 5, 15: 6, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 15: 18, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 18: [1, 19] }, o($V1, [2, 3]), { 12: [1, 20] }, o($V2, [2, 10]), { 15: 21, 16: 7, 17: 8, 18: $V0, 20: $V1 }, o([1, 5, 10], [2, 7])], - defaultActions: { 11: [2, 1], 12: [2, 5] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - this.pushState("csv"); - return 4; - case 1: - return 10; - case 2: - return 5; - case 3: - return 12; - case 4: - this.pushState("escaped_text"); - return 18; - case 5: - return 20; - case 6: - this.popState("escaped_text"); - return 18; - case 7: - return 19; - } - }, - rules: [/^(?:sankey-beta\b)/i, /^(?:$)/i, /^(?:((\u000D\u000A)|(\u000A)))/i, /^(?:(\u002C))/i, /^(?:(\u0022))/i, /^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i, /^(?:(\u0022)(?!(\u0022)))/i, /^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i], - conditions: { "csv": { "rules": [1, 2, 3, 4, 5, 6, 7], "inclusive": false }, "escaped_text": { "rules": [6, 7], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -let links = []; -let nodes = []; -let nodesMap = {}; -const clear = () => { - links = []; - nodes = []; - nodesMap = {}; - (0,mermaid_6dc72991.v)(); -}; -class SankeyLink { - constructor(source, target, value = 0) { - this.source = source; - this.target = target; - this.value = value; - } -} -const addLink = (source, target, value) => { - links.push(new SankeyLink(source, target, value)); -}; -class SankeyNode { - constructor(ID) { - this.ID = ID; - } -} -const findOrCreateNode = (ID) => { - ID = mermaid_6dc72991.e.sanitizeText(ID, (0,mermaid_6dc72991.c)()); - if (!nodesMap[ID]) { - nodesMap[ID] = new SankeyNode(ID); - nodes.push(nodesMap[ID]); - } - return nodesMap[ID]; -}; -const getNodes = () => nodes; -const getLinks = () => links; -const getGraph = () => ({ - nodes: nodes.map((node) => ({ id: node.ID })), - links: links.map((link) => ({ - source: link.source.ID, - target: link.target.ID, - value: link.value - })) -}); -const db = { - nodesMap, - getConfig: () => (0,mermaid_6dc72991.c)().sankey, - getNodes, - getLinks, - getGraph, - addLink, - findOrCreateNode, - getAccTitle: mermaid_6dc72991.g, - setAccTitle: mermaid_6dc72991.s, - getAccDescription: mermaid_6dc72991.a, - setAccDescription: mermaid_6dc72991.b, - getDiagramTitle: mermaid_6dc72991.t, - setDiagramTitle: mermaid_6dc72991.q, - clear -}; -const _Uid = class _Uid2 { - static next(name) { - return new _Uid2(name + ++_Uid2.count); - } - constructor(id) { - this.id = id; - this.href = `#${id}`; - } - toString() { - return "url(" + this.href + ")"; - } -}; -_Uid.count = 0; -let Uid = _Uid; -const alignmentsMap = { - left: left, - right: right, - center: center, - justify: justify -}; -const draw = function(text, id, _version, diagObj) { - const { securityLevel, sankey: conf } = (0,mermaid_6dc72991.c)(); - const defaultSankeyConfig = mermaid_6dc72991.K.sankey; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,src/* select */.Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,src/* select */.Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ltv)("body"); - const svg = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,src/* select */.Ltv)(`[id="${id}"]`); - const width = (conf == null ? void 0 : conf.width) ?? defaultSankeyConfig.width; - const height = (conf == null ? void 0 : conf.height) ?? defaultSankeyConfig.width; - const useMaxWidth = (conf == null ? void 0 : conf.useMaxWidth) ?? defaultSankeyConfig.useMaxWidth; - const nodeAlignment = (conf == null ? void 0 : conf.nodeAlignment) ?? defaultSankeyConfig.nodeAlignment; - const prefix = (conf == null ? void 0 : conf.prefix) ?? defaultSankeyConfig.prefix; - const suffix = (conf == null ? void 0 : conf.suffix) ?? defaultSankeyConfig.suffix; - const showValues = (conf == null ? void 0 : conf.showValues) ?? defaultSankeyConfig.showValues; - const graph = diagObj.db.getGraph(); - const nodeAlign = alignmentsMap[nodeAlignment]; - const nodeWidth = 10; - const sankey$1 = Sankey().nodeId((d) => d.id).nodeWidth(nodeWidth).nodePadding(10 + (showValues ? 15 : 0)).nodeAlign(nodeAlign).extent([ - [0, 0], - [width, height] - ]); - sankey$1(graph); - const colorScheme = (0,src/* scaleOrdinal */.UMr)(src/* schemeTableau10 */.zt); - svg.append("g").attr("class", "nodes").selectAll(".node").data(graph.nodes).join("g").attr("class", "node").attr("id", (d) => (d.uid = Uid.next("node-")).id).attr("transform", function(d) { - return "translate(" + d.x0 + "," + d.y0 + ")"; - }).attr("x", (d) => d.x0).attr("y", (d) => d.y0).append("rect").attr("height", (d) => { - return d.y1 - d.y0; - }).attr("width", (d) => d.x1 - d.x0).attr("fill", (d) => colorScheme(d.id)); - const getText = ({ id: id2, value }) => { - if (!showValues) { - return id2; - } - return `${id2} -${prefix}${Math.round(value * 100) / 100}${suffix}`; - }; - svg.append("g").attr("class", "node-labels").attr("font-family", "sans-serif").attr("font-size", 14).selectAll("text").data(graph.nodes).join("text").attr("x", (d) => d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6).attr("y", (d) => (d.y1 + d.y0) / 2).attr("dy", `${showValues ? "0" : "0.35"}em`).attr("text-anchor", (d) => d.x0 < width / 2 ? "start" : "end").text(getText); - const link = svg.append("g").attr("class", "links").attr("fill", "none").attr("stroke-opacity", 0.5).selectAll(".link").data(graph.links).join("g").attr("class", "link").style("mix-blend-mode", "multiply"); - const linkColor = (conf == null ? void 0 : conf.linkColor) || "gradient"; - if (linkColor === "gradient") { - const gradient = link.append("linearGradient").attr("id", (d) => (d.uid = Uid.next("linearGradient-")).id).attr("gradientUnits", "userSpaceOnUse").attr("x1", (d) => d.source.x1).attr("x2", (d) => d.target.x0); - gradient.append("stop").attr("offset", "0%").attr("stop-color", (d) => colorScheme(d.source.id)); - gradient.append("stop").attr("offset", "100%").attr("stop-color", (d) => colorScheme(d.target.id)); - } - let coloring; - switch (linkColor) { - case "gradient": - coloring = (d) => d.uid; - break; - case "source": - coloring = (d) => colorScheme(d.source.id); - break; - case "target": - coloring = (d) => colorScheme(d.target.id); - break; - default: - coloring = linkColor; - } - link.append("path").attr("d", sankeyLinkHorizontal()).attr("stroke", coloring).attr("stroke-width", (d) => Math.max(1, d.width)); - (0,mermaid_6dc72991.o)(void 0, svg, 0, useMaxWidth); -}; -const renderer = { - draw -}; -const prepareTextForParsing = (text) => { - const textToParse = text.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g, "").replaceAll(/([\n\r])+/g, "\n").trim(); - return textToParse; -}; -const originalParse = parser$1.parse.bind(parser$1); -parser$1.parse = (text) => originalParse(prepareTextForParsing(text)); -const diagram = { - parser: parser$1, - db, - renderer -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/7c555ba4.b049aafe.js b/pr-preview/pr-1594/assets/js/7c555ba4.b049aafe.js deleted file mode 100644 index 58f4656bdd..0000000000 --- a/pr-preview/pr-1594/assets/js/7c555ba4.b049aafe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2333],{97663:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var s=t(74848),r=t(28453);const i={},c="Stripe",o={id:"reference/Connectors/capture-connectors/stripe",title:"Stripe",description:"This connector captures data from Stripe into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/stripe.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/stripe",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/stripe.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Snowflake CDC Connector",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake"},next:{title:"Survey Monkey",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey"}},a={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Choosing your start date and lookback window",id:"choosing-your-start-date-and-lookback-window",level:3},{value:"Sample",id:"sample",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"stripe",children:"Stripe"}),"\n",(0,s.jsx)(n.p,{children:"This connector captures data from Stripe into Flow collections."}),"\n",(0,s.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/source-stripe:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/source-stripe:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,s.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/stripe/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,s.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,s.jsx)(n.p,{children:"The following data resources are supported through the Stripe API:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/balance_transactions/list",children:"Balance transactions"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/customer_bank_accounts/list",children:"Bank accounts"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/charges/list",children:"Charges"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/checkout/sessions/list",children:"Checkout sessions"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/checkout/sessions/line_items",children:"Checkout sessions line items"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/coupons/list",children:"Coupons"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/customer_balance_transactions/list",children:"Customer balance transactions"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/customers/list",children:"Customers"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/disputes/list",children:"Disputes"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/events/list",children:"Events"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/invoiceitems/list",children:"Invoice items"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/invoices/invoice_lines",children:"Invoice line items"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/invoices/list",children:"Invoices"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/payment_intents/list",children:"Payment intents"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/payouts/list",children:"Payouts"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/plans/list",children:"Plans"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/products/list",children:"Products"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/promotion_codes/list",children:"Promotion codes"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/refunds/list",children:"Refunds"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/subscription_items/list",children:"Subscription items"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/subscriptions/list",children:"Subscriptions"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://stripe.com/docs/api/transfers/list",children:"Transfers"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://stripe.com/docs/dashboard/basics#find-account-id",children:"Account ID"})," of your Stripe account."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://stripe.com/docs/keys#obtain-api-keys",children:"Secret key"})," for the Stripe API."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Stripe source connector."]}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/account_id"})})}),(0,s.jsx)(n.td,{children:"Account ID"}),(0,s.jsxs)(n.td,{children:["Your Stripe account ID (starts with 'acct_', find yours here ",(0,s.jsx)(n.a,{href:"https://dashboard.stripe.com/settings/account",children:"https://dashboard.stripe.com/settings/account"})]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/client_secret"})})}),(0,s.jsx)(n.td,{children:"Secret Key"}),(0,s.jsxs)(n.td,{children:["Stripe API key (usually starts with 'sk_live_'; find yours here ",(0,s.jsx)(n.a,{href:"https://dashboard.stripe.com/apikeys",children:"https://dashboard.stripe.com/apikeys"})]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/lookback_window_days"})}),(0,s.jsx)(n.td,{children:"Lookback Window in days (Optional)"}),(0,s.jsx)(n.td,{children:"When set, the connector will always re-export data from the past N days, where N is the value set here. This is useful if your data is frequently updated after creation."}),(0,s.jsx)(n.td,{children:"integer"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/start_date"})})}),(0,s.jsx)(n.td,{children:"Replication start date"}),(0,s.jsx)(n.td,{children:"UTC date and time in the format 2017-01-25T00:00:00Z. Only data generated after this date will be replicated."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/stream"})})}),(0,s.jsx)(n.td,{children:"Stream"}),(0,s.jsx)(n.td,{children:"Resource from Stripe from which collections are captured."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/syncMode"})})}),(0,s.jsx)(n.td,{children:"Sync Mode"}),(0,s.jsx)(n.td,{children:"Connection method."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"choosing-your-start-date-and-lookback-window",children:"Choosing your start date and lookback window"}),"\n",(0,s.jsxs)(n.p,{children:["The connector will continually capture data beginning on the ",(0,s.jsx)(n.strong,{children:"Replication start date"})," you choose."]}),"\n",(0,s.jsxs)(n.p,{children:["However, some data from the Stripe API is mutable; for example, ",(0,s.jsx)(n.a,{href:"https://stripe.com/docs/billing/migration/invoice-states",children:"a draft invoice can be completed"})," at a later date than it was created.\nTo account for this, it's useful to set the ",(0,s.jsx)(n.strong,{children:"Lookback Window"}),". When this is set, at a given point in time, the connector will not only look for new data;\nit will also capture changes made to data within the window."]}),"\n",(0,s.jsxs)(n.p,{children:["For example, if you start the connector with the start date of ",(0,s.jsx)(n.code,{children:"2022-06-06T00:00:00Z"})," (June 6) and the lookback window of ",(0,s.jsx)(n.code,{children:"3"}),", the connector will begin to capture data starting from June 3.\nAs time goes on while the capture remains active, the lookback window rolls forward along with the current timestamp.\nOn June 10, the connector will continue to monitor data starting from June 7 and capture any changes to that data, and so on."]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-stripe:dev\n config:\n account_id: 00000000\n client_secret: <secret>\n start_date: 2022-06-18T00:00:00Z\n bindings:\n - resource:\n stream: balance_transactions\n syncMode: incremental\n target: ${PREFIX}/balancetransactions\n - resource:\n stream: bank_accounts\n syncMode: full_refresh\n target: ${PREFIX}/bankaccounts\n - resource:\n stream: charges\n syncMode: incremental\n target: ${PREFIX}/charges\n - resource:\n stream: checkout_sessions\n syncMode: incremental\n target: ${PREFIX}/checkoutsessions\n - resource:\n stream: checkout_sessions_line_items\n syncMode: incremental\n target: ${PREFIX}/checkoutsessionslineitems\n - resource:\n stream: coupons\n syncMode: incremental\n target: ${PREFIX}/coupons\n - resource:\n stream: customer_balance_transactions\n syncMode: full_refresh\n target: ${PREFIX}/customerbalancetransactions\n - resource:\n stream: customers\n syncMode: incremental\n target: ${PREFIX}/customers\n - resource:\n stream: disputes\n syncMode: incremental\n target: ${PREFIX}/disputes\n - resource:\n stream: events\n syncMode: incremental\n target: ${PREFIX}/events\n - resource:\n stream: invoice_items\n syncMode: incremental\n target: ${PREFIX}/invoice_items\n - resource:\n stream: invoice_line_items\n syncMode: full_refresh\n target: ${PREFIX}/invoicelineitems\n - resource:\n stream: invoices\n syncMode: incremental\n target: ${PREFIX}/invoices\n - resource:\n stream: payment_intents\n syncMode: incremental\n target: ${PREFIX}/paymentintents\n - resource:\n stream: payouts\n syncMode: incremental\n target: ${PREFIX}/payouts\n - resource:\n stream: plans\n syncMode: incremental\n target: ${PREFIX}/plans\n - resource:\n stream: products\n syncMode: incremental\n target: ${PREFIX}/products\n - resource:\n stream: promotion_codes\n syncMode: incremental\n target: ${PREFIX}/promotioncodes\n - resource:\n stream: refunds\n syncMode: incremental\n target: ${PREFIX}/refunds\n - resource:\n stream: subscription_items\n syncMode: full_refresh\n target: ${PREFIX}/subscriptionitems\n - resource:\n stream: subscriptions\n syncMode: incremental\n target: ${PREFIX}/subscriptions\n - resource:\n stream: transfers\n syncMode: incremental\n target: ${PREFIX}/transfers\n"})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>o});var s=t(96540);const r={},i=s.createContext(r);function c(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/7cda2da6.e581f4a5.js b/pr-preview/pr-1594/assets/js/7cda2da6.e581f4a5.js deleted file mode 100644 index 99c09d062b..0000000000 --- a/pr-preview/pr-1594/assets/js/7cda2da6.e581f4a5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9515],{51186:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var r=n(74848),s=n(28453);const i={description:"Using the sum reduction strategy",sidebar_position:6},o="sum",c={id:"reference/reduction-strategies/sum",title:"sum",description:"Using the sum reduction strategy",source:"@site/docs/reference/reduction-strategies/sum.md",sourceDirName:"reference/reduction-strategies",slug:"/reference/reduction-strategies/sum",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/sum",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/reduction-strategies/sum.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{description:"Using the sum reduction strategy",sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"set",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/set"},next:{title:"Composing with conditionals",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals"}},u={},a=[];function d(e){const t={code:"code",h1:"h1",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"sum",children:"sum"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.code,{children:"sum"})," reduces two numbers or integers by adding their values."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:'collections:\n - name: example/reductions/sum\n schema:\n type: object\n reduce: { strategy: merge }\n properties:\n key: { type: string }\n value:\n # Sum only works with types "number" or "integer".\n # Others will throw an error at build time.\n type: number\n reduce: { strategy: sum }\n required: [key]\n key: [/key]\n\ntests:\n "Expect we can sum two numbers":\n - ingest:\n collection: example/reductions/sum\n documents:\n - { key: "key", value: 5 }\n - { key: "key", value: -1.2 }\n - verify:\n collection: example/reductions/sum\n documents:\n - { key: "key", value: 3.8 }\n'})})]})}function m(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>c});var r=n(96540);const s={},i=r.createContext(s);function o(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/7cfb1d0c.f28a5984.js b/pr-preview/pr-1594/assets/js/7cfb1d0c.f28a5984.js deleted file mode 100644 index 391b6e8b94..0000000000 --- a/pr-preview/pr-1594/assets/js/7cfb1d0c.f28a5984.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4753],{49908:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>s,default:()=>a,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var i=n(74848),o=n(28453);const t={},s="Google Drive",c={id:"reference/Connectors/capture-connectors/google-drive",title:"Google Drive",description:"This connector lets you capture data from your Google Drive account into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/google-drive.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/google-drive",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/google-drive.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Analytics 4",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4"},next:{title:"Google Firestore",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:3},{value:"Sample",id:"sample",level:3}];function h(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.h1,{id:"google-drive",children:"Google Drive"}),"\n",(0,i.jsx)(r.p,{children:"This connector lets you capture data from your Google Drive account into Flow collections."}),"\n",(0,i.jsxs)(r.p,{children:[(0,i.jsxs)(r.a,{href:"https://ghcr.io/estuary/source-google-drive:dev",children:["ghcr.io/estuary/source-google-drive",":dev"]})," provides the latest connector image. For access to previous image versions, follow the link in your browser."]}),"\n",(0,i.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(r.p,{children:"To use this connector, make sure you have the following:"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"An active Google Drive account with access credentials."}),"\n",(0,i.jsx)(r.li,{children:"Properly configured permissions for your Google Drive resources."}),"\n"]}),"\n",(0,i.jsxs)(r.p,{children:[(0,i.jsx)(r.strong,{children:"Note:"})," This connector is designed specifically for .csv files located in a specified Google Drive folder."]}),"\n",(0,i.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsxs)(r.p,{children:["You can set up the Google Drive source connector either through the Flow web app or by editing the Flow specification file directly. For more information on setting up this connector, refer to our guide on using ",(0,i.jsx)(r.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"connectors"}),"."]}),"\n",(0,i.jsx)(r.p,{children:"The values and specification sample below provide configuration details specific to the Google Drive connector."}),"\n",(0,i.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,i.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,i.jsxs)(r.table,{children:[(0,i.jsx)(r.thead,{children:(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.th,{children:"Property"}),(0,i.jsx)(r.th,{children:"Title"}),(0,i.jsx)(r.th,{children:"Description"}),(0,i.jsx)(r.th,{children:"Type"}),(0,i.jsx)(r.th,{children:"Required/Default"})]})}),(0,i.jsx)(r.tbody,{children:(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:(0,i.jsx)(r.strong,{children:(0,i.jsx)(r.code,{children:"/credentials"})})}),(0,i.jsx)(r.td,{children:"Credentials"}),(0,i.jsx)(r.td,{children:"JSON file containing authentication credentials for Google Drive."}),(0,i.jsx)(r.td,{children:"file"}),(0,i.jsx)(r.td,{children:"Required"})]})})]}),"\n",(0,i.jsx)(r.h3,{id:"bindings",children:"Bindings"}),"\n",(0,i.jsxs)(r.table,{children:[(0,i.jsx)(r.thead,{children:(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.th,{children:"Property"}),(0,i.jsx)(r.th,{children:"Title"}),(0,i.jsx)(r.th,{children:"Description"}),(0,i.jsx)(r.th,{children:"Type"}),(0,i.jsx)(r.th,{children:"Required/Default"})]})}),(0,i.jsxs)(r.tbody,{children:[(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:(0,i.jsx)(r.strong,{children:(0,i.jsx)(r.code,{children:"/file_id"})})}),(0,i.jsx)(r.td,{children:"File ID"}),(0,i.jsx)(r.td,{children:"Unique identifier of the Google Drive file."}),(0,i.jsx)(r.td,{children:"string"}),(0,i.jsx)(r.td,{children:"Required"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:(0,i.jsx)(r.strong,{children:(0,i.jsx)(r.code,{children:"/path"})})}),(0,i.jsx)(r.td,{children:"Path"}),(0,i.jsx)(r.td,{children:"Path to the file or directory in Google Drive."}),(0,i.jsx)(r.td,{children:"string"}),(0,i.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,i.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-google-drive:dev\n config:\n credentials: /path/to/your/credentials.json\n bindings:\n - resource:\n file_id: "your_google_drive_file_id"\n path: "/path/in/google/drive"\n target: ${PREFIX}/target_name\n'})})]})}function a(e={}){const{wrapper:r}={...(0,o.R)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>s,x:()=>c});var i=n(96540);const o={},t=i.createContext(o);function s(e){const r=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/7fd3d7a0.638976a6.js b/pr-preview/pr-1594/assets/js/7fd3d7a0.638976a6.js deleted file mode 100644 index 345d417259..0000000000 --- a/pr-preview/pr-1594/assets/js/7fd3d7a0.638976a6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2135],{19092:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>t,metadata:()=>d,toc:()=>l});var s=n(74848),i=n(28453);const t={},c="SendGrid",d={id:"reference/Connectors/capture-connectors/sendgrid",title:"SendGrid",description:"This connector captures data from SendGrid into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/sendgrid.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/sendgrid",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/sendgrid.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Salesforce \u2014 Real-time data",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time"},next:{title:"Sentry",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry"}},o={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"sendgrid",children:"SendGrid"}),"\n",(0,s.jsx)(r.p,{children:"This connector captures data from SendGrid into Flow collections."}),"\n",(0,s.jsxs)(r.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(r.a,{href:"https://ghcr.io/estuary/source-sendgrid:dev",children:(0,s.jsx)(r.code,{children:"ghcr.io/estuary/source-sendgrid:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsxs)(r.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,s.jsx)(r.a,{href:"https://docs.airbyte.com/integrations/sources/sendgrid/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,s.jsx)(r.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,s.jsx)(r.p,{children:"The following data resources are supported through the SendGrid APIs:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/campaigns-api/retrieve-all-campaigns",children:"Campaigns"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/lists/get-all-lists",children:"Lists"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/contacts/export-contacts",children:"Contacts"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/marketing-campaign-stats/get-all-automation-stats",children:"Stats automations"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/segmenting-contacts/get-list-of-segments",children:"Segments"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/marketing-campaign-stats/get-all-single-sends-stats",children:"Single Sends"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/transactional-templates/retrieve-paged-transactional-templates",children:"Templates"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/suppressions-global-suppressions/retrieve-all-global-suppressions",children:"Global suppression"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/suppressions-unsubscribe-groups/retrieve-all-suppression-groups-associated-with-the-user",children:"Suppression groups"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/suppressions-suppressions/retrieve-all-suppressions",children:"Suppression group members"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/blocks-api/retrieve-all-blocks",children:"Blocks"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/bounces-api/retrieve-all-bounces",children:"Bounces"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/invalid-e-mails-api/retrieve-all-invalid-emails",children:"Invalid emails"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/spam-reports-api/retrieve-all-spam-reports",children:"Spam reports"})}),"\n"]}),"\n",(0,s.jsx)(r.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,s.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["SendGrid ",(0,s.jsx)(r.a,{href:"https://docs.sendgrid.com/api-reference/api-keys/create-api-keys",children:"API Key"})," for authentication."]}),"\n"]}),"\n",(0,s.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(r.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,s.jsx)(r.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the SendGrid source connector."]}),"\n",(0,s.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Property"}),(0,s.jsx)(r.th,{children:"Title"}),(0,s.jsx)(r.th,{children:"Description"}),(0,s.jsx)(r.th,{children:"Type"}),(0,s.jsx)(r.th,{children:"Required/Default"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"/apikey"})}),(0,s.jsx)(r.td,{children:"Sendgrid API key"}),(0,s.jsx)(r.td,{children:"The value of the SendGrid API Key generated."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"/start_date"})}),(0,s.jsx)(r.td,{children:"Start Date"}),(0,s.jsx)(r.td,{children:"The date from which you'd like to replicate data for SendGrid API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Property"}),(0,s.jsx)(r.th,{children:"Title"}),(0,s.jsx)(r.th,{children:"Description"}),(0,s.jsx)(r.th,{children:"Type"}),(0,s.jsx)(r.th,{children:"Required/Default"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.code,{children:"/stream"})})}),(0,s.jsx)(r.td,{children:"Stream"}),(0,s.jsx)(r.td,{children:"Resource of your SendGrid project from which collections are captured."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.code,{children:"/syncMode"})})}),(0,s.jsx)(r.td,{children:"Sync Mode"}),(0,s.jsx)(r.td,{children:"Connection method."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-sendgrid:dev\n config:\n apikey: <secret>\n start_date: 2017-01-25T00:00:00Z\n bindings:\n - resource:\n stream: blocks\n syncMode: incremental\n target: ${PREFIX}/blocks\n {...}\n"})})]})}function h(e={}){const{wrapper:r}={...(0,i.R)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>c,x:()=>d});var s=n(96540);const i={},t=s.createContext(i);function c(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/803.8e7831e5.js b/pr-preview/pr-1594/assets/js/803.8e7831e5.js deleted file mode 100644 index 61ab7b8c46..0000000000 --- a/pr-preview/pr-1594/assets/js/803.8e7831e5.js +++ /dev/null @@ -1,742 +0,0 @@ -"use strict"; -exports.id = 803; -exports.ids = [803]; -exports.modules = { - -/***/ 76803: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99418); - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 3], $V1 = [1, 4], $V2 = [1, 5], $V3 = [1, 6], $V4 = [1, 10, 12, 14, 16, 18, 19, 20, 21, 22], $V5 = [2, 4], $V6 = [1, 5, 10, 12, 14, 16, 18, 19, 20, 21, 22], $V7 = [20, 21, 22], $V8 = [2, 7], $V9 = [1, 12], $Va = [1, 13], $Vb = [1, 14], $Vc = [1, 15], $Vd = [1, 16], $Ve = [1, 17]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "eol": 4, "PIE": 5, "document": 6, "showData": 7, "line": 8, "statement": 9, "txt": 10, "value": 11, "title": 12, "title_value": 13, "acc_title": 14, "acc_title_value": 15, "acc_descr": 16, "acc_descr_value": 17, "acc_descr_multiline_value": 18, "section": 19, "NEWLINE": 20, ";": 21, "EOF": 22, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 5: "PIE", 7: "showData", 10: "txt", 11: "value", 12: "title", 13: "title_value", 14: "acc_title", 15: "acc_title_value", 16: "acc_descr", 17: "acc_descr_value", 18: "acc_descr_multiline_value", 19: "section", 20: "NEWLINE", 21: ";", 22: "EOF" }, - productions_: [0, [3, 2], [3, 2], [3, 3], [6, 0], [6, 2], [8, 2], [9, 0], [9, 2], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [4, 1], [4, 1], [4, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 3: - yy.setShowData(true); - break; - case 6: - this.$ = $$[$0 - 1]; - break; - case 8: - yy.addSection($$[$0 - 1], yy.cleanupValue($$[$0])); - break; - case 9: - this.$ = $$[$0].trim(); - yy.setDiagramTitle(this.$); - break; - case 10: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 11: - case 12: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 13: - yy.addSection($$[$0].substr(8)); - this.$ = $$[$0].substr(8); - break; - } - }, - table: [{ 3: 1, 4: 2, 5: $V0, 20: $V1, 21: $V2, 22: $V3 }, { 1: [3] }, { 3: 7, 4: 2, 5: $V0, 20: $V1, 21: $V2, 22: $V3 }, o($V4, $V5, { 6: 8, 7: [1, 9] }), o($V6, [2, 14]), o($V6, [2, 15]), o($V6, [2, 16]), { 1: [2, 1] }, o($V7, $V8, { 8: 10, 9: 11, 1: [2, 2], 10: $V9, 12: $Va, 14: $Vb, 16: $Vc, 18: $Vd, 19: $Ve }), o($V4, $V5, { 6: 18 }), o($V4, [2, 5]), { 4: 19, 20: $V1, 21: $V2, 22: $V3 }, { 11: [1, 20] }, { 13: [1, 21] }, { 15: [1, 22] }, { 17: [1, 23] }, o($V7, [2, 12]), o($V7, [2, 13]), o($V7, $V8, { 8: 10, 9: 11, 1: [2, 3], 10: $V9, 12: $Va, 14: $Vb, 16: $Vc, 18: $Vd, 19: $Ve }), o($V4, [2, 6]), o($V7, [2, 8]), o($V7, [2, 9]), o($V7, [2, 10]), o($V7, [2, 11])], - defaultActions: { 7: [2, 1] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - break; - case 1: - break; - case 2: - return 20; - case 3: - break; - case 4: - break; - case 5: - this.begin("title"); - return 12; - case 6: - this.popState(); - return "title_value"; - case 7: - this.begin("acc_title"); - return 14; - case 8: - this.popState(); - return "acc_title_value"; - case 9: - this.begin("acc_descr"); - return 16; - case 10: - this.popState(); - return "acc_descr_value"; - case 11: - this.begin("acc_descr_multiline"); - break; - case 12: - this.popState(); - break; - case 13: - return "acc_descr_multiline_value"; - case 14: - this.begin("string"); - break; - case 15: - this.popState(); - break; - case 16: - return "txt"; - case 17: - return 5; - case 18: - return 7; - case 19: - return "value"; - case 20: - return 22; - } - }, - rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:[\s]+)/i, /^(?:title\b)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:pie\b)/i, /^(?:showData\b)/i, /^(?::[\s]*[\d]+(?:\.[\d]+)?)/i, /^(?:$)/i], - conditions: { "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "title": { "rules": [6], "inclusive": false }, "string": { "rules": [15, 16], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 7, 9, 11, 14, 17, 18, 19, 20], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -const DEFAULT_PIE_CONFIG = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.B.pie; -const DEFAULT_PIE_DB = { - sections: {}, - showData: false, - config: DEFAULT_PIE_CONFIG -}; -let sections = DEFAULT_PIE_DB.sections; -let showData = DEFAULT_PIE_DB.showData; -const config = structuredClone(DEFAULT_PIE_CONFIG); -const getConfig = () => structuredClone(config); -const clear = () => { - sections = structuredClone(DEFAULT_PIE_DB.sections); - showData = DEFAULT_PIE_DB.showData; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.v)(); -}; -const addSection = (label, value) => { - label = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.d)(label, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - if (sections[label] === void 0) { - sections[label] = value; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`added new section: ${label}, with value: ${value}`); - } -}; -const getSections = () => sections; -const cleanupValue = (value) => { - if (value.substring(0, 1) === ":") { - value = value.substring(1).trim(); - } - return Number(value.trim()); -}; -const setShowData = (toggle) => { - showData = toggle; -}; -const getShowData = () => showData; -const db = { - getConfig, - clear, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.t, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.g, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.b, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.a, - addSection, - getSections, - cleanupValue, - setShowData, - getShowData -}; -const getStyles = (options) => ` - .pieCircle{ - stroke: ${options.pieStrokeColor}; - stroke-width : ${options.pieStrokeWidth}; - opacity : ${options.pieOpacity}; - } - .pieOuterCircle{ - stroke: ${options.pieOuterStrokeColor}; - stroke-width: ${options.pieOuterStrokeWidth}; - fill: none; - } - .pieTitleText { - text-anchor: middle; - font-size: ${options.pieTitleTextSize}; - fill: ${options.pieTitleTextColor}; - font-family: ${options.fontFamily}; - } - .slice { - font-family: ${options.fontFamily}; - fill: ${options.pieSectionTextColor}; - font-size:${options.pieSectionTextSize}; - // fill: white; - } - .legend text { - fill: ${options.pieLegendTextColor}; - font-family: ${options.fontFamily}; - font-size: ${options.pieLegendTextSize}; - } -`; -const styles = getStyles; -const createPieArcs = (sections2) => { - const pieData = Object.entries(sections2).map((element) => { - return { - label: element[0], - value: element[1] - }; - }).sort((a, b) => { - return b.value - a.value; - }); - const pie$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .pie */ .rLf)().value( - (d3Section) => d3Section.value - ); - return pie$1(pieData); -}; -const draw = (text, id, _version, diagObj) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("rendering pie chart\n" + text); - const db2 = diagObj.db; - const globalConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - const pieConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.C)(db2.getConfig(), globalConfig.pie); - const MARGIN = 40; - const LEGEND_RECT_SIZE = 18; - const LEGEND_SPACING = 4; - const height = 450; - const pieWidth = height; - const svg = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.A)(id); - const group = svg.append("g"); - const sections2 = db2.getSections(); - group.attr("transform", "translate(" + pieWidth / 2 + "," + height / 2 + ")"); - const { themeVariables } = globalConfig; - let [outerStrokeWidth] = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.D)(themeVariables.pieOuterStrokeWidth); - outerStrokeWidth ?? (outerStrokeWidth = 2); - const textPosition = pieConfig.textPosition; - const radius = Math.min(pieWidth, height) / 2 - MARGIN; - const arcGenerator = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .JLW)().innerRadius(0).outerRadius(radius); - const labelArcGenerator = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .JLW)().innerRadius(radius * textPosition).outerRadius(radius * textPosition); - group.append("circle").attr("cx", 0).attr("cy", 0).attr("r", radius + outerStrokeWidth / 2).attr("class", "pieOuterCircle"); - const arcs = createPieArcs(sections2); - const myGeneratedColors = [ - themeVariables.pie1, - themeVariables.pie2, - themeVariables.pie3, - themeVariables.pie4, - themeVariables.pie5, - themeVariables.pie6, - themeVariables.pie7, - themeVariables.pie8, - themeVariables.pie9, - themeVariables.pie10, - themeVariables.pie11, - themeVariables.pie12 - ]; - const color = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleOrdinal */ .UMr)(myGeneratedColors); - group.selectAll("mySlices").data(arcs).enter().append("path").attr("d", arcGenerator).attr("fill", (datum) => { - return color(datum.data.label); - }).attr("class", "pieCircle"); - let sum = 0; - Object.keys(sections2).forEach((key) => { - sum += sections2[key]; - }); - group.selectAll("mySlices").data(arcs).enter().append("text").text((datum) => { - return (datum.data.value / sum * 100).toFixed(0) + "%"; - }).attr("transform", (datum) => { - return "translate(" + labelArcGenerator.centroid(datum) + ")"; - }).style("text-anchor", "middle").attr("class", "slice"); - group.append("text").text(db2.getDiagramTitle()).attr("x", 0).attr("y", -(height - 50) / 2).attr("class", "pieTitleText"); - const legend = group.selectAll(".legend").data(color.domain()).enter().append("g").attr("class", "legend").attr("transform", (_datum, index) => { - const height2 = LEGEND_RECT_SIZE + LEGEND_SPACING; - const offset = height2 * color.domain().length / 2; - const horizontal = 12 * LEGEND_RECT_SIZE; - const vertical = index * height2 - offset; - return "translate(" + horizontal + "," + vertical + ")"; - }); - legend.append("rect").attr("width", LEGEND_RECT_SIZE).attr("height", LEGEND_RECT_SIZE).style("fill", color).style("stroke", color); - legend.data(arcs).append("text").attr("x", LEGEND_RECT_SIZE + LEGEND_SPACING).attr("y", LEGEND_RECT_SIZE - LEGEND_SPACING).text((datum) => { - const { label, value } = datum.data; - if (db2.getShowData()) { - return `${label} [${value}]`; - } - return label; - }); - const longestTextWidth = Math.max( - ...legend.selectAll("text").nodes().map((node) => (node == null ? void 0 : node.getBoundingClientRect().width) ?? 0) - ); - const totalWidth = pieWidth + MARGIN + LEGEND_RECT_SIZE + LEGEND_SPACING + longestTextWidth; - svg.attr("viewBox", `0 0 ${totalWidth} ${height}`); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.i)(svg, height, totalWidth, pieConfig.useMaxWidth); -}; -const renderer = { draw }; -const diagram = { - parser: parser$1, - db, - renderer, - styles -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8055.435b03d2.js b/pr-preview/pr-1594/assets/js/8055.435b03d2.js deleted file mode 100644 index f2685c04c8..0000000000 --- a/pr-preview/pr-1594/assets/js/8055.435b03d2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8055],{98055:(t,e,a)=>{a.d(e,{a:()=>l,b:()=>B,c:()=>d,d:()=>I,e:()=>M,f:()=>j,g:()=>C,h:()=>A,i:()=>x,j:()=>N,k:()=>R,l:()=>o,m:()=>Y,p:()=>_,s:()=>T,u:()=>h});var r=a(99702),n=a(26312),i=a(8337);const s={extension:(t,e,a)=>{r.l.trace("Making markers for ",a),t.append("defs").append("marker").attr("id",a+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",a+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",a+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",a+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",a+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",a+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},point:(t,e,a)=>{t.append("marker").attr("id",a+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",a+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:(t,e,a)=>{t.append("marker").attr("id",a+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",a+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:(t,e,a)=>{t.append("marker").attr("id",a+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",a+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}},l=(t,e,a,r)=>{e.forEach((e=>{s[e](t,a,r)}))};const d=(t,e,a,i)=>{let s=t||"";if("object"==typeof s&&(s=s[0]),(0,r.m)((0,r.c)().flowchart.htmlLabels)){s=s.replace(/\\n|\n/g,"<br />"),r.l.debug("vertexText"+s);let t=function(t){const e=(0,n.Ltv)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),a=e.append("xhtml:div"),r=t.label,i=t.isNode?"nodeLabel":"edgeLabel";var s,l;return a.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+r+"</span>"),s=a,(l=t.labelStyle)&&s.attr("style",l),a.style("display","inline-block"),a.style("white-space","nowrap"),a.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}({isNode:i,label:(0,r.M)(s).replace(/fa[blrs]?:fa-[\w-]+/g,(t=>`<i class='${t.replace(":"," ")}'></i>`)),labelStyle:e.replace("fill:","color:")});return t}{const t=document.createElementNS("http://www.w3.org/2000/svg","text");t.setAttribute("style",e.replace("color:","fill:"));let r=[];r="string"==typeof s?s.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(s)?s:[];for(const e of r){const r=document.createElementNS("http://www.w3.org/2000/svg","tspan");r.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),r.setAttribute("dy","1em"),r.setAttribute("x","0"),a?r.setAttribute("class","title-row"):r.setAttribute("class","row"),r.textContent=e.trim(),t.appendChild(r)}return t}},o=async(t,e,a,s)=>{let l;const o=e.useHtmlLabels||(0,r.m)((0,r.c)().flowchart.htmlLabels);l=a||"node default";const h=t.insert("g").attr("class",l).attr("id",e.domId||e.id),c=h.insert("g").attr("class","label").attr("style",e.labelStyle);let y;y=void 0===e.labelText?"":"string"==typeof e.labelText?e.labelText:e.labelText[0];const p=c.node();let g;g="markdown"===e.labelType?(0,i.a)(c,(0,r.d)((0,r.M)(y),(0,r.c)()),{useHtmlLabels:o,width:e.width||(0,r.c)().flowchart.wrappingWidth,classes:"markdown-node-label"}):p.appendChild(d((0,r.d)((0,r.M)(y),(0,r.c)()),e.labelStyle,!1,s));let x=g.getBBox();const f=e.padding/2;if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=g.children[0],e=(0,n.Ltv)(g),a=t.getElementsByTagName("img");if(a){const t=""===y.replace(/<img[^>]*>/g,"").trim();await Promise.all([...a].map((e=>new Promise((a=>{function n(){if(e.style.display="flex",e.style.flexDirection="column",t){const t=(0,r.c)().fontSize?(0,r.c)().fontSize:window.getComputedStyle(document.body).fontSize,a=5,n=parseInt(t,10)*a+"px";e.style.minWidth=n,e.style.maxWidth=n}else e.style.width="100%";a(e)}setTimeout((()=>{e.complete&&n()})),e.addEventListener("error",n),e.addEventListener("load",n)})))))}x=t.getBoundingClientRect(),e.attr("width",x.width),e.attr("height",x.height)}return o?c.attr("transform","translate("+-x.width/2+", "+-x.height/2+")"):c.attr("transform","translate(0, "+-x.height/2+")"),e.centerLabel&&c.attr("transform","translate("+-x.width/2+", "+-x.height/2+")"),c.insert("rect",":first-child"),{shapeSvg:h,bbox:x,halfPadding:f,label:c}},h=(t,e)=>{const a=e.node().getBBox();t.width=a.width,t.height=a.height};function c(t,e,a,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+a/2+")")}function y(t,e,a,r){var n=t.x,i=t.y,s=n-r.x,l=i-r.y,d=Math.sqrt(e*e*l*l+a*a*s*s),o=Math.abs(e*a*s/d);r.x<n&&(o=-o);var h=Math.abs(e*a*l/d);return r.y<i&&(h=-h),{x:n+o,y:i+h}}function p(t,e,a,r){var n,i,s,l,d,o,h,c,y,p,x,f,u;if(n=e.y-t.y,s=t.x-e.x,d=e.x*t.y-t.x*e.y,y=n*a.x+s*a.y+d,p=n*r.x+s*r.y+d,!(0!==y&&0!==p&&g(y,p)||(i=r.y-a.y,l=a.x-r.x,o=r.x*a.y-a.x*r.y,h=i*t.x+l*t.y+o,c=i*e.x+l*e.y+o,0!==h&&0!==c&&g(h,c)||0==(x=n*l-i*s))))return f=Math.abs(x/2),{x:(u=s*o-l*d)<0?(u-f)/x:(u+f)/x,y:(u=i*d-n*o)<0?(u-f)/x:(u+f)/x}}function g(t,e){return t*e>0}const x=(t,e)=>{var a,r,n=t.x,i=t.y,s=e.x-n,l=e.y-i,d=t.width/2,o=t.height/2;return Math.abs(l)*d>Math.abs(s)*o?(l<0&&(o=-o),a=0===l?0:o*s/l,r=o):(s<0&&(d=-d),a=d,r=0===s?0:d*l/s),{x:n+a,y:i+r}},f={node:function(t,e){return t.intersect(e)},circle:function(t,e,a){return y(t,e,e,a)},ellipse:y,polygon:function(t,e,a){var r=t.x,n=t.y,i=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){s=Math.min(s,t.x),l=Math.min(l,t.y)})):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var d=r-t.width/2-s,o=n-t.height/2-l,h=0;h<e.length;h++){var c=e[h],y=e[h<e.length-1?h+1:0],g=p(t,a,{x:d+c.x,y:o+c.y},{x:d+y.x,y:o+y.y});g&&i.push(g)}return i.length?(i.length>1&&i.sort((function(t,e){var r=t.x-a.x,n=t.y-a.y,i=Math.sqrt(r*r+n*n),s=e.x-a.x,l=e.y-a.y,d=Math.sqrt(s*s+l*l);return i<d?-1:i===d?0:1})),i[0]):t},rect:x},u=(t,e,a)=>{const r=(t=>{const e=new Set;for(const a of t)switch(a){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(a)}return e})(t),n=e.height+2*a.padding,i=n/2,s=e.width+2*i+a.padding,l=a.padding/2;return r.has("right")&&r.has("left")&&r.has("up")&&r.has("down")?[{x:0,y:0},{x:i,y:0},{x:s/2,y:2*l},{x:s-i,y:0},{x:s,y:0},{x:s,y:-n/3},{x:s+2*l,y:-n/2},{x:s,y:-2*n/3},{x:s,y:-n},{x:s-i,y:-n},{x:s/2,y:-n-2*l},{x:i,y:-n},{x:0,y:-n},{x:0,y:-2*n/3},{x:-2*l,y:-n/2},{x:0,y:-n/3}]:r.has("right")&&r.has("left")&&r.has("up")?[{x:i,y:0},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:i,y:-n},{x:0,y:-n/2}]:r.has("right")&&r.has("left")&&r.has("down")?[{x:0,y:0},{x:i,y:-n},{x:s-i,y:-n},{x:s,y:0}]:r.has("right")&&r.has("up")&&r.has("down")?[{x:0,y:0},{x:s,y:-i},{x:s,y:-n+i},{x:0,y:-n}]:r.has("left")&&r.has("up")&&r.has("down")?[{x:s,y:0},{x:0,y:-i},{x:0,y:-n+i},{x:s,y:-n}]:r.has("right")&&r.has("left")?[{x:i,y:0},{x:i,y:-l},{x:s-i,y:-l},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:s-i,y:-n+l},{x:i,y:-n+l},{x:i,y:-n},{x:0,y:-n/2}]:r.has("up")&&r.has("down")?[{x:s/2,y:0},{x:0,y:-l},{x:i,y:-l},{x:i,y:-n+l},{x:0,y:-n+l},{x:s/2,y:-n},{x:s,y:-n+l},{x:s-i,y:-n+l},{x:s-i,y:-l},{x:s,y:-l}]:r.has("right")&&r.has("up")?[{x:0,y:0},{x:s,y:-i},{x:0,y:-n}]:r.has("right")&&r.has("down")?[{x:0,y:0},{x:s,y:0},{x:0,y:-n}]:r.has("left")&&r.has("up")?[{x:s,y:0},{x:0,y:-i},{x:s,y:-n}]:r.has("left")&&r.has("down")?[{x:s,y:0},{x:0,y:0},{x:s,y:-n}]:r.has("right")?[{x:i,y:-l},{x:i,y:-l},{x:s-i,y:-l},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:s-i,y:-n+l},{x:i,y:-n+l},{x:i,y:-n+l}]:r.has("left")?[{x:i,y:0},{x:i,y:-l},{x:s-i,y:-l},{x:s-i,y:-n+l},{x:i,y:-n+l},{x:i,y:-n},{x:0,y:-n/2}]:r.has("up")?[{x:i,y:-l},{x:i,y:-n+l},{x:0,y:-n+l},{x:s/2,y:-n},{x:s,y:-n+l},{x:s-i,y:-n+l},{x:s-i,y:-l}]:r.has("down")?[{x:s/2,y:0},{x:0,y:-l},{x:i,y:-l},{x:i,y:-n+l},{x:s-i,y:-n+l},{x:s-i,y:-l},{x:s,y:-l}]:[{x:0,y:0}]},w=t=>t?" "+t:"",b=(t,e)=>`${e||"node default"}${w(t.classes)} ${w(t.class)}`,m=async(t,e)=>{const{shapeSvg:a,bbox:n}=await o(t,e,b(e,void 0),!0),i=n.width+e.padding+(n.height+e.padding),s=[{x:i/2,y:0},{x:i,y:-i/2},{x:i/2,y:-i},{x:0,y:-i/2}];r.l.info("Question main (Circle)");const l=c(a,i,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return r.l.warn("Intersect called"),f.polygon(e,s,t)},a};function k(t,e,a,n){const i=[],s=t=>{i.push(t,0)},l=t=>{i.push(0,t)};e.includes("t")?(r.l.debug("add top border"),s(a)):l(a),e.includes("r")?(r.l.debug("add right border"),s(n)):l(n),e.includes("b")?(r.l.debug("add bottom border"),s(a)):l(a),e.includes("l")?(r.l.debug("add left border"),s(n)):l(n),t.attr("stroke-dasharray",i.join(" "))}const v=(t,e,a)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);let n=70,i=10;"LR"===a&&(n=10,i=70);const s=r.append("rect").attr("x",-1*n/2).attr("y",-1*i/2).attr("width",n).attr("height",i).attr("class","fork-join");return h(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return f.rect(e,t)},r},L={rhombus:m,composite:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await o(t,e,"node "+e.classes,!0),s=a.insert("rect",":first-child"),l=e.positioned?e.width:n.width+e.padding,d=e.positioned?e.height:n.height+e.padding,c=e.positioned?-l/2:-n.width/2-i,y=e.positioned?-d/2:-n.height/2-i;if(s.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",c).attr("y",y).attr("width",l).attr("height",d),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(k(s,e.props.borders,l,d),t.delete("borders")),t.forEach((t=>{r.l.warn(`Unknown node property ${t}`)}))}return h(e,s),e.intersect=function(t){return f.rect(e,t)},a},question:m,rect:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await o(t,e,"node "+e.classes+" "+e.class,!0),s=a.insert("rect",":first-child"),l=e.positioned?e.width:n.width+e.padding,d=e.positioned?e.height:n.height+e.padding,c=e.positioned?-l/2:-n.width/2-i,y=e.positioned?-d/2:-n.height/2-i;if(s.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",c).attr("y",y).attr("width",l).attr("height",d),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(k(s,e.props.borders,l,d),t.delete("borders")),t.forEach((t=>{r.l.warn(`Unknown node property ${t}`)}))}return h(e,s),e.intersect=function(t){return f.rect(e,t)},a},labelRect:async(t,e)=>{const{shapeSvg:a}=await o(t,e,"label",!0);r.l.trace("Classes = ",e.class);const n=a.insert("rect",":first-child");if(n.attr("width",0).attr("height",0),a.attr("class","label edgeLabel"),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(k(n,e.props.borders,0,0),t.delete("borders")),t.forEach((t=>{r.l.warn(`Unknown node property ${t}`)}))}return h(e,n),e.intersect=function(t){return f.rect(e,t)},a},rectWithTitle:(t,e)=>{let a;a=e.classes?"node "+e.classes:"node default";const i=t.insert("g").attr("class",a).attr("id",e.domId||e.id),s=i.insert("rect",":first-child"),l=i.insert("line"),o=i.insert("g").attr("class","label"),c=e.labelText.flat?e.labelText.flat():e.labelText;let y="";y="object"==typeof c?c[0]:c,r.l.info("Label text abc79",y,c,"object"==typeof c);const p=o.node().appendChild(d(y,e.labelStyle,!0,!0));let g={width:0,height:0};if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=p.children[0],e=(0,n.Ltv)(p);g=t.getBoundingClientRect(),e.attr("width",g.width),e.attr("height",g.height)}r.l.info("Text 2",c);const x=c.slice(1,c.length);let u=p.getBBox();const w=o.node().appendChild(d(x.join?x.join("<br/>"):x,e.labelStyle,!0,!0));if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=w.children[0],e=(0,n.Ltv)(w);g=t.getBoundingClientRect(),e.attr("width",g.width),e.attr("height",g.height)}const b=e.padding/2;return(0,n.Ltv)(w).attr("transform","translate( "+(g.width>u.width?0:(u.width-g.width)/2)+", "+(u.height+b+5)+")"),(0,n.Ltv)(p).attr("transform","translate( "+(g.width<u.width?0:-(u.width-g.width)/2)+", 0)"),g=o.node().getBBox(),o.attr("transform","translate("+-g.width/2+", "+(-g.height/2-b+3)+")"),s.attr("class","outer title-state").attr("x",-g.width/2-b).attr("y",-g.height/2-b).attr("width",g.width+e.padding).attr("height",g.height+e.padding),l.attr("class","divider").attr("x1",-g.width/2-b).attr("x2",g.width/2+b).attr("y1",-g.height/2-b+u.height+b).attr("y2",-g.height/2-b+u.height+b),h(e,s),e.intersect=function(t){return f.rect(e,t)},i},choice:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=[{x:0,y:14},{x:14,y:0},{x:0,y:-14},{x:-14,y:0}];return a.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(t){return f.circle(e,14,t)},a},circle:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await o(t,e,b(e,void 0),!0),s=a.insert("circle",":first-child");return s.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),r.l.info("Circle main"),h(e,s),e.intersect=function(t){return r.l.info("Circle intersect",e,n.width/2+i,t),f.circle(e,n.width/2+i,t)},a},doublecircle:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await o(t,e,b(e,void 0),!0),s=a.insert("g",":first-child"),l=s.insert("circle"),d=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+5).attr("width",n.width+e.padding+10).attr("height",n.height+e.padding+10),d.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),r.l.info("DoubleCircle main"),h(e,l),e.intersect=function(t){return r.l.info("DoubleCircle intersect",e,n.width/2+i+5,t),f.circle(e,n.width/2+i+5,t)},a},stadium:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.height+e.padding,i=r.width+n/4+e.padding,s=a.insert("rect",":first-child").attr("style",e.style).attr("rx",n/2).attr("ry",n/2).attr("x",-i/2).attr("y",-n/2).attr("width",i).attr("height",n);return h(e,s),e.intersect=function(t){return f.rect(e,t)},a},hexagon:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.height+e.padding,i=n/4,s=r.width+2*i+e.padding,l=[{x:i,y:0},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:i,y:-n},{x:0,y:-n/2}],d=c(a,s,n,l);return d.attr("style",e.style),h(e,d),e.intersect=function(t){return f.polygon(e,l,t)},a},block_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,void 0,!0),n=r.height+2*e.padding,i=n/2,s=r.width+2*i+e.padding,l=u(e.directions,r,e),d=c(a,s,n,l);return d.attr("style",e.style),h(e,d),e.intersect=function(t){return f.polygon(e,l,t)},a},rect_left_inv_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-i/2,y:0},{x:n,y:0},{x:n,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}];return c(a,n,i,s).attr("style",e.style),e.width=n+i,e.height=i,e.intersect=function(t){return f.polygon(e,s,t)},a},lean_right:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-2*i/6,y:0},{x:n-i/6,y:0},{x:n+2*i/6,y:-i},{x:i/6,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},lean_left:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:2*i/6,y:0},{x:n+i/6,y:0},{x:n-2*i/6,y:-i},{x:-i/6,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},trapezoid:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-2*i/6,y:0},{x:n+2*i/6,y:0},{x:n-i/6,y:-i},{x:i/6,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},inv_trapezoid:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:i/6,y:0},{x:n-i/6,y:0},{x:n+2*i/6,y:-i},{x:-2*i/6,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},rect_right_inv_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:0,y:0},{x:n+i/2,y:0},{x:n,y:-i/2},{x:n+i/2,y:-i},{x:0,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},cylinder:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=n/2,s=i/(2.5+n/50),l=r.height+s+e.padding,d="M 0,"+s+" a "+i+","+s+" 0,0,0 "+n+" 0 a "+i+","+s+" 0,0,0 "+-n+" 0 l 0,"+l+" a "+i+","+s+" 0,0,0 "+n+" 0 l 0,"+-l,c=a.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",d).attr("transform","translate("+-n/2+","+-(l/2+s)+")");return h(e,c),e.intersect=function(t){const a=f.rect(e,t),r=a.x-e.x;if(0!=i&&(Math.abs(r)<e.width/2||Math.abs(r)==e.width/2&&Math.abs(a.y-e.y)>e.height/2-s)){let n=s*s*(1-r*r/(i*i));0!=n&&(n=Math.sqrt(n)),n=s-n,t.y-e.y>0&&(n=-n),a.y+=n}return a},a},start:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=a.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),h(e,r),e.intersect=function(t){return f.circle(e,7,t)},a},end:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=a.insert("circle",":first-child"),n=a.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),h(e,n),e.intersect=function(t){return f.circle(e,7,t)},a},note:async(t,e)=>{e.useHtmlLabels||(0,r.c)().flowchart.htmlLabels||(e.centerLabel=!0);const{shapeSvg:a,bbox:n,halfPadding:i}=await o(t,e,"node "+e.classes,!0);r.l.info("Classes = ",e.classes);const s=a.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-n.width/2-i).attr("y",-n.height/2-i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),h(e,s),e.intersect=function(t){return f.rect(e,t)},a},subroutine:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:0,y:0},{x:n,y:0},{x:n,y:-i},{x:0,y:-i},{x:0,y:0},{x:-8,y:0},{x:n+8,y:0},{x:n+8,y:-i},{x:-8,y:-i},{x:-8,y:0}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},fork:v,join:v,class_box:(t,e)=>{const a=e.padding/2;let i;i=e.classes?"node "+e.classes:"node default";const s=t.insert("g").attr("class",i).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),o=s.insert("line"),c=s.insert("line");let y=0,p=4;const g=s.insert("g").attr("class","label");let x=0;const u=e.classData.annotations&&e.classData.annotations[0],w=e.classData.annotations[0]?"\xab"+e.classData.annotations[0]+"\xbb":"",b=g.node().appendChild(d(w,e.labelStyle,!0,!0));let m=b.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=b.children[0],e=(0,n.Ltv)(b);m=t.getBoundingClientRect(),e.attr("width",m.width),e.attr("height",m.height)}e.classData.annotations[0]&&(p+=m.height+4,y+=m.width);let k=e.classData.label;void 0!==e.classData.type&&""!==e.classData.type&&((0,r.c)().flowchart.htmlLabels?k+="<"+e.classData.type+">":k+="<"+e.classData.type+">");const v=g.node().appendChild(d(k,e.labelStyle,!0,!0));(0,n.Ltv)(v).attr("class","classTitle");let L=v.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=v.children[0],e=(0,n.Ltv)(v);L=t.getBoundingClientRect(),e.attr("width",L.width),e.attr("height",L.height)}p+=L.height+4,L.width>y&&(y=L.width);const S=[];e.classData.members.forEach((t=>{const a=t.getDisplayDetails();let i=a.displayText;(0,r.c)().flowchart.htmlLabels&&(i=i.replace(/</g,"<").replace(/>/g,">"));const s=g.node().appendChild(d(i,a.cssStyle?a.cssStyle:e.labelStyle,!0,!0));let l=s.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=s.children[0],e=(0,n.Ltv)(s);l=t.getBoundingClientRect(),e.attr("width",l.width),e.attr("height",l.height)}l.width>y&&(y=l.width),p+=l.height+4,S.push(s)})),p+=8;const M=[];if(e.classData.methods.forEach((t=>{const a=t.getDisplayDetails();let i=a.displayText;(0,r.c)().flowchart.htmlLabels&&(i=i.replace(/</g,"<").replace(/>/g,">"));const s=g.node().appendChild(d(i,a.cssStyle?a.cssStyle:e.labelStyle,!0,!0));let l=s.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=s.children[0],e=(0,n.Ltv)(s);l=t.getBoundingClientRect(),e.attr("width",l.width),e.attr("height",l.height)}l.width>y&&(y=l.width),p+=l.height+4,M.push(s)})),p+=8,u){let t=(y-m.width)/2;(0,n.Ltv)(b).attr("transform","translate( "+(-1*y/2+t)+", "+-1*p/2+")"),x=m.height+4}let T=(y-L.width)/2;return(0,n.Ltv)(v).attr("transform","translate( "+(-1*y/2+T)+", "+(-1*p/2+x)+")"),x+=L.height+4,o.attr("class","divider").attr("x1",-y/2-a).attr("x2",y/2+a).attr("y1",-p/2-a+8+x).attr("y2",-p/2-a+8+x),x+=8,S.forEach((t=>{(0,n.Ltv)(t).attr("transform","translate( "+-y/2+", "+(-1*p/2+x+4)+")");const e=null==t?void 0:t.getBBox();x+=((null==e?void 0:e.height)??0)+4})),x+=8,c.attr("class","divider").attr("x1",-y/2-a).attr("x2",y/2+a).attr("y1",-p/2-a+8+x).attr("y2",-p/2-a+8+x),x+=8,M.forEach((t=>{(0,n.Ltv)(t).attr("transform","translate( "+-y/2+", "+(-1*p/2+x)+")");const e=null==t?void 0:t.getBBox();x+=((null==e?void 0:e.height)??0)+4})),l.attr("style",e.style).attr("class","outer title-state").attr("x",-y/2-a).attr("y",-p/2-a).attr("width",y+e.padding).attr("height",p+e.padding),h(e,l),e.intersect=function(t){return f.rect(e,t)},s}};let S={};const M=async(t,e,a)=>{let n,i;if(e.link){let s;"sandbox"===(0,r.c)().securityLevel?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s),i=await L[e.shape](n,e,a)}else i=await L[e.shape](t,e,a),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),n.attr("data-node","true"),n.attr("data-id",e.id),S[e.id]=n,e.haveCallback&&S[e.id].attr("class",S[e.id].attr("class")+" clickable"),n},T=(t,e)=>{S[e.id]=t},B=()=>{S={}},_=t=>{const e=S[t.id];r.l.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");const a=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+a-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),a},C=({flowchart:t})=>{var e,a;const r=(null==(e=null==t?void 0:t.subGraphTitleMargin)?void 0:e.top)??0,n=(null==(a=null==t?void 0:t.subGraphTitleMargin)?void 0:a.bottom)??0;return{subGraphTitleTopMargin:r,subGraphTitleBottomMargin:n,subGraphTitleTotalMargin:r+n}},E={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function $(t,e){if(void 0===t||void 0===e)return{angle:0,deltaX:0,deltaY:0};t=P(t),e=P(e);const[a,r]=[t.x,t.y],[n,i]=[e.x,e.y],s=n-a,l=i-r;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}const P=t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,R=t=>({x:function(e,a,r){let n=0;if(0===a&&Object.hasOwn(E,t.arrowTypeStart)){const{angle:e,deltaX:a}=$(r[0],r[1]);n=E[t.arrowTypeStart]*Math.cos(e)*(a>=0?1:-1)}else if(a===r.length-1&&Object.hasOwn(E,t.arrowTypeEnd)){const{angle:e,deltaX:a}=$(r[r.length-1],r[r.length-2]);n=E[t.arrowTypeEnd]*Math.cos(e)*(a>=0?1:-1)}return P(e).x+n},y:function(e,a,r){let n=0;if(0===a&&Object.hasOwn(E,t.arrowTypeStart)){const{angle:e,deltaY:a}=$(r[0],r[1]);n=E[t.arrowTypeStart]*Math.abs(Math.sin(e))*(a>=0?1:-1)}else if(a===r.length-1&&Object.hasOwn(E,t.arrowTypeEnd)){const{angle:e,deltaY:a}=$(r[r.length-1],r[r.length-2]);n=E[t.arrowTypeEnd]*Math.abs(Math.sin(e))*(a>=0?1:-1)}return P(e).y+n}}),Y=(t,e,a,r,n)=>{e.arrowTypeStart&&W(t,"start",e.arrowTypeStart,a,r,n),e.arrowTypeEnd&&W(t,"end",e.arrowTypeEnd,a,r,n)},O={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},W=(t,e,a,n,i,s)=>{const l=O[a];if(!l)return void r.l.warn(`Unknown arrow type: ${a}`);const d="start"===e?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${s}-${l}${d})`)};let X={},H={};const I=()=>{X={},H={}},j=(t,e)=>{const a=(0,r.m)((0,r.c)().flowchart.htmlLabels),s="markdown"===e.labelType?(0,i.a)(t,e.label,{style:e.labelStyle,useHtmlLabels:a,addSvgBackground:!0}):d(e.label,e.labelStyle),l=t.insert("g").attr("class","edgeLabel"),o=l.insert("g").attr("class","label");o.node().appendChild(s);let h,c=s.getBBox();if(a){const t=s.children[0],e=(0,n.Ltv)(s);c=t.getBoundingClientRect(),e.attr("width",c.width),e.attr("height",c.height)}if(o.attr("transform","translate("+-c.width/2+", "+-c.height/2+")"),X[e.id]=l,e.width=c.width,e.height=c.height,e.startLabelLeft){const a=d(e.startLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");h=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),H[e.id]||(H[e.id]={}),H[e.id].startLeft=r,D(h,e.startLabelLeft)}if(e.startLabelRight){const a=d(e.startLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");h=r.node().appendChild(a),n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),H[e.id]||(H[e.id]={}),H[e.id].startRight=r,D(h,e.startLabelRight)}if(e.endLabelLeft){const a=d(e.endLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");h=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),r.node().appendChild(a),H[e.id]||(H[e.id]={}),H[e.id].endLeft=r,D(h,e.endLabelLeft)}if(e.endLabelRight){const a=d(e.endLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");h=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),r.node().appendChild(a),H[e.id]||(H[e.id]={}),H[e.id].endRight=r,D(h,e.endLabelRight)}return s};function D(t,e){(0,r.c)().flowchart.htmlLabels&&t&&(t.style.width=9*e.length+"px",t.style.height="12px")}const N=(t,e)=>{r.l.debug("Moving label abc88 ",t.id,t.label,X[t.id],e);let a=e.updatedPath?e.updatedPath:e.originalPath;const n=(0,r.c)(),{subGraphTitleTotalMargin:i}=C(n);if(t.label){const n=X[t.id];let s=t.x,l=t.y;if(a){const n=r.u.calcLabelPosition(a);r.l.debug("Moving label "+t.label+" from (",s,",",l,") to (",n.x,",",n.y,") abc88"),e.updatedPath&&(s=n.x,l=n.y)}n.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){const e=H[t.id].startLeft;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",a);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.startLabelRight){const e=H[t.id].startRight;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",a);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.endLabelLeft){const e=H[t.id].endLeft;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",a);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.endLabelRight){const e=H[t.id].endRight;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",a);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}},U=(t,e)=>{r.l.debug("abc88 cutPathAtIntersect",t,e);let a=[],n=t[0],i=!1;return t.forEach((t=>{if(((t,e)=>{const a=t.x,r=t.y,n=Math.abs(e.x-a),i=Math.abs(e.y-r),s=t.width/2,l=t.height/2;return n>=s||i>=l})(e,t)||i)n=t,i||a.push(t);else{const s=((t,e,a)=>{r.l.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(e)}\n insidePoint : ${JSON.stringify(a)}\n node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);const n=t.x,i=t.y,s=Math.abs(n-a.x),l=t.width/2;let d=a.x<e.x?l-s:l+s;const o=t.height/2,h=Math.abs(e.y-a.y),c=Math.abs(e.x-a.x);if(Math.abs(i-e.y)*l>Math.abs(n-e.x)*o){let t=a.y<e.y?e.y-o-i:i-o-e.y;d=c*t/h;const n={x:a.x<e.x?a.x+d:a.x-c+d,y:a.y<e.y?a.y+h-t:a.y-h+t};return 0===d&&(n.x=e.x,n.y=e.y),0===c&&(n.x=e.x),0===h&&(n.y=e.y),r.l.debug(`abc89 topp/bott calc, Q ${h}, q ${t}, R ${c}, r ${d}`,n),n}{d=a.x<e.x?e.x-l-n:n-l-e.x;let t=h*d/c,i=a.x<e.x?a.x+c-d:a.x-c+d,s=a.y<e.y?a.y+t:a.y-t;return r.l.debug(`sides calc abc89, Q ${h}, q ${t}, R ${c}, r ${d}`,{_x:i,_y:s}),0===d&&(i=e.x,s=e.y),0===c&&(i=e.x),0===h&&(s=e.y),{x:i,y:s}}})(e,n,t);let l=!1;a.forEach((t=>{l=l||t.x===s.x&&t.y===s.y})),a.some((t=>t.x===s.x&&t.y===s.y))||a.push(s),i=!0}})),a},A=function(t,e,a,i,s,l,d){let o=a.points;r.l.debug("abc88 InsertEdge: edge=",a,"e=",e);let h=!1;const c=l.node(e.v);var y=l.node(e.w);(null==y?void 0:y.intersect)&&(null==c?void 0:c.intersect)&&(o=o.slice(1,a.points.length-1),o.unshift(c.intersect(o[0])),o.push(y.intersect(o[o.length-1]))),a.toCluster&&(r.l.debug("to cluster abc88",i[a.toCluster]),o=U(a.points,i[a.toCluster].node),h=!0),a.fromCluster&&(r.l.debug("from cluster abc88",i[a.fromCluster]),o=U(o.reverse(),i[a.fromCluster].node).reverse(),h=!0);const p=o.filter((t=>!Number.isNaN(t.y)));let g=n.qrM;!a.curve||"graph"!==s&&"flowchart"!==s||(g=a.curve);const{x:x,y:f}=R(a),u=(0,n.n8j)().x(x).y(f).curve(g);let w;switch(a.thickness){case"normal":w="edge-thickness-normal";break;case"thick":case"invisible":w="edge-thickness-thick";break;default:w=""}switch(a.pattern){case"solid":w+=" edge-pattern-solid";break;case"dotted":w+=" edge-pattern-dotted";break;case"dashed":w+=" edge-pattern-dashed"}const b=t.append("path").attr("d",u(p)).attr("id",a.id).attr("class"," "+w+(a.classes?" "+a.classes:"")).attr("style",a.style);let m="";((0,r.c)().flowchart.arrowMarkerAbsolute||(0,r.c)().state.arrowMarkerAbsolute)&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),Y(b,a,m,d,s);let k={};return h&&(k.updatedPath=o),k.originalPath=a.points,k}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/810.c3c49cc3.js b/pr-preview/pr-1594/assets/js/810.c3c49cc3.js deleted file mode 100644 index 80b8c6af12..0000000000 --- a/pr-preview/pr-1594/assets/js/810.c3c49cc3.js +++ /dev/null @@ -1,28500 +0,0 @@ -"use strict"; -exports.id = 810; -exports.ids = [810]; -exports.modules = { - -/***/ 10646: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ H: () => (/* binding */ addHtmlLabel) -/* harmony export */ }); -/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82933); - - - - -function addHtmlLabel(root, node) { - var fo = root.append('foreignObject').attr('width', '100000'); - - var div = fo.append('xhtml:div'); - div.attr('xmlns', 'http://www.w3.org/1999/xhtml'); - - var label = node.label; - switch (typeof label) { - case 'function': - div.insert(label); - break; - case 'object': - // Currently we assume this is a DOM object. - div.insert(function () { - return label; - }); - break; - default: - div.html(label); - } - - _util_js__WEBPACK_IMPORTED_MODULE_0__/* .applyStyle */ .AV(div, node.labelStyle); - div.style('display', 'inline-block'); - // Fix for firefox - div.style('white-space', 'nowrap'); - - var client = div.node().getBoundingClientRect(); - fo.attr('width', client.width).attr('height', client.height); - - return fo; -} - - -/***/ }), - -/***/ 82933: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ AV: () => (/* binding */ applyStyle), -/* harmony export */ De: () => (/* binding */ isSubgraph), -/* harmony export */ c$: () => (/* binding */ applyTransition), -/* harmony export */ gh: () => (/* binding */ edgeToId), -/* harmony export */ nh: () => (/* binding */ applyClass) -/* harmony export */ }); -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(34963); -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(89610); - - -// Public utility functions - - -/* - * Returns true if the specified node in the graph is a subgraph node. A - * subgraph node is one that contains other nodes. - */ -function isSubgraph(g, v) { - return !!g.children(v).length; -} - -function edgeToId(e) { - return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name); -} - -var ID_DELIM = /:/g; -function escapeId(str) { - return str ? String(str).replace(ID_DELIM, '\\:') : ''; -} - -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr('style', styleFn); - } -} - -function applyClass(dom, classFn, otherClasses) { - if (classFn) { - dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class')); - } -} - -function applyTransition(selection, g) { - var graph = g.graph(); - - if (lodash_es__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A(graph)) { - var transition = graph.transition; - if (lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(transition)) { - return transition(selection); - } - } - - return selection; -} - - -/***/ }), - -/***/ 21176: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - Zp: () => (/* reexport */ layout) -}); - -// UNUSED EXPORTS: acyclic, normalize, rank - -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js -var uniqueId = __webpack_require__(5664); -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/map.js -var map = __webpack_require__(74722); -// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules -var range = __webpack_require__(91395); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js -var graphlib = __webpack_require__(697); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js -/* - * Simple doubly linked list implementation derived from Cormen, et al., - * "Introduction to Algorithms". - */ - - - -class List { - constructor() { - var sentinel = {}; - sentinel._next = sentinel._prev = sentinel; - this._sentinel = sentinel; - } - dequeue() { - var sentinel = this._sentinel; - var entry = sentinel._prev; - if (entry !== sentinel) { - unlink(entry); - return entry; - } - } - enqueue(entry) { - var sentinel = this._sentinel; - if (entry._prev && entry._next) { - unlink(entry); - } - entry._next = sentinel._next; - sentinel._next._prev = entry; - sentinel._next = entry; - entry._prev = sentinel; - } - toString() { - var strs = []; - var sentinel = this._sentinel; - var curr = sentinel._prev; - while (curr !== sentinel) { - strs.push(JSON.stringify(curr, filterOutLinks)); - curr = curr._prev; - } - return '[' + strs.join(', ') + ']'; - } -} - -function unlink(entry) { - entry._prev._next = entry._next; - entry._next._prev = entry._prev; - delete entry._next; - delete entry._prev; -} - -function filterOutLinks(k, v) { - if (k !== '_next' && k !== '_prev') { - return v; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js - - - - -/* - * A greedy heuristic for finding a feedback arc set for a graph. A feedback - * arc set is a set of edges that can be removed to make a graph acyclic. - * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and - * effective heuristic for the feedback arc set problem." This implementation - * adjusts that from the paper to allow for weighted edges. - */ - - -var DEFAULT_WEIGHT_FN = constant/* default */.A(1); - -function greedyFAS(g, weightFn) { - if (g.nodeCount() <= 1) { - return []; - } - var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); - var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); - - // Expand multi-edges - return flatten/* default */.A( - map/* default */.A(results, function (e) { - return g.outEdges(e.v, e.w); - }) - ); -} - -function doGreedyFAS(g, buckets, zeroIdx) { - var results = []; - var sources = buckets[buckets.length - 1]; - var sinks = buckets[0]; - - var entry; - while (g.nodeCount()) { - while ((entry = sinks.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - while ((entry = sources.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - if (g.nodeCount()) { - for (var i = buckets.length - 2; i > 0; --i) { - entry = buckets[i].dequeue(); - if (entry) { - results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); - break; - } - } - } - } - - return results; -} - -function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { - var results = collectPredecessors ? [] : undefined; - - forEach/* default */.A(g.inEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var uEntry = g.node(edge.v); - - if (collectPredecessors) { - results.push({ v: edge.v, w: edge.w }); - } - - uEntry.out -= weight; - assignBucket(buckets, zeroIdx, uEntry); - }); - - forEach/* default */.A(g.outEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var w = edge.w; - var wEntry = g.node(w); - wEntry['in'] -= weight; - assignBucket(buckets, zeroIdx, wEntry); - }); - - g.removeNode(entry.v); - - return results; -} - -function buildState(g, weightFn) { - var fasGraph = new graphlib/* Graph */.T(); - var maxIn = 0; - var maxOut = 0; - - forEach/* default */.A(g.nodes(), function (v) { - fasGraph.setNode(v, { v: v, in: 0, out: 0 }); - }); - - // Aggregate weights on nodes, but also sum the weights across multi-edges - // into a single edge for the fasGraph. - forEach/* default */.A(g.edges(), function (e) { - var prevWeight = fasGraph.edge(e.v, e.w) || 0; - var weight = weightFn(e); - var edgeWeight = prevWeight + weight; - fasGraph.setEdge(e.v, e.w, edgeWeight); - maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); - maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); - }); - - var buckets = range/* default */.A(maxOut + maxIn + 3).map(function () { - return new List(); - }); - var zeroIdx = maxIn + 1; - - forEach/* default */.A(fasGraph.nodes(), function (v) { - assignBucket(buckets, zeroIdx, fasGraph.node(v)); - }); - - return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; -} - -function assignBucket(buckets, zeroIdx, entry) { - if (!entry.out) { - buckets[0].enqueue(entry); - } else if (!entry['in']) { - buckets[buckets.length - 1].enqueue(entry); - } else { - buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js - - - - - -function run(g) { - var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); - forEach/* default */.A(fas, function (e) { - var label = g.edge(e); - g.removeEdge(e); - label.forwardName = e.name; - label.reversed = true; - g.setEdge(e.w, e.v, label, uniqueId/* default */.A('rev')); - }); - - function weightFn(g) { - return function (e) { - return g.edge(e).weight; - }; - } -} - -function dfsFAS(g) { - var fas = []; - var stack = {}; - var visited = {}; - - function dfs(v) { - if (has/* default */.A(visited, v)) { - return; - } - visited[v] = true; - stack[v] = true; - forEach/* default */.A(g.outEdges(v), function (e) { - if (has/* default */.A(stack, e.w)) { - fas.push(e); - } else { - dfs(e.w); - } - }); - delete stack[v]; - } - - forEach/* default */.A(g.nodes(), dfs); - return fas; -} - -function undo(g) { - forEach/* default */.A(g.edges(), function (e) { - var label = g.edge(e); - if (label.reversed) { - g.removeEdge(e); - - var forwardName = label.forwardName; - delete label.reversed; - delete label.forwardName; - g.setEdge(e.w, e.v, label, forwardName); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules -var merge = __webpack_require__(98879); -// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules -var pick = __webpack_require__(81942); -// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js -var defaults = __webpack_require__(23068); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js - - -/** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ -function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !(0,isSymbol/* default */.A)(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; -} - -/* harmony default export */ const _baseExtremum = (baseExtremum); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js -/** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ -function baseGt(value, other) { - return value > other; -} - -/* harmony default export */ const _baseGt = (baseGt); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js - - - - -/** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ -function max(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseGt) - : undefined; -} - -/* harmony default export */ const lodash_es_max = (max); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; -} - -/* harmony default export */ const lodash_es_last = (last); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js -var _baseAssignValue = __webpack_require__(52528); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js - - - - -/** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ -function mapValues(object, iteratee) { - var result = {}; - iteratee = (0,_baseIteratee/* default */.A)(iteratee, 3); - - (0,_baseForOwn/* default */.A)(object, function(value, key, object) { - (0,_baseAssignValue/* default */.A)(result, key, iteratee(value, key, object)); - }); - return result; -} - -/* harmony default export */ const lodash_es_mapValues = (mapValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js -/** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ -function baseLt(value, other) { - return value < other; -} - -/* harmony default export */ const _baseLt = (baseLt); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js - - - - -/** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ -function min(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_min = (min); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js -var _root = __webpack_require__(41917); -;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js - - -/** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ -var now = function() { - return _root/* default */.A.Date.now(); -}; - -/* harmony default export */ const lodash_es_now = (now); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js - - - - - -/* - * Adds a dummy node to the graph and return v. - */ -function addDummyNode(g, type, attrs, name) { - var v; - do { - v = uniqueId/* default */.A(name); - } while (g.hasNode(v)); - - attrs.dummy = type; - g.setNode(v, attrs); - return v; -} - -/* - * Returns a new graph with only simple edges. Handles aggregation of data - * associated with multi-edges. - */ -function simplify(g) { - var simplified = new graphlib/* Graph */.T().setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - simplified.setNode(v, g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; - var label = g.edge(e); - simplified.setEdge(e.v, e.w, { - weight: simpleLabel.weight + label.weight, - minlen: Math.max(simpleLabel.minlen, label.minlen), - }); - }); - return simplified; -} - -function asNonCompoundGraph(g) { - var simplified = new graphlib/* Graph */.T({ multigraph: g.isMultigraph() }).setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - if (!g.children(v).length) { - simplified.setNode(v, g.node(v)); - } - }); - forEach/* default */.A(g.edges(), function (e) { - simplified.setEdge(e, g.edge(e)); - }); - return simplified; -} - -function successorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var sucs = {}; - _.forEach(g.outEdges(v), function (e) { - sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; - }); - return sucs; - }); - return _.zipObject(g.nodes(), weightMap); -} - -function predecessorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var preds = {}; - _.forEach(g.inEdges(v), function (e) { - preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; - }); - return preds; - }); - return _.zipObject(g.nodes(), weightMap); -} - -/* - * Finds where a line starting at point ({x, y}) would intersect a rectangle - * ({x, y, width, height}) if it were pointing at the rectangle's center. - */ -function intersectRect(rect, point) { - var x = rect.x; - var y = rect.y; - - // Rectangle intersection algorithm from: - // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes - var dx = point.x - x; - var dy = point.y - y; - var w = rect.width / 2; - var h = rect.height / 2; - - if (!dx && !dy) { - throw new Error('Not possible to find intersection inside of the rectangle'); - } - - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - // Intersection is top or bottom of rect. - if (dy < 0) { - h = -h; - } - sx = (h * dx) / dy; - sy = h; - } else { - // Intersection is left or right of rect. - if (dx < 0) { - w = -w; - } - sx = w; - sy = (w * dy) / dx; - } - - return { x: x + sx, y: y + sy }; -} - -/* - * Given a DAG with each node assigned "rank" and "order" properties, this - * function will produce a matrix with the ids of each node. - */ -function buildLayerMatrix(g) { - var layering = map/* default */.A(range/* default */.A(util_maxRank(g) + 1), function () { - return []; - }); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - var rank = node.rank; - if (!isUndefined/* default */.A(rank)) { - layering[rank][node.order] = v; - } - }); - return layering; -} - -/* - * Adjusts the ranks for all nodes in the graph such that all nodes v have - * rank(v) >= 0 and at least one node w has rank(w) = 0. - */ -function normalizeRanks(g) { - var min = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (has/* default */.A(node, 'rank')) { - node.rank -= min; - } - }); -} - -function removeEmptyRanks(g) { - // Ranks may not start at 0, so we need to offset them - var offset = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - - var layers = []; - forEach/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank - offset; - if (!layers[rank]) { - layers[rank] = []; - } - layers[rank].push(v); - }); - - var delta = 0; - var nodeRankFactor = g.graph().nodeRankFactor; - forEach/* default */.A(layers, function (vs, i) { - if (isUndefined/* default */.A(vs) && i % nodeRankFactor !== 0) { - --delta; - } else if (delta) { - forEach/* default */.A(vs, function (v) { - g.node(v).rank += delta; - }); - } - }); -} - -function addBorderNode(g, prefix, rank, order) { - var node = { - width: 0, - height: 0, - }; - if (arguments.length >= 4) { - node.rank = rank; - node.order = order; - } - return addDummyNode(g, 'border', node, prefix); -} - -function util_maxRank(g) { - return lodash_es_max( - map/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank; - if (!isUndefined/* default */.A(rank)) { - return rank; - } - }) - ); -} - -/* - * Partition a collection into two groups: `lhs` and `rhs`. If the supplied - * function returns true for an entry it goes into `lhs`. Otherwise it goes - * into `rhs. - */ -function partition(collection, fn) { - var result = { lhs: [], rhs: [] }; - forEach/* default */.A(collection, function (value) { - if (fn(value)) { - result.lhs.push(value); - } else { - result.rhs.push(value); - } - }); - return result; -} - -/* - * Returns a new function that wraps `fn` with a timer. The wrapper logs the - * time it takes to execute the function. - */ -function util_time(name, fn) { - var start = lodash_es_now(); - try { - return fn(); - } finally { - console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); - } -} - -function notime(name, fn) { - return fn(); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js - - - - - -function addBorderSegments(g) { - function dfs(v) { - var children = g.children(v); - var node = g.node(v); - if (children.length) { - forEach/* default */.A(children, dfs); - } - - if (has/* default */.A(node, 'minRank')) { - node.borderLeft = []; - node.borderRight = []; - for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { - add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); - add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); - } - } - } - - forEach/* default */.A(g.children(), dfs); -} - -function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { - var label = { width: 0, height: 0, rank: rank, borderType: prop }; - var prev = sgNode[prop][rank - 1]; - var curr = addDummyNode(g, 'border', label, prefix); - sgNode[prop][rank] = curr; - g.setParent(curr, sg); - if (prev) { - g.setEdge(prev, curr, { weight: 1 }); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js - - - - -function adjust(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'lr' || rankDir === 'rl') { - swapWidthHeight(g); - } -} - -function coordinate_system_undo(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'bt' || rankDir === 'rl') { - reverseY(g); - } - - if (rankDir === 'lr' || rankDir === 'rl') { - swapXY(g); - swapWidthHeight(g); - } -} - -function swapWidthHeight(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapWidthHeightOne(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - swapWidthHeightOne(g.edge(e)); - }); -} - -function swapWidthHeightOne(attrs) { - var w = attrs.width; - attrs.width = attrs.height; - attrs.height = w; -} - -function reverseY(g) { - forEach/* default */.A(g.nodes(), function (v) { - reverseYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, reverseYOne); - if (has/* default */.A(edge, 'y')) { - reverseYOne(edge); - } - }); -} - -function reverseYOne(attrs) { - attrs.y = -attrs.y; -} - -function swapXY(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapXYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, swapXYOne); - if (has/* default */.A(edge, 'x')) { - swapXYOne(edge); - } - }); -} - -function swapXYOne(attrs) { - var x = attrs.x; - attrs.x = attrs.y; - attrs.y = x; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js - - - - - -/* - * Breaks any long edges in the graph into short segments that span 1 layer - * each. This operation is undoable with the denormalize function. - * - * Pre-conditions: - * - * 1. The input graph is a DAG. - * 2. Each node in the graph has a "rank" property. - * - * Post-condition: - * - * 1. All edges in the graph have a length of 1. - * 2. Dummy nodes are added where edges have been split into segments. - * 3. The graph is augmented with a "dummyChains" attribute which contains - * the first dummy in each chain of dummy nodes produced. - */ -function normalize_run(g) { - g.graph().dummyChains = []; - forEach/* default */.A(g.edges(), function (edge) { - normalizeEdge(g, edge); - }); -} - -function normalizeEdge(g, e) { - var v = e.v; - var vRank = g.node(v).rank; - var w = e.w; - var wRank = g.node(w).rank; - var name = e.name; - var edgeLabel = g.edge(e); - var labelRank = edgeLabel.labelRank; - - if (wRank === vRank + 1) return; - - g.removeEdge(e); - - var dummy, attrs, i; - for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { - edgeLabel.points = []; - attrs = { - width: 0, - height: 0, - edgeLabel: edgeLabel, - edgeObj: e, - rank: vRank, - }; - dummy = addDummyNode(g, 'edge', attrs, '_d'); - if (vRank === labelRank) { - attrs.width = edgeLabel.width; - attrs.height = edgeLabel.height; - // @ts-expect-error - attrs.dummy = 'edge-label'; - // @ts-expect-error - attrs.labelpos = edgeLabel.labelpos; - } - g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); - if (i === 0) { - g.graph().dummyChains.push(dummy); - } - v = dummy; - } - - g.setEdge(v, w, { weight: edgeLabel.weight }, name); -} - -function normalize_undo(g) { - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var origLabel = node.edgeLabel; - var w; - g.setEdge(node.edgeObj, origLabel); - while (node.dummy) { - w = g.successors(v)[0]; - g.removeNode(v); - origLabel.points.push({ x: node.x, y: node.y }); - if (node.dummy === 'edge-label') { - origLabel.x = node.x; - origLabel.y = node.y; - origLabel.width = node.width; - origLabel.height = node.height; - } - v = w; - node = g.node(v); - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js - - - - -/** - * This method is like `_.min` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * the value is ranked. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Math - * @param {Array} array The array to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {*} Returns the minimum value. - * @example - * - * var objects = [{ 'n': 1 }, { 'n': 2 }]; - * - * _.minBy(objects, function(o) { return o.n; }); - * // => { 'n': 1 } - * - * // The `_.property` iteratee shorthand. - * _.minBy(objects, 'n'); - * // => { 'n': 1 } - */ -function minBy(array, iteratee) { - return (array && array.length) - ? _baseExtremum(array, (0,_baseIteratee/* default */.A)(iteratee, 2), _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_minBy = (minBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js - - - - -/* - * Initializes ranks for the input graph using the longest path algorithm. This - * algorithm scales well and is fast in practice, it yields rather poor - * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom - * ranks wide and leaving edges longer than necessary. However, due to its - * speed, this algorithm is good for getting an initial ranking that can be fed - * into other algorithms. - * - * This algorithm does not normalize layers because it will be used by other - * algorithms in most cases. If using this algorithm directly, be sure to - * run normalize at the end. - * - * Pre-conditions: - * - * 1. Input graph is a DAG. - * 2. Input graph node labels can be assigned properties. - * - * Post-conditions: - * - * 1. Each node will be assign an (unnormalized) "rank" property. - */ -function longestPath(g) { - var visited = {}; - - function dfs(v) { - var label = g.node(v); - if (has/* default */.A(visited, v)) { - return label.rank; - } - visited[v] = true; - - var rank = lodash_es_min( - map/* default */.A(g.outEdges(v), function (e) { - return dfs(e.w) - g.edge(e).minlen; - }) - ); - - if ( - rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 - rank === undefined || // return value of _.map([]) for Lodash 4 - rank === null - ) { - // return value of _.map([null]) - rank = 0; - } - - return (label.rank = rank); - } - - forEach/* default */.A(g.sources(), dfs); -} - -/* - * Returns the amount of slack for the given edge. The slack is defined as the - * difference between the length of the edge and its minimum length. - */ -function slack(g, e) { - return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js - - - - - - -/* - * Constructs a spanning tree with tight edges and adjusted the input node's - * ranks to achieve this. A tight edge is one that is has a length that matches - * its "minlen" attribute. - * - * The basic structure for this function is derived from Gansner, et al., "A - * Technique for Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a DAG. - * 2. Graph must be connected. - * 3. Graph must have at least one node. - * 5. Graph nodes must have been previously assigned a "rank" property that - * respects the "minlen" property of incident edges. - * 6. Graph edges must have a "minlen" property. - * - * Post-conditions: - * - * - Graph nodes will have their rank adjusted to ensure that all edges are - * tight. - * - * Returns a tree (undirected graph) that is constructed using only "tight" - * edges. - */ -function feasibleTree(g) { - var t = new graphlib/* Graph */.T({ directed: false }); - - // Choose arbitrary node from which to start our tree - var start = g.nodes()[0]; - var size = g.nodeCount(); - t.setNode(start, {}); - - var edge, delta; - while (tightTree(t, g) < size) { - edge = findMinSlackEdge(t, g); - delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); - shiftRanks(t, g, delta); - } - - return t; -} - -/* - * Finds a maximal tree of tight edges and returns the number of nodes in the - * tree. - */ -function tightTree(t, g) { - function dfs(v) { - forEach/* default */.A(g.nodeEdges(v), function (e) { - var edgeV = e.v, - w = v === edgeV ? e.w : edgeV; - if (!t.hasNode(w) && !slack(g, e)) { - t.setNode(w, {}); - t.setEdge(v, w, {}); - dfs(w); - } - }); - } - - forEach/* default */.A(t.nodes(), dfs); - return t.nodeCount(); -} - -/* - * Finds the edge with the smallest slack that is incident on tree and returns - * it. - */ -function findMinSlackEdge(t, g) { - return lodash_es_minBy(g.edges(), function (e) { - if (t.hasNode(e.v) !== t.hasNode(e.w)) { - return slack(g, e); - } - }); -} - -function shiftRanks(t, g, delta) { - forEach/* default */.A(t.nodes(), function (v) { - g.node(v).rank += delta; - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js - - - - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!(0,isArrayLike/* default */.A)(collection)) { - var iteratee = (0,_baseIteratee/* default */.A)(predicate, 3); - collection = (0,keys/* default */.A)(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; -} - -/* harmony default export */ const _createFind = (createFind); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js - - -/** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ -function toInteger(value) { - var result = (0,toFinite/* default */.A)(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; -} - -/* harmony default export */ const lodash_es_toInteger = (toInteger); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return (0,_baseFindIndex/* default */.A)(array, (0,_baseIteratee/* default */.A)(predicate, 3), index); -} - -/* harmony default export */ const lodash_es_findIndex = (findIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js - - - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = _createFind(lodash_es_findIndex); - -/* harmony default export */ const lodash_es_find = (find); - -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js - - - - - -var DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function dijkstra_dijkstra(g, source, weightFn, edgeFn) { - return runDijkstra( - g, - String(source), - weightFn || DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runDijkstra(g, source, weightFn, edgeFn) { - var results = {}; - var pq = new PriorityQueue(); - var v, vEntry; - - var updateNeighbors = function (edge) { - var w = edge.v !== v ? edge.v : edge.w; - var wEntry = results[w]; - var weight = weightFn(edge); - var distance = vEntry.distance + weight; - - if (weight < 0) { - throw new Error( - 'dijkstra does not allow negative edge weights. ' + - 'Bad edge: ' + - edge + - ' Weight: ' + - weight - ); - } - - if (distance < wEntry.distance) { - wEntry.distance = distance; - wEntry.predecessor = v; - pq.decrease(w, distance); - } - }; - - g.nodes().forEach(function (v) { - var distance = v === source ? 0 : Number.POSITIVE_INFINITY; - results[v] = { distance: distance }; - pq.add(v, distance); - }); - - while (pq.size() > 0) { - v = pq.removeMin(); - vEntry = results[v]; - if (vEntry.distance === Number.POSITIVE_INFINITY) { - break; - } - - edgeFn(v).forEach(updateNeighbors); - } - - return results; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js - - - - - -function dijkstraAll(g, weightFunc, edgeFunc) { - return _.transform( - g.nodes(), - function (acc, v) { - acc[v] = dijkstra(g, v, weightFunc, edgeFunc); - }, - {} - ); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js - - - - -var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function floydWarshall(g, weightFn, edgeFn) { - return runFloydWarshall( - g, - weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runFloydWarshall(g, weightFn, edgeFn) { - var results = {}; - var nodes = g.nodes(); - - nodes.forEach(function (v) { - results[v] = {}; - results[v][v] = { distance: 0 }; - nodes.forEach(function (w) { - if (v !== w) { - results[v][w] = { distance: Number.POSITIVE_INFINITY }; - } - }); - edgeFn(v).forEach(function (edge) { - var w = edge.v === v ? edge.w : edge.v; - var d = weightFn(edge); - results[v][w] = { distance: d, predecessor: v }; - }); - }); - - nodes.forEach(function (k) { - var rowK = results[k]; - nodes.forEach(function (i) { - var rowI = results[i]; - nodes.forEach(function (j) { - var ik = rowI[k]; - var kj = rowK[j]; - var ij = rowI[j]; - var altDistance = ik.distance + kj.distance; - if (altDistance < ij.distance) { - ij.distance = altDistance; - ij.predecessor = kj.predecessor; - } - }); - }); - }); - - return results; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules -var _baseKeys = __webpack_require__(69471); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules -var _baseGetTag = __webpack_require__(88496); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js - - - - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!(0,isArray/* default */.A)(value) && (0,isObjectLike/* default */.A)(value) && (0,_baseGetTag/* default */.A)(value) == stringTag); -} - -/* harmony default export */ const lodash_es_isString = (isString); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js - - -/** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -var asciiSize = (0,_baseProperty/* default */.A)('length'); - -/* harmony default export */ const _asciiSize = (asciiSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -/* harmony default export */ const _hasUnicode = (hasUnicode); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js -/** Used to compose unicode character classes. */ -var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', - _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', - _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', - _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', - _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, - _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', - rsCombo = '[' + _unicodeSize_rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - _unicodeSize_rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', - rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; -} - -/* harmony default export */ const _unicodeSize = (unicodeSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js - - - - -/** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ -function stringSize(string) { - return _hasUnicode(string) - ? _unicodeSize(string) - : _asciiSize(string); -} - -/* harmony default export */ const _stringSize = (stringSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js - - - - - - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ -function size(collection) { - if (collection == null) { - return 0; - } - if ((0,isArrayLike/* default */.A)(collection)) { - return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; - } - var tag = (0,_getTag/* default */.A)(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return (0,_baseKeys/* default */.A)(collection).length; -} - -/* harmony default export */ const lodash_es_size = (size); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js - - - - -topsort_topsort.CycleException = topsort_CycleException; - -function topsort_topsort(g) { - var visited = {}; - var stack = {}; - var results = []; - - function visit(node) { - if (has/* default */.A(stack, node)) { - throw new topsort_CycleException(); - } - - if (!has/* default */.A(visited, node)) { - stack[node] = true; - visited[node] = true; - forEach/* default */.A(g.predecessors(node), visit); - delete stack[node]; - results.push(node); - } - } - - forEach/* default */.A(g.sinks(), visit); - - if (lodash_es_size(visited) !== g.nodeCount()) { - throw new topsort_CycleException(); - } - - return results; -} - -function topsort_CycleException() {} -topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js - - - - -function isAcyclic(g) { - try { - topsort(g); - } catch (e) { - if (e instanceof CycleException) { - return false; - } - throw e; - } - return true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js - - - - -/* - * A helper that preforms a pre- or post-order traversal on the input graph - * and returns the nodes in the order they were visited. If the graph is - * undirected then this algorithm will navigate using neighbors. If the graph - * is directed then this algorithm will navigate using successors. - * - * Order must be one of "pre" or "post". - */ -function dfs(g, vs, order) { - if (!isArray/* default */.A(vs)) { - vs = [vs]; - } - - var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); - - var acc = []; - var visited = {}; - forEach/* default */.A(vs, function (v) { - if (!g.hasNode(v)) { - throw new Error('Graph does not have node: ' + v); - } - - doDfs(g, v, order === 'post', visited, navigation, acc); - }); - return acc; -} - -function doDfs(g, v, postorder, visited, navigation, acc) { - if (!has/* default */.A(visited, v)) { - visited[v] = true; - - if (!postorder) { - acc.push(v); - } - forEach/* default */.A(navigation(v), function (w) { - doDfs(g, w, postorder, visited, navigation, acc); - }); - if (postorder) { - acc.push(v); - } - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js - - - - -function postorder(g, vs) { - return dfs(g, vs, 'post'); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js - - - - -function preorder(g, vs) { - return dfs(g, vs, 'pre'); -} - -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules -var graph = __webpack_require__(73046); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js - - - - - - -function prim(g, weightFunc) { - var result = new Graph(); - var parents = {}; - var pq = new PriorityQueue(); - var v; - - function updateNeighbors(edge) { - var w = edge.v === v ? edge.w : edge.v; - var pri = pq.priority(w); - if (pri !== undefined) { - var edgeWeight = weightFunc(edge); - if (edgeWeight < pri) { - parents[w] = v; - pq.decrease(w, edgeWeight); - } - } - } - - if (g.nodeCount() === 0) { - return result; - } - - _.each(g.nodes(), function (v) { - pq.add(v, Number.POSITIVE_INFINITY); - result.setNode(v); - }); - - // Start from an arbitrary node - pq.decrease(g.nodes()[0], 0); - - var init = false; - while (pq.size() > 0) { - v = pq.removeMin(); - if (_.has(parents, v)) { - result.setEdge(v, parents[v]); - } else if (init) { - throw new Error('Input graph is not connected: ' + g); - } else { - init = true; - } - - g.nodeEdges(v).forEach(updateNeighbors); - } - - return result; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js - - - - - - - - - - - - - - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js - - - - - - - - -// Expose some internals for testing purposes -networkSimplex.initLowLimValues = initLowLimValues; -networkSimplex.initCutValues = initCutValues; -networkSimplex.calcCutValue = calcCutValue; -networkSimplex.leaveEdge = leaveEdge; -networkSimplex.enterEdge = enterEdge; -networkSimplex.exchangeEdges = exchangeEdges; - -/* - * The network simplex algorithm assigns ranks to each node in the input graph - * and iteratively improves the ranking to reduce the length of edges. - * - * Preconditions: - * - * 1. The input graph must be a DAG. - * 2. All nodes in the graph must have an object value. - * 3. All edges in the graph must have "minlen" and "weight" attributes. - * - * Postconditions: - * - * 1. All nodes in the graph will have an assigned "rank" attribute that has - * been optimized by the network simplex algorithm. Ranks start at 0. - * - * - * A rough sketch of the algorithm is as follows: - * - * 1. Assign initial ranks to each node. We use the longest path algorithm, - * which assigns ranks to the lowest position possible. In general this - * leads to very wide bottom ranks and unnecessarily long edges. - * 2. Construct a feasible tight tree. A tight tree is one such that all - * edges in the tree have no slack (difference between length of edge - * and minlen for the edge). This by itself greatly improves the assigned - * rankings by shorting edges. - * 3. Iteratively find edges that have negative cut values. Generally a - * negative cut value indicates that the edge could be removed and a new - * tree edge could be added to produce a more compact graph. - * - * Much of the algorithms here are derived from Gansner, et al., "A Technique - * for Drawing Directed Graphs." The structure of the file roughly follows the - * structure of the overall algorithm. - */ -function networkSimplex(g) { - g = simplify(g); - longestPath(g); - var t = feasibleTree(g); - initLowLimValues(t); - initCutValues(t, g); - - var e, f; - while ((e = leaveEdge(t))) { - f = enterEdge(t, g, e); - exchangeEdges(t, g, e, f); - } -} - -/* - * Initializes cut values for all edges in the tree. - */ -function initCutValues(t, g) { - var vs = postorder(t, t.nodes()); - vs = vs.slice(0, vs.length - 1); - forEach/* default */.A(vs, function (v) { - assignCutValue(t, g, v); - }); -} - -function assignCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - t.edge(child, parent).cutvalue = calcCutValue(t, g, child); -} - -/* - * Given the tight tree, its graph, and a child in the graph calculate and - * return the cut value for the edge between the child and its parent. - */ -function calcCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - // True if the child is on the tail end of the edge in the directed graph - var childIsTail = true; - // The graph's view of the tree edge we're inspecting - var graphEdge = g.edge(child, parent); - // The accumulated cut value for the edge between this node and its parent - var cutValue = 0; - - if (!graphEdge) { - childIsTail = false; - graphEdge = g.edge(parent, child); - } - - cutValue = graphEdge.weight; - - forEach/* default */.A(g.nodeEdges(child), function (e) { - var isOutEdge = e.v === child, - other = isOutEdge ? e.w : e.v; - - if (other !== parent) { - var pointsToHead = isOutEdge === childIsTail, - otherWeight = g.edge(e).weight; - - cutValue += pointsToHead ? otherWeight : -otherWeight; - if (isTreeEdge(t, child, other)) { - var otherCutValue = t.edge(child, other).cutvalue; - cutValue += pointsToHead ? -otherCutValue : otherCutValue; - } - } - }); - - return cutValue; -} - -function initLowLimValues(tree, root) { - if (arguments.length < 2) { - root = tree.nodes()[0]; - } - dfsAssignLowLim(tree, {}, 1, root); -} - -function dfsAssignLowLim(tree, visited, nextLim, v, parent) { - var low = nextLim; - var label = tree.node(v); - - visited[v] = true; - forEach/* default */.A(tree.neighbors(v), function (w) { - if (!has/* default */.A(visited, w)) { - nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); - } - }); - - label.low = low; - label.lim = nextLim++; - if (parent) { - label.parent = parent; - } else { - // TODO should be able to remove this when we incrementally update low lim - delete label.parent; - } - - return nextLim; -} - -function leaveEdge(tree) { - return lodash_es_find(tree.edges(), function (e) { - return tree.edge(e).cutvalue < 0; - }); -} - -function enterEdge(t, g, edge) { - var v = edge.v; - var w = edge.w; - - // For the rest of this function we assume that v is the tail and w is the - // head, so if we don't have this edge in the graph we should flip it to - // match the correct orientation. - if (!g.hasEdge(v, w)) { - v = edge.w; - w = edge.v; - } - - var vLabel = t.node(v); - var wLabel = t.node(w); - var tailLabel = vLabel; - var flip = false; - - // If the root is in the tail of the edge then we need to flip the logic that - // checks for the head and tail nodes in the candidates function below. - if (vLabel.lim > wLabel.lim) { - tailLabel = wLabel; - flip = true; - } - - var candidates = filter/* default */.A(g.edges(), function (edge) { - return ( - flip === isDescendant(t, t.node(edge.v), tailLabel) && - flip !== isDescendant(t, t.node(edge.w), tailLabel) - ); - }); - - return lodash_es_minBy(candidates, function (edge) { - return slack(g, edge); - }); -} - -function exchangeEdges(t, g, e, f) { - var v = e.v; - var w = e.w; - t.removeEdge(v, w); - t.setEdge(f.v, f.w, {}); - initLowLimValues(t); - initCutValues(t, g); - updateRanks(t, g); -} - -function updateRanks(t, g) { - var root = lodash_es_find(t.nodes(), function (v) { - return !g.node(v).parent; - }); - var vs = preorder(t, root); - vs = vs.slice(1); - forEach/* default */.A(vs, function (v) { - var parent = t.node(v).parent, - edge = g.edge(v, parent), - flipped = false; - - if (!edge) { - edge = g.edge(parent, v); - flipped = true; - } - - g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); - }); -} - -/* - * Returns true if the edge is in the tree. - */ -function isTreeEdge(tree, u, v) { - return tree.hasEdge(u, v); -} - -/* - * Returns true if the specified node is descendant of the root node per the - * assigned low and lim attributes in the tree. - */ -function isDescendant(tree, vLabel, rootLabel) { - return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js - - - - - - -/* - * Assigns a rank to each node in the input graph that respects the "minlen" - * constraint specified on edges between nodes. - * - * This basic structure is derived from Gansner, et al., "A Technique for - * Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a connected DAG - * 2. Graph nodes must be objects - * 3. Graph edges must have "weight" and "minlen" attributes - * - * Post-conditions: - * - * 1. Graph nodes will have a "rank" attribute based on the results of the - * algorithm. Ranks can start at any index (including negative), we'll - * fix them up later. - */ -function rank(g) { - switch (g.graph().ranker) { - case 'network-simplex': - networkSimplexRanker(g); - break; - case 'tight-tree': - tightTreeRanker(g); - break; - case 'longest-path': - longestPathRanker(g); - break; - default: - networkSimplexRanker(g); - } -} - -// A fast and simple ranker, but results are far from optimal. -var longestPathRanker = longestPath; - -function tightTreeRanker(g) { - longestPath(g); - feasibleTree(g); -} - -function networkSimplexRanker(g) { - networkSimplex(g); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js - - - - - -/* - * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, - * adds appropriate edges to ensure that all cluster nodes are placed between - * these boundries, and ensures that the graph is connected. - * - * In addition we ensure, through the use of the minlen property, that nodes - * and subgraph border nodes to not end up on the same rank. - * - * Preconditions: - * - * 1. Input graph is a DAG - * 2. Nodes in the input graph has a minlen attribute - * - * Postconditions: - * - * 1. Input graph is connected. - * 2. Dummy nodes are added for the tops and bottoms of subgraphs. - * 3. The minlen attribute for nodes is adjusted to ensure nodes do not - * get placed on the same rank as subgraph border nodes. - * - * The nesting graph idea comes from Sander, "Layout of Compound Directed - * Graphs." - */ -function nesting_graph_run(g) { - var root = addDummyNode(g, 'root', {}, '_root'); - var depths = treeDepths(g); - var height = lodash_es_max(values/* default */.A(depths)) - 1; // Note: depths is an Object not an array - var nodeSep = 2 * height + 1; - - g.graph().nestingRoot = root; - - // Multiply minlen by nodeSep to align nodes on non-border ranks. - forEach/* default */.A(g.edges(), function (e) { - g.edge(e).minlen *= nodeSep; - }); - - // Calculate a weight that is sufficient to keep subgraphs vertically compact - var weight = sumWeights(g) + 1; - - // Create border nodes and link them up - forEach/* default */.A(g.children(), function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - }); - - // Save the multiplier for node layers for later removal of empty border - // layers. - g.graph().nodeRankFactor = nodeSep; -} - -function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { - var children = g.children(v); - if (!children.length) { - if (v !== root) { - g.setEdge(root, v, { weight: 0, minlen: nodeSep }); - } - return; - } - - var top = addBorderNode(g, '_bt'); - var bottom = addBorderNode(g, '_bb'); - var label = g.node(v); - - g.setParent(top, v); - label.borderTop = top; - g.setParent(bottom, v); - label.borderBottom = bottom; - - forEach/* default */.A(children, function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - - var childNode = g.node(child); - var childTop = childNode.borderTop ? childNode.borderTop : child; - var childBottom = childNode.borderBottom ? childNode.borderBottom : child; - var thisWeight = childNode.borderTop ? weight : 2 * weight; - var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; - - g.setEdge(top, childTop, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - - g.setEdge(childBottom, bottom, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - }); - - if (!g.parent(v)) { - g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); - } -} - -function treeDepths(g) { - var depths = {}; - function dfs(v, depth) { - var children = g.children(v); - if (children && children.length) { - forEach/* default */.A(children, function (child) { - dfs(child, depth + 1); - }); - } - depths[v] = depth; - } - forEach/* default */.A(g.children(), function (v) { - dfs(v, 1); - }); - return depths; -} - -function sumWeights(g) { - return reduce/* default */.A( - g.edges(), - function (acc, e) { - return acc + g.edge(e).weight; - }, - 0 - ); -} - -function cleanup(g) { - var graphLabel = g.graph(); - g.removeNode(graphLabel.nestingRoot); - delete graphLabel.nestingRoot; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.nestingEdge) { - g.removeEdge(e); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules -var _baseClone = __webpack_require__(91641); -;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return (0,_baseClone/* default */.A)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js - - - - -function addSubgraphConstraints(g, cg, vs) { - var prev = {}, - rootPrev; - - forEach/* default */.A(vs, function (v) { - var child = g.parent(v), - parent, - prevChild; - while (child) { - parent = g.parent(child); - if (parent) { - prevChild = prev[parent]; - prev[parent] = child; - } else { - prevChild = rootPrev; - rootPrev = child; - } - if (prevChild && prevChild !== child) { - cg.setEdge(prevChild, child); - return; - } - child = parent; - } - }); - - /* - function dfs(v) { - var children = v ? g.children(v) : g.children(); - if (children.length) { - var min = Number.POSITIVE_INFINITY, - subgraphs = []; - _.each(children, function(child) { - var childMin = dfs(child); - if (g.children(child).length) { - subgraphs.push({ v: child, order: childMin }); - } - min = Math.min(min, childMin); - }); - _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { - cg.setEdge(prev.v, curr.v); - return curr; - }); - return min; - } - return g.node(v).order; - } - dfs(undefined); - */ -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js - - - - - -/* - * Constructs a graph that can be used to sort a layer of nodes. The graph will - * contain all base and subgraph nodes from the request layer in their original - * hierarchy and any edges that are incident on these nodes and are of the type - * requested by the "relationship" parameter. - * - * Nodes from the requested rank that do not have parents are assigned a root - * node in the output graph, which is set in the root graph attribute. This - * makes it easy to walk the hierarchy of movable nodes during ordering. - * - * Pre-conditions: - * - * 1. Input graph is a DAG - * 2. Base nodes in the input graph have a rank attribute - * 3. Subgraph nodes in the input graph has minRank and maxRank attributes - * 4. Edges have an assigned weight - * - * Post-conditions: - * - * 1. Output graph has all nodes in the movable rank with preserved - * hierarchy. - * 2. Root nodes in the movable layer are made children of the node - * indicated by the root attribute of the graph. - * 3. Non-movable nodes incident on movable nodes, selected by the - * relationship parameter, are included in the graph (without hierarchy). - * 4. Edges incident on movable nodes, selected by the relationship - * parameter, are added to the output graph. - * 5. The weights for copied edges are aggregated as need, since the output - * graph is not a multi-graph. - */ -function buildLayerGraph(g, rank, relationship) { - var root = createRootNode(g), - result = new graphlib/* Graph */.T({ compound: true }) - .setGraph({ root: root }) - .setDefaultNodeLabel(function (v) { - return g.node(v); - }); - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v), - parent = g.parent(v); - - if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { - result.setNode(v); - result.setParent(v, parent || root); - - // This assumes we have only short edges! - forEach/* default */.A(g[relationship](v), function (e) { - var u = e.v === v ? e.w : e.v, - edge = result.edge(u, v), - weight = !isUndefined/* default */.A(edge) ? edge.weight : 0; - result.setEdge(u, v, { weight: g.edge(e).weight + weight }); - }); - - if (has/* default */.A(node, 'minRank')) { - result.setNode(v, { - borderLeft: node.borderLeft[rank], - borderRight: node.borderRight[rank], - }); - } - } - }); - - return result; -} - -function createRootNode(g) { - var v; - while (g.hasNode((v = uniqueId/* default */.A('_root')))); - return v; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js -/** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ -function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; -} - -/* harmony default export */ const _baseZipObject = (baseZipObject); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js - - - -/** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ -function zipObject(props, values) { - return _baseZipObject(props || [], values || [], _assignValue/* default */.A); -} - -/* harmony default export */ const lodash_es_zipObject = (zipObject); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js -var _baseMap = __webpack_require__(52568); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js -/** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ -function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; -} - -/* harmony default export */ const _baseSortBy = (baseSortBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js - - -/** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ -function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = (0,isSymbol/* default */.A)(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = (0,isSymbol/* default */.A)(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; -} - -/* harmony default export */ const _compareAscending = (compareAscending); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js - - -/** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ -function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = _compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; -} - -/* harmony default export */ const _compareMultiple = (compareMultiple); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js - - - - - - - - - - -/** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ -function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - if ((0,isArray/* default */.A)(iteratee)) { - return function(value) { - return (0,_baseGet/* default */.A)(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } - } - return iteratee; - }); - } else { - iteratees = [identity/* default */.A]; - } - - var index = -1; - iteratees = (0,_arrayMap/* default */.A)(iteratees, (0,_baseUnary/* default */.A)(_baseIteratee/* default */.A)); - - var result = (0,_baseMap/* default */.A)(collection, function(value, key, collection) { - var criteria = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return _baseSortBy(result, function(object, other) { - return _compareMultiple(object, other, orders); - }); -} - -/* harmony default export */ const _baseOrderBy = (baseOrderBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js - - - - - -/** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 30 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] - */ -var sortBy = (0,_baseRest/* default */.A)(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && (0,_isIterateeCall/* default */.A)(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && (0,_isIterateeCall/* default */.A)(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return _baseOrderBy(collection, (0,_baseFlatten/* default */.A)(iteratees, 1), []); -}); - -/* harmony default export */ const lodash_es_sortBy = (sortBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js - - - - -/* - * A function that takes a layering (an array of layers, each with an array of - * ordererd nodes) and a graph and returns a weighted crossing count. - * - * Pre-conditions: - * - * 1. Input graph must be simple (not a multigraph), directed, and include - * only simple edges. - * 2. Edges in the input graph must have assigned weights. - * - * Post-conditions: - * - * 1. The graph and layering matrix are left unchanged. - * - * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." - */ -function crossCount(g, layering) { - var cc = 0; - for (var i = 1; i < layering.length; ++i) { - cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); - } - return cc; -} - -function twoLayerCrossCount(g, northLayer, southLayer) { - // Sort all of the edges between the north and south layers by their position - // in the north layer and then the south. Map these edges to the position of - // their head in the south layer. - var southPos = lodash_es_zipObject( - southLayer, - map/* default */.A(southLayer, function (v, i) { - return i; - }) - ); - var southEntries = flatten/* default */.A( - map/* default */.A(northLayer, function (v) { - return lodash_es_sortBy( - map/* default */.A(g.outEdges(v), function (e) { - return { pos: southPos[e.w], weight: g.edge(e).weight }; - }), - 'pos' - ); - }) - ); - - // Build the accumulator tree - var firstIndex = 1; - while (firstIndex < southLayer.length) firstIndex <<= 1; - var treeSize = 2 * firstIndex - 1; - firstIndex -= 1; - var tree = map/* default */.A(new Array(treeSize), function () { - return 0; - }); - - // Calculate the weighted crossings - var cc = 0; - forEach/* default */.A( - // @ts-expect-error - southEntries.forEach(function (entry) { - var index = entry.pos + firstIndex; - tree[index] += entry.weight; - var weightSum = 0; - // @ts-expect-error - while (index > 0) { - // @ts-expect-error - if (index % 2) { - weightSum += tree[index + 1]; - } - // @ts-expect-error - index = (index - 1) >> 1; - tree[index] += entry.weight; - } - cc += entry.weight * weightSum; - }) - ); - - return cc; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js - - - - -/* - * Assigns an initial order value for each node by performing a DFS search - * starting from nodes in the first rank. Nodes are assigned an order in their - * rank as they are first visited. - * - * This approach comes from Gansner, et al., "A Technique for Drawing Directed - * Graphs." - * - * Returns a layering matrix with an array per layer and each layer sorted by - * the order of its nodes. - */ -function initOrder(g) { - var visited = {}; - var simpleNodes = filter/* default */.A(g.nodes(), function (v) { - return !g.children(v).length; - }); - var maxRank = lodash_es_max( - map/* default */.A(simpleNodes, function (v) { - return g.node(v).rank; - }) - ); - var layers = map/* default */.A(range/* default */.A(maxRank + 1), function () { - return []; - }); - - function dfs(v) { - if (has/* default */.A(visited, v)) return; - visited[v] = true; - var node = g.node(v); - layers[node.rank].push(v); - forEach/* default */.A(g.successors(v), dfs); - } - - var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { - return g.node(v).rank; - }); - forEach/* default */.A(orderedVs, dfs); - - return layers; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js - - - - -function barycenter(g, movable) { - return map/* default */.A(movable, function (v) { - var inV = g.inEdges(v); - if (!inV.length) { - return { v: v }; - } else { - var result = reduce/* default */.A( - inV, - function (acc, e) { - var edge = g.edge(e), - nodeU = g.node(e.v); - return { - sum: acc.sum + edge.weight * nodeU.order, - weight: acc.weight + edge.weight, - }; - }, - { sum: 0, weight: 0 } - ); - - return { - v: v, - barycenter: result.sum / result.weight, - weight: result.weight, - }; - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js - - - - -/* - * Given a list of entries of the form {v, barycenter, weight} and a - * constraint graph this function will resolve any conflicts between the - * constraint graph and the barycenters for the entries. If the barycenters for - * an entry would violate a constraint in the constraint graph then we coalesce - * the nodes in the conflict into a new node that respects the contraint and - * aggregates barycenter and weight information. - * - * This implementation is based on the description in Forster, "A Fast and - * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it - * differs in some specific details. - * - * Pre-conditions: - * - * 1. Each entry has the form {v, barycenter, weight}, or if the node has - * no barycenter, then {v}. - * - * Returns: - * - * A new list of entries of the form {vs, i, barycenter, weight}. The list - * `vs` may either be a singleton or it may be an aggregation of nodes - * ordered such that they do not violate constraints from the constraint - * graph. The property `i` is the lowest original index of any of the - * elements in `vs`. - */ -function resolveConflicts(entries, cg) { - var mappedEntries = {}; - forEach/* default */.A(entries, function (entry, i) { - var tmp = (mappedEntries[entry.v] = { - indegree: 0, - in: [], - out: [], - vs: [entry.v], - i: i, - }); - if (!isUndefined/* default */.A(entry.barycenter)) { - // @ts-expect-error - tmp.barycenter = entry.barycenter; - // @ts-expect-error - tmp.weight = entry.weight; - } - }); - - forEach/* default */.A(cg.edges(), function (e) { - var entryV = mappedEntries[e.v]; - var entryW = mappedEntries[e.w]; - if (!isUndefined/* default */.A(entryV) && !isUndefined/* default */.A(entryW)) { - entryW.indegree++; - entryV.out.push(mappedEntries[e.w]); - } - }); - - var sourceSet = filter/* default */.A(mappedEntries, function (entry) { - // @ts-expect-error - return !entry.indegree; - }); - - return doResolveConflicts(sourceSet); -} - -function doResolveConflicts(sourceSet) { - var entries = []; - - function handleIn(vEntry) { - return function (uEntry) { - if (uEntry.merged) { - return; - } - if ( - isUndefined/* default */.A(uEntry.barycenter) || - isUndefined/* default */.A(vEntry.barycenter) || - uEntry.barycenter >= vEntry.barycenter - ) { - mergeEntries(vEntry, uEntry); - } - }; - } - - function handleOut(vEntry) { - return function (wEntry) { - wEntry['in'].push(vEntry); - if (--wEntry.indegree === 0) { - sourceSet.push(wEntry); - } - }; - } - - while (sourceSet.length) { - var entry = sourceSet.pop(); - entries.push(entry); - forEach/* default */.A(entry['in'].reverse(), handleIn(entry)); - forEach/* default */.A(entry.out, handleOut(entry)); - } - - return map/* default */.A( - filter/* default */.A(entries, function (entry) { - return !entry.merged; - }), - function (entry) { - return pick/* default */.A(entry, ['vs', 'i', 'barycenter', 'weight']); - } - ); -} - -function mergeEntries(target, source) { - var sum = 0; - var weight = 0; - - if (target.weight) { - sum += target.barycenter * target.weight; - weight += target.weight; - } - - if (source.weight) { - sum += source.barycenter * source.weight; - weight += source.weight; - } - - target.vs = source.vs.concat(target.vs); - target.barycenter = sum / weight; - target.weight = weight; - target.i = Math.min(source.i, target.i); - source.merged = true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js - - - - - -function sort(entries, biasRight) { - var parts = partition(entries, function (entry) { - return has/* default */.A(entry, 'barycenter'); - }); - var sortable = parts.lhs, - unsortable = lodash_es_sortBy(parts.rhs, function (entry) { - return -entry.i; - }), - vs = [], - sum = 0, - weight = 0, - vsIndex = 0; - - sortable.sort(compareWithBias(!!biasRight)); - - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - - forEach/* default */.A(sortable, function (entry) { - vsIndex += entry.vs.length; - vs.push(entry.vs); - sum += entry.barycenter * entry.weight; - weight += entry.weight; - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - }); - - var result = { vs: flatten/* default */.A(vs) }; - if (weight) { - result.barycenter = sum / weight; - result.weight = weight; - } - return result; -} - -function consumeUnsortable(vs, unsortable, index) { - var last; - while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { - unsortable.pop(); - vs.push(last.vs); - index++; - } - return index; -} - -function compareWithBias(bias) { - return function (entryV, entryW) { - if (entryV.barycenter < entryW.barycenter) { - return -1; - } else if (entryV.barycenter > entryW.barycenter) { - return 1; - } - - return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; - }; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js - - - - - - - -function sortSubgraph(g, v, cg, biasRight) { - var movable = g.children(v); - var node = g.node(v); - var bl = node ? node.borderLeft : undefined; - var br = node ? node.borderRight : undefined; - var subgraphs = {}; - - if (bl) { - movable = filter/* default */.A(movable, function (w) { - return w !== bl && w !== br; - }); - } - - var barycenters = barycenter(g, movable); - forEach/* default */.A(barycenters, function (entry) { - if (g.children(entry.v).length) { - var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); - subgraphs[entry.v] = subgraphResult; - if (has/* default */.A(subgraphResult, 'barycenter')) { - mergeBarycenters(entry, subgraphResult); - } - } - }); - - var entries = resolveConflicts(barycenters, cg); - expandSubgraphs(entries, subgraphs); - - var result = sort(entries, biasRight); - - if (bl) { - result.vs = flatten/* default */.A([bl, result.vs, br]); - if (g.predecessors(bl).length) { - var blPred = g.node(g.predecessors(bl)[0]), - brPred = g.node(g.predecessors(br)[0]); - if (!has/* default */.A(result, 'barycenter')) { - result.barycenter = 0; - result.weight = 0; - } - result.barycenter = - (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); - result.weight += 2; - } - } - - return result; -} - -function expandSubgraphs(entries, subgraphs) { - forEach/* default */.A(entries, function (entry) { - entry.vs = flatten/* default */.A( - entry.vs.map(function (v) { - if (subgraphs[v]) { - return subgraphs[v].vs; - } - return v; - }) - ); - }); -} - -function mergeBarycenters(target, other) { - if (!isUndefined/* default */.A(target.barycenter)) { - target.barycenter = - (target.barycenter * target.weight + other.barycenter * other.weight) / - (target.weight + other.weight); - target.weight += other.weight; - } else { - target.barycenter = other.barycenter; - target.weight = other.weight; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js - - - - - - - - - - - -/* - * Applies heuristics to minimize edge crossings in the graph and sets the best - * order solution as an order attribute on each node. - * - * Pre-conditions: - * - * 1. Graph must be DAG - * 2. Graph nodes must be objects with a "rank" attribute - * 3. Graph edges must have the "weight" attribute - * - * Post-conditions: - * - * 1. Graph nodes will have an "order" attribute based on the results of the - * algorithm. - */ -function order(g) { - var maxRank = util_maxRank(g), - downLayerGraphs = buildLayerGraphs(g, range/* default */.A(1, maxRank + 1), 'inEdges'), - upLayerGraphs = buildLayerGraphs(g, range/* default */.A(maxRank - 1, -1, -1), 'outEdges'); - - var layering = initOrder(g); - assignOrder(g, layering); - - var bestCC = Number.POSITIVE_INFINITY, - best; - - for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { - sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); - - layering = buildLayerMatrix(g); - var cc = crossCount(g, layering); - if (cc < bestCC) { - lastBest = 0; - best = lodash_es_cloneDeep(layering); - bestCC = cc; - } - } - - assignOrder(g, best); -} - -function buildLayerGraphs(g, ranks, relationship) { - return map/* default */.A(ranks, function (rank) { - return buildLayerGraph(g, rank, relationship); - }); -} - -function sweepLayerGraphs(layerGraphs, biasRight) { - var cg = new graphlib/* Graph */.T(); - forEach/* default */.A(layerGraphs, function (lg) { - var root = lg.graph().root; - var sorted = sortSubgraph(lg, root, cg, biasRight); - forEach/* default */.A(sorted.vs, function (v, i) { - lg.node(v).order = i; - }); - addSubgraphConstraints(lg, cg, sorted.vs); - }); -} - -function assignOrder(g, layering) { - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, i) { - g.node(v).order = i; - }); - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js - - - - -function parentDummyChains(g) { - var postorderNums = parent_dummy_chains_postorder(g); - - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var edgeObj = node.edgeObj; - var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); - var path = pathData.path; - var lca = pathData.lca; - var pathIdx = 0; - var pathV = path[pathIdx]; - var ascending = true; - - while (v !== edgeObj.w) { - node = g.node(v); - - if (ascending) { - while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { - pathIdx++; - } - - if (pathV === lca) { - ascending = false; - } - } - - if (!ascending) { - while ( - pathIdx < path.length - 1 && - g.node((pathV = path[pathIdx + 1])).minRank <= node.rank - ) { - pathIdx++; - } - pathV = path[pathIdx]; - } - - g.setParent(v, pathV); - v = g.successors(v)[0]; - } - }); -} - -// Find a path from v to w through the lowest common ancestor (LCA). Return the -// full path and the LCA. -function findPath(g, postorderNums, v, w) { - var vPath = []; - var wPath = []; - var low = Math.min(postorderNums[v].low, postorderNums[w].low); - var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); - var parent; - var lca; - - // Traverse up from v to find the LCA - parent = v; - do { - parent = g.parent(parent); - vPath.push(parent); - } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); - lca = parent; - - // Traverse from w to LCA - parent = w; - while ((parent = g.parent(parent)) !== lca) { - wPath.push(parent); - } - - return { path: vPath.concat(wPath.reverse()), lca: lca }; -} - -function parent_dummy_chains_postorder(g) { - var result = {}; - var lim = 0; - - function dfs(v) { - var low = lim; - forEach/* default */.A(g.children(v), dfs); - result[v] = { low: low, lim: lim++ }; - } - forEach/* default */.A(g.children(), dfs); - - return result; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js -var _castFunction = __webpack_require__(99922); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js - - - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && (0,_baseForOwn/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee)); -} - -/* harmony default export */ const lodash_es_forOwn = (forOwn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules -var _baseFor = __webpack_require__(4574); -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js - - - - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : (0,_baseFor/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee), keysIn/* default */.A); -} - -/* harmony default export */ const lodash_es_forIn = (forIn); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js - - - - -/* - * This module provides coordinate assignment based on Brandes and Köpf, "Fast - * and Simple Horizontal Coordinate Assignment." - */ - - - -/* - * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" - * property. A type-1 conflict is one where a non-inner segment crosses an - * inner segment. An inner segment is an edge with both incident nodes marked - * with the "dummy" property. - * - * This algorithm scans layer by layer, starting with the second, for type-1 - * conflicts between the current layer and the previous layer. For each layer - * it scans the nodes from left to right until it reaches one that is incident - * on an inner segment. It then scans predecessors to determine if they have - * edges that cross that inner segment. At the end a final scan is done for all - * nodes on the current rank to see if they cross the last visited inner - * segment. - * - * This algorithm (safely) assumes that a dummy node will only be incident on a - * single node in the layers being scanned. - */ -function findType1Conflicts(g, layering) { - var conflicts = {}; - - function visitLayer(prevLayer, layer) { - var // last visited node in the previous layer that is incident on an inner - // segment. - k0 = 0, - // Tracks the last node in this layer scanned for crossings with a type-1 - // segment. - scanPos = 0, - prevLayerLength = prevLayer.length, - lastNode = lodash_es_last(layer); - - forEach/* default */.A(layer, function (v, i) { - var w = findOtherInnerSegmentNode(g, v), - k1 = w ? g.node(w).order : prevLayerLength; - - if (w || v === lastNode) { - forEach/* default */.A(layer.slice(scanPos, i + 1), function (scanNode) { - forEach/* default */.A(g.predecessors(scanNode), function (u) { - var uLabel = g.node(u), - uPos = uLabel.order; - if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { - addConflict(conflicts, u, scanNode); - } - }); - }); - // @ts-expect-error - scanPos = i + 1; - k0 = k1; - } - }); - - return layer; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findType2Conflicts(g, layering) { - var conflicts = {}; - - function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { - var v; - forEach/* default */.A(range/* default */.A(southPos, southEnd), function (i) { - v = south[i]; - if (g.node(v).dummy) { - forEach/* default */.A(g.predecessors(v), function (u) { - var uNode = g.node(u); - if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { - addConflict(conflicts, u, v); - } - }); - } - }); - } - - function visitLayer(north, south) { - var prevNorthPos = -1, - nextNorthPos, - southPos = 0; - - forEach/* default */.A(south, function (v, southLookahead) { - if (g.node(v).dummy === 'border') { - var predecessors = g.predecessors(v); - if (predecessors.length) { - nextNorthPos = g.node(predecessors[0]).order; - scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); - // @ts-expect-error - southPos = southLookahead; - prevNorthPos = nextNorthPos; - } - } - scan(south, southPos, south.length, nextNorthPos, north.length); - }); - - return south; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findOtherInnerSegmentNode(g, v) { - if (g.node(v).dummy) { - return lodash_es_find(g.predecessors(v), function (u) { - return g.node(u).dummy; - }); - } -} - -function addConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - - var conflictsV = conflicts[v]; - if (!conflictsV) { - conflicts[v] = conflictsV = {}; - } - conflictsV[w] = true; -} - -function hasConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - return has/* default */.A(conflicts[v], w); -} - -/* - * Try to align nodes into vertical "blocks" where possible. This algorithm - * attempts to align a node with one of its median neighbors. If the edge - * connecting a neighbor is a type-1 conflict then we ignore that possibility. - * If a previous node has already formed a block with a node after the node - * we're trying to form a block with, we also ignore that possibility - our - * blocks would be split in that scenario. - */ -function verticalAlignment(g, layering, conflicts, neighborFn) { - var root = {}, - align = {}, - pos = {}; - - // We cache the position here based on the layering because the graph and - // layering may be out of sync. The layering matrix is manipulated to - // generate different extreme alignments. - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, order) { - root[v] = v; - align[v] = v; - pos[v] = order; - }); - }); - - forEach/* default */.A(layering, function (layer) { - var prevIdx = -1; - forEach/* default */.A(layer, function (v) { - var ws = neighborFn(v); - if (ws.length) { - ws = lodash_es_sortBy(ws, function (w) { - return pos[w]; - }); - var mp = (ws.length - 1) / 2; - for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { - var w = ws[i]; - if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { - align[w] = v; - align[v] = root[v] = root[w]; - prevIdx = pos[w]; - } - } - } - }); - }); - - return { root: root, align: align }; -} - -function horizontalCompaction(g, layering, root, align, reverseSep) { - // This portion of the algorithm differs from BK due to a number of problems. - // Instead of their algorithm we construct a new block graph and do two - // sweeps. The first sweep places blocks with the smallest possible - // coordinates. The second sweep removes unused space by moving blocks to the - // greatest coordinates without violating separation. - var xs = {}, - blockG = buildBlockGraph(g, layering, root, reverseSep), - borderType = reverseSep ? 'borderLeft' : 'borderRight'; - - function iterate(setXsFunc, nextNodesFunc) { - var stack = blockG.nodes(); - var elem = stack.pop(); - var visited = {}; - while (elem) { - if (visited[elem]) { - setXsFunc(elem); - } else { - visited[elem] = true; - stack.push(elem); - stack = stack.concat(nextNodesFunc(elem)); - } - - elem = stack.pop(); - } - } - - // First pass, assign smallest coordinates - function pass1(elem) { - xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { - return Math.max(acc, xs[e.v] + blockG.edge(e)); - }, 0); - } - - // Second pass, assign greatest coordinates - function pass2(elem) { - var min = blockG.outEdges(elem).reduce(function (acc, e) { - return Math.min(acc, xs[e.w] - blockG.edge(e)); - }, Number.POSITIVE_INFINITY); - - var node = g.node(elem); - if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { - xs[elem] = Math.max(xs[elem], min); - } - } - - iterate(pass1, blockG.predecessors.bind(blockG)); - iterate(pass2, blockG.successors.bind(blockG)); - - // Assign x coordinates to all nodes - forEach/* default */.A(align, function (v) { - xs[v] = xs[root[v]]; - }); - - return xs; -} - -function buildBlockGraph(g, layering, root, reverseSep) { - var blockGraph = new graphlib/* Graph */.T(), - graphLabel = g.graph(), - sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); - - forEach/* default */.A(layering, function (layer) { - var u; - forEach/* default */.A(layer, function (v) { - var vRoot = root[v]; - blockGraph.setNode(vRoot); - if (u) { - var uRoot = root[u], - prevMax = blockGraph.edge(uRoot, vRoot); - blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); - } - u = v; - }); - }); - - return blockGraph; -} - -/* - * Returns the alignment that has the smallest width of the given alignments. - */ -function findSmallestWidthAlignment(g, xss) { - return lodash_es_minBy(values/* default */.A(xss), function (xs) { - var max = Number.NEGATIVE_INFINITY; - var min = Number.POSITIVE_INFINITY; - - lodash_es_forIn(xs, function (x, v) { - var halfWidth = width(g, v) / 2; - - max = Math.max(x + halfWidth, max); - min = Math.min(x - halfWidth, min); - }); - - return max - min; - }); -} - -/* - * Align the coordinates of each of the layout alignments such that - * left-biased alignments have their minimum coordinate at the same point as - * the minimum coordinate of the smallest width alignment and right-biased - * alignments have their maximum coordinate at the same point as the maximum - * coordinate of the smallest width alignment. - */ -function alignCoordinates(xss, alignTo) { - var alignToVals = values/* default */.A(alignTo), - alignToMin = lodash_es_min(alignToVals), - alignToMax = lodash_es_max(alignToVals); - - forEach/* default */.A(['u', 'd'], function (vert) { - forEach/* default */.A(['l', 'r'], function (horiz) { - var alignment = vert + horiz, - xs = xss[alignment], - delta; - if (xs === alignTo) return; - - var xsVals = values/* default */.A(xs); - delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); - - if (delta) { - xss[alignment] = lodash_es_mapValues(xs, function (x) { - return x + delta; - }); - } - }); - }); -} - -function balance(xss, align) { - return lodash_es_mapValues(xss.ul, function (ignore, v) { - if (align) { - return xss[align.toLowerCase()][v]; - } else { - var xs = lodash_es_sortBy(map/* default */.A(xss, v)); - return (xs[1] + xs[2]) / 2; - } - }); -} - -function positionX(g) { - var layering = buildLayerMatrix(g); - var conflicts = merge/* default */.A(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); - - var xss = {}; - var adjustedLayering; - forEach/* default */.A(['u', 'd'], function (vert) { - adjustedLayering = vert === 'u' ? layering : values/* default */.A(layering).reverse(); - forEach/* default */.A(['l', 'r'], function (horiz) { - if (horiz === 'r') { - adjustedLayering = map/* default */.A(adjustedLayering, function (inner) { - return values/* default */.A(inner).reverse(); - }); - } - - var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); - var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); - var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); - if (horiz === 'r') { - xs = lodash_es_mapValues(xs, function (x) { - return -x; - }); - } - xss[vert + horiz] = xs; - }); - }); - - var smallestWidth = findSmallestWidthAlignment(g, xss); - alignCoordinates(xss, smallestWidth); - return balance(xss, g.graph().align); -} - -function sep(nodeSep, edgeSep, reverseSep) { - return function (g, v, w) { - var vLabel = g.node(v); - var wLabel = g.node(w); - var sum = 0; - var delta; - - sum += vLabel.width / 2; - if (has/* default */.A(vLabel, 'labelpos')) { - switch (vLabel.labelpos.toLowerCase()) { - case 'l': - delta = -vLabel.width / 2; - break; - case 'r': - delta = vLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; - sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; - - sum += wLabel.width / 2; - if (has/* default */.A(wLabel, 'labelpos')) { - switch (wLabel.labelpos.toLowerCase()) { - case 'l': - delta = wLabel.width / 2; - break; - case 'r': - delta = -wLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - return sum; - }; -} - -function width(g, v) { - return g.node(v).width; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js - - - - - - -function position(g) { - g = asNonCompoundGraph(g); - - positionY(g); - lodash_es_forOwn(positionX(g), function (x, v) { - g.node(v).x = x; - }); -} - -function positionY(g) { - var layering = buildLayerMatrix(g); - var rankSep = g.graph().ranksep; - var prevY = 0; - forEach/* default */.A(layering, function (layer) { - var maxHeight = lodash_es_max( - map/* default */.A(layer, function (v) { - return g.node(v).height; - }) - ); - forEach/* default */.A(layer, function (v) { - g.node(v).y = prevY + maxHeight / 2; - }); - prevY += maxHeight + rankSep; - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js - - - - - - - - - - - - - - - -function layout(g, opts) { - var time = opts && opts.debugTiming ? util_time : notime; - time('layout', function () { - var layoutGraph = time(' buildLayoutGraph', function () { - return buildLayoutGraph(g); - }); - time(' runLayout', function () { - runLayout(layoutGraph, time); - }); - time(' updateInputGraph', function () { - updateInputGraph(g, layoutGraph); - }); - }); -} - -function runLayout(g, time) { - time(' makeSpaceForEdgeLabels', function () { - makeSpaceForEdgeLabels(g); - }); - time(' removeSelfEdges', function () { - removeSelfEdges(g); - }); - time(' acyclic', function () { - run(g); - }); - time(' nestingGraph.run', function () { - nesting_graph_run(g); - }); - time(' rank', function () { - rank(asNonCompoundGraph(g)); - }); - time(' injectEdgeLabelProxies', function () { - injectEdgeLabelProxies(g); - }); - time(' removeEmptyRanks', function () { - removeEmptyRanks(g); - }); - time(' nestingGraph.cleanup', function () { - cleanup(g); - }); - time(' normalizeRanks', function () { - normalizeRanks(g); - }); - time(' assignRankMinMax', function () { - assignRankMinMax(g); - }); - time(' removeEdgeLabelProxies', function () { - removeEdgeLabelProxies(g); - }); - time(' normalize.run', function () { - normalize_run(g); - }); - time(' parentDummyChains', function () { - parentDummyChains(g); - }); - time(' addBorderSegments', function () { - addBorderSegments(g); - }); - time(' order', function () { - order(g); - }); - time(' insertSelfEdges', function () { - insertSelfEdges(g); - }); - time(' adjustCoordinateSystem', function () { - adjust(g); - }); - time(' position', function () { - position(g); - }); - time(' positionSelfEdges', function () { - positionSelfEdges(g); - }); - time(' removeBorderNodes', function () { - removeBorderNodes(g); - }); - time(' normalize.undo', function () { - normalize_undo(g); - }); - time(' fixupEdgeLabelCoords', function () { - fixupEdgeLabelCoords(g); - }); - time(' undoCoordinateSystem', function () { - coordinate_system_undo(g); - }); - time(' translateGraph', function () { - translateGraph(g); - }); - time(' assignNodeIntersects', function () { - assignNodeIntersects(g); - }); - time(' reversePoints', function () { - reversePointsForReversedEdges(g); - }); - time(' acyclic.undo', function () { - undo(g); - }); -} - -/* - * Copies final layout information from the layout graph back to the input - * graph. This process only copies whitelisted attributes from the layout graph - * to the input graph, so it serves as a good place to determine what - * attributes can influence layout. - */ -function updateInputGraph(inputGraph, layoutGraph) { - forEach/* default */.A(inputGraph.nodes(), function (v) { - var inputLabel = inputGraph.node(v); - var layoutLabel = layoutGraph.node(v); - - if (inputLabel) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - - if (layoutGraph.children(v).length) { - inputLabel.width = layoutLabel.width; - inputLabel.height = layoutLabel.height; - } - } - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var inputLabel = inputGraph.edge(e); - var layoutLabel = layoutGraph.edge(e); - - inputLabel.points = layoutLabel.points; - if (has/* default */.A(layoutLabel, 'x')) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - } - }); - - inputGraph.graph().width = layoutGraph.graph().width; - inputGraph.graph().height = layoutGraph.graph().height; -} - -var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; -var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; -var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; -var nodeNumAttrs = ['width', 'height']; -var nodeDefaults = { width: 0, height: 0 }; -var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; -var edgeDefaults = { - minlen: 1, - weight: 1, - width: 0, - height: 0, - labeloffset: 10, - labelpos: 'r', -}; -var edgeAttrs = ['labelpos']; - -/* - * Constructs a new graph from the input graph, which can be used for layout. - * This process copies only whitelisted attributes from the input graph to the - * layout graph. Thus this function serves as a good place to determine what - * attributes can influence layout. - */ -function buildLayoutGraph(inputGraph) { - var g = new graphlib/* Graph */.T({ multigraph: true, compound: true }); - var graph = canonicalize(inputGraph.graph()); - - g.setGraph( - merge/* default */.A({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.A(graph, graphAttrs)) - ); - - forEach/* default */.A(inputGraph.nodes(), function (v) { - var node = canonicalize(inputGraph.node(v)); - g.setNode(v, defaults/* default */.A(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); - g.setParent(v, inputGraph.parent(v)); - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var edge = canonicalize(inputGraph.edge(e)); - g.setEdge( - e, - merge/* default */.A({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.A(edge, edgeAttrs)) - ); - }); - - return g; -} - -/* - * This idea comes from the Gansner paper: to account for edge labels in our - * layout we split each rank in half by doubling minlen and halving ranksep. - * Then we can place labels at these mid-points between nodes. - * - * We also add some minimal padding to the width to push the label for the edge - * away from the edge itself a bit. - */ -function makeSpaceForEdgeLabels(g) { - var graph = g.graph(); - graph.ranksep /= 2; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - edge.minlen *= 2; - if (edge.labelpos.toLowerCase() !== 'c') { - if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { - edge.width += edge.labeloffset; - } else { - edge.height += edge.labeloffset; - } - } - }); -} - -/* - * Creates temporary dummy nodes that capture the rank in which each edge's - * label is going to, if it has one of non-zero width and height. We do this - * so that we can safely remove empty ranks while preserving balance for the - * label's position. - */ -function injectEdgeLabelProxies(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.width && edge.height) { - var v = g.node(e.v); - var w = g.node(e.w); - var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; - addDummyNode(g, 'edge-proxy', label, '_ep'); - } - }); -} - -function assignRankMinMax(g) { - var maxRank = 0; - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.borderTop) { - node.minRank = g.node(node.borderTop).rank; - node.maxRank = g.node(node.borderBottom).rank; - // @ts-expect-error - maxRank = lodash_es_max(maxRank, node.maxRank); - } - }); - g.graph().maxRank = maxRank; -} - -function removeEdgeLabelProxies(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'edge-proxy') { - g.edge(node.e).labelRank = node.rank; - g.removeNode(v); - } - }); -} - -function translateGraph(g) { - var minX = Number.POSITIVE_INFINITY; - var maxX = 0; - var minY = Number.POSITIVE_INFINITY; - var maxY = 0; - var graphLabel = g.graph(); - var marginX = graphLabel.marginx || 0; - var marginY = graphLabel.marginy || 0; - - function getExtremes(attrs) { - var x = attrs.x; - var y = attrs.y; - var w = attrs.width; - var h = attrs.height; - minX = Math.min(minX, x - w / 2); - maxX = Math.max(maxX, x + w / 2); - minY = Math.min(minY, y - h / 2); - maxY = Math.max(maxY, y + h / 2); - } - - forEach/* default */.A(g.nodes(), function (v) { - getExtremes(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - getExtremes(edge); - } - }); - - minX -= marginX; - minY -= marginY; - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - node.x -= minX; - node.y -= minY; - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, function (p) { - p.x -= minX; - p.y -= minY; - }); - if (has/* default */.A(edge, 'x')) { - edge.x -= minX; - } - if (has/* default */.A(edge, 'y')) { - edge.y -= minY; - } - }); - - graphLabel.width = maxX - minX + marginX; - graphLabel.height = maxY - minY + marginY; -} - -function assignNodeIntersects(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - var nodeV = g.node(e.v); - var nodeW = g.node(e.w); - var p1, p2; - if (!edge.points) { - edge.points = []; - p1 = nodeW; - p2 = nodeV; - } else { - p1 = edge.points[0]; - p2 = edge.points[edge.points.length - 1]; - } - edge.points.unshift(intersectRect(nodeV, p1)); - edge.points.push(intersectRect(nodeW, p2)); - }); -} - -function fixupEdgeLabelCoords(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - if (edge.labelpos === 'l' || edge.labelpos === 'r') { - edge.width -= edge.labeloffset; - } - switch (edge.labelpos) { - case 'l': - edge.x -= edge.width / 2 + edge.labeloffset; - break; - case 'r': - edge.x += edge.width / 2 + edge.labeloffset; - break; - } - } - }); -} - -function reversePointsForReversedEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.reversed) { - edge.points.reverse(); - } - }); -} - -function removeBorderNodes(g) { - forEach/* default */.A(g.nodes(), function (v) { - if (g.children(v).length) { - var node = g.node(v); - var t = g.node(node.borderTop); - var b = g.node(node.borderBottom); - var l = g.node(lodash_es_last(node.borderLeft)); - var r = g.node(lodash_es_last(node.borderRight)); - - node.width = Math.abs(r.x - l.x); - node.height = Math.abs(b.y - t.y); - node.x = l.x + node.width / 2; - node.y = t.y + node.height / 2; - } - }); - - forEach/* default */.A(g.nodes(), function (v) { - if (g.node(v).dummy === 'border') { - g.removeNode(v); - } - }); -} - -function removeSelfEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - if (e.v === e.w) { - var node = g.node(e.v); - if (!node.selfEdges) { - node.selfEdges = []; - } - node.selfEdges.push({ e: e, label: g.edge(e) }); - g.removeEdge(e); - } - }); -} - -function insertSelfEdges(g) { - var layers = buildLayerMatrix(g); - forEach/* default */.A(layers, function (layer) { - var orderShift = 0; - forEach/* default */.A(layer, function (v, i) { - var node = g.node(v); - node.order = i + orderShift; - forEach/* default */.A(node.selfEdges, function (selfEdge) { - addDummyNode( - g, - 'selfedge', - { - width: selfEdge.label.width, - height: selfEdge.label.height, - rank: node.rank, - order: i + ++orderShift, - e: selfEdge.e, - label: selfEdge.label, - }, - '_se' - ); - }); - delete node.selfEdges; - }); - }); -} - -function positionSelfEdges(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'selfedge') { - var selfNode = g.node(node.e.v); - var x = selfNode.x + selfNode.width / 2; - var y = selfNode.y; - var dx = node.x - x; - var dy = selfNode.height / 2; - g.setEdge(node.e, node.label); - g.removeNode(v); - node.label.points = [ - { x: x + (2 * dx) / 3, y: y - dy }, - { x: x + (5 * dx) / 6, y: y - dy }, - { x: x + dx, y: y }, - { x: x + (5 * dx) / 6, y: y + dy }, - { x: x + (2 * dx) / 3, y: y + dy }, - ]; - node.label.x = node.x; - node.label.y = node.y; - } - }); -} - -function selectNumberAttrs(obj, attrs) { - return lodash_es_mapValues(pick/* default */.A(obj, attrs), Number); -} - -function canonicalize(attrs) { - var newAttrs = {}; - forEach/* default */.A(attrs, function (v, k) { - newAttrs[k.toLowerCase()] = v; - }); - return newAttrs; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js - - - - - - - - -/***/ }), - -/***/ 73046: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - T: () => (/* binding */ Graph) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js -var isFunction = __webpack_require__(89610); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js -var isEmpty = __webpack_require__(66401); -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -/* harmony default export */ const _baseIsNaN = (baseIsNaN); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -/* harmony default export */ const _strictIndexOf = (strictIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js - - - - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? _strictIndexOf(array, value, fromIndex) - : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); -} - -/* harmony default export */ const _baseIndexOf = (baseIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js - - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && _baseIndexOf(array, value, 0) > -1; -} - -/* harmony default export */ const _arrayIncludes = (arrayIncludes); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js -var _Set = __webpack_require__(39857); -;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js -/** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ -function noop() { - // No operation performed. -} - -/* harmony default export */ const lodash_es_noop = (noop); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { - return new _Set/* default */.A(values); -}; - -/* harmony default export */ const _createSet = (createSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js - - - - - - - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = _arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = _arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : _createSet(array); - if (set) { - return (0,_setToArray/* default */.A)(set); - } - isCommon = false; - includes = _cacheHas/* default */.A; - seen = new _SetCache/* default */.A; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -/* harmony default export */ const _baseUniq = (baseUniq); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js -var isArrayLikeObject = __webpack_require__(53533); -;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js - - - - - -/** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ -var union = (0,_baseRest/* default */.A)(function(arrays) { - return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); -}); - -/* harmony default export */ const lodash_es_union = (union); - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js - - -var DEFAULT_EDGE_NAME = '\x00'; -var GRAPH_NODE = '\x00'; -var EDGE_KEY_DELIM = '\x01'; - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. -class Graph { - constructor(opts = {}) { - this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; - this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; - this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; - - // Label for the graph itself - this._label = undefined; - - // Defaults to be set when creating a new node - this._defaultNodeLabelFn = constant/* default */.A(undefined); - - // Defaults to be set when creating a new edge - this._defaultEdgeLabelFn = constant/* default */.A(undefined); - - // v -> label - this._nodes = {}; - - if (this._isCompound) { - // v -> parent - this._parent = {}; - - // v -> children - this._children = {}; - this._children[GRAPH_NODE] = {}; - } - - // v -> edgeObj - this._in = {}; - - // u -> v -> Number - this._preds = {}; - - // v -> edgeObj - this._out = {}; - - // v -> w -> Number - this._sucs = {}; - - // e -> edgeObj - this._edgeObjs = {}; - - // e -> label - this._edgeLabels = {}; - } - /* === Graph functions ========= */ - isDirected() { - return this._isDirected; - } - isMultigraph() { - return this._isMultigraph; - } - isCompound() { - return this._isCompound; - } - setGraph(label) { - this._label = label; - return this; - } - graph() { - return this._label; - } - /* === Node functions ========== */ - setDefaultNodeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultNodeLabelFn = newDefault; - return this; - } - nodeCount() { - return this._nodeCount; - } - nodes() { - return keys/* default */.A(this._nodes); - } - sources() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._in[v]); - }); - } - sinks() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._out[v]); - }); - } - setNodes(vs, value) { - var args = arguments; - var self = this; - forEach/* default */.A(vs, function (v) { - if (args.length > 1) { - self.setNode(v, value); - } else { - self.setNode(v); - } - }); - return this; - } - setNode(v, value) { - if (has/* default */.A(this._nodes, v)) { - if (arguments.length > 1) { - this._nodes[v] = value; - } - return this; - } - - // @ts-expect-error - this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); - if (this._isCompound) { - this._parent[v] = GRAPH_NODE; - this._children[v] = {}; - this._children[GRAPH_NODE][v] = true; - } - this._in[v] = {}; - this._preds[v] = {}; - this._out[v] = {}; - this._sucs[v] = {}; - ++this._nodeCount; - return this; - } - node(v) { - return this._nodes[v]; - } - hasNode(v) { - return has/* default */.A(this._nodes, v); - } - removeNode(v) { - var self = this; - if (has/* default */.A(this._nodes, v)) { - var removeEdge = function (e) { - self.removeEdge(self._edgeObjs[e]); - }; - delete this._nodes[v]; - if (this._isCompound) { - this._removeFromParentsChildList(v); - delete this._parent[v]; - forEach/* default */.A(this.children(v), function (child) { - self.setParent(child); - }); - delete this._children[v]; - } - forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); - delete this._in[v]; - delete this._preds[v]; - forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); - delete this._out[v]; - delete this._sucs[v]; - --this._nodeCount; - } - return this; - } - setParent(v, parent) { - if (!this._isCompound) { - throw new Error('Cannot set parent in a non-compound graph'); - } - - if (isUndefined/* default */.A(parent)) { - parent = GRAPH_NODE; - } else { - // Coerce parent to string - parent += ''; - for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { - if (ancestor === v) { - throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); - } - } - - this.setNode(parent); - } - - this.setNode(v); - this._removeFromParentsChildList(v); - this._parent[v] = parent; - this._children[parent][v] = true; - return this; - } - _removeFromParentsChildList(v) { - delete this._children[this._parent[v]][v]; - } - parent(v) { - if (this._isCompound) { - var parent = this._parent[v]; - if (parent !== GRAPH_NODE) { - return parent; - } - } - } - children(v) { - if (isUndefined/* default */.A(v)) { - v = GRAPH_NODE; - } - - if (this._isCompound) { - var children = this._children[v]; - if (children) { - return keys/* default */.A(children); - } - } else if (v === GRAPH_NODE) { - return this.nodes(); - } else if (this.hasNode(v)) { - return []; - } - } - predecessors(v) { - var predsV = this._preds[v]; - if (predsV) { - return keys/* default */.A(predsV); - } - } - successors(v) { - var sucsV = this._sucs[v]; - if (sucsV) { - return keys/* default */.A(sucsV); - } - } - neighbors(v) { - var preds = this.predecessors(v); - if (preds) { - return lodash_es_union(preds, this.successors(v)); - } - } - isLeaf(v) { - var neighbors; - if (this.isDirected()) { - neighbors = this.successors(v); - } else { - neighbors = this.neighbors(v); - } - return neighbors.length === 0; - } - filterNodes(filter) { - // @ts-expect-error - var copy = new this.constructor({ - directed: this._isDirected, - multigraph: this._isMultigraph, - compound: this._isCompound, - }); - - copy.setGraph(this.graph()); - - var self = this; - forEach/* default */.A(this._nodes, function (value, v) { - if (filter(v)) { - copy.setNode(v, value); - } - }); - - forEach/* default */.A(this._edgeObjs, function (e) { - // @ts-expect-error - if (copy.hasNode(e.v) && copy.hasNode(e.w)) { - copy.setEdge(e, self.edge(e)); - } - }); - - var parents = {}; - function findParent(v) { - var parent = self.parent(v); - if (parent === undefined || copy.hasNode(parent)) { - parents[v] = parent; - return parent; - } else if (parent in parents) { - return parents[parent]; - } else { - return findParent(parent); - } - } - - if (this._isCompound) { - forEach/* default */.A(copy.nodes(), function (v) { - copy.setParent(v, findParent(v)); - }); - } - - return copy; - } - /* === Edge functions ========== */ - setDefaultEdgeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultEdgeLabelFn = newDefault; - return this; - } - edgeCount() { - return this._edgeCount; - } - edges() { - return values/* default */.A(this._edgeObjs); - } - setPath(vs, value) { - var self = this; - var args = arguments; - reduce/* default */.A(vs, function (v, w) { - if (args.length > 1) { - self.setEdge(v, w, value); - } else { - self.setEdge(v, w); - } - return w; - }); - return this; - } - /* - * setEdge(v, w, [value, [name]]) - * setEdge({ v, w, [name] }, [value]) - */ - setEdge() { - var v, w, name, value; - var valueSpecified = false; - var arg0 = arguments[0]; - - if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { - v = arg0.v; - w = arg0.w; - name = arg0.name; - if (arguments.length === 2) { - value = arguments[1]; - valueSpecified = true; - } - } else { - v = arg0; - w = arguments[1]; - name = arguments[3]; - if (arguments.length > 2) { - value = arguments[2]; - valueSpecified = true; - } - } - - v = '' + v; - w = '' + w; - if (!isUndefined/* default */.A(name)) { - name = '' + name; - } - - var e = edgeArgsToId(this._isDirected, v, w, name); - if (has/* default */.A(this._edgeLabels, e)) { - if (valueSpecified) { - this._edgeLabels[e] = value; - } - return this; - } - - if (!isUndefined/* default */.A(name) && !this._isMultigraph) { - throw new Error('Cannot set a named edge when isMultigraph = false'); - } - - // It didn't exist, so we need to create it. - // First ensure the nodes exist. - this.setNode(v); - this.setNode(w); - - // @ts-expect-error - this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); - - var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); - // Ensure we add undirected edges in a consistent way. - v = edgeObj.v; - w = edgeObj.w; - - Object.freeze(edgeObj); - this._edgeObjs[e] = edgeObj; - incrementOrInitEntry(this._preds[w], v); - incrementOrInitEntry(this._sucs[v], w); - this._in[w][e] = edgeObj; - this._out[v][e] = edgeObj; - this._edgeCount++; - return this; - } - edge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return this._edgeLabels[e]; - } - hasEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return has/* default */.A(this._edgeLabels, e); - } - removeEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - var edge = this._edgeObjs[e]; - if (edge) { - v = edge.v; - w = edge.w; - delete this._edgeLabels[e]; - delete this._edgeObjs[e]; - decrementOrRemoveEntry(this._preds[w], v); - decrementOrRemoveEntry(this._sucs[v], w); - delete this._in[w][e]; - delete this._out[v][e]; - this._edgeCount--; - } - return this; - } - inEdges(v, u) { - var inV = this._in[v]; - if (inV) { - var edges = values/* default */.A(inV); - if (!u) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.v === u; - }); - } - } - outEdges(v, w) { - var outV = this._out[v]; - if (outV) { - var edges = values/* default */.A(outV); - if (!w) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.w === w; - }); - } - } - nodeEdges(v, w) { - var inEdges = this.inEdges(v, w); - if (inEdges) { - return inEdges.concat(this.outEdges(v, w)); - } - } -} - -/* Number of nodes in the graph. Should only be changed by the implementation. */ -Graph.prototype._nodeCount = 0; - -/* Number of edges in the graph. Should only be changed by the implementation. */ -Graph.prototype._edgeCount = 0; - -function incrementOrInitEntry(map, k) { - if (map[k]) { - map[k]++; - } else { - map[k] = 1; - } -} - -function decrementOrRemoveEntry(map, k) { - if (!--map[k]) { - delete map[k]; - } -} - -function edgeArgsToId(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); -} - -function edgeArgsToObj(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - var edgeObj = { v: v, w: w }; - if (name) { - edgeObj.name = name; - } - return edgeObj; -} - -function edgeObjToId(isDirected, edgeObj) { - return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); -} - - -/***/ }), - -/***/ 697: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) -/* harmony export */ }); -/* unused harmony export version */ -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); -// Includes only the "core" of graphlib - - - -const version = '2.1.9-pre'; - - - - -/***/ }), - -/***/ 14075: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ M: () => (/* binding */ write) -/* harmony export */ }); -/* unused harmony export read */ -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69592); -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(50053); -/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74722); -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); - - - - - -function write(g) { - var json = { - options: { - directed: g.isDirected(), - multigraph: g.isMultigraph(), - compound: g.isCompound(), - }, - nodes: writeNodes(g), - edges: writeEdges(g), - }; - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(g.graph())) { - json.value = lodash_es__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A(g.graph()); - } - return json; -} - -function writeNodes(g) { - return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A(g.nodes(), function (v) { - var nodeValue = g.node(v); - var parent = g.parent(v); - var node = { v: v }; - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(nodeValue)) { - node.value = nodeValue; - } - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(parent)) { - node.parent = parent; - } - return node; - }); -} - -function writeEdges(g) { - return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A(g.edges(), function (e) { - var edgeValue = g.edge(e); - var edge = { v: e.v, w: e.w }; - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(e.name)) { - edge.name = e.name; - } - if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A(edgeValue)) { - edge.value = edgeValue; - } - return edge; - }); -} - -function read(json) { - var g = new Graph(json.options).setGraph(json.value); - _.each(json.nodes, function (entry) { - g.setNode(entry.v, entry.value); - if (entry.parent) { - g.setParent(entry.v, entry.parent); - } - }); - _.each(json.edges, function (entry) { - g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); - }); - return g; -} - - -/***/ }), - -/***/ 75937: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72453); -/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74886); -/* IMPORT */ - - -/* MAIN */ -const channel = (color, channel) => { - return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.lang.round(_color_index_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.parse(color)[channel]); -}; -/* EXPORT */ -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (channel); - - -/***/ }), - -/***/ 62062: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _SetCache) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules -var _MapCache = __webpack_require__(29471); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -/* harmony default export */ const _setCacheAdd = (setCacheAdd); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -/* harmony default export */ const _setCacheHas = (setCacheHas); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js - - - - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new _MapCache/* default */.A; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; -SetCache.prototype.has = _setCacheHas; - -/* harmony default export */ const _SetCache = (SetCache); - - -/***/ }), - -/***/ 72641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); - - -/***/ }), - -/***/ 2634: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); - - -/***/ }), - -/***/ 45572: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); - - -/***/ }), - -/***/ 76912: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); - - -/***/ }), - -/***/ 91641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseClone) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js -var _arrayEach = __webpack_require__(72641); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js -var _copyObject = __webpack_require__(22031); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js - - - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssign = (baseAssign); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js - - - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssignIn = (baseAssignIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js -var _cloneBuffer = __webpack_require__(80154); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js -var _copyArray = __webpack_require__(39759); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js -var _getSymbols = __webpack_require__(14792); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js - - - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); -} - -/* harmony default export */ const _copySymbols = (copySymbols); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js -var _getPrototype = __webpack_require__(15647); -// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js -var stubArray = __webpack_require__(13153); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js - - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { - var result = []; - while (object) { - (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); - object = (0,_getPrototype/* default */.A)(object); - } - return result; -}; - -/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js - - - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); -} - -/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js -var _baseGetAllKeys = __webpack_require__(33831); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js - - - - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); -} - -/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/* harmony default export */ const _initCloneArray = (initCloneArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js -var _cloneArrayBuffer = __webpack_require__(90565); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js - - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -/* harmony default export */ const _cloneDataView = (cloneDataView); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -/* harmony default export */ const _cloneRegExp = (cloneRegExp); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js - - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -/* harmony default export */ const _cloneSymbol = (cloneSymbol); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js -var _cloneTypedArray = __webpack_require__(1801); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js - - - - - - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return (0,_cloneArrayBuffer/* default */.A)(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return _cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return (0,_cloneTypedArray/* default */.A)(object, isDeep); - - case mapTag: - return new Ctor; - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return _cloneRegExp(object); - - case setTag: - return new Ctor; - - case symbolTag: - return _cloneSymbol(object); - } -} - -/* harmony default export */ const _initCloneByTag = (initCloneByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules -var _initCloneObject = __webpack_require__(18598); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js - - - -/** `Object#toString` result references. */ -var _baseIsMap_mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; -} - -/* harmony default export */ const _baseIsMap = (baseIsMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js -var _nodeUtil = __webpack_require__(64841); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js - - - - -/* Node.js helper references. */ -var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; - -/* harmony default export */ const lodash_es_isMap = (isMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js - - - -/** `Object#toString` result references. */ -var _baseIsSet_setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; -} - -/* harmony default export */ const _baseIsSet = (baseIsSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js - - - - -/* Node.js helper references. */ -var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; - -/* harmony default export */ const lodash_es_isSet = (isSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js - - - - - - - - - - - - - - - - - - - - - - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - _baseClone_boolTag = '[object Boolean]', - _baseClone_dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - _baseClone_mapTag = '[object Map]', - _baseClone_numberTag = '[object Number]', - objectTag = '[object Object]', - _baseClone_regexpTag = '[object RegExp]', - _baseClone_setTag = '[object Set]', - _baseClone_stringTag = '[object String]', - _baseClone_symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var _baseClone_arrayBufferTag = '[object ArrayBuffer]', - _baseClone_dataViewTag = '[object DataView]', - _baseClone_float32Tag = '[object Float32Array]', - _baseClone_float64Tag = '[object Float64Array]', - _baseClone_int8Tag = '[object Int8Array]', - _baseClone_int16Tag = '[object Int16Array]', - _baseClone_int32Tag = '[object Int32Array]', - _baseClone_uint8Tag = '[object Uint8Array]', - _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', - _baseClone_uint16Tag = '[object Uint16Array]', - _baseClone_uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = -cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = -cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = -cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = -cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = -cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = -cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = -cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = -cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = -cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!(0,isObject/* default */.A)(value)) { - return value; - } - var isArr = (0,isArray/* default */.A)(value); - if (isArr) { - result = _initCloneArray(value); - if (!isDeep) { - return (0,_copyArray/* default */.A)(value, result); - } - } else { - var tag = (0,_getTag/* default */.A)(value), - isFunc = tag == funcTag || tag == genTag; - - if ((0,isBuffer/* default */.A)(value)) { - return (0,_cloneBuffer/* default */.A)(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); - if (!isDeep) { - return isFlat - ? _copySymbolsIn(value, _baseAssignIn(result, value)) - : _copySymbols(value, _baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = _initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new _Stack/* default */.A); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (lodash_es_isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (lodash_es_isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } - - var keysFunc = isFull - ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) - : (isFlat ? keysIn/* default */.A : keys/* default */.A); - - var props = isArr ? undefined : keysFunc(value); - (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -/* harmony default export */ const _baseClone = (baseClone); - - -/***/ }), - -/***/ 6240: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseEach) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js - - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!(0,isArrayLike/* default */.A)(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -/* harmony default export */ const _createBaseEach = (createBaseEach); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js - - - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = _createBaseEach(_baseForOwn/* default */.A); - -/* harmony default export */ const _baseEach = (baseEach); - - -/***/ }), - -/***/ 25707: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); - - -/***/ }), - -/***/ 13588: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseFlatten) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules -var isArguments = __webpack_require__(52274); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js - - - - -/** Built-in value references. */ -var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -/* harmony default export */ const _isFlattenable = (isFlattenable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js - - - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = _isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - (0,_arrayPush/* default */.A)(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -/* harmony default export */ const _baseFlatten = (baseFlatten); - - -/***/ }), - -/***/ 79841: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); - - -/***/ }), - -/***/ 66318: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); - - -/***/ }), - -/***/ 33831: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); - - -/***/ }), - -/***/ 49574: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseIteratee) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arraySome = (arraySome); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js - - - - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!_arraySome(other, function(othValue, othIndex) { - if (!(0,_cacheHas/* default */.A)(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalArrays = (equalArrays); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js -var _Uint8Array = __webpack_require__(43988); -// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js -var eq = __webpack_require__(66984); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -/* harmony default export */ const _mapToArray = (mapToArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _equalByTag_COMPARE_PARTIAL_FLAG = 1, - _equalByTag_COMPARE_UNORDERED_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return (0,eq/* default */.A)(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = _mapToArray; - - case setTag: - var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; - convert || (convert = _setToArray/* default */.A); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -/* harmony default export */ const _equalByTag = (equalByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js - - -/** Used to compose bitmasks for value comparisons. */ -var _equalObjects_COMPARE_PARTIAL_FLAG = 1; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, - objProps = (0,_getAllKeys/* default */.A)(object), - objLength = objProps.length, - othProps = (0,_getAllKeys/* default */.A)(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalObjects = (equalObjects); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules -var isTypedArray = __webpack_require__(33858); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js - - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var _baseIsEqualDeep_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = (0,isArray/* default */.A)(object), - othIsArr = (0,isArray/* default */.A)(other), - objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), - othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && (0,isBuffer/* default */.A)(object)) { - if (!(0,isBuffer/* default */.A)(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new _Stack/* default */.A); - return (objIsArr || (0,isTypedArray/* default */.A)(object)) - ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new _Stack/* default */.A); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new _Stack/* default */.A); - return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js - - - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { - return value !== value && other !== other; - } - return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -/* harmony default export */ const _baseIsEqual = (baseIsEqual); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, - _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new _Stack/* default */.A; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -/* harmony default export */ const _baseIsMatch = (baseIsMatch); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js - - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !(0,isObject/* default */.A)(value); -} - -/* harmony default export */ const _isStrictComparable = (isStrictComparable); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js - - - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = (0,keys/* default */.A)(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, _isStrictComparable(value)]; - } - return result; -} - -/* harmony default export */ const _getMatchData = (getMatchData); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js - - - - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = _getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return _matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || _baseIsMatch(object, source, matchData); - }; -} - -/* harmony default export */ const _baseMatches = (baseMatches); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js - - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); - return result === undefined ? defaultValue : result; -} - -/* harmony default export */ const lodash_es_get = (get); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, - _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { - return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); - } - return function(object) { - var objValue = lodash_es_get(object, path); - return (objValue === undefined && objValue === srcValue) - ? (0,hasIn/* default */.A)(object, path) - : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); - }; -} - -/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js - - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return (0,_baseGet/* default */.A)(object, path); - }; -} - -/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js - - - - - -/** - * Creates a function that returns the value at `path` of a given object. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - * @example - * - * var objects = [ - * { 'a': { 'b': 2 } }, - * { 'a': { 'b': 1 } } - * ]; - * - * _.map(objects, _.property('a.b')); - * // => [2, 1] - * - * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); - * // => [1, 2] - */ -function property(path) { - return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); -} - -/* harmony default export */ const lodash_es_property = (property); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js - - - - - - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity/* default */.A; - } - if (typeof value == 'object') { - return (0,isArray/* default */.A)(value) - ? _baseMatchesProperty(value[0], value[1]) - : _baseMatches(value); - } - return lodash_es_property(value); -} - -/* harmony default export */ const _baseIteratee = (baseIteratee); - - -/***/ }), - -/***/ 52568: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6240); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? Array(collection.length) : []; - - (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); - - -/***/ }), - -/***/ 70805: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); - - -/***/ }), - -/***/ 64099: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); - - -/***/ }), - -/***/ 99922: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); - - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); - - -/***/ }), - -/***/ 7819: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _castPath) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js -var memoize = __webpack_require__(46632); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js - - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = (0,memoize/* default */.A)(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -/* harmony default export */ const _memoizeCapped = (memoizeCapped); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js - - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = _memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/* harmony default export */ const _stringToPath = (stringToPath); - -// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules -var lodash_es_toString = __webpack_require__(28894); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js - - - - - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if ((0,isArray/* default */.A)(value)) { - return value; - } - return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); -} - -/* harmony default export */ const _castPath = (castPath); - - -/***/ }), - -/***/ 19042: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); -/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); - - -/***/ }), - -/***/ 14792: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); -/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); - - -/***/ }), - -/***/ 85054: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); -/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); -/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - - - - - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && - ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); - - -/***/ }), - -/***/ 86586: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); - - - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); - - -/***/ }), - -/***/ 29959: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); - - -/***/ }), - -/***/ 30901: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); - - -/***/ }), - -/***/ 50053: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(91641); - - -/** Used to compose bitmasks for cloning. */ -var CLONE_SYMBOLS_FLAG = 4; - -/** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ -function clone(value) { - return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value, CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone); - - -/***/ }), - -/***/ 23068: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24326); -/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66984); -/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832); -/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55615); - - - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); - - -/***/ }), - -/***/ 11662: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_filter) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js -var _arrayFilter = __webpack_require__(2634); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js - - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - (0,_baseEach/* default */.A)(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -/* harmony default export */ const _baseFilter = (baseFilter); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js - - - - - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ -function filter(collection, predicate) { - var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; - return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); -} - -/* harmony default export */ const lodash_es_filter = (filter); - - -/***/ }), - -/***/ 34098: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13588); - - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(array, 1) : []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); - - -/***/ }), - -/***/ 8058: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); -/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); - - -/***/ }), - -/***/ 48585: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_has) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && _baseHas_hasOwnProperty.call(object, key); -} - -/* harmony default export */ const _baseHas = (baseHas); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js - - - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); -} - -/* harmony default export */ const lodash_es_has = (has); - - -/***/ }), - -/***/ 39188: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_hasIn) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -/* harmony default export */ const _baseHasIn = (baseHasIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js - - - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); -} - -/* harmony default export */ const lodash_es_hasIn = (hasIn); - - -/***/ }), - -/***/ 61882: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); -/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); - - - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); - - -/***/ }), - -/***/ 69592: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); - - -/***/ }), - -/***/ 27422: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); -/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); - - -/***/ }), - -/***/ 74722: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45572); -/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574); -/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52568); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ -function map(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee, 3)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); - - -/***/ }), - -/***/ 81942: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_pick) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules -var _castPath = __webpack_require__(7819); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js -var _isIndex = __webpack_require__(25353); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js - - - - - - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!(0,isObject/* default */.A)(object)) { - return object; - } - path = (0,_castPath/* default */.A)(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = (0,_toKey/* default */.A)(path[index]), - newValue = value; - - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = (0,isObject/* default */.A)(objValue) - ? objValue - : ((0,_isIndex/* default */.A)(path[index + 1]) ? [] : {}); - } - } - (0,_assignValue/* default */.A)(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -/* harmony default export */ const _baseSet = (baseSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js - - - - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = (0,_baseGet/* default */.A)(object, path); - - if (predicate(value, path)) { - _baseSet(result, (0,_castPath/* default */.A)(path, object), value); - } - } - return result; -} - -/* harmony default export */ const _basePickBy = (basePickBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js - - - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, paths) { - return _basePickBy(object, paths, function(value, path) { - return (0,hasIn/* default */.A)(object, path); - }); -} - -/* harmony default export */ const _basePick = (basePick); - -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules -var _overRest = __webpack_require__(76875); -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules -var _setToString = __webpack_require__(67525); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js - - - - -/** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -function flatRest(func) { - return (0,_setToString/* default */.A)((0,_overRest/* default */.A)(func, undefined, flatten/* default */.A), func + ''); -} - -/* harmony default export */ const _flatRest = (flatRest); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js - - - -/** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ -var pick = _flatRest(function(object, paths) { - return object == null ? {} : _basePick(object, paths); -}); - -/* harmony default export */ const lodash_es_pick = (pick); - - -/***/ }), - -/***/ 91395: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_range) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -/* harmony default export */ const _baseRange = (baseRange); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js - - - - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.A)(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = (0,toFinite/* default */.A)(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = (0,toFinite/* default */.A)(end); - } - step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.A)(step); - return _baseRange(start, end, step, fromRight); - }; -} - -/* harmony default export */ const _createRange = (createRange); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js - - -/** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ -var range = _createRange(); - -/* harmony default export */ const lodash_es_range = (range); - - -/***/ }), - -/***/ 89463: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_reduce) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -/* harmony default export */ const _arrayReduce = (arrayReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -/* harmony default export */ const _baseReduce = (baseReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js - - - - - - -/** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ -function reduce(collection, iteratee, accumulator) { - var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, - initAccum = arguments.length < 3; - - return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); -} - -/* harmony default export */ const lodash_es_reduce = (reduce); - - -/***/ }), - -/***/ 13153: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ -function stubArray() { - return []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); - - -/***/ }), - -/***/ 74342: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toFinite) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js - - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/* harmony default export */ const _baseTrim = (baseTrim); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js - - - - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if ((0,isSymbol/* default */.A)(value)) { - return NAN; - } - if ((0,isObject/* default */.A)(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = (0,isObject/* default */.A)(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = _baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/* harmony default export */ const lodash_es_toNumber = (toNumber); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = lodash_es_toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/* harmony default export */ const lodash_es_toFinite = (toFinite); - - -/***/ }), - -/***/ 28894: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toString) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js - - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if ((0,isArray/* default */.A)(value)) { - // Recursively convert values (susceptible to call stack limits). - return (0,_arrayMap/* default */.A)(value, baseToString) + ''; - } - if ((0,isSymbol/* default */.A)(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const _baseToString = (baseToString); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js - - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString_toString(value) { - return value == null ? '' : _baseToString(value); -} - -/* harmony default export */ const lodash_es_toString = (toString_toString); - - -/***/ }), - -/***/ 5664: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28894); - - -/** Used to generate unique IDs. */ -var idCounter = 0; - -/** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ -function uniqueId(prefix) { - var id = ++idCounter; - return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(prefix) + id; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); - - -/***/ }), - -/***/ 38207: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_values) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js - - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return (0,_arrayMap/* default */.A)(props, function(key) { - return object[key]; - }); -} - -/* harmony default export */ const _baseValues = (baseValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js - - - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values(object) { - return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); -} - -/* harmony default export */ const lodash_es_values = (values); - - -/***/ }), - -/***/ 18897: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - a: () => (/* binding */ createText), - c: () => (/* binding */ computeDimensionOfText) -}); - -// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -var constructs_namespaceObject = {}; -__webpack_require__.r(constructs_namespaceObject); -__webpack_require__.d(constructs_namespaceObject, { - attentionMarkers: () => (attentionMarkers), - contentInitial: () => (contentInitial), - disable: () => (disable), - document: () => (constructs_document), - flow: () => (constructs_flow), - flowInitial: () => (flowInitial), - insideSpan: () => (insideSpan), - string: () => (constructs_string), - text: () => (constructs_text) -}); - -// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules -var mermaid_6dc72991 = __webpack_require__(99702); -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js -/** - * @typedef {import('mdast').Root|import('mdast').Content} Node - * - * @typedef Options - * Configuration (optional). - * @property {boolean | null | undefined} [includeImageAlt=true] - * Whether to use `alt` for `image`s. - * @property {boolean | null | undefined} [includeHtml=true] - * Whether to use `value` of HTML. - */ - -/** @type {Options} */ -const emptyOptions = {} - -/** - * Get the text content of a node or list of nodes. - * - * Prefers the node’s plain-text fields, otherwise serializes its children, - * and if the given value is an array, serialize the nodes in it. - * - * @param {unknown} value - * Thing to serialize, typically `Node`. - * @param {Options | null | undefined} [options] - * Configuration (optional). - * @returns {string} - * Serialized `value`. - */ -function lib_toString(value, options) { - const settings = options || emptyOptions - const includeImageAlt = - typeof settings.includeImageAlt === 'boolean' - ? settings.includeImageAlt - : true - const includeHtml = - typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true - - return one(value, includeImageAlt, includeHtml) -} - -/** - * One node or several nodes. - * - * @param {unknown} value - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized node. - */ -function one(value, includeImageAlt, includeHtml) { - if (node(value)) { - if ('value' in value) { - return value.type === 'html' && !includeHtml ? '' : value.value - } - - if (includeImageAlt && 'alt' in value && value.alt) { - return value.alt - } - - if ('children' in value) { - return lib_all(value.children, includeImageAlt, includeHtml) - } - } - - if (Array.isArray(value)) { - return lib_all(value, includeImageAlt, includeHtml) - } - - return '' -} - -/** - * Serialize a list of nodes. - * - * @param {Array<unknown>} values - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized nodes. - */ -function lib_all(values, includeImageAlt, includeHtml) { - /** @type {Array<string>} */ - const result = [] - let index = -1 - - while (++index < values.length) { - result[index] = one(values[index], includeImageAlt, includeHtml) - } - - return result.join('') -} - -/** - * Check if `value` looks like a node. - * - * @param {unknown} value - * Thing. - * @returns {value is Node} - * Whether `value` is a node. - */ -function node(value) { - return Boolean(value && typeof value === 'object') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array<T>} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array<T>} items - * Items to inject into `list`. - * @returns {void} - * Nothing. - */ -function splice(list, start, remove, items) { - const end = list.length - let chunkStart = 0 - /** @type {Array<unknown>} */ - let parameters - - // Make start between zero and `end` (included). - if (start < 0) { - start = -start > end ? 0 : end + start - } else { - start = start > end ? end : start - } - remove = remove > 0 ? remove : 0 - - // No need to chunk the items if there’s only a couple (10k) items. - if (items.length < 10000) { - parameters = Array.from(items) - parameters.unshift(start, remove) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - } else { - // Delete `remove` items starting from `start` - if (remove) list.splice(start, remove) - - // Insert the items in chunks to not cause stack overflows. - while (chunkStart < items.length) { - parameters = items.slice(chunkStart, chunkStart + 10000) - parameters.unshift(start, 0) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - chunkStart += 10000 - start += 10000 - } - } -} - -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array<T>} list - * List to operate on. - * @param {Array<T>} items - * Items to add to `list`. - * @returns {Array<T>} - * Either `list` or `items`. - */ -function push(list, items) { - if (list.length > 0) { - splice(list, list.length, 0, items) - return list - } - return items -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - * @typedef {import('micromark-util-types').Handles} Handles - * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension - * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension - */ - - - -const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty - -/** - * Combine multiple syntax extensions into one. - * - * @param {Array<Extension>} extensions - * List of syntax extensions. - * @returns {NormalizedExtension} - * A single combined extension. - */ -function combineExtensions(extensions) { - /** @type {NormalizedExtension} */ - const all = {} - let index = -1 - - while (++index < extensions.length) { - syntaxExtension(all, extensions[index]) - } - - return all -} - -/** - * Merge `extension` into `all`. - * - * @param {NormalizedExtension} all - * Extension to merge into. - * @param {Extension} extension - * Extension to merge. - * @returns {void} - */ -function syntaxExtension(all, extension) { - /** @type {keyof Extension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - /** @type {Record<string, unknown>} */ - const left = maybe || (all[hook] = {}) - /** @type {Record<string, unknown> | undefined} */ - const right = extension[hook] - /** @type {string} */ - let code - - if (right) { - for (code in right) { - if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] - const value = right[code] - constructs( - // @ts-expect-error Looks like a list. - left[code], - Array.isArray(value) ? value : value ? [value] : [] - ) - } - } - } -} - -/** - * Merge `list` into `existing` (both lists of constructs). - * Mutates `existing`. - * - * @param {Array<unknown>} existing - * @param {Array<unknown>} list - * @returns {void} - */ -function constructs(existing, list) { - let index = -1 - /** @type {Array<unknown>} */ - const before = [] - - while (++index < list.length) { - // @ts-expect-error Looks like an object. - ;(list[index].add === 'after' ? existing : before).push(list[index]) - } - - splice(existing, 0, 0, before) -} - -/** - * Combine multiple HTML extensions into one. - * - * @param {Array<HtmlExtension>} htmlExtensions - * List of HTML extensions. - * @returns {HtmlExtension} - * A single combined HTML extension. - */ -function combineHtmlExtensions(htmlExtensions) { - /** @type {HtmlExtension} */ - const handlers = {} - let index = -1 - - while (++index < htmlExtensions.length) { - htmlExtension(handlers, htmlExtensions[index]) - } - - return handlers -} - -/** - * Merge `extension` into `all`. - * - * @param {HtmlExtension} all - * Extension to merge into. - * @param {HtmlExtension} extension - * Extension to merge. - * @returns {void} - */ -function htmlExtension(all, extension) { - /** @type {keyof HtmlExtension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - const left = maybe || (all[hook] = {}) - const right = extension[hook] - /** @type {keyof Handles} */ - let type - - if (right) { - for (type in right) { - // @ts-expect-error assume document vs regular handler are managed correctly. - left[type] = right[type] - } - } - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js -// This module is generated by `script/`. -// -// CommonMark handles attention (emphasis, strong) markers based on what comes -// before or after them. -// One such difference is if those characters are Unicode punctuation. -// This script is generated from the Unicode data. - -/** - * Regular expression that matches a unicode punctuation character. - */ -const unicodePunctuationRegex = - /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - - -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlpha = regexCheck(/[A-Za-z]/) - -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) - -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) - -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function asciiControl(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code !== null && (code < 32 || code === 127) - ) -} - -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiDigit = regexCheck(/\d/) - -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) - -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) - -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEnding(code) { - return code !== null && code < -2 -} - -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEndingOrSpace(code) { - return code !== null && (code < 0 || code === 32) -} - -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownSpace(code) { - return code === -2 || code === -1 || code === 32 -} - -// Size note: removing ASCII from the regex and using `asciiPunctuation` here -// In fact adds to the bundle size. -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodePunctuation = regexCheck(unicodePunctuationRegex) - -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodeWhitespace = regexCheck(/\s/) - -/** - * Create a code check from a regex. - * - * @param {RegExp} regex - * @returns {(code: Code) => boolean} - */ -function regexCheck(regex) { - return check - - /** - * Check whether a code matches the bound regex. - * - * @param {Code} code - * Character code. - * @returns {boolean} - * Whether the character code matches the bound regex. - */ - function check(code) { - return code !== null && regex.test(String.fromCharCode(code)) - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns - * Start state. - */ -function factorySpace(effects, ok, type, max) { - const limit = max ? max - 1 : Number.POSITIVE_INFINITY - let size = 0 - return start - - /** @type {State} */ - function start(code) { - if (markdownSpace(code)) { - effects.enter(type) - return prefix(code) - } - return ok(code) - } - - /** @type {State} */ - function prefix(code) { - if (markdownSpace(code) && size++ < limit) { - effects.consume(code) - return prefix - } - effects.exit(type) - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - -/** @type {InitialConstruct} */ -const content = { - tokenize: initializeContent -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeContent(effects) { - const contentStart = effects.attempt( - this.parser.constructs.contentInitial, - afterContentStartConstruct, - paragraphInitial - ) - /** @type {Token} */ - let previous - return contentStart - - /** @type {State} */ - function afterContentStartConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, contentStart, 'linePrefix') - } - - /** @type {State} */ - function paragraphInitial(code) { - effects.enter('paragraph') - return lineStart(code) - } - - /** @type {State} */ - function lineStart(code) { - const token = effects.enter('chunkText', { - contentType: 'text', - previous - }) - if (previous) { - previous.next = token - } - previous = token - return data(code) - } - - /** @type {State} */ - function data(code) { - if (code === null) { - effects.exit('chunkText') - effects.exit('paragraph') - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - effects.exit('chunkText') - return lineStart - } - - // Data. - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - -/** - * @typedef {[Construct, ContainerState]} StackItem - */ - - - - -/** @type {InitialConstruct} */ -const document_document = { - tokenize: initializeDocument -} - -/** @type {Construct} */ -const containerConstruct = { - tokenize: tokenizeContainer -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeDocument(effects) { - const self = this - /** @type {Array<StackItem>} */ - const stack = [] - let continued = 0 - /** @type {TokenizeContext | undefined} */ - let childFlow - /** @type {Token | undefined} */ - let childToken - /** @type {number} */ - let lineStartOffset - return start - - /** @type {State} */ - function start(code) { - // First we iterate through the open blocks, starting with the root - // document, and descending through last children down to the last open - // block. - // Each block imposes a condition that the line must satisfy if the block is - // to remain open. - // For example, a block quote requires a `>` character. - // A paragraph requires a non-blank line. - // In this phase we may match all or just some of the open blocks. - // But we cannot close unmatched blocks yet, because we may have a lazy - // continuation line. - if (continued < stack.length) { - const item = stack[continued] - self.containerState = item[1] - return effects.attempt( - item[0].continuation, - documentContinue, - checkNewContainers - )(code) - } - - // Done. - return checkNewContainers(code) - } - - /** @type {State} */ - function documentContinue(code) { - continued++ - - // Note: this field is called `_closeFlow` but it also closes containers. - // Perhaps a good idea to rename it but it’s already used in the wild by - // extensions. - if (self.containerState._closeFlow) { - self.containerState._closeFlow = undefined - if (childFlow) { - closeFlow() - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when dealing with lazy lines in `writeToChild`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {Point | undefined} */ - let point - - // Find the flow chunk. - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - point = self.events[indexBeforeFlow][1].end - break - } - } - exitContainers(continued) - - // Fix positions. - let index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - return checkNewContainers(code) - } - return start(code) - } - - /** @type {State} */ - function checkNewContainers(code) { - // Next, after consuming the continuation markers for existing blocks, we - // look for new block starts (e.g. `>` for a block quote). - // If we encounter a new block start, we close any blocks unmatched in - // step 1 before creating the new block as a child of the last matched - // block. - if (continued === stack.length) { - // No need to `check` whether there’s a container, of `exitContainers` - // would be moot. - // We can instead immediately `attempt` to parse one. - if (!childFlow) { - return documentContinued(code) - } - - // If we have concrete content, such as block HTML or fenced code, - // we can’t have containers “pierce” into them, so we can immediately - // start. - if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { - return flowStart(code) - } - - // If we do have flow, it could still be a blank line, - // but we’d be interrupting it w/ a new container if there’s a current - // construct. - // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer - // needed in micromark-extension-gfm-table@1.0.6). - self.interrupt = Boolean( - childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack - ) - } - - // Check if there is a new container. - self.containerState = {} - return effects.check( - containerConstruct, - thereIsANewContainer, - thereIsNoNewContainer - )(code) - } - - /** @type {State} */ - function thereIsANewContainer(code) { - if (childFlow) closeFlow() - exitContainers(continued) - return documentContinued(code) - } - - /** @type {State} */ - function thereIsNoNewContainer(code) { - self.parser.lazy[self.now().line] = continued !== stack.length - lineStartOffset = self.now().offset - return flowStart(code) - } - - /** @type {State} */ - function documentContinued(code) { - // Try new containers. - self.containerState = {} - return effects.attempt( - containerConstruct, - containerContinue, - flowStart - )(code) - } - - /** @type {State} */ - function containerContinue(code) { - continued++ - stack.push([self.currentConstruct, self.containerState]) - // Try another. - return documentContinued(code) - } - - /** @type {State} */ - function flowStart(code) { - if (code === null) { - if (childFlow) closeFlow() - exitContainers(0) - effects.consume(code) - return - } - childFlow = childFlow || self.parser.flow(self.now()) - effects.enter('chunkFlow', { - contentType: 'flow', - previous: childToken, - _tokenizer: childFlow - }) - return flowContinue(code) - } - - /** @type {State} */ - function flowContinue(code) { - if (code === null) { - writeToChild(effects.exit('chunkFlow'), true) - exitContainers(0) - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - writeToChild(effects.exit('chunkFlow')) - // Get ready for the next line. - continued = 0 - self.interrupt = undefined - return start - } - effects.consume(code) - return flowContinue - } - - /** - * @param {Token} token - * @param {boolean | undefined} [eof] - * @returns {void} - */ - function writeToChild(token, eof) { - const stream = self.sliceStream(token) - if (eof) stream.push(null) - token.previous = childToken - if (childToken) childToken.next = token - childToken = token - childFlow.defineSkip(token.start) - childFlow.write(stream) - - // Alright, so we just added a lazy line: - // - // ```markdown - // > a - // b. - // - // Or: - // - // > ~~~c - // d - // - // Or: - // - // > | e | - // f - // ``` - // - // The construct in the second example (fenced code) does not accept lazy - // lines, so it marked itself as done at the end of its first line, and - // then the content construct parses `d`. - // Most constructs in markdown match on the first line: if the first line - // forms a construct, a non-lazy line can’t “unmake” it. - // - // The construct in the third example is potentially a GFM table, and - // those are *weird*. - // It *could* be a table, from the first line, if the following line - // matches a condition. - // In this case, that second line is lazy, which “unmakes” the first line - // and turns the whole into one content block. - // - // We’ve now parsed the non-lazy and the lazy line, and can figure out - // whether the lazy line started a new flow block. - // If it did, we exit the current containers between the two flow blocks. - if (self.parser.lazy[token.start.line]) { - let index = childFlow.events.length - while (index--) { - if ( - // The token starts before the line ending… - childFlow.events[index][1].start.offset < lineStartOffset && - // …and either is not ended yet… - (!childFlow.events[index][1].end || - // …or ends after it. - childFlow.events[index][1].end.offset > lineStartOffset) - ) { - // Exit: there’s still something open, which means it’s a lazy line - // part of something. - return - } - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when closing flow in `documentContinue`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {boolean | undefined} */ - let seen - /** @type {Point | undefined} */ - let point - - // Find the previous chunk (the one before the lazy line). - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - if (seen) { - point = self.events[indexBeforeFlow][1].end - break - } - seen = true - } - } - exitContainers(continued) - - // Fix positions. - index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - } - } - - /** - * @param {number} size - * @returns {void} - */ - function exitContainers(size) { - let index = stack.length - - // Exit open containers. - while (index-- > size) { - const entry = stack[index] - self.containerState = entry[1] - entry[0].exit.call(self, effects) - } - stack.length = size - } - function closeFlow() { - childFlow.write([null]) - childToken = undefined - childFlow = undefined - self.containerState._closeFlow = undefined - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContainer(effects, ok, nok) { - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(this.parser.constructs.document, ok, nok), - 'linePrefix', - this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blankLine = { - tokenize: tokenizeBlankLine, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLine(effects, ok, nok) { - return start - - /** - * Start of blank line. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - return markdownSpace(code) - ? factorySpace(effects, after, 'linePrefix')(code) - : after(code) - } - - /** - * At eof/eol, after optional whitespace. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Token} Token - */ - - -/** - * Tokenize subcontent. - * - * @param {Array<Event>} events - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -function subtokenize(events) { - /** @type {Record<string, number>} */ - const jumps = {} - let index = -1 - /** @type {Event} */ - let event - /** @type {number | undefined} */ - let lineIndex - /** @type {number} */ - let otherIndex - /** @type {Event} */ - let otherEvent - /** @type {Array<Event>} */ - let parameters - /** @type {Array<Event>} */ - let subevents - /** @type {boolean | undefined} */ - let more - while (++index < events.length) { - while (index in jumps) { - index = jumps[index] - } - event = events[index] - - // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. - if ( - index && - event[1].type === 'chunkFlow' && - events[index - 1][1].type === 'listItemPrefix' - ) { - subevents = event[1]._tokenizer.events - otherIndex = 0 - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'lineEndingBlank' - ) { - otherIndex += 2 - } - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'content' - ) { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === 'content') { - break - } - if (subevents[otherIndex][1].type === 'chunkText') { - subevents[otherIndex][1]._isInFirstContentOfListItem = true - otherIndex++ - } - } - } - } - - // Enter. - if (event[0] === 'enter') { - if (event[1].contentType) { - Object.assign(jumps, subcontent(events, index)) - index = jumps[index] - more = true - } - } - // Exit. - else if (event[1]._container) { - otherIndex = index - lineIndex = undefined - while (otherIndex--) { - otherEvent = events[otherIndex] - if ( - otherEvent[1].type === 'lineEnding' || - otherEvent[1].type === 'lineEndingBlank' - ) { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - } - otherEvent[1].type = 'lineEnding' - lineIndex = otherIndex - } - } else { - break - } - } - if (lineIndex) { - // Fix position. - event[1].end = Object.assign({}, events[lineIndex][1].start) - - // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index) - parameters.unshift(event) - splice(events, lineIndex, index - lineIndex + 1, parameters) - } - } - } - return !more -} - -/** - * Tokenize embedded tokens. - * - * @param {Array<Event>} events - * @param {number} eventIndex - * @returns {Record<string, number>} - */ -function subcontent(events, eventIndex) { - const token = events[eventIndex][1] - const context = events[eventIndex][2] - let startPosition = eventIndex - 1 - /** @type {Array<number>} */ - const startPositions = [] - const tokenizer = - token._tokenizer || context.parser[token.contentType](token.start) - const childEvents = tokenizer.events - /** @type {Array<[number, number]>} */ - const jumps = [] - /** @type {Record<string, number>} */ - const gaps = {} - /** @type {Array<Chunk>} */ - let stream - /** @type {Token | undefined} */ - let previous - let index = -1 - /** @type {Token | undefined} */ - let current = token - let adjust = 0 - let start = 0 - const breaks = [start] - - // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. - while (current) { - // Find the position of the event for this token. - while (events[++startPosition][1] !== current) { - // Empty. - } - startPositions.push(startPosition) - if (!current._tokenizer) { - stream = context.sliceStream(current) - if (!current.next) { - stream.push(null) - } - if (previous) { - tokenizer.defineSkip(current.start) - } - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true - } - tokenizer.write(stream) - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined - } - } - - // Unravel the next token. - previous = current - current = current.next - } - - // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. - current = token - while (++index < childEvents.length) { - if ( - // Find a void token that includes a break. - childEvents[index][0] === 'exit' && - childEvents[index - 1][0] === 'enter' && - childEvents[index][1].type === childEvents[index - 1][1].type && - childEvents[index][1].start.line !== childEvents[index][1].end.line - ) { - start = index + 1 - breaks.push(start) - // Help GC. - current._tokenizer = undefined - current.previous = undefined - current = current.next - } - } - - // Help GC. - tokenizer.events = [] - - // If there’s one more token (which is the cases for lines that end in an - // EOF), that’s perfect: the last point we found starts it. - // If there isn’t then make sure any remaining content is added to it. - if (current) { - // Help GC. - current._tokenizer = undefined - current.previous = undefined - } else { - breaks.pop() - } - - // Now splice the events from the subtokenizer into the current events, - // moving back to front so that splice indices aren’t affected. - index = breaks.length - while (index--) { - const slice = childEvents.slice(breaks[index], breaks[index + 1]) - const start = startPositions.pop() - jumps.unshift([start, start + slice.length - 1]) - splice(events, start, 2, slice) - } - index = -1 - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] - adjust += jumps[index][1] - jumps[index][0] - 1 - } - return gaps -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** - * No name because it must not be turned off. - * @type {Construct} - */ -const content_content = { - tokenize: tokenizeContent, - resolve: resolveContent -} - -/** @type {Construct} */ -const continuationConstruct = { - tokenize: tokenizeContinuation, - partial: true -} - -/** - * Content is transparent: it’s parsed right now. That way, definitions are also - * parsed right now: before text in paragraphs (specifically, media) are parsed. - * - * @type {Resolver} - */ -function resolveContent(events) { - subtokenize(events) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContent(effects, ok) { - /** @type {Token | undefined} */ - let previous - return chunkStart - - /** - * Before a content chunk. - * - * ```markdown - * > | abc - * ^ - * ``` - * - * @type {State} - */ - function chunkStart(code) { - effects.enter('content') - previous = effects.enter('chunkContent', { - contentType: 'content' - }) - return chunkInside(code) - } - - /** - * In a content chunk. - * - * ```markdown - * > | abc - * ^^^ - * ``` - * - * @type {State} - */ - function chunkInside(code) { - if (code === null) { - return contentEnd(code) - } - - // To do: in `markdown-rs`, each line is parsed on its own, and everything - // is stitched together resolving. - if (markdownLineEnding(code)) { - return effects.check( - continuationConstruct, - contentContinue, - contentEnd - )(code) - } - - // Data. - effects.consume(code) - return chunkInside - } - - /** - * - * - * @type {State} - */ - function contentEnd(code) { - effects.exit('chunkContent') - effects.exit('content') - return ok(code) - } - - /** - * - * - * @type {State} - */ - function contentContinue(code) { - effects.consume(code) - effects.exit('chunkContent') - previous.next = effects.enter('chunkContent', { - contentType: 'content', - previous - }) - previous = previous.next - return chunkInside - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContinuation(effects, ok, nok) { - const self = this - return startLookahead - - /** - * - * - * @type {State} - */ - function startLookahead(code) { - effects.exit('chunkContent') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, prefixed, 'linePrefix') - } - - /** - * - * - * @type {State} - */ - function prefixed(code) { - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - - // Always populated by defaults. - - const tail = self.events[self.events.length - 1] - if ( - !self.parser.constructs.disable.null.includes('codeIndented') && - tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ) { - return ok(code) - } - return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - - -/** @type {InitialConstruct} */ -const flow = { - tokenize: initializeFlow -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeFlow(effects) { - const self = this - const initial = effects.attempt( - // Try to parse a blank line. - blankLine, - atBlankEnding, - // Try to parse initial flow (essentially, only code). - effects.attempt( - this.parser.constructs.flowInitial, - afterConstruct, - factorySpace( - effects, - effects.attempt( - this.parser.constructs.flow, - afterConstruct, - effects.attempt(content_content, afterConstruct) - ), - 'linePrefix' - ) - ) - ) - return initial - - /** @type {State} */ - function atBlankEnding(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEndingBlank') - effects.consume(code) - effects.exit('lineEndingBlank') - self.currentConstruct = undefined - return initial - } - - /** @type {State} */ - function afterConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - self.currentConstruct = undefined - return initial - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -const resolver = { - resolveAll: createResolver() -} -const string = initializeFactory('string') -const text_text = initializeFactory('text') - -/** - * @param {'string' | 'text'} field - * @returns {InitialConstruct} - */ -function initializeFactory(field) { - return { - tokenize: initializeText, - resolveAll: createResolver( - field === 'text' ? resolveAllLineSuffixes : undefined - ) - } - - /** - * @this {TokenizeContext} - * @type {Initializer} - */ - function initializeText(effects) { - const self = this - const constructs = this.parser.constructs[field] - const text = effects.attempt(constructs, start, notText) - return start - - /** @type {State} */ - function start(code) { - return atBreak(code) ? text(code) : notText(code) - } - - /** @type {State} */ - function notText(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('data') - effects.consume(code) - return data - } - - /** @type {State} */ - function data(code) { - if (atBreak(code)) { - effects.exit('data') - return text(code) - } - - // Data. - effects.consume(code) - return data - } - - /** - * @param {Code} code - * @returns {boolean} - */ - function atBreak(code) { - if (code === null) { - return true - } - const list = constructs[code] - let index = -1 - if (list) { - // Always populated by defaults. - - while (++index < list.length) { - const item = list[index] - if (!item.previous || item.previous.call(self, self.previous)) { - return true - } - } - } - return false - } - } -} - -/** - * @param {Resolver | undefined} [extraResolver] - * @returns {Resolver} - */ -function createResolver(extraResolver) { - return resolveAllText - - /** @type {Resolver} */ - function resolveAllText(events, context) { - let index = -1 - /** @type {number | undefined} */ - let enter - - // A rather boring computation (to merge adjacent `data` events) which - // improves mm performance by 29%. - while (++index <= events.length) { - if (enter === undefined) { - if (events[index] && events[index][1].type === 'data') { - enter = index - index++ - } - } else if (!events[index] || events[index][1].type !== 'data') { - // Don’t do anything if there is one data token. - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - index = enter + 2 - } - enter = undefined - } - } - return extraResolver ? extraResolver(events, context) : events - } -} - -/** - * A rather ugly set of instructions which again looks at chunks in the input - * stream. - * The reason to do this here is that it is *much* faster to parse in reverse. - * And that we can’t hook into `null` to split the line suffix before an EOF. - * To do: figure out if we can make this into a clean utility, or even in core. - * As it will be useful for GFMs literal autolink extension (and maybe even - * tables?) - * - * @type {Resolver} - */ -function resolveAllLineSuffixes(events, context) { - let eventIndex = 0 // Skip first. - - while (++eventIndex <= events.length) { - if ( - (eventIndex === events.length || - events[eventIndex][1].type === 'lineEnding') && - events[eventIndex - 1][1].type === 'data' - ) { - const data = events[eventIndex - 1][1] - const chunks = context.sliceStream(data) - let index = chunks.length - let bufferIndex = -1 - let size = 0 - /** @type {boolean | undefined} */ - let tabs - while (index--) { - const chunk = chunks[index] - if (typeof chunk === 'string') { - bufferIndex = chunk.length - while (chunk.charCodeAt(bufferIndex - 1) === 32) { - size++ - bufferIndex-- - } - if (bufferIndex) break - bufferIndex = -1 - } - // Number - else if (chunk === -2) { - tabs = true - size++ - } else if (chunk === -1) { - // Empty - } else { - // Replacement character, exit. - index++ - break - } - } - if (size) { - const token = { - type: - eventIndex === events.length || tabs || size < 2 - ? 'lineSuffix' - : 'hardBreakTrailing', - start: { - line: data.end.line, - column: data.end.column - size, - offset: data.end.offset - size, - _index: data.start._index + index, - _bufferIndex: index - ? bufferIndex - : data.start._bufferIndex + bufferIndex - }, - end: Object.assign({}, data.end) - } - data.end = Object.assign({}, token.start) - if (data.start.offset === data.end.offset) { - Object.assign(data, token) - } else { - events.splice( - eventIndex, - 0, - ['enter', token, context], - ['exit', token, context] - ) - eventIndex += 2 - } - } - eventIndex++ - } - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js -/** - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * Call all `resolveAll`s. - * - * @param {Array<{resolveAll?: Resolver | undefined}>} constructs - * List of constructs, optionally with `resolveAll`s. - * @param {Array<Event>} events - * List of events. - * @param {TokenizeContext} context - * Context used by `tokenize`. - * @returns {Array<Event>} - * Changed events. - */ -function resolveAll(constructs, events, context) { - /** @type {Array<Resolver>} */ - const called = [] - let index = -1 - - while (++index < constructs.length) { - const resolve = constructs[index].resolveAll - - if (resolve && !called.includes(resolve)) { - events = resolve(events, context) - called.push(resolve) - } - } - - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenType} TokenType - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * @callback Restore - * @returns {void} - * - * @typedef Info - * @property {Restore} restore - * @property {number} from - * - * @callback ReturnHandle - * Handle a successful run. - * @param {Construct} construct - * @param {Info} info - * @returns {void} - */ - - - - -/** - * Create a tokenizer. - * Tokenizers deal with one type of data (e.g., containers, flow, text). - * The parser is the object dealing with it all. - * `initialize` works like other constructs, except that only its `tokenize` - * function is used, in which case it doesn’t receive an `ok` or `nok`. - * `from` can be given to set the point before the first character, although - * when further lines are indented, they must be set with `defineSkip`. - * - * @param {ParseContext} parser - * @param {InitialConstruct} initialize - * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] - * @returns {TokenizeContext} - */ -function createTokenizer(parser, initialize, from) { - /** @type {Point} */ - let point = Object.assign( - from - ? Object.assign({}, from) - : { - line: 1, - column: 1, - offset: 0 - }, - { - _index: 0, - _bufferIndex: -1 - } - ) - /** @type {Record<string, number>} */ - const columnStart = {} - /** @type {Array<Construct>} */ - const resolveAllConstructs = [] - /** @type {Array<Chunk>} */ - let chunks = [] - /** @type {Array<Token>} */ - let stack = [] - /** @type {boolean | undefined} */ - let consumed = true - - /** - * Tools used for tokenizing. - * - * @type {Effects} - */ - const effects = { - consume, - enter, - exit, - attempt: constructFactory(onsuccessfulconstruct), - check: constructFactory(onsuccessfulcheck), - interrupt: constructFactory(onsuccessfulcheck, { - interrupt: true - }) - } - - /** - * State and tools for resolving and serializing. - * - * @type {TokenizeContext} - */ - const context = { - previous: null, - code: null, - containerState: {}, - events: [], - parser, - sliceStream, - sliceSerialize, - now, - defineSkip, - write - } - - /** - * The state function. - * - * @type {State | void} - */ - let state = initialize.tokenize.call(context, effects) - - /** - * Track which character we expect to be consumed, to catch bugs. - * - * @type {Code} - */ - let expectedCode - if (initialize.resolveAll) { - resolveAllConstructs.push(initialize) - } - return context - - /** @type {TokenizeContext['write']} */ - function write(slice) { - chunks = push(chunks, slice) - main() - - // Exit if we’re not done, resolve might change stuff. - if (chunks[chunks.length - 1] !== null) { - return [] - } - addResult(initialize, 0) - - // Otherwise, resolve, and exit. - context.events = resolveAll(resolveAllConstructs, context.events, context) - return context.events - } - - // - // Tools. - // - - /** @type {TokenizeContext['sliceSerialize']} */ - function sliceSerialize(token, expandTabs) { - return serializeChunks(sliceStream(token), expandTabs) - } - - /** @type {TokenizeContext['sliceStream']} */ - function sliceStream(token) { - return sliceChunks(chunks, token) - } - - /** @type {TokenizeContext['now']} */ - function now() { - // This is a hot path, so we clone manually instead of `Object.assign({}, point)` - const {line, column, offset, _index, _bufferIndex} = point - return { - line, - column, - offset, - _index, - _bufferIndex - } - } - - /** @type {TokenizeContext['defineSkip']} */ - function defineSkip(value) { - columnStart[value.line] = value.column - accountForPotentialSkip() - } - - // - // State management. - // - - /** - * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by - * `consume`). - * Here is where we walk through the chunks, which either include strings of - * several characters, or numerical character codes. - * The reason to do this in a loop instead of a call is so the stack can - * drain. - * - * @returns {void} - */ - function main() { - /** @type {number} */ - let chunkIndex - while (point._index < chunks.length) { - const chunk = chunks[point._index] - - // If we’re in a buffer chunk, loop through it. - if (typeof chunk === 'string') { - chunkIndex = point._index - if (point._bufferIndex < 0) { - point._bufferIndex = 0 - } - while ( - point._index === chunkIndex && - point._bufferIndex < chunk.length - ) { - go(chunk.charCodeAt(point._bufferIndex)) - } - } else { - go(chunk) - } - } - } - - /** - * Deal with one code. - * - * @param {Code} code - * @returns {void} - */ - function go(code) { - consumed = undefined - expectedCode = code - state = state(code) - } - - /** @type {Effects['consume']} */ - function consume(code) { - if (markdownLineEnding(code)) { - point.line++ - point.column = 1 - point.offset += code === -3 ? 2 : 1 - accountForPotentialSkip() - } else if (code !== -1) { - point.column++ - point.offset++ - } - - // Not in a string chunk. - if (point._bufferIndex < 0) { - point._index++ - } else { - point._bufferIndex++ - - // At end of string chunk. - // @ts-expect-error Points w/ non-negative `_bufferIndex` reference - // strings. - if (point._bufferIndex === chunks[point._index].length) { - point._bufferIndex = -1 - point._index++ - } - } - - // Expose the previous character. - context.previous = code - - // Mark as consumed. - consumed = true - } - - /** @type {Effects['enter']} */ - function enter(type, fields) { - /** @type {Token} */ - // @ts-expect-error Patch instead of assign required fields to help GC. - const token = fields || {} - token.type = type - token.start = now() - context.events.push(['enter', token, context]) - stack.push(token) - return token - } - - /** @type {Effects['exit']} */ - function exit(type) { - const token = stack.pop() - token.end = now() - context.events.push(['exit', token, context]) - return token - } - - /** - * Use results. - * - * @type {ReturnHandle} - */ - function onsuccessfulconstruct(construct, info) { - addResult(construct, info.from) - } - - /** - * Discard results. - * - * @type {ReturnHandle} - */ - function onsuccessfulcheck(_, info) { - info.restore() - } - - /** - * Factory to attempt/check/interrupt. - * - * @param {ReturnHandle} onreturn - * @param {{interrupt?: boolean | undefined} | undefined} [fields] - */ - function constructFactory(onreturn, fields) { - return hook - - /** - * Handle either an object mapping codes to constructs, a list of - * constructs, or a single construct. - * - * @param {Array<Construct> | Construct | ConstructRecord} constructs - * @param {State} returnState - * @param {State | undefined} [bogusState] - * @returns {State} - */ - function hook(constructs, returnState, bogusState) { - /** @type {Array<Construct>} */ - let listOfConstructs - /** @type {number} */ - let constructIndex - /** @type {Construct} */ - let currentConstruct - /** @type {Info} */ - let info - return Array.isArray(constructs) /* c8 ignore next 1 */ - ? handleListOfConstructs(constructs) - : 'tokenize' in constructs - ? // @ts-expect-error Looks like a construct. - handleListOfConstructs([constructs]) - : handleMapOfConstructs(constructs) - - /** - * Handle a list of construct. - * - * @param {ConstructRecord} map - * @returns {State} - */ - function handleMapOfConstructs(map) { - return start - - /** @type {State} */ - function start(code) { - const def = code !== null && map[code] - const all = code !== null && map.null - const list = [ - // To do: add more extension tests. - /* c8 ignore next 2 */ - ...(Array.isArray(def) ? def : def ? [def] : []), - ...(Array.isArray(all) ? all : all ? [all] : []) - ] - return handleListOfConstructs(list)(code) - } - } - - /** - * Handle a list of construct. - * - * @param {Array<Construct>} list - * @returns {State} - */ - function handleListOfConstructs(list) { - listOfConstructs = list - constructIndex = 0 - if (list.length === 0) { - return bogusState - } - return handleConstruct(list[constructIndex]) - } - - /** - * Handle a single construct. - * - * @param {Construct} construct - * @returns {State} - */ - function handleConstruct(construct) { - return start - - /** @type {State} */ - function start(code) { - // To do: not needed to store if there is no bogus state, probably? - // Currently doesn’t work because `inspect` in document does a check - // w/o a bogus, which doesn’t make sense. But it does seem to help perf - // by not storing. - info = store() - currentConstruct = construct - if (!construct.partial) { - context.currentConstruct = construct - } - - // Always populated by defaults. - - if ( - construct.name && - context.parser.constructs.disable.null.includes(construct.name) - ) { - return nok(code) - } - return construct.tokenize.call( - // If we do have fields, create an object w/ `context` as its - // prototype. - // This allows a “live binding”, which is needed for `interrupt`. - fields ? Object.assign(Object.create(context), fields) : context, - effects, - ok, - nok - )(code) - } - } - - /** @type {State} */ - function ok(code) { - consumed = true - onreturn(currentConstruct, info) - return returnState - } - - /** @type {State} */ - function nok(code) { - consumed = true - info.restore() - if (++constructIndex < listOfConstructs.length) { - return handleConstruct(listOfConstructs[constructIndex]) - } - return bogusState - } - } - } - - /** - * @param {Construct} construct - * @param {number} from - * @returns {void} - */ - function addResult(construct, from) { - if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { - resolveAllConstructs.push(construct) - } - if (construct.resolve) { - splice( - context.events, - from, - context.events.length - from, - construct.resolve(context.events.slice(from), context) - ) - } - if (construct.resolveTo) { - context.events = construct.resolveTo(context.events, context) - } - } - - /** - * Store state. - * - * @returns {Info} - */ - function store() { - const startPoint = now() - const startPrevious = context.previous - const startCurrentConstruct = context.currentConstruct - const startEventsIndex = context.events.length - const startStack = Array.from(stack) - return { - restore, - from: startEventsIndex - } - - /** - * Restore state. - * - * @returns {void} - */ - function restore() { - point = startPoint - context.previous = startPrevious - context.currentConstruct = startCurrentConstruct - context.events.length = startEventsIndex - stack = startStack - accountForPotentialSkip() - } - } - - /** - * Move the current point a bit forward in the line when it’s on a column - * skip. - * - * @returns {void} - */ - function accountForPotentialSkip() { - if (point.line in columnStart && point.column < 2) { - point.column = columnStart[point.line] - point.offset += columnStart[point.line] - 1 - } - } -} - -/** - * Get the chunks from a slice of chunks in the range of a token. - * - * @param {Array<Chunk>} chunks - * @param {Pick<Token, 'end' | 'start'>} token - * @returns {Array<Chunk>} - */ -function sliceChunks(chunks, token) { - const startIndex = token.start._index - const startBufferIndex = token.start._bufferIndex - const endIndex = token.end._index - const endBufferIndex = token.end._bufferIndex - /** @type {Array<Chunk>} */ - let view - if (startIndex === endIndex) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] - } else { - view = chunks.slice(startIndex, endIndex) - if (startBufferIndex > -1) { - const head = view[0] - if (typeof head === 'string') { - view[0] = head.slice(startBufferIndex) - } else { - view.shift() - } - } - if (endBufferIndex > 0) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view.push(chunks[endIndex].slice(0, endBufferIndex)) - } - } - return view -} - -/** - * Get the string value of a slice of chunks. - * - * @param {Array<Chunk>} chunks - * @param {boolean | undefined} [expandTabs=false] - * @returns {string} - */ -function serializeChunks(chunks, expandTabs) { - let index = -1 - /** @type {Array<string>} */ - const result = [] - /** @type {boolean | undefined} */ - let atTab - while (++index < chunks.length) { - const chunk = chunks[index] - /** @type {string} */ - let value - if (typeof chunk === 'string') { - value = chunk - } else - switch (chunk) { - case -5: { - value = '\r' - break - } - case -4: { - value = '\n' - break - } - case -3: { - value = '\r' + '\n' - break - } - case -2: { - value = expandTabs ? ' ' : '\t' - break - } - case -1: { - if (!expandTabs && atTab) continue - value = ' ' - break - } - default: { - // Currently only replacement character. - value = String.fromCharCode(chunk) - } - } - atTab = chunk === -2 - result.push(value) - } - return result.join('') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const thematicBreak = { - name: 'thematicBreak', - tokenize: tokenizeThematicBreak -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeThematicBreak(effects, ok, nok) { - let size = 0 - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of thematic break. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('thematicBreak') - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * After optional whitespace, at marker. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - marker = code - return atBreak(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.enter('thematicBreakSequence') - return sequence(code) - } - if (size >= 3 && (code === null || markdownLineEnding(code))) { - effects.exit('thematicBreak') - return ok(code) - } - return nok(code) - } - - /** - * In sequence. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function sequence(code) { - if (code === marker) { - effects.consume(code) - size++ - return sequence - } - effects.exit('thematicBreakSequence') - return markdownSpace(code) - ? factorySpace(effects, atBreak, 'whitespace')(code) - : atBreak(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - -/** @type {Construct} */ -const list = { - name: 'list', - tokenize: tokenizeListStart, - continuation: { - tokenize: tokenizeListContinuation - }, - exit: tokenizeListEnd -} - -/** @type {Construct} */ -const listItemPrefixWhitespaceConstruct = { - tokenize: tokenizeListItemPrefixWhitespace, - partial: true -} - -/** @type {Construct} */ -const indentConstruct = { - tokenize: tokenizeIndent, - partial: true -} - -// To do: `markdown-rs` parses list items on their own and later stitches them -// together. - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListStart(effects, ok, nok) { - const self = this - const tail = self.events[self.events.length - 1] - let initialSize = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - let size = 0 - return start - - /** @type {State} */ - function start(code) { - const kind = - self.containerState.type || - (code === 42 || code === 43 || code === 45 - ? 'listUnordered' - : 'listOrdered') - if ( - kind === 'listUnordered' - ? !self.containerState.marker || code === self.containerState.marker - : asciiDigit(code) - ) { - if (!self.containerState.type) { - self.containerState.type = kind - effects.enter(kind, { - _container: true - }) - } - if (kind === 'listUnordered') { - effects.enter('listItemPrefix') - return code === 42 || code === 45 - ? effects.check(thematicBreak, nok, atMarker)(code) - : atMarker(code) - } - if (!self.interrupt || code === 49) { - effects.enter('listItemPrefix') - effects.enter('listItemValue') - return inside(code) - } - } - return nok(code) - } - - /** @type {State} */ - function inside(code) { - if (asciiDigit(code) && ++size < 10) { - effects.consume(code) - return inside - } - if ( - (!self.interrupt || size < 2) && - (self.containerState.marker - ? code === self.containerState.marker - : code === 41 || code === 46) - ) { - effects.exit('listItemValue') - return atMarker(code) - } - return nok(code) - } - - /** - * @type {State} - **/ - function atMarker(code) { - effects.enter('listItemMarker') - effects.consume(code) - effects.exit('listItemMarker') - self.containerState.marker = self.containerState.marker || code - return effects.check( - blankLine, - // Can’t be empty when interrupting. - self.interrupt ? nok : onBlank, - effects.attempt( - listItemPrefixWhitespaceConstruct, - endOfPrefix, - otherPrefix - ) - ) - } - - /** @type {State} */ - function onBlank(code) { - self.containerState.initialBlankLine = true - initialSize++ - return endOfPrefix(code) - } - - /** @type {State} */ - function otherPrefix(code) { - if (markdownSpace(code)) { - effects.enter('listItemPrefixWhitespace') - effects.consume(code) - effects.exit('listItemPrefixWhitespace') - return endOfPrefix - } - return nok(code) - } - - /** @type {State} */ - function endOfPrefix(code) { - self.containerState.size = - initialSize + - self.sliceSerialize(effects.exit('listItemPrefix'), true).length - return ok(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListContinuation(effects, ok, nok) { - const self = this - self.containerState._closeFlow = undefined - return effects.check(blankLine, onBlank, notBlank) - - /** @type {State} */ - function onBlank(code) { - self.containerState.furtherBlankLines = - self.containerState.furtherBlankLines || - self.containerState.initialBlankLine - - // We have a blank line. - // Still, try to consume at most the items size. - return factorySpace( - effects, - ok, - 'listItemIndent', - self.containerState.size + 1 - )(code) - } - - /** @type {State} */ - function notBlank(code) { - if (self.containerState.furtherBlankLines || !markdownSpace(code)) { - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return notInCurrentItem(code) - } - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) - } - - /** @type {State} */ - function notInCurrentItem(code) { - // While we do continue, we signal that the flow should be closed. - self.containerState._closeFlow = true - // As we’re closing flow, we’re no longer interrupting. - self.interrupt = undefined - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(list, ok, nok), - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeIndent(effects, ok, nok) { - const self = this - return factorySpace( - effects, - afterPrefix, - 'listItemIndent', - self.containerState.size + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'listItemIndent' && - tail[2].sliceSerialize(tail[1], true).length === self.containerState.size - ? ok(code) - : nok(code) - } -} - -/** - * @type {Exiter} - * @this {TokenizeContext} - */ -function tokenizeListEnd(effects) { - effects.exit(this.containerState.type) -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListItemPrefixWhitespace(effects, ok, nok) { - const self = this - - // Always populated by defaults. - - return factorySpace( - effects, - afterPrefix, - 'listItemPrefixWhitespace', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return !markdownSpace(code) && - tail && - tail[1].type === 'listItemPrefixWhitespace' - ? ok(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blockQuote = { - name: 'blockQuote', - tokenize: tokenizeBlockQuoteStart, - continuation: { - tokenize: tokenizeBlockQuoteContinuation - }, - exit -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteStart(effects, ok, nok) { - const self = this - return start - - /** - * Start of block quote. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 62) { - const state = self.containerState - if (!state.open) { - effects.enter('blockQuote', { - _container: true - }) - state.open = true - } - effects.enter('blockQuotePrefix') - effects.enter('blockQuoteMarker') - effects.consume(code) - effects.exit('blockQuoteMarker') - return after - } - return nok(code) - } - - /** - * After `>`, before optional whitespace. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownSpace(code)) { - effects.enter('blockQuotePrefixWhitespace') - effects.consume(code) - effects.exit('blockQuotePrefixWhitespace') - effects.exit('blockQuotePrefix') - return ok - } - effects.exit('blockQuotePrefix') - return ok(code) - } -} - -/** - * Start of block quote continuation. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteContinuation(effects, ok, nok) { - const self = this - return contStart - - /** - * Start of block quote continuation. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contStart(code) { - if (markdownSpace(code)) { - // Always populated by defaults. - - return factorySpace( - effects, - contBefore, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } - return contBefore(code) - } - - /** - * At `>`, after optional whitespace. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contBefore(code) { - return effects.attempt(blockQuote, ok, nok)(code) - } -} - -/** @type {Exiter} */ -function exit(effects) { - effects.exit('blockQuote') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * <a> - * <a\>b> - * <a b> - * <a)> - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`<a>` or `b`). - * @param {TokenType} literalType - * Type when enclosed (`<a>`). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryDestination( - effects, - ok, - nok, - type, - literalType, - literalMarkerType, - rawType, - stringType, - max -) { - const limit = max || Number.POSITIVE_INFINITY - let balance = 0 - return start - - /** - * Start of destination. - * - * ```markdown - * > | <aa> - * ^ - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 60) { - effects.enter(type) - effects.enter(literalType) - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - return enclosedBefore - } - - // ASCII control, space, closing paren. - if (code === null || code === 32 || code === 41 || asciiControl(code)) { - return nok(code) - } - effects.enter(type) - effects.enter(rawType) - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return raw(code) - } - - /** - * After `<`, at an enclosed destination. - * - * ```markdown - * > | <aa> - * ^ - * ``` - * - * @type {State} - */ - function enclosedBefore(code) { - if (code === 62) { - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - effects.exit(literalType) - effects.exit(type) - return ok - } - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return enclosed(code) - } - - /** - * In enclosed destination. - * - * ```markdown - * > | <aa> - * ^ - * ``` - * - * @type {State} - */ - function enclosed(code) { - if (code === 62) { - effects.exit('chunkString') - effects.exit(stringType) - return enclosedBefore(code) - } - if (code === null || code === 60 || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? enclosedEscape : enclosed - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | <a\*a> - * ^ - * ``` - * - * @type {State} - */ - function enclosedEscape(code) { - if (code === 60 || code === 62 || code === 92) { - effects.consume(code) - return enclosed - } - return enclosed(code) - } - - /** - * In raw destination. - * - * ```markdown - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function raw(code) { - if ( - !balance && - (code === null || code === 41 || markdownLineEndingOrSpace(code)) - ) { - effects.exit('chunkString') - effects.exit(stringType) - effects.exit(rawType) - effects.exit(type) - return ok(code) - } - if (balance < limit && code === 40) { - effects.consume(code) - balance++ - return raw - } - if (code === 41) { - effects.consume(code) - balance-- - return raw - } - - // ASCII control (but *not* `\0`) and space and `(`. - // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it - // doesn’t. - if (code === null || code === 32 || code === 40 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? rawEscape : raw - } - - /** - * After `\`, at special character. - * - * ```markdown - * > | a\*a - * ^ - * ``` - * - * @type {State} - */ - function rawEscape(code) { - if (code === 40 || code === 41 || code === 92) { - effects.consume(code) - return raw - } - return raw(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryLabel(effects, ok, nok, type, markerType, stringType) { - const self = this - let size = 0 - /** @type {boolean} */ - let seen - return start - - /** - * Start of label. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.enter(stringType) - return atBreak - } - - /** - * In label, at something, before something else. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if ( - size > 999 || - code === null || - code === 91 || - (code === 93 && !seen) || - // To do: remove in the future once we’ve switched from - // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, - // which doesn’t need this. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - (code === 94 && - !size && - '_hiddenFootnoteSupport' in self.parser.constructs) - ) { - return nok(code) - } - if (code === 93) { - effects.exit(stringType) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - - // To do: indent? Link chunks and EOLs together? - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return atBreak - } - effects.enter('chunkString', { - contentType: 'string' - }) - return labelInside(code) - } - - /** - * In label, in text. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function labelInside(code) { - if ( - code === null || - code === 91 || - code === 93 || - markdownLineEnding(code) || - size++ > 999 - ) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - if (!seen) seen = !markdownSpace(code) - return code === 92 ? labelEscape : labelInside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | [a\*a] - * ^ - * ``` - * - * @type {State} - */ - function labelEscape(code) { - if (code === 91 || code === 92 || code === 93) { - effects.consume(code) - size++ - return labelInside - } - return labelInside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryTitle(effects, ok, nok, type, markerType, stringType) { - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of title. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 34 || code === 39 || code === 40) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - marker = code === 40 ? 41 : code - return begin - } - return nok(code) - } - - /** - * After opening marker. - * - * This is also used at the closing marker. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function begin(code) { - if (code === marker) { - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - effects.enter(stringType) - return atBreak(code) - } - - /** - * At something, before something else. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.exit(stringType) - return begin(marker) - } - if (code === null) { - return nok(code) - } - - // Note: blank lines can’t exist in content. - if (markdownLineEnding(code)) { - // To do: use `space_or_tab_eol_with_options`, connect. - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, atBreak, 'linePrefix') - } - effects.enter('chunkString', { - contentType: 'string' - }) - return inside(code) - } - - /** - * - * - * @type {State} - */ - function inside(code) { - if (code === marker || code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - return code === 92 ? escape : inside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | "a\*b" - * ^ - * ``` - * - * @type {State} - */ - function escape(code) { - if (code === marker || code === 92) { - effects.consume(code) - return inside - } - return inside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - */ - - - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns - * Start state. - */ -function factoryWhitespace(effects, ok) { - /** @type {boolean} */ - let seen - return start - - /** @type {State} */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - seen = true - return start - } - if (markdownSpace(code)) { - return factorySpace( - effects, - start, - seen ? 'linePrefix' : 'lineSuffix' - )(code) - } - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -function normalizeIdentifier(value) { - return ( - value - // Collapse markdown whitespace. - .replace(/[\t\n\r ]+/g, ' ') - // Trim. - .replace(/^ | $/g, '') - // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase() - .toUpperCase() - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - -/** @type {Construct} */ -const definition = { - name: 'definition', - tokenize: tokenizeDefinition -} - -/** @type {Construct} */ -const titleBefore = { - tokenize: tokenizeTitleBefore, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeDefinition(effects, ok, nok) { - const self = this - /** @type {string} */ - let identifier - return start - - /** - * At start of a definition. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Do not interrupt paragraphs (but do follow definitions). - // To do: do `interrupt` the way `markdown-rs` does. - // To do: parse whitespace the way `markdown-rs` does. - effects.enter('definition') - return before(code) - } - - /** - * After optional whitespace, at `[`. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - // To do: parse whitespace the way `markdown-rs` does. - - return factoryLabel.call( - self, - effects, - labelAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionLabel', - 'definitionLabelMarker', - 'definitionLabelString' - )(code) - } - - /** - * After label. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function labelAfter(code) { - identifier = normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - if (code === 58) { - effects.enter('definitionMarker') - effects.consume(code) - effects.exit('definitionMarker') - return markerAfter - } - return nok(code) - } - - /** - * After marker. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function markerAfter(code) { - // Note: whitespace is optional. - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, destinationBefore)(code) - : destinationBefore(code) - } - - /** - * Before destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationBefore(code) { - return factoryDestination( - effects, - destinationAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionDestination', - 'definitionDestinationLiteral', - 'definitionDestinationLiteralMarker', - 'definitionDestinationRaw', - 'definitionDestinationString' - )(code) - } - - /** - * After destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationAfter(code) { - return effects.attempt(titleBefore, after, after)(code) - } - - /** - * After definition. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return markdownSpace(code) - ? factorySpace(effects, afterWhitespace, 'whitespace')(code) - : afterWhitespace(code) - } - - /** - * After definition, after optional whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function afterWhitespace(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('definition') - - // Note: we don’t care about uniqueness. - // It’s likely that that doesn’t happen very frequently. - // It is more likely that it wastes precious time. - self.parser.defined.push(identifier) - - // To do: `markdown-rs` interrupt. - // // You’d be interrupting. - // tokenizer.interrupt = true - return ok(code) - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeTitleBefore(effects, ok, nok) { - return titleBefore - - /** - * After destination, at whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, beforeMarker)(code) - : nok(code) - } - - /** - * At title. - * - * ```markdown - * | [a]: b - * > | "c" - * ^ - * ``` - * - * @type {State} - */ - function beforeMarker(code) { - return factoryTitle( - effects, - titleAfter, - nok, - 'definitionTitle', - 'definitionTitleMarker', - 'definitionTitleString' - )(code) - } - - /** - * After title. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfter(code) { - return markdownSpace(code) - ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) - : titleAfterOptionalWhitespace(code) - } - - /** - * After title, after optional whitespace. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfterOptionalWhitespace(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const codeIndented = { - name: 'codeIndented', - tokenize: tokenizeCodeIndented -} - -/** @type {Construct} */ -const furtherStart = { - tokenize: tokenizeFurtherStart, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeIndented(effects, ok, nok) { - const self = this - return start - - /** - * Start of code (indented). - * - * > **Parsing note**: it is not needed to check if this first line is a - * > filled line (that it has a non-whitespace character), because blank lines - * > are parsed already, so we never run into that. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: manually check if interrupting like `markdown-rs`. - - effects.enter('codeIndented') - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? atBreak(code) - : nok(code) - } - - /** - * At a break. - * - * ```markdown - * > | aaa - * ^ ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === null) { - return after(code) - } - if (markdownLineEnding(code)) { - return effects.attempt(furtherStart, atBreak, after)(code) - } - effects.enter('codeFlowValue') - return inside(code) - } - - /** - * In code content. - * - * ```markdown - * > | aaa - * ^^^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return atBreak(code) - } - effects.consume(code) - return inside - } - - /** @type {State} */ - function after(code) { - effects.exit('codeIndented') - // To do: allow interrupting like `markdown-rs`. - // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeFurtherStart(effects, ok, nok) { - const self = this - return furtherStart - - /** - * At eol, trying to parse another indent. - * - * ```markdown - * > | aaa - * ^ - * | bbb - * ``` - * - * @type {State} - */ - function furtherStart(code) { - // To do: improve `lazy` / `pierce` handling. - // If this is a lazy line, it can’t be code. - if (self.parser.lazy[self.now().line]) { - return nok(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return furtherStart - } - - // To do: the code here in `micromark-js` is a bit different from - // `markdown-rs` because there it can attempt spaces. - // We can’t yet. - // - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? ok(code) - : markdownLineEnding(code) - ? furtherStart(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const headingAtx = { - name: 'headingAtx', - tokenize: tokenizeHeadingAtx, - resolve: resolveHeadingAtx -} - -/** @type {Resolver} */ -function resolveHeadingAtx(events, context) { - let contentEnd = events.length - 2 - let contentStart = 3 - /** @type {Token} */ - let content - /** @type {Token} */ - let text - - // Prefix whitespace, part of the opening. - if (events[contentStart][1].type === 'whitespace') { - contentStart += 2 - } - - // Suffix whitespace, part of the closing. - if ( - contentEnd - 2 > contentStart && - events[contentEnd][1].type === 'whitespace' - ) { - contentEnd -= 2 - } - if ( - events[contentEnd][1].type === 'atxHeadingSequence' && - (contentStart === contentEnd - 1 || - (contentEnd - 4 > contentStart && - events[contentEnd - 2][1].type === 'whitespace')) - ) { - contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 - } - if (contentEnd > contentStart) { - content = { - type: 'atxHeadingText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end - } - text = { - type: 'chunkText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end, - contentType: 'text' - } - splice(events, contentStart, contentEnd - contentStart + 1, [ - ['enter', content, context], - ['enter', text, context], - ['exit', text, context], - ['exit', content, context] - ]) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHeadingAtx(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of a heading (atx). - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - effects.enter('atxHeading') - return before(code) - } - - /** - * After optional whitespace, at `#`. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('atxHeadingSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 35 && size++ < 6) { - effects.consume(code) - return sequenceOpen - } - - // Always at least one `#`. - if (code === null || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingSequence') - return atBreak(code) - } - return nok(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === 35) { - effects.enter('atxHeadingSequence') - return sequenceFurther(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('atxHeading') - // To do: interrupt like `markdown-rs`. - // // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } - if (markdownSpace(code)) { - return factorySpace(effects, atBreak, 'whitespace')(code) - } - - // To do: generate `data` tokens, add the `text` token later. - // Needs edit map, see: `markdown.rs`. - effects.enter('atxHeadingText') - return data(code) - } - - /** - * In further sequence (after whitespace). - * - * Could be normal “visible” hashes in the heading or a final sequence. - * - * ```markdown - * > | ## aa ## - * ^ - * ``` - * - * @type {State} - */ - function sequenceFurther(code) { - if (code === 35) { - effects.consume(code) - return sequenceFurther - } - effects.exit('atxHeadingSequence') - return atBreak(code) - } - - /** - * In text. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingText') - return atBreak(code) - } - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const setextUnderline = { - name: 'setextUnderline', - tokenize: tokenizeSetextUnderline, - resolveTo: resolveToSetextUnderline -} - -/** @type {Resolver} */ -function resolveToSetextUnderline(events, context) { - // To do: resolve like `markdown-rs`. - let index = events.length - /** @type {number | undefined} */ - let content - /** @type {number | undefined} */ - let text - /** @type {number | undefined} */ - let definition - - // Find the opening of the content. - // It’ll always exist: we don’t tokenize if it isn’t there. - while (index--) { - if (events[index][0] === 'enter') { - if (events[index][1].type === 'content') { - content = index - break - } - if (events[index][1].type === 'paragraph') { - text = index - } - } - // Exit - else { - if (events[index][1].type === 'content') { - // Remove the content end (if needed we’ll add it later) - events.splice(index, 1) - } - if (!definition && events[index][1].type === 'definition') { - definition = index - } - } - } - const heading = { - type: 'setextHeading', - start: Object.assign({}, events[text][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - - // Change the paragraph to setext heading text. - events[text][1].type = 'setextHeadingText' - - // If we have definitions in the content, we’ll keep on having content, - // but we need move it. - if (definition) { - events.splice(text, 0, ['enter', heading, context]) - events.splice(definition + 1, 0, ['exit', events[content][1], context]) - events[content][1].end = Object.assign({}, events[definition][1].end) - } else { - events[content][1] = heading - } - - // Add the heading exit at the end. - events.push(['exit', heading, context]) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeSetextUnderline(effects, ok, nok) { - const self = this - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * At start of heading (setext) underline. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - let index = self.events.length - /** @type {boolean | undefined} */ - let paragraph - // Find an opening. - while (index--) { - // Skip enter/exit of line ending, line prefix, and content. - // We can now either have a definition or a paragraph. - if ( - self.events[index][1].type !== 'lineEnding' && - self.events[index][1].type !== 'linePrefix' && - self.events[index][1].type !== 'content' - ) { - paragraph = self.events[index][1].type === 'paragraph' - break - } - } - - // To do: handle lazy/pierce like `markdown-rs`. - // To do: parse indent like `markdown-rs`. - if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { - effects.enter('setextHeadingLine') - marker = code - return before(code) - } - return nok(code) - } - - /** - * After optional whitespace, at `-` or `=`. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('setextHeadingLineSequence') - return inside(code) - } - - /** - * In sequence. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - effects.exit('setextHeadingLineSequence') - return markdownSpace(code) - ? factorySpace(effects, after, 'lineSuffix')(code) - : after(code) - } - - /** - * After sequence, after optional whitespace. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('setextHeadingLine') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js -/** - * List of lowercase HTML “block” tag names. - * - * The list, when parsing HTML (flow), results in more relaxed rules (condition - * 6). - * Because they are known blocks, the HTML-like syntax doesn’t have to be - * strictly parsed. - * For tag names not in this list, a more strict algorithm (condition 7) is used - * to detect whether the HTML-like syntax is seen as HTML (flow) or not. - * - * This is copied from: - * <https://spec.commonmark.org/0.30/#html-blocks>. - * - * > 👉 **Note**: `search` was added in `CommonMark@0.31`. - */ -const htmlBlockNames = [ - 'address', - 'article', - 'aside', - 'base', - 'basefont', - 'blockquote', - 'body', - 'caption', - 'center', - 'col', - 'colgroup', - 'dd', - 'details', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'frame', - 'frameset', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hr', - 'html', - 'iframe', - 'legend', - 'li', - 'link', - 'main', - 'menu', - 'menuitem', - 'nav', - 'noframes', - 'ol', - 'optgroup', - 'option', - 'p', - 'param', - 'search', - 'section', - 'summary', - 'table', - 'tbody', - 'td', - 'tfoot', - 'th', - 'thead', - 'title', - 'tr', - 'track', - 'ul' -] - -/** - * List of lowercase HTML “raw” tag names. - * - * The list, when parsing HTML (flow), results in HTML that can include lines - * without exiting, until a closing tag also in this list is found (condition - * 1). - * - * This module is copied from: - * <https://spec.commonmark.org/0.30/#html-blocks>. - * - * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - */ -const htmlRawNames = ['pre', 'script', 'style', 'textarea'] - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - -/** @type {Construct} */ -const htmlFlow = { - name: 'htmlFlow', - tokenize: tokenizeHtmlFlow, - resolveTo: resolveToHtmlFlow, - concrete: true -} - -/** @type {Construct} */ -const blankLineBefore = { - tokenize: tokenizeBlankLineBefore, - partial: true -} -const nonLazyContinuationStart = { - tokenize: tokenizeNonLazyContinuationStart, - partial: true -} - -/** @type {Resolver} */ -function resolveToHtmlFlow(events) { - let index = events.length - while (index--) { - if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { - break - } - } - if (index > 1 && events[index - 2][1].type === 'linePrefix') { - // Add the prefix start to the HTML token. - events[index][1].start = events[index - 2][1].start - // Add the prefix start to the HTML line token. - events[index + 1][1].start = events[index - 2][1].start - // Remove the line prefix. - events.splice(index - 2, 2) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlFlow(effects, ok, nok) { - const self = this - /** @type {number} */ - let marker - /** @type {boolean} */ - let closingTag - /** @type {string} */ - let buffer - /** @type {number} */ - let index - /** @type {Code} */ - let markerB - return start - - /** - * Start of HTML (flow). - * - * ```markdown - * > | <x /> - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * At `<`, after optional whitespace. - * - * ```markdown - * > | <x /> - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('htmlFlow') - effects.enter('htmlFlowData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | <x /> - * ^ - * > | <!doctype> - * ^ - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - closingTag = true - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - marker = 3 - // To do: - // tokenizer.concrete = true - // To do: use `markdown-rs` style interrupt. - // While we’re in an instruction instead of a declaration, we’re on a `?` - // right now, so we do need to search for `>`, similar to declarations. - return self.interrupt ? ok : continuationDeclarationInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After `<!`, at declaration, comment, or CDATA. - * - * ```markdown - * > | <!doctype> - * ^ - * > | <!--xxx--> - * ^ - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - marker = 2 - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - marker = 5 - index = 0 - return cdataOpenInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - marker = 4 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After `<!-`, inside a comment, at another `-`. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After `<![`, inside CDATA, expecting `CDATA[`. - * - * ```markdown - * > | <![CDATA[>&<]]> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - if (index === value.length) { - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return cdataOpenInside - } - return nok(code) - } - - /** - * After `</`, in closing tag, at tag name. - * - * ```markdown - * > | </x> - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * In tag name. - * - * ```markdown - * > | <ab> - * ^^ - * > | </ab> - * ^^ - * ``` - * - * @type {State} - */ - function tagName(code) { - if ( - code === null || - code === 47 || - code === 62 || - markdownLineEndingOrSpace(code) - ) { - const slash = code === 47 - const name = buffer.toLowerCase() - if (!slash && !closingTag && htmlRawNames.includes(name)) { - marker = 1 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - if (htmlBlockNames.includes(buffer.toLowerCase())) { - marker = 6 - if (slash) { - effects.consume(code) - return basicSelfClosing - } - - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - marker = 7 - // Do not support complete HTML when interrupting. - return self.interrupt && !self.parser.lazy[self.now().line] - ? nok(code) - : closingTag - ? completeClosingTagAfter(code) - : completeAttributeNameBefore(code) - } - - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - buffer += String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After closing slash of a basic tag name. - * - * ```markdown - * > | <div/> - * ^ - * ``` - * - * @type {State} - */ - function basicSelfClosing(code) { - if (code === 62) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return nok(code) - } - - /** - * After closing slash of a complete tag name. - * - * ```markdown - * > | <x/> - * ^ - * ``` - * - * @type {State} - */ - function completeClosingTagAfter(code) { - if (markdownSpace(code)) { - effects.consume(code) - return completeClosingTagAfter - } - return completeEnd(code) - } - - /** - * At an attribute name. - * - * At first, this state is used after a complete tag name, after whitespace, - * where it expects optional attributes or the end of the tag. - * It is also reused after attributes, when expecting more optional - * attributes. - * - * ```markdown - * > | <a /> - * ^ - * > | <a :b> - * ^ - * > | <a _b> - * ^ - * > | <a b> - * ^ - * > | <a > - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameBefore(code) { - if (code === 47) { - effects.consume(code) - return completeEnd - } - - // ASCII alphanumerical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return completeAttributeName - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameBefore - } - return completeEnd(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | <a :b> - * ^ - * > | <a _b> - * ^ - * > | <a b> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeName(code) { - // ASCII alphanumerical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return completeAttributeName - } - return completeAttributeNameAfter(code) - } - - /** - * After attribute name, at an optional initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | <a b> - * ^ - * > | <a b=c> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return completeAttributeValueBefore - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameAfter - } - return completeAttributeNameBefore(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | <a b=c> - * ^ - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - markerB = code - return completeAttributeValueQuoted - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeValueBefore - } - return completeAttributeValueUnquoted(code) - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | <a b="c"> - * ^ - * > | <a b='c'> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuoted(code) { - if (code === markerB) { - effects.consume(code) - markerB = null - return completeAttributeValueQuotedAfter - } - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return completeAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | <a b=c> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 47 || - code === 60 || - code === 61 || - code === 62 || - code === 96 || - markdownLineEndingOrSpace(code) - ) { - return completeAttributeNameAfter(code) - } - effects.consume(code) - return completeAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the - * end of the tag. - * - * ```markdown - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownSpace(code)) { - return completeAttributeNameBefore(code) - } - return nok(code) - } - - /** - * In certain circumstances of a complete tag where only an `>` is allowed. - * - * ```markdown - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeEnd(code) { - if (code === 62) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * After `>` in a complete tag. - * - * ```markdown - * > | <x> - * ^ - * ``` - * - * @type {State} - */ - function completeAfter(code) { - if (code === null || markdownLineEnding(code)) { - // // Do not form containers. - // tokenizer.concrete = true - return continuation(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * In continuation of any HTML kind. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function continuation(code) { - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationCommentInside - } - if (code === 60 && marker === 1) { - effects.consume(code) - return continuationRawTagOpen - } - if (code === 62 && marker === 4) { - effects.consume(code) - return continuationClose - } - if (code === 63 && marker === 3) { - effects.consume(code) - return continuationDeclarationInside - } - if (code === 93 && marker === 5) { - effects.consume(code) - return continuationCdataInside - } - if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { - effects.exit('htmlFlowData') - return effects.check( - blankLineBefore, - continuationAfter, - continuationStart - )(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationStart(code) - } - effects.consume(code) - return continuation - } - - /** - * In continuation, at eol. - * - * ```markdown - * > | <x> - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStart(code) { - return effects.check( - nonLazyContinuationStart, - continuationStartNonLazy, - continuationAfter - )(code) - } - - /** - * In continuation, at eol, before non-lazy content. - * - * ```markdown - * > | <x> - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStartNonLazy(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return continuationBefore - } - - /** - * In continuation, before non-lazy content. - * - * ```markdown - * | <x> - * > | asd - * ^ - * ``` - * - * @type {State} - */ - function continuationBefore(code) { - if (code === null || markdownLineEnding(code)) { - return continuationStart(code) - } - effects.enter('htmlFlowData') - return continuation(code) - } - - /** - * In comment continuation, after one `-`, expecting another. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function continuationCommentInside(code) { - if (code === 45) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In raw continuation, after `<`, at `/`. - * - * ```markdown - * > | <script>console.log(1)</script> - * ^ - * ``` - * - * @type {State} - */ - function continuationRawTagOpen(code) { - if (code === 47) { - effects.consume(code) - buffer = '' - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In raw continuation, after `</`, in a raw tag name. - * - * ```markdown - * > | <script>console.log(1)</script> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function continuationRawEndTag(code) { - if (code === 62) { - const name = buffer.toLowerCase() - if (htmlRawNames.includes(name)) { - effects.consume(code) - return continuationClose - } - return continuation(code) - } - if (asciiAlpha(code) && buffer.length < 8) { - effects.consume(code) - // @ts-expect-error: not null. - buffer += String.fromCharCode(code) - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In cdata continuation, after `]`, expecting `]>`. - * - * ```markdown - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationCdataInside(code) { - if (code === 93) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In declaration or instruction continuation, at `>`. - * - * ```markdown - * > | <!--> - * ^ - * > | <?> - * ^ - * > | <!q> - * ^ - * > | <!--ab--> - * ^ - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationDeclarationInside(code) { - if (code === 62) { - effects.consume(code) - return continuationClose - } - - // More dashes. - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In closed continuation: everything we get until the eol/eof is part of it. - * - * ```markdown - * > | <!doctype> - * ^ - * ``` - * - * @type {State} - */ - function continuationClose(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationAfter(code) - } - effects.consume(code) - return continuationClose - } - - /** - * Done. - * - * ```markdown - * > | <!doctype> - * ^ - * ``` - * - * @type {State} - */ - function continuationAfter(code) { - effects.exit('htmlFlow') - // // Feel free to interrupt. - // tokenizer.interrupt = false - // // No longer concrete. - // tokenizer.concrete = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuationStart(effects, ok, nok) { - const self = this - return start - - /** - * At eol, before continuation. - * - * ```markdown - * > | * ```js - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return after - } - return nok(code) - } - - /** - * A continuation. - * - * ```markdown - * | * ```js - * > | b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLineBefore(effects, ok, nok) { - return start - - /** - * Before eol, expecting blank line. - * - * ```markdown - * > | <div> - * ^ - * | - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return effects.attempt(blankLine, ok, nok) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const nonLazyContinuation = { - tokenize: tokenizeNonLazyContinuation, - partial: true -} - -/** @type {Construct} */ -const codeFenced = { - name: 'codeFenced', - tokenize: tokenizeCodeFenced, - concrete: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeFenced(effects, ok, nok) { - const self = this - /** @type {Construct} */ - const closeStart = { - tokenize: tokenizeCloseStart, - partial: true - } - let initialPrefix = 0 - let sizeOpen = 0 - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of code. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse whitespace like `markdown-rs`. - return beforeSequenceOpen(code) - } - - /** - * In opening fence, after prefix, at sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeSequenceOpen(code) { - const tail = self.events[self.events.length - 1] - initialPrefix = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - marker = code - effects.enter('codeFenced') - effects.enter('codeFencedFence') - effects.enter('codeFencedFenceSequence') - return sequenceOpen(code) - } - - /** - * In opening fence sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === marker) { - sizeOpen++ - effects.consume(code) - return sequenceOpen - } - if (sizeOpen < 3) { - return nok(code) - } - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, infoBefore, 'whitespace')(code) - : infoBefore(code) - } - - /** - * In opening fence, after the sequence (and optional whitespace), before info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function infoBefore(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return self.interrupt - ? ok(code) - : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFencedFenceInfo') - effects.enter('chunkString', { - contentType: 'string' - }) - return info(code) - } - - /** - * In info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function info(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return infoBefore(code) - } - if (markdownSpace(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return factorySpace(effects, metaBefore, 'whitespace')(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return info - } - - /** - * In opening fence, after info and whitespace, before meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function metaBefore(code) { - if (code === null || markdownLineEnding(code)) { - return infoBefore(code) - } - effects.enter('codeFencedFenceMeta') - effects.enter('chunkString', { - contentType: 'string' - }) - return meta(code) - } - - /** - * In meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function meta(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceMeta') - return infoBefore(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return meta - } - - /** - * At eol/eof in code, before a non-lazy closing fence or content. - * - * ```markdown - * > | ~~~js - * ^ - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function atNonLazyBreak(code) { - return effects.attempt(closeStart, after, contentBefore)(code) - } - - /** - * Before code content, not a closing fence, at eol. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return contentStart - } - - /** - * Before code content, not a closing fence. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentStart(code) { - return initialPrefix > 0 && markdownSpace(code) - ? factorySpace( - effects, - beforeContentChunk, - 'linePrefix', - initialPrefix + 1 - )(code) - : beforeContentChunk(code) - } - - /** - * Before code content, after optional prefix. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeContentChunk(code) { - if (code === null || markdownLineEnding(code)) { - return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFlowValue') - return contentChunk(code) - } - - /** - * In code content. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^^^^^^^^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentChunk(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return beforeContentChunk(code) - } - effects.consume(code) - return contentChunk - } - - /** - * After code. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - effects.exit('codeFenced') - return ok(code) - } - - /** - * @this {TokenizeContext} - * @type {Tokenizer} - */ - function tokenizeCloseStart(effects, ok, nok) { - let size = 0 - return startBefore - - /** - * - * - * @type {State} - */ - function startBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return start - } - - /** - * Before closing fence, at optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Always populated by defaults. - - // To do: `enter` here or in next state? - effects.enter('codeFencedFence') - return markdownSpace(code) - ? factorySpace( - effects, - beforeSequenceClose, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : beforeSequenceClose(code) - } - - /** - * In closing fence, after optional whitespace, at sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function beforeSequenceClose(code) { - if (code === marker) { - effects.enter('codeFencedFenceSequence') - return sequenceClose(code) - } - return nok(code) - } - - /** - * In closing fence sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - if (code === marker) { - size++ - effects.consume(code) - return sequenceClose - } - if (size >= sizeOpen) { - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) - : sequenceCloseAfter(code) - } - return nok(code) - } - - /** - * After closing fence sequence, after optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceCloseAfter(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return ok(code) - } - return nok(code) - } - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuation(effects, ok, nok) { - const self = this - return start - - /** - * - * - * @type {State} - */ - function start(code) { - if (code === null) { - return nok(code) - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineStart - } - - /** - * - * - * @type {State} - */ - function lineStart(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/character-entities/index.js -/** - * Map of named character references. - * - * @type {Record<string, string>} - */ -const characterEntities = { - AElig: 'Æ', - AMP: '&', - Aacute: 'Á', - Abreve: 'Ă', - Acirc: 'Â', - Acy: 'А', - Afr: '𝔄', - Agrave: 'À', - Alpha: 'Α', - Amacr: 'Ā', - And: '⩓', - Aogon: 'Ą', - Aopf: '𝔸', - ApplyFunction: '⁡', - Aring: 'Å', - Ascr: '𝒜', - Assign: '≔', - Atilde: 'Ã', - Auml: 'Ä', - Backslash: '∖', - Barv: '⫧', - Barwed: '⌆', - Bcy: 'Б', - Because: '∵', - Bernoullis: 'ℬ', - Beta: 'Β', - Bfr: '𝔅', - Bopf: '𝔹', - Breve: '˘', - Bscr: 'ℬ', - Bumpeq: '≎', - CHcy: 'Ч', - COPY: '©', - Cacute: 'Ć', - Cap: '⋒', - CapitalDifferentialD: 'ⅅ', - Cayleys: 'ℭ', - Ccaron: 'Č', - Ccedil: 'Ç', - Ccirc: 'Ĉ', - Cconint: '∰', - Cdot: 'Ċ', - Cedilla: '¸', - CenterDot: '·', - Cfr: 'ℭ', - Chi: 'Χ', - CircleDot: '⊙', - CircleMinus: '⊖', - CirclePlus: '⊕', - CircleTimes: '⊗', - ClockwiseContourIntegral: '∲', - CloseCurlyDoubleQuote: '”', - CloseCurlyQuote: '’', - Colon: '∷', - Colone: '⩴', - Congruent: '≡', - Conint: '∯', - ContourIntegral: '∮', - Copf: 'ℂ', - Coproduct: '∐', - CounterClockwiseContourIntegral: '∳', - Cross: '⨯', - Cscr: '𝒞', - Cup: '⋓', - CupCap: '≍', - DD: 'ⅅ', - DDotrahd: '⤑', - DJcy: 'Ђ', - DScy: 'Ѕ', - DZcy: 'Џ', - Dagger: '‡', - Darr: '↡', - Dashv: '⫤', - Dcaron: 'Ď', - Dcy: 'Д', - Del: '∇', - Delta: 'Δ', - Dfr: '𝔇', - DiacriticalAcute: '´', - DiacriticalDot: '˙', - DiacriticalDoubleAcute: '˝', - DiacriticalGrave: '`', - DiacriticalTilde: '˜', - Diamond: '⋄', - DifferentialD: 'ⅆ', - Dopf: '𝔻', - Dot: '¨', - DotDot: '⃜', - DotEqual: '≐', - DoubleContourIntegral: '∯', - DoubleDot: '¨', - DoubleDownArrow: '⇓', - DoubleLeftArrow: '⇐', - DoubleLeftRightArrow: '⇔', - DoubleLeftTee: '⫤', - DoubleLongLeftArrow: '⟸', - DoubleLongLeftRightArrow: '⟺', - DoubleLongRightArrow: '⟹', - DoubleRightArrow: '⇒', - DoubleRightTee: '⊨', - DoubleUpArrow: '⇑', - DoubleUpDownArrow: '⇕', - DoubleVerticalBar: '∥', - DownArrow: '↓', - DownArrowBar: '⤓', - DownArrowUpArrow: '⇵', - DownBreve: '̑', - DownLeftRightVector: '⥐', - DownLeftTeeVector: '⥞', - DownLeftVector: '↽', - DownLeftVectorBar: '⥖', - DownRightTeeVector: '⥟', - DownRightVector: '⇁', - DownRightVectorBar: '⥗', - DownTee: '⊤', - DownTeeArrow: '↧', - Downarrow: '⇓', - Dscr: '𝒟', - Dstrok: 'Đ', - ENG: 'Ŋ', - ETH: 'Ð', - Eacute: 'É', - Ecaron: 'Ě', - Ecirc: 'Ê', - Ecy: 'Э', - Edot: 'Ė', - Efr: '𝔈', - Egrave: 'È', - Element: '∈', - Emacr: 'Ē', - EmptySmallSquare: '◻', - EmptyVerySmallSquare: '▫', - Eogon: 'Ę', - Eopf: '𝔼', - Epsilon: 'Ε', - Equal: '⩵', - EqualTilde: '≂', - Equilibrium: '⇌', - Escr: 'ℰ', - Esim: '⩳', - Eta: 'Η', - Euml: 'Ë', - Exists: '∃', - ExponentialE: 'ⅇ', - Fcy: 'Ф', - Ffr: '𝔉', - FilledSmallSquare: '◼', - FilledVerySmallSquare: '▪', - Fopf: '𝔽', - ForAll: '∀', - Fouriertrf: 'ℱ', - Fscr: 'ℱ', - GJcy: 'Ѓ', - GT: '>', - Gamma: 'Γ', - Gammad: 'Ϝ', - Gbreve: 'Ğ', - Gcedil: 'Ģ', - Gcirc: 'Ĝ', - Gcy: 'Г', - Gdot: 'Ġ', - Gfr: '𝔊', - Gg: '⋙', - Gopf: '𝔾', - GreaterEqual: '≥', - GreaterEqualLess: '⋛', - GreaterFullEqual: '≧', - GreaterGreater: '⪢', - GreaterLess: '≷', - GreaterSlantEqual: '⩾', - GreaterTilde: '≳', - Gscr: '𝒢', - Gt: '≫', - HARDcy: 'Ъ', - Hacek: 'ˇ', - Hat: '^', - Hcirc: 'Ĥ', - Hfr: 'ℌ', - HilbertSpace: 'ℋ', - Hopf: 'ℍ', - HorizontalLine: '─', - Hscr: 'ℋ', - Hstrok: 'Ħ', - HumpDownHump: '≎', - HumpEqual: '≏', - IEcy: 'Е', - IJlig: 'IJ', - IOcy: 'Ё', - Iacute: 'Í', - Icirc: 'Î', - Icy: 'И', - Idot: 'İ', - Ifr: 'ℑ', - Igrave: 'Ì', - Im: 'ℑ', - Imacr: 'Ī', - ImaginaryI: 'ⅈ', - Implies: '⇒', - Int: '∬', - Integral: '∫', - Intersection: '⋂', - InvisibleComma: '⁣', - InvisibleTimes: '⁢', - Iogon: 'Į', - Iopf: '𝕀', - Iota: 'Ι', - Iscr: 'ℐ', - Itilde: 'Ĩ', - Iukcy: 'І', - Iuml: 'Ï', - Jcirc: 'Ĵ', - Jcy: 'Й', - Jfr: '𝔍', - Jopf: '𝕁', - Jscr: '𝒥', - Jsercy: 'Ј', - Jukcy: 'Є', - KHcy: 'Х', - KJcy: 'Ќ', - Kappa: 'Κ', - Kcedil: 'Ķ', - Kcy: 'К', - Kfr: '𝔎', - Kopf: '𝕂', - Kscr: '𝒦', - LJcy: 'Љ', - LT: '<', - Lacute: 'Ĺ', - Lambda: 'Λ', - Lang: '⟪', - Laplacetrf: 'ℒ', - Larr: '↞', - Lcaron: 'Ľ', - Lcedil: 'Ļ', - Lcy: 'Л', - LeftAngleBracket: '⟨', - LeftArrow: '←', - LeftArrowBar: '⇤', - LeftArrowRightArrow: '⇆', - LeftCeiling: '⌈', - LeftDoubleBracket: '⟦', - LeftDownTeeVector: '⥡', - LeftDownVector: '⇃', - LeftDownVectorBar: '⥙', - LeftFloor: '⌊', - LeftRightArrow: '↔', - LeftRightVector: '⥎', - LeftTee: '⊣', - LeftTeeArrow: '↤', - LeftTeeVector: '⥚', - LeftTriangle: '⊲', - LeftTriangleBar: '⧏', - LeftTriangleEqual: '⊴', - LeftUpDownVector: '⥑', - LeftUpTeeVector: '⥠', - LeftUpVector: '↿', - LeftUpVectorBar: '⥘', - LeftVector: '↼', - LeftVectorBar: '⥒', - Leftarrow: '⇐', - Leftrightarrow: '⇔', - LessEqualGreater: '⋚', - LessFullEqual: '≦', - LessGreater: '≶', - LessLess: '⪡', - LessSlantEqual: '⩽', - LessTilde: '≲', - Lfr: '𝔏', - Ll: '⋘', - Lleftarrow: '⇚', - Lmidot: 'Ŀ', - LongLeftArrow: '⟵', - LongLeftRightArrow: '⟷', - LongRightArrow: '⟶', - Longleftarrow: '⟸', - Longleftrightarrow: '⟺', - Longrightarrow: '⟹', - Lopf: '𝕃', - LowerLeftArrow: '↙', - LowerRightArrow: '↘', - Lscr: 'ℒ', - Lsh: '↰', - Lstrok: 'Ł', - Lt: '≪', - Map: '⤅', - Mcy: 'М', - MediumSpace: ' ', - Mellintrf: 'ℳ', - Mfr: '𝔐', - MinusPlus: '∓', - Mopf: '𝕄', - Mscr: 'ℳ', - Mu: 'Μ', - NJcy: 'Њ', - Nacute: 'Ń', - Ncaron: 'Ň', - Ncedil: 'Ņ', - Ncy: 'Н', - NegativeMediumSpace: '​', - NegativeThickSpace: '​', - NegativeThinSpace: '​', - NegativeVeryThinSpace: '​', - NestedGreaterGreater: '≫', - NestedLessLess: '≪', - NewLine: '\n', - Nfr: '𝔑', - NoBreak: '⁠', - NonBreakingSpace: ' ', - Nopf: 'ℕ', - Not: '⫬', - NotCongruent: '≢', - NotCupCap: '≭', - NotDoubleVerticalBar: '∦', - NotElement: '∉', - NotEqual: '≠', - NotEqualTilde: '≂̸', - NotExists: '∄', - NotGreater: '≯', - NotGreaterEqual: '≱', - NotGreaterFullEqual: '≧̸', - NotGreaterGreater: '≫̸', - NotGreaterLess: '≹', - NotGreaterSlantEqual: '⩾̸', - NotGreaterTilde: '≵', - NotHumpDownHump: '≎̸', - NotHumpEqual: '≏̸', - NotLeftTriangle: '⋪', - NotLeftTriangleBar: '⧏̸', - NotLeftTriangleEqual: '⋬', - NotLess: '≮', - NotLessEqual: '≰', - NotLessGreater: '≸', - NotLessLess: '≪̸', - NotLessSlantEqual: '⩽̸', - NotLessTilde: '≴', - NotNestedGreaterGreater: '⪢̸', - NotNestedLessLess: '⪡̸', - NotPrecedes: '⊀', - NotPrecedesEqual: '⪯̸', - NotPrecedesSlantEqual: '⋠', - NotReverseElement: '∌', - NotRightTriangle: '⋫', - NotRightTriangleBar: '⧐̸', - NotRightTriangleEqual: '⋭', - NotSquareSubset: '⊏̸', - NotSquareSubsetEqual: '⋢', - NotSquareSuperset: '⊐̸', - NotSquareSupersetEqual: '⋣', - NotSubset: '⊂⃒', - NotSubsetEqual: '⊈', - NotSucceeds: '⊁', - NotSucceedsEqual: '⪰̸', - NotSucceedsSlantEqual: '⋡', - NotSucceedsTilde: '≿̸', - NotSuperset: '⊃⃒', - NotSupersetEqual: '⊉', - NotTilde: '≁', - NotTildeEqual: '≄', - NotTildeFullEqual: '≇', - NotTildeTilde: '≉', - NotVerticalBar: '∤', - Nscr: '𝒩', - Ntilde: 'Ñ', - Nu: 'Ν', - OElig: 'Œ', - Oacute: 'Ó', - Ocirc: 'Ô', - Ocy: 'О', - Odblac: 'Ő', - Ofr: '𝔒', - Ograve: 'Ò', - Omacr: 'Ō', - Omega: 'Ω', - Omicron: 'Ο', - Oopf: '𝕆', - OpenCurlyDoubleQuote: '“', - OpenCurlyQuote: '‘', - Or: '⩔', - Oscr: '𝒪', - Oslash: 'Ø', - Otilde: 'Õ', - Otimes: '⨷', - Ouml: 'Ö', - OverBar: '‾', - OverBrace: '⏞', - OverBracket: '⎴', - OverParenthesis: '⏜', - PartialD: '∂', - Pcy: 'П', - Pfr: '𝔓', - Phi: 'Φ', - Pi: 'Π', - PlusMinus: '±', - Poincareplane: 'ℌ', - Popf: 'ℙ', - Pr: '⪻', - Precedes: '≺', - PrecedesEqual: '⪯', - PrecedesSlantEqual: '≼', - PrecedesTilde: '≾', - Prime: '″', - Product: '∏', - Proportion: '∷', - Proportional: '∝', - Pscr: '𝒫', - Psi: 'Ψ', - QUOT: '"', - Qfr: '𝔔', - Qopf: 'ℚ', - Qscr: '𝒬', - RBarr: '⤐', - REG: '®', - Racute: 'Ŕ', - Rang: '⟫', - Rarr: '↠', - Rarrtl: '⤖', - Rcaron: 'Ř', - Rcedil: 'Ŗ', - Rcy: 'Р', - Re: 'ℜ', - ReverseElement: '∋', - ReverseEquilibrium: '⇋', - ReverseUpEquilibrium: '⥯', - Rfr: 'ℜ', - Rho: 'Ρ', - RightAngleBracket: '⟩', - RightArrow: '→', - RightArrowBar: '⇥', - RightArrowLeftArrow: '⇄', - RightCeiling: '⌉', - RightDoubleBracket: '⟧', - RightDownTeeVector: '⥝', - RightDownVector: '⇂', - RightDownVectorBar: '⥕', - RightFloor: '⌋', - RightTee: '⊢', - RightTeeArrow: '↦', - RightTeeVector: '⥛', - RightTriangle: '⊳', - RightTriangleBar: '⧐', - RightTriangleEqual: '⊵', - RightUpDownVector: '⥏', - RightUpTeeVector: '⥜', - RightUpVector: '↾', - RightUpVectorBar: '⥔', - RightVector: '⇀', - RightVectorBar: '⥓', - Rightarrow: '⇒', - Ropf: 'ℝ', - RoundImplies: '⥰', - Rrightarrow: '⇛', - Rscr: 'ℛ', - Rsh: '↱', - RuleDelayed: '⧴', - SHCHcy: 'Щ', - SHcy: 'Ш', - SOFTcy: 'Ь', - Sacute: 'Ś', - Sc: '⪼', - Scaron: 'Š', - Scedil: 'Ş', - Scirc: 'Ŝ', - Scy: 'С', - Sfr: '𝔖', - ShortDownArrow: '↓', - ShortLeftArrow: '←', - ShortRightArrow: '→', - ShortUpArrow: '↑', - Sigma: 'Σ', - SmallCircle: '∘', - Sopf: '𝕊', - Sqrt: '√', - Square: '□', - SquareIntersection: '⊓', - SquareSubset: '⊏', - SquareSubsetEqual: '⊑', - SquareSuperset: '⊐', - SquareSupersetEqual: '⊒', - SquareUnion: '⊔', - Sscr: '𝒮', - Star: '⋆', - Sub: '⋐', - Subset: '⋐', - SubsetEqual: '⊆', - Succeeds: '≻', - SucceedsEqual: '⪰', - SucceedsSlantEqual: '≽', - SucceedsTilde: '≿', - SuchThat: '∋', - Sum: '∑', - Sup: '⋑', - Superset: '⊃', - SupersetEqual: '⊇', - Supset: '⋑', - THORN: 'Þ', - TRADE: '™', - TSHcy: 'Ћ', - TScy: 'Ц', - Tab: '\t', - Tau: 'Τ', - Tcaron: 'Ť', - Tcedil: 'Ţ', - Tcy: 'Т', - Tfr: '𝔗', - Therefore: '∴', - Theta: 'Θ', - ThickSpace: '  ', - ThinSpace: ' ', - Tilde: '∼', - TildeEqual: '≃', - TildeFullEqual: '≅', - TildeTilde: '≈', - Topf: '𝕋', - TripleDot: '⃛', - Tscr: '𝒯', - Tstrok: 'Ŧ', - Uacute: 'Ú', - Uarr: '↟', - Uarrocir: '⥉', - Ubrcy: 'Ў', - Ubreve: 'Ŭ', - Ucirc: 'Û', - Ucy: 'У', - Udblac: 'Ű', - Ufr: '𝔘', - Ugrave: 'Ù', - Umacr: 'Ū', - UnderBar: '_', - UnderBrace: '⏟', - UnderBracket: '⎵', - UnderParenthesis: '⏝', - Union: '⋃', - UnionPlus: '⊎', - Uogon: 'Ų', - Uopf: '𝕌', - UpArrow: '↑', - UpArrowBar: '⤒', - UpArrowDownArrow: '⇅', - UpDownArrow: '↕', - UpEquilibrium: '⥮', - UpTee: '⊥', - UpTeeArrow: '↥', - Uparrow: '⇑', - Updownarrow: '⇕', - UpperLeftArrow: '↖', - UpperRightArrow: '↗', - Upsi: 'ϒ', - Upsilon: 'Υ', - Uring: 'Ů', - Uscr: '𝒰', - Utilde: 'Ũ', - Uuml: 'Ü', - VDash: '⊫', - Vbar: '⫫', - Vcy: 'В', - Vdash: '⊩', - Vdashl: '⫦', - Vee: '⋁', - Verbar: '‖', - Vert: '‖', - VerticalBar: '∣', - VerticalLine: '|', - VerticalSeparator: '❘', - VerticalTilde: '≀', - VeryThinSpace: ' ', - Vfr: '𝔙', - Vopf: '𝕍', - Vscr: '𝒱', - Vvdash: '⊪', - Wcirc: 'Ŵ', - Wedge: '⋀', - Wfr: '𝔚', - Wopf: '𝕎', - Wscr: '𝒲', - Xfr: '𝔛', - Xi: 'Ξ', - Xopf: '𝕏', - Xscr: '𝒳', - YAcy: 'Я', - YIcy: 'Ї', - YUcy: 'Ю', - Yacute: 'Ý', - Ycirc: 'Ŷ', - Ycy: 'Ы', - Yfr: '𝔜', - Yopf: '𝕐', - Yscr: '𝒴', - Yuml: 'Ÿ', - ZHcy: 'Ж', - Zacute: 'Ź', - Zcaron: 'Ž', - Zcy: 'З', - Zdot: 'Ż', - ZeroWidthSpace: '​', - Zeta: 'Ζ', - Zfr: 'ℨ', - Zopf: 'ℤ', - Zscr: '𝒵', - aacute: 'á', - abreve: 'ă', - ac: '∾', - acE: '∾̳', - acd: '∿', - acirc: 'â', - acute: '´', - acy: 'а', - aelig: 'æ', - af: '⁡', - afr: '𝔞', - agrave: 'à', - alefsym: 'ℵ', - aleph: 'ℵ', - alpha: 'α', - amacr: 'ā', - amalg: '⨿', - amp: '&', - and: '∧', - andand: '⩕', - andd: '⩜', - andslope: '⩘', - andv: '⩚', - ang: '∠', - ange: '⦤', - angle: '∠', - angmsd: '∡', - angmsdaa: '⦨', - angmsdab: '⦩', - angmsdac: '⦪', - angmsdad: '⦫', - angmsdae: '⦬', - angmsdaf: '⦭', - angmsdag: '⦮', - angmsdah: '⦯', - angrt: '∟', - angrtvb: '⊾', - angrtvbd: '⦝', - angsph: '∢', - angst: 'Å', - angzarr: '⍼', - aogon: 'ą', - aopf: '𝕒', - ap: '≈', - apE: '⩰', - apacir: '⩯', - ape: '≊', - apid: '≋', - apos: "'", - approx: '≈', - approxeq: '≊', - aring: 'å', - ascr: '𝒶', - ast: '*', - asymp: '≈', - asympeq: '≍', - atilde: 'ã', - auml: 'ä', - awconint: '∳', - awint: '⨑', - bNot: '⫭', - backcong: '≌', - backepsilon: '϶', - backprime: '‵', - backsim: '∽', - backsimeq: '⋍', - barvee: '⊽', - barwed: '⌅', - barwedge: '⌅', - bbrk: '⎵', - bbrktbrk: '⎶', - bcong: '≌', - bcy: 'б', - bdquo: '„', - becaus: '∵', - because: '∵', - bemptyv: '⦰', - bepsi: '϶', - bernou: 'ℬ', - beta: 'β', - beth: 'ℶ', - between: '≬', - bfr: '𝔟', - bigcap: '⋂', - bigcirc: '◯', - bigcup: '⋃', - bigodot: '⨀', - bigoplus: '⨁', - bigotimes: '⨂', - bigsqcup: '⨆', - bigstar: '★', - bigtriangledown: '▽', - bigtriangleup: '△', - biguplus: '⨄', - bigvee: '⋁', - bigwedge: '⋀', - bkarow: '⤍', - blacklozenge: '⧫', - blacksquare: '▪', - blacktriangle: '▴', - blacktriangledown: '▾', - blacktriangleleft: '◂', - blacktriangleright: '▸', - blank: '␣', - blk12: '▒', - blk14: '░', - blk34: '▓', - block: '█', - bne: '=⃥', - bnequiv: '≡⃥', - bnot: '⌐', - bopf: '𝕓', - bot: '⊥', - bottom: '⊥', - bowtie: '⋈', - boxDL: '╗', - boxDR: '╔', - boxDl: '╖', - boxDr: '╓', - boxH: '═', - boxHD: '╦', - boxHU: '╩', - boxHd: '╤', - boxHu: '╧', - boxUL: '╝', - boxUR: '╚', - boxUl: '╜', - boxUr: '╙', - boxV: '║', - boxVH: '╬', - boxVL: '╣', - boxVR: '╠', - boxVh: '╫', - boxVl: '╢', - boxVr: '╟', - boxbox: '⧉', - boxdL: '╕', - boxdR: '╒', - boxdl: '┐', - boxdr: '┌', - boxh: '─', - boxhD: '╥', - boxhU: '╨', - boxhd: '┬', - boxhu: '┴', - boxminus: '⊟', - boxplus: '⊞', - boxtimes: '⊠', - boxuL: '╛', - boxuR: '╘', - boxul: '┘', - boxur: '└', - boxv: '│', - boxvH: '╪', - boxvL: '╡', - boxvR: '╞', - boxvh: '┼', - boxvl: '┤', - boxvr: '├', - bprime: '‵', - breve: '˘', - brvbar: '¦', - bscr: '𝒷', - bsemi: '⁏', - bsim: '∽', - bsime: '⋍', - bsol: '\\', - bsolb: '⧅', - bsolhsub: '⟈', - bull: '•', - bullet: '•', - bump: '≎', - bumpE: '⪮', - bumpe: '≏', - bumpeq: '≏', - cacute: 'ć', - cap: '∩', - capand: '⩄', - capbrcup: '⩉', - capcap: '⩋', - capcup: '⩇', - capdot: '⩀', - caps: '∩︀', - caret: '⁁', - caron: 'ˇ', - ccaps: '⩍', - ccaron: 'č', - ccedil: 'ç', - ccirc: 'ĉ', - ccups: '⩌', - ccupssm: '⩐', - cdot: 'ċ', - cedil: '¸', - cemptyv: '⦲', - cent: '¢', - centerdot: '·', - cfr: '𝔠', - chcy: 'ч', - check: '✓', - checkmark: '✓', - chi: 'χ', - cir: '○', - cirE: '⧃', - circ: 'ˆ', - circeq: '≗', - circlearrowleft: '↺', - circlearrowright: '↻', - circledR: '®', - circledS: 'Ⓢ', - circledast: '⊛', - circledcirc: '⊚', - circleddash: '⊝', - cire: '≗', - cirfnint: '⨐', - cirmid: '⫯', - cirscir: '⧂', - clubs: '♣', - clubsuit: '♣', - colon: ':', - colone: '≔', - coloneq: '≔', - comma: ',', - commat: '@', - comp: '∁', - compfn: '∘', - complement: '∁', - complexes: 'ℂ', - cong: '≅', - congdot: '⩭', - conint: '∮', - copf: '𝕔', - coprod: '∐', - copy: '©', - copysr: '℗', - crarr: '↵', - cross: '✗', - cscr: '𝒸', - csub: '⫏', - csube: '⫑', - csup: '⫐', - csupe: '⫒', - ctdot: '⋯', - cudarrl: '⤸', - cudarrr: '⤵', - cuepr: '⋞', - cuesc: '⋟', - cularr: '↶', - cularrp: '⤽', - cup: '∪', - cupbrcap: '⩈', - cupcap: '⩆', - cupcup: '⩊', - cupdot: '⊍', - cupor: '⩅', - cups: '∪︀', - curarr: '↷', - curarrm: '⤼', - curlyeqprec: '⋞', - curlyeqsucc: '⋟', - curlyvee: '⋎', - curlywedge: '⋏', - curren: '¤', - curvearrowleft: '↶', - curvearrowright: '↷', - cuvee: '⋎', - cuwed: '⋏', - cwconint: '∲', - cwint: '∱', - cylcty: '⌭', - dArr: '⇓', - dHar: '⥥', - dagger: '†', - daleth: 'ℸ', - darr: '↓', - dash: '‐', - dashv: '⊣', - dbkarow: '⤏', - dblac: '˝', - dcaron: 'ď', - dcy: 'д', - dd: 'ⅆ', - ddagger: '‡', - ddarr: '⇊', - ddotseq: '⩷', - deg: '°', - delta: 'δ', - demptyv: '⦱', - dfisht: '⥿', - dfr: '𝔡', - dharl: '⇃', - dharr: '⇂', - diam: '⋄', - diamond: '⋄', - diamondsuit: '♦', - diams: '♦', - die: '¨', - digamma: 'ϝ', - disin: '⋲', - div: '÷', - divide: '÷', - divideontimes: '⋇', - divonx: '⋇', - djcy: 'ђ', - dlcorn: '⌞', - dlcrop: '⌍', - dollar: '$', - dopf: '𝕕', - dot: '˙', - doteq: '≐', - doteqdot: '≑', - dotminus: '∸', - dotplus: '∔', - dotsquare: '⊡', - doublebarwedge: '⌆', - downarrow: '↓', - downdownarrows: '⇊', - downharpoonleft: '⇃', - downharpoonright: '⇂', - drbkarow: '⤐', - drcorn: '⌟', - drcrop: '⌌', - dscr: '𝒹', - dscy: 'ѕ', - dsol: '⧶', - dstrok: 'đ', - dtdot: '⋱', - dtri: '▿', - dtrif: '▾', - duarr: '⇵', - duhar: '⥯', - dwangle: '⦦', - dzcy: 'џ', - dzigrarr: '⟿', - eDDot: '⩷', - eDot: '≑', - eacute: 'é', - easter: '⩮', - ecaron: 'ě', - ecir: '≖', - ecirc: 'ê', - ecolon: '≕', - ecy: 'э', - edot: 'ė', - ee: 'ⅇ', - efDot: '≒', - efr: '𝔢', - eg: '⪚', - egrave: 'è', - egs: '⪖', - egsdot: '⪘', - el: '⪙', - elinters: '⏧', - ell: 'ℓ', - els: '⪕', - elsdot: '⪗', - emacr: 'ē', - empty: '∅', - emptyset: '∅', - emptyv: '∅', - emsp13: ' ', - emsp14: ' ', - emsp: ' ', - eng: 'ŋ', - ensp: ' ', - eogon: 'ę', - eopf: '𝕖', - epar: '⋕', - eparsl: '⧣', - eplus: '⩱', - epsi: 'ε', - epsilon: 'ε', - epsiv: 'ϵ', - eqcirc: '≖', - eqcolon: '≕', - eqsim: '≂', - eqslantgtr: '⪖', - eqslantless: '⪕', - equals: '=', - equest: '≟', - equiv: '≡', - equivDD: '⩸', - eqvparsl: '⧥', - erDot: '≓', - erarr: '⥱', - escr: 'ℯ', - esdot: '≐', - esim: '≂', - eta: 'η', - eth: 'ð', - euml: 'ë', - euro: '€', - excl: '!', - exist: '∃', - expectation: 'ℰ', - exponentiale: 'ⅇ', - fallingdotseq: '≒', - fcy: 'ф', - female: '♀', - ffilig: 'ffi', - fflig: 'ff', - ffllig: 'ffl', - ffr: '𝔣', - filig: 'fi', - fjlig: 'fj', - flat: '♭', - fllig: 'fl', - fltns: '▱', - fnof: 'ƒ', - fopf: '𝕗', - forall: '∀', - fork: '⋔', - forkv: '⫙', - fpartint: '⨍', - frac12: '½', - frac13: '⅓', - frac14: '¼', - frac15: '⅕', - frac16: '⅙', - frac18: '⅛', - frac23: '⅔', - frac25: '⅖', - frac34: '¾', - frac35: '⅗', - frac38: '⅜', - frac45: '⅘', - frac56: '⅚', - frac58: '⅝', - frac78: '⅞', - frasl: '⁄', - frown: '⌢', - fscr: '𝒻', - gE: '≧', - gEl: '⪌', - gacute: 'ǵ', - gamma: 'γ', - gammad: 'ϝ', - gap: '⪆', - gbreve: 'ğ', - gcirc: 'ĝ', - gcy: 'г', - gdot: 'ġ', - ge: '≥', - gel: '⋛', - geq: '≥', - geqq: '≧', - geqslant: '⩾', - ges: '⩾', - gescc: '⪩', - gesdot: '⪀', - gesdoto: '⪂', - gesdotol: '⪄', - gesl: '⋛︀', - gesles: '⪔', - gfr: '𝔤', - gg: '≫', - ggg: '⋙', - gimel: 'ℷ', - gjcy: 'ѓ', - gl: '≷', - glE: '⪒', - gla: '⪥', - glj: '⪤', - gnE: '≩', - gnap: '⪊', - gnapprox: '⪊', - gne: '⪈', - gneq: '⪈', - gneqq: '≩', - gnsim: '⋧', - gopf: '𝕘', - grave: '`', - gscr: 'ℊ', - gsim: '≳', - gsime: '⪎', - gsiml: '⪐', - gt: '>', - gtcc: '⪧', - gtcir: '⩺', - gtdot: '⋗', - gtlPar: '⦕', - gtquest: '⩼', - gtrapprox: '⪆', - gtrarr: '⥸', - gtrdot: '⋗', - gtreqless: '⋛', - gtreqqless: '⪌', - gtrless: '≷', - gtrsim: '≳', - gvertneqq: '≩︀', - gvnE: '≩︀', - hArr: '⇔', - hairsp: ' ', - half: '½', - hamilt: 'ℋ', - hardcy: 'ъ', - harr: '↔', - harrcir: '⥈', - harrw: '↭', - hbar: 'ℏ', - hcirc: 'ĥ', - hearts: '♥', - heartsuit: '♥', - hellip: '…', - hercon: '⊹', - hfr: '𝔥', - hksearow: '⤥', - hkswarow: '⤦', - hoarr: '⇿', - homtht: '∻', - hookleftarrow: '↩', - hookrightarrow: '↪', - hopf: '𝕙', - horbar: '―', - hscr: '𝒽', - hslash: 'ℏ', - hstrok: 'ħ', - hybull: '⁃', - hyphen: '‐', - iacute: 'í', - ic: '⁣', - icirc: 'î', - icy: 'и', - iecy: 'е', - iexcl: '¡', - iff: '⇔', - ifr: '𝔦', - igrave: 'ì', - ii: 'ⅈ', - iiiint: '⨌', - iiint: '∭', - iinfin: '⧜', - iiota: '℩', - ijlig: 'ij', - imacr: 'ī', - image: 'ℑ', - imagline: 'ℐ', - imagpart: 'ℑ', - imath: 'ı', - imof: '⊷', - imped: 'Ƶ', - in: '∈', - incare: '℅', - infin: '∞', - infintie: '⧝', - inodot: 'ı', - int: '∫', - intcal: '⊺', - integers: 'ℤ', - intercal: '⊺', - intlarhk: '⨗', - intprod: '⨼', - iocy: 'ё', - iogon: 'į', - iopf: '𝕚', - iota: 'ι', - iprod: '⨼', - iquest: '¿', - iscr: '𝒾', - isin: '∈', - isinE: '⋹', - isindot: '⋵', - isins: '⋴', - isinsv: '⋳', - isinv: '∈', - it: '⁢', - itilde: 'ĩ', - iukcy: 'і', - iuml: 'ï', - jcirc: 'ĵ', - jcy: 'й', - jfr: '𝔧', - jmath: 'ȷ', - jopf: '𝕛', - jscr: '𝒿', - jsercy: 'ј', - jukcy: 'є', - kappa: 'κ', - kappav: 'ϰ', - kcedil: 'ķ', - kcy: 'к', - kfr: '𝔨', - kgreen: 'ĸ', - khcy: 'х', - kjcy: 'ќ', - kopf: '𝕜', - kscr: '𝓀', - lAarr: '⇚', - lArr: '⇐', - lAtail: '⤛', - lBarr: '⤎', - lE: '≦', - lEg: '⪋', - lHar: '⥢', - lacute: 'ĺ', - laemptyv: '⦴', - lagran: 'ℒ', - lambda: 'λ', - lang: '⟨', - langd: '⦑', - langle: '⟨', - lap: '⪅', - laquo: '«', - larr: '←', - larrb: '⇤', - larrbfs: '⤟', - larrfs: '⤝', - larrhk: '↩', - larrlp: '↫', - larrpl: '⤹', - larrsim: '⥳', - larrtl: '↢', - lat: '⪫', - latail: '⤙', - late: '⪭', - lates: '⪭︀', - lbarr: '⤌', - lbbrk: '❲', - lbrace: '{', - lbrack: '[', - lbrke: '⦋', - lbrksld: '⦏', - lbrkslu: '⦍', - lcaron: 'ľ', - lcedil: 'ļ', - lceil: '⌈', - lcub: '{', - lcy: 'л', - ldca: '⤶', - ldquo: '“', - ldquor: '„', - ldrdhar: '⥧', - ldrushar: '⥋', - ldsh: '↲', - le: '≤', - leftarrow: '←', - leftarrowtail: '↢', - leftharpoondown: '↽', - leftharpoonup: '↼', - leftleftarrows: '⇇', - leftrightarrow: '↔', - leftrightarrows: '⇆', - leftrightharpoons: '⇋', - leftrightsquigarrow: '↭', - leftthreetimes: '⋋', - leg: '⋚', - leq: '≤', - leqq: '≦', - leqslant: '⩽', - les: '⩽', - lescc: '⪨', - lesdot: '⩿', - lesdoto: '⪁', - lesdotor: '⪃', - lesg: '⋚︀', - lesges: '⪓', - lessapprox: '⪅', - lessdot: '⋖', - lesseqgtr: '⋚', - lesseqqgtr: '⪋', - lessgtr: '≶', - lesssim: '≲', - lfisht: '⥼', - lfloor: '⌊', - lfr: '𝔩', - lg: '≶', - lgE: '⪑', - lhard: '↽', - lharu: '↼', - lharul: '⥪', - lhblk: '▄', - ljcy: 'љ', - ll: '≪', - llarr: '⇇', - llcorner: '⌞', - llhard: '⥫', - lltri: '◺', - lmidot: 'ŀ', - lmoust: '⎰', - lmoustache: '⎰', - lnE: '≨', - lnap: '⪉', - lnapprox: '⪉', - lne: '⪇', - lneq: '⪇', - lneqq: '≨', - lnsim: '⋦', - loang: '⟬', - loarr: '⇽', - lobrk: '⟦', - longleftarrow: '⟵', - longleftrightarrow: '⟷', - longmapsto: '⟼', - longrightarrow: '⟶', - looparrowleft: '↫', - looparrowright: '↬', - lopar: '⦅', - lopf: '𝕝', - loplus: '⨭', - lotimes: '⨴', - lowast: '∗', - lowbar: '_', - loz: '◊', - lozenge: '◊', - lozf: '⧫', - lpar: '(', - lparlt: '⦓', - lrarr: '⇆', - lrcorner: '⌟', - lrhar: '⇋', - lrhard: '⥭', - lrm: '‎', - lrtri: '⊿', - lsaquo: '‹', - lscr: '𝓁', - lsh: '↰', - lsim: '≲', - lsime: '⪍', - lsimg: '⪏', - lsqb: '[', - lsquo: '‘', - lsquor: '‚', - lstrok: 'ł', - lt: '<', - ltcc: '⪦', - ltcir: '⩹', - ltdot: '⋖', - lthree: '⋋', - ltimes: '⋉', - ltlarr: '⥶', - ltquest: '⩻', - ltrPar: '⦖', - ltri: '◃', - ltrie: '⊴', - ltrif: '◂', - lurdshar: '⥊', - luruhar: '⥦', - lvertneqq: '≨︀', - lvnE: '≨︀', - mDDot: '∺', - macr: '¯', - male: '♂', - malt: '✠', - maltese: '✠', - map: '↦', - mapsto: '↦', - mapstodown: '↧', - mapstoleft: '↤', - mapstoup: '↥', - marker: '▮', - mcomma: '⨩', - mcy: 'м', - mdash: '—', - measuredangle: '∡', - mfr: '𝔪', - mho: '℧', - micro: 'µ', - mid: '∣', - midast: '*', - midcir: '⫰', - middot: '·', - minus: '−', - minusb: '⊟', - minusd: '∸', - minusdu: '⨪', - mlcp: '⫛', - mldr: '…', - mnplus: '∓', - models: '⊧', - mopf: '𝕞', - mp: '∓', - mscr: '𝓂', - mstpos: '∾', - mu: 'μ', - multimap: '⊸', - mumap: '⊸', - nGg: '⋙̸', - nGt: '≫⃒', - nGtv: '≫̸', - nLeftarrow: '⇍', - nLeftrightarrow: '⇎', - nLl: '⋘̸', - nLt: '≪⃒', - nLtv: '≪̸', - nRightarrow: '⇏', - nVDash: '⊯', - nVdash: '⊮', - nabla: '∇', - nacute: 'ń', - nang: '∠⃒', - nap: '≉', - napE: '⩰̸', - napid: '≋̸', - napos: 'ʼn', - napprox: '≉', - natur: '♮', - natural: '♮', - naturals: 'ℕ', - nbsp: ' ', - nbump: '≎̸', - nbumpe: '≏̸', - ncap: '⩃', - ncaron: 'ň', - ncedil: 'ņ', - ncong: '≇', - ncongdot: '⩭̸', - ncup: '⩂', - ncy: 'н', - ndash: '–', - ne: '≠', - neArr: '⇗', - nearhk: '⤤', - nearr: '↗', - nearrow: '↗', - nedot: '≐̸', - nequiv: '≢', - nesear: '⤨', - nesim: '≂̸', - nexist: '∄', - nexists: '∄', - nfr: '𝔫', - ngE: '≧̸', - nge: '≱', - ngeq: '≱', - ngeqq: '≧̸', - ngeqslant: '⩾̸', - nges: '⩾̸', - ngsim: '≵', - ngt: '≯', - ngtr: '≯', - nhArr: '⇎', - nharr: '↮', - nhpar: '⫲', - ni: '∋', - nis: '⋼', - nisd: '⋺', - niv: '∋', - njcy: 'њ', - nlArr: '⇍', - nlE: '≦̸', - nlarr: '↚', - nldr: '‥', - nle: '≰', - nleftarrow: '↚', - nleftrightarrow: '↮', - nleq: '≰', - nleqq: '≦̸', - nleqslant: '⩽̸', - nles: '⩽̸', - nless: '≮', - nlsim: '≴', - nlt: '≮', - nltri: '⋪', - nltrie: '⋬', - nmid: '∤', - nopf: '𝕟', - not: '¬', - notin: '∉', - notinE: '⋹̸', - notindot: '⋵̸', - notinva: '∉', - notinvb: '⋷', - notinvc: '⋶', - notni: '∌', - notniva: '∌', - notnivb: '⋾', - notnivc: '⋽', - npar: '∦', - nparallel: '∦', - nparsl: '⫽⃥', - npart: '∂̸', - npolint: '⨔', - npr: '⊀', - nprcue: '⋠', - npre: '⪯̸', - nprec: '⊀', - npreceq: '⪯̸', - nrArr: '⇏', - nrarr: '↛', - nrarrc: '⤳̸', - nrarrw: '↝̸', - nrightarrow: '↛', - nrtri: '⋫', - nrtrie: '⋭', - nsc: '⊁', - nsccue: '⋡', - nsce: '⪰̸', - nscr: '𝓃', - nshortmid: '∤', - nshortparallel: '∦', - nsim: '≁', - nsime: '≄', - nsimeq: '≄', - nsmid: '∤', - nspar: '∦', - nsqsube: '⋢', - nsqsupe: '⋣', - nsub: '⊄', - nsubE: '⫅̸', - nsube: '⊈', - nsubset: '⊂⃒', - nsubseteq: '⊈', - nsubseteqq: '⫅̸', - nsucc: '⊁', - nsucceq: '⪰̸', - nsup: '⊅', - nsupE: '⫆̸', - nsupe: '⊉', - nsupset: '⊃⃒', - nsupseteq: '⊉', - nsupseteqq: '⫆̸', - ntgl: '≹', - ntilde: 'ñ', - ntlg: '≸', - ntriangleleft: '⋪', - ntrianglelefteq: '⋬', - ntriangleright: '⋫', - ntrianglerighteq: '⋭', - nu: 'ν', - num: '#', - numero: '№', - numsp: ' ', - nvDash: '⊭', - nvHarr: '⤄', - nvap: '≍⃒', - nvdash: '⊬', - nvge: '≥⃒', - nvgt: '>⃒', - nvinfin: '⧞', - nvlArr: '⤂', - nvle: '≤⃒', - nvlt: '<⃒', - nvltrie: '⊴⃒', - nvrArr: '⤃', - nvrtrie: '⊵⃒', - nvsim: '∼⃒', - nwArr: '⇖', - nwarhk: '⤣', - nwarr: '↖', - nwarrow: '↖', - nwnear: '⤧', - oS: 'Ⓢ', - oacute: 'ó', - oast: '⊛', - ocir: '⊚', - ocirc: 'ô', - ocy: 'о', - odash: '⊝', - odblac: 'ő', - odiv: '⨸', - odot: '⊙', - odsold: '⦼', - oelig: 'œ', - ofcir: '⦿', - ofr: '𝔬', - ogon: '˛', - ograve: 'ò', - ogt: '⧁', - ohbar: '⦵', - ohm: 'Ω', - oint: '∮', - olarr: '↺', - olcir: '⦾', - olcross: '⦻', - oline: '‾', - olt: '⧀', - omacr: 'ō', - omega: 'ω', - omicron: 'ο', - omid: '⦶', - ominus: '⊖', - oopf: '𝕠', - opar: '⦷', - operp: '⦹', - oplus: '⊕', - or: '∨', - orarr: '↻', - ord: '⩝', - order: 'ℴ', - orderof: 'ℴ', - ordf: 'ª', - ordm: 'º', - origof: '⊶', - oror: '⩖', - orslope: '⩗', - orv: '⩛', - oscr: 'ℴ', - oslash: 'ø', - osol: '⊘', - otilde: 'õ', - otimes: '⊗', - otimesas: '⨶', - ouml: 'ö', - ovbar: '⌽', - par: '∥', - para: '¶', - parallel: '∥', - parsim: '⫳', - parsl: '⫽', - part: '∂', - pcy: 'п', - percnt: '%', - period: '.', - permil: '‰', - perp: '⊥', - pertenk: '‱', - pfr: '𝔭', - phi: 'φ', - phiv: 'ϕ', - phmmat: 'ℳ', - phone: '☎', - pi: 'π', - pitchfork: '⋔', - piv: 'ϖ', - planck: 'ℏ', - planckh: 'ℎ', - plankv: 'ℏ', - plus: '+', - plusacir: '⨣', - plusb: '⊞', - pluscir: '⨢', - plusdo: '∔', - plusdu: '⨥', - pluse: '⩲', - plusmn: '±', - plussim: '⨦', - plustwo: '⨧', - pm: '±', - pointint: '⨕', - popf: '𝕡', - pound: '£', - pr: '≺', - prE: '⪳', - prap: '⪷', - prcue: '≼', - pre: '⪯', - prec: '≺', - precapprox: '⪷', - preccurlyeq: '≼', - preceq: '⪯', - precnapprox: '⪹', - precneqq: '⪵', - precnsim: '⋨', - precsim: '≾', - prime: '′', - primes: 'ℙ', - prnE: '⪵', - prnap: '⪹', - prnsim: '⋨', - prod: '∏', - profalar: '⌮', - profline: '⌒', - profsurf: '⌓', - prop: '∝', - propto: '∝', - prsim: '≾', - prurel: '⊰', - pscr: '𝓅', - psi: 'ψ', - puncsp: ' ', - qfr: '𝔮', - qint: '⨌', - qopf: '𝕢', - qprime: '⁗', - qscr: '𝓆', - quaternions: 'ℍ', - quatint: '⨖', - quest: '?', - questeq: '≟', - quot: '"', - rAarr: '⇛', - rArr: '⇒', - rAtail: '⤜', - rBarr: '⤏', - rHar: '⥤', - race: '∽̱', - racute: 'ŕ', - radic: '√', - raemptyv: '⦳', - rang: '⟩', - rangd: '⦒', - range: '⦥', - rangle: '⟩', - raquo: '»', - rarr: '→', - rarrap: '⥵', - rarrb: '⇥', - rarrbfs: '⤠', - rarrc: '⤳', - rarrfs: '⤞', - rarrhk: '↪', - rarrlp: '↬', - rarrpl: '⥅', - rarrsim: '⥴', - rarrtl: '↣', - rarrw: '↝', - ratail: '⤚', - ratio: '∶', - rationals: 'ℚ', - rbarr: '⤍', - rbbrk: '❳', - rbrace: '}', - rbrack: ']', - rbrke: '⦌', - rbrksld: '⦎', - rbrkslu: '⦐', - rcaron: 'ř', - rcedil: 'ŗ', - rceil: '⌉', - rcub: '}', - rcy: 'р', - rdca: '⤷', - rdldhar: '⥩', - rdquo: '”', - rdquor: '”', - rdsh: '↳', - real: 'ℜ', - realine: 'ℛ', - realpart: 'ℜ', - reals: 'ℝ', - rect: '▭', - reg: '®', - rfisht: '⥽', - rfloor: '⌋', - rfr: '𝔯', - rhard: '⇁', - rharu: '⇀', - rharul: '⥬', - rho: 'ρ', - rhov: 'ϱ', - rightarrow: '→', - rightarrowtail: '↣', - rightharpoondown: '⇁', - rightharpoonup: '⇀', - rightleftarrows: '⇄', - rightleftharpoons: '⇌', - rightrightarrows: '⇉', - rightsquigarrow: '↝', - rightthreetimes: '⋌', - ring: '˚', - risingdotseq: '≓', - rlarr: '⇄', - rlhar: '⇌', - rlm: '‏', - rmoust: '⎱', - rmoustache: '⎱', - rnmid: '⫮', - roang: '⟭', - roarr: '⇾', - robrk: '⟧', - ropar: '⦆', - ropf: '𝕣', - roplus: '⨮', - rotimes: '⨵', - rpar: ')', - rpargt: '⦔', - rppolint: '⨒', - rrarr: '⇉', - rsaquo: '›', - rscr: '𝓇', - rsh: '↱', - rsqb: ']', - rsquo: '’', - rsquor: '’', - rthree: '⋌', - rtimes: '⋊', - rtri: '▹', - rtrie: '⊵', - rtrif: '▸', - rtriltri: '⧎', - ruluhar: '⥨', - rx: '℞', - sacute: 'ś', - sbquo: '‚', - sc: '≻', - scE: '⪴', - scap: '⪸', - scaron: 'š', - sccue: '≽', - sce: '⪰', - scedil: 'ş', - scirc: 'ŝ', - scnE: '⪶', - scnap: '⪺', - scnsim: '⋩', - scpolint: '⨓', - scsim: '≿', - scy: 'с', - sdot: '⋅', - sdotb: '⊡', - sdote: '⩦', - seArr: '⇘', - searhk: '⤥', - searr: '↘', - searrow: '↘', - sect: '§', - semi: ';', - seswar: '⤩', - setminus: '∖', - setmn: '∖', - sext: '✶', - sfr: '𝔰', - sfrown: '⌢', - sharp: '♯', - shchcy: 'щ', - shcy: 'ш', - shortmid: '∣', - shortparallel: '∥', - shy: '­', - sigma: 'σ', - sigmaf: 'ς', - sigmav: 'ς', - sim: '∼', - simdot: '⩪', - sime: '≃', - simeq: '≃', - simg: '⪞', - simgE: '⪠', - siml: '⪝', - simlE: '⪟', - simne: '≆', - simplus: '⨤', - simrarr: '⥲', - slarr: '←', - smallsetminus: '∖', - smashp: '⨳', - smeparsl: '⧤', - smid: '∣', - smile: '⌣', - smt: '⪪', - smte: '⪬', - smtes: '⪬︀', - softcy: 'ь', - sol: '/', - solb: '⧄', - solbar: '⌿', - sopf: '𝕤', - spades: '♠', - spadesuit: '♠', - spar: '∥', - sqcap: '⊓', - sqcaps: '⊓︀', - sqcup: '⊔', - sqcups: '⊔︀', - sqsub: '⊏', - sqsube: '⊑', - sqsubset: '⊏', - sqsubseteq: '⊑', - sqsup: '⊐', - sqsupe: '⊒', - sqsupset: '⊐', - sqsupseteq: '⊒', - squ: '□', - square: '□', - squarf: '▪', - squf: '▪', - srarr: '→', - sscr: '𝓈', - ssetmn: '∖', - ssmile: '⌣', - sstarf: '⋆', - star: '☆', - starf: '★', - straightepsilon: 'ϵ', - straightphi: 'ϕ', - strns: '¯', - sub: '⊂', - subE: '⫅', - subdot: '⪽', - sube: '⊆', - subedot: '⫃', - submult: '⫁', - subnE: '⫋', - subne: '⊊', - subplus: '⪿', - subrarr: '⥹', - subset: '⊂', - subseteq: '⊆', - subseteqq: '⫅', - subsetneq: '⊊', - subsetneqq: '⫋', - subsim: '⫇', - subsub: '⫕', - subsup: '⫓', - succ: '≻', - succapprox: '⪸', - succcurlyeq: '≽', - succeq: '⪰', - succnapprox: '⪺', - succneqq: '⪶', - succnsim: '⋩', - succsim: '≿', - sum: '∑', - sung: '♪', - sup1: '¹', - sup2: '²', - sup3: '³', - sup: '⊃', - supE: '⫆', - supdot: '⪾', - supdsub: '⫘', - supe: '⊇', - supedot: '⫄', - suphsol: '⟉', - suphsub: '⫗', - suplarr: '⥻', - supmult: '⫂', - supnE: '⫌', - supne: '⊋', - supplus: '⫀', - supset: '⊃', - supseteq: '⊇', - supseteqq: '⫆', - supsetneq: '⊋', - supsetneqq: '⫌', - supsim: '⫈', - supsub: '⫔', - supsup: '⫖', - swArr: '⇙', - swarhk: '⤦', - swarr: '↙', - swarrow: '↙', - swnwar: '⤪', - szlig: 'ß', - target: '⌖', - tau: 'τ', - tbrk: '⎴', - tcaron: 'ť', - tcedil: 'ţ', - tcy: 'т', - tdot: '⃛', - telrec: '⌕', - tfr: '𝔱', - there4: '∴', - therefore: '∴', - theta: 'θ', - thetasym: 'ϑ', - thetav: 'ϑ', - thickapprox: '≈', - thicksim: '∼', - thinsp: ' ', - thkap: '≈', - thksim: '∼', - thorn: 'þ', - tilde: '˜', - times: '×', - timesb: '⊠', - timesbar: '⨱', - timesd: '⨰', - tint: '∭', - toea: '⤨', - top: '⊤', - topbot: '⌶', - topcir: '⫱', - topf: '𝕥', - topfork: '⫚', - tosa: '⤩', - tprime: '‴', - trade: '™', - triangle: '▵', - triangledown: '▿', - triangleleft: '◃', - trianglelefteq: '⊴', - triangleq: '≜', - triangleright: '▹', - trianglerighteq: '⊵', - tridot: '◬', - trie: '≜', - triminus: '⨺', - triplus: '⨹', - trisb: '⧍', - tritime: '⨻', - trpezium: '⏢', - tscr: '𝓉', - tscy: 'ц', - tshcy: 'ћ', - tstrok: 'ŧ', - twixt: '≬', - twoheadleftarrow: '↞', - twoheadrightarrow: '↠', - uArr: '⇑', - uHar: '⥣', - uacute: 'ú', - uarr: '↑', - ubrcy: 'ў', - ubreve: 'ŭ', - ucirc: 'û', - ucy: 'у', - udarr: '⇅', - udblac: 'ű', - udhar: '⥮', - ufisht: '⥾', - ufr: '𝔲', - ugrave: 'ù', - uharl: '↿', - uharr: '↾', - uhblk: '▀', - ulcorn: '⌜', - ulcorner: '⌜', - ulcrop: '⌏', - ultri: '◸', - umacr: 'ū', - uml: '¨', - uogon: 'ų', - uopf: '𝕦', - uparrow: '↑', - updownarrow: '↕', - upharpoonleft: '↿', - upharpoonright: '↾', - uplus: '⊎', - upsi: 'υ', - upsih: 'ϒ', - upsilon: 'υ', - upuparrows: '⇈', - urcorn: '⌝', - urcorner: '⌝', - urcrop: '⌎', - uring: 'ů', - urtri: '◹', - uscr: '𝓊', - utdot: '⋰', - utilde: 'ũ', - utri: '▵', - utrif: '▴', - uuarr: '⇈', - uuml: 'ü', - uwangle: '⦧', - vArr: '⇕', - vBar: '⫨', - vBarv: '⫩', - vDash: '⊨', - vangrt: '⦜', - varepsilon: 'ϵ', - varkappa: 'ϰ', - varnothing: '∅', - varphi: 'ϕ', - varpi: 'ϖ', - varpropto: '∝', - varr: '↕', - varrho: 'ϱ', - varsigma: 'ς', - varsubsetneq: '⊊︀', - varsubsetneqq: '⫋︀', - varsupsetneq: '⊋︀', - varsupsetneqq: '⫌︀', - vartheta: 'ϑ', - vartriangleleft: '⊲', - vartriangleright: '⊳', - vcy: 'в', - vdash: '⊢', - vee: '∨', - veebar: '⊻', - veeeq: '≚', - vellip: '⋮', - verbar: '|', - vert: '|', - vfr: '𝔳', - vltri: '⊲', - vnsub: '⊂⃒', - vnsup: '⊃⃒', - vopf: '𝕧', - vprop: '∝', - vrtri: '⊳', - vscr: '𝓋', - vsubnE: '⫋︀', - vsubne: '⊊︀', - vsupnE: '⫌︀', - vsupne: '⊋︀', - vzigzag: '⦚', - wcirc: 'ŵ', - wedbar: '⩟', - wedge: '∧', - wedgeq: '≙', - weierp: '℘', - wfr: '𝔴', - wopf: '𝕨', - wp: '℘', - wr: '≀', - wreath: '≀', - wscr: '𝓌', - xcap: '⋂', - xcirc: '◯', - xcup: '⋃', - xdtri: '▽', - xfr: '𝔵', - xhArr: '⟺', - xharr: '⟷', - xi: 'ξ', - xlArr: '⟸', - xlarr: '⟵', - xmap: '⟼', - xnis: '⋻', - xodot: '⨀', - xopf: '𝕩', - xoplus: '⨁', - xotime: '⨂', - xrArr: '⟹', - xrarr: '⟶', - xscr: '𝓍', - xsqcup: '⨆', - xuplus: '⨄', - xutri: '△', - xvee: '⋁', - xwedge: '⋀', - yacute: 'ý', - yacy: 'я', - ycirc: 'ŷ', - ycy: 'ы', - yen: '¥', - yfr: '𝔶', - yicy: 'ї', - yopf: '𝕪', - yscr: '𝓎', - yucy: 'ю', - yuml: 'ÿ', - zacute: 'ź', - zcaron: 'ž', - zcy: 'з', - zdot: 'ż', - zeetrf: 'ℨ', - zeta: 'ζ', - zfr: '𝔷', - zhcy: 'ж', - zigrarr: '⇝', - zopf: '𝕫', - zscr: '𝓏', - zwj: '‍', - zwnj: '‌' -} - -;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js - - -const own = {}.hasOwnProperty - -/** - * Decode a single character reference (without the `&` or `;`). - * You probably only need this when you’re building parsers yourself that follow - * different rules compared to HTML. - * This is optimized to be tiny in browsers. - * - * @param {string} value - * `notin` (named), `#123` (deci), `#x123` (hexa). - * @returns {string|false} - * Decoded reference. - */ -function decodeNamedCharacterReference(value) { - return own.call(characterEntities, value) ? characterEntities[value] : false -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const characterReference = { - name: 'characterReference', - tokenize: tokenizeCharacterReference -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterReference(effects, ok, nok) { - const self = this - let size = 0 - /** @type {number} */ - let max - /** @type {(code: Code) => boolean} */ - let test - return start - - /** - * Start of character reference. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterReference') - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - return open - } - - /** - * After `&`, at `#` for numeric references or alphanumeric for named - * references. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 35) { - effects.enter('characterReferenceMarkerNumeric') - effects.consume(code) - effects.exit('characterReferenceMarkerNumeric') - return numeric - } - effects.enter('characterReferenceValue') - max = 31 - test = asciiAlphanumeric - return value(code) - } - - /** - * After `#`, at `x` for hexadecimals or digit for decimals. - * - * ```markdown - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function numeric(code) { - if (code === 88 || code === 120) { - effects.enter('characterReferenceMarkerHexadecimal') - effects.consume(code) - effects.exit('characterReferenceMarkerHexadecimal') - effects.enter('characterReferenceValue') - max = 6 - test = asciiHexDigit - return value - } - effects.enter('characterReferenceValue') - max = 7 - test = asciiDigit - return value(code) - } - - /** - * After markers (`&#x`, `&#`, or `&`), in value, before `;`. - * - * The character reference kind defines what and how many characters are - * allowed. - * - * ```markdown - * > | a&b - * ^^^ - * > | a{b - * ^^^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function value(code) { - if (code === 59 && size) { - const token = effects.exit('characterReferenceValue') - if ( - test === asciiAlphanumeric && - !decodeNamedCharacterReference(self.sliceSerialize(token)) - ) { - return nok(code) - } - - // To do: `markdown-rs` uses a different name: - // `CharacterReferenceMarkerSemi`. - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - effects.exit('characterReference') - return ok - } - if (test(code) && size++ < max) { - effects.consume(code) - return value - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const characterEscape = { - name: 'characterEscape', - tokenize: tokenizeCharacterEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterEscape(effects, ok, nok) { - return start - - /** - * Start of character escape. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterEscape') - effects.enter('escapeMarker') - effects.consume(code) - effects.exit('escapeMarker') - return inside - } - - /** - * After `\`, at punctuation. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - // ASCII punctuation. - if (asciiPunctuation(code)) { - effects.enter('characterEscapeValue') - effects.consume(code) - effects.exit('characterEscapeValue') - effects.exit('characterEscape') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const lineEnding = { - name: 'lineEnding', - tokenize: tokenizeLineEnding -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLineEnding(effects, ok) { - return start - - /** @type {State} */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, ok, 'linePrefix') - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - - -/** @type {Construct} */ -const labelEnd = { - name: 'labelEnd', - tokenize: tokenizeLabelEnd, - resolveTo: resolveToLabelEnd, - resolveAll: resolveAllLabelEnd -} - -/** @type {Construct} */ -const resourceConstruct = { - tokenize: tokenizeResource -} -/** @type {Construct} */ -const referenceFullConstruct = { - tokenize: tokenizeReferenceFull -} -/** @type {Construct} */ -const referenceCollapsedConstruct = { - tokenize: tokenizeReferenceCollapsed -} - -/** @type {Resolver} */ -function resolveAllLabelEnd(events) { - let index = -1 - while (++index < events.length) { - const token = events[index][1] - if ( - token.type === 'labelImage' || - token.type === 'labelLink' || - token.type === 'labelEnd' - ) { - // Remove the marker. - events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) - token.type = 'data' - index++ - } - } - return events -} - -/** @type {Resolver} */ -function resolveToLabelEnd(events, context) { - let index = events.length - let offset = 0 - /** @type {Token} */ - let token - /** @type {number | undefined} */ - let open - /** @type {number | undefined} */ - let close - /** @type {Array<Event>} */ - let media - - // Find an opening. - while (index--) { - token = events[index][1] - if (open) { - // If we see another link, or inactive link label, we’ve been here before. - if ( - token.type === 'link' || - (token.type === 'labelLink' && token._inactive) - ) { - break - } - - // Mark other link openings as inactive, as we can’t have links in - // links. - if (events[index][0] === 'enter' && token.type === 'labelLink') { - token._inactive = true - } - } else if (close) { - if ( - events[index][0] === 'enter' && - (token.type === 'labelImage' || token.type === 'labelLink') && - !token._balanced - ) { - open = index - if (token.type !== 'labelLink') { - offset = 2 - break - } - } - } else if (token.type === 'labelEnd') { - close = index - } - } - const group = { - type: events[open][1].type === 'labelLink' ? 'link' : 'image', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - const label = { - type: 'label', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[close][1].end) - } - const text = { - type: 'labelText', - start: Object.assign({}, events[open + offset + 2][1].end), - end: Object.assign({}, events[close - 2][1].start) - } - media = [ - ['enter', group, context], - ['enter', label, context] - ] - - // Opening marker. - media = push(media, events.slice(open + 1, open + offset + 3)) - - // Text open. - media = push(media, [['enter', text, context]]) - - // Always populated by defaults. - - // Between. - media = push( - media, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + offset + 4, close - 3), - context - ) - ) - - // Text close, marker close, label close. - media = push(media, [ - ['exit', text, context], - events[close - 2], - events[close - 1], - ['exit', label, context] - ]) - - // Reference, resource, or so. - media = push(media, events.slice(close + 1)) - - // Media close. - media = push(media, [['exit', group, context]]) - splice(events, open, events.length, media) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelEnd(effects, ok, nok) { - const self = this - let index = self.events.length - /** @type {Token} */ - let labelStart - /** @type {boolean} */ - let defined - - // Find an opening. - while (index--) { - if ( - (self.events[index][1].type === 'labelImage' || - self.events[index][1].type === 'labelLink') && - !self.events[index][1]._balanced - ) { - labelStart = self.events[index][1] - break - } - } - return start - - /** - * Start of label end. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ``` - * - * @type {State} - */ - function start(code) { - // If there is not an okay opening. - if (!labelStart) { - return nok(code) - } - - // If the corresponding label (link) start is marked as inactive, - // it means we’d be wrapping a link, like this: - // - // ```markdown - // > | a [b [c](d) e](f) g. - // ^ - // ``` - // - // We can’t have that, so it’s just balanced brackets. - if (labelStart._inactive) { - return labelEndNok(code) - } - defined = self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize({ - start: labelStart.end, - end: self.now() - }) - ) - ) - effects.enter('labelEnd') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelEnd') - return after - } - - /** - * After `]`. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - // Note: `markdown-rs` also parses GFM footnotes here, which for us is in - // an extension. - - // Resource (`[asd](fgh)`)? - if (code === 40) { - return effects.attempt( - resourceConstruct, - labelEndOk, - defined ? labelEndOk : labelEndNok - )(code) - } - - // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? - if (code === 91) { - return effects.attempt( - referenceFullConstruct, - labelEndOk, - defined ? referenceNotFull : labelEndNok - )(code) - } - - // Shortcut (`[asd]`) reference? - return defined ? labelEndOk(code) : labelEndNok(code) - } - - /** - * After `]`, at `[`, but not at a full reference. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function referenceNotFull(code) { - return effects.attempt( - referenceCollapsedConstruct, - labelEndOk, - labelEndNok - )(code) - } - - /** - * Done, we found something. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndOk(code) { - // Note: `markdown-rs` does a bunch of stuff here. - return ok(code) - } - - /** - * Done, it’s nothing. - * - * There was an okay opening, but we didn’t match anything. - * - * ```markdown - * > | [a](b c - * ^ - * > | [a][b c - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndNok(code) { - labelStart._balanced = true - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeResource(effects, ok, nok) { - return resourceStart - - /** - * At a resource. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceStart(code) { - effects.enter('resource') - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - return resourceBefore - } - - /** - * In resource, after `(`, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceOpen)(code) - : resourceOpen(code) - } - - /** - * In resource, after optional whitespace, at `)` or a destination. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceOpen(code) { - if (code === 41) { - return resourceEnd(code) - } - return factoryDestination( - effects, - resourceDestinationAfter, - resourceDestinationMissing, - 'resourceDestination', - 'resourceDestinationLiteral', - 'resourceDestinationLiteralMarker', - 'resourceDestinationRaw', - 'resourceDestinationString', - 32 - )(code) - } - - /** - * In resource, after destination, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceBetween)(code) - : resourceEnd(code) - } - - /** - * At invalid destination. - * - * ```markdown - * > | [a](<<) b - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationMissing(code) { - return nok(code) - } - - /** - * In resource, after destination and whitespace, at `(` or title. - * - * ```markdown - * > | [a](b ) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBetween(code) { - if (code === 34 || code === 39 || code === 40) { - return factoryTitle( - effects, - resourceTitleAfter, - nok, - 'resourceTitle', - 'resourceTitleMarker', - 'resourceTitleString' - )(code) - } - return resourceEnd(code) - } - - /** - * In resource, after title, at optional whitespace. - * - * ```markdown - * > | [a](b "c") d - * ^ - * ``` - * - * @type {State} - */ - function resourceTitleAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceEnd)(code) - : resourceEnd(code) - } - - /** - * In resource, at `)`. - * - * ```markdown - * > | [a](b) d - * ^ - * ``` - * - * @type {State} - */ - function resourceEnd(code) { - if (code === 41) { - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - effects.exit('resource') - return ok - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceFull(effects, ok, nok) { - const self = this - return referenceFull - - /** - * In a reference (full), at the `[`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFull(code) { - return factoryLabel.call( - self, - effects, - referenceFullAfter, - referenceFullMissing, - 'reference', - 'referenceMarker', - 'referenceString' - )(code) - } - - /** - * In a reference (full), after `]`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullAfter(code) { - return self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - ) - ? ok(code) - : nok(code) - } - - /** - * In reference (full) that was missing. - * - * ```markdown - * > | [a][b d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullMissing(code) { - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceCollapsed(effects, ok, nok) { - return referenceCollapsedStart - - /** - * In reference (collapsed), at `[`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedStart(code) { - // We only attempt a collapsed label if there’s a `[`. - - effects.enter('reference') - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - return referenceCollapsedOpen - } - - /** - * In reference (collapsed), at `]`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedOpen(code) { - if (code === 93) { - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - effects.exit('reference') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartImage = { - name: 'labelStartImage', - tokenize: tokenizeLabelStartImage, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartImage(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (image) start. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelImage') - effects.enter('labelImageMarker') - effects.consume(code) - effects.exit('labelImageMarker') - return open - } - - /** - * After `!`, at `[`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 91) { - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelImage') - return after - } - return nok(code) - } - - /** - * After `![`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * This is needed in because, when GFM footnotes are enabled, images never - * form when started with a `^`. - * Instead, links form: - * - * ```markdown - * ![^a](b) - * - * ![^a][b] - * - * [b]: c - * ``` - * - * ```html - * <p>!<a href=\"b\">^a</a></p> - * <p>!<a href=\"c\">^a</a></p> - * ``` - * - * @type {State} - */ - function after(code) { - // To do: use a new field to do this, this is still needed for - // `micromark-extension-gfm-footnote`, but the `label-start-link` - // behavior isn’t. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -function classifyCharacter(code) { - if ( - code === null || - markdownLineEndingOrSpace(code) || - unicodeWhitespace(code) - ) { - return 1 - } - if (unicodePunctuation(code)) { - return 2 - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const attention = { - name: 'attention', - tokenize: tokenizeAttention, - resolveAll: resolveAllAttention -} - -/** - * Take all events and resolve attention to emphasis or strong. - * - * @type {Resolver} - */ -function resolveAllAttention(events, context) { - let index = -1 - /** @type {number} */ - let open - /** @type {Token} */ - let group - /** @type {Token} */ - let text - /** @type {Token} */ - let openingSequence - /** @type {Token} */ - let closingSequence - /** @type {number} */ - let use - /** @type {Array<Event>} */ - let nextEvents - /** @type {number} */ - let offset - - // Walk through all events. - // - // Note: performance of this is fine on an mb of normal markdown, but it’s - // a bottleneck for malicious stuff. - while (++index < events.length) { - // Find a token that can close. - if ( - events[index][0] === 'enter' && - events[index][1].type === 'attentionSequence' && - events[index][1]._close - ) { - open = index - - // Now walk back to find an opener. - while (open--) { - // Find a token that can open the closer. - if ( - events[open][0] === 'exit' && - events[open][1].type === 'attentionSequence' && - events[open][1]._open && - // If the markers are the same: - context.sliceSerialize(events[open][1]).charCodeAt(0) === - context.sliceSerialize(events[index][1]).charCodeAt(0) - ) { - // If the opening can close or the closing can open, - // and the close size *is not* a multiple of three, - // but the sum of the opening and closing size *is* multiple of three, - // then don’t match. - if ( - (events[open][1]._close || events[index][1]._open) && - (events[index][1].end.offset - events[index][1].start.offset) % 3 && - !( - (events[open][1].end.offset - - events[open][1].start.offset + - events[index][1].end.offset - - events[index][1].start.offset) % - 3 - ) - ) { - continue - } - - // Number of markers to use from the sequence. - use = - events[open][1].end.offset - events[open][1].start.offset > 1 && - events[index][1].end.offset - events[index][1].start.offset > 1 - ? 2 - : 1 - const start = Object.assign({}, events[open][1].end) - const end = Object.assign({}, events[index][1].start) - movePoint(start, -use) - movePoint(end, use) - openingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start, - end: Object.assign({}, events[open][1].end) - } - closingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start: Object.assign({}, events[index][1].start), - end - } - text = { - type: use > 1 ? 'strongText' : 'emphasisText', - start: Object.assign({}, events[open][1].end), - end: Object.assign({}, events[index][1].start) - } - group = { - type: use > 1 ? 'strong' : 'emphasis', - start: Object.assign({}, openingSequence.start), - end: Object.assign({}, closingSequence.end) - } - events[open][1].end = Object.assign({}, openingSequence.start) - events[index][1].start = Object.assign({}, closingSequence.end) - nextEvents = [] - - // If there are more markers in the opening, add them before. - if (events[open][1].end.offset - events[open][1].start.offset) { - nextEvents = push(nextEvents, [ - ['enter', events[open][1], context], - ['exit', events[open][1], context] - ]) - } - - // Opening. - nextEvents = push(nextEvents, [ - ['enter', group, context], - ['enter', openingSequence, context], - ['exit', openingSequence, context], - ['enter', text, context] - ]) - - // Always populated by defaults. - - // Between. - nextEvents = push( - nextEvents, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + 1, index), - context - ) - ) - - // Closing. - nextEvents = push(nextEvents, [ - ['exit', text, context], - ['enter', closingSequence, context], - ['exit', closingSequence, context], - ['exit', group, context] - ]) - - // If there are more markers in the closing, add them after. - if (events[index][1].end.offset - events[index][1].start.offset) { - offset = 2 - nextEvents = push(nextEvents, [ - ['enter', events[index][1], context], - ['exit', events[index][1], context] - ]) - } else { - offset = 0 - } - splice(events, open - 1, index - open + 3, nextEvents) - index = open + nextEvents.length - offset - 2 - break - } - } - } - } - - // Remove remaining sequences. - index = -1 - while (++index < events.length) { - if (events[index][1].type === 'attentionSequence') { - events[index][1].type = 'data' - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAttention(effects, ok) { - const attentionMarkers = this.parser.constructs.attentionMarkers.null - const previous = this.previous - const before = classifyCharacter(previous) - - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Before a sequence. - * - * ```markdown - * > | ** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - marker = code - effects.enter('attentionSequence') - return inside(code) - } - - /** - * In a sequence. - * - * ```markdown - * > | ** - * ^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - const token = effects.exit('attentionSequence') - - // To do: next major: move this to resolver, just like `markdown-rs`. - const after = classifyCharacter(code) - - // Always populated by defaults. - - const open = - !after || (after === 2 && before) || attentionMarkers.includes(code) - const close = - !before || (before === 2 && after) || attentionMarkers.includes(previous) - token._open = Boolean(marker === 42 ? open : open && (before || !close)) - token._close = Boolean(marker === 42 ? close : close && (after || !open)) - return ok(code) - } -} - -/** - * Move a point a bit. - * - * Note: `move` only works inside lines! It’s not possible to move past other - * chunks (replacement characters, tabs, or line endings). - * - * @param {Point} point - * @param {number} offset - * @returns {void} - */ -function movePoint(point, offset) { - point.column += offset - point.offset += offset - point._bufferIndex += offset -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const autolink = { - name: 'autolink', - tokenize: tokenizeAutolink -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAutolink(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of an autolink. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('autolink') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.enter('autolinkProtocol') - return open - } - - /** - * After `<`, at protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (asciiAlpha(code)) { - effects.consume(code) - return schemeOrEmailAtext - } - return emailAtext(code) - } - - /** - * At second byte of protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function schemeOrEmailAtext(code) { - // ASCII alphanumeric and `+`, `-`, and `.`. - if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { - // Count the previous alphabetical from `open` too. - size = 1 - return schemeInsideOrEmailAtext(code) - } - return emailAtext(code) - } - - /** - * In ambiguous protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function schemeInsideOrEmailAtext(code) { - if (code === 58) { - effects.consume(code) - size = 0 - return urlInside - } - - // ASCII alphanumeric and `+`, `-`, and `.`. - if ( - (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && - size++ < 32 - ) { - effects.consume(code) - return schemeInsideOrEmailAtext - } - size = 0 - return emailAtext(code) - } - - /** - * After protocol, in URL. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * ``` - * - * @type {State} - */ - function urlInside(code) { - if (code === 62) { - effects.exit('autolinkProtocol') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - - // ASCII control, space, or `<`. - if (code === null || code === 32 || code === 60 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return urlInside - } - - /** - * In email atext. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailAtext(code) { - if (code === 64) { - effects.consume(code) - return emailAtSignOrDot - } - if (asciiAtext(code)) { - effects.consume(code) - return emailAtext - } - return nok(code) - } - - /** - * In label, after at-sign or dot. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ ^ - * ``` - * - * @type {State} - */ - function emailAtSignOrDot(code) { - return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) - } - - /** - * In label, where `.` and `>` are allowed. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailLabel(code) { - if (code === 46) { - effects.consume(code) - size = 0 - return emailAtSignOrDot - } - if (code === 62) { - // Exit, then change the token type. - effects.exit('autolinkProtocol').type = 'autolinkEmail' - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - return emailValue(code) - } - - /** - * In label, where `.` and `>` are *not* allowed. - * - * Though, this is also used in `emailLabel` to parse other values. - * - * ```markdown - * > | a<user.name@ex-ample.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailValue(code) { - // ASCII alphanumeric or `-`. - if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { - const next = code === 45 ? emailValue : emailLabel - effects.consume(code) - return next - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const htmlText = { - name: 'htmlText', - tokenize: tokenizeHtmlText -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlText(effects, ok, nok) { - const self = this - /** @type {NonNullable<Code> | undefined} */ - let marker - /** @type {number} */ - let index - /** @type {State} */ - let returnState - return start - - /** - * Start of HTML (text). - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('htmlText') - effects.enter('htmlTextData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | a <b> c - * ^ - * > | a <!doctype> c - * ^ - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - return instruction - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagOpen - } - return nok(code) - } - - /** - * After `<!`, at declaration, comment, or CDATA. - * - * ```markdown - * > | a <!doctype> c - * ^ - * > | a <!--b--> c - * ^ - * > | a <![CDATA[>&<]]> c - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - index = 0 - return cdataOpenInside - } - if (asciiAlpha(code)) { - effects.consume(code) - return declaration - } - return nok(code) - } - - /** - * In a comment, after `<!-`, at another `-`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return nok(code) - } - - /** - * In comment. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function comment(code) { - if (code === null) { - return nok(code) - } - if (code === 45) { - effects.consume(code) - return commentClose - } - if (markdownLineEnding(code)) { - returnState = comment - return lineEndingBefore(code) - } - effects.consume(code) - return comment - } - - /** - * In comment, after `-`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentClose(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return comment(code) - } - - /** - * In comment, after `--`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentEnd(code) { - return code === 62 - ? end(code) - : code === 45 - ? commentClose(code) - : comment(code) - } - - /** - * After `<![`, in CDATA, expecting `CDATA[`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - return index === value.length ? cdata : cdataOpenInside - } - return nok(code) - } - - /** - * In CDATA. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^^^ - * ``` - * - * @type {State} - */ - function cdata(code) { - if (code === null) { - return nok(code) - } - if (code === 93) { - effects.consume(code) - return cdataClose - } - if (markdownLineEnding(code)) { - returnState = cdata - return lineEndingBefore(code) - } - effects.consume(code) - return cdata - } - - /** - * In CDATA, after `]`, at another `]`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataClose(code) { - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In CDATA, after `]]`, at `>`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataEnd(code) { - if (code === 62) { - return end(code) - } - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In declaration. - * - * ```markdown - * > | a <!b> c - * ^ - * ``` - * - * @type {State} - */ - function declaration(code) { - if (code === null || code === 62) { - return end(code) - } - if (markdownLineEnding(code)) { - returnState = declaration - return lineEndingBefore(code) - } - effects.consume(code) - return declaration - } - - /** - * In instruction. - * - * ```markdown - * > | a <?b?> c - * ^ - * ``` - * - * @type {State} - */ - function instruction(code) { - if (code === null) { - return nok(code) - } - if (code === 63) { - effects.consume(code) - return instructionClose - } - if (markdownLineEnding(code)) { - returnState = instruction - return lineEndingBefore(code) - } - effects.consume(code) - return instruction - } - - /** - * In instruction, after `?`, at `>`. - * - * ```markdown - * > | a <?b?> c - * ^ - * ``` - * - * @type {State} - */ - function instructionClose(code) { - return code === 62 ? end(code) : instruction(code) - } - - /** - * After `</`, in closing tag, at tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagClose - } - return nok(code) - } - - /** - * After `</x`, in a tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagClose(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagClose - } - return tagCloseBetween(code) - } - - /** - * In closing tag, after tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseBetween(code) { - if (markdownLineEnding(code)) { - returnState = tagCloseBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagCloseBetween - } - return end(code) - } - - /** - * After `<x`, in opening tag name. - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function tagOpen(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagOpen - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In opening tag, after tag name. - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function tagOpenBetween(code) { - if (code === 47) { - effects.consume(code) - return end - } - - // ASCII alphabetical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return tagOpenAttributeName - } - if (markdownLineEnding(code)) { - returnState = tagOpenBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenBetween - } - return end(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | a <b c> d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeName(code) { - // ASCII alphabetical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return tagOpenAttributeName - } - return tagOpenAttributeNameAfter(code) - } - - /** - * After attribute name, before initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | a <b c> d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeNameAfter - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeNameAfter - } - return tagOpenBetween(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | a <b c=d> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - marker = code - return tagOpenAttributeValueQuoted - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueBefore - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuoted(code) { - if (code === marker) { - effects.consume(code) - marker = undefined - return tagOpenAttributeValueQuotedAfter - } - if (code === null) { - return nok(code) - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueQuoted - return lineEndingBefore(code) - } - effects.consume(code) - return tagOpenAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | a <b c=d> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 60 || - code === 61 || - code === 96 - ) { - return nok(code) - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the end - * of the tag. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In certain circumstances of a tag where only an `>` is allowed. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function end(code) { - if (code === 62) { - effects.consume(code) - effects.exit('htmlTextData') - effects.exit('htmlText') - return ok - } - return nok(code) - } - - /** - * At eol. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * > | a <!--a - * ^ - * | b--> - * ``` - * - * @type {State} - */ - function lineEndingBefore(code) { - effects.exit('htmlTextData') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineEndingAfter - } - - /** - * After eol, at optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a <!--a - * > | b--> - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfter(code) { - // Always populated by defaults. - - return markdownSpace(code) - ? factorySpace( - effects, - lineEndingAfterPrefix, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : lineEndingAfterPrefix(code) - } - - /** - * After eol, after optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a <!--a - * > | b--> - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfterPrefix(code) { - effects.enter('htmlTextData') - return returnState(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartLink = { - name: 'labelStartLink', - tokenize: tokenizeLabelStartLink, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartLink(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (link) start. - * - * ```markdown - * > | a [b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelLink') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelLink') - return after - } - - /** @type {State} */ - function after(code) { - // To do: this isn’t needed in `micromark-extension-gfm-footnote`, - // remove. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const hardBreakEscape = { - name: 'hardBreakEscape', - tokenize: tokenizeHardBreakEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHardBreakEscape(effects, ok, nok) { - return start - - /** - * Start of a hard break (escape). - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('hardBreakEscape') - effects.consume(code) - return after - } - - /** - * After `\`, at eol. - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownLineEnding(code)) { - effects.exit('hardBreakEscape') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Previous} Previous - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const codeText = { - name: 'codeText', - tokenize: tokenizeCodeText, - resolve: resolveCodeText, - previous -} - -// To do: next major: don’t resolve, like `markdown-rs`. -/** @type {Resolver} */ -function resolveCodeText(events) { - let tailExitIndex = events.length - 4 - let headEnterIndex = 3 - /** @type {number} */ - let index - /** @type {number | undefined} */ - let enter - - // If we start and end with an EOL or a space. - if ( - (events[headEnterIndex][1].type === 'lineEnding' || - events[headEnterIndex][1].type === 'space') && - (events[tailExitIndex][1].type === 'lineEnding' || - events[tailExitIndex][1].type === 'space') - ) { - index = headEnterIndex - - // And we have data. - while (++index < tailExitIndex) { - if (events[index][1].type === 'codeTextData') { - // Then we have padding. - events[headEnterIndex][1].type = 'codeTextPadding' - events[tailExitIndex][1].type = 'codeTextPadding' - headEnterIndex += 2 - tailExitIndex -= 2 - break - } - } - } - - // Merge adjacent spaces and data. - index = headEnterIndex - 1 - tailExitIndex++ - while (++index <= tailExitIndex) { - if (enter === undefined) { - if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { - enter = index - } - } else if ( - index === tailExitIndex || - events[index][1].type === 'lineEnding' - ) { - events[enter][1].type = 'codeTextData' - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - tailExitIndex -= index - enter - 2 - index = enter + 2 - } - enter = undefined - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Previous} - */ -function previous(code) { - // If there is a previous code, there will always be a tail. - return ( - code !== 96 || - this.events[this.events.length - 1][1].type === 'characterEscape' - ) -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeText(effects, ok, nok) { - const self = this - let sizeOpen = 0 - /** @type {number} */ - let size - /** @type {Token} */ - let token - return start - - /** - * Start of code (text). - * - * ```markdown - * > | `a` - * ^ - * > | \`a` - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('codeText') - effects.enter('codeTextSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 96) { - effects.consume(code) - sizeOpen++ - return sequenceOpen - } - effects.exit('codeTextSequence') - return between(code) - } - - /** - * Between something and something else. - * - * ```markdown - * > | `a` - * ^^ - * ``` - * - * @type {State} - */ - function between(code) { - // EOF. - if (code === null) { - return nok(code) - } - - // To do: next major: don’t do spaces in resolve, but when compiling, - // like `markdown-rs`. - // Tabs don’t work, and virtual spaces don’t make sense. - if (code === 32) { - effects.enter('space') - effects.consume(code) - effects.exit('space') - return between - } - - // Closing fence? Could also be data. - if (code === 96) { - token = effects.enter('codeTextSequence') - size = 0 - return sequenceClose(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return between - } - - // Data. - effects.enter('codeTextData') - return data(code) - } - - /** - * In data. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if ( - code === null || - code === 32 || - code === 96 || - markdownLineEnding(code) - ) { - effects.exit('codeTextData') - return between(code) - } - effects.consume(code) - return data - } - - /** - * In closing sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - // More. - if (code === 96) { - effects.consume(code) - size++ - return sequenceClose - } - - // Done! - if (size === sizeOpen) { - effects.exit('codeTextSequence') - effects.exit('codeText') - return ok(code) - } - - // More or less accents: mark as data. - token.type = 'codeTextData' - return data(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - */ - - - - -/** @satisfies {Extension['document']} */ -const constructs_document = { - [42]: list, - [43]: list, - [45]: list, - [48]: list, - [49]: list, - [50]: list, - [51]: list, - [52]: list, - [53]: list, - [54]: list, - [55]: list, - [56]: list, - [57]: list, - [62]: blockQuote -} - -/** @satisfies {Extension['contentInitial']} */ -const contentInitial = { - [91]: definition -} - -/** @satisfies {Extension['flowInitial']} */ -const flowInitial = { - [-2]: codeIndented, - [-1]: codeIndented, - [32]: codeIndented -} - -/** @satisfies {Extension['flow']} */ -const constructs_flow = { - [35]: headingAtx, - [42]: thematicBreak, - [45]: [setextUnderline, thematicBreak], - [60]: htmlFlow, - [61]: setextUnderline, - [95]: thematicBreak, - [96]: codeFenced, - [126]: codeFenced -} - -/** @satisfies {Extension['string']} */ -const constructs_string = { - [38]: characterReference, - [92]: characterEscape -} - -/** @satisfies {Extension['text']} */ -const constructs_text = { - [-5]: lineEnding, - [-4]: lineEnding, - [-3]: lineEnding, - [33]: labelStartImage, - [38]: characterReference, - [42]: attention, - [60]: [autolink, htmlText], - [91]: labelStartLink, - [92]: [hardBreakEscape, characterEscape], - [93]: labelEnd, - [95]: attention, - [96]: codeText -} - -/** @satisfies {Extension['insideSpan']} */ -const insideSpan = { - null: [attention, resolver] -} - -/** @satisfies {Extension['attentionMarkers']} */ -const attentionMarkers = { - null: [42, 95] -} - -/** @satisfies {Extension['disable']} */ -const disable = { - null: [] -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js -/** - * @typedef {import('micromark-util-types').Create} Create - * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - */ - - - - - - - - - -/** - * @param {ParseOptions | null | undefined} [options] - * @returns {ParseContext} - */ -function parse(options) { - const settings = options || {} - const constructs = - /** @type {FullNormalizedExtension} */ - combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) - - /** @type {ParseContext} */ - const parser = { - defined: [], - lazy: {}, - constructs, - content: create(content), - document: create(document_document), - flow: create(flow), - string: create(string), - text: create(text_text) - } - return parser - - /** - * @param {InitialConstruct} initial - */ - function create(initial) { - return creator - /** @type {Create} */ - function creator(from) { - return createTokenizer(parser, initial, from) - } - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Value} Value - */ - -/** - * @callback Preprocessor - * @param {Value} value - * @param {Encoding | null | undefined} [encoding] - * @param {boolean | null | undefined} [end=false] - * @returns {Array<Chunk>} - */ - -const search = /[\0\t\n\r]/g - -/** - * @returns {Preprocessor} - */ -function preprocess() { - let column = 1 - let buffer = '' - /** @type {boolean | undefined} */ - let start = true - /** @type {boolean | undefined} */ - let atCarriageReturn - return preprocessor - - /** @type {Preprocessor} */ - function preprocessor(value, encoding, end) { - /** @type {Array<Chunk>} */ - const chunks = [] - /** @type {RegExpMatchArray | null} */ - let match - /** @type {number} */ - let next - /** @type {number} */ - let startPosition - /** @type {number} */ - let endPosition - /** @type {Code} */ - let code - - // @ts-expect-error `Buffer` does allow an encoding. - value = buffer + value.toString(encoding) - startPosition = 0 - buffer = '' - if (start) { - // To do: `markdown-rs` actually parses BOMs (byte order mark). - if (value.charCodeAt(0) === 65279) { - startPosition++ - } - start = undefined - } - while (startPosition < value.length) { - search.lastIndex = startPosition - match = search.exec(value) - endPosition = - match && match.index !== undefined ? match.index : value.length - code = value.charCodeAt(endPosition) - if (!match) { - buffer = value.slice(startPosition) - break - } - if (code === 10 && startPosition === endPosition && atCarriageReturn) { - chunks.push(-3) - atCarriageReturn = undefined - } else { - if (atCarriageReturn) { - chunks.push(-5) - atCarriageReturn = undefined - } - if (startPosition < endPosition) { - chunks.push(value.slice(startPosition, endPosition)) - column += endPosition - startPosition - } - switch (code) { - case 0: { - chunks.push(65533) - column++ - break - } - case 9: { - next = Math.ceil(column / 4) * 4 - chunks.push(-2) - while (column++ < next) chunks.push(-1) - break - } - case 10: { - chunks.push(-4) - column = 1 - break - } - default: { - atCarriageReturn = true - column = 1 - } - } - } - startPosition = endPosition + 1 - } - if (end) { - if (atCarriageReturn) chunks.push(-5) - if (buffer) chunks.push(buffer) - chunks.push(null) - } - return chunks - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js -/** - * @typedef {import('micromark-util-types').Event} Event - */ - - - -/** - * @param {Array<Event>} events - * @returns {Array<Event>} - */ -function postprocess(events) { - while (!subtokenize(events)) { - // Empty - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -function decodeNumericCharacterReference(value, base) { - const code = Number.parseInt(value, base) - if ( - // C0 except for HT, LF, FF, CR, space. - code < 9 || - code === 11 || - (code > 13 && code < 32) || - // Control character (DEL) of C0, and C1 controls. - (code > 126 && code < 160) || - // Lone high surrogates and low surrogates. - (code > 55295 && code < 57344) || - // Noncharacters. - (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || - (code & 65535) === 65535 || - (code & 65535) === 65534 /* eslint-enable no-bitwise */ || - // Out of range - code > 1114111 - ) { - return '\uFFFD' - } - return String.fromCharCode(code) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js - - -const characterEscapeOrReference = - /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi - -/** - * Decode markdown strings (which occur in places such as fenced code info - * strings, destinations, labels, and titles). - * - * The “string” content type allows character escapes and -references. - * This decodes those. - * - * @param {string} value - * Value to decode. - * @returns {string} - * Decoded value. - */ -function decodeString(value) { - return value.replace(characterEscapeOrReference, decode) -} - -/** - * @param {string} $0 - * @param {string} $1 - * @param {string} $2 - * @returns {string} - */ -function decode($0, $1, $2) { - if ($1) { - // Escape. - return $1 - } - - // Reference. - const head = $2.charCodeAt(0) - if (head === 35) { - const head = $2.charCodeAt(1) - const hex = head === 120 || head === 88 - return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) - } - return decodeNamedCharacterReference($2) || $0 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Point} Point - * @typedef {import('unist').Position} Position - */ - -/** - * @typedef NodeLike - * @property {string} type - * @property {PositionLike | null | undefined} [position] - * - * @typedef PositionLike - * @property {PointLike | null | undefined} [start] - * @property {PointLike | null | undefined} [end] - * - * @typedef PointLike - * @property {number | null | undefined} [line] - * @property {number | null | undefined} [column] - * @property {number | null | undefined} [offset] - */ - -/** - * Serialize the positional info of a point, position (start and end points), - * or node. - * - * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] - * Node, position, or point. - * @returns {string} - * Pretty printed positional info of a node (`string`). - * - * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) - * or a point `l:c` (when given `point`), where `l` stands for line, `c` for - * column, `s` for `start`, and `e` for end. - * An empty string (`''`) is returned if the given value is neither `node`, - * `position`, nor `point`. - */ -function stringifyPosition(value) { - // Nothing. - if (!value || typeof value !== 'object') { - return '' - } - - // Node. - if ('position' in value || 'type' in value) { - return position(value.position) - } - - // Position. - if ('start' in value || 'end' in value) { - return position(value) - } - - // Point. - if ('line' in value || 'column' in value) { - return point(value) - } - - // ? - return '' -} - -/** - * @param {Point | PointLike | null | undefined} point - * @returns {string} - */ -function point(point) { - return index(point && point.line) + ':' + index(point && point.column) -} - -/** - * @param {Position | PositionLike | null | undefined} pos - * @returns {string} - */ -function position(pos) { - return point(pos && pos.start) + '-' + point(pos && pos.end) -} - -/** - * @param {number | null | undefined} value - * @returns {number} - */ -function index(value) { - return value && typeof value === 'number' ? value : 1 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js -/** - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Value} Value - * - * @typedef {import('unist').Parent} UnistParent - * @typedef {import('unist').Point} Point - * - * @typedef {import('mdast').PhrasingContent} PhrasingContent - * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent - * @typedef {import('mdast').Content} Content - * @typedef {import('mdast').Break} Break - * @typedef {import('mdast').Blockquote} Blockquote - * @typedef {import('mdast').Code} Code - * @typedef {import('mdast').Definition} Definition - * @typedef {import('mdast').Emphasis} Emphasis - * @typedef {import('mdast').Heading} Heading - * @typedef {import('mdast').HTML} HTML - * @typedef {import('mdast').Image} Image - * @typedef {import('mdast').ImageReference} ImageReference - * @typedef {import('mdast').InlineCode} InlineCode - * @typedef {import('mdast').Link} Link - * @typedef {import('mdast').LinkReference} LinkReference - * @typedef {import('mdast').List} List - * @typedef {import('mdast').ListItem} ListItem - * @typedef {import('mdast').Paragraph} Paragraph - * @typedef {import('mdast').Root} Root - * @typedef {import('mdast').Strong} Strong - * @typedef {import('mdast').Text} Text - * @typedef {import('mdast').ThematicBreak} ThematicBreak - * @typedef {import('mdast').ReferenceType} ReferenceType - * @typedef {import('../index.js').CompileData} CompileData - */ - -/** - * @typedef {Root | Content} Node - * @typedef {Extract<Node, UnistParent>} Parent - * - * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment - */ - -/** - * @callback Transform - * Extra transform, to change the AST afterwards. - * @param {Root} tree - * Tree to transform. - * @returns {Root | undefined | null | void} - * New tree or nothing (in which case the current tree is used). - * - * @callback Handle - * Handle a token. - * @param {CompileContext} this - * Context. - * @param {Token} token - * Current token. - * @returns {void} - * Nothing. - * - * @typedef {Record<string, Handle>} Handles - * Token types mapping to handles - * - * @callback OnEnterError - * Handle the case where the `right` token is open, but it is closed (by the - * `left` token) or because we reached the end of the document. - * @param {Omit<CompileContext, 'sliceSerialize'>} this - * Context. - * @param {Token | undefined} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @callback OnExitError - * Handle the case where the `right` token is open but it is closed by - * exiting the `left` token. - * @param {Omit<CompileContext, 'sliceSerialize'>} this - * Context. - * @param {Token} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @typedef {[Token, OnEnterError | undefined]} TokenTuple - * Open token on the stack, with an optional error handler for when - * that token isn’t closed properly. - */ - -/** - * @typedef Config - * Configuration. - * - * We have our defaults, but extensions will add more. - * @property {Array<string>} canContainEols - * Token types where line endings are used. - * @property {Handles} enter - * Opening handles. - * @property {Handles} exit - * Closing handles. - * @property {Array<Transform>} transforms - * Tree transforms. - * - * @typedef {Partial<Config>} Extension - * Change how markdown tokens from micromark are turned into mdast. - * - * @typedef CompileContext - * mdast compiler context. - * @property {Array<Node | Fragment>} stack - * Stack of nodes. - * @property {Array<TokenTuple>} tokenStack - * Stack of tokens. - * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData - * Get data from the key/value store. - * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData - * Set data into the key/value store. - * @property {(this: CompileContext) => void} buffer - * Capture some of the output data. - * @property {(this: CompileContext) => string} resume - * Stop capturing and access the output data. - * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter - * Enter a token. - * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit - * Exit a token. - * @property {TokenizeContext['sliceSerialize']} sliceSerialize - * Get the string value of a token. - * @property {Config} config - * Configuration. - * - * @typedef FromMarkdownOptions - * Configuration for how to build mdast. - * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] - * Extensions for this utility to change how tokens are turned into a tree. - * - * @typedef {ParseOptions & FromMarkdownOptions} Options - * Configuration. - */ - -// To do: micromark: create a registry of tokens? -// To do: next major: don’t return given `Node` from `enter`. -// To do: next major: remove setter/getter. - - - - - - - - - - -const lib_own = {}.hasOwnProperty - -/** - * @param value - * Markdown to parse. - * @param encoding - * Character encoding for when `value` is `Buffer`. - * @param options - * Configuration. - * @returns - * mdast tree. - */ -const fromMarkdown = - /** - * @type {( - * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & - * ((value: Value, options?: Options | null | undefined) => Root) - * )} - */ - - /** - * @param {Value} value - * @param {Encoding | Options | null | undefined} [encoding] - * @param {Options | null | undefined} [options] - * @returns {Root} - */ - function (value, encoding, options) { - if (typeof encoding !== 'string') { - options = encoding - encoding = undefined - } - return compiler(options)( - postprocess( - parse(options).document().write(preprocess()(value, encoding, true)) - ) - ) - } - -/** - * Note this compiler only understand complete buffering, not streaming. - * - * @param {Options | null | undefined} [options] - */ -function compiler(options) { - /** @type {Config} */ - const config = { - transforms: [], - canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], - enter: { - autolink: opener(link), - autolinkProtocol: onenterdata, - autolinkEmail: onenterdata, - atxHeading: opener(heading), - blockQuote: opener(blockQuote), - characterEscape: onenterdata, - characterReference: onenterdata, - codeFenced: opener(codeFlow), - codeFencedFenceInfo: buffer, - codeFencedFenceMeta: buffer, - codeIndented: opener(codeFlow, buffer), - codeText: opener(codeText, buffer), - codeTextData: onenterdata, - data: onenterdata, - codeFlowValue: onenterdata, - definition: opener(definition), - definitionDestinationString: buffer, - definitionLabelString: buffer, - definitionTitleString: buffer, - emphasis: opener(emphasis), - hardBreakEscape: opener(hardBreak), - hardBreakTrailing: opener(hardBreak), - htmlFlow: opener(html, buffer), - htmlFlowData: onenterdata, - htmlText: opener(html, buffer), - htmlTextData: onenterdata, - image: opener(image), - label: buffer, - link: opener(link), - listItem: opener(listItem), - listItemValue: onenterlistitemvalue, - listOrdered: opener(list, onenterlistordered), - listUnordered: opener(list), - paragraph: opener(paragraph), - reference: onenterreference, - referenceString: buffer, - resourceDestinationString: buffer, - resourceTitleString: buffer, - setextHeading: opener(heading), - strong: opener(strong), - thematicBreak: opener(thematicBreak) - }, - exit: { - atxHeading: closer(), - atxHeadingSequence: onexitatxheadingsequence, - autolink: closer(), - autolinkEmail: onexitautolinkemail, - autolinkProtocol: onexitautolinkprotocol, - blockQuote: closer(), - characterEscapeValue: onexitdata, - characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, - characterReferenceMarkerNumeric: onexitcharacterreferencemarker, - characterReferenceValue: onexitcharacterreferencevalue, - codeFenced: closer(onexitcodefenced), - codeFencedFence: onexitcodefencedfence, - codeFencedFenceInfo: onexitcodefencedfenceinfo, - codeFencedFenceMeta: onexitcodefencedfencemeta, - codeFlowValue: onexitdata, - codeIndented: closer(onexitcodeindented), - codeText: closer(onexitcodetext), - codeTextData: onexitdata, - data: onexitdata, - definition: closer(), - definitionDestinationString: onexitdefinitiondestinationstring, - definitionLabelString: onexitdefinitionlabelstring, - definitionTitleString: onexitdefinitiontitlestring, - emphasis: closer(), - hardBreakEscape: closer(onexithardbreak), - hardBreakTrailing: closer(onexithardbreak), - htmlFlow: closer(onexithtmlflow), - htmlFlowData: onexitdata, - htmlText: closer(onexithtmltext), - htmlTextData: onexitdata, - image: closer(onexitimage), - label: onexitlabel, - labelText: onexitlabeltext, - lineEnding: onexitlineending, - link: closer(onexitlink), - listItem: closer(), - listOrdered: closer(), - listUnordered: closer(), - paragraph: closer(), - referenceString: onexitreferencestring, - resourceDestinationString: onexitresourcedestinationstring, - resourceTitleString: onexitresourcetitlestring, - resource: onexitresource, - setextHeading: closer(onexitsetextheading), - setextHeadingLineSequence: onexitsetextheadinglinesequence, - setextHeadingText: onexitsetextheadingtext, - strong: closer(), - thematicBreak: closer() - } - } - configure(config, (options || {}).mdastExtensions || []) - - /** @type {CompileData} */ - const data = {} - return compile - - /** - * Turn micromark events into an mdast tree. - * - * @param {Array<Event>} events - * Events. - * @returns {Root} - * mdast tree. - */ - function compile(events) { - /** @type {Root} */ - let tree = { - type: 'root', - children: [] - } - /** @type {Omit<CompileContext, 'sliceSerialize'>} */ - const context = { - stack: [tree], - tokenStack: [], - config, - enter, - exit, - buffer, - resume, - setData, - getData - } - /** @type {Array<number>} */ - const listStack = [] - let index = -1 - while (++index < events.length) { - // We preprocess lists to add `listItem` tokens, and to infer whether - // items the list itself are spread out. - if ( - events[index][1].type === 'listOrdered' || - events[index][1].type === 'listUnordered' - ) { - if (events[index][0] === 'enter') { - listStack.push(index) - } else { - const tail = listStack.pop() - index = prepareList(events, tail, index) - } - } - } - index = -1 - while (++index < events.length) { - const handler = config[events[index][0]] - if (lib_own.call(handler, events[index][1].type)) { - handler[events[index][1].type].call( - Object.assign( - { - sliceSerialize: events[index][2].sliceSerialize - }, - context - ), - events[index][1] - ) - } - } - - // Handle tokens still being open. - if (context.tokenStack.length > 0) { - const tail = context.tokenStack[context.tokenStack.length - 1] - const handler = tail[1] || defaultOnError - handler.call(context, undefined, tail[0]) - } - - // Figure out `root` position. - tree.position = { - start: lib_point( - events.length > 0 - ? events[0][1].start - : { - line: 1, - column: 1, - offset: 0 - } - ), - end: lib_point( - events.length > 0 - ? events[events.length - 2][1].end - : { - line: 1, - column: 1, - offset: 0 - } - ) - } - - // Call transforms. - index = -1 - while (++index < config.transforms.length) { - tree = config.transforms[index](tree) || tree - } - return tree - } - - /** - * @param {Array<Event>} events - * @param {number} start - * @param {number} length - * @returns {number} - */ - function prepareList(events, start, length) { - let index = start - 1 - let containerBalance = -1 - let listSpread = false - /** @type {Token | undefined} */ - let listItem - /** @type {number | undefined} */ - let lineIndex - /** @type {number | undefined} */ - let firstBlankLineIndex - /** @type {boolean | undefined} */ - let atMarker - while (++index <= length) { - const event = events[index] - if ( - event[1].type === 'listUnordered' || - event[1].type === 'listOrdered' || - event[1].type === 'blockQuote' - ) { - if (event[0] === 'enter') { - containerBalance++ - } else { - containerBalance-- - } - atMarker = undefined - } else if (event[1].type === 'lineEndingBlank') { - if (event[0] === 'enter') { - if ( - listItem && - !atMarker && - !containerBalance && - !firstBlankLineIndex - ) { - firstBlankLineIndex = index - } - atMarker = undefined - } - } else if ( - event[1].type === 'linePrefix' || - event[1].type === 'listItemValue' || - event[1].type === 'listItemMarker' || - event[1].type === 'listItemPrefix' || - event[1].type === 'listItemPrefixWhitespace' - ) { - // Empty. - } else { - atMarker = undefined - } - if ( - (!containerBalance && - event[0] === 'enter' && - event[1].type === 'listItemPrefix') || - (containerBalance === -1 && - event[0] === 'exit' && - (event[1].type === 'listUnordered' || - event[1].type === 'listOrdered')) - ) { - if (listItem) { - let tailIndex = index - lineIndex = undefined - while (tailIndex--) { - const tailEvent = events[tailIndex] - if ( - tailEvent[1].type === 'lineEnding' || - tailEvent[1].type === 'lineEndingBlank' - ) { - if (tailEvent[0] === 'exit') continue - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - listSpread = true - } - tailEvent[1].type = 'lineEnding' - lineIndex = tailIndex - } else if ( - tailEvent[1].type === 'linePrefix' || - tailEvent[1].type === 'blockQuotePrefix' || - tailEvent[1].type === 'blockQuotePrefixWhitespace' || - tailEvent[1].type === 'blockQuoteMarker' || - tailEvent[1].type === 'listItemIndent' - ) { - // Empty - } else { - break - } - } - if ( - firstBlankLineIndex && - (!lineIndex || firstBlankLineIndex < lineIndex) - ) { - listItem._spread = true - } - - // Fix position. - listItem.end = Object.assign( - {}, - lineIndex ? events[lineIndex][1].start : event[1].end - ) - events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) - index++ - length++ - } - - // Create a new list item. - if (event[1].type === 'listItemPrefix') { - listItem = { - type: 'listItem', - _spread: false, - start: Object.assign({}, event[1].start), - // @ts-expect-error: we’ll add `end` in a second. - end: undefined - } - // @ts-expect-error: `listItem` is most definitely defined, TS... - events.splice(index, 0, ['enter', listItem, event[2]]) - index++ - length++ - firstBlankLineIndex = undefined - atMarker = true - } - } - } - events[start][1]._spread = listSpread - return length - } - - /** - * Set data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @param {CompileData[Key]} [value] - * New value. - * @returns {void} - * Nothing. - */ - function setData(key, value) { - data[key] = value - } - - /** - * Get data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @returns {CompileData[Key]} - * Value. - */ - function getData(key) { - return data[key] - } - - /** - * Create an opener handle. - * - * @param {(token: Token) => Node} create - * Create a node. - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function opener(create, and) { - return open - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function open(token) { - enter.call(this, create(token), token) - if (and) and.call(this, token) - } - } - - /** - * @this {CompileContext} - * @returns {void} - */ - function buffer() { - this.stack.push({ - type: 'fragment', - children: [] - }) - } - - /** - * @template {Node} Kind - * Node type. - * @this {CompileContext} - * Context. - * @param {Kind} node - * Node to enter. - * @param {Token} token - * Corresponding token. - * @param {OnEnterError | undefined} [errorHandler] - * Handle the case where this token is open, but it is closed by something else. - * @returns {Kind} - * The given node. - */ - function enter(node, token, errorHandler) { - const parent = this.stack[this.stack.length - 1] - // @ts-expect-error: Assume `Node` can exist as a child of `parent`. - parent.children.push(node) - this.stack.push(node) - this.tokenStack.push([token, errorHandler]) - // @ts-expect-error: `end` will be patched later. - node.position = { - start: lib_point(token.start) - } - return node - } - - /** - * Create a closer handle. - * - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function closer(and) { - return close - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function close(token) { - if (and) and.call(this, token) - exit.call(this, token) - } - } - - /** - * @this {CompileContext} - * Context. - * @param {Token} token - * Corresponding token. - * @param {OnExitError | undefined} [onExitError] - * Handle the case where another token is open. - * @returns {Node} - * The closed node. - */ - function exit(token, onExitError) { - const node = this.stack.pop() - const open = this.tokenStack.pop() - if (!open) { - throw new Error( - 'Cannot close `' + - token.type + - '` (' + - stringifyPosition({ - start: token.start, - end: token.end - }) + - '): it’s not open' - ) - } else if (open[0].type !== token.type) { - if (onExitError) { - onExitError.call(this, token, open[0]) - } else { - const handler = open[1] || defaultOnError - handler.call(this, token, open[0]) - } - } - node.position.end = lib_point(token.end) - return node - } - - /** - * @this {CompileContext} - * @returns {string} - */ - function resume() { - return lib_toString(this.stack.pop()) - } - - // - // Handlers. - // - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistordered() { - setData('expectingFirstListItemValue', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistitemvalue(token) { - if (getData('expectingFirstListItemValue')) { - const ancestor = this.stack[this.stack.length - 2] - ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) - setData('expectingFirstListItemValue') - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfenceinfo() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.lang = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfencemeta() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.meta = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfence() { - // Exit if this is the closing fence. - if (getData('flowCodeInside')) return - this.buffer() - setData('flowCodeInside', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefenced() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') - setData('flowCodeInside') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodeindented() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/(\r?\n|\r)$/g, '') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitionlabelstring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - node.label = label - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiontitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiondestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitatxheadingsequence(token) { - const node = this.stack[this.stack.length - 1] - if (!node.depth) { - const depth = this.sliceSerialize(token).length - node.depth = depth - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadingtext() { - setData('setextHeadingSlurpLineEnding', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadinglinesequence(token) { - const node = this.stack[this.stack.length - 1] - node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheading() { - setData('setextHeadingSlurpLineEnding') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterdata(token) { - const node = this.stack[this.stack.length - 1] - let tail = node.children[node.children.length - 1] - if (!tail || tail.type !== 'text') { - // Add a new text node. - tail = text() - // @ts-expect-error: we’ll add `end` later. - tail.position = { - start: lib_point(token.start) - } - // @ts-expect-error: Assume `parent` accepts `text`. - node.children.push(tail) - } - this.stack.push(tail) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitdata(token) { - const tail = this.stack.pop() - tail.value += this.sliceSerialize(token) - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlineending(token) { - const context = this.stack[this.stack.length - 1] - // If we’re at a hard break, include the line ending in there. - if (getData('atHardBreak')) { - const tail = context.children[context.children.length - 1] - tail.position.end = lib_point(token.end) - setData('atHardBreak') - return - } - if ( - !getData('setextHeadingSlurpLineEnding') && - config.canContainEols.includes(context.type) - ) { - onenterdata.call(this, token) - onexitdata.call(this, token) - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithardbreak() { - setData('atHardBreak', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmlflow() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmltext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcodetext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlink() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitimage() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabeltext(token) { - const string = this.sliceSerialize(token) - const ancestor = this.stack[this.stack.length - 2] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - ancestor.label = decodeString(string) - // @ts-expect-error: same as above. - ancestor.identifier = normalizeIdentifier(string).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabel() { - const fragment = this.stack[this.stack.length - 1] - const value = this.resume() - const node = this.stack[this.stack.length - 1] - // Assume a reference. - setData('inReference', true) - if (node.type === 'link') { - /** @type {Array<StaticPhrasingContent>} */ - // @ts-expect-error: Assume static phrasing content. - const children = fragment.children - node.children = children - } else { - node.alt = value - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcedestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcetitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresource() { - setData('inReference') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterreference() { - setData('referenceType', 'collapsed') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitreferencestring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - node.label = label - // @ts-expect-error: same as above. - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - setData('referenceType', 'full') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcharacterreferencemarker(token) { - setData('characterReferenceType', token.type) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcharacterreferencevalue(token) { - const data = this.sliceSerialize(token) - const type = getData('characterReferenceType') - /** @type {string} */ - let value - if (type) { - value = decodeNumericCharacterReference( - data, - type === 'characterReferenceMarkerNumeric' ? 10 : 16 - ) - setData('characterReferenceType') - } else { - const result = decodeNamedCharacterReference(data) - value = result - } - const tail = this.stack.pop() - tail.value += value - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkprotocol(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = this.sliceSerialize(token) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkemail(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = 'mailto:' + this.sliceSerialize(token) - } - - // - // Creaters. - // - - /** @returns {Blockquote} */ - function blockQuote() { - return { - type: 'blockquote', - children: [] - } - } - - /** @returns {Code} */ - function codeFlow() { - return { - type: 'code', - lang: null, - meta: null, - value: '' - } - } - - /** @returns {InlineCode} */ - function codeText() { - return { - type: 'inlineCode', - value: '' - } - } - - /** @returns {Definition} */ - function definition() { - return { - type: 'definition', - identifier: '', - label: null, - title: null, - url: '' - } - } - - /** @returns {Emphasis} */ - function emphasis() { - return { - type: 'emphasis', - children: [] - } - } - - /** @returns {Heading} */ - function heading() { - // @ts-expect-error `depth` will be set later. - return { - type: 'heading', - depth: undefined, - children: [] - } - } - - /** @returns {Break} */ - function hardBreak() { - return { - type: 'break' - } - } - - /** @returns {HTML} */ - function html() { - return { - type: 'html', - value: '' - } - } - - /** @returns {Image} */ - function image() { - return { - type: 'image', - title: null, - url: '', - alt: null - } - } - - /** @returns {Link} */ - function link() { - return { - type: 'link', - title: null, - url: '', - children: [] - } - } - - /** - * @param {Token} token - * @returns {List} - */ - function list(token) { - return { - type: 'list', - ordered: token.type === 'listOrdered', - start: null, - spread: token._spread, - children: [] - } - } - - /** - * @param {Token} token - * @returns {ListItem} - */ - function listItem(token) { - return { - type: 'listItem', - spread: token._spread, - checked: null, - children: [] - } - } - - /** @returns {Paragraph} */ - function paragraph() { - return { - type: 'paragraph', - children: [] - } - } - - /** @returns {Strong} */ - function strong() { - return { - type: 'strong', - children: [] - } - } - - /** @returns {Text} */ - function text() { - return { - type: 'text', - value: '' - } - } - - /** @returns {ThematicBreak} */ - function thematicBreak() { - return { - type: 'thematicBreak' - } - } -} - -/** - * Copy a point-like value. - * - * @param {Point} d - * Point-like value. - * @returns {Point} - * unist point. - */ -function lib_point(d) { - return { - line: d.line, - column: d.column, - offset: d.offset - } -} - -/** - * @param {Config} combined - * @param {Array<Extension | Array<Extension>>} extensions - * @returns {void} - */ -function configure(combined, extensions) { - let index = -1 - while (++index < extensions.length) { - const value = extensions[index] - if (Array.isArray(value)) { - configure(combined, value) - } else { - extension(combined, value) - } - } -} - -/** - * @param {Config} combined - * @param {Extension} extension - * @returns {void} - */ -function extension(combined, extension) { - /** @type {keyof Extension} */ - let key - for (key in extension) { - if (lib_own.call(extension, key)) { - if (key === 'canContainEols') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'transforms') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'enter' || key === 'exit') { - const right = extension[key] - if (right) { - Object.assign(combined[key], right) - } - } - } - } -} - -/** @type {OnEnterError} */ -function defaultOnError(left, right) { - if (left) { - throw new Error( - 'Cannot close `' + - left.type + - '` (' + - stringifyPosition({ - start: left.start, - end: left.end - }) + - '): a different token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is open' - ) - } else { - throw new Error( - 'Cannot close document, a token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is still open' - ) - } -} - -// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js -var esm = __webpack_require__(60513); -;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-ca0c5216.js - - - -function preprocessMarkdown(markdown) { - const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); - const withoutExtraSpaces = (0,esm/* dedent */.T)(withoutMultipleNewlines); - return withoutExtraSpaces; -} -function markdownToLines(markdown) { - const preprocessedMarkdown = preprocessMarkdown(markdown); - const { children } = fromMarkdown(preprocessedMarkdown); - const lines = [[]]; - let currentLine = 0; - function processNode(node, parentType = "normal") { - if (node.type === "text") { - const textLines = node.value.split("\n"); - textLines.forEach((textLine, index) => { - if (index !== 0) { - currentLine++; - lines.push([]); - } - textLine.split(" ").forEach((word) => { - if (word) { - lines[currentLine].push({ content: word, type: parentType }); - } - }); - }); - } else if (node.type === "strong" || node.type === "emphasis") { - node.children.forEach((contentNode) => { - processNode(contentNode, node.type); - }); - } - } - children.forEach((treeNode) => { - if (treeNode.type === "paragraph") { - treeNode.children.forEach((contentNode) => { - processNode(contentNode); - }); - } - }); - return lines; -} -function markdownToHTML(markdown) { - const { children } = fromMarkdown(markdown); - function output(node) { - if (node.type === "text") { - return node.value.replace(/\n/g, "<br/>"); - } else if (node.type === "strong") { - return `<strong>${node.children.map(output).join("")}</strong>`; - } else if (node.type === "emphasis") { - return `<em>${node.children.map(output).join("")}</em>`; - } else if (node.type === "paragraph") { - return `<p>${node.children.map(output).join("")}</p>`; - } - return `Unsupported markdown: ${node.type}`; - } - return children.map(output).join(""); -} -function splitTextToChars(text) { - if (Intl.Segmenter) { - return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); - } - return [...text]; -} -function splitWordToFitWidth(checkFit, word) { - const characters = splitTextToChars(word.content); - return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); -} -function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { - if (remainingChars.length === 0) { - return [ - { content: usedChars.join(""), type }, - { content: "", type } - ]; - } - const [nextChar, ...rest] = remainingChars; - const newWord = [...usedChars, nextChar]; - if (checkFit([{ content: newWord.join(""), type }])) { - return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); - } - if (usedChars.length === 0 && nextChar) { - usedChars.push(nextChar); - remainingChars.shift(); - } - return [ - { content: usedChars.join(""), type }, - { content: remainingChars.join(""), type } - ]; -} -function splitLineToFitWidth(line, checkFit) { - if (line.some(({ content }) => content.includes("\n"))) { - throw new Error("splitLineToFitWidth does not support newlines in the line"); - } - return splitLineToFitWidthRecursion(line, checkFit); -} -function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { - if (words.length === 0) { - if (newLine.length > 0) { - lines.push(newLine); - } - return lines.length > 0 ? lines : []; - } - let joiner = ""; - if (words[0].content === " ") { - joiner = " "; - words.shift(); - } - const nextWord = words.shift() ?? { content: " ", type: "normal" }; - const lineWithNextWord = [...newLine]; - if (joiner !== "") { - lineWithNextWord.push({ content: joiner, type: "normal" }); - } - lineWithNextWord.push(nextWord); - if (checkFit(lineWithNextWord)) { - return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); - } - if (newLine.length > 0) { - lines.push(newLine); - words.unshift(nextWord); - } else if (nextWord.content) { - const [line, rest] = splitWordToFitWidth(checkFit, nextWord); - lines.push([line]); - if (rest.content) { - words.unshift(rest); - } - } - return splitLineToFitWidthRecursion(words, checkFit, lines); -} -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlSpan(element, node, width, classes, addBackground = false) { - const fo = element.append("foreignObject"); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - ` - <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" - ); - applyStyle(div, node.labelStyle); - div.style("display", "table-cell"); - div.style("white-space", "nowrap"); - div.style("max-width", width + "px"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - if (addBackground) { - div.attr("class", "labelBkg"); - } - let bbox = div.node().getBoundingClientRect(); - if (bbox.width === width) { - div.style("display", "table"); - div.style("white-space", "break-spaces"); - div.style("width", width + "px"); - bbox = div.node().getBoundingClientRect(); - } - fo.style("width", bbox.width); - fo.style("height", bbox.height); - return fo.node(); -} -function createTspan(textElement, lineIndex, lineHeight) { - return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); -} -function computeWidthOfText(parentNode, lineHeight, line) { - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, line); - const textLength = testSpan.node().getComputedTextLength(); - testElement.remove(); - return textLength; -} -function computeDimensionOfText(parentNode, lineHeight, text) { - var _a; - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); - const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); - if (textDimension) { - testElement.remove(); - } - return textDimension; -} -function createFormattedText(width, g, structuredText, addBackground = false) { - const lineHeight = 1.1; - const labelGroup = g.append("g"); - const bkg = labelGroup.insert("rect").attr("class", "background"); - const textElement = labelGroup.append("text").attr("y", "-10.1"); - let lineIndex = 0; - for (const line of structuredText) { - const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; - const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); - for (const preparedLine of linesUnderWidth) { - const tspan = createTspan(textElement, lineIndex, lineHeight); - updateTextContentAndStyles(tspan, preparedLine); - lineIndex++; - } - } - if (addBackground) { - const bbox = textElement.node().getBBox(); - const padding = 2; - bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); - return labelGroup.node(); - } else { - return textElement.node(); - } -} -function updateTextContentAndStyles(tspan, wrappedLine) { - tspan.text(""); - wrappedLine.forEach((word, index) => { - const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); - if (index === 0) { - innerTspan.text(word.content); - } else { - innerTspan.text(" " + word.content); - } - }); -} -const createText = (el, text = "", { - style = "", - isTitle = false, - classes = "", - useHtmlLabels = true, - isNode = true, - width = 200, - addSvgBackground = false -} = {}) => { - mermaid_6dc72991.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); - if (useHtmlLabels) { - const htmlText = markdownToHTML(text); - const node = { - isNode, - label: (0,mermaid_6dc72991.M)(htmlText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - labelStyle: style.replace("fill:", "color:") - }; - const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); - return vertexNode; - } else { - const structuredText = markdownToLines(text); - const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); - return svgLabel; - } -}; - - - -/***/ }), - -/***/ 98055: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ a: () => (/* binding */ insertMarkers$1), -/* harmony export */ b: () => (/* binding */ clear$1), -/* harmony export */ c: () => (/* binding */ createLabel$1), -/* harmony export */ d: () => (/* binding */ clear), -/* harmony export */ e: () => (/* binding */ insertNode), -/* harmony export */ f: () => (/* binding */ insertEdgeLabel), -/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), -/* harmony export */ h: () => (/* binding */ insertEdge), -/* harmony export */ i: () => (/* binding */ intersectRect$1), -/* harmony export */ j: () => (/* binding */ positionEdgeLabel), -/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), -/* harmony export */ l: () => (/* binding */ labelHelper), -/* harmony export */ m: () => (/* binding */ addEdgeMarkers), -/* harmony export */ p: () => (/* binding */ positionNode), -/* harmony export */ s: () => (/* binding */ setNodeElem), -/* harmony export */ u: () => (/* binding */ updateNodeBounds) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(18897); - - - -const insertMarkers = (elem, markerArray, type, id) => { - markerArray.forEach((markerName) => { - markers[markerName](elem, type, id); - }); -}; -const extension = (elem, type, id) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); -}; -const composition = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); -}; -const aggregation = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); -}; -const dependency = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); -}; -const lollipop = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); - elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); -}; -const point = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); -}; -const circle$1 = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); -}; -const cross = (elem, type, id) => { - elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); - elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); -}; -const barb = (elem, type, id) => { - elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); -}; -const markers = { - extension, - composition, - aggregation, - dependency, - lollipop, - point, - circle: circle$1, - cross, - barb -}; -const insertMarkers$1 = insertMarkers; -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlLabel(node) { - const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" - ); - applyStyle(div, node.labelStyle); - div.style("display", "inline-block"); - div.style("white-space", "nowrap"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - return fo.node(); -} -const createLabel = (_vertexText, style, isTitle, isNode) => { - let vertexText = _vertexText || ""; - if (typeof vertexText === "object") { - vertexText = vertexText[0]; - } - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - vertexText = vertexText.replace(/\\n|\n/g, "<br />"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); - const node = { - isNode, - label: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(vertexText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - labelStyle: style.replace("fill:", "color:") - }; - let vertexNode = addHtmlLabel(node); - return vertexNode; - } else { - const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); - svgLabel.setAttribute("style", style.replace("color:", "fill:")); - let rows = []; - if (typeof vertexText === "string") { - rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); - } else if (Array.isArray(vertexText)) { - rows = vertexText; - } else { - rows = []; - } - for (const row of rows) { - const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); - tspan.setAttribute("dy", "1em"); - tspan.setAttribute("x", "0"); - if (isTitle) { - tspan.setAttribute("class", "title-row"); - } else { - tspan.setAttribute("class", "row"); - } - tspan.textContent = row.trim(); - svgLabel.appendChild(tspan); - } - return svgLabel; - } -}; -const createLabel$1 = createLabel; -const labelHelper = async (parent, node, _classes, isNode) => { - let classes; - const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); - if (!_classes) { - classes = "node default"; - } else { - classes = _classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); - let labelText; - if (node.labelText === void 0) { - labelText = ""; - } else { - labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; - } - const textNode = label.node(); - let text; - if (node.labelType === "markdown") { - text = (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { - useHtmlLabels, - width: node.width || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, - classes: "markdown-node-label" - }); - } else { - text = textNode.appendChild( - createLabel$1( - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.M)(labelText), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)()), - node.labelStyle, - false, - isNode - ) - ); - } - let bbox = text.getBBox(); - const halfPadding = node.padding / 2; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); - const images = div.getElementsByTagName("img"); - if (images) { - const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; - await Promise.all( - [...images].map( - (img) => new Promise((res) => { - function setupImage() { - img.style.display = "flex"; - img.style.flexDirection = "column"; - if (noImgText) { - const bodyFontSize = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; - const enlargingFactor = 5; - const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; - img.style.minWidth = width; - img.style.maxWidth = width; - } else { - img.style.width = "100%"; - } - res(img); - } - setTimeout(() => { - if (img.complete) { - setupImage(); - } - }); - img.addEventListener("error", setupImage); - img.addEventListener("load", setupImage); - }) - ) - ); - } - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (useHtmlLabels) { - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - } else { - label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); - } - if (node.centerLabel) { - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - } - label.insert("rect", ":first-child"); - return { shapeSvg, bbox, halfPadding, label }; -}; -const updateNodeBounds = (node, element) => { - const bbox = element.node().getBBox(); - node.width = bbox.width; - node.height = bbox.height; -}; -function insertPolygonShape(parent, w, h, points) { - return parent.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); -} -function intersectNode(node, point2) { - return node.intersect(point2); -} -function intersectEllipse(node, rx, ry, point2) { - var cx = node.x; - var cy = node.y; - var px = cx - point2.x; - var py = cy - point2.y; - var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); - var dx = Math.abs(rx * ry * px / det); - if (point2.x < cx) { - dx = -dx; - } - var dy = Math.abs(rx * ry * py / det); - if (point2.y < cy) { - dy = -dy; - } - return { x: cx + dx, y: cy + dy }; -} -function intersectCircle(node, rx, point2) { - return intersectEllipse(node, rx, rx, point2); -} -function intersectLine(p1, p2, q1, q2) { - var a1, a2, b1, b2, c1, c2; - var r1, r2, r3, r4; - var denom, offset, num; - var x, y; - a1 = p2.y - p1.y; - b1 = p1.x - p2.x; - c1 = p2.x * p1.y - p1.x * p2.y; - r3 = a1 * q1.x + b1 * q1.y + c1; - r4 = a1 * q2.x + b1 * q2.y + c1; - if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { - return; - } - a2 = q2.y - q1.y; - b2 = q1.x - q2.x; - c2 = q2.x * q1.y - q1.x * q2.y; - r1 = a2 * p1.x + b2 * p1.y + c2; - r2 = a2 * p2.x + b2 * p2.y + c2; - if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { - return; - } - denom = a1 * b2 - a2 * b1; - if (denom === 0) { - return; - } - offset = Math.abs(denom / 2); - num = b1 * c2 - b2 * c1; - x = num < 0 ? (num - offset) / denom : (num + offset) / denom; - num = a2 * c1 - a1 * c2; - y = num < 0 ? (num - offset) / denom : (num + offset) / denom; - return { x, y }; -} -function sameSign(r1, r2) { - return r1 * r2 > 0; -} -function intersectPolygon(node, polyPoints, point2) { - var x1 = node.x; - var y1 = node.y; - var intersections = []; - var minX = Number.POSITIVE_INFINITY; - var minY = Number.POSITIVE_INFINITY; - if (typeof polyPoints.forEach === "function") { - polyPoints.forEach(function(entry) { - minX = Math.min(minX, entry.x); - minY = Math.min(minY, entry.y); - }); - } else { - minX = Math.min(minX, polyPoints.x); - minY = Math.min(minY, polyPoints.y); - } - var left = x1 - node.width / 2 - minX; - var top = y1 - node.height / 2 - minY; - for (var i = 0; i < polyPoints.length; i++) { - var p1 = polyPoints[i]; - var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; - var intersect2 = intersectLine( - node, - point2, - { x: left + p1.x, y: top + p1.y }, - { x: left + p2.x, y: top + p2.y } - ); - if (intersect2) { - intersections.push(intersect2); - } - } - if (!intersections.length) { - return node; - } - if (intersections.length > 1) { - intersections.sort(function(p, q) { - var pdx = p.x - point2.x; - var pdy = p.y - point2.y; - var distp = Math.sqrt(pdx * pdx + pdy * pdy); - var qdx = q.x - point2.x; - var qdy = q.y - point2.y; - var distq = Math.sqrt(qdx * qdx + qdy * qdy); - return distp < distq ? -1 : distp === distq ? 0 : 1; - }); - } - return intersections[0]; -} -const intersectRect = (node, point2) => { - var x = node.x; - var y = node.y; - var dx = point2.x - x; - var dy = point2.y - y; - var w = node.width / 2; - var h = node.height / 2; - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - if (dy < 0) { - h = -h; - } - sx = dy === 0 ? 0 : h * dx / dy; - sy = h; - } else { - if (dx < 0) { - w = -w; - } - sx = w; - sy = dx === 0 ? 0 : w * dy / dx; - } - return { x: x + sx, y: y + sy }; -}; -const intersectRect$1 = intersectRect; -const intersect = { - node: intersectNode, - circle: intersectCircle, - ellipse: intersectEllipse, - polygon: intersectPolygon, - rect: intersectRect$1 -}; -const note = async (parent, node) => { - const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; - if (!useHtmlLabels) { - node.centerLabel = true; - } - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes, - true - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); - const rect2 = shapeSvg.insert("rect", ":first-child"); - rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const note$1 = note; -const expandAndDeduplicateDirections = (directions) => { - const uniqueDirections = /* @__PURE__ */ new Set(); - for (const direction of directions) { - switch (direction) { - case "x": - uniqueDirections.add("right"); - uniqueDirections.add("left"); - break; - case "y": - uniqueDirections.add("up"); - uniqueDirections.add("down"); - break; - default: - uniqueDirections.add(direction); - break; - } - } - return uniqueDirections; -}; -const getArrowPoints = (duplicatedDirections, bbox, node) => { - const directions = expandAndDeduplicateDirections(duplicatedDirections); - const f = 2; - const height = bbox.height + 2 * node.padding; - const midpoint = height / f; - const width = bbox.width + 2 * midpoint + node.padding; - const padding = node.padding / 2; - if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { - return [ - // Bottom - { x: 0, y: 0 }, - { x: midpoint, y: 0 }, - { x: width / 2, y: 2 * padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: 0 }, - // Right - { x: width, y: -height / 3 }, - { x: width + 2 * padding, y: -height / 2 }, - { x: width, y: -2 * height / 3 }, - { x: width, y: -height }, - // Top - { x: width - midpoint, y: -height }, - { x: width / 2, y: -height - 2 * padding }, - { x: midpoint, y: -height }, - // Left - { x: 0, y: -height }, - { x: 0, y: -2 * height / 3 }, - { x: -2 * padding, y: -height / 2 }, - { x: 0, y: -height / 3 } - ]; - } - if (directions.has("right") && directions.has("left") && directions.has("up")) { - return [ - { x: midpoint, y: 0 }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("right") && directions.has("left") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: midpoint, y: -height }, - { x: width - midpoint, y: -height }, - { x: width, y: 0 } - ]; - } - if (directions.has("right") && directions.has("up") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: width, y: -midpoint }, - { x: width, y: -height + midpoint }, - { x: 0, y: -height } - ]; - } - if (directions.has("left") && directions.has("up") && directions.has("down")) { - return [ - { x: width, y: 0 }, - { x: 0, y: -midpoint }, - { x: 0, y: -height + midpoint }, - { x: width, y: -height } - ]; - } - if (directions.has("right") && directions.has("left")) { - return [ - { x: midpoint, y: 0 }, - { x: midpoint, y: -padding }, - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: width - midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("up") && directions.has("down")) { - return [ - // Bottom center - { x: width / 2, y: 0 }, - // Left pont of bottom arrow - { x: 0, y: -padding }, - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: 0, y: -height + padding }, - // Top of arrow - { x: width / 2, y: -height }, - { x: width, y: -height + padding }, - // Top of right vertical bar - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding }, - { x: width, y: -padding } - ]; - } - if (directions.has("right") && directions.has("up")) { - return [ - { x: 0, y: 0 }, - { x: width, y: -midpoint }, - { x: 0, y: -height } - ]; - } - if (directions.has("right") && directions.has("down")) { - return [ - { x: 0, y: 0 }, - { x: width, y: 0 }, - { x: 0, y: -height } - ]; - } - if (directions.has("left") && directions.has("up")) { - return [ - { x: width, y: 0 }, - { x: 0, y: -midpoint }, - { x: width, y: -height } - ]; - } - if (directions.has("left") && directions.has("down")) { - return [ - { x: width, y: 0 }, - { x: 0, y: 0 }, - { x: width, y: -height } - ]; - } - if (directions.has("right")) { - return [ - { x: midpoint, y: -padding }, - { x: midpoint, y: -padding }, - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: 0 }, - { x: width, y: -height / 2 }, - { x: width - midpoint, y: -height }, - { x: width - midpoint, y: -height + padding }, - // top left corner of arrow - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding } - ]; - } - if (directions.has("left")) { - return [ - { x: midpoint, y: 0 }, - { x: midpoint, y: -padding }, - // Two points, the right corners - { x: width - midpoint, y: -padding }, - { x: width - midpoint, y: -height + padding }, - { x: midpoint, y: -height + padding }, - { x: midpoint, y: -height }, - { x: 0, y: -height / 2 } - ]; - } - if (directions.has("up")) { - return [ - // Bottom center - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: 0, y: -height + padding }, - // Top of arrow - { x: width / 2, y: -height }, - { x: width, y: -height + padding }, - // Top of right vertical bar - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding } - ]; - } - if (directions.has("down")) { - return [ - // Bottom center - { x: width / 2, y: 0 }, - // Left pont of bottom arrow - { x: 0, y: -padding }, - { x: midpoint, y: -padding }, - // Left top over vertical section - { x: midpoint, y: -height + padding }, - { x: width - midpoint, y: -height + padding }, - { x: width - midpoint, y: -padding }, - { x: width, y: -padding } - ]; - } - return [{ x: 0, y: 0 }]; -}; -const formatClass = (str) => { - if (str) { - return " " + str; - } - return ""; -}; -const getClassesFromNode = (node, otherClasses) => { - return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( - node.class - )}`; -}; -const question = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const s = w + h; - const points = [ - { x: s / 2, y: 0 }, - { x: s, y: -s / 2 }, - { x: s / 2, y: -s }, - { x: 0, y: -s / 2 } - ]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); - const questionElem = insertPolygonShape(shapeSvg, s, s, points); - questionElem.attr("style", node.style); - updateNodeBounds(node, questionElem); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const choice = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const s = 28; - const points = [ - { x: 0, y: s / 2 }, - { x: s / 2, y: 0 }, - { x: 0, y: -s / 2 }, - { x: -s / 2, y: 0 } - ]; - const choice2 = shapeSvg.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ); - choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); - node.width = 28; - node.height = 28; - node.intersect = function(point2) { - return intersect.circle(node, 14, point2); - }; - return shapeSvg; -}; -const hexagon = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const f = 4; - const h = bbox.height + node.padding; - const m = h / f; - const w = bbox.width + 2 * m + node.padding; - const points = [ - { x: m, y: 0 }, - { x: w - m, y: 0 }, - { x: w, y: -h / 2 }, - { x: w - m, y: -h }, - { x: m, y: -h }, - { x: 0, y: -h / 2 } - ]; - const hex = insertPolygonShape(shapeSvg, w, h, points); - hex.attr("style", node.style); - updateNodeBounds(node, hex); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const block_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); - const f = 2; - const h = bbox.height + 2 * node.padding; - const m = h / f; - const w = bbox.width + 2 * m + node.padding; - const points = getArrowPoints(node.directions, bbox, node); - const blockArrow = insertPolygonShape(shapeSvg, w, h, points); - blockArrow.attr("style", node.style); - updateNodeBounds(node, blockArrow); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const rect_left_inv_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -h / 2, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: -h / 2, y: -h }, - { x: 0, y: -h / 2 } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - node.width = w + h; - node.height = h; - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const lean_right = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const lean_left = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 2 * h / 6, y: 0 }, - { x: w + h / 6, y: 0 }, - { x: w - 2 * h / 6, y: -h }, - { x: -h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const trapezoid = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w + 2 * h / 6, y: 0 }, - { x: w - h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const inv_trapezoid = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: -2 * h / 6, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const rect_right_inv_arrow = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 0, y: 0 }, - { x: w + h / 2, y: 0 }, - { x: w, y: -h / 2 }, - { x: w + h / 2, y: -h }, - { x: 0, y: -h } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const cylinder = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const rx = w / 2; - const ry = rx / (2.5 + w / 50); - const h = bbox.height + ry + node.padding; - const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; - const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); - updateNodeBounds(node, el); - node.intersect = function(point2) { - const pos = intersect.rect(node, point2); - const x = pos.x - node.x; - if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { - let y = ry * ry * (1 - x * x / (rx * rx)); - if (y != 0) { - y = Math.sqrt(y); - } - y = ry - y; - if (point2.y - node.y > 0) { - y = -y; - } - pos.y += y; - } - return pos; - }; - return shapeSvg; -}; -const rect = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes + " " + node.class, - true - ); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = node.positioned ? node.width : bbox.width + node.padding; - const totalHeight = node.positioned ? node.height : bbox.height + node.padding; - const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; - const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; - rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const composite = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - "node " + node.classes, - true - ); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = node.positioned ? node.width : bbox.width + node.padding; - const totalHeight = node.positioned ? node.height : bbox.height + node.padding; - const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; - const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; - rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const labelRect = async (parent, node) => { - const { shapeSvg } = await labelHelper(parent, node, "label", true); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const totalWidth = 0; - const totalHeight = 0; - rect2.attr("width", totalWidth).attr("height", totalHeight); - shapeSvg.attr("class", "label edgeLabel"); - if (node.props) { - const propKeys = new Set(Object.keys(node.props)); - if (node.props.borders) { - applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); - propKeys.delete("borders"); - } - propKeys.forEach((propKey) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); - }); - } - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { - const strokeDashArray = []; - const addBorder = (length) => { - strokeDashArray.push(length, 0); - }; - const skipBorder = (length) => { - strokeDashArray.push(0, length); - }; - if (borders.includes("t")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); - addBorder(totalWidth); - } else { - skipBorder(totalWidth); - } - if (borders.includes("r")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); - addBorder(totalHeight); - } else { - skipBorder(totalHeight); - } - if (borders.includes("b")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); - addBorder(totalWidth); - } else { - skipBorder(totalWidth); - } - if (borders.includes("l")) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); - addBorder(totalHeight); - } else { - skipBorder(totalHeight); - } - rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); -} -const rectWithTitle = (parent, node) => { - let classes; - if (!node.classes) { - classes = "node default"; - } else { - classes = "node " + node.classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const innerLine = shapeSvg.insert("line"); - const label = shapeSvg.insert("g").attr("class", "label"); - const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; - let title = ""; - if (typeof text2 === "object") { - title = text2[0]; - } else { - title = text2; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); - const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); - let bbox = { width: 0, height: 0 }; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); - const textRows = text2.slice(1, text2.length); - let titleBox = text.getBBox(); - const descr = label.node().appendChild( - createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) - ); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = descr.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - const halfPadding = node.padding / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(descr).attr( - "transform", - "translate( " + // (titleBox.width - bbox.width) / 2 + - (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" - ); - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(text).attr( - "transform", - "translate( " + // (titleBox.width - bbox.width) / 2 + - (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" - ); - bbox = label.node().getBBox(); - label.attr( - "transform", - "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" - ); - rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const stadium = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const h = bbox.height + node.padding; - const w = bbox.width + h / 4 + node.padding; - const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const circle = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); - return intersect.circle(node, bbox.width / 2 + halfPadding, point2); - }; - return shapeSvg; -}; -const doublecircle = async (parent, node) => { - const { shapeSvg, bbox, halfPadding } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const gap = 5; - const circleGroup = shapeSvg.insert("g", ":first-child"); - const outerCircle = circleGroup.insert("circle"); - const innerCircle = circleGroup.insert("circle"); - circleGroup.attr("class", node.class); - outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); - innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); - updateNodeBounds(node, outerCircle); - node.intersect = function(point2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); - return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); - }; - return shapeSvg; -}; -const subroutine = async (parent, node) => { - const { shapeSvg, bbox } = await labelHelper( - parent, - node, - getClassesFromNode(node, void 0), - true - ); - const w = bbox.width + node.padding; - const h = bbox.height + node.padding; - const points = [ - { x: 0, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: 0, y: -h }, - { x: 0, y: 0 }, - { x: -8, y: 0 }, - { x: w + 8, y: 0 }, - { x: w + 8, y: -h }, - { x: -8, y: -h }, - { x: -8, y: 0 } - ]; - const el = insertPolygonShape(shapeSvg, w, h, points); - el.attr("style", node.style); - updateNodeBounds(node, el); - node.intersect = function(point2) { - return intersect.polygon(node, points, point2); - }; - return shapeSvg; -}; -const start = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - return intersect.circle(node, 7, point2); - }; - return shapeSvg; -}; -const forkJoin = (parent, node, dir) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - let width = 70; - let height = 10; - if (dir === "LR") { - width = 10; - height = 70; - } - const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); - updateNodeBounds(node, shape); - node.height = node.height + node.padding / 2; - node.width = node.width + node.padding / 2; - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const end = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); - const innerCircle = shapeSvg.insert("circle", ":first-child"); - const circle2 = shapeSvg.insert("circle", ":first-child"); - circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); - innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); - updateNodeBounds(node, circle2); - node.intersect = function(point2) { - return intersect.circle(node, 7, point2); - }; - return shapeSvg; -}; -const class_box = (parent, node) => { - const halfPadding = node.padding / 2; - const rowPadding = 4; - const lineHeight = 8; - let classes; - if (!node.classes) { - classes = "node default"; - } else { - classes = "node " + node.classes; - } - const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const topLine = shapeSvg.insert("line"); - const bottomLine = shapeSvg.insert("line"); - let maxWidth = 0; - let maxHeight = rowPadding; - const labelContainer = shapeSvg.insert("g").attr("class", "label"); - let verticalPos = 0; - const hasInterface = node.classData.annotations && node.classData.annotations[0]; - const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; - const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); - let interfaceBBox = interfaceLabel.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = interfaceLabel.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel); - interfaceBBox = div.getBoundingClientRect(); - dv.attr("width", interfaceBBox.width); - dv.attr("height", interfaceBBox.height); - } - if (node.classData.annotations[0]) { - maxHeight += interfaceBBox.height + rowPadding; - maxWidth += interfaceBBox.width; - } - let classTitleString = node.classData.label; - if (node.classData.type !== void 0 && node.classData.type !== "") { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - classTitleString += "<" + node.classData.type + ">"; - } else { - classTitleString += "<" + node.classData.type + ">"; - } - } - const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr("class", "classTitle"); - let classTitleBBox = classTitleLabel.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = classTitleLabel.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel); - classTitleBBox = div.getBoundingClientRect(); - dv.attr("width", classTitleBBox.width); - dv.attr("height", classTitleBBox.height); - } - maxHeight += classTitleBBox.height + rowPadding; - if (classTitleBBox.width > maxWidth) { - maxWidth = classTitleBBox.width; - } - const classAttributes = []; - node.classData.members.forEach((member) => { - const parsedInfo = member.getDisplayDetails(); - let parsedText = parsedInfo.displayText; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); - } - const lbl = labelContainer.node().appendChild( - createLabel$1( - parsedText, - parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, - true, - true - ) - ); - let bbox = lbl.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = lbl.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (bbox.width > maxWidth) { - maxWidth = bbox.width; - } - maxHeight += bbox.height + rowPadding; - classAttributes.push(lbl); - }); - maxHeight += lineHeight; - const classMethods = []; - node.classData.methods.forEach((member) => { - const parsedInfo = member.getDisplayDetails(); - let displayText = parsedInfo.displayText; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { - displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); - } - const lbl = labelContainer.node().appendChild( - createLabel$1( - displayText, - parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, - true, - true - ) - ); - let bbox = lbl.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { - const div = lbl.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - if (bbox.width > maxWidth) { - maxWidth = bbox.width; - } - maxHeight += bbox.height + rowPadding; - classMethods.push(lbl); - }); - maxHeight += lineHeight; - if (hasInterface) { - let diffX2 = (maxWidth - interfaceBBox.width) / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(interfaceLabel).attr( - "transform", - "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" - ); - verticalPos = interfaceBBox.height + rowPadding; - } - let diffX = (maxWidth - classTitleBBox.width) / 2; - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(classTitleLabel).attr( - "transform", - "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" - ); - verticalPos += classTitleBBox.height + rowPadding; - topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); - verticalPos += lineHeight; - classAttributes.forEach((lbl) => { - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( - "transform", - "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" - ); - const memberBBox = lbl == null ? void 0 : lbl.getBBox(); - verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; - }); - verticalPos += lineHeight; - bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); - verticalPos += lineHeight; - classMethods.forEach((lbl) => { - (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(lbl).attr( - "transform", - "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" - ); - const memberBBox = lbl == null ? void 0 : lbl.getBBox(); - verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; - }); - rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); - updateNodeBounds(node, rect2); - node.intersect = function(point2) { - return intersect.rect(node, point2); - }; - return shapeSvg; -}; -const shapes = { - rhombus: question, - composite, - question, - rect, - labelRect, - rectWithTitle, - choice, - circle, - doublecircle, - stadium, - hexagon, - block_arrow, - rect_left_inv_arrow, - lean_right, - lean_left, - trapezoid, - inv_trapezoid, - rect_right_inv_arrow, - cylinder, - start, - end, - note: note$1, - subroutine, - fork: forkJoin, - join: forkJoin, - class_box -}; -let nodeElems = {}; -const insertNode = async (elem, node, dir) => { - let newEl; - let el; - if (node.link) { - let target; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { - target = "_top"; - } else if (node.linkTarget) { - target = node.linkTarget || "_blank"; - } - newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); - el = await shapes[node.shape](newEl, node, dir); - } else { - el = await shapes[node.shape](elem, node, dir); - newEl = el; - } - if (node.tooltip) { - el.attr("title", node.tooltip); - } - if (node.class) { - el.attr("class", "node default " + node.class); - } - newEl.attr("data-node", "true"); - newEl.attr("data-id", node.id); - nodeElems[node.id] = newEl; - if (node.haveCallback) { - nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); - } - return newEl; -}; -const setNodeElem = (elem, node) => { - nodeElems[node.id] = elem; -}; -const clear$1 = () => { - nodeElems = {}; -}; -const positionNode = (node) => { - const el = nodeElems[node.id]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( - "Transforming node", - node.diff, - node, - "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" - ); - const padding = 8; - const diff = node.diff || 0; - if (node.clusterNode) { - el.attr( - "transform", - "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" - ); - } else { - el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); - } - return diff; -}; -const getSubGraphTitleMargins = ({ - flowchart -}) => { - var _a, _b; - const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; - const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; - const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; - return { - subGraphTitleTopMargin, - subGraphTitleBottomMargin, - subGraphTitleTotalMargin - }; -}; -const markerOffsets = { - aggregation: 18, - extension: 18, - composition: 18, - dependency: 6, - lollipop: 13.5, - arrow_point: 5.3 -}; -function calculateDeltaAndAngle(point1, point2) { - if (point1 === void 0 || point2 === void 0) { - return { angle: 0, deltaX: 0, deltaY: 0 }; - } - point1 = pointTransformer(point1); - point2 = pointTransformer(point2); - const [x1, y1] = [point1.x, point1.y]; - const [x2, y2] = [point2.x, point2.y]; - const deltaX = x2 - x1; - const deltaY = y2 - y1; - return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; -} -const pointTransformer = (data) => { - if (Array.isArray(data)) { - return { x: data[0], y: data[1] }; - } - return data; -}; -const getLineFunctionsWithOffset = (edge) => { - return { - x: function(d, i, data) { - let offset = 0; - if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { - const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); - offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); - } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { - const { angle, deltaX } = calculateDeltaAndAngle( - data[data.length - 1], - data[data.length - 2] - ); - offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); - } - return pointTransformer(d).x + offset; - }, - y: function(d, i, data) { - let offset = 0; - if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { - const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); - offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); - } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { - const { angle, deltaY } = calculateDeltaAndAngle( - data[data.length - 1], - data[data.length - 2] - ); - offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); - } - return pointTransformer(d).y + offset; - } - }; -}; -const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { - if (edge.arrowTypeStart) { - addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); - } - if (edge.arrowTypeEnd) { - addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); - } -}; -const arrowTypesMap = { - arrow_cross: "cross", - arrow_point: "point", - arrow_barb: "barb", - arrow_circle: "circle", - aggregation: "aggregation", - extension: "extension", - composition: "composition", - dependency: "dependency", - lollipop: "lollipop" -}; -const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { - const endMarkerType = arrowTypesMap[arrowType]; - if (!endMarkerType) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); - return; - } - const suffix = position === "start" ? "Start" : "End"; - svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); -}; -let edgeLabels = {}; -let terminalLabels = {}; -const clear = () => { - edgeLabels = {}; - terminalLabels = {}; -}; -const insertEdgeLabel = (elem, edge) => { - const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); - const labelElement = edge.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { - style: edge.labelStyle, - useHtmlLabels, - addSvgBackground: true - }) : createLabel$1(edge.label, edge.labelStyle); - const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); - const label = edgeLabel.insert("g").attr("class", "label"); - label.node().appendChild(labelElement); - let bbox = labelElement.getBBox(); - if (useHtmlLabels) { - const div = labelElement.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(labelElement); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); - edgeLabels[edge.id] = edgeLabel; - edge.width = bbox.width; - edge.height = bbox.height; - let fo; - if (edge.startLabelLeft) { - const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); - const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); - const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(startLabelElement); - const slBox = startLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].startLeft = startEdgeLabelLeft; - setTerminalWidth(fo, edge.startLabelLeft); - } - if (edge.startLabelRight) { - const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); - const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); - const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); - fo = startEdgeLabelRight.node().appendChild(startLabelElement); - inner.node().appendChild(startLabelElement); - const slBox = startLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].startRight = startEdgeLabelRight; - setTerminalWidth(fo, edge.startLabelRight); - } - if (edge.endLabelLeft) { - const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); - const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); - const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(endLabelElement); - const slBox = endLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - endEdgeLabelLeft.node().appendChild(endLabelElement); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].endLeft = endEdgeLabelLeft; - setTerminalWidth(fo, edge.endLabelLeft); - } - if (edge.endLabelRight) { - const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); - const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); - const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); - fo = inner.node().appendChild(endLabelElement); - const slBox = endLabelElement.getBBox(); - inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); - endEdgeLabelRight.node().appendChild(endLabelElement); - if (!terminalLabels[edge.id]) { - terminalLabels[edge.id] = {}; - } - terminalLabels[edge.id].endRight = endEdgeLabelRight; - setTerminalWidth(fo, edge.endLabelRight); - } - return labelElement; -}; -function setTerminalWidth(fo, value) { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { - fo.style.width = value.length * 9 + "px"; - fo.style.height = "12px"; - } -} -const positionEdgeLabel = (edge, paths) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); - let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); - if (edge.label) { - const el = edgeLabels[edge.id]; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( - "Moving label " + edge.label + " from (", - x, - ",", - y, - ") to (", - pos.x, - ",", - pos.y, - ") abc88" - ); - if (paths.updatedPath) { - x = pos.x; - y = pos.y; - } - } - el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); - } - if (edge.startLabelLeft) { - const el = terminalLabels[edge.id].startLeft; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.startLabelRight) { - const el = terminalLabels[edge.id].startRight; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( - edge.arrowTypeStart ? 10 : 0, - "start_right", - path - ); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.endLabelLeft) { - const el = terminalLabels[edge.id].endLeft; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } - if (edge.endLabelRight) { - const el = terminalLabels[edge.id].endRight; - let x = edge.x; - let y = edge.y; - if (path) { - const pos = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); - x = pos.x; - y = pos.y; - } - el.attr("transform", `translate(${x}, ${y})`); - } -}; -const outsideNode = (node, point2) => { - const x = node.x; - const y = node.y; - const dx = Math.abs(point2.x - x); - const dy = Math.abs(point2.y - y); - const w = node.width / 2; - const h = node.height / 2; - if (dx >= w || dy >= h) { - return true; - } - return false; -}; -const intersection = (node, outsidePoint, insidePoint) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: - outsidePoint: ${JSON.stringify(outsidePoint)} - insidePoint : ${JSON.stringify(insidePoint)} - node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); - const x = node.x; - const y = node.y; - const dx = Math.abs(x - insidePoint.x); - const w = node.width / 2; - let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; - const h = node.height / 2; - const Q = Math.abs(outsidePoint.y - insidePoint.y); - const R = Math.abs(outsidePoint.x - insidePoint.x); - if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { - let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; - r = R * q / Q; - const res = { - x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, - y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q - }; - if (r === 0) { - res.x = outsidePoint.x; - res.y = outsidePoint.y; - } - if (R === 0) { - res.x = outsidePoint.x; - } - if (Q === 0) { - res.y = outsidePoint.y; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); - return res; - } else { - if (insidePoint.x < outsidePoint.x) { - r = outsidePoint.x - w - x; - } else { - r = x - w - outsidePoint.x; - } - let q = Q * r / R; - let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; - let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); - if (r === 0) { - _x = outsidePoint.x; - _y = outsidePoint.y; - } - if (R === 0) { - _x = outsidePoint.x; - } - if (Q === 0) { - _y = outsidePoint.y; - } - return { x: _x, y: _y }; - } -}; -const cutPathAtIntersect = (_points, boundaryNode) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundaryNode); - let points = []; - let lastPointOutside = _points[0]; - let isInside = false; - _points.forEach((point2) => { - if (!outsideNode(boundaryNode, point2) && !isInside) { - const inter = intersection(boundaryNode, lastPointOutside, point2); - let pointPresent = false; - points.forEach((p) => { - pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; - }); - if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { - points.push(inter); - } - isInside = true; - } else { - lastPointOutside = point2; - if (!isInside) { - points.push(point2); - } - } - }); - return points; -}; -const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { - let points = edge.points; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); - let pointsHasChanged = false; - const tail = graph.node(e.v); - var head = graph.node(e.w); - if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { - points = points.slice(1, edge.points.length - 1); - points.unshift(tail.intersect(points[0])); - points.push(head.intersect(points[points.length - 1])); - } - if (edge.toCluster) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); - points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); - pointsHasChanged = true; - } - if (edge.fromCluster) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); - points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); - pointsHasChanged = true; - } - const lineData = points.filter((p) => !Number.isNaN(p.y)); - let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .qrM; - if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { - curve = edge.curve; - } - const { x, y } = getLineFunctionsWithOffset(edge); - const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x(x).y(y).curve(curve); - let strokeClasses; - switch (edge.thickness) { - case "normal": - strokeClasses = "edge-thickness-normal"; - break; - case "thick": - strokeClasses = "edge-thickness-thick"; - break; - case "invisible": - strokeClasses = "edge-thickness-thick"; - break; - default: - strokeClasses = ""; - } - switch (edge.pattern) { - case "solid": - strokeClasses += " edge-pattern-solid"; - break; - case "dotted": - strokeClasses += " edge-pattern-dotted"; - break; - case "dashed": - strokeClasses += " edge-pattern-dashed"; - break; - } - const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); - let url = ""; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { - url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; - url = url.replace(/\(/g, "\\("); - url = url.replace(/\)/g, "\\)"); - } - addEdgeMarkers(svgPath, edge, url, id, diagramType); - let paths = {}; - if (pointsHasChanged) { - paths.updatedPath = points; - } - paths.originalPath = edge.points; - return paths; -}; - - - -/***/ }), - -/***/ 32548: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ d: () => (/* binding */ db), -/* harmony export */ f: () => (/* binding */ flowDb), -/* harmony export */ p: () => (/* binding */ parser$1) -/* harmony export */ }); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 27, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $V4 = [2, 2], $V5 = [1, 13], $V6 = [1, 14], $V7 = [1, 15], $V8 = [1, 16], $V9 = [1, 23], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 49], $Ve = [1, 48], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 44], $Vl = [1, 46], $Vm = [1, 42], $Vn = [1, 47], $Vo = [1, 43], $Vp = [1, 50], $Vq = [1, 45], $Vr = [1, 51], $Vs = [1, 52], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 57], $Vy = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vz = [1, 61], $VA = [1, 60], $VB = [1, 62], $VC = [8, 9, 11, 73, 75], $VD = [1, 88], $VE = [1, 93], $VF = [1, 92], $VG = [1, 89], $VH = [1, 85], $VI = [1, 91], $VJ = [1, 87], $VK = [1, 94], $VL = [1, 90], $VM = [1, 95], $VN = [1, 86], $VO = [8, 9, 10, 11, 73, 75], $VP = [8, 9, 10, 11, 44, 73, 75], $VQ = [8, 9, 10, 11, 29, 42, 44, 46, 48, 50, 52, 54, 56, 58, 61, 63, 65, 66, 68, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VR = [8, 9, 11, 42, 58, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VS = [42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VT = [1, 121], $VU = [1, 120], $VV = [1, 128], $VW = [1, 142], $VX = [1, 143], $VY = [1, 144], $VZ = [1, 145], $V_ = [1, 130], $V$ = [1, 132], $V01 = [1, 136], $V11 = [1, 137], $V21 = [1, 138], $V31 = [1, 139], $V41 = [1, 140], $V51 = [1, 141], $V61 = [1, 146], $V71 = [1, 147], $V81 = [1, 126], $V91 = [1, 127], $Va1 = [1, 134], $Vb1 = [1, 129], $Vc1 = [1, 133], $Vd1 = [1, 131], $Ve1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vf1 = [1, 149], $Vg1 = [8, 9, 11], $Vh1 = [8, 9, 10, 11, 14, 42, 58, 86, 102, 103, 106, 108, 111, 112, 113], $Vi1 = [1, 169], $Vj1 = [1, 165], $Vk1 = [1, 166], $Vl1 = [1, 170], $Vm1 = [1, 167], $Vn1 = [1, 168], $Vo1 = [75, 113, 116], $Vp1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 42, 58, 73, 81, 82, 83, 84, 85, 86, 87, 102, 106, 108, 111, 112, 113], $Vq1 = [10, 103], $Vr1 = [31, 47, 49, 51, 53, 55, 60, 62, 64, 65, 67, 69, 113, 114, 115], $Vs1 = [1, 235], $Vt1 = [1, 233], $Vu1 = [1, 237], $Vv1 = [1, 231], $Vw1 = [1, 232], $Vx1 = [1, 234], $Vy1 = [1, 236], $Vz1 = [1, 238], $VA1 = [1, 255], $VB1 = [8, 9, 11, 103], $VC1 = [8, 9, 10, 11, 58, 81, 102, 103, 106, 107, 108, 109]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "graphConfig": 4, "document": 5, "line": 6, "statement": 7, "SEMI": 8, "NEWLINE": 9, "SPACE": 10, "EOF": 11, "GRAPH": 12, "NODIR": 13, "DIR": 14, "FirstStmtSeparator": 15, "ending": 16, "endToken": 17, "spaceList": 18, "spaceListNewline": 19, "vertexStatement": 20, "separator": 21, "styleStatement": 22, "linkStyleStatement": 23, "classDefStatement": 24, "classStatement": 25, "clickStatement": 26, "subgraph": 27, "textNoTags": 28, "SQS": 29, "text": 30, "SQE": 31, "end": 32, "direction": 33, "acc_title": 34, "acc_title_value": 35, "acc_descr": 36, "acc_descr_value": 37, "acc_descr_multiline_value": 38, "link": 39, "node": 40, "styledVertex": 41, "AMP": 42, "vertex": 43, "STYLE_SEPARATOR": 44, "idString": 45, "DOUBLECIRCLESTART": 46, "DOUBLECIRCLEEND": 47, "PS": 48, "PE": 49, "(-": 50, "-)": 51, "STADIUMSTART": 52, "STADIUMEND": 53, "SUBROUTINESTART": 54, "SUBROUTINEEND": 55, "VERTEX_WITH_PROPS_START": 56, "NODE_STRING[field]": 57, "COLON": 58, "NODE_STRING[value]": 59, "PIPE": 60, "CYLINDERSTART": 61, "CYLINDEREND": 62, "DIAMOND_START": 63, "DIAMOND_STOP": 64, "TAGEND": 65, "TRAPSTART": 66, "TRAPEND": 67, "INVTRAPSTART": 68, "INVTRAPEND": 69, "linkStatement": 70, "arrowText": 71, "TESTSTR": 72, "START_LINK": 73, "edgeText": 74, "LINK": 75, "edgeTextToken": 76, "STR": 77, "MD_STR": 78, "textToken": 79, "keywords": 80, "STYLE": 81, "LINKSTYLE": 82, "CLASSDEF": 83, "CLASS": 84, "CLICK": 85, "DOWN": 86, "UP": 87, "textNoTagsToken": 88, "stylesOpt": 89, "idString[vertex]": 90, "idString[class]": 91, "CALLBACKNAME": 92, "CALLBACKARGS": 93, "HREF": 94, "LINK_TARGET": 95, "STR[link]": 96, "STR[tooltip]": 97, "alphaNum": 98, "DEFAULT": 99, "numList": 100, "INTERPOLATE": 101, "NUM": 102, "COMMA": 103, "style": 104, "styleComponent": 105, "NODE_STRING": 106, "UNIT": 107, "BRKT": 108, "PCT": 109, "idStringToken": 110, "MINUS": 111, "MULT": 112, "UNICODE_TEXT": 113, "TEXT": 114, "TAGSTART": 115, "EDGE_TEXT": 116, "alphaNumToken": 117, "direction_tb": 118, "direction_bt": 119, "direction_rl": 120, "direction_lr": 121, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 8: "SEMI", 9: "NEWLINE", 10: "SPACE", 11: "EOF", 12: "GRAPH", 13: "NODIR", 14: "DIR", 27: "subgraph", 29: "SQS", 31: "SQE", 32: "end", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 42: "AMP", 44: "STYLE_SEPARATOR", 46: "DOUBLECIRCLESTART", 47: "DOUBLECIRCLEEND", 48: "PS", 49: "PE", 50: "(-", 51: "-)", 52: "STADIUMSTART", 53: "STADIUMEND", 54: "SUBROUTINESTART", 55: "SUBROUTINEEND", 56: "VERTEX_WITH_PROPS_START", 57: "NODE_STRING[field]", 58: "COLON", 59: "NODE_STRING[value]", 60: "PIPE", 61: "CYLINDERSTART", 62: "CYLINDEREND", 63: "DIAMOND_START", 64: "DIAMOND_STOP", 65: "TAGEND", 66: "TRAPSTART", 67: "TRAPEND", 68: "INVTRAPSTART", 69: "INVTRAPEND", 72: "TESTSTR", 73: "START_LINK", 75: "LINK", 77: "STR", 78: "MD_STR", 81: "STYLE", 82: "LINKSTYLE", 83: "CLASSDEF", 84: "CLASS", 85: "CLICK", 86: "DOWN", 87: "UP", 90: "idString[vertex]", 91: "idString[class]", 92: "CALLBACKNAME", 93: "CALLBACKARGS", 94: "HREF", 95: "LINK_TARGET", 96: "STR[link]", 97: "STR[tooltip]", 99: "DEFAULT", 101: "INTERPOLATE", 102: "NUM", 103: "COMMA", 106: "NODE_STRING", 107: "UNIT", 108: "BRKT", 109: "PCT", 111: "MINUS", 112: "MULT", 113: "UNICODE_TEXT", 114: "TEXT", 115: "TAGSTART", 116: "EDGE_TEXT", 118: "direction_tb", 119: "direction_bt", 120: "direction_rl", 121: "direction_lr" }, - productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [20, 3], [20, 4], [20, 2], [20, 1], [40, 1], [40, 5], [41, 1], [41, 3], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 8], [43, 4], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 4], [43, 4], [43, 1], [39, 2], [39, 3], [39, 3], [39, 1], [39, 3], [74, 1], [74, 2], [74, 1], [74, 1], [70, 1], [71, 3], [30, 1], [30, 2], [30, 1], [30, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [100, 1], [100, 3], [89, 1], [89, 3], [104, 1], [104, 2], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [79, 1], [79, 1], [79, 1], [79, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [76, 1], [76, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [45, 1], [45, 2], [98, 1], [98, 2], [33, 1], [33, 1], [33, 1], [33, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 2: - this.$ = []; - break; - case 3: - if (!Array.isArray($$[$0]) || $$[$0].length > 0) { - $$[$0 - 1].push($$[$0]); - } - this.$ = $$[$0 - 1]; - break; - case 4: - case 176: - this.$ = $$[$0]; - break; - case 11: - yy.setDirection("TB"); - this.$ = "TB"; - break; - case 12: - yy.setDirection($$[$0 - 1]); - this.$ = $$[$0 - 1]; - break; - case 27: - this.$ = $$[$0 - 1].nodes; - break; - case 28: - case 29: - case 30: - case 31: - case 32: - this.$ = []; - break; - case 33: - this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); - break; - case 34: - this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); - break; - case 35: - this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); - break; - case 37: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 38: - case 39: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 43: - yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); - this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; - break; - case 44: - yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); - this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; - break; - case 45: - this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; - break; - case 46: - this.$ = { stmt: $$[$0], nodes: $$[$0] }; - break; - case 47: - this.$ = [$$[$0]]; - break; - case 48: - this.$ = $$[$0 - 4].concat($$[$0]); - break; - case 49: - this.$ = $$[$0]; - break; - case 50: - this.$ = $$[$0 - 2]; - yy.setClass($$[$0 - 2], $$[$0]); - break; - case 51: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); - break; - case 52: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); - break; - case 53: - this.$ = $$[$0 - 5]; - yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); - break; - case 54: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); - break; - case 55: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); - break; - case 56: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); - break; - case 57: - this.$ = $$[$0 - 7]; - yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); - break; - case 58: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); - break; - case 59: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); - break; - case 60: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); - break; - case 61: - this.$ = $$[$0 - 5]; - yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); - break; - case 62: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); - break; - case 63: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); - break; - case 64: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); - break; - case 65: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); - break; - case 66: - this.$ = $$[$0 - 3]; - yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); - break; - case 67: - this.$ = $$[$0]; - yy.addVertex($$[$0]); - break; - case 68: - $$[$0 - 1].text = $$[$0]; - this.$ = $$[$0 - 1]; - break; - case 69: - case 70: - $$[$0 - 2].text = $$[$0 - 1]; - this.$ = $$[$0 - 2]; - break; - case 71: - this.$ = $$[$0]; - break; - case 72: - var inf = yy.destructLink($$[$0], $$[$0 - 2]); - this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; - break; - case 73: - this.$ = { text: $$[$0], type: "text" }; - break; - case 74: - this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; - break; - case 75: - this.$ = { text: $$[$0], type: "string" }; - break; - case 76: - this.$ = { text: $$[$0], type: "markdown" }; - break; - case 77: - var inf = yy.destructLink($$[$0]); - this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; - break; - case 78: - this.$ = $$[$0 - 1]; - break; - case 79: - this.$ = { text: $$[$0], type: "text" }; - break; - case 80: - this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; - break; - case 81: - this.$ = { text: $$[$0], type: "string" }; - break; - case 82: - case 97: - this.$ = { text: $$[$0], type: "markdown" }; - break; - case 94: - this.$ = { text: $$[$0], type: "text" }; - break; - case 95: - this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; - break; - case 96: - this.$ = { text: $$[$0], type: "text" }; - break; - case 98: - this.$ = $$[$0 - 4]; - yy.addClass($$[$0 - 2], $$[$0]); - break; - case 99: - this.$ = $$[$0 - 4]; - yy.setClass($$[$0 - 2], $$[$0]); - break; - case 100: - case 108: - this.$ = $$[$0 - 1]; - yy.setClickEvent($$[$0 - 1], $$[$0]); - break; - case 101: - case 109: - this.$ = $$[$0 - 3]; - yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); - yy.setTooltip($$[$0 - 3], $$[$0]); - break; - case 102: - this.$ = $$[$0 - 2]; - yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); - break; - case 103: - this.$ = $$[$0 - 4]; - yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); - yy.setTooltip($$[$0 - 4], $$[$0]); - break; - case 104: - this.$ = $$[$0 - 2]; - yy.setLink($$[$0 - 2], $$[$0]); - break; - case 105: - this.$ = $$[$0 - 4]; - yy.setLink($$[$0 - 4], $$[$0 - 2]); - yy.setTooltip($$[$0 - 4], $$[$0]); - break; - case 106: - this.$ = $$[$0 - 4]; - yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); - break; - case 107: - this.$ = $$[$0 - 6]; - yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]); - yy.setTooltip($$[$0 - 6], $$[$0 - 2]); - break; - case 110: - this.$ = $$[$0 - 1]; - yy.setLink($$[$0 - 1], $$[$0]); - break; - case 111: - this.$ = $$[$0 - 3]; - yy.setLink($$[$0 - 3], $$[$0 - 2]); - yy.setTooltip($$[$0 - 3], $$[$0]); - break; - case 112: - this.$ = $$[$0 - 3]; - yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); - break; - case 113: - this.$ = $$[$0 - 5]; - yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); - yy.setTooltip($$[$0 - 5], $$[$0 - 2]); - break; - case 114: - this.$ = $$[$0 - 4]; - yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); - break; - case 115: - this.$ = $$[$0 - 4]; - yy.updateLink([$$[$0 - 2]], $$[$0]); - break; - case 116: - this.$ = $$[$0 - 4]; - yy.updateLink($$[$0 - 2], $$[$0]); - break; - case 117: - this.$ = $$[$0 - 8]; - yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); - yy.updateLink([$$[$0 - 6]], $$[$0]); - break; - case 118: - this.$ = $$[$0 - 8]; - yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); - yy.updateLink($$[$0 - 6], $$[$0]); - break; - case 119: - this.$ = $$[$0 - 6]; - yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); - break; - case 120: - this.$ = $$[$0 - 6]; - yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); - break; - case 121: - case 123: - this.$ = [$$[$0]]; - break; - case 122: - case 124: - $$[$0 - 2].push($$[$0]); - this.$ = $$[$0 - 2]; - break; - case 126: - this.$ = $$[$0 - 1] + $$[$0]; - break; - case 174: - this.$ = $$[$0]; - break; - case 175: - this.$ = $$[$0 - 1] + "" + $$[$0]; - break; - case 177: - this.$ = $$[$0 - 1] + "" + $$[$0]; - break; - case 178: - this.$ = { stmt: "dir", value: "TB" }; - break; - case 179: - this.$ = { stmt: "dir", value: "BT" }; - break; - case 180: - this.$ = { stmt: "dir", value: "RL" }; - break; - case 181: - this.$ = { stmt: "dir", value: "LR" }; - break; - } - }, - table: [{ 3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2 }, { 1: [3] }, o($V3, $V4, { 5: 6 }), { 4: 7, 9: $V0, 10: $V1, 12: $V2 }, { 4: 8, 9: $V0, 10: $V1, 12: $V2 }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($V3, [2, 9]), o($V3, [2, 10]), o($V3, [2, 11]), { 8: [1, 54], 9: [1, 55], 10: $Vx, 15: 53, 18: 56 }, o($Vy, [2, 3]), o($Vy, [2, 4]), o($Vy, [2, 5]), o($Vy, [2, 6]), o($Vy, [2, 7]), o($Vy, [2, 8]), { 8: $Vz, 9: $VA, 11: $VB, 21: 58, 39: 59, 70: 63, 73: [1, 64], 75: [1, 65] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 66 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 67 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 68 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 69 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 70 }, { 8: $Vz, 9: $VA, 10: [1, 71], 11: $VB, 21: 72 }, o($Vy, [2, 36]), { 35: [1, 73] }, { 37: [1, 74] }, o($Vy, [2, 39]), o($VC, [2, 46], { 18: 75, 10: $Vx }), { 10: [1, 76] }, { 10: [1, 77] }, { 10: [1, 78] }, { 10: [1, 79] }, { 14: $VD, 42: $VE, 58: $VF, 77: [1, 83], 86: $VG, 92: [1, 80], 94: [1, 81], 98: 82, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, o($Vy, [2, 178]), o($Vy, [2, 179]), o($Vy, [2, 180]), o($Vy, [2, 181]), o($VO, [2, 47]), o($VO, [2, 49], { 44: [1, 96] }), o($VP, [2, 67], { 110: 109, 29: [1, 97], 42: $Vd, 46: [1, 98], 48: [1, 99], 50: [1, 100], 52: [1, 101], 54: [1, 102], 56: [1, 103], 58: $Ve, 61: [1, 104], 63: [1, 105], 65: [1, 106], 66: [1, 107], 68: [1, 108], 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($VQ, [2, 174]), o($VQ, [2, 135]), o($VQ, [2, 136]), o($VQ, [2, 137]), o($VQ, [2, 138]), o($VQ, [2, 139]), o($VQ, [2, 140]), o($VQ, [2, 141]), o($VQ, [2, 142]), o($VQ, [2, 143]), o($VQ, [2, 144]), o($VQ, [2, 145]), o($V3, [2, 12]), o($V3, [2, 18]), o($V3, [2, 19]), { 9: [1, 110] }, o($VR, [2, 26], { 18: 111, 10: $Vx }), o($Vy, [2, 27]), { 40: 112, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vy, [2, 40]), o($Vy, [2, 41]), o($Vy, [2, 42]), o($VS, [2, 71], { 71: 113, 60: [1, 115], 72: [1, 114] }), { 74: 116, 76: 117, 77: [1, 118], 78: [1, 119], 113: $VT, 116: $VU }, o([42, 58, 60, 72, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 77]), o($Vy, [2, 28]), o($Vy, [2, 29]), o($Vy, [2, 30]), o($Vy, [2, 31]), o($Vy, [2, 32]), { 10: $VV, 12: $VW, 14: $VX, 27: $VY, 28: 122, 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 77: [1, 124], 78: [1, 125], 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 123, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Ve1, $V4, { 5: 148 }), o($Vy, [2, 37]), o($Vy, [2, 38]), o($VC, [2, 45], { 42: $Vf1 }), { 42: $Vd, 45: 150, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 99: [1, 151], 100: 152, 102: [1, 153] }, { 42: $Vd, 45: 154, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 42: $Vd, 45: 155, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 100], { 10: [1, 156], 93: [1, 157] }), { 77: [1, 158] }, o($Vg1, [2, 108], { 117: 160, 10: [1, 159], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 110], { 10: [1, 161] }), o($Vh1, [2, 176]), o($Vh1, [2, 163]), o($Vh1, [2, 164]), o($Vh1, [2, 165]), o($Vh1, [2, 166]), o($Vh1, [2, 167]), o($Vh1, [2, 168]), o($Vh1, [2, 169]), o($Vh1, [2, 170]), o($Vh1, [2, 171]), o($Vh1, [2, 172]), o($Vh1, [2, 173]), { 42: $Vd, 45: 162, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 30: 163, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 171, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 173, 48: [1, 172], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 174, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 175, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 176, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 106: [1, 177] }, { 30: 178, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 179, 63: [1, 180], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 181, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 182, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 183, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VQ, [2, 175]), o($V3, [2, 20]), o($VR, [2, 25]), o($VC, [2, 43], { 18: 184, 10: $Vx }), o($VS, [2, 68], { 10: [1, 185] }), { 10: [1, 186] }, { 30: 187, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 75: [1, 188], 76: 189, 113: $VT, 116: $VU }, o($Vo1, [2, 73]), o($Vo1, [2, 75]), o($Vo1, [2, 76]), o($Vo1, [2, 161]), o($Vo1, [2, 162]), { 8: $Vz, 9: $VA, 10: $VV, 11: $VB, 12: $VW, 14: $VX, 21: 191, 27: $VY, 29: [1, 190], 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 192, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Vp1, [2, 94]), o($Vp1, [2, 96]), o($Vp1, [2, 97]), o($Vp1, [2, 150]), o($Vp1, [2, 151]), o($Vp1, [2, 152]), o($Vp1, [2, 153]), o($Vp1, [2, 154]), o($Vp1, [2, 155]), o($Vp1, [2, 156]), o($Vp1, [2, 157]), o($Vp1, [2, 158]), o($Vp1, [2, 159]), o($Vp1, [2, 160]), o($Vp1, [2, 83]), o($Vp1, [2, 84]), o($Vp1, [2, 85]), o($Vp1, [2, 86]), o($Vp1, [2, 87]), o($Vp1, [2, 88]), o($Vp1, [2, 89]), o($Vp1, [2, 90]), o($Vp1, [2, 91]), o($Vp1, [2, 92]), o($Vp1, [2, 93]), { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 193], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vx, 18: 194 }, { 10: [1, 195], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 196] }, { 10: [1, 197], 103: [1, 198] }, o($Vq1, [2, 121]), { 10: [1, 199], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 200], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 77: [1, 201] }, o($Vg1, [2, 102], { 10: [1, 202] }), o($Vg1, [2, 104], { 10: [1, 203] }), { 77: [1, 204] }, o($Vh1, [2, 177]), { 77: [1, 205], 95: [1, 206] }, o($VO, [2, 50], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), { 31: [1, 207], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Vr1, [2, 79]), o($Vr1, [2, 81]), o($Vr1, [2, 82]), o($Vr1, [2, 146]), o($Vr1, [2, 147]), o($Vr1, [2, 148]), o($Vr1, [2, 149]), { 47: [1, 209], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 210, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 49: [1, 211], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 51: [1, 212], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 53: [1, 213], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 55: [1, 214], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 58: [1, 215] }, { 62: [1, 216], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 64: [1, 217], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 218, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 31: [1, 219], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 220], 69: [1, 221], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 223], 69: [1, 222], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VC, [2, 44], { 42: $Vf1 }), o($VS, [2, 70]), o($VS, [2, 69]), { 60: [1, 224], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VS, [2, 72]), o($Vo1, [2, 74]), { 30: 225, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Ve1, $V4, { 5: 226 }), o($Vp1, [2, 95]), o($Vy, [2, 35]), { 41: 227, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 228, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 239, 101: [1, 240], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 241, 101: [1, 242], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 102: [1, 243] }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 244, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 42: $Vd, 45: 245, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 101]), { 77: [1, 246] }, { 77: [1, 247], 95: [1, 248] }, o($Vg1, [2, 109]), o($Vg1, [2, 111], { 10: [1, 249] }), o($Vg1, [2, 112]), o($VP, [2, 51]), o($Vr1, [2, 80]), o($VP, [2, 52]), { 49: [1, 250], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 59]), o($VP, [2, 54]), o($VP, [2, 55]), o($VP, [2, 56]), { 106: [1, 251] }, o($VP, [2, 58]), o($VP, [2, 60]), { 64: [1, 252], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 62]), o($VP, [2, 63]), o($VP, [2, 65]), o($VP, [2, 64]), o($VP, [2, 66]), o([10, 42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 78]), { 31: [1, 253], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 254], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($VO, [2, 48]), o($Vg1, [2, 114], { 103: $VA1 }), o($VB1, [2, 123], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($VC1, [2, 125]), o($VC1, [2, 127]), o($VC1, [2, 128]), o($VC1, [2, 129]), o($VC1, [2, 130]), o($VC1, [2, 131]), o($VC1, [2, 132]), o($VC1, [2, 133]), o($VC1, [2, 134]), o($Vg1, [2, 115], { 103: $VA1 }), { 10: [1, 257] }, o($Vg1, [2, 116], { 103: $VA1 }), { 10: [1, 258] }, o($Vq1, [2, 122]), o($Vg1, [2, 98], { 103: $VA1 }), o($Vg1, [2, 99], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($Vg1, [2, 103]), o($Vg1, [2, 105], { 10: [1, 259] }), o($Vg1, [2, 106]), { 95: [1, 260] }, { 49: [1, 261] }, { 60: [1, 262] }, { 64: [1, 263] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 264 }, o($Vy, [2, 34]), { 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 104: 265, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VC1, [2, 126]), { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 266, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 267, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 95: [1, 268] }, o($Vg1, [2, 113]), o($VP, [2, 53]), { 30: 269, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 61]), o($Ve1, $V4, { 5: 270 }), o($VB1, [2, 124], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($Vg1, [2, 119], { 117: 160, 10: [1, 271], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 120], { 117: 160, 10: [1, 272], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 107]), { 31: [1, 273], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 274], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 275, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 276, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VP, [2, 57]), o($Vy, [2, 33]), o($Vg1, [2, 117], { 103: $VA1 }), o($Vg1, [2, 118], { 103: $VA1 })], - defaultActions: {}, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex2() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex2(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex2() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: {}, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - this.begin("acc_title"); - return 34; - case 1: - this.popState(); - return "acc_title_value"; - case 2: - this.begin("acc_descr"); - return 36; - case 3: - this.popState(); - return "acc_descr_value"; - case 4: - this.begin("acc_descr_multiline"); - break; - case 5: - this.popState(); - break; - case 6: - return "acc_descr_multiline_value"; - case 7: - this.begin("callbackname"); - break; - case 8: - this.popState(); - break; - case 9: - this.popState(); - this.begin("callbackargs"); - break; - case 10: - return 92; - case 11: - this.popState(); - break; - case 12: - return 93; - case 13: - return "MD_STR"; - case 14: - this.popState(); - break; - case 15: - this.begin("md_string"); - break; - case 16: - return "STR"; - case 17: - this.popState(); - break; - case 18: - this.pushState("string"); - break; - case 19: - return 81; - case 20: - return 99; - case 21: - return 82; - case 22: - return 101; - case 23: - return 83; - case 24: - return 84; - case 25: - return 94; - case 26: - this.begin("click"); - break; - case 27: - this.popState(); - break; - case 28: - return 85; - case 29: - if (yy.lex.firstGraph()) { - this.begin("dir"); - } - return 12; - case 30: - if (yy.lex.firstGraph()) { - this.begin("dir"); - } - return 12; - case 31: - if (yy.lex.firstGraph()) { - this.begin("dir"); - } - return 12; - case 32: - return 27; - case 33: - return 32; - case 34: - return 95; - case 35: - return 95; - case 36: - return 95; - case 37: - return 95; - case 38: - this.popState(); - return 13; - case 39: - this.popState(); - return 14; - case 40: - this.popState(); - return 14; - case 41: - this.popState(); - return 14; - case 42: - this.popState(); - return 14; - case 43: - this.popState(); - return 14; - case 44: - this.popState(); - return 14; - case 45: - this.popState(); - return 14; - case 46: - this.popState(); - return 14; - case 47: - this.popState(); - return 14; - case 48: - this.popState(); - return 14; - case 49: - return 118; - case 50: - return 119; - case 51: - return 120; - case 52: - return 121; - case 53: - return 102; - case 54: - return 108; - case 55: - return 44; - case 56: - return 58; - case 57: - return 42; - case 58: - return 8; - case 59: - return 103; - case 60: - return 112; - case 61: - this.popState(); - return 75; - case 62: - this.pushState("edgeText"); - return 73; - case 63: - return 116; - case 64: - this.popState(); - return 75; - case 65: - this.pushState("thickEdgeText"); - return 73; - case 66: - return 116; - case 67: - this.popState(); - return 75; - case 68: - this.pushState("dottedEdgeText"); - return 73; - case 69: - return 116; - case 70: - return 75; - case 71: - this.popState(); - return 51; - case 72: - return "TEXT"; - case 73: - this.pushState("ellipseText"); - return 50; - case 74: - this.popState(); - return 53; - case 75: - this.pushState("text"); - return 52; - case 76: - this.popState(); - return 55; - case 77: - this.pushState("text"); - return 54; - case 78: - return 56; - case 79: - this.pushState("text"); - return 65; - case 80: - this.popState(); - return 62; - case 81: - this.pushState("text"); - return 61; - case 82: - this.popState(); - return 47; - case 83: - this.pushState("text"); - return 46; - case 84: - this.popState(); - return 67; - case 85: - this.popState(); - return 69; - case 86: - return 114; - case 87: - this.pushState("trapText"); - return 66; - case 88: - this.pushState("trapText"); - return 68; - case 89: - return 115; - case 90: - return 65; - case 91: - return 87; - case 92: - return "SEP"; - case 93: - return 86; - case 94: - return 112; - case 95: - return 108; - case 96: - return 42; - case 97: - return 106; - case 98: - return 111; - case 99: - return 113; - case 100: - this.popState(); - return 60; - case 101: - this.pushState("text"); - return 60; - case 102: - this.popState(); - return 49; - case 103: - this.pushState("text"); - return 48; - case 104: - this.popState(); - return 31; - case 105: - this.pushState("text"); - return 29; - case 106: - this.popState(); - return 64; - case 107: - this.pushState("text"); - return 63; - case 108: - return "TEXT"; - case 109: - return "QUOTE"; - case 110: - return 9; - case 111: - return 10; - case 112: - return 11; - } - }, - rules: [/^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["][`])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:["])/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s])/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:[^=]|=(?!))/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:[^\.]|\.(?!))/, /^(?:\s*~~[\~]+\s*)/, /^(?:[-/\)][\)])/, /^(?:[^\(\)\[\]\{\}]|!\)+)/, /^(?:\(-)/, /^(?:\]\))/, /^(?:\(\[)/, /^(?:\]\])/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:>)/, /^(?:\)\])/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\(\(\()/, /^(?:[\\(?=\])][\]])/, /^(?:\/(?=\])\])/, /^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/, /^(?:-)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\|)/, /^(?:\))/, /^(?:\()/, /^(?:\])/, /^(?:\[)/, /^(?:(\}))/, /^(?:\{)/, /^(?:[^\[\]\(\)\{\}\|\"]+)/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], - conditions: { "callbackargs": { "rules": [11, 12, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "callbackname": { "rules": [8, 9, 10, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "href": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "click": { "rules": [15, 18, 27, 28, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dottedEdgeText": { "rules": [15, 18, 67, 69, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "thickEdgeText": { "rules": [15, 18, 64, 66, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "edgeText": { "rules": [15, 18, 61, 63, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "trapText": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 84, 85, 86, 87, 88, 101, 103, 105, 107], "inclusive": false }, "ellipseText": { "rules": [15, 18, 70, 71, 72, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "text": { "rules": [15, 18, 70, 73, 74, 75, 76, 77, 80, 81, 82, 83, 87, 88, 100, 101, 102, 103, 104, 105, 106, 107, 108], "inclusive": false }, "vertex": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dir": { "rules": [15, 18, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr_multiline": { "rules": [5, 6, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr": { "rules": [3, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_title": { "rules": [1, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "md_string": { "rules": [13, 14, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "string": { "rules": [15, 16, 17, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 67, 68, 70, 73, 75, 77, 78, 79, 81, 83, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 105, 107, 109, 110, 111, 112], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -const MERMAID_DOM_ID_PREFIX = "flowchart-"; -let vertexCounter = 0; -let config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); -let vertices = {}; -let edges = []; -let classes = {}; -let subGraphs = []; -let subGraphLookup = {}; -let tooltips = {}; -let subCount = 0; -let firstGraphFlag = true; -let direction; -let version; -let funs = []; -const sanitizeText = (txt) => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); -const lookUpDomId = function(id) { - const vertexKeys = Object.keys(vertices); - for (const vertexKey of vertexKeys) { - if (vertices[vertexKey].id === id) { - return vertices[vertexKey].domId; - } - } - return id; -}; -const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { - let txt; - let id = _id; - if (id === void 0) { - return; - } - if (id.trim().length === 0) { - return; - } - if (vertices[id] === void 0) { - vertices[id] = { - id, - labelType: "text", - domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, - styles: [], - classes: [] - }; - } - vertexCounter++; - if (textObj !== void 0) { - config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - txt = sanitizeText(textObj.text.trim()); - vertices[id].labelType = textObj.type; - if (txt[0] === '"' && txt[txt.length - 1] === '"') { - txt = txt.substring(1, txt.length - 1); - } - vertices[id].text = txt; - } else { - if (vertices[id].text === void 0) { - vertices[id].text = _id; - } - } - if (type !== void 0) { - vertices[id].type = type; - } - if (style !== void 0 && style !== null) { - style.forEach(function(s) { - vertices[id].styles.push(s); - }); - } - if (classes2 !== void 0 && classes2 !== null) { - classes2.forEach(function(s) { - vertices[id].classes.push(s); - }); - } - if (dir !== void 0) { - vertices[id].dir = dir; - } - if (vertices[id].props === void 0) { - vertices[id].props = props; - } else if (props !== void 0) { - Object.assign(vertices[id].props, props); - } -}; -const addSingleLink = function(_start, _end, type) { - let start = _start; - let end = _end; - const edge = { start, end, type: void 0, text: "", labelType: "text" }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); - const linkTextObj = type.text; - if (linkTextObj !== void 0) { - edge.text = sanitizeText(linkTextObj.text.trim()); - if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { - edge.text = edge.text.substring(1, edge.text.length - 1); - } - edge.labelType = linkTextObj.type; - } - if (type !== void 0) { - edge.type = type.type; - edge.stroke = type.stroke; - edge.length = type.length; - } - if ((edge == null ? void 0 : edge.length) > 10) { - edge.length = 10; - } - if (edges.length < (config.maxEdges ?? 500)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 pushing edge..."); - edges.push(edge); - } else { - throw new Error( - `Edge limit exceeded. ${edges.length} edges found, but the limit is ${config.maxEdges}. - -Initialize mermaid with maxEdges set to a higher number to allow more edges. -You cannot set this config via configuration inside the diagram as it is a secure config. -You have to call mermaid.initialize.` - ); - } -}; -const addLink = function(_start, _end, type) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); - let i, j; - for (i = 0; i < _start.length; i++) { - for (j = 0; j < _end.length; j++) { - addSingleLink(_start[i], _end[j], type); - } - } -}; -const updateLinkInterpolate = function(positions, interp) { - positions.forEach(function(pos) { - if (pos === "default") { - edges.defaultInterpolate = interp; - } else { - edges[pos].interpolate = interp; - } - }); -}; -const updateLink = function(positions, style) { - positions.forEach(function(pos) { - if (pos >= edges.length) { - throw new Error( - `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)` - ); - } - if (pos === "default") { - edges.defaultStyle = style; - } else { - if (_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.isSubstringInArray("fill", style) === -1) { - style.push("fill:none"); - } - edges[pos].style = style; - } - }); -}; -const addClass = function(ids, style) { - ids.split(",").forEach(function(id) { - if (classes[id] === void 0) { - classes[id] = { id, styles: [], textStyles: [] }; - } - if (style !== void 0 && style !== null) { - style.forEach(function(s) { - if (s.match("color")) { - const newStyle = s.replace("fill", "bgFill").replace("color", "fill"); - classes[id].textStyles.push(newStyle); - } - classes[id].styles.push(s); - }); - } - }); -}; -const setDirection = function(dir) { - direction = dir; - if (direction.match(/.*</)) { - direction = "RL"; - } - if (direction.match(/.*\^/)) { - direction = "BT"; - } - if (direction.match(/.*>/)) { - direction = "LR"; - } - if (direction.match(/.*v/)) { - direction = "TB"; - } - if (direction === "TD") { - direction = "TB"; - } -}; -const setClass = function(ids, className) { - ids.split(",").forEach(function(_id) { - let id = _id; - if (vertices[id] !== void 0) { - vertices[id].classes.push(className); - } - if (subGraphLookup[id] !== void 0) { - subGraphLookup[id].classes.push(className); - } - }); -}; -const setTooltip = function(ids, tooltip) { - ids.split(",").forEach(function(id) { - if (tooltip !== void 0) { - tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); - } - }); -}; -const setClickFun = function(id, functionName, functionArgs) { - let domId = lookUpDomId(id); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel !== "loose") { - return; - } - if (functionName === void 0) { - return; - } - let argList = []; - if (typeof functionArgs === "string") { - argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); - for (let i = 0; i < argList.length; i++) { - let item = argList[i].trim(); - if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { - item = item.substr(1, item.length - 2); - } - argList[i] = item; - } - } - if (argList.length === 0) { - argList.push(id); - } - if (vertices[id] !== void 0) { - vertices[id].haveCallback = true; - funs.push(function() { - const elem = document.querySelector(`[id="${domId}"]`); - if (elem !== null) { - elem.addEventListener( - "click", - function() { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); - }, - false - ); - } - }); - } -}; -const setLink = function(ids, linkStr, target) { - ids.split(",").forEach(function(id) { - if (vertices[id] !== void 0) { - vertices[id].link = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); - vertices[id].linkTarget = target; - } - }); - setClass(ids, "clickable"); -}; -const getTooltip = function(id) { - if (tooltips.hasOwnProperty(id)) { - return tooltips[id]; - } - return void 0; -}; -const setClickEvent = function(ids, functionName, functionArgs) { - ids.split(",").forEach(function(id) { - setClickFun(id, functionName, functionArgs); - }); - setClass(ids, "clickable"); -}; -const bindFunctions = function(element) { - funs.forEach(function(fun) { - fun(element); - }); -}; -const getDirection = function() { - return direction.trim(); -}; -const getVertices = function() { - return vertices; -}; -const getEdges = function() { - return edges; -}; -const getClasses = function() { - return classes; -}; -const setupToolTips = function(element) { - let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(".mermaidTooltip"); - if ((tooltipElem._groups || tooltipElem)[0][0] === null) { - tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); - } - const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(element).select("svg"); - const nodes = svg.selectAll("g.node"); - nodes.on("mouseover", function() { - const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); - const title = el.attr("title"); - if (title === null) { - return; - } - const rect = this.getBoundingClientRect(); - tooltipElem.transition().duration(200).style("opacity", ".9"); - tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.bottom + "px"); - tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); - el.classed("hover", true); - }).on("mouseout", function() { - tooltipElem.transition().duration(500).style("opacity", 0); - const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(this); - el.classed("hover", false); - }); -}; -funs.push(setupToolTips); -const clear = function(ver = "gen-1") { - vertices = {}; - classes = {}; - edges = []; - funs = [setupToolTips]; - subGraphs = []; - subGraphLookup = {}; - subCount = 0; - tooltips = {}; - firstGraphFlag = true; - version = ver; - config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.c)(); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.v)(); -}; -const setGen = (ver) => { - version = ver || "gen-2"; -}; -const defaultStyle = function() { - return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; -}; -const addSubGraph = function(_id, list, _title) { - let id = _id.text.trim(); - let title = _title.text; - if (_id === _title && _title.text.match(/\s/)) { - id = void 0; - } - function uniq(a) { - const prims = { boolean: {}, number: {}, string: {} }; - const objs = []; - let dir2; - const nodeList2 = a.filter(function(item) { - const type = typeof item; - if (item.stmt && item.stmt === "dir") { - dir2 = item.value; - return false; - } - if (item.trim() === "") { - return false; - } - if (type in prims) { - return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; - } else { - return objs.includes(item) ? false : objs.push(item); - } - }); - return { nodeList: nodeList2, dir: dir2 }; - } - let nodeList = []; - const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); - nodeList = nl; - if (version === "gen-1") { - for (let i = 0; i < nodeList.length; i++) { - nodeList[i] = lookUpDomId(nodeList[i]); - } - } - id = id || "subGraph" + subCount; - title = title || ""; - title = sanitizeText(title); - subCount = subCount + 1; - const subGraph = { - id, - nodes: nodeList, - title: title.trim(), - classes: [], - dir, - labelType: _title.type - }; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); - subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; - subGraphs.push(subGraph); - subGraphLookup[id] = subGraph; - return id; -}; -const getPosForId = function(id) { - for (const [i, subGraph] of subGraphs.entries()) { - if (subGraph.id === id) { - return i; - } - } - return -1; -}; -let secCount = -1; -const posCrossRef = []; -const indexNodes2 = function(id, pos) { - const nodes = subGraphs[pos].nodes; - secCount = secCount + 1; - if (secCount > 2e3) { - return; - } - posCrossRef[secCount] = pos; - if (subGraphs[pos].id === id) { - return { - result: true, - count: 0 - }; - } - let count = 0; - let posCount = 1; - while (count < nodes.length) { - const childPos = getPosForId(nodes[count]); - if (childPos >= 0) { - const res = indexNodes2(id, childPos); - if (res.result) { - return { - result: true, - count: posCount + res.count - }; - } else { - posCount = posCount + res.count; - } - } - count = count + 1; - } - return { - result: false, - count: posCount - }; -}; -const getDepthFirstPos = function(pos) { - return posCrossRef[pos]; -}; -const indexNodes = function() { - secCount = -1; - if (subGraphs.length > 0) { - indexNodes2("none", subGraphs.length - 1); - } -}; -const getSubGraphs = function() { - return subGraphs; -}; -const firstGraph = () => { - if (firstGraphFlag) { - firstGraphFlag = false; - return true; - } - return false; -}; -const destructStartLink = (_str) => { - let str = _str.trim(); - let type = "arrow_open"; - switch (str[0]) { - case "<": - type = "arrow_point"; - str = str.slice(1); - break; - case "x": - type = "arrow_cross"; - str = str.slice(1); - break; - case "o": - type = "arrow_circle"; - str = str.slice(1); - break; - } - let stroke = "normal"; - if (str.includes("=")) { - stroke = "thick"; - } - if (str.includes(".")) { - stroke = "dotted"; - } - return { type, stroke }; -}; -const countChar = (char, str) => { - const length = str.length; - let count = 0; - for (let i = 0; i < length; ++i) { - if (str[i] === char) { - ++count; - } - } - return count; -}; -const destructEndLink = (_str) => { - const str = _str.trim(); - let line = str.slice(0, -1); - let type = "arrow_open"; - switch (str.slice(-1)) { - case "x": - type = "arrow_cross"; - if (str[0] === "x") { - type = "double_" + type; - line = line.slice(1); - } - break; - case ">": - type = "arrow_point"; - if (str[0] === "<") { - type = "double_" + type; - line = line.slice(1); - } - break; - case "o": - type = "arrow_circle"; - if (str[0] === "o") { - type = "double_" + type; - line = line.slice(1); - } - break; - } - let stroke = "normal"; - let length = line.length - 1; - if (line[0] === "=") { - stroke = "thick"; - } - if (line[0] === "~") { - stroke = "invisible"; - } - let dots = countChar(".", line); - if (dots) { - stroke = "dotted"; - length = dots; - } - return { type, stroke, length }; -}; -const destructLink = (_str, _startStr) => { - const info = destructEndLink(_str); - let startInfo; - if (_startStr) { - startInfo = destructStartLink(_startStr); - if (startInfo.stroke !== info.stroke) { - return { type: "INVALID", stroke: "INVALID" }; - } - if (startInfo.type === "arrow_open") { - startInfo.type = info.type; - } else { - if (startInfo.type !== info.type) { - return { type: "INVALID", stroke: "INVALID" }; - } - startInfo.type = "double_" + startInfo.type; - } - if (startInfo.type === "double_arrow") { - startInfo.type = "double_arrow_point"; - } - startInfo.length = info.length; - return startInfo; - } - return info; -}; -const exists = (allSgs, _id) => { - let res = false; - allSgs.forEach((sg) => { - const pos = sg.nodes.indexOf(_id); - if (pos >= 0) { - res = true; - } - }); - return res; -}; -const makeUniq = (sg, allSubgraphs) => { - const res = []; - sg.nodes.forEach((_id, pos) => { - if (!exists(allSubgraphs, _id)) { - res.push(sg.nodes[pos]); - } - }); - return { nodes: res }; -}; -const lex = { - firstGraph -}; -const flowDb = { - defaultConfig: () => _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.K.flowchart, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.g, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.a, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.b, - addVertex, - lookUpDomId, - addLink, - updateLinkInterpolate, - updateLink, - addClass, - setDirection, - setClass, - setTooltip, - getTooltip, - setClickEvent, - setLink, - bindFunctions, - getDirection, - getVertices, - getEdges, - getClasses, - clear, - setGen, - defaultStyle, - addSubGraph, - getDepthFirstPos, - indexNodes, - getSubGraphs, - destructLink, - lex, - exists, - makeUniq, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.t -}; -const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ - __proto__: null, - addClass, - addLink, - addSingleLink, - addSubGraph, - addVertex, - bindFunctions, - clear, - default: flowDb, - defaultStyle, - destructLink, - firstGraph, - getClasses, - getDepthFirstPos, - getDirection, - getEdges, - getSubGraphs, - getTooltip, - getVertices, - indexNodes, - lex, - lookUpDomId, - setClass, - setClickEvent, - setDirection, - setGen, - setLink, - updateLink, - updateLinkInterpolate -}, Symbol.toStringTag, { value: "Module" })); - - - -/***/ }), - -/***/ 88810: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - diagram: () => (/* binding */ diagram) -}); - -// EXTERNAL MODULE: ./node_modules/mermaid/dist/flowDb-c1833063.js -var flowDb_c1833063 = __webpack_require__(32548); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js -var graphlib = __webpack_require__(697); -// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 197 modules -var src = __webpack_require__(26312); -// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules -var mermaid_6dc72991 = __webpack_require__(99702); -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js -var defaults = __webpack_require__(23068); -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + 64 modules -var dagre = __webpack_require__(21176); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/util.js -var util = __webpack_require__(82933); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/arrows.js - - - - -var arrows = { - normal, - vee, - undirected, -}; - -function setArrows(value) { - arrows = value; -} - -function normal(parent, id, edge, type) { - var marker = parent - .append('marker') - .attr('id', id) - .attr('viewBox', '0 0 10 10') - .attr('refX', 9) - .attr('refY', 5) - .attr('markerUnits', 'strokeWidth') - .attr('markerWidth', 8) - .attr('markerHeight', 6) - .attr('orient', 'auto'); - - var path = marker - .append('path') - .attr('d', 'M 0 0 L 10 5 L 0 10 z') - .style('stroke-width', 1) - .style('stroke-dasharray', '1,0'); - util/* applyStyle */.AV(path, edge[type + 'Style']); - if (edge[type + 'Class']) { - path.attr('class', edge[type + 'Class']); - } -} - -function vee(parent, id, edge, type) { - var marker = parent - .append('marker') - .attr('id', id) - .attr('viewBox', '0 0 10 10') - .attr('refX', 9) - .attr('refY', 5) - .attr('markerUnits', 'strokeWidth') - .attr('markerWidth', 8) - .attr('markerHeight', 6) - .attr('orient', 'auto'); - - var path = marker - .append('path') - .attr('d', 'M 0 0 L 10 5 L 0 10 L 4 5 z') - .style('stroke-width', 1) - .style('stroke-dasharray', '1,0'); - util/* applyStyle */.AV(path, edge[type + 'Style']); - if (edge[type + 'Class']) { - path.attr('class', edge[type + 'Class']); - } -} - -function undirected(parent, id, edge, type) { - var marker = parent - .append('marker') - .attr('id', id) - .attr('viewBox', '0 0 10 10') - .attr('refX', 9) - .attr('refY', 5) - .attr('markerUnits', 'strokeWidth') - .attr('markerWidth', 8) - .attr('markerHeight', 6) - .attr('orient', 'auto'); - - var path = marker - .append('path') - .attr('d', 'M 0 5 L 10 5') - .style('stroke-width', 1) - .style('stroke-dasharray', '1,0'); - util/* applyStyle */.AV(path, edge[type + 'Style']); - if (edge[type + 'Class']) { - path.attr('class', edge[type + 'Class']); - } -} - -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js -var add_html_label = __webpack_require__(10646); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-svg-label.js - - - - -function addSVGLabel(root, node) { - var domNode = root; - - domNode.node().appendChild(node.label); - - util/* applyStyle */.AV(domNode, node.labelStyle); - - return domNode; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-text-label.js - - - - -/* - * Attaches a text label to the specified root. Handles escape sequences. - */ -function addTextLabel(root, node) { - var domNode = root.append('text'); - - var lines = processEscapeSequences(node.label).split('\n'); - for (var i = 0; i < lines.length; i++) { - domNode - .append('tspan') - .attr('xml:space', 'preserve') - .attr('dy', '1em') - .attr('x', '1') - .text(lines[i]); - } - - util/* applyStyle */.AV(domNode, node.labelStyle); - - return domNode; -} - -function processEscapeSequences(text) { - var newText = ''; - var escaped = false; - var ch; - for (var i = 0; i < text.length; ++i) { - ch = text[i]; - if (escaped) { - switch (ch) { - case 'n': - newText += '\n'; - break; - default: - newText += ch; - } - escaped = false; - } else if (ch === '\\') { - escaped = true; - } else { - newText += ch; - } - } - return newText; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-label.js - - - - - - -function addLabel(root, node, location) { - var label = node.label; - var labelSvg = root.append('g'); - - // Allow the label to be a string, a function that returns a DOM element, or - // a DOM element itself. - if (node.labelType === 'svg') { - addSVGLabel(labelSvg, node); - } else if (typeof label !== 'string' || node.labelType === 'html') { - (0,add_html_label/* addHtmlLabel */.H)(labelSvg, node); - } else { - addTextLabel(labelSvg, node); - } - - var labelBBox = labelSvg.node().getBBox(); - var y; - switch (location) { - case 'top': - y = -node.height / 2; - break; - case 'bottom': - y = node.height / 2 - labelBBox.height; - break; - default: - y = -labelBBox.height / 2; - } - labelSvg.attr('transform', 'translate(' + -labelBBox.width / 2 + ',' + y + ')'); - - return labelSvg; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-clusters.js - - - - - - -var createClusters = function (selection, g) { - var clusters = g.nodes().filter(function (v) { - return util/* isSubgraph */.De(g, v); - }); - var svgClusters = selection.selectAll('g.cluster').data(clusters, function (v) { - return v; - }); - - util/* applyTransition */.c$(svgClusters.exit(), g).style('opacity', 0).remove(); - - var enterSelection = svgClusters - .enter() - .append('g') - .attr('class', 'cluster') - .attr('id', function (v) { - var node = g.node(v); - return node.id; - }) - .style('opacity', 0) - .each(function (v) { - var node = g.node(v); - var thisGroup = src/* select */.Ltv(this); - src/* select */.Ltv(this).append('rect'); - var labelGroup = thisGroup.append('g').attr('class', 'label'); - addLabel(labelGroup, node, node.clusterLabelPos); - }); - - svgClusters = svgClusters.merge(enterSelection); - - svgClusters = util/* applyTransition */.c$(svgClusters, g).style('opacity', 1); - - svgClusters.selectAll('rect').each(function (c) { - var node = g.node(c); - var domCluster = src/* select */.Ltv(this); - util/* applyStyle */.AV(domCluster, node.style); - }); - - return svgClusters; -}; - -function setCreateClusters(value) { - createClusters = value; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-edge-labels.js - - - - - - - -let createEdgeLabels = function (selection, g) { - var svgEdgeLabels = selection - .selectAll('g.edgeLabel') - .data(g.edges(), function (e) { - return util/* edgeToId */.gh(e); - }) - .classed('update', true); - - svgEdgeLabels.exit().remove(); - svgEdgeLabels.enter().append('g').classed('edgeLabel', true).style('opacity', 0); - - svgEdgeLabels = selection.selectAll('g.edgeLabel'); - - svgEdgeLabels.each(function (e) { - var root = src/* select */.Ltv(this); - root.select('.label').remove(); - var edge = g.edge(e); - var label = addLabel(root, g.edge(e), 0).classed('label', true); - var bbox = label.node().getBBox(); - - if (edge.labelId) { - label.attr('id', edge.labelId); - } - if (!has/* default */.A(edge, 'width')) { - edge.width = bbox.width; - } - if (!has/* default */.A(edge, 'height')) { - edge.height = bbox.height; - } - }); - - var exitSelection; - - if (svgEdgeLabels.exit) { - exitSelection = svgEdgeLabels.exit(); - } else { - exitSelection = svgEdgeLabels.selectAll(null); // empty selection - } - - util/* applyTransition */.c$(exitSelection, g).style('opacity', 0).remove(); - - return svgEdgeLabels; -}; - -function setCreateEdgeLabels(value) { - createEdgeLabels = value; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js -var uniqueId = __webpack_require__(5664); -// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules -var range = __webpack_require__(91395); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.js - - -function intersectNode(node, point) { - return node.intersect(point); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-edge-paths.js - - - - - - - -var createEdgePaths = function (selection, g, arrows) { - var previousPaths = selection - .selectAll('g.edgePath') - .data(g.edges(), function (e) { - return util/* edgeToId */.gh(e); - }) - .classed('update', true); - - var newPaths = enter(previousPaths, g); - exit(previousPaths, g); - - var svgPaths = previousPaths.merge !== undefined ? previousPaths.merge(newPaths) : previousPaths; - util/* applyTransition */.c$(svgPaths, g).style('opacity', 1); - - // Save DOM element in the path group, and set ID and class - svgPaths.each(function (e) { - var domEdge = src/* select */.Ltv(this); - var edge = g.edge(e); - edge.elem = this; - - if (edge.id) { - domEdge.attr('id', edge.id); - } - - util/* applyClass */.nh( - domEdge, - edge['class'], - (domEdge.classed('update') ? 'update ' : '') + 'edgePath' - ); - }); - - svgPaths.selectAll('path.path').each(function (e) { - var edge = g.edge(e); - edge.arrowheadId = uniqueId/* default */.A('arrowhead'); - - var domEdge = src/* select */.Ltv(this) - .attr('marker-end', function () { - return 'url(' + makeFragmentRef(location.href, edge.arrowheadId) + ')'; - }) - .style('fill', 'none'); - - util/* applyTransition */.c$(domEdge, g).attr('d', function (e) { - return calcPoints(g, e); - }); - - util/* applyStyle */.AV(domEdge, edge.style); - }); - - svgPaths.selectAll('defs *').remove(); - svgPaths.selectAll('defs').each(function (e) { - var edge = g.edge(e); - var arrowhead = arrows[edge.arrowhead]; - arrowhead(src/* select */.Ltv(this), edge.arrowheadId, edge, 'arrowhead'); - }); - - return svgPaths; -}; - -function setCreateEdgePaths(value) { - createEdgePaths = value; -} - -function makeFragmentRef(url, fragmentId) { - var baseUrl = url.split('#')[0]; - return baseUrl + '#' + fragmentId; -} - -function calcPoints(g, e) { - var edge = g.edge(e); - var tail = g.node(e.v); - var head = g.node(e.w); - var points = edge.points.slice(1, edge.points.length - 1); - points.unshift(intersectNode(tail, points[0])); - points.push(intersectNode(head, points[points.length - 1])); - - return createLine(edge, points); -} - -function createLine(edge, points) { - // @ts-expect-error - var line = (src/* line */.n8j || src/* svg */.JWy.line)() - .x(function (d) { - return d.x; - }) - .y(function (d) { - return d.y; - }); - - (line.curve || line.interpolate)(edge.curve); - - return line(points); -} - -function getCoords(elem) { - var bbox = elem.getBBox(); - var matrix = elem.ownerSVGElement - .getScreenCTM() - .inverse() - .multiply(elem.getScreenCTM()) - .translate(bbox.width / 2, bbox.height / 2); - return { x: matrix.e, y: matrix.f }; -} - -function enter(svgPaths, g) { - var svgPathsEnter = svgPaths.enter().append('g').attr('class', 'edgePath').style('opacity', 0); - svgPathsEnter - .append('path') - .attr('class', 'path') - .attr('d', function (e) { - var edge = g.edge(e); - var sourceElem = g.node(e.v).elem; - var points = range/* default */.A(edge.points.length).map(function () { - return getCoords(sourceElem); - }); - return createLine(edge, points); - }); - svgPathsEnter.append('defs'); - return svgPathsEnter; -} - -function exit(svgPaths, g) { - var svgPathExit = svgPaths.exit(); - util/* applyTransition */.c$(svgPathExit, g).style('opacity', 0).remove(); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules -var pick = __webpack_require__(81942); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-nodes.js - - - - - - - -var createNodes = function (selection, g, shapes) { - var simpleNodes = g.nodes().filter(function (v) { - return !util/* isSubgraph */.De(g, v); - }); - var svgNodes = selection - .selectAll('g.node') - .data(simpleNodes, function (v) { - return v; - }) - .classed('update', true); - - svgNodes.exit().remove(); - - svgNodes.enter().append('g').attr('class', 'node').style('opacity', 0); - - svgNodes = selection.selectAll('g.node'); - - svgNodes.each(function (v) { - var node = g.node(v); - var thisGroup = src/* select */.Ltv(this); - util/* applyClass */.nh( - thisGroup, - node['class'], - (thisGroup.classed('update') ? 'update ' : '') + 'node' - ); - - thisGroup.select('g.label').remove(); - var labelGroup = thisGroup.append('g').attr('class', 'label'); - var labelDom = addLabel(labelGroup, node); - var shape = shapes[node.shape]; - var bbox = pick/* default */.A(labelDom.node().getBBox(), 'width', 'height'); - - node.elem = this; - - if (node.id) { - thisGroup.attr('id', node.id); - } - if (node.labelId) { - labelGroup.attr('id', node.labelId); - } - - if (has/* default */.A(node, 'width')) { - bbox.width = node.width; - } - if (has/* default */.A(node, 'height')) { - bbox.height = node.height; - } - - bbox.width += node.paddingLeft + node.paddingRight; - bbox.height += node.paddingTop + node.paddingBottom; - labelGroup.attr( - 'transform', - 'translate(' + - (node.paddingLeft - node.paddingRight) / 2 + - ',' + - (node.paddingTop - node.paddingBottom) / 2 + - ')' - ); - - var root = src/* select */.Ltv(this); - root.select('.label-container').remove(); - var shapeSvg = shape(root, bbox, node).classed('label-container', true); - util/* applyStyle */.AV(shapeSvg, node.style); - - var shapeBBox = shapeSvg.node().getBBox(); - node.width = shapeBBox.width; - node.height = shapeBBox.height; - }); - - var exitSelection; - - if (svgNodes.exit) { - exitSelection = svgNodes.exit(); - } else { - exitSelection = svgNodes.selectAll(null); // empty selection - } - - util/* applyTransition */.c$(exitSelection, g).style('opacity', 0).remove(); - - return svgNodes; -}; - -function setCreateNodes(value) { - createNodes = value; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-clusters.js - - - - - -function positionClusters(selection, g) { - var created = selection.filter(function () { - return !src/* select */.Ltv(this).classed('update'); - }); - - function translate(v) { - var node = g.node(v); - return 'translate(' + node.x + ',' + node.y + ')'; - } - - created.attr('transform', translate); - - util/* applyTransition */.c$(selection, g).style('opacity', 1).attr('transform', translate); - - util/* applyTransition */.c$(created.selectAll('rect'), g) - .attr('width', function (v) { - return g.node(v).width; - }) - .attr('height', function (v) { - return g.node(v).height; - }) - .attr('x', function (v) { - var node = g.node(v); - return -node.width / 2; - }) - .attr('y', function (v) { - var node = g.node(v); - return -node.height / 2; - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-edge-labels.js - - - - - - -function positionEdgeLabels(selection, g) { - var created = selection.filter(function () { - return !src/* select */.Ltv(this).classed('update'); - }); - - function translate(e) { - var edge = g.edge(e); - return has/* default */.A(edge, 'x') ? 'translate(' + edge.x + ',' + edge.y + ')' : ''; - } - - created.attr('transform', translate); - - util/* applyTransition */.c$(selection, g).style('opacity', 1).attr('transform', translate); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-nodes.js - - - - - -function positionNodes(selection, g) { - var created = selection.filter(function () { - return !src/* select */.Ltv(this).classed('update'); - }); - - function translate(v) { - var node = g.node(v); - return 'translate(' + node.x + ',' + node.y + ')'; - } - - created.attr('transform', translate); - - util/* applyTransition */.c$(selection, g).style('opacity', 1).attr('transform', translate); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.js - - -function intersectEllipse(node, rx, ry, point) { - // Formulae from: http://mathworld.wolfram.com/Ellipse-LineIntersection.html - - var cx = node.x; - var cy = node.y; - - var px = cx - point.x; - var py = cy - point.y; - - var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); - - var dx = Math.abs((rx * ry * px) / det); - if (point.x < cx) { - dx = -dx; - } - var dy = Math.abs((rx * ry * py) / det); - if (point.y < cy) { - dy = -dy; - } - - return { x: cx + dx, y: cy + dy }; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.js - - - - -function intersectCircle(node, rx, point) { - return intersectEllipse(node, rx, rx, point); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-line.js - - -/* - * Returns the point at which two lines, p and q, intersect or returns - * undefined if they do not intersect. - */ -function intersectLine(p1, p2, q1, q2) { - // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994, - // p7 and p473. - - var a1, a2, b1, b2, c1, c2; - var r1, r2, r3, r4; - var denom, offset, num; - var x, y; - - // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x + - // b1 y + c1 = 0. - a1 = p2.y - p1.y; - b1 = p1.x - p2.x; - c1 = p2.x * p1.y - p1.x * p2.y; - - // Compute r3 and r4. - r3 = a1 * q1.x + b1 * q1.y + c1; - r4 = a1 * q2.x + b1 * q2.y + c1; - - // Check signs of r3 and r4. If both point 3 and point 4 lie on - // same side of line 1, the line segments do not intersect. - if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { - return /*DONT_INTERSECT*/; - } - - // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0 - a2 = q2.y - q1.y; - b2 = q1.x - q2.x; - c2 = q2.x * q1.y - q1.x * q2.y; - - // Compute r1 and r2 - r1 = a2 * p1.x + b2 * p1.y + c2; - r2 = a2 * p2.x + b2 * p2.y + c2; - - // Check signs of r1 and r2. If both point 1 and point 2 lie - // on same side of second line segment, the line segments do - // not intersect. - if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { - return /*DONT_INTERSECT*/; - } - - // Line segments intersect: compute intersection point. - denom = a1 * b2 - a2 * b1; - if (denom === 0) { - return /*COLLINEAR*/; - } - - offset = Math.abs(denom / 2); - - // The denom/2 is to get rounding instead of truncating. It - // is added or subtracted to the numerator, depending upon the - // sign of the numerator. - num = b1 * c2 - b2 * c1; - x = num < 0 ? (num - offset) / denom : (num + offset) / denom; - - num = a2 * c1 - a1 * c2; - y = num < 0 ? (num - offset) / denom : (num + offset) / denom; - - return { x: x, y: y }; -} - -function sameSign(r1, r2) { - return r1 * r2 > 0; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js - - - - -/* - * Returns the point ({x, y}) at which the point argument intersects with the - * node argument assuming that it has the shape specified by polygon. - */ -function intersectPolygon(node, polyPoints, point) { - var x1 = node.x; - var y1 = node.y; - - var intersections = []; - - var minX = Number.POSITIVE_INFINITY; - var minY = Number.POSITIVE_INFINITY; - polyPoints.forEach(function (entry) { - minX = Math.min(minX, entry.x); - minY = Math.min(minY, entry.y); - }); - - var left = x1 - node.width / 2 - minX; - var top = y1 - node.height / 2 - minY; - - for (var i = 0; i < polyPoints.length; i++) { - var p1 = polyPoints[i]; - var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; - var intersect = intersectLine( - node, - point, - { x: left + p1.x, y: top + p1.y }, - { x: left + p2.x, y: top + p2.y } - ); - if (intersect) { - intersections.push(intersect); - } - } - - if (!intersections.length) { - console.log('NO INTERSECTION FOUND, RETURN NODE CENTER', node); - return node; - } - - if (intersections.length > 1) { - // More intersections, find the one nearest to edge end point - intersections.sort(function (p, q) { - var pdx = p.x - point.x; - var pdy = p.y - point.y; - var distp = Math.sqrt(pdx * pdx + pdy * pdy); - - var qdx = q.x - point.x; - var qdy = q.y - point.y; - var distq = Math.sqrt(qdx * qdx + qdy * qdy); - - return distp < distq ? -1 : distp === distq ? 0 : 1; - }); - } - return intersections[0]; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js - - -function intersectRect(node, point) { - var x = node.x; - var y = node.y; - - // Rectangle intersection algorithm from: - // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes - var dx = point.x - x; - var dy = point.y - y; - var w = node.width / 2; - var h = node.height / 2; - - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - // Intersection is top or bottom of rect. - if (dy < 0) { - h = -h; - } - sx = dy === 0 ? 0 : (h * dx) / dy; - sy = h; - } else { - // Intersection is left or right of rect. - if (dx < 0) { - w = -w; - } - sx = w; - sy = dx === 0 ? 0 : (w * dy) / dx; - } - - return { x: x + sx, y: y + sy }; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/shapes.js - - - - - - - -var shapes = { - rect, - ellipse, - circle, - diamond, -}; - -function setShapes(value) { - shapes = value; -} - -function rect(parent, bbox, node) { - var shapeSvg = parent - .insert('rect', ':first-child') - .attr('rx', node.rx) - .attr('ry', node.ry) - .attr('x', -bbox.width / 2) - .attr('y', -bbox.height / 2) - .attr('width', bbox.width) - .attr('height', bbox.height); - - node.intersect = function (point) { - return intersectRect(node, point); - }; - - return shapeSvg; -} - -function ellipse(parent, bbox, node) { - var rx = bbox.width / 2; - var ry = bbox.height / 2; - var shapeSvg = parent - .insert('ellipse', ':first-child') - .attr('x', -bbox.width / 2) - .attr('y', -bbox.height / 2) - .attr('rx', rx) - .attr('ry', ry); - - node.intersect = function (point) { - return intersectEllipse(node, rx, ry, point); - }; - - return shapeSvg; -} - -function circle(parent, bbox, node) { - var r = Math.max(bbox.width, bbox.height) / 2; - var shapeSvg = parent - .insert('circle', ':first-child') - .attr('x', -bbox.width / 2) - .attr('y', -bbox.height / 2) - .attr('r', r); - - node.intersect = function (point) { - return intersectCircle(node, r, point); - }; - - return shapeSvg; -} - -// Circumscribe an ellipse for the bounding box with a diamond shape. I derived -// the function to calculate the diamond shape from: -// http://mathforum.org/kb/message.jspa?messageID=3750236 -function diamond(parent, bbox, node) { - var w = (bbox.width * Math.SQRT2) / 2; - var h = (bbox.height * Math.SQRT2) / 2; - var points = [ - { x: 0, y: -h }, - { x: -w, y: 0 }, - { x: 0, y: h }, - { x: w, y: 0 }, - ]; - var shapeSvg = parent.insert('polygon', ':first-child').attr( - 'points', - points - .map(function (p) { - return p.x + ',' + p.y; - }) - .join(' ') - ); - - node.intersect = function (p) { - return intersectPolygon(node, points, p); - }; - - return shapeSvg; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/render.js - - - - - - - - - - - - - - - -// This design is based on http://bost.ocks.org/mike/chart/. -function render() { - var fn = function (svg, g) { - preProcessGraph(g); - - var outputGroup = createOrSelectGroup(svg, 'output'); - var clustersGroup = createOrSelectGroup(outputGroup, 'clusters'); - var edgePathsGroup = createOrSelectGroup(outputGroup, 'edgePaths'); - var edgeLabels = createEdgeLabels(createOrSelectGroup(outputGroup, 'edgeLabels'), g); - var nodes = createNodes(createOrSelectGroup(outputGroup, 'nodes'), g, shapes); - - (0,dagre/* layout */.Zp)(g); - - positionNodes(nodes, g); - positionEdgeLabels(edgeLabels, g); - createEdgePaths(edgePathsGroup, g, arrows); - - var clusters = createClusters(clustersGroup, g); - positionClusters(clusters, g); - - postProcessGraph(g); - }; - - fn.createNodes = function (value) { - if (!arguments.length) return createNodes; - setCreateNodes(value); - return fn; - }; - - fn.createClusters = function (value) { - if (!arguments.length) return createClusters; - setCreateClusters(value); - return fn; - }; - - fn.createEdgeLabels = function (value) { - if (!arguments.length) return createEdgeLabels; - setCreateEdgeLabels(value); - return fn; - }; - - fn.createEdgePaths = function (value) { - if (!arguments.length) return createEdgePaths; - setCreateEdgePaths(value); - return fn; - }; - - fn.shapes = function (value) { - if (!arguments.length) return shapes; - setShapes(value); - return fn; - }; - - fn.arrows = function (value) { - if (!arguments.length) return arrows; - setArrows(value); - return fn; - }; - - return fn; -} - -var NODE_DEFAULT_ATTRS = { - paddingLeft: 10, - paddingRight: 10, - paddingTop: 10, - paddingBottom: 10, - rx: 0, - ry: 0, - shape: 'rect', -}; - -var EDGE_DEFAULT_ATTRS = { - arrowhead: 'normal', - curve: src/* curveLinear */.lUB, -}; - -function preProcessGraph(g) { - g.nodes().forEach(function (v) { - var node = g.node(v); - if (!has/* default */.A(node, 'label') && !g.children(v).length) { - node.label = v; - } - - if (has/* default */.A(node, 'paddingX')) { - defaults/* default */.A(node, { - paddingLeft: node.paddingX, - paddingRight: node.paddingX, - }); - } - - if (has/* default */.A(node, 'paddingY')) { - defaults/* default */.A(node, { - paddingTop: node.paddingY, - paddingBottom: node.paddingY, - }); - } - - if (has/* default */.A(node, 'padding')) { - defaults/* default */.A(node, { - paddingLeft: node.padding, - paddingRight: node.padding, - paddingTop: node.padding, - paddingBottom: node.padding, - }); - } - - defaults/* default */.A(node, NODE_DEFAULT_ATTRS); - - forEach/* default */.A(['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'], function (k) { - node[k] = Number(node[k]); - }); - - // Save dimensions for restore during post-processing - if (has/* default */.A(node, 'width')) { - node._prevWidth = node.width; - } - if (has/* default */.A(node, 'height')) { - node._prevHeight = node.height; - } - }); - - g.edges().forEach(function (e) { - var edge = g.edge(e); - if (!has/* default */.A(edge, 'label')) { - edge.label = ''; - } - defaults/* default */.A(edge, EDGE_DEFAULT_ATTRS); - }); -} - -function postProcessGraph(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - - // Restore original dimensions - if (has/* default */.A(node, '_prevWidth')) { - node.width = node._prevWidth; - } else { - delete node.width; - } - - if (has/* default */.A(node, '_prevHeight')) { - node.height = node._prevHeight; - } else { - delete node.height; - } - - delete node._prevWidth; - delete node._prevHeight; - }); -} - -function createOrSelectGroup(root, name) { - var selection = root.select('g.' + name); - if (selection.empty()) { - selection = root.append('g').attr('class', name); - } - return selection; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/index.js - - - - - - - -// EXTERNAL MODULE: ./node_modules/mermaid/dist/styles-483fbfea.js -var styles_483fbfea = __webpack_require__(65382); -// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js -var dayjs_min = __webpack_require__(74353); -// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js -var dist = __webpack_require__(16750); -// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.mjs -var purify_es = __webpack_require__(99418); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js -var json = __webpack_require__(14075); -;// CONCATENATED MODULE: ./node_modules/mermaid/dist/flowDiagram-b222e15a.js - - - - - - - - - - - - - - - - - - - - - - - - - -function question(parent, bbox, node) { - const w = bbox.width; - const h = bbox.height; - const s = (w + h) * 0.9; - const points = [ - { x: s / 2, y: 0 }, - { x: s, y: -s / 2 }, - { x: s / 2, y: -s }, - { x: 0, y: -s / 2 } - ]; - const shapeSvg = insertPolygonShape(parent, s, s, points); - node.intersect = function(point) { - return intersectPolygon(node, points, point); - }; - return shapeSvg; -} -function hexagon(parent, bbox, node) { - const f = 4; - const h = bbox.height; - const m = h / f; - const w = bbox.width + 2 * m; - const points = [ - { x: m, y: 0 }, - { x: w - m, y: 0 }, - { x: w, y: -h / 2 }, - { x: w - m, y: -h }, - { x: m, y: -h }, - { x: 0, y: -h / 2 } - ]; - const shapeSvg = insertPolygonShape(parent, w, h, points); - node.intersect = function(point) { - return intersectPolygon(node, points, point); - }; - return shapeSvg; -} -function rect_left_inv_arrow(parent, bbox, node) { - const w = bbox.width; - const h = bbox.height; - const points = [ - { x: -h / 2, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: -h / 2, y: -h }, - { x: 0, y: -h / 2 } - ]; - const shapeSvg = insertPolygonShape(parent, w, h, points); - node.intersect = function(point) { - return intersectPolygon(node, points, point); - }; - return shapeSvg; -} -function lean_right(parent, bbox, node) { - const w = bbox.width; - const h = bbox.height; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const shapeSvg = insertPolygonShape(parent, w, h, points); - node.intersect = function(point) { - return intersectPolygon(node, points, point); - }; - return shapeSvg; -} -function lean_left(parent, bbox, node) { - const w = bbox.width; - const h = bbox.height; - const points = [ - { x: 2 * h / 6, y: 0 }, - { x: w + h / 6, y: 0 }, - { x: w - 2 * h / 6, y: -h }, - { x: -h / 6, y: -h } - ]; - const shapeSvg = insertPolygonShape(parent, w, h, points); - node.intersect = function(point) { - return intersectPolygon(node, points, point); - }; - return shapeSvg; -} -function trapezoid(parent, bbox, node) { - const w = bbox.width; - const h = bbox.height; - const points = [ - { x: -2 * h / 6, y: 0 }, - { x: w + 2 * h / 6, y: 0 }, - { x: w - h / 6, y: -h }, - { x: h / 6, y: -h } - ]; - const shapeSvg = insertPolygonShape(parent, w, h, points); - node.intersect = function(point) { - return intersectPolygon(node, points, point); - }; - return shapeSvg; -} -function inv_trapezoid(parent, bbox, node) { - const w = bbox.width; - const h = bbox.height; - const points = [ - { x: h / 6, y: 0 }, - { x: w - h / 6, y: 0 }, - { x: w + 2 * h / 6, y: -h }, - { x: -2 * h / 6, y: -h } - ]; - const shapeSvg = insertPolygonShape(parent, w, h, points); - node.intersect = function(point) { - return intersectPolygon(node, points, point); - }; - return shapeSvg; -} -function rect_right_inv_arrow(parent, bbox, node) { - const w = bbox.width; - const h = bbox.height; - const points = [ - { x: 0, y: 0 }, - { x: w + h / 2, y: 0 }, - { x: w, y: -h / 2 }, - { x: w + h / 2, y: -h }, - { x: 0, y: -h } - ]; - const shapeSvg = insertPolygonShape(parent, w, h, points); - node.intersect = function(point) { - return intersectPolygon(node, points, point); - }; - return shapeSvg; -} -function stadium(parent, bbox, node) { - const h = bbox.height; - const w = bbox.width + h / 4; - const shapeSvg = parent.insert("rect", ":first-child").attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); - node.intersect = function(point) { - return intersectRect(node, point); - }; - return shapeSvg; -} -function subroutine(parent, bbox, node) { - const w = bbox.width; - const h = bbox.height; - const points = [ - { x: 0, y: 0 }, - { x: w, y: 0 }, - { x: w, y: -h }, - { x: 0, y: -h }, - { x: 0, y: 0 }, - { x: -8, y: 0 }, - { x: w + 8, y: 0 }, - { x: w + 8, y: -h }, - { x: -8, y: -h }, - { x: -8, y: 0 } - ]; - const shapeSvg = insertPolygonShape(parent, w, h, points); - node.intersect = function(point) { - return intersectPolygon(node, points, point); - }; - return shapeSvg; -} -function cylinder(parent, bbox, node) { - const w = bbox.width; - const rx = w / 2; - const ry = rx / (2.5 + w / 50); - const h = bbox.height + ry; - const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; - const shapeSvg = parent.attr("label-offset-y", ry).insert("path", ":first-child").attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); - node.intersect = function(point) { - const pos = intersectRect(node, point); - const x = pos.x - node.x; - if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { - let y = ry * ry * (1 - x * x / (rx * rx)); - if (y != 0) { - y = Math.sqrt(y); - } - y = ry - y; - if (point.y - node.y > 0) { - y = -y; - } - pos.y += y; - } - return pos; - }; - return shapeSvg; -} -function addToRender(render2) { - render2.shapes().question = question; - render2.shapes().hexagon = hexagon; - render2.shapes().stadium = stadium; - render2.shapes().subroutine = subroutine; - render2.shapes().cylinder = cylinder; - render2.shapes().rect_left_inv_arrow = rect_left_inv_arrow; - render2.shapes().lean_right = lean_right; - render2.shapes().lean_left = lean_left; - render2.shapes().trapezoid = trapezoid; - render2.shapes().inv_trapezoid = inv_trapezoid; - render2.shapes().rect_right_inv_arrow = rect_right_inv_arrow; -} -function addToRenderV2(addShape) { - addShape({ question }); - addShape({ hexagon }); - addShape({ stadium }); - addShape({ subroutine }); - addShape({ cylinder }); - addShape({ rect_left_inv_arrow }); - addShape({ lean_right }); - addShape({ lean_left }); - addShape({ trapezoid }); - addShape({ inv_trapezoid }); - addShape({ rect_right_inv_arrow }); -} -function insertPolygonShape(parent, w, h, points) { - return parent.insert("polygon", ":first-child").attr( - "points", - points.map(function(d) { - return d.x + "," + d.y; - }).join(" ") - ).attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); -} -const flowChartShapes = { - addToRender, - addToRenderV2 -}; -const conf = {}; -const setConf = function(cnf) { - const keys = Object.keys(cnf); - for (const key of keys) { - conf[key] = cnf[key]; - } -}; -const addVertices = async function(vert, g, svgId, root, _doc, diagObj) { - const svg = !root ? (0,src/* select */.Ltv)(`[id="${svgId}"]`) : root.select(`[id="${svgId}"]`); - const doc = !_doc ? document : _doc; - const keys = Object.keys(vert); - for (const id of keys) { - const vertex = vert[id]; - let classStr = "default"; - if (vertex.classes.length > 0) { - classStr = vertex.classes.join(" "); - } - const styles = (0,mermaid_6dc72991.k)(vertex.styles); - let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; - let vertexNode; - if ((0,mermaid_6dc72991.m)((0,mermaid_6dc72991.c)().flowchart.htmlLabels)) { - const node = { - label: await (0,mermaid_6dc72991.r)( - vertexText.replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell:disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - (0,mermaid_6dc72991.c)() - ) - }; - vertexNode = (0,add_html_label/* addHtmlLabel */.H)(svg, node).node(); - vertexNode.parentNode.removeChild(vertexNode); - } else { - const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); - svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); - const rows = vertexText.split(mermaid_6dc72991.e.lineBreakRegex); - for (const row of rows) { - const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); - tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); - tspan.setAttribute("dy", "1em"); - tspan.setAttribute("x", "1"); - tspan.textContent = row; - svgLabel.appendChild(tspan); - } - vertexNode = svgLabel; - } - let radius = 0; - let _shape = ""; - switch (vertex.type) { - case "round": - radius = 5; - _shape = "rect"; - break; - case "square": - _shape = "rect"; - break; - case "diamond": - _shape = "question"; - break; - case "hexagon": - _shape = "hexagon"; - break; - case "odd": - _shape = "rect_left_inv_arrow"; - break; - case "lean_right": - _shape = "lean_right"; - break; - case "lean_left": - _shape = "lean_left"; - break; - case "trapezoid": - _shape = "trapezoid"; - break; - case "inv_trapezoid": - _shape = "inv_trapezoid"; - break; - case "odd_right": - _shape = "rect_left_inv_arrow"; - break; - case "circle": - _shape = "circle"; - break; - case "ellipse": - _shape = "ellipse"; - break; - case "stadium": - _shape = "stadium"; - break; - case "subroutine": - _shape = "subroutine"; - break; - case "cylinder": - _shape = "cylinder"; - break; - case "group": - _shape = "rect"; - break; - default: - _shape = "rect"; - } - mermaid_6dc72991.l.warn("Adding node", vertex.id, vertex.domId); - g.setNode(diagObj.db.lookUpDomId(vertex.id), { - labelType: "svg", - labelStyle: styles.labelStyle, - shape: _shape, - label: vertexNode, - rx: radius, - ry: radius, - class: classStr, - style: styles.style, - id: diagObj.db.lookUpDomId(vertex.id) - }); - } -}; -const addEdges = async function(edges, g, diagObj) { - let cnt = 0; - let defaultStyle; - let defaultLabelStyle; - if (edges.defaultStyle !== void 0) { - const defaultStyles = (0,mermaid_6dc72991.k)(edges.defaultStyle); - defaultStyle = defaultStyles.style; - defaultLabelStyle = defaultStyles.labelStyle; - } - for (const edge of edges) { - cnt++; - const linkId = "L-" + edge.start + "-" + edge.end; - const linkNameStart = "LS-" + edge.start; - const linkNameEnd = "LE-" + edge.end; - const edgeData = {}; - if (edge.type === "arrow_open") { - edgeData.arrowhead = "none"; - } else { - edgeData.arrowhead = "normal"; - } - let style = ""; - let labelStyle = ""; - if (edge.style !== void 0) { - const styles = (0,mermaid_6dc72991.k)(edge.style); - style = styles.style; - labelStyle = styles.labelStyle; - } else { - switch (edge.stroke) { - case "normal": - style = "fill:none"; - if (defaultStyle !== void 0) { - style = defaultStyle; - } - if (defaultLabelStyle !== void 0) { - labelStyle = defaultLabelStyle; - } - break; - case "dotted": - style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; - break; - case "thick": - style = " stroke-width: 3.5px;fill:none"; - break; - } - } - edgeData.style = style; - edgeData.labelStyle = labelStyle; - if (edge.interpolate !== void 0) { - edgeData.curve = (0,mermaid_6dc72991.n)(edge.interpolate, src/* curveLinear */.lUB); - } else if (edges.defaultInterpolate !== void 0) { - edgeData.curve = (0,mermaid_6dc72991.n)(edges.defaultInterpolate, src/* curveLinear */.lUB); - } else { - edgeData.curve = (0,mermaid_6dc72991.n)(conf.curve, src/* curveLinear */.lUB); - } - if (edge.text === void 0) { - if (edge.style !== void 0) { - edgeData.arrowheadStyle = "fill: #333"; - } - } else { - edgeData.arrowheadStyle = "fill: #333"; - edgeData.labelpos = "c"; - if ((0,mermaid_6dc72991.m)((0,mermaid_6dc72991.c)().flowchart.htmlLabels)) { - edgeData.labelType = "html"; - edgeData.label = `<span id="L-${linkId}" class="edgeLabel L-${linkNameStart}' L-${linkNameEnd}" style="${edgeData.labelStyle}">${await (0,mermaid_6dc72991.r)( - edge.text.replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell:disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - (0,mermaid_6dc72991.c)() - )}</span>`; - } else { - edgeData.labelType = "text"; - edgeData.label = edge.text.replace(mermaid_6dc72991.e.lineBreakRegex, "\n"); - if (edge.style === void 0) { - edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none"; - } - edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); - } - } - edgeData.id = linkId; - edgeData.class = linkNameStart + " " + linkNameEnd; - edgeData.minlen = edge.length || 1; - g.setEdge(diagObj.db.lookUpDomId(edge.start), diagObj.db.lookUpDomId(edge.end), edgeData, cnt); - } -}; -const getClasses = function(text, diagObj) { - mermaid_6dc72991.l.info("Extracting classes"); - return diagObj.db.getClasses(); -}; -const draw = async function(text, id, _version, diagObj) { - mermaid_6dc72991.l.info("Drawing flowchart"); - const { securityLevel, flowchart: conf2 } = (0,mermaid_6dc72991.c)(); - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,src/* select */.Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,src/* select */.Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ltv)("body"); - const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; - let dir = diagObj.db.getDirection(); - if (dir === void 0) { - dir = "TD"; - } - const nodeSpacing = conf2.nodeSpacing || 50; - const rankSpacing = conf2.rankSpacing || 50; - const g = new graphlib/* Graph */.T({ - multigraph: true, - compound: true - }).setGraph({ - rankdir: dir, - nodesep: nodeSpacing, - ranksep: rankSpacing, - marginx: 8, - marginy: 8 - }).setDefaultEdgeLabel(function() { - return {}; - }); - let subG; - const subGraphs = diagObj.db.getSubGraphs(); - for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { - subG = subGraphs[i2]; - diagObj.db.addVertex(subG.id, subG.title, "group", void 0, subG.classes); - } - const vert = diagObj.db.getVertices(); - mermaid_6dc72991.l.warn("Get vertices", vert); - const edges = diagObj.db.getEdges(); - let i = 0; - for (i = subGraphs.length - 1; i >= 0; i--) { - subG = subGraphs[i]; - (0,src/* selectAll */.Ubm)("cluster").append("text"); - for (let j = 0; j < subG.nodes.length; j++) { - mermaid_6dc72991.l.warn( - "Setting subgraph", - subG.nodes[j], - diagObj.db.lookUpDomId(subG.nodes[j]), - diagObj.db.lookUpDomId(subG.id) - ); - g.setParent(diagObj.db.lookUpDomId(subG.nodes[j]), diagObj.db.lookUpDomId(subG.id)); - } - } - await addVertices(vert, g, id, root, doc, diagObj); - await addEdges(edges, g, diagObj); - const render$1 = new render(); - flowChartShapes.addToRender(render$1); - render$1.arrows().none = function normal(parent, id2, edge, type) { - const marker = parent.append("marker").attr("id", id2).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 8).attr("markerHeight", 6).attr("orient", "auto"); - const path = marker.append("path").attr("d", "M 0 0 L 0 0 L 0 0 z"); - (0,util/* applyStyle */.AV)(path, edge[type + "Style"]); - }; - render$1.arrows().normal = function normal(parent, id2) { - const marker = parent.append("marker").attr("id", id2).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 8).attr("markerHeight", 6).attr("orient", "auto"); - marker.append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowheadPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); - }; - const svg = root.select(`[id="${id}"]`); - const element = root.select("#" + id + " g"); - render$1(element, g); - element.selectAll("g.node").attr("title", function() { - return diagObj.db.getTooltip(this.id); - }); - diagObj.db.indexNodes("subGraph" + i); - for (i = 0; i < subGraphs.length; i++) { - subG = subGraphs[i]; - if (subG.title !== "undefined") { - const clusterRects = doc.querySelectorAll( - "#" + id + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"] rect' - ); - const clusterEl = doc.querySelectorAll( - "#" + id + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"]' - ); - const xPos = clusterRects[0].x.baseVal.value; - const yPos = clusterRects[0].y.baseVal.value; - const _width = clusterRects[0].width.baseVal.value; - const cluster = (0,src/* select */.Ltv)(clusterEl[0]); - const te = cluster.select(".label"); - te.attr("transform", `translate(${xPos + _width / 2}, ${yPos + 14})`); - te.attr("id", id + "Text"); - for (let j = 0; j < subG.classes.length; j++) { - clusterEl[0].classList.add(subG.classes[j]); - } - } - } - if (!conf2.htmlLabels) { - const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); - for (const label of labels) { - const dim = label.getBBox(); - const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); - rect.setAttribute("rx", 0); - rect.setAttribute("ry", 0); - rect.setAttribute("width", dim.width); - rect.setAttribute("height", dim.height); - label.insertBefore(rect, label.firstChild); - } - } - (0,mermaid_6dc72991.o)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); - const keys = Object.keys(vert); - keys.forEach(function(key) { - const vertex = vert[key]; - if (vertex.link) { - const node = root.select("#" + id + ' [id="' + diagObj.db.lookUpDomId(key) + '"]'); - if (node) { - const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); - link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); - link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); - link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); - if (securityLevel === "sandbox") { - link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); - } else if (vertex.linkTarget) { - link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); - } - const linkNode = node.insert(function() { - return link; - }, ":first-child"); - const shape = node.select(".label-container"); - if (shape) { - linkNode.append(function() { - return shape.node(); - }); - } - const label = node.select(".label"); - if (label) { - linkNode.append(function() { - return label.node(); - }); - } - } - } - }); -}; -const flowRenderer = { - setConf, - addVertices, - addEdges, - getClasses, - draw -}; -const diagram = { - parser: flowDb_c1833063.p, - db: flowDb_c1833063.f, - renderer: styles_483fbfea.f, - styles: styles_483fbfea.a, - init: (cnf) => { - if (!cnf.flowchart) { - cnf.flowchart = {}; - } - cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; - flowRenderer.setConf(cnf.flowchart); - flowDb_c1833063.f.clear(); - flowDb_c1833063.f.setGen("gen-1"); - } -}; - - - -/***/ }), - -/***/ 35364: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ r: () => (/* binding */ render) -/* harmony export */ }); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(21176); -/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14075); -/* harmony import */ var _edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(98055); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(697); -/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(18897); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(26312); - - - - - - - -let clusterDb = {}; -let descendants = {}; -let parents = {}; -const clear$1 = () => { - descendants = {}; - parents = {}; - clusterDb = {}; -}; -const isDescendant = (id, ancestorId) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDescendant", ancestorId, " ", id, " = ", descendants[ancestorId].includes(id)); - if (descendants[ancestorId].includes(id)) { - return true; - } - return false; -}; -const edgeInCluster = (edge, clusterId) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Descendants of ", clusterId, " is ", descendants[clusterId]); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); - if (edge.v === clusterId) { - return false; - } - if (edge.w === clusterId) { - return false; - } - if (!descendants[clusterId]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in descendants"); - return false; - } - return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); -}; -const copy = (clusterId, graph, newGraph, rootId) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Copying children of ", - clusterId, - "root", - rootId, - "data", - graph.node(clusterId), - rootId - ); - const nodes = graph.children(clusterId) || []; - if (clusterId !== rootId) { - nodes.push(clusterId); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); - nodes.forEach((node) => { - if (graph.children(node).length > 0) { - copy(node, graph, newGraph, rootId); - } else { - const data = graph.node(node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); - newGraph.setNode(node, data); - if (rootId !== graph.parent(node)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); - newGraph.setParent(node, graph.parent(node)); - } - if (clusterId !== rootId && node !== clusterId) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); - newGraph.setParent(node, clusterId); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( - "Not Setting parent for node=", - node, - "cluster!==rootId", - clusterId !== rootId, - "node!==clusterId", - node !== clusterId - ); - } - const edges = graph.edges(node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); - edges.forEach((edge) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); - const data2 = graph.edge(edge.v, edge.w, edge.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); - try { - if (edgeInCluster(edge, rootId)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); - newGraph.setEdge(edge.v, edge.w, data2, edge.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info( - "Skipping copy of edge ", - edge.v, - "-->", - edge.w, - " rootId: ", - rootId, - " clusterId:", - clusterId - ); - } - } catch (e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); - } - }); - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); - graph.removeNode(node); - }); -}; -const extractDescendants = (id, graph) => { - const children = graph.children(id); - let res = [...children]; - for (const child of children) { - parents[child] = id; - res = [...res, ...extractDescendants(child, graph)]; - } - return res; -}; -const findNonClusterChild = (id, graph) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); - const children = graph.children(id); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); - if (children.length < 1) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); - return id; - } - for (const child of children) { - const _id = findNonClusterChild(child, graph); - if (_id) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); - return _id; - } - } -}; -const getAnchorId = (id) => { - if (!clusterDb[id]) { - return id; - } - if (!clusterDb[id].externalConnections) { - return id; - } - if (clusterDb[id]) { - return clusterDb[id].id; - } - return id; -}; -const adjustClustersAndEdges = (graph, depth) => { - if (!graph || depth > 10) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); - return; - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); - } - graph.nodes().forEach(function(id) { - const children = graph.children(id); - if (children.length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Cluster identified", - id, - " Replacement id in edges: ", - findNonClusterChild(id, graph) - ); - descendants[id] = extractDescendants(id, graph); - clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; - } - }); - graph.nodes().forEach(function(id) { - const children = graph.children(id); - const edges = graph.edges(); - if (children.length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); - edges.forEach((edge) => { - if (edge.v !== id && edge.w !== id) { - const d1 = isDescendant(edge.v, id); - const d2 = isDescendant(edge.w, id); - if (d1 ^ d2) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Descendants of XXX ", id, ": ", descendants[id]); - clusterDb[id].externalConnections = true; - } - } - }); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); - } - }); - for (let id of Object.keys(clusterDb)) { - const nonClusterChild = clusterDb[id].id; - const parent = graph.parent(nonClusterChild); - if (parent !== id && clusterDb[parent] && !clusterDb[parent].externalConnections) { - clusterDb[id].id = parent; - } - } - graph.edges().forEach(function(e) { - const edge = graph.edge(e); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); - let v = e.v; - let w = e.w; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Fix XXX", - clusterDb, - "ids:", - e.v, - e.w, - "Translating: ", - clusterDb[e.v], - " --- ", - clusterDb[e.w] - ); - if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); - v = getAnchorId(e.v); - w = getAnchorId(e.w); - graph.removeEdge(e.v, e.w, e.name); - const specialId = e.w + "---" + e.v; - graph.setNode(specialId, { - domId: specialId, - id: specialId, - labelStyle: "", - labelText: edge.label, - padding: 0, - shape: "labelRect", - style: "" - }); - const edge1 = structuredClone(edge); - const edge2 = structuredClone(edge); - edge1.label = ""; - edge1.arrowTypeEnd = "none"; - edge2.label = ""; - edge1.fromCluster = e.v; - edge2.toCluster = e.v; - graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); - graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); - } else if (clusterDb[e.v] || clusterDb[e.w]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); - v = getAnchorId(e.v); - w = getAnchorId(e.w); - graph.removeEdge(e.v, e.w, e.name); - if (v !== e.v) { - const parent = graph.parent(v); - clusterDb[parent].externalConnections = true; - edge.fromCluster = e.v; - } - if (w !== e.w) { - const parent = graph.parent(w); - clusterDb[parent].externalConnections = true; - edge.toCluster = e.w; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); - graph.setEdge(v, w, edge, e.name); - } - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - extractor(graph, 0); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); -}; -const extractor = (graph, depth) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph), graph.children("D")); - if (depth > 10) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); - return; - } - let nodes = graph.nodes(); - let hasChildren = false; - for (const node of nodes) { - const children = graph.children(node); - hasChildren = hasChildren || children.length > 0; - } - if (!hasChildren) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); - return; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); - for (const node of nodes) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( - "Extracting node", - node, - clusterDb, - clusterDb[node] && !clusterDb[node].externalConnections, - !graph.parent(node), - graph.node(node), - graph.children("D"), - " Depth ", - depth - ); - if (!clusterDb[node]) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); - } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && - graph.children(node) && graph.children(node).length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Cluster without external connections, without a parent and with children", - node, - depth - ); - const graphSettings = graph.graph(); - let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; - if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { - dir = clusterDb[node].clusterData.dir; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); - } - const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .T({ - multigraph: true, - compound: true - }).setGraph({ - rankdir: dir, - // Todo: set proper spacing - nodesep: 50, - ranksep: 50, - marginx: 8, - marginy: 8 - }).setDefaultEdgeLabel(function() { - return {}; - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - copy(node, graph, clusterGraph, node); - graph.setNode(node, { - clusterNode: true, - id: node, - clusterData: clusterDb[node].clusterData, - labelText: clusterDb[node].labelText, - graph: clusterGraph - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(clusterGraph)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( - "Cluster ** ", - node, - " **not meeting the criteria !externalConnections:", - !clusterDb[node].externalConnections, - " no parent: ", - !graph.parent(node), - " children ", - graph.children(node) && graph.children(node).length > 0, - graph.children("D"), - depth - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); - } - } - nodes = graph.nodes(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); - for (const node of nodes) { - const data = graph.node(node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); - if (data.clusterNode) { - extractor(data.graph, depth + 1); - } - } -}; -const sorter = (graph, nodes) => { - if (nodes.length === 0) { - return []; - } - let result = Object.assign(nodes); - nodes.forEach((node) => { - const children = graph.children(node); - const sorted = sorter(graph, children); - result = [...result, ...sorted]; - }); - return result; -}; -const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); -const rect = (parent, node) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const useHtmlLabels = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels); - const label = shapeSvg.insert("g").attr("class", "cluster-label"); - const text = node.labelType === "markdown" ? (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); - let bbox = text.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - const padding = 0 * node.padding; - const halfPadding = padding / 2; - const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; - if (node.width <= bbox.width + padding) { - node.diff = (bbox.width - node.width) / 2 - node.padding / 2; - } else { - node.diff = -node.padding / 2; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); - rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); - const { subGraphTitleTopMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); - if (useHtmlLabels) { - label.attr( - "transform", - // This puts the label on top of the box instead of inside it - `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` - ); - } else { - label.attr( - "transform", - // This puts the label on top of the box instead of inside it - `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` - ); - } - const rectBox = rect2.node().getBBox(); - node.width = rectBox.width; - node.height = rectBox.height; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const noteGroup = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const padding = 0 * node.padding; - const halfPadding = padding / 2; - rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); - const rectBox = rect2.node().getBBox(); - node.width = rectBox.width; - node.height = rectBox.height; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const roundedWithTitle = (parent, node) => { - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const label = shapeSvg.insert("g").attr("class", "cluster-label"); - const innerRect = shapeSvg.append("rect"); - const text = label.node().appendChild((0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); - let bbox = text.getBBox(); - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { - const div = text.children[0]; - const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ltv)(text); - bbox = div.getBoundingClientRect(); - dv.attr("width", bbox.width); - dv.attr("height", bbox.height); - } - bbox = text.getBBox(); - const padding = 0 * node.padding; - const halfPadding = padding / 2; - const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; - if (node.width <= bbox.width + node.padding) { - node.diff = (bbox.width + node.padding * 0 - node.width) / 2; - } else { - node.diff = -node.padding / 2; - } - rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); - innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); - const { subGraphTitleTopMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); - label.attr( - "transform", - `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels) ? 5 : 3) + subGraphTitleTopMargin})` - ); - const rectBox = rect2.node().getBBox(); - node.height = rectBox.height; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const divider = (parent, node) => { - const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); - const rect2 = shapeSvg.insert("rect", ":first-child"); - const padding = 0 * node.padding; - const halfPadding = padding / 2; - rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); - const rectBox = rect2.node().getBBox(); - node.width = rectBox.width; - node.height = rectBox.height; - node.diff = -node.padding / 2; - node.intersect = function(point) { - return (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); - }; - return shapeSvg; -}; -const shapes = { rect, roundedWithTitle, noteGroup, divider }; -let clusterElems = {}; -const insertCluster = (elem, node) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); - const shape = node.shape || "rect"; - clusterElems[node.id] = shapes[shape](elem, node); -}; -const clear = () => { - clusterElems = {}; -}; -const recursiveRender = async (_elem, graph, diagramType, id, parentCluster, siteConfig) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph), parentCluster); - const dir = graph.graph().rankdir; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); - const elem = _elem.insert("g").attr("class", "root"); - if (!graph.nodes()) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); - } - if (graph.edges().length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); - } - const clusters = elem.insert("g").attr("class", "clusters"); - const edgePaths = elem.insert("g").attr("class", "edgePaths"); - const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); - const nodes = elem.insert("g").attr("class", "nodes"); - await Promise.all( - graph.nodes().map(async function(v) { - const node = graph.node(v); - if (parentCluster !== void 0) { - const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); - graph.setNode(parentCluster.id, data); - if (!graph.parent(v)) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); - graph.setParent(v, parentCluster.id, data); - } - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); - if (node && node.clusterNode) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); - const o = await recursiveRender( - nodes, - node.graph, - diagramType, - id, - graph.node(v), - siteConfig - ); - const newEl = o.elem; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); - node.diff = o.diff || 0; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); - } else { - if (graph.children(v).length > 0) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); - clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); - await (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); - } - } - }) - ); - graph.edges().forEach(function(e) { - const edge = graph.edge(e.v, e.w, e.name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translating: ", clusterDb[e.v], clusterDb[e.w]); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); - }); - graph.edges().forEach(function(e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); - (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .Zp)(graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph)); - let diff = 0; - const { subGraphTitleTotalMargin } = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); - sortNodesByHierarchy(graph).forEach(function(v) { - const node = graph.node(v); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info( - "Position " + v + ": (" + node.x, - "," + node.y, - ") width: ", - node.width, - " height: ", - node.height - ); - if (node && node.clusterNode) { - node.y += subGraphTitleTotalMargin; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); - } else { - if (graph.children(v).length > 0) { - node.height += subGraphTitleTotalMargin; - insertCluster(clusters, node); - clusterDb[node.id].node = node; - } else { - node.y += subGraphTitleTotalMargin / 2; - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); - } - } - }); - graph.edges().forEach(function(e) { - const edge = graph.edge(e); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); - edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2); - const paths = (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.h)(edgePaths, e, edge, clusterDb, diagramType, graph, id); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.j)(edge, paths); - }); - graph.nodes().forEach(function(v) { - const n = graph.node(v); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); - if (n.type === "group") { - diff = n.diff; - } - }); - return { elem, diff }; -}; -const render = async (elem, graph, markers, diagramType, id) => { - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramType, id); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.b)(); - (0,_edges_066a5561_js__WEBPACK_IMPORTED_MODULE_6__.d)(); - clear(); - clear$1(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph))); - adjustClustersAndEdges(graph); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .M(graph))); - const siteConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - await recursiveRender(elem, graph, diagramType, id, void 0, siteConfig); -}; - - - -/***/ }), - -/***/ 65382: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ a: () => (/* binding */ flowStyles), -/* harmony export */ f: () => (/* binding */ flowRendererV2) -/* harmony export */ }); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(697); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26312); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(99702); -/* harmony import */ var _index_01f381cb_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(35364); -/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10646); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(75937); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(25582); - - - - - - -const conf = {}; -const setConf = function(cnf) { - const keys = Object.keys(cnf); - for (const key of keys) { - conf[key] = cnf[key]; - } -}; -const addVertices = async function(vert, g, svgId, root, doc, diagObj) { - const svg = root.select(`[id="${svgId}"]`); - const keys = Object.keys(vert); - for (const id of keys) { - const vertex = vert[id]; - let classStr = "default"; - if (vertex.classes.length > 0) { - classStr = vertex.classes.join(" "); - } - classStr = classStr + " flowchart-label"; - const styles = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.k)(vertex.styles); - let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; - let vertexNode; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("vertex", vertex, vertex.labelType); - if (vertex.labelType === "markdown") { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("vertex", vertex, vertex.labelType); - } else { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.m)((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.htmlLabels)) { - const node = { - label: vertexText - }; - vertexNode = (0,dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_3__/* .addHtmlLabel */ .H)(svg, node).node(); - vertexNode.parentNode.removeChild(vertexNode); - } else { - const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); - svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); - const rows = vertexText.split(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.e.lineBreakRegex); - for (const row of rows) { - const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); - tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); - tspan.setAttribute("dy", "1em"); - tspan.setAttribute("x", "1"); - tspan.textContent = row; - svgLabel.appendChild(tspan); - } - vertexNode = svgLabel; - } - } - let radius = 0; - let _shape = ""; - switch (vertex.type) { - case "round": - radius = 5; - _shape = "rect"; - break; - case "square": - _shape = "rect"; - break; - case "diamond": - _shape = "question"; - break; - case "hexagon": - _shape = "hexagon"; - break; - case "odd": - _shape = "rect_left_inv_arrow"; - break; - case "lean_right": - _shape = "lean_right"; - break; - case "lean_left": - _shape = "lean_left"; - break; - case "trapezoid": - _shape = "trapezoid"; - break; - case "inv_trapezoid": - _shape = "inv_trapezoid"; - break; - case "odd_right": - _shape = "rect_left_inv_arrow"; - break; - case "circle": - _shape = "circle"; - break; - case "ellipse": - _shape = "ellipse"; - break; - case "stadium": - _shape = "stadium"; - break; - case "subroutine": - _shape = "subroutine"; - break; - case "cylinder": - _shape = "cylinder"; - break; - case "group": - _shape = "rect"; - break; - case "doublecircle": - _shape = "doublecircle"; - break; - default: - _shape = "rect"; - } - const labelText = await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.r)(vertexText, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)()); - g.setNode(vertex.id, { - labelStyle: styles.labelStyle, - shape: _shape, - labelText, - labelType: vertex.labelType, - rx: radius, - ry: radius, - class: classStr, - style: styles.style, - id: vertex.id, - link: vertex.link, - linkTarget: vertex.linkTarget, - tooltip: diagObj.db.getTooltip(vertex.id) || "", - domId: diagObj.db.lookUpDomId(vertex.id), - haveCallback: vertex.haveCallback, - width: vertex.type === "group" ? 500 : void 0, - dir: vertex.dir, - type: vertex.type, - props: vertex.props, - padding: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.padding - }); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("setNode", { - labelStyle: styles.labelStyle, - labelType: vertex.labelType, - shape: _shape, - labelText, - rx: radius, - ry: radius, - class: classStr, - style: styles.style, - id: vertex.id, - domId: diagObj.db.lookUpDomId(vertex.id), - width: vertex.type === "group" ? 500 : void 0, - type: vertex.type, - dir: vertex.dir, - props: vertex.props, - padding: (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.padding - }); - } -}; -const addEdges = async function(edges, g, diagObj) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 edges = ", edges); - let cnt = 0; - let linkIdCnt = {}; - let defaultStyle; - let defaultLabelStyle; - if (edges.defaultStyle !== void 0) { - const defaultStyles = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.k)(edges.defaultStyle); - defaultStyle = defaultStyles.style; - defaultLabelStyle = defaultStyles.labelStyle; - } - for (const edge of edges) { - cnt++; - const linkIdBase = "L-" + edge.start + "-" + edge.end; - if (linkIdCnt[linkIdBase] === void 0) { - linkIdCnt[linkIdBase] = 0; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); - } else { - linkIdCnt[linkIdBase]++; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); - } - let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); - const linkNameStart = "LS-" + edge.start; - const linkNameEnd = "LE-" + edge.end; - const edgeData = { style: "", labelStyle: "" }; - edgeData.minlen = edge.length || 1; - if (edge.type === "arrow_open") { - edgeData.arrowhead = "none"; - } else { - edgeData.arrowhead = "normal"; - } - edgeData.arrowTypeStart = "arrow_open"; - edgeData.arrowTypeEnd = "arrow_open"; - switch (edge.type) { - case "double_arrow_cross": - edgeData.arrowTypeStart = "arrow_cross"; - case "arrow_cross": - edgeData.arrowTypeEnd = "arrow_cross"; - break; - case "double_arrow_point": - edgeData.arrowTypeStart = "arrow_point"; - case "arrow_point": - edgeData.arrowTypeEnd = "arrow_point"; - break; - case "double_arrow_circle": - edgeData.arrowTypeStart = "arrow_circle"; - case "arrow_circle": - edgeData.arrowTypeEnd = "arrow_circle"; - break; - } - let style = ""; - let labelStyle = ""; - switch (edge.stroke) { - case "normal": - style = "fill:none;"; - if (defaultStyle !== void 0) { - style = defaultStyle; - } - if (defaultLabelStyle !== void 0) { - labelStyle = defaultLabelStyle; - } - edgeData.thickness = "normal"; - edgeData.pattern = "solid"; - break; - case "dotted": - edgeData.thickness = "normal"; - edgeData.pattern = "dotted"; - edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; - break; - case "thick": - edgeData.thickness = "thick"; - edgeData.pattern = "solid"; - edgeData.style = "stroke-width: 3.5px;fill:none;"; - break; - case "invisible": - edgeData.thickness = "invisible"; - edgeData.pattern = "solid"; - edgeData.style = "stroke-width: 0;fill:none;"; - break; - } - if (edge.style !== void 0) { - const styles = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.k)(edge.style); - style = styles.style; - labelStyle = styles.labelStyle; - } - edgeData.style = edgeData.style += style; - edgeData.labelStyle = edgeData.labelStyle += labelStyle; - if (edge.interpolate !== void 0) { - edgeData.curve = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.n)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .lUB); - } else if (edges.defaultInterpolate !== void 0) { - edgeData.curve = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.n)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .lUB); - } else { - edgeData.curve = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.n)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .lUB); - } - if (edge.text === void 0) { - if (edge.style !== void 0) { - edgeData.arrowheadStyle = "fill: #333"; - } - } else { - edgeData.arrowheadStyle = "fill: #333"; - edgeData.labelpos = "c"; - } - edgeData.labelType = edge.labelType; - edgeData.label = await (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.r)(edge.text.replace(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.e.lineBreakRegex, "\n"), (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)()); - if (edge.style === void 0) { - edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; - } - edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); - edgeData.id = linkId; - edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; - g.setEdge(edge.start, edge.end, edgeData, cnt); - } -}; -const getClasses = function(text, diagObj) { - return diagObj.db.getClasses(); -}; -const draw = async function(text, id, _version, diagObj) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Drawing flowchart"); - let dir = diagObj.db.getDirection(); - if (dir === void 0) { - dir = "TD"; - } - const { securityLevel, flowchart: conf2 } = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.c)(); - const nodeSpacing = conf2.nodeSpacing || 50; - const rankSpacing = conf2.rankSpacing || 50; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("body"); - const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; - const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .T({ - multigraph: true, - compound: true - }).setGraph({ - rankdir: dir, - nodesep: nodeSpacing, - ranksep: rankSpacing, - marginx: 0, - marginy: 0 - }).setDefaultEdgeLabel(function() { - return {}; - }); - let subG; - const subGraphs = diagObj.db.getSubGraphs(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Subgraphs - ", subGraphs); - for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { - subG = subGraphs[i2]; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Subgraph - ", subG); - diagObj.db.addVertex( - subG.id, - { text: subG.title, type: subG.labelType }, - "group", - void 0, - subG.classes, - subG.dir - ); - } - const vert = diagObj.db.getVertices(); - const edges = diagObj.db.getEdges(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Edges", edges); - let i = 0; - for (i = subGraphs.length - 1; i >= 0; i--) { - subG = subGraphs[i]; - (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .selectAll */ .Ubm)("cluster").append("text"); - for (let j = 0; j < subG.nodes.length; j++) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Setting up subgraphs", subG.nodes[j], subG.id); - g.setParent(subG.nodes[j], subG.id); - } - } - await addVertices(vert, g, id, root, doc, diagObj); - await addEdges(edges, g); - const svg = root.select(`[id="${id}"]`); - const element = root.select("#" + id + " g"); - await (0,_index_01f381cb_js__WEBPACK_IMPORTED_MODULE_4__.r)(element, g, ["point", "circle", "cross"], "flowchart", id); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.u.insertTitle(svg, "flowchartTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle()); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_2__.o)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); - diagObj.db.indexNodes("subGraph" + i); - if (!conf2.htmlLabels) { - const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); - for (const label of labels) { - const dim = label.getBBox(); - const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); - rect.setAttribute("rx", 0); - rect.setAttribute("ry", 0); - rect.setAttribute("width", dim.width); - rect.setAttribute("height", dim.height); - label.insertBefore(rect, label.firstChild); - } - } - const keys = Object.keys(vert); - keys.forEach(function(key) { - const vertex = vert[key]; - if (vertex.link) { - const node = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ltv)("#" + id + ' [id="' + key + '"]'); - if (node) { - const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); - link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); - link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); - link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); - if (securityLevel === "sandbox") { - link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); - } else if (vertex.linkTarget) { - link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); - } - const linkNode = node.insert(function() { - return link; - }, ":first-child"); - const shape = node.select(".label-container"); - if (shape) { - linkNode.append(function() { - return shape.node(); - }); - } - const label = node.select(".label"); - if (label) { - linkNode.append(function() { - return label.node(); - }); - } - } - } - }); -}; -const flowRendererV2 = { - setConf, - addVertices, - addEdges, - getClasses, - draw -}; -const fade = (color, opacity) => { - const channel = khroma__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A; - const r = channel(color, "r"); - const g = channel(color, "g"); - const b = channel(color, "b"); - return khroma__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A(r, g, b, opacity); -}; -const getStyles = (options) => `.label { - font-family: ${options.fontFamily}; - color: ${options.nodeTextColor || options.textColor}; - } - .cluster-label text { - fill: ${options.titleColor}; - } - .cluster-label span,p { - color: ${options.titleColor}; - } - - .label text,span,p { - fill: ${options.nodeTextColor || options.textColor}; - color: ${options.nodeTextColor || options.textColor}; - } - - .node rect, - .node circle, - .node ellipse, - .node polygon, - .node path { - fill: ${options.mainBkg}; - stroke: ${options.nodeBorder}; - stroke-width: 1px; - } - .flowchart-label text { - text-anchor: middle; - } - // .flowchart-label .text-outer-tspan { - // text-anchor: middle; - // } - // .flowchart-label .text-inner-tspan { - // text-anchor: start; - // } - - .node .katex path { - fill: #000; - stroke: #000; - stroke-width: 1px; - } - - .node .label { - text-align: center; - } - .node.clickable { - cursor: pointer; - } - - .arrowheadPath { - fill: ${options.arrowheadColor}; - } - - .edgePath .path { - stroke: ${options.lineColor}; - stroke-width: 2.0px; - } - - .flowchart-link { - stroke: ${options.lineColor}; - fill: none; - } - - .edgeLabel { - background-color: ${options.edgeLabelBackground}; - rect { - opacity: 0.5; - background-color: ${options.edgeLabelBackground}; - fill: ${options.edgeLabelBackground}; - } - text-align: center; - } - - /* For html labels only */ - .labelBkg { - background-color: ${fade(options.edgeLabelBackground, 0.5)}; - // background-color: - } - - .cluster rect { - fill: ${options.clusterBkg}; - stroke: ${options.clusterBorder}; - stroke-width: 1px; - } - - .cluster text { - fill: ${options.titleColor}; - } - - .cluster span,p { - color: ${options.titleColor}; - } - /* .cluster div { - color: ${options.titleColor}; - } */ - - div.mermaidTooltip { - position: absolute; - text-align: center; - max-width: 200px; - padding: 2px; - font-family: ${options.fontFamily}; - font-size: 12px; - background: ${options.tertiaryColor}; - border: 1px solid ${options.border2}; - border-radius: 2px; - pointer-events: none; - z-index: 100; - } - - .flowchartTitleText { - text-anchor: middle; - font-size: 18px; - fill: ${options.textColor}; - } -`; -const flowStyles = getStyles; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8114665f.1e39622d.js b/pr-preview/pr-1594/assets/js/8114665f.1e39622d.js deleted file mode 100644 index 3f2ff9fadb..0000000000 --- a/pr-preview/pr-1594/assets/js/8114665f.1e39622d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8152],{32854:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var n=a(74848),s=a(28453);const o={id:"postgresql_cdc_to_snowflake",title:"PostgreSQL CDC streaming to Snowflake",sidebar_position:1},i="PostgreSQL CDC streaming to Snowflake",r={id:"getting-started/tutorials/postgresql_cdc_to_snowflake",title:"PostgreSQL CDC streaming to Snowflake",description:"Introduction",source:"@site/docs/getting-started/tutorials/postgresql_cdc_to_snowflake.md",sourceDirName:"getting-started/tutorials",slug:"/getting-started/tutorials/postgresql_cdc_to_snowflake",permalink:"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/getting-started/tutorials/postgresql_cdc_to_snowflake.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{id:"postgresql_cdc_to_snowflake",title:"PostgreSQL CDC streaming to Snowflake",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Flow tutorials",permalink:"/pr-preview/pr-1594/getting-started/tutorials/"},next:{title:"Real-time CDC with MongoDB",permalink:"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb"}},l={},c=[{value:"Introduction<a></a>",id:"introduction",level:2},{value:"What is CDC?<a></a>",id:"what-is-cdc",level:2},{value:"Prerequisites<a></a>",id:"prerequisites",level:2},{value:"Step 1. Set up source database<a></a>",id:"step-1-set-up-source-database",level:2},{value:"PostgreSQL setup<a></a>",id:"postgresql-setup",level:3},{value:"Configuring PostgreSQL for CDC<a></a>",id:"configuring-postgresql-for-cdc",level:3},{value:"Expose the database to the internet via ngrok<a></a>",id:"expose-the-database-to-the-internet-via-ngrok",level:3},{value:"Step 2. Set up a Capture<a></a>",id:"step-2-set-up-a-capture",level:2},{value:"Step 3. Set up a Materialization<a></a>",id:"step-3-set-up-a-materialization",level:2},{value:"Party time!<a></a>",id:"party-time",level:2},{value:"Clean up<a></a>",id:"clean-up",level:2},{value:"Next Steps<a></a>",id:"next-steps",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components},{Head:a}=t;return a||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Head",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a,{children:(0,n.jsx)("meta",{property:"og:image",content:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//architecture_6bbaf2c5a6/architecture_6bbaf2c5a6.png"})}),"\n",(0,n.jsx)(t.h1,{id:"postgresql-cdc-streaming-to-snowflake",children:"PostgreSQL CDC streaming to Snowflake"}),"\n",(0,n.jsxs)(t.h2,{id:"introduction",children:["Introduction",(0,n.jsx)("a",{id:"introduction"})]}),"\n",(0,n.jsx)(t.p,{children:"In this tutorial, we'll set up a streaming CDC pipeline from PostgreSQL to Snowflake using Estuary Flow. By the end, you\u2019ll have learned everything you need to know about building a pipeline on your own."}),"\n",(0,n.jsx)(t.p,{children:"You'll use Flow's PostgreSQL capture connector and Snowflake materialization connector to set up an end-to-end CDC pipeline in three steps:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"First, you\u2019ll ingest change event data from a PostgreSQL database, using a table filled with generated realistic product data."}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Then, you\u2019ll learn how to configure Flow to persist data as collections while maintaining data integrity."}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"And finally, you will see how you can materialize these collections in Snowflake to make them ready for analytics!"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"By the end of this tutorial, you'll have established a robust and efficient data pipeline with near real-time replication of data from PostgreSQL to Snowflake."}),"\n",(0,n.jsx)(t.p,{children:"Before you get started, make sure you do two things."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Sign up for Estuary Flow ",(0,n.jsx)(t.a,{href:"https://dashboard.estuary.dev/register",children:"here"}),". It\u2019s simple, fast and free."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Make sure you also join the ",(0,n.jsx)(t.a,{href:"https://estuary-dev.slack.com/ssb/redirect#/shared-invite/email",children:"Estuary Slack Community"}),". Don\u2019t struggle. Just ask a question."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.h2,{id:"what-is-cdc",children:["What is CDC?",(0,n.jsx)("a",{id:"what-is-cdc"})]}),"\n",(0,n.jsx)(t.p,{children:"CDC, or Change Data Capture, is a method used to track and capture changes made to data in a database. It enables the real-time capture of insertions, updates, and deletions, providing a continuous stream of changes."}),"\n",(0,n.jsx)(t.p,{children:"This stream of change data is invaluable for keeping downstream systems synchronized and up-to-date with the source database, facilitating real-time analytics, replication, and data integration. In essence, CDC allows organizations to capture and react to data changes as they occur, ensuring data accuracy and timeliness across their systems. CDC provides a lower-latency, lower-load way to extract data. It\u2019s also often the only way to capture every change as well as deletes, which are harder to track with batch-based extraction."}),"\n",(0,n.jsxs)(t.p,{children:["If you are interested in the intricacies of change data capture, head over to ",(0,n.jsx)(t.a,{href:"https://estuary.dev/cdc-done-correctly/",children:"this"})," article, where we explain the theory behind it - this is not a requirement for this tutorial, so if you want to dive in head first, keep on reading!"]}),"\n",(0,n.jsxs)(t.h2,{id:"prerequisites",children:["Prerequisites",(0,n.jsx)("a",{id:"prerequisites"})]}),"\n",(0,n.jsx)(t.p,{children:"This tutorial will assume you have access to the following things:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Docker: for convenience, we are providing a docker compose definition which will allow you to spin up a database and a fake data generator service in about 5 seconds!"}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["ngrok: Flow is a fully managed service. Because the database used in this tutorial will be running on your machine, you\u2019ll need something to expose it to the internet. ",(0,n.jsx)(t.a,{href:"https://ngrok.com/",children:"ngrok"})," is a lightweight tool that does just that."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Snowflake account: The target data warehouse for our flow is Snowflake. In order to follow along with the tutorial, a trial account is perfectly fine."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.h2,{id:"step-1-set-up-source-database",children:["Step 1. Set up source database",(0,n.jsx)("a",{id:"step-1-set-up-source-database"})]}),"\n",(0,n.jsxs)(t.h3,{id:"postgresql-setup",children:["PostgreSQL setup",(0,n.jsx)("a",{id:"postgresql-setup"})]}),"\n",(0,n.jsx)(t.p,{children:"As this tutorial is focused on CDC replication from PostgreSQL, we\u2019ll need a database. We recommend you create this database first, so you can learn Flow more easily. Then try these steps on your own database. Let\u2019s take a look at what we are working with!"}),"\n",(0,n.jsxs)(t.p,{children:["Save the below ",(0,n.jsx)(t.code,{children:"yaml"})," snippet as a file called ",(0,n.jsx)(t.code,{children:"docker-compose.yml"}),". This ",(0,n.jsx)(t.code,{children:"docker-compose.yml"})," file contains the service definitions for the PostgreSQL database and the mock data generator service."]}),"\n",(0,n.jsx)(t.admonition,{title:"Since V2, compose is integrated into your base Docker package, there\u2019s no need to download any separate tooling!",type:"tip"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-yaml",metastring:'title="docker-compose.yml"',children:'services:\n\xa0\xa0postgres:\n\xa0\xa0\xa0\xa0image: postgres:latest\n\xa0\xa0\xa0\xa0container_name: postgres_cdc\n\xa0\xa0\xa0\xa0hostname: postgres_cdc\n\xa0\xa0\xa0\xa0restart: unless-stopped\n\xa0\xa0\xa0\xa0user: postgres\n\xa0\xa0\xa0\xa0environment:\n\xa0\xa0\xa0\xa0\xa0\xa0POSTGRES_USER: postgres\n\xa0\xa0\xa0\xa0\xa0\xa0POSTGRES_DB: postgres\n\xa0\xa0\xa0\xa0\xa0\xa0POSTGRES_PASSWORD: postgres\n\xa0\xa0\xa0\xa0command:\n\xa0\xa0\xa0\xa0\xa0\xa0- "postgres"\n\xa0\xa0\xa0\xa0\xa0\xa0- "-c"\n\xa0\xa0\xa0\xa0\xa0\xa0- "wal_level=logical"\n\xa0\xa0\xa0\xa0healthcheck:\n\xa0\xa0\xa0\xa0\xa0\xa0test: ["CMD-SHELL", "sh -c \'pg_isready -U flow_capture -d postgres\'"]\n\xa0\xa0\xa0\xa0\xa0\xa0interval: 5s\n\xa0\xa0\xa0\xa0\xa0\xa0timeout: 10s\n\xa0\xa0\xa0\xa0\xa0\xa0retries: 120\xa0\xa0\xa0\n\xa0\xa0\xa0\xa0volumes:\n\xa0\xa0\xa0\xa0\xa0\xa0- ./init.sql:/docker-entrypoint-initdb.d/init.sql\xa0\n\xa0\xa0\xa0\xa0ports:\n\xa0\xa0\xa0\xa0\xa0\xa0- "5432:5432"\n\n\xa0\xa0datagen:\n\xa0\xa0\xa0\xa0image: materialize/datagen\n\xa0\xa0\xa0\xa0container_name: datagen\n\xa0\xa0\xa0\xa0restart: unless-stopped\n\xa0\xa0\xa0\xa0environment:\n\xa0\xa0\xa0\xa0\xa0\xa0POSTGRES_HOST: postgres_cdc\n\xa0\xa0\xa0\xa0\xa0\xa0POSTGRES_PORT: 5432\n\xa0\xa0\xa0\xa0\xa0\xa0POSTGRES_DB: postgres\n\xa0\xa0\xa0\xa0\xa0\xa0POSTGRES_USER: postgres\n\xa0\xa0\xa0\xa0\xa0\xa0POSTGRES_PASSWORD: postgres\n\xa0\xa0\xa0\xa0entrypoint:\n\xa0\xa0\xa0\xa0\xa0\xa0"datagen -s /app/schemas/products.sql -n 10000 -f postgres -w 1000"\n\xa0\xa0\xa0\xa0depends_on:\n\xa0\xa0\xa0\xa0\xa0\xa0postgres:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0condition: service_healthy\n\n\xa0\xa0\xa0\xa0volumes:\n \xa0\xa0\xa0\xa0\xa0\xa0- ./schemas/products.sql:/app/schemas/products.sql\n'})}),"\n",(0,n.jsx)(t.p,{children:"Don\u2019t be alarmed by all these Docker configurations, they are made to be reproducible on any machine, so you don\u2019t have to worry about modifying anything in them! Before you spin up the database, let\u2019s take a quick look at what exactly you can expect to happen."}),"\n",(0,n.jsxs)(t.p,{children:["Next up, create a folder called ",(0,n.jsx)(t.code,{children:"schemas"})," and paste the below SQL DDL into a file called ",(0,n.jsx)(t.code,{children:"products.sql"}),". This file contains the schema of the demo data."]}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.mdxAdmonitionTitle,{children:["This file defines the schema via a create table statement, but the actual table creation happens in the ",(0,n.jsx)(t.code,{children:"init.sql"})," file, this is just a quirk of the ",(0,n.jsx)(t.a,{href:"https://github.com/MaterializeInc/datagen",children:"Datagen"})," data generator tool."]})}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sql",metastring:'title="products.sql"',children:'CREATE TABLE "public"."products" (\n\xa0\xa0"id" int PRIMARY KEY,\n\xa0\xa0"name" varchar COMMENT \'faker.internet.userName()\',\n\xa0\xa0"merchant_id" int NOT NULL COMMENT \'faker.datatype.number()\',\n\xa0\xa0"price" int COMMENT \'faker.datatype.number()\',\n\xa0\xa0"status" varchar COMMENT \'faker.datatype.boolean()\',\n\xa0\xa0"created_at" timestamp DEFAULT (now())\n);\n'})}),"\n",(0,n.jsxs)(t.p,{children:["If you take a closer look at the schema definition, you can see that in the ",(0,n.jsx)(t.code,{children:"COMMENT"})," attribute we define Python snippets which actually tell Datagen how to generate fake data for those fields!"]}),"\n",(0,n.jsxs)(t.p,{children:["Finally, create the ",(0,n.jsx)(t.code,{children:"init.sql"})," file, which contains the database-level requirements to enable Flow to stream CDC data."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sql",metastring:'title="init.sql"',children:'CREATE USER flow_capture WITH PASSWORD \'secret\' REPLICATION;\n\nGRANT pg_read_all_data TO flow_capture;\n\nCREATE TABLE products (\n\xa0\xa0"id" int PRIMARY KEY,\n\xa0\xa0"name" varchar COMMENT \'faker.internet.userName()\',\n\xa0\xa0"merchant_id" int NOT NULL COMMENT \'faker.datatype.number()\',\n\xa0\xa0"price" int COMMENT \'faker.datatype.number()\',\n\xa0\xa0"status" varchar COMMENT \'faker.datatype.boolean()\',\n\xa0\xa0"created_at" timestamp DEFAULT (now())\n);\n\nCREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);\nGRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;\nCREATE PUBLICATION flow_publication;\nALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);\nALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, public.products;\n'})}),"\n",(0,n.jsxs)(t.p,{children:["In the ",(0,n.jsx)(t.code,{children:"init.sql"})," file, you create the products table and all the database objects Flow requires for real-time CDC streaming."]}),"\n",(0,n.jsxs)(t.h3,{id:"configuring-postgresql-for-cdc",children:["Configuring PostgreSQL for CDC",(0,n.jsx)("a",{id:"configuring-postgresql-for-cdc"})]}),"\n",(0,n.jsx)(t.p,{children:"To enable CDC replication in PostgreSQL, several database objects need to be created and configured. These objects facilitate the capture and propagation of data changes to downstream systems. Let's examine each object and its significance in the context of CDC replication:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sql",children:"CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION;\n"})}),"\n",(0,n.jsx)(t.p,{children:"This user is dedicated to the CDC replication process. It is granted the necessary permissions to read all data from the database, allowing it to capture changes across tables efficiently. In a production environment, make sure you use a more secure password than what is in the example."}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sql",children:"GRANT pg_read_all_data TO flow_capture;\n"})}),"\n",(0,n.jsxs)(t.p,{children:["Granting the ",(0,n.jsx)(t.code,{children:"pg_read_all_data"})," privilege to the ",(0,n.jsx)(t.code,{children:"flow_capture"})," user ensures that it can access and read data from all tables in the database, essential for capturing changes."]}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.mdxAdmonitionTitle,{children:[(0,n.jsx)(t.code,{children:"pg_read_all_data"})," is used for convenience, but is not a hard requirement, since it is possible to grant a more granular set of permissions. For more details check out the ",(0,n.jsx)(t.a,{href:"https://docs.estuary.dev/reference/Connectors/capture-connectors/PostgreSQL/#self-hosted-postgresql",children:"connector docs"}),"."]})}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sql",children:"CREATE TABLE products (...)\n"})}),"\n",(0,n.jsxs)(t.p,{children:["The source tables, such as the ",(0,n.jsx)(t.code,{children:"products"})," table in this example, contain the data whose changes we want to capture and replicate. It is recommended for tables to have a primary key defined, although not a hard requirement for CDC."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sql",children:"CREATE TABLE IF NOT EXISTS public.flow_watermarks (...)\n"})}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"flow_watermarks"})," table is a small \u201cscratch space\u201d to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sql",children:"GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;\n"})}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"flow_capture"})," user needs full privileges on the ",(0,n.jsx)(t.code,{children:"flow_watermarks"})," table to insert, update, and query metadata related to the replication process."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sql",children:"CREATE PUBLICATION flow_publication;\nALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);\nALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, public.products;\n"})}),"\n",(0,n.jsxs)(t.p,{children:["A publication defines a set of tables whose changes will be replicated. In this case, the ",(0,n.jsx)(t.code,{children:"flow_publication"})," publication includes the ",(0,n.jsx)(t.code,{children:"public.flow_watermarks"})," and ",(0,n.jsx)(t.code,{children:"public.products"})," tables."]}),"\n",(0,n.jsxs)(t.p,{children:["These commands configure the ",(0,n.jsx)(t.code,{children:"flow_publication"})," publication to publish changes via partition root and add the specified tables to the publication. By setting ",(0,n.jsx)(t.code,{children:"publish_via_partition_root"})," to true, the publication ensures that updates to partitioned tables are correctly captured and replicated."]}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.mdxAdmonitionTitle,{children:["The table in this tutorial is not partitioned, but we recommend always setting ",(0,n.jsx)(t.code,{children:"publish_via_partition_root"})," when creating a publication."]})}),"\n",(0,n.jsx)(t.p,{children:"These objects form the backbone of a robust CDC replication setup, ensuring data consistency and integrity across systems. After the initial setup, you will not have to touch these objects in the future, unless you wish to start ingesting change events from a new table."}),"\n",(0,n.jsxs)(t.p,{children:["With that out of the way, you\u2019re ready to start the source database. In order to initialize Postgres and the fake data generator service, all you have to do is execute the following (to free up your current terminal, use the ",(0,n.jsx)(t.code,{children:"-d"})," flag so the containers run in a daemonized background process):"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sh",children:"docker compose up\n"})}),"\n",(0,n.jsxs)(t.p,{children:["After a few seconds, you should see that both services are up and running. The ",(0,n.jsx)(t.code,{children:"postgres_cdc"})," service should print the following on the terminal:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sh",children:"postgres_cdc\xa0 | LOG:\xa0 database system is ready to accept connections\n"})}),"\n",(0,n.jsxs)(t.p,{children:["While the ",(0,n.jsx)(t.code,{children:"datagen"})," service will be a little bit more spammy, as it prints every record it generates, but don\u2019t be alarmed, this is enough for us to verify that both are up and running. Let\u2019s see how we can expose the database so Flow can connect to it."]}),"\n",(0,n.jsxs)(t.h3,{id:"expose-the-database-to-the-internet-via-ngrok",children:["Expose the database to the internet via ngrok",(0,n.jsx)("a",{id:"expose-the-database-to-the-internet-via-ngrok"})]}),"\n",(0,n.jsx)(t.p,{children:"As mentioned above, the next step is to make the database available for other services. To do this in one quick command, we can use ngrok, a free CLI tool that enables tunneling of services. In our case we only want to expose the port 5432 and only the tcp protocol."}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sh",children:"ngrok tcp 5432\n"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//ngrok_87b04412a3/ngrok_87b04412a3.png",alt:"ngrok"})}),"\n",(0,n.jsxs)(t.p,{children:["You should immediately be greeted with a screen that contains the public URL for the tunnel we just started! In the example above, the public URL ",(0,n.jsx)(t.code,{children:"5.tcp.eu.ngrok.io:14407"})," is mapped to ",(0,n.jsx)(t.code,{children:"localhost:5432"}),", which is the address of the Postgres database."]}),"\n",(0,n.jsx)(t.admonition,{title:"Don\u2019t close this window while working on the tutorial as this is required to keep the connections between Flow and the database alive.",type:"note"}),"\n",(0,n.jsx)(t.p,{children:"Before we jump into setting up the replication, you can quickly verify the data being properly generated by connecting to the database and peeking into the products table, as shown below:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sh",children:'~ psql -h 5.tcp.eu.ngrok.io -p 14407 -U postgres -d postgres\nPassword for user postgres:\npsql (16.2)\nType "help" for help.\n\npostgres=# \\d\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0List of relations\n\xa0Schema |\xa0 \xa0 \xa0 Name \xa0 \xa0 \xa0 | Type\xa0 |\xa0 Owner\n--------+-----------------+-------+----------\n\xa0public | flow_watermarks | table | postgres\n\xa0public | products\xa0 \xa0 \xa0 \xa0 | table | postgres\n(2 rows)\n\npostgres=# select count(*) from products;\n\xa0count\n-------\n\xa0\xa02637\n(1 row)\n\npostgres=# select count(*) from products;\n\xa0count\n-------\n\xa0\xa02642\n(1 row)\n'})}),"\n",(0,n.jsxs)(t.p,{children:["By executing a ",(0,n.jsx)(t.code,{children:"count(*)"})," statement a few seconds apart you are able to verify that data is in fact being written into the table."]}),"\n",(0,n.jsxs)(t.h2,{id:"step-2-set-up-a-capture",children:["Step 2. Set up a Capture",(0,n.jsx)("a",{id:"step-2-set-up-a-capture"})]}),"\n",(0,n.jsxs)(t.p,{children:["Good news, the hard part is over! Smooth sailing from here on out. Head over to your Flow dashboard (if you haven\u2019t registered yet, you can do so ",(0,n.jsx)(t.a,{href:"https://dashboard.estuary.dev/register",children:"here"}),".) and create a new ",(0,n.jsx)(t.strong,{children:"Capture."})," A capture is how Flow ingests data from an external source. Every Data Flow starts with a Capture."]}),"\n",(0,n.jsxs)(t.p,{children:["Go to the sources page by clicking on the ",(0,n.jsx)(t.strong,{children:"Sources"})," on the left hand side of your screen, then click on ",(0,n.jsx)(t.strong,{children:"+ New Capture"})]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//new_capture_4583a8a120/new_capture_4583a8a120.png",alt:"Add new Capture"})}),"\n",(0,n.jsxs)(t.p,{children:["Configure the connection to the database based on the information we gathered in the previous step and press ",(0,n.jsx)(t.strong,{children:"Next."})]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//capture_configuration_89e2133f83/capture_configuration_89e2133f83.png",alt:"Configure Capture"})}),"\n",(0,n.jsx)(t.p,{children:"On the following page, we can configure how our incoming data should be represented in Flow as collections. As a quick refresher, let\u2019s recap how Flow represents data on a high level."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Documents"})}),"\n",(0,n.jsxs)(t.p,{children:["The documents of your flows are stored in collections: real-time data lakes of JSON documents in cloud storage. Documents being backed by an object storage mean that once you start capturing data, you won\u2019t have to worry about it not being available to replay \u2013 object stores such as S3 can be configured to cheaply store data forever. See ",(0,n.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/collections/#documents",children:"docs page"})," for more information."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Schemas"})}),"\n",(0,n.jsx)(t.p,{children:"Flow documents and collections always have an associated schema that defines the structure, representation, and constraints of your documents. In most cases, Flow generates a functioning schema on your behalf during the discovery phase of capture, which has already automatically happened - that\u2019s why you\u2019re able to take a peek into the structure of the incoming data!"}),"\n",(0,n.jsx)(t.p,{children:"To see how Flow parsed the incoming records, click on the Collection tab and verify the inferred schema looks correct."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//collections_configuration_34e53025c7/collections_configuration_34e53025c7.png",alt:"Configure Collections"})}),"\n",(0,n.jsx)(t.p,{children:"Before you advance to the next step, let\u2019s take a look at the other configuration options we have here. You\u2019ll see three toggles, all turned on by default:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Automatically keep schemas up to date"})}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Automatically add new source collections"})}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Breaking changes re-version collections"})}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"All of these settings relate to how Flow handles schema evolution, so let\u2019s take a quick detour to explain them from a high-level perspective."}),"\n",(0,n.jsx)(t.p,{children:"Estuary Flow's schema evolution feature seamlessly handles updates to dataset structures within a Data Flow, ensuring uninterrupted operation. Collection specifications define each dataset, including key, schema, and partitions. When specs change, schema evolution automatically updates associated components to maintain compatibility."}),"\n",(0,n.jsx)(t.p,{children:"It addresses breaking changes by updating materializations or recreating collections with new names, preventing disruptions. Common causes of breaking changes include modifications to collection schemas, which require updates to materializations."}),"\n",(0,n.jsx)(t.p,{children:"Overall, schema evolution streamlines adaptation to structural changes, maintaining smooth data flow within the system."}),"\n",(0,n.jsxs)(t.p,{children:["For more information, check out the dedicated documentation ",(0,n.jsx)(t.a,{href:"https://docs.estuary.dev/guides/schema-evolution/",children:"page"})," for schema evolution."]}),"\n",(0,n.jsxs)(t.p,{children:["For the sake of this tutorial, feel free to leave everything at its default setting and press ",(0,n.jsx)(t.strong,{children:"Next"})," again, then ",(0,n.jsx)(t.strong,{children:"Save and Publish"})," to deploy the connector and kick off a backfill."]}),"\n",(0,n.jsxs)(t.h2,{id:"step-3-set-up-a-materialization",children:["Step 3. Set up a Materialization",(0,n.jsx)("a",{id:"step-3-set-up-a-materialization"})]}),"\n",(0,n.jsx)(t.p,{children:"Similarly to the source side, we\u2019ll need to set up some initial configuration in Snowflake to allow Flow to materialize collections into a table."}),"\n",(0,n.jsx)(t.p,{children:"Preparing Snowflake for use with Estuary Flow involves the following steps:"}),"\n",(0,n.jsx)(t.p,{children:"1. Keep the Flow web app open and open a new tab or window to access your Snowflake console."}),"\n",(0,n.jsx)(t.p,{children:"3. Create a new SQL worksheet. This provides a platform to execute queries."}),"\n",(0,n.jsxs)(t.p,{children:["4. Paste the provided script into the SQL console, adjusting the value for ",(0,n.jsx)(t.code,{children:"estuary_password"})," to a strong password."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sql",children:"set database_name = 'ESTUARY_DB';\nset warehouse_name = 'ESTUARY_WH';\nset estuary_role = 'ESTUARY_ROLE';\nset estuary_user = 'ESTUARY_USER';\nset estuary_password = 'secret';\nset estuary_schema = 'ESTUARY_SCHEMA';\n-- create role and schema for Estuary\ncreate role if not exists identifier($estuary_role);\ngrant role identifier($estuary_role) to role SYSADMIN;\n-- Create snowflake DB\ncreate database if not exists identifier($database_name);\nuse database identifier($database_name);\ncreate schema if not exists identifier($estuary_schema);\n-- create a user for Estuary\ncreate user if not exists identifier($estuary_user)\npassword = $estuary_password\ndefault_role = $estuary_role\ndefault_warehouse = $warehouse_name;\ngrant role identifier($estuary_role) to user identifier($estuary_user);\ngrant all on schema identifier($estuary_schema) to identifier($estuary_role);\n-- create a warehouse for estuary\ncreate warehouse if not exists identifier($warehouse_name)\nwarehouse_size = xsmall\nwarehouse_type = standard\nauto_suspend = 60\nauto_resume = true\ninitially_suspended = true;\n-- grant Estuary role access to warehouse\ngrant USAGE\non warehouse identifier($warehouse_name)\nto role identifier($estuary_role);\n-- grant Estuary access to database\ngrant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role);\n-- change role to ACCOUNTADMIN for STORAGE INTEGRATION support to Estuary (only needed for Snowflake on GCP)\nuse role ACCOUNTADMIN;\ngrant CREATE INTEGRATION on account to role identifier($estuary_role);\nuse role sysadmin;\nCOMMIT;\n"})}),"\n",(0,n.jsx)(t.p,{children:'5. Execute all the queries by clicking the drop-down arrow next to the Run button and selecting "Run All."'}),"\n",(0,n.jsx)(t.p,{children:"6. Snowflake will process the queries, setting up the necessary roles, databases, schemas, users, and warehouses for Estuary Flow."}),"\n",(0,n.jsx)(t.p,{children:"7. Once the setup is complete, return to the Flow web application to continue with the integration process."}),"\n",(0,n.jsxs)(t.p,{children:["Back in Flow, head over to the ",(0,n.jsx)(t.strong,{children:"Destinations"})," page, where you can ",(0,n.jsx)(t.a,{href:"https://dashboard.estuary.dev/materializations/create",children:"create a new Materialization"}),"."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//new_materialization_31df04d81f/new_materialization_31df04d81f.png",alt:"Add new Materialization"})}),"\n",(0,n.jsx)(t.p,{children:"Choose Snowflake and start filling out the connection details based on the values inside the script you executed in the previous step. If you haven\u2019t changed anything, this is how the connector configuration should look like:"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//materialization_endpoint_configuration_0d540a12b5/materialization_endpoint_configuration_0d540a12b5.png",alt:"Configure Materialization endpoint"})}),"\n",(0,n.jsx)(t.p,{children:"You can grab your Snowflake host URL and account identifier by navigating to these two little buttons on the Snowflake UI."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//snowflake_account_id_af1cc78df8/snowflake_account_id_af1cc78df8.png",alt:"Grab your Snowflake account id"})}),"\n",(0,n.jsx)(t.p,{children:'If you scroll down to the Advanced Options section, you will be able to configure the "Update Delay" parameter. If you leave this parameter unset, the default value of 30 minutes will be used.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//snowflake_update_delay_dark_f26179d3fc/snowflake_update_delay_dark_f26179d3fc.png",alt:"Update Delay"})}),"\n",(0,n.jsx)(t.p,{children:"The Update Delay parameter in Estuary materializations offers a flexible approach to data ingestion scheduling. It represents the amount of time the system will wait before it begins materializing the latest data."}),"\n",(0,n.jsx)(t.p,{children:"For example, if an update delay is set to 2 hours, the materialization task will pause for 2 hours before processing the latest available data. This delay ensures that data is not pulled in immediately after it becomes available, allowing your Snowflake warehouse to go idle and be suspended in between updates, which can significantly reduce the number of credits consumed."}),"\n",(0,n.jsx)(t.p,{children:"After the connection details are in place, the next step is to link the capture we just created to Flow is able to see collections we are loading data into from Postgres."}),"\n",(0,n.jsx)(t.p,{children:"You can achieve this by clicking on the \u201cSource from Capture\u201d button, and selecting the name of the capture from the table."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//link_source_to_capture_b0d37a738f/link_source_to_capture_b0d37a738f.png",alt:"Link Capture"})}),"\n",(0,n.jsxs)(t.p,{children:["After pressing continue, you are met with a few configuration options, but for now, feel free to press ",(0,n.jsx)(t.strong,{children:"Next,"})," then ",(0,n.jsx)(t.strong,{children:"Save and Publish"})," in the top right corner, the defaults will work perfectly fine for this tutorial."]}),"\n",(0,n.jsx)(t.p,{children:"A successful deployment will look something like this:"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//publish_successful_4e18642288/publish_successful_4e18642288.png",alt:"Successful Deployment screen"})}),"\n",(0,n.jsx)(t.p,{children:"And that\u2019s pretty much it, you\u2019ve successfully published a real-time CDC pipeline. Let\u2019s check out Snowflake to see how the data looks."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//snowflake_verification_2eb047efec/snowflake_verification_2eb047efec.png",alt:"Results in Snowflake"})}),"\n",(0,n.jsx)(t.p,{children:"Looks like the data is arriving as expected, and the schema of the table is properly configured by the connector based on the types of the original table in Postgres."}),"\n",(0,n.jsx)(t.p,{children:"To get a feel for how the data flow works; head over to the collection details page on the Flow web UI to see your changes immediately. On the Snowflake end, they will be materialized after the next update."}),"\n",(0,n.jsx)(t.admonition,{title:'Based on your configuration of the "Update Delay" parameter when setting up the Snowflake Materialization, you might have to wait until the configured amount of time passes for your changes to make it to the destination.',type:"note"}),"\n",(0,n.jsxs)(t.h2,{id:"party-time",children:["Party time!",(0,n.jsx)("a",{id:"party-time"})]}),"\n",(0,n.jsx)(t.p,{children:"Congratulations! \ud83c\udf89 You've successfully set up a CDC pipeline from PostgreSQL to Snowflake using Estuary Flow. In just a few minutes, you've learned how to configure log-based CDC replication, handle schema evolution, and deploy a robust data integration solution."}),"\n",(0,n.jsx)(t.p,{children:"Take a moment to celebrate your achievement! You've not only gained valuable technical knowledge but also demonstrated the agility and efficiency of modern data engineering practices. With your newfound skills, you're well-equipped to tackle complex data challenges and drive innovation in your organization."}),"\n",(0,n.jsxs)(t.h2,{id:"clean-up",children:["Clean up",(0,n.jsx)("a",{id:"clean-up"})]}),"\n",(0,n.jsx)(t.p,{children:"After every party, it\u2019s customary to clean up after ourselves. After you are done exploring the flow, make sure to remove any resources which you won\u2019t use anymore!"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Postgres"})}),"\n",(0,n.jsx)(t.p,{children:"Simply stop the Docker containers & terminate the ngrok process. This will terminate both the database process and the tunnel which exposed it to the internet."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Snowflake"})}),"\n",(0,n.jsx)(t.p,{children:"To clean up resources in Snowflake use the following SQL script."}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-sql",metastring:'title="snowflake_cleanup.sql"',children:"-- Revoke all privileges from Estuary role\nrevoke all privileges on schema ESTUARY_SCHEMA from role ESTUARY_ROLE;\nrevoke all privileges on database ESTUARY_DB from role ESTUARY_ROLE;\n\n-- Drop the warehouse\ndrop warehouse if exists ESTUARY_WH;\n\n-- Drop the role and user\ndrop user if exists ESTUARY_USER;\ndrop role if exists ESTUARY_ROLE;\n\n-- Drop the schema and database\ndrop schema if exists ESTUARY_SCHEMA;\ndrop database if exists ESTUARY_DB;\n"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Flow"})}),"\n",(0,n.jsx)(t.p,{children:"In the UI, disable or delete any resources you don\u2019t wish to keep."}),"\n",(0,n.jsxs)(t.h2,{id:"next-steps",children:["Next Steps",(0,n.jsx)("a",{id:"next-steps"})]}),"\n",(0,n.jsx)(t.p,{children:"That\u2019s it! You should have everything you need to know to create your own data pipeline for loading data into Snowflake!\xa0"}),"\n",(0,n.jsx)(t.p,{children:"Now try it out on your own PostgreSQL database or other sources."}),"\n",(0,n.jsxs)(t.p,{children:["If you want to learn more, make sure you read through the ",(0,n.jsx)(t.a,{href:"https://docs.estuary.dev/",children:"Estuary documentation"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["You\u2019ll find instructions on how to use other connectors ",(0,n.jsx)(t.a,{href:"https://docs.estuary.dev/",children:"here"}),". There are more tutorials ",(0,n.jsx)(t.a,{href:"https://docs.estuary.dev/guides/",children:"here"}),".\xa0"]}),"\n",(0,n.jsxs)(t.p,{children:["Also, don\u2019t forget to join the ",(0,n.jsx)(t.a,{href:"https://estuary-dev.slack.com/ssb/redirect#/shared-invite/email",children:"Estuary Slack Community"}),"!"]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453:(e,t,a)=>{a.d(t,{R:()=>i,x:()=>r});var n=a(96540);const s={},o=n.createContext(s);function i(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8337.d2982b80.js b/pr-preview/pr-1594/assets/js/8337.d2982b80.js deleted file mode 100644 index c0371e5362..0000000000 --- a/pr-preview/pr-1594/assets/js/8337.d2982b80.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8337],{8337:(e,n,t)=>{t.d(n,{a:()=>sn,c:()=>on});var r={};t.r(r),t.d(r,{attentionMarkers:()=>Me,contentInitial:()=>Ce,disable:()=>Le,document:()=>we,flow:()=>ze,flowInitial:()=>Te,insideSpan:()=>_e,string:()=>De,text:()=>Be});var i=t(99702);const u={};function o(e,n,t){if(function(e){return Boolean(e&&"object"==typeof e)}(e)){if("value"in e)return"html"!==e.type||t?e.value:"";if(n&&"alt"in e&&e.alt)return e.alt;if("children"in e)return c(e.children,n,t)}return Array.isArray(e)?c(e,n,t):""}function c(e,n,t){const r=[];let i=-1;for(;++i<e.length;)r[i]=o(e[i],n,t);return r.join("")}function s(e,n,t,r){const i=e.length;let u,o=0;if(n=n<0?-n>i?0:i+n:n>i?i:n,t=t>0?t:0,r.length<1e4)u=Array.from(r),u.unshift(n,t),e.splice(...u);else for(t&&e.splice(n,t);o<r.length;)u=r.slice(o,o+1e4),u.unshift(n,0),e.splice(...u),o+=1e4,n+=1e4}function l(e,n){return e.length>0?(s(e,e.length,0,n),e):n}const a={}.hasOwnProperty;function f(e,n){let t;for(t in n){const r=(a.call(e,t)?e[t]:void 0)||(e[t]={}),i=n[t];let u;if(i)for(u in i){a.call(r,u)||(r[u]=[]);const e=i[u];d(r[u],Array.isArray(e)?e:e?[e]:[])}}}function d(e,n){let t=-1;const r=[];for(;++t<n.length;)("after"===n[t].add?e:r).push(n[t]);s(e,0,0,r)}const h=A(/[A-Za-z]/),p=A(/[\dA-Za-z]/),m=A(/[#-'*+\--9=?A-Z^-~]/);function g(e){return null!==e&&(e<32||127===e)}const x=A(/\d/),k=A(/[\dA-Fa-f]/),y=A(/[!-/:-@[-`{-~]/);function F(e){return null!==e&&e<-2}function v(e){return null!==e&&(e<0||32===e)}function b(e){return-2===e||-1===e||32===e}const S=A(/[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/),E=A(/\s/);function A(e){return function(n){return null!==n&&e.test(String.fromCharCode(n))}}function I(e,n,t,r){const i=r?r-1:Number.POSITIVE_INFINITY;let u=0;return function(r){if(b(r))return e.enter(t),o(r);return n(r)};function o(r){return b(r)&&u++<i?(e.consume(r),o):(e.exit(t),n(r))}}const w={tokenize:function(e){const n=e.attempt(this.parser.constructs.contentInitial,(function(t){if(null===t)return void e.consume(t);return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),I(e,n,"linePrefix")}),(function(n){return e.enter("paragraph"),r(n)}));let t;return n;function r(n){const r=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=r),t=r,i(n)}function i(n){return null===n?(e.exit("chunkText"),e.exit("paragraph"),void e.consume(n)):F(n)?(e.consume(n),e.exit("chunkText"),r):(e.consume(n),i)}}};const C={tokenize:function(e){const n=this,t=[];let r,i,u,o=0;return c;function c(r){if(o<t.length){const i=t[o];return n.containerState=i[1],e.attempt(i[0].continuation,l,a)(r)}return a(r)}function l(e){if(o++,n.containerState._closeFlow){n.containerState._closeFlow=void 0,r&&y();const t=n.events.length;let i,u=t;for(;u--;)if("exit"===n.events[u][0]&&"chunkFlow"===n.events[u][1].type){i=n.events[u][1].end;break}k(o);let c=t;for(;c<n.events.length;)n.events[c][1].end=Object.assign({},i),c++;return s(n.events,u+1,0,n.events.slice(t)),n.events.length=c,a(e)}return c(e)}function a(i){if(o===t.length){if(!r)return h(i);if(r.currentConstruct&&r.currentConstruct.concrete)return m(i);n.interrupt=Boolean(r.currentConstruct&&!r._gfmTableDynamicInterruptHack)}return n.containerState={},e.check(T,f,d)(i)}function f(e){return r&&y(),k(o),h(e)}function d(e){return n.parser.lazy[n.now().line]=o!==t.length,u=n.now().offset,m(e)}function h(t){return n.containerState={},e.attempt(T,p,m)(t)}function p(e){return o++,t.push([n.currentConstruct,n.containerState]),h(e)}function m(t){return null===t?(r&&y(),k(0),void e.consume(t)):(r=r||n.parser.flow(n.now()),e.enter("chunkFlow",{contentType:"flow",previous:i,_tokenizer:r}),g(t))}function g(t){return null===t?(x(e.exit("chunkFlow"),!0),k(0),void e.consume(t)):F(t)?(e.consume(t),x(e.exit("chunkFlow")),o=0,n.interrupt=void 0,c):(e.consume(t),g)}function x(e,t){const c=n.sliceStream(e);if(t&&c.push(null),e.previous=i,i&&(i.next=e),i=e,r.defineSkip(e.start),r.write(c),n.parser.lazy[e.start.line]){let e=r.events.length;for(;e--;)if(r.events[e][1].start.offset<u&&(!r.events[e][1].end||r.events[e][1].end.offset>u))return;const t=n.events.length;let i,c,l=t;for(;l--;)if("exit"===n.events[l][0]&&"chunkFlow"===n.events[l][1].type){if(i){c=n.events[l][1].end;break}i=!0}for(k(o),e=t;e<n.events.length;)n.events[e][1].end=Object.assign({},c),e++;s(n.events,l+1,0,n.events.slice(t)),n.events.length=e}}function k(r){let i=t.length;for(;i-- >r;){const r=t[i];n.containerState=r[1],r[0].exit.call(n,e)}t.length=r}function y(){r.write([null]),i=void 0,r=void 0,n.containerState._closeFlow=void 0}}},T={tokenize:function(e,n,t){return I(e,e.attempt(this.parser.constructs.document,n,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}};const z={tokenize:function(e,n,t){return function(n){return b(n)?I(e,r,"linePrefix")(n):r(n)};function r(e){return null===e||F(e)?n(e):t(e)}},partial:!0};function D(e){const n={};let t,r,i,u,o,c,l,a=-1;for(;++a<e.length;){for(;a in n;)a=n[a];if(t=e[a],a&&"chunkFlow"===t[1].type&&"listItemPrefix"===e[a-1][1].type&&(c=t[1]._tokenizer.events,i=0,i<c.length&&"lineEndingBlank"===c[i][1].type&&(i+=2),i<c.length&&"content"===c[i][1].type))for(;++i<c.length&&"content"!==c[i][1].type;)"chunkText"===c[i][1].type&&(c[i][1]._isInFirstContentOfListItem=!0,i++);if("enter"===t[0])t[1].contentType&&(Object.assign(n,B(e,a)),a=n[a],l=!0);else if(t[1]._container){for(i=a,r=void 0;i--&&(u=e[i],"lineEnding"===u[1].type||"lineEndingBlank"===u[1].type);)"enter"===u[0]&&(r&&(e[r][1].type="lineEndingBlank"),u[1].type="lineEnding",r=i);r&&(t[1].end=Object.assign({},e[r][1].start),o=e.slice(r,a),o.unshift(t),s(e,r,a-r+1,o))}}return!l}function B(e,n){const t=e[n][1],r=e[n][2];let i=n-1;const u=[],o=t._tokenizer||r.parser[t.contentType](t.start),c=o.events,l=[],a={};let f,d,h=-1,p=t,m=0,g=0;const x=[g];for(;p;){for(;e[++i][1]!==p;);u.push(i),p._tokenizer||(f=r.sliceStream(p),p.next||f.push(null),d&&o.defineSkip(p.start),p._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=!0),o.write(f),p._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=void 0)),d=p,p=p.next}for(p=t;++h<c.length;)"exit"===c[h][0]&&"enter"===c[h-1][0]&&c[h][1].type===c[h-1][1].type&&c[h][1].start.line!==c[h][1].end.line&&(g=h+1,x.push(g),p._tokenizer=void 0,p.previous=void 0,p=p.next);for(o.events=[],p?(p._tokenizer=void 0,p.previous=void 0):x.pop(),h=x.length;h--;){const n=c.slice(x[h],x[h+1]),t=u.pop();l.unshift([t,t+n.length-1]),s(e,t,2,n)}for(h=-1;++h<l.length;)a[m+l[h][0]]=m+l[h][1],m+=l[h][1]-l[h][0]-1;return a}const _={tokenize:function(e,n){let t;return function(n){return e.enter("content"),t=e.enter("chunkContent",{contentType:"content"}),r(n)};function r(n){return null===n?i(n):F(n)?e.check(M,u,i)(n):(e.consume(n),r)}function i(t){return e.exit("chunkContent"),e.exit("content"),n(t)}function u(n){return e.consume(n),e.exit("chunkContent"),t.next=e.enter("chunkContent",{contentType:"content",previous:t}),t=t.next,r}},resolve:function(e){return D(e),e}},M={tokenize:function(e,n,t){const r=this;return function(n){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),I(e,i,"linePrefix")};function i(i){if(null===i||F(i))return t(i);const u=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes("codeIndented")&&u&&"linePrefix"===u[1].type&&u[2].sliceSerialize(u[1],!0).length>=4?n(i):e.interrupt(r.parser.constructs.flow,t,n)(i)}},partial:!0};const L={tokenize:function(e){const n=this,t=e.attempt(z,(function(r){if(null===r)return void e.consume(r);return e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),n.currentConstruct=void 0,t}),e.attempt(this.parser.constructs.flowInitial,r,I(e,e.attempt(this.parser.constructs.flow,r,e.attempt(_,r)),"linePrefix")));return t;function r(r){if(null!==r)return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),n.currentConstruct=void 0,t;e.consume(r)}}};const P={resolveAll:R()},O=H("string"),j=H("text");function H(e){return{tokenize:function(n){const t=this,r=this.parser.constructs[e],i=n.attempt(r,u,o);return u;function u(e){return s(e)?i(e):o(e)}function o(e){if(null!==e)return n.enter("data"),n.consume(e),c;n.consume(e)}function c(e){return s(e)?(n.exit("data"),i(e)):(n.consume(e),c)}function s(e){if(null===e)return!0;const n=r[e];let i=-1;if(n)for(;++i<n.length;){const e=n[i];if(!e.previous||e.previous.call(t,t.previous))return!0}return!1}},resolveAll:R("text"===e?q:void 0)}}function R(e){return function(n,t){let r,i=-1;for(;++i<=n.length;)void 0===r?n[i]&&"data"===n[i][1].type&&(r=i,i++):n[i]&&"data"===n[i][1].type||(i!==r+2&&(n[r][1].end=n[i-1][1].end,n.splice(r+2,i-r-2),i=r+2),r=void 0);return e?e(n,t):n}}function q(e,n){let t=0;for(;++t<=e.length;)if((t===e.length||"lineEnding"===e[t][1].type)&&"data"===e[t-1][1].type){const r=e[t-1][1],i=n.sliceStream(r);let u,o=i.length,c=-1,s=0;for(;o--;){const e=i[o];if("string"==typeof e){for(c=e.length;32===e.charCodeAt(c-1);)s++,c--;if(c)break;c=-1}else if(-2===e)u=!0,s++;else if(-1!==e){o++;break}}if(s){const i={type:t===e.length||u||s<2?"lineSuffix":"hardBreakTrailing",start:{line:r.end.line,column:r.end.column-s,offset:r.end.offset-s,_index:r.start._index+o,_bufferIndex:o?c:r.start._bufferIndex+c},end:Object.assign({},r.end)};r.end=Object.assign({},i.start),r.start.offset===r.end.offset?Object.assign(r,i):(e.splice(t,0,["enter",i,n],["exit",i,n]),t+=2)}t++}return e}function V(e,n,t){const r=[];let i=-1;for(;++i<e.length;){const u=e[i].resolveAll;u&&!r.includes(u)&&(n=u(n,t),r.push(u))}return n}function Q(e,n,t){let r=Object.assign(t?Object.assign({},t):{line:1,column:1,offset:0},{_index:0,_bufferIndex:-1});const i={},u=[];let o=[],c=[],a=!0;const f={consume:function(e){F(e)?(r.line++,r.column=1,r.offset+=-3===e?2:1,S()):-1!==e&&(r.column++,r.offset++);r._bufferIndex<0?r._index++:(r._bufferIndex++,r._bufferIndex===o[r._index].length&&(r._bufferIndex=-1,r._index++));d.previous=e,a=!0},enter:function(e,n){const t=n||{};return t.type=e,t.start=g(),d.events.push(["enter",t,d]),c.push(t),t},exit:function(e){const n=c.pop();return n.end=g(),d.events.push(["exit",n,d]),n},attempt:v((function(e,n){b(e,n.from)})),check:v(y),interrupt:v(y,{interrupt:!0})},d={previous:null,code:null,containerState:{},events:[],parser:e,sliceStream:m,sliceSerialize:function(e,n){return function(e,n){let t=-1;const r=[];let i;for(;++t<e.length;){const u=e[t];let o;if("string"==typeof u)o=u;else switch(u){case-5:o="\r";break;case-4:o="\n";break;case-3:o="\r\n";break;case-2:o=n?" ":"\t";break;case-1:if(!n&&i)continue;o=" ";break;default:o=String.fromCharCode(u)}i=-2===u,r.push(o)}return r.join("")}(m(e),n)},now:g,defineSkip:function(e){i[e.line]=e.column,S()},write:function(e){if(o=l(o,e),x(),null!==o[o.length-1])return[];return b(n,0),d.events=V(u,d.events,d),d.events}};let h,p=n.tokenize.call(d,f);return n.resolveAll&&u.push(n),d;function m(e){return function(e,n){const t=n.start._index,r=n.start._bufferIndex,i=n.end._index,u=n.end._bufferIndex;let o;if(t===i)o=[e[t].slice(r,u)];else{if(o=e.slice(t,i),r>-1){const e=o[0];"string"==typeof e?o[0]=e.slice(r):o.shift()}u>0&&o.push(e[i].slice(0,u))}return o}(o,e)}function g(){const{line:e,column:n,offset:t,_index:i,_bufferIndex:u}=r;return{line:e,column:n,offset:t,_index:i,_bufferIndex:u}}function x(){let e;for(;r._index<o.length;){const n=o[r._index];if("string"==typeof n)for(e=r._index,r._bufferIndex<0&&(r._bufferIndex=0);r._index===e&&r._bufferIndex<n.length;)k(n.charCodeAt(r._bufferIndex));else k(n)}}function k(e){a=void 0,h=e,p=p(e)}function y(e,n){n.restore()}function v(e,n){return function(t,i,u){let o,s,l,h;return Array.isArray(t)?p(t):"tokenize"in t?p([t]):function(e){return n;function n(n){const t=null!==n&&e[n],r=null!==n&&e.null;return p([...Array.isArray(t)?t:t?[t]:[],...Array.isArray(r)?r:r?[r]:[]])(n)}}(t);function p(e){return o=e,s=0,0===e.length?u:m(e[s])}function m(e){return function(t){h=function(){const e=g(),n=d.previous,t=d.currentConstruct,i=d.events.length,u=Array.from(c);return{restore:o,from:i};function o(){r=e,d.previous=n,d.currentConstruct=t,d.events.length=i,c=u,S()}}(),l=e,e.partial||(d.currentConstruct=e);if(e.name&&d.parser.constructs.disable.null.includes(e.name))return k(t);return e.tokenize.call(n?Object.assign(Object.create(d),n):d,f,x,k)(t)}}function x(n){return a=!0,e(l,h),i}function k(e){return a=!0,h.restore(),++s<o.length?m(o[s]):u}}}function b(e,n){e.resolveAll&&!u.includes(e)&&u.push(e),e.resolve&&s(d.events,n,d.events.length-n,e.resolve(d.events.slice(n),d)),e.resolveTo&&(d.events=e.resolveTo(d.events,d))}function S(){r.line in i&&r.column<2&&(r.column=i[r.line],r.offset+=i[r.line]-1)}}const N={name:"thematicBreak",tokenize:function(e,n,t){let r,i=0;return function(n){return e.enter("thematicBreak"),function(e){return r=e,u(e)}(n)};function u(u){return u===r?(e.enter("thematicBreakSequence"),o(u)):i>=3&&(null===u||F(u))?(e.exit("thematicBreak"),n(u)):t(u)}function o(n){return n===r?(e.consume(n),i++,o):(e.exit("thematicBreakSequence"),b(n)?I(e,u,"whitespace")(n):u(n))}}};const U={name:"list",tokenize:function(e,n,t){const r=this,i=r.events[r.events.length-1];let u=i&&"linePrefix"===i[1].type?i[2].sliceSerialize(i[1],!0).length:0,o=0;return function(n){const i=r.containerState.type||(42===n||43===n||45===n?"listUnordered":"listOrdered");if("listUnordered"===i?!r.containerState.marker||n===r.containerState.marker:x(n)){if(r.containerState.type||(r.containerState.type=i,e.enter(i,{_container:!0})),"listUnordered"===i)return e.enter("listItemPrefix"),42===n||45===n?e.check(N,t,s)(n):s(n);if(!r.interrupt||49===n)return e.enter("listItemPrefix"),e.enter("listItemValue"),c(n)}return t(n)};function c(n){return x(n)&&++o<10?(e.consume(n),c):(!r.interrupt||o<2)&&(r.containerState.marker?n===r.containerState.marker:41===n||46===n)?(e.exit("listItemValue"),s(n)):t(n)}function s(n){return e.enter("listItemMarker"),e.consume(n),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||n,e.check(z,r.interrupt?t:l,e.attempt($,f,a))}function l(e){return r.containerState.initialBlankLine=!0,u++,f(e)}function a(n){return b(n)?(e.enter("listItemPrefixWhitespace"),e.consume(n),e.exit("listItemPrefixWhitespace"),f):t(n)}function f(t){return r.containerState.size=u+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(t)}},continuation:{tokenize:function(e,n,t){const r=this;return r.containerState._closeFlow=void 0,e.check(z,(function(t){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,I(e,n,"listItemIndent",r.containerState.size+1)(t)}),(function(t){if(r.containerState.furtherBlankLines||!b(t))return r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,i(t);return r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(W,n,i)(t)}));function i(i){return r.containerState._closeFlow=!0,r.interrupt=void 0,I(e,e.attempt(U,n,t),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(i)}}},exit:function(e){e.exit(this.containerState.type)}},$={tokenize:function(e,n,t){const r=this;return I(e,(function(e){const i=r.events[r.events.length-1];return!b(e)&&i&&"listItemPrefixWhitespace"===i[1].type?n(e):t(e)}),"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5)},partial:!0},W={tokenize:function(e,n,t){const r=this;return I(e,(function(e){const i=r.events[r.events.length-1];return i&&"listItemIndent"===i[1].type&&i[2].sliceSerialize(i[1],!0).length===r.containerState.size?n(e):t(e)}),"listItemIndent",r.containerState.size+1)},partial:!0};const Z={name:"blockQuote",tokenize:function(e,n,t){const r=this;return function(n){if(62===n){const t=r.containerState;return t.open||(e.enter("blockQuote",{_container:!0}),t.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(n),e.exit("blockQuoteMarker"),i}return t(n)};function i(t){return b(t)?(e.enter("blockQuotePrefixWhitespace"),e.consume(t),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),n):(e.exit("blockQuotePrefix"),n(t))}},continuation:{tokenize:function(e,n,t){const r=this;return function(n){if(b(n))return I(e,i,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(n);return i(n)};function i(r){return e.attempt(Z,n,t)(r)}}},exit:function(e){e.exit("blockQuote")}};function Y(e,n,t,r,i,u,o,c,s){const l=s||Number.POSITIVE_INFINITY;let a=0;return function(n){if(60===n)return e.enter(r),e.enter(i),e.enter(u),e.consume(n),e.exit(u),f;if(null===n||32===n||41===n||g(n))return t(n);return e.enter(r),e.enter(o),e.enter(c),e.enter("chunkString",{contentType:"string"}),p(n)};function f(t){return 62===t?(e.enter(u),e.consume(t),e.exit(u),e.exit(i),e.exit(r),n):(e.enter(c),e.enter("chunkString",{contentType:"string"}),d(t))}function d(n){return 62===n?(e.exit("chunkString"),e.exit(c),f(n)):null===n||60===n||F(n)?t(n):(e.consume(n),92===n?h:d)}function h(n){return 60===n||62===n||92===n?(e.consume(n),d):d(n)}function p(i){return a||null!==i&&41!==i&&!v(i)?a<l&&40===i?(e.consume(i),a++,p):41===i?(e.consume(i),a--,p):null===i||32===i||40===i||g(i)?t(i):(e.consume(i),92===i?m:p):(e.exit("chunkString"),e.exit(c),e.exit(o),e.exit(r),n(i))}function m(n){return 40===n||41===n||92===n?(e.consume(n),p):p(n)}}function G(e,n,t,r,i,u){const o=this;let c,s=0;return function(n){return e.enter(r),e.enter(i),e.consume(n),e.exit(i),e.enter(u),l};function l(f){return s>999||null===f||91===f||93===f&&!c||94===f&&!s&&"_hiddenFootnoteSupport"in o.parser.constructs?t(f):93===f?(e.exit(u),e.enter(i),e.consume(f),e.exit(i),e.exit(r),n):F(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),l):(e.enter("chunkString",{contentType:"string"}),a(f))}function a(n){return null===n||91===n||93===n||F(n)||s++>999?(e.exit("chunkString"),l(n)):(e.consume(n),c||(c=!b(n)),92===n?f:a)}function f(n){return 91===n||92===n||93===n?(e.consume(n),s++,a):a(n)}}function J(e,n,t,r,i,u){let o;return function(n){if(34===n||39===n||40===n)return e.enter(r),e.enter(i),e.consume(n),e.exit(i),o=40===n?41:n,c;return t(n)};function c(t){return t===o?(e.enter(i),e.consume(t),e.exit(i),e.exit(r),n):(e.enter(u),s(t))}function s(n){return n===o?(e.exit(u),c(o)):null===n?t(n):F(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),I(e,s,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),l(n))}function l(n){return n===o||null===n||F(n)?(e.exit("chunkString"),s(n)):(e.consume(n),92===n?a:l)}function a(n){return n===o||92===n?(e.consume(n),l):l(n)}}function K(e,n){let t;return function r(i){if(F(i))return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t=!0,r;if(b(i))return I(e,r,t?"linePrefix":"lineSuffix")(i);return n(i)}}function X(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const ee={name:"definition",tokenize:function(e,n,t){const r=this;let i;return function(n){return e.enter("definition"),function(n){return G.call(r,e,u,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(n)}(n)};function u(n){return i=X(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),58===n?(e.enter("definitionMarker"),e.consume(n),e.exit("definitionMarker"),o):t(n)}function o(n){return v(n)?K(e,c)(n):c(n)}function c(n){return Y(e,s,t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(n)}function s(n){return e.attempt(ne,l,l)(n)}function l(n){return b(n)?I(e,a,"whitespace")(n):a(n)}function a(u){return null===u||F(u)?(e.exit("definition"),r.parser.defined.push(i),n(u)):t(u)}}},ne={tokenize:function(e,n,t){return function(n){return v(n)?K(e,r)(n):t(n)};function r(n){return J(e,i,t,"definitionTitle","definitionTitleMarker","definitionTitleString")(n)}function i(n){return b(n)?I(e,u,"whitespace")(n):u(n)}function u(e){return null===e||F(e)?n(e):t(e)}},partial:!0};const te={name:"codeIndented",tokenize:function(e,n,t){const r=this;return function(n){return e.enter("codeIndented"),I(e,i,"linePrefix",5)(n)};function i(e){const n=r.events[r.events.length-1];return n&&"linePrefix"===n[1].type&&n[2].sliceSerialize(n[1],!0).length>=4?u(e):t(e)}function u(n){return null===n?c(n):F(n)?e.attempt(re,u,c)(n):(e.enter("codeFlowValue"),o(n))}function o(n){return null===n||F(n)?(e.exit("codeFlowValue"),u(n)):(e.consume(n),o)}function c(t){return e.exit("codeIndented"),n(t)}}},re={tokenize:function(e,n,t){const r=this;return i;function i(n){return r.parser.lazy[r.now().line]?t(n):F(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i):I(e,u,"linePrefix",5)(n)}function u(e){const u=r.events[r.events.length-1];return u&&"linePrefix"===u[1].type&&u[2].sliceSerialize(u[1],!0).length>=4?n(e):F(e)?i(e):t(e)}},partial:!0};const ie={name:"headingAtx",tokenize:function(e,n,t){let r=0;return function(n){return e.enter("atxHeading"),function(n){return e.enter("atxHeadingSequence"),i(n)}(n)};function i(n){return 35===n&&r++<6?(e.consume(n),i):null===n||v(n)?(e.exit("atxHeadingSequence"),u(n)):t(n)}function u(t){return 35===t?(e.enter("atxHeadingSequence"),o(t)):null===t||F(t)?(e.exit("atxHeading"),n(t)):b(t)?I(e,u,"whitespace")(t):(e.enter("atxHeadingText"),c(t))}function o(n){return 35===n?(e.consume(n),o):(e.exit("atxHeadingSequence"),u(n))}function c(n){return null===n||35===n||v(n)?(e.exit("atxHeadingText"),u(n)):(e.consume(n),c)}},resolve:function(e,n){let t,r,i=e.length-2,u=3;"whitespace"===e[u][1].type&&(u+=2);i-2>u&&"whitespace"===e[i][1].type&&(i-=2);"atxHeadingSequence"===e[i][1].type&&(u===i-1||i-4>u&&"whitespace"===e[i-2][1].type)&&(i-=u+1===i?2:4);i>u&&(t={type:"atxHeadingText",start:e[u][1].start,end:e[i][1].end},r={type:"chunkText",start:e[u][1].start,end:e[i][1].end,contentType:"text"},s(e,u,i-u+1,[["enter",t,n],["enter",r,n],["exit",r,n],["exit",t,n]]));return e}};const ue={name:"setextUnderline",tokenize:function(e,n,t){const r=this;let i;return function(n){let o,c=r.events.length;for(;c--;)if("lineEnding"!==r.events[c][1].type&&"linePrefix"!==r.events[c][1].type&&"content"!==r.events[c][1].type){o="paragraph"===r.events[c][1].type;break}if(!r.parser.lazy[r.now().line]&&(r.interrupt||o))return e.enter("setextHeadingLine"),i=n,function(n){return e.enter("setextHeadingLineSequence"),u(n)}(n);return t(n)};function u(n){return n===i?(e.consume(n),u):(e.exit("setextHeadingLineSequence"),b(n)?I(e,o,"lineSuffix")(n):o(n))}function o(r){return null===r||F(r)?(e.exit("setextHeadingLine"),n(r)):t(r)}},resolveTo:function(e,n){let t,r,i,u=e.length;for(;u--;)if("enter"===e[u][0]){if("content"===e[u][1].type){t=u;break}"paragraph"===e[u][1].type&&(r=u)}else"content"===e[u][1].type&&e.splice(u,1),i||"definition"!==e[u][1].type||(i=u);const o={type:"setextHeading",start:Object.assign({},e[r][1].start),end:Object.assign({},e[e.length-1][1].end)};e[r][1].type="setextHeadingText",i?(e.splice(r,0,["enter",o,n]),e.splice(i+1,0,["exit",e[t][1],n]),e[t][1].end=Object.assign({},e[i][1].end)):e[t][1]=o;return e.push(["exit",o,n]),e}};const oe=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],ce=["pre","script","style","textarea"],se={name:"htmlFlow",tokenize:function(e,n,t){const r=this;let i,u,o,c,s;return function(n){return function(n){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(n),l}(n)};function l(c){return 33===c?(e.consume(c),a):47===c?(e.consume(c),u=!0,m):63===c?(e.consume(c),i=3,r.interrupt?n:H):h(c)?(e.consume(c),o=String.fromCharCode(c),g):t(c)}function a(u){return 45===u?(e.consume(u),i=2,f):91===u?(e.consume(u),i=5,c=0,d):h(u)?(e.consume(u),i=4,r.interrupt?n:H):t(u)}function f(i){return 45===i?(e.consume(i),r.interrupt?n:H):t(i)}function d(i){const u="CDATA[";return i===u.charCodeAt(c++)?(e.consume(i),6===c?r.interrupt?n:D:d):t(i)}function m(n){return h(n)?(e.consume(n),o=String.fromCharCode(n),g):t(n)}function g(c){if(null===c||47===c||62===c||v(c)){const s=47===c,l=o.toLowerCase();return s||u||!ce.includes(l)?oe.includes(o.toLowerCase())?(i=6,s?(e.consume(c),x):r.interrupt?n(c):D(c)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?t(c):u?k(c):y(c)):(i=1,r.interrupt?n(c):D(c))}return 45===c||p(c)?(e.consume(c),o+=String.fromCharCode(c),g):t(c)}function x(i){return 62===i?(e.consume(i),r.interrupt?n:D):t(i)}function k(n){return b(n)?(e.consume(n),k):T(n)}function y(n){return 47===n?(e.consume(n),T):58===n||95===n||h(n)?(e.consume(n),S):b(n)?(e.consume(n),y):T(n)}function S(n){return 45===n||46===n||58===n||95===n||p(n)?(e.consume(n),S):E(n)}function E(n){return 61===n?(e.consume(n),A):b(n)?(e.consume(n),E):y(n)}function A(n){return null===n||60===n||61===n||62===n||96===n?t(n):34===n||39===n?(e.consume(n),s=n,I):b(n)?(e.consume(n),A):w(n)}function I(n){return n===s?(e.consume(n),s=null,C):null===n||F(n)?t(n):(e.consume(n),I)}function w(n){return null===n||34===n||39===n||47===n||60===n||61===n||62===n||96===n||v(n)?E(n):(e.consume(n),w)}function C(e){return 47===e||62===e||b(e)?y(e):t(e)}function T(n){return 62===n?(e.consume(n),z):t(n)}function z(n){return null===n||F(n)?D(n):b(n)?(e.consume(n),z):t(n)}function D(n){return 45===n&&2===i?(e.consume(n),L):60===n&&1===i?(e.consume(n),P):62===n&&4===i?(e.consume(n),R):63===n&&3===i?(e.consume(n),H):93===n&&5===i?(e.consume(n),j):!F(n)||6!==i&&7!==i?null===n||F(n)?(e.exit("htmlFlowData"),B(n)):(e.consume(n),D):(e.exit("htmlFlowData"),e.check(le,q,B)(n))}function B(n){return e.check(ae,_,q)(n)}function _(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),M}function M(n){return null===n||F(n)?B(n):(e.enter("htmlFlowData"),D(n))}function L(n){return 45===n?(e.consume(n),H):D(n)}function P(n){return 47===n?(e.consume(n),o="",O):D(n)}function O(n){if(62===n){const t=o.toLowerCase();return ce.includes(t)?(e.consume(n),R):D(n)}return h(n)&&o.length<8?(e.consume(n),o+=String.fromCharCode(n),O):D(n)}function j(n){return 93===n?(e.consume(n),H):D(n)}function H(n){return 62===n?(e.consume(n),R):45===n&&2===i?(e.consume(n),H):D(n)}function R(n){return null===n||F(n)?(e.exit("htmlFlowData"),q(n)):(e.consume(n),R)}function q(t){return e.exit("htmlFlow"),n(t)}},resolveTo:function(e){let n=e.length;for(;n--&&("enter"!==e[n][0]||"htmlFlow"!==e[n][1].type););n>1&&"linePrefix"===e[n-2][1].type&&(e[n][1].start=e[n-2][1].start,e[n+1][1].start=e[n-2][1].start,e.splice(n-2,2));return e},concrete:!0},le={tokenize:function(e,n,t){return function(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(z,n,t)}},partial:!0},ae={tokenize:function(e,n,t){const r=this;return function(n){if(F(n))return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i;return t(n)};function i(e){return r.parser.lazy[r.now().line]?t(e):n(e)}},partial:!0};const fe={tokenize:function(e,n,t){const r=this;return function(n){if(null===n)return t(n);return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i};function i(e){return r.parser.lazy[r.now().line]?t(e):n(e)}},partial:!0},de={name:"codeFenced",tokenize:function(e,n,t){const r=this,i={tokenize:function(e,n,t){let i=0;return o;function o(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),s}function s(n){return e.enter("codeFencedFence"),b(n)?I(e,l,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(n):l(n)}function l(n){return n===u?(e.enter("codeFencedFenceSequence"),a(n)):t(n)}function a(n){return n===u?(i++,e.consume(n),a):i>=c?(e.exit("codeFencedFenceSequence"),b(n)?I(e,f,"whitespace")(n):f(n)):t(n)}function f(r){return null===r||F(r)?(e.exit("codeFencedFence"),n(r)):t(r)}},partial:!0};let u,o=0,c=0;return function(n){return function(n){const t=r.events[r.events.length-1];return o=t&&"linePrefix"===t[1].type?t[2].sliceSerialize(t[1],!0).length:0,u=n,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),s(n)}(n)};function s(n){return n===u?(c++,e.consume(n),s):c<3?t(n):(e.exit("codeFencedFenceSequence"),b(n)?I(e,l,"whitespace")(n):l(n))}function l(t){return null===t||F(t)?(e.exit("codeFencedFence"),r.interrupt?n(t):e.check(fe,h,k)(t)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),a(t))}function a(n){return null===n||F(n)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),l(n)):b(n)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),I(e,f,"whitespace")(n)):96===n&&n===u?t(n):(e.consume(n),a)}function f(n){return null===n||F(n)?l(n):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),d(n))}function d(n){return null===n||F(n)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),l(n)):96===n&&n===u?t(n):(e.consume(n),d)}function h(n){return e.attempt(i,k,p)(n)}function p(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),m}function m(n){return o>0&&b(n)?I(e,g,"linePrefix",o+1)(n):g(n)}function g(n){return null===n||F(n)?e.check(fe,h,k)(n):(e.enter("codeFlowValue"),x(n))}function x(n){return null===n||F(n)?(e.exit("codeFlowValue"),g(n)):(e.consume(n),x)}function k(t){return e.exit("codeFenced"),n(t)}},concrete:!0};const he=document.createElement("i");function pe(e){const n="&"+e+";";he.innerHTML=n;const t=he.textContent;return(59!==t.charCodeAt(t.length-1)||"semi"===e)&&(t!==n&&t)}const me={name:"characterReference",tokenize:function(e,n,t){const r=this;let i,u,o=0;return function(n){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(n),e.exit("characterReferenceMarker"),c};function c(n){return 35===n?(e.enter("characterReferenceMarkerNumeric"),e.consume(n),e.exit("characterReferenceMarkerNumeric"),s):(e.enter("characterReferenceValue"),i=31,u=p,l(n))}function s(n){return 88===n||120===n?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(n),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),i=6,u=k,l):(e.enter("characterReferenceValue"),i=7,u=x,l(n))}function l(c){if(59===c&&o){const i=e.exit("characterReferenceValue");return u!==p||pe(r.sliceSerialize(i))?(e.enter("characterReferenceMarker"),e.consume(c),e.exit("characterReferenceMarker"),e.exit("characterReference"),n):t(c)}return u(c)&&o++<i?(e.consume(c),l):t(c)}}};const ge={name:"characterEscape",tokenize:function(e,n,t){return function(n){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(n),e.exit("escapeMarker"),r};function r(r){return y(r)?(e.enter("characterEscapeValue"),e.consume(r),e.exit("characterEscapeValue"),e.exit("characterEscape"),n):t(r)}}};const xe={name:"lineEnding",tokenize:function(e,n){return function(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),I(e,n,"linePrefix")}}};const ke={name:"labelEnd",tokenize:function(e,n,t){const r=this;let i,u,o=r.events.length;for(;o--;)if(("labelImage"===r.events[o][1].type||"labelLink"===r.events[o][1].type)&&!r.events[o][1]._balanced){i=r.events[o][1];break}return function(n){if(!i)return t(n);if(i._inactive)return a(n);return u=r.parser.defined.includes(X(r.sliceSerialize({start:i.end,end:r.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(n),e.exit("labelMarker"),e.exit("labelEnd"),c};function c(n){return 40===n?e.attempt(ye,l,u?l:a)(n):91===n?e.attempt(Fe,l,u?s:a)(n):u?l(n):a(n)}function s(n){return e.attempt(ve,l,a)(n)}function l(e){return n(e)}function a(e){return i._balanced=!0,t(e)}},resolveTo:function(e,n){let t,r,i,u,o=e.length,c=0;for(;o--;)if(t=e[o][1],r){if("link"===t.type||"labelLink"===t.type&&t._inactive)break;"enter"===e[o][0]&&"labelLink"===t.type&&(t._inactive=!0)}else if(i){if("enter"===e[o][0]&&("labelImage"===t.type||"labelLink"===t.type)&&!t._balanced&&(r=o,"labelLink"!==t.type)){c=2;break}}else"labelEnd"===t.type&&(i=o);const a={type:"labelLink"===e[r][1].type?"link":"image",start:Object.assign({},e[r][1].start),end:Object.assign({},e[e.length-1][1].end)},f={type:"label",start:Object.assign({},e[r][1].start),end:Object.assign({},e[i][1].end)},d={type:"labelText",start:Object.assign({},e[r+c+2][1].end),end:Object.assign({},e[i-2][1].start)};return u=[["enter",a,n],["enter",f,n]],u=l(u,e.slice(r+1,r+c+3)),u=l(u,[["enter",d,n]]),u=l(u,V(n.parser.constructs.insideSpan.null,e.slice(r+c+4,i-3),n)),u=l(u,[["exit",d,n],e[i-2],e[i-1],["exit",f,n]]),u=l(u,e.slice(i+1)),u=l(u,[["exit",a,n]]),s(e,r,e.length,u),e},resolveAll:function(e){let n=-1;for(;++n<e.length;){const t=e[n][1];"labelImage"!==t.type&&"labelLink"!==t.type&&"labelEnd"!==t.type||(e.splice(n+1,"labelImage"===t.type?4:2),t.type="data",n++)}return e}},ye={tokenize:function(e,n,t){return function(n){return e.enter("resource"),e.enter("resourceMarker"),e.consume(n),e.exit("resourceMarker"),r};function r(n){return v(n)?K(e,i)(n):i(n)}function i(n){return 41===n?l(n):Y(e,u,o,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(n)}function u(n){return v(n)?K(e,c)(n):l(n)}function o(e){return t(e)}function c(n){return 34===n||39===n||40===n?J(e,s,t,"resourceTitle","resourceTitleMarker","resourceTitleString")(n):l(n)}function s(n){return v(n)?K(e,l)(n):l(n)}function l(r){return 41===r?(e.enter("resourceMarker"),e.consume(r),e.exit("resourceMarker"),e.exit("resource"),n):t(r)}}},Fe={tokenize:function(e,n,t){const r=this;return function(n){return G.call(r,e,i,u,"reference","referenceMarker","referenceString")(n)};function i(e){return r.parser.defined.includes(X(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?n(e):t(e)}function u(e){return t(e)}}},ve={tokenize:function(e,n,t){return function(n){return e.enter("reference"),e.enter("referenceMarker"),e.consume(n),e.exit("referenceMarker"),r};function r(r){return 93===r?(e.enter("referenceMarker"),e.consume(r),e.exit("referenceMarker"),e.exit("reference"),n):t(r)}}};function be(e){return null===e||v(e)||E(e)?1:S(e)?2:void 0}const Se={name:"attention",tokenize:function(e,n){const t=this.parser.constructs.attentionMarkers.null,r=this.previous,i=be(r);let u;return function(n){return u=n,e.enter("attentionSequence"),o(n)};function o(c){if(c===u)return e.consume(c),o;const s=e.exit("attentionSequence"),l=be(c),a=!l||2===l&&i||t.includes(c),f=!i||2===i&&l||t.includes(r);return s._open=Boolean(42===u?a:a&&(i||!f)),s._close=Boolean(42===u?f:f&&(l||!a)),n(c)}},resolveAll:function(e,n){let t,r,i,u,o,c,a,f,d=-1;for(;++d<e.length;)if("enter"===e[d][0]&&"attentionSequence"===e[d][1].type&&e[d][1]._close)for(t=d;t--;)if("exit"===e[t][0]&&"attentionSequence"===e[t][1].type&&e[t][1]._open&&n.sliceSerialize(e[t][1]).charCodeAt(0)===n.sliceSerialize(e[d][1]).charCodeAt(0)){if((e[t][1]._close||e[d][1]._open)&&(e[d][1].end.offset-e[d][1].start.offset)%3&&!((e[t][1].end.offset-e[t][1].start.offset+e[d][1].end.offset-e[d][1].start.offset)%3))continue;c=e[t][1].end.offset-e[t][1].start.offset>1&&e[d][1].end.offset-e[d][1].start.offset>1?2:1;const h=Object.assign({},e[t][1].end),p=Object.assign({},e[d][1].start);Ee(h,-c),Ee(p,c),u={type:c>1?"strongSequence":"emphasisSequence",start:h,end:Object.assign({},e[t][1].end)},o={type:c>1?"strongSequence":"emphasisSequence",start:Object.assign({},e[d][1].start),end:p},i={type:c>1?"strongText":"emphasisText",start:Object.assign({},e[t][1].end),end:Object.assign({},e[d][1].start)},r={type:c>1?"strong":"emphasis",start:Object.assign({},u.start),end:Object.assign({},o.end)},e[t][1].end=Object.assign({},u.start),e[d][1].start=Object.assign({},o.end),a=[],e[t][1].end.offset-e[t][1].start.offset&&(a=l(a,[["enter",e[t][1],n],["exit",e[t][1],n]])),a=l(a,[["enter",r,n],["enter",u,n],["exit",u,n],["enter",i,n]]),a=l(a,V(n.parser.constructs.insideSpan.null,e.slice(t+1,d),n)),a=l(a,[["exit",i,n],["enter",o,n],["exit",o,n],["exit",r,n]]),e[d][1].end.offset-e[d][1].start.offset?(f=2,a=l(a,[["enter",e[d][1],n],["exit",e[d][1],n]])):f=0,s(e,t-1,d-t+3,a),d=t+a.length-f-2;break}d=-1;for(;++d<e.length;)"attentionSequence"===e[d][1].type&&(e[d][1].type="data");return e}};function Ee(e,n){e.column+=n,e.offset+=n,e._bufferIndex+=n}const Ae={name:"htmlText",tokenize:function(e,n,t){const r=this;let i,u,o;return function(n){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(n),c};function c(n){return 33===n?(e.consume(n),s):47===n?(e.consume(n),A):63===n?(e.consume(n),S):h(n)?(e.consume(n),T):t(n)}function s(n){return 45===n?(e.consume(n),l):91===n?(e.consume(n),u=0,m):h(n)?(e.consume(n),y):t(n)}function l(n){return 45===n?(e.consume(n),d):t(n)}function a(n){return null===n?t(n):45===n?(e.consume(n),f):F(n)?(o=a,j(n)):(e.consume(n),a)}function f(n){return 45===n?(e.consume(n),d):a(n)}function d(e){return 62===e?O(e):45===e?f(e):a(e)}function m(n){const r="CDATA[";return n===r.charCodeAt(u++)?(e.consume(n),6===u?g:m):t(n)}function g(n){return null===n?t(n):93===n?(e.consume(n),x):F(n)?(o=g,j(n)):(e.consume(n),g)}function x(n){return 93===n?(e.consume(n),k):g(n)}function k(n){return 62===n?O(n):93===n?(e.consume(n),k):g(n)}function y(n){return null===n||62===n?O(n):F(n)?(o=y,j(n)):(e.consume(n),y)}function S(n){return null===n?t(n):63===n?(e.consume(n),E):F(n)?(o=S,j(n)):(e.consume(n),S)}function E(e){return 62===e?O(e):S(e)}function A(n){return h(n)?(e.consume(n),w):t(n)}function w(n){return 45===n||p(n)?(e.consume(n),w):C(n)}function C(n){return F(n)?(o=C,j(n)):b(n)?(e.consume(n),C):O(n)}function T(n){return 45===n||p(n)?(e.consume(n),T):47===n||62===n||v(n)?z(n):t(n)}function z(n){return 47===n?(e.consume(n),O):58===n||95===n||h(n)?(e.consume(n),D):F(n)?(o=z,j(n)):b(n)?(e.consume(n),z):O(n)}function D(n){return 45===n||46===n||58===n||95===n||p(n)?(e.consume(n),D):B(n)}function B(n){return 61===n?(e.consume(n),_):F(n)?(o=B,j(n)):b(n)?(e.consume(n),B):z(n)}function _(n){return null===n||60===n||61===n||62===n||96===n?t(n):34===n||39===n?(e.consume(n),i=n,M):F(n)?(o=_,j(n)):b(n)?(e.consume(n),_):(e.consume(n),L)}function M(n){return n===i?(e.consume(n),i=void 0,P):null===n?t(n):F(n)?(o=M,j(n)):(e.consume(n),M)}function L(n){return null===n||34===n||39===n||60===n||61===n||96===n?t(n):47===n||62===n||v(n)?z(n):(e.consume(n),L)}function P(e){return 47===e||62===e||v(e)?z(e):t(e)}function O(r){return 62===r?(e.consume(r),e.exit("htmlTextData"),e.exit("htmlText"),n):t(r)}function j(n){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),H}function H(n){return b(n)?I(e,R,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(n):R(n)}function R(n){return e.enter("htmlTextData"),o(n)}}};const Ie={name:"codeText",tokenize:function(e,n,t){let r,i,u=0;return function(n){return e.enter("codeText"),e.enter("codeTextSequence"),o(n)};function o(n){return 96===n?(e.consume(n),u++,o):(e.exit("codeTextSequence"),c(n))}function c(n){return null===n?t(n):32===n?(e.enter("space"),e.consume(n),e.exit("space"),c):96===n?(i=e.enter("codeTextSequence"),r=0,l(n)):F(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),c):(e.enter("codeTextData"),s(n))}function s(n){return null===n||32===n||96===n||F(n)?(e.exit("codeTextData"),c(n)):(e.consume(n),s)}function l(t){return 96===t?(e.consume(t),r++,l):r===u?(e.exit("codeTextSequence"),e.exit("codeText"),n(t)):(i.type="codeTextData",s(t))}},resolve:function(e){let n,t,r=e.length-4,i=3;if(!("lineEnding"!==e[i][1].type&&"space"!==e[i][1].type||"lineEnding"!==e[r][1].type&&"space"!==e[r][1].type))for(n=i;++n<r;)if("codeTextData"===e[n][1].type){e[i][1].type="codeTextPadding",e[r][1].type="codeTextPadding",i+=2,r-=2;break}n=i-1,r++;for(;++n<=r;)void 0===t?n!==r&&"lineEnding"!==e[n][1].type&&(t=n):n!==r&&"lineEnding"!==e[n][1].type||(e[t][1].type="codeTextData",n!==t+2&&(e[t][1].end=e[n-1][1].end,e.splice(t+2,n-t-2),r-=n-t-2,n=t+2),t=void 0);return e},previous:function(e){return 96!==e||"characterEscape"===this.events[this.events.length-1][1].type}};const we={42:U,43:U,45:U,48:U,49:U,50:U,51:U,52:U,53:U,54:U,55:U,56:U,57:U,62:Z},Ce={91:ee},Te={[-2]:te,[-1]:te,32:te},ze={35:ie,42:N,45:[ue,N],60:se,61:ue,95:N,96:de,126:de},De={38:me,92:ge},Be={[-5]:xe,[-4]:xe,[-3]:xe,33:{name:"labelStartImage",tokenize:function(e,n,t){const r=this;return function(n){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(n),e.exit("labelImageMarker"),i};function i(n){return 91===n?(e.enter("labelMarker"),e.consume(n),e.exit("labelMarker"),e.exit("labelImage"),u):t(n)}function u(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?t(e):n(e)}},resolveAll:ke.resolveAll},38:me,42:Se,60:[{name:"autolink",tokenize:function(e,n,t){let r=0;return function(n){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(n),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),i};function i(n){return h(n)?(e.consume(n),u):s(n)}function u(e){return 43===e||45===e||46===e||p(e)?(r=1,o(e)):s(e)}function o(n){return 58===n?(e.consume(n),r=0,c):(43===n||45===n||46===n||p(n))&&r++<32?(e.consume(n),o):(r=0,s(n))}function c(r){return 62===r?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(r),e.exit("autolinkMarker"),e.exit("autolink"),n):null===r||32===r||60===r||g(r)?t(r):(e.consume(r),c)}function s(n){return 64===n?(e.consume(n),l):m(n)?(e.consume(n),s):t(n)}function l(e){return p(e)?a(e):t(e)}function a(t){return 46===t?(e.consume(t),r=0,l):62===t?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(t),e.exit("autolinkMarker"),e.exit("autolink"),n):f(t)}function f(n){if((45===n||p(n))&&r++<63){const t=45===n?f:a;return e.consume(n),t}return t(n)}}},Ae],91:{name:"labelStartLink",tokenize:function(e,n,t){const r=this;return function(n){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(n),e.exit("labelMarker"),e.exit("labelLink"),i};function i(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?t(e):n(e)}},resolveAll:ke.resolveAll},92:[{name:"hardBreakEscape",tokenize:function(e,n,t){return function(n){return e.enter("hardBreakEscape"),e.consume(n),r};function r(r){return F(r)?(e.exit("hardBreakEscape"),n(r)):t(r)}}},ge],93:ke,95:Se,96:Ie},_e={null:[Se,P]},Me={null:[42,95]},Le={null:[]};function Pe(e){const n=function(e){const n={};let t=-1;for(;++t<e.length;)f(n,e[t]);return n}([r,...(e||{}).extensions||[]]),t={defined:[],lazy:{},constructs:n,content:i(w),document:i(C),flow:i(L),string:i(O),text:i(j)};return t;function i(e){return function(n){return Q(t,e,n)}}}const Oe=/[\0\t\n\r]/g;function je(e,n){const t=Number.parseInt(e,n);return t<9||11===t||t>13&&t<32||t>126&&t<160||t>55295&&t<57344||t>64975&&t<65008||65535==(65535&t)||65534==(65535&t)||t>1114111?"\ufffd":String.fromCharCode(t)}const He=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Re(e,n,t){if(n)return n;if(35===t.charCodeAt(0)){const e=t.charCodeAt(1),n=120===e||88===e;return je(t.slice(n?2:1),n?16:10)}return pe(t)||e}function qe(e){return e&&"object"==typeof e?"position"in e||"type"in e?Qe(e.position):"start"in e||"end"in e?Qe(e):"line"in e||"column"in e?Ve(e):"":""}function Ve(e){return Ne(e&&e.line)+":"+Ne(e&&e.column)}function Qe(e){return Ve(e&&e.start)+"-"+Ve(e&&e.end)}function Ne(e){return e&&"number"==typeof e?e:1}const Ue={}.hasOwnProperty,$e=function(e,n,t){return"string"!=typeof n&&(t=n,n=void 0),function(e){const n={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:l(ue),autolinkProtocol:T,autolinkEmail:T,atxHeading:l(ne),blockQuote:l(Y),characterEscape:T,characterReference:T,codeFenced:l(G),codeFencedFenceInfo:a,codeFencedFenceMeta:a,codeIndented:l(G,a),codeText:l(J,a),codeTextData:T,data:T,codeFlowValue:T,definition:l(K),definitionDestinationString:a,definitionLabelString:a,definitionTitleString:a,emphasis:l(ee),hardBreakEscape:l(te),hardBreakTrailing:l(te),htmlFlow:l(re,a),htmlFlowData:T,htmlText:l(re,a),htmlTextData:T,image:l(ie),label:a,link:l(ue),listItem:l(ce),listItemValue:g,listOrdered:l(oe,m),listUnordered:l(oe),paragraph:l(se),reference:Q,referenceString:a,resourceDestinationString:a,resourceTitleString:a,setextHeading:l(ne),strong:l(le),thematicBreak:l(fe)},exit:{atxHeading:d(),atxHeadingSequence:A,autolink:d(),autolinkEmail:Z,autolinkProtocol:W,blockQuote:d(),characterEscapeValue:z,characterReferenceMarkerHexadecimal:U,characterReferenceMarkerNumeric:U,characterReferenceValue:$,codeFenced:d(F),codeFencedFence:y,codeFencedFenceInfo:x,codeFencedFenceMeta:k,codeFlowValue:z,codeIndented:d(v),codeText:d(L),codeTextData:z,data:z,definition:d(),definitionDestinationString:E,definitionLabelString:b,definitionTitleString:S,emphasis:d(),hardBreakEscape:d(B),hardBreakTrailing:d(B),htmlFlow:d(_),htmlFlowData:z,htmlText:d(M),htmlTextData:z,image:d(O),label:H,labelText:j,lineEnding:D,link:d(P),listItem:d(),listOrdered:d(),listUnordered:d(),paragraph:d(),referenceString:N,resourceDestinationString:R,resourceTitleString:q,resource:V,setextHeading:d(C),setextHeadingLineSequence:w,setextHeadingText:I,strong:d(),thematicBreak:d()}};Ze(n,(e||{}).mdastExtensions||[]);const t={};return r;function r(e){let t={type:"root",children:[]};const r={stack:[t],tokenStack:[],config:n,enter:f,exit:h,buffer:a,resume:p,setData:c,getData:s},u=[];let o=-1;for(;++o<e.length;)if("listOrdered"===e[o][1].type||"listUnordered"===e[o][1].type)if("enter"===e[o][0])u.push(o);else{o=i(e,u.pop(),o)}for(o=-1;++o<e.length;){const t=n[e[o][0]];Ue.call(t,e[o][1].type)&&t[e[o][1].type].call(Object.assign({sliceSerialize:e[o][2].sliceSerialize},r),e[o][1])}if(r.tokenStack.length>0){const e=r.tokenStack[r.tokenStack.length-1];(e[1]||Ge).call(r,void 0,e[0])}for(t.position={start:We(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:We(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},o=-1;++o<n.transforms.length;)t=n.transforms[o](t)||t;return t}function i(e,n,t){let r,i,u,o,c=n-1,s=-1,l=!1;for(;++c<=t;){const n=e[c];if("listUnordered"===n[1].type||"listOrdered"===n[1].type||"blockQuote"===n[1].type?("enter"===n[0]?s++:s--,o=void 0):"lineEndingBlank"===n[1].type?"enter"===n[0]&&(!r||o||s||u||(u=c),o=void 0):"linePrefix"===n[1].type||"listItemValue"===n[1].type||"listItemMarker"===n[1].type||"listItemPrefix"===n[1].type||"listItemPrefixWhitespace"===n[1].type||(o=void 0),!s&&"enter"===n[0]&&"listItemPrefix"===n[1].type||-1===s&&"exit"===n[0]&&("listUnordered"===n[1].type||"listOrdered"===n[1].type)){if(r){let o=c;for(i=void 0;o--;){const n=e[o];if("lineEnding"===n[1].type||"lineEndingBlank"===n[1].type){if("exit"===n[0])continue;i&&(e[i][1].type="lineEndingBlank",l=!0),n[1].type="lineEnding",i=o}else if("linePrefix"!==n[1].type&&"blockQuotePrefix"!==n[1].type&&"blockQuotePrefixWhitespace"!==n[1].type&&"blockQuoteMarker"!==n[1].type&&"listItemIndent"!==n[1].type)break}u&&(!i||u<i)&&(r._spread=!0),r.end=Object.assign({},i?e[i][1].start:n[1].end),e.splice(i||c,0,["exit",r,n[2]]),c++,t++}"listItemPrefix"===n[1].type&&(r={type:"listItem",_spread:!1,start:Object.assign({},n[1].start),end:void 0},e.splice(c,0,["enter",r,n[2]]),c++,t++,u=void 0,o=!0)}}return e[n][1]._spread=l,t}function c(e,n){t[e]=n}function s(e){return t[e]}function l(e,n){return t;function t(t){f.call(this,e(t),t),n&&n.call(this,t)}}function a(){this.stack.push({type:"fragment",children:[]})}function f(e,n,t){return this.stack[this.stack.length-1].children.push(e),this.stack.push(e),this.tokenStack.push([n,t]),e.position={start:We(n.start)},e}function d(e){return n;function n(n){e&&e.call(this,n),h.call(this,n)}}function h(e,n){const t=this.stack.pop(),r=this.tokenStack.pop();if(!r)throw new Error("Cannot close `"+e.type+"` ("+qe({start:e.start,end:e.end})+"): it\u2019s not open");if(r[0].type!==e.type)if(n)n.call(this,e,r[0]);else{(r[1]||Ge).call(this,e,r[0])}return t.position.end=We(e.end),t}function p(){return function(e,n){const t=n||u;return o(e,"boolean"!=typeof t.includeImageAlt||t.includeImageAlt,"boolean"!=typeof t.includeHtml||t.includeHtml)}(this.stack.pop())}function m(){c("expectingFirstListItemValue",!0)}function g(e){if(s("expectingFirstListItemValue")){this.stack[this.stack.length-2].start=Number.parseInt(this.sliceSerialize(e),10),c("expectingFirstListItemValue")}}function x(){const e=this.resume();this.stack[this.stack.length-1].lang=e}function k(){const e=this.resume();this.stack[this.stack.length-1].meta=e}function y(){s("flowCodeInside")||(this.buffer(),c("flowCodeInside",!0))}function F(){const e=this.resume();this.stack[this.stack.length-1].value=e.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),c("flowCodeInside")}function v(){const e=this.resume();this.stack[this.stack.length-1].value=e.replace(/(\r?\n|\r)$/g,"")}function b(e){const n=this.resume(),t=this.stack[this.stack.length-1];t.label=n,t.identifier=X(this.sliceSerialize(e)).toLowerCase()}function S(){const e=this.resume();this.stack[this.stack.length-1].title=e}function E(){const e=this.resume();this.stack[this.stack.length-1].url=e}function A(e){const n=this.stack[this.stack.length-1];if(!n.depth){const t=this.sliceSerialize(e).length;n.depth=t}}function I(){c("setextHeadingSlurpLineEnding",!0)}function w(e){this.stack[this.stack.length-1].depth=61===this.sliceSerialize(e).charCodeAt(0)?1:2}function C(){c("setextHeadingSlurpLineEnding")}function T(e){const n=this.stack[this.stack.length-1];let t=n.children[n.children.length-1];t&&"text"===t.type||(t=ae(),t.position={start:We(e.start)},n.children.push(t)),this.stack.push(t)}function z(e){const n=this.stack.pop();n.value+=this.sliceSerialize(e),n.position.end=We(e.end)}function D(e){const t=this.stack[this.stack.length-1];if(s("atHardBreak")){return t.children[t.children.length-1].position.end=We(e.end),void c("atHardBreak")}!s("setextHeadingSlurpLineEnding")&&n.canContainEols.includes(t.type)&&(T.call(this,e),z.call(this,e))}function B(){c("atHardBreak",!0)}function _(){const e=this.resume();this.stack[this.stack.length-1].value=e}function M(){const e=this.resume();this.stack[this.stack.length-1].value=e}function L(){const e=this.resume();this.stack[this.stack.length-1].value=e}function P(){const e=this.stack[this.stack.length-1];if(s("inReference")){const n=s("referenceType")||"shortcut";e.type+="Reference",e.referenceType=n,delete e.url,delete e.title}else delete e.identifier,delete e.label;c("referenceType")}function O(){const e=this.stack[this.stack.length-1];if(s("inReference")){const n=s("referenceType")||"shortcut";e.type+="Reference",e.referenceType=n,delete e.url,delete e.title}else delete e.identifier,delete e.label;c("referenceType")}function j(e){const n=this.sliceSerialize(e),t=this.stack[this.stack.length-2];t.label=function(e){return e.replace(He,Re)}(n),t.identifier=X(n).toLowerCase()}function H(){const e=this.stack[this.stack.length-1],n=this.resume(),t=this.stack[this.stack.length-1];if(c("inReference",!0),"link"===t.type){const n=e.children;t.children=n}else t.alt=n}function R(){const e=this.resume();this.stack[this.stack.length-1].url=e}function q(){const e=this.resume();this.stack[this.stack.length-1].title=e}function V(){c("inReference")}function Q(){c("referenceType","collapsed")}function N(e){const n=this.resume(),t=this.stack[this.stack.length-1];t.label=n,t.identifier=X(this.sliceSerialize(e)).toLowerCase(),c("referenceType","full")}function U(e){c("characterReferenceType",e.type)}function $(e){const n=this.sliceSerialize(e),t=s("characterReferenceType");let r;if(t)r=je(n,"characterReferenceMarkerNumeric"===t?10:16),c("characterReferenceType");else{r=pe(n)}const i=this.stack.pop();i.value+=r,i.position.end=We(e.end)}function W(e){z.call(this,e);this.stack[this.stack.length-1].url=this.sliceSerialize(e)}function Z(e){z.call(this,e);this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)}function Y(){return{type:"blockquote",children:[]}}function G(){return{type:"code",lang:null,meta:null,value:""}}function J(){return{type:"inlineCode",value:""}}function K(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function ee(){return{type:"emphasis",children:[]}}function ne(){return{type:"heading",depth:void 0,children:[]}}function te(){return{type:"break"}}function re(){return{type:"html",value:""}}function ie(){return{type:"image",title:null,url:"",alt:null}}function ue(){return{type:"link",title:null,url:"",children:[]}}function oe(e){return{type:"list",ordered:"listOrdered"===e.type,start:null,spread:e._spread,children:[]}}function ce(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}}function se(){return{type:"paragraph",children:[]}}function le(){return{type:"strong",children:[]}}function ae(){return{type:"text",value:""}}function fe(){return{type:"thematicBreak"}}}(t)(function(e){for(;!D(e););return e}(Pe(t).document().write(function(){let e,n=1,t="",r=!0;return function(i,u,o){const c=[];let s,l,a,f,d;for(i=t+i.toString(u),a=0,t="",r&&(65279===i.charCodeAt(0)&&a++,r=void 0);a<i.length;){if(Oe.lastIndex=a,s=Oe.exec(i),f=s&&void 0!==s.index?s.index:i.length,d=i.charCodeAt(f),!s){t=i.slice(a);break}if(10===d&&a===f&&e)c.push(-3),e=void 0;else switch(e&&(c.push(-5),e=void 0),a<f&&(c.push(i.slice(a,f)),n+=f-a),d){case 0:c.push(65533),n++;break;case 9:for(l=4*Math.ceil(n/4),c.push(-2);n++<l;)c.push(-1);break;case 10:c.push(-4),n=1;break;default:e=!0,n=1}a=f+1}return o&&(e&&c.push(-5),t&&c.push(t),c.push(null)),c}}()(e,n,!0))))};function We(e){return{line:e.line,column:e.column,offset:e.offset}}function Ze(e,n){let t=-1;for(;++t<n.length;){const r=n[t];Array.isArray(r)?Ze(e,r):Ye(e,r)}}function Ye(e,n){let t;for(t in n)if(Ue.call(n,t))if("canContainEols"===t){const r=n[t];r&&e[t].push(...r)}else if("transforms"===t){const r=n[t];r&&e[t].push(...r)}else if("enter"===t||"exit"===t){const r=n[t];r&&Object.assign(e[t],r)}}function Ge(e,n){throw e?new Error("Cannot close `"+e.type+"` ("+qe({start:e.start,end:e.end})+"): a different token (`"+n.type+"`, "+qe({start:n.start,end:n.end})+") is open"):new Error("Cannot close document, a token (`"+n.type+"`, "+qe({start:n.start,end:n.end})+") is still open")}var Je=t(60513);function Ke(e){const n=function(e){const n=e.replace(/\n{2,}/g,"\n");return(0,Je.T)(n)}(e),{children:t}=$e(n),r=[[]];let i=0;function u(e,n="normal"){if("text"===e.type){e.value.split("\n").forEach(((e,t)=>{0!==t&&(i++,r.push([])),e.split(" ").forEach((e=>{e&&r[i].push({content:e,type:n})}))}))}else"strong"!==e.type&&"emphasis"!==e.type||e.children.forEach((n=>{u(n,e.type)}))}return t.forEach((e=>{"paragraph"===e.type&&e.children.forEach((e=>{u(e)}))})),r}function Xe(e,n){var t;return en(e,[],(t=n.content,Intl.Segmenter?[...(new Intl.Segmenter).segment(t)].map((e=>e.segment)):[...t]),n.type)}function en(e,n,t,r){if(0===t.length)return[{content:n.join(""),type:r},{content:"",type:r}];const[i,...u]=t,o=[...n,i];return e([{content:o.join(""),type:r}])?en(e,o,u,r):(0===n.length&&i&&(n.push(i),t.shift()),[{content:n.join(""),type:r},{content:t.join(""),type:r}])}function nn(e,n){if(e.some((({content:e})=>e.includes("\n"))))throw new Error("splitLineToFitWidth does not support newlines in the line");return tn(e,n)}function tn(e,n,t=[],r=[]){if(0===e.length)return r.length>0&&t.push(r),t.length>0?t:[];let i="";" "===e[0].content&&(i=" ",e.shift());const u=e.shift()??{content:" ",type:"normal"},o=[...r];if(""!==i&&o.push({content:i,type:"normal"}),o.push(u),n(o))return tn(e,n,t,o);if(r.length>0)t.push(r),e.unshift(u);else if(u.content){const[r,i]=Xe(n,u);t.push([r]),i.content&&e.unshift(i)}return tn(e,n,t)}function rn(e,n,t){return e.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",n*t-.1+"em").attr("dy",t+"em")}function un(e,n,t){const r=e.append("text"),i=rn(r,1,n);cn(i,t);const u=i.node().getComputedTextLength();return r.remove(),u}function on(e,n,t){var r;const i=e.append("text"),u=rn(i,1,n);cn(u,[{content:t,type:"normal"}]);const o=null==(r=u.node())?void 0:r.getBoundingClientRect();return o&&i.remove(),o}function cn(e,n){e.text(""),n.forEach(((n,t)=>{const r=e.append("tspan").attr("font-style","emphasis"===n.type?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight","strong"===n.type?"bold":"normal");0===t?r.text(n.content):r.text(" "+n.content)}))}const sn=(e,n="",{style:t="",isTitle:r=!1,classes:u="",useHtmlLabels:o=!0,isNode:c=!0,width:s=200,addSvgBackground:l=!1}={})=>{if(i.l.info("createText",n,t,r,u,o,c,l),o){const r=function(e){const{children:n}=$e(e);return n.map((function e(n){return"text"===n.type?n.value.replace(/\n/g,"<br/>"):"strong"===n.type?`<strong>${n.children.map(e).join("")}</strong>`:"emphasis"===n.type?`<em>${n.children.map(e).join("")}</em>`:"paragraph"===n.type?`<p>${n.children.map(e).join("")}</p>`:`Unsupported markdown: ${n.type}`})).join("")}(n),o=function(e,n,t,r,i=!1){const u=e.append("foreignObject"),o=u.append("xhtml:div"),c=n.label,s=n.isNode?"nodeLabel":"edgeLabel";var l,a;o.html(`\n <span class="${s} ${r}" `+(n.labelStyle?'style="'+n.labelStyle+'"':"")+">"+c+"</span>"),l=o,(a=n.labelStyle)&&l.attr("style",a),o.style("display","table-cell"),o.style("white-space","nowrap"),o.style("max-width",t+"px"),o.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&o.attr("class","labelBkg");let f=o.node().getBoundingClientRect();return f.width===t&&(o.style("display","table"),o.style("white-space","break-spaces"),o.style("width",t+"px"),f=o.node().getBoundingClientRect()),u.style("width",f.width),u.style("height",f.height),u.node()}(e,{isNode:c,label:(0,i.M)(r).replace(/fa[blrs]?:fa-[\w-]+/g,(e=>`<i class='${e.replace(":"," ")}'></i>`)),labelStyle:t.replace("fill:","color:")},s,u,l);return o}{const t=function(e,n,t,r=!1){const i=n.append("g"),u=i.insert("rect").attr("class","background"),o=i.append("text").attr("y","-10.1");let c=0;for(const s of t){const n=n=>un(i,1.1,n)<=e,t=n(s)?[s]:nn(s,n);for(const e of t)cn(rn(o,c,1.1),e),c++}if(r){const e=o.node().getBBox(),n=2;return u.attr("x",-n).attr("y",-n).attr("width",e.width+2*n).attr("height",e.height+2*n),i.node()}return o.node()}(s,e,Ke(n),l);return t}}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/843.d7e56aae.js b/pr-preview/pr-1594/assets/js/843.d7e56aae.js deleted file mode 100644 index 225e6b50ce..0000000000 --- a/pr-preview/pr-1594/assets/js/843.d7e56aae.js +++ /dev/null @@ -1,540 +0,0 @@ -"use strict"; -exports.id = 843; -exports.ids = [843]; -exports.modules = { - -/***/ 22843: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16750); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(26312); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99418); - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [6, 9, 10]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "info": 4, "document": 5, "EOF": 6, "line": 7, "statement": 8, "NL": 9, "showInfo": 10, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 4: "info", 6: "EOF", 9: "NL", 10: "showInfo" }, - productions_: [0, [3, 3], [5, 0], [5, 2], [7, 1], [7, 1], [8, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - $$.length - 1; - switch (yystate) { - case 1: - return yy; - case 4: - break; - case 6: - yy.setInfo(true); - break; - } - }, - table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: 6, 9: [1, 7], 10: [1, 8] }, { 1: [2, 1] }, o($V0, [2, 3]), o($V0, [2, 4]), o($V0, [2, 5]), o($V0, [2, 6])], - defaultActions: { 4: [2, 1] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - return 4; - case 1: - return 9; - case 2: - return "space"; - case 3: - return 10; - case 4: - return 6; - case 5: - return "TXT"; - } - }, - rules: [/^(?:info\b)/i, /^(?:[\s\n\r]+)/i, /^(?:[\s]+)/i, /^(?:showInfo\b)/i, /^(?:$)/i, /^(?:.)/i], - conditions: { "INITIAL": { "rules": [0, 1, 2, 3, 4, 5], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -const DEFAULT_INFO_DB = { - info: false -}; -let info = DEFAULT_INFO_DB.info; -const setInfo = (toggle) => { - info = toggle; -}; -const getInfo = () => info; -const clear = () => { - info = DEFAULT_INFO_DB.info; -}; -const db = { - clear, - setInfo, - getInfo -}; -const draw = (text, id, version) => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("rendering info diagram\n" + text); - const svg = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.A)(id); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.i)(svg, 100, 400, true); - const group = svg.append("g"); - group.append("text").attr("x", 100).attr("y", 40).attr("class", "version").attr("font-size", 32).style("text-anchor", "middle").text(`v${version}`); -}; -const renderer = { draw }; -const diagram = { - parser: parser$1, - db, - renderer -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8431750a.e60b9ff0.js b/pr-preview/pr-1594/assets/js/8431750a.e60b9ff0.js deleted file mode 100644 index 2f7409ca80..0000000000 --- a/pr-preview/pr-1594/assets/js/8431750a.e60b9ff0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[50],{53697:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var r=t(74848),s=t(28453);const i={},o="Google Analytics 4",c={id:"reference/Connectors/capture-connectors/google-analytics-4",title:"Google Analytics 4",description:"This connector captures data from Google Analytics 4 properties into Flow collections via the",source:"@site/docs/reference/Connectors/capture-connectors/google-analytics-4.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/google-analytics-4",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/google-analytics-4.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Analytics UA",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics"},next:{title:"Google Drive",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive"}},l={},a=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Authenticating manually with a service account key",id:"authenticating-manually-with-a-service-account-key",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Custom reports",id:"custom-reports",level:3},{value:"Sample",id:"sample",level:3},{value:"Performance considerations",id:"performance-considerations",level:2},{value:"Data sampling",id:"data-sampling",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"google-analytics-4",children:"Google Analytics 4"}),"\n",(0,r.jsxs)(n.p,{children:["This connector captures data from Google Analytics 4 properties into Flow collections via the\n",(0,r.jsx)(n.a,{href:"https://developers.google.com/analytics/devguides/reporting/data/v1",children:"Google Analytics Data API"}),"."]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsx)(n.p,{children:"This connector supports Google Analytics 4, not Universal Analytics."}),(0,r.jsxs)(n.p,{children:["Universal Analytics is supported by a ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics",children:"separate connector"}),"."]})]}),"\n",(0,r.jsxs)(n.p,{children:["It\u2019s available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://ghcr.io/estuary/source-google-analytics-data-api:dev",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-google-analytics-data-api:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/google-analytics-v4/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,r.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,r.jsx)(n.p,{children:"The following data resources are supported:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Daily active users"}),"\n",(0,r.jsx)(n.li,{children:"Devices"}),"\n",(0,r.jsx)(n.li,{children:"Four-weekly active users"}),"\n",(0,r.jsx)(n.li,{children:"Locations"}),"\n",(0,r.jsx)(n.li,{children:"Pages"}),"\n",(0,r.jsx)(n.li,{children:"Traffic sources"}),"\n",(0,r.jsx)(n.li,{children:"Website overview"}),"\n",(0,r.jsx)(n.li,{children:"Weekly active users"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Each is ",(0,r.jsx)(n.a,{href:"https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport",children:"fetched as a report"})," and mapped to a Flow collection through a separate binding."]}),"\n",(0,r.jsxs)(n.p,{children:["You can also capture ",(0,r.jsx)(n.a,{href:"#custom-reports",children:"custom reports"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["The Google Analytics Data API ",(0,r.jsx)(n.a,{href:"https://support.google.com/googleapi/answer/6158841?hl=en",children:"enabled"})," on your Google ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/storage/docs/projects",children:"project"})," with which your Analytics property is associated.\n(Unless you actively develop with Google Cloud, you'll likely just have one option)."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Your Google Analytics 4 ",(0,r.jsx)(n.a,{href:"https://developers.google.com/analytics/devguides/reporting/data/v1/property-id#what_is_my_property_id",children:"property ID"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"There are two ways to authenticate this connector with Google:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Directly with Google using OAuth"})," through the Flow web app. You'll only need your username and password."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Manually"}),", by generating a service account key. Using this method, there are more prerequisites."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"authenticating-manually-with-a-service-account-key",children:"Authenticating manually with a service account key"}),"\n",(0,r.jsx)(n.p,{children:"In addition to the above prerequisites, you'll need a Google service account with:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"A JSON key generated."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Access to the Google Analytics 4 property."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"To set this up:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Create a ",(0,r.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2/service-account#creatinganaccount",children:"service account and generate a JSON key"}),".\nDuring setup, grant the account the ",(0,r.jsx)(n.strong,{children:"Viewer"})," role on your project.\nYou'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://support.google.com/analytics/answer/9305788#zippy=%2Cin-this-article",children:"Add the service account"})," to the Google Analytics property."]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Grant the account ",(0,r.jsx)(n.strong,{children:"Viewer"})," permissions."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing a specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Analytics 4 source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsx)(n.p,{children:"The following properties reflect the manual authentication method. If you authenticate directly with Google in the Flow web app, some of these properties aren't required."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials"})}),(0,r.jsx)(n.td,{children:"Credentials"}),(0,r.jsx)(n.td,{children:"Credentials for the service"}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/auth_type"})}),(0,r.jsx)(n.td,{children:"Authentication Method"}),(0,r.jsxs)(n.td,{children:["Set to ",(0,r.jsx)(n.code,{children:"Service"})," for manual authentication."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/credentials_json"})}),(0,r.jsx)(n.td,{children:"Service Account Credentials"}),(0,r.jsx)(n.td,{children:"Contents of the JSON key file generated during setup."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/custom_reports"})}),(0,r.jsx)(n.td,{children:"Custom Reports (Optional)"}),(0,r.jsxs)(n.td,{children:["A JSON array describing the custom reports you want to sync from Google Analytics. ",(0,r.jsx)(n.a,{href:"#custom-reports",children:"Learn more about custom reports"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/date_ranges_start_date"})})}),(0,r.jsx)(n.td,{children:"Date Range Start Date"}),(0,r.jsxs)(n.td,{children:["The start date. One of the values ",(0,r.jsx)(n.code,{children:"<N>daysago"}),", ",(0,r.jsx)(n.code,{children:"yesterday"}),", ",(0,r.jsx)(n.code,{children:"today"})," or in the format ",(0,r.jsx)(n.code,{children:"YYYY-MM-DD"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/property_id"})})}),(0,r.jsx)(n.td,{children:"Property ID"}),(0,r.jsx)(n.td,{children:"A Google Analytics GA4 property identifier whose events are tracked."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/window_in_days"})}),(0,r.jsx)(n.td,{children:"Data request time increment in days (Optional)"}),(0,r.jsxs)(n.td,{children:["The time increment used by the connector when requesting data from the Google Analytics API. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364. See ",(0,r.jsx)(n.a,{href:"#data-sampling",children:"data sampling"})," for details."]}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"1"})})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Data resource from Google Analytics."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync Mode"}),(0,r.jsxs)(n.td,{children:["Connection method. Always set to ",(0,r.jsx)(n.code,{children:"incremental"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"custom-reports",children:"Custom reports"}),"\n",(0,r.jsxs)(n.p,{children:["You can include data beyond the ",(0,r.jsx)(n.a,{href:"#supported-data-resources",children:"default data resources"})," with Custom Reports.\nThese replicate the functionality of ",(0,r.jsx)(n.a,{href:"https://support.google.com/analytics/answer/10445879?hl=en",children:"Custom Reports"})," in the Google Analytics Web console."]}),"\n",(0,r.jsx)(n.p,{children:"Fill out the Custom Reports property with a JSON array as a string with the following schema:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'[{"name": "<report-name>", "dimensions": ["<dimension-name>", ...], "metrics": ["<metric-name>", ...]}]\n'})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://support.google.com/analytics/answer/9304353#zippy=%2Cin-this-article",children:"Segments"})," and ",(0,r.jsx)(n.a,{href:"https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/FilterExpression#Filter",children:"filters"})," are also supported.\nWhen using segments, you must include the ",(0,r.jsx)(n.code,{children:"ga:segment"})," dimension:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'[{"name": "<report-name>", "dimensions": ["ga:segment", "<other-dimension-name>", ...], "metrics": ["<metric-name>", ...], "segments": "<segment-id>", "filter": "<filter-expression>"}]\n'})}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.p,{children:"This sample reflects the manual authentication method."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-google-analytics-data-api:dev\n config:\n credentials:\n auth_type: Service\n credentials_json: <secret>\n date_ranges_start_date: 2023-01-01\n property_id: 000000000\n window_in_days: 1\n\n bindings:\n - resource:\n stream: daily_active_users\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: devices\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: four_weekly_active_users\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: locations\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: pages\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: traffic_sources\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: website_overview\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: weekly_active_users\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"performance-considerations",children:"Performance considerations"}),"\n",(0,r.jsx)(n.h3,{id:"data-sampling",children:"Data sampling"}),"\n",(0,r.jsxs)(n.p,{children:["The Google Analytics Data API enforces compute thresholds for ad-hoc queries and reports.\nIf a threshold is exceeded, the API will apply sampling to limit the number of sessions analyzed for the specified time range.\nThese thresholds can be found ",(0,r.jsx)(n.a,{href:"https://support.google.com/analytics/answer/2637192?hl=en&ref_topic=2601030&visit_id=637868645346124317-2833523666&rd=1#thresholds&zippy=%2Cin-this-article",children:"here"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If your account is on the Analytics 360 tier, you're less likely to run into these limitations.\nFor Analytics Standard accounts, you can avoid sampling by keeping the ",(0,r.jsx)(n.code,{children:"window_in_days"})," parameter set to its default value, ",(0,r.jsx)(n.code,{children:"1"}),".\nThis makes it less likely that you will exceed the threshold."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>c});var r=t(96540);const s={},i=r.createContext(s);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/845ce2f5.a0d8342a.js b/pr-preview/pr-1594/assets/js/845ce2f5.a0d8342a.js deleted file mode 100644 index e059198884..0000000000 --- a/pr-preview/pr-1594/assets/js/845ce2f5.a0d8342a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9917],{60555:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var s=r(74848),t=r(28453);const i={sidebar_position:3},a="Microsoft SQL Server",l={id:"reference/Connectors/capture-connectors/SQLServer/sqlserver",title:"Microsoft SQL Server",description:"This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/SQLServer/sqlserver.md",sourceDirName:"reference/Connectors/capture-connectors/SQLServer",slug:"/reference/Connectors/capture-connectors/SQLServer/",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/SQLServer/sqlserver.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Marketo",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo"},next:{title:"Amazon RDS for SQL Server",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver"}},o={},c=[{value:"Supported versions and platforms",id:"supported-versions-and-platforms",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Self-hosted SQL Server",id:"self-hosted-sql-server",level:3},{value:"Azure SQL Database",id:"azure-sql-database",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Specifying Flow collection keys",id:"specifying-flow-collection-keys",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"microsoft-sql-server",children:"Microsoft SQL Server"}),"\n",(0,s.jsx)(n.p,{children:"This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections."}),"\n",(0,s.jsxs)(n.p,{children:["It\u2019s available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/source-sqlserver:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/source-sqlserver:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(n.h2,{id:"supported-versions-and-platforms",children:"Supported versions and platforms"}),"\n",(0,s.jsx)(n.p,{children:"This connector will work on both hosted deployments and all major cloud providers. It is designed for databases using any version of SQL Server which has CDC support, and is regularly tested against SQL Server 2017 and up."}),"\n",(0,s.jsx)(n.p,{children:"Setup instructions are provided for the following platforms:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#self-hosted-sql-server",children:"Self-hosted SQL Server"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#azure-sql-database",children:"Azure SQL Database"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./amazon-rds-sqlserver/",children:"Amazon RDS for SQL Server"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./google-cloud-sql-sqlserver/",children:"Google Cloud SQL for SQL Server"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"To capture change events from SQL Server tables using this connector, you need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["For each table to be captured, a primary key should be specified in the database.\nIf a table doesn't have a primary key, you must manually specify a key in the associated Flow collection definition while creating the capture.\n",(0,s.jsx)(n.a,{href:"#specifying-flow-collection-keys",children:"See detailed steps"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/enable-and-disable-change-data-capture-sql-server?view=sql-server-ver16",children:"CDC enabled"}),"\non the database and the individual tables to be captured.\n(This creates ",(0,s.jsx)(n.em,{children:"change tables"})," in the database, from which the connector reads.)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.strong,{children:"watermarks table"}),". The watermarks table is a small \u201cscratch space\u201d to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A user role with:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"SELECT"})," permissions on the CDC schema and the schemas that contain tables to be captured."]}),"\n",(0,s.jsx)(n.li,{children:"Access to the change tables created as part of the SQL Server CDC process."}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"SELECT"}),", ",(0,s.jsx)(n.code,{children:"INSERT"}),", and ",(0,s.jsx)(n.code,{children:"UPDATE"})," permissions on the watermarks table"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,s.jsx)(n.p,{children:"To meet these requirements, follow the steps for your hosting type."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#self-hosted-sql-server",children:"Self-hosted SQL Server"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#azure-sql-database",children:"Azure SQL Database"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"./amazon-rds-sqlserver/",children:"Amazon RDS for SQL Server"}),")"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./google-cloud-sql-sqlserver/",children:"Google Cloud SQL for SQL Server"})}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"self-hosted-sql-server",children:"Self-hosted SQL Server"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Connect to the server and issue the following commands:"}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",children:"USE <database>;\n-- Enable CDC for the database.\nEXEC sys.sp_cdc_enable_db;\n-- Create user and password for use with the connector.\nCREATE LOGIN flow_capture WITH PASSWORD = 'secret';\nCREATE USER flow_capture FOR LOGIN flow_capture;\n-- Grant the user permissions on the CDC schema and schemas with data.\n-- This assumes all tables to be captured are in the default schema, `dbo`.\n-- Add similar queries for any other schemas that contain tables you want to capture.\nGRANT SELECT ON SCHEMA :: dbo TO flow_capture;\nGRANT SELECT ON SCHEMA :: cdc TO flow_capture;\n-- Create the watermarks table and grant permissions.\nCREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT);\nGRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture;\n-- Enable CDC on tables. The below query enables CDC the watermarks table ONLY.\n-- You should add similar query for all other tables you intend to capture.\nEXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture';\n"})}),"\n",(0,s.jsxs)(n.ol,{start:"2",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Allow secure connection to Estuary Flow from your hosting environment. Either:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Set up an ",(0,s.jsx)(n.a,{href:"/guides/connect-network/",children:"SSH server for tunneling"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["When you fill out the ",(0,s.jsx)(n.a,{href:"#endpoint",children:"endpoint configuration"}),",\ninclude the additional ",(0,s.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"}),"\nfor additional details and a sample."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Allowlist the Estuary IP addresses"})," in your firewall rules."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"azure-sql-database",children:"Azure SQL Database"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Create a new ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/azure-sql/database/firewall-configure?view=azuresql#use-the-azure-portal-to-manage-server-level-ip-firewall-rules",children:"firewall rule"})," that grants access to the ",(0,s.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Follow the guide to ",(0,s.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,s.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,s.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,s.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In your SQL client, connect to your instance as the default ",(0,s.jsx)(n.code,{children:"sqlserver"})," user and issue the following commands."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",children:"USE <database>;\n-- Enable CDC for the database.\nEXEC sys.sp_cdc_enable_db;\n-- Create user and password for use with the connector.\nCREATE LOGIN flow_capture WITH PASSWORD = 'secret';\nCREATE USER flow_capture FOR LOGIN flow_capture;\n-- Grant the user permissions on the CDC schema and schemas with data.\n-- This assumes all tables to be captured are in the default schema, `dbo`.\n-- Add similar queries for any other schemas that contain tables you want to capture.\nGRANT SELECT ON SCHEMA :: dbo TO flow_capture;\nGRANT SELECT ON SCHEMA :: cdc TO flow_capture;\n-- Create the watermarks table and grant permissions.\nCREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT);\nGRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture;\n-- Enable CDC on tables. The below query enables CDC the watermarks table ONLY.\n-- You should add similar query for all other tables you intend to capture.\nEXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture';\n"})}),"\n",(0,s.jsxs)(n.ol,{start:"3",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Note the following important items for configuration:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Find the instance's host under Server Name. The port is always ",(0,s.jsx)(n.code,{children:"1433"}),". Together, you'll use the host",":port"," as the ",(0,s.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the SQL Server source connector."]}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/address"})})}),(0,s.jsx)(n.td,{children:"Server Address"}),(0,s.jsxs)(n.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/database"})})}),(0,s.jsx)(n.td,{children:"Database"}),(0,s.jsx)(n.td,{children:"Logical database name to capture from."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/user"})})}),(0,s.jsx)(n.td,{children:"User"}),(0,s.jsx)(n.td,{children:"The database user to authenticate as."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsxs)(n.td,{children:["Required, ",(0,s.jsx)(n.code,{children:'"flow_capture"'})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/password"})})}),(0,s.jsx)(n.td,{children:"Password"}),(0,s.jsx)(n.td,{children:"Password for the specified database user."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced"})}),(0,s.jsx)(n.td,{children:"Advanced Options"}),(0,s.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,s.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,s.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,s.jsx)(n.td,{children:"integer"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"4096"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/skip_backfills"})}),(0,s.jsx)(n.td,{children:"Skip Backfills"}),(0,s.jsx)(n.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/watermarksTable"})}),(0,s.jsx)(n.td,{children:"Watermarks Table"}),(0,s.jsx)(n.td,{children:"The name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:'"dbo.flow_watermarks"'})})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/namespace"})})}),(0,s.jsx)(n.td,{children:"Namespace"}),(0,s.jsxs)(n.td,{children:["The ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/sql/relational-databases/databases/databases?view=sql-server-ver16#basic-information-about-databases",children:"namespace/schema"})," of the table."]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/stream"})})}),(0,s.jsx)(n.td,{children:"Stream"}),(0,s.jsx)(n.td,{children:"Table name."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/primary_key"})}),(0,s.jsx)(n.td,{children:"Primary Key Columns"}),(0,s.jsx)(n.td,{children:"array"}),(0,s.jsx)(n.td,{children:"The columns which together form the primary key of the table."}),(0,s.jsx)(n.td,{})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/source-sqlserver:dev"\n config:\n address: "<host>:1433"\n database: "my_db"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n stream: ${TABLE_NAME}\n namespace: dbo\n primary_key: ["id"]\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,s.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,s.jsx)(n.h2,{id:"specifying-flow-collection-keys",children:"Specifying Flow collection keys"}),"\n",(0,s.jsxs)(n.p,{children:["Every Flow collection must have a ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#keys",children:"key"}),".\nAs long as your SQL Server tables have a primary key specified, the connector will set the\ncorresponding collection's key accordingly."]}),"\n",(0,s.jsxs)(n.p,{children:["In cases where a SQL Server table you want to capture doesn't have a primary key,\nyou can manually add it to the collection definition during the ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-capture",children:"capture creation workflow"}),"."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["After you input the endpoint configuration and click ",(0,s.jsx)(n.strong,{children:"Next"}),",\nthe tables in your database have been mapped to Flow collections.\nClick each collection's ",(0,s.jsx)(n.strong,{children:"Specification"})," tab and identify a collection where ",(0,s.jsx)(n.code,{children:'"key": [ ],'})," is empty."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click inside the empty key value in the editor and input the name of column in the table to use as the key, formatted as a JSON pointer. For example ",(0,s.jsx)(n.code,{children:'"key": ["/foo"],'})]}),"\n",(0,s.jsxs)(n.p,{children:["Make sure the key field is required, not nullable, and of an ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#schema-restrictions",children:"allowed type"}),".\nMake any other necessary changes to the ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#specification",children:"collection specification"})," to accommodate this."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Repeat with other missing collection keys, if necessary."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Save and publish the capture as usual."}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>a,x:()=>l});var s=r(96540);const t={},i=s.createContext(t);function a(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8478.e385cd80.js b/pr-preview/pr-1594/assets/js/8478.e385cd80.js deleted file mode 100644 index b8dffb50e4..0000000000 --- a/pr-preview/pr-1594/assets/js/8478.e385cd80.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8478],{8478:(t,i,e)=>{e.d(i,{diagram:()=>d});var a=e(99702),n=e(26312),r=(e(74353),e(16750),e(42838),function(){var t=function(t,i,e,a){for(e=e||{},a=t.length;a--;e[t[a]]=i);return e},i=[1,3],e=[1,4],a=[1,5],n=[1,6],r=[1,7],s=[1,5,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],l=[1,5,6,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],o=[32,33,34],h=[2,7],c=[1,13],d=[1,17],u=[1,18],x=[1,19],g=[1,20],f=[1,21],y=[1,22],p=[1,23],q=[1,24],T=[1,25],m=[1,26],A=[1,27],_=[1,30],b=[1,31],S=[1,32],k=[1,33],F=[1,34],P=[1,35],v=[1,36],L=[1,37],C=[1,38],z=[1,39],B=[1,40],E=[1,41],D=[1,42],I=[1,57],w=[1,58],R=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],W={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,QUADRANT:6,document:7,line:8,statement:9,axisDetails:10,quadrantDetails:11,points:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,text:21,point_start:22,point_x:23,point_y:24,"X-AXIS":25,"AXIS-TEXT-DELIMITER":26,"Y-AXIS":27,QUADRANT_1:28,QUADRANT_2:29,QUADRANT_3:30,QUADRANT_4:31,NEWLINE:32,SEMI:33,EOF:34,alphaNumToken:35,textNoTagsToken:36,STR:37,MD_STR:38,alphaNum:39,PUNCTUATION:40,AMP:41,NUM:42,ALPHA:43,COMMA:44,PLUS:45,EQUALS:46,MULT:47,DOT:48,BRKT:49,UNDERSCORE:50,MINUS:51,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",6:"QUADRANT",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",22:"point_start",23:"point_x",24:"point_y",25:"X-AXIS",26:"AXIS-TEXT-DELIMITER",27:"Y-AXIS",28:"QUADRANT_1",29:"QUADRANT_2",30:"QUADRANT_3",31:"QUADRANT_4",32:"NEWLINE",33:"SEMI",34:"EOF",37:"STR",38:"MD_STR",40:"PUNCTUATION",41:"AMP",42:"NUM",43:"ALPHA",44:"COMMA",45:"PLUS",46:"EQUALS",47:"MULT",48:"DOT",49:"BRKT",50:"UNDERSCORE",51:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,1],[9,1],[9,1],[9,2],[9,2],[9,2],[9,1],[9,1],[12,4],[10,4],[10,3],[10,2],[10,4],[10,3],[10,2],[11,2],[11,2],[11,2],[11,2],[4,1],[4,1],[4,1],[21,1],[21,2],[21,1],[21,1],[39,1],[39,2],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[36,1],[36,1],[36,1]],performAction:function(t,i,e,a,n,r,s){var l=r.length-1;switch(n){case 12:this.$=r[l].trim(),a.setDiagramTitle(this.$);break;case 13:this.$=r[l].trim(),a.setAccTitle(this.$);break;case 14:case 15:this.$=r[l].trim(),a.setAccDescription(this.$);break;case 16:a.addSection(r[l].substr(8)),this.$=r[l].substr(8);break;case 17:a.addPoint(r[l-3],r[l-1],r[l]);break;case 18:a.setXAxisLeftText(r[l-2]),a.setXAxisRightText(r[l]);break;case 19:r[l-1].text+=" \u27f6 ",a.setXAxisLeftText(r[l-1]);break;case 20:a.setXAxisLeftText(r[l]);break;case 21:a.setYAxisBottomText(r[l-2]),a.setYAxisTopText(r[l]);break;case 22:r[l-1].text+=" \u27f6 ",a.setYAxisBottomText(r[l-1]);break;case 23:a.setYAxisBottomText(r[l]);break;case 24:a.setQuadrant1Text(r[l]);break;case 25:a.setQuadrant2Text(r[l]);break;case 26:a.setQuadrant3Text(r[l]);break;case 27:a.setQuadrant4Text(r[l]);break;case 31:case 33:this.$={text:r[l],type:"text"};break;case 32:this.$={text:r[l-1].text+""+r[l],type:r[l-1].type};break;case 34:this.$={text:r[l],type:"markdown"};break;case 35:this.$=r[l];break;case 36:this.$=r[l-1]+""+r[l]}},table:[{3:1,4:2,5:i,6:e,32:a,33:n,34:r},{1:[3]},{3:8,4:2,5:i,6:e,32:a,33:n,34:r},{3:9,4:2,5:i,6:e,32:a,33:n,34:r},t(s,[2,4],{7:10}),t(l,[2,28]),t(l,[2,29]),t(l,[2,30]),{1:[2,1]},{1:[2,2]},t(o,h,{8:11,9:12,10:14,11:15,12:16,21:28,35:29,1:[2,3],5:c,13:d,15:u,17:x,19:g,20:f,25:y,27:p,28:q,29:T,30:m,31:A,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D}),t(s,[2,5]),{4:43,32:a,33:n,34:r},t(o,h,{10:14,11:15,12:16,21:28,35:29,9:44,5:c,13:d,15:u,17:x,19:g,20:f,25:y,27:p,28:q,29:T,30:m,31:A,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D}),t(o,[2,9]),t(o,[2,10]),t(o,[2,11]),{14:[1,45]},{16:[1,46]},{18:[1,47]},t(o,[2,15]),t(o,[2,16]),{21:48,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D},{21:49,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D},{21:50,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D},{21:51,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D},{21:52,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D},{21:53,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D},{5:I,22:[1,54],35:56,36:55,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D,51:w},t(R,[2,31]),t(R,[2,33]),t(R,[2,34]),t(R,[2,37]),t(R,[2,38]),t(R,[2,39]),t(R,[2,40]),t(R,[2,41]),t(R,[2,42]),t(R,[2,43]),t(R,[2,44]),t(R,[2,45]),t(R,[2,46]),t(R,[2,47]),t(s,[2,6]),t(o,[2,8]),t(o,[2,12]),t(o,[2,13]),t(o,[2,14]),t(o,[2,20],{36:55,35:56,5:I,26:[1,59],40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D,51:w}),t(o,[2,23],{36:55,35:56,5:I,26:[1,60],40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D,51:w}),t(o,[2,24],{36:55,35:56,5:I,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D,51:w}),t(o,[2,25],{36:55,35:56,5:I,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D,51:w}),t(o,[2,26],{36:55,35:56,5:I,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D,51:w}),t(o,[2,27],{36:55,35:56,5:I,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D,51:w}),{23:[1,61]},t(R,[2,32]),t(R,[2,48]),t(R,[2,49]),t(R,[2,50]),t(o,[2,19],{35:29,21:62,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D}),t(o,[2,22],{35:29,21:63,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D}),{24:[1,64]},t(o,[2,18],{36:55,35:56,5:I,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D,51:w}),t(o,[2,21],{36:55,35:56,5:I,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:B,49:E,50:D,51:w}),t(o,[2,17])],defaultActions:{8:[2,1],9:[2,2]},parseError:function(t,i){if(!i.recoverable){var e=new Error(t);throw e.hash=i,e}this.trace(t)},parse:function(t){var i=this,e=[0],a=[],n=[null],r=[],s=this.table,l="",o=0,h=0,c=r.slice.call(arguments,1),d=Object.create(this.lexer),u={yy:{}};for(var x in this.yy)Object.prototype.hasOwnProperty.call(this.yy,x)&&(u.yy[x]=this.yy[x]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var g=d.yylloc;r.push(g);var f=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,p,q,T,m,A,_,b,S,k={};;){if(p=e[e.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null==y&&(S=void 0,"number"!=typeof(S=a.pop()||d.lex()||1)&&(S instanceof Array&&(S=(a=S).pop()),S=i.symbols_[S]||S),y=S),q=s[p]&&s[p][y]),void 0===q||!q.length||!q[0]){var F="";for(m in b=[],s[p])this.terminals_[m]&&m>2&&b.push("'"+this.terminals_[m]+"'");F=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+b.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==y?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(F,{text:d.match,token:this.terminals_[y]||y,line:d.yylineno,loc:g,expected:b})}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+y);switch(q[0]){case 1:e.push(y),n.push(d.yytext),r.push(d.yylloc),e.push(q[1]),y=null,h=d.yyleng,l=d.yytext,o=d.yylineno,g=d.yylloc;break;case 2:if(A=this.productions_[q[1]][1],k.$=n[n.length-A],k._$={first_line:r[r.length-(A||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(A||1)].first_column,last_column:r[r.length-1].last_column},f&&(k._$.range=[r[r.length-(A||1)].range[0],r[r.length-1].range[1]]),void 0!==(T=this.performAction.apply(k,[l,h,o,u.yy,q[1],n,r].concat(c))))return T;A&&(e=e.slice(0,-1*A*2),n=n.slice(0,-1*A),r=r.slice(0,-1*A)),e.push(this.productions_[q[1]][0]),n.push(k.$),r.push(k._$),_=s[e[e.length-2]][e[e.length-1]],e.push(_);break;case 3:return!0}}return!0}},N={EOF:1,parseError:function(t,i){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,e=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var a=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),e.length-1&&(this.yylineno-=e.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:e?(e.length===a.length?this.yylloc.first_column:0)+a[a.length-e.length].length-e[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+i+"^"},test_match:function(t,i){var e,a,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(a=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=a.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:a?a[a.length-1].length-a[a.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,e,a;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if((e=this._input.match(this.rules[n[r]]))&&(!i||e[0].length>i[0].length)){if(i=e,a=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,n[r])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,n[a]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,i,e,a){switch(e){case 0:case 1:case 3:break;case 2:return 32;case 4:return this.begin("title"),13;case 5:return this.popState(),"title_value";case 6:return this.begin("acc_title"),15;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),17;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 22:case 24:case 28:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 25;case 14:return 27;case 15:return 26;case 16:return 28;case 17:return 29;case 18:return 30;case 19:return 31;case 20:this.begin("md_string");break;case 21:return"MD_STR";case 23:this.begin("string");break;case 25:return"STR";case 26:return this.begin("point_start"),22;case 27:return this.begin("point_x"),23;case 29:this.popState(),this.begin("point_y");break;case 30:return this.popState(),24;case 31:return 6;case 32:return 43;case 33:return"COLON";case 34:return 45;case 35:return 44;case 36:case 37:return 46;case 38:return 47;case 39:return 49;case 40:return 50;case 41:return 48;case 42:return 41;case 43:return 51;case 44:return 42;case 45:return 5;case 46:return 33;case 47:return 40;case 48:return 34}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{point_y:{rules:[30],inclusive:!1},point_x:{rules:[29],inclusive:!1},point_start:{rules:[27,28],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[21,22],inclusive:!1},string:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,23,26,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};function U(){this.yy={}}return W.lexer=N,U.prototype=W,W.Parser=U,new U}());r.parser=r;const s=r,l=(0,a.E)();const o=(0,a.c)();function h(t){return(0,a.d)(t.trim(),o)}const c=new class{constructor(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){var t,i,e,n,r,s,l,o,h,c,d,u,x,g,f,y,p,q;return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:(null==(t=a.B.quadrantChart)?void 0:t.chartWidth)||500,chartWidth:(null==(i=a.B.quadrantChart)?void 0:i.chartHeight)||500,titlePadding:(null==(e=a.B.quadrantChart)?void 0:e.titlePadding)||10,titleFontSize:(null==(n=a.B.quadrantChart)?void 0:n.titleFontSize)||20,quadrantPadding:(null==(r=a.B.quadrantChart)?void 0:r.quadrantPadding)||5,xAxisLabelPadding:(null==(s=a.B.quadrantChart)?void 0:s.xAxisLabelPadding)||5,yAxisLabelPadding:(null==(l=a.B.quadrantChart)?void 0:l.yAxisLabelPadding)||5,xAxisLabelFontSize:(null==(o=a.B.quadrantChart)?void 0:o.xAxisLabelFontSize)||16,yAxisLabelFontSize:(null==(h=a.B.quadrantChart)?void 0:h.yAxisLabelFontSize)||16,quadrantLabelFontSize:(null==(c=a.B.quadrantChart)?void 0:c.quadrantLabelFontSize)||16,quadrantTextTopPadding:(null==(d=a.B.quadrantChart)?void 0:d.quadrantTextTopPadding)||5,pointTextPadding:(null==(u=a.B.quadrantChart)?void 0:u.pointTextPadding)||5,pointLabelFontSize:(null==(x=a.B.quadrantChart)?void 0:x.pointLabelFontSize)||12,pointRadius:(null==(g=a.B.quadrantChart)?void 0:g.pointRadius)||5,xAxisPosition:(null==(f=a.B.quadrantChart)?void 0:f.xAxisPosition)||"top",yAxisPosition:(null==(y=a.B.quadrantChart)?void 0:y.yAxisPosition)||"left",quadrantInternalBorderStrokeWidth:(null==(p=a.B.quadrantChart)?void 0:p.quadrantInternalBorderStrokeWidth)||1,quadrantExternalBorderStrokeWidth:(null==(q=a.B.quadrantChart)?void 0:q.quadrantExternalBorderStrokeWidth)||2}}getDefaultThemeConfig(){return{quadrant1Fill:l.quadrant1Fill,quadrant2Fill:l.quadrant2Fill,quadrant3Fill:l.quadrant3Fill,quadrant4Fill:l.quadrant4Fill,quadrant1TextFill:l.quadrant1TextFill,quadrant2TextFill:l.quadrant2TextFill,quadrant3TextFill:l.quadrant3TextFill,quadrant4TextFill:l.quadrant4TextFill,quadrantPointFill:l.quadrantPointFill,quadrantPointTextFill:l.quadrantPointTextFill,quadrantXAxisTextFill:l.quadrantXAxisTextFill,quadrantYAxisTextFill:l.quadrantYAxisTextFill,quadrantTitleFill:l.quadrantTitleFill,quadrantInternalBorderStrokeFill:l.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:l.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),a.l.info("clear called")}setData(t){this.data={...this.data,...t}}addPoints(t){this.data.points=[...t,...this.data.points]}setConfig(t){a.l.trace("setConfig called with: ",t),this.config={...this.config,...t}}setThemeConfig(t){a.l.trace("setThemeConfig called with: ",t),this.themeConfig={...this.themeConfig,...t}}calculateSpace(t,i,e,a){const n=2*this.config.xAxisLabelPadding+this.config.xAxisLabelFontSize,r={top:"top"===t&&i?n:0,bottom:"bottom"===t&&i?n:0},s=2*this.config.yAxisLabelPadding+this.config.yAxisLabelFontSize,l={left:"left"===this.config.yAxisPosition&&e?s:0,right:"right"===this.config.yAxisPosition&&e?s:0},o=this.config.titleFontSize+2*this.config.titlePadding,h={top:a?o:0},c=this.config.quadrantPadding+l.left,d=this.config.quadrantPadding+r.top+h.top,u=this.config.chartWidth-2*this.config.quadrantPadding-l.left-l.right,x=this.config.chartHeight-2*this.config.quadrantPadding-r.top-r.bottom-h.top;return{xAxisSpace:r,yAxisSpace:l,titleSpace:h,quadrantSpace:{quadrantLeft:c,quadrantTop:d,quadrantWidth:u,quadrantHalfWidth:u/2,quadrantHeight:x,quadrantHalfHeight:x/2}}}getAxisLabels(t,i,e,a){const{quadrantSpace:n,titleSpace:r}=a,{quadrantHalfHeight:s,quadrantHeight:l,quadrantLeft:o,quadrantHalfWidth:h,quadrantTop:c,quadrantWidth:d}=n,u=Boolean(this.data.xAxisRightText),x=Boolean(this.data.yAxisTopText),g=[];return this.data.xAxisLeftText&&i&&g.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:o+(u?h/2:0),y:"top"===t?this.config.xAxisLabelPadding+r.top:this.config.xAxisLabelPadding+c+l+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:u?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&i&&g.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:o+h+(u?h/2:0),y:"top"===t?this.config.xAxisLabelPadding+r.top:this.config.xAxisLabelPadding+c+l+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:u?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&e&&g.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:"left"===this.config.yAxisPosition?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+o+d+this.config.quadrantPadding,y:c+l-(x?s/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:x?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&e&&g.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:"left"===this.config.yAxisPosition?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+o+d+this.config.quadrantPadding,y:c+s-(x?s/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:x?"center":"left",horizontalPos:"top",rotation:-90}),g}getQuadrants(t){const{quadrantSpace:i}=t,{quadrantHalfHeight:e,quadrantLeft:a,quadrantHalfWidth:n,quadrantTop:r}=i,s=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a+n,y:r,width:n,height:e,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a,y:r,width:n,height:e,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a,y:r+e,width:n,height:e,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a+n,y:r+e,width:n,height:e,fill:this.themeConfig.quadrant4Fill}];for(const l of s)l.text.x=l.x+l.width/2,0===this.data.points.length?(l.text.y=l.y+l.height/2,l.text.horizontalPos="middle"):(l.text.y=l.y+this.config.quadrantTextTopPadding,l.text.horizontalPos="top");return s}getQuadrantPoints(t){const{quadrantSpace:i}=t,{quadrantHeight:e,quadrantLeft:a,quadrantTop:r,quadrantWidth:s}=i,l=(0,n.m4Y)().domain([0,1]).range([a,s+a]),o=(0,n.m4Y)().domain([0,1]).range([e+r,r]);return this.data.points.map((t=>({x:l(t.x),y:o(t.y),fill:this.themeConfig.quadrantPointFill,radius:this.config.pointRadius,text:{text:t.text,fill:this.themeConfig.quadrantPointTextFill,x:l(t.x),y:o(t.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0}})))}getBorders(t){const i=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:e}=t,{quadrantHalfHeight:a,quadrantHeight:n,quadrantLeft:r,quadrantHalfWidth:s,quadrantTop:l,quadrantWidth:o}=e;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r-i,y1:l,x2:r+o+i,y2:l},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r+o,y1:l+i,x2:r+o,y2:l+n-i},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r-i,y1:l+n,x2:r+o+i,y2:l+n},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r,y1:l+i,x2:r,y2:l+n-i},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:r+s,y1:l+i,x2:r+s,y2:l+n-i},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:r+i,y1:l+a,x2:r+o-i,y2:l+a}]}getTitle(t){if(t)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){const t=this.config.showXAxis&&!(!this.data.xAxisLeftText&&!this.data.xAxisRightText),i=this.config.showYAxis&&!(!this.data.yAxisTopText&&!this.data.yAxisBottomText),e=this.config.showTitle&&!!this.data.titleText,a=this.data.points.length>0?"bottom":this.config.xAxisPosition,n=this.calculateSpace(a,t,i,e);return{points:this.getQuadrantPoints(n),quadrants:this.getQuadrants(n),axisLabels:this.getAxisLabels(a,t,i,n),borderLines:this.getBorders(n),title:this.getTitle(e)}}};const d={parser:s,db:{setWidth:function(t){c.setConfig({chartWidth:t})},setHeight:function(t){c.setConfig({chartHeight:t})},setQuadrant1Text:function(t){c.setData({quadrant1Text:h(t.text)})},setQuadrant2Text:function(t){c.setData({quadrant2Text:h(t.text)})},setQuadrant3Text:function(t){c.setData({quadrant3Text:h(t.text)})},setQuadrant4Text:function(t){c.setData({quadrant4Text:h(t.text)})},setXAxisLeftText:function(t){c.setData({xAxisLeftText:h(t.text)})},setXAxisRightText:function(t){c.setData({xAxisRightText:h(t.text)})},setYAxisTopText:function(t){c.setData({yAxisTopText:h(t.text)})},setYAxisBottomText:function(t){c.setData({yAxisBottomText:h(t.text)})},addPoint:function(t,i,e){c.addPoints([{x:i,y:e,text:h(t.text)}])},getQuadrantData:function(){const t=(0,a.c)(),{themeVariables:i,quadrantChart:e}=t;return e&&c.setConfig(e),c.setThemeConfig({quadrant1Fill:i.quadrant1Fill,quadrant2Fill:i.quadrant2Fill,quadrant3Fill:i.quadrant3Fill,quadrant4Fill:i.quadrant4Fill,quadrant1TextFill:i.quadrant1TextFill,quadrant2TextFill:i.quadrant2TextFill,quadrant3TextFill:i.quadrant3TextFill,quadrant4TextFill:i.quadrant4TextFill,quadrantPointFill:i.quadrantPointFill,quadrantPointTextFill:i.quadrantPointTextFill,quadrantXAxisTextFill:i.quadrantXAxisTextFill,quadrantYAxisTextFill:i.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:i.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:i.quadrantInternalBorderStrokeFill,quadrantTitleFill:i.quadrantTitleFill}),c.setData({titleText:(0,a.t)()}),c.build()},clear:function(){c.clear(),(0,a.v)()},setAccTitle:a.s,getAccTitle:a.g,setDiagramTitle:a.q,getDiagramTitle:a.t,getAccDescription:a.a,setAccDescription:a.b},renderer:{draw:(t,i,e,r)=>{var s,l,o;function h(t){return"top"===t?"hanging":"middle"}function c(t){return"left"===t?"start":"middle"}function d(t){return`translate(${t.x}, ${t.y}) rotate(${t.rotation||0})`}const u=(0,a.c)();a.l.debug("Rendering quadrant chart\n"+t);const x=u.securityLevel;let g;"sandbox"===x&&(g=(0,n.Ltv)("#i"+i));const f=("sandbox"===x?(0,n.Ltv)(g.nodes()[0].contentDocument.body):(0,n.Ltv)("body")).select(`[id="${i}"]`),y=f.append("g").attr("class","main"),p=(null==(s=u.quadrantChart)?void 0:s.chartWidth)||500,q=(null==(l=u.quadrantChart)?void 0:l.chartHeight)||500;(0,a.i)(f,q,p,(null==(o=u.quadrantChart)?void 0:o.useMaxWidth)||!0),f.attr("viewBox","0 0 "+p+" "+q),r.db.setHeight(q),r.db.setWidth(p);const T=r.db.getQuadrantData(),m=y.append("g").attr("class","quadrants"),A=y.append("g").attr("class","border"),_=y.append("g").attr("class","data-points"),b=y.append("g").attr("class","labels"),S=y.append("g").attr("class","title");T.title&&S.append("text").attr("x",0).attr("y",0).attr("fill",T.title.fill).attr("font-size",T.title.fontSize).attr("dominant-baseline",h(T.title.horizontalPos)).attr("text-anchor",c(T.title.verticalPos)).attr("transform",d(T.title)).text(T.title.text),T.borderLines&&A.selectAll("line").data(T.borderLines).enter().append("line").attr("x1",(t=>t.x1)).attr("y1",(t=>t.y1)).attr("x2",(t=>t.x2)).attr("y2",(t=>t.y2)).style("stroke",(t=>t.strokeFill)).style("stroke-width",(t=>t.strokeWidth));const k=m.selectAll("g.quadrant").data(T.quadrants).enter().append("g").attr("class","quadrant");k.append("rect").attr("x",(t=>t.x)).attr("y",(t=>t.y)).attr("width",(t=>t.width)).attr("height",(t=>t.height)).attr("fill",(t=>t.fill)),k.append("text").attr("x",0).attr("y",0).attr("fill",(t=>t.text.fill)).attr("font-size",(t=>t.text.fontSize)).attr("dominant-baseline",(t=>h(t.text.horizontalPos))).attr("text-anchor",(t=>c(t.text.verticalPos))).attr("transform",(t=>d(t.text))).text((t=>t.text.text));b.selectAll("g.label").data(T.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text((t=>t.text)).attr("fill",(t=>t.fill)).attr("font-size",(t=>t.fontSize)).attr("dominant-baseline",(t=>h(t.horizontalPos))).attr("text-anchor",(t=>c(t.verticalPos))).attr("transform",(t=>d(t)));const F=_.selectAll("g.data-point").data(T.points).enter().append("g").attr("class","data-point");F.append("circle").attr("cx",(t=>t.x)).attr("cy",(t=>t.y)).attr("r",(t=>t.radius)).attr("fill",(t=>t.fill)),F.append("text").attr("x",0).attr("y",0).text((t=>t.text.text)).attr("fill",(t=>t.text.fill)).attr("font-size",(t=>t.text.fontSize)).attr("dominant-baseline",(t=>h(t.text.horizontalPos))).attr("text-anchor",(t=>c(t.text.verticalPos))).attr("transform",(t=>d(t.text)))}},styles:()=>""}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8577.769b0788.js b/pr-preview/pr-1594/assets/js/8577.769b0788.js deleted file mode 100644 index 426af58465..0000000000 --- a/pr-preview/pr-1594/assets/js/8577.769b0788.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[8577],{20549:(s,e,t)=>{"use strict";t.d(e,{A:()=>k});var c=t(58291);const k=c},45741:()=>{}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/858820da.470c2343.js b/pr-preview/pr-1594/assets/js/858820da.470c2343.js deleted file mode 100644 index 2bdac067aa..0000000000 --- a/pr-preview/pr-1594/assets/js/858820da.470c2343.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3353],{1465:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var s=n(74848),i=n(28453);const o={},r="GitLab",c={id:"reference/Connectors/capture-connectors/gitlab",title:"GitLab",description:"This connector captures data from GitLab repositories and organizations into Flow collections via GitLabs's API V4. It can also work with self-hosted GitLab.",source:"@site/docs/reference/Connectors/capture-connectors/gitlab.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/gitlab",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/gitlab.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"GitHub",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github"},next:{title:"Gladly",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly"}},a={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Resources",id:"resources",level:3},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with GitLab in the Flow web app",id:"using-oauth2-to-authenticate-with-gitlab-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually using personal access token",id:"configuring-the-connector-specification-manually-using-personal-access-token",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Setup",id:"setup",level:3},{value:"Sample",id:"sample",level:3}];function h(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"gitlab",children:"GitLab"}),"\n",(0,s.jsx)(t.p,{children:"This connector captures data from GitLab repositories and organizations into Flow collections via GitLabs's API V4. It can also work with self-hosted GitLab."}),"\n",(0,s.jsxs)(t.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(t.a,{href:"https://ghcr.io/estuary/source-gitlab:dev",children:(0,s.jsx)(t.code,{children:"ghcr.io/estuary/source-gitlab:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsxs)(t.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,s.jsx)(t.a,{href:"https://docs.airbyte.com/integrations/sources/gitlab/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,s.jsx)(t.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,s.jsxs)(t.p,{children:["When you ",(0,s.jsx)(t.a,{href:"#endpoint",children:"configure the connector"}),", you may a list of GitLab Groups or Projects from which to capture data."]}),"\n",(0,s.jsx)(t.p,{children:"From your selection, the following data resources are captured:"}),"\n",(0,s.jsx)(t.h3,{id:"resources",children:"Resources"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/branches.html",children:"Branches"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/commits.html",children:"Commits"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/issues.html",children:"Issues"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/group_boards.html",children:"Group Issue Boards"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/pipelines.html",children:"Pipelines"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/jobs.html",children:"Jobs"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/projects.html",children:"Projects"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/milestones.html",children:"Project Milestones"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/merge_requests.html",children:"Project Merge Requests"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/users.html",children:"Users"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/groups.html",children:"Groups"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/group_milestones.html",children:"Group Milestones"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/members.html",children:"Group and Project Members"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/tags.html",children:"Tags"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/releases/index.html",children:"Releases"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/group_labels.html",children:"Group Labels"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/labels.html",children:"Project Labels"})}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/epics.html",children:"Epics"}),"(only available for GitLab Ultimate and GitLab.com Gold accounts)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/api/epic_issues.html",children:"Epic Issues"})," (only available for GitLab Ultimate and GitLab.com Gold accounts)"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,s.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(t.p,{children:"There are two ways to authenticate with GitLab when capturing data into Flow: using OAuth2, and manually, by generating a personal access token.\nTheir prerequisites differ."}),"\n",(0,s.jsx)(t.p,{children:"OAuth is recommended for simplicity in the Flow web app;\nthe access token method is the only supported method using the command line. Which authentication method you choose depends on the policies of your organization. Github has special organization settings that need to be enabled in order for users to be able to access repos that are part of an organization."}),"\n",(0,s.jsx)(t.h3,{id:"using-oauth2-to-authenticate-with-gitlab-in-the-flow-web-app",children:"Using OAuth2 to authenticate with GitLab in the Flow web app"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["A GitLab user account with ",(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/user/permissions.html",children:"access"})," to the repositories of interest, and which is a member of organizations of interest. ",(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/user/project/members/#add-users-to-a-project",children:"How to add a member"}),"."]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"configuring-the-connector-specification-manually-using-personal-access-token",children:"Configuring the connector specification manually using personal access token"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"A GitLab user account with access to all entities of interest."}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["A GitLab ",(0,s.jsx)(t.a,{href:"https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html",children:"personal access token"}),")."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(t.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector."]}),"\n",(0,s.jsx)(t.h3,{id:"setup",children:"Setup"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Complete authentication using Oauth or a PAT"}),"\n",(0,s.jsx)(t.li,{children:"Select your start date in the format 2023-08-31T00:00:00"}),"\n",(0,s.jsx)(t.li,{children:"Optionally select Groups and Projects"}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(t.p,{children:"This sample specification reflects the manual authentication method."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-gitlab:dev\n config:\n credentials:\n option_title: PAT Credentials\n personal_access_token: {secret}\n groups: estuary.dev\n projects: estuary/flow\n start_date: 2022-01-01T00:00:00Z\n bindings:\n - resource:\n stream: branches\n syncMode: full_refresh\n target: ${PREFIX}/assignees\n {...}\n"})})]})}function d(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>c});var s=n(96540);const i={},o=s.createContext(i);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8591.54a6cd4d.js b/pr-preview/pr-1594/assets/js/8591.54a6cd4d.js deleted file mode 100644 index f536e3e679..0000000000 --- a/pr-preview/pr-1594/assets/js/8591.54a6cd4d.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 8591.54a6cd4d.js.LICENSE.txt */ -(self.webpackChunksite=self.webpackChunksite||[]).push([[8591],{64498:(e,t,n)=>{"use strict";e.exports=n(75275)},60819:(e,t,n)=>{"use strict";var i=n(16220),r={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};i.isMsie()&&i.mixin(r.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&i.isMsie()<=7&&i.mixin(r.input,{marginTop:"-1px"}),e.exports=r},99324:(e,t,n)=>{"use strict";var i="aaDataset",r="aaValue",s="aaDatum",o=n(16220),a=n(71337),u=n(74499),c=n(60819),l=n(31805);function h(e){var t;(e=e||{}).templates=e.templates||{},e.source||o.error("missing source"),e.name&&(t=e.name,!/^[_a-zA-Z0-9-]+$/.test(t))&&o.error("invalid dataset name: "+e.name),this.query=null,this._isEmpty=!0,this.highlight=!!e.highlight,this.name=void 0===e.name||null===e.name?o.getUniqueId():e.name,this.source=e.source,this.displayFn=function(e){return e=e||"value",o.isFunction(e)?e:t;function t(t){return t[e]}}(e.display||e.displayKey),this.debounce=e.debounce,this.cache=!1!==e.cache,this.templates=function(e,t){return{empty:e.empty&&o.templatify(e.empty),header:e.header&&o.templatify(e.header),footer:e.footer&&o.templatify(e.footer),suggestion:e.suggestion||n};function n(e){return"<p>"+t(e)+"</p>"}}(e.templates,this.displayFn),this.css=o.mixin({},c,e.appendTo?c.appendTo:{}),this.cssClasses=e.cssClasses=o.mixin({},c.defaultClasses,e.cssClasses||{}),this.cssClasses.prefix=e.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var n=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=e.$menu&&e.$menu.find(n+"-"+this.name).length>0?a.element(e.$menu.find(n+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=e.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(e){return a.element(e).data(i)},h.extractValue=function(e){return a.element(e).data(r)},h.extractDatum=function(e){var t=a.element(e).data(s);return"string"==typeof t&&(t=JSON.parse(t)),t},o.mixin(h.prototype,l,{_render:function(e,t){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=t&&t.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(function(){var t=[].slice.call(arguments,0);return t=[{query:e,isEmpty:!0}].concat(t),c.templates.empty.apply(this,t)}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(n)this.$el.html(function(){var e,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return e=a.element(p).css(this.css.suggestions),n=o.map(t,d),e.append.apply(e,n),e;function d(e){var t,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(t=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[e].concat(l)))).data(i,c.name),t.data(r,c.displayFn(e)||void 0),t.data(s,JSON.stringify(e)),t.children().each((function(){a.element(this).css(h.css.suggestionChild)})),t}}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(t&&!Array.isArray(t))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",e)}function h(){var t=[].slice.call(arguments,0);return t=[{query:e,isEmpty:!n}].concat(t),c.templates.header.apply(this,t)}function p(){var t=[].slice.call(arguments,0);return t=[{query:e,isEmpty:!n}].concat(t),c.templates.footer.apply(this,t)}},getRoot:function(){return this.$el},update:function(e){function t(t){if(!this.canceled&&e===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(e,t,n),this._render.apply(this,[e,t].concat(n))}}if(this.query=e,this.canceled=!1,this.shouldFetchFromCache(e))t.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,i=function(){n.canceled||n.source(e,t.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,i()}),this.debounce)}else i()}},cacheSuggestions:function(e,t,n){this.cachedQuery=e,this.cachedSuggestions=t,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(e){return this.cache&&this.cachedQuery===e&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.$el&&(this.cancel(),this.$el.empty(),this.trigger("rendered",""))},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),e.exports=h},82731:(e,t,n)=>{"use strict";var i=n(16220),r=n(71337),s=n(31805),o=n(99324),a=n(60819);function u(e){var t,n,s,o=this;(e=e||{}).menu||i.error("menu is required"),i.isArray(e.datasets)||i.isObject(e.datasets)||i.error("1 or more datasets required"),e.datasets||i.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=e.minLength||0,this.templates={},this.appendTo=e.appendTo||!1,this.css=i.mixin({},a,e.appendTo?a.appendTo:{}),this.cssClasses=e.cssClasses=i.mixin({},a.defaultClasses,e.cssClasses||{}),this.cssClasses.prefix=e.cssClasses.formattedPrefix||i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),t=i.bind(this._onSuggestionClick,this),n=i.bind(this._onSuggestionMouseEnter,this),s=i.bind(this._onSuggestionMouseLeave,this);var c=i.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=r.element(e.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,s).on("click.aa",c,t),this.$container=e.appendTo?e.wrapper:this.$menu,e.templates&&e.templates.header&&(this.templates.header=i.templatify(e.templates.header),this.$menu.prepend(this.templates.header())),e.templates&&e.templates.empty&&(this.templates.empty=i.templatify(e.templates.empty),this.$empty=r.element('<div class="'+i.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=i.map(e.datasets,(function(t){return function(e,t,n){return new u.Dataset(i.mixin({$menu:e,cssClasses:n},t))}(o.$menu,t,e.cssClasses)})),i.each(this.datasets,(function(e){var t=e.getRoot();t&&0===t.parent().length&&o.$menu.append(t),e.onSync("rendered",o._onRendered,o)})),e.templates&&e.templates.footer&&(this.templates.footer=i.templatify(e.templates.footer),this.$menu.append(this.templates.footer()));var l=this;r.element(window).resize((function(){l._redraw()}))}i.mixin(u.prototype,s,{_onSuggestionClick:function(e){this.trigger("suggestionClicked",r.element(e.currentTarget))},_onSuggestionMouseEnter:function(e){var t=r.element(e.currentTarget);if(!t.hasClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(t,!1)}),0)}},_onSuggestionMouseLeave:function(e){if(e.relatedTarget&&r.element(e.relatedTarget).closest("."+i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(e,t){if(this.isEmpty=i.every(this.datasets,(function(e){return e.isEmpty()})),this.isEmpty)if(t.length>=this.minLength&&this.trigger("empty"),this.$empty)if(t.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else i.any(this.datasets,(function(e){return e.templates&&e.templates.empty}))?t.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),t.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(e,t){e.first().addClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",t)},_removeCursor:function(){this._getCursor().removeClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(e){var t,n,i,r;this.isOpen&&(n=this._getCursor(),t=this._getSuggestions(),this._removeCursor(),-1!==(i=((i=t.index(n)+e)+1)%(t.length+1)-1)?(i<-1&&(i=t.length-1),this._setCursor(r=t.eq(i),!0),this._ensureVisible(r)):this.trigger("cursorRemoved"))},_ensureVisible:function(e){var t,n,i,r;n=(t=e.position().top)+e.height()+parseInt(e.css("margin-top"),10)+parseInt(e.css("margin-bottom"),10),i=this.$menu.scrollTop(),r=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),t<0?this.$menu.scrollTop(i+t):r<n&&this.$menu.scrollTop(i+(n-r))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(e){this.$menu.css("ltr"===e?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(e){var t=null;return e.length&&(t={raw:o.extractDatum(e),value:o.extractValue(e),datasetName:o.extractDatasetName(e)}),t},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(e){i.each(this.datasets,(function(t){t.update(e)}))},empty:function(){i.each(this.datasets,(function(e){e.clear()})),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(".aa"),this.$menu=null,i.each(this.datasets,(function(e){e.destroy()}))}}),u.Dataset=o,e.exports=u},94045:(e,t,n)=>{"use strict";var i=n(16220),r=n(71337);function s(e){e&&e.el||i.error("EventBus initialized without el"),this.$el=r.element(e.el)}i.mixin(s.prototype,{trigger:function(e,t,n,r){var s=i.Event("autocomplete:"+e);return this.$el.trigger(s,[t,n,r]),s}}),e.exports=s},31805:(e,t,n)=>{"use strict";var i=n(90874),r=/\s+/;function s(e,t,n,i){var s;if(!n)return this;for(t=t.split(r),n=i?function(e,t){return e.bind?e.bind(t):function(){e.apply(t,[].slice.call(arguments,0))}}(n,i):n,this._callbacks=this._callbacks||{};s=t.shift();)this._callbacks[s]=this._callbacks[s]||{sync:[],async:[]},this._callbacks[s][e].push(n);return this}function o(e,t,n){return function(){for(var i,r=0,s=e.length;!i&&r<s;r+=1)i=!1===e[r].apply(t,n);return!i}}e.exports={onSync:function(e,t,n){return s.call(this,"sync",e,t,n)},onAsync:function(e,t,n){return s.call(this,"async",e,t,n)},off:function(e){var t;if(!this._callbacks)return this;e=e.split(r);for(;t=e.shift();)delete this._callbacks[t];return this},trigger:function(e){var t,n,s,a,u;if(!this._callbacks)return this;e=e.split(r),s=[].slice.call(arguments,1);for(;(t=e.shift())&&(n=this._callbacks[t]);)a=o(n.sync,this,[t].concat(s)),u=o(n.async,this,[t].concat(s)),a()&&i(u);return this}}},74499:e=>{"use strict";e.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},97748:(e,t,n)=>{"use strict";var i;i={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var r=n(16220),s=n(71337),o=n(31805);function a(e){var t,n,o,a,u,c=this;(e=e||{}).input||r.error("input is missing"),t=r.bind(this._onBlur,this),n=r.bind(this._onFocus,this),o=r.bind(this._onKeydown,this),a=r.bind(this._onInput,this),this.$hint=s.element(e.hint),this.$input=s.element(e.input).on("blur.aa",t).on("focus.aa",n).on("keydown.aa",o),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=r.noop),r.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(e){i[e.which||e.keyCode]||r.defer(r.bind(c._onInput,c,e))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,s.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(e){return e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}a.normalizeQuery=function(e){return(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},r.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(e){var t=i[e.which||e.keyCode];this._managePreventDefault(t,e),t&&this._shouldTrigger(t,e)&&this.trigger(t+"Keyed",e)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(e,t){var n,i,r;switch(e){case"tab":i=this.getHint(),r=this.getInputValue(),n=i&&i!==r&&!u(t);break;case"up":case"down":n=!u(t);break;default:n=!1}n&&t.preventDefault()},_shouldTrigger:function(e,t){var n;if("tab"===e)n=!u(t);else n=!0;return n},_checkInputValue:function(){var e,t,n,i,r;e=this.getInputValue(),i=e,r=this.query,n=!(!(t=a.normalizeQuery(i)===a.normalizeQuery(r))||!this.query)&&this.query.length!==e.length,this.query=e,t?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(e){this.query=e},getInputValue:function(){return this.$input.val()},setInputValue:function(e,t){void 0===e&&(e=this.query),this.$input.val(e),t?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(e){this.$input.attr("aria-activedescendant",e)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(e){this.$hint.val(e)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var e,t,n;n=(e=this.getInputValue())!==(t=this.getHint())&&0===t.indexOf(e),""!==e&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var e=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=e},isCursorAtEnd:function(){var e,t,n;return e=this.$input.val().length,t=this.$input[0].selectionStart,r.isNumber(t)?t===e:!document.selection||((n=document.selection.createRange()).moveStart("character",-e),e===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),e.exports=a},98693:(e,t,n)=>{"use strict";var i="aaAttrs",r=n(16220),s=n(71337),o=n(94045),a=n(97748),u=n(82731),c=n(74499),l=n(60819);function h(e){var t,n;if((e=e||{}).input||r.error("missing input"),this.isActivated=!1,this.debug=!!e.debug,this.autoselect=!!e.autoselect,this.autoselectOnBlur=!!e.autoselectOnBlur,this.openOnFocus=!!e.openOnFocus,this.minLength=r.isNumber(e.minLength)?e.minLength:1,this.autoWidth=void 0===e.autoWidth||!!e.autoWidth,this.clearOnSelected=!!e.clearOnSelected,this.tabAutocomplete=void 0===e.tabAutocomplete||!!e.tabAutocomplete,e.hint=!!e.hint,e.hint&&e.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=e.css=r.mixin({},l,e.appendTo?l.appendTo:{}),this.cssClasses=e.cssClasses=r.mixin({},l.defaultClasses,e.cssClasses||{}),this.cssClasses.prefix=e.cssClasses.formattedPrefix=r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=e.listboxId=[this.cssClasses.root,"listbox",r.getUniqueId()].join("-");var a=function(e){var t,n,o,a;t=s.element(e.input),n=s.element(c.wrapper.replace("%ROOT%",e.cssClasses.root)).css(e.css.wrapper),e.appendTo||"block"!==t.css("display")||"table"!==t.parent().css("display")||n.css("display","table-cell");var u=c.dropdown.replace("%PREFIX%",e.cssClasses.prefix).replace("%DROPDOWN_MENU%",e.cssClasses.dropdownMenu);o=s.element(u).css(e.css.dropdown).attr({role:"listbox",id:e.listboxId}),e.templates&&e.templates.dropdownMenu&&o.html(r.templatify(e.templates.dropdownMenu)());a=t.clone().css(e.css.hint).css(function(e){return{backgroundAttachment:e.css("background-attachment"),backgroundClip:e.css("background-clip"),backgroundColor:e.css("background-color"),backgroundImage:e.css("background-image"),backgroundOrigin:e.css("background-origin"),backgroundPosition:e.css("background-position"),backgroundRepeat:e.css("background-repeat"),backgroundSize:e.css("background-size")}}(t)),a.val("").addClass(r.className(e.cssClasses.prefix,e.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();t.data(i,{"aria-autocomplete":t.attr("aria-autocomplete"),"aria-expanded":t.attr("aria-expanded"),"aria-owns":t.attr("aria-owns"),autocomplete:t.attr("autocomplete"),dir:t.attr("dir"),role:t.attr("role"),spellcheck:t.attr("spellcheck"),style:t.attr("style"),type:t.attr("type")}),t.addClass(r.className(e.cssClasses.prefix,e.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":e.datasets&&e.datasets[0]&&e.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":e.ariaLabel,"aria-owns":e.listboxId}).css(e.hint?e.css.input:e.css.inputWithNoHint);try{t.attr("dir")||t.attr("dir","auto")}catch(l){}return n=e.appendTo?n.appendTo(s.element(e.appendTo).eq(0)).eq(0):t.wrap(n).parent(),n.prepend(e.hint?a:null).append(o),{wrapper:n,input:t,hint:a,menu:o}}(e);this.$node=a.wrapper;var u=this.$input=a.input;t=a.menu,n=a.hint,e.dropdownMenuContainer&&s.element(e.dropdownMenuContainer).css("position","relative").append(t.css("top","0")),u.on("blur.aa",(function(e){var n=document.activeElement;r.isMsie()&&(t[0]===n||t[0].contains(n))&&(e.preventDefault(),e.stopImmediatePropagation(),r.defer((function(){u.focus()})))})),t.on("mousedown.aa",(function(e){e.preventDefault()})),this.eventBus=e.eventBus||new o({el:u}),this.dropdown=new h.Dropdown({appendTo:e.appendTo,wrapper:this.$node,menu:t,datasets:e.datasets,templates:e.templates,cssClasses:e.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(e),this._setLanguageDirection()}r.mixin(h.prototype,{_bindKeyboardShortcuts:function(e){if(e.keyboardShortcuts){var t=this.$input,n=[];r.each(e.keyboardShortcuts,(function(e){"string"==typeof e&&(e=e.toUpperCase().charCodeAt(0)),n.push(e)})),s.element(document).keydown((function(e){var i=e.target||e.srcElement,r=i.tagName;if(!i.isContentEditable&&"INPUT"!==r&&"SELECT"!==r&&"TEXTAREA"!==r){var s=e.which||e.keyCode;-1!==n.indexOf(s)&&(t.focus(),e.stopPropagation(),e.preventDefault())}}))}},_onSuggestionClicked:function(e,t){var n;(n=this.dropdown.getDatumForSuggestion(t))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(e,t){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(i),n&&(t&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var e=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",e.width+"px");var t=this.$node[0].getBoundingClientRect(),n=e.bottom-t.top;this.$node.css("top",n+"px");var i=e.left-t.left;this.$node.css("left",i+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var e=this.input.getQuery();e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var e,t;e=this.dropdown.getDatumForCursor(),t=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&e?this._select(e,n):this.autoselectOnBlur&&t?this._select(t,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(e,t){var n,i;n=this.dropdown.getDatumForCursor(),i=this.dropdown.getDatumForTopSuggestion();var r={selectionMethod:"enterKey"};n?(this._select(n,r),t.preventDefault()):this.autoselect&&i&&(this._select(i,r),t.preventDefault())},_onTabKeyed:function(e,t){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),t.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var e=this.input.getQuery();this.dropdown.isEmpty&&e.length>=this.minLength?this.dropdown.update(e):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var e=this.input.getQuery();this.dropdown.isEmpty&&e.length>=this.minLength?this.dropdown.update(e):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(e,t){this.input.clearHintIfInvalid(),t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var e=this.input.getLanguageDirection();this.dir!==e&&(this.dir=e,this.$node.css("direction",e),this.dropdown.setLanguageDirection(e))},_updateHint:function(){var e,t,n,i,s;(e=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(t=this.input.getInputValue(),n=a.normalizeQuery(t),i=r.escapeRegExChars(n),(s=new RegExp("^(?:"+i+")(.+$)","i").exec(e.value))?this.input.setHint(t+s[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(e){var t,n,i,r;t=this.input.getHint(),n=this.input.getQuery(),i=e||this.input.isCursorAtEnd(),t&&n!==t&&i&&((r=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(r.value),this.eventBus.trigger("autocompleted",r.raw,r.datasetName))},_select:function(e,t){void 0!==e.value&&this.input.setQuery(e.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(e.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",e.raw,e.datasetName,t).isDefaultPrevented()&&(this.dropdown.close(),r.defer(r.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var e=this.input.getInputValue();e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(e){e=r.toStr(e),this.isActivated?this.input.setInputValue(e):(this.input.setQuery(e),this.input.setInputValue(e,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(e,t){var n=e.find(r.className(t.prefix,t.input));r.each(n.data(i),(function(e,t){void 0===e?n.removeAttr(t):n.attr(t,e)})),n.detach().removeClass(r.className(t.prefix,t.input,!0)).insertAfter(e),n.removeData&&n.removeData(i);e.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n(64710),e.exports=h},71337:e=>{"use strict";e.exports={element:null}},66766:e=>{"use strict";e.exports=function(e){var t=e.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||e.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(t)return[t[1],t[2],t[3]]}},16220:(e,t,n)=>{"use strict";var i,r=n(71337);function s(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}e.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(e){if(void 0===e&&(e=navigator.userAgent),/(msie|trident)/i.test(e)){var t=e.match(/(msie |rv:)(\d+(.\d+)?)/i);if(t)return t[2]}return!1},escapeRegExChars:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(e){return"number"==typeof e},toStr:function(e){return null==e?"":e+""},cloneDeep:function(e){var t=this.mixin({},e),n=this;return this.each(t,(function(e,i){e&&(n.isArray(e)?t[i]=[].concat(e):n.isObject(e)&&(t[i]=n.cloneDeep(e)))})),t},error:function(e){throw new Error(e)},every:function(e,t){var n=!0;return e?(this.each(e,(function(i,r){n&&(n=t.call(null,i,r,e)&&n)})),!!n):n},any:function(e,t){var n=!1;return e?(this.each(e,(function(i,r){if(t.call(null,i,r,e))return n=!0,!1})),n):n},getUniqueId:(i=0,function(){return i++}),templatify:function(e){if(this.isFunction(e))return e;var t=r.element(e);return"SCRIPT"===t.prop("tagName")?function(){return t.text()}:function(){return String(e)}},defer:function(e){setTimeout(e,0)},noop:function(){},formatPrefix:function(e,t){return t?"":e+"-"},className:function(e,t,n){return(n?"":".")+e+t},escapeHighlightedString:function(e,t,n){t=t||"<em>";var i=document.createElement("div");i.appendChild(document.createTextNode(t)),n=n||"</em>";var r=document.createElement("div");r.appendChild(document.createTextNode(n));var o=document.createElement("div");return o.appendChild(document.createTextNode(e)),o.innerHTML.replace(RegExp(s(i.innerHTML),"g"),t).replace(RegExp(s(r.innerHTML),"g"),n)}}},81242:(e,t,n)=>{"use strict";var i=n(16220),r=n(71622),s=n(66766);e.exports=function(e,t){var n=s(e.as._ua);return n&&n[0]>=3&&n[1]>20&&((t=t||{}).additionalUA="autocomplete.js "+r),function(n,r){e.search(n,t,(function(e,t){e?i.error(e.message):r(t.hits,t)}))}}},64710:(e,t,n)=>{"use strict";e.exports={hits:n(81242),popularIn:n(30392)}},30392:(e,t,n)=>{"use strict";var i=n(16220),r=n(71622),s=n(66766);e.exports=function(e,t,n,o){var a=s(e.as._ua);if(a&&a[0]>=3&&a[1]>20&&((t=t||{}).additionalUA="autocomplete.js "+r),!n.source)return i.error("Missing 'source' key");var u=i.isFunction(n.source)?n.source:function(e){return e[n.source]};if(!n.index)return i.error("Missing 'index' key");var c=n.index;return o=o||{},function(a,l){e.search(a,t,(function(e,a){if(e)i.error(e.message);else{if(a.hits.length>0){var h=a.hits[0],p=i.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var d=s(c.as._ua);return d&&d[0]>=3&&d[1]>20&&(t.additionalUA="autocomplete.js "+r),void c.search(u(h),p,(function(e,t){if(e)i.error(e.message);else{var n=[];if(o.includeAll){var r=o.allTitle||"All departments";n.push(i.mixin({facet:{value:r,count:t.nbHits}},i.cloneDeep(h)))}i.each(t.facets,(function(e,t){i.each(e,(function(e,r){n.push(i.mixin({facet:{facet:t,value:r,count:e}},i.cloneDeep(h)))}))}));for(var s=1;s<a.hits.length;++s)n.push(a.hits[s]);l(n,a)}}))}l([])}}))}}},75275:(e,t,n)=>{"use strict";var i=n(53704);n(71337).element=i;var r=n(16220);r.isArray=i.isArray,r.isFunction=i.isFunction,r.isObject=i.isPlainObject,r.bind=i.proxy,r.each=function(e,t){i.each(e,(function(e,n){return t(n,e)}))},r.map=i.map,r.mixin=i.extend,r.Event=i.Event;var s="aaAutocomplete",o=n(98693),a=n(94045);function u(e,t,n,u){n=r.isArray(n)?n:[].slice.call(arguments,2);var c=i(e).each((function(e,r){var c=i(r),l=new a({el:c}),h=u||new o({input:c,eventBus:l,dropdownMenuContainer:t.dropdownMenuContainer,hint:void 0===t.hint||!!t.hint,minLength:t.minLength,autoselect:t.autoselect,autoselectOnBlur:t.autoselectOnBlur,tabAutocomplete:t.tabAutocomplete,openOnFocus:t.openOnFocus,templates:t.templates,debug:t.debug,clearOnSelected:t.clearOnSelected,cssClasses:t.cssClasses,datasets:n,keyboardShortcuts:t.keyboardShortcuts,appendTo:t.appendTo,autoWidth:t.autoWidth,ariaLabel:t.ariaLabel||r.getAttribute("aria-label")});c.data(s,h)}));return c.autocomplete={},r.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(e){c.autocomplete[e]=function(){var t,n=arguments;return c.each((function(r,o){var a=i(o).data(s);t=a[e].apply(a,n)})),t}})),c}u.sources=o.sources,u.escapeHighlightedString=r.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;u.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,u},e.exports=u},71622:e=>{e.exports="0.37.1"},53704:e=>{var t;t=window,e.exports=function(e){var t,n,i=function(){var t,n,i,r,s,o,a=[],u=a.concat,c=a.filter,l=a.slice,h=e.document,p={},d={},f={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,v=/^(?:body|html)$/i,x=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],w=["after","prepend","before","append"],S=h.createElement("table"),C=h.createElement("tr"),E={tr:h.createElement("tbody"),tbody:S,thead:S,tfoot:S,td:C,th:C,"*":h.createElement("div")},k=/complete|loaded|interactive/,_=/^[\w-]*$/,T={},L=T.toString,O={},A=h.createElement("div"),$={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},P=Array.isArray||function(e){return e instanceof Array};function I(e){return null==e?String(e):T[L.call(e)]||"object"}function Q(e){return"function"==I(e)}function R(e){return null!=e&&e==e.window}function N(e){return null!=e&&e.nodeType==e.DOCUMENT_NODE}function D(e){return"object"==I(e)}function F(e){return D(e)&&!R(e)&&Object.getPrototypeOf(e)==Object.prototype}function j(e){var t=!!e&&"length"in e&&e.length,n=i.type(e);return"function"!=n&&!R(e)&&("array"==n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function H(e){return c.call(e,(function(e){return null!=e}))}function V(e){return e.length>0?i.fn.concat.apply([],e):e}function B(e){return e.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function M(e){return e in d?d[e]:d[e]=new RegExp("(^|\\s)"+e+"(\\s|$)")}function q(e,t){return"number"!=typeof t||f[B(e)]?t:t+"px"}function z(e){var t,n;return p[e]||(t=h.createElement(e),h.body.appendChild(t),n=getComputedStyle(t,"").getPropertyValue("display"),t.parentNode.removeChild(t),"none"==n&&(n="block"),p[e]=n),p[e]}function K(e){return"children"in e?l.call(e.children):i.map(e.childNodes,(function(e){if(1==e.nodeType)return e}))}function W(e,t){var n,i=e?e.length:0;for(n=0;n<i;n++)this[n]=e[n];this.length=i,this.selector=t||""}function U(e,i,r){for(n in i)r&&(F(i[n])||P(i[n]))?(F(i[n])&&!F(e[n])&&(e[n]={}),P(i[n])&&!P(e[n])&&(e[n]=[]),U(e[n],i[n],r)):i[n]!==t&&(e[n]=i[n])}function G(e,t){return null==t?i(e):i(e).filter(t)}function Z(e,t,n,i){return Q(t)?t.call(e,n,i):t}function J(e,t,n){null==n?e.removeAttribute(t):e.setAttribute(t,n)}function X(e,n){var i=e.className||"",r=i&&i.baseVal!==t;if(n===t)return r?i.baseVal:i;r?i.baseVal=n:e.className=n}function Y(e){try{return e?"true"==e||"false"!=e&&("null"==e?null:+e+""==e?+e:/^[\[\{]/.test(e)?i.parseJSON(e):e):e}catch(t){return e}}function ee(e,t){t(e);for(var n=0,i=e.childNodes.length;n<i;n++)ee(e.childNodes[n],t)}return O.matches=function(e,t){if(!t||!e||1!==e.nodeType)return!1;var n=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.matchesSelector;if(n)return n.call(e,t);var i,r=e.parentNode,s=!r;return s&&(r=A).appendChild(e),i=~O.qsa(r,t).indexOf(e),s&&A.removeChild(e),i},s=function(e){return e.replace(/-+(.)?/g,(function(e,t){return t?t.toUpperCase():""}))},o=function(e){return c.call(e,(function(t,n){return e.indexOf(t)==n}))},O.fragment=function(e,n,r){var s,o,a;return m.test(e)&&(s=i(h.createElement(RegExp.$1))),s||(e.replace&&(e=e.replace(y,"<$1></$2>")),n===t&&(n=g.test(e)&&RegExp.$1),n in E||(n="*"),(a=E[n]).innerHTML=""+e,s=i.each(l.call(a.childNodes),(function(){a.removeChild(this)}))),F(r)&&(o=i(s),i.each(r,(function(e,t){b.indexOf(e)>-1?o[e](t):o.attr(e,t)}))),s},O.Z=function(e,t){return new W(e,t)},O.isZ=function(e){return e instanceof O.Z},O.init=function(e,n){var r;if(!e)return O.Z();if("string"==typeof e)if("<"==(e=e.trim())[0]&&g.test(e))r=O.fragment(e,RegExp.$1,n),e=null;else{if(n!==t)return i(n).find(e);r=O.qsa(h,e)}else{if(Q(e))return i(h).ready(e);if(O.isZ(e))return e;if(P(e))r=H(e);else if(D(e))r=[e],e=null;else if(g.test(e))r=O.fragment(e.trim(),RegExp.$1,n),e=null;else{if(n!==t)return i(n).find(e);r=O.qsa(h,e)}}return O.Z(r,e)},(i=function(e,t){return O.init(e,t)}).extend=function(e){var t,n=l.call(arguments,1);return"boolean"==typeof e&&(t=e,e=n.shift()),n.forEach((function(n){U(e,n,t)})),e},O.qsa=function(e,t){var n,i="#"==t[0],r=!i&&"."==t[0],s=i||r?t.slice(1):t,o=_.test(s);return e.getElementById&&o&&i?(n=e.getElementById(s))?[n]:[]:1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType?[]:l.call(o&&!i&&e.getElementsByClassName?r?e.getElementsByClassName(s):e.getElementsByTagName(t):e.querySelectorAll(t))},i.contains=h.documentElement.contains?function(e,t){return e!==t&&e.contains(t)}:function(e,t){for(;t&&(t=t.parentNode);)if(t===e)return!0;return!1},i.type=I,i.isFunction=Q,i.isWindow=R,i.isArray=P,i.isPlainObject=F,i.isEmptyObject=function(e){var t;for(t in e)return!1;return!0},i.isNumeric=function(e){var t=Number(e),n=typeof e;return null!=e&&"boolean"!=n&&("string"!=n||e.length)&&!isNaN(t)&&isFinite(t)||!1},i.inArray=function(e,t,n){return a.indexOf.call(t,e,n)},i.camelCase=s,i.trim=function(e){return null==e?"":String.prototype.trim.call(e)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(e,t){var n,i,r,s=[];if(j(e))for(i=0;i<e.length;i++)null!=(n=t(e[i],i))&&s.push(n);else for(r in e)null!=(n=t(e[r],r))&&s.push(n);return V(s)},i.each=function(e,t){var n,i;if(j(e)){for(n=0;n<e.length;n++)if(!1===t.call(e[n],n,e[n]))return e}else for(i in e)if(!1===t.call(e[i],i,e[i]))return e;return e},i.grep=function(e,t){return c.call(e,t)},e.JSON&&(i.parseJSON=JSON.parse),i.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(e,t){T["[object "+t+"]"]=t.toLowerCase()})),i.fn={constructor:O.Z,length:0,forEach:a.forEach,reduce:a.reduce,push:a.push,sort:a.sort,splice:a.splice,indexOf:a.indexOf,concat:function(){var e,t,n=[];for(e=0;e<arguments.length;e++)t=arguments[e],n[e]=O.isZ(t)?t.toArray():t;return u.apply(O.isZ(this)?this.toArray():this,n)},map:function(e){return i(i.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return i(l.apply(this,arguments))},ready:function(e){return k.test(h.readyState)&&h.body?e(i):h.addEventListener("DOMContentLoaded",(function(){e(i)}),!1),this},get:function(e){return e===t?l.call(this):this[e>=0?e:e+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(e){return a.every.call(this,(function(t,n){return!1!==e.call(t,n,t)})),this},filter:function(e){return Q(e)?this.not(this.not(e)):i(c.call(this,(function(t){return O.matches(t,e)})))},add:function(e,t){return i(o(this.concat(i(e,t))))},is:function(e){return this.length>0&&O.matches(this[0],e)},not:function(e){var n=[];if(Q(e)&&e.call!==t)this.each((function(t){e.call(this,t)||n.push(this)}));else{var r="string"==typeof e?this.filter(e):j(e)&&Q(e.item)?l.call(e):i(e);this.forEach((function(e){r.indexOf(e)<0&&n.push(e)}))}return i(n)},has:function(e){return this.filter((function(){return D(e)?i.contains(this,e):i(this).find(e).size()}))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){var e=this[0];return e&&!D(e)?e:i(e)},last:function(){var e=this[this.length-1];return e&&!D(e)?e:i(e)},find:function(e){var t=this;return e?"object"==typeof e?i(e).filter((function(){var e=this;return a.some.call(t,(function(t){return i.contains(t,e)}))})):1==this.length?i(O.qsa(this[0],e)):this.map((function(){return O.qsa(this,e)})):i()},closest:function(e,t){var n=[],r="object"==typeof e&&i(e);return this.each((function(i,s){for(;s&&!(r?r.indexOf(s)>=0:O.matches(s,e));)s=s!==t&&!N(s)&&s.parentNode;s&&n.indexOf(s)<0&&n.push(s)})),i(n)},parents:function(e){for(var t=[],n=this;n.length>0;)n=i.map(n,(function(e){if((e=e.parentNode)&&!N(e)&&t.indexOf(e)<0)return t.push(e),e}));return G(t,e)},parent:function(e){return G(o(this.pluck("parentNode")),e)},children:function(e){return G(this.map((function(){return K(this)})),e)},contents:function(){return this.map((function(){return this.contentDocument||l.call(this.childNodes)}))},siblings:function(e){return G(this.map((function(e,t){return c.call(K(t.parentNode),(function(e){return e!==t}))})),e)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(e){return i.map(this,(function(t){return t[e]}))},show:function(){return this.each((function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=z(this.nodeName))}))},replaceWith:function(e){return this.before(e).remove()},wrap:function(e){var t=Q(e);if(this[0]&&!t)var n=i(e).get(0),r=n.parentNode||this.length>1;return this.each((function(s){i(this).wrapAll(t?e.call(this,s):r?n.cloneNode(!0):n)}))},wrapAll:function(e){if(this[0]){var t;for(i(this[0]).before(e=i(e));(t=e.children()).length;)e=t.first();i(e).append(this)}return this},wrapInner:function(e){var t=Q(e);return this.each((function(n){var r=i(this),s=r.contents(),o=t?e.call(this,n):e;s.length?s.wrapAll(o):r.append(o)}))},unwrap:function(){return this.parent().each((function(){i(this).replaceWith(i(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(e){return this.each((function(){var n=i(this);(e===t?"none"==n.css("display"):e)?n.show():n.hide()}))},prev:function(e){return i(this.pluck("previousElementSibling")).filter(e||"*")},next:function(e){return i(this.pluck("nextElementSibling")).filter(e||"*")},html:function(e){return 0 in arguments?this.each((function(t){var n=this.innerHTML;i(this).empty().append(Z(this,e,t,n))})):0 in this?this[0].innerHTML:null},text:function(e){return 0 in arguments?this.each((function(t){var n=Z(this,e,t,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(e,i){var r;return"string"!=typeof e||1 in arguments?this.each((function(t){if(1===this.nodeType)if(D(e))for(n in e)J(this,n,e[n]);else J(this,e,Z(this,i,t,this.getAttribute(e)))})):0 in this&&1==this[0].nodeType&&null!=(r=this[0].getAttribute(e))?r:t},removeAttr:function(e){return this.each((function(){1===this.nodeType&&e.split(" ").forEach((function(e){J(this,e)}),this)}))},prop:function(e,t){return e=$[e]||e,1 in arguments?this.each((function(n){this[e]=Z(this,t,n,this[e])})):this[0]&&this[0][e]},removeProp:function(e){return e=$[e]||e,this.each((function(){delete this[e]}))},data:function(e,n){var i="data-"+e.replace(x,"-$1").toLowerCase(),r=1 in arguments?this.attr(i,n):this.attr(i);return null!==r?Y(r):t},val:function(e){return 0 in arguments?(null==e&&(e=""),this.each((function(t){this.value=Z(this,e,t,this.value)}))):this[0]&&(this[0].multiple?i(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(t){if(t)return this.each((function(e){var n=i(this),r=Z(this,t,e,n.offset()),s=n.offsetParent().offset(),o={top:r.top-s.top,left:r.left-s.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)}));if(!this.length)return null;if(h.documentElement!==this[0]&&!i.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+e.pageXOffset,top:n.top+e.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(e,t){if(arguments.length<2){var r=this[0];if("string"==typeof e){if(!r)return;return r.style[s(e)]||getComputedStyle(r,"").getPropertyValue(e)}if(P(e)){if(!r)return;var o={},a=getComputedStyle(r,"");return i.each(e,(function(e,t){o[t]=r.style[s(t)]||a.getPropertyValue(t)})),o}}var u="";if("string"==I(e))t||0===t?u=B(e)+":"+q(e,t):this.each((function(){this.style.removeProperty(B(e))}));else for(n in e)e[n]||0===e[n]?u+=B(n)+":"+q(n,e[n])+";":this.each((function(){this.style.removeProperty(B(n))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(e){return e?this.indexOf(i(e)[0]):this.parent().children().indexOf(this[0])},hasClass:function(e){return!!e&&a.some.call(this,(function(e){return this.test(X(e))}),M(e))},addClass:function(e){return e?this.each((function(t){if("className"in this){r=[];var n=X(this);Z(this,e,t,n).split(/\s+/g).forEach((function(e){i(this).hasClass(e)||r.push(e)}),this),r.length&&X(this,n+(n?" ":"")+r.join(" "))}})):this},removeClass:function(e){return this.each((function(n){if("className"in this){if(e===t)return X(this,"");r=X(this),Z(this,e,n,r).split(/\s+/g).forEach((function(e){r=r.replace(M(e)," ")})),X(this,r.trim())}}))},toggleClass:function(e,n){return e?this.each((function(r){var s=i(this);Z(this,e,r,X(this)).split(/\s+/g).forEach((function(e){(n===t?!s.hasClass(e):n)?s.addClass(e):s.removeClass(e)}))})):this},scrollTop:function(e){if(this.length){var n="scrollTop"in this[0];return e===t?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=e}:function(){this.scrollTo(this.scrollX,e)})}},scrollLeft:function(e){if(this.length){var n="scrollLeft"in this[0];return e===t?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=e}:function(){this.scrollTo(e,this.scrollY)})}},position:function(){if(this.length){var e=this[0],t=this.offsetParent(),n=this.offset(),r=v.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(i(e).css("margin-top"))||0,n.left-=parseFloat(i(e).css("margin-left"))||0,r.top+=parseFloat(i(t[0]).css("border-top-width"))||0,r.left+=parseFloat(i(t[0]).css("border-left-width"))||0,{top:n.top-r.top,left:n.left-r.left}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent||h.body;e&&!v.test(e.nodeName)&&"static"==i(e).css("position");)e=e.offsetParent;return e}))}},i.fn.detach=i.fn.remove,["width","height"].forEach((function(e){var n=e.replace(/./,(function(e){return e[0].toUpperCase()}));i.fn[e]=function(r){var s,o=this[0];return r===t?R(o)?o["inner"+n]:N(o)?o.documentElement["scroll"+n]:(s=this.offset())&&s[e]:this.each((function(t){(o=i(this)).css(e,Z(this,r,t,o[e]()))}))}})),w.forEach((function(n,r){var s=r%2;i.fn[n]=function(){var n,o,a=i.map(arguments,(function(e){var r=[];return"array"==(n=I(e))?(e.forEach((function(e){return e.nodeType!==t?r.push(e):i.zepto.isZ(e)?r=r.concat(e.get()):void(r=r.concat(O.fragment(e)))})),r):"object"==n||null==e?e:O.fragment(e)})),u=this.length>1;return a.length<1?this:this.each((function(t,n){o=s?n:n.parentNode,n=0==r?n.nextSibling:1==r?n.firstChild:2==r?n:null;var c=i.contains(h.documentElement,o);a.forEach((function(t){if(u)t=t.cloneNode(!0);else if(!o)return i(t).remove();o.insertBefore(t,n),c&&ee(t,(function(t){if(!(null==t.nodeName||"SCRIPT"!==t.nodeName.toUpperCase()||t.type&&"text/javascript"!==t.type||t.src)){var n=t.ownerDocument?t.ownerDocument.defaultView:e;n.eval.call(n,t.innerHTML)}}))}))}))},i.fn[s?n+"To":"insert"+(r?"Before":"After")]=function(e){return i(e)[n](this),this}})),O.Z.prototype=W.prototype=i.fn,O.uniq=o,O.deserializeValue=Y,i.zepto=O,i}();return function(t){var n,i=1,r=Array.prototype.slice,s=t.isFunction,o=function(e){return"string"==typeof e},a={},u={},c="onfocusin"in e,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(e){return e._zid||(e._zid=i++)}function d(e,t,n,i){if((t=f(t)).ns)var r=g(t.ns);return(a[p(e)]||[]).filter((function(e){return e&&(!t.e||e.e==t.e)&&(!t.ns||r.test(e.ns))&&(!n||p(e.fn)===p(n))&&(!i||e.sel==i)}))}function f(e){var t=(""+e).split(".");return{e:t[0],ns:t.slice(1).sort().join(" ")}}function g(e){return new RegExp("(?:^| )"+e.replace(" "," .* ?")+"(?: |$)")}function m(e,t){return e.del&&!c&&e.e in l||!!t}function y(e){return h[e]||c&&l[e]||e}function v(e,i,r,s,o,u,c){var l=p(e),d=a[l]||(a[l]=[]);i.split(/\s/).forEach((function(i){if("ready"==i)return t(document).ready(r);var a=f(i);a.fn=r,a.sel=o,a.e in h&&(r=function(e){var n=e.relatedTarget;if(!n||n!==this&&!t.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||r;a.proxy=function(t){if(!(t=E(t)).isImmediatePropagationStopped()){try{var i=Object.getOwnPropertyDescriptor(t,"data");i&&!i.writable||(t.data=s)}catch(t){}var r=l.apply(e,t._args==n?[t]:[t].concat(t._args));return!1===r&&(t.preventDefault(),t.stopPropagation()),r}},a.i=d.length,d.push(a),"addEventListener"in e&&e.addEventListener(y(a.e),a.proxy,m(a,c))}))}function x(e,t,n,i,r){var s=p(e);(t||"").split(/\s/).forEach((function(t){d(e,t,n,i).forEach((function(t){delete a[s][t.i],"removeEventListener"in e&&e.removeEventListener(y(t.e),t.proxy,m(t,r))}))}))}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",t.event={add:v,remove:x},t.proxy=function(e,n){var i=2 in arguments&&r.call(arguments,2);if(s(e)){var a=function(){return e.apply(n,i?i.concat(r.call(arguments)):arguments)};return a._zid=p(e),a}if(o(n))return i?(i.unshift(e[n],e),t.proxy.apply(null,i)):t.proxy(e[n],e);throw new TypeError("expected function")},t.fn.bind=function(e,t,n){return this.on(e,t,n)},t.fn.unbind=function(e,t){return this.off(e,t)},t.fn.one=function(e,t,n,i){return this.on(e,t,n,i,1)};var b=function(){return!0},w=function(){return!1},S=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,C={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function E(e,i){if(i||!e.isDefaultPrevented){i||(i=e),t.each(C,(function(t,n){var r=i[t];e[t]=function(){return this[n]=b,r&&r.apply(i,arguments)},e[n]=w}));try{e.timeStamp||(e.timeStamp=Date.now())}catch(r){}(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?!1===i.returnValue:i.getPreventDefault&&i.getPreventDefault())&&(e.isDefaultPrevented=b)}return e}function k(e){var t,i={originalEvent:e};for(t in e)S.test(t)||e[t]===n||(i[t]=e[t]);return E(i,e)}t.fn.delegate=function(e,t,n){return this.on(t,e,n)},t.fn.undelegate=function(e,t,n){return this.off(t,e,n)},t.fn.live=function(e,n){return t(document.body).delegate(this.selector,e,n),this},t.fn.die=function(e,n){return t(document.body).undelegate(this.selector,e,n),this},t.fn.on=function(e,i,a,u,c){var l,h,p=this;return e&&!o(e)?(t.each(e,(function(e,t){p.on(e,i,a,t,c)})),p):(o(i)||s(u)||!1===u||(u=a,a=i,i=n),u!==n&&!1!==a||(u=a,a=n),!1===u&&(u=w),p.each((function(n,s){c&&(l=function(e){return x(s,e.type,u),u.apply(this,arguments)}),i&&(h=function(e){var n,o=t(e.target).closest(i,s).get(0);if(o&&o!==s)return n=t.extend(k(e),{currentTarget:o,liveFired:s}),(l||u).apply(o,[n].concat(r.call(arguments,1)))}),v(s,e,u,a,i,h||l)})))},t.fn.off=function(e,i,r){var a=this;return e&&!o(e)?(t.each(e,(function(e,t){a.off(e,i,t)})),a):(o(i)||s(r)||!1===r||(r=i,i=n),!1===r&&(r=w),a.each((function(){x(this,e,r,i)})))},t.fn.trigger=function(e,n){return(e=o(e)||t.isPlainObject(e)?t.Event(e):E(e))._args=n,this.each((function(){e.type in l&&"function"==typeof this[e.type]?this[e.type]():"dispatchEvent"in this?this.dispatchEvent(e):t(this).triggerHandler(e,n)}))},t.fn.triggerHandler=function(e,n){var i,r;return this.each((function(s,a){(i=k(o(e)?t.Event(e):e))._args=n,i.target=a,t.each(d(a,e.type||e),(function(e,t){if(r=t.proxy(i),i.isImmediatePropagationStopped())return!1}))})),r},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(e){t.fn[e]=function(t){return 0 in arguments?this.bind(e,t):this.trigger(e)}})),t.Event=function(e,t){o(e)||(e=(t=e).type);var n=document.createEvent(u[e]||"Events"),i=!0;if(t)for(var r in t)"bubbles"==r?i=!!t[r]:n[r]=t[r];return n.initEvent(e,i,!0),E(n)}}(i),n=[],i.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",t&&clearTimeout(t),t=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(e){var t={},n=e.fn.data,i=e.camelCase,r=e.expando="Zepto"+ +new Date,s=[];function o(s,o){var u=s[r],c=u&&t[u];if(void 0===o)return c||a(s);if(c){if(o in c)return c[o];var l=i(o);if(l in c)return c[l]}return n.call(e(s),o)}function a(n,s,o){var a=n[r]||(n[r]=++e.uuid),c=t[a]||(t[a]=u(n));return void 0!==s&&(c[i(s)]=o),c}function u(t){var n={};return e.each(t.attributes||s,(function(t,r){0==r.name.indexOf("data-")&&(n[i(r.name.replace("data-",""))]=e.zepto.deserializeValue(r.value))})),n}e.fn.data=function(t,n){return void 0===n?e.isPlainObject(t)?this.each((function(n,i){e.each(t,(function(e,t){a(i,e,t)}))})):0 in this?o(this[0],t):void 0:this.each((function(){a(this,t,n)}))},e.data=function(t,n,i){return e(t).data(n,i)},e.hasData=function(n){var i=n[r],s=i&&t[i];return!!s&&!e.isEmptyObject(s)},e.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var s=this[r],o=s&&t[s];o&&e.each(n||o,(function(e){delete o[n?i(this):e]}))}))},["remove","empty"].forEach((function(t){var n=e.fn[t];e.fn[t]=function(){var e=this.find("*");return"remove"===t&&(e=e.add(this)),e.removeData(),n.call(this)}}))}(i),i}(t)},15765:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>m});var i=n(34714),r=n.n(i),s=n(20549);s.A.tokenizer.separator=/[\s\-/]+/;const o=class{constructor(e,t,n,i){void 0===n&&(n="/"),this.searchDocs=e,this.lunrIndex=s.A.Index.load(t),this.baseUrl=n,this.maxHits=i}getLunrResult(e){return this.lunrIndex.query((function(t){const n=s.A.tokenizer(e);t.term(n,{boost:10}),t.term(n,{wildcard:s.A.Query.wildcard.TRAILING})}))}getHit(e,t,n){return{hierarchy:{lvl0:e.pageTitle||e.title,lvl1:0===e.type?null:e.title},url:e.url,version:e.version,_snippetResult:n?{content:{value:n,matchLevel:"full"}}:null,_highlightResult:{hierarchy:{lvl0:{value:0===e.type?t||e.title:e.pageTitle},lvl1:0===e.type?null:{value:t||e.title}}}}}getTitleHit(e,t,n){const i=t[0],r=t[0]+n;let s=e.title.substring(0,i)+'<span class="algolia-docsearch-suggestion--highlight">'+e.title.substring(i,r)+"</span>"+e.title.substring(r,e.title.length);return this.getHit(e,s)}getKeywordHit(e,t,n){const i=t[0],r=t[0]+n;let s=e.title+"<br /><i>Keywords: "+e.keywords.substring(0,i)+'<span class="algolia-docsearch-suggestion--highlight">'+e.keywords.substring(i,r)+"</span>"+e.keywords.substring(r,e.keywords.length)+"</i>";return this.getHit(e,s)}getContentHit(e,t){const n=t[0],i=t[0]+t[1];let r=n,s=i,o=!0,a=!0;for(let c=0;c<3;c++){const t=e.content.lastIndexOf(" ",r-2),n=e.content.lastIndexOf(".",r-2);if(n>0&&n>t){r=n+1,o=!1;break}if(t<0){r=0,o=!1;break}r=t+1}for(let c=0;c<10;c++){const t=e.content.indexOf(" ",s+1),n=e.content.indexOf(".",s+1);if(n>0&&n<t){s=n,a=!1;break}if(t<0){s=e.content.length,a=!1;break}s=t}let u=e.content.substring(r,n);return o&&(u="... "+u),u+='<span class="algolia-docsearch-suggestion--highlight">'+e.content.substring(n,i)+"</span>",u+=e.content.substring(i,s),a&&(u+=" ..."),this.getHit(e,null,u)}search(e){return new Promise(((t,n)=>{const i=this.getLunrResult(e),r=[];i.length>this.maxHits&&(i.length=this.maxHits),this.titleHitsRes=[],this.contentHitsRes=[],i.forEach((t=>{const n=this.searchDocs[t.ref],{metadata:i}=t.matchData;for(let s in i)if(i[s].title){if(!this.titleHitsRes.includes(t.ref)){const o=i[s].title.position[0];r.push(this.getTitleHit(n,o,e.length)),this.titleHitsRes.push(t.ref)}}else if(i[s].content){const e=i[s].content.position[0];r.push(this.getContentHit(n,e))}else if(i[s].keywords){const o=i[s].keywords.position[0];r.push(this.getKeywordHit(n,o,e.length)),this.titleHitsRes.push(t.ref)}})),r.length>this.maxHits&&(r.length=this.maxHits),t(r)}))}};var a=n(64498),u=n.n(a);const c="algolia-docsearch",l=`${c}-suggestion`,h={suggestion:`\n <a class="${l}\n {{#isCategoryHeader}}${l}__main{{/isCategoryHeader}}\n {{#isSubCategoryHeader}}${l}__secondary{{/isSubCategoryHeader}}\n "\n aria-label="Link to the result"\n href="{{{url}}}"\n >\n <div class="${l}--category-header">\n <span class="${l}--category-header-lvl0">{{{category}}}</span>\n </div>\n <div class="${l}--wrapper">\n <div class="${l}--subcategory-column">\n <span class="${l}--subcategory-column-text">{{{subcategory}}}</span>\n </div>\n {{#isTextOrSubcategoryNonEmpty}}\n <div class="${l}--content">\n <div class="${l}--subcategory-inline">{{{subcategory}}}</div>\n <div class="${l}--title">{{{title}}}</div>\n {{#text}}<div class="${l}--text">{{{text}}}</div>{{/text}}\n {{#version}}<div class="${l}--version">{{version}}</div>{{/version}}\n </div>\n {{/isTextOrSubcategoryNonEmpty}}\n </div>\n </a>\n `,suggestionSimple:`\n <div class="${l}\n {{#isCategoryHeader}}${l}__main{{/isCategoryHeader}}\n {{#isSubCategoryHeader}}${l}__secondary{{/isSubCategoryHeader}}\n suggestion-layout-simple\n ">\n <div class="${l}--category-header">\n {{^isLvl0}}\n <span class="${l}--category-header-lvl0 ${l}--category-header-item">{{{category}}}</span>\n {{^isLvl1}}\n {{^isLvl1EmptyOrDuplicate}}\n <span class="${l}--category-header-lvl1 ${l}--category-header-item">\n {{{subcategory}}}\n </span>\n {{/isLvl1EmptyOrDuplicate}}\n {{/isLvl1}}\n {{/isLvl0}}\n <div class="${l}--title ${l}--category-header-item">\n {{#isLvl2}}\n {{{title}}}\n {{/isLvl2}}\n {{#isLvl1}}\n {{{subcategory}}}\n {{/isLvl1}}\n {{#isLvl0}}\n {{{category}}}\n {{/isLvl0}}\n </div>\n </div>\n <div class="${l}--wrapper">\n {{#text}}\n <div class="${l}--content">\n <div class="${l}--text">{{{text}}}</div>\n </div>\n {{/text}}\n </div>\n </div>\n `,footer:`\n <div class="${`${c}-footer`}">\n </div>\n `,empty:`\n <div class="${l}">\n <div class="${l}--wrapper">\n <div class="${l}--content ${l}--no-results">\n <div class="${l}--title">\n <div class="${l}--text">\n No results found for query <b>"{{query}}"</b>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,searchBox:'\n <form novalidate="novalidate" onsubmit="return false;" class="searchbox">\n <div role="search" class="searchbox__wrapper">\n <input id="docsearch" type="search" name="search" placeholder="Search the docs" autocomplete="off" required="required" class="searchbox__input"/>\n <button type="submit" title="Submit your search query." class="searchbox__submit" >\n <svg width=12 height=12 role="img" aria-label="Search">\n <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-search-13"></use>\n </svg>\n </button>\n <button type="reset" title="Clear the search query." class="searchbox__reset hide">\n <svg width=12 height=12 role="img" aria-label="Reset">\n <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-clear-3"></use>\n </svg>\n </button>\n </div>\n</form>\n\n<div class="svg-icons" style="height: 0; width: 0; position: absolute; visibility: hidden">\n <svg xmlns="http://www.w3.org/2000/svg">\n <symbol id="sbx-icon-clear-3" viewBox="0 0 40 40"><path d="M16.228 20L1.886 5.657 0 3.772 3.772 0l1.885 1.886L20 16.228 34.343 1.886 36.228 0 40 3.772l-1.886 1.885L23.772 20l14.342 14.343L40 36.228 36.228 40l-1.885-1.886L20 23.772 5.657 38.114 3.772 40 0 36.228l1.886-1.885L16.228 20z" fill-rule="evenodd"></symbol>\n <symbol id="sbx-icon-search-13" viewBox="0 0 40 40"><path d="M26.806 29.012a16.312 16.312 0 0 1-10.427 3.746C7.332 32.758 0 25.425 0 16.378 0 7.334 7.333 0 16.38 0c9.045 0 16.378 7.333 16.378 16.38 0 3.96-1.406 7.593-3.746 10.426L39.547 37.34c.607.608.61 1.59-.004 2.203a1.56 1.56 0 0 1-2.202.004L26.807 29.012zm-10.427.627c7.322 0 13.26-5.938 13.26-13.26 0-7.324-5.938-13.26-13.26-13.26-7.324 0-13.26 5.936-13.26 13.26 0 7.322 5.936 13.26 13.26 13.26z" fill-rule="evenodd"></symbol>\n </svg>\n</div>\n '};var p=n(53704),d=n.n(p);const f={mergeKeyWithParent(e,t){if(void 0===e[t])return e;if("object"!=typeof e[t])return e;const n=d().extend({},e,e[t]);return delete n[t],n},groupBy(e,t){const n={};return d().each(e,((e,i)=>{if(void 0===i[t])throw new Error(`[groupBy]: Object has no key ${t}`);let r=i[t];"string"==typeof r&&(r=r.toLowerCase()),Object.prototype.hasOwnProperty.call(n,r)||(n[r]=[]),n[r].push(i)})),n},values:e=>Object.keys(e).map((t=>e[t])),flatten(e){const t=[];return e.forEach((e=>{Array.isArray(e)?e.forEach((e=>{t.push(e)})):t.push(e)})),t},flattenAndFlagFirst(e,t){const n=this.values(e).map((e=>e.map(((e,n)=>(e[t]=0===n,e)))));return this.flatten(n)},compact(e){const t=[];return e.forEach((e=>{e&&t.push(e)})),t},getHighlightedValue:(e,t)=>e._highlightResult&&e._highlightResult.hierarchy_camel&&e._highlightResult.hierarchy_camel[t]&&e._highlightResult.hierarchy_camel[t].matchLevel&&"none"!==e._highlightResult.hierarchy_camel[t].matchLevel&&e._highlightResult.hierarchy_camel[t].value?e._highlightResult.hierarchy_camel[t].value:e._highlightResult&&e._highlightResult&&e._highlightResult[t]&&e._highlightResult[t].value?e._highlightResult[t].value:e[t],getSnippetedValue(e,t){if(!e._snippetResult||!e._snippetResult[t]||!e._snippetResult[t].value)return e[t];let n=e._snippetResult[t].value;return n[0]!==n[0].toUpperCase()&&(n=`\u2026${n}`),-1===[".","!","?"].indexOf(n[n.length-1])&&(n=`${n}\u2026`),n},deepClone:e=>JSON.parse(JSON.stringify(e))};class g{constructor(e){let{searchDocs:t,searchIndex:n,inputSelector:i,debug:r=!1,baseUrl:s="/",queryDataCallback:a=null,autocompleteOptions:c={debug:!1,hint:!1,autoselect:!0},transformData:l=!1,queryHook:p=!1,handleSelected:f=!1,enhancedSearchInput:m=!1,layout:y="column",maxHits:v=5}=e;this.input=g.getInputFromSelector(i),this.queryDataCallback=a||null;const x=!(!c||!c.debug)&&c.debug;c.debug=r||x,this.autocompleteOptions=c,this.autocompleteOptions.cssClasses=this.autocompleteOptions.cssClasses||{},this.autocompleteOptions.cssClasses.prefix=this.autocompleteOptions.cssClasses.prefix||"ds";const b=this.input&&"function"==typeof this.input.attr&&this.input.attr("aria-label");this.autocompleteOptions.ariaLabel=this.autocompleteOptions.ariaLabel||b||"search input",this.isSimpleLayout="simple"===y,this.client=new o(t,n,s,v),m&&(this.input=g.injectSearchBox(this.input)),this.autocomplete=u()(this.input,c,[{source:this.getAutocompleteSource(l,p),templates:{suggestion:g.getSuggestionTemplate(this.isSimpleLayout),footer:h.footer,empty:g.getEmptyTemplate()}}]);const w=f;this.handleSelected=w||this.handleSelected,w&&d()(".algolia-autocomplete").on("click",".ds-suggestions a",(e=>{e.preventDefault()})),this.autocomplete.on("autocomplete:selected",this.handleSelected.bind(null,this.autocomplete.autocomplete)),this.autocomplete.on("autocomplete:shown",this.handleShown.bind(null,this.input)),m&&g.bindSearchBoxEvent(),document.addEventListener("keydown",(e=>{(e.ctrlKey||e.metaKey)&&"k"==e.key&&(this.input.focus(),e.preventDefault())}))}static injectSearchBox(e){e.before(h.searchBox);const t=e.prev().prev().find("input");return e.remove(),t}static bindSearchBoxEvent(){d()('.searchbox [type="reset"]').on("click",(function(){d()("input#docsearch").focus(),d()(this).addClass("hide"),u().autocomplete.setVal("")})),d()("input#docsearch").on("keyup",(()=>{const e=document.querySelector("input#docsearch"),t=document.querySelector('.searchbox [type="reset"]');t.className="searchbox__reset",0===e.value.length&&(t.className+=" hide")}))}static getInputFromSelector(e){const t=d()(e).filter("input");return t.length?d()(t[0]):null}getAutocompleteSource(e,t){return(n,i)=>{t&&(n=t(n)||n),this.client.search(n).then((t=>{this.queryDataCallback&&"function"==typeof this.queryDataCallback&&this.queryDataCallback(t),e&&(t=e(t)||t),i(g.formatHits(t))}))}}static formatHits(e){const t=f.deepClone(e).map((e=>(e._highlightResult&&(e._highlightResult=f.mergeKeyWithParent(e._highlightResult,"hierarchy")),f.mergeKeyWithParent(e,"hierarchy"))));let n=f.groupBy(t,"lvl0");return d().each(n,((e,t)=>{const i=f.groupBy(t,"lvl1"),r=f.flattenAndFlagFirst(i,"isSubCategoryHeader");n[e]=r})),n=f.flattenAndFlagFirst(n,"isCategoryHeader"),n.map((e=>{const t=g.formatURL(e),n=f.getHighlightedValue(e,"lvl0"),i=f.getHighlightedValue(e,"lvl1")||n,r=f.compact([f.getHighlightedValue(e,"lvl2")||i,f.getHighlightedValue(e,"lvl3"),f.getHighlightedValue(e,"lvl4"),f.getHighlightedValue(e,"lvl5"),f.getHighlightedValue(e,"lvl6")]).join('<span class="aa-suggestion-title-separator" aria-hidden="true"> \u203a </span>'),s=f.getSnippetedValue(e,"content"),o=i&&""!==i||r&&""!==r,a=!i||""===i||i===n,u=r&&""!==r&&r!==i,c=!u&&i&&""!==i&&i!==n,l=!c&&!u,h=e.version;return{isLvl0:l,isLvl1:c,isLvl2:u,isLvl1EmptyOrDuplicate:a,isCategoryHeader:e.isCategoryHeader,isSubCategoryHeader:e.isSubCategoryHeader,isTextOrSubcategoryNonEmpty:o,category:n,subcategory:i,title:r,text:s,url:t,version:h}}))}static formatURL(e){const{url:t,anchor:n}=e;if(t){return-1!==t.indexOf("#")?t:n?`${e.url}#${e.anchor}`:t}return n?`#${e.anchor}`:(console.warn("no anchor nor url for : ",JSON.stringify(e)),null)}static getEmptyTemplate(){return e=>r().compile(h.empty).render(e)}static getSuggestionTemplate(e){const t=e?h.suggestionSimple:h.suggestion,n=r().compile(t);return e=>n.render(e)}handleSelected(e,t,n,i,r){void 0===r&&(r={}),"click"!==r.selectionMethod&&(e.setVal(""),window.location.assign(n.url))}handleShown(e){const t=e.offset().left+e.width()/2;let n=d()(document).width()/2;isNaN(n)&&(n=900);const i=t-n>=0?"algolia-autocomplete-right":"algolia-autocomplete-left",r=t-n<0?"algolia-autocomplete-right":"algolia-autocomplete-left",s=d()(".algolia-autocomplete");s.hasClass(i)||s.addClass(i),s.hasClass(r)&&s.removeClass(r)}}const m=g},29110:(e,t)=>{!function(e){var t=/\S/,n=/\"/g,i=/\n/g,r=/\r/g,s=/\\/g,o=/\u2028/,a=/\u2029/;function u(e){"}"===e.n.substr(e.n.length-1)&&(e.n=e.n.substring(0,e.n.length-1))}function c(e){return e.trim?e.trim():e.replace(/^\s*|\s*$/g,"")}function l(e,t,n){if(t.charAt(n)!=e.charAt(0))return!1;for(var i=1,r=e.length;i<r;i++)if(t.charAt(n+i)!=e.charAt(i))return!1;return!0}e.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},e.scan=function(n,i){var r=n.length,s=0,o=null,a=null,h="",p=[],d=!1,f=0,g=0,m="{{",y="}}";function v(){h.length>0&&(p.push({tag:"_t",text:new String(h)}),h="")}function x(n,i){if(v(),n&&function(){for(var n=!0,i=g;i<p.length;i++)if(!(n=e.tags[p[i].tag]<e.tags._v||"_t"==p[i].tag&&null===p[i].text.match(t)))return!1;return n}())for(var r,s=g;s<p.length;s++)p[s].text&&((r=p[s+1])&&">"==r.tag&&(r.indent=p[s].text.toString()),p.splice(s,1));else i||p.push({tag:"\n"});d=!1,g=p.length}function b(e,t){var n="="+y,i=e.indexOf(n,t),r=c(e.substring(e.indexOf("=",t)+1,i)).split(" ");return m=r[0],y=r[r.length-1],i+n.length-1}for(i&&(i=i.split(" "),m=i[0],y=i[1]),f=0;f<r;f++)0==s?l(m,n,f)?(--f,v(),s=1):"\n"==n.charAt(f)?x(d):h+=n.charAt(f):1==s?(f+=m.length-1,"="==(o=(a=e.tags[n.charAt(f+1)])?n.charAt(f+1):"_v")?(f=b(n,f),s=0):(a&&f++,s=2),d=f):l(y,n,f)?(p.push({tag:o,n:c(h),otag:m,ctag:y,i:"/"==o?d-m.length:f+y.length}),h="",f+=y.length-1,s=0,"{"==o&&("}}"==y?f++:u(p[p.length-1]))):h+=n.charAt(f);return x(d,!0),p};var h={_t:!0,"\n":!0,$:!0,"/":!0};function p(t,n,i,r){var s,o=[],a=null,u=null;for(s=i[i.length-1];t.length>0;){if(u=t.shift(),s&&"<"==s.tag&&!(u.tag in h))throw new Error("Illegal content in < super tag.");if(e.tags[u.tag]<=e.tags.$||d(u,r))i.push(u),u.nodes=p(t,u.tag,i,r);else{if("/"==u.tag){if(0===i.length)throw new Error("Closing tag without opener: /"+u.n);if(a=i.pop(),u.n!=a.n&&!f(u.n,a.n,r))throw new Error("Nesting error: "+a.n+" vs. "+u.n);return a.end=u.i,o}"\n"==u.tag&&(u.last=0==t.length||"\n"==t[0].tag)}o.push(u)}if(i.length>0)throw new Error("missing closing tag: "+i.pop().n);return o}function d(e,t){for(var n=0,i=t.length;n<i;n++)if(t[n].o==e.n)return e.tag="#",!0}function f(e,t,n){for(var i=0,r=n.length;i<r;i++)if(n[i].c==e&&n[i].o==t)return!0}function g(e){var t=[];for(var n in e.partials)t.push('"'+y(n)+'":{name:"'+y(e.partials[n].name)+'", '+g(e.partials[n])+"}");return"partials: {"+t.join(",")+"}, subs: "+function(e){var t=[];for(var n in e)t.push('"'+y(n)+'": function(c,p,t,i) {'+e[n]+"}");return"{ "+t.join(",")+" }"}(e.subs)}e.stringify=function(t,n,i){return"{code: function (c,p,i) { "+e.wrapMain(t.code)+" },"+g(t)+"}"};var m=0;function y(e){return e.replace(s,"\\\\").replace(n,'\\"').replace(i,"\\n").replace(r,"\\r").replace(o,"\\u2028").replace(a,"\\u2029")}function v(e){return~e.indexOf(".")?"d":"f"}function x(e,t){var n="<"+(t.prefix||"")+e.n+m++;return t.partials[n]={name:e.n,partials:{}},t.code+='t.b(t.rp("'+y(n)+'",c,p,"'+(e.indent||"")+'"));',n}function b(e,t){t.code+="t.b(t.t(t."+v(e.n)+'("'+y(e.n)+'",c,p,0)));'}function w(e){return"t.b("+e+");"}e.generate=function(t,n,i){m=0;var r={code:"",subs:{},partials:{}};return e.walk(t,r),i.asString?this.stringify(r,n,i):this.makeTemplate(r,n,i)},e.wrapMain=function(e){return'var t=this;t.b(i=i||"");'+e+"return t.fl();"},e.template=e.Template,e.makeTemplate=function(e,t,n){var i=this.makePartials(e);return i.code=new Function("c","p","i",this.wrapMain(e.code)),new this.template(i,t,this,n)},e.makePartials=function(e){var t,n={subs:{},partials:e.partials,name:e.name};for(t in n.partials)n.partials[t]=this.makePartials(n.partials[t]);for(t in e.subs)n.subs[t]=new Function("c","p","t","i",e.subs[t]);return n},e.codegen={"#":function(t,n){n.code+="if(t.s(t."+v(t.n)+'("'+y(t.n)+'",c,p,1),c,p,0,'+t.i+","+t.end+',"'+t.otag+" "+t.ctag+'")){t.rs(c,p,function(c,p,t){',e.walk(t.nodes,n),n.code+="});c.pop();}"},"^":function(t,n){n.code+="if(!t.s(t."+v(t.n)+'("'+y(t.n)+'",c,p,1),c,p,1,0,0,"")){',e.walk(t.nodes,n),n.code+="};"},">":x,"<":function(t,n){var i={partials:{},code:"",subs:{},inPartial:!0};e.walk(t.nodes,i);var r=n.partials[x(t,n)];r.subs=i.subs,r.partials=i.partials},$:function(t,n){var i={subs:{},code:"",partials:n.partials,prefix:t.n};e.walk(t.nodes,i),n.subs[t.n]=i.code,n.inPartial||(n.code+='t.sub("'+y(t.n)+'",c,p,i);')},"\n":function(e,t){t.code+=w('"\\n"'+(e.last?"":" + i"))},_v:function(e,t){t.code+="t.b(t.v(t."+v(e.n)+'("'+y(e.n)+'",c,p,0)));'},_t:function(e,t){t.code+=w('"'+y(e.text)+'"')},"{":b,"&":b},e.walk=function(t,n){for(var i,r=0,s=t.length;r<s;r++)(i=e.codegen[t[r].tag])&&i(t[r],n);return n},e.parse=function(e,t,n){return p(e,0,[],(n=n||{}).sectionTags||[])},e.cache={},e.cacheKey=function(e,t){return[e,!!t.asString,!!t.disableLambda,t.delimiters,!!t.modelGet].join("||")},e.compile=function(t,n){n=n||{};var i=e.cacheKey(t,n),r=this.cache[i];if(r){var s=r.partials;for(var o in s)delete s[o].instance;return r}return r=this.generate(this.parse(this.scan(t,n.delimiters),t,n),t,n),this.cache[i]=r}}(t)},34714:(e,t,n)=>{var i=n(29110);i.Template=n(59549).Template,i.template=i.Template,e.exports=i},59549:(e,t)=>{!function(e){function t(e,t,n){var i;return t&&"object"==typeof t&&(void 0!==t[e]?i=t[e]:n&&t.get&&"function"==typeof t.get&&(i=t.get(e))),i}e.Template=function(e,t,n,i){e=e||{},this.r=e.code||this.r,this.c=n,this.options=i||{},this.text=t||"",this.partials=e.partials||{},this.subs=e.subs||{},this.buf=""},e.Template.prototype={r:function(e,t,n){return""},v:function(e){return e=u(e),a.test(e)?e.replace(n,"&").replace(i,"<").replace(r,">").replace(s,"'").replace(o,"""):e},t:u,render:function(e,t,n){return this.ri([e],t||{},n)},ri:function(e,t,n){return this.r(e,t,n)},ep:function(e,t){var n=this.partials[e],i=t[n.name];if(n.instance&&n.base==i)return n.instance;if("string"==typeof i){if(!this.c)throw new Error("No compiler available.");i=this.c.compile(i,this.options)}if(!i)return null;if(this.partials[e].base=i,n.subs){for(key in t.stackText||(t.stackText={}),n.subs)t.stackText[key]||(t.stackText[key]=void 0!==this.activeSub&&t.stackText[this.activeSub]?t.stackText[this.activeSub]:this.text);i=function(e,t,n,i,r,s){function o(){}function a(){}var u;o.prototype=e,a.prototype=e.subs;var c=new o;for(u in c.subs=new a,c.subsText={},c.buf="",i=i||{},c.stackSubs=i,c.subsText=s,t)i[u]||(i[u]=t[u]);for(u in i)c.subs[u]=i[u];for(u in r=r||{},c.stackPartials=r,n)r[u]||(r[u]=n[u]);for(u in r)c.partials[u]=r[u];return c}(i,n.subs,n.partials,this.stackSubs,this.stackPartials,t.stackText)}return this.partials[e].instance=i,i},rp:function(e,t,n,i){var r=this.ep(e,n);return r?r.ri(t,n,i):""},rs:function(e,t,n){var i=e[e.length-1];if(c(i))for(var r=0;r<i.length;r++)e.push(i[r]),n(e,t,this),e.pop();else n(e,t,this)},s:function(e,t,n,i,r,s,o){var a;return(!c(e)||0!==e.length)&&("function"==typeof e&&(e=this.ms(e,t,n,i,r,s,o)),a=!!e,!i&&a&&t&&t.push("object"==typeof e?e:t[t.length-1]),a)},d:function(e,n,i,r){var s,o=e.split("."),a=this.f(o[0],n,i,r),u=this.options.modelGet,l=null;if("."===e&&c(n[n.length-2]))a=n[n.length-1];else for(var h=1;h<o.length;h++)void 0!==(s=t(o[h],a,u))?(l=a,a=s):a="";return!(r&&!a)&&(r||"function"!=typeof a||(n.push(l),a=this.mv(a,n,i),n.pop()),a)},f:function(e,n,i,r){for(var s=!1,o=!1,a=this.options.modelGet,u=n.length-1;u>=0;u--)if(void 0!==(s=t(e,n[u],a))){o=!0;break}return o?(r||"function"!=typeof s||(s=this.mv(s,n,i)),s):!r&&""},ls:function(e,t,n,i,r){var s=this.options.delimiters;return this.options.delimiters=r,this.b(this.ct(u(e.call(t,i)),t,n)),this.options.delimiters=s,!1},ct:function(e,t,n){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(e,this.options).render(t,n)},b:function(e){this.buf+=e},fl:function(){var e=this.buf;return this.buf="",e},ms:function(e,t,n,i,r,s,o){var a,u=t[t.length-1],c=e.call(u);return"function"==typeof c?!!i||(a=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(c,u,n,a.substring(r,s),o)):c},mv:function(e,t,n){var i=t[t.length-1],r=e.call(i);return"function"==typeof r?this.ct(u(r.call(i)),i,n):r},sub:function(e,t,n,i){var r=this.subs[e];r&&(this.activeSub=e,r(t,n,this,i),this.activeSub=!1)}};var n=/&/g,i=/</g,r=/>/g,s=/\'/g,o=/\"/g,a=/[&<>\"\']/;function u(e){return String(null==e?"":e)}var c=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}}(t)},90874:(e,t,n)=>{"use strict";var i,r,s,o=[n(45741),n(91856),n(41015),n(16486),n(45723),n(26345)],a=-1,u=[],c=!1;function l(){i&&r&&(i=!1,r.length?u=r.concat(u):a=-1,u.length&&h())}function h(){if(!i){c=!1,i=!0;for(var e=u.length,t=setTimeout(l);e;){for(r=u,u=[];r&&++a<e;)r[a].run();a=-1,e=u.length}r=null,a=-1,i=!1,clearTimeout(t)}}for(var p=-1,d=o.length;++p<d;)if(o[p]&&o[p].test&&o[p].test()){s=o[p].install(h);break}function f(e,t){this.fun=e,this.array=t}f.prototype.run=function(){var e=this.fun,t=this.array;switch(t.length){case 0:return e();case 1:return e(t[0]);case 2:return e(t[0],t[1]);case 3:return e(t[0],t[1],t[2]);default:return e.apply(null,t)}},e.exports=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new f(e,t)),c||i||(c=!0,s())}},16486:(e,t,n)=>{"use strict";t.test=function(){return!n.g.setImmediate&&void 0!==n.g.MessageChannel},t.install=function(e){var t=new n.g.MessageChannel;return t.port1.onmessage=e,function(){t.port2.postMessage(0)}}},41015:(e,t,n)=>{"use strict";var i=n.g.MutationObserver||n.g.WebKitMutationObserver;t.test=function(){return i},t.install=function(e){var t=0,r=new i(e),s=n.g.document.createTextNode("");return r.observe(s,{characterData:!0}),function(){s.data=t=++t%2}}},91856:(e,t,n)=>{"use strict";t.test=function(){return"function"==typeof n.g.queueMicrotask},t.install=function(e){return function(){n.g.queueMicrotask(e)}}},45723:(e,t,n)=>{"use strict";t.test=function(){return"document"in n.g&&"onreadystatechange"in n.g.document.createElement("script")},t.install=function(e){return function(){var t=n.g.document.createElement("script");return t.onreadystatechange=function(){e(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},n.g.document.documentElement.appendChild(t),e}}},26345:(e,t)=>{"use strict";t.test=function(){return!0},t.install=function(e){return function(){setTimeout(e,0)}}},58291:(e,t,n)=>{var i,r;!function(){var s,o,a,u,c,l,h,p,d,f,g,m,y,v,x,b,w,S,C,E,k,_,T,L,O,A,$,P,I,Q,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(s=this,function(e){s.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),i=0;i<n.length;i++){var r=n[i],s=e[r];if(Array.isArray(s))t[r]=s.slice();else{if("string"!=typeof s&&"number"!=typeof s&&"boolean"!=typeof s)throw new TypeError("clone is not deep and does not support nested objects");t[r]=s}}return t},R.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},R.FieldRef.joiner="/",R.FieldRef.fromString=function(e){var t=e.indexOf(R.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),i=e.slice(t+1);return new R.FieldRef(i,n,e)},R.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+R.FieldRef.joiner+this.docRef),this._stringValue},R.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},R.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},R.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},R.Set.prototype.contains=function(e){return!!this.elements[e]},R.Set.prototype.intersect=function(e){var t,n,i,r=[];if(e===R.Set.complete)return this;if(e===R.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),i=Object.keys(t.elements);for(var s=0;s<i.length;s++){var o=i[s];o in n.elements&&r.push(o)}return new R.Set(r)},R.Set.prototype.union=function(e){return e===R.Set.complete?R.Set.complete:e===R.Set.empty?this:new R.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},R.idf=function(e,t){var n=0;for(var i in e)"_index"!=i&&(n+=Object.keys(e[i]).length);var r=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(r))},R.Token=function(e,t){this.str=e||"",this.metadata=t||{}},R.Token.prototype.toString=function(){return this.str},R.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},R.Token.prototype.clone=function(e){return e=e||function(e){return e},new R.Token(e(this.str,this.metadata),this.metadata)},R.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new R.Token(R.utils.asString(e).toLowerCase(),R.utils.clone(t))}));for(var n=e.toString().toLowerCase(),i=n.length,r=[],s=0,o=0;s<=i;s++){var a=s-o;if(n.charAt(s).match(R.tokenizer.separator)||s==i){if(a>0){var u=R.utils.clone(t)||{};u.position=[o,a],u.index=r.length,r.push(new R.Token(n.slice(o,s),u))}o=s+1}}return r},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var i=this._stack[n],r=[],s=0;s<e.length;s++){var o=i(e[s],s,e);if(null!=o&&""!==o)if(Array.isArray(o))for(var a=0;a<o.length;a++)r.push(o[a]);else r.push(o)}e=r}return e},R.Pipeline.prototype.runString=function(e,t){var n=new R.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},R.Pipeline.prototype.reset=function(){this._stack=[]},R.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return R.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},R.Vector=function(e){this._magnitude=0,this.elements=e||[]},R.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,i=n-t,r=Math.floor(i/2),s=this.elements[2*r];i>1&&(s<e&&(t=r),s>e&&(n=r),s!=e);)i=n-t,r=t+Math.floor(i/2),s=this.elements[2*r];return s==e||s>e?2*r:s<e?2*(r+1):void 0},R.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},R.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var i=this.positionForIndex(e);this.elements[i]==e?this.elements[i+1]=n(this.elements[i+1],t):this.elements.splice(i,0,e,t)},R.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var i=this.elements[n];e+=i*i}return this._magnitude=Math.sqrt(e)},R.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,i=e.elements,r=n.length,s=i.length,o=0,a=0,u=0,c=0;u<r&&c<s;)(o=n[u])<(a=i[c])?u+=2:o>a?c+=2:o==a&&(t+=n[u+1]*i[c+1],u+=2,c+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},R.Vector.prototype.toJSON=function(){return this.elements},R.stemmer=(o={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},a={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},h="^("+(c="[^aeiou][^aeiouy]*")+")?"+(l=(u="[aeiouy]")+"[aeiou]*")+c+"("+l+")?$",p="^("+c+")?"+l+c+l+c,d="^("+c+")?"+u,f=new RegExp("^("+c+")?"+l+c),g=new RegExp(p),m=new RegExp(h),y=new RegExp(d),v=/^(.+?)(ss|i)es$/,x=/^(.+?)([^s])s$/,b=/^(.+?)eed$/,w=/^(.+?)(ed|ing)$/,S=/.$/,C=/(at|bl|iz)$/,E=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+c+u+"[^aeiouwxy]$"),_=/^(.+?[^aeiou])y$/,T=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,L=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,O=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,A=/^(.+?)(s|t)(ion)$/,$=/^(.+?)e$/,P=/ll$/,I=new RegExp("^"+c+u+"[^aeiouwxy]$"),Q=function(e){var t,n,i,r,s,u,c;if(e.length<3)return e;if("y"==(i=e.substr(0,1))&&(e=i.toUpperCase()+e.substr(1)),s=x,(r=v).test(e)?e=e.replace(r,"$1$2"):s.test(e)&&(e=e.replace(s,"$1$2")),s=w,(r=b).test(e)){var l=r.exec(e);(r=f).test(l[1])&&(r=S,e=e.replace(r,""))}else s.test(e)&&(t=(l=s.exec(e))[1],(s=y).test(t)&&(u=E,c=k,(s=C).test(e=t)?e+="e":u.test(e)?(r=S,e=e.replace(r,"")):c.test(e)&&(e+="e")));return(r=_).test(e)&&(e=(t=(l=r.exec(e))[1])+"i"),(r=T).test(e)&&(t=(l=r.exec(e))[1],n=l[2],(r=f).test(t)&&(e=t+o[n])),(r=L).test(e)&&(t=(l=r.exec(e))[1],n=l[2],(r=f).test(t)&&(e=t+a[n])),s=A,(r=O).test(e)?(t=(l=r.exec(e))[1],(r=g).test(t)&&(e=t)):s.test(e)&&(t=(l=s.exec(e))[1]+l[2],(s=g).test(t)&&(e=t)),(r=$).test(e)&&(t=(l=r.exec(e))[1],s=m,u=I,((r=g).test(t)||s.test(t)&&!u.test(t))&&(e=t)),s=g,(r=P).test(e)&&s.test(e)&&(r=S,e=e.replace(r,"")),"y"==i&&(e=i.toLowerCase()+e.substr(1)),e},function(e){return e.update(Q)}),R.Pipeline.registerFunction(R.stemmer,"stemmer"),R.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},R.stopWordFilter=R.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),R.Pipeline.registerFunction(R.stopWordFilter,"stopWordFilter"),R.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},R.Pipeline.registerFunction(R.trimmer,"trimmer"),R.TokenSet=function(){this.final=!1,this.edges={},this.id=R.TokenSet._nextId,R.TokenSet._nextId+=1},R.TokenSet._nextId=1,R.TokenSet.fromArray=function(e){for(var t=new R.TokenSet.Builder,n=0,i=e.length;n<i;n++)t.insert(e[n]);return t.finish(),t.root},R.TokenSet.fromClause=function(e){return"editDistance"in e?R.TokenSet.fromFuzzyString(e.term,e.editDistance):R.TokenSet.fromString(e.term)},R.TokenSet.fromFuzzyString=function(e,t){for(var n=new R.TokenSet,i=[{node:n,editsRemaining:t,str:e}];i.length;){var r=i.pop();if(r.str.length>0){var s,o=r.str.charAt(0);o in r.node.edges?s=r.node.edges[o]:(s=new R.TokenSet,r.node.edges[o]=s),1==r.str.length&&(s.final=!0),i.push({node:s,editsRemaining:r.editsRemaining,str:r.str.slice(1)})}if(0!=r.editsRemaining){if("*"in r.node.edges)var a=r.node.edges["*"];else{a=new R.TokenSet;r.node.edges["*"]=a}if(0==r.str.length&&(a.final=!0),i.push({node:a,editsRemaining:r.editsRemaining-1,str:r.str}),r.str.length>1&&i.push({node:r.node,editsRemaining:r.editsRemaining-1,str:r.str.slice(1)}),1==r.str.length&&(r.node.final=!0),r.str.length>=1){if("*"in r.node.edges)var u=r.node.edges["*"];else{u=new R.TokenSet;r.node.edges["*"]=u}1==r.str.length&&(u.final=!0),i.push({node:u,editsRemaining:r.editsRemaining-1,str:r.str.slice(1)})}if(r.str.length>1){var c,l=r.str.charAt(0),h=r.str.charAt(1);h in r.node.edges?c=r.node.edges[h]:(c=new R.TokenSet,r.node.edges[h]=c),1==r.str.length&&(c.final=!0),i.push({node:c,editsRemaining:r.editsRemaining-1,str:l+r.str.slice(2)})}}}return n},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,n=t,i=0,r=e.length;i<r;i++){var s=e[i],o=i==r-1;if("*"==s)t.edges[s]=t,t.final=o;else{var a=new R.TokenSet;a.final=o,t.edges[s]=a,t=a}}return n},R.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),i=Object.keys(n.node.edges),r=i.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var s=0;s<r;s++){var o=i[s];t.push({prefix:n.prefix.concat(o),node:n.node.edges[o]})}}return e},R.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,i=0;i<n;i++){var r=t[i];e=e+r+this.edges[r].id}return e},R.TokenSet.prototype.intersect=function(e){for(var t=new R.TokenSet,n=void 0,i=[{qNode:e,output:t,node:this}];i.length;){n=i.pop();for(var r=Object.keys(n.qNode.edges),s=r.length,o=Object.keys(n.node.edges),a=o.length,u=0;u<s;u++)for(var c=r[u],l=0;l<a;l++){var h=o[l];if(h==c||"*"==c){var p=n.node.edges[h],d=n.qNode.edges[c],f=p.final&&d.final,g=void 0;h in n.output.edges?(g=n.output.edges[h]).final=g.final||f:((g=new R.TokenSet).final=f,n.output.edges[h]=g),i.push({qNode:d,output:g,node:p})}}}return t},R.TokenSet.Builder=function(){this.previousWord="",this.root=new R.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},R.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var i=0;i<e.length&&i<this.previousWord.length&&e[i]==this.previousWord[i];i++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(i=n;i<e.length;i++){var r=new R.TokenSet,s=e[i];t.edges[s]=r,this.uncheckedNodes.push({parent:t,char:s,child:r}),t=r}t.final=!0,this.previousWord=e},R.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},R.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),n=Object.create(null),i=Object.create(null),r=Object.create(null),s=Object.create(null),o=Object.create(null),a=0;a<this.fields.length;a++)i[this.fields[a]]=new R.Vector;e.call(t,t);for(a=0;a<t.clauses.length;a++){var u=t.clauses[a],c=null,l=R.Set.empty;c=u.usePipeline?this.pipeline.runString(u.term,{fields:u.fields}):[u.term];for(var h=0;h<c.length;h++){var p=c[h];u.term=p;var d=R.TokenSet.fromClause(u),f=this.tokenSet.intersect(d).toArray();if(0===f.length&&u.presence===R.Query.presence.REQUIRED){for(var g=0;g<u.fields.length;g++){s[$=u.fields[g]]=R.Set.empty}break}for(var m=0;m<f.length;m++){var y=f[m],v=this.invertedIndex[y],x=v._index;for(g=0;g<u.fields.length;g++){var b=v[$=u.fields[g]],w=Object.keys(b),S=y+"/"+$,C=new R.Set(w);if(u.presence==R.Query.presence.REQUIRED&&(l=l.union(C),void 0===s[$]&&(s[$]=R.Set.complete)),u.presence!=R.Query.presence.PROHIBITED){if(i[$].upsert(x,u.boost,(function(e,t){return e+t})),!r[S]){for(var E=0;E<w.length;E++){var k,_=w[E],T=new R.FieldRef(_,$),L=b[_];void 0===(k=n[T])?n[T]=new R.MatchData(y,$,L):k.add(y,$,L)}r[S]=!0}}else void 0===o[$]&&(o[$]=R.Set.empty),o[$]=o[$].union(C)}}}if(u.presence===R.Query.presence.REQUIRED)for(g=0;g<u.fields.length;g++){s[$=u.fields[g]]=s[$].intersect(l)}}var O=R.Set.complete,A=R.Set.empty;for(a=0;a<this.fields.length;a++){var $;s[$=this.fields[a]]&&(O=O.intersect(s[$])),o[$]&&(A=A.union(o[$]))}var P=Object.keys(n),I=[],Q=Object.create(null);if(t.isNegated()){P=Object.keys(this.fieldVectors);for(a=0;a<P.length;a++){T=P[a];var N=R.FieldRef.fromString(T);n[T]=new R.MatchData}}for(a=0;a<P.length;a++){var D=(N=R.FieldRef.fromString(P[a])).docRef;if(O.contains(D)&&!A.contains(D)){var F,j=this.fieldVectors[N],H=i[N.fieldName].similarity(j);if(void 0!==(F=Q[D]))F.score+=H,F.matchData.combine(n[N]);else{var V={ref:D,score:H,matchData:n[N]};Q[D]=V,I.push(V)}}}return I.sort((function(e,t){return t.score-e.score}))},R.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:R.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},R.Index.load=function(e){var t={},n={},i=e.fieldVectors,r=Object.create(null),s=e.invertedIndex,o=new R.TokenSet.Builder,a=R.Pipeline.load(e.pipeline);e.version!=R.version&&R.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+R.version+"' does not match serialized index '"+e.version+"'");for(var u=0;u<i.length;u++){var c=(h=i[u])[0],l=h[1];n[c]=new R.Vector(l)}for(u=0;u<s.length;u++){var h,p=(h=s[u])[0],d=h[1];o.insert(p),r[p]=d}return o.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=r,t.tokenSet=o.root,t.pipeline=a,new R.Index(t)},R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var r=0;r<i.length;r++){var s=i[r],o=this._fields[s].extractor,a=o?o(e):e[s],u=this.tokenizer(a,{fields:[s]}),c=this.pipeline.run(u),l=new R.FieldRef(n,s),h=Object.create(null);this.fieldTermFrequencies[l]=h,this.fieldLengths[l]=0,this.fieldLengths[l]+=c.length;for(var p=0;p<c.length;p++){var d=c[p];if(null==h[d]&&(h[d]=0),h[d]+=1,null==this.invertedIndex[d]){var f=Object.create(null);f._index=this.termIndex,this.termIndex+=1;for(var g=0;g<i.length;g++)f[i[g]]=Object.create(null);this.invertedIndex[d]=f}null==this.invertedIndex[d][s][n]&&(this.invertedIndex[d][s][n]=Object.create(null));for(var m=0;m<this.metadataWhitelist.length;m++){var y=this.metadataWhitelist[m],v=d.metadata[y];null==this.invertedIndex[d][s][n][y]&&(this.invertedIndex[d][s][n][y]=[]),this.invertedIndex[d][s][n][y].push(v)}}}},R.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},i={},r=0;r<t;r++){var s=R.FieldRef.fromString(e[r]),o=s.fieldName;i[o]||(i[o]=0),i[o]+=1,n[o]||(n[o]=0),n[o]+=this.fieldLengths[s]}var a=Object.keys(this._fields);for(r=0;r<a.length;r++){var u=a[r];n[u]=n[u]/i[u]}this.averageFieldLength=n},R.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,i=Object.create(null),r=0;r<n;r++){for(var s=R.FieldRef.fromString(t[r]),o=s.fieldName,a=this.fieldLengths[s],u=new R.Vector,c=this.fieldTermFrequencies[s],l=Object.keys(c),h=l.length,p=this._fields[o].boost||1,d=this._documents[s.docRef].boost||1,f=0;f<h;f++){var g,m,y,v=l[f],x=c[v],b=this.invertedIndex[v]._index;void 0===i[v]?(g=R.idf(this.invertedIndex[v],this.documentCount),i[v]=g):g=i[v],m=g*((this._k1+1)*x)/(this._k1*(1-this._b+this._b*(a/this.averageFieldLength[o]))+x),m*=p,m*=d,y=Math.round(1e3*m)/1e3,u.insert(b,y)}e[s]=u}this.fieldVectors=e},R.Builder.prototype.createTokenSet=function(){this.tokenSet=R.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},R.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new R.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},R.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},R.MatchData=function(e,t,n){for(var i=Object.create(null),r=Object.keys(n||{}),s=0;s<r.length;s++){var o=r[s];i[o]=n[o].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=i)},R.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var i=t[n],r=Object.keys(e.metadata[i]);null==this.metadata[i]&&(this.metadata[i]=Object.create(null));for(var s=0;s<r.length;s++){var o=r[s],a=Object.keys(e.metadata[i][o]);null==this.metadata[i][o]&&(this.metadata[i][o]=Object.create(null));for(var u=0;u<a.length;u++){var c=a[u];null==this.metadata[i][o][c]?this.metadata[i][o][c]=e.metadata[i][o][c]:this.metadata[i][o][c]=this.metadata[i][o][c].concat(e.metadata[i][o][c])}}}},R.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var i=Object.keys(n),r=0;r<i.length;r++){var s=i[r];s in this.metadata[e][t]?this.metadata[e][t][s]=this.metadata[e][t][s].concat(n[s]):this.metadata[e][t][s]=n[s]}else this.metadata[e][t]=n},R.Query=function(e){this.clauses=[],this.allFields=e},R.Query.wildcard=new String("*"),R.Query.wildcard.NONE=0,R.Query.wildcard.LEADING=1,R.Query.wildcard.TRAILING=2,R.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},R.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=R.Query.wildcard.NONE),e.wildcard&R.Query.wildcard.LEADING&&e.term.charAt(0)!=R.Query.wildcard&&(e.term="*"+e.term),e.wildcard&R.Query.wildcard.TRAILING&&e.term.slice(-1)!=R.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=R.Query.presence.OPTIONAL),this.clauses.push(e),this},R.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=R.Query.presence.PROHIBITED)return!1;return!0},R.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,R.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},R.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},R.QueryParseError.prototype=new Error,R.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},R.QueryLexer.prototype.run=function(){for(var e=R.QueryLexer.lexText;e;)e=e(this)},R.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,i=0;i<this.escapeCharPositions.length;i++)n=this.escapeCharPositions[i],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},R.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},R.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},R.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos<this.length},R.QueryLexer.EOS="EOS",R.QueryLexer.FIELD="FIELD",R.QueryLexer.TERM="TERM",R.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",R.QueryLexer.BOOST="BOOST",R.QueryLexer.PRESENCE="PRESENCE",R.QueryLexer.lexField=function(e){return e.backup(),e.emit(R.QueryLexer.FIELD),e.ignore(),R.QueryLexer.lexText},R.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var i=e.peekLexeme();if(null==i){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(i.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),i="unrecognised field '"+t.str+"', possible fields: "+n;throw new R.QueryParseError(i,t.start,t.end)}e.currentClause.fields=[t.str];var r=e.peekLexeme();if(null==r){i="expecting term, found nothing";throw new R.QueryParseError(i,t.start,t.end)}if(r.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;i="expecting term, found '"+r.type+"'";throw new R.QueryParseError(i,r.start,r.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(i,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new R.QueryParseError(i,t.start,t.end)}e.currentClause.editDistance=n;var r=e.peekLexeme();if(null!=r)switch(r.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:i="Unexpected lexeme type '"+r.type+"'";throw new R.QueryParseError(i,r.start,r.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var i="boost must be numeric";throw new R.QueryParseError(i,t.start,t.end)}e.currentClause.boost=n;var r=e.peekLexeme();if(null!=r)switch(r.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:i="Unexpected lexeme type '"+r.type+"'";throw new R.QueryParseError(i,r.start,r.end)}else e.nextClause()}},void 0===(r="function"==typeof(i=function(){return R})?i.call(t,n,t,e):i)||(e.exports=r)}()}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8591.54a6cd4d.js.LICENSE.txt b/pr-preview/pr-1594/assets/js/8591.54a6cd4d.js.LICENSE.txt deleted file mode 100644 index 1cf473c23c..0000000000 --- a/pr-preview/pr-1594/assets/js/8591.54a6cd4d.js.LICENSE.txt +++ /dev/null @@ -1,61 +0,0 @@ -/*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ - -/*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - */ - -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - */ diff --git a/pr-preview/pr-1594/assets/js/8635.2c31446f.js b/pr-preview/pr-1594/assets/js/8635.2c31446f.js deleted file mode 100644 index 635723d79b..0000000000 --- a/pr-preview/pr-1594/assets/js/8635.2c31446f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8635],{18635:(e,t,l)=>{l.d(t,{diagram:()=>f});var n=l(63626),a=l(26312),o=l(697),i=l(99702),s=l(35364);l(74353),l(16750),l(42838),l(21176),l(14075);const d=e=>i.e.sanitizeText(e,(0,i.c)());let r={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const c=function(e,t,l,n,a){const o=Object.keys(e);i.l.info("keys:",o),i.l.info(e),o.filter((t=>e[t].parent==a)).forEach((function(l){var o,s;const r=e[l],c=r.cssClasses.join(" "),p=(0,i.k)(r.styles),b=r.label??r.id,f={labelStyle:p.labelStyle,shape:"class_box",labelText:d(b),classData:r,rx:0,ry:0,class:c,style:p.style,id:r.id,domId:r.domId,tooltip:n.db.getTooltip(r.id,a)||"",haveCallback:r.haveCallback,link:r.link,width:"group"===r.type?500:void 0,type:r.type,padding:(null==(o=(0,i.c)().flowchart)?void 0:o.padding)??(null==(s=(0,i.c)().class)?void 0:s.padding)};t.setNode(r.id,f),a&&t.setParent(r.id,a),i.l.info("setNode",f)}))};function p(e){let t;switch(e){case 0:t="aggregation";break;case 1:t="extension";break;case 2:t="composition";break;case 3:t="dependency";break;case 4:t="lollipop";break;default:t="none"}return t}const b={setConf:function(e){r={...r,...e}},draw:async function(e,t,l,n){i.l.info("Drawing class - ",t);const b=(0,i.c)().flowchart??(0,i.c)().class,f=(0,i.c)().securityLevel;i.l.info("config:",b);const y=(null==b?void 0:b.nodeSpacing)??50,u=(null==b?void 0:b.rankSpacing)??50,g=new o.T({multigraph:!0,compound:!0}).setGraph({rankdir:n.db.getDirection(),nodesep:y,ranksep:u,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),h=n.db.getNamespaces(),v=n.db.getClasses(),w=n.db.getRelations(),k=n.db.getNotes();let x;i.l.info(w),function(e,t,l,n){const a=Object.keys(e);i.l.info("keys:",a),i.l.info(e),a.forEach((function(a){var o,s;const r=e[a],p={shape:"rect",id:r.id,domId:r.domId,labelText:d(r.id),labelStyle:"",style:"fill: none; stroke: black",padding:(null==(o=(0,i.c)().flowchart)?void 0:o.padding)??(null==(s=(0,i.c)().class)?void 0:s.padding)};t.setNode(r.id,p),c(r.classes,t,l,n,r.id),i.l.info("setNode",p)}))}(h,g,t,n),c(v,g,t,n),function(e,t){const l=(0,i.c)().flowchart;let n=0;e.forEach((function(e){var o;n++;const s={classes:"relation",pattern:1==e.relation.lineType?"dashed":"solid",id:`id_${e.id1}_${e.id2}_${n}`,arrowhead:"arrow_open"===e.type?"none":"normal",startLabelRight:"none"===e.relationTitle1?"":e.relationTitle1,endLabelLeft:"none"===e.relationTitle2?"":e.relationTitle2,arrowTypeStart:p(e.relation.type1),arrowTypeEnd:p(e.relation.type2),style:"fill:none",labelStyle:"",curve:(0,i.n)(null==l?void 0:l.curve,a.lUB)};if(i.l.info(s,e),void 0!==e.style){const t=(0,i.k)(e.style);s.style=t.style,s.labelStyle=t.labelStyle}e.text=e.title,void 0===e.text?void 0!==e.style&&(s.arrowheadStyle="fill: #333"):(s.arrowheadStyle="fill: #333",s.labelpos="c",(null==(o=(0,i.c)().flowchart)?void 0:o.htmlLabels)??(0,i.c)().htmlLabels?(s.labelType="html",s.label='<span class="edgeLabel">'+e.text+"</span>"):(s.labelType="text",s.label=e.text.replace(i.e.lineBreakRegex,"\n"),void 0===e.style&&(s.style=s.style||"stroke: #333; stroke-width: 1.5px;fill:none"),s.labelStyle=s.labelStyle.replace("color:","fill:"))),t.setEdge(e.id1,e.id2,s,n)}))}(w,g),function(e,t,l,n){i.l.info(e),e.forEach((function(e,o){var s,c;const p=e,b="",f="",y=p.text,u={labelStyle:b,shape:"note",labelText:d(y),noteData:p,rx:0,ry:0,class:"",style:f,id:p.id,domId:p.id,tooltip:"",type:"note",padding:(null==(s=(0,i.c)().flowchart)?void 0:s.padding)??(null==(c=(0,i.c)().class)?void 0:c.padding)};if(t.setNode(p.id,u),i.l.info("setNode",u),!p.class||!(p.class in n))return;const g=l+o,h={id:`edgeNote${g}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:(0,i.n)(r.curve,a.lUB)};t.setEdge(p.id,p.class,h,g)}))}(k,g,w.length+1,v),"sandbox"===f&&(x=(0,a.Ltv)("#i"+t));const m="sandbox"===f?(0,a.Ltv)(x.nodes()[0].contentDocument.body):(0,a.Ltv)("body"),T=m.select(`[id="${t}"]`),S=m.select("#"+t+" g");if(await(0,s.r)(S,g,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",t),i.u.insertTitle(T,"classTitleText",(null==b?void 0:b.titleTopMargin)??5,n.db.getDiagramTitle()),(0,i.o)(g,T,null==b?void 0:b.diagramPadding,null==b?void 0:b.useMaxWidth),!(null==b?void 0:b.htmlLabels)){const e="sandbox"===f?x.nodes()[0].contentDocument:document,l=e.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of l){const l=t.getBBox(),n=e.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",l.width),n.setAttribute("height",l.height),t.insertBefore(n,t.firstChild)}}}},f={parser:n.p,db:n.d,renderer:b,styles:n.s,init:e=>{e.class||(e.class={}),e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute,n.d.clear()}}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/869.3cca42c0.js b/pr-preview/pr-1594/assets/js/869.3cca42c0.js deleted file mode 100644 index 161af88a4c..0000000000 --- a/pr-preview/pr-1594/assets/js/869.3cca42c0.js +++ /dev/null @@ -1,2105 +0,0 @@ -exports.id = 869; -exports.ids = [869]; -exports.modules = { - -/***/ 97375: -/***/ (function(module) { - -!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case"Q":return Math.ceil((t.$M+1)/3);case"Do":return r.ordinal(t.$D);case"gggg":return t.weekYear();case"GGGG":return t.isoWeekYear();case"wo":return r.ordinal(t.week(),"W");case"w":case"ww":return s.s(t.week(),"w"===e?1:2,"0");case"W":case"WW":return s.s(t.isoWeek(),"W"===e?1:2,"0");case"k":case"kk":return s.s(String(0===t.$H?24:t.$H),"k"===e?1:2,"0");case"X":return Math.floor(t.$d.getTime()/1e3);case"x":return t.$d.getTime();case"z":return"["+t.offsetName()+"]";case"zzz":return"["+t.offsetName("long")+"]";default:return e}}));return n.bind(this)(a)}}})); - -/***/ }), - -/***/ 90445: -/***/ (function(module) { - -!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,r=/\d\d?/,i=/\d*[^-_:/,()\s\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\d\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:"+"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?"pm":"PM");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[r,a("seconds")],ss:[r,a("seconds")],m:[r,a("minutes")],mm:[r,a("minutes")],H:[r,a("hours")],h:[r,a("hours")],HH:[r,a("hours")],hh:[r,a("hours")],D:[r,a("day")],DD:[n,a("day")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\[|\]/g,"")===e&&(this.day=r)}],M:[r,a("month")],MM:[n,a("month")],MMM:[i,function(e){var t=h("months"),n=(h("monthsShort")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\d+/,a("year")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\d{4}/,a("year")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\[|\]$/g,"")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if("string"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,"")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if("string"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if(["x","X"].indexOf(t)>-1)return new Date(("X"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date("")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date("")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(""))}else i.call(this,e)}}})); - -/***/ }), - -/***/ 68313: -/***/ (function(module) { - -!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e="day";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf("year"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,"week")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return"isoweek"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):n.bind(this)(e,t)}}})); - -/***/ }), - -/***/ 8869: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16750); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74353); -/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(68313); -/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90445); -/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(97375); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(26312); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99418); - - - - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [6, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 35, 37], $V1 = [1, 25], $V2 = [1, 26], $V3 = [1, 27], $V4 = [1, 28], $V5 = [1, 29], $V6 = [1, 30], $V7 = [1, 31], $V8 = [1, 9], $V9 = [1, 10], $Va = [1, 11], $Vb = [1, 12], $Vc = [1, 13], $Vd = [1, 14], $Ve = [1, 15], $Vf = [1, 16], $Vg = [1, 18], $Vh = [1, 19], $Vi = [1, 20], $Vj = [1, 21], $Vk = [1, 22], $Vl = [1, 24], $Vm = [1, 32]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "gantt": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NL": 10, "weekday": 11, "weekday_monday": 12, "weekday_tuesday": 13, "weekday_wednesday": 14, "weekday_thursday": 15, "weekday_friday": 16, "weekday_saturday": 17, "weekday_sunday": 18, "dateFormat": 19, "inclusiveEndDates": 20, "topAxis": 21, "axisFormat": 22, "tickInterval": 23, "excludes": 24, "includes": 25, "todayMarker": 26, "title": 27, "acc_title": 28, "acc_title_value": 29, "acc_descr": 30, "acc_descr_value": 31, "acc_descr_multiline_value": 32, "section": 33, "clickStatement": 34, "taskTxt": 35, "taskData": 36, "click": 37, "callbackname": 38, "callbackargs": 39, "href": 40, "clickStatementDebug": 41, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 4: "gantt", 6: "EOF", 8: "SPACE", 10: "NL", 12: "weekday_monday", 13: "weekday_tuesday", 14: "weekday_wednesday", 15: "weekday_thursday", 16: "weekday_friday", 17: "weekday_saturday", 18: "weekday_sunday", 19: "dateFormat", 20: "inclusiveEndDates", 21: "topAxis", 22: "axisFormat", 23: "tickInterval", 24: "excludes", 25: "includes", 26: "todayMarker", 27: "title", 28: "acc_title", 29: "acc_title_value", 30: "acc_descr", 31: "acc_descr_value", 32: "acc_descr_multiline_value", 33: "section", 35: "taskTxt", 36: "taskData", 37: "click", 38: "callbackname", 39: "callbackargs", 40: "href" }, - productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 2], [34, 2], [34, 3], [34, 3], [34, 4], [34, 3], [34, 4], [34, 2], [41, 2], [41, 3], [41, 3], [41, 4], [41, 3], [41, 4], [41, 2]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 1: - return $$[$0 - 1]; - case 2: - this.$ = []; - break; - case 3: - $$[$0 - 1].push($$[$0]); - this.$ = $$[$0 - 1]; - break; - case 4: - case 5: - this.$ = $$[$0]; - break; - case 6: - case 7: - this.$ = []; - break; - case 8: - yy.setWeekday("monday"); - break; - case 9: - yy.setWeekday("tuesday"); - break; - case 10: - yy.setWeekday("wednesday"); - break; - case 11: - yy.setWeekday("thursday"); - break; - case 12: - yy.setWeekday("friday"); - break; - case 13: - yy.setWeekday("saturday"); - break; - case 14: - yy.setWeekday("sunday"); - break; - case 15: - yy.setDateFormat($$[$0].substr(11)); - this.$ = $$[$0].substr(11); - break; - case 16: - yy.enableInclusiveEndDates(); - this.$ = $$[$0].substr(18); - break; - case 17: - yy.TopAxis(); - this.$ = $$[$0].substr(8); - break; - case 18: - yy.setAxisFormat($$[$0].substr(11)); - this.$ = $$[$0].substr(11); - break; - case 19: - yy.setTickInterval($$[$0].substr(13)); - this.$ = $$[$0].substr(13); - break; - case 20: - yy.setExcludes($$[$0].substr(9)); - this.$ = $$[$0].substr(9); - break; - case 21: - yy.setIncludes($$[$0].substr(9)); - this.$ = $$[$0].substr(9); - break; - case 22: - yy.setTodayMarker($$[$0].substr(12)); - this.$ = $$[$0].substr(12); - break; - case 24: - yy.setDiagramTitle($$[$0].substr(6)); - this.$ = $$[$0].substr(6); - break; - case 25: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 26: - case 27: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 28: - yy.addSection($$[$0].substr(8)); - this.$ = $$[$0].substr(8); - break; - case 30: - yy.addTask($$[$0 - 1], $$[$0]); - this.$ = "task"; - break; - case 31: - this.$ = $$[$0 - 1]; - yy.setClickEvent($$[$0 - 1], $$[$0], null); - break; - case 32: - this.$ = $$[$0 - 2]; - yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); - break; - case 33: - this.$ = $$[$0 - 2]; - yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null); - yy.setLink($$[$0 - 2], $$[$0]); - break; - case 34: - this.$ = $$[$0 - 3]; - yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); - yy.setLink($$[$0 - 3], $$[$0]); - break; - case 35: - this.$ = $$[$0 - 2]; - yy.setClickEvent($$[$0 - 2], $$[$0], null); - yy.setLink($$[$0 - 2], $$[$0 - 1]); - break; - case 36: - this.$ = $$[$0 - 3]; - yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]); - yy.setLink($$[$0 - 3], $$[$0 - 2]); - break; - case 37: - this.$ = $$[$0 - 1]; - yy.setLink($$[$0 - 1], $$[$0]); - break; - case 38: - case 44: - this.$ = $$[$0 - 1] + " " + $$[$0]; - break; - case 39: - case 40: - case 42: - this.$ = $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0]; - break; - case 41: - case 43: - this.$ = $$[$0 - 3] + " " + $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0]; - break; - } - }, - table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: $V8, 20: $V9, 21: $Va, 22: $Vb, 23: $Vc, 24: $Vd, 25: $Ve, 26: $Vf, 27: $Vg, 28: $Vh, 30: $Vi, 32: $Vj, 33: $Vk, 34: 23, 35: $Vl, 37: $Vm }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 33, 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: $V8, 20: $V9, 21: $Va, 22: $Vb, 23: $Vc, 24: $Vd, 25: $Ve, 26: $Vf, 27: $Vg, 28: $Vh, 30: $Vi, 32: $Vj, 33: $Vk, 34: 23, 35: $Vl, 37: $Vm }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 15]), o($V0, [2, 16]), o($V0, [2, 17]), o($V0, [2, 18]), o($V0, [2, 19]), o($V0, [2, 20]), o($V0, [2, 21]), o($V0, [2, 22]), o($V0, [2, 23]), o($V0, [2, 24]), { 29: [1, 34] }, { 31: [1, 35] }, o($V0, [2, 27]), o($V0, [2, 28]), o($V0, [2, 29]), { 36: [1, 36] }, o($V0, [2, 8]), o($V0, [2, 9]), o($V0, [2, 10]), o($V0, [2, 11]), o($V0, [2, 12]), o($V0, [2, 13]), o($V0, [2, 14]), { 38: [1, 37], 40: [1, 38] }, o($V0, [2, 4]), o($V0, [2, 25]), o($V0, [2, 26]), o($V0, [2, 30]), o($V0, [2, 31], { 39: [1, 39], 40: [1, 40] }), o($V0, [2, 37], { 38: [1, 41] }), o($V0, [2, 32], { 40: [1, 42] }), o($V0, [2, 33]), o($V0, [2, 35], { 39: [1, 43] }), o($V0, [2, 34]), o($V0, [2, 36])], - defaultActions: {}, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - this.begin("open_directive"); - return "open_directive"; - case 1: - this.begin("acc_title"); - return 28; - case 2: - this.popState(); - return "acc_title_value"; - case 3: - this.begin("acc_descr"); - return 30; - case 4: - this.popState(); - return "acc_descr_value"; - case 5: - this.begin("acc_descr_multiline"); - break; - case 6: - this.popState(); - break; - case 7: - return "acc_descr_multiline_value"; - case 8: - break; - case 9: - break; - case 10: - break; - case 11: - return 10; - case 12: - break; - case 13: - break; - case 14: - this.begin("href"); - break; - case 15: - this.popState(); - break; - case 16: - return 40; - case 17: - this.begin("callbackname"); - break; - case 18: - this.popState(); - break; - case 19: - this.popState(); - this.begin("callbackargs"); - break; - case 20: - return 38; - case 21: - this.popState(); - break; - case 22: - return 39; - case 23: - this.begin("click"); - break; - case 24: - this.popState(); - break; - case 25: - return 37; - case 26: - return 4; - case 27: - return 19; - case 28: - return 20; - case 29: - return 21; - case 30: - return 22; - case 31: - return 23; - case 32: - return 25; - case 33: - return 24; - case 34: - return 26; - case 35: - return 12; - case 36: - return 13; - case 37: - return 14; - case 38: - return 15; - case 39: - return 16; - case 40: - return 17; - case 41: - return 18; - case 42: - return "date"; - case 43: - return 27; - case 44: - return "accDescription"; - case 45: - return 33; - case 46: - return 35; - case 47: - return 36; - case 48: - return ":"; - case 49: - return 6; - case 50: - return "INVALID"; - } - }, - rules: [/^(?:%%\{)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:%%(?!\{)*[^\n]*)/i, /^(?:[^\}]%%*[^\n]*)/i, /^(?:%%*[^\n]*[\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:%[^\n]*)/i, /^(?:href[\s]+["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:call[\s]+)/i, /^(?:\([\s]*\))/i, /^(?:\()/i, /^(?:[^(]*)/i, /^(?:\))/i, /^(?:[^)]*)/i, /^(?:click[\s]+)/i, /^(?:[\s\n])/i, /^(?:[^\s\n]*)/i, /^(?:gantt\b)/i, /^(?:dateFormat\s[^#\n;]+)/i, /^(?:inclusiveEndDates\b)/i, /^(?:topAxis\b)/i, /^(?:axisFormat\s[^#\n;]+)/i, /^(?:tickInterval\s[^#\n;]+)/i, /^(?:includes\s[^#\n;]+)/i, /^(?:excludes\s[^#\n;]+)/i, /^(?:todayMarker\s[^\n;]+)/i, /^(?:weekday\s+monday\b)/i, /^(?:weekday\s+tuesday\b)/i, /^(?:weekday\s+wednesday\b)/i, /^(?:weekday\s+thursday\b)/i, /^(?:weekday\s+friday\b)/i, /^(?:weekday\s+saturday\b)/i, /^(?:weekday\s+sunday\b)/i, /^(?:\d\d\d\d-\d\d-\d\d\b)/i, /^(?:title\s[^\n]+)/i, /^(?:accDescription\s[^#\n;]+)/i, /^(?:section\s[^\n]+)/i, /^(?:[^:\n]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], - conditions: { "acc_descr_multiline": { "rules": [6, 7], "inclusive": false }, "acc_descr": { "rules": [4], "inclusive": false }, "acc_title": { "rules": [2], "inclusive": false }, "callbackargs": { "rules": [21, 22], "inclusive": false }, "callbackname": { "rules": [18, 19, 20], "inclusive": false }, "href": { "rules": [15, 16], "inclusive": false }, "click": { "rules": [24, 25], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 5, 8, 9, 10, 11, 12, 13, 14, 17, 23, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const ganttParser = parser; -dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_2__); -dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_3__); -dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_4__); -let dateFormat = ""; -let axisFormat = ""; -let tickInterval = void 0; -let todayMarker = ""; -let includes = []; -let excludes = []; -let links = {}; -let sections = []; -let tasks = []; -let currentSection = ""; -let displayMode = ""; -const tags = ["active", "done", "crit", "milestone"]; -let funs = []; -let inclusiveEndDates = false; -let topAxis = false; -let weekday = "sunday"; -let lastOrder = 0; -const clear = function() { - sections = []; - tasks = []; - currentSection = ""; - funs = []; - taskCnt = 0; - lastTask = void 0; - lastTaskID = void 0; - rawTasks = []; - dateFormat = ""; - axisFormat = ""; - displayMode = ""; - tickInterval = void 0; - todayMarker = ""; - includes = []; - excludes = []; - inclusiveEndDates = false; - topAxis = false; - lastOrder = 0; - links = {}; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.v)(); - weekday = "sunday"; -}; -const setAxisFormat = function(txt) { - axisFormat = txt; -}; -const getAxisFormat = function() { - return axisFormat; -}; -const setTickInterval = function(txt) { - tickInterval = txt; -}; -const getTickInterval = function() { - return tickInterval; -}; -const setTodayMarker = function(txt) { - todayMarker = txt; -}; -const getTodayMarker = function() { - return todayMarker; -}; -const setDateFormat = function(txt) { - dateFormat = txt; -}; -const enableInclusiveEndDates = function() { - inclusiveEndDates = true; -}; -const endDatesAreInclusive = function() { - return inclusiveEndDates; -}; -const enableTopAxis = function() { - topAxis = true; -}; -const topAxisEnabled = function() { - return topAxis; -}; -const setDisplayMode = function(txt) { - displayMode = txt; -}; -const getDisplayMode = function() { - return displayMode; -}; -const getDateFormat = function() { - return dateFormat; -}; -const setIncludes = function(txt) { - includes = txt.toLowerCase().split(/[\s,]+/); -}; -const getIncludes = function() { - return includes; -}; -const setExcludes = function(txt) { - excludes = txt.toLowerCase().split(/[\s,]+/); -}; -const getExcludes = function() { - return excludes; -}; -const getLinks = function() { - return links; -}; -const addSection = function(txt) { - currentSection = txt; - sections.push(txt); -}; -const getSections = function() { - return sections; -}; -const getTasks = function() { - let allItemsProcessed = compileTasks(); - const maxDepth = 10; - let iterationCount = 0; - while (!allItemsProcessed && iterationCount < maxDepth) { - allItemsProcessed = compileTasks(); - iterationCount++; - } - tasks = rawTasks; - return tasks; -}; -const isInvalidDate = function(date, dateFormat2, excludes2, includes2) { - if (includes2.includes(date.format(dateFormat2.trim()))) { - return false; - } - if (date.isoWeekday() >= 6 && excludes2.includes("weekends")) { - return true; - } - if (excludes2.includes(date.format("dddd").toLowerCase())) { - return true; - } - return excludes2.includes(date.format(dateFormat2.trim())); -}; -const setWeekday = function(txt) { - weekday = txt; -}; -const getWeekday = function() { - return weekday; -}; -const checkTaskDates = function(task, dateFormat2, excludes2, includes2) { - if (!excludes2.length || task.manualEndTime) { - return; - } - let startTime; - if (task.startTime instanceof Date) { - startTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.startTime); - } else { - startTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.startTime, dateFormat2, true); - } - startTime = startTime.add(1, "d"); - let originalEndTime; - if (task.endTime instanceof Date) { - originalEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.endTime); - } else { - originalEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.endTime, dateFormat2, true); - } - const [fixedEndTime, renderEndTime] = fixTaskDates( - startTime, - originalEndTime, - dateFormat2, - excludes2, - includes2 - ); - task.endTime = fixedEndTime.toDate(); - task.renderEndTime = renderEndTime; -}; -const fixTaskDates = function(startTime, endTime, dateFormat2, excludes2, includes2) { - let invalid = false; - let renderEndTime = null; - while (startTime <= endTime) { - if (!invalid) { - renderEndTime = endTime.toDate(); - } - invalid = isInvalidDate(startTime, dateFormat2, excludes2, includes2); - if (invalid) { - endTime = endTime.add(1, "d"); - } - startTime = startTime.add(1, "d"); - } - return [endTime, renderEndTime]; -}; -const getStartDate = function(prevTime, dateFormat2, str) { - str = str.trim(); - const afterRePattern = /^after\s+(?<ids>[\d\w- ]+)/; - const afterStatement = afterRePattern.exec(str); - if (afterStatement !== null) { - let latestTask = null; - for (const id of afterStatement.groups.ids.split(" ")) { - let task = findTaskById(id); - if (task !== void 0 && (!latestTask || task.endTime > latestTask.endTime)) { - latestTask = task; - } - } - if (latestTask) { - return latestTask.endTime; - } - const today = /* @__PURE__ */ new Date(); - today.setHours(0, 0, 0, 0); - return today; - } - let mDate = dayjs__WEBPACK_IMPORTED_MODULE_1__(str, dateFormat2.trim(), true); - if (mDate.isValid()) { - return mDate.toDate(); - } else { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("Invalid date:" + str); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("With date format:" + dateFormat2.trim()); - const d = new Date(str); - if (d === void 0 || isNaN(d.getTime()) || // WebKit browsers can mis-parse invalid dates to be ridiculously - // huge numbers, e.g. new Date('202304') gets parsed as January 1, 202304. - // This can cause virtually infinite loops while rendering, so for the - // purposes of Gantt charts we'll just treat any date beyond 10,000 AD/BC as - // invalid. - d.getFullYear() < -1e4 || d.getFullYear() > 1e4) { - throw new Error("Invalid date:" + str); - } - return d; - } -}; -const parseDuration = function(str) { - const statement = /^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(str.trim()); - if (statement !== null) { - return [Number.parseFloat(statement[1]), statement[2]]; - } - return [NaN, "ms"]; -}; -const getEndDate = function(prevTime, dateFormat2, str, inclusive = false) { - str = str.trim(); - const untilRePattern = /^until\s+(?<ids>[\d\w- ]+)/; - const untilStatement = untilRePattern.exec(str); - if (untilStatement !== null) { - let earliestTask = null; - for (const id of untilStatement.groups.ids.split(" ")) { - let task = findTaskById(id); - if (task !== void 0 && (!earliestTask || task.startTime < earliestTask.startTime)) { - earliestTask = task; - } - } - if (earliestTask) { - return earliestTask.startTime; - } - const today = /* @__PURE__ */ new Date(); - today.setHours(0, 0, 0, 0); - return today; - } - let parsedDate = dayjs__WEBPACK_IMPORTED_MODULE_1__(str, dateFormat2.trim(), true); - if (parsedDate.isValid()) { - if (inclusive) { - parsedDate = parsedDate.add(1, "d"); - } - return parsedDate.toDate(); - } - let endTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(prevTime); - const [durationValue, durationUnit] = parseDuration(str); - if (!Number.isNaN(durationValue)) { - const newEndTime = endTime.add(durationValue, durationUnit); - if (newEndTime.isValid()) { - endTime = newEndTime; - } - } - return endTime.toDate(); -}; -let taskCnt = 0; -const parseId = function(idStr) { - if (idStr === void 0) { - taskCnt = taskCnt + 1; - return "task" + taskCnt; - } - return idStr; -}; -const compileData = function(prevTask, dataStr) { - let ds; - if (dataStr.substr(0, 1) === ":") { - ds = dataStr.substr(1, dataStr.length); - } else { - ds = dataStr; - } - const data = ds.split(","); - const task = {}; - getTaskTags(data, task, tags); - for (let i = 0; i < data.length; i++) { - data[i] = data[i].trim(); - } - let endTimeData = ""; - switch (data.length) { - case 1: - task.id = parseId(); - task.startTime = prevTask.endTime; - endTimeData = data[0]; - break; - case 2: - task.id = parseId(); - task.startTime = getStartDate(void 0, dateFormat, data[0]); - endTimeData = data[1]; - break; - case 3: - task.id = parseId(data[0]); - task.startTime = getStartDate(void 0, dateFormat, data[1]); - endTimeData = data[2]; - break; - } - if (endTimeData) { - task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates); - task.manualEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(endTimeData, "YYYY-MM-DD", true).isValid(); - checkTaskDates(task, dateFormat, excludes, includes); - } - return task; -}; -const parseData = function(prevTaskId, dataStr) { - let ds; - if (dataStr.substr(0, 1) === ":") { - ds = dataStr.substr(1, dataStr.length); - } else { - ds = dataStr; - } - const data = ds.split(","); - const task = {}; - getTaskTags(data, task, tags); - for (let i = 0; i < data.length; i++) { - data[i] = data[i].trim(); - } - switch (data.length) { - case 1: - task.id = parseId(); - task.startTime = { - type: "prevTaskEnd", - id: prevTaskId - }; - task.endTime = { - data: data[0] - }; - break; - case 2: - task.id = parseId(); - task.startTime = { - type: "getStartDate", - startData: data[0] - }; - task.endTime = { - data: data[1] - }; - break; - case 3: - task.id = parseId(data[0]); - task.startTime = { - type: "getStartDate", - startData: data[1] - }; - task.endTime = { - data: data[2] - }; - break; - } - return task; -}; -let lastTask; -let lastTaskID; -let rawTasks = []; -const taskDb = {}; -const addTask = function(descr, data) { - const rawTask = { - section: currentSection, - type: currentSection, - processed: false, - manualEndTime: false, - renderEndTime: null, - raw: { data }, - task: descr, - classes: [] - }; - const taskInfo = parseData(lastTaskID, data); - rawTask.raw.startTime = taskInfo.startTime; - rawTask.raw.endTime = taskInfo.endTime; - rawTask.id = taskInfo.id; - rawTask.prevTaskId = lastTaskID; - rawTask.active = taskInfo.active; - rawTask.done = taskInfo.done; - rawTask.crit = taskInfo.crit; - rawTask.milestone = taskInfo.milestone; - rawTask.order = lastOrder; - lastOrder++; - const pos = rawTasks.push(rawTask); - lastTaskID = rawTask.id; - taskDb[rawTask.id] = pos - 1; -}; -const findTaskById = function(id) { - const pos = taskDb[id]; - return rawTasks[pos]; -}; -const addTaskOrg = function(descr, data) { - const newTask = { - section: currentSection, - type: currentSection, - description: descr, - task: descr, - classes: [] - }; - const taskInfo = compileData(lastTask, data); - newTask.startTime = taskInfo.startTime; - newTask.endTime = taskInfo.endTime; - newTask.id = taskInfo.id; - newTask.active = taskInfo.active; - newTask.done = taskInfo.done; - newTask.crit = taskInfo.crit; - newTask.milestone = taskInfo.milestone; - lastTask = newTask; - tasks.push(newTask); -}; -const compileTasks = function() { - const compileTask = function(pos) { - const task = rawTasks[pos]; - let startTime = ""; - switch (rawTasks[pos].raw.startTime.type) { - case "prevTaskEnd": { - const prevTask = findTaskById(task.prevTaskId); - task.startTime = prevTask.endTime; - break; - } - case "getStartDate": - startTime = getStartDate(void 0, dateFormat, rawTasks[pos].raw.startTime.startData); - if (startTime) { - rawTasks[pos].startTime = startTime; - } - break; - } - if (rawTasks[pos].startTime) { - rawTasks[pos].endTime = getEndDate( - rawTasks[pos].startTime, - dateFormat, - rawTasks[pos].raw.endTime.data, - inclusiveEndDates - ); - if (rawTasks[pos].endTime) { - rawTasks[pos].processed = true; - rawTasks[pos].manualEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__( - rawTasks[pos].raw.endTime.data, - "YYYY-MM-DD", - true - ).isValid(); - checkTaskDates(rawTasks[pos], dateFormat, excludes, includes); - } - } - return rawTasks[pos].processed; - }; - let allProcessed = true; - for (const [i, rawTask] of rawTasks.entries()) { - compileTask(i); - allProcessed = allProcessed && rawTask.processed; - } - return allProcessed; -}; -const setLink = function(ids, _linkStr) { - let linkStr = _linkStr; - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel !== "loose") { - linkStr = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Jf)(_linkStr); - } - ids.split(",").forEach(function(id) { - let rawTask = findTaskById(id); - if (rawTask !== void 0) { - pushFun(id, () => { - window.open(linkStr, "_self"); - }); - links[id] = linkStr; - } - }); - setClass(ids, "clickable"); -}; -const setClass = function(ids, className) { - ids.split(",").forEach(function(id) { - let rawTask = findTaskById(id); - if (rawTask !== void 0) { - rawTask.classes.push(className); - } - }); -}; -const setClickFun = function(id, functionName, functionArgs) { - if ((0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel !== "loose") { - return; - } - if (functionName === void 0) { - return; - } - let argList = []; - if (typeof functionArgs === "string") { - argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); - for (let i = 0; i < argList.length; i++) { - let item = argList[i].trim(); - if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { - item = item.substr(1, item.length - 2); - } - argList[i] = item; - } - } - if (argList.length === 0) { - argList.push(id); - } - let rawTask = findTaskById(id); - if (rawTask !== void 0) { - pushFun(id, () => { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.u.runFunc(functionName, ...argList); - }); - } -}; -const pushFun = function(id, callbackFunction) { - funs.push( - function() { - const elem = document.querySelector(`[id="${id}"]`); - if (elem !== null) { - elem.addEventListener("click", function() { - callbackFunction(); - }); - } - }, - function() { - const elem = document.querySelector(`[id="${id}-text"]`); - if (elem !== null) { - elem.addEventListener("click", function() { - callbackFunction(); - }); - } - } - ); -}; -const setClickEvent = function(ids, functionName, functionArgs) { - ids.split(",").forEach(function(id) { - setClickFun(id, functionName, functionArgs); - }); - setClass(ids, "clickable"); -}; -const bindFunctions = function(element) { - funs.forEach(function(fun) { - fun(element); - }); -}; -const ganttDb = { - getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().gantt, - clear, - setDateFormat, - getDateFormat, - enableInclusiveEndDates, - endDatesAreInclusive, - enableTopAxis, - topAxisEnabled, - setAxisFormat, - getAxisFormat, - setTickInterval, - getTickInterval, - setTodayMarker, - getTodayMarker, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.g, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.t, - setDisplayMode, - getDisplayMode, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.b, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.a, - addSection, - getSections, - getTasks, - addTask, - findTaskById, - addTaskOrg, - setIncludes, - getIncludes, - setExcludes, - getExcludes, - setClickEvent, - setLink, - getLinks, - bindFunctions, - parseDuration, - isInvalidDate, - setWeekday, - getWeekday -}; -function getTaskTags(data, task, tags2) { - let matchFound = true; - while (matchFound) { - matchFound = false; - tags2.forEach(function(t) { - const pattern = "^\\s*" + t + "\\s*$"; - const regex = new RegExp(pattern); - if (data[0].match(regex)) { - task[t] = true; - data.shift(1); - matchFound = true; - } - }); - } -} -const setConf = function() { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("Something is calling, setConf, remove the call"); -}; -const mapWeekdayToTimeFunction = { - monday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonday */ .ABi, - tuesday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeTuesday */ .PGu, - wednesday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeWednesday */ .GuW, - thursday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeThursday */ .Mol, - friday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFriday */ .TUC, - saturday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSaturday */ .rGn, - sunday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSunday */ .YPH -}; -const getMaxIntersections = (tasks2, orderOffset) => { - let timeline = [...tasks2].map(() => -Infinity); - let sorted = [...tasks2].sort((a, b) => a.startTime - b.startTime || a.order - b.order); - let maxIntersections = 0; - for (const element of sorted) { - for (let j = 0; j < timeline.length; j++) { - if (element.startTime >= timeline[j]) { - timeline[j] = element.endTime; - element.order = j + orderOffset; - if (j > maxIntersections) { - maxIntersections = j; - } - break; - } - } - } - return maxIntersections; -}; -let w; -const draw = function(text, id, version, diagObj) { - const conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().gantt; - const securityLevel = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ltv)("body"); - const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; - const elem = doc.getElementById(id); - w = elem.parentElement.offsetWidth; - if (w === void 0) { - w = 1200; - } - if (conf.useWidth !== void 0) { - w = conf.useWidth; - } - const taskArray = diagObj.db.getTasks(); - let categories = []; - for (const element of taskArray) { - categories.push(element.type); - } - categories = checkUnique(categories); - const categoryHeights = {}; - let h = 2 * conf.topPadding; - if (diagObj.db.getDisplayMode() === "compact" || conf.displayMode === "compact") { - const categoryElements = {}; - for (const element of taskArray) { - if (categoryElements[element.section] === void 0) { - categoryElements[element.section] = [element]; - } else { - categoryElements[element.section].push(element); - } - } - let intersections = 0; - for (const category of Object.keys(categoryElements)) { - const categoryHeight = getMaxIntersections(categoryElements[category], intersections) + 1; - intersections += categoryHeight; - h += categoryHeight * (conf.barHeight + conf.barGap); - categoryHeights[category] = categoryHeight; - } - } else { - h += taskArray.length * (conf.barHeight + conf.barGap); - for (const category of categories) { - categoryHeights[category] = taskArray.filter((task) => task.type === category).length; - } - } - elem.setAttribute("viewBox", "0 0 " + w + " " + h); - const svg = root.select(`[id="${id}"]`); - const timeScale = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .scaleTime */ .w7C)().domain([ - (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .min */ .jkA)(taskArray, function(d) { - return d.startTime; - }), - (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .max */ .T9B)(taskArray, function(d) { - return d.endTime; - }) - ]).rangeRound([0, w - conf.leftPadding - conf.rightPadding]); - function taskCompare(a, b) { - const taskA = a.startTime; - const taskB = b.startTime; - let result = 0; - if (taskA > taskB) { - result = 1; - } else if (taskA < taskB) { - result = -1; - } - return result; - } - taskArray.sort(taskCompare); - makeGantt(taskArray, w, h); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.i)(svg, h, w, conf.useMaxWidth); - svg.append("text").text(diagObj.db.getDiagramTitle()).attr("x", w / 2).attr("y", conf.titleTopMargin).attr("class", "titleText"); - function makeGantt(tasks2, pageWidth, pageHeight) { - const barHeight = conf.barHeight; - const gap = barHeight + conf.barGap; - const topPadding = conf.topPadding; - const leftPadding = conf.leftPadding; - const colorScale = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .scaleLinear */ .m4Y)().domain([0, categories.length]).range(["#00B9FA", "#F95002"]).interpolate(d3__WEBPACK_IMPORTED_MODULE_5__/* .interpolateHcl */ .bEH); - drawExcludeDays( - gap, - topPadding, - leftPadding, - pageWidth, - pageHeight, - tasks2, - diagObj.db.getExcludes(), - diagObj.db.getIncludes() - ); - makeGrid(leftPadding, topPadding, pageWidth, pageHeight); - drawRects(tasks2, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth); - vertLabels(gap, topPadding); - drawToday(leftPadding, topPadding, pageWidth, pageHeight); - } - function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w2) { - const uniqueTaskOrderIds = [...new Set(theArray.map((item) => item.order))]; - const uniqueTasks = uniqueTaskOrderIds.map((id2) => theArray.find((item) => item.order === id2)); - svg.append("g").selectAll("rect").data(uniqueTasks).enter().append("rect").attr("x", 0).attr("y", function(d, i) { - i = d.order; - return i * theGap + theTopPad - 2; - }).attr("width", function() { - return w2 - conf.rightPadding / 2; - }).attr("height", theGap).attr("class", function(d) { - for (const [i, category] of categories.entries()) { - if (d.type === category) { - return "section section" + i % conf.numberSectionStyles; - } - } - return "section section0"; - }); - const rectangles = svg.append("g").selectAll("rect").data(theArray).enter(); - const links2 = diagObj.db.getLinks(); - rectangles.append("rect").attr("id", function(d) { - return d.id; - }).attr("rx", 3).attr("ry", 3).attr("x", function(d) { - if (d.milestone) { - return timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; - } - return timeScale(d.startTime) + theSidePad; - }).attr("y", function(d, i) { - i = d.order; - return i * theGap + theTopPad; - }).attr("width", function(d) { - if (d.milestone) { - return theBarHeight; - } - return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime); - }).attr("height", theBarHeight).attr("transform-origin", function(d, i) { - i = d.order; - return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + "px " + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + "px"; - }).attr("class", function(d) { - const res = "task"; - let classStr = ""; - if (d.classes.length > 0) { - classStr = d.classes.join(" "); - } - let secNum = 0; - for (const [i, category] of categories.entries()) { - if (d.type === category) { - secNum = i % conf.numberSectionStyles; - } - } - let taskClass = ""; - if (d.active) { - if (d.crit) { - taskClass += " activeCrit"; - } else { - taskClass = " active"; - } - } else if (d.done) { - if (d.crit) { - taskClass = " doneCrit"; - } else { - taskClass = " done"; - } - } else { - if (d.crit) { - taskClass += " crit"; - } - } - if (taskClass.length === 0) { - taskClass = " task"; - } - if (d.milestone) { - taskClass = " milestone " + taskClass; - } - taskClass += secNum; - taskClass += " " + classStr; - return res + taskClass; - }); - rectangles.append("text").attr("id", function(d) { - return d.id + "-text"; - }).text(function(d) { - return d.task; - }).attr("font-size", conf.fontSize).attr("x", function(d) { - let startX = timeScale(d.startTime); - let endX = timeScale(d.renderEndTime || d.endTime); - if (d.milestone) { - startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; - } - if (d.milestone) { - endX = startX + theBarHeight; - } - const textWidth = this.getBBox().width; - if (textWidth > endX - startX) { - if (endX + textWidth + 1.5 * conf.leftPadding > w2) { - return startX + theSidePad - 5; - } else { - return endX + theSidePad + 5; - } - } else { - return (endX - startX) / 2 + startX + theSidePad; - } - }).attr("y", function(d, i) { - i = d.order; - return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad; - }).attr("text-height", theBarHeight).attr("class", function(d) { - const startX = timeScale(d.startTime); - let endX = timeScale(d.endTime); - if (d.milestone) { - endX = startX + theBarHeight; - } - const textWidth = this.getBBox().width; - let classStr = ""; - if (d.classes.length > 0) { - classStr = d.classes.join(" "); - } - let secNum = 0; - for (const [i, category] of categories.entries()) { - if (d.type === category) { - secNum = i % conf.numberSectionStyles; - } - } - let taskType = ""; - if (d.active) { - if (d.crit) { - taskType = "activeCritText" + secNum; - } else { - taskType = "activeText" + secNum; - } - } - if (d.done) { - if (d.crit) { - taskType = taskType + " doneCritText" + secNum; - } else { - taskType = taskType + " doneText" + secNum; - } - } else { - if (d.crit) { - taskType = taskType + " critText" + secNum; - } - } - if (d.milestone) { - taskType += " milestoneText"; - } - if (textWidth > endX - startX) { - if (endX + textWidth + 1.5 * conf.leftPadding > w2) { - return classStr + " taskTextOutsideLeft taskTextOutside" + secNum + " " + taskType; - } else { - return classStr + " taskTextOutsideRight taskTextOutside" + secNum + " " + taskType + " width-" + textWidth; - } - } else { - return classStr + " taskText taskText" + secNum + " " + taskType + " width-" + textWidth; - } - }); - const securityLevel2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel; - if (securityLevel2 === "sandbox") { - let sandboxElement2; - sandboxElement2 = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ltv)("#i" + id); - const doc2 = sandboxElement2.nodes()[0].contentDocument; - rectangles.filter(function(d) { - return links2[d.id] !== void 0; - }).each(function(o) { - var taskRect = doc2.querySelector("#" + o.id); - var taskText = doc2.querySelector("#" + o.id + "-text"); - const oldParent = taskRect.parentNode; - var Link = doc2.createElement("a"); - Link.setAttribute("xlink:href", links2[o.id]); - Link.setAttribute("target", "_top"); - oldParent.appendChild(Link); - Link.appendChild(taskRect); - Link.appendChild(taskText); - }); - } - } - function drawExcludeDays(theGap, theTopPad, theSidePad, w2, h2, tasks2, excludes2, includes2) { - if (excludes2.length === 0 && includes2.length === 0) { - return; - } - let minTime; - let maxTime; - for (const { startTime, endTime } of tasks2) { - if (minTime === void 0 || startTime < minTime) { - minTime = startTime; - } - if (maxTime === void 0 || endTime > maxTime) { - maxTime = endTime; - } - } - if (!minTime || !maxTime) { - return; - } - if (dayjs__WEBPACK_IMPORTED_MODULE_1__(maxTime).diff(dayjs__WEBPACK_IMPORTED_MODULE_1__(minTime), "year") > 5) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.l.warn( - "The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days." - ); - return; - } - const dateFormat2 = diagObj.db.getDateFormat(); - const excludeRanges = []; - let range = null; - let d = dayjs__WEBPACK_IMPORTED_MODULE_1__(minTime); - while (d.valueOf() <= maxTime) { - if (diagObj.db.isInvalidDate(d, dateFormat2, excludes2, includes2)) { - if (!range) { - range = { - start: d, - end: d - }; - } else { - range.end = d; - } - } else { - if (range) { - excludeRanges.push(range); - range = null; - } - } - d = d.add(1, "d"); - } - const rectangles = svg.append("g").selectAll("rect").data(excludeRanges).enter(); - rectangles.append("rect").attr("id", function(d2) { - return "exclude-" + d2.start.format("YYYY-MM-DD"); - }).attr("x", function(d2) { - return timeScale(d2.start) + theSidePad; - }).attr("y", conf.gridLineStartPadding).attr("width", function(d2) { - const renderEnd = d2.end.add(1, "day"); - return timeScale(renderEnd) - timeScale(d2.start); - }).attr("height", h2 - theTopPad - conf.gridLineStartPadding).attr("transform-origin", function(d2, i) { - return (timeScale(d2.start) + theSidePad + 0.5 * (timeScale(d2.end) - timeScale(d2.start))).toString() + "px " + (i * theGap + 0.5 * h2).toString() + "px"; - }).attr("class", "exclude-range"); - } - function makeGrid(theSidePad, theTopPad, w2, h2) { - let bottomXAxis = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .axisBottom */ .l78)(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat((0,d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFormat */ .DCK)(diagObj.db.getAxisFormat() || conf.axisFormat || "%Y-%m-%d")); - const reTickInterval = /^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/; - const resultTickInterval = reTickInterval.exec( - diagObj.db.getTickInterval() || conf.tickInterval - ); - if (resultTickInterval !== null) { - const every = resultTickInterval[1]; - const interval = resultTickInterval[2]; - const weekday2 = diagObj.db.getWeekday() || conf.weekday; - switch (interval) { - case "millisecond": - bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMillisecond */ .t6C.every(every)); - break; - case "second": - bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSecond */ .ucG.every(every)); - break; - case "minute": - bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMinute */ .wXd.every(every)); - break; - case "hour": - bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeHour */ .Agd.every(every)); - break; - case "day": - bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeDay */ .UAC.every(every)); - break; - case "week": - bottomXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every)); - break; - case "month": - bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonth */ .Ui6.every(every)); - break; - } - } - svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + (h2 - 50) + ")").call(bottomXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10).attr("dy", "1em"); - if (diagObj.db.topAxisEnabled() || conf.topAxis) { - let topXAxis = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .axisTop */ .tlR)(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat((0,d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFormat */ .DCK)(diagObj.db.getAxisFormat() || conf.axisFormat || "%Y-%m-%d")); - if (resultTickInterval !== null) { - const every = resultTickInterval[1]; - const interval = resultTickInterval[2]; - const weekday2 = diagObj.db.getWeekday() || conf.weekday; - switch (interval) { - case "millisecond": - topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMillisecond */ .t6C.every(every)); - break; - case "second": - topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSecond */ .ucG.every(every)); - break; - case "minute": - topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMinute */ .wXd.every(every)); - break; - case "hour": - topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeHour */ .Agd.every(every)); - break; - case "day": - topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeDay */ .UAC.every(every)); - break; - case "week": - topXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every)); - break; - case "month": - topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonth */ .Ui6.every(every)); - break; - } - } - svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + theTopPad + ")").call(topXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10); - } - } - function vertLabels(theGap, theTopPad) { - let prevGap = 0; - const numOccurrences = Object.keys(categoryHeights).map((d) => [d, categoryHeights[d]]); - svg.append("g").selectAll("text").data(numOccurrences).enter().append(function(d) { - const rows = d[0].split(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_7__.e.lineBreakRegex); - const dy = -(rows.length - 1) / 2; - const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); - svgLabel.setAttribute("dy", dy + "em"); - for (const [j, row] of rows.entries()) { - const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); - tspan.setAttribute("alignment-baseline", "central"); - tspan.setAttribute("x", "10"); - if (j > 0) { - tspan.setAttribute("dy", "1em"); - } - tspan.textContent = row; - svgLabel.appendChild(tspan); - } - return svgLabel; - }).attr("x", 10).attr("y", function(d, i) { - if (i > 0) { - for (let j = 0; j < i; j++) { - prevGap += numOccurrences[i - 1][1]; - return d[1] * theGap / 2 + prevGap * theGap + theTopPad; - } - } else { - return d[1] * theGap / 2 + theTopPad; - } - }).attr("font-size", conf.sectionFontSize).attr("class", function(d) { - for (const [i, category] of categories.entries()) { - if (d[0] === category) { - return "sectionTitle sectionTitle" + i % conf.numberSectionStyles; - } - } - return "sectionTitle"; - }); - } - function drawToday(theSidePad, theTopPad, w2, h2) { - const todayMarker2 = diagObj.db.getTodayMarker(); - if (todayMarker2 === "off") { - return; - } - const todayG = svg.append("g").attr("class", "today"); - const today = /* @__PURE__ */ new Date(); - const todayLine = todayG.append("line"); - todayLine.attr("x1", timeScale(today) + theSidePad).attr("x2", timeScale(today) + theSidePad).attr("y1", conf.titleTopMargin).attr("y2", h2 - conf.titleTopMargin).attr("class", "today"); - if (todayMarker2 !== "") { - todayLine.attr("style", todayMarker2.replace(/,/g, ";")); - } - } - function checkUnique(arr) { - const hash = {}; - const result = []; - for (let i = 0, l = arr.length; i < l; ++i) { - if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) { - hash[arr[i]] = true; - result.push(arr[i]); - } - } - return result; - } -}; -const ganttRenderer = { - setConf, - draw -}; -const getStyles = (options) => ` - .mermaid-main-font { - font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); - } - - .exclude-range { - fill: ${options.excludeBkgColor}; - } - - .section { - stroke: none; - opacity: 0.2; - } - - .section0 { - fill: ${options.sectionBkgColor}; - } - - .section2 { - fill: ${options.sectionBkgColor2}; - } - - .section1, - .section3 { - fill: ${options.altSectionBkgColor}; - opacity: 0.2; - } - - .sectionTitle0 { - fill: ${options.titleColor}; - } - - .sectionTitle1 { - fill: ${options.titleColor}; - } - - .sectionTitle2 { - fill: ${options.titleColor}; - } - - .sectionTitle3 { - fill: ${options.titleColor}; - } - - .sectionTitle { - text-anchor: start; - font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); - } - - - /* Grid and axis */ - - .grid .tick { - stroke: ${options.gridColor}; - opacity: 0.8; - shape-rendering: crispEdges; - } - - .grid .tick text { - font-family: ${options.fontFamily}; - fill: ${options.textColor}; - } - - .grid path { - stroke-width: 0; - } - - - /* Today line */ - - .today { - fill: none; - stroke: ${options.todayLineColor}; - stroke-width: 2px; - } - - - /* Task styling */ - - /* Default task */ - - .task { - stroke-width: 2; - } - - .taskText { - text-anchor: middle; - font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); - } - - .taskTextOutsideRight { - fill: ${options.taskTextDarkColor}; - text-anchor: start; - font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); - } - - .taskTextOutsideLeft { - fill: ${options.taskTextDarkColor}; - text-anchor: end; - } - - - /* Special case clickable */ - - .task.clickable { - cursor: pointer; - } - - .taskText.clickable { - cursor: pointer; - fill: ${options.taskTextClickableColor} !important; - font-weight: bold; - } - - .taskTextOutsideLeft.clickable { - cursor: pointer; - fill: ${options.taskTextClickableColor} !important; - font-weight: bold; - } - - .taskTextOutsideRight.clickable { - cursor: pointer; - fill: ${options.taskTextClickableColor} !important; - font-weight: bold; - } - - - /* Specific task settings for the sections*/ - - .taskText0, - .taskText1, - .taskText2, - .taskText3 { - fill: ${options.taskTextColor}; - } - - .task0, - .task1, - .task2, - .task3 { - fill: ${options.taskBkgColor}; - stroke: ${options.taskBorderColor}; - } - - .taskTextOutside0, - .taskTextOutside2 - { - fill: ${options.taskTextOutsideColor}; - } - - .taskTextOutside1, - .taskTextOutside3 { - fill: ${options.taskTextOutsideColor}; - } - - - /* Active task */ - - .active0, - .active1, - .active2, - .active3 { - fill: ${options.activeTaskBkgColor}; - stroke: ${options.activeTaskBorderColor}; - } - - .activeText0, - .activeText1, - .activeText2, - .activeText3 { - fill: ${options.taskTextDarkColor} !important; - } - - - /* Completed task */ - - .done0, - .done1, - .done2, - .done3 { - stroke: ${options.doneTaskBorderColor}; - fill: ${options.doneTaskBkgColor}; - stroke-width: 2; - } - - .doneText0, - .doneText1, - .doneText2, - .doneText3 { - fill: ${options.taskTextDarkColor} !important; - } - - - /* Tasks on the critical line */ - - .crit0, - .crit1, - .crit2, - .crit3 { - stroke: ${options.critBorderColor}; - fill: ${options.critBkgColor}; - stroke-width: 2; - } - - .activeCrit0, - .activeCrit1, - .activeCrit2, - .activeCrit3 { - stroke: ${options.critBorderColor}; - fill: ${options.activeTaskBkgColor}; - stroke-width: 2; - } - - .doneCrit0, - .doneCrit1, - .doneCrit2, - .doneCrit3 { - stroke: ${options.critBorderColor}; - fill: ${options.doneTaskBkgColor}; - stroke-width: 2; - cursor: pointer; - shape-rendering: crispEdges; - } - - .milestone { - transform: rotate(45deg) scale(0.8,0.8); - } - - .milestoneText { - font-style: italic; - } - .doneCritText0, - .doneCritText1, - .doneCritText2, - .doneCritText3 { - fill: ${options.taskTextDarkColor} !important; - } - - .activeCritText0, - .activeCritText1, - .activeCritText2, - .activeCritText3 { - fill: ${options.taskTextDarkColor} !important; - } - - .titleText { - text-anchor: middle; - font-size: 18px; - fill: ${options.titleColor || options.textColor}; - font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); - } -`; -const ganttStyles = getStyles; -const diagram = { - parser: ganttParser, - db: ganttDb, - renderer: ganttRenderer, - styles: ganttStyles -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8810.e107d159.js b/pr-preview/pr-1594/assets/js/8810.e107d159.js deleted file mode 100644 index b9dec487e1..0000000000 --- a/pr-preview/pr-1594/assets/js/8810.e107d159.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8810],{10646:(e,t,n)=>{n.d(t,{H:()=>l});var r=n(82933);function l(e,t){var n=e.append("foreignObject").attr("width","100000"),l=n.append("xhtml:div");l.attr("xmlns","http://www.w3.org/1999/xhtml");var o=t.label;switch(typeof o){case"function":l.insert(o);break;case"object":l.insert((function(){return o}));break;default:l.html(o)}r.AV(l,t.labelStyle),l.style("display","inline-block"),l.style("white-space","nowrap");var a=l.node().getBoundingClientRect();return n.attr("width",a.width).attr("height",a.height),n}},82933:(e,t,n)=>{n.d(t,{AV:()=>c,De:()=>o,c$:()=>p,gh:()=>a,nh:()=>d});var r=n(34963),l=n(89610);function o(e,t){return!!e.children(t).length}function a(e){return i(e.v)+":"+i(e.w)+":"+i(e.name)}var s=/:/g;function i(e){return e?String(e).replace(s,"\\:"):""}function c(e,t){t&&e.attr("style",t)}function d(e,t,n){t&&e.attr("class",t).attr("class",n+" "+e.attr("class"))}function p(e,t){var n=t.graph();if(r.A(n)){var o=n.transition;if(l.A(o))return o(e)}return e}},75937:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(72453),l=n(74886);const o=(e,t)=>r.A.lang.round(l.A.parse(e)[t])},88810:(e,t,n)=>{n.d(t,{diagram:()=>i});var r=n(32548),l=(n(697),n(26312));n(99702),n(48585),n(23068),n(8058),n(21176),n(82933);n(10646);n(5664),n(91395);n(81942);l.lUB;var o=n(65382);n(74353),n(16750),n(42838),n(14075);const a={},s=function(e){const t=Object.keys(e);for(const n of t)a[n]=e[n]},i={parser:r.p,db:r.f,renderer:o.f,styles:o.a,init:e=>{e.flowchart||(e.flowchart={}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,s(e.flowchart),r.f.clear(),r.f.setGen("gen-1")}}},65382:(e,t,n)=>{n.d(t,{a:()=>f,f:()=>w});var r=n(697),l=n(26312),o=n(99702),a=n(35364),s=n(10646),i=n(75937),c=n(25582);const d={},p=async function(e,t,n,r,l,a){const i=r.select(`[id="${n}"]`),c=Object.keys(e);for(const d of c){const n=e[d];let r="default";n.classes.length>0&&(r=n.classes.join(" ")),r+=" flowchart-label";const c=(0,o.k)(n.styles);let p,b=void 0!==n.text?n.text:n.id;if(o.l.info("vertex",n,n.labelType),"markdown"===n.labelType)o.l.info("vertex",n,n.labelType);else if((0,o.m)((0,o.c)().flowchart.htmlLabels)){const e={label:b};p=(0,s.H)(i,e).node(),p.parentNode.removeChild(p)}else{const e=l.createElementNS("http://www.w3.org/2000/svg","text");e.setAttribute("style",c.labelStyle.replace("color:","fill:"));const t=b.split(o.e.lineBreakRegex);for(const n of t){const t=l.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","1"),t.textContent=n,e.appendChild(t)}p=e}let w=0,f="";switch(n.type){case"round":w=5,f="rect";break;case"square":case"group":default:f="rect";break;case"diamond":f="question";break;case"hexagon":f="hexagon";break;case"odd":case"odd_right":f="rect_left_inv_arrow";break;case"lean_right":f="lean_right";break;case"lean_left":f="lean_left";break;case"trapezoid":f="trapezoid";break;case"inv_trapezoid":f="inv_trapezoid";break;case"circle":f="circle";break;case"ellipse":f="ellipse";break;case"stadium":f="stadium";break;case"subroutine":f="subroutine";break;case"cylinder":f="cylinder";break;case"doublecircle":f="doublecircle"}const h=await(0,o.r)(b,(0,o.c)());t.setNode(n.id,{labelStyle:c.labelStyle,shape:f,labelText:h,labelType:n.labelType,rx:w,ry:w,class:r,style:c.style,id:n.id,link:n.link,linkTarget:n.linkTarget,tooltip:a.db.getTooltip(n.id)||"",domId:a.db.lookUpDomId(n.id),haveCallback:n.haveCallback,width:"group"===n.type?500:void 0,dir:n.dir,type:n.type,props:n.props,padding:(0,o.c)().flowchart.padding}),o.l.info("setNode",{labelStyle:c.labelStyle,labelType:n.labelType,shape:f,labelText:h,rx:w,ry:w,class:r,style:c.style,id:n.id,domId:a.db.lookUpDomId(n.id),width:"group"===n.type?500:void 0,type:n.type,dir:n.dir,props:n.props,padding:(0,o.c)().flowchart.padding})}},b=async function(e,t,n){o.l.info("abc78 edges = ",e);let r,a,s=0,i={};if(void 0!==e.defaultStyle){const t=(0,o.k)(e.defaultStyle);r=t.style,a=t.labelStyle}for(const c of e){s++;const n="L-"+c.start+"-"+c.end;void 0===i[n]?(i[n]=0,o.l.info("abc78 new entry",n,i[n])):(i[n]++,o.l.info("abc78 new entry",n,i[n]));let p=n+"-"+i[n];o.l.info("abc78 new link id to be used is",n,p,i[n]);const b="LS-"+c.start,w="LE-"+c.end,f={style:"",labelStyle:""};switch(f.minlen=c.length||1,"arrow_open"===c.type?f.arrowhead="none":f.arrowhead="normal",f.arrowTypeStart="arrow_open",f.arrowTypeEnd="arrow_open",c.type){case"double_arrow_cross":f.arrowTypeStart="arrow_cross";case"arrow_cross":f.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":f.arrowTypeStart="arrow_point";case"arrow_point":f.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":f.arrowTypeStart="arrow_circle";case"arrow_circle":f.arrowTypeEnd="arrow_circle"}let h="",u="";switch(c.stroke){case"normal":h="fill:none;",void 0!==r&&(h=r),void 0!==a&&(u=a),f.thickness="normal",f.pattern="solid";break;case"dotted":f.thickness="normal",f.pattern="dotted",f.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":f.thickness="thick",f.pattern="solid",f.style="stroke-width: 3.5px;fill:none;";break;case"invisible":f.thickness="invisible",f.pattern="solid",f.style="stroke-width: 0;fill:none;"}if(void 0!==c.style){const e=(0,o.k)(c.style);h=e.style,u=e.labelStyle}f.style=f.style+=h,f.labelStyle=f.labelStyle+=u,void 0!==c.interpolate?f.curve=(0,o.n)(c.interpolate,l.lUB):void 0!==e.defaultInterpolate?f.curve=(0,o.n)(e.defaultInterpolate,l.lUB):f.curve=(0,o.n)(d.curve,l.lUB),void 0===c.text?void 0!==c.style&&(f.arrowheadStyle="fill: #333"):(f.arrowheadStyle="fill: #333",f.labelpos="c"),f.labelType=c.labelType,f.label=await(0,o.r)(c.text.replace(o.e.lineBreakRegex,"\n"),(0,o.c)()),void 0===c.style&&(f.style=f.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),f.labelStyle=f.labelStyle.replace("color:","fill:"),f.id=p,f.classes="flowchart-link "+b+" "+w,t.setEdge(c.start,c.end,f,s)}},w={setConf:function(e){const t=Object.keys(e);for(const n of t)d[n]=e[n]},addVertices:p,addEdges:b,getClasses:function(e,t){return t.db.getClasses()},draw:async function(e,t,n,s){o.l.info("Drawing flowchart");let i=s.db.getDirection();void 0===i&&(i="TD");const{securityLevel:c,flowchart:d}=(0,o.c)(),w=d.nodeSpacing||50,f=d.rankSpacing||50;let h;"sandbox"===c&&(h=(0,l.Ltv)("#i"+t));const u="sandbox"===c?(0,l.Ltv)(h.nodes()[0].contentDocument.body):(0,l.Ltv)("body"),g="sandbox"===c?h.nodes()[0].contentDocument:document,y=new r.T({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:w,ranksep:f,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let k;const x=s.db.getSubGraphs();o.l.info("Subgraphs - ",x);for(let r=x.length-1;r>=0;r--)k=x[r],o.l.info("Subgraph - ",k),s.db.addVertex(k.id,{text:k.title,type:k.labelType},"group",void 0,k.classes,k.dir);const v=s.db.getVertices(),m=s.db.getEdges();o.l.info("Edges",m);let S=0;for(S=x.length-1;S>=0;S--){k=x[S],(0,l.Ubm)("cluster").append("text");for(let e=0;e<k.nodes.length;e++)o.l.info("Setting up subgraphs",k.nodes[e],k.id),y.setParent(k.nodes[e],k.id)}await p(v,y,t,u,g,s),await b(m,y);const T=u.select(`[id="${t}"]`),_=u.select("#"+t+" g");if(await(0,a.r)(_,y,["point","circle","cross"],"flowchart",t),o.u.insertTitle(T,"flowchartTitleText",d.titleTopMargin,s.db.getDiagramTitle()),(0,o.o)(y,T,d.diagramPadding,d.useMaxWidth),s.db.indexNodes("subGraph"+S),!d.htmlLabels){const e=g.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of e){const e=t.getBBox(),n=g.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",e.width),n.setAttribute("height",e.height),t.insertBefore(n,t.firstChild)}}Object.keys(v).forEach((function(e){const n=v[e];if(n.link){const r=(0,l.Ltv)("#"+t+' [id="'+e+'"]');if(r){const e=g.createElementNS("http://www.w3.org/2000/svg","a");e.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),e.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),e.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===c?e.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):n.linkTarget&&e.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);const t=r.insert((function(){return e}),":first-child"),l=r.select(".label-container");l&&t.append((function(){return l.node()}));const o=r.select(".label");o&&t.append((function(){return o.node()}))}}}))}},f=e=>`.label {\n font-family: ${e.fontFamily};\n color: ${e.nodeTextColor||e.textColor};\n }\n .cluster-label text {\n fill: ${e.titleColor};\n }\n .cluster-label span,p {\n color: ${e.titleColor};\n }\n\n .label text,span,p {\n fill: ${e.nodeTextColor||e.textColor};\n color: ${e.nodeTextColor||e.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .katex path {\n fill: #000;\n stroke: #000;\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${e.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${e.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${e.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${e.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${e.edgeLabelBackground};\n fill: ${e.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${((e,t)=>{const n=i.A,r=n(e,"r"),l=n(e,"g"),o=n(e,"b");return c.A(r,l,o,t)})(e.edgeLabelBackground,.5)};\n // background-color: \n }\n\n .cluster rect {\n fill: ${e.clusterBkg};\n stroke: ${e.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${e.titleColor};\n }\n\n .cluster span,p {\n color: ${e.titleColor};\n }\n /* .cluster div {\n color: ${e.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${e.fontFamily};\n font-size: 12px;\n background: ${e.tertiaryColor};\n border: 1px solid ${e.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n }\n`}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8869.7e05992f.js b/pr-preview/pr-1594/assets/js/8869.7e05992f.js deleted file mode 100644 index 9e87687b2c..0000000000 --- a/pr-preview/pr-1594/assets/js/8869.7e05992f.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[8869],{97375:function(t){t.exports=function(){"use strict";return function(t,e){var n=e.prototype,i=n.format;n.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return i.bind(this)(t);var s=this.$utils(),r=(t||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(t){switch(t){case"Q":return Math.ceil((e.$M+1)/3);case"Do":return n.ordinal(e.$D);case"gggg":return e.weekYear();case"GGGG":return e.isoWeekYear();case"wo":return n.ordinal(e.week(),"W");case"w":case"ww":return s.s(e.week(),"w"===t?1:2,"0");case"W":case"WW":return s.s(e.isoWeek(),"W"===t?1:2,"0");case"k":case"kk":return s.s(String(0===e.$H?24:e.$H),"k"===t?1:2,"0");case"X":return Math.floor(e.$d.getTime()/1e3);case"x":return e.$d.getTime();case"z":return"["+e.offsetName()+"]";case"zzz":return"["+e.offsetName("long")+"]";default:return t}}));return i.bind(this)(r)}}}()},90445:function(t){t.exports=function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,i=/\d\d?/,s=/\d*[^-_:/,()\s\d]+/,r={},a=function(t){return(t=+t)+(t>68?1900:2e3)},o=function(t){return function(e){this[t]=+e}},c=[/[+-]\d\d:?(\d\d)?|Z/,function(t){(this.zone||(this.zone={})).offset=function(t){if(!t)return 0;if("Z"===t)return 0;var e=t.match(/([+-]|\d\d)/g),n=60*e[1]+(+e[2]||0);return 0===n?0:"+"===e[0]?-n:n}(t)}],l=function(t){var e=r[t];return e&&(e.indexOf?e:e.s.concat(e.f))},d=function(t,e){var n,i=r.meridiem;if(i){for(var s=1;s<=24;s+=1)if(t.indexOf(i(s,0,e))>-1){n=s>12;break}}else n=t===(e?"pm":"PM");return n},u={A:[s,function(t){this.afternoon=d(t,!1)}],a:[s,function(t){this.afternoon=d(t,!0)}],S:[/\d/,function(t){this.milliseconds=100*+t}],SS:[n,function(t){this.milliseconds=10*+t}],SSS:[/\d{3}/,function(t){this.milliseconds=+t}],s:[i,o("seconds")],ss:[i,o("seconds")],m:[i,o("minutes")],mm:[i,o("minutes")],H:[i,o("hours")],h:[i,o("hours")],HH:[i,o("hours")],hh:[i,o("hours")],D:[i,o("day")],DD:[n,o("day")],Do:[s,function(t){var e=r.ordinal,n=t.match(/\d+/);if(this.day=n[0],e)for(var i=1;i<=31;i+=1)e(i).replace(/\[|\]/g,"")===t&&(this.day=i)}],M:[i,o("month")],MM:[n,o("month")],MMM:[s,function(t){var e=l("months"),n=(l("monthsShort")||e.map((function(t){return t.slice(0,3)}))).indexOf(t)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[s,function(t){var e=l("months").indexOf(t)+1;if(e<1)throw new Error;this.month=e%12||e}],Y:[/[+-]?\d+/,o("year")],YY:[n,function(t){this.year=a(t)}],YYYY:[/\d{4}/,o("year")],Z:c,ZZ:c};function h(n){var i,s;i=n,s=r&&r.formats;for(var a=(n=i.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(e,n,i){var r=i&&i.toUpperCase();return n||s[i]||t[i]||s[r].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(t,e,n){return e||n.slice(1)}))}))).match(e),o=a.length,c=0;c<o;c+=1){var l=a[c],d=u[l],h=d&&d[0],f=d&&d[1];a[c]=f?{regex:h,parser:f}:l.replace(/^\[|\]$/g,"")}return function(t){for(var e={},n=0,i=0;n<o;n+=1){var s=a[n];if("string"==typeof s)i+=s.length;else{var r=s.regex,c=s.parser,l=t.slice(i),d=r.exec(l)[0];c.call(e,d),t=t.replace(d,"")}}return function(t){var e=t.afternoon;if(void 0!==e){var n=t.hours;e?n<12&&(t.hours+=12):12===n&&(t.hours=0),delete t.afternoon}}(e),e}}return function(t,e,n){n.p.customParseFormat=!0,t&&t.parseTwoDigitYear&&(a=t.parseTwoDigitYear);var i=e.prototype,s=i.parse;i.parse=function(t){var e=t.date,i=t.utc,a=t.args;this.$u=i;var o=a[1];if("string"==typeof o){var c=!0===a[2],l=!0===a[3],d=c||l,u=a[2];l&&(u=a[2]),r=this.$locale(),!c&&u&&(r=n.Ls[u]),this.$d=function(t,e,n){try{if(["x","X"].indexOf(e)>-1)return new Date(("X"===e?1e3:1)*t);var i=h(e)(t),s=i.year,r=i.month,a=i.day,o=i.hours,c=i.minutes,l=i.seconds,d=i.milliseconds,u=i.zone,f=new Date,y=a||(s||r?1:f.getDate()),m=s||f.getFullYear(),k=0;s&&!r||(k=r>0?r-1:f.getMonth());var p=o||0,g=c||0,b=l||0,v=d||0;return u?new Date(Date.UTC(m,k,y,p,g,b,v+60*u.offset*1e3)):n?new Date(Date.UTC(m,k,y,p,g,b,v)):new Date(m,k,y,p,g,b,v)}catch(t){return new Date("")}}(e,o,i),this.init(),u&&!0!==u&&(this.$L=this.locale(u).$L),d&&e!=this.format(o)&&(this.$d=new Date("")),r={}}else if(o instanceof Array)for(var f=o.length,y=1;y<=f;y+=1){a[1]=o[y-1];var m=n.apply(this,a);if(m.isValid()){this.$d=m.$d,this.$L=m.$L,this.init();break}y===f&&(this.$d=new Date(""))}else s.call(this,t)}}}()},68313:function(t){t.exports=function(){"use strict";var t="day";return function(e,n,i){var s=function(e){return e.add(4-e.isoWeekday(),t)},r=n.prototype;r.isoWeekYear=function(){return s(this).year()},r.isoWeek=function(e){if(!this.$utils().u(e))return this.add(7*(e-this.isoWeek()),t);var n,r,a,o=s(this),c=(n=this.isoWeekYear(),a=4-(r=(this.$u?i.utc:i)().year(n).startOf("year")).isoWeekday(),r.isoWeekday()>4&&(a+=7),r.add(a,t));return o.diff(c,"week")+1},r.isoWeekday=function(t){return this.$utils().u(t)?this.day()||7:this.day(this.day()%7?t:t-7)};var a=r.startOf;r.startOf=function(t,e){var n=this.$utils(),i=!!n.u(e)||e;return"isoweek"===n.p(t)?i?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):a.bind(this)(t,e)}}}()},8869:(t,e,n)=>{"use strict";n.d(e,{diagram:()=>q});var i=n(16750),s=n(74353),r=n(68313),a=n(90445),o=n(97375),c=n(99702),l=n(26312),d=(n(42838),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[6,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,33,35,37],n=[1,25],i=[1,26],s=[1,27],r=[1,28],a=[1,29],o=[1,30],c=[1,31],l=[1,9],d=[1,10],u=[1,11],h=[1,12],f=[1,13],y=[1,14],m=[1,15],k=[1,16],p=[1,18],g=[1,19],b=[1,20],v=[1,21],T=[1,22],x=[1,24],w=[1,32],_={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,dateFormat:19,inclusiveEndDates:20,topAxis:21,axisFormat:22,tickInterval:23,excludes:24,includes:25,todayMarker:26,title:27,acc_title:28,acc_title_value:29,acc_descr:30,acc_descr_value:31,acc_descr_multiline_value:32,section:33,clickStatement:34,taskTxt:35,taskData:36,click:37,callbackname:38,callbackargs:39,href:40,clickStatementDebug:41,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",19:"dateFormat",20:"inclusiveEndDates",21:"topAxis",22:"axisFormat",23:"tickInterval",24:"excludes",25:"includes",26:"todayMarker",27:"title",28:"acc_title",29:"acc_title_value",30:"acc_descr",31:"acc_descr_value",32:"acc_descr_multiline_value",33:"section",35:"taskTxt",36:"taskData",37:"click",38:"callbackname",39:"callbackargs",40:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[34,2],[34,3],[34,3],[34,4],[34,3],[34,4],[34,2],[41,2],[41,3],[41,3],[41,4],[41,3],[41,4],[41,2]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.setWeekday("monday");break;case 9:i.setWeekday("tuesday");break;case 10:i.setWeekday("wednesday");break;case 11:i.setWeekday("thursday");break;case 12:i.setWeekday("friday");break;case 13:i.setWeekday("saturday");break;case 14:i.setWeekday("sunday");break;case 15:i.setDateFormat(r[o].substr(11)),this.$=r[o].substr(11);break;case 16:i.enableInclusiveEndDates(),this.$=r[o].substr(18);break;case 17:i.TopAxis(),this.$=r[o].substr(8);break;case 18:i.setAxisFormat(r[o].substr(11)),this.$=r[o].substr(11);break;case 19:i.setTickInterval(r[o].substr(13)),this.$=r[o].substr(13);break;case 20:i.setExcludes(r[o].substr(9)),this.$=r[o].substr(9);break;case 21:i.setIncludes(r[o].substr(9)),this.$=r[o].substr(9);break;case 22:i.setTodayMarker(r[o].substr(12)),this.$=r[o].substr(12);break;case 24:i.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 25:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 26:case 27:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 28:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 30:i.addTask(r[o-1],r[o]),this.$="task";break;case 31:this.$=r[o-1],i.setClickEvent(r[o-1],r[o],null);break;case 32:this.$=r[o-2],i.setClickEvent(r[o-2],r[o-1],r[o]);break;case 33:this.$=r[o-2],i.setClickEvent(r[o-2],r[o-1],null),i.setLink(r[o-2],r[o]);break;case 34:this.$=r[o-3],i.setClickEvent(r[o-3],r[o-2],r[o-1]),i.setLink(r[o-3],r[o]);break;case 35:this.$=r[o-2],i.setClickEvent(r[o-2],r[o],null),i.setLink(r[o-2],r[o-1]);break;case 36:this.$=r[o-3],i.setClickEvent(r[o-3],r[o-1],r[o]),i.setLink(r[o-3],r[o-2]);break;case 37:this.$=r[o-1],i.setLink(r[o-1],r[o]);break;case 38:case 44:this.$=r[o-1]+" "+r[o];break;case 39:case 40:case 42:this.$=r[o-2]+" "+r[o-1]+" "+r[o];break;case 41:case 43:this.$=r[o-3]+" "+r[o-2]+" "+r[o-1]+" "+r[o]}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:n,13:i,14:s,15:r,16:a,17:o,18:c,19:l,20:d,21:u,22:h,23:f,24:y,25:m,26:k,27:p,28:g,30:b,32:v,33:T,34:23,35:x,37:w},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:33,11:17,12:n,13:i,14:s,15:r,16:a,17:o,18:c,19:l,20:d,21:u,22:h,23:f,24:y,25:m,26:k,27:p,28:g,30:b,32:v,33:T,34:23,35:x,37:w},t(e,[2,5]),t(e,[2,6]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),{29:[1,34]},{31:[1,35]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),{36:[1,36]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),{38:[1,37],40:[1,38]},t(e,[2,4]),t(e,[2,25]),t(e,[2,26]),t(e,[2,30]),t(e,[2,31],{39:[1,39],40:[1,40]}),t(e,[2,37],{38:[1,41]}),t(e,[2,32],{40:[1,42]}),t(e,[2,33]),t(e,[2,35],{39:[1,43]}),t(e,[2,34]),t(e,[2,36])],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",c=0,l=0,d=r.slice.call(arguments,1),u=Object.create(this.lexer),h={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(h.yy[f]=this.yy[f]);u.setInput(t,h.yy),h.yy.lexer=u,h.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var m=u.options&&u.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var k,p,g,b,v,T,x,w,_,$={};;){if(p=n[n.length-1],this.defaultActions[p]?g=this.defaultActions[p]:(null==k&&(_=void 0,"number"!=typeof(_=i.pop()||u.lex()||1)&&(_ instanceof Array&&(_=(i=_).pop()),_=e.symbols_[_]||_),k=_),g=a[p]&&a[p][k]),void 0===g||!g.length||!g[0]){var D="";for(v in w=[],a[p])this.terminals_[v]&&v>2&&w.push("'"+this.terminals_[v]+"'");D=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[k]||k)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==k?"end of input":"'"+(this.terminals_[k]||k)+"'"),this.parseError(D,{text:u.match,token:this.terminals_[k]||k,line:u.yylineno,loc:y,expected:w})}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+k);switch(g[0]){case 1:n.push(k),s.push(u.yytext),r.push(u.yylloc),n.push(g[1]),k=null,l=u.yyleng,o=u.yytext,c=u.yylineno,y=u.yylloc;break;case 2:if(T=this.productions_[g[1]][1],$.$=s[s.length-T],$._$={first_line:r[r.length-(T||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(T||1)].first_column,last_column:r[r.length-1].last_column},m&&($._$.range=[r[r.length-(T||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[o,l,c,h.yy,g[1],s,r].concat(d))))return b;T&&(n=n.slice(0,-1*T*2),s=s.slice(0,-1*T),r=r.slice(0,-1*T)),n.push(this.productions_[g[1]][0]),s.push($.$),r.push($._$),x=a[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},$={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),"open_directive";case 1:return this.begin("acc_title"),28;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),30;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:case 15:case 18:case 21:case 24:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:case 9:case 10:case 12:case 13:break;case 11:return 10;case 14:this.begin("href");break;case 16:return 40;case 17:this.begin("callbackname");break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 38;case 22:return 39;case 23:this.begin("click");break;case 25:return 37;case 26:return 4;case 27:return 19;case 28:return 20;case 29:return 21;case 30:return 22;case 31:return 23;case 32:return 25;case 33:return 24;case 34:return 26;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return"date";case 43:return 27;case 44:return"accDescription";case 45:return 33;case 46:return 35;case 47:return 36;case 48:return":";case 49:return 6;case 50:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],inclusive:!0}}};function D(){this.yy={}}return _.lexer=$,D.prototype=_,_.Parser=D,new D}());d.parser=d;const u=d;s.extend(r),s.extend(a),s.extend(o);let h,f="",y="",m="",k=[],p=[],g={},b=[],v=[],T="",x="";const w=["active","done","crit","milestone"];let _=[],$=!1,D=!1,C="sunday",S=0;const E=function(t,e,n,i){return!i.includes(t.format(e.trim()))&&(!!(t.isoWeekday()>=6&&n.includes("weekends"))||(!!n.includes(t.format("dddd").toLowerCase())||n.includes(t.format(e.trim()))))},A=function(t,e,n,i){if(!n.length||t.manualEndTime)return;let r,a;r=t.startTime instanceof Date?s(t.startTime):s(t.startTime,e,!0),r=r.add(1,"d"),a=t.endTime instanceof Date?s(t.endTime):s(t.endTime,e,!0);const[o,c]=M(r,a,e,n,i);t.endTime=o.toDate(),t.renderEndTime=c},M=function(t,e,n,i,s){let r=!1,a=null;for(;t<=e;)r||(a=e.toDate()),r=E(t,n,i,s),r&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,a]},Y=function(t,e,n){n=n.trim();const i=/^after\s+(?<ids>[\d\w- ]+)/.exec(n);if(null!==i){let t=null;for(const n of i.groups.ids.split(" ")){let e=N(n);void 0!==e&&(!t||e.endTime>t.endTime)&&(t=e)}if(t)return t.endTime;const e=new Date;return e.setHours(0,0,0,0),e}let r=s(n,e.trim(),!0);if(r.isValid())return r.toDate();{c.l.debug("Invalid date:"+n),c.l.debug("With date format:"+e.trim());const t=new Date(n);if(void 0===t||isNaN(t.getTime())||t.getFullYear()<-1e4||t.getFullYear()>1e4)throw new Error("Invalid date:"+n);return t}},L=function(t){const e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return null!==e?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},I=function(t,e,n,i=!1){n=n.trim();const r=/^until\s+(?<ids>[\d\w- ]+)/.exec(n);if(null!==r){let t=null;for(const n of r.groups.ids.split(" ")){let e=N(n);void 0!==e&&(!t||e.startTime<t.startTime)&&(t=e)}if(t)return t.startTime;const e=new Date;return e.setHours(0,0,0,0),e}let a=s(n,e.trim(),!0);if(a.isValid())return i&&(a=a.add(1,"d")),a.toDate();let o=s(t);const[c,l]=L(n);if(!Number.isNaN(c)){const t=o.add(c,l);t.isValid()&&(o=t)}return o.toDate()};let O=0;const W=function(t){return void 0===t?(O+=1,"task"+O):t};let F,P,B=[];const z={},N=function(t){const e=z[t];return B[e]},G=function(){const t=function(t){const e=B[t];let n="";switch(B[t].raw.startTime.type){case"prevTaskEnd":{const t=N(e.prevTaskId);e.startTime=t.endTime;break}case"getStartDate":n=Y(0,f,B[t].raw.startTime.startData),n&&(B[t].startTime=n)}return B[t].startTime&&(B[t].endTime=I(B[t].startTime,f,B[t].raw.endTime.data,$),B[t].endTime&&(B[t].processed=!0,B[t].manualEndTime=s(B[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),A(B[t],f,p,k))),B[t].processed};let e=!0;for(const[n,i]of B.entries())t(n),e=e&&i.processed;return e},H=function(t,e){t.split(",").forEach((function(t){let n=N(t);void 0!==n&&n.classes.push(e)}))},j=function(t,e){_.push((function(){const n=document.querySelector(`[id="${t}"]`);null!==n&&n.addEventListener("click",(function(){e()}))}),(function(){const n=document.querySelector(`[id="${t}-text"]`);null!==n&&n.addEventListener("click",(function(){e()}))}))},U={getConfig:()=>(0,c.c)().gantt,clear:function(){b=[],v=[],T="",_=[],O=0,F=void 0,P=void 0,B=[],f="",y="",x="",h=void 0,m="",k=[],p=[],$=!1,D=!1,S=0,g={},(0,c.v)(),C="sunday"},setDateFormat:function(t){f=t},getDateFormat:function(){return f},enableInclusiveEndDates:function(){$=!0},endDatesAreInclusive:function(){return $},enableTopAxis:function(){D=!0},topAxisEnabled:function(){return D},setAxisFormat:function(t){y=t},getAxisFormat:function(){return y},setTickInterval:function(t){h=t},getTickInterval:function(){return h},setTodayMarker:function(t){m=t},getTodayMarker:function(){return m},setAccTitle:c.s,getAccTitle:c.g,setDiagramTitle:c.q,getDiagramTitle:c.t,setDisplayMode:function(t){x=t},getDisplayMode:function(){return x},setAccDescription:c.b,getAccDescription:c.a,addSection:function(t){T=t,b.push(t)},getSections:function(){return b},getTasks:function(){let t=G();let e=0;for(;!t&&e<10;)t=G(),e++;return v=B,v},addTask:function(t,e){const n={section:T,type:T,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},i=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const i=n.split(","),s={};R(i,s,w);for(let r=0;r<i.length;r++)i[r]=i[r].trim();switch(i.length){case 1:s.id=W(),s.startTime={type:"prevTaskEnd",id:t},s.endTime={data:i[0]};break;case 2:s.id=W(),s.startTime={type:"getStartDate",startData:i[0]},s.endTime={data:i[1]};break;case 3:s.id=W(i[0]),s.startTime={type:"getStartDate",startData:i[1]},s.endTime={data:i[2]}}return s}(P,e);n.raw.startTime=i.startTime,n.raw.endTime=i.endTime,n.id=i.id,n.prevTaskId=P,n.active=i.active,n.done=i.done,n.crit=i.crit,n.milestone=i.milestone,n.order=S,S++;const s=B.push(n);P=n.id,z[n.id]=s-1},findTaskById:N,addTaskOrg:function(t,e){const n={section:T,type:T,description:t,task:t,classes:[]},i=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const i=n.split(","),r={};R(i,r,w);for(let s=0;s<i.length;s++)i[s]=i[s].trim();let a="";switch(i.length){case 1:r.id=W(),r.startTime=t.endTime,a=i[0];break;case 2:r.id=W(),r.startTime=Y(0,f,i[0]),a=i[1];break;case 3:r.id=W(i[0]),r.startTime=Y(0,f,i[1]),a=i[2]}return a&&(r.endTime=I(r.startTime,f,a,$),r.manualEndTime=s(a,"YYYY-MM-DD",!0).isValid(),A(r,f,p,k)),r}(F,e);n.startTime=i.startTime,n.endTime=i.endTime,n.id=i.id,n.active=i.active,n.done=i.done,n.crit=i.crit,n.milestone=i.milestone,F=n,v.push(n)},setIncludes:function(t){k=t.toLowerCase().split(/[\s,]+/)},getIncludes:function(){return k},setExcludes:function(t){p=t.toLowerCase().split(/[\s,]+/)},getExcludes:function(){return p},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){if("loose"!==(0,c.c)().securityLevel)return;if(void 0===e)return;let i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<i.length;t++){let e=i[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),i[t]=e}}0===i.length&&i.push(t),void 0!==N(t)&&j(t,(()=>{c.u.runFunc(e,...i)}))}(t,e,n)})),H(t,"clickable")},setLink:function(t,e){let n=e;"loose"!==(0,c.c)().securityLevel&&(n=(0,i.Jf)(e)),t.split(",").forEach((function(t){void 0!==N(t)&&(j(t,(()=>{window.open(n,"_self")})),g[t]=n)})),H(t,"clickable")},getLinks:function(){return g},bindFunctions:function(t){_.forEach((function(e){e(t)}))},parseDuration:L,isInvalidDate:E,setWeekday:function(t){C=t},getWeekday:function(){return C}};function R(t,e,n){let i=!0;for(;i;)i=!1,n.forEach((function(n){const s=new RegExp("^\\s*"+n+"\\s*$");t[0].match(s)&&(e[n]=!0,t.shift(1),i=!0)}))}const V={monday:l.ABi,tuesday:l.PGu,wednesday:l.GuW,thursday:l.Mol,friday:l.TUC,saturday:l.rGn,sunday:l.YPH},Z=(t,e)=>{let n=[...t].map((()=>-1/0)),i=[...t].sort(((t,e)=>t.startTime-e.startTime||t.order-e.order)),s=0;for(const r of i)for(let t=0;t<n.length;t++)if(r.startTime>=n[t]){n[t]=r.endTime,r.order=t+e,t>s&&(s=t);break}return s};let X;const q={parser:u,db:U,renderer:{setConf:function(){c.l.debug("Something is calling, setConf, remove the call")},draw:function(t,e,n,i){const r=(0,c.c)().gantt,a=(0,c.c)().securityLevel;let o;"sandbox"===a&&(o=(0,l.Ltv)("#i"+e));const d="sandbox"===a?(0,l.Ltv)(o.nodes()[0].contentDocument.body):(0,l.Ltv)("body"),u="sandbox"===a?o.nodes()[0].contentDocument:document,h=u.getElementById(e);X=h.parentElement.offsetWidth,void 0===X&&(X=1200),void 0!==r.useWidth&&(X=r.useWidth);const f=i.db.getTasks();let y=[];for(const s of f)y.push(s.type);y=function(t){const e={},n=[];for(let i=0,s=t.length;i<s;++i)Object.prototype.hasOwnProperty.call(e,t[i])||(e[t[i]]=!0,n.push(t[i]));return n}(y);const m={};let k=2*r.topPadding;if("compact"===i.db.getDisplayMode()||"compact"===r.displayMode){const t={};for(const n of f)void 0===t[n.section]?t[n.section]=[n]:t[n.section].push(n);let e=0;for(const n of Object.keys(t)){const i=Z(t[n],e)+1;e+=i,k+=i*(r.barHeight+r.barGap),m[n]=i}}else{k+=f.length*(r.barHeight+r.barGap);for(const t of y)m[t]=f.filter((e=>e.type===t)).length}h.setAttribute("viewBox","0 0 "+X+" "+k);const p=d.select(`[id="${e}"]`),g=(0,l.w7C)().domain([(0,l.jkA)(f,(function(t){return t.startTime})),(0,l.T9B)(f,(function(t){return t.endTime}))]).rangeRound([0,X-r.leftPadding-r.rightPadding]);f.sort((function(t,e){const n=t.startTime,i=e.startTime;let s=0;return n>i?s=1:n<i&&(s=-1),s})),function(t,n,a){const o=r.barHeight,d=o+r.barGap,h=r.topPadding,f=r.leftPadding;(0,l.m4Y)().domain([0,y.length]).range(["#00B9FA","#F95002"]).interpolate(l.bEH);(function(t,e,n,a,o,l,d,u){if(0===d.length&&0===u.length)return;let h,f;for(const{startTime:i,endTime:s}of l)(void 0===h||i<h)&&(h=i),(void 0===f||s>f)&&(f=s);if(!h||!f)return;if(s(f).diff(s(h),"year")>5)return void c.l.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");const y=i.db.getDateFormat(),m=[];let k=null,b=s(h);for(;b.valueOf()<=f;)i.db.isInvalidDate(b,y,d,u)?k?k.end=b:k={start:b,end:b}:k&&(m.push(k),k=null),b=b.add(1,"d");p.append("g").selectAll("rect").data(m).enter().append("rect").attr("id",(function(t){return"exclude-"+t.start.format("YYYY-MM-DD")})).attr("x",(function(t){return g(t.start)+n})).attr("y",r.gridLineStartPadding).attr("width",(function(t){const e=t.end.add(1,"day");return g(e)-g(t.start)})).attr("height",o-e-r.gridLineStartPadding).attr("transform-origin",(function(e,i){return(g(e.start)+n+.5*(g(e.end)-g(e.start))).toString()+"px "+(i*t+.5*o).toString()+"px"})).attr("class","exclude-range")})(d,h,f,0,a,t,i.db.getExcludes(),i.db.getIncludes()),function(t,e,n,s){let a=(0,l.l78)(g).tickSize(-s+e+r.gridLineStartPadding).tickFormat((0,l.DCK)(i.db.getAxisFormat()||r.axisFormat||"%Y-%m-%d"));const o=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(i.db.getTickInterval()||r.tickInterval);if(null!==o){const t=o[1],e=o[2],n=i.db.getWeekday()||r.weekday;switch(e){case"millisecond":a.ticks(l.t6C.every(t));break;case"second":a.ticks(l.ucG.every(t));break;case"minute":a.ticks(l.wXd.every(t));break;case"hour":a.ticks(l.Agd.every(t));break;case"day":a.ticks(l.UAC.every(t));break;case"week":a.ticks(V[n].every(t));break;case"month":a.ticks(l.Ui6.every(t))}}if(p.append("g").attr("class","grid").attr("transform","translate("+t+", "+(s-50)+")").call(a).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),i.db.topAxisEnabled()||r.topAxis){let n=(0,l.tlR)(g).tickSize(-s+e+r.gridLineStartPadding).tickFormat((0,l.DCK)(i.db.getAxisFormat()||r.axisFormat||"%Y-%m-%d"));if(null!==o){const t=o[1],e=o[2],s=i.db.getWeekday()||r.weekday;switch(e){case"millisecond":n.ticks(l.t6C.every(t));break;case"second":n.ticks(l.ucG.every(t));break;case"minute":n.ticks(l.wXd.every(t));break;case"hour":n.ticks(l.Agd.every(t));break;case"day":n.ticks(l.UAC.every(t));break;case"week":n.ticks(V[s].every(t));break;case"month":n.ticks(l.Ui6.every(t))}}p.append("g").attr("class","grid").attr("transform","translate("+t+", "+e+")").call(n).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}(f,h,0,a),function(t,n,s,a,o,d,u){const h=[...new Set(t.map((t=>t.order)))].map((e=>t.find((t=>t.order===e))));p.append("g").selectAll("rect").data(h).enter().append("rect").attr("x",0).attr("y",(function(t,e){return t.order*n+s-2})).attr("width",(function(){return u-r.rightPadding/2})).attr("height",n).attr("class",(function(t){for(const[e,n]of y.entries())if(t.type===n)return"section section"+e%r.numberSectionStyles;return"section section0"}));const f=p.append("g").selectAll("rect").data(t).enter(),m=i.db.getLinks();f.append("rect").attr("id",(function(t){return t.id})).attr("rx",3).attr("ry",3).attr("x",(function(t){return t.milestone?g(t.startTime)+a+.5*(g(t.endTime)-g(t.startTime))-.5*o:g(t.startTime)+a})).attr("y",(function(t,e){return t.order*n+s})).attr("width",(function(t){return t.milestone?o:g(t.renderEndTime||t.endTime)-g(t.startTime)})).attr("height",o).attr("transform-origin",(function(t,e){return e=t.order,(g(t.startTime)+a+.5*(g(t.endTime)-g(t.startTime))).toString()+"px "+(e*n+s+.5*o).toString()+"px"})).attr("class",(function(t){const e="task";let n="";t.classes.length>0&&(n=t.classes.join(" "));let i=0;for(const[a,o]of y.entries())t.type===o&&(i=a%r.numberSectionStyles);let s="";return t.active?t.crit?s+=" activeCrit":s=" active":t.done?s=t.crit?" doneCrit":" done":t.crit&&(s+=" crit"),0===s.length&&(s=" task"),t.milestone&&(s=" milestone "+s),s+=i,s+=" "+n,e+s})),f.append("text").attr("id",(function(t){return t.id+"-text"})).text((function(t){return t.task})).attr("font-size",r.fontSize).attr("x",(function(t){let e=g(t.startTime),n=g(t.renderEndTime||t.endTime);t.milestone&&(e+=.5*(g(t.endTime)-g(t.startTime))-.5*o),t.milestone&&(n=e+o);const i=this.getBBox().width;return i>n-e?n+i+1.5*r.leftPadding>u?e+a-5:n+a+5:(n-e)/2+e+a})).attr("y",(function(t,e){return t.order*n+r.barHeight/2+(r.fontSize/2-2)+s})).attr("text-height",o).attr("class",(function(t){const e=g(t.startTime);let n=g(t.endTime);t.milestone&&(n=e+o);const i=this.getBBox().width;let s="";t.classes.length>0&&(s=t.classes.join(" "));let a=0;for(const[o,l]of y.entries())t.type===l&&(a=o%r.numberSectionStyles);let c="";return t.active&&(c=t.crit?"activeCritText"+a:"activeText"+a),t.done?c=t.crit?c+" doneCritText"+a:c+" doneText"+a:t.crit&&(c=c+" critText"+a),t.milestone&&(c+=" milestoneText"),i>n-e?n+i+1.5*r.leftPadding>u?s+" taskTextOutsideLeft taskTextOutside"+a+" "+c:s+" taskTextOutsideRight taskTextOutside"+a+" "+c+" width-"+i:s+" taskText taskText"+a+" "+c+" width-"+i}));if("sandbox"===(0,c.c)().securityLevel){let t;t=(0,l.Ltv)("#i"+e);const n=t.nodes()[0].contentDocument;f.filter((function(t){return void 0!==m[t.id]})).each((function(t){var e=n.querySelector("#"+t.id),i=n.querySelector("#"+t.id+"-text");const s=e.parentNode;var r=n.createElement("a");r.setAttribute("xlink:href",m[t.id]),r.setAttribute("target","_top"),s.appendChild(r),r.appendChild(e),r.appendChild(i)}))}}(t,d,h,f,o,0,n),function(t,e){let n=0;const i=Object.keys(m).map((t=>[t,m[t]]));p.append("g").selectAll("text").data(i).enter().append((function(t){const e=t[0].split(c.e.lineBreakRegex),n=-(e.length-1)/2,i=u.createElementNS("http://www.w3.org/2000/svg","text");i.setAttribute("dy",n+"em");for(const[s,r]of e.entries()){const t=u.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttribute("alignment-baseline","central"),t.setAttribute("x","10"),s>0&&t.setAttribute("dy","1em"),t.textContent=r,i.appendChild(t)}return i})).attr("x",10).attr("y",(function(s,r){if(!(r>0))return s[1]*t/2+e;for(let a=0;a<r;a++)return n+=i[r-1][1],s[1]*t/2+n*t+e})).attr("font-size",r.sectionFontSize).attr("class",(function(t){for(const[e,n]of y.entries())if(t[0]===n)return"sectionTitle sectionTitle"+e%r.numberSectionStyles;return"sectionTitle"}))}(d,h),function(t,e,n,s){const a=i.db.getTodayMarker();if("off"===a)return;const o=p.append("g").attr("class","today"),c=new Date,l=o.append("line");l.attr("x1",g(c)+t).attr("x2",g(c)+t).attr("y1",r.titleTopMargin).attr("y2",s-r.titleTopMargin).attr("class","today"),""!==a&&l.attr("style",a.replace(/,/g,";"))}(f,0,0,a)}(f,X,k),(0,c.i)(p,k,X,r.useMaxWidth),p.append("text").text(i.db.getDiagramTitle()).attr("x",X/2).attr("y",r.titleTopMargin).attr("class","titleText")}},styles:t=>`\n .mermaid-main-font {\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n\n .exclude-range {\n fill: ${t.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${t.sectionBkgColor};\n }\n\n .section2 {\n fill: ${t.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${t.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${t.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n }\n\n .grid .tick text {\n font-family: ${t.fontFamily};\n fill: ${t.textColor};\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${t.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n\n .taskTextOutsideRight {\n fill: ${t.taskTextDarkColor};\n text-anchor: start;\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n\n .taskTextOutsideLeft {\n fill: ${t.taskTextDarkColor};\n text-anchor: end;\n }\n\n\n /* Special case clickable */\n\n .task.clickable {\n cursor: pointer;\n }\n\n .taskText.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${t.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${t.taskBkgColor};\n stroke: ${t.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${t.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${t.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${t.activeTaskBkgColor};\n stroke: ${t.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${t.doneTaskBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.titleColor||t.textColor};\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n`}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/88fa6390.cb1c4c18.js b/pr-preview/pr-1594/assets/js/88fa6390.cb1c4c18.js deleted file mode 100644 index d5e199bf6d..0000000000 --- a/pr-preview/pr-1594/assets/js/88fa6390.cb1c4c18.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3406],{68267:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>o});var s=t(74848),r=t(28453);const i={},a="Snowflake",d={id:"reference/Connectors/materialization-connectors/Snowflake",title:"Snowflake",description:"This connector materializes Flow collections into tables in a Snowflake database.",source:"@site/docs/reference/Connectors/materialization-connectors/Snowflake.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/Snowflake",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/Snowflake.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Slack",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack"},next:{title:"SQLite",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite"}},l={},o=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:3},{value:"Key-pair Authentication & Snowpipe",id:"key-pair-authentication--snowpipe",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Sync Schedule",id:"sync-schedule",level:2},{value:"Delta updates",id:"delta-updates",level:2},{value:"Performance considerations",id:"performance-considerations",level:2},{value:"Optimizing performance for standard updates",id:"optimizing-performance-for-standard-updates",level:3},{value:"Snowpipe",id:"snowpipe",level:3},{value:"Timestamp Data Type Mapping",id:"timestamp-data-type-mapping",level:2},{value:"Reserved words",id:"reserved-words",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"snowflake",children:"Snowflake"}),"\n",(0,s.jsxs)(n.p,{children:["This connector materializes Flow collections into tables in a Snowflake database.\nIt allows both standard and ",(0,s.jsx)(n.a,{href:"#delta-updates",children:"delta updates"}),". ",(0,s.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/data-load-snowpipe-intro",children:"Snowpipe"})," is additionally available for delta update bindings."]}),"\n",(0,s.jsxs)(n.p,{children:["The connector first uploads data changes to a ",(0,s.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/data-load-local-file-system-create-stage.html#table-stages",children:"Snowflake table stage"}),".\nFrom there, it transactionally applies the changes to the Snowflake table."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/materialize-snowflake:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/materialize-snowflake:dev"})})," provides the latest connector image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["A Snowflake account that includes:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A target database, to which you'll materialize data"}),"\n",(0,s.jsxs)(n.li,{children:["A ",(0,s.jsx)(n.a,{href:"https://docs.snowflake.com/en/sql-reference/ddl-database.html",children:"schema"})," \u2014 a logical grouping of database objects \u2014 within the target database"]}),"\n",(0,s.jsx)(n.li,{children:"A virtual warehouse"}),"\n",(0,s.jsxs)(n.li,{children:["A user with a role assigned that grants the appropriate access levels to these resources.\nSee the ",(0,s.jsx)(n.a,{href:"#setup",children:"script below"})," for details."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Know your Snowflake account's host URL. This is formatted using your ",(0,s.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/admin-account-identifier.html#where-are-account-identifiers-used",children:"Snowflake account identifier"}),",\nfor example, ",(0,s.jsx)(n.code,{children:"orgname-accountname.snowflakecomputing.com"}),"."]}),"\n",(0,s.jsx)(n.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["If you haven't yet captured your data from its external source, start at the beginning of the ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"guide to create a dataflow"}),". You'll be referred back to this connector-specific documentation at the appropriate steps."]})}),"\n",(0,s.jsx)(n.h3,{id:"setup",children:"Setup"}),"\n",(0,s.jsx)(n.p,{children:"To meet the prerequisites, copy and paste the following script into the Snowflake SQL editor, replacing the variable names in the first six lines."}),"\n",(0,s.jsxs)(n.p,{children:["If you'd like to use an existing database, warehouse, and/or schema, be sure to set\n",(0,s.jsx)(n.code,{children:"database_name"}),", ",(0,s.jsx)(n.code,{children:"warehouse_name"}),", and ",(0,s.jsx)(n.code,{children:"estuary_schema"})," accordingly. If you specify a new name, the script will create the item for you. You can set ",(0,s.jsx)(n.code,{children:"estuary_role"}),", ",(0,s.jsx)(n.code,{children:"estuary_user"}),", and ",(0,s.jsx)(n.code,{children:"estuary_password"})," to whatever you'd like."]}),"\n",(0,s.jsxs)(n.p,{children:["Check the ",(0,s.jsx)(n.strong,{children:"All Queries"})," check box, and click ",(0,s.jsx)(n.strong,{children:"Run"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",children:"set database_name = 'ESTUARY_DB';\nset warehouse_name = 'ESTUARY_WH';\nset estuary_role = 'ESTUARY_ROLE';\nset estuary_user = 'ESTUARY_USER';\nset estuary_password = 'secret';\nset estuary_schema = 'ESTUARY_SCHEMA';\n-- create role and schema for Estuary\ncreate role if not exists identifier($estuary_role);\ngrant role identifier($estuary_role) to role SYSADMIN;\n-- Create snowflake DB\ncreate database if not exists identifier($database_name);\nuse database identifier($database_name);\ncreate schema if not exists identifier($estuary_schema);\n-- create a user for Estuary\ncreate user if not exists identifier($estuary_user)\npassword = $estuary_password\ndefault_role = $estuary_role\ndefault_warehouse = $warehouse_name;\ngrant role identifier($estuary_role) to user identifier($estuary_user);\ngrant all on schema identifier($estuary_schema) to identifier($estuary_role);\n-- create a warehouse for estuary\ncreate warehouse if not exists identifier($warehouse_name)\nwarehouse_size = xsmall\nwarehouse_type = standard\nauto_suspend = 60\nauto_resume = true\ninitially_suspended = true;\n-- grant Estuary role access to warehouse\ngrant USAGE\non warehouse identifier($warehouse_name)\nto role identifier($estuary_role);\n-- grant Estuary access to database\ngrant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role);\n-- change role to ACCOUNTADMIN for STORAGE INTEGRATION support to Estuary (only needed for Snowflake on GCP)\nuse role ACCOUNTADMIN;\ngrant CREATE INTEGRATION on account to role identifier($estuary_role);\nuse role sysadmin;\nCOMMIT;\n"})}),"\n",(0,s.jsx)(n.h3,{id:"key-pair-authentication--snowpipe",children:"Key-pair Authentication & Snowpipe"}),"\n",(0,s.jsxs)(n.p,{children:["In order to enable use of Snowpipe for ",(0,s.jsx)(n.a,{href:"#delta-updates",children:"delta updates"})," bindings, you need to authenticate\nusing ",(0,s.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/key-pair-auth",children:"key-pair authentication"}),", also known as JWT authentication."]}),"\n",(0,s.jsx)(n.p,{children:"To set up your user for key-pair authentication, first generate a key-pair in your shell:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# generate a private key\nopenssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt\n# generate a public key\nopenssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub\n# read the public key and copy it to clipboard\ncat rsa_key.pub\n\n-----BEGIN PUBLIC KEY-----\nMIIBIj...\n-----END PUBLIC KEY-----\n"})}),"\n",(0,s.jsx)(n.p,{children:"Then assign the public key with your Snowflake user using these SQL commands:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",children:"ALTER USER $estuary_user SET RSA_PUBLIC_KEY='MIIBIjANBgkqh...'\n"})}),"\n",(0,s.jsx)(n.p,{children:"Verify the public key fingerprint in Snowflake matches the one you have locally:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",children:"DESC USER $estuary_user;\nSELECT TRIM((SELECT \"value\" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))\n WHERE \"property\" = 'RSA_PUBLIC_KEY_FP'), 'SHA256:');\n"})}),"\n",(0,s.jsx)(n.p,{children:"Then compare with the local version:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"openssl rsa -pubin -in rsa_key.pub -outform DER | openssl dgst -sha256 -binary | openssl enc -base64\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Now you can use the generated ",(0,s.jsx)(n.em,{children:"private key"})," when configuring your Snowflake connector. Once you have key-pair authentication enabled, delta updates bindings will use Snowpipe for loading data."]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsx)(n.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a Snowflake materialization, which will direct one or more of your Flow collections to new Snowflake tables."}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/host"})})}),(0,s.jsx)(n.td,{children:"Host (Account URL)"}),(0,s.jsx)(n.td,{children:"The Snowflake Host used for the connection. Example: orgname-accountname.snowflakecomputing.com (do not include the protocol)."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/database"})})}),(0,s.jsx)(n.td,{children:"Database"}),(0,s.jsx)(n.td,{children:"Name of the Snowflake database to which to materialize"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/schema"})})}),(0,s.jsx)(n.td,{children:"Schema"}),(0,s.jsx)(n.td,{children:"Database schema for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/warehouse"})}),(0,s.jsx)(n.td,{children:"Warehouse"}),(0,s.jsx)(n.td,{children:"Name of the data warehouse that contains the database"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/role"})}),(0,s.jsx)(n.td,{children:"Role"}),(0,s.jsx)(n.td,{children:"Role assigned to the user"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/account"})}),(0,s.jsx)(n.td,{children:"Account"}),(0,s.jsx)(n.td,{children:"The Snowflake account identifier"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials"})})}),(0,s.jsx)(n.td,{children:"Credentials"}),(0,s.jsx)(n.td,{children:"Credentials for authentication"}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials/auth_type"})})}),(0,s.jsx)(n.td,{children:"Authentication type"}),(0,s.jsxs)(n.td,{children:["One of ",(0,s.jsx)(n.code,{children:"user_password"})," or ",(0,s.jsx)(n.code,{children:"jwt"})]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials/user"})})}),(0,s.jsx)(n.td,{children:"User"}),(0,s.jsx)(n.td,{children:"Snowflake username"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/credentials/password"})}),(0,s.jsx)(n.td,{children:"Password"}),(0,s.jsx)(n.td,{children:"Required if using user_password authentication"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/credentials/privateKey"})}),(0,s.jsx)(n.td,{children:"Private Key"}),(0,s.jsx)(n.td,{children:"Required if using jwt authentication"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/table"})})}),(0,s.jsx)(n.td,{children:"Table"}),(0,s.jsx)(n.td,{children:"Table name"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/schema"})}),(0,s.jsx)(n.td,{children:"Alternative Schema"}),(0,s.jsx)(n.td,{children:"Alternative schema for this table"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/delta_updates"})}),(0,s.jsx)(n.td,{children:"Delta updates"}),(0,s.jsxs)(n.td,{children:["Whether to use standard or ",(0,s.jsx)(n.a,{href:"#delta-updates",children:"delta updates"})]}),(0,s.jsx)(n.td,{children:"boolean"}),(0,s.jsx)(n.td,{})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.p,{children:"User and password authentication:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n \t connector:\n \t config:\n database: acmeCo_db\n host: orgname-accountname.snowflakecomputing.com\n schema: acmeCo_flow_schema\n warehouse: acmeCo_warehouse\n credentials:\n auth_type: user_pasword\n user: snowflake_user\n password: secret\n \t image: ghcr.io/estuary/materialize-snowflake:dev\n # If you have multiple collections you need to materialize, add a binding for each one\n # to ensure complete data flow-through\n bindings:\n \t- resource:\n \ttable: ${table_name}\n source: ${PREFIX}/${source_collection}\n"})}),"\n",(0,s.jsx)(n.p,{children:"Key-pair authentication:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n \t connector:\n \t config:\n database: acmeCo_db\n host: orgname-accountname.snowflakecomputing.com\n schema: acmeCo_flow_schema\n warehouse: acmeCo_warehouse\n credentials:\n auth_type: jwt\n user: snowflake_user\n privateKey: |\n -----BEGIN PRIVATE KEY-----\n MIIEv....\n ...\n ...\n ...\n ...\n ...\n -----END PRIVATE KEY-----\n \t image: ghcr.io/estuary/materialize-snowflake:dev\n # If you have multiple collections you need to materialize, add a binding for each one\n # to ensure complete data flow-through\n bindings:\n \t- resource:\n \ttable: ${table_name}\n source: ${PREFIX}/${source_collection}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"sync-schedule",children:"Sync Schedule"}),"\n",(0,s.jsxs)(n.p,{children:["This connector supports configuring a schedule for sync frequency. You can read\nabout how to configure this ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/materialization-sync-schedule",children:"here"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Snowflake compute is ",(0,s.jsx)(n.a,{href:"https://www.snowflake.com/pricing/",children:"priced"})," per second of\nactivity, with a minimum of 60 seconds. Inactive warehouses don't incur charges.\nTo keep costs down, you'll want to minimize your warehouse's active time."]}),"\n",(0,s.jsx)(n.p,{children:"To accomplish this, we recommend a two-pronged approach:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://docs.snowflake.com/en/sql-reference/sql/create-warehouse.html#:~:text=Specifies%20the%20number%20of%20seconds%20of%20inactivity%20after%20which%20a%20warehouse%20is%20automatically%20suspended.",children:"Configure your Snowflake warehouse to auto-suspend"})," after 60 seconds."]}),"\n",(0,s.jsx)(n.p,{children:"This ensures that after each transaction completes, you'll only be charged for one minute of compute, Snowflake's smallest granularity."}),"\n",(0,s.jsx)(n.p,{children:"Use a query like the one shown below, being sure to substitute your warehouse name:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",children:"ALTER WAREHOUSE ESTUARY_WH SET auto_suspend = 60;\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Configure the materialization's ",(0,s.jsx)(n.strong,{children:"Sync Schedule"})," based on your requirements for data freshness."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,s.jsxs)(n.p,{children:["This connector supports both standard (merge) and ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]}),"\n",(0,s.jsx)(n.p,{children:"Enabling delta updates will prevent Flow from querying for documents in your Snowflake table, which can reduce latency and costs for large datasets.\nIf you're certain that all events will have unique keys, enabling delta updates is a simple way to improve\nperformance with no effect on the output.\nHowever, enabling delta updates is not suitable for all workflows, as the resulting table in Snowflake won't be fully reduced."}),"\n",(0,s.jsx)(n.p,{children:"You can enable delta updates on a per-binding basis:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" bindings:\n \t- resource:\n \ttable: ${table_name}\n delta_updates: true\n source: ${PREFIX}/${source_collection}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"performance-considerations",children:"Performance considerations"}),"\n",(0,s.jsx)(n.h3,{id:"optimizing-performance-for-standard-updates",children:"Optimizing performance for standard updates"}),"\n",(0,s.jsxs)(n.p,{children:["When using standard updates for a large dataset, the ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#keys",children:"collection key"})," you choose can have a significant impact on materialization performance and efficiency."]}),"\n",(0,s.jsxs)(n.p,{children:["Snowflake uses ",(0,s.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/tables-clustering-micropartitions.html",children:"micro partitions"})," to physically arrange data within tables.\nEach micro partition includes metadata, such as the minimum and maximum values for each column.\nIf you choose a collection key that takes advantage of this metadata to help Snowflake prune irrelevant micro partitions,\nyou'll see dramatically better performance."]}),"\n",(0,s.jsxs)(n.p,{children:["For example, if you materialize a collection with a key of ",(0,s.jsx)(n.code,{children:"/user_id"}),", it will tend to perform far worse than a materialization of ",(0,s.jsx)(n.code,{children:"/date, /user_id"}),".\nThis is because most materializations tend to be roughly chronological over time, and that means that data is written to Snowflake in roughly ",(0,s.jsx)(n.code,{children:"/date"})," order."]}),"\n",(0,s.jsxs)(n.p,{children:["This means that updates of keys ",(0,s.jsx)(n.code,{children:"/date, /user_id"})," will need to physically read far fewer rows as compared to a key like ",(0,s.jsx)(n.code,{children:"/user_id"}),",\nbecause those rows will tend to live in the same micro-partitions, and Snowflake is able to cheaply prune micro-partitions that aren't relevant to the transaction."]}),"\n",(0,s.jsx)(n.h3,{id:"snowpipe",children:"Snowpipe"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/data-load-snowpipe-intro",children:"Snowpipe"})," allows for loading data into target tables without waking up the warehouse, which can be cheaper and more performant. Snowpipe can be used for delta updates bindings, and it requires configuring your authentication using a private key. Instructions for configuring key-pair authentication can be found in this page: ",(0,s.jsx)(n.a,{href:"#key-pair-authentication--snowpipe",children:"Key-pair Authentication & Snowpipe"})]}),"\n",(0,s.jsx)(n.h2,{id:"timestamp-data-type-mapping",children:"Timestamp Data Type Mapping"}),"\n",(0,s.jsxs)(n.p,{children:["Flow materializes timestamp data types as either ",(0,s.jsx)(n.code,{children:"TIMESTAMP_LTZ"})," or\n",(0,s.jsx)(n.code,{children:"TIMESTAMP_TZ"})," columns in Snowflake. ",(0,s.jsx)(n.code,{children:"TIMESTAMP_LTZ"})," is used unless the\nSnowflake ",(0,s.jsx)(n.code,{children:"TIMESTAMP_TYPE_MAPPING"})," configuration is set to ",(0,s.jsx)(n.code,{children:"TIMESTAMP_TZ"}),",\nwhich will cause Flow to use ",(0,s.jsx)(n.code,{children:"TIMESTAMP_TZ"})," columns. Flow never creates columns\nas ",(0,s.jsx)(n.code,{children:"TIMESTAMP_NTZ"}),". See ",(0,s.jsxs)(n.a,{href:"https://docs.snowflake.com/en/sql-reference/parameters#timestamp-type-mapping",children:["Snowflake documentation on ",(0,s.jsx)(n.code,{children:"TIMESTAMP_TYPE_MAPPING"})," for\nmore\ninformation"]}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,s.jsxs)(n.p,{children:["Snowflake has a list of reserved words that must be quoted in order to be used as an identifier. Flow automatically quotes fields that are in the reserved words list. You can find this list in Snowflake's documentation ",(0,s.jsx)(n.a,{href:"https://docs.snowflake.com/en/sql-reference/reserved-keywords.html",children:"here"})," and in the table below."]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsxs)(n.p,{children:["In Snowflake, objects created with quoted identifiers must always be referenced exactly as created, including the quotes. Otherwise, SQL statements and queries can result in errors. See the ",(0,s.jsx)(n.a,{href:"https://docs.snowflake.com/en/sql-reference/identifiers-syntax.html#double-quoted-identifiers",children:"Snowflake docs"}),"."]})}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Reserved words"}),(0,s.jsx)(n.th,{}),(0,s.jsx)(n.th,{})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"account"}),(0,s.jsx)(n.td,{children:"from"}),(0,s.jsx)(n.td,{children:"qualify"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"all"}),(0,s.jsx)(n.td,{children:"full"}),(0,s.jsx)(n.td,{children:"regexp"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"alter"}),(0,s.jsx)(n.td,{children:"grant"}),(0,s.jsx)(n.td,{children:"revoke"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"and"}),(0,s.jsx)(n.td,{children:"group"}),(0,s.jsx)(n.td,{children:"right"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"any"}),(0,s.jsx)(n.td,{children:"gscluster"}),(0,s.jsx)(n.td,{children:"rlike"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"as"}),(0,s.jsx)(n.td,{children:"having"}),(0,s.jsx)(n.td,{children:"row"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"between"}),(0,s.jsx)(n.td,{children:"ilike"}),(0,s.jsx)(n.td,{children:"rows"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"by"}),(0,s.jsx)(n.td,{children:"in"}),(0,s.jsx)(n.td,{children:"sample"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"case"}),(0,s.jsx)(n.td,{children:"increment"}),(0,s.jsx)(n.td,{children:"schema"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"cast"}),(0,s.jsx)(n.td,{children:"inner"}),(0,s.jsx)(n.td,{children:"select"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"check"}),(0,s.jsx)(n.td,{children:"insert"}),(0,s.jsx)(n.td,{children:"set"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"column"}),(0,s.jsx)(n.td,{children:"intersect"}),(0,s.jsx)(n.td,{children:"some"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"connect"}),(0,s.jsx)(n.td,{children:"into"}),(0,s.jsx)(n.td,{children:"start"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"connection"}),(0,s.jsx)(n.td,{children:"is"}),(0,s.jsx)(n.td,{children:"table"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"constraint"}),(0,s.jsx)(n.td,{children:"issue"}),(0,s.jsx)(n.td,{children:"tablesample"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"create"}),(0,s.jsx)(n.td,{children:"join"}),(0,s.jsx)(n.td,{children:"then"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"cross"}),(0,s.jsx)(n.td,{children:"lateral"}),(0,s.jsx)(n.td,{children:"to"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"current"}),(0,s.jsx)(n.td,{children:"left"}),(0,s.jsx)(n.td,{children:"trigger"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"current_date"}),(0,s.jsx)(n.td,{children:"like"}),(0,s.jsx)(n.td,{children:"true"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"current_time"}),(0,s.jsx)(n.td,{children:"localtime"}),(0,s.jsx)(n.td,{children:"try_cast"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"current_timestamp"}),(0,s.jsx)(n.td,{children:"localtimestamp"}),(0,s.jsx)(n.td,{children:"union"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"current_user"}),(0,s.jsx)(n.td,{children:"minus"}),(0,s.jsx)(n.td,{children:"unique"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"database"}),(0,s.jsx)(n.td,{children:"natural"}),(0,s.jsx)(n.td,{children:"update"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"delete"}),(0,s.jsx)(n.td,{children:"not"}),(0,s.jsx)(n.td,{children:"using"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"distinct"}),(0,s.jsx)(n.td,{children:"null"}),(0,s.jsx)(n.td,{children:"values"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"drop"}),(0,s.jsx)(n.td,{children:"of"}),(0,s.jsx)(n.td,{children:"view"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"else"}),(0,s.jsx)(n.td,{children:"on"}),(0,s.jsx)(n.td,{children:"when"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"exists"}),(0,s.jsx)(n.td,{children:"or"}),(0,s.jsx)(n.td,{children:"whenever"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"false"}),(0,s.jsx)(n.td,{children:"order"}),(0,s.jsx)(n.td,{children:"where"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"following"}),(0,s.jsx)(n.td,{children:"organization"}),(0,s.jsx)(n.td,{children:"with"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"for"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{})]})]})]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>d});var s=t(96540);const r={},i=s.createContext(r);function a(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8a611437.2791fab7.js b/pr-preview/pr-1594/assets/js/8a611437.2791fab7.js deleted file mode 100644 index 0bcca033f0..0000000000 --- a/pr-preview/pr-1594/assets/js/8a611437.2791fab7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5828],{70056:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var r=t(74848),s=t(28453);const i={},c="Snapchat Marketing",o={id:"reference/Connectors/capture-connectors/snapchat",title:"Snapchat Marketing",description:"This connector captures data from Snapchat Marketing into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/snapchat.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/snapchat",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/snapchat.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Slack",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack"},next:{title:"Snowflake CDC Connector",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake"}},a={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"snapchat-marketing",children:"Snapchat Marketing"}),"\n",(0,r.jsx)(n.p,{children:"This connector captures data from Snapchat Marketing into Flow collections."}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://ghcr.io/estuary/source-snapchat:dev",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-snapchat:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/snapchat/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,r.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,r.jsx)(n.p,{children:"This connector can be used to sync the following tables from Snapchat:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Adaccounts"}),"\n",(0,r.jsx)(n.li,{children:"Ads"}),"\n",(0,r.jsx)(n.li,{children:"Adsquads"}),"\n",(0,r.jsx)(n.li,{children:"Campaigns"}),"\n",(0,r.jsx)(n.li,{children:"Creatives"}),"\n",(0,r.jsx)(n.li,{children:"Media"}),"\n",(0,r.jsx)(n.li,{children:"Organizations"}),"\n",(0,r.jsx)(n.li,{children:"Segments"}),"\n",(0,r.jsx)(n.li,{children:"AdaccountsStatsHourly"}),"\n",(0,r.jsx)(n.li,{children:"AdaccountsStatsDaily"}),"\n",(0,r.jsx)(n.li,{children:"AdaccountsStatsLifetime"}),"\n",(0,r.jsx)(n.li,{children:"AdsStatsHourly"}),"\n",(0,r.jsx)(n.li,{children:"AdsStatsDaily"}),"\n",(0,r.jsx)(n.li,{children:"AdsStatsHourly"}),"\n",(0,r.jsx)(n.li,{children:"AdsStatsDaily"}),"\n",(0,r.jsx)(n.li,{children:"AdsStatsLifetime"}),"\n",(0,r.jsx)(n.li,{children:"AdsquadsStatsDaily"}),"\n",(0,r.jsx)(n.li,{children:"AdsquadsStatsLifetime"}),"\n",(0,r.jsx)(n.li,{children:"CampaignsStatsHourly"}),"\n",(0,r.jsx)(n.li,{children:"CampaignsStatsDaily"}),"\n",(0,r.jsx)(n.li,{children:"CampaignsStatsLifetime"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"A Snapchat Marketing account with permission to access data from accounts you want to sync."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Snapchat source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/start_date"})}),(0,r.jsx)(n.td,{children:"Start Date"}),(0,r.jsx)(n.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Default"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/end_date"})}),(0,r.jsx)(n.td,{children:"End Date"}),(0,r.jsx)(n.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Resource of your Snapchat project from which collections are captured."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync Mode"}),(0,r.jsx)(n.td,{children:"Connection method."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-snapchat:dev\n config:\n start_date: 2017-01-25T00:00:00Z\n end_date: 2018-01-25T00:00:00Z\n bindings:\n - resource:\n stream: lists\n syncMode: full_refresh\n target: ${PREFIX}/lists\n {...}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>o});var r=t(96540);const s={},i=r.createContext(s);function c(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8dce94c3.e9ffddf1.js b/pr-preview/pr-1594/assets/js/8dce94c3.e9ffddf1.js deleted file mode 100644 index 8c0dc3d85e..0000000000 --- a/pr-preview/pr-1594/assets/js/8dce94c3.e9ffddf1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3798],{93316:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var i=t(74848),r=t(28453);const o={},s="Journals",a={id:"concepts/advanced/journals",title:"Journals",description:"Journals are an advanced concept of Flow.",source:"@site/docs/concepts/advanced/journals.md",sourceDirName:"concepts/advanced",slug:"/concepts/advanced/journals",permalink:"/pr-preview/pr-1594/concepts/advanced/journals",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/advanced/journals.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Schema evolution",permalink:"/pr-preview/pr-1594/concepts/advanced/evolutions"},next:{title:"Logs and statistics",permalink:"/pr-preview/pr-1594/concepts/advanced/logs-stats"}},l={},c=[{value:"Specification",id:"specification",level:2},{value:"Physical partitions",id:"physical-partitions",level:2},{value:"Fragment files",id:"fragment-files",level:2},{value:"Hive layouts",id:"hive-layouts",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"journals",children:"Journals"}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Journals are an advanced concept of Flow.\nYou can use Flow without knowing the details of journals,\nbut this section may help you better understand how Flow works."})}),"\n",(0,i.jsxs)(n.p,{children:["Flow collections store their data in one or more ",(0,i.jsx)(n.strong,{children:"journals"}),",\nresources resembling files.\nJournals are part of the Gazette project.\n",(0,i.jsx)(n.a,{href:"https://gazette.readthedocs.io/en/latest/brokers-concepts.html#journals",children:"See Gazette's Journal concepts page for details"}),".\nThe number of journals that comprise a given collection depends\non how the collection is partitioned."]}),"\n",(0,i.jsxs)(n.p,{children:["Journals are a real-time data lake.\nHistorical journal data is stored as an organized layout of\n",(0,i.jsx)(n.a,{href:"#fragment-files",children:"fragment files"})," in cloud storage.\nFragment files are regular files that collectively hold the journal's content.\nJust-written data is held in a replicated buffer,\nwhere it is immediately available to readers.\nFrom there, buffers are regularly persisted\nto your bucket for long-term storage."]}),"\n",(0,i.jsx)(n.p,{children:"Journals may be read from any offset.\nReaders of historical data,\nsuch as a new materialization or derivation task,\nfetch files directly from your bucket for efficiency and throughput.\nThen, as they reach the present, they automatically switch to\nstreaming new documents within milliseconds of their being written."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:t(61344).A+"",width:"960",height:"540"})}),"\n",(0,i.jsxs)(n.p,{children:["All data of a collection is stored as regular JSON files\nunder a common and unique prefix within your cloud storage bucket.\nFor example, all fragment files of collection ",(0,i.jsx)(n.code,{children:"acmeCo/orders"}),"\nwould live under the storage prefix\n",(0,i.jsx)(n.code,{children:"s3://acmeCo-bucket/acmeCo/orders"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Files are ",(0,i.jsx)(n.strong,{children:"directly accessible"})," by other tools.\nThis is an important aspect of Flow's design,\nand it has some major implications:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"You can use tools including Snowflake, Spark, Hive, Pandas,\nand many others to read and process the data in your Flow collections."}),"\n",(0,i.jsxs)(n.li,{children:["You can capture and organize data into Flow collections\nwithout knowing how it will be used quite yet.\nPerform ad-hoc analysis using the collection data lake,\nand layer in ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivations"}),"\nor ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization",children:"materializations"})," later,\nor not at all."]}),"\n",(0,i.jsx)(n.li,{children:"If you ever decide to stop using Flow,\nyour data is still yours.\nThere's no lock-in or need to migrate data out."}),"\n",(0,i.jsx)(n.li,{children:"Removing files from your bucket also removes them from your collection.\nApply bucket lifecycle policies or directly delete files to permanently\ndrop their contents from the collection."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Flow collections have one or more\n",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections#logical-partitions",children:"logical partitions"}),",\nand each logical partition has one or more\n",(0,i.jsx)(n.a,{href:"#physical-partitions",children:"physical partitions"}),".\nEvery physical partition is implemented as a ",(0,i.jsx)(n.strong,{children:"journal"}),",\nand a journal may have many ",(0,i.jsx)(n.a,{href:"#fragment-files",children:"fragment files"}),"."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Entity"}),(0,i.jsx)(n.th,{children:"Example"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Collection"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"acmeCo/orders"})})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Logical Partition"}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"acmeCo/orders/"}),(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"category=Anvils"})})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Physical Partition / Journal"}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"acmeCo/orders/category=Anvils/"}),(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"pivot=00"})})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Journal Storage"}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"s3://acmeCo-bucket/"})}),(0,i.jsx)(n.code,{children:"acmeCo/orders/category=Anvils/pivot=00"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Fragment File"}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"s3://acmeCo-bucket/acmeCo/orders/category=Anvils/pivot=00/"}),(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"utc_date=2022-01-07/utc_hour=19/0000000000000000-00000000201a3f27-1ec69e2de187b7720fb864a8cd6d50bb69cc7f26.gz"})})]})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"specification",children:"Specification"}),"\n",(0,i.jsxs)(n.p,{children:["Flow ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections",children:"collections"})," can control some aspects of how\ntheir contents are mapped into journals through the ",(0,i.jsx)(n.code,{children:"journals"})," stanza:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/orders:\n schema: orders.schema.yaml\n key: [/id]\n\n journals:\n # Configuration for journal fragments.\n # Required, type: object.\n fragments:\n # Codec used to compress fragment files.\n # One of ZSTANDARD, SNAPPY, GZIP, or NONE.\n # Optional. Default is GZIP.\n compressionCodec: GZIP\n # Maximum flush delay before in-progress fragment buffers are closed\n # and persisted. Default uses no flush interval.\n # Optional. Given as a time duration.\n flushInterval: 15m\n # Desired content length of each fragment, in megabytes before compression.\n # Default is 512MB.\n # Optional, type: integer.\n length: 512\n # Duration for which historical files of the collection should be kept.\n # Default is forever.\n # Optional. Given as a time duration.\n retention: 720h\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Your ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/storage-mappings",children:"storage mappings"})," determine\nwhich of your cloud storage buckets is used\nfor storage of collection fragment files."]}),"\n",(0,i.jsx)(n.h2,{id:"physical-partitions",children:"Physical partitions"}),"\n",(0,i.jsx)(n.p,{children:"Every logical partition of a Flow collection\nis created with a single physical partition.\nLater and as required, new physical partitions are added\nin order to increase the write throughput of the collection."}),"\n",(0,i.jsxs)(n.p,{children:["Each physical partition is responsible for all new writes\ncovering a range of keys occurring in collection documents.\nConceptually, if keys range from [A-Z] then one partition\nmight cover [A-F] while another covers [G-Z].\nThe ",(0,i.jsx)(n.code,{children:"pivot"})," of a partition reflects the first key\nin its covered range.\nOne physical partition is turned into more partitions\nby subdividing its range of key ownership.\nFor instance, a partition covering [A-F]\nis split into partitions [A-C] and [D-F]."]}),"\n",(0,i.jsxs)(n.p,{children:["Physical partitions are journals.\nThe relationship between the journal and\nits specific collection and logical partition are\nencoded within\n",(0,i.jsx)(n.a,{href:"https://gazette.readthedocs.io/en/latest/brokers-concepts.html#specifications",children:"its journal specification"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"fragment-files",children:"Fragment files"}),"\n",(0,i.jsx)(n.p,{children:"Journal fragment files each hold a slice of your collection's content,\nstored as a compressed file of newline-delimited JSON documents\nin your cloud storage bucket."}),"\n",(0,i.jsx)(n.p,{children:"Files are flushed to cloud storage periodically,\ntypically after they reach a desired size threshold.\nThey use a content-addressed naming scheme\nwhich allows Flow to understand\nhow each file stitches into the overall journal.\nConsider a fragment file path like:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"s3://acmeCo-bucket/acmeCo/orders/category=Anvils/pivot=00/utc_date=2022-01-07/utc_hour=19/0000000000000000-00000000201a3f27-1ec69e2de187b7720fb864a8cd6d50bb69cc7f26.gz"})}),"\n",(0,i.jsx)(n.p,{children:"This path has the following components:"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Component"}),(0,i.jsx)(n.th,{children:"Example"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Storage prefix of physical partition"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"s3://acmeCo-bucket/acmeCo/orders/category=Anvils/pivot=00/"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Supplemental time pseudo-partitions"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"utc_date=2022-01-07/utc_hour=19/"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Beginning content offset"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"0000000000000000"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Ending content offset"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"00000000201a3f27"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"SHA content checksum"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"1ec69e2de187b7720fb864a8cd6d50bb69cc7f26"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Compression codec"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:".gz"})})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["The supplemental ",(0,i.jsx)(n.strong,{children:"time pseudo-partitions"})," are not logical partitions,\nbut are added to each fragment file path to facilitate\nintegration with external tools that understand ",(0,i.jsx)(n.strong,{children:"Hive layouts"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"hive-layouts",children:"Hive layouts"}),"\n",(0,i.jsxs)(n.p,{children:["As we've seen,\ncollection fragment files are written to cloud storage\nwith path components like\n",(0,i.jsx)(n.code,{children:"/category=Anvils/pivot=00/utc_date=2022-01-07/utc_hour=19/"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["If you've used tools within the Apache Hive ecosystem, this layout should feel familiar.\nFlow organizes files in this way to make them directly usable\nby tools that understand Hive partitioning, like Spark and Hive itself.\nCollections can also be integrated as Hive-compatible external tables\nin tools like\n",(0,i.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/tables-external-intro.html#partitioned-external-tables",children:"Snowflake"}),"\nand\n",(0,i.jsx)(n.a,{href:"https://cloud.google.com/bigquery/docs/hive-partitioned-queries-gcs",children:"BigQuery"}),"\nfor ad-hoc analysis."]}),"\n",(0,i.jsxs)(n.p,{children:["SQL queries against these tables can even utilize ",(0,i.jsx)(n.strong,{children:"predicate push-down"}),",\ntaking query predicates over ",(0,i.jsx)(n.code,{children:"category"}),", ",(0,i.jsx)(n.code,{children:"utc_date"}),", and ",(0,i.jsx)(n.code,{children:"utc_hour"}),"\nand pushing them down into the selection of files that must be read to answer\nthe query \u2014 often offering much faster and more efficient query execution because\nfar less data must be read."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},61344:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/journals-d78b87f0eda7164e8a9936e36c4d7a0e.svg"},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var i=t(96540);const r={},o=i.createContext(r);function s(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/8e876c80.c8f53ef4.js b/pr-preview/pr-1594/assets/js/8e876c80.c8f53ef4.js deleted file mode 100644 index b7268b2cbb..0000000000 --- a/pr-preview/pr-1594/assets/js/8e876c80.c8f53ef4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3624],{16188:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var o=t(74848),i=t(28453);const s={sidebar_position:2},r="Captures",c={id:"concepts/captures",title:"Captures",description:"A capture is how Flow ingests data from an external source.",source:"@site/docs/concepts/captures.md",sourceDirName:"concepts",slug:"/concepts/captures",permalink:"/pr-preview/pr-1594/concepts/captures",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/captures.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Catalog",permalink:"/pr-preview/pr-1594/concepts/catalogs"},next:{title:"Collections",permalink:"/pr-preview/pr-1594/concepts/collections"}},a={},l=[{value:"Connectors",id:"connectors",level:2},{value:"Batch sources",id:"batch-sources",level:3},{value:"Discovery",id:"discovery",level:2},{value:"Automatically update captures",id:"automatically-update-captures",level:2},{value:"Specification",id:"specification",level:2}];function d(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"captures",children:"Captures"}),"\n",(0,o.jsxs)(n.p,{children:["A ",(0,o.jsx)(n.strong,{children:"capture"})," is how Flow ingests data from an external source.\nEvery Data Flow starts with a capture."]}),"\n",(0,o.jsxs)(n.p,{children:["Captures are a type of Flow ",(0,o.jsx)(n.strong,{children:"task"}),".\nThey connect to an external data source, or ",(0,o.jsx)(n.strong,{children:"endpoint"}),",\nand bind one or more of its resources, such as database tables.\nEach binding adds documents to a corresponding Flow ",(0,o.jsx)(n.strong,{children:"collection"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["Captures run continuously:\nas soon as new documents are made available at the endpoint resources,\nFlow validates their schema and adds them to the appropriate collection.\nCaptures can process ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#documents",children:"documents"})," up to 16 MB in size."]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{src:t(49791).A+"",width:"960",height:"540"})}),"\n",(0,o.jsxs)(n.p,{children:["You define and configure captures in ",(0,o.jsx)(n.strong,{children:"Flow specifications"}),"."]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-capture",children:"See the guide to create a capture"})}),"\n",(0,o.jsx)(n.h2,{id:"connectors",children:"Connectors"}),"\n",(0,o.jsxs)(n.p,{children:["Captures extract data from an endpoint using a ",(0,o.jsx)(n.a,{href:"../#connectors",children:"connector"}),".\nEstuary builds and maintains many real-time connectors for various technology systems,\nsuch as database change data capture (CDC) connectors."]}),"\n",(0,o.jsxs)(n.p,{children:["See the ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/",children:"source connector reference documentation"}),"."]}),"\n",(0,o.jsx)(n.h3,{id:"batch-sources",children:"Batch sources"}),"\n",(0,o.jsxs)(n.p,{children:["Flow supports running both first and third party connectors to batch sources including Singer, Meltano and Airbyte as well as natively-written Estuary connectors.",(0,o.jsx)(n.br,{}),"\n","These connectors tend to focus on SaaS APIs, and do not offer real-time streaming integrations.\nFlow runs the connector at regular intervals to capture updated documents."]}),"\n",(0,o.jsxs)(n.p,{children:["Third-party source connectors are independently reviewed and sometimes updated for compatibility with Flow.\nEstuary's ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/",children:"source connectors"})," documentation includes all actively supported connectors.\nIf you see a connector you'd like to prioritize for access in the Flow web app, ",(0,o.jsx)(n.a,{href:"mailto:support@estuary.dev",children:"contact us"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"discovery",children:"Discovery"}),"\n",(0,o.jsxs)(n.p,{children:["To help you configure new pull captures, Flow offers the guided ",(0,o.jsx)(n.strong,{children:"discovery"})," workflow in the Flow web application."]}),"\n",(0,o.jsxs)(n.p,{children:["To begin discovery, you tell Flow the connector you'd like to use and basic information about the endpoint.\nFlow automatically generates a capture configuration for you. It identifies one or more\n",(0,o.jsx)(n.strong,{children:"resources"})," \u2014 tables, data streams, or the equivalent \u2014 and generates ",(0,o.jsx)(n.strong,{children:"bindings"})," so that each will be mapped to a\ndata collection in Flow."]}),"\n",(0,o.jsx)(n.p,{children:"You may then modify the generated configuration as needed before publishing the capture."}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"Discovers can also be run when editing an existing capture. This is commonly done in order to add new bindings, or update the collection specs and schemas associated with existing bindings."})}),"\n",(0,o.jsx)(n.h2,{id:"automatically-update-captures",children:"Automatically update captures"}),"\n",(0,o.jsxs)(n.p,{children:["You can choose to run periodic discovers in the background by adding the ",(0,o.jsx)(n.code,{children:"autoDiscover"})," property to the capture. Flow will periodically check for changes to the source and re-publish the capture to reflect those changes."]}),"\n",(0,o.jsxs)(n.p,{children:["There are several options for controlling the behavior of ",(0,o.jsx)(n.code,{children:"autoDiscover"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.code,{children:"addNewBindings"})," option determines whether to add newly discovered resources, such as database tables, to the capture as ",(0,o.jsx)(n.em,{children:"bindings"}),". If set to ",(0,o.jsx)(n.code,{children:"false"}),", autoCapture will only update the collection specs for existing bindings."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.code,{children:"evolveIncompatibleCollections"})," option determines how to respond when the discovered updates would cause a breaking change to the collection. If ",(0,o.jsx)(n.code,{children:"true"}),", it will trigger an ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/evolutions",children:"evolution"})," of the incompatible collection(s) to prevent failures."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"In the Flow web app, you can set these properties when you create or edit a capture."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{src:t(60850).A+"",width:"1876",height:"162"})}),"\n",(0,o.jsx)(n.p,{children:"The toggles in the web app correspond directly to the properties above:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:['"Automatically keep schemas up to date" enables ',(0,o.jsx)(n.code,{children:"autoDiscover"})]}),"\n",(0,o.jsxs)(n.li,{children:['"Automatically add new collections" corresponds to ',(0,o.jsx)(n.code,{children:"addNewBindings"})]}),"\n",(0,o.jsxs)(n.li,{children:['"Breaking changes re-versions collections" corresponds to ',(0,o.jsx)(n.code,{children:"evolveIncompatibleCollections"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"specification",children:"Specification"}),"\n",(0,o.jsx)(n.p,{children:"Captures are defined in Flow specification files per the following format:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"# A set of captures to include in the catalog.\n# Optional, type: object\ncaptures:\n # The name of the capture.\n acmeCo/example/source-s3:\n # Automatically performs periodic discover operations, which updates the bindings\n # to reflect what's in the source, and also updates collection schemas.\n # To disable autoDiscover, either omit this property or set it to `null`.\n autoDiscover:\n # Also add any newly discovered bindings automatically\n addNewBindings: true\n # How to handle breaking changes to discovered collections. If true, then existing\n # materialization bindings will be re-created with new names, as necessary. Or if\n # collection keys have changed, then new Flow collections will be created. If false,\n # then incompatible changes will simply result in failed publications, and will\n # effectively be ignored.\n evolveIncompatibleCollections: true\n\n # Endpoint defines how to connect to the source of the capture.\n # Required, type: object\n endpoint:\n # This endpoint uses a connector provided as a Docker image.\n connector:\n # Docker image that implements the capture connector.\n image: ghcr.io/estuary/source-s3:dev\n # File that provides the connector's required configuration.\n # Configuration may also be presented inline.\n config: path/to/connector-config.yaml\n\n # Bindings define how collections are populated from the data source.\n # A capture may bind multiple resources to different collections.\n # Required, type: array\n bindings:\n - # The target collection to capture into.\n # This may be defined in a separate, imported specification file.\n # Required, type: string\n target: acmeCo/example/collection\n\n # The resource is additional configuration required by the endpoint\n # connector to identify and capture a specific endpoint resource.\n # The structure and meaning of this configuration is defined by\n # the specific connector.\n # Required, type: object\n resource:\n stream: a-bucket/and-prefix\n # syncMode should be set to incremental for all Estuary connectors\n syncMode: incremental\n\n - target: acmeCo/example/another-collection\n resource:\n stream: a-bucket/another-prefix\n syncMode: incremental\n\n # Interval of time between invocations of non-streaming connectors.\n # If a connector runs to completion and then exits, the capture task will\n # restart the connector after this interval of time has elapsed.\n #\n # Intervals are relative to the start of an invocation and not its completion.\n # For example, if the interval is five minutes, and an invocation of the\n # capture finishes after two minutes, then the next invocation will be started\n # after three additional minutes.\n #\n # Optional. Default: Five minutes.\n interval: 5m\n"})})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},60850:(e,n,t)=>{t.d(n,{A:()=>o});const o=t.p+"assets/images/captures-auto-discover-ui-e21d902c34932277099c045d7d62ac99.png"},49791:(e,n,t)=>{t.d(n,{A:()=>o});const o=t.p+"assets/images/captures-new-4479ed989de046cd79db471d502bfc89.svg"},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>c});var o=t(96540);const i={},s=o.createContext(i);function r(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/902.9277dc16.js b/pr-preview/pr-1594/assets/js/902.9277dc16.js deleted file mode 100644 index 5c43726c87..0000000000 --- a/pr-preview/pr-1594/assets/js/902.9277dc16.js +++ /dev/null @@ -1,10323 +0,0 @@ -"use strict"; -exports.id = 902; -exports.ids = [902]; -exports.modules = { - -/***/ 21176: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - Zp: () => (/* reexport */ layout) -}); - -// UNUSED EXPORTS: acyclic, normalize, rank - -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js -var uniqueId = __webpack_require__(5664); -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/map.js -var map = __webpack_require__(74722); -// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules -var range = __webpack_require__(91395); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js -var graphlib = __webpack_require__(697); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js -/* - * Simple doubly linked list implementation derived from Cormen, et al., - * "Introduction to Algorithms". - */ - - - -class List { - constructor() { - var sentinel = {}; - sentinel._next = sentinel._prev = sentinel; - this._sentinel = sentinel; - } - dequeue() { - var sentinel = this._sentinel; - var entry = sentinel._prev; - if (entry !== sentinel) { - unlink(entry); - return entry; - } - } - enqueue(entry) { - var sentinel = this._sentinel; - if (entry._prev && entry._next) { - unlink(entry); - } - entry._next = sentinel._next; - sentinel._next._prev = entry; - sentinel._next = entry; - entry._prev = sentinel; - } - toString() { - var strs = []; - var sentinel = this._sentinel; - var curr = sentinel._prev; - while (curr !== sentinel) { - strs.push(JSON.stringify(curr, filterOutLinks)); - curr = curr._prev; - } - return '[' + strs.join(', ') + ']'; - } -} - -function unlink(entry) { - entry._prev._next = entry._next; - entry._next._prev = entry._prev; - delete entry._next; - delete entry._prev; -} - -function filterOutLinks(k, v) { - if (k !== '_next' && k !== '_prev') { - return v; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js - - - - -/* - * A greedy heuristic for finding a feedback arc set for a graph. A feedback - * arc set is a set of edges that can be removed to make a graph acyclic. - * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and - * effective heuristic for the feedback arc set problem." This implementation - * adjusts that from the paper to allow for weighted edges. - */ - - -var DEFAULT_WEIGHT_FN = constant/* default */.A(1); - -function greedyFAS(g, weightFn) { - if (g.nodeCount() <= 1) { - return []; - } - var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); - var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); - - // Expand multi-edges - return flatten/* default */.A( - map/* default */.A(results, function (e) { - return g.outEdges(e.v, e.w); - }) - ); -} - -function doGreedyFAS(g, buckets, zeroIdx) { - var results = []; - var sources = buckets[buckets.length - 1]; - var sinks = buckets[0]; - - var entry; - while (g.nodeCount()) { - while ((entry = sinks.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - while ((entry = sources.dequeue())) { - removeNode(g, buckets, zeroIdx, entry); - } - if (g.nodeCount()) { - for (var i = buckets.length - 2; i > 0; --i) { - entry = buckets[i].dequeue(); - if (entry) { - results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); - break; - } - } - } - } - - return results; -} - -function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { - var results = collectPredecessors ? [] : undefined; - - forEach/* default */.A(g.inEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var uEntry = g.node(edge.v); - - if (collectPredecessors) { - results.push({ v: edge.v, w: edge.w }); - } - - uEntry.out -= weight; - assignBucket(buckets, zeroIdx, uEntry); - }); - - forEach/* default */.A(g.outEdges(entry.v), function (edge) { - var weight = g.edge(edge); - var w = edge.w; - var wEntry = g.node(w); - wEntry['in'] -= weight; - assignBucket(buckets, zeroIdx, wEntry); - }); - - g.removeNode(entry.v); - - return results; -} - -function buildState(g, weightFn) { - var fasGraph = new graphlib/* Graph */.T(); - var maxIn = 0; - var maxOut = 0; - - forEach/* default */.A(g.nodes(), function (v) { - fasGraph.setNode(v, { v: v, in: 0, out: 0 }); - }); - - // Aggregate weights on nodes, but also sum the weights across multi-edges - // into a single edge for the fasGraph. - forEach/* default */.A(g.edges(), function (e) { - var prevWeight = fasGraph.edge(e.v, e.w) || 0; - var weight = weightFn(e); - var edgeWeight = prevWeight + weight; - fasGraph.setEdge(e.v, e.w, edgeWeight); - maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); - maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); - }); - - var buckets = range/* default */.A(maxOut + maxIn + 3).map(function () { - return new List(); - }); - var zeroIdx = maxIn + 1; - - forEach/* default */.A(fasGraph.nodes(), function (v) { - assignBucket(buckets, zeroIdx, fasGraph.node(v)); - }); - - return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; -} - -function assignBucket(buckets, zeroIdx, entry) { - if (!entry.out) { - buckets[0].enqueue(entry); - } else if (!entry['in']) { - buckets[buckets.length - 1].enqueue(entry); - } else { - buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js - - - - - -function run(g) { - var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); - forEach/* default */.A(fas, function (e) { - var label = g.edge(e); - g.removeEdge(e); - label.forwardName = e.name; - label.reversed = true; - g.setEdge(e.w, e.v, label, uniqueId/* default */.A('rev')); - }); - - function weightFn(g) { - return function (e) { - return g.edge(e).weight; - }; - } -} - -function dfsFAS(g) { - var fas = []; - var stack = {}; - var visited = {}; - - function dfs(v) { - if (has/* default */.A(visited, v)) { - return; - } - visited[v] = true; - stack[v] = true; - forEach/* default */.A(g.outEdges(v), function (e) { - if (has/* default */.A(stack, e.w)) { - fas.push(e); - } else { - dfs(e.w); - } - }); - delete stack[v]; - } - - forEach/* default */.A(g.nodes(), dfs); - return fas; -} - -function undo(g) { - forEach/* default */.A(g.edges(), function (e) { - var label = g.edge(e); - if (label.reversed) { - g.removeEdge(e); - - var forwardName = label.forwardName; - delete label.reversed; - delete label.forwardName; - g.setEdge(e.w, e.v, label, forwardName); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules -var merge = __webpack_require__(98879); -// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules -var pick = __webpack_require__(81942); -// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js -var defaults = __webpack_require__(23068); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js - - -/** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ -function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !(0,isSymbol/* default */.A)(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; -} - -/* harmony default export */ const _baseExtremum = (baseExtremum); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js -/** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ -function baseGt(value, other) { - return value > other; -} - -/* harmony default export */ const _baseGt = (baseGt); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js - - - - -/** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ -function max(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseGt) - : undefined; -} - -/* harmony default export */ const lodash_es_max = (max); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; -} - -/* harmony default export */ const lodash_es_last = (last); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js -var _baseAssignValue = __webpack_require__(52528); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js - - - - -/** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ -function mapValues(object, iteratee) { - var result = {}; - iteratee = (0,_baseIteratee/* default */.A)(iteratee, 3); - - (0,_baseForOwn/* default */.A)(object, function(value, key, object) { - (0,_baseAssignValue/* default */.A)(result, key, iteratee(value, key, object)); - }); - return result; -} - -/* harmony default export */ const lodash_es_mapValues = (mapValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js -/** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ -function baseLt(value, other) { - return value < other; -} - -/* harmony default export */ const _baseLt = (baseLt); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js - - - - -/** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ -function min(array) { - return (array && array.length) - ? _baseExtremum(array, identity/* default */.A, _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_min = (min); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js -var _root = __webpack_require__(41917); -;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js - - -/** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ -var now = function() { - return _root/* default */.A.Date.now(); -}; - -/* harmony default export */ const lodash_es_now = (now); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js - - - - - -/* - * Adds a dummy node to the graph and return v. - */ -function addDummyNode(g, type, attrs, name) { - var v; - do { - v = uniqueId/* default */.A(name); - } while (g.hasNode(v)); - - attrs.dummy = type; - g.setNode(v, attrs); - return v; -} - -/* - * Returns a new graph with only simple edges. Handles aggregation of data - * associated with multi-edges. - */ -function simplify(g) { - var simplified = new graphlib/* Graph */.T().setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - simplified.setNode(v, g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; - var label = g.edge(e); - simplified.setEdge(e.v, e.w, { - weight: simpleLabel.weight + label.weight, - minlen: Math.max(simpleLabel.minlen, label.minlen), - }); - }); - return simplified; -} - -function asNonCompoundGraph(g) { - var simplified = new graphlib/* Graph */.T({ multigraph: g.isMultigraph() }).setGraph(g.graph()); - forEach/* default */.A(g.nodes(), function (v) { - if (!g.children(v).length) { - simplified.setNode(v, g.node(v)); - } - }); - forEach/* default */.A(g.edges(), function (e) { - simplified.setEdge(e, g.edge(e)); - }); - return simplified; -} - -function successorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var sucs = {}; - _.forEach(g.outEdges(v), function (e) { - sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; - }); - return sucs; - }); - return _.zipObject(g.nodes(), weightMap); -} - -function predecessorWeights(g) { - var weightMap = _.map(g.nodes(), function (v) { - var preds = {}; - _.forEach(g.inEdges(v), function (e) { - preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; - }); - return preds; - }); - return _.zipObject(g.nodes(), weightMap); -} - -/* - * Finds where a line starting at point ({x, y}) would intersect a rectangle - * ({x, y, width, height}) if it were pointing at the rectangle's center. - */ -function intersectRect(rect, point) { - var x = rect.x; - var y = rect.y; - - // Rectangle intersection algorithm from: - // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes - var dx = point.x - x; - var dy = point.y - y; - var w = rect.width / 2; - var h = rect.height / 2; - - if (!dx && !dy) { - throw new Error('Not possible to find intersection inside of the rectangle'); - } - - var sx, sy; - if (Math.abs(dy) * w > Math.abs(dx) * h) { - // Intersection is top or bottom of rect. - if (dy < 0) { - h = -h; - } - sx = (h * dx) / dy; - sy = h; - } else { - // Intersection is left or right of rect. - if (dx < 0) { - w = -w; - } - sx = w; - sy = (w * dy) / dx; - } - - return { x: x + sx, y: y + sy }; -} - -/* - * Given a DAG with each node assigned "rank" and "order" properties, this - * function will produce a matrix with the ids of each node. - */ -function buildLayerMatrix(g) { - var layering = map/* default */.A(range/* default */.A(util_maxRank(g) + 1), function () { - return []; - }); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - var rank = node.rank; - if (!isUndefined/* default */.A(rank)) { - layering[rank][node.order] = v; - } - }); - return layering; -} - -/* - * Adjusts the ranks for all nodes in the graph such that all nodes v have - * rank(v) >= 0 and at least one node w has rank(w) = 0. - */ -function normalizeRanks(g) { - var min = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (has/* default */.A(node, 'rank')) { - node.rank -= min; - } - }); -} - -function removeEmptyRanks(g) { - // Ranks may not start at 0, so we need to offset them - var offset = lodash_es_min( - map/* default */.A(g.nodes(), function (v) { - return g.node(v).rank; - }) - ); - - var layers = []; - forEach/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank - offset; - if (!layers[rank]) { - layers[rank] = []; - } - layers[rank].push(v); - }); - - var delta = 0; - var nodeRankFactor = g.graph().nodeRankFactor; - forEach/* default */.A(layers, function (vs, i) { - if (isUndefined/* default */.A(vs) && i % nodeRankFactor !== 0) { - --delta; - } else if (delta) { - forEach/* default */.A(vs, function (v) { - g.node(v).rank += delta; - }); - } - }); -} - -function addBorderNode(g, prefix, rank, order) { - var node = { - width: 0, - height: 0, - }; - if (arguments.length >= 4) { - node.rank = rank; - node.order = order; - } - return addDummyNode(g, 'border', node, prefix); -} - -function util_maxRank(g) { - return lodash_es_max( - map/* default */.A(g.nodes(), function (v) { - var rank = g.node(v).rank; - if (!isUndefined/* default */.A(rank)) { - return rank; - } - }) - ); -} - -/* - * Partition a collection into two groups: `lhs` and `rhs`. If the supplied - * function returns true for an entry it goes into `lhs`. Otherwise it goes - * into `rhs. - */ -function partition(collection, fn) { - var result = { lhs: [], rhs: [] }; - forEach/* default */.A(collection, function (value) { - if (fn(value)) { - result.lhs.push(value); - } else { - result.rhs.push(value); - } - }); - return result; -} - -/* - * Returns a new function that wraps `fn` with a timer. The wrapper logs the - * time it takes to execute the function. - */ -function util_time(name, fn) { - var start = lodash_es_now(); - try { - return fn(); - } finally { - console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); - } -} - -function notime(name, fn) { - return fn(); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js - - - - - -function addBorderSegments(g) { - function dfs(v) { - var children = g.children(v); - var node = g.node(v); - if (children.length) { - forEach/* default */.A(children, dfs); - } - - if (has/* default */.A(node, 'minRank')) { - node.borderLeft = []; - node.borderRight = []; - for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { - add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); - add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); - } - } - } - - forEach/* default */.A(g.children(), dfs); -} - -function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { - var label = { width: 0, height: 0, rank: rank, borderType: prop }; - var prev = sgNode[prop][rank - 1]; - var curr = addDummyNode(g, 'border', label, prefix); - sgNode[prop][rank] = curr; - g.setParent(curr, sg); - if (prev) { - g.setEdge(prev, curr, { weight: 1 }); - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js - - - - -function adjust(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'lr' || rankDir === 'rl') { - swapWidthHeight(g); - } -} - -function coordinate_system_undo(g) { - var rankDir = g.graph().rankdir.toLowerCase(); - if (rankDir === 'bt' || rankDir === 'rl') { - reverseY(g); - } - - if (rankDir === 'lr' || rankDir === 'rl') { - swapXY(g); - swapWidthHeight(g); - } -} - -function swapWidthHeight(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapWidthHeightOne(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - swapWidthHeightOne(g.edge(e)); - }); -} - -function swapWidthHeightOne(attrs) { - var w = attrs.width; - attrs.width = attrs.height; - attrs.height = w; -} - -function reverseY(g) { - forEach/* default */.A(g.nodes(), function (v) { - reverseYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, reverseYOne); - if (has/* default */.A(edge, 'y')) { - reverseYOne(edge); - } - }); -} - -function reverseYOne(attrs) { - attrs.y = -attrs.y; -} - -function swapXY(g) { - forEach/* default */.A(g.nodes(), function (v) { - swapXYOne(g.node(v)); - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, swapXYOne); - if (has/* default */.A(edge, 'x')) { - swapXYOne(edge); - } - }); -} - -function swapXYOne(attrs) { - var x = attrs.x; - attrs.x = attrs.y; - attrs.y = x; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js - - - - - -/* - * Breaks any long edges in the graph into short segments that span 1 layer - * each. This operation is undoable with the denormalize function. - * - * Pre-conditions: - * - * 1. The input graph is a DAG. - * 2. Each node in the graph has a "rank" property. - * - * Post-condition: - * - * 1. All edges in the graph have a length of 1. - * 2. Dummy nodes are added where edges have been split into segments. - * 3. The graph is augmented with a "dummyChains" attribute which contains - * the first dummy in each chain of dummy nodes produced. - */ -function normalize_run(g) { - g.graph().dummyChains = []; - forEach/* default */.A(g.edges(), function (edge) { - normalizeEdge(g, edge); - }); -} - -function normalizeEdge(g, e) { - var v = e.v; - var vRank = g.node(v).rank; - var w = e.w; - var wRank = g.node(w).rank; - var name = e.name; - var edgeLabel = g.edge(e); - var labelRank = edgeLabel.labelRank; - - if (wRank === vRank + 1) return; - - g.removeEdge(e); - - var dummy, attrs, i; - for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { - edgeLabel.points = []; - attrs = { - width: 0, - height: 0, - edgeLabel: edgeLabel, - edgeObj: e, - rank: vRank, - }; - dummy = addDummyNode(g, 'edge', attrs, '_d'); - if (vRank === labelRank) { - attrs.width = edgeLabel.width; - attrs.height = edgeLabel.height; - // @ts-expect-error - attrs.dummy = 'edge-label'; - // @ts-expect-error - attrs.labelpos = edgeLabel.labelpos; - } - g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); - if (i === 0) { - g.graph().dummyChains.push(dummy); - } - v = dummy; - } - - g.setEdge(v, w, { weight: edgeLabel.weight }, name); -} - -function normalize_undo(g) { - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var origLabel = node.edgeLabel; - var w; - g.setEdge(node.edgeObj, origLabel); - while (node.dummy) { - w = g.successors(v)[0]; - g.removeNode(v); - origLabel.points.push({ x: node.x, y: node.y }); - if (node.dummy === 'edge-label') { - origLabel.x = node.x; - origLabel.y = node.y; - origLabel.width = node.width; - origLabel.height = node.height; - } - v = w; - node = g.node(v); - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js - - - - -/** - * This method is like `_.min` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * the value is ranked. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Math - * @param {Array} array The array to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {*} Returns the minimum value. - * @example - * - * var objects = [{ 'n': 1 }, { 'n': 2 }]; - * - * _.minBy(objects, function(o) { return o.n; }); - * // => { 'n': 1 } - * - * // The `_.property` iteratee shorthand. - * _.minBy(objects, 'n'); - * // => { 'n': 1 } - */ -function minBy(array, iteratee) { - return (array && array.length) - ? _baseExtremum(array, (0,_baseIteratee/* default */.A)(iteratee, 2), _baseLt) - : undefined; -} - -/* harmony default export */ const lodash_es_minBy = (minBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js - - - - -/* - * Initializes ranks for the input graph using the longest path algorithm. This - * algorithm scales well and is fast in practice, it yields rather poor - * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom - * ranks wide and leaving edges longer than necessary. However, due to its - * speed, this algorithm is good for getting an initial ranking that can be fed - * into other algorithms. - * - * This algorithm does not normalize layers because it will be used by other - * algorithms in most cases. If using this algorithm directly, be sure to - * run normalize at the end. - * - * Pre-conditions: - * - * 1. Input graph is a DAG. - * 2. Input graph node labels can be assigned properties. - * - * Post-conditions: - * - * 1. Each node will be assign an (unnormalized) "rank" property. - */ -function longestPath(g) { - var visited = {}; - - function dfs(v) { - var label = g.node(v); - if (has/* default */.A(visited, v)) { - return label.rank; - } - visited[v] = true; - - var rank = lodash_es_min( - map/* default */.A(g.outEdges(v), function (e) { - return dfs(e.w) - g.edge(e).minlen; - }) - ); - - if ( - rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 - rank === undefined || // return value of _.map([]) for Lodash 4 - rank === null - ) { - // return value of _.map([null]) - rank = 0; - } - - return (label.rank = rank); - } - - forEach/* default */.A(g.sources(), dfs); -} - -/* - * Returns the amount of slack for the given edge. The slack is defined as the - * difference between the length of the edge and its minimum length. - */ -function slack(g, e) { - return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js - - - - - - -/* - * Constructs a spanning tree with tight edges and adjusted the input node's - * ranks to achieve this. A tight edge is one that is has a length that matches - * its "minlen" attribute. - * - * The basic structure for this function is derived from Gansner, et al., "A - * Technique for Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a DAG. - * 2. Graph must be connected. - * 3. Graph must have at least one node. - * 5. Graph nodes must have been previously assigned a "rank" property that - * respects the "minlen" property of incident edges. - * 6. Graph edges must have a "minlen" property. - * - * Post-conditions: - * - * - Graph nodes will have their rank adjusted to ensure that all edges are - * tight. - * - * Returns a tree (undirected graph) that is constructed using only "tight" - * edges. - */ -function feasibleTree(g) { - var t = new graphlib/* Graph */.T({ directed: false }); - - // Choose arbitrary node from which to start our tree - var start = g.nodes()[0]; - var size = g.nodeCount(); - t.setNode(start, {}); - - var edge, delta; - while (tightTree(t, g) < size) { - edge = findMinSlackEdge(t, g); - delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); - shiftRanks(t, g, delta); - } - - return t; -} - -/* - * Finds a maximal tree of tight edges and returns the number of nodes in the - * tree. - */ -function tightTree(t, g) { - function dfs(v) { - forEach/* default */.A(g.nodeEdges(v), function (e) { - var edgeV = e.v, - w = v === edgeV ? e.w : edgeV; - if (!t.hasNode(w) && !slack(g, e)) { - t.setNode(w, {}); - t.setEdge(v, w, {}); - dfs(w); - } - }); - } - - forEach/* default */.A(t.nodes(), dfs); - return t.nodeCount(); -} - -/* - * Finds the edge with the smallest slack that is incident on tree and returns - * it. - */ -function findMinSlackEdge(t, g) { - return lodash_es_minBy(g.edges(), function (e) { - if (t.hasNode(e.v) !== t.hasNode(e.w)) { - return slack(g, e); - } - }); -} - -function shiftRanks(t, g, delta) { - forEach/* default */.A(t.nodes(), function (v) { - g.node(v).rank += delta; - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js - - - - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!(0,isArrayLike/* default */.A)(collection)) { - var iteratee = (0,_baseIteratee/* default */.A)(predicate, 3); - collection = (0,keys/* default */.A)(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; -} - -/* harmony default export */ const _createFind = (createFind); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js - - -/** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ -function toInteger(value) { - var result = (0,toFinite/* default */.A)(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; -} - -/* harmony default export */ const lodash_es_toInteger = (toInteger); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return (0,_baseFindIndex/* default */.A)(array, (0,_baseIteratee/* default */.A)(predicate, 3), index); -} - -/* harmony default export */ const lodash_es_findIndex = (findIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js - - - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = _createFind(lodash_es_findIndex); - -/* harmony default export */ const lodash_es_find = (find); - -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js - - - - - -var DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function dijkstra_dijkstra(g, source, weightFn, edgeFn) { - return runDijkstra( - g, - String(source), - weightFn || DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runDijkstra(g, source, weightFn, edgeFn) { - var results = {}; - var pq = new PriorityQueue(); - var v, vEntry; - - var updateNeighbors = function (edge) { - var w = edge.v !== v ? edge.v : edge.w; - var wEntry = results[w]; - var weight = weightFn(edge); - var distance = vEntry.distance + weight; - - if (weight < 0) { - throw new Error( - 'dijkstra does not allow negative edge weights. ' + - 'Bad edge: ' + - edge + - ' Weight: ' + - weight - ); - } - - if (distance < wEntry.distance) { - wEntry.distance = distance; - wEntry.predecessor = v; - pq.decrease(w, distance); - } - }; - - g.nodes().forEach(function (v) { - var distance = v === source ? 0 : Number.POSITIVE_INFINITY; - results[v] = { distance: distance }; - pq.add(v, distance); - }); - - while (pq.size() > 0) { - v = pq.removeMin(); - vEntry = results[v]; - if (vEntry.distance === Number.POSITIVE_INFINITY) { - break; - } - - edgeFn(v).forEach(updateNeighbors); - } - - return results; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js - - - - - -function dijkstraAll(g, weightFunc, edgeFunc) { - return _.transform( - g.nodes(), - function (acc, v) { - acc[v] = dijkstra(g, v, weightFunc, edgeFunc); - }, - {} - ); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js - - - - -var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.A(1); - -function floydWarshall(g, weightFn, edgeFn) { - return runFloydWarshall( - g, - weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, - edgeFn || - function (v) { - return g.outEdges(v); - } - ); -} - -function runFloydWarshall(g, weightFn, edgeFn) { - var results = {}; - var nodes = g.nodes(); - - nodes.forEach(function (v) { - results[v] = {}; - results[v][v] = { distance: 0 }; - nodes.forEach(function (w) { - if (v !== w) { - results[v][w] = { distance: Number.POSITIVE_INFINITY }; - } - }); - edgeFn(v).forEach(function (edge) { - var w = edge.v === v ? edge.w : edge.v; - var d = weightFn(edge); - results[v][w] = { distance: d, predecessor: v }; - }); - }); - - nodes.forEach(function (k) { - var rowK = results[k]; - nodes.forEach(function (i) { - var rowI = results[i]; - nodes.forEach(function (j) { - var ik = rowI[k]; - var kj = rowK[j]; - var ij = rowI[j]; - var altDistance = ik.distance + kj.distance; - if (altDistance < ij.distance) { - ij.distance = altDistance; - ij.predecessor = kj.predecessor; - } - }); - }); - }); - - return results; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules -var _baseKeys = __webpack_require__(69471); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules -var _baseGetTag = __webpack_require__(88496); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js - - - - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!(0,isArray/* default */.A)(value) && (0,isObjectLike/* default */.A)(value) && (0,_baseGetTag/* default */.A)(value) == stringTag); -} - -/* harmony default export */ const lodash_es_isString = (isString); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js - - -/** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -var asciiSize = (0,_baseProperty/* default */.A)('length'); - -/* harmony default export */ const _asciiSize = (asciiSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -/* harmony default export */ const _hasUnicode = (hasUnicode); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js -/** Used to compose unicode character classes. */ -var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', - _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', - _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', - _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', - _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, - _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', - rsCombo = '[' + _unicodeSize_rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - _unicodeSize_rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', - rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; -} - -/* harmony default export */ const _unicodeSize = (unicodeSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js - - - - -/** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ -function stringSize(string) { - return _hasUnicode(string) - ? _unicodeSize(string) - : _asciiSize(string); -} - -/* harmony default export */ const _stringSize = (stringSize); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js - - - - - - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ -function size(collection) { - if (collection == null) { - return 0; - } - if ((0,isArrayLike/* default */.A)(collection)) { - return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; - } - var tag = (0,_getTag/* default */.A)(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return (0,_baseKeys/* default */.A)(collection).length; -} - -/* harmony default export */ const lodash_es_size = (size); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js - - - - -topsort_topsort.CycleException = topsort_CycleException; - -function topsort_topsort(g) { - var visited = {}; - var stack = {}; - var results = []; - - function visit(node) { - if (has/* default */.A(stack, node)) { - throw new topsort_CycleException(); - } - - if (!has/* default */.A(visited, node)) { - stack[node] = true; - visited[node] = true; - forEach/* default */.A(g.predecessors(node), visit); - delete stack[node]; - results.push(node); - } - } - - forEach/* default */.A(g.sinks(), visit); - - if (lodash_es_size(visited) !== g.nodeCount()) { - throw new topsort_CycleException(); - } - - return results; -} - -function topsort_CycleException() {} -topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js - - - - -function isAcyclic(g) { - try { - topsort(g); - } catch (e) { - if (e instanceof CycleException) { - return false; - } - throw e; - } - return true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js - - - - -/* - * A helper that preforms a pre- or post-order traversal on the input graph - * and returns the nodes in the order they were visited. If the graph is - * undirected then this algorithm will navigate using neighbors. If the graph - * is directed then this algorithm will navigate using successors. - * - * Order must be one of "pre" or "post". - */ -function dfs(g, vs, order) { - if (!isArray/* default */.A(vs)) { - vs = [vs]; - } - - var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); - - var acc = []; - var visited = {}; - forEach/* default */.A(vs, function (v) { - if (!g.hasNode(v)) { - throw new Error('Graph does not have node: ' + v); - } - - doDfs(g, v, order === 'post', visited, navigation, acc); - }); - return acc; -} - -function doDfs(g, v, postorder, visited, navigation, acc) { - if (!has/* default */.A(visited, v)) { - visited[v] = true; - - if (!postorder) { - acc.push(v); - } - forEach/* default */.A(navigation(v), function (w) { - doDfs(g, w, postorder, visited, navigation, acc); - }); - if (postorder) { - acc.push(v); - } - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js - - - - -function postorder(g, vs) { - return dfs(g, vs, 'post'); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js - - - - -function preorder(g, vs) { - return dfs(g, vs, 'pre'); -} - -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules -var graph = __webpack_require__(73046); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js - - - - - - -function prim(g, weightFunc) { - var result = new Graph(); - var parents = {}; - var pq = new PriorityQueue(); - var v; - - function updateNeighbors(edge) { - var w = edge.v === v ? edge.w : edge.v; - var pri = pq.priority(w); - if (pri !== undefined) { - var edgeWeight = weightFunc(edge); - if (edgeWeight < pri) { - parents[w] = v; - pq.decrease(w, edgeWeight); - } - } - } - - if (g.nodeCount() === 0) { - return result; - } - - _.each(g.nodes(), function (v) { - pq.add(v, Number.POSITIVE_INFINITY); - result.setNode(v); - }); - - // Start from an arbitrary node - pq.decrease(g.nodes()[0], 0); - - var init = false; - while (pq.size() > 0) { - v = pq.removeMin(); - if (_.has(parents, v)) { - result.setEdge(v, parents[v]); - } else if (init) { - throw new Error('Input graph is not connected: ' + g); - } else { - init = true; - } - - g.nodeEdges(v).forEach(updateNeighbors); - } - - return result; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js - - - - - - - - - - - - - - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js - - - - - - - - -// Expose some internals for testing purposes -networkSimplex.initLowLimValues = initLowLimValues; -networkSimplex.initCutValues = initCutValues; -networkSimplex.calcCutValue = calcCutValue; -networkSimplex.leaveEdge = leaveEdge; -networkSimplex.enterEdge = enterEdge; -networkSimplex.exchangeEdges = exchangeEdges; - -/* - * The network simplex algorithm assigns ranks to each node in the input graph - * and iteratively improves the ranking to reduce the length of edges. - * - * Preconditions: - * - * 1. The input graph must be a DAG. - * 2. All nodes in the graph must have an object value. - * 3. All edges in the graph must have "minlen" and "weight" attributes. - * - * Postconditions: - * - * 1. All nodes in the graph will have an assigned "rank" attribute that has - * been optimized by the network simplex algorithm. Ranks start at 0. - * - * - * A rough sketch of the algorithm is as follows: - * - * 1. Assign initial ranks to each node. We use the longest path algorithm, - * which assigns ranks to the lowest position possible. In general this - * leads to very wide bottom ranks and unnecessarily long edges. - * 2. Construct a feasible tight tree. A tight tree is one such that all - * edges in the tree have no slack (difference between length of edge - * and minlen for the edge). This by itself greatly improves the assigned - * rankings by shorting edges. - * 3. Iteratively find edges that have negative cut values. Generally a - * negative cut value indicates that the edge could be removed and a new - * tree edge could be added to produce a more compact graph. - * - * Much of the algorithms here are derived from Gansner, et al., "A Technique - * for Drawing Directed Graphs." The structure of the file roughly follows the - * structure of the overall algorithm. - */ -function networkSimplex(g) { - g = simplify(g); - longestPath(g); - var t = feasibleTree(g); - initLowLimValues(t); - initCutValues(t, g); - - var e, f; - while ((e = leaveEdge(t))) { - f = enterEdge(t, g, e); - exchangeEdges(t, g, e, f); - } -} - -/* - * Initializes cut values for all edges in the tree. - */ -function initCutValues(t, g) { - var vs = postorder(t, t.nodes()); - vs = vs.slice(0, vs.length - 1); - forEach/* default */.A(vs, function (v) { - assignCutValue(t, g, v); - }); -} - -function assignCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - t.edge(child, parent).cutvalue = calcCutValue(t, g, child); -} - -/* - * Given the tight tree, its graph, and a child in the graph calculate and - * return the cut value for the edge between the child and its parent. - */ -function calcCutValue(t, g, child) { - var childLab = t.node(child); - var parent = childLab.parent; - // True if the child is on the tail end of the edge in the directed graph - var childIsTail = true; - // The graph's view of the tree edge we're inspecting - var graphEdge = g.edge(child, parent); - // The accumulated cut value for the edge between this node and its parent - var cutValue = 0; - - if (!graphEdge) { - childIsTail = false; - graphEdge = g.edge(parent, child); - } - - cutValue = graphEdge.weight; - - forEach/* default */.A(g.nodeEdges(child), function (e) { - var isOutEdge = e.v === child, - other = isOutEdge ? e.w : e.v; - - if (other !== parent) { - var pointsToHead = isOutEdge === childIsTail, - otherWeight = g.edge(e).weight; - - cutValue += pointsToHead ? otherWeight : -otherWeight; - if (isTreeEdge(t, child, other)) { - var otherCutValue = t.edge(child, other).cutvalue; - cutValue += pointsToHead ? -otherCutValue : otherCutValue; - } - } - }); - - return cutValue; -} - -function initLowLimValues(tree, root) { - if (arguments.length < 2) { - root = tree.nodes()[0]; - } - dfsAssignLowLim(tree, {}, 1, root); -} - -function dfsAssignLowLim(tree, visited, nextLim, v, parent) { - var low = nextLim; - var label = tree.node(v); - - visited[v] = true; - forEach/* default */.A(tree.neighbors(v), function (w) { - if (!has/* default */.A(visited, w)) { - nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); - } - }); - - label.low = low; - label.lim = nextLim++; - if (parent) { - label.parent = parent; - } else { - // TODO should be able to remove this when we incrementally update low lim - delete label.parent; - } - - return nextLim; -} - -function leaveEdge(tree) { - return lodash_es_find(tree.edges(), function (e) { - return tree.edge(e).cutvalue < 0; - }); -} - -function enterEdge(t, g, edge) { - var v = edge.v; - var w = edge.w; - - // For the rest of this function we assume that v is the tail and w is the - // head, so if we don't have this edge in the graph we should flip it to - // match the correct orientation. - if (!g.hasEdge(v, w)) { - v = edge.w; - w = edge.v; - } - - var vLabel = t.node(v); - var wLabel = t.node(w); - var tailLabel = vLabel; - var flip = false; - - // If the root is in the tail of the edge then we need to flip the logic that - // checks for the head and tail nodes in the candidates function below. - if (vLabel.lim > wLabel.lim) { - tailLabel = wLabel; - flip = true; - } - - var candidates = filter/* default */.A(g.edges(), function (edge) { - return ( - flip === isDescendant(t, t.node(edge.v), tailLabel) && - flip !== isDescendant(t, t.node(edge.w), tailLabel) - ); - }); - - return lodash_es_minBy(candidates, function (edge) { - return slack(g, edge); - }); -} - -function exchangeEdges(t, g, e, f) { - var v = e.v; - var w = e.w; - t.removeEdge(v, w); - t.setEdge(f.v, f.w, {}); - initLowLimValues(t); - initCutValues(t, g); - updateRanks(t, g); -} - -function updateRanks(t, g) { - var root = lodash_es_find(t.nodes(), function (v) { - return !g.node(v).parent; - }); - var vs = preorder(t, root); - vs = vs.slice(1); - forEach/* default */.A(vs, function (v) { - var parent = t.node(v).parent, - edge = g.edge(v, parent), - flipped = false; - - if (!edge) { - edge = g.edge(parent, v); - flipped = true; - } - - g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); - }); -} - -/* - * Returns true if the edge is in the tree. - */ -function isTreeEdge(tree, u, v) { - return tree.hasEdge(u, v); -} - -/* - * Returns true if the specified node is descendant of the root node per the - * assigned low and lim attributes in the tree. - */ -function isDescendant(tree, vLabel, rootLabel) { - return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js - - - - - - -/* - * Assigns a rank to each node in the input graph that respects the "minlen" - * constraint specified on edges between nodes. - * - * This basic structure is derived from Gansner, et al., "A Technique for - * Drawing Directed Graphs." - * - * Pre-conditions: - * - * 1. Graph must be a connected DAG - * 2. Graph nodes must be objects - * 3. Graph edges must have "weight" and "minlen" attributes - * - * Post-conditions: - * - * 1. Graph nodes will have a "rank" attribute based on the results of the - * algorithm. Ranks can start at any index (including negative), we'll - * fix them up later. - */ -function rank(g) { - switch (g.graph().ranker) { - case 'network-simplex': - networkSimplexRanker(g); - break; - case 'tight-tree': - tightTreeRanker(g); - break; - case 'longest-path': - longestPathRanker(g); - break; - default: - networkSimplexRanker(g); - } -} - -// A fast and simple ranker, but results are far from optimal. -var longestPathRanker = longestPath; - -function tightTreeRanker(g) { - longestPath(g); - feasibleTree(g); -} - -function networkSimplexRanker(g) { - networkSimplex(g); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js - - - - - -/* - * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, - * adds appropriate edges to ensure that all cluster nodes are placed between - * these boundries, and ensures that the graph is connected. - * - * In addition we ensure, through the use of the minlen property, that nodes - * and subgraph border nodes to not end up on the same rank. - * - * Preconditions: - * - * 1. Input graph is a DAG - * 2. Nodes in the input graph has a minlen attribute - * - * Postconditions: - * - * 1. Input graph is connected. - * 2. Dummy nodes are added for the tops and bottoms of subgraphs. - * 3. The minlen attribute for nodes is adjusted to ensure nodes do not - * get placed on the same rank as subgraph border nodes. - * - * The nesting graph idea comes from Sander, "Layout of Compound Directed - * Graphs." - */ -function nesting_graph_run(g) { - var root = addDummyNode(g, 'root', {}, '_root'); - var depths = treeDepths(g); - var height = lodash_es_max(values/* default */.A(depths)) - 1; // Note: depths is an Object not an array - var nodeSep = 2 * height + 1; - - g.graph().nestingRoot = root; - - // Multiply minlen by nodeSep to align nodes on non-border ranks. - forEach/* default */.A(g.edges(), function (e) { - g.edge(e).minlen *= nodeSep; - }); - - // Calculate a weight that is sufficient to keep subgraphs vertically compact - var weight = sumWeights(g) + 1; - - // Create border nodes and link them up - forEach/* default */.A(g.children(), function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - }); - - // Save the multiplier for node layers for later removal of empty border - // layers. - g.graph().nodeRankFactor = nodeSep; -} - -function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { - var children = g.children(v); - if (!children.length) { - if (v !== root) { - g.setEdge(root, v, { weight: 0, minlen: nodeSep }); - } - return; - } - - var top = addBorderNode(g, '_bt'); - var bottom = addBorderNode(g, '_bb'); - var label = g.node(v); - - g.setParent(top, v); - label.borderTop = top; - g.setParent(bottom, v); - label.borderBottom = bottom; - - forEach/* default */.A(children, function (child) { - nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); - - var childNode = g.node(child); - var childTop = childNode.borderTop ? childNode.borderTop : child; - var childBottom = childNode.borderBottom ? childNode.borderBottom : child; - var thisWeight = childNode.borderTop ? weight : 2 * weight; - var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; - - g.setEdge(top, childTop, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - - g.setEdge(childBottom, bottom, { - weight: thisWeight, - minlen: minlen, - nestingEdge: true, - }); - }); - - if (!g.parent(v)) { - g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); - } -} - -function treeDepths(g) { - var depths = {}; - function dfs(v, depth) { - var children = g.children(v); - if (children && children.length) { - forEach/* default */.A(children, function (child) { - dfs(child, depth + 1); - }); - } - depths[v] = depth; - } - forEach/* default */.A(g.children(), function (v) { - dfs(v, 1); - }); - return depths; -} - -function sumWeights(g) { - return reduce/* default */.A( - g.edges(), - function (acc, e) { - return acc + g.edge(e).weight; - }, - 0 - ); -} - -function cleanup(g) { - var graphLabel = g.graph(); - g.removeNode(graphLabel.nestingRoot); - delete graphLabel.nestingRoot; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.nestingEdge) { - g.removeEdge(e); - } - }); -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules -var _baseClone = __webpack_require__(91641); -;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return (0,_baseClone/* default */.A)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js - - - - -function addSubgraphConstraints(g, cg, vs) { - var prev = {}, - rootPrev; - - forEach/* default */.A(vs, function (v) { - var child = g.parent(v), - parent, - prevChild; - while (child) { - parent = g.parent(child); - if (parent) { - prevChild = prev[parent]; - prev[parent] = child; - } else { - prevChild = rootPrev; - rootPrev = child; - } - if (prevChild && prevChild !== child) { - cg.setEdge(prevChild, child); - return; - } - child = parent; - } - }); - - /* - function dfs(v) { - var children = v ? g.children(v) : g.children(); - if (children.length) { - var min = Number.POSITIVE_INFINITY, - subgraphs = []; - _.each(children, function(child) { - var childMin = dfs(child); - if (g.children(child).length) { - subgraphs.push({ v: child, order: childMin }); - } - min = Math.min(min, childMin); - }); - _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { - cg.setEdge(prev.v, curr.v); - return curr; - }); - return min; - } - return g.node(v).order; - } - dfs(undefined); - */ -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js - - - - - -/* - * Constructs a graph that can be used to sort a layer of nodes. The graph will - * contain all base and subgraph nodes from the request layer in their original - * hierarchy and any edges that are incident on these nodes and are of the type - * requested by the "relationship" parameter. - * - * Nodes from the requested rank that do not have parents are assigned a root - * node in the output graph, which is set in the root graph attribute. This - * makes it easy to walk the hierarchy of movable nodes during ordering. - * - * Pre-conditions: - * - * 1. Input graph is a DAG - * 2. Base nodes in the input graph have a rank attribute - * 3. Subgraph nodes in the input graph has minRank and maxRank attributes - * 4. Edges have an assigned weight - * - * Post-conditions: - * - * 1. Output graph has all nodes in the movable rank with preserved - * hierarchy. - * 2. Root nodes in the movable layer are made children of the node - * indicated by the root attribute of the graph. - * 3. Non-movable nodes incident on movable nodes, selected by the - * relationship parameter, are included in the graph (without hierarchy). - * 4. Edges incident on movable nodes, selected by the relationship - * parameter, are added to the output graph. - * 5. The weights for copied edges are aggregated as need, since the output - * graph is not a multi-graph. - */ -function buildLayerGraph(g, rank, relationship) { - var root = createRootNode(g), - result = new graphlib/* Graph */.T({ compound: true }) - .setGraph({ root: root }) - .setDefaultNodeLabel(function (v) { - return g.node(v); - }); - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v), - parent = g.parent(v); - - if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { - result.setNode(v); - result.setParent(v, parent || root); - - // This assumes we have only short edges! - forEach/* default */.A(g[relationship](v), function (e) { - var u = e.v === v ? e.w : e.v, - edge = result.edge(u, v), - weight = !isUndefined/* default */.A(edge) ? edge.weight : 0; - result.setEdge(u, v, { weight: g.edge(e).weight + weight }); - }); - - if (has/* default */.A(node, 'minRank')) { - result.setNode(v, { - borderLeft: node.borderLeft[rank], - borderRight: node.borderRight[rank], - }); - } - } - }); - - return result; -} - -function createRootNode(g) { - var v; - while (g.hasNode((v = uniqueId/* default */.A('_root')))); - return v; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js -/** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ -function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; -} - -/* harmony default export */ const _baseZipObject = (baseZipObject); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js - - - -/** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ -function zipObject(props, values) { - return _baseZipObject(props || [], values || [], _assignValue/* default */.A); -} - -/* harmony default export */ const lodash_es_zipObject = (zipObject); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js -var _baseMap = __webpack_require__(52568); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js -/** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ -function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; -} - -/* harmony default export */ const _baseSortBy = (baseSortBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js - - -/** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ -function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = (0,isSymbol/* default */.A)(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = (0,isSymbol/* default */.A)(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; -} - -/* harmony default export */ const _compareAscending = (compareAscending); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js - - -/** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ -function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = _compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; -} - -/* harmony default export */ const _compareMultiple = (compareMultiple); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js - - - - - - - - - - -/** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ -function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - if ((0,isArray/* default */.A)(iteratee)) { - return function(value) { - return (0,_baseGet/* default */.A)(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } - } - return iteratee; - }); - } else { - iteratees = [identity/* default */.A]; - } - - var index = -1; - iteratees = (0,_arrayMap/* default */.A)(iteratees, (0,_baseUnary/* default */.A)(_baseIteratee/* default */.A)); - - var result = (0,_baseMap/* default */.A)(collection, function(value, key, collection) { - var criteria = (0,_arrayMap/* default */.A)(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return _baseSortBy(result, function(object, other) { - return _compareMultiple(object, other, orders); - }); -} - -/* harmony default export */ const _baseOrderBy = (baseOrderBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js - - - - - -/** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 30 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] - */ -var sortBy = (0,_baseRest/* default */.A)(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && (0,_isIterateeCall/* default */.A)(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && (0,_isIterateeCall/* default */.A)(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return _baseOrderBy(collection, (0,_baseFlatten/* default */.A)(iteratees, 1), []); -}); - -/* harmony default export */ const lodash_es_sortBy = (sortBy); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js - - - - -/* - * A function that takes a layering (an array of layers, each with an array of - * ordererd nodes) and a graph and returns a weighted crossing count. - * - * Pre-conditions: - * - * 1. Input graph must be simple (not a multigraph), directed, and include - * only simple edges. - * 2. Edges in the input graph must have assigned weights. - * - * Post-conditions: - * - * 1. The graph and layering matrix are left unchanged. - * - * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." - */ -function crossCount(g, layering) { - var cc = 0; - for (var i = 1; i < layering.length; ++i) { - cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); - } - return cc; -} - -function twoLayerCrossCount(g, northLayer, southLayer) { - // Sort all of the edges between the north and south layers by their position - // in the north layer and then the south. Map these edges to the position of - // their head in the south layer. - var southPos = lodash_es_zipObject( - southLayer, - map/* default */.A(southLayer, function (v, i) { - return i; - }) - ); - var southEntries = flatten/* default */.A( - map/* default */.A(northLayer, function (v) { - return lodash_es_sortBy( - map/* default */.A(g.outEdges(v), function (e) { - return { pos: southPos[e.w], weight: g.edge(e).weight }; - }), - 'pos' - ); - }) - ); - - // Build the accumulator tree - var firstIndex = 1; - while (firstIndex < southLayer.length) firstIndex <<= 1; - var treeSize = 2 * firstIndex - 1; - firstIndex -= 1; - var tree = map/* default */.A(new Array(treeSize), function () { - return 0; - }); - - // Calculate the weighted crossings - var cc = 0; - forEach/* default */.A( - // @ts-expect-error - southEntries.forEach(function (entry) { - var index = entry.pos + firstIndex; - tree[index] += entry.weight; - var weightSum = 0; - // @ts-expect-error - while (index > 0) { - // @ts-expect-error - if (index % 2) { - weightSum += tree[index + 1]; - } - // @ts-expect-error - index = (index - 1) >> 1; - tree[index] += entry.weight; - } - cc += entry.weight * weightSum; - }) - ); - - return cc; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js - - - - -/* - * Assigns an initial order value for each node by performing a DFS search - * starting from nodes in the first rank. Nodes are assigned an order in their - * rank as they are first visited. - * - * This approach comes from Gansner, et al., "A Technique for Drawing Directed - * Graphs." - * - * Returns a layering matrix with an array per layer and each layer sorted by - * the order of its nodes. - */ -function initOrder(g) { - var visited = {}; - var simpleNodes = filter/* default */.A(g.nodes(), function (v) { - return !g.children(v).length; - }); - var maxRank = lodash_es_max( - map/* default */.A(simpleNodes, function (v) { - return g.node(v).rank; - }) - ); - var layers = map/* default */.A(range/* default */.A(maxRank + 1), function () { - return []; - }); - - function dfs(v) { - if (has/* default */.A(visited, v)) return; - visited[v] = true; - var node = g.node(v); - layers[node.rank].push(v); - forEach/* default */.A(g.successors(v), dfs); - } - - var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { - return g.node(v).rank; - }); - forEach/* default */.A(orderedVs, dfs); - - return layers; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js - - - - -function barycenter(g, movable) { - return map/* default */.A(movable, function (v) { - var inV = g.inEdges(v); - if (!inV.length) { - return { v: v }; - } else { - var result = reduce/* default */.A( - inV, - function (acc, e) { - var edge = g.edge(e), - nodeU = g.node(e.v); - return { - sum: acc.sum + edge.weight * nodeU.order, - weight: acc.weight + edge.weight, - }; - }, - { sum: 0, weight: 0 } - ); - - return { - v: v, - barycenter: result.sum / result.weight, - weight: result.weight, - }; - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js - - - - -/* - * Given a list of entries of the form {v, barycenter, weight} and a - * constraint graph this function will resolve any conflicts between the - * constraint graph and the barycenters for the entries. If the barycenters for - * an entry would violate a constraint in the constraint graph then we coalesce - * the nodes in the conflict into a new node that respects the contraint and - * aggregates barycenter and weight information. - * - * This implementation is based on the description in Forster, "A Fast and - * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it - * differs in some specific details. - * - * Pre-conditions: - * - * 1. Each entry has the form {v, barycenter, weight}, or if the node has - * no barycenter, then {v}. - * - * Returns: - * - * A new list of entries of the form {vs, i, barycenter, weight}. The list - * `vs` may either be a singleton or it may be an aggregation of nodes - * ordered such that they do not violate constraints from the constraint - * graph. The property `i` is the lowest original index of any of the - * elements in `vs`. - */ -function resolveConflicts(entries, cg) { - var mappedEntries = {}; - forEach/* default */.A(entries, function (entry, i) { - var tmp = (mappedEntries[entry.v] = { - indegree: 0, - in: [], - out: [], - vs: [entry.v], - i: i, - }); - if (!isUndefined/* default */.A(entry.barycenter)) { - // @ts-expect-error - tmp.barycenter = entry.barycenter; - // @ts-expect-error - tmp.weight = entry.weight; - } - }); - - forEach/* default */.A(cg.edges(), function (e) { - var entryV = mappedEntries[e.v]; - var entryW = mappedEntries[e.w]; - if (!isUndefined/* default */.A(entryV) && !isUndefined/* default */.A(entryW)) { - entryW.indegree++; - entryV.out.push(mappedEntries[e.w]); - } - }); - - var sourceSet = filter/* default */.A(mappedEntries, function (entry) { - // @ts-expect-error - return !entry.indegree; - }); - - return doResolveConflicts(sourceSet); -} - -function doResolveConflicts(sourceSet) { - var entries = []; - - function handleIn(vEntry) { - return function (uEntry) { - if (uEntry.merged) { - return; - } - if ( - isUndefined/* default */.A(uEntry.barycenter) || - isUndefined/* default */.A(vEntry.barycenter) || - uEntry.barycenter >= vEntry.barycenter - ) { - mergeEntries(vEntry, uEntry); - } - }; - } - - function handleOut(vEntry) { - return function (wEntry) { - wEntry['in'].push(vEntry); - if (--wEntry.indegree === 0) { - sourceSet.push(wEntry); - } - }; - } - - while (sourceSet.length) { - var entry = sourceSet.pop(); - entries.push(entry); - forEach/* default */.A(entry['in'].reverse(), handleIn(entry)); - forEach/* default */.A(entry.out, handleOut(entry)); - } - - return map/* default */.A( - filter/* default */.A(entries, function (entry) { - return !entry.merged; - }), - function (entry) { - return pick/* default */.A(entry, ['vs', 'i', 'barycenter', 'weight']); - } - ); -} - -function mergeEntries(target, source) { - var sum = 0; - var weight = 0; - - if (target.weight) { - sum += target.barycenter * target.weight; - weight += target.weight; - } - - if (source.weight) { - sum += source.barycenter * source.weight; - weight += source.weight; - } - - target.vs = source.vs.concat(target.vs); - target.barycenter = sum / weight; - target.weight = weight; - target.i = Math.min(source.i, target.i); - source.merged = true; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js - - - - - -function sort(entries, biasRight) { - var parts = partition(entries, function (entry) { - return has/* default */.A(entry, 'barycenter'); - }); - var sortable = parts.lhs, - unsortable = lodash_es_sortBy(parts.rhs, function (entry) { - return -entry.i; - }), - vs = [], - sum = 0, - weight = 0, - vsIndex = 0; - - sortable.sort(compareWithBias(!!biasRight)); - - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - - forEach/* default */.A(sortable, function (entry) { - vsIndex += entry.vs.length; - vs.push(entry.vs); - sum += entry.barycenter * entry.weight; - weight += entry.weight; - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - }); - - var result = { vs: flatten/* default */.A(vs) }; - if (weight) { - result.barycenter = sum / weight; - result.weight = weight; - } - return result; -} - -function consumeUnsortable(vs, unsortable, index) { - var last; - while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { - unsortable.pop(); - vs.push(last.vs); - index++; - } - return index; -} - -function compareWithBias(bias) { - return function (entryV, entryW) { - if (entryV.barycenter < entryW.barycenter) { - return -1; - } else if (entryV.barycenter > entryW.barycenter) { - return 1; - } - - return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; - }; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js - - - - - - - -function sortSubgraph(g, v, cg, biasRight) { - var movable = g.children(v); - var node = g.node(v); - var bl = node ? node.borderLeft : undefined; - var br = node ? node.borderRight : undefined; - var subgraphs = {}; - - if (bl) { - movable = filter/* default */.A(movable, function (w) { - return w !== bl && w !== br; - }); - } - - var barycenters = barycenter(g, movable); - forEach/* default */.A(barycenters, function (entry) { - if (g.children(entry.v).length) { - var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); - subgraphs[entry.v] = subgraphResult; - if (has/* default */.A(subgraphResult, 'barycenter')) { - mergeBarycenters(entry, subgraphResult); - } - } - }); - - var entries = resolveConflicts(barycenters, cg); - expandSubgraphs(entries, subgraphs); - - var result = sort(entries, biasRight); - - if (bl) { - result.vs = flatten/* default */.A([bl, result.vs, br]); - if (g.predecessors(bl).length) { - var blPred = g.node(g.predecessors(bl)[0]), - brPred = g.node(g.predecessors(br)[0]); - if (!has/* default */.A(result, 'barycenter')) { - result.barycenter = 0; - result.weight = 0; - } - result.barycenter = - (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); - result.weight += 2; - } - } - - return result; -} - -function expandSubgraphs(entries, subgraphs) { - forEach/* default */.A(entries, function (entry) { - entry.vs = flatten/* default */.A( - entry.vs.map(function (v) { - if (subgraphs[v]) { - return subgraphs[v].vs; - } - return v; - }) - ); - }); -} - -function mergeBarycenters(target, other) { - if (!isUndefined/* default */.A(target.barycenter)) { - target.barycenter = - (target.barycenter * target.weight + other.barycenter * other.weight) / - (target.weight + other.weight); - target.weight += other.weight; - } else { - target.barycenter = other.barycenter; - target.weight = other.weight; - } -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js - - - - - - - - - - - -/* - * Applies heuristics to minimize edge crossings in the graph and sets the best - * order solution as an order attribute on each node. - * - * Pre-conditions: - * - * 1. Graph must be DAG - * 2. Graph nodes must be objects with a "rank" attribute - * 3. Graph edges must have the "weight" attribute - * - * Post-conditions: - * - * 1. Graph nodes will have an "order" attribute based on the results of the - * algorithm. - */ -function order(g) { - var maxRank = util_maxRank(g), - downLayerGraphs = buildLayerGraphs(g, range/* default */.A(1, maxRank + 1), 'inEdges'), - upLayerGraphs = buildLayerGraphs(g, range/* default */.A(maxRank - 1, -1, -1), 'outEdges'); - - var layering = initOrder(g); - assignOrder(g, layering); - - var bestCC = Number.POSITIVE_INFINITY, - best; - - for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { - sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); - - layering = buildLayerMatrix(g); - var cc = crossCount(g, layering); - if (cc < bestCC) { - lastBest = 0; - best = lodash_es_cloneDeep(layering); - bestCC = cc; - } - } - - assignOrder(g, best); -} - -function buildLayerGraphs(g, ranks, relationship) { - return map/* default */.A(ranks, function (rank) { - return buildLayerGraph(g, rank, relationship); - }); -} - -function sweepLayerGraphs(layerGraphs, biasRight) { - var cg = new graphlib/* Graph */.T(); - forEach/* default */.A(layerGraphs, function (lg) { - var root = lg.graph().root; - var sorted = sortSubgraph(lg, root, cg, biasRight); - forEach/* default */.A(sorted.vs, function (v, i) { - lg.node(v).order = i; - }); - addSubgraphConstraints(lg, cg, sorted.vs); - }); -} - -function assignOrder(g, layering) { - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, i) { - g.node(v).order = i; - }); - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js - - - - -function parentDummyChains(g) { - var postorderNums = parent_dummy_chains_postorder(g); - - forEach/* default */.A(g.graph().dummyChains, function (v) { - var node = g.node(v); - var edgeObj = node.edgeObj; - var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); - var path = pathData.path; - var lca = pathData.lca; - var pathIdx = 0; - var pathV = path[pathIdx]; - var ascending = true; - - while (v !== edgeObj.w) { - node = g.node(v); - - if (ascending) { - while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { - pathIdx++; - } - - if (pathV === lca) { - ascending = false; - } - } - - if (!ascending) { - while ( - pathIdx < path.length - 1 && - g.node((pathV = path[pathIdx + 1])).minRank <= node.rank - ) { - pathIdx++; - } - pathV = path[pathIdx]; - } - - g.setParent(v, pathV); - v = g.successors(v)[0]; - } - }); -} - -// Find a path from v to w through the lowest common ancestor (LCA). Return the -// full path and the LCA. -function findPath(g, postorderNums, v, w) { - var vPath = []; - var wPath = []; - var low = Math.min(postorderNums[v].low, postorderNums[w].low); - var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); - var parent; - var lca; - - // Traverse up from v to find the LCA - parent = v; - do { - parent = g.parent(parent); - vPath.push(parent); - } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); - lca = parent; - - // Traverse from w to LCA - parent = w; - while ((parent = g.parent(parent)) !== lca) { - wPath.push(parent); - } - - return { path: vPath.concat(wPath.reverse()), lca: lca }; -} - -function parent_dummy_chains_postorder(g) { - var result = {}; - var lim = 0; - - function dfs(v) { - var low = lim; - forEach/* default */.A(g.children(v), dfs); - result[v] = { low: low, lim: lim++ }; - } - forEach/* default */.A(g.children(), dfs); - - return result; -} - -// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js -var _castFunction = __webpack_require__(99922); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js - - - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && (0,_baseForOwn/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee)); -} - -/* harmony default export */ const lodash_es_forOwn = (forOwn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules -var _baseFor = __webpack_require__(4574); -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js - - - - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : (0,_baseFor/* default */.A)(object, (0,_castFunction/* default */.A)(iteratee), keysIn/* default */.A); -} - -/* harmony default export */ const lodash_es_forIn = (forIn); - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js - - - - -/* - * This module provides coordinate assignment based on Brandes and Köpf, "Fast - * and Simple Horizontal Coordinate Assignment." - */ - - - -/* - * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" - * property. A type-1 conflict is one where a non-inner segment crosses an - * inner segment. An inner segment is an edge with both incident nodes marked - * with the "dummy" property. - * - * This algorithm scans layer by layer, starting with the second, for type-1 - * conflicts between the current layer and the previous layer. For each layer - * it scans the nodes from left to right until it reaches one that is incident - * on an inner segment. It then scans predecessors to determine if they have - * edges that cross that inner segment. At the end a final scan is done for all - * nodes on the current rank to see if they cross the last visited inner - * segment. - * - * This algorithm (safely) assumes that a dummy node will only be incident on a - * single node in the layers being scanned. - */ -function findType1Conflicts(g, layering) { - var conflicts = {}; - - function visitLayer(prevLayer, layer) { - var // last visited node in the previous layer that is incident on an inner - // segment. - k0 = 0, - // Tracks the last node in this layer scanned for crossings with a type-1 - // segment. - scanPos = 0, - prevLayerLength = prevLayer.length, - lastNode = lodash_es_last(layer); - - forEach/* default */.A(layer, function (v, i) { - var w = findOtherInnerSegmentNode(g, v), - k1 = w ? g.node(w).order : prevLayerLength; - - if (w || v === lastNode) { - forEach/* default */.A(layer.slice(scanPos, i + 1), function (scanNode) { - forEach/* default */.A(g.predecessors(scanNode), function (u) { - var uLabel = g.node(u), - uPos = uLabel.order; - if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { - addConflict(conflicts, u, scanNode); - } - }); - }); - // @ts-expect-error - scanPos = i + 1; - k0 = k1; - } - }); - - return layer; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findType2Conflicts(g, layering) { - var conflicts = {}; - - function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { - var v; - forEach/* default */.A(range/* default */.A(southPos, southEnd), function (i) { - v = south[i]; - if (g.node(v).dummy) { - forEach/* default */.A(g.predecessors(v), function (u) { - var uNode = g.node(u); - if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { - addConflict(conflicts, u, v); - } - }); - } - }); - } - - function visitLayer(north, south) { - var prevNorthPos = -1, - nextNorthPos, - southPos = 0; - - forEach/* default */.A(south, function (v, southLookahead) { - if (g.node(v).dummy === 'border') { - var predecessors = g.predecessors(v); - if (predecessors.length) { - nextNorthPos = g.node(predecessors[0]).order; - scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); - // @ts-expect-error - southPos = southLookahead; - prevNorthPos = nextNorthPos; - } - } - scan(south, southPos, south.length, nextNorthPos, north.length); - }); - - return south; - } - - reduce/* default */.A(layering, visitLayer); - return conflicts; -} - -function findOtherInnerSegmentNode(g, v) { - if (g.node(v).dummy) { - return lodash_es_find(g.predecessors(v), function (u) { - return g.node(u).dummy; - }); - } -} - -function addConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - - var conflictsV = conflicts[v]; - if (!conflictsV) { - conflicts[v] = conflictsV = {}; - } - conflictsV[w] = true; -} - -function hasConflict(conflicts, v, w) { - if (v > w) { - var tmp = v; - v = w; - w = tmp; - } - return has/* default */.A(conflicts[v], w); -} - -/* - * Try to align nodes into vertical "blocks" where possible. This algorithm - * attempts to align a node with one of its median neighbors. If the edge - * connecting a neighbor is a type-1 conflict then we ignore that possibility. - * If a previous node has already formed a block with a node after the node - * we're trying to form a block with, we also ignore that possibility - our - * blocks would be split in that scenario. - */ -function verticalAlignment(g, layering, conflicts, neighborFn) { - var root = {}, - align = {}, - pos = {}; - - // We cache the position here based on the layering because the graph and - // layering may be out of sync. The layering matrix is manipulated to - // generate different extreme alignments. - forEach/* default */.A(layering, function (layer) { - forEach/* default */.A(layer, function (v, order) { - root[v] = v; - align[v] = v; - pos[v] = order; - }); - }); - - forEach/* default */.A(layering, function (layer) { - var prevIdx = -1; - forEach/* default */.A(layer, function (v) { - var ws = neighborFn(v); - if (ws.length) { - ws = lodash_es_sortBy(ws, function (w) { - return pos[w]; - }); - var mp = (ws.length - 1) / 2; - for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { - var w = ws[i]; - if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { - align[w] = v; - align[v] = root[v] = root[w]; - prevIdx = pos[w]; - } - } - } - }); - }); - - return { root: root, align: align }; -} - -function horizontalCompaction(g, layering, root, align, reverseSep) { - // This portion of the algorithm differs from BK due to a number of problems. - // Instead of their algorithm we construct a new block graph and do two - // sweeps. The first sweep places blocks with the smallest possible - // coordinates. The second sweep removes unused space by moving blocks to the - // greatest coordinates without violating separation. - var xs = {}, - blockG = buildBlockGraph(g, layering, root, reverseSep), - borderType = reverseSep ? 'borderLeft' : 'borderRight'; - - function iterate(setXsFunc, nextNodesFunc) { - var stack = blockG.nodes(); - var elem = stack.pop(); - var visited = {}; - while (elem) { - if (visited[elem]) { - setXsFunc(elem); - } else { - visited[elem] = true; - stack.push(elem); - stack = stack.concat(nextNodesFunc(elem)); - } - - elem = stack.pop(); - } - } - - // First pass, assign smallest coordinates - function pass1(elem) { - xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { - return Math.max(acc, xs[e.v] + blockG.edge(e)); - }, 0); - } - - // Second pass, assign greatest coordinates - function pass2(elem) { - var min = blockG.outEdges(elem).reduce(function (acc, e) { - return Math.min(acc, xs[e.w] - blockG.edge(e)); - }, Number.POSITIVE_INFINITY); - - var node = g.node(elem); - if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { - xs[elem] = Math.max(xs[elem], min); - } - } - - iterate(pass1, blockG.predecessors.bind(blockG)); - iterate(pass2, blockG.successors.bind(blockG)); - - // Assign x coordinates to all nodes - forEach/* default */.A(align, function (v) { - xs[v] = xs[root[v]]; - }); - - return xs; -} - -function buildBlockGraph(g, layering, root, reverseSep) { - var blockGraph = new graphlib/* Graph */.T(), - graphLabel = g.graph(), - sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); - - forEach/* default */.A(layering, function (layer) { - var u; - forEach/* default */.A(layer, function (v) { - var vRoot = root[v]; - blockGraph.setNode(vRoot); - if (u) { - var uRoot = root[u], - prevMax = blockGraph.edge(uRoot, vRoot); - blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); - } - u = v; - }); - }); - - return blockGraph; -} - -/* - * Returns the alignment that has the smallest width of the given alignments. - */ -function findSmallestWidthAlignment(g, xss) { - return lodash_es_minBy(values/* default */.A(xss), function (xs) { - var max = Number.NEGATIVE_INFINITY; - var min = Number.POSITIVE_INFINITY; - - lodash_es_forIn(xs, function (x, v) { - var halfWidth = width(g, v) / 2; - - max = Math.max(x + halfWidth, max); - min = Math.min(x - halfWidth, min); - }); - - return max - min; - }); -} - -/* - * Align the coordinates of each of the layout alignments such that - * left-biased alignments have their minimum coordinate at the same point as - * the minimum coordinate of the smallest width alignment and right-biased - * alignments have their maximum coordinate at the same point as the maximum - * coordinate of the smallest width alignment. - */ -function alignCoordinates(xss, alignTo) { - var alignToVals = values/* default */.A(alignTo), - alignToMin = lodash_es_min(alignToVals), - alignToMax = lodash_es_max(alignToVals); - - forEach/* default */.A(['u', 'd'], function (vert) { - forEach/* default */.A(['l', 'r'], function (horiz) { - var alignment = vert + horiz, - xs = xss[alignment], - delta; - if (xs === alignTo) return; - - var xsVals = values/* default */.A(xs); - delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); - - if (delta) { - xss[alignment] = lodash_es_mapValues(xs, function (x) { - return x + delta; - }); - } - }); - }); -} - -function balance(xss, align) { - return lodash_es_mapValues(xss.ul, function (ignore, v) { - if (align) { - return xss[align.toLowerCase()][v]; - } else { - var xs = lodash_es_sortBy(map/* default */.A(xss, v)); - return (xs[1] + xs[2]) / 2; - } - }); -} - -function positionX(g) { - var layering = buildLayerMatrix(g); - var conflicts = merge/* default */.A(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); - - var xss = {}; - var adjustedLayering; - forEach/* default */.A(['u', 'd'], function (vert) { - adjustedLayering = vert === 'u' ? layering : values/* default */.A(layering).reverse(); - forEach/* default */.A(['l', 'r'], function (horiz) { - if (horiz === 'r') { - adjustedLayering = map/* default */.A(adjustedLayering, function (inner) { - return values/* default */.A(inner).reverse(); - }); - } - - var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); - var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); - var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); - if (horiz === 'r') { - xs = lodash_es_mapValues(xs, function (x) { - return -x; - }); - } - xss[vert + horiz] = xs; - }); - }); - - var smallestWidth = findSmallestWidthAlignment(g, xss); - alignCoordinates(xss, smallestWidth); - return balance(xss, g.graph().align); -} - -function sep(nodeSep, edgeSep, reverseSep) { - return function (g, v, w) { - var vLabel = g.node(v); - var wLabel = g.node(w); - var sum = 0; - var delta; - - sum += vLabel.width / 2; - if (has/* default */.A(vLabel, 'labelpos')) { - switch (vLabel.labelpos.toLowerCase()) { - case 'l': - delta = -vLabel.width / 2; - break; - case 'r': - delta = vLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; - sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; - - sum += wLabel.width / 2; - if (has/* default */.A(wLabel, 'labelpos')) { - switch (wLabel.labelpos.toLowerCase()) { - case 'l': - delta = wLabel.width / 2; - break; - case 'r': - delta = -wLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - - return sum; - }; -} - -function width(g, v) { - return g.node(v).width; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js - - - - - - -function position(g) { - g = asNonCompoundGraph(g); - - positionY(g); - lodash_es_forOwn(positionX(g), function (x, v) { - g.node(v).x = x; - }); -} - -function positionY(g) { - var layering = buildLayerMatrix(g); - var rankSep = g.graph().ranksep; - var prevY = 0; - forEach/* default */.A(layering, function (layer) { - var maxHeight = lodash_es_max( - map/* default */.A(layer, function (v) { - return g.node(v).height; - }) - ); - forEach/* default */.A(layer, function (v) { - g.node(v).y = prevY + maxHeight / 2; - }); - prevY += maxHeight + rankSep; - }); -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js - - - - - - - - - - - - - - - -function layout(g, opts) { - var time = opts && opts.debugTiming ? util_time : notime; - time('layout', function () { - var layoutGraph = time(' buildLayoutGraph', function () { - return buildLayoutGraph(g); - }); - time(' runLayout', function () { - runLayout(layoutGraph, time); - }); - time(' updateInputGraph', function () { - updateInputGraph(g, layoutGraph); - }); - }); -} - -function runLayout(g, time) { - time(' makeSpaceForEdgeLabels', function () { - makeSpaceForEdgeLabels(g); - }); - time(' removeSelfEdges', function () { - removeSelfEdges(g); - }); - time(' acyclic', function () { - run(g); - }); - time(' nestingGraph.run', function () { - nesting_graph_run(g); - }); - time(' rank', function () { - rank(asNonCompoundGraph(g)); - }); - time(' injectEdgeLabelProxies', function () { - injectEdgeLabelProxies(g); - }); - time(' removeEmptyRanks', function () { - removeEmptyRanks(g); - }); - time(' nestingGraph.cleanup', function () { - cleanup(g); - }); - time(' normalizeRanks', function () { - normalizeRanks(g); - }); - time(' assignRankMinMax', function () { - assignRankMinMax(g); - }); - time(' removeEdgeLabelProxies', function () { - removeEdgeLabelProxies(g); - }); - time(' normalize.run', function () { - normalize_run(g); - }); - time(' parentDummyChains', function () { - parentDummyChains(g); - }); - time(' addBorderSegments', function () { - addBorderSegments(g); - }); - time(' order', function () { - order(g); - }); - time(' insertSelfEdges', function () { - insertSelfEdges(g); - }); - time(' adjustCoordinateSystem', function () { - adjust(g); - }); - time(' position', function () { - position(g); - }); - time(' positionSelfEdges', function () { - positionSelfEdges(g); - }); - time(' removeBorderNodes', function () { - removeBorderNodes(g); - }); - time(' normalize.undo', function () { - normalize_undo(g); - }); - time(' fixupEdgeLabelCoords', function () { - fixupEdgeLabelCoords(g); - }); - time(' undoCoordinateSystem', function () { - coordinate_system_undo(g); - }); - time(' translateGraph', function () { - translateGraph(g); - }); - time(' assignNodeIntersects', function () { - assignNodeIntersects(g); - }); - time(' reversePoints', function () { - reversePointsForReversedEdges(g); - }); - time(' acyclic.undo', function () { - undo(g); - }); -} - -/* - * Copies final layout information from the layout graph back to the input - * graph. This process only copies whitelisted attributes from the layout graph - * to the input graph, so it serves as a good place to determine what - * attributes can influence layout. - */ -function updateInputGraph(inputGraph, layoutGraph) { - forEach/* default */.A(inputGraph.nodes(), function (v) { - var inputLabel = inputGraph.node(v); - var layoutLabel = layoutGraph.node(v); - - if (inputLabel) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - - if (layoutGraph.children(v).length) { - inputLabel.width = layoutLabel.width; - inputLabel.height = layoutLabel.height; - } - } - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var inputLabel = inputGraph.edge(e); - var layoutLabel = layoutGraph.edge(e); - - inputLabel.points = layoutLabel.points; - if (has/* default */.A(layoutLabel, 'x')) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - } - }); - - inputGraph.graph().width = layoutGraph.graph().width; - inputGraph.graph().height = layoutGraph.graph().height; -} - -var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; -var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; -var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; -var nodeNumAttrs = ['width', 'height']; -var nodeDefaults = { width: 0, height: 0 }; -var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; -var edgeDefaults = { - minlen: 1, - weight: 1, - width: 0, - height: 0, - labeloffset: 10, - labelpos: 'r', -}; -var edgeAttrs = ['labelpos']; - -/* - * Constructs a new graph from the input graph, which can be used for layout. - * This process copies only whitelisted attributes from the input graph to the - * layout graph. Thus this function serves as a good place to determine what - * attributes can influence layout. - */ -function buildLayoutGraph(inputGraph) { - var g = new graphlib/* Graph */.T({ multigraph: true, compound: true }); - var graph = canonicalize(inputGraph.graph()); - - g.setGraph( - merge/* default */.A({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.A(graph, graphAttrs)) - ); - - forEach/* default */.A(inputGraph.nodes(), function (v) { - var node = canonicalize(inputGraph.node(v)); - g.setNode(v, defaults/* default */.A(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); - g.setParent(v, inputGraph.parent(v)); - }); - - forEach/* default */.A(inputGraph.edges(), function (e) { - var edge = canonicalize(inputGraph.edge(e)); - g.setEdge( - e, - merge/* default */.A({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.A(edge, edgeAttrs)) - ); - }); - - return g; -} - -/* - * This idea comes from the Gansner paper: to account for edge labels in our - * layout we split each rank in half by doubling minlen and halving ranksep. - * Then we can place labels at these mid-points between nodes. - * - * We also add some minimal padding to the width to push the label for the edge - * away from the edge itself a bit. - */ -function makeSpaceForEdgeLabels(g) { - var graph = g.graph(); - graph.ranksep /= 2; - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - edge.minlen *= 2; - if (edge.labelpos.toLowerCase() !== 'c') { - if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { - edge.width += edge.labeloffset; - } else { - edge.height += edge.labeloffset; - } - } - }); -} - -/* - * Creates temporary dummy nodes that capture the rank in which each edge's - * label is going to, if it has one of non-zero width and height. We do this - * so that we can safely remove empty ranks while preserving balance for the - * label's position. - */ -function injectEdgeLabelProxies(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.width && edge.height) { - var v = g.node(e.v); - var w = g.node(e.w); - var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; - addDummyNode(g, 'edge-proxy', label, '_ep'); - } - }); -} - -function assignRankMinMax(g) { - var maxRank = 0; - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.borderTop) { - node.minRank = g.node(node.borderTop).rank; - node.maxRank = g.node(node.borderBottom).rank; - // @ts-expect-error - maxRank = lodash_es_max(maxRank, node.maxRank); - } - }); - g.graph().maxRank = maxRank; -} - -function removeEdgeLabelProxies(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'edge-proxy') { - g.edge(node.e).labelRank = node.rank; - g.removeNode(v); - } - }); -} - -function translateGraph(g) { - var minX = Number.POSITIVE_INFINITY; - var maxX = 0; - var minY = Number.POSITIVE_INFINITY; - var maxY = 0; - var graphLabel = g.graph(); - var marginX = graphLabel.marginx || 0; - var marginY = graphLabel.marginy || 0; - - function getExtremes(attrs) { - var x = attrs.x; - var y = attrs.y; - var w = attrs.width; - var h = attrs.height; - minX = Math.min(minX, x - w / 2); - maxX = Math.max(maxX, x + w / 2); - minY = Math.min(minY, y - h / 2); - maxY = Math.max(maxY, y + h / 2); - } - - forEach/* default */.A(g.nodes(), function (v) { - getExtremes(g.node(v)); - }); - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - getExtremes(edge); - } - }); - - minX -= marginX; - minY -= marginY; - - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - node.x -= minX; - node.y -= minY; - }); - - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - forEach/* default */.A(edge.points, function (p) { - p.x -= minX; - p.y -= minY; - }); - if (has/* default */.A(edge, 'x')) { - edge.x -= minX; - } - if (has/* default */.A(edge, 'y')) { - edge.y -= minY; - } - }); - - graphLabel.width = maxX - minX + marginX; - graphLabel.height = maxY - minY + marginY; -} - -function assignNodeIntersects(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - var nodeV = g.node(e.v); - var nodeW = g.node(e.w); - var p1, p2; - if (!edge.points) { - edge.points = []; - p1 = nodeW; - p2 = nodeV; - } else { - p1 = edge.points[0]; - p2 = edge.points[edge.points.length - 1]; - } - edge.points.unshift(intersectRect(nodeV, p1)); - edge.points.push(intersectRect(nodeW, p2)); - }); -} - -function fixupEdgeLabelCoords(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (has/* default */.A(edge, 'x')) { - if (edge.labelpos === 'l' || edge.labelpos === 'r') { - edge.width -= edge.labeloffset; - } - switch (edge.labelpos) { - case 'l': - edge.x -= edge.width / 2 + edge.labeloffset; - break; - case 'r': - edge.x += edge.width / 2 + edge.labeloffset; - break; - } - } - }); -} - -function reversePointsForReversedEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - var edge = g.edge(e); - if (edge.reversed) { - edge.points.reverse(); - } - }); -} - -function removeBorderNodes(g) { - forEach/* default */.A(g.nodes(), function (v) { - if (g.children(v).length) { - var node = g.node(v); - var t = g.node(node.borderTop); - var b = g.node(node.borderBottom); - var l = g.node(lodash_es_last(node.borderLeft)); - var r = g.node(lodash_es_last(node.borderRight)); - - node.width = Math.abs(r.x - l.x); - node.height = Math.abs(b.y - t.y); - node.x = l.x + node.width / 2; - node.y = t.y + node.height / 2; - } - }); - - forEach/* default */.A(g.nodes(), function (v) { - if (g.node(v).dummy === 'border') { - g.removeNode(v); - } - }); -} - -function removeSelfEdges(g) { - forEach/* default */.A(g.edges(), function (e) { - if (e.v === e.w) { - var node = g.node(e.v); - if (!node.selfEdges) { - node.selfEdges = []; - } - node.selfEdges.push({ e: e, label: g.edge(e) }); - g.removeEdge(e); - } - }); -} - -function insertSelfEdges(g) { - var layers = buildLayerMatrix(g); - forEach/* default */.A(layers, function (layer) { - var orderShift = 0; - forEach/* default */.A(layer, function (v, i) { - var node = g.node(v); - node.order = i + orderShift; - forEach/* default */.A(node.selfEdges, function (selfEdge) { - addDummyNode( - g, - 'selfedge', - { - width: selfEdge.label.width, - height: selfEdge.label.height, - rank: node.rank, - order: i + ++orderShift, - e: selfEdge.e, - label: selfEdge.label, - }, - '_se' - ); - }); - delete node.selfEdges; - }); - }); -} - -function positionSelfEdges(g) { - forEach/* default */.A(g.nodes(), function (v) { - var node = g.node(v); - if (node.dummy === 'selfedge') { - var selfNode = g.node(node.e.v); - var x = selfNode.x + selfNode.width / 2; - var y = selfNode.y; - var dx = node.x - x; - var dy = selfNode.height / 2; - g.setEdge(node.e, node.label); - g.removeNode(v); - node.label.points = [ - { x: x + (2 * dx) / 3, y: y - dy }, - { x: x + (5 * dx) / 6, y: y - dy }, - { x: x + dx, y: y }, - { x: x + (5 * dx) / 6, y: y + dy }, - { x: x + (2 * dx) / 3, y: y + dy }, - ]; - node.label.x = node.x; - node.label.y = node.y; - } - }); -} - -function selectNumberAttrs(obj, attrs) { - return lodash_es_mapValues(pick/* default */.A(obj, attrs), Number); -} - -function canonicalize(attrs) { - var newAttrs = {}; - forEach/* default */.A(attrs, function (v, k) { - newAttrs[k.toLowerCase()] = v; - }); - return newAttrs; -} - -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js - - - - - - - - -/***/ }), - -/***/ 73046: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - T: () => (/* binding */ Graph) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules -var has = __webpack_require__(48585); -// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js -var constant = __webpack_require__(39142); -// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js -var isFunction = __webpack_require__(89610); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules -var filter = __webpack_require__(11662); -// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js -var isEmpty = __webpack_require__(66401); -// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js -var forEach = __webpack_require__(8058); -// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js -var isUndefined = __webpack_require__(69592); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules -var _baseFlatten = __webpack_require__(13588); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js -var _baseRest = __webpack_require__(24326); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js -var _baseFindIndex = __webpack_require__(25707); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -/* harmony default export */ const _baseIsNaN = (baseIsNaN); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -/* harmony default export */ const _strictIndexOf = (strictIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js - - - - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? _strictIndexOf(array, value, fromIndex) - : (0,_baseFindIndex/* default */.A)(array, _baseIsNaN, fromIndex); -} - -/* harmony default export */ const _baseIndexOf = (baseIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js - - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && _baseIndexOf(array, value, 0) > -1; -} - -/* harmony default export */ const _arrayIncludes = (arrayIncludes); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js -var _Set = __webpack_require__(39857); -;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js -/** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ -function noop() { - // No operation performed. -} - -/* harmony default export */ const lodash_es_noop = (noop); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(_Set/* default */.A && (1 / (0,_setToArray/* default */.A)(new _Set/* default */.A([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { - return new _Set/* default */.A(values); -}; - -/* harmony default export */ const _createSet = (createSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js - - - - - - - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = _arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = _arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : _createSet(array); - if (set) { - return (0,_setToArray/* default */.A)(set); - } - isCommon = false; - includes = _cacheHas/* default */.A; - seen = new _SetCache/* default */.A; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -/* harmony default export */ const _baseUniq = (baseUniq); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js -var isArrayLikeObject = __webpack_require__(53533); -;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js - - - - - -/** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ -var union = (0,_baseRest/* default */.A)(function(arrays) { - return _baseUniq((0,_baseFlatten/* default */.A)(arrays, 1, isArrayLikeObject/* default */.A, true)); -}); - -/* harmony default export */ const lodash_es_union = (union); - -// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules -var values = __webpack_require__(38207); -// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules -var reduce = __webpack_require__(89463); -;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js - - -var DEFAULT_EDGE_NAME = '\x00'; -var GRAPH_NODE = '\x00'; -var EDGE_KEY_DELIM = '\x01'; - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. - -// Implementation notes: -// -// * Node id query functions should return string ids for the nodes -// * Edge id query functions should return an "edgeObj", edge object, that is -// composed of enough information to uniquely identify an edge: {v, w, name}. -// * Internally we use an "edgeId", a stringified form of the edgeObj, to -// reference edges. This is because we need a performant way to look these -// edges up and, object properties, which have string keys, are the closest -// we're going to get to a performant hashtable in JavaScript. -class Graph { - constructor(opts = {}) { - this._isDirected = has/* default */.A(opts, 'directed') ? opts.directed : true; - this._isMultigraph = has/* default */.A(opts, 'multigraph') ? opts.multigraph : false; - this._isCompound = has/* default */.A(opts, 'compound') ? opts.compound : false; - - // Label for the graph itself - this._label = undefined; - - // Defaults to be set when creating a new node - this._defaultNodeLabelFn = constant/* default */.A(undefined); - - // Defaults to be set when creating a new edge - this._defaultEdgeLabelFn = constant/* default */.A(undefined); - - // v -> label - this._nodes = {}; - - if (this._isCompound) { - // v -> parent - this._parent = {}; - - // v -> children - this._children = {}; - this._children[GRAPH_NODE] = {}; - } - - // v -> edgeObj - this._in = {}; - - // u -> v -> Number - this._preds = {}; - - // v -> edgeObj - this._out = {}; - - // v -> w -> Number - this._sucs = {}; - - // e -> edgeObj - this._edgeObjs = {}; - - // e -> label - this._edgeLabels = {}; - } - /* === Graph functions ========= */ - isDirected() { - return this._isDirected; - } - isMultigraph() { - return this._isMultigraph; - } - isCompound() { - return this._isCompound; - } - setGraph(label) { - this._label = label; - return this; - } - graph() { - return this._label; - } - /* === Node functions ========== */ - setDefaultNodeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultNodeLabelFn = newDefault; - return this; - } - nodeCount() { - return this._nodeCount; - } - nodes() { - return keys/* default */.A(this._nodes); - } - sources() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._in[v]); - }); - } - sinks() { - var self = this; - return filter/* default */.A(this.nodes(), function (v) { - return isEmpty/* default */.A(self._out[v]); - }); - } - setNodes(vs, value) { - var args = arguments; - var self = this; - forEach/* default */.A(vs, function (v) { - if (args.length > 1) { - self.setNode(v, value); - } else { - self.setNode(v); - } - }); - return this; - } - setNode(v, value) { - if (has/* default */.A(this._nodes, v)) { - if (arguments.length > 1) { - this._nodes[v] = value; - } - return this; - } - - // @ts-expect-error - this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); - if (this._isCompound) { - this._parent[v] = GRAPH_NODE; - this._children[v] = {}; - this._children[GRAPH_NODE][v] = true; - } - this._in[v] = {}; - this._preds[v] = {}; - this._out[v] = {}; - this._sucs[v] = {}; - ++this._nodeCount; - return this; - } - node(v) { - return this._nodes[v]; - } - hasNode(v) { - return has/* default */.A(this._nodes, v); - } - removeNode(v) { - var self = this; - if (has/* default */.A(this._nodes, v)) { - var removeEdge = function (e) { - self.removeEdge(self._edgeObjs[e]); - }; - delete this._nodes[v]; - if (this._isCompound) { - this._removeFromParentsChildList(v); - delete this._parent[v]; - forEach/* default */.A(this.children(v), function (child) { - self.setParent(child); - }); - delete this._children[v]; - } - forEach/* default */.A(keys/* default */.A(this._in[v]), removeEdge); - delete this._in[v]; - delete this._preds[v]; - forEach/* default */.A(keys/* default */.A(this._out[v]), removeEdge); - delete this._out[v]; - delete this._sucs[v]; - --this._nodeCount; - } - return this; - } - setParent(v, parent) { - if (!this._isCompound) { - throw new Error('Cannot set parent in a non-compound graph'); - } - - if (isUndefined/* default */.A(parent)) { - parent = GRAPH_NODE; - } else { - // Coerce parent to string - parent += ''; - for (var ancestor = parent; !isUndefined/* default */.A(ancestor); ancestor = this.parent(ancestor)) { - if (ancestor === v) { - throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); - } - } - - this.setNode(parent); - } - - this.setNode(v); - this._removeFromParentsChildList(v); - this._parent[v] = parent; - this._children[parent][v] = true; - return this; - } - _removeFromParentsChildList(v) { - delete this._children[this._parent[v]][v]; - } - parent(v) { - if (this._isCompound) { - var parent = this._parent[v]; - if (parent !== GRAPH_NODE) { - return parent; - } - } - } - children(v) { - if (isUndefined/* default */.A(v)) { - v = GRAPH_NODE; - } - - if (this._isCompound) { - var children = this._children[v]; - if (children) { - return keys/* default */.A(children); - } - } else if (v === GRAPH_NODE) { - return this.nodes(); - } else if (this.hasNode(v)) { - return []; - } - } - predecessors(v) { - var predsV = this._preds[v]; - if (predsV) { - return keys/* default */.A(predsV); - } - } - successors(v) { - var sucsV = this._sucs[v]; - if (sucsV) { - return keys/* default */.A(sucsV); - } - } - neighbors(v) { - var preds = this.predecessors(v); - if (preds) { - return lodash_es_union(preds, this.successors(v)); - } - } - isLeaf(v) { - var neighbors; - if (this.isDirected()) { - neighbors = this.successors(v); - } else { - neighbors = this.neighbors(v); - } - return neighbors.length === 0; - } - filterNodes(filter) { - // @ts-expect-error - var copy = new this.constructor({ - directed: this._isDirected, - multigraph: this._isMultigraph, - compound: this._isCompound, - }); - - copy.setGraph(this.graph()); - - var self = this; - forEach/* default */.A(this._nodes, function (value, v) { - if (filter(v)) { - copy.setNode(v, value); - } - }); - - forEach/* default */.A(this._edgeObjs, function (e) { - // @ts-expect-error - if (copy.hasNode(e.v) && copy.hasNode(e.w)) { - copy.setEdge(e, self.edge(e)); - } - }); - - var parents = {}; - function findParent(v) { - var parent = self.parent(v); - if (parent === undefined || copy.hasNode(parent)) { - parents[v] = parent; - return parent; - } else if (parent in parents) { - return parents[parent]; - } else { - return findParent(parent); - } - } - - if (this._isCompound) { - forEach/* default */.A(copy.nodes(), function (v) { - copy.setParent(v, findParent(v)); - }); - } - - return copy; - } - /* === Edge functions ========== */ - setDefaultEdgeLabel(newDefault) { - if (!isFunction/* default */.A(newDefault)) { - newDefault = constant/* default */.A(newDefault); - } - this._defaultEdgeLabelFn = newDefault; - return this; - } - edgeCount() { - return this._edgeCount; - } - edges() { - return values/* default */.A(this._edgeObjs); - } - setPath(vs, value) { - var self = this; - var args = arguments; - reduce/* default */.A(vs, function (v, w) { - if (args.length > 1) { - self.setEdge(v, w, value); - } else { - self.setEdge(v, w); - } - return w; - }); - return this; - } - /* - * setEdge(v, w, [value, [name]]) - * setEdge({ v, w, [name] }, [value]) - */ - setEdge() { - var v, w, name, value; - var valueSpecified = false; - var arg0 = arguments[0]; - - if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { - v = arg0.v; - w = arg0.w; - name = arg0.name; - if (arguments.length === 2) { - value = arguments[1]; - valueSpecified = true; - } - } else { - v = arg0; - w = arguments[1]; - name = arguments[3]; - if (arguments.length > 2) { - value = arguments[2]; - valueSpecified = true; - } - } - - v = '' + v; - w = '' + w; - if (!isUndefined/* default */.A(name)) { - name = '' + name; - } - - var e = edgeArgsToId(this._isDirected, v, w, name); - if (has/* default */.A(this._edgeLabels, e)) { - if (valueSpecified) { - this._edgeLabels[e] = value; - } - return this; - } - - if (!isUndefined/* default */.A(name) && !this._isMultigraph) { - throw new Error('Cannot set a named edge when isMultigraph = false'); - } - - // It didn't exist, so we need to create it. - // First ensure the nodes exist. - this.setNode(v); - this.setNode(w); - - // @ts-expect-error - this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); - - var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); - // Ensure we add undirected edges in a consistent way. - v = edgeObj.v; - w = edgeObj.w; - - Object.freeze(edgeObj); - this._edgeObjs[e] = edgeObj; - incrementOrInitEntry(this._preds[w], v); - incrementOrInitEntry(this._sucs[v], w); - this._in[w][e] = edgeObj; - this._out[v][e] = edgeObj; - this._edgeCount++; - return this; - } - edge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return this._edgeLabels[e]; - } - hasEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - return has/* default */.A(this._edgeLabels, e); - } - removeEdge(v, w, name) { - var e = - arguments.length === 1 - ? edgeObjToId(this._isDirected, arguments[0]) - : edgeArgsToId(this._isDirected, v, w, name); - var edge = this._edgeObjs[e]; - if (edge) { - v = edge.v; - w = edge.w; - delete this._edgeLabels[e]; - delete this._edgeObjs[e]; - decrementOrRemoveEntry(this._preds[w], v); - decrementOrRemoveEntry(this._sucs[v], w); - delete this._in[w][e]; - delete this._out[v][e]; - this._edgeCount--; - } - return this; - } - inEdges(v, u) { - var inV = this._in[v]; - if (inV) { - var edges = values/* default */.A(inV); - if (!u) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.v === u; - }); - } - } - outEdges(v, w) { - var outV = this._out[v]; - if (outV) { - var edges = values/* default */.A(outV); - if (!w) { - return edges; - } - return filter/* default */.A(edges, function (edge) { - return edge.w === w; - }); - } - } - nodeEdges(v, w) { - var inEdges = this.inEdges(v, w); - if (inEdges) { - return inEdges.concat(this.outEdges(v, w)); - } - } -} - -/* Number of nodes in the graph. Should only be changed by the implementation. */ -Graph.prototype._nodeCount = 0; - -/* Number of edges in the graph. Should only be changed by the implementation. */ -Graph.prototype._edgeCount = 0; - -function incrementOrInitEntry(map, k) { - if (map[k]) { - map[k]++; - } else { - map[k] = 1; - } -} - -function decrementOrRemoveEntry(map, k) { - if (!--map[k]) { - delete map[k]; - } -} - -function edgeArgsToId(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.A(name) ? DEFAULT_EDGE_NAME : name); -} - -function edgeArgsToObj(isDirected, v_, w_, name) { - var v = '' + v_; - var w = '' + w_; - if (!isDirected && v > w) { - var tmp = v; - v = w; - w = tmp; - } - var edgeObj = { v: v, w: w }; - if (name) { - edgeObj.name = name; - } - return edgeObj; -} - -function edgeObjToId(isDirected, edgeObj) { - return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); -} - - -/***/ }), - -/***/ 697: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ T: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.T) -/* harmony export */ }); -/* unused harmony export version */ -/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73046); -// Includes only the "core" of graphlib - - - -const version = '2.1.9-pre'; - - - - -/***/ }), - -/***/ 62062: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _SetCache) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules -var _MapCache = __webpack_require__(29471); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -/* harmony default export */ const _setCacheAdd = (setCacheAdd); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -/* harmony default export */ const _setCacheHas = (setCacheHas); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js - - - - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new _MapCache/* default */.A; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; -SetCache.prototype.has = _setCacheHas; - -/* harmony default export */ const _SetCache = (SetCache); - - -/***/ }), - -/***/ 72641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); - - -/***/ }), - -/***/ 2634: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); - - -/***/ }), - -/***/ 45572: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); - - -/***/ }), - -/***/ 76912: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); - - -/***/ }), - -/***/ 91641: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseClone) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js -var _arrayEach = __webpack_require__(72641); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js -var _copyObject = __webpack_require__(22031); -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js - - - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keys/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssign = (baseAssign); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules -var keysIn = __webpack_require__(55615); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js - - - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && (0,_copyObject/* default */.A)(source, (0,keysIn/* default */.A)(source), object); -} - -/* harmony default export */ const _baseAssignIn = (baseAssignIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js -var _cloneBuffer = __webpack_require__(80154); -// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js -var _copyArray = __webpack_require__(39759); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js -var _getSymbols = __webpack_require__(14792); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js - - - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return (0,_copyObject/* default */.A)(source, (0,_getSymbols/* default */.A)(source), object); -} - -/* harmony default export */ const _copySymbols = (copySymbols); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js -var _getPrototype = __webpack_require__(15647); -// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js -var stubArray = __webpack_require__(13153); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js - - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.A : function(object) { - var result = []; - while (object) { - (0,_arrayPush/* default */.A)(result, (0,_getSymbols/* default */.A)(object)); - object = (0,_getPrototype/* default */.A)(object); - } - return result; -}; - -/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js - - - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return (0,_copyObject/* default */.A)(source, _getSymbolsIn(source), object); -} - -/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js -var _baseGetAllKeys = __webpack_require__(33831); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js - - - - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return (0,_baseGetAllKeys/* default */.A)(object, keysIn/* default */.A, _getSymbolsIn); -} - -/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/* harmony default export */ const _initCloneArray = (initCloneArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js -var _cloneArrayBuffer = __webpack_require__(90565); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js - - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.A)(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -/* harmony default export */ const _cloneDataView = (cloneDataView); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -/* harmony default export */ const _cloneRegExp = (cloneRegExp); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js - - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -/* harmony default export */ const _cloneSymbol = (cloneSymbol); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js -var _cloneTypedArray = __webpack_require__(1801); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js - - - - - - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return (0,_cloneArrayBuffer/* default */.A)(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return _cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return (0,_cloneTypedArray/* default */.A)(object, isDeep); - - case mapTag: - return new Ctor; - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return _cloneRegExp(object); - - case setTag: - return new Ctor; - - case symbolTag: - return _cloneSymbol(object); - } -} - -/* harmony default export */ const _initCloneByTag = (initCloneByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules -var _initCloneObject = __webpack_require__(18598); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js - - - -/** `Object#toString` result references. */ -var _baseIsMap_mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsMap_mapTag; -} - -/* harmony default export */ const _baseIsMap = (baseIsMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js -var _baseUnary = __webpack_require__(52789); -// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js -var _nodeUtil = __webpack_require__(64841); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js - - - - -/* Node.js helper references. */ -var nodeIsMap = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? (0,_baseUnary/* default */.A)(nodeIsMap) : _baseIsMap; - -/* harmony default export */ const lodash_es_isMap = (isMap); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js - - - -/** `Object#toString` result references. */ -var _baseIsSet_setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return (0,isObjectLike/* default */.A)(value) && (0,_getTag/* default */.A)(value) == _baseIsSet_setTag; -} - -/* harmony default export */ const _baseIsSet = (baseIsSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js - - - - -/* Node.js helper references. */ -var nodeIsSet = _nodeUtil/* default */.A && _nodeUtil/* default */.A.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? (0,_baseUnary/* default */.A)(nodeIsSet) : _baseIsSet; - -/* harmony default export */ const lodash_es_isSet = (isSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js - - - - - - - - - - - - - - - - - - - - - - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - _baseClone_boolTag = '[object Boolean]', - _baseClone_dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - _baseClone_mapTag = '[object Map]', - _baseClone_numberTag = '[object Number]', - objectTag = '[object Object]', - _baseClone_regexpTag = '[object RegExp]', - _baseClone_setTag = '[object Set]', - _baseClone_stringTag = '[object String]', - _baseClone_symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var _baseClone_arrayBufferTag = '[object ArrayBuffer]', - _baseClone_dataViewTag = '[object DataView]', - _baseClone_float32Tag = '[object Float32Array]', - _baseClone_float64Tag = '[object Float64Array]', - _baseClone_int8Tag = '[object Int8Array]', - _baseClone_int16Tag = '[object Int16Array]', - _baseClone_int32Tag = '[object Int32Array]', - _baseClone_uint8Tag = '[object Uint8Array]', - _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', - _baseClone_uint16Tag = '[object Uint16Array]', - _baseClone_uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = -cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = -cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = -cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = -cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = -cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = -cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = -cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = -cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = -cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!(0,isObject/* default */.A)(value)) { - return value; - } - var isArr = (0,isArray/* default */.A)(value); - if (isArr) { - result = _initCloneArray(value); - if (!isDeep) { - return (0,_copyArray/* default */.A)(value, result); - } - } else { - var tag = (0,_getTag/* default */.A)(value), - isFunc = tag == funcTag || tag == genTag; - - if ((0,isBuffer/* default */.A)(value)) { - return (0,_cloneBuffer/* default */.A)(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.A)(value); - if (!isDeep) { - return isFlat - ? _copySymbolsIn(value, _baseAssignIn(result, value)) - : _copySymbols(value, _baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = _initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new _Stack/* default */.A); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (lodash_es_isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (lodash_es_isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } - - var keysFunc = isFull - ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.A) - : (isFlat ? keysIn/* default */.A : keys/* default */.A); - - var props = isArr ? undefined : keysFunc(value); - (0,_arrayEach/* default */.A)(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - (0,_assignValue/* default */.A)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -/* harmony default export */ const _baseClone = (baseClone); - - -/***/ }), - -/***/ 6240: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseEach) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js -var _baseForOwn = __webpack_require__(79841); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js -var isArrayLike = __webpack_require__(38446); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js - - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!(0,isArrayLike/* default */.A)(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -/* harmony default export */ const _createBaseEach = (createBaseEach); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js - - - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = _createBaseEach(_baseForOwn/* default */.A); - -/* harmony default export */ const _baseEach = (baseEach); - - -/***/ }), - -/***/ 25707: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); - - -/***/ }), - -/***/ 13588: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseFlatten) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js -var _arrayPush = __webpack_require__(76912); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules -var isArguments = __webpack_require__(52274); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js - - - - -/** Built-in value references. */ -var spreadableSymbol = _Symbol/* default */.A ? _Symbol/* default */.A.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return (0,isArray/* default */.A)(value) || (0,isArguments/* default */.A)(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -/* harmony default export */ const _isFlattenable = (isFlattenable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js - - - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = _isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - (0,_arrayPush/* default */.A)(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -/* harmony default export */ const _baseFlatten = (baseFlatten); - - -/***/ }), - -/***/ 79841: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4574); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); - - -/***/ }), - -/***/ 66318: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); - - -/***/ }), - -/***/ 33831: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76912); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(result, symbolsFunc(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); - - -/***/ }), - -/***/ 49574: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _baseIteratee) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules -var _Stack = __webpack_require__(11754); -// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules -var _SetCache = __webpack_require__(62062); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -/* harmony default export */ const _arraySome = (arraySome); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js -var _cacheHas = __webpack_require__(64099); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js - - - - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.A : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!_arraySome(other, function(othValue, othIndex) { - if (!(0,_cacheHas/* default */.A)(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalArrays = (equalArrays); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js -var _Uint8Array = __webpack_require__(43988); -// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js -var eq = __webpack_require__(66984); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -/* harmony default export */ const _mapToArray = (mapToArray); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js -var _setToArray = __webpack_require__(29959); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _equalByTag_COMPARE_PARTIAL_FLAG = 1, - _equalByTag_COMPARE_UNORDERED_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new _Uint8Array/* default */.A(object), new _Uint8Array/* default */.A(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return (0,eq/* default */.A)(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = _mapToArray; - - case setTag: - var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; - convert || (convert = _setToArray/* default */.A); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -/* harmony default export */ const _equalByTag = (equalByTag); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js -var _getAllKeys = __webpack_require__(19042); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js - - -/** Used to compose bitmasks for value comparisons. */ -var _equalObjects_COMPARE_PARTIAL_FLAG = 1; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, - objProps = (0,_getAllKeys/* default */.A)(object), - objLength = objProps.length, - othProps = (0,_getAllKeys/* default */.A)(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -/* harmony default export */ const _equalObjects = (equalObjects); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules -var _getTag = __webpack_require__(9779); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules -var isBuffer = __webpack_require__(99912); -// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules -var isTypedArray = __webpack_require__(33858); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js - - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var _baseIsEqualDeep_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = (0,isArray/* default */.A)(object), - othIsArr = (0,isArray/* default */.A)(other), - objTag = objIsArr ? arrayTag : (0,_getTag/* default */.A)(object), - othTag = othIsArr ? arrayTag : (0,_getTag/* default */.A)(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && (0,isBuffer/* default */.A)(object)) { - if (!(0,isBuffer/* default */.A)(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new _Stack/* default */.A); - return (objIsArr || (0,isTypedArray/* default */.A)(object)) - ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new _Stack/* default */.A); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new _Stack/* default */.A); - return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js -var isObjectLike = __webpack_require__(53098); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js - - - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!(0,isObjectLike/* default */.A)(value) && !(0,isObjectLike/* default */.A)(other))) { - return value !== value && other !== other; - } - return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -/* harmony default export */ const _baseIsEqual = (baseIsEqual); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, - _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new _Stack/* default */.A; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -/* harmony default export */ const _baseIsMatch = (baseIsMatch); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js - - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !(0,isObject/* default */.A)(value); -} - -/* harmony default export */ const _isStrictComparable = (isStrictComparable); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js - - - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = (0,keys/* default */.A)(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, _isStrictComparable(value)]; - } - return result; -} - -/* harmony default export */ const _getMatchData = (getMatchData); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js - - - - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = _getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return _matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || _baseIsMatch(object, source, matchData); - }; -} - -/* harmony default export */ const _baseMatches = (baseMatches); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js - - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : (0,_baseGet/* default */.A)(object, path); - return result === undefined ? defaultValue : result; -} - -/* harmony default export */ const lodash_es_get = (get); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js - - - - - - - - -/** Used to compose bitmasks for value comparisons. */ -var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, - _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if ((0,_isKey/* default */.A)(path) && _isStrictComparable(srcValue)) { - return _matchesStrictComparable((0,_toKey/* default */.A)(path), srcValue); - } - return function(object) { - var objValue = lodash_es_get(object, path); - return (objValue === undefined && objValue === srcValue) - ? (0,hasIn/* default */.A)(object, path) - : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); - }; -} - -/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); - -// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js -var identity = __webpack_require__(29008); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js -var _baseProperty = __webpack_require__(70805); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js - - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return (0,_baseGet/* default */.A)(object, path); - }; -} - -/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js - - - - - -/** - * Creates a function that returns the value at `path` of a given object. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - * @example - * - * var objects = [ - * { 'a': { 'b': 2 } }, - * { 'a': { 'b': 1 } } - * ]; - * - * _.map(objects, _.property('a.b')); - * // => [2, 1] - * - * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); - * // => [1, 2] - */ -function property(path) { - return (0,_isKey/* default */.A)(path) ? (0,_baseProperty/* default */.A)((0,_toKey/* default */.A)(path)) : _basePropertyDeep(path); -} - -/* harmony default export */ const lodash_es_property = (property); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js - - - - - - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity/* default */.A; - } - if (typeof value == 'object') { - return (0,isArray/* default */.A)(value) - ? _baseMatchesProperty(value[0], value[1]) - : _baseMatches(value); - } - return lodash_es_property(value); -} - -/* harmony default export */ const _baseIteratee = (baseIteratee); - - -/***/ }), - -/***/ 52568: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6240); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? Array(collection.length) : []; - - (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); - - -/***/ }), - -/***/ 70805: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); - - -/***/ }), - -/***/ 64099: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); - - -/***/ }), - -/***/ 99922: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29008); - - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); - - -/***/ }), - -/***/ 7819: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ _castPath) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js -var _isKey = __webpack_require__(86586); -// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js -var memoize = __webpack_require__(46632); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js - - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = (0,memoize/* default */.A)(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -/* harmony default export */ const _memoizeCapped = (memoizeCapped); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js - - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = _memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/* harmony default export */ const _stringToPath = (stringToPath); - -// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules -var lodash_es_toString = __webpack_require__(28894); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js - - - - - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if ((0,isArray/* default */.A)(value)) { - return value; - } - return (0,_isKey/* default */.A)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.A)(value)); -} - -/* harmony default export */ const _castPath = (castPath); - - -/***/ }), - -/***/ 19042: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33831); -/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14792); -/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27422); - - - - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); - - -/***/ }), - -/***/ 14792: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2634); -/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13153); - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); - - -/***/ }), - -/***/ 85054: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); -/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52274); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92049); -/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25353); -/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5254); -/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30901); - - - - - - - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(key, length) && - ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); - - -/***/ }), - -/***/ 86586: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61882); - - - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); - - -/***/ }), - -/***/ 29959: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); - - -/***/ }), - -/***/ 30901: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61882); - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); - - -/***/ }), - -/***/ 23068: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24326); -/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66984); -/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832); -/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55615); - - - - - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); - - -/***/ }), - -/***/ 11662: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_filter) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js -var _arrayFilter = __webpack_require__(2634); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js - - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - (0,_baseEach/* default */.A)(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -/* harmony default export */ const _baseFilter = (baseFilter); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js - - - - - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ -function filter(collection, predicate) { - var func = (0,isArray/* default */.A)(collection) ? _arrayFilter/* default */.A : _baseFilter; - return func(collection, (0,_baseIteratee/* default */.A)(predicate, 3)); -} - -/* harmony default export */ const lodash_es_filter = (filter); - - -/***/ }), - -/***/ 34098: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13588); - - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(array, 1) : []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); - - -/***/ }), - -/***/ 8058: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72641); -/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6240); -/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99922); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); - - -/***/ }), - -/***/ 48585: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_has) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && _baseHas_hasOwnProperty.call(object, key); -} - -/* harmony default export */ const _baseHas = (baseHas); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js - - - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHas); -} - -/* harmony default export */ const lodash_es_has = (has); - - -/***/ }), - -/***/ 39188: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_hasIn) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -/* harmony default export */ const _baseHasIn = (baseHasIn); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js -var _hasPath = __webpack_require__(85054); -;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js - - - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && (0,_hasPath/* default */.A)(object, path, _baseHasIn); -} - -/* harmony default export */ const lodash_es_hasIn = (hasIn); - - -/***/ }), - -/***/ 61882: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88496); -/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53098); - - - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(value) == symbolTag); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); - - -/***/ }), - -/***/ 69592: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); - - -/***/ }), - -/***/ 27422: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83607); -/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69471); -/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38446); - - - - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(object); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); - - -/***/ }), - -/***/ 74722: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45572); -/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49574); -/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52568); -/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92049); - - - - - -/** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ -function map(collection, iteratee) { - var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A; - return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(iteratee, 3)); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); - - -/***/ }), - -/***/ 81942: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_pick) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js -var _baseGet = __webpack_require__(66318); -// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js -var _assignValue = __webpack_require__(52851); -// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules -var _castPath = __webpack_require__(7819); -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js -var _isIndex = __webpack_require__(25353); -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js -var _toKey = __webpack_require__(30901); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js - - - - - - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!(0,isObject/* default */.A)(object)) { - return object; - } - path = (0,_castPath/* default */.A)(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = (0,_toKey/* default */.A)(path[index]), - newValue = value; - - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = (0,isObject/* default */.A)(objValue) - ? objValue - : ((0,_isIndex/* default */.A)(path[index + 1]) ? [] : {}); - } - } - (0,_assignValue/* default */.A)(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -/* harmony default export */ const _baseSet = (baseSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js - - - - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = (0,_baseGet/* default */.A)(object, path); - - if (predicate(value, path)) { - _baseSet(result, (0,_castPath/* default */.A)(path, object), value); - } - } - return result; -} - -/* harmony default export */ const _basePickBy = (basePickBy); - -// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules -var hasIn = __webpack_require__(39188); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js - - - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, paths) { - return _basePickBy(object, paths, function(value, path) { - return (0,hasIn/* default */.A)(object, path); - }); -} - -/* harmony default export */ const _basePick = (basePick); - -// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js -var flatten = __webpack_require__(34098); -// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules -var _overRest = __webpack_require__(76875); -// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules -var _setToString = __webpack_require__(67525); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js - - - - -/** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -function flatRest(func) { - return (0,_setToString/* default */.A)((0,_overRest/* default */.A)(func, undefined, flatten/* default */.A), func + ''); -} - -/* harmony default export */ const _flatRest = (flatRest); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js - - - -/** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ -var pick = _flatRest(function(object, paths) { - return object == null ? {} : _basePick(object, paths); -}); - -/* harmony default export */ const lodash_es_pick = (pick); - - -/***/ }), - -/***/ 91395: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_range) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -/* harmony default export */ const _baseRange = (baseRange); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js -var _isIterateeCall = __webpack_require__(6832); -// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules -var toFinite = __webpack_require__(74342); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js - - - - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.A)(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = (0,toFinite/* default */.A)(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = (0,toFinite/* default */.A)(end); - } - step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.A)(step); - return _baseRange(start, end, step, fromRight); - }; -} - -/* harmony default export */ const _createRange = (createRange); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js - - -/** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ -var range = _createRange(); - -/* harmony default export */ const lodash_es_range = (range); - - -/***/ }), - -/***/ 89463: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_reduce) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -/* harmony default export */ const _arrayReduce = (arrayReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules -var _baseEach = __webpack_require__(6240); -// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules -var _baseIteratee = __webpack_require__(49574); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -/* harmony default export */ const _baseReduce = (baseReduce); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js - - - - - - -/** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ -function reduce(collection, iteratee, accumulator) { - var func = (0,isArray/* default */.A)(collection) ? _arrayReduce : _baseReduce, - initAccum = arguments.length < 3; - - return func(collection, (0,_baseIteratee/* default */.A)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.A); -} - -/* harmony default export */ const lodash_es_reduce = (reduce); - - -/***/ }), - -/***/ 13153: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ -function stubArray() { - return []; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); - - -/***/ }), - -/***/ 74342: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toFinite) -}); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js - - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/* harmony default export */ const _baseTrim = (baseTrim); - -// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js -var isObject = __webpack_require__(23149); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js - - - - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if ((0,isSymbol/* default */.A)(value)) { - return NAN; - } - if ((0,isObject/* default */.A)(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = (0,isObject/* default */.A)(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = _baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/* harmony default export */ const lodash_es_toNumber = (toNumber); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = lodash_es_toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/* harmony default export */ const lodash_es_toFinite = (toFinite); - - -/***/ }), - -/***/ 28894: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_toString) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js -var _Symbol = __webpack_require__(241); -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js -var isArray = __webpack_require__(92049); -// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js -var isSymbol = __webpack_require__(61882); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js - - - - - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol/* default */.A ? _Symbol/* default */.A.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if ((0,isArray/* default */.A)(value)) { - // Recursively convert values (susceptible to call stack limits). - return (0,_arrayMap/* default */.A)(value, baseToString) + ''; - } - if ((0,isSymbol/* default */.A)(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/* harmony default export */ const _baseToString = (baseToString); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js - - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString_toString(value) { - return value == null ? '' : _baseToString(value); -} - -/* harmony default export */ const lodash_es_toString = (toString_toString); - - -/***/ }), - -/***/ 5664: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28894); - - -/** Used to generate unique IDs. */ -var idCounter = 0; - -/** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ -function uniqueId(prefix) { - var id = ++idCounter; - return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(prefix) + id; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); - - -/***/ }), - -/***/ 38207: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ lodash_es_values) -}); - -// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js -var _arrayMap = __webpack_require__(45572); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js - - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return (0,_arrayMap/* default */.A)(props, function(key) { - return object[key]; - }); -} - -/* harmony default export */ const _baseValues = (baseValues); - -// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js -var keys = __webpack_require__(27422); -;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js - - - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values(object) { - return object == null ? [] : _baseValues(object, (0,keys/* default */.A)(object)); -} - -/* harmony default export */ const lodash_es_values = (values); - - -/***/ }), - -/***/ 26902: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - diagram: () => (/* binding */ diagram) -}); - -// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules -var mermaid_6dc72991 = __webpack_require__(99702); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js -var graphlib = __webpack_require__(697); -// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 197 modules -var src = __webpack_require__(26312); -// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + 64 modules -var dagre = __webpack_require__(21176); -;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js - -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ - -const byteToHex = []; - -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).slice(1)); -} - -function unsafeStringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; -} - -function stringify(arr, offset = 0) { - const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields - - if (!validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - - return uuid; -} - -/* harmony default export */ const esm_node_stringify = ((/* unused pure expression or super */ null && (stringify))); -;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js - - -function validate_validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); -} - -/* harmony default export */ const esm_node_validate = (validate_validate); -;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js - - -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) - - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; -} - -/* harmony default export */ const esm_node_parse = (parse); -;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js - - - -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - - const bytes = []; - - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } - - return bytes; -} - -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - var _namespace; - - if (typeof value === 'string') { - value = stringToBytes(value); - } - - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - - if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` - - - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; - - if (buf) { - offset = offset || 0; - - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } - - return buf; - } - - return unsafeStringify(bytes); - } // Function#name is not settable on some platforms (#270) - - - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support - - - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; -} -// EXTERNAL MODULE: external "crypto" -var external_crypto_ = __webpack_require__(76982); -var external_crypto_default = /*#__PURE__*/__webpack_require__.n(external_crypto_); -;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - - -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} - -/* harmony default export */ const esm_node_sha1 = (sha1); -;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js - - -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js -var dayjs_min = __webpack_require__(74353); -// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js -var dist = __webpack_require__(16750); -// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.mjs -var purify_es = __webpack_require__(99418); -;// CONCATENATED MODULE: ./node_modules/mermaid/dist/erDiagram-09d1c15f.js - - - - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [6, 8, 10, 20, 22, 24, 26, 27, 28], $V1 = [1, 10], $V2 = [1, 11], $V3 = [1, 12], $V4 = [1, 13], $V5 = [1, 14], $V6 = [1, 15], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 24], $Vb = [1, 25], $Vc = [6, 8, 10, 13, 15, 18, 19, 20, 22, 24, 26, 27, 28, 41, 42, 43, 44, 45], $Vd = [1, 34], $Ve = [27, 28, 46, 47], $Vf = [41, 42, 43, 44, 45], $Vg = [17, 34], $Vh = [1, 54], $Vi = [1, 53], $Vj = [17, 34, 36, 38]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "ER_DIAGRAM": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "entityName": 11, "relSpec": 12, ":": 13, "role": 14, "BLOCK_START": 15, "attributes": 16, "BLOCK_STOP": 17, "SQS": 18, "SQE": 19, "title": 20, "title_value": 21, "acc_title": 22, "acc_title_value": 23, "acc_descr": 24, "acc_descr_value": 25, "acc_descr_multiline_value": 26, "ALPHANUM": 27, "ENTITY_NAME": 28, "attribute": 29, "attributeType": 30, "attributeName": 31, "attributeKeyTypeList": 32, "attributeComment": 33, "ATTRIBUTE_WORD": 34, "attributeKeyType": 35, "COMMA": 36, "ATTRIBUTE_KEY": 37, "COMMENT": 38, "cardinality": 39, "relType": 40, "ZERO_OR_ONE": 41, "ZERO_OR_MORE": 42, "ONE_OR_MORE": 43, "ONLY_ONE": 44, "MD_PARENT": 45, "NON_IDENTIFYING": 46, "IDENTIFYING": 47, "WORD": 48, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 4: "ER_DIAGRAM", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 13: ":", 15: "BLOCK_START", 17: "BLOCK_STOP", 18: "SQS", 19: "SQE", 20: "title", 21: "title_value", 22: "acc_title", 23: "acc_title_value", 24: "acc_descr", 25: "acc_descr_value", 26: "acc_descr_multiline_value", 27: "ALPHANUM", 28: "ENTITY_NAME", 34: "ATTRIBUTE_WORD", 36: "COMMA", 37: "ATTRIBUTE_KEY", 38: "COMMENT", 41: "ZERO_OR_ONE", 42: "ZERO_OR_MORE", 43: "ONE_OR_MORE", 44: "ONLY_ONE", 45: "MD_PARENT", 46: "NON_IDENTIFYING", 47: "IDENTIFYING", 48: "WORD" }, - productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 5], [9, 4], [9, 3], [9, 1], [9, 7], [9, 6], [9, 4], [9, 2], [9, 2], [9, 2], [9, 1], [11, 1], [11, 1], [16, 1], [16, 2], [29, 2], [29, 3], [29, 3], [29, 4], [30, 1], [31, 1], [32, 1], [32, 3], [35, 1], [33, 1], [12, 3], [39, 1], [39, 1], [39, 1], [39, 1], [39, 1], [40, 1], [40, 1], [14, 1], [14, 1], [14, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 1: - break; - case 2: - this.$ = []; - break; - case 3: - $$[$0 - 1].push($$[$0]); - this.$ = $$[$0 - 1]; - break; - case 4: - case 5: - this.$ = $$[$0]; - break; - case 6: - case 7: - this.$ = []; - break; - case 8: - yy.addEntity($$[$0 - 4]); - yy.addEntity($$[$0 - 2]); - yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]); - break; - case 9: - yy.addEntity($$[$0 - 3]); - yy.addAttributes($$[$0 - 3], $$[$0 - 1]); - break; - case 10: - yy.addEntity($$[$0 - 2]); - break; - case 11: - yy.addEntity($$[$0]); - break; - case 12: - yy.addEntity($$[$0 - 6], $$[$0 - 4]); - yy.addAttributes($$[$0 - 6], $$[$0 - 1]); - break; - case 13: - yy.addEntity($$[$0 - 5], $$[$0 - 3]); - break; - case 14: - yy.addEntity($$[$0 - 3], $$[$0 - 1]); - break; - case 15: - case 16: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 17: - case 18: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 19: - case 43: - this.$ = $$[$0]; - break; - case 20: - case 41: - case 42: - this.$ = $$[$0].replace(/"/g, ""); - break; - case 21: - case 29: - this.$ = [$$[$0]]; - break; - case 22: - $$[$0].push($$[$0 - 1]); - this.$ = $$[$0]; - break; - case 23: - this.$ = { attributeType: $$[$0 - 1], attributeName: $$[$0] }; - break; - case 24: - this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeKeyTypeList: $$[$0] }; - break; - case 25: - this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeComment: $$[$0] }; - break; - case 26: - this.$ = { attributeType: $$[$0 - 3], attributeName: $$[$0 - 2], attributeKeyTypeList: $$[$0 - 1], attributeComment: $$[$0] }; - break; - case 27: - case 28: - case 31: - this.$ = $$[$0]; - break; - case 30: - $$[$0 - 2].push($$[$0]); - this.$ = $$[$0 - 2]; - break; - case 32: - this.$ = $$[$0].replace(/"/g, ""); - break; - case 33: - this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] }; - break; - case 34: - this.$ = yy.Cardinality.ZERO_OR_ONE; - break; - case 35: - this.$ = yy.Cardinality.ZERO_OR_MORE; - break; - case 36: - this.$ = yy.Cardinality.ONE_OR_MORE; - break; - case 37: - this.$ = yy.Cardinality.ONLY_ONE; - break; - case 38: - this.$ = yy.Cardinality.MD_PARENT; - break; - case 39: - this.$ = yy.Identification.NON_IDENTIFYING; - break; - case 40: - this.$ = yy.Identification.IDENTIFYING; - break; - } - }, - table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: 9, 20: $V1, 22: $V2, 24: $V3, 26: $V4, 27: $V5, 28: $V6 }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 16, 11: 9, 20: $V1, 22: $V2, 24: $V3, 26: $V4, 27: $V5, 28: $V6 }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 11], { 12: 17, 39: 20, 15: [1, 18], 18: [1, 19], 41: $V7, 42: $V8, 43: $V9, 44: $Va, 45: $Vb }), { 21: [1, 26] }, { 23: [1, 27] }, { 25: [1, 28] }, o($V0, [2, 18]), o($Vc, [2, 19]), o($Vc, [2, 20]), o($V0, [2, 4]), { 11: 29, 27: $V5, 28: $V6 }, { 16: 30, 17: [1, 31], 29: 32, 30: 33, 34: $Vd }, { 11: 35, 27: $V5, 28: $V6 }, { 40: 36, 46: [1, 37], 47: [1, 38] }, o($Ve, [2, 34]), o($Ve, [2, 35]), o($Ve, [2, 36]), o($Ve, [2, 37]), o($Ve, [2, 38]), o($V0, [2, 15]), o($V0, [2, 16]), o($V0, [2, 17]), { 13: [1, 39] }, { 17: [1, 40] }, o($V0, [2, 10]), { 16: 41, 17: [2, 21], 29: 32, 30: 33, 34: $Vd }, { 31: 42, 34: [1, 43] }, { 34: [2, 27] }, { 19: [1, 44] }, { 39: 45, 41: $V7, 42: $V8, 43: $V9, 44: $Va, 45: $Vb }, o($Vf, [2, 39]), o($Vf, [2, 40]), { 14: 46, 27: [1, 49], 28: [1, 48], 48: [1, 47] }, o($V0, [2, 9]), { 17: [2, 22] }, o($Vg, [2, 23], { 32: 50, 33: 51, 35: 52, 37: $Vh, 38: $Vi }), o([17, 34, 37, 38], [2, 28]), o($V0, [2, 14], { 15: [1, 55] }), o([27, 28], [2, 33]), o($V0, [2, 8]), o($V0, [2, 41]), o($V0, [2, 42]), o($V0, [2, 43]), o($Vg, [2, 24], { 33: 56, 36: [1, 57], 38: $Vi }), o($Vg, [2, 25]), o($Vj, [2, 29]), o($Vg, [2, 32]), o($Vj, [2, 31]), { 16: 58, 17: [1, 59], 29: 32, 30: 33, 34: $Vd }, o($Vg, [2, 26]), { 35: 60, 37: $Vh }, { 17: [1, 61] }, o($V0, [2, 13]), o($Vj, [2, 30]), o($V0, [2, 12])], - defaultActions: { 34: [2, 27], 41: [2, 22] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - this.begin("acc_title"); - return 22; - case 1: - this.popState(); - return "acc_title_value"; - case 2: - this.begin("acc_descr"); - return 24; - case 3: - this.popState(); - return "acc_descr_value"; - case 4: - this.begin("acc_descr_multiline"); - break; - case 5: - this.popState(); - break; - case 6: - return "acc_descr_multiline_value"; - case 7: - return 10; - case 8: - break; - case 9: - return 8; - case 10: - return 28; - case 11: - return 48; - case 12: - return 4; - case 13: - this.begin("block"); - return 15; - case 14: - return 36; - case 15: - break; - case 16: - return 37; - case 17: - return 34; - case 18: - return 34; - case 19: - return 38; - case 20: - break; - case 21: - this.popState(); - return 17; - case 22: - return yy_.yytext[0]; - case 23: - return 18; - case 24: - return 19; - case 25: - return 41; - case 26: - return 43; - case 27: - return 43; - case 28: - return 43; - case 29: - return 41; - case 30: - return 41; - case 31: - return 42; - case 32: - return 42; - case 33: - return 42; - case 34: - return 42; - case 35: - return 42; - case 36: - return 43; - case 37: - return 42; - case 38: - return 43; - case 39: - return 44; - case 40: - return 44; - case 41: - return 44; - case 42: - return 44; - case 43: - return 41; - case 44: - return 42; - case 45: - return 43; - case 46: - return 45; - case 47: - return 46; - case 48: - return 47; - case 49: - return 47; - case 50: - return 46; - case 51: - return 46; - case 52: - return 46; - case 53: - return 27; - case 54: - return yy_.yytext[0]; - case 55: - return 6; - } - }, - rules: [/^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:[\s]+)/i, /^(?:"[^"%\r\n\v\b\\]+")/i, /^(?:"[^"]*")/i, /^(?:erDiagram\b)/i, /^(?:\{)/i, /^(?:,)/i, /^(?:\s+)/i, /^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i, /^(?:(.*?)[~](.*?)*[~])/i, /^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i, /^(?:"[^"]*")/i, /^(?:[\n]+)/i, /^(?:\})/i, /^(?:.)/i, /^(?:\[)/i, /^(?:\])/i, /^(?:one or zero\b)/i, /^(?:one or more\b)/i, /^(?:one or many\b)/i, /^(?:1\+)/i, /^(?:\|o\b)/i, /^(?:zero or one\b)/i, /^(?:zero or more\b)/i, /^(?:zero or many\b)/i, /^(?:0\+)/i, /^(?:\}o\b)/i, /^(?:many\(0\))/i, /^(?:many\(1\))/i, /^(?:many\b)/i, /^(?:\}\|)/i, /^(?:one\b)/i, /^(?:only one\b)/i, /^(?:1\b)/i, /^(?:\|\|)/i, /^(?:o\|)/i, /^(?:o\{)/i, /^(?:\|\{)/i, /^(?:\s*u\b)/i, /^(?:\.\.)/i, /^(?:--)/i, /^(?:to\b)/i, /^(?:optionally to\b)/i, /^(?:\.-)/i, /^(?:-\.)/i, /^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i, /^(?:.)/i, /^(?:$)/i], - conditions: { "acc_descr_multiline": { "rules": [5, 6], "inclusive": false }, "acc_descr": { "rules": [3], "inclusive": false }, "acc_title": { "rules": [1], "inclusive": false }, "block": { "rules": [14, 15, 16, 17, 18, 19, 20, 21, 22], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 8, 9, 10, 11, 12, 13, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const erParser = parser; -let entities = {}; -let relationships = []; -const Cardinality = { - ZERO_OR_ONE: "ZERO_OR_ONE", - ZERO_OR_MORE: "ZERO_OR_MORE", - ONE_OR_MORE: "ONE_OR_MORE", - ONLY_ONE: "ONLY_ONE", - MD_PARENT: "MD_PARENT" -}; -const Identification = { - NON_IDENTIFYING: "NON_IDENTIFYING", - IDENTIFYING: "IDENTIFYING" -}; -const addEntity = function(name, alias = void 0) { - if (entities[name] === void 0) { - entities[name] = { attributes: [], alias }; - mermaid_6dc72991.l.info("Added new entity :", name); - } else if (entities[name] && !entities[name].alias && alias) { - entities[name].alias = alias; - mermaid_6dc72991.l.info(`Add alias '${alias}' to entity '${name}'`); - } - return entities[name]; -}; -const getEntities = () => entities; -const addAttributes = function(entityName, attribs) { - let entity = addEntity(entityName); - let i; - for (i = attribs.length - 1; i >= 0; i--) { - entity.attributes.push(attribs[i]); - mermaid_6dc72991.l.debug("Added attribute ", attribs[i].attributeName); - } -}; -const addRelationship = function(entA, rolA, entB, rSpec) { - let rel = { - entityA: entA, - roleA: rolA, - entityB: entB, - relSpec: rSpec - }; - relationships.push(rel); - mermaid_6dc72991.l.debug("Added new relationship :", rel); -}; -const getRelationships = () => relationships; -const clear = function() { - entities = {}; - relationships = []; - (0,mermaid_6dc72991.v)(); -}; -const erDb = { - Cardinality, - Identification, - getConfig: () => (0,mermaid_6dc72991.c)().er, - addEntity, - addAttributes, - getEntities, - addRelationship, - getRelationships, - clear, - setAccTitle: mermaid_6dc72991.s, - getAccTitle: mermaid_6dc72991.g, - setAccDescription: mermaid_6dc72991.b, - getAccDescription: mermaid_6dc72991.a, - setDiagramTitle: mermaid_6dc72991.q, - getDiagramTitle: mermaid_6dc72991.t -}; -const ERMarkers = { - ONLY_ONE_START: "ONLY_ONE_START", - ONLY_ONE_END: "ONLY_ONE_END", - ZERO_OR_ONE_START: "ZERO_OR_ONE_START", - ZERO_OR_ONE_END: "ZERO_OR_ONE_END", - ONE_OR_MORE_START: "ONE_OR_MORE_START", - ONE_OR_MORE_END: "ONE_OR_MORE_END", - ZERO_OR_MORE_START: "ZERO_OR_MORE_START", - ZERO_OR_MORE_END: "ZERO_OR_MORE_END", - MD_PARENT_END: "MD_PARENT_END", - MD_PARENT_START: "MD_PARENT_START" -}; -const insertMarkers = function(elem, conf2) { - let marker; - elem.append("defs").append("marker").attr("id", ERMarkers.MD_PARENT_START).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", ERMarkers.MD_PARENT_END).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); - elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M9,0 L9,18 M15,0 L15,18"); - elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_END).attr("refX", 18).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M3,0 L3,18 M9,0 L9,18"); - marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto"); - marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 21).attr("cy", 9).attr("r", 6); - marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M9,0 L9,18"); - marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_END).attr("refX", 30).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto"); - marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 9).attr("r", 6); - marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M21,0 L21,18"); - elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"); - elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_END).attr("refX", 27).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"); - marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto"); - marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 48).attr("cy", 18).attr("r", 6); - marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M0,18 Q18,0 36,18 Q18,36 0,18"); - marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_END).attr("refX", 39).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto"); - marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 18).attr("r", 6); - marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M21,18 Q39,0 57,18 Q39,36 21,18"); - return; -}; -const erMarkers = { - ERMarkers, - insertMarkers -}; -const BAD_ID_CHARS_REGEXP = /[^\dA-Za-z](\W)*/g; -let conf = {}; -let entityNameIds = /* @__PURE__ */ new Map(); -const setConf = function(cnf) { - const keys = Object.keys(cnf); - for (const key of keys) { - conf[key] = cnf[key]; - } -}; -const drawAttributes = (groupNode, entityTextNode, attributes) => { - const heightPadding = conf.entityPadding / 3; - const widthPadding = conf.entityPadding / 3; - const attrFontSize = conf.fontSize * 0.85; - const labelBBox = entityTextNode.node().getBBox(); - const attributeNodes = []; - let hasKeyType = false; - let hasComment = false; - let maxTypeWidth = 0; - let maxNameWidth = 0; - let maxKeyWidth = 0; - let maxCommentWidth = 0; - let cumulativeHeight = labelBBox.height + heightPadding * 2; - let attrNum = 1; - attributes.forEach((item) => { - if (item.attributeKeyTypeList !== void 0 && item.attributeKeyTypeList.length > 0) { - hasKeyType = true; - } - if (item.attributeComment !== void 0) { - hasComment = true; - } - }); - attributes.forEach((item) => { - const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`; - let nodeHeight = 0; - const attributeType = (0,mermaid_6dc72991.x)(item.attributeType); - const typeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-type`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_6dc72991.c)().fontFamily).style("font-size", attrFontSize + "px").text(attributeType); - const nameNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-name`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_6dc72991.c)().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeName); - const attributeNode = {}; - attributeNode.tn = typeNode; - attributeNode.nn = nameNode; - const typeBBox = typeNode.node().getBBox(); - const nameBBox = nameNode.node().getBBox(); - maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width); - maxNameWidth = Math.max(maxNameWidth, nameBBox.width); - nodeHeight = Math.max(typeBBox.height, nameBBox.height); - if (hasKeyType) { - const keyTypeNodeText = item.attributeKeyTypeList !== void 0 ? item.attributeKeyTypeList.join(",") : ""; - const keyTypeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-key`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_6dc72991.c)().fontFamily).style("font-size", attrFontSize + "px").text(keyTypeNodeText); - attributeNode.kn = keyTypeNode; - const keyTypeBBox = keyTypeNode.node().getBBox(); - maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width); - nodeHeight = Math.max(nodeHeight, keyTypeBBox.height); - } - if (hasComment) { - const commentNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-comment`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_6dc72991.c)().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeComment || ""); - attributeNode.cn = commentNode; - const commentNodeBBox = commentNode.node().getBBox(); - maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width); - nodeHeight = Math.max(nodeHeight, commentNodeBBox.height); - } - attributeNode.height = nodeHeight; - attributeNodes.push(attributeNode); - cumulativeHeight += nodeHeight + heightPadding * 2; - attrNum += 1; - }); - let widthPaddingFactor = 4; - if (hasKeyType) { - widthPaddingFactor += 2; - } - if (hasComment) { - widthPaddingFactor += 2; - } - const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth; - const bBox = { - width: Math.max( - conf.minEntityWidth, - Math.max( - labelBBox.width + conf.entityPadding * 2, - maxWidth + widthPadding * widthPaddingFactor - ) - ), - height: attributes.length > 0 ? cumulativeHeight : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2) - }; - if (attributes.length > 0) { - const spareColumnWidth = Math.max( - 0, - (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2) - ); - entityTextNode.attr( - "transform", - "translate(" + bBox.width / 2 + "," + (heightPadding + labelBBox.height / 2) + ")" - ); - let heightOffset = labelBBox.height + heightPadding * 2; - let attribStyle = "attributeBoxOdd"; - attributeNodes.forEach((attributeNode) => { - const alignY = heightOffset + heightPadding + attributeNode.height / 2; - attributeNode.tn.attr("transform", "translate(" + widthPadding + "," + alignY + ")"); - const typeRect = groupNode.insert("rect", "#" + attributeNode.tn.node().id).classed(`er ${attribStyle}`, true).attr("x", 0).attr("y", heightOffset).attr("width", maxTypeWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); - const nameXOffset = parseFloat(typeRect.attr("x")) + parseFloat(typeRect.attr("width")); - attributeNode.nn.attr( - "transform", - "translate(" + (nameXOffset + widthPadding) + "," + alignY + ")" - ); - const nameRect = groupNode.insert("rect", "#" + attributeNode.nn.node().id).classed(`er ${attribStyle}`, true).attr("x", nameXOffset).attr("y", heightOffset).attr("width", maxNameWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); - let keyTypeAndCommentXOffset = parseFloat(nameRect.attr("x")) + parseFloat(nameRect.attr("width")); - if (hasKeyType) { - attributeNode.kn.attr( - "transform", - "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")" - ); - const keyTypeRect = groupNode.insert("rect", "#" + attributeNode.kn.node().id).classed(`er ${attribStyle}`, true).attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxKeyWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); - keyTypeAndCommentXOffset = parseFloat(keyTypeRect.attr("x")) + parseFloat(keyTypeRect.attr("width")); - } - if (hasComment) { - attributeNode.cn.attr( - "transform", - "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")" - ); - groupNode.insert("rect", "#" + attributeNode.cn.node().id).classed(`er ${attribStyle}`, "true").attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxCommentWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); - } - heightOffset += attributeNode.height + heightPadding * 2; - attribStyle = attribStyle === "attributeBoxOdd" ? "attributeBoxEven" : "attributeBoxOdd"; - }); - } else { - bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight); - entityTextNode.attr("transform", "translate(" + bBox.width / 2 + "," + bBox.height / 2 + ")"); - } - return bBox; -}; -const drawEntities = function(svgNode, entities2, graph) { - const keys = Object.keys(entities2); - let firstOne; - keys.forEach(function(entityName) { - const entityId = generateId(entityName, "entity"); - entityNameIds.set(entityName, entityId); - const groupNode = svgNode.append("g").attr("id", entityId); - firstOne = firstOne === void 0 ? entityId : firstOne; - const textId = "text-" + entityId; - const textNode = groupNode.append("text").classed("er entityLabel", true).attr("id", textId).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "middle").style("font-family", (0,mermaid_6dc72991.c)().fontFamily).style("font-size", conf.fontSize + "px").text(entities2[entityName].alias ?? entityName); - const { width: entityWidth, height: entityHeight } = drawAttributes( - groupNode, - textNode, - entities2[entityName].attributes - ); - const rectNode = groupNode.insert("rect", "#" + textId).classed("er entityBox", true).attr("x", 0).attr("y", 0).attr("width", entityWidth).attr("height", entityHeight); - const rectBBox = rectNode.node().getBBox(); - graph.setNode(entityId, { - width: rectBBox.width, - height: rectBBox.height, - shape: "rect", - id: entityId - }); - }); - return firstOne; -}; -const adjustEntities = function(svgNode, graph) { - graph.nodes().forEach(function(v) { - if (v !== void 0 && graph.node(v) !== void 0) { - svgNode.select("#" + v).attr( - "transform", - "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y - graph.node(v).height / 2) + " )" - ); - } - }); -}; -const getEdgeName = function(rel) { - return (rel.entityA + rel.roleA + rel.entityB).replace(/\s/g, ""); -}; -const addRelationships = function(relationships2, g) { - relationships2.forEach(function(r) { - g.setEdge( - entityNameIds.get(r.entityA), - entityNameIds.get(r.entityB), - { relationship: r }, - getEdgeName(r) - ); - }); - return relationships2; -}; -let relCnt = 0; -const drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) { - relCnt++; - const edge = g.edge( - entityNameIds.get(rel.entityA), - entityNameIds.get(rel.entityB), - getEdgeName(rel) - ); - const lineFunction = (0,src/* line */.n8j)().x(function(d) { - return d.x; - }).y(function(d) { - return d.y; - }).curve(src/* curveBasis */.qrM); - const svgPath = svg.insert("path", "#" + insert).classed("er relationshipLine", true).attr("d", lineFunction(edge.points)).style("stroke", conf.stroke).style("fill", "none"); - if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) { - svgPath.attr("stroke-dasharray", "8,8"); - } - let url = ""; - if (conf.arrowMarkerAbsolute) { - url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; - url = url.replace(/\(/g, "\\("); - url = url.replace(/\)/g, "\\)"); - } - switch (rel.relSpec.cardA) { - case diagObj.db.Cardinality.ZERO_OR_ONE: - svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_ONE_END + ")"); - break; - case diagObj.db.Cardinality.ZERO_OR_MORE: - svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_MORE_END + ")"); - break; - case diagObj.db.Cardinality.ONE_OR_MORE: - svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ONE_OR_MORE_END + ")"); - break; - case diagObj.db.Cardinality.ONLY_ONE: - svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ONLY_ONE_END + ")"); - break; - case diagObj.db.Cardinality.MD_PARENT: - svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.MD_PARENT_END + ")"); - break; - } - switch (rel.relSpec.cardB) { - case diagObj.db.Cardinality.ZERO_OR_ONE: - svgPath.attr( - "marker-start", - "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_ONE_START + ")" - ); - break; - case diagObj.db.Cardinality.ZERO_OR_MORE: - svgPath.attr( - "marker-start", - "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_MORE_START + ")" - ); - break; - case diagObj.db.Cardinality.ONE_OR_MORE: - svgPath.attr( - "marker-start", - "url(" + url + "#" + erMarkers.ERMarkers.ONE_OR_MORE_START + ")" - ); - break; - case diagObj.db.Cardinality.ONLY_ONE: - svgPath.attr("marker-start", "url(" + url + "#" + erMarkers.ERMarkers.ONLY_ONE_START + ")"); - break; - case diagObj.db.Cardinality.MD_PARENT: - svgPath.attr("marker-start", "url(" + url + "#" + erMarkers.ERMarkers.MD_PARENT_START + ")"); - break; - } - const len = svgPath.node().getTotalLength(); - const labelPoint = svgPath.node().getPointAtLength(len * 0.5); - const labelId = "rel" + relCnt; - const labelNode = svg.append("text").classed("er relationshipLabel", true).attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).style("text-anchor", "middle").style("dominant-baseline", "middle").style("font-family", (0,mermaid_6dc72991.c)().fontFamily).style("font-size", conf.fontSize + "px").text(rel.roleA); - const labelBBox = labelNode.node().getBBox(); - svg.insert("rect", "#" + labelId).classed("er relationshipLabelBox", true).attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height); -}; -const draw = function(text, id, _version, diagObj) { - conf = (0,mermaid_6dc72991.c)().er; - mermaid_6dc72991.l.info("Drawing ER diagram"); - const securityLevel = (0,mermaid_6dc72991.c)().securityLevel; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,src/* select */.Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,src/* select */.Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ltv)("body"); - const svg = root.select(`[id='${id}']`); - erMarkers.insertMarkers(svg, conf); - let g; - g = new graphlib/* Graph */.T({ - multigraph: true, - directed: true, - compound: false - }).setGraph({ - rankdir: conf.layoutDirection, - marginx: 20, - marginy: 20, - nodesep: 100, - edgesep: 100, - ranksep: 100 - }).setDefaultEdgeLabel(function() { - return {}; - }); - const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g); - const relationships2 = addRelationships(diagObj.db.getRelationships(), g); - (0,dagre/* layout */.Zp)(g); - adjustEntities(svg, g); - relationships2.forEach(function(rel) { - drawRelationshipFromLayout(svg, rel, g, firstEntity, diagObj); - }); - const padding = conf.diagramPadding; - mermaid_6dc72991.u.insertTitle(svg, "entityTitleText", conf.titleTopMargin, diagObj.db.getDiagramTitle()); - const svgBounds = svg.node().getBBox(); - const width = svgBounds.width + padding * 2; - const height = svgBounds.height + padding * 2; - (0,mermaid_6dc72991.i)(svg, height, width, conf.useMaxWidth); - svg.attr("viewBox", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); -}; -const MERMAID_ERDIAGRAM_UUID = "28e9f9db-3c8d-5aa5-9faf-44286ae5937c"; -function generateId(str = "", prefix = "") { - const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, ""); - return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${esm_node_v5( - str, - MERMAID_ERDIAGRAM_UUID - )}`; -} -function strWithHyphen(str = "") { - return str.length > 0 ? `${str}-` : ""; -} -const erRenderer = { - setConf, - draw -}; -const getStyles = (options) => ` - .entityBox { - fill: ${options.mainBkg}; - stroke: ${options.nodeBorder}; - } - - .attributeBoxOdd { - fill: ${options.attributeBackgroundColorOdd}; - stroke: ${options.nodeBorder}; - } - - .attributeBoxEven { - fill: ${options.attributeBackgroundColorEven}; - stroke: ${options.nodeBorder}; - } - - .relationshipLabelBox { - fill: ${options.tertiaryColor}; - opacity: 0.7; - background-color: ${options.tertiaryColor}; - rect { - opacity: 0.5; - } - } - - .relationshipLine { - stroke: ${options.lineColor}; - } - - .entityTitleText { - text-anchor: middle; - font-size: 18px; - fill: ${options.textColor}; - } - #MD_PARENT_START { - fill: #f5f5f5 !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; - } - #MD_PARENT_END { - fill: #f5f5f5 !important; - stroke: ${options.lineColor} !important; - stroke-width: 1; - } - -`; -const erStyles = getStyles; -const diagram = { - parser: erParser, - db: erDb, - renderer: erRenderer, - styles: erStyles -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/905c32de.4949c5ef.js b/pr-preview/pr-1594/assets/js/905c32de.4949c5ef.js deleted file mode 100644 index 314543eec0..0000000000 --- a/pr-preview/pr-1594/assets/js/905c32de.4949c5ef.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9090],{56317:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var r=s(74848),t=s(28453);const i={},l="AlloyDB",c={id:"reference/Connectors/capture-connectors/alloydb",title:"AlloyDB",description:"This connector uses change data capture (CDC) to continuously capture table updates in an AlloyDB database into one or more Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/alloydb.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/alloydb",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/alloydb.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Airtable",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable"},next:{title:"Alpaca",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca"}},o={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:3},{value:"Backfills and performance considerations",id:"backfills-and-performance-considerations",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"alloydb",children:"AlloyDB"}),"\n",(0,r.jsx)(n.p,{children:"This connector uses change data capture (CDC) to continuously capture table updates in an AlloyDB database into one or more Flow collections."}),"\n",(0,r.jsxs)(n.p,{children:["AlloyDB is a fully managed, PostgreSQL-compatible database available in the Google Cloud platform.\nThis connector is derived from the ",(0,r.jsx)(n.a,{href:"/reference/Connectors/capture-connectors/PostgreSQL/",children:"PostgreSQL capture connector"}),",\nso the same configuration applies, but the setup steps look somewhat different."]}),"\n",(0,r.jsxs)(n.p,{children:["It's available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://github.com/estuary/connectors/pkgs/container/source-alloydb",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-alloydb:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"You'll need a AlloyDB database setup with the following:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Logical decoding enabled"}),"\n",(0,r.jsxs)(n.li,{children:["User role with ",(0,r.jsx)(n.code,{children:"REPLICATION"})," attribute"]}),"\n",(0,r.jsxs)(n.li,{children:["A replication slot. This represents a \u201ccursor\u201d into the PostgreSQL write-ahead log from which change events can be read.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Optional; if none exist, one will be created by the connector."}),"\n",(0,r.jsxs)(n.li,{children:["If you wish to run multiple captures from the same database, each must have its own slot.\nYou can create these slots yourself, or by specifying a name other than the default in the advanced ",(0,r.jsx)(n.a,{href:"#configuration",children:"configuration"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["A publication. This represents the set of tables for which change events will be reported.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["A watermarks table. The watermarks table is a small \u201cscratch space\u201d to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You'll also need a virtual machine to connect securely to the instance via SSH tunnelling (AlloyDB doesn't support IP allowlisting)."}),"\n",(0,r.jsx)(n.h3,{id:"setup",children:"Setup"}),"\n",(0,r.jsx)(n.p,{children:"To meet the prerequisites, complete these steps."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Set ",(0,r.jsxs)(n.a,{href:"https://cloud.google.com/alloydb/docs/reference/alloydb-flags",children:["the ",(0,r.jsx)(n.code,{children:"alloydb.logical_decoding"})," flag to ",(0,r.jsx)(n.code,{children:"on"})]})," to enable logical replication on your AlloyDB instance."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In your ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/alloydb/docs/connect-psql",children:"psql client"}),", connect to your instance and issue the following commands to create a new user for the capture with appropriate permissions,\nand set up the watermarks table and publication."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"CREATE USER flow_capture WITH REPLICATION\nIN ROLE alloydbsuperuser LOGIN PASSWORD 'secret';\nGRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture;\nALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture;\nCREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);\nGRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;\nCREATE PUBLICATION flow_publication FOR ALL TABLES;\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"3",children:["\n",(0,r.jsxs)(n.li,{children:["Follow the instructions to create a ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/connect-network#setup-for-google-cloud",children:"virtual machine for SSH tunneling"}),"\nin the same Google Cloud project as your instance."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"backfills-and-performance-considerations",children:"Backfills and performance considerations"}),"\n",(0,r.jsxs)(n.p,{children:["When the a AlloyDB capture is initiated, by default, the connector first ",(0,r.jsx)(n.em,{children:"backfills"}),", or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis."]}),"\n",(0,r.jsx)(n.p,{children:"This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow.\nHowever, you may find it appropriate to skip the backfill, especially for extremely large tables."}),"\n",(0,r.jsxs)(n.p,{children:["In this case, you may turn of backfilling on a per-table basis. See ",(0,r.jsx)(n.a,{href:"#properties",children:"properties"})," for details."]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.p,{children:["The SSH config section is required for this connector.\nYou'll fill in the database address with a localhost IP address,\nand specify your VM's IP address as the SSH address.\nSee the table below and the ",(0,r.jsx)(n.a,{href:"#sample",children:"sample config"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/address"})})}),(0,r.jsx)(n.td,{children:"Address"}),(0,r.jsxs)(n.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/database"})})}),(0,r.jsx)(n.td,{children:"Database"}),(0,r.jsx)(n.td,{children:"Logical database name to capture from."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsxs)(n.td,{children:["Required, ",(0,r.jsx)(n.code,{children:'"postgres"'})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/user"})})}),(0,r.jsx)(n.td,{children:"User"}),(0,r.jsx)(n.td,{children:"The database user to authenticate as."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsxs)(n.td,{children:["Required, ",(0,r.jsx)(n.code,{children:'"flow_capture"'})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/password"})})}),(0,r.jsx)(n.td,{children:"Password"}),(0,r.jsx)(n.td,{children:"Password for the specified database user."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced"})}),(0,r.jsx)(n.td,{children:"Advanced Options"}),(0,r.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,r.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,r.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"4096"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/publicationName"})}),(0,r.jsx)(n.td,{children:"Publication Name"}),(0,r.jsx)(n.td,{children:"The name of the PostgreSQL publication to replicate from."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"flow_publication"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/skip_backfills"})}),(0,r.jsx)(n.td,{children:"Skip Backfills"}),(0,r.jsx)(n.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/slotName"})}),(0,r.jsx)(n.td,{children:"Slot Name"}),(0,r.jsx)(n.td,{children:"The name of the PostgreSQL replication slot to replicate from."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"flow_slot"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/watermarksTable"})}),(0,r.jsx)(n.td,{children:"Watermarks Table"}),(0,r.jsx)(n.td,{children:"The name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"public.flow_watermarks"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"networkTunnel"})}),(0,r.jsx)(n.td,{children:"Network Tunnel"}),(0,r.jsx)(n.td,{children:"Connect to your system through an SSH server that acts as a bastion host for your network."}),(0,r.jsx)(n.td,{children:"Object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"networkTunnel/sshForwarding"})}),(0,r.jsx)(n.td,{children:"SSH Forwarding"}),(0,r.jsx)(n.td,{}),(0,r.jsx)(n.td,{children:"Object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"networkTunnel/sshForwarding/sshEndpoint"})}),(0,r.jsx)(n.td,{children:"SSH Endpoint"}),(0,r.jsx)(n.td,{children:"Endpoint of the remote SSH server (in this case, your Google Cloud VM) that supports tunneling (in the form of ssh://user@address)."}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"networkTunnel/sshForwarding/privateKey"})}),(0,r.jsx)(n.td,{children:"SSH Private Key"}),(0,r.jsx)(n.td,{children:"Private key to connect to the remote SSH server."}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/namespace"})})}),(0,r.jsx)(n.td,{children:"Namespace"}),(0,r.jsxs)(n.td,{children:["The ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/alloydb/docs/overview#hierarchical_resource_structure",children:"namespace/instance"})," of the table."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Table name."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync mode"}),(0,r.jsxs)(n.td,{children:["Connection method. Always set to ",(0,r.jsx)(n.code,{children:"incremental"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/source-alloydb:dev"\n config:\n address: "127.0.0.1:5432"\n database: "postgres"\n user: "flow_capture"\n password: "secret"\n networkTunnel:\n sshForwarding:\n sshEndpoint: ssh://sshUser@vm-ip-address\n privateKey: |2\n -----BEGIN RSA PRIVATE KEY-----\n MIICXAIBAAKBgQCJO7G6R+kv2MMS8Suw21sk2twHg8Vog0fjimEWJEwyAfFM/Toi\n EJ6r5RTaSvN++/+MPWUll7sUdOOBZr6ErLKLHEt7uXxusAzOjMxFKZpEARMcjwHY\n v/tN1A2OYU0qay1DOwknEE0i+/Bvf8lMS7VDjHmwRaBtRed/+iAQHf128QIDAQAB\n AoGAGoOUBP+byAjDN8esv1DCPU6jsDf/Tf//RbEYrOR6bDb/3fYW4zn+zgtGih5t\n CR268+dwwWCdXohu5DNrn8qV/Awk7hWp18mlcNyO0skT84zvippe+juQMK4hDQNi\n ywp8mDvKQwpOuzw6wNEitcGDuACx5U/1JEGGmuIRGx2ST5kCQQDsstfWDcYqbdhr\n 5KemOPpu80OtBYzlgpN0iVP/6XW1e5FCRp2ofQKZYXVwu5txKIakjYRruUiiZTza\n QeXRPbp3AkEAlGx6wMe1l9UtAAlkgCFYbuxM+eRD4Gg5qLYFpKNsoINXTnlfDry5\n +1NkuyiQDjzOSPiLZ4Abpf+a+myjOuNL1wJBAOwkdM6aCVT1J9BkW5mrCLY+PgtV\n GT80KTY/d6091fBMKhxL5SheJ4SsRYVFtguL2eA7S5xJSpyxkadRzR0Wj3sCQAvA\n bxO2fE1SRqbbF4cBnOPjd9DNXwZ0miQejWHUwrQO0inXeExNaxhYKQCcnJNUAy1J\n 6JfAT/AbxeSQF3iBKK8CQAt5r/LLEM1/8ekGOvBh8MAQpWBW771QzHUN84SiUd/q\n xR9mfItngPwYJ9d/pTO7u9ZUPHEoat8Ave4waB08DsI=\n -----END RSA PRIVATE KEY-----\n bindings:\n - resource:\n stream: ${TABLE_NAME}\n namespace: ${TABLE_NAMESPACE}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>c});var r=s(96540);const t={},i=r.createContext(t);function l(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/906e1e9f.8bf790cc.js b/pr-preview/pr-1594/assets/js/906e1e9f.8bf790cc.js deleted file mode 100644 index af57b6c10f..0000000000 --- a/pr-preview/pr-1594/assets/js/906e1e9f.8bf790cc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2340],{50828:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>n,metadata:()=>o,toc:()=>l});var i=t(74848),s=t(28453);const n={},a="Iterable",o={id:"reference/Connectors/capture-connectors/iterable",title:"Iterable",description:"This connector captures data from Iterable into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/iterable.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/iterable",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/iterable.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Intercom HTTP Ingest (Webhook)",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest"},next:{title:"Jira",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira"}},c={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function d(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.h1,{id:"iterable",children:"Iterable"}),"\n",(0,i.jsx)(r.p,{children:"This connector captures data from Iterable into Flow collections."}),"\n",(0,i.jsxs)(r.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,i.jsx)(r.a,{href:"https://ghcr.io/estuary/source-iterable:dev",children:(0,i.jsx)(r.code,{children:"ghcr.io/estuary/source-iterable:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,i.jsx)(r.p,{children:"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system."}),"\n",(0,i.jsxs)(r.p,{children:["You can find their documentation ",(0,i.jsx)(r.a,{href:"https://docs.airbyte.com/integrations/sources/iterable/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,i.jsx)(r.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,i.jsx)(r.p,{children:"The following data resources are supported through the Iterable APIs:"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#campaigns_campaigns",children:"Campaigns"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#campaigns_metrics",children:"Campaign Metrics"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#channels_channels",children:"Channels"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"Email Bounce"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"Email Click"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"Email Complaint"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"Email Open"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"Email Send"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"Email Send Skip"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"Email Subscribe"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"Email Unsubscribe"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#events_User_events",children:"Events"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#lists_getLists",children:"Lists"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#lists_getLists_0",children:"List Users"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#messageTypes_messageTypes",children:"Message Types"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#metadata_list_tables",children:"Metadata"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#templates_getTemplates",children:"Templates"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"Users"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"PushSend"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"PushSendSkip"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"PushOpen"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"PushUninstall"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"PushBounce"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"WebPushSend"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"WebPushClick"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"WebPushSendSkip"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"InAppSend"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"InAppOpen"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"InAppClick"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"InAppClose"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"InAppDelete"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"InAppDelivery"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"InAppSendSkip"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"InboxSession"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"InboxMessageImpression"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"SmsSend"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"SmsBounce"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"SmsClick"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"SmsReceived"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"SmsSendSkip"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"SmsUsageInfo"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"Purchase"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"CustomEvent"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://api.iterable.com/api/docs#export_exportDataJson",children:"HostedUnsubscribeClick"})}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,i.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:["To set up the Iterable source connector, you'll need the Iterable ",(0,i.jsxs)(r.a,{href:"https://support.iterable.com/hc/en-us/articles/360043464871-API-Keys-",children:[(0,i.jsx)(r.code,{children:"Server-side"})," API Key with ",(0,i.jsx)(r.code,{children:"standard"})," permissions"]}),"."]}),"\n"]}),"\n",(0,i.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsxs)(r.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,i.jsx)(r.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Iterable source connector."]}),"\n",(0,i.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,i.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,i.jsxs)(r.table,{children:[(0,i.jsx)(r.thead,{children:(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.th,{children:"Property"}),(0,i.jsx)(r.th,{children:"Title"}),(0,i.jsx)(r.th,{children:"Description"}),(0,i.jsx)(r.th,{children:"Type"}),(0,i.jsx)(r.th,{children:"Required/Default"})]})}),(0,i.jsxs)(r.tbody,{children:[(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:(0,i.jsx)(r.code,{children:"/apikey"})}),(0,i.jsx)(r.td,{children:"API Key"}),(0,i.jsx)(r.td,{children:"The value of the Iterable API Key generated."}),(0,i.jsx)(r.td,{children:"string"}),(0,i.jsx)(r.td,{children:"Required"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:(0,i.jsx)(r.code,{children:"/start_date"})}),(0,i.jsx)(r.td,{children:"Start Date"}),(0,i.jsx)(r.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,i.jsx)(r.td,{children:"string"}),(0,i.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,i.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,i.jsxs)(r.table,{children:[(0,i.jsx)(r.thead,{children:(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.th,{children:"Property"}),(0,i.jsx)(r.th,{children:"Title"}),(0,i.jsx)(r.th,{children:"Description"}),(0,i.jsx)(r.th,{children:"Type"}),(0,i.jsx)(r.th,{children:"Required/Default"})]})}),(0,i.jsxs)(r.tbody,{children:[(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:(0,i.jsx)(r.strong,{children:(0,i.jsx)(r.code,{children:"/stream"})})}),(0,i.jsx)(r.td,{children:"Stream"}),(0,i.jsx)(r.td,{children:"Resource of your Iterable project from which collections are captured."}),(0,i.jsx)(r.td,{children:"string"}),(0,i.jsx)(r.td,{children:"Required"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:(0,i.jsx)(r.strong,{children:(0,i.jsx)(r.code,{children:"/syncMode"})})}),(0,i.jsx)(r.td,{children:"Sync Mode"}),(0,i.jsx)(r.td,{children:"Connection method."}),(0,i.jsx)(r.td,{children:"string"}),(0,i.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,i.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-iterable:dev\n config:\n apikey: <secret>\n start_date: 2017-01-25T00:00:00Z\n bindings:\n - resource:\n stream: purchase\n syncMode: full_refresh\n target: ${PREFIX}/purchase\n {...}\n"})})]})}function p(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,r,t)=>{t.d(r,{R:()=>a,x:()=>o});var i=t(96540);const s={},n=i.createContext(s);function a(e){const r=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(n.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9184.0cf47614.js b/pr-preview/pr-1594/assets/js/9184.0cf47614.js deleted file mode 100644 index b26701f256..0000000000 --- a/pr-preview/pr-1594/assets/js/9184.0cf47614.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9184],{76803:(t,e,i)=>{i.d(e,{diagram:()=>d});var n=i(99702),s=i(26312),r=(i(74353),i(16750),i(42838),function(){var t=function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},e=[1,3],i=[1,4],n=[1,5],s=[1,6],r=[1,10,12,14,16,18,19,20,21,22],l=[2,4],a=[1,5,10,12,14,16,18,19,20,21,22],c=[20,21,22],o=[2,7],h=[1,12],u=[1,13],y=[1,14],p=[1,15],d=[1,16],g=[1,17],f={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",10:"txt",11:"value",12:"title",13:"title_value",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"section",20:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(t,e,i,n,s,r,l){var a=r.length-1;switch(s){case 3:n.setShowData(!0);break;case 6:this.$=r[a-1];break;case 8:n.addSection(r[a-1],n.cleanupValue(r[a]));break;case 9:this.$=r[a].trim(),n.setDiagramTitle(this.$);break;case 10:this.$=r[a].trim(),n.setAccTitle(this.$);break;case 11:case 12:this.$=r[a].trim(),n.setAccDescription(this.$);break;case 13:n.addSection(r[a].substr(8)),this.$=r[a].substr(8)}},table:[{3:1,4:2,5:e,20:i,21:n,22:s},{1:[3]},{3:7,4:2,5:e,20:i,21:n,22:s},t(r,l,{6:8,7:[1,9]}),t(a,[2,14]),t(a,[2,15]),t(a,[2,16]),{1:[2,1]},t(c,o,{8:10,9:11,1:[2,2],10:h,12:u,14:y,16:p,18:d,19:g}),t(r,l,{6:18}),t(r,[2,5]),{4:19,20:i,21:n,22:s},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},t(c,[2,12]),t(c,[2,13]),t(c,o,{8:10,9:11,1:[2,3],10:h,12:u,14:y,16:p,18:d,19:g}),t(r,[2,6]),t(c,[2,8]),t(c,[2,9]),t(c,[2,10]),t(c,[2,11])],defaultActions:{7:[2,1]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],n=[],s=[null],r=[],l=this.table,a="",c=0,o=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),y={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(y.yy[p]=this.yy[p]);u.setInput(t,y.yy),y.yy.lexer=u,y.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var d=u.yylloc;r.push(d);var g=u.options&&u.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,_,m,k,b,x,v,S,w,$={};;){if(_=i[i.length-1],this.defaultActions[_]?m=this.defaultActions[_]:(null==f&&(w=void 0,"number"!=typeof(w=n.pop()||u.lex()||1)&&(w instanceof Array&&(w=(n=w).pop()),w=e.symbols_[w]||w),f=w),m=l[_]&&l[_][f]),void 0===m||!m.length||!m[0]){var E="";for(b in S=[],l[_])this.terminals_[b]&&b>2&&S.push("'"+this.terminals_[b]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[f]||f,line:u.yylineno,loc:d,expected:S})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+f);switch(m[0]){case 1:i.push(f),s.push(u.yytext),r.push(u.yylloc),i.push(m[1]),f=null,o=u.yyleng,a=u.yytext,c=u.yylineno,d=u.yylloc;break;case 2:if(x=this.productions_[m[1]][1],$.$=s[s.length-x],$._$={first_line:r[r.length-(x||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(x||1)].first_column,last_column:r[r.length-1].last_column},g&&($._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply($,[a,o,c,y.yy,m[1],s,r].concat(h))))return k;x&&(i=i.slice(0,-1*x*2),s=s.slice(0,-1*x),r=r.slice(0,-1*x)),i.push(this.productions_[m[1]][0]),s.push($.$),r.push($._$),v=l[i[i.length-2]][i[i.length-1]],i.push(v);break;case 3:return!0}}return!0}},_={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===n.length?this.yylloc.first_column:0)+n[n.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,n,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((i=this._input.match(this.rules[s[r]]))&&(!e||i[0].length>e[0].length)){if(e=i,n=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,i,n){switch(i){case 0:case 1:case 3:case 4:break;case 2:return 20;case 5:return this.begin("title"),12;case 6:return this.popState(),"title_value";case 7:return this.begin("acc_title"),14;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),16;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:case 15:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 16:return"txt";case 17:return 5;case 18:return 7;case 19:return"value";case 20:return 22}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[6],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,7,9,11,14,17,18,19,20],inclusive:!0}}};function m(){this.yy={}}return f.lexer=_,m.prototype=f,f.Parser=m,new m}());r.parser=r;const l=r,a=n.B.pie,c={},o=!1;let h=c,u=o;const y=structuredClone(a),p={getConfig:()=>structuredClone(y),clear:()=>{h=structuredClone(c),u=o,(0,n.v)()},setDiagramTitle:n.q,getDiagramTitle:n.t,setAccTitle:n.s,getAccTitle:n.g,setAccDescription:n.b,getAccDescription:n.a,addSection:(t,e)=>{t=(0,n.d)(t,(0,n.c)()),void 0===h[t]&&(h[t]=e,n.l.debug(`added new section: ${t}, with value: ${e}`))},getSections:()=>h,cleanupValue:t=>(":"===t.substring(0,1)&&(t=t.substring(1).trim()),Number(t.trim())),setShowData:t=>{u=t},getShowData:()=>u},d={parser:l,db:p,renderer:{draw:(t,e,i,r)=>{n.l.debug("rendering pie chart\n"+t);const l=r.db,a=(0,n.c)(),c=(0,n.C)(l.getConfig(),a.pie),o=18,h=450,u=(0,n.A)(e),y=u.append("g"),p=l.getSections();y.attr("transform","translate(225,225)");const{themeVariables:d}=a;let[g]=(0,n.D)(d.pieOuterStrokeWidth);g??(g=2);const f=c.textPosition,_=Math.min(450,h)/2-40,m=(0,s.JLW)().innerRadius(0).outerRadius(_),k=(0,s.JLW)().innerRadius(_*f).outerRadius(_*f);y.append("circle").attr("cx",0).attr("cy",0).attr("r",_+g/2).attr("class","pieOuterCircle");const b=(t=>{const e=Object.entries(t).map((t=>({label:t[0],value:t[1]}))).sort(((t,e)=>e.value-t.value));return(0,s.rLf)().value((t=>t.value))(e)})(p),x=[d.pie1,d.pie2,d.pie3,d.pie4,d.pie5,d.pie6,d.pie7,d.pie8,d.pie9,d.pie10,d.pie11,d.pie12],v=(0,s.UMr)(x);y.selectAll("mySlices").data(b).enter().append("path").attr("d",m).attr("fill",(t=>v(t.data.label))).attr("class","pieCircle");let S=0;Object.keys(p).forEach((t=>{S+=p[t]})),y.selectAll("mySlices").data(b).enter().append("text").text((t=>(t.data.value/S*100).toFixed(0)+"%")).attr("transform",(t=>"translate("+k.centroid(t)+")")).style("text-anchor","middle").attr("class","slice"),y.append("text").text(l.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");const w=y.selectAll(".legend").data(v.domain()).enter().append("g").attr("class","legend").attr("transform",((t,e)=>"translate(216,"+(22*e-22*v.domain().length/2)+")"));w.append("rect").attr("width",o).attr("height",o).style("fill",v).style("stroke",v),w.data(b).append("text").attr("x",22).attr("y",14).text((t=>{const{label:e,value:i}=t.data;return l.getShowData()?`${e} [${i}]`:e}));const $=512+Math.max(...w.selectAll("text").nodes().map((t=>(null==t?void 0:t.getBoundingClientRect().width)??0)));u.attr("viewBox",`0 0 ${$} 450`),(0,n.i)(u,h,$,c.useMaxWidth)}},styles:t=>`\n .pieCircle{\n stroke: ${t.pieStrokeColor};\n stroke-width : ${t.pieStrokeWidth};\n opacity : ${t.pieOpacity};\n }\n .pieOuterCircle{\n stroke: ${t.pieOuterStrokeColor};\n stroke-width: ${t.pieOuterStrokeWidth};\n fill: none;\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${t.pieTitleTextSize};\n fill: ${t.pieTitleTextColor};\n font-family: ${t.fontFamily};\n }\n .slice {\n font-family: ${t.fontFamily};\n fill: ${t.pieSectionTextColor};\n font-size:${t.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${t.pieLegendTextColor};\n font-family: ${t.fontFamily};\n font-size: ${t.pieLegendTextSize};\n }\n`}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/921f956e.eed2c065.js b/pr-preview/pr-1594/assets/js/921f956e.eed2c065.js deleted file mode 100644 index 1a1938296d..0000000000 --- a/pr-preview/pr-1594/assets/js/921f956e.eed2c065.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9922],{84335:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>a,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var n=t(74848),r=t(28453);const i={},o="Hubspot",c={id:"reference/Connectors/capture-connectors/hubspot",title:"Hubspot",description:"This connector captures data from a Hubspot account.",source:"@site/docs/reference/Connectors/capture-connectors/hubspot.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/hubspot",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/hubspot.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"HTTP Ingest (Webhook)",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest"},next:{title:"HubSpot ( Real-Time )",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time"}},d={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with Hubspot in the Flow web app",id:"using-oauth2-to-authenticate-with-hubspot-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually",id:"configuring-the-connector-specification-manually",level:3},{value:"Setup",id:"setup",level:4},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function h(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"hubspot",children:"Hubspot"}),"\n",(0,n.jsx)(s.p,{children:"This connector captures data from a Hubspot account."}),"\n",(0,n.jsxs)(s.p,{children:["Estuary offers a in-house real time version of this connector. For more information take a look at our ",(0,n.jsx)(s.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time",children:"HubSpot Real-Time"})," docs."]}),"\n",(0,n.jsxs)(s.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,n.jsx)(s.a,{href:"https://ghcr.io/estuary/source-hubspot:dev",children:(0,n.jsx)(s.code,{children:"ghcr.io/estuary/source-hubspot:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,n.jsxs)(s.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,n.jsx)(s.a,{href:"https://docs.airbyte.com/integrations/sources/hubspot",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,n.jsx)(s.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,n.jsx)(s.p,{children:"By default, each resource associated with your Hubspot account is mapped to a Flow collection through a separate binding."}),"\n",(0,n.jsx)(s.p,{children:"The following data resources are supported for all subscription levels:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/methods/email/get_campaign_data",children:"Campaigns"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/companies",children:"Companies"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"http://developers.hubspot.com/docs/methods/lists/get_lists",children:"Contact Lists"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/methods/contacts/get_contacts",children:"Contacts"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://legacydocs.hubspot.com/docs/methods/contacts/get_contacts",children:"Contacts List Memberships"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/methods/pipelines/get_pipelines_for_object_type",children:"Deal Pipelines"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/deals",children:"Deals"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/methods/email/get_events",children:"Email Events"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://legacydocs.hubspot.com/docs/methods/engagements/get-all-engagements",children:"Engagements"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/calls",children:"Engagements Calls"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/email",children:"Engagements Emails"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/meetings",children:"Engagements Meetings"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/notes",children:"Engagements Notes"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/tasks",children:"Engagements Tasks"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/marketing/forms",children:"Forms"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://legacydocs.hubspot.com/docs/methods/forms/get-submissions-for-a-form",children:"Form Submissions"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/line-items",children:"Line Items"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/methods/owners/get_owners",children:"Owners"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/products",children:"Products"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://legacydocs.hubspot.com/docs/methods/contacts/get_contacts",children:"Property History"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/quotes",children:"Quotes"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/methods/email/get_subscriptions_timeline",children:"Subscription Changes"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/tickets",children:"Tickets"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/pipelines",children:"Ticket Pipelines"})}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["The following data resources are supported for pro accounts (set ",(0,n.jsx)(s.strong,{children:"Subscription type"})," to ",(0,n.jsx)(s.code,{children:"pro"})," in the ",(0,n.jsx)(s.a,{href:"#endpoint",children:"configuration"}),"):"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/crm/feedback-submissions",children:"Feedback Submissions"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://legacydocs.hubspot.com/docs/methods/cms_email/get-all-marketing-email-statistics",children:"Marketing Emails"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://legacydocs.hubspot.com/docs/methods/workflows/v3/get_workflows",children:"Workflows"})}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsx)(s.p,{children:"There are two ways to authenticate with Hubspot when capturing data: using OAuth2 or with a private app access token.\nTheir prerequisites differ."}),"\n",(0,n.jsx)(s.p,{children:"OAuth is recommended for simplicity in the Flow web app;\nthe access token method is the only supported method using the command line."}),"\n",(0,n.jsx)(s.h3,{id:"using-oauth2-to-authenticate-with-hubspot-in-the-flow-web-app",children:"Using OAuth2 to authenticate with Hubspot in the Flow web app"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"A Hubspot account"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"configuring-the-connector-specification-manually",children:"Configuring the connector specification manually"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:"A Hubspot account"}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The access token for an appropriately configured ",(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/private-apps",children:"private app"})," on the Hubspot account."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"setup",children:"Setup"}),"\n",(0,n.jsx)(s.p,{children:"To create a private app in Hubspot and generate its access token, do the following."}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Ensure that your Hubspot user account has ",(0,n.jsx)(s.a,{href:"https://knowledge.hubspot.com/settings/hubspot-user-permissions-guide#super-admin",children:"super admin"})," privileges."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["In Hubspot, create a ",(0,n.jsx)(s.a,{href:"https://developers.hubspot.com/docs/api/private-apps#create-a-private-app",children:"new private app"}),"."]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:'Name the app "Estuary Flow," or choose another name that is memorable to you.'}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Grant the new app ",(0,n.jsx)(s.strong,{children:"Read"})," access for all available scopes."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:"Copy the access token for use in the connector configuration."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsxs)(s.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,n.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Hubspot source connector."]}),"\n",(0,n.jsx)(s.h3,{id:"properties",children:"Properties"}),"\n",(0,n.jsx)(s.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,n.jsx)(s.p,{children:"The following properties reflect the access token authentication method."}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Property"}),(0,n.jsx)(s.th,{children:"Title"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Type"}),(0,n.jsx)(s.th,{children:"Required/Default"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"/credentials"})})}),(0,n.jsx)(s.td,{children:"Private Application"}),(0,n.jsx)(s.td,{children:"Authenticate with a private app access token"}),(0,n.jsx)(s.td,{children:"object"}),(0,n.jsx)(s.td,{children:"Required"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"/credentials/access_token"})})}),(0,n.jsx)(s.td,{children:"Access Token"}),(0,n.jsx)(s.td,{children:"HubSpot Access token."}),(0,n.jsx)(s.td,{children:"string"}),(0,n.jsx)(s.td,{children:"Required"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"/credentials/credentials_title"})})}),(0,n.jsx)(s.td,{children:"Credentials"}),(0,n.jsx)(s.td,{children:"Name of the credentials set"}),(0,n.jsx)(s.td,{children:"string"}),(0,n.jsxs)(s.td,{children:["Required, ",(0,n.jsx)(s.code,{children:'"Private App Credentials"'})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"/start_date"})})}),(0,n.jsx)(s.td,{children:"Start Date"}),(0,n.jsx)(s.td,{children:"UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,n.jsx)(s.td,{children:"string"}),(0,n.jsx)(s.td,{children:"Required"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"/subscription_type"})}),(0,n.jsx)(s.td,{children:"Your HubSpot account subscription type"}),(0,n.jsx)(s.td,{children:"Some streams are only available to certain subscription packages, we use this information to select which streams to pull data from."}),(0,n.jsx)(s.td,{children:"string"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:'"starter"'})})]})]})]}),"\n",(0,n.jsx)(s.h4,{id:"bindings",children:"Bindings"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Property"}),(0,n.jsx)(s.th,{children:"Title"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Type"}),(0,n.jsx)(s.th,{children:"Required/Default"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"/stream"})})}),(0,n.jsx)(s.td,{children:"Data resource"}),(0,n.jsx)(s.td,{children:"Name of the data resource."}),(0,n.jsx)(s.td,{children:"string"}),(0,n.jsx)(s.td,{children:"Required"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"/syncMode"})})}),(0,n.jsx)(s.td,{children:"Sync Mode"}),(0,n.jsx)(s.td,{children:"Connection method"}),(0,n.jsx)(s.td,{children:"string"}),(0,n.jsx)(s.td,{children:"Required"})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"sample",children:"Sample"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-hubspot:dev\n config:\n credentials:\n credentials_title: Private App Credentials\n access_token: <secret>\n bindings:\n - resource:\n stream: companies\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Your configuration will have many more bindings representing all supported ",(0,n.jsx)(s.a,{href:"#supported-data-resources",children:"resources"}),"\nin your Hubspot account."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})})]})}function a(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},28453:(e,s,t)=>{t.d(s,{R:()=>o,x:()=>c});var n=t(96540);const r={},i=n.createContext(r);function o(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/925.f8ccfbd9.js b/pr-preview/pr-1594/assets/js/925.f8ccfbd9.js deleted file mode 100644 index 50ee359ad0..0000000000 --- a/pr-preview/pr-1594/assets/js/925.f8ccfbd9.js +++ /dev/null @@ -1,14571 +0,0 @@ -"use strict"; -exports.id = 925; -exports.ids = [925]; -exports.modules = { - -/***/ 18897: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - a: () => (/* binding */ createText), - c: () => (/* binding */ computeDimensionOfText) -}); - -// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -var constructs_namespaceObject = {}; -__webpack_require__.r(constructs_namespaceObject); -__webpack_require__.d(constructs_namespaceObject, { - attentionMarkers: () => (attentionMarkers), - contentInitial: () => (contentInitial), - disable: () => (disable), - document: () => (constructs_document), - flow: () => (constructs_flow), - flowInitial: () => (flowInitial), - insideSpan: () => (insideSpan), - string: () => (constructs_string), - text: () => (constructs_text) -}); - -// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-6dc72991.js + 8 modules -var mermaid_6dc72991 = __webpack_require__(99702); -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js -/** - * @typedef {import('mdast').Root|import('mdast').Content} Node - * - * @typedef Options - * Configuration (optional). - * @property {boolean | null | undefined} [includeImageAlt=true] - * Whether to use `alt` for `image`s. - * @property {boolean | null | undefined} [includeHtml=true] - * Whether to use `value` of HTML. - */ - -/** @type {Options} */ -const emptyOptions = {} - -/** - * Get the text content of a node or list of nodes. - * - * Prefers the node’s plain-text fields, otherwise serializes its children, - * and if the given value is an array, serialize the nodes in it. - * - * @param {unknown} value - * Thing to serialize, typically `Node`. - * @param {Options | null | undefined} [options] - * Configuration (optional). - * @returns {string} - * Serialized `value`. - */ -function lib_toString(value, options) { - const settings = options || emptyOptions - const includeImageAlt = - typeof settings.includeImageAlt === 'boolean' - ? settings.includeImageAlt - : true - const includeHtml = - typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true - - return one(value, includeImageAlt, includeHtml) -} - -/** - * One node or several nodes. - * - * @param {unknown} value - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized node. - */ -function one(value, includeImageAlt, includeHtml) { - if (node(value)) { - if ('value' in value) { - return value.type === 'html' && !includeHtml ? '' : value.value - } - - if (includeImageAlt && 'alt' in value && value.alt) { - return value.alt - } - - if ('children' in value) { - return lib_all(value.children, includeImageAlt, includeHtml) - } - } - - if (Array.isArray(value)) { - return lib_all(value, includeImageAlt, includeHtml) - } - - return '' -} - -/** - * Serialize a list of nodes. - * - * @param {Array<unknown>} values - * Thing to serialize. - * @param {boolean} includeImageAlt - * Include image `alt`s. - * @param {boolean} includeHtml - * Include HTML. - * @returns {string} - * Serialized nodes. - */ -function lib_all(values, includeImageAlt, includeHtml) { - /** @type {Array<string>} */ - const result = [] - let index = -1 - - while (++index < values.length) { - result[index] = one(values[index], includeImageAlt, includeHtml) - } - - return result.join('') -} - -/** - * Check if `value` looks like a node. - * - * @param {unknown} value - * Thing. - * @returns {value is Node} - * Whether `value` is a node. - */ -function node(value) { - return Boolean(value && typeof value === 'object') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array<T>} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array<T>} items - * Items to inject into `list`. - * @returns {void} - * Nothing. - */ -function splice(list, start, remove, items) { - const end = list.length - let chunkStart = 0 - /** @type {Array<unknown>} */ - let parameters - - // Make start between zero and `end` (included). - if (start < 0) { - start = -start > end ? 0 : end + start - } else { - start = start > end ? end : start - } - remove = remove > 0 ? remove : 0 - - // No need to chunk the items if there’s only a couple (10k) items. - if (items.length < 10000) { - parameters = Array.from(items) - parameters.unshift(start, remove) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - } else { - // Delete `remove` items starting from `start` - if (remove) list.splice(start, remove) - - // Insert the items in chunks to not cause stack overflows. - while (chunkStart < items.length) { - parameters = items.slice(chunkStart, chunkStart + 10000) - parameters.unshift(start, 0) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - chunkStart += 10000 - start += 10000 - } - } -} - -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array<T>} list - * List to operate on. - * @param {Array<T>} items - * Items to add to `list`. - * @returns {Array<T>} - * Either `list` or `items`. - */ -function push(list, items) { - if (list.length > 0) { - splice(list, list.length, 0, items) - return list - } - return items -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - * @typedef {import('micromark-util-types').Handles} Handles - * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension - * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension - */ - - - -const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty - -/** - * Combine multiple syntax extensions into one. - * - * @param {Array<Extension>} extensions - * List of syntax extensions. - * @returns {NormalizedExtension} - * A single combined extension. - */ -function combineExtensions(extensions) { - /** @type {NormalizedExtension} */ - const all = {} - let index = -1 - - while (++index < extensions.length) { - syntaxExtension(all, extensions[index]) - } - - return all -} - -/** - * Merge `extension` into `all`. - * - * @param {NormalizedExtension} all - * Extension to merge into. - * @param {Extension} extension - * Extension to merge. - * @returns {void} - */ -function syntaxExtension(all, extension) { - /** @type {keyof Extension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - /** @type {Record<string, unknown>} */ - const left = maybe || (all[hook] = {}) - /** @type {Record<string, unknown> | undefined} */ - const right = extension[hook] - /** @type {string} */ - let code - - if (right) { - for (code in right) { - if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] - const value = right[code] - constructs( - // @ts-expect-error Looks like a list. - left[code], - Array.isArray(value) ? value : value ? [value] : [] - ) - } - } - } -} - -/** - * Merge `list` into `existing` (both lists of constructs). - * Mutates `existing`. - * - * @param {Array<unknown>} existing - * @param {Array<unknown>} list - * @returns {void} - */ -function constructs(existing, list) { - let index = -1 - /** @type {Array<unknown>} */ - const before = [] - - while (++index < list.length) { - // @ts-expect-error Looks like an object. - ;(list[index].add === 'after' ? existing : before).push(list[index]) - } - - splice(existing, 0, 0, before) -} - -/** - * Combine multiple HTML extensions into one. - * - * @param {Array<HtmlExtension>} htmlExtensions - * List of HTML extensions. - * @returns {HtmlExtension} - * A single combined HTML extension. - */ -function combineHtmlExtensions(htmlExtensions) { - /** @type {HtmlExtension} */ - const handlers = {} - let index = -1 - - while (++index < htmlExtensions.length) { - htmlExtension(handlers, htmlExtensions[index]) - } - - return handlers -} - -/** - * Merge `extension` into `all`. - * - * @param {HtmlExtension} all - * Extension to merge into. - * @param {HtmlExtension} extension - * Extension to merge. - * @returns {void} - */ -function htmlExtension(all, extension) { - /** @type {keyof HtmlExtension} */ - let hook - - for (hook in extension) { - const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined - const left = maybe || (all[hook] = {}) - const right = extension[hook] - /** @type {keyof Handles} */ - let type - - if (right) { - for (type in right) { - // @ts-expect-error assume document vs regular handler are managed correctly. - left[type] = right[type] - } - } - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js -// This module is generated by `script/`. -// -// CommonMark handles attention (emphasis, strong) markers based on what comes -// before or after them. -// One such difference is if those characters are Unicode punctuation. -// This script is generated from the Unicode data. - -/** - * Regular expression that matches a unicode punctuation character. - */ -const unicodePunctuationRegex = - /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ - -;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - - -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlpha = regexCheck(/[A-Za-z]/) - -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) - -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) - -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function asciiControl(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code !== null && (code < 32 || code === 127) - ) -} - -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiDigit = regexCheck(/\d/) - -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) - -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) - -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEnding(code) { - return code !== null && code < -2 -} - -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownLineEndingOrSpace(code) { - return code !== null && (code < 0 || code === 32) -} - -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -function markdownSpace(code) { - return code === -2 || code === -1 || code === 32 -} - -// Size note: removing ASCII from the regex and using `asciiPunctuation` here -// In fact adds to the bundle size. -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodePunctuation = regexCheck(unicodePunctuationRegex) - -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -const unicodeWhitespace = regexCheck(/\s/) - -/** - * Create a code check from a regex. - * - * @param {RegExp} regex - * @returns {(code: Code) => boolean} - */ -function regexCheck(regex) { - return check - - /** - * Check whether a code matches the bound regex. - * - * @param {Code} code - * Character code. - * @returns {boolean} - * Whether the character code matches the bound regex. - */ - function check(code) { - return code !== null && regex.test(String.fromCharCode(code)) - } -} - -;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns - * Start state. - */ -function factorySpace(effects, ok, type, max) { - const limit = max ? max - 1 : Number.POSITIVE_INFINITY - let size = 0 - return start - - /** @type {State} */ - function start(code) { - if (markdownSpace(code)) { - effects.enter(type) - return prefix(code) - } - return ok(code) - } - - /** @type {State} */ - function prefix(code) { - if (markdownSpace(code) && size++ < limit) { - effects.consume(code) - return prefix - } - effects.exit(type) - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - -/** @type {InitialConstruct} */ -const content = { - tokenize: initializeContent -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeContent(effects) { - const contentStart = effects.attempt( - this.parser.constructs.contentInitial, - afterContentStartConstruct, - paragraphInitial - ) - /** @type {Token} */ - let previous - return contentStart - - /** @type {State} */ - function afterContentStartConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, contentStart, 'linePrefix') - } - - /** @type {State} */ - function paragraphInitial(code) { - effects.enter('paragraph') - return lineStart(code) - } - - /** @type {State} */ - function lineStart(code) { - const token = effects.enter('chunkText', { - contentType: 'text', - previous - }) - if (previous) { - previous.next = token - } - previous = token - return data(code) - } - - /** @type {State} */ - function data(code) { - if (code === null) { - effects.exit('chunkText') - effects.exit('paragraph') - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - effects.exit('chunkText') - return lineStart - } - - // Data. - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - -/** - * @typedef {[Construct, ContainerState]} StackItem - */ - - - - -/** @type {InitialConstruct} */ -const document_document = { - tokenize: initializeDocument -} - -/** @type {Construct} */ -const containerConstruct = { - tokenize: tokenizeContainer -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeDocument(effects) { - const self = this - /** @type {Array<StackItem>} */ - const stack = [] - let continued = 0 - /** @type {TokenizeContext | undefined} */ - let childFlow - /** @type {Token | undefined} */ - let childToken - /** @type {number} */ - let lineStartOffset - return start - - /** @type {State} */ - function start(code) { - // First we iterate through the open blocks, starting with the root - // document, and descending through last children down to the last open - // block. - // Each block imposes a condition that the line must satisfy if the block is - // to remain open. - // For example, a block quote requires a `>` character. - // A paragraph requires a non-blank line. - // In this phase we may match all or just some of the open blocks. - // But we cannot close unmatched blocks yet, because we may have a lazy - // continuation line. - if (continued < stack.length) { - const item = stack[continued] - self.containerState = item[1] - return effects.attempt( - item[0].continuation, - documentContinue, - checkNewContainers - )(code) - } - - // Done. - return checkNewContainers(code) - } - - /** @type {State} */ - function documentContinue(code) { - continued++ - - // Note: this field is called `_closeFlow` but it also closes containers. - // Perhaps a good idea to rename it but it’s already used in the wild by - // extensions. - if (self.containerState._closeFlow) { - self.containerState._closeFlow = undefined - if (childFlow) { - closeFlow() - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when dealing with lazy lines in `writeToChild`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {Point | undefined} */ - let point - - // Find the flow chunk. - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - point = self.events[indexBeforeFlow][1].end - break - } - } - exitContainers(continued) - - // Fix positions. - let index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - return checkNewContainers(code) - } - return start(code) - } - - /** @type {State} */ - function checkNewContainers(code) { - // Next, after consuming the continuation markers for existing blocks, we - // look for new block starts (e.g. `>` for a block quote). - // If we encounter a new block start, we close any blocks unmatched in - // step 1 before creating the new block as a child of the last matched - // block. - if (continued === stack.length) { - // No need to `check` whether there’s a container, of `exitContainers` - // would be moot. - // We can instead immediately `attempt` to parse one. - if (!childFlow) { - return documentContinued(code) - } - - // If we have concrete content, such as block HTML or fenced code, - // we can’t have containers “pierce” into them, so we can immediately - // start. - if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { - return flowStart(code) - } - - // If we do have flow, it could still be a blank line, - // but we’d be interrupting it w/ a new container if there’s a current - // construct. - // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer - // needed in micromark-extension-gfm-table@1.0.6). - self.interrupt = Boolean( - childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack - ) - } - - // Check if there is a new container. - self.containerState = {} - return effects.check( - containerConstruct, - thereIsANewContainer, - thereIsNoNewContainer - )(code) - } - - /** @type {State} */ - function thereIsANewContainer(code) { - if (childFlow) closeFlow() - exitContainers(continued) - return documentContinued(code) - } - - /** @type {State} */ - function thereIsNoNewContainer(code) { - self.parser.lazy[self.now().line] = continued !== stack.length - lineStartOffset = self.now().offset - return flowStart(code) - } - - /** @type {State} */ - function documentContinued(code) { - // Try new containers. - self.containerState = {} - return effects.attempt( - containerConstruct, - containerContinue, - flowStart - )(code) - } - - /** @type {State} */ - function containerContinue(code) { - continued++ - stack.push([self.currentConstruct, self.containerState]) - // Try another. - return documentContinued(code) - } - - /** @type {State} */ - function flowStart(code) { - if (code === null) { - if (childFlow) closeFlow() - exitContainers(0) - effects.consume(code) - return - } - childFlow = childFlow || self.parser.flow(self.now()) - effects.enter('chunkFlow', { - contentType: 'flow', - previous: childToken, - _tokenizer: childFlow - }) - return flowContinue(code) - } - - /** @type {State} */ - function flowContinue(code) { - if (code === null) { - writeToChild(effects.exit('chunkFlow'), true) - exitContainers(0) - effects.consume(code) - return - } - if (markdownLineEnding(code)) { - effects.consume(code) - writeToChild(effects.exit('chunkFlow')) - // Get ready for the next line. - continued = 0 - self.interrupt = undefined - return start - } - effects.consume(code) - return flowContinue - } - - /** - * @param {Token} token - * @param {boolean | undefined} [eof] - * @returns {void} - */ - function writeToChild(token, eof) { - const stream = self.sliceStream(token) - if (eof) stream.push(null) - token.previous = childToken - if (childToken) childToken.next = token - childToken = token - childFlow.defineSkip(token.start) - childFlow.write(stream) - - // Alright, so we just added a lazy line: - // - // ```markdown - // > a - // b. - // - // Or: - // - // > ~~~c - // d - // - // Or: - // - // > | e | - // f - // ``` - // - // The construct in the second example (fenced code) does not accept lazy - // lines, so it marked itself as done at the end of its first line, and - // then the content construct parses `d`. - // Most constructs in markdown match on the first line: if the first line - // forms a construct, a non-lazy line can’t “unmake” it. - // - // The construct in the third example is potentially a GFM table, and - // those are *weird*. - // It *could* be a table, from the first line, if the following line - // matches a condition. - // In this case, that second line is lazy, which “unmakes” the first line - // and turns the whole into one content block. - // - // We’ve now parsed the non-lazy and the lazy line, and can figure out - // whether the lazy line started a new flow block. - // If it did, we exit the current containers between the two flow blocks. - if (self.parser.lazy[token.start.line]) { - let index = childFlow.events.length - while (index--) { - if ( - // The token starts before the line ending… - childFlow.events[index][1].start.offset < lineStartOffset && - // …and either is not ended yet… - (!childFlow.events[index][1].end || - // …or ends after it. - childFlow.events[index][1].end.offset > lineStartOffset) - ) { - // Exit: there’s still something open, which means it’s a lazy line - // part of something. - return - } - } - - // Note: this algorithm for moving events around is similar to the - // algorithm when closing flow in `documentContinue`. - const indexBeforeExits = self.events.length - let indexBeforeFlow = indexBeforeExits - /** @type {boolean | undefined} */ - let seen - /** @type {Point | undefined} */ - let point - - // Find the previous chunk (the one before the lazy line). - while (indexBeforeFlow--) { - if ( - self.events[indexBeforeFlow][0] === 'exit' && - self.events[indexBeforeFlow][1].type === 'chunkFlow' - ) { - if (seen) { - point = self.events[indexBeforeFlow][1].end - break - } - seen = true - } - } - exitContainers(continued) - - // Fix positions. - index = indexBeforeExits - while (index < self.events.length) { - self.events[index][1].end = Object.assign({}, point) - index++ - } - - // Inject the exits earlier (they’re still also at the end). - splice( - self.events, - indexBeforeFlow + 1, - 0, - self.events.slice(indexBeforeExits) - ) - - // Discard the duplicate exits. - self.events.length = index - } - } - - /** - * @param {number} size - * @returns {void} - */ - function exitContainers(size) { - let index = stack.length - - // Exit open containers. - while (index-- > size) { - const entry = stack[index] - self.containerState = entry[1] - entry[0].exit.call(self, effects) - } - stack.length = size - } - function closeFlow() { - childFlow.write([null]) - childToken = undefined - childFlow = undefined - self.containerState._closeFlow = undefined - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContainer(effects, ok, nok) { - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(this.parser.constructs.document, ok, nok), - 'linePrefix', - this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blankLine = { - tokenize: tokenizeBlankLine, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLine(effects, ok, nok) { - return start - - /** - * Start of blank line. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - return markdownSpace(code) - ? factorySpace(effects, after, 'linePrefix')(code) - : after(code) - } - - /** - * At eof/eol, after optional whitespace. - * - * > 👉 **Note**: `␠` represents a space character. - * - * ```markdown - * > | ␠␠␊ - * ^ - * > | ␊ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Token} Token - */ - - -/** - * Tokenize subcontent. - * - * @param {Array<Event>} events - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -function subtokenize(events) { - /** @type {Record<string, number>} */ - const jumps = {} - let index = -1 - /** @type {Event} */ - let event - /** @type {number | undefined} */ - let lineIndex - /** @type {number} */ - let otherIndex - /** @type {Event} */ - let otherEvent - /** @type {Array<Event>} */ - let parameters - /** @type {Array<Event>} */ - let subevents - /** @type {boolean | undefined} */ - let more - while (++index < events.length) { - while (index in jumps) { - index = jumps[index] - } - event = events[index] - - // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. - if ( - index && - event[1].type === 'chunkFlow' && - events[index - 1][1].type === 'listItemPrefix' - ) { - subevents = event[1]._tokenizer.events - otherIndex = 0 - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'lineEndingBlank' - ) { - otherIndex += 2 - } - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'content' - ) { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === 'content') { - break - } - if (subevents[otherIndex][1].type === 'chunkText') { - subevents[otherIndex][1]._isInFirstContentOfListItem = true - otherIndex++ - } - } - } - } - - // Enter. - if (event[0] === 'enter') { - if (event[1].contentType) { - Object.assign(jumps, subcontent(events, index)) - index = jumps[index] - more = true - } - } - // Exit. - else if (event[1]._container) { - otherIndex = index - lineIndex = undefined - while (otherIndex--) { - otherEvent = events[otherIndex] - if ( - otherEvent[1].type === 'lineEnding' || - otherEvent[1].type === 'lineEndingBlank' - ) { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - } - otherEvent[1].type = 'lineEnding' - lineIndex = otherIndex - } - } else { - break - } - } - if (lineIndex) { - // Fix position. - event[1].end = Object.assign({}, events[lineIndex][1].start) - - // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index) - parameters.unshift(event) - splice(events, lineIndex, index - lineIndex + 1, parameters) - } - } - } - return !more -} - -/** - * Tokenize embedded tokens. - * - * @param {Array<Event>} events - * @param {number} eventIndex - * @returns {Record<string, number>} - */ -function subcontent(events, eventIndex) { - const token = events[eventIndex][1] - const context = events[eventIndex][2] - let startPosition = eventIndex - 1 - /** @type {Array<number>} */ - const startPositions = [] - const tokenizer = - token._tokenizer || context.parser[token.contentType](token.start) - const childEvents = tokenizer.events - /** @type {Array<[number, number]>} */ - const jumps = [] - /** @type {Record<string, number>} */ - const gaps = {} - /** @type {Array<Chunk>} */ - let stream - /** @type {Token | undefined} */ - let previous - let index = -1 - /** @type {Token | undefined} */ - let current = token - let adjust = 0 - let start = 0 - const breaks = [start] - - // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. - while (current) { - // Find the position of the event for this token. - while (events[++startPosition][1] !== current) { - // Empty. - } - startPositions.push(startPosition) - if (!current._tokenizer) { - stream = context.sliceStream(current) - if (!current.next) { - stream.push(null) - } - if (previous) { - tokenizer.defineSkip(current.start) - } - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true - } - tokenizer.write(stream) - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined - } - } - - // Unravel the next token. - previous = current - current = current.next - } - - // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. - current = token - while (++index < childEvents.length) { - if ( - // Find a void token that includes a break. - childEvents[index][0] === 'exit' && - childEvents[index - 1][0] === 'enter' && - childEvents[index][1].type === childEvents[index - 1][1].type && - childEvents[index][1].start.line !== childEvents[index][1].end.line - ) { - start = index + 1 - breaks.push(start) - // Help GC. - current._tokenizer = undefined - current.previous = undefined - current = current.next - } - } - - // Help GC. - tokenizer.events = [] - - // If there’s one more token (which is the cases for lines that end in an - // EOF), that’s perfect: the last point we found starts it. - // If there isn’t then make sure any remaining content is added to it. - if (current) { - // Help GC. - current._tokenizer = undefined - current.previous = undefined - } else { - breaks.pop() - } - - // Now splice the events from the subtokenizer into the current events, - // moving back to front so that splice indices aren’t affected. - index = breaks.length - while (index--) { - const slice = childEvents.slice(breaks[index], breaks[index + 1]) - const start = startPositions.pop() - jumps.unshift([start, start + slice.length - 1]) - splice(events, start, 2, slice) - } - index = -1 - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] - adjust += jumps[index][1] - jumps[index][0] - 1 - } - return gaps -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** - * No name because it must not be turned off. - * @type {Construct} - */ -const content_content = { - tokenize: tokenizeContent, - resolve: resolveContent -} - -/** @type {Construct} */ -const continuationConstruct = { - tokenize: tokenizeContinuation, - partial: true -} - -/** - * Content is transparent: it’s parsed right now. That way, definitions are also - * parsed right now: before text in paragraphs (specifically, media) are parsed. - * - * @type {Resolver} - */ -function resolveContent(events) { - subtokenize(events) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContent(effects, ok) { - /** @type {Token | undefined} */ - let previous - return chunkStart - - /** - * Before a content chunk. - * - * ```markdown - * > | abc - * ^ - * ``` - * - * @type {State} - */ - function chunkStart(code) { - effects.enter('content') - previous = effects.enter('chunkContent', { - contentType: 'content' - }) - return chunkInside(code) - } - - /** - * In a content chunk. - * - * ```markdown - * > | abc - * ^^^ - * ``` - * - * @type {State} - */ - function chunkInside(code) { - if (code === null) { - return contentEnd(code) - } - - // To do: in `markdown-rs`, each line is parsed on its own, and everything - // is stitched together resolving. - if (markdownLineEnding(code)) { - return effects.check( - continuationConstruct, - contentContinue, - contentEnd - )(code) - } - - // Data. - effects.consume(code) - return chunkInside - } - - /** - * - * - * @type {State} - */ - function contentEnd(code) { - effects.exit('chunkContent') - effects.exit('content') - return ok(code) - } - - /** - * - * - * @type {State} - */ - function contentContinue(code) { - effects.consume(code) - effects.exit('chunkContent') - previous.next = effects.enter('chunkContent', { - contentType: 'content', - previous - }) - previous = previous.next - return chunkInside - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeContinuation(effects, ok, nok) { - const self = this - return startLookahead - - /** - * - * - * @type {State} - */ - function startLookahead(code) { - effects.exit('chunkContent') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, prefixed, 'linePrefix') - } - - /** - * - * - * @type {State} - */ - function prefixed(code) { - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - - // Always populated by defaults. - - const tail = self.events[self.events.length - 1] - if ( - !self.parser.constructs.disable.null.includes('codeIndented') && - tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ) { - return ok(code) - } - return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js -/** - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - - - - -/** @type {InitialConstruct} */ -const flow = { - tokenize: initializeFlow -} - -/** - * @this {TokenizeContext} - * @type {Initializer} - */ -function initializeFlow(effects) { - const self = this - const initial = effects.attempt( - // Try to parse a blank line. - blankLine, - atBlankEnding, - // Try to parse initial flow (essentially, only code). - effects.attempt( - this.parser.constructs.flowInitial, - afterConstruct, - factorySpace( - effects, - effects.attempt( - this.parser.constructs.flow, - afterConstruct, - effects.attempt(content_content, afterConstruct) - ), - 'linePrefix' - ) - ) - ) - return initial - - /** @type {State} */ - function atBlankEnding(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEndingBlank') - effects.consume(code) - effects.exit('lineEndingBlank') - self.currentConstruct = undefined - return initial - } - - /** @type {State} */ - function afterConstruct(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - self.currentConstruct = undefined - return initial - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').Initializer} Initializer - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -const resolver = { - resolveAll: createResolver() -} -const string = initializeFactory('string') -const text_text = initializeFactory('text') - -/** - * @param {'string' | 'text'} field - * @returns {InitialConstruct} - */ -function initializeFactory(field) { - return { - tokenize: initializeText, - resolveAll: createResolver( - field === 'text' ? resolveAllLineSuffixes : undefined - ) - } - - /** - * @this {TokenizeContext} - * @type {Initializer} - */ - function initializeText(effects) { - const self = this - const constructs = this.parser.constructs[field] - const text = effects.attempt(constructs, start, notText) - return start - - /** @type {State} */ - function start(code) { - return atBreak(code) ? text(code) : notText(code) - } - - /** @type {State} */ - function notText(code) { - if (code === null) { - effects.consume(code) - return - } - effects.enter('data') - effects.consume(code) - return data - } - - /** @type {State} */ - function data(code) { - if (atBreak(code)) { - effects.exit('data') - return text(code) - } - - // Data. - effects.consume(code) - return data - } - - /** - * @param {Code} code - * @returns {boolean} - */ - function atBreak(code) { - if (code === null) { - return true - } - const list = constructs[code] - let index = -1 - if (list) { - // Always populated by defaults. - - while (++index < list.length) { - const item = list[index] - if (!item.previous || item.previous.call(self, self.previous)) { - return true - } - } - } - return false - } - } -} - -/** - * @param {Resolver | undefined} [extraResolver] - * @returns {Resolver} - */ -function createResolver(extraResolver) { - return resolveAllText - - /** @type {Resolver} */ - function resolveAllText(events, context) { - let index = -1 - /** @type {number | undefined} */ - let enter - - // A rather boring computation (to merge adjacent `data` events) which - // improves mm performance by 29%. - while (++index <= events.length) { - if (enter === undefined) { - if (events[index] && events[index][1].type === 'data') { - enter = index - index++ - } - } else if (!events[index] || events[index][1].type !== 'data') { - // Don’t do anything if there is one data token. - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - index = enter + 2 - } - enter = undefined - } - } - return extraResolver ? extraResolver(events, context) : events - } -} - -/** - * A rather ugly set of instructions which again looks at chunks in the input - * stream. - * The reason to do this here is that it is *much* faster to parse in reverse. - * And that we can’t hook into `null` to split the line suffix before an EOF. - * To do: figure out if we can make this into a clean utility, or even in core. - * As it will be useful for GFMs literal autolink extension (and maybe even - * tables?) - * - * @type {Resolver} - */ -function resolveAllLineSuffixes(events, context) { - let eventIndex = 0 // Skip first. - - while (++eventIndex <= events.length) { - if ( - (eventIndex === events.length || - events[eventIndex][1].type === 'lineEnding') && - events[eventIndex - 1][1].type === 'data' - ) { - const data = events[eventIndex - 1][1] - const chunks = context.sliceStream(data) - let index = chunks.length - let bufferIndex = -1 - let size = 0 - /** @type {boolean | undefined} */ - let tabs - while (index--) { - const chunk = chunks[index] - if (typeof chunk === 'string') { - bufferIndex = chunk.length - while (chunk.charCodeAt(bufferIndex - 1) === 32) { - size++ - bufferIndex-- - } - if (bufferIndex) break - bufferIndex = -1 - } - // Number - else if (chunk === -2) { - tabs = true - size++ - } else if (chunk === -1) { - // Empty - } else { - // Replacement character, exit. - index++ - break - } - } - if (size) { - const token = { - type: - eventIndex === events.length || tabs || size < 2 - ? 'lineSuffix' - : 'hardBreakTrailing', - start: { - line: data.end.line, - column: data.end.column - size, - offset: data.end.offset - size, - _index: data.start._index + index, - _bufferIndex: index - ? bufferIndex - : data.start._bufferIndex + bufferIndex - }, - end: Object.assign({}, data.end) - } - data.end = Object.assign({}, token.start) - if (data.start.offset === data.end.offset) { - Object.assign(data, token) - } else { - events.splice( - eventIndex, - 0, - ['enter', token, context], - ['exit', token, context] - ) - eventIndex += 2 - } - } - eventIndex++ - } - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js -/** - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * Call all `resolveAll`s. - * - * @param {Array<{resolveAll?: Resolver | undefined}>} constructs - * List of constructs, optionally with `resolveAll`s. - * @param {Array<Event>} events - * List of events. - * @param {TokenizeContext} context - * Context used by `tokenize`. - * @returns {Array<Event>} - * Changed events. - */ -function resolveAll(constructs, events, context) { - /** @type {Array<Resolver>} */ - const called = [] - let index = -1 - - while (++index < constructs.length) { - const resolve = constructs[index].resolveAll - - if (resolve && !called.includes(resolve)) { - events = resolve(events, context) - called.push(resolve) - } - } - - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenType} TokenType - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - */ - -/** - * @callback Restore - * @returns {void} - * - * @typedef Info - * @property {Restore} restore - * @property {number} from - * - * @callback ReturnHandle - * Handle a successful run. - * @param {Construct} construct - * @param {Info} info - * @returns {void} - */ - - - - -/** - * Create a tokenizer. - * Tokenizers deal with one type of data (e.g., containers, flow, text). - * The parser is the object dealing with it all. - * `initialize` works like other constructs, except that only its `tokenize` - * function is used, in which case it doesn’t receive an `ok` or `nok`. - * `from` can be given to set the point before the first character, although - * when further lines are indented, they must be set with `defineSkip`. - * - * @param {ParseContext} parser - * @param {InitialConstruct} initialize - * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] - * @returns {TokenizeContext} - */ -function createTokenizer(parser, initialize, from) { - /** @type {Point} */ - let point = Object.assign( - from - ? Object.assign({}, from) - : { - line: 1, - column: 1, - offset: 0 - }, - { - _index: 0, - _bufferIndex: -1 - } - ) - /** @type {Record<string, number>} */ - const columnStart = {} - /** @type {Array<Construct>} */ - const resolveAllConstructs = [] - /** @type {Array<Chunk>} */ - let chunks = [] - /** @type {Array<Token>} */ - let stack = [] - /** @type {boolean | undefined} */ - let consumed = true - - /** - * Tools used for tokenizing. - * - * @type {Effects} - */ - const effects = { - consume, - enter, - exit, - attempt: constructFactory(onsuccessfulconstruct), - check: constructFactory(onsuccessfulcheck), - interrupt: constructFactory(onsuccessfulcheck, { - interrupt: true - }) - } - - /** - * State and tools for resolving and serializing. - * - * @type {TokenizeContext} - */ - const context = { - previous: null, - code: null, - containerState: {}, - events: [], - parser, - sliceStream, - sliceSerialize, - now, - defineSkip, - write - } - - /** - * The state function. - * - * @type {State | void} - */ - let state = initialize.tokenize.call(context, effects) - - /** - * Track which character we expect to be consumed, to catch bugs. - * - * @type {Code} - */ - let expectedCode - if (initialize.resolveAll) { - resolveAllConstructs.push(initialize) - } - return context - - /** @type {TokenizeContext['write']} */ - function write(slice) { - chunks = push(chunks, slice) - main() - - // Exit if we’re not done, resolve might change stuff. - if (chunks[chunks.length - 1] !== null) { - return [] - } - addResult(initialize, 0) - - // Otherwise, resolve, and exit. - context.events = resolveAll(resolveAllConstructs, context.events, context) - return context.events - } - - // - // Tools. - // - - /** @type {TokenizeContext['sliceSerialize']} */ - function sliceSerialize(token, expandTabs) { - return serializeChunks(sliceStream(token), expandTabs) - } - - /** @type {TokenizeContext['sliceStream']} */ - function sliceStream(token) { - return sliceChunks(chunks, token) - } - - /** @type {TokenizeContext['now']} */ - function now() { - // This is a hot path, so we clone manually instead of `Object.assign({}, point)` - const {line, column, offset, _index, _bufferIndex} = point - return { - line, - column, - offset, - _index, - _bufferIndex - } - } - - /** @type {TokenizeContext['defineSkip']} */ - function defineSkip(value) { - columnStart[value.line] = value.column - accountForPotentialSkip() - } - - // - // State management. - // - - /** - * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by - * `consume`). - * Here is where we walk through the chunks, which either include strings of - * several characters, or numerical character codes. - * The reason to do this in a loop instead of a call is so the stack can - * drain. - * - * @returns {void} - */ - function main() { - /** @type {number} */ - let chunkIndex - while (point._index < chunks.length) { - const chunk = chunks[point._index] - - // If we’re in a buffer chunk, loop through it. - if (typeof chunk === 'string') { - chunkIndex = point._index - if (point._bufferIndex < 0) { - point._bufferIndex = 0 - } - while ( - point._index === chunkIndex && - point._bufferIndex < chunk.length - ) { - go(chunk.charCodeAt(point._bufferIndex)) - } - } else { - go(chunk) - } - } - } - - /** - * Deal with one code. - * - * @param {Code} code - * @returns {void} - */ - function go(code) { - consumed = undefined - expectedCode = code - state = state(code) - } - - /** @type {Effects['consume']} */ - function consume(code) { - if (markdownLineEnding(code)) { - point.line++ - point.column = 1 - point.offset += code === -3 ? 2 : 1 - accountForPotentialSkip() - } else if (code !== -1) { - point.column++ - point.offset++ - } - - // Not in a string chunk. - if (point._bufferIndex < 0) { - point._index++ - } else { - point._bufferIndex++ - - // At end of string chunk. - // @ts-expect-error Points w/ non-negative `_bufferIndex` reference - // strings. - if (point._bufferIndex === chunks[point._index].length) { - point._bufferIndex = -1 - point._index++ - } - } - - // Expose the previous character. - context.previous = code - - // Mark as consumed. - consumed = true - } - - /** @type {Effects['enter']} */ - function enter(type, fields) { - /** @type {Token} */ - // @ts-expect-error Patch instead of assign required fields to help GC. - const token = fields || {} - token.type = type - token.start = now() - context.events.push(['enter', token, context]) - stack.push(token) - return token - } - - /** @type {Effects['exit']} */ - function exit(type) { - const token = stack.pop() - token.end = now() - context.events.push(['exit', token, context]) - return token - } - - /** - * Use results. - * - * @type {ReturnHandle} - */ - function onsuccessfulconstruct(construct, info) { - addResult(construct, info.from) - } - - /** - * Discard results. - * - * @type {ReturnHandle} - */ - function onsuccessfulcheck(_, info) { - info.restore() - } - - /** - * Factory to attempt/check/interrupt. - * - * @param {ReturnHandle} onreturn - * @param {{interrupt?: boolean | undefined} | undefined} [fields] - */ - function constructFactory(onreturn, fields) { - return hook - - /** - * Handle either an object mapping codes to constructs, a list of - * constructs, or a single construct. - * - * @param {Array<Construct> | Construct | ConstructRecord} constructs - * @param {State} returnState - * @param {State | undefined} [bogusState] - * @returns {State} - */ - function hook(constructs, returnState, bogusState) { - /** @type {Array<Construct>} */ - let listOfConstructs - /** @type {number} */ - let constructIndex - /** @type {Construct} */ - let currentConstruct - /** @type {Info} */ - let info - return Array.isArray(constructs) /* c8 ignore next 1 */ - ? handleListOfConstructs(constructs) - : 'tokenize' in constructs - ? // @ts-expect-error Looks like a construct. - handleListOfConstructs([constructs]) - : handleMapOfConstructs(constructs) - - /** - * Handle a list of construct. - * - * @param {ConstructRecord} map - * @returns {State} - */ - function handleMapOfConstructs(map) { - return start - - /** @type {State} */ - function start(code) { - const def = code !== null && map[code] - const all = code !== null && map.null - const list = [ - // To do: add more extension tests. - /* c8 ignore next 2 */ - ...(Array.isArray(def) ? def : def ? [def] : []), - ...(Array.isArray(all) ? all : all ? [all] : []) - ] - return handleListOfConstructs(list)(code) - } - } - - /** - * Handle a list of construct. - * - * @param {Array<Construct>} list - * @returns {State} - */ - function handleListOfConstructs(list) { - listOfConstructs = list - constructIndex = 0 - if (list.length === 0) { - return bogusState - } - return handleConstruct(list[constructIndex]) - } - - /** - * Handle a single construct. - * - * @param {Construct} construct - * @returns {State} - */ - function handleConstruct(construct) { - return start - - /** @type {State} */ - function start(code) { - // To do: not needed to store if there is no bogus state, probably? - // Currently doesn’t work because `inspect` in document does a check - // w/o a bogus, which doesn’t make sense. But it does seem to help perf - // by not storing. - info = store() - currentConstruct = construct - if (!construct.partial) { - context.currentConstruct = construct - } - - // Always populated by defaults. - - if ( - construct.name && - context.parser.constructs.disable.null.includes(construct.name) - ) { - return nok(code) - } - return construct.tokenize.call( - // If we do have fields, create an object w/ `context` as its - // prototype. - // This allows a “live binding”, which is needed for `interrupt`. - fields ? Object.assign(Object.create(context), fields) : context, - effects, - ok, - nok - )(code) - } - } - - /** @type {State} */ - function ok(code) { - consumed = true - onreturn(currentConstruct, info) - return returnState - } - - /** @type {State} */ - function nok(code) { - consumed = true - info.restore() - if (++constructIndex < listOfConstructs.length) { - return handleConstruct(listOfConstructs[constructIndex]) - } - return bogusState - } - } - } - - /** - * @param {Construct} construct - * @param {number} from - * @returns {void} - */ - function addResult(construct, from) { - if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { - resolveAllConstructs.push(construct) - } - if (construct.resolve) { - splice( - context.events, - from, - context.events.length - from, - construct.resolve(context.events.slice(from), context) - ) - } - if (construct.resolveTo) { - context.events = construct.resolveTo(context.events, context) - } - } - - /** - * Store state. - * - * @returns {Info} - */ - function store() { - const startPoint = now() - const startPrevious = context.previous - const startCurrentConstruct = context.currentConstruct - const startEventsIndex = context.events.length - const startStack = Array.from(stack) - return { - restore, - from: startEventsIndex - } - - /** - * Restore state. - * - * @returns {void} - */ - function restore() { - point = startPoint - context.previous = startPrevious - context.currentConstruct = startCurrentConstruct - context.events.length = startEventsIndex - stack = startStack - accountForPotentialSkip() - } - } - - /** - * Move the current point a bit forward in the line when it’s on a column - * skip. - * - * @returns {void} - */ - function accountForPotentialSkip() { - if (point.line in columnStart && point.column < 2) { - point.column = columnStart[point.line] - point.offset += columnStart[point.line] - 1 - } - } -} - -/** - * Get the chunks from a slice of chunks in the range of a token. - * - * @param {Array<Chunk>} chunks - * @param {Pick<Token, 'end' | 'start'>} token - * @returns {Array<Chunk>} - */ -function sliceChunks(chunks, token) { - const startIndex = token.start._index - const startBufferIndex = token.start._bufferIndex - const endIndex = token.end._index - const endBufferIndex = token.end._bufferIndex - /** @type {Array<Chunk>} */ - let view - if (startIndex === endIndex) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] - } else { - view = chunks.slice(startIndex, endIndex) - if (startBufferIndex > -1) { - const head = view[0] - if (typeof head === 'string') { - view[0] = head.slice(startBufferIndex) - } else { - view.shift() - } - } - if (endBufferIndex > 0) { - // @ts-expect-error `_bufferIndex` is used on string chunks. - view.push(chunks[endIndex].slice(0, endBufferIndex)) - } - } - return view -} - -/** - * Get the string value of a slice of chunks. - * - * @param {Array<Chunk>} chunks - * @param {boolean | undefined} [expandTabs=false] - * @returns {string} - */ -function serializeChunks(chunks, expandTabs) { - let index = -1 - /** @type {Array<string>} */ - const result = [] - /** @type {boolean | undefined} */ - let atTab - while (++index < chunks.length) { - const chunk = chunks[index] - /** @type {string} */ - let value - if (typeof chunk === 'string') { - value = chunk - } else - switch (chunk) { - case -5: { - value = '\r' - break - } - case -4: { - value = '\n' - break - } - case -3: { - value = '\r' + '\n' - break - } - case -2: { - value = expandTabs ? ' ' : '\t' - break - } - case -1: { - if (!expandTabs && atTab) continue - value = ' ' - break - } - default: { - // Currently only replacement character. - value = String.fromCharCode(chunk) - } - } - atTab = chunk === -2 - result.push(value) - } - return result.join('') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const thematicBreak = { - name: 'thematicBreak', - tokenize: tokenizeThematicBreak -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeThematicBreak(effects, ok, nok) { - let size = 0 - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of thematic break. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('thematicBreak') - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * After optional whitespace, at marker. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - marker = code - return atBreak(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.enter('thematicBreakSequence') - return sequence(code) - } - if (size >= 3 && (code === null || markdownLineEnding(code))) { - effects.exit('thematicBreak') - return ok(code) - } - return nok(code) - } - - /** - * In sequence. - * - * ```markdown - * > | *** - * ^ - * ``` - * - * @type {State} - */ - function sequence(code) { - if (code === marker) { - effects.consume(code) - size++ - return sequence - } - effects.exit('thematicBreakSequence') - return markdownSpace(code) - ? factorySpace(effects, atBreak, 'whitespace')(code) - : atBreak(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').ContainerState} ContainerState - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - -/** @type {Construct} */ -const list = { - name: 'list', - tokenize: tokenizeListStart, - continuation: { - tokenize: tokenizeListContinuation - }, - exit: tokenizeListEnd -} - -/** @type {Construct} */ -const listItemPrefixWhitespaceConstruct = { - tokenize: tokenizeListItemPrefixWhitespace, - partial: true -} - -/** @type {Construct} */ -const indentConstruct = { - tokenize: tokenizeIndent, - partial: true -} - -// To do: `markdown-rs` parses list items on their own and later stitches them -// together. - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListStart(effects, ok, nok) { - const self = this - const tail = self.events[self.events.length - 1] - let initialSize = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - let size = 0 - return start - - /** @type {State} */ - function start(code) { - const kind = - self.containerState.type || - (code === 42 || code === 43 || code === 45 - ? 'listUnordered' - : 'listOrdered') - if ( - kind === 'listUnordered' - ? !self.containerState.marker || code === self.containerState.marker - : asciiDigit(code) - ) { - if (!self.containerState.type) { - self.containerState.type = kind - effects.enter(kind, { - _container: true - }) - } - if (kind === 'listUnordered') { - effects.enter('listItemPrefix') - return code === 42 || code === 45 - ? effects.check(thematicBreak, nok, atMarker)(code) - : atMarker(code) - } - if (!self.interrupt || code === 49) { - effects.enter('listItemPrefix') - effects.enter('listItemValue') - return inside(code) - } - } - return nok(code) - } - - /** @type {State} */ - function inside(code) { - if (asciiDigit(code) && ++size < 10) { - effects.consume(code) - return inside - } - if ( - (!self.interrupt || size < 2) && - (self.containerState.marker - ? code === self.containerState.marker - : code === 41 || code === 46) - ) { - effects.exit('listItemValue') - return atMarker(code) - } - return nok(code) - } - - /** - * @type {State} - **/ - function atMarker(code) { - effects.enter('listItemMarker') - effects.consume(code) - effects.exit('listItemMarker') - self.containerState.marker = self.containerState.marker || code - return effects.check( - blankLine, - // Can’t be empty when interrupting. - self.interrupt ? nok : onBlank, - effects.attempt( - listItemPrefixWhitespaceConstruct, - endOfPrefix, - otherPrefix - ) - ) - } - - /** @type {State} */ - function onBlank(code) { - self.containerState.initialBlankLine = true - initialSize++ - return endOfPrefix(code) - } - - /** @type {State} */ - function otherPrefix(code) { - if (markdownSpace(code)) { - effects.enter('listItemPrefixWhitespace') - effects.consume(code) - effects.exit('listItemPrefixWhitespace') - return endOfPrefix - } - return nok(code) - } - - /** @type {State} */ - function endOfPrefix(code) { - self.containerState.size = - initialSize + - self.sliceSerialize(effects.exit('listItemPrefix'), true).length - return ok(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListContinuation(effects, ok, nok) { - const self = this - self.containerState._closeFlow = undefined - return effects.check(blankLine, onBlank, notBlank) - - /** @type {State} */ - function onBlank(code) { - self.containerState.furtherBlankLines = - self.containerState.furtherBlankLines || - self.containerState.initialBlankLine - - // We have a blank line. - // Still, try to consume at most the items size. - return factorySpace( - effects, - ok, - 'listItemIndent', - self.containerState.size + 1 - )(code) - } - - /** @type {State} */ - function notBlank(code) { - if (self.containerState.furtherBlankLines || !markdownSpace(code)) { - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return notInCurrentItem(code) - } - self.containerState.furtherBlankLines = undefined - self.containerState.initialBlankLine = undefined - return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) - } - - /** @type {State} */ - function notInCurrentItem(code) { - // While we do continue, we signal that the flow should be closed. - self.containerState._closeFlow = true - // As we’re closing flow, we’re no longer interrupting. - self.interrupt = undefined - // Always populated by defaults. - - return factorySpace( - effects, - effects.attempt(list, ok, nok), - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeIndent(effects, ok, nok) { - const self = this - return factorySpace( - effects, - afterPrefix, - 'listItemIndent', - self.containerState.size + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'listItemIndent' && - tail[2].sliceSerialize(tail[1], true).length === self.containerState.size - ? ok(code) - : nok(code) - } -} - -/** - * @type {Exiter} - * @this {TokenizeContext} - */ -function tokenizeListEnd(effects) { - effects.exit(this.containerState.type) -} - -/** - * @type {Tokenizer} - * @this {TokenizeContext} - */ -function tokenizeListItemPrefixWhitespace(effects, ok, nok) { - const self = this - - // Always populated by defaults. - - return factorySpace( - effects, - afterPrefix, - 'listItemPrefixWhitespace', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 + 1 - ) - - /** @type {State} */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return !markdownSpace(code) && - tail && - tail[1].type === 'listItemPrefixWhitespace' - ? ok(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Exiter} Exiter - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const blockQuote = { - name: 'blockQuote', - tokenize: tokenizeBlockQuoteStart, - continuation: { - tokenize: tokenizeBlockQuoteContinuation - }, - exit -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteStart(effects, ok, nok) { - const self = this - return start - - /** - * Start of block quote. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 62) { - const state = self.containerState - if (!state.open) { - effects.enter('blockQuote', { - _container: true - }) - state.open = true - } - effects.enter('blockQuotePrefix') - effects.enter('blockQuoteMarker') - effects.consume(code) - effects.exit('blockQuoteMarker') - return after - } - return nok(code) - } - - /** - * After `>`, before optional whitespace. - * - * ```markdown - * > | > a - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownSpace(code)) { - effects.enter('blockQuotePrefixWhitespace') - effects.consume(code) - effects.exit('blockQuotePrefixWhitespace') - effects.exit('blockQuotePrefix') - return ok - } - effects.exit('blockQuotePrefix') - return ok(code) - } -} - -/** - * Start of block quote continuation. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlockQuoteContinuation(effects, ok, nok) { - const self = this - return contStart - - /** - * Start of block quote continuation. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contStart(code) { - if (markdownSpace(code)) { - // Always populated by defaults. - - return factorySpace( - effects, - contBefore, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - } - return contBefore(code) - } - - /** - * At `>`, after optional whitespace. - * - * Also used to parse the first block quote opening. - * - * ```markdown - * | > a - * > | > b - * ^ - * ``` - * - * @type {State} - */ - function contBefore(code) { - return effects.attempt(blockQuote, ok, nok)(code) - } -} - -/** @type {Exiter} */ -function exit(effects) { - effects.exit('blockQuote') -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * <a> - * <a\>b> - * <a b> - * <a)> - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`<a>` or `b`). - * @param {TokenType} literalType - * Type when enclosed (`<a>`). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryDestination( - effects, - ok, - nok, - type, - literalType, - literalMarkerType, - rawType, - stringType, - max -) { - const limit = max || Number.POSITIVE_INFINITY - let balance = 0 - return start - - /** - * Start of destination. - * - * ```markdown - * > | <aa> - * ^ - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 60) { - effects.enter(type) - effects.enter(literalType) - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - return enclosedBefore - } - - // ASCII control, space, closing paren. - if (code === null || code === 32 || code === 41 || asciiControl(code)) { - return nok(code) - } - effects.enter(type) - effects.enter(rawType) - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return raw(code) - } - - /** - * After `<`, at an enclosed destination. - * - * ```markdown - * > | <aa> - * ^ - * ``` - * - * @type {State} - */ - function enclosedBefore(code) { - if (code === 62) { - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - effects.exit(literalType) - effects.exit(type) - return ok - } - effects.enter(stringType) - effects.enter('chunkString', { - contentType: 'string' - }) - return enclosed(code) - } - - /** - * In enclosed destination. - * - * ```markdown - * > | <aa> - * ^ - * ``` - * - * @type {State} - */ - function enclosed(code) { - if (code === 62) { - effects.exit('chunkString') - effects.exit(stringType) - return enclosedBefore(code) - } - if (code === null || code === 60 || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? enclosedEscape : enclosed - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | <a\*a> - * ^ - * ``` - * - * @type {State} - */ - function enclosedEscape(code) { - if (code === 60 || code === 62 || code === 92) { - effects.consume(code) - return enclosed - } - return enclosed(code) - } - - /** - * In raw destination. - * - * ```markdown - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function raw(code) { - if ( - !balance && - (code === null || code === 41 || markdownLineEndingOrSpace(code)) - ) { - effects.exit('chunkString') - effects.exit(stringType) - effects.exit(rawType) - effects.exit(type) - return ok(code) - } - if (balance < limit && code === 40) { - effects.consume(code) - balance++ - return raw - } - if (code === 41) { - effects.consume(code) - balance-- - return raw - } - - // ASCII control (but *not* `\0`) and space and `(`. - // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it - // doesn’t. - if (code === null || code === 32 || code === 40 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return code === 92 ? rawEscape : raw - } - - /** - * After `\`, at special character. - * - * ```markdown - * > | a\*a - * ^ - * ``` - * - * @type {State} - */ - function rawEscape(code) { - if (code === 40 || code === 41 || code === 92) { - effects.consume(code) - return raw - } - return raw(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryLabel(effects, ok, nok, type, markerType, stringType) { - const self = this - let size = 0 - /** @type {boolean} */ - let seen - return start - - /** - * Start of label. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.enter(stringType) - return atBreak - } - - /** - * In label, at something, before something else. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if ( - size > 999 || - code === null || - code === 91 || - (code === 93 && !seen) || - // To do: remove in the future once we’ve switched from - // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, - // which doesn’t need this. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - (code === 94 && - !size && - '_hiddenFootnoteSupport' in self.parser.constructs) - ) { - return nok(code) - } - if (code === 93) { - effects.exit(stringType) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - - // To do: indent? Link chunks and EOLs together? - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return atBreak - } - effects.enter('chunkString', { - contentType: 'string' - }) - return labelInside(code) - } - - /** - * In label, in text. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function labelInside(code) { - if ( - code === null || - code === 91 || - code === 93 || - markdownLineEnding(code) || - size++ > 999 - ) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - if (!seen) seen = !markdownSpace(code) - return code === 92 ? labelEscape : labelInside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | [a\*a] - * ^ - * ``` - * - * @type {State} - */ - function labelEscape(code) { - if (code === 91 || code === 92 || code === 93) { - effects.consume(code) - size++ - return labelInside - } - return labelInside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenType} TokenType - */ - - - -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ // eslint-disable-next-line max-params -function factoryTitle(effects, ok, nok, type, markerType, stringType) { - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of title. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 34 || code === 39 || code === 40) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - marker = code === 40 ? 41 : code - return begin - } - return nok(code) - } - - /** - * After opening marker. - * - * This is also used at the closing marker. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function begin(code) { - if (code === marker) { - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - effects.enter(stringType) - return atBreak(code) - } - - /** - * At something, before something else. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.exit(stringType) - return begin(marker) - } - if (code === null) { - return nok(code) - } - - // Note: blank lines can’t exist in content. - if (markdownLineEnding(code)) { - // To do: use `space_or_tab_eol_with_options`, connect. - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, atBreak, 'linePrefix') - } - effects.enter('chunkString', { - contentType: 'string' - }) - return inside(code) - } - - /** - * - * - * @type {State} - */ - function inside(code) { - if (code === marker || code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - return atBreak(code) - } - effects.consume(code) - return code === 92 ? escape : inside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | "a\*b" - * ^ - * ``` - * - * @type {State} - */ - function escape(code) { - if (code === marker || code === 92) { - effects.consume(code) - return inside - } - return inside(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js -/** - * @typedef {import('micromark-util-types').Effects} Effects - * @typedef {import('micromark-util-types').State} State - */ - - - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns - * Start state. - */ -function factoryWhitespace(effects, ok) { - /** @type {boolean} */ - let seen - return start - - /** @type {State} */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - seen = true - return start - } - if (markdownSpace(code)) { - return factorySpace( - effects, - start, - seen ? 'linePrefix' : 'lineSuffix' - )(code) - } - return ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -function normalizeIdentifier(value) { - return ( - value - // Collapse markdown whitespace. - .replace(/[\t\n\r ]+/g, ' ') - // Trim. - .replace(/^ | $/g, '') - // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase() - .toUpperCase() - ) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - -/** @type {Construct} */ -const definition = { - name: 'definition', - tokenize: tokenizeDefinition -} - -/** @type {Construct} */ -const titleBefore = { - tokenize: tokenizeTitleBefore, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeDefinition(effects, ok, nok) { - const self = this - /** @type {string} */ - let identifier - return start - - /** - * At start of a definition. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Do not interrupt paragraphs (but do follow definitions). - // To do: do `interrupt` the way `markdown-rs` does. - // To do: parse whitespace the way `markdown-rs` does. - effects.enter('definition') - return before(code) - } - - /** - * After optional whitespace, at `[`. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - // To do: parse whitespace the way `markdown-rs` does. - - return factoryLabel.call( - self, - effects, - labelAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionLabel', - 'definitionLabelMarker', - 'definitionLabelString' - )(code) - } - - /** - * After label. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function labelAfter(code) { - identifier = normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - if (code === 58) { - effects.enter('definitionMarker') - effects.consume(code) - effects.exit('definitionMarker') - return markerAfter - } - return nok(code) - } - - /** - * After marker. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function markerAfter(code) { - // Note: whitespace is optional. - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, destinationBefore)(code) - : destinationBefore(code) - } - - /** - * Before destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationBefore(code) { - return factoryDestination( - effects, - destinationAfter, - // Note: we don’t need to reset the way `markdown-rs` does. - nok, - 'definitionDestination', - 'definitionDestinationLiteral', - 'definitionDestinationLiteralMarker', - 'definitionDestinationRaw', - 'definitionDestinationString' - )(code) - } - - /** - * After destination. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function destinationAfter(code) { - return effects.attempt(titleBefore, after, after)(code) - } - - /** - * After definition. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return markdownSpace(code) - ? factorySpace(effects, afterWhitespace, 'whitespace')(code) - : afterWhitespace(code) - } - - /** - * After definition, after optional whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function afterWhitespace(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('definition') - - // Note: we don’t care about uniqueness. - // It’s likely that that doesn’t happen very frequently. - // It is more likely that it wastes precious time. - self.parser.defined.push(identifier) - - // To do: `markdown-rs` interrupt. - // // You’d be interrupting. - // tokenizer.interrupt = true - return ok(code) - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeTitleBefore(effects, ok, nok) { - return titleBefore - - /** - * After destination, at whitespace. - * - * ```markdown - * > | [a]: b - * ^ - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, beforeMarker)(code) - : nok(code) - } - - /** - * At title. - * - * ```markdown - * | [a]: b - * > | "c" - * ^ - * ``` - * - * @type {State} - */ - function beforeMarker(code) { - return factoryTitle( - effects, - titleAfter, - nok, - 'definitionTitle', - 'definitionTitleMarker', - 'definitionTitleString' - )(code) - } - - /** - * After title. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfter(code) { - return markdownSpace(code) - ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) - : titleAfterOptionalWhitespace(code) - } - - /** - * After title, after optional whitespace. - * - * ```markdown - * > | [a]: b "c" - * ^ - * ``` - * - * @type {State} - */ - function titleAfterOptionalWhitespace(code) { - return code === null || markdownLineEnding(code) ? ok(code) : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const codeIndented = { - name: 'codeIndented', - tokenize: tokenizeCodeIndented -} - -/** @type {Construct} */ -const furtherStart = { - tokenize: tokenizeFurtherStart, - partial: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeIndented(effects, ok, nok) { - const self = this - return start - - /** - * Start of code (indented). - * - * > **Parsing note**: it is not needed to check if this first line is a - * > filled line (that it has a non-whitespace character), because blank lines - * > are parsed already, so we never run into that. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: manually check if interrupting like `markdown-rs`. - - effects.enter('codeIndented') - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? atBreak(code) - : nok(code) - } - - /** - * At a break. - * - * ```markdown - * > | aaa - * ^ ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === null) { - return after(code) - } - if (markdownLineEnding(code)) { - return effects.attempt(furtherStart, atBreak, after)(code) - } - effects.enter('codeFlowValue') - return inside(code) - } - - /** - * In code content. - * - * ```markdown - * > | aaa - * ^^^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return atBreak(code) - } - effects.consume(code) - return inside - } - - /** @type {State} */ - function after(code) { - effects.exit('codeIndented') - // To do: allow interrupting like `markdown-rs`. - // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeFurtherStart(effects, ok, nok) { - const self = this - return furtherStart - - /** - * At eol, trying to parse another indent. - * - * ```markdown - * > | aaa - * ^ - * | bbb - * ``` - * - * @type {State} - */ - function furtherStart(code) { - // To do: improve `lazy` / `pierce` handling. - // If this is a lazy line, it can’t be code. - if (self.parser.lazy[self.now().line]) { - return nok(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return furtherStart - } - - // To do: the code here in `micromark-js` is a bit different from - // `markdown-rs` because there it can attempt spaces. - // We can’t yet. - // - // To do: use an improved `space_or_tab` function like `markdown-rs`, - // so that we can drop the next state. - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) - } - - /** - * At start, after 1 or 4 spaces. - * - * ```markdown - * > | aaa - * ^ - * ``` - * - * @type {State} - */ - function afterPrefix(code) { - const tail = self.events[self.events.length - 1] - return tail && - tail[1].type === 'linePrefix' && - tail[2].sliceSerialize(tail[1], true).length >= 4 - ? ok(code) - : markdownLineEnding(code) - ? furtherStart(code) - : nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const headingAtx = { - name: 'headingAtx', - tokenize: tokenizeHeadingAtx, - resolve: resolveHeadingAtx -} - -/** @type {Resolver} */ -function resolveHeadingAtx(events, context) { - let contentEnd = events.length - 2 - let contentStart = 3 - /** @type {Token} */ - let content - /** @type {Token} */ - let text - - // Prefix whitespace, part of the opening. - if (events[contentStart][1].type === 'whitespace') { - contentStart += 2 - } - - // Suffix whitespace, part of the closing. - if ( - contentEnd - 2 > contentStart && - events[contentEnd][1].type === 'whitespace' - ) { - contentEnd -= 2 - } - if ( - events[contentEnd][1].type === 'atxHeadingSequence' && - (contentStart === contentEnd - 1 || - (contentEnd - 4 > contentStart && - events[contentEnd - 2][1].type === 'whitespace')) - ) { - contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 - } - if (contentEnd > contentStart) { - content = { - type: 'atxHeadingText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end - } - text = { - type: 'chunkText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end, - contentType: 'text' - } - splice(events, contentStart, contentEnd - contentStart + 1, [ - ['enter', content, context], - ['enter', text, context], - ['exit', text, context], - ['exit', content, context] - ]) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHeadingAtx(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of a heading (atx). - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - effects.enter('atxHeading') - return before(code) - } - - /** - * After optional whitespace, at `#`. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('atxHeadingSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 35 && size++ < 6) { - effects.consume(code) - return sequenceOpen - } - - // Always at least one `#`. - if (code === null || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingSequence') - return atBreak(code) - } - return nok(code) - } - - /** - * After something, before something else. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === 35) { - effects.enter('atxHeadingSequence') - return sequenceFurther(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('atxHeading') - // To do: interrupt like `markdown-rs`. - // // Feel free to interrupt. - // tokenizer.interrupt = false - return ok(code) - } - if (markdownSpace(code)) { - return factorySpace(effects, atBreak, 'whitespace')(code) - } - - // To do: generate `data` tokens, add the `text` token later. - // Needs edit map, see: `markdown.rs`. - effects.enter('atxHeadingText') - return data(code) - } - - /** - * In further sequence (after whitespace). - * - * Could be normal “visible” hashes in the heading or a final sequence. - * - * ```markdown - * > | ## aa ## - * ^ - * ``` - * - * @type {State} - */ - function sequenceFurther(code) { - if (code === 35) { - effects.consume(code) - return sequenceFurther - } - effects.exit('atxHeadingSequence') - return atBreak(code) - } - - /** - * In text. - * - * ```markdown - * > | ## aa - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { - effects.exit('atxHeadingText') - return atBreak(code) - } - effects.consume(code) - return data - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const setextUnderline = { - name: 'setextUnderline', - tokenize: tokenizeSetextUnderline, - resolveTo: resolveToSetextUnderline -} - -/** @type {Resolver} */ -function resolveToSetextUnderline(events, context) { - // To do: resolve like `markdown-rs`. - let index = events.length - /** @type {number | undefined} */ - let content - /** @type {number | undefined} */ - let text - /** @type {number | undefined} */ - let definition - - // Find the opening of the content. - // It’ll always exist: we don’t tokenize if it isn’t there. - while (index--) { - if (events[index][0] === 'enter') { - if (events[index][1].type === 'content') { - content = index - break - } - if (events[index][1].type === 'paragraph') { - text = index - } - } - // Exit - else { - if (events[index][1].type === 'content') { - // Remove the content end (if needed we’ll add it later) - events.splice(index, 1) - } - if (!definition && events[index][1].type === 'definition') { - definition = index - } - } - } - const heading = { - type: 'setextHeading', - start: Object.assign({}, events[text][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - - // Change the paragraph to setext heading text. - events[text][1].type = 'setextHeadingText' - - // If we have definitions in the content, we’ll keep on having content, - // but we need move it. - if (definition) { - events.splice(text, 0, ['enter', heading, context]) - events.splice(definition + 1, 0, ['exit', events[content][1], context]) - events[content][1].end = Object.assign({}, events[definition][1].end) - } else { - events[content][1] = heading - } - - // Add the heading exit at the end. - events.push(['exit', heading, context]) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeSetextUnderline(effects, ok, nok) { - const self = this - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * At start of heading (setext) underline. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - let index = self.events.length - /** @type {boolean | undefined} */ - let paragraph - // Find an opening. - while (index--) { - // Skip enter/exit of line ending, line prefix, and content. - // We can now either have a definition or a paragraph. - if ( - self.events[index][1].type !== 'lineEnding' && - self.events[index][1].type !== 'linePrefix' && - self.events[index][1].type !== 'content' - ) { - paragraph = self.events[index][1].type === 'paragraph' - break - } - } - - // To do: handle lazy/pierce like `markdown-rs`. - // To do: parse indent like `markdown-rs`. - if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { - effects.enter('setextHeadingLine') - marker = code - return before(code) - } - return nok(code) - } - - /** - * After optional whitespace, at `-` or `=`. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('setextHeadingLineSequence') - return inside(code) - } - - /** - * In sequence. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - effects.exit('setextHeadingLineSequence') - return markdownSpace(code) - ? factorySpace(effects, after, 'lineSuffix')(code) - : after(code) - } - - /** - * After sequence, after optional whitespace. - * - * ```markdown - * | aa - * > | == - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('setextHeadingLine') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js -/** - * List of lowercase HTML “block” tag names. - * - * The list, when parsing HTML (flow), results in more relaxed rules (condition - * 6). - * Because they are known blocks, the HTML-like syntax doesn’t have to be - * strictly parsed. - * For tag names not in this list, a more strict algorithm (condition 7) is used - * to detect whether the HTML-like syntax is seen as HTML (flow) or not. - * - * This is copied from: - * <https://spec.commonmark.org/0.30/#html-blocks>. - * - * > 👉 **Note**: `search` was added in `CommonMark@0.31`. - */ -const htmlBlockNames = [ - 'address', - 'article', - 'aside', - 'base', - 'basefont', - 'blockquote', - 'body', - 'caption', - 'center', - 'col', - 'colgroup', - 'dd', - 'details', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'frame', - 'frameset', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hr', - 'html', - 'iframe', - 'legend', - 'li', - 'link', - 'main', - 'menu', - 'menuitem', - 'nav', - 'noframes', - 'ol', - 'optgroup', - 'option', - 'p', - 'param', - 'search', - 'section', - 'summary', - 'table', - 'tbody', - 'td', - 'tfoot', - 'th', - 'thead', - 'title', - 'tr', - 'track', - 'ul' -] - -/** - * List of lowercase HTML “raw” tag names. - * - * The list, when parsing HTML (flow), results in HTML that can include lines - * without exiting, until a closing tag also in this list is found (condition - * 1). - * - * This module is copied from: - * <https://spec.commonmark.org/0.30/#html-blocks>. - * - * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - */ -const htmlRawNames = ['pre', 'script', 'style', 'textarea'] - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - -/** @type {Construct} */ -const htmlFlow = { - name: 'htmlFlow', - tokenize: tokenizeHtmlFlow, - resolveTo: resolveToHtmlFlow, - concrete: true -} - -/** @type {Construct} */ -const blankLineBefore = { - tokenize: tokenizeBlankLineBefore, - partial: true -} -const nonLazyContinuationStart = { - tokenize: tokenizeNonLazyContinuationStart, - partial: true -} - -/** @type {Resolver} */ -function resolveToHtmlFlow(events) { - let index = events.length - while (index--) { - if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { - break - } - } - if (index > 1 && events[index - 2][1].type === 'linePrefix') { - // Add the prefix start to the HTML token. - events[index][1].start = events[index - 2][1].start - // Add the prefix start to the HTML line token. - events[index + 1][1].start = events[index - 2][1].start - // Remove the line prefix. - events.splice(index - 2, 2) - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlFlow(effects, ok, nok) { - const self = this - /** @type {number} */ - let marker - /** @type {boolean} */ - let closingTag - /** @type {string} */ - let buffer - /** @type {number} */ - let index - /** @type {Code} */ - let markerB - return start - - /** - * Start of HTML (flow). - * - * ```markdown - * > | <x /> - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse indent like `markdown-rs`. - return before(code) - } - - /** - * At `<`, after optional whitespace. - * - * ```markdown - * > | <x /> - * ^ - * ``` - * - * @type {State} - */ - function before(code) { - effects.enter('htmlFlow') - effects.enter('htmlFlowData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | <x /> - * ^ - * > | <!doctype> - * ^ - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - closingTag = true - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - marker = 3 - // To do: - // tokenizer.concrete = true - // To do: use `markdown-rs` style interrupt. - // While we’re in an instruction instead of a declaration, we’re on a `?` - // right now, so we do need to search for `>`, similar to declarations. - return self.interrupt ? ok : continuationDeclarationInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After `<!`, at declaration, comment, or CDATA. - * - * ```markdown - * > | <!doctype> - * ^ - * > | <!--xxx--> - * ^ - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - marker = 2 - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - marker = 5 - index = 0 - return cdataOpenInside - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - marker = 4 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After `<!-`, inside a comment, at another `-`. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuationDeclarationInside - } - return nok(code) - } - - /** - * After `<![`, inside CDATA, expecting `CDATA[`. - * - * ```markdown - * > | <![CDATA[>&<]]> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - if (index === value.length) { - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return cdataOpenInside - } - return nok(code) - } - - /** - * After `</`, in closing tag, at tag name. - * - * ```markdown - * > | </x> - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - if (asciiAlpha(code)) { - effects.consume(code) - // @ts-expect-error: not null. - buffer = String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * In tag name. - * - * ```markdown - * > | <ab> - * ^^ - * > | </ab> - * ^^ - * ``` - * - * @type {State} - */ - function tagName(code) { - if ( - code === null || - code === 47 || - code === 62 || - markdownLineEndingOrSpace(code) - ) { - const slash = code === 47 - const name = buffer.toLowerCase() - if (!slash && !closingTag && htmlRawNames.includes(name)) { - marker = 1 - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - if (htmlBlockNames.includes(buffer.toLowerCase())) { - marker = 6 - if (slash) { - effects.consume(code) - return basicSelfClosing - } - - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok(code) : continuation(code) - } - marker = 7 - // Do not support complete HTML when interrupting. - return self.interrupt && !self.parser.lazy[self.now().line] - ? nok(code) - : closingTag - ? completeClosingTagAfter(code) - : completeAttributeNameBefore(code) - } - - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - buffer += String.fromCharCode(code) - return tagName - } - return nok(code) - } - - /** - * After closing slash of a basic tag name. - * - * ```markdown - * > | <div/> - * ^ - * ``` - * - * @type {State} - */ - function basicSelfClosing(code) { - if (code === 62) { - effects.consume(code) - // // Do not form containers. - // tokenizer.concrete = true - return self.interrupt ? ok : continuation - } - return nok(code) - } - - /** - * After closing slash of a complete tag name. - * - * ```markdown - * > | <x/> - * ^ - * ``` - * - * @type {State} - */ - function completeClosingTagAfter(code) { - if (markdownSpace(code)) { - effects.consume(code) - return completeClosingTagAfter - } - return completeEnd(code) - } - - /** - * At an attribute name. - * - * At first, this state is used after a complete tag name, after whitespace, - * where it expects optional attributes or the end of the tag. - * It is also reused after attributes, when expecting more optional - * attributes. - * - * ```markdown - * > | <a /> - * ^ - * > | <a :b> - * ^ - * > | <a _b> - * ^ - * > | <a b> - * ^ - * > | <a > - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameBefore(code) { - if (code === 47) { - effects.consume(code) - return completeEnd - } - - // ASCII alphanumerical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return completeAttributeName - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameBefore - } - return completeEnd(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | <a :b> - * ^ - * > | <a _b> - * ^ - * > | <a b> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeName(code) { - // ASCII alphanumerical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return completeAttributeName - } - return completeAttributeNameAfter(code) - } - - /** - * After attribute name, at an optional initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | <a b> - * ^ - * > | <a b=c> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return completeAttributeValueBefore - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeNameAfter - } - return completeAttributeNameBefore(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | <a b=c> - * ^ - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - markerB = code - return completeAttributeValueQuoted - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAttributeValueBefore - } - return completeAttributeValueUnquoted(code) - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | <a b="c"> - * ^ - * > | <a b='c'> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuoted(code) { - if (code === markerB) { - effects.consume(code) - markerB = null - return completeAttributeValueQuotedAfter - } - if (code === null || markdownLineEnding(code)) { - return nok(code) - } - effects.consume(code) - return completeAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | <a b=c> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 47 || - code === 60 || - code === 61 || - code === 62 || - code === 96 || - markdownLineEndingOrSpace(code) - ) { - return completeAttributeNameAfter(code) - } - effects.consume(code) - return completeAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the - * end of the tag. - * - * ```markdown - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownSpace(code)) { - return completeAttributeNameBefore(code) - } - return nok(code) - } - - /** - * In certain circumstances of a complete tag where only an `>` is allowed. - * - * ```markdown - * > | <a b="c"> - * ^ - * ``` - * - * @type {State} - */ - function completeEnd(code) { - if (code === 62) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * After `>` in a complete tag. - * - * ```markdown - * > | <x> - * ^ - * ``` - * - * @type {State} - */ - function completeAfter(code) { - if (code === null || markdownLineEnding(code)) { - // // Do not form containers. - // tokenizer.concrete = true - return continuation(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return completeAfter - } - return nok(code) - } - - /** - * In continuation of any HTML kind. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function continuation(code) { - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationCommentInside - } - if (code === 60 && marker === 1) { - effects.consume(code) - return continuationRawTagOpen - } - if (code === 62 && marker === 4) { - effects.consume(code) - return continuationClose - } - if (code === 63 && marker === 3) { - effects.consume(code) - return continuationDeclarationInside - } - if (code === 93 && marker === 5) { - effects.consume(code) - return continuationCdataInside - } - if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { - effects.exit('htmlFlowData') - return effects.check( - blankLineBefore, - continuationAfter, - continuationStart - )(code) - } - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationStart(code) - } - effects.consume(code) - return continuation - } - - /** - * In continuation, at eol. - * - * ```markdown - * > | <x> - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStart(code) { - return effects.check( - nonLazyContinuationStart, - continuationStartNonLazy, - continuationAfter - )(code) - } - - /** - * In continuation, at eol, before non-lazy content. - * - * ```markdown - * > | <x> - * ^ - * | asd - * ``` - * - * @type {State} - */ - function continuationStartNonLazy(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return continuationBefore - } - - /** - * In continuation, before non-lazy content. - * - * ```markdown - * | <x> - * > | asd - * ^ - * ``` - * - * @type {State} - */ - function continuationBefore(code) { - if (code === null || markdownLineEnding(code)) { - return continuationStart(code) - } - effects.enter('htmlFlowData') - return continuation(code) - } - - /** - * In comment continuation, after one `-`, expecting another. - * - * ```markdown - * > | <!--xxx--> - * ^ - * ``` - * - * @type {State} - */ - function continuationCommentInside(code) { - if (code === 45) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In raw continuation, after `<`, at `/`. - * - * ```markdown - * > | <script>console.log(1)</script> - * ^ - * ``` - * - * @type {State} - */ - function continuationRawTagOpen(code) { - if (code === 47) { - effects.consume(code) - buffer = '' - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In raw continuation, after `</`, in a raw tag name. - * - * ```markdown - * > | <script>console.log(1)</script> - * ^^^^^^ - * ``` - * - * @type {State} - */ - function continuationRawEndTag(code) { - if (code === 62) { - const name = buffer.toLowerCase() - if (htmlRawNames.includes(name)) { - effects.consume(code) - return continuationClose - } - return continuation(code) - } - if (asciiAlpha(code) && buffer.length < 8) { - effects.consume(code) - // @ts-expect-error: not null. - buffer += String.fromCharCode(code) - return continuationRawEndTag - } - return continuation(code) - } - - /** - * In cdata continuation, after `]`, expecting `]>`. - * - * ```markdown - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationCdataInside(code) { - if (code === 93) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In declaration or instruction continuation, at `>`. - * - * ```markdown - * > | <!--> - * ^ - * > | <?> - * ^ - * > | <!q> - * ^ - * > | <!--ab--> - * ^ - * > | <![CDATA[>&<]]> - * ^ - * ``` - * - * @type {State} - */ - function continuationDeclarationInside(code) { - if (code === 62) { - effects.consume(code) - return continuationClose - } - - // More dashes. - if (code === 45 && marker === 2) { - effects.consume(code) - return continuationDeclarationInside - } - return continuation(code) - } - - /** - * In closed continuation: everything we get until the eol/eof is part of it. - * - * ```markdown - * > | <!doctype> - * ^ - * ``` - * - * @type {State} - */ - function continuationClose(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('htmlFlowData') - return continuationAfter(code) - } - effects.consume(code) - return continuationClose - } - - /** - * Done. - * - * ```markdown - * > | <!doctype> - * ^ - * ``` - * - * @type {State} - */ - function continuationAfter(code) { - effects.exit('htmlFlow') - // // Feel free to interrupt. - // tokenizer.interrupt = false - // // No longer concrete. - // tokenizer.concrete = false - return ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuationStart(effects, ok, nok) { - const self = this - return start - - /** - * At eol, before continuation. - * - * ```markdown - * > | * ```js - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return after - } - return nok(code) - } - - /** - * A continuation. - * - * ```markdown - * | * ```js - * > | b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeBlankLineBefore(effects, ok, nok) { - return start - - /** - * Before eol, expecting blank line. - * - * ```markdown - * > | <div> - * ^ - * | - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return effects.attempt(blankLine, ok, nok) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const nonLazyContinuation = { - tokenize: tokenizeNonLazyContinuation, - partial: true -} - -/** @type {Construct} */ -const codeFenced = { - name: 'codeFenced', - tokenize: tokenizeCodeFenced, - concrete: true -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeFenced(effects, ok, nok) { - const self = this - /** @type {Construct} */ - const closeStart = { - tokenize: tokenizeCloseStart, - partial: true - } - let initialPrefix = 0 - let sizeOpen = 0 - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Start of code. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function start(code) { - // To do: parse whitespace like `markdown-rs`. - return beforeSequenceOpen(code) - } - - /** - * In opening fence, after prefix, at sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeSequenceOpen(code) { - const tail = self.events[self.events.length - 1] - initialPrefix = - tail && tail[1].type === 'linePrefix' - ? tail[2].sliceSerialize(tail[1], true).length - : 0 - marker = code - effects.enter('codeFenced') - effects.enter('codeFencedFence') - effects.enter('codeFencedFenceSequence') - return sequenceOpen(code) - } - - /** - * In opening fence sequence. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === marker) { - sizeOpen++ - effects.consume(code) - return sequenceOpen - } - if (sizeOpen < 3) { - return nok(code) - } - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, infoBefore, 'whitespace')(code) - : infoBefore(code) - } - - /** - * In opening fence, after the sequence (and optional whitespace), before info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function infoBefore(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return self.interrupt - ? ok(code) - : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFencedFenceInfo') - effects.enter('chunkString', { - contentType: 'string' - }) - return info(code) - } - - /** - * In info. - * - * ```markdown - * > | ~~~js - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function info(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return infoBefore(code) - } - if (markdownSpace(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceInfo') - return factorySpace(effects, metaBefore, 'whitespace')(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return info - } - - /** - * In opening fence, after info and whitespace, before meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function metaBefore(code) { - if (code === null || markdownLineEnding(code)) { - return infoBefore(code) - } - effects.enter('codeFencedFenceMeta') - effects.enter('chunkString', { - contentType: 'string' - }) - return meta(code) - } - - /** - * In meta. - * - * ```markdown - * > | ~~~js eval - * ^ - * | alert(1) - * | ~~~ - * ``` - * - * @type {State} - */ - function meta(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('chunkString') - effects.exit('codeFencedFenceMeta') - return infoBefore(code) - } - if (code === 96 && code === marker) { - return nok(code) - } - effects.consume(code) - return meta - } - - /** - * At eol/eof in code, before a non-lazy closing fence or content. - * - * ```markdown - * > | ~~~js - * ^ - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function atNonLazyBreak(code) { - return effects.attempt(closeStart, after, contentBefore)(code) - } - - /** - * Before code content, not a closing fence, at eol. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return contentStart - } - - /** - * Before code content, not a closing fence. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentStart(code) { - return initialPrefix > 0 && markdownSpace(code) - ? factorySpace( - effects, - beforeContentChunk, - 'linePrefix', - initialPrefix + 1 - )(code) - : beforeContentChunk(code) - } - - /** - * Before code content, after optional prefix. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^ - * | ~~~ - * ``` - * - * @type {State} - */ - function beforeContentChunk(code) { - if (code === null || markdownLineEnding(code)) { - return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) - } - effects.enter('codeFlowValue') - return contentChunk(code) - } - - /** - * In code content. - * - * ```markdown - * | ~~~js - * > | alert(1) - * ^^^^^^^^ - * | ~~~ - * ``` - * - * @type {State} - */ - function contentChunk(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFlowValue') - return beforeContentChunk(code) - } - effects.consume(code) - return contentChunk - } - - /** - * After code. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - effects.exit('codeFenced') - return ok(code) - } - - /** - * @this {TokenizeContext} - * @type {Tokenizer} - */ - function tokenizeCloseStart(effects, ok, nok) { - let size = 0 - return startBefore - - /** - * - * - * @type {State} - */ - function startBefore(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return start - } - - /** - * Before closing fence, at optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - // Always populated by defaults. - - // To do: `enter` here or in next state? - effects.enter('codeFencedFence') - return markdownSpace(code) - ? factorySpace( - effects, - beforeSequenceClose, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : beforeSequenceClose(code) - } - - /** - * In closing fence, after optional whitespace, at sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function beforeSequenceClose(code) { - if (code === marker) { - effects.enter('codeFencedFenceSequence') - return sequenceClose(code) - } - return nok(code) - } - - /** - * In closing fence sequence. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - if (code === marker) { - size++ - effects.consume(code) - return sequenceClose - } - if (size >= sizeOpen) { - effects.exit('codeFencedFenceSequence') - return markdownSpace(code) - ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) - : sequenceCloseAfter(code) - } - return nok(code) - } - - /** - * After closing fence sequence, after optional whitespace. - * - * ```markdown - * | ~~~js - * | alert(1) - * > | ~~~ - * ^ - * ``` - * - * @type {State} - */ - function sequenceCloseAfter(code) { - if (code === null || markdownLineEnding(code)) { - effects.exit('codeFencedFence') - return ok(code) - } - return nok(code) - } - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeNonLazyContinuation(effects, ok, nok) { - const self = this - return start - - /** - * - * - * @type {State} - */ - function start(code) { - if (code === null) { - return nok(code) - } - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineStart - } - - /** - * - * - * @type {State} - */ - function lineStart(code) { - return self.parser.lazy[self.now().line] ? nok(code) : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/character-entities/index.js -/** - * Map of named character references. - * - * @type {Record<string, string>} - */ -const characterEntities = { - AElig: 'Æ', - AMP: '&', - Aacute: 'Á', - Abreve: 'Ă', - Acirc: 'Â', - Acy: 'А', - Afr: '𝔄', - Agrave: 'À', - Alpha: 'Α', - Amacr: 'Ā', - And: '⩓', - Aogon: 'Ą', - Aopf: '𝔸', - ApplyFunction: '⁡', - Aring: 'Å', - Ascr: '𝒜', - Assign: '≔', - Atilde: 'Ã', - Auml: 'Ä', - Backslash: '∖', - Barv: '⫧', - Barwed: '⌆', - Bcy: 'Б', - Because: '∵', - Bernoullis: 'ℬ', - Beta: 'Β', - Bfr: '𝔅', - Bopf: '𝔹', - Breve: '˘', - Bscr: 'ℬ', - Bumpeq: '≎', - CHcy: 'Ч', - COPY: '©', - Cacute: 'Ć', - Cap: '⋒', - CapitalDifferentialD: 'ⅅ', - Cayleys: 'ℭ', - Ccaron: 'Č', - Ccedil: 'Ç', - Ccirc: 'Ĉ', - Cconint: '∰', - Cdot: 'Ċ', - Cedilla: '¸', - CenterDot: '·', - Cfr: 'ℭ', - Chi: 'Χ', - CircleDot: '⊙', - CircleMinus: '⊖', - CirclePlus: '⊕', - CircleTimes: '⊗', - ClockwiseContourIntegral: '∲', - CloseCurlyDoubleQuote: '”', - CloseCurlyQuote: '’', - Colon: '∷', - Colone: '⩴', - Congruent: '≡', - Conint: '∯', - ContourIntegral: '∮', - Copf: 'ℂ', - Coproduct: '∐', - CounterClockwiseContourIntegral: '∳', - Cross: '⨯', - Cscr: '𝒞', - Cup: '⋓', - CupCap: '≍', - DD: 'ⅅ', - DDotrahd: '⤑', - DJcy: 'Ђ', - DScy: 'Ѕ', - DZcy: 'Џ', - Dagger: '‡', - Darr: '↡', - Dashv: '⫤', - Dcaron: 'Ď', - Dcy: 'Д', - Del: '∇', - Delta: 'Δ', - Dfr: '𝔇', - DiacriticalAcute: '´', - DiacriticalDot: '˙', - DiacriticalDoubleAcute: '˝', - DiacriticalGrave: '`', - DiacriticalTilde: '˜', - Diamond: '⋄', - DifferentialD: 'ⅆ', - Dopf: '𝔻', - Dot: '¨', - DotDot: '⃜', - DotEqual: '≐', - DoubleContourIntegral: '∯', - DoubleDot: '¨', - DoubleDownArrow: '⇓', - DoubleLeftArrow: '⇐', - DoubleLeftRightArrow: '⇔', - DoubleLeftTee: '⫤', - DoubleLongLeftArrow: '⟸', - DoubleLongLeftRightArrow: '⟺', - DoubleLongRightArrow: '⟹', - DoubleRightArrow: '⇒', - DoubleRightTee: '⊨', - DoubleUpArrow: '⇑', - DoubleUpDownArrow: '⇕', - DoubleVerticalBar: '∥', - DownArrow: '↓', - DownArrowBar: '⤓', - DownArrowUpArrow: '⇵', - DownBreve: '̑', - DownLeftRightVector: '⥐', - DownLeftTeeVector: '⥞', - DownLeftVector: '↽', - DownLeftVectorBar: '⥖', - DownRightTeeVector: '⥟', - DownRightVector: '⇁', - DownRightVectorBar: '⥗', - DownTee: '⊤', - DownTeeArrow: '↧', - Downarrow: '⇓', - Dscr: '𝒟', - Dstrok: 'Đ', - ENG: 'Ŋ', - ETH: 'Ð', - Eacute: 'É', - Ecaron: 'Ě', - Ecirc: 'Ê', - Ecy: 'Э', - Edot: 'Ė', - Efr: '𝔈', - Egrave: 'È', - Element: '∈', - Emacr: 'Ē', - EmptySmallSquare: '◻', - EmptyVerySmallSquare: '▫', - Eogon: 'Ę', - Eopf: '𝔼', - Epsilon: 'Ε', - Equal: '⩵', - EqualTilde: '≂', - Equilibrium: '⇌', - Escr: 'ℰ', - Esim: '⩳', - Eta: 'Η', - Euml: 'Ë', - Exists: '∃', - ExponentialE: 'ⅇ', - Fcy: 'Ф', - Ffr: '𝔉', - FilledSmallSquare: '◼', - FilledVerySmallSquare: '▪', - Fopf: '𝔽', - ForAll: '∀', - Fouriertrf: 'ℱ', - Fscr: 'ℱ', - GJcy: 'Ѓ', - GT: '>', - Gamma: 'Γ', - Gammad: 'Ϝ', - Gbreve: 'Ğ', - Gcedil: 'Ģ', - Gcirc: 'Ĝ', - Gcy: 'Г', - Gdot: 'Ġ', - Gfr: '𝔊', - Gg: '⋙', - Gopf: '𝔾', - GreaterEqual: '≥', - GreaterEqualLess: '⋛', - GreaterFullEqual: '≧', - GreaterGreater: '⪢', - GreaterLess: '≷', - GreaterSlantEqual: '⩾', - GreaterTilde: '≳', - Gscr: '𝒢', - Gt: '≫', - HARDcy: 'Ъ', - Hacek: 'ˇ', - Hat: '^', - Hcirc: 'Ĥ', - Hfr: 'ℌ', - HilbertSpace: 'ℋ', - Hopf: 'ℍ', - HorizontalLine: '─', - Hscr: 'ℋ', - Hstrok: 'Ħ', - HumpDownHump: '≎', - HumpEqual: '≏', - IEcy: 'Е', - IJlig: 'IJ', - IOcy: 'Ё', - Iacute: 'Í', - Icirc: 'Î', - Icy: 'И', - Idot: 'İ', - Ifr: 'ℑ', - Igrave: 'Ì', - Im: 'ℑ', - Imacr: 'Ī', - ImaginaryI: 'ⅈ', - Implies: '⇒', - Int: '∬', - Integral: '∫', - Intersection: '⋂', - InvisibleComma: '⁣', - InvisibleTimes: '⁢', - Iogon: 'Į', - Iopf: '𝕀', - Iota: 'Ι', - Iscr: 'ℐ', - Itilde: 'Ĩ', - Iukcy: 'І', - Iuml: 'Ï', - Jcirc: 'Ĵ', - Jcy: 'Й', - Jfr: '𝔍', - Jopf: '𝕁', - Jscr: '𝒥', - Jsercy: 'Ј', - Jukcy: 'Є', - KHcy: 'Х', - KJcy: 'Ќ', - Kappa: 'Κ', - Kcedil: 'Ķ', - Kcy: 'К', - Kfr: '𝔎', - Kopf: '𝕂', - Kscr: '𝒦', - LJcy: 'Љ', - LT: '<', - Lacute: 'Ĺ', - Lambda: 'Λ', - Lang: '⟪', - Laplacetrf: 'ℒ', - Larr: '↞', - Lcaron: 'Ľ', - Lcedil: 'Ļ', - Lcy: 'Л', - LeftAngleBracket: '⟨', - LeftArrow: '←', - LeftArrowBar: '⇤', - LeftArrowRightArrow: '⇆', - LeftCeiling: '⌈', - LeftDoubleBracket: '⟦', - LeftDownTeeVector: '⥡', - LeftDownVector: '⇃', - LeftDownVectorBar: '⥙', - LeftFloor: '⌊', - LeftRightArrow: '↔', - LeftRightVector: '⥎', - LeftTee: '⊣', - LeftTeeArrow: '↤', - LeftTeeVector: '⥚', - LeftTriangle: '⊲', - LeftTriangleBar: '⧏', - LeftTriangleEqual: '⊴', - LeftUpDownVector: '⥑', - LeftUpTeeVector: '⥠', - LeftUpVector: '↿', - LeftUpVectorBar: '⥘', - LeftVector: '↼', - LeftVectorBar: '⥒', - Leftarrow: '⇐', - Leftrightarrow: '⇔', - LessEqualGreater: '⋚', - LessFullEqual: '≦', - LessGreater: '≶', - LessLess: '⪡', - LessSlantEqual: '⩽', - LessTilde: '≲', - Lfr: '𝔏', - Ll: '⋘', - Lleftarrow: '⇚', - Lmidot: 'Ŀ', - LongLeftArrow: '⟵', - LongLeftRightArrow: '⟷', - LongRightArrow: '⟶', - Longleftarrow: '⟸', - Longleftrightarrow: '⟺', - Longrightarrow: '⟹', - Lopf: '𝕃', - LowerLeftArrow: '↙', - LowerRightArrow: '↘', - Lscr: 'ℒ', - Lsh: '↰', - Lstrok: 'Ł', - Lt: '≪', - Map: '⤅', - Mcy: 'М', - MediumSpace: ' ', - Mellintrf: 'ℳ', - Mfr: '𝔐', - MinusPlus: '∓', - Mopf: '𝕄', - Mscr: 'ℳ', - Mu: 'Μ', - NJcy: 'Њ', - Nacute: 'Ń', - Ncaron: 'Ň', - Ncedil: 'Ņ', - Ncy: 'Н', - NegativeMediumSpace: '​', - NegativeThickSpace: '​', - NegativeThinSpace: '​', - NegativeVeryThinSpace: '​', - NestedGreaterGreater: '≫', - NestedLessLess: '≪', - NewLine: '\n', - Nfr: '𝔑', - NoBreak: '⁠', - NonBreakingSpace: ' ', - Nopf: 'ℕ', - Not: '⫬', - NotCongruent: '≢', - NotCupCap: '≭', - NotDoubleVerticalBar: '∦', - NotElement: '∉', - NotEqual: '≠', - NotEqualTilde: '≂̸', - NotExists: '∄', - NotGreater: '≯', - NotGreaterEqual: '≱', - NotGreaterFullEqual: '≧̸', - NotGreaterGreater: '≫̸', - NotGreaterLess: '≹', - NotGreaterSlantEqual: '⩾̸', - NotGreaterTilde: '≵', - NotHumpDownHump: '≎̸', - NotHumpEqual: '≏̸', - NotLeftTriangle: '⋪', - NotLeftTriangleBar: '⧏̸', - NotLeftTriangleEqual: '⋬', - NotLess: '≮', - NotLessEqual: '≰', - NotLessGreater: '≸', - NotLessLess: '≪̸', - NotLessSlantEqual: '⩽̸', - NotLessTilde: '≴', - NotNestedGreaterGreater: '⪢̸', - NotNestedLessLess: '⪡̸', - NotPrecedes: '⊀', - NotPrecedesEqual: '⪯̸', - NotPrecedesSlantEqual: '⋠', - NotReverseElement: '∌', - NotRightTriangle: '⋫', - NotRightTriangleBar: '⧐̸', - NotRightTriangleEqual: '⋭', - NotSquareSubset: '⊏̸', - NotSquareSubsetEqual: '⋢', - NotSquareSuperset: '⊐̸', - NotSquareSupersetEqual: '⋣', - NotSubset: '⊂⃒', - NotSubsetEqual: '⊈', - NotSucceeds: '⊁', - NotSucceedsEqual: '⪰̸', - NotSucceedsSlantEqual: '⋡', - NotSucceedsTilde: '≿̸', - NotSuperset: '⊃⃒', - NotSupersetEqual: '⊉', - NotTilde: '≁', - NotTildeEqual: '≄', - NotTildeFullEqual: '≇', - NotTildeTilde: '≉', - NotVerticalBar: '∤', - Nscr: '𝒩', - Ntilde: 'Ñ', - Nu: 'Ν', - OElig: 'Œ', - Oacute: 'Ó', - Ocirc: 'Ô', - Ocy: 'О', - Odblac: 'Ő', - Ofr: '𝔒', - Ograve: 'Ò', - Omacr: 'Ō', - Omega: 'Ω', - Omicron: 'Ο', - Oopf: '𝕆', - OpenCurlyDoubleQuote: '“', - OpenCurlyQuote: '‘', - Or: '⩔', - Oscr: '𝒪', - Oslash: 'Ø', - Otilde: 'Õ', - Otimes: '⨷', - Ouml: 'Ö', - OverBar: '‾', - OverBrace: '⏞', - OverBracket: '⎴', - OverParenthesis: '⏜', - PartialD: '∂', - Pcy: 'П', - Pfr: '𝔓', - Phi: 'Φ', - Pi: 'Π', - PlusMinus: '±', - Poincareplane: 'ℌ', - Popf: 'ℙ', - Pr: '⪻', - Precedes: '≺', - PrecedesEqual: '⪯', - PrecedesSlantEqual: '≼', - PrecedesTilde: '≾', - Prime: '″', - Product: '∏', - Proportion: '∷', - Proportional: '∝', - Pscr: '𝒫', - Psi: 'Ψ', - QUOT: '"', - Qfr: '𝔔', - Qopf: 'ℚ', - Qscr: '𝒬', - RBarr: '⤐', - REG: '®', - Racute: 'Ŕ', - Rang: '⟫', - Rarr: '↠', - Rarrtl: '⤖', - Rcaron: 'Ř', - Rcedil: 'Ŗ', - Rcy: 'Р', - Re: 'ℜ', - ReverseElement: '∋', - ReverseEquilibrium: '⇋', - ReverseUpEquilibrium: '⥯', - Rfr: 'ℜ', - Rho: 'Ρ', - RightAngleBracket: '⟩', - RightArrow: '→', - RightArrowBar: '⇥', - RightArrowLeftArrow: '⇄', - RightCeiling: '⌉', - RightDoubleBracket: '⟧', - RightDownTeeVector: '⥝', - RightDownVector: '⇂', - RightDownVectorBar: '⥕', - RightFloor: '⌋', - RightTee: '⊢', - RightTeeArrow: '↦', - RightTeeVector: '⥛', - RightTriangle: '⊳', - RightTriangleBar: '⧐', - RightTriangleEqual: '⊵', - RightUpDownVector: '⥏', - RightUpTeeVector: '⥜', - RightUpVector: '↾', - RightUpVectorBar: '⥔', - RightVector: '⇀', - RightVectorBar: '⥓', - Rightarrow: '⇒', - Ropf: 'ℝ', - RoundImplies: '⥰', - Rrightarrow: '⇛', - Rscr: 'ℛ', - Rsh: '↱', - RuleDelayed: '⧴', - SHCHcy: 'Щ', - SHcy: 'Ш', - SOFTcy: 'Ь', - Sacute: 'Ś', - Sc: '⪼', - Scaron: 'Š', - Scedil: 'Ş', - Scirc: 'Ŝ', - Scy: 'С', - Sfr: '𝔖', - ShortDownArrow: '↓', - ShortLeftArrow: '←', - ShortRightArrow: '→', - ShortUpArrow: '↑', - Sigma: 'Σ', - SmallCircle: '∘', - Sopf: '𝕊', - Sqrt: '√', - Square: '□', - SquareIntersection: '⊓', - SquareSubset: '⊏', - SquareSubsetEqual: '⊑', - SquareSuperset: '⊐', - SquareSupersetEqual: '⊒', - SquareUnion: '⊔', - Sscr: '𝒮', - Star: '⋆', - Sub: '⋐', - Subset: '⋐', - SubsetEqual: '⊆', - Succeeds: '≻', - SucceedsEqual: '⪰', - SucceedsSlantEqual: '≽', - SucceedsTilde: '≿', - SuchThat: '∋', - Sum: '∑', - Sup: '⋑', - Superset: '⊃', - SupersetEqual: '⊇', - Supset: '⋑', - THORN: 'Þ', - TRADE: '™', - TSHcy: 'Ћ', - TScy: 'Ц', - Tab: '\t', - Tau: 'Τ', - Tcaron: 'Ť', - Tcedil: 'Ţ', - Tcy: 'Т', - Tfr: '𝔗', - Therefore: '∴', - Theta: 'Θ', - ThickSpace: '  ', - ThinSpace: ' ', - Tilde: '∼', - TildeEqual: '≃', - TildeFullEqual: '≅', - TildeTilde: '≈', - Topf: '𝕋', - TripleDot: '⃛', - Tscr: '𝒯', - Tstrok: 'Ŧ', - Uacute: 'Ú', - Uarr: '↟', - Uarrocir: '⥉', - Ubrcy: 'Ў', - Ubreve: 'Ŭ', - Ucirc: 'Û', - Ucy: 'У', - Udblac: 'Ű', - Ufr: '𝔘', - Ugrave: 'Ù', - Umacr: 'Ū', - UnderBar: '_', - UnderBrace: '⏟', - UnderBracket: '⎵', - UnderParenthesis: '⏝', - Union: '⋃', - UnionPlus: '⊎', - Uogon: 'Ų', - Uopf: '𝕌', - UpArrow: '↑', - UpArrowBar: '⤒', - UpArrowDownArrow: '⇅', - UpDownArrow: '↕', - UpEquilibrium: '⥮', - UpTee: '⊥', - UpTeeArrow: '↥', - Uparrow: '⇑', - Updownarrow: '⇕', - UpperLeftArrow: '↖', - UpperRightArrow: '↗', - Upsi: 'ϒ', - Upsilon: 'Υ', - Uring: 'Ů', - Uscr: '𝒰', - Utilde: 'Ũ', - Uuml: 'Ü', - VDash: '⊫', - Vbar: '⫫', - Vcy: 'В', - Vdash: '⊩', - Vdashl: '⫦', - Vee: '⋁', - Verbar: '‖', - Vert: '‖', - VerticalBar: '∣', - VerticalLine: '|', - VerticalSeparator: '❘', - VerticalTilde: '≀', - VeryThinSpace: ' ', - Vfr: '𝔙', - Vopf: '𝕍', - Vscr: '𝒱', - Vvdash: '⊪', - Wcirc: 'Ŵ', - Wedge: '⋀', - Wfr: '𝔚', - Wopf: '𝕎', - Wscr: '𝒲', - Xfr: '𝔛', - Xi: 'Ξ', - Xopf: '𝕏', - Xscr: '𝒳', - YAcy: 'Я', - YIcy: 'Ї', - YUcy: 'Ю', - Yacute: 'Ý', - Ycirc: 'Ŷ', - Ycy: 'Ы', - Yfr: '𝔜', - Yopf: '𝕐', - Yscr: '𝒴', - Yuml: 'Ÿ', - ZHcy: 'Ж', - Zacute: 'Ź', - Zcaron: 'Ž', - Zcy: 'З', - Zdot: 'Ż', - ZeroWidthSpace: '​', - Zeta: 'Ζ', - Zfr: 'ℨ', - Zopf: 'ℤ', - Zscr: '𝒵', - aacute: 'á', - abreve: 'ă', - ac: '∾', - acE: '∾̳', - acd: '∿', - acirc: 'â', - acute: '´', - acy: 'а', - aelig: 'æ', - af: '⁡', - afr: '𝔞', - agrave: 'à', - alefsym: 'ℵ', - aleph: 'ℵ', - alpha: 'α', - amacr: 'ā', - amalg: '⨿', - amp: '&', - and: '∧', - andand: '⩕', - andd: '⩜', - andslope: '⩘', - andv: '⩚', - ang: '∠', - ange: '⦤', - angle: '∠', - angmsd: '∡', - angmsdaa: '⦨', - angmsdab: '⦩', - angmsdac: '⦪', - angmsdad: '⦫', - angmsdae: '⦬', - angmsdaf: '⦭', - angmsdag: '⦮', - angmsdah: '⦯', - angrt: '∟', - angrtvb: '⊾', - angrtvbd: '⦝', - angsph: '∢', - angst: 'Å', - angzarr: '⍼', - aogon: 'ą', - aopf: '𝕒', - ap: '≈', - apE: '⩰', - apacir: '⩯', - ape: '≊', - apid: '≋', - apos: "'", - approx: '≈', - approxeq: '≊', - aring: 'å', - ascr: '𝒶', - ast: '*', - asymp: '≈', - asympeq: '≍', - atilde: 'ã', - auml: 'ä', - awconint: '∳', - awint: '⨑', - bNot: '⫭', - backcong: '≌', - backepsilon: '϶', - backprime: '‵', - backsim: '∽', - backsimeq: '⋍', - barvee: '⊽', - barwed: '⌅', - barwedge: '⌅', - bbrk: '⎵', - bbrktbrk: '⎶', - bcong: '≌', - bcy: 'б', - bdquo: '„', - becaus: '∵', - because: '∵', - bemptyv: '⦰', - bepsi: '϶', - bernou: 'ℬ', - beta: 'β', - beth: 'ℶ', - between: '≬', - bfr: '𝔟', - bigcap: '⋂', - bigcirc: '◯', - bigcup: '⋃', - bigodot: '⨀', - bigoplus: '⨁', - bigotimes: '⨂', - bigsqcup: '⨆', - bigstar: '★', - bigtriangledown: '▽', - bigtriangleup: '△', - biguplus: '⨄', - bigvee: '⋁', - bigwedge: '⋀', - bkarow: '⤍', - blacklozenge: '⧫', - blacksquare: '▪', - blacktriangle: '▴', - blacktriangledown: '▾', - blacktriangleleft: '◂', - blacktriangleright: '▸', - blank: '␣', - blk12: '▒', - blk14: '░', - blk34: '▓', - block: '█', - bne: '=⃥', - bnequiv: '≡⃥', - bnot: '⌐', - bopf: '𝕓', - bot: '⊥', - bottom: '⊥', - bowtie: '⋈', - boxDL: '╗', - boxDR: '╔', - boxDl: '╖', - boxDr: '╓', - boxH: '═', - boxHD: '╦', - boxHU: '╩', - boxHd: '╤', - boxHu: '╧', - boxUL: '╝', - boxUR: '╚', - boxUl: '╜', - boxUr: '╙', - boxV: '║', - boxVH: '╬', - boxVL: '╣', - boxVR: '╠', - boxVh: '╫', - boxVl: '╢', - boxVr: '╟', - boxbox: '⧉', - boxdL: '╕', - boxdR: '╒', - boxdl: '┐', - boxdr: '┌', - boxh: '─', - boxhD: '╥', - boxhU: '╨', - boxhd: '┬', - boxhu: '┴', - boxminus: '⊟', - boxplus: '⊞', - boxtimes: '⊠', - boxuL: '╛', - boxuR: '╘', - boxul: '┘', - boxur: '└', - boxv: '│', - boxvH: '╪', - boxvL: '╡', - boxvR: '╞', - boxvh: '┼', - boxvl: '┤', - boxvr: '├', - bprime: '‵', - breve: '˘', - brvbar: '¦', - bscr: '𝒷', - bsemi: '⁏', - bsim: '∽', - bsime: '⋍', - bsol: '\\', - bsolb: '⧅', - bsolhsub: '⟈', - bull: '•', - bullet: '•', - bump: '≎', - bumpE: '⪮', - bumpe: '≏', - bumpeq: '≏', - cacute: 'ć', - cap: '∩', - capand: '⩄', - capbrcup: '⩉', - capcap: '⩋', - capcup: '⩇', - capdot: '⩀', - caps: '∩︀', - caret: '⁁', - caron: 'ˇ', - ccaps: '⩍', - ccaron: 'č', - ccedil: 'ç', - ccirc: 'ĉ', - ccups: '⩌', - ccupssm: '⩐', - cdot: 'ċ', - cedil: '¸', - cemptyv: '⦲', - cent: '¢', - centerdot: '·', - cfr: '𝔠', - chcy: 'ч', - check: '✓', - checkmark: '✓', - chi: 'χ', - cir: '○', - cirE: '⧃', - circ: 'ˆ', - circeq: '≗', - circlearrowleft: '↺', - circlearrowright: '↻', - circledR: '®', - circledS: 'Ⓢ', - circledast: '⊛', - circledcirc: '⊚', - circleddash: '⊝', - cire: '≗', - cirfnint: '⨐', - cirmid: '⫯', - cirscir: '⧂', - clubs: '♣', - clubsuit: '♣', - colon: ':', - colone: '≔', - coloneq: '≔', - comma: ',', - commat: '@', - comp: '∁', - compfn: '∘', - complement: '∁', - complexes: 'ℂ', - cong: '≅', - congdot: '⩭', - conint: '∮', - copf: '𝕔', - coprod: '∐', - copy: '©', - copysr: '℗', - crarr: '↵', - cross: '✗', - cscr: '𝒸', - csub: '⫏', - csube: '⫑', - csup: '⫐', - csupe: '⫒', - ctdot: '⋯', - cudarrl: '⤸', - cudarrr: '⤵', - cuepr: '⋞', - cuesc: '⋟', - cularr: '↶', - cularrp: '⤽', - cup: '∪', - cupbrcap: '⩈', - cupcap: '⩆', - cupcup: '⩊', - cupdot: '⊍', - cupor: '⩅', - cups: '∪︀', - curarr: '↷', - curarrm: '⤼', - curlyeqprec: '⋞', - curlyeqsucc: '⋟', - curlyvee: '⋎', - curlywedge: '⋏', - curren: '¤', - curvearrowleft: '↶', - curvearrowright: '↷', - cuvee: '⋎', - cuwed: '⋏', - cwconint: '∲', - cwint: '∱', - cylcty: '⌭', - dArr: '⇓', - dHar: '⥥', - dagger: '†', - daleth: 'ℸ', - darr: '↓', - dash: '‐', - dashv: '⊣', - dbkarow: '⤏', - dblac: '˝', - dcaron: 'ď', - dcy: 'д', - dd: 'ⅆ', - ddagger: '‡', - ddarr: '⇊', - ddotseq: '⩷', - deg: '°', - delta: 'δ', - demptyv: '⦱', - dfisht: '⥿', - dfr: '𝔡', - dharl: '⇃', - dharr: '⇂', - diam: '⋄', - diamond: '⋄', - diamondsuit: '♦', - diams: '♦', - die: '¨', - digamma: 'ϝ', - disin: '⋲', - div: '÷', - divide: '÷', - divideontimes: '⋇', - divonx: '⋇', - djcy: 'ђ', - dlcorn: '⌞', - dlcrop: '⌍', - dollar: '$', - dopf: '𝕕', - dot: '˙', - doteq: '≐', - doteqdot: '≑', - dotminus: '∸', - dotplus: '∔', - dotsquare: '⊡', - doublebarwedge: '⌆', - downarrow: '↓', - downdownarrows: '⇊', - downharpoonleft: '⇃', - downharpoonright: '⇂', - drbkarow: '⤐', - drcorn: '⌟', - drcrop: '⌌', - dscr: '𝒹', - dscy: 'ѕ', - dsol: '⧶', - dstrok: 'đ', - dtdot: '⋱', - dtri: '▿', - dtrif: '▾', - duarr: '⇵', - duhar: '⥯', - dwangle: '⦦', - dzcy: 'џ', - dzigrarr: '⟿', - eDDot: '⩷', - eDot: '≑', - eacute: 'é', - easter: '⩮', - ecaron: 'ě', - ecir: '≖', - ecirc: 'ê', - ecolon: '≕', - ecy: 'э', - edot: 'ė', - ee: 'ⅇ', - efDot: '≒', - efr: '𝔢', - eg: '⪚', - egrave: 'è', - egs: '⪖', - egsdot: '⪘', - el: '⪙', - elinters: '⏧', - ell: 'ℓ', - els: '⪕', - elsdot: '⪗', - emacr: 'ē', - empty: '∅', - emptyset: '∅', - emptyv: '∅', - emsp13: ' ', - emsp14: ' ', - emsp: ' ', - eng: 'ŋ', - ensp: ' ', - eogon: 'ę', - eopf: '𝕖', - epar: '⋕', - eparsl: '⧣', - eplus: '⩱', - epsi: 'ε', - epsilon: 'ε', - epsiv: 'ϵ', - eqcirc: '≖', - eqcolon: '≕', - eqsim: '≂', - eqslantgtr: '⪖', - eqslantless: '⪕', - equals: '=', - equest: '≟', - equiv: '≡', - equivDD: '⩸', - eqvparsl: '⧥', - erDot: '≓', - erarr: '⥱', - escr: 'ℯ', - esdot: '≐', - esim: '≂', - eta: 'η', - eth: 'ð', - euml: 'ë', - euro: '€', - excl: '!', - exist: '∃', - expectation: 'ℰ', - exponentiale: 'ⅇ', - fallingdotseq: '≒', - fcy: 'ф', - female: '♀', - ffilig: 'ffi', - fflig: 'ff', - ffllig: 'ffl', - ffr: '𝔣', - filig: 'fi', - fjlig: 'fj', - flat: '♭', - fllig: 'fl', - fltns: '▱', - fnof: 'ƒ', - fopf: '𝕗', - forall: '∀', - fork: '⋔', - forkv: '⫙', - fpartint: '⨍', - frac12: '½', - frac13: '⅓', - frac14: '¼', - frac15: '⅕', - frac16: '⅙', - frac18: '⅛', - frac23: '⅔', - frac25: '⅖', - frac34: '¾', - frac35: '⅗', - frac38: '⅜', - frac45: '⅘', - frac56: '⅚', - frac58: '⅝', - frac78: '⅞', - frasl: '⁄', - frown: '⌢', - fscr: '𝒻', - gE: '≧', - gEl: '⪌', - gacute: 'ǵ', - gamma: 'γ', - gammad: 'ϝ', - gap: '⪆', - gbreve: 'ğ', - gcirc: 'ĝ', - gcy: 'г', - gdot: 'ġ', - ge: '≥', - gel: '⋛', - geq: '≥', - geqq: '≧', - geqslant: '⩾', - ges: '⩾', - gescc: '⪩', - gesdot: '⪀', - gesdoto: '⪂', - gesdotol: '⪄', - gesl: '⋛︀', - gesles: '⪔', - gfr: '𝔤', - gg: '≫', - ggg: '⋙', - gimel: 'ℷ', - gjcy: 'ѓ', - gl: '≷', - glE: '⪒', - gla: '⪥', - glj: '⪤', - gnE: '≩', - gnap: '⪊', - gnapprox: '⪊', - gne: '⪈', - gneq: '⪈', - gneqq: '≩', - gnsim: '⋧', - gopf: '𝕘', - grave: '`', - gscr: 'ℊ', - gsim: '≳', - gsime: '⪎', - gsiml: '⪐', - gt: '>', - gtcc: '⪧', - gtcir: '⩺', - gtdot: '⋗', - gtlPar: '⦕', - gtquest: '⩼', - gtrapprox: '⪆', - gtrarr: '⥸', - gtrdot: '⋗', - gtreqless: '⋛', - gtreqqless: '⪌', - gtrless: '≷', - gtrsim: '≳', - gvertneqq: '≩︀', - gvnE: '≩︀', - hArr: '⇔', - hairsp: ' ', - half: '½', - hamilt: 'ℋ', - hardcy: 'ъ', - harr: '↔', - harrcir: '⥈', - harrw: '↭', - hbar: 'ℏ', - hcirc: 'ĥ', - hearts: '♥', - heartsuit: '♥', - hellip: '…', - hercon: '⊹', - hfr: '𝔥', - hksearow: '⤥', - hkswarow: '⤦', - hoarr: '⇿', - homtht: '∻', - hookleftarrow: '↩', - hookrightarrow: '↪', - hopf: '𝕙', - horbar: '―', - hscr: '𝒽', - hslash: 'ℏ', - hstrok: 'ħ', - hybull: '⁃', - hyphen: '‐', - iacute: 'í', - ic: '⁣', - icirc: 'î', - icy: 'и', - iecy: 'е', - iexcl: '¡', - iff: '⇔', - ifr: '𝔦', - igrave: 'ì', - ii: 'ⅈ', - iiiint: '⨌', - iiint: '∭', - iinfin: '⧜', - iiota: '℩', - ijlig: 'ij', - imacr: 'ī', - image: 'ℑ', - imagline: 'ℐ', - imagpart: 'ℑ', - imath: 'ı', - imof: '⊷', - imped: 'Ƶ', - in: '∈', - incare: '℅', - infin: '∞', - infintie: '⧝', - inodot: 'ı', - int: '∫', - intcal: '⊺', - integers: 'ℤ', - intercal: '⊺', - intlarhk: '⨗', - intprod: '⨼', - iocy: 'ё', - iogon: 'į', - iopf: '𝕚', - iota: 'ι', - iprod: '⨼', - iquest: '¿', - iscr: '𝒾', - isin: '∈', - isinE: '⋹', - isindot: '⋵', - isins: '⋴', - isinsv: '⋳', - isinv: '∈', - it: '⁢', - itilde: 'ĩ', - iukcy: 'і', - iuml: 'ï', - jcirc: 'ĵ', - jcy: 'й', - jfr: '𝔧', - jmath: 'ȷ', - jopf: '𝕛', - jscr: '𝒿', - jsercy: 'ј', - jukcy: 'є', - kappa: 'κ', - kappav: 'ϰ', - kcedil: 'ķ', - kcy: 'к', - kfr: '𝔨', - kgreen: 'ĸ', - khcy: 'х', - kjcy: 'ќ', - kopf: '𝕜', - kscr: '𝓀', - lAarr: '⇚', - lArr: '⇐', - lAtail: '⤛', - lBarr: '⤎', - lE: '≦', - lEg: '⪋', - lHar: '⥢', - lacute: 'ĺ', - laemptyv: '⦴', - lagran: 'ℒ', - lambda: 'λ', - lang: '⟨', - langd: '⦑', - langle: '⟨', - lap: '⪅', - laquo: '«', - larr: '←', - larrb: '⇤', - larrbfs: '⤟', - larrfs: '⤝', - larrhk: '↩', - larrlp: '↫', - larrpl: '⤹', - larrsim: '⥳', - larrtl: '↢', - lat: '⪫', - latail: '⤙', - late: '⪭', - lates: '⪭︀', - lbarr: '⤌', - lbbrk: '❲', - lbrace: '{', - lbrack: '[', - lbrke: '⦋', - lbrksld: '⦏', - lbrkslu: '⦍', - lcaron: 'ľ', - lcedil: 'ļ', - lceil: '⌈', - lcub: '{', - lcy: 'л', - ldca: '⤶', - ldquo: '“', - ldquor: '„', - ldrdhar: '⥧', - ldrushar: '⥋', - ldsh: '↲', - le: '≤', - leftarrow: '←', - leftarrowtail: '↢', - leftharpoondown: '↽', - leftharpoonup: '↼', - leftleftarrows: '⇇', - leftrightarrow: '↔', - leftrightarrows: '⇆', - leftrightharpoons: '⇋', - leftrightsquigarrow: '↭', - leftthreetimes: '⋋', - leg: '⋚', - leq: '≤', - leqq: '≦', - leqslant: '⩽', - les: '⩽', - lescc: '⪨', - lesdot: '⩿', - lesdoto: '⪁', - lesdotor: '⪃', - lesg: '⋚︀', - lesges: '⪓', - lessapprox: '⪅', - lessdot: '⋖', - lesseqgtr: '⋚', - lesseqqgtr: '⪋', - lessgtr: '≶', - lesssim: '≲', - lfisht: '⥼', - lfloor: '⌊', - lfr: '𝔩', - lg: '≶', - lgE: '⪑', - lhard: '↽', - lharu: '↼', - lharul: '⥪', - lhblk: '▄', - ljcy: 'љ', - ll: '≪', - llarr: '⇇', - llcorner: '⌞', - llhard: '⥫', - lltri: '◺', - lmidot: 'ŀ', - lmoust: '⎰', - lmoustache: '⎰', - lnE: '≨', - lnap: '⪉', - lnapprox: '⪉', - lne: '⪇', - lneq: '⪇', - lneqq: '≨', - lnsim: '⋦', - loang: '⟬', - loarr: '⇽', - lobrk: '⟦', - longleftarrow: '⟵', - longleftrightarrow: '⟷', - longmapsto: '⟼', - longrightarrow: '⟶', - looparrowleft: '↫', - looparrowright: '↬', - lopar: '⦅', - lopf: '𝕝', - loplus: '⨭', - lotimes: '⨴', - lowast: '∗', - lowbar: '_', - loz: '◊', - lozenge: '◊', - lozf: '⧫', - lpar: '(', - lparlt: '⦓', - lrarr: '⇆', - lrcorner: '⌟', - lrhar: '⇋', - lrhard: '⥭', - lrm: '‎', - lrtri: '⊿', - lsaquo: '‹', - lscr: '𝓁', - lsh: '↰', - lsim: '≲', - lsime: '⪍', - lsimg: '⪏', - lsqb: '[', - lsquo: '‘', - lsquor: '‚', - lstrok: 'ł', - lt: '<', - ltcc: '⪦', - ltcir: '⩹', - ltdot: '⋖', - lthree: '⋋', - ltimes: '⋉', - ltlarr: '⥶', - ltquest: '⩻', - ltrPar: '⦖', - ltri: '◃', - ltrie: '⊴', - ltrif: '◂', - lurdshar: '⥊', - luruhar: '⥦', - lvertneqq: '≨︀', - lvnE: '≨︀', - mDDot: '∺', - macr: '¯', - male: '♂', - malt: '✠', - maltese: '✠', - map: '↦', - mapsto: '↦', - mapstodown: '↧', - mapstoleft: '↤', - mapstoup: '↥', - marker: '▮', - mcomma: '⨩', - mcy: 'м', - mdash: '—', - measuredangle: '∡', - mfr: '𝔪', - mho: '℧', - micro: 'µ', - mid: '∣', - midast: '*', - midcir: '⫰', - middot: '·', - minus: '−', - minusb: '⊟', - minusd: '∸', - minusdu: '⨪', - mlcp: '⫛', - mldr: '…', - mnplus: '∓', - models: '⊧', - mopf: '𝕞', - mp: '∓', - mscr: '𝓂', - mstpos: '∾', - mu: 'μ', - multimap: '⊸', - mumap: '⊸', - nGg: '⋙̸', - nGt: '≫⃒', - nGtv: '≫̸', - nLeftarrow: '⇍', - nLeftrightarrow: '⇎', - nLl: '⋘̸', - nLt: '≪⃒', - nLtv: '≪̸', - nRightarrow: '⇏', - nVDash: '⊯', - nVdash: '⊮', - nabla: '∇', - nacute: 'ń', - nang: '∠⃒', - nap: '≉', - napE: '⩰̸', - napid: '≋̸', - napos: 'ʼn', - napprox: '≉', - natur: '♮', - natural: '♮', - naturals: 'ℕ', - nbsp: ' ', - nbump: '≎̸', - nbumpe: '≏̸', - ncap: '⩃', - ncaron: 'ň', - ncedil: 'ņ', - ncong: '≇', - ncongdot: '⩭̸', - ncup: '⩂', - ncy: 'н', - ndash: '–', - ne: '≠', - neArr: '⇗', - nearhk: '⤤', - nearr: '↗', - nearrow: '↗', - nedot: '≐̸', - nequiv: '≢', - nesear: '⤨', - nesim: '≂̸', - nexist: '∄', - nexists: '∄', - nfr: '𝔫', - ngE: '≧̸', - nge: '≱', - ngeq: '≱', - ngeqq: '≧̸', - ngeqslant: '⩾̸', - nges: '⩾̸', - ngsim: '≵', - ngt: '≯', - ngtr: '≯', - nhArr: '⇎', - nharr: '↮', - nhpar: '⫲', - ni: '∋', - nis: '⋼', - nisd: '⋺', - niv: '∋', - njcy: 'њ', - nlArr: '⇍', - nlE: '≦̸', - nlarr: '↚', - nldr: '‥', - nle: '≰', - nleftarrow: '↚', - nleftrightarrow: '↮', - nleq: '≰', - nleqq: '≦̸', - nleqslant: '⩽̸', - nles: '⩽̸', - nless: '≮', - nlsim: '≴', - nlt: '≮', - nltri: '⋪', - nltrie: '⋬', - nmid: '∤', - nopf: '𝕟', - not: '¬', - notin: '∉', - notinE: '⋹̸', - notindot: '⋵̸', - notinva: '∉', - notinvb: '⋷', - notinvc: '⋶', - notni: '∌', - notniva: '∌', - notnivb: '⋾', - notnivc: '⋽', - npar: '∦', - nparallel: '∦', - nparsl: '⫽⃥', - npart: '∂̸', - npolint: '⨔', - npr: '⊀', - nprcue: '⋠', - npre: '⪯̸', - nprec: '⊀', - npreceq: '⪯̸', - nrArr: '⇏', - nrarr: '↛', - nrarrc: '⤳̸', - nrarrw: '↝̸', - nrightarrow: '↛', - nrtri: '⋫', - nrtrie: '⋭', - nsc: '⊁', - nsccue: '⋡', - nsce: '⪰̸', - nscr: '𝓃', - nshortmid: '∤', - nshortparallel: '∦', - nsim: '≁', - nsime: '≄', - nsimeq: '≄', - nsmid: '∤', - nspar: '∦', - nsqsube: '⋢', - nsqsupe: '⋣', - nsub: '⊄', - nsubE: '⫅̸', - nsube: '⊈', - nsubset: '⊂⃒', - nsubseteq: '⊈', - nsubseteqq: '⫅̸', - nsucc: '⊁', - nsucceq: '⪰̸', - nsup: '⊅', - nsupE: '⫆̸', - nsupe: '⊉', - nsupset: '⊃⃒', - nsupseteq: '⊉', - nsupseteqq: '⫆̸', - ntgl: '≹', - ntilde: 'ñ', - ntlg: '≸', - ntriangleleft: '⋪', - ntrianglelefteq: '⋬', - ntriangleright: '⋫', - ntrianglerighteq: '⋭', - nu: 'ν', - num: '#', - numero: '№', - numsp: ' ', - nvDash: '⊭', - nvHarr: '⤄', - nvap: '≍⃒', - nvdash: '⊬', - nvge: '≥⃒', - nvgt: '>⃒', - nvinfin: '⧞', - nvlArr: '⤂', - nvle: '≤⃒', - nvlt: '<⃒', - nvltrie: '⊴⃒', - nvrArr: '⤃', - nvrtrie: '⊵⃒', - nvsim: '∼⃒', - nwArr: '⇖', - nwarhk: '⤣', - nwarr: '↖', - nwarrow: '↖', - nwnear: '⤧', - oS: 'Ⓢ', - oacute: 'ó', - oast: '⊛', - ocir: '⊚', - ocirc: 'ô', - ocy: 'о', - odash: '⊝', - odblac: 'ő', - odiv: '⨸', - odot: '⊙', - odsold: '⦼', - oelig: 'œ', - ofcir: '⦿', - ofr: '𝔬', - ogon: '˛', - ograve: 'ò', - ogt: '⧁', - ohbar: '⦵', - ohm: 'Ω', - oint: '∮', - olarr: '↺', - olcir: '⦾', - olcross: '⦻', - oline: '‾', - olt: '⧀', - omacr: 'ō', - omega: 'ω', - omicron: 'ο', - omid: '⦶', - ominus: '⊖', - oopf: '𝕠', - opar: '⦷', - operp: '⦹', - oplus: '⊕', - or: '∨', - orarr: '↻', - ord: '⩝', - order: 'ℴ', - orderof: 'ℴ', - ordf: 'ª', - ordm: 'º', - origof: '⊶', - oror: '⩖', - orslope: '⩗', - orv: '⩛', - oscr: 'ℴ', - oslash: 'ø', - osol: '⊘', - otilde: 'õ', - otimes: '⊗', - otimesas: '⨶', - ouml: 'ö', - ovbar: '⌽', - par: '∥', - para: '¶', - parallel: '∥', - parsim: '⫳', - parsl: '⫽', - part: '∂', - pcy: 'п', - percnt: '%', - period: '.', - permil: '‰', - perp: '⊥', - pertenk: '‱', - pfr: '𝔭', - phi: 'φ', - phiv: 'ϕ', - phmmat: 'ℳ', - phone: '☎', - pi: 'π', - pitchfork: '⋔', - piv: 'ϖ', - planck: 'ℏ', - planckh: 'ℎ', - plankv: 'ℏ', - plus: '+', - plusacir: '⨣', - plusb: '⊞', - pluscir: '⨢', - plusdo: '∔', - plusdu: '⨥', - pluse: '⩲', - plusmn: '±', - plussim: '⨦', - plustwo: '⨧', - pm: '±', - pointint: '⨕', - popf: '𝕡', - pound: '£', - pr: '≺', - prE: '⪳', - prap: '⪷', - prcue: '≼', - pre: '⪯', - prec: '≺', - precapprox: '⪷', - preccurlyeq: '≼', - preceq: '⪯', - precnapprox: '⪹', - precneqq: '⪵', - precnsim: '⋨', - precsim: '≾', - prime: '′', - primes: 'ℙ', - prnE: '⪵', - prnap: '⪹', - prnsim: '⋨', - prod: '∏', - profalar: '⌮', - profline: '⌒', - profsurf: '⌓', - prop: '∝', - propto: '∝', - prsim: '≾', - prurel: '⊰', - pscr: '𝓅', - psi: 'ψ', - puncsp: ' ', - qfr: '𝔮', - qint: '⨌', - qopf: '𝕢', - qprime: '⁗', - qscr: '𝓆', - quaternions: 'ℍ', - quatint: '⨖', - quest: '?', - questeq: '≟', - quot: '"', - rAarr: '⇛', - rArr: '⇒', - rAtail: '⤜', - rBarr: '⤏', - rHar: '⥤', - race: '∽̱', - racute: 'ŕ', - radic: '√', - raemptyv: '⦳', - rang: '⟩', - rangd: '⦒', - range: '⦥', - rangle: '⟩', - raquo: '»', - rarr: '→', - rarrap: '⥵', - rarrb: '⇥', - rarrbfs: '⤠', - rarrc: '⤳', - rarrfs: '⤞', - rarrhk: '↪', - rarrlp: '↬', - rarrpl: '⥅', - rarrsim: '⥴', - rarrtl: '↣', - rarrw: '↝', - ratail: '⤚', - ratio: '∶', - rationals: 'ℚ', - rbarr: '⤍', - rbbrk: '❳', - rbrace: '}', - rbrack: ']', - rbrke: '⦌', - rbrksld: '⦎', - rbrkslu: '⦐', - rcaron: 'ř', - rcedil: 'ŗ', - rceil: '⌉', - rcub: '}', - rcy: 'р', - rdca: '⤷', - rdldhar: '⥩', - rdquo: '”', - rdquor: '”', - rdsh: '↳', - real: 'ℜ', - realine: 'ℛ', - realpart: 'ℜ', - reals: 'ℝ', - rect: '▭', - reg: '®', - rfisht: '⥽', - rfloor: '⌋', - rfr: '𝔯', - rhard: '⇁', - rharu: '⇀', - rharul: '⥬', - rho: 'ρ', - rhov: 'ϱ', - rightarrow: '→', - rightarrowtail: '↣', - rightharpoondown: '⇁', - rightharpoonup: '⇀', - rightleftarrows: '⇄', - rightleftharpoons: '⇌', - rightrightarrows: '⇉', - rightsquigarrow: '↝', - rightthreetimes: '⋌', - ring: '˚', - risingdotseq: '≓', - rlarr: '⇄', - rlhar: '⇌', - rlm: '‏', - rmoust: '⎱', - rmoustache: '⎱', - rnmid: '⫮', - roang: '⟭', - roarr: '⇾', - robrk: '⟧', - ropar: '⦆', - ropf: '𝕣', - roplus: '⨮', - rotimes: '⨵', - rpar: ')', - rpargt: '⦔', - rppolint: '⨒', - rrarr: '⇉', - rsaquo: '›', - rscr: '𝓇', - rsh: '↱', - rsqb: ']', - rsquo: '’', - rsquor: '’', - rthree: '⋌', - rtimes: '⋊', - rtri: '▹', - rtrie: '⊵', - rtrif: '▸', - rtriltri: '⧎', - ruluhar: '⥨', - rx: '℞', - sacute: 'ś', - sbquo: '‚', - sc: '≻', - scE: '⪴', - scap: '⪸', - scaron: 'š', - sccue: '≽', - sce: '⪰', - scedil: 'ş', - scirc: 'ŝ', - scnE: '⪶', - scnap: '⪺', - scnsim: '⋩', - scpolint: '⨓', - scsim: '≿', - scy: 'с', - sdot: '⋅', - sdotb: '⊡', - sdote: '⩦', - seArr: '⇘', - searhk: '⤥', - searr: '↘', - searrow: '↘', - sect: '§', - semi: ';', - seswar: '⤩', - setminus: '∖', - setmn: '∖', - sext: '✶', - sfr: '𝔰', - sfrown: '⌢', - sharp: '♯', - shchcy: 'щ', - shcy: 'ш', - shortmid: '∣', - shortparallel: '∥', - shy: '­', - sigma: 'σ', - sigmaf: 'ς', - sigmav: 'ς', - sim: '∼', - simdot: '⩪', - sime: '≃', - simeq: '≃', - simg: '⪞', - simgE: '⪠', - siml: '⪝', - simlE: '⪟', - simne: '≆', - simplus: '⨤', - simrarr: '⥲', - slarr: '←', - smallsetminus: '∖', - smashp: '⨳', - smeparsl: '⧤', - smid: '∣', - smile: '⌣', - smt: '⪪', - smte: '⪬', - smtes: '⪬︀', - softcy: 'ь', - sol: '/', - solb: '⧄', - solbar: '⌿', - sopf: '𝕤', - spades: '♠', - spadesuit: '♠', - spar: '∥', - sqcap: '⊓', - sqcaps: '⊓︀', - sqcup: '⊔', - sqcups: '⊔︀', - sqsub: '⊏', - sqsube: '⊑', - sqsubset: '⊏', - sqsubseteq: '⊑', - sqsup: '⊐', - sqsupe: '⊒', - sqsupset: '⊐', - sqsupseteq: '⊒', - squ: '□', - square: '□', - squarf: '▪', - squf: '▪', - srarr: '→', - sscr: '𝓈', - ssetmn: '∖', - ssmile: '⌣', - sstarf: '⋆', - star: '☆', - starf: '★', - straightepsilon: 'ϵ', - straightphi: 'ϕ', - strns: '¯', - sub: '⊂', - subE: '⫅', - subdot: '⪽', - sube: '⊆', - subedot: '⫃', - submult: '⫁', - subnE: '⫋', - subne: '⊊', - subplus: '⪿', - subrarr: '⥹', - subset: '⊂', - subseteq: '⊆', - subseteqq: '⫅', - subsetneq: '⊊', - subsetneqq: '⫋', - subsim: '⫇', - subsub: '⫕', - subsup: '⫓', - succ: '≻', - succapprox: '⪸', - succcurlyeq: '≽', - succeq: '⪰', - succnapprox: '⪺', - succneqq: '⪶', - succnsim: '⋩', - succsim: '≿', - sum: '∑', - sung: '♪', - sup1: '¹', - sup2: '²', - sup3: '³', - sup: '⊃', - supE: '⫆', - supdot: '⪾', - supdsub: '⫘', - supe: '⊇', - supedot: '⫄', - suphsol: '⟉', - suphsub: '⫗', - suplarr: '⥻', - supmult: '⫂', - supnE: '⫌', - supne: '⊋', - supplus: '⫀', - supset: '⊃', - supseteq: '⊇', - supseteqq: '⫆', - supsetneq: '⊋', - supsetneqq: '⫌', - supsim: '⫈', - supsub: '⫔', - supsup: '⫖', - swArr: '⇙', - swarhk: '⤦', - swarr: '↙', - swarrow: '↙', - swnwar: '⤪', - szlig: 'ß', - target: '⌖', - tau: 'τ', - tbrk: '⎴', - tcaron: 'ť', - tcedil: 'ţ', - tcy: 'т', - tdot: '⃛', - telrec: '⌕', - tfr: '𝔱', - there4: '∴', - therefore: '∴', - theta: 'θ', - thetasym: 'ϑ', - thetav: 'ϑ', - thickapprox: '≈', - thicksim: '∼', - thinsp: ' ', - thkap: '≈', - thksim: '∼', - thorn: 'þ', - tilde: '˜', - times: '×', - timesb: '⊠', - timesbar: '⨱', - timesd: '⨰', - tint: '∭', - toea: '⤨', - top: '⊤', - topbot: '⌶', - topcir: '⫱', - topf: '𝕥', - topfork: '⫚', - tosa: '⤩', - tprime: '‴', - trade: '™', - triangle: '▵', - triangledown: '▿', - triangleleft: '◃', - trianglelefteq: '⊴', - triangleq: '≜', - triangleright: '▹', - trianglerighteq: '⊵', - tridot: '◬', - trie: '≜', - triminus: '⨺', - triplus: '⨹', - trisb: '⧍', - tritime: '⨻', - trpezium: '⏢', - tscr: '𝓉', - tscy: 'ц', - tshcy: 'ћ', - tstrok: 'ŧ', - twixt: '≬', - twoheadleftarrow: '↞', - twoheadrightarrow: '↠', - uArr: '⇑', - uHar: '⥣', - uacute: 'ú', - uarr: '↑', - ubrcy: 'ў', - ubreve: 'ŭ', - ucirc: 'û', - ucy: 'у', - udarr: '⇅', - udblac: 'ű', - udhar: '⥮', - ufisht: '⥾', - ufr: '𝔲', - ugrave: 'ù', - uharl: '↿', - uharr: '↾', - uhblk: '▀', - ulcorn: '⌜', - ulcorner: '⌜', - ulcrop: '⌏', - ultri: '◸', - umacr: 'ū', - uml: '¨', - uogon: 'ų', - uopf: '𝕦', - uparrow: '↑', - updownarrow: '↕', - upharpoonleft: '↿', - upharpoonright: '↾', - uplus: '⊎', - upsi: 'υ', - upsih: 'ϒ', - upsilon: 'υ', - upuparrows: '⇈', - urcorn: '⌝', - urcorner: '⌝', - urcrop: '⌎', - uring: 'ů', - urtri: '◹', - uscr: '𝓊', - utdot: '⋰', - utilde: 'ũ', - utri: '▵', - utrif: '▴', - uuarr: '⇈', - uuml: 'ü', - uwangle: '⦧', - vArr: '⇕', - vBar: '⫨', - vBarv: '⫩', - vDash: '⊨', - vangrt: '⦜', - varepsilon: 'ϵ', - varkappa: 'ϰ', - varnothing: '∅', - varphi: 'ϕ', - varpi: 'ϖ', - varpropto: '∝', - varr: '↕', - varrho: 'ϱ', - varsigma: 'ς', - varsubsetneq: '⊊︀', - varsubsetneqq: '⫋︀', - varsupsetneq: '⊋︀', - varsupsetneqq: '⫌︀', - vartheta: 'ϑ', - vartriangleleft: '⊲', - vartriangleright: '⊳', - vcy: 'в', - vdash: '⊢', - vee: '∨', - veebar: '⊻', - veeeq: '≚', - vellip: '⋮', - verbar: '|', - vert: '|', - vfr: '𝔳', - vltri: '⊲', - vnsub: '⊂⃒', - vnsup: '⊃⃒', - vopf: '𝕧', - vprop: '∝', - vrtri: '⊳', - vscr: '𝓋', - vsubnE: '⫋︀', - vsubne: '⊊︀', - vsupnE: '⫌︀', - vsupne: '⊋︀', - vzigzag: '⦚', - wcirc: 'ŵ', - wedbar: '⩟', - wedge: '∧', - wedgeq: '≙', - weierp: '℘', - wfr: '𝔴', - wopf: '𝕨', - wp: '℘', - wr: '≀', - wreath: '≀', - wscr: '𝓌', - xcap: '⋂', - xcirc: '◯', - xcup: '⋃', - xdtri: '▽', - xfr: '𝔵', - xhArr: '⟺', - xharr: '⟷', - xi: 'ξ', - xlArr: '⟸', - xlarr: '⟵', - xmap: '⟼', - xnis: '⋻', - xodot: '⨀', - xopf: '𝕩', - xoplus: '⨁', - xotime: '⨂', - xrArr: '⟹', - xrarr: '⟶', - xscr: '𝓍', - xsqcup: '⨆', - xuplus: '⨄', - xutri: '△', - xvee: '⋁', - xwedge: '⋀', - yacute: 'ý', - yacy: 'я', - ycirc: 'ŷ', - ycy: 'ы', - yen: '¥', - yfr: '𝔶', - yicy: 'ї', - yopf: '𝕪', - yscr: '𝓎', - yucy: 'ю', - yuml: 'ÿ', - zacute: 'ź', - zcaron: 'ž', - zcy: 'з', - zdot: 'ż', - zeetrf: 'ℨ', - zeta: 'ζ', - zfr: '𝔷', - zhcy: 'ж', - zigrarr: '⇝', - zopf: '𝕫', - zscr: '𝓏', - zwj: '‍', - zwnj: '‌' -} - -;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js - - -const own = {}.hasOwnProperty - -/** - * Decode a single character reference (without the `&` or `;`). - * You probably only need this when you’re building parsers yourself that follow - * different rules compared to HTML. - * This is optimized to be tiny in browsers. - * - * @param {string} value - * `notin` (named), `#123` (deci), `#x123` (hexa). - * @returns {string|false} - * Decoded reference. - */ -function decodeNamedCharacterReference(value) { - return own.call(characterEntities, value) ? characterEntities[value] : false -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const characterReference = { - name: 'characterReference', - tokenize: tokenizeCharacterReference -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterReference(effects, ok, nok) { - const self = this - let size = 0 - /** @type {number} */ - let max - /** @type {(code: Code) => boolean} */ - let test - return start - - /** - * Start of character reference. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterReference') - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - return open - } - - /** - * After `&`, at `#` for numeric references or alphanumeric for named - * references. - * - * ```markdown - * > | a&b - * ^ - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 35) { - effects.enter('characterReferenceMarkerNumeric') - effects.consume(code) - effects.exit('characterReferenceMarkerNumeric') - return numeric - } - effects.enter('characterReferenceValue') - max = 31 - test = asciiAlphanumeric - return value(code) - } - - /** - * After `#`, at `x` for hexadecimals or digit for decimals. - * - * ```markdown - * > | a{b - * ^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function numeric(code) { - if (code === 88 || code === 120) { - effects.enter('characterReferenceMarkerHexadecimal') - effects.consume(code) - effects.exit('characterReferenceMarkerHexadecimal') - effects.enter('characterReferenceValue') - max = 6 - test = asciiHexDigit - return value - } - effects.enter('characterReferenceValue') - max = 7 - test = asciiDigit - return value(code) - } - - /** - * After markers (`&#x`, `&#`, or `&`), in value, before `;`. - * - * The character reference kind defines what and how many characters are - * allowed. - * - * ```markdown - * > | a&b - * ^^^ - * > | a{b - * ^^^ - * > | a b - * ^ - * ``` - * - * @type {State} - */ - function value(code) { - if (code === 59 && size) { - const token = effects.exit('characterReferenceValue') - if ( - test === asciiAlphanumeric && - !decodeNamedCharacterReference(self.sliceSerialize(token)) - ) { - return nok(code) - } - - // To do: `markdown-rs` uses a different name: - // `CharacterReferenceMarkerSemi`. - effects.enter('characterReferenceMarker') - effects.consume(code) - effects.exit('characterReferenceMarker') - effects.exit('characterReference') - return ok - } - if (test(code) && size++ < max) { - effects.consume(code) - return value - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const characterEscape = { - name: 'characterEscape', - tokenize: tokenizeCharacterEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCharacterEscape(effects, ok, nok) { - return start - - /** - * Start of character escape. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('characterEscape') - effects.enter('escapeMarker') - effects.consume(code) - effects.exit('escapeMarker') - return inside - } - - /** - * After `\`, at punctuation. - * - * ```markdown - * > | a\*b - * ^ - * ``` - * - * @type {State} - */ - function inside(code) { - // ASCII punctuation. - if (asciiPunctuation(code)) { - effects.enter('characterEscapeValue') - effects.consume(code) - effects.exit('characterEscapeValue') - effects.exit('characterEscape') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const lineEnding = { - name: 'lineEnding', - tokenize: tokenizeLineEnding -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLineEnding(effects, ok) { - return start - - /** @type {State} */ - function start(code) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return factorySpace(effects, ok, 'linePrefix') - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - - - - - - -/** @type {Construct} */ -const labelEnd = { - name: 'labelEnd', - tokenize: tokenizeLabelEnd, - resolveTo: resolveToLabelEnd, - resolveAll: resolveAllLabelEnd -} - -/** @type {Construct} */ -const resourceConstruct = { - tokenize: tokenizeResource -} -/** @type {Construct} */ -const referenceFullConstruct = { - tokenize: tokenizeReferenceFull -} -/** @type {Construct} */ -const referenceCollapsedConstruct = { - tokenize: tokenizeReferenceCollapsed -} - -/** @type {Resolver} */ -function resolveAllLabelEnd(events) { - let index = -1 - while (++index < events.length) { - const token = events[index][1] - if ( - token.type === 'labelImage' || - token.type === 'labelLink' || - token.type === 'labelEnd' - ) { - // Remove the marker. - events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) - token.type = 'data' - index++ - } - } - return events -} - -/** @type {Resolver} */ -function resolveToLabelEnd(events, context) { - let index = events.length - let offset = 0 - /** @type {Token} */ - let token - /** @type {number | undefined} */ - let open - /** @type {number | undefined} */ - let close - /** @type {Array<Event>} */ - let media - - // Find an opening. - while (index--) { - token = events[index][1] - if (open) { - // If we see another link, or inactive link label, we’ve been here before. - if ( - token.type === 'link' || - (token.type === 'labelLink' && token._inactive) - ) { - break - } - - // Mark other link openings as inactive, as we can’t have links in - // links. - if (events[index][0] === 'enter' && token.type === 'labelLink') { - token._inactive = true - } - } else if (close) { - if ( - events[index][0] === 'enter' && - (token.type === 'labelImage' || token.type === 'labelLink') && - !token._balanced - ) { - open = index - if (token.type !== 'labelLink') { - offset = 2 - break - } - } - } else if (token.type === 'labelEnd') { - close = index - } - } - const group = { - type: events[open][1].type === 'labelLink' ? 'link' : 'image', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[events.length - 1][1].end) - } - const label = { - type: 'label', - start: Object.assign({}, events[open][1].start), - end: Object.assign({}, events[close][1].end) - } - const text = { - type: 'labelText', - start: Object.assign({}, events[open + offset + 2][1].end), - end: Object.assign({}, events[close - 2][1].start) - } - media = [ - ['enter', group, context], - ['enter', label, context] - ] - - // Opening marker. - media = push(media, events.slice(open + 1, open + offset + 3)) - - // Text open. - media = push(media, [['enter', text, context]]) - - // Always populated by defaults. - - // Between. - media = push( - media, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + offset + 4, close - 3), - context - ) - ) - - // Text close, marker close, label close. - media = push(media, [ - ['exit', text, context], - events[close - 2], - events[close - 1], - ['exit', label, context] - ]) - - // Reference, resource, or so. - media = push(media, events.slice(close + 1)) - - // Media close. - media = push(media, [['exit', group, context]]) - splice(events, open, events.length, media) - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelEnd(effects, ok, nok) { - const self = this - let index = self.events.length - /** @type {Token} */ - let labelStart - /** @type {boolean} */ - let defined - - // Find an opening. - while (index--) { - if ( - (self.events[index][1].type === 'labelImage' || - self.events[index][1].type === 'labelLink') && - !self.events[index][1]._balanced - ) { - labelStart = self.events[index][1] - break - } - } - return start - - /** - * Start of label end. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ``` - * - * @type {State} - */ - function start(code) { - // If there is not an okay opening. - if (!labelStart) { - return nok(code) - } - - // If the corresponding label (link) start is marked as inactive, - // it means we’d be wrapping a link, like this: - // - // ```markdown - // > | a [b [c](d) e](f) g. - // ^ - // ``` - // - // We can’t have that, so it’s just balanced brackets. - if (labelStart._inactive) { - return labelEndNok(code) - } - defined = self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize({ - start: labelStart.end, - end: self.now() - }) - ) - ) - effects.enter('labelEnd') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelEnd') - return after - } - - /** - * After `]`. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function after(code) { - // Note: `markdown-rs` also parses GFM footnotes here, which for us is in - // an extension. - - // Resource (`[asd](fgh)`)? - if (code === 40) { - return effects.attempt( - resourceConstruct, - labelEndOk, - defined ? labelEndOk : labelEndNok - )(code) - } - - // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? - if (code === 91) { - return effects.attempt( - referenceFullConstruct, - labelEndOk, - defined ? referenceNotFull : labelEndNok - )(code) - } - - // Shortcut (`[asd]`) reference? - return defined ? labelEndOk(code) : labelEndNok(code) - } - - /** - * After `]`, at `[`, but not at a full reference. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function referenceNotFull(code) { - return effects.attempt( - referenceCollapsedConstruct, - labelEndOk, - labelEndNok - )(code) - } - - /** - * Done, we found something. - * - * ```markdown - * > | [a](b) c - * ^ - * > | [a][b] c - * ^ - * > | [a][] b - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndOk(code) { - // Note: `markdown-rs` does a bunch of stuff here. - return ok(code) - } - - /** - * Done, it’s nothing. - * - * There was an okay opening, but we didn’t match anything. - * - * ```markdown - * > | [a](b c - * ^ - * > | [a][b c - * ^ - * > | [a] b - * ^ - * ``` - * - * @type {State} - */ - function labelEndNok(code) { - labelStart._balanced = true - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeResource(effects, ok, nok) { - return resourceStart - - /** - * At a resource. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceStart(code) { - effects.enter('resource') - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - return resourceBefore - } - - /** - * In resource, after `(`, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBefore(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceOpen)(code) - : resourceOpen(code) - } - - /** - * In resource, after optional whitespace, at `)` or a destination. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceOpen(code) { - if (code === 41) { - return resourceEnd(code) - } - return factoryDestination( - effects, - resourceDestinationAfter, - resourceDestinationMissing, - 'resourceDestination', - 'resourceDestinationLiteral', - 'resourceDestinationLiteralMarker', - 'resourceDestinationRaw', - 'resourceDestinationString', - 32 - )(code) - } - - /** - * In resource, after destination, at optional whitespace. - * - * ```markdown - * > | [a](b) c - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceBetween)(code) - : resourceEnd(code) - } - - /** - * At invalid destination. - * - * ```markdown - * > | [a](<<) b - * ^ - * ``` - * - * @type {State} - */ - function resourceDestinationMissing(code) { - return nok(code) - } - - /** - * In resource, after destination and whitespace, at `(` or title. - * - * ```markdown - * > | [a](b ) c - * ^ - * ``` - * - * @type {State} - */ - function resourceBetween(code) { - if (code === 34 || code === 39 || code === 40) { - return factoryTitle( - effects, - resourceTitleAfter, - nok, - 'resourceTitle', - 'resourceTitleMarker', - 'resourceTitleString' - )(code) - } - return resourceEnd(code) - } - - /** - * In resource, after title, at optional whitespace. - * - * ```markdown - * > | [a](b "c") d - * ^ - * ``` - * - * @type {State} - */ - function resourceTitleAfter(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, resourceEnd)(code) - : resourceEnd(code) - } - - /** - * In resource, at `)`. - * - * ```markdown - * > | [a](b) d - * ^ - * ``` - * - * @type {State} - */ - function resourceEnd(code) { - if (code === 41) { - effects.enter('resourceMarker') - effects.consume(code) - effects.exit('resourceMarker') - effects.exit('resource') - return ok - } - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceFull(effects, ok, nok) { - const self = this - return referenceFull - - /** - * In a reference (full), at the `[`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFull(code) { - return factoryLabel.call( - self, - effects, - referenceFullAfter, - referenceFullMissing, - 'reference', - 'referenceMarker', - 'referenceString' - )(code) - } - - /** - * In a reference (full), after `]`. - * - * ```markdown - * > | [a][b] d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullAfter(code) { - return self.parser.defined.includes( - normalizeIdentifier( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - ) - ? ok(code) - : nok(code) - } - - /** - * In reference (full) that was missing. - * - * ```markdown - * > | [a][b d - * ^ - * ``` - * - * @type {State} - */ - function referenceFullMissing(code) { - return nok(code) - } -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeReferenceCollapsed(effects, ok, nok) { - return referenceCollapsedStart - - /** - * In reference (collapsed), at `[`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedStart(code) { - // We only attempt a collapsed label if there’s a `[`. - - effects.enter('reference') - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - return referenceCollapsedOpen - } - - /** - * In reference (collapsed), at `]`. - * - * > 👉 **Note**: we only get here if the label is defined. - * - * ```markdown - * > | [a][] d - * ^ - * ``` - * - * @type {State} - */ - function referenceCollapsedOpen(code) { - if (code === 93) { - effects.enter('referenceMarker') - effects.consume(code) - effects.exit('referenceMarker') - effects.exit('reference') - return ok - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartImage = { - name: 'labelStartImage', - tokenize: tokenizeLabelStartImage, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartImage(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (image) start. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelImage') - effects.enter('labelImageMarker') - effects.consume(code) - effects.exit('labelImageMarker') - return open - } - - /** - * After `!`, at `[`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 91) { - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelImage') - return after - } - return nok(code) - } - - /** - * After `![`. - * - * ```markdown - * > | a ![b] c - * ^ - * ``` - * - * This is needed in because, when GFM footnotes are enabled, images never - * form when started with a `^`. - * Instead, links form: - * - * ```markdown - * ![^a](b) - * - * ![^a][b] - * - * [b]: c - * ``` - * - * ```html - * <p>!<a href=\"b\">^a</a></p> - * <p>!<a href=\"c\">^a</a></p> - * ``` - * - * @type {State} - */ - function after(code) { - // To do: use a new field to do this, this is still needed for - // `micromark-extension-gfm-footnote`, but the `label-start-link` - // behavior isn’t. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js -/** - * @typedef {import('micromark-util-types').Code} Code - */ - - -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -function classifyCharacter(code) { - if ( - code === null || - markdownLineEndingOrSpace(code) || - unicodeWhitespace(code) - ) { - return 1 - } - if (unicodePunctuation(code)) { - return 2 - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').Point} Point - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - - -/** @type {Construct} */ -const attention = { - name: 'attention', - tokenize: tokenizeAttention, - resolveAll: resolveAllAttention -} - -/** - * Take all events and resolve attention to emphasis or strong. - * - * @type {Resolver} - */ -function resolveAllAttention(events, context) { - let index = -1 - /** @type {number} */ - let open - /** @type {Token} */ - let group - /** @type {Token} */ - let text - /** @type {Token} */ - let openingSequence - /** @type {Token} */ - let closingSequence - /** @type {number} */ - let use - /** @type {Array<Event>} */ - let nextEvents - /** @type {number} */ - let offset - - // Walk through all events. - // - // Note: performance of this is fine on an mb of normal markdown, but it’s - // a bottleneck for malicious stuff. - while (++index < events.length) { - // Find a token that can close. - if ( - events[index][0] === 'enter' && - events[index][1].type === 'attentionSequence' && - events[index][1]._close - ) { - open = index - - // Now walk back to find an opener. - while (open--) { - // Find a token that can open the closer. - if ( - events[open][0] === 'exit' && - events[open][1].type === 'attentionSequence' && - events[open][1]._open && - // If the markers are the same: - context.sliceSerialize(events[open][1]).charCodeAt(0) === - context.sliceSerialize(events[index][1]).charCodeAt(0) - ) { - // If the opening can close or the closing can open, - // and the close size *is not* a multiple of three, - // but the sum of the opening and closing size *is* multiple of three, - // then don’t match. - if ( - (events[open][1]._close || events[index][1]._open) && - (events[index][1].end.offset - events[index][1].start.offset) % 3 && - !( - (events[open][1].end.offset - - events[open][1].start.offset + - events[index][1].end.offset - - events[index][1].start.offset) % - 3 - ) - ) { - continue - } - - // Number of markers to use from the sequence. - use = - events[open][1].end.offset - events[open][1].start.offset > 1 && - events[index][1].end.offset - events[index][1].start.offset > 1 - ? 2 - : 1 - const start = Object.assign({}, events[open][1].end) - const end = Object.assign({}, events[index][1].start) - movePoint(start, -use) - movePoint(end, use) - openingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start, - end: Object.assign({}, events[open][1].end) - } - closingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start: Object.assign({}, events[index][1].start), - end - } - text = { - type: use > 1 ? 'strongText' : 'emphasisText', - start: Object.assign({}, events[open][1].end), - end: Object.assign({}, events[index][1].start) - } - group = { - type: use > 1 ? 'strong' : 'emphasis', - start: Object.assign({}, openingSequence.start), - end: Object.assign({}, closingSequence.end) - } - events[open][1].end = Object.assign({}, openingSequence.start) - events[index][1].start = Object.assign({}, closingSequence.end) - nextEvents = [] - - // If there are more markers in the opening, add them before. - if (events[open][1].end.offset - events[open][1].start.offset) { - nextEvents = push(nextEvents, [ - ['enter', events[open][1], context], - ['exit', events[open][1], context] - ]) - } - - // Opening. - nextEvents = push(nextEvents, [ - ['enter', group, context], - ['enter', openingSequence, context], - ['exit', openingSequence, context], - ['enter', text, context] - ]) - - // Always populated by defaults. - - // Between. - nextEvents = push( - nextEvents, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + 1, index), - context - ) - ) - - // Closing. - nextEvents = push(nextEvents, [ - ['exit', text, context], - ['enter', closingSequence, context], - ['exit', closingSequence, context], - ['exit', group, context] - ]) - - // If there are more markers in the closing, add them after. - if (events[index][1].end.offset - events[index][1].start.offset) { - offset = 2 - nextEvents = push(nextEvents, [ - ['enter', events[index][1], context], - ['exit', events[index][1], context] - ]) - } else { - offset = 0 - } - splice(events, open - 1, index - open + 3, nextEvents) - index = open + nextEvents.length - offset - 2 - break - } - } - } - } - - // Remove remaining sequences. - index = -1 - while (++index < events.length) { - if (events[index][1].type === 'attentionSequence') { - events[index][1].type = 'data' - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAttention(effects, ok) { - const attentionMarkers = this.parser.constructs.attentionMarkers.null - const previous = this.previous - const before = classifyCharacter(previous) - - /** @type {NonNullable<Code>} */ - let marker - return start - - /** - * Before a sequence. - * - * ```markdown - * > | ** - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - marker = code - effects.enter('attentionSequence') - return inside(code) - } - - /** - * In a sequence. - * - * ```markdown - * > | ** - * ^^ - * ``` - * - * @type {State} - */ - function inside(code) { - if (code === marker) { - effects.consume(code) - return inside - } - const token = effects.exit('attentionSequence') - - // To do: next major: move this to resolver, just like `markdown-rs`. - const after = classifyCharacter(code) - - // Always populated by defaults. - - const open = - !after || (after === 2 && before) || attentionMarkers.includes(code) - const close = - !before || (before === 2 && after) || attentionMarkers.includes(previous) - token._open = Boolean(marker === 42 ? open : open && (before || !close)) - token._close = Boolean(marker === 42 ? close : close && (after || !open)) - return ok(code) - } -} - -/** - * Move a point a bit. - * - * Note: `move` only works inside lines! It’s not possible to move past other - * chunks (replacement characters, tabs, or line endings). - * - * @param {Point} point - * @param {number} offset - * @returns {void} - */ -function movePoint(point, offset) { - point.column += offset - point.offset += offset - point._bufferIndex += offset -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const autolink = { - name: 'autolink', - tokenize: tokenizeAutolink -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeAutolink(effects, ok, nok) { - let size = 0 - return start - - /** - * Start of an autolink. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('autolink') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.enter('autolinkProtocol') - return open - } - - /** - * After `<`, at protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (asciiAlpha(code)) { - effects.consume(code) - return schemeOrEmailAtext - } - return emailAtext(code) - } - - /** - * At second byte of protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function schemeOrEmailAtext(code) { - // ASCII alphanumeric and `+`, `-`, and `.`. - if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { - // Count the previous alphabetical from `open` too. - size = 1 - return schemeInsideOrEmailAtext(code) - } - return emailAtext(code) - } - - /** - * In ambiguous protocol or atext. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * > | a<user@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function schemeInsideOrEmailAtext(code) { - if (code === 58) { - effects.consume(code) - size = 0 - return urlInside - } - - // ASCII alphanumeric and `+`, `-`, and `.`. - if ( - (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && - size++ < 32 - ) { - effects.consume(code) - return schemeInsideOrEmailAtext - } - size = 0 - return emailAtext(code) - } - - /** - * After protocol, in URL. - * - * ```markdown - * > | a<https://example.com>b - * ^ - * ``` - * - * @type {State} - */ - function urlInside(code) { - if (code === 62) { - effects.exit('autolinkProtocol') - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - - // ASCII control, space, or `<`. - if (code === null || code === 32 || code === 60 || asciiControl(code)) { - return nok(code) - } - effects.consume(code) - return urlInside - } - - /** - * In email atext. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailAtext(code) { - if (code === 64) { - effects.consume(code) - return emailAtSignOrDot - } - if (asciiAtext(code)) { - effects.consume(code) - return emailAtext - } - return nok(code) - } - - /** - * In label, after at-sign or dot. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ ^ - * ``` - * - * @type {State} - */ - function emailAtSignOrDot(code) { - return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) - } - - /** - * In label, where `.` and `>` are allowed. - * - * ```markdown - * > | a<user.name@example.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailLabel(code) { - if (code === 46) { - effects.consume(code) - size = 0 - return emailAtSignOrDot - } - if (code === 62) { - // Exit, then change the token type. - effects.exit('autolinkProtocol').type = 'autolinkEmail' - effects.enter('autolinkMarker') - effects.consume(code) - effects.exit('autolinkMarker') - effects.exit('autolink') - return ok - } - return emailValue(code) - } - - /** - * In label, where `.` and `>` are *not* allowed. - * - * Though, this is also used in `emailLabel` to parse other values. - * - * ```markdown - * > | a<user.name@ex-ample.com>b - * ^ - * ``` - * - * @type {State} - */ - function emailValue(code) { - // ASCII alphanumeric or `-`. - if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { - const next = code === 45 ? emailValue : emailLabel - effects.consume(code) - return next - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js -/** - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const htmlText = { - name: 'htmlText', - tokenize: tokenizeHtmlText -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHtmlText(effects, ok, nok) { - const self = this - /** @type {NonNullable<Code> | undefined} */ - let marker - /** @type {number} */ - let index - /** @type {State} */ - let returnState - return start - - /** - * Start of HTML (text). - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('htmlText') - effects.enter('htmlTextData') - effects.consume(code) - return open - } - - /** - * After `<`, at tag name or other stuff. - * - * ```markdown - * > | a <b> c - * ^ - * > | a <!doctype> c - * ^ - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function open(code) { - if (code === 33) { - effects.consume(code) - return declarationOpen - } - if (code === 47) { - effects.consume(code) - return tagCloseStart - } - if (code === 63) { - effects.consume(code) - return instruction - } - - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagOpen - } - return nok(code) - } - - /** - * After `<!`, at declaration, comment, or CDATA. - * - * ```markdown - * > | a <!doctype> c - * ^ - * > | a <!--b--> c - * ^ - * > | a <![CDATA[>&<]]> c - * ^ - * ``` - * - * @type {State} - */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code) - return commentOpenInside - } - if (code === 91) { - effects.consume(code) - index = 0 - return cdataOpenInside - } - if (asciiAlpha(code)) { - effects.consume(code) - return declaration - } - return nok(code) - } - - /** - * In a comment, after `<!-`, at another `-`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return nok(code) - } - - /** - * In comment. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function comment(code) { - if (code === null) { - return nok(code) - } - if (code === 45) { - effects.consume(code) - return commentClose - } - if (markdownLineEnding(code)) { - returnState = comment - return lineEndingBefore(code) - } - effects.consume(code) - return comment - } - - /** - * In comment, after `-`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentClose(code) { - if (code === 45) { - effects.consume(code) - return commentEnd - } - return comment(code) - } - - /** - * In comment, after `--`. - * - * ```markdown - * > | a <!--b--> c - * ^ - * ``` - * - * @type {State} - */ - function commentEnd(code) { - return code === 62 - ? end(code) - : code === 45 - ? commentClose(code) - : comment(code) - } - - /** - * After `<![`, in CDATA, expecting `CDATA[`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^^^^^^ - * ``` - * - * @type {State} - */ - function cdataOpenInside(code) { - const value = 'CDATA[' - if (code === value.charCodeAt(index++)) { - effects.consume(code) - return index === value.length ? cdata : cdataOpenInside - } - return nok(code) - } - - /** - * In CDATA. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^^^ - * ``` - * - * @type {State} - */ - function cdata(code) { - if (code === null) { - return nok(code) - } - if (code === 93) { - effects.consume(code) - return cdataClose - } - if (markdownLineEnding(code)) { - returnState = cdata - return lineEndingBefore(code) - } - effects.consume(code) - return cdata - } - - /** - * In CDATA, after `]`, at another `]`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataClose(code) { - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In CDATA, after `]]`, at `>`. - * - * ```markdown - * > | a <![CDATA[>&<]]> b - * ^ - * ``` - * - * @type {State} - */ - function cdataEnd(code) { - if (code === 62) { - return end(code) - } - if (code === 93) { - effects.consume(code) - return cdataEnd - } - return cdata(code) - } - - /** - * In declaration. - * - * ```markdown - * > | a <!b> c - * ^ - * ``` - * - * @type {State} - */ - function declaration(code) { - if (code === null || code === 62) { - return end(code) - } - if (markdownLineEnding(code)) { - returnState = declaration - return lineEndingBefore(code) - } - effects.consume(code) - return declaration - } - - /** - * In instruction. - * - * ```markdown - * > | a <?b?> c - * ^ - * ``` - * - * @type {State} - */ - function instruction(code) { - if (code === null) { - return nok(code) - } - if (code === 63) { - effects.consume(code) - return instructionClose - } - if (markdownLineEnding(code)) { - returnState = instruction - return lineEndingBefore(code) - } - effects.consume(code) - return instruction - } - - /** - * In instruction, after `?`, at `>`. - * - * ```markdown - * > | a <?b?> c - * ^ - * ``` - * - * @type {State} - */ - function instructionClose(code) { - return code === 62 ? end(code) : instruction(code) - } - - /** - * After `</`, in closing tag, at tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseStart(code) { - // ASCII alphabetical. - if (asciiAlpha(code)) { - effects.consume(code) - return tagClose - } - return nok(code) - } - - /** - * After `</x`, in a tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagClose(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagClose - } - return tagCloseBetween(code) - } - - /** - * In closing tag, after tag name. - * - * ```markdown - * > | a </b> c - * ^ - * ``` - * - * @type {State} - */ - function tagCloseBetween(code) { - if (markdownLineEnding(code)) { - returnState = tagCloseBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagCloseBetween - } - return end(code) - } - - /** - * After `<x`, in opening tag name. - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function tagOpen(code) { - // ASCII alphanumerical and `-`. - if (code === 45 || asciiAlphanumeric(code)) { - effects.consume(code) - return tagOpen - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In opening tag, after tag name. - * - * ```markdown - * > | a <b> c - * ^ - * ``` - * - * @type {State} - */ - function tagOpenBetween(code) { - if (code === 47) { - effects.consume(code) - return end - } - - // ASCII alphabetical and `:` and `_`. - if (code === 58 || code === 95 || asciiAlpha(code)) { - effects.consume(code) - return tagOpenAttributeName - } - if (markdownLineEnding(code)) { - returnState = tagOpenBetween - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenBetween - } - return end(code) - } - - /** - * In attribute name. - * - * ```markdown - * > | a <b c> d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeName(code) { - // ASCII alphabetical and `-`, `.`, `:`, and `_`. - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric(code) - ) { - effects.consume(code) - return tagOpenAttributeName - } - return tagOpenAttributeNameAfter(code) - } - - /** - * After attribute name, before initializer, the end of the tag, or - * whitespace. - * - * ```markdown - * > | a <b c> d - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeNameAfter - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeNameAfter - } - return tagOpenBetween(code) - } - - /** - * Before unquoted, double quoted, or single quoted attribute value, allowing - * whitespace. - * - * ```markdown - * > | a <b c=d> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } - if (code === 34 || code === 39) { - effects.consume(code) - marker = code - return tagOpenAttributeValueQuoted - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueBefore - return lineEndingBefore(code) - } - if (markdownSpace(code)) { - effects.consume(code) - return tagOpenAttributeValueBefore - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * In double or single quoted attribute value. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuoted(code) { - if (code === marker) { - effects.consume(code) - marker = undefined - return tagOpenAttributeValueQuotedAfter - } - if (code === null) { - return nok(code) - } - if (markdownLineEnding(code)) { - returnState = tagOpenAttributeValueQuoted - return lineEndingBefore(code) - } - effects.consume(code) - return tagOpenAttributeValueQuoted - } - - /** - * In unquoted attribute value. - * - * ```markdown - * > | a <b c=d> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 60 || - code === 61 || - code === 96 - ) { - return nok(code) - } - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - effects.consume(code) - return tagOpenAttributeValueUnquoted - } - - /** - * After double or single quoted attribute value, before whitespace or the end - * of the tag. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function tagOpenAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { - return tagOpenBetween(code) - } - return nok(code) - } - - /** - * In certain circumstances of a tag where only an `>` is allowed. - * - * ```markdown - * > | a <b c="d"> e - * ^ - * ``` - * - * @type {State} - */ - function end(code) { - if (code === 62) { - effects.consume(code) - effects.exit('htmlTextData') - effects.exit('htmlText') - return ok - } - return nok(code) - } - - /** - * At eol. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * > | a <!--a - * ^ - * | b--> - * ``` - * - * @type {State} - */ - function lineEndingBefore(code) { - effects.exit('htmlTextData') - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return lineEndingAfter - } - - /** - * After eol, at optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a <!--a - * > | b--> - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfter(code) { - // Always populated by defaults. - - return markdownSpace(code) - ? factorySpace( - effects, - lineEndingAfterPrefix, - 'linePrefix', - self.parser.constructs.disable.null.includes('codeIndented') - ? undefined - : 4 - )(code) - : lineEndingAfterPrefix(code) - } - - /** - * After eol, after optional whitespace. - * - * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about - * > empty tokens. - * - * ```markdown - * | a <!--a - * > | b--> - * ^ - * ``` - * - * @type {State} - */ - function lineEndingAfterPrefix(code) { - effects.enter('htmlTextData') - return returnState(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - - -/** @type {Construct} */ -const labelStartLink = { - name: 'labelStartLink', - tokenize: tokenizeLabelStartLink, - resolveAll: labelEnd.resolveAll -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeLabelStartLink(effects, ok, nok) { - const self = this - return start - - /** - * Start of label (link) start. - * - * ```markdown - * > | a [b] c - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('labelLink') - effects.enter('labelMarker') - effects.consume(code) - effects.exit('labelMarker') - effects.exit('labelLink') - return after - } - - /** @type {State} */ - function after(code) { - // To do: this isn’t needed in `micromark-extension-gfm-footnote`, - // remove. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs - ? nok(code) - : ok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const hardBreakEscape = { - name: 'hardBreakEscape', - tokenize: tokenizeHardBreakEscape -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeHardBreakEscape(effects, ok, nok) { - return start - - /** - * Start of a hard break (escape). - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('hardBreakEscape') - effects.consume(code) - return after - } - - /** - * After `\`, at eol. - * - * ```markdown - * > | a\ - * ^ - * | b - * ``` - * - * @type {State} - */ - function after(code) { - if (markdownLineEnding(code)) { - effects.exit('hardBreakEscape') - return ok(code) - } - return nok(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js -/** - * @typedef {import('micromark-util-types').Construct} Construct - * @typedef {import('micromark-util-types').Previous} Previous - * @typedef {import('micromark-util-types').Resolver} Resolver - * @typedef {import('micromark-util-types').State} State - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Tokenizer} Tokenizer - */ - - -/** @type {Construct} */ -const codeText = { - name: 'codeText', - tokenize: tokenizeCodeText, - resolve: resolveCodeText, - previous -} - -// To do: next major: don’t resolve, like `markdown-rs`. -/** @type {Resolver} */ -function resolveCodeText(events) { - let tailExitIndex = events.length - 4 - let headEnterIndex = 3 - /** @type {number} */ - let index - /** @type {number | undefined} */ - let enter - - // If we start and end with an EOL or a space. - if ( - (events[headEnterIndex][1].type === 'lineEnding' || - events[headEnterIndex][1].type === 'space') && - (events[tailExitIndex][1].type === 'lineEnding' || - events[tailExitIndex][1].type === 'space') - ) { - index = headEnterIndex - - // And we have data. - while (++index < tailExitIndex) { - if (events[index][1].type === 'codeTextData') { - // Then we have padding. - events[headEnterIndex][1].type = 'codeTextPadding' - events[tailExitIndex][1].type = 'codeTextPadding' - headEnterIndex += 2 - tailExitIndex -= 2 - break - } - } - } - - // Merge adjacent spaces and data. - index = headEnterIndex - 1 - tailExitIndex++ - while (++index <= tailExitIndex) { - if (enter === undefined) { - if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { - enter = index - } - } else if ( - index === tailExitIndex || - events[index][1].type === 'lineEnding' - ) { - events[enter][1].type = 'codeTextData' - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end - events.splice(enter + 2, index - enter - 2) - tailExitIndex -= index - enter - 2 - index = enter + 2 - } - enter = undefined - } - } - return events -} - -/** - * @this {TokenizeContext} - * @type {Previous} - */ -function previous(code) { - // If there is a previous code, there will always be a tail. - return ( - code !== 96 || - this.events[this.events.length - 1][1].type === 'characterEscape' - ) -} - -/** - * @this {TokenizeContext} - * @type {Tokenizer} - */ -function tokenizeCodeText(effects, ok, nok) { - const self = this - let sizeOpen = 0 - /** @type {number} */ - let size - /** @type {Token} */ - let token - return start - - /** - * Start of code (text). - * - * ```markdown - * > | `a` - * ^ - * > | \`a` - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter('codeText') - effects.enter('codeTextSequence') - return sequenceOpen(code) - } - - /** - * In opening sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceOpen(code) { - if (code === 96) { - effects.consume(code) - sizeOpen++ - return sequenceOpen - } - effects.exit('codeTextSequence') - return between(code) - } - - /** - * Between something and something else. - * - * ```markdown - * > | `a` - * ^^ - * ``` - * - * @type {State} - */ - function between(code) { - // EOF. - if (code === null) { - return nok(code) - } - - // To do: next major: don’t do spaces in resolve, but when compiling, - // like `markdown-rs`. - // Tabs don’t work, and virtual spaces don’t make sense. - if (code === 32) { - effects.enter('space') - effects.consume(code) - effects.exit('space') - return between - } - - // Closing fence? Could also be data. - if (code === 96) { - token = effects.enter('codeTextSequence') - size = 0 - return sequenceClose(code) - } - if (markdownLineEnding(code)) { - effects.enter('lineEnding') - effects.consume(code) - effects.exit('lineEnding') - return between - } - - // Data. - effects.enter('codeTextData') - return data(code) - } - - /** - * In data. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function data(code) { - if ( - code === null || - code === 32 || - code === 96 || - markdownLineEnding(code) - ) { - effects.exit('codeTextData') - return between(code) - } - effects.consume(code) - return data - } - - /** - * In closing sequence. - * - * ```markdown - * > | `a` - * ^ - * ``` - * - * @type {State} - */ - function sequenceClose(code) { - // More. - if (code === 96) { - effects.consume(code) - size++ - return sequenceClose - } - - // Done! - if (size === sizeOpen) { - effects.exit('codeTextSequence') - effects.exit('codeText') - return ok(code) - } - - // More or less accents: mark as data. - token.type = 'codeTextData' - return data(code) - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js -/** - * @typedef {import('micromark-util-types').Extension} Extension - */ - - - - -/** @satisfies {Extension['document']} */ -const constructs_document = { - [42]: list, - [43]: list, - [45]: list, - [48]: list, - [49]: list, - [50]: list, - [51]: list, - [52]: list, - [53]: list, - [54]: list, - [55]: list, - [56]: list, - [57]: list, - [62]: blockQuote -} - -/** @satisfies {Extension['contentInitial']} */ -const contentInitial = { - [91]: definition -} - -/** @satisfies {Extension['flowInitial']} */ -const flowInitial = { - [-2]: codeIndented, - [-1]: codeIndented, - [32]: codeIndented -} - -/** @satisfies {Extension['flow']} */ -const constructs_flow = { - [35]: headingAtx, - [42]: thematicBreak, - [45]: [setextUnderline, thematicBreak], - [60]: htmlFlow, - [61]: setextUnderline, - [95]: thematicBreak, - [96]: codeFenced, - [126]: codeFenced -} - -/** @satisfies {Extension['string']} */ -const constructs_string = { - [38]: characterReference, - [92]: characterEscape -} - -/** @satisfies {Extension['text']} */ -const constructs_text = { - [-5]: lineEnding, - [-4]: lineEnding, - [-3]: lineEnding, - [33]: labelStartImage, - [38]: characterReference, - [42]: attention, - [60]: [autolink, htmlText], - [91]: labelStartLink, - [92]: [hardBreakEscape, characterEscape], - [93]: labelEnd, - [95]: attention, - [96]: codeText -} - -/** @satisfies {Extension['insideSpan']} */ -const insideSpan = { - null: [attention, resolver] -} - -/** @satisfies {Extension['attentionMarkers']} */ -const attentionMarkers = { - null: [42, 95] -} - -/** @satisfies {Extension['disable']} */ -const disable = { - null: [] -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js -/** - * @typedef {import('micromark-util-types').Create} Create - * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension - * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct - * @typedef {import('micromark-util-types').ParseContext} ParseContext - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - */ - - - - - - - - - -/** - * @param {ParseOptions | null | undefined} [options] - * @returns {ParseContext} - */ -function parse(options) { - const settings = options || {} - const constructs = - /** @type {FullNormalizedExtension} */ - combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) - - /** @type {ParseContext} */ - const parser = { - defined: [], - lazy: {}, - constructs, - content: create(content), - document: create(document_document), - flow: create(flow), - string: create(string), - text: create(text_text) - } - return parser - - /** - * @param {InitialConstruct} initial - */ - function create(initial) { - return creator - /** @type {Create} */ - function creator(from) { - return createTokenizer(parser, initial, from) - } - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js -/** - * @typedef {import('micromark-util-types').Chunk} Chunk - * @typedef {import('micromark-util-types').Code} Code - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Value} Value - */ - -/** - * @callback Preprocessor - * @param {Value} value - * @param {Encoding | null | undefined} [encoding] - * @param {boolean | null | undefined} [end=false] - * @returns {Array<Chunk>} - */ - -const search = /[\0\t\n\r]/g - -/** - * @returns {Preprocessor} - */ -function preprocess() { - let column = 1 - let buffer = '' - /** @type {boolean | undefined} */ - let start = true - /** @type {boolean | undefined} */ - let atCarriageReturn - return preprocessor - - /** @type {Preprocessor} */ - function preprocessor(value, encoding, end) { - /** @type {Array<Chunk>} */ - const chunks = [] - /** @type {RegExpMatchArray | null} */ - let match - /** @type {number} */ - let next - /** @type {number} */ - let startPosition - /** @type {number} */ - let endPosition - /** @type {Code} */ - let code - - // @ts-expect-error `Buffer` does allow an encoding. - value = buffer + value.toString(encoding) - startPosition = 0 - buffer = '' - if (start) { - // To do: `markdown-rs` actually parses BOMs (byte order mark). - if (value.charCodeAt(0) === 65279) { - startPosition++ - } - start = undefined - } - while (startPosition < value.length) { - search.lastIndex = startPosition - match = search.exec(value) - endPosition = - match && match.index !== undefined ? match.index : value.length - code = value.charCodeAt(endPosition) - if (!match) { - buffer = value.slice(startPosition) - break - } - if (code === 10 && startPosition === endPosition && atCarriageReturn) { - chunks.push(-3) - atCarriageReturn = undefined - } else { - if (atCarriageReturn) { - chunks.push(-5) - atCarriageReturn = undefined - } - if (startPosition < endPosition) { - chunks.push(value.slice(startPosition, endPosition)) - column += endPosition - startPosition - } - switch (code) { - case 0: { - chunks.push(65533) - column++ - break - } - case 9: { - next = Math.ceil(column / 4) * 4 - chunks.push(-2) - while (column++ < next) chunks.push(-1) - break - } - case 10: { - chunks.push(-4) - column = 1 - break - } - default: { - atCarriageReturn = true - column = 1 - } - } - } - startPosition = endPosition + 1 - } - if (end) { - if (atCarriageReturn) chunks.push(-5) - if (buffer) chunks.push(buffer) - chunks.push(null) - } - return chunks - } -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js -/** - * @typedef {import('micromark-util-types').Event} Event - */ - - - -/** - * @param {Array<Event>} events - * @returns {Array<Event>} - */ -function postprocess(events) { - while (!subtokenize(events)) { - // Empty - } - return events -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -function decodeNumericCharacterReference(value, base) { - const code = Number.parseInt(value, base) - if ( - // C0 except for HT, LF, FF, CR, space. - code < 9 || - code === 11 || - (code > 13 && code < 32) || - // Control character (DEL) of C0, and C1 controls. - (code > 126 && code < 160) || - // Lone high surrogates and low surrogates. - (code > 55295 && code < 57344) || - // Noncharacters. - (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || - (code & 65535) === 65535 || - (code & 65535) === 65534 /* eslint-enable no-bitwise */ || - // Out of range - code > 1114111 - ) { - return '\uFFFD' - } - return String.fromCharCode(code) -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js - - -const characterEscapeOrReference = - /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi - -/** - * Decode markdown strings (which occur in places such as fenced code info - * strings, destinations, labels, and titles). - * - * The “string” content type allows character escapes and -references. - * This decodes those. - * - * @param {string} value - * Value to decode. - * @returns {string} - * Decoded value. - */ -function decodeString(value) { - return value.replace(characterEscapeOrReference, decode) -} - -/** - * @param {string} $0 - * @param {string} $1 - * @param {string} $2 - * @returns {string} - */ -function decode($0, $1, $2) { - if ($1) { - // Escape. - return $1 - } - - // Reference. - const head = $2.charCodeAt(0) - if (head === 35) { - const head = $2.charCodeAt(1) - const hex = head === 120 || head === 88 - return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) - } - return decodeNamedCharacterReference($2) || $0 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Point} Point - * @typedef {import('unist').Position} Position - */ - -/** - * @typedef NodeLike - * @property {string} type - * @property {PositionLike | null | undefined} [position] - * - * @typedef PositionLike - * @property {PointLike | null | undefined} [start] - * @property {PointLike | null | undefined} [end] - * - * @typedef PointLike - * @property {number | null | undefined} [line] - * @property {number | null | undefined} [column] - * @property {number | null | undefined} [offset] - */ - -/** - * Serialize the positional info of a point, position (start and end points), - * or node. - * - * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] - * Node, position, or point. - * @returns {string} - * Pretty printed positional info of a node (`string`). - * - * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) - * or a point `l:c` (when given `point`), where `l` stands for line, `c` for - * column, `s` for `start`, and `e` for end. - * An empty string (`''`) is returned if the given value is neither `node`, - * `position`, nor `point`. - */ -function stringifyPosition(value) { - // Nothing. - if (!value || typeof value !== 'object') { - return '' - } - - // Node. - if ('position' in value || 'type' in value) { - return position(value.position) - } - - // Position. - if ('start' in value || 'end' in value) { - return position(value) - } - - // Point. - if ('line' in value || 'column' in value) { - return point(value) - } - - // ? - return '' -} - -/** - * @param {Point | PointLike | null | undefined} point - * @returns {string} - */ -function point(point) { - return index(point && point.line) + ':' + index(point && point.column) -} - -/** - * @param {Position | PositionLike | null | undefined} pos - * @returns {string} - */ -function position(pos) { - return point(pos && pos.start) + '-' + point(pos && pos.end) -} - -/** - * @param {number | null | undefined} value - * @returns {number} - */ -function index(value) { - return value && typeof value === 'number' ? value : 1 -} - -;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js -/** - * @typedef {import('micromark-util-types').Encoding} Encoding - * @typedef {import('micromark-util-types').Event} Event - * @typedef {import('micromark-util-types').ParseOptions} ParseOptions - * @typedef {import('micromark-util-types').Token} Token - * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext - * @typedef {import('micromark-util-types').Value} Value - * - * @typedef {import('unist').Parent} UnistParent - * @typedef {import('unist').Point} Point - * - * @typedef {import('mdast').PhrasingContent} PhrasingContent - * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent - * @typedef {import('mdast').Content} Content - * @typedef {import('mdast').Break} Break - * @typedef {import('mdast').Blockquote} Blockquote - * @typedef {import('mdast').Code} Code - * @typedef {import('mdast').Definition} Definition - * @typedef {import('mdast').Emphasis} Emphasis - * @typedef {import('mdast').Heading} Heading - * @typedef {import('mdast').HTML} HTML - * @typedef {import('mdast').Image} Image - * @typedef {import('mdast').ImageReference} ImageReference - * @typedef {import('mdast').InlineCode} InlineCode - * @typedef {import('mdast').Link} Link - * @typedef {import('mdast').LinkReference} LinkReference - * @typedef {import('mdast').List} List - * @typedef {import('mdast').ListItem} ListItem - * @typedef {import('mdast').Paragraph} Paragraph - * @typedef {import('mdast').Root} Root - * @typedef {import('mdast').Strong} Strong - * @typedef {import('mdast').Text} Text - * @typedef {import('mdast').ThematicBreak} ThematicBreak - * @typedef {import('mdast').ReferenceType} ReferenceType - * @typedef {import('../index.js').CompileData} CompileData - */ - -/** - * @typedef {Root | Content} Node - * @typedef {Extract<Node, UnistParent>} Parent - * - * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment - */ - -/** - * @callback Transform - * Extra transform, to change the AST afterwards. - * @param {Root} tree - * Tree to transform. - * @returns {Root | undefined | null | void} - * New tree or nothing (in which case the current tree is used). - * - * @callback Handle - * Handle a token. - * @param {CompileContext} this - * Context. - * @param {Token} token - * Current token. - * @returns {void} - * Nothing. - * - * @typedef {Record<string, Handle>} Handles - * Token types mapping to handles - * - * @callback OnEnterError - * Handle the case where the `right` token is open, but it is closed (by the - * `left` token) or because we reached the end of the document. - * @param {Omit<CompileContext, 'sliceSerialize'>} this - * Context. - * @param {Token | undefined} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @callback OnExitError - * Handle the case where the `right` token is open but it is closed by - * exiting the `left` token. - * @param {Omit<CompileContext, 'sliceSerialize'>} this - * Context. - * @param {Token} left - * Left token. - * @param {Token} right - * Right token. - * @returns {void} - * Nothing. - * - * @typedef {[Token, OnEnterError | undefined]} TokenTuple - * Open token on the stack, with an optional error handler for when - * that token isn’t closed properly. - */ - -/** - * @typedef Config - * Configuration. - * - * We have our defaults, but extensions will add more. - * @property {Array<string>} canContainEols - * Token types where line endings are used. - * @property {Handles} enter - * Opening handles. - * @property {Handles} exit - * Closing handles. - * @property {Array<Transform>} transforms - * Tree transforms. - * - * @typedef {Partial<Config>} Extension - * Change how markdown tokens from micromark are turned into mdast. - * - * @typedef CompileContext - * mdast compiler context. - * @property {Array<Node | Fragment>} stack - * Stack of nodes. - * @property {Array<TokenTuple>} tokenStack - * Stack of tokens. - * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData - * Get data from the key/value store. - * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData - * Set data into the key/value store. - * @property {(this: CompileContext) => void} buffer - * Capture some of the output data. - * @property {(this: CompileContext) => string} resume - * Stop capturing and access the output data. - * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter - * Enter a token. - * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit - * Exit a token. - * @property {TokenizeContext['sliceSerialize']} sliceSerialize - * Get the string value of a token. - * @property {Config} config - * Configuration. - * - * @typedef FromMarkdownOptions - * Configuration for how to build mdast. - * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] - * Extensions for this utility to change how tokens are turned into a tree. - * - * @typedef {ParseOptions & FromMarkdownOptions} Options - * Configuration. - */ - -// To do: micromark: create a registry of tokens? -// To do: next major: don’t return given `Node` from `enter`. -// To do: next major: remove setter/getter. - - - - - - - - - - -const lib_own = {}.hasOwnProperty - -/** - * @param value - * Markdown to parse. - * @param encoding - * Character encoding for when `value` is `Buffer`. - * @param options - * Configuration. - * @returns - * mdast tree. - */ -const fromMarkdown = - /** - * @type {( - * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & - * ((value: Value, options?: Options | null | undefined) => Root) - * )} - */ - - /** - * @param {Value} value - * @param {Encoding | Options | null | undefined} [encoding] - * @param {Options | null | undefined} [options] - * @returns {Root} - */ - function (value, encoding, options) { - if (typeof encoding !== 'string') { - options = encoding - encoding = undefined - } - return compiler(options)( - postprocess( - parse(options).document().write(preprocess()(value, encoding, true)) - ) - ) - } - -/** - * Note this compiler only understand complete buffering, not streaming. - * - * @param {Options | null | undefined} [options] - */ -function compiler(options) { - /** @type {Config} */ - const config = { - transforms: [], - canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], - enter: { - autolink: opener(link), - autolinkProtocol: onenterdata, - autolinkEmail: onenterdata, - atxHeading: opener(heading), - blockQuote: opener(blockQuote), - characterEscape: onenterdata, - characterReference: onenterdata, - codeFenced: opener(codeFlow), - codeFencedFenceInfo: buffer, - codeFencedFenceMeta: buffer, - codeIndented: opener(codeFlow, buffer), - codeText: opener(codeText, buffer), - codeTextData: onenterdata, - data: onenterdata, - codeFlowValue: onenterdata, - definition: opener(definition), - definitionDestinationString: buffer, - definitionLabelString: buffer, - definitionTitleString: buffer, - emphasis: opener(emphasis), - hardBreakEscape: opener(hardBreak), - hardBreakTrailing: opener(hardBreak), - htmlFlow: opener(html, buffer), - htmlFlowData: onenterdata, - htmlText: opener(html, buffer), - htmlTextData: onenterdata, - image: opener(image), - label: buffer, - link: opener(link), - listItem: opener(listItem), - listItemValue: onenterlistitemvalue, - listOrdered: opener(list, onenterlistordered), - listUnordered: opener(list), - paragraph: opener(paragraph), - reference: onenterreference, - referenceString: buffer, - resourceDestinationString: buffer, - resourceTitleString: buffer, - setextHeading: opener(heading), - strong: opener(strong), - thematicBreak: opener(thematicBreak) - }, - exit: { - atxHeading: closer(), - atxHeadingSequence: onexitatxheadingsequence, - autolink: closer(), - autolinkEmail: onexitautolinkemail, - autolinkProtocol: onexitautolinkprotocol, - blockQuote: closer(), - characterEscapeValue: onexitdata, - characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, - characterReferenceMarkerNumeric: onexitcharacterreferencemarker, - characterReferenceValue: onexitcharacterreferencevalue, - codeFenced: closer(onexitcodefenced), - codeFencedFence: onexitcodefencedfence, - codeFencedFenceInfo: onexitcodefencedfenceinfo, - codeFencedFenceMeta: onexitcodefencedfencemeta, - codeFlowValue: onexitdata, - codeIndented: closer(onexitcodeindented), - codeText: closer(onexitcodetext), - codeTextData: onexitdata, - data: onexitdata, - definition: closer(), - definitionDestinationString: onexitdefinitiondestinationstring, - definitionLabelString: onexitdefinitionlabelstring, - definitionTitleString: onexitdefinitiontitlestring, - emphasis: closer(), - hardBreakEscape: closer(onexithardbreak), - hardBreakTrailing: closer(onexithardbreak), - htmlFlow: closer(onexithtmlflow), - htmlFlowData: onexitdata, - htmlText: closer(onexithtmltext), - htmlTextData: onexitdata, - image: closer(onexitimage), - label: onexitlabel, - labelText: onexitlabeltext, - lineEnding: onexitlineending, - link: closer(onexitlink), - listItem: closer(), - listOrdered: closer(), - listUnordered: closer(), - paragraph: closer(), - referenceString: onexitreferencestring, - resourceDestinationString: onexitresourcedestinationstring, - resourceTitleString: onexitresourcetitlestring, - resource: onexitresource, - setextHeading: closer(onexitsetextheading), - setextHeadingLineSequence: onexitsetextheadinglinesequence, - setextHeadingText: onexitsetextheadingtext, - strong: closer(), - thematicBreak: closer() - } - } - configure(config, (options || {}).mdastExtensions || []) - - /** @type {CompileData} */ - const data = {} - return compile - - /** - * Turn micromark events into an mdast tree. - * - * @param {Array<Event>} events - * Events. - * @returns {Root} - * mdast tree. - */ - function compile(events) { - /** @type {Root} */ - let tree = { - type: 'root', - children: [] - } - /** @type {Omit<CompileContext, 'sliceSerialize'>} */ - const context = { - stack: [tree], - tokenStack: [], - config, - enter, - exit, - buffer, - resume, - setData, - getData - } - /** @type {Array<number>} */ - const listStack = [] - let index = -1 - while (++index < events.length) { - // We preprocess lists to add `listItem` tokens, and to infer whether - // items the list itself are spread out. - if ( - events[index][1].type === 'listOrdered' || - events[index][1].type === 'listUnordered' - ) { - if (events[index][0] === 'enter') { - listStack.push(index) - } else { - const tail = listStack.pop() - index = prepareList(events, tail, index) - } - } - } - index = -1 - while (++index < events.length) { - const handler = config[events[index][0]] - if (lib_own.call(handler, events[index][1].type)) { - handler[events[index][1].type].call( - Object.assign( - { - sliceSerialize: events[index][2].sliceSerialize - }, - context - ), - events[index][1] - ) - } - } - - // Handle tokens still being open. - if (context.tokenStack.length > 0) { - const tail = context.tokenStack[context.tokenStack.length - 1] - const handler = tail[1] || defaultOnError - handler.call(context, undefined, tail[0]) - } - - // Figure out `root` position. - tree.position = { - start: lib_point( - events.length > 0 - ? events[0][1].start - : { - line: 1, - column: 1, - offset: 0 - } - ), - end: lib_point( - events.length > 0 - ? events[events.length - 2][1].end - : { - line: 1, - column: 1, - offset: 0 - } - ) - } - - // Call transforms. - index = -1 - while (++index < config.transforms.length) { - tree = config.transforms[index](tree) || tree - } - return tree - } - - /** - * @param {Array<Event>} events - * @param {number} start - * @param {number} length - * @returns {number} - */ - function prepareList(events, start, length) { - let index = start - 1 - let containerBalance = -1 - let listSpread = false - /** @type {Token | undefined} */ - let listItem - /** @type {number | undefined} */ - let lineIndex - /** @type {number | undefined} */ - let firstBlankLineIndex - /** @type {boolean | undefined} */ - let atMarker - while (++index <= length) { - const event = events[index] - if ( - event[1].type === 'listUnordered' || - event[1].type === 'listOrdered' || - event[1].type === 'blockQuote' - ) { - if (event[0] === 'enter') { - containerBalance++ - } else { - containerBalance-- - } - atMarker = undefined - } else if (event[1].type === 'lineEndingBlank') { - if (event[0] === 'enter') { - if ( - listItem && - !atMarker && - !containerBalance && - !firstBlankLineIndex - ) { - firstBlankLineIndex = index - } - atMarker = undefined - } - } else if ( - event[1].type === 'linePrefix' || - event[1].type === 'listItemValue' || - event[1].type === 'listItemMarker' || - event[1].type === 'listItemPrefix' || - event[1].type === 'listItemPrefixWhitespace' - ) { - // Empty. - } else { - atMarker = undefined - } - if ( - (!containerBalance && - event[0] === 'enter' && - event[1].type === 'listItemPrefix') || - (containerBalance === -1 && - event[0] === 'exit' && - (event[1].type === 'listUnordered' || - event[1].type === 'listOrdered')) - ) { - if (listItem) { - let tailIndex = index - lineIndex = undefined - while (tailIndex--) { - const tailEvent = events[tailIndex] - if ( - tailEvent[1].type === 'lineEnding' || - tailEvent[1].type === 'lineEndingBlank' - ) { - if (tailEvent[0] === 'exit') continue - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank' - listSpread = true - } - tailEvent[1].type = 'lineEnding' - lineIndex = tailIndex - } else if ( - tailEvent[1].type === 'linePrefix' || - tailEvent[1].type === 'blockQuotePrefix' || - tailEvent[1].type === 'blockQuotePrefixWhitespace' || - tailEvent[1].type === 'blockQuoteMarker' || - tailEvent[1].type === 'listItemIndent' - ) { - // Empty - } else { - break - } - } - if ( - firstBlankLineIndex && - (!lineIndex || firstBlankLineIndex < lineIndex) - ) { - listItem._spread = true - } - - // Fix position. - listItem.end = Object.assign( - {}, - lineIndex ? events[lineIndex][1].start : event[1].end - ) - events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) - index++ - length++ - } - - // Create a new list item. - if (event[1].type === 'listItemPrefix') { - listItem = { - type: 'listItem', - _spread: false, - start: Object.assign({}, event[1].start), - // @ts-expect-error: we’ll add `end` in a second. - end: undefined - } - // @ts-expect-error: `listItem` is most definitely defined, TS... - events.splice(index, 0, ['enter', listItem, event[2]]) - index++ - length++ - firstBlankLineIndex = undefined - atMarker = true - } - } - } - events[start][1]._spread = listSpread - return length - } - - /** - * Set data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @param {CompileData[Key]} [value] - * New value. - * @returns {void} - * Nothing. - */ - function setData(key, value) { - data[key] = value - } - - /** - * Get data. - * - * @template {keyof CompileData} Key - * Field type. - * @param {Key} key - * Key of field. - * @returns {CompileData[Key]} - * Value. - */ - function getData(key) { - return data[key] - } - - /** - * Create an opener handle. - * - * @param {(token: Token) => Node} create - * Create a node. - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function opener(create, and) { - return open - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function open(token) { - enter.call(this, create(token), token) - if (and) and.call(this, token) - } - } - - /** - * @this {CompileContext} - * @returns {void} - */ - function buffer() { - this.stack.push({ - type: 'fragment', - children: [] - }) - } - - /** - * @template {Node} Kind - * Node type. - * @this {CompileContext} - * Context. - * @param {Kind} node - * Node to enter. - * @param {Token} token - * Corresponding token. - * @param {OnEnterError | undefined} [errorHandler] - * Handle the case where this token is open, but it is closed by something else. - * @returns {Kind} - * The given node. - */ - function enter(node, token, errorHandler) { - const parent = this.stack[this.stack.length - 1] - // @ts-expect-error: Assume `Node` can exist as a child of `parent`. - parent.children.push(node) - this.stack.push(node) - this.tokenStack.push([token, errorHandler]) - // @ts-expect-error: `end` will be patched later. - node.position = { - start: lib_point(token.start) - } - return node - } - - /** - * Create a closer handle. - * - * @param {Handle} [and] - * Optional function to also run. - * @returns {Handle} - * Handle. - */ - function closer(and) { - return close - - /** - * @this {CompileContext} - * @param {Token} token - * @returns {void} - */ - function close(token) { - if (and) and.call(this, token) - exit.call(this, token) - } - } - - /** - * @this {CompileContext} - * Context. - * @param {Token} token - * Corresponding token. - * @param {OnExitError | undefined} [onExitError] - * Handle the case where another token is open. - * @returns {Node} - * The closed node. - */ - function exit(token, onExitError) { - const node = this.stack.pop() - const open = this.tokenStack.pop() - if (!open) { - throw new Error( - 'Cannot close `' + - token.type + - '` (' + - stringifyPosition({ - start: token.start, - end: token.end - }) + - '): it’s not open' - ) - } else if (open[0].type !== token.type) { - if (onExitError) { - onExitError.call(this, token, open[0]) - } else { - const handler = open[1] || defaultOnError - handler.call(this, token, open[0]) - } - } - node.position.end = lib_point(token.end) - return node - } - - /** - * @this {CompileContext} - * @returns {string} - */ - function resume() { - return lib_toString(this.stack.pop()) - } - - // - // Handlers. - // - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistordered() { - setData('expectingFirstListItemValue', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onenterlistitemvalue(token) { - if (getData('expectingFirstListItemValue')) { - const ancestor = this.stack[this.stack.length - 2] - ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) - setData('expectingFirstListItemValue') - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfenceinfo() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.lang = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfencemeta() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.meta = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefencedfence() { - // Exit if this is the closing fence. - if (getData('flowCodeInside')) return - this.buffer() - setData('flowCodeInside', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodefenced() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') - setData('flowCodeInside') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcodeindented() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data.replace(/(\r?\n|\r)$/g, '') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitionlabelstring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - node.label = label - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiontitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitdefinitiondestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitatxheadingsequence(token) { - const node = this.stack[this.stack.length - 1] - if (!node.depth) { - const depth = this.sliceSerialize(token).length - node.depth = depth - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadingtext() { - setData('setextHeadingSlurpLineEnding', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheadinglinesequence(token) { - const node = this.stack[this.stack.length - 1] - node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitsetextheading() { - setData('setextHeadingSlurpLineEnding') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterdata(token) { - const node = this.stack[this.stack.length - 1] - let tail = node.children[node.children.length - 1] - if (!tail || tail.type !== 'text') { - // Add a new text node. - tail = text() - // @ts-expect-error: we’ll add `end` later. - tail.position = { - start: lib_point(token.start) - } - // @ts-expect-error: Assume `parent` accepts `text`. - node.children.push(tail) - } - this.stack.push(tail) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitdata(token) { - const tail = this.stack.pop() - tail.value += this.sliceSerialize(token) - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlineending(token) { - const context = this.stack[this.stack.length - 1] - // If we’re at a hard break, include the line ending in there. - if (getData('atHardBreak')) { - const tail = context.children[context.children.length - 1] - tail.position.end = lib_point(token.end) - setData('atHardBreak') - return - } - if ( - !getData('setextHeadingSlurpLineEnding') && - config.canContainEols.includes(context.type) - ) { - onenterdata.call(this, token) - onexitdata.call(this, token) - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithardbreak() { - setData('atHardBreak', true) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmlflow() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexithtmltext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcodetext() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.value = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlink() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitimage() { - const node = this.stack[this.stack.length - 1] - // Note: there are also `identifier` and `label` fields on this link node! - // These are used / cleaned here. - // To do: clean. - if (getData('inReference')) { - /** @type {ReferenceType} */ - const referenceType = getData('referenceType') || 'shortcut' - node.type += 'Reference' - // @ts-expect-error: mutate. - node.referenceType = referenceType - // @ts-expect-error: mutate. - delete node.url - delete node.title - } else { - // @ts-expect-error: mutate. - delete node.identifier - // @ts-expect-error: mutate. - delete node.label - } - setData('referenceType') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabeltext(token) { - const string = this.sliceSerialize(token) - const ancestor = this.stack[this.stack.length - 2] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - ancestor.label = decodeString(string) - // @ts-expect-error: same as above. - ancestor.identifier = normalizeIdentifier(string).toLowerCase() - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitlabel() { - const fragment = this.stack[this.stack.length - 1] - const value = this.resume() - const node = this.stack[this.stack.length - 1] - // Assume a reference. - setData('inReference', true) - if (node.type === 'link') { - /** @type {Array<StaticPhrasingContent>} */ - // @ts-expect-error: Assume static phrasing content. - const children = fragment.children - node.children = children - } else { - node.alt = value - } - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcedestinationstring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.url = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresourcetitlestring() { - const data = this.resume() - const node = this.stack[this.stack.length - 1] - node.title = data - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitresource() { - setData('inReference') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onenterreference() { - setData('referenceType', 'collapsed') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitreferencestring(token) { - const label = this.resume() - const node = this.stack[this.stack.length - 1] - // @ts-expect-error: stash this on the node, as it might become a reference - // later. - node.label = label - // @ts-expect-error: same as above. - node.identifier = normalizeIdentifier( - this.sliceSerialize(token) - ).toLowerCase() - setData('referenceType', 'full') - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - - function onexitcharacterreferencemarker(token) { - setData('characterReferenceType', token.type) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitcharacterreferencevalue(token) { - const data = this.sliceSerialize(token) - const type = getData('characterReferenceType') - /** @type {string} */ - let value - if (type) { - value = decodeNumericCharacterReference( - data, - type === 'characterReferenceMarkerNumeric' ? 10 : 16 - ) - setData('characterReferenceType') - } else { - const result = decodeNamedCharacterReference(data) - value = result - } - const tail = this.stack.pop() - tail.value += value - tail.position.end = lib_point(token.end) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkprotocol(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = this.sliceSerialize(token) - } - - /** - * @this {CompileContext} - * @type {Handle} - */ - function onexitautolinkemail(token) { - onexitdata.call(this, token) - const node = this.stack[this.stack.length - 1] - node.url = 'mailto:' + this.sliceSerialize(token) - } - - // - // Creaters. - // - - /** @returns {Blockquote} */ - function blockQuote() { - return { - type: 'blockquote', - children: [] - } - } - - /** @returns {Code} */ - function codeFlow() { - return { - type: 'code', - lang: null, - meta: null, - value: '' - } - } - - /** @returns {InlineCode} */ - function codeText() { - return { - type: 'inlineCode', - value: '' - } - } - - /** @returns {Definition} */ - function definition() { - return { - type: 'definition', - identifier: '', - label: null, - title: null, - url: '' - } - } - - /** @returns {Emphasis} */ - function emphasis() { - return { - type: 'emphasis', - children: [] - } - } - - /** @returns {Heading} */ - function heading() { - // @ts-expect-error `depth` will be set later. - return { - type: 'heading', - depth: undefined, - children: [] - } - } - - /** @returns {Break} */ - function hardBreak() { - return { - type: 'break' - } - } - - /** @returns {HTML} */ - function html() { - return { - type: 'html', - value: '' - } - } - - /** @returns {Image} */ - function image() { - return { - type: 'image', - title: null, - url: '', - alt: null - } - } - - /** @returns {Link} */ - function link() { - return { - type: 'link', - title: null, - url: '', - children: [] - } - } - - /** - * @param {Token} token - * @returns {List} - */ - function list(token) { - return { - type: 'list', - ordered: token.type === 'listOrdered', - start: null, - spread: token._spread, - children: [] - } - } - - /** - * @param {Token} token - * @returns {ListItem} - */ - function listItem(token) { - return { - type: 'listItem', - spread: token._spread, - checked: null, - children: [] - } - } - - /** @returns {Paragraph} */ - function paragraph() { - return { - type: 'paragraph', - children: [] - } - } - - /** @returns {Strong} */ - function strong() { - return { - type: 'strong', - children: [] - } - } - - /** @returns {Text} */ - function text() { - return { - type: 'text', - value: '' - } - } - - /** @returns {ThematicBreak} */ - function thematicBreak() { - return { - type: 'thematicBreak' - } - } -} - -/** - * Copy a point-like value. - * - * @param {Point} d - * Point-like value. - * @returns {Point} - * unist point. - */ -function lib_point(d) { - return { - line: d.line, - column: d.column, - offset: d.offset - } -} - -/** - * @param {Config} combined - * @param {Array<Extension | Array<Extension>>} extensions - * @returns {void} - */ -function configure(combined, extensions) { - let index = -1 - while (++index < extensions.length) { - const value = extensions[index] - if (Array.isArray(value)) { - configure(combined, value) - } else { - extension(combined, value) - } - } -} - -/** - * @param {Config} combined - * @param {Extension} extension - * @returns {void} - */ -function extension(combined, extension) { - /** @type {keyof Extension} */ - let key - for (key in extension) { - if (lib_own.call(extension, key)) { - if (key === 'canContainEols') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'transforms') { - const right = extension[key] - if (right) { - combined[key].push(...right) - } - } else if (key === 'enter' || key === 'exit') { - const right = extension[key] - if (right) { - Object.assign(combined[key], right) - } - } - } - } -} - -/** @type {OnEnterError} */ -function defaultOnError(left, right) { - if (left) { - throw new Error( - 'Cannot close `' + - left.type + - '` (' + - stringifyPosition({ - start: left.start, - end: left.end - }) + - '): a different token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is open' - ) - } else { - throw new Error( - 'Cannot close document, a token (`' + - right.type + - '`, ' + - stringifyPosition({ - start: right.start, - end: right.end - }) + - ') is still open' - ) - } -} - -// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js -var esm = __webpack_require__(60513); -;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-ca0c5216.js - - - -function preprocessMarkdown(markdown) { - const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); - const withoutExtraSpaces = (0,esm/* dedent */.T)(withoutMultipleNewlines); - return withoutExtraSpaces; -} -function markdownToLines(markdown) { - const preprocessedMarkdown = preprocessMarkdown(markdown); - const { children } = fromMarkdown(preprocessedMarkdown); - const lines = [[]]; - let currentLine = 0; - function processNode(node, parentType = "normal") { - if (node.type === "text") { - const textLines = node.value.split("\n"); - textLines.forEach((textLine, index) => { - if (index !== 0) { - currentLine++; - lines.push([]); - } - textLine.split(" ").forEach((word) => { - if (word) { - lines[currentLine].push({ content: word, type: parentType }); - } - }); - }); - } else if (node.type === "strong" || node.type === "emphasis") { - node.children.forEach((contentNode) => { - processNode(contentNode, node.type); - }); - } - } - children.forEach((treeNode) => { - if (treeNode.type === "paragraph") { - treeNode.children.forEach((contentNode) => { - processNode(contentNode); - }); - } - }); - return lines; -} -function markdownToHTML(markdown) { - const { children } = fromMarkdown(markdown); - function output(node) { - if (node.type === "text") { - return node.value.replace(/\n/g, "<br/>"); - } else if (node.type === "strong") { - return `<strong>${node.children.map(output).join("")}</strong>`; - } else if (node.type === "emphasis") { - return `<em>${node.children.map(output).join("")}</em>`; - } else if (node.type === "paragraph") { - return `<p>${node.children.map(output).join("")}</p>`; - } - return `Unsupported markdown: ${node.type}`; - } - return children.map(output).join(""); -} -function splitTextToChars(text) { - if (Intl.Segmenter) { - return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); - } - return [...text]; -} -function splitWordToFitWidth(checkFit, word) { - const characters = splitTextToChars(word.content); - return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); -} -function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { - if (remainingChars.length === 0) { - return [ - { content: usedChars.join(""), type }, - { content: "", type } - ]; - } - const [nextChar, ...rest] = remainingChars; - const newWord = [...usedChars, nextChar]; - if (checkFit([{ content: newWord.join(""), type }])) { - return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); - } - if (usedChars.length === 0 && nextChar) { - usedChars.push(nextChar); - remainingChars.shift(); - } - return [ - { content: usedChars.join(""), type }, - { content: remainingChars.join(""), type } - ]; -} -function splitLineToFitWidth(line, checkFit) { - if (line.some(({ content }) => content.includes("\n"))) { - throw new Error("splitLineToFitWidth does not support newlines in the line"); - } - return splitLineToFitWidthRecursion(line, checkFit); -} -function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { - if (words.length === 0) { - if (newLine.length > 0) { - lines.push(newLine); - } - return lines.length > 0 ? lines : []; - } - let joiner = ""; - if (words[0].content === " ") { - joiner = " "; - words.shift(); - } - const nextWord = words.shift() ?? { content: " ", type: "normal" }; - const lineWithNextWord = [...newLine]; - if (joiner !== "") { - lineWithNextWord.push({ content: joiner, type: "normal" }); - } - lineWithNextWord.push(nextWord); - if (checkFit(lineWithNextWord)) { - return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); - } - if (newLine.length > 0) { - lines.push(newLine); - words.unshift(nextWord); - } else if (nextWord.content) { - const [line, rest] = splitWordToFitWidth(checkFit, nextWord); - lines.push([line]); - if (rest.content) { - words.unshift(rest); - } - } - return splitLineToFitWidthRecursion(words, checkFit, lines); -} -function applyStyle(dom, styleFn) { - if (styleFn) { - dom.attr("style", styleFn); - } -} -function addHtmlSpan(element, node, width, classes, addBackground = false) { - const fo = element.append("foreignObject"); - const div = fo.append("xhtml:div"); - const label = node.label; - const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; - div.html( - ` - <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" - ); - applyStyle(div, node.labelStyle); - div.style("display", "table-cell"); - div.style("white-space", "nowrap"); - div.style("max-width", width + "px"); - div.attr("xmlns", "http://www.w3.org/1999/xhtml"); - if (addBackground) { - div.attr("class", "labelBkg"); - } - let bbox = div.node().getBoundingClientRect(); - if (bbox.width === width) { - div.style("display", "table"); - div.style("white-space", "break-spaces"); - div.style("width", width + "px"); - bbox = div.node().getBoundingClientRect(); - } - fo.style("width", bbox.width); - fo.style("height", bbox.height); - return fo.node(); -} -function createTspan(textElement, lineIndex, lineHeight) { - return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); -} -function computeWidthOfText(parentNode, lineHeight, line) { - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, line); - const textLength = testSpan.node().getComputedTextLength(); - testElement.remove(); - return textLength; -} -function computeDimensionOfText(parentNode, lineHeight, text) { - var _a; - const testElement = parentNode.append("text"); - const testSpan = createTspan(testElement, 1, lineHeight); - updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); - const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); - if (textDimension) { - testElement.remove(); - } - return textDimension; -} -function createFormattedText(width, g, structuredText, addBackground = false) { - const lineHeight = 1.1; - const labelGroup = g.append("g"); - const bkg = labelGroup.insert("rect").attr("class", "background"); - const textElement = labelGroup.append("text").attr("y", "-10.1"); - let lineIndex = 0; - for (const line of structuredText) { - const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; - const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); - for (const preparedLine of linesUnderWidth) { - const tspan = createTspan(textElement, lineIndex, lineHeight); - updateTextContentAndStyles(tspan, preparedLine); - lineIndex++; - } - } - if (addBackground) { - const bbox = textElement.node().getBBox(); - const padding = 2; - bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); - return labelGroup.node(); - } else { - return textElement.node(); - } -} -function updateTextContentAndStyles(tspan, wrappedLine) { - tspan.text(""); - wrappedLine.forEach((word, index) => { - const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); - if (index === 0) { - innerTspan.text(word.content); - } else { - innerTspan.text(" " + word.content); - } - }); -} -const createText = (el, text = "", { - style = "", - isTitle = false, - classes = "", - useHtmlLabels = true, - isNode = true, - width = 200, - addSvgBackground = false -} = {}) => { - mermaid_6dc72991.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); - if (useHtmlLabels) { - const htmlText = markdownToHTML(text); - const node = { - isNode, - label: (0,mermaid_6dc72991.M)(htmlText).replace( - /fa[blrs]?:fa-[\w-]+/g, - // cspell: disable-line - (s) => `<i class='${s.replace(":", " ")}'></i>` - ), - labelStyle: style.replace("fill:", "color:") - }; - const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); - return vertexNode; - } else { - const structuredText = markdownToLines(text); - const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); - return svgLabel; - } -}; - - - -/***/ }), - -/***/ 32925: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99702); -/* harmony import */ var _createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(18897); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99418); - - - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 10, 12, 14, 16, 18, 19, 21, 23], $V1 = [2, 6], $V2 = [1, 3], $V3 = [1, 5], $V4 = [1, 6], $V5 = [1, 7], $V6 = [1, 5, 10, 12, 14, 16, 18, 19, 21, 23, 34, 35, 36], $V7 = [1, 25], $V8 = [1, 26], $V9 = [1, 28], $Va = [1, 29], $Vb = [1, 30], $Vc = [1, 31], $Vd = [1, 32], $Ve = [1, 33], $Vf = [1, 34], $Vg = [1, 35], $Vh = [1, 36], $Vi = [1, 37], $Vj = [1, 43], $Vk = [1, 42], $Vl = [1, 47], $Vm = [1, 50], $Vn = [1, 10, 12, 14, 16, 18, 19, 21, 23, 34, 35, 36], $Vo = [1, 10, 12, 14, 16, 18, 19, 21, 23, 24, 26, 27, 28, 34, 35, 36], $Vp = [1, 10, 12, 14, 16, 18, 19, 21, 23, 24, 26, 27, 28, 34, 35, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], $Vq = [1, 64]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "eol": 4, "XYCHART": 5, "chartConfig": 6, "document": 7, "CHART_ORIENTATION": 8, "statement": 9, "title": 10, "text": 11, "X_AXIS": 12, "parseXAxis": 13, "Y_AXIS": 14, "parseYAxis": 15, "LINE": 16, "plotData": 17, "BAR": 18, "acc_title": 19, "acc_title_value": 20, "acc_descr": 21, "acc_descr_value": 22, "acc_descr_multiline_value": 23, "SQUARE_BRACES_START": 24, "commaSeparatedNumbers": 25, "SQUARE_BRACES_END": 26, "NUMBER_WITH_DECIMAL": 27, "COMMA": 28, "xAxisData": 29, "bandData": 30, "ARROW_DELIMITER": 31, "commaSeparatedTexts": 32, "yAxisData": 33, "NEWLINE": 34, "SEMI": 35, "EOF": 36, "alphaNum": 37, "STR": 38, "MD_STR": 39, "alphaNumToken": 40, "AMP": 41, "NUM": 42, "ALPHA": 43, "PLUS": 44, "EQUALS": 45, "MULT": 46, "DOT": 47, "BRKT": 48, "MINUS": 49, "UNDERSCORE": 50, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 5: "XYCHART", 8: "CHART_ORIENTATION", 10: "title", 12: "X_AXIS", 14: "Y_AXIS", 16: "LINE", 18: "BAR", 19: "acc_title", 20: "acc_title_value", 21: "acc_descr", 22: "acc_descr_value", 23: "acc_descr_multiline_value", 24: "SQUARE_BRACES_START", 26: "SQUARE_BRACES_END", 27: "NUMBER_WITH_DECIMAL", 28: "COMMA", 31: "ARROW_DELIMITER", 34: "NEWLINE", 35: "SEMI", 36: "EOF", 38: "STR", 39: "MD_STR", 41: "AMP", 42: "NUM", 43: "ALPHA", 44: "PLUS", 45: "EQUALS", 46: "MULT", 47: "DOT", 48: "BRKT", 49: "MINUS", 50: "UNDERSCORE" }, - productions_: [0, [3, 2], [3, 3], [3, 2], [3, 1], [6, 1], [7, 0], [7, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 3], [9, 2], [9, 3], [9, 2], [9, 2], [9, 1], [17, 3], [25, 3], [25, 1], [13, 1], [13, 2], [13, 1], [29, 1], [29, 3], [30, 3], [32, 3], [32, 1], [15, 1], [15, 2], [15, 1], [33, 3], [4, 1], [4, 1], [4, 1], [11, 1], [11, 1], [11, 1], [37, 1], [37, 2], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 5: - yy.setOrientation($$[$0]); - break; - case 9: - yy.setDiagramTitle($$[$0].text.trim()); - break; - case 12: - yy.setLineData({ text: "", type: "text" }, $$[$0]); - break; - case 13: - yy.setLineData($$[$0 - 1], $$[$0]); - break; - case 14: - yy.setBarData({ text: "", type: "text" }, $$[$0]); - break; - case 15: - yy.setBarData($$[$0 - 1], $$[$0]); - break; - case 16: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 17: - case 18: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 19: - this.$ = $$[$0 - 1]; - break; - case 20: - this.$ = [Number($$[$0 - 2]), ...$$[$0]]; - break; - case 21: - this.$ = [Number($$[$0])]; - break; - case 22: - yy.setXAxisTitle($$[$0]); - break; - case 23: - yy.setXAxisTitle($$[$0 - 1]); - break; - case 24: - yy.setXAxisTitle({ type: "text", text: "" }); - break; - case 25: - yy.setXAxisBand($$[$0]); - break; - case 26: - yy.setXAxisRangeData(Number($$[$0 - 2]), Number($$[$0])); - break; - case 27: - this.$ = $$[$0 - 1]; - break; - case 28: - this.$ = [$$[$0 - 2], ...$$[$0]]; - break; - case 29: - this.$ = [$$[$0]]; - break; - case 30: - yy.setYAxisTitle($$[$0]); - break; - case 31: - yy.setYAxisTitle($$[$0 - 1]); - break; - case 32: - yy.setYAxisTitle({ type: "text", text: "" }); - break; - case 33: - yy.setYAxisRangeData(Number($$[$0 - 2]), Number($$[$0])); - break; - case 37: - this.$ = { text: $$[$0], type: "text" }; - break; - case 38: - this.$ = { text: $$[$0], type: "text" }; - break; - case 39: - this.$ = { text: $$[$0], type: "markdown" }; - break; - case 40: - this.$ = $$[$0]; - break; - case 41: - this.$ = $$[$0 - 1] + "" + $$[$0]; - break; - } - }, - table: [o($V0, $V1, { 3: 1, 4: 2, 7: 4, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), { 1: [3] }, o($V0, $V1, { 4: 2, 7: 4, 3: 8, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), o($V0, $V1, { 4: 2, 7: 4, 6: 9, 3: 10, 5: $V2, 8: [1, 11], 34: $V3, 35: $V4, 36: $V5 }), { 1: [2, 4], 9: 12, 10: [1, 13], 12: [1, 14], 14: [1, 15], 16: [1, 16], 18: [1, 17], 19: [1, 18], 21: [1, 19], 23: [1, 20] }, o($V6, [2, 34]), o($V6, [2, 35]), o($V6, [2, 36]), { 1: [2, 1] }, o($V0, $V1, { 4: 2, 7: 4, 3: 21, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), { 1: [2, 3] }, o($V6, [2, 5]), o($V0, [2, 7], { 4: 22, 34: $V3, 35: $V4, 36: $V5 }), { 11: 23, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 39, 13: 38, 24: $Vj, 27: $Vk, 29: 40, 30: 41, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 45, 15: 44, 27: $Vl, 33: 46, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 49, 17: 48, 24: $Vm, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 52, 17: 51, 24: $Vm, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 20: [1, 53] }, { 22: [1, 54] }, o($Vn, [2, 18]), { 1: [2, 2] }, o($Vn, [2, 8]), o($Vn, [2, 9]), o($Vo, [2, 37], { 40: 55, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }), o($Vo, [2, 38]), o($Vo, [2, 39]), o($Vp, [2, 40]), o($Vp, [2, 42]), o($Vp, [2, 43]), o($Vp, [2, 44]), o($Vp, [2, 45]), o($Vp, [2, 46]), o($Vp, [2, 47]), o($Vp, [2, 48]), o($Vp, [2, 49]), o($Vp, [2, 50]), o($Vp, [2, 51]), o($Vn, [2, 10]), o($Vn, [2, 22], { 30: 41, 29: 56, 24: $Vj, 27: $Vk }), o($Vn, [2, 24]), o($Vn, [2, 25]), { 31: [1, 57] }, { 11: 59, 32: 58, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, o($Vn, [2, 11]), o($Vn, [2, 30], { 33: 60, 27: $Vl }), o($Vn, [2, 32]), { 31: [1, 61] }, o($Vn, [2, 12]), { 17: 62, 24: $Vm }, { 25: 63, 27: $Vq }, o($Vn, [2, 14]), { 17: 65, 24: $Vm }, o($Vn, [2, 16]), o($Vn, [2, 17]), o($Vp, [2, 41]), o($Vn, [2, 23]), { 27: [1, 66] }, { 26: [1, 67] }, { 26: [2, 29], 28: [1, 68] }, o($Vn, [2, 31]), { 27: [1, 69] }, o($Vn, [2, 13]), { 26: [1, 70] }, { 26: [2, 21], 28: [1, 71] }, o($Vn, [2, 15]), o($Vn, [2, 26]), o($Vn, [2, 27]), { 11: 59, 32: 72, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, o($Vn, [2, 33]), o($Vn, [2, 19]), { 25: 73, 27: $Vq }, { 26: [2, 28] }, { 26: [2, 20] }], - defaultActions: { 8: [2, 1], 10: [2, 3], 21: [2, 2], 72: [2, 28], 73: [2, 20] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - break; - case 1: - break; - case 2: - this.popState(); - return 34; - case 3: - this.popState(); - return 34; - case 4: - return 34; - case 5: - break; - case 6: - return 10; - case 7: - this.pushState("acc_title"); - return 19; - case 8: - this.popState(); - return "acc_title_value"; - case 9: - this.pushState("acc_descr"); - return 21; - case 10: - this.popState(); - return "acc_descr_value"; - case 11: - this.pushState("acc_descr_multiline"); - break; - case 12: - this.popState(); - break; - case 13: - return "acc_descr_multiline_value"; - case 14: - return 5; - case 15: - return 8; - case 16: - this.pushState("axis_data"); - return "X_AXIS"; - case 17: - this.pushState("axis_data"); - return "Y_AXIS"; - case 18: - this.pushState("axis_band_data"); - return 24; - case 19: - return 31; - case 20: - this.pushState("data"); - return 16; - case 21: - this.pushState("data"); - return 18; - case 22: - this.pushState("data_inner"); - return 24; - case 23: - return 27; - case 24: - this.popState(); - return 26; - case 25: - this.popState(); - break; - case 26: - this.pushState("string"); - break; - case 27: - this.popState(); - break; - case 28: - return "STR"; - case 29: - return 24; - case 30: - return 26; - case 31: - return 43; - case 32: - return "COLON"; - case 33: - return 44; - case 34: - return 28; - case 35: - return 45; - case 36: - return 46; - case 37: - return 48; - case 38: - return 50; - case 39: - return 47; - case 40: - return 41; - case 41: - return 49; - case 42: - return 42; - case 43: - break; - case 44: - return 35; - case 45: - return 36; - } - }, - rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:(\r?\n))/i, /^(?:(\r?\n))/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:title\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:\{)/i, /^(?:[^\}]*)/i, /^(?:xychart-beta\b)/i, /^(?:(?:vertical|horizontal))/i, /^(?:x-axis\b)/i, /^(?:y-axis\b)/i, /^(?:\[)/i, /^(?:-->)/i, /^(?:line\b)/i, /^(?:bar\b)/i, /^(?:\[)/i, /^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i, /^(?:\])/i, /^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n<md_string>\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n<md_string>\(\?:`))/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:\[)/i, /^(?:\])/i, /^(?:[A-Za-z]+)/i, /^(?::)/i, /^(?:\+)/i, /^(?:,)/i, /^(?:=)/i, /^(?:\*)/i, /^(?:#)/i, /^(?:[\_])/i, /^(?:\.)/i, /^(?:&)/i, /^(?:-)/i, /^(?:[0-9]+)/i, /^(?:\s+)/i, /^(?:;)/i, /^(?:$)/i], - conditions: { "data_inner": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 20, 21, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true }, "data": { "rules": [0, 1, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 20, 21, 22, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true }, "axis_band_data": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 20, 21, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true }, "axis_data": { "rules": [0, 1, 2, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true }, "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "title": { "rules": [], "inclusive": false }, "md_string": { "rules": [], "inclusive": false }, "string": { "rules": [27, 28], "inclusive": false }, "INITIAL": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 20, 21, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -function isBarPlot(data) { - return data.type === "bar"; -} -function isBandAxisData(data) { - return data.type === "band"; -} -function isLinearAxisData(data) { - return data.type === "linear"; -} -class TextDimensionCalculatorWithFont { - constructor(parentGroup) { - this.parentGroup = parentGroup; - } - getMaxDimension(texts, fontSize) { - if (!this.parentGroup) { - return { - width: texts.reduce((acc, cur) => Math.max(cur.length, acc), 0) * fontSize, - height: fontSize - }; - } - const dimension = { - width: 0, - height: 0 - }; - const elem = this.parentGroup.append("g").attr("visibility", "hidden").attr("font-size", fontSize); - for (const t of texts) { - const bbox = (0,_createText_ca0c5216_js__WEBPACK_IMPORTED_MODULE_4__.c)(elem, 1, t); - const width = bbox ? bbox.width : t.length * fontSize; - const height = bbox ? bbox.height : fontSize; - dimension.width = Math.max(dimension.width, width); - dimension.height = Math.max(dimension.height, height); - } - elem.remove(); - return dimension; - } -} -const BAR_WIDTH_TO_TICK_WIDTH_RATIO = 0.7; -const MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL = 0.2; -class BaseAxis { - constructor(axisConfig, title, textDimensionCalculator, axisThemeConfig) { - this.axisConfig = axisConfig; - this.title = title; - this.textDimensionCalculator = textDimensionCalculator; - this.axisThemeConfig = axisThemeConfig; - this.boundingRect = { x: 0, y: 0, width: 0, height: 0 }; - this.axisPosition = "left"; - this.showTitle = false; - this.showLabel = false; - this.showTick = false; - this.showAxisLine = false; - this.outerPadding = 0; - this.titleTextHeight = 0; - this.labelTextHeight = 0; - this.range = [0, 10]; - this.boundingRect = { x: 0, y: 0, width: 0, height: 0 }; - this.axisPosition = "left"; - } - setRange(range) { - this.range = range; - if (this.axisPosition === "left" || this.axisPosition === "right") { - this.boundingRect.height = range[1] - range[0]; - } else { - this.boundingRect.width = range[1] - range[0]; - } - this.recalculateScale(); - } - getRange() { - return [this.range[0] + this.outerPadding, this.range[1] - this.outerPadding]; - } - setAxisPosition(axisPosition) { - this.axisPosition = axisPosition; - this.setRange(this.range); - } - getTickDistance() { - const range = this.getRange(); - return Math.abs(range[0] - range[1]) / this.getTickValues().length; - } - getAxisOuterPadding() { - return this.outerPadding; - } - getLabelDimension() { - return this.textDimensionCalculator.getMaxDimension( - this.getTickValues().map((tick) => tick.toString()), - this.axisConfig.labelFontSize - ); - } - recalculateOuterPaddingToDrawBar() { - if (BAR_WIDTH_TO_TICK_WIDTH_RATIO * this.getTickDistance() > this.outerPadding * 2) { - this.outerPadding = Math.floor(BAR_WIDTH_TO_TICK_WIDTH_RATIO * this.getTickDistance() / 2); - } - this.recalculateScale(); - } - calculateSpaceIfDrawnHorizontally(availableSpace) { - let availableHeight = availableSpace.height; - if (this.axisConfig.showAxisLine && availableHeight > this.axisConfig.axisLineWidth) { - availableHeight -= this.axisConfig.axisLineWidth; - this.showAxisLine = true; - } - if (this.axisConfig.showLabel) { - const spaceRequired = this.getLabelDimension(); - const maxPadding = MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL * availableSpace.width; - this.outerPadding = Math.min(spaceRequired.width / 2, maxPadding); - const heightRequired = spaceRequired.height + this.axisConfig.labelPadding * 2; - this.labelTextHeight = spaceRequired.height; - if (heightRequired <= availableHeight) { - availableHeight -= heightRequired; - this.showLabel = true; - } - } - if (this.axisConfig.showTick && availableHeight >= this.axisConfig.tickLength) { - this.showTick = true; - availableHeight -= this.axisConfig.tickLength; - } - if (this.axisConfig.showTitle && this.title) { - const spaceRequired = this.textDimensionCalculator.getMaxDimension( - [this.title], - this.axisConfig.titleFontSize - ); - const heightRequired = spaceRequired.height + this.axisConfig.titlePadding * 2; - this.titleTextHeight = spaceRequired.height; - if (heightRequired <= availableHeight) { - availableHeight -= heightRequired; - this.showTitle = true; - } - } - this.boundingRect.width = availableSpace.width; - this.boundingRect.height = availableSpace.height - availableHeight; - } - calculateSpaceIfDrawnVertical(availableSpace) { - let availableWidth = availableSpace.width; - if (this.axisConfig.showAxisLine && availableWidth > this.axisConfig.axisLineWidth) { - availableWidth -= this.axisConfig.axisLineWidth; - this.showAxisLine = true; - } - if (this.axisConfig.showLabel) { - const spaceRequired = this.getLabelDimension(); - const maxPadding = MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL * availableSpace.height; - this.outerPadding = Math.min(spaceRequired.height / 2, maxPadding); - const widthRequired = spaceRequired.width + this.axisConfig.labelPadding * 2; - if (widthRequired <= availableWidth) { - availableWidth -= widthRequired; - this.showLabel = true; - } - } - if (this.axisConfig.showTick && availableWidth >= this.axisConfig.tickLength) { - this.showTick = true; - availableWidth -= this.axisConfig.tickLength; - } - if (this.axisConfig.showTitle && this.title) { - const spaceRequired = this.textDimensionCalculator.getMaxDimension( - [this.title], - this.axisConfig.titleFontSize - ); - const widthRequired = spaceRequired.height + this.axisConfig.titlePadding * 2; - this.titleTextHeight = spaceRequired.height; - if (widthRequired <= availableWidth) { - availableWidth -= widthRequired; - this.showTitle = true; - } - } - this.boundingRect.width = availableSpace.width - availableWidth; - this.boundingRect.height = availableSpace.height; - } - calculateSpace(availableSpace) { - if (this.axisPosition === "left" || this.axisPosition === "right") { - this.calculateSpaceIfDrawnVertical(availableSpace); - } else { - this.calculateSpaceIfDrawnHorizontally(availableSpace); - } - this.recalculateScale(); - return { - width: this.boundingRect.width, - height: this.boundingRect.height - }; - } - setBoundingBoxXY(point) { - this.boundingRect.x = point.x; - this.boundingRect.y = point.y; - } - getDrawableElementsForLeftAxis() { - const drawableElement = []; - if (this.showAxisLine) { - const x = this.boundingRect.x + this.boundingRect.width - this.axisConfig.axisLineWidth / 2; - drawableElement.push({ - type: "path", - groupTexts: ["left-axis", "axisl-line"], - data: [ - { - path: `M ${x},${this.boundingRect.y} L ${x},${this.boundingRect.y + this.boundingRect.height} `, - strokeFill: this.axisThemeConfig.axisLineColor, - strokeWidth: this.axisConfig.axisLineWidth - } - ] - }); - } - if (this.showLabel) { - drawableElement.push({ - type: "text", - groupTexts: ["left-axis", "label"], - data: this.getTickValues().map((tick) => ({ - text: tick.toString(), - x: this.boundingRect.x + this.boundingRect.width - (this.showLabel ? this.axisConfig.labelPadding : 0) - (this.showTick ? this.axisConfig.tickLength : 0) - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0), - y: this.getScaleValue(tick), - fill: this.axisThemeConfig.labelColor, - fontSize: this.axisConfig.labelFontSize, - rotation: 0, - verticalPos: "middle", - horizontalPos: "right" - })) - }); - } - if (this.showTick) { - const x = this.boundingRect.x + this.boundingRect.width - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0); - drawableElement.push({ - type: "path", - groupTexts: ["left-axis", "ticks"], - data: this.getTickValues().map((tick) => ({ - path: `M ${x},${this.getScaleValue(tick)} L ${x - this.axisConfig.tickLength},${this.getScaleValue(tick)}`, - strokeFill: this.axisThemeConfig.tickColor, - strokeWidth: this.axisConfig.tickWidth - })) - }); - } - if (this.showTitle) { - drawableElement.push({ - type: "text", - groupTexts: ["left-axis", "title"], - data: [ - { - text: this.title, - x: this.boundingRect.x + this.axisConfig.titlePadding, - y: this.boundingRect.y + this.boundingRect.height / 2, - fill: this.axisThemeConfig.titleColor, - fontSize: this.axisConfig.titleFontSize, - rotation: 270, - verticalPos: "top", - horizontalPos: "center" - } - ] - }); - } - return drawableElement; - } - getDrawableElementsForBottomAxis() { - const drawableElement = []; - if (this.showAxisLine) { - const y = this.boundingRect.y + this.axisConfig.axisLineWidth / 2; - drawableElement.push({ - type: "path", - groupTexts: ["bottom-axis", "axis-line"], - data: [ - { - path: `M ${this.boundingRect.x},${y} L ${this.boundingRect.x + this.boundingRect.width},${y}`, - strokeFill: this.axisThemeConfig.axisLineColor, - strokeWidth: this.axisConfig.axisLineWidth - } - ] - }); - } - if (this.showLabel) { - drawableElement.push({ - type: "text", - groupTexts: ["bottom-axis", "label"], - data: this.getTickValues().map((tick) => ({ - text: tick.toString(), - x: this.getScaleValue(tick), - y: this.boundingRect.y + this.axisConfig.labelPadding + (this.showTick ? this.axisConfig.tickLength : 0) + (this.showAxisLine ? this.axisConfig.axisLineWidth : 0), - fill: this.axisThemeConfig.labelColor, - fontSize: this.axisConfig.labelFontSize, - rotation: 0, - verticalPos: "top", - horizontalPos: "center" - })) - }); - } - if (this.showTick) { - const y = this.boundingRect.y + (this.showAxisLine ? this.axisConfig.axisLineWidth : 0); - drawableElement.push({ - type: "path", - groupTexts: ["bottom-axis", "ticks"], - data: this.getTickValues().map((tick) => ({ - path: `M ${this.getScaleValue(tick)},${y} L ${this.getScaleValue(tick)},${y + this.axisConfig.tickLength}`, - strokeFill: this.axisThemeConfig.tickColor, - strokeWidth: this.axisConfig.tickWidth - })) - }); - } - if (this.showTitle) { - drawableElement.push({ - type: "text", - groupTexts: ["bottom-axis", "title"], - data: [ - { - text: this.title, - x: this.range[0] + (this.range[1] - this.range[0]) / 2, - y: this.boundingRect.y + this.boundingRect.height - this.axisConfig.titlePadding - this.titleTextHeight, - fill: this.axisThemeConfig.titleColor, - fontSize: this.axisConfig.titleFontSize, - rotation: 0, - verticalPos: "top", - horizontalPos: "center" - } - ] - }); - } - return drawableElement; - } - getDrawableElementsForTopAxis() { - const drawableElement = []; - if (this.showAxisLine) { - const y = this.boundingRect.y + this.boundingRect.height - this.axisConfig.axisLineWidth / 2; - drawableElement.push({ - type: "path", - groupTexts: ["top-axis", "axis-line"], - data: [ - { - path: `M ${this.boundingRect.x},${y} L ${this.boundingRect.x + this.boundingRect.width},${y}`, - strokeFill: this.axisThemeConfig.axisLineColor, - strokeWidth: this.axisConfig.axisLineWidth - } - ] - }); - } - if (this.showLabel) { - drawableElement.push({ - type: "text", - groupTexts: ["top-axis", "label"], - data: this.getTickValues().map((tick) => ({ - text: tick.toString(), - x: this.getScaleValue(tick), - y: this.boundingRect.y + (this.showTitle ? this.titleTextHeight + this.axisConfig.titlePadding * 2 : 0) + this.axisConfig.labelPadding, - fill: this.axisThemeConfig.labelColor, - fontSize: this.axisConfig.labelFontSize, - rotation: 0, - verticalPos: "top", - horizontalPos: "center" - })) - }); - } - if (this.showTick) { - const y = this.boundingRect.y; - drawableElement.push({ - type: "path", - groupTexts: ["top-axis", "ticks"], - data: this.getTickValues().map((tick) => ({ - path: `M ${this.getScaleValue(tick)},${y + this.boundingRect.height - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)} L ${this.getScaleValue(tick)},${y + this.boundingRect.height - this.axisConfig.tickLength - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)}`, - strokeFill: this.axisThemeConfig.tickColor, - strokeWidth: this.axisConfig.tickWidth - })) - }); - } - if (this.showTitle) { - drawableElement.push({ - type: "text", - groupTexts: ["top-axis", "title"], - data: [ - { - text: this.title, - x: this.boundingRect.x + this.boundingRect.width / 2, - y: this.boundingRect.y + this.axisConfig.titlePadding, - fill: this.axisThemeConfig.titleColor, - fontSize: this.axisConfig.titleFontSize, - rotation: 0, - verticalPos: "top", - horizontalPos: "center" - } - ] - }); - } - return drawableElement; - } - getDrawableElements() { - if (this.axisPosition === "left") { - return this.getDrawableElementsForLeftAxis(); - } - if (this.axisPosition === "right") { - throw Error("Drawing of right axis is not implemented"); - } - if (this.axisPosition === "bottom") { - return this.getDrawableElementsForBottomAxis(); - } - if (this.axisPosition === "top") { - return this.getDrawableElementsForTopAxis(); - } - return []; - } -} -class BandAxis extends BaseAxis { - constructor(axisConfig, axisThemeConfig, categories, title, textDimensionCalculator) { - super(axisConfig, title, textDimensionCalculator, axisThemeConfig); - this.categories = categories; - this.scale = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleBand */ .WH)().domain(this.categories).range(this.getRange()); - } - setRange(range) { - super.setRange(range); - } - recalculateScale() { - this.scale = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleBand */ .WH)().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(0.5); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.trace("BandAxis axis final categories, range: ", this.categories, this.getRange()); - } - getTickValues() { - return this.categories; - } - getScaleValue(value) { - return this.scale(value) || this.getRange()[0]; - } -} -class LinearAxis extends BaseAxis { - constructor(axisConfig, axisThemeConfig, domain, title, textDimensionCalculator) { - super(axisConfig, title, textDimensionCalculator, axisThemeConfig); - this.domain = domain; - this.scale = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .m4Y)().domain(this.domain).range(this.getRange()); - } - getTickValues() { - return this.scale.ticks(); - } - recalculateScale() { - const domain = [...this.domain]; - if (this.axisPosition === "left") { - domain.reverse(); - } - this.scale = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .m4Y)().domain(domain).range(this.getRange()); - } - getScaleValue(value) { - return this.scale(value); - } -} -function getAxis(data, axisConfig, axisThemeConfig, tmpSVGGroup2) { - const textDimensionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup2); - if (isBandAxisData(data)) { - return new BandAxis( - axisConfig, - axisThemeConfig, - data.categories, - data.title, - textDimensionCalculator - ); - } - return new LinearAxis( - axisConfig, - axisThemeConfig, - [data.min, data.max], - data.title, - textDimensionCalculator - ); -} -class ChartTitle { - constructor(textDimensionCalculator, chartConfig, chartData, chartThemeConfig) { - this.textDimensionCalculator = textDimensionCalculator; - this.chartConfig = chartConfig; - this.chartData = chartData; - this.chartThemeConfig = chartThemeConfig; - this.boundingRect = { - x: 0, - y: 0, - width: 0, - height: 0 - }; - this.showChartTitle = false; - } - setBoundingBoxXY(point) { - this.boundingRect.x = point.x; - this.boundingRect.y = point.y; - } - calculateSpace(availableSpace) { - const titleDimension = this.textDimensionCalculator.getMaxDimension( - [this.chartData.title], - this.chartConfig.titleFontSize - ); - const widthRequired = Math.max(titleDimension.width, availableSpace.width); - const heightRequired = titleDimension.height + 2 * this.chartConfig.titlePadding; - if (titleDimension.width <= widthRequired && titleDimension.height <= heightRequired && this.chartConfig.showTitle && this.chartData.title) { - this.boundingRect.width = widthRequired; - this.boundingRect.height = heightRequired; - this.showChartTitle = true; - } - return { - width: this.boundingRect.width, - height: this.boundingRect.height - }; - } - getDrawableElements() { - const drawableElem = []; - if (this.showChartTitle) { - drawableElem.push({ - groupTexts: ["chart-title"], - type: "text", - data: [ - { - fontSize: this.chartConfig.titleFontSize, - text: this.chartData.title, - verticalPos: "middle", - horizontalPos: "center", - x: this.boundingRect.x + this.boundingRect.width / 2, - y: this.boundingRect.y + this.boundingRect.height / 2, - fill: this.chartThemeConfig.titleColor, - rotation: 0 - } - ] - }); - } - return drawableElem; - } -} -function getChartTitleComponent(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2) { - const textDimensionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup2); - return new ChartTitle(textDimensionCalculator, chartConfig, chartData, chartThemeConfig); -} -class LinePlot { - constructor(plotData, xAxis, yAxis, orientation, plotIndex2) { - this.plotData = plotData; - this.xAxis = xAxis; - this.yAxis = yAxis; - this.orientation = orientation; - this.plotIndex = plotIndex2; - } - getDrawableElement() { - const finalData = this.plotData.data.map((d) => [ - this.xAxis.getScaleValue(d[0]), - this.yAxis.getScaleValue(d[1]) - ]); - let path; - if (this.orientation === "horizontal") { - path = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().y((d) => d[0]).x((d) => d[1])(finalData); - } else { - path = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .n8j)().x((d) => d[0]).y((d) => d[1])(finalData); - } - if (!path) { - return []; - } - return [ - { - groupTexts: ["plot", `line-plot-${this.plotIndex}`], - type: "path", - data: [ - { - path, - strokeFill: this.plotData.strokeFill, - strokeWidth: this.plotData.strokeWidth - } - ] - } - ]; - } -} -class BarPlot { - constructor(barData, boundingRect, xAxis, yAxis, orientation, plotIndex2) { - this.barData = barData; - this.boundingRect = boundingRect; - this.xAxis = xAxis; - this.yAxis = yAxis; - this.orientation = orientation; - this.plotIndex = plotIndex2; - } - getDrawableElement() { - const finalData = this.barData.data.map((d) => [ - this.xAxis.getScaleValue(d[0]), - this.yAxis.getScaleValue(d[1]) - ]); - const barPaddingPercent = 0.05; - const barWidth = Math.min(this.xAxis.getAxisOuterPadding() * 2, this.xAxis.getTickDistance()) * (1 - barPaddingPercent); - const barWidthHalf = barWidth / 2; - if (this.orientation === "horizontal") { - return [ - { - groupTexts: ["plot", `bar-plot-${this.plotIndex}`], - type: "rect", - data: finalData.map((data) => ({ - x: this.boundingRect.x, - y: data[0] - barWidthHalf, - height: barWidth, - width: data[1] - this.boundingRect.x, - fill: this.barData.fill, - strokeWidth: 0, - strokeFill: this.barData.fill - })) - } - ]; - } - return [ - { - groupTexts: ["plot", `bar-plot-${this.plotIndex}`], - type: "rect", - data: finalData.map((data) => ({ - x: data[0] - barWidthHalf, - y: data[1], - width: barWidth, - height: this.boundingRect.y + this.boundingRect.height - data[1], - fill: this.barData.fill, - strokeWidth: 0, - strokeFill: this.barData.fill - })) - } - ]; - } -} -class BasePlot { - constructor(chartConfig, chartData, chartThemeConfig) { - this.chartConfig = chartConfig; - this.chartData = chartData; - this.chartThemeConfig = chartThemeConfig; - this.boundingRect = { - x: 0, - y: 0, - width: 0, - height: 0 - }; - } - setAxes(xAxis, yAxis) { - this.xAxis = xAxis; - this.yAxis = yAxis; - } - setBoundingBoxXY(point) { - this.boundingRect.x = point.x; - this.boundingRect.y = point.y; - } - calculateSpace(availableSpace) { - this.boundingRect.width = availableSpace.width; - this.boundingRect.height = availableSpace.height; - return { - width: this.boundingRect.width, - height: this.boundingRect.height - }; - } - getDrawableElements() { - if (!(this.xAxis && this.yAxis)) { - throw Error("Axes must be passed to render Plots"); - } - const drawableElem = []; - for (const [i, plot] of this.chartData.plots.entries()) { - switch (plot.type) { - case "line": - { - const linePlot = new LinePlot( - plot, - this.xAxis, - this.yAxis, - this.chartConfig.chartOrientation, - i - ); - drawableElem.push(...linePlot.getDrawableElement()); - } - break; - case "bar": - { - const barPlot = new BarPlot( - plot, - this.boundingRect, - this.xAxis, - this.yAxis, - this.chartConfig.chartOrientation, - i - ); - drawableElem.push(...barPlot.getDrawableElement()); - } - break; - } - } - return drawableElem; - } -} -function getPlotComponent(chartConfig, chartData, chartThemeConfig) { - return new BasePlot(chartConfig, chartData, chartThemeConfig); -} -class Orchestrator { - constructor(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2) { - this.chartConfig = chartConfig; - this.chartData = chartData; - this.componentStore = { - title: getChartTitleComponent(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2), - plot: getPlotComponent(chartConfig, chartData, chartThemeConfig), - xAxis: getAxis( - chartData.xAxis, - chartConfig.xAxis, - { - titleColor: chartThemeConfig.xAxisTitleColor, - labelColor: chartThemeConfig.xAxisLabelColor, - tickColor: chartThemeConfig.xAxisTickColor, - axisLineColor: chartThemeConfig.xAxisLineColor - }, - tmpSVGGroup2 - ), - yAxis: getAxis( - chartData.yAxis, - chartConfig.yAxis, - { - titleColor: chartThemeConfig.yAxisTitleColor, - labelColor: chartThemeConfig.yAxisLabelColor, - tickColor: chartThemeConfig.yAxisTickColor, - axisLineColor: chartThemeConfig.yAxisLineColor - }, - tmpSVGGroup2 - ) - }; - } - calculateVerticalSpace() { - let availableWidth = this.chartConfig.width; - let availableHeight = this.chartConfig.height; - let plotX = 0; - let plotY = 0; - let chartWidth = Math.floor(availableWidth * this.chartConfig.plotReservedSpacePercent / 100); - let chartHeight = Math.floor( - availableHeight * this.chartConfig.plotReservedSpacePercent / 100 - ); - let spaceUsed = this.componentStore.plot.calculateSpace({ - width: chartWidth, - height: chartHeight - }); - availableWidth -= spaceUsed.width; - availableHeight -= spaceUsed.height; - spaceUsed = this.componentStore.title.calculateSpace({ - width: this.chartConfig.width, - height: availableHeight - }); - plotY = spaceUsed.height; - availableHeight -= spaceUsed.height; - this.componentStore.xAxis.setAxisPosition("bottom"); - spaceUsed = this.componentStore.xAxis.calculateSpace({ - width: availableWidth, - height: availableHeight - }); - availableHeight -= spaceUsed.height; - this.componentStore.yAxis.setAxisPosition("left"); - spaceUsed = this.componentStore.yAxis.calculateSpace({ - width: availableWidth, - height: availableHeight - }); - plotX = spaceUsed.width; - availableWidth -= spaceUsed.width; - if (availableWidth > 0) { - chartWidth += availableWidth; - availableWidth = 0; - } - if (availableHeight > 0) { - chartHeight += availableHeight; - availableHeight = 0; - } - this.componentStore.plot.calculateSpace({ - width: chartWidth, - height: chartHeight - }); - this.componentStore.plot.setBoundingBoxXY({ x: plotX, y: plotY }); - this.componentStore.xAxis.setRange([plotX, plotX + chartWidth]); - this.componentStore.xAxis.setBoundingBoxXY({ x: plotX, y: plotY + chartHeight }); - this.componentStore.yAxis.setRange([plotY, plotY + chartHeight]); - this.componentStore.yAxis.setBoundingBoxXY({ x: 0, y: plotY }); - if (this.chartData.plots.some((p) => isBarPlot(p))) { - this.componentStore.xAxis.recalculateOuterPaddingToDrawBar(); - } - } - calculateHorizontalSpace() { - let availableWidth = this.chartConfig.width; - let availableHeight = this.chartConfig.height; - let titleYEnd = 0; - let plotX = 0; - let plotY = 0; - let chartWidth = Math.floor(availableWidth * this.chartConfig.plotReservedSpacePercent / 100); - let chartHeight = Math.floor( - availableHeight * this.chartConfig.plotReservedSpacePercent / 100 - ); - let spaceUsed = this.componentStore.plot.calculateSpace({ - width: chartWidth, - height: chartHeight - }); - availableWidth -= spaceUsed.width; - availableHeight -= spaceUsed.height; - spaceUsed = this.componentStore.title.calculateSpace({ - width: this.chartConfig.width, - height: availableHeight - }); - titleYEnd = spaceUsed.height; - availableHeight -= spaceUsed.height; - this.componentStore.xAxis.setAxisPosition("left"); - spaceUsed = this.componentStore.xAxis.calculateSpace({ - width: availableWidth, - height: availableHeight - }); - availableWidth -= spaceUsed.width; - plotX = spaceUsed.width; - this.componentStore.yAxis.setAxisPosition("top"); - spaceUsed = this.componentStore.yAxis.calculateSpace({ - width: availableWidth, - height: availableHeight - }); - availableHeight -= spaceUsed.height; - plotY = titleYEnd + spaceUsed.height; - if (availableWidth > 0) { - chartWidth += availableWidth; - availableWidth = 0; - } - if (availableHeight > 0) { - chartHeight += availableHeight; - availableHeight = 0; - } - this.componentStore.plot.calculateSpace({ - width: chartWidth, - height: chartHeight - }); - this.componentStore.plot.setBoundingBoxXY({ x: plotX, y: plotY }); - this.componentStore.yAxis.setRange([plotX, plotX + chartWidth]); - this.componentStore.yAxis.setBoundingBoxXY({ x: plotX, y: titleYEnd }); - this.componentStore.xAxis.setRange([plotY, plotY + chartHeight]); - this.componentStore.xAxis.setBoundingBoxXY({ x: 0, y: plotY }); - if (this.chartData.plots.some((p) => isBarPlot(p))) { - this.componentStore.xAxis.recalculateOuterPaddingToDrawBar(); - } - } - calculateSpace() { - if (this.chartConfig.chartOrientation === "horizontal") { - this.calculateHorizontalSpace(); - } else { - this.calculateVerticalSpace(); - } - } - getDrawableElement() { - this.calculateSpace(); - const drawableElem = []; - this.componentStore.plot.setAxes(this.componentStore.xAxis, this.componentStore.yAxis); - for (const component of Object.values(this.componentStore)) { - drawableElem.push(...component.getDrawableElements()); - } - return drawableElem; - } -} -class XYChartBuilder { - static build(config, chartData, chartThemeConfig, tmpSVGGroup2) { - const orchestrator = new Orchestrator(config, chartData, chartThemeConfig, tmpSVGGroup2); - return orchestrator.getDrawableElement(); - } -} -let plotIndex = 0; -let tmpSVGGroup; -let xyChartConfig = getChartDefaultConfig(); -let xyChartThemeConfig = getChartDefaultThemeConfig(); -let xyChartData = getChartDefaultData(); -let plotColorPalette = xyChartThemeConfig.plotColorPalette.split(",").map((color) => color.trim()); -let hasSetXAxis = false; -let hasSetYAxis = false; -function getChartDefaultThemeConfig() { - const defaultThemeVariables = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.E)(); - const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)(); - return (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.C)(defaultThemeVariables.xyChart, config.themeVariables.xyChart); -} -function getChartDefaultConfig() { - const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)(); - return (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.C)( - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.B.xyChart, - config.xyChart - ); -} -function getChartDefaultData() { - return { - yAxis: { - type: "linear", - title: "", - min: Infinity, - max: -Infinity - }, - xAxis: { - type: "band", - title: "", - categories: [] - }, - title: "", - plots: [] - }; -} -function textSanitizer(text) { - const config = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.F)(); - return (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.d)(text.trim(), config); -} -function setTmpSVGG(SVGG) { - tmpSVGGroup = SVGG; -} -function setOrientation(orientation) { - if (orientation === "horizontal") { - xyChartConfig.chartOrientation = "horizontal"; - } else { - xyChartConfig.chartOrientation = "vertical"; - } -} -function setXAxisTitle(title) { - xyChartData.xAxis.title = textSanitizer(title.text); -} -function setXAxisRangeData(min, max) { - xyChartData.xAxis = { type: "linear", title: xyChartData.xAxis.title, min, max }; - hasSetXAxis = true; -} -function setXAxisBand(categories) { - xyChartData.xAxis = { - type: "band", - title: xyChartData.xAxis.title, - categories: categories.map((c) => textSanitizer(c.text)) - }; - hasSetXAxis = true; -} -function setYAxisTitle(title) { - xyChartData.yAxis.title = textSanitizer(title.text); -} -function setYAxisRangeData(min, max) { - xyChartData.yAxis = { type: "linear", title: xyChartData.yAxis.title, min, max }; - hasSetYAxis = true; -} -function setYAxisRangeFromPlotData(data) { - const minValue = Math.min(...data); - const maxValue = Math.max(...data); - const prevMinValue = isLinearAxisData(xyChartData.yAxis) ? xyChartData.yAxis.min : Infinity; - const prevMaxValue = isLinearAxisData(xyChartData.yAxis) ? xyChartData.yAxis.max : -Infinity; - xyChartData.yAxis = { - type: "linear", - title: xyChartData.yAxis.title, - min: Math.min(prevMinValue, minValue), - max: Math.max(prevMaxValue, maxValue) - }; -} -function transformDataWithoutCategory(data) { - let retData = []; - if (data.length === 0) { - return retData; - } - if (!hasSetXAxis) { - const prevMinValue = isLinearAxisData(xyChartData.xAxis) ? xyChartData.xAxis.min : Infinity; - const prevMaxValue = isLinearAxisData(xyChartData.xAxis) ? xyChartData.xAxis.max : -Infinity; - setXAxisRangeData(Math.min(prevMinValue, 1), Math.max(prevMaxValue, data.length)); - } - if (!hasSetYAxis) { - setYAxisRangeFromPlotData(data); - } - if (isBandAxisData(xyChartData.xAxis)) { - retData = xyChartData.xAxis.categories.map((c, i) => [c, data[i]]); - } - if (isLinearAxisData(xyChartData.xAxis)) { - const min = xyChartData.xAxis.min; - const max = xyChartData.xAxis.max; - const step = (max - min + 1) / data.length; - const categories = []; - for (let i = min; i <= max; i += step) { - categories.push(`${i}`); - } - retData = categories.map((c, i) => [c, data[i]]); - } - return retData; -} -function getPlotColorFromPalette(plotIndex2) { - return plotColorPalette[plotIndex2 === 0 ? 0 : plotIndex2 % plotColorPalette.length]; -} -function setLineData(title, data) { - const plotData = transformDataWithoutCategory(data); - xyChartData.plots.push({ - type: "line", - strokeFill: getPlotColorFromPalette(plotIndex), - strokeWidth: 2, - data: plotData - }); - plotIndex++; -} -function setBarData(title, data) { - const plotData = transformDataWithoutCategory(data); - xyChartData.plots.push({ - type: "bar", - fill: getPlotColorFromPalette(plotIndex), - data: plotData - }); - plotIndex++; -} -function getDrawableElem() { - if (xyChartData.plots.length === 0) { - throw Error("No Plot to render, please provide a plot with some data"); - } - xyChartData.title = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.t)(); - return XYChartBuilder.build(xyChartConfig, xyChartData, xyChartThemeConfig, tmpSVGGroup); -} -function getChartThemeConfig() { - return xyChartThemeConfig; -} -function getChartConfig() { - return xyChartConfig; -} -const clear = function() { - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.v)(); - plotIndex = 0; - xyChartConfig = getChartDefaultConfig(); - xyChartData = getChartDefaultData(); - xyChartThemeConfig = getChartDefaultThemeConfig(); - plotColorPalette = xyChartThemeConfig.plotColorPalette.split(",").map((color) => color.trim()); - hasSetXAxis = false; - hasSetYAxis = false; -}; -const db = { - getDrawableElem, - clear, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.g, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.t, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.a, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.b, - setOrientation, - setXAxisTitle, - setXAxisRangeData, - setXAxisBand, - setYAxisTitle, - setYAxisRangeData, - setLineData, - setBarData, - setTmpSVGG, - getChartThemeConfig, - getChartConfig -}; -const draw = (txt, id, _version, diagObj) => { - const db2 = diagObj.db; - const themeConfig = db2.getChartThemeConfig(); - const chartConfig = db2.getChartConfig(); - function getDominantBaseLine(horizontalPos) { - return horizontalPos === "top" ? "text-before-edge" : "middle"; - } - function getTextAnchor(verticalPos) { - return verticalPos === "left" ? "start" : verticalPos === "right" ? "end" : "middle"; - } - function getTextTransformation(data) { - return `translate(${data.x}, ${data.y}) rotate(${data.rotation || 0})`; - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Rendering xychart chart\n" + txt); - const svg = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.A)(id); - const group = svg.append("g").attr("class", "main"); - const background = group.append("rect").attr("width", chartConfig.width).attr("height", chartConfig.height).attr("class", "background"); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_5__.i)(svg, chartConfig.height, chartConfig.width, true); - svg.attr("viewBox", `0 0 ${chartConfig.width} ${chartConfig.height}`); - background.attr("fill", themeConfig.backgroundColor); - db2.setTmpSVGG(svg.append("g").attr("class", "mermaid-tmp-group")); - const shapes = db2.getDrawableElem(); - const groups = {}; - function getGroup(gList) { - let elem = group; - let prefix = ""; - for (const [i] of gList.entries()) { - let parent = group; - if (i > 0 && groups[prefix]) { - parent = groups[prefix]; - } - prefix += gList[i]; - elem = groups[prefix]; - if (!elem) { - elem = groups[prefix] = parent.append("g").attr("class", gList[i]); - } - } - return elem; - } - for (const shape of shapes) { - if (shape.data.length === 0) { - continue; - } - const shapeGroup = getGroup(shape.groupTexts); - switch (shape.type) { - case "rect": - shapeGroup.selectAll("rect").data(shape.data).enter().append("rect").attr("x", (data) => data.x).attr("y", (data) => data.y).attr("width", (data) => data.width).attr("height", (data) => data.height).attr("fill", (data) => data.fill).attr("stroke", (data) => data.strokeFill).attr("stroke-width", (data) => data.strokeWidth); - break; - case "text": - shapeGroup.selectAll("text").data(shape.data).enter().append("text").attr("x", 0).attr("y", 0).attr("fill", (data) => data.fill).attr("font-size", (data) => data.fontSize).attr("dominant-baseline", (data) => getDominantBaseLine(data.verticalPos)).attr("text-anchor", (data) => getTextAnchor(data.horizontalPos)).attr("transform", (data) => getTextTransformation(data)).text((data) => data.text); - break; - case "path": - shapeGroup.selectAll("path").data(shape.data).enter().append("path").attr("d", (data) => data.path).attr("fill", (data) => data.fill ? data.fill : "none").attr("stroke", (data) => data.strokeFill).attr("stroke-width", (data) => data.strokeWidth); - break; - } - } -}; -const renderer = { - draw -}; -const diagram = { - parser: parser$1, - db, - renderer -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9278.bc46237a.js b/pr-preview/pr-1594/assets/js/9278.bc46237a.js deleted file mode 100644 index ad9e18abae..0000000000 --- a/pr-preview/pr-1594/assets/js/9278.bc46237a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9278],{89278:(e,s,k)=>{k.r(s)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9309.04c2ac1e.js b/pr-preview/pr-1594/assets/js/9309.04c2ac1e.js deleted file mode 100644 index cd63dd4e9f..0000000000 --- a/pr-preview/pr-1594/assets/js/9309.04c2ac1e.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 9309.04c2ac1e.js.LICENSE.txt */ -(self.webpackChunksite=self.webpackChunksite||[]).push([[9309],{87799:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(t,n){t.exports=e},function(e,t,n){"use strict";var r=n(0).FDLayoutConstants;function i(){}for(var a in r)i[a]=r[a];i.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,i.DEFAULT_RADIAL_SEPARATION=r.DEFAULT_EDGE_LENGTH,i.DEFAULT_COMPONENT_SEPERATION=60,i.TILE=!0,i.TILING_PADDING_VERTICAL=10,i.TILING_PADDING_HORIZONTAL=10,i.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=i},function(e,t,n){"use strict";var r=n(0).FDLayoutEdge;function i(e,t,n){r.call(this,e,t,n)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).LGraph;function i(e,t,n){r.call(this,e,t,n)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).LGraphManager;function i(e){r.call(this,e)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).FDLayoutNode,i=n(0).IMath;function a(e,t,n,i){r.call(this,e,t,n,i)}for(var o in a.prototype=Object.create(r.prototype),r)a[o]=r[o];a.prototype.move=function(){var e=this.graphManager.getLayout();this.displacementX=e.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=e.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementX=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementX)),Math.abs(this.displacementY)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementY=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementY)),null==this.child||0==this.child.getNodes().length?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),e.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},a.prototype.propogateDisplacementToChildren=function(e,t){for(var n,r=this.getChild().getNodes(),i=0;i<r.length;i++)null==(n=r[i]).getChild()?(n.moveBy(e,t),n.displacementX+=e,n.displacementY+=t):n.propogateDisplacementToChildren(e,t)},a.prototype.setPred1=function(e){this.pred1=e},a.prototype.getPred1=function(){return pred1},a.prototype.getPred2=function(){return pred2},a.prototype.setNext=function(e){this.next=e},a.prototype.getNext=function(){return next},a.prototype.setProcessed=function(e){this.processed=e},a.prototype.isProcessed=function(){return processed},e.exports=a},function(e,t,n){"use strict";var r=n(0).FDLayout,i=n(4),a=n(3),o=n(5),s=n(2),l=n(1),u=n(0).FDLayoutConstants,c=n(0).LayoutConstants,h=n(0).Point,d=n(0).PointD,p=n(0).Layout,g=n(0).Integer,f=n(0).IGeometry,v=n(0).LGraph,y=n(0).Transform;function m(){r.call(this),this.toBeTiled={}}for(var b in m.prototype=Object.create(r.prototype),r)m[b]=r[b];m.prototype.newGraphManager=function(){var e=new i(this);return this.graphManager=e,e},m.prototype.newGraph=function(e){return new a(null,this.graphManager,e)},m.prototype.newNode=function(e){return new o(this.graphManager,e)},m.prototype.newEdge=function(e){return new s(null,null,e)},m.prototype.initParameters=function(){r.prototype.initParameters.call(this,arguments),this.isSubLayout||(l.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=l.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=l.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=u.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=u.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=u.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=u.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=u.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=u.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/u.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=u.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},m.prototype.layout=function(){return c.DEFAULT_CREATE_BENDS_AS_NEEDED&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},m.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental)l.TREE_REDUCTION_ON_INCREMENTAL&&(this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation(),t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)})),this.graphManager.setAllNodesToApplyGravitation(n));else{var e=this.getFlatForest();if(e.length>0)this.positionNodesRadially(e);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)}));this.graphManager.setAllNodesToApplyGravitation(n),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},m.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}if(this.totalIterations%u.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged()){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}this.coolingCycle++,0==this.layoutQuality?this.coolingAdjuster=this.coolingCycle:1==this.layoutQuality&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var e=new Set(this.getAllNodes()),t=this.nodesWithGravity.filter((function(t){return e.has(t)}));this.graphManager.setAllNodesToApplyGravitation(t),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=u.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=u.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var n=!this.isTreeGrowing&&!this.isGrowthFinished,r=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(n,r),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},m.prototype.getPositionsData=function(){for(var e=this.graphManager.getAllNodes(),t={},n=0;n<e.length;n++){var r=e[n].rect,i=e[n].id;t[i]={id:i,x:r.getCenterX(),y:r.getCenterY(),w:r.width,h:r.height}}return t},m.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var e=!1;if("during"===u.ANIMATE)this.emit("layoutstarted");else{for(;!e;)e=this.tick();this.graphManager.updateBounds()}},m.prototype.calculateNodesToApplyGravitationTo=function(){var e,t,n=[],r=this.graphManager.getGraphs(),i=r.length;for(t=0;t<i;t++)(e=r[t]).updateConnected(),e.isConnected||(n=n.concat(e.getNodes()));return n},m.prototype.createBendpoints=function(){var e=[];e=e.concat(this.graphManager.getAllEdges());var t,n=new Set;for(t=0;t<e.length;t++){var r=e[t];if(!n.has(r)){var i=r.getSource(),a=r.getTarget();if(i==a)r.getBendpoints().push(new d),r.getBendpoints().push(new d),this.createDummyNodesForBendpoints(r),n.add(r);else{var o=[];if(o=(o=o.concat(i.getEdgeListToNode(a))).concat(a.getEdgeListToNode(i)),!n.has(o[0])){var s;if(o.length>1)for(s=0;s<o.length;s++){var l=o[s];l.getBendpoints().push(new d),this.createDummyNodesForBendpoints(l)}o.forEach((function(e){n.add(e)}))}}}if(n.size==e.length)break}},m.prototype.positionNodesRadially=function(e){for(var t=new h(0,0),n=Math.ceil(Math.sqrt(e.length)),r=0,i=0,a=0,o=new d(0,0),s=0;s<e.length;s++){s%n==0&&(a=0,i=r,0!=s&&(i+=l.DEFAULT_COMPONENT_SEPERATION),r=0);var u=e[s],g=p.findCenterOfTree(u);t.x=a,t.y=i,(o=m.radialLayout(u,g,t)).y>r&&(r=Math.floor(o.y)),a=Math.floor(o.x+l.DEFAULT_COMPONENT_SEPERATION)}this.transform(new d(c.WORLD_CENTER_X-o.x/2,c.WORLD_CENTER_Y-o.y/2))},m.radialLayout=function(e,t,n){var r=Math.max(this.maxDiagonalInTree(e),l.DEFAULT_RADIAL_SEPARATION);m.branchRadialLayout(t,null,0,359,0,r);var i=v.calculateBounds(e),a=new y;a.setDeviceOrgX(i.getMinX()),a.setDeviceOrgY(i.getMinY()),a.setWorldOrgX(n.x),a.setWorldOrgY(n.y);for(var o=0;o<e.length;o++)e[o].transform(a);var s=new d(i.getMaxX(),i.getMaxY());return a.inverseTransformPoint(s)},m.branchRadialLayout=function(e,t,n,r,i,a){var o=(r-n+1)/2;o<0&&(o+=180);var s=(o+n)%360*f.TWO_PI/360,l=(Math.cos(s),i*Math.cos(s)),u=i*Math.sin(s);e.setCenter(l,u);var c=[],h=(c=c.concat(e.getEdges())).length;null!=t&&h--;for(var d,p=0,g=c.length,v=e.getEdgesBetween(t);v.length>1;){var y=v[0];v.splice(0,1);var b=c.indexOf(y);b>=0&&c.splice(b,1),g--,h--}d=null!=t?(c.indexOf(v[0])+1)%g:0;for(var x=Math.abs(r-n)/h,w=d;p!=h;w=++w%g){var E=c[w].getOtherEnd(e);if(E!=t){var _=(n+p*x)%360,T=(_+x)%360;m.branchRadialLayout(E,e,_,T,i+a,a),p++}}},m.maxDiagonalInTree=function(e){for(var t=g.MIN_VALUE,n=0;n<e.length;n++){var r=e[n].getDiagonal();r>t&&(t=r)}return t},m.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},m.prototype.groupZeroDegreeMembers=function(){var e=this,t={};this.memberGroups={},this.idToDummyNode={};for(var n=[],r=this.graphManager.getAllNodes(),i=0;i<r.length;i++){var a=(s=r[i]).getParent();0!==this.getNodeDegreeWithChildren(s)||null!=a.id&&this.getToBeTiled(a)||n.push(s)}for(i=0;i<n.length;i++){var s,l=(s=n[i]).getParent().id;void 0===t[l]&&(t[l]=[]),t[l]=t[l].concat(s)}Object.keys(t).forEach((function(n){if(t[n].length>1){var r="DummyCompound_"+n;e.memberGroups[r]=t[n];var i=t[n][0].getParent(),a=new o(e.graphManager);a.id=r,a.paddingLeft=i.paddingLeft||0,a.paddingRight=i.paddingRight||0,a.paddingBottom=i.paddingBottom||0,a.paddingTop=i.paddingTop||0,e.idToDummyNode[r]=a;var s=e.getGraphManager().add(e.newGraph(),a),l=i.getChild();l.add(a);for(var u=0;u<t[n].length;u++){var c=t[n][u];l.remove(c),s.add(c)}}}))},m.prototype.clearCompounds=function(){var e={},t={};this.performDFSOnCompounds();for(var n=0;n<this.compoundOrder.length;n++)t[this.compoundOrder[n].id]=this.compoundOrder[n],e[this.compoundOrder[n].id]=[].concat(this.compoundOrder[n].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[n].getChild()),this.compoundOrder[n].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(e,t)},m.prototype.clearZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach((function(n){var r=e.idToDummyNode[n];t[n]=e.tileNodes(e.memberGroups[n],r.paddingLeft+r.paddingRight),r.rect.width=t[n].width,r.rect.height=t[n].height}))},m.prototype.repopulateCompounds=function(){for(var e=this.compoundOrder.length-1;e>=0;e--){var t=this.compoundOrder[e],n=t.id,r=t.paddingLeft,i=t.paddingTop;this.adjustLocations(this.tiledMemberPack[n],t.rect.x,t.rect.y,r,i)}},m.prototype.repopulateZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack;Object.keys(t).forEach((function(n){var r=e.idToDummyNode[n],i=r.paddingLeft,a=r.paddingTop;e.adjustLocations(t[n],r.rect.x,r.rect.y,i,a)}))},m.prototype.getToBeTiled=function(e){var t=e.id;if(null!=this.toBeTiled[t])return this.toBeTiled[t];var n=e.getChild();if(null==n)return this.toBeTiled[t]=!1,!1;for(var r=n.getNodes(),i=0;i<r.length;i++){var a=r[i];if(this.getNodeDegree(a)>0)return this.toBeTiled[t]=!1,!1;if(null!=a.getChild()){if(!this.getToBeTiled(a))return this.toBeTiled[t]=!1,!1}else this.toBeTiled[a.id]=!1}return this.toBeTiled[t]=!0,!0},m.prototype.getNodeDegree=function(e){e.id;for(var t=e.getEdges(),n=0,r=0;r<t.length;r++){var i=t[r];i.getSource().id!==i.getTarget().id&&(n+=1)}return n},m.prototype.getNodeDegreeWithChildren=function(e){var t=this.getNodeDegree(e);if(null==e.getChild())return t;for(var n=e.getChild().getNodes(),r=0;r<n.length;r++){var i=n[r];t+=this.getNodeDegreeWithChildren(i)}return t},m.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},m.prototype.fillCompexOrderByDFS=function(e){for(var t=0;t<e.length;t++){var n=e[t];null!=n.getChild()&&this.fillCompexOrderByDFS(n.getChild().getNodes()),this.getToBeTiled(n)&&this.compoundOrder.push(n)}},m.prototype.adjustLocations=function(e,t,n,r,i){n+=i;for(var a=t+=r,o=0;o<e.rows.length;o++){var s=e.rows[o];t=a;for(var l=0,u=0;u<s.length;u++){var c=s[u];c.rect.x=t,c.rect.y=n,t+=c.rect.width+e.horizontalPadding,c.rect.height>l&&(l=c.rect.height)}n+=l+e.verticalPadding}},m.prototype.tileCompoundMembers=function(e,t){var n=this;this.tiledMemberPack=[],Object.keys(e).forEach((function(r){var i=t[r];n.tiledMemberPack[r]=n.tileNodes(e[r],i.paddingLeft+i.paddingRight),i.rect.width=n.tiledMemberPack[r].width,i.rect.height=n.tiledMemberPack[r].height}))},m.prototype.tileNodes=function(e,t){var n={rows:[],rowWidth:[],rowHeight:[],width:0,height:t,verticalPadding:l.TILING_PADDING_VERTICAL,horizontalPadding:l.TILING_PADDING_HORIZONTAL};e.sort((function(e,t){return e.rect.width*e.rect.height>t.rect.width*t.rect.height?-1:e.rect.width*e.rect.height<t.rect.width*t.rect.height?1:0}));for(var r=0;r<e.length;r++){var i=e[r];0==n.rows.length?this.insertNodeToRow(n,i,0,t):this.canAddHorizontal(n,i.rect.width,i.rect.height)?this.insertNodeToRow(n,i,this.getShortestRowIndex(n),t):this.insertNodeToRow(n,i,n.rows.length,t),this.shiftToLastRow(n)}return n},m.prototype.insertNodeToRow=function(e,t,n,r){var i=r;n==e.rows.length&&(e.rows.push([]),e.rowWidth.push(i),e.rowHeight.push(0));var a=e.rowWidth[n]+t.rect.width;e.rows[n].length>0&&(a+=e.horizontalPadding),e.rowWidth[n]=a,e.width<a&&(e.width=a);var o=t.rect.height;n>0&&(o+=e.verticalPadding);var s=0;o>e.rowHeight[n]&&(s=e.rowHeight[n],e.rowHeight[n]=o,s=e.rowHeight[n]-s),e.height+=s,e.rows[n].push(t)},m.prototype.getShortestRowIndex=function(e){for(var t=-1,n=Number.MAX_VALUE,r=0;r<e.rows.length;r++)e.rowWidth[r]<n&&(t=r,n=e.rowWidth[r]);return t},m.prototype.getLongestRowIndex=function(e){for(var t=-1,n=Number.MIN_VALUE,r=0;r<e.rows.length;r++)e.rowWidth[r]>n&&(t=r,n=e.rowWidth[r]);return t},m.prototype.canAddHorizontal=function(e,t,n){var r=this.getShortestRowIndex(e);if(r<0)return!0;var i=e.rowWidth[r];if(i+e.horizontalPadding+t<=e.width)return!0;var a,o,s=0;return e.rowHeight[r]<n&&r>0&&(s=n+e.verticalPadding-e.rowHeight[r]),a=e.width-i>=t+e.horizontalPadding?(e.height+s)/(i+t+e.horizontalPadding):(e.height+s)/e.width,s=n+e.verticalPadding,(o=e.width<t?(e.height+s)/t:(e.height+s)/e.width)<1&&(o=1/o),a<1&&(a=1/a),a<o},m.prototype.shiftToLastRow=function(e){var t=this.getLongestRowIndex(e),n=e.rowWidth.length-1,r=e.rows[t],i=r[r.length-1],a=i.width+e.horizontalPadding;if(e.width-e.rowWidth[n]>a&&t!=n){r.splice(-1,1),e.rows[n].push(i),e.rowWidth[t]=e.rowWidth[t]-a,e.rowWidth[n]=e.rowWidth[n]+a,e.width=e.rowWidth[instance.getLongestRowIndex(e)];for(var o=Number.MIN_VALUE,s=0;s<r.length;s++)r[s].height>o&&(o=r[s].height);t>0&&(o+=e.verticalPadding);var l=e.rowHeight[t]+e.rowHeight[n];e.rowHeight[t]=o,e.rowHeight[n]<i.height+e.verticalPadding&&(e.rowHeight[n]=i.height+e.verticalPadding);var u=e.rowHeight[t]+e.rowHeight[n];e.height+=u-l,this.shiftToLastRow(e)}},m.prototype.tilingPreLayout=function(){l.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},m.prototype.tilingPostLayout=function(){l.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},m.prototype.reduceTrees=function(){for(var e,t=[],n=!0;n;){var r=this.graphManager.getAllNodes(),i=[];n=!1;for(var a=0;a<r.length;a++)1!=(e=r[a]).getEdges().length||e.getEdges()[0].isInterGraph||null!=e.getChild()||(i.push([e,e.getEdges()[0],e.getOwner()]),n=!0);if(1==n){for(var o=[],s=0;s<i.length;s++)1==i[s][0].getEdges().length&&(o.push(i[s]),i[s][0].getOwner().remove(i[s][0]));t.push(o),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=t},m.prototype.growTree=function(e){for(var t,n=e[e.length-1],r=0;r<n.length;r++)t=n[r],this.findPlaceforPrunedNode(t),t[2].add(t[0]),t[2].add(t[1],t[1].source,t[1].target);e.splice(e.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},m.prototype.findPlaceforPrunedNode=function(e){var t,n,r=e[0],i=(n=r==e[1].source?e[1].target:e[1].source).startX,a=n.finishX,o=n.startY,s=n.finishY,l=[0,0,0,0];if(o>0)for(var c=i;c<=a;c++)l[0]+=this.grid[c][o-1].length+this.grid[c][o].length-1;if(a<this.grid.length-1)for(c=o;c<=s;c++)l[1]+=this.grid[a+1][c].length+this.grid[a][c].length-1;if(s<this.grid[0].length-1)for(c=i;c<=a;c++)l[2]+=this.grid[c][s+1].length+this.grid[c][s].length-1;if(i>0)for(c=o;c<=s;c++)l[3]+=this.grid[i-1][c].length+this.grid[i][c].length-1;for(var h,d,p=g.MAX_VALUE,f=0;f<l.length;f++)l[f]<p?(p=l[f],h=1,d=f):l[f]==p&&h++;if(3==h&&0==p)0==l[0]&&0==l[1]&&0==l[2]?t=1:0==l[0]&&0==l[1]&&0==l[3]?t=0:0==l[0]&&0==l[2]&&0==l[3]?t=3:0==l[1]&&0==l[2]&&0==l[3]&&(t=2);else if(2==h&&0==p){var v=Math.floor(2*Math.random());t=0==l[0]&&0==l[1]?0==v?0:1:0==l[0]&&0==l[2]?0==v?0:2:0==l[0]&&0==l[3]?0==v?0:3:0==l[1]&&0==l[2]?0==v?1:2:0==l[1]&&0==l[3]?0==v?1:3:0==v?2:3}else t=4==h&&0==p?v=Math.floor(4*Math.random()):d;0==t?r.setCenter(n.getCenterX(),n.getCenterY()-n.getHeight()/2-u.DEFAULT_EDGE_LENGTH-r.getHeight()/2):1==t?r.setCenter(n.getCenterX()+n.getWidth()/2+u.DEFAULT_EDGE_LENGTH+r.getWidth()/2,n.getCenterY()):2==t?r.setCenter(n.getCenterX(),n.getCenterY()+n.getHeight()/2+u.DEFAULT_EDGE_LENGTH+r.getHeight()/2):r.setCenter(n.getCenterX()-n.getWidth()/2-u.DEFAULT_EDGE_LENGTH-r.getWidth()/2,n.getCenterY())},e.exports=m},function(e,t,n){"use strict";var r={};r.layoutBase=n(0),r.CoSEConstants=n(1),r.CoSEEdge=n(2),r.CoSEGraph=n(3),r.CoSEGraphManager=n(4),r.CoSELayout=n(6),r.CoSENode=n(5),e.exports=r}])},e.exports=r(n(23143))},43457:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(t,n){t.exports=e},function(e,t,n){"use strict";var r=n(0).layoutBase.LayoutConstants,i=n(0).layoutBase.FDLayoutConstants,a=n(0).CoSEConstants,o=n(0).CoSELayout,s=n(0).CoSENode,l=n(0).layoutBase.PointD,u=n(0).layoutBase.DimensionD,c={ready:function(){},stop:function(){},quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function h(e){this.options=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n}(c,e),d(this.options)}var d=function(e){null!=e.nodeRepulsion&&(a.DEFAULT_REPULSION_STRENGTH=i.DEFAULT_REPULSION_STRENGTH=e.nodeRepulsion),null!=e.idealEdgeLength&&(a.DEFAULT_EDGE_LENGTH=i.DEFAULT_EDGE_LENGTH=e.idealEdgeLength),null!=e.edgeElasticity&&(a.DEFAULT_SPRING_STRENGTH=i.DEFAULT_SPRING_STRENGTH=e.edgeElasticity),null!=e.nestingFactor&&(a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=e.nestingFactor),null!=e.gravity&&(a.DEFAULT_GRAVITY_STRENGTH=i.DEFAULT_GRAVITY_STRENGTH=e.gravity),null!=e.numIter&&(a.MAX_ITERATIONS=i.MAX_ITERATIONS=e.numIter),null!=e.gravityRange&&(a.DEFAULT_GRAVITY_RANGE_FACTOR=i.DEFAULT_GRAVITY_RANGE_FACTOR=e.gravityRange),null!=e.gravityCompound&&(a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=e.gravityCompound),null!=e.gravityRangeCompound&&(a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=e.gravityRangeCompound),null!=e.initialEnergyOnIncremental&&(a.DEFAULT_COOLING_FACTOR_INCREMENTAL=i.DEFAULT_COOLING_FACTOR_INCREMENTAL=e.initialEnergyOnIncremental),"draft"==e.quality?r.QUALITY=0:"proof"==e.quality?r.QUALITY=2:r.QUALITY=1,a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=r.NODE_DIMENSIONS_INCLUDE_LABELS=e.nodeDimensionsIncludeLabels,a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=r.DEFAULT_INCREMENTAL=!e.randomize,a.ANIMATE=i.ANIMATE=r.ANIMATE=e.animate,a.TILE=e.tile,a.TILING_PADDING_VERTICAL="function"==typeof e.tilingPaddingVertical?e.tilingPaddingVertical.call():e.tilingPaddingVertical,a.TILING_PADDING_HORIZONTAL="function"==typeof e.tilingPaddingHorizontal?e.tilingPaddingHorizontal.call():e.tilingPaddingHorizontal};h.prototype.run=function(){var e,t,n=this.options,r=(this.idToLNode={},this.layout=new o),i=this;i.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var a=r.newGraphManager();this.gm=a;var s=this.options.eles.nodes(),l=this.options.eles.edges();this.root=a.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(s),r);for(var u=0;u<l.length;u++){var c=l[u],h=this.idToLNode[c.data("source")],d=this.idToLNode[c.data("target")];h!==d&&0==h.getEdgesBetween(d).length&&(a.add(r.newEdge(),h,d).id=c.id())}var p=function(e,t){"number"==typeof e&&(e=t);var n=e.data("id"),r=i.idToLNode[n];return{x:r.getRect().getCenterX(),y:r.getRect().getCenterY()}},g=function a(){for(var o,s=function(){n.fit&&n.cy.fit(n.eles,n.padding),e||(e=!0,i.cy.one("layoutready",n.ready),i.cy.trigger({type:"layoutready",layout:i}))},l=i.options.refresh,u=0;u<l&&!o;u++)o=i.stopped||i.layout.tick();if(o)return r.checkLayoutSuccess()&&!r.isSubLayout&&r.doPostLayout(),r.tilingPostLayout&&r.tilingPostLayout(),r.isLayoutFinished=!0,i.options.eles.nodes().positions(p),s(),i.cy.one("layoutstop",i.options.stop),i.cy.trigger({type:"layoutstop",layout:i}),t&&cancelAnimationFrame(t),void(e=!1);var c=i.layout.getPositionsData();n.eles.nodes().positions((function(e,t){if("number"==typeof e&&(e=t),!e.isParent()){for(var n=e.id(),r=c[n],i=e;null==r&&(r=c[i.data("parent")]||c["DummyCompound_"+i.data("parent")],c[n]=r,null!=(i=i.parent()[0])););return null!=r?{x:r.x,y:r.y}:{x:e.position("x"),y:e.position("y")}}})),s(),t=requestAnimationFrame(a)};return r.addListener("layoutstarted",(function(){"during"===i.options.animate&&(t=requestAnimationFrame(g))})),r.runLayout(),"during"!==this.options.animate&&(i.options.eles.nodes().not(":parent").layoutPositions(i,i.options,p),e=!1),this},h.prototype.getTopMostNodes=function(e){for(var t={},n=0;n<e.length;n++)t[e[n].id()]=!0;var r=e.filter((function(e,n){"number"==typeof e&&(e=n);for(var r=e.parent()[0];null!=r;){if(t[r.id()])return!1;r=r.parent()[0]}return!0}));return r},h.prototype.processChildrenList=function(e,t,n){for(var r=t.length,i=0;i<r;i++){var a,o,c=t[i],h=c.children(),d=c.layoutDimensions({nodeDimensionsIncludeLabels:this.options.nodeDimensionsIncludeLabels});if((a=null!=c.outerWidth()&&null!=c.outerHeight()?e.add(new s(n.graphManager,new l(c.position("x")-d.w/2,c.position("y")-d.h/2),new u(parseFloat(d.w),parseFloat(d.h)))):e.add(new s(this.graphManager))).id=c.data("id"),a.paddingLeft=parseInt(c.css("padding")),a.paddingTop=parseInt(c.css("padding")),a.paddingRight=parseInt(c.css("padding")),a.paddingBottom=parseInt(c.css("padding")),this.options.nodeDimensionsIncludeLabels&&c.isParent()){var p=c.boundingBox({includeLabels:!0,includeNodes:!1}).w,g=c.boundingBox({includeLabels:!0,includeNodes:!1}).h,f=c.css("text-halign");a.labelWidth=p,a.labelHeight=g,a.labelPos=f}this.idToLNode[c.data("id")]=a,isNaN(a.rect.x)&&(a.rect.x=0),isNaN(a.rect.y)&&(a.rect.y=0),null!=h&&h.length>0&&(o=n.getGraphManager().add(n.newGraph(),a),this.processChildrenList(o,h,n))}},h.prototype.stop=function(){return this.stopped=!0,this};var p=function(e){e("layout","cose-bilkent",h)};"undefined"!=typeof cytoscape&&p(cytoscape),e.exports=p}])},e.exports=r(n(87799))},44726:(e,t,n)=>{"use strict";var r=n(38221),i=n(65731),a=n(58156),o=n(63560),s=n(42072);function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=l(r),c=l(i),h=l(a),d=l(o),p=l(s);function g(e){return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},g(e)}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function y(e,t,n){return t&&v(e.prototype,t),n&&v(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,a=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(l){s=!0,i=l}finally{try{o||null==n.return||n.return()}finally{if(s)throw i}}return a}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return x(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return x(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var w="undefined"==typeof window?null:window,E=w?w.navigator:null;w&&w.document;var _=g(""),T=g({}),D=g((function(){})),C="undefined"==typeof HTMLElement?"undefined":g(HTMLElement),N=function(e){return e&&e.instanceString&&L(e.instanceString)?e.instanceString():null},A=function(e){return null!=e&&g(e)==_},L=function(e){return null!=e&&g(e)===D},k=function(e){return!O(e)&&(Array.isArray?Array.isArray(e):null!=e&&e instanceof Array)},S=function(e){return null!=e&&g(e)===T&&!k(e)&&e.constructor===Object},I=function(e){return null!=e&&g(e)===g(1)&&!isNaN(e)},M=function(e){return"undefined"===C?void 0:null!=e&&e instanceof HTMLElement},O=function(e){return P(e)||R(e)},P=function(e){return"collection"===N(e)&&e._private.single},R=function(e){return"collection"===N(e)&&!e._private.single},B=function(e){return"core"===N(e)},F=function(e){return"stylesheet"===N(e)},z=function(e){return null==e||!(""!==e&&!e.match(/^\s+$/))},G=function(e){return function(e){return null!=e&&g(e)===T}(e)&&L(e.then)},Y=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]);return e.join("$")});var n=function n(){var r,i=arguments,a=t.apply(this,i),o=n.cache;return(r=o[a])||(r=o[a]=e.apply(this,i)),r};return n.cache={},n},X=Y((function(e){return e.replace(/([A-Z])/g,(function(e){return"-"+e.toLowerCase()}))})),V=Y((function(e){return e.replace(/(-\w)/g,(function(e){return e[1].toUpperCase()}))})),U=Y((function(e,t){return e+t[0].toUpperCase()+t.substring(1)}),(function(e,t){return e+"$"+t})),j=function(e){return z(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},q="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",H="rgb[a]?\\(("+q+"[%]?)\\s*,\\s*("+q+"[%]?)\\s*,\\s*("+q+"[%]?)(?:\\s*,\\s*("+q+"))?\\)",W="rgb[a]?\\((?:"+q+"[%]?)\\s*,\\s*(?:"+q+"[%]?)\\s*,\\s*(?:"+q+"[%]?)(?:\\s*,\\s*(?:"+q+"))?\\)",$="hsl[a]?\\(("+q+")\\s*,\\s*("+q+"[%])\\s*,\\s*("+q+"[%])(?:\\s*,\\s*("+q+"))?\\)",K="hsl[a]?\\((?:"+q+")\\s*,\\s*(?:"+q+"[%])\\s*,\\s*(?:"+q+"[%])(?:\\s*,\\s*(?:"+q+"))?\\)",Z=function(e,t){return e<t?-1:e>t?1:0},Q=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n<t.length;n++){var r=t[n];if(null!=r)for(var i=Object.keys(r),a=0;a<i.length;a++){var o=i[a];e[o]=r[o]}}return e},J=function(e){return(k(e)?e:null)||function(e){return ee[e.toLowerCase()]}(e)||function(e){if((4===e.length||7===e.length)&&"#"===e[0]){var t,n,r,i=16;return 4===e.length?(t=parseInt(e[1]+e[1],i),n=parseInt(e[2]+e[2],i),r=parseInt(e[3]+e[3],i)):(t=parseInt(e[1]+e[2],i),n=parseInt(e[3]+e[4],i),r=parseInt(e[5]+e[6],i)),[t,n,r]}}(e)||function(e){var t,n=new RegExp("^"+H+"$").exec(e);if(n){t=[];for(var r=[],i=1;i<=3;i++){var a=n[i];if("%"===a[a.length-1]&&(r[i]=!0),a=parseFloat(a),r[i]&&(a=a/100*255),a<0||a>255)return;t.push(Math.floor(a))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var l=n[4];if(void 0!==l){if((l=parseFloat(l))<0||l>1)return;t.push(l)}}return t}(e)||function(e){var t,n,r,i,a,o,s,l;function u(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^"+$+"$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(i=parseFloat(c[3]))<0||i>100)return;if(i/=100,void 0!==(a=c[4])&&((a=parseFloat(a))<0||a>1))return;if(0===r)o=s=l=Math.round(255*i);else{var h=i<.5?i*(1+r):i+r-i*r,d=2*i-h;o=Math.round(255*u(d,h,n+1/3)),s=Math.round(255*u(d,h,n)),l=Math.round(255*u(d,h,n-1/3))}t=[o,s,l,a]}return t}(e)},ee={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},te=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(S(a))throw Error("Tried to set map with object key");i<n.length-1?(null==t[a]&&(t[a]={}),t=t[a]):t[a]=e.value}},ne=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(S(a))throw Error("Tried to get map with object key");if(null==(t=t[a]))return t}return t},re=w?w.performance:null,ie=re&&re.now?function(){return re.now()}:function(){return Date.now()},ae=function(){if(w){if(w.requestAnimationFrame)return function(e){w.requestAnimationFrame(e)};if(w.mozRequestAnimationFrame)return function(e){w.mozRequestAnimationFrame(e)};if(w.webkitRequestAnimationFrame)return function(e){w.webkitRequestAnimationFrame(e)};if(w.msRequestAnimationFrame)return function(e){w.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout((function(){e(ie())}),1e3/60)}}(),oe=function(e){return ae(e)},se=ie,le=9261,ue=5381,ce=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:le;!(t=e.next()).done;)n=65599*n+t.value|0;return n},he=function(e){return 65599*(arguments.length>1&&void 0!==arguments[1]?arguments[1]:le)+e|0},de=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ue;return(t<<5)+t+e|0},pe=function(e){return 2097152*e[0]+e[1]},ge=function(e,t){return[he(e[0],t[0]),de(e[1],t[1])]},fe=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return ce({next:function(){return r<i?n.value=e.charCodeAt(r++):n.done=!0,n}},t)},ve=function(){return ye(arguments)},ye=function(e){for(var t,n=0;n<e.length;n++){var r=e[n];t=0===n?fe(r):fe(r,t)}return t},me=!0,be=null!=console.warn,xe=null!=console.trace,we=Number.MAX_SAFE_INTEGER||9007199254740991,Ee=function(){return!0},_e=function(){return!1},Te=function(){return 0},De=function(){},Ce=function(e){throw new Error(e)},Ne=function(e){if(void 0===e)return me;me=!!e},Ae=function(e){Ne()&&(be?console.warn(e):(console.log(e),xe&&console.trace()))},Le=function(e){return null==e?e:k(e)?e.slice():S(e)?function(e){return Q({},e)}(e):e},ke=function(e,t){for(t=e="";e++<36;t+=51*e&52?(15^e?8^Math.random()*(20^e?16:4):4).toString(16):"-");return t},Se={},Ie=function(){return Se},Me=function(e){var t=Object.keys(e);return function(n){for(var r={},i=0;i<t.length;i++){var a=t[i],o=null==n?void 0:n[a];r[a]=void 0===o?e[a]:o}return r}},Oe=function(e,t,n){for(var r=e.length-1;r>=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},Pe=function(e){e.splice(0,e.length)},Re=function(e,t,n){return n&&(t=U(n,t)),e[t]},Be=function(e,t,n,r){n&&(t=U(n,t)),e[t]=r},Fe="undefined"!=typeof Map?Map:function(){function e(){f(this,e),this._obj={}}return y(e,[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}]),e}(),ze=function(){function e(t){if(f(this,e),this._obj=Object.create(null),this.size=0,null!=t){var n;n=null!=t.instanceString&&t.instanceString()===this.instanceString()?t.toArray():t;for(var r=0;r<n.length;r++)this.add(n[r])}}return y(e,[{key:"instanceString",value:function(){return"set"}},{key:"add",value:function(e){var t=this._obj;1!==t[e]&&(t[e]=1,this.size++)}},{key:"delete",value:function(e){var t=this._obj;1===t[e]&&(t[e]=0,this.size--)}},{key:"clear",value:function(){this._obj=Object.create(null)}},{key:"has",value:function(e){return 1===this._obj[e]}},{key:"toArray",value:function(){var e=this;return Object.keys(this._obj).filter((function(t){return e.has(t)}))}},{key:"forEach",value:function(e,t){return this.toArray().forEach(e,t)}}]),e}(),Ge="undefined"!==("undefined"==typeof Set?"undefined":g(Set))?Set:ze,Ye=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&B(e)){var r=t.group;if(null==r&&(r=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"===r||"edges"===r){this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:r,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:void 0===t.selectable||!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable||!!t.grabbable,pannable:void 0===t.pannable?"edges"===r:!!t.pannable,active:!1,classes:new Ge,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(null==i.position.x&&(i.position.x=0),null==i.position.y&&(i.position.y=0),t.renderedPosition){var a=t.renderedPosition,o=e.pan(),s=e.zoom();i.position={x:(a.x-o.x)/s,y:(a.y-o.y)/s}}var l=[];k(t.classes)?l=t.classes:A(t.classes)&&(l=t.classes.split(/\s+/));for(var u=0,c=l.length;u<c;u++){var h=l[u];h&&""!==h&&i.classes.add(h)}this.createEmitter();var d=t.style||t.css;d&&(Ae("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."),this.style(d)),(void 0===n||n)&&this.restore()}else Ce("An element must be of type `nodes` or `edges`; you specified `"+r+"`")}else Ce("An element must have a core reference and parameters set")},Xe=function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},function(t,n,r){var i;S(t)&&!O(t)&&(t=(i=t).roots||i.root,n=i.visit,r=i.directed),r=2!==arguments.length||L(n)?r:n,n=L(n)?n:function(){};for(var a,o=this._private.cy,s=t=A(t)?this.filter(t):t,l=[],u=[],c={},h={},d={},p=0,g=this.byGroup(),f=g.nodes,v=g.edges,y=0;y<s.length;y++){var m=s[y],b=m.id();m.isNode()&&(l.unshift(m),e.bfs&&(d[b]=!0,u.push(m)),h[b]=0)}for(var x=function(){var t=e.bfs?l.shift():l.pop(),i=t.id();if(e.dfs){if(d[i])return"continue";d[i]=!0,u.push(t)}var o,s=h[i],g=c[i],y=null!=g?g.source():null,m=null!=g?g.target():null,b=null==g?void 0:t.same(y)?m[0]:y[0];if(!0===(o=n(t,g,b,p++,s)))return a=t,"break";if(!1===o)return"break";for(var x=t.connectedEdges().filter((function(e){return(!r||e.source().same(t))&&v.has(e)})),w=0;w<x.length;w++){var E=x[w],_=E.connectedNodes().filter((function(e){return!e.same(t)&&f.has(e)})),T=_.id();0===_.length||d[T]||(_=_[0],l.push(_),e.bfs&&(d[T]=!0,u.push(_)),c[T]=E,h[T]=h[i]+1)}};0!==l.length;){var w=x();if("continue"!==w&&"break"===w)break}for(var E=o.collection(),_=0;_<u.length;_++){var T=u[_],D=c[T.id()];null!=D&&E.push(D),E.push(T)}return{path:o.collection(E),found:o.collection(a)}}},Ve={breadthFirstSearch:Xe({bfs:!0}),depthFirstSearch:Xe({dfs:!0})};Ve.bfs=Ve.breadthFirstSearch,Ve.dfs=Ve.depthFirstSearch;var Ue=Me({root:null,weight:function(e){return 1},directed:!1}),je={dijkstra:function(e){if(!S(e)){var t=arguments;e={root:t[0],weight:t[1],directed:t[2]}}var n=Ue(e),r=n.root,i=n.weight,a=n.directed,o=this,s=i,l=A(r)?this.filter(r)[0]:r[0],u={},h={},d={},p=this.byGroup(),g=p.nodes,f=p.edges;f.unmergeBy((function(e){return e.isLoop()}));for(var v=function(e){return u[e.id()]},y=function(e,t){u[e.id()]=t,m.updateItem(e)},m=new c.default((function(e,t){return v(e)-v(t)})),b=0;b<g.length;b++){var x=g[b];u[x.id()]=x.same(l)?0:1/0,m.push(x)}for(var w=function(e,t){for(var n,r=(a?e.edgesTo(t):e.edgesWith(t)).intersect(f),i=1/0,o=0;o<r.length;o++){var l=r[o],u=s(l);(u<i||!n)&&(i=u,n=l)}return{edge:n,dist:i}};m.size()>0;){var E=m.pop(),_=v(E),T=E.id();if(d[T]=_,_!==1/0)for(var D=E.neighborhood().intersect(g),C=0;C<D.length;C++){var N=D[C],L=N.id(),k=w(E,N),I=_+k.dist;I<v(N)&&(y(N,I),h[L]={node:E,edge:k.edge})}}return{distanceTo:function(e){var t=A(e)?g.filter(e)[0]:e[0];return d[t.id()]},pathTo:function(e){var t=A(e)?g.filter(e)[0]:e[0],n=[],r=t,i=r.id();if(t.length>0)for(n.unshift(t);h[i];){var a=h[i];n.unshift(a.edge),n.unshift(a.node),i=(r=a.node).id()}return o.spawn(n)}}}},qe={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,i=n.length,a=new Array(i),o=n,s=function(e){for(var t=0;t<a.length;t++){if(a[t].has(e))return t}},l=0;l<i;l++)a[l]=this.spawn(n[l]);for(var u=r.sort((function(t,n){return e(t)-e(n)})),c=0;c<u.length;c++){var h=u[c],d=h.source()[0],p=h.target()[0],g=s(d),f=s(p),v=a[g],y=a[f];g!==f&&(o.merge(h),v.merge(y),a.splice(f,1))}return o}},He=Me({root:null,goal:null,weight:function(e){return 1},heuristic:function(e){return 0},directed:!1}),We={aStar:function(e){var t=this.cy(),n=He(e),r=n.root,i=n.goal,a=n.heuristic,o=n.directed,s=n.weight;r=t.collection(r)[0],i=t.collection(i)[0];var l,u,h=r.id(),d=i.id(),p={},g={},f={},v=new c.default((function(e,t){return g[e.id()]-g[t.id()]})),y=new Ge,m={},b={},x=function(e,t){v.push(e),y.add(t)};x(r,h),p[h]=0,g[h]=a(r);for(var w,E=0;v.size()>0;){if(l=v.pop(),u=l.id(),y.delete(u),E++,u===d){for(var _=[],T=i,D=d,C=b[D];_.unshift(T),null!=C&&_.unshift(C),null!=(T=m[D]);)C=b[D=T.id()];return{found:!0,distance:p[u],path:this.spawn(_),steps:E}}f[u]=!0;for(var N=l._private.edges,A=0;A<N.length;A++){var L=N[A];if(this.hasElementWithId(L.id())&&(!o||L.data("source")===u)){var k=L.source(),S=L.target(),I=k.id()!==u?k:S,M=I.id();if(this.hasElementWithId(M)&&!f[M]){var O=p[u]+s(L);w=M,y.has(w)?O<p[M]&&(p[M]=O,g[M]=O+a(I),m[M]=l,b[M]=L):(p[M]=O,g[M]=O+a(I),x(I,M),m[M]=l,b[M]=L)}}}}return{found:!1,distance:void 0,path:void 0,steps:E}}},$e=Me({weight:function(e){return 1},directed:!1}),Ke={floydWarshall:function(e){for(var t=this.cy(),n=$e(e),r=n.weight,i=n.directed,a=r,o=this.byGroup(),s=o.nodes,l=o.edges,u=s.length,c=u*u,h=function(e){return s.indexOf(e)},d=function(e){return s[e]},p=new Array(c),g=0;g<c;g++){var f=g%u,v=(g-f)/u;p[g]=v===f?0:1/0}for(var y=new Array(c),m=new Array(c),b=0;b<l.length;b++){var x=l[b],w=x.source()[0],E=x.target()[0];if(w!==E){var _=h(w),T=h(E),D=_*u+T,C=a(x);if(p[D]>C&&(p[D]=C,y[D]=T,m[D]=x),!i){var N=T*u+_;!i&&p[N]>C&&(p[N]=C,y[N]=_,m[N]=x)}}}for(var L=0;L<u;L++)for(var k=0;k<u;k++)for(var S=k*u+L,I=0;I<u;I++){var M=k*u+I,O=L*u+I;p[S]+p[O]<p[M]&&(p[M]=p[S]+p[O],y[M]=y[S])}var P=function(e){return h(function(e){return(A(e)?t.filter(e):e)[0]}(e))},R={distance:function(e,t){var n=P(e),r=P(t);return p[n*u+r]},path:function(e,n){var r=P(e),i=P(n),a=d(r);if(r===i)return a.collection();if(null==y[r*u+i])return t.collection();var o,s=t.collection(),l=r;for(s.merge(a);r!==i;)l=r,r=y[r*u+i],o=m[l*u+r],s.merge(o),s.merge(d(r));return s}};return R}},Ze=Me({weight:function(e){return 1},directed:!1,root:null}),Qe={bellmanFord:function(e){var t=this,n=Ze(e),r=n.weight,i=n.directed,a=n.root,o=r,s=this,l=this.cy(),u=this.byGroup(),c=u.edges,h=u.nodes,d=h.length,p=new Fe,g=!1,f=[];a=l.collection(a)[0],c.unmergeBy((function(e){return e.isLoop()}));for(var v=c.length,y=function(e){var t=p.get(e.id());return t||(t={},p.set(e.id(),t)),t},m=function(e){return(A(e)?l.$(e):e)[0]},b=0;b<d;b++){var x=h[b],w=y(x);x.same(a)?w.dist=0:w.dist=1/0,w.pred=null,w.edge=null}for(var E=!1,_=function(e,t,n,r,i,a){var o=r.dist+a;o<i.dist&&!n.same(r.edge)&&(i.dist=o,i.pred=e,i.edge=n,E=!0)},T=1;T<d;T++){E=!1;for(var D=0;D<v;D++){var C=c[D],N=C.source(),L=C.target(),k=o(C),S=y(N),I=y(L);_(N,0,C,S,I,k),i||_(L,0,C,I,S,k)}if(!E)break}if(E)for(var M=[],O=0;O<v;O++){var P=c[O],R=P.source(),B=P.target(),F=o(P),z=y(R).dist,G=y(B).dist;if(z+F<G||!i&&G+F<z){if(g||(Ae("Graph contains a negative weight cycle for Bellman-Ford"),g=!0),!1===e.findNegativeWeightCycles)break;var Y=[];z+F<G&&Y.push(R),!i&&G+F<z&&Y.push(B);for(var X=Y.length,V=0;V<X;V++){var U=Y[V],j=[U];j.push(y(U).edge);for(var q=y(U).pred;-1===j.indexOf(q);)j.push(q),j.push(y(q).edge),q=y(q).pred;for(var H=(j=j.slice(j.indexOf(q)))[0].id(),W=0,$=2;$<j.length;$+=2)j[$].id()<H&&(H=j[$].id(),W=$);(j=j.slice(W).concat(j.slice(0,W))).push(j[0]);var K=j.map((function(e){return e.id()})).join(",");-1===M.indexOf(K)&&(f.push(s.spawn(j)),M.push(K))}}}return{distanceTo:function(e){return y(m(e)).dist},pathTo:function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a,r=[],i=m(e);;){if(null==i)return t.spawn();var o=y(i),l=o.edge,u=o.pred;if(r.unshift(i[0]),i.same(n)&&r.length>0)break;null!=l&&r.unshift(l),i=u}return s.spawn(r)},hasNegativeWeightCycle:g,negativeWeightCycles:f}}},Je=Math.sqrt(2),et=function(e,t,n){0===n.length&&Ce("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],i=r[1],a=r[2],o=t[i],s=t[a],l=n,u=l.length-1;u>=0;u--){var c=l[u],h=c[1],d=c[2];(t[h]===o&&t[d]===s||t[h]===s&&t[d]===o)&&l.splice(u,1)}for(var p=0;p<l.length;p++){var g=l[p];g[1]===s?(l[p]=g.slice(),l[p][1]=o):g[2]===s&&(l[p]=g.slice(),l[p][2]=o)}for(var f=0;f<t.length;f++)t[f]===s&&(t[f]=o);return l},tt=function(e,t,n,r){for(;n>r;){var i=Math.floor(Math.random()*t.length);t=et(i,e,t),n--}return t},nt={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy((function(e){return e.isLoop()}));var i=n.length,a=r.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),s=Math.floor(i/Je);if(!(i<2)){for(var l=[],u=0;u<a;u++){var c=r[u];l.push([u,n.indexOf(c.source()),n.indexOf(c.target())])}for(var h=1/0,d=[],p=new Array(i),g=new Array(i),f=new Array(i),v=function(e,t){for(var n=0;n<i;n++)t[n]=e[n]},y=0;y<=o;y++){for(var m=0;m<i;m++)g[m]=m;var b=tt(g,l.slice(),i,s),x=b.slice();v(g,f);var w=tt(g,b,s,2),E=tt(f,x,s,2);w.length<=E.length&&w.length<h?(h=w.length,d=w,v(g,p)):E.length<=w.length&&E.length<h&&(h=E.length,d=E,v(f,p))}for(var _=this.spawn(d.map((function(e){return r[e[0]]}))),T=this.spawn(),D=this.spawn(),C=p[0],N=0;N<p.length;N++){var A=p[N],L=n[N];A===C?T.merge(L):D.merge(L)}var k=function(t){var n=e.spawn();return t.forEach((function(t){n.merge(t),t.connectedEdges().forEach((function(t){e.contains(t)&&!_.contains(t)&&n.merge(t)}))})),n},S=[k(T),k(D)];return{cut:_,components:S,partition1:T,partition2:D}}Ce("At least 2 nodes are required for Karger-Stein algorithm")}},rt=function(e,t,n){return{x:e.x*t+n.x,y:e.y*t+n.y}},it=function(e,t,n){return{x:(e.x-n.x)/t,y:(e.y-n.y)/t}},at=function(e){return{x:e[0],y:e[1]}},ot=function(e,t){return Math.atan2(t,e)-Math.PI/2},st=Math.log2||function(e){return Math.log(e)/Math.log(2)},lt=function(e){return e>0?1:e<0?-1:0},ut=function(e,t){return Math.sqrt(ct(e,t))},ct=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},ht=function(e){for(var t=e.length,n=0,r=0;r<t;r++)n+=e[r];for(var i=0;i<t;i++)e[i]=e[i]/n;return e},dt=function(e,t,n,r){return(1-r)*(1-r)*e+2*(1-r)*r*t+r*r*n},pt=function(e,t,n,r){return{x:dt(e.x,t.x,n.x,r),y:dt(e.y,t.y,n.y,r)}},gt=function(e,t,n){return Math.max(e,Math.min(n,t))},ft=function(e){if(null==e)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(null!=e.x1&&null!=e.y1){if(null!=e.x2&&null!=e.y2&&e.x2>=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},vt=function(e,t){e.x1=Math.min(e.x1,t.x1),e.x2=Math.max(e.x2,t.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,t.y1),e.y2=Math.max(e.y2,t.y2),e.h=e.y2-e.y1},yt=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},mt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},bt=function(e){var t,n,r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===a.length)t=n=r=i=a[0];else if(2===a.length)t=r=a[0],i=n=a[1];else if(4===a.length){var o=b(a,4);t=o[0],n=o[1],r=o[2],i=o[3]}return e.x1-=i,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},xt=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},wt=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2<t.x1)&&(!(t.x2<e.x1)&&(!(e.y2<t.y1)&&(!(t.y2<e.y1)&&(!(e.y1>t.y2)&&!(t.y1>e.y2)))))))},Et=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},_t=function(e,t){return Et(e,t.x1,t.y1)&&Et(e,t.x2,t.y2)},Tt=function(e,t,n,r,i,a,o){var s,l=Xt(i,a),u=i/2,c=a/2,h=r-c-o;if((s=Rt(e,t,n,r,n-u+l-o,h,n+u-l+o,h,!1)).length>0)return s;var d=n+u+o;if((s=Rt(e,t,n,r,d,r-c+l-o,d,r+c-l+o,!1)).length>0)return s;var p=r+c+o;if((s=Rt(e,t,n,r,n-u+l-o,p,n+u-l+o,p,!1)).length>0)return s;var g,f=n-u-o;if((s=Rt(e,t,n,r,f,r-c+l-o,f,r+c-l+o,!1)).length>0)return s;var v=n-u+l,y=r-c+l;if((g=Ot(e,t,n,r,v,y,l+o)).length>0&&g[0]<=v&&g[1]<=y)return[g[0],g[1]];var m=n+u-l,b=r-c+l;if((g=Ot(e,t,n,r,m,b,l+o)).length>0&&g[0]>=m&&g[1]<=b)return[g[0],g[1]];var x=n+u-l,w=r+c-l;if((g=Ot(e,t,n,r,x,w,l+o)).length>0&&g[0]>=x&&g[1]>=w)return[g[0],g[1]];var E=n-u+l,_=r+c-l;return(g=Ot(e,t,n,r,E,_,l+o)).length>0&&g[0]<=E&&g[1]>=_?[g[0],g[1]]:[]},Dt=function(e,t,n,r,i,a,o){var s=o,l=Math.min(n,i),u=Math.max(n,i),c=Math.min(r,a),h=Math.max(r,a);return l-s<=e&&e<=u+s&&c-s<=t&&t<=h+s},Ct=function(e,t,n,r,i,a,o,s,l){var u=Math.min(n,o,i)-l,c=Math.max(n,o,i)+l,h=Math.min(r,s,a)-l,d=Math.max(r,s,a)+l;return!(e<u||e>c||t<h||t>d)},Nt=function(e,t,n,r,i,a,o,s){var l=[];!function(e,t,n,r,i){var a,o,s,l,u,c,h,d;0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),a=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,i[1]=0,h=t/3,a>0?(u=(u=s+Math.sqrt(a))<0?-Math.pow(-u,1/3):Math.pow(u,1/3),c=(c=s-Math.sqrt(a))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-h+u+c,h+=(u+c)/2,i[4]=i[2]=-h,h=Math.sqrt(3)*(-c+u)/2,i[3]=h,i[5]=-h):(i[5]=i[3]=0,0===a?(d=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),i[0]=2*d-h,i[4]=i[2]=-(d+h)):(l=(o=-o)*o*o,l=Math.acos(s/Math.sqrt(l)),d=2*Math.sqrt(o),i[0]=-h+d*Math.cos(l/3),i[2]=-h+d*Math.cos((l+2*Math.PI)/3),i[4]=-h+d*Math.cos((l+4*Math.PI)/3)))}(1*n*n-4*n*i+2*n*o+4*i*i-4*i*o+o*o+r*r-4*r*a+2*r*s+4*a*a-4*a*s+s*s,9*n*i-3*n*n-3*n*o-6*i*i+3*i*o+9*r*a-3*r*r-3*r*s-6*a*a+3*a*s,3*n*n-6*n*i+n*o-n*e+2*i*i+2*i*e-o*e+3*r*r-6*r*a+r*s-r*t+2*a*a+2*a*t-s*t,1*n*i-n*n+n*e-i*e+r*a-r*r+r*t-a*t,l);for(var u=[],c=0;c<6;c+=2)Math.abs(l[c+1])<1e-7&&l[c]>=0&&l[c]<=1&&u.push(l[c]);u.push(1),u.push(0);for(var h,d,p,g=-1,f=0;f<u.length;f++)h=Math.pow(1-u[f],2)*n+2*(1-u[f])*u[f]*i+u[f]*u[f]*o,d=Math.pow(1-u[f],2)*r+2*(1-u[f])*u[f]*a+u[f]*u[f]*s,p=Math.pow(h-e,2)+Math.pow(d-t,2),g>=0?p<g&&(g=p):g=p;return g},At=function(e,t,n,r,i,a){var o=[e-n,t-r],s=[i-n,a-r],l=s[0]*s[0]+s[1]*s[1],u=o[0]*o[0]+o[1]*o[1],c=o[0]*s[0]+o[1]*s[1],h=c*c/l;return c<0?u:h>l?(e-i)*(e-i)+(t-a)*(t-a):u-h},Lt=function(e,t,n){for(var r,i,a,o,s=0,l=0;l<n.length/2;l++)if(r=n[2*l],i=n[2*l+1],l+1<n.length/2?(a=n[2*(l+1)],o=n[2*(l+1)+1]):(a=n[2*(l+1-n.length/2)],o=n[2*(l+1-n.length/2)+1]),r==e&&a==e);else{if(!(r>=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},kt=function(e,t,n,r,i,a,o,s,l){var u,c=new Array(n.length);null!=s[0]?(u=Math.atan(s[1]/s[0]),s[0]<0?u+=Math.PI/2:u=-u-Math.PI/2):u=s;for(var h,d=Math.cos(-u),p=Math.sin(-u),g=0;g<c.length/2;g++)c[2*g]=a/2*(n[2*g]*d-n[2*g+1]*p),c[2*g+1]=o/2*(n[2*g+1]*d+n[2*g]*p),c[2*g]+=r,c[2*g+1]+=i;if(l>0){var f=It(c,-l);h=St(f)}else h=c;return Lt(e,t,h)},St=function(e){for(var t,n,r,i,a,o,s,l,u=new Array(e.length/2),c=0;c<e.length/4;c++){t=e[4*c],n=e[4*c+1],r=e[4*c+2],i=e[4*c+3],c<e.length/4-1?(a=e[4*(c+1)],o=e[4*(c+1)+1],s=e[4*(c+1)+2],l=e[4*(c+1)+3]):(a=e[0],o=e[1],s=e[2],l=e[3]);var h=Rt(t,n,r,i,a,o,s,l,!0);u[2*c]=h[0],u[2*c+1]=h[1]}return u},It=function(e,t){for(var n,r,i,a,o=new Array(2*e.length),s=0;s<e.length/2;s++){n=e[2*s],r=e[2*s+1],s<e.length/2-1?(i=e[2*(s+1)],a=e[2*(s+1)+1]):(i=e[0],a=e[1]);var l=a-r,u=-(i-n),c=Math.sqrt(l*l+u*u),h=l/c,d=u/c;o[4*s]=n+h*t,o[4*s+1]=r+d*t,o[4*s+2]=i+h*t,o[4*s+3]=a+d*t}return o},Mt=function(e,t,n,r,i,a,o){return e-=i,t-=a,(e/=n/2+o)*e+(t/=r/2+o)*t<=1},Ot=function(e,t,n,r,i,a,o){var s=[n-e,r-t],l=[e-i,t-a],u=s[0]*s[0]+s[1]*s[1],c=2*(l[0]*s[0]+l[1]*s[1]),h=c*c-4*u*(l[0]*l[0]+l[1]*l[1]-o*o);if(h<0)return[];var d=(-c+Math.sqrt(h))/(2*u),p=(-c-Math.sqrt(h))/(2*u),g=Math.min(d,p),f=Math.max(d,p),v=[];if(g>=0&&g<=1&&v.push(g),f>=0&&f<=1&&v.push(f),0===v.length)return[];var y=v[0]*s[0]+e,m=v[0]*s[1]+t;return v.length>1?v[0]==v[1]?[y,m]:[y,m,v[1]*s[0]+e,v[1]*s[1]+t]:[y,m]},Pt=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},Rt=function(e,t,n,r,i,a,o,s,l){var u=e-i,c=n-e,h=o-i,d=t-a,p=r-t,g=s-a,f=h*d-g*u,v=c*d-p*u,y=g*c-h*p;if(0!==y){var m=f/y,b=v/y,x=-.001;return x<=m&&m<=1.001&&x<=b&&b<=1.001||l?[e+m*c,t+m*p]:[]}return 0===f||0===v?Pt(e,n,o)===o?[o,s]:Pt(e,n,i)===i?[i,a]:Pt(i,o,n)===n?[n,r]:[]:[]},Bt=function(e,t,n,r,i,a,o,s){var l,u,c,h,d,p,g=[],f=new Array(n.length),v=!0;if(null==a&&(v=!1),v){for(var y=0;y<f.length/2;y++)f[2*y]=n[2*y]*a+r,f[2*y+1]=n[2*y+1]*o+i;if(s>0){var m=It(f,-s);u=St(m)}else u=f}else u=n;for(var b=0;b<u.length/2;b++)c=u[2*b],h=u[2*b+1],b<u.length/2-1?(d=u[2*(b+1)],p=u[2*(b+1)+1]):(d=u[0],p=u[1]),0!==(l=Rt(e,t,r,i,c,h,d,p)).length&&g.push(l[0],l[1]);return g},Ft=function(e,t,n){var r=[e[0]-t[0],e[1]-t[1]],i=Math.sqrt(r[0]*r[0]+r[1]*r[1]),a=(i-n)/i;return a<0&&(a=1e-5),[t[0]+a*r[0],t[1]+a*r[1]]},zt=function(e,t){var n=Yt(e,t);return n=Gt(n)},Gt=function(e){for(var t,n,r=e.length/2,i=1/0,a=1/0,o=-1/0,s=-1/0,l=0;l<r;l++)t=e[2*l],n=e[2*l+1],i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);for(var u=2/(o-i),c=2/(s-a),h=0;h<r;h++)t=e[2*h]=e[2*h]*u,n=e[2*h+1]=e[2*h+1]*c,i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);if(a<-1)for(var d=0;d<r;d++)n=e[2*d+1]=e[2*d+1]+(-1-a);return e},Yt=function(e,t){var n=1/e*2*Math.PI,r=e%2==0?Math.PI/2+n/2:Math.PI/2;r+=t;for(var i,a=new Array(2*e),o=0;o<e;o++)i=o*n+r,a[2*o]=Math.cos(i),a[2*o+1]=Math.sin(-i);return a},Xt=function(e,t){return Math.min(e/4,t/4,8)},Vt=function(e,t){return Math.min(e/10,t/10,8)},Ut=function(e,t){return{heightOffset:Math.min(15,.05*t),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}},jt=Me({dampingFactor:.8,precision:1e-6,iterations:200,weight:function(e){return 1}}),qt={pageRank:function(e){for(var t=jt(e),n=t.dampingFactor,r=t.precision,i=t.iterations,a=t.weight,o=this._private.cy,s=this.byGroup(),l=s.nodes,u=s.edges,c=l.length,h=c*c,d=u.length,p=new Array(h),g=new Array(c),f=(1-n)/c,v=0;v<c;v++){for(var y=0;y<c;y++){p[v*c+y]=0}g[v]=0}for(var m=0;m<d;m++){var b=u[m],x=b.data("source"),w=b.data("target");if(x!==w){var E=l.indexOfId(x),_=l.indexOfId(w),T=a(b);p[_*c+E]+=T,g[E]+=T}}for(var D=1/c+f,C=0;C<c;C++)if(0===g[C])for(var N=0;N<c;N++){p[N*c+C]=D}else for(var A=0;A<c;A++){var L=A*c+C;p[L]=p[L]/g[C]+f}for(var k,S=new Array(c),I=new Array(c),M=0;M<c;M++)S[M]=1;for(var O=0;O<i;O++){for(var P=0;P<c;P++)I[P]=0;for(var R=0;R<c;R++)for(var B=0;B<c;B++){var F=R*c+B;I[R]+=p[F]*S[B]}ht(I),k=S,S=I,I=k;for(var z=0,G=0;G<c;G++){var Y=k[G]-S[G];z+=Y*Y}if(z<r)break}return{rank:function(e){return e=o.collection(e)[0],S[l.indexOf(e)]}}}},Ht=Me({root:null,weight:function(e){return 1},directed:!1,alpha:0}),Wt={degreeCentralityNormalized:function(e){e=Ht(e);var t=this.cy(),n=this.nodes(),r=n.length;if(e.directed){for(var i={},a={},o=0,s=0,l=0;l<r;l++){var u=n[l],c=u.id();e.root=u;var h=this.degreeCentrality(e);o<h.indegree&&(o=h.indegree),s<h.outdegree&&(s=h.outdegree),i[c]=h.indegree,a[c]=h.outdegree}return{indegree:function(e){return 0==o?0:(A(e)&&(e=t.filter(e)),i[e.id()]/o)},outdegree:function(e){return 0===s?0:(A(e)&&(e=t.filter(e)),a[e.id()]/s)}}}for(var d={},p=0,g=0;g<r;g++){var f=n[g];e.root=f;var v=this.degreeCentrality(e);p<v.degree&&(p=v.degree),d[f.id()]=v.degree}return{degree:function(e){return 0===p?0:(A(e)&&(e=t.filter(e)),d[e.id()]/p)}}},degreeCentrality:function(e){e=Ht(e);var t=this.cy(),n=this,r=e,i=r.root,a=r.weight,o=r.directed,s=r.alpha;if(i=t.collection(i)[0],o){for(var l=i.connectedEdges(),u=l.filter((function(e){return e.target().same(i)&&n.has(e)})),c=l.filter((function(e){return e.source().same(i)&&n.has(e)})),h=u.length,d=c.length,p=0,g=0,f=0;f<u.length;f++)p+=a(u[f]);for(var v=0;v<c.length;v++)g+=a(c[v]);return{indegree:Math.pow(h,1-s)*Math.pow(p,s),outdegree:Math.pow(d,1-s)*Math.pow(g,s)}}for(var y=i.connectedEdges().intersection(n),m=y.length,b=0,x=0;x<y.length;x++)b+=a(y[x]);return{degree:Math.pow(m,1-s)*Math.pow(b,s)}}};Wt.dc=Wt.degreeCentrality,Wt.dcn=Wt.degreeCentralityNormalised=Wt.degreeCentralityNormalized;var $t=Me({harmonic:!0,weight:function(){return 1},directed:!1,root:null}),Kt={closenessCentralityNormalized:function(e){for(var t=$t(e),n=t.harmonic,r=t.weight,i=t.directed,a=this.cy(),o={},s=0,l=this.nodes(),u=this.floydWarshall({weight:r,directed:i}),c=0;c<l.length;c++){for(var h=0,d=l[c],p=0;p<l.length;p++)if(c!==p){var g=u.distance(d,l[p]);h+=n?1/g:g}n||(h=1/h),s<h&&(s=h),o[d.id()]=h}return{closeness:function(e){return 0==s?0:(e=A(e)?a.filter(e)[0].id():e.id(),o[e]/s)}}},closenessCentrality:function(e){var t=$t(e),n=t.root,r=t.weight,i=t.directed,a=t.harmonic;n=this.filter(n)[0];for(var o=this.dijkstra({root:n,weight:r,directed:i}),s=0,l=this.nodes(),u=0;u<l.length;u++){var c=l[u];if(!c.same(n)){var h=o.distanceTo(c);s+=a?1/h:h}}return a?s:1/s}};Kt.cc=Kt.closenessCentrality,Kt.ccn=Kt.closenessCentralityNormalised=Kt.closenessCentralityNormalized;var Zt=Me({weight:null,directed:!1}),Qt={betweennessCentrality:function(e){for(var t=Zt(e),n=t.directed,r=t.weight,i=null!=r,a=this.cy(),o=this.nodes(),s={},l={},u=0,h=function(e,t){l[e]=t,t>u&&(u=t)},d=function(e){return l[e]},p=0;p<o.length;p++){var g=o[p],f=g.id();s[f]=n?g.outgoers().nodes():g.openNeighborhood().nodes(),h(f,0)}for(var v=function(e){for(var t=o[e].id(),n=[],l={},u={},p={},g=new c.default((function(e,t){return p[e]-p[t]})),f=0;f<o.length;f++){var v=o[f].id();l[v]=[],u[v]=0,p[v]=1/0}for(u[t]=1,p[t]=0,g.push(t);!g.empty();){var y=g.pop();if(n.push(y),i)for(var m=0;m<s[y].length;m++){var b=s[y][m],x=a.getElementById(y),w=void 0;w=x.edgesTo(b).length>0?x.edgesTo(b)[0]:b.edgesTo(x)[0];var E=r(w);b=b.id(),p[b]>p[y]+E&&(p[b]=p[y]+E,g.nodes.indexOf(b)<0?g.push(b):g.updateItem(b),u[b]=0,l[b]=[]),p[b]==p[y]+E&&(u[b]=u[b]+u[y],l[b].push(y))}else for(var _=0;_<s[y].length;_++){var T=s[y][_].id();p[T]==1/0&&(g.push(T),p[T]=p[y]+1),p[T]==p[y]+1&&(u[T]=u[T]+u[y],l[T].push(y))}}for(var D={},C=0;C<o.length;C++)D[o[C].id()]=0;for(;n.length>0;){for(var N=n.pop(),A=0;A<l[N].length;A++){var L=l[N][A];D[L]=D[L]+u[L]/u[N]*(1+D[N])}N!=o[e].id()&&h(N,d(N)+D[N])}},y=0;y<o.length;y++)v(y);var m={betweenness:function(e){var t=a.collection(e).id();return d(t)},betweennessNormalized:function(e){if(0==u)return 0;var t=a.collection(e).id();return d(t)/u}};return m.betweennessNormalised=m.betweennessNormalized,m}};Qt.bc=Qt.betweennessCentrality;var Jt=Me({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(e){return 1}]}),en=function(e,t){for(var n=0,r=0;r<t.length;r++)n+=t[r](e);return n},tn=function(e,t){for(var n,r=0;r<t;r++){n=0;for(var i=0;i<t;i++)n+=e[i*t+r];for(var a=0;a<t;a++)e[a*t+r]=e[a*t+r]/n}},nn=function(e,t,n){for(var r=new Array(n*n),i=0;i<n;i++){for(var a=0;a<n;a++)r[i*n+a]=0;for(var o=0;o<n;o++)for(var s=0;s<n;s++)r[i*n+s]+=e[i*n+o]*t[o*n+s]}return r},rn=function(e,t,n){for(var r=e.slice(0),i=1;i<n;i++)e=nn(e,r,t);return e},an=function(e,t,n){for(var r=new Array(t*t),i=0;i<t*t;i++)r[i]=Math.pow(e[i],n);return tn(r,t),r},on=function(e,t,n,r){for(var i=0;i<n;i++){if(Math.round(e[i]*Math.pow(10,r))/Math.pow(10,r)!==Math.round(t[i]*Math.pow(10,r))/Math.pow(10,r))return!1}return!0},sn=function(e,t){for(var n=0;n<e.length;n++)if(!t[n]||e[n].id()!==t[n].id())return!1;return!0},ln=function(e){for(var t=this.nodes(),n=this.edges(),r=this.cy(),i=function(e){return Jt(e)}(e),a={},o=0;o<t.length;o++)a[t[o].id()]=o;for(var s,l=t.length,u=l*l,c=new Array(u),h=0;h<u;h++)c[h]=0;for(var d=0;d<n.length;d++){var p=n[d],g=a[p.source().id()],f=a[p.target().id()],v=en(p,i.attributes);c[g*l+f]+=v,c[f*l+g]+=v}!function(e,t,n){for(var r=0;r<t;r++)e[r*t+r]=n}(c,l,i.multFactor),tn(c,l);for(var y=!0,m=0;y&&m<i.maxIterations;)y=!1,s=rn(c,l,i.expandFactor),c=an(s,l,i.inflateFactor),on(c,s,u,4)||(y=!0),m++;var b=function(e,t,n,r){for(var i=[],a=0;a<t;a++){for(var o=[],s=0;s<t;s++)Math.round(1e3*e[a*t+s])/1e3>0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i}(c,l,t,r);return b=function(e){for(var t=0;t<e.length;t++)for(var n=0;n<e.length;n++)t!=n&&sn(e[t],e[n])&&e.splice(n,1);return e}(b),b},un={markovClustering:ln,mcl:ln},cn=function(e){return e},hn=function(e,t){return Math.abs(t-e)},dn=function(e,t,n){return e+hn(t,n)},pn=function(e,t,n){return e+Math.pow(n-t,2)},gn=function(e){return Math.sqrt(e)},fn=function(e,t,n){return Math.max(e,hn(t,n))},vn=function(e,t,n,r,i){for(var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:cn,o=r,s=0;s<e;s++)o=i(o,t(s),n(s));return a(o)},yn={euclidean:function(e,t,n){return e>=2?vn(e,t,n,0,pn,gn):vn(e,t,n,0,dn)},squaredEuclidean:function(e,t,n){return vn(e,t,n,0,pn)},manhattan:function(e,t,n){return vn(e,t,n,0,dn)},max:function(e,t,n){return vn(e,t,n,-1/0,fn)}};function mn(e,t,n,r,i,a){var o;return o=L(e)?e:yn[e]||yn.euclidean,0===t&&L(e)?o(i,a):o(t,n,r,i,a)}yn["squared-euclidean"]=yn.squaredEuclidean,yn.squaredeuclidean=yn.squaredEuclidean;var bn=Me({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),xn=function(e){return bn(e)},wn=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=n,s=t;return mn(e,r.length,a,(function(e){return r[e](t)}),o,s)},En=function(e,t,n){for(var r=n.length,i=new Array(r),a=new Array(r),o=new Array(t),s=null,l=0;l<r;l++)i[l]=e.min(n[l]).value,a[l]=e.max(n[l]).value;for(var u=0;u<t;u++){s=[];for(var c=0;c<r;c++)s[c]=Math.random()*(a[c]-i[c])+i[c];o[u]=s}return o},_n=function(e,t,n,r,i){for(var a=1/0,o=0,s=0;s<t.length;s++){var l=wn(n,e,t[s],r,i);l<a&&(a=l,o=s)}return o},Tn=function(e,t,n){for(var r=[],i=null,a=0;a<t.length;a++)n[(i=t[a]).id()]===e&&r.push(i);return r},Dn=function(e,t,n){for(var r=0;r<e.length;r++)for(var i=0;i<e[r].length;i++){if(Math.abs(e[r][i]-t[r][i])>n)return!1}return!0},Cn=function(e,t,n){for(var r=0;r<n;r++)if(e===t[r])return!0;return!1},Nn=function(e,t){var n=new Array(t);if(e.length<50)for(var r=0;r<t;r++){for(var i=e[Math.floor(Math.random()*e.length)];Cn(i,n,r);)i=e[Math.floor(Math.random()*e.length)];n[r]=i}else for(var a=0;a<t;a++)n[a]=e[Math.floor(Math.random()*e.length)];return n},An=function(e,t,n){for(var r=0,i=0;i<t.length;i++)r+=wn("manhattan",t[i],e,n,"kMedoids");return r},Ln=function(e,t,n,r,i){for(var a,o,s=0;s<t.length;s++)for(var l=0;l<e.length;l++)r[s][l]=Math.pow(n[s][l],i.m);for(var u=0;u<e.length;u++)for(var c=0;c<i.attributes.length;c++){a=0,o=0;for(var h=0;h<t.length;h++)a+=r[h][u]*i.attributes[c](t[h]),o+=r[h][u];e[u][c]=a/o}},kn=function(e,t,n,r,i){for(var a=0;a<e.length;a++)t[a]=e[a].slice();for(var o,s,l,u=2/(i.m-1),c=0;c<n.length;c++)for(var h=0;h<r.length;h++){o=0;for(var d=0;d<n.length;d++)s=wn(i.distance,r[h],n[c],i.attributes,"cmeans"),l=wn(i.distance,r[h],n[d],i.attributes,"cmeans"),o+=Math.pow(s/l,u);e[h][c]=1/o}},Sn=function(e){var t,n,r,i,a,o=this.cy(),s=this.nodes(),l=xn(e);i=new Array(s.length);for(var u=0;u<s.length;u++)i[u]=new Array(l.k);r=new Array(s.length);for(var c=0;c<s.length;c++)r[c]=new Array(l.k);for(var h=0;h<s.length;h++){for(var d=0,p=0;p<l.k;p++)r[h][p]=Math.random(),d+=r[h][p];for(var g=0;g<l.k;g++)r[h][g]=r[h][g]/d}n=new Array(l.k);for(var f=0;f<l.k;f++)n[f]=new Array(l.attributes.length);a=new Array(s.length);for(var v=0;v<s.length;v++)a[v]=new Array(l.k);for(var y=!0,m=0;y&&m<l.maxIterations;)y=!1,Ln(n,s,r,a,l),kn(r,i,n,s,l),Dn(r,i,l.sensitivityThreshold)||(y=!0),m++;return t=function(e,t,n,r){for(var i,a,o=new Array(n.k),s=0;s<o.length;s++)o[s]=[];for(var l=0;l<t.length;l++){i=-1/0,a=-1;for(var u=0;u<t[0].length;u++)t[l][u]>i&&(i=t[l][u],a=u);o[a].push(e[l])}for(var c=0;c<o.length;c++)o[c]=r.collection(o[c]);return o}(s,r,l,o),{clusters:t,degreeOfMembership:r}},In={kMeans:function(e){var t,n=this.cy(),r=this.nodes(),i=null,a=xn(e),o=new Array(a.k),s={};a.testMode?"number"==typeof a.testCentroids?(a.testCentroids,t=En(r,a.k,a.attributes)):t="object"===g(a.testCentroids)?a.testCentroids:En(r,a.k,a.attributes):t=En(r,a.k,a.attributes);for(var l,u,c,h=!0,d=0;h&&d<a.maxIterations;){for(var p=0;p<r.length;p++)s[(i=r[p]).id()]=_n(i,t,a.distance,a.attributes,"kMeans");h=!1;for(var f=0;f<a.k;f++){var v=Tn(f,r,s);if(0!==v.length){for(var y=a.attributes.length,m=t[f],b=new Array(y),x=new Array(y),w=0;w<y;w++){x[w]=0;for(var E=0;E<v.length;E++)i=v[E],x[w]+=a.attributes[w](i);b[w]=x[w]/v.length,l=b[w],u=m[w],c=a.sensitivityThreshold,Math.abs(u-l)<=c||(h=!0)}t[f]=b,o[f]=n.collection(v)}}d++}return o},kMedoids:function(e){var t,n,r=this.cy(),i=this.nodes(),a=null,o=xn(e),s=new Array(o.k),l={},u=new Array(o.k);o.testMode?"number"==typeof o.testCentroids||(t="object"===g(o.testCentroids)?o.testCentroids:Nn(i,o.k)):t=Nn(i,o.k);for(var c=!0,h=0;c&&h<o.maxIterations;){for(var d=0;d<i.length;d++)l[(a=i[d]).id()]=_n(a,t,o.distance,o.attributes,"kMedoids");c=!1;for(var p=0;p<t.length;p++){var f=Tn(p,i,l);if(0!==f.length){u[p]=An(t[p],f,o.attributes);for(var v=0;v<f.length;v++)(n=An(f[v],f,o.attributes))<u[p]&&(u[p]=n,t[p]=f[v],c=!0);s[p]=r.collection(f)}}h++}return s},fuzzyCMeans:Sn,fcm:Sn},Mn=Me({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),On={single:"min",complete:"max"},Pn=function(e,t,n,r,i){for(var a,o=0,s=1/0,l=i.attributes,u=function(e,t){return mn(i.distance,l.length,(function(t){return l[t](e)}),(function(e){return l[e](t)}),e,t)},c=0;c<e.length;c++){var h=e[c].key,d=n[h][r[h]];d<s&&(o=h,s=d)}if("threshold"===i.mode&&s>=i.threshold||"dendrogram"===i.mode&&1===e.length)return!1;var p,g=t[o],f=t[r[o]];p="dendrogram"===i.mode?{left:g,right:f,key:g.key}:{value:g.value.concat(f.value),key:g.key},e[g.index]=p,e.splice(f.index,1),t[g.key]=p;for(var v=0;v<e.length;v++){var y=e[v];g.key===y.key?a=1/0:"min"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]>n[f.key][y.key]&&(a=n[f.key][y.key])):"max"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]<n[f.key][y.key]&&(a=n[f.key][y.key])):a="mean"===i.linkage?(n[g.key][y.key]*g.size+n[f.key][y.key]*f.size)/(g.size+f.size):"dendrogram"===i.mode?u(y.value,g.value):u(y.value[0],g.value[0]),n[g.key][y.key]=n[y.key][g.key]=a}for(var m=0;m<e.length;m++){var b=e[m].key;if(r[b]===g.key||r[b]===f.key){for(var x=b,w=0;w<e.length;w++){var E=e[w].key;n[b][E]<n[b][x]&&(x=E)}r[b]=x}e[m].index=m}return g.key=f.key=g.index=f.index=null,!0},Rn=function e(t,n,r){t&&(t.value?n.push(t.value):(t.left&&e(t.left,n),t.right&&e(t.right,n)))},Bn=function e(t,n){if(!t)return"";if(t.left&&t.right){var r=e(t.left,n),i=e(t.right,n),a=n.add({group:"nodes",data:{id:r+","+i}});return n.add({group:"edges",data:{source:r,target:a.id()}}),n.add({group:"edges",data:{source:i,target:a.id()}}),a.id()}return t.value?t.value.id():void 0},Fn=function e(t,n,r){if(!t)return[];var i=[],a=[],o=[];return 0===n?(t.left&&Rn(t.left,i),t.right&&Rn(t.right,a),o=i.concat(a),[r.collection(o)]):1===n?t.value?[r.collection(t.value)]:(t.left&&Rn(t.left,i),t.right&&Rn(t.right,a),[r.collection(i),r.collection(a)]):t.value?[r.collection(t.value)]:(t.left&&(i=e(t.left,n-1,r)),t.right&&(a=e(t.right,n-1,r)),i.concat(a))},zn=function(e){for(var t=this.cy(),n=this.nodes(),r=function(e){var t=Mn(e),n=On[t.linkage];return null!=n&&(t.linkage=n),t}(e),i=r.attributes,a=function(e,t){return mn(r.distance,i.length,(function(t){return i[t](e)}),(function(e){return i[e](t)}),e,t)},o=[],s=[],l=[],u=[],c=0;c<n.length;c++){var h={value:"dendrogram"===r.mode?n[c]:[n[c]],key:c,index:c};o[c]=h,u[c]=h,s[c]=[],l[c]=0}for(var d=0;d<o.length;d++)for(var p=0;p<=d;p++){var g=void 0;g="dendrogram"===r.mode?d===p?1/0:a(o[d].value,o[p].value):d===p?1/0:a(o[d].value[0],o[p].value[0]),s[d][p]=g,s[p][d]=g,g<s[d][l[d]]&&(l[d]=p)}for(var f,v=Pn(o,u,s,l,r);v;)v=Pn(o,u,s,l,r);return"dendrogram"===r.mode?(f=Fn(o[0],r.dendrogramDepth,t),r.addDendrogram&&Bn(o[0],t)):(f=new Array(o.length),o.forEach((function(e,n){e.key=e.index=null,f[n]=t.collection(e.value)}))),f},Gn={hierarchicalClustering:zn,hca:zn},Yn=Me({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),Xn=function(e,t,n,r){var i=function(e,t){return r[t](e)};return-mn(e,r.length,(function(e){return i(t,e)}),(function(e){return i(n,e)}),t,n)},Vn=function(e,t){var n=null;return n="median"===t?function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(n<e.length&&e.splice(n,e.length-n),t>0&&e.splice(0,t)):e=e.slice(t,n);for(var a=0,o=e.length-1;o>=0;o--){var s=e[o];i?isFinite(s)||(e[o]=-1/0,a++):e.splice(o,1)}r&&e.sort((function(e,t){return e-t}));var l=e.length,u=Math.floor(l/2);return l%2!=0?e[u+1+a]:(e[u-1+a]+e[u+a])/2}(e):"mean"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,i=0,a=t;a<n;a++){var o=e[a];isFinite(o)&&(r+=o,i++)}return r/i}(e):"min"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.min(a,r))}return r}(e):"max"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.max(a,r))}return r}(e):t,n},Un=function(e,t,n){for(var r=[],i=0;i<e;i++){for(var a=-1,o=-1/0,s=0;s<n.length;s++){var l=n[s];t[i*e+l]>o&&(a=l,o=t[i*e+l])}a>0&&r.push(a)}for(var u=0;u<n.length;u++)r[n[u]]=n[u];return r},jn=function(e){for(var t,n,r,i,a,o,s=this.cy(),l=this.nodes(),u=function(e){var t=e.damping,n=e.preference;.5<=t&&t<1||Ce("Damping must range on [0.5, 1). Got: ".concat(t));var r=["median","mean","min","max"];return r.some((function(e){return e===n}))||I(n)||Ce("Preference must be one of [".concat(r.map((function(e){return"'".concat(e,"'")})).join(", "),"] or a number. Got: ").concat(n)),Yn(e)}(e),c={},h=0;h<l.length;h++)c[l[h].id()]=h;n=(t=l.length)*t,r=new Array(n);for(var d=0;d<n;d++)r[d]=-1/0;for(var p=0;p<t;p++)for(var g=0;g<t;g++)p!==g&&(r[p*t+g]=Xn(u.distance,l[p],l[g],u.attributes));i=Vn(r,u.preference);for(var f=0;f<t;f++)r[f*t+f]=i;a=new Array(n);for(var v=0;v<n;v++)a[v]=0;o=new Array(n);for(var y=0;y<n;y++)o[y]=0;for(var m=new Array(t),b=new Array(t),x=new Array(t),w=0;w<t;w++)m[w]=0,b[w]=0,x[w]=0;for(var E,_=new Array(t*u.minIterations),T=0;T<_.length;T++)_[T]=0;for(E=0;E<u.maxIterations;E++){for(var D=0;D<t;D++){for(var C=-1/0,N=-1/0,A=-1,L=0,k=0;k<t;k++)m[k]=a[D*t+k],(L=o[D*t+k]+r[D*t+k])>=C?(N=C,C=L,A=k):L>N&&(N=L);for(var S=0;S<t;S++)a[D*t+S]=(1-u.damping)*(r[D*t+S]-C)+u.damping*m[S];a[D*t+A]=(1-u.damping)*(r[D*t+A]-N)+u.damping*m[A]}for(var M=0;M<t;M++){for(var O=0,P=0;P<t;P++)m[P]=o[P*t+M],b[P]=Math.max(0,a[P*t+M]),O+=b[P];O-=b[M],b[M]=a[M*t+M],O+=b[M];for(var R=0;R<t;R++)o[R*t+M]=(1-u.damping)*Math.min(0,O-b[R])+u.damping*m[R];o[M*t+M]=(1-u.damping)*(O-b[M])+u.damping*m[M]}for(var B=0,F=0;F<t;F++){var z=o[F*t+F]+a[F*t+F]>0?1:0;_[E%u.minIterations*t+F]=z,B+=z}if(B>0&&(E>=u.minIterations-1||E==u.maxIterations-1)){for(var G=0,Y=0;Y<t;Y++){x[Y]=0;for(var X=0;X<u.minIterations;X++)x[Y]+=_[X*t+Y];0!==x[Y]&&x[Y]!==u.minIterations||G++}if(G===t)break}}for(var V=function(e,t,n){for(var r=[],i=0;i<e;i++)t[i*e+i]+n[i*e+i]>0&&r.push(i);return r}(t,a,o),U=function(e,t,n){for(var r=Un(e,t,n),i=0;i<n.length;i++){for(var a=[],o=0;o<r.length;o++)r[o]===n[i]&&a.push(o);for(var s=-1,l=-1/0,u=0;u<a.length;u++){for(var c=0,h=0;h<a.length;h++)c+=t[a[h]*e+a[u]];c>l&&(s=u,l=c)}n[i]=a[s]}return Un(e,t,n)}(t,r,V),j={},q=0;q<V.length;q++)j[V[q]]=[];for(var H=0;H<l.length;H++){var W=U[c[l[H].id()]];null!=W&&j[W].push(l[H])}for(var $=new Array(V.length),K=0;K<V.length;K++)$[K]=s.collection(j[V[K]]);return $},qn={affinityPropagation:jn,ap:jn},Hn=Me({root:void 0,directed:!1}),Wn=function(){var e=this,t={},n=0,r=0,i=[],a=[],o={},s=function s(l,u,c){l===c&&(r+=1),t[u]={id:n,low:n++,cutVertex:!1};var h,d,p,g,f=e.getElementById(u).connectedEdges().intersection(e);0===f.size()?i.push(e.spawn(e.getElementById(u))):f.forEach((function(n){h=n.source().id(),d=n.target().id(),(p=h===u?d:h)!==c&&(g=n.id(),o[g]||(o[g]=!0,a.push({x:u,y:p,edge:n})),p in t?t[u].low=Math.min(t[u].low,t[p].id):(s(l,p,u),t[u].low=Math.min(t[u].low,t[p].low),t[u].id<=t[p].low&&(t[u].cutVertex=!0,function(n,r){for(var o=a.length-1,s=[],l=e.spawn();a[o].x!=n||a[o].y!=r;)s.push(a.pop().edge),o--;s.push(a.pop().edge),s.forEach((function(n){var r=n.connectedNodes().intersection(e);l.merge(n),r.forEach((function(n){var r=n.id(),i=n.connectedEdges().intersection(e);l.merge(n),t[r].cutVertex?l.merge(i.filter((function(e){return e.isLoop()}))):l.merge(i)}))})),i.push(l)}(u,p))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,s(n,n),t[n].cutVertex=r>1)}}));var l=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(l),components:i}},$n=function(){var e=this,t={},n=0,r=[],i=[],a=e.spawn(e),o=function o(s){if(i.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach((function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))})),t[s].index===t[s].low){for(var l=e.spawn();;){var u=i.pop();if(l.merge(e.getElementById(u)),t[u].low=t[s].index,t[u].explored=!0,u===s)break}var c=l.edgesWith(l),h=l.merge(c);r.push(h),a=a.difference(h)}};return e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||o(n)}})),{cut:a,components:r}},Kn={};[Ve,je,qe,We,Ke,Qe,nt,qt,Wt,Kt,Qt,un,In,Gn,qn,{hierholzer:function(e){if(!S(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,i,a=Hn(e),o=a.root,s=a.directed,l=this,u=!1;o&&(i=A(o)?this.filter(o)[0].id():o[0].id());var c={},h={};s?l.forEach((function(e){var t=e.id();if(e.isNode()){var i=e.indegree(!0),a=e.outdegree(!0),o=i-a,s=a-i;1==o?n?u=!0:n=t:1==s?r?u=!0:r=t:(s>1||o>1)&&(u=!0),c[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&c[t].push(e.id())}))}else h[t]=[void 0,e.target().id()]})):l.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?u=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach((function(e){return c[t].push(e.id())}))):h[t]=[e.source().id(),e.target().id()]}));var d={found:!1,trail:void 0};if(u)return d;if(r&&n)if(s){if(i&&r!=i)return d;i=r}else{if(i&&r!=i&&n!=i)return d;i||(i=r)}else i||(i=l[0].id());var p=function(e){for(var t,n,r,i=e,a=[e];c[i].length;)t=c[i].shift(),n=h[t][0],i!=(r=h[t][1])?(c[r]=c[r].filter((function(e){return e!=t})),i=r):s||i==n||(c[n]=c[n].filter((function(e){return e!=t})),i=n),a.unshift(t),a.unshift(i);return a},g=[],f=[];for(f=p(i);1!=f.length;)0==c[f[0]].length?(g.unshift(l.getElementById(f.shift())),g.unshift(l.getElementById(f.shift()))):f=p(f.shift()).concat(f);for(var v in g.unshift(l.getElementById(f.shift())),c)if(c[v].length)return d;return d.found=!0,d.trail=this.spawn(g,!0),d}},{hopcroftTarjanBiconnected:Wn,htbc:Wn,htb:Wn,hopcroftTarjanBiconnectedComponents:Wn},{tarjanStronglyConnected:$n,tsc:$n,tscc:$n,tarjanStronglyConnectedComponents:$n}].forEach((function(e){Q(Kn,e)}));var Zn=function e(t){if(!(this instanceof e))return new e(t);this.id="Thenable/1.0.7",this.state=0,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof t&&t.call(this,this.fulfill.bind(this),this.reject.bind(this))};Zn.prototype={fulfill:function(e){return Qn(this,1,"fulfillValue",e)},reject:function(e){return Qn(this,2,"rejectReason",e)},then:function(e,t){var n=this,r=new Zn;return n.onFulfilled.push(tr(e,r,"fulfill")),n.onRejected.push(tr(t,r,"reject")),Jn(n),r.proxy}};var Qn=function(e,t,n,r){return 0===e.state&&(e.state=t,e[n]=r,Jn(e)),e},Jn=function(e){1===e.state?er(e,"onFulfilled",e.fulfillValue):2===e.state&&er(e,"onRejected",e.rejectReason)},er=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var i=function(){for(var e=0;e<r.length;e++)r[e](n)};"function"==typeof setImmediate?setImmediate(i):setTimeout(i,0)}},tr=function(e,t,n){return function(r){if("function"!=typeof e)t[n].call(t,r);else{var i;try{i=e(r)}catch(a){return void t.reject(a)}nr(t,i)}}},nr=function e(t,n){if(t!==n&&t.proxy!==n){var r;if("object"===g(n)&&null!==n||"function"==typeof n)try{r=n.then}catch(a){return void t.reject(a)}if("function"!=typeof r)t.fulfill(n);else{var i=!1;try{r.call(n,(function(r){i||(i=!0,r===n?t.reject(new TypeError("circular thenable chain")):e(t,r))}),(function(e){i||(i=!0,t.reject(e))}))}catch(a){i||t.reject(a)}}}else t.reject(new TypeError("cannot resolve promise with itself"))};Zn.all=function(e){return new Zn((function(t,n){for(var r=new Array(e.length),i=0,a=function(n,a){r[n]=a,++i===e.length&&t(r)},o=0;o<e.length;o++)!function(t){var r=e[t];null!=r&&null!=r.then?r.then((function(e){a(t,e)}),(function(e){n(e)})):a(t,r)}(o)}))},Zn.resolve=function(e){return new Zn((function(t,n){t(e)}))},Zn.reject=function(e){return new Zn((function(t,n){n(e)}))};var rr="undefined"!=typeof Promise?Promise:Zn,ir=function(e,t,n){var r=B(e),i=!r,a=this._private=Q({duration:1e3},t,n);if(a.target=e,a.style=a.style||a.css,a.started=!1,a.playing=!1,a.hooked=!1,a.applying=!1,a.progress=0,a.completes=[],a.frames=[],a.complete&&L(a.complete)&&a.completes.push(a.complete),i){var o=e.position();a.startPosition=a.startPosition||{x:o.x,y:o.y},a.startStyle=a.startStyle||e.cy().style().getAnimationStartStyle(e,a.style)}if(r){var s=e.pan();a.startPan={x:s.x,y:s.y},a.startZoom=e.zoom()}this.length=1,this[0]=this},ar=ir.prototype;Q(ar,{instanceString:function(){return"animation"},hook:function(){var e=this._private;if(!e.hooked){var t=e.target._private.animation;(e.queue?t.queue:t.current).push(this),O(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},play:function(){var e=this._private;return 1===e.progress&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var e=this._private;return e.playing=!1,e.started=!1,this},stop:function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(e){var t=this._private;return void 0===e?t.progress*t.duration:this.progress(e/t.duration)},progress:function(e){var t=this._private,n=t.playing;return void 0===e?t.progress:(n&&this.pause(),t.progress=e,t.started=!1,n&&this.play(),this)},completed:function(){return 1===this._private.progress},reverse:function(){var e=this._private,t=e.playing;t&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=function(t,n){var r=e[t];null!=r&&(e[t]=e[n],e[n]=r)};if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var r=0;r<e.style.length;r++){var i=e.style[r],a=i.name,o=e.startStyle[a];e.startStyle[a]=i,e.style[r]=o}return t&&this.play(),this},promise:function(e){var t,n=this._private;if("frame"===e)t=n.frames;else t=n.completes;return new rr((function(e,n){t.push((function(){e()}))}))}}),ar.complete=ar.completed,ar.run=ar.play,ar.running=ar.playing;var or={animated:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return!1;var n=t[0];return n?n._private.animation.current.length>0:void 0}},clearQueue:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return this;for(var n=0;n<t.length;n++){t[n]._private.animation.queue=[]}return this}},delay:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animate({delay:e,duration:e,complete:t}):this}},delayAnimation:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animation({delay:e,duration:e,complete:t}):this}},animation:function(){return function(e,t){var n=this,r=void 0!==n.length,i=r?n:[n],a=this._private.cy||this,o=!r,s=!o;if(!a.styleEnabled())return this;var l=a.style();if(e=Q({},e,t),0===Object.keys(e).length)return new ir(i[0],e);switch(void 0===e.duration&&(e.duration=400),e.duration){case"slow":e.duration=600;break;case"fast":e.duration=200}if(s&&(e.style=l.getPropsList(e.style||e.css),e.css=void 0),s&&null!=e.renderedPosition){var u=e.renderedPosition,c=a.pan(),h=a.zoom();e.position=it(u,h,c)}if(o&&null!=e.panBy){var d=e.panBy,p=a.pan();e.pan={x:p.x+d.x,y:p.y+d.y}}var g=e.center||e.centre;if(o&&null!=g){var f=a.getCenterPan(g.eles,e.zoom);null!=f&&(e.pan=f)}if(o&&null!=e.fit){var v=e.fit,y=a.getFitViewport(v.eles||v.boundingBox,v.padding);null!=y&&(e.pan=y.pan,e.zoom=y.zoom)}if(o&&S(e.zoom)){var m=a.getZoomedViewport(e.zoom);null!=m?(m.zoomed&&(e.zoom=m.zoom),m.panned&&(e.pan=m.pan)):e.zoom=null}return new ir(i[0],e)}},animate:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n];if(!(this._private.cy||this).styleEnabled())return this;t&&(e=Q({},e,t));for(var i=0;i<r.length;i++){var a=r[i],o=a.animated()&&(void 0===e.queue||e.queue);a.animation(e,o?{queue:!0}:void 0).play()}return this}},stop:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n],i=this._private.cy||this;if(!i.styleEnabled())return this;for(var a=0;a<r.length;a++){for(var o=r[a]._private,s=o.animation.current,l=0;l<s.length;l++){var u=s[l]._private;t&&(u.duration=0)}e&&(o.animation.queue=[]),t||(o.animation.current=[])}return i.notify("draw"),this}}},sr={data:function(e){return e=Q({},{field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:function(e){},beforeSet:function(e,t){},onSet:function(e){},canSet:function(e){return!0}},e),function(t,n){var r=e,i=this,a=void 0!==i.length,o=a?i:[i],s=a?i[0]:i;if(A(t)){var l,u=-1!==t.indexOf(".")&&p.default(t);if(r.allowGetting&&void 0===n)return s&&(r.beforeGet(s),l=u&&void 0===s._private[r.field][t]?h.default(s._private[r.field],u):s._private[r.field][t]),l;if(r.allowSetting&&void 0!==n&&!r.immutableKeys[t]){var c=m({},t,n);r.beforeSet(i,c);for(var g=0,f=o.length;g<f;g++){var v=o[g];r.canSet(v)&&(u&&void 0===s._private[r.field][t]?d.default(v._private[r.field],u,n):v._private[r.field][t]=n)}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}}else if(r.allowSetting&&S(t)){var y,b,x=t,w=Object.keys(x);r.beforeSet(i,x);for(var E=0;E<w.length;E++){if(b=x[y=w[E]],!r.immutableKeys[y])for(var _=0;_<o.length;_++){var T=o[_];r.canSet(T)&&(T._private[r.field][y]=b)}}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}else if(r.allowBinding&&L(t)){var D=t;i.on(r.bindingEvent,D)}else if(r.allowGetting&&void 0===t){var C;return s&&(r.beforeGet(s),C=s._private[r.field]),C}return i}},removeData:function(e){return e=Q({},{field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}},e),function(t){var n=e,r=this,i=void 0!==r.length?r:[r];if(A(t)){for(var a=t.split(/\s+/),o=a.length,s=0;s<o;s++){var l=a[s];if(!z(l))if(!n.immutableKeys[l])for(var u=0,c=i.length;u<c;u++)i[u]._private[n.field][l]=void 0}n.triggerEvent&&r[n.triggerFnName](n.event)}else if(void 0===t){for(var h=0,d=i.length;h<d;h++)for(var p=i[h]._private[n.field],g=Object.keys(p),f=0;f<g.length;f++){var v=g[f];!n.immutableKeys[v]&&(p[v]=void 0)}n.triggerEvent&&r[n.triggerFnName](n.event)}return r}}},lr={eventAliasesOn:function(e){var t=e;t.addListener=t.listen=t.bind=t.on,t.unlisten=t.unbind=t.off=t.removeListener,t.trigger=t.emit,t.pon=t.promiseOn=function(e,t){var n=this,r=Array.prototype.slice.call(arguments,0);return new rr((function(e,t){var i=r.concat([function(t){n.off.apply(n,a),e(t)}]),a=i.concat([]);n.on.apply(n,i)}))}}},ur={};[or,sr,lr].forEach((function(e){Q(ur,e)}));var cr={animate:ur.animate(),animation:ur.animation(),animated:ur.animated(),clearQueue:ur.clearQueue(),delay:ur.delay(),delayAnimation:ur.delayAnimation(),stop:ur.stop()},hr={classes:function(e){var t=this;if(void 0===e){var n=[];return t[0]._private.classes.forEach((function(e){return n.push(e)})),n}k(e)||(e=(e||"").match(/\S+/g)||[]);for(var r=[],i=new Ge(e),a=0;a<t.length;a++){for(var o=t[a],s=o._private,l=s.classes,u=!1,c=0;c<e.length;c++){var h=e[c];if(!l.has(h)){u=!0;break}}u||(u=l.size!==e.length),u&&(s.classes=i,r.push(o))}return r.length>0&&this.spawn(r).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){k(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,i=[],a=0,o=n.length;a<o;a++)for(var s=n[a],l=s._private.classes,u=!1,c=0;c<e.length;c++){var h=e[c],d=l.has(h),p=!1;t||r&&!d?(l.add(h),p=!0):(!t||r&&d)&&(l.delete(h),p=!0),!u&&p&&(i.push(s),u=!0)}return i.length>0&&this.spawn(i).updateStyle().emit("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout((function(){n.removeClass(e)}),t),n}};hr.className=hr.classNames=hr.classes;var dr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:q,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};dr.variable="(?:[\\w-.]|(?:\\\\"+dr.metaChar+"))+",dr.className="(?:[\\w-]|(?:\\\\"+dr.metaChar+"))+",dr.value=dr.string+"|"+dr.number,dr.id=dr.variable,function(){var e,t,n;for(e=dr.comparatorOp.split("|"),n=0;n<e.length;n++)t=e[n],dr.comparatorOp+="|@"+t;for(e=dr.comparatorOp.split("|"),n=0;n<e.length;n++)(t=e[n]).indexOf("!")>=0||"="!==t&&(dr.comparatorOp+="|\\!"+t)}();var pr=0,gr=1,fr=2,vr=3,yr=4,mr=5,br=6,xr=7,wr=8,Er=9,_r=10,Tr=11,Dr=12,Cr=13,Nr=14,Ar=15,Lr=16,kr=17,Sr=18,Ir=19,Mr=20,Or=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort((function(e,t){return function(e,t){return-1*Z(e,t)}(e.selector,t.selector)})),Pr=function(){for(var e,t={},n=0;n<Or.length;n++)t[(e=Or[n]).selector]=e.matches;return t}(),Rr="("+Or.map((function(e){return e.selector})).join("|")+")",Br=function(e){return e.replace(new RegExp("\\\\("+dr.metaChar+")","g"),(function(e,t){return t}))},Fr=function(e,t,n){e[e.length-1]=n},zr=[{name:"group",query:!0,regex:"("+dr.group+")",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:pr,value:"*"===r?r:r+"s"})}},{name:"state",query:!0,regex:Rr,populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:xr,value:r})}},{name:"id",query:!0,regex:"\\#("+dr.id+")",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:wr,value:Br(r)})}},{name:"className",query:!0,regex:"\\.("+dr.className+")",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:Er,value:Br(r)})}},{name:"dataExists",query:!0,regex:"\\[\\s*("+dr.variable+")\\s*\\]",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:yr,field:Br(r)})}},{name:"dataCompare",query:!0,regex:"\\[\\s*("+dr.variable+")\\s*("+dr.comparatorOp+")\\s*("+dr.value+")\\s*\\]",populate:function(e,t,n){var r=b(n,3),i=r[0],a=r[1],o=r[2];o=null!=new RegExp("^"+dr.string+"$").exec(o)?o.substring(1,o.length-1):parseFloat(o),t.checks.push({type:vr,field:Br(i),operator:a,value:o})}},{name:"dataBool",query:!0,regex:"\\[\\s*("+dr.boolOp+")\\s*("+dr.variable+")\\s*\\]",populate:function(e,t,n){var r=b(n,2),i=r[0],a=r[1];t.checks.push({type:mr,field:Br(a),operator:i})}},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+dr.meta+")\\s*("+dr.comparatorOp+")\\s*("+dr.number+")\\s*\\]\\]",populate:function(e,t,n){var r=b(n,3),i=r[0],a=r[1],o=r[2];t.checks.push({type:br,field:Br(i),operator:a,value:parseFloat(o)})}},{name:"nextQuery",separator:!0,regex:dr.separator,populate:function(e,t){var n=e.currentSubject,r=e.edgeCount,i=e.compoundCount,a=e[e.length-1];return null!=n&&(a.subject=n,e.currentSubject=null),a.edgeCount=r,a.compoundCount=i,e.edgeCount=0,e.compoundCount=0,e[e.length++]={checks:[]}}},{name:"directedEdge",separator:!0,regex:dr.directedEdge,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r=t,i={checks:[]};return n.checks.push({type:Tr,source:r,target:i}),Fr(e,0,n),e.edgeCount++,i}var a={checks:[]},o=t,s={checks:[]};return a.checks.push({type:Dr,source:o,target:s}),Fr(e,0,a),e.edgeCount++,s}},{name:"undirectedEdge",separator:!0,regex:dr.undirectedEdge,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r=t,i={checks:[]};return n.checks.push({type:_r,nodes:[r,i]}),Fr(e,0,n),e.edgeCount++,i}var a={checks:[]},o=t,s={checks:[]};return a.checks.push({type:Nr,node:o,neighbor:s}),Fr(e,0,a),s}},{name:"child",separator:!0,regex:dr.child,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r={checks:[]},i=e[e.length-1];return n.checks.push({type:Ar,parent:i,child:r}),Fr(e,0,n),e.compoundCount++,r}if(e.currentSubject===t){var a={checks:[]},o=e[e.length-1],s={checks:[]},l={checks:[]},u={checks:[]},c={checks:[]};return a.checks.push({type:Ir,left:o,right:s,subject:l}),l.checks=t.checks,t.checks=[{type:Mr}],c.checks.push({type:Mr}),s.checks.push({type:kr,parent:c,child:u}),Fr(e,0,a),e.currentSubject=l,e.compoundCount++,u}var h={checks:[]},d={checks:[]},p=[{type:kr,parent:h,child:d}];return h.checks=t.checks,t.checks=p,e.compoundCount++,d}},{name:"descendant",separator:!0,regex:dr.descendant,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r={checks:[]},i=e[e.length-1];return n.checks.push({type:Lr,ancestor:i,descendant:r}),Fr(e,0,n),e.compoundCount++,r}if(e.currentSubject===t){var a={checks:[]},o=e[e.length-1],s={checks:[]},l={checks:[]},u={checks:[]},c={checks:[]};return a.checks.push({type:Ir,left:o,right:s,subject:l}),l.checks=t.checks,t.checks=[{type:Mr}],c.checks.push({type:Mr}),s.checks.push({type:Sr,ancestor:c,descendant:u}),Fr(e,0,a),e.currentSubject=l,e.compoundCount++,u}var h={checks:[]},d={checks:[]},p=[{type:Sr,ancestor:h,descendant:d}];return h.checks=t.checks,t.checks=p,e.compoundCount++,d}},{name:"subject",modifier:!0,regex:dr.subject,populate:function(e,t){if(null!=e.currentSubject&&e.currentSubject!==t)return Ae("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=t;var n=e[e.length-1].checks[0],r=null==n?null:n.type;r===Tr?n.type=Cr:r===_r&&(n.type=Nr,n.node=n.nodes[1],n.neighbor=n.nodes[0],n.nodes=null)}}];zr.forEach((function(e){return e.regexObj=new RegExp("^"+e.regex)}));var Gr=function(e){for(var t,n,r,i=0;i<zr.length;i++){var a=zr[i],o=a.name,s=e.match(a.regexObj);if(null!=s){n=s,t=a,r=o;var l=s[0];e=e.substring(l.length);break}}return{expr:t,match:n,name:r,remaining:e}},Yr={parse:function(e){var t=this,n=t.inputText=e,r=t[0]={checks:[]};for(t.length=1,n=function(e){var t=e.match(/^\s+/);if(t){var n=t[0];e=e.substring(n.length)}return e}(n);;){var i=Gr(n);if(null==i.expr)return Ae("The selector `"+e+"`is invalid"),!1;var a=i.match.slice(1),o=i.expr.populate(t,r,a);if(!1===o)return!1;if(null!=o&&(r=o),(n=i.remaining).match(/^\s*$/))break}var s=t[t.length-1];null!=t.currentSubject&&(s.subject=t.currentSubject),s.edgeCount=t.edgeCount,s.compoundCount=t.compoundCount;for(var l=0;l<t.length;l++){var u=t[l];if(u.compoundCount>0&&u.edgeCount>0)return Ae("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return Ae("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&Ae("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var e=function(e){return null==e?"":e},t=function(t){return A(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,a){var o=r.type,s=r.value;switch(o){case pr:var l=e(s);return l.substring(0,l.length-1);case vr:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case mr:var h=r.operator,d=r.field;return"["+e(h)+d+"]";case yr:return"["+r.field+"]";case br:var p=r.operator;return"[["+r.field+n(e(p))+t(s)+"]]";case xr:return s;case wr:return"#"+s;case Er:return"."+s;case kr:case Ar:return i(r.parent,a)+n(">")+i(r.child,a);case Sr:case Lr:return i(r.ancestor,a)+" "+i(r.descendant,a);case Ir:var g=i(r.left,a),f=i(r.subject,a),v=i(r.right,a);return g+(g.length>0?" ":"")+f+v;case Mr:return""}},i=function(e,t){return e.checks.reduce((function(n,i,a){return n+(t===e&&0===a?"$":"")+r(i,t)}),"")},a="",o=0;o<this.length;o++){var s=this[o];a+=i(s,s.subject),this.length>1&&o<this.length-1&&(a+=", ")}return this.toStringCache=a,a}},Xr=function(e,t,n){var r,i,a,o=A(e),s=I(e),l=A(n),u=!1,c=!1,h=!1;switch(t.indexOf("!")>=0&&(t=t.replace("!",""),c=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),u=!0),(o||l||u)&&(i=o||s?""+e:"",a=""+n),u&&(e=i=i.toLowerCase(),n=a=a.toLowerCase()),t){case"*=":r=i.indexOf(a)>=0;break;case"$=":r=i.indexOf(a,i.length-a.length)>=0;break;case"^=":r=0===i.indexOf(a);break;case"=":r=e===n;break;case">":h=!0,r=e>n;break;case">=":h=!0,r=e>=n;break;case"<":h=!0,r=e<n;break;case"<=":h=!0,r=e<=n;break;default:r=!1}return!c||null==e&&h||(r=!r),r},Vr=function(e,t){return e.data(t)},Ur=[],jr=function(e,t){return e.checks.every((function(e){return Ur[e.type](e,t)}))};Ur[pr]=function(e,t){var n=e.value;return"*"===n||n===t.group()},Ur[xr]=function(e,t){return function(e,t){return Pr[e](t)}(e.value,t)},Ur[wr]=function(e,t){var n=e.value;return t.id()===n},Ur[Er]=function(e,t){var n=e.value;return t.hasClass(n)},Ur[br]=function(e,t){var n=e.field,r=e.operator,i=e.value;return Xr(function(e,t){return e[t]()}(t,n),r,i)},Ur[vr]=function(e,t){var n=e.field,r=e.operator,i=e.value;return Xr(Vr(t,n),r,i)},Ur[mr]=function(e,t){var n=e.field,r=e.operator;return function(e,t){switch(t){case"?":return!!e;case"!":return!e;case"^":return void 0===e}}(Vr(t,n),r)},Ur[yr]=function(e,t){var n=e.field;return e.operator,void 0!==Vr(t,n)},Ur[_r]=function(e,t){var n=e.nodes[0],r=e.nodes[1],i=t.source(),a=t.target();return jr(n,i)&&jr(r,a)||jr(r,i)&&jr(n,a)},Ur[Nr]=function(e,t){return jr(e.node,t)&&t.neighborhood().some((function(t){return t.isNode()&&jr(e.neighbor,t)}))},Ur[Tr]=function(e,t){return jr(e.source,t.source())&&jr(e.target,t.target())},Ur[Dr]=function(e,t){return jr(e.source,t)&&t.outgoers().some((function(t){return t.isNode()&&jr(e.target,t)}))},Ur[Cr]=function(e,t){return jr(e.target,t)&&t.incomers().some((function(t){return t.isNode()&&jr(e.source,t)}))},Ur[Ar]=function(e,t){return jr(e.child,t)&&jr(e.parent,t.parent())},Ur[kr]=function(e,t){return jr(e.parent,t)&&t.children().some((function(t){return jr(e.child,t)}))},Ur[Lr]=function(e,t){return jr(e.descendant,t)&&t.ancestors().some((function(t){return jr(e.ancestor,t)}))},Ur[Sr]=function(e,t){return jr(e.ancestor,t)&&t.descendants().some((function(t){return jr(e.descendant,t)}))},Ur[Ir]=function(e,t){return jr(e.subject,t)&&jr(e.left,t)&&jr(e.right,t)},Ur[Mr]=function(){return!0},Ur[gr]=function(e,t){return e.value.has(t)},Ur[fr]=function(e,t){return(0,e.value)(t)};var qr={matches:function(e){for(var t=0;t<this.length;t++){var n=this[t];if(jr(n,e))return!0}return!1},filter:function(e){var t=this;if(1===t.length&&1===t[0].checks.length&&t[0].checks[0].type===wr)return e.getElementById(t[0].checks[0].value).collection();var n=function(e){for(var n=0;n<t.length;n++){var r=t[n];if(jr(r,e))return!0}return!1};return null==t.text()&&(n=function(){return!0}),e.filter(n)}},Hr=function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,null==e||A(e)&&e.match(/^\s*$/)||(O(e)?this.addQuery({checks:[{type:gr,value:e.collection()}]}):L(e)?this.addQuery({checks:[{type:fr,value:e}]}):A(e)?this.parse(e)||(this.invalid=!0):Ce("A selector must be created from a string; found "))},Wr=Hr.prototype;[Yr,qr].forEach((function(e){return Q(Wr,e)})),Wr.text=function(){return this.inputText},Wr.size=function(){return this.length},Wr.eq=function(e){return this[e]},Wr.sameText=function(e){return!this.invalid&&!e.invalid&&this.text()===e.text()},Wr.addQuery=function(e){this[this.length++]=e},Wr.selector=Wr.toString;var $r={allAre:function(e){var t=new Hr(e);return this.every((function(e){return t.matches(e)}))},is:function(e){var t=new Hr(e);return this.some((function(e){return t.matches(e)}))},some:function(e,t){for(var n=0;n<this.length;n++){if(t?e.apply(t,[this[n],n,this]):e(this[n],n,this))return!0}return!1},every:function(e,t){for(var n=0;n<this.length;n++){if(!(t?e.apply(t,[this[n],n,this]):e(this[n],n,this)))return!1}return!0},same:function(e){if(this===e)return!0;e=this.cy().collection(e);var t=this.length;return t===e.length&&(1===t?this[0]===e[0]:this.every((function(t){return e.hasElementWithId(t.id())})))},anySame:function(e){return e=this.cy().collection(e),this.some((function(t){return e.hasElementWithId(t.id())}))},allAreNeighbors:function(e){e=this.cy().collection(e);var t=this.neighborhood();return e.every((function(e){return t.hasElementWithId(e.id())}))},contains:function(e){e=this.cy().collection(e);var t=this;return e.every((function(e){return t.hasElementWithId(e.id())}))}};$r.allAreNeighbours=$r.allAreNeighbors,$r.has=$r.contains,$r.equal=$r.equals=$r.same;var Kr,Zr,Qr=function(e,t){return function(n,r,i,a){var o,s=n,l=this;if(null==s?o="":O(s)&&1===s.length&&(o=s.id()),1===l.length&&o){var u=l[0]._private,c=u.traversalCache=u.traversalCache||{},h=c[t]=c[t]||[],d=fe(o),p=h[d];return p||(h[d]=e.call(l,n,r,i,a))}return e.call(l,n,r,i,a)}},Jr={parent:function(e){var t=[];if(1===this.length){var n=this[0]._private.parent;if(n)return n}for(var r=0;r<this.length;r++){var i=this[r]._private.parent;i&&t.push(i)}return this.spawn(t,!0).filter(e)},parents:function(e){for(var t=[],n=this.parent();n.nonempty();){for(var r=0;r<n.length;r++){var i=n[r];t.push(i)}n=n.parent()}return this.spawn(t,!0).filter(e)},commonAncestors:function(e){for(var t,n=0;n<this.length;n++){var r=this[n].parents();t=(t=t||r).intersect(r)}return t.filter(e)},orphans:function(e){return this.stdFilter((function(e){return e.isOrphan()})).filter(e)},nonorphans:function(e){return this.stdFilter((function(e){return e.isChild()})).filter(e)},children:Qr((function(e){for(var t=[],n=0;n<this.length;n++)for(var r=this[n]._private.children,i=0;i<r.length;i++)t.push(r[i]);return this.spawn(t,!0).filter(e)}),"children"),siblings:function(e){return this.parent().children().not(this).filter(e)},isParent:function(){var e=this[0];if(e)return e.isNode()&&0!==e._private.children.length},isChildless:function(){var e=this[0];if(e)return e.isNode()&&0===e._private.children.length},isChild:function(){var e=this[0];if(e)return e.isNode()&&null!=e._private.parent},isOrphan:function(){var e=this[0];if(e)return e.isNode()&&null==e._private.parent},descendants:function(e){var t=[];return function e(n){for(var r=0;r<n.length;r++){var i=n[r];t.push(i),i.children().nonempty()&&e(i.children())}}(this.children()),this.spawn(t,!0).filter(e)}};function ei(e,t,n,r){for(var i=[],a=new Ge,o=e.cy().hasCompoundNodes(),s=0;s<e.length;s++){var l=e[s];n?i.push(l):o&&r(i,a,l)}for(;i.length>0;){var u=i.shift();t(u),a.add(u.id()),o&&r(i,a,u)}return e}function ti(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i<r.length;i++){var a=r[i];t.has(a.id())||e.push(a)}}function ni(e,t,n){if(n.isChild()){var r=n._private.parent;t.has(r.id())||e.push(r)}}function ri(e,t,n){ni(e,t,n),ti(e,t,n)}Jr.forEachDown=function(e){return ei(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],ti)},Jr.forEachUp=function(e){return ei(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],ni)},Jr.forEachUpAndDown=function(e){return ei(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],ri)},Jr.ancestors=Jr.parents,(Kr=Zr={data:ur.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:ur.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:ur.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ur.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:ur.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:ur.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=Kr.data,Kr.removeAttr=Kr.removeData;var ii,ai,oi=Zr,si={};function li(e){return function(t){var n=this;if(void 0===t&&(t=!0),0!==n.length&&n.isNode()&&!n.removed()){for(var r=0,i=n[0],a=i._private.edges,o=0;o<a.length;o++){var s=a[o];!t&&s.isLoop()||(r+=e(i,s))}return r}}}function ui(e,t){return function(n){for(var r,i=this.nodes(),a=0;a<i.length;a++){var o=i[a][e](n);void 0===o||void 0!==r&&!t(o,r)||(r=o)}return r}}Q(si,{degree:li((function(e,t){return t.source().same(t.target())?2:1})),indegree:li((function(e,t){return t.target().same(e)?1:0})),outdegree:li((function(e,t){return t.source().same(e)?1:0}))}),Q(si,{minDegree:ui("degree",(function(e,t){return e<t})),maxDegree:ui("degree",(function(e,t){return e>t})),minIndegree:ui("indegree",(function(e,t){return e<t})),maxIndegree:ui("indegree",(function(e,t){return e>t})),minOutdegree:ui("outdegree",(function(e,t){return e<t})),maxOutdegree:ui("outdegree",(function(e,t){return e>t}))}),Q(si,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r<n.length;r++)t+=n[r].degree(e);return t}});var ci=function(e,t,n){for(var r=0;r<e.length;r++){var i=e[r];if(!i.locked()){var a=i._private.position,o={x:null!=t.x?t.x-a.x:0,y:null!=t.y?t.y-a.y:0};!i.isParent()||0===o.x&&0===o.y||i.children().shift(o,n),i.dirtyBoundingBoxCache()}}},hi={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:function(e){e.updateCompoundBounds()},beforeSet:function(e,t){ci(e,t,!1)},onSet:function(e){e.dirtyCompoundBoundsCache()},canSet:function(e){return!e.locked()}};ii=ai={position:ur.data(hi),silentPosition:ur.data(Q({},hi,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:function(e,t){ci(e,t,!0)},onSet:function(e){e.dirtyCompoundBoundsCache()}})),positions:function(e,t){if(S(e))t?this.silentPosition(e):this.position(e);else if(L(e)){var n=e,r=this.cy();r.startBatch();for(var i=0;i<this.length;i++){var a,o=this[i];(a=n(o,i))&&(t?o.silentPosition(a):o.position(a))}r.endBatch()}return this},silentPositions:function(e){return this.positions(e,!0)},shift:function(e,t,n){var r;if(S(e)?(r={x:I(e.x)?e.x:0,y:I(e.y)?e.y:0},n=t):A(e)&&I(t)&&((r={x:0,y:0})[e]=t),null!=r){var i=this.cy();i.startBatch();for(var a=0;a<this.length;a++){var o=this[a];if(!(i.hasCompoundNodes()&&o.isChild()&&o.ancestors().anySame(this))){var s=o.position(),l={x:s.x+r.x,y:s.y+r.y};n?o.silentPosition(l):o.position(l)}}i.endBatch()}return this},silentShift:function(e,t){return S(e)?this.shift(e,!0):A(e)&&I(t)&&this.shift(e,t,!0),this},renderedPosition:function(e,t){var n=this[0],r=this.cy(),i=r.zoom(),a=r.pan(),o=S(e)?e:void 0,s=void 0!==o||void 0!==t&&A(e);if(n&&n.isNode()){if(!s){var l=n.position();return o=rt(l,i,a),void 0===e?o:o[e]}for(var u=0;u<this.length;u++){var c=this[u];void 0!==t?c.position(e,(t-a[e])/i):void 0!==o&&c.position(it(o,i,a))}}else if(!s)return;return this},relativePosition:function(e,t){var n=this[0],r=this.cy(),i=S(e)?e:void 0,a=void 0!==i||void 0!==t&&A(e),o=r.hasCompoundNodes();if(n&&n.isNode()){if(!a){var s=n.position(),l=o?n.parent():null,u=l&&l.length>0,c=u;u&&(l=l[0]);var h=c?l.position():{x:0,y:0};return i={x:s.x-h.x,y:s.y-h.y},void 0===e?i:i[e]}for(var d=0;d<this.length;d++){var p=this[d],g=o?p.parent():null,f=g&&g.length>0,v=f;f&&(g=g[0]);var y=v?g.position():{x:0,y:0};void 0!==t?p.position(e,t+y[e]):void 0!==i&&p.position({x:i.x+y.x,y:i.y+y.y})}}else if(!a)return;return this}},ii.modelPosition=ii.point=ii.position,ii.modelPositions=ii.points=ii.positions,ii.renderedPoint=ii.renderedPosition,ii.relativePoint=ii.relativePosition;var di,pi,gi=ai;di=pi={},pi.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),i=n.pan(),a=t.x1*r+i.x,o=t.x2*r+i.x,s=t.y1*r+i.y,l=t.y2*r+i.y;return{x1:a,x2:o,y1:s,y2:l,w:o-a,h:l-s}},pi.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp((function(t){if(t.isParent()){var n=t._private;n.compoundBoundsClean=!1,n.bbCache=null,e||t.emitAndNotify("bounds")}})),this):this},pi.updateCompoundBounds=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function n(e){if(e.isParent()){var t=e._private,n=e.children(),r="include"===e.pstyle("compound-sizing-wrt-labels").value,i={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},a=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),o=t.position;0!==a.w&&0!==a.h||((a={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=o.x-a.w/2,a.x2=o.x+a.w/2,a.y1=o.y-a.h/2,a.y2=o.y+a.h/2);var s=i.width.left.value;"px"===i.width.left.units&&i.width.val>0&&(s=100*s/i.width.val);var l=i.width.right.value;"px"===i.width.right.units&&i.width.val>0&&(l=100*l/i.width.val);var u=i.height.top.value;"px"===i.height.top.units&&i.height.val>0&&(u=100*u/i.height.val);var c=i.height.bottom.value;"px"===i.height.bottom.units&&i.height.val>0&&(c=100*c/i.height.val);var h=y(i.width.val-a.w,s,l),d=h.biasDiff,p=h.biasComplementDiff,g=y(i.height.val-a.h,u,c),f=g.biasDiff,v=g.biasComplementDiff;t.autoPadding=function(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}(a.w,a.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),t.autoWidth=Math.max(a.w,i.width.val),o.x=(-d+a.x1+a.x2+p)/2,t.autoHeight=Math.max(a.h,i.height.val),o.y=(-f+a.y1+a.y2+v)/2}function y(e,t,n){var r=0,i=0,a=t+n;return e>0&&a>0&&(r=t/a*e,i=n/a*e),{biasDiff:r,biasComplementDiff:i}}}for(var r=0;r<this.length;r++){var i=this[r],a=i._private;a.compoundBoundsClean&&!e||(n(i),t.batching()||(a.compoundBoundsClean=!0))}return this};var fi=function(e){return e===1/0||e===-1/0?0:e},vi=function(e,t,n,r,i){r-t!=0&&i-n!=0&&null!=t&&null!=n&&null!=r&&null!=i&&(e.x1=t<e.x1?t:e.x1,e.x2=r>e.x2?r:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=i>e.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},yi=function(e,t){return null==t?e:vi(e,t.x1,t.y1,t.x2,t.y2)},mi=function(e,t,n){return Re(e,t,n)},bi=function(e,t,n){if(!t.cy().headless()){var r,i,a=t._private,o=a.rstyle,s=o.arrowWidth/2;if("none"!==t.pstyle(n+"-arrow-shape").value){"source"===n?(r=o.srcX,i=o.srcY):"target"===n?(r=o.tgtX,i=o.tgtY):(r=o.midX,i=o.midY);var l=a.arrowBounds=a.arrowBounds||{},u=l[n]=l[n]||{};u.x1=r-s,u.y1=i-s,u.x2=r+s,u.y2=i+s,u.w=u.x2-u.x1,u.h=u.y2-u.y1,mt(u,1),vi(e,u.x1,u.y1,u.x2,u.y2)}}},xi=function(e,t,n){if(!t.cy().headless()){var r;r=n?n+"-":"";var i=t._private,a=i.rstyle;if(t.pstyle(r+"label").strValue){var o,s,l,u,c=t.pstyle("text-halign"),h=t.pstyle("text-valign"),d=mi(a,"labelWidth",n),p=mi(a,"labelHeight",n),g=mi(a,"labelX",n),f=mi(a,"labelY",n),v=t.pstyle(r+"text-margin-x").pfValue,y=t.pstyle(r+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle(r+"text-rotation"),x=t.pstyle("text-outline-width").pfValue,w=t.pstyle("text-border-width").pfValue/2,E=t.pstyle("text-background-padding").pfValue,_=p,T=d,D=T/2,C=_/2;if(m)o=g-D,s=g+D,l=f-C,u=f+C;else{switch(c.value){case"left":o=g-T,s=g;break;case"center":o=g-D,s=g+D;break;case"right":o=g,s=g+T}switch(h.value){case"top":l=f-_,u=f;break;case"center":l=f-C,u=f+C;break;case"bottom":l=f,u=f+_}}o+=v-Math.max(x,w)-E-2,s+=v+Math.max(x,w)+E+2,l+=y-Math.max(x,w)-E-2,u+=y+Math.max(x,w)+E+2;var N=n||"main",A=i.labelBounds,L=A[N]=A[N]||{};L.x1=o,L.y1=l,L.x2=s,L.y2=u,L.w=s-o,L.h=u-l;var k=m&&"autorotate"===b.strValue,S=null!=b.pfValue&&0!==b.pfValue;if(k||S){var I=k?mi(i.rstyle,"labelAngle",n):b.pfValue,M=Math.cos(I),O=Math.sin(I),P=(o+s)/2,R=(l+u)/2;if(!m){switch(c.value){case"left":P=s;break;case"right":P=o}switch(h.value){case"top":R=u;break;case"bottom":R=l}}var B=function(e,t){return{x:(e-=P)*M-(t-=R)*O+P,y:e*O+t*M+R}},F=B(o,l),z=B(o,u),G=B(s,l),Y=B(s,u);o=Math.min(F.x,z.x,G.x,Y.x),s=Math.max(F.x,z.x,G.x,Y.x),l=Math.min(F.y,z.y,G.y,Y.y),u=Math.max(F.y,z.y,G.y,Y.y)}var X=N+"Rot",V=A[X]=A[X]||{};V.x1=o,V.y1=l,V.x2=s,V.y2=u,V.w=s-o,V.h=u-l,vi(e,o,l,s,u),vi(i.labelBounds.all,o,l,s,u)}return e}},wi=function(e,t){var n,r,i,a,o,s,l,u=e._private.cy,c=u.styleEnabled(),h=u.headless(),d=ft(),p=e._private,g=e.isNode(),f=e.isEdge(),v=p.rstyle,y=g&&c?e.pstyle("bounds-expansion").pfValue:[0],m=function(e){return"none"!==e.pstyle("display").value},b=!c||m(e)&&(!f||m(e.source())&&m(e.target()));if(b){var x=0;c&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(x=e.pstyle("overlay-padding").value);var w=0;c&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(w=e.pstyle("underlay-padding").value);var E=Math.max(x,w),_=0;if(c&&(_=e.pstyle("width").pfValue/2),g&&t.includeNodes){var T=e.position();o=T.x,s=T.y;var D=e.outerWidth()/2,C=e.outerHeight()/2;vi(d,n=o-D,i=s-C,r=o+D,a=s+C),c&&t.includeOutlines&&function(e,t){if(!t.cy().headless()){var n,r,i,a=t.pstyle("outline-opacity").value,o=t.pstyle("outline-width").value;if(a>0&&o>0){var s=t.pstyle("outline-offset").value,l=t.pstyle("shape").value,u=o+s,c=(e.w+2*u)/e.w,h=(e.h+2*u)/e.h,d=0;["diamond","pentagon","round-triangle"].includes(l)?(c=(e.w+2.4*u)/e.w,d=-u/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(l)?c=(e.w+2.4*u)/e.w:"star"===l?(c=(e.w+2.8*u)/e.w,h=(e.h+2.6*u)/e.h,d=-u/3.8):"triangle"===l?(c=(e.w+2.8*u)/e.w,h=(e.h+2.4*u)/e.h,d=-u/1.4):"vee"===l&&(c=(e.w+4.4*u)/e.w,h=(e.h+3.8*u)/e.h,d=.5*-u);var p=e.h*h-e.h,g=e.w*c-e.w;if(bt(e,[Math.ceil(p/2),Math.ceil(g/2)]),0!==d){var f=(r=0,i=d,{x1:(n=e).x1+r,x2:n.x2+r,y1:n.y1+i,y2:n.y2+i,w:n.w,h:n.h});vt(e,f)}}}}(d,e)}else if(f&&t.includeEdges)if(c&&!h){var N=e.pstyle("curve-style").strValue;if(n=Math.min(v.srcX,v.midX,v.tgtX),r=Math.max(v.srcX,v.midX,v.tgtX),i=Math.min(v.srcY,v.midY,v.tgtY),a=Math.max(v.srcY,v.midY,v.tgtY),vi(d,n-=_,i-=_,r+=_,a+=_),"haystack"===N){var A=v.haystackPts;if(A&&2===A.length){if(n=A[0].x,i=A[0].y,n>(r=A[1].x)){var L=n;n=r,r=L}if(i>(a=A[1].y)){var k=i;i=a,a=k}vi(d,n-_,i-_,r+_,a+_)}}else if("bezier"===N||"unbundled-bezier"===N||"segments"===N||"taxi"===N){var S;switch(N){case"bezier":case"unbundled-bezier":S=v.bezierPts;break;case"segments":case"taxi":S=v.linePts}if(null!=S)for(var I=0;I<S.length;I++){var M=S[I];n=M.x-_,r=M.x+_,i=M.y-_,a=M.y+_,vi(d,n,i,r,a)}}}else{var O=e.source().position(),P=e.target().position();if((n=O.x)>(r=P.x)){var R=n;n=r,r=R}if((i=O.y)>(a=P.y)){var B=i;i=a,a=B}vi(d,n-=_,i-=_,r+=_,a+=_)}if(c&&t.includeEdges&&f&&(bi(d,e,"mid-source"),bi(d,e,"mid-target"),bi(d,e,"source"),bi(d,e,"target")),c)if("yes"===e.pstyle("ghost").value){var F=e.pstyle("ghost-offset-x").pfValue,z=e.pstyle("ghost-offset-y").pfValue;vi(d,d.x1+F,d.y1+z,d.x2+F,d.y2+z)}var G=p.bodyBounds=p.bodyBounds||{};xt(G,d),bt(G,y),mt(G,1),c&&(n=d.x1,r=d.x2,i=d.y1,a=d.y2,vi(d,n-E,i-E,r+E,a+E));var Y=p.overlayBounds=p.overlayBounds||{};xt(Y,d),bt(Y,y),mt(Y,1);var X=p.labelBounds=p.labelBounds||{};null!=X.all?((l=X.all).x1=1/0,l.y1=1/0,l.x2=-1/0,l.y2=-1/0,l.w=0,l.h=0):X.all=ft(),c&&t.includeLabels&&(t.includeMainLabels&&xi(d,e,null),f&&(t.includeSourceLabels&&xi(d,e,"source"),t.includeTargetLabels&&xi(d,e,"target")))}return d.x1=fi(d.x1),d.y1=fi(d.y1),d.x2=fi(d.x2),d.y2=fi(d.y2),d.w=fi(d.x2-d.x1),d.h=fi(d.y2-d.y1),d.w>0&&d.h>0&&b&&(bt(d,y),mt(d,1)),d},Ei=function(e){var t=0,n=function(e){return(e?1:0)<<t++},r=0;return r+=n(e.incudeNodes),r+=n(e.includeEdges),r+=n(e.includeLabels),r+=n(e.includeMainLabels),r+=n(e.includeSourceLabels),r+=n(e.includeTargetLabels),r+=n(e.includeOverlays),r+=n(e.includeOutlines)},_i=function(e){if(e.isEdge()){var t=e.source().position(),n=e.target().position(),r=function(e){return Math.round(e)};return function(e,t){var n={value:0,done:!1},r=0,i=e.length;return ce({next:function(){return r<i?n.value=e[r++]:n.done=!0,n}},t)}([r(t.x),r(t.y),r(n.x),r(n.y)])}return 0},Ti=function(e,t){var n,r=e._private,i=e.isEdge(),a=(null==t?Ci:Ei(t))===Ci,o=_i(e),s=r.bbCachePosKey===o,l=t.useCache&&s,u=function(e){return null==e._private.bbCache||e._private.styleDirty};if(!l||u(e)||i&&u(e.source())||u(e.target())?(s||e.recalculateRenderedStyle(l),n=wi(e,Di),r.bbCache=n,r.bbCachePosKey=o):n=r.bbCache,!a){var c=e.isNode();n=ft(),(t.includeNodes&&c||t.includeEdges&&!c)&&(t.includeOverlays?yi(n,r.overlayBounds):yi(n,r.bodyBounds)),t.includeLabels&&(t.includeMainLabels&&(!i||t.includeSourceLabels&&t.includeTargetLabels)?yi(n,r.labelBounds.all):(t.includeMainLabels&&yi(n,r.labelBounds.mainRot),t.includeSourceLabels&&yi(n,r.labelBounds.sourceRot),t.includeTargetLabels&&yi(n,r.labelBounds.targetRot))),n.w=n.x2-n.x1,n.h=n.y2-n.y1}return n},Di={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,includeOutlines:!0,useCache:!0},Ci=Ei(Di),Ni=Me(Di);pi.boundingBox=function(e){var t;if(1!==this.length||null==this[0]._private.bbCache||this[0]._private.styleDirty||void 0!==e&&void 0!==e.useCache&&!0!==e.useCache){t=ft();var n=Ni(e=e||Di),r=this;if(r.cy().styleEnabled())for(var i=0;i<r.length;i++){var a=r[i],o=a._private,s=_i(a),l=o.bbCachePosKey===s,u=n.useCache&&l&&!o.styleDirty;a.recalculateRenderedStyle(u)}this.updateCompoundBounds(!e.useCache);for(var c=0;c<r.length;c++){var h=r[c];yi(t,Ti(h,n))}}else e=void 0===e?Di:Ni(e),t=Ti(this[0],e);return t.x1=fi(t.x1),t.y1=fi(t.y1),t.x2=fi(t.x2),t.y2=fi(t.y2),t.w=fi(t.x2-t.x1),t.h=fi(t.y2-t.y1),t},pi.dirtyBoundingBoxCache=function(){for(var e=0;e<this.length;e++){var t=this[e]._private;t.bbCache=null,t.bbCachePosKey=null,t.bodyBounds=null,t.overlayBounds=null,t.labelBounds.all=null,t.labelBounds.source=null,t.labelBounds.target=null,t.labelBounds.main=null,t.labelBounds.sourceRot=null,t.labelBounds.targetRot=null,t.labelBounds.mainRot=null,t.arrowBounds.source=null,t.arrowBounds.target=null,t.arrowBounds["mid-source"]=null,t.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this},pi.boundingBoxAt=function(e){var t=this.nodes(),n=this.cy(),r=n.hasCompoundNodes(),i=n.collection();if(r&&(i=t.filter((function(e){return e.isParent()})),t=t.not(i)),S(e)){var a=e;e=function(){return a}}n.startBatch(),t.forEach((function(t,n){return t._private.bbAtOldPos=e(t,n)})).silentPositions(e),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0));var o=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}}(this.boundingBox({useCache:!1}));return t.silentPositions((function(e){return e._private.bbAtOldPos})),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0)),n.endBatch(),o},di.boundingbox=di.bb=di.boundingBox,di.renderedBoundingbox=di.renderedBoundingBox;var Ai,Li,ki=pi;Ai=Li={};var Si=function(e){e.uppercaseName=j(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=j(e.outerName),Ai[e.name]=function(){var t=this[0],n=t._private,r=n.cy._private.styleEnabled;if(t){if(r){if(t.isParent())return t.updateCompoundBounds(),n[e.autoName]||0;var i=t.pstyle(e.name);return"label"===i.strValue?(t.recalculateRenderedStyle(),n.rstyle[e.labelName]||0):i.pfValue}return 1}},Ai["outer"+e.uppercaseName]=function(){var t=this[0],n=t._private.cy._private.styleEnabled;if(t)return n?t[e.name]()+t.pstyle("border-width").pfValue+2*t.padding():1},Ai["rendered"+e.uppercaseName]=function(){var t=this[0];if(t)return t[e.name]()*this.cy().zoom()},Ai["rendered"+e.uppercaseOuterName]=function(){var t=this[0];if(t)return t[e.outerName]()*this.cy().zoom()}};Si({name:"width"}),Si({name:"height"}),Li.padding=function(){var e=this[0],t=e._private;return e.isParent()?(e.updateCompoundBounds(),void 0!==t.autoPadding?t.autoPadding:e.pstyle("padding").pfValue):e.pstyle("padding").pfValue},Li.paddedHeight=function(){var e=this[0];return e.height()+2*e.padding()},Li.paddedWidth=function(){var e=this[0];return e.width()+2*e.padding()};var Ii=Li,Mi={controlPoints:{get:function(e){return e.renderer().getControlPoints(e)},mult:!0},segmentPoints:{get:function(e){return e.renderer().getSegmentPoints(e)},mult:!0},sourceEndpoint:{get:function(e){return e.renderer().getSourceEndpoint(e)}},targetEndpoint:{get:function(e){return e.renderer().getTargetEndpoint(e)}},midpoint:{get:function(e){return e.renderer().getEdgeMidpoint(e)}}},Oi=Object.keys(Mi).reduce((function(e,t){var n=Mi[t],r=function(e){return"rendered"+e[0].toUpperCase()+e.substr(1)}(t);return e[t]=function(){return function(e,t){if(e.isEdge())return t(e)}(this,n.get)},n.mult?e[r]=function(){return function(e,t){if(e.isEdge()){var n=e.cy(),r=n.pan(),i=n.zoom();return t(e).map((function(e){return rt(e,i,r)}))}}(this,n.get)}:e[r]=function(){return function(e,t){if(e.isEdge()){var n=e.cy();return rt(t(e),n.zoom(),n.pan())}}(this,n.get)},e}),{}),Pi=Q({},gi,ki,Ii,Oi),Ri=function(e,t){this.recycle(e,t)};function Bi(){return!1}function Fi(){return!0}Ri.prototype={instanceString:function(){return"event"},recycle:function(e,t){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Bi,null!=e&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?Fi:Bi):null!=e&&e.type?t=e:this.type=e,null!=t&&(this.originalEvent=t.originalEvent,this.type=null!=t.type?t.type:this.type,this.cy=t.cy,this.target=t.target,this.position=t.position,this.renderedPosition=t.renderedPosition,this.namespace=t.namespace,this.layout=t.layout),null!=this.cy&&null!=this.position&&null==this.renderedPosition){var n=this.position,r=this.cy.zoom(),i=this.cy.pan();this.renderedPosition={x:n.x*r+i.x,y:n.y*r+i.y}}this.timeStamp=e&&e.timeStamp||Date.now()},preventDefault:function(){this.isDefaultPrevented=Fi;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){this.isPropagationStopped=Fi;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Fi,this.stopPropagation()},isDefaultPrevented:Bi,isPropagationStopped:Bi,isImmediatePropagationStopped:Bi};var zi=/^([^.]+)(\.(?:[^.]+))?$/,Gi={qualifierCompare:function(e,t){return e===t},eventMatches:function(){return!0},addEventFields:function(){},callbackContext:function(e){return e},beforeEmit:function(){},afterEmit:function(){},bubble:function(){return!1},parent:function(){return null},context:null},Yi=Object.keys(Gi),Xi={};function Vi(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Xi,t=arguments.length>1?arguments[1]:void 0,n=0;n<Yi.length;n++){var r=Yi[n];this[r]=e[r]||Gi[r]}this.context=t||this.context,this.listeners=[],this.emitting=0}var Ui=Vi.prototype,ji=function(e,t,n,r,i,a,o){L(r)&&(i=r,r=null),o&&(a=null==a?o:Q({},a,o));for(var s=k(n)?n:n.split(/\s+/),l=0;l<s.length;l++){var u=s[l];if(!z(u)){var c=u.match(zi);if(c)if(!1===t(e,u,c[1],c[2]?c[2]:null,r,i,a))break}}},qi=function(e,t){return e.addEventFields(e.context,t),new Ri(t.type,t)},Hi=function(e,t,n){if("event"!==N(n))if(S(n))t(e,qi(e,n));else for(var r=k(n)?n:n.split(/\s+/),i=0;i<r.length;i++){var a=r[i];if(!z(a)){var o=a.match(zi);if(o){var s=o[1],l=o[2]?o[2]:null;t(e,qi(e,{type:s,namespace:l,target:e.context}))}}}else t(e,n)};Ui.on=Ui.addListener=function(e,t,n,r,i){return ji(this,(function(e,t,n,r,i,a,o){L(a)&&e.listeners.push({event:t,callback:a,type:n,namespace:r,qualifier:i,conf:o})}),e,t,n,r,i),this},Ui.one=function(e,t,n,r){return this.on(e,t,n,r,{one:!0})},Ui.removeListener=Ui.off=function(e,t,n,r){var i=this;0!==this.emitting&&(this.listeners=this.listeners.slice());for(var a=this.listeners,o=function(o){var s=a[o];ji(i,(function(t,n,r,i,l,u){if((s.type===r||"*"===e)&&(!i&&".*"!==s.namespace||s.namespace===i)&&(!l||t.qualifierCompare(s.qualifier,l))&&(!u||s.callback===u))return a.splice(o,1),!1}),e,t,n,r)},s=a.length-1;s>=0;s--)o(s);return this},Ui.removeAllListeners=function(){return this.removeListener("*")},Ui.emit=Ui.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,k(t)||(t=[t]),Hi(this,(function(e,a){null!=n&&(r=[{event:a.event,type:a.type,namespace:a.namespace,callback:n}],i=r.length);for(var o=function(n){var i=r[n];if(i.type===a.type&&(!i.namespace||i.namespace===a.namespace||".*"===i.namespace)&&e.eventMatches(e.context,i,a)){var o=[a];null!=t&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.push(r)}}(o,t),e.beforeEmit(e.context,i,a),i.conf&&i.conf.one&&(e.listeners=e.listeners.filter((function(e){return e!==i})));var s=e.callbackContext(e.context,i,a),l=i.callback.apply(s,o);e.afterEmit(e.context,i,a),!1===l&&(a.stopPropagation(),a.preventDefault())}},s=0;s<i;s++)o(s);e.bubble(e.context)&&!a.isPropagationStopped()&&e.parent(e.context).emit(a,t)}),e),this.emitting--,this};var Wi={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&P(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e.cy(),t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e},beforeEmit:function(e,t){t.conf&&t.conf.once&&t.conf.onceCollection.removeListener(t.event,t.qualifier,t.callback)},bubble:function(){return!0},parent:function(e){return e.isChild()?e.parent():e.cy()}},$i=function(e){return A(e)?new Hr(e):e},Ki={createEmitter:function(){for(var e=0;e<this.length;e++){var t=this[e],n=t._private;n.emitter||(n.emitter=new Vi(Wi,t))}return this},emitter:function(){return this._private.emitter},on:function(e,t,n){for(var r=$i(t),i=0;i<this.length;i++){this[i].emitter().on(e,r,n)}return this},removeListener:function(e,t,n){for(var r=$i(t),i=0;i<this.length;i++){this[i].emitter().removeListener(e,r,n)}return this},removeAllListeners:function(){for(var e=0;e<this.length;e++){this[e].emitter().removeAllListeners()}return this},one:function(e,t,n){for(var r=$i(t),i=0;i<this.length;i++){this[i].emitter().one(e,r,n)}return this},once:function(e,t,n){for(var r=$i(t),i=0;i<this.length;i++){this[i].emitter().on(e,r,n,{once:!0,onceCollection:this})}},emit:function(e,t){for(var n=0;n<this.length;n++){this[n].emitter().emit(e,t)}return this},emitAndNotify:function(e,t){if(0!==this.length)return this.cy().notify(e,this),this.emit(e,t),this}};ur.eventAliasesOn(Ki);var Zi={nodes:function(e){return this.filter((function(e){return e.isNode()})).filter(e)},edges:function(e){return this.filter((function(e){return e.isEdge()})).filter(e)},byGroup:function(){for(var e=this.spawn(),t=this.spawn(),n=0;n<this.length;n++){var r=this[n];r.isNode()?e.push(r):t.push(r)}return{nodes:e,edges:t}},filter:function(e,t){if(void 0===e)return this;if(A(e)||O(e))return new Hr(e).filter(this);if(L(e)){for(var n=this.spawn(),r=this,i=0;i<r.length;i++){var a=r[i];(t?e.apply(t,[a,i,r]):e(a,i,r))&&n.push(a)}return n}return this.spawn()},not:function(e){if(e){A(e)&&(e=this.filter(e));for(var t=this.spawn(),n=0;n<this.length;n++){var r=this[n];e.has(r)||t.push(r)}return t}return this},absoluteComplement:function(){return this.cy().mutableElements().not(this)},intersect:function(e){if(A(e)){var t=e;return this.filter(t)}for(var n=this.spawn(),r=e,i=this.length<e.length,a=i?this:r,o=i?r:this,s=0;s<a.length;s++){var l=a[s];o.has(l)&&n.push(l)}return n},xor:function(e){var t=this._private.cy;A(e)&&(e=t.$(e));var n=this.spawn(),r=e,i=function(e,t){for(var r=0;r<e.length;r++){var i=e[r],a=i._private.data.id;t.hasElementWithId(a)||n.push(i)}};return i(this,r),i(r,this),n},diff:function(e){var t=this._private.cy;A(e)&&(e=t.$(e));var n=this.spawn(),r=this.spawn(),i=this.spawn(),a=e,o=function(e,t,n){for(var r=0;r<e.length;r++){var a=e[r],o=a._private.data.id;t.hasElementWithId(o)?i.merge(a):n.push(a)}};return o(this,a,n),o(a,this,r),{left:n,right:r,both:i}},add:function(e){var t=this._private.cy;if(!e)return this;if(A(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=this.spawnSelf(),i=0;i<e.length;i++){var a=e[i],o=!this.has(a);o&&r.push(a)}return r},merge:function(e){var t=this._private,n=t.cy;if(!e)return this;if(e&&A(e)){var r=e;e=n.mutableElements().filter(r)}for(var i=t.map,a=0;a<e.length;a++){var o=e[a],s=o._private.data.id;if(!i.has(s)){var l=this.length++;this[l]=o,i.set(s,{ele:o,index:l})}}return this},unmergeAt:function(e){var t=this[e].id(),n=this._private.map;this[e]=void 0,n.delete(t);var r=e===this.length-1;if(this.length>1&&!r){var i=this.length-1,a=this[i],o=a._private.data.id;this[i]=void 0,this[e]=a,n.set(o,{ele:a,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map.get(n);if(!r)return this;var i=r.index;return this.unmergeAt(i),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&A(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r<e.length;r++)this.unmergeOne(e[r]);return this},unmergeBy:function(e){for(var t=this.length-1;t>=0;t--){e(this[t])&&this.unmergeAt(t)}return this},map:function(e,t){for(var n=[],r=this,i=0;i<r.length;i++){var a=r[i],o=t?e.apply(t,[a,i,r]):e(a,i,r);n.push(o)}return n},reduce:function(e,t){for(var n=t,r=this,i=0;i<r.length;i++)n=e(n,r[i],i,r);return n},max:function(e,t){for(var n,r=-1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s>r&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s<r&&(r=s,n=o)}return{value:r,ele:n}}},Qi=Zi;Qi.u=Qi["|"]=Qi["+"]=Qi.union=Qi.or=Qi.add,Qi["\\"]=Qi["!"]=Qi["-"]=Qi.difference=Qi.relativeComplement=Qi.subtract=Qi.not,Qi.n=Qi["&"]=Qi["."]=Qi.and=Qi.intersection=Qi.intersect,Qi["^"]=Qi["(+)"]=Qi["(-)"]=Qi.symmetricDifference=Qi.symdiff=Qi.xor,Qi.fnFilter=Qi.filterFn=Qi.stdFilter=Qi.filter,Qi.complement=Qi.abscomp=Qi.absoluteComplement;var Ji=function(e,t){var n=e.cy().hasCompoundNodes();function r(e){var t=e.pstyle("z-compound-depth");return"auto"===t.value?n?e.zDepth():0:"bottom"===t.value?-1:"top"===t.value?we:0}var i=r(e)-r(t);if(0!==i)return i;function a(e){return"auto"===e.pstyle("z-index-compare").value&&e.isNode()?1:0}var o=a(e)-a(t);if(0!==o)return o;var s=e.pstyle("z-index").value-t.pstyle("z-index").value;return 0!==s?s:e.poolIndex()-t.poolIndex()},ea={forEach:function(e,t){if(L(e))for(var n=this.length,r=0;r<n;r++){var i=this[r];if(!1===(t?e.apply(t,[i,r,this]):e(i,r,this)))break}return this},toArray:function(){for(var e=[],t=0;t<this.length;t++)e.push(this[t]);return e},slice:function(e,t){var n=[],r=this.length;null==t&&(t=r),null==e&&(e=0),e<0&&(e=r+e),t<0&&(t=r+t);for(var i=e;i>=0&&i<t&&i<r;i++)n.push(this[i]);return this.spawn(n)},size:function(){return this.length},eq:function(e){return this[e]||this.spawn()},first:function(){return this[0]||this.spawn()},last:function(){return this[this.length-1]||this.spawn()},empty:function(){return 0===this.length},nonempty:function(){return!this.empty()},sort:function(e){if(!L(e))return this;var t=this.toArray().sort(e);return this.spawn(t)},sortByZIndex:function(){return this.sort(Ji)},zDepth:function(){var e=this[0];if(e){var t=e._private;if("nodes"===t.group){var n=t.data.parent?e.parents().size():0;return e.isParent()?n:we-1}var r=t.source,i=t.target,a=r.zDepth(),o=i.zDepth();return Math.max(a,o,0)}}};ea.each=ea.forEach;var ta;ta="undefined",("undefined"==typeof Symbol?"undefined":g(Symbol))!=ta&&g(Symbol.iterator)!=ta&&(ea[Symbol.iterator]=function(){var e=this,t={value:void 0,done:!1},n=0,r=this.length;return m({next:function(){return n<r?t.value=e[n++]:(t.value=void 0,t.done=!0),t}},Symbol.iterator,(function(){return this}))});var na=Me({nodeDimensionsIncludeLabels:!1}),ra={layoutDimensions:function(e){var t;if(e=na(e),this.takesUpSpace())if(e.nodeDimensionsIncludeLabels){var n=this.boundingBox();t={w:n.w,h:n.h}}else t={w:this.outerWidth(),h:this.outerHeight()};else t={w:0,h:0};return 0!==t.w&&0!==t.h||(t.w=t.h=1),t},layoutPositions:function(e,t,n){var r=this.nodes().filter((function(e){return!e.isParent()})),i=this.cy(),a=t.eles,o=function(e){return e.id()},s=Y(n,o);e.emit({type:"layoutstart",layout:e}),e.animations=[];var l=t.spacingFactor&&1!==t.spacingFactor,u=function(){if(!l)return null;for(var e=ft(),t=0;t<r.length;t++){var n=r[t],i=s(n,t);yt(e,i.x,i.y)}return e}(),c=Y((function(e,n){var r=s(e,n);l&&(r=function(e,t,n){var r=t.x1+t.w/2,i=t.y1+t.h/2;return{x:r+(n.x-r)*e,y:i+(n.y-i)*e}}(Math.abs(t.spacingFactor),u,r));return null!=t.transform&&(r=t.transform(e,r)),r}),o);if(t.animate){for(var h=0;h<r.length;h++){var d=r[h],p=c(d,h);if(null==t.animateFilter||t.animateFilter(d,h)){var g=d.animation({position:p,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(g)}else d.position(p)}if(t.fit){var f=i.animation({fit:{boundingBox:a.boundingBoxAt(c),padding:t.padding},duration:t.animationDuration,easing:t.animationEasing});e.animations.push(f)}else if(void 0!==t.zoom&&void 0!==t.pan){var v=i.animation({zoom:t.zoom,pan:t.pan,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(v)}e.animations.forEach((function(e){return e.play()})),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),rr.all(e.animations.map((function(e){return e.promise()}))).then((function(){e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e})}))}else r.positions(c),t.fit&&i.fit(t.eles,t.padding),null!=t.zoom&&i.zoom(t.zoom),t.pan&&i.pan(t.pan),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e});return this},layout:function(e){return this.cy().makeLayout(Q({},e,{eles:this}))}};function ia(e,t,n){var r,i=n._private,a=i.styleCache=i.styleCache||[];return null!=(r=a[e])?r:r=a[e]=t(n)}function aa(e,t){return e=fe(e),function(n){return ia(e,t,n)}}function oa(e,t){e=fe(e);var n=function(e){return t.call(e)};return function(){var t=this[0];if(t)return ia(e,n,t)}}ra.createLayout=ra.makeLayout=ra.layout;var sa={recalculateRenderedStyle:function(e){var t=this.cy(),n=t.renderer(),r=t.styleEnabled();return n&&r&&n.recalculateRenderedStyle(this,e),this},dirtyStyleCache:function(){var e,t=this.cy(),n=function(e){return e._private.styleCache=null};t.hasCompoundNodes()?((e=this.spawnSelf().merge(this.descendants()).merge(this.parents())).merge(e.connectedEdges()),e.forEach(n)):this.forEach((function(e){n(e),e.connectedEdges().forEach(n)}));return this},updateStyle:function(e){var t=this._private.cy;if(!t.styleEnabled())return this;if(t.batching())return t._private.batchStyleEles.merge(this),this;var n=this;e=!(!e&&void 0!==e),t.hasCompoundNodes()&&(n=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var r=n;return e?r.emitAndNotify("style"):r.emit("style"),n.forEach((function(e){return e._private.styleDirty=!0})),this},cleanStyle:function(){var e=this.cy();if(e.styleEnabled())for(var t=0;t<this.length;t++){var n=this[t];n._private.styleDirty&&(n._private.styleDirty=!1,e.style().apply(n))}},parsedStyle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){this.cleanStyle();var i=n._private.style[e];return null!=i?i:t?r.style().getDefaultProperty(e):null}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var r=n.style();if(S(e)){var i=e;r.applyBypass(this,i,false),this.emitAndNotify("style")}else if(A(e)){if(void 0===t){var a=this[0];return a?r.getStylePropertyValue(a,e):void 0}r.applyBypass(this,e,t,false),this.emitAndNotify("style")}else if(void 0===e){var o=this[0];return o?r.getRawStyle(o):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=t.style(),r=this;if(void 0===e)for(var i=0;i<r.length;i++){var a=r[i];n.removeAllBypasses(a,false)}else{e=e.split(/\s+/);for(var o=0;o<r.length;o++){var s=r[o];n.removeBypasses(s,e,false)}}return this.emitAndNotify("style"),this},show:function(){return this.css("display","element"),this},hide:function(){return this.css("display","none"),this},effectiveOpacity:function(){var e=this.cy();if(!e.styleEnabled())return 1;var t=e.hasCompoundNodes(),n=this[0];if(n){var r=n._private,i=n.pstyle("opacity").value;if(!t)return i;var a=r.data.parent?n.parents():null;if(a)for(var o=0;o<a.length;o++){i*=a[o].pstyle("opacity").value}return i}},transparent:function(){if(!this.cy().styleEnabled())return!1;var e=this[0],t=e.cy().hasCompoundNodes();return e?t?0===e.effectiveOpacity():0===e.pstyle("opacity").value:void 0},backgrounding:function(){return!!this.cy().styleEnabled()&&!!this[0]._private.backgrounding}};function la(e,t){var n=e._private.data.parent?e.parents():null;if(n)for(var r=0;r<n.length;r++){if(!t(n[r]))return!1}return!0}function ua(e){var t=e.ok,n=e.edgeOkViaNode||e.ok,r=e.parentOk||e.ok;return function(){var e=this.cy();if(!e.styleEnabled())return!0;var i=this[0],a=e.hasCompoundNodes();if(i){var o=i._private;if(!t(i))return!1;if(i.isNode())return!a||la(i,r);var s=o.source,l=o.target;return n(s)&&(!a||la(s,n))&&(s===l||n(l)&&(!a||la(l,n)))}}}var ca=aa("eleTakesUpSpace",(function(e){return"element"===e.pstyle("display").value&&0!==e.width()&&(!e.isNode()||0!==e.height())}));sa.takesUpSpace=oa("takesUpSpace",ua({ok:ca}));var ha=aa("eleInteractive",(function(e){return"yes"===e.pstyle("events").value&&"visible"===e.pstyle("visibility").value&&ca(e)})),da=aa("parentInteractive",(function(e){return"visible"===e.pstyle("visibility").value&&ca(e)}));sa.interactive=oa("interactive",ua({ok:ha,parentOk:da,edgeOkViaNode:ca})),sa.noninteractive=function(){var e=this[0];if(e)return!e.interactive()};var pa=aa("eleVisible",(function(e){return"visible"===e.pstyle("visibility").value&&0!==e.pstyle("opacity").pfValue&&ca(e)})),ga=ca;sa.visible=oa("visible",ua({ok:pa,edgeOkViaNode:ga})),sa.hidden=function(){var e=this[0];if(e)return!e.visible()},sa.isBundledBezier=oa("isBundledBezier",(function(){return!!this.cy().styleEnabled()&&(!this.removed()&&"bezier"===this.pstyle("curve-style").value&&this.takesUpSpace())})),sa.bypass=sa.css=sa.style,sa.renderedCss=sa.renderedStyle,sa.removeBypass=sa.removeCss=sa.removeStyle,sa.pstyle=sa.parsedStyle;var fa={};function va(e){return function(){var t=arguments,n=[];if(2===t.length){var r=t[0],i=t[1];this.on(e.event,r,i)}else if(1===t.length&&L(t[0])){var a=t[0];this.on(e.event,a)}else if(0===t.length||1===t.length&&k(t[0])){for(var o=1===t.length?t[0]:null,s=0;s<this.length;s++){var l=this[s],u=!e.ableField||l._private[e.ableField],c=l._private[e.field]!=e.value;if(e.overrideAble){var h=e.overrideAble(l);if(void 0!==h&&(u=h,!h))return this}u&&(l._private[e.field]=e.value,c&&n.push(l))}var d=this.spawn(n);d.updateStyle(),d.emit(e.event),o&&d.emit(o)}return this}}function ya(e){fa[e.field]=function(){var t=this[0];if(t){if(e.overrideField){var n=e.overrideField(t);if(void 0!==n)return n}return t._private[e.field]}},fa[e.on]=va({event:e.on,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!0}),fa[e.off]=va({event:e.off,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!1})}ya({field:"locked",overrideField:function(e){return!!e.cy().autolock()||void 0},on:"lock",off:"unlock"}),ya({field:"grabbable",overrideField:function(e){return!e.cy().autoungrabify()&&!e.pannable()&&void 0},on:"grabify",off:"ungrabify"}),ya({field:"selected",ableField:"selectable",overrideAble:function(e){return!e.cy().autounselectify()&&void 0},on:"select",off:"unselect"}),ya({field:"selectable",overrideField:function(e){return!e.cy().autounselectify()&&void 0},on:"selectify",off:"unselectify"}),fa.deselect=fa.unselect,fa.grabbed=function(){var e=this[0];if(e)return e._private.grabbed},ya({field:"active",on:"activate",off:"unactivate"}),ya({field:"pannable",on:"panify",off:"unpanify"}),fa.inactive=function(){var e=this[0];if(e)return!e._private.active};var ma={},ba=function(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r];if(i.isNode()){for(var a=!1,o=i.connectedEdges(),s=0;s<o.length;s++){var l=o[s],u=l.source(),c=l.target();if(e.noIncomingEdges&&c===i&&u!==i||e.noOutgoingEdges&&u===i&&c!==i){a=!0;break}}a||n.push(i)}}return this.spawn(n,!0).filter(t)}},xa=function(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r];if(i.isNode())for(var a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],l=s.source(),u=s.target();e.outgoing&&l===i?(n.push(s),n.push(u)):e.incoming&&u===i&&(n.push(s),n.push(l))}}return this.spawn(n,!0).filter(t)}},wa=function(e){return function(t){for(var n=this,r=[],i={};;){var a=e.outgoing?n.outgoers():n.incomers();if(0===a.length)break;for(var o=!1,s=0;s<a.length;s++){var l=a[s],u=l.id();i[u]||(i[u]=!0,r.push(l),o=!0)}if(!o)break;n=a}return this.spawn(r,!0).filter(t)}};function Ea(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r]._private[e.attr];i&&n.push(i)}return this.spawn(n,!0).filter(t)}}function _a(e){return function(t){var n=[],r=this._private.cy,i=e||{};A(t)&&(t=r.$(t));for(var a=0;a<t.length;a++)for(var o=t[a]._private.edges,s=0;s<o.length;s++){var l=o[s],u=l._private.data,c=this.hasElementWithId(u.source)&&t.hasElementWithId(u.target),h=t.hasElementWithId(u.source)&&this.hasElementWithId(u.target);if(c||h){if(i.thisIsSrc||i.thisIsTgt){if(i.thisIsSrc&&!c)continue;if(i.thisIsTgt&&!h)continue}n.push(l)}}return this.spawn(n,!0)}}function Ta(e){return e=Q({},{codirected:!1},e),function(t){for(var n=[],r=this.edges(),i=e,a=0;a<r.length;a++)for(var o=r[a]._private,s=o.source,l=s._private.data.id,u=o.data.target,c=s._private.edges,h=0;h<c.length;h++){var d=c[h],p=d._private.data,g=p.target,f=p.source,v=g===u&&f===l,y=l===g&&u===f;(i.codirected&&v||!i.codirected&&(v||y))&&n.push(d)}return this.spawn(n,!0).filter(t)}}ma.clearTraversalCache=function(){for(var e=0;e<this.length;e++)this[e]._private.traversalCache=null},Q(ma,{roots:ba({noIncomingEdges:!0}),leaves:ba({noOutgoingEdges:!0}),outgoers:Qr(xa({outgoing:!0}),"outgoers"),successors:wa({outgoing:!0}),incomers:Qr(xa({incoming:!0}),"incomers"),predecessors:wa({incoming:!0})}),Q(ma,{neighborhood:Qr((function(e){for(var t=[],n=this.nodes(),r=0;r<n.length;r++)for(var i=n[r],a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],l=s.source(),u=s.target(),c=i===l?u:l;c.length>0&&t.push(c[0]),t.push(s[0])}return this.spawn(t,!0).filter(e)}),"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),ma.neighbourhood=ma.neighborhood,ma.closedNeighbourhood=ma.closedNeighborhood,ma.openNeighbourhood=ma.openNeighborhood,Q(ma,{source:Qr((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:Qr((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:Ea({attr:"source"}),targets:Ea({attr:"target"})}),Q(ma,{edgesWith:Qr(_a(),"edgesWith"),edgesTo:Qr(_a({thisIsSrc:!0}),"edgesTo")}),Q(ma,{connectedEdges:Qr((function(e){for(var t=[],n=0;n<this.length;n++){var r=this[n];if(r.isNode())for(var i=r._private.edges,a=0;a<i.length;a++){var o=i[a];t.push(o)}}return this.spawn(t,!0).filter(e)}),"connectedEdges"),connectedNodes:Qr((function(e){for(var t=[],n=0;n<this.length;n++){var r=this[n];r.isEdge()&&(t.push(r.source()[0]),t.push(r.target()[0]))}return this.spawn(t,!0).filter(e)}),"connectedNodes"),parallelEdges:Qr(Ta(),"parallelEdges"),codirectedEdges:Qr(Ta({codirected:!0}),"codirectedEdges")}),Q(ma,{components:function(e){var t=this,n=t.cy(),r=n.collection(),i=null==e?t.nodes():e.nodes(),a=[];null!=e&&i.empty()&&(i=e.sources());var o=function(e,t){r.merge(e),i.unmerge(e),t.merge(e)};if(i.empty())return t.spawn();var s=function(){var e=n.collection();a.push(e);var r=i[0];o(r,e),t.bfs({directed:!1,roots:r,visit:function(t){return o(t,e)}}),e.forEach((function(n){n.connectedEdges().forEach((function(n){t.has(n)&&e.has(n.source())&&e.has(n.target())&&e.merge(n)}))}))};do{s()}while(i.length>0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),ma.componentsOf=ma.components;var Da=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(void 0!==e){var i=new Fe,a=!1;if(t){if(t.length>0&&S(t[0])&&!P(t[0])){a=!0;for(var o=[],s=new Ge,l=0,u=t.length;l<u;l++){var c=t[l];null==c.data&&(c.data={});var h=c.data;if(null==h.id)h.id=ke();else if(e.hasElementWithId(h.id)||s.has(h.id))continue;var d=new Ye(e,c,!1);o.push(d),s.add(h.id)}t=o}}else t=[];this.length=0;for(var p=0,g=t.length;p<g;p++){var f=t[p][0];if(null!=f){var v=f._private.data.id;n&&i.has(v)||(n&&i.set(v,{index:this.length,ele:f}),this[this.length]=f,this.length++)}}this._private={eles:this,cy:e,get map(){return null==this.lazyMap&&this.rebuildMap(),this.lazyMap},set map(e){this.lazyMap=e},rebuildMap:function(){for(var e=this.lazyMap=new Fe,t=this.eles,n=0;n<t.length;n++){var r=t[n];e.set(r.id(),{index:n,ele:r})}}},n&&(this._private.map=i),a&&!r&&this.restore()}else Ce("A collection must have a reference to the core")},Ca=Ye.prototype=Da.prototype=Object.create(Array.prototype);Ca.instanceString=function(){return"collection"},Ca.spawn=function(e,t){return new Da(this.cy(),e,t)},Ca.spawnSelf=function(){return this.spawn(this)},Ca.cy=function(){return this._private.cy},Ca.renderer=function(){return this._private.cy.renderer()},Ca.element=function(){return this[0]},Ca.collection=function(){return R(this)?this:new Da(this._private.cy,[this])},Ca.unique=function(){return new Da(this._private.cy,this,!0)},Ca.hasElementWithId=function(e){return e=""+e,this._private.map.has(e)},Ca.getElementById=function(e){e=""+e;var t=this._private.cy,n=this._private.map.get(e);return n?n.ele:new Da(t)},Ca.$id=Ca.getElementById,Ca.poolIndex=function(){var e=this._private.cy._private.elements,t=this[0]._private.data.id;return e._private.map.get(t).index},Ca.indexOf=function(e){var t=e[0]._private.data.id;return this._private.map.get(t).index},Ca.indexOfId=function(e){return e=""+e,this._private.map.get(e).index},Ca.json=function(e){var t=this.element(),n=this.cy();if(null==t&&e)return this;if(null!=t){var r=t._private;if(S(e)){if(n.startBatch(),e.data){t.data(e.data);var i=r.data;if(t.isEdge()){var a=!1,o={},s=e.data.source,l=e.data.target;null!=s&&s!=i.source&&(o.source=""+s,a=!0),null!=l&&l!=i.target&&(o.target=""+l,a=!0),a&&(t=t.move(o))}else{var u="parent"in e.data,c=e.data.parent;!u||null==c&&null==i.parent||c==i.parent||(void 0===c&&(c=null),null!=c&&(c=""+c),t=t.move({parent:c}))}}e.position&&t.position(e.position);var h=function(n,i,a){var o=e[n];null!=o&&o!==r[n]&&(o?t[i]():t[a]())};return h("removed","remove","restore"),h("selected","select","unselect"),h("selectable","selectify","unselectify"),h("locked","lock","unlock"),h("grabbable","grabify","ungrabify"),h("pannable","panify","unpanify"),null!=e.classes&&t.classes(e.classes),n.endBatch(),this}if(void 0===e){var d={data:Le(r.data),position:Le(r.position),group:r.group,removed:r.removed,selected:r.selected,selectable:r.selectable,locked:r.locked,grabbable:r.grabbable,pannable:r.pannable,classes:null};d.classes="";var p=0;return r.classes.forEach((function(e){return d.classes+=0==p++?e:" "+e})),d}}},Ca.jsons=function(){for(var e=[],t=0;t<this.length;t++){var n=this[t].json();e.push(n)}return e},Ca.clone=function(){for(var e=this.cy(),t=[],n=0;n<this.length;n++){var r=this[n].json(),i=new Ye(e,r,!1);t.push(i)}return new Da(e,t)},Ca.copy=Ca.clone,Ca.restore=function(){for(var e,t,n=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this,a=i.cy(),o=a._private,s=[],l=[],u=0,c=i.length;u<c;u++){var h=i[u];r&&!h.removed()||(h.isNode()?s.push(h):l.push(h))}e=s.concat(l);var d=function(){e.splice(t,1),t--};for(t=0;t<e.length;t++){var p=e[t],g=p._private,f=g.data;if(p.clearTraversalCache(),r||g.removed)if(void 0===f.id)f.id=ke();else if(I(f.id))f.id=""+f.id;else{if(z(f.id)||!A(f.id)){Ce("Can not create element with invalid string ID `"+f.id+"`"),d();continue}if(a.hasElementWithId(f.id)){Ce("Can not create second element with ID `"+f.id+"`"),d();continue}}else;var v=f.id;if(p.isNode()){var y=g.position;null==y.x&&(y.x=0),null==y.y&&(y.y=0)}if(p.isEdge()){for(var m=p,b=["source","target"],x=b.length,w=!1,E=0;E<x;E++){var _=b[E],T=f[_];I(T)&&(T=f[_]=""+f[_]),null==T||""===T?(Ce("Can not create edge `"+v+"` with unspecified "+_),w=!0):a.hasElementWithId(T)||(Ce("Can not create edge `"+v+"` with nonexistant "+_+" `"+T+"`"),w=!0)}if(w){d();continue}var D=a.getElementById(f.source),C=a.getElementById(f.target);D.same(C)?D._private.edges.push(m):(D._private.edges.push(m),C._private.edges.push(m)),m._private.source=D,m._private.target=C}g.map=new Fe,g.map.set(v,{ele:p,index:0}),g.removed=!1,r&&a.addToPool(p)}for(var N=0;N<s.length;N++){var L=s[N],k=L._private.data;I(k.parent)&&(k.parent=""+k.parent);var S=k.parent;if(null!=S||L._private.parent){var M=L._private.parent?a.collection().merge(L._private.parent):a.getElementById(S);if(M.empty())k.parent=void 0;else if(M[0].removed())Ae("Node added with missing parent, reference to parent removed"),k.parent=void 0,L._private.parent=null;else{for(var O=!1,P=M;!P.empty();){if(L.same(P)){O=!0,k.parent=void 0;break}P=P.parent()}O||(M[0]._private.children.push(L),L._private.parent=M[0],o.hasCompoundNodes=!0)}}}if(e.length>0){for(var R=e.length===i.length?i:new Da(a,e),B=0;B<R.length;B++){var F=R[B];F.isNode()||(F.parallelEdges().clearTraversalCache(),F.source().clearTraversalCache(),F.target().clearTraversalCache())}(o.hasCompoundNodes?a.collection().merge(R).merge(R.connectedNodes()).merge(R.parent()):R).dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(n),n?R.emitAndNotify("add"):r&&R.emit("add")}return i},Ca.removed=function(){var e=this[0];return e&&e._private.removed},Ca.inside=function(){var e=this[0];return e&&!e._private.removed},Ca.remove=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],i={},a=n._private.cy;function o(e){var n=i[e.id()];t&&e.removed()||n||(i[e.id()]=!0,e.isNode()?(r.push(e),function(e){for(var t=e._private.edges,n=0;n<t.length;n++)o(t[n])}(e),function(e){for(var t=e._private.children,n=0;n<t.length;n++)o(t[n])}(e)):r.unshift(e))}for(var s=0,l=n.length;s<l;s++){o(n[s])}function u(e,t){var n=e._private.edges;Oe(n,t),e.clearTraversalCache()}function c(e){e.clearTraversalCache()}var h=[];function d(e,t){t=t[0];var n=(e=e[0])._private.children,r=e.id();Oe(n,t),t._private.parent=null,h.ids[r]||(h.ids[r]=!0,h.push(e))}h.ids={},n.dirtyCompoundBoundsCache(),t&&a.removeFromPool(r);for(var p=0;p<r.length;p++){var g=r[p];if(g.isEdge()){var f=g.source()[0],v=g.target()[0];u(f,g),u(v,g);for(var y=g.parallelEdges(),m=0;m<y.length;m++){var b=y[m];c(b),b.isBundledBezier()&&b.dirtyBoundingBoxCache()}}else{var x=g.parent();0!==x.length&&d(x,g)}t&&(g._private.removed=!0)}var w=a._private.elements;a._private.hasCompoundNodes=!1;for(var E=0;E<w.length;E++){if(w[E].isParent()){a._private.hasCompoundNodes=!0;break}}var _=new Da(this.cy(),r);_.size()>0&&(e?_.emitAndNotify("remove"):t&&_.emit("remove"));for(var T=0;T<h.length;T++){var D=h[T];t&&D.removed()||D.updateStyle()}return _},Ca.move=function(e){var t=this._private.cy,n=this,r=!1,i=!1,a=function(e){return null==e?e:""+e};if(void 0!==e.source||void 0!==e.target){var o=a(e.source),s=a(e.target),l=null!=o&&t.hasElementWithId(o),u=null!=s&&t.hasElementWithId(s);(l||u)&&(t.batch((function(){n.remove(r,i),n.emitAndNotify("moveout");for(var e=0;e<n.length;e++){var t=n[e],a=t._private.data;t.isEdge()&&(l&&(a.source=o),u&&(a.target=s))}n.restore(r,i)})),n.emitAndNotify("move"))}else if(void 0!==e.parent){var c=a(e.parent);if(null===c||t.hasElementWithId(c)){var h=null===c?void 0:c;t.batch((function(){var e=n.remove(r,i);e.emitAndNotify("moveout");for(var t=0;t<n.length;t++){var a=n[t],o=a._private.data;a.isNode()&&(o.parent=h)}e.restore(r,i)})),n.emitAndNotify("move")}}return this},[Kn,cr,hr,$r,Jr,oi,si,Pi,Ki,Zi,{isNode:function(){return"nodes"===this.group()},isEdge:function(){return"edges"===this.group()},isLoop:function(){return this.isEdge()&&this.source()[0]===this.target()[0]},isSimple:function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},group:function(){var e=this[0];if(e)return e._private.group}},ea,ra,sa,fa,ma].forEach((function(e){Q(Ca,e)}));var Na={add:function(e){var t,n=this;if(O(e)){var r=e;if(r._private.cy===n)t=r.restore();else{for(var i=[],a=0;a<r.length;a++){var o=r[a];i.push(o.json())}t=new Da(n,i)}}else if(k(e)){t=new Da(n,e)}else if(S(e)&&(k(e.nodes)||k(e.edges))){for(var s=e,l=[],u=["nodes","edges"],c=0,h=u.length;c<h;c++){var d=u[c],p=s[d];if(k(p))for(var g=0,f=p.length;g<f;g++){var v=Q({group:d},p[g]);l.push(v)}}t=new Da(n,l)}else{t=new Ye(n,e).collection()}return t},remove:function(e){if(O(e));else if(A(e)){var t=e;e=this.$(t)}return e.remove()}};function Aa(e,t,n,r){var i=4,a=1e-7,o=10,s=11,l=1/(s-1),u="undefined"!=typeof Float32Array;if(4!==arguments.length)return!1;for(var c=0;c<4;++c)if("number"!=typeof arguments[c]||isNaN(arguments[c])||!isFinite(arguments[c]))return!1;e=Math.min(e,1),n=Math.min(n,1),e=Math.max(e,0),n=Math.max(n,0);var h=u?new Float32Array(s):new Array(s);function d(e,t){return 1-3*t+3*e}function p(e,t){return 3*t-6*e}function g(e){return 3*e}function f(e,t,n){return((d(t,n)*e+p(t,n))*e+g(t))*e}function v(e,t,n){return 3*d(t,n)*e*e+2*p(t,n)*e+g(t)}function y(t){for(var r=0,u=1,c=s-1;u!==c&&h[u]<=t;++u)r+=l;--u;var d=r+(t-h[u])/(h[u+1]-h[u])*l,p=v(d,e,n);return p>=.001?function(t,r){for(var a=0;a<i;++a){var o=v(r,e,n);if(0===o)return r;r-=(f(r,e,n)-t)/o}return r}(t,d):0===p?d:function(t,r,i){var s,l,u=0;do{(s=f(l=r+(i-r)/2,e,n)-t)>0?i=l:r=l}while(Math.abs(s)>a&&++u<o);return l}(t,r,r+l)}var m=!1;function b(){m=!0,e===t&&n===r||function(){for(var t=0;t<s;++t)h[t]=f(t*l,e,n)}()}var x=function(i){return m||b(),e===t&&n===r?i:0===i?0:1===i?1:f(y(i),t,r)};x.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var w="generateBezier("+[e,t,n,r]+")";return x.toString=function(){return w},x}var La=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var i={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:i.v,dv:e(i)}}function n(n,r){var i={dx:n.v,dv:e(n)},a=t(n,.5*r,i),o=t(n,.5*r,a),s=t(n,r,o),l=1/6*(i.dx+2*(a.dx+o.dx)+s.dx),u=1/6*(i.dv+2*(a.dv+o.dv)+s.dv);return n.x=n.x+l*r,n.v=n.v+u*r,n}return function e(t,r,i){var a,o,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,h=1e-4;for(t=parseFloat(t)||500,r=parseFloat(r)||20,i=i||null,l.tension=t,l.friction=r,o=(a=null!==i)?(c=e(t,r))/i*.016:.016;s=n(s||l,o),u.push(1+s.x),c+=16,Math.abs(s.x)>h&&Math.abs(s.v)>h;);return a?function(e){return u[e*(u.length-1)|0]}:c}}(),ka=function(e,t,n,r){var i=Aa(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Sa={linear:function(e,t,n){return e+(t-e)*n},ease:ka(.25,.1,.25,1),"ease-in":ka(.42,0,1,1),"ease-out":ka(0,0,.58,1),"ease-in-out":ka(.42,0,.58,1),"ease-in-sine":ka(.47,0,.745,.715),"ease-out-sine":ka(.39,.575,.565,1),"ease-in-out-sine":ka(.445,.05,.55,.95),"ease-in-quad":ka(.55,.085,.68,.53),"ease-out-quad":ka(.25,.46,.45,.94),"ease-in-out-quad":ka(.455,.03,.515,.955),"ease-in-cubic":ka(.55,.055,.675,.19),"ease-out-cubic":ka(.215,.61,.355,1),"ease-in-out-cubic":ka(.645,.045,.355,1),"ease-in-quart":ka(.895,.03,.685,.22),"ease-out-quart":ka(.165,.84,.44,1),"ease-in-out-quart":ka(.77,0,.175,1),"ease-in-quint":ka(.755,.05,.855,.06),"ease-out-quint":ka(.23,1,.32,1),"ease-in-out-quint":ka(.86,0,.07,1),"ease-in-expo":ka(.95,.05,.795,.035),"ease-out-expo":ka(.19,1,.22,1),"ease-in-out-expo":ka(1,0,0,1),"ease-in-circ":ka(.6,.04,.98,.335),"ease-out-circ":ka(.075,.82,.165,1),"ease-in-out-circ":ka(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Sa.linear;var r=La(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":ka};function Ia(e,t,n,r,i){if(1===r)return n;if(t===n)return n;var a=i(t,n,r);return null==e||((e.roundValue||e.color)&&(a=Math.round(a)),void 0!==e.min&&(a=Math.max(a,e.min)),void 0!==e.max&&(a=Math.min(a,e.max))),a}function Ma(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Oa(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=Ma(e,i),s=Ma(t,i);if(I(o)&&I(s))return Ia(a,o,s,n,r);if(k(o)&&k(s)){for(var l=[],u=0;u<s.length;u++){var c=o[u],h=s[u];if(null!=c&&null!=h){var d=Ia(a,c,h,n,r);l.push(d)}else l.push(h)}return l}}function Pa(e,t,n,r){var i=!r,a=e._private,o=t._private,s=o.easing,l=o.startTime,u=(r?e:e.cy()).style();if(!o.easingImpl)if(null==s)o.easingImpl=Sa.linear;else{var c,h,d;if(A(s))c=u.parse("transition-timing-function",s).value;else c=s;A(c)?(h=c,d=[]):(h=c[1],d=c.slice(2).map((function(e){return+e}))),d.length>0?("spring"===h&&d.push(o.duration),o.easingImpl=Sa[h].apply(null,d)):o.easingImpl=Sa[h]}var p,g=o.easingImpl;if(p=0===o.duration?1:(n-l)/o.duration,o.applying&&(p=o.progress),p<0?p=0:p>1&&(p=1),null==o.delay){var f=o.startPosition,v=o.position;if(v&&i&&!e.locked()){var y={};Ra(f.x,v.x)&&(y.x=Oa(f.x,v.x,p,g)),Ra(f.y,v.y)&&(y.y=Oa(f.y,v.y,p,g)),e.position(y)}var m=o.startPan,b=o.pan,x=a.pan,w=null!=b&&r;w&&(Ra(m.x,b.x)&&(x.x=Oa(m.x,b.x,p,g)),Ra(m.y,b.y)&&(x.y=Oa(m.y,b.y,p,g)),e.emit("pan"));var E=o.startZoom,_=o.zoom,T=null!=_&&r;T&&(Ra(E,_)&&(a.zoom=gt(a.minZoom,Oa(E,_,p,g),a.maxZoom)),e.emit("zoom")),(w||T)&&e.emit("viewport");var D=o.style;if(D&&D.length>0&&i){for(var C=0;C<D.length;C++){var N=D[C],L=N.name,k=N,S=o.startStyle[L],I=Oa(S,k,p,g,u.properties[S.name]);u.overrideBypass(e,L,I)}e.emit("style")}}return o.progress=p,p}function Ra(e,t){return null!=e&&null!=t&&(!(!I(e)||!I(t))||!(!e||!t))}function Ba(e,t,n,r){var i=t._private;i.started=!0,i.startTime=n-i.progress*i.duration}function Fa(e,t){var n=t._private.aniEles,r=[];function i(t,n){var i=t._private,a=i.animation.current,o=i.animation.queue,s=!1;if(0===a.length){var l=o.shift();l&&a.push(l)}for(var u=function(e){for(var t=e.length-1;t>=0;t--){(0,e[t])()}e.splice(0,e.length)},c=a.length-1;c>=0;c--){var h=a[c],d=h._private;d.stopped?(a.splice(c,1),d.hooked=!1,d.playing=!1,d.started=!1,u(d.frames)):(d.playing||d.applying)&&(d.playing&&d.applying&&(d.applying=!1),d.started||Ba(0,h,e),Pa(t,h,e,n),d.applying&&(d.applying=!1),u(d.frames),null!=d.step&&d.step(e),h.completed()&&(a.splice(c,1),d.hooked=!1,d.playing=!1,d.started=!1,u(d.completes)),s=!0)}return n||0!==a.length||0!==o.length||r.push(t),s}for(var a=!1,o=0;o<n.length;o++){var s=i(n[o]);a=a||s}var l=i(t,!0);(a||l)&&(n.length>0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var za={animate:ur.animate(),animation:ur.animation(),animated:ur.animated(),clearQueue:ur.clearQueue(),delay:ur.delay(),delayAnimation:ur.delayAnimation(),stop:ur.stop(),addToAnimationPool:function(e){this.styleEnabled()&&this._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender((function(t,n){Fa(n,e)}),t.beforeRenderPriorities.animations):function t(){e._private.animationsRunning&&oe((function(n){Fa(n,e),t()}))}()}}},Ga={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&P(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},Ya=function(e){return A(e)?new Hr(e):e},Xa={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new Vi(Ga,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,Ya(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,Ya(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,Ya(t),n),this},once:function(e,t,n){return this.emitter().one(e,Ya(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};ur.eventAliasesOn(Xa);var Va={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};Va.jpeg=Va.jpg;var Ua={layout:function(e){var t=this;if(null!=e)if(null!=e.name){var n=e.name,r=t.extension("layout",n);if(null!=r){var i;i=A(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var a=new r(Q({},e,{cy:t,eles:i}));return a}Ce("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else Ce("A `name` must be specified to make a layout");else Ce("Layout options must be specified to make a layout")}};Ua.createLayout=Ua.makeLayout=Ua.layout;var ja={notify:function(e,t){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();null!=t&&r.merge(t)}else if(n.notificationsEnabled){var i=this.renderer();!this.destroyed()&&i&&i.notify(e,t)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(0===e.batchCount)return this;if(e.batchCount--,0===e.batchCount){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach((function(n){var r=e.batchNotifications[n];r.empty()?t.notify(n):t.notify(n,r)}))}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch((function(){for(var n=Object.keys(e),r=0;r<n.length;r++){var i=n[r],a=e[i];t.getElementById(i).data(a)}}))}},qa=Me({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1}),Ha={renderTo:function(e,t,n,r){return this._private.renderer.renderTo(e,t,n,r),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify("draw"),this},resize:function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},initRenderer:function(e){var t=this,n=t.extension("renderer",e.name);if(null!=n){void 0!==e.wheelSensitivity&&Ae("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.");var r=qa(e);r.cy=t,t._private.renderer=new n(r),this.notify("init")}else Ce("Can not initialise: No such renderer `".concat(e.name,"` found. Did you forget to import it and `cytoscape.use()` it?"))},destroyRenderer:function(){var e=this;e.notify("destroy");var t=e.container();if(t)for(t._cyreg=null;t.childNodes.length>0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach((function(e){var t=e._private;t.rscratch={},t.rstyle={},t.animation.current=[],t.animation.queue=[]}))},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};Ha.invalidateDimensions=Ha.resize;var Wa={collection:function(e,t){return A(e)?this.$(e):O(e)?e.collection():k(e)?(t||(t={}),new Da(this,e,t.unique,t.removed)):new Da(this)},nodes:function(e){var t=this.$((function(e){return e.isNode()}));return e?t.filter(e):t},edges:function(e){var t=this.$((function(e){return e.isEdge()}));return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};Wa.elements=Wa.filter=Wa.$;var $a={},Ka="t";$a.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r<e.length;r++){var i=e[r],a=t.getContextMeta(i);if(!a.empty){var o=t.getContextStyle(a),s=t.applyContextStyle(a,o,i);i._private.appliedInitStyle?t.updateTransitions(i,s.diffProps):i._private.appliedInitStyle=!0,t.updateStyleHints(i)&&n.push(i)}}return n},$a.getPropertiesDiff=function(e,t){var n=this,r=n._private.propDiffs=n._private.propDiffs||{},i=e+"-"+t,a=r[i];if(a)return a;for(var o=[],s={},l=0;l<n.length;l++){var u=n[l],c=e[l]===Ka,h=t[l]===Ka,d=c!==h,p=u.mappedProperties.length>0;if(d||h&&p){var g=void 0;d&&p||d?g=u.properties:p&&(g=u.mappedProperties);for(var f=0;f<g.length;f++){for(var v=g[f],y=v.name,m=!1,b=l+1;b<n.length;b++){var x=n[b];if(t[b]===Ka&&(m=null!=x.properties[v.name]))break}s[y]||m||(s[y]=!0,o.push(y))}}}return r[i]=o,o},$a.getContextMeta=function(e){for(var t,n=this,r="",i=e._private.styleCxtKey||"",a=0;a<n.length;a++){var o=n[a];r+=o.selector&&o.selector.matches(e)?Ka:"f"}return t=n.getPropertiesDiff(i,r),e._private.styleCxtKey=r,{key:r,diffPropNames:t,empty:0===t.length}},$a.getContextStyle=function(e){var t=e.key,n=this._private.contextStyles=this._private.contextStyles||{};if(n[t])return n[t];for(var r={_private:{key:t}},i=0;i<this.length;i++){var a=this[i];if(t[i]===Ka)for(var o=0;o<a.properties.length;o++){var s=a.properties[o];r[s.name]=s}}return n[t]=r,r},$a.applyContextStyle=function(e,t,n){for(var r=e.diffPropNames,i={},a=this.types,o=0;o<r.length;o++){var s=r[o],l=t[s],u=n.pstyle(s);if(!l){if(!u)continue;l=u.bypass?{name:s,deleteBypassed:!0}:{name:s,delete:!0}}if(u!==l){if(l.mapped===a.fn&&null!=u&&null!=u.mapping&&u.mapping.value===l.value){var c=u.mapping;if((c.fnValue=l.value(n))===c.prevFnValue)continue}var h=i[s]={prev:u};this.applyParsedProperty(n,l),h.next=n.pstyle(s),h.next&&h.next.bypass&&(h.next=h.next.bypassed)}}return{diffProps:i}},$a.updateStyleHints=function(e){var t=e._private,n=this,r=n.propertyGroupNames,i=n.propertyGroupKeys,a=function(e,t,r){return n.getPropertiesHash(e,t,r)},o=t.styleKey;if(e.removed())return!1;var s="nodes"===t.group,l=e._private.style;r=Object.keys(l);for(var u=0;u<i.length;u++){var c=i[u];t.styleKeys[c]=[le,ue]}for(var h,d=function(e,n){return t.styleKeys[n][0]=he(e,t.styleKeys[n][0])},p=function(e,n){return t.styleKeys[n][1]=de(e,t.styleKeys[n][1])},g=function(e,t){d(e,t),p(e,t)},f=function(e,t){for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);d(r,t),p(r,t)}},v=0;v<r.length;v++){var y=r[v],m=l[y];if(null!=m){var b=this.properties[y],x=b.type,w=b.groupKey,E=void 0;null!=b.hashOverride?E=b.hashOverride(e,m):null!=m.pfValue&&(E=m.pfValue);var _=null==b.enums?m.value:null,T=null!=E,D=T||null!=_,C=m.units;if(x.number&&D&&!x.multiple)g(-128<(h=T?E:_)&&h<128&&Math.floor(h)!==h?2e9-(1024*h|0):h,w),T||null==C||f(C,w);else f(m.strValue,w)}}for(var N,A,L=[le,ue],k=0;k<i.length;k++){var S=i[k],I=t.styleKeys[S];L[0]=he(I[0],L[0]),L[1]=de(I[1],L[1])}t.styleKey=(N=L[0],A=L[1],2097152*N+A);var M=t.styleKeys;t.labelDimsKey=pe(M.labelDimensions);var O=a(e,["label"],M.labelDimensions);if(t.labelKey=pe(O),t.labelStyleKey=pe(ge(M.commonLabel,O)),!s){var P=a(e,["source-label"],M.labelDimensions);t.sourceLabelKey=pe(P),t.sourceLabelStyleKey=pe(ge(M.commonLabel,P));var R=a(e,["target-label"],M.labelDimensions);t.targetLabelKey=pe(R),t.targetLabelStyleKey=pe(ge(M.commonLabel,R))}if(s){var B=t.styleKeys,F=B.nodeBody,z=B.nodeBorder,G=B.nodeOutline,Y=B.backgroundImage,X=B.compound,V=B.pie,U=[F,z,G,Y,X,V].filter((function(e){return null!=e})).reduce(ge,[le,ue]);t.nodeKey=pe(U),t.hasPie=null!=V&&V[0]!==le&&V[1]!==ue}return o!==t.styleKey},$a.clearStyleHints=function(e){var t=e._private;t.styleCxtKey="",t.styleKeys={},t.styleKey=null,t.labelKey=null,t.labelStyleKey=null,t.sourceLabelKey=null,t.sourceLabelStyleKey=null,t.targetLabelKey=null,t.targetLabelStyleKey=null,t.nodeKey=null,t.hasPie=null},$a.applyParsedProperty=function(e,t){var n,r=this,i=t,a=e._private.style,o=r.types,s=r.properties[i.name].type,l=i.bypass,u=a[i.name],c=u&&u.bypass,h=e._private,d="mapping",p=function(e){return null==e?null:null!=e.pfValue?e.pfValue:e.value},g=function(){var t=p(u),n=p(i);r.checkTriggers(e,i.name,t,n)};if("curve-style"===t.name&&e.isEdge()&&("bezier"!==t.value&&e.isLoop()||"haystack"===t.value&&(e.source().isParent()||e.target().isParent()))&&(i=t=this.parse(t.name,"bezier",l)),i.delete)return a[i.name]=void 0,g(),!0;if(i.deleteBypassed)return u?!!u.bypass&&(u.bypassed=void 0,g(),!0):(g(),!0);if(i.deleteBypass)return u?!!u.bypass&&(a[i.name]=u.bypassed,g(),!0):(g(),!0);var f=function(){Ae("Do not assign mappings to elements without corresponding data (i.e. ele `"+e.id()+"` has no mapping for property `"+i.name+"` with data field `"+i.field+"`); try a `["+i.field+"]` selector to limit scope to elements with `"+i.field+"` defined")};switch(i.mapped){case o.mapData:for(var v,y=i.field.split("."),m=h.data,b=0;b<y.length&&m;b++){m=m[y[b]]}if(null==m)return f(),!1;if(!I(m))return Ae("Do not use continuous mappers without specifying numeric data (i.e. `"+i.field+": "+m+"` for `"+e.id()+"` is non-numeric)"),!1;var x=i.fieldMax-i.fieldMin;if((v=0===x?0:(m-i.fieldMin)/x)<0?v=0:v>1&&(v=1),s.color){var w=i.valueMin[0],E=i.valueMax[0],_=i.valueMin[1],T=i.valueMax[1],D=i.valueMin[2],C=i.valueMax[2],N=null==i.valueMin[3]?1:i.valueMin[3],A=null==i.valueMax[3]?1:i.valueMax[3],L=[Math.round(w+(E-w)*v),Math.round(_+(T-_)*v),Math.round(D+(C-D)*v),Math.round(N+(A-N)*v)];n={bypass:i.bypass,name:i.name,value:L,strValue:"rgb("+L[0]+", "+L[1]+", "+L[2]+")"}}else{if(!s.number)return!1;var k=i.valueMin+(i.valueMax-i.valueMin)*v;n=this.parse(i.name,k,i.bypass,d)}if(!n)return f(),!1;n.mapping=i,i=n;break;case o.data:for(var S=i.field.split("."),M=h.data,O=0;O<S.length&&M;O++){M=M[S[O]]}if(null!=M&&(n=this.parse(i.name,M,i.bypass,d)),!n)return f(),!1;n.mapping=i,i=n;break;case o.fn:var P=i.value,R=null!=i.fnValue?i.fnValue:P(e);if(i.prevFnValue=R,null==R)return Ae("Custom function mappers may not return null (i.e. `"+i.name+"` for ele `"+e.id()+"` is null)"),!1;if(!(n=this.parse(i.name,R,i.bypass,d)))return Ae("Custom function mappers may not return invalid values for the property type (i.e. `"+i.name+"` for ele `"+e.id()+"` is invalid)"),!1;n.mapping=Le(i),i=n;break;case void 0:break;default:return!1}return l?(i.bypassed=c?u.bypassed:u,a[i.name]=i):c?u.bypassed=i:a[i.name]=i,g(),!0},$a.cleanElements=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(this.clearStyleHints(r),r.dirtyCompoundBoundsCache(),r.dirtyBoundingBoxCache(),t)for(var i=r._private.style,a=Object.keys(i),o=0;o<a.length;o++){var s=a[o],l=i[s];null!=l&&(l.bypass?l.bypassed=null:i[s]=null)}else r._private.style={}}},$a.update=function(){this._private.cy.mutableElements().updateStyle()},$a.updateTransitions=function(e,t){var n=this,r=e._private,i=e.pstyle("transition-property").value,a=e.pstyle("transition-duration").pfValue,o=e.pstyle("transition-delay").pfValue;if(i.length>0&&a>0){for(var s={},l=!1,u=0;u<i.length;u++){var c=i[u],h=e.pstyle(c),d=t[c];if(d){var p=d.prev,g=null!=d.next?d.next:h,f=!1,v=void 0,y=1e-6;p&&(I(p.pfValue)&&I(g.pfValue)?(f=g.pfValue-p.pfValue,v=p.pfValue+y*f):I(p.value)&&I(g.value)?(f=g.value-p.value,v=p.value+y*f):k(p.value)&&k(g.value)&&(f=p.value[0]!==g.value[0]||p.value[1]!==g.value[1]||p.value[2]!==g.value[2],v=p.strValue),f&&(s[c]=g.strValue,this.applyBypass(e,c,v),l=!0))}}if(!l)return;r.transitioning=!0,new rr((function(t){o>0?e.delayAnimation(o).play().promise().then(t):t()})).then((function(){return e.animation({style:s,duration:a,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){n.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1}))}else r.transitioning&&(this.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1)},$a.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},$a.checkZOrderTrigger=function(e,t,n,r){var i=this;this.checkTrigger(e,t,n,r,(function(e){return e.triggersZOrder}),(function(){i._private.cy.notify("zorder",e)}))},$a.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBounds}),(function(i){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache(),!i.triggersBoundsOfParallelBeziers||"curve-style"!==t||"bezier"!==n&&"bezier"!==r||e.parallelEdges().forEach((function(e){e.isBundledBezier()&&e.dirtyBoundingBoxCache()})),!i.triggersBoundsOfConnectedEdges||"display"!==t||"none"!==n&&"none"!==r||e.connectedEdges().forEach((function(e){e.dirtyBoundingBoxCache()}))}))},$a.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var Za={applyBypass:function(e,t,n,r){var i=[];if("*"===t||"**"===t){if(void 0!==n)for(var a=0;a<this.properties.length;a++){var o=this.properties[a].name,s=this.parse(o,n,!0);s&&i.push(s)}}else if(A(t)){var l=this.parse(t,n,!0);l&&i.push(l)}else{if(!S(t))return!1;var u=t;r=n;for(var c=Object.keys(u),h=0;h<c.length;h++){var d=c[h],p=u[d];if(void 0===p&&(p=u[V(d)]),void 0!==p){var g=this.parse(d,p,!0);g&&i.push(g)}}}if(0===i.length)return!1;for(var f=!1,v=0;v<e.length;v++){for(var y=e[v],m={},b=void 0,x=0;x<i.length;x++){var w=i[x];if(r){var E=y.pstyle(w.name);b=m[w.name]={prev:E}}f=this.applyParsedProperty(y,Le(w))||f,r&&(b.next=y.pstyle(w.name))}f&&this.updateStyleHints(y),r&&this.updateTransitions(y,m,true)}return f},overrideBypass:function(e,t,n){t=X(t);for(var r=0;r<e.length;r++){var i=e[r],a=i._private.style[t],o=this.properties[t].type,s=o.color,l=o.mutiple,u=a?null!=a.pfValue?a.pfValue:a.value:null;a&&a.bypass?(a.value=n,null!=a.pfValue&&(a.pfValue=n),a.strValue=s?"rgb("+n.join(",")+")":l?n.join(" "):""+n,this.updateStyleHints(i)):this.applyBypass(i,t,n),this.checkTriggers(i,t,u,n)}},removeAllBypasses:function(e,t){return this.removeBypasses(e,this.propertyNames,t)},removeBypasses:function(e,t,n){for(var r=0;r<e.length;r++){for(var i=e[r],a={},o=0;o<t.length;o++){var s=t[o],l=this.properties[s],u=i.pstyle(l.name);if(u&&u.bypass){var c=this.parse(s,"",!0),h=a[l.name]={prev:u};this.applyParsedProperty(i,c),h.next=i.pstyle(l.name)}}this.updateStyleHints(i),n&&this.updateTransitions(i,a,true)}}},Qa={getEmSizeInPixels:function(){var e=this.containerCss("font-size");return null!=e?parseFloat(e):1},containerCss:function(e){var t=this._private.cy,n=t.container(),r=t.window();if(r&&n&&r.getComputedStyle)return r.getComputedStyle(n).getPropertyValue(e)}},Ja={getRenderedStyle:function(e,t){return t?this.getStylePropertyValue(e,t,!0):this.getRawStyle(e,!0)},getRawStyle:function(e,t){var n=this;if(e=e[0]){for(var r={},i=0;i<n.properties.length;i++){var a=n.properties[i],o=n.getStylePropertyValue(e,a.name,t);null!=o&&(r[a.name]=o,r[V(a.name)]=o)}return r}},getIndexedStyle:function(e,t,n,r){var i=e.pstyle(t)[n][r];return null!=i?i:e.cy().style().getDefaultProperty(t)[n][0]},getStylePropertyValue:function(e,t,n){if(e=e[0]){var r=this.properties[t];r.alias&&(r=r.pointsTo);var i=r.type,a=e.pstyle(r.name);if(a){var o=a.value,s=a.units,l=a.strValue;if(n&&i.number&&null!=o&&I(o)){var u=e.cy().zoom(),c=function(e){return e*u},h=function(e,t){return c(e)+t},d=k(o);return(d?s.every((function(e){return null!=e})):null!=s)?d?o.map((function(e,t){return h(e,s[t])})).join(" "):h(o,s):d?o.map((function(e){return A(e)?e:""+c(e)})).join(" "):""+c(o)}if(null!=l)return l}return null}},getAnimationStartStyle:function(e,t){for(var n={},r=0;r<t.length;r++){var i=t[r].name,a=e.pstyle(i);void 0!==a&&(a=S(a)?this.parse(i,a.strValue):this.parse(i,a)),a&&(n[i]=a)}return n},getPropsList:function(e){var t=[],n=e,r=this.properties;if(n)for(var i=Object.keys(n),a=0;a<i.length;a++){var o=i[a],s=n[o],l=r[o]||r[X(o)],u=this.parse(l.name,s);u&&t.push(u)}return t},getNonDefaultPropertiesHash:function(e,t,n){var r,i,a,o,s,l,u=n.slice();for(s=0;s<t.length;s++)if(r=t[s],null!=(i=e.pstyle(r,!1)))if(null!=i.pfValue)u[0]=he(o,u[0]),u[1]=de(o,u[1]);else for(a=i.strValue,l=0;l<a.length;l++)o=a.charCodeAt(l),u[0]=he(o,u[0]),u[1]=de(o,u[1]);return u}};Ja.getPropertiesHash=Ja.getNonDefaultPropertiesHash;var eo={appendFromJson:function(e){for(var t=this,n=0;n<e.length;n++){var r=e[n],i=r.selector,a=r.style||r.css,o=Object.keys(a);t.selector(i);for(var s=0;s<o.length;s++){var l=o[s],u=a[l];t.css(l,u)}}return t},fromJson:function(e){var t=this;return t.resetToDefault(),t.appendFromJson(e),t},json:function(){for(var e=[],t=this.defaultLength;t<this.length;t++){for(var n=this[t],r=n.selector,i=n.properties,a={},o=0;o<i.length;o++){var s=i[o];a[s.name]=s.strValue}e.push({selector:r?r.toString():"core",style:a})}return e}},to={appendFromString:function(e){var t,n,r,i=this,a=""+e;function o(){a=a.length>t.length?a.substr(t.length):""}function s(){n=n.length>r.length?n.substr(r.length):""}for(a=a.replace(/[/][*](\s|.)+?[*][/]/g,"");;){if(a.match(/^\s*$/))break;var l=a.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!l){Ae("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+a);break}t=l[0];var u=l[1];if("core"!==u)if(new Hr(u).invalid){Ae("Skipping parsing of block: Invalid selector found in string stylesheet: "+u),o();continue}var c=l[2],h=!1;n=c;for(var d=[];;){if(n.match(/^\s*$/))break;var p=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!p){Ae("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+c),h=!0;break}r=p[0];var g=p[1],f=p[2];if(this.properties[g])i.parse(g,f)?(d.push({name:g,val:f}),s()):(Ae("Skipping property: Invalid property definition in: "+r),s());else Ae("Skipping property: Invalid property name in: "+r),s()}if(h){o();break}i.selector(u);for(var v=0;v<d.length;v++){var y=d[v];i.css(y.name,y.val)}o()}return i},fromString:function(e){var t=this;return t.resetToDefault(),t.appendFromString(e),t}},no={};!function(){var e=q,t=W,n=K,r=function(e){return"^"+e+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},i=function(r){var i=e+"|\\w+|"+t+"|"+n+"|\\#[0-9a-fA-F]{3}|\\#[0-9a-fA-F]{6}";return"^"+r+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+e+")\\s*\\,\\s*("+e+")\\s*,\\s*("+i+")\\s*\\,\\s*("+i+")\\)$"},a=["^url\\s*\\(\\s*['\"]?(.+?)['\"]?\\s*\\)$","^(none)$","^(.+)$"];no.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},nonNegativeNumber:{number:!0,min:0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials","null"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi"]},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textOverflowWrap:{enums:["whitespace","anywhere"]},textBackgroundShape:{enums:["rectangle","roundrectangle","round-rectangle"]},nodeShape:{enums:["rectangle","roundrectangle","round-rectangle","cutrectangle","cut-rectangle","bottomroundrectangle","bottom-round-rectangle","barrel","ellipse","triangle","round-triangle","square","pentagon","round-pentagon","hexagon","round-hexagon","concavehexagon","concave-hexagon","heptagon","round-heptagon","octagon","round-octagon","tag","round-tag","star","diamond","round-diamond","vee","rhomboid","right-rhomboid","polygon"]},overlayShape:{enums:["roundrectangle","round-rectangle","ellipse"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","circle-triangle","triangle-cross","triangle-backcurve","vee","square","circle","diamond","chevron","none"]},arrowFill:{enums:["filled","hollow"]},arrowWidth:{number:!0,units:"%|px|em",implicitUnits:"px",enums:["match-line"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},justification:{enums:["left","center","right","auto"]},text:{string:!0},data:{mapping:!0,regex:r("data")},layoutData:{mapping:!0,regex:r("layoutData")},scratch:{mapping:!0,regex:r("scratch")},mapData:{mapping:!0,regex:i("mapData")},mapLayoutData:{mapping:!0,regex:i("mapLayoutData")},mapScratch:{mapping:!0,regex:i("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:a,singleRegexMatchValue:!0},urls:{regexes:a,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position","endpoints"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-node-or-label","outside-to-line","outside-to-line-or-label"],singleEnum:!0,validate:function(e,t){switch(e.length){case 2:return"deg"!==t[0]&&"rad"!==t[0]&&"deg"!==t[1]&&"rad"!==t[1];case 1:return A(e[0])||"deg"===t[0]||"rad"===t[0];default:return!1}}},easing:{regexes:["^(spring)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]},gradientDirection:{enums:["to-bottom","to-top","to-left","to-right","to-bottom-right","to-bottom-left","to-top-right","to-top-left","to-right-bottom","to-left-bottom","to-right-top","to-left-top"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:function(e){var t=e.length;return 1===t||2===t||4===t}}};var o={zeroNonZero:function(e,t){return(null==e||null==t)&&e!==t||(0==e&&0!=t||0!=e&&0==t)},any:function(e,t){return e!=t},emptyNonEmpty:function(e,t){var n=z(e),r=z(t);return n&&!r||!n&&r}},s=no.types,l=[{name:"label",type:s.text,triggersBounds:o.any,triggersZOrder:o.emptyNonEmpty},{name:"text-rotation",type:s.textRotation,triggersBounds:o.any},{name:"text-margin-x",type:s.bidirectionalSize,triggersBounds:o.any},{name:"text-margin-y",type:s.bidirectionalSize,triggersBounds:o.any}],u=[{name:"source-label",type:s.text,triggersBounds:o.any},{name:"source-text-rotation",type:s.textRotation,triggersBounds:o.any},{name:"source-text-margin-x",type:s.bidirectionalSize,triggersBounds:o.any},{name:"source-text-margin-y",type:s.bidirectionalSize,triggersBounds:o.any},{name:"source-text-offset",type:s.size,triggersBounds:o.any}],c=[{name:"target-label",type:s.text,triggersBounds:o.any},{name:"target-text-rotation",type:s.textRotation,triggersBounds:o.any},{name:"target-text-margin-x",type:s.bidirectionalSize,triggersBounds:o.any},{name:"target-text-margin-y",type:s.bidirectionalSize,triggersBounds:o.any},{name:"target-text-offset",type:s.size,triggersBounds:o.any}],h=[{name:"font-family",type:s.fontFamily,triggersBounds:o.any},{name:"font-style",type:s.fontStyle,triggersBounds:o.any},{name:"font-weight",type:s.fontWeight,triggersBounds:o.any},{name:"font-size",type:s.size,triggersBounds:o.any},{name:"text-transform",type:s.textTransform,triggersBounds:o.any},{name:"text-wrap",type:s.textWrap,triggersBounds:o.any},{name:"text-overflow-wrap",type:s.textOverflowWrap,triggersBounds:o.any},{name:"text-max-width",type:s.size,triggersBounds:o.any},{name:"text-outline-width",type:s.size,triggersBounds:o.any},{name:"line-height",type:s.positiveNumber,triggersBounds:o.any}],d=[{name:"text-valign",type:s.valign,triggersBounds:o.any},{name:"text-halign",type:s.halign,triggersBounds:o.any},{name:"color",type:s.color},{name:"text-outline-color",type:s.color},{name:"text-outline-opacity",type:s.zeroOneNumber},{name:"text-background-color",type:s.color},{name:"text-background-opacity",type:s.zeroOneNumber},{name:"text-background-padding",type:s.size,triggersBounds:o.any},{name:"text-border-opacity",type:s.zeroOneNumber},{name:"text-border-color",type:s.color},{name:"text-border-width",type:s.size,triggersBounds:o.any},{name:"text-border-style",type:s.borderStyle,triggersBounds:o.any},{name:"text-background-shape",type:s.textBackgroundShape,triggersBounds:o.any},{name:"text-justification",type:s.justification}],p=[{name:"events",type:s.bool,triggersZOrder:o.any},{name:"text-events",type:s.bool,triggersZOrder:o.any}],g=[{name:"display",type:s.display,triggersZOrder:o.any,triggersBounds:o.any,triggersBoundsOfConnectedEdges:!0},{name:"visibility",type:s.visibility,triggersZOrder:o.any},{name:"opacity",type:s.zeroOneNumber,triggersZOrder:o.zeroNonZero},{name:"text-opacity",type:s.zeroOneNumber},{name:"min-zoomed-font-size",type:s.size},{name:"z-compound-depth",type:s.zCompoundDepth,triggersZOrder:o.any},{name:"z-index-compare",type:s.zIndexCompare,triggersZOrder:o.any},{name:"z-index",type:s.number,triggersZOrder:o.any}],f=[{name:"overlay-padding",type:s.size,triggersBounds:o.any},{name:"overlay-color",type:s.color},{name:"overlay-opacity",type:s.zeroOneNumber,triggersBounds:o.zeroNonZero},{name:"overlay-shape",type:s.overlayShape,triggersBounds:o.any}],v=[{name:"underlay-padding",type:s.size,triggersBounds:o.any},{name:"underlay-color",type:s.color},{name:"underlay-opacity",type:s.zeroOneNumber,triggersBounds:o.zeroNonZero},{name:"underlay-shape",type:s.overlayShape,triggersBounds:o.any}],y=[{name:"transition-property",type:s.propList},{name:"transition-duration",type:s.time},{name:"transition-delay",type:s.time},{name:"transition-timing-function",type:s.easing}],m=function(e,t){return"label"===t.value?-e.poolIndex():t.pfValue},b=[{name:"height",type:s.nodeSize,triggersBounds:o.any,hashOverride:m},{name:"width",type:s.nodeSize,triggersBounds:o.any,hashOverride:m},{name:"shape",type:s.nodeShape,triggersBounds:o.any},{name:"shape-polygon-points",type:s.polygonPointList,triggersBounds:o.any},{name:"background-color",type:s.color},{name:"background-fill",type:s.fill},{name:"background-opacity",type:s.zeroOneNumber},{name:"background-blacken",type:s.nOneOneNumber},{name:"background-gradient-stop-colors",type:s.colors},{name:"background-gradient-stop-positions",type:s.percentages},{name:"background-gradient-direction",type:s.gradientDirection},{name:"padding",type:s.sizeMaybePercent,triggersBounds:o.any},{name:"padding-relative-to",type:s.paddingRelativeTo,triggersBounds:o.any},{name:"bounds-expansion",type:s.boundsExpansion,triggersBounds:o.any}],x=[{name:"border-color",type:s.color},{name:"border-opacity",type:s.zeroOneNumber},{name:"border-width",type:s.size,triggersBounds:o.any},{name:"border-style",type:s.borderStyle}],w=[{name:"outline-color",type:s.color},{name:"outline-opacity",type:s.zeroOneNumber},{name:"outline-width",type:s.size,triggersBounds:o.any},{name:"outline-style",type:s.borderStyle},{name:"outline-offset",type:s.size,triggersBounds:o.any}],E=[{name:"background-image",type:s.urls},{name:"background-image-crossorigin",type:s.bgCrossOrigin},{name:"background-image-opacity",type:s.zeroOneNumbers},{name:"background-image-containment",type:s.bgContainment},{name:"background-image-smoothing",type:s.bools},{name:"background-position-x",type:s.bgPos},{name:"background-position-y",type:s.bgPos},{name:"background-width-relative-to",type:s.bgRelativeTo},{name:"background-height-relative-to",type:s.bgRelativeTo},{name:"background-repeat",type:s.bgRepeat},{name:"background-fit",type:s.bgFit},{name:"background-clip",type:s.bgClip},{name:"background-width",type:s.bgWH},{name:"background-height",type:s.bgWH},{name:"background-offset-x",type:s.bgPos},{name:"background-offset-y",type:s.bgPos}],_=[{name:"position",type:s.position,triggersBounds:o.any},{name:"compound-sizing-wrt-labels",type:s.compoundIncludeLabels,triggersBounds:o.any},{name:"min-width",type:s.size,triggersBounds:o.any},{name:"min-width-bias-left",type:s.sizeMaybePercent,triggersBounds:o.any},{name:"min-width-bias-right",type:s.sizeMaybePercent,triggersBounds:o.any},{name:"min-height",type:s.size,triggersBounds:o.any},{name:"min-height-bias-top",type:s.sizeMaybePercent,triggersBounds:o.any},{name:"min-height-bias-bottom",type:s.sizeMaybePercent,triggersBounds:o.any}],T=[{name:"line-style",type:s.lineStyle},{name:"line-color",type:s.color},{name:"line-fill",type:s.fill},{name:"line-cap",type:s.lineCap},{name:"line-opacity",type:s.zeroOneNumber},{name:"line-dash-pattern",type:s.numbers},{name:"line-dash-offset",type:s.number},{name:"line-gradient-stop-colors",type:s.colors},{name:"line-gradient-stop-positions",type:s.percentages},{name:"curve-style",type:s.curveStyle,triggersBounds:o.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:s.zeroOneNumber,triggersBounds:o.any},{name:"source-endpoint",type:s.edgeEndpoint,triggersBounds:o.any},{name:"target-endpoint",type:s.edgeEndpoint,triggersBounds:o.any},{name:"control-point-step-size",type:s.size,triggersBounds:o.any},{name:"control-point-distances",type:s.bidirectionalSizes,triggersBounds:o.any},{name:"control-point-weights",type:s.numbers,triggersBounds:o.any},{name:"segment-distances",type:s.bidirectionalSizes,triggersBounds:o.any},{name:"segment-weights",type:s.numbers,triggersBounds:o.any},{name:"taxi-turn",type:s.bidirectionalSizeMaybePercent,triggersBounds:o.any},{name:"taxi-turn-min-distance",type:s.size,triggersBounds:o.any},{name:"taxi-direction",type:s.axisDirection,triggersBounds:o.any},{name:"edge-distances",type:s.edgeDistances,triggersBounds:o.any},{name:"arrow-scale",type:s.positiveNumber,triggersBounds:o.any},{name:"loop-direction",type:s.angle,triggersBounds:o.any},{name:"loop-sweep",type:s.angle,triggersBounds:o.any},{name:"source-distance-from-node",type:s.size,triggersBounds:o.any},{name:"target-distance-from-node",type:s.size,triggersBounds:o.any}],D=[{name:"ghost",type:s.bool,triggersBounds:o.any},{name:"ghost-offset-x",type:s.bidirectionalSize,triggersBounds:o.any},{name:"ghost-offset-y",type:s.bidirectionalSize,triggersBounds:o.any},{name:"ghost-opacity",type:s.zeroOneNumber}],C=[{name:"selection-box-color",type:s.color},{name:"selection-box-opacity",type:s.zeroOneNumber},{name:"selection-box-border-color",type:s.color},{name:"selection-box-border-width",type:s.size},{name:"active-bg-color",type:s.color},{name:"active-bg-opacity",type:s.zeroOneNumber},{name:"active-bg-size",type:s.size},{name:"outside-texture-bg-color",type:s.color},{name:"outside-texture-bg-opacity",type:s.zeroOneNumber}],N=[];no.pieBackgroundN=16,N.push({name:"pie-size",type:s.sizeMaybePercent});for(var L=1;L<=no.pieBackgroundN;L++)N.push({name:"pie-"+L+"-background-color",type:s.color}),N.push({name:"pie-"+L+"-background-size",type:s.percent}),N.push({name:"pie-"+L+"-background-opacity",type:s.zeroOneNumber});var k=[],S=no.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:s.arrowShape,triggersBounds:o.any},{name:"arrow-color",type:s.color},{name:"arrow-fill",type:s.arrowFill},{name:"arrow-width",type:s.arrowWidth}].forEach((function(e){S.forEach((function(t){var n=t+"-"+e.name,r=e.type,i=e.triggersBounds;k.push({name:n,type:r,triggersBounds:i})}))}),{});var I=no.properties=[].concat(p,y,g,f,v,D,d,h,l,u,c,b,x,w,E,N,_,T,k,C),M=no.propertyGroups={behavior:p,transition:y,visibility:g,overlay:f,underlay:v,ghost:D,commonLabel:d,labelDimensions:h,mainLabel:l,sourceLabel:u,targetLabel:c,nodeBody:b,nodeBorder:x,nodeOutline:w,backgroundImage:E,pie:N,compound:_,edgeLine:T,edgeArrow:k,core:C},O=no.propertyGroupNames={};(no.propertyGroupKeys=Object.keys(M)).forEach((function(e){O[e]=M[e].map((function(e){return e.name})),M[e].forEach((function(t){return t.groupKey=e}))}));var P=no.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];no.propertyNames=I.map((function(e){return e.name}));for(var R=0;R<I.length;R++){var B=I[R];I[B.name]=B}for(var F=0;F<P.length;F++){var G=P[F],Y=I[G.pointsTo],X={name:G.name,alias:!0,pointsTo:Y};I.push(X),I[G.name]=X}}(),no.getDefaultProperty=function(e){return this.getDefaultProperties()[e]},no.getDefaultProperties=function(){var e=this._private;if(null!=e.defaultProperties)return e.defaultProperties;for(var t=Q({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,events:"yes","text-events":"no","text-valign":"top","text-halign":"center","text-justification":"auto","line-height":1,color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-overflow-wrap":"whitespace","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"overlay-shape":"round-rectangle","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-fill":"solid","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-image-containment":"inside","background-image-smoothing":"yes","background-position-x":"50%","background-position-y":"50%","background-offset-x":0,"background-offset-y":0,"background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid","outline-color":"#999","outline-opacity":1,"outline-width":0,"outline-offset":0,"outline-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce((function(e,t){for(var n=1;n<=no.pieBackgroundN;n++){var r=t.name.replace("{{i}}",n),i=t.value;e[r]=i}return e}),{}),{"line-style":"solid","line-color":"#999","line-fill":"solid","line-cap":"butt","line-opacity":1,"line-gradient-stop-colors":"#999","line-gradient-stop-positions":"0%","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"taxi-turn":"50%","taxi-turn-min-distance":10,"taxi-direction":"auto","edge-distances":"intersection","curve-style":"haystack","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node","line-dash-pattern":[6,3],"line-dash-offset":0},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"},{name:"arrow-width",value:1}].reduce((function(e,t){return no.arrowPrefixes.forEach((function(n){var r=n+"-"+t.name,i=t.value;e[r]=i})),e}),{})),n={},r=0;r<this.properties.length;r++){var i=this.properties[r];if(!i.pointsTo){var a=i.name,o=t[a],s=this.parse(a,o);n[a]=s}}return e.defaultProperties=n,e.defaultProperties},no.addDefaultStylesheet=function(){this.selector(":parent").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3}).selector(":loop").css({"curve-style":"bezier"}).selector("edge:compound").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector(":parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}),this.defaultLength=this.length};var ro={parse:function(e,t,n,r){var i=this;if(L(t))return i.parseImplWarn(e,t,n,r);var a,o=ve(e,""+t,n?"t":"f","mapping"===r||!0===r||!1===r||null==r?"dontcare":r),s=i.propCache=i.propCache||[];return(a=s[o])||(a=s[o]=i.parseImplWarn(e,t,n,r)),(n||"mapping"===r)&&(a=Le(a))&&(a.value=Le(a.value)),a},parseImplWarn:function(e,t,n,r){var i=this.parseImpl(e,t,n,r);return i||null==t||Ae("The style property `".concat(e,": ").concat(t,"` is invalid")),!i||"width"!==i.name&&"height"!==i.name||"label"!==t||Ae("The style value of `label` is deprecated for `"+i.name+"`"),i}};ro.parseImpl=function(e,t,n,r){var i=this;e=X(e);var a=i.properties[e],o=t,s=i.types;if(!a)return null;if(void 0===t)return null;a.alias&&(a=a.pointsTo,e=a.name);var l=A(t);l&&(t=t.trim());var u,c,h=a.type;if(!h)return null;if(n&&(""===t||null===t))return{name:e,value:t,bypass:!0,deleteBypass:!0};if(L(t))return{name:e,value:t,strValue:"fn",mapped:s.fn,bypass:n};if(!l||r||t.length<7||"a"!==t[1]);else{if(t.length>=7&&"d"===t[0]&&(u=new RegExp(s.data.regex).exec(t))){if(n)return!1;var d=s.data;return{name:e,value:u,strValue:""+t,mapped:d,field:u[1],bypass:n}}if(t.length>=10&&"m"===t[0]&&(c=new RegExp(s.mapData.regex).exec(t))){if(n)return!1;if(h.multiple)return!1;var p=s.mapData;if(!h.color&&!h.number)return!1;var g=this.parse(e,c[4]);if(!g||g.mapped)return!1;var f=this.parse(e,c[5]);if(!f||f.mapped)return!1;if(g.pfValue===f.pfValue||g.strValue===f.strValue)return Ae("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+g.strValue+"`"),this.parse(e,g.strValue);if(h.color){var v=g.value,y=f.value;if(!(v[0]!==y[0]||v[1]!==y[1]||v[2]!==y[2]||v[3]!==y[3]&&(null!=v[3]&&1!==v[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:c,strValue:""+t,mapped:p,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:g.value,valueMax:f.value,bypass:n}}}if(h.multiple&&"multiple"!==r){var m;if(m=l?t.split(/\s+/):k(t)?t:[t],h.evenMultiple&&m.length%2!=0)return null;for(var b=[],x=[],w=[],E="",_=!1,T=0;T<m.length;T++){var D=i.parse(e,m[T],n,"multiple");_=_||A(D.value),b.push(D.value),w.push(null!=D.pfValue?D.pfValue:D.value),x.push(D.units),E+=(T>0?" ":"")+D.strValue}return h.validate&&!h.validate(b,x)?null:h.singleEnum&&_?1===b.length&&A(b[0])?{name:e,value:b[0],strValue:b[0],bypass:n}:null:{name:e,value:b,pfValue:w,strValue:E,bypass:n,units:x}}var C,N,S=function(){for(var r=0;r<h.enums.length;r++){if(h.enums[r]===t)return{name:e,value:t,strValue:""+t,bypass:n}}return null};if(h.number){var M,O="px";if(h.units&&(M=h.units),h.implicitUnits&&(O=h.implicitUnits),!h.unitless)if(l){var P="px|em"+(h.allowPercent?"|\\%":"");M&&(P=M);var R=t.match("^("+q+")("+P+")?$");R&&(t=R[1],M=R[2]||O)}else M&&!h.implicitUnits||(M=O);if(t=parseFloat(t),isNaN(t)&&void 0===h.enums)return null;if(isNaN(t)&&void 0!==h.enums)return t=o,S();if(h.integer&&(!I(N=t)||Math.floor(N)!==N))return null;if(void 0!==h.min&&(t<h.min||h.strictMin&&t===h.min)||void 0!==h.max&&(t>h.max||h.strictMax&&t===h.max))return null;var B={name:e,value:t,strValue:""+t+(M||""),units:M,bypass:n};return h.unitless||"px"!==M&&"em"!==M?B.pfValue=t:B.pfValue="px"!==M&&M?this.getEmSizeInPixels()*t:t,"ms"!==M&&"s"!==M||(B.pfValue="ms"===M?t:1e3*t),"deg"!==M&&"rad"!==M||(B.pfValue="rad"===M?t:(C=t,Math.PI*C/180)),"%"===M&&(B.pfValue=t/100),B}if(h.propList){var F=[],z=""+t;if("none"===z);else{for(var G=z.split(/\s*,\s*|\s+/),Y=0;Y<G.length;Y++){var V=G[Y].trim();i.properties[V]?F.push(V):Ae("`"+V+"` is not a valid property name")}if(0===F.length)return null}return{name:e,value:F,strValue:0===F.length?"none":F.join(" "),bypass:n}}if(h.color){var U=J(t);return U?{name:e,value:U,pfValue:U,strValue:"rgb("+U[0]+","+U[1]+","+U[2]+")",bypass:n}:null}if(h.regex||h.regexes){if(h.enums){var j=S();if(j)return j}for(var H=h.regexes?h.regexes:[h.regex],W=0;W<H.length;W++){var $=new RegExp(H[W]).exec(t);if($)return{name:e,value:h.singleRegexMatchValue?$[1]:$,strValue:""+t,bypass:n}}return null}return h.string?{name:e,value:""+t,strValue:""+t,bypass:n}:h.enums?S():null};var io=function e(t){if(!(this instanceof e))return new e(t);B(t)?(this._private={cy:t,coreStyle:{}},this.length=0,this.resetToDefault()):Ce("A style must have a core reference")},ao=io.prototype;ao.instanceString=function(){return"style"},ao.clear=function(){for(var e=this._private,t=e.cy.elements(),n=0;n<this.length;n++)this[n]=void 0;return this.length=0,e.contextStyles={},e.propDiffs={},this.cleanElements(t,!0),t.forEach((function(e){var t=e[0]._private;t.styleDirty=!0,t.appliedInitStyle=!1})),this},ao.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this},ao.core=function(e){return this._private.coreStyle[e]||this.getDefaultProperty(e)},ao.selector=function(e){var t="core"===e?null:new Hr(e),n=this.length++;return this[n]={selector:t,properties:[],mappedProperties:[],index:n},this},ao.css=function(){var e=arguments;if(1===e.length)for(var t=e[0],n=0;n<this.properties.length;n++){var r=this.properties[n],i=t[r.name];void 0===i&&(i=t[V(r.name)]),void 0!==i&&this.cssRule(r.name,i)}else 2===e.length&&this.cssRule(e[0],e[1]);return this},ao.style=ao.css,ao.cssRule=function(e,t){var n=this.parse(e,t);if(n){var r=this.length-1;this[r].properties.push(n),this[r].properties[n.name]=n,n.name.match(/pie-(\d+)-background-size/)&&n.value&&(this._private.hasPie=!0),n.mapped&&this[r].mappedProperties.push(n),!this[r].selector&&(this._private.coreStyle[n.name]=n)}return this},ao.append=function(e){return F(e)?e.appendToStyle(this):k(e)?this.appendFromJson(e):A(e)&&this.appendFromString(e),this},io.fromJson=function(e,t){var n=new io(e);return n.fromJson(t),n},io.fromString=function(e,t){return new io(e).fromString(t)},[$a,Za,Qa,Ja,eo,to,no,ro].forEach((function(e){Q(ao,e)})),io.types=ao.types,io.properties=ao.properties,io.propertyGroups=ao.propertyGroups,io.propertyGroupNames=ao.propertyGroupNames,io.propertyGroupKeys=ao.propertyGroupKeys;var oo={style:function(e){e&&this.setStyle(e).update();return this._private.style},setStyle:function(e){var t=this._private;return F(e)?t.style=e.generateStyle(this):k(e)?t.style=io.fromJson(this,e):A(e)?t.style=io.fromString(this,e):t.style=io(this),t.style},updateStyle:function(){this.mutableElements().updateStyle()}},so={autolock:function(e){return void 0===e?this._private.autolock:(this._private.autolock=!!e,this)},autoungrabify:function(e){return void 0===e?this._private.autoungrabify:(this._private.autoungrabify=!!e,this)},autounselectify:function(e){return void 0===e?this._private.autounselectify:(this._private.autounselectify=!!e,this)},selectionType:function(e){var t=this._private;return null==t.selectionType&&(t.selectionType="single"),void 0===e?t.selectionType:("additive"!==e&&"single"!==e||(t.selectionType=e),this)},panningEnabled:function(e){return void 0===e?this._private.panningEnabled:(this._private.panningEnabled=!!e,this)},userPanningEnabled:function(e){return void 0===e?this._private.userPanningEnabled:(this._private.userPanningEnabled=!!e,this)},zoomingEnabled:function(e){return void 0===e?this._private.zoomingEnabled:(this._private.zoomingEnabled=!!e,this)},userZoomingEnabled:function(e){return void 0===e?this._private.userZoomingEnabled:(this._private.userZoomingEnabled=!!e,this)},boxSelectionEnabled:function(e){return void 0===e?this._private.boxSelectionEnabled:(this._private.boxSelectionEnabled=!!e,this)},pan:function(){var e,t,n,r,i,a=arguments,o=this._private.pan;switch(a.length){case 0:return o;case 1:if(A(a[0]))return o[e=a[0]];if(S(a[0])){if(!this._private.panningEnabled)return this;r=(n=a[0]).x,i=n.y,I(r)&&(o.x=r),I(i)&&(o.y=i),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;t=a[1],"x"!==(e=a[0])&&"y"!==e||!I(t)||(o[e]=t),this.emit("pan viewport")}return this.notify("viewport"),this},panBy:function(e,t){var n,r,i,a,o,s=arguments,l=this._private.pan;if(!this._private.panningEnabled)return this;switch(s.length){case 1:S(e)&&(a=(i=s[0]).x,o=i.y,I(a)&&(l.x+=a),I(o)&&(l.y+=o),this.emit("pan viewport"));break;case 2:r=t,"x"!==(n=e)&&"y"!==n||!I(r)||(l[n]+=r),this.emit("pan viewport")}return this.notify("viewport"),this},fit:function(e,t){var n=this.getFitViewport(e,t);if(n){var r=this._private;r.zoom=n.zoom,r.pan=n.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},getFitViewport:function(e,t){if(I(e)&&void 0===t&&(t=e,e=void 0),this._private.panningEnabled&&this._private.zoomingEnabled){var n,r;if(A(e)){var i=e;e=this.$(i)}else if(S(r=e)&&I(r.x1)&&I(r.x2)&&I(r.y1)&&I(r.y2)){var a=e;(n={x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2}).w=n.x2-n.x1,n.h=n.y2-n.y1}else O(e)||(e=this.mutableElements());if(!O(e)||!e.empty()){n=n||e.boundingBox();var o,s=this.width(),l=this.height();if(t=I(t)?t:0,!isNaN(s)&&!isNaN(l)&&s>0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:o=(o=(o=Math.min((s-2*t)/n.w,(l-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:o)<this._private.minZoom?this._private.minZoom:o,pan:{x:(s-o*(n.x1+n.x2))/2,y:(l-o*(n.y1+n.y2))/2}}}}},zoomRange:function(e,t){var n=this._private;if(null==t){var r=e;e=r.min,t=r.max}return I(e)&&I(t)&&e<=t?(n.minZoom=e,n.maxZoom=t):I(e)&&void 0===t&&e<=n.maxZoom?n.minZoom=e:I(t)&&void 0===e&&t>=n.minZoom&&(n.maxZoom=t),this},minZoom:function(e){return void 0===e?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return void 0===e?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t,n,r=this._private,i=r.pan,a=r.zoom,o=!1;if(r.zoomingEnabled||(o=!0),I(e)?n=e:S(e)&&(n=e.level,null!=e.position?t=rt(e.position,a,i):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)<r.minZoom?r.minZoom:n,o||!I(n)||n===a||null!=t&&(!I(t.x)||!I(t.y)))return null;if(null!=t){var s=i,l=a,u=n;return{zoomed:!0,panned:!0,zoom:u,pan:{x:-u/l*(t.x-s.x)+t.x,y:-u/l*(t.y-s.y)+t.y}}}return{zoomed:!0,panned:!1,zoom:n,pan:i}},zoom:function(e){if(void 0===e)return this._private.zoom;var t=this.getZoomedViewport(e),n=this._private;return null!=t&&t.zoomed?(n.zoom=t.zoom,t.panned&&(n.pan.x=t.pan.x,n.pan.y=t.pan.y),this.emit("zoom"+(t.panned?" pan":"")+" viewport"),this.notify("viewport"),this):this},viewport:function(e){var t=this._private,n=!0,r=!0,i=[],a=!1,o=!1;if(!e)return this;if(I(e.zoom)||(n=!1),S(e.pan)||(r=!1),!n&&!r)return this;if(n){var s=e.zoom;s<t.minZoom||s>t.maxZoom||!t.zoomingEnabled?a=!0:(t.zoom=s,i.push("zoom"))}if(r&&(!a||!e.cancelOnFailedZoom)&&t.panningEnabled){var l=e.pan;I(l.x)&&(t.pan.x=l.x,o=!1),I(l.y)&&(t.pan.y=l.y,o=!1),o||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(A(e)){var n=e;e=this.mutableElements().filter(n)}else O(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),i=this.width(),a=this.height();return{x:(i-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(a-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container,i=this;return n.sizeCache=n.sizeCache||(r?(e=i.window().getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){return e?(this._private.multiClickDebounceTime=e,this):this._private.multiClickDebounceTime}};so.centre=so.center,so.autolockNodes=so.autolock,so.autoungrabifyNodes=so.autoungrabify;var lo={data:ur.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:ur.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:ur.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ur.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};lo.attr=lo.data,lo.removeAttr=lo.removeData;var uo=function(e){var t=this,n=(e=Q({},e)).container;n&&!M(n)&&M(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var i=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=t;var a=void 0!==w&&void 0!==n&&!e.headless,o=e;o.layout=Q({name:a?"grid":"null"},o.layout),o.renderer=Q({name:a?"canvas":"null"},o.renderer);var s=function(e,t,n){return void 0!==t?t:void 0!==n?n:e},l=this._private={container:n,ready:!1,options:o,elements:new Da(this),listeners:[],aniEles:new Da(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,o.zoomingEnabled),userZoomingEnabled:s(!0,o.userZoomingEnabled),panningEnabled:s(!0,o.panningEnabled),userPanningEnabled:s(!0,o.userPanningEnabled),boxSelectionEnabled:s(!0,o.boxSelectionEnabled),autolock:s(!1,o.autolock,o.autolockNodes),autoungrabify:s(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:s(!1,o.autounselectify),styleEnabled:void 0===o.styleEnabled?a:o.styleEnabled,zoom:I(o.zoom)?o.zoom:1,pan:{x:S(o.pan)&&I(o.pan.x)?o.pan.x:0,y:S(o.pan)&&I(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:s(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});l.styleEnabled&&t.setStyle([]);var u=Q({},o,o.renderer);t.initRenderer(u);!function(e,t){if(e.some(G))return rr.all(e).then(t);t(e)}([o.style,o.elements],(function(e){var n=e[0],a=e[1];l.styleEnabled&&t.style().append(n),function(e,n,r){t.notifications(!1);var i=t.mutableElements();i.length>0&&i.remove(),null!=e&&(S(e)||k(e))&&t.add(e),t.one("layoutready",(function(e){t.notifications(!0),t.emit(e),t.one("load",n),t.emitAndNotify("load")})).one("layoutstop",(function(){t.one("done",r),t.emit("done")}));var a=Q({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()}(a,(function(){t.startAnimationLoop(),l.ready=!0,L(o.ready)&&t.on("ready",o.ready);for(var e=0;e<i.length;e++){var n=i[e];t.on("ready",n)}r&&(r.readies=[]),t.emit("ready")}),o.done)}))},co=uo.prototype;Q(co,{instanceString:function(){return"core"},isReady:function(){return this._private.ready},destroyed:function(){return this._private.destroyed},ready:function(e){return this.isReady()?this.emitter().emit("ready",[],e):this.on("ready",e),this},destroy:function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit("destroy"),e._private.destroyed=!0,e},hasElementWithId:function(e){return this._private.elements.hasElementWithId(e)},getElementById:function(e){return this._private.elements.getElementById(e)},hasCompoundNodes:function(){return this._private.hasCompoundNodes},headless:function(){return this._private.renderer.isHeadless()},styleEnabled:function(){return this._private.styleEnabled},addToPool:function(e){return this._private.elements.merge(e),this},removeFromPool:function(e){return this._private.elements.unmerge(e),this},container:function(){return this._private.container||null},window:function(){if(null==this._private.container)return w;var e=this._private.container.ownerDocument;return void 0===e||null==e?w:e.defaultView||w},mount:function(e){if(null!=e){var t=this,n=t._private,r=n.options;return!M(e)&&M(e[0])&&(e=e[0]),t.stopAnimationLoop(),t.destroyRenderer(),n.container=e,n.styleEnabled=!0,t.invalidateSize(),t.initRenderer(Q({},r,r.renderer,{name:"null"===r.renderer.name?"canvas":r.renderer.name})),t.startAnimationLoop(),t.style(r.style),t.emit("mount"),t}},unmount:function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:"null"}),e.emit("unmount"),e},options:function(){return Le(this._private.options)},json:function(e){var t=this,n=t._private,r=t.mutableElements();if(S(e)){if(t.startBatch(),e.elements){var i={},a=function(e,n){for(var r=[],a=[],o=0;o<e.length;o++){var s=e[o];if(s.data.id){var l=""+s.data.id,u=t.getElementById(l);i[l]=!0,0!==u.length?a.push({ele:u,json:s}):n?(s.group=n,r.push(s)):r.push(s)}else Ae("cy.json() cannot handle elements without an ID attribute")}t.add(r);for(var c=0;c<a.length;c++){var h=a[c],d=h.ele,p=h.json;d.json(p)}};if(k(e.elements))a(e.elements);else for(var o=["nodes","edges"],s=0;s<o.length;s++){var l=o[s],u=e.elements[l];k(u)&&a(u,l)}var c=t.collection();r.filter((function(e){return!i[e.id()]})).forEach((function(e){e.isParent()?c.merge(e):e.remove()})),c.forEach((function(e){return e.children().move({parent:null})})),c.forEach((function(e){return function(e){return t.getElementById(e.id())}(e).remove()}))}e.style&&t.style(e.style),null!=e.zoom&&e.zoom!==n.zoom&&t.zoom(e.zoom),e.pan&&(e.pan.x===n.pan.x&&e.pan.y===n.pan.y||t.pan(e.pan)),e.data&&t.data(e.data);for(var h=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],d=0;d<h.length;d++){var p=h[d];null!=e[p]&&t[p](e[p])}return t.endBatch(),this}var g={};!!e?g.elements=this.elements().map((function(e){return e.json()})):(g.elements={},r.forEach((function(e){var t=e.group();g.elements[t]||(g.elements[t]=[]),g.elements[t].push(e.json())}))),this._private.styleEnabled&&(g.style=t.style().json()),g.data=Le(t.data());var f=n.options;return g.zoomingEnabled=n.zoomingEnabled,g.userZoomingEnabled=n.userZoomingEnabled,g.zoom=n.zoom,g.minZoom=n.minZoom,g.maxZoom=n.maxZoom,g.panningEnabled=n.panningEnabled,g.userPanningEnabled=n.userPanningEnabled,g.pan=Le(n.pan),g.boxSelectionEnabled=n.boxSelectionEnabled,g.renderer=Le(f.renderer),g.hideEdgesOnViewport=f.hideEdgesOnViewport,g.textureOnViewport=f.textureOnViewport,g.wheelSensitivity=f.wheelSensitivity,g.motionBlur=f.motionBlur,g.multiClickDebounceTime=f.multiClickDebounceTime,g}}),co.$id=co.getElementById,[Na,za,Xa,Va,Ua,ja,Ha,Wa,oo,so,lo].forEach((function(e){Q(co,e)}));var ho={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}},po={maximal:!1,acyclic:!1},go=function(e){return e.scratch("breadthfirst")},fo=function(e,t){return e.scratch("breadthfirst",t)};function vo(e){this.options=Q({},ho,po,e)}vo.prototype.run=function(){var e,t=this.options,n=t,r=t.cy,i=n.eles,a=i.nodes().filter((function(e){return!e.isParent()})),o=i,s=n.directed,l=n.acyclic||n.maximal||n.maximalAdjustments>0,u=ft(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(O(n.roots))e=n.roots;else if(k(n.roots)){for(var c=[],h=0;h<n.roots.length;h++){var d=n.roots[h],p=r.getElementById(d);c.push(p)}e=r.collection(c)}else if(A(n.roots))e=r.$(n.roots);else if(s)e=a.roots();else{var g=i.components();e=r.collection();for(var f=function(t){var n=g[t],r=n.maxDegree(!1),i=n.filter((function(e){return e.degree(!1)===r}));e=e.add(i)},v=0;v<g.length;v++)f(v)}var y=[],m={},b=function(e,t){null==y[t]&&(y[t]=[]);var n=y[t].length;y[t].push(e),fo(e,{index:n,depth:t})};o.bfs({roots:e,directed:n.directed,visit:function(e,t,n,r,i){var a=e[0],o=a.id();b(a,i),m[o]=!0}});for(var x=[],w=0;w<a.length;w++){var E=a[w];m[E.id()]||x.push(E)}var _=function(e){for(var t=y[e],n=0;n<t.length;n++){var r=t[n];null!=r?fo(r,{depth:e,index:n}):(t.splice(n,1),n--)}},T=function(){for(var e=0;e<y.length;e++)_(e)},D=function(e,t){for(var r=go(e),a=e.incomers().filter((function(e){return e.isNode()&&i.has(e)})),o=-1,s=e.id(),l=0;l<a.length;l++){var u=a[l],c=go(u);o=Math.max(o,c.depth)}if(r.depth<=o){if(!n.acyclic&&t[s])return null;var h=o+1;return function(e,t){var n=go(e),r=n.depth,i=n.index;y[r][i]=null,b(e,t)}(e,h),t[s]=h,!0}return!1};if(s&&l){var C=[],N={},L=function(e){return C.push(e)};for(a.forEach((function(e){return C.push(e)}));C.length>0;){var S=C.shift(),I=D(S,N);if(I)S.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(L);else if(null===I){Ae("Detected double maximal shift for node `"+S.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}T();var M=0;if(n.avoidOverlap)for(var P=0;P<a.length;P++){var R=a[P].layoutDimensions(n),B=R.w,F=R.h;M=Math.max(M,B,F)}var z={},G=function(e){if(z[e.id()])return z[e.id()];for(var t=go(e).depth,n=e.neighborhood(),r=0,i=0,o=0;o<n.length;o++){var s=n[o];if(!s.isEdge()&&!s.isParent()&&a.has(s)){var l=go(s);if(null!=l){var u=l.index,c=l.depth;if(null!=u&&null!=c){var h=y[c].length;c<t&&(r+=u/h,i++)}}}}return r/=i=Math.max(1,i),0===i&&(r=0),z[e.id()]=r,r},Y=function(e,t){var n=G(e)-G(t);return 0===n?Z(e.id(),t.id()):n};void 0!==n.depthSort&&(Y=n.depthSort);for(var X=0;X<y.length;X++)y[X].sort(Y),_(X);for(var V=[],U=0;U<x.length;U++)V.push(x[U]);y.unshift(V),T();for(var j=0,q=0;q<y.length;q++)j=Math.max(y[q].length,j);var H=u.x1+u.w/2,W=u.x1+u.h/2,$=y.reduce((function(e,t){return Math.max(e,t.length)}),0);return i.nodes().layoutPositions(this,n,(function(e){var t=go(e),r=t.depth,i=t.index,a=y[r].length,o=Math.max(u.w/((n.grid?$:a)+1),M),s=Math.max(u.h/(y.length+1),M),l=Math.min(u.w/2/y.length,u.h/2/y.length);if(l=Math.max(l,M),n.circle){var c=l*r+l-(y.length>0&&y[0].length<=3?l/2:0),h=2*Math.PI/y[r].length*i;return 0===r&&1===y[0].length&&(c=1),{x:H+c*Math.cos(h),y:W+c*Math.sin(h)}}return{x:H+(i+1-(a+1)/2)*o,y:(r+1)*s}})),this};var yo={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function mo(e){this.options=Q({},yo,e)}mo.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,a=r.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));for(var o,s=ft(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l=s.x1+s.w/2,u=s.y1+s.h/2,c=(void 0===t.sweep?2*Math.PI-2*Math.PI/a.length:t.sweep)/Math.max(1,a.length-1),h=0,d=0;d<a.length;d++){var p=a[d].layoutDimensions(t),g=p.w,f=p.h;h=Math.max(h,g,f)}if(o=I(t.radius)?t.radius:a.length<=1?0:Math.min(s.h,s.w)/2-h,a.length>1&&t.avoidOverlap){h*=1.75;var v=Math.cos(c)-Math.cos(0),y=Math.sin(c)-Math.sin(0),m=Math.sqrt(h*h/(v*v+y*y));o=Math.max(m,o)}return r.nodes().layoutPositions(this,t,(function(e,n){var r=t.startAngle+n*c*(i?1:-1),a=o*Math.cos(r),s=o*Math.sin(r);return{x:l+a,y:u+s}})),this};var bo,xo={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function wo(e){this.options=Q({},xo,e)}wo.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,i=t.eles,a=i.nodes().not(":parent"),o=ft(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s=o.x1+o.w/2,l=o.y1+o.h/2,u=[],c=0,h=0;h<a.length;h++){var d,p=a[h];d=t.concentric(p),u.push({value:d,node:p}),p._private.scratch.concentric=d}a.updateStyle();for(var g=0;g<a.length;g++){var f=a[g].layoutDimensions(t);c=Math.max(c,f.w,f.h)}u.sort((function(e,t){return t.value-e.value}));for(var v=t.levelWidth(a),y=[[]],m=y[0],b=0;b<u.length;b++){var x=u[b];if(m.length>0)Math.abs(m[0].value-x.value)>=v&&(m=[],y.push(m));m.push(x)}var w=c+t.minNodeSpacing;if(!t.avoidOverlap){var E=y.length>0&&y[0].length>1,_=(Math.min(o.w,o.h)/2-w)/(y.length+E?1:0);w=Math.min(w,_)}for(var T=0,D=0;D<y.length;D++){var C=y[D],N=void 0===t.sweep?2*Math.PI-2*Math.PI/C.length:t.sweep,A=C.dTheta=N/Math.max(1,C.length-1);if(C.length>1&&t.avoidOverlap){var L=Math.cos(A)-Math.cos(0),k=Math.sin(A)-Math.sin(0),S=Math.sqrt(w*w/(L*L+k*k));T=Math.max(S,T)}C.r=T,T+=w}if(t.equidistant){for(var I=0,M=0,O=0;O<y.length;O++){var P=y[O].r-M;I=Math.max(I,P)}M=0;for(var R=0;R<y.length;R++){var B=y[R];0===R&&(M=B.r),B.r=M,M+=I}}for(var F={},z=0;z<y.length;z++)for(var G=y[z],Y=G.dTheta,X=G.r,V=0;V<G.length;V++){var U=G[V],j=t.startAngle+(n?1:-1)*Y*V,q={x:s+X*Math.cos(j),y:l+X*Math.sin(j)};F[U.node.id()]=q}return i.nodes().layoutPositions(this,t,(function(e){var t=e.id();return F[t]})),this};var Eo={ready:function(){},stop:function(){},animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:function(e,t){return!0},animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:function(e){return 2048},nodeOverlap:4,idealEdgeLength:function(e){return 32},edgeElasticity:function(e){return 32},nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};function _o(e){this.options=Q({},Eo,e),this.options.layout=this;var t=this.options.eles.nodes(),n=this.options.eles.edges().filter((function(e){var n=e.source().data("id"),r=e.target().data("id"),i=t.some((function(e){return e.data("id")===n})),a=t.some((function(e){return e.data("id")===r}));return!i||!a}));this.options.eles=this.options.eles.not(n)}_o.prototype.run=function(){var e=this.options,t=e.cy,n=this;n.stopped=!1,!0!==e.animate&&!1!==e.animate||n.emit({type:"layoutstart",layout:n}),bo=!0===e.debug;var r=To(t,n,e);bo&&undefined(r),e.randomize&&No(r);var i=se(),a=function(){Lo(r,t,e),!0===e.fit&&t.fit(e.padding)},o=function(t){return!(n.stopped||t>=e.numIter)&&(ko(r,e),r.temperature=r.temperature*e.coolingFactor,!(r.temperature<e.minTemp))},s=function(){if(!0===e.animate||!1===e.animate)a(),n.one("layoutstop",e.stop),n.emit({type:"layoutstop",layout:n});else{var t=e.eles.nodes(),i=Ao(r,e,t);t.layoutPositions(n,e,i)}},l=0,u=!0;if(!0===e.animate){!function t(){for(var n=0;u&&n<e.refresh;)u=o(l),l++,n++;u?(se()-i>=e.animationThreshold&&a(),oe(t)):(Xo(r,e),s())}()}else{for(;u;)u=o(l),l++;Xo(r,e),s()}return this},_o.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},_o.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var To=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a=ft(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:a.w,clientHeight:a.h,boundingBox:a},s=n.eles.components(),l={},u=0;u<s.length;u++)for(var c=s[u],h=0;h<c.length;h++){l[c[h].id()]=u}for(u=0;u<o.nodeSize;u++){var d=(y=i[u]).layoutDimensions(n);(O={}).isLocked=y.locked(),O.id=y.data("id"),O.parentId=y.data("parent"),O.cmptId=l[y.id()],O.children=[],O.positionX=y.position("x"),O.positionY=y.position("y"),O.offsetX=0,O.offsetY=0,O.height=d.w,O.width=d.h,O.maxX=O.positionX+O.width/2,O.minX=O.positionX-O.width/2,O.maxY=O.positionY+O.height/2,O.minY=O.positionY-O.height/2,O.padLeft=parseFloat(y.style("padding")),O.padRight=parseFloat(y.style("padding")),O.padTop=parseFloat(y.style("padding")),O.padBottom=parseFloat(y.style("padding")),O.nodeRepulsion=L(n.nodeRepulsion)?n.nodeRepulsion(y):n.nodeRepulsion,o.layoutNodes.push(O),o.idToIndex[O.id]=u}var p=[],g=0,f=-1,v=[];for(u=0;u<o.nodeSize;u++){var y,m=(y=o.layoutNodes[u]).parentId;null!=m?o.layoutNodes[o.idToIndex[m]].children.push(y.id):(p[++f]=y.id,v.push(y.id))}for(o.graphSet.push(v);g<=f;){var b=p[g++],x=o.idToIndex[b],w=o.layoutNodes[x].children;if(w.length>0){o.graphSet.push(w);for(u=0;u<w.length;u++)p[++f]=w[u]}}for(u=0;u<o.graphSet.length;u++){var E=o.graphSet[u];for(h=0;h<E.length;h++){var _=o.idToIndex[E[h]];o.indexToGraph[_]=u}}for(u=0;u<o.edgeSize;u++){var T=r[u],D={};D.id=T.data("id"),D.sourceId=T.data("source"),D.targetId=T.data("target");var C=L(n.idealEdgeLength)?n.idealEdgeLength(T):n.idealEdgeLength,N=L(n.edgeElasticity)?n.edgeElasticity(T):n.edgeElasticity,A=o.idToIndex[D.sourceId],k=o.idToIndex[D.targetId];if(o.indexToGraph[A]!=o.indexToGraph[k]){for(var S=Do(D.sourceId,D.targetId,o),I=o.graphSet[S],M=0,O=o.layoutNodes[A];-1===I.indexOf(O.id);)O=o.layoutNodes[o.idToIndex[O.parentId]],M++;for(O=o.layoutNodes[k];-1===I.indexOf(O.id);)O=o.layoutNodes[o.idToIndex[O.parentId]],M++;C*=M*n.nestingFactor}D.idealLength=C,D.elasticity=N,o.layoutEdges.push(D)}return o},Do=function(e,t,n){var r=Co(e,t,0,n);return 2>r.count?0:r.graph},Co=function e(t,n,r,i){var a=i.graphSet[r];if(-1<a.indexOf(t)&&-1<a.indexOf(n))return{count:2,graph:r};for(var o=0,s=0;s<a.length;s++){var l=a[s],u=i.idToIndex[l],c=i.layoutNodes[u].children;if(0!==c.length){var h=e(t,n,i.indexToGraph[i.idToIndex[c[0]]],i);if(0!==h.count){if(1!==h.count)return h;if(2===++o)break}}}return{count:o,graph:r}},No=function(e,t){for(var n=e.clientWidth,r=e.clientHeight,i=0;i<e.nodeSize;i++){var a=e.layoutNodes[i];0!==a.children.length||a.isLocked||(a.positionX=Math.random()*n,a.positionY=Math.random()*r)}},Ao=function(e,t,n){var r=e.boundingBox,i={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return t.boundingBox&&(n.forEach((function(t){var n=e.layoutNodes[e.idToIndex[t.data("id")]];i.x1=Math.min(i.x1,n.positionX),i.x2=Math.max(i.x2,n.positionX),i.y1=Math.min(i.y1,n.positionY),i.y2=Math.max(i.y2,n.positionY)})),i.w=i.x2-i.x1,i.h=i.y2-i.y1),function(n,a){var o=e.layoutNodes[e.idToIndex[n.data("id")]];if(t.boundingBox){var s=(o.positionX-i.x1)/i.w,l=(o.positionY-i.y1)/i.h;return{x:r.x1+s*r.w,y:r.y1+l*r.h}}return{x:o.positionX,y:o.positionY}}},Lo=function(e,t,n){var r=n.layout,i=n.eles.nodes(),a=Ao(e,n,i);i.positions(a),!0!==e.ready&&(e.ready=!0,r.one("layoutready",n.ready),r.emit({type:"layoutready",layout:this}))},ko=function(e,t,n){So(e,t),Ro(e),Bo(e,t),Fo(e),zo(e)},So=function(e,t){for(var n=0;n<e.graphSet.length;n++)for(var r=e.graphSet[n],i=r.length,a=0;a<i;a++)for(var o=e.layoutNodes[e.idToIndex[r[a]]],s=a+1;s<i;s++){var l=e.layoutNodes[e.idToIndex[r[s]]];Mo(o,l,e,t)}},Io=function(e){return-e+2*e*Math.random()},Mo=function(e,t,n,r){if(e.cmptId===t.cmptId||n.isCompound){var i=t.positionX-e.positionX,a=t.positionY-e.positionY;0===i&&0===a&&(i=Io(1),a=Io(1));var o=Oo(e,t,i,a);if(o>0)var s=(u=r.nodeOverlap*o)*i/(f=Math.sqrt(i*i+a*a)),l=u*a/f;else{var u,c=Po(e,i,a),h=Po(t,-1*i,-1*a),d=h.x-c.x,p=h.y-c.y,g=d*d+p*p,f=Math.sqrt(g);s=(u=(e.nodeRepulsion+t.nodeRepulsion)/g)*d/f,l=u*p/f}e.isLocked||(e.offsetX-=s,e.offsetY-=l),t.isLocked||(t.offsetX+=s,t.offsetY+=l)}},Oo=function(e,t,n,r){if(n>0)var i=e.maxX-t.minX;else i=t.maxX-e.minX;if(r>0)var a=e.maxY-t.minY;else a=t.maxY-e.minY;return i>=0&&a>=0?Math.sqrt(i*i+a*a):0},Po=function(e,t,n){var r=e.positionX,i=e.positionY,a=e.height||1,o=e.width||1,s=n/t,l=a/o,u={};return 0===t&&0<n||0===t&&0>n?(u.x=r,u.y=i+a/2,u):0<t&&-1*l<=s&&s<=l?(u.x=r+o/2,u.y=i+o*n/2/t,u):0>t&&-1*l<=s&&s<=l?(u.x=r-o/2,u.y=i-o*n/2/t,u):0<n&&(s<=-1*l||s>=l)?(u.x=r+a*t/2/n,u.y=i+a/2,u):0>n&&(s<=-1*l||s>=l)?(u.x=r-a*t/2/n,u.y=i-a/2,u):u},Ro=function(e,t){for(var n=0;n<e.edgeSize;n++){var r=e.layoutEdges[n],i=e.idToIndex[r.sourceId],a=e.layoutNodes[i],o=e.idToIndex[r.targetId],s=e.layoutNodes[o],l=s.positionX-a.positionX,u=s.positionY-a.positionY;if(0!==l||0!==u){var c=Po(a,l,u),h=Po(s,-1*l,-1*u),d=h.x-c.x,p=h.y-c.y,g=Math.sqrt(d*d+p*p),f=Math.pow(r.idealLength-g,2)/r.elasticity;if(0!==g)var v=f*d/g,y=f*p/g;else v=0,y=0;a.isLocked||(a.offsetX+=v,a.offsetY+=y),s.isLocked||(s.offsetX-=v,s.offsetY-=y)}}},Bo=function(e,t){if(0!==t.gravity)for(var n=0;n<e.graphSet.length;n++){var r=e.graphSet[n],i=r.length;if(0===n)var a=e.clientHeight/2,o=e.clientWidth/2;else{var s=e.layoutNodes[e.idToIndex[r[0]]],l=e.layoutNodes[e.idToIndex[s.parentId]];a=l.positionX,o=l.positionY}for(var u=0;u<i;u++){var c=e.layoutNodes[e.idToIndex[r[u]]];if(!c.isLocked){var h=a-c.positionX,d=o-c.positionY,p=Math.sqrt(h*h+d*d);if(p>1){var g=t.gravity*h/p,f=t.gravity*d/p;c.offsetX+=g,c.offsetY+=f}}}}},Fo=function(e,t){var n=[],r=0,i=-1;for(n.push.apply(n,e.graphSet[0]),i+=e.graphSet[0].length;r<=i;){var a=n[r++],o=e.idToIndex[a],s=e.layoutNodes[o],l=s.children;if(0<l.length&&!s.isLocked){for(var u=s.offsetX,c=s.offsetY,h=0;h<l.length;h++){var d=e.layoutNodes[e.idToIndex[l[h]]];d.offsetX+=u,d.offsetY+=c,n[++i]=l[h]}s.offsetX=0,s.offsetY=0}}},zo=function(e,t){for(var n=0;n<e.nodeSize;n++){0<(i=e.layoutNodes[n]).children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0)}for(n=0;n<e.nodeSize;n++){if(!(0<(i=e.layoutNodes[n]).children.length||i.isLocked)){var r=Go(i.offsetX,i.offsetY,e.temperature);i.positionX+=r.x,i.positionY+=r.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,Yo(i,e)}}for(n=0;n<e.nodeSize;n++){var i;0<(i=e.layoutNodes[n]).children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},Go=function(e,t,n){var r=Math.sqrt(e*e+t*t);if(r>n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},Yo=function e(t,n){var r=t.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],a=!1;return(null==i.maxX||t.maxX+i.padRight>i.maxX)&&(i.maxX=t.maxX+i.padRight,a=!0),(null==i.minX||t.minX-i.padLeft<i.minX)&&(i.minX=t.minX-i.padLeft,a=!0),(null==i.maxY||t.maxY+i.padBottom>i.maxY)&&(i.maxY=t.maxY+i.padBottom,a=!0),(null==i.minY||t.minY-i.padTop<i.minY)&&(i.minY=t.minY-i.padTop,a=!0),a?e(i,n):void 0}},Xo=function(e,t){for(var n=e.layoutNodes,r=[],i=0;i<n.length;i++){var a=n[i],o=a.cmptId;(r[o]=r[o]||[]).push(a)}var s=0;for(i=0;i<r.length;i++){if(f=r[i]){f.x1=1/0,f.x2=-1/0,f.y1=1/0,f.y2=-1/0;for(var l=0;l<f.length;l++){var u=f[l];f.x1=Math.min(f.x1,u.positionX-u.width/2),f.x2=Math.max(f.x2,u.positionX+u.width/2),f.y1=Math.min(f.y1,u.positionY-u.height/2),f.y2=Math.max(f.y2,u.positionY+u.height/2)}f.w=f.x2-f.x1,f.h=f.y2-f.y1,s+=f.w*f.h}}r.sort((function(e,t){return t.w*t.h-e.w*e.h}));var c=0,h=0,d=0,p=0,g=Math.sqrt(s)*e.clientWidth/e.clientHeight;for(i=0;i<r.length;i++){var f;if(f=r[i]){for(l=0;l<f.length;l++){(u=f[l]).isLocked||(u.positionX+=c-f.x1,u.positionY+=h-f.y1)}c+=f.w+t.componentSpacing,d+=f.w+t.componentSpacing,p=Math.max(p,f.h),d>g&&(h+=p+t.componentSpacing,c=0,d=0,p=0)}}},Vo={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Uo(e){this.options=Q({},Vo,e)}Uo.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=r.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));var a=ft(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===a.h||0===a.w)r.nodes().layoutPositions(this,t,(function(e){return{x:a.x1,y:a.y1}}));else{var o=i.size(),s=Math.sqrt(o*a.h/a.w),l=Math.round(s),u=Math.round(a.w/a.h*s),c=function(e){if(null==e)return Math.min(l,u);Math.min(l,u)==l?l=e:u=e},h=function(e){if(null==e)return Math.max(l,u);Math.max(l,u)==l?l=e:u=e},d=t.rows,p=null!=t.cols?t.cols:t.columns;if(null!=d&&null!=p)l=d,u=p;else if(null!=d&&null==p)l=d,u=Math.ceil(o/l);else if(null==d&&null!=p)u=p,l=Math.ceil(o/u);else if(u*l>o){var g=c(),f=h();(g-1)*f>=o?c(g-1):(f-1)*g>=o&&h(f-1)}else for(;u*l<o;){var v=c(),y=h();(y+1)*v>=o?h(y+1):c(v+1)}var m=a.w/u,b=a.h/l;if(t.condense&&(m=0,b=0),t.avoidOverlap)for(var x=0;x<i.length;x++){var w=i[x],E=w._private.position;null!=E.x&&null!=E.y||(E.x=0,E.y=0);var _=w.layoutDimensions(t),T=t.avoidOverlapPadding,D=_.w+T,C=_.h+T;m=Math.max(m,D),b=Math.max(b,C)}for(var N={},A=function(e,t){return!!N["c-"+e+"-"+t]},L=function(e,t){N["c-"+e+"-"+t]=!0},k=0,S=0,I=function(){++S>=u&&(S=0,k++)},M={},O=0;O<i.length;O++){var P=i[O],R=t.position(P);if(R&&(void 0!==R.row||void 0!==R.col)){var B={row:R.row,col:R.col};if(void 0===B.col)for(B.col=0;A(B.row,B.col);)B.col++;else if(void 0===B.row)for(B.row=0;A(B.row,B.col);)B.row++;M[P.id()]=B,L(B.row,B.col)}}i.layoutPositions(this,t,(function(e,t){var n,r;if(e.locked()||e.isParent())return!1;var i=M[e.id()];if(i)n=i.col*m+m/2+a.x1,r=i.row*b+b/2+a.y1;else{for(;A(k,S);)I();n=S*m+m/2+a.x1,r=k*b+b/2+a.y1,L(k,S),I()}return{x:n,y:r}}))}return this};var jo={ready:function(){},stop:function(){}};function qo(e){this.options=Q({},jo,e)}qo.prototype.run=function(){var e=this.options,t=e.eles,n=this;return e.cy,n.emit("layoutstart"),t.nodes().positions((function(){return{x:0,y:0}})),n.one("layoutready",e.ready),n.emit("layoutready"),n.one("layoutstop",e.stop),n.emit("layoutstop"),this},qo.prototype.stop=function(){return this};var Ho={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,spacingFactor:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Wo(e){this.options=Q({},Ho,e)}Wo.prototype.run=function(){var e=this.options,t=e.eles.nodes(),n=L(e.positions);return t.layoutPositions(this,e,(function(t,r){var i=function(t){if(null==e.positions)return function(e){return{x:e.x,y:e.y}}(t.position());if(n)return e.positions(t);var r=e.positions[t._private.data.id];return null==r?null:r}(t);return!t.locked()&&null!=i&&i})),this};var $o={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Ko(e){this.options=Q({},$o,e)}Ko.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,r=ft(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()});return n.nodes().layoutPositions(this,e,(function(e,t){return{x:r.x1+Math.round(Math.random()*r.w),y:r.y1+Math.round(Math.random()*r.h)}})),this};var Zo=[{name:"breadthfirst",impl:vo},{name:"circle",impl:mo},{name:"concentric",impl:wo},{name:"cose",impl:_o},{name:"grid",impl:Uo},{name:"null",impl:qo},{name:"preset",impl:Wo},{name:"random",impl:Ko}];function Qo(e){this.options=e,this.notifications=0}var Jo=function(){},es=function(){throw new Error("A headless instance can not render images")};Qo.prototype={recalculateRenderedStyle:Jo,notify:function(){this.notifications++},init:Jo,isHeadless:function(){return!0},png:es,jpg:es};var ts={arrowShapeWidth:.3,registerArrowShapes:function(){var e=this.arrowShapes={},t=this,n=function(e,t,n,r,i,a,o){var s=i.x-n/2-o,l=i.x+n/2+o,u=i.y-n/2-o,c=i.y+n/2+o;return s<=e&&e<=l&&u<=t&&t<=c},r=function(e,t,n,r,i){var a=e*Math.cos(r)-t*Math.sin(r),o=(e*Math.sin(r)+t*Math.cos(r))*n;return{x:a*n+i.x,y:o+i.y}},i=function(e,t,n,i){for(var a=[],o=0;o<e.length;o+=2){var s=e[o],l=e[o+1];a.push(r(s,l,t,n,i))}return a},a=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];t.push(r.x,r.y)}return t},o=function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").pfValue*2},s=function(r,s){A(s)&&(s=e[s]),e[r]=Q({name:r,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(e,t,n,r,o,s){var l=a(i(this.points,n+2*s,r,o));return Lt(e,t,l)},roughCollide:n,draw:function(e,n,r,a){var o=i(this.points,n,r,a);t.arrowShapeImpl("polygon")(e,o)},spacing:function(e){return 0},gap:o},s)};s("none",{collide:_e,roughCollide:_e,draw:De,spacing:Te,gap:Te}),s("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),s("arrow","triangle"),s("triangle-backcurve",{points:e.triangle.points,controlPoint:[0,-.15],roughCollide:n,draw:function(e,n,a,o,s){var l=i(this.points,n,a,o),u=this.controlPoint,c=r(u[0],u[1],n,a,o);t.arrowShapeImpl(this.name)(e,l,c)},gap:function(e){return.8*o(e)}}),s("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(e,t,n,r,o,s,l){var u=a(i(this.points,n+2*l,r,o)),c=a(i(this.pointsTee,n+2*l,r,o));return Lt(e,t,u)||Lt(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),l=i(this.pointsTee,n,r,a);t.arrowShapeImpl(this.name)(e,s,l)}}),s("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:function(e,t,n,r,o,s,l){var u=o,c=Math.pow(u.x-e,2)+Math.pow(u.y-t,2)<=Math.pow((n+2*l)*this.radius,2),h=a(i(this.points,n+2*l,r,o));return Lt(e,t,h)||c},draw:function(e,n,r,a,o){var s=i(this.pointsTr,n,r,a);t.arrowShapeImpl(this.name)(e,s,a.x,a.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:function(e,t){var n=this.baseCrossLinePts.slice(),r=t/e;return n[3]=n[3]-r,n[5]=n[5]-r,n},collide:function(e,t,n,r,o,s,l){var u=a(i(this.points,n+2*l,r,o)),c=a(i(this.crossLinePts(n,s),n+2*l,r,o));return Lt(e,t,u)||Lt(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),l=i(this.crossLinePts(n,o),n,r,a);t.arrowShapeImpl(this.name)(e,s,l)}}),s("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(e){return.525*o(e)}}),s("circle",{radius:.15,collide:function(e,t,n,r,i,a,o){var s=i;return Math.pow(s.x-e,2)+Math.pow(s.y-t,2)<=Math.pow((n+2*o)*this.radius,2)},draw:function(e,n,r,i,a){t.arrowShapeImpl(this.name)(e,i.x,i.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(e){return 1},gap:function(e){return 1}}),s("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),s("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}}),s("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:function(e){return.95*e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}})}},ns={projectIntoViewport:function(e,t){var n=this.cy,r=this.findContainerClientCoords(),i=r[0],a=r[1],o=r[4],s=n.pan(),l=n.zoom();return[((e-i)/o-s.x)/l,((t-a)/o-s.y)/l]},findContainerClientCoords:function(){if(this.containerBB)return this.containerBB;var e=this.container,t=e.getBoundingClientRect(),n=this.cy.window().getComputedStyle(e),r=function(e){return parseFloat(n.getPropertyValue(e))},i=r("padding-left"),a=r("padding-right"),o=r("padding-top"),s=r("padding-bottom"),l=r("border-left-width"),u=r("border-right-width"),c=r("border-top-width"),h=(r("border-bottom-width"),e.clientWidth),d=e.clientHeight,p=i+a,g=o+s,f=l+u,v=t.width/(h+f),y=h-p,m=d-g,b=t.left+i+l,x=t.top+o+c;return this.containerBB=[b,x,y,m,v]},invalidateContainerClientCoordsCache:function(){this.containerBB=null},findNearestElement:function(e,t,n,r){return this.findNearestElements(e,t,n,r)[0]},findNearestElements:function(e,t,n,r){var i,a,o=this,s=this,l=s.getCachedZSortedEles(),u=[],c=s.cy.zoom(),h=s.cy.hasCompoundNodes(),d=(r?24:8)/c,p=(r?8:2)/c,g=(r?8:2)/c,f=1/0;function v(e,t){if(e.isNode()){if(a)return;a=e,u.push(e)}if(e.isEdge()&&(null==t||t<f))if(i){if(i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value&&i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value)for(var n=0;n<u.length;n++)if(u[n].isEdge()){u[n]=e,i=e,f=null!=t?t:f;break}}else u.push(e),i=e,f=null!=t?t:f}function y(n){var r=n.outerWidth()+2*p,i=n.outerHeight()+2*p,a=r/2,l=i/2,u=n.position();if(u.x-a<=e&&e<=u.x+a&&u.y-l<=t&&t<=u.y+l&&s.nodeShapes[o.getNodeShape(n)].checkPoint(e,t,0,r,i,u.x,u.y))return v(n,0),!0}function m(n){var r,i=n._private,a=i.rscratch,l=n.pstyle("width").pfValue,c=n.pstyle("arrow-scale").value,p=l/2+d,g=p*p,f=2*p,m=i.source,b=i.target;if("segments"===a.edgeType||"straight"===a.edgeType||"haystack"===a.edgeType){for(var x=a.allpts,w=0;w+3<x.length;w+=2)if(Dt(e,t,x[w],x[w+1],x[w+2],x[w+3],f)&&g>(r=At(e,t,x[w],x[w+1],x[w+2],x[w+3])))return v(n,r),!0}else if("bezier"===a.edgeType||"multibezier"===a.edgeType||"self"===a.edgeType||"compound"===a.edgeType)for(x=a.allpts,w=0;w+5<a.allpts.length;w+=4)if(Ct(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5],f)&&g>(r=Nt(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5])))return v(n,r),!0;m=m||i.source,b=b||i.target;var E=o.getArrowWidth(l,c),_=[{name:"source",x:a.arrowStartX,y:a.arrowStartY,angle:a.srcArrowAngle},{name:"target",x:a.arrowEndX,y:a.arrowEndY,angle:a.tgtArrowAngle},{name:"mid-source",x:a.midX,y:a.midY,angle:a.midsrcArrowAngle},{name:"mid-target",x:a.midX,y:a.midY,angle:a.midtgtArrowAngle}];for(w=0;w<_.length;w++){var T=_[w],D=s.arrowShapes[n.pstyle(T.name+"-arrow-shape").value],C=n.pstyle("width").pfValue;if(D.roughCollide(e,t,E,T.angle,{x:T.x,y:T.y},C,d)&&D.collide(e,t,E,T.angle,{x:T.x,y:T.y},C,d))return v(n),!0}h&&u.length>0&&(y(m),y(b))}function b(e,t,n){return Re(e,t,n)}function x(n,r){var i,a=n._private,o=g;i=r?r+"-":"",n.boundingBox();var s=a.labelBounds[r||"main"],l=n.pstyle(i+"label").value;if("yes"===n.pstyle("text-events").strValue&&l){var u=b(a.rscratch,"labelX",r),c=b(a.rscratch,"labelY",r),h=b(a.rscratch,"labelAngle",r),d=n.pstyle(i+"text-margin-x").pfValue,p=n.pstyle(i+"text-margin-y").pfValue,f=s.x1-o-d,y=s.x2+o-d,m=s.y1-o-p,x=s.y2+o-p;if(h){var w=Math.cos(h),E=Math.sin(h),_=function(e,t){return{x:(e-=u)*w-(t-=c)*E+u,y:e*E+t*w+c}},T=_(f,m),D=_(f,x),C=_(y,m),N=_(y,x),A=[T.x+d,T.y+p,C.x+d,C.y+p,N.x+d,N.y+p,D.x+d,D.y+p];if(Lt(e,t,A))return v(n),!0}else if(Et(s,e,t))return v(n),!0}}n&&(l=l.interactive);for(var w=l.length-1;w>=0;w--){var E=l[w];E.isNode()?y(E)||x(E):m(E)||x(E)||x(E,"source")||x(E,"target")}return u},getAllInBox:function(e,t,n,r){for(var i,a,o=this.getCachedZSortedEles().interactive,s=[],l=Math.min(e,n),u=Math.max(e,n),c=Math.min(t,r),h=Math.max(t,r),d=ft({x1:e=l,y1:t=c,x2:n=u,y2:r=h}),p=0;p<o.length;p++){var g=o[p];if(g.isNode()){var f=g,v=f.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});wt(d,v)&&!_t(v,d)&&s.push(f)}else{var y=g,m=y._private,b=m.rscratch;if(null!=b.startX&&null!=b.startY&&!Et(d,b.startX,b.startY))continue;if(null!=b.endX&&null!=b.endY&&!Et(d,b.endX,b.endY))continue;if("bezier"===b.edgeType||"multibezier"===b.edgeType||"self"===b.edgeType||"compound"===b.edgeType||"segments"===b.edgeType||"haystack"===b.edgeType){for(var x=m.rstyle.bezierPts||m.rstyle.linePts||m.rstyle.haystackPts,w=!0,E=0;E<x.length;E++)if(i=d,a=x[E],!Et(i,a.x,a.y)){w=!1;break}w&&s.push(y)}else"haystack"!==b.edgeType&&"straight"!==b.edgeType||s.push(y)}}return s}},rs={calculateArrowAngles:function(e){var t,n,r,i,a,o,s=e._private.rscratch,l="haystack"===s.edgeType,u="bezier"===s.edgeType,c="multibezier"===s.edgeType,h="segments"===s.edgeType,d="compound"===s.edgeType,p="self"===s.edgeType;if(l?(r=s.haystackPts[0],i=s.haystackPts[1],a=s.haystackPts[2],o=s.haystackPts[3]):(r=s.arrowStartX,i=s.arrowStartY,a=s.arrowEndX,o=s.arrowEndY),f=s.midX,v=s.midY,h)t=r-s.segpts[0],n=i-s.segpts[1];else if(c||d||p||u){var g=s.allpts;t=r-dt(g[0],g[2],g[4],.1),n=i-dt(g[1],g[3],g[5],.1)}else t=r-f,n=i-v;s.srcArrowAngle=ot(t,n);var f=s.midX,v=s.midY;if(l&&(f=(r+a)/2,v=(i+o)/2),t=a-r,n=o-i,h)if((g=s.allpts).length/2%2==0){var y=(m=g.length/2)-2;t=g[m]-g[y],n=g[m+1]-g[y+1]}else{y=(m=g.length/2-1)-2;var m,b=m+2;t=g[m]-g[y],n=g[m+1]-g[y+1]}else if(c||d||p){var x,w,E,_,g=s.allpts;if(s.ctrlpts.length/2%2==0){var T=(D=(C=g.length/2-1)+2)+2;x=dt(g[C],g[D],g[T],0),w=dt(g[C+1],g[D+1],g[T+1],0),E=dt(g[C],g[D],g[T],1e-4),_=dt(g[C+1],g[D+1],g[T+1],1e-4)}else{var D,C;T=(D=g.length/2-1)+2;x=dt(g[C=D-2],g[D],g[T],.4999),w=dt(g[C+1],g[D+1],g[T+1],.4999),E=dt(g[C],g[D],g[T],.5),_=dt(g[C+1],g[D+1],g[T+1],.5)}t=E-x,n=_-w}(s.midtgtArrowAngle=ot(t,n),s.midDispX=t,s.midDispY=n,t*=-1,n*=-1,h)&&((g=s.allpts).length/2%2==0||(t=-(g[b=(m=g.length/2-1)+2]-g[m]),n=-(g[b+1]-g[m+1])));if(s.midsrcArrowAngle=ot(t,n),h)t=a-s.segpts[s.segpts.length-2],n=o-s.segpts[s.segpts.length-1];else if(c||d||p||u){var N=(g=s.allpts).length;t=a-dt(g[N-6],g[N-4],g[N-2],.9),n=o-dt(g[N-5],g[N-3],g[N-1],.9)}else t=a-f,n=o-v;s.tgtArrowAngle=ot(t,n)}};rs.getArrowWidth=rs.getArrowHeight=function(e,t){var n=this.arrowWidthCache=this.arrowWidthCache||{},r=n[e+", "+t];return r||(r=Math.max(Math.pow(13.37*e,.9),29)*t,n[e+", "+t]=r,r)};var is={};function as(e){var t=[];if(null!=e){for(var n=0;n<e.length;n+=2){var r=e[n],i=e[n+1];t.push({x:r,y:i})}return t}}is.findMidptPtsEtc=function(e,t){var n,r=t.posPts,i=t.intersectionPts,a=t.vectorNormInverse,o=e.pstyle("source-endpoint"),s=e.pstyle("target-endpoint"),l=null!=o.units&&null!=s.units;switch(e.pstyle("edge-distances").value){case"node-position":n=r;break;case"intersection":n=i;break;case"endpoints":if(l){var u=b(this.manualEndptToPx(e.source()[0],o),2),c=u[0],h=u[1],d=b(this.manualEndptToPx(e.target()[0],s),2),p=d[0],g=d[1],f={x1:c,y1:h,x2:p,y2:g};a=function(e,t,n,r){var i=r-t,a=n-e,o=Math.sqrt(a*a+i*i);return{x:-i/o,y:a/o}}(c,h,p,g),n=f}else Ae("Edge ".concat(e.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),n=i}return{midptPts:n,vectorNormInverse:a}},is.findHaystackPoints=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=n._private,i=r.rscratch;if(!i.haystack){var a=2*Math.random()*Math.PI;i.source={x:Math.cos(a),y:Math.sin(a)},a=2*Math.random()*Math.PI,i.target={x:Math.cos(a),y:Math.sin(a)}}var o=r.source,s=r.target,l=o.position(),u=s.position(),c=o.width(),h=s.width(),d=o.height(),p=s.height(),g=n.pstyle("haystack-radius").value/2;i.haystackPts=i.allpts=[i.source.x*c*g+l.x,i.source.y*d*g+l.y,i.target.x*h*g+u.x,i.target.y*p*g+u.y],i.midX=(i.allpts[0]+i.allpts[2])/2,i.midY=(i.allpts[1]+i.allpts[3])/2,i.edgeType="haystack",i.haystack=!0,this.storeEdgeProjections(n),this.calculateArrowAngles(n),this.recalculateEdgeLabelProjections(n),this.calculateLabelAngles(n)}},is.findSegmentsPoints=function(e,t){var n=e._private.rscratch,r=e.pstyle("segment-weights"),i=e.pstyle("segment-distances"),a=Math.min(r.pfValue.length,i.pfValue.length);n.edgeType="segments",n.segpts=[];for(var o=0;o<a;o++){var s=r.pfValue[o],l=i.pfValue[o],u=1-s,c=s,h=this.findMidptPtsEtc(e,t),d=h.midptPts,p=h.vectorNormInverse,g={x:d.x1*u+d.x2*c,y:d.y1*u+d.y2*c};n.segpts.push(g.x+p.x*l,g.y+p.y*l)}},is.findLoopPoints=function(e,t,n,r){var i=e._private.rscratch,a=t.dirCounts,o=t.srcPos,s=e.pstyle("control-point-distances"),l=s?s.pfValue[0]:void 0,u=e.pstyle("loop-direction").pfValue,c=e.pstyle("loop-sweep").pfValue,h=e.pstyle("control-point-step-size").pfValue;i.edgeType="self";var d=n,p=h;r&&(d=0,p=l);var g=u-Math.PI/2,f=g-c/2,v=g+c/2,y=String(u+"_"+c);d=void 0===a[y]?a[y]=0:++a[y],i.ctrlpts=[o.x+1.4*Math.cos(f)*p*(d/3+1),o.y+1.4*Math.sin(f)*p*(d/3+1),o.x+1.4*Math.cos(v)*p*(d/3+1),o.y+1.4*Math.sin(v)*p*(d/3+1)]},is.findCompoundLoopPoints=function(e,t,n,r){var i=e._private.rscratch;i.edgeType="compound";var a=t.srcPos,o=t.tgtPos,s=t.srcW,l=t.srcH,u=t.tgtW,c=t.tgtH,h=e.pstyle("control-point-step-size").pfValue,d=e.pstyle("control-point-distances"),p=d?d.pfValue[0]:void 0,g=n,f=h;r&&(g=0,f=p);var v={x:a.x-s/2,y:a.y-l/2},y={x:o.x-u/2,y:o.y-c/2},m={x:Math.min(v.x,y.x),y:Math.min(v.y,y.y)},b=Math.max(.5,Math.log(.01*s)),x=Math.max(.5,Math.log(.01*u));i.ctrlpts=[m.x,m.y-(1+Math.pow(50,1.12)/100)*f*(g/3+1)*b,m.x-(1+Math.pow(50,1.12)/100)*f*(g/3+1)*x,m.y]},is.findStraightEdgePoints=function(e){e._private.rscratch.edgeType="straight"},is.findBezierPoints=function(e,t,n,r,i){var a=e._private.rscratch,o=e.pstyle("control-point-step-size").pfValue,s=e.pstyle("control-point-distances"),l=e.pstyle("control-point-weights"),u=s&&l?Math.min(s.value.length,l.value.length):1,c=s?s.pfValue[0]:void 0,h=l.value[0],d=r;a.edgeType=d?"multibezier":"bezier",a.ctrlpts=[];for(var p=0;p<u;p++){var g=(.5-t.eles.length/2+n)*o*(i?-1:1),f=void 0,v=lt(g);d&&(c=s?s.pfValue[p]:o,h=l.value[p]);var y=void 0!==(f=r?c:void 0!==c?v*c:void 0)?f:g,m=1-h,b=h,x=this.findMidptPtsEtc(e,t),w=x.midptPts,E=x.vectorNormInverse,_={x:w.x1*m+w.x2*b,y:w.y1*m+w.y2*b};a.ctrlpts.push(_.x+E.x*y,_.y+E.y*y)}},is.findTaxiPoints=function(e,t){var n=e._private.rscratch;n.edgeType="segments";var r="vertical",i="horizontal",a="leftward",o="rightward",s="downward",l="upward",u=t.posPts,c=t.srcW,h=t.srcH,d=t.tgtW,p=t.tgtH,g="node-position"!==e.pstyle("edge-distances").value,f=e.pstyle("taxi-direction").value,v=f,y=e.pstyle("taxi-turn"),m="%"===y.units,b=y.pfValue,x=b<0,w=e.pstyle("taxi-turn-min-distance").pfValue,E=g?(c+d)/2:0,_=g?(h+p)/2:0,T=u.x2-u.x1,D=u.y2-u.y1,C=function(e,t){return e>0?Math.max(e-t,0):Math.min(e+t,0)},N=C(T,E),A=C(D,_),L=!1;"auto"===v?f=Math.abs(N)>Math.abs(A)?i:r:v===l||v===s?(f=r,L=!0):v!==a&&v!==o||(f=i,L=!0);var k,S=f===r,I=S?A:N,M=S?D:T,O=lt(M),P=!1;(L&&(m||x)||!(v===s&&M<0||v===l&&M>0||v===a&&M>0||v===o&&M<0)||(I=(O*=-1)*Math.abs(I),P=!0),m)?k=(b<0?1+b:b)*I:k=(b<0?I:0)+b*O;var R=function(e){return Math.abs(e)<w||Math.abs(e)>=Math.abs(I)},B=R(k),F=R(Math.abs(I)-Math.abs(k));if((B||F)&&!P)if(S){var z=Math.abs(M)<=h/2,G=Math.abs(T)<=d/2;if(z){var Y=(u.x1+u.x2)/2,X=u.y1,V=u.y2;n.segpts=[Y,X,Y,V]}else if(G){var U=(u.y1+u.y2)/2,j=u.x1,q=u.x2;n.segpts=[j,U,q,U]}else n.segpts=[u.x1,u.y2]}else{var H=Math.abs(M)<=c/2,W=Math.abs(D)<=p/2;if(H){var $=(u.y1+u.y2)/2,K=u.x1,Z=u.x2;n.segpts=[K,$,Z,$]}else if(W){var Q=(u.x1+u.x2)/2,J=u.y1,ee=u.y2;n.segpts=[Q,J,Q,ee]}else n.segpts=[u.x2,u.y1]}else if(S){var te=u.y1+k+(g?h/2*O:0),ne=u.x1,re=u.x2;n.segpts=[ne,te,re,te]}else{var ie=u.x1+k+(g?c/2*O:0),ae=u.y1,oe=u.y2;n.segpts=[ie,ae,ie,oe]}},is.tryToCorrectInvalidPoints=function(e,t){var n=e._private.rscratch;if("bezier"===n.edgeType){var r=t.srcPos,i=t.tgtPos,a=t.srcW,o=t.srcH,s=t.tgtW,l=t.tgtH,u=t.srcShape,c=t.tgtShape,h=!I(n.startX)||!I(n.startY),d=!I(n.arrowStartX)||!I(n.arrowStartY),p=!I(n.endX)||!I(n.endY),g=!I(n.arrowEndX)||!I(n.arrowEndY),f=3*(this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth),v=ut({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),y=v<f,m=ut({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.endX,y:n.endY}),b=m<f,x=!1;if(h||d||y){x=!0;var w={x:n.ctrlpts[0]-r.x,y:n.ctrlpts[1]-r.y},E=Math.sqrt(w.x*w.x+w.y*w.y),_={x:w.x/E,y:w.y/E},T=Math.max(a,o),D={x:n.ctrlpts[0]+2*_.x*T,y:n.ctrlpts[1]+2*_.y*T},C=u.intersectLine(r.x,r.y,a,o,D.x,D.y,0);y?(n.ctrlpts[0]=n.ctrlpts[0]+_.x*(f-v),n.ctrlpts[1]=n.ctrlpts[1]+_.y*(f-v)):(n.ctrlpts[0]=C[0]+_.x*f,n.ctrlpts[1]=C[1]+_.y*f)}if(p||g||b){x=!0;var N={x:n.ctrlpts[0]-i.x,y:n.ctrlpts[1]-i.y},A=Math.sqrt(N.x*N.x+N.y*N.y),L={x:N.x/A,y:N.y/A},k=Math.max(a,o),S={x:n.ctrlpts[0]+2*L.x*k,y:n.ctrlpts[1]+2*L.y*k},M=c.intersectLine(i.x,i.y,s,l,S.x,S.y,0);b?(n.ctrlpts[0]=n.ctrlpts[0]+L.x*(f-m),n.ctrlpts[1]=n.ctrlpts[1]+L.y*(f-m)):(n.ctrlpts[0]=M[0]+L.x*f,n.ctrlpts[1]=M[1]+L.y*f)}x&&this.findEndpoints(e)}},is.storeAllpts=function(e){var t=e._private.rscratch;if("multibezier"===t.edgeType||"bezier"===t.edgeType||"self"===t.edgeType||"compound"===t.edgeType){t.allpts=[],t.allpts.push(t.startX,t.startY);for(var n=0;n+1<t.ctrlpts.length;n+=2)t.allpts.push(t.ctrlpts[n],t.ctrlpts[n+1]),n+3<t.ctrlpts.length&&t.allpts.push((t.ctrlpts[n]+t.ctrlpts[n+2])/2,(t.ctrlpts[n+1]+t.ctrlpts[n+3])/2);var r;t.allpts.push(t.endX,t.endY),t.ctrlpts.length/2%2==0?(r=t.allpts.length/2-1,t.midX=t.allpts[r],t.midY=t.allpts[r+1]):(r=t.allpts.length/2-3,.5,t.midX=dt(t.allpts[r],t.allpts[r+2],t.allpts[r+4],.5),t.midY=dt(t.allpts[r+1],t.allpts[r+3],t.allpts[r+5],.5))}else if("straight"===t.edgeType)t.allpts=[t.startX,t.startY,t.endX,t.endY],t.midX=(t.startX+t.endX+t.arrowStartX+t.arrowEndX)/4,t.midY=(t.startY+t.endY+t.arrowStartY+t.arrowEndY)/4;else if("segments"===t.edgeType)if(t.allpts=[],t.allpts.push(t.startX,t.startY),t.allpts.push.apply(t.allpts,t.segpts),t.allpts.push(t.endX,t.endY),t.segpts.length%4==0){var i=t.segpts.length/2,a=i-2;t.midX=(t.segpts[a]+t.segpts[i])/2,t.midY=(t.segpts[a+1]+t.segpts[i+1])/2}else{var o=t.segpts.length/2-1;t.midX=t.segpts[o],t.midY=t.segpts[o+1]}},is.checkForInvalidEdgeWarning=function(e){var t=e[0]._private.rscratch;t.nodesOverlap||I(t.startX)&&I(t.startY)&&I(t.endX)&&I(t.endY)?t.loggedErr=!1:t.loggedErr||(t.loggedErr=!0,Ae("Edge `"+e.id()+"` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap."))},is.findEdgeControlPoints=function(e){var t=this;if(e&&0!==e.length){for(var n=this,r=n.cy.hasCompoundNodes(),i={map:new Fe,get:function(e){var t=this.map.get(e[0]);return null!=t?t.get(e[1]):null},set:function(e,t){var n=this.map.get(e[0]);null==n&&(n=new Fe,this.map.set(e[0],n)),n.set(e[1],t)}},a=[],o=[],s=0;s<e.length;s++){var l=e[s],u=l._private,c=l.pstyle("curve-style").value;if(!l.removed()&&l.takesUpSpace())if("haystack"!==c){var h="unbundled-bezier"===c||"segments"===c||"straight"===c||"straight-triangle"===c||"taxi"===c,d="unbundled-bezier"===c||"bezier"===c,p=u.source,g=u.target,f=[p.poolIndex(),g.poolIndex()].sort(),v=i.get(f);null==v&&(v={eles:[]},i.set(f,v),a.push(f)),v.eles.push(l),h&&(v.hasUnbundled=!0),d&&(v.hasBezier=!0)}else o.push(l)}for(var y=function(e){var o=a[e],s=i.get(o),l=void 0;if(!s.hasUnbundled){var u=s.eles[0].parallelEdges().filter((function(e){return e.isBundledBezier()}));Pe(s.eles),u.forEach((function(e){return s.eles.push(e)})),s.eles.sort((function(e,t){return e.poolIndex()-t.poolIndex()}))}var c=s.eles[0],h=c.source(),d=c.target();if(h.poolIndex()>d.poolIndex()){var p=h;h=d,d=p}var g=s.srcPos=h.position(),f=s.tgtPos=d.position(),v=s.srcW=h.outerWidth(),y=s.srcH=h.outerHeight(),m=s.tgtW=d.outerWidth(),b=s.tgtH=d.outerHeight(),x=s.srcShape=n.nodeShapes[t.getNodeShape(h)],w=s.tgtShape=n.nodeShapes[t.getNodeShape(d)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var E=0;E<s.eles.length;E++){var _=s.eles[E],T=_[0]._private.rscratch,D=_.pstyle("curve-style").value,C="unbundled-bezier"===D||"segments"===D||"taxi"===D,N=!h.same(_.source());if(!s.calculatedIntersection&&h!==d&&(s.hasBezier||s.hasUnbundled)){s.calculatedIntersection=!0;var A=x.intersectLine(g.x,g.y,v,y,f.x,f.y,0),L=s.srcIntn=A,k=w.intersectLine(f.x,f.y,m,b,g.x,g.y,0),S=s.tgtIntn=k,M=s.intersectionPts={x1:A[0],x2:k[0],y1:A[1],y2:k[1]},O=s.posPts={x1:g.x,x2:f.x,y1:g.y,y2:f.y},P=k[1]-A[1],R=k[0]-A[0],B=Math.sqrt(R*R+P*P),F=s.vector={x:R,y:P},z=s.vectorNorm={x:F.x/B,y:F.y/B},G={x:-z.y,y:z.x};s.nodesOverlap=!I(B)||w.checkPoint(A[0],A[1],0,m,b,f.x,f.y)||x.checkPoint(k[0],k[1],0,v,y,g.x,g.y),s.vectorNormInverse=G,l={nodesOverlap:s.nodesOverlap,dirCounts:s.dirCounts,calculatedIntersection:!0,hasBezier:s.hasBezier,hasUnbundled:s.hasUnbundled,eles:s.eles,srcPos:f,tgtPos:g,srcW:m,srcH:b,tgtW:v,tgtH:y,srcIntn:S,tgtIntn:L,srcShape:w,tgtShape:x,posPts:{x1:O.x2,y1:O.y2,x2:O.x1,y2:O.y1},intersectionPts:{x1:M.x2,y1:M.y2,x2:M.x1,y2:M.y1},vector:{x:-F.x,y:-F.y},vectorNorm:{x:-z.x,y:-z.y},vectorNormInverse:{x:-G.x,y:-G.y}}}var Y=N?l:s;T.nodesOverlap=Y.nodesOverlap,T.srcIntn=Y.srcIntn,T.tgtIntn=Y.tgtIntn,r&&(h.isParent()||h.isChild()||d.isParent()||d.isChild())&&(h.parents().anySame(d)||d.parents().anySame(h)||h.same(d)&&h.isParent())?t.findCompoundLoopPoints(_,Y,E,C):h===d?t.findLoopPoints(_,Y,E,C):"segments"===D?t.findSegmentsPoints(_,Y):"taxi"===D?t.findTaxiPoints(_,Y):"straight"===D||!C&&s.eles.length%2==1&&E===Math.floor(s.eles.length/2)?t.findStraightEdgePoints(_):t.findBezierPoints(_,Y,E,C,N),t.findEndpoints(_),t.tryToCorrectInvalidPoints(_,Y),t.checkForInvalidEdgeWarning(_),t.storeAllpts(_),t.storeEdgeProjections(_),t.calculateArrowAngles(_),t.recalculateEdgeLabelProjections(_),t.calculateLabelAngles(_)}},m=0;m<a.length;m++)y(m);this.findHaystackPoints(o)}},is.getSegmentPoints=function(e){var t=e[0]._private.rscratch;if("segments"===t.edgeType)return this.recalculateRenderedStyle(e),as(t.segpts)},is.getControlPoints=function(e){var t=e[0]._private.rscratch,n=t.edgeType;if("bezier"===n||"multibezier"===n||"self"===n||"compound"===n)return this.recalculateRenderedStyle(e),as(t.ctrlpts)},is.getEdgeMidpoint=function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),{x:t.midX,y:t.midY}};var os={manualEndptToPx:function(e,t){var n=e.position(),r=e.outerWidth(),i=e.outerHeight();if(2===t.value.length){var a=[t.pfValue[0],t.pfValue[1]];return"%"===t.units[0]&&(a[0]=a[0]*r),"%"===t.units[1]&&(a[1]=a[1]*i),a[0]+=n.x,a[1]+=n.y,a}var o=t.pfValue[0];o=-Math.PI/2+o;var s=2*Math.max(r,i),l=[n.x+Math.cos(o)*s,n.y+Math.sin(o)*s];return this.nodeShapes[this.getNodeShape(e)].intersectLine(n.x,n.y,r,i,l[0],l[1],0)},findEndpoints:function(e){var t,n,r,i,a,o=this,s=e.source()[0],l=e.target()[0],u=s.position(),c=l.position(),h=e.pstyle("target-arrow-shape").value,d=e.pstyle("source-arrow-shape").value,p=e.pstyle("target-distance-from-node").pfValue,g=e.pstyle("source-distance-from-node").pfValue,f=e.pstyle("curve-style").value,v=e._private.rscratch,y=v.edgeType,m="self"===y||"compound"===y,b="bezier"===y||"multibezier"===y||m,x="bezier"!==y,w="straight"===y||"segments"===y,E="segments"===y,_=b||x||w,T=m||"taxi"===f,D=e.pstyle("source-endpoint"),C=T?"outside-to-node":D.value,N=e.pstyle("target-endpoint"),A=T?"outside-to-node":N.value;if(v.srcManEndpt=D,v.tgtManEndpt=N,b){var L=[v.ctrlpts[0],v.ctrlpts[1]];n=x?[v.ctrlpts[v.ctrlpts.length-2],v.ctrlpts[v.ctrlpts.length-1]]:L,r=L}else if(w){var k=E?v.segpts.slice(0,2):[c.x,c.y];n=E?v.segpts.slice(v.segpts.length-2):[u.x,u.y],r=k}if("inside-to-node"===A)t=[c.x,c.y];else if(N.units)t=this.manualEndptToPx(l,N);else if("outside-to-line"===A)t=v.tgtIntn;else if("outside-to-node"===A||"outside-to-node-or-label"===A?i=n:"outside-to-line"!==A&&"outside-to-line-or-label"!==A||(i=[u.x,u.y]),t=o.nodeShapes[this.getNodeShape(l)].intersectLine(c.x,c.y,l.outerWidth(),l.outerHeight(),i[0],i[1],0),"outside-to-node-or-label"===A||"outside-to-line-or-label"===A){var S=l._private.rscratch,M=S.labelWidth,O=S.labelHeight,P=S.labelX,R=S.labelY,B=M/2,F=O/2,z=l.pstyle("text-valign").value;"top"===z?R-=F:"bottom"===z&&(R+=F);var G=l.pstyle("text-halign").value;"left"===G?P-=B:"right"===G&&(P+=B);var Y=Bt(i[0],i[1],[P-B,R-F,P+B,R-F,P+B,R+F,P-B,R+F],c.x,c.y);if(Y.length>0){var X=u,V=ct(X,at(t)),U=ct(X,at(Y)),j=V;if(U<V&&(t=Y,j=U),Y.length>2)ct(X,{x:Y[2],y:Y[3]})<j&&(t=[Y[2],Y[3]])}}var q=Ft(t,n,o.arrowShapes[h].spacing(e)+p),H=Ft(t,n,o.arrowShapes[h].gap(e)+p);if(v.endX=H[0],v.endY=H[1],v.arrowEndX=q[0],v.arrowEndY=q[1],"inside-to-node"===C)t=[u.x,u.y];else if(D.units)t=this.manualEndptToPx(s,D);else if("outside-to-line"===C)t=v.srcIntn;else if("outside-to-node"===C||"outside-to-node-or-label"===C?a=r:"outside-to-line"!==C&&"outside-to-line-or-label"!==C||(a=[c.x,c.y]),t=o.nodeShapes[this.getNodeShape(s)].intersectLine(u.x,u.y,s.outerWidth(),s.outerHeight(),a[0],a[1],0),"outside-to-node-or-label"===C||"outside-to-line-or-label"===C){var W=s._private.rscratch,$=W.labelWidth,K=W.labelHeight,Z=W.labelX,Q=W.labelY,J=$/2,ee=K/2,te=s.pstyle("text-valign").value;"top"===te?Q-=ee:"bottom"===te&&(Q+=ee);var ne=s.pstyle("text-halign").value;"left"===ne?Z-=J:"right"===ne&&(Z+=J);var re=Bt(a[0],a[1],[Z-J,Q-ee,Z+J,Q-ee,Z+J,Q+ee,Z-J,Q+ee],u.x,u.y);if(re.length>0){var ie=c,ae=ct(ie,at(t)),oe=ct(ie,at(re)),se=ae;if(oe<ae&&(t=[re[0],re[1]],se=oe),re.length>2)ct(ie,{x:re[2],y:re[3]})<se&&(t=[re[2],re[3]])}}var le=Ft(t,r,o.arrowShapes[d].spacing(e)+g),ue=Ft(t,r,o.arrowShapes[d].gap(e)+g);v.startX=ue[0],v.startY=ue[1],v.arrowStartX=le[0],v.arrowStartY=le[1],_&&(I(v.startX)&&I(v.startY)&&I(v.endX)&&I(v.endY)?v.badLine=!1:v.badLine=!0)},getSourceEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[0],y:t.haystackPts[1]}:{x:t.arrowStartX,y:t.arrowStartY}},getTargetEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[2],y:t.haystackPts[3]}:{x:t.arrowEndX,y:t.arrowEndY}}},ss={};function ls(e,t,n){for(var r=function(e,t,n,r){return dt(e,t,n,r)},i=t._private.rstyle.bezierPts,a=0;a<e.bezierProjPcts.length;a++){var o=e.bezierProjPcts[a];i.push({x:r(n[0],n[2],n[4],o),y:r(n[1],n[3],n[5],o)})}}ss.storeEdgeProjections=function(e){var t=e._private,n=t.rscratch,r=n.edgeType;if(t.rstyle.bezierPts=null,t.rstyle.linePts=null,t.rstyle.haystackPts=null,"multibezier"===r||"bezier"===r||"self"===r||"compound"===r){t.rstyle.bezierPts=[];for(var i=0;i+5<n.allpts.length;i+=4)ls(this,e,n.allpts.slice(i,i+6))}else if("segments"===r){var a=t.rstyle.linePts=[];for(i=0;i+1<n.allpts.length;i+=2)a.push({x:n.allpts[i],y:n.allpts[i+1]})}else if("haystack"===r){var o=n.haystackPts;t.rstyle.haystackPts=[{x:o[0],y:o[1]},{x:o[2],y:o[3]}]}t.rstyle.arrowWidth=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth},ss.recalculateEdgeProjections=function(e){this.findEdgeControlPoints(e)};var us={recalculateNodeLabelProjection:function(e){var t=e.pstyle("label").strValue;if(!z(t)){var n,r,i=e._private,a=e.width(),o=e.height(),s=e.padding(),l=e.position(),u=e.pstyle("text-halign").strValue,c=e.pstyle("text-valign").strValue,h=i.rscratch,d=i.rstyle;switch(u){case"left":n=l.x-a/2-s;break;case"right":n=l.x+a/2+s;break;default:n=l.x}switch(c){case"top":r=l.y-o/2-s;break;case"bottom":r=l.y+o/2+s;break;default:r=l.y}h.labelX=n,h.labelY=r,d.labelX=n,d.labelY=r,this.calculateLabelAngles(e),this.applyLabelDimensions(e)}}},cs=function(e,t){var n=Math.atan(t/e);return 0===e&&n<0&&(n*=-1),n},hs=function(e,t){var n=t.x-e.x,r=t.y-e.y;return cs(n,r)};us.recalculateEdgeLabelProjections=function(e){var t,n=e._private,r=n.rscratch,i=this,a={mid:e.pstyle("label").strValue,source:e.pstyle("source-label").strValue,target:e.pstyle("target-label").strValue};if(a.mid||a.source||a.target){t={x:r.midX,y:r.midY};var o=function(e,t,r){Be(n.rscratch,e,t,r),Be(n.rstyle,e,t,r)};o("labelX",null,t.x),o("labelY",null,t.y);var s=cs(r.midDispX,r.midDispY);o("labelAutoAngle",null,s);var l=function e(){if(e.cache)return e.cache;for(var t=[],a=0;a+5<r.allpts.length;a+=4){var o={x:r.allpts[a],y:r.allpts[a+1]},s={x:r.allpts[a+2],y:r.allpts[a+3]},l={x:r.allpts[a+4],y:r.allpts[a+5]};t.push({p0:o,p1:s,p2:l,startDist:0,length:0,segments:[]})}var u=n.rstyle.bezierPts,c=i.bezierProjPcts.length;function h(e,t,n,r,i){var a=ut(t,n),o=e.segments[e.segments.length-1],s={p0:t,p1:n,t0:r,t1:i,startDist:o?o.startDist+o.length:0,length:a};e.segments.push(s),e.length+=a}for(var d=0;d<t.length;d++){var p=t[d],g=t[d-1];g&&(p.startDist=g.startDist+g.length),h(p,p.p0,u[d*c],0,i.bezierProjPcts[0]);for(var f=0;f<c-1;f++)h(p,u[d*c+f],u[d*c+f+1],i.bezierProjPcts[f],i.bezierProjPcts[f+1]);h(p,u[d*c+c-1],p.p2,i.bezierProjPcts[c-1],1)}return e.cache=t},u=function(n){var i,s="source"===n;if(a[n]){var u=e.pstyle(n+"-text-offset").pfValue;switch(r.edgeType){case"self":case"compound":case"bezier":case"multibezier":for(var c,h=l(),d=0,p=0,g=0;g<h.length;g++){for(var f=h[s?g:h.length-1-g],v=0;v<f.segments.length;v++){var y=f.segments[s?v:f.segments.length-1-v],m=g===h.length-1&&v===f.segments.length-1;if(d=p,(p+=y.length)>=u||m){c={cp:f,segment:y};break}}if(c)break}var b=c.cp,x=c.segment,w=(u-d)/x.length,E=x.t1-x.t0,_=s?x.t0+E*w:x.t1-E*w;_=gt(0,_,1),t=pt(b.p0,b.p1,b.p2,_),i=function(e,t,n,r){var i=gt(0,r-.001,1),a=gt(0,r+.001,1),o=pt(e,t,n,i),s=pt(e,t,n,a);return hs(o,s)}(b.p0,b.p1,b.p2,_);break;case"straight":case"segments":case"haystack":for(var T,D,C,N,A=0,L=r.allpts.length,k=0;k+3<L&&(s?(C={x:r.allpts[k],y:r.allpts[k+1]},N={x:r.allpts[k+2],y:r.allpts[k+3]}):(C={x:r.allpts[L-2-k],y:r.allpts[L-1-k]},N={x:r.allpts[L-4-k],y:r.allpts[L-3-k]}),D=A,!((A+=T=ut(C,N))>=u));k+=2);var S=(u-D)/T;S=gt(0,S,1),t=function(e,t,n,r){var i=t.x-e.x,a=t.y-e.y,o=ut(e,t),s=i/o,l=a/o;return n=null==n?0:n,r=null!=r?r:n*o,{x:e.x+s*r,y:e.y+l*r}}(C,N,S),i=hs(C,N)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};u("source"),u("target"),this.applyLabelDimensions(e)}},us.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},us.applyPrefixedLabelDimensions=function(e,t){var n=e._private,r=this.getLabelText(e,t),i=this.calculateLabelDimensions(e,r),a=e.pstyle("line-height").pfValue,o=e.pstyle("text-wrap").strValue,s=Re(n.rscratch,"labelWrapCachedLines",t)||[],l="wrap"!==o?1:Math.max(s.length,1),u=i.height/l,c=u*a,h=i.width,d=i.height+(l-1)*(a-1)*u;Be(n.rstyle,"labelWidth",t,h),Be(n.rscratch,"labelWidth",t,h),Be(n.rstyle,"labelHeight",t,d),Be(n.rscratch,"labelHeight",t,d),Be(n.rscratch,"labelLineHeight",t,c)},us.getLabelText=function(e,t){var n=e._private,r=t?t+"-":"",i=e.pstyle(r+"label").strValue,a=e.pstyle("text-transform").value,o=function(e,r){return r?(Be(n.rscratch,e,t,r),r):Re(n.rscratch,e,t)};if(!i)return"";"none"==a||("uppercase"==a?i=i.toUpperCase():"lowercase"==a&&(i=i.toLowerCase()));var s=e.pstyle("text-wrap").value;if("wrap"===s){var l=o("labelKey");if(null!=l&&o("labelWrapKey")===l)return o("labelWrapCachedText");for(var u=i.split("\n"),c=e.pstyle("text-max-width").pfValue,h="anywhere"===e.pstyle("text-overflow-wrap").value,d=[],p=/[\s\u200b]+/,g=h?"":" ",f=0;f<u.length;f++){var v=u[f],y=this.calculateLabelDimensions(e,v).width;if(h){var m=v.split("").join("\u200b");v=m}if(y>c){for(var b=v.split(p),x="",w=0;w<b.length;w++){var E=b[w],_=0===x.length?E:x+g+E;this.calculateLabelDimensions(e,_).width<=c?x+=E+g:(x&&d.push(x),x=E+g)}x.match(/^[\s\u200b]+$/)||d.push(x)}else d.push(v)}o("labelWrapCachedLines",d),i=o("labelWrapCachedText",d.join("\n")),o("labelWrapKey",l)}else if("ellipsis"===s){var T=e.pstyle("text-max-width").pfValue,D="",C=!1;if(this.calculateLabelDimensions(e,i).width<T)return i;for(var N=0;N<i.length;N++){if(this.calculateLabelDimensions(e,D+i[N]+"\u2026").width>T)break;D+=i[N],N===i.length-1&&(C=!0)}return C||(D+="\u2026"),D}return i},us.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,n=e.pstyle("text-halign").strValue;if("auto"!==t)return t;if(!e.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},us.calculateLabelDimensions=function(e,t){var n=fe(t,e._private.labelDimsKey),r=this.labelDimCache||(this.labelDimCache=[]),i=r[n];if(null!=i)return i;var a=e.pstyle("font-style").strValue,o=e.pstyle("font-size").pfValue,s=e.pstyle("font-family").strValue,l=e.pstyle("font-weight").strValue,u=this.labelCalcCanvas,c=this.labelCalcCanvasContext;if(!u){u=this.labelCalcCanvas=document.createElement("canvas"),c=this.labelCalcCanvasContext=u.getContext("2d");var h=u.style;h.position="absolute",h.left="-9999px",h.top="-9999px",h.zIndex="-1",h.visibility="hidden",h.pointerEvents="none"}c.font="".concat(a," ").concat(l," ").concat(o,"px ").concat(s);for(var d=0,p=0,g=t.split("\n"),f=0;f<g.length;f++){var v=g[f],y=c.measureText(v),m=Math.ceil(y.width),b=o;d=Math.max(m,d),p+=b}return d+=0,p+=0,r[n]={width:d,height:p}},us.calculateLabelAngle=function(e,t){var n=e._private.rscratch,r=e.isEdge(),i=t?t+"-":"",a=e.pstyle(i+"text-rotation"),o=a.strValue;return"none"===o?0:r&&"autorotate"===o?n.labelAutoAngle:"autorotate"===o?0:a.pfValue},us.calculateLabelAngles=function(e){var t=this,n=e.isEdge(),r=e._private.rscratch;r.labelAngle=t.calculateLabelAngle(e),n&&(r.sourceLabelAngle=t.calculateLabelAngle(e,"source"),r.targetLabelAngle=t.calculateLabelAngle(e,"target"))};var ds={},ps=!1;ds.getNodeShape=function(e){var t=e.pstyle("shape").value;if("cutrectangle"===t&&(e.width()<28||e.height()<28))return ps||(Ae("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),ps=!0),"rectangle";if(e.isParent())return"rectangle"===t||"roundrectangle"===t||"round-rectangle"===t||"cutrectangle"===t||"cut-rectangle"===t||"barrel"===t?t:"rectangle";if("polygon"===t){var n=e.pstyle("shape-polygon-points").value;return this.nodeShapes.makePolygon(n).name}return t};var gs={registerCalculationListeners:function(){var e=this.cy,t=e.collection(),n=this,r=function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r<e.length;r++){var i=e[r]._private.rstyle;i.clean=!1,i.cleanConnected=!1}};n.binder(e).on("bounds.* dirty.*",(function(e){var t=e.target;r(t)})).on("style.* background.*",(function(e){var t=e.target;r(t,!1)}));var i=function(i){if(i){var a=n.onUpdateEleCalcsFns;t.cleanStyle();for(var o=0;o<t.length;o++){var s=t[o],l=s._private.rstyle;s.isNode()&&!l.cleanConnected&&(r(s.connectedEdges()),l.cleanConnected=!0)}if(a)for(var u=0;u<a.length;u++){(0,a[u])(i,t)}n.recalculateRenderedStyle(t),t=e.collection()}};n.flushRenderedStyleQueue=function(){i(!0)},n.beforeRender(i,n.beforeRenderPriorities.eleCalcs)},onUpdateEleCalcs:function(e){(this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[]).push(e)},recalculateRenderedStyle:function(e,t){var n=function(e){return e._private.rstyle.cleanConnected},r=[],i=[];if(!this.destroyed){void 0===t&&(t=!0);for(var a=0;a<e.length;a++){var o=e[a],s=o._private,l=s.rstyle;!o.isEdge()||n(o.source())&&n(o.target())||(l.clean=!1),t&&l.clean||o.removed()||"none"!==o.pstyle("display").value&&("nodes"===s.group?i.push(o):r.push(o),l.clean=!0)}for(var u=0;u<i.length;u++){var c=i[u],h=c._private.rstyle,d=c.position();this.recalculateNodeLabelProjection(c),h.nodeX=d.x,h.nodeY=d.y,h.nodeW=c.pstyle("width").pfValue,h.nodeH=c.pstyle("height").pfValue}this.recalculateEdgeProjections(r);for(var p=0;p<r.length;p++){var g=r[p]._private,f=g.rstyle,v=g.rscratch;f.srcX=v.arrowStartX,f.srcY=v.arrowStartY,f.tgtX=v.arrowEndX,f.tgtY=v.arrowEndY,f.midX=v.midX,f.midY=v.midY,f.labelAngle=v.labelAngle,f.sourceLabelAngle=v.sourceLabelAngle,f.targetLabelAngle=v.targetLabelAngle}}}},fs={updateCachedGrabbedEles:function(){var e=this.cachedZSortedEles;if(e){e.drag=[],e.nondrag=[];for(var t=[],n=0;n<e.length;n++){var r=(i=e[n])._private.rscratch;i.grabbed()&&!i.isParent()?t.push(i):r.inDragLayer?e.drag.push(i):e.nondrag.push(i)}for(n=0;n<t.length;n++){var i=t[n];e.drag.push(i)}}},invalidateCachedZSortedEles:function(){this.cachedZSortedEles=null},getCachedZSortedEles:function(e){if(e||!this.cachedZSortedEles){var t=this.cy.mutableElements().toArray();t.sort(Ji),t.interactive=t.filter((function(e){return e.interactive()})),this.cachedZSortedEles=t,this.updateCachedGrabbedEles()}else t=this.cachedZSortedEles;return t}},vs={};[ns,rs,is,os,ss,us,ds,gs,fs].forEach((function(e){Q(vs,e)}));var ys={getCachedImage:function(e,t,n){var r=this.imageCache=this.imageCache||{},i=r[e];if(i)return i.image.complete||i.image.addEventListener("load",n),i.image;var a=(i=r[e]=r[e]||{}).image=new Image;a.addEventListener("load",n),a.addEventListener("error",(function(){a.error=!0}));var o="data:";return e.substring(0,5).toLowerCase()===o||(t="null"===t?null:t,a.crossOrigin=t),a.src=e,a}},ms={registerBinding:function(e,t,n,r){var i=Array.prototype.slice.apply(arguments,[1]),a=this.binder(e);return a.on.apply(a,i)}};ms.binder=function(e){var t,n=this,r=n.cy.window(),i=e===r||e===r.document||e===r.document.body||(t=e,"undefined"!=typeof HTMLElement&&t instanceof HTMLElement);if(null==n.supportsPassiveEvents){var a=!1;try{var o=Object.defineProperty({},"passive",{get:function(){return a=!0,!0}});r.addEventListener("test",null,o)}catch(l){}n.supportsPassiveEvents=a}var s=function(t,r,a){var o=Array.prototype.slice.call(arguments);return i&&n.supportsPassiveEvents&&(o[2]={capture:null!=a&&a,passive:!1,once:!1}),n.bindings.push({target:e,args:o}),(e.addEventListener||e.on).apply(e,o),this};return{on:s,addEventListener:s,addListener:s,bind:s}},ms.nodeIsDraggable=function(e){return e&&e.isNode()&&!e.locked()&&e.grabbable()},ms.nodeIsGrabbable=function(e){return this.nodeIsDraggable(e)&&e.interactive()},ms.load=function(){var e=this,t=e.cy.window(),n=function(e){return e.selected()},r=function(t,n,r,i){null==t&&(t=e.cy);for(var a=0;a<n.length;a++){var o=n[a];t.emit({originalEvent:r,type:o,position:i})}},i=function(e){return e.shiftKey||e.metaKey||e.ctrlKey},a=function(t,n){var r=!0;if(e.cy.hasCompoundNodes()&&t&&t.pannable())for(var i=0;n&&i<n.length;i++){if((t=n[i]).isNode()&&t.isParent()&&!t.pannable()){r=!1;break}}else r=!0;return r},o=function(e){e[0]._private.rscratch.inDragLayer=!0},s=function(e){e[0]._private.rscratch.isGrabTarget=!0},l=function(e,t){var n=t.addToList;n.has(e)||!e.grabbable()||e.locked()||(n.merge(e),function(e){e[0]._private.grabbed=!0}(e))},c=function(t,n){n=n||{};var r=t.cy().hasCompoundNodes();n.inDragLayer&&(t.forEach(o),t.neighborhood().stdFilter((function(e){return!r||e.isEdge()})).forEach(o)),n.addToList&&t.forEach((function(e){l(e,n)})),function(e,t){if(e.cy().hasCompoundNodes()&&(null!=t.inDragLayer||null!=t.addToList)){var n=e.descendants();t.inDragLayer&&(n.forEach(o),n.connectedEdges().forEach(o)),t.addToList&&l(n,t)}}(t,n),p(t,{inDragLayer:n.inDragLayer}),e.updateCachedGrabbedEles()},h=c,d=function(t){t&&(e.getCachedZSortedEles().forEach((function(e){!function(e){e[0]._private.grabbed=!1}(e),function(e){e[0]._private.rscratch.inDragLayer=!1}(e),function(e){e[0]._private.rscratch.isGrabTarget=!1}(e)})),e.updateCachedGrabbedEles())},p=function(e,t){if((null!=t.inDragLayer||null!=t.addToList)&&e.cy().hasCompoundNodes()){var n=e.ancestors().orphans();if(!n.same(e)){var r=n.descendants().spawnSelf().merge(n).unmerge(e).unmerge(e.descendants()),i=r.connectedEdges();t.inDragLayer&&(i.forEach(o),r.forEach(o)),t.addToList&&r.forEach((function(e){l(e,t)}))}}},g=function(){null!=document.activeElement&&null!=document.activeElement.blur&&document.activeElement.blur()},f="undefined"!=typeof MutationObserver,v="undefined"!=typeof ResizeObserver;f?(e.removeObserver=new MutationObserver((function(t){for(var n=0;n<t.length;n++){var r=t[n].removedNodes;if(r)for(var i=0;i<r.length;i++){if(r[i]===e.container){e.destroy();break}}}})),e.container.parentNode&&e.removeObserver.observe(e.container.parentNode,{childList:!0})):e.registerBinding(e.container,"DOMNodeRemoved",(function(t){e.destroy()}));var y=u.default((function(){e.cy.resize()}),100);f&&(e.styleObserver=new MutationObserver(y),e.styleObserver.observe(e.container,{attributes:!0})),e.registerBinding(t,"resize",y),v&&(e.resizeObserver=new ResizeObserver(y),e.resizeObserver.observe(e.container));var m=function(){e.invalidateContainerClientCoordsCache()};!function(e,t){for(;null!=e;)t(e),e=e.parentNode}(e.container,(function(t){e.registerBinding(t,"transitionend",m),e.registerBinding(t,"animationend",m),e.registerBinding(t,"scroll",m)})),e.registerBinding(e.container,"contextmenu",(function(e){e.preventDefault()}));var b,x,w,E=function(t){for(var n=e.findContainerClientCoords(),r=n[0],i=n[1],a=n[2],o=n[3],s=t.touches?t.touches:[t],l=!1,u=0;u<s.length;u++){var c=s[u];if(r<=c.clientX&&c.clientX<=r+a&&i<=c.clientY&&c.clientY<=i+o){l=!0;break}}if(!l)return!1;for(var h=e.container,d=t.target.parentNode,p=!1;d;){if(d===h){p=!0;break}d=d.parentNode}return!!p};e.registerBinding(e.container,"mousedown",(function(t){if(E(t)){t.preventDefault(),g(),e.hoverData.capture=!0,e.hoverData.which=t.which;var n=e.cy,i=[t.clientX,t.clientY],a=e.projectIntoViewport(i[0],i[1]),o=e.selection,l=e.findNearestElements(a[0],a[1],!0,!1),u=l[0],d=e.dragData.possibleDragElements;e.hoverData.mdownPos=a,e.hoverData.mdownGPos=i;if(3==t.which){e.hoverData.cxtStarted=!0;var p={originalEvent:t,type:"cxttapstart",position:{x:a[0],y:a[1]}};u?(u.activate(),u.emit(p),e.hoverData.down=u):n.emit(p),e.hoverData.downTime=(new Date).getTime(),e.hoverData.cxtDragged=!1}else if(1==t.which){if(u&&u.activate(),null!=u&&e.nodeIsGrabbable(u)){var f=function(e){return{originalEvent:t,type:e,position:{x:a[0],y:a[1]}}};if(s(u),u.selected()){d=e.dragData.possibleDragElements=n.collection();var v=n.$((function(t){return t.isNode()&&t.selected()&&e.nodeIsGrabbable(t)}));c(v,{addToList:d}),u.emit(f("grabon")),v.forEach((function(e){e.emit(f("grab"))}))}else d=e.dragData.possibleDragElements=n.collection(),h(u,{addToList:d}),u.emit(f("grabon")).emit(f("grab"));e.redrawHint("eles",!0),e.redrawHint("drag",!0)}e.hoverData.down=u,e.hoverData.downs=l,e.hoverData.downTime=(new Date).getTime(),r(u,["mousedown","tapstart","vmousedown"],t,{x:a[0],y:a[1]}),null==u?(o[4]=1,e.data.bgActivePosistion={x:a[0],y:a[1]},e.redrawHint("select",!0),e.redraw()):u.pannable()&&(o[4]=1),e.hoverData.tapholdCancelled=!1,clearTimeout(e.hoverData.tapholdTimeout),e.hoverData.tapholdTimeout=setTimeout((function(){if(!e.hoverData.tapholdCancelled){var r=e.hoverData.down;r?r.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}}):n.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}})}}),e.tapholdDuration)}o[0]=o[2]=a[0],o[1]=o[3]=a[1]}}),!1),e.registerBinding(t,"mousemove",(function(t){if(e.hoverData.capture||E(t)){var n=!1,o=e.cy,s=o.zoom(),l=[t.clientX,t.clientY],u=e.projectIntoViewport(l[0],l[1]),h=e.hoverData.mdownPos,p=e.hoverData.mdownGPos,g=e.selection,f=null;e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.selecting||(f=e.findNearestElement(u[0],u[1],!0,!1));var v,y=e.hoverData.last,m=e.hoverData.down,b=[u[0]-g[2],u[1]-g[3]],x=e.dragData.possibleDragElements;if(p){var w=l[0]-p[0],_=w*w,T=l[1]-p[1],D=_+T*T;e.hoverData.isOverThresholdDrag=v=D>=e.desktopTapThreshold2}var C=i(t);v&&(e.hoverData.tapholdCancelled=!0);n=!0,r(f,["mousemove","vmousemove","tapdrag"],t,{x:u[0],y:u[1]});var N=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:u[0],y:u[1]}}),g[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(v){var A={originalEvent:t,type:"cxtdrag",position:{x:u[0],y:u[1]}};m?m.emit(A):o.emit(A),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&f===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:u[0],y:u[1]}}),e.hoverData.cxtOver=f,f&&f.emit({originalEvent:t,type:"cxtdragover",position:{x:u[0],y:u[1]}}))}}else if(e.hoverData.dragging){if(n=!0,o.panningEnabled()&&o.userPanningEnabled()){var L;if(e.hoverData.justStartedPan){var k=e.hoverData.mdownPos;L={x:(u[0]-k[0])*s,y:(u[1]-k[1])*s},e.hoverData.justStartedPan=!1}else L={x:b[0]*s,y:b[1]*s};o.panBy(L),o.emit("dragpan"),e.hoverData.dragged=!0}u=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=g[4]||null!=m&&!m.pannable()){if(m&&m.pannable()&&m.active()&&m.unactivate(),m&&m.grabbed()||f==y||(y&&r(y,["mouseout","tapdragout"],t,{x:u[0],y:u[1]}),f&&r(f,["mouseover","tapdragover"],t,{x:u[0],y:u[1]}),e.hoverData.last=f),m)if(v){if(o.boxSelectionEnabled()&&C)m&&m.grabbed()&&(d(x),m.emit("freeon"),x.emit("free"),e.dragData.didDrag&&(m.emit("dragfreeon"),x.emit("dragfree"))),N();else if(m&&m.grabbed()&&e.nodeIsDraggable(m)){var S=!e.dragData.didDrag;S&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||c(x,{inDragLayer:!0});var M={x:0,y:0};if(I(b[0])&&I(b[1])&&(M.x+=b[0],M.y+=b[1],S)){var O=e.hoverData.dragDelta;O&&I(O[0])&&I(O[1])&&(M.x+=O[0],M.y+=O[1])}e.hoverData.draggingEles=!0,x.silentShift(M).emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else!function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(b[0]),t.push(b[1])):(t[0]+=b[0],t[1]+=b[1])}();n=!0}else if(v){if(e.hoverData.dragging||!o.boxSelectionEnabled()||!C&&o.panningEnabled()&&o.userPanningEnabled()){if(!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()){a(m,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,g[4]=0,e.data.bgActivePosistion=at(h),e.redrawHint("select",!0),e.redraw())}}else N();m&&m.pannable()&&m.active()&&m.unactivate()}return g[2]=u[0],g[3]=u[1],n?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}}),!1),e.registerBinding(t,"mouseup",(function(t){if(e.hoverData.capture){e.hoverData.capture=!1;var a=e.cy,o=e.projectIntoViewport(t.clientX,t.clientY),s=e.selection,l=e.findNearestElement(o[0],o[1],!0,!1),u=e.dragData.possibleDragElements,c=e.hoverData.down,h=i(t);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate(),3===e.hoverData.which){var p={originalEvent:t,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(p):a.emit(p),!e.hoverData.cxtDragged){var g={originalEvent:t,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(g):a.emit(g)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(r(l,["mouseup","tapend","vmouseup"],t,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(r(c,["click","tap","vclick"],t,{x:o[0],y:o[1]}),x=!1,t.timeStamp-w<=a.multiClickDebounceTime()?(b&&clearTimeout(b),x=!0,w=null,r(c,["dblclick","dbltap","vdblclick"],t,{x:o[0],y:o[1]})):(b=setTimeout((function(){x||r(c,["oneclick","onetap","voneclick"],t,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),w=t.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||i(t)||(a.$(n).unselect(["tapunselect"]),u.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=u=a.collection()),l!=c||e.dragData.didDrag||e.hoverData.selecting||null!=l&&l._private.selectable&&(e.hoverData.dragging||("additive"===a.selectionType()||h?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):h||(a.$(n).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var f=a.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),f.length>0&&e.redrawHint("eles",!0),a.emit({type:"boxend",originalEvent:t,position:{x:o[0],y:o[1]}});var v=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||h||a.$(n).unmerge(f).unselect(),f.emit("box").stdFilter(v).select().emit("boxselect"),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!s[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var y=c&&c.grabbed();d(u),y&&(c.emit("freeon"),u.emit("free"),e.dragData.didDrag&&(c.emit("dragfreeon"),u.emit("dragfree")))}}s[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null}}),!1);var _,T,D,C,N,A,L,k,S,M,O,P,R,B=function(t){if(!e.scrollingPage){var n=e.cy,r=n.zoom(),i=n.pan(),a=e.projectIntoViewport(t.clientX,t.clientY),o=[a[0]*r+i.x,a[1]*r+i.y];if(e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||0!==e.selection[4])t.preventDefault();else if(n.panningEnabled()&&n.userPanningEnabled()&&n.zoomingEnabled()&&n.userZoomingEnabled()){var s;t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout((function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()}),150),s=null!=t.deltaY?t.deltaY/-250:null!=t.wheelDeltaY?t.wheelDeltaY/1e3:t.wheelDelta/1e3,s*=e.wheelSensitivity,1===t.deltaMode&&(s*=33);var l=n.zoom()*Math.pow(10,s);"gesturechange"===t.type&&(l=e.gestureStartZoom*t.scale),n.zoom({level:l,renderedPosition:{x:o[0],y:o[1]}}),n.emit("gesturechange"===t.type?"pinchzoom":"scrollzoom")}}};e.registerBinding(e.container,"wheel",B,!0),e.registerBinding(t,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"gesturestart",(function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()}),!0),e.registerBinding(e.container,"gesturechange",(function(t){e.hasTouchStarted||B(t)}),!0),e.registerBinding(e.container,"mouseout",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),e.registerBinding(e.container,"mouseover",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var F,z,G,Y,X,V,U,j=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},q=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",F=function(t){if(e.hasTouchStarted=!0,E(t)){g(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var n=e.cy,i=e.touchData.now,a=e.touchData.earlier;if(t.touches[0]){var o=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);i[0]=o[0],i[1]=o[1]}if(t.touches[1]){o=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);i[2]=o[0],i[3]=o[1]}if(t.touches[2]){o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);i[4]=o[0],i[5]=o[1]}if(t.touches[1]){e.touchData.singleTouchMoved=!0,d(e.dragData.touchDragEles);var l=e.findContainerClientCoords();S=l[0],M=l[1],O=l[2],P=l[3],_=t.touches[0].clientX-S,T=t.touches[0].clientY-M,D=t.touches[1].clientX-S,C=t.touches[1].clientY-M,R=0<=_&&_<=O&&0<=D&&D<=O&&0<=T&&T<=P&&0<=C&&C<=P;var u=n.pan(),p=n.zoom();N=j(_,T,D,C),A=q(_,T,D,C),k=[((L=[(_+D)/2,(T+C)/2])[0]-u.x)/p,(L[1]-u.y)/p];if(A<4e4&&!t.touches[2]){var f=e.findNearestElement(i[0],i[1],!0,!0),v=e.findNearestElement(i[2],i[3],!0,!0);return f&&f.isNode()?(f.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=f):v&&v.isNode()?(v.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=v):n.emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(t.touches[2])n.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var y=e.findNearestElements(i[0],i[1],!0,!0),m=y[0];if(null!=m&&(m.activate(),e.touchData.start=m,e.touchData.starts=y,e.nodeIsGrabbable(m))){var b=e.dragData.touchDragEles=n.collection(),x=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),m.selected()?(x=n.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),c(x,{addToList:b})):h(m,{addToList:b}),s(m);var w=function(e){return{originalEvent:t,type:e,position:{x:i[0],y:i[1]}}};m.emit(w("grabon")),x?x.forEach((function(e){e.emit(w("grab"))})):m.emit(w("grab"))}r(m,["touchstart","tapstart","vmousedown"],t,{x:i[0],y:i[1]}),null==m&&(e.data.bgActivePosistion={x:o[0],y:o[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout((function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||r(e.touchData.start,["taphold"],t,{x:i[0],y:i[1]})}),e.tapholdDuration)}if(t.touches.length>=1){for(var I=e.touchData.startPosition=[null,null,null,null,null,null],B=0;B<i.length;B++)I[B]=a[B]=i[B];var F=t.touches[0];e.touchData.startGPosition=[F.clientX,F.clientY]}}},!1),e.registerBinding(window,"touchmove",z=function(t){var n=e.touchData.capture;if(n||E(t)){var i=e.selection,o=e.cy,s=e.touchData.now,l=e.touchData.earlier,u=o.zoom();if(t.touches[0]){var h=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=h[0],s[1]=h[1]}if(t.touches[1]){h=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);s[2]=h[0],s[3]=h[1]}if(t.touches[2]){h=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);s[4]=h[0],s[5]=h[1]}var p,g=e.touchData.startGPosition;if(n&&t.touches[0]&&g){for(var f=[],v=0;v<s.length;v++)f[v]=s[v]-l[v];var y=t.touches[0].clientX-g[0],m=y*y,b=t.touches[0].clientY-g[1];p=m+b*b>=e.touchTapThreshold2}if(n&&e.touchData.cxt){t.preventDefault();var x=t.touches[0].clientX-S,w=t.touches[0].clientY-M,L=t.touches[1].clientX-S,O=t.touches[1].clientY-M,P=q(x,w,L,O);if(P/A>=2.25||P>=22500){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var B={originalEvent:t,type:"cxttapend",position:{x:s[0],y:s[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(B),e.touchData.start=null):o.emit(B)}}if(n&&e.touchData.cxt){B={originalEvent:t,type:"cxtdrag",position:{x:s[0],y:s[1]}};e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(B):o.emit(B),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var F=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&F===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:s[0],y:s[1]}}),e.touchData.cxtOver=F,F&&F.emit({originalEvent:t,type:"cxtdragover",position:{x:s[0],y:s[1]}}))}else if(n&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:s[0],y:s[1]}}),e.touchData.selecting=!0,e.touchData.didSelect=!0,i[4]=1,i&&0!==i.length&&void 0!==i[0]?(i[2]=(s[0]+s[2]+s[4])/3,i[3]=(s[1]+s[3]+s[5])/3):(i[0]=(s[0]+s[2]+s[4])/3,i[1]=(s[1]+s[3]+s[5])/3,i[2]=(s[0]+s[2]+s[4])/3+1,i[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(n&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),ee=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var z=0;z<ee.length;z++){var G=ee[z]._private;G.grabbed=!1,G.rscratch.inDragLayer=!1}}var Y=e.touchData.start,X=(x=t.touches[0].clientX-S,w=t.touches[0].clientY-M,L=t.touches[1].clientX-S,O=t.touches[1].clientY-M,j(x,w,L,O)),V=X/N;if(R){var U=(x-_+(L-D))/2,H=(w-T+(O-C))/2,W=o.zoom(),$=W*V,K=o.pan(),Z=k[0]*W+K.x,Q=k[1]*W+K.y,J={x:-$/W*(Z-K.x-U)+Z,y:-$/W*(Q-K.y-H)+Q};if(Y&&Y.active()){var ee=e.dragData.touchDragEles;d(ee),e.redrawHint("drag",!0),e.redrawHint("eles",!0),Y.unactivate().emit("freeon"),ee.emit("free"),e.dragData.didDrag&&(Y.emit("dragfreeon"),ee.emit("dragfree"))}o.viewport({zoom:$,pan:J,cancelOnFailedZoom:!0}),o.emit("pinchzoom"),N=X,_=x,T=w,D=L,C=O,e.pinching=!0}if(t.touches[0]){h=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=h[0],s[1]=h[1]}if(t.touches[1]){h=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);s[2]=h[0],s[3]=h[1]}if(t.touches[2]){h=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);s[4]=h[0],s[5]=h[1]}}else if(t.touches[0]&&!e.touchData.didSelect){var te=e.touchData.start,ne=e.touchData.last;if(e.hoverData.draggingEles||e.swipePanning||(F=e.findNearestElement(s[0],s[1],!0,!0)),n&&null!=te&&t.preventDefault(),n&&null!=te&&e.nodeIsDraggable(te))if(p){ee=e.dragData.touchDragEles;var re=!e.dragData.didDrag;re&&c(ee,{inDragLayer:!0}),e.dragData.didDrag=!0;var ie={x:0,y:0};if(I(f[0])&&I(f[1]))if(ie.x+=f[0],ie.y+=f[1],re)e.redrawHint("eles",!0),(ae=e.touchData.dragDelta)&&I(ae[0])&&I(ae[1])&&(ie.x+=ae[0],ie.y+=ae[1]);e.hoverData.draggingEles=!0,ee.silentShift(ie).emit("position drag"),e.redrawHint("drag",!0),e.touchData.startPosition[0]==l[0]&&e.touchData.startPosition[1]==l[1]&&e.redrawHint("eles",!0),e.redraw()}else{var ae;0===(ae=e.touchData.dragDelta=e.touchData.dragDelta||[]).length?(ae.push(f[0]),ae.push(f[1])):(ae[0]+=f[0],ae[1]+=f[1])}if(r(te||F,["touchmove","tapdrag","vmousemove"],t,{x:s[0],y:s[1]}),te&&te.grabbed()||F==ne||(ne&&ne.emit({originalEvent:t,type:"tapdragout",position:{x:s[0],y:s[1]}}),F&&F.emit({originalEvent:t,type:"tapdragover",position:{x:s[0],y:s[1]}})),e.touchData.last=F,n)for(z=0;z<s.length;z++)s[z]&&e.touchData.startPosition[z]&&p&&(e.touchData.singleTouchMoved=!0);if(n&&(null==te||te.pannable())&&o.panningEnabled()&&o.userPanningEnabled()){a(te,e.touchData.starts)&&(t.preventDefault(),e.data.bgActivePosistion||(e.data.bgActivePosistion=at(e.touchData.startPosition)),e.swipePanning?(o.panBy({x:f[0]*u,y:f[1]*u}),o.emit("dragpan")):p&&(e.swipePanning=!0,o.panBy({x:y*u,y:b*u}),o.emit("dragpan"),te&&(te.unactivate(),e.redrawHint("select",!0),e.touchData.start=null)));h=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=h[0],s[1]=h[1]}}for(v=0;v<s.length;v++)l[v]=s[v];n&&t.touches.length>0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(t,"touchcancel",G=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(t,"touchend",Y=function(t){var i=e.touchData.start;if(e.touchData.capture){0===t.touches.length&&(e.touchData.capture=!1),t.preventDefault();var a=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o,s=e.cy,l=s.zoom(),u=e.touchData.now,c=e.touchData.earlier;if(t.touches[0]){var h=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);u[0]=h[0],u[1]=h[1]}if(t.touches[1]){h=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);u[2]=h[0],u[3]=h[1]}if(t.touches[2]){h=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);u[4]=h[0],u[5]=h[1]}if(i&&i.unactivate(),e.touchData.cxt){if(o={originalEvent:t,type:"cxttapend",position:{x:u[0],y:u[1]}},i?i.emit(o):s.emit(o),!e.touchData.cxtDragged){var p={originalEvent:t,type:"cxttap",position:{x:u[0],y:u[1]}};i?i.emit(p):s.emit(p)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!t.touches[2]&&s.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var g=s.collection(e.getAllInBox(a[0],a[1],a[2],a[3]));a[0]=void 0,a[1]=void 0,a[2]=void 0,a[3]=void 0,a[4]=0,e.redrawHint("select",!0),s.emit({type:"boxend",originalEvent:t,position:{x:u[0],y:u[1]}});g.emit("box").stdFilter((function(e){return e.selectable()&&!e.selected()})).select().emit("boxselect"),g.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=i&&i.unactivate(),t.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(t.touches[1]);else if(t.touches[0]);else if(!t.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var f=e.dragData.touchDragEles;if(null!=i){var v=i._private.grabbed;d(f),e.redrawHint("drag",!0),e.redrawHint("eles",!0),v&&(i.emit("freeon"),f.emit("free"),e.dragData.didDrag&&(i.emit("dragfreeon"),f.emit("dragfree"))),r(i,["touchend","tapend","vmouseup","tapdragout"],t,{x:u[0],y:u[1]}),i.unactivate(),e.touchData.start=null}else{var y=e.findNearestElement(u[0],u[1],!0,!0);r(y,["touchend","tapend","vmouseup","tapdragout"],t,{x:u[0],y:u[1]})}var m=e.touchData.startPosition[0]-u[0],b=m*m,x=e.touchData.startPosition[1]-u[1],w=(b+x*x)*l*l;e.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),r(i,["tap","vclick"],t,{x:u[0],y:u[1]}),X=!1,t.timeStamp-U<=s.multiClickDebounceTime()?(V&&clearTimeout(V),X=!0,U=null,r(i,["dbltap","vdblclick"],t,{x:u[0],y:u[1]})):(V=setTimeout((function(){X||r(i,["onetap","voneclick"],t,{x:u[0],y:u[1]})}),s.multiClickDebounceTime()),U=t.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&w<e.touchTapThreshold2&&!e.pinching&&("single"===s.selectionType()?(s.$(n).unmerge(i).unselect(["tapunselect"]),i.select(["tapselect"])):i.selected()?i.unselect(["tapunselect"]):i.select(["tapselect"]),e.redrawHint("eles",!0)),e.touchData.singleTouchMoved=!0}for(var E=0;E<u.length;E++)c[E]=u[E];e.dragData.didDrag=!1,0===t.touches.length&&(e.touchData.dragDelta=[],e.touchData.startPosition=[null,null,null,null,null,null],e.touchData.startGPosition=null,e.touchData.didSelect=!1),t.touches.length<2&&(1===t.touches.length&&(e.touchData.startGPosition=[t.touches[0].clientX,t.touches[0].clientY]),e.pinching=!1,e.redrawHint("eles",!0),e.redraw())}},!1),"undefined"==typeof TouchEvent){var H=[],W=function(e){return{clientX:e.clientX,clientY:e.clientY,force:1,identifier:e.pointerId,pageX:e.pageX,pageY:e.pageY,radiusX:e.width/2,radiusY:e.height/2,screenX:e.screenX,screenY:e.screenY,target:e.target}},$=function(e){H.push(function(e){return{event:e,touch:W(e)}}(e))},K=function(e){for(var t=0;t<H.length;t++){if(H[t].event.pointerId===e.pointerId)return void H.splice(t,1)}},Z=function(e){e.touches=H.map((function(e){return e.touch}))},Q=function(e){return"mouse"===e.pointerType||4===e.pointerType};e.registerBinding(e.container,"pointerdown",(function(e){Q(e)||(e.preventDefault(),$(e),Z(e),F(e))})),e.registerBinding(e.container,"pointerup",(function(e){Q(e)||(K(e),Z(e),Y(e))})),e.registerBinding(e.container,"pointercancel",(function(e){Q(e)||(K(e),Z(e),G())})),e.registerBinding(e.container,"pointermove",(function(e){Q(e)||(e.preventDefault(),function(e){var t=H.filter((function(t){return t.event.pointerId===e.pointerId}))[0];t.event=e,t.touch=W(e)}(e),Z(e),z(e))}))}};var bs={generatePolygon:function(e,t){return this.nodeShapes[e]={renderer:this,name:e,points:t,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return Bt(i,a,this.points,e,t,n/2,r/2,o)},checkPoint:function(e,t,n,r,i,a,o){return kt(e,t,this.points,a,o,r,i,[0,-1],n)}}}};bs.generateEllipse=function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return function(e,t,n,r,i,a){var o=n-e,s=r-t;o/=i,s/=a;var l=Math.sqrt(o*o+s*s),u=l-1;if(u<0)return[];var c=u/l;return[(n-e)*c+e,(r-t)*c+t]}(i,a,e,t,n/2+o,r/2+o)},checkPoint:function(e,t,n,r,i,a,o){return Mt(e,t,r,i,a,o,n)}}},bs.generateRoundPolygon=function(e,t){for(var n=new Array(2*t.length),r=0;r<t.length/2;r++){var i=2*r,a=void 0;a=r<t.length/2-1?2*(r+1):0,n[4*r]=t[i],n[4*r+1]=t[i+1];var o=t[a]-t[i],s=t[a+1]-t[i+1],l=Math.sqrt(o*o+s*s);n[4*r+2]=o/l,n[4*r+3]=s/l}return this.nodeShapes[e]={renderer:this,name:e,points:n,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("round-polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return function(e,t,n,r,i,a,o,s){for(var l,u=[],c=new Array(n.length),h=a/2,d=o/2,p=Vt(a,o),g=0;g<n.length/4;g++){var f,v=void 0;v=0===g?n.length-2:4*g-2,f=4*g+2;var y=r+h*n[4*g],m=i+d*n[4*g+1],b=-n[v]*n[f]-n[v+1]*n[f+1],x=p/Math.tan(Math.acos(b)/2),w=y-x*n[v],E=m-x*n[v+1],_=y+x*n[f],T=m+x*n[f+1];0===g?(c[n.length-2]=w,c[n.length-1]=E):(c[4*g-2]=w,c[4*g-1]=E),c[4*g]=_,c[4*g+1]=T;var D=n[v+1],C=-n[v];D*n[f]+C*n[f+1]<0&&(D*=-1,C*=-1),0!==(l=Ot(e,t,r,i,w+D*p,E+C*p,p)).length&&u.push(l[0],l[1])}for(var N=0;N<c.length/4;N++)0!==(l=Rt(e,t,r,i,c[4*N],c[4*N+1],c[4*N+2],c[4*N+3],!1)).length&&u.push(l[0],l[1]);if(u.length>2){for(var A=[u[0],u[1]],L=Math.pow(A[0]-e,2)+Math.pow(A[1]-t,2),k=1;k<u.length/2;k++){var S=Math.pow(u[2*k]-e,2)+Math.pow(u[2*k+1]-t,2);S<=L&&(A[0]=u[2*k],A[1]=u[2*k+1],L=S)}return A}return u}(i,a,this.points,e,t,n,r)},checkPoint:function(e,t,n,r,i,a,o){return function(e,t,n,r,i,a,o){for(var s=new Array(n.length),l=a/2,u=o/2,c=Vt(a,o),h=c*c,d=0;d<n.length/4;d++){var p,g=void 0;g=0===d?n.length-2:4*d-2,p=4*d+2;var f=r+l*n[4*d],v=i+u*n[4*d+1],y=-n[g]*n[p]-n[g+1]*n[p+1],m=c/Math.tan(Math.acos(y)/2),b=f-m*n[g],x=v-m*n[g+1],w=f+m*n[p],E=v+m*n[p+1];s[4*d]=b,s[4*d+1]=x,s[4*d+2]=w,s[4*d+3]=E;var _=n[g+1],T=-n[g];_*n[p]+T*n[p+1]<0&&(_*=-1,T*=-1);var D=b+_*c,C=x+T*c;if(Math.pow(D-e,2)+Math.pow(C-t,2)<=h)return!0}return Lt(e,t,s)}(e,t,this.points,a,o,r,i)}}},bs.generateRoundRectangle=function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return Tt(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=Xt(r,i),l=2*s;return!!kt(e,t,this.points,a,o,r,i-l,[0,-1],n)||(!!kt(e,t,this.points,a,o,r-l,i,[0,-1],n)||(!!Mt(e,t,l,l,a-r/2+s,o-i/2+s,n)||(!!Mt(e,t,l,l,a+r/2-s,o-i/2+s,n)||(!!Mt(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!Mt(e,t,l,l,a-r/2+s,o+i/2-s,n)))))}}},bs.generateCutRectangle=function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:8,points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},generateCutTrianglePts:function(e,t,n,r){var i=this.cornerLength,a=t/2,o=e/2,s=n-o,l=n+o,u=r-a,c=r+a;return{topLeft:[s,u+i,s+i,u,s+i,u+i],topRight:[l-i,u,l,u+i,l-i,u+i],bottomRight:[l,c-i,l-i,c,l-i,c-i],bottomLeft:[s+i,c,s,c-i,s+i,c-i]}},intersectLine:function(e,t,n,r,i,a,o){var s=this.generateCutTrianglePts(n+2*o,r+2*o,e,t),l=[].concat.apply([],[s.topLeft.splice(0,4),s.topRight.splice(0,4),s.bottomRight.splice(0,4),s.bottomLeft.splice(0,4)]);return Bt(i,a,l,e,t)},checkPoint:function(e,t,n,r,i,a,o){if(kt(e,t,this.points,a,o,r,i-2*this.cornerLength,[0,-1],n))return!0;if(kt(e,t,this.points,a,o,r-2*this.cornerLength,i,[0,-1],n))return!0;var s=this.generateCutTrianglePts(r,i,a,o);return Lt(e,t,s.topLeft)||Lt(e,t,s.topRight)||Lt(e,t,s.bottomRight)||Lt(e,t,s.bottomLeft)}}},bs.generateBarrel=function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=this.generateBarrelBezierPts(n+2*o,r+2*o,e,t),l=function(e){var t=pt({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.15),n=pt({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.5),r=pt({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.85);return[e[0],e[1],t.x,t.y,n.x,n.y,r.x,r.y,e[4],e[5]]},u=[].concat(l(s.topLeft),l(s.topRight),l(s.bottomRight),l(s.bottomLeft));return Bt(i,a,u,e,t)},generateBarrelBezierPts:function(e,t,n,r){var i=t/2,a=e/2,o=n-a,s=n+a,l=r-i,u=r+i,c=Ut(e,t),h=c.heightOffset,d=c.widthOffset,p=c.ctrlPtOffsetPct*e,g={topLeft:[o,l+h,o+p,l,o+d,l],topRight:[s-d,l,s-p,l,s,l+h],bottomRight:[s,u-h,s-p,u,s-d,u],bottomLeft:[o+d,u,o+p,u,o,u-h]};return g.topLeft.isTop=!0,g.topRight.isTop=!0,g.bottomLeft.isBottom=!0,g.bottomRight.isBottom=!0,g},checkPoint:function(e,t,n,r,i,a,o){var s=Ut(r,i),l=s.heightOffset,u=s.widthOffset;if(kt(e,t,this.points,a,o,r,i-2*l,[0,-1],n))return!0;if(kt(e,t,this.points,a,o,r-2*u,i,[0,-1],n))return!0;for(var c=this.generateBarrelBezierPts(r,i,a,o),h=function(e,t,n){var r,i,a=n[4],o=n[2],s=n[0],l=n[5],u=n[1],c=Math.min(a,s),h=Math.max(a,s),d=Math.min(l,u),p=Math.max(l,u);if(c<=e&&e<=h&&d<=t&&t<=p){var g=[(r=a)-2*(i=o)+s,2*(i-r),r],f=function(e,t,n,r){var i=t*t-4*e*(n-=r);if(i<0)return[];var a=Math.sqrt(i),o=2*e;return[(-t+a)/o,(-t-a)/o]}(g[0],g[1],g[2],e).filter((function(e){return 0<=e&&e<=1}));if(f.length>0)return f[0]}return null},d=Object.keys(c),p=0;p<d.length;p++){var g=c[d[p]],f=h(e,t,g);if(null!=f){var v=g[5],y=g[3],m=g[1],b=dt(v,y,m,f);if(g.isTop&&b<=t)return!0;if(g.isBottom&&t<=b)return!0}}return!1}}},bs.generateBottomRoundrectangle=function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=t-(r/2+o),l=Rt(i,a,e,t,e-(n/2+o),s,e+(n/2+o),s,!1);return l.length>0?l:Tt(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=Xt(r,i),l=2*s;if(kt(e,t,this.points,a,o,r,i-l,[0,-1],n))return!0;if(kt(e,t,this.points,a,o,r-l,i,[0,-1],n))return!0;var u=r/2+2*n,c=i/2+2*n;return!!Lt(e,t,[a-u,o-c,a-u,o,a+u,o,a+u,o-c])||(!!Mt(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!Mt(e,t,l,l,a-r/2+s,o+i/2-s,n))}}},bs.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",zt(3,0)),this.generateRoundPolygon("round-triangle",zt(3,0)),this.generatePolygon("rectangle",zt(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",zt(5,0)),this.generateRoundPolygon("round-pentagon",zt(5,0)),this.generatePolygon("hexagon",zt(6,0)),this.generateRoundPolygon("round-hexagon",zt(6,0)),this.generatePolygon("heptagon",zt(7,0)),this.generateRoundPolygon("round-heptagon",zt(7,0)),this.generatePolygon("octagon",zt(8,0)),this.generateRoundPolygon("round-octagon",zt(8,0));var r=new Array(20),i=Yt(5,0),a=Yt(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s<a.length/2;s++)a[2*s]*=o,a[2*s+1]*=o;for(s=0;s<5;s++)r[4*s]=i[2*s],r[4*s+1]=i[2*s+1],r[4*s+2]=a[2*s],r[4*s+3]=a[2*s+1];r=Gt(r),this.generatePolygon("star",r),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("right-rhomboid",[-.333,-1,1,-1,.333,1,-1,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);var l=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",l),this.generateRoundPolygon("round-tag",l),e.makePolygon=function(e){var n,r="polygon-"+e.join("$");return(n=this[r])?n:t.generatePolygon(r,e)}};var xs={timeToRender:function(){return this.redrawTotalTime/this.redrawCount},redraw:function(e){e=e||Ie();var t=this;void 0===t.averageRedrawTime&&(t.averageRedrawTime=0),void 0===t.lastRedrawTime&&(t.lastRedrawTime=0),void 0===t.lastDrawTime&&(t.lastDrawTime=0),t.requestedFrame=!0,t.renderOptions=e},beforeRender:function(e,t){if(!this.destroyed){null==t&&Ce("Priority is not optional for beforeRender");var n=this.beforeRenderCallbacks;n.push({fn:e,priority:t}),n.sort((function(e,t){return t.priority-e.priority}))}}},ws=function(e,t,n){for(var r=e.beforeRenderCallbacks,i=0;i<r.length;i++)r[i].fn(t,n)};xs.startRenderLoop=function(){var e=this,t=e.cy;if(!e.renderLoopStarted){e.renderLoopStarted=!0;oe((function n(r){if(!e.destroyed){if(t.batching());else if(e.requestedFrame&&!e.skipFrame){ws(e,!0,r);var i=se();e.render(e.renderOptions);var a=e.lastDrawTime=se();void 0===e.averageRedrawTime&&(e.averageRedrawTime=a-i),void 0===e.redrawCount&&(e.redrawCount=0),e.redrawCount++,void 0===e.redrawTotalTime&&(e.redrawTotalTime=0);var o=a-i;e.redrawTotalTime+=o,e.lastRedrawTime=o,e.averageRedrawTime=e.averageRedrawTime/2+o/2,e.requestedFrame=!1}else ws(e,!1,r);e.skipFrame=!1,oe(n)}}))}};var Es=function(e){this.init(e)},_s=Es.prototype;_s.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"],_s.init=function(e){var t=this;t.options=e,t.cy=e.cy;var n=t.container=e.cy.container(),r=t.cy.window();if(r){var i=r.document,a=i.head,o="__________cytoscape_stylesheet",s="__________cytoscape_container",l=null!=i.getElementById(o);if(n.className.indexOf(s)<0&&(n.className=(n.className||"")+" "+s),!l){var u=i.createElement("style");u.id=o,u.textContent="."+s+" { position: relative; }",a.insertBefore(u,a.children[0])}"static"===r.getComputedStyle(n).getPropertyValue("position")&&Ae("A Cytoscape container has style position:static and so can not use UI extensions properly")}t.selection=[void 0,void 0,void 0,void 0,0],t.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],t.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},t.dragData={possibleDragElements:[]},t.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},t.redraws=0,t.showFps=e.showFps,t.debug=e.debug,t.hideEdgesOnViewport=e.hideEdgesOnViewport,t.textureOnViewport=e.textureOnViewport,t.wheelSensitivity=e.wheelSensitivity,t.motionBlurEnabled=e.motionBlur,t.forcedPixelRatio=I(e.pixelRatio)?e.pixelRatio:null,t.motionBlur=e.motionBlur,t.motionBlurOpacity=e.motionBlurOpacity,t.motionBlurTransparency=1-t.motionBlurOpacity,t.motionBlurPxRatio=1,t.mbPxRBlurry=1,t.minMbLowQualFrames=4,t.fullQualityMb=!1,t.clearedForMotionBlur=[],t.desktopTapThreshold=e.desktopTapThreshold,t.desktopTapThreshold2=e.desktopTapThreshold*e.desktopTapThreshold,t.touchTapThreshold=e.touchTapThreshold,t.touchTapThreshold2=e.touchTapThreshold*e.touchTapThreshold,t.tapholdDuration=500,t.bindings=[],t.beforeRenderCallbacks=[],t.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},t.registerNodeShapes(),t.registerArrowShapes(),t.registerCalculationListeners()},_s.notify=function(e,t){var n=this,r=n.cy;this.destroyed||("init"!==e?"destroy"!==e?(("add"===e||"remove"===e||"move"===e&&r.hasCompoundNodes()||"load"===e||"zorder"===e||"mount"===e)&&n.invalidateCachedZSortedEles(),"viewport"===e&&n.redrawHint("select",!0),"load"!==e&&"resize"!==e&&"mount"!==e||(n.invalidateContainerClientCoordsCache(),n.matchCanvasSize(n.container)),n.redrawHint("eles",!0),n.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()):n.destroy():n.load())},_s.destroy=function(){var e=this;e.destroyed=!0,e.cy.stopAnimationLoop();for(var t=0;t<e.bindings.length;t++){var n=e.bindings[t],r=n.target;(r.off||r.removeEventListener).apply(r,n.args)}if(e.bindings=[],e.beforeRenderCallbacks=[],e.onUpdateEleCalcsFns=[],e.removeObserver&&e.removeObserver.disconnect(),e.styleObserver&&e.styleObserver.disconnect(),e.resizeObserver&&e.resizeObserver.disconnect(),e.labelCalcDiv)try{document.body.removeChild(e.labelCalcDiv)}catch(i){}},_s.isHeadless=function(){return!1},[ts,vs,ys,ms,bs,xs].forEach((function(e){Q(_s,e)}));var Ts=1e3/60,Ds=function(e){return function(){var t=this,n=this.renderer;if(!t.dequeueingSetup){t.dequeueingSetup=!0;var r=u.default((function(){n.redrawHint("eles",!0),n.redrawHint("drag",!0),n.redraw()}),e.deqRedrawThreshold),i=e.priority||De;n.beforeRender((function(i,a){var o=se(),s=n.averageRedrawTime,l=n.lastRedrawTime,u=[],c=n.cy.extent(),h=n.getPixelRatio();for(i||n.flushRenderedStyleQueue();;){var d=se(),p=d-o,g=d-a;if(l<Ts){var f=Ts-(i?s:0);if(g>=e.deqFastCost*f)break}else if(i){if(p>=e.deqCost*l||p>=e.deqAvgCost*s)break}else if(g>=e.deqNoDrawCost*Ts)break;var v=e.deq(t,h,c);if(!(v.length>0))break;for(var y=0;y<v.length;y++)u.push(v[y])}u.length>0&&(e.onDeqd(t,u),!i&&e.shouldRedraw(t,u,h,c)&&r())}),i(t))}}},Cs=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_e;f(this,e),this.idsByKey=new Fe,this.keyForId=new Fe,this.cachesByLvl=new Fe,this.lvls=[],this.getKey=t,this.doesEleInvalidateKey=n}return y(e,[{key:"getIdsFor",value:function(e){null==e&&Ce("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new Ge,t.set(e,n)),n}},{key:"addIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).add(t)}},{key:"deleteIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).delete(t)}},{key:"getNumberOfIdsForKey",value:function(e){return null==e?0:this.getIdsFor(e).size}},{key:"updateKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t),r=this.getKey(e);this.deleteIdForKey(n,t),this.addIdForKey(r,t),this.keyForId.set(t,r)}},{key:"deleteKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteIdForKey(n,t),this.keyForId.delete(t)}},{key:"keyHasChangedFor",value:function(e){var t=e.id();return this.keyForId.get(t)!==this.getKey(e)}},{key:"isInvalid",value:function(e){return this.keyHasChangedFor(e)||this.doesEleInvalidateKey(e)}},{key:"getCachesAt",value:function(e){var t=this.cachesByLvl,n=this.lvls,r=t.get(e);return r||(r=new Fe,t.set(e,r),n.push(e)),r}},{key:"getCache",value:function(e,t){return this.getCachesAt(t).get(e)}},{key:"get",value:function(e,t){var n=this.getKey(e),r=this.getCache(n,t);return null!=r&&this.updateKeyMappingFor(e),r}},{key:"getForCachedKey",value:function(e,t){var n=this.keyForId.get(e.id());return this.getCache(n,t)}},{key:"hasCache",value:function(e,t){return this.getCachesAt(t).has(e)}},{key:"has",value:function(e,t){var n=this.getKey(e);return this.hasCache(n,t)}},{key:"setCache",value:function(e,t,n){n.key=e,this.getCachesAt(t).set(e,n)}},{key:"set",value:function(e,t,n){var r=this.getKey(e);this.setCache(r,t,n),this.updateKeyMappingFor(e)}},{key:"deleteCache",value:function(e,t){this.getCachesAt(t).delete(e)}},{key:"delete",value:function(e,t){var n=this.getKey(e);this.deleteCache(n,t)}},{key:"invalidateKey",value:function(e){var t=this;this.lvls.forEach((function(n){return t.deleteCache(e,n)}))}},{key:"invalidate",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteKeyMappingFor(e);var r=this.doesEleInvalidateKey(e);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}]),e}(),Ns={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},As=Me({getKey:null,doesEleInvalidateKey:_e,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:Ee,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Ls=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=As(t);Q(n,r),n.lookup=new Cs(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},ks=Ls.prototype;ks.reasons=Ns,ks.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},ks.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},ks.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new c.default((function(e,t){return t.reqs-e.reqs}))},ks.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},ks.getElement=function(e,t,n,r,i){var a=this,o=this.renderer,s=o.cy.zoom(),l=this.lookup;if(!t||0===t.w||0===t.h||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed())return null;if(!a.allowEdgeTxrCaching&&e.isEdge()||!a.allowParentTxrCaching&&e.isParent())return null;if(null==r&&(r=Math.ceil(st(s*n))),r<-4)r=-4;else if(s>=7.99||r>3)return null;var u=Math.pow(2,r),c=t.h*u,h=t.w*u,d=o.eleTextBiggerThanMin(e,u);if(!this.isVisible(e,d))return null;var p,g=l.get(e,r);if(g&&g.invalidated&&(g.invalidated=!1,g.texture.invalidatedWidth-=g.width),g)return g;if(p=c<=25?25:c<=50?50:50*Math.ceil(c/50),c>1024||h>1024)return null;var f=a.getTextureQueue(p),v=f[f.length-2],y=function(){return a.recycleTexture(p,h)||a.addTexture(p,h)};v||(v=f[f.length-1]),v||(v=y()),v.width-v.usedWidth<h&&(v=y());for(var m,b=function(e){return e&&e.scaledLabelShown===d},x=i&&i===Ns.dequeue,w=i&&i===Ns.highQuality,E=i&&i===Ns.downscale,_=r+1;_<=3;_++){var T=l.get(e,_);if(T){m=T;break}}var D=m&&m.level===r+1?m:null,C=function(){v.context.drawImage(D.texture.canvas,D.x,0,D.width,D.height,v.usedWidth,0,h,c)};if(v.context.setTransform(1,0,0,1,0,0),v.context.clearRect(v.usedWidth,0,h,p),b(D))C();else if(b(m)){if(!w)return a.queueElement(e,m.level-1),m;for(var N=m.level;N>r;N--)D=a.getElement(e,t,n,N,Ns.downscale);C()}else{var A;if(!x&&!w&&!E)for(var L=r-1;L>=-4;L--){var k=l.get(e,L);if(k){A=k;break}}if(b(A))return a.queueElement(e,r),A;v.context.translate(v.usedWidth,0),v.context.scale(u,u),this.drawElement(v.context,e,t,d,!1),v.context.scale(1/u,1/u),v.context.translate(-v.usedWidth,0)}return g={x:v.usedWidth,texture:v,level:r,scale:u,width:h,height:c,scaledLabelShown:d},v.usedWidth+=Math.ceil(h+8),v.eleCaches.push(g),l.set(e,r,g),a.checkTextureFullness(v),g},ks.invalidateElements=function(e){for(var t=0;t<e.length;t++)this.invalidateElement(e[t])},ks.invalidateElement=function(e){var t=this,n=t.lookup,r=[];if(n.isInvalid(e)){for(var i=-4;i<=3;i++){var a=n.getForCachedKey(e,i);a&&r.push(a)}if(n.invalidate(e))for(var o=0;o<r.length;o++){var s=r[o],l=s.texture;l.invalidatedWidth+=s.width,s.invalidated=!0,t.checkTextureUtility(l)}t.removeFromQueue(e)}},ks.checkTextureUtility=function(e){e.invalidatedWidth>=.2*e.width&&this.retireTexture(e)},ks.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?Oe(t,e):e.fullnessChecks++},ks.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t),r=this.lookup;Oe(n,e),e.retired=!0;for(var i=e.eleCaches,a=0;a<i.length;a++){var o=i[a];r.deleteCache(o.key,o.level)}Pe(i),this.getRetiredTextureQueue(t).push(e)},ks.addTexture=function(e,t){var n={};return this.getTextureQueue(e).push(n),n.eleCaches=[],n.height=e,n.width=Math.max(1024,t),n.usedWidth=0,n.invalidatedWidth=0,n.fullnessChecks=0,n.canvas=this.renderer.makeOffscreenCanvas(n.width,n.height),n.context=n.canvas.getContext("2d"),n},ks.recycleTexture=function(e,t){for(var n=this.getTextureQueue(e),r=this.getRetiredTextureQueue(e),i=0;i<r.length;i++){var a=r[i];if(a.width>=t)return a.retired=!1,a.usedWidth=0,a.invalidatedWidth=0,a.fullnessChecks=0,Pe(a.eleCaches),a.context.setTransform(1,0,0,1,0,0),a.context.clearRect(0,0,a.width,a.height),Oe(r,a),n.push(a),a}},ks.queueElement=function(e,t){var n=this.getElementQueue(),r=this.getElementKeyToQueue(),i=this.getKey(e),a=r[i];if(a)a.level=Math.max(a.level,t),a.eles.merge(e),a.reqs++,n.updateItem(a);else{var o={eles:e.spawn().merge(e),level:t,reqs:1,key:i};n.push(o),r[i]=o}},ks.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=[],a=t.lookup,o=0;o<1&&n.size()>0;o++){var s=n.pop(),l=s.key,u=s.eles[0],c=a.hasCache(u,s.level);if(r[l]=null,!c){i.push(s);var h=t.getBoundingBox(u);t.getElement(u,h,e,s.level,Ns.dequeue)}}return i},ks.removeFromQueue=function(e){var t=this.getElementQueue(),n=this.getElementKeyToQueue(),r=this.getKey(e),i=n[r];null!=i&&(1===i.eles.length?(i.reqs=we,t.updateItem(i),t.pop(),n[r]=null):i.eles.unmerge(e))},ks.onDequeue=function(e){this.onDequeues.push(e)},ks.offDequeue=function(e){Oe(this.onDequeues,e)},ks.setupDequeueing=Ds({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n<e.onDequeues.length;n++){(0,e.onDequeues[n])(t)}},shouldRedraw:function(e,t,n,r){for(var i=0;i<t.length;i++)for(var a=t[i].eles,o=0;o<a.length;o++){var s=a[o].boundingBox();if(wt(s,r))return!0}return!1},priority:function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq}});var Ss=function(e){var t=this,n=t.renderer=e,r=n.cy;t.layersByLevel={},t.firstGet=!0,t.lastInvalidationTime=se()-500,t.skipping=!1,t.eleTxrDeqs=r.collection(),t.scheduleElementRefinement=u.default((function(){t.refineElementTextures(t.eleTxrDeqs),t.eleTxrDeqs.unmerge(t.eleTxrDeqs)}),50),n.beforeRender((function(e,n){n-t.lastInvalidationTime<=250?t.skipping=!0:t.skipping=!1}),n.beforeRenderPriorities.lyrTxrSkip);t.layersQueue=new c.default((function(e,t){return t.reqs-e.reqs})),t.setupDequeueing()},Is=Ss.prototype,Ms=0,Os=Math.pow(2,53)-1;Is.makeLayer=function(e,t){var n=Math.pow(2,t),r=Math.ceil(e.w*n),i=Math.ceil(e.h*n),a=this.renderer.makeOffscreenCanvas(r,i),o={id:Ms=++Ms%Os,bb:e,level:t,width:r,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},s=o.context,l=-o.bb.x1,u=-o.bb.y1;return s.scale(n,n),s.translate(l,u),o},Is.getLayers=function(e,t,n){var r=this,i=r.renderer.cy.zoom(),a=r.firstGet;if(r.firstGet=!1,null==n)if((n=Math.ceil(st(i*t)))<-4)n=-4;else if(i>=3.99||n>2)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,u=Math.pow(2,n),c=l[n]=l[n]||[];if(r.levelIsComplete(n,e))return c;!function(){var t=function(t){if(r.validateLayersElesOrdering(t,e),r.levelIsComplete(t,e))return s=l[t],!0},i=function(e){if(!s)for(var r=n+e;-4<=r&&r<=2&&!t(r);r+=e);};i(1),i(-1);for(var a=c.length-1;a>=0;a--){var o=c[a];o.invalid&&Oe(c,o)}}();var h=function(t){var i=(t=t||{}).after;if(function(){if(!o){o=ft();for(var t=0;t<e.length;t++)vt(o,e[t].boundingBox())}}(),o.w*u*(o.h*u)>16e6)return null;var a=r.makeLayer(o,n);if(null!=i){var s=c.indexOf(i)+1;c.splice(s,0,a)}else(void 0===t.insert||t.insert)&&c.unshift(a);return a};if(r.skipping&&!a)return null;for(var d=null,p=e.length/1,g=!a,f=0;f<e.length;f++){var v=e[f],y=v._private.rscratch,m=y.imgLayerCaches=y.imgLayerCaches||{},b=m[n];if(b)d=b;else{if((!d||d.eles.length>=p||!_t(d.bb,v.boundingBox()))&&!(d=h({insert:!0,after:d})))return null;s||g?r.queueLayer(d,v):r.drawEleInLayer(d,v,n,t),d.eles.push(v),m[n]=d}}return s||(g?null:c)},Is.getEleLevelForLayerLevel=function(e,t){return e},Is.drawEleInLayer=function(e,t,n,r){var i=this.renderer,a=e.context,o=t.boundingBox();0!==o.w&&0!==o.h&&t.visible()&&(n=this.getEleLevelForLayerLevel(n,r),i.setImgSmoothing(a,!1),i.drawCachedElement(a,t,null,null,n,true),i.setImgSmoothing(a,!0))},Is.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i<n.length;i++){var a=n[i];if(a.reqs>0)return!1;if(a.invalid)return!1;r+=a.eles.length}return r===t.length},Is.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r<n.length;r++){for(var i=n[r],a=-1,o=0;o<t.length;o++)if(i.eles[0]===t[o]){a=o;break}if(a<0)this.invalidateLayer(i);else{var s=a;for(o=0;o<i.eles.length;o++)if(i.eles[o]!==t[s+o]){this.invalidateLayer(i);break}}}},Is.updateElementsInLayers=function(e,t){for(var n=P(e[0]),r=0;r<e.length;r++)for(var i=n?null:e[r],a=n?e[r]:e[r].ele,o=a._private.rscratch,s=o.imgLayerCaches=o.imgLayerCaches||{},l=-4;l<=2;l++){var u=s[l];u&&(i&&this.getEleLevelForLayerLevel(u.level)!==i.level||t(u,a,i))}},Is.haveLayers=function(){for(var e=!1,t=-4;t<=2;t++){var n=this.layersByLevel[t];if(n&&n.length>0){e=!0;break}}return e},Is.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=se(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},Is.invalidateLayer=function(e){if(this.lastInvalidationTime=se(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];Oe(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var i=0;i<n.length;i++){var a=n[i]._private.rscratch.imgLayerCaches;a&&(a[t]=null)}}},Is.refineElementTextures=function(e){var t=this;t.updateElementsInLayers(e,(function(e,n,r){var i=e.replacement;if(i||((i=e.replacement=t.makeLayer(e.bb,e.level)).replaces=e,i.eles=e.eles),!i.reqs)for(var a=0;a<i.eles.length;a++)t.queueLayer(i,i.eles[a])}))},Is.enqueueElementRefinement=function(e){this.eleTxrDeqs.merge(e),this.scheduleElementRefinement()},Is.queueLayer=function(e,t){var n=this.layersQueue,r=e.elesQueue,i=r.hasId=r.hasId||{};if(!e.replacement){if(t){if(i[t.id()])return;r.push(t),i[t.id()]=!0}e.reqs?(e.reqs++,n.updateItem(e)):(e.reqs=1,n.push(e))}},Is.dequeue=function(e){for(var t=this,n=t.layersQueue,r=[],i=0;i<1&&0!==n.size();){var a=n.peek();if(a.replacement)n.pop();else if(a.replaces&&a!==a.replaces.replacement)n.pop();else if(a.invalid)n.pop();else{var o=a.elesQueue.shift();o&&(t.drawEleInLayer(a,o,a.level,e),i++),0===r.length&&r.push(!0),0===a.elesQueue.length&&(n.pop(),a.reqs=0,a.replaces&&t.applyLayerReplacement(a),t.requestRedraw())}}return r},Is.applyLayerReplacement=function(e){var t=this.layersByLevel[e.level],n=e.replaces,r=t.indexOf(n);if(!(r<0||n.invalid)){t[r]=e;for(var i=0;i<e.eles.length;i++){var a=e.eles[i]._private,o=a.imgLayerCaches=a.imgLayerCaches||{};o&&(o[e.level]=e)}this.requestRedraw()}},Is.requestRedraw=u.default((function(){var e=this.renderer;e.redrawHint("eles",!0),e.redrawHint("drag",!0),e.redraw()}),100),Is.setupDequeueing=Ds({deqRedrawThreshold:50,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t){return e.dequeue(t)},onDeqd:De,shouldRedraw:Ee,priority:function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq}});var Ps,Rs={};function Bs(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.lineTo(r.x,r.y)}}function Fs(e,t,n){for(var r,i=0;i<t.length;i++){var a=t[i];0===i&&(r=a),e.lineTo(a.x,a.y)}e.quadraticCurveTo(n.x,n.y,r.x,r.y)}function zs(e,t,n){e.beginPath&&e.beginPath();for(var r=t,i=0;i<r.length;i++){var a=r[i];e.lineTo(a.x,a.y)}var o=n,s=n[0];e.moveTo(s.x,s.y);for(i=1;i<o.length;i++){a=o[i];e.lineTo(a.x,a.y)}e.closePath&&e.closePath()}function Gs(e,t,n,r,i){e.beginPath&&e.beginPath(),e.arc(n,r,i,0,2*Math.PI,!1);var a=t,o=a[0];e.moveTo(o.x,o.y);for(var s=0;s<a.length;s++){var l=a[s];e.lineTo(l.x,l.y)}e.closePath&&e.closePath()}function Ys(e,t,n,r){e.arc(t,n,r,0,2*Math.PI,!1)}Rs.arrowShapeImpl=function(e){return(Ps||(Ps={polygon:Bs,"triangle-backcurve":Fs,"triangle-tee":zs,"circle-triangle":Gs,"triangle-cross":zs,circle:Ys}))[e]};var Xs={drawElement:function(e,t,n,r,i,a){t.isNode()?this.drawNode(e,t,n,r,i,a):this.drawEdge(e,t,n,r,i,a)},drawElementOverlay:function(e,t){t.isNode()?this.drawNodeOverlay(e,t):this.drawEdgeOverlay(e,t)},drawElementUnderlay:function(e,t){t.isNode()?this.drawNodeUnderlay(e,t):this.drawEdgeUnderlay(e,t)},drawCachedElementPortion:function(e,t,n,r,i,a,o,s){var l=this,u=n.getBoundingBox(t);if(0!==u.w&&0!==u.h){var c=n.getElement(t,u,r,i,a);if(null!=c){var h=s(l,t);if(0===h)return;var d,p,g,f,v,y,m=o(l,t),b=u.x1,x=u.y1,w=u.w,E=u.h;if(0!==m){var _=n.getRotationPoint(t);g=_.x,f=_.y,e.translate(g,f),e.rotate(m),(v=l.getImgSmoothing(e))||l.setImgSmoothing(e,!0);var T=n.getRotationOffset(t);d=T.x,p=T.y}else d=b,p=x;1!==h&&(y=e.globalAlpha,e.globalAlpha=y*h),e.drawImage(c.texture.canvas,c.x,0,c.width,c.height,d,p,w,E),1!==h&&(e.globalAlpha=y),0!==m&&(e.rotate(-m),e.translate(-g,-f),v||l.setImgSmoothing(e,!1))}else n.drawElement(e,t)}}},Vs=function(){return 0},Us=function(e,t){return e.getTextAngle(t,null)},js=function(e,t){return e.getTextAngle(t,"source")},qs=function(e,t){return e.getTextAngle(t,"target")},Hs=function(e,t){return t.effectiveOpacity()},Ws=function(e,t){return t.pstyle("text-opacity").pfValue*t.effectiveOpacity()};Xs.drawCachedElement=function(e,t,n,r,i,a){var o=this,s=o.data,l=s.eleTxrCache,u=s.lblTxrCache,c=s.slbTxrCache,h=s.tlbTxrCache,d=t.boundingBox(),p=!0===a?l.reasons.highQuality:null;if(0!==d.w&&0!==d.h&&t.visible()&&(!r||wt(d,r))){var g=t.isEdge(),f=t.element()._private.rscratch.badLine;o.drawElementUnderlay(e,t),o.drawCachedElementPortion(e,t,l,n,i,p,Vs,Hs),g&&f||o.drawCachedElementPortion(e,t,u,n,i,p,Us,Ws),g&&!f&&(o.drawCachedElementPortion(e,t,c,n,i,p,js,Ws),o.drawCachedElementPortion(e,t,h,n,i,p,qs,Ws)),o.drawElementOverlay(e,t)}},Xs.drawElements=function(e,t){for(var n=0;n<t.length;n++){var r=t[n];this.drawElement(e,r)}},Xs.drawCachedElements=function(e,t,n,r){for(var i=0;i<t.length;i++){var a=t[i];this.drawCachedElement(e,a,n,r)}},Xs.drawCachedNodes=function(e,t,n,r){for(var i=0;i<t.length;i++){var a=t[i];a.isNode()&&this.drawCachedElement(e,a,n,r)}},Xs.drawLayeredElements=function(e,t,n,r){var i=this.data.lyrTxrCache.getLayers(t,n);if(i)for(var a=0;a<i.length;a++){var o=i[a],s=o.bb;0!==s.w&&0!==s.h&&e.drawImage(o.canvas,s.x1,s.y1,s.w,s.h)}else this.drawCachedElements(e,t,n,r)};var $s={drawEdge:function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this,s=t._private.rscratch;if((!a||t.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var l;n&&(l=n,e.translate(-l.x1,-l.y1));var u=a?t.pstyle("opacity").value:1,c=a?t.pstyle("line-opacity").value:1,h=t.pstyle("curve-style").value,d=t.pstyle("line-style").value,p=t.pstyle("width").pfValue,g=t.pstyle("line-cap").value,f=u*c,v=u*c,y=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;"straight-triangle"===h?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=p,e.lineCap=g,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,d),e.lineCap="butt")},m=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;o.drawArrowheads(e,t,n)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var b=t.pstyle("ghost-offset-x").pfValue,x=t.pstyle("ghost-offset-y").pfValue,w=t.pstyle("ghost-opacity").value,E=f*w;e.translate(b,x),y(E),m(E),e.translate(-b,-x)}i&&o.drawEdgeUnderlay(e,t),y(),m(),i&&o.drawEdgeOverlay(e,t),o.drawElementText(e,t,null,r),n&&e.translate(l.x1,l.y1)}}},Ks=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n){if(n.visible()){var r=n.pstyle("".concat(e,"-opacity")).value;if(0!==r){var i=this,a=i.usePaths(),o=n._private.rscratch,s=2*n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-color")).value;t.lineWidth=s,"self"!==o.edgeType||a?t.lineCap="round":t.lineCap="butt",i.colorStrokeStyle(t,l[0],l[1],l[2],r),i.drawEdgePath(n,t,o.allpts,"solid")}}}};$s.drawEdgeOverlay=Ks("overlay"),$s.drawEdgeUnderlay=Ks("underlay"),$s.drawEdgePath=function(e,t,n,r){var i,a=e._private.rscratch,o=t,s=!1,l=this.usePaths(),u=e.pstyle("line-dash-pattern").pfValue,c=e.pstyle("line-dash-offset").pfValue;if(l){var h=n.join("$");a.pathCacheKey&&a.pathCacheKey===h?(i=t=a.pathCache,s=!0):(i=t=new Path2D,a.pathCacheKey=h,a.pathCache=i)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash(u),o.lineDashOffset=c;break;case"solid":o.setLineDash([])}if(!s&&!a.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),a.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var d=2;d+3<n.length;d+=4)t.quadraticCurveTo(n[d],n[d+1],n[d+2],n[d+3]);break;case"straight":case"segments":case"haystack":for(var p=2;p+1<n.length;p+=2)t.lineTo(n[p],n[p+1])}t=o,l?t.stroke(i):t.stroke(),t.setLineDash&&t.setLineDash([])},$s.drawEdgeTrianglePath=function(e,t,n){t.fillStyle=t.strokeStyle;for(var r=e.pstyle("width").pfValue,i=0;i+1<n.length;i+=2){var a=[n[i+2]-n[i],n[i+3]-n[i+1]],o=Math.sqrt(a[0]*a[0]+a[1]*a[1]),s=[a[1]/o,-a[0]/o],l=[s[0]*r/2,s[1]*r/2];t.beginPath(),t.moveTo(n[i]-l[0],n[i+1]-l[1]),t.lineTo(n[i]+l[0],n[i+1]+l[1]),t.lineTo(n[i+2],n[i+3]),t.closePath(),t.fill()}},$s.drawArrowheads=function(e,t,n){var r=t._private.rscratch,i="haystack"===r.edgeType;i||this.drawArrowhead(e,t,"source",r.arrowStartX,r.arrowStartY,r.srcArrowAngle,n),this.drawArrowhead(e,t,"mid-target",r.midX,r.midY,r.midtgtArrowAngle,n),this.drawArrowhead(e,t,"mid-source",r.midX,r.midY,r.midsrcArrowAngle,n),i||this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,r.tgtArrowAngle,n)},$s.drawArrowhead=function(e,t,n,r,i,a,o){if(!(isNaN(r)||null==r||isNaN(i)||null==i||isNaN(a)||null==a)){var s=this,l=t.pstyle(n+"-arrow-shape").value;if("none"!==l){var u="hollow"===t.pstyle(n+"-arrow-fill").value?"both":"filled",c=t.pstyle(n+"-arrow-fill").value,h=t.pstyle("width").pfValue,d=t.pstyle(n+"-arrow-width"),p="match-line"===d.value?h:d.pfValue;"%"===d.units&&(p*=h);var g=t.pstyle("opacity").value;void 0===o&&(o=g);var f=e.globalCompositeOperation;1===o&&"hollow"!==c||(e.globalCompositeOperation="destination-out",s.colorFillStyle(e,255,255,255,1),s.colorStrokeStyle(e,255,255,255,1),s.drawArrowShape(t,e,u,h,l,p,r,i,a),e.globalCompositeOperation=f);var v=t.pstyle(n+"-arrow-color").value;s.colorFillStyle(e,v[0],v[1],v[2],o),s.colorStrokeStyle(e,v[0],v[1],v[2],o),s.drawArrowShape(t,e,c,h,l,p,r,i,a)}}},$s.drawArrowShape=function(e,t,n,r,i,a,o,s,l){var u,c=this,h=this.usePaths()&&"triangle-cross"!==i,d=!1,p=t,g={x:o,y:s},f=e.pstyle("arrow-scale").value,v=this.getArrowWidth(r,f),y=c.arrowShapes[i];if(h){var m=c.arrowPathCache=c.arrowPathCache||[],b=fe(i),x=m[b];null!=x?(u=t=x,d=!0):(u=t=new Path2D,m[b]=u)}d||(t.beginPath&&t.beginPath(),h?y.draw(t,1,0,{x:0,y:0},1):y.draw(t,v,l,g,r),t.closePath&&t.closePath()),t=p,h&&(t.translate(o,s),t.rotate(l),t.scale(v,v)),"filled"!==n&&"both"!==n||(h?t.fill(u):t.fill()),"hollow"!==n&&"both"!==n||(t.lineWidth=a/(h?v:1),t.lineJoin="miter",h?t.stroke(u):t.stroke()),h&&(t.scale(1/v,1/v),t.rotate(-l),t.translate(-o,-s))};var Zs={safeDrawImage:function(e,t,n,r,i,a,o,s,l,u){if(!(i<=0||a<=0||l<=0||u<=0))try{e.drawImage(t,n,r,i,a,o,s,l,u)}catch(c){Ae(c)}},drawInscribedImage:function(e,t,n,r,i){var a=this,o=n.position(),s=o.x,l=o.y,u=n.cy().style(),c=u.getIndexedStyle.bind(u),h=c(n,"background-fit","value",r),d=c(n,"background-repeat","value",r),p=n.width(),g=n.height(),f=2*n.padding(),v=p+("inner"===c(n,"background-width-relative-to","value",r)?0:f),y=g+("inner"===c(n,"background-height-relative-to","value",r)?0:f),m=n._private.rscratch,b="node"===c(n,"background-clip","value",r),x=c(n,"background-image-opacity","value",r)*i,w=c(n,"background-image-smoothing","value",r),E=t.width||t.cachedW,_=t.height||t.cachedH;null!=E&&null!=_||(document.body.appendChild(t),E=t.cachedW=t.width||t.offsetWidth,_=t.cachedH=t.height||t.offsetHeight,document.body.removeChild(t));var T=E,D=_;if("auto"!==c(n,"background-width","value",r)&&(T="%"===c(n,"background-width","units",r)?c(n,"background-width","pfValue",r)*v:c(n,"background-width","pfValue",r)),"auto"!==c(n,"background-height","value",r)&&(D="%"===c(n,"background-height","units",r)?c(n,"background-height","pfValue",r)*y:c(n,"background-height","pfValue",r)),0!==T&&0!==D){if("contain"===h)T*=C=Math.min(v/T,y/D),D*=C;else if("cover"===h){var C;T*=C=Math.max(v/T,y/D),D*=C}var N=s-v/2,A=c(n,"background-position-x","units",r),L=c(n,"background-position-x","pfValue",r);N+="%"===A?(v-T)*L:L;var k=c(n,"background-offset-x","units",r),S=c(n,"background-offset-x","pfValue",r);N+="%"===k?(v-T)*S:S;var I=l-y/2,M=c(n,"background-position-y","units",r),O=c(n,"background-position-y","pfValue",r);I+="%"===M?(y-D)*O:O;var P=c(n,"background-offset-y","units",r),R=c(n,"background-offset-y","pfValue",r);I+="%"===P?(y-D)*R:R,m.pathCache&&(N-=s,I-=l,s=0,l=0);var B=e.globalAlpha;e.globalAlpha=x;var F=a.getImgSmoothing(e),z=!1;if("no"===w&&F?(a.setImgSmoothing(e,!1),z=!0):"yes"!==w||F||(a.setImgSmoothing(e,!0),z=!0),"no-repeat"===d)b&&(e.save(),m.pathCache?e.clip(m.pathCache):(a.nodeShapes[a.getNodeShape(n)].draw(e,s,l,v,y),e.clip())),a.safeDrawImage(e,t,0,0,E,_,N,I,T,D),b&&e.restore();else{var G=e.createPattern(t,d);e.fillStyle=G,a.nodeShapes[a.getNodeShape(n)].draw(e,s,l,v,y),e.translate(N,I),e.fill(),e.translate(-N,-I)}e.globalAlpha=B,z&&a.setImgSmoothing(e,F)}}},Qs={};function Js(e,t,n,r,i){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:5,o=arguments.length>6?arguments[6]:void 0;e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n),e.closePath(),o?e.stroke():e.fill()}Qs.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(st(n*r));t=Math.pow(2,i)}return!(e.pstyle("font-size").pfValue*t<e.pstyle("min-zoomed-font-size").pfValue)},Qs.drawElementText=function(e,t,n,r,i){var a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this;if(null==r){if(a&&!o.eleTextBiggerThanMin(t))return}else if(!1===r)return;if(t.isNode()){var s=t.pstyle("label");if(!s||!s.value)return;var l=o.getLabelJustification(t);e.textAlign=l,e.textBaseline="bottom"}else{var u=t.element()._private.rscratch.badLine,c=t.pstyle("label"),h=t.pstyle("source-label"),d=t.pstyle("target-label");if(u||(!c||!c.value)&&(!h||!h.value)&&(!d||!d.value))return;e.textAlign="center",e.textBaseline="bottom"}var p,g=!n;n&&(p=n,e.translate(-p.x1,-p.y1)),null==i?(o.drawText(e,t,null,g,a),t.isEdge()&&(o.drawText(e,t,"source",g,a),o.drawText(e,t,"target",g,a))):o.drawText(e,t,i,g,a),n&&e.translate(p.x1,p.y1)},Qs.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n<this.fontCaches.length;n++)if((t=this.fontCaches[n]).context===e)return t;return t={context:e},this.fontCaches.push(t),t},Qs.setupTextStyle=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=t.pstyle("font-style").strValue,i=t.pstyle("font-size").pfValue+"px",a=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=n?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,l=t.pstyle("text-outline-opacity").value*s,u=t.pstyle("color").value,c=t.pstyle("text-outline-color").value;e.font=r+" "+o+" "+i+" "+a,e.lineJoin="round",this.colorFillStyle(e,u[0],u[1],u[2],s),this.colorStrokeStyle(e,c[0],c[1],c[2],l)},Qs.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=Re(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},Qs.drawText=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=t._private.rscratch,o=i?t.effectiveOpacity():1;if(!i||0!==o&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var s,l,u=Re(a,"labelX",n),c=Re(a,"labelY",n),h=this.getLabelText(t,n);if(null!=h&&""!==h&&!isNaN(u)&&!isNaN(c)){this.setupTextStyle(e,t,i);var d,p=n?n+"-":"",g=Re(a,"labelWidth",n),f=Re(a,"labelHeight",n),v=t.pstyle(p+"text-margin-x").pfValue,y=t.pstyle(p+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle("text-halign").value,x=t.pstyle("text-valign").value;switch(m&&(b="center",x="center"),u+=v,c+=y,0!==(d=r?this.getTextAngle(t,n):0)&&(s=u,l=c,e.translate(s,l),e.rotate(d),u=0,c=0),x){case"top":break;case"center":c+=f/2;break;case"bottom":c+=f}var w=t.pstyle("text-background-opacity").value,E=t.pstyle("text-border-opacity").value,_=t.pstyle("text-border-width").pfValue,T=t.pstyle("text-background-padding").pfValue,D=0===t.pstyle("text-background-shape").strValue.indexOf("round");if(w>0||_>0&&E>0){var C=u-T;switch(b){case"left":C-=g;break;case"center":C-=g/2}var N=c-f-T,A=g+2*T,L=f+2*T;if(w>0){var k=e.fillStyle,S=t.pstyle("text-background-color").value;e.fillStyle="rgba("+S[0]+","+S[1]+","+S[2]+","+w*o+")",D?Js(e,C,N,A,L,2):e.fillRect(C,N,A,L),e.fillStyle=k}if(_>0&&E>0){var I=e.strokeStyle,M=e.lineWidth,O=t.pstyle("text-border-color").value,P=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+O[0]+","+O[1]+","+O[2]+","+E*o+")",e.lineWidth=_,e.setLineDash)switch(P){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=_/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(D?Js(e,C,N,A,L,2,"stroke"):e.strokeRect(C,N,A,L),"double"===P){var R=_/2;D?Js(e,C+R,N+R,A-2*R,L-2*R,2,"stroke"):e.strokeRect(C+R,N+R,A-2*R,L-2*R)}e.setLineDash&&e.setLineDash([]),e.lineWidth=M,e.strokeStyle=I}}var B=2*t.pstyle("text-outline-width").pfValue;if(B>0&&(e.lineWidth=B),"wrap"===t.pstyle("text-wrap").value){var F=Re(a,"labelWrapCachedLines",n),z=Re(a,"labelLineHeight",n),G=g/2,Y=this.getLabelJustification(t);switch("auto"===Y||("left"===b?"left"===Y?u+=-g:"center"===Y&&(u+=-G):"center"===b?"left"===Y?u+=-G:"right"===Y&&(u+=G):"right"===b&&("center"===Y?u+=G:"right"===Y&&(u+=g))),x){case"top":case"center":case"bottom":c-=(F.length-1)*z}for(var X=0;X<F.length;X++)B>0&&e.strokeText(F[X],u,c),e.fillText(F[X],u,c),c+=z}else B>0&&e.strokeText(h,u,c),e.fillText(h,u,c);0!==d&&(e.rotate(-d),e.translate(-s,-l))}}};var el={drawNode:function(e,t,n){var r,i,a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],l=this,u=t._private,c=u.rscratch,h=t.position();if(I(h.x)&&I(h.y)&&(!s||t.visible())){var d,p,g=s?t.effectiveOpacity():1,f=l.usePaths(),v=!1,y=t.padding();r=t.width()+2*y,i=t.height()+2*y,n&&(p=n,e.translate(-p.x1,-p.y1));for(var m=t.pstyle("background-image").value,b=new Array(m.length),x=new Array(m.length),w=0,E=0;E<m.length;E++){var _=m[E];if(b[E]=null!=_&&"none"!==_){var T=t.cy().style().getIndexedStyle(t,"background-image-crossorigin","value",E);w++,x[E]=l.getCachedImage(_,T,(function(){u.backgroundTimestamp=Date.now(),t.emitAndNotify("background")}))}}var D=t.pstyle("background-blacken").value,C=t.pstyle("border-width").pfValue,N=t.pstyle("background-opacity").value*g,A=t.pstyle("border-color").value,L=t.pstyle("border-style").value,k=t.pstyle("border-opacity").value*g,S=t.pstyle("outline-width").pfValue,M=t.pstyle("outline-color").value,O=t.pstyle("outline-style").value,P=t.pstyle("outline-opacity").value*g,R=t.pstyle("outline-offset").value;e.lineJoin="miter";var B=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:N;l.eleFillStyle(e,t,n)},F=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:k;l.colorStrokeStyle(e,A[0],A[1],A[2],t)},z=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:P;l.colorStrokeStyle(e,M[0],M[1],M[2],t)},G=function(e,t,n,r){var i,a=l.nodePathCache=l.nodePathCache||[],o=ve("polygon"===n?n+","+r.join(","):n,""+t,""+e),s=a[o],u=!1;return null!=s?(i=s,u=!0,c.pathCache=i):(i=new Path2D,a[o]=c.pathCache=i),{path:i,cacheHit:u}},Y=t.pstyle("shape").strValue,X=t.pstyle("shape-polygon-points").pfValue;if(f){e.translate(h.x,h.y);var V=G(r,i,Y,X);d=V.path,v=V.cacheHit}var U=function(){if(!v){var n=h;f&&(n={x:0,y:0}),l.nodeShapes[l.getNodeShape(t)].draw(d||e,n.x,n.y,r,i)}f?e.fill(d):e.fill()},j=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=u.backgrounding,a=0,o=0;o<x.length;o++){var s=t.cy().style().getIndexedStyle(t,"background-image-containment","value",o);r&&"over"===s||!r&&"inside"===s?a++:b[o]&&x[o].complete&&!x[o].error&&(a++,l.drawInscribedImage(e,x[o],t,o,n))}u.backgrounding=!(a===w),i!==u.backgrounding&&t.updateStyle(!1)},q=function(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;l.hasPie(t)&&(l.drawPie(e,t,a),n&&(f||l.nodeShapes[l.getNodeShape(t)].draw(e,h.x,h.y,r,i)))},H=function(){var t=(D>0?D:-D)*(arguments.length>0&&void 0!==arguments[0]?arguments[0]:g),n=D>0?0:255;0!==D&&(l.colorFillStyle(e,n,n,n,t),f?e.fill(d):e.fill())},W=function(){if(C>0){if(e.lineWidth=C,e.lineCap="butt",e.setLineDash)switch(L){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(f?e.stroke(d):e.stroke(),"double"===L){e.lineWidth=C/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(d):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}},$=function(){if(S>0){if(e.lineWidth=S,e.lineCap="butt",e.setLineDash)switch(O){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}var n=h;f&&(n={x:0,y:0});var a,o=l.getNodeShape(t),s=(r+C+(S+R))/r,u=(i+C+(S+R))/i,c=r*s,d=i*u,p=l.nodeShapes[o].points;if(f)a=G(c,d,o,p).path;if("ellipse"===o)l.drawEllipsePath(a||e,n.x,n.y,c,d);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(o)){var g=0,v=0,y=0;"round-diamond"===o?g=1.4*(C+R+S):"round-heptagon"===o?(g=1.075*(C+R+S),y=-(C/2+R+S)/35):"round-hexagon"===o?g=1.12*(C+R+S):"round-pentagon"===o?(g=1.13*(C+R+S),y=-(C/2+R+S)/15):"round-tag"===o?(g=1.12*(C+R+S),v=.07*(C/2+S+R)):"round-triangle"===o&&(g=(C+R+S)*(Math.PI/2),y=-(C+R/2+S)/Math.PI),0!==g&&(s=(r+g)/r,u=(i+g)/i),l.drawRoundPolygonPath(a||e,n.x+v,n.y+y,r*s,i*u,p)}else if(["roundrectangle","round-rectangle"].includes(o))l.drawRoundRectanglePath(a||e,n.x,n.y,c,d);else if(["cutrectangle","cut-rectangle"].includes(o))l.drawCutRectanglePath(a||e,n.x,n.y,c,d);else if(["bottomroundrectangle","bottom-round-rectangle"].includes(o))l.drawBottomRoundRectanglePath(a||e,n.x,n.y,c,d);else if("barrel"===o)l.drawBarrelPath(a||e,n.x,n.y,c,d);else if(o.startsWith("polygon")||["rhomboid","right-rhomboid","round-tag","tag","vee"].includes(o)){p=St(It(p,(C+S+R)/r)),l.drawPolygonPath(a||e,n.x,n.y,r,i,p)}else{p=St(It(p,-((C+S+R)/r))),l.drawPolygonPath(a||e,n.x,n.y,r,i,p)}if(f?e.stroke(a):e.stroke(),"double"===O){e.lineWidth=C/3;var m=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(a):e.stroke(),e.globalCompositeOperation=m}e.setLineDash&&e.setLineDash([])}};if("yes"===t.pstyle("ghost").value){var K=t.pstyle("ghost-offset-x").pfValue,Z=t.pstyle("ghost-offset-y").pfValue,Q=t.pstyle("ghost-opacity").value,J=Q*g;e.translate(K,Z),z(),$(),B(Q*N),U(),j(J,!0),F(Q*k),W(),q(0!==D||0!==C),j(J,!1),H(J),e.translate(-K,-Z)}f&&e.translate(-h.x,-h.y),o&&l.drawNodeUnderlay(e,t,h,r,i),f&&e.translate(h.x,h.y),z(),$(),B(),U(),j(g,!0),F(),W(),q(0!==D||0!==C),j(g,!1),H(),f&&e.translate(-h.x,-h.y),l.drawElementText(e,t,null,a),o&&l.drawNodeOverlay(e,t,h,r,i),n&&e.translate(p.x1,p.y1)}}},tl=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n,r,i,a){if(n.visible()){var o=n.pstyle("".concat(e,"-padding")).pfValue,s=n.pstyle("".concat(e,"-opacity")).value,l=n.pstyle("".concat(e,"-color")).value,u=n.pstyle("".concat(e,"-shape")).value;if(s>0){if(r=r||n.position(),null==i||null==a){var c=n.padding();i=n.width()+2*c,a=n.height()+2*c}this.colorFillStyle(t,l[0],l[1],l[2],s),this.nodeShapes[u].draw(t,r.x,r.y,i+2*o,a+2*o),t.fill()}}}};el.drawNodeOverlay=tl("overlay"),el.drawNodeUnderlay=tl("underlay"),el.hasPie=function(e){return(e=e[0])._private.hasPie},el.drawPie=function(e,t,n,r){t=t[0],r=r||t.position();var i=t.cy().style(),a=t.pstyle("pie-size"),o=r.x,s=r.y,l=t.width(),u=t.height(),c=Math.min(l,u)/2,h=0;this.usePaths()&&(o=0,s=0),"%"===a.units?c*=a.pfValue:void 0!==a.pfValue&&(c=a.pfValue/2);for(var d=1;d<=i.pieBackgroundN;d++){var p=t.pstyle("pie-"+d+"-background-size").value,g=t.pstyle("pie-"+d+"-background-color").value,f=t.pstyle("pie-"+d+"-background-opacity").value*n,v=p/100;v+h>1&&(v=1-h);var y=1.5*Math.PI+2*Math.PI*h,m=y+2*Math.PI*v;0===p||h>=1||h+v>1||(e.beginPath(),e.moveTo(o,s),e.arc(o,s,c,y,m),e.closePath(),this.colorFillStyle(e,g[0],g[1],g[2],f),e.fill(),h+=v)}};var nl={};nl.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},nl.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;i<n.length;i++)if((t=n[i]).context===e){r=!1;break}return r&&(t={context:e},n.push(t)),t},nl.createGradientStyleFor=function(e,t,n,r,i){var a,o=this.usePaths(),s=n.pstyle(t+"-gradient-stop-colors").value,l=n.pstyle(t+"-gradient-stop-positions").pfValue;if("radial-gradient"===r)if(n.isEdge()){var u=n.sourceEndpoint(),c=n.targetEndpoint(),h=n.midpoint(),d=ut(u,h),p=ut(c,h);a=e.createRadialGradient(h.x,h.y,0,h.x,h.y,Math.max(d,p))}else{var g=o?{x:0,y:0}:n.position(),f=n.paddedWidth(),v=n.paddedHeight();a=e.createRadialGradient(g.x,g.y,0,g.x,g.y,Math.max(f,v))}else if(n.isEdge()){var y=n.sourceEndpoint(),m=n.targetEndpoint();a=e.createLinearGradient(y.x,y.y,m.x,m.y)}else{var b=o?{x:0,y:0}:n.position(),x=n.paddedWidth()/2,w=n.paddedHeight()/2;switch(n.pstyle("background-gradient-direction").value){case"to-bottom":a=e.createLinearGradient(b.x,b.y-w,b.x,b.y+w);break;case"to-top":a=e.createLinearGradient(b.x,b.y+w,b.x,b.y-w);break;case"to-left":a=e.createLinearGradient(b.x+x,b.y,b.x-x,b.y);break;case"to-right":a=e.createLinearGradient(b.x-x,b.y,b.x+x,b.y);break;case"to-bottom-right":case"to-right-bottom":a=e.createLinearGradient(b.x-x,b.y-w,b.x+x,b.y+w);break;case"to-top-right":case"to-right-top":a=e.createLinearGradient(b.x-x,b.y+w,b.x+x,b.y-w);break;case"to-bottom-left":case"to-left-bottom":a=e.createLinearGradient(b.x+x,b.y-w,b.x-x,b.y+w);break;case"to-top-left":case"to-left-top":a=e.createLinearGradient(b.x+x,b.y+w,b.x-x,b.y-w)}}if(!a)return null;for(var E=l.length===s.length,_=s.length,T=0;T<_;T++)a.addColorStop(E?l[T]:T/(_-1),"rgba("+s[T][0]+","+s[T][1]+","+s[T][2]+","+i+")");return a},nl.gradientFillStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"background",t,n,r);if(!i)return null;e.fillStyle=i},nl.colorFillStyle=function(e,t,n,r,i){e.fillStyle="rgba("+t+","+n+","+r+","+i+")"},nl.eleFillStyle=function(e,t,n){var r=t.pstyle("background-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientFillStyle(e,t,r,n);else{var i=t.pstyle("background-color").value;this.colorFillStyle(e,i[0],i[1],i[2],n)}},nl.gradientStrokeStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"line",t,n,r);if(!i)return null;e.strokeStyle=i},nl.colorStrokeStyle=function(e,t,n,r,i){e.strokeStyle="rgba("+t+","+n+","+r+","+i+")"},nl.eleStrokeStyle=function(e,t,n){var r=t.pstyle("line-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientStrokeStyle(e,t,r,n);else{var i=t.pstyle("line-color").value;this.colorStrokeStyle(e,i[0],i[1],i[2],n)}},nl.matchCanvasSize=function(e){var t=this,n=t.data,r=t.findContainerClientCoords(),i=r[2],a=r[3],o=t.getPixelRatio(),s=t.motionBlurPxRatio;e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE]&&e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG]||(o=s);var l,u=i*o,c=a*o;if(u!==t.canvasWidth||c!==t.canvasHeight){t.fontCaches=null;var h=n.canvasContainer;h.style.width=i+"px",h.style.height=a+"px";for(var d=0;d<t.CANVAS_LAYERS;d++)(l=n.canvases[d]).width=u,l.height=c,l.style.width=i+"px",l.style.height=a+"px";for(d=0;d<t.BUFFER_COUNT;d++)(l=n.bufferCanvases[d]).width=u,l.height=c,l.style.width=i+"px",l.style.height=a+"px";t.textureMult=1,o<=1&&(l=n.bufferCanvases[t.TEXTURE_BUFFER],t.textureMult=2,l.width=u*t.textureMult,l.height=c*t.textureMult),t.canvasWidth=u,t.canvasHeight=c}},nl.renderTo=function(e,t,n,r){this.render({forcedContext:e,forcedZoom:t,forcedPan:n,drawAllLayers:!0,forcedPxRatio:r})},nl.render=function(e){var t=(e=e||Ie()).forcedContext,n=e.drawAllLayers,r=e.drawOnlyNodeLayer,i=e.forcedZoom,a=e.forcedPan,o=this,s=void 0===e.forcedPxRatio?this.getPixelRatio():e.forcedPxRatio,l=o.cy,u=o.data,c=u.canvasNeedsRedraw,h=o.textureOnViewport&&!t&&(o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming),d=void 0!==e.motionBlur?e.motionBlur:o.motionBlur,p=o.motionBlurPxRatio,g=l.hasCompoundNodes(),f=o.hoverData.draggingEles,v=!(!o.hoverData.selecting&&!o.touchData.selecting),y=d=d&&!t&&o.motionBlurEnabled&&!v;t||(o.prevPxRatio!==s&&(o.invalidateContainerClientCoordsCache(),o.matchCanvasSize(o.container),o.redrawHint("eles",!0),o.redrawHint("drag",!0)),o.prevPxRatio=s),!t&&o.motionBlurTimeout&&clearTimeout(o.motionBlurTimeout),d&&(null==o.mbFrames&&(o.mbFrames=0),o.mbFrames++,o.mbFrames<3&&(y=!1),o.mbFrames>o.minMbLowQualFrames&&(o.motionBlurPxRatio=o.mbPxRBlurry)),o.clearingMotionBlur&&(o.motionBlurPxRatio=1),o.textureDrawLastFrame&&!h&&(c[o.NODE]=!0,c[o.SELECT_BOX]=!0);var m=l.style(),b=l.zoom(),x=void 0!==i?i:b,w=l.pan(),E={x:w.x,y:w.y},_={zoom:b,pan:{x:w.x,y:w.y}},T=o.prevViewport;void 0===T||_.zoom!==T.zoom||_.pan.x!==T.pan.x||_.pan.y!==T.pan.y||f&&!g||(o.motionBlurPxRatio=1),a&&(E=a),x*=s,E.x*=s,E.y*=s;var D=o.getCachedZSortedEles();function C(e,t,n,r,i){var a=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",o.colorFillStyle(e,255,255,255,o.motionBlurTransparency),e.fillRect(t,n,r,i),e.globalCompositeOperation=a}function N(e,r){var s,l,c,h;o.clearingMotionBlur||e!==u.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]&&e!==u.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]?(s=E,l=x,c=o.canvasWidth,h=o.canvasHeight):(s={x:w.x*p,y:w.y*p},l=b*p,c=o.canvasWidth*p,h=o.canvasHeight*p),e.setTransform(1,0,0,1,0,0),"motionBlur"===r?C(e,0,0,c,h):t||void 0!==r&&!r||e.clearRect(0,0,c,h),n||(e.translate(s.x,s.y),e.scale(l,l)),a&&e.translate(a.x,a.y),i&&e.scale(i,i)}if(h||(o.textureDrawLastFrame=!1),h){if(o.textureDrawLastFrame=!0,!o.textureCache){o.textureCache={},o.textureCache.bb=l.mutableElements().boundingBox(),o.textureCache.texture=o.data.bufferCanvases[o.TEXTURE_BUFFER];var A=o.data.bufferContexts[o.TEXTURE_BUFFER];A.setTransform(1,0,0,1,0,0),A.clearRect(0,0,o.canvasWidth*o.textureMult,o.canvasHeight*o.textureMult),o.render({forcedContext:A,drawOnlyNodeLayer:!0,forcedPxRatio:s*o.textureMult}),(_=o.textureCache.viewport={zoom:l.zoom(),pan:l.pan(),width:o.canvasWidth,height:o.canvasHeight}).mpan={x:(0-_.pan.x)/_.zoom,y:(0-_.pan.y)/_.zoom}}c[o.DRAG]=!1,c[o.NODE]=!1;var L=u.contexts[o.NODE],k=o.textureCache.texture;_=o.textureCache.viewport;L.setTransform(1,0,0,1,0,0),d?C(L,0,0,_.width,_.height):L.clearRect(0,0,_.width,_.height);var S=m.core("outside-texture-bg-color").value,I=m.core("outside-texture-bg-opacity").value;o.colorFillStyle(L,S[0],S[1],S[2],I),L.fillRect(0,0,_.width,_.height);b=l.zoom();N(L,!1),L.clearRect(_.mpan.x,_.mpan.y,_.width/_.zoom/s,_.height/_.zoom/s),L.drawImage(k,_.mpan.x,_.mpan.y,_.width/_.zoom/s,_.height/_.zoom/s)}else o.textureOnViewport&&!t&&(o.textureCache=null);var M=l.extent(),O=o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming||o.hoverData.draggingEles||o.cy.animated(),P=o.hideEdgesOnViewport&&O,R=[];if(R[o.NODE]=!c[o.NODE]&&d&&!o.clearedForMotionBlur[o.NODE]||o.clearingMotionBlur,R[o.NODE]&&(o.clearedForMotionBlur[o.NODE]=!0),R[o.DRAG]=!c[o.DRAG]&&d&&!o.clearedForMotionBlur[o.DRAG]||o.clearingMotionBlur,R[o.DRAG]&&(o.clearedForMotionBlur[o.DRAG]=!0),c[o.NODE]||n||r||R[o.NODE]){var B=d&&!R[o.NODE]&&1!==p;N(L=t||(B?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]:u.contexts[o.NODE]),d&&!B?"motionBlur":void 0),P?o.drawCachedNodes(L,D.nondrag,s,M):o.drawLayeredElements(L,D.nondrag,s,M),o.debug&&o.drawDebugPoints(L,D.nondrag),n||d||(c[o.NODE]=!1)}if(!r&&(c[o.DRAG]||n||R[o.DRAG])){B=d&&!R[o.DRAG]&&1!==p;N(L=t||(B?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]:u.contexts[o.DRAG]),d&&!B?"motionBlur":void 0),P?o.drawCachedNodes(L,D.drag,s,M):o.drawCachedElements(L,D.drag,s,M),o.debug&&o.drawDebugPoints(L,D.drag),n||d||(c[o.DRAG]=!1)}if(o.showFps||!r&&c[o.SELECT_BOX]&&!n){if(N(L=t||u.contexts[o.SELECT_BOX]),1==o.selection[4]&&(o.hoverData.selecting||o.touchData.selecting)){b=o.cy.zoom();var F=m.core("selection-box-border-width").value/b;L.lineWidth=F,L.fillStyle="rgba("+m.core("selection-box-color").value[0]+","+m.core("selection-box-color").value[1]+","+m.core("selection-box-color").value[2]+","+m.core("selection-box-opacity").value+")",L.fillRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]),F>0&&(L.strokeStyle="rgba("+m.core("selection-box-border-color").value[0]+","+m.core("selection-box-border-color").value[1]+","+m.core("selection-box-border-color").value[2]+","+m.core("selection-box-opacity").value+")",L.strokeRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]))}if(u.bgActivePosistion&&!o.hoverData.selecting){b=o.cy.zoom();var z=u.bgActivePosistion;L.fillStyle="rgba("+m.core("active-bg-color").value[0]+","+m.core("active-bg-color").value[1]+","+m.core("active-bg-color").value[2]+","+m.core("active-bg-opacity").value+")",L.beginPath(),L.arc(z.x,z.y,m.core("active-bg-size").pfValue/b,0,2*Math.PI),L.fill()}var G=o.lastRedrawTime;if(o.showFps&&G){G=Math.round(G);var Y=Math.round(1e3/G);L.setTransform(1,0,0,1,0,0),L.fillStyle="rgba(255, 0, 0, 0.75)",L.strokeStyle="rgba(255, 0, 0, 0.75)",L.lineWidth=1,L.fillText("1 frame = "+G+" ms = "+Y+" fps",0,20);L.strokeRect(0,30,250,20),L.fillRect(0,30,250*Math.min(Y/60,1),20)}n||(c[o.SELECT_BOX]=!1)}if(d&&1!==p){var X=u.contexts[o.NODE],V=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_NODE],U=u.contexts[o.DRAG],j=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_DRAG],q=function(e,t,n){e.setTransform(1,0,0,1,0,0),n||!y?e.clearRect(0,0,o.canvasWidth,o.canvasHeight):C(e,0,0,o.canvasWidth,o.canvasHeight);var r=p;e.drawImage(t,0,0,o.canvasWidth*r,o.canvasHeight*r,0,0,o.canvasWidth,o.canvasHeight)};(c[o.NODE]||R[o.NODE])&&(q(X,V,R[o.NODE]),c[o.NODE]=!1),(c[o.DRAG]||R[o.DRAG])&&(q(U,j,R[o.DRAG]),c[o.DRAG]=!1)}o.prevViewport=_,o.clearingMotionBlur&&(o.clearingMotionBlur=!1,o.motionBlurCleared=!0,o.motionBlur=!0),d&&(o.motionBlurTimeout=setTimeout((function(){o.motionBlurTimeout=null,o.clearedForMotionBlur[o.NODE]=!1,o.clearedForMotionBlur[o.DRAG]=!1,o.motionBlur=!1,o.clearingMotionBlur=!h,o.mbFrames=0,c[o.NODE]=!0,c[o.DRAG]=!0,o.redraw()}),100)),t||l.emit("render")};for(var rl={drawPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2;e.beginPath&&e.beginPath(),e.moveTo(t+o*a[0],n+s*a[1]);for(var l=1;l<a.length/2;l++)e.lineTo(t+o*a[2*l],n+s*a[2*l+1]);e.closePath()},drawRoundPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2,l=Vt(r,i);e.beginPath&&e.beginPath();for(var u=0;u<a.length/4;u++){var c,h=void 0;h=0===u?a.length-2:4*u-2,c=4*u+2;var d=t+o*a[4*u],p=n+s*a[4*u+1],g=-a[h]*a[c]-a[h+1]*a[c+1],f=l/Math.tan(Math.acos(g)/2),v=d-f*a[h],y=p-f*a[h+1],m=d+f*a[c],b=p+f*a[c+1];0===u?e.moveTo(v,y):e.lineTo(v,y),e.arcTo(d,p,m,b,l)}e.closePath()},drawRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=Xt(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.arcTo(t+a,n-o,t+a,n,s),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.arcTo(t-a,n-o,t,n-o,s),e.lineTo(t,n-o),e.closePath()},drawBottomRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=Xt(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.lineTo(t+a,n-o),e.lineTo(t+a,n),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.lineTo(t-a,n-o),e.lineTo(t,n-o),e.closePath()},drawCutRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2;e.beginPath&&e.beginPath(),e.moveTo(t-a+8,n-o),e.lineTo(t+a-8,n-o),e.lineTo(t+a,n-o+8),e.lineTo(t+a,n+o-8),e.lineTo(t+a-8,n+o),e.lineTo(t-a+8,n+o),e.lineTo(t-a,n+o-8),e.lineTo(t-a,n-o+8),e.closePath()},drawBarrelPath:function(e,t,n,r,i){var a=r/2,o=i/2,s=t-a,l=t+a,u=n-o,c=n+o,h=Ut(r,i),d=h.widthOffset,p=h.heightOffset,g=h.ctrlPtOffsetPct*d;e.beginPath&&e.beginPath(),e.moveTo(s,u+p),e.lineTo(s,c-p),e.quadraticCurveTo(s+g,c,s+d,c),e.lineTo(l-d,c),e.quadraticCurveTo(l-g,c,l,c-p),e.lineTo(l,u+p),e.quadraticCurveTo(l-g,u,l-d,u),e.lineTo(s+d,u),e.quadraticCurveTo(s+g,u,s,u+p),e.closePath()}},il=Math.sin(0),al=Math.cos(0),ol={},sl={},ll=Math.PI/40,ul=0*Math.PI;ul<2*Math.PI;ul+=ll)ol[ul]=Math.sin(ul),sl[ul]=Math.cos(ul);rl.drawEllipsePath=function(e,t,n,r,i){if(e.beginPath&&e.beginPath(),e.ellipse)e.ellipse(t,n,r/2,i/2,0,0,2*Math.PI);else for(var a,o,s=r/2,l=i/2,u=0*Math.PI;u<2*Math.PI;u+=ll)a=t-s*ol[u]*il+s*sl[u]*al,o=n+l*sl[u]*il+l*ol[u]*al,0===u?e.moveTo(a,o):e.lineTo(a,o);e.closePath()};var cl={};function hl(e){var t=e.indexOf(",");return e.substr(t+1)}function dl(e,t,n){var r=function(){return t.toDataURL(n,e.quality)};switch(e.output){case"blob-promise":return new rr((function(r,i){try{t.toBlob((function(e){null!=e?r(e):i(new Error("`canvas.toBlob()` sent a null value in its callback"))}),n,e.quality)}catch(a){i(a)}}));case"blob":return function(e,t){for(var n=atob(e),r=new ArrayBuffer(n.length),i=new Uint8Array(r),a=0;a<n.length;a++)i[a]=n.charCodeAt(a);return new Blob([r],{type:t})}(hl(r()),n);case"base64":return hl(r());default:return r()}}cl.createBuffer=function(e,t){var n=document.createElement("canvas");return n.width=e,n.height=t,[n,n.getContext("2d")]},cl.bufferCanvasImage=function(e){var t=this.cy,n=t.mutableElements().boundingBox(),r=this.findContainerClientCoords(),i=e.full?Math.ceil(n.w):r[2],a=e.full?Math.ceil(n.h):r[3],o=I(e.maxWidth)||I(e.maxHeight),s=this.getPixelRatio(),l=1;if(void 0!==e.scale)i*=e.scale,a*=e.scale,l=e.scale;else if(o){var u=1/0,c=1/0;I(e.maxWidth)&&(u=l*e.maxWidth/i),I(e.maxHeight)&&(c=l*e.maxHeight/a),i*=l=Math.min(u,c),a*=l}o||(i*=s,a*=s,l*=s);var h=document.createElement("canvas");h.width=i,h.height=a,h.style.width=i+"px",h.style.height=a+"px";var d=h.getContext("2d");if(i>0&&a>0){d.clearRect(0,0,i,a),d.globalCompositeOperation="source-over";var p=this.getCachedZSortedEles();if(e.full)d.translate(-n.x1*l,-n.y1*l),d.scale(l,l),this.drawElements(d,p),d.scale(1/l,1/l),d.translate(n.x1*l,n.y1*l);else{var g=t.pan(),f={x:g.x*l,y:g.y*l};l*=t.zoom(),d.translate(f.x,f.y),d.scale(l,l),this.drawElements(d,p),d.scale(1/l,1/l),d.translate(-f.x,-f.y)}e.bg&&(d.globalCompositeOperation="destination-over",d.fillStyle=e.bg,d.rect(0,0,i,a),d.fill())}return h},cl.png=function(e){return dl(e,this.bufferCanvasImage(e),"image/png")},cl.jpg=function(e){return dl(e,this.bufferCanvasImage(e),"image/jpeg")};var pl={nodeShapeImpl:function(e,t,n,r,i,a,o){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,i,a);case"polygon":return this.drawPolygonPath(t,n,r,i,a,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,i,a,o);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},gl=vl,fl=vl.prototype;function vl(e){var t=this;t.data={canvases:new Array(fl.CANVAS_LAYERS),contexts:new Array(fl.CANVAS_LAYERS),canvasNeedsRedraw:new Array(fl.CANVAS_LAYERS),bufferCanvases:new Array(fl.BUFFER_COUNT),bufferContexts:new Array(fl.CANVAS_LAYERS)};var n="-webkit-tap-highlight-color",r="rgba(0,0,0,0)";t.data.canvasContainer=document.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[n]=r,i.position="relative",i.zIndex="0",i.overflow="hidden";var a=e.cy.container();a.appendChild(t.data.canvasContainer),a.style[n]=r;var o={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};E&&E.userAgent.match(/msie|trident|edge/i)&&(o["-ms-touch-action"]="none",o["touch-action"]="none");for(var s=0;s<fl.CANVAS_LAYERS;s++){var l=t.data.canvases[s]=document.createElement("canvas");t.data.contexts[s]=l.getContext("2d"),Object.keys(o).forEach((function(e){l.style[e]=o[e]})),l.style.position="absolute",l.setAttribute("data-id","layer"+s),l.style.zIndex=String(fl.CANVAS_LAYERS-s),t.data.canvasContainer.appendChild(l),t.data.canvasNeedsRedraw[s]=!1}t.data.topCanvas=t.data.canvases[0],t.data.canvases[fl.NODE].setAttribute("data-id","layer"+fl.NODE+"-node"),t.data.canvases[fl.SELECT_BOX].setAttribute("data-id","layer"+fl.SELECT_BOX+"-selectbox"),t.data.canvases[fl.DRAG].setAttribute("data-id","layer"+fl.DRAG+"-drag");for(s=0;s<fl.BUFFER_COUNT;s++)t.data.bufferCanvases[s]=document.createElement("canvas"),t.data.bufferContexts[s]=t.data.bufferCanvases[s].getContext("2d"),t.data.bufferCanvases[s].style.position="absolute",t.data.bufferCanvases[s].setAttribute("data-id","buffer"+s),t.data.bufferCanvases[s].style.zIndex=String(-s-1),t.data.bufferCanvases[s].style.visibility="hidden";t.pathsEnabled=!0;var u=ft(),c=function(e){return{x:-e.w/2,y:-e.h/2}},h=function(e){return e.boundingBox(),e[0]._private.bodyBounds},d=function(e){return e.boundingBox(),e[0]._private.labelBounds.main||u},p=function(e){return e.boundingBox(),e[0]._private.labelBounds.source||u},g=function(e){return e.boundingBox(),e[0]._private.labelBounds.target||u},f=function(e,t){return t},v=function(e,t,n){var r=e?e+"-":"";return{x:t.x+n.pstyle(r+"text-margin-x").pfValue,y:t.y+n.pstyle(r+"text-margin-y").pfValue}},y=function(e,t,n){var r=e[0]._private.rscratch;return{x:r[t],y:r[n]}},m=t.data.eleTxrCache=new Ls(t,{getKey:function(e){return e[0]._private.nodeKey},doesEleInvalidateKey:function(e){var t=e[0]._private;return!(t.oldBackgroundTimestamp===t.backgroundTimestamp)},drawElement:function(e,n,r,i,a){return t.drawElement(e,n,r,!1,!1,a)},getBoundingBox:h,getRotationPoint:function(e){return{x:((t=h(e)).x1+t.x2)/2,y:(t.y1+t.y2)/2};var t},getRotationOffset:function(e){return c(h(e))},allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),b=t.data.lblTxrCache=new Ls(t,{getKey:function(e){return e[0]._private.labelStyleKey},drawElement:function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"main",a)},getBoundingBox:d,getRotationPoint:function(e){return v("",y(e,"labelX","labelY"),e)},getRotationOffset:function(e){var t=d(e),n=c(d(e));if(e.isNode()){switch(e.pstyle("text-halign").value){case"left":n.x=-t.w;break;case"right":n.x=0}switch(e.pstyle("text-valign").value){case"top":n.y=-t.h;break;case"bottom":n.y=0}}return n},isVisible:f}),x=t.data.slbTxrCache=new Ls(t,{getKey:function(e){return e[0]._private.sourceLabelStyleKey},drawElement:function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"source",a)},getBoundingBox:p,getRotationPoint:function(e){return v("source",y(e,"sourceLabelX","sourceLabelY"),e)},getRotationOffset:function(e){return c(p(e))},isVisible:f}),w=t.data.tlbTxrCache=new Ls(t,{getKey:function(e){return e[0]._private.targetLabelStyleKey},drawElement:function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"target",a)},getBoundingBox:g,getRotationPoint:function(e){return v("target",y(e,"targetLabelX","targetLabelY"),e)},getRotationOffset:function(e){return c(g(e))},isVisible:f}),_=t.data.lyrTxrCache=new Ss(t);t.onUpdateEleCalcs((function(e,t){m.invalidateElements(t),b.invalidateElements(t),x.invalidateElements(t),w.invalidateElements(t),_.invalidateElements(t);for(var n=0;n<t.length;n++){var r=t[n]._private;r.oldBackgroundTimestamp=r.backgroundTimestamp}}));var T=function(e){for(var t=0;t<e.length;t++)_.enqueueElementRefinement(e[t].ele)};m.onDequeue(T),b.onDequeue(T),x.onDequeue(T),w.onDequeue(T)}fl.CANVAS_LAYERS=3,fl.SELECT_BOX=0,fl.DRAG=1,fl.NODE=2,fl.BUFFER_COUNT=3,fl.TEXTURE_BUFFER=0,fl.MOTIONBLUR_BUFFER_NODE=1,fl.MOTIONBLUR_BUFFER_DRAG=2,fl.redrawHint=function(e,t){var n=this;switch(e){case"eles":n.data.canvasNeedsRedraw[fl.NODE]=t;break;case"drag":n.data.canvasNeedsRedraw[fl.DRAG]=t;break;case"select":n.data.canvasNeedsRedraw[fl.SELECT_BOX]=t}};var yl="undefined"!=typeof Path2D;fl.path2dEnabled=function(e){if(void 0===e)return this.pathsEnabled;this.pathsEnabled=!!e},fl.usePaths=function(){return yl&&this.pathsEnabled},fl.setImgSmoothing=function(e,t){null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled=t:(e.webkitImageSmoothingEnabled=t,e.mozImageSmoothingEnabled=t,e.msImageSmoothingEnabled=t)},fl.getImgSmoothing=function(e){return null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled:e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled},fl.makeOffscreenCanvas=function(e,t){var n;return"undefined"!==("undefined"==typeof OffscreenCanvas?"undefined":g(OffscreenCanvas))?n=new OffscreenCanvas(e,t):((n=document.createElement("canvas")).width=e,n.height=t),n},[Rs,Xs,$s,Zs,Qs,el,nl,rl,cl,pl].forEach((function(e){Q(fl,e)}));var ml=[{type:"layout",extensions:Zo},{type:"renderer",extensions:[{name:"null",impl:Qo},{name:"base",impl:Es},{name:"canvas",impl:gl}]}],bl={},xl={};function wl(e,t,n){var r=n,i=function(n){Ae("Can not register `"+t+"` for `"+e+"` since `"+n+"` already exists in the prototype and can not be overridden")};if("core"===e){if(uo.prototype[t])return i(t);uo.prototype[t]=n}else if("collection"===e){if(Da.prototype[t])return i(t);Da.prototype[t]=n}else if("layout"===e){for(var a=function(e){this.options=e,n.call(this,e),S(this._private)||(this._private={}),this._private.cy=e.cy,this._private.listeners=[],this.createEmitter()},o=a.prototype=Object.create(n.prototype),s=[],l=0;l<s.length;l++){var u=s[l];o[u]=o[u]||function(){return this}}o.start&&!o.run?o.run=function(){return this.start(),this}:!o.start&&o.run&&(o.start=function(){return this.run(),this});var c=n.prototype.stop;o.stop=function(){var e=this.options;if(e&&e.animate){var t=this.animations;if(t)for(var n=0;n<t.length;n++)t[n].stop()}return c?c.call(this):this.emit("layoutstop"),this},o.destroy||(o.destroy=function(){return this}),o.cy=function(){return this._private.cy};var h=function(e){return e._private.cy},d={addEventFields:function(e,t){t.layout=e,t.cy=h(e),t.target=e},bubble:function(){return!0},parent:function(e){return h(e)}};Q(o,{createEmitter:function(){return this._private.emitter=new Vi(d,this),this},emitter:function(){return this._private.emitter},on:function(e,t){return this.emitter().on(e,t),this},one:function(e,t){return this.emitter().one(e,t),this},once:function(e,t){return this.emitter().one(e,t),this},removeListener:function(e,t){return this.emitter().removeListener(e,t),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},emit:function(e,t){return this.emitter().emit(e,t),this}}),ur.eventAliasesOn(o),r=a}else if("renderer"===e&&"null"!==t&&"base"!==t){var p=El("renderer","base"),g=p.prototype,f=n,v=n.prototype,y=function(){p.apply(this,arguments),f.apply(this,arguments)},m=y.prototype;for(var b in g){var x=g[b];if(null!=v[b])return i(b);m[b]=x}for(var w in v)m[w]=v[w];g.clientFunctions.forEach((function(e){m[e]=m[e]||function(){Ce("Renderer does not implement `renderer."+e+"()` on its prototype")}})),r=y}else if("__proto__"===e||"constructor"===e||"prototype"===e)return Ce(e+" is an illegal type to be registered, possibly lead to prototype pollutions");return te({map:bl,keys:[e,t],value:r})}function El(e,t){return ne({map:bl,keys:[e,t]})}function _l(e,t,n,r,i){return te({map:xl,keys:[e,t,n,r],value:i})}function Tl(e,t,n,r){return ne({map:xl,keys:[e,t,n,r]})}var Dl=function(){return 2===arguments.length?El.apply(null,arguments):3===arguments.length?wl.apply(null,arguments):4===arguments.length?Tl.apply(null,arguments):5===arguments.length?_l.apply(null,arguments):void Ce("Invalid extension access syntax")};uo.prototype.extension=Dl,ml.forEach((function(e){e.extensions.forEach((function(t){wl(e.type,t.name,t.impl)}))}));var Cl=function e(){if(!(this instanceof e))return new e;this.length=0},Nl=Cl.prototype;Nl.instanceString=function(){return"stylesheet"},Nl.selector=function(e){return this[this.length++]={selector:e,properties:[]},this},Nl.css=function(e,t){var n=this.length-1;if(A(e))this[n].properties.push({name:e,value:t});else if(S(e))for(var r=e,i=Object.keys(r),a=0;a<i.length;a++){var o=i[a],s=r[o];if(null!=s){var l=io.properties[o]||io.properties[V(o)];if(null!=l){var u=l.name,c=s;this[n].properties.push({name:u,value:c})}}}return this},Nl.style=Nl.css,Nl.generateStyle=function(e){var t=new io(e);return this.appendToStyle(t)},Nl.appendToStyle=function(e){for(var t=0;t<this.length;t++){var n=this[t],r=n.selector,i=n.properties;e.selector(r);for(var a=0;a<i.length;a++){var o=i[a];e.css(o.name,o.value)}}return e};var Al=function(e){return void 0===e&&(e={}),S(e)?new uo(e):A(e)?Dl.apply(Dl,arguments):void 0};Al.use=function(e){var t=Array.prototype.slice.call(arguments,1);return t.unshift(Al),e.apply(null,t),this},Al.warnings=function(e){return Ne(e)},Al.version="3.28.1",Al.stylesheet=Al.Stylesheet=Cl,e.exports=Al},65731:(e,t,n)=>{e.exports=n(34297)},34297:function(e,t){var n,r,i;(function(){var a,o,s,l,u,c,h,d,p,g,f,v,y,m,b;s=Math.floor,g=Math.min,o=function(e,t){return e<t?-1:e>t?1:0},p=function(e,t,n,r,i){var a;if(null==n&&(n=0),null==i&&(i=o),n<0)throw new Error("lo must be non-negative");for(null==r&&(r=e.length);n<r;)i(t,e[a=s((n+r)/2)])<0?r=a:n=a+1;return[].splice.apply(e,[n,n-n].concat(t)),t},c=function(e,t,n){return null==n&&(n=o),e.push(t),m(e,0,e.length-1,n)},u=function(e,t){var n,r;return null==t&&(t=o),n=e.pop(),e.length?(r=e[0],e[0]=n,b(e,0,t)):r=n,r},d=function(e,t,n){var r;return null==n&&(n=o),r=e[0],e[0]=t,b(e,0,n),r},h=function(e,t,n){var r;return null==n&&(n=o),e.length&&n(e[0],t)<0&&(t=(r=[e[0],t])[0],e[0]=r[1],b(e,0,n)),t},l=function(e,t){var n,r,i,a,l,u;for(null==t&&(t=o),a=function(){u=[];for(var t=0,n=s(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse(),l=[],r=0,i=a.length;r<i;r++)n=a[r],l.push(b(e,n,t));return l},y=function(e,t,n){var r;if(null==n&&(n=o),-1!==(r=e.indexOf(t)))return m(e,0,r,n),b(e,r,n)},f=function(e,t,n){var r,i,a,s,u;if(null==n&&(n=o),!(i=e.slice(0,t)).length)return i;for(l(i,n),a=0,s=(u=e.slice(t)).length;a<s;a++)r=u[a],h(i,r,n);return i.sort(n).reverse()},v=function(e,t,n){var r,i,a,s,c,h,d,f,v;if(null==n&&(n=o),10*t<=e.length){if(!(a=e.slice(0,t).sort(n)).length)return a;for(i=a[a.length-1],s=0,h=(d=e.slice(t)).length;s<h;s++)n(r=d[s],i)<0&&(p(a,r,0,null,n),a.pop(),i=a[a.length-1]);return a}for(l(e,n),v=[],c=0,f=g(t,e.length);0<=f?c<f:c>f;0<=f?++c:--c)v.push(u(e,n));return v},m=function(e,t,n,r){var i,a,s;for(null==r&&(r=o),i=e[n];n>t&&r(i,a=e[s=n-1>>1])<0;)e[n]=a,n=s;return e[n]=i},b=function(e,t,n){var r,i,a,s,l;for(null==n&&(n=o),i=e.length,l=t,a=e[t],r=2*t+1;r<i;)(s=r+1)<i&&!(n(e[r],e[s])<0)&&(r=s),e[t]=e[r],r=2*(t=r)+1;return e[t]=a,m(e,l,t,n)},a=function(){function e(e){this.cmp=null!=e?e:o,this.nodes=[]}return e.push=c,e.pop=u,e.replace=d,e.pushpop=h,e.heapify=l,e.updateItem=y,e.nlargest=f,e.nsmallest=v,e.prototype.push=function(e){return c(this.nodes,e,this.cmp)},e.prototype.pop=function(){return u(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return d(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return h(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return l(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return y(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return(t=new e).nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),r=[],void 0===(i="function"==typeof(n=function(){return a})?n.apply(t,r):n)||(e.exports=i)}).call(this)},23143:function(e){var t;t=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=26)}([function(e,t,n){"use strict";function r(){}r.QUALITY=1,r.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,r.DEFAULT_INCREMENTAL=!1,r.DEFAULT_ANIMATION_ON_LAYOUT=!0,r.DEFAULT_ANIMATION_DURING_LAYOUT=!1,r.DEFAULT_ANIMATION_PERIOD=50,r.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,r.DEFAULT_GRAPH_MARGIN=15,r.NODE_DIMENSIONS_INCLUDE_LABELS=!1,r.SIMPLE_NODE_SIZE=40,r.SIMPLE_NODE_HALF_SIZE=r.SIMPLE_NODE_SIZE/2,r.EMPTY_COMPOUND_NODE_SIZE=40,r.MIN_EDGE_LENGTH=1,r.WORLD_BOUNDARY=1e6,r.INITIAL_WORLD_BOUNDARY=r.WORLD_BOUNDARY/1e3,r.WORLD_CENTER_X=1200,r.WORLD_CENTER_Y=900,e.exports=r},function(e,t,n){"use strict";var r=n(2),i=n(8),a=n(9);function o(e,t,n){r.call(this,n),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=n,this.bendpoints=[],this.source=e,this.target=t}for(var s in o.prototype=Object.create(r.prototype),r)o[s]=r[s];o.prototype.getSource=function(){return this.source},o.prototype.getTarget=function(){return this.target},o.prototype.isInterGraph=function(){return this.isInterGraph},o.prototype.getLength=function(){return this.length},o.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},o.prototype.getBendpoints=function(){return this.bendpoints},o.prototype.getLca=function(){return this.lca},o.prototype.getSourceInLca=function(){return this.sourceInLca},o.prototype.getTargetInLca=function(){return this.targetInLca},o.prototype.getOtherEnd=function(e){if(this.source===e)return this.target;if(this.target===e)return this.source;throw"Node is not incident with this edge"},o.prototype.getOtherEndInGraph=function(e,t){for(var n=this.getOtherEnd(e),r=t.getGraphManager().getRoot();;){if(n.getOwner()==t)return n;if(n.getOwner()==r)break;n=n.getOwner().getParent()}return null},o.prototype.updateLength=function(){var e=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),e),this.isOverlapingSourceAndTarget||(this.lengthX=e[0]-e[2],this.lengthY=e[1]-e[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},o.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},e.exports=o},function(e,t,n){"use strict";e.exports=function(e){this.vGraphObject=e}},function(e,t,n){"use strict";var r=n(2),i=n(10),a=n(13),o=n(0),s=n(16),l=n(4);function u(e,t,n,o){null==n&&null==o&&(o=t),r.call(this,o),null!=e.graphManager&&(e=e.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=o,this.edges=[],this.graphManager=e,this.rect=null!=n&&null!=t?new a(t.x,t.y,n.width,n.height):new a}for(var c in u.prototype=Object.create(r.prototype),r)u[c]=r[c];u.prototype.getEdges=function(){return this.edges},u.prototype.getChild=function(){return this.child},u.prototype.getOwner=function(){return this.owner},u.prototype.getWidth=function(){return this.rect.width},u.prototype.setWidth=function(e){this.rect.width=e},u.prototype.getHeight=function(){return this.rect.height},u.prototype.setHeight=function(e){this.rect.height=e},u.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},u.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},u.prototype.getCenter=function(){return new l(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},u.prototype.getLocation=function(){return new l(this.rect.x,this.rect.y)},u.prototype.getRect=function(){return this.rect},u.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},u.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},u.prototype.setRect=function(e,t){this.rect.x=e.x,this.rect.y=e.y,this.rect.width=t.width,this.rect.height=t.height},u.prototype.setCenter=function(e,t){this.rect.x=e-this.rect.width/2,this.rect.y=t-this.rect.height/2},u.prototype.setLocation=function(e,t){this.rect.x=e,this.rect.y=t},u.prototype.moveBy=function(e,t){this.rect.x+=e,this.rect.y+=t},u.prototype.getEdgeListToNode=function(e){var t=[],n=this;return n.edges.forEach((function(r){if(r.target==e){if(r.source!=n)throw"Incorrect edge source!";t.push(r)}})),t},u.prototype.getEdgesBetween=function(e){var t=[],n=this;return n.edges.forEach((function(r){if(r.source!=n&&r.target!=n)throw"Incorrect edge source and/or target";r.target!=e&&r.source!=e||t.push(r)})),t},u.prototype.getNeighborsList=function(){var e=new Set,t=this;return t.edges.forEach((function(n){if(n.source==t)e.add(n.target);else{if(n.target!=t)throw"Incorrect incidency!";e.add(n.source)}})),e},u.prototype.withChildren=function(){var e=new Set;if(e.add(this),null!=this.child)for(var t=this.child.getNodes(),n=0;n<t.length;n++)t[n].withChildren().forEach((function(t){e.add(t)}));return e},u.prototype.getNoOfChildren=function(){var e=0;if(null==this.child)e=1;else for(var t=this.child.getNodes(),n=0;n<t.length;n++)e+=t[n].getNoOfChildren();return 0==e&&(e=1),e},u.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},u.prototype.calcEstimatedSize=function(){return null==this.child?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},u.prototype.scatter=function(){var e,t,n=-o.INITIAL_WORLD_BOUNDARY,r=o.INITIAL_WORLD_BOUNDARY;e=o.WORLD_CENTER_X+s.nextDouble()*(r-n)+n;var i=-o.INITIAL_WORLD_BOUNDARY,a=o.INITIAL_WORLD_BOUNDARY;t=o.WORLD_CENTER_Y+s.nextDouble()*(a-i)+i,this.rect.x=e,this.rect.y=t},u.prototype.updateBounds=function(){if(null==this.getChild())throw"assert failed";if(0!=this.getChild().getNodes().length){var e=this.getChild();if(e.updateBounds(!0),this.rect.x=e.getLeft(),this.rect.y=e.getTop(),this.setWidth(e.getRight()-e.getLeft()),this.setHeight(e.getBottom()-e.getTop()),o.NODE_DIMENSIONS_INCLUDE_LABELS){var t=e.getRight()-e.getLeft(),n=e.getBottom()-e.getTop();this.labelWidth>t&&(this.rect.x-=(this.labelWidth-t)/2,this.setWidth(this.labelWidth)),this.labelHeight>n&&("center"==this.labelPos?this.rect.y-=(this.labelHeight-n)/2:"top"==this.labelPos&&(this.rect.y-=this.labelHeight-n),this.setHeight(this.labelHeight))}}},u.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},u.prototype.transform=function(e){var t=this.rect.x;t>o.WORLD_BOUNDARY?t=o.WORLD_BOUNDARY:t<-o.WORLD_BOUNDARY&&(t=-o.WORLD_BOUNDARY);var n=this.rect.y;n>o.WORLD_BOUNDARY?n=o.WORLD_BOUNDARY:n<-o.WORLD_BOUNDARY&&(n=-o.WORLD_BOUNDARY);var r=new l(t,n),i=e.inverseTransformPoint(r);this.setLocation(i.x,i.y)},u.prototype.getLeft=function(){return this.rect.x},u.prototype.getRight=function(){return this.rect.x+this.rect.width},u.prototype.getTop=function(){return this.rect.y},u.prototype.getBottom=function(){return this.rect.y+this.rect.height},u.prototype.getParent=function(){return null==this.owner?null:this.owner.getParent()},e.exports=u},function(e,t,n){"use strict";function r(e,t){null==e&&null==t?(this.x=0,this.y=0):(this.x=e,this.y=t)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.setX=function(e){this.x=e},r.prototype.setY=function(e){this.y=e},r.prototype.getDifference=function(e){return new DimensionD(this.x-e.x,this.y-e.y)},r.prototype.getCopy=function(){return new r(this.x,this.y)},r.prototype.translate=function(e){return this.x+=e.width,this.y+=e.height,this},e.exports=r},function(e,t,n){"use strict";var r=n(2),i=n(10),a=n(0),o=n(6),s=n(3),l=n(1),u=n(13),c=n(12),h=n(11);function d(e,t,n){r.call(this,n),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=e,null!=t&&t instanceof o?this.graphManager=t:null!=t&&t instanceof Layout&&(this.graphManager=t.graphManager)}for(var p in d.prototype=Object.create(r.prototype),r)d[p]=r[p];d.prototype.getNodes=function(){return this.nodes},d.prototype.getEdges=function(){return this.edges},d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getParent=function(){return this.parent},d.prototype.getLeft=function(){return this.left},d.prototype.getRight=function(){return this.right},d.prototype.getTop=function(){return this.top},d.prototype.getBottom=function(){return this.bottom},d.prototype.isConnected=function(){return this.isConnected},d.prototype.add=function(e,t,n){if(null==t&&null==n){var r=e;if(null==this.graphManager)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(r)>-1)throw"Node already in graph!";return r.owner=this,this.getNodes().push(r),r}var i=e;if(!(this.getNodes().indexOf(t)>-1&&this.getNodes().indexOf(n)>-1))throw"Source or target not in graph!";if(t.owner!=n.owner||t.owner!=this)throw"Both owners must be this graph!";return t.owner!=n.owner?null:(i.source=t,i.target=n,i.isInterGraph=!1,this.getEdges().push(i),t.edges.push(i),n!=t&&n.edges.push(i),i)},d.prototype.remove=function(e){var t=e;if(e instanceof s){if(null==t)throw"Node is null!";if(null==t.owner||t.owner!=this)throw"Owner graph is invalid!";if(null==this.graphManager)throw"Owner graph manager is invalid!";for(var n=t.edges.slice(),r=n.length,i=0;i<r;i++)(a=n[i]).isInterGraph?this.graphManager.remove(a):a.source.owner.remove(a);if(-1==(o=this.nodes.indexOf(t)))throw"Node not in owner node list!";this.nodes.splice(o,1)}else if(e instanceof l){var a;if(null==(a=e))throw"Edge is null!";if(null==a.source||null==a.target)throw"Source and/or target is null!";if(null==a.source.owner||null==a.target.owner||a.source.owner!=this||a.target.owner!=this)throw"Source and/or target owner is invalid!";var o,u=a.source.edges.indexOf(a),c=a.target.edges.indexOf(a);if(!(u>-1&&c>-1))throw"Source and/or target doesn't know this edge!";if(a.source.edges.splice(u,1),a.target!=a.source&&a.target.edges.splice(c,1),-1==(o=a.source.owner.getEdges().indexOf(a)))throw"Not in owner's edge list!";a.source.owner.getEdges().splice(o,1)}},d.prototype.updateLeftTop=function(){for(var e,t,n,r=i.MAX_VALUE,a=i.MAX_VALUE,o=this.getNodes(),s=o.length,l=0;l<s;l++){var u=o[l];r>(e=u.getTop())&&(r=e),a>(t=u.getLeft())&&(a=t)}return r==i.MAX_VALUE?null:(n=null!=o[0].getParent().paddingLeft?o[0].getParent().paddingLeft:this.margin,this.left=a-n,this.top=r-n,new c(this.left,this.top))},d.prototype.updateBounds=function(e){for(var t,n,r,a,o,s=i.MAX_VALUE,l=-i.MAX_VALUE,c=i.MAX_VALUE,h=-i.MAX_VALUE,d=this.nodes,p=d.length,g=0;g<p;g++){var f=d[g];e&&null!=f.child&&f.updateBounds(),s>(t=f.getLeft())&&(s=t),l<(n=f.getRight())&&(l=n),c>(r=f.getTop())&&(c=r),h<(a=f.getBottom())&&(h=a)}var v=new u(s,c,l-s,h-c);s==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),o=null!=d[0].getParent().paddingLeft?d[0].getParent().paddingLeft:this.margin,this.left=v.x-o,this.right=v.x+v.width+o,this.top=v.y-o,this.bottom=v.y+v.height+o},d.calculateBounds=function(e){for(var t,n,r,a,o=i.MAX_VALUE,s=-i.MAX_VALUE,l=i.MAX_VALUE,c=-i.MAX_VALUE,h=e.length,d=0;d<h;d++){var p=e[d];o>(t=p.getLeft())&&(o=t),s<(n=p.getRight())&&(s=n),l>(r=p.getTop())&&(l=r),c<(a=p.getBottom())&&(c=a)}return new u(o,l,s-o,c-l)},d.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},d.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},d.prototype.calcEstimatedSize=function(){for(var e=0,t=this.nodes,n=t.length,r=0;r<n;r++)e+=t[r].calcEstimatedSize();return this.estimatedSize=0==e?a.EMPTY_COMPOUND_NODE_SIZE:e/Math.sqrt(this.nodes.length),this.estimatedSize},d.prototype.updateConnected=function(){var e=this;if(0!=this.nodes.length){var t,n,r=new h,i=new Set,a=this.nodes[0];for(a.withChildren().forEach((function(e){r.push(e),i.add(e)}));0!==r.length;)for(var o=(t=(a=r.shift()).getEdges()).length,s=0;s<o;s++)null==(n=t[s].getOtherEndInGraph(a,this))||i.has(n)||n.withChildren().forEach((function(e){r.push(e),i.add(e)}));if(this.isConnected=!1,i.size>=this.nodes.length){var l=0;i.forEach((function(t){t.owner==e&&l++})),l==this.nodes.length&&(this.isConnected=!0)}}else this.isConnected=!0},e.exports=d},function(e,t,n){"use strict";var r,i=n(1);function a(e){r=n(5),this.layout=e,this.graphs=[],this.edges=[]}a.prototype.addRoot=function(){var e=this.layout.newGraph(),t=this.layout.newNode(null),n=this.add(e,t);return this.setRootGraph(n),this.rootGraph},a.prototype.add=function(e,t,n,r,i){if(null==n&&null==r&&null==i){if(null==e)throw"Graph is null!";if(null==t)throw"Parent node is null!";if(this.graphs.indexOf(e)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(e),null!=e.parent)throw"Already has a parent!";if(null!=t.child)throw"Already has a child!";return e.parent=t,t.child=e,e}i=n,n=e;var a=(r=t).getOwner(),o=i.getOwner();if(null==a||a.getGraphManager()!=this)throw"Source not in this graph mgr!";if(null==o||o.getGraphManager()!=this)throw"Target not in this graph mgr!";if(a==o)return n.isInterGraph=!1,a.add(n,r,i);if(n.isInterGraph=!0,n.source=r,n.target=i,this.edges.indexOf(n)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(n),null==n.source||null==n.target)throw"Edge source and/or target is null!";if(-1!=n.source.edges.indexOf(n)||-1!=n.target.edges.indexOf(n))throw"Edge already in source and/or target incidency list!";return n.source.edges.push(n),n.target.edges.push(n),n},a.prototype.remove=function(e){if(e instanceof r){var t=e;if(t.getGraphManager()!=this)throw"Graph not in this graph mgr";if(t!=this.rootGraph&&(null==t.parent||t.parent.graphManager!=this))throw"Invalid parent node!";for(var n,a=[],o=(a=a.concat(t.getEdges())).length,s=0;s<o;s++)n=a[s],t.remove(n);var l,u=[];for(o=(u=u.concat(t.getNodes())).length,s=0;s<o;s++)l=u[s],t.remove(l);t==this.rootGraph&&this.setRootGraph(null);var c=this.graphs.indexOf(t);this.graphs.splice(c,1),t.parent=null}else if(e instanceof i){if(null==(n=e))throw"Edge is null!";if(!n.isInterGraph)throw"Not an inter-graph edge!";if(null==n.source||null==n.target)throw"Source and/or target is null!";if(-1==n.source.edges.indexOf(n)||-1==n.target.edges.indexOf(n))throw"Source and/or target doesn't know this edge!";if(c=n.source.edges.indexOf(n),n.source.edges.splice(c,1),c=n.target.edges.indexOf(n),n.target.edges.splice(c,1),null==n.source.owner||null==n.source.owner.getGraphManager())throw"Edge owner graph or owner graph manager is null!";if(-1==n.source.owner.getGraphManager().edges.indexOf(n))throw"Not in owner graph manager's edge list!";c=n.source.owner.getGraphManager().edges.indexOf(n),n.source.owner.getGraphManager().edges.splice(c,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(null==this.allNodes){for(var e=[],t=this.getGraphs(),n=t.length,r=0;r<n;r++)e=e.concat(t[r].getNodes());this.allNodes=e}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(null==this.allEdges){for(var e=[],t=this.getGraphs(),n=(t.length,0);n<t.length;n++)e=e.concat(t[n].getEdges());e=e.concat(this.edges),this.allEdges=e}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(e){if(null!=this.allNodesToApplyGravitation)throw"assert failed";this.allNodesToApplyGravitation=e},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(e){if(e.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=e,null==e.parent&&(e.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(e,t){if(null==e||null==t)throw"assert failed";if(e==t)return!0;for(var n,r=e.getOwner();null!=(n=r.getParent());){if(n==t)return!0;if(null==(r=n.getOwner()))break}for(r=t.getOwner();null!=(n=r.getParent());){if(n==e)return!0;if(null==(r=n.getOwner()))break}return!1},a.prototype.calcLowestCommonAncestors=function(){for(var e,t,n,r,i,a=this.getAllEdges(),o=a.length,s=0;s<o;s++)if(t=(e=a[s]).source,n=e.target,e.lca=null,e.sourceInLca=t,e.targetInLca=n,t!=n){for(r=t.getOwner();null==e.lca;){for(e.targetInLca=n,i=n.getOwner();null==e.lca;){if(i==r){e.lca=i;break}if(i==this.rootGraph)break;if(null!=e.lca)throw"assert failed";e.targetInLca=i.getParent(),i=e.targetInLca.getOwner()}if(r==this.rootGraph)break;null==e.lca&&(e.sourceInLca=r.getParent(),r=e.sourceInLca.getOwner())}if(null==e.lca)throw"assert failed"}else e.lca=t.getOwner()},a.prototype.calcLowestCommonAncestor=function(e,t){if(e==t)return e.getOwner();for(var n=e.getOwner();null!=n;){for(var r=t.getOwner();null!=r;){if(r==n)return r;r=r.getParent().getOwner()}n=n.getParent().getOwner()}return n},a.prototype.calcInclusionTreeDepths=function(e,t){var n;null==e&&null==t&&(e=this.rootGraph,t=1);for(var r=e.getNodes(),i=r.length,a=0;a<i;a++)(n=r[a]).inclusionTreeDepth=t,null!=n.child&&this.calcInclusionTreeDepths(n.child,t+1)},a.prototype.includesInvalidEdge=function(){for(var e,t=this.edges.length,n=0;n<t;n++)if(e=this.edges[n],this.isOneAncestorOfOther(e.source,e.target))return!0;return!1},e.exports=a},function(e,t,n){"use strict";var r=n(0);function i(){}for(var a in r)i[a]=r[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=3*i.MAX_NODE_DISPLACEMENT_INCREMENTAL,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,e.exports=i},function(e,t,n){"use strict";var r=n(12);function i(){}i.calcSeparationAmount=function(e,t,n,r){if(!e.intersects(t))throw"assert failed";var i=new Array(2);this.decideDirectionsForOverlappingNodes(e,t,i),n[0]=Math.min(e.getRight(),t.getRight())-Math.max(e.x,t.x),n[1]=Math.min(e.getBottom(),t.getBottom())-Math.max(e.y,t.y),e.getX()<=t.getX()&&e.getRight()>=t.getRight()?n[0]+=Math.min(t.getX()-e.getX(),e.getRight()-t.getRight()):t.getX()<=e.getX()&&t.getRight()>=e.getRight()&&(n[0]+=Math.min(e.getX()-t.getX(),t.getRight()-e.getRight())),e.getY()<=t.getY()&&e.getBottom()>=t.getBottom()?n[1]+=Math.min(t.getY()-e.getY(),e.getBottom()-t.getBottom()):t.getY()<=e.getY()&&t.getBottom()>=e.getBottom()&&(n[1]+=Math.min(e.getY()-t.getY(),t.getBottom()-e.getBottom()));var a=Math.abs((t.getCenterY()-e.getCenterY())/(t.getCenterX()-e.getCenterX()));t.getCenterY()===e.getCenterY()&&t.getCenterX()===e.getCenterX()&&(a=1);var o=a*n[0],s=n[1]/a;n[0]<s?s=n[0]:o=n[1],n[0]=-1*i[0]*(s/2+r),n[1]=-1*i[1]*(o/2+r)},i.decideDirectionsForOverlappingNodes=function(e,t,n){e.getCenterX()<t.getCenterX()?n[0]=-1:n[0]=1,e.getCenterY()<t.getCenterY()?n[1]=-1:n[1]=1},i.getIntersection2=function(e,t,n){var r=e.getCenterX(),i=e.getCenterY(),a=t.getCenterX(),o=t.getCenterY();if(e.intersects(t))return n[0]=r,n[1]=i,n[2]=a,n[3]=o,!0;var s=e.getX(),l=e.getY(),u=e.getRight(),c=e.getX(),h=e.getBottom(),d=e.getRight(),p=e.getWidthHalf(),g=e.getHeightHalf(),f=t.getX(),v=t.getY(),y=t.getRight(),m=t.getX(),b=t.getBottom(),x=t.getRight(),w=t.getWidthHalf(),E=t.getHeightHalf(),_=!1,T=!1;if(r===a){if(i>o)return n[0]=r,n[1]=l,n[2]=a,n[3]=b,!1;if(i<o)return n[0]=r,n[1]=h,n[2]=a,n[3]=v,!1}else if(i===o){if(r>a)return n[0]=s,n[1]=i,n[2]=y,n[3]=o,!1;if(r<a)return n[0]=u,n[1]=i,n[2]=f,n[3]=o,!1}else{var D=e.height/e.width,C=t.height/t.width,N=(o-i)/(a-r),A=void 0,L=void 0,k=void 0,S=void 0,I=void 0,M=void 0;if(-D===N?r>a?(n[0]=c,n[1]=h,_=!0):(n[0]=u,n[1]=l,_=!0):D===N&&(r>a?(n[0]=s,n[1]=l,_=!0):(n[0]=d,n[1]=h,_=!0)),-C===N?a>r?(n[2]=m,n[3]=b,T=!0):(n[2]=y,n[3]=v,T=!0):C===N&&(a>r?(n[2]=f,n[3]=v,T=!0):(n[2]=x,n[3]=b,T=!0)),_&&T)return!1;if(r>a?i>o?(A=this.getCardinalDirection(D,N,4),L=this.getCardinalDirection(C,N,2)):(A=this.getCardinalDirection(-D,N,3),L=this.getCardinalDirection(-C,N,1)):i>o?(A=this.getCardinalDirection(-D,N,1),L=this.getCardinalDirection(-C,N,3)):(A=this.getCardinalDirection(D,N,2),L=this.getCardinalDirection(C,N,4)),!_)switch(A){case 1:S=l,k=r+-g/N,n[0]=k,n[1]=S;break;case 2:k=d,S=i+p*N,n[0]=k,n[1]=S;break;case 3:S=h,k=r+g/N,n[0]=k,n[1]=S;break;case 4:k=c,S=i+-p*N,n[0]=k,n[1]=S}if(!T)switch(L){case 1:M=v,I=a+-E/N,n[2]=I,n[3]=M;break;case 2:I=x,M=o+w*N,n[2]=I,n[3]=M;break;case 3:M=b,I=a+E/N,n[2]=I,n[3]=M;break;case 4:I=m,M=o+-w*N,n[2]=I,n[3]=M}}return!1},i.getCardinalDirection=function(e,t,n){return e>t?n:1+n%4},i.getIntersection=function(e,t,n,i){if(null==i)return this.getIntersection2(e,t,n);var a,o,s,l,u,c,h,d=e.x,p=e.y,g=t.x,f=t.y,v=n.x,y=n.y,m=i.x,b=i.y;return 0==(h=(a=f-p)*(l=v-m)-(o=b-y)*(s=d-g))?null:new r((s*(c=m*y-v*b)-l*(u=g*p-d*f))/h,(o*u-a*c)/h)},i.angleOfVector=function(e,t,n,r){var i=void 0;return e!==n?(i=Math.atan((r-t)/(n-e)),n<e?i+=Math.PI:r<t&&(i+=this.TWO_PI)):i=r<t?this.ONE_AND_HALF_PI:this.HALF_PI,i},i.doIntersect=function(e,t,n,r){var i=e.x,a=e.y,o=t.x,s=t.y,l=n.x,u=n.y,c=r.x,h=r.y,d=(o-i)*(h-u)-(c-l)*(s-a);if(0===d)return!1;var p=((h-u)*(c-i)+(l-c)*(h-a))/d,g=((a-s)*(c-i)+(o-i)*(h-a))/d;return 0<p&&p<1&&0<g&&g<1},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,e.exports=i},function(e,t,n){"use strict";function r(){}r.sign=function(e){return e>0?1:e<0?-1:0},r.floor=function(e){return e<0?Math.ceil(e):Math.floor(e)},r.ceil=function(e){return e<0?Math.floor(e):Math.ceil(e)},e.exports=r},function(e,t,n){"use strict";function r(){}r.MAX_VALUE=2147483647,r.MIN_VALUE=-2147483648,e.exports=r},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(e){return{value:e,next:null,prev:null}},a=function(e,t,n,r){return null!==e?e.next=t:r.head=t,null!==n?n.prev=t:r.tail=t,t.prev=e,t.next=n,r.length++,t},o=function(e,t){var n=e.prev,r=e.next;return null!==n?n.next=r:t.head=r,null!==r?r.prev=n:t.tail=n,e.prev=e.next=null,t.length--,e},s=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.length=0,this.head=null,this.tail=null,null!=t&&t.forEach((function(e){return n.push(e)}))}return r(e,[{key:"size",value:function(){return this.length}},{key:"insertBefore",value:function(e,t){return a(t.prev,i(e),t,this)}},{key:"insertAfter",value:function(e,t){return a(t,i(e),t.next,this)}},{key:"insertNodeBefore",value:function(e,t){return a(t.prev,e,t,this)}},{key:"insertNodeAfter",value:function(e,t){return a(t,e,t.next,this)}},{key:"push",value:function(e){return a(this.tail,i(e),null,this)}},{key:"unshift",value:function(e){return a(null,i(e),this.head,this)}},{key:"remove",value:function(e){return o(e,this)}},{key:"pop",value:function(){return o(this.tail,this).value}},{key:"popNode",value:function(){return o(this.tail,this)}},{key:"shift",value:function(){return o(this.head,this).value}},{key:"shiftNode",value:function(){return o(this.head,this)}},{key:"get_object_at",value:function(e){if(e<=this.length()){for(var t=1,n=this.head;t<e;)n=n.next,t++;return n.value}}},{key:"set_object_at",value:function(e,t){if(e<=this.length()){for(var n=1,r=this.head;n<e;)r=r.next,n++;r.value=t}}}]),e}();e.exports=s},function(e,t,n){"use strict";function r(e,t,n){this.x=null,this.y=null,null==e&&null==t&&null==n?(this.x=0,this.y=0):"number"==typeof e&&"number"==typeof t&&null==n?(this.x=e,this.y=t):"Point"==e.constructor.name&&null==t&&null==n&&(n=e,this.x=n.x,this.y=n.y)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.getLocation=function(){return new r(this.x,this.y)},r.prototype.setLocation=function(e,t,n){"Point"==e.constructor.name&&null==t&&null==n?(n=e,this.setLocation(n.x,n.y)):"number"==typeof e&&"number"==typeof t&&null==n&&(parseInt(e)==e&&parseInt(t)==t?this.move(e,t):(this.x=Math.floor(e+.5),this.y=Math.floor(t+.5)))},r.prototype.move=function(e,t){this.x=e,this.y=t},r.prototype.translate=function(e,t){this.x+=e,this.y+=t},r.prototype.equals=function(e){if("Point"==e.constructor.name){var t=e;return this.x==t.x&&this.y==t.y}return this==e},r.prototype.toString=function(){return(new r).constructor.name+"[x="+this.x+",y="+this.y+"]"},e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){this.x=0,this.y=0,this.width=0,this.height=0,null!=e&&null!=t&&null!=n&&null!=r&&(this.x=e,this.y=t,this.width=n,this.height=r)}r.prototype.getX=function(){return this.x},r.prototype.setX=function(e){this.x=e},r.prototype.getY=function(){return this.y},r.prototype.setY=function(e){this.y=e},r.prototype.getWidth=function(){return this.width},r.prototype.setWidth=function(e){this.width=e},r.prototype.getHeight=function(){return this.height},r.prototype.setHeight=function(e){this.height=e},r.prototype.getRight=function(){return this.x+this.width},r.prototype.getBottom=function(){return this.y+this.height},r.prototype.intersects=function(e){return!(this.getRight()<e.x||this.getBottom()<e.y||e.getRight()<this.x||e.getBottom()<this.y)},r.prototype.getCenterX=function(){return this.x+this.width/2},r.prototype.getMinX=function(){return this.getX()},r.prototype.getMaxX=function(){return this.getX()+this.width},r.prototype.getCenterY=function(){return this.y+this.height/2},r.prototype.getMinY=function(){return this.getY()},r.prototype.getMaxY=function(){return this.getY()+this.height},r.prototype.getWidthHalf=function(){return this.width/2},r.prototype.getHeightHalf=function(){return this.height/2},e.exports=r},function(e,t,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function i(){}i.lastID=0,i.createID=function(e){return i.isPrimitive(e)?e:(null!=e.uniqueID||(e.uniqueID=i.getString(),i.lastID++),e.uniqueID)},i.getString=function(e){return null==e&&(e=i.lastID),"Object#"+e},i.isPrimitive=function(e){var t=void 0===e?"undefined":r(e);return null==e||"object"!=t&&"function"!=t},e.exports=i},function(e,t,n){"use strict";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i=n(0),a=n(6),o=n(3),s=n(1),l=n(5),u=n(4),c=n(17),h=n(27);function d(e){h.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,null!=e&&(this.isRemoteUse=e)}d.RANDOM_SEED=1,d.prototype=Object.create(h.prototype),d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},d.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},d.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},d.prototype.newGraphManager=function(){var e=new a(this);return this.graphManager=e,e},d.prototype.newGraph=function(e){return new l(null,this.graphManager,e)},d.prototype.newNode=function(e){return new o(this.graphManager,e)},d.prototype.newEdge=function(e){return new s(null,null,e)},d.prototype.checkLayoutSuccess=function(){return null==this.graphManager.getRoot()||0==this.graphManager.getRoot().getNodes().length||this.graphManager.includesInvalidEdge()},d.prototype.runLayout=function(){var e;return this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters(),e=!this.checkLayoutSuccess()&&this.layout(),"during"!==i.ANIMATE&&(e&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,e)},d.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},d.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var e=this.graphManager.getAllEdges(),t=0;t<e.length;t++)e[t];var n=this.graphManager.getRoot().getNodes();for(t=0;t<n.length;t++)n[t];this.update(this.graphManager.getRoot())}},d.prototype.update=function(e){if(null==e)this.update2();else if(e instanceof o){var t=e;if(null!=t.getChild())for(var n=t.getChild().getNodes(),r=0;r<n.length;r++)update(n[r]);null!=t.vGraphObject&&t.vGraphObject.update(t)}else if(e instanceof s){var i=e;null!=i.vGraphObject&&i.vGraphObject.update(i)}else if(e instanceof l){var a=e;null!=a.vGraphObject&&a.vGraphObject.update(a)}},d.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},d.prototype.transform=function(e){if(null==e)this.transform(new u(0,0));else{var t=new c,n=this.graphManager.getRoot().updateLeftTop();if(null!=n){t.setWorldOrgX(e.x),t.setWorldOrgY(e.y),t.setDeviceOrgX(n.x),t.setDeviceOrgY(n.y);for(var r=this.getAllNodes(),i=0;i<r.length;i++)r[i].transform(t)}}},d.prototype.positionNodesRandomly=function(e){if(null==e)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var t,n,r=e.getNodes(),i=0;i<r.length;i++)null==(n=(t=r[i]).getChild())||0==n.getNodes().length?t.scatter():(this.positionNodesRandomly(n),t.updateBounds())},d.prototype.getFlatForest=function(){for(var e=[],t=!0,n=this.graphManager.getRoot().getNodes(),i=!0,a=0;a<n.length;a++)null!=n[a].getChild()&&(i=!1);if(!i)return e;var o=new Set,s=[],l=new Map,u=[];for(u=u.concat(n);u.length>0&&t;){for(s.push(u[0]);s.length>0&&t;){var c=s[0];s.splice(0,1),o.add(c);var h=c.getEdges();for(a=0;a<h.length;a++){var d=h[a].getOtherEnd(c);if(l.get(c)!=d){if(o.has(d)){t=!1;break}s.push(d),l.set(d,c)}}}if(t){var p=[].concat(r(o));for(e.push(p),a=0;a<p.length;a++){var g=p[a],f=u.indexOf(g);f>-1&&u.splice(f,1)}o=new Set,l=new Map}else e=[]}return e},d.prototype.createDummyNodesForBendpoints=function(e){for(var t=[],n=e.source,r=this.graphManager.calcLowestCommonAncestor(e.source,e.target),i=0;i<e.bendpoints.length;i++){var a=this.newNode(null);a.setRect(new Point(0,0),new Dimension(1,1)),r.add(a);var o=this.newEdge(null);this.graphManager.add(o,n,a),t.add(a),n=a}return o=this.newEdge(null),this.graphManager.add(o,n,e.target),this.edgeToDummyNodes.set(e,t),e.isInterGraph()?this.graphManager.remove(e):r.remove(e),t},d.prototype.createBendpointsFromDummyNodes=function(){var e=[];e=e.concat(this.graphManager.getAllEdges()),e=[].concat(r(this.edgeToDummyNodes.keys())).concat(e);for(var t=0;t<e.length;t++){var n=e[t];if(n.bendpoints.length>0){for(var i=this.edgeToDummyNodes.get(n),a=0;a<i.length;a++){var o=i[a],s=new u(o.getCenterX(),o.getCenterY()),l=n.bendpoints.get(a);l.x=s.x,l.y=s.y,o.getOwner().remove(o)}this.graphManager.add(n,n.source,n.target)}}},d.transform=function(e,t,n,r){if(null!=n&&null!=r){var i=t;return e<=50?i-=(t-t/n)/50*(50-e):i+=(t*r-t)/50*(e-50),i}var a,o;return e<=50?(a=9*t/500,o=t/10):(a=9*t/50,o=-8*t),a*e+o},d.findCenterOfTree=function(e){var t=[];t=t.concat(e);var n=[],r=new Map,i=!1,a=null;1!=t.length&&2!=t.length||(i=!0,a=t[0]);for(var o=0;o<t.length;o++){var s=(c=t[o]).getNeighborsList().size;r.set(c,c.getNeighborsList().size),1==s&&n.push(c)}var l=[];for(l=l.concat(n);!i;){var u=[];for(u=u.concat(l),l=[],o=0;o<t.length;o++){var c=t[o],h=t.indexOf(c);h>=0&&t.splice(h,1),c.getNeighborsList().forEach((function(e){if(n.indexOf(e)<0){var t=r.get(e)-1;1==t&&l.push(e),r.set(e,t)}}))}n=n.concat(l),1!=t.length&&2!=t.length||(i=!0,a=t[0])}return a},d.prototype.setGraphManager=function(e){this.graphManager=e},e.exports=d},function(e,t,n){"use strict";function r(){}r.seed=1,r.x=0,r.nextDouble=function(){return r.x=1e4*Math.sin(r.seed++),r.x-Math.floor(r.x)},e.exports=r},function(e,t,n){"use strict";var r=n(4);function i(e,t){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(e){this.lworldOrgX=e},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(e){this.lworldOrgY=e},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(e){this.lworldExtX=e},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(e){this.lworldExtY=e},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(e){this.ldeviceOrgX=e},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(e){this.ldeviceOrgY=e},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(e){this.ldeviceExtX=e},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(e){this.ldeviceExtY=e},i.prototype.transformX=function(e){var t=0,n=this.lworldExtX;return 0!=n&&(t=this.ldeviceOrgX+(e-this.lworldOrgX)*this.ldeviceExtX/n),t},i.prototype.transformY=function(e){var t=0,n=this.lworldExtY;return 0!=n&&(t=this.ldeviceOrgY+(e-this.lworldOrgY)*this.ldeviceExtY/n),t},i.prototype.inverseTransformX=function(e){var t=0,n=this.ldeviceExtX;return 0!=n&&(t=this.lworldOrgX+(e-this.ldeviceOrgX)*this.lworldExtX/n),t},i.prototype.inverseTransformY=function(e){var t=0,n=this.ldeviceExtY;return 0!=n&&(t=this.lworldOrgY+(e-this.ldeviceOrgY)*this.lworldExtY/n),t},i.prototype.inverseTransformPoint=function(e){return new r(this.inverseTransformX(e.x),this.inverseTransformY(e.y))},e.exports=i},function(e,t,n){"use strict";var r=n(15),i=n(7),a=n(0),o=n(8),s=n(9);function l(){r.call(this),this.useSmartIdealEdgeLengthCalculation=i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.idealEdgeLength=i.DEFAULT_EDGE_LENGTH,this.springConstant=i.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=i.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=i.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=i.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=i.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*i.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=i.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=i.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=i.MAX_ITERATIONS}for(var u in l.prototype=Object.create(r.prototype),r)l[u]=r[u];l.prototype.initParameters=function(){r.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},l.prototype.calcIdealEdgeLengths=function(){for(var e,t,n,r,o,s,l=this.getGraphManager().getAllEdges(),u=0;u<l.length;u++)(e=l[u]).idealLength=this.idealEdgeLength,e.isInterGraph&&(n=e.getSource(),r=e.getTarget(),o=e.getSourceInLca().getEstimatedSize(),s=e.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(e.idealLength+=o+s-2*a.SIMPLE_NODE_SIZE),t=e.getLca().getInclusionTreeDepth(),e.idealLength+=i.DEFAULT_EDGE_LENGTH*i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(n.getInclusionTreeDepth()+r.getInclusionTreeDepth()-2*t))},l.prototype.initSpringEmbedder=function(){var e=this.getAllNodes().length;this.incremental?(e>i.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*i.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(e-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-i.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT_INCREMENTAL):(e>i.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(i.COOLING_ADAPTATION_FACTOR,1-(e-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*(1-i.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(5*this.getAllNodes().length,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},l.prototype.calcSpringForces=function(){for(var e,t=this.getAllEdges(),n=0;n<t.length;n++)e=t[n],this.calcSpringForce(e,e.idealLength)},l.prototype.calcRepulsionForces=function(){var e,t,n,r,a,o=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],s=arguments.length>1&&void 0!==arguments[1]&&arguments[1],l=this.getAllNodes();if(this.useFRGridVariant)for(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&o&&this.updateGrid(),a=new Set,e=0;e<l.length;e++)n=l[e],this.calculateRepulsionForceOfANode(n,a,o,s),a.add(n);else for(e=0;e<l.length;e++)for(n=l[e],t=e+1;t<l.length;t++)r=l[t],n.getOwner()==r.getOwner()&&this.calcRepulsionForce(n,r)},l.prototype.calcGravitationalForces=function(){for(var e,t=this.getAllNodesToApplyGravitation(),n=0;n<t.length;n++)e=t[n],this.calcGravitationalForce(e)},l.prototype.moveNodes=function(){for(var e=this.getAllNodes(),t=0;t<e.length;t++)e[t].move()},l.prototype.calcSpringForce=function(e,t){var n,r,i,a,o=e.getSource(),s=e.getTarget();if(this.uniformLeafNodeSizes&&null==o.getChild()&&null==s.getChild())e.updateLengthSimple();else if(e.updateLength(),e.isOverlapingSourceAndTarget)return;0!=(n=e.getLength())&&(i=(r=this.springConstant*(n-t))*(e.lengthX/n),a=r*(e.lengthY/n),o.springForceX+=i,o.springForceY+=a,s.springForceX-=i,s.springForceY-=a)},l.prototype.calcRepulsionForce=function(e,t){var n,r,a,l,u,c,h,d=e.getRect(),p=t.getRect(),g=new Array(2),f=new Array(4);if(d.intersects(p)){o.calcSeparationAmount(d,p,g,i.DEFAULT_EDGE_LENGTH/2),c=2*g[0],h=2*g[1];var v=e.noOfChildren*t.noOfChildren/(e.noOfChildren+t.noOfChildren);e.repulsionForceX-=v*c,e.repulsionForceY-=v*h,t.repulsionForceX+=v*c,t.repulsionForceY+=v*h}else this.uniformLeafNodeSizes&&null==e.getChild()&&null==t.getChild()?(n=p.getCenterX()-d.getCenterX(),r=p.getCenterY()-d.getCenterY()):(o.getIntersection(d,p,f),n=f[2]-f[0],r=f[3]-f[1]),Math.abs(n)<i.MIN_REPULSION_DIST&&(n=s.sign(n)*i.MIN_REPULSION_DIST),Math.abs(r)<i.MIN_REPULSION_DIST&&(r=s.sign(r)*i.MIN_REPULSION_DIST),a=n*n+r*r,l=Math.sqrt(a),c=(u=this.repulsionConstant*e.noOfChildren*t.noOfChildren/a)*n/l,h=u*r/l,e.repulsionForceX-=c,e.repulsionForceY-=h,t.repulsionForceX+=c,t.repulsionForceY+=h},l.prototype.calcGravitationalForce=function(e){var t,n,r,i,a,o,s,l;n=((t=e.getOwner()).getRight()+t.getLeft())/2,r=(t.getTop()+t.getBottom())/2,i=e.getCenterX()-n,a=e.getCenterY()-r,o=Math.abs(i)+e.getWidth()/2,s=Math.abs(a)+e.getHeight()/2,e.getOwner()==this.graphManager.getRoot()?(o>(l=t.getEstimatedSize()*this.gravityRangeFactor)||s>l)&&(e.gravitationForceX=-this.gravityConstant*i,e.gravitationForceY=-this.gravityConstant*a):(o>(l=t.getEstimatedSize()*this.compoundGravityRangeFactor)||s>l)&&(e.gravitationForceX=-this.gravityConstant*i*this.compoundGravityConstant,e.gravitationForceY=-this.gravityConstant*a*this.compoundGravityConstant)},l.prototype.isConverged=function(){var e,t=!1;return this.totalIterations>this.maxIterations/3&&(t=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),e=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,e||t},l.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},l.prototype.calcNoOfChildrenForAllNodes=function(){for(var e,t=this.graphManager.getAllNodes(),n=0;n<t.length;n++)(e=t[n]).noOfChildren=e.getNoOfChildren()},l.prototype.calcGrid=function(e){var t,n;t=parseInt(Math.ceil((e.getRight()-e.getLeft())/this.repulsionRange)),n=parseInt(Math.ceil((e.getBottom()-e.getTop())/this.repulsionRange));for(var r=new Array(t),i=0;i<t;i++)r[i]=new Array(n);for(i=0;i<t;i++)for(var a=0;a<n;a++)r[i][a]=new Array;return r},l.prototype.addNodeToGrid=function(e,t,n){var r,i,a,o;r=parseInt(Math.floor((e.getRect().x-t)/this.repulsionRange)),i=parseInt(Math.floor((e.getRect().width+e.getRect().x-t)/this.repulsionRange)),a=parseInt(Math.floor((e.getRect().y-n)/this.repulsionRange)),o=parseInt(Math.floor((e.getRect().height+e.getRect().y-n)/this.repulsionRange));for(var s=r;s<=i;s++)for(var l=a;l<=o;l++)this.grid[s][l].push(e),e.setGridCoordinates(r,i,a,o)},l.prototype.updateGrid=function(){var e,t,n=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),e=0;e<n.length;e++)t=n[e],this.addNodeToGrid(t,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},l.prototype.calculateRepulsionForceOfANode=function(e,t,n,r){if(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&n||r){var a,o=new Set;e.surrounding=new Array;for(var s=this.grid,l=e.startX-1;l<e.finishX+2;l++)for(var u=e.startY-1;u<e.finishY+2;u++)if(!(l<0||u<0||l>=s.length||u>=s[0].length))for(var c=0;c<s[l][u].length;c++)if(a=s[l][u][c],e.getOwner()==a.getOwner()&&e!=a&&!t.has(a)&&!o.has(a)){var h=Math.abs(e.getCenterX()-a.getCenterX())-(e.getWidth()/2+a.getWidth()/2),d=Math.abs(e.getCenterY()-a.getCenterY())-(e.getHeight()/2+a.getHeight()/2);h<=this.repulsionRange&&d<=this.repulsionRange&&o.add(a)}e.surrounding=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(o))}for(l=0;l<e.surrounding.length;l++)this.calcRepulsionForce(e,e.surrounding[l])},l.prototype.calcRepulsionRange=function(){return 0},e.exports=l},function(e,t,n){"use strict";var r=n(1),i=n(7);function a(e,t,n){r.call(this,e,t,n),this.idealLength=i.DEFAULT_EDGE_LENGTH}for(var o in a.prototype=Object.create(r.prototype),r)a[o]=r[o];e.exports=a},function(e,t,n){"use strict";var r=n(3);function i(e,t,n,i){r.call(this,e,t,n,i),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];i.prototype.setGridCoordinates=function(e,t,n,r){this.startX=e,this.finishX=t,this.startY=n,this.finishY=r},e.exports=i},function(e,t,n){"use strict";function r(e,t){this.width=0,this.height=0,null!==e&&null!==t&&(this.height=t,this.width=e)}r.prototype.getWidth=function(){return this.width},r.prototype.setWidth=function(e){this.width=e},r.prototype.getHeight=function(){return this.height},r.prototype.setHeight=function(e){this.height=e},e.exports=r},function(e,t,n){"use strict";var r=n(14);function i(){this.map={},this.keys=[]}i.prototype.put=function(e,t){var n=r.createID(e);this.contains(n)||(this.map[n]=t,this.keys.push(e))},i.prototype.contains=function(e){return r.createID(e),null!=this.map[e]},i.prototype.get=function(e){var t=r.createID(e);return this.map[t]},i.prototype.keySet=function(){return this.keys},e.exports=i},function(e,t,n){"use strict";var r=n(14);function i(){this.set={}}i.prototype.add=function(e){var t=r.createID(e);this.contains(t)||(this.set[t]=e)},i.prototype.remove=function(e){delete this.set[r.createID(e)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(e){return this.set[r.createID(e)]==e},i.prototype.isEmpty=function(){return 0===this.size()},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(e){for(var t=Object.keys(this.set),n=t.length,r=0;r<n;r++)e.push(this.set[t[r]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(e){for(var t=e.length,n=0;n<t;n++){var r=e[n];this.add(r)}},e.exports=i},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(11),a=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),null===n&&void 0===n||(this.compareFunction=this._defaultCompareFunction);var r=void 0;r=t instanceof i?t.size():t.length,this._quicksort(t,0,r-1)}return r(e,[{key:"_quicksort",value:function(e,t,n){if(t<n){var r=this._partition(e,t,n);this._quicksort(e,t,r),this._quicksort(e,r+1,n)}}},{key:"_partition",value:function(e,t,n){for(var r=this._get(e,t),i=t,a=n;;){for(;this.compareFunction(r,this._get(e,a));)a--;for(;this.compareFunction(this._get(e,i),r);)i++;if(!(i<a))return a;this._swap(e,i,a),i++,a--}}},{key:"_get",value:function(e,t){return e instanceof i?e.get_object_at(t):e[t]}},{key:"_set",value:function(e,t,n){e instanceof i?e.set_object_at(t,n):e[t]=n}},{key:"_swap",value:function(e,t,n){var r=this._get(e,t);this._set(e,t,this._get(e,n)),this._set(e,n,r)}},{key:"_defaultCompareFunction",value:function(e,t){return t>e}}]),e}();e.exports=a},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.sequence1=t,this.sequence2=n,this.match_score=r,this.mismatch_penalty=i,this.gap_penalty=a,this.iMax=t.length+1,this.jMax=n.length+1,this.grid=new Array(this.iMax);for(var o=0;o<this.iMax;o++){this.grid[o]=new Array(this.jMax);for(var s=0;s<this.jMax;s++)this.grid[o][s]=0}this.tracebackGrid=new Array(this.iMax);for(var l=0;l<this.iMax;l++){this.tracebackGrid[l]=new Array(this.jMax);for(var u=0;u<this.jMax;u++)this.tracebackGrid[l][u]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return r(e,[{key:"getScore",value:function(){return this.score}},{key:"getAlignments",value:function(){return this.alignments}},{key:"computeGrids",value:function(){for(var e=1;e<this.jMax;e++)this.grid[0][e]=this.grid[0][e-1]+this.gap_penalty,this.tracebackGrid[0][e]=[!1,!1,!0];for(var t=1;t<this.iMax;t++)this.grid[t][0]=this.grid[t-1][0]+this.gap_penalty,this.tracebackGrid[t][0]=[!1,!0,!1];for(var n=1;n<this.iMax;n++)for(var r=1;r<this.jMax;r++){var i=[this.sequence1[n-1]===this.sequence2[r-1]?this.grid[n-1][r-1]+this.match_score:this.grid[n-1][r-1]+this.mismatch_penalty,this.grid[n-1][r]+this.gap_penalty,this.grid[n][r-1]+this.gap_penalty],a=this.arrayAllMaxIndexes(i);this.grid[n][r]=i[a[0]],this.tracebackGrid[n][r]=[a.includes(0),a.includes(1),a.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]}},{key:"alignmentTraceback",value:function(){var e=[];for(e.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});e[0];){var t=e[0],n=this.tracebackGrid[t.pos[0]][t.pos[1]];n[0]&&e.push({pos:[t.pos[0]-1,t.pos[1]-1],seq1:this.sequence1[t.pos[0]-1]+t.seq1,seq2:this.sequence2[t.pos[1]-1]+t.seq2}),n[1]&&e.push({pos:[t.pos[0]-1,t.pos[1]],seq1:this.sequence1[t.pos[0]-1]+t.seq1,seq2:"-"+t.seq2}),n[2]&&e.push({pos:[t.pos[0],t.pos[1]-1],seq1:"-"+t.seq1,seq2:this.sequence2[t.pos[1]-1]+t.seq2}),0===t.pos[0]&&0===t.pos[1]&&this.alignments.push({sequence1:t.seq1,sequence2:t.seq2}),e.shift()}return this.alignments}},{key:"getAllIndexes",value:function(e,t){for(var n=[],r=-1;-1!==(r=e.indexOf(t,r+1));)n.push(r);return n}},{key:"arrayAllMaxIndexes",value:function(e){return this.getAllIndexes(e,Math.max.apply(null,e))}}]),e}();e.exports=i},function(e,t,n){"use strict";var r=function(){};r.FDLayout=n(18),r.FDLayoutConstants=n(7),r.FDLayoutEdge=n(19),r.FDLayoutNode=n(20),r.DimensionD=n(21),r.HashMap=n(22),r.HashSet=n(23),r.IGeometry=n(8),r.IMath=n(9),r.Integer=n(10),r.Point=n(12),r.PointD=n(4),r.RandomSeed=n(16),r.RectangleD=n(13),r.Transform=n(17),r.UniqueIDGeneretor=n(14),r.Quicksort=n(24),r.LinkedList=n(11),r.LGraphObject=n(2),r.LGraph=n(5),r.LEdge=n(1),r.LGraphManager=n(6),r.LNode=n(3),r.Layout=n(15),r.LayoutConstants=n(0),r.NeedlemanWunsch=n(25),e.exports=r},function(e,t,n){"use strict";function r(){this.listeners=[]}var i=r.prototype;i.addListener=function(e,t){this.listeners.push({event:e,callback:t})},i.removeListener=function(e,t){for(var n=this.listeners.length;n>=0;n--){var r=this.listeners[n];r.event===e&&r.callback===t&&this.listeners.splice(n,1)}},i.emit=function(e,t){for(var n=0;n<this.listeners.length;n++){var r=this.listeners[n];e===r.event&&r.callback(t)}},e.exports=r}])},e.exports=t()},21549:(e,t,n)=>{var r=n(22032),i=n(63862),a=n(66721),o=n(12749),s=n(35749);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=i,l.prototype.get=a,l.prototype.has=o,l.prototype.set=s,e.exports=l},80079:(e,t,n)=>{var r=n(63702),i=n(70080),a=n(24739),o=n(48655),s=n(31175);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=i,l.prototype.get=a,l.prototype.has=o,l.prototype.set=s,e.exports=l},68223:(e,t,n)=>{var r=n(56110)(n(9325),"Map");e.exports=r},53661:(e,t,n)=>{var r=n(63040),i=n(17670),a=n(90289),o=n(4509),s=n(72949);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=i,l.prototype.get=a,l.prototype.has=o,l.prototype.set=s,e.exports=l},51873:(e,t,n)=>{var r=n(9325).Symbol;e.exports=r},34932:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}},16547:(e,t,n)=>{var r=n(43360),i=n(75288),a=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var o=e[t];a.call(e,t)&&i(o,n)&&(void 0!==n||t in e)||r(e,t,n)}},26025:(e,t,n)=>{var r=n(75288);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},43360:(e,t,n)=>{var r=n(93243);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},47422:(e,t,n)=>{var r=n(31769),i=n(77797);e.exports=function(e,t){for(var n=0,a=(t=r(t,e)).length;null!=e&&n<a;)e=e[i(t[n++])];return n&&n==a?e:void 0}},72552:(e,t,n)=>{var r=n(51873),i=n(659),a=n(59350),o=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":o&&o in Object(e)?i(e):a(e)}},45083:(e,t,n)=>{var r=n(1882),i=n(87296),a=n(23805),o=n(47473),s=/^\[object .+?Constructor\]$/,l=Function.prototype,u=Object.prototype,c=l.toString,h=u.hasOwnProperty,d=RegExp("^"+c.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||i(e))&&(r(e)?d:s).test(o(e))}},73170:(e,t,n)=>{var r=n(16547),i=n(31769),a=n(30361),o=n(23805),s=n(77797);e.exports=function(e,t,n,l){if(!o(e))return e;for(var u=-1,c=(t=i(t,e)).length,h=c-1,d=e;null!=d&&++u<c;){var p=s(t[u]),g=n;if("__proto__"===p||"constructor"===p||"prototype"===p)return e;if(u!=h){var f=d[p];void 0===(g=l?l(f,p,d):void 0)&&(g=o(f)?f:a(t[u+1])?[]:{})}r(d,p,g),d=d[p]}return e}},77556:(e,t,n)=>{var r=n(51873),i=n(34932),a=n(56449),o=n(44394),s=r?r.prototype:void 0,l=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(a(t))return i(t,e)+"";if(o(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-Infinity?"-0":n}},54128:(e,t,n)=>{var r=n(31800),i=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(i,""):e}},31769:(e,t,n)=>{var r=n(56449),i=n(28586),a=n(61802),o=n(13222);e.exports=function(e,t){return r(e)?e:i(e,t)?[e]:a(o(e))}},23007:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},55481:(e,t,n)=>{var r=n(9325)["__core-js_shared__"];e.exports=r},93243:(e,t,n)=>{var r=n(56110),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=i},34840:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},12651:(e,t,n)=>{var r=n(74218);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},56110:(e,t,n)=>{var r=n(45083),i=n(10392);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},659:(e,t,n)=>{var r=n(51873),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=a.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(l){}var i=o.call(e);return r&&(t?e[s]=n:delete e[s]),i}},10392:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},22032:(e,t,n)=>{var r=n(81042);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},63862:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},66721:(e,t,n)=>{var r=n(81042),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(t,e)?t[e]:void 0}},12749:(e,t,n)=>{var r=n(81042),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:i.call(t,e)}},35749:(e,t,n)=>{var r=n(81042);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},30361:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e<n}},28586:(e,t,n)=>{var r=n(56449),i=n(44394),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||(o.test(e)||!a.test(e)||null!=t&&e in Object(t))}},74218:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},87296:(e,t,n)=>{var r,i=n(55481),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!a&&a in e}},63702:e=>{e.exports=function(){this.__data__=[],this.size=0}},70080:(e,t,n)=>{var r=n(26025),i=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():i.call(t,n,1),--this.size,!0)}},24739:(e,t,n)=>{var r=n(26025);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},48655:(e,t,n)=>{var r=n(26025);e.exports=function(e){return r(this.__data__,e)>-1}},31175:(e,t,n)=>{var r=n(26025);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},63040:(e,t,n)=>{var r=n(21549),i=n(80079),a=n(68223);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},17670:(e,t,n)=>{var r=n(12651);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},90289:(e,t,n)=>{var r=n(12651);e.exports=function(e){return r(this,e).get(e)}},4509:(e,t,n)=>{var r=n(12651);e.exports=function(e){return r(this,e).has(e)}},72949:(e,t,n)=>{var r=n(12651);e.exports=function(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}},62224:(e,t,n)=>{var r=n(50104);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},81042:(e,t,n)=>{var r=n(56110)(Object,"create");e.exports=r},59350:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},9325:(e,t,n)=>{var r=n(34840),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();e.exports=a},61802:(e,t,n)=>{var r=n(62224),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,o=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(i,(function(e,n,r,i){t.push(r?i.replace(a,"$1"):n||e)})),t}));e.exports=o},77797:(e,t,n)=>{var r=n(44394);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t}},47473:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(n){}try{return e+""}catch(n){}}return""}},31800:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},38221:(e,t,n)=>{var r=n(23805),i=n(10124),a=n(99374),o=Math.max,s=Math.min;e.exports=function(e,t,n){var l,u,c,h,d,p,g=0,f=!1,v=!1,y=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function m(t){var n=l,r=u;return l=u=void 0,g=t,h=e.apply(r,n)}function b(e){var n=e-p;return void 0===p||n>=t||n<0||v&&e-g>=c}function x(){var e=i();if(b(e))return w(e);d=setTimeout(x,function(e){var n=t-(e-p);return v?s(n,c-(e-g)):n}(e))}function w(e){return d=void 0,y&&l?m(e):(l=u=void 0,h)}function E(){var e=i(),n=b(e);if(l=arguments,u=this,p=e,n){if(void 0===d)return function(e){return g=e,d=setTimeout(x,t),f?m(e):h}(p);if(v)return clearTimeout(d),d=setTimeout(x,t),m(p)}return void 0===d&&(d=setTimeout(x,t)),h}return t=a(t)||0,r(n)&&(f=!!n.leading,c=(v="maxWait"in n)?o(a(n.maxWait)||0,t):c,y="trailing"in n?!!n.trailing:y),E.cancel=function(){void 0!==d&&clearTimeout(d),g=0,l=p=u=d=void 0},E.flush=function(){return void 0===d?h:w(i())},E}},75288:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},58156:(e,t,n)=>{var r=n(47422);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},56449:e=>{var t=Array.isArray;e.exports=t},1882:(e,t,n)=>{var r=n(72552),i=n(23805);e.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},23805:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},40346:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},44394:(e,t,n)=>{var r=n(72552),i=n(40346);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==r(e)}},50104:(e,t,n)=>{var r=n(53661);function i(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(i.Cache||r),n}i.Cache=r,e.exports=i},10124:(e,t,n)=>{var r=n(9325);e.exports=function(){return r.Date.now()}},63560:(e,t,n)=>{var r=n(73170);e.exports=function(e,t,n){return null==e?e:r(e,t,n)}},99374:(e,t,n)=>{var r=n(54128),i=n(23805),a=n(44394),o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(a(e))return NaN;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=s.test(e);return n||l.test(e)?u(e.slice(2),n?2:8):o.test(e)?NaN:+e}},42072:(e,t,n)=>{var r=n(34932),i=n(23007),a=n(56449),o=n(44394),s=n(61802),l=n(77797),u=n(13222);e.exports=function(e){return a(e)?r(e,l):o(e)?[e]:i(s(u(e)))}},13222:(e,t,n)=>{var r=n(77556);e.exports=function(e){return null==e?"":r(e)}},99309:(e,t,n)=>{"use strict";n.d(t,{diagram:()=>w});var r=n(99702),i=n(44726),a=n(43457),o=n(26312),s=n(8337),l=n(3219),u=n(78041),c=n(75263),h=(n(74353),n(16750),n(42838),function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,4],n=[1,13],r=[1,12],i=[1,15],a=[1,16],o=[1,20],s=[1,19],l=[6,7,8],u=[1,26],c=[1,24],h=[1,25],d=[6,7,11],p=[1,6,13,15,16,19,22],g=[1,33],f=[1,34],v=[1,6,7,11,13,15,16,19,22],y={trace:function(){},yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:function(e,t,n,r,i,a,o){var s=a.length-1;switch(i){case 6:case 7:return r;case 8:r.getLogger().trace("Stop NL ");break;case 9:r.getLogger().trace("Stop EOF ");break;case 11:r.getLogger().trace("Stop NL2 ");break;case 12:r.getLogger().trace("Stop EOF2 ");break;case 15:r.getLogger().info("Node: ",a[s].id),r.addNode(a[s-1].length,a[s].id,a[s].descr,a[s].type);break;case 16:r.getLogger().trace("Icon: ",a[s]),r.decorateNode({icon:a[s]});break;case 17:case 21:r.decorateNode({class:a[s]});break;case 18:r.getLogger().trace("SPACELIST");break;case 19:r.getLogger().trace("Node: ",a[s].id),r.addNode(0,a[s].id,a[s].descr,a[s].type);break;case 20:r.decorateNode({icon:a[s]});break;case 25:r.getLogger().trace("node found ..",a[s-2]),this.$={id:a[s-1],descr:a[s-1],type:r.getType(a[s-2],a[s])};break;case 26:this.$={id:a[s],descr:a[s],type:r.nodeType.DEFAULT};break;case 27:r.getLogger().trace("node found ..",a[s-3]),this.$={id:a[s-3],descr:a[s-1],type:r.getType(a[s-2],a[s])}}},table:[{3:1,4:2,5:3,6:[1,5],8:t},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:t},{6:n,7:[1,10],9:9,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(l,[2,3]),{1:[2,2]},e(l,[2,4]),e(l,[2,5]),{1:[2,6],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:n,9:22,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:u,7:c,10:23,11:h},e(d,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:o,22:s}),e(d,[2,18]),e(d,[2,19]),e(d,[2,20]),e(d,[2,21]),e(d,[2,23]),e(d,[2,24]),e(d,[2,26],{19:[1,30]}),{20:[1,31]},{6:u,7:c,10:32,11:h},{1:[2,7],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(p,[2,14],{7:g,11:f}),e(v,[2,8]),e(v,[2,9]),e(v,[2,10]),e(d,[2,15]),e(d,[2,16]),e(d,[2,17]),{20:[1,35]},{21:[1,36]},e(p,[2,13],{7:g,11:f}),e(v,[2,11]),e(v,[2,12]),{21:[1,37]},e(d,[2,25]),e(d,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",l=0,u=0,c=a.slice.call(arguments,1),h=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);h.setInput(e,d.yy),d.yy.lexer=h,d.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var g=h.yylloc;a.push(g);var f=h.options&&h.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,y,m,b,x,w,E,_,T,D={};;){if(y=n[n.length-1],this.defaultActions[y]?m=this.defaultActions[y]:(null==v&&(T=void 0,"number"!=typeof(T=r.pop()||h.lex()||1)&&(T instanceof Array&&(T=(r=T).pop()),T=t.symbols_[T]||T),v=T),m=o[y]&&o[y][v]),void 0===m||!m.length||!m[0]){var C="";for(x in _=[],o[y])this.terminals_[x]&&x>2&&_.push("'"+this.terminals_[x]+"'");C=h.showPosition?"Parse error on line "+(l+1)+":\n"+h.showPosition()+"\nExpecting "+_.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==v?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(C,{text:h.match,token:this.terminals_[v]||v,line:h.yylineno,loc:g,expected:_})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+y+", token: "+v);switch(m[0]){case 1:n.push(v),i.push(h.yytext),a.push(h.yylloc),n.push(m[1]),v=null,u=h.yyleng,s=h.yytext,l=h.yylineno,g=h.yylloc;break;case 2:if(w=this.productions_[m[1]][1],D.$=i[i.length-w],D._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},f&&(D._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(b=this.performAction.apply(D,[s,u,l,d.yy,m[1],i,a].concat(c))))return b;w&&(n=n.slice(0,-1*w*2),i=i.slice(0,-1*w),a=a.slice(0,-1*w)),n.push(this.productions_[m[1]][0]),i.push(D.$),a.push(D._$),E=o[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},m={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!t||n[0].length>t[0].length)){if(t=n,r=a,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[a])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return e.getLogger().trace("Found comment",t.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:case 23:case 26:this.popState();break;case 5:e.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return e.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:e.getLogger().trace("end icon"),this.popState();break;case 10:return e.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return e.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return e.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return e.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:case 15:case 16:case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 24:e.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return e.getLogger().trace("description:",t.yytext),"NODE_DESCR";case 27:return this.popState(),e.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),e.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),e.getLogger().trace("node end ...",t.yytext),"NODE_DEND";case 30:case 33:case 34:return this.popState(),e.getLogger().trace("node end (("),"NODE_DEND";case 31:case 32:return this.popState(),e.getLogger().trace("node end (-"),"NODE_DEND";case 35:case 36:return e.getLogger().trace("Long description:",t.yytext),20}},rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};function b(){this.yy={}}return y.lexer=m,b.prototype=y,y.Parser=b,new b}());h.parser=h;const d=h;let p=[],g=0,f={};const v={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},y={clear:()=>{p=[],g=0,f={}},addNode:(e,t,n,i)=>{var a,o;r.l.info("addNode",e,t,n,i);const s=(0,r.c)();let l=(null==(a=s.mindmap)?void 0:a.padding)??r.B.mindmap.padding;switch(i){case v.ROUNDED_RECT:case v.RECT:case v.HEXAGON:l*=2}const u={id:g++,nodeId:(0,r.d)(t,s),level:e,descr:(0,r.d)(n,s),type:i,children:[],width:(null==(o=s.mindmap)?void 0:o.maxNodeWidth)??r.B.mindmap.maxNodeWidth,padding:l},c=function(e){for(let t=p.length-1;t>=0;t--)if(p[t].level<e)return p[t];return null}(e);if(c)c.children.push(u),p.push(u);else{if(0!==p.length)throw new Error('There can be only one root. No parent could be found for ("'+u.descr+'")');p.push(u)}},getMindmap:()=>p.length>0?p[0]:null,nodeType:v,getType:(e,t)=>{switch(r.l.debug("In get type",e,t),e){case"[":return v.RECT;case"(":return")"===t?v.ROUNDED_RECT:v.CLOUD;case"((":return v.CIRCLE;case")":return v.CLOUD;case"))":return v.BANG;case"{{":return v.HEXAGON;default:return v.DEFAULT}},setElementForId:(e,t)=>{f[e]=t},decorateNode:e=>{if(!e)return;const t=(0,r.c)(),n=p[p.length-1];e.icon&&(n.icon=(0,r.d)(e.icon,t)),e.class&&(n.class=(0,r.d)(e.class,t))},type2Str:e=>{switch(e){case v.DEFAULT:return"no-border";case v.RECT:return"rect";case v.ROUNDED_RECT:return"rounded-rect";case v.CIRCLE:return"circle";case v.CLOUD:return"cloud";case v.BANG:return"bang";case v.HEXAGON:return"hexgon";default:return"no-border"}},getLogger:()=>r.l,getElementById:e=>f[e]};function m(e,t,n,i,a){!function(e,t,n,i,a){const o=a.htmlLabels,l=i%11,u=t.append("g");n.section=l;let c="section-"+l;l<0&&(c+=" section-root"),u.attr("class",(n.class?n.class+" ":"")+"mindmap-node "+c);const h=u.append("g"),d=u.append("g"),p=n.descr.replace(/(<br\/*>)/g,"\n");(0,s.a)(d,p,{useHtmlLabels:o,width:n.width,classes:"mindmap-node-label"}),o||d.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const g=d.node().getBBox(),[f]=(0,r.D)(a.fontSize);if(n.height=g.height+1.1*f*.5+n.padding,n.width=g.width+2*n.padding,n.icon)if(n.type===e.nodeType.CIRCLE)n.height+=50,n.width+=50,u.append("foreignObject").attr("height","50px").attr("width",n.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+l+" "+n.icon),d.attr("transform","translate("+n.width/2+", "+(n.height/2-1.5*n.padding)+")");else{n.width+=50;const e=n.height;n.height=Math.max(e,60);const t=Math.abs(n.height-e);u.append("foreignObject").attr("width","60px").attr("height",n.height).attr("style","text-align: center;margin-top:"+t/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+l+" "+n.icon),d.attr("transform","translate("+(25+n.width/2)+", "+(t/2+n.padding/2)+")")}else if(o){const e=(n.width-g.width)/2,t=(n.height-g.height)/2;d.attr("transform","translate("+e+", "+t+")")}else{const e=n.width/2,t=n.padding/2;d.attr("transform","translate("+e+", "+t+")")}switch(n.type){case e.nodeType.DEFAULT:!function(e,t,n,r){t.append("path").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("d",`M0 ${n.height-5} v${10-n.height} q0,-5 5,-5 h${n.width-10} q5,0 5,5 v${n.height-5} H0 Z`),t.append("line").attr("class","node-line-"+r).attr("x1",0).attr("y1",n.height).attr("x2",n.width).attr("y2",n.height)}(e,h,n,l);break;case e.nodeType.ROUNDED_RECT:!function(e,t,n){t.append("rect").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("height",n.height).attr("rx",n.padding).attr("ry",n.padding).attr("width",n.width)}(e,h,n);break;case e.nodeType.RECT:!function(e,t,n){t.append("rect").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("height",n.height).attr("width",n.width)}(e,h,n);break;case e.nodeType.CIRCLE:h.attr("transform","translate("+n.width/2+", "+ +n.height/2+")"),function(e,t,n){t.append("circle").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("r",n.width/2)}(e,h,n);break;case e.nodeType.CLOUD:!function(e,t,n){const r=n.width,i=n.height,a=.15*r,o=.25*r,s=.35*r,l=.2*r;t.append("path").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${.25*r},${-1*r*.1}\n a${s},${s} 1 0,1 ${.4*r},${-1*r*.1}\n a${o},${o} 1 0,1 ${.35*r},${1*r*.2}\n\n a${a},${a} 1 0,1 ${.15*r},${1*i*.35}\n a${l},${l} 1 0,1 ${-1*r*.15},${1*i*.65}\n\n a${o},${a} 1 0,1 ${-1*r*.25},${.15*r}\n a${s},${s} 1 0,1 ${-1*r*.5},0\n a${a},${a} 1 0,1 ${-1*r*.25},${-1*r*.15}\n\n a${a},${a} 1 0,1 ${-1*r*.1},${-1*i*.35}\n a${l},${l} 1 0,1 ${.1*r},${-1*i*.65}\n\n H0 V0 Z`)}(e,h,n);break;case e.nodeType.BANG:!function(e,t,n){const r=n.width,i=n.height,a=.15*r;t.append("path").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${.25*r},${-1*i*.1}\n a${a},${a} 1 0,0 ${.25*r},0\n a${a},${a} 1 0,0 ${.25*r},0\n a${a},${a} 1 0,0 ${.25*r},${1*i*.1}\n\n a${a},${a} 1 0,0 ${.15*r},${1*i*.33}\n a${.8*a},${.8*a} 1 0,0 0,${1*i*.34}\n a${a},${a} 1 0,0 ${-1*r*.15},${1*i*.33}\n\n a${a},${a} 1 0,0 ${-1*r*.25},${.15*i}\n a${a},${a} 1 0,0 ${-1*r*.25},0\n a${a},${a} 1 0,0 ${-1*r*.25},0\n a${a},${a} 1 0,0 ${-1*r*.25},${-1*i*.15}\n\n a${a},${a} 1 0,0 ${-1*r*.1},${-1*i*.33}\n a${.8*a},${.8*a} 1 0,0 0,${-1*i*.34}\n a${a},${a} 1 0,0 ${.1*r},${-1*i*.33}\n\n H0 V0 Z`)}(e,h,n);break;case e.nodeType.HEXAGON:!function(e,t,n){const r=n.height,i=r/4,a=n.width-n.padding+2*i;!function(e,t,n,r,i){e.insert("polygon",":first-child").attr("points",r.map((function(e){return e.x+","+e.y})).join(" ")).attr("transform","translate("+(i.width-t)/2+", "+n+")")}(t,a,r,[{x:i,y:0},{x:a-i,y:0},{x:a,y:-r/2},{x:a-i,y:-r},{x:i,y:-r},{x:0,y:-r/2}],n)}(0,h,n)}e.setElementForId(n.id,u),n.height}(e,t,n,i,a),n.children&&n.children.forEach(((n,r)=>{m(e,t,n,i<0?r:i,a)}))}function b(e,t,n,r){t.add({group:"nodes",data:{id:e.id.toString(),labelText:e.descr,height:e.height,width:e.width,level:r,nodeId:e.id,padding:e.padding,type:e.type},position:{x:e.x,y:e.y}}),e.children&&e.children.forEach((i=>{b(i,t,n,r+1),t.add({group:"edges",data:{id:`${e.id}_${i.id}`,source:e.id,target:i.id,depth:r,section:i.section}})}))}function x(e,t){return new Promise((n=>{const a=(0,o.Ltv)("body").append("div").attr("id","cy").attr("style","display:none"),s=i({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});a.remove(),b(e,s,t,0),s.nodes().forEach((function(e){e.layoutDimensions=()=>{const t=e.data();return{w:t.width,h:t.height}}})),s.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),s.ready((e=>{r.l.info("Ready",e),n(s)}))}))}i.use(a);const w={db:y,renderer:{draw:async(e,t,n,i)=>{var a,o;r.l.debug("Rendering mindmap diagram\n"+e);const s=i.db,l=s.getMindmap();if(!l)return;const u=(0,r.c)();u.htmlLabels=!1;const c=(0,r.A)(t),h=c.append("g");h.attr("class","mindmap-edges");const d=c.append("g");d.attr("class","mindmap-nodes"),m(s,d,l,-1,u);const p=await x(l,u);!function(e,t){t.edges().map(((t,n)=>{const i=t.data();if(t[0]._private.bodyBounds){const a=t[0]._private.rscratch;r.l.trace("Edge: ",n,i),e.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}}))}(h,p),function(e,t){t.nodes().map(((t,n)=>{const i=t.data();i.x=t.position().x,i.y=t.position().y,function(e,t){const n=e.getElementById(t.id),r=t.x||0,i=t.y||0;n.attr("transform","translate("+r+","+i+")")}(e,i);const a=e.getElementById(i.nodeId);r.l.info("Id:",n,"Position: (",t.position().x,", ",t.position().y,")",i),a.attr("transform",`translate(${t.position().x-i.width/2}, ${t.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)}))}(s,p),(0,r.o)(void 0,c,(null==(a=u.mindmap)?void 0:a.padding)??r.B.mindmap.padding,(null==(o=u.mindmap)?void 0:o.useMaxWidth)??r.B.mindmap.useMaxWidth)}},parser:d,styles:e=>`\n .edge {\n stroke-width: 3;\n }\n ${(e=>{let t="";for(let n=0;n<e.THEME_COLOR_LIMIT;n++)e["lineColor"+n]=e["lineColor"+n]||e["cScaleInv"+n],(0,l.A)(e["lineColor"+n])?e["lineColor"+n]=(0,u.A)(e["lineColor"+n],20):e["lineColor"+n]=(0,c.A)(e["lineColor"+n],20);for(let n=0;n<e.THEME_COLOR_LIMIT;n++){const r=""+(17-3*n);t+=`\n .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} polygon, .section-${n-1} path {\n fill: ${e["cScale"+n]};\n }\n .section-${n-1} text {\n fill: ${e["cScaleLabel"+n]};\n }\n .node-icon-${n-1} {\n font-size: 40px;\n color: ${e["cScaleLabel"+n]};\n }\n .section-edge-${n-1}{\n stroke: ${e["cScale"+n]};\n }\n .edge-depth-${n-1}{\n stroke-width: ${r};\n }\n .section-${n-1} line {\n stroke: ${e["cScaleInv"+n]} ;\n stroke-width: 3;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `}return t})(e)}\n .section-root rect, .section-root path, .section-root circle, .section-root polygon {\n fill: ${e.git0};\n }\n .section-root text {\n fill: ${e.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .mindmap-node-label {\n dy: 1em;\n alignment-baseline: middle;\n text-anchor: middle;\n dominant-baseline: middle;\n text-align: center;\n }\n`}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9309.04c2ac1e.js.LICENSE.txt b/pr-preview/pr-1594/assets/js/9309.04c2ac1e.js.LICENSE.txt deleted file mode 100644 index a9f6f12447..0000000000 --- a/pr-preview/pr-1594/assets/js/9309.04c2ac1e.js.LICENSE.txt +++ /dev/null @@ -1,9 +0,0 @@ -/*! -Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable -Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) -Licensed under The MIT License (http://opensource.org/licenses/MIT) -*/ - -/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ - -/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ diff --git a/pr-preview/pr-1594/assets/js/943.e1f9edb9.js b/pr-preview/pr-1594/assets/js/943.e1f9edb9.js deleted file mode 100644 index 29880c7c6f..0000000000 --- a/pr-preview/pr-1594/assets/js/943.e1f9edb9.js +++ /dev/null @@ -1,1820 +0,0 @@ -"use strict"; -exports.id = 943; -exports.ids = [943]; -exports.modules = { - -/***/ 74943: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74353); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16750); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99418); - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 3], $V1 = [1, 6], $V2 = [1, 4], $V3 = [1, 5], $V4 = [2, 5], $V5 = [1, 12], $V6 = [5, 7, 13, 19, 21, 23, 24, 26, 28, 31, 37, 40, 47], $V7 = [7, 13, 19, 21, 23, 24, 26, 28, 31, 37, 40], $V8 = [7, 12, 13, 19, 21, 23, 24, 26, 28, 31, 37, 40], $V9 = [7, 13, 47], $Va = [1, 42], $Vb = [1, 41], $Vc = [7, 13, 29, 32, 35, 38, 47], $Vd = [1, 55], $Ve = [1, 56], $Vf = [1, 57], $Vg = [7, 13, 32, 35, 42, 47]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "eol": 4, "GG": 5, "document": 6, "EOF": 7, ":": 8, "DIR": 9, "options": 10, "body": 11, "OPT": 12, "NL": 13, "line": 14, "statement": 15, "commitStatement": 16, "mergeStatement": 17, "cherryPickStatement": 18, "acc_title": 19, "acc_title_value": 20, "acc_descr": 21, "acc_descr_value": 22, "acc_descr_multiline_value": 23, "section": 24, "branchStatement": 25, "CHECKOUT": 26, "ref": 27, "BRANCH": 28, "ORDER": 29, "NUM": 30, "CHERRY_PICK": 31, "COMMIT_ID": 32, "STR": 33, "PARENT_COMMIT": 34, "COMMIT_TAG": 35, "EMPTYSTR": 36, "MERGE": 37, "COMMIT_TYPE": 38, "commitType": 39, "COMMIT": 40, "commit_arg": 41, "COMMIT_MSG": 42, "NORMAL": 43, "REVERSE": 44, "HIGHLIGHT": 45, "ID": 46, ";": 47, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 5: "GG", 7: "EOF", 8: ":", 9: "DIR", 12: "OPT", 13: "NL", 19: "acc_title", 20: "acc_title_value", 21: "acc_descr", 22: "acc_descr_value", 23: "acc_descr_multiline_value", 24: "section", 26: "CHECKOUT", 28: "BRANCH", 29: "ORDER", 30: "NUM", 31: "CHERRY_PICK", 32: "COMMIT_ID", 33: "STR", 34: "PARENT_COMMIT", 35: "COMMIT_TAG", 36: "EMPTYSTR", 37: "MERGE", 38: "COMMIT_TYPE", 40: "COMMIT", 42: "COMMIT_MSG", 43: "NORMAL", 44: "REVERSE", 45: "HIGHLIGHT", 46: "ID", 47: ";" }, - productions_: [0, [3, 2], [3, 3], [3, 4], [3, 5], [6, 0], [6, 2], [10, 2], [10, 1], [11, 0], [11, 2], [14, 2], [14, 1], [15, 1], [15, 1], [15, 1], [15, 2], [15, 2], [15, 1], [15, 1], [15, 1], [15, 2], [25, 2], [25, 4], [18, 3], [18, 5], [18, 5], [18, 7], [18, 7], [18, 5], [18, 5], [18, 5], [18, 7], [18, 7], [18, 7], [18, 7], [17, 2], [17, 4], [17, 4], [17, 4], [17, 6], [17, 6], [17, 6], [17, 6], [17, 6], [17, 6], [17, 8], [17, 8], [17, 8], [17, 8], [17, 8], [17, 8], [16, 2], [16, 3], [16, 3], [16, 5], [16, 5], [16, 3], [16, 5], [16, 5], [16, 5], [16, 5], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 3], [16, 5], [16, 5], [16, 5], [16, 5], [16, 5], [16, 5], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [41, 0], [41, 1], [39, 1], [39, 1], [39, 1], [27, 1], [27, 1], [4, 1], [4, 1], [4, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 2: - return $$[$0]; - case 3: - return $$[$0 - 1]; - case 4: - yy.setDirection($$[$0 - 3]); - return $$[$0 - 1]; - case 6: - yy.setOptions($$[$0 - 1]); - this.$ = $$[$0]; - break; - case 7: - $$[$0 - 1] += $$[$0]; - this.$ = $$[$0 - 1]; - break; - case 9: - this.$ = []; - break; - case 10: - $$[$0 - 1].push($$[$0]); - this.$ = $$[$0 - 1]; - break; - case 11: - this.$ = $$[$0 - 1]; - break; - case 16: - this.$ = $$[$0].trim(); - yy.setAccTitle(this.$); - break; - case 17: - case 18: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 19: - yy.addSection($$[$0].substr(8)); - this.$ = $$[$0].substr(8); - break; - case 21: - yy.checkout($$[$0]); - break; - case 22: - yy.branch($$[$0]); - break; - case 23: - yy.branch($$[$0 - 2], $$[$0]); - break; - case 24: - yy.cherryPick($$[$0], "", void 0); - break; - case 25: - yy.cherryPick($$[$0 - 2], "", void 0, $$[$0]); - break; - case 26: - yy.cherryPick($$[$0 - 2], "", $$[$0]); - break; - case 27: - yy.cherryPick($$[$0 - 4], "", $$[$0], $$[$0 - 2]); - break; - case 28: - yy.cherryPick($$[$0 - 4], "", $$[$0 - 2], $$[$0]); - break; - case 29: - yy.cherryPick($$[$0], "", $$[$0 - 2]); - break; - case 30: - yy.cherryPick($$[$0], "", ""); - break; - case 31: - yy.cherryPick($$[$0 - 2], "", ""); - break; - case 32: - yy.cherryPick($$[$0 - 4], "", "", $$[$0 - 2]); - break; - case 33: - yy.cherryPick($$[$0 - 4], "", "", $$[$0]); - break; - case 34: - yy.cherryPick($$[$0 - 2], "", $$[$0 - 4], $$[$0]); - break; - case 35: - yy.cherryPick($$[$0 - 2], "", "", $$[$0]); - break; - case 36: - yy.merge($$[$0], "", "", ""); - break; - case 37: - yy.merge($$[$0 - 2], $$[$0], "", ""); - break; - case 38: - yy.merge($$[$0 - 2], "", $$[$0], ""); - break; - case 39: - yy.merge($$[$0 - 2], "", "", $$[$0]); - break; - case 40: - yy.merge($$[$0 - 4], $$[$0], "", $$[$0 - 2]); - break; - case 41: - yy.merge($$[$0 - 4], "", $$[$0], $$[$0 - 2]); - break; - case 42: - yy.merge($$[$0 - 4], "", $$[$0 - 2], $$[$0]); - break; - case 43: - yy.merge($$[$0 - 4], $$[$0 - 2], $$[$0], ""); - break; - case 44: - yy.merge($$[$0 - 4], $$[$0 - 2], "", $$[$0]); - break; - case 45: - yy.merge($$[$0 - 4], $$[$0], $$[$0 - 2], ""); - break; - case 46: - yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]); - break; - case 47: - yy.merge($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]); - break; - case 48: - yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]); - break; - case 49: - yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]); - break; - case 50: - yy.merge($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]); - break; - case 51: - yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]); - break; - case 52: - yy.commit($$[$0]); - break; - case 53: - yy.commit("", "", yy.commitType.NORMAL, $$[$0]); - break; - case 54: - yy.commit("", "", $$[$0], ""); - break; - case 55: - yy.commit("", "", $$[$0], $$[$0 - 2]); - break; - case 56: - yy.commit("", "", $$[$0 - 2], $$[$0]); - break; - case 57: - yy.commit("", $$[$0], yy.commitType.NORMAL, ""); - break; - case 58: - yy.commit("", $$[$0 - 2], yy.commitType.NORMAL, $$[$0]); - break; - case 59: - yy.commit("", $$[$0], yy.commitType.NORMAL, $$[$0 - 2]); - break; - case 60: - yy.commit("", $$[$0 - 2], $$[$0], ""); - break; - case 61: - yy.commit("", $$[$0], $$[$0 - 2], ""); - break; - case 62: - yy.commit("", $$[$0 - 4], $$[$0 - 2], $$[$0]); - break; - case 63: - yy.commit("", $$[$0 - 4], $$[$0], $$[$0 - 2]); - break; - case 64: - yy.commit("", $$[$0 - 2], $$[$0 - 4], $$[$0]); - break; - case 65: - yy.commit("", $$[$0], $$[$0 - 4], $$[$0 - 2]); - break; - case 66: - yy.commit("", $$[$0], $$[$0 - 2], $$[$0 - 4]); - break; - case 67: - yy.commit("", $$[$0 - 2], $$[$0], $$[$0 - 4]); - break; - case 68: - yy.commit($$[$0], "", yy.commitType.NORMAL, ""); - break; - case 69: - yy.commit($$[$0], "", yy.commitType.NORMAL, $$[$0 - 2]); - break; - case 70: - yy.commit($$[$0 - 2], "", yy.commitType.NORMAL, $$[$0]); - break; - case 71: - yy.commit($$[$0 - 2], "", $$[$0], ""); - break; - case 72: - yy.commit($$[$0], "", $$[$0 - 2], ""); - break; - case 73: - yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, ""); - break; - case 74: - yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, ""); - break; - case 75: - yy.commit($$[$0 - 4], "", $$[$0 - 2], $$[$0]); - break; - case 76: - yy.commit($$[$0 - 4], "", $$[$0], $$[$0 - 2]); - break; - case 77: - yy.commit($$[$0 - 2], "", $$[$0 - 4], $$[$0]); - break; - case 78: - yy.commit($$[$0], "", $$[$0 - 4], $$[$0 - 2]); - break; - case 79: - yy.commit($$[$0], "", $$[$0 - 2], $$[$0 - 4]); - break; - case 80: - yy.commit($$[$0 - 2], "", $$[$0], $$[$0 - 4]); - break; - case 81: - yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], ""); - break; - case 82: - yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], ""); - break; - case 83: - yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], ""); - break; - case 84: - yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], ""); - break; - case 85: - yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], ""); - break; - case 86: - yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], ""); - break; - case 87: - yy.commit($$[$0 - 4], $$[$0], yy.commitType.NORMAL, $$[$0 - 2]); - break; - case 88: - yy.commit($$[$0 - 4], $$[$0 - 2], yy.commitType.NORMAL, $$[$0]); - break; - case 89: - yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, $$[$0 - 4]); - break; - case 90: - yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, $$[$0 - 4]); - break; - case 91: - yy.commit($$[$0], $$[$0 - 4], yy.commitType.NORMAL, $$[$0 - 2]); - break; - case 92: - yy.commit($$[$0 - 2], $$[$0 - 4], yy.commitType.NORMAL, $$[$0]); - break; - case 93: - yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]); - break; - case 94: - yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]); - break; - case 95: - yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]); - break; - case 96: - yy.commit($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]); - break; - case 97: - yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]); - break; - case 98: - yy.commit($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]); - break; - case 99: - yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0 - 2], $$[$0]); - break; - case 100: - yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0], $$[$0 - 2]); - break; - case 101: - yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0 - 4], $$[$0]); - break; - case 102: - yy.commit($$[$0], $$[$0 - 6], $$[$0 - 4], $$[$0 - 2]); - break; - case 103: - yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0], $$[$0 - 4]); - break; - case 104: - yy.commit($$[$0], $$[$0 - 6], $$[$0 - 2], $$[$0 - 4]); - break; - case 105: - yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], $$[$0 - 6]); - break; - case 106: - yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], $$[$0 - 6]); - break; - case 107: - yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], $$[$0 - 6]); - break; - case 108: - yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], $$[$0 - 6]); - break; - case 109: - yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], $$[$0 - 6]); - break; - case 110: - yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 6]); - break; - case 111: - yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0 - 6], $$[$0]); - break; - case 112: - yy.commit($$[$0], $$[$0 - 4], $$[$0 - 6], $$[$0 - 2]); - break; - case 113: - yy.commit($$[$0 - 2], $$[$0], $$[$0 - 6], $$[$0 - 4]); - break; - case 114: - yy.commit($$[$0], $$[$0 - 2], $$[$0 - 6], $$[$0 - 4]); - break; - case 115: - yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0 - 6], $$[$0]); - break; - case 116: - yy.commit($$[$0 - 4], $$[$0], $$[$0 - 6], $$[$0 - 2]); - break; - case 117: - this.$ = ""; - break; - case 118: - this.$ = $$[$0]; - break; - case 119: - this.$ = yy.commitType.NORMAL; - break; - case 120: - this.$ = yy.commitType.REVERSE; - break; - case 121: - this.$ = yy.commitType.HIGHLIGHT; - break; - } - }, - table: [{ 3: 1, 4: 2, 5: $V0, 7: $V1, 13: $V2, 47: $V3 }, { 1: [3] }, { 3: 7, 4: 2, 5: $V0, 7: $V1, 13: $V2, 47: $V3 }, { 6: 8, 7: $V4, 8: [1, 9], 9: [1, 10], 10: 11, 13: $V5 }, o($V6, [2, 124]), o($V6, [2, 125]), o($V6, [2, 126]), { 1: [2, 1] }, { 7: [1, 13] }, { 6: 14, 7: $V4, 10: 11, 13: $V5 }, { 8: [1, 15] }, o($V7, [2, 9], { 11: 16, 12: [1, 17] }), o($V8, [2, 8]), { 1: [2, 2] }, { 7: [1, 18] }, { 6: 19, 7: $V4, 10: 11, 13: $V5 }, { 7: [2, 6], 13: [1, 22], 14: 20, 15: 21, 16: 23, 17: 24, 18: 25, 19: [1, 26], 21: [1, 27], 23: [1, 28], 24: [1, 29], 25: 30, 26: [1, 31], 28: [1, 35], 31: [1, 34], 37: [1, 33], 40: [1, 32] }, o($V8, [2, 7]), { 1: [2, 3] }, { 7: [1, 36] }, o($V7, [2, 10]), { 4: 37, 7: $V1, 13: $V2, 47: $V3 }, o($V7, [2, 12]), o($V9, [2, 13]), o($V9, [2, 14]), o($V9, [2, 15]), { 20: [1, 38] }, { 22: [1, 39] }, o($V9, [2, 18]), o($V9, [2, 19]), o($V9, [2, 20]), { 27: 40, 33: $Va, 46: $Vb }, o($V9, [2, 117], { 41: 43, 32: [1, 46], 33: [1, 48], 35: [1, 44], 38: [1, 45], 42: [1, 47] }), { 27: 49, 33: $Va, 46: $Vb }, { 32: [1, 50], 35: [1, 51] }, { 27: 52, 33: $Va, 46: $Vb }, { 1: [2, 4] }, o($V7, [2, 11]), o($V9, [2, 16]), o($V9, [2, 17]), o($V9, [2, 21]), o($Vc, [2, 122]), o($Vc, [2, 123]), o($V9, [2, 52]), { 33: [1, 53] }, { 39: 54, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 58] }, { 33: [1, 59] }, o($V9, [2, 118]), o($V9, [2, 36], { 32: [1, 60], 35: [1, 62], 38: [1, 61] }), { 33: [1, 63] }, { 33: [1, 64], 36: [1, 65] }, o($V9, [2, 22], { 29: [1, 66] }), o($V9, [2, 53], { 32: [1, 68], 38: [1, 67], 42: [1, 69] }), o($V9, [2, 54], { 32: [1, 71], 35: [1, 70], 42: [1, 72] }), o($Vg, [2, 119]), o($Vg, [2, 120]), o($Vg, [2, 121]), o($V9, [2, 57], { 35: [1, 73], 38: [1, 74], 42: [1, 75] }), o($V9, [2, 68], { 32: [1, 78], 35: [1, 76], 38: [1, 77] }), { 33: [1, 79] }, { 39: 80, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 81] }, o($V9, [2, 24], { 34: [1, 82], 35: [1, 83] }), { 32: [1, 84] }, { 32: [1, 85] }, { 30: [1, 86] }, { 39: 87, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 88] }, { 33: [1, 89] }, { 33: [1, 90] }, { 33: [1, 91] }, { 33: [1, 92] }, { 33: [1, 93] }, { 39: 94, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 95] }, { 33: [1, 96] }, { 39: 97, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 98] }, o($V9, [2, 37], { 35: [1, 100], 38: [1, 99] }), o($V9, [2, 38], { 32: [1, 102], 35: [1, 101] }), o($V9, [2, 39], { 32: [1, 103], 38: [1, 104] }), { 33: [1, 105] }, { 33: [1, 106], 36: [1, 107] }, { 33: [1, 108] }, { 33: [1, 109] }, o($V9, [2, 23]), o($V9, [2, 55], { 32: [1, 110], 42: [1, 111] }), o($V9, [2, 59], { 38: [1, 112], 42: [1, 113] }), o($V9, [2, 69], { 32: [1, 115], 38: [1, 114] }), o($V9, [2, 56], { 32: [1, 116], 42: [1, 117] }), o($V9, [2, 61], { 35: [1, 118], 42: [1, 119] }), o($V9, [2, 72], { 32: [1, 121], 35: [1, 120] }), o($V9, [2, 58], { 38: [1, 122], 42: [1, 123] }), o($V9, [2, 60], { 35: [1, 124], 42: [1, 125] }), o($V9, [2, 73], { 35: [1, 127], 38: [1, 126] }), o($V9, [2, 70], { 32: [1, 129], 38: [1, 128] }), o($V9, [2, 71], { 32: [1, 131], 35: [1, 130] }), o($V9, [2, 74], { 35: [1, 133], 38: [1, 132] }), { 39: 134, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 135] }, { 33: [1, 136] }, { 33: [1, 137] }, { 33: [1, 138] }, { 39: 139, 43: $Vd, 44: $Ve, 45: $Vf }, o($V9, [2, 25], { 35: [1, 140] }), o($V9, [2, 26], { 34: [1, 141] }), o($V9, [2, 31], { 34: [1, 142] }), o($V9, [2, 29], { 34: [1, 143] }), o($V9, [2, 30], { 34: [1, 144] }), { 33: [1, 145] }, { 33: [1, 146] }, { 39: 147, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 148] }, { 39: 149, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 150] }, { 33: [1, 151] }, { 33: [1, 152] }, { 33: [1, 153] }, { 33: [1, 154] }, { 33: [1, 155] }, { 33: [1, 156] }, { 39: 157, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 158] }, { 33: [1, 159] }, { 33: [1, 160] }, { 39: 161, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 162] }, { 39: 163, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 164] }, { 33: [1, 165] }, { 33: [1, 166] }, { 39: 167, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 168] }, o($V9, [2, 43], { 35: [1, 169] }), o($V9, [2, 44], { 38: [1, 170] }), o($V9, [2, 42], { 32: [1, 171] }), o($V9, [2, 45], { 35: [1, 172] }), o($V9, [2, 40], { 38: [1, 173] }), o($V9, [2, 41], { 32: [1, 174] }), { 33: [1, 175], 36: [1, 176] }, { 33: [1, 177] }, { 33: [1, 178] }, { 33: [1, 179] }, { 33: [1, 180] }, o($V9, [2, 66], { 42: [1, 181] }), o($V9, [2, 79], { 32: [1, 182] }), o($V9, [2, 67], { 42: [1, 183] }), o($V9, [2, 90], { 38: [1, 184] }), o($V9, [2, 80], { 32: [1, 185] }), o($V9, [2, 89], { 38: [1, 186] }), o($V9, [2, 65], { 42: [1, 187] }), o($V9, [2, 78], { 32: [1, 188] }), o($V9, [2, 64], { 42: [1, 189] }), o($V9, [2, 84], { 35: [1, 190] }), o($V9, [2, 77], { 32: [1, 191] }), o($V9, [2, 83], { 35: [1, 192] }), o($V9, [2, 63], { 42: [1, 193] }), o($V9, [2, 91], { 38: [1, 194] }), o($V9, [2, 62], { 42: [1, 195] }), o($V9, [2, 85], { 35: [1, 196] }), o($V9, [2, 86], { 35: [1, 197] }), o($V9, [2, 92], { 38: [1, 198] }), o($V9, [2, 76], { 32: [1, 199] }), o($V9, [2, 87], { 38: [1, 200] }), o($V9, [2, 75], { 32: [1, 201] }), o($V9, [2, 81], { 35: [1, 202] }), o($V9, [2, 82], { 35: [1, 203] }), o($V9, [2, 88], { 38: [1, 204] }), { 33: [1, 205] }, { 39: 206, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 207] }, { 33: [1, 208] }, { 39: 209, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 210] }, o($V9, [2, 27]), o($V9, [2, 32]), o($V9, [2, 28]), o($V9, [2, 33]), o($V9, [2, 34]), o($V9, [2, 35]), { 33: [1, 211] }, { 33: [1, 212] }, { 33: [1, 213] }, { 39: 214, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 215] }, { 39: 216, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 217] }, { 33: [1, 218] }, { 33: [1, 219] }, { 33: [1, 220] }, { 33: [1, 221] }, { 33: [1, 222] }, { 33: [1, 223] }, { 39: 224, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 225] }, { 33: [1, 226] }, { 33: [1, 227] }, { 39: 228, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 229] }, { 39: 230, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 231] }, { 33: [1, 232] }, { 33: [1, 233] }, { 39: 234, 43: $Vd, 44: $Ve, 45: $Vf }, o($V9, [2, 46]), o($V9, [2, 48]), o($V9, [2, 47]), o($V9, [2, 49]), o($V9, [2, 51]), o($V9, [2, 50]), o($V9, [2, 107]), o($V9, [2, 108]), o($V9, [2, 105]), o($V9, [2, 106]), o($V9, [2, 110]), o($V9, [2, 109]), o($V9, [2, 114]), o($V9, [2, 113]), o($V9, [2, 112]), o($V9, [2, 111]), o($V9, [2, 116]), o($V9, [2, 115]), o($V9, [2, 104]), o($V9, [2, 103]), o($V9, [2, 102]), o($V9, [2, 101]), o($V9, [2, 99]), o($V9, [2, 100]), o($V9, [2, 98]), o($V9, [2, 97]), o($V9, [2, 96]), o($V9, [2, 95]), o($V9, [2, 93]), o($V9, [2, 94])], - defaultActions: { 7: [2, 1], 13: [2, 2], 18: [2, 3], 36: [2, 4] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: { "case-insensitive": true }, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - this.begin("acc_title"); - return 19; - case 1: - this.popState(); - return "acc_title_value"; - case 2: - this.begin("acc_descr"); - return 21; - case 3: - this.popState(); - return "acc_descr_value"; - case 4: - this.begin("acc_descr_multiline"); - break; - case 5: - this.popState(); - break; - case 6: - return "acc_descr_multiline_value"; - case 7: - return 13; - case 8: - break; - case 9: - break; - case 10: - return 5; - case 11: - return 40; - case 12: - return 32; - case 13: - return 38; - case 14: - return 42; - case 15: - return 43; - case 16: - return 44; - case 17: - return 45; - case 18: - return 35; - case 19: - return 28; - case 20: - return 29; - case 21: - return 37; - case 22: - return 31; - case 23: - return 34; - case 24: - return 26; - case 25: - return 9; - case 26: - return 9; - case 27: - return 8; - case 28: - return "CARET"; - case 29: - this.begin("options"); - break; - case 30: - this.popState(); - break; - case 31: - return 12; - case 32: - return 36; - case 33: - this.begin("string"); - break; - case 34: - this.popState(); - break; - case 35: - return 33; - case 36: - return 30; - case 37: - return 46; - case 38: - return 7; - } - }, - rules: [/^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:(\r?\n)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:gitGraph\b)/i, /^(?:commit(?=\s|$))/i, /^(?:id:)/i, /^(?:type:)/i, /^(?:msg:)/i, /^(?:NORMAL\b)/i, /^(?:REVERSE\b)/i, /^(?:HIGHLIGHT\b)/i, /^(?:tag:)/i, /^(?:branch(?=\s|$))/i, /^(?:order:)/i, /^(?:merge(?=\s|$))/i, /^(?:cherry-pick(?=\s|$))/i, /^(?:parent:)/i, /^(?:checkout(?=\s|$))/i, /^(?:LR\b)/i, /^(?:TB\b)/i, /^(?::)/i, /^(?:\^)/i, /^(?:options\r?\n)/i, /^(?:[ \r\n\t]+end\b)/i, /^(?:[\s\S]+(?=[ \r\n\t]+end))/i, /^(?:["]["])/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[0-9]+(?=\s|$))/i, /^(?:\w([-\./\w]*[-\w])?)/i, /^(?:$)/i, /^(?:\s+)/i], - conditions: { "acc_descr_multiline": { "rules": [5, 6], "inclusive": false }, "acc_descr": { "rules": [3], "inclusive": false }, "acc_title": { "rules": [1], "inclusive": false }, "options": { "rules": [30, 31], "inclusive": false }, "string": { "rules": [34, 35], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 36, 37, 38, 39], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const gitGraphParser = parser; -let mainBranchName = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchName; -let mainBranchOrder = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchOrder; -let commits = {}; -let head = null; -let branchesConfig = {}; -branchesConfig[mainBranchName] = { name: mainBranchName, order: mainBranchOrder }; -let branches = {}; -branches[mainBranchName] = head; -let curBranch = mainBranchName; -let direction = "LR"; -let seq = 0; -function getId() { - return (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.y)({ length: 7 }); -} -function uniqBy(list, fn) { - const recordMap = /* @__PURE__ */ Object.create(null); - return list.reduce((out, item) => { - const key = fn(item); - if (!recordMap[key]) { - recordMap[key] = true; - out.push(item); - } - return out; - }, []); -} -const setDirection = function(dir2) { - direction = dir2; -}; -let options = {}; -const setOptions = function(rawOptString) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("options str", rawOptString); - rawOptString = rawOptString && rawOptString.trim(); - rawOptString = rawOptString || "{}"; - try { - options = JSON.parse(rawOptString); - } catch (e) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing gitGraph options", e.message); - } -}; -const getOptions = function() { - return options; -}; -const commit = function(msg, id, type, tag) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Entering commit:", msg, id, type, tag); - id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - msg = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(msg, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - tag = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(tag, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - const commit2 = { - id: id ? id : seq + "-" + getId(), - message: msg, - seq: seq++, - type: type ? type : commitType$1.NORMAL, - tag: tag ? tag : "", - parents: head == null ? [] : [head.id], - branch: curBranch - }; - head = commit2; - commits[commit2.id] = commit2; - branches[curBranch] = commit2.id; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in pushCommit " + commit2.id); -}; -const branch = function(name, order) { - name = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(name, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - if (branches[name] === void 0) { - branches[name] = head != null ? head.id : null; - branchesConfig[name] = { name, order: order ? parseInt(order, 10) : null }; - checkout(name); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in createBranch"); - } else { - let error = new Error( - 'Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ' + name + '")' - ); - error.hash = { - text: "branch " + name, - token: "branch " + name, - line: "1", - loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, - expected: ['"checkout ' + name + '"'] - }; - throw error; - } -}; -const merge = function(otherBranch, custom_id, override_type, custom_tag) { - otherBranch = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(otherBranch, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - custom_id = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(custom_id, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - const currentCommit = commits[branches[curBranch]]; - const otherCommit = commits[branches[otherBranch]]; - if (curBranch === otherBranch) { - let error = new Error('Incorrect usage of "merge". Cannot merge a branch to itself'); - error.hash = { - text: "merge " + otherBranch, - token: "merge " + otherBranch, - line: "1", - loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, - expected: ["branch abc"] - }; - throw error; - } else if (currentCommit === void 0 || !currentCommit) { - let error = new Error( - 'Incorrect usage of "merge". Current branch (' + curBranch + ")has no commits" - ); - error.hash = { - text: "merge " + otherBranch, - token: "merge " + otherBranch, - line: "1", - loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, - expected: ["commit"] - }; - throw error; - } else if (branches[otherBranch] === void 0) { - let error = new Error( - 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") does not exist" - ); - error.hash = { - text: "merge " + otherBranch, - token: "merge " + otherBranch, - line: "1", - loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, - expected: ["branch " + otherBranch] - }; - throw error; - } else if (otherCommit === void 0 || !otherCommit) { - let error = new Error( - 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") has no commits" - ); - error.hash = { - text: "merge " + otherBranch, - token: "merge " + otherBranch, - line: "1", - loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, - expected: ['"commit"'] - }; - throw error; - } else if (currentCommit === otherCommit) { - let error = new Error('Incorrect usage of "merge". Both branches have same head'); - error.hash = { - text: "merge " + otherBranch, - token: "merge " + otherBranch, - line: "1", - loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, - expected: ["branch abc"] - }; - throw error; - } else if (custom_id && commits[custom_id] !== void 0) { - let error = new Error( - 'Incorrect usage of "merge". Commit with id:' + custom_id + " already exists, use different custom Id" - ); - error.hash = { - text: "merge " + otherBranch + custom_id + override_type + custom_tag, - token: "merge " + otherBranch + custom_id + override_type + custom_tag, - line: "1", - loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, - expected: [ - "merge " + otherBranch + " " + custom_id + "_UNIQUE " + override_type + " " + custom_tag - ] - }; - throw error; - } - const commit2 = { - id: custom_id ? custom_id : seq + "-" + getId(), - message: "merged branch " + otherBranch + " into " + curBranch, - seq: seq++, - parents: [head == null ? null : head.id, branches[otherBranch]], - branch: curBranch, - type: commitType$1.MERGE, - customType: override_type, - customId: custom_id ? true : false, - tag: custom_tag ? custom_tag : "" - }; - head = commit2; - commits[commit2.id] = commit2; - branches[curBranch] = commit2.id; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(branches); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in mergeBranch"); -}; -const cherryPick = function(sourceId, targetId, tag, parentCommitId) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Entering cherryPick:", sourceId, targetId, tag); - sourceId = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(sourceId, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - targetId = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(targetId, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - tag = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(tag, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - parentCommitId = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(parentCommitId, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - if (!sourceId || commits[sourceId] === void 0) { - let error = new Error( - 'Incorrect usage of "cherryPick". Source commit id should exist and provided' - ); - error.hash = { - text: "cherryPick " + sourceId + " " + targetId, - token: "cherryPick " + sourceId + " " + targetId, - line: "1", - loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, - expected: ["cherry-pick abc"] - }; - throw error; - } - let sourceCommit = commits[sourceId]; - let sourceCommitBranch = sourceCommit.branch; - if (parentCommitId && !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))) { - let error = new Error( - "Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit." - ); - throw error; - } - if (sourceCommit.type === commitType$1.MERGE && !parentCommitId) { - let error = new Error( - "Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified." - ); - throw error; - } - if (!targetId || commits[targetId] === void 0) { - if (sourceCommitBranch === curBranch) { - let error = new Error( - 'Incorrect usage of "cherryPick". Source commit is already on current branch' - ); - error.hash = { - text: "cherryPick " + sourceId + " " + targetId, - token: "cherryPick " + sourceId + " " + targetId, - line: "1", - loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, - expected: ["cherry-pick abc"] - }; - throw error; - } - const currentCommit = commits[branches[curBranch]]; - if (currentCommit === void 0 || !currentCommit) { - let error = new Error( - 'Incorrect usage of "cherry-pick". Current branch (' + curBranch + ")has no commits" - ); - error.hash = { - text: "cherryPick " + sourceId + " " + targetId, - token: "cherryPick " + sourceId + " " + targetId, - line: "1", - loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, - expected: ["cherry-pick abc"] - }; - throw error; - } - const commit2 = { - id: seq + "-" + getId(), - message: "cherry-picked " + sourceCommit + " into " + curBranch, - seq: seq++, - parents: [head == null ? null : head.id, sourceCommit.id], - branch: curBranch, - type: commitType$1.CHERRY_PICK, - tag: tag ?? `cherry-pick:${sourceCommit.id}${sourceCommit.type === commitType$1.MERGE ? `|parent:${parentCommitId}` : ""}` - }; - head = commit2; - commits[commit2.id] = commit2; - branches[curBranch] = commit2.id; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(branches); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in cherryPick"); - } -}; -const checkout = function(branch2) { - branch2 = _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(branch2, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - if (branches[branch2] === void 0) { - let error = new Error( - 'Trying to checkout branch which is not yet created. (Help try using "branch ' + branch2 + '")' - ); - error.hash = { - text: "checkout " + branch2, - token: "checkout " + branch2, - line: "1", - loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, - expected: ['"branch ' + branch2 + '"'] - }; - throw error; - } else { - curBranch = branch2; - const id = branches[curBranch]; - head = commits[id]; - } -}; -function upsert(arr, key, newVal) { - const index = arr.indexOf(key); - if (index === -1) { - arr.push(newVal); - } else { - arr.splice(index, 1, newVal); - } -} -function prettyPrintCommitHistory(commitArr) { - const commit2 = commitArr.reduce((out, commit3) => { - if (out.seq > commit3.seq) { - return out; - } - return commit3; - }, commitArr[0]); - let line = ""; - commitArr.forEach(function(c) { - if (c === commit2) { - line += " *"; - } else { - line += " |"; - } - }); - const label = [line, commit2.id, commit2.seq]; - for (let branch2 in branches) { - if (branches[branch2] === commit2.id) { - label.push(branch2); - } - } - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(label.join(" ")); - if (commit2.parents && commit2.parents.length == 2) { - const newCommit = commits[commit2.parents[0]]; - upsert(commitArr, commit2, newCommit); - commitArr.push(commits[commit2.parents[1]]); - } else if (commit2.parents.length == 0) { - return; - } else { - const nextCommit = commits[commit2.parents]; - upsert(commitArr, commit2, nextCommit); - } - commitArr = uniqBy(commitArr, (c) => c.id); - prettyPrintCommitHistory(commitArr); -} -const prettyPrint = function() { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(commits); - const node = getCommitsArray()[0]; - prettyPrintCommitHistory([node]); -}; -const clear$1 = function() { - commits = {}; - head = null; - let mainBranch = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchName; - let mainBranchOrder2 = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchOrder; - branches = {}; - branches[mainBranch] = null; - branchesConfig = {}; - branchesConfig[mainBranch] = { name: mainBranch, order: mainBranchOrder2 }; - curBranch = mainBranch; - seq = 0; - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.v)(); -}; -const getBranchesAsObjArray = function() { - const branchesArray = Object.values(branchesConfig).map((branchConfig, i) => { - if (branchConfig.order !== null) { - return branchConfig; - } - return { - ...branchConfig, - order: parseFloat(`0.${i}`, 10) - }; - }).sort((a, b) => a.order - b.order).map(({ name }) => ({ name })); - return branchesArray; -}; -const getBranches = function() { - return branches; -}; -const getCommits = function() { - return commits; -}; -const getCommitsArray = function() { - const commitArr = Object.keys(commits).map(function(key) { - return commits[key]; - }); - commitArr.forEach(function(o) { - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(o.id); - }); - commitArr.sort((a, b) => a.seq - b.seq); - return commitArr; -}; -const getCurrentBranch = function() { - return curBranch; -}; -const getDirection = function() { - return direction; -}; -const getHead = function() { - return head; -}; -const commitType$1 = { - NORMAL: 0, - REVERSE: 1, - HIGHLIGHT: 2, - MERGE: 3, - CHERRY_PICK: 4 -}; -const gitGraphDb = { - getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph, - setDirection, - setOptions, - getOptions, - commit, - branch, - merge, - cherryPick, - checkout, - //reset, - prettyPrint, - clear: clear$1, - getBranchesAsObjArray, - getBranches, - getCommits, - getCommitsArray, - getCurrentBranch, - getDirection, - getHead, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.g, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.a, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.b, - setDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.q, - getDiagramTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.t, - commitType: commitType$1 -}; -let allCommitsDict = {}; -const commitType = { - NORMAL: 0, - REVERSE: 1, - HIGHLIGHT: 2, - MERGE: 3, - CHERRY_PICK: 4 -}; -const THEME_COLOR_LIMIT = 8; -let branchPos = {}; -let commitPos = {}; -let lanes = []; -let maxPos = 0; -let dir = "LR"; -const clear = () => { - branchPos = {}; - commitPos = {}; - allCommitsDict = {}; - maxPos = 0; - lanes = []; - dir = "LR"; -}; -const drawText = (txt) => { - const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); - let rows = []; - if (typeof txt === "string") { - rows = txt.split(/\\n|\n|<br\s*\/?>/gi); - } else if (Array.isArray(txt)) { - rows = txt; - } else { - rows = []; - } - for (const row of rows) { - const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); - tspan.setAttribute("dy", "1em"); - tspan.setAttribute("x", "0"); - tspan.setAttribute("class", "row"); - tspan.textContent = row.trim(); - svgLabel.appendChild(tspan); - } - return svgLabel; -}; -const findClosestParent = (parents) => { - let closestParent = ""; - let maxPosition = 0; - parents.forEach((parent) => { - const parentPosition = dir === "TB" ? commitPos[parent].y : commitPos[parent].x; - if (parentPosition >= maxPosition) { - closestParent = parent; - maxPosition = parentPosition; - } - }); - return closestParent || void 0; -}; -const drawCommits = (svg, commits2, modifyGraph) => { - const gitGraphConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph; - const gBullets = svg.append("g").attr("class", "commit-bullets"); - const gLabels = svg.append("g").attr("class", "commit-labels"); - let pos = 0; - if (dir === "TB") { - pos = 30; - } - const keys = Object.keys(commits2); - const sortedKeys = keys.sort((a, b) => { - return commits2[a].seq - commits2[b].seq; - }); - const isParallelCommits = gitGraphConfig.parallelCommits; - const layoutOffset = 10; - const commitStep = 40; - sortedKeys.forEach((key) => { - const commit2 = commits2[key]; - if (isParallelCommits) { - if (commit2.parents.length) { - const closestParent = findClosestParent(commit2.parents); - pos = dir === "TB" ? commitPos[closestParent].y + commitStep : commitPos[closestParent].x + commitStep; - } else { - pos = 0; - if (dir === "TB") { - pos = 30; - } - } - } - const posWithOffset = pos + layoutOffset; - const y = dir === "TB" ? posWithOffset : branchPos[commit2.branch].pos; - const x = dir === "TB" ? branchPos[commit2.branch].pos : posWithOffset; - if (modifyGraph) { - let typeClass; - let commitSymbolType = commit2.customType !== void 0 && commit2.customType !== "" ? commit2.customType : commit2.type; - switch (commitSymbolType) { - case commitType.NORMAL: - typeClass = "commit-normal"; - break; - case commitType.REVERSE: - typeClass = "commit-reverse"; - break; - case commitType.HIGHLIGHT: - typeClass = "commit-highlight"; - break; - case commitType.MERGE: - typeClass = "commit-merge"; - break; - case commitType.CHERRY_PICK: - typeClass = "commit-cherry-pick"; - break; - default: - typeClass = "commit-normal"; - } - if (commitSymbolType === commitType.HIGHLIGHT) { - const circle = gBullets.append("rect"); - circle.attr("x", x - 10); - circle.attr("y", y - 10); - circle.attr("height", 20); - circle.attr("width", 20); - circle.attr( - "class", - `commit ${commit2.id} commit-highlight${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-outer` - ); - gBullets.append("rect").attr("x", x - 6).attr("y", y - 6).attr("height", 12).attr("width", 12).attr( - "class", - `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-inner` - ); - } else if (commitSymbolType === commitType.CHERRY_PICK) { - gBullets.append("circle").attr("cx", x).attr("cy", y).attr("r", 10).attr("class", `commit ${commit2.id} ${typeClass}`); - gBullets.append("circle").attr("cx", x - 3).attr("cy", y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); - gBullets.append("circle").attr("cx", x + 3).attr("cy", y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); - gBullets.append("line").attr("x1", x + 3).attr("y1", y + 1).attr("x2", x).attr("y2", y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); - gBullets.append("line").attr("x1", x - 3).attr("y1", y + 1).attr("x2", x).attr("y2", y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); - } else { - const circle = gBullets.append("circle"); - circle.attr("cx", x); - circle.attr("cy", y); - circle.attr("r", commit2.type === commitType.MERGE ? 9 : 10); - circle.attr( - "class", - `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` - ); - if (commitSymbolType === commitType.MERGE) { - const circle2 = gBullets.append("circle"); - circle2.attr("cx", x); - circle2.attr("cy", y); - circle2.attr("r", 6); - circle2.attr( - "class", - `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` - ); - } - if (commitSymbolType === commitType.REVERSE) { - const cross = gBullets.append("path"); - cross.attr("d", `M ${x - 5},${y - 5}L${x + 5},${y + 5}M${x - 5},${y + 5}L${x + 5},${y - 5}`).attr( - "class", - `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` - ); - } - } - } - if (dir === "TB") { - commitPos[commit2.id] = { x, y: posWithOffset }; - } else { - commitPos[commit2.id] = { x: posWithOffset, y }; - } - if (modifyGraph) { - const px = 4; - const py = 2; - if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && gitGraphConfig.showCommitLabel) { - const wrapper = gLabels.append("g"); - const labelBkg = wrapper.insert("rect").attr("class", "commit-label-bkg"); - const text = wrapper.append("text").attr("x", pos).attr("y", y + 25).attr("class", "commit-label").text(commit2.id); - let bbox = text.node().getBBox(); - labelBkg.attr("x", posWithOffset - bbox.width / 2 - py).attr("y", y + 13.5).attr("width", bbox.width + 2 * py).attr("height", bbox.height + 2 * py); - if (dir === "TB") { - labelBkg.attr("x", x - (bbox.width + 4 * px + 5)).attr("y", y - 12); - text.attr("x", x - (bbox.width + 4 * px)).attr("y", y + bbox.height - 12); - } - if (dir !== "TB") { - text.attr("x", posWithOffset - bbox.width / 2); - } - if (gitGraphConfig.rotateCommitLabel) { - if (dir === "TB") { - text.attr("transform", "rotate(-45, " + x + ", " + y + ")"); - labelBkg.attr("transform", "rotate(-45, " + x + ", " + y + ")"); - } else { - let r_x = -7.5 - (bbox.width + 10) / 25 * 9.5; - let r_y = 10 + bbox.width / 25 * 8.5; - wrapper.attr( - "transform", - "translate(" + r_x + ", " + r_y + ") rotate(-45, " + pos + ", " + y + ")" - ); - } - } - } - if (commit2.tag) { - const rect = gLabels.insert("polygon"); - const hole = gLabels.append("circle"); - const tag = gLabels.append("text").attr("y", y - 16).attr("class", "tag-label").text(commit2.tag); - let tagBbox = tag.node().getBBox(); - tag.attr("x", posWithOffset - tagBbox.width / 2); - const h2 = tagBbox.height / 2; - const ly = y - 19.2; - rect.attr("class", "tag-label-bkg").attr( - "points", - ` - ${pos - tagBbox.width / 2 - px / 2},${ly + py} - ${pos - tagBbox.width / 2 - px / 2},${ly - py} - ${posWithOffset - tagBbox.width / 2 - px},${ly - h2 - py} - ${posWithOffset + tagBbox.width / 2 + px},${ly - h2 - py} - ${posWithOffset + tagBbox.width / 2 + px},${ly + h2 + py} - ${posWithOffset - tagBbox.width / 2 - px},${ly + h2 + py}` - ); - hole.attr("cx", pos - tagBbox.width / 2 + px / 2).attr("cy", ly).attr("r", 1.5).attr("class", "tag-hole"); - if (dir === "TB") { - rect.attr("class", "tag-label-bkg").attr( - "points", - ` - ${x},${pos + py} - ${x},${pos - py} - ${x + layoutOffset},${pos - h2 - py} - ${x + layoutOffset + tagBbox.width + px},${pos - h2 - py} - ${x + layoutOffset + tagBbox.width + px},${pos + h2 + py} - ${x + layoutOffset},${pos + h2 + py}` - ).attr("transform", "translate(12,12) rotate(45, " + x + "," + pos + ")"); - hole.attr("cx", x + px / 2).attr("cy", pos).attr("transform", "translate(12,12) rotate(45, " + x + "," + pos + ")"); - tag.attr("x", x + 5).attr("y", pos + 3).attr("transform", "translate(14,14) rotate(45, " + x + "," + pos + ")"); - } - } - } - pos += commitStep + layoutOffset; - if (pos > maxPos) { - maxPos = pos; - } - }); -}; -const shouldRerouteArrow = (commitA, commitB, p1, p2, allCommits) => { - const commitBIsFurthest = dir === "TB" ? p1.x < p2.x : p1.y < p2.y; - const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch; - const isOnBranchToGetCurve = (x) => x.branch === branchToGetCurve; - const isBetweenCommits = (x) => x.seq > commitA.seq && x.seq < commitB.seq; - return Object.values(allCommits).some((commitX) => { - return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX); - }); -}; -const findLane = (y1, y2, depth = 0) => { - const candidate = y1 + Math.abs(y1 - y2) / 2; - if (depth > 5) { - return candidate; - } - let ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10); - if (ok) { - lanes.push(candidate); - return candidate; - } - const diff = Math.abs(y1 - y2); - return findLane(y1, y2 - diff / 5, depth + 1); -}; -const drawArrow = (svg, commitA, commitB, allCommits) => { - const p1 = commitPos[commitA.id]; - const p2 = commitPos[commitB.id]; - const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p2, allCommits); - let arc = ""; - let arc2 = ""; - let radius = 0; - let offset = 0; - let colorClassNum = branchPos[commitB.branch].index; - if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) { - colorClassNum = branchPos[commitA.branch].index; - } - let lineDef; - if (arrowNeedsRerouting) { - arc = "A 10 10, 0, 0, 0,"; - arc2 = "A 10 10, 0, 0, 1,"; - radius = 10; - offset = 10; - const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y); - const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x); - if (dir === "TB") { - if (p1.x < p2.x) { - lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`; - } else { - colorClassNum = branchPos[commitA.branch].index; - lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`; - } - } else { - if (p1.y < p2.y) { - lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`; - } else { - colorClassNum = branchPos[commitA.branch].index; - lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`; - } - } - } else { - arc = "A 20 20, 0, 0, 0,"; - arc2 = "A 20 20, 0, 0, 1,"; - radius = 20; - offset = 20; - if (dir === "TB") { - if (p1.x < p2.x) { - if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) { - lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`; - } else { - lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`; - } - } - if (p1.x > p2.x) { - arc = "A 20 20, 0, 0, 0,"; - arc2 = "A 20 20, 0, 0, 1,"; - radius = 20; - offset = 20; - if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) { - lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`; - } else { - lineDef = `M ${p1.x} ${p1.y} L ${p2.x + radius} ${p1.y} ${arc} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`; - } - } - if (p1.x === p2.x) { - lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`; - } - } else { - if (p1.y < p2.y) { - if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) { - lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`; - } else { - lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`; - } - } - if (p1.y > p2.y) { - if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) { - lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`; - } else { - lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`; - } - } - if (p1.y === p2.y) { - lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`; - } - } - } - svg.append("path").attr("d", lineDef).attr("class", "arrow arrow" + colorClassNum % THEME_COLOR_LIMIT); -}; -const drawArrows = (svg, commits2) => { - const gArrows = svg.append("g").attr("class", "commit-arrows"); - Object.keys(commits2).forEach((key) => { - const commit2 = commits2[key]; - if (commit2.parents && commit2.parents.length > 0) { - commit2.parents.forEach((parent) => { - drawArrow(gArrows, commits2[parent], commit2, commits2); - }); - } - }); -}; -const drawBranches = (svg, branches2) => { - const gitGraphConfig = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph; - const g = svg.append("g"); - branches2.forEach((branch2, index) => { - const adjustIndexForTheme = index % THEME_COLOR_LIMIT; - const pos = branchPos[branch2.name].pos; - const line = g.append("line"); - line.attr("x1", 0); - line.attr("y1", pos); - line.attr("x2", maxPos); - line.attr("y2", pos); - line.attr("class", "branch branch" + adjustIndexForTheme); - if (dir === "TB") { - line.attr("y1", 30); - line.attr("x1", pos); - line.attr("y2", maxPos); - line.attr("x2", pos); - } - lanes.push(pos); - let name = branch2.name; - const labelElement = drawText(name); - const bkg = g.insert("rect"); - const branchLabel = g.insert("g").attr("class", "branchLabel"); - const label = branchLabel.insert("g").attr("class", "label branch-label" + adjustIndexForTheme); - label.node().appendChild(labelElement); - let bbox = labelElement.getBBox(); - bkg.attr("class", "branchLabelBkg label" + adjustIndexForTheme).attr("rx", 4).attr("ry", 4).attr("x", -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)).attr("y", -bbox.height / 2 + 8).attr("width", bbox.width + 18).attr("height", bbox.height + 4); - label.attr( - "transform", - "translate(" + (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)) + ", " + (pos - bbox.height / 2 - 1) + ")" - ); - if (dir === "TB") { - bkg.attr("x", pos - bbox.width / 2 - 10).attr("y", 0); - label.attr("transform", "translate(" + (pos - bbox.width / 2 - 5) + ", 0)"); - } - if (dir !== "TB") { - bkg.attr("transform", "translate(-19, " + (pos - bbox.height / 2) + ")"); - } - }); -}; -const draw = function(txt, id, ver, diagObj) { - clear(); - const conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)(); - const gitGraphConfig = conf.gitGraph; - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in gitgraph renderer", txt + "\n", "id:", id, ver); - allCommitsDict = diagObj.db.getCommits(); - const branches2 = diagObj.db.getBranchesAsObjArray(); - dir = diagObj.db.getDirection(); - const diagram2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(`[id="${id}"]`); - let pos = 0; - branches2.forEach((branch2, index) => { - const labelElement = drawText(branch2.name); - const g = diagram2.append("g"); - const branchLabel = g.insert("g").attr("class", "branchLabel"); - const label = branchLabel.insert("g").attr("class", "label branch-label"); - label.node().appendChild(labelElement); - let bbox = labelElement.getBBox(); - branchPos[branch2.name] = { pos, index }; - pos += 50 + (gitGraphConfig.rotateCommitLabel ? 40 : 0) + (dir === "TB" ? bbox.width / 2 : 0); - label.remove(); - branchLabel.remove(); - g.remove(); - }); - drawCommits(diagram2, allCommitsDict, false); - if (gitGraphConfig.showBranches) { - drawBranches(diagram2, branches2); - } - drawArrows(diagram2, allCommitsDict); - drawCommits(diagram2, allCommitsDict, true); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.u.insertTitle( - diagram2, - "gitTitleText", - gitGraphConfig.titleTopMargin, - diagObj.db.getDiagramTitle() - ); - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.z)( - void 0, - diagram2, - gitGraphConfig.diagramPadding, - gitGraphConfig.useMaxWidth ?? conf.useMaxWidth - ); -}; -const gitGraphRenderer = { - draw -}; -const getStyles = (options2) => ` - .commit-id, - .commit-msg, - .branch-label { - fill: lightgrey; - color: lightgrey; - font-family: 'trebuchet ms', verdana, arial, sans-serif; - font-family: var(--mermaid-font-family); - } - ${[0, 1, 2, 3, 4, 5, 6, 7].map( - (i) => ` - .branch-label${i} { fill: ${options2["gitBranchLabel" + i]}; } - .commit${i} { stroke: ${options2["git" + i]}; fill: ${options2["git" + i]}; } - .commit-highlight${i} { stroke: ${options2["gitInv" + i]}; fill: ${options2["gitInv" + i]}; } - .label${i} { fill: ${options2["git" + i]}; } - .arrow${i} { stroke: ${options2["git" + i]}; } - ` -).join("\n")} - - .branch { - stroke-width: 1; - stroke: ${options2.lineColor}; - stroke-dasharray: 2; - } - .commit-label { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelColor};} - .commit-label-bkg { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelBackground}; opacity: 0.5; } - .tag-label { font-size: ${options2.tagLabelFontSize}; fill: ${options2.tagLabelColor};} - .tag-label-bkg { fill: ${options2.tagLabelBackground}; stroke: ${options2.tagLabelBorder}; } - .tag-hole { fill: ${options2.textColor}; } - - .commit-merge { - stroke: ${options2.primaryColor}; - fill: ${options2.primaryColor}; - } - .commit-reverse { - stroke: ${options2.primaryColor}; - fill: ${options2.primaryColor}; - stroke-width: 3; - } - .commit-highlight-outer { - } - .commit-highlight-inner { - stroke: ${options2.primaryColor}; - fill: ${options2.primaryColor}; - } - - .arrow { stroke-width: 8; stroke-linecap: round; fill: none} - .gitTitleText { - text-anchor: middle; - font-size: 18px; - fill: ${options2.textColor}; - } -`; -const gitGraphStyles = getStyles; -const diagram = { - parser: gitGraphParser, - db: gitGraphDb, - renderer: gitGraphRenderer, - styles: gitGraphStyles -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/946.bcce335e.js b/pr-preview/pr-1594/assets/js/946.bcce335e.js deleted file mode 100644 index 5cdaa76c50..0000000000 --- a/pr-preview/pr-1594/assets/js/946.bcce335e.js +++ /dev/null @@ -1,2605 +0,0 @@ -"use strict"; -exports.id = 946; -exports.ids = [946]; -exports.modules = { - -/***/ 31946: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99702); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26312); -/* harmony import */ var _svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(28259); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16750); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74353); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(99418); - - - - - - - - - - - - -var parser = function() { - var o = function(k, v, o2, l) { - for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) - ; - return o2; - }, $V0 = [1, 24], $V1 = [1, 25], $V2 = [1, 26], $V3 = [1, 27], $V4 = [1, 28], $V5 = [1, 63], $V6 = [1, 64], $V7 = [1, 65], $V8 = [1, 66], $V9 = [1, 67], $Va = [1, 68], $Vb = [1, 69], $Vc = [1, 29], $Vd = [1, 30], $Ve = [1, 31], $Vf = [1, 32], $Vg = [1, 33], $Vh = [1, 34], $Vi = [1, 35], $Vj = [1, 36], $Vk = [1, 37], $Vl = [1, 38], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 43], $Vr = [1, 44], $Vs = [1, 45], $Vt = [1, 46], $Vu = [1, 47], $Vv = [1, 48], $Vw = [1, 50], $Vx = [1, 51], $Vy = [1, 52], $Vz = [1, 53], $VA = [1, 54], $VB = [1, 55], $VC = [1, 56], $VD = [1, 57], $VE = [1, 58], $VF = [1, 59], $VG = [1, 60], $VH = [14, 42], $VI = [14, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], $VJ = [12, 14, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], $VK = [1, 82], $VL = [1, 83], $VM = [1, 84], $VN = [1, 85], $VO = [12, 14, 42], $VP = [12, 14, 33, 42], $VQ = [12, 14, 33, 42, 76, 77, 79, 80], $VR = [12, 33], $VS = [34, 36, 37, 38, 39, 40, 41, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74]; - var parser2 = { - trace: function trace() { - }, - yy: {}, - symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "direction": 5, "direction_tb": 6, "direction_bt": 7, "direction_rl": 8, "direction_lr": 9, "graphConfig": 10, "C4_CONTEXT": 11, "NEWLINE": 12, "statements": 13, "EOF": 14, "C4_CONTAINER": 15, "C4_COMPONENT": 16, "C4_DYNAMIC": 17, "C4_DEPLOYMENT": 18, "otherStatements": 19, "diagramStatements": 20, "otherStatement": 21, "title": 22, "accDescription": 23, "acc_title": 24, "acc_title_value": 25, "acc_descr": 26, "acc_descr_value": 27, "acc_descr_multiline_value": 28, "boundaryStatement": 29, "boundaryStartStatement": 30, "boundaryStopStatement": 31, "boundaryStart": 32, "LBRACE": 33, "ENTERPRISE_BOUNDARY": 34, "attributes": 35, "SYSTEM_BOUNDARY": 36, "BOUNDARY": 37, "CONTAINER_BOUNDARY": 38, "NODE": 39, "NODE_L": 40, "NODE_R": 41, "RBRACE": 42, "diagramStatement": 43, "PERSON": 44, "PERSON_EXT": 45, "SYSTEM": 46, "SYSTEM_DB": 47, "SYSTEM_QUEUE": 48, "SYSTEM_EXT": 49, "SYSTEM_EXT_DB": 50, "SYSTEM_EXT_QUEUE": 51, "CONTAINER": 52, "CONTAINER_DB": 53, "CONTAINER_QUEUE": 54, "CONTAINER_EXT": 55, "CONTAINER_EXT_DB": 56, "CONTAINER_EXT_QUEUE": 57, "COMPONENT": 58, "COMPONENT_DB": 59, "COMPONENT_QUEUE": 60, "COMPONENT_EXT": 61, "COMPONENT_EXT_DB": 62, "COMPONENT_EXT_QUEUE": 63, "REL": 64, "BIREL": 65, "REL_U": 66, "REL_D": 67, "REL_L": 68, "REL_R": 69, "REL_B": 70, "REL_INDEX": 71, "UPDATE_EL_STYLE": 72, "UPDATE_REL_STYLE": 73, "UPDATE_LAYOUT_CONFIG": 74, "attribute": 75, "STR": 76, "STR_KEY": 77, "STR_VALUE": 78, "ATTRIBUTE": 79, "ATTRIBUTE_EMPTY": 80, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 6: "direction_tb", 7: "direction_bt", 8: "direction_rl", 9: "direction_lr", 11: "C4_CONTEXT", 12: "NEWLINE", 14: "EOF", 15: "C4_CONTAINER", 16: "C4_COMPONENT", 17: "C4_DYNAMIC", 18: "C4_DEPLOYMENT", 22: "title", 23: "accDescription", 24: "acc_title", 25: "acc_title_value", 26: "acc_descr", 27: "acc_descr_value", 28: "acc_descr_multiline_value", 33: "LBRACE", 34: "ENTERPRISE_BOUNDARY", 36: "SYSTEM_BOUNDARY", 37: "BOUNDARY", 38: "CONTAINER_BOUNDARY", 39: "NODE", 40: "NODE_L", 41: "NODE_R", 42: "RBRACE", 44: "PERSON", 45: "PERSON_EXT", 46: "SYSTEM", 47: "SYSTEM_DB", 48: "SYSTEM_QUEUE", 49: "SYSTEM_EXT", 50: "SYSTEM_EXT_DB", 51: "SYSTEM_EXT_QUEUE", 52: "CONTAINER", 53: "CONTAINER_DB", 54: "CONTAINER_QUEUE", 55: "CONTAINER_EXT", 56: "CONTAINER_EXT_DB", 57: "CONTAINER_EXT_QUEUE", 58: "COMPONENT", 59: "COMPONENT_DB", 60: "COMPONENT_QUEUE", 61: "COMPONENT_EXT", 62: "COMPONENT_EXT_DB", 63: "COMPONENT_EXT_QUEUE", 64: "REL", 65: "BIREL", 66: "REL_U", 67: "REL_D", 68: "REL_L", 69: "REL_R", 70: "REL_B", 71: "REL_INDEX", 72: "UPDATE_EL_STYLE", 73: "UPDATE_REL_STYLE", 74: "UPDATE_LAYOUT_CONFIG", 76: "STR", 77: "STR_KEY", 78: "STR_VALUE", 79: "ATTRIBUTE", 80: "ATTRIBUTE_EMPTY" }, - productions_: [0, [3, 1], [3, 1], [5, 1], [5, 1], [5, 1], [5, 1], [4, 1], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [13, 1], [13, 1], [13, 2], [19, 1], [19, 2], [19, 3], [21, 1], [21, 1], [21, 2], [21, 2], [21, 1], [29, 3], [30, 3], [30, 3], [30, 4], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [31, 1], [20, 1], [20, 2], [20, 3], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 1], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [35, 1], [35, 2], [75, 1], [75, 2], [75, 1], [75, 1]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { - var $0 = $$.length - 1; - switch (yystate) { - case 3: - yy.setDirection("TB"); - break; - case 4: - yy.setDirection("BT"); - break; - case 5: - yy.setDirection("RL"); - break; - case 6: - yy.setDirection("LR"); - break; - case 8: - case 9: - case 10: - case 11: - case 12: - yy.setC4Type($$[$0 - 3]); - break; - case 19: - yy.setTitle($$[$0].substring(6)); - this.$ = $$[$0].substring(6); - break; - case 20: - yy.setAccDescription($$[$0].substring(15)); - this.$ = $$[$0].substring(15); - break; - case 21: - this.$ = $$[$0].trim(); - yy.setTitle(this.$); - break; - case 22: - case 23: - this.$ = $$[$0].trim(); - yy.setAccDescription(this.$); - break; - case 28: - case 29: - $$[$0].splice(2, 0, "ENTERPRISE"); - yy.addPersonOrSystemBoundary(...$$[$0]); - this.$ = $$[$0]; - break; - case 30: - yy.addPersonOrSystemBoundary(...$$[$0]); - this.$ = $$[$0]; - break; - case 31: - $$[$0].splice(2, 0, "CONTAINER"); - yy.addContainerBoundary(...$$[$0]); - this.$ = $$[$0]; - break; - case 32: - yy.addDeploymentNode("node", ...$$[$0]); - this.$ = $$[$0]; - break; - case 33: - yy.addDeploymentNode("nodeL", ...$$[$0]); - this.$ = $$[$0]; - break; - case 34: - yy.addDeploymentNode("nodeR", ...$$[$0]); - this.$ = $$[$0]; - break; - case 35: - yy.popBoundaryParseStack(); - break; - case 39: - yy.addPersonOrSystem("person", ...$$[$0]); - this.$ = $$[$0]; - break; - case 40: - yy.addPersonOrSystem("external_person", ...$$[$0]); - this.$ = $$[$0]; - break; - case 41: - yy.addPersonOrSystem("system", ...$$[$0]); - this.$ = $$[$0]; - break; - case 42: - yy.addPersonOrSystem("system_db", ...$$[$0]); - this.$ = $$[$0]; - break; - case 43: - yy.addPersonOrSystem("system_queue", ...$$[$0]); - this.$ = $$[$0]; - break; - case 44: - yy.addPersonOrSystem("external_system", ...$$[$0]); - this.$ = $$[$0]; - break; - case 45: - yy.addPersonOrSystem("external_system_db", ...$$[$0]); - this.$ = $$[$0]; - break; - case 46: - yy.addPersonOrSystem("external_system_queue", ...$$[$0]); - this.$ = $$[$0]; - break; - case 47: - yy.addContainer("container", ...$$[$0]); - this.$ = $$[$0]; - break; - case 48: - yy.addContainer("container_db", ...$$[$0]); - this.$ = $$[$0]; - break; - case 49: - yy.addContainer("container_queue", ...$$[$0]); - this.$ = $$[$0]; - break; - case 50: - yy.addContainer("external_container", ...$$[$0]); - this.$ = $$[$0]; - break; - case 51: - yy.addContainer("external_container_db", ...$$[$0]); - this.$ = $$[$0]; - break; - case 52: - yy.addContainer("external_container_queue", ...$$[$0]); - this.$ = $$[$0]; - break; - case 53: - yy.addComponent("component", ...$$[$0]); - this.$ = $$[$0]; - break; - case 54: - yy.addComponent("component_db", ...$$[$0]); - this.$ = $$[$0]; - break; - case 55: - yy.addComponent("component_queue", ...$$[$0]); - this.$ = $$[$0]; - break; - case 56: - yy.addComponent("external_component", ...$$[$0]); - this.$ = $$[$0]; - break; - case 57: - yy.addComponent("external_component_db", ...$$[$0]); - this.$ = $$[$0]; - break; - case 58: - yy.addComponent("external_component_queue", ...$$[$0]); - this.$ = $$[$0]; - break; - case 60: - yy.addRel("rel", ...$$[$0]); - this.$ = $$[$0]; - break; - case 61: - yy.addRel("birel", ...$$[$0]); - this.$ = $$[$0]; - break; - case 62: - yy.addRel("rel_u", ...$$[$0]); - this.$ = $$[$0]; - break; - case 63: - yy.addRel("rel_d", ...$$[$0]); - this.$ = $$[$0]; - break; - case 64: - yy.addRel("rel_l", ...$$[$0]); - this.$ = $$[$0]; - break; - case 65: - yy.addRel("rel_r", ...$$[$0]); - this.$ = $$[$0]; - break; - case 66: - yy.addRel("rel_b", ...$$[$0]); - this.$ = $$[$0]; - break; - case 67: - $$[$0].splice(0, 1); - yy.addRel("rel", ...$$[$0]); - this.$ = $$[$0]; - break; - case 68: - yy.updateElStyle("update_el_style", ...$$[$0]); - this.$ = $$[$0]; - break; - case 69: - yy.updateRelStyle("update_rel_style", ...$$[$0]); - this.$ = $$[$0]; - break; - case 70: - yy.updateLayoutConfig("update_layout_config", ...$$[$0]); - this.$ = $$[$0]; - break; - case 71: - this.$ = [$$[$0]]; - break; - case 72: - $$[$0].unshift($$[$0 - 1]); - this.$ = $$[$0]; - break; - case 73: - case 75: - this.$ = $$[$0].trim(); - break; - case 74: - let kv = {}; - kv[$$[$0 - 1].trim()] = $$[$0].trim(); - this.$ = kv; - break; - case 76: - this.$ = ""; - break; - } - }, - table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 7: [1, 6], 8: [1, 7], 9: [1, 8], 10: 4, 11: [1, 9], 15: [1, 10], 16: [1, 11], 17: [1, 12], 18: [1, 13] }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 7] }, { 1: [2, 3] }, { 1: [2, 4] }, { 1: [2, 5] }, { 1: [2, 6] }, { 12: [1, 14] }, { 12: [1, 15] }, { 12: [1, 16] }, { 12: [1, 17] }, { 12: [1, 18] }, { 13: 19, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 70, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 71, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 72, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 73, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 14: [1, 74] }, o($VH, [2, 13], { 43: 23, 29: 49, 30: 61, 32: 62, 20: 75, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o($VH, [2, 14]), o($VI, [2, 16], { 12: [1, 76] }), o($VH, [2, 36], { 12: [1, 77] }), o($VJ, [2, 19]), o($VJ, [2, 20]), { 25: [1, 78] }, { 27: [1, 79] }, o($VJ, [2, 23]), { 35: 80, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 86, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 87, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 88, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 89, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 90, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 91, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 92, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 93, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 94, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 95, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 96, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 97, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 98, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 99, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 100, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 101, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 102, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 103, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 104, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, o($VO, [2, 59]), { 35: 105, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 106, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 107, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 108, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 109, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 110, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 111, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 112, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 113, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 114, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 115, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 20: 116, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 12: [1, 118], 33: [1, 117] }, { 35: 119, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 120, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 121, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 122, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 123, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 124, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 125, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 14: [1, 126] }, { 14: [1, 127] }, { 14: [1, 128] }, { 14: [1, 129] }, { 1: [2, 8] }, o($VH, [2, 15]), o($VI, [2, 17], { 21: 22, 19: 130, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4 }), o($VH, [2, 37], { 19: 20, 20: 21, 21: 22, 43: 23, 29: 49, 30: 61, 32: 62, 13: 131, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o($VJ, [2, 21]), o($VJ, [2, 22]), o($VO, [2, 39]), o($VP, [2, 71], { 75: 81, 35: 132, 76: $VK, 77: $VL, 79: $VM, 80: $VN }), o($VQ, [2, 73]), { 78: [1, 133] }, o($VQ, [2, 75]), o($VQ, [2, 76]), o($VO, [2, 40]), o($VO, [2, 41]), o($VO, [2, 42]), o($VO, [2, 43]), o($VO, [2, 44]), o($VO, [2, 45]), o($VO, [2, 46]), o($VO, [2, 47]), o($VO, [2, 48]), o($VO, [2, 49]), o($VO, [2, 50]), o($VO, [2, 51]), o($VO, [2, 52]), o($VO, [2, 53]), o($VO, [2, 54]), o($VO, [2, 55]), o($VO, [2, 56]), o($VO, [2, 57]), o($VO, [2, 58]), o($VO, [2, 60]), o($VO, [2, 61]), o($VO, [2, 62]), o($VO, [2, 63]), o($VO, [2, 64]), o($VO, [2, 65]), o($VO, [2, 66]), o($VO, [2, 67]), o($VO, [2, 68]), o($VO, [2, 69]), o($VO, [2, 70]), { 31: 134, 42: [1, 135] }, { 12: [1, 136] }, { 33: [1, 137] }, o($VR, [2, 28]), o($VR, [2, 29]), o($VR, [2, 30]), o($VR, [2, 31]), o($VR, [2, 32]), o($VR, [2, 33]), o($VR, [2, 34]), { 1: [2, 9] }, { 1: [2, 10] }, { 1: [2, 11] }, { 1: [2, 12] }, o($VI, [2, 18]), o($VH, [2, 38]), o($VP, [2, 72]), o($VQ, [2, 74]), o($VO, [2, 24]), o($VO, [2, 35]), o($VS, [2, 25]), o($VS, [2, 26], { 12: [1, 138] }), o($VS, [2, 27])], - defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 7], 5: [2, 3], 6: [2, 4], 7: [2, 5], 8: [2, 6], 74: [2, 8], 126: [2, 9], 127: [2, 10], 128: [2, 11], 129: [2, 12] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer2 = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer2.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer2; - sharedState.yy.parser = this; - if (typeof lexer2.yylloc == "undefined") { - lexer2.yylloc = {}; - } - var yyloc = lexer2.yylloc; - lstack.push(yyloc); - var ranges = lexer2.options && lexer2.options.ranges; - if (typeof sharedState.yy.parseError === "function") { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function lex() { - var token; - token = tstack.pop() || lexer2.lex() || EOF; - if (typeof token !== "number") { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } - token = self.symbols_[token] || token; - } - return token; - } - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer2.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer2.match, - token: this.terminals_[symbol] || symbol, - line: lexer2.yylineno, - loc: yyloc, - expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer2.yytext); - lstack.push(lexer2.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer2.yyleng; - yytext = lexer2.yytext; - yylineno = lexer2.yylineno; - yyloc = lexer2.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function(input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ""; - this.conditionStack = ["INITIAL"]; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function() { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - return this; - }, - // retain first n characters of the match - less: function(n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function() { - var pre = this.pastInput(); - var c2 = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c2 + "^"; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function(match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - for (var k in backup) { - this[k] = backup[k]; - } - return false; - } - return false; - }, - // return next match in input - next: function() { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ""; - this.match = ""; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; - } else { - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: {}, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - return 6; - case 1: - return 7; - case 2: - return 8; - case 3: - return 9; - case 4: - return 22; - case 5: - return 23; - case 6: - this.begin("acc_title"); - return 24; - case 7: - this.popState(); - return "acc_title_value"; - case 8: - this.begin("acc_descr"); - return 26; - case 9: - this.popState(); - return "acc_descr_value"; - case 10: - this.begin("acc_descr_multiline"); - break; - case 11: - this.popState(); - break; - case 12: - return "acc_descr_multiline_value"; - case 13: - break; - case 14: - c; - break; - case 15: - return 12; - case 16: - break; - case 17: - return 11; - case 18: - return 15; - case 19: - return 16; - case 20: - return 17; - case 21: - return 18; - case 22: - this.begin("person_ext"); - return 45; - case 23: - this.begin("person"); - return 44; - case 24: - this.begin("system_ext_queue"); - return 51; - case 25: - this.begin("system_ext_db"); - return 50; - case 26: - this.begin("system_ext"); - return 49; - case 27: - this.begin("system_queue"); - return 48; - case 28: - this.begin("system_db"); - return 47; - case 29: - this.begin("system"); - return 46; - case 30: - this.begin("boundary"); - return 37; - case 31: - this.begin("enterprise_boundary"); - return 34; - case 32: - this.begin("system_boundary"); - return 36; - case 33: - this.begin("container_ext_queue"); - return 57; - case 34: - this.begin("container_ext_db"); - return 56; - case 35: - this.begin("container_ext"); - return 55; - case 36: - this.begin("container_queue"); - return 54; - case 37: - this.begin("container_db"); - return 53; - case 38: - this.begin("container"); - return 52; - case 39: - this.begin("container_boundary"); - return 38; - case 40: - this.begin("component_ext_queue"); - return 63; - case 41: - this.begin("component_ext_db"); - return 62; - case 42: - this.begin("component_ext"); - return 61; - case 43: - this.begin("component_queue"); - return 60; - case 44: - this.begin("component_db"); - return 59; - case 45: - this.begin("component"); - return 58; - case 46: - this.begin("node"); - return 39; - case 47: - this.begin("node"); - return 39; - case 48: - this.begin("node_l"); - return 40; - case 49: - this.begin("node_r"); - return 41; - case 50: - this.begin("rel"); - return 64; - case 51: - this.begin("birel"); - return 65; - case 52: - this.begin("rel_u"); - return 66; - case 53: - this.begin("rel_u"); - return 66; - case 54: - this.begin("rel_d"); - return 67; - case 55: - this.begin("rel_d"); - return 67; - case 56: - this.begin("rel_l"); - return 68; - case 57: - this.begin("rel_l"); - return 68; - case 58: - this.begin("rel_r"); - return 69; - case 59: - this.begin("rel_r"); - return 69; - case 60: - this.begin("rel_b"); - return 70; - case 61: - this.begin("rel_index"); - return 71; - case 62: - this.begin("update_el_style"); - return 72; - case 63: - this.begin("update_rel_style"); - return 73; - case 64: - this.begin("update_layout_config"); - return 74; - case 65: - return "EOF_IN_STRUCT"; - case 66: - this.begin("attribute"); - return "ATTRIBUTE_EMPTY"; - case 67: - this.begin("attribute"); - break; - case 68: - this.popState(); - this.popState(); - break; - case 69: - return 80; - case 70: - break; - case 71: - return 80; - case 72: - this.begin("string"); - break; - case 73: - this.popState(); - break; - case 74: - return "STR"; - case 75: - this.begin("string_kv"); - break; - case 76: - this.begin("string_kv_key"); - return "STR_KEY"; - case 77: - this.popState(); - this.begin("string_kv_value"); - break; - case 78: - return "STR_VALUE"; - case 79: - this.popState(); - this.popState(); - break; - case 80: - return "STR"; - case 81: - return "LBRACE"; - case 82: - return "RBRACE"; - case 83: - return "SPACE"; - case 84: - return "EOL"; - case 85: - return 14; - } - }, - rules: [/^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:title\s[^#\n;]+)/, /^(?:accDescription\s[^#\n;]+)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:C4Context\b)/, /^(?:C4Container\b)/, /^(?:C4Component\b)/, /^(?:C4Dynamic\b)/, /^(?:C4Deployment\b)/, /^(?:Person_Ext\b)/, /^(?:Person\b)/, /^(?:SystemQueue_Ext\b)/, /^(?:SystemDb_Ext\b)/, /^(?:System_Ext\b)/, /^(?:SystemQueue\b)/, /^(?:SystemDb\b)/, /^(?:System\b)/, /^(?:Boundary\b)/, /^(?:Enterprise_Boundary\b)/, /^(?:System_Boundary\b)/, /^(?:ContainerQueue_Ext\b)/, /^(?:ContainerDb_Ext\b)/, /^(?:Container_Ext\b)/, /^(?:ContainerQueue\b)/, /^(?:ContainerDb\b)/, /^(?:Container\b)/, /^(?:Container_Boundary\b)/, /^(?:ComponentQueue_Ext\b)/, /^(?:ComponentDb_Ext\b)/, /^(?:Component_Ext\b)/, /^(?:ComponentQueue\b)/, /^(?:ComponentDb\b)/, /^(?:Component\b)/, /^(?:Deployment_Node\b)/, /^(?:Node\b)/, /^(?:Node_L\b)/, /^(?:Node_R\b)/, /^(?:Rel\b)/, /^(?:BiRel\b)/, /^(?:Rel_Up\b)/, /^(?:Rel_U\b)/, /^(?:Rel_Down\b)/, /^(?:Rel_D\b)/, /^(?:Rel_Left\b)/, /^(?:Rel_L\b)/, /^(?:Rel_Right\b)/, /^(?:Rel_R\b)/, /^(?:Rel_Back\b)/, /^(?:RelIndex\b)/, /^(?:UpdateElementStyle\b)/, /^(?:UpdateRelStyle\b)/, /^(?:UpdateLayoutConfig\b)/, /^(?:$)/, /^(?:[(][ ]*[,])/, /^(?:[(])/, /^(?:[)])/, /^(?:,,)/, /^(?:,)/, /^(?:[ ]*["]["])/, /^(?:[ ]*["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:[ ]*[\$])/, /^(?:[^=]*)/, /^(?:[=][ ]*["])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:[^,]+)/, /^(?:\{)/, /^(?:\})/, /^(?:[\s]+)/, /^(?:[\n\r]+)/, /^(?:$)/], - conditions: { "acc_descr_multiline": { "rules": [11, 12], "inclusive": false }, "acc_descr": { "rules": [9], "inclusive": false }, "acc_title": { "rules": [7], "inclusive": false }, "string_kv_value": { "rules": [78, 79], "inclusive": false }, "string_kv_key": { "rules": [77], "inclusive": false }, "string_kv": { "rules": [76], "inclusive": false }, "string": { "rules": [73, 74], "inclusive": false }, "attribute": { "rules": [68, 69, 70, 71, 72, 75, 80], "inclusive": false }, "update_layout_config": { "rules": [65, 66, 67, 68], "inclusive": false }, "update_rel_style": { "rules": [65, 66, 67, 68], "inclusive": false }, "update_el_style": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_b": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_r": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_l": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_d": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_u": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_bi": { "rules": [], "inclusive": false }, "rel": { "rules": [65, 66, 67, 68], "inclusive": false }, "node_r": { "rules": [65, 66, 67, 68], "inclusive": false }, "node_l": { "rules": [65, 66, 67, 68], "inclusive": false }, "node": { "rules": [65, 66, 67, 68], "inclusive": false }, "index": { "rules": [], "inclusive": false }, "rel_index": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_ext_queue": { "rules": [], "inclusive": false }, "component_ext_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "component": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_ext_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_ext_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "container": { "rules": [65, 66, 67, 68], "inclusive": false }, "birel": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "enterprise_boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_ext_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_ext_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "system": { "rules": [65, 66, 67, 68], "inclusive": false }, "person_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "person": { "rules": [65, 66, 67, 68], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 81, 82, 83, 84, 85], "inclusive": true } } - }; - return lexer2; - }(); - parser2.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser2; - parser2.Parser = Parser; - return new Parser(); -}(); -parser.parser = parser; -const parser$1 = parser; -let c4ShapeArray = []; -let boundaryParseStack = [""]; -let currentBoundaryParse = "global"; -let parentBoundaryParse = ""; -let boundaries = [ - { - alias: "global", - label: { text: "global" }, - type: { text: "global" }, - tags: null, - link: null, - parentBoundary: "" - } -]; -let rels = []; -let title = ""; -let wrapEnabled = false; -let c4ShapeInRow$1 = 4; -let c4BoundaryInRow$1 = 2; -var c4Type; -const getC4Type = function() { - return c4Type; -}; -const setC4Type = function(c4TypeParam) { - let sanitizedText = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.d)(c4TypeParam, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - c4Type = sanitizedText; -}; -const addRel = function(type, from, to, label, techn, descr, sprite, tags, link) { - if (type === void 0 || type === null || from === void 0 || from === null || to === void 0 || to === null || label === void 0 || label === null) { - return; - } - let rel = {}; - const old = rels.find((rel2) => rel2.from === from && rel2.to === to); - if (old) { - rel = old; - } else { - rels.push(rel); - } - rel.type = type; - rel.from = from; - rel.to = to; - rel.label = { text: label }; - if (techn === void 0 || techn === null) { - rel.techn = { text: "" }; - } else { - if (typeof techn === "object") { - let [key, value] = Object.entries(techn)[0]; - rel[key] = { text: value }; - } else { - rel.techn = { text: techn }; - } - } - if (descr === void 0 || descr === null) { - rel.descr = { text: "" }; - } else { - if (typeof descr === "object") { - let [key, value] = Object.entries(descr)[0]; - rel[key] = { text: value }; - } else { - rel.descr = { text: descr }; - } - } - if (typeof sprite === "object") { - let [key, value] = Object.entries(sprite)[0]; - rel[key] = value; - } else { - rel.sprite = sprite; - } - if (typeof tags === "object") { - let [key, value] = Object.entries(tags)[0]; - rel[key] = value; - } else { - rel.tags = tags; - } - if (typeof link === "object") { - let [key, value] = Object.entries(link)[0]; - rel[key] = value; - } else { - rel.link = link; - } - rel.wrap = autoWrap(); -}; -const addPersonOrSystem = function(typeC4Shape, alias, label, descr, sprite, tags, link) { - if (alias === null || label === null) { - return; - } - let personOrSystem = {}; - const old = c4ShapeArray.find((personOrSystem2) => personOrSystem2.alias === alias); - if (old && alias === old.alias) { - personOrSystem = old; - } else { - personOrSystem.alias = alias; - c4ShapeArray.push(personOrSystem); - } - if (label === void 0 || label === null) { - personOrSystem.label = { text: "" }; - } else { - personOrSystem.label = { text: label }; - } - if (descr === void 0 || descr === null) { - personOrSystem.descr = { text: "" }; - } else { - if (typeof descr === "object") { - let [key, value] = Object.entries(descr)[0]; - personOrSystem[key] = { text: value }; - } else { - personOrSystem.descr = { text: descr }; - } - } - if (typeof sprite === "object") { - let [key, value] = Object.entries(sprite)[0]; - personOrSystem[key] = value; - } else { - personOrSystem.sprite = sprite; - } - if (typeof tags === "object") { - let [key, value] = Object.entries(tags)[0]; - personOrSystem[key] = value; - } else { - personOrSystem.tags = tags; - } - if (typeof link === "object") { - let [key, value] = Object.entries(link)[0]; - personOrSystem[key] = value; - } else { - personOrSystem.link = link; - } - personOrSystem.typeC4Shape = { text: typeC4Shape }; - personOrSystem.parentBoundary = currentBoundaryParse; - personOrSystem.wrap = autoWrap(); -}; -const addContainer = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) { - if (alias === null || label === null) { - return; - } - let container = {}; - const old = c4ShapeArray.find((container2) => container2.alias === alias); - if (old && alias === old.alias) { - container = old; - } else { - container.alias = alias; - c4ShapeArray.push(container); - } - if (label === void 0 || label === null) { - container.label = { text: "" }; - } else { - container.label = { text: label }; - } - if (techn === void 0 || techn === null) { - container.techn = { text: "" }; - } else { - if (typeof techn === "object") { - let [key, value] = Object.entries(techn)[0]; - container[key] = { text: value }; - } else { - container.techn = { text: techn }; - } - } - if (descr === void 0 || descr === null) { - container.descr = { text: "" }; - } else { - if (typeof descr === "object") { - let [key, value] = Object.entries(descr)[0]; - container[key] = { text: value }; - } else { - container.descr = { text: descr }; - } - } - if (typeof sprite === "object") { - let [key, value] = Object.entries(sprite)[0]; - container[key] = value; - } else { - container.sprite = sprite; - } - if (typeof tags === "object") { - let [key, value] = Object.entries(tags)[0]; - container[key] = value; - } else { - container.tags = tags; - } - if (typeof link === "object") { - let [key, value] = Object.entries(link)[0]; - container[key] = value; - } else { - container.link = link; - } - container.wrap = autoWrap(); - container.typeC4Shape = { text: typeC4Shape }; - container.parentBoundary = currentBoundaryParse; -}; -const addComponent = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) { - if (alias === null || label === null) { - return; - } - let component = {}; - const old = c4ShapeArray.find((component2) => component2.alias === alias); - if (old && alias === old.alias) { - component = old; - } else { - component.alias = alias; - c4ShapeArray.push(component); - } - if (label === void 0 || label === null) { - component.label = { text: "" }; - } else { - component.label = { text: label }; - } - if (techn === void 0 || techn === null) { - component.techn = { text: "" }; - } else { - if (typeof techn === "object") { - let [key, value] = Object.entries(techn)[0]; - component[key] = { text: value }; - } else { - component.techn = { text: techn }; - } - } - if (descr === void 0 || descr === null) { - component.descr = { text: "" }; - } else { - if (typeof descr === "object") { - let [key, value] = Object.entries(descr)[0]; - component[key] = { text: value }; - } else { - component.descr = { text: descr }; - } - } - if (typeof sprite === "object") { - let [key, value] = Object.entries(sprite)[0]; - component[key] = value; - } else { - component.sprite = sprite; - } - if (typeof tags === "object") { - let [key, value] = Object.entries(tags)[0]; - component[key] = value; - } else { - component.tags = tags; - } - if (typeof link === "object") { - let [key, value] = Object.entries(link)[0]; - component[key] = value; - } else { - component.link = link; - } - component.wrap = autoWrap(); - component.typeC4Shape = { text: typeC4Shape }; - component.parentBoundary = currentBoundaryParse; -}; -const addPersonOrSystemBoundary = function(alias, label, type, tags, link) { - if (alias === null || label === null) { - return; - } - let boundary = {}; - const old = boundaries.find((boundary2) => boundary2.alias === alias); - if (old && alias === old.alias) { - boundary = old; - } else { - boundary.alias = alias; - boundaries.push(boundary); - } - if (label === void 0 || label === null) { - boundary.label = { text: "" }; - } else { - boundary.label = { text: label }; - } - if (type === void 0 || type === null) { - boundary.type = { text: "system" }; - } else { - if (typeof type === "object") { - let [key, value] = Object.entries(type)[0]; - boundary[key] = { text: value }; - } else { - boundary.type = { text: type }; - } - } - if (typeof tags === "object") { - let [key, value] = Object.entries(tags)[0]; - boundary[key] = value; - } else { - boundary.tags = tags; - } - if (typeof link === "object") { - let [key, value] = Object.entries(link)[0]; - boundary[key] = value; - } else { - boundary.link = link; - } - boundary.parentBoundary = currentBoundaryParse; - boundary.wrap = autoWrap(); - parentBoundaryParse = currentBoundaryParse; - currentBoundaryParse = alias; - boundaryParseStack.push(parentBoundaryParse); -}; -const addContainerBoundary = function(alias, label, type, tags, link) { - if (alias === null || label === null) { - return; - } - let boundary = {}; - const old = boundaries.find((boundary2) => boundary2.alias === alias); - if (old && alias === old.alias) { - boundary = old; - } else { - boundary.alias = alias; - boundaries.push(boundary); - } - if (label === void 0 || label === null) { - boundary.label = { text: "" }; - } else { - boundary.label = { text: label }; - } - if (type === void 0 || type === null) { - boundary.type = { text: "container" }; - } else { - if (typeof type === "object") { - let [key, value] = Object.entries(type)[0]; - boundary[key] = { text: value }; - } else { - boundary.type = { text: type }; - } - } - if (typeof tags === "object") { - let [key, value] = Object.entries(tags)[0]; - boundary[key] = value; - } else { - boundary.tags = tags; - } - if (typeof link === "object") { - let [key, value] = Object.entries(link)[0]; - boundary[key] = value; - } else { - boundary.link = link; - } - boundary.parentBoundary = currentBoundaryParse; - boundary.wrap = autoWrap(); - parentBoundaryParse = currentBoundaryParse; - currentBoundaryParse = alias; - boundaryParseStack.push(parentBoundaryParse); -}; -const addDeploymentNode = function(nodeType, alias, label, type, descr, sprite, tags, link) { - if (alias === null || label === null) { - return; - } - let boundary = {}; - const old = boundaries.find((boundary2) => boundary2.alias === alias); - if (old && alias === old.alias) { - boundary = old; - } else { - boundary.alias = alias; - boundaries.push(boundary); - } - if (label === void 0 || label === null) { - boundary.label = { text: "" }; - } else { - boundary.label = { text: label }; - } - if (type === void 0 || type === null) { - boundary.type = { text: "node" }; - } else { - if (typeof type === "object") { - let [key, value] = Object.entries(type)[0]; - boundary[key] = { text: value }; - } else { - boundary.type = { text: type }; - } - } - if (descr === void 0 || descr === null) { - boundary.descr = { text: "" }; - } else { - if (typeof descr === "object") { - let [key, value] = Object.entries(descr)[0]; - boundary[key] = { text: value }; - } else { - boundary.descr = { text: descr }; - } - } - if (typeof tags === "object") { - let [key, value] = Object.entries(tags)[0]; - boundary[key] = value; - } else { - boundary.tags = tags; - } - if (typeof link === "object") { - let [key, value] = Object.entries(link)[0]; - boundary[key] = value; - } else { - boundary.link = link; - } - boundary.nodeType = nodeType; - boundary.parentBoundary = currentBoundaryParse; - boundary.wrap = autoWrap(); - parentBoundaryParse = currentBoundaryParse; - currentBoundaryParse = alias; - boundaryParseStack.push(parentBoundaryParse); -}; -const popBoundaryParseStack = function() { - currentBoundaryParse = parentBoundaryParse; - boundaryParseStack.pop(); - parentBoundaryParse = boundaryParseStack.pop(); - boundaryParseStack.push(parentBoundaryParse); -}; -const updateElStyle = function(typeC4Shape, elementName, bgColor, fontColor, borderColor, shadowing, shape, sprite, techn, legendText, legendSprite) { - let old = c4ShapeArray.find((element) => element.alias === elementName); - if (old === void 0) { - old = boundaries.find((element) => element.alias === elementName); - if (old === void 0) { - return; - } - } - if (bgColor !== void 0 && bgColor !== null) { - if (typeof bgColor === "object") { - let [key, value] = Object.entries(bgColor)[0]; - old[key] = value; - } else { - old.bgColor = bgColor; - } - } - if (fontColor !== void 0 && fontColor !== null) { - if (typeof fontColor === "object") { - let [key, value] = Object.entries(fontColor)[0]; - old[key] = value; - } else { - old.fontColor = fontColor; - } - } - if (borderColor !== void 0 && borderColor !== null) { - if (typeof borderColor === "object") { - let [key, value] = Object.entries(borderColor)[0]; - old[key] = value; - } else { - old.borderColor = borderColor; - } - } - if (shadowing !== void 0 && shadowing !== null) { - if (typeof shadowing === "object") { - let [key, value] = Object.entries(shadowing)[0]; - old[key] = value; - } else { - old.shadowing = shadowing; - } - } - if (shape !== void 0 && shape !== null) { - if (typeof shape === "object") { - let [key, value] = Object.entries(shape)[0]; - old[key] = value; - } else { - old.shape = shape; - } - } - if (sprite !== void 0 && sprite !== null) { - if (typeof sprite === "object") { - let [key, value] = Object.entries(sprite)[0]; - old[key] = value; - } else { - old.sprite = sprite; - } - } - if (techn !== void 0 && techn !== null) { - if (typeof techn === "object") { - let [key, value] = Object.entries(techn)[0]; - old[key] = value; - } else { - old.techn = techn; - } - } - if (legendText !== void 0 && legendText !== null) { - if (typeof legendText === "object") { - let [key, value] = Object.entries(legendText)[0]; - old[key] = value; - } else { - old.legendText = legendText; - } - } - if (legendSprite !== void 0 && legendSprite !== null) { - if (typeof legendSprite === "object") { - let [key, value] = Object.entries(legendSprite)[0]; - old[key] = value; - } else { - old.legendSprite = legendSprite; - } - } -}; -const updateRelStyle = function(typeC4Shape, from, to, textColor, lineColor, offsetX, offsetY) { - const old = rels.find((rel) => rel.from === from && rel.to === to); - if (old === void 0) { - return; - } - if (textColor !== void 0 && textColor !== null) { - if (typeof textColor === "object") { - let [key, value] = Object.entries(textColor)[0]; - old[key] = value; - } else { - old.textColor = textColor; - } - } - if (lineColor !== void 0 && lineColor !== null) { - if (typeof lineColor === "object") { - let [key, value] = Object.entries(lineColor)[0]; - old[key] = value; - } else { - old.lineColor = lineColor; - } - } - if (offsetX !== void 0 && offsetX !== null) { - if (typeof offsetX === "object") { - let [key, value] = Object.entries(offsetX)[0]; - old[key] = parseInt(value); - } else { - old.offsetX = parseInt(offsetX); - } - } - if (offsetY !== void 0 && offsetY !== null) { - if (typeof offsetY === "object") { - let [key, value] = Object.entries(offsetY)[0]; - old[key] = parseInt(value); - } else { - old.offsetY = parseInt(offsetY); - } - } -}; -const updateLayoutConfig = function(typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) { - let c4ShapeInRowValue = c4ShapeInRow$1; - let c4BoundaryInRowValue = c4BoundaryInRow$1; - if (typeof c4ShapeInRowParam === "object") { - const value = Object.values(c4ShapeInRowParam)[0]; - c4ShapeInRowValue = parseInt(value); - } else { - c4ShapeInRowValue = parseInt(c4ShapeInRowParam); - } - if (typeof c4BoundaryInRowParam === "object") { - const value = Object.values(c4BoundaryInRowParam)[0]; - c4BoundaryInRowValue = parseInt(value); - } else { - c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam); - } - if (c4ShapeInRowValue >= 1) { - c4ShapeInRow$1 = c4ShapeInRowValue; - } - if (c4BoundaryInRowValue >= 1) { - c4BoundaryInRow$1 = c4BoundaryInRowValue; - } -}; -const getC4ShapeInRow = function() { - return c4ShapeInRow$1; -}; -const getC4BoundaryInRow = function() { - return c4BoundaryInRow$1; -}; -const getCurrentBoundaryParse = function() { - return currentBoundaryParse; -}; -const getParentBoundaryParse = function() { - return parentBoundaryParse; -}; -const getC4ShapeArray = function(parentBoundary) { - if (parentBoundary === void 0 || parentBoundary === null) { - return c4ShapeArray; - } else { - return c4ShapeArray.filter((personOrSystem) => { - return personOrSystem.parentBoundary === parentBoundary; - }); - } -}; -const getC4Shape = function(alias) { - return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias); -}; -const getC4ShapeKeys = function(parentBoundary) { - return Object.keys(getC4ShapeArray(parentBoundary)); -}; -const getBoundaries = function(parentBoundary) { - if (parentBoundary === void 0 || parentBoundary === null) { - return boundaries; - } else { - return boundaries.filter((boundary) => boundary.parentBoundary === parentBoundary); - } -}; -const getBoundarys = getBoundaries; -const getRels = function() { - return rels; -}; -const getTitle = function() { - return title; -}; -const setWrap = function(wrapSetting) { - wrapEnabled = wrapSetting; -}; -const autoWrap = function() { - return wrapEnabled; -}; -const clear = function() { - c4ShapeArray = []; - boundaries = [ - { - alias: "global", - label: { text: "global" }, - type: { text: "global" }, - tags: null, - link: null, - parentBoundary: "" - } - ]; - parentBoundaryParse = ""; - currentBoundaryParse = "global"; - boundaryParseStack = [""]; - rels = []; - boundaryParseStack = [""]; - title = ""; - wrapEnabled = false; - c4ShapeInRow$1 = 4; - c4BoundaryInRow$1 = 2; -}; -const LINETYPE = { - SOLID: 0, - DOTTED: 1, - NOTE: 2, - SOLID_CROSS: 3, - DOTTED_CROSS: 4, - SOLID_OPEN: 5, - DOTTED_OPEN: 6, - LOOP_START: 10, - LOOP_END: 11, - ALT_START: 12, - ALT_ELSE: 13, - ALT_END: 14, - OPT_START: 15, - OPT_END: 16, - ACTIVE_START: 17, - ACTIVE_END: 18, - PAR_START: 19, - PAR_AND: 20, - PAR_END: 21, - RECT_START: 22, - RECT_END: 23, - SOLID_POINT: 24, - DOTTED_POINT: 25 -}; -const ARROWTYPE = { - FILLED: 0, - OPEN: 1 -}; -const PLACEMENT = { - LEFTOF: 0, - RIGHTOF: 1, - OVER: 2 -}; -const setTitle = function(txt) { - let sanitizedText = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.d)(txt, (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)()); - title = sanitizedText; -}; -const db = { - addPersonOrSystem, - addPersonOrSystemBoundary, - addContainer, - addContainerBoundary, - addComponent, - addDeploymentNode, - popBoundaryParseStack, - addRel, - updateElStyle, - updateRelStyle, - updateLayoutConfig, - autoWrap, - setWrap, - getC4ShapeArray, - getC4Shape, - getC4ShapeKeys, - getBoundaries, - getBoundarys, - getCurrentBoundaryParse, - getParentBoundaryParse, - getRels, - getTitle, - getC4Type, - getC4ShapeInRow, - getC4BoundaryInRow, - setAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.s, - getAccTitle: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.g, - getAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.a, - setAccDescription: _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.b, - getConfig: () => (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().c4, - clear, - LINETYPE, - ARROWTYPE, - PLACEMENT, - setTitle, - setC4Type - // apply, -}; -const drawRect = function(elem, rectData) { - return (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData); -}; -const drawImage = function(elem, width, height, x, y, link) { - const imageElem = elem.append("image"); - imageElem.attr("width", width); - imageElem.attr("height", height); - imageElem.attr("x", x); - imageElem.attr("y", y); - let sanitizedLink = link.startsWith("data:image/png;base64") ? link : (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Jf)(link); - imageElem.attr("xlink:href", sanitizedLink); -}; -const drawRels$1 = (elem, rels2, conf2) => { - const relsElem = elem.append("g"); - let i = 0; - for (let rel of rels2) { - let textColor = rel.textColor ? rel.textColor : "#444444"; - let strokeColor = rel.lineColor ? rel.lineColor : "#444444"; - let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0; - let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0; - let url = ""; - if (i === 0) { - let line = relsElem.append("line"); - line.attr("x1", rel.startPoint.x); - line.attr("y1", rel.startPoint.y); - line.attr("x2", rel.endPoint.x); - line.attr("y2", rel.endPoint.y); - line.attr("stroke-width", "1"); - line.attr("stroke", strokeColor); - line.style("fill", "none"); - if (rel.type !== "rel_b") { - line.attr("marker-end", "url(" + url + "#arrowhead)"); - } - if (rel.type === "birel" || rel.type === "rel_b") { - line.attr("marker-start", "url(" + url + "#arrowend)"); - } - i = -1; - } else { - let line = relsElem.append("path"); - line.attr("fill", "none").attr("stroke-width", "1").attr("stroke", strokeColor).attr( - "d", - "Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx", rel.startPoint.x).replaceAll("starty", rel.startPoint.y).replaceAll( - "controlx", - rel.startPoint.x + (rel.endPoint.x - rel.startPoint.x) / 2 - (rel.endPoint.x - rel.startPoint.x) / 4 - ).replaceAll("controly", rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2).replaceAll("stopx", rel.endPoint.x).replaceAll("stopy", rel.endPoint.y) - ); - if (rel.type !== "rel_b") { - line.attr("marker-end", "url(" + url + "#arrowhead)"); - } - if (rel.type === "birel" || rel.type === "rel_b") { - line.attr("marker-start", "url(" + url + "#arrowend)"); - } - } - let messageConf = conf2.messageFont(); - _drawTextCandidateFunc(conf2)( - rel.label.text, - relsElem, - Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX, - Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + offsetY, - rel.label.width, - rel.label.height, - { fill: textColor }, - messageConf - ); - if (rel.techn && rel.techn.text !== "") { - messageConf = conf2.messageFont(); - _drawTextCandidateFunc(conf2)( - "[" + rel.techn.text + "]", - relsElem, - Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX, - Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + conf2.messageFontSize + 5 + offsetY, - Math.max(rel.label.width, rel.techn.width), - rel.techn.height, - { fill: textColor, "font-style": "italic" }, - messageConf - ); - } - } -}; -const drawBoundary$1 = function(elem, boundary, conf2) { - const boundaryElem = elem.append("g"); - let fillColor = boundary.bgColor ? boundary.bgColor : "none"; - let strokeColor = boundary.borderColor ? boundary.borderColor : "#444444"; - let fontColor = boundary.fontColor ? boundary.fontColor : "black"; - let attrsValue = { "stroke-width": 1, "stroke-dasharray": "7.0,7.0" }; - if (boundary.nodeType) { - attrsValue = { "stroke-width": 1 }; - } - let rectData = { - x: boundary.x, - y: boundary.y, - fill: fillColor, - stroke: strokeColor, - width: boundary.width, - height: boundary.height, - rx: 2.5, - ry: 2.5, - attrs: attrsValue - }; - drawRect(boundaryElem, rectData); - let boundaryConf = conf2.boundaryFont(); - boundaryConf.fontWeight = "bold"; - boundaryConf.fontSize = boundaryConf.fontSize + 2; - boundaryConf.fontColor = fontColor; - _drawTextCandidateFunc(conf2)( - boundary.label.text, - boundaryElem, - boundary.x, - boundary.y + boundary.label.Y, - boundary.width, - boundary.height, - { fill: "#444444" }, - boundaryConf - ); - if (boundary.type && boundary.type.text !== "") { - boundaryConf = conf2.boundaryFont(); - boundaryConf.fontColor = fontColor; - _drawTextCandidateFunc(conf2)( - boundary.type.text, - boundaryElem, - boundary.x, - boundary.y + boundary.type.Y, - boundary.width, - boundary.height, - { fill: "#444444" }, - boundaryConf - ); - } - if (boundary.descr && boundary.descr.text !== "") { - boundaryConf = conf2.boundaryFont(); - boundaryConf.fontSize = boundaryConf.fontSize - 2; - boundaryConf.fontColor = fontColor; - _drawTextCandidateFunc(conf2)( - boundary.descr.text, - boundaryElem, - boundary.x, - boundary.y + boundary.descr.Y, - boundary.width, - boundary.height, - { fill: "#444444" }, - boundaryConf - ); - } -}; -const drawC4Shape = function(elem, c4Shape, conf2) { - var _a; - let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf2[c4Shape.typeC4Shape.text + "_bg_color"]; - let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf2[c4Shape.typeC4Shape.text + "_border_color"]; - let fontColor = c4Shape.fontColor ? c4Shape.fontColor : "#FFFFFF"; - let personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII="; - switch (c4Shape.typeC4Shape.text) { - case "person": - personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII="; - break; - case "external_person": - personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="; - break; - } - const c4ShapeElem = elem.append("g"); - c4ShapeElem.attr("class", "person-man"); - const rect = (0,_svgDrawCommon_5e1cfd1d_js__WEBPACK_IMPORTED_MODULE_5__.g)(); - switch (c4Shape.typeC4Shape.text) { - case "person": - case "external_person": - case "system": - case "external_system": - case "container": - case "external_container": - case "component": - case "external_component": - rect.x = c4Shape.x; - rect.y = c4Shape.y; - rect.fill = fillColor; - rect.width = c4Shape.width; - rect.height = c4Shape.height; - rect.stroke = strokeColor; - rect.rx = 2.5; - rect.ry = 2.5; - rect.attrs = { "stroke-width": 0.5 }; - drawRect(c4ShapeElem, rect); - break; - case "system_db": - case "external_system_db": - case "container_db": - case "external_container_db": - case "component_db": - case "external_component_db": - c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( - "d", - "Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2).replaceAll("height", c4Shape.height) - ); - c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( - "d", - "Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2) - ); - break; - case "system_queue": - case "external_system_queue": - case "container_queue": - case "external_container_queue": - case "component_queue": - case "external_component_queue": - c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( - "d", - "Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("width", c4Shape.width).replaceAll("half", c4Shape.height / 2) - ); - c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( - "d", - "Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx", c4Shape.x + c4Shape.width).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.height / 2) - ); - break; - } - let c4ShapeFontConf = getC4ShapeFont(conf2, c4Shape.typeC4Shape.text); - c4ShapeElem.append("text").attr("fill", fontColor).attr("font-family", c4ShapeFontConf.fontFamily).attr("font-size", c4ShapeFontConf.fontSize - 2).attr("font-style", "italic").attr("lengthAdjust", "spacing").attr("textLength", c4Shape.typeC4Shape.width).attr("x", c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2).attr("y", c4Shape.y + c4Shape.typeC4Shape.Y).text("<<" + c4Shape.typeC4Shape.text + ">>"); - switch (c4Shape.typeC4Shape.text) { - case "person": - case "external_person": - drawImage( - c4ShapeElem, - 48, - 48, - c4Shape.x + c4Shape.width / 2 - 24, - c4Shape.y + c4Shape.image.Y, - personImg - ); - break; - } - let textFontConf = conf2[c4Shape.typeC4Shape.text + "Font"](); - textFontConf.fontWeight = "bold"; - textFontConf.fontSize = textFontConf.fontSize + 2; - textFontConf.fontColor = fontColor; - _drawTextCandidateFunc(conf2)( - c4Shape.label.text, - c4ShapeElem, - c4Shape.x, - c4Shape.y + c4Shape.label.Y, - c4Shape.width, - c4Shape.height, - { fill: fontColor }, - textFontConf - ); - textFontConf = conf2[c4Shape.typeC4Shape.text + "Font"](); - textFontConf.fontColor = fontColor; - if (c4Shape.techn && ((_a = c4Shape.techn) == null ? void 0 : _a.text) !== "") { - _drawTextCandidateFunc(conf2)( - c4Shape.techn.text, - c4ShapeElem, - c4Shape.x, - c4Shape.y + c4Shape.techn.Y, - c4Shape.width, - c4Shape.height, - { fill: fontColor, "font-style": "italic" }, - textFontConf - ); - } else if (c4Shape.type && c4Shape.type.text !== "") { - _drawTextCandidateFunc(conf2)( - c4Shape.type.text, - c4ShapeElem, - c4Shape.x, - c4Shape.y + c4Shape.type.Y, - c4Shape.width, - c4Shape.height, - { fill: fontColor, "font-style": "italic" }, - textFontConf - ); - } - if (c4Shape.descr && c4Shape.descr.text !== "") { - textFontConf = conf2.personFont(); - textFontConf.fontColor = fontColor; - _drawTextCandidateFunc(conf2)( - c4Shape.descr.text, - c4ShapeElem, - c4Shape.x, - c4Shape.y + c4Shape.descr.Y, - c4Shape.width, - c4Shape.height, - { fill: fontColor }, - textFontConf - ); - } - return c4Shape.height; -}; -const insertDatabaseIcon = function(elem) { - elem.append("defs").append("symbol").attr("id", "database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr( - "d", - "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z" - ); -}; -const insertComputerIcon = function(elem) { - elem.append("defs").append("symbol").attr("id", "computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( - "d", - "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z" - ); -}; -const insertClockIcon = function(elem) { - elem.append("defs").append("symbol").attr("id", "clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( - "d", - "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z" - ); -}; -const insertArrowHead = function(elem) { - elem.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z"); -}; -const insertArrowEnd = function(elem) { - elem.append("defs").append("marker").attr("id", "arrowend").attr("refX", 1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 10 0 L 0 5 L 10 10 z"); -}; -const insertArrowFilledHead = function(elem) { - elem.append("defs").append("marker").attr("id", "filled-head").attr("refX", 18).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); -}; -const insertDynamicNumber = function(elem) { - elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6); -}; -const insertArrowCrossHead = function(elem) { - const defs = elem.append("defs"); - const marker = defs.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 16).attr("refY", 4); - marker.append("path").attr("fill", "black").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1px").attr("d", "M 9,2 V 6 L16,4 Z"); - marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1px").attr("d", "M 0,1 L 6,7 M 6,1 L 0,7"); -}; -const getC4ShapeFont = (cnf, typeC4Shape) => { - return { - fontFamily: cnf[typeC4Shape + "FontFamily"], - fontSize: cnf[typeC4Shape + "FontSize"], - fontWeight: cnf[typeC4Shape + "FontWeight"] - }; -}; -const _drawTextCandidateFunc = function() { - function byText(content, g, x, y, width, height, textAttrs) { - const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("text-anchor", "middle").text(content); - _setTextAttrs(text, textAttrs); - } - function byTspan(content, g, x, y, width, height, textAttrs, conf2) { - const { fontSize, fontFamily, fontWeight } = conf2; - const lines = content.split(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); - for (let i = 0; i < lines.length; i++) { - const dy = i * fontSize - fontSize * (lines.length - 1) / 2; - const text = g.append("text").attr("x", x + width / 2).attr("y", y).style("text-anchor", "middle").attr("dominant-baseline", "middle").style("font-size", fontSize).style("font-weight", fontWeight).style("font-family", fontFamily); - text.append("tspan").attr("dy", dy).text(lines[i]).attr("alignment-baseline", "mathematical"); - _setTextAttrs(text, textAttrs); - } - } - function byFo(content, g, x, y, width, height, textAttrs, conf2) { - const s = g.append("switch"); - const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); - const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); - text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); - byTspan(content, s, x, y, width, height, textAttrs, conf2); - _setTextAttrs(text, textAttrs); - } - function _setTextAttrs(toText, fromTextAttrsDict) { - for (const key in fromTextAttrsDict) { - if (fromTextAttrsDict.hasOwnProperty(key)) { - toText.attr(key, fromTextAttrsDict[key]); - } - } - } - return function(conf2) { - return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; - }; -}(); -const svgDraw = { - drawRect, - drawBoundary: drawBoundary$1, - drawC4Shape, - drawRels: drawRels$1, - drawImage, - insertArrowHead, - insertArrowEnd, - insertArrowFilledHead, - insertDynamicNumber, - insertArrowCrossHead, - insertDatabaseIcon, - insertComputerIcon, - insertClockIcon -}; -let globalBoundaryMaxX = 0, globalBoundaryMaxY = 0; -let c4ShapeInRow = 4; -let c4BoundaryInRow = 2; -parser.yy = db; -let conf = {}; -class Bounds { - constructor(diagObj) { - this.name = ""; - this.data = {}; - this.data.startx = void 0; - this.data.stopx = void 0; - this.data.starty = void 0; - this.data.stopy = void 0; - this.data.widthLimit = void 0; - this.nextData = {}; - this.nextData.startx = void 0; - this.nextData.stopx = void 0; - this.nextData.starty = void 0; - this.nextData.stopy = void 0; - this.nextData.cnt = 0; - setConf(diagObj.db.getConfig()); - } - setData(startx, stopx, starty, stopy) { - this.nextData.startx = this.data.startx = startx; - this.nextData.stopx = this.data.stopx = stopx; - this.nextData.starty = this.data.starty = starty; - this.nextData.stopy = this.data.stopy = stopy; - } - updateVal(obj, key, val, fun) { - if (obj[key] === void 0) { - obj[key] = val; - } else { - obj[key] = fun(val, obj[key]); - } - } - insert(c4Shape) { - this.nextData.cnt = this.nextData.cnt + 1; - let _startx = this.nextData.startx === this.nextData.stopx ? this.nextData.stopx + c4Shape.margin : this.nextData.stopx + c4Shape.margin * 2; - let _stopx = _startx + c4Shape.width; - let _starty = this.nextData.starty + c4Shape.margin * 2; - let _stopy = _starty + c4Shape.height; - if (_startx >= this.data.widthLimit || _stopx >= this.data.widthLimit || this.nextData.cnt > c4ShapeInRow) { - _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX; - _starty = this.nextData.stopy + c4Shape.margin * 2; - this.nextData.stopx = _stopx = _startx + c4Shape.width; - this.nextData.starty = this.nextData.stopy; - this.nextData.stopy = _stopy = _starty + c4Shape.height; - this.nextData.cnt = 1; - } - c4Shape.x = _startx; - c4Shape.y = _starty; - this.updateVal(this.data, "startx", _startx, Math.min); - this.updateVal(this.data, "starty", _starty, Math.min); - this.updateVal(this.data, "stopx", _stopx, Math.max); - this.updateVal(this.data, "stopy", _stopy, Math.max); - this.updateVal(this.nextData, "startx", _startx, Math.min); - this.updateVal(this.nextData, "starty", _starty, Math.min); - this.updateVal(this.nextData, "stopx", _stopx, Math.max); - this.updateVal(this.nextData, "stopy", _stopy, Math.max); - } - init(diagObj) { - this.name = ""; - this.data = { - startx: void 0, - stopx: void 0, - starty: void 0, - stopy: void 0, - widthLimit: void 0 - }; - this.nextData = { - startx: void 0, - stopx: void 0, - starty: void 0, - stopy: void 0, - cnt: 0 - }; - setConf(diagObj.db.getConfig()); - } - bumpLastMargin(margin) { - this.data.stopx += margin; - this.data.stopy += margin; - } -} -const setConf = function(cnf) { - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.f)(conf, cnf); - if (cnf.fontFamily) { - conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily; - } - if (cnf.fontSize) { - conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize; - } - if (cnf.fontWeight) { - conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight; - } -}; -const c4ShapeFont = (cnf, typeC4Shape) => { - return { - fontFamily: cnf[typeC4Shape + "FontFamily"], - fontSize: cnf[typeC4Shape + "FontSize"], - fontWeight: cnf[typeC4Shape + "FontWeight"] - }; -}; -const boundaryFont = (cnf) => { - return { - fontFamily: cnf.boundaryFontFamily, - fontSize: cnf.boundaryFontSize, - fontWeight: cnf.boundaryFontWeight - }; -}; -const messageFont = (cnf) => { - return { - fontFamily: cnf.messageFontFamily, - fontSize: cnf.messageFontSize, - fontWeight: cnf.messageFontWeight - }; -}; -function calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) { - if (!c4Shape[textType].width) { - if (c4ShapeTextWrap) { - c4Shape[textType].text = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.w)(c4Shape[textType].text, textLimitWidth, textConf); - c4Shape[textType].textLines = c4Shape[textType].text.split(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex).length; - c4Shape[textType].width = textLimitWidth; - c4Shape[textType].height = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.j)(c4Shape[textType].text, textConf); - } else { - let lines = c4Shape[textType].text.split(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); - c4Shape[textType].textLines = lines.length; - let lineHeight = 0; - c4Shape[textType].height = 0; - c4Shape[textType].width = 0; - for (const line of lines) { - c4Shape[textType].width = Math.max( - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.h)(line, textConf), - c4Shape[textType].width - ); - lineHeight = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.j)(line, textConf); - c4Shape[textType].height = c4Shape[textType].height + lineHeight; - } - } - } -} -const drawBoundary = function(diagram2, boundary, bounds) { - boundary.x = bounds.data.startx; - boundary.y = bounds.data.starty; - boundary.width = bounds.data.stopx - bounds.data.startx; - boundary.height = bounds.data.stopy - bounds.data.starty; - boundary.label.y = conf.c4ShapeMargin - 35; - let boundaryTextWrap = boundary.wrap && conf.wrap; - let boundaryLabelConf = boundaryFont(conf); - boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2; - boundaryLabelConf.fontWeight = "bold"; - let textLimitWidth = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.h)(boundary.label.text, boundaryLabelConf); - calcC4ShapeTextWH("label", boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth); - svgDraw.drawBoundary(diagram2, boundary, conf); -}; -const drawC4ShapeArray = function(currentBounds, diagram2, c4ShapeArray2, c4ShapeKeys) { - let Y = 0; - for (const c4ShapeKey of c4ShapeKeys) { - Y = 0; - const c4Shape = c4ShapeArray2[c4ShapeKey]; - let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); - c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2; - c4Shape.typeC4Shape.width = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.h)( - "«" + c4Shape.typeC4Shape.text + "»", - c4ShapeTypeConf - ); - c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2; - c4Shape.typeC4Shape.Y = conf.c4ShapePadding; - Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4; - c4Shape.image = { width: 0, height: 0, Y: 0 }; - switch (c4Shape.typeC4Shape.text) { - case "person": - case "external_person": - c4Shape.image.width = 48; - c4Shape.image.height = 48; - c4Shape.image.Y = Y; - Y = c4Shape.image.Y + c4Shape.image.height; - break; - } - if (c4Shape.sprite) { - c4Shape.image.width = 48; - c4Shape.image.height = 48; - c4Shape.image.Y = Y; - Y = c4Shape.image.Y + c4Shape.image.height; - } - let c4ShapeTextWrap = c4Shape.wrap && conf.wrap; - let textLimitWidth = conf.width - conf.c4ShapePadding * 2; - let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); - c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2; - c4ShapeLabelConf.fontWeight = "bold"; - calcC4ShapeTextWH("label", c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth); - c4Shape["label"].Y = Y + 8; - Y = c4Shape["label"].Y + c4Shape["label"].height; - if (c4Shape.type && c4Shape.type.text !== "") { - c4Shape.type.text = "[" + c4Shape.type.text + "]"; - let c4ShapeTypeConf2 = c4ShapeFont(conf, c4Shape.typeC4Shape.text); - calcC4ShapeTextWH("type", c4Shape, c4ShapeTextWrap, c4ShapeTypeConf2, textLimitWidth); - c4Shape["type"].Y = Y + 5; - Y = c4Shape["type"].Y + c4Shape["type"].height; - } else if (c4Shape.techn && c4Shape.techn.text !== "") { - c4Shape.techn.text = "[" + c4Shape.techn.text + "]"; - let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text); - calcC4ShapeTextWH("techn", c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth); - c4Shape["techn"].Y = Y + 5; - Y = c4Shape["techn"].Y + c4Shape["techn"].height; - } - let rectHeight = Y; - let rectWidth = c4Shape.label.width; - if (c4Shape.descr && c4Shape.descr.text !== "") { - let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); - calcC4ShapeTextWH("descr", c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth); - c4Shape["descr"].Y = Y + 20; - Y = c4Shape["descr"].Y + c4Shape["descr"].height; - rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width); - rectHeight = Y - c4Shape["descr"].textLines * 5; - } - rectWidth = rectWidth + conf.c4ShapePadding; - c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width); - c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height); - c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin; - currentBounds.insert(c4Shape); - svgDraw.drawC4Shape(diagram2, c4Shape, conf); - } - currentBounds.bumpLastMargin(conf.c4ShapeMargin); -}; -class Point { - constructor(x, y) { - this.x = x; - this.y = y; - } -} -let getIntersectPoint = function(fromNode, endPoint) { - let x1 = fromNode.x; - let y1 = fromNode.y; - let x2 = endPoint.x; - let y2 = endPoint.y; - let fromCenterX = x1 + fromNode.width / 2; - let fromCenterY = y1 + fromNode.height / 2; - let dx = Math.abs(x1 - x2); - let dy = Math.abs(y1 - y2); - let tanDYX = dy / dx; - let fromDYX = fromNode.height / fromNode.width; - let returnPoint = null; - if (y1 == y2 && x1 < x2) { - returnPoint = new Point(x1 + fromNode.width, fromCenterY); - } else if (y1 == y2 && x1 > x2) { - returnPoint = new Point(x1, fromCenterY); - } else if (x1 == x2 && y1 < y2) { - returnPoint = new Point(fromCenterX, y1 + fromNode.height); - } else if (x1 == x2 && y1 > y2) { - returnPoint = new Point(fromCenterX, y1); - } - if (x1 > x2 && y1 < y2) { - if (fromDYX >= tanDYX) { - returnPoint = new Point(x1, fromCenterY + tanDYX * fromNode.width / 2); - } else { - returnPoint = new Point( - fromCenterX - dx / dy * fromNode.height / 2, - y1 + fromNode.height - ); - } - } else if (x1 < x2 && y1 < y2) { - if (fromDYX >= tanDYX) { - returnPoint = new Point(x1 + fromNode.width, fromCenterY + tanDYX * fromNode.width / 2); - } else { - returnPoint = new Point( - fromCenterX + dx / dy * fromNode.height / 2, - y1 + fromNode.height - ); - } - } else if (x1 < x2 && y1 > y2) { - if (fromDYX >= tanDYX) { - returnPoint = new Point(x1 + fromNode.width, fromCenterY - tanDYX * fromNode.width / 2); - } else { - returnPoint = new Point(fromCenterX + fromNode.height / 2 * dx / dy, y1); - } - } else if (x1 > x2 && y1 > y2) { - if (fromDYX >= tanDYX) { - returnPoint = new Point(x1, fromCenterY - fromNode.width / 2 * tanDYX); - } else { - returnPoint = new Point(fromCenterX - fromNode.height / 2 * dx / dy, y1); - } - } - return returnPoint; -}; -let getIntersectPoints = function(fromNode, endNode) { - let endIntersectPoint = { x: 0, y: 0 }; - endIntersectPoint.x = endNode.x + endNode.width / 2; - endIntersectPoint.y = endNode.y + endNode.height / 2; - let startPoint = getIntersectPoint(fromNode, endIntersectPoint); - endIntersectPoint.x = fromNode.x + fromNode.width / 2; - endIntersectPoint.y = fromNode.y + fromNode.height / 2; - let endPoint = getIntersectPoint(endNode, endIntersectPoint); - return { startPoint, endPoint }; -}; -const drawRels = function(diagram2, rels2, getC4ShapeObj, diagObj) { - let i = 0; - for (let rel of rels2) { - i = i + 1; - let relTextWrap = rel.wrap && conf.wrap; - let relConf = messageFont(conf); - let diagramType = diagObj.db.getC4Type(); - if (diagramType === "C4Dynamic") { - rel.label.text = i + ": " + rel.label.text; - } - let textLimitWidth = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.h)(rel.label.text, relConf); - calcC4ShapeTextWH("label", rel, relTextWrap, relConf, textLimitWidth); - if (rel.techn && rel.techn.text !== "") { - textLimitWidth = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.h)(rel.techn.text, relConf); - calcC4ShapeTextWH("techn", rel, relTextWrap, relConf, textLimitWidth); - } - if (rel.descr && rel.descr.text !== "") { - textLimitWidth = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.h)(rel.descr.text, relConf); - calcC4ShapeTextWH("descr", rel, relTextWrap, relConf, textLimitWidth); - } - let fromNode = getC4ShapeObj(rel.from); - let endNode = getC4ShapeObj(rel.to); - let points = getIntersectPoints(fromNode, endNode); - rel.startPoint = points.startPoint; - rel.endPoint = points.endPoint; - } - svgDraw.drawRels(diagram2, rels2, conf); -}; -function drawInsideBoundary(diagram2, parentBoundaryAlias, parentBounds, currentBoundaries, diagObj) { - let currentBounds = new Bounds(diagObj); - currentBounds.data.widthLimit = parentBounds.data.widthLimit / Math.min(c4BoundaryInRow, currentBoundaries.length); - for (let [i, currentBoundary] of currentBoundaries.entries()) { - let Y = 0; - currentBoundary.image = { width: 0, height: 0, Y: 0 }; - if (currentBoundary.sprite) { - currentBoundary.image.width = 48; - currentBoundary.image.height = 48; - currentBoundary.image.Y = Y; - Y = currentBoundary.image.Y + currentBoundary.image.height; - } - let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap; - let currentBoundaryLabelConf = boundaryFont(conf); - currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2; - currentBoundaryLabelConf.fontWeight = "bold"; - calcC4ShapeTextWH( - "label", - currentBoundary, - currentBoundaryTextWrap, - currentBoundaryLabelConf, - currentBounds.data.widthLimit - ); - currentBoundary["label"].Y = Y + 8; - Y = currentBoundary["label"].Y + currentBoundary["label"].height; - if (currentBoundary.type && currentBoundary.type.text !== "") { - currentBoundary.type.text = "[" + currentBoundary.type.text + "]"; - let currentBoundaryTypeConf = boundaryFont(conf); - calcC4ShapeTextWH( - "type", - currentBoundary, - currentBoundaryTextWrap, - currentBoundaryTypeConf, - currentBounds.data.widthLimit - ); - currentBoundary["type"].Y = Y + 5; - Y = currentBoundary["type"].Y + currentBoundary["type"].height; - } - if (currentBoundary.descr && currentBoundary.descr.text !== "") { - let currentBoundaryDescrConf = boundaryFont(conf); - currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2; - calcC4ShapeTextWH( - "descr", - currentBoundary, - currentBoundaryTextWrap, - currentBoundaryDescrConf, - currentBounds.data.widthLimit - ); - currentBoundary["descr"].Y = Y + 20; - Y = currentBoundary["descr"].Y + currentBoundary["descr"].height; - } - if (i == 0 || i % c4BoundaryInRow === 0) { - let _x = parentBounds.data.startx + conf.diagramMarginX; - let _y = parentBounds.data.stopy + conf.diagramMarginY + Y; - currentBounds.setData(_x, _x, _y, _y); - } else { - let _x = currentBounds.data.stopx !== currentBounds.data.startx ? currentBounds.data.stopx + conf.diagramMarginX : currentBounds.data.startx; - let _y = currentBounds.data.starty; - currentBounds.setData(_x, _x, _y, _y); - } - currentBounds.name = currentBoundary.alias; - let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias); - let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias); - if (currentPersonOrSystemKeys.length > 0) { - drawC4ShapeArray( - currentBounds, - diagram2, - currentPersonOrSystemArray, - currentPersonOrSystemKeys - ); - } - parentBoundaryAlias = currentBoundary.alias; - let nextCurrentBoundaries = diagObj.db.getBoundarys(parentBoundaryAlias); - if (nextCurrentBoundaries.length > 0) { - drawInsideBoundary( - diagram2, - parentBoundaryAlias, - currentBounds, - nextCurrentBoundaries, - diagObj - ); - } - if (currentBoundary.alias !== "global") { - drawBoundary(diagram2, currentBoundary, currentBounds); - } - parentBounds.data.stopy = Math.max( - currentBounds.data.stopy + conf.c4ShapeMargin, - parentBounds.data.stopy - ); - parentBounds.data.stopx = Math.max( - currentBounds.data.stopx + conf.c4ShapeMargin, - parentBounds.data.stopx - ); - globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx); - globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy); - } -} -const draw = function(_text, id, _version, diagObj) { - conf = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().c4; - const securityLevel = (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.c)().securityLevel; - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)("body"); - let db2 = diagObj.db; - diagObj.db.setWrap(conf.wrap); - c4ShapeInRow = db2.getC4ShapeInRow(); - c4BoundaryInRow = db2.getC4BoundaryInRow(); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`C:${JSON.stringify(conf, null, 2)}`); - const diagram2 = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ltv)(`[id="${id}"]`); - svgDraw.insertComputerIcon(diagram2); - svgDraw.insertDatabaseIcon(diagram2); - svgDraw.insertClockIcon(diagram2); - let screenBounds = new Bounds(diagObj); - screenBounds.setData( - conf.diagramMarginX, - conf.diagramMarginX, - conf.diagramMarginY, - conf.diagramMarginY - ); - screenBounds.data.widthLimit = screen.availWidth; - globalBoundaryMaxX = conf.diagramMarginX; - globalBoundaryMaxY = conf.diagramMarginY; - const title2 = diagObj.db.getTitle(); - let currentBoundaries = diagObj.db.getBoundarys(""); - drawInsideBoundary(diagram2, "", screenBounds, currentBoundaries, diagObj); - svgDraw.insertArrowHead(diagram2); - svgDraw.insertArrowEnd(diagram2); - svgDraw.insertArrowCrossHead(diagram2); - svgDraw.insertArrowFilledHead(diagram2); - drawRels(diagram2, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj); - screenBounds.data.stopx = globalBoundaryMaxX; - screenBounds.data.stopy = globalBoundaryMaxY; - const box = screenBounds.data; - let boxHeight = box.stopy - box.starty; - let height = boxHeight + 2 * conf.diagramMarginY; - let boxWidth = box.stopx - box.startx; - const width = boxWidth + 2 * conf.diagramMarginX; - if (title2) { - diagram2.append("text").text(title2).attr("x", (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX).attr("y", box.starty + conf.diagramMarginY); - } - (0,_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf.useMaxWidth); - const extraVertForTitle = title2 ? 60 : 0; - diagram2.attr( - "viewBox", - box.startx - conf.diagramMarginX + " -" + (conf.diagramMarginY + extraVertForTitle) + " " + width + " " + (height + extraVertForTitle) - ); - _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`models:`, box); -}; -const renderer = { - drawPersonOrSystemArray: drawC4ShapeArray, - drawBoundary, - setConf, - draw -}; -const getStyles = (options) => `.person { - stroke: ${options.personBorder}; - fill: ${options.personBkg}; - } -`; -const styles = getStyles; -const diagram = { - parser: parser$1, - db, - renderer, - styles, - init: ({ c4, wrap }) => { - renderer.setConf(c4); - db.setWrap(wrap); - } -}; - - - -/***/ }), - -/***/ 28259: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ a: () => (/* binding */ drawBackgroundRect), -/* harmony export */ b: () => (/* binding */ drawEmbeddedImage), -/* harmony export */ c: () => (/* binding */ drawImage), -/* harmony export */ d: () => (/* binding */ drawRect), -/* harmony export */ e: () => (/* binding */ getTextObj), -/* harmony export */ f: () => (/* binding */ drawText), -/* harmony export */ g: () => (/* binding */ getNoteRect) -/* harmony export */ }); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16750); -/* harmony import */ var _mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99702); - - -const drawRect = (element, rectData) => { - const rectElement = element.append("rect"); - rectElement.attr("x", rectData.x); - rectElement.attr("y", rectData.y); - rectElement.attr("fill", rectData.fill); - rectElement.attr("stroke", rectData.stroke); - rectElement.attr("width", rectData.width); - rectElement.attr("height", rectData.height); - if (rectData.name) { - rectElement.attr("name", rectData.name); - } - rectData.rx !== void 0 && rectElement.attr("rx", rectData.rx); - rectData.ry !== void 0 && rectElement.attr("ry", rectData.ry); - if (rectData.attrs !== void 0) { - for (const attrKey in rectData.attrs) { - rectElement.attr(attrKey, rectData.attrs[attrKey]); - } - } - rectData.class !== void 0 && rectElement.attr("class", rectData.class); - return rectElement; -}; -const drawBackgroundRect = (element, bounds) => { - const rectData = { - x: bounds.startx, - y: bounds.starty, - width: bounds.stopx - bounds.startx, - height: bounds.stopy - bounds.starty, - fill: bounds.fill, - stroke: bounds.stroke, - class: "rect" - }; - const rectElement = drawRect(element, rectData); - rectElement.lower(); -}; -const drawText = (element, textData) => { - const nText = textData.text.replace(_mermaid_6dc72991_js__WEBPACK_IMPORTED_MODULE_1__.J, " "); - const textElem = element.append("text"); - textElem.attr("x", textData.x); - textElem.attr("y", textData.y); - textElem.attr("class", "legend"); - textElem.style("text-anchor", textData.anchor); - textData.class !== void 0 && textElem.attr("class", textData.class); - const tspan = textElem.append("tspan"); - tspan.attr("x", textData.x + textData.textMargin * 2); - tspan.text(nText); - return textElem; -}; -const drawImage = (elem, x, y, link) => { - const imageElement = elem.append("image"); - imageElement.attr("x", x); - imageElement.attr("y", y); - const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Jf)(link); - imageElement.attr("xlink:href", sanitizedLink); -}; -const drawEmbeddedImage = (element, x, y, link) => { - const imageElement = element.append("use"); - imageElement.attr("x", x); - imageElement.attr("y", y); - const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Jf)(link); - imageElement.attr("xlink:href", `#${sanitizedLink}`); -}; -const getNoteRect = () => { - const noteRectData = { - x: 0, - y: 0, - width: 100, - height: 100, - fill: "#EDF2AE", - stroke: "#666", - anchor: "start", - rx: 0, - ry: 0 - }; - return noteRectData; -}; -const getTextObj = () => { - const testObject = { - x: 0, - y: 0, - width: 100, - height: 100, - "text-anchor": "start", - style: "#666", - textMargin: 0, - rx: 0, - ry: 0, - tspan: true - }; - return testObject; -}; - - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/952b3fdc.bf8bb02d.js b/pr-preview/pr-1594/assets/js/952b3fdc.bf8bb02d.js deleted file mode 100644 index 7e7d32e1ca..0000000000 --- a/pr-preview/pr-1594/assets/js/952b3fdc.bf8bb02d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4886],{88582:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>n,toc:()=>c});var i=s(74848),t=s(28453);const a={},o="Jira",n={id:"reference/Connectors/capture-connectors/jira",title:"Jira",description:"This connector captures data from Jira into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/jira.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/jira",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/jira.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Iterable",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable"},next:{title:"Jira HTTP Ingest (Webhook)",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest"}},l={},c=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function p(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.h1,{id:"jira",children:"Jira"}),"\n",(0,i.jsx)(r.p,{children:"This connector captures data from Jira into Flow collections."}),"\n",(0,i.jsxs)(r.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,i.jsx)(r.a,{href:"https://ghcr.io/estuary/source-jira:dev",children:(0,i.jsx)(r.code,{children:"ghcr.io/estuary/source-jira:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,i.jsx)(r.p,{children:"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system."}),"\n",(0,i.jsxs)(r.p,{children:["You can find their documentation ",(0,i.jsx)(r.a,{href:"https://docs.airbyte.com/integrations/sources/jira/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,i.jsx)(r.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,i.jsx)(r.p,{children:"The following data resources are supported through the Jira APIs:"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-application-roles/#api-rest-api-3-applicationrole-get",children:"Application roles"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-avatars/#api-rest-api-3-avatar-type-system-get",children:"Avatars"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/software/rest/api-group-other-operations/#api-agile-1-0-board-get",children:"Boards"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-dashboards/#api-rest-api-3-dashboard-get",children:"Dashboards"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-filters/#api-rest-api-3-filter-search-get",children:"Filters"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-filter-sharing/#api-rest-api-3-filter-id-permission-get",children:"Filter sharing"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-groups/#api-rest-api-3-groups-picker-get",children:"Groups"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-fields/#api-rest-api-3-field-get",children:"Issue fields"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-field-configurations/#api-rest-api-3-fieldconfiguration-get",children:"Issue field configurations"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-custom-field-contexts/#api-rest-api-3-field-fieldid-context-get",children:"Issue custom field contexts"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-link-types/#api-rest-api-3-issuelinktype-get",children:"Issue link types"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-navigator-settings/#api-rest-api-3-settings-columns-get",children:"Issue navigator settings"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-notification-schemes/#api-rest-api-3-notificationscheme-get",children:"Issue notification schemes"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-priorities/#api-rest-api-3-priority-get",children:"Issue priorities"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-properties/#api-rest-api-3-issue-issueidorkey-properties-propertykey-get",children:"Issue properties"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-remote-links/#api-rest-api-3-issue-issueidorkey-remotelink-get",children:"Issue remote links"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-resolutions/#api-rest-api-3-resolution-search-get",children:"Issue resolutions"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-security-schemes/#api-rest-api-3-issuesecurityschemes-get",children:"Issue security schemes"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-type-schemes/#api-rest-api-3-issuetypescheme-get",children:"Issue type schemes"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-type-screen-schemes/#api-rest-api-3-issuetypescreenscheme-get",children:"Issue type screen schemes"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-votes/#api-group-issue-votes",children:"Issue votes"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-watchers/#api-rest-api-3-issue-issueidorkey-watchers-get",children:"Issue watchers"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-jira-settings/#api-rest-api-3-application-properties-get",children:"Jira settings"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-labels/#api-rest-api-3-label-get",children:"Labels"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-permissions/#api-rest-api-3-mypermissions-get",children:"Permissions"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-permission-schemes/#api-rest-api-3-permissionscheme-get",children:"Permission schemes"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-search-get",children:"Projects"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-avatars/#api-rest-api-3-project-projectidorkey-avatars-get",children:"Project avatars"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-categories/#api-rest-api-3-projectcategory-get",children:"Project categories"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-components/#api-rest-api-3-project-projectidorkey-component-get",children:"Project components"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-email/#api-rest-api-3-project-projectid-email-get",children:"Project email"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-permission-schemes/#api-group-project-permission-schemes",children:"Project permission schemes"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-types/#api-rest-api-3-project-type-get",children:"Project types"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-versions/#api-rest-api-3-project-projectidorkey-version-get",children:"Project versions"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screens/#api-rest-api-3-screens-get",children:"Screens"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-tabs/#api-rest-api-3-screens-screenid-tabs-get",children:"Screen tabs"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-tab-fields/#api-rest-api-3-screens-screenid-tabs-tabid-fields-get",children:"Screen tab fields"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-schemes/#api-rest-api-3-screenscheme-get",children:"Screen schemes"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-rest-agile-1-0-board-boardid-sprint-get",children:"Sprints"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-time-tracking/#api-rest-api-3-configuration-timetracking-list-get",children:"Time tracking"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-user-search/#api-rest-api-3-user-search-get",children:"Users"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-users/#api-rest-api-3-user-get",children:"UsersGroupsDetailed"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflows/#api-rest-api-3-workflow-search-get",children:"Workflows"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-schemes/#api-rest-api-3-workflowscheme-get",children:"Workflow schemes"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-statuses/#api-rest-api-3-status-get",children:"Workflow statuses"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-status-categories/#api-rest-api-3-statuscategory-get",children:"Workflow status categories"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-rest-agile-1-0-board-boardid-issue-get",children:"Board issues"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-comments/#api-rest-api-3-issue-issueidorkey-comment-get",children:"Issue comments"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-worklogs/#api-rest-api-3-issue-issueidorkey-worklog-get",children:"Issue worklogs"})}),"\n",(0,i.jsx)(r.li,{children:(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-search/#api-rest-api-3-search-get",children:"Issues"})}),"\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.a,{href:"https://developer.atlassian.com/cloud/jira/software/rest/api-group-sprint/#api-rest-agile-1-0-sprint-sprintid-issue-get",children:"Sprint issues"}),"\nBy default, each resource is mapped to a Flow collection through a separate binding."]}),"\n"]}),"\n",(0,i.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:["API Token: You can create an API token following ",(0,i.jsx)(r.a,{href:"https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/",children:"these steps from Jira"})]}),"\n",(0,i.jsx)(r.li,{children:"Domain"}),"\n",(0,i.jsx)(r.li,{children:"Email"}),"\n"]}),"\n",(0,i.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsxs)(r.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,i.jsx)(r.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Jira source connector."]}),"\n",(0,i.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,i.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,i.jsxs)(r.table,{children:[(0,i.jsx)(r.thead,{children:(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.th,{children:"Property"}),(0,i.jsx)(r.th,{children:"Title"}),(0,i.jsx)(r.th,{children:"Description"}),(0,i.jsx)(r.th,{children:"Type"}),(0,i.jsx)(r.th,{children:"Required/Default"})]})}),(0,i.jsxs)(r.tbody,{children:[(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:(0,i.jsx)(r.code,{children:"/api_token"})}),(0,i.jsx)(r.td,{children:"API Token"}),(0,i.jsx)(r.td,{children:"Jira API Token is used for Authorization to your account by BasicAuth."}),(0,i.jsx)(r.td,{children:"string"}),(0,i.jsx)(r.td,{children:"Required"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:(0,i.jsx)(r.code,{children:"/domain"})}),(0,i.jsx)(r.td,{children:"Domain"}),(0,i.jsx)(r.td,{children:"The Domain for your Jira account, e.g. estuary.atlassian.net, estuary.jira.com, jira.your-domain.com"}),(0,i.jsx)(r.td,{children:"string"}),(0,i.jsx)(r.td,{children:"Required"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:(0,i.jsx)(r.code,{children:"/email"})}),(0,i.jsx)(r.td,{children:"Email"}),(0,i.jsx)(r.td,{children:"The user email for your Jira account which you used to generate the API token. This field is used for Authorization to your account by BasicAuth."}),(0,i.jsx)(r.td,{children:"string"}),(0,i.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,i.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,i.jsxs)(r.table,{children:[(0,i.jsx)(r.thead,{children:(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.th,{children:"Property"}),(0,i.jsx)(r.th,{children:"Title"}),(0,i.jsx)(r.th,{children:"Description"}),(0,i.jsx)(r.th,{children:"Type"}),(0,i.jsx)(r.th,{children:"Required/Default"})]})}),(0,i.jsxs)(r.tbody,{children:[(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:(0,i.jsx)(r.strong,{children:(0,i.jsx)(r.code,{children:"/stream"})})}),(0,i.jsx)(r.td,{children:"Stream"}),(0,i.jsx)(r.td,{children:"Resource of your Jira project from which collections are captured."}),(0,i.jsx)(r.td,{children:"string"}),(0,i.jsx)(r.td,{children:"Required"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:(0,i.jsx)(r.strong,{children:(0,i.jsx)(r.code,{children:"/syncMode"})})}),(0,i.jsx)(r.td,{children:"Sync Mode"}),(0,i.jsx)(r.td,{children:"Connection method."}),(0,i.jsx)(r.td,{children:"string"}),(0,i.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,i.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-jira:dev\n config:\n api_token: <token>\n domain: <domain>\n email: <email>\n bindings:\n - resource:\n stream: issues\n syncMode: incremental\n target: ${PREFIX}/issues\n {...}\n"})})]})}function d(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},28453:(e,r,s)=>{s.d(r,{R:()=>o,x:()=>n});var i=s(96540);const t={},a=i.createContext(t);function o(e){const r=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function n(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(a.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9610.9966723f.js b/pr-preview/pr-1594/assets/js/9610.9966723f.js deleted file mode 100644 index e9882aa5dd..0000000000 --- a/pr-preview/pr-1594/assets/js/9610.9966723f.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 9610.9966723f.js.LICENSE.txt */ -(self.webpackChunksite=self.webpackChunksite||[]).push([[9610],{16750:(t,e)=>{"use strict";e.Jf=e.dz=void 0;var i=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,n=/&(newline|tab);/gi,o=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^.+(:|:)/gim,s=[".","/"];e.dz="about:blank",e.Jf=function(t){if(!t)return e.dz;var l,h=(l=t,l.replace(o,"").replace(r,(function(t,e){return String.fromCharCode(e)}))).replace(n,"").replace(o,"").trim();if(!h)return e.dz;if(function(t){return s.indexOf(t[0])>-1}(h))return h;var c=h.match(a);if(!c)return h;var u=c[0];return i.test(u)?e.dz:h}},74353:function(t){t.exports=function(){"use strict";var t=1e3,e=6e4,i=36e5,r="millisecond",n="second",o="minute",a="hour",s="day",l="week",h="month",c="quarter",u="year",d="date",f="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,y={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},m=function(t,e,i){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(i)+t},C={s:m,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),r=Math.floor(i/60),n=i%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(n,2,"0")},m:function t(e,i){if(e.date()<i.date())return-t(i,e);var r=12*(i.year()-e.year())+(i.month()-e.month()),n=e.clone().add(r,h),o=i-n<0,a=e.clone().add(r+(o?-1:1),h);return+(-(r+(i-n)/(o?n-a:a-n))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:h,y:u,w:l,d:s,D:d,h:a,m:o,s:n,ms:r,Q:c}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},x="en",_={};_[x]=y;var b="$isDayjsObject",v=function(t){return t instanceof w||!(!t||!t[b])},k=function t(e,i,r){var n;if(!e)return x;if("string"==typeof e){var o=e.toLowerCase();_[o]&&(n=o),i&&(_[o]=i,n=o);var a=e.split("-");if(!n&&a.length>1)return t(a[0])}else{var s=e.name;_[s]=e,n=s}return!r&&n&&(x=n),n||!r&&x},T=function(t,e){if(v(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new w(i)},A=C;A.l=k,A.i=v,A.w=function(t,e){return T(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var w=function(){function y(t){this.$L=k(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[b]=!0}var m=y.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(A.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(p);if(r){var n=r[2]-1||0,o=(r[7]||"0").substring(0,3);return i?new Date(Date.UTC(r[1],n,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],n,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return A},m.isValid=function(){return!(this.$d.toString()===f)},m.isSame=function(t,e){var i=T(t);return this.startOf(e)<=i&&i<=this.endOf(e)},m.isAfter=function(t,e){return T(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<T(t)},m.$g=function(t,e,i){return A.u(t)?this[e]:this.set(i,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var i=this,r=!!A.u(e)||e,c=A.p(t),f=function(t,e){var n=A.w(i.$u?Date.UTC(i.$y,e,t):new Date(i.$y,e,t),i);return r?n:n.endOf(s)},p=function(t,e){return A.w(i.toDate()[t].apply(i.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),i)},g=this.$W,y=this.$M,m=this.$D,C="set"+(this.$u?"UTC":"");switch(c){case u:return r?f(1,0):f(31,11);case h:return r?f(1,y):f(0,y+1);case l:var x=this.$locale().weekStart||0,_=(g<x?g+7:g)-x;return f(r?m-_:m+(6-_),y);case s:case d:return p(C+"Hours",0);case a:return p(C+"Minutes",1);case o:return p(C+"Seconds",2);case n:return p(C+"Milliseconds",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var i,l=A.p(t),c="set"+(this.$u?"UTC":""),f=(i={},i[s]=c+"Date",i[d]=c+"Date",i[h]=c+"Month",i[u]=c+"FullYear",i[a]=c+"Hours",i[o]=c+"Minutes",i[n]=c+"Seconds",i[r]=c+"Milliseconds",i)[l],p=l===s?this.$D+(e-this.$W):e;if(l===h||l===u){var g=this.clone().set(d,1);g.$d[f](p),g.init(),this.$d=g.set(d,Math.min(this.$D,g.daysInMonth())).$d}else f&&this.$d[f](p);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[A.p(t)]()},m.add=function(r,c){var d,f=this;r=Number(r);var p=A.p(c),g=function(t){var e=T(f);return A.w(e.date(e.date()+Math.round(t*r)),f)};if(p===h)return this.set(h,this.$M+r);if(p===u)return this.set(u,this.$y+r);if(p===s)return g(1);if(p===l)return g(7);var y=(d={},d[o]=e,d[a]=i,d[n]=t,d)[p]||1,m=this.$d.getTime()+r*y;return A.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,i=this.$locale();if(!this.isValid())return i.invalidDate||f;var r=t||"YYYY-MM-DDTHH:mm:ssZ",n=A.z(this),o=this.$H,a=this.$m,s=this.$M,l=i.weekdays,h=i.months,c=i.meridiem,u=function(t,i,n,o){return t&&(t[i]||t(e,r))||n[i].slice(0,o)},d=function(t){return A.s(o%12||12,t,"0")},p=c||function(t,e,i){var r=t<12?"AM":"PM";return i?r.toLowerCase():r};return r.replace(g,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return A.s(e.$y,4,"0");case"M":return s+1;case"MM":return A.s(s+1,2,"0");case"MMM":return u(i.monthsShort,s,h,3);case"MMMM":return u(h,s);case"D":return e.$D;case"DD":return A.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return u(i.weekdaysMin,e.$W,l,2);case"ddd":return u(i.weekdaysShort,e.$W,l,3);case"dddd":return l[e.$W];case"H":return String(o);case"HH":return A.s(o,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return p(o,a,!0);case"A":return p(o,a,!1);case"m":return String(a);case"mm":return A.s(a,2,"0");case"s":return String(e.$s);case"ss":return A.s(e.$s,2,"0");case"SSS":return A.s(e.$ms,3,"0");case"Z":return n}return null}(t)||n.replace(":","")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,f){var p,g=this,y=A.p(d),m=T(r),C=(m.utcOffset()-this.utcOffset())*e,x=this-m,_=function(){return A.m(g,m)};switch(y){case u:p=_()/12;break;case h:p=_();break;case c:p=_()/3;break;case l:p=(x-C)/6048e5;break;case s:p=(x-C)/864e5;break;case a:p=x/i;break;case o:p=x/e;break;case n:p=x/t;break;default:p=x}return f?p:A.a(p)},m.daysInMonth=function(){return this.endOf(h).$D},m.$locale=function(){return _[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var i=this.clone(),r=k(t,e,!0);return r&&(i.$L=r),i},m.clone=function(){return A.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},y}(),S=w.prototype;return T.prototype=S,[["$ms",r],["$s",n],["$m",o],["$H",a],["$W",s],["$M",h],["$y",u],["$D",d]].forEach((function(t){S[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),T.extend=function(t,e){return t.$i||(t(e,w,T),t.$i=!0),T},T.locale=k,T.isDayjs=v,T.unix=function(t){return T(1e3*t)},T.en=_[x],T.Ls=_,T.p={},T}()},42838:function(t){t.exports=function(){"use strict";const{entries:t,setPrototypeOf:e,isFrozen:i,getPrototypeOf:r,getOwnPropertyDescriptor:n}=Object;let{freeze:o,seal:a,create:s}=Object,{apply:l,construct:h}="undefined"!=typeof Reflect&&Reflect;o||(o=function(t){return t}),a||(a=function(t){return t}),l||(l=function(t,e,i){return t.apply(e,i)}),h||(h=function(t,e){return new t(...e)});const c=v(Array.prototype.forEach),u=v(Array.prototype.pop),d=v(Array.prototype.push),f=v(String.prototype.toLowerCase),p=v(String.prototype.toString),g=v(String.prototype.match),y=v(String.prototype.replace),m=v(String.prototype.indexOf),C=v(String.prototype.trim),x=v(Object.prototype.hasOwnProperty),_=v(RegExp.prototype.test),b=k(TypeError);function v(t){return function(e){for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n<i;n++)r[n-1]=arguments[n];return l(t,e,r)}}function k(t){return function(){for(var e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];return h(t,i)}}function T(t,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f;e&&e(t,null);let o=r.length;for(;o--;){let e=r[o];if("string"==typeof e){const t=n(e);t!==e&&(i(r)||(r[o]=t),e=t)}t[e]=!0}return t}function A(t){for(let e=0;e<t.length;e++)x(t,e)||(t[e]=null);return t}function w(e){const i=s(null);for(const[r,n]of t(e))x(e,r)&&(Array.isArray(n)?i[r]=A(n):n&&"object"==typeof n&&n.constructor===Object?i[r]=w(n):i[r]=n);return i}function S(t,e){for(;null!==t;){const i=n(t,e);if(i){if(i.get)return v(i.get);if("function"==typeof i.value)return v(i.value)}t=r(t)}function i(){return null}return i}const B=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),F=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),L=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),M=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),E=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),O=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),I=o(["#text"]),D=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),q=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),N=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),$=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),z=a(/\{\{[\w\W]*|[\w\W]*\}\}/gm),P=a(/<%[\w\W]*|[\w\W]*%>/gm),j=a(/\${[\w\W]*}/gm),R=a(/^data-[\-\w.\u00B7-\uFFFF]/),W=a(/^aria-[\-\w]+$/),U=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),H=a(/^(?:\w+script|data):/i),Y=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),V=a(/^html$/i);var G=Object.freeze({__proto__:null,MUSTACHE_EXPR:z,ERB_EXPR:P,TMPLIT_EXPR:j,DATA_ATTR:R,ARIA_ATTR:W,IS_ALLOWED_URI:U,IS_SCRIPT_OR_DATA:H,ATTR_WHITESPACE:Y,DOCTYPE_NAME:V});const X=function(){return"undefined"==typeof window?null:window},Z=function(t,e){if("object"!=typeof t||"function"!=typeof t.createPolicy)return null;let i=null;const r="data-tt-policy-suffix";e&&e.hasAttribute(r)&&(i=e.getAttribute(r));const n="dompurify"+(i?"#"+i:"");try{return t.createPolicy(n,{createHTML:t=>t,createScriptURL:t=>t})}catch(o){return console.warn("TrustedTypes policy "+n+" could not be created."),null}};function J(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:X();const i=t=>J(t);if(i.version="3.0.9",i.removed=[],!e||!e.document||9!==e.document.nodeType)return i.isSupported=!1,i;let{document:r}=e;const n=r,a=n.currentScript,{DocumentFragment:l,HTMLTemplateElement:h,Node:v,Element:k,NodeFilter:A,NamedNodeMap:z=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:P,DOMParser:j,trustedTypes:R}=e,W=k.prototype,H=S(W,"cloneNode"),Y=S(W,"nextSibling"),Q=S(W,"childNodes"),K=S(W,"parentNode");if("function"==typeof h){const t=r.createElement("template");t.content&&t.content.ownerDocument&&(r=t.content.ownerDocument)}let tt,et="";const{implementation:it,createNodeIterator:rt,createDocumentFragment:nt,getElementsByTagName:ot}=r,{importNode:at}=n;let st={};i.isSupported="function"==typeof t&&"function"==typeof K&&it&&void 0!==it.createHTMLDocument;const{MUSTACHE_EXPR:lt,ERB_EXPR:ht,TMPLIT_EXPR:ct,DATA_ATTR:ut,ARIA_ATTR:dt,IS_SCRIPT_OR_DATA:ft,ATTR_WHITESPACE:pt}=G;let{IS_ALLOWED_URI:gt}=G,yt=null;const mt=T({},[...B,...F,...L,...E,...I]);let Ct=null;const xt=T({},[...D,...q,...N,...$]);let _t=Object.seal(s(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),bt=null,vt=null,kt=!0,Tt=!0,At=!1,wt=!0,St=!1,Bt=!1,Ft=!1,Lt=!1,Mt=!1,Et=!1,Ot=!1,It=!0,Dt=!1;const qt="user-content-";let Nt=!0,$t=!1,zt={},Pt=null;const jt=T({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Rt=null;const Wt=T({},["audio","video","img","source","image","track"]);let Ut=null;const Ht=T({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Yt="http://www.w3.org/1998/Math/MathML",Vt="http://www.w3.org/2000/svg",Gt="http://www.w3.org/1999/xhtml";let Xt=Gt,Zt=!1,Jt=null;const Qt=T({},[Yt,Vt,Gt],p);let Kt=null;const te=["application/xhtml+xml","text/html"],ee="text/html";let ie=null,re=null;const ne=r.createElement("form"),oe=function(t){return t instanceof RegExp||t instanceof Function},ae=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!re||re!==t){if(t&&"object"==typeof t||(t={}),t=w(t),Kt=-1===te.indexOf(t.PARSER_MEDIA_TYPE)?ee:t.PARSER_MEDIA_TYPE,ie="application/xhtml+xml"===Kt?p:f,yt=x(t,"ALLOWED_TAGS")?T({},t.ALLOWED_TAGS,ie):mt,Ct=x(t,"ALLOWED_ATTR")?T({},t.ALLOWED_ATTR,ie):xt,Jt=x(t,"ALLOWED_NAMESPACES")?T({},t.ALLOWED_NAMESPACES,p):Qt,Ut=x(t,"ADD_URI_SAFE_ATTR")?T(w(Ht),t.ADD_URI_SAFE_ATTR,ie):Ht,Rt=x(t,"ADD_DATA_URI_TAGS")?T(w(Wt),t.ADD_DATA_URI_TAGS,ie):Wt,Pt=x(t,"FORBID_CONTENTS")?T({},t.FORBID_CONTENTS,ie):jt,bt=x(t,"FORBID_TAGS")?T({},t.FORBID_TAGS,ie):{},vt=x(t,"FORBID_ATTR")?T({},t.FORBID_ATTR,ie):{},zt=!!x(t,"USE_PROFILES")&&t.USE_PROFILES,kt=!1!==t.ALLOW_ARIA_ATTR,Tt=!1!==t.ALLOW_DATA_ATTR,At=t.ALLOW_UNKNOWN_PROTOCOLS||!1,wt=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,St=t.SAFE_FOR_TEMPLATES||!1,Bt=t.WHOLE_DOCUMENT||!1,Mt=t.RETURN_DOM||!1,Et=t.RETURN_DOM_FRAGMENT||!1,Ot=t.RETURN_TRUSTED_TYPE||!1,Lt=t.FORCE_BODY||!1,It=!1!==t.SANITIZE_DOM,Dt=t.SANITIZE_NAMED_PROPS||!1,Nt=!1!==t.KEEP_CONTENT,$t=t.IN_PLACE||!1,gt=t.ALLOWED_URI_REGEXP||U,Xt=t.NAMESPACE||Gt,_t=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&oe(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(_t.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&oe(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(_t.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(_t.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),St&&(Tt=!1),Et&&(Mt=!0),zt&&(yt=T({},I),Ct=[],!0===zt.html&&(T(yt,B),T(Ct,D)),!0===zt.svg&&(T(yt,F),T(Ct,q),T(Ct,$)),!0===zt.svgFilters&&(T(yt,L),T(Ct,q),T(Ct,$)),!0===zt.mathMl&&(T(yt,E),T(Ct,N),T(Ct,$))),t.ADD_TAGS&&(yt===mt&&(yt=w(yt)),T(yt,t.ADD_TAGS,ie)),t.ADD_ATTR&&(Ct===xt&&(Ct=w(Ct)),T(Ct,t.ADD_ATTR,ie)),t.ADD_URI_SAFE_ATTR&&T(Ut,t.ADD_URI_SAFE_ATTR,ie),t.FORBID_CONTENTS&&(Pt===jt&&(Pt=w(Pt)),T(Pt,t.FORBID_CONTENTS,ie)),Nt&&(yt["#text"]=!0),Bt&&T(yt,["html","head","body"]),yt.table&&(T(yt,["tbody"]),delete bt.tbody),t.TRUSTED_TYPES_POLICY){if("function"!=typeof t.TRUSTED_TYPES_POLICY.createHTML)throw b('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof t.TRUSTED_TYPES_POLICY.createScriptURL)throw b('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');tt=t.TRUSTED_TYPES_POLICY,et=tt.createHTML("")}else void 0===tt&&(tt=Z(R,a)),null!==tt&&"string"==typeof et&&(et=tt.createHTML(""));o&&o(t),re=t}},se=T({},["mi","mo","mn","ms","mtext"]),le=T({},["foreignobject","desc","title","annotation-xml"]),he=T({},["title","style","font","a","script"]),ce=T({},[...F,...L,...M]),ue=T({},[...E,...O]),de=function(t){let e=K(t);e&&e.tagName||(e={namespaceURI:Xt,tagName:"template"});const i=f(t.tagName),r=f(e.tagName);return!!Jt[t.namespaceURI]&&(t.namespaceURI===Vt?e.namespaceURI===Gt?"svg"===i:e.namespaceURI===Yt?"svg"===i&&("annotation-xml"===r||se[r]):Boolean(ce[i]):t.namespaceURI===Yt?e.namespaceURI===Gt?"math"===i:e.namespaceURI===Vt?"math"===i&&le[r]:Boolean(ue[i]):t.namespaceURI===Gt?!(e.namespaceURI===Vt&&!le[r])&&!(e.namespaceURI===Yt&&!se[r])&&!ue[i]&&(he[i]||!ce[i]):!("application/xhtml+xml"!==Kt||!Jt[t.namespaceURI]))},fe=function(t){d(i.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){t.remove()}},pe=function(t,e){try{d(i.removed,{attribute:e.getAttributeNode(t),from:e})}catch(r){d(i.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!Ct[t])if(Mt||Et)try{fe(e)}catch(r){}else try{e.setAttribute(t,"")}catch(r){}},ge=function(t){let e=null,i=null;if(Lt)t="<remove></remove>"+t;else{const e=g(t,/^[\r\n\t ]+/);i=e&&e[0]}"application/xhtml+xml"===Kt&&Xt===Gt&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");const n=tt?tt.createHTML(t):t;if(Xt===Gt)try{e=(new j).parseFromString(n,Kt)}catch(a){}if(!e||!e.documentElement){e=it.createDocument(Xt,"template",null);try{e.documentElement.innerHTML=Zt?et:n}catch(a){}}const o=e.body||e.documentElement;return t&&i&&o.insertBefore(r.createTextNode(i),o.childNodes[0]||null),Xt===Gt?ot.call(e,Bt?"html":"body")[0]:Bt?e.documentElement:o},ye=function(t){return rt.call(t.ownerDocument||t,t,A.SHOW_ELEMENT|A.SHOW_COMMENT|A.SHOW_TEXT,null)},me=function(t){return t instanceof P&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof z)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},Ce=function(t){return"function"==typeof v&&t instanceof v},xe=function(t,e,r){st[t]&&c(st[t],(t=>{t.call(i,e,r,re)}))},_e=function(t){let e=null;if(xe("beforeSanitizeElements",t,null),me(t))return fe(t),!0;const r=ie(t.nodeName);if(xe("uponSanitizeElement",t,{tagName:r,allowedTags:yt}),t.hasChildNodes()&&!Ce(t.firstElementChild)&&_(/<[/\w]/g,t.innerHTML)&&_(/<[/\w]/g,t.textContent))return fe(t),!0;if(!yt[r]||bt[r]){if(!bt[r]&&ve(r)){if(_t.tagNameCheck instanceof RegExp&&_(_t.tagNameCheck,r))return!1;if(_t.tagNameCheck instanceof Function&&_t.tagNameCheck(r))return!1}if(Nt&&!Pt[r]){const e=K(t)||t.parentNode,i=Q(t)||t.childNodes;if(i&&e)for(let r=i.length-1;r>=0;--r)e.insertBefore(H(i[r],!0),Y(t))}return fe(t),!0}return t instanceof k&&!de(t)?(fe(t),!0):"noscript"!==r&&"noembed"!==r&&"noframes"!==r||!_(/<\/no(script|embed|frames)/i,t.innerHTML)?(St&&3===t.nodeType&&(e=t.textContent,c([lt,ht,ct],(t=>{e=y(e,t," ")})),t.textContent!==e&&(d(i.removed,{element:t.cloneNode()}),t.textContent=e)),xe("afterSanitizeElements",t,null),!1):(fe(t),!0)},be=function(t,e,i){if(It&&("id"===e||"name"===e)&&(i in r||i in ne))return!1;if(Tt&&!vt[e]&&_(ut,e));else if(kt&&_(dt,e));else if(!Ct[e]||vt[e]){if(!(ve(t)&&(_t.tagNameCheck instanceof RegExp&&_(_t.tagNameCheck,t)||_t.tagNameCheck instanceof Function&&_t.tagNameCheck(t))&&(_t.attributeNameCheck instanceof RegExp&&_(_t.attributeNameCheck,e)||_t.attributeNameCheck instanceof Function&&_t.attributeNameCheck(e))||"is"===e&&_t.allowCustomizedBuiltInElements&&(_t.tagNameCheck instanceof RegExp&&_(_t.tagNameCheck,i)||_t.tagNameCheck instanceof Function&&_t.tagNameCheck(i))))return!1}else if(Ut[e]);else if(_(gt,y(i,pt,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==m(i,"data:")||!Rt[t])if(At&&!_(ft,y(i,pt,"")));else if(i)return!1;return!0},ve=function(t){return"annotation-xml"!==t&&t.indexOf("-")>0},ke=function(t){xe("beforeSanitizeAttributes",t,null);const{attributes:e}=t;if(!e)return;const r={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ct};let n=e.length;for(;n--;){const a=e[n],{name:s,namespaceURI:l,value:h}=a,d=ie(s);let f="value"===s?h:C(h);if(r.attrName=d,r.attrValue=f,r.keepAttr=!0,r.forceKeepAttr=void 0,xe("uponSanitizeAttribute",t,r),f=r.attrValue,r.forceKeepAttr)continue;if(pe(s,t),!r.keepAttr)continue;if(!wt&&_(/\/>/i,f)){pe(s,t);continue}St&&c([lt,ht,ct],(t=>{f=y(f,t," ")}));const p=ie(t.nodeName);if(be(p,d,f)){if(!Dt||"id"!==d&&"name"!==d||(pe(s,t),f=qt+f),tt&&"object"==typeof R&&"function"==typeof R.getAttributeType)if(l);else switch(R.getAttributeType(p,d)){case"TrustedHTML":f=tt.createHTML(f);break;case"TrustedScriptURL":f=tt.createScriptURL(f)}try{l?t.setAttributeNS(l,s,f):t.setAttribute(s,f),u(i.removed)}catch(o){}}}xe("afterSanitizeAttributes",t,null)},Te=function t(e){let i=null;const r=ye(e);for(xe("beforeSanitizeShadowDOM",e,null);i=r.nextNode();)xe("uponSanitizeShadowNode",i,null),_e(i)||(i.content instanceof l&&t(i.content),ke(i));xe("afterSanitizeShadowDOM",e,null)};return i.sanitize=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null,o=null,a=null,s=null;if(Zt=!t,Zt&&(t="\x3c!--\x3e"),"string"!=typeof t&&!Ce(t)){if("function"!=typeof t.toString)throw b("toString is not a function");if("string"!=typeof(t=t.toString()))throw b("dirty is not a string, aborting")}if(!i.isSupported)return t;if(Ft||ae(e),i.removed=[],"string"==typeof t&&($t=!1),$t){if(t.nodeName){const e=ie(t.nodeName);if(!yt[e]||bt[e])throw b("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof v)r=ge("\x3c!----\x3e"),o=r.ownerDocument.importNode(t,!0),1===o.nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?r=o:r.appendChild(o);else{if(!Mt&&!St&&!Bt&&-1===t.indexOf("<"))return tt&&Ot?tt.createHTML(t):t;if(r=ge(t),!r)return Mt?null:Ot?et:""}r&&Lt&&fe(r.firstChild);const h=ye($t?t:r);for(;a=h.nextNode();)_e(a)||(a.content instanceof l&&Te(a.content),ke(a));if($t)return t;if(Mt){if(Et)for(s=nt.call(r.ownerDocument);r.firstChild;)s.appendChild(r.firstChild);else s=r;return(Ct.shadowroot||Ct.shadowrootmode)&&(s=at.call(n,s,!0)),s}let u=Bt?r.outerHTML:r.innerHTML;return Bt&&yt["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&_(V,r.ownerDocument.doctype.name)&&(u="<!DOCTYPE "+r.ownerDocument.doctype.name+">\n"+u),St&&c([lt,ht,ct],(t=>{u=y(u,t," ")})),tt&&Ot?tt.createHTML(u):u},i.setConfig=function(){ae(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Ft=!0},i.clearConfig=function(){re=null,Ft=!1},i.isValidAttribute=function(t,e,i){re||ae({});const r=ie(t),n=ie(e);return be(r,n,i)},i.addHook=function(t,e){"function"==typeof e&&(st[t]=st[t]||[],d(st[t],e))},i.removeHook=function(t){if(st[t])return u(st[t])},i.removeHooks=function(t){st[t]&&(st[t]=[])},i.removeAllHooks=function(){st={}},i}return J()}()},60513:(t,e,i)=>{"use strict";function r(t){for(var e=[],i=1;i<arguments.length;i++)e[i-1]=arguments[i];var r=Array.from("string"==typeof t?[t]:t);r[r.length-1]=r[r.length-1].replace(/\r?\n([\t ]*)$/,"");var n=r.reduce((function(t,e){var i=e.match(/\n([\t ]+|(?!\s).)/g);return i?t.concat(i.map((function(t){var e,i;return null!==(i=null===(e=t.match(/[\t ]/g))||void 0===e?void 0:e.length)&&void 0!==i?i:0}))):t}),[]);if(n.length){var o=new RegExp("\n[\t ]{"+Math.min.apply(Math,n)+"}","g");r=r.map((function(t){return t.replace(o,"\n")}))}r[0]=r[0].replace(/^\r?\n/,"");var a=r[0];return e.forEach((function(t,e){var i=a.match(/(?:^|\n)( *)$/),n=i?i[1]:"",o=t;"string"==typeof t&&t.includes("\n")&&(o=String(t).split("\n").map((function(t,e){return 0===e?t:""+n+t})).join("\n")),a+=o+r[e+1]})),a}i.d(e,{T:()=>r})},28453:(t,e,i)=>{"use strict";i.d(e,{R:()=>a,x:()=>s});var r=i(96540);const n={},o=r.createContext(n);function a(t){const e=r.useContext(o);return r.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:a(t.components),r.createElement(o.Provider,{value:e},t.children)}},26312:(t,e,i)=>{"use strict";function r(t,e){let i;if(void 0===e)for(const r of t)null!=r&&(i<r||void 0===i&&r>=r)&&(i=r);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(i<n||void 0===i&&n>=n)&&(i=n)}return i}function n(t,e){let i;if(void 0===e)for(const r of t)null!=r&&(i>r||void 0===i&&r>=r)&&(i=r);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(i>n||void 0===i&&n>=n)&&(i=n)}return i}function o(t){return t}i.d(e,{JLW:()=>hs,l78:()=>C,tlR:()=>m,qrM:()=>vs,Yu4:()=>Ts,IA3:()=>ws,Wi0:()=>Bs,PGM:()=>Fs,OEq:()=>Ms,y8u:()=>Is,olC:()=>qs,IrU:()=>$s,oDi:()=>js,Q7f:()=>Ws,cVp:()=>Hs,lUB:()=>ds,Lx9:()=>Vs,nVG:()=>el,uxU:()=>il,Xf2:()=>ol,GZz:()=>sl,UPb:()=>hl,dyv:()=>ll,bEH:()=>pr,n8j:()=>gs,T9B:()=>r,jkA:()=>n,rLf:()=>Cs,WH:()=>kr,m4Y:()=>yn,UMr:()=>vr,w7C:()=>Oa,zt:()=>Ia,Ltv:()=>Da,Ubm:()=>qa,JWy:()=>Vi,UAC:()=>On,DCK:()=>uo,TUC:()=>Rn,Agd:()=>Mn,t6C:()=>Sn,wXd:()=>Fn,ABi:()=>$n,Ui6:()=>Qn,rGn:()=>Wn,ucG:()=>Bn,YPH:()=>Nn,Mol:()=>jn,PGu:()=>zn,GuW:()=>Pn});var a=1,s=2,l=3,h=4,c=1e-6;function u(t){return"translate("+t+",0)"}function d(t){return"translate(0,"+t+")"}function f(t){return e=>+t(e)}function p(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),i=>+t(i)+e}function g(){return!this.__axis}function y(t,e){var i=[],r=null,n=null,y=6,m=6,C=3,x="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,_=t===a||t===h?-1:1,b=t===h||t===s?"x":"y",v=t===a||t===l?u:d;function k(u){var d=null==r?e.ticks?e.ticks.apply(e,i):e.domain():r,k=null==n?e.tickFormat?e.tickFormat.apply(e,i):o:n,T=Math.max(y,0)+C,A=e.range(),w=+A[0]+x,S=+A[A.length-1]+x,B=(e.bandwidth?p:f)(e.copy(),x),F=u.selection?u.selection():u,L=F.selectAll(".domain").data([null]),M=F.selectAll(".tick").data(d,e).order(),E=M.exit(),O=M.enter().append("g").attr("class","tick"),I=M.select("line"),D=M.select("text");L=L.merge(L.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),M=M.merge(O),I=I.merge(O.append("line").attr("stroke","currentColor").attr(b+"2",_*y)),D=D.merge(O.append("text").attr("fill","currentColor").attr(b,_*T).attr("dy",t===a?"0em":t===l?"0.71em":"0.32em")),u!==F&&(L=L.transition(u),M=M.transition(u),I=I.transition(u),D=D.transition(u),E=E.transition(u).attr("opacity",c).attr("transform",(function(t){return isFinite(t=B(t))?v(t+x):this.getAttribute("transform")})),O.attr("opacity",c).attr("transform",(function(t){var e=this.parentNode.__axis;return v((e&&isFinite(e=e(t))?e:B(t))+x)}))),E.remove(),L.attr("d",t===h||t===s?m?"M"+_*m+","+w+"H"+x+"V"+S+"H"+_*m:"M"+x+","+w+"V"+S:m?"M"+w+","+_*m+"V"+x+"H"+S+"V"+_*m:"M"+w+","+x+"H"+S),M.attr("opacity",1).attr("transform",(function(t){return v(B(t)+x)})),I.attr(b+"2",_*y),D.attr(b,_*T).text(k),F.filter(g).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===s?"start":t===h?"end":"middle"),F.each((function(){this.__axis=B}))}return k.scale=function(t){return arguments.length?(e=t,k):e},k.ticks=function(){return i=Array.from(arguments),k},k.tickArguments=function(t){return arguments.length?(i=null==t?[]:Array.from(t),k):i.slice()},k.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),k):r&&r.slice()},k.tickFormat=function(t){return arguments.length?(n=t,k):n},k.tickSize=function(t){return arguments.length?(y=m=+t,k):y},k.tickSizeInner=function(t){return arguments.length?(y=+t,k):y},k.tickSizeOuter=function(t){return arguments.length?(m=+t,k):m},k.tickPadding=function(t){return arguments.length?(C=+t,k):C},k.offset=function(t){return arguments.length?(x=+t,k):x},k}function m(t){return y(a,t)}function C(t){return y(l,t)}function x(){}function _(t){return null==t?x:function(){return this.querySelector(t)}}function b(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function v(){return[]}function k(t){return null==t?v:function(){return this.querySelectorAll(t)}}function T(t){return function(){return this.matches(t)}}function A(t){return function(e){return e.matches(t)}}var w=Array.prototype.find;function S(){return this.firstElementChild}var B=Array.prototype.filter;function F(){return Array.from(this.children)}function L(t){return new Array(t.length)}function M(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function E(t,e,i,r,n,o){for(var a,s=0,l=e.length,h=o.length;s<h;++s)(a=e[s])?(a.__data__=o[s],r[s]=a):i[s]=new M(t,o[s]);for(;s<l;++s)(a=e[s])&&(n[s]=a)}function O(t,e,i,r,n,o,a){var s,l,h,c=new Map,u=e.length,d=o.length,f=new Array(u);for(s=0;s<u;++s)(l=e[s])&&(f[s]=h=a.call(l,l.__data__,s,e)+"",c.has(h)?n[s]=l:c.set(h,l));for(s=0;s<d;++s)h=a.call(t,o[s],s,o)+"",(l=c.get(h))?(r[s]=l,l.__data__=o[s],c.delete(h)):i[s]=new M(t,o[s]);for(s=0;s<u;++s)(l=e[s])&&c.get(f[s])===l&&(n[s]=l)}function I(t){return t.__data__}function D(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function q(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}M.prototype={constructor:M,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var N="http://www.w3.org/1999/xhtml";const $={svg:"http://www.w3.org/2000/svg",xhtml:N,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function z(t){var e=t+="",i=e.indexOf(":");return i>=0&&"xmlns"!==(e=t.slice(0,i))&&(t=t.slice(i+1)),$.hasOwnProperty(e)?{space:$[e],local:t}:t}function P(t){return function(){this.removeAttribute(t)}}function j(t){return function(){this.removeAttributeNS(t.space,t.local)}}function R(t,e){return function(){this.setAttribute(t,e)}}function W(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function U(t,e){return function(){var i=e.apply(this,arguments);null==i?this.removeAttribute(t):this.setAttribute(t,i)}}function H(t,e){return function(){var i=e.apply(this,arguments);null==i?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,i)}}function Y(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function V(t){return function(){this.style.removeProperty(t)}}function G(t,e,i){return function(){this.style.setProperty(t,e,i)}}function X(t,e,i){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,i)}}function Z(t,e){return t.style.getPropertyValue(e)||Y(t).getComputedStyle(t,null).getPropertyValue(e)}function J(t){return function(){delete this[t]}}function Q(t,e){return function(){this[t]=e}}function K(t,e){return function(){var i=e.apply(this,arguments);null==i?delete this[t]:this[t]=i}}function tt(t){return t.trim().split(/^|\s+/)}function et(t){return t.classList||new it(t)}function it(t){this._node=t,this._names=tt(t.getAttribute("class")||"")}function rt(t,e){for(var i=et(t),r=-1,n=e.length;++r<n;)i.add(e[r])}function nt(t,e){for(var i=et(t),r=-1,n=e.length;++r<n;)i.remove(e[r])}function ot(t){return function(){rt(this,t)}}function at(t){return function(){nt(this,t)}}function st(t,e){return function(){(e.apply(this,arguments)?rt:nt)(this,t)}}function lt(){this.textContent=""}function ht(t){return function(){this.textContent=t}}function ct(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function ut(){this.innerHTML=""}function dt(t){return function(){this.innerHTML=t}}function ft(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function pt(){this.nextSibling&&this.parentNode.appendChild(this)}function gt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function yt(t){return function(){var e=this.ownerDocument,i=this.namespaceURI;return i===N&&e.documentElement.namespaceURI===N?e.createElement(t):e.createElementNS(i,t)}}function mt(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Ct(t){var e=z(t);return(e.local?mt:yt)(e)}function xt(){return null}function _t(){var t=this.parentNode;t&&t.removeChild(this)}function bt(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function vt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function kt(t){return function(){var e=this.__on;if(e){for(var i,r=0,n=-1,o=e.length;r<o;++r)i=e[r],t.type&&i.type!==t.type||i.name!==t.name?e[++n]=i:this.removeEventListener(i.type,i.listener,i.options);++n?e.length=n:delete this.__on}}}function Tt(t,e,i){return function(){var r,n=this.__on,o=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(n)for(var a=0,s=n.length;a<s;++a)if((r=n[a]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=o,r.options=i),void(r.value=e);this.addEventListener(t.type,o,i),r={type:t.type,name:t.name,value:e,listener:o,options:i},n?n.push(r):this.__on=[r]}}function At(t,e,i){var r=Y(t),n=r.CustomEvent;"function"==typeof n?n=new n(e,i):(n=r.document.createEvent("Event"),i?(n.initEvent(e,i.bubbles,i.cancelable),n.detail=i.detail):n.initEvent(e,!1,!1)),t.dispatchEvent(n)}function wt(t,e){return function(){return At(this,t,e)}}function St(t,e){return function(){return At(this,t,e.apply(this,arguments))}}it.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Bt=[null];function Ft(t,e){this._groups=t,this._parents=e}function Lt(){return new Ft([[document.documentElement]],Bt)}Ft.prototype=Lt.prototype={constructor:Ft,select:function(t){"function"!=typeof t&&(t=_(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a,s=e[n],l=s.length,h=r[n]=new Array(l),c=0;c<l;++c)(o=s[c])&&(a=t.call(o,o.__data__,c,s))&&("__data__"in o&&(a.__data__=o.__data__),h[c]=a);return new Ft(r,this._parents)},selectAll:function(t){t="function"==typeof t?function(t){return function(){return b(t.apply(this,arguments))}}(t):k(t);for(var e=this._groups,i=e.length,r=[],n=[],o=0;o<i;++o)for(var a,s=e[o],l=s.length,h=0;h<l;++h)(a=s[h])&&(r.push(t.call(a,a.__data__,h,s)),n.push(a));return new Ft(r,n)},selectChild:function(t){return this.select(null==t?S:function(t){return function(){return w.call(this.children,t)}}("function"==typeof t?t:A(t)))},selectChildren:function(t){return this.selectAll(null==t?F:function(t){return function(){return B.call(this.children,t)}}("function"==typeof t?t:A(t)))},filter:function(t){"function"!=typeof t&&(t=T(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a=e[n],s=a.length,l=r[n]=[],h=0;h<s;++h)(o=a[h])&&t.call(o,o.__data__,h,a)&&l.push(o);return new Ft(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,I);var i,r=e?O:E,n=this._parents,o=this._groups;"function"!=typeof t&&(i=t,t=function(){return i});for(var a=o.length,s=new Array(a),l=new Array(a),h=new Array(a),c=0;c<a;++c){var u=n[c],d=o[c],f=d.length,p=D(t.call(u,u&&u.__data__,c,n)),g=p.length,y=l[c]=new Array(g),m=s[c]=new Array(g);r(u,d,y,m,h[c]=new Array(f),p,e);for(var C,x,_=0,b=0;_<g;++_)if(C=y[_]){for(_>=b&&(b=_+1);!(x=m[b])&&++b<g;);C._next=x||null}}return(s=new Ft(s,n))._enter=l,s._exit=h,s},enter:function(){return new Ft(this._enter||this._groups.map(L),this._parents)},exit:function(){return new Ft(this._exit||this._groups.map(L),this._parents)},join:function(t,e,i){var r=this.enter(),n=this,o=this.exit();return"function"==typeof t?(r=t(r))&&(r=r.selection()):r=r.append(t+""),null!=e&&(n=e(n))&&(n=n.selection()),null==i?o.remove():i(o),r&&n?r.merge(n).order():n},merge:function(t){for(var e=t.selection?t.selection():t,i=this._groups,r=e._groups,n=i.length,o=r.length,a=Math.min(n,o),s=new Array(n),l=0;l<a;++l)for(var h,c=i[l],u=r[l],d=c.length,f=s[l]=new Array(d),p=0;p<d;++p)(h=c[p]||u[p])&&(f[p]=h);for(;l<n;++l)s[l]=i[l];return new Ft(s,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,i=t.length;++e<i;)for(var r,n=t[e],o=n.length-1,a=n[o];--o>=0;)(r=n[o])&&(a&&4^r.compareDocumentPosition(a)&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(t){function e(e,i){return e&&i?t(e.__data__,i.__data__):!e-!i}t||(t=q);for(var i=this._groups,r=i.length,n=new Array(r),o=0;o<r;++o){for(var a,s=i[o],l=s.length,h=n[o]=new Array(l),c=0;c<l;++c)(a=s[c])&&(h[c]=a);h.sort(e)}return new Ft(n,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var r=t[e],n=0,o=r.length;n<o;++n){var a=r[n];if(a)return a}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,i=0,r=e.length;i<r;++i)for(var n,o=e[i],a=0,s=o.length;a<s;++a)(n=o[a])&&t.call(n,n.__data__,a,o);return this},attr:function(t,e){var i=z(t);if(arguments.length<2){var r=this.node();return i.local?r.getAttributeNS(i.space,i.local):r.getAttribute(i)}return this.each((null==e?i.local?j:P:"function"==typeof e?i.local?H:U:i.local?W:R)(i,e))},style:function(t,e,i){return arguments.length>1?this.each((null==e?V:"function"==typeof e?X:G)(t,e,null==i?"":i)):Z(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?J:"function"==typeof e?K:Q)(t,e)):this.node()[t]},classed:function(t,e){var i=tt(t+"");if(arguments.length<2){for(var r=et(this.node()),n=-1,o=i.length;++n<o;)if(!r.contains(i[n]))return!1;return!0}return this.each(("function"==typeof e?st:e?ot:at)(i,e))},text:function(t){return arguments.length?this.each(null==t?lt:("function"==typeof t?ct:ht)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?ut:("function"==typeof t?ft:dt)(t)):this.node().innerHTML},raise:function(){return this.each(pt)},lower:function(){return this.each(gt)},append:function(t){var e="function"==typeof t?t:Ct(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var i="function"==typeof t?t:Ct(t),r=null==e?xt:"function"==typeof e?e:_(e);return this.select((function(){return this.insertBefore(i.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(_t)},clone:function(t){return this.select(t?vt:bt)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,i){var r,n,o=function(t){return t.trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");return i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),{type:t,name:e}}))}(t+""),a=o.length;if(!(arguments.length<2)){for(s=e?Tt:kt,r=0;r<a;++r)this.each(s(o[r],e,i));return this}var s=this.node().__on;if(s)for(var l,h=0,c=s.length;h<c;++h)for(r=0,l=s[h];r<a;++r)if((n=o[r]).type===l.type&&n.name===l.name)return l.value},dispatch:function(t,e){return this.each(("function"==typeof e?St:wt)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var r,n=t[e],o=0,a=n.length;o<a;++o)(r=n[o])&&(yield r)}};const Mt=Lt;var Et={value:()=>{}};function Ot(){for(var t,e=0,i=arguments.length,r={};e<i;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new It(r)}function It(t){this._=t}function Dt(t,e){for(var i,r=0,n=t.length;r<n;++r)if((i=t[r]).name===e)return i.value}function qt(t,e,i){for(var r=0,n=t.length;r<n;++r)if(t[r].name===e){t[r]=Et,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=i&&t.push({name:e,value:i}),t}It.prototype=Ot.prototype={constructor:It,on:function(t,e){var i,r,n=this._,o=(r=n,(t+"").trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");if(i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),a=-1,s=o.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++a<s;)if(i=(t=o[a]).type)n[i]=qt(n[i],t.name,e);else if(null==e)for(i in n)n[i]=qt(n[i],t.name,null);return this}for(;++a<s;)if((i=(t=o[a]).type)&&(i=Dt(n[i],t.name)))return i},copy:function(){var t={},e=this._;for(var i in e)t[i]=e[i].slice();return new It(t)},call:function(t,e){if((i=arguments.length-2)>0)for(var i,r,n=new Array(i),o=0;o<i;++o)n[o]=arguments[o+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(o=0,i=(r=this._[t]).length;o<i;++o)r[o].value.apply(e,n)},apply:function(t,e,i){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],n=0,o=r.length;n<o;++n)r[n].value.apply(e,i)}};const Nt=Ot;var $t,zt,Pt=0,jt=0,Rt=0,Wt=1e3,Ut=0,Ht=0,Yt=0,Vt="object"==typeof performance&&performance.now?performance:Date,Gt="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Xt(){return Ht||(Gt(Zt),Ht=Vt.now()+Yt)}function Zt(){Ht=0}function Jt(){this._call=this._time=this._next=null}function Qt(t,e,i){var r=new Jt;return r.restart(t,e,i),r}function Kt(){Ht=(Ut=Vt.now())+Yt,Pt=jt=0;try{!function(){Xt(),++Pt;for(var t,e=$t;e;)(t=Ht-e._time)>=0&&e._call.call(void 0,t),e=e._next;--Pt}()}finally{Pt=0,function(){var t,e,i=$t,r=1/0;for(;i;)i._call?(r>i._time&&(r=i._time),t=i,i=i._next):(e=i._next,i._next=null,i=t?t._next=e:$t=e);zt=t,ee(r)}(),Ht=0}}function te(){var t=Vt.now(),e=t-Ut;e>Wt&&(Yt-=e,Ut=t)}function ee(t){Pt||(jt&&(jt=clearTimeout(jt)),t-Ht>24?(t<1/0&&(jt=setTimeout(Kt,t-Vt.now()-Yt)),Rt&&(Rt=clearInterval(Rt))):(Rt||(Ut=Vt.now(),Rt=setInterval(te,Wt)),Pt=1,Gt(Kt)))}function ie(t,e,i){var r=new Jt;return e=null==e?0:+e,r.restart((i=>{r.stop(),t(i+e)}),e,i),r}Jt.prototype=Qt.prototype={constructor:Jt,restart:function(t,e,i){if("function"!=typeof t)throw new TypeError("callback is not a function");i=(null==i?Xt():+i)+(null==e?0:+e),this._next||zt===this||(zt?zt._next=this:$t=this,zt=this),this._call=t,this._time=i,ee()},stop:function(){this._call&&(this._call=null,this._time=1/0,ee())}};var re=Nt("start","end","cancel","interrupt"),ne=[],oe=0,ae=1,se=2,le=3,he=4,ce=5,ue=6;function de(t,e,i,r,n,o){var a=t.__transition;if(a){if(i in a)return}else t.__transition={};!function(t,e,i){var r,n=t.__transition;function o(t){i.state=ae,i.timer.restart(a,i.delay,i.time),i.delay<=t&&a(t-i.delay)}function a(o){var h,c,u,d;if(i.state!==ae)return l();for(h in n)if((d=n[h]).name===i.name){if(d.state===le)return ie(a);d.state===he?(d.state=ue,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete n[h]):+h<e&&(d.state=ue,d.timer.stop(),d.on.call("cancel",t,t.__data__,d.index,d.group),delete n[h])}if(ie((function(){i.state===le&&(i.state=he,i.timer.restart(s,i.delay,i.time),s(o))})),i.state=se,i.on.call("start",t,t.__data__,i.index,i.group),i.state===se){for(i.state=le,r=new Array(u=i.tween.length),h=0,c=-1;h<u;++h)(d=i.tween[h].value.call(t,t.__data__,i.index,i.group))&&(r[++c]=d);r.length=c+1}}function s(e){for(var n=e<i.duration?i.ease.call(null,e/i.duration):(i.timer.restart(l),i.state=ce,1),o=-1,a=r.length;++o<a;)r[o].call(t,n);i.state===ce&&(i.on.call("end",t,t.__data__,i.index,i.group),l())}function l(){for(var r in i.state=ue,i.timer.stop(),delete n[e],n)return;delete t.__transition}n[e]=i,i.timer=Qt(o,0,i.time)}(t,i,{name:e,index:r,group:n,on:re,tween:ne,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:oe})}function fe(t,e){var i=ge(t,e);if(i.state>oe)throw new Error("too late; already scheduled");return i}function pe(t,e){var i=ge(t,e);if(i.state>le)throw new Error("too late; already running");return i}function ge(t,e){var i=t.__transition;if(!i||!(i=i[e]))throw new Error("transition not found");return i}function ye(t,e){return t=+t,e=+e,function(i){return t*(1-i)+e*i}}var me,Ce=180/Math.PI,xe={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function _e(t,e,i,r,n,o){var a,s,l;return(a=Math.sqrt(t*t+e*e))&&(t/=a,e/=a),(l=t*i+e*r)&&(i-=t*l,r-=e*l),(s=Math.sqrt(i*i+r*r))&&(i/=s,r/=s,l/=s),t*r<e*i&&(t=-t,e=-e,l=-l,a=-a),{translateX:n,translateY:o,rotate:Math.atan2(e,t)*Ce,skewX:Math.atan(l)*Ce,scaleX:a,scaleY:s}}function be(t,e,i,r){function n(t){return t.length?t.pop()+" ":""}return function(o,a){var s=[],l=[];return o=t(o),a=t(a),function(t,r,n,o,a,s){if(t!==n||r!==o){var l=a.push("translate(",null,e,null,i);s.push({i:l-4,x:ye(t,n)},{i:l-2,x:ye(r,o)})}else(n||o)&&a.push("translate("+n+e+o+i)}(o.translateX,o.translateY,a.translateX,a.translateY,s,l),function(t,e,i,o){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),o.push({i:i.push(n(i)+"rotate(",null,r)-2,x:ye(t,e)})):e&&i.push(n(i)+"rotate("+e+r)}(o.rotate,a.rotate,s,l),function(t,e,i,o){t!==e?o.push({i:i.push(n(i)+"skewX(",null,r)-2,x:ye(t,e)}):e&&i.push(n(i)+"skewX("+e+r)}(o.skewX,a.skewX,s,l),function(t,e,i,r,o,a){if(t!==i||e!==r){var s=o.push(n(o)+"scale(",null,",",null,")");a.push({i:s-4,x:ye(t,i)},{i:s-2,x:ye(e,r)})}else 1===i&&1===r||o.push(n(o)+"scale("+i+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,s,l),o=a=null,function(t){for(var e,i=-1,r=l.length;++i<r;)s[(e=l[i]).i]=e.x(t);return s.join("")}}}var ve=be((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?xe:_e(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),ke=be((function(t){return null==t?xe:(me||(me=document.createElementNS("http://www.w3.org/2000/svg","g")),me.setAttribute("transform",t),(t=me.transform.baseVal.consolidate())?_e((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):xe)}),", ",")",")");function Te(t,e){var i,r;return function(){var n=pe(this,t),o=n.tween;if(o!==i)for(var a=0,s=(r=i=o).length;a<s;++a)if(r[a].name===e){(r=r.slice()).splice(a,1);break}n.tween=r}}function Ae(t,e,i){var r,n;if("function"!=typeof i)throw new Error;return function(){var o=pe(this,t),a=o.tween;if(a!==r){n=(r=a).slice();for(var s={name:e,value:i},l=0,h=n.length;l<h;++l)if(n[l].name===e){n[l]=s;break}l===h&&n.push(s)}o.tween=n}}function we(t,e,i){var r=t._id;return t.each((function(){var t=pe(this,r);(t.value||(t.value={}))[e]=i.apply(this,arguments)})),function(t){return ge(t,r).value[e]}}function Se(t,e,i){t.prototype=e.prototype=i,i.constructor=t}function Be(t,e){var i=Object.create(t.prototype);for(var r in e)i[r]=e[r];return i}function Fe(){}var Le=.7,Me=1/Le,Ee="\\s*([+-]?\\d+)\\s*",Oe="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ie="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",De=/^#([0-9a-f]{3,8})$/,qe=new RegExp(`^rgb\\(${Ee},${Ee},${Ee}\\)$`),Ne=new RegExp(`^rgb\\(${Ie},${Ie},${Ie}\\)$`),$e=new RegExp(`^rgba\\(${Ee},${Ee},${Ee},${Oe}\\)$`),ze=new RegExp(`^rgba\\(${Ie},${Ie},${Ie},${Oe}\\)$`),Pe=new RegExp(`^hsl\\(${Oe},${Ie},${Ie}\\)$`),je=new RegExp(`^hsla\\(${Oe},${Ie},${Ie},${Oe}\\)$`),Re={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function We(){return this.rgb().formatHex()}function Ue(){return this.rgb().formatRgb()}function He(t){var e,i;return t=(t+"").trim().toLowerCase(),(e=De.exec(t))?(i=e[1].length,e=parseInt(e[1],16),6===i?Ye(e):3===i?new Ze(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===i?Ve(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===i?Ve(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=qe.exec(t))?new Ze(e[1],e[2],e[3],1):(e=Ne.exec(t))?new Ze(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=$e.exec(t))?Ve(e[1],e[2],e[3],e[4]):(e=ze.exec(t))?Ve(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Pe.exec(t))?ii(e[1],e[2]/100,e[3]/100,1):(e=je.exec(t))?ii(e[1],e[2]/100,e[3]/100,e[4]):Re.hasOwnProperty(t)?Ye(Re[t]):"transparent"===t?new Ze(NaN,NaN,NaN,0):null}function Ye(t){return new Ze(t>>16&255,t>>8&255,255&t,1)}function Ve(t,e,i,r){return r<=0&&(t=e=i=NaN),new Ze(t,e,i,r)}function Ge(t){return t instanceof Fe||(t=He(t)),t?new Ze((t=t.rgb()).r,t.g,t.b,t.opacity):new Ze}function Xe(t,e,i,r){return 1===arguments.length?Ge(t):new Ze(t,e,i,null==r?1:r)}function Ze(t,e,i,r){this.r=+t,this.g=+e,this.b=+i,this.opacity=+r}function Je(){return`#${ei(this.r)}${ei(this.g)}${ei(this.b)}`}function Qe(){const t=Ke(this.opacity);return`${1===t?"rgb(":"rgba("}${ti(this.r)}, ${ti(this.g)}, ${ti(this.b)}${1===t?")":`, ${t})`}`}function Ke(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ti(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ei(t){return((t=ti(t))<16?"0":"")+t.toString(16)}function ii(t,e,i,r){return r<=0?t=e=i=NaN:i<=0||i>=1?t=e=NaN:e<=0&&(t=NaN),new ni(t,e,i,r)}function ri(t){if(t instanceof ni)return new ni(t.h,t.s,t.l,t.opacity);if(t instanceof Fe||(t=He(t)),!t)return new ni;if(t instanceof ni)return t;var e=(t=t.rgb()).r/255,i=t.g/255,r=t.b/255,n=Math.min(e,i,r),o=Math.max(e,i,r),a=NaN,s=o-n,l=(o+n)/2;return s?(a=e===o?(i-r)/s+6*(i<r):i===o?(r-e)/s+2:(e-i)/s+4,s/=l<.5?o+n:2-o-n,a*=60):s=l>0&&l<1?0:a,new ni(a,s,l,t.opacity)}function ni(t,e,i,r){this.h=+t,this.s=+e,this.l=+i,this.opacity=+r}function oi(t){return(t=(t||0)%360)<0?t+360:t}function ai(t){return Math.max(0,Math.min(1,t||0))}function si(t,e,i){return 255*(t<60?e+(i-e)*t/60:t<180?i:t<240?e+(i-e)*(240-t)/60:e)}function li(t,e,i,r,n){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*i+(1+3*t+3*o-3*a)*r+a*n)/6}Se(Fe,He,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:We,formatHex:We,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return ri(this).formatHsl()},formatRgb:Ue,toString:Ue}),Se(Ze,Xe,Be(Fe,{brighter(t){return t=null==t?Me:Math.pow(Me,t),new Ze(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?Le:Math.pow(Le,t),new Ze(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Ze(ti(this.r),ti(this.g),ti(this.b),Ke(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Je,formatHex:Je,formatHex8:function(){return`#${ei(this.r)}${ei(this.g)}${ei(this.b)}${ei(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Qe,toString:Qe})),Se(ni,(function(t,e,i,r){return 1===arguments.length?ri(t):new ni(t,e,i,null==r?1:r)}),Be(Fe,{brighter(t){return t=null==t?Me:Math.pow(Me,t),new ni(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?Le:Math.pow(Le,t),new ni(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,r=i+(i<.5?i:1-i)*e,n=2*i-r;return new Ze(si(t>=240?t-240:t+120,n,r),si(t,n,r),si(t<120?t+240:t-120,n,r),this.opacity)},clamp(){return new ni(oi(this.h),ai(this.s),ai(this.l),Ke(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Ke(this.opacity);return`${1===t?"hsl(":"hsla("}${oi(this.h)}, ${100*ai(this.s)}%, ${100*ai(this.l)}%${1===t?")":`, ${t})`}`}}));const hi=t=>()=>t;function ci(t,e){return function(i){return t+i*e}}function ui(t){return 1==(t=+t)?di:function(e,i){return i-e?function(t,e,i){return t=Math.pow(t,i),e=Math.pow(e,i)-t,i=1/i,function(r){return Math.pow(t+r*e,i)}}(e,i,t):hi(isNaN(e)?i:e)}}function di(t,e){var i=e-t;return i?ci(t,i):hi(isNaN(t)?e:t)}const fi=function t(e){var i=ui(e);function r(t,e){var r=i((t=Xe(t)).r,(e=Xe(e)).r),n=i(t.g,e.g),o=i(t.b,e.b),a=di(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=n(e),t.b=o(e),t.opacity=a(e),t+""}}return r.gamma=t,r}(1);function pi(t){return function(e){var i,r,n=e.length,o=new Array(n),a=new Array(n),s=new Array(n);for(i=0;i<n;++i)r=Xe(e[i]),o[i]=r.r||0,a[i]=r.g||0,s[i]=r.b||0;return o=t(o),a=t(a),s=t(s),r.opacity=1,function(t){return r.r=o(t),r.g=a(t),r.b=s(t),r+""}}}pi((function(t){var e=t.length-1;return function(i){var r=i<=0?i=0:i>=1?(i=1,e-1):Math.floor(i*e),n=t[r],o=t[r+1],a=r>0?t[r-1]:2*n-o,s=r<e-1?t[r+2]:2*o-n;return li((i-r/e)*e,a,n,o,s)}})),pi((function(t){var e=t.length;return function(i){var r=Math.floor(((i%=1)<0?++i:i)*e),n=t[(r+e-1)%e],o=t[r%e],a=t[(r+1)%e],s=t[(r+2)%e];return li((i-r/e)*e,n,o,a,s)}}));var gi=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,yi=new RegExp(gi.source,"g");function mi(t,e){var i,r,n,o=gi.lastIndex=yi.lastIndex=0,a=-1,s=[],l=[];for(t+="",e+="";(i=gi.exec(t))&&(r=yi.exec(e));)(n=r.index)>o&&(n=e.slice(o,n),s[a]?s[a]+=n:s[++a]=n),(i=i[0])===(r=r[0])?s[a]?s[a]+=r:s[++a]=r:(s[++a]=null,l.push({i:a,x:ye(i,r)})),o=yi.lastIndex;return o<e.length&&(n=e.slice(o),s[a]?s[a]+=n:s[++a]=n),s.length<2?l[0]?function(t){return function(e){return t(e)+""}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var i,r=0;r<e;++r)s[(i=l[r]).i]=i.x(t);return s.join("")})}function Ci(t,e){var i;return("number"==typeof e?ye:e instanceof He?fi:(i=He(e))?(e=i,fi):mi)(t,e)}function xi(t){return function(){this.removeAttribute(t)}}function _i(t){return function(){this.removeAttributeNS(t.space,t.local)}}function bi(t,e,i){var r,n,o=i+"";return function(){var a=this.getAttribute(t);return a===o?null:a===r?n:n=e(r=a,i)}}function vi(t,e,i){var r,n,o=i+"";return function(){var a=this.getAttributeNS(t.space,t.local);return a===o?null:a===r?n:n=e(r=a,i)}}function ki(t,e,i){var r,n,o;return function(){var a,s,l=i(this);if(null!=l)return(a=this.getAttribute(t))===(s=l+"")?null:a===r&&s===n?o:(n=s,o=e(r=a,l));this.removeAttribute(t)}}function Ti(t,e,i){var r,n,o;return function(){var a,s,l=i(this);if(null!=l)return(a=this.getAttributeNS(t.space,t.local))===(s=l+"")?null:a===r&&s===n?o:(n=s,o=e(r=a,l));this.removeAttributeNS(t.space,t.local)}}function Ai(t,e){var i,r;function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&function(t,e){return function(i){this.setAttributeNS(t.space,t.local,e.call(this,i))}}(t,n)),i}return n._value=e,n}function wi(t,e){var i,r;function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&function(t,e){return function(i){this.setAttribute(t,e.call(this,i))}}(t,n)),i}return n._value=e,n}function Si(t,e){return function(){fe(this,t).delay=+e.apply(this,arguments)}}function Bi(t,e){return e=+e,function(){fe(this,t).delay=e}}function Fi(t,e){return function(){pe(this,t).duration=+e.apply(this,arguments)}}function Li(t,e){return e=+e,function(){pe(this,t).duration=e}}var Mi=Mt.prototype.constructor;function Ei(t){return function(){this.style.removeProperty(t)}}var Oi=0;function Ii(t,e,i,r){this._groups=t,this._parents=e,this._name=i,this._id=r}function Di(){return++Oi}var qi=Mt.prototype;Ii.prototype=function(t){return Mt().transition(t)}.prototype={constructor:Ii,select:function(t){var e=this._name,i=this._id;"function"!=typeof t&&(t=_(t));for(var r=this._groups,n=r.length,o=new Array(n),a=0;a<n;++a)for(var s,l,h=r[a],c=h.length,u=o[a]=new Array(c),d=0;d<c;++d)(s=h[d])&&(l=t.call(s,s.__data__,d,h))&&("__data__"in s&&(l.__data__=s.__data__),u[d]=l,de(u[d],e,i,d,u,ge(s,i)));return new Ii(o,this._parents,e,i)},selectAll:function(t){var e=this._name,i=this._id;"function"!=typeof t&&(t=k(t));for(var r=this._groups,n=r.length,o=[],a=[],s=0;s<n;++s)for(var l,h=r[s],c=h.length,u=0;u<c;++u)if(l=h[u]){for(var d,f=t.call(l,l.__data__,u,h),p=ge(l,i),g=0,y=f.length;g<y;++g)(d=f[g])&&de(d,e,i,g,f,p);o.push(f),a.push(l)}return new Ii(o,a,e,i)},selectChild:qi.selectChild,selectChildren:qi.selectChildren,filter:function(t){"function"!=typeof t&&(t=T(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a=e[n],s=a.length,l=r[n]=[],h=0;h<s;++h)(o=a[h])&&t.call(o,o.__data__,h,a)&&l.push(o);return new Ii(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,i=t._groups,r=e.length,n=i.length,o=Math.min(r,n),a=new Array(r),s=0;s<o;++s)for(var l,h=e[s],c=i[s],u=h.length,d=a[s]=new Array(u),f=0;f<u;++f)(l=h[f]||c[f])&&(d[f]=l);for(;s<r;++s)a[s]=e[s];return new Ii(a,this._parents,this._name,this._id)},selection:function(){return new Mi(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,i=Di(),r=this._groups,n=r.length,o=0;o<n;++o)for(var a,s=r[o],l=s.length,h=0;h<l;++h)if(a=s[h]){var c=ge(a,e);de(a,t,i,h,s,{time:c.time+c.delay+c.duration,delay:0,duration:c.duration,ease:c.ease})}return new Ii(r,this._parents,t,i)},call:qi.call,nodes:qi.nodes,node:qi.node,size:qi.size,empty:qi.empty,each:qi.each,on:function(t,e){var i=this._id;return arguments.length<2?ge(this.node(),i).on.on(t):this.each(function(t,e,i){var r,n,o=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?fe:pe;return function(){var a=o(this,t),s=a.on;s!==r&&(n=(r=s).copy()).on(e,i),a.on=n}}(i,t,e))},attr:function(t,e){var i=z(t),r="transform"===i?ke:Ci;return this.attrTween(t,"function"==typeof e?(i.local?Ti:ki)(i,r,we(this,"attr."+t,e)):null==e?(i.local?_i:xi)(i):(i.local?vi:bi)(i,r,e))},attrTween:function(t,e){var i="attr."+t;if(arguments.length<2)return(i=this.tween(i))&&i._value;if(null==e)return this.tween(i,null);if("function"!=typeof e)throw new Error;var r=z(t);return this.tween(i,(r.local?Ai:wi)(r,e))},style:function(t,e,i){var r="transform"==(t+="")?ve:Ci;return null==e?this.styleTween(t,function(t,e){var i,r,n;return function(){var o=Z(this,t),a=(this.style.removeProperty(t),Z(this,t));return o===a?null:o===i&&a===r?n:n=e(i=o,r=a)}}(t,r)).on("end.style."+t,Ei(t)):"function"==typeof e?this.styleTween(t,function(t,e,i){var r,n,o;return function(){var a=Z(this,t),s=i(this),l=s+"";return null==s&&(this.style.removeProperty(t),l=s=Z(this,t)),a===l?null:a===r&&l===n?o:(n=l,o=e(r=a,s))}}(t,r,we(this,"style."+t,e))).each(function(t,e){var i,r,n,o,a="style."+e,s="end."+a;return function(){var l=pe(this,t),h=l.on,c=null==l.value[a]?o||(o=Ei(e)):void 0;h===i&&n===c||(r=(i=h).copy()).on(s,n=c),l.on=r}}(this._id,t)):this.styleTween(t,function(t,e,i){var r,n,o=i+"";return function(){var a=Z(this,t);return a===o?null:a===r?n:n=e(r=a,i)}}(t,r,e),i).on("end.style."+t,null)},styleTween:function(t,e,i){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,i){var r,n;function o(){var o=e.apply(this,arguments);return o!==n&&(r=(n=o)&&function(t,e,i){return function(r){this.style.setProperty(t,e.call(this,r),i)}}(t,o,i)),r}return o._value=e,o}(t,e,null==i?"":i))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(we(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,i;function r(){var r=t.apply(this,arguments);return r!==i&&(e=(i=r)&&function(t){return function(e){this.textContent=t.call(this,e)}}(r)),e}return r._value=t,r}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var i in this.__transition)if(+i!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var i=this._id;if(t+="",arguments.length<2){for(var r,n=ge(this.node(),i).tween,o=0,a=n.length;o<a;++o)if((r=n[o]).name===t)return r.value;return null}return this.each((null==e?Te:Ae)(i,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Si:Bi)(e,t)):ge(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Fi:Li)(e,t)):ge(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){pe(this,t).ease=e}}(e,t)):ge(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var i=e.apply(this,arguments);if("function"!=typeof i)throw new Error;pe(this,t).ease=i}}(this._id,t))},end:function(){var t,e,i=this,r=i._id,n=i.size();return new Promise((function(o,a){var s={value:a},l={value:function(){0==--n&&o()}};i.each((function(){var i=pe(this,r),n=i.on;n!==t&&((e=(t=n).copy())._.cancel.push(s),e._.interrupt.push(s),e._.end.push(l)),i.on=e})),0===n&&o()}))},[Symbol.iterator]:qi[Symbol.iterator]};var Ni={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function $i(t,e){for(var i;!(i=t.__transition)||!(i=i[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return i}Mt.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var i,r,n,o=t.__transition,a=!0;if(o){for(n in e=null==e?null:e+"",o)(i=o[n]).name===e?(r=i.state>se&&i.state<ce,i.state=ue,i.timer.stop(),i.on.call(r?"interrupt":"cancel",t,t.__data__,i.index,i.group),delete o[n]):a=!1;a&&delete t.__transition}}(this,t)}))},Mt.prototype.transition=function(t){var e,i;t instanceof Ii?(e=t._id,t=t._name):(e=Di(),(i=Ni).time=Xt(),t=null==t?null:t+"");for(var r=this._groups,n=r.length,o=0;o<n;++o)for(var a,s=r[o],l=s.length,h=0;h<l;++h)(a=s[h])&&de(a,t,e,h,s,i||$i(a,e));return new Ii(r,this._parents,t,e)};const{abs:zi,max:Pi,min:ji}=Math;function Ri(t){return[+t[0],+t[1]]}function Wi(t){return[Ri(t[0]),Ri(t[1])]}["w","e"].map(Ui),["n","s"].map(Ui),["n","w","e","s","nw","ne","sw","se"].map(Ui);function Ui(t){return{type:t}}function Hi(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function Yi(t){return(e,i)=>function(t,e){return fetch(t,e).then(Hi)}(e,i).then((e=>(new DOMParser).parseFromString(e,t)))}Yi("application/xml");Yi("text/html");var Vi=Yi("image/svg+xml");const Gi=Math.PI/180,Xi=180/Math.PI,Zi=.96422,Ji=1,Qi=.82521,Ki=4/29,tr=6/29,er=3*tr*tr,ir=tr*tr*tr;function rr(t){if(t instanceof nr)return new nr(t.l,t.a,t.b,t.opacity);if(t instanceof ur)return dr(t);t instanceof Ze||(t=Ge(t));var e,i,r=lr(t.r),n=lr(t.g),o=lr(t.b),a=or((.2225045*r+.7168786*n+.0606169*o)/Ji);return r===n&&n===o?e=i=a:(e=or((.4360747*r+.3850649*n+.1430804*o)/Zi),i=or((.0139322*r+.0971045*n+.7141733*o)/Qi)),new nr(116*a-16,500*(e-a),200*(a-i),t.opacity)}function nr(t,e,i,r){this.l=+t,this.a=+e,this.b=+i,this.opacity=+r}function or(t){return t>ir?Math.pow(t,1/3):t/er+Ki}function ar(t){return t>tr?t*t*t:er*(t-Ki)}function sr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function lr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function hr(t){if(t instanceof ur)return new ur(t.h,t.c,t.l,t.opacity);if(t instanceof nr||(t=rr(t)),0===t.a&&0===t.b)return new ur(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Xi;return new ur(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function cr(t,e,i,r){return 1===arguments.length?hr(t):new ur(t,e,i,null==r?1:r)}function ur(t,e,i,r){this.h=+t,this.c=+e,this.l=+i,this.opacity=+r}function dr(t){if(isNaN(t.h))return new nr(t.l,0,0,t.opacity);var e=t.h*Gi;return new nr(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}function fr(t){return function(e,i){var r=t((e=cr(e)).h,(i=cr(i)).h),n=di(e.c,i.c),o=di(e.l,i.l),a=di(e.opacity,i.opacity);return function(t){return e.h=r(t),e.c=n(t),e.l=o(t),e.opacity=a(t),e+""}}}Se(nr,(function(t,e,i,r){return 1===arguments.length?rr(t):new nr(t,e,i,null==r?1:r)}),Be(Fe,{brighter(t){return new nr(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new nr(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,i=isNaN(this.b)?t:t-this.b/200;return new Ze(sr(3.1338561*(e=Zi*ar(e))-1.6168667*(t=Ji*ar(t))-.4906146*(i=Qi*ar(i))),sr(-.9787684*e+1.9161415*t+.033454*i),sr(.0719453*e-.2289914*t+1.4052427*i),this.opacity)}})),Se(ur,cr,Be(Fe,{brighter(t){return new ur(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new ur(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return dr(this).rgb()}}));const pr=fr((function(t,e){var i=e-t;return i?ci(t,i>180||i<-180?i-360*Math.round(i/360):i):hi(isNaN(t)?e:t)}));fr(di);function gr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}class yr extends Map{constructor(t,e=_r){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[i,r]of t)this.set(i,r)}get(t){return super.get(mr(this,t))}has(t){return super.has(mr(this,t))}set(t,e){return super.set(Cr(this,t),e)}delete(t){return super.delete(xr(this,t))}}Set;function mr({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):i}function Cr({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):(t.set(r,i),i)}function xr({_intern:t,_key:e},i){const r=e(i);return t.has(r)&&(i=t.get(r),t.delete(r)),i}function _r(t){return null!==t&&"object"==typeof t?t.valueOf():t}const br=Symbol("implicit");function vr(){var t=new yr,e=[],i=[],r=br;function n(n){let o=t.get(n);if(void 0===o){if(r!==br)return r;t.set(n,o=e.push(n)-1)}return i[o%i.length]}return n.domain=function(i){if(!arguments.length)return e.slice();e=[],t=new yr;for(const r of i)t.has(r)||t.set(r,e.push(r)-1);return n},n.range=function(t){return arguments.length?(i=Array.from(t),n):i.slice()},n.unknown=function(t){return arguments.length?(r=t,n):r},n.copy=function(){return vr(e,i).unknown(r)},gr.apply(n,arguments),n}function kr(){var t,e,i=vr().unknown(void 0),r=i.domain,n=i.range,o=0,a=1,s=!1,l=0,h=0,c=.5;function u(){var i=r().length,u=a<o,d=u?a:o,f=u?o:a;t=(f-d)/Math.max(1,i-l+2*h),s&&(t=Math.floor(t)),d+=(f-d-t*(i-l))*c,e=t*(1-l),s&&(d=Math.round(d),e=Math.round(e));var p=function(t,e,i){t=+t,e=+e,i=(n=arguments.length)<2?(e=t,t=0,1):n<3?1:+i;for(var r=-1,n=0|Math.max(0,Math.ceil((e-t)/i)),o=new Array(n);++r<n;)o[r]=t+r*i;return o}(i).map((function(e){return d+t*e}));return n(u?p.reverse():p)}return delete i.unknown,i.domain=function(t){return arguments.length?(r(t),u()):r()},i.range=function(t){return arguments.length?([o,a]=t,o=+o,a=+a,u()):[o,a]},i.rangeRound=function(t){return[o,a]=t,o=+o,a=+a,s=!0,u()},i.bandwidth=function(){return e},i.step=function(){return t},i.round=function(t){return arguments.length?(s=!!t,u()):s},i.padding=function(t){return arguments.length?(l=Math.min(1,h=+t),u()):l},i.paddingInner=function(t){return arguments.length?(l=Math.min(1,t),u()):l},i.paddingOuter=function(t){return arguments.length?(h=+t,u()):h},i.align=function(t){return arguments.length?(c=Math.max(0,Math.min(1,t)),u()):c},i.copy=function(){return kr(r(),[o,a]).round(s).paddingInner(l).paddingOuter(h).align(c)},gr.apply(u(),arguments)}const Tr=Math.sqrt(50),Ar=Math.sqrt(10),wr=Math.sqrt(2);function Sr(t,e,i){const r=(e-t)/Math.max(0,i),n=Math.floor(Math.log10(r)),o=r/Math.pow(10,n),a=o>=Tr?10:o>=Ar?5:o>=wr?2:1;let s,l,h;return n<0?(h=Math.pow(10,-n)/a,s=Math.round(t*h),l=Math.round(e*h),s/h<t&&++s,l/h>e&&--l,h=-h):(h=Math.pow(10,n)*a,s=Math.round(t/h),l=Math.round(e/h),s*h<t&&++s,l*h>e&&--l),l<s&&.5<=i&&i<2?Sr(t,e,2*i):[s,l,h]}function Br(t,e,i){return Sr(t=+t,e=+e,i=+i)[2]}function Fr(t,e,i){i=+i;const r=(e=+e)<(t=+t),n=r?Br(e,t,i):Br(t,e,i);return(r?-1:1)*(n<0?1/-n:n)}function Lr(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function Mr(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Er(t){let e,i,r;function n(t,r,n=0,o=t.length){if(n<o){if(0!==e(r,r))return o;do{const e=n+o>>>1;i(t[e],r)<0?n=e+1:o=e}while(n<o)}return n}return 2!==t.length?(e=Lr,i=(e,i)=>Lr(t(e),i),r=(e,i)=>t(e)-i):(e=t===Lr||t===Mr?t:Or,i=t,r=t),{left:n,center:function(t,e,i=0,o=t.length){const a=n(t,e,i,o-1);return a>i&&r(t[a-1],e)>-r(t[a],e)?a-1:a},right:function(t,r,n=0,o=t.length){if(n<o){if(0!==e(r,r))return o;do{const e=n+o>>>1;i(t[e],r)<=0?n=e+1:o=e}while(n<o)}return n}}}function Or(){return 0}const Ir=Er(Lr),Dr=Ir.right,qr=(Ir.left,Er((function(t){return null===t?NaN:+t})).center,Dr);function Nr(t,e){var i,r=e?e.length:0,n=t?Math.min(r,t.length):0,o=new Array(n),a=new Array(r);for(i=0;i<n;++i)o[i]=jr(t[i],e[i]);for(;i<r;++i)a[i]=e[i];return function(t){for(i=0;i<n;++i)a[i]=o[i](t);return a}}function $r(t,e){var i=new Date;return t=+t,e=+e,function(r){return i.setTime(t*(1-r)+e*r),i}}function zr(t,e){var i,r={},n={};for(i in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)i in t?r[i]=jr(t[i],e[i]):n[i]=e[i];return function(t){for(i in r)n[i]=r[i](t);return n}}function Pr(t,e){e||(e=[]);var i,r=t?Math.min(e.length,t.length):0,n=e.slice();return function(o){for(i=0;i<r;++i)n[i]=t[i]*(1-o)+e[i]*o;return n}}function jr(t,e){var i,r,n=typeof e;return null==e||"boolean"===n?hi(e):("number"===n?ye:"string"===n?(i=He(e))?(e=i,fi):mi:e instanceof He?fi:e instanceof Date?$r:(r=e,!ArrayBuffer.isView(r)||r instanceof DataView?Array.isArray(e)?Nr:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?zr:ye:Pr))(t,e)}function Rr(t,e){return t=+t,e=+e,function(i){return Math.round(t*(1-i)+e*i)}}function Wr(t){return+t}var Ur=[0,1];function Hr(t){return t}function Yr(t,e){return(e-=t=+t)?function(i){return(i-t)/e}:(i=isNaN(e)?NaN:.5,function(){return i});var i}function Vr(t,e,i){var r=t[0],n=t[1],o=e[0],a=e[1];return n<r?(r=Yr(n,r),o=i(a,o)):(r=Yr(r,n),o=i(o,a)),function(t){return o(r(t))}}function Gr(t,e,i){var r=Math.min(t.length,e.length)-1,n=new Array(r),o=new Array(r),a=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++a<r;)n[a]=Yr(t[a],t[a+1]),o[a]=i(e[a],e[a+1]);return function(e){var i=qr(t,e,1,r)-1;return o[i](n[i](e))}}function Xr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Zr(){var t,e,i,r,n,o,a=Ur,s=Ur,l=jr,h=Hr;function c(){var t,e,i,l=Math.min(a.length,s.length);return h!==Hr&&(t=a[0],e=a[l-1],t>e&&(i=t,t=e,e=i),h=function(i){return Math.max(t,Math.min(e,i))}),r=l>2?Gr:Vr,n=o=null,u}function u(e){return null==e||isNaN(e=+e)?i:(n||(n=r(a.map(t),s,l)))(t(h(e)))}return u.invert=function(i){return h(e((o||(o=r(s,a.map(t),ye)))(i)))},u.domain=function(t){return arguments.length?(a=Array.from(t,Wr),c()):a.slice()},u.range=function(t){return arguments.length?(s=Array.from(t),c()):s.slice()},u.rangeRound=function(t){return s=Array.from(t),l=Rr,c()},u.clamp=function(t){return arguments.length?(h=!!t||Hr,c()):h!==Hr},u.interpolate=function(t){return arguments.length?(l=t,c()):l},u.unknown=function(t){return arguments.length?(i=t,u):i},function(i,r){return t=i,e=r,c()}}function Jr(){return Zr()(Hr,Hr)}var Qr,Kr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function tn(t){if(!(e=Kr.exec(t)))throw new Error("invalid format: "+t);var e;return new en({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function en(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function rn(t,e){if((i=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var i,r=t.slice(0,i);return[r.length>1?r[0]+r.slice(2):r,+t.slice(i+1)]}function nn(t){return(t=rn(Math.abs(t)))?t[1]:NaN}function on(t,e){var i=rn(t,e);if(!i)return t+"";var r=i[0],n=i[1];return n<0?"0."+new Array(-n).join("0")+r:r.length>n+1?r.slice(0,n+1)+"."+r.slice(n+1):r+new Array(n-r.length+2).join("0")}tn.prototype=en.prototype,en.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const an={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>on(100*t,e),r:on,s:function(t,e){var i=rn(t,e);if(!i)return t+"";var r=i[0],n=i[1],o=n-(Qr=3*Math.max(-8,Math.min(8,Math.floor(n/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+rn(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function sn(t){return t}var ln,hn,cn,un=Array.prototype.map,dn=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function fn(t){var e,i,r=void 0===t.grouping||void 0===t.thousands?sn:(e=un.call(t.grouping,Number),i=t.thousands+"",function(t,r){for(var n=t.length,o=[],a=0,s=e[0],l=0;n>0&&s>0&&(l+s+1>r&&(s=Math.max(1,r-l)),o.push(t.substring(n-=s,n+s)),!((l+=s+1)>r));)s=e[a=(a+1)%e.length];return o.reverse().join(i)}),n=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?sn:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(un.call(t.numerals,String)),l=void 0===t.percent?"%":t.percent+"",h=void 0===t.minus?"\u2212":t.minus+"",c=void 0===t.nan?"NaN":t.nan+"";function u(t){var e=(t=tn(t)).fill,i=t.align,u=t.sign,d=t.symbol,f=t.zero,p=t.width,g=t.comma,y=t.precision,m=t.trim,C=t.type;"n"===C?(g=!0,C="g"):an[C]||(void 0===y&&(y=12),m=!0,C="g"),(f||"0"===e&&"="===i)&&(f=!0,e="0",i="=");var x="$"===d?n:"#"===d&&/[boxX]/.test(C)?"0"+C.toLowerCase():"",_="$"===d?o:/[%p]/.test(C)?l:"",b=an[C],v=/[defgprs%]/.test(C);function k(t){var n,o,l,d=x,k=_;if("c"===C)k=b(t)+k,t="";else{var T=(t=+t)<0||1/t<0;if(t=isNaN(t)?c:b(Math.abs(t),y),m&&(t=function(t){t:for(var e,i=t.length,r=1,n=-1;r<i;++r)switch(t[r]){case".":n=e=r;break;case"0":0===n&&(n=r),e=r;break;default:if(!+t[r])break t;n>0&&(n=0)}return n>0?t.slice(0,n)+t.slice(e+1):t}(t)),T&&0==+t&&"+"!==u&&(T=!1),d=(T?"("===u?u:h:"-"===u||"("===u?"":u)+d,k=("s"===C?dn[8+Qr/3]:"")+k+(T&&"("===u?")":""),v)for(n=-1,o=t.length;++n<o;)if(48>(l=t.charCodeAt(n))||l>57){k=(46===l?a+t.slice(n+1):t.slice(n))+k,t=t.slice(0,n);break}}g&&!f&&(t=r(t,1/0));var A=d.length+t.length+k.length,w=A<p?new Array(p-A+1).join(e):"";switch(g&&f&&(t=r(w+t,w.length?p-k.length:1/0),w=""),i){case"<":t=d+t+k+w;break;case"=":t=d+w+t+k;break;case"^":t=w.slice(0,A=w.length>>1)+d+t+k+w.slice(A);break;default:t=w+d+t+k}return s(t)}return y=void 0===y?6:/[gprs]/.test(C)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),k.toString=function(){return t+""},k}return{format:u,formatPrefix:function(t,e){var i=u(((t=tn(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(nn(e)/3))),n=Math.pow(10,-r),o=dn[8+r/3];return function(t){return i(n*t)+o}}}}function pn(t,e,i,r){var n,o=Fr(t,e,i);switch((r=tn(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(n=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(nn(e)/3)))-nn(Math.abs(t)))}(o,a))||(r.precision=n),cn(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(n=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,nn(e)-nn(t))+1}(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=n-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(n=function(t){return Math.max(0,-nn(Math.abs(t)))}(o))||(r.precision=n-2*("%"===r.type))}return hn(r)}function gn(t){var e=t.domain;return t.ticks=function(t){var i=e();return function(t,e,i){if(!((i=+i)>0))return[];if((t=+t)==(e=+e))return[t];const r=e<t,[n,o,a]=r?Sr(e,t,i):Sr(t,e,i);if(!(o>=n))return[];const s=o-n+1,l=new Array(s);if(r)if(a<0)for(let h=0;h<s;++h)l[h]=(o-h)/-a;else for(let h=0;h<s;++h)l[h]=(o-h)*a;else if(a<0)for(let h=0;h<s;++h)l[h]=(n+h)/-a;else for(let h=0;h<s;++h)l[h]=(n+h)*a;return l}(i[0],i[i.length-1],null==t?10:t)},t.tickFormat=function(t,i){var r=e();return pn(r[0],r[r.length-1],null==t?10:t,i)},t.nice=function(i){null==i&&(i=10);var r,n,o=e(),a=0,s=o.length-1,l=o[a],h=o[s],c=10;for(h<l&&(n=l,l=h,h=n,n=a,a=s,s=n);c-- >0;){if((n=Br(l,h,i))===r)return o[a]=l,o[s]=h,e(o);if(n>0)l=Math.floor(l/n)*n,h=Math.ceil(h/n)*n;else{if(!(n<0))break;l=Math.ceil(l*n)/n,h=Math.floor(h*n)/n}r=n}return t},t}function yn(){var t=Jr();return t.copy=function(){return Xr(t,yn())},gr.apply(t,arguments),gn(t)}ln=fn({thousands:",",grouping:[3],currency:["$",""]}),hn=ln.format,cn=ln.formatPrefix;const mn=1e3,Cn=6e4,xn=36e5,_n=864e5,bn=6048e5,vn=2592e6,kn=31536e6,Tn=new Date,An=new Date;function wn(t,e,i,r){function n(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return n.floor=e=>(t(e=new Date(+e)),e),n.ceil=i=>(t(i=new Date(i-1)),e(i,1),t(i),i),n.round=t=>{const e=n(t),i=n.ceil(t);return t-e<i-t?e:i},n.offset=(t,i)=>(e(t=new Date(+t),null==i?1:Math.floor(i)),t),n.range=(i,r,o)=>{const a=[];if(i=n.ceil(i),o=null==o?1:Math.floor(o),!(i<r&&o>0))return a;let s;do{a.push(s=new Date(+i)),e(i,o),t(i)}while(s<i&&i<r);return a},n.filter=i=>wn((e=>{if(e>=e)for(;t(e),!i(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!i(t););else for(;--r>=0;)for(;e(t,1),!i(t););})),i&&(n.count=(e,r)=>(Tn.setTime(+e),An.setTime(+r),t(Tn),t(An),Math.floor(i(Tn,An))),n.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?n.filter(r?e=>r(e)%t==0:e=>n.count(0,e)%t==0):n:null)),n}const Sn=wn((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));Sn.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?wn((e=>{e.setTime(Math.floor(e/t)*t)}),((e,i)=>{e.setTime(+e+i*t)}),((e,i)=>(i-e)/t)):Sn:null);Sn.range;const Bn=wn((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*mn)}),((t,e)=>(e-t)/mn),(t=>t.getUTCSeconds())),Fn=(Bn.range,wn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*mn)}),((t,e)=>{t.setTime(+t+e*Cn)}),((t,e)=>(e-t)/Cn),(t=>t.getMinutes()))),Ln=(Fn.range,wn((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*Cn)}),((t,e)=>(e-t)/Cn),(t=>t.getUTCMinutes()))),Mn=(Ln.range,wn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*mn-t.getMinutes()*Cn)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getHours()))),En=(Mn.range,wn((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getUTCHours()))),On=(En.range,wn((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Cn)/_n),(t=>t.getDate()-1))),In=(On.range,wn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/_n),(t=>t.getUTCDate()-1))),Dn=(In.range,wn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/_n),(t=>Math.floor(t/_n))));Dn.range;function qn(t){return wn((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Cn)/bn))}const Nn=qn(0),$n=qn(1),zn=qn(2),Pn=qn(3),jn=qn(4),Rn=qn(5),Wn=qn(6);Nn.range,$n.range,zn.range,Pn.range,jn.range,Rn.range,Wn.range;function Un(t){return wn((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/bn))}const Hn=Un(0),Yn=Un(1),Vn=Un(2),Gn=Un(3),Xn=Un(4),Zn=Un(5),Jn=Un(6),Qn=(Hn.range,Yn.range,Vn.range,Gn.range,Xn.range,Zn.range,Jn.range,wn((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()))),Kn=(Qn.range,wn((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()))),to=(Kn.range,wn((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear())));to.every=t=>isFinite(t=Math.floor(t))&&t>0?wn((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,i)=>{e.setFullYear(e.getFullYear()+i*t)})):null;to.range;const eo=wn((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));eo.every=t=>isFinite(t=Math.floor(t))&&t>0?wn((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,i)=>{e.setUTCFullYear(e.getUTCFullYear()+i*t)})):null;eo.range;function io(t,e,i,r,n,o){const a=[[Bn,1,mn],[Bn,5,5e3],[Bn,15,15e3],[Bn,30,3e4],[o,1,Cn],[o,5,3e5],[o,15,9e5],[o,30,18e5],[n,1,xn],[n,3,108e5],[n,6,216e5],[n,12,432e5],[r,1,_n],[r,2,1728e5],[i,1,bn],[e,1,vn],[e,3,7776e6],[t,1,kn]];function s(e,i,r){const n=Math.abs(i-e)/r,o=Er((([,,t])=>t)).right(a,n);if(o===a.length)return t.every(Fr(e/kn,i/kn,r));if(0===o)return Sn.every(Math.max(Fr(e,i,r),1));const[s,l]=a[n/a[o-1][2]<a[o][2]/n?o-1:o];return s.every(l)}return[function(t,e,i){const r=e<t;r&&([t,e]=[e,t]);const n=i&&"function"==typeof i.range?i:s(t,e,i),o=n?n.range(t,+e+1):[];return r?o.reverse():o},s]}const[ro,no]=io(eo,Kn,Hn,Dn,En,Ln),[oo,ao]=io(to,Qn,Nn,On,Mn,Fn);function so(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function lo(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function ho(t,e,i){return{y:t,m:e,d:i,H:0,M:0,S:0,L:0}}var co,uo,fo={"-":"",_:" ",0:"0"},po=/^\s*\d+/,go=/^%/,yo=/[\\^$*+?|[\]().{}]/g;function mo(t,e,i){var r=t<0?"-":"",n=(r?-t:t)+"",o=n.length;return r+(o<i?new Array(i-o+1).join(e)+n:n)}function Co(t){return t.replace(yo,"\\$&")}function xo(t){return new RegExp("^(?:"+t.map(Co).join("|")+")","i")}function _o(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function bo(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.w=+r[0],i+r[0].length):-1}function vo(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.u=+r[0],i+r[0].length):-1}function ko(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.U=+r[0],i+r[0].length):-1}function To(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.V=+r[0],i+r[0].length):-1}function Ao(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.W=+r[0],i+r[0].length):-1}function wo(t,e,i){var r=po.exec(e.slice(i,i+4));return r?(t.y=+r[0],i+r[0].length):-1}function So(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),i+r[0].length):-1}function Bo(t,e,i){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(i,i+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),i+r[0].length):-1}function Fo(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.q=3*r[0]-3,i+r[0].length):-1}function Lo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.m=r[0]-1,i+r[0].length):-1}function Mo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.d=+r[0],i+r[0].length):-1}function Eo(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.m=0,t.d=+r[0],i+r[0].length):-1}function Oo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.H=+r[0],i+r[0].length):-1}function Io(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.M=+r[0],i+r[0].length):-1}function Do(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.S=+r[0],i+r[0].length):-1}function qo(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.L=+r[0],i+r[0].length):-1}function No(t,e,i){var r=po.exec(e.slice(i,i+6));return r?(t.L=Math.floor(r[0]/1e3),i+r[0].length):-1}function $o(t,e,i){var r=go.exec(e.slice(i,i+1));return r?i+r[0].length:-1}function zo(t,e,i){var r=po.exec(e.slice(i));return r?(t.Q=+r[0],i+r[0].length):-1}function Po(t,e,i){var r=po.exec(e.slice(i));return r?(t.s=+r[0],i+r[0].length):-1}function jo(t,e){return mo(t.getDate(),e,2)}function Ro(t,e){return mo(t.getHours(),e,2)}function Wo(t,e){return mo(t.getHours()%12||12,e,2)}function Uo(t,e){return mo(1+On.count(to(t),t),e,3)}function Ho(t,e){return mo(t.getMilliseconds(),e,3)}function Yo(t,e){return Ho(t,e)+"000"}function Vo(t,e){return mo(t.getMonth()+1,e,2)}function Go(t,e){return mo(t.getMinutes(),e,2)}function Xo(t,e){return mo(t.getSeconds(),e,2)}function Zo(t){var e=t.getDay();return 0===e?7:e}function Jo(t,e){return mo(Nn.count(to(t)-1,t),e,2)}function Qo(t){var e=t.getDay();return e>=4||0===e?jn(t):jn.ceil(t)}function Ko(t,e){return t=Qo(t),mo(jn.count(to(t),t)+(4===to(t).getDay()),e,2)}function ta(t){return t.getDay()}function ea(t,e){return mo($n.count(to(t)-1,t),e,2)}function ia(t,e){return mo(t.getFullYear()%100,e,2)}function ra(t,e){return mo((t=Qo(t)).getFullYear()%100,e,2)}function na(t,e){return mo(t.getFullYear()%1e4,e,4)}function oa(t,e){var i=t.getDay();return mo((t=i>=4||0===i?jn(t):jn.ceil(t)).getFullYear()%1e4,e,4)}function aa(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+mo(e/60|0,"0",2)+mo(e%60,"0",2)}function sa(t,e){return mo(t.getUTCDate(),e,2)}function la(t,e){return mo(t.getUTCHours(),e,2)}function ha(t,e){return mo(t.getUTCHours()%12||12,e,2)}function ca(t,e){return mo(1+In.count(eo(t),t),e,3)}function ua(t,e){return mo(t.getUTCMilliseconds(),e,3)}function da(t,e){return ua(t,e)+"000"}function fa(t,e){return mo(t.getUTCMonth()+1,e,2)}function pa(t,e){return mo(t.getUTCMinutes(),e,2)}function ga(t,e){return mo(t.getUTCSeconds(),e,2)}function ya(t){var e=t.getUTCDay();return 0===e?7:e}function ma(t,e){return mo(Hn.count(eo(t)-1,t),e,2)}function Ca(t){var e=t.getUTCDay();return e>=4||0===e?Xn(t):Xn.ceil(t)}function xa(t,e){return t=Ca(t),mo(Xn.count(eo(t),t)+(4===eo(t).getUTCDay()),e,2)}function _a(t){return t.getUTCDay()}function ba(t,e){return mo(Yn.count(eo(t)-1,t),e,2)}function va(t,e){return mo(t.getUTCFullYear()%100,e,2)}function ka(t,e){return mo((t=Ca(t)).getUTCFullYear()%100,e,2)}function Ta(t,e){return mo(t.getUTCFullYear()%1e4,e,4)}function Aa(t,e){var i=t.getUTCDay();return mo((t=i>=4||0===i?Xn(t):Xn.ceil(t)).getUTCFullYear()%1e4,e,4)}function wa(){return"+0000"}function Sa(){return"%"}function Ba(t){return+t}function Fa(t){return Math.floor(+t/1e3)}function La(t){return new Date(t)}function Ma(t){return t instanceof Date?+t:+new Date(+t)}function Ea(t,e,i,r,n,o,a,s,l,h){var c=Jr(),u=c.invert,d=c.domain,f=h(".%L"),p=h(":%S"),g=h("%I:%M"),y=h("%I %p"),m=h("%a %d"),C=h("%b %d"),x=h("%B"),_=h("%Y");function b(t){return(l(t)<t?f:s(t)<t?p:a(t)<t?g:o(t)<t?y:r(t)<t?n(t)<t?m:C:i(t)<t?x:_)(t)}return c.invert=function(t){return new Date(u(t))},c.domain=function(t){return arguments.length?d(Array.from(t,Ma)):d().map(La)},c.ticks=function(e){var i=d();return t(i[0],i[i.length-1],null==e?10:e)},c.tickFormat=function(t,e){return null==e?b:h(e)},c.nice=function(t){var i=d();return t&&"function"==typeof t.range||(t=e(i[0],i[i.length-1],null==t?10:t)),t?d(function(t,e){var i,r=0,n=(t=t.slice()).length-1,o=t[r],a=t[n];return a<o&&(i=r,r=n,n=i,i=o,o=a,a=i),t[r]=e.floor(o),t[n]=e.ceil(a),t}(i,t)):c},c.copy=function(){return Xr(c,Ea(t,e,i,r,n,o,a,s,l,h))},c}function Oa(){return gr.apply(Ea(oo,ao,to,Qn,Nn,On,Mn,Fn,Bn,uo).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}!function(t){co=function(t){var e=t.dateTime,i=t.date,r=t.time,n=t.periods,o=t.days,a=t.shortDays,s=t.months,l=t.shortMonths,h=xo(n),c=_o(n),u=xo(o),d=_o(o),f=xo(a),p=_o(a),g=xo(s),y=_o(s),m=xo(l),C=_o(l),x={a:function(t){return a[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:jo,e:jo,f:Yo,g:ra,G:oa,H:Ro,I:Wo,j:Uo,L:Ho,m:Vo,M:Go,p:function(t){return n[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Ba,s:Fa,S:Xo,u:Zo,U:Jo,V:Ko,w:ta,W:ea,x:null,X:null,y:ia,Y:na,Z:aa,"%":Sa},_={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:sa,e:sa,f:da,g:ka,G:Aa,H:la,I:ha,j:ca,L:ua,m:fa,M:pa,p:function(t){return n[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Ba,s:Fa,S:ga,u:ya,U:ma,V:xa,w:_a,W:ba,x:null,X:null,y:va,Y:Ta,Z:wa,"%":Sa},b={a:function(t,e,i){var r=f.exec(e.slice(i));return r?(t.w=p.get(r[0].toLowerCase()),i+r[0].length):-1},A:function(t,e,i){var r=u.exec(e.slice(i));return r?(t.w=d.get(r[0].toLowerCase()),i+r[0].length):-1},b:function(t,e,i){var r=m.exec(e.slice(i));return r?(t.m=C.get(r[0].toLowerCase()),i+r[0].length):-1},B:function(t,e,i){var r=g.exec(e.slice(i));return r?(t.m=y.get(r[0].toLowerCase()),i+r[0].length):-1},c:function(t,i,r){return T(t,e,i,r)},d:Mo,e:Mo,f:No,g:So,G:wo,H:Oo,I:Oo,j:Eo,L:qo,m:Lo,M:Io,p:function(t,e,i){var r=h.exec(e.slice(i));return r?(t.p=c.get(r[0].toLowerCase()),i+r[0].length):-1},q:Fo,Q:zo,s:Po,S:Do,u:vo,U:ko,V:To,w:bo,W:Ao,x:function(t,e,r){return T(t,i,e,r)},X:function(t,e,i){return T(t,r,e,i)},y:So,Y:wo,Z:Bo,"%":$o};function v(t,e){return function(i){var r,n,o,a=[],s=-1,l=0,h=t.length;for(i instanceof Date||(i=new Date(+i));++s<h;)37===t.charCodeAt(s)&&(a.push(t.slice(l,s)),null!=(n=fo[r=t.charAt(++s)])?r=t.charAt(++s):n="e"===r?" ":"0",(o=e[r])&&(r=o(i,n)),a.push(r),l=s+1);return a.push(t.slice(l,s)),a.join("")}}function k(t,e){return function(i){var r,n,o=ho(1900,void 0,1);if(T(o,t,i+="",0)!=i.length)return null;if("Q"in o)return new Date(o.Q);if("s"in o)return new Date(1e3*o.s+("L"in o?o.L:0));if(e&&!("Z"in o)&&(o.Z=0),"p"in o&&(o.H=o.H%12+12*o.p),void 0===o.m&&(o.m="q"in o?o.q:0),"V"in o){if(o.V<1||o.V>53)return null;"w"in o||(o.w=1),"Z"in o?(n=(r=lo(ho(o.y,0,1))).getUTCDay(),r=n>4||0===n?Yn.ceil(r):Yn(r),r=In.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(n=(r=so(ho(o.y,0,1))).getDay(),r=n>4||0===n?$n.ceil(r):$n(r),r=On.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),n="Z"in o?lo(ho(o.y,0,1)).getUTCDay():so(ho(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(n+5)%7:o.w+7*o.U-(n+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,lo(o)):so(o)}}function T(t,e,i,r){for(var n,o,a=0,s=e.length,l=i.length;a<s;){if(r>=l)return-1;if(37===(n=e.charCodeAt(a++))){if(n=e.charAt(a++),!(o=b[n in fo?e.charAt(a++):n])||(r=o(t,i,r))<0)return-1}else if(n!=i.charCodeAt(r++))return-1}return r}return x.x=v(i,x),x.X=v(r,x),x.c=v(e,x),_.x=v(i,_),_.X=v(r,_),_.c=v(e,_),{format:function(t){var e=v(t+="",x);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=v(t+="",_);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}(t),uo=co.format,co.parse,co.utcFormat,co.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});const Ia=function(t){for(var e=t.length/6|0,i=new Array(e),r=0;r<e;)i[r]="#"+t.slice(6*r,6*++r);return i}("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab");function Da(t){return"string"==typeof t?new Ft([[document.querySelector(t)]],[document.documentElement]):new Ft([[t]],Bt)}function qa(t){return"string"==typeof t?new Ft([document.querySelectorAll(t)],[document.documentElement]):new Ft([b(t)],Bt)}function Na(t){return function(){return t}}const $a=Math.abs,za=Math.atan2,Pa=Math.cos,ja=Math.max,Ra=Math.min,Wa=Math.sin,Ua=Math.sqrt,Ha=1e-12,Ya=Math.PI,Va=Ya/2,Ga=2*Ya;function Xa(t){return t>=1?Va:t<=-1?-Va:Math.asin(t)}const Za=Math.PI,Ja=2*Za,Qa=1e-6,Ka=Ja-Qa;function ts(t){this._+=t[0];for(let e=1,i=t.length;e<i;++e)this._+=arguments[e]+t[e]}class es{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?ts:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return ts;const i=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=Math.round(arguments[e]*i)/i+t[e]}}(t)}moveTo(t,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,e){this._append`L${this._x1=+t},${this._y1=+e}`}quadraticCurveTo(t,e,i,r){this._append`Q${+t},${+e},${this._x1=+i},${this._y1=+r}`}bezierCurveTo(t,e,i,r,n,o){this._append`C${+t},${+e},${+i},${+r},${this._x1=+n},${this._y1=+o}`}arcTo(t,e,i,r,n){if(t=+t,e=+e,i=+i,r=+r,(n=+n)<0)throw new Error(`negative radius: ${n}`);let o=this._x1,a=this._y1,s=i-t,l=r-e,h=o-t,c=a-e,u=h*h+c*c;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(u>Qa)if(Math.abs(c*s-l*h)>Qa&&n){let d=i-o,f=r-a,p=s*s+l*l,g=d*d+f*f,y=Math.sqrt(p),m=Math.sqrt(u),C=n*Math.tan((Za-Math.acos((p+u-g)/(2*y*m)))/2),x=C/m,_=C/y;Math.abs(x-1)>Qa&&this._append`L${t+x*h},${e+x*c}`,this._append`A${n},${n},0,0,${+(c*d>h*f)},${this._x1=t+_*s},${this._y1=e+_*l}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,i,r,n,o){if(t=+t,e=+e,o=!!o,(i=+i)<0)throw new Error(`negative radius: ${i}`);let a=i*Math.cos(r),s=i*Math.sin(r),l=t+a,h=e+s,c=1^o,u=o?r-n:n-r;null===this._x1?this._append`M${l},${h}`:(Math.abs(this._x1-l)>Qa||Math.abs(this._y1-h)>Qa)&&this._append`L${l},${h}`,i&&(u<0&&(u=u%Ja+Ja),u>Ka?this._append`A${i},${i},0,1,${c},${t-a},${e-s}A${i},${i},0,1,${c},${this._x1=l},${this._y1=h}`:u>Qa&&this._append`A${i},${i},0,${+(u>=Za)},${c},${this._x1=t+i*Math.cos(n)},${this._y1=e+i*Math.sin(n)}`)}rect(t,e,i,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${i=+i}v${+r}h${-i}Z`}toString(){return this._}}function is(t){let e=3;return t.digits=function(i){if(!arguments.length)return e;if(null==i)e=null;else{const t=Math.floor(i);if(!(t>=0))throw new RangeError(`invalid digits: ${i}`);e=t}return t},()=>new es(e)}function rs(t){return t.innerRadius}function ns(t){return t.outerRadius}function os(t){return t.startAngle}function as(t){return t.endAngle}function ss(t){return t&&t.padAngle}function ls(t,e,i,r,n,o,a){var s=t-i,l=e-r,h=(a?o:-o)/Ua(s*s+l*l),c=h*l,u=-h*s,d=t+c,f=e+u,p=i+c,g=r+u,y=(d+p)/2,m=(f+g)/2,C=p-d,x=g-f,_=C*C+x*x,b=n-o,v=d*g-p*f,k=(x<0?-1:1)*Ua(ja(0,b*b*_-v*v)),T=(v*x-C*k)/_,A=(-v*C-x*k)/_,w=(v*x+C*k)/_,S=(-v*C+x*k)/_,B=T-y,F=A-m,L=w-y,M=S-m;return B*B+F*F>L*L+M*M&&(T=w,A=S),{cx:T,cy:A,x01:-c,y01:-u,x11:T*(n/b-1),y11:A*(n/b-1)}}function hs(){var t=rs,e=ns,i=Na(0),r=null,n=os,o=as,a=ss,s=null,l=is(h);function h(){var h,c,u,d=+t.apply(this,arguments),f=+e.apply(this,arguments),p=n.apply(this,arguments)-Va,g=o.apply(this,arguments)-Va,y=$a(g-p),m=g>p;if(s||(s=h=l()),f<d&&(c=f,f=d,d=c),f>Ha)if(y>Ga-Ha)s.moveTo(f*Pa(p),f*Wa(p)),s.arc(0,0,f,p,g,!m),d>Ha&&(s.moveTo(d*Pa(g),d*Wa(g)),s.arc(0,0,d,g,p,m));else{var C,x,_=p,b=g,v=p,k=g,T=y,A=y,w=a.apply(this,arguments)/2,S=w>Ha&&(r?+r.apply(this,arguments):Ua(d*d+f*f)),B=Ra($a(f-d)/2,+i.apply(this,arguments)),F=B,L=B;if(S>Ha){var M=Xa(S/d*Wa(w)),E=Xa(S/f*Wa(w));(T-=2*M)>Ha?(v+=M*=m?1:-1,k-=M):(T=0,v=k=(p+g)/2),(A-=2*E)>Ha?(_+=E*=m?1:-1,b-=E):(A=0,_=b=(p+g)/2)}var O=f*Pa(_),I=f*Wa(_),D=d*Pa(k),q=d*Wa(k);if(B>Ha){var N,$=f*Pa(b),z=f*Wa(b),P=d*Pa(v),j=d*Wa(v);if(y<Ya)if(N=function(t,e,i,r,n,o,a,s){var l=i-t,h=r-e,c=a-n,u=s-o,d=u*l-c*h;if(!(d*d<Ha))return[t+(d=(c*(e-o)-u*(t-n))/d)*l,e+d*h]}(O,I,P,j,$,z,D,q)){var R=O-N[0],W=I-N[1],U=$-N[0],H=z-N[1],Y=1/Wa(((u=(R*U+W*H)/(Ua(R*R+W*W)*Ua(U*U+H*H)))>1?0:u<-1?Ya:Math.acos(u))/2),V=Ua(N[0]*N[0]+N[1]*N[1]);F=Ra(B,(d-V)/(Y-1)),L=Ra(B,(f-V)/(Y+1))}else F=L=0}A>Ha?L>Ha?(C=ls(P,j,O,I,f,L,m),x=ls($,z,D,q,f,L,m),s.moveTo(C.cx+C.x01,C.cy+C.y01),L<B?s.arc(C.cx,C.cy,L,za(C.y01,C.x01),za(x.y01,x.x01),!m):(s.arc(C.cx,C.cy,L,za(C.y01,C.x01),za(C.y11,C.x11),!m),s.arc(0,0,f,za(C.cy+C.y11,C.cx+C.x11),za(x.cy+x.y11,x.cx+x.x11),!m),s.arc(x.cx,x.cy,L,za(x.y11,x.x11),za(x.y01,x.x01),!m))):(s.moveTo(O,I),s.arc(0,0,f,_,b,!m)):s.moveTo(O,I),d>Ha&&T>Ha?F>Ha?(C=ls(D,q,$,z,d,-F,m),x=ls(O,I,P,j,d,-F,m),s.lineTo(C.cx+C.x01,C.cy+C.y01),F<B?s.arc(C.cx,C.cy,F,za(C.y01,C.x01),za(x.y01,x.x01),!m):(s.arc(C.cx,C.cy,F,za(C.y01,C.x01),za(C.y11,C.x11),!m),s.arc(0,0,d,za(C.cy+C.y11,C.cx+C.x11),za(x.cy+x.y11,x.cx+x.x11),m),s.arc(x.cx,x.cy,F,za(x.y11,x.x11),za(x.y01,x.x01),!m))):s.arc(0,0,d,k,v,m):s.lineTo(D,q)}else s.moveTo(0,0);if(s.closePath(),h)return s=null,h+""||null}return h.centroid=function(){var i=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+n.apply(this,arguments)+ +o.apply(this,arguments))/2-Ya/2;return[Pa(r)*i,Wa(r)*i]},h.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Na(+e),h):t},h.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Na(+t),h):e},h.cornerRadius=function(t){return arguments.length?(i="function"==typeof t?t:Na(+t),h):i},h.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Na(+t),h):r},h.startAngle=function(t){return arguments.length?(n="function"==typeof t?t:Na(+t),h):n},h.endAngle=function(t){return arguments.length?(o="function"==typeof t?t:Na(+t),h):o},h.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Na(+t),h):a},h.context=function(t){return arguments.length?(s=null==t?null:t,h):s},h}es.prototype;Array.prototype.slice;function cs(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function us(t){this._context=t}function ds(t){return new us(t)}function fs(t){return t[0]}function ps(t){return t[1]}function gs(t,e){var i=Na(!0),r=null,n=ds,o=null,a=is(s);function s(s){var l,h,c,u=(s=cs(s)).length,d=!1;for(null==r&&(o=n(c=a())),l=0;l<=u;++l)!(l<u&&i(h=s[l],l,s))===d&&((d=!d)?o.lineStart():o.lineEnd()),d&&o.point(+t(h,l,s),+e(h,l,s));if(c)return o=null,c+""||null}return t="function"==typeof t?t:void 0===t?fs:Na(t),e="function"==typeof e?e:void 0===e?ps:Na(e),s.x=function(e){return arguments.length?(t="function"==typeof e?e:Na(+e),s):t},s.y=function(t){return arguments.length?(e="function"==typeof t?t:Na(+t),s):e},s.defined=function(t){return arguments.length?(i="function"==typeof t?t:Na(!!t),s):i},s.curve=function(t){return arguments.length?(n=t,null!=r&&(o=n(r)),s):n},s.context=function(t){return arguments.length?(null==t?r=o=null:o=n(r=t),s):r},s}function ys(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function ms(t){return t}function Cs(){var t=ms,e=ys,i=null,r=Na(0),n=Na(Ga),o=Na(0);function a(a){var s,l,h,c,u,d=(a=cs(a)).length,f=0,p=new Array(d),g=new Array(d),y=+r.apply(this,arguments),m=Math.min(Ga,Math.max(-Ga,n.apply(this,arguments)-y)),C=Math.min(Math.abs(m)/d,o.apply(this,arguments)),x=C*(m<0?-1:1);for(s=0;s<d;++s)(u=g[p[s]=s]=+t(a[s],s,a))>0&&(f+=u);for(null!=e?p.sort((function(t,i){return e(g[t],g[i])})):null!=i&&p.sort((function(t,e){return i(a[t],a[e])})),s=0,h=f?(m-d*x)/f:0;s<d;++s,y=c)l=p[s],c=y+((u=g[l])>0?u*h:0)+x,g[l]={data:a[l],index:s,value:u,startAngle:y,endAngle:c,padAngle:C};return g}return a.value=function(e){return arguments.length?(t="function"==typeof e?e:Na(+e),a):t},a.sortValues=function(t){return arguments.length?(e=t,i=null,a):e},a.sort=function(t){return arguments.length?(i=t,e=null,a):i},a.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Na(+t),a):r},a.endAngle=function(t){return arguments.length?(n="function"==typeof t?t:Na(+t),a):n},a.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:Na(+t),a):o},a}function xs(){}function _s(t,e,i){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+i)/6)}function bs(t){this._context=t}function vs(t){return new bs(t)}function ks(t){this._context=t}function Ts(t){return new ks(t)}function As(t){this._context=t}function ws(t){return new As(t)}us.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},bs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:_s(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_s(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ks.prototype={areaStart:xs,areaEnd:xs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:_s(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},As.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var i=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(i,r):this._context.moveTo(i,r);break;case 3:this._point=4;default:_s(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class Ss{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function Bs(t){return new Ss(t,!0)}function Fs(t){return new Ss(t,!1)}function Ls(t,e){this._basis=new bs(t),this._beta=e}Ls.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,i=t.length-1;if(i>0)for(var r,n=t[0],o=e[0],a=t[i]-n,s=e[i]-o,l=-1;++l<=i;)r=l/i,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+r*a),this._beta*e[l]+(1-this._beta)*(o+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Ms=function t(e){function i(t){return 1===e?new bs(t):new Ls(t,e)}return i.beta=function(e){return t(+e)},i}(.85);function Es(t,e,i){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-i),t._x2,t._y2)}function Os(t,e){this._context=t,this._k=(1-e)/6}Os.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Es(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Is=function t(e){function i(t){return new Os(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Ds(t,e){this._context=t,this._k=(1-e)/6}Ds.prototype={areaStart:xs,areaEnd:xs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const qs=function t(e){function i(t){return new Ds(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Ns(t,e){this._context=t,this._k=(1-e)/6}Ns.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const $s=function t(e){function i(t){return new Ns(t,e)}return i.tension=function(e){return t(+e)},i}(0);function zs(t,e,i){var r=t._x1,n=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Ha){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,n=(n*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Ha){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,c=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*h+t._x1*t._l23_2a-e*t._l12_2a)/c,a=(a*h+t._y1*t._l23_2a-i*t._l12_2a)/c}t._context.bezierCurveTo(r,n,o,a,t._x2,t._y2)}function Ps(t,e){this._context=t,this._alpha=e}Ps.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:zs(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const js=function t(e){function i(t){return e?new Ps(t,e):new Os(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Rs(t,e){this._context=t,this._alpha=e}Rs.prototype={areaStart:xs,areaEnd:xs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:zs(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Ws=function t(e){function i(t){return e?new Rs(t,e):new Ds(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Us(t,e){this._context=t,this._alpha=e}Us.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:zs(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Hs=function t(e){function i(t){return e?new Us(t,e):new Ns(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Ys(t){this._context=t}function Vs(t){return new Ys(t)}function Gs(t){return t<0?-1:1}function Xs(t,e,i){var r=t._x1-t._x0,n=e-t._x1,o=(t._y1-t._y0)/(r||n<0&&-0),a=(i-t._y1)/(n||r<0&&-0),s=(o*n+a*r)/(r+n);return(Gs(o)+Gs(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(s))||0}function Zs(t,e){var i=t._x1-t._x0;return i?(3*(t._y1-t._y0)/i-e)/2:e}function Js(t,e,i){var r=t._x0,n=t._y0,o=t._x1,a=t._y1,s=(o-r)/3;t._context.bezierCurveTo(r+s,n+s*e,o-s,a-s*i,o,a)}function Qs(t){this._context=t}function Ks(t){this._context=new tl(t)}function tl(t){this._context=t}function el(t){return new Qs(t)}function il(t){return new Ks(t)}function rl(t){this._context=t}function nl(t){var e,i,r=t.length-1,n=new Array(r),o=new Array(r),a=new Array(r);for(n[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e<r-1;++e)n[e]=1,o[e]=4,a[e]=4*t[e]+2*t[e+1];for(n[r-1]=2,o[r-1]=7,a[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)i=n[e]/o[e-1],o[e]-=i,a[e]-=i*a[e-1];for(n[r-1]=a[r-1]/o[r-1],e=r-2;e>=0;--e)n[e]=(a[e]-n[e+1])/o[e];for(o[r-1]=(t[r]+n[r-1])/2,e=0;e<r-1;++e)o[e]=2*t[e+1]-n[e+1];return[n,o]}function ol(t){return new rl(t)}function al(t,e){this._context=t,this._t=e}function sl(t){return new al(t,.5)}function ll(t){return new al(t,0)}function hl(t){return new al(t,1)}function cl(t,e,i){this.k=t,this.x=e,this.y=i}Ys.prototype={areaStart:xs,areaEnd:xs,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},Qs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Js(this,this._t0,Zs(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var i=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Js(this,Zs(this,i=Xs(this,t,e)),i);break;default:Js(this,this._t0,i=Xs(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=i}}},(Ks.prototype=Object.create(Qs.prototype)).point=function(t,e){Qs.prototype.point.call(this,e,t)},tl.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,i,r,n,o){this._context.bezierCurveTo(e,t,r,i,o,n)}},rl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,i=t.length;if(i)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===i)this._context.lineTo(t[1],e[1]);else for(var r=nl(t),n=nl(e),o=0,a=1;a<i;++o,++a)this._context.bezierCurveTo(r[0][o],n[0][o],r[1][o],n[1][o],t[a],e[a]);(this._line||0!==this._line&&1===i)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},al.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var i=this._x*(1-this._t)+t*this._t;this._context.lineTo(i,this._y),this._context.lineTo(i,e)}}this._x=t,this._y=e}},cl.prototype={constructor:cl,scale:function(t){return 1===t?this:new cl(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new cl(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};new cl(1,0,0);cl.prototype},93539:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var r=i(72453),n=i(63122);const o=class{constructor(){this.type=n.Z.ALL}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=n.Z.ALL}is(t){return this.type===t}};const a=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new o}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=n.Z.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:i,l:n}=t;void 0===e&&(t.h=r.A.channel.rgb2hsl(t,"h")),void 0===i&&(t.s=r.A.channel.rgb2hsl(t,"s")),void 0===n&&(t.l=r.A.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:i,b:n}=t;void 0===e&&(t.r=r.A.channel.hsl2rgb(t,"r")),void 0===i&&(t.g=r.A.channel.hsl2rgb(t,"g")),void 0===n&&(t.b=r.A.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(n.Z.HSL)||void 0===e?(this._ensureHSL(),r.A.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(n.Z.HSL)||void 0===e?(this._ensureHSL(),r.A.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(n.Z.HSL)||void 0===e?(this._ensureHSL(),r.A.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(n.Z.RGB)||void 0===e?(this._ensureRGB(),r.A.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(n.Z.RGB)||void 0===e?(this._ensureRGB(),r.A.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(n.Z.RGB)||void 0===e?(this._ensureRGB(),r.A.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(n.Z.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(n.Z.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(n.Z.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(n.Z.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(n.Z.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(n.Z.HSL),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}({r:0,g:0,b:0,a:0},"transparent")},74886:(t,e,i)=>{"use strict";i.d(e,{A:()=>g});var r=i(93539),n=i(63122);const o={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(o.re);if(!e)return;const i=e[1],n=parseInt(i,16),a=i.length,s=a%4==0,l=a>4,h=l?1:17,c=l?8:4,u=s?0:-1,d=l?255:15;return r.A.set({r:(n>>c*(u+3)&d)*h,g:(n>>c*(u+2)&d)*h,b:(n>>c*(u+1)&d)*h,a:s?(n&d)*h/255:1},t)},stringify:t=>{const{r:e,g:i,b:r,a:o}=t;return o<1?`#${n.Y[Math.round(e)]}${n.Y[Math.round(i)]}${n.Y[Math.round(r)]}${n.Y[Math.round(255*o)]}`:`#${n.Y[Math.round(e)]}${n.Y[Math.round(i)]}${n.Y[Math.round(r)]}`}},a=o;var s=i(72453);const l={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(l.hueRe);if(e){const[,t,i]=e;switch(i){case"grad":return s.A.channel.clamp.h(.9*parseFloat(t));case"rad":return s.A.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return s.A.channel.clamp.h(360*parseFloat(t))}}return s.A.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const i=t.match(l.re);if(!i)return;const[,n,o,a,h,c]=i;return r.A.set({h:l._hue2deg(n),s:s.A.channel.clamp.s(parseFloat(o)),l:s.A.channel.clamp.l(parseFloat(a)),a:h?s.A.channel.clamp.a(c?parseFloat(h)/100:parseFloat(h)):1},t)},stringify:t=>{const{h:e,s:i,l:r,a:n}=t;return n<1?`hsla(${s.A.lang.round(e)}, ${s.A.lang.round(i)}%, ${s.A.lang.round(r)}%, ${n})`:`hsl(${s.A.lang.round(e)}, ${s.A.lang.round(i)}%, ${s.A.lang.round(r)}%)`}},h=l,c={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=c.colors[t];if(e)return a.parse(e)},stringify:t=>{const e=a.stringify(t);for(const i in c.colors)if(c.colors[i]===e)return i}},u=c,d={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(114!==e&&82!==e)return;const i=t.match(d.re);if(!i)return;const[,n,o,a,l,h,c,u,f]=i;return r.A.set({r:s.A.channel.clamp.r(o?2.55*parseFloat(n):parseFloat(n)),g:s.A.channel.clamp.g(l?2.55*parseFloat(a):parseFloat(a)),b:s.A.channel.clamp.b(c?2.55*parseFloat(h):parseFloat(h)),a:u?s.A.channel.clamp.a(f?parseFloat(u)/100:parseFloat(u)):1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`rgba(${s.A.lang.round(e)}, ${s.A.lang.round(i)}, ${s.A.lang.round(r)}, ${s.A.lang.round(n)})`:`rgb(${s.A.lang.round(e)}, ${s.A.lang.round(i)}, ${s.A.lang.round(r)})`}},f=d,p={format:{keyword:c,hex:a,rgb:d,rgba:d,hsl:l,hsla:l},parse:t=>{if("string"!=typeof t)return t;const e=a.parse(t)||f.parse(t)||h.parse(t)||u.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(n.Z.HSL)||void 0===t.data.r?h.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?f.stringify(t):a.stringify(t)},g=p},63122:(t,e,i)=>{"use strict";i.d(e,{Y:()=>n,Z:()=>o});var r=i(72453);const n={};for(let a=0;a<=255;a++)n[a]=r.A.unit.dec2hex(a);const o={ALL:0,RGB:1,HSL:2}},95635:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(72453),n=i(74886);const o=(t,e,i)=>{const o=n.A.parse(t),a=o[e],s=r.A.channel.clamp[e](a+i);return a!==s&&(o[e]=s),n.A.stringify(o)}},8232:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(72453),n=i(74886);const o=(t,e)=>{const i=n.A.parse(t);for(const n in e)i[n]=r.A.channel.clamp[n](e[n]);return n.A.stringify(i)}},75263:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(95635);const n=(t,e)=>(0,r.A)(t,"l",-e)},3219:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});var r=i(72453),n=i(74886);const o=t=>{const{r:e,g:i,b:o}=n.A.parse(t),a=.2126*r.A.channel.toLinear(e)+.7152*r.A.channel.toLinear(i)+.0722*r.A.channel.toLinear(o);return r.A.lang.round(a)},a=t=>o(t)>=.5,s=t=>!a(t)},78041:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(95635);const n=(t,e)=>(0,r.A)(t,"l",e)},25582:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});var r=i(72453),n=i(93539),o=i(74886),a=i(8232);const s=(t,e,i=0,s=1)=>{if("number"!=typeof t)return(0,a.A)(t,{a:e});const l=n.A.set({r:r.A.channel.clamp.r(t),g:r.A.channel.clamp.g(e),b:r.A.channel.clamp.b(i),a:r.A.channel.clamp.a(s)});return o.A.stringify(l)}},72453:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});const r={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),hsl2rgb:({h:t,s:e,l:i},n)=>{if(!e)return 2.55*i;t/=360,e/=100;const o=(i/=100)<.5?i*(1+e):i+e-i*e,a=2*i-o;switch(n){case"r":return 255*r.hue2rgb(a,o,t+1/3);case"g":return 255*r.hue2rgb(a,o,t);case"b":return 255*r.hue2rgb(a,o,t-1/3)}},rgb2hsl:({r:t,g:e,b:i},r)=>{t/=255,e/=255,i/=255;const n=Math.max(t,e,i),o=Math.min(t,e,i),a=(n+o)/2;if("l"===r)return 100*a;if(n===o)return 0;const s=n-o;if("s"===r)return 100*(a>.5?s/(2-n-o):s/(n+o));switch(n){case t:return 60*((e-i)/s+(e<i?6:0));case e:return 60*((i-t)/s+2);case i:return 60*((t-e)/s+4);default:return-1}}},n={channel:r,lang:{clamp:(t,e,i)=>e>i?Math.min(e,Math.max(i,t)):Math.min(i,Math.max(e,t)),round:t=>Math.round(1e10*t)/1e10},unit:{dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}}}},80127:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});const r=function(){this.__data__=[],this.size=0};var n=i(66984);const o=function(t,e){for(var i=t.length;i--;)if((0,n.A)(t[i][0],e))return i;return-1};var a=Array.prototype.splice;const s=function(t){var e=this.__data__,i=o(e,t);return!(i<0)&&(i==e.length-1?e.pop():a.call(e,i,1),--this.size,!0)};const l=function(t){var e=this.__data__,i=o(e,t);return i<0?void 0:e[i][1]};const h=function(t){return o(this.__data__,t)>-1};const c=function(t,e){var i=this.__data__,r=o(i,t);return r<0?(++this.size,i.push([t,e])):i[r][1]=e,this};function u(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=s,u.prototype.get=l,u.prototype.has=h,u.prototype.set=c;const d=u},68335:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(18744),n=i(41917);const o=(0,r.A)(n.A,"Map")},29471:(t,e,i)=>{"use strict";i.d(e,{A:()=>k});const r=(0,i(18744).A)(Object,"create");const n=function(){this.__data__=r?r(null):{},this.size=0};const o=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var a=Object.prototype.hasOwnProperty;const s=function(t){var e=this.__data__;if(r){var i=e[t];return"__lodash_hash_undefined__"===i?void 0:i}return a.call(e,t)?e[t]:void 0};var l=Object.prototype.hasOwnProperty;const h=function(t){var e=this.__data__;return r?void 0!==e[t]:l.call(e,t)};const c=function(t,e){var i=this.__data__;return this.size+=this.has(t)?0:1,i[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this};function u(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=s,u.prototype.has=h,u.prototype.set=c;const d=u;var f=i(80127),p=i(68335);const g=function(){this.size=0,this.__data__={hash:new d,map:new(p.A||f.A),string:new d}};const y=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};const m=function(t,e){var i=t.__data__;return y(e)?i["string"==typeof e?"string":"hash"]:i.map};const C=function(t){var e=m(this,t).delete(t);return this.size-=e?1:0,e};const x=function(t){return m(this,t).get(t)};const _=function(t){return m(this,t).has(t)};const b=function(t,e){var i=m(this,t),r=i.size;return i.set(t,e),this.size+=i.size==r?0:1,this};function v(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}v.prototype.clear=g,v.prototype.delete=C,v.prototype.get=x,v.prototype.has=_,v.prototype.set=b;const k=v},39857:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(18744),n=i(41917);const o=(0,r.A)(n.A,"Set")},11754:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});var r=i(80127);const n=function(){this.__data__=new r.A,this.size=0};const o=function(t){var e=this.__data__,i=e.delete(t);return this.size=e.size,i};const a=function(t){return this.__data__.get(t)};const s=function(t){return this.__data__.has(t)};var l=i(68335),h=i(29471);const c=function(t,e){var i=this.__data__;if(i instanceof r.A){var n=i.__data__;if(!l.A||n.length<199)return n.push([t,e]),this.size=++i.size,this;i=this.__data__=new h.A(n)}return i.set(t,e),this.size=i.size,this};function u(t){var e=this.__data__=new r.A(t);this.size=e.size}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=a,u.prototype.has=s,u.prototype.set=c;const d=u},241:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=i(41917).A.Symbol},43988:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=i(41917).A.Uint8Array},83607:(t,e,i)=>{"use strict";i.d(e,{A:()=>c});const r=function(t,e){for(var i=-1,r=Array(t);++i<t;)r[i]=e(i);return r};var n=i(52274),o=i(92049),a=i(99912),s=i(25353),l=i(33858),h=Object.prototype.hasOwnProperty;const c=function(t,e){var i=(0,o.A)(t),c=!i&&(0,n.A)(t),u=!i&&!c&&(0,a.A)(t),d=!i&&!c&&!u&&(0,l.A)(t),f=i||c||u||d,p=f?r(t.length,String):[],g=p.length;for(var y in t)!e&&!h.call(t,y)||f&&("length"==y||u&&("offset"==y||"parent"==y)||d&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||(0,s.A)(y,g))||p.push(y);return p}},52851:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var r=i(52528),n=i(66984),o=Object.prototype.hasOwnProperty;const a=function(t,e,i){var a=t[e];o.call(t,e)&&(0,n.A)(a,i)&&(void 0!==i||e in t)||(0,r.A)(t,e,i)}},52528:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(84171);const n=function(t,e,i){"__proto__"==e&&r.A?(0,r.A)(t,e,{configurable:!0,enumerable:!0,value:i,writable:!0}):t[e]=i}},4574:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return function(e,i,r){for(var n=-1,o=Object(e),a=r(e),s=a.length;s--;){var l=a[t?s:++n];if(!1===i(o[l],l,o))break}return e}}()},88496:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});var r=i(241),n=Object.prototype,o=n.hasOwnProperty,a=n.toString,s=r.A?r.A.toStringTag:void 0;const l=function(t){var e=o.call(t,s),i=t[s];try{t[s]=void 0;var r=!0}catch(l){}var n=a.call(t);return r&&(e?t[s]=i:delete t[s]),n};var h=Object.prototype.toString;const c=function(t){return h.call(t)};var u=r.A?r.A.toStringTag:void 0;const d=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?l(t):c(t)}},69471:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var r=i(97271);const n=(0,i(40367).A)(Object.keys,Object);var o=Object.prototype.hasOwnProperty;const a=function(t){if(!(0,r.A)(t))return n(t);var e=[];for(var i in Object(t))o.call(t,i)&&"constructor"!=i&&e.push(i);return e}},24326:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var r=i(29008),n=i(76875),o=i(67525);const a=function(t,e){return(0,o.A)((0,n.A)(t,e,r.A),t+"")}},52789:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return function(e){return t(e)}}},90565:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(43988);const n=function(t){var e=new t.constructor(t.byteLength);return new r.A(e).set(new r.A(t)),e}},80154:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});var r=i(41917),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n?r.A.Buffer:void 0,s=a?a.allocUnsafe:void 0;const l=function(t,e){if(e)return t.slice();var i=t.length,r=s?s(i):new t.constructor(i);return t.copy(r),r}},1801:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(90565);const n=function(t,e){var i=e?(0,r.A)(t.buffer):t.buffer;return new t.constructor(i,t.byteOffset,t.length)}},39759:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t,e){var i=-1,r=t.length;for(e||(e=Array(r));++i<r;)e[i]=t[i];return e}},22031:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(52851),n=i(52528);const o=function(t,e,i,o){var a=!i;i||(i={});for(var s=-1,l=e.length;++s<l;){var h=e[s],c=o?o(i[h],t[h],h,i,t):void 0;void 0===c&&(c=t[h]),a?(0,n.A)(i,h,c):(0,r.A)(i,h,c)}return i}},84171:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(18744);const n=function(){try{var t=(0,r.A)(Object,"defineProperty");return t({},"",{}),t}catch(e){}}()},72136:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r="object"==typeof global&&global&&global.Object===Object&&global},18744:(t,e,i)=>{"use strict";i.d(e,{A:()=>C});var r=i(89610);const n=i(41917).A["__core-js_shared__"];var o,a=(o=/[^.]+$/.exec(n&&n.keys&&n.keys.IE_PROTO||""))?"Symbol(src)_1."+o:"";const s=function(t){return!!a&&a in t};var l=i(23149),h=i(81121),c=/^\[object .+?Constructor\]$/,u=Function.prototype,d=Object.prototype,f=u.toString,p=d.hasOwnProperty,g=RegExp("^"+f.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const y=function(t){return!(!(0,l.A)(t)||s(t))&&((0,r.A)(t)?g:c).test((0,h.A)(t))};const m=function(t,e){return null==t?void 0:t[e]};const C=function(t,e){var i=m(t,e);return y(i)?i:void 0}},15647:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=(0,i(40367).A)(Object.getPrototypeOf,Object)},9779:(t,e,i)=>{"use strict";i.d(e,{A:()=>k});var r=i(18744),n=i(41917);const o=(0,r.A)(n.A,"DataView");var a=i(68335);const s=(0,r.A)(n.A,"Promise");var l=i(39857);const h=(0,r.A)(n.A,"WeakMap");var c=i(88496),u=i(81121),d="[object Map]",f="[object Promise]",p="[object Set]",g="[object WeakMap]",y="[object DataView]",m=(0,u.A)(o),C=(0,u.A)(a.A),x=(0,u.A)(s),_=(0,u.A)(l.A),b=(0,u.A)(h),v=c.A;(o&&v(new o(new ArrayBuffer(1)))!=y||a.A&&v(new a.A)!=d||s&&v(s.resolve())!=f||l.A&&v(new l.A)!=p||h&&v(new h)!=g)&&(v=function(t){var e=(0,c.A)(t),i="[object Object]"==e?t.constructor:void 0,r=i?(0,u.A)(i):"";if(r)switch(r){case m:return y;case C:return d;case x:return f;case _:return p;case b:return g}return e});const k=v},18598:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});var r=i(23149),n=Object.create;const o=function(){function t(){}return function(e){if(!(0,r.A)(e))return{};if(n)return n(e);t.prototype=e;var i=new t;return t.prototype=void 0,i}}();var a=i(15647),s=i(97271);const l=function(t){return"function"!=typeof t.constructor||(0,s.A)(t)?{}:o((0,a.A)(t))}},25353:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=/^(?:0|[1-9]\d*)$/;const n=function(t,e){var i=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==i||"symbol"!=i&&r.test(t))&&t>-1&&t%1==0&&t<e}},6832:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});var r=i(66984),n=i(38446),o=i(25353),a=i(23149);const s=function(t,e,i){if(!(0,a.A)(i))return!1;var s=typeof e;return!!("number"==s?(0,n.A)(i)&&(0,o.A)(e,i.length):"string"==s&&e in i)&&(0,r.A)(i[e],t)}},97271:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=Object.prototype;const n=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},64841:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});var r=i(72136),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n&&r.A.process;const s=function(){try{var t=o&&o.require&&o.require("util").types;return t||a&&a.binding&&a.binding("util")}catch(e){}}()},40367:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t,e){return function(i){return t(e(i))}}},76875:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});const r=function(t,e,i){switch(i.length){case 0:return t.call(e);case 1:return t.call(e,i[0]);case 2:return t.call(e,i[0],i[1]);case 3:return t.call(e,i[0],i[1],i[2])}return t.apply(e,i)};var n=Math.max;const o=function(t,e,i){return e=n(void 0===e?t.length-1:e,0),function(){for(var o=arguments,a=-1,s=n(o.length-e,0),l=Array(s);++a<s;)l[a]=o[e+a];a=-1;for(var h=Array(e+1);++a<e;)h[a]=o[a];return h[e]=i(l),r(t,this,h)}}},41917:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(72136),n="object"==typeof self&&self&&self.Object===Object&&self;const o=r.A||n||Function("return this")()},67525:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});var r=i(39142),n=i(84171),o=i(29008);const a=n.A?function(t,e){return(0,n.A)(t,"toString",{configurable:!0,enumerable:!1,value:(0,r.A)(e),writable:!0})}:o.A;var s=Date.now;const l=function(t){var e=0,i=0;return function(){var r=s(),n=16-(r-i);if(i=r,n>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(a)},81121:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=Function.prototype.toString;const n=function(t){if(null!=t){try{return r.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},39142:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return function(){return t}}},66984:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t,e){return t===e||t!=t&&e!=e}},29008:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return t}},52274:(t,e,i)=>{"use strict";i.d(e,{A:()=>h});var r=i(88496),n=i(53098);const o=function(t){return(0,n.A)(t)&&"[object Arguments]"==(0,r.A)(t)};var a=Object.prototype,s=a.hasOwnProperty,l=a.propertyIsEnumerable;const h=o(function(){return arguments}())?o:function(t){return(0,n.A)(t)&&s.call(t,"callee")&&!l.call(t,"callee")}},92049:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=Array.isArray},38446:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(89610),n=i(5254);const o=function(t){return null!=t&&(0,n.A)(t.length)&&!(0,r.A)(t)}},53533:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(38446),n=i(53098);const o=function(t){return(0,n.A)(t)&&(0,r.A)(t)}},99912:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});var r=i(41917);const n=function(){return!1};var o="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=o&&"object"==typeof module&&module&&!module.nodeType&&module,s=a&&a.exports===o?r.A.Buffer:void 0;const l=(s?s.isBuffer:void 0)||n},66401:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});var r=i(69471),n=i(9779),o=i(52274),a=i(92049),s=i(38446),l=i(99912),h=i(97271),c=i(33858),u=Object.prototype.hasOwnProperty;const d=function(t){if(null==t)return!0;if((0,s.A)(t)&&((0,a.A)(t)||"string"==typeof t||"function"==typeof t.splice||(0,l.A)(t)||(0,c.A)(t)||(0,o.A)(t)))return!t.length;var e=(0,n.A)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,h.A)(t))return!(0,r.A)(t).length;for(var i in t)if(u.call(t,i))return!1;return!0}},89610:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(88496),n=i(23149);const o=function(t){if(!(0,n.A)(t))return!1;var e=(0,r.A)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},5254:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},23149:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},53098:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return null!=t&&"object"==typeof t}},34963:(t,e,i)=>{"use strict";i.d(e,{A:()=>u});var r=i(88496),n=i(15647),o=i(53098),a=Function.prototype,s=Object.prototype,l=a.toString,h=s.hasOwnProperty,c=l.call(Object);const u=function(t){if(!(0,o.A)(t)||"[object Object]"!=(0,r.A)(t))return!1;var e=(0,n.A)(t);if(null===e)return!0;var i=h.call(e,"constructor")&&e.constructor;return"function"==typeof i&&i instanceof i&&l.call(i)==c}},33858:(t,e,i)=>{"use strict";i.d(e,{A:()=>u});var r=i(88496),n=i(5254),o=i(53098),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1;const s=function(t){return(0,o.A)(t)&&(0,n.A)(t.length)&&!!a[(0,r.A)(t)]};var l=i(52789),h=i(64841),c=h.A&&h.A.isTypedArray;const u=c?(0,l.A)(c):s},55615:(t,e,i)=>{"use strict";i.d(e,{A:()=>c});var r=i(83607),n=i(23149),o=i(97271);const a=function(t){var e=[];if(null!=t)for(var i in Object(t))e.push(i);return e};var s=Object.prototype.hasOwnProperty;const l=function(t){if(!(0,n.A)(t))return a(t);var e=(0,o.A)(t),i=[];for(var r in t)("constructor"!=r||!e&&s.call(t,r))&&i.push(r);return i};var h=i(38446);const c=function(t){return(0,h.A)(t)?(0,r.A)(t,!0):l(t)}},46632:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(29471);function n(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var i=function(){var r=arguments,n=e?e.apply(this,r):r[0],o=i.cache;if(o.has(n))return o.get(n);var a=t.apply(this,r);return i.cache=o.set(n,a)||o,a};return i.cache=new(n.Cache||r.A),i}n.Cache=r.A;const o=n},98879:(t,e,i)=>{"use strict";i.d(e,{A:()=>B});var r=i(11754),n=i(52528),o=i(66984);const a=function(t,e,i){(void 0!==i&&!(0,o.A)(t[e],i)||void 0===i&&!(e in t))&&(0,n.A)(t,e,i)};var s=i(4574),l=i(80154),h=i(1801),c=i(39759),u=i(18598),d=i(52274),f=i(92049),p=i(53533),g=i(99912),y=i(89610),m=i(23149),C=i(34963),x=i(33858);const _=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]};var b=i(22031),v=i(55615);const k=function(t){return(0,b.A)(t,(0,v.A)(t))};const T=function(t,e,i,r,n,o,s){var b=_(t,i),v=_(e,i),T=s.get(v);if(T)a(t,i,T);else{var A=o?o(b,v,i+"",t,e,s):void 0,w=void 0===A;if(w){var S=(0,f.A)(v),B=!S&&(0,g.A)(v),F=!S&&!B&&(0,x.A)(v);A=v,S||B||F?(0,f.A)(b)?A=b:(0,p.A)(b)?A=(0,c.A)(b):B?(w=!1,A=(0,l.A)(v,!0)):F?(w=!1,A=(0,h.A)(v,!0)):A=[]:(0,C.A)(v)||(0,d.A)(v)?(A=b,(0,d.A)(b)?A=k(b):(0,m.A)(b)&&!(0,y.A)(b)||(A=(0,u.A)(v))):w=!1}w&&(s.set(v,A),n(A,v,r,o,s),s.delete(v)),a(t,i,A)}};const A=function t(e,i,n,o,l){e!==i&&(0,s.A)(i,(function(s,h){if(l||(l=new r.A),(0,m.A)(s))T(e,i,h,n,t,o,l);else{var c=o?o(_(e,h),s,h+"",e,i,l):void 0;void 0===c&&(c=s),a(e,h,c)}}),v.A)};var w=i(24326),S=i(6832);const B=function(t){return(0,w.A)((function(e,i){var r=-1,n=i.length,o=n>1?i[n-1]:void 0,a=n>2?i[2]:void 0;for(o=t.length>3&&"function"==typeof o?(n--,o):void 0,a&&(0,S.A)(i[0],i[1],a)&&(o=n<3?void 0:o,n=1),e=Object(e);++r<n;){var s=i[r];s&&t(e,s,r,o)}return e}))}((function(t,e,i){A(t,e,i)}))},99702:(t,e,i)=>{"use strict";i.d(e,{A:()=>Hi,B:()=>Rt,C:()=>ve,D:()=>be,E:()=>It,F:()=>Ie,G:()=>Tt,H:()=>At,I:()=>ue,J:()=>ct,K:()=>$i,L:()=>Oi,M:()=>Te,N:()=>ho,Z:()=>ee,a:()=>Li,b:()=>Fi,c:()=>qi,d:()=>pt,e:()=>St,f:()=>te,g:()=>Bi,h:()=>me,i:()=>Ci,j:()=>ye,k:()=>he,l:()=>st,m:()=>mt,n:()=>oe,o:()=>xi,p:()=>Ni,q:()=>Mi,r:()=>wt,s:()=>Si,t:()=>Ei,u:()=>ke,v:()=>wi,w:()=>pe,x:()=>Ct,y:()=>de,z:()=>Pi});var r=i(60513),n=i(74353),o=i(16750),a=i(26312),s=i(42838),l=i(74886),h=i(8232);const c=(t,e)=>{const i=l.A.parse(t),r={};for(const n in e)e[n]&&(r[n]=i[n]+e[n]);return(0,h.A)(t,r)};var u=i(25582);const d=(t,e,i=50)=>{const{r:r,g:n,b:o,a:a}=l.A.parse(t),{r:s,g:h,b:c,a:d}=l.A.parse(e),f=i/100,p=2*f-1,g=a-d,y=((p*g==-1?p:(p+g)/(1+p*g))+1)/2,m=1-y,C=r*y+s*m,x=n*y+h*m,_=o*y+c*m,b=a*f+d*(1-f);return(0,u.A)(C,x,_,b)},f=(t,e=100)=>{const i=l.A.parse(t);return i.r=255-i.r,i.g=255-i.g,i.b=255-i.b,d(i,t,e)};var p=i(75263),g=i(78041),y=i(3219),m=i(46632),C=i(98879),x="comm",_="rule",b="decl",v=Math.abs,k=String.fromCharCode;Object.assign;function T(t){return t.trim()}function A(t,e,i){return t.replace(e,i)}function w(t,e,i){return t.indexOf(e,i)}function S(t,e){return 0|t.charCodeAt(e)}function B(t,e,i){return t.slice(e,i)}function F(t){return t.length}function L(t,e){return e.push(t),t}function M(t,e){for(var i="",r=0;r<t.length;r++)i+=e(t[r],r,t,e)||"";return i}function E(t,e,i,r){switch(t.type){case"@layer":if(t.children.length)break;case"@import":case b:return t.return=t.return||t.value;case x:return"";case"@keyframes":return t.return=t.value+"{"+M(t.children,r)+"}";case _:if(!F(t.value=t.props.join(",")))return""}return F(i=M(t.children,r))?t.return=t.value+"{"+i+"}":""}var O=1,I=1,D=0,q=0,N=0,$="";function z(t,e,i,r,n,o,a,s){return{value:t,root:e,parent:i,type:r,props:n,children:o,line:O,column:I,length:a,return:"",siblings:s}}function P(){return N=q>0?S($,--q):0,I--,10===N&&(I=1,O--),N}function j(){return N=q<D?S($,q++):0,I++,10===N&&(I=1,O++),N}function R(){return S($,q)}function W(){return q}function U(t,e){return B($,t,e)}function H(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function Y(t){return O=I=1,D=F($=t),q=0,[]}function V(t){return $="",t}function G(t){return T(U(q-1,J(91===t?t+2:40===t?t+1:t)))}function X(t){for(;(N=R())&&N<33;)j();return H(t)>2||H(N)>3?"":" "}function Z(t,e){for(;--e&&j()&&!(N<48||N>102||N>57&&N<65||N>70&&N<97););return U(t,W()+(e<6&&32==R()&&32==j()))}function J(t){for(;j();)switch(N){case t:return q;case 34:case 39:34!==t&&39!==t&&J(N);break;case 40:41===t&&J(t);break;case 92:j()}return q}function Q(t,e){for(;j()&&t+N!==57&&(t+N!==84||47!==R()););return"/*"+U(e,q-1)+"*"+k(47===t?t:j())}function K(t){for(;!H(R());)j();return U(t,q)}function tt(t){return V(et("",null,null,null,[""],t=Y(t),0,[0],t))}function et(t,e,i,r,n,o,a,s,l){for(var h=0,c=0,u=a,d=0,f=0,p=0,g=1,y=1,m=1,C=0,x="",_=n,b=o,T=r,B=x;y;)switch(p=C,C=j()){case 40:if(108!=p&&58==S(B,u-1)){-1!=w(B+=A(G(C),"&","&\f"),"&\f",v(h?s[h-1]:0))&&(m=-1);break}case 34:case 39:case 91:B+=G(C);break;case 9:case 10:case 13:case 32:B+=X(p);break;case 92:B+=Z(W()-1,7);continue;case 47:switch(R()){case 42:case 47:L(rt(Q(j(),W()),e,i,l),l);break;default:B+="/"}break;case 123*g:s[h++]=F(B)*m;case 125*g:case 59:case 0:switch(C){case 0:case 125:y=0;case 59+c:-1==m&&(B=A(B,/\f/g,"")),f>0&&F(B)-u&&L(f>32?nt(B+";",r,i,u-1,l):nt(A(B," ","")+";",r,i,u-2,l),l);break;case 59:B+=";";default:if(L(T=it(B,e,i,h,c,n,s,x,_=[],b=[],u,o),o),123===C)if(0===c)et(B,e,T,T,_,o,u,s,b);else switch(99===d&&110===S(B,3)?100:d){case 100:case 108:case 109:case 115:et(t,T,T,r&&L(it(t,T,T,0,0,n,s,x,n,_=[],u,b),b),n,b,u,s,r?_:b);break;default:et(B,T,T,T,[""],b,0,s,b)}}h=c=f=0,g=m=1,x=B="",u=a;break;case 58:u=1+F(B),f=p;default:if(g<1)if(123==C)--g;else if(125==C&&0==g++&&125==P())continue;switch(B+=k(C),C*g){case 38:m=c>0?1:(B+="\f",-1);break;case 44:s[h++]=(F(B)-1)*m,m=1;break;case 64:45===R()&&(B+=G(j())),d=R(),c=u=F(x=B+=K(W())),C++;break;case 45:45===p&&2==F(B)&&(g=0)}}return o}function it(t,e,i,r,n,o,a,s,l,h,c,u){for(var d=n-1,f=0===n?o:[""],p=function(t){return t.length}(f),g=0,y=0,m=0;g<r;++g)for(var C=0,x=B(t,d+1,d=v(y=a[g])),b=t;C<p;++C)(b=T(y>0?f[C]+" "+x:A(x,/&\f/g,f[C])))&&(l[m++]=b);return z(t,e,i,0===n?_:s,l,h,c,u)}function rt(t,e,i,r){return z(t,e,i,x,k(N),B(t,2,-2),0,r)}function nt(t,e,i,r,n){return z(t,e,i,b,B(t,0,r),B(t,r+1,-1),r,n)}var ot=i(66401);const at={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},st={trace:(...t)=>{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},lt=function(t="fatal"){let e=at.fatal;"string"==typeof t?(t=t.toLowerCase())in at&&(e=at[t]):"number"==typeof t&&(e=t),st.trace=()=>{},st.debug=()=>{},st.info=()=>{},st.warn=()=>{},st.error=()=>{},st.fatal=()=>{},e<=at.fatal&&(st.fatal=console.error?console.error.bind(console,ht("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",ht("FATAL"))),e<=at.error&&(st.error=console.error?console.error.bind(console,ht("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",ht("ERROR"))),e<=at.warn&&(st.warn=console.warn?console.warn.bind(console,ht("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",ht("WARN"))),e<=at.info&&(st.info=console.info?console.info.bind(console,ht("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",ht("INFO"))),e<=at.debug&&(st.debug=console.debug?console.debug.bind(console,ht("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ht("DEBUG"))),e<=at.trace&&(st.trace=console.debug?console.debug.bind(console,ht("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ht("TRACE")))},ht=t=>`%c${n().format("ss.SSS")} : ${t} : `,ct=/<br\s*\/?>/gi,ut=(()=>{let t=!1;return()=>{t||(!function(){const t="data-temp-href-target";s.addHook("beforeSanitizeAttributes",(e=>{"A"===e.tagName&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")||"")})),s.addHook("afterSanitizeAttributes",(e=>{"A"===e.tagName&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)||""),e.removeAttribute(t),"_blank"===e.getAttribute("target")&&e.setAttribute("rel","noopener"))}))}(),t=!0)}})();const dt=t=>{ut();return s.sanitize(t)},ft=(t,e)=>{var i;if(!1!==(null==(i=e.flowchart)?void 0:i.htmlLabels)){const i=e.securityLevel;"antiscript"===i||"strict"===i?t=dt(t):"loose"!==i&&(t=(t=(t=yt(t)).replace(/</g,"<").replace(/>/g,">")).replace(/=/g,"="),t=gt(t))}return t},pt=(t,e)=>t?t=e.dompurifyConfig?s.sanitize(ft(t,e),e.dompurifyConfig).toString():s.sanitize(ft(t,e),{FORBID_TAGS:["style"]}).toString():t,gt=t=>t.replace(/#br#/g,"<br/>"),yt=t=>t.replace(ct,"#br#"),mt=t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),Ct=function(t){const e=t.split(/(,)/),i=[];for(let r=0;r<e.length;r++){let t=e[r];if(","===t&&r>0&&r+1<e.length){const n=e[r-1],o=e[r+1];_t(n,o)&&(t=n+","+o,r++,i.pop())}i.push(bt(t))}return i.join("")},xt=(t,e)=>Math.max(0,t.split(e).length-1),_t=(t,e)=>{const i=xt(t,"~"),r=xt(e,"~");return 1===i&&1===r},bt=t=>{const e=xt(t,"~");let i=!1;if(e<=1)return t;e%2!=0&&t.startsWith("~")&&(t=t.substring(1),i=!0);const r=[...t];let n=r.indexOf("~"),o=r.lastIndexOf("~");for(;-1!==n&&-1!==o&&n!==o;)r[n]="<",r[o]=">",n=r.indexOf("~"),o=r.lastIndexOf("~");return i&&r.unshift("~"),r.join("")},vt=()=>void 0!==window.MathMLElement,kt=/\$\$(.*)\$\$/g,Tt=t=>{var e;return((null==(e=t.match(kt))?void 0:e.length)??0)>0},At=async(t,e)=>{t=await wt(t,e);const i=document.createElement("div");i.innerHTML=t,i.id="katex-temp",i.style.visibility="hidden",i.style.position="absolute",i.style.top="0";const r=document.querySelector("body");null==r||r.insertAdjacentElement("beforeend",i);const n={width:i.clientWidth,height:i.clientHeight};return i.remove(),n},wt=async(t,e)=>{if(!Tt(t))return t;if(!vt()&&!e.legacyMathML)return t.replace(kt,"MathML is unsupported in this environment.");const{default:r}=await i.e(2130).then(i.bind(i,22130));return t.split(ct).map((t=>Tt(t)?`\n <div style="display: flex; align-items: center; justify-content: center; white-space: nowrap;">\n ${t}\n </div>\n `:`<div>${t}</div>`)).join("").replace(kt,((t,e)=>r.renderToString(e,{throwOnError:!0,displayMode:!0,output:vt()?"mathml":"htmlAndMathml"}).replace(/\n/g," ").replace(/<annotation.*<\/annotation>/g,"")))},St={getRows:t=>{if(!t)return[""];return yt(t).replace(/\\n/g,"#br#").split("#br#")},sanitizeText:pt,sanitizeTextOrArray:(t,e)=>"string"==typeof t?pt(t,e):t.flat().map((t=>pt(t,e))),hasBreaks:t=>ct.test(t),splitBreaks:t=>t.split(ct),lineBreakRegex:ct,removeScript:dt,getUrl:t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},evaluate:mt,getMax:function(...t){const e=t.filter((t=>!isNaN(t)));return Math.max(...e)},getMin:function(...t){const e=t.filter((t=>!isNaN(t)));return Math.min(...e)}},Bt=(t,e)=>c(t,e?{s:-40,l:10}:{s:-40,l:-10}),Ft="#ffffff",Lt="#f2f2f2";let Mt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var t,e,i,r,n,o,a,s,l,h,u;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||c(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||c(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Bt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Bt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Bt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||f(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||f(this.tertiaryColor),this.lineColor=this.lineColor||f(this.background),this.arrowheadColor=this.arrowheadColor||f(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?(0,p.A)(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||(0,p.A)(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||f(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||(0,g.A)(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||c(this.primaryColor,{h:30}),this.cScale4=this.cScale4||c(this.primaryColor,{h:60}),this.cScale5=this.cScale5||c(this.primaryColor,{h:90}),this.cScale6=this.cScale6||c(this.primaryColor,{h:120}),this.cScale7=this.cScale7||c(this.primaryColor,{h:150}),this.cScale8=this.cScale8||c(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||c(this.primaryColor,{h:270}),this.cScale10=this.cScale10||c(this.primaryColor,{h:300}),this.cScale11=this.cScale11||c(this.primaryColor,{h:330}),this.darkMode)for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["cScale"+c]=(0,p.A)(this["cScale"+c],75);else for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["cScale"+c]=(0,p.A)(this["cScale"+c],25);for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["cScaleInv"+c]=this["cScaleInv"+c]||f(this["cScale"+c]);for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this.darkMode?this["cScalePeer"+c]=this["cScalePeer"+c]||(0,g.A)(this["cScale"+c],10):this["cScalePeer"+c]=this["cScalePeer"+c]||(0,p.A)(this["cScale"+c],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["cScaleLabel"+c]=this["cScaleLabel"+c]||this.scaleLabelColor;const d=this.darkMode?-4:-1;for(let f=0;f<5;f++)this["surface"+f]=this["surface"+f]||c(this.mainBkg,{h:180,s:-15,l:d*(5+3*f)}),this["surfacePeer"+f]=this["surfacePeer"+f]||c(this.mainBkg,{h:180,s:-15,l:d*(8+3*f)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||c(this.primaryColor,{h:64}),this.fillType3=this.fillType3||c(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||c(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||c(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||c(this.primaryColor,{h:128}),this.fillType7=this.fillType7||c(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||c(this.primaryColor,{l:-10}),this.pie5=this.pie5||c(this.secondaryColor,{l:-10}),this.pie6=this.pie6||c(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||c(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||c(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||c(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||c(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||c(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||c(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||c(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||c(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||c(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||c(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||c(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||c(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,y.A)(this.quadrant1Fill)?(0,g.A)(this.quadrant1Fill):(0,p.A)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(h=this.xyChart)?void 0:h.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,p.A)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||c(this.primaryColor,{h:-30}),this.git4=this.git4||c(this.primaryColor,{h:-60}),this.git5=this.git5||c(this.primaryColor,{h:-90}),this.git6=this.git6||c(this.primaryColor,{h:60}),this.git7=this.git7||c(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.A)(this.git0,25),this.git1=(0,g.A)(this.git1,25),this.git2=(0,g.A)(this.git2,25),this.git3=(0,g.A)(this.git3,25),this.git4=(0,g.A)(this.git4,25),this.git5=(0,g.A)(this.git5,25),this.git6=(0,g.A)(this.git6,25),this.git7=(0,g.A)(this.git7,25)):(this.git0=(0,p.A)(this.git0,25),this.git1=(0,p.A)(this.git1,25),this.git2=(0,p.A)(this.git2,25),this.git3=(0,p.A)(this.git3,25),this.git4=(0,p.A)(this.git4,25),this.git5=(0,p.A)(this.git5,25),this.git6=(0,p.A)(this.git6,25),this.git7=(0,p.A)(this.git7,25)),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||Ft,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Lt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Et=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,g.A)(this.primaryColor,16),this.tertiaryColor=c(this.primaryColor,{h:-160}),this.primaryBorderColor=f(this.background),this.secondaryBorderColor=Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Bt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=(0,g.A)(f("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=(0,u.A)(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=(0,p.A)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=(0,p.A)(this.sectionBkgColor,10),this.taskBorderColor=(0,u.A)(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=(0,u.A)(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var t,e,i,r,n,o,a,s,l,h,u;this.secondBkg=(0,g.A)(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=(0,g.A)(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=(0,g.A)(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=c(this.primaryColor,{h:64}),this.fillType3=c(this.secondaryColor,{h:64}),this.fillType4=c(this.primaryColor,{h:-64}),this.fillType5=c(this.secondaryColor,{h:-64}),this.fillType6=c(this.primaryColor,{h:128}),this.fillType7=c(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||c(this.primaryColor,{h:30}),this.cScale4=this.cScale4||c(this.primaryColor,{h:60}),this.cScale5=this.cScale5||c(this.primaryColor,{h:90}),this.cScale6=this.cScale6||c(this.primaryColor,{h:120}),this.cScale7=this.cScale7||c(this.primaryColor,{h:150}),this.cScale8=this.cScale8||c(this.primaryColor,{h:210}),this.cScale9=this.cScale9||c(this.primaryColor,{h:270}),this.cScale10=this.cScale10||c(this.primaryColor,{h:300}),this.cScale11=this.cScale11||c(this.primaryColor,{h:330});for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["cScaleInv"+c]=this["cScaleInv"+c]||f(this["cScale"+c]);for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["cScalePeer"+c]=this["cScalePeer"+c]||(0,g.A)(this["cScale"+c],10);for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||c(this.mainBkg,{h:30,s:-30,l:-(4*d-10)}),this["surfacePeer"+d]=this["surfacePeer"+d]||c(this.mainBkg,{h:30,s:-30,l:-(4*d-7)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["cScaleLabel"+c]=this["cScaleLabel"+c]||this.scaleLabelColor;for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["pie"+c]=this["cScale"+c];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||c(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||c(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||c(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||c(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||c(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||c(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,y.A)(this.quadrant1Fill)?(0,g.A)(this.quadrant1Fill):(0,p.A)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(h=this.xyChart)?void 0:h.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22"},this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,p.A)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,g.A)(this.secondaryColor,20),this.git1=(0,g.A)(this.pie2||this.secondaryColor,20),this.git2=(0,g.A)(this.pie3||this.tertiaryColor,20),this.git3=(0,g.A)(this.pie4||c(this.primaryColor,{h:-30}),20),this.git4=(0,g.A)(this.pie5||c(this.primaryColor,{h:-60}),20),this.git5=(0,g.A)(this.pie6||c(this.primaryColor,{h:-90}),10),this.git6=(0,g.A)(this.pie7||c(this.primaryColor,{h:60}),10),this.git7=(0,g.A)(this.pie8||c(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||(0,g.A)(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||(0,g.A)(this.background,2)}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Ot=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=c(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=c(this.primaryColor,{h:-160}),this.primaryBorderColor=Bt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Bt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=(0,u.A)(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var t,e,i,r,n,o,a,s,l,h,u;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||c(this.primaryColor,{h:30}),this.cScale4=this.cScale4||c(this.primaryColor,{h:60}),this.cScale5=this.cScale5||c(this.primaryColor,{h:90}),this.cScale6=this.cScale6||c(this.primaryColor,{h:120}),this.cScale7=this.cScale7||c(this.primaryColor,{h:150}),this.cScale8=this.cScale8||c(this.primaryColor,{h:210}),this.cScale9=this.cScale9||c(this.primaryColor,{h:270}),this.cScale10=this.cScale10||c(this.primaryColor,{h:300}),this.cScale11=this.cScale11||c(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,p.A)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.A)(this.tertiaryColor,40);for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["cScale"+c]=(0,p.A)(this["cScale"+c],10),this["cScalePeer"+c]=this["cScalePeer"+c]||(0,p.A)(this["cScale"+c],25);for(let d=0;d<this.THEME_COLOR_LIMIT;d++)this["cScaleInv"+d]=this["cScaleInv"+d]||c(this["cScale"+d],{h:180});for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||c(this.mainBkg,{h:30,l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||c(this.mainBkg,{h:30,l:-(7+5*d)});if(this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,"calculated"!==this.labelTextColor){this.cScaleLabel0=this.cScaleLabel0||f(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||f(this.labelTextColor);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.labelTextColor}this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=(0,g.A)(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=c(this.primaryColor,{h:64}),this.fillType3=c(this.secondaryColor,{h:64}),this.fillType4=c(this.primaryColor,{h:-64}),this.fillType5=c(this.secondaryColor,{h:-64}),this.fillType6=c(this.primaryColor,{h:128}),this.fillType7=c(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||c(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||c(this.primaryColor,{l:-10}),this.pie5=this.pie5||c(this.secondaryColor,{l:-30}),this.pie6=this.pie6||c(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||c(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||c(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||c(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||c(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||c(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||c(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||c(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||c(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||c(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||c(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||c(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||c(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,y.A)(this.quadrant1Fill)?(0,g.A)(this.quadrant1Fill):(0,p.A)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(h=this.xyChart)?void 0:h.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||c(this.primaryColor,{h:-30}),this.git4=this.git4||c(this.primaryColor,{h:-60}),this.git5=this.git5||c(this.primaryColor,{h:-90}),this.git6=this.git6||c(this.primaryColor,{h:60}),this.git7=this.git7||c(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.A)(this.git0,25),this.git1=(0,g.A)(this.git1,25),this.git2=(0,g.A)(this.git2,25),this.git3=(0,g.A)(this.git3,25),this.git4=(0,g.A)(this.git4,25),this.git5=(0,g.A)(this.git5,25),this.git6=(0,g.A)(this.git6,25),this.git7=(0,g.A)(this.git7,25)):(this.git0=(0,p.A)(this.git0,25),this.git1=(0,p.A)(this.git1,25),this.git2=(0,p.A)(this.git2,25),this.git3=(0,p.A)(this.git3,25),this.git4=(0,p.A)(this.git4,25),this.git5=(0,p.A)(this.git5,25),this.git6=(0,p.A)(this.git6,25),this.git7=(0,p.A)(this.git7,25)),this.gitInv0=this.gitInv0||(0,p.A)(f(this.git0),25),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||Ft,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Lt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};const It=t=>{const e=new Ot;return e.calculate(t),e};let Dt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=(0,g.A)("#cde498",10),this.primaryBorderColor=Bt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Bt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.primaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,e,i,r,n,o,a,s,l,h,u;this.actorBorder=(0,p.A)(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||c(this.primaryColor,{h:30}),this.cScale4=this.cScale4||c(this.primaryColor,{h:60}),this.cScale5=this.cScale5||c(this.primaryColor,{h:90}),this.cScale6=this.cScale6||c(this.primaryColor,{h:120}),this.cScale7=this.cScale7||c(this.primaryColor,{h:150}),this.cScale8=this.cScale8||c(this.primaryColor,{h:210}),this.cScale9=this.cScale9||c(this.primaryColor,{h:270}),this.cScale10=this.cScale10||c(this.primaryColor,{h:300}),this.cScale11=this.cScale11||c(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,p.A)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.A)(this.tertiaryColor,40);for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["cScale"+c]=(0,p.A)(this["cScale"+c],10),this["cScalePeer"+c]=this["cScalePeer"+c]||(0,p.A)(this["cScale"+c],25);for(let d=0;d<this.THEME_COLOR_LIMIT;d++)this["cScaleInv"+d]=this["cScaleInv"+d]||c(this["cScale"+d],{h:180});this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["cScaleLabel"+c]=this["cScaleLabel"+c]||this.scaleLabelColor;for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||c(this.mainBkg,{h:30,s:-30,l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||c(this.mainBkg,{h:30,s:-30,l:-(8+5*d)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=c(this.primaryColor,{h:64}),this.fillType3=c(this.secondaryColor,{h:64}),this.fillType4=c(this.primaryColor,{h:-64}),this.fillType5=c(this.secondaryColor,{h:-64}),this.fillType6=c(this.primaryColor,{h:128}),this.fillType7=c(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||c(this.primaryColor,{l:-30}),this.pie5=this.pie5||c(this.secondaryColor,{l:-30}),this.pie6=this.pie6||c(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||c(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||c(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||c(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||c(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||c(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||c(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||c(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||c(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||c(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||c(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||c(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||c(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,y.A)(this.quadrant1Fill)?(0,g.A)(this.quadrant1Fill):(0,p.A)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(h=this.xyChart)?void 0:h.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||c(this.primaryColor,{h:-30}),this.git4=this.git4||c(this.primaryColor,{h:-60}),this.git5=this.git5||c(this.primaryColor,{h:-90}),this.git6=this.git6||c(this.primaryColor,{h:60}),this.git7=this.git7||c(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.A)(this.git0,25),this.git1=(0,g.A)(this.git1,25),this.git2=(0,g.A)(this.git2,25),this.git3=(0,g.A)(this.git3,25),this.git4=(0,g.A)(this.git4,25),this.git5=(0,g.A)(this.git5,25),this.git6=(0,g.A)(this.git6,25),this.git7=(0,g.A)(this.git7,25)):(this.git0=(0,p.A)(this.git0,25),this.git1=(0,p.A)(this.git1,25),this.git2=(0,p.A)(this.git2,25),this.git3=(0,p.A)(this.git3,25),this.git4=(0,p.A)(this.git4,25),this.git5=(0,p.A)(this.git5,25),this.git6=(0,p.A)(this.git6,25),this.git7=(0,p.A)(this.git7,25)),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||Ft,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Lt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};class qt{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,g.A)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=c(this.primaryColor,{h:-160}),this.primaryBorderColor=Bt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Bt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,e,i,r,n,o,a,s,l,h,u;this.secondBkg=(0,g.A)(this.contrast,55),this.border2=this.contrast,this.actorBorder=(0,g.A)(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["cScaleInv"+c]=this["cScaleInv"+c]||f(this["cScale"+c]);for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this.darkMode?this["cScalePeer"+c]=this["cScalePeer"+c]||(0,g.A)(this["cScale"+c],10):this["cScalePeer"+c]=this["cScalePeer"+c]||(0,p.A)(this["cScale"+c],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["cScaleLabel"+c]=this["cScaleLabel"+c]||this.scaleLabelColor;for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||c(this.mainBkg,{l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||c(this.mainBkg,{l:-(8+5*d)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.sectionBkgColor=(0,g.A)(this.contrast,30),this.sectionBkgColor2=(0,g.A)(this.contrast,30),this.taskBorderColor=(0,p.A)(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=(0,g.A)(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=(0,p.A)(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=c(this.primaryColor,{h:64}),this.fillType3=c(this.secondaryColor,{h:64}),this.fillType4=c(this.primaryColor,{h:-64}),this.fillType5=c(this.secondaryColor,{h:-64}),this.fillType6=c(this.primaryColor,{h:128}),this.fillType7=c(this.secondaryColor,{h:128});for(let c=0;c<this.THEME_COLOR_LIMIT;c++)this["pie"+c]=this["cScale"+c];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||c(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||c(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||c(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||c(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||c(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||c(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,y.A)(this.quadrant1Fill)?(0,g.A)(this.quadrant1Fill):(0,p.A)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(h=this.xyChart)?void 0:h.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,p.A)(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||c(this.primaryColor,{h:-30}),this.git4=this.pie5||c(this.primaryColor,{h:-60}),this.git5=this.pie6||c(this.primaryColor,{h:-90}),this.git6=this.pie7||c(this.primaryColor,{h:60}),this.git7=this.pie8||c(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||Ft,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Lt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}}const Nt={base:{getThemeVariables:t=>{const e=new Mt;return e.calculate(t),e}},dark:{getThemeVariables:t=>{const e=new Et;return e.calculate(t),e}},default:{getThemeVariables:It},forest:{getThemeVariables:t=>{const e=new Dt;return e.calculate(t),e}},neutral:{getThemeVariables:t=>{const e=new qt;return e.calculate(t),e}}},$t={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},theme:"default",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","maxEdges"],legacyMathML:!1,deterministicIds:!1,fontSize:16},zt={...$t,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:Nt.default.getThemeVariables(),sequence:{...$t.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...$t.gantt,tickInterval:void 0,useWidth:void 0},c4:{...$t.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...$t.pie,useWidth:984},xyChart:{...$t.xyChart,useWidth:void 0},requirement:{...$t.requirement,useWidth:void 0},gitGraph:{...$t.gitGraph,useMaxWidth:!1},sankey:{...$t.sankey,useMaxWidth:!1}},Pt=(t,e="")=>Object.keys(t).reduce(((i,r)=>Array.isArray(t[r])?i:"object"==typeof t[r]&&null!==t[r]?[...i,e+r,...Pt(t[r],"")]:[...i,e+r]),[]),jt=new Set(Pt(zt,"")),Rt=zt,Wt=t=>{if(st.debug("sanitizeDirective called with",t),"object"==typeof t&&null!=t)if(Array.isArray(t))t.forEach((t=>Wt(t)));else{for(const e of Object.keys(t)){if(st.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!jt.has(e)||null==t[e]){st.debug("sanitize deleting key: ",e),delete t[e];continue}if("object"==typeof t[e]){st.debug("sanitizing object",e),Wt(t[e]);continue}const i=["themeCSS","fontFamily","altFontFamily"];for(const r of i)e.includes(r)&&(st.debug("sanitizing css option",e),t[e]=Ut(t[e]))}if(t.themeVariables)for(const e of Object.keys(t.themeVariables)){const i=t.themeVariables[e];(null==i?void 0:i.match)&&!i.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}st.debug("After sanitization",t)}},Ut=t=>{let e=0,i=0;for(const r of t){if(e<i)return"{ /* ERROR: Unbalanced CSS */ }";"{"===r?e++:"}"===r&&i++}return e!==i?"{ /* ERROR: Unbalanced CSS */ }":t},Ht=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,Yt=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Vt=/\s*%%.*\n/gm;class Gt extends Error{constructor(t){super(t),this.name="UnknownDiagramError"}}const Xt={},Zt=function(t,e){t=t.replace(Ht,"").replace(Yt,"").replace(Vt,"\n");for(const[i,{detector:r}]of Object.entries(Xt)){if(r(t,e))return i}throw new Gt(`No diagram type detected matching given configuration for text: ${t}`)},Jt=(...t)=>{for(const{id:e,detector:i,loader:r}of t)Qt(e,i,r)},Qt=(t,e,i)=>{Xt[t]?st.error(`Detector with key ${t} already exists`):Xt[t]={detector:e,loader:i},st.debug(`Detector with key ${t} added${i?" with loader":""}`)},Kt=(t,e,{depth:i=2,clobber:r=!1}={})=>{const n={depth:i,clobber:r};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach((e=>Kt(t,e,n))),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach((e=>{t.includes(e)||t.push(e)})),t):void 0===t||i<=0?null!=t&&"object"==typeof t&&"object"==typeof e?Object.assign(t,e):e:(void 0!==e&&"object"==typeof t&&"object"==typeof e&&Object.keys(e).forEach((n=>{"object"!=typeof e[n]||void 0!==t[n]&&"object"!=typeof t[n]?(r||"object"!=typeof t[n]&&"object"!=typeof e[n])&&(t[n]=e[n]):(void 0===t[n]&&(t[n]=Array.isArray(e[n])?[]:{}),t[n]=Kt(t[n],e[n],{depth:i-1,clobber:r}))})),t)},te=Kt,ee="\u200b",ie={curveBasis:a.qrM,curveBasisClosed:a.Yu4,curveBasisOpen:a.IA3,curveBumpX:a.Wi0,curveBumpY:a.PGM,curveBundle:a.OEq,curveCardinalClosed:a.olC,curveCardinalOpen:a.IrU,curveCardinal:a.y8u,curveCatmullRomClosed:a.Q7f,curveCatmullRomOpen:a.cVp,curveCatmullRom:a.oDi,curveLinear:a.lUB,curveLinearClosed:a.Lx9,curveMonotoneX:a.nVG,curveMonotoneY:a.uxU,curveNatural:a.Xf2,curveStep:a.GZz,curveStepAfter:a.UPb,curveStepBefore:a.dyv},re=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,ne=function(t,e=null){try{const i=new RegExp(`[%]{2}(?![{]${re.source})(?=[}][%]{2}).*\n`,"ig");let r;t=t.trim().replace(i,"").replace(/'/gm,'"'),st.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const n=[];for(;null!==(r=Yt.exec(t));)if(r.index===Yt.lastIndex&&Yt.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){const t=r[1]?r[1]:r[2],e=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;n.push({type:t,args:e})}return 0===n.length?{type:t,args:null}:1===n.length?n[0]:n}catch(i){return st.error(`ERROR: ${i.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}};function oe(t,e){if(!t)return e;const i=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return ie[i]??e}function ae(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0}const se=(t,e=2)=>{const i=Math.pow(10,e);return Math.round(t*i)/i},le=(t,e)=>{let i,r=e;for(const n of t){if(i){const t=ae(n,i);if(t<r)r-=t;else{const e=r/t;if(e<=0)return i;if(e>=1)return{x:n.x,y:n.y};if(e>0&&e<1)return{x:se((1-e)*i.x+e*n.x,5),y:se((1-e)*i.y+e*n.y,5)}}}i=n}throw new Error("Could not find a suitable point for the given distance")};function he(t){let e="",i="";for(const r of t)void 0!==r&&(r.startsWith("color:")||r.startsWith("text-align:")?i=i+r+";":e=e+r+";");return{style:e,labelStyle:i}}let ce=0;const ue=()=>(ce++,"id-"+Math.random().toString(36).substr(2,12)+"-"+ce);const de=t=>function(t){let e="";const i="0123456789abcdef";for(let r=0;r<t;r++)e+=i.charAt(Math.floor(16*Math.random()));return e}(t.length),fe=function(t,e){const i=e.text.replace(St.lineBreakRegex," "),[,r]=be(e.fontSize),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",r),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),void 0!==e.class&&n.attr("class",e.class);const o=n.append("tspan");return o.attr("x",e.x+2*e.textMargin),o.attr("fill",e.fill),o.text(i),n},pe=(0,m.A)(((t,e,i)=>{if(!t)return t;if(i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},i),St.lineBreakRegex.test(t))return t;const r=t.split(" "),n=[];let o="";return r.forEach(((t,a)=>{const s=me(`${t} `,i),l=me(o,i);if(s>e){const{hyphenatedStrings:r,remainingWord:a}=ge(t,e,"-",i);n.push(o,...r),o=a}else l+s>=e?(n.push(o),o=t):o=[o,t].filter(Boolean).join(" ");a+1===r.length&&n.push(o)})),n.filter((t=>""!==t)).join(i.joinWith)}),((t,e,i)=>`${t}${e}${i.fontSize}${i.fontWeight}${i.fontFamily}${i.joinWith}`)),ge=(0,m.A)(((t,e,i="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const n=[...t],o=[];let a="";return n.forEach(((t,s)=>{const l=`${a}${t}`;if(me(l,r)>=e){const t=s+1,e=n.length===t,r=`${l}${i}`;o.push(e?l:r),a=""}else a=l})),{hyphenatedStrings:o,remainingWord:a}}),((t,e,i="-",r)=>`${t}${e}${i}${r.fontSize}${r.fontWeight}${r.fontFamily}`));function ye(t,e){return Ce(t,e).height}function me(t,e){return Ce(t,e).width}const Ce=(0,m.A)(((t,e)=>{const{fontSize:i=12,fontFamily:r="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};const[,o]=be(i),s=["sans-serif",r],l=t.split(St.lineBreakRegex),h=[],c=(0,a.Ltv)("body");if(!c.remove)return{width:0,height:0,lineHeight:0};const u=c.append("svg");for(const a of s){let t=0;const e={width:0,height:0,lineHeight:0};for(const i of l){const r={x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""};r.text=i||ee;const s=fe(u,r).style("font-size",o).style("font-weight",n).style("font-family",a),l=(s._groups||s)[0][0].getBBox();if(0===l.width&&0===l.height)throw new Error("svg element not in render tree");e.width=Math.round(Math.max(e.width,l.width)),t=Math.round(l.height),e.height+=t,e.lineHeight=Math.round(Math.max(e.lineHeight,t))}h.push(e)}u.remove();return h[isNaN(h[1].height)||isNaN(h[1].width)||isNaN(h[1].lineHeight)||h[0].height>h[1].height&&h[0].width>h[1].width&&h[0].lineHeight>h[1].lineHeight?0:1]}),((t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`));let xe;function _e(t){return"str"in t}const be=t=>{if("number"==typeof t)return[t,t+"px"];const e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]};function ve(t,e){return(0,C.A)({},t,e)}const ke={assignWithDepth:te,wrapLabel:pe,calculateTextHeight:ye,calculateTextWidth:me,calculateTextDimensions:Ce,cleanAndMerge:ve,detectInit:function(t,e){const i=ne(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(i)){const t=i.map((t=>t.args));Wt(t),r=te(r,[...t])}else r=i.args;if(!r)return;let n=Zt(t,e);const o="config";return void 0!==r[o]&&("flowchart-v2"===n&&(n="flowchart"),r[n]=r[o],delete r[o]),r},detectDirective:ne,isSubstringInArray:function(t,e){for(const[i,r]of e.entries())if(r.match(t))return i;return-1},interpolateToCurve:oe,calcLabelPosition:function(t){return 1===t.length?t[0]:function(t){let e,i=0;return t.forEach((t=>{i+=ae(t,e),e=t})),le(t,i/2)}(t)},calcCardinalityPosition:(t,e,i)=>{st.info(`our points ${JSON.stringify(e)}`),e[0]!==i&&(e=e.reverse());const r=le(e,25),n=t?10:5,o=Math.atan2(e[0].y-r.y,e[0].x-r.x),a={x:0,y:0};return a.x=Math.sin(o)*n+(e[0].x+r.x)/2,a.y=-Math.cos(o)*n+(e[0].y+r.y)/2,a},calcTerminalLabelPosition:function(t,e,i){const r=structuredClone(i);st.info("our points",r),"start_left"!==e&&"start_right"!==e&&r.reverse();const n=le(r,25+t),o=10+.5*t,a=Math.atan2(r[0].y-n.y,r[0].x-n.x),s={x:0,y:0};return"start_left"===e?(s.x=Math.sin(a+Math.PI)*o+(r[0].x+n.x)/2,s.y=-Math.cos(a+Math.PI)*o+(r[0].y+n.y)/2):"end_right"===e?(s.x=Math.sin(a-Math.PI)*o+(r[0].x+n.x)/2-5,s.y=-Math.cos(a-Math.PI)*o+(r[0].y+n.y)/2-5):"end_left"===e?(s.x=Math.sin(a)*o+(r[0].x+n.x)/2-5,s.y=-Math.cos(a)*o+(r[0].y+n.y)/2-5):(s.x=Math.sin(a)*o+(r[0].x+n.x)/2,s.y=-Math.cos(a)*o+(r[0].y+n.y)/2),s},formatUrl:function(t,e){const i=t.trim();if(i)return"loose"!==e.securityLevel?(0,o.Jf)(i):i},getStylesFromArray:he,generateId:ue,random:de,runFunc:(t,...e)=>{const i=t.split("."),r=i.length-1,n=i[r];let o=window;for(let a=0;a<r;a++)if(o=o[i[a]],!o)return void st.error(`Function name: ${t} not found in window`);o[n](...e)},entityDecode:function(t){return xe=xe||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),xe.innerHTML=t,unescape(xe.textContent)},insertTitle:(t,e,i,r)=>{var n;if(!r)return;const o=null==(n=t.node())?void 0:n.getBBox();o&&t.append("text").text(r).attr("x",o.x+o.width/2).attr("y",-i).attr("class",e)},parseFontSize:be,InitIDGenerator:class{constructor(t=!1,e){this.count=0,this.count=e?e.length:0,this.next=t?()=>this.count++:()=>Date.now()}}},Te=function(t){return t.replace(/\ufb02\xb0\xb0/g,"&#").replace(/\ufb02\xb0/g,"&").replace(/\xb6\xdf/g,";")},Ae="10.9.1",we=Object.freeze(Rt);let Se,Be=te({},we),Fe=[],Le=te({},we);const Me=(t,e)=>{let i=te({},t),r={};for(const n of e)De(n),r=te(r,n);if(i=te(i,r),r.theme&&r.theme in Nt){const t=te({},Se),e=te(t.themeVariables||{},r.themeVariables);i.theme&&i.theme in Nt&&(i.themeVariables=Nt[i.theme].getThemeVariables(e))}return Le=i,Pe(Le),Le},Ee=()=>te({},Be),Oe=t=>(Pe(t),te(Le,t),Ie()),Ie=()=>te({},Le),De=t=>{t&&(["secure",...Be.secure??[]].forEach((e=>{Object.hasOwn(t,e)&&(st.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])})),Object.keys(t).forEach((e=>{e.startsWith("__")&&delete t[e]})),Object.keys(t).forEach((e=>{"string"==typeof t[e]&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],"object"==typeof t[e]&&De(t[e])})))},qe=t=>{Wt(t),!t.fontFamily||t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily}),Fe.push(t),Me(Be,Fe)},Ne=(t=Be)=>{Fe=[],Me(t,Fe)},$e={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},ze={},Pe=t=>{var e;t&&((t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&(ze[e="LAZY_LOAD_DEPRECATED"]||(st.warn($e[e]),ze[e]=!0)))},je={id:"c4",detector:t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),loader:async()=>{const{diagram:t}=await i.e(1946).then(i.bind(i,31946));return{id:"c4",diagram:t}}},Re="flowchart",We={id:Re,detector:(t,e)=>{var i,r;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&"elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&/^\s*graph/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(1176),i.e(8055),i.e(2983),i.e(2548),i.e(8810)]).then(i.bind(i,88810));return{id:Re,diagram:t}}},Ue="flowchart-v2",He={id:Ue,detector:(t,e)=>{var i,r,n;return"dagre-d3"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&"elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&(!(!/^\s*graph/.test(t)||"dagre-wrapper"!==(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer))||/^\s*flowchart/.test(t))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(1176),i.e(8055),i.e(2983),i.e(2548),i.e(2453)]).then(i.bind(i,22453));return{id:Ue,diagram:t}}},Ye={id:"er",detector:t=>/^\s*erDiagram/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(1176),i.e(1398)]).then(i.bind(i,31398));return{id:"er",diagram:t}}},Ve="gitGraph",Ge={id:Ve,detector:t=>/^\s*gitGraph/.test(t),loader:async()=>{const{diagram:t}=await i.e(4943).then(i.bind(i,74943));return{id:Ve,diagram:t}}},Xe="gantt",Ze={id:Xe,detector:t=>/^\s*gantt/.test(t),loader:async()=>{const{diagram:t}=await i.e(8869).then(i.bind(i,8869));return{id:Xe,diagram:t}}},Je="info",Qe={id:Je,detector:t=>/^\s*info/.test(t),loader:async()=>{const{diagram:t}=await i.e(2843).then(i.bind(i,22843));return{id:Je,diagram:t}}},Ke={id:"pie",detector:t=>/^\s*pie/.test(t),loader:async()=>{const{diagram:t}=await i.e(9184).then(i.bind(i,76803));return{id:"pie",diagram:t}}},ti="quadrantChart",ei={id:ti,detector:t=>/^\s*quadrantChart/.test(t),loader:async()=>{const{diagram:t}=await i.e(8478).then(i.bind(i,8478));return{id:ti,diagram:t}}},ii="xychart",ri={id:ii,detector:t=>/^\s*xychart-beta/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(8337),i.e(2925)]).then(i.bind(i,32925));return{id:ii,diagram:t}}},ni="requirement",oi={id:ni,detector:t=>/^\s*requirement(Diagram)?/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(1176),i.e(3706)]).then(i.bind(i,43706));return{id:ni,diagram:t}}},ai="sequence",si={id:ai,detector:t=>/^\s*sequenceDiagram/.test(t),loader:async()=>{const{diagram:t}=await i.e(9689).then(i.bind(i,79689));return{id:ai,diagram:t}}},li="class",hi={id:li,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer)&&/^\s*classDiagram/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(1176),i.e(3626),i.e(7426)]).then(i.bind(i,87426));return{id:li,diagram:t}}},ci="classDiagram",ui={id:ci,detector:(t,e)=>{var i;return!(!/^\s*classDiagram/.test(t)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer))||/^\s*classDiagram-v2/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(1176),i.e(8055),i.e(2983),i.e(3626),i.e(8635)]).then(i.bind(i,18635));return{id:ci,diagram:t}}},di="state",fi={id:di,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer)&&/^\s*stateDiagram/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(1176),i.e(1245),i.e(1331)]).then(i.bind(i,31331));return{id:di,diagram:t}}},pi="stateDiagram",gi={id:pi,detector:(t,e)=>{var i;return!!/^\s*stateDiagram-v2/.test(t)||!(!/^\s*stateDiagram/.test(t)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(1176),i.e(8055),i.e(2983),i.e(1245),i.e(3068)]).then(i.bind(i,3068));return{id:pi,diagram:t}}},yi="journey",mi={id:yi,detector:t=>/^\s*journey/.test(t),loader:async()=>{const{diagram:t}=await i.e(6420).then(i.bind(i,26420));return{id:yi,diagram:t}}},Ci=function(t,e,i,r){const n=function(t,e,i){let r=new Map;return i?(r.set("width","100%"),r.set("style",`max-width: ${e}px;`)):(r.set("height",t),r.set("width",e)),r}(e,i,r);!function(t,e){for(let i of e)t.attr(i[0],i[1])}(t,n)},xi=function(t,e,i,r){const n=e.node().getBBox(),o=n.width,a=n.height;st.info(`SVG bounds: ${o}x${a}`,n);let s=0,l=0;st.info(`Graph bounds: ${s}x${l}`,t),s=o+2*i,l=a+2*i,st.info(`Calculated bounds: ${s}x${l}`),Ci(e,l,s,r);const h=`${n.x-i} ${n.y-i} ${n.width+2*i} ${n.height+2*i}`;e.attr("viewBox",h)},_i={},bi=(t,e,i)=>{let r="";return t in _i&&_i[t]?r=_i[t](i):st.warn(`No theme found for ${t}`),` & {\n font-family: ${i.fontFamily};\n font-size: ${i.fontSize};\n fill: ${i.textColor}\n }\n\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${i.errorBkgColor};\n }\n & .error-text {\n fill: ${i.errorTextColor};\n stroke: ${i.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 2px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${i.lineColor};\n stroke: ${i.lineColor};\n }\n & .marker.cross {\n stroke: ${i.lineColor};\n }\n\n & svg {\n font-family: ${i.fontFamily};\n font-size: ${i.fontSize};\n }\n\n ${r}\n\n ${e}\n`};let vi="",ki="",Ti="";const Ai=t=>pt(t,Ie()),wi=()=>{vi="",Ti="",ki=""},Si=t=>{vi=Ai(t).replace(/^\s+/g,"")},Bi=()=>vi,Fi=t=>{Ti=Ai(t).replace(/\n\s+/g,"\n")},Li=()=>Ti,Mi=t=>{ki=Ai(t)},Ei=()=>ki,Oi=Object.freeze(Object.defineProperty({__proto__:null,clear:wi,getAccDescription:Li,getAccTitle:Bi,getDiagramTitle:Ei,setAccDescription:Fi,setAccTitle:Si,setDiagramTitle:Mi},Symbol.toStringTag,{value:"Module"})),Ii=st,Di=lt,qi=Ie,Ni=Oe,$i=we,zi=t=>pt(t,qi()),Pi=xi,ji={},Ri=(t,e,i)=>{var r,n,o;if(ji[t])throw new Error(`Diagram ${t} already registered.`);ji[t]=e,i&&Qt(t,i),n=t,void 0!==(o=e.styles)&&(_i[n]=o),null==(r=e.injectUtils)||r.call(e,Ii,Di,qi,zi,Pi,Oi,(()=>{}))},Wi=t=>{if(t in ji)return ji[t];throw new Ui(t)};class Ui extends Error{constructor(t){super(`Diagram ${t} not found.`)}}const Hi=t=>{var e;const{securityLevel:i}=qi();let r=(0,a.Ltv)("body");if("sandbox"===i){const i=(null==(e=(0,a.Ltv)(`#i${t}`).node())?void 0:e.contentDocument)??document;r=(0,a.Ltv)(i.body)}return r.select(`#${t}`)},Yi={draw:(t,e,i)=>{st.debug("rendering svg for syntax error\n");const r=Hi(e),n=r.append("g");r.attr("viewBox","0 0 2412 512"),Ci(r,100,512,!0),n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${i}`)}},Vi=Yi,Gi={db:{},renderer:Yi,parser:{parser:{yy:{}},parse:()=>{}}},Xi="flowchart-elk",Zi={id:Xi,detector:(t,e)=>{var i;return!!(/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&"elk"===(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(8337),i.e(8055),i.e(2548),i.e(4741)]).then(i.bind(i,74741));return{id:Xi,diagram:t}}},Ji="timeline",Qi={id:Ji,detector:t=>/^\s*timeline/.test(t),loader:async()=>{const{diagram:t}=await i.e(2376).then(i.bind(i,42376));return{id:Ji,diagram:t}}},Ki="mindmap",tr={id:Ki,detector:t=>/^\s*mindmap/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(8337),i.e(9309)]).then(i.bind(i,99309));return{id:Ki,diagram:t}}},er="sankey",ir={id:er,detector:t=>/^\s*sankey-beta/.test(t),loader:async()=>{const{diagram:t}=await i.e(6788).then(i.bind(i,16788));return{id:er,diagram:t}}},rr="block",nr={id:rr,detector:t=>/^\s*block-beta/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(8055),i.e(4162)]).then(i.bind(i,14162));return{id:rr,diagram:t}}};let or=!1;const ar=()=>{or||(or=!0,Ri("error",Gi,(t=>"error"===t.toLowerCase().trim())),Ri("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},(t=>t.toLowerCase().trimStart().startsWith("---"))),Jt(je,ui,hi,Ye,Ze,Qe,Ke,oi,si,Zi,He,We,tr,Qi,Ge,gi,fi,mi,ei,ir,ri,nr))};class sr{constructor(t,e={}){this.text=t,this.metadata=e,this.type="graph",this.text=function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/#\w+;/g,(function(t){const e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"\ufb02\xb0\xb0"+e+"\xb6\xdf":"\ufb02\xb0"+e+"\xb6\xdf"})),e}(t),this.text+="\n";const i=Ie();try{this.type=Zt(t,i)}catch(n){this.type="error",this.detectError=n}const r=Wi(this.type);st.debug("Type "+this.type),this.db=r.db,this.renderer=r.renderer,this.parser=r.parser,this.parser.parser.yy=this.db,this.init=r.init,this.parse()}parse(){var t,e,i,r,n;if(this.detectError)throw this.detectError;null==(e=(t=this.db).clear)||e.call(t);const o=Ie();null==(i=this.init)||i.call(this,o),this.metadata.title&&(null==(n=(r=this.db).setDiagramTitle)||n.call(r,this.metadata.title)),this.parser.parse(this.text)}async render(t,e){await this.renderer.draw(this.text,t,e,this)}getParser(){return this.parser}getType(){return this.type}}const lr=async(t,e={})=>{const i=Zt(t,Ie());try{Wi(i)}catch(r){const t=Xt[i].loader;if(!t)throw new Gt(`Diagram ${i} not found.`);const{id:e,diagram:n}=await t();Ri(e,n)}return new sr(t,e)};let hr=[];const cr="graphics-document document";const ur=t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();function dr(t){return null==t}var fr={isNothing:dr,isObject:function(t){return"object"==typeof t&&null!==t},toArray:function(t){return Array.isArray(t)?t:dr(t)?[]:[t]},repeat:function(t,e){var i,r="";for(i=0;i<e;i+=1)r+=t;return r},isNegativeZero:function(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},extend:function(t,e){var i,r,n,o;if(e)for(i=0,r=(o=Object.keys(e)).length;i<r;i+=1)t[n=o[i]]=e[n];return t}};function pr(t,e){var i="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(i+='in "'+t.mark.name+'" '),i+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(i+="\n\n"+t.mark.snippet),r+" "+i):r}function gr(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=pr(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}gr.prototype=Object.create(Error.prototype),gr.prototype.constructor=gr,gr.prototype.toString=function(t){return this.name+": "+pr(this,t)};var yr=gr;function mr(t,e,i,r,n){var o="",a="",s=Math.floor(n/2)-1;return r-e>s&&(e=r-s+(o=" ... ").length),i-r>s&&(i=r+s-(a=" ...").length),{str:o+t.slice(e,i).replace(/\t/g,"\u2192")+a,pos:r-e+o.length}}function Cr(t,e){return fr.repeat(" ",e-t.length)+t}var xr=function(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),"number"!=typeof e.indent&&(e.indent=1),"number"!=typeof e.linesBefore&&(e.linesBefore=3),"number"!=typeof e.linesAfter&&(e.linesAfter=2);for(var i,r=/\r?\n|\r|\0/g,n=[0],o=[],a=-1;i=r.exec(t.buffer);)o.push(i.index),n.push(i.index+i[0].length),t.position<=i.index&&a<0&&(a=n.length-2);a<0&&(a=n.length-1);var s,l,h="",c=Math.min(t.line+e.linesAfter,o.length).toString().length,u=e.maxLength-(e.indent+c+3);for(s=1;s<=e.linesBefore&&!(a-s<0);s++)l=mr(t.buffer,n[a-s],o[a-s],t.position-(n[a]-n[a-s]),u),h=fr.repeat(" ",e.indent)+Cr((t.line-s+1).toString(),c)+" | "+l.str+"\n"+h;for(l=mr(t.buffer,n[a],o[a],t.position,u),h+=fr.repeat(" ",e.indent)+Cr((t.line+1).toString(),c)+" | "+l.str+"\n",h+=fr.repeat("-",e.indent+c+3+l.pos)+"^\n",s=1;s<=e.linesAfter&&!(a+s>=o.length);s++)l=mr(t.buffer,n[a+s],o[a+s],t.position-(n[a]-n[a+s]),u),h+=fr.repeat(" ",e.indent)+Cr((t.line+s+1).toString(),c)+" | "+l.str+"\n";return h.replace(/\n$/,"")},_r=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],br=["scalar","sequence","mapping"];var vr=function(t,e){var i,r;if(e=e||{},Object.keys(e).forEach((function(e){if(-1===_r.indexOf(e))throw new yr('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')})),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=(i=e.styleAliases||null,r={},null!==i&&Object.keys(i).forEach((function(t){i[t].forEach((function(e){r[String(e)]=t}))})),r),-1===br.indexOf(this.kind))throw new yr('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function kr(t,e){var i=[];return t[e].forEach((function(t){var e=i.length;i.forEach((function(i,r){i.tag===t.tag&&i.kind===t.kind&&i.multi===t.multi&&(e=r)})),i[e]=t})),i}function Tr(t){return this.extend(t)}Tr.prototype.extend=function(t){var e=[],i=[];if(t instanceof vr)i.push(t);else if(Array.isArray(t))i=i.concat(t);else{if(!t||!Array.isArray(t.implicit)&&!Array.isArray(t.explicit))throw new yr("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");t.implicit&&(e=e.concat(t.implicit)),t.explicit&&(i=i.concat(t.explicit))}e.forEach((function(t){if(!(t instanceof vr))throw new yr("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new yr("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(t.multi)throw new yr("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),i.forEach((function(t){if(!(t instanceof vr))throw new yr("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(Tr.prototype);return r.implicit=(this.implicit||[]).concat(e),r.explicit=(this.explicit||[]).concat(i),r.compiledImplicit=kr(r,"implicit"),r.compiledExplicit=kr(r,"explicit"),r.compiledTypeMap=function(){var t,e,i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(t){t.multi?(i.multi[t.kind].push(t),i.multi.fallback.push(t)):i[t.kind][t.tag]=i.fallback[t.tag]=t}for(t=0,e=arguments.length;t<e;t+=1)arguments[t].forEach(r);return i}(r.compiledImplicit,r.compiledExplicit),r};var Ar=new Tr({explicit:[new vr("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}}),new vr("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}}),new vr("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})]});var wr=new vr("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(t){if(null===t)return!0;var e=t.length;return 1===e&&"~"===t||4===e&&("null"===t||"Null"===t||"NULL"===t)},construct:function(){return null},predicate:function(t){return null===t},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});var Sr=new vr("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)},construct:function(t){return"true"===t||"True"===t||"TRUE"===t},predicate:function(t){return"[object Boolean]"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"});function Br(t){return 48<=t&&t<=55}function Fr(t){return 48<=t&&t<=57}var Lr=new vr("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=t.length,n=0,o=!1;if(!r)return!1;if("-"!==(e=t[n])&&"+"!==e||(e=t[++n]),"0"===e){if(n+1===r)return!0;if("b"===(e=t[++n])){for(n++;n<r;n++)if("_"!==(e=t[n])){if("0"!==e&&"1"!==e)return!1;o=!0}return o&&"_"!==e}if("x"===e){for(n++;n<r;n++)if("_"!==(e=t[n])){if(!(48<=(i=t.charCodeAt(n))&&i<=57||65<=i&&i<=70||97<=i&&i<=102))return!1;o=!0}return o&&"_"!==e}if("o"===e){for(n++;n<r;n++)if("_"!==(e=t[n])){if(!Br(t.charCodeAt(n)))return!1;o=!0}return o&&"_"!==e}}if("_"===e)return!1;for(;n<r;n++)if("_"!==(e=t[n])){if(!Fr(t.charCodeAt(n)))return!1;o=!0}return!(!o||"_"===e)},construct:function(t){var e,i=t,r=1;if(-1!==i.indexOf("_")&&(i=i.replace(/_/g,"")),"-"!==(e=i[0])&&"+"!==e||("-"===e&&(r=-1),e=(i=i.slice(1))[0]),"0"===i)return 0;if("0"===e){if("b"===i[1])return r*parseInt(i.slice(2),2);if("x"===i[1])return r*parseInt(i.slice(2),16);if("o"===i[1])return r*parseInt(i.slice(2),8)}return r*parseInt(i,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!fr.isNegativeZero(t)},represent:{binary:function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),Mr=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var Er=/^[-+]?[0-9]+e/;var Or=new vr("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!Mr.test(t)||"_"===t[t.length-1])},construct:function(t){var e,i;return i="-"===(e=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===i?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:i*parseFloat(e,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||fr.isNegativeZero(t))},represent:function(t,e){var i;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(fr.isNegativeZero(t))return"-0.0";return i=t.toString(10),Er.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),Ir=Ar.extend({implicit:[wr,Sr,Lr,Or]}),Dr=Ir,qr=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Nr=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var $r=new vr("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==qr.exec(t)||null!==Nr.exec(t))},construct:function(t){var e,i,r,n,o,a,s,l,h=0,c=null;if(null===(e=qr.exec(t))&&(e=Nr.exec(t)),null===e)throw new Error("Date resolve error");if(i=+e[1],r=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(i,r,n));if(o=+e[4],a=+e[5],s=+e[6],e[7]){for(h=e[7].slice(0,3);h.length<3;)h+="0";h=+h}return e[9]&&(c=6e4*(60*+e[10]+ +(e[11]||0)),"-"===e[9]&&(c=-c)),l=new Date(Date.UTC(i,r,n,o,a,s,h)),c&&l.setTime(l.getTime()-c),l},instanceOf:Date,represent:function(t){return t.toISOString()}});var zr=new vr("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}}),Pr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var jr=new vr("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=0,n=t.length,o=Pr;for(i=0;i<n;i++)if(!((e=o.indexOf(t.charAt(i)))>64)){if(e<0)return!1;r+=6}return r%8==0},construct:function(t){var e,i,r=t.replace(/[\r\n=]/g,""),n=r.length,o=Pr,a=0,s=[];for(e=0;e<n;e++)e%4==0&&e&&(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)),a=a<<6|o.indexOf(r.charAt(e));return 0===(i=n%4*6)?(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)):18===i?(s.push(a>>10&255),s.push(a>>2&255)):12===i&&s.push(a>>4&255),new Uint8Array(s)},predicate:function(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function(t){var e,i,r="",n=0,o=t.length,a=Pr;for(e=0;e<o;e++)e%3==0&&e&&(r+=a[n>>18&63],r+=a[n>>12&63],r+=a[n>>6&63],r+=a[63&n]),n=(n<<8)+t[e];return 0===(i=o%3)?(r+=a[n>>18&63],r+=a[n>>12&63],r+=a[n>>6&63],r+=a[63&n]):2===i?(r+=a[n>>10&63],r+=a[n>>4&63],r+=a[n<<2&63],r+=a[64]):1===i&&(r+=a[n>>2&63],r+=a[n<<4&63],r+=a[64],r+=a[64]),r}}),Rr=Object.prototype.hasOwnProperty,Wr=Object.prototype.toString;var Ur=new vr("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,a=[],s=t;for(e=0,i=s.length;e<i;e+=1){if(r=s[e],o=!1,"[object Object]"!==Wr.call(r))return!1;for(n in r)if(Rr.call(r,n)){if(o)return!1;o=!0}if(!o)return!1;if(-1!==a.indexOf(n))return!1;a.push(n)}return!0},construct:function(t){return null!==t?t:[]}}),Hr=Object.prototype.toString;var Yr=new vr("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,a=t;for(o=new Array(a.length),e=0,i=a.length;e<i;e+=1){if(r=a[e],"[object Object]"!==Hr.call(r))return!1;if(1!==(n=Object.keys(r)).length)return!1;o[e]=[n[0],r[n[0]]]}return!0},construct:function(t){if(null===t)return[];var e,i,r,n,o,a=t;for(o=new Array(a.length),e=0,i=a.length;e<i;e+=1)r=a[e],n=Object.keys(r),o[e]=[n[0],r[n[0]]];return o}}),Vr=Object.prototype.hasOwnProperty;var Gr=new vr("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(t){if(null===t)return!0;var e,i=t;for(e in i)if(Vr.call(i,e)&&null!==i[e])return!1;return!0},construct:function(t){return null!==t?t:{}}}),Xr=Dr.extend({implicit:[$r,zr],explicit:[jr,Ur,Yr,Gr]}),Zr=Object.prototype.hasOwnProperty,Jr=1,Qr=2,Kr=3,tn=4,en=1,rn=2,nn=3,on=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,an=/[\x85\u2028\u2029]/,sn=/[,\[\]\{\}]/,ln=/^(?:!|!!|![a-z\-]+!)$/i,hn=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function cn(t){return Object.prototype.toString.call(t)}function un(t){return 10===t||13===t}function dn(t){return 9===t||32===t}function fn(t){return 9===t||32===t||10===t||13===t}function pn(t){return 44===t||91===t||93===t||123===t||125===t}function gn(t){var e;return 48<=t&&t<=57?t-48:97<=(e=32|t)&&e<=102?e-97+10:-1}function yn(t){return 48===t?"\0":97===t?"\x07":98===t?"\b":116===t||9===t?"\t":110===t?"\n":118===t?"\v":102===t?"\f":114===t?"\r":101===t?"\x1b":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"\x85":95===t?"\xa0":76===t?"\u2028":80===t?"\u2029":""}function mn(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var Cn=new Array(256),xn=new Array(256),_n=0;_n<256;_n++)Cn[_n]=yn(_n)?1:0,xn[_n]=yn(_n);function bn(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||Xr,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function vn(t,e){var i={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return i.snippet=xr(i),new yr(e,i)}function kn(t,e){throw vn(t,e)}function Tn(t,e){t.onWarning&&t.onWarning.call(null,vn(t,e))}var An={YAML:function(t,e,i){var r,n,o;null!==t.version&&kn(t,"duplication of %YAML directive"),1!==i.length&&kn(t,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(i[0]))&&kn(t,"ill-formed argument of the YAML directive"),n=parseInt(r[1],10),o=parseInt(r[2],10),1!==n&&kn(t,"unacceptable YAML version of the document"),t.version=i[0],t.checkLineBreaks=o<2,1!==o&&2!==o&&Tn(t,"unsupported YAML version of the document")},TAG:function(t,e,i){var r,n;2!==i.length&&kn(t,"TAG directive accepts exactly two arguments"),r=i[0],n=i[1],ln.test(r)||kn(t,"ill-formed tag handle (first argument) of the TAG directive"),Zr.call(t.tagMap,r)&&kn(t,'there is a previously declared suffix for "'+r+'" tag handle'),hn.test(n)||kn(t,"ill-formed tag prefix (second argument) of the TAG directive");try{n=decodeURIComponent(n)}catch(o){kn(t,"tag prefix is malformed: "+n)}t.tagMap[r]=n}};function wn(t,e,i,r){var n,o,a,s;if(e<i){if(s=t.input.slice(e,i),r)for(n=0,o=s.length;n<o;n+=1)9===(a=s.charCodeAt(n))||32<=a&&a<=1114111||kn(t,"expected valid JSON character");else on.test(s)&&kn(t,"the stream contains non-printable characters");t.result+=s}}function Sn(t,e,i,r){var n,o,a,s;for(fr.isObject(i)||kn(t,"cannot merge mappings; the provided source object is unacceptable"),a=0,s=(n=Object.keys(i)).length;a<s;a+=1)o=n[a],Zr.call(e,o)||(e[o]=i[o],r[o]=!0)}function Bn(t,e,i,r,n,o,a,s,l){var h,c;if(Array.isArray(n))for(h=0,c=(n=Array.prototype.slice.call(n)).length;h<c;h+=1)Array.isArray(n[h])&&kn(t,"nested arrays are not supported inside keys"),"object"==typeof n&&"[object Object]"===cn(n[h])&&(n[h]="[object Object]");if("object"==typeof n&&"[object Object]"===cn(n)&&(n="[object Object]"),n=String(n),null===e&&(e={}),"tag:yaml.org,2002:merge"===r)if(Array.isArray(o))for(h=0,c=o.length;h<c;h+=1)Sn(t,e,o[h],i);else Sn(t,e,o,i);else t.json||Zr.call(i,n)||!Zr.call(e,n)||(t.line=a||t.line,t.lineStart=s||t.lineStart,t.position=l||t.position,kn(t,"duplicated mapping key")),"__proto__"===n?Object.defineProperty(e,n,{configurable:!0,enumerable:!0,writable:!0,value:o}):e[n]=o,delete i[n];return e}function Fn(t){var e;10===(e=t.input.charCodeAt(t.position))?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):kn(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function Ln(t,e,i){for(var r=0,n=t.input.charCodeAt(t.position);0!==n;){for(;dn(n);)9===n&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),n=t.input.charCodeAt(++t.position);if(e&&35===n)do{n=t.input.charCodeAt(++t.position)}while(10!==n&&13!==n&&0!==n);if(!un(n))break;for(Fn(t),n=t.input.charCodeAt(t.position),r++,t.lineIndent=0;32===n;)t.lineIndent++,n=t.input.charCodeAt(++t.position)}return-1!==i&&0!==r&&t.lineIndent<i&&Tn(t,"deficient indentation"),r}function Mn(t){var e,i=t.position;return!(45!==(e=t.input.charCodeAt(i))&&46!==e||e!==t.input.charCodeAt(i+1)||e!==t.input.charCodeAt(i+2)||(i+=3,0!==(e=t.input.charCodeAt(i))&&!fn(e)))}function En(t,e){1===e?t.result+=" ":e>1&&(t.result+=fr.repeat("\n",e-1))}function On(t,e){var i,r,n=t.tag,o=t.anchor,a=[],s=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=a),r=t.input.charCodeAt(t.position);0!==r&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,kn(t,"tab characters must not be used in indentation")),45===r)&&fn(t.input.charCodeAt(t.position+1));)if(s=!0,t.position++,Ln(t,!0,-1)&&t.lineIndent<=e)a.push(null),r=t.input.charCodeAt(t.position);else if(i=t.line,qn(t,e,Kr,!1,!0),a.push(t.result),Ln(t,!0,-1),r=t.input.charCodeAt(t.position),(t.line===i||t.lineIndent>e)&&0!==r)kn(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break;return!!s&&(t.tag=n,t.anchor=o,t.kind="sequence",t.result=a,!0)}function In(t){var e,i,r,n,o=!1,a=!1;if(33!==(n=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&kn(t,"duplication of a tag property"),60===(n=t.input.charCodeAt(++t.position))?(o=!0,n=t.input.charCodeAt(++t.position)):33===n?(a=!0,i="!!",n=t.input.charCodeAt(++t.position)):i="!",e=t.position,o){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&62!==n);t.position<t.length?(r=t.input.slice(e,t.position),n=t.input.charCodeAt(++t.position)):kn(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==n&&!fn(n);)33===n&&(a?kn(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(e-1,t.position+1),ln.test(i)||kn(t,"named tag handle cannot contain such characters"),a=!0,e=t.position+1)),n=t.input.charCodeAt(++t.position);r=t.input.slice(e,t.position),sn.test(r)&&kn(t,"tag suffix cannot contain flow indicator characters")}r&&!hn.test(r)&&kn(t,"tag name cannot contain such characters: "+r);try{r=decodeURIComponent(r)}catch(s){kn(t,"tag name is malformed: "+r)}return o?t.tag=r:Zr.call(t.tagMap,i)?t.tag=t.tagMap[i]+r:"!"===i?t.tag="!"+r:"!!"===i?t.tag="tag:yaml.org,2002:"+r:kn(t,'undeclared tag handle "'+i+'"'),!0}function Dn(t){var e,i;if(38!==(i=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&kn(t,"duplication of an anchor property"),i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!fn(i)&&!pn(i);)i=t.input.charCodeAt(++t.position);return t.position===e&&kn(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function qn(t,e,i,r,n){var o,a,s,l,h,c,u,d,f,p=1,g=!1,y=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,o=a=s=tn===i||Kr===i,r&&Ln(t,!0,-1)&&(g=!0,t.lineIndent>e?p=1:t.lineIndent===e?p=0:t.lineIndent<e&&(p=-1)),1===p)for(;In(t)||Dn(t);)Ln(t,!0,-1)?(g=!0,s=o,t.lineIndent>e?p=1:t.lineIndent===e?p=0:t.lineIndent<e&&(p=-1)):s=!1;if(s&&(s=g||n),1!==p&&tn!==i||(d=Jr===i||Qr===i?e:e+1,f=t.position-t.lineStart,1===p?s&&(On(t,f)||function(t,e,i){var r,n,o,a,s,l,h,c=t.tag,u=t.anchor,d={},f=Object.create(null),p=null,g=null,y=null,m=!1,C=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=d),h=t.input.charCodeAt(t.position);0!==h;){if(m||-1===t.firstTabInLine||(t.position=t.firstTabInLine,kn(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),o=t.line,63!==h&&58!==h||!fn(r)){if(a=t.line,s=t.lineStart,l=t.position,!qn(t,i,Qr,!1,!0))break;if(t.line===o){for(h=t.input.charCodeAt(t.position);dn(h);)h=t.input.charCodeAt(++t.position);if(58===h)fn(h=t.input.charCodeAt(++t.position))||kn(t,"a whitespace character is expected after the key-value separator within a block mapping"),m&&(Bn(t,d,f,p,g,null,a,s,l),p=g=y=null),C=!0,m=!1,n=!1,p=t.tag,g=t.result;else{if(!C)return t.tag=c,t.anchor=u,!0;kn(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!C)return t.tag=c,t.anchor=u,!0;kn(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===h?(m&&(Bn(t,d,f,p,g,null,a,s,l),p=g=y=null),C=!0,m=!0,n=!0):m?(m=!1,n=!0):kn(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,h=r;if((t.line===o||t.lineIndent>e)&&(m&&(a=t.line,s=t.lineStart,l=t.position),qn(t,e,tn,!0,n)&&(m?g=t.result:y=t.result),m||(Bn(t,d,f,p,g,y,a,s,l),p=g=y=null),Ln(t,!0,-1),h=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>e)&&0!==h)kn(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return m&&Bn(t,d,f,p,g,null,a,s,l),C&&(t.tag=c,t.anchor=u,t.kind="mapping",t.result=d),C}(t,f,d))||function(t,e){var i,r,n,o,a,s,l,h,c,u,d,f,p=!0,g=t.tag,y=t.anchor,m=Object.create(null);if(91===(f=t.input.charCodeAt(t.position)))a=93,h=!1,o=[];else{if(123!==f)return!1;a=125,h=!0,o={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=o),f=t.input.charCodeAt(++t.position);0!==f;){if(Ln(t,!0,e),(f=t.input.charCodeAt(t.position))===a)return t.position++,t.tag=g,t.anchor=y,t.kind=h?"mapping":"sequence",t.result=o,!0;p?44===f&&kn(t,"expected the node content, but found ','"):kn(t,"missed comma between flow collection entries"),d=null,s=l=!1,63===f&&fn(t.input.charCodeAt(t.position+1))&&(s=l=!0,t.position++,Ln(t,!0,e)),i=t.line,r=t.lineStart,n=t.position,qn(t,e,Jr,!1,!0),u=t.tag,c=t.result,Ln(t,!0,e),f=t.input.charCodeAt(t.position),!l&&t.line!==i||58!==f||(s=!0,f=t.input.charCodeAt(++t.position),Ln(t,!0,e),qn(t,e,Jr,!1,!0),d=t.result),h?Bn(t,o,m,u,c,d,i,r,n):s?o.push(Bn(t,null,m,u,c,d,i,r,n)):o.push(c),Ln(t,!0,e),44===(f=t.input.charCodeAt(t.position))?(p=!0,f=t.input.charCodeAt(++t.position)):p=!1}kn(t,"unexpected end of the stream within a flow collection")}(t,d)?y=!0:(a&&function(t,e){var i,r,n,o,a,s=en,l=!1,h=!1,c=e,u=0,d=!1;if(124===(o=t.input.charCodeAt(t.position)))r=!1;else{if(62!==o)return!1;r=!0}for(t.kind="scalar",t.result="";0!==o;)if(43===(o=t.input.charCodeAt(++t.position))||45===o)en===s?s=43===o?nn:rn:kn(t,"repeat of a chomping mode identifier");else{if(!((n=48<=(a=o)&&a<=57?a-48:-1)>=0))break;0===n?kn(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):h?kn(t,"repeat of an indentation width identifier"):(c=e+n-1,h=!0)}if(dn(o)){do{o=t.input.charCodeAt(++t.position)}while(dn(o));if(35===o)do{o=t.input.charCodeAt(++t.position)}while(!un(o)&&0!==o)}for(;0!==o;){for(Fn(t),t.lineIndent=0,o=t.input.charCodeAt(t.position);(!h||t.lineIndent<c)&&32===o;)t.lineIndent++,o=t.input.charCodeAt(++t.position);if(!h&&t.lineIndent>c&&(c=t.lineIndent),un(o))u++;else{if(t.lineIndent<c){s===nn?t.result+=fr.repeat("\n",l?1+u:u):s===en&&l&&(t.result+="\n");break}for(r?dn(o)?(d=!0,t.result+=fr.repeat("\n",l?1+u:u)):d?(d=!1,t.result+=fr.repeat("\n",u+1)):0===u?l&&(t.result+=" "):t.result+=fr.repeat("\n",u):t.result+=fr.repeat("\n",l?1+u:u),l=!0,h=!0,u=0,i=t.position;!un(o)&&0!==o;)o=t.input.charCodeAt(++t.position);wn(t,i,t.position,!1)}}return!0}(t,d)||function(t,e){var i,r,n;if(39!==(i=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;0!==(i=t.input.charCodeAt(t.position));)if(39===i){if(wn(t,r,t.position,!0),39!==(i=t.input.charCodeAt(++t.position)))return!0;r=t.position,t.position++,n=t.position}else un(i)?(wn(t,r,n,!0),En(t,Ln(t,!1,e)),r=n=t.position):t.position===t.lineStart&&Mn(t)?kn(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);kn(t,"unexpected end of the stream within a single quoted scalar")}(t,d)||function(t,e){var i,r,n,o,a,s,l;if(34!==(s=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,i=r=t.position;0!==(s=t.input.charCodeAt(t.position));){if(34===s)return wn(t,i,t.position,!0),t.position++,!0;if(92===s){if(wn(t,i,t.position,!0),un(s=t.input.charCodeAt(++t.position)))Ln(t,!1,e);else if(s<256&&Cn[s])t.result+=xn[s],t.position++;else if((a=120===(l=s)?2:117===l?4:85===l?8:0)>0){for(n=a,o=0;n>0;n--)(a=gn(s=t.input.charCodeAt(++t.position)))>=0?o=(o<<4)+a:kn(t,"expected hexadecimal character");t.result+=mn(o),t.position++}else kn(t,"unknown escape sequence");i=r=t.position}else un(s)?(wn(t,i,r,!0),En(t,Ln(t,!1,e)),i=r=t.position):t.position===t.lineStart&&Mn(t)?kn(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}kn(t,"unexpected end of the stream within a double quoted scalar")}(t,d)?y=!0:!function(t){var e,i,r;if(42!==(r=t.input.charCodeAt(t.position)))return!1;for(r=t.input.charCodeAt(++t.position),e=t.position;0!==r&&!fn(r)&&!pn(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&kn(t,"name of an alias node must contain at least one character"),i=t.input.slice(e,t.position),Zr.call(t.anchorMap,i)||kn(t,'unidentified alias "'+i+'"'),t.result=t.anchorMap[i],Ln(t,!0,-1),!0}(t)?function(t,e,i){var r,n,o,a,s,l,h,c,u=t.kind,d=t.result;if(fn(c=t.input.charCodeAt(t.position))||pn(c)||35===c||38===c||42===c||33===c||124===c||62===c||39===c||34===c||37===c||64===c||96===c)return!1;if((63===c||45===c)&&(fn(r=t.input.charCodeAt(t.position+1))||i&&pn(r)))return!1;for(t.kind="scalar",t.result="",n=o=t.position,a=!1;0!==c;){if(58===c){if(fn(r=t.input.charCodeAt(t.position+1))||i&&pn(r))break}else if(35===c){if(fn(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&Mn(t)||i&&pn(c))break;if(un(c)){if(s=t.line,l=t.lineStart,h=t.lineIndent,Ln(t,!1,-1),t.lineIndent>=e){a=!0,c=t.input.charCodeAt(t.position);continue}t.position=o,t.line=s,t.lineStart=l,t.lineIndent=h;break}}a&&(wn(t,n,o,!1),En(t,t.line-s),n=o=t.position,a=!1),dn(c)||(o=t.position+1),c=t.input.charCodeAt(++t.position)}return wn(t,n,o,!1),!!t.result||(t.kind=u,t.result=d,!1)}(t,d,Jr===i)&&(y=!0,null===t.tag&&(t.tag="?")):(y=!0,null===t.tag&&null===t.anchor||kn(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===p&&(y=s&&On(t,f))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&kn(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),l=0,h=t.implicitTypes.length;l<h;l+=1)if((u=t.implicitTypes[l]).resolve(t.result)){t.result=u.construct(t.result),t.tag=u.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(Zr.call(t.typeMap[t.kind||"fallback"],t.tag))u=t.typeMap[t.kind||"fallback"][t.tag];else for(u=null,l=0,h=(c=t.typeMap.multi[t.kind||"fallback"]).length;l<h;l+=1)if(t.tag.slice(0,c[l].tag.length)===c[l].tag){u=c[l];break}u||kn(t,"unknown tag !<"+t.tag+">"),null!==t.result&&u.kind!==t.kind&&kn(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+u.kind+'", not "'+t.kind+'"'),u.resolve(t.result,t.tag)?(t.result=u.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):kn(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||y}function Nn(t){var e,i,r,n,o=t.position,a=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(n=t.input.charCodeAt(t.position))&&(Ln(t,!0,-1),n=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==n));){for(a=!0,n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!fn(n);)n=t.input.charCodeAt(++t.position);for(r=[],(i=t.input.slice(e,t.position)).length<1&&kn(t,"directive name must not be less than one character in length");0!==n;){for(;dn(n);)n=t.input.charCodeAt(++t.position);if(35===n){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&!un(n));break}if(un(n))break;for(e=t.position;0!==n&&!fn(n);)n=t.input.charCodeAt(++t.position);r.push(t.input.slice(e,t.position))}0!==n&&Fn(t),Zr.call(An,i)?An[i](t,i,r):Tn(t,'unknown document directive "'+i+'"')}Ln(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,Ln(t,!0,-1)):a&&kn(t,"directives end mark is expected"),qn(t,t.lineIndent-1,tn,!1,!0),Ln(t,!0,-1),t.checkLineBreaks&&an.test(t.input.slice(o,t.position))&&Tn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Mn(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,Ln(t,!0,-1)):t.position<t.length-1&&kn(t,"end of the stream or a document separator is expected")}function $n(t,e){e=e||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var i=new bn(t,e),r=t.indexOf("\0");for(-1!==r&&(i.position=r,kn(i,"null byte is not allowed in input")),i.input+="\0";32===i.input.charCodeAt(i.position);)i.lineIndent+=1,i.position+=1;for(;i.position<i.length-1;)Nn(i);return i.documents}var zn=Ir,Pn={loadAll:function(t,e,i){null!==e&&"object"==typeof e&&void 0===i&&(i=e,e=null);var r=$n(t,i);if("function"!=typeof e)return r;for(var n=0,o=r.length;n<o;n+=1)e(r[n])},load:function(t,e){var i=$n(t,e);if(0!==i.length){if(1===i.length)return i[0];throw new yr("expected a single document in the stream, but found more")}}}.load;const jn=t=>t.replace(/\r\n?/g,"\n").replace(/<(\w+)([^>]*)>/g,((t,e,i)=>"<"+e+i.replace(/="([^"]*)"/g,"='$1'")+">")),Rn=t=>{const{text:e,metadata:i}=function(t){const e=t.match(Ht);if(!e)return{text:t,metadata:{}};let i=Pn(e[1],{schema:zn})??{};i="object"!=typeof i||Array.isArray(i)?{}:i;const r={};return i.displayMode&&(r.displayMode=i.displayMode.toString()),i.title&&(r.title=i.title.toString()),i.config&&(r.config=i.config),{text:t.slice(e[0].length),metadata:r}}(t),{displayMode:r,title:n,config:o={}}=i;return r&&(o.gantt||(o.gantt={}),o.gantt.displayMode=r),{title:n,config:o,text:e}},Wn=t=>{const e=ke.detectInit(t)??{},i=ke.detectDirective(t,"wrap");return Array.isArray(i)?e.wrap=i.some((({type:t})=>{})):"wrap"===(null==i?void 0:i.type)&&(e.wrap=!0),{text:(r=t,r.replace(Yt,"")),directive:e};var r};function Un(t){const e=jn(t),i=Rn(e),r=Wn(i.text),n=ve(i.config,r.directive);return{code:t=ur(r.text),title:i.title,config:n}}const Hn=["foreignobject"],Yn=["dominant-baseline"];function Vn(t){const e=Un(t);return Ne(),qe(e.config??{}),e}const Gn=(t,e,i=[])=>`\n.${t} ${e} { ${i.join(" !important; ")} !important; }`,Xn=(t,e,i,r)=>{const n=((t,e={})=>{var i;let r="";if(void 0!==t.themeCSS&&(r+=`\n${t.themeCSS}`),void 0!==t.fontFamily&&(r+=`\n:root { --mermaid-font-family: ${t.fontFamily}}`),void 0!==t.altFontFamily&&(r+=`\n:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!(0,ot.A)(e)){const n=t.htmlLabels||(null==(i=t.flowchart)?void 0:i.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const t in e){const i=e[t];(0,ot.A)(i.styles)||n.forEach((t=>{r+=Gn(i.id,t,i.styles)})),(0,ot.A)(i.textStyles)||(r+=Gn(i.id,"tspan",i.textStyles))}}return r})(t,i);return M(tt(`${r}{${bi(e,n,t.themeVariables)}}`),E)},Zn=(t,e,i,r,n)=>{const o=t.append("div");o.attr("id",i),r&&o.attr("style",r);const a=o.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return n&&a.attr("xmlns:xlink",n),a.append("g"),t};function Jn(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const Qn=(t,e={})=>{const{code:i}=Un(t);return lr(i,e)};const Kn=Object.freeze({render:async function(t,e,i){var r,n,o,l,h,c;ar();const u=Vn(e);e=u.code;const d=Ie();st.debug(d),e.length>((null==d?void 0:d.maxTextSize)??5e4)&&(e="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa");const f="#"+t,p="i"+t,g="#"+p,y="d"+t,m="#"+y;let C=(0,a.Ltv)("body");const x="sandbox"===d.securityLevel,_="loose"===d.securityLevel,b=d.fontFamily;if(void 0!==i){if(i&&(i.innerHTML=""),x){const t=Jn((0,a.Ltv)(i),p);C=(0,a.Ltv)(t.nodes()[0].contentDocument.body),C.node().style.margin=0}else C=(0,a.Ltv)(i);Zn(C,t,y,`font-family: ${b}`,"http://www.w3.org/1999/xlink")}else{if(((t,e,i,r)=>{var n,o,a;null==(n=t.getElementById(e))||n.remove(),null==(o=t.getElementById(i))||o.remove(),null==(a=t.getElementById(r))||a.remove()})(document,t,y,p),x){const t=Jn((0,a.Ltv)("body"),p);C=(0,a.Ltv)(t.nodes()[0].contentDocument.body),C.node().style.margin=0}else C=(0,a.Ltv)("body");Zn(C,t,y)}let v,k;try{v=await Qn(e,{title:u.title})}catch(I){v=new sr("error"),k=I}const T=C.select(m).node(),A=v.type,w=T.firstChild,S=w.firstChild,B=null==(n=(r=v.renderer).getClasses)?void 0:n.call(r,e,v),F=Xn(d,A,B,f),L=document.createElement("style");L.innerHTML=F,w.insertBefore(L,S);try{await v.renderer.draw(e,t,Ae,v)}catch(D){throw Vi.draw(e,t,Ae),D}!function(t,e,i,r){(function(t,e){t.attr("role",cr),""!==e&&t.attr("aria-roledescription",e)})(e,t),function(t,e,i,r){if(void 0!==t.insert){if(i){const e=`chart-desc-${r}`;t.attr("aria-describedby",e),t.insert("desc",":first-child").attr("id",e).text(i)}if(e){const i=`chart-title-${r}`;t.attr("aria-labelledby",i),t.insert("title",":first-child").attr("id",i).text(e)}}}(e,i,r,e.attr("id"))}(A,C.select(`${m} svg`),null==(l=(o=v.db).getAccTitle)?void 0:l.call(o),null==(c=(h=v.db).getAccDescription)?void 0:c.call(h)),C.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");let M=C.select(m).node().innerHTML;if(st.debug("config.arrowMarkerAbsolute",d.arrowMarkerAbsolute),M=((t="",e,i)=>{let r=t;return i||e||(r=r.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),r=Te(r),r=r.replace(/<br>/g,"<br/>"),r})(M,x,mt(d.arrowMarkerAbsolute)),x){M=((t="",e)=>{var i,r;return`<iframe style="width:100%;height:${(null==(r=null==(i=null==e?void 0:e.viewBox)?void 0:i.baseVal)?void 0:r.height)?e.viewBox.baseVal.height+"px":"100%"};border:0;margin:0;" src="data:text/html;base64,${btoa('<body style="margin:0">'+t+"</body>")}" sandbox="allow-top-navigation-by-user-activation allow-popups">\n The "iframe" tag is not supported by your browser.\n</iframe>`})(M,C.select(m+" svg").node())}else _||(M=s.sanitize(M,{ADD_TAGS:Hn,ADD_ATTR:Yn}));if(hr.forEach((t=>{t()})),hr=[],k)throw k;const E=x?g:m,O=(0,a.Ltv)(E).node();return O&&"remove"in O&&O.remove(),{svg:M,bindFunctions:v.db.bindFunctions}},parse:async function(t,e){ar(),t=Vn(t).code;try{await Qn(t)}catch(i){if(null==e?void 0:e.suppressErrors)return!1;throw i}return!0},getDiagramFromText:Qn,initialize:function(t={}){var e;(null==t?void 0:t.fontFamily)&&!(null==(e=t.themeVariables)?void 0:e.fontFamily)&&(t.themeVariables||(t.themeVariables={}),t.themeVariables.fontFamily=t.fontFamily),Se=te({},t),(null==t?void 0:t.theme)&&t.theme in Nt?t.themeVariables=Nt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Nt.default.getThemeVariables(t.themeVariables));const i="object"==typeof t?(t=>(Be=te({},we),Be=te(Be,t),t.theme&&Nt[t.theme]&&(Be.themeVariables=Nt[t.theme].getThemeVariables(t.themeVariables)),Me(Be,Fe),Be))(t):Ee();lt(i.logLevel),ar()},getConfig:Ie,setConfig:Oe,getSiteConfig:Ee,updateSiteConfig:t=>(Be=te(Be,t),Me(Be,Fe),Be),reset:()=>{Ne()},globalReset:()=>{Ne(we)},defaultConfig:we});lt(Ie().logLevel),Ne(Ie());const to=(t,e,i)=>{st.warn(t),_e(t)?(i&&i(t.str,t.hash),e.push({...t,message:t.str,error:t})):(i&&i(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},eo=async function(t={querySelector:".mermaid"}){try{await io(t)}catch(e){if(_e(e)&&st.error(e.str),ho.parseError&&ho.parseError(e),!t.suppressErrors)throw st.error("Use the suppressErrors option to suppress these errors"),e}},io=async function({postRenderCallback:t,querySelector:e,nodes:i}={querySelector:".mermaid"}){const n=Kn.getConfig();let o;if(st.debug((t?"":"No ")+"Callback function found"),i)o=i;else{if(!e)throw new Error("Nodes and querySelector are both undefined");o=document.querySelectorAll(e)}st.debug(`Found ${o.length} diagrams`),void 0!==(null==n?void 0:n.startOnLoad)&&(st.debug("Start On Load: "+(null==n?void 0:n.startOnLoad)),Kn.updateSiteConfig({startOnLoad:null==n?void 0:n.startOnLoad}));const a=new ke.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed);let s;const l=[];for(const c of Array.from(o)){if(st.info("Rendering diagram: "+c.id),c.getAttribute("data-processed"))continue;c.setAttribute("data-processed","true");const e=`mermaid-${a.next()}`;s=c.innerHTML,s=(0,r.T)(ke.entityDecode(s)).trim().replace(/<br\s*\/?>/gi,"<br/>");const i=ke.detectInit(s);i&&st.debug("Detected early reinit: ",i);try{const{svg:i,bindFunctions:r}=await lo(e,s,c);c.innerHTML=i,t&&await t(e),r&&r(c)}catch(h){to(h,l,ho.parseError)}}if(l.length>0)throw l[0]},ro=function(t){Kn.initialize(t)},no=function(){if(ho.startOnLoad){const{startOnLoad:t}=Kn.getConfig();t&&ho.run().catch((t=>st.error("Mermaid failed to initialize",t)))}};"undefined"!=typeof document&&window.addEventListener("load",no,!1);const oo=[];let ao=!1;const so=async()=>{if(!ao){for(ao=!0;oo.length>0;){const e=oo.shift();if(e)try{await e()}catch(t){st.error("Error executing queue",t)}}ao=!1}},lo=(t,e,i)=>new Promise(((r,n)=>{oo.push((()=>new Promise(((o,a)=>{Kn.render(t,e,i).then((t=>{o(t),r(t)}),(t=>{var e;st.error("Error parsing",t),null==(e=ho.parseError)||e.call(ho,t),a(t),n(t)}))})))),so().catch(n)})),ho={startOnLoad:!0,mermaidAPI:Kn,parse:async(t,e)=>new Promise(((i,r)=>{oo.push((()=>new Promise(((n,o)=>{Kn.parse(t,e).then((t=>{n(t),i(t)}),(t=>{var e;st.error("Error parsing",t),null==(e=ho.parseError)||e.call(ho,t),o(t),r(t)}))})))),so().catch(r)})),render:lo,init:async function(t,e,i){st.warn("mermaid.init is deprecated. Please use run instead."),t&&ro(t);const r={postRenderCallback:i,querySelector:".mermaid"};"string"==typeof e?r.querySelector=e:e&&(e instanceof HTMLElement?r.nodes=[e]:r.nodes=e),await eo(r)},run:eo,registerExternalDiagrams:async(t,{lazyLoad:e=!0}={})=>{Jt(...t),!1===e&&await(async()=>{st.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(Xt).map((async([t,{detector:e,loader:i}])=>{if(i)try{Wi(t)}catch(r){try{const{diagram:t,id:r}=await i();Ri(r,t,e)}catch(n){throw st.error(`Failed to load external diagram with key ${t}. Removing from detectors.`),delete Xt[t],n}}})))).filter((t=>"rejected"===t.status));if(t.length>0){st.error(`Failed to load ${t.length} external diagrams`);for(const e of t)st.error(e);throw new Error(`Failed to load ${t.length} external diagrams`)}})()},initialize:ro,parseError:void 0,contentLoaded:no,setParseErrorHandler:function(t){ho.parseError=t},detectType:Zt}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9610.9966723f.js.LICENSE.txt b/pr-preview/pr-1594/assets/js/9610.9966723f.js.LICENSE.txt deleted file mode 100644 index a53521f284..0000000000 --- a/pr-preview/pr-1594/assets/js/9610.9966723f.js.LICENSE.txt +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Wait for document loaded before starting the execution - */ - -/*! @license DOMPurify 3.0.9 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.9/LICENSE */ - -/*! Check if previously processed */ - -/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ diff --git a/pr-preview/pr-1594/assets/js/964d596a.f473761b.js b/pr-preview/pr-1594/assets/js/964d596a.f473761b.js deleted file mode 100644 index dadd4f1a0c..0000000000 --- a/pr-preview/pr-1594/assets/js/964d596a.f473761b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6523],{69662:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>a});var r=t(74848),s=t(28453);const i={},c="Zendesk Support",o={id:"reference/Connectors/capture-connectors/zendesk-support",title:"Zendesk Support",description:"This connector captures data from Zendesk into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/zendesk-support.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/zendesk-support",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/zendesk-support.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Zendesk Chat",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat"},next:{title:"Dekaf integrations",permalink:"/pr-preview/pr-1594/reference/Connectors/dekaf/"}},d={},a=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"OAuth2 authentication",id:"oauth2-authentication",level:3},{value:"API token authentication",id:"api-token-authentication",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"zendesk-support",children:"Zendesk Support"}),"\n",(0,r.jsx)(n.p,{children:"This connector captures data from Zendesk into Flow collections."}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://ghcr.io/estuary/source-zendesk-support:dev",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-zendesk-support:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/zendesk-support/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,r.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,r.jsx)(n.p,{children:"The following data resources are supported through the Zendesk API:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/ticket-management/skill_based_routing/#list-account-attributes",children:"Account attributes"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/ticket-management/skill_based_routing/#list-routing-attribute-definitions",children:"Attribute definitions"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/account-configuration/audit_logs/#list-audit-logs",children:"Audit logs"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/account-configuration/brands/",children:"Brands"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/",children:"Custom roles"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/",children:"Group memberships"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/groups/groups/",children:"Groups"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/business-rules/macros/",children:"Macros"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/",children:"Organizations"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/",children:"Organization memberships"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/help_center/help-center-api/posts/#list-posts",children:"Posts"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/help_center/help-center-api/post_comments/#list-comments",children:"Post comments"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/help_center/help-center-api/votes/#list-votes",children:"Post comment votes"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/help_center/help-center-api/votes/#list-votes",children:"Post votes"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/ticket-management/satisfaction_ratings/",children:"Satisfaction ratings"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/ticket-management/schedules/",children:"Schedules"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/business-rules/sla_policies/",children:"SLA policies"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/ticket-management/tags/",children:"Tags"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_audits/",children:"Ticket audits"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_comments/",children:"Ticket comments"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_fields/",children:"Ticket fields"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_forms/",children:"Ticket forms"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_metrics/",children:"Ticket metrics"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_metric_events/",children:"Ticket metric events"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_skips/",children:"Ticket skips"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/ticket-management/incremental_exports/#incremental-ticket-export-time-based",children:"Tickets"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developer.zendesk.com/api-reference/ticketing/ticket-management/incremental_exports/#incremental-user-export",children:"Users"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"There are two different ways to authenticate with Zendesk Support when capturing data into Flow: using OAuth2 or providing an API token. The prerequisites for both authentication methods are listed below."}),"\n",(0,r.jsx)(n.h3,{id:"oauth2-authentication",children:"OAuth2 authentication"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Subdomain of your Zendesk URL. In the URL ",(0,r.jsx)(n.code,{children:"https://MY_SUBDOMAIN.zendesk.com/"}),", ",(0,r.jsx)(n.code,{children:"MY_SUBDOMAIN"})," is the subdomain."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"api-token-authentication",children:"API token authentication"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Subdomain of your Zendesk URL. In the URL ",(0,r.jsx)(n.code,{children:"https://MY_SUBDOMAIN.zendesk.com/"}),", ",(0,r.jsx)(n.code,{children:"MY_SUBDOMAIN"})," is the subdomain."]}),"\n",(0,r.jsx)(n.li,{children:"Email address associated with your Zendesk account."}),"\n",(0,r.jsxs)(n.li,{children:["A Zendesk API token. See the ",(0,r.jsx)(n.a,{href:"https://support.zendesk.com/hc/en-us/articles/4408889192858-Generating-a-new-API-token",children:"Zendesk docs"})," to enable tokens and generate a new token."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification files.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Zendesk Support source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/credentials"})}),(0,r.jsx)(n.td,{children:"Credentials method"}),(0,r.jsxs)(n.td,{children:["Type of credentials used. Set to ",(0,r.jsx)(n.code,{children:"api_token"})," or ",(0,r.jsx)(n.code,{children:"oauth2.0"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/api_token"})}),(0,r.jsx)(n.td,{children:"API Token"}),(0,r.jsx)(n.td,{children:"The value of the API token generated."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required for API token authentication"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/email"})}),(0,r.jsx)(n.td,{children:"Email"}),(0,r.jsx)(n.td,{children:"The user email for your Zendesk account."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required for API token authentication"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/client_id"})}),(0,r.jsx)(n.td,{children:"OAuth Client ID"}),(0,r.jsx)(n.td,{children:"The OAuth app's client ID."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required for OAuth2 authentication"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/client_secret"})}),(0,r.jsx)(n.td,{children:"OAuth Client Secret"}),(0,r.jsx)(n.td,{children:"The OAuth app's client secret."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required for OAuth2 authentication"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/access_token"})}),(0,r.jsx)(n.td,{children:"Access Token"}),(0,r.jsx)(n.td,{children:"The access token received from the OAuth app."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required for OAuth2 authentication"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/start_date"})})}),(0,r.jsx)(n.td,{children:"Start Date"}),(0,r.jsx)(n.td,{children:"The date from which you'd like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/subdomain"})})}),(0,r.jsx)(n.td,{children:"Subdomain"}),(0,r.jsxs)(n.td,{children:["This is your Zendesk subdomain that can be found in your account URL. For example, in ",(0,r.jsx)(n.code,{children:"https://MY_SUBDOMAIN.zendesk.com/"}),", where ",(0,r.jsx)(n.code,{children:"MY_SUBDOMAIN"})," is the value of your subdomain."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Resource in Zendesk from which collections are captured."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync Mode"}),(0,r.jsx)(n.td,{children:"Connection method."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"cursorField"})}),(0,r.jsx)(n.td,{children:"Cursor Field"}),(0,r.jsxs)(n.td,{children:["Field to use as a cursor when paginating through results. Required when ",(0,r.jsx)(n.code,{children:"syncMode"})," is ",(0,r.jsx)(n.code,{children:"incremental"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-zendesk-support:dev\n config:\n credentials:\n api_token: <secret>\n credentials: api_token\n email: user@domain.com\n start_date: 2022-03-01T00:00:00Z\n subdomain: my_subdomain\n bindings:\n - resource:\n stream: account_attributes\n syncMode: full_refresh\n target: ${PREFIX}/accountattributes\n - resource:\n stream: attribute_definitions\n syncMode: full_refresh\n target: ${PREFIX}/attributedefinitions\n - resource:\n stream: audit_logs\n syncMode: incremental\n cursorField:\n - created_at\n target: ${PREFIX}/auditlogs\n - resource:\n stream: brands\n syncMode: full_refresh\n target: ${PREFIX}/brands\n - resource:\n stream: custom_roles\n syncMode: full_refresh\n target: ${PREFIX}/customroles\n - resource:\n stream: group_memberships\n syncMode: incremental\n cursorField:\n - updated_at\n target: ${PREFIX}/groupmemberships\n - resource:\n stream: groups\n syncMode: incremental\n cursorField:\n - updated_at\n target: ${PREFIX}/groups\n - resource:\n stream: macros\n syncMode: incremental\n cursorField:\n - updated_at\n target: ${PREFIX}/macros\n - resource:\n stream: organizations\n syncMode: incremental\n cursorField:\n - updated_at\n target: ${PREFIX}/organizations\n - resource:\n stream: organization_memberships\n syncMode: incremental\n cursorField:\n - updated_at\n target: ${PREFIX}/organizationmemberships\n - resource:\n stream: posts\n syncMode: incremental\n cursorField:\n - updated_at\n target: ${PREFIX}/posts\n - resource:\n stream: post_comments\n syncMode: full_refresh\n target: ${PREFIX}/postcomments\n - resource:\n stream: post_comment_votes\n syncMode: full_refresh\n target: ${PREFIX}/postcommentvotes\n - resource:\n stream: post_votes\n syncMode: full_refresh\n target: ${PREFIX}/postvotes\n - resource:\n stream: satisfaction_ratings\n syncMode: incremental\n cursorField:\n - updated_at\n target: ${PREFIX}/satisfactionratings\n - resource:\n stream: schedules\n syncMode: full_refresh\n target: ${PREFIX}/schedules\n - resource:\n stream: sla_policies\n syncMode: full_refresh\n target: ${PREFIX}/slapoliciies\n - resource:\n stream: tags\n syncMode: full_refresh\n target: ${PREFIX}/tags\n - resource:\n stream: ticket_audits\n syncMode: incremental\n cursorField:\n - created_at\n target: ${PREFIX}/ticketaudits\n - resource:\n stream: ticket_comments\n syncMode: incremental\n cursorField:\n - created_at\n target: ${PREFIX}/ticketcomments\n - resource:\n stream: ticket_fields\n syncMode: incremental\n cursorField:\n - updated_at\n target: ${PREFIX}/ticketfields\n - resource:\n stream: ticket_forms\n syncMode: incremental\n cursorField:\n - updated_at\n target: ${PREFIX}/ticketforms\n - resource:\n stream: ticket_metrics\n syncMode: incremental\n cursorField:\n - updated_at\n target: ${PREFIX}/ticketmetrics\n - resource:\n stream: ticket_metric_events\n syncMode: incremental\n cursorField:\n - time\n target: ${PREFIX}/ticketmetricevents\n - resource:\n stream: ticket_skips\n syncMode: incremental\n cursorField:\n - updated_at\n target: ${PREFIX}/ticketskips\n - resource:\n stream: tickets\n syncMode: incremental\n cursorField:\n - after_cursor\n target: ${PREFIX}/tickets\n - resource:\n stream: users\n syncMode: incremental\n cursorField:\n - after_cursor\n target: ${PREFIX}/users\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>o});var r=t(96540);const s={},i=r.createContext(s);function c(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9689.0064c4fa.js b/pr-preview/pr-1594/assets/js/9689.0064c4fa.js deleted file mode 100644 index 2ff609f22a..0000000000 --- a/pr-preview/pr-1594/assets/js/9689.0064c4fa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9689],{79689:(t,e,a)=>{a.d(e,{diagram:()=>at});var r=a(99702),s=a(26312),i=a(28259),n=a(16750),o=(a(74353),a(42838),function(){var t=function(t,e,a,r){for(a=a||{},r=t.length;r--;a[t[r]]=e);return a},e=[1,2],a=[1,3],r=[1,4],s=[2,4],i=[1,9],n=[1,11],o=[1,13],c=[1,14],l=[1,16],d=[1,17],h=[1,18],p=[1,24],g=[1,25],u=[1,26],x=[1,27],y=[1,28],m=[1,29],b=[1,30],f=[1,31],T=[1,32],E=[1,33],w=[1,34],P=[1,35],v=[1,36],_=[1,37],L=[1,38],k=[1,39],I=[1,41],M=[1,42],N=[1,43],A=[1,44],O=[1,45],S=[1,46],D=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],R=[4,5,16,50,52,53],C=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],$=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],Y=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],B=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],V=[68,69,70],F=[1,120],q={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:function(t,e,a,r,s,i,n){var o=i.length-1;switch(s){case 3:return r.apply(i[o]),i[o];case 4:case 9:case 8:case 13:this.$=[];break;case 5:case 10:i[o-1].push(i[o]),this.$=i[o-1];break;case 6:case 7:case 11:case 12:case 62:this.$=i[o];break;case 15:i[o].type="createParticipant",this.$=i[o];break;case 16:i[o-1].unshift({type:"boxStart",boxData:r.parseBoxData(i[o-2])}),i[o-1].push({type:"boxEnd",boxText:i[o-2]}),this.$=i[o-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(i[o-2]),sequenceIndexStep:Number(i[o-1]),sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(i[o-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:r.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:i[o-1]};break;case 23:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:i[o-1]};break;case 29:r.setDiagramTitle(i[o].substring(6)),this.$=i[o].substring(6);break;case 30:r.setDiagramTitle(i[o].substring(7)),this.$=i[o].substring(7);break;case 31:this.$=i[o].trim(),r.setAccTitle(this.$);break;case 32:case 33:this.$=i[o].trim(),r.setAccDescription(this.$);break;case 34:i[o-1].unshift({type:"loopStart",loopText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.LOOP_START}),i[o-1].push({type:"loopEnd",loopText:i[o-2],signalType:r.LINETYPE.LOOP_END}),this.$=i[o-1];break;case 35:i[o-1].unshift({type:"rectStart",color:r.parseMessage(i[o-2]),signalType:r.LINETYPE.RECT_START}),i[o-1].push({type:"rectEnd",color:r.parseMessage(i[o-2]),signalType:r.LINETYPE.RECT_END}),this.$=i[o-1];break;case 36:i[o-1].unshift({type:"optStart",optText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.OPT_START}),i[o-1].push({type:"optEnd",optText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.OPT_END}),this.$=i[o-1];break;case 37:i[o-1].unshift({type:"altStart",altText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.ALT_START}),i[o-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=i[o-1];break;case 38:i[o-1].unshift({type:"parStart",parText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.PAR_START}),i[o-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=i[o-1];break;case 39:i[o-1].unshift({type:"parStart",parText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.PAR_OVER_START}),i[o-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=i[o-1];break;case 40:i[o-1].unshift({type:"criticalStart",criticalText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.CRITICAL_START}),i[o-1].push({type:"criticalEnd",signalType:r.LINETYPE.CRITICAL_END}),this.$=i[o-1];break;case 41:i[o-1].unshift({type:"breakStart",breakText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.BREAK_START}),i[o-1].push({type:"breakEnd",optText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.BREAK_END}),this.$=i[o-1];break;case 43:this.$=i[o-3].concat([{type:"option",optionText:r.parseMessage(i[o-1]),signalType:r.LINETYPE.CRITICAL_OPTION},i[o]]);break;case 45:this.$=i[o-3].concat([{type:"and",parText:r.parseMessage(i[o-1]),signalType:r.LINETYPE.PAR_AND},i[o]]);break;case 47:this.$=i[o-3].concat([{type:"else",altText:r.parseMessage(i[o-1]),signalType:r.LINETYPE.ALT_ELSE},i[o]]);break;case 48:i[o-3].draw="participant",i[o-3].type="addParticipant",i[o-3].description=r.parseMessage(i[o-1]),this.$=i[o-3];break;case 49:i[o-1].draw="participant",i[o-1].type="addParticipant",this.$=i[o-1];break;case 50:i[o-3].draw="actor",i[o-3].type="addParticipant",i[o-3].description=r.parseMessage(i[o-1]),this.$=i[o-3];break;case 51:i[o-1].draw="actor",i[o-1].type="addParticipant",this.$=i[o-1];break;case 52:i[o-1].type="destroyParticipant",this.$=i[o-1];break;case 53:this.$=[i[o-1],{type:"addNote",placement:i[o-2],actor:i[o-1].actor,text:i[o]}];break;case 54:i[o-2]=[].concat(i[o-1],i[o-1]).slice(0,2),i[o-2][0]=i[o-2][0].actor,i[o-2][1]=i[o-2][1].actor,this.$=[i[o-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:i[o-2].slice(0,2),text:i[o]}];break;case 55:this.$=[i[o-1],{type:"addLinks",actor:i[o-1].actor,text:i[o]}];break;case 56:this.$=[i[o-1],{type:"addALink",actor:i[o-1].actor,text:i[o]}];break;case 57:this.$=[i[o-1],{type:"addProperties",actor:i[o-1].actor,text:i[o]}];break;case 58:this.$=[i[o-1],{type:"addDetails",actor:i[o-1].actor,text:i[o]}];break;case 61:this.$=[i[o-2],i[o]];break;case 63:this.$=r.PLACEMENT.LEFTOF;break;case 64:this.$=r.PLACEMENT.RIGHTOF;break;case 65:this.$=[i[o-4],i[o-1],{type:"addMessage",from:i[o-4].actor,to:i[o-1].actor,signalType:i[o-3],msg:i[o],activate:!0},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:i[o-1]}];break;case 66:this.$=[i[o-4],i[o-1],{type:"addMessage",from:i[o-4].actor,to:i[o-1].actor,signalType:i[o-3],msg:i[o]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:i[o-4]}];break;case 67:this.$=[i[o-3],i[o-1],{type:"addMessage",from:i[o-3].actor,to:i[o-1].actor,signalType:i[o-2],msg:i[o]}];break;case 68:this.$={type:"addParticipant",actor:i[o]};break;case 69:this.$=r.LINETYPE.SOLID_OPEN;break;case 70:this.$=r.LINETYPE.DOTTED_OPEN;break;case 71:this.$=r.LINETYPE.SOLID;break;case 72:this.$=r.LINETYPE.DOTTED;break;case 73:this.$=r.LINETYPE.SOLID_CROSS;break;case 74:this.$=r.LINETYPE.DOTTED_CROSS;break;case 75:this.$=r.LINETYPE.SOLID_POINT;break;case 76:this.$=r.LINETYPE.DOTTED_POINT;break;case 77:this.$=r.parseMessage(i[o].trim().substring(1))}},table:[{3:1,4:e,5:a,6:r},{1:[3]},{3:5,4:e,5:a,6:r},{3:6,4:e,5:a,6:r},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],s,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:i,5:n,8:8,9:10,12:12,13:o,14:c,17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:v,50:_,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},t(D,[2,5]),{9:47,12:12,13:o,14:c,17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:v,50:_,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},t(D,[2,7]),t(D,[2,8]),t(D,[2,14]),{12:48,50:_,52:L,53:k},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:S},{22:55,70:S},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(D,[2,29]),t(D,[2,30]),{32:[1,61]},{34:[1,62]},t(D,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:S},{22:72,70:S},{22:73,70:S},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:S},{22:88,70:S},{22:89,70:S},{22:90,70:S},t([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),t(D,[2,6]),t(D,[2,15]),t(R,[2,9],{10:91}),t(D,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},t(D,[2,21]),{5:[1,95]},{5:[1,96]},t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,28]),t(D,[2,31]),t(D,[2,32]),t(C,s,{7:97}),t(C,s,{7:98}),t(C,s,{7:99}),t($,s,{40:100,7:101}),t(Y,s,{42:102,7:103}),t(Y,s,{7:103,42:104}),t(B,s,{45:105,7:106}),t(C,s,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:S},t(V,[2,69]),t(V,[2,70]),t(V,[2,71]),t(V,[2,72]),t(V,[2,73]),t(V,[2,74]),t(V,[2,75]),t(V,[2,76]),{22:116,70:S},{22:118,58:117,70:S},{70:[2,63]},{70:[2,64]},{56:119,79:F},{56:121,79:F},{56:122,79:F},{56:123,79:F},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:_,52:L,53:k},{5:[1,129]},t(D,[2,19]),t(D,[2,20]),t(D,[2,22]),t(D,[2,23]),{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,130],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:v,50:_,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,131],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:v,50:_,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,132],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:v,50:_,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{16:[1,133]},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[2,46],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:v,49:[1,134],50:_,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{16:[1,135]},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[2,44],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:v,48:[1,136],50:_,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{16:[1,137]},{16:[1,138]},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[2,42],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:v,47:[1,139],50:_,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,140],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:v,50:_,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{15:[1,141]},t(D,[2,49]),{15:[1,142]},t(D,[2,51]),t(D,[2,52]),{22:143,70:S},{22:144,70:S},{56:145,79:F},{56:146,79:F},{56:147,79:F},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(D,[2,16]),t(R,[2,10]),{12:149,50:_,52:L,53:k},t(R,[2,12]),t(R,[2,13]),t(D,[2,18]),t(D,[2,34]),t(D,[2,35]),t(D,[2,36]),t(D,[2,37]),{15:[1,150]},t(D,[2,38]),{15:[1,151]},t(D,[2,39]),t(D,[2,40]),{15:[1,152]},t(D,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:F},{56:156,79:F},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:S},t(R,[2,11]),t($,s,{7:101,40:158}),t(Y,s,{7:103,42:159}),t(B,s,{7:106,45:160}),t(D,[2,48]),t(D,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},parseError:function(t,e){if(!e.recoverable){var a=new Error(t);throw a.hash=e,a}this.trace(t)},parse:function(t){var e=this,a=[0],r=[],s=[null],i=[],n=this.table,o="",c=0,l=0,d=i.slice.call(arguments,1),h=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);h.setInput(t,p.yy),p.yy.lexer=h,p.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var u=h.yylloc;i.push(u);var x=h.options&&h.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,m,b,f,T,E,w,P,v,_={};;){if(m=a[a.length-1],this.defaultActions[m]?b=this.defaultActions[m]:(null==y&&(v=void 0,"number"!=typeof(v=r.pop()||h.lex()||1)&&(v instanceof Array&&(v=(r=v).pop()),v=e.symbols_[v]||v),y=v),b=n[m]&&n[m][y]),void 0===b||!b.length||!b[0]){var L="";for(T in P=[],n[m])this.terminals_[T]&&T>2&&P.push("'"+this.terminals_[T]+"'");L=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+P.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==y?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(L,{text:h.match,token:this.terminals_[y]||y,line:h.yylineno,loc:u,expected:P})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+y);switch(b[0]){case 1:a.push(y),s.push(h.yytext),i.push(h.yylloc),a.push(b[1]),y=null,l=h.yyleng,o=h.yytext,c=h.yylineno,u=h.yylloc;break;case 2:if(E=this.productions_[b[1]][1],_.$=s[s.length-E],_._$={first_line:i[i.length-(E||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(E||1)].first_column,last_column:i[i.length-1].last_column},x&&(_._$.range=[i[i.length-(E||1)].range[0],i[i.length-1].range[1]]),void 0!==(f=this.performAction.apply(_,[o,l,c,p.yy,b[1],s,i].concat(d))))return f;E&&(a=a.slice(0,-1*E*2),s=s.slice(0,-1*E),i=i.slice(0,-1*E)),a.push(this.productions_[b[1]][0]),s.push(_.$),i.push(_._$),w=n[a[a.length-2]][a[a.length-1]],a.push(w);break;case 3:return!0}}return!0}},W={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,a=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),a.length-1&&(this.yylineno-=a.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:a?(a.length===r.length?this.yylloc.first_column:0)+r[r.length-a.length].length-a[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var a,r,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],a=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a)return a;if(this._backtrack){for(var i in s)this[i]=s[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,a,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),i=0;i<s.length;i++)if((a=this._input.match(this.rules[s[i]]))&&(!e||a[0].length>e[0].length)){if(e=a,r=i,this.options.backtrack_lexer){if(!1!==(t=this.test_match(a,s[i])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,a,r){switch(a){case 0:case 51:case 64:return 5;case 1:case 2:case 3:case 4:case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;case 8:return this.begin("ID"),50;case 9:return this.begin("ID"),52;case 10:return 13;case 11:return this.begin("ID"),53;case 12:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),70;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),36;case 16:return this.begin("LINE"),37;case 17:return this.begin("LINE"),38;case 18:return this.begin("LINE"),39;case 19:return this.begin("LINE"),49;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),48;case 23:return this.begin("LINE"),44;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),46;case 26:return this.popState(),15;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;case 37:return this.begin("ID"),23;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;case 41:return this.popState(),"acc_title_value";case 42:return this.begin("acc_descr"),33;case 43:return this.popState(),"acc_descr_value";case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 52:return e.yytext=e.yytext.trim(),70;case 53:return 73;case 54:return 74;case 55:return 71;case 56:return 72;case 57:return 75;case 58:return 76;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 68;case 63:return 69;case 65:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],inclusive:!0}}};function z(){this.yy={}}return q.lexer=W,z.prototype=q,q.Parser=z,new z}());o.parser=o;const c=o;const l=new class{constructor(t){this.init=t,this.records=this.init()}reset(){this.records=this.init()}}((()=>({prevActor:void 0,actors:{},createdActors:{},destroyedActors:{},boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}))),d=function(t,e,a,r){let s=l.records.currentBox;const i=l.records.actors[t];if(i){if(l.records.currentBox&&i.box&&l.records.currentBox!==i.box)throw new Error("A same participant should only be defined in one Box: "+i.name+" can't be in '"+i.box.name+"' and in '"+l.records.currentBox.name+"' at the same time.");if(s=i.box?i.box:l.records.currentBox,i.box=s,i&&e===i.name&&null==a)return}null!=a&&null!=a.text||(a={text:e,wrap:null,type:r}),null!=r&&null!=a.text||(a={text:e,wrap:null,type:r}),l.records.actors[t]={box:s,name:e,description:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,prevActor:l.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:r||"participant"},l.records.prevActor&&l.records.actors[l.records.prevActor]&&(l.records.actors[l.records.prevActor].nextActor=t),l.records.currentBox&&l.records.currentBox.actorKeys.push(t),l.records.prevActor=t},h=function(t,e,a={text:void 0,wrap:void 0},r,s=!1){if(r===u.ACTIVE_END){if((t=>{let e,a=0;for(e=0;e<l.records.messages.length;e++)l.records.messages[e].type===u.ACTIVE_START&&l.records.messages[e].from.actor===t&&a++,l.records.messages[e].type===u.ACTIVE_END&&l.records.messages[e].from.actor===t&&a--;return a})(t.actor)<1){let e=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw e.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},e}}return l.records.messages.push({from:t,to:e,message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,type:r,activate:s}),!0},p=function(t){return l.records.actors[t]},g=()=>void 0!==l.records.wrapEnabled?l.records.wrapEnabled:(0,r.c)().sequence.wrap,u={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32},x=function(t,e,a){const r={actor:t,placement:e,message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap},s=[].concat(t,t);l.records.notes.push(r),l.records.messages.push({from:s[0],to:s[1],message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,type:u.NOTE,placement:e})},y=function(t,e){const a=p(t);try{let t=(0,r.d)(e.text,(0,r.c)());t=t.replace(/&/g,"&"),t=t.replace(/=/g,"=");m(a,JSON.parse(t))}catch(s){r.l.error("error while parsing actor link text",s)}};function m(t,e){if(null==t.links)t.links=e;else for(let a in e)t.links[a]=e[a]}const b=function(t,e){const a=p(t);try{let t=(0,r.d)(e.text,(0,r.c)());f(a,JSON.parse(t))}catch(s){r.l.error("error while parsing actor properties text",s)}};function f(t,e){if(null==t.properties)t.properties=e;else for(let a in e)t.properties[a]=e[a]}const T=function(t,e){const a=p(t),s=document.getElementById(e.text);try{const t=s.innerHTML,e=JSON.parse(t);e.properties&&f(a,e.properties),e.links&&m(a,e.links)}catch(i){r.l.error("error while parsing actor details text",i)}},E=function(t){if(Array.isArray(t))t.forEach((function(t){E(t)}));else switch(t.type){case"sequenceIndex":l.records.messages.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":d(t.actor,t.actor,t.description,t.draw);break;case"createParticipant":if(l.records.actors[t.actor])throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");l.records.lastCreated=t.actor,d(t.actor,t.actor,t.description,t.draw),l.records.createdActors[t.actor]=l.records.messages.length;break;case"destroyParticipant":l.records.lastDestroyed=t.actor,l.records.destroyedActors[t.actor]=l.records.messages.length;break;case"activeStart":case"activeEnd":h(t.actor,void 0,void 0,t.signalType);break;case"addNote":x(t.actor,t.placement,t.text);break;case"addLinks":y(t.actor,t.text);break;case"addALink":!function(t,e){const a=p(t);try{const t={};let o=(0,r.d)(e.text,(0,r.c)());var s=o.indexOf("@");o=o.replace(/&/g,"&"),o=o.replace(/=/g,"=");var i=o.slice(0,s-1).trim(),n=o.slice(s+1).trim();t[i]=n,m(a,t)}catch(o){r.l.error("error while parsing actor link text",o)}}(t.actor,t.text);break;case"addProperties":b(t.actor,t.text);break;case"addDetails":T(t.actor,t.text);break;case"addMessage":if(l.records.lastCreated){if(t.to!==l.records.lastCreated)throw new Error("The created participant "+l.records.lastCreated+" does not have an associated creating message after its declaration. Please check the sequence diagram.");l.records.lastCreated=void 0}else if(l.records.lastDestroyed){if(t.to!==l.records.lastDestroyed&&t.from!==l.records.lastDestroyed)throw new Error("The destroyed participant "+l.records.lastDestroyed+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");l.records.lastDestroyed=void 0}h(t.from,t.to,t.msg,t.signalType,t.activate);break;case"boxStart":e=t.boxData,l.records.boxes.push({name:e.text,wrap:void 0===e.wrap&&g()||!!e.wrap,fill:e.color,actorKeys:[]}),l.records.currentBox=l.records.boxes.slice(-1)[0];break;case"boxEnd":l.records.currentBox=void 0;break;case"loopStart":h(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":case"rectEnd":case"optEnd":case"altEnd":case"parEnd":case"criticalEnd":case"breakEnd":h(void 0,void 0,void 0,t.signalType);break;case"rectStart":h(void 0,void 0,t.color,t.signalType);break;case"optStart":h(void 0,void 0,t.optText,t.signalType);break;case"altStart":case"else":h(void 0,void 0,t.altText,t.signalType);break;case"setAccTitle":(0,r.s)(t.text);break;case"parStart":case"and":h(void 0,void 0,t.parText,t.signalType);break;case"criticalStart":h(void 0,void 0,t.criticalText,t.signalType);break;case"option":h(void 0,void 0,t.optionText,t.signalType);break;case"breakStart":h(void 0,void 0,t.breakText,t.signalType)}var e},w={addActor:d,addMessage:function(t,e,a,r){l.records.messages.push({from:t,to:e,message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,answer:r})},addSignal:h,addLinks:y,addDetails:T,addProperties:b,autoWrap:g,setWrap:function(t){l.records.wrapEnabled=t},enableSequenceNumbers:function(){l.records.sequenceNumbersEnabled=!0},disableSequenceNumbers:function(){l.records.sequenceNumbersEnabled=!1},showSequenceNumbers:()=>l.records.sequenceNumbersEnabled,getMessages:function(){return l.records.messages},getActors:function(){return l.records.actors},getCreatedActors:function(){return l.records.createdActors},getDestroyedActors:function(){return l.records.destroyedActors},getActor:p,getActorKeys:function(){return Object.keys(l.records.actors)},getActorProperty:function(t,e){if(void 0!==t&&void 0!==t.properties)return t.properties[e]},getAccTitle:r.g,getBoxes:function(){return l.records.boxes},getDiagramTitle:r.t,setDiagramTitle:r.q,getConfig:()=>(0,r.c)().sequence,clear:function(){l.reset(),(0,r.v)()},parseMessage:function(t){const e=t.trim(),a={text:e.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^:?wrap:/)||null===e.match(/^:?nowrap:/)&&void 0};return r.l.debug("parseMessage:",a),a},parseBoxData:function(t){const e=t.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let a=null!=e&&e[1]?e[1].trim():"transparent",s=null!=e&&e[2]?e[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",a)||(a="transparent",s=t.trim());else{const e=(new Option).style;e.color=a,e.color!==a&&(a="transparent",s=t.trim())}return{color:a,text:void 0!==s?(0,r.d)(s.replace(/^:?(?:no)?wrap:/,""),(0,r.c)()):void 0,wrap:void 0!==s?null!==s.match(/^:?wrap:/)||null===s.match(/^:?nowrap:/)&&void 0:void 0}},LINETYPE:u,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:x,setAccTitle:r.s,apply:E,setAccDescription:r.b,getAccDescription:r.a,hasAtLeastOneBox:function(){return l.records.boxes.length>0},hasAtLeastOneBoxWithTitle:function(){return l.records.boxes.some((t=>t.name))}},P=t=>`.actor {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n\n text.actor > tspan {\n fill: ${t.actorTextColor};\n stroke: none;\n }\n\n .actor-line {\n stroke: ${t.actorLineColor};\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ${t.signalColor};\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ${t.signalColor};\n }\n\n #arrowhead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .sequenceNumber {\n fill: ${t.sequenceNumberColor};\n }\n\n #sequencenumber {\n fill: ${t.signalColor};\n }\n\n #crosshead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .messageText {\n fill: ${t.signalTextColor};\n stroke: none;\n }\n\n .labelBox {\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBkgColor};\n }\n\n .labelText, .labelText > tspan {\n fill: ${t.labelTextColor};\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ${t.loopTextColor};\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBorderColor};\n }\n\n .note {\n //stroke: #decc93;\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n }\n\n .noteText, .noteText > tspan {\n fill: ${t.noteTextColor};\n stroke: none;\n }\n\n .activation0 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation1 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation2 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .actorPopupMenu {\n position: absolute;\n }\n\n .actorPopupMenuPanel {\n position: absolute;\n fill: ${t.actorBkg};\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));\n}\n .actor-man line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n .actor-man circle, line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n stroke-width: 2px;\n }\n`,v="actor-top",_="actor-bottom",L=function(t,e){return(0,i.d)(t,e)},k=async function(t,e,a=null){let s=t.append("foreignObject");const i=await(0,r.r)(e.text,(0,r.F)()),n=s.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(s.attr("height",Math.round(n.height)).attr("width",Math.round(n.width)),"noteText"===e.class){const a=t.node().firstChild;a.setAttribute("height",n.height+2*e.textMargin);const r=a.getBBox();s.attr("x",Math.round(r.x+r.width/2-n.width/2)).attr("y",Math.round(r.y+r.height/2-n.height/2))}else if(a){let{startx:t,stopx:r,starty:i}=a;if(t>r){const e=t;t=r,r=e}s.attr("x",Math.round(t+Math.abs(t-r)/2-n.width/2)),"loopText"===e.class?s.attr("y",Math.round(i)):s.attr("y",Math.round(i-n.height))}return[s]},I=function(t,e){let a=0,s=0;const i=e.text.split(r.e.lineBreakRegex),[n,o]=(0,r.D)(e.fontSize);let c=[],l=0,d=()=>e.y;if(void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0)switch(e.valign){case"top":case"start":d=()=>Math.round(e.y+e.textMargin);break;case"middle":case"center":d=()=>Math.round(e.y+(a+s+e.textMargin)/2);break;case"bottom":case"end":d=()=>Math.round(e.y+(a+s+2*e.textMargin)-e.textMargin)}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle"}for(let[h,p]of i.entries()){void 0!==e.textMargin&&0===e.textMargin&&void 0!==n&&(l=h*n);const i=t.append("text");i.attr("x",e.x),i.attr("y",d()),void 0!==e.anchor&&i.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),void 0!==e.fontFamily&&i.style("font-family",e.fontFamily),void 0!==o&&i.style("font-size",o),void 0!==e.fontWeight&&i.style("font-weight",e.fontWeight),void 0!==e.fill&&i.attr("fill",e.fill),void 0!==e.class&&i.attr("class",e.class),void 0!==e.dy?i.attr("dy",e.dy):0!==l&&i.attr("dy",l);const g=p||r.Z;if(e.tspan){const t=i.append("tspan");t.attr("x",e.x),void 0!==e.fill&&t.attr("fill",e.fill),t.text(g)}else i.text(g);void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0&&(s+=(i._groups||i)[0][0].getBBox().height,a=s),c.push(i)}return c},M=function(t,e){const a=t.append("polygon");var r,s,i,n,o;return a.attr("points",(r=e.x,s=e.y,i=e.width,n=e.height,r+","+s+" "+(r+i)+","+s+" "+(r+i)+","+(s+n-(o=7))+" "+(r+i-1.2*o)+","+(s+n)+" "+r+","+(s+n))),a.attr("class","labelBox"),e.y=e.y+e.height/2,I(t,e),a};let N=-1;const A=(t,e,a,r)=>{t.select&&a.forEach((a=>{const s=e[a],i=t.select("#actor"+s.actorCnt);!r.mirrorActors&&s.stopy?i.attr("y2",s.stopy+s.height/2):r.mirrorActors&&i.attr("y2",s.stopy)}))},O=function(t,e){(0,i.a)(t,e)},S=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},D=function(){function t(t,e,a,r,s,n,o){i(e.append("text").attr("x",a+s/2).attr("y",r+n/2+5).style("text-anchor","middle").text(t),o)}function e(t,e,a,s,n,o,c,l){const{actorFontSize:d,actorFontFamily:h,actorFontWeight:p}=l,[g,u]=(0,r.D)(d),x=t.split(r.e.lineBreakRegex);for(let r=0;r<x.length;r++){const t=r*g-g*(x.length-1)/2,l=e.append("text").attr("x",a+n/2).attr("y",s).style("text-anchor","middle").style("font-size",u).style("font-weight",p).style("font-family",h);l.append("tspan").attr("x",a+n/2).attr("dy",t).text(x[r]),l.attr("y",s+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(l,c)}}function a(t,a,r,s,n,o,c,l){const d=a.append("switch"),h=d.append("foreignObject").attr("x",r).attr("y",s).attr("width",n).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,d,r,s,n,o,c,l),i(h,c)}async function s(t,a,s,n,o,c,l,d){const h=await(0,r.H)(t,(0,r.F)()),p=a.append("switch"),g=p.append("foreignObject").attr("x",s+o/2-h.width/2).attr("y",n+c/2-h.height/2).attr("width",h.width).attr("height",h.height).append("xhtml:div").style("height","100%").style("width","100%");g.append("div").style("text-align","center").style("vertical-align","middle").html(await(0,r.r)(t,(0,r.F)())),e(t,p,s,n,o,c,l,d),i(g,l)}function i(t,e){for(const a in e)e.hasOwnProperty(a)&&t.attr(a,e[a])}return function(r,i=!1){return i?s:"fo"===r.textPlacement?a:"old"===r.textPlacement?t:e}}(),R=function(){function t(t,e,a,r,i,n,o){s(e.append("text").attr("x",a).attr("y",r).style("text-anchor","start").text(t),o)}function e(t,e,a,i,n,o,c,l){const{actorFontSize:d,actorFontFamily:h,actorFontWeight:p}=l,g=t.split(r.e.lineBreakRegex);for(let r=0;r<g.length;r++){const t=r*d-d*(g.length-1)/2,n=e.append("text").attr("x",a).attr("y",i).style("text-anchor","start").style("font-size",d).style("font-weight",p).style("font-family",h);n.append("tspan").attr("x",a).attr("dy",t).text(g[r]),n.attr("y",i+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),s(n,c)}}function a(t,a,r,i,n,o,c,l){const d=a.append("switch"),h=d.append("foreignObject").attr("x",r).attr("y",i).attr("width",n).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,d,r,i,0,o,c,l),s(h,c)}function s(t,e){for(const a in e)e.hasOwnProperty(a)&&t.attr(a,e[a])}return function(r){return"fo"===r.textPlacement?a:"old"===r.textPlacement?t:e}}(),C={drawRect:L,drawText:I,drawLabel:M,drawActor:async function(t,e,a,s){switch(e.type){case"actor":return await async function(t,e,a,s){const n=s?e.stopy:e.starty,o=e.x+e.width/2,c=n+80;t.lower(),s||(N++,t.append("line").attr("id","actor"+N).attr("x1",o).attr("y1",c).attr("x2",o).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),e.actorCnt=N);const l=t.append("g");let d="actor-man";d+=s?` ${_}`:` ${v}`,l.attr("class",d),l.attr("name",e.name);const h=(0,i.g)();h.x=e.x,h.y=n,h.fill="#eaeaea",h.width=e.width,h.height=e.height,h.class="actor",h.rx=3,h.ry=3,l.append("line").attr("id","actor-man-torso"+N).attr("x1",o).attr("y1",n+25).attr("x2",o).attr("y2",n+45),l.append("line").attr("id","actor-man-arms"+N).attr("x1",o-18).attr("y1",n+33).attr("x2",o+18).attr("y2",n+33),l.append("line").attr("x1",o-18).attr("y1",n+60).attr("x2",o).attr("y2",n+45),l.append("line").attr("x1",o).attr("y1",n+45).attr("x2",o+18-2).attr("y2",n+60);const p=l.append("circle");p.attr("cx",e.x+e.width/2),p.attr("cy",n+10),p.attr("r",15),p.attr("width",e.width),p.attr("height",e.height);const g=l.node().getBBox();return e.height=g.height,await D(a,(0,r.G)(e.description))(e.description,l,h.x,h.y+35,h.width,h.height,{class:"actor"},a),e.height}(t,e,a,s);case"participant":return await async function(t,e,a,s){const n=s?e.stopy:e.starty,o=e.x+e.width/2,c=n+5,l=t.append("g").lower();var d,h=l;s||(N++,Object.keys(e.links||{}).length&&!a.forceMenus&&h.attr("onclick",(d=`actor${N}_popup`,"var pu = document.getElementById('"+d+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }")).attr("cursor","pointer"),h.append("line").attr("id","actor"+N).attr("x1",o).attr("y1",c).attr("x2",o).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),h=l.append("g"),e.actorCnt=N,null!=e.links&&h.attr("id","root-"+N));const p=(0,i.g)();var g="actor";null!=e.properties&&e.properties.class?g=e.properties.class:p.fill="#eaeaea",g+=s?` ${_}`:` ${v}`,p.x=e.x,p.y=n,p.width=e.width,p.height=e.height,p.class=g,p.rx=3,p.ry=3,p.name=e.name;const u=L(h,p);if(e.rectData=p,null!=e.properties&&e.properties.icon){const t=e.properties.icon.trim();"@"===t.charAt(0)?(0,i.b)(h,p.x+p.width-20,p.y+10,t.substr(1)):(0,i.c)(h,p.x+p.width-20,p.y+10,t)}await D(a,(0,r.G)(e.description))(e.description,h,p.x,p.y,p.width,p.height,{class:"actor"},a);let x=e.height;if(u.node){const t=u.node().getBBox();e.height=t.height,x=t.height}return x}(t,e,a,s)}},drawBox:async function(t,e,a){const r=t.append("g");O(r,e),e.name&&await D(a)(e.name,r,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},a),r.lower()},drawPopup:function(t,e,a,r,s){if(void 0===e.links||null===e.links||0===Object.keys(e.links).length)return{height:0,width:0};const i=e.links,o=e.actorCnt,c=e.rectData;var l="none";s&&(l="block !important");const d=t.append("g");d.attr("id","actor"+o+"_popup"),d.attr("class","actorPopupMenu"),d.attr("display",l);var h="";void 0!==c.class&&(h=" "+c.class);let p=c.width>a?c.width:a;const g=d.append("rect");if(g.attr("class","actorPopupMenuPanel"+h),g.attr("x",c.x),g.attr("y",c.height),g.attr("fill",c.fill),g.attr("stroke",c.stroke),g.attr("width",p),g.attr("height",c.height),g.attr("rx",c.rx),g.attr("ry",c.ry),null!=i){var u=20;for(let t in i){var x=d.append("a"),y=(0,n.Jf)(i[t]);x.attr("xlink:href",y),x.attr("target","_blank"),R(r)(t,x,c.x+10,c.height+u,p,20,{class:"actor"},r),u+=30}}return g.attr("height",u),{height:c.height+u,width:p}},anchorElement:function(t){return t.append("g")},drawActivation:function(t,e,a,r,s){const n=(0,i.g)(),o=e.anchored;n.x=e.startx,n.y=e.starty,n.class="activation"+s%3,n.width=e.stopx-e.startx,n.height=a-e.starty,L(o,n)},drawLoop:async function(t,e,a,s){const{boxMargin:n,boxTextMargin:o,labelBoxHeight:c,labelBoxWidth:l,messageFontFamily:d,messageFontSize:h,messageFontWeight:p}=s,g=t.append("g"),u=function(t,e,a,r){return g.append("line").attr("x1",t).attr("y1",e).attr("x2",a).attr("y2",r).attr("class","loopLine")};u(e.startx,e.starty,e.stopx,e.starty),u(e.stopx,e.starty,e.stopx,e.stopy),u(e.startx,e.stopy,e.stopx,e.stopy),u(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach((function(t){u(e.startx,t.y,e.stopx,t.y).style("stroke-dasharray","3, 3")}));let x=(0,i.e)();x.text=a,x.x=e.startx,x.y=e.starty,x.fontFamily=d,x.fontSize=h,x.fontWeight=p,x.anchor="middle",x.valign="middle",x.tspan=!1,x.width=l||50,x.height=c||20,x.textMargin=o,x.class="labelText",M(g,x),x=S(),x.text=e.title,x.x=e.startx+l/2+(e.stopx-e.startx)/2,x.y=e.starty+n+o,x.anchor="middle",x.valign="middle",x.textMargin=o,x.class="loopText",x.fontFamily=d,x.fontSize=h,x.fontWeight=p,x.wrap=!0;let y=(0,r.G)(x.text)?await k(g,x,e):I(g,x);if(void 0!==e.sectionTitles)for(const[i,m]of Object.entries(e.sectionTitles))if(m.message){x.text=m.message,x.x=e.startx+(e.stopx-e.startx)/2,x.y=e.sections[i].y+n+o,x.class="loopText",x.anchor="middle",x.valign="middle",x.tspan=!1,x.fontFamily=d,x.fontSize=h,x.fontWeight=p,x.wrap=e.wrap,(0,r.G)(x.text)?(e.starty=e.sections[i].y,await k(g,x,e)):I(g,x);let t=Math.round(y.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));e.sections[i].height+=t-(n+o)}return e.height=Math.round(e.stopy-e.starty),g},drawBackgroundRect:O,insertArrowHead:function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},insertArrowFilledHead:function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},insertSequenceNumber:function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},insertArrowCrossHead:function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},insertDatabaseIcon:function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},insertComputerIcon:function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},insertClockIcon:function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},getTextObj:S,getNoteRect:function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},fixLifeLineHeights:A,sanitizeUrl:n.Jf};let $={};const Y={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((t=>t.height||0)))+(0===this.loops.length?0:this.loops.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.messages.length?0:this.messages.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.notes.length?0:this.notes.map((t=>t.height||0)).reduce(((t,e)=>t+e)))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(t){this.boxes.push(t)},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,j((0,r.c)())},updateVal:function(t,e,a,r){void 0===t[e]?t[e]=a:t[e]=r(a,t[e])},updateBounds:function(t,e,a,r){const s=this;let i=0;function n(n){return function(o){i++;const c=s.sequenceItems.length-i+1;s.updateVal(o,"starty",e-c*$.boxMargin,Math.min),s.updateVal(o,"stopy",r+c*$.boxMargin,Math.max),s.updateVal(Y.data,"startx",t-c*$.boxMargin,Math.min),s.updateVal(Y.data,"stopx",a+c*$.boxMargin,Math.max),"activation"!==n&&(s.updateVal(o,"startx",t-c*$.boxMargin,Math.min),s.updateVal(o,"stopx",a+c*$.boxMargin,Math.max),s.updateVal(Y.data,"starty",e-c*$.boxMargin,Math.min),s.updateVal(Y.data,"stopy",r+c*$.boxMargin,Math.max))}}this.sequenceItems.forEach(n()),this.activations.forEach(n("activation"))},insert:function(t,e,a,s){const i=r.e.getMin(t,a),n=r.e.getMax(t,a),o=r.e.getMin(e,s),c=r.e.getMax(e,s);this.updateVal(Y.data,"startx",i,Math.min),this.updateVal(Y.data,"starty",o,Math.min),this.updateVal(Y.data,"stopx",n,Math.max),this.updateVal(Y.data,"stopy",c,Math.max),this.updateBounds(i,o,n,c)},newActivation:function(t,e,a){const r=a[t.from.actor],s=G(t.from.actor).length||0,i=r.x+r.width/2+(s-1)*$.activationWidth/2;this.activations.push({startx:i,starty:this.verticalPos+2,stopx:i+$.activationWidth,stopy:void 0,actor:t.from.actor,anchored:C.anchorElement(e)})},endActivation:function(t){const e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},isLoopOverlap:function(){return!!this.sequenceItems.length&&this.sequenceItems[this.sequenceItems.length-1].overlap},addSectionToLoop:function(t){const e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:Y.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},saveVerticalPos:function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},resetVerticalPos:function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=r.e.getMax(this.data.stopy,this.verticalPos)},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},B=async function(t,e){Y.bumpVerticalPos($.boxMargin),e.height=$.boxMargin,e.starty=Y.getVerticalPos();const a=(0,i.g)();a.x=e.startx,a.y=e.starty,a.width=e.width||$.width,a.class="note";const s=t.append("g"),n=C.drawRect(s,a),o=(0,i.e)();o.x=e.startx,o.y=e.starty,o.width=a.width,o.dy="1em",o.text=e.message,o.class="noteText",o.fontFamily=$.noteFontFamily,o.fontSize=$.noteFontSize,o.fontWeight=$.noteFontWeight,o.anchor=$.noteAlign,o.textMargin=$.noteMargin,o.valign="center";const c=(0,r.G)(o.text)?await k(s,o):I(s,o),l=Math.round(c.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));n.attr("height",l+2*$.noteMargin),e.height+=l+2*$.noteMargin,Y.bumpVerticalPos(l+2*$.noteMargin),e.stopy=e.starty+l+2*$.noteMargin,e.stopx=e.startx+a.width,Y.insert(e.startx,e.starty,e.stopx,e.stopy),Y.models.addNote(e)},V=t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),F=t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),q=t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight});async function W(t,e){Y.bumpVerticalPos(10);const{startx:a,stopx:s,message:i}=e,n=r.e.splitBreaks(i).length,o=(0,r.G)(i),c=o?await(0,r.H)(i,(0,r.c)()):r.u.calculateTextDimensions(i,V($));if(!o){const t=c.height/n;e.height+=t,Y.bumpVerticalPos(t)}let l,d=c.height-10;const h=c.width;if(a===s){l=Y.getVerticalPos()+d,$.rightAngles||(d+=$.boxMargin,l=Y.getVerticalPos()+d),d+=30;const t=r.e.getMax(h/2,$.width/2);Y.insert(a-t,Y.getVerticalPos()-10+d,s+t,Y.getVerticalPos()+30+d)}else d+=$.boxMargin,l=Y.getVerticalPos()+d,Y.insert(a,l-10,s,l);return Y.bumpVerticalPos(d),e.height+=d,e.stopy=e.starty+e.height,Y.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),l}const z=async function(t,e,a,s){const{startx:n,stopx:o,starty:c,message:l,type:d,sequenceIndex:h,sequenceVisible:p}=e,g=r.u.calculateTextDimensions(l,V($)),u=(0,i.e)();u.x=n,u.y=c+10,u.width=o-n,u.class="messageText",u.dy="1em",u.text=l,u.fontFamily=$.messageFontFamily,u.fontSize=$.messageFontSize,u.fontWeight=$.messageFontWeight,u.anchor=$.messageAlign,u.valign="center",u.textMargin=$.wrapPadding,u.tspan=!1,(0,r.G)(u.text)?await k(t,u,{startx:n,stopx:o,starty:a}):I(t,u);const x=g.width;let y;n===o?y=$.rightAngles?t.append("path").attr("d",`M ${n},${a} H ${n+r.e.getMax($.width/2,x/2)} V ${a+25} H ${n}`):t.append("path").attr("d","M "+n+","+a+" C "+(n+60)+","+(a-10)+" "+(n+60)+","+(a+30)+" "+n+","+(a+20)):(y=t.append("line"),y.attr("x1",n),y.attr("y1",a),y.attr("x2",o),y.attr("y2",a)),d===s.db.LINETYPE.DOTTED||d===s.db.LINETYPE.DOTTED_CROSS||d===s.db.LINETYPE.DOTTED_POINT||d===s.db.LINETYPE.DOTTED_OPEN?(y.style("stroke-dasharray","3, 3"),y.attr("class","messageLine1")):y.attr("class","messageLine0");let m="";$.arrowMarkerAbsolute&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),y.attr("stroke-width",2),y.attr("stroke","none"),y.style("fill","none"),d!==s.db.LINETYPE.SOLID&&d!==s.db.LINETYPE.DOTTED||y.attr("marker-end","url("+m+"#arrowhead)"),d!==s.db.LINETYPE.SOLID_POINT&&d!==s.db.LINETYPE.DOTTED_POINT||y.attr("marker-end","url("+m+"#filled-head)"),d!==s.db.LINETYPE.SOLID_CROSS&&d!==s.db.LINETYPE.DOTTED_CROSS||y.attr("marker-end","url("+m+"#crosshead)"),(p||$.showSequenceNumbers)&&(y.attr("marker-start","url("+m+"#sequencenumber)"),t.append("text").attr("x",n).attr("y",a+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))},H=async function(t,e,a,s){if(s){let s=0;Y.bumpVerticalPos(2*$.boxMargin);for(const i of a){const a=e[i];a.stopy||(a.stopy=Y.getVerticalPos());const n=await C.drawActor(t,a,$,!0);s=r.e.getMax(s,n)}Y.bumpVerticalPos(s+$.boxMargin)}else for(const r of a){const a=e[r];await C.drawActor(t,a,$,!1)}},U=function(t,e,a,r){let s=0,i=0;for(const n of a){const a=e[n],o=Z(a),c=C.drawPopup(t,a,o,$,$.forceMenus,r);c.height>s&&(s=c.height),c.width+a.x>i&&(i=c.width+a.x)}return{maxHeight:s,maxWidth:i}},j=function(t){(0,r.f)($,t),t.fontFamily&&($.actorFontFamily=$.noteFontFamily=$.messageFontFamily=t.fontFamily),t.fontSize&&($.actorFontSize=$.noteFontSize=$.messageFontSize=t.fontSize),t.fontWeight&&($.actorFontWeight=$.noteFontWeight=$.messageFontWeight=t.fontWeight)},G=function(t){return Y.activations.filter((function(e){return e.actor===t}))},K=function(t,e){const a=e[t],s=G(t);return[s.reduce((function(t,e){return r.e.getMin(t,e.startx)}),a.x+a.width/2-1),s.reduce((function(t,e){return r.e.getMax(t,e.stopx)}),a.x+a.width/2+1)]};function X(t,e,a,s,i){Y.bumpVerticalPos(a);let n=s;if(e.id&&e.message&&t[e.id]){const a=t[e.id].width,i=V($);e.message=r.u.wrapLabel(`[${e.message}]`,a-2*$.wrapPadding,i),e.width=a,e.wrap=!0;const o=r.u.calculateTextDimensions(e.message,i),c=r.e.getMax(o.height,$.labelBoxHeight);n=s+c,r.l.debug(`${c} - ${e.message}`)}i(e),Y.bumpVerticalPos(n)}function J(t,e,a,r,s,i,n){function o(a,r){a.x<s[t.from].x?(Y.insert(e.stopx-r,e.starty,e.startx,e.stopy+a.height/2+$.noteMargin),e.stopx=e.stopx+r):(Y.insert(e.startx,e.starty,e.stopx+r,e.stopy+a.height/2+$.noteMargin),e.stopx=e.stopx-r)}if(i[t.to]==r){const e=s[t.to];o(e,"actor"==e.type?21:e.width/2+3),e.starty=a-e.height/2,Y.bumpVerticalPos(e.height/2)}else if(n[t.from]==r){const r=s[t.from];if($.mirrorActors){!function(a,r){a.x<s[t.to].x?(Y.insert(e.startx-r,e.starty,e.stopx,e.stopy+a.height/2+$.noteMargin),e.startx=e.startx+r):(Y.insert(e.stopx,e.starty,e.startx+r,e.stopy+a.height/2+$.noteMargin),e.startx=e.startx-r)}(r,"actor"==r.type?18:r.width/2)}r.stopy=a-r.height/2,Y.bumpVerticalPos(r.height/2)}else if(n[t.to]==r){const e=s[t.to];if($.mirrorActors){o(e,"actor"==e.type?21:e.width/2+3)}e.stopy=a-e.height/2,Y.bumpVerticalPos(e.height/2)}}const Z=function(t){let e=0;const a=q($);for(const s in t.links){const t=r.u.calculateTextDimensions(s,a).width+2*$.wrapPadding+2*$.boxMargin;e<t&&(e=t)}return e};const Q=async function(t,e,a){const s=e[t.from].x,i=e[t.to].x,n=t.wrap&&t.message;let o=(0,r.G)(t.message)?await(0,r.H)(t.message,(0,r.c)()):r.u.calculateTextDimensions(n?r.u.wrapLabel(t.message,$.width,F($)):t.message,F($));const c={width:n?$.width:r.e.getMax($.width,o.width+2*$.noteMargin),height:0,startx:e[t.from].x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===a.db.PLACEMENT.RIGHTOF?(c.width=n?r.e.getMax($.width,o.width):r.e.getMax(e[t.from].width/2+e[t.to].width/2,o.width+2*$.noteMargin),c.startx=s+(e[t.from].width+$.actorMargin)/2):t.placement===a.db.PLACEMENT.LEFTOF?(c.width=n?r.e.getMax($.width,o.width+2*$.noteMargin):r.e.getMax(e[t.from].width/2+e[t.to].width/2,o.width+2*$.noteMargin),c.startx=s-c.width+(e[t.from].width-$.actorMargin)/2):t.to===t.from?(o=r.u.calculateTextDimensions(n?r.u.wrapLabel(t.message,r.e.getMax($.width,e[t.from].width),F($)):t.message,F($)),c.width=n?r.e.getMax($.width,e[t.from].width):r.e.getMax(e[t.from].width,$.width,o.width+2*$.noteMargin),c.startx=s+(e[t.from].width-c.width)/2):(c.width=Math.abs(s+e[t.from].width/2-(i+e[t.to].width/2))+$.actorMargin,c.startx=s<i?s+e[t.from].width/2-$.actorMargin/2:i+e[t.to].width/2-$.actorMargin/2),n&&(c.message=r.u.wrapLabel(t.message,c.width-2*$.wrapPadding,F($))),r.l.debug(`NM:[${c.startx},${c.stopx},${c.starty},${c.stopy}:${c.width},${c.height}=${t.message}]`),c},tt=function(t,e,a){if(![a.db.LINETYPE.SOLID_OPEN,a.db.LINETYPE.DOTTED_OPEN,a.db.LINETYPE.SOLID,a.db.LINETYPE.DOTTED,a.db.LINETYPE.SOLID_CROSS,a.db.LINETYPE.DOTTED_CROSS,a.db.LINETYPE.SOLID_POINT,a.db.LINETYPE.DOTTED_POINT].includes(t.type))return{};const[s,i]=K(t.from,e),[n,o]=K(t.to,e),c=s<=n,l=c?i:s;let d=c?n:o;const h=Math.abs(n-o)>2,p=t=>c?-t:t;t.from===t.to?d=l:(t.activate&&!h&&(d+=p($.activationWidth/2-1)),[a.db.LINETYPE.SOLID_OPEN,a.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(d+=p(3)));const g=[s,i,n,o],u=Math.abs(l-d);t.wrap&&t.message&&(t.message=r.u.wrapLabel(t.message,r.e.getMax(u+2*$.wrapPadding,$.width),V($)));const x=r.u.calculateTextDimensions(t.message,V($));return{width:r.e.getMax(t.wrap?0:x.width+2*$.wrapPadding,u+2*$.wrapPadding,$.width),height:0,startx:l,stopx:d,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,g),toBounds:Math.max.apply(null,g)}},et=async function(t,e,a,s){const i={},n=[];let o,c,l;for(const d of t){switch(d.id=r.u.random({length:10}),d.type){case s.db.LINETYPE.LOOP_START:case s.db.LINETYPE.ALT_START:case s.db.LINETYPE.OPT_START:case s.db.LINETYPE.PAR_START:case s.db.LINETYPE.PAR_OVER_START:case s.db.LINETYPE.CRITICAL_START:case s.db.LINETYPE.BREAK_START:n.push({id:d.id,msg:d.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case s.db.LINETYPE.ALT_ELSE:case s.db.LINETYPE.PAR_AND:case s.db.LINETYPE.CRITICAL_OPTION:d.message&&(o=n.pop(),i[o.id]=o,i[d.id]=o,n.push(o));break;case s.db.LINETYPE.LOOP_END:case s.db.LINETYPE.ALT_END:case s.db.LINETYPE.OPT_END:case s.db.LINETYPE.PAR_END:case s.db.LINETYPE.CRITICAL_END:case s.db.LINETYPE.BREAK_END:o=n.pop(),i[o.id]=o;break;case s.db.LINETYPE.ACTIVE_START:{const t=e[d.from?d.from.actor:d.to.actor],a=G(d.from?d.from.actor:d.to.actor).length,r=t.x+t.width/2+(a-1)*$.activationWidth/2,s={startx:r,stopx:r+$.activationWidth,actor:d.from.actor,enabled:!0};Y.activations.push(s)}break;case s.db.LINETYPE.ACTIVE_END:{const t=Y.activations.map((t=>t.actor)).lastIndexOf(d.from.actor);delete Y.activations.splice(t,1)[0]}}void 0!==d.placement?(c=await Q(d,e,s),d.noteModel=c,n.forEach((t=>{o=t,o.from=r.e.getMin(o.from,c.startx),o.to=r.e.getMax(o.to,c.startx+c.width),o.width=r.e.getMax(o.width,Math.abs(o.from-o.to))-$.labelBoxWidth}))):(l=tt(d,e,s),d.msgModel=l,l.startx&&l.stopx&&n.length>0&&n.forEach((t=>{if(o=t,l.startx===l.stopx){const t=e[d.from],a=e[d.to];o.from=r.e.getMin(t.x-l.width/2,t.x-t.width/2,o.from),o.to=r.e.getMax(a.x+l.width/2,a.x+t.width/2,o.to),o.width=r.e.getMax(o.width,Math.abs(o.to-o.from))-$.labelBoxWidth}else o.from=r.e.getMin(l.startx,o.from),o.to=r.e.getMax(l.stopx,o.to),o.width=r.e.getMax(o.width,l.width)-$.labelBoxWidth})))}return Y.activations=[],r.l.debug("Loop type widths:",i),i},at={parser:c,db:w,renderer:{bounds:Y,drawActors:H,drawActorsPopup:U,setConf:j,draw:async function(t,e,a,i){const{securityLevel:n,sequence:o}=(0,r.c)();let c;$=o,"sandbox"===n&&(c=(0,s.Ltv)("#i"+e));const l="sandbox"===n?(0,s.Ltv)(c.nodes()[0].contentDocument.body):(0,s.Ltv)("body"),d="sandbox"===n?c.nodes()[0].contentDocument:document;Y.init(),r.l.debug(i.db);const h="sandbox"===n?l.select(`[id="${e}"]`):(0,s.Ltv)(`[id="${e}"]`),p=i.db.getActors(),g=i.db.getCreatedActors(),u=i.db.getDestroyedActors(),x=i.db.getBoxes();let y=i.db.getActorKeys();const m=i.db.getMessages(),b=i.db.getDiagramTitle(),f=i.db.hasAtLeastOneBox(),T=i.db.hasAtLeastOneBoxWithTitle(),E=await async function(t,e,a){const s={};for(const i of e)if(t[i.to]&&t[i.from]){const e=t[i.to];if(i.placement===a.db.PLACEMENT.LEFTOF&&!e.prevActor)continue;if(i.placement===a.db.PLACEMENT.RIGHTOF&&!e.nextActor)continue;const n=void 0!==i.placement,o=!n,c=n?F($):V($),l=i.wrap?r.u.wrapLabel(i.message,$.width-2*$.wrapPadding,c):i.message,d=((0,r.G)(l)?await(0,r.H)(i.message,(0,r.c)()):r.u.calculateTextDimensions(l,c)).width+2*$.wrapPadding;o&&i.from===e.nextActor?s[i.to]=r.e.getMax(s[i.to]||0,d):o&&i.from===e.prevActor?s[i.from]=r.e.getMax(s[i.from]||0,d):o&&i.from===i.to?(s[i.from]=r.e.getMax(s[i.from]||0,d/2),s[i.to]=r.e.getMax(s[i.to]||0,d/2)):i.placement===a.db.PLACEMENT.RIGHTOF?s[i.from]=r.e.getMax(s[i.from]||0,d):i.placement===a.db.PLACEMENT.LEFTOF?s[e.prevActor]=r.e.getMax(s[e.prevActor]||0,d):i.placement===a.db.PLACEMENT.OVER&&(e.prevActor&&(s[e.prevActor]=r.e.getMax(s[e.prevActor]||0,d/2)),e.nextActor&&(s[i.from]=r.e.getMax(s[i.from]||0,d/2)))}return r.l.debug("maxMessageWidthPerActor:",s),s}(p,m,i);if($.height=await async function(t,e,a){let s=0;for(const n of Object.keys(t)){const e=t[n];e.wrap&&(e.description=r.u.wrapLabel(e.description,$.width-2*$.wrapPadding,q($)));const a=(0,r.G)(e.description)?await(0,r.H)(e.description,(0,r.c)()):r.u.calculateTextDimensions(e.description,q($));e.width=e.wrap?$.width:r.e.getMax($.width,a.width+2*$.wrapPadding),e.height=e.wrap?r.e.getMax(a.height,$.height):$.height,s=r.e.getMax(s,e.height)}for(const n in e){const a=t[n];if(!a)continue;const s=t[a.nextActor];if(!s){const t=e[n]+$.actorMargin-a.width/2;a.margin=r.e.getMax(t,$.actorMargin);continue}const i=e[n]+$.actorMargin-a.width/2-s.width/2;a.margin=r.e.getMax(i,$.actorMargin)}let i=0;return a.forEach((e=>{const a=V($);let s=e.actorKeys.reduce(((e,a)=>e+(t[a].width+(t[a].margin||0))),0);s-=2*$.boxTextMargin,e.wrap&&(e.name=r.u.wrapLabel(e.name,s-2*$.wrapPadding,a));const n=r.u.calculateTextDimensions(e.name,a);i=r.e.getMax(n.height,i);const o=r.e.getMax(s,n.width+2*$.wrapPadding);if(e.margin=$.boxTextMargin,s<o){const t=(o-s)/2;e.margin+=t}})),a.forEach((t=>t.textMaxHeight=i)),r.e.getMax(s,$.height)}(p,E,x),C.insertComputerIcon(h),C.insertDatabaseIcon(h),C.insertClockIcon(h),f&&(Y.bumpVerticalPos($.boxMargin),T&&Y.bumpVerticalPos(x[0].textMaxHeight)),!0===$.hideUnusedParticipants){const t=new Set;m.forEach((e=>{t.add(e.from),t.add(e.to)})),y=y.filter((e=>t.has(e)))}await async function(t,e,a,s,i,n,o){let c,l=0,d=0,h=0;for(const p of s){const t=e[p],s=t.box;c&&c!=s&&(o||Y.models.addBox(c),d+=$.boxMargin+c.margin),s&&s!=c&&(o||(s.x=l+d,s.y=i),d+=s.margin),t.width=t.width||$.width,t.height=r.e.getMax(t.height||$.height,$.height),t.margin=t.margin||$.actorMargin,h=r.e.getMax(h,t.height),a[t.name]&&(d+=t.width/2),t.x=l+d,t.starty=Y.getVerticalPos(),Y.insert(t.x,i,t.x+t.width,t.height),l+=t.width+d,t.box&&(t.box.width=l+s.margin-t.box.x),d=t.margin,c=t.box,Y.models.addActor(t)}c&&!o&&Y.models.addBox(c),Y.bumpVerticalPos(h)}(0,p,g,y,0,0,!1);const w=await et(m,p,E,i);function P(t,e){const a=Y.endActivation(t);a.starty+18>e&&(a.starty=e-6,e+=12),C.drawActivation(h,a,e,$,G(t.from.actor).length),Y.insert(a.startx,e-10,a.stopx,e)}C.insertArrowHead(h),C.insertArrowCrossHead(h),C.insertArrowFilledHead(h),C.insertSequenceNumber(h);let v=1,_=1;const L=[],k=[];let I=0;for(const s of m){let t,e,a;switch(s.type){case i.db.LINETYPE.NOTE:Y.resetVerticalPos(),e=s.noteModel,await B(h,e);break;case i.db.LINETYPE.ACTIVE_START:Y.newActivation(s,h,p);break;case i.db.LINETYPE.ACTIVE_END:P(s,Y.getVerticalPos());break;case i.db.LINETYPE.LOOP_START:X(w,s,$.boxMargin,$.boxMargin+$.boxTextMargin,(t=>Y.newLoop(t)));break;case i.db.LINETYPE.LOOP_END:t=Y.endLoop(),await C.drawLoop(h,t,"loop",$),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos()),Y.models.addLoop(t);break;case i.db.LINETYPE.RECT_START:X(w,s,$.boxMargin,$.boxMargin,(t=>Y.newLoop(void 0,t.message)));break;case i.db.LINETYPE.RECT_END:t=Y.endLoop(),k.push(t),Y.models.addLoop(t),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos());break;case i.db.LINETYPE.OPT_START:X(w,s,$.boxMargin,$.boxMargin+$.boxTextMargin,(t=>Y.newLoop(t)));break;case i.db.LINETYPE.OPT_END:t=Y.endLoop(),await C.drawLoop(h,t,"opt",$),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos()),Y.models.addLoop(t);break;case i.db.LINETYPE.ALT_START:X(w,s,$.boxMargin,$.boxMargin+$.boxTextMargin,(t=>Y.newLoop(t)));break;case i.db.LINETYPE.ALT_ELSE:X(w,s,$.boxMargin+$.boxTextMargin,$.boxMargin,(t=>Y.addSectionToLoop(t)));break;case i.db.LINETYPE.ALT_END:t=Y.endLoop(),await C.drawLoop(h,t,"alt",$),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos()),Y.models.addLoop(t);break;case i.db.LINETYPE.PAR_START:case i.db.LINETYPE.PAR_OVER_START:X(w,s,$.boxMargin,$.boxMargin+$.boxTextMargin,(t=>Y.newLoop(t))),Y.saveVerticalPos();break;case i.db.LINETYPE.PAR_AND:X(w,s,$.boxMargin+$.boxTextMargin,$.boxMargin,(t=>Y.addSectionToLoop(t)));break;case i.db.LINETYPE.PAR_END:t=Y.endLoop(),await C.drawLoop(h,t,"par",$),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos()),Y.models.addLoop(t);break;case i.db.LINETYPE.AUTONUMBER:v=s.message.start||v,_=s.message.step||_,s.message.visible?i.db.enableSequenceNumbers():i.db.disableSequenceNumbers();break;case i.db.LINETYPE.CRITICAL_START:X(w,s,$.boxMargin,$.boxMargin+$.boxTextMargin,(t=>Y.newLoop(t)));break;case i.db.LINETYPE.CRITICAL_OPTION:X(w,s,$.boxMargin+$.boxTextMargin,$.boxMargin,(t=>Y.addSectionToLoop(t)));break;case i.db.LINETYPE.CRITICAL_END:t=Y.endLoop(),await C.drawLoop(h,t,"critical",$),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos()),Y.models.addLoop(t);break;case i.db.LINETYPE.BREAK_START:X(w,s,$.boxMargin,$.boxMargin+$.boxTextMargin,(t=>Y.newLoop(t)));break;case i.db.LINETYPE.BREAK_END:t=Y.endLoop(),await C.drawLoop(h,t,"break",$),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos()),Y.models.addLoop(t);break;default:try{a=s.msgModel,a.starty=Y.getVerticalPos(),a.sequenceIndex=v,a.sequenceVisible=i.db.showSequenceNumbers();const t=await W(0,a);J(s,a,t,I,p,g,u),L.push({messageModel:a,lineStartY:t}),Y.models.addMessage(a)}catch(K){r.l.error("error while drawing message",K)}}[i.db.LINETYPE.SOLID_OPEN,i.db.LINETYPE.DOTTED_OPEN,i.db.LINETYPE.SOLID,i.db.LINETYPE.DOTTED,i.db.LINETYPE.SOLID_CROSS,i.db.LINETYPE.DOTTED_CROSS,i.db.LINETYPE.SOLID_POINT,i.db.LINETYPE.DOTTED_POINT].includes(s.type)&&(v+=_),I++}r.l.debug("createdActors",g),r.l.debug("destroyedActors",u),await H(h,p,y,!1);for(const r of L)await z(h,r.messageModel,r.lineStartY,i);$.mirrorActors&&await H(h,p,y,!0),k.forEach((t=>C.drawBackgroundRect(h,t))),A(h,p,y,$);for(const r of Y.models.boxes)r.height=Y.getVerticalPos()-r.y,Y.insert(r.x,r.y,r.x+r.width,r.height),r.startx=r.x,r.starty=r.y,r.stopx=r.startx+r.width,r.stopy=r.starty+r.height,r.stroke="rgb(0,0,0, 0.5)",await C.drawBox(h,r,$);f&&Y.bumpVerticalPos($.boxMargin);const M=U(h,p,y,d),{bounds:N}=Y.getBounds();let O=N.stopy-N.starty;O<M.maxHeight&&(O=M.maxHeight);let S=O+2*$.diagramMarginY;$.mirrorActors&&(S=S-$.boxMargin+$.bottomMarginAdj);let D=N.stopx-N.startx;D<M.maxWidth&&(D=M.maxWidth);const R=D+2*$.diagramMarginX;b&&h.append("text").text(b).attr("x",(N.stopx-N.startx)/2-2*$.diagramMarginX).attr("y",-25),(0,r.i)(h,S,R,$.useMaxWidth);const j=b?40:0;h.attr("viewBox",N.startx-$.diagramMarginX+" -"+($.diagramMarginY+j)+" "+R+" "+(S+j)),r.l.debug("models:",Y.models)}},styles:P,init:({wrap:t})=>{w.setWrap(t)}}},28259:(t,e,a)=>{a.d(e,{a:()=>n,b:()=>l,c:()=>c,d:()=>i,e:()=>h,f:()=>o,g:()=>d});var r=a(16750),s=a(99702);const i=(t,e)=>{const a=t.append("rect");if(a.attr("x",e.x),a.attr("y",e.y),a.attr("fill",e.fill),a.attr("stroke",e.stroke),a.attr("width",e.width),a.attr("height",e.height),e.name&&a.attr("name",e.name),void 0!==e.rx&&a.attr("rx",e.rx),void 0!==e.ry&&a.attr("ry",e.ry),void 0!==e.attrs)for(const r in e.attrs)a.attr(r,e.attrs[r]);return void 0!==e.class&&a.attr("class",e.class),a},n=(t,e)=>{const a={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};i(t,a).lower()},o=(t,e)=>{const a=e.text.replace(s.J," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.attr("class","legend"),r.style("text-anchor",e.anchor),void 0!==e.class&&r.attr("class",e.class);const i=r.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.text(a),r},c=(t,e,a,s)=>{const i=t.append("image");i.attr("x",e),i.attr("y",a);const n=(0,r.Jf)(s);i.attr("xlink:href",n)},l=(t,e,a,s)=>{const i=t.append("use");i.attr("x",e),i.attr("y",a);const n=(0,r.Jf)(s);i.attr("xlink:href",`#${n}`)},d=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),h=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/971e8ccd.1f633718.js b/pr-preview/pr-1594/assets/js/971e8ccd.1f633718.js deleted file mode 100644 index 63ec9ff9f1..0000000000 --- a/pr-preview/pr-1594/assets/js/971e8ccd.1f633718.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3655],{6871:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var o=n(74848),r=n(28453);const i={},s="Jira HTTP Ingest (Webhook)",a={id:"reference/Connectors/capture-connectors/jira-ingest",title:"Jira HTTP Ingest (Webhook)",description:"The Jira HTTP Ingest connector allows you to capture data from incoming HTTP requests from Jira.",source:"@site/docs/reference/Connectors/capture-connectors/jira-ingest.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/jira-ingest",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/jira-ingest.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Jira",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira"},next:{title:"Klaviyo",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo"}},c={},d=[{value:"Usage",id:"usage",level:2},{value:"Send sample data to Flow",id:"send-sample-data-to-flow",level:3},{value:"Configure a Jira webhook",id:"configure-a-jira-webhook",level:3},{value:"Webhook URLs",id:"webhook-urls",level:3},{value:"Authentication",id:"authentication",level:3},{value:"Webhook signature verification",id:"webhook-signature-verification",level:3},{value:"Endpoint Configuration",id:"endpoint-configuration",level:2},{value:"Resource configuration",id:"resource-configuration",level:2}];function h(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"jira-http-ingest-webhook",children:"Jira HTTP Ingest (Webhook)"}),"\n",(0,o.jsxs)(t.p,{children:["The Jira HTTP Ingest connector allows you to capture data from ",(0,o.jsx)(t.em,{children:"incoming"})," HTTP requests from Jira.\nA common use case is to capture webhook deliveries, turning them into a Flow collection."]}),"\n",(0,o.jsxs)(t.p,{children:["The connector is available for use in the Flow web application. For local development or open-source workflows, ",(0,o.jsx)(t.a,{href:"https://ghcr.io/estuary/source-http-ingest:dev",children:(0,o.jsx)(t.code,{children:"ghcr.io/estuary/source-http-ingest:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,o.jsx)(t.h2,{id:"usage",children:"Usage"}),"\n",(0,o.jsx)(t.p,{children:"This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific\nsystem or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source."}),"\n",(0,o.jsx)(t.p,{children:"This is useful primarily if you want to test out Flow or see how your webhook data will come over."}),"\n",(0,o.jsx)(t.p,{children:"To begin, use the web app to create a capture. Once published, the confirmation dialog displays\na unique URL for your public endpoint."}),"\n",(0,o.jsx)(t.p,{children:"You're now ready to send data to Flow."}),"\n",(0,o.jsx)(t.h3,{id:"send-sample-data-to-flow",children:"Send sample data to Flow"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Expand ",(0,o.jsx)(t.strong,{children:"POST"})," or ",(0,o.jsx)(t.strong,{children:"PUT"})," and click ",(0,o.jsx)(t.strong,{children:"Try it out"})," to send some example JSON documents using the UI. You can also copy the provided ",(0,o.jsx)(t.code,{children:"curl"})," commands to send data via the command line."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture.\nClick ",(0,o.jsx)(t.strong,{children:"Details"})," to view the data preview."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"configure-a-jira-webhook",children:"Configure a Jira webhook"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["In the Jira Administration console press the ",(0,o.jsx)(t.code,{children:"."})," key to bring up Jira's search. Search for ",(0,o.jsx)(t.code,{children:"Webhooks"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Click on a ",(0,o.jsx)(t.code,{children:"Create a WebHook"})," and in the url section input the url that was generated after publishing a capture in Flow. See the Webhook URLs section below for more information on the structure of your URL."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["Review ",(0,o.jsx)(t.a,{href:"https://developer.atlassian.com/server/jira/platform/webhooks/#executing-a-webhook",children:"Jira's documentation"})," on configuring a webhook for more information."]}),"\n",(0,o.jsx)(t.h3,{id:"webhook-urls",children:"Webhook URLs"}),"\n",(0,o.jsxs)(t.p,{children:["To determine the full URL, start with the base URL from the Flow web app (for example ",(0,o.jsx)(t.code,{children:"https://abc123-8080.us-central1.v1.estuary-data.dev"}),"), and then append the path."]}),"\n",(0,o.jsxs)(t.p,{children:["The path will be whatever is in the ",(0,o.jsx)(t.code,{children:"paths"})," endpoint configuration field (",(0,o.jsx)(t.code,{children:"/webhook-data"})," by default). For example, your full webhook URL would be ",(0,o.jsx)(t.code,{children:"https://<your-unique-hostname>/webhook-data"}),". You can add additional paths to ",(0,o.jsx)(t.code,{children:"paths"}),', and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you\'re editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to ',(0,o.jsx)(t.code,{children:"/my-webhook.json"}),", then the full URL for that binding would be ",(0,o.jsx)(t.code,{children:"https://<your-unique-hostname>/my-webhook.json"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["Any URL query parameters that are sent on the request will be captured and serialized under ",(0,o.jsx)(t.code,{children:"/_meta/query/*"})," the in documents. For example, a webhook request that's sent to ",(0,o.jsx)(t.code,{children:"/webhook-data?testKey=testValue"})," would result in a document like:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:'{\n "_meta": {\n "webhookId": "...",\n "query": {\n "testKey": "testValue"\n },\n ...\n }\n ...\n}\n'})}),"\n",(0,o.jsx)(t.h3,{id:"authentication",children:"Authentication"}),"\n",(0,o.jsxs)(t.p,{children:["The connector can optionally require each request to present an authentication token as part of an ",(0,o.jsx)(t.code,{children:"Authorization: Bearer "}),' HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an ',(0,o.jsx)(t.code,{children:"Authorization"})," header with the value of your token. For example, if you use an auth token value of ",(0,o.jsx)(t.code,{children:"mySecretToken"}),", then the header on each request must be ",(0,o.jsx)(t.code,{children:"Authorization: Bearer mySecretToken"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection."})," We recommend using authentication whenever possible."]}),"\n",(0,o.jsx)(t.h3,{id:"webhook-signature-verification",children:"Webhook signature verification"}),"\n",(0,o.jsxs)(t.p,{children:["This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact ",(0,o.jsx)(t.a,{href:"mailto://support@estuary.dev",children:(0,o.jsx)(t.code,{children:"support@estuary.dev"})})," and let us know."]}),"\n",(0,o.jsx)(t.h2,{id:"endpoint-configuration",children:"Endpoint Configuration"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Property"}),(0,o.jsx)(t.th,{children:"Title"}),(0,o.jsx)(t.th,{children:"Description"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Required/Default"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"****"}),(0,o.jsx)(t.td,{children:"EndpointConfig"}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"object"}),(0,o.jsx)(t.td,{children:"Required"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/require_auth_token"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"Optional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"null"})})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/paths"})}),(0,o.jsx)(t.td,{children:"URL Paths"}),(0,o.jsx)(t.td,{children:"List of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"null"})})]})]})]}),"\n",(0,o.jsx)(t.h2,{id:"resource-configuration",children:"Resource configuration"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Property"}),(0,o.jsx)(t.th,{children:"Title"}),(0,o.jsx)(t.th,{children:"Description"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Required/Default"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"****"}),(0,o.jsx)(t.td,{children:"ResourceConfig"}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"object"}),(0,o.jsx)(t.td,{children:"Required"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/idFromHeader"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"Set the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/path"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"The URL path to use for adding documents to this binding. Defaults to the name of the collection."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/stream"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"The name of the binding, which is used as a merge key when doing Discovers."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{})]})]})]})]})}function l(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>a});var o=n(96540);const r={},i=o.createContext(r);function s(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/977d5535.4f5651d7.js b/pr-preview/pr-1594/assets/js/977d5535.4f5651d7.js deleted file mode 100644 index 1869a94bab..0000000000 --- a/pr-preview/pr-1594/assets/js/977d5535.4f5651d7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3876],{87708:(e,d,s)=>{s.r(d),s.d(d,{assets:()=>c,contentTitle:()=>i,default:()=>x,frontMatter:()=>t,metadata:()=>l,toc:()=>h});var r=s(74848),n=s(28453);const t={},i="MySQL",l={id:"reference/Connectors/materialization-connectors/MySQL/mysql",title:"MySQL",description:"This connector materializes Flow collections into tables in a MySQL database.",source:"@site/docs/reference/Connectors/materialization-connectors/MySQL/mysql.md",sourceDirName:"reference/Connectors/materialization-connectors/MySQL",slug:"/reference/Connectors/materialization-connectors/MySQL/",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/MySQL/mysql.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"MotherDuck",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck"},next:{title:"Amazon RDS for MySQL",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql"}},c={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Azure Database for MySQL",id:"azure-database-for-mysql",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Setting the MySQL time zone",id:"setting-the-mysql-time-zone",level:3},{value:"SSL Mode",id:"ssl-mode",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"MySQL on managed cloud platforms",id:"mysql-on-managed-cloud-platforms",level:2},{value:"Setup",id:"setup-1",level:3},{value:"Delta updates",id:"delta-updates",level:2},{value:"Date & times",id:"date--times",level:2},{value:"Reserved words",id:"reserved-words",level:2},{value:"Changelog",id:"changelog",level:2},{value:"V1: 2023-08-21",id:"v1-2023-08-21",level:4}];function o(e){const d={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(d.h1,{id:"mysql",children:"MySQL"}),"\n",(0,r.jsx)(d.p,{children:"This connector materializes Flow collections into tables in a MySQL database."}),"\n",(0,r.jsxs)(d.p,{children:["It is available for use in the Flow web application. For local development or\nopen-source workflows,\n",(0,r.jsx)(d.a,{href:"https://ghcr.io/estuary/materialize-mysql:dev",children:(0,r.jsx)(d.code,{children:"ghcr.io/estuary/materialize-mysql:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(d.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(d.p,{children:"To use this connector, you'll need:"}),"\n",(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsxs)(d.li,{children:["A MySQL database to which to materialize, and user credentials.","\n",(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsx)(d.li,{children:"MySQL versions 5.7 and later are supported"}),"\n",(0,r.jsx)(d.li,{children:"The connector will create new tables in the database per your specification,\nso user credentials must have access to create new tables."}),"\n",(0,r.jsxs)(d.li,{children:["The ",(0,r.jsx)(d.code,{children:"local_infile"})," global variable must be enabled. You can enable this\nsetting by running ",(0,r.jsx)(d.code,{children:"SET GLOBAL local_infile = true"})," in your database."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(d.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,r.jsx)(d.h2,{id:"setup",children:"Setup"}),"\n",(0,r.jsx)(d.p,{children:"To meet these requirements, follow the steps for your hosting type."}),"\n",(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsx)(d.li,{children:(0,r.jsx)(d.a,{href:"./amazon-rds-mysql/",children:"Amazon RDS"})}),"\n",(0,r.jsx)(d.li,{children:(0,r.jsx)(d.a,{href:"./google-cloud-sql-mysql/",children:"Google Cloud SQL"})}),"\n",(0,r.jsx)(d.li,{children:(0,r.jsx)(d.a,{href:"#azure-database-for-mysql",children:"Azure Database for MySQL"})}),"\n"]}),"\n",(0,r.jsx)(d.p,{children:"In addition to standard MySQL, this connector supports cloud-based MySQL instances. Google Cloud Platform, Amazon Web Service, and Microsoft Azure are currently supported. You may use other cloud platforms, but Estuary doesn't guarantee performance."}),"\n",(0,r.jsx)(d.p,{children:"To connect securely, you can either enable direct access for Flows's IP or use an SSH tunnel."}),"\n",(0,r.jsx)(d.h3,{id:"azure-database-for-mysql",children:"Azure Database for MySQL"}),"\n",(0,r.jsx)(d.p,{children:"You must configure your database to allow connections from Estuary.\nThere are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsxs)(d.li,{children:["\n",(0,r.jsxs)(d.p,{children:[(0,r.jsx)(d.strong,{children:"Connect Directly With Azure Database For MySQL"}),": Create a new ",(0,r.jsx)(d.a,{href:"https://learn.microsoft.com/en-us/azure/mysql/single-server/how-to-manage-firewall-using-portal",children:"firewall rule"})," that grants access to the ",(0,r.jsx)(d.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"})]}),"\n"]}),"\n",(0,r.jsxs)(d.li,{children:["\n",(0,r.jsxs)(d.p,{children:[(0,r.jsx)(d.strong,{children:"Connect With SSH Tunneling"}),": Follow the instructions for setting up an SSH connection to ",(0,r.jsx)(d.a,{href:"/guides/connect-network/#setup-for-azure",children:"Azure Database"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(d.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(d.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a MySQL materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database."}),"\n",(0,r.jsx)(d.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(d.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Property"}),(0,r.jsx)(d.th,{children:"Title"}),(0,r.jsx)(d.th,{children:"Description"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Required/Default"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:(0,r.jsx)(d.code,{children:"/database"})})}),(0,r.jsx)(d.td,{children:"Database"}),(0,r.jsx)(d.td,{children:"Name of the logical database to materialize to."}),(0,r.jsx)(d.td,{children:"string"}),(0,r.jsx)(d.td,{children:"Required"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:(0,r.jsx)(d.code,{children:"/address"})})}),(0,r.jsx)(d.td,{children:"Address"}),(0,r.jsxs)(d.td,{children:["Host and port of the database. If only the host is specified, port will default to ",(0,r.jsx)(d.code,{children:"3306"}),"."]}),(0,r.jsx)(d.td,{children:"string"}),(0,r.jsx)(d.td,{children:"Required"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:(0,r.jsx)(d.code,{children:"/password"})})}),(0,r.jsx)(d.td,{children:"Password"}),(0,r.jsx)(d.td,{children:"Password for the specified database user."}),(0,r.jsx)(d.td,{children:"string"}),(0,r.jsx)(d.td,{children:"Required"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:(0,r.jsx)(d.code,{children:"/user"})})}),(0,r.jsx)(d.td,{children:"User"}),(0,r.jsx)(d.td,{children:"Database user to connect as."}),(0,r.jsx)(d.td,{children:"string"}),(0,r.jsx)(d.td,{children:"Required"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/timezone"})}),(0,r.jsx)(d.td,{children:"Timezone"}),(0,r.jsxs)(d.td,{children:["Timezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read. Must be a valid IANA time zone name or +HH",":MM"," offset. Takes precedence over the 'time_zone' system variable if both are set."]}),(0,r.jsx)(d.td,{children:"string"}),(0,r.jsx)(d.td,{})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/advanced"})}),(0,r.jsx)(d.td,{children:"Advanced Options"}),(0,r.jsx)(d.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,r.jsx)(d.td,{children:"object"}),(0,r.jsx)(d.td,{})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/advanced/sslmode"})}),(0,r.jsx)(d.td,{children:"SSL Mode"}),(0,r.jsx)(d.td,{children:"Overrides SSL connection behavior by setting the 'sslmode' parameter."}),(0,r.jsx)(d.td,{children:"string"}),(0,r.jsx)(d.td,{})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/advanced/ssl_server_ca"})}),(0,r.jsx)(d.td,{children:"SSL Server CA"}),(0,r.jsx)(d.td,{children:"Optional server certificate authority to use when connecting with custom SSL mode"}),(0,r.jsx)(d.td,{children:"string"}),(0,r.jsx)(d.td,{})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/advanced/ssl_client_cert"})}),(0,r.jsx)(d.td,{children:"SSL Client Certificate"}),(0,r.jsx)(d.td,{children:"Optional client certificate to use when connecting with custom SSL mode."}),(0,r.jsx)(d.td,{children:"string"}),(0,r.jsx)(d.td,{})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/advanced/ssl_client_key"})}),(0,r.jsx)(d.td,{children:"SSL Client Key"}),(0,r.jsx)(d.td,{children:"Optional client key to use when connecting with custom SSL mode."}),(0,r.jsx)(d.td,{children:"string"}),(0,r.jsx)(d.td,{})]})]})]}),"\n",(0,r.jsx)(d.h3,{id:"setting-the-mysql-time-zone",children:"Setting the MySQL time zone"}),"\n",(0,r.jsxs)(d.p,{children:["MySQL's ",(0,r.jsxs)(d.a,{href:"https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_time_zone",children:[(0,r.jsx)(d.code,{children:"time_zone"})," server system variable"]})," is set to ",(0,r.jsx)(d.code,{children:"SYSTEM"})," by default."]}),"\n",(0,r.jsxs)(d.p,{children:["If you intend to materialize collections including fields of with ",(0,r.jsx)(d.code,{children:"format: date-time"})," or ",(0,r.jsx)(d.code,{children:"format: time"}),",\nand ",(0,r.jsx)(d.code,{children:"time_zone"})," is set to ",(0,r.jsx)(d.code,{children:"SYSTEM"}),",\nFlow won't be able to detect the time zone and convert datetimes to the\nappropriate timezone when materializing.\nTo avoid this, you must explicitly set the time zone for your database."]}),"\n",(0,r.jsx)(d.p,{children:"You can:"}),"\n",(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsxs)(d.li,{children:["\n",(0,r.jsx)(d.p,{children:"Specify a numerical offset from UTC."}),"\n",(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsxs)(d.li,{children:["For MySQL version 8.0.19 or higher, values from ",(0,r.jsx)(d.code,{children:"-13:59"})," to ",(0,r.jsx)(d.code,{children:"+14:00"}),", inclusive, are permitted."]}),"\n",(0,r.jsxs)(d.li,{children:["Prior to MySQL 8.0.19, values from ",(0,r.jsx)(d.code,{children:"-12:59"})," to ",(0,r.jsx)(d.code,{children:"+13:00"}),", inclusive, are permitted"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(d.li,{children:["\n",(0,r.jsxs)(d.p,{children:["Specify a named timezone in ",(0,r.jsx)(d.a,{href:"https://www.iana.org/time-zones",children:"IANA timezone format"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(d.li,{children:["\n",(0,r.jsxs)(d.p,{children:["If you're using Amazon Aurora, create or modify the ",(0,r.jsx)(d.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html",children:"DB cluster parameter group"}),"\nassociated with your MySQL database.\n",(0,r.jsx)(d.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html#USER_WorkingWithParamGroups.ModifyingCluster",children:"Set"})," the ",(0,r.jsx)(d.code,{children:"time_zone"})," parameter to the correct value."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(d.p,{children:["For example, if you're located in New Jersey, USA, you could set ",(0,r.jsx)(d.code,{children:"time_zone"})," to ",(0,r.jsx)(d.code,{children:"-05:00"})," or ",(0,r.jsx)(d.code,{children:"-04:00"}),", depending on the time of year.\nBecause this region observes daylight savings time, you'd be responsible for changing the offset.\nAlternatively, you could set ",(0,r.jsx)(d.code,{children:"time_zone"})," to ",(0,r.jsx)(d.code,{children:"America/New_York"}),", and time changes would occur automatically."]}),"\n",(0,r.jsxs)(d.p,{children:["If using IANA time zones, your database must include time zone tables. ",(0,r.jsx)(d.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html",children:"Learn more in the MySQL docs"}),"."]}),"\n",(0,r.jsx)(d.admonition,{title:"Materialize Timezone Configuration",type:"tip",children:(0,r.jsxs)(d.p,{children:["If you are unable to set the ",(0,r.jsx)(d.code,{children:"time_zone"})," in the database and need to materialize\ncollections with date-time or time fields, the materialization can be configured\nto assume a time zone using the ",(0,r.jsx)(d.code,{children:"timezone"})," configuration property (see above). The ",(0,r.jsx)(d.code,{children:"timezone"})," configuration property can be set as a numerical offset or IANA timezone format."]})}),"\n",(0,r.jsx)(d.h4,{id:"ssl-mode",children:"SSL Mode"}),"\n",(0,r.jsx)(d.p,{children:"Possible values:"}),"\n",(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsxs)(d.li,{children:[(0,r.jsx)(d.code,{children:"disabled"}),": A plain unencrypted connection is established with the server"]}),"\n",(0,r.jsxs)(d.li,{children:[(0,r.jsx)(d.code,{children:"preferred"}),": Only use SSL connection if the server asks for it"]}),"\n",(0,r.jsxs)(d.li,{children:[(0,r.jsx)(d.code,{children:"required"}),": Connect using an SSL connection, but do not verify the server's\ncertificate."]}),"\n",(0,r.jsxs)(d.li,{children:[(0,r.jsx)(d.code,{children:"verify_ca"}),": Connect using an SSL connection, and verify the server's\ncertificate against the given SSL Server CA, but does not verify the server's\nhostname. This option is most commonly used when connecting to an\nIP address which does not have a hostname to be verified. When using this mode, SSL Server\nCA must be provided."]}),"\n",(0,r.jsxs)(d.li,{children:[(0,r.jsx)(d.code,{children:"verify_identity"}),": Connect using an SSL connection, verify the server's\ncertificate and the server's hostname. This is the most secure option. When using this mode, SSL Server\nCA must be provided."]}),"\n"]}),"\n",(0,r.jsx)(d.p,{children:"Optionally, SSL Client Certificate and Key can be provided if necessary to\nauthorize the client."}),"\n",(0,r.jsx)(d.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Property"}),(0,r.jsx)(d.th,{children:"Title"}),(0,r.jsx)(d.th,{children:"Description"}),(0,r.jsx)(d.th,{children:"Type"}),(0,r.jsx)(d.th,{children:"Required/Default"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:(0,r.jsx)(d.code,{children:"/table"})})}),(0,r.jsx)(d.td,{children:"Table"}),(0,r.jsx)(d.td,{children:"Table name to materialize to. It will be created by the connector, unless the connector has previously created it."}),(0,r.jsx)(d.td,{children:"string"}),(0,r.jsx)(d.td,{children:"Required"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/delta_updates"})}),(0,r.jsx)(d.td,{children:"Delta Update"}),(0,r.jsx)(d.td,{children:"Should updates to this table be done via delta updates."}),(0,r.jsx)(d.td,{children:"boolean"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})})]})]})]}),"\n",(0,r.jsx)(d.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(d.pre,{children:(0,r.jsx)(d.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-mysql:dev\n config:\n database: flow\n address: localhost:5432\n password: flow\n user: flow\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,r.jsx)(d.h2,{id:"mysql-on-managed-cloud-platforms",children:"MySQL on managed cloud platforms"}),"\n",(0,r.jsx)(d.p,{children:"In addition to standard MySQL, this connector supports cloud-based MySQL instances.\nTo connect securely, you can either enable direct access for Flows's IP or use an SSH tunnel."}),"\n",(0,r.jsx)(d.p,{children:"Google Cloud Platform, Amazon Web Service, and Microsoft Azure are currently supported.\nYou may use other cloud platforms, but Estuary doesn't guarantee performance."}),"\n",(0,r.jsx)(d.h3,{id:"setup-1",children:"Setup"}),"\n",(0,r.jsx)(d.p,{children:"You must configure your database to allow connections from Estuary.\nThere are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsxs)(d.li,{children:["\n",(0,r.jsxs)(d.p,{children:[(0,r.jsx)(d.strong,{children:"Connect directly with Amazon RDS or Amazon Aurora"}),": Edit the VPC security group associated with your database instance, or create a new VPC security group and associate it with the database instance."]}),"\n",(0,r.jsxs)(d.ol,{children:["\n",(0,r.jsxs)(d.li,{children:["\n",(0,r.jsxs)(d.p,{children:[(0,r.jsx)(d.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html",children:"Modify the instance"}),", choosing ",(0,r.jsx)(d.strong,{children:"Publicly accessible"})," in the ",(0,r.jsx)(d.strong,{children:"Connectivity"})," settings."]}),"\n"]}),"\n",(0,r.jsxs)(d.li,{children:["\n",(0,r.jsxs)(d.p,{children:["Per the ",(0,r.jsx)(d.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html#Overview.RDSSecurityGroups.Create",children:"steps in the Amazon documentation"}),",\ncreate a new inbound rule and a new outbound rule that allow all traffic from the IP addresses ``."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(d.li,{children:["\n",(0,r.jsxs)(d.p,{children:[(0,r.jsx)(d.strong,{children:"Connect directly with Google Cloud SQL"}),": ",(0,r.jsx)(d.a,{href:"https://cloud.google.com/sql/docs/mysql/configure-ip#add",children:"Enable public IP on your database"})," and add ",(0,r.jsx)(d.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"})," as authorized IP addresses. See the instructions below to use SSH Tunneling instead of enabling public access."]}),"\n"]}),"\n",(0,r.jsxs)(d.li,{children:["\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.strong,{children:"Connect with SSH tunneling"})}),"\n",(0,r.jsxs)(d.ol,{children:["\n",(0,r.jsxs)(d.li,{children:["\n",(0,r.jsxs)(d.p,{children:["Refer to the ",(0,r.jsx)(d.a,{href:"/guides/connect-network/",children:"guide"})," to configure an SSH server on the cloud platform of your choice."]}),"\n"]}),"\n",(0,r.jsxs)(d.li,{children:["\n",(0,r.jsxs)(d.p,{children:["Configure your connector as described in the ",(0,r.jsx)(d.a,{href:"#configuration",children:"configuration"})," section above,\nwith the additional of the ",(0,r.jsx)(d.code,{children:"networkTunnel"})," stanza to enable the SSH tunnel, if using.\nSee ",(0,r.jsx)(d.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"}),"\nfor additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(d.admonition,{title:"Configuration Tip",type:"tip",children:[(0,r.jsxs)(d.p,{children:["To configure the connector, you must specify the database address in the format\n",(0,r.jsx)(d.code,{children:"host:port"}),". (You can also supply ",(0,r.jsx)(d.code,{children:"host"})," only; the connector will use the port ",(0,r.jsx)(d.code,{children:"3306"})," by default, which is correct in many cases.)\nYou can find the host and port in the following locations in each platform's console:"]}),(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsx)(d.li,{children:"Amazon RDS and Amazon Aurora: host as Endpoint; port as Port."}),"\n",(0,r.jsxs)(d.li,{children:["Google Cloud SQL: host as Private IP Address; port is always ",(0,r.jsx)(d.code,{children:"3306"}),". You may need to ",(0,r.jsx)(d.a,{href:"https://cloud.google.com/sql/docs/mysql/configure-private-ip",children:"configure private IP"})," on your database."]}),"\n",(0,r.jsxs)(d.li,{children:["Azure Database: host as Server Name; port under Connection Strings (usually ",(0,r.jsx)(d.code,{children:"3306"}),")."]}),"\n"]})]}),"\n",(0,r.jsx)(d.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,r.jsxs)(d.p,{children:["This connector supports both standard (merge) and ",(0,r.jsx)(d.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]}),"\n",(0,r.jsx)(d.h2,{id:"date--times",children:"Date & times"}),"\n",(0,r.jsxs)(d.p,{children:["Date and time fields that are part of collections, which specify a ",(0,r.jsx)(d.code,{children:"format: date-time"})," for the field, are automatically converted to UTC and\npersisted as UTC ",(0,r.jsx)(d.code,{children:"DATETIME"})," in MySQL."]}),"\n",(0,r.jsx)(d.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,r.jsxs)(d.p,{children:["MySQL has a list of reserved words that must be quoted in order to be used as an identifier.\nFlow considers all the reserved words in the official ",(0,r.jsx)(d.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/keywords.html",children:"MySQL documentation"}),"."]}),"\n",(0,r.jsx)(d.p,{children:"These reserved words are listed in the table below. Flow automatically quotes fields that are in this list."}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Reserved words"}),(0,r.jsx)(d.th,{}),(0,r.jsx)(d.th,{}),(0,r.jsx)(d.th,{}),(0,r.jsx)(d.th,{})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"accessible"}),(0,r.jsx)(d.td,{children:"clone"}),(0,r.jsx)(d.td,{children:"describe"}),(0,r.jsx)(d.td,{children:"float"}),(0,r.jsx)(d.td,{children:"int"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"account"}),(0,r.jsx)(d.td,{children:"close"}),(0,r.jsx)(d.td,{children:"description"}),(0,r.jsx)(d.td,{children:"float4"}),(0,r.jsx)(d.td,{children:"int1"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"action"}),(0,r.jsx)(d.td,{children:"coalesce"}),(0,r.jsx)(d.td,{children:"des_key_file"}),(0,r.jsx)(d.td,{children:"float8"}),(0,r.jsx)(d.td,{children:"int2"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"active"}),(0,r.jsx)(d.td,{children:"code"}),(0,r.jsx)(d.td,{children:"deterministic"}),(0,r.jsx)(d.td,{children:"flush"}),(0,r.jsx)(d.td,{children:"int3"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"add"}),(0,r.jsx)(d.td,{children:"collate"}),(0,r.jsx)(d.td,{children:"diagnostics"}),(0,r.jsx)(d.td,{children:"following"}),(0,r.jsx)(d.td,{children:"int4"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"admin"}),(0,r.jsx)(d.td,{children:"collation"}),(0,r.jsx)(d.td,{children:"directory"}),(0,r.jsx)(d.td,{children:"follows"}),(0,r.jsx)(d.td,{children:"int8"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"after"}),(0,r.jsx)(d.td,{children:"column"}),(0,r.jsx)(d.td,{children:"disable"}),(0,r.jsx)(d.td,{children:"for"}),(0,r.jsx)(d.td,{children:"integer"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"against"}),(0,r.jsx)(d.td,{children:"columns"}),(0,r.jsx)(d.td,{children:"discard"}),(0,r.jsx)(d.td,{children:"force"}),(0,r.jsx)(d.td,{children:"intersect"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"aggregate"}),(0,r.jsx)(d.td,{children:"column_format"}),(0,r.jsx)(d.td,{children:"disk"}),(0,r.jsx)(d.td,{children:"foreign"}),(0,r.jsx)(d.td,{children:"interval"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"algorithm"}),(0,r.jsx)(d.td,{children:"column_name"}),(0,r.jsx)(d.td,{children:"distinct"}),(0,r.jsx)(d.td,{children:"format"}),(0,r.jsx)(d.td,{children:"into"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"all"}),(0,r.jsx)(d.td,{children:"comment"}),(0,r.jsx)(d.td,{children:"distinctrow"}),(0,r.jsx)(d.td,{children:"found"}),(0,r.jsx)(d.td,{children:"invisible"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"alter"}),(0,r.jsx)(d.td,{children:"commit"}),(0,r.jsx)(d.td,{children:"div"}),(0,r.jsx)(d.td,{children:"from"}),(0,r.jsx)(d.td,{children:"invoker"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"always"}),(0,r.jsx)(d.td,{children:"committed"}),(0,r.jsx)(d.td,{children:"do"}),(0,r.jsx)(d.td,{children:"full"}),(0,r.jsx)(d.td,{children:"io"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"analyse"}),(0,r.jsx)(d.td,{children:"compact"}),(0,r.jsx)(d.td,{children:"double"}),(0,r.jsx)(d.td,{children:"fulltext"}),(0,r.jsx)(d.td,{children:"io_after_gtid"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"analyze"}),(0,r.jsx)(d.td,{children:"completion"}),(0,r.jsx)(d.td,{children:"drop"}),(0,r.jsx)(d.td,{children:"function"}),(0,r.jsx)(d.td,{children:"io_before_gti"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"and"}),(0,r.jsx)(d.td,{children:"component"}),(0,r.jsx)(d.td,{children:"dual"}),(0,r.jsx)(d.td,{children:"general"}),(0,r.jsx)(d.td,{children:"io_thread"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"any"}),(0,r.jsx)(d.td,{children:"compressed"}),(0,r.jsx)(d.td,{children:"dumpfile"}),(0,r.jsx)(d.td,{children:"generate"}),(0,r.jsx)(d.td,{children:"ipc"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"array"}),(0,r.jsx)(d.td,{children:"compression"}),(0,r.jsx)(d.td,{children:"duplicate"}),(0,r.jsx)(d.td,{children:"generated"}),(0,r.jsx)(d.td,{children:"is"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"as"}),(0,r.jsx)(d.td,{children:"concurrent"}),(0,r.jsx)(d.td,{children:"dynamic"}),(0,r.jsx)(d.td,{children:"geomcollectio"}),(0,r.jsx)(d.td,{children:"isolation"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"asc"}),(0,r.jsx)(d.td,{children:"condition"}),(0,r.jsx)(d.td,{children:"each"}),(0,r.jsx)(d.td,{children:"geometry"}),(0,r.jsx)(d.td,{children:"issuer"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"ascii"}),(0,r.jsx)(d.td,{children:"connection"}),(0,r.jsx)(d.td,{children:"else"}),(0,r.jsx)(d.td,{children:"geometrycolle"}),(0,r.jsx)(d.td,{children:"iterate"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"asensitive"}),(0,r.jsx)(d.td,{children:"consistent"}),(0,r.jsx)(d.td,{children:"elseif"}),(0,r.jsx)(d.td,{children:"get"}),(0,r.jsx)(d.td,{children:"join"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"at"}),(0,r.jsx)(d.td,{children:"constraint"}),(0,r.jsx)(d.td,{children:"empty"}),(0,r.jsx)(d.td,{children:"get_format"}),(0,r.jsx)(d.td,{children:"json"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"attribute"}),(0,r.jsx)(d.td,{children:"constraint_ca"}),(0,r.jsx)(d.td,{children:"enable"}),(0,r.jsx)(d.td,{children:"get_master_pu"}),(0,r.jsx)(d.td,{children:"json_table"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"authenticatio"}),(0,r.jsx)(d.td,{children:"constraint_na"}),(0,r.jsx)(d.td,{children:"enclosed"}),(0,r.jsx)(d.td,{children:"get_source_pu"}),(0,r.jsx)(d.td,{children:"json_value"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"autoextend_si"}),(0,r.jsx)(d.td,{children:"constraint_sc"}),(0,r.jsx)(d.td,{children:"encryption"}),(0,r.jsx)(d.td,{children:"global"}),(0,r.jsx)(d.td,{children:"key"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"auto_incremen"}),(0,r.jsx)(d.td,{children:"contains"}),(0,r.jsx)(d.td,{children:"end"}),(0,r.jsx)(d.td,{children:"grant"}),(0,r.jsx)(d.td,{children:"keyring"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"avg"}),(0,r.jsx)(d.td,{children:"context"}),(0,r.jsx)(d.td,{children:"ends"}),(0,r.jsx)(d.td,{children:"grants"}),(0,r.jsx)(d.td,{children:"keys"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"avg_row_lengt"}),(0,r.jsx)(d.td,{children:"continue"}),(0,r.jsx)(d.td,{children:"enforced"}),(0,r.jsx)(d.td,{children:"group"}),(0,r.jsx)(d.td,{children:"key_block_siz"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"backup"}),(0,r.jsx)(d.td,{children:"convert"}),(0,r.jsx)(d.td,{children:"engine"}),(0,r.jsx)(d.td,{children:"grouping"}),(0,r.jsx)(d.td,{children:"kill"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"before"}),(0,r.jsx)(d.td,{children:"cpu"}),(0,r.jsx)(d.td,{children:"engines"}),(0,r.jsx)(d.td,{children:"groups"}),(0,r.jsx)(d.td,{children:"lag"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"begin"}),(0,r.jsx)(d.td,{children:"create"}),(0,r.jsx)(d.td,{children:"engine_attrib"}),(0,r.jsx)(d.td,{children:"group_replica"}),(0,r.jsx)(d.td,{children:"language"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"between"}),(0,r.jsx)(d.td,{children:"cross"}),(0,r.jsx)(d.td,{children:"enum"}),(0,r.jsx)(d.td,{children:"gtid_only"}),(0,r.jsx)(d.td,{children:"last"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"bigint"}),(0,r.jsx)(d.td,{children:"cube"}),(0,r.jsx)(d.td,{children:"error"}),(0,r.jsx)(d.td,{children:"handler"}),(0,r.jsx)(d.td,{children:"last_value"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"binary"}),(0,r.jsx)(d.td,{children:"cume_dist"}),(0,r.jsx)(d.td,{children:"errors"}),(0,r.jsx)(d.td,{children:"hash"}),(0,r.jsx)(d.td,{children:"lateral"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"binlog"}),(0,r.jsx)(d.td,{children:"current"}),(0,r.jsx)(d.td,{children:"escape"}),(0,r.jsx)(d.td,{children:"having"}),(0,r.jsx)(d.td,{children:"lead"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"bit"}),(0,r.jsx)(d.td,{children:"current_date"}),(0,r.jsx)(d.td,{children:"escaped"}),(0,r.jsx)(d.td,{children:"help"}),(0,r.jsx)(d.td,{children:"leading"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"blob"}),(0,r.jsx)(d.td,{children:"current_time"}),(0,r.jsx)(d.td,{children:"event"}),(0,r.jsx)(d.td,{children:"high_priority"}),(0,r.jsx)(d.td,{children:"leave"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"block"}),(0,r.jsx)(d.td,{children:"current_times"}),(0,r.jsx)(d.td,{children:"events"}),(0,r.jsx)(d.td,{children:"histogram"}),(0,r.jsx)(d.td,{children:"leaves"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"bool"}),(0,r.jsx)(d.td,{children:"current_user"}),(0,r.jsx)(d.td,{children:"every"}),(0,r.jsx)(d.td,{children:"history"}),(0,r.jsx)(d.td,{children:"left"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"boolean"}),(0,r.jsx)(d.td,{children:"cursor"}),(0,r.jsx)(d.td,{children:"except"}),(0,r.jsx)(d.td,{children:"host"}),(0,r.jsx)(d.td,{children:"less"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"both"}),(0,r.jsx)(d.td,{children:"cursor_name"}),(0,r.jsx)(d.td,{children:"exchange"}),(0,r.jsx)(d.td,{children:"hosts"}),(0,r.jsx)(d.td,{children:"level"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"btree"}),(0,r.jsx)(d.td,{children:"data"}),(0,r.jsx)(d.td,{children:"exclude"}),(0,r.jsx)(d.td,{children:"hour"}),(0,r.jsx)(d.td,{children:"like"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"buckets"}),(0,r.jsx)(d.td,{children:"database"}),(0,r.jsx)(d.td,{children:"execute"}),(0,r.jsx)(d.td,{children:"hour_microsec"}),(0,r.jsx)(d.td,{children:"limit"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"bulk"}),(0,r.jsx)(d.td,{children:"databases"}),(0,r.jsx)(d.td,{children:"exists"}),(0,r.jsx)(d.td,{children:"hour_minute"}),(0,r.jsx)(d.td,{children:"linear"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"by"}),(0,r.jsx)(d.td,{children:"datafile"}),(0,r.jsx)(d.td,{children:"exit"}),(0,r.jsx)(d.td,{children:"hour_second"}),(0,r.jsx)(d.td,{children:"lines"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"byte"}),(0,r.jsx)(d.td,{children:"date"}),(0,r.jsx)(d.td,{children:"expansion"}),(0,r.jsx)(d.td,{children:"identified"}),(0,r.jsx)(d.td,{children:"linestring"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"cache"}),(0,r.jsx)(d.td,{children:"datetime"}),(0,r.jsx)(d.td,{children:"expire"}),(0,r.jsx)(d.td,{children:"if"}),(0,r.jsx)(d.td,{children:"list"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"call"}),(0,r.jsx)(d.td,{children:"day"}),(0,r.jsx)(d.td,{children:"explain"}),(0,r.jsx)(d.td,{children:"ignore"}),(0,r.jsx)(d.td,{children:"load"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"cascade"}),(0,r.jsx)(d.td,{children:"day_hour"}),(0,r.jsx)(d.td,{children:"export"}),(0,r.jsx)(d.td,{children:"ignore_server"}),(0,r.jsx)(d.td,{children:"local"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"cascaded"}),(0,r.jsx)(d.td,{children:"day_microseco"}),(0,r.jsx)(d.td,{children:"extended"}),(0,r.jsx)(d.td,{children:"import"}),(0,r.jsx)(d.td,{children:"localtime"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"case"}),(0,r.jsx)(d.td,{children:"day_minute"}),(0,r.jsx)(d.td,{children:"extent_size"}),(0,r.jsx)(d.td,{children:"in"}),(0,r.jsx)(d.td,{children:"localtimestam"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"catalog_name"}),(0,r.jsx)(d.td,{children:"day_second"}),(0,r.jsx)(d.td,{children:"factor"}),(0,r.jsx)(d.td,{children:"inactive"}),(0,r.jsx)(d.td,{children:"lock"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"chain"}),(0,r.jsx)(d.td,{children:"deallocate"}),(0,r.jsxs)(d.td,{children:["failed",(0,r.jsx)(d.em,{children:"login"})]}),(0,r.jsx)(d.td,{children:"index"}),(0,r.jsx)(d.td,{children:"locked"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"challenge_res"}),(0,r.jsx)(d.td,{children:"dec"}),(0,r.jsx)(d.td,{children:"false"}),(0,r.jsx)(d.td,{children:"indexes"}),(0,r.jsx)(d.td,{children:"locks"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"change"}),(0,r.jsx)(d.td,{children:"decimal"}),(0,r.jsx)(d.td,{children:"fast"}),(0,r.jsx)(d.td,{children:"infile"}),(0,r.jsx)(d.td,{children:"logfile"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"changed"}),(0,r.jsx)(d.td,{children:"declare"}),(0,r.jsx)(d.td,{children:"faults"}),(0,r.jsx)(d.td,{children:"initial"}),(0,r.jsx)(d.td,{children:"logs"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"channel"}),(0,r.jsx)(d.td,{children:"default"}),(0,r.jsx)(d.td,{children:"fetch"}),(0,r.jsx)(d.td,{children:"initial_size"}),(0,r.jsx)(d.td,{children:"long"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"char"}),(0,r.jsx)(d.td,{children:"default_auth"}),(0,r.jsx)(d.td,{children:"fields"}),(0,r.jsx)(d.td,{children:"initiate"}),(0,r.jsx)(d.td,{children:"longblob"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"character"}),(0,r.jsx)(d.td,{children:"definer"}),(0,r.jsx)(d.td,{children:"file"}),(0,r.jsx)(d.td,{children:"inner"}),(0,r.jsx)(d.td,{children:"longtext"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"charset"}),(0,r.jsx)(d.td,{children:"definition"}),(0,r.jsx)(d.td,{children:"file_block_si"}),(0,r.jsx)(d.td,{children:"inout"}),(0,r.jsx)(d.td,{children:"loop"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"check"}),(0,r.jsx)(d.td,{children:"delayed"}),(0,r.jsx)(d.td,{children:"filter"}),(0,r.jsx)(d.td,{children:"insensitive"}),(0,r.jsx)(d.td,{children:"low_priority"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"checksum"}),(0,r.jsx)(d.td,{children:"delay_key_wri"}),(0,r.jsx)(d.td,{children:"finish"}),(0,r.jsx)(d.td,{children:"insert"}),(0,r.jsx)(d.td,{children:"master"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"cipher"}),(0,r.jsx)(d.td,{children:"delete"}),(0,r.jsx)(d.td,{children:"first"}),(0,r.jsx)(d.td,{children:"insert_method"}),(0,r.jsx)(d.td,{children:"master_auto_p"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"class_origin"}),(0,r.jsx)(d.td,{children:"dense_rank"}),(0,r.jsx)(d.td,{children:"first_value"}),(0,r.jsx)(d.td,{children:"install"}),(0,r.jsx)(d.td,{children:"master_bind"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"client"}),(0,r.jsx)(d.td,{children:"desc"}),(0,r.jsx)(d.td,{children:"fixed"}),(0,r.jsx)(d.td,{children:"instance"}),(0,r.jsx)(d.td,{children:"master_compre"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_connec"}),(0,r.jsx)(d.td,{children:"never"}),(0,r.jsx)(d.td,{children:"preserve"}),(0,r.jsx)(d.td,{children:"restrict"}),(0,r.jsx)(d.td,{children:"source_host"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_delay"}),(0,r.jsx)(d.td,{children:"new"}),(0,r.jsx)(d.td,{children:"prev"}),(0,r.jsx)(d.td,{children:"resume"}),(0,r.jsx)(d.td,{children:"source_log_fi"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_heartb"}),(0,r.jsx)(d.td,{children:"next"}),(0,r.jsx)(d.td,{children:"primary"}),(0,r.jsx)(d.td,{children:"retain"}),(0,r.jsx)(d.td,{children:"source_log_po"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_host"}),(0,r.jsx)(d.td,{children:"no"}),(0,r.jsx)(d.td,{children:"privileges"}),(0,r.jsx)(d.td,{children:"return"}),(0,r.jsx)(d.td,{children:"source_passwo"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_log_fi"}),(0,r.jsx)(d.td,{children:"nodegroup"}),(0,r.jsx)(d.td,{children:"privilege_che"}),(0,r.jsx)(d.td,{children:"returned_sqls"}),(0,r.jsx)(d.td,{children:"source_port"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_log_po"}),(0,r.jsx)(d.td,{children:"none"}),(0,r.jsx)(d.td,{children:"procedure"}),(0,r.jsx)(d.td,{children:"returning"}),(0,r.jsx)(d.td,{children:"source_public"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_passwo"}),(0,r.jsx)(d.td,{children:"not"}),(0,r.jsx)(d.td,{children:"process"}),(0,r.jsx)(d.td,{children:"returns"}),(0,r.jsxs)(d.td,{children:["source",(0,r.jsx)(d.em,{children:"retry"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_port"}),(0,r.jsx)(d.td,{children:"nowait"}),(0,r.jsx)(d.td,{children:"processlist"}),(0,r.jsx)(d.td,{children:"reuse"}),(0,r.jsx)(d.td,{children:"source_ssl"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_public"}),(0,r.jsx)(d.td,{children:"no_wait"}),(0,r.jsx)(d.td,{children:"profile"}),(0,r.jsx)(d.td,{children:"reverse"}),(0,r.jsx)(d.td,{children:"source_ssl_ca"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:["master",(0,r.jsx)(d.em,{children:"retry"})]}),(0,r.jsx)(d.td,{children:"no_write_to_b"}),(0,r.jsx)(d.td,{children:"profiles"}),(0,r.jsx)(d.td,{children:"revoke"}),(0,r.jsx)(d.td,{children:"source_ssl_ca"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_server"}),(0,r.jsx)(d.td,{children:"nth_value"}),(0,r.jsx)(d.td,{children:"proxy"}),(0,r.jsx)(d.td,{children:"right"}),(0,r.jsx)(d.td,{children:"source_ssl_ce"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_ssl"}),(0,r.jsx)(d.td,{children:"ntile"}),(0,r.jsx)(d.td,{children:"purge"}),(0,r.jsx)(d.td,{children:"rlike"}),(0,r.jsx)(d.td,{children:"source_ssl_ci"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_ssl_ca"}),(0,r.jsx)(d.td,{children:"null"}),(0,r.jsx)(d.td,{children:"quarter"}),(0,r.jsx)(d.td,{children:"role"}),(0,r.jsx)(d.td,{children:"source_ssl_cr"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_ssl_ca"}),(0,r.jsx)(d.td,{children:"nulls"}),(0,r.jsx)(d.td,{children:"query"}),(0,r.jsx)(d.td,{children:"rollback"}),(0,r.jsx)(d.td,{children:"source_ssl_cr"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_ssl_ce"}),(0,r.jsx)(d.td,{children:"number"}),(0,r.jsx)(d.td,{children:"quick"}),(0,r.jsx)(d.td,{children:"rollup"}),(0,r.jsx)(d.td,{children:"source_ssl_ke"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_ssl_ci"}),(0,r.jsx)(d.td,{children:"numeric"}),(0,r.jsx)(d.td,{children:"random"}),(0,r.jsx)(d.td,{children:"rotate"}),(0,r.jsx)(d.td,{children:"source_ssl_ve"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_ssl_cr"}),(0,r.jsx)(d.td,{children:"nvarchar"}),(0,r.jsx)(d.td,{children:"range"}),(0,r.jsx)(d.td,{children:"routine"}),(0,r.jsx)(d.td,{children:"source_tls_ci"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_ssl_cr"}),(0,r.jsx)(d.td,{children:"of"}),(0,r.jsx)(d.td,{children:"rank"}),(0,r.jsx)(d.td,{children:"row"}),(0,r.jsx)(d.td,{children:"source_tls_ve"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_ssl_ke"}),(0,r.jsx)(d.td,{children:"off"}),(0,r.jsx)(d.td,{children:"read"}),(0,r.jsx)(d.td,{children:"rows"}),(0,r.jsx)(d.td,{children:"source_user"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_ssl_ve"}),(0,r.jsx)(d.td,{children:"offset"}),(0,r.jsx)(d.td,{children:"reads"}),(0,r.jsx)(d.td,{children:"row_count"}),(0,r.jsx)(d.td,{children:"source_zstd_c"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_tls_ci"}),(0,r.jsx)(d.td,{children:"oj"}),(0,r.jsx)(d.td,{children:"read_only"}),(0,r.jsx)(d.td,{children:"row_format"}),(0,r.jsx)(d.td,{children:"spatial"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_tls_ve"}),(0,r.jsx)(d.td,{children:"old"}),(0,r.jsx)(d.td,{children:"read_write"}),(0,r.jsx)(d.td,{children:"row_number"}),(0,r.jsx)(d.td,{children:"specific"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_user"}),(0,r.jsx)(d.td,{children:"on"}),(0,r.jsx)(d.td,{children:"real"}),(0,r.jsx)(d.td,{children:"rtree"}),(0,r.jsx)(d.td,{children:"sql"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"master_zstd_c"}),(0,r.jsx)(d.td,{children:"one"}),(0,r.jsx)(d.td,{children:"rebuild"}),(0,r.jsx)(d.td,{children:"savepoint"}),(0,r.jsx)(d.td,{children:"sqlexception"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"match"}),(0,r.jsx)(d.td,{children:"only"}),(0,r.jsx)(d.td,{children:"recover"}),(0,r.jsx)(d.td,{children:"schedule"}),(0,r.jsx)(d.td,{children:"sqlstate"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"maxvalue"}),(0,r.jsx)(d.td,{children:"open"}),(0,r.jsx)(d.td,{children:"recursive"}),(0,r.jsx)(d.td,{children:"schema"}),(0,r.jsx)(d.td,{children:"sqlwarning"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"max_connectio"}),(0,r.jsx)(d.td,{children:"optimize"}),(0,r.jsx)(d.td,{children:"redofile"}),(0,r.jsx)(d.td,{children:"schemas"}),(0,r.jsx)(d.td,{children:"sql_after_gti"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"max_queries_p"}),(0,r.jsx)(d.td,{children:"optimizer_cos"}),(0,r.jsx)(d.td,{children:"redo_buffer_s"}),(0,r.jsx)(d.td,{children:"schema_name"}),(0,r.jsx)(d.td,{children:"sql_after_mts"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"max_rows"}),(0,r.jsx)(d.td,{children:"option"}),(0,r.jsx)(d.td,{children:"redundant"}),(0,r.jsx)(d.td,{children:"second"}),(0,r.jsx)(d.td,{children:"sql_before_gt"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"max_size"}),(0,r.jsx)(d.td,{children:"optional"}),(0,r.jsx)(d.td,{children:"reference"}),(0,r.jsx)(d.td,{children:"secondary"}),(0,r.jsx)(d.td,{children:"sql_big_resul"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"max_updates_p"}),(0,r.jsx)(d.td,{children:"optionally"}),(0,r.jsx)(d.td,{children:"references"}),(0,r.jsx)(d.td,{children:"secondary_eng"}),(0,r.jsx)(d.td,{children:"sql_buffer_re"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"max_user_conn"}),(0,r.jsx)(d.td,{children:"options"}),(0,r.jsx)(d.td,{children:"regexp"}),(0,r.jsx)(d.td,{children:"secondary_eng"}),(0,r.jsx)(d.td,{children:"sql_cache"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"medium"}),(0,r.jsx)(d.td,{children:"or"}),(0,r.jsx)(d.td,{children:"registration"}),(0,r.jsx)(d.td,{children:"secondary_loa"}),(0,r.jsx)(d.td,{children:"sql_calc_foun"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"mediumblob"}),(0,r.jsx)(d.td,{children:"order"}),(0,r.jsx)(d.td,{children:"relay"}),(0,r.jsx)(d.td,{children:"secondary_unl"}),(0,r.jsx)(d.td,{children:"sql_no_cache"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"mediumint"}),(0,r.jsx)(d.td,{children:"ordinality"}),(0,r.jsx)(d.td,{children:"relaylog"}),(0,r.jsx)(d.td,{children:"second_micros"}),(0,r.jsx)(d.td,{children:"sql_small_res"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"mediumtext"}),(0,r.jsx)(d.td,{children:"organization"}),(0,r.jsx)(d.td,{children:"relay_log_fil"}),(0,r.jsx)(d.td,{children:"security"}),(0,r.jsx)(d.td,{children:"sql_thread"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"member"}),(0,r.jsx)(d.td,{children:"others"}),(0,r.jsx)(d.td,{children:"relay_log_pos"}),(0,r.jsx)(d.td,{children:"select"}),(0,r.jsx)(d.td,{children:"sql_tsi_day"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"memory"}),(0,r.jsx)(d.td,{children:"out"}),(0,r.jsx)(d.td,{children:"relay_thread"}),(0,r.jsx)(d.td,{children:"sensitive"}),(0,r.jsx)(d.td,{children:"sql_tsi_hour"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"merge"}),(0,r.jsx)(d.td,{children:"outer"}),(0,r.jsx)(d.td,{children:"release"}),(0,r.jsx)(d.td,{children:"separator"}),(0,r.jsx)(d.td,{children:"sql_tsi_minut"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"message_text"}),(0,r.jsx)(d.td,{children:"outfile"}),(0,r.jsx)(d.td,{children:"reload"}),(0,r.jsx)(d.td,{children:"serial"}),(0,r.jsx)(d.td,{children:"sql_tsi_month"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"microsecond"}),(0,r.jsx)(d.td,{children:"over"}),(0,r.jsx)(d.td,{children:"remote"}),(0,r.jsx)(d.td,{children:"serializable"}),(0,r.jsx)(d.td,{children:"sql_tsi_quart"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"middleint"}),(0,r.jsx)(d.td,{children:"owner"}),(0,r.jsx)(d.td,{children:"remove"}),(0,r.jsx)(d.td,{children:"server"}),(0,r.jsx)(d.td,{children:"sql_tsi_secon"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"migrate"}),(0,r.jsx)(d.td,{children:"pack_keys"}),(0,r.jsx)(d.td,{children:"rename"}),(0,r.jsx)(d.td,{children:"session"}),(0,r.jsx)(d.td,{children:"sql_tsi_week"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"minute"}),(0,r.jsx)(d.td,{children:"page"}),(0,r.jsx)(d.td,{children:"reorganize"}),(0,r.jsx)(d.td,{children:"set"}),(0,r.jsx)(d.td,{children:"sql_tsi_year"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"minute_micros"}),(0,r.jsx)(d.td,{children:"parser"}),(0,r.jsx)(d.td,{children:"repair"}),(0,r.jsx)(d.td,{children:"share"}),(0,r.jsx)(d.td,{children:"srid"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"minute_second"}),(0,r.jsx)(d.td,{children:"partial"}),(0,r.jsx)(d.td,{children:"repeat"}),(0,r.jsx)(d.td,{children:"show"}),(0,r.jsx)(d.td,{children:"ssl"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"min_rows"}),(0,r.jsx)(d.td,{children:"partition"}),(0,r.jsx)(d.td,{children:"repeatable"}),(0,r.jsx)(d.td,{children:"shutdown"}),(0,r.jsx)(d.td,{children:"stacked"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"mod"}),(0,r.jsx)(d.td,{children:"partitioning"}),(0,r.jsx)(d.td,{children:"replace"}),(0,r.jsx)(d.td,{children:"signal"}),(0,r.jsx)(d.td,{children:"start"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"mode"}),(0,r.jsx)(d.td,{children:"partitions"}),(0,r.jsx)(d.td,{children:"replica"}),(0,r.jsx)(d.td,{children:"signed"}),(0,r.jsx)(d.td,{children:"starting"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"modifies"}),(0,r.jsx)(d.td,{children:"password"}),(0,r.jsx)(d.td,{children:"replicas"}),(0,r.jsx)(d.td,{children:"simple"}),(0,r.jsx)(d.td,{children:"starts"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"modify"}),(0,r.jsx)(d.td,{children:"password_lock"}),(0,r.jsxs)(d.td,{children:["replicate",(0,r.jsx)(d.em,{children:"do"})]}),(0,r.jsx)(d.td,{children:"skip"}),(0,r.jsx)(d.td,{children:"stats_auto_re"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"month"}),(0,r.jsx)(d.td,{children:"path"}),(0,r.jsxs)(d.td,{children:["replicate",(0,r.jsx)(d.em,{children:"do"})]}),(0,r.jsx)(d.td,{children:"slave"}),(0,r.jsx)(d.td,{children:"stats_persist"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"multilinestri"}),(0,r.jsx)(d.td,{children:"percent_rank"}),(0,r.jsx)(d.td,{children:"replicate_ign"}),(0,r.jsx)(d.td,{children:"slow"}),(0,r.jsxs)(d.td,{children:["stats",(0,r.jsx)(d.em,{children:"sample"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"multipoint"}),(0,r.jsx)(d.td,{children:"persist"}),(0,r.jsx)(d.td,{children:"replicate_ign"}),(0,r.jsx)(d.td,{children:"smallint"}),(0,r.jsx)(d.td,{children:"status"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"multipolygon"}),(0,r.jsx)(d.td,{children:"persist_only"}),(0,r.jsx)(d.td,{children:"replicate_rew"}),(0,r.jsx)(d.td,{children:"snapshot"}),(0,r.jsx)(d.td,{children:"stop"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"mutex"}),(0,r.jsx)(d.td,{children:"phase"}),(0,r.jsx)(d.td,{children:"replicate_wil"}),(0,r.jsx)(d.td,{children:"socket"}),(0,r.jsx)(d.td,{children:"storage"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"mysql_errno"}),(0,r.jsx)(d.td,{children:"plugin"}),(0,r.jsx)(d.td,{children:"replicate_wil"}),(0,r.jsx)(d.td,{children:"some"}),(0,r.jsx)(d.td,{children:"stored"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"name"}),(0,r.jsx)(d.td,{children:"plugins"}),(0,r.jsx)(d.td,{children:"replication"}),(0,r.jsx)(d.td,{children:"soname"}),(0,r.jsx)(d.td,{children:"straight_join"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"names"}),(0,r.jsx)(d.td,{children:"plugin_dir"}),(0,r.jsx)(d.td,{children:"require"}),(0,r.jsx)(d.td,{children:"sounds"}),(0,r.jsx)(d.td,{children:"stream"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"national"}),(0,r.jsx)(d.td,{children:"point"}),(0,r.jsx)(d.td,{children:"require_row_f"}),(0,r.jsx)(d.td,{children:"source"}),(0,r.jsx)(d.td,{children:"string"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"natural"}),(0,r.jsx)(d.td,{children:"polygon"}),(0,r.jsx)(d.td,{children:"reset"}),(0,r.jsx)(d.td,{children:"source_auto_p"}),(0,r.jsx)(d.td,{children:"subclass_orig"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"nchar"}),(0,r.jsx)(d.td,{children:"port"}),(0,r.jsx)(d.td,{children:"resignal"}),(0,r.jsx)(d.td,{children:"source_bind"}),(0,r.jsx)(d.td,{children:"subject"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"ndb"}),(0,r.jsx)(d.td,{children:"precedes"}),(0,r.jsx)(d.td,{children:"resource"}),(0,r.jsx)(d.td,{children:"source_compre"}),(0,r.jsx)(d.td,{children:"subpartition"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"ndbcluster"}),(0,r.jsx)(d.td,{children:"preceding"}),(0,r.jsx)(d.td,{children:"respect"}),(0,r.jsx)(d.td,{children:"source_connec"}),(0,r.jsx)(d.td,{children:"subpartitions"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"nested"}),(0,r.jsx)(d.td,{children:"precision"}),(0,r.jsx)(d.td,{children:"restart"}),(0,r.jsx)(d.td,{children:"source_delay"}),(0,r.jsx)(d.td,{children:"super"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"network_names"}),(0,r.jsx)(d.td,{children:"prepare"}),(0,r.jsx)(d.td,{children:"restore"}),(0,r.jsx)(d.td,{children:"source_heartb"}),(0,r.jsx)(d.td,{children:"suspend"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"swaps"}),(0,r.jsx)(d.td,{children:"timestampdiff"}),(0,r.jsx)(d.td,{children:"undo_buffer_s"}),(0,r.jsx)(d.td,{children:"utc_date"}),(0,r.jsx)(d.td,{children:"when"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"switches"}),(0,r.jsx)(d.td,{children:"tinyblob"}),(0,r.jsx)(d.td,{children:"unicode"}),(0,r.jsx)(d.td,{children:"utc_time"}),(0,r.jsx)(d.td,{children:"where"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"system"}),(0,r.jsx)(d.td,{children:"tinyint"}),(0,r.jsx)(d.td,{children:"uninstall"}),(0,r.jsx)(d.td,{children:"utc_timestamp"}),(0,r.jsx)(d.td,{children:"while"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"table"}),(0,r.jsx)(d.td,{children:"tinytext"}),(0,r.jsx)(d.td,{children:"union"}),(0,r.jsx)(d.td,{children:"validation"}),(0,r.jsx)(d.td,{children:"window"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"tables"}),(0,r.jsx)(d.td,{children:"tls"}),(0,r.jsx)(d.td,{children:"unique"}),(0,r.jsx)(d.td,{children:"value"}),(0,r.jsx)(d.td,{children:"with"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"tablespace"}),(0,r.jsx)(d.td,{children:"to"}),(0,r.jsx)(d.td,{children:"unknown"}),(0,r.jsx)(d.td,{children:"values"}),(0,r.jsx)(d.td,{children:"without"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"table_checksu"}),(0,r.jsx)(d.td,{children:"trailing"}),(0,r.jsx)(d.td,{children:"unlock"}),(0,r.jsx)(d.td,{children:"varbinary"}),(0,r.jsx)(d.td,{children:"work"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"table_name"}),(0,r.jsx)(d.td,{children:"transaction"}),(0,r.jsx)(d.td,{children:"unregister"}),(0,r.jsx)(d.td,{children:"varchar"}),(0,r.jsx)(d.td,{children:"wrapper"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"temporary"}),(0,r.jsx)(d.td,{children:"trigger"}),(0,r.jsx)(d.td,{children:"unsigned"}),(0,r.jsx)(d.td,{children:"varcharacter"}),(0,r.jsx)(d.td,{children:"write"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"temptable"}),(0,r.jsx)(d.td,{children:"triggers"}),(0,r.jsx)(d.td,{children:"until"}),(0,r.jsx)(d.td,{children:"variables"}),(0,r.jsx)(d.td,{children:"x509"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"terminated"}),(0,r.jsx)(d.td,{children:"true"}),(0,r.jsx)(d.td,{children:"update"}),(0,r.jsx)(d.td,{children:"varying"}),(0,r.jsx)(d.td,{children:"xa"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"text"}),(0,r.jsx)(d.td,{children:"truncate"}),(0,r.jsx)(d.td,{children:"upgrade"}),(0,r.jsx)(d.td,{children:"vcpu"}),(0,r.jsx)(d.td,{children:"xid"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"than"}),(0,r.jsx)(d.td,{children:"type"}),(0,r.jsx)(d.td,{children:"url"}),(0,r.jsx)(d.td,{children:"view"}),(0,r.jsx)(d.td,{children:"xml"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"then"}),(0,r.jsx)(d.td,{children:"types"}),(0,r.jsx)(d.td,{children:"usage"}),(0,r.jsx)(d.td,{children:"virtual"}),(0,r.jsx)(d.td,{children:"xor"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"thread_priori"}),(0,r.jsx)(d.td,{children:"unbounded"}),(0,r.jsx)(d.td,{children:"use"}),(0,r.jsx)(d.td,{children:"visible"}),(0,r.jsx)(d.td,{children:"year"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"ties"}),(0,r.jsx)(d.td,{children:"uncommitted"}),(0,r.jsx)(d.td,{children:"user"}),(0,r.jsx)(d.td,{children:"wait"}),(0,r.jsx)(d.td,{children:"year_month"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"time"}),(0,r.jsx)(d.td,{children:"undefined"}),(0,r.jsx)(d.td,{children:"user_resource"}),(0,r.jsx)(d.td,{children:"warnings"}),(0,r.jsx)(d.td,{children:"zerofill"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"timestamp"}),(0,r.jsx)(d.td,{children:"undo"}),(0,r.jsx)(d.td,{children:"use_frm"}),(0,r.jsx)(d.td,{children:"week"}),(0,r.jsx)(d.td,{children:"zone"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"timestampadd"}),(0,r.jsx)(d.td,{children:"undofile"}),(0,r.jsx)(d.td,{children:"using"}),(0,r.jsx)(d.td,{children:"weight_string"}),(0,r.jsx)(d.td,{})]})]})]}),"\n",(0,r.jsx)(d.h2,{id:"changelog",children:"Changelog"}),"\n",(0,r.jsx)(d.p,{children:"The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed."}),"\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.strong,{children:"Proceed with caution when editing materializations created with previous versions of this connector;\nediting always upgrades your materialization to the latest connector version."})}),"\n",(0,r.jsx)(d.h4,{id:"v1-2023-08-21",children:"V1: 2023-08-21"}),"\n",(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsx)(d.li,{children:"First version"}),"\n"]})]})}function x(e={}){const{wrapper:d}={...(0,n.R)(),...e.components};return d?(0,r.jsx)(d,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},28453:(e,d,s)=>{s.d(d,{R:()=>i,x:()=>l});var r=s(96540);const n={},t=r.createContext(n);function i(e){const d=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function l(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(t.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/986b9943.fb5e319e.js b/pr-preview/pr-1594/assets/js/986b9943.fb5e319e.js deleted file mode 100644 index d7cd56ec76..0000000000 --- a/pr-preview/pr-1594/assets/js/986b9943.fb5e319e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[185],{51008:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>d,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>a});var r=n(74848),i=n(28453);const s={},d="TikTok Marketing",c={id:"reference/Connectors/capture-connectors/tiktok",title:"TikTok Marketing",description:"This connector captures data from TikTok marketing campaigns and ads into Flow collections via the TikTok API for Business. It supports production as well as sandbox accounts.",source:"@site/docs/reference/Connectors/capture-connectors/tiktok.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/tiktok",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/tiktok.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Survey Monkey",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey"},next:{title:"Twilio",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio"}},o={},a=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"OAuth authentication in the web app (production accounts)",id:"oauth-authentication-in-the-web-app-production-accounts",level:3},{value:"Sandbox access token authentication in the web app or CLI",id:"sandbox-access-token-authentication-in-the-web-app-or-cli",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Report aggregation",id:"report-aggregation",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"tiktok-marketing",children:"TikTok Marketing"}),"\n",(0,r.jsxs)(t.p,{children:["This connector captures data from TikTok marketing campaigns and ads into Flow collections via the ",(0,r.jsx)(t.a,{href:"https://ads.tiktok.com/marketing_api/docs",children:"TikTok API for Business"}),". It supports production as well as ",(0,r.jsx)(t.a,{href:"https://ads.tiktok.com/marketing_api/docs?id=1738855331457026",children:"sandbox"})," accounts."]}),"\n",(0,r.jsxs)(t.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(t.a,{href:"https://ghcr.io/estuary/source-tiktok-marketing:dev",children:(0,r.jsx)(t.code,{children:"ghcr.io/estuary/source-tiktok-marketing:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsxs)(t.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.jsx)(t.a,{href:"https://docs.airbyte.com/integrations/sources/tiktok-marketing",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,r.jsx)(t.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,r.jsx)(t.p,{children:"The following data resources are supported:"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Resource"}),(0,r.jsx)(t.th,{children:"Production"}),(0,r.jsx)(t.th,{children:"Sandbox"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Advertisers"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Ad Groups"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Ads"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Campaigns"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Ads Reports Hourly"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Ads Reports Daily"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Ads Reports Lifetime"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Advertisers Reports Hourly"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Advertisers Reports Daily"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Advertisers Reports Lifetime"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Ad Groups Reports Hourly"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Ad Groups Reports Daily"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Ad Groups Reports Lifetime"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Campaigns Reports Hourly"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Campaigns Reports Daily"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Campaigns Reports Lifetime"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Advertisers Audience Reports Hourly"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Advertisers Audience Reports Daily"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Advertisers Audience Reports Lifetime"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Ad Group Audience Reports Hourly"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Ad Group Audience Reports Daily"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Ads Audience Reports Hourly"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Ads Audience Reports Daily"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Campaigns Audience Reports By Country Hourly"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Campaigns Audience Reports By Country Daily"}),(0,r.jsx)(t.td,{children:"X"}),(0,r.jsx)(t.td,{children:"X"})]})]})]}),"\n",(0,r.jsx)(t.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,r.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(t.p,{children:["Prerequisites differ depending on whether you have a production or ",(0,r.jsx)(t.a,{href:"https://ads.tiktok.com/marketing_api/docs?id=1738855331457026",children:"sandbox"}),"\nTikTok for Business account, and on whether you'll use the Flow web app or the flowctl CLI."]}),"\n",(0,r.jsx)(t.h3,{id:"oauth-authentication-in-the-web-app-production-accounts",children:"OAuth authentication in the web app (production accounts)"}),"\n",(0,r.jsx)(t.p,{children:"If you have a TikTok marketing account in production and will use the Flow web app, you'll be able to quickly log in using OAuth."}),"\n",(0,r.jsx)(t.p,{children:"You'll need:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["A ",(0,r.jsx)(t.a,{href:"https://ads.tiktok.com/marketing_api/docs?rid=fgvgaumno25&id=1702715936951297",children:"TikTok for Business account"})," with one or more active campaigns."]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Note the username and password used to sign into this account"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"sandbox-access-token-authentication-in-the-web-app-or-cli",children:"Sandbox access token authentication in the web app or CLI"}),"\n",(0,r.jsx)(t.p,{children:"If you're working in a Sandbox TikTok for Business account, you'll authenticate with an access token in both the web app and CLI."}),"\n",(0,r.jsx)(t.p,{children:"You'll need:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["A ",(0,r.jsx)(t.a,{href:"https://ads.tiktok.com/marketing_api/docs?rid=fgvgaumno25&id=1702715936951297",children:"TikTok for Business account"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["A ",(0,r.jsx)(t.a,{href:"https://ads.tiktok.com/marketing_api/docs?rid=fgvgaumno25&id=1701890920013825",children:"Sandbox account"})," created under an existing\n",(0,r.jsx)(t.a,{href:"https://ads.tiktok.com/marketing_api/docs?rid=fgvgaumno25&id=1702716474845185",children:"developer application"}),"."]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Generate an access token and note the advertiser ID for the Sandbox."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(t.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the TikTok Marketing source connector."]}),"\n",(0,r.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(t.p,{children:["The properties in the table below reflect the manual authentication method for Sandbox accounts.\nIf you're using a production account, you'll use ",(0,r.jsx)(t.a,{href:"#oauth-authentication-in-the-web-app-production-accounts",children:"OAuth2"})," to authenticate in the Flow web app,\nso many of these properties aren't required."]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/credentials"})})}),(0,r.jsx)(t.td,{children:"Authentication Method"}),(0,r.jsx)(t.td,{children:"Authentication method"}),(0,r.jsx)(t.td,{children:"object"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/credentials/auth_type"})})}),(0,r.jsx)(t.td,{children:"Authentication type"}),(0,r.jsxs)(t.td,{children:["Set to ",(0,r.jsx)(t.code,{children:"sandbox_access_token"})," to manually authenticate a Sandbox."]}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/credentials/advertiser_id"})}),(0,r.jsx)(t.td,{children:"Advertiser ID"}),(0,r.jsx)(t.td,{children:"The Advertiser ID generated for the developer's Sandbox application."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/credentials/access_token"})}),(0,r.jsx)(t.td,{children:"Access Token"}),(0,r.jsx)(t.td,{children:"The long-term authorized access token."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/end_date"})}),(0,r.jsx)(t.td,{children:"End Date"}),(0,r.jsxs)(t.td,{children:["The date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DD. All data generated between ",(0,r.jsx)(t.code,{children:"start_date"})," and this date will be replicated. Not setting this option will result in always syncing the data till the current date."]}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/report_granularity"})}),(0,r.jsx)(t.td,{children:"Report Aggregation Granularity"}),(0,r.jsxs)(t.td,{children:["The granularity used for ",(0,r.jsx)(t.a,{href:"#report-aggregation",children:"aggregating performance data in reports"}),". Choose ",(0,r.jsx)(t.code,{children:"DAY"}),", ",(0,r.jsx)(t.code,{children:"LIFETIME"}),", or ",(0,r.jsx)(t.code,{children:"HOUR"}),"."]}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/start_date"})}),(0,r.jsx)(t.td,{children:"Start Date"}),(0,r.jsx)(t.td,{children:"Replication Start Date"}),(0,r.jsx)(t.td,{children:"The Start Date in format: YYYY-MM-DD. Any data before this date will not be replicated. If this parameter is not set, all data will be replicated."}),(0,r.jsx)(t.td,{children:"string"})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/stream"})})}),(0,r.jsx)(t.td,{children:"Stream"}),(0,r.jsx)(t.td,{children:"TikTok resource from which a collection is captured."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/syncMode"})})}),(0,r.jsx)(t.td,{children:"Sync Mode"}),(0,r.jsx)(t.td,{children:"Connection method."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(t.p,{children:"This sample specification reflects the access token method for Sandbox accounts."}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-tiktok-marketing:dev\n config:\n credentials:\n auth_type: sandbox_access_token\n access_token: {secret}\n advertiser_id: {secret}\n end_date: 2022-01-01\n report_granularity: DAY\n start_date: 2020-01-01\n bindings:\n - resource:\n stream: campaigns\n syncMode: incremental\n target: ${PREFIX}/campaigns\n {...}\n"})}),"\n",(0,r.jsx)(t.h2,{id:"report-aggregation",children:"Report aggregation"}),"\n",(0,r.jsxs)(t.p,{children:["Many of the ",(0,r.jsx)(t.a,{href:"#supported-data-resources",children:"resources"})," this connector supports are reports.\nData in these reports is aggregated into rows based on the granularity you select in the ",(0,r.jsx)(t.a,{href:"#endpoint",children:"configuration"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"You can choose hourly, daily, or lifetime granularity. For example, if you choose daily granularity, the report will contain one row for each day."})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>d,x:()=>c});var r=n(96540);const i={},s=r.createContext(i);function d(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9b515b04.fad6a0cb.js b/pr-preview/pr-1594/assets/js/9b515b04.fad6a0cb.js deleted file mode 100644 index 599389ff81..0000000000 --- a/pr-preview/pr-1594/assets/js/9b515b04.fad6a0cb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3101],{78551:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Overview","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Who should use Flow?","href":"/pr-preview/pr-1594/overview/who-should-use-flow","docId":"overview/who-should-use-flow","unlisted":false},{"type":"link","label":"Comparisons","href":"/pr-preview/pr-1594/overview/comparisons","docId":"overview/comparisons","unlisted":false}],"href":"/pr-preview/pr-1594/"},{"type":"category","label":"Get started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Registration and setup","href":"/pr-preview/pr-1594/getting-started/installation","docId":"getting-started/installation","unlisted":false},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"PostgreSQL CDC streaming to Snowflake","href":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake","docId":"getting-started/tutorials/postgresql_cdc_to_snowflake","unlisted":false},{"type":"link","label":"Real-time CDC with MongoDB","href":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb","docId":"getting-started/tutorials/real_time_cdc_with_mongodb","unlisted":false},{"type":"link","label":"Create your first dataflow with Amazon S3 and Snowflake","href":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake","docId":"getting-started/tutorials/dataflow-s3-snowflake","unlisted":false},{"type":"link","label":"Create a real-time materialized view in PostgreSQL","href":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view","docId":"getting-started/tutorials/continuous-materialized-view","unlisted":false},{"type":"link","label":"Implementing Derivations for AcmeBank","href":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank","docId":"getting-started/tutorials/derivations_acmebank","unlisted":false}],"href":"/pr-preview/pr-1594/getting-started/tutorials/"}]},{"type":"category","label":"User guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Create a basic Data Flow","href":"/pr-preview/pr-1594/guides/create-dataflow","docId":"guides/create-dataflow","unlisted":false},{"type":"category","label":"Create a Data Flow for specific systems","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Google Cloud Firestore to Snowflake","href":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh","docId":"guides/system-specific-dataflows/firestore-to-dwh","unlisted":false},{"type":"link","label":"Amazon S3 to Snowflake","href":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake","docId":"guides/system-specific-dataflows/s3-to-snowflake","unlisted":false}],"href":"/pr-preview/pr-1594/guides/system-specific-dataflows/"},{"type":"link","label":"Edit Data Flows in the web app","href":"/pr-preview/pr-1594/guides/edit-data-flows","docId":"guides/edit-data-flows","unlisted":false},{"type":"category","label":"Use flowctl","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Edit a Flow specification locally","href":"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally","docId":"guides/flowctl/edit-specification-locally","unlisted":false},{"type":"link","label":"Edit a draft created in the web app","href":"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp","docId":"guides/flowctl/edit-draft-from-webapp","unlisted":false},{"type":"link","label":"Create a derivation with flowctl","href":"/pr-preview/pr-1594/guides/flowctl/create-derivation","docId":"guides/flowctl/create-derivation","unlisted":false},{"type":"link","label":"Troubleshoot a task with flowctl","href":"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task","docId":"guides/flowctl/troubleshoot-task","unlisted":false}],"href":"/pr-preview/pr-1594/guides/flowctl/"},{"type":"link","label":"Configure connections with SSH tunneling","href":"/pr-preview/pr-1594/guides/connect-network","docId":"guides/connect-network","unlisted":false},{"type":"link","label":"Customize materialized fields","href":"/pr-preview/pr-1594/guides/customize-materialization-fields","docId":"guides/customize-materialization-fields","unlisted":false},{"type":"link","label":"Connecting to Estuary Flow from Kafka using Dekaf","href":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka","docId":"guides/dekaf_reading_collections_from_kafka","unlisted":false},{"type":"link","label":"How to transform data using SQL","href":"/pr-preview/pr-1594/guides/derivation_tutorial_sql","docId":"guides/derivation_tutorial_sql","unlisted":false},{"type":"link","label":"How to join two collections (TypeScript)","href":"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript","docId":"guides/howto_join_two_collections_typescript","unlisted":false},{"type":"link","label":"Schema evolution","href":"/pr-preview/pr-1594/guides/schema-evolution","docId":"guides/schema-evolution","unlisted":false},{"type":"link","label":"How to transform data using TypeScript","href":"/pr-preview/pr-1594/guides/transform_data_using_typescript","docId":"guides/transform_data_using_typescript","unlisted":false}],"href":"/pr-preview/pr-1594/guides/"},{"type":"category","label":"Concepts","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Catalog","href":"/pr-preview/pr-1594/concepts/catalogs","docId":"concepts/catalogs","unlisted":false},{"type":"link","label":"Captures","href":"/pr-preview/pr-1594/concepts/captures","docId":"concepts/captures","unlisted":false},{"type":"link","label":"Collections","href":"/pr-preview/pr-1594/concepts/collections","docId":"concepts/collections","unlisted":false},{"type":"link","label":"Materializations","href":"/pr-preview/pr-1594/concepts/materialization","docId":"concepts/materialization","unlisted":false},{"type":"link","label":"Connectors","href":"/pr-preview/pr-1594/concepts/connectors","docId":"concepts/connectors","unlisted":false},{"type":"link","label":"Derivations","href":"/pr-preview/pr-1594/concepts/derivations","docId":"concepts/derivations","unlisted":false},{"type":"link","label":"Web application","href":"/pr-preview/pr-1594/concepts/web-app","docId":"concepts/web-app","unlisted":false},{"type":"link","label":"flowctl","href":"/pr-preview/pr-1594/concepts/flowctl","docId":"concepts/flowctl","unlisted":false},{"type":"link","label":"Imports","href":"/pr-preview/pr-1594/concepts/import","docId":"concepts/import","unlisted":false},{"type":"link","label":"Schemas","href":"/pr-preview/pr-1594/concepts/schemas","docId":"concepts/schemas","unlisted":false},{"type":"link","label":"Storage mappings","href":"/pr-preview/pr-1594/concepts/storage-mappings","docId":"concepts/storage-mappings","unlisted":false},{"type":"link","label":"Tests","href":"/pr-preview/pr-1594/concepts/tests","docId":"concepts/tests","unlisted":false},{"type":"category","label":"Advanced concepts","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Schema evolution","href":"/pr-preview/pr-1594/concepts/advanced/evolutions","docId":"concepts/advanced/evolutions","unlisted":false},{"type":"link","label":"Journals","href":"/pr-preview/pr-1594/concepts/advanced/journals","docId":"concepts/advanced/journals","unlisted":false},{"type":"link","label":"Logs and statistics","href":"/pr-preview/pr-1594/concepts/advanced/logs-stats","docId":"concepts/advanced/logs-stats","unlisted":false},{"type":"link","label":"Projections","href":"/pr-preview/pr-1594/concepts/advanced/projections","docId":"concepts/advanced/projections","unlisted":false},{"type":"link","label":"Task shards","href":"/pr-preview/pr-1594/concepts/advanced/shards","docId":"concepts/advanced/shards","unlisted":false}]}],"href":"/pr-preview/pr-1594/concepts/"},{"type":"category","label":"Reference","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Connectors","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Capture connectors","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Aircall","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall","docId":"reference/Connectors/capture-connectors/aircall","unlisted":false},{"type":"link","label":"Airtable","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable","docId":"reference/Connectors/capture-connectors/airtable","unlisted":false},{"type":"link","label":"AlloyDB","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb","docId":"reference/Connectors/capture-connectors/alloydb","unlisted":false},{"type":"link","label":"Alpaca","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca","docId":"reference/Connectors/capture-connectors/alpaca","unlisted":false},{"type":"link","label":"Amazon Ads","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads","docId":"reference/Connectors/capture-connectors/amazon-ads","unlisted":false},{"type":"link","label":"Amazon DynamoDB","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb","docId":"reference/Connectors/capture-connectors/amazon-dynamodb","unlisted":false},{"type":"link","label":"Amazon Kinesis","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis","docId":"reference/Connectors/capture-connectors/amazon-kinesis","unlisted":false},{"type":"link","label":"Amazon Redshift","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift","docId":"reference/Connectors/capture-connectors/amazon-redshift","unlisted":false},{"type":"link","label":"Amazon S3","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3","docId":"reference/Connectors/capture-connectors/amazon-s3","unlisted":false},{"type":"link","label":"Amazon SQS","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs","docId":"reference/Connectors/capture-connectors/amazon-sqs","unlisted":false},{"type":"link","label":"Amplitude","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude","docId":"reference/Connectors/capture-connectors/amplitude","unlisted":false},{"type":"link","label":"Apache Kafka","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka","docId":"reference/Connectors/capture-connectors/apache-kafka","unlisted":false},{"type":"link","label":"Azure Blob Storage","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage","docId":"reference/Connectors/capture-connectors/azure-blob-storage","unlisted":false},{"type":"link","label":"BigQuery Batch Query Connector","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch","docId":"reference/Connectors/capture-connectors/bigquery-batch","unlisted":false},{"type":"link","label":"Bing Ads","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads","docId":"reference/Connectors/capture-connectors/bing-ads","unlisted":false},{"type":"link","label":"Braintree","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree","docId":"reference/Connectors/capture-connectors/braintree","unlisted":false},{"type":"link","label":"Braze","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze","docId":"reference/Connectors/capture-connectors/braze","unlisted":false},{"type":"link","label":"Chargebee","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee","docId":"reference/Connectors/capture-connectors/chargebee","unlisted":false},{"type":"link","label":"Confluence","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence","docId":"reference/Connectors/capture-connectors/confluence","unlisted":false},{"type":"link","label":"Datadog HTTP Ingest (Webhook)","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest","docId":"reference/Connectors/capture-connectors/datadog-ingest","unlisted":false},{"type":"link","label":"Dropbox","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox","docId":"reference/Connectors/capture-connectors/dropbox","unlisted":false},{"type":"link","label":"Exchange Rates API","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates","docId":"reference/Connectors/capture-connectors/exchange-rates","unlisted":false},{"type":"link","label":"Facebook Marketing","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing","docId":"reference/Connectors/capture-connectors/facebook-marketing","unlisted":false},{"type":"link","label":"Freshdesk","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk","docId":"reference/Connectors/capture-connectors/freshdesk","unlisted":false},{"type":"link","label":"Google Cloud Storage","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs","docId":"reference/Connectors/capture-connectors/gcs","unlisted":false},{"type":"link","label":"GitHub","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github","docId":"reference/Connectors/capture-connectors/github","unlisted":false},{"type":"link","label":"GitLab","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab","docId":"reference/Connectors/capture-connectors/gitlab","unlisted":false},{"type":"link","label":"Gladly","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly","docId":"reference/Connectors/capture-connectors/gladly","unlisted":false},{"type":"link","label":"Google Ads","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads","docId":"reference/Connectors/capture-connectors/google-ads","unlisted":false},{"type":"link","label":"Google Analytics UA","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics","docId":"reference/Connectors/capture-connectors/google-analytics","unlisted":false},{"type":"link","label":"Google Analytics 4","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4","docId":"reference/Connectors/capture-connectors/google-analytics-4","unlisted":false},{"type":"link","label":"Google Drive","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive","docId":"reference/Connectors/capture-connectors/google-drive","unlisted":false},{"type":"link","label":"Google Firestore","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore","docId":"reference/Connectors/capture-connectors/google-firestore","unlisted":false},{"type":"link","label":"Google Cloud Pub/Sub","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub","docId":"reference/Connectors/capture-connectors/google-pubsub","unlisted":false},{"type":"link","label":"Google Search Console","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console","docId":"reference/Connectors/capture-connectors/google-search-console","unlisted":false},{"type":"link","label":"Google Sheets","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets","docId":"reference/Connectors/capture-connectors/google-sheets","unlisted":false},{"type":"link","label":"Greenhouse","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse","docId":"reference/Connectors/capture-connectors/greenhouse","unlisted":false},{"type":"link","label":"Harvest","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest","docId":"reference/Connectors/capture-connectors/harvest","unlisted":false},{"type":"link","label":"HTTP File","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file","docId":"reference/Connectors/capture-connectors/http-file","unlisted":false},{"type":"link","label":"HTTP Ingest (Webhook)","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest","docId":"reference/Connectors/capture-connectors/http-ingest","unlisted":false},{"type":"link","label":"Hubspot","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot","docId":"reference/Connectors/capture-connectors/hubspot","unlisted":false},{"type":"link","label":"HubSpot ( Real-Time )","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time","docId":"reference/Connectors/capture-connectors/hubspot-real-time","unlisted":false},{"type":"link","label":"Instagram","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram","docId":"reference/Connectors/capture-connectors/instagram","unlisted":false},{"type":"link","label":"Intercom","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom","docId":"reference/Connectors/capture-connectors/intercom","unlisted":false},{"type":"link","label":"Intercom HTTP Ingest (Webhook)","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest","docId":"reference/Connectors/capture-connectors/intercom-ingest","unlisted":false},{"type":"link","label":"Iterable","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable","docId":"reference/Connectors/capture-connectors/iterable","unlisted":false},{"type":"link","label":"Jira","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira","docId":"reference/Connectors/capture-connectors/jira","unlisted":false},{"type":"link","label":"Jira HTTP Ingest (Webhook)","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest","docId":"reference/Connectors/capture-connectors/jira-ingest","unlisted":false},{"type":"link","label":"Klaviyo","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo","docId":"reference/Connectors/capture-connectors/klaviyo","unlisted":false},{"type":"link","label":"LinkedIn Ads","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads","docId":"reference/Connectors/capture-connectors/linkedin-ads","unlisted":false},{"type":"link","label":"LinkedIn Pages","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages","docId":"reference/Connectors/capture-connectors/linkedin-pages","unlisted":false},{"type":"link","label":"Mailchimp","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp","docId":"reference/Connectors/capture-connectors/mailchimp","unlisted":false},{"type":"category","label":"MariaDB","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Amazon RDS for MariaDB","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb","docId":"reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/"},{"type":"link","label":"Marketo","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo","docId":"reference/Connectors/capture-connectors/marketo","unlisted":false},{"type":"category","label":"Microsoft SQL Server","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Amazon RDS for SQL Server","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver","docId":"reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver","unlisted":false},{"type":"link","label":"Google Cloud SQL for SQL Server","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver","docId":"reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/"},{"type":"link","label":"MixPanel","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel","docId":"reference/Connectors/capture-connectors/mixpanel","unlisted":false},{"type":"link","label":"MongoDB","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb","docId":"reference/Connectors/capture-connectors/mongodb","unlisted":false},{"type":"category","label":"MySQL","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Amazon RDS for MySQL","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql","docId":"reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql","unlisted":false},{"type":"link","label":"Google Cloud SQL for MySQL","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql","docId":"reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql","unlisted":false},{"type":"link","label":"MySQL Batch Query Connector","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch","docId":"reference/Connectors/capture-connectors/MySQL/mysql-batch","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/"},{"type":"link","label":"NetSuite SuiteAnalytics Connect","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics","docId":"reference/Connectors/capture-connectors/netsuite-suiteanalytics","unlisted":false},{"type":"link","label":"NetSuite SuiteTalk REST","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk","docId":"reference/Connectors/capture-connectors/netsuite-suitetalk","unlisted":false},{"type":"link","label":"Notion","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion","docId":"reference/Connectors/capture-connectors/notion","unlisted":false},{"type":"category","label":"OracleDB","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"OracleDB (Flashback)","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback","docId":"reference/Connectors/capture-connectors/OracleDB/flashback","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/"},{"type":"link","label":"Paypal Transaction","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction","docId":"reference/Connectors/capture-connectors/paypal-transaction","unlisted":false},{"type":"link","label":"Pendo","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo","docId":"reference/Connectors/capture-connectors/pendo","unlisted":false},{"type":"link","label":"Pinterest","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest","docId":"reference/Connectors/capture-connectors/pinterest","unlisted":false},{"type":"category","label":"PostgreSQL","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Supabase","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase","docId":"reference/Connectors/capture-connectors/PostgreSQL/Supabase","unlisted":false},{"type":"link","label":"Amazon RDS for PostgreSQL","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres","docId":"reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres","unlisted":false},{"type":"link","label":"Google Cloud SQL for PostgreSQL","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres","docId":"reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres","unlisted":false},{"type":"link","label":"Neon PostgreSQL","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres","docId":"reference/Connectors/capture-connectors/PostgreSQL/neon-postgres","unlisted":false},{"type":"link","label":"PostgreSQL Batch Query Connector","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch","docId":"reference/Connectors/capture-connectors/PostgreSQL/postgres-batch","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/"},{"type":"link","label":"Recharge","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge","docId":"reference/Connectors/capture-connectors/recharge","unlisted":false},{"type":"category","label":"Salesforce","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Salesforce \u2014 Historical data","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data","docId":"reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data","unlisted":false},{"type":"link","label":"Salesforce \u2014 Real-time data","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time","docId":"reference/Connectors/capture-connectors/Salesforce/salesforce-real-time","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/"},{"type":"link","label":"SendGrid","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid","docId":"reference/Connectors/capture-connectors/sendgrid","unlisted":false},{"type":"link","label":"Sentry","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry","docId":"reference/Connectors/capture-connectors/sentry","unlisted":false},{"type":"link","label":"SFTP","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp","docId":"reference/Connectors/capture-connectors/sftp","unlisted":false},{"type":"link","label":"Slack","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack","docId":"reference/Connectors/capture-connectors/slack","unlisted":false},{"type":"link","label":"Snapchat Marketing","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat","docId":"reference/Connectors/capture-connectors/snapchat","unlisted":false},{"type":"link","label":"Snowflake CDC Connector","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake","docId":"reference/Connectors/capture-connectors/snowflake","unlisted":false},{"type":"link","label":"Stripe","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe","docId":"reference/Connectors/capture-connectors/stripe","unlisted":false},{"type":"link","label":"Survey Monkey","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey","docId":"reference/Connectors/capture-connectors/survey-monkey","unlisted":false},{"type":"link","label":"TikTok Marketing","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok","docId":"reference/Connectors/capture-connectors/tiktok","unlisted":false},{"type":"link","label":"Twilio","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio","docId":"reference/Connectors/capture-connectors/twilio","unlisted":false},{"type":"link","label":"WooCommerce","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce","docId":"reference/Connectors/capture-connectors/woocommerce","unlisted":false},{"type":"link","label":"YouTube Analytics","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics","docId":"reference/Connectors/capture-connectors/youtube-analytics","unlisted":false},{"type":"link","label":"Zendesk Chat","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat","docId":"reference/Connectors/capture-connectors/zendesk-chat","unlisted":false},{"type":"link","label":"Zendesk Support","href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support","docId":"reference/Connectors/capture-connectors/zendesk-support","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/"},{"type":"category","label":"Dekaf integrations","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Tinybird","href":"/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird","docId":"reference/Connectors/dekaf/dekaf-tinybird","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/dekaf/"},{"type":"category","label":"Materialization connectors","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"AlloyDB","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb","docId":"reference/Connectors/materialization-connectors/alloydb","unlisted":false},{"type":"link","label":"Amazon DynamoDB","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb","docId":"reference/Connectors/materialization-connectors/amazon-dynamodb","unlisted":false},{"type":"link","label":"Amazon Redshift","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift","docId":"reference/Connectors/materialization-connectors/amazon-redshift","unlisted":false},{"type":"link","label":"CSV Files in Amazon S3","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv","docId":"reference/Connectors/materialization-connectors/amazon-s3-csv","unlisted":false},{"type":"link","label":"Apache Iceberg Tables in Amazon S3","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg","docId":"reference/Connectors/materialization-connectors/amazon-s3-iceberg","unlisted":false},{"type":"link","label":"Apache Parquet Files in Amazon S3","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet","docId":"reference/Connectors/materialization-connectors/amazon-s3-parquet","unlisted":false},{"type":"link","label":"Google BigQuery","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery","docId":"reference/Connectors/materialization-connectors/BigQuery","unlisted":false},{"type":"link","label":"Databricks","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks","docId":"reference/Connectors/materialization-connectors/databricks","unlisted":false},{"type":"link","label":"Elasticsearch","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch","docId":"reference/Connectors/materialization-connectors/Elasticsearch","unlisted":false},{"type":"link","label":"Firebolt","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt","docId":"reference/Connectors/materialization-connectors/Firebolt","unlisted":false},{"type":"link","label":"CSV Files in Google GCS","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv","docId":"reference/Connectors/materialization-connectors/google-gcs-csv","unlisted":false},{"type":"link","label":"Apache Parquet Files in Google GCS","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet","docId":"reference/Connectors/materialization-connectors/google-gcs-parquet","unlisted":false},{"type":"link","label":"Google Cloud Pub/Sub","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub","docId":"reference/Connectors/materialization-connectors/google-pubsub","unlisted":false},{"type":"link","label":"Google Sheets","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets","docId":"reference/Connectors/materialization-connectors/Google-sheets","unlisted":false},{"type":"link","label":"HTTP Webhook","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook","docId":"reference/Connectors/materialization-connectors/http-webhook","unlisted":false},{"type":"category","label":"Microsoft SQLServer","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Amazon RDS for SQL Server","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver","docId":"reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver","unlisted":false},{"type":"link","label":"Google Cloud SQL for SQLServer","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver","docId":"reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/"},{"type":"link","label":"MongoDB","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb","docId":"reference/Connectors/materialization-connectors/mongodb","unlisted":false},{"type":"link","label":"MotherDuck","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck","docId":"reference/Connectors/materialization-connectors/motherduck","unlisted":false},{"type":"category","label":"MySQL","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Amazon RDS for MySQL","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql","docId":"reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql","unlisted":false},{"type":"link","label":"Google Cloud SQL for MySQL","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql","docId":"reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/"},{"type":"link","label":"MySQL HeatWave","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave","docId":"reference/Connectors/materialization-connectors/mysql-heatwave","unlisted":false},{"type":"link","label":"Pinecone","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone","docId":"reference/Connectors/materialization-connectors/pinecone","unlisted":false},{"type":"category","label":"PostgreSQL","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Amazon RDS for PostgreSQL","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres","docId":"reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres","unlisted":false},{"type":"link","label":"Google Cloud SQL for PostgreSQL","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres","docId":"reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/"},{"type":"link","label":"Rockset","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset","docId":"reference/Connectors/materialization-connectors/Rockset","unlisted":false},{"type":"link","label":"Slack","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack","docId":"reference/Connectors/materialization-connectors/slack","unlisted":false},{"type":"link","label":"Snowflake","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake","docId":"reference/Connectors/materialization-connectors/Snowflake","unlisted":false},{"type":"link","label":"SQLite","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite","docId":"reference/Connectors/materialization-connectors/SQLite","unlisted":false},{"type":"link","label":"Starburst","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst","docId":"reference/Connectors/materialization-connectors/starburst","unlisted":false},{"type":"link","label":"TimescaleDB","href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb","docId":"reference/Connectors/materialization-connectors/timescaledb","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/"},{"type":"link","label":"Materialization Protocol","href":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol","docId":"reference/Connectors/materialization-protocol","unlisted":false}],"href":"/pr-preview/pr-1594/reference/Connectors/"},{"type":"link","label":"Authorizing users and authenticating with Flow","href":"/pr-preview/pr-1594/reference/authentication","docId":"reference/authentication","unlisted":false},{"type":"link","label":"Editing considerations","href":"/pr-preview/pr-1594/reference/editing","docId":"reference/editing","unlisted":false},{"type":"link","label":"Notifications","href":"/pr-preview/pr-1594/reference/notifications","docId":"reference/notifications","unlisted":false},{"type":"link","label":"Time Travel","href":"/pr-preview/pr-1594/reference/time-travel","docId":"reference/time-travel","unlisted":false},{"type":"link","label":"Configuring task shards","href":"/pr-preview/pr-1594/reference/Configuring-task-shards","docId":"reference/Configuring-task-shards","unlisted":false},{"type":"category","label":"Reduction strategies","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"append","href":"/pr-preview/pr-1594/reference/reduction-strategies/append","docId":"reference/reduction-strategies/append","unlisted":false},{"type":"link","label":"firstWriteWins and lastWriteWins","href":"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins","docId":"reference/reduction-strategies/firstwritewins-and-lastwritewins","unlisted":false},{"type":"link","label":"merge","href":"/pr-preview/pr-1594/reference/reduction-strategies/merge","docId":"reference/reduction-strategies/merge","unlisted":false},{"type":"link","label":"minimize and maximize","href":"/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize","docId":"reference/reduction-strategies/minimize-and-maximize","unlisted":false},{"type":"link","label":"set","href":"/pr-preview/pr-1594/reference/reduction-strategies/set","docId":"reference/reduction-strategies/set","unlisted":false},{"type":"link","label":"sum","href":"/pr-preview/pr-1594/reference/reduction-strategies/sum","docId":"reference/reduction-strategies/sum","unlisted":false},{"type":"link","label":"Composing with conditionals","href":"/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals","docId":"reference/reduction-strategies/composing-with-conditionals","unlisted":false}],"href":"/pr-preview/pr-1594/reference/reduction-strategies/"},{"type":"link","label":"Working with logs and statistics","href":"/pr-preview/pr-1594/reference/working-logs-stats","docId":"reference/working-logs-stats","unlisted":false},{"type":"link","label":"Organizing a Flow catalog","href":"/pr-preview/pr-1594/reference/organizing-catalogs","docId":"reference/organizing-catalogs","unlisted":false},{"type":"link","label":"Allowlisting IP Addresses for Estuary Flow","href":"/pr-preview/pr-1594/reference/allow-ip-addresses","docId":"reference/allow-ip-addresses","unlisted":false},{"type":"link","label":"Materialization sync schedule","href":"/pr-preview/pr-1594/reference/materialization-sync-schedule","docId":"reference/materialization-sync-schedule","unlisted":false}]}]},"docs":{"concepts/advanced/evolutions":{"id":"concepts/advanced/evolutions","title":"Schema evolution","description":"Schema evolutions are a feature you can use to update your whole Data Flow to reflect edits to a collection, preventing your Data Flow from failing due to mismatched components.","sidebar":"tutorialSidebar"},"concepts/advanced/journals":{"id":"concepts/advanced/journals","title":"Journals","description":"Journals are an advanced concept of Flow.","sidebar":"tutorialSidebar"},"concepts/advanced/logs-stats":{"id":"concepts/advanced/logs-stats","title":"Logs and statistics","description":"Flow collects logs and statistics of catalog tasks to aid in debugging and refinement of your workflows.","sidebar":"tutorialSidebar"},"concepts/advanced/projections":{"id":"concepts/advanced/projections","title":"Projections","description":"Projections are an advanced concept of Flow.","sidebar":"tutorialSidebar"},"concepts/advanced/shards":{"id":"concepts/advanced/shards","title":"Task shards","description":"Catalog tasks \u2014 captures, derivations, and materializations \u2014","sidebar":"tutorialSidebar"},"concepts/captures":{"id":"concepts/captures","title":"Captures","description":"A capture is how Flow ingests data from an external source.","sidebar":"tutorialSidebar"},"concepts/catalogs":{"id":"concepts/catalogs","title":"Catalog","description":"The catalog is the set of published entities that comprise all Data Flows: captures, materializations, derivations, collections, schemas, tests, and more.","sidebar":"tutorialSidebar"},"concepts/collections":{"id":"concepts/collections","title":"Collections","description":"The documents of your Data Flows are stored in collections:","sidebar":"tutorialSidebar"},"concepts/connectors":{"id":"concepts/connectors","title":"Connectors","description":"Connectors bridge the gap between Flow and","sidebar":"tutorialSidebar"},"concepts/derivations":{"id":"concepts/derivations","title":"Derivations","description":"At times, the collections generated by a capture may not be suitable for your needs.","sidebar":"tutorialSidebar"},"concepts/flowctl":{"id":"concepts/flowctl","title":"flowctl","description":"There are two ways to work with Flow: through the web app, and using the flowctl command-line interface.","sidebar":"tutorialSidebar"},"concepts/import":{"id":"concepts/import","title":"Imports","description":"When you work on a draft Data Flow using flowctl draft,","sidebar":"tutorialSidebar"},"concepts/materialization":{"id":"concepts/materialization","title":"Materializations","description":"A materialization is how Flow pushes data to an external destination.","sidebar":"tutorialSidebar"},"concepts/README":{"id":"concepts/README","title":"Concepts","description":"Flow helps you define data pipelines, known as Data Flows, that connect multiple data systems, APIs, and storage, and optionally transform data along the way.","sidebar":"tutorialSidebar"},"concepts/schemas":{"id":"concepts/schemas","title":"Schemas","description":"Flow documents and collections always have an associated schema","sidebar":"tutorialSidebar"},"concepts/storage-mappings":{"id":"concepts/storage-mappings","title":"Storage mappings","description":"Flow stores the documents that comprise your collections in a cloud storage bucket.","sidebar":"tutorialSidebar"},"concepts/tests":{"id":"concepts/tests","title":"Tests","description":"The Flow web application automatically performs basic tests to validate the configurations of captures and materializations.","sidebar":"tutorialSidebar"},"concepts/web-app":{"id":"concepts/web-app","title":"Web application","description":"Flow\'s web application is at dashboard.estuary.dev.","sidebar":"tutorialSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"Registration and setup","description":"Estuary Flow is a fully managed web application that also offers a robust CLI.","sidebar":"tutorialSidebar"},"getting-started/tutorials/continuous-materialized-view":{"id":"getting-started/tutorials/continuous-materialized-view","title":"Create a real-time materialized view in PostgreSQL","description":"PostgreSQL supports materialized views: database objects that contain the result of a query, usually a focused subset of a large dataset.","sidebar":"tutorialSidebar"},"getting-started/tutorials/dataflow-s3-snowflake":{"id":"getting-started/tutorials/dataflow-s3-snowflake","title":"Create your first dataflow with Amazon S3 and Snowflake","description":"In this tutorial, you\'ll create your first complete Data Flow with Estuary Flow using publicly available data.","sidebar":"tutorialSidebar"},"getting-started/tutorials/derivations_acmebank":{"id":"getting-started/tutorials/derivations_acmebank","title":"Implementing Derivations for AcmeBank","description":"The following tutorial sections use an illustrative example","sidebar":"tutorialSidebar"},"getting-started/tutorials/postgresql_cdc_to_snowflake":{"id":"getting-started/tutorials/postgresql_cdc_to_snowflake","title":"PostgreSQL CDC streaming to Snowflake","description":"Introduction","sidebar":"tutorialSidebar"},"getting-started/tutorials/README":{"id":"getting-started/tutorials/README","title":"Flow tutorials","description":"Flow tutorials are complete learning experiences that help you get to know Flow using sample data.","sidebar":"tutorialSidebar"},"getting-started/tutorials/real_time_cdc_with_mongodb":{"id":"getting-started/tutorials/real_time_cdc_with_mongodb","title":"Real-time CDC with MongoDB","description":"A step-by-step guide to setting up Change Data Capture (CDC) from MongoDB with Estuary Flow.","sidebar":"tutorialSidebar"},"guides/connect-network":{"id":"guides/connect-network","title":"Configure connections with SSH tunneling","description":"Flow connects to certain types of endpoints \u2014 generally databases \u2014 using their IP address and port.","sidebar":"tutorialSidebar"},"guides/create-dataflow":{"id":"guides/create-dataflow","title":"Create a basic Data Flow","description":"This guide walks you through the process of creating an end-to-end Data Flow.","sidebar":"tutorialSidebar"},"guides/customize-materialization-fields":{"id":"guides/customize-materialization-fields","title":"Customize materialized fields","description":"When you first materialize a collection to an endpoint like a database or data warehouse,","sidebar":"tutorialSidebar"},"guides/dekaf_reading_collections_from_kafka":{"id":"guides/dekaf_reading_collections_from_kafka","title":"Connecting to Estuary Flow from Kafka using Dekaf","description":"Reporting is not yet supported for Dekaf, but is coming.","sidebar":"tutorialSidebar"},"guides/derivation_tutorial_sql":{"id":"guides/derivation_tutorial_sql","title":"How to transform data using SQL","description":"This guide will teach you how to write and publish a simple SQL derivation that you can use to transform data from one collection to another.","sidebar":"tutorialSidebar"},"guides/edit-data-flows":{"id":"guides/edit-data-flows","title":"Edit Data Flows in the web app","description":"You can edit existing captures, collection schemas, and materializations in the Flow web app.","sidebar":"tutorialSidebar"},"guides/flowctl/create-derivation":{"id":"guides/flowctl/create-derivation","title":"Create a derivation with flowctl","description":"Once you\'re familiar with creating a basic Data Flow, you can take things a step further","sidebar":"tutorialSidebar"},"guides/flowctl/edit-draft-from-webapp":{"id":"guides/flowctl/edit-draft-from-webapp","title":"Edit a draft created in the web app","description":"When you create or edit tasks in the web app, your work is periodically saved as a draft.","sidebar":"tutorialSidebar"},"guides/flowctl/edit-specification-locally":{"id":"guides/flowctl/edit-specification-locally","title":"Edit a Flow specification locally","description":"The Flow web application is designed to make the most common Flow tasks quick and easy.","sidebar":"tutorialSidebar"},"guides/flowctl/README":{"id":"guides/flowctl/README","title":"flowctl guides","description":"The guides in this section cover common workflows using the Estuary Flow CLI, flowctl.","sidebar":"tutorialSidebar"},"guides/flowctl/troubleshoot-task":{"id":"guides/flowctl/troubleshoot-task","title":"Troubleshoot a task with flowctl","description":"The flowctl logs and stats subcommands have been temporarily disabled while we work on some important changes to our authorization system. We expect to have these working again soon. In the meantime, please reach out to us via Slack or email (support@estuary.dev) if you want any help.","sidebar":"tutorialSidebar"},"guides/howto_join_two_collections_typescript":{"id":"guides/howto_join_two_collections_typescript","title":"How to join two collections (TypeScript)","description":"This guide will teach you how to write and publish a TypeScript derivation, which will join two collections together on a common key.","sidebar":"tutorialSidebar"},"guides/README":{"id":"guides/README","title":"Flow user guides","description":"In this section, you\'ll find step-by-step guides that walk you through common Flow tasks.","sidebar":"tutorialSidebar"},"guides/schema-evolution":{"id":"guides/schema-evolution","title":"Schema evolution","description":"When collection specifications and schemas change, you must make corresponding changes in other parts of your Data Flow to avoid errors. In this guide, you\'ll learn how to respond to different types of collection changes.","sidebar":"tutorialSidebar"},"guides/system-specific-dataflows/firestore-to-dwh":{"id":"guides/system-specific-dataflows/firestore-to-dwh","title":"Google Cloud Firestore to Snowflake","description":"This guide walks you through the process of creating an","sidebar":"tutorialSidebar"},"guides/system-specific-dataflows/README":{"id":"guides/system-specific-dataflows/README","title":"System-specific Data Flows","description":"The guides in this section cover popular Estuary Flow use cases. Each guide walks you through the process of capturing data from a specific source system and materializing it to a specific destination.","sidebar":"tutorialSidebar"},"guides/system-specific-dataflows/s3-to-snowflake":{"id":"guides/system-specific-dataflows/s3-to-snowflake","title":"Amazon S3 to Snowflake","description":"This guide walks you through the process of creating an","sidebar":"tutorialSidebar"},"guides/transform_data_using_typescript":{"id":"guides/transform_data_using_typescript","title":"How to transform data using TypeScript","description":"This guide will teach you how to write and publish a simple TypeScript derivation.","sidebar":"tutorialSidebar"},"overview/comparisons":{"id":"overview/comparisons","title":"Comparisons","description":"High level explanations of Flow in terms of the systems you already know","sidebar":"tutorialSidebar"},"overview/README":{"id":"overview/README","title":"Flow documentation","description":"Get to know Estuary Flow and learn how to get started.","sidebar":"tutorialSidebar"},"overview/who-should-use-flow":{"id":"overview/who-should-use-flow","title":"Who should use Flow?","description":"Common pain points you might have, and how Flow addresses them.","sidebar":"tutorialSidebar"},"reference/allow-ip-addresses":{"id":"reference/allow-ip-addresses","title":"Allowlisting IP Addresses for Estuary Flow","description":"When configuring systems that interact with Estuary Flow, it\'s crucial to ensure that the necessary IP addresses are","sidebar":"tutorialSidebar"},"reference/authentication":{"id":"reference/authentication","title":"Authorizing users and authenticating with Flow","description":"Read, write, and admin capabilities over Flow catalogs and the collections that comprise them","sidebar":"tutorialSidebar"},"reference/Configuring-task-shards":{"id":"reference/Configuring-task-shards","title":"Configuring task shards","description":"For some catalog tasks, it\'s helpful to control the behavior of shards","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/aircall":{"id":"reference/Connectors/capture-connectors/aircall","title":"Aircall","description":"This connector captures data from Aircall into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/airtable":{"id":"reference/Connectors/capture-connectors/airtable","title":"Airtable","description":"This connector captures data from Airtable into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/alloydb":{"id":"reference/Connectors/capture-connectors/alloydb","title":"AlloyDB","description":"This connector uses change data capture (CDC) to continuously capture table updates in an AlloyDB database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/alpaca":{"id":"reference/Connectors/capture-connectors/alpaca","title":"Alpaca","description":"This connector captures stock trade data from the Alpaca Market Data API into a Flow collection.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-ads":{"id":"reference/Connectors/capture-connectors/amazon-ads","title":"Amazon Ads","description":"This connector captures data from Amazon Ads into Flow collections via the Amazon Ads API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-dynamodb":{"id":"reference/Connectors/capture-connectors/amazon-dynamodb","title":"Amazon DynamoDB","description":"This connector uses DynamoDB streams to continuously capture updates from DynamoDB tables into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-kinesis":{"id":"reference/Connectors/capture-connectors/amazon-kinesis","title":"Amazon Kinesis","description":"This connector captures data from Amazon Kinesis streams.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-redshift":{"id":"reference/Connectors/capture-connectors/amazon-redshift","title":"Amazon Redshift","description":"This connector captures data from your Amazon Redshift cluster into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-s3":{"id":"reference/Connectors/capture-connectors/amazon-s3","title":"Amazon S3","description":"This connector captures data from an Amazon S3 bucket.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amazon-sqs":{"id":"reference/Connectors/capture-connectors/amazon-sqs","title":"Amazon SQS","description":"This connector captures data from Amazon Simple Queue Service (SQS) into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/amplitude":{"id":"reference/Connectors/capture-connectors/amplitude","title":"Amplitude","description":"This connector captures data from Amplitude into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/apache-kafka":{"id":"reference/Connectors/capture-connectors/apache-kafka","title":"Apache Kafka","description":"This connector captures streaming data from Apache Kafka topics.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/azure-blob-storage":{"id":"reference/Connectors/capture-connectors/azure-blob-storage","title":"Azure Blob Storage","description":"This connector captures data from an Azure Blob Storage Account.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/bigquery-batch":{"id":"reference/Connectors/capture-connectors/bigquery-batch","title":"BigQuery Batch Query Connector","description":"This connector captures data from BigQuery into Flow collections by periodically","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/bing-ads":{"id":"reference/Connectors/capture-connectors/bing-ads","title":"Bing Ads","description":"This connector captures data from Bing Ads into Flow collections via the Bing Ads API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/braintree":{"id":"reference/Connectors/capture-connectors/braintree","title":"Braintree","description":"This connector captures data from Braintree into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/braze":{"id":"reference/Connectors/capture-connectors/braze","title":"Braze","description":"This connector captures data from Braze into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/chargebee":{"id":"reference/Connectors/capture-connectors/chargebee","title":"Chargebee","description":"This connector captures data from Chargebee into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/confluence":{"id":"reference/Connectors/capture-connectors/confluence","title":"Confluence","description":"This connector captures data from Confluence into Flow collections via the Confluence Cloud REST API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/datadog-ingest":{"id":"reference/Connectors/capture-connectors/datadog-ingest","title":"Datadog HTTP Ingest (Webhook)","description":"The Datadog HTTP Ingest connector allows you to capture data from incoming HTTP requests from Datadog.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/dropbox":{"id":"reference/Connectors/capture-connectors/dropbox","title":"Dropbox","description":"This connector captures data from a Dropbox account into a Flow collection.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/exchange-rates":{"id":"reference/Connectors/capture-connectors/exchange-rates","title":"Exchange Rates API","description":"This connector captures data from the Exchange Rates API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/facebook-marketing":{"id":"reference/Connectors/capture-connectors/facebook-marketing","title":"Facebook Marketing","description":"This connector captures data from the Facebook Marketing API into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/freshdesk":{"id":"reference/Connectors/capture-connectors/freshdesk","title":"Freshdesk","description":"This connector captures Freshdesk data into Flow collections via the Freshdesk API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/gcs":{"id":"reference/Connectors/capture-connectors/gcs","title":"Google Cloud Storage","description":"This connector captures data from a Google Cloud Storage (GCS) bucket.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/github":{"id":"reference/Connectors/capture-connectors/github","title":"GitHub","description":"This connector captures data from GitHub repositories and organizations into Flow collections via GitHub\'s REST API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/gitlab":{"id":"reference/Connectors/capture-connectors/gitlab","title":"GitLab","description":"This connector captures data from GitLab repositories and organizations into Flow collections via GitLabs\'s API V4. It can also work with self-hosted GitLab.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/gladly":{"id":"reference/Connectors/capture-connectors/gladly","title":"Gladly","description":"This connector captures data from Gladly into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-ads":{"id":"reference/Connectors/capture-connectors/google-ads","title":"Google Ads","description":"This connector captures data from resources in one or more Google Ads accounts into Flow collections via the Google Ads API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-analytics":{"id":"reference/Connectors/capture-connectors/google-analytics","title":"Google Analytics UA","description":"This connector captures data from a view in Google Universal Analytics.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-analytics-4":{"id":"reference/Connectors/capture-connectors/google-analytics-4","title":"Google Analytics 4","description":"This connector captures data from Google Analytics 4 properties into Flow collections via the","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-drive":{"id":"reference/Connectors/capture-connectors/google-drive","title":"Google Drive","description":"This connector lets you capture data from your Google Drive account into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-firestore":{"id":"reference/Connectors/capture-connectors/google-firestore","title":"Google Firestore","description":"This connector captures data from your Google Firestore collections into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-pubsub":{"id":"reference/Connectors/capture-connectors/google-pubsub","title":"Google Cloud Pub/Sub","description":"This connector captures messages in JSON format into Flow collections from","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-search-console":{"id":"reference/Connectors/capture-connectors/google-search-console","title":"Google Search Console","description":"This connector captures data from Google Search Console into Flow collections via the Google Search Console API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/google-sheets":{"id":"reference/Connectors/capture-connectors/google-sheets","title":"Google Sheets","description":"This connector captures data from a Google Sheets spreadsheet.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/greenhouse":{"id":"reference/Connectors/capture-connectors/greenhouse","title":"Greenhouse","description":"This connector captures data from Greenhouse into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/harvest":{"id":"reference/Connectors/capture-connectors/harvest","title":"Harvest","description":"This connector captures data from Harvest into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/http-file":{"id":"reference/Connectors/capture-connectors/http-file","title":"HTTP File","description":"This connector captures data from an HTTP endpoint into a Flow collection.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/http-ingest":{"id":"reference/Connectors/capture-connectors/http-ingest","title":"HTTP Ingest (Webhook)","description":"The HTTP Ingest connector allows you to capture data from incoming HTTP requests.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/hubspot":{"id":"reference/Connectors/capture-connectors/hubspot","title":"Hubspot","description":"This connector captures data from a Hubspot account.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/hubspot-real-time":{"id":"reference/Connectors/capture-connectors/hubspot-real-time","title":"HubSpot ( Real-Time )","description":"This connector captures data from HubSpot into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/instagram":{"id":"reference/Connectors/capture-connectors/instagram","title":"Instagram","description":"This connector captures data from Instagram into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/intercom":{"id":"reference/Connectors/capture-connectors/intercom","title":"Intercom","description":"This connector captures data from Intercom into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/intercom-ingest":{"id":"reference/Connectors/capture-connectors/intercom-ingest","title":"Intercom HTTP Ingest (Webhook)","description":"The Intercom HTTP Ingest connector allows you to capture data from incoming HTTP requests from Intercom.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/iterable":{"id":"reference/Connectors/capture-connectors/iterable","title":"Iterable","description":"This connector captures data from Iterable into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/jira":{"id":"reference/Connectors/capture-connectors/jira","title":"Jira","description":"This connector captures data from Jira into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/jira-ingest":{"id":"reference/Connectors/capture-connectors/jira-ingest","title":"Jira HTTP Ingest (Webhook)","description":"The Jira HTTP Ingest connector allows you to capture data from incoming HTTP requests from Jira.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/klaviyo":{"id":"reference/Connectors/capture-connectors/klaviyo","title":"Klaviyo","description":"This connector captures data from Klaviyo into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/linkedin-ads":{"id":"reference/Connectors/capture-connectors/linkedin-ads","title":"LinkedIn Ads","description":"This connector captures data from LinkedIn Ads into Flow collections through the LinkedIn Marketing API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/linkedin-pages":{"id":"reference/Connectors/capture-connectors/linkedin-pages","title":"LinkedIn Pages","description":"This connector captures data from one LinkedIn Page into Flow collections via the LinkedIn Marketing API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/mailchimp":{"id":"reference/Connectors/capture-connectors/mailchimp","title":"Mailchimp","description":"This connector captures data from a Mailchimp account.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb":{"id":"reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb","title":"Amazon RDS for MariaDB","description":"This is a change data capture (CDC) connector that captures change events from a MariaDB database via the Binary Log.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/MariaDB/MariaDB":{"id":"reference/Connectors/capture-connectors/MariaDB/MariaDB","title":"MariaDB","description":"This is a change data capture (CDC) connector that captures change events from a MariaDB database via the Binary Log.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/marketo":{"id":"reference/Connectors/capture-connectors/marketo","title":"Marketo","description":"This connector captures data from Marketo into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/mixpanel":{"id":"reference/Connectors/capture-connectors/mixpanel","title":"MixPanel","description":"This connector captures data from MixPanel into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/mongodb":{"id":"reference/Connectors/capture-connectors/mongodb","title":"MongoDB","description":"This connector captures data from your MongoDB collections into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql":{"id":"reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql","title":"Amazon RDS for MySQL","description":"This is a change data capture (CDC) connector that captures change events from a MySQL database via the Binary Log.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql":{"id":"reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql","title":"Google Cloud SQL for MySQL","description":"This is a change data capture (CDC) connector that captures change events from a MySQL database via the Binary Log.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/MySQL/MySQL":{"id":"reference/Connectors/capture-connectors/MySQL/MySQL","title":"MySQL","description":"This is a change data capture (CDC) connector that captures change events from a MySQL database via the Binary Log.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/MySQL/mysql-batch":{"id":"reference/Connectors/capture-connectors/MySQL/mysql-batch","title":"MySQL Batch Query Connector","description":"This connector captures data from MySQL into Flow collections by periodically","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/netsuite-suiteanalytics":{"id":"reference/Connectors/capture-connectors/netsuite-suiteanalytics","title":"NetSuite SuiteAnalytics Connect","description":"This connector captures data from Oracle NetSuite into Flow collections. It relies on the SuiteAnalytics Connect feature in order to both load large amounts of data quickly, as well as introspect the available tables, their schemas, keys, and cursor fields.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/netsuite-suitetalk":{"id":"reference/Connectors/capture-connectors/netsuite-suitetalk","title":"NetSuite SuiteTalk REST","description":"This connector captures data from Oracle NetSuite into Flow collections. It connects to the NetSuite Analytics Data Warehouse using the SuiteQL REST endpoint and a custom role.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/notion":{"id":"reference/Connectors/capture-connectors/notion","title":"Notion","description":"This connector captures data from Notion into Flow collections via the Notion API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/OracleDB/flashback":{"id":"reference/Connectors/capture-connectors/OracleDB/flashback","title":"OracleDB (Flashback)","description":"This connector captures data from OracleDB into Flow collections using Oracle Flashback.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/OracleDB/OracleDB":{"id":"reference/Connectors/capture-connectors/OracleDB/OracleDB","title":"OracleDB","description":"This connector captures data from OracleDB into Flow collections using Oracle Logminer.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/paypal-transaction":{"id":"reference/Connectors/capture-connectors/paypal-transaction","title":"Paypal Transaction","description":"This connector captures data from Paypal Transaction into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/pendo":{"id":"reference/Connectors/capture-connectors/pendo","title":"Pendo","description":"This connector captures data from Pendo into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/pinterest":{"id":"reference/Connectors/capture-connectors/pinterest","title":"Pinterest","description":"This connector captures data from Pinterest into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres":{"id":"reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres","title":"Amazon RDS for PostgreSQL","description":"This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres":{"id":"reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres","title":"Google Cloud SQL for PostgreSQL","description":"This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/PostgreSQL/neon-postgres":{"id":"reference/Connectors/capture-connectors/PostgreSQL/neon-postgres","title":"Neon PostgreSQL","description":"Neon\'s logical replication feature allows you to replicate data from your Neon Postgres database to external destinations.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/PostgreSQL/postgres-batch":{"id":"reference/Connectors/capture-connectors/PostgreSQL/postgres-batch","title":"PostgreSQL Batch Query Connector","description":"This connector captures data from Postgres into Flow collections by periodically","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/PostgreSQL/PostgreSQL":{"id":"reference/Connectors/capture-connectors/PostgreSQL/PostgreSQL","title":"PostgreSQL","description":"This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/PostgreSQL/Supabase":{"id":"reference/Connectors/capture-connectors/PostgreSQL/Supabase","title":"Supabase","description":"This connector uses change data capture (CDC) to continuously capture updates in a Supabase PostgreSQL database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/README":{"id":"reference/Connectors/capture-connectors/README","title":"Capture connectors","description":"Estuary\'s available capture connectors are listed in this section. Each connector has a unique set of requirements for configuration; these are linked below the connector name.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/recharge":{"id":"reference/Connectors/capture-connectors/recharge","title":"Recharge","description":"This connector captures data from Recharge into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/Salesforce/salesforce":{"id":"reference/Connectors/capture-connectors/Salesforce/salesforce","title":"Salesforce","description":"Overview","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data":{"id":"reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data","title":"Salesforce \u2014 Historical data","description":"This connector captures data from Salesforce objects into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/Salesforce/salesforce-real-time":{"id":"reference/Connectors/capture-connectors/Salesforce/salesforce-real-time","title":"Salesforce \u2014 Real-time data","description":"This connector captures data from Salesforce objects into Flow collections in real time via the Salesforce PushTopic API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/sendgrid":{"id":"reference/Connectors/capture-connectors/sendgrid","title":"SendGrid","description":"This connector captures data from SendGrid into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/sentry":{"id":"reference/Connectors/capture-connectors/sentry","title":"Sentry","description":"This connector captures data from Sentry into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/sftp":{"id":"reference/Connectors/capture-connectors/sftp","title":"SFTP","description":"This connector captures data from an SFTP server.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/slack":{"id":"reference/Connectors/capture-connectors/slack","title":"Slack","description":"This connector captures data from Slack into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/snapchat":{"id":"reference/Connectors/capture-connectors/snapchat","title":"Snapchat Marketing","description":"This connector captures data from Snapchat Marketing into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/snowflake":{"id":"reference/Connectors/capture-connectors/snowflake","title":"Snowflake CDC Connector","description":"This connector captures change events from source tables in a Snowflake database.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver":{"id":"reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver","title":"Amazon RDS for SQL Server","description":"This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver":{"id":"reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver","title":"Google Cloud SQL for SQL Server","description":"This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/SQLServer/sqlserver":{"id":"reference/Connectors/capture-connectors/SQLServer/sqlserver","title":"Microsoft SQL Server","description":"This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/stripe":{"id":"reference/Connectors/capture-connectors/stripe","title":"Stripe","description":"This connector captures data from Stripe into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/survey-monkey":{"id":"reference/Connectors/capture-connectors/survey-monkey","title":"Survey Monkey","description":"This connector captures data from SurveyMonkey surveys into Flow collections via the SurveyMonkey API.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/tiktok":{"id":"reference/Connectors/capture-connectors/tiktok","title":"TikTok Marketing","description":"This connector captures data from TikTok marketing campaigns and ads into Flow collections via the TikTok API for Business. It supports production as well as sandbox accounts.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/twilio":{"id":"reference/Connectors/capture-connectors/twilio","title":"Twilio","description":"This connector captures data from Twilio into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/woocommerce":{"id":"reference/Connectors/capture-connectors/woocommerce","title":"WooCommerce","description":"This connector captures data from WooCommerce into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/youtube-analytics":{"id":"reference/Connectors/capture-connectors/youtube-analytics","title":"YouTube Analytics","description":"This connector captures data from YouTube Analytics into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/zendesk-chat":{"id":"reference/Connectors/capture-connectors/zendesk-chat","title":"Zendesk Chat","description":"This connector captures data from Zendesk into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/capture-connectors/zendesk-support":{"id":"reference/Connectors/capture-connectors/zendesk-support","title":"Zendesk Support","description":"This connector captures data from Zendesk into Flow collections.","sidebar":"tutorialSidebar"},"reference/Connectors/dekaf/dekaf-tinybird":{"id":"reference/Connectors/dekaf/dekaf-tinybird","title":"Tinybird","description":"In this guide, you\'ll learn how to use Estuary Flow to push data streams to Tinybird.","sidebar":"tutorialSidebar"},"reference/Connectors/dekaf/README":{"id":"reference/Connectors/dekaf/README","title":"Dekaf integrations","description":"Dekaf is Estuary Flow\'s Kafka-API compatibility layer.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/alloydb":{"id":"reference/Connectors/materialization-connectors/alloydb","title":"AlloyDB","description":"This connector materializes Flow collections into tables in an AlloyDB database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/amazon-dynamodb":{"id":"reference/Connectors/materialization-connectors/amazon-dynamodb","title":"Amazon DynamoDB","description":"This connector materializes Flow collections into tables in an Amazon DynamoDB.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/amazon-redshift":{"id":"reference/Connectors/materialization-connectors/amazon-redshift","title":"Amazon Redshift","description":"This connector materializes Flow collections into tables in an Amazon Redshift database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/amazon-s3-csv":{"id":"reference/Connectors/materialization-connectors/amazon-s3-csv","title":"CSV Files in Amazon S3","description":"This connector materializes delta updates of","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/amazon-s3-iceberg":{"id":"reference/Connectors/materialization-connectors/amazon-s3-iceberg","title":"Apache Iceberg Tables in Amazon S3","description":"This connector materializes delta updates of","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/amazon-s3-parquet":{"id":"reference/Connectors/materialization-connectors/amazon-s3-parquet","title":"Apache Parquet Files in Amazon S3","description":"This connector materializes delta updates of","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/BigQuery":{"id":"reference/Connectors/materialization-connectors/BigQuery","title":"Google BigQuery","description":"This Flow connector materializes Flow collections into tables within a Google BigQuery dataset.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/databricks":{"id":"reference/Connectors/materialization-connectors/databricks","title":"Databricks","description":"This connector materializes Flow collections into tables in a Databricks SQL Warehouse.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Elasticsearch":{"id":"reference/Connectors/materialization-connectors/Elasticsearch","title":"Elasticsearch","description":"This connector materializes Flow collections into indices in an Elasticsearch cluster.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Firebolt":{"id":"reference/Connectors/materialization-connectors/Firebolt","title":"Firebolt","description":"This Flow connector materializes delta updates of Flow collections into Firebolt FACT or DIMENSION tables.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/google-gcs-csv":{"id":"reference/Connectors/materialization-connectors/google-gcs-csv","title":"CSV Files in Google GCS","description":"This connector materializes delta updates of","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/google-gcs-parquet":{"id":"reference/Connectors/materialization-connectors/google-gcs-parquet","title":"Apache Parquet Files in Google GCS","description":"This connector materializes delta updates of","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/google-pubsub":{"id":"reference/Connectors/materialization-connectors/google-pubsub","title":"Google Cloud Pub/Sub","description":"This connector materializes Flow collections into topics in Google Cloud Pub/Sub.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Google-sheets":{"id":"reference/Connectors/materialization-connectors/Google-sheets","title":"Google Sheets","description":"This connector materializes Flow collections into sheets in a Google Sheets spreadsheet.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/http-webhook":{"id":"reference/Connectors/materialization-connectors/http-webhook","title":"HTTP Webhook","description":"This connector lets you materialize data from Estuary Flow directly to specified HTTP endpoints via webhooks.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/mongodb":{"id":"reference/Connectors/materialization-connectors/mongodb","title":"MongoDB","description":"This connector materializes data from your Flow collections to your MongoDB collections.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/motherduck":{"id":"reference/Connectors/materialization-connectors/motherduck","title":"MotherDuck","description":"This connector materializes Flow collections into tables in a MotherDuck database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/mysql-heatwave":{"id":"reference/Connectors/materialization-connectors/mysql-heatwave","title":"MySQL HeatWave","description":"This connector lets you materialize data from your Flow collections directly into Oracle MySQL HeatWave instances.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql":{"id":"reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql","title":"Amazon RDS for MySQL","description":"This connector materializes Flow collections into tables in a MySQL database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql":{"id":"reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql","title":"Google Cloud SQL for MySQL","description":"This connector materializes Flow collections into tables in a MySQL database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/MySQL/mysql":{"id":"reference/Connectors/materialization-connectors/MySQL/mysql","title":"MySQL","description":"This connector materializes Flow collections into tables in a MySQL database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/pinecone":{"id":"reference/Connectors/materialization-connectors/pinecone","title":"Pinecone","description":"This connector materializes Flow collections into namespaces in a Pinecone index.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres":{"id":"reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres","title":"Amazon RDS for PostgreSQL","description":"This connector materializes Flow collections into tables in a PostgreSQL database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres":{"id":"reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres","title":"Google Cloud SQL for PostgreSQL","description":"This connector materializes Flow collections into tables in a Google Cloud SQL for PostgreSQL database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/PostgreSQL/PostgreSQL":{"id":"reference/Connectors/materialization-connectors/PostgreSQL/PostgreSQL","title":"PostgreSQL","description":"This connector materializes Flow collections into tables in a PostgreSQL database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/README":{"id":"reference/Connectors/materialization-connectors/README","title":"Materialization connectors","description":"Estuary\'s available materialization connectors are listed in this section. Each connector has a unique set of requirements for configuration; these are linked below the connector name.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Rockset":{"id":"reference/Connectors/materialization-connectors/Rockset","title":"Rockset","description":"This Flow connector materializes delta updates of your Flow collections into Rockset collections.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/slack":{"id":"reference/Connectors/materialization-connectors/slack","title":"Slack","description":"This connector lets you materialize data from Estuary Flow directly into Slack channels.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/Snowflake":{"id":"reference/Connectors/materialization-connectors/Snowflake","title":"Snowflake","description":"This connector materializes Flow collections into tables in a Snowflake database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/SQLite":{"id":"reference/Connectors/materialization-connectors/SQLite","title":"SQLite","description":"This connector materializes Flow collections into an ephemeral SQLite database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver":{"id":"reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver","title":"Amazon RDS for SQL Server","description":"This connector materializes Flow collections into tables in a Microsoft SQLServer database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver":{"id":"reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver","title":"Google Cloud SQL for SQLServer","description":"This connector materializes Flow collections into tables in a Microsoft SQLServer database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/SQLServer/sqlserver":{"id":"reference/Connectors/materialization-connectors/SQLServer/sqlserver","title":"Microsoft SQLServer","description":"This connector materializes Flow collections into tables in a Microsoft SQLServer database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/starburst":{"id":"reference/Connectors/materialization-connectors/starburst","title":"Starburst","description":"This connector materializes transactionally Flow collections into Iceberg or Delta Lake tables using AWS S3 storage in Starburst Galaxy.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-connectors/timescaledb":{"id":"reference/Connectors/materialization-connectors/timescaledb","title":"TimescaleDB","description":"This connector materializes Flow collections into tables in a TimescaleDB database.","sidebar":"tutorialSidebar"},"reference/Connectors/materialization-protocol":{"id":"reference/Connectors/materialization-protocol","title":"Materialization Protocol","description":"Materializations are processed as cooperative transactions between the Flow","sidebar":"tutorialSidebar"},"reference/Connectors/README":{"id":"reference/Connectors/README","title":"Connectors","description":"A current list and configuration details for Estuary\'s connectors can be found on the following pages:","sidebar":"tutorialSidebar"},"reference/editing":{"id":"reference/editing","title":"Editing considerations","description":"You can edit the components of your Data Flows in the Flow web app and with flowctl, but before you do so, it\'s important to consider the implications of your changes.","sidebar":"tutorialSidebar"},"reference/materialization-sync-schedule":{"id":"reference/materialization-sync-schedule","title":"Materialization sync schedule","description":"For some systems you might prefer to have data sync\'d less frequently to reduce","sidebar":"tutorialSidebar"},"reference/notifications":{"id":"reference/notifications","title":"Notifications","description":"Estuary allows users to configure email notifications on specific tenants to send out alerts when a task hasn\'t received data within a time window and when billing information has been updated.","sidebar":"tutorialSidebar"},"reference/organizing-catalogs":{"id":"reference/organizing-catalogs","title":"Organizing a Flow catalog","description":"This page is outdated. It does not reflect the current state of the Flow web application and the","sidebar":"tutorialSidebar"},"reference/reduction-strategies/append":{"id":"reference/reduction-strategies/append","title":"append","description":"Using the append reduction strategy","sidebar":"tutorialSidebar"},"reference/reduction-strategies/composing-with-conditionals":{"id":"reference/reduction-strategies/composing-with-conditionals","title":"Composing with conditionals","description":"Using conditionals statements to fine-tune reductions","sidebar":"tutorialSidebar"},"reference/reduction-strategies/firstwritewins-and-lastwritewins":{"id":"reference/reduction-strategies/firstwritewins-and-lastwritewins","title":"firstWriteWins and lastWriteWins","description":"Using the firstWriteWins and lastWriteWins reduction strategies","sidebar":"tutorialSidebar"},"reference/reduction-strategies/merge":{"id":"reference/reduction-strategies/merge","title":"merge","description":"Using the merge reduction strategy","sidebar":"tutorialSidebar"},"reference/reduction-strategies/minimize-and-maximize":{"id":"reference/reduction-strategies/minimize-and-maximize","title":"minimize and maximize","description":"Using the minimize and maximize reduction strategies","sidebar":"tutorialSidebar"},"reference/reduction-strategies/README":{"id":"reference/reduction-strategies/README","title":"Reduction strategies","description":"Flow\'s default reduction behaviors and available strategies to customize them","sidebar":"tutorialSidebar"},"reference/reduction-strategies/set":{"id":"reference/reduction-strategies/set","title":"set","description":"Using the set reduction strategy","sidebar":"tutorialSidebar"},"reference/reduction-strategies/sum":{"id":"reference/reduction-strategies/sum","title":"sum","description":"Using the sum reduction strategy","sidebar":"tutorialSidebar"},"reference/time-travel":{"id":"reference/time-travel","title":"Time Travel","description":"Time travel functionality allows you to restrict the data materialization process to a specific date range. When applying time travel to an existing materialization, it\'s important to note that it won\'t remove any existing documents. Instead, it will only materialize new data that falls within the specified date and time window. New data will not be included in your materialization destination unless it conforms to the specified date range criteria. Consequently, setting a lower boundary in the future date will delay the materialization of data until that future date is reached.","sidebar":"tutorialSidebar"},"reference/working-logs-stats":{"id":"reference/working-logs-stats","title":"Working with logs and statistics","description":"Your logs and stats collections","sidebar":"tutorialSidebar"}}}}')}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9d18d13c.41265962.js b/pr-preview/pr-1594/assets/js/9d18d13c.41265962.js deleted file mode 100644 index 35a72be6e7..0000000000 --- a/pr-preview/pr-1594/assets/js/9d18d13c.41265962.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7544],{35168:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>a,frontMatter:()=>i,metadata:()=>l,toc:()=>o});var n=r(74848),s=r(28453);const i={},d="Firebolt",l={id:"reference/Connectors/materialization-connectors/Firebolt",title:"Firebolt",description:"This Flow connector materializes delta updates of Flow collections into Firebolt FACT or DIMENSION tables.",source:"@site/docs/reference/Connectors/materialization-connectors/Firebolt.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/Firebolt",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/Firebolt.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Elasticsearch",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch"},next:{title:"CSV Files in Google GCS",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv"}},c={},o=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Delta updates",id:"delta-updates",level:2},{value:"Reserved words",id:"reserved-words",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"firebolt",children:"Firebolt"}),"\n",(0,n.jsxs)(t.p,{children:["This Flow connector materializes ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})," of Flow collections into Firebolt ",(0,n.jsx)(t.code,{children:"FACT"})," or ",(0,n.jsx)(t.code,{children:"DIMENSION"})," tables."]}),"\n",(0,n.jsxs)(t.p,{children:["To interface between Flow and Firebolt, the connector uses Firebolt's method for ",(0,n.jsx)(t.a,{href:"https://docs.firebolt.io/loading-data/loading-data.html",children:"loading data"}),":\nFirst, it stores data as JSON documents in an S3 bucket.\nIt then references the S3 bucket to create a ",(0,n.jsxs)(t.a,{href:"https://docs.firebolt.io/loading-data/working-with-external-tables.html",children:["Firebolt ",(0,n.jsx)(t.em,{children:"external table"})]}),",\nwhich acts as a SQL interface between the JSON documents and the destination table in Firebolt."]}),"\n",(0,n.jsxs)(t.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,n.jsx)(t.a,{href:"https://ghcr.io/estuary/materialize-firebolt:dev",children:(0,n.jsx)(t.code,{children:"ghcr.io/estuary/materialize-firebolt:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,n.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsx)(t.p,{children:"To use this connector, you'll need:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["A Firebolt database with at least one ",(0,n.jsx)(t.a,{href:"https://docs.firebolt.io/working-with-engines/",children:"engine"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"The engine must be started before creating the materialization."}),"\n",(0,n.jsxs)(t.li,{children:["It's important that the engine stays up throughout the lifetime of the materialization. To ensure this is the case, select Edit Engine on your engine. In the engine settings, set ",(0,n.jsx)(t.strong,{children:"Auto-stop engine after"})," to ",(0,n.jsx)(t.strong,{children:"Always On"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["An S3 bucket where JSON documents will be stored prior to loading","\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["The bucket must be in a ",(0,n.jsx)(t.a,{href:"https://docs.firebolt.io/general-reference/available-regions.html",children:"supported AWS region"})," matching your Firebolt database."]}),"\n",(0,n.jsxs)(t.li,{children:["The bucket may be public, or may be accessible by an IAM user. To configure your IAM user, see the ",(0,n.jsx)(t.a,{href:"#setup",children:"steps below"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["At least one Flow ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections",children:"collection"})]}),"\n"]}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["If you haven't yet captured your data from its external source,\nstart at the beginning of the ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"guide to create a dataflow"}),".\nYou'll be referred back to this connector-specific documentation at the appropriate steps."]})}),"\n",(0,n.jsx)(t.h3,{id:"setup",children:"Setup"}),"\n",(0,n.jsx)(t.p,{children:"For non-public buckets, you'll need to configure access in AWS IAM."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Follow the ",(0,n.jsx)(t.a,{href:"https://docs.firebolt.io/loading-data/configuring-aws-role-to-access-amazon-s3.html",children:"Firebolt documentation"})," to set up an IAM policy and role, and add it to the external table definition."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Create a new ",(0,n.jsx)(t.a,{href:"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console",children:"IAM user"}),". During setup:"]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Choose ",(0,n.jsx)(t.strong,{children:"Programmatic"})," (access key) access. This ensures that an ",(0,n.jsx)(t.strong,{children:"access key ID"})," and ",(0,n.jsx)(t.strong,{children:"secret access key"})," are generated. You'll use these to configure the connector."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["On the ",(0,n.jsx)(t.strong,{children:"Permissions"})," page, choose ",(0,n.jsx)(t.strong,{children:"Attach existing policies directly"})," and attach the policy you created in step 1."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["After creating the user, download the IAM credentials file.\nTake note of the ",(0,n.jsx)(t.strong,{children:"access key ID"})," and ",(0,n.jsx)(t.strong,{children:"secret access key"})," and use them to configure the connector.\nSee the ",(0,n.jsx)(t.a,{href:"https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html",children:"Amazon docs"})," if you lose your credentials."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(t.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a Firebolt materialization, which will direct Flow data to your desired Firebolt tables via an external table."}),"\n",(0,n.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,n.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Property"}),(0,n.jsx)(t.th,{children:"Title"}),(0,n.jsx)(t.th,{children:"Description"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Required/Default"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"/aws_key_id"})}),(0,n.jsx)(t.td,{children:"AWS key ID"}),(0,n.jsx)(t.td,{children:"AWS access key ID for accessing the S3 bucket."}),(0,n.jsx)(t.td,{children:"string"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"/aws_region"})}),(0,n.jsx)(t.td,{children:"AWS region"}),(0,n.jsx)(t.td,{children:"AWS region the bucket is in."}),(0,n.jsx)(t.td,{children:"string"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"/aws_secret_key"})}),(0,n.jsx)(t.td,{children:"AWS secret access key"}),(0,n.jsx)(t.td,{children:"AWS secret key for accessing the S3 bucket."}),(0,n.jsx)(t.td,{children:"string"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"/database"})})}),(0,n.jsx)(t.td,{children:"Database"}),(0,n.jsx)(t.td,{children:"Name of the Firebolt database."}),(0,n.jsx)(t.td,{children:"string"}),(0,n.jsx)(t.td,{children:"Required"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"/engine_url"})})}),(0,n.jsx)(t.td,{children:"Engine URL"}),(0,n.jsxs)(t.td,{children:["Engine URL of the Firebolt database, in the format: ",(0,n.jsx)(t.code,{children:"<engine-name>.<organization>.<region>.app.firebolt.io"}),"."]}),(0,n.jsx)(t.td,{children:"string"}),(0,n.jsx)(t.td,{children:"Required"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"/password"})})}),(0,n.jsx)(t.td,{children:"Password"}),(0,n.jsx)(t.td,{children:"Firebolt password."}),(0,n.jsx)(t.td,{children:"string"}),(0,n.jsx)(t.td,{children:"Required"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"/s3_bucket"})})}),(0,n.jsx)(t.td,{children:"S3 bucket"}),(0,n.jsx)(t.td,{children:"Name of S3 bucket where the intermediate files for external table will be stored."}),(0,n.jsx)(t.td,{children:"string"}),(0,n.jsx)(t.td,{children:"Required"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"/s3_prefix"})}),(0,n.jsx)(t.td,{children:"S3 prefix"}),(0,n.jsx)(t.td,{children:"A prefix for files stored in the bucket."}),(0,n.jsx)(t.td,{children:"string"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"/username"})})}),(0,n.jsx)(t.td,{children:"Username"}),(0,n.jsx)(t.td,{children:"Firebolt username."}),(0,n.jsx)(t.td,{children:"string"}),(0,n.jsx)(t.td,{children:"Required"})]})]})]}),"\n",(0,n.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Property"}),(0,n.jsx)(t.th,{children:"Title"}),(0,n.jsx)(t.th,{children:"Description"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Required/Default"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"/table"})})}),(0,n.jsx)(t.td,{children:"Table"}),(0,n.jsxs)(t.td,{children:["Name of the Firebolt table to store materialized results in. The external table will be named after this table with an ",(0,n.jsx)(t.code,{children:"_external"})," suffix."]}),(0,n.jsx)(t.td,{children:"string"}),(0,n.jsx)(t.td,{children:"Required"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"/table_type"})})}),(0,n.jsx)(t.td,{children:"Table type"}),(0,n.jsxs)(t.td,{children:["Type of the Firebolt table to store materialized results in. See the ",(0,n.jsx)(t.a,{href:"https://docs.firebolt.io/working-with-tables.html",children:"Firebolt docs"})," for more details."]}),(0,n.jsx)(t.td,{children:"string"}),(0,n.jsx)(t.td,{children:"Required"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n\t endpoint:\n connector:\n config:\n database: my-db\n engine_url: my-db-my-engine-name.my-organization.us-east-1.app.firebolt.io\n password: secret\n # For public S3 buckets, only the bucket name is required\n s3_bucket: my-bucket\n username: firebolt-user\n # Path to the latest version of the connector, provided as a Docker image\n image: ghcr.io/estuary/materialize-firebolt:dev\n\t# If you have multiple collections you need to materialize, add a binding for each one\n # to ensure complete data flow-through\n bindings:\n - resource:\n table: table-name\n table_type: fact\n source: ${PREFIX}/${source_collection}\n"})}),"\n",(0,n.jsx)(t.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,n.jsxs)(t.p,{children:["Firebolt is an insert-only system; it doesn't support updates or deletes.\nBecause of this, the Firebolt connector operates only in ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})," mode.\nFirebolt stores all deltas \u2014 the unmerged collection documents \u2014 directly."]}),"\n",(0,n.jsx)(t.p,{children:"In some cases, this will affect how materialized views look in Firebolt compared to other systems that use standard updates."}),"\n",(0,n.jsx)(t.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,n.jsx)(t.p,{children:"Firebolt has a list of reserved words, which my not be used in identifiers.\nCollections with field names that include a reserved word will automatically be quoted as part of a Firebolt materialization."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Reserved words"}),(0,n.jsx)(t.th,{}),(0,n.jsx)(t.th,{})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"all"}),(0,n.jsx)(t.td,{children:"false"}),(0,n.jsx)(t.td,{children:"or"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"alter"}),(0,n.jsx)(t.td,{children:"fetch"}),(0,n.jsx)(t.td,{children:"order"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"and"}),(0,n.jsx)(t.td,{children:"first"}),(0,n.jsx)(t.td,{children:"outer"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"array"}),(0,n.jsx)(t.td,{children:"float"}),(0,n.jsx)(t.td,{children:"over"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"between"}),(0,n.jsx)(t.td,{children:"from"}),(0,n.jsx)(t.td,{children:"partition"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"bigint"}),(0,n.jsx)(t.td,{children:"full"}),(0,n.jsx)(t.td,{children:"precision"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"bool"}),(0,n.jsx)(t.td,{children:"generate"}),(0,n.jsx)(t.td,{children:"prepare"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"boolean"}),(0,n.jsx)(t.td,{children:"group"}),(0,n.jsx)(t.td,{children:"primary"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"both"}),(0,n.jsx)(t.td,{children:"having"}),(0,n.jsx)(t.td,{children:"quarter"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"case"}),(0,n.jsx)(t.td,{children:"if"}),(0,n.jsx)(t.td,{children:"right"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"cast"}),(0,n.jsx)(t.td,{children:"ilike"}),(0,n.jsx)(t.td,{children:"row"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"char"}),(0,n.jsx)(t.td,{children:"in"}),(0,n.jsx)(t.td,{children:"rows"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"concat"}),(0,n.jsx)(t.td,{children:"inner"}),(0,n.jsx)(t.td,{children:"sample"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"copy"}),(0,n.jsx)(t.td,{children:"insert"}),(0,n.jsx)(t.td,{children:"select"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"create"}),(0,n.jsx)(t.td,{children:"int"}),(0,n.jsx)(t.td,{children:"set"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"cross"}),(0,n.jsx)(t.td,{children:"integer"}),(0,n.jsx)(t.td,{children:"show"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"current_date"}),(0,n.jsx)(t.td,{children:"intersect"}),(0,n.jsx)(t.td,{children:"text"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"current_timestamp"}),(0,n.jsx)(t.td,{children:"interval"}),(0,n.jsx)(t.td,{children:"time"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"database"}),(0,n.jsx)(t.td,{children:"is"}),(0,n.jsx)(t.td,{children:"timestamp"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"date"}),(0,n.jsx)(t.td,{children:"isnull"}),(0,n.jsx)(t.td,{children:"top"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"datetime"}),(0,n.jsx)(t.td,{children:"join"}),(0,n.jsx)(t.td,{children:"trailing"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"decimal"}),(0,n.jsx)(t.td,{children:"join_type"}),(0,n.jsx)(t.td,{children:"trim"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"delete"}),(0,n.jsx)(t.td,{children:"leading"}),(0,n.jsx)(t.td,{children:"true"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"describe"}),(0,n.jsx)(t.td,{children:"left"}),(0,n.jsx)(t.td,{children:"truncate"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"distinct"}),(0,n.jsx)(t.td,{children:"like"}),(0,n.jsx)(t.td,{children:"union"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"double"}),(0,n.jsx)(t.td,{children:"limit"}),(0,n.jsx)(t.td,{children:"unknown_char"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"doublecolon"}),(0,n.jsx)(t.td,{children:"limit_distinct"}),(0,n.jsx)(t.td,{children:"unnest"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"dow"}),(0,n.jsx)(t.td,{children:"localtimestamp"}),(0,n.jsx)(t.td,{children:"unterminated_string"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"doy"}),(0,n.jsx)(t.td,{children:"long"}),(0,n.jsx)(t.td,{children:"update"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"drop"}),(0,n.jsx)(t.td,{children:"natural"}),(0,n.jsx)(t.td,{children:"using"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"empty_identifier"}),(0,n.jsx)(t.td,{children:"next"}),(0,n.jsx)(t.td,{children:"varchar"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"epoch"}),(0,n.jsx)(t.td,{children:"not"}),(0,n.jsx)(t.td,{children:"week"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"except"}),(0,n.jsx)(t.td,{children:"null"}),(0,n.jsx)(t.td,{children:"when"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"execute"}),(0,n.jsx)(t.td,{children:"numeric"}),(0,n.jsx)(t.td,{children:"where"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"exists"}),(0,n.jsx)(t.td,{children:"offset"}),(0,n.jsx)(t.td,{children:"with"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"explain"}),(0,n.jsx)(t.td,{children:"on"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"extract"}),(0,n.jsx)(t.td,{children:"only"}),(0,n.jsx)(t.td,{})]})]})]})]})}function a(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},28453:(e,t,r)=>{r.d(t,{R:()=>d,x:()=>l});var n=r(96540);const s={},i=n.createContext(s);function d(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9d57d0a6.6861fb38.js b/pr-preview/pr-1594/assets/js/9d57d0a6.6861fb38.js deleted file mode 100644 index 74f6fd2542..0000000000 --- a/pr-preview/pr-1594/assets/js/9d57d0a6.6861fb38.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[233],{43079:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var r=t(74848),i=t(28453);const o={},s="Notion",c={id:"reference/Connectors/capture-connectors/notion",title:"Notion",description:"This connector captures data from Notion into Flow collections via the Notion API.",source:"@site/docs/reference/Connectors/capture-connectors/notion.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/notion",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/notion.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"NetSuite SuiteTalk REST",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk"},next:{title:"OracleDB",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/"}},a={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup for OAuth authentication",id:"setup-for-oauth-authentication",level:3},{value:"Setup for manual authentication",id:"setup-for-manual-authentication",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"notion",children:"Notion"}),"\n",(0,r.jsxs)(n.p,{children:["This connector captures data from Notion into Flow collections via the ",(0,r.jsx)(n.a,{href:"https://developers.notion.com/reference/intro",children:"Notion API"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://ghcr.io/estuary/source-notion:dev",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-notion:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/notion/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,r.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,r.jsx)(n.p,{children:"The following data resources are supported:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developers.notion.com/reference/retrieve-a-block",children:"Blocks"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developers.notion.com/reference/retrieve-a-comment",children:"Comments"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developers.notion.com/reference/retrieve-a-database",children:"Databases"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developers.notion.com/reference/retrieve-a-page",children:"Pages"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developers.notion.com/reference/get-user",children:"Users"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.p,{children:["To use this connector, you'll need a Notion account with an ",(0,r.jsx)(n.a,{href:"https://developers.notion.com/docs/authorization",children:"integration"})," created to connect with Flow."]}),"\n",(0,r.jsx)(n.p,{children:"Before you create your integration, choose how you'll authenticate with Notion.\nThere are two ways: using OAuth to sign in directly in the web app,\nor manually, using an access token.\nOAuth is recommended in the web app; only manual configuration is supported when using the CLI."}),"\n",(0,r.jsx)(n.h3,{id:"setup-for-oauth-authentication",children:"Setup for OAuth authentication"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Go to ",(0,r.jsx)(n.a,{href:"https://www.notion.so/my-integrations",children:"your integrations page"})," and create a new integration."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["On the new integration's ",(0,r.jsx)(n.strong,{children:"Secrets"})," page, change the integration type to ",(0,r.jsx)(n.strong,{children:"Public"}),". Fill in the required fields."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Redirect URIs: ",(0,r.jsx)(n.a,{href:"http://dashboard.estuary.dev",children:"http://dashboard.estuary.dev"})]}),"\n",(0,r.jsxs)(n.li,{children:["Website homepage: ",(0,r.jsx)(n.a,{href:"http://dashboard.estuary.dev",children:"http://dashboard.estuary.dev"})]}),"\n",(0,r.jsxs)(n.li,{children:["Privacy policy: ",(0,r.jsx)(n.a,{href:"https://www.estuary.dev/privacy-policy/",children:"https://www.estuary.dev/privacy-policy/"})]}),"\n",(0,r.jsxs)(n.li,{children:["Terms of use: ",(0,r.jsx)(n.a,{href:"https://www.estuary.dev/terms/",children:"https://www.estuary.dev/terms/"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"setup-for-manual-authentication",children:"Setup for manual authentication"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Go to ",(0,r.jsx)(n.a,{href:"https://www.notion.so/my-integrations",children:"your integrations page"})," and create a new ",(0,r.jsx)(n.a,{href:"https://developers.notion.com/docs/authorization#integration-types",children:"internal integration"}),". Notion integrations are internal by default."]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["During setup, ",(0,r.jsxs)(n.a,{href:"https://www.notion.so/help/create-integrations-with-the-notion-api#granular-integration-permissions",children:["change ",(0,r.jsx)(n.strong,{children:"User Capabilities"})]}),"\nfrom ",(0,r.jsx)(n.strong,{children:"No user information"})," (the default) to ",(0,r.jsx)(n.strong,{children:"Read user information without email address"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Copy the generated token for use in the connector configuration."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Notion source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.p,{children:["The properties in the table below reflect the manual authentication method.\nIf you're working in the Flow web app, you'll use ",(0,r.jsx)(n.a,{href:"#setup-for-oauth-authentication",children:"OAuth2"}),",\nso many of these properties aren't required."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/credentials"})})}),(0,r.jsx)(n.td,{children:"Authenticate using"}),(0,r.jsx)(n.td,{children:"Pick an authentication method."}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/credentials/auth_type"})})}),(0,r.jsx)(n.td,{children:"Authentication type"}),(0,r.jsxs)(n.td,{children:["Set to ",(0,r.jsx)(n.code,{children:"token"})," for manual authentication"]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/token"})}),(0,r.jsx)(n.td,{children:"Access Token"}),(0,r.jsx)(n.td,{children:"Notion API access token"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/start_date"})}),(0,r.jsx)(n.td,{children:"Start Date"}),(0,r.jsxs)(n.td,{children:["UTC date and time in the format YYYY-MM-DDTHH:MM",":SS",".000Z. Any data generated before this date will not be replicated. If left blank, the start date will be set to 2 years before the present date."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Notion resource from which a collection is captured."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync Mode"}),(0,r.jsx)(n.td,{children:"Sync this resource incrementally, or fully refresh it every run"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.p,{children:"This sample specification reflects the manual authentication method."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-notion:dev\n config:\n credentials:\n auth_type: token\n token: {secret}\n start_date: 2021-01-25T00:00:00Z\n bindings:\n - resource:\n stream: blocks\n syncMode: incremental\n target: ${PREFIX}/blocks\n {...}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>c});var r=t(96540);const i={},o=r.createContext(i);function s(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9e25251f.8354a6a9.js b/pr-preview/pr-1594/assets/js/9e25251f.8354a6a9.js deleted file mode 100644 index 6ff1794c60..0000000000 --- a/pr-preview/pr-1594/assets/js/9e25251f.8354a6a9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[44],{59124:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var n=o(74848),r=o(28453);const i={},s="How to join two collections (TypeScript)",d={id:"guides/howto_join_two_collections_typescript",title:"How to join two collections (TypeScript)",description:"This guide will teach you how to write and publish a TypeScript derivation, which will join two collections together on a common key.",source:"@site/docs/guides/howto_join_two_collections_typescript.md",sourceDirName:"guides",slug:"/guides/howto_join_two_collections_typescript",permalink:"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/howto_join_two_collections_typescript.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"How to transform data using SQL",permalink:"/pr-preview/pr-1594/guides/derivation_tutorial_sql"},next:{title:"Schema evolution",permalink:"/pr-preview/pr-1594/guides/schema-evolution"}},a={},l=[{value:"Introduction<a></a>",id:"introduction",level:2},{value:"Setting up your development environment<a></a>",id:"setting-up-your-development-environment",level:2},{value:"Writing the derivation<a></a>",id:"writing-the-derivation",level:2},{value:"Wrapping up<a></a>",id:"wrapping-up",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"how-to-join-two-collections-typescript",children:"How to join two collections (TypeScript)"}),"\n",(0,n.jsx)(t.p,{children:"This guide will teach you how to write and publish a TypeScript derivation, which will join two collections together on a common key."}),"\n",(0,n.jsxs)(t.h2,{id:"introduction",children:["Introduction",(0,n.jsx)("a",{id:"introduction"})]}),"\n",(0,n.jsx)(t.p,{children:"This tutorial will show you how to implement a stateless transformation using TypeScript. You\u2019ll learn how to implement a flow that matches orders to customers in real-time."}),"\n",(0,n.jsxs)(t.h2,{id:"setting-up-your-development-environment",children:["Setting up your development environment",(0,n.jsx)("a",{id:"setting-up-your-development-environment"})]}),"\n",(0,n.jsxs)(t.p,{children:["The data sources used in this tutorial are available in two Google Sheets. This one for the ",(0,n.jsx)(t.a,{href:"https://docs.google.com/spreadsheets/d/1glzIgMIeS5Fd2unb-m9J6czXdWBXK_x_ZsgzxbVUclQ/edit#gid=0",children:"orders"})," and this one for the ",(0,n.jsx)(t.a,{href:"https://docs.google.com/spreadsheets/d/1WUyM9hmRwa8B1Kz2buFcscZegPA35nvTdaHC-L3xr7U/edit#gid=0",children:"customers"}),". Make a copy of each so you\u2019ll be able to test out the pipeline by adding, editing or removing records."]}),"\n",(0,n.jsx)(t.p,{children:"Customers table sample"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{style:{textAlign:"right"}}),(0,n.jsx)(t.th,{}),(0,n.jsx)(t.th,{}),(0,n.jsx)(t.th,{})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"customer_id"}),(0,n.jsx)(t.td,{children:"email"}),(0,n.jsx)(t.td,{children:"name"}),(0,n.jsx)(t.td,{children:"phone"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"101"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"mailto:customer1@email.com",children:"customer1@email.com"})}),(0,n.jsx)(t.td,{children:"John Doe"}),(0,n.jsx)(t.td,{children:"123-456-7890"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"102"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"mailto:customer2@email.com",children:"customer2@email.com"})}),(0,n.jsx)(t.td,{children:"Jane Smith"}),(0,n.jsx)(t.td,{children:"987-654-3210"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"103"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"mailto:customer3@email.com",children:"customer3@email.com"})}),(0,n.jsx)(t.td,{children:"Alex Lee"}),(0,n.jsx)(t.td,{children:"555-123-4567"})]})]})]}),"\n",(0,n.jsx)(t.p,{children:"Orders table sample"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{style:{textAlign:"right"}}),(0,n.jsx)(t.th,{style:{textAlign:"right"}}),(0,n.jsx)(t.th,{style:{textAlign:"right"}}),(0,n.jsx)(t.th,{style:{textAlign:"right"}})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"order_id"}),(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"customer_id"}),(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"order_date"}),(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"total_amount"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"1"}),(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"101"}),(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"2024-05-10 8:00:00"}),(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"50"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"2"}),(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"102"}),(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"2024-05-09 12:00:00"}),(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"75.5"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"3"}),(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"103"}),(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"2024-05-08 15:30:00"}),(0,n.jsx)(t.td,{style:{textAlign:"right"},children:"100.25"})]})]})]}),"\n",(0,n.jsxs)(t.p,{children:["As you can see, both tables contain a field called ",(0,n.jsx)(t.code,{children:"customer_id"}),". This is what we\u2019re going to use as the key in our join operation. One customer can have multiple orders, but one order can only belong to one customer. There are also some customers without any orders."]}),"\n",(0,n.jsx)(t.p,{children:"Let\u2019s say you want to see all customers and all of their orders in the results. This means, you\u2019ll be looking to implement a full outer join."}),"\n",(0,n.jsxs)(t.p,{children:["To create the collections in Estuary Flow, head over to the dashboard and ",(0,n.jsx)(t.a,{href:"https://dashboard.estuary.dev/captures/create",children:"create"})," a new Google Sheet capture. Give it a name and add one of the previously copied sheet\u2019s URL as the \u201cSpreadsheet Link\u201d. Repeat this process for the other sheet, which should leave you with 2 collections."]}),"\n",(0,n.jsx)(t.p,{children:"You can take a look into each via the data preview window on the Collections page to verify that the sample data has already landed in Flow."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//orders_sheet_collection_b99f3c9c84/orders_sheet_collection_b99f3c9c84.png",alt:"Orders collection"})}),"\n",(0,n.jsxs)(t.p,{children:["In order to implement transformations through ",(0,n.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/#derivations",children:"derivations"}),", you\u2019ll need to set up your development environment. You\u2019ll need a text editor and ",(0,n.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/flowctl/",children:"flowtcl"}),", the CLI-tool for Flow installed on your machine. Check out the ",(0,n.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/flowctl/#installation-and-setup",children:"docs page"})," on installation instructions."]}),"\n",(0,n.jsxs)(t.p,{children:["To verify that you\u2019re able to access Flow via ",(0,n.jsx)(t.code,{children:"flowctl"}),", see if you can execute these commands successfully to view documents in your collections."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-shell",children:'flowctl collections read --collection <your_collection_id> --uncommitted\n\n{"_meta":{"uuid":"9790e50e-0ed3-11ef-8401-6d9be407e4b8"},"customer_id":"101","order_date":"2024-05-10 8:00:00","order_id":"1","row_id":203,"total_amount":"50"}\n{"_meta":{"uuid":"9790e50e-0ed3-11ef-8801-6d9be407e4b8"},"customer_id":"102","order_date":"2024-05-09 12:00:00","order_id":"2","row_id":204,"total_amount":"75.5"}\n{"_meta":{"uuid":"9790e50e-0ed3-11ef-8c01-6d9be407e4b8"},"customer_id":"103","order_date":"2024-05-08 15:30:00","order_id":"3","row_id":205,"total_amount":"100.25"}\n{"_meta":{"uuid":"9790e50e-0ed3-11ef-9001-6d9be407e4b8"},"customer_id":"101","order_date":"2024-05-07 10:00:00","order_id":"4","row_id":206,"total_amount":"25.75"}\n{"_meta":{"uuid":"9790e50e-0ed3-11ef-9401-6d9be407e4b8"},"customer_id":"103","order_date":"2024-05-06 14:45:00","order_id":"5","row_id":207,"total_amount":"60.2"}\n{"_meta":{"uuid":"9790e50e-0ed3-11ef-9801-6d9be407e4b8"},"customer_id":"102","order_date":"2024-05-05 11:20:00","order_id":"6","row_id":208,"total_amount":"45.9"}\n{"_meta":{"uuid":"9790e50e-0ed3-11ef-9c01-6d9be407e4b8"},"customer_id":"104","order_date":"2024-05-04 9:30:00","order_id":"7","row_id":209,"total_amount":"80.1"}\n'})}),"\n",(0,n.jsx)(t.p,{children:"If you see something similar, you\u2019re good to continue!"}),"\n",(0,n.jsxs)(t.h2,{id:"writing-the-derivation",children:["Writing the derivation",(0,n.jsx)("a",{id:"writing-the-derivation"})]}),"\n",(0,n.jsxs)(t.p,{children:["Set up your folder structure so you can organize the resources required for the derivation. Create a working directory to follow along, and inside, create a ",(0,n.jsx)(t.code,{children:"flow.yaml"})," file."]}),"\n",(0,n.jsxs)(t.p,{children:["Inside your ",(0,n.jsx)(t.code,{children:"flow.yaml "}),"file, add the following contents:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-yaml",children:"collections:\n\n\xa0\xa0Dani/join-tutorial-typescript/customers_with_orders:\n\xa0\xa0\xa0\xa0schema:\n\xa0\xa0\xa0\xa0\xa0\xa0description: >-\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0A document that represents the joined result of orders with customer\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0information\n\xa0\xa0\xa0\xa0\xa0\xa0type: object\n\xa0\xa0\xa0\xa0\xa0\xa0properties:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0customer_id:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0email:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0name:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0phone:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0orders:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: array\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0items:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0$ref: orders.schema.yaml\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0reduce:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0strategy: merge\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0key:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- /order_id\n\xa0\xa0\xa0\xa0\xa0\xa0required:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- customer_id\n\xa0\xa0\xa0\xa0\xa0\xa0reduce:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0strategy: merge\n\xa0\xa0\xa0\xa0key:\n\xa0\xa0\xa0\xa0\xa0\xa0- /customer_id\n\n\xa0\xa0\xa0\xa0derive:\n\xa0\xa0\xa0\xa0\xa0\xa0using:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0typescript:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0module: full-outer-join.flow.ts\n\xa0\xa0\xa0\xa0\xa0\xa0transforms:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- name: fromOrders\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0source:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0name: Dani/join-tutorial-orders/Sheet1_v2\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0shuffle:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0key:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- /customer_id\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- name: fromCustomers\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0source:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0name: Dani/join-tutorial-customers/Sheet1\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0shuffle:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0key:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- /customer_id\n"})}),"\n",(0,n.jsxs)(t.p,{children:["Let\u2019s take a look at this in a bit more detail. Essentially, we define one collection which it\u2019s a ",(0,n.jsx)(t.code,{children:"derivation"})," that is the result of two transformations."]}),"\n",(0,n.jsx)(t.p,{children:"In the schema definition, we specify what structure we want the documents of the result collection to take on."}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-yaml",children:"\xa0 Dani/join-tutorial-typescript/customers_with_orders:\n\xa0\xa0\xa0\xa0schema:\n\xa0\xa0\xa0\xa0\xa0\xa0description: >-\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0A document that represents the joined result of orders with customer\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0information\n\xa0\xa0\xa0\xa0\xa0\xa0type: object\n\xa0\xa0\xa0\xa0\xa0\xa0properties:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0customer_id:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0email:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0name:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0phone:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0orders:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: array\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0items:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0$ref: orders.schema.yaml\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0reduce:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0strategy: merge\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0key:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- /order_id\n\xa0\xa0\xa0\xa0\xa0\xa0required:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- customer_id\n\xa0\xa0\xa0\xa0\xa0\xa0reduce:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0strategy: merge\n\xa0\xa0\xa0\xa0key:\n\xa0\xa0\xa0\xa0\xa0\xa0- /customer_id\n"})}),"\n",(0,n.jsx)(t.p,{children:"Because you are going to implement a 1-to-many join using the two source collections, it\u2019s important to pay attention to what reduction strategy Flow uses."}),"\n",(0,n.jsxs)(t.p,{children:["There are two ",(0,n.jsx)(t.code,{children:"merge"})," strategies defined here, one for the ",(0,n.jsx)(t.code,{children:"customers_with_orders "}),"collection and for the nested ",(0,n.jsx)(t.code,{children:"orders"})," array.\xa0"]}),"\n",(0,n.jsx)(t.admonition,{title:"Merge reduces the left-hand side and right-hand side by recursively reducing shared document locations. The LHS and RHS must either both be objects, or both be arrays.",type:"note"}),"\n",(0,n.jsxs)(t.p,{children:["For the nested merge, you have to define a key, which is one or more JSON pointers that are relative to the reduced location. If both sides are arrays and a merge key is present, then a deep sorted merge of the respective items is done, as ordered by the key. In this case, setting it to ",(0,n.jsx)(t.code,{children:"order_id"})," will cause the reduction to collect all orders for a given customer."]}),"\n",(0,n.jsxs)(t.p,{children:["The items in the nested array of orders are defined by the schema in a separate file, to which we refer to using ",(0,n.jsx)(t.code,{children:"$ref: orders.schema.yaml"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"The derivation details are defined in the next section of the yaml:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-yaml",children:"\xa0 \xa0 derive:\n\xa0\xa0\xa0\xa0\xa0\xa0using:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0typescript:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0module: full-outer-join.flow.ts\n\xa0\xa0\xa0\xa0\xa0\xa0transforms:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- name: fromOrders\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0source:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0name: Dani/join-tutorial-orders/Sheet1_v2\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0shuffle:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0key:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- /customer_id\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- name: fromCustomers\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0source:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0name: Dani/join-tutorial-customers/Sheet1\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0shuffle:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0key:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- /customer_id\n"})}),"\n",(0,n.jsxs)(t.p,{children:["This tells flow that the transformation code is defined in a TypeScript file called ",(0,n.jsx)(t.code,{children:"full-outer-join.flow.ts"})," (which doesn\u2019t exist \u2013 yet!) and that there are in fact two transformations that it expects, one for each source collection."]}),"\n",(0,n.jsx)(t.p,{children:"Shuffles let Flow identify the shard that should process a particular source document, in order to co-locate that processing with other documents it may need to know about."}),"\n",(0,n.jsx)(t.p,{children:"Both transformations shuffle data on the same key. An important detail is that if a derivation has more than one transformation, the shuffle keys of all transformations must align with one another in terms of the extracted key types (string vs integer) as well as the number of components in a composite key."}),"\n",(0,n.jsxs)(t.p,{children:["Let\u2019s generate the scaffolding for the derivation using ",(0,n.jsx)(t.code,{children:"flowctl"}),"."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-shell",children:"flowctl generate --source flow.yaml\n"})}),"\n",(0,n.jsx)(t.p,{children:"This command will create a few new files in your current working directory."}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-shell",children:"\u279c\xa0 tree\n.\n\u251c\u2500\u2500 deno.json\n\u251c\u2500\u2500 flow.yaml\n\u251c\u2500\u2500 flow_generated\n\u2502 \xa0 \u2514\u2500\u2500 typescript\n\u2502 \xa0 \xa0 \xa0 \u2514\u2500\u2500 Dani\n\u2502 \xa0 \xa0 \xa0 \xa0 \xa0 \u2514\u2500\u2500 join-tutorial-typescript\n\u2502 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \u2514\u2500\u2500 customers_with_orders.ts\n\u251c\u2500\u2500 full-outer-join.flow.ts\n\u2514\u2500\u2500 orders.schema.yaml\n\n5 directories, 5 files\n"})}),"\n",(0,n.jsxs)(t.p,{children:["The folder ",(0,n.jsx)(t.code,{children:"flow_generated"})," along with the ",(0,n.jsx)(t.code,{children:"deno.json"})," file are two things you won\u2019t have to modify during this tutorial. If you take a look at file that ",(0,n.jsx)(t.code,{children:"flowtcl"})," generated under ",(0,n.jsx)(t.code,{children:"flow_generated/typescript/<your_working_directory>/<your_prefix>/customers_with_orders.ts"})," you can see the types you are able to use in your transformations."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typescript",children:"// Generated for published documents of derived collection customers_with_orders.\nexport type Document = /* A document that represents the joined result of orders with customer information */ {\n\xa0\xa0\xa0\xa0customer_id: string;\n\xa0\xa0\xa0\xa0email?: string;\n\xa0\xa0\xa0\xa0name?: string;\n\xa0\xa0\xa0\xa0orders?: unknown[];\n\xa0\xa0\xa0\xa0phone?: string;\n};\n\n// Generated for read documents of sourced collection Sheet1.\nexport type SourceFromOrders = {\n\xa0\xa0\xa0\xa0customer_id?: string;\n\xa0\xa0\xa0\xa0order_date?: string;\n\xa0\xa0\xa0\xa0order_id?: string;\n\xa0\xa0\xa0\xa0row_id: number;\n\xa0\xa0\xa0\xa0total_amount?: string;\n};\n\n// Generated for read documents of sourced collection Sheet1.\nexport type SourceFromCustomers = {\n\xa0\xa0\xa0\xa0customer_id?: string;\n\xa0\xa0\xa0\xa0email?: string;\n\xa0\xa0\xa0\xa0name?: string;\n\xa0\xa0\xa0\xa0phone?: string;\n\xa0\xa0\xa0\xa0row_id: number;\n};\n"})}),"\n",(0,n.jsxs)(t.p,{children:["Now, the actual transformation code will live in the following file: ",(0,n.jsx)(t.code,{children:"full-outer-join.flow.ts"}),". Take a look at its contents."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typescript",children:'import { IDerivation, Document, SourceFromOrders, SourceFromCustomers } from \'flow/Dani/join-tutorial-typescript/customers_with_orders.ts\';\n\n// Implementation for derivation Dani/join-tutorial-typescript/customers_with_orders.\nexport class Derivation extends IDerivation {\n\xa0\xa0\xa0\xa0fromOrders(_read: { doc: SourceFromOrders }): Document[] {\n\xa0\xa0\xa0\xa0\xa0\xa0throw new Error("Not implemented");\n\xa0\xa0\xa0\xa0}\n\xa0\xa0\xa0\xa0fromCustomers(_read: { doc: SourceFromCustomers }): Document[] {\n\xa0\xa0\xa0\xa0\xa0\xa0throw new Error("Not implemented");\n\xa0\xa0}\n}\n'})}),"\n",(0,n.jsxs)(t.p,{children:["Helpfully, ",(0,n.jsx)(t.code,{children:"flowctl"})," provides two skeleton functions. Update the function body to implement the filter functionality. Modify the Derivation class like this:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typescript",children:'import { IDerivation, Document, SourceFromOrders, SourceFromCustomers } from \'flow/Dani/join-tutorial-typescript/customers_with_orders.ts\';\n\n// Implementation for derivation Dani/join-tutorial-typescript/customers_with_orders.\nexport class Derivation extends IDerivation {\n\xa0\xa0\xa0\xa0fromOrders(_read: { doc: SourceFromOrders }): Document[] {\n\xa0\xa0\xa0\xa0\xa0\xa0return [{\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0customer_id: _read.doc.customer_id || "",\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0orders: [_read.doc],\n\xa0\xa0\xa0\xa0\xa0\xa0}];\n\xa0\xa0\xa0\xa0}\n\xa0\xa0\xa0\xa0fromCustomers(_read: { doc: SourceFromCustomers }): Document[] {\n\xa0\xa0\xa0\xa0\xa0\xa0return [{\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0customer_id: _read.doc.customer_id || "",\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0email: _read.doc.email,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0name: _read.doc.name,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0phone: _read.doc.phone\n\xa0\xa0\xa0\xa0\xa0\xa0}];\n\xa0\xa0}\n}\n'})}),"\n",(0,n.jsx)(t.p,{children:"As you can see here, all we do is return the fields we need from each document, there\u2019s no code required to define the actual \u201cjoin\u201d \u2013 all the heavy lifting is done in the reduction phase during materialization by the Flow runtime based on the schema you defined earlier."}),"\n",(0,n.jsxs)(t.p,{children:["Publish the derivation using ",(0,n.jsx)(t.code,{children:"flowctl"}),":"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-shell",children:"flowctl catalog publish --source flow.yaml\n"})}),"\n",(0,n.jsx)(t.p,{children:"After it\u2019s successfully published, head over to the Flow dashboard to see the new collection."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//customers_with_orders_collection_d3c09d237f/customers_with_orders_collection_d3c09d237f.png",alt:"Customers with Orders collection"})}),"\n",(0,n.jsx)(t.p,{children:"If you take a look at the preview window at the bottom of the page, you might notice that the documents are not yet in their final, reduced form. As mentioned earlier, the reduction happens during materialization. Let's create one to show the results!"}),"\n",(0,n.jsxs)(t.p,{children:["Head over to the ",(0,n.jsx)(t.a,{href:"https://dashboard.estuary.dev/materializations/create",children:"materialization creation page"}),", search for Google Sheets and configure a new connector. Create a fresh Google Sheet and copy its URL as the Spreadsheet Link."]}),"\n",(0,n.jsx)(t.p,{children:"In the third configuration step, select the derivation you created as the source collection."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//source_collection_capture_e3946cd3a0/source_collection_capture_e3946cd3a0.png",alt:"Link source collection to materialization"})}),"\n",(0,n.jsx)(t.p,{children:"After everything looks good, press the \u201cSave and Publish\u201d button in the top-right corner to provision your materialization connector."}),"\n",(0,n.jsx)(t.p,{children:"And that\u2019s it! Go check out the sheet you created to store the results. You should see all orders associated with their respective customer in the nested array."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//results_8c3a566b86/results_8c3a566b86.png",alt:"Reduced results in a Google Sheet"})}),"\n",(0,n.jsx)(t.p,{children:"To test the data flow, head over to the source \u201cOrders\u201d sheet, and add a new order for a customer. After a few seconds, you should see the new order added to the array of existing orders of the customer. Take a few minutes to play around with different actions as well; deleting an order, adding a customer, editing details of either entity."}),"\n",(0,n.jsxs)(t.h2,{id:"wrapping-up",children:["Wrapping up",(0,n.jsx)("a",{id:"wrapping-up"})]}),"\n",(0,n.jsx)(t.p,{children:"In this guide you learned how to write a TypeScript derivation to join two collections. After finishing with the tutorial, don\u2019t forget to delete resources you don\u2019t need anymore."})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},28453:(e,t,o)=>{o.d(t,{R:()=>s,x:()=>d});var n=o(96540);const r={},i=n.createContext(r);function s(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9e64d05b.e2db52a4.js b/pr-preview/pr-1594/assets/js/9e64d05b.e2db52a4.js deleted file mode 100644 index 4cf6fe57a0..0000000000 --- a/pr-preview/pr-1594/assets/js/9e64d05b.e2db52a4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5306],{11712:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>d,toc:()=>o});var n=i(74848),l=i(28453),r=i(61114);const s={sidebar_position:2},a="Edit a draft created in the web app",d={id:"guides/flowctl/edit-draft-from-webapp",title:"Edit a draft created in the web app",description:"When you create or edit tasks in the web app, your work is periodically saved as a draft.",source:"@site/docs/guides/flowctl/edit-draft-from-webapp.md",sourceDirName:"guides/flowctl",slug:"/guides/flowctl/edit-draft-from-webapp",permalink:"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/flowctl/edit-draft-from-webapp.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Edit a Flow specification locally",permalink:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally"},next:{title:"Create a derivation with flowctl",permalink:"/pr-preview/pr-1594/guides/flowctl/create-derivation"}},c={},o=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Identify the draft and pull it locally",id:"identify-the-draft-and-pull-it-locally",level:2},{value:"Edit the draft and publish",id:"edit-the-draft-and-publish",level:2}];function h(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"edit-a-draft-created-in-the-web-app",children:"Edit a draft created in the web app"}),"\n",(0,n.jsxs)(t.p,{children:["When you ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"create"})," or ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/edit-data-flows",children:"edit"})," tasks in the web app, your work is periodically saved as a ",(0,n.jsx)(t.strong,{children:"draft"}),".\nSpecifically, each time you click the ",(0,n.jsx)(t.strong,{children:"Next"})," button to reveal the ",(0,n.jsx)(t.strong,{children:"Save and Publish"})," button, a draft is saved."]}),"\n",(0,n.jsx)(t.p,{children:"If you navigate away from your workflow in the web app before publishing, or if you simply prefer to finish up with flowctl,\nyou can pull the draft into a local environment, finish making changes, and publish the task."}),"\n",(0,n.jsx)(r.A,{chart:"\n\tgraph LR;\n a[Catalog];\n d[Local files];\n c[Draft];\n d-- 2: Author to draft --\x3ec;\n c-- 1: Pull draft --\x3ed;\n c-- 3: Publish draft --\x3ea;\n"}),"\n",(0,n.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsx)(t.p,{children:"To complete this workflow, you need:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["An ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/getting-started/installation",children:"Estuary account"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/getting-started/installation#get-started-with-the-flow-cli",children:"flowctl installed locally"})}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"identify-the-draft-and-pull-it-locally",children:"Identify the draft and pull it locally"}),"\n",(0,n.jsx)(t.p,{children:"Drafts aren't currently visible in the Flow web app, but you can get a list with flowctl."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Authorize flowctl."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Go to the ",(0,n.jsx)(t.a,{href:"https://dashboard.estuary.dev/admin/api",children:"CLI-API tab of the web app"})," and copy your access token."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Run ",(0,n.jsx)(t.code,{children:"flowctl auth token --token <paste-token-here>"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Run ",(0,n.jsx)(t.code,{children:"flowctl draft list"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"flowctl outputs a table of all the drafts to which you have access, from oldest to newest."}),"\n",(0,n.jsxs)(t.ol,{start:"3",children:["\n",(0,n.jsx)(t.li,{children:"Use the name and timestamp to find the draft you're looking for."}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Each draft has an ",(0,n.jsx)(t.strong,{children:"ID"}),", and most have a name in the ",(0,n.jsx)(t.strong,{children:"Details"})," column. Note the ",(0,n.jsx)(t.strong,{children:"# of Specs"})," column.\nFor drafts created in the web app, materialization drafts will always contain one specification.\nA number higher than 1 indicates a capture with its associated collections."]}),"\n",(0,n.jsxs)(t.ol,{start:"4",children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Copy the draft ID."}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Select the draft: ",(0,n.jsx)(t.code,{children:"flowctl draft select --id <paste-id-here>"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Pull the draft source files to your working directory: ",(0,n.jsx)(t.code,{children:"flowctl draft develop"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Browse the source files."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["The source files and their directory structure will look slightly different depending on the draft.\nRegardless, there will always be a top-level file called ",(0,n.jsx)(t.code,{children:"flow.yaml"})," that ",(0,n.jsx)(t.em,{children:"imports"})," all other YAML files,\nwhich you'll find in a subdirectory named for your catalog prefix.\nThese, in turn, contain the specifications you'll want to edit."]}),"\n",(0,n.jsx)(t.h2,{id:"edit-the-draft-and-publish",children:"Edit the draft and publish"}),"\n",(0,n.jsx)(t.p,{children:"Next, you'll make changes to the specification(s), test, and publish the draft."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Open the YAML files that contain the specification you want to edit."}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Make changes. For guidance on how to construct Flow specifications, see the documentation for the entity type:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/captures#specification",children:"Captures"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/collections#specification",children:"Collections"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#specification",children:"Materializations"})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["When you're done, sync the local work to the global draft: ",(0,n.jsx)(t.code,{children:"flowctl draft author --source flow.yaml"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Specifying the top-level ",(0,n.jsx)(t.code,{children:"flow.yaml"})," file as the source ensures that all entities in the draft are imported."]}),"\n",(0,n.jsxs)(t.ol,{start:"4",children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Publish the draft: ",(0,n.jsx)(t.code,{children:"flowctl draft publish"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Once this operation completes successfully, check to verify if the entity or entities are live. You can:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Go to the appropriate tab in the Flow web app."}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Run ",(0,n.jsx)(t.code,{children:"flowctl catalog list"}),", filtering by ",(0,n.jsx)(t.code,{children:"--name"}),", ",(0,n.jsx)(t.code,{children:"--prefix"}),", or entity type, for example ",(0,n.jsx)(t.code,{children:"--capture"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"If you're not satisfied with the published entities, you can continue to edit them.\nSee the other guides for help:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/edit-data-flows",children:"Edit in the web app"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally",children:"Edit with flowctl"}),"."]}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},61114:(e,t,i)=>{i.d(t,{A:()=>s});var n=i(96540),l=i(99702),r=i(74848);l.N.initialize({startOnLoad:!0});const s=e=>{let{chart:t}=e;return(0,n.useEffect)((()=>{l.N.contentLoaded()}),[]),(0,r.jsx)("div",{className:"mermaid",children:t})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9e8f5f1c.a4c5d2e7.js b/pr-preview/pr-1594/assets/js/9e8f5f1c.a4c5d2e7.js deleted file mode 100644 index e3eccb86af..0000000000 --- a/pr-preview/pr-1594/assets/js/9e8f5f1c.a4c5d2e7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6730],{93057:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var r=t(74848),i=t(28453);const s={description:"Using the append reduction strategy",sidebar_position:1},a="append",o={id:"reference/reduction-strategies/append",title:"append",description:"Using the append reduction strategy",source:"@site/docs/reference/reduction-strategies/append.md",sourceDirName:"reference/reduction-strategies",slug:"/reference/reduction-strategies/append",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/append",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/reduction-strategies/append.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{description:"Using the append reduction strategy",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Reduction strategies",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/"},next:{title:"firstWriteWins and lastWriteWins",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins"}},d={},c=[];function p(e){const n={code:"code",h1:"h1",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"append",children:"append"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"append"})," works with arrays, and extends the left-hand array with items from the right-hand side."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'collections:\n - name: example/reductions/append\n schema:\n type: object\n reduce: { strategy: merge }\n properties:\n key: { type: string }\n value:\n # Append only works with type "array".\n # Others will throw an error at build time.\n type: array\n reduce: { strategy: append }\n required: [key]\n key: [/key]\n\ntests:\n "Expect we can append arrays":\n - ingest:\n collection: example/reductions/append\n documents:\n - { key: "key", value: [1, 2] }\n - { key: "key", value: [3, null, "abc"] }\n - verify:\n collection: example/reductions/append\n documents:\n - { key: "key", value: [1, 2, 3, null, "abc"] }\n'})}),"\n",(0,r.jsx)(n.p,{children:"The right-hand side must always be an array. The left-hand side may be null, in which case the reduction is treated as a no-op and its result remains null. This can be combined with schema conditionals to toggle whether reduction-reduction should be done or not."})]})}function l(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var r=t(96540);const i={},s=r.createContext(i);function a(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9fc067fe.251a75bc.js b/pr-preview/pr-1594/assets/js/9fc067fe.251a75bc.js deleted file mode 100644 index 2c6aea1a04..0000000000 --- a/pr-preview/pr-1594/assets/js/9fc067fe.251a75bc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7057],{9585:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>t,metadata:()=>o,toc:()=>d});var r=s(74848),i=s(28453);const t={},c="Amazon Kinesis",o={id:"reference/Connectors/capture-connectors/amazon-kinesis",title:"Amazon Kinesis",description:"This connector captures data from Amazon Kinesis streams.",source:"@site/docs/reference/Connectors/capture-connectors/amazon-kinesis.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/amazon-kinesis",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/amazon-kinesis.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amazon DynamoDB",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb"},next:{title:"Amazon Redshift",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"amazon-kinesis",children:"Amazon Kinesis"}),"\n",(0,r.jsx)(n.p,{children:"This connector captures data from Amazon Kinesis streams."}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://github.com/estuary/connectors/pkgs/container/source-kinesis",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-kinesis:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"One or more Amazon Kinesis streams. For a given capture, all streams must:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Contain JSON data only"}),"\n",(0,r.jsxs)(n.li,{children:["Be in the same ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions",children:"AWS region"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["An IAM user with the following ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesis.html",children:"permissions"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"ListShards"})," on all resources"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"GetRecords"})," on all streams used"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"GetShardIterator"})," on all streams used"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"DescribeStream"})," on all streams used"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"DescribeStreamSummary"})," on all streams used"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["These permissions should be specified with the ",(0,r.jsx)(n.code,{children:"kinesis:"})," prefix in an IAM policy document.\nFor more details and examples, see ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/streams/latest/dev/controlling-access.html",children:"Controlling Access to Amazon Kinesis Data"})," in the Amazon docs."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["The AWS ",(0,r.jsx)(n.strong,{children:"access key"})," and ",(0,r.jsx)(n.strong,{children:"secret access key"})," for the user.\nSee the ",(0,r.jsx)(n.a,{href:"https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/",children:"AWS blog"})," for help finding these credentials."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Amazon Kinesis source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/awsAccessKeyId"})})}),(0,r.jsx)(n.td,{children:"AWS access key ID"}),(0,r.jsx)(n.td,{children:"Part of the AWS credentials that will be used to connect to Kinesis."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsxs)(n.td,{children:["Required, ",(0,r.jsx)(n.code,{children:'"example-aws-access-key-id"'})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/awsSecretAccessKey"})})}),(0,r.jsx)(n.td,{children:"AWS secret access key"}),(0,r.jsx)(n.td,{children:"Part of the AWS credentials that will be used to connect to Kinesis."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsxs)(n.td,{children:["Required, ",(0,r.jsx)(n.code,{children:'"example-aws-secret-access-key"'})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/endpoint"})}),(0,r.jsx)(n.td,{children:"AWS endpoint"}),(0,r.jsx)(n.td,{children:"The AWS endpoint URI to connect to, useful if you're capturing from a kinesis-compatible API that isn't provided by AWS."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/region"})})}),(0,r.jsx)(n.td,{children:"AWS region"}),(0,r.jsx)(n.td,{children:"The name of the AWS region where the Kinesis stream is located."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsxs)(n.td,{children:["Required, ",(0,r.jsx)(n.code,{children:'"us-east-1"'})]})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Stream name."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-kinesis:dev\n config:\n awsAccessKeyId: "example-aws-access-key-id"\n awsSecretAccessKey: "example-aws-secret-access-key"\n region: "us-east-1"\n bindings:\n - resource:\n stream: ${STREAM_NAME}\n target: ${PREFIX}/${COLLECTION_NAME}\n\n'})}),"\n",(0,r.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each Kinesis stream."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>c,x:()=>o});var r=s(96540);const i={},t=r.createContext(i);function c(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/9fce37be.7fefd728.js b/pr-preview/pr-1594/assets/js/9fce37be.7fefd728.js deleted file mode 100644 index e9f073f92f..0000000000 --- a/pr-preview/pr-1594/assets/js/9fce37be.7fefd728.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1771],{42677:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var t=n(74848),r=n(28453);const i={sidebar_position:6},o="Supabase",a={id:"reference/Connectors/capture-connectors/PostgreSQL/Supabase",title:"Supabase",description:"This connector uses change data capture (CDC) to continuously capture updates in a Supabase PostgreSQL database into one or more Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/PostgreSQL/Supabase.md",sourceDirName:"reference/Connectors/capture-connectors/PostgreSQL",slug:"/reference/Connectors/capture-connectors/PostgreSQL/Supabase",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/PostgreSQL/Supabase.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/"},next:{title:"Amazon RDS for PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres"}},c={},l=[{value:"Supported versions and platforms",id:"supported-versions-and-platforms",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Direct Database Connection",id:"direct-database-connection",level:3},{value:"Setup",id:"setup",level:2},{value:"Backfills and performance considerations",id:"backfills-and-performance-considerations",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"SSL Mode",id:"ssl-mode",level:4},{value:"Sample",id:"sample",level:3},{value:"TOASTed values",id:"toasted-values",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"Publications",id:"publications",level:2}];function d(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"supabase",children:"Supabase"}),"\n",(0,t.jsx)(s.p,{children:"This connector uses change data capture (CDC) to continuously capture updates in a Supabase PostgreSQL database into one or more Flow collections."}),"\n",(0,t.jsxs)(s.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(s.a,{href:"https://github.com/estuary/connectors/pkgs/container/source-postgres",children:(0,t.jsx)(s.code,{children:"ghcr.io/estuary/source-postgres:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(s.h2,{id:"supported-versions-and-platforms",children:"Supported versions and platforms"}),"\n",(0,t.jsx)(s.p,{children:"This connector supports all Supabase PostgreSQL instances."}),"\n",(0,t.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(s.p,{children:"You'll need a Supabase PostgreSQL database setup with the following:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["A Supabase IPv4 address and direct connection hostname which bypasses the Supabase connection pooler.\nSee ",(0,t.jsx)(s.a,{href:"#direct-database-connection",children:"Direct Database Connection"})," for details."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/runtime-config-wal.html",children:"Logical replication enabled"})," \u2014 ",(0,t.jsx)(s.code,{children:"wal_level=logical"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/sql-createrole.html",children:"User role"})," with ",(0,t.jsx)(s.code,{children:"REPLICATION"})," attribute"]}),"\n",(0,t.jsxs)(s.li,{children:["A ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/warm-standby.html#STREAMING-REPLICATION-SLOTS",children:"replication slot"}),". This represents a \u201ccursor\u201d into the PostgreSQL write-ahead log from which change events can be read.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Optional; if none exist, one will be created by the connector."}),"\n",(0,t.jsxs)(s.li,{children:["If you wish to run multiple captures from the same database, each must have its own slot.\nYou can create these slots yourself, or by specifying a name other than the default in the advanced ",(0,t.jsx)(s.a,{href:"#configuration",children:"configuration"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["A ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/sql-createpublication.html",children:"publication"}),". This represents the set of tables for which change events will be reported.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["A watermarks table. The watermarks table is a small \u201cscratch space\u201d to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.admonition,{title:"Configuration Tip",type:"tip",children:(0,t.jsxs)(s.p,{children:["To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see ",(0,t.jsx)(s.a,{href:"/guides/connect-network/",children:"configure connections with SSH tunneling"}),"."]})}),"\n",(0,t.jsx)(s.h3,{id:"direct-database-connection",children:"Direct Database Connection"}),"\n",(0,t.jsxs)(s.p,{children:["By default, Supabase guides users into connecting to their database through a\n",(0,t.jsx)(s.a,{href:"https://supabase.com/docs/guides/database/connecting-to-postgres#connection-pooler",children:"Connection Pooler"}),".\nConnection poolers are helpful for many applications, but unfortunately the pooler\ndoes not support the CDC replication features that this connector relies on."]}),"\n",(0,t.jsxs)(s.p,{children:["This capture connector requires a direct connection address for your database.\nThis address can be found by navigating to ",(0,t.jsx)(s.code,{children:"Settings > Database"})," in the Supabase\ndashboard and then making sure that the ",(0,t.jsx)(s.code,{children:"Display connection pooler"})," checkbox is\n",(0,t.jsx)(s.strong,{children:"unchecked"})," so that the appropriate connection information is shown for a direct\nconnection."]}),"\n",(0,t.jsxs)(s.p,{children:["You will also need to configure a ",(0,t.jsx)(s.a,{href:"https://supabase.com/docs/guides/platform/ipv4-address",children:"dedicated IPv4 address"}),"\nfor your database, if you have not already done so. This can be configured under ",(0,t.jsx)(s.code,{children:"Project Settings > Add Ons > Dedicated IPv4 address"}),"\nin the Supabase dashboard."]}),"\n",(0,t.jsx)(s.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsx)(s.p,{children:"The simplest way to meet the above prerequisites is to change the WAL level and have the connector use a database superuser role."}),"\n",(0,t.jsx)(s.p,{children:"For a more restricted setup, create a new user with just the required permissions as detailed in the following steps:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"Connect to your instance and create a new user and password:"}),"\n"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",children:"CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION;\n"})}),"\n",(0,t.jsxs)(s.ol,{start:"2",children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Assign the appropriate role."}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"If using PostgreSQL v14 or later:"}),"\n"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",children:"GRANT pg_read_all_data TO flow_capture;\n"})}),"\n",(0,t.jsxs)(s.ol,{start:"2",children:["\n",(0,t.jsx)(s.li,{children:"If using an earlier version:"}),"\n"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",children:"ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture;\nGRANT SELECT ON ALL TABLES IN SCHEMA public, <other_schema> TO flow_capture;\nGRANT SELECT ON ALL TABLES IN SCHEMA information_schema, pg_catalog TO flow_capture;\n"})}),"\n",(0,t.jsxs)(s.p,{children:["where ",(0,t.jsx)(s.code,{children:"<other_schema>"})," lists all schemas that will be captured from."]}),"\n",(0,t.jsx)(s.admonition,{type:"info",children:(0,t.jsx)(s.p,{children:"If an even more restricted set of permissions is desired, you can also grant SELECT on\njust the specific table(s) which should be captured from. The \u2018information_schema\u2019 and\n\u2018pg_catalog\u2019 access is required for stream auto-discovery, but not for capturing already\nconfigured streams."})}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Create the watermarks table, grant privileges, and create publication:"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",children:"CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);\nGRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;\nCREATE PUBLICATION flow_publication;\nALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);\nALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>;\n"})}),"\n",(0,t.jsxs)(s.p,{children:["where ",(0,t.jsx)(s.code,{children:"<other_tables>"})," lists all tables that will be captured from. The ",(0,t.jsx)(s.code,{children:"publish_via_partition_root"}),"\nsetting is recommended (because most users will want changes to a partitioned table to be captured\nunder the name of the root table) but is not required."]}),"\n",(0,t.jsxs)(s.ol,{start:"4",children:["\n",(0,t.jsx)(s.li,{children:"Set WAL level to logical:"}),"\n"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",children:"ALTER SYSTEM SET wal_level = logical;\n"})}),"\n",(0,t.jsxs)(s.ol,{start:"5",children:["\n",(0,t.jsx)(s.li,{children:"Restart PostgreSQL to allow the WAL level change to take effect."}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"backfills-and-performance-considerations",children:"Backfills and performance considerations"}),"\n",(0,t.jsxs)(s.p,{children:["When the a PostgreSQL capture is initiated, by default, the connector first ",(0,t.jsx)(s.em,{children:"backfills"}),", or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis."]}),"\n",(0,t.jsx)(s.p,{children:"This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow.\nHowever, you may find it appropriate to skip the backfill, especially for extremely large tables."}),"\n",(0,t.jsxs)(s.p,{children:["In this case, you may turn of backfilling on a per-table basis. See ",(0,t.jsx)(s.a,{href:"#properties",children:"properties"})," for details."]}),"\n",(0,t.jsx)(s.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(s.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector."]}),"\n",(0,t.jsx)(s.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(s.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Property"}),(0,t.jsx)(s.th,{children:"Title"}),(0,t.jsx)(s.th,{children:"Description"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Required/Default"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/address"})})}),(0,t.jsx)(s.td,{children:"Address"}),(0,t.jsxs)(s.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/database"})})}),(0,t.jsx)(s.td,{children:"Database"}),(0,t.jsx)(s.td,{children:"Logical database name to capture from."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsxs)(s.td,{children:["Required, ",(0,t.jsx)(s.code,{children:'"postgres"'})]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/user"})})}),(0,t.jsx)(s.td,{children:"User"}),(0,t.jsx)(s.td,{children:"The database user to authenticate as."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsxs)(s.td,{children:["Required, ",(0,t.jsx)(s.code,{children:'"flow_capture"'})]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/password"})})}),(0,t.jsx)(s.td,{children:"Password"}),(0,t.jsx)(s.td,{children:"Password for the specified database user."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced"})}),(0,t.jsx)(s.td,{children:"Advanced Options"}),(0,t.jsx)(s.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,t.jsx)(s.td,{children:"object"}),(0,t.jsx)(s.td,{})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/backfill_chunk_size"})}),(0,t.jsx)(s.td,{children:"Backfill Chunk Size"}),(0,t.jsx)(s.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,t.jsx)(s.td,{children:"integer"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"4096"})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/publicationName"})}),(0,t.jsx)(s.td,{children:"Publication Name"}),(0,t.jsx)(s.td,{children:"The name of the PostgreSQL publication to replicate from."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:'"flow_publication"'})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/skip_backfills"})}),(0,t.jsx)(s.td,{children:"Skip Backfills"}),(0,t.jsx)(s.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/slotName"})}),(0,t.jsx)(s.td,{children:"Slot Name"}),(0,t.jsx)(s.td,{children:"The name of the PostgreSQL replication slot to replicate from."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:'"flow_slot"'})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/watermarksTable"})}),(0,t.jsx)(s.td,{children:"Watermarks Table"}),(0,t.jsx)(s.td,{children:"The name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:'"public.flow_watermarks"'})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/sslmode"})}),(0,t.jsx)(s.td,{children:"SSL Mode"}),(0,t.jsx)(s.td,{children:"Overrides SSL connection behavior by setting the 'sslmode' parameter."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Property"}),(0,t.jsx)(s.th,{children:"Title"}),(0,t.jsx)(s.th,{children:"Description"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Required/Default"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/namespace"})})}),(0,t.jsx)(s.td,{children:"Namespace"}),(0,t.jsxs)(s.td,{children:["The ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/9.1/ddl-schemas.html",children:"namespace/schema"})," of the table."]}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/stream"})})}),(0,t.jsx)(s.td,{children:"Stream"}),(0,t.jsx)(s.td,{children:"Table name."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/syncMode"})})}),(0,t.jsx)(s.td,{children:"Sync mode"}),(0,t.jsxs)(s.td,{children:["Connection method. Always set to ",(0,t.jsx)(s.code,{children:"incremental"}),"."]}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"ssl-mode",children:"SSL Mode"}),"\n",(0,t.jsxs)(s.p,{children:["Certain managed PostgreSQL implementations may require you to explicitly set the ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION",children:"SSL Mode"})," to connect with Flow. One example is ",(0,t.jsx)(s.a,{href:"https://neon.tech/docs/connect/connect-securely",children:"Neon"}),", which requires the setting ",(0,t.jsx)(s.code,{children:"verify-full"}),". Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration."]}),"\n",(0,t.jsx)(s.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(s.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/source-postgres:dev"\n config:\n address: "localhost:5432"\n database: "postgres"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n stream: ${TABLE_NAME}\n namespace: ${TABLE_NAMESPACE}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,t.jsx)(s.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,t.jsx)(s.h2,{id:"toasted-values",children:"TOASTed values"}),"\n",(0,t.jsxs)(s.p,{children:["PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons.\nIf your tables contain values that exceed the limit, those values can't be stored directly.\nPostgreSQL uses ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/storage-toast.html",children:"TOAST"})," (The Oversized-Attribute Storage Technique) to\nstore them separately."]}),"\n",(0,t.jsxs)(s.p,{children:["TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector.\nIf a change event occurs on a row that contains a TOASTed value, ",(0,t.jsx)(s.em,{children:"but the TOASTed value itself is unchanged"}),", it is omitted from the WAL.\nAs a result, the connector emits a row update with the a value omitted, which might cause\nunexpected results in downstream catalog tasks if adjustments are not made."]}),"\n",(0,t.jsxs)(s.p,{children:["The PostgreSQL connector handles TOASTed values for you when you follow the ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#flowctl-discover",children:"standard discovery workflow"}),"\nor use the ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#flow-ui",children:"Flow UI"})," to create your capture.\nIt uses ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/merge",children:"merge"})," ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"reductions"}),"\nto fill in the previous known TOASTed value in cases when that value is omitted from a row update."]}),"\n",(0,t.jsx)(s.p,{children:"However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["When you materialize the captured data to another system using a connector that requires ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})]}),"\n",(0,t.jsxs)(s.li,{children:["When you perform a ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivation"})," that uses TOASTed values"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(s.p,{children:"If you encounter an issue that you suspect is due to TOASTed values, try the following:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Ensure your collection's schema is using the merge ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/schemas#reduce-annotations",children:"reduction strategy"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/9.4/sql-altertable.html",children:"Set REPLICA IDENTITY to FULL"})," for the table. This circumvents the problem by forcing the\nWAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"mailto:support@estuary.dev",children:"Contact Estuary support"})," for assistance."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"publications",children:"Publications"}),"\n",(0,t.jsx)(s.p,{children:"It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",children:"CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true);\n"})}),"\n",(0,t.jsx)(s.p,{children:"Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes."})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>a});var t=n(96540);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/a06d9ffe.c7666626.js b/pr-preview/pr-1594/assets/js/a06d9ffe.c7666626.js deleted file mode 100644 index 3a523d0aa9..0000000000 --- a/pr-preview/pr-1594/assets/js/a06d9ffe.c7666626.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3344],{7867:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>o});var r=n(74848),s=n(28453);const i={},d="Apache Parquet Files in Amazon S3",c={id:"reference/Connectors/materialization-connectors/amazon-s3-parquet",title:"Apache Parquet Files in Amazon S3",description:"This connector materializes delta updates of",source:"@site/docs/reference/Connectors/materialization-connectors/amazon-s3-parquet.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/amazon-s3-parquet",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/amazon-s3-parquet.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Apache Iceberg Tables in Amazon S3",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg"},next:{title:"Google BigQuery",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery"}},l={},o=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Parquet Data Types",id:"parquet-data-types",level:2},{value:"File Names",id:"file-names",level:2},{value:"Eventual Consistency",id:"eventual-consistency",level:2}];function a(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"apache-parquet-files-in-amazon-s3",children:"Apache Parquet Files in Amazon S3"}),"\n",(0,r.jsxs)(t.p,{children:["This connector materializes ",(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})," of\nFlow collections into an S3 bucket in the Apache Parquet format."]}),"\n",(0,r.jsx)(t.p,{children:"The delta updates are batched within Flow, converted to CSV files, and then pushed to the S3 bucket\nat a time interval that you set. Files are limited to a configurable maximum size. Each materialized\nFlow collection will produce many separate files."}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://ghcr.io/estuary/materialize-s3-parquet:dev",children:(0,r.jsx)(t.code,{children:"ghcr.io/estuary/materialize-s3-parquet:dev"})}),"\nprovides the latest connector image. You can also follow the link in your browser to see past image\nversions."]}),"\n",(0,r.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(t.p,{children:"To use this connector, you'll need:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["An S3 bucket to write files to. See ",(0,r.jsx)(t.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html",children:"this\nguide"})," for\ninstructions on setting up a new S3 bucket."]}),"\n",(0,r.jsxs)(t.li,{children:["An AWS root or IAM user with the\n",(0,r.jsx)(t.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html",children:(0,r.jsx)(t.code,{children:"s3:PutObject"})})," permission\nfor the S3 bucket. For this user, you'll need the ",(0,r.jsx)(t.strong,{children:"access key"})," and ",(0,r.jsx)(t.strong,{children:"secret access key"}),". See\nthe ",(0,r.jsx)(t.a,{href:"https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/",children:"AWS blog"})," for help\nfinding these credentials."]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Use the below properties to configure the materialization, which will direct one or more of your\nFlow collections to your bucket."}),"\n",(0,r.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/bucket"})})}),(0,r.jsx)(t.td,{children:"Bucket"}),(0,r.jsx)(t.td,{children:"Bucket to store materialized objects."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/awsAccessKeyId"})})}),(0,r.jsx)(t.td,{children:"AWS Access Key ID"}),(0,r.jsx)(t.td,{children:"Access Key ID for writing data to the bucket."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/awsSecretAccessKey"})})}),(0,r.jsx)(t.td,{children:"AWS Secret Access key"}),(0,r.jsx)(t.td,{children:"Secret Access Key for writing data to the bucket."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/region"})})}),(0,r.jsx)(t.td,{children:"Region"}),(0,r.jsx)(t.td,{children:"Region of the bucket to write to."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/uploadInterval"})})}),(0,r.jsx)(t.td,{children:"Upload Interval"}),(0,r.jsx)(t.td,{children:"Frequency at which files will be uploaded."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"5m"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/prefix"})}),(0,r.jsx)(t.td,{children:"Prefix"}),(0,r.jsx)(t.td,{children:"Optional prefix that will be used to store objects."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/fileSizeLimit"})}),(0,r.jsx)(t.td,{children:"File Size Limit"}),(0,r.jsx)(t.td,{children:"Approximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank."}),(0,r.jsx)(t.td,{children:"integer"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/endpoint"})}),(0,r.jsx)(t.td,{children:"Custom S3 Endpoint"}),(0,r.jsx)(t.td,{children:"The S3 endpoint URI to connect to. Use if you're materializing to a compatible API that isn't provided by AWS. Should normally be left blank."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/parquetConfig/rowGroupRowLimit"})}),(0,r.jsx)(t.td,{children:"Row Group Row Limit"}),(0,r.jsx)(t.td,{children:"Maximum number of rows in a row group. Defaults to 1000000 if blank."}),(0,r.jsx)(t.td,{children:"integer"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/parquetConfig/rowGroupByteLimit"})}),(0,r.jsx)(t.td,{children:"Row Group Byte Limit"}),(0,r.jsx)(t.td,{children:"Approximate maximum number of bytes in a row group. Defaults to 536870912 (512 MiB) if blank."}),(0,r.jsx)(t.td,{children:"integer"}),(0,r.jsx)(t.td,{})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/path"})})}),(0,r.jsx)(t.td,{children:"Path"}),(0,r.jsx)(t.td,{children:"The path that objects will be materialized to."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:'materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/materialize-s3-parquet:dev"\n config:\n bucket: bucket\n awsAccessKeyId: <access_key_id>\n awsSecretAccessKey: <secret_access_key>\n region: us-east-2\n uploadInterval: 5m\n bindings:\n - resource:\n path: ${COLLECTION_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,r.jsx)(t.h2,{id:"parquet-data-types",children:"Parquet Data Types"}),"\n",(0,r.jsxs)(t.p,{children:["Flow collection fields are written to Parquet files based on the data type of the field. Depending\non the field data type, the Parquet data type may be a ",(0,r.jsx)(t.a,{href:"https://parquet.apache.org/docs/file-format/types/",children:"primitive Parquet\ntype"}),", or a primitive Parquet type extended by a\n",(0,r.jsx)(t.a,{href:"https://github.com/apache/parquet-format/blob/master/LogicalTypes.md",children:"logical Parquet type"}),"."]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Collection Field Data Type"}),(0,r.jsx)(t.th,{children:"Parquet Data Type"}),(0,r.jsx)(t.th,{})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"array"})}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"JSON"})," (extends ",(0,r.jsx)(t.strong,{children:"BYTE_ARRAY"}),")"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"object"})}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"JSON"})," (extends ",(0,r.jsx)(t.strong,{children:"BYTE_ARRAY"}),")"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"boolean"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"BOOLEAN"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"integer"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"INT64"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"number"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"DOUBLE"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{contentEncoding: base64}"})]}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"BYTE_ARRAY"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{format: date}"})]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"DATE"})," (extends ",(0,r.jsx)(t.strong,{children:"BYTE_ARRAY"}),")"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{format: date-time}"})]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"TIMESTAMP"})," (extends ",(0,r.jsx)(t.strong,{children:"INT64"}),", UTC adjusted with microsecond precision)"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{format: time}"})]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"TIME"})," (extends ",(0,r.jsx)(t.strong,{children:"INT64"}),", UTC adjusted with microsecond precision)"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{format: date}"})]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"DATE"})," (extends ",(0,r.jsx)(t.strong,{children:"INT32"}),")"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{format: duration}"})]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"INTERVAL"})," (extends ",(0,r.jsx)(t.strong,{children:"FIXED_LEN_BYTE_ARRAY"})," with a length of 12)"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," with ",(0,r.jsx)(t.code,{children:"{format: uuid}"})]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"UUID"})," (extends ",(0,r.jsx)(t.strong,{children:"FIXED_LEN_BYTE_ARRAY"})," with a length of 16)"]}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"string"})," (all others)"]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.strong,{children:"STRING"})," (extends ",(0,r.jsx)(t.strong,{children:"BYTE_ARRAY"}),")"]}),(0,r.jsx)(t.td,{})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"file-names",children:"File Names"}),"\n",(0,r.jsx)(t.p,{children:"Materialized files are named with monotonically increasing integer values, padded with leading 0's\nso they remain lexically sortable. For example, a set of files may be materialized like this for a\ngiven collection:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{children:"bucket/prefix/path/v0000000000/00000000000000000000.parquet\nbucket/prefix/path/v0000000000/00000000000000000001.parquet\nbucket/prefix/path/v0000000000/00000000000000000002.parquet\n"})}),"\n",(0,r.jsxs)(t.p,{children:["Here the values for ",(0,r.jsx)(t.strong,{children:"bucket"})," and ",(0,r.jsx)(t.strong,{children:"prefix"})," are from your endpoint configuration. The ",(0,r.jsx)(t.strong,{children:"path"})," is\nspecific to the binding configuration. ",(0,r.jsx)(t.strong,{children:"v0000000000"})," represents the current ",(0,r.jsx)(t.strong,{children:"backfill counter"}),"\nfor binding and will be increased if the binding is re-backfilled, along with the file names\nstarting back over from 0."]}),"\n",(0,r.jsx)(t.h2,{id:"eventual-consistency",children:"Eventual Consistency"}),"\n",(0,r.jsx)(t.p,{children:"In rare circumstances, recently materialized files may be re-written by files with the same name if\nthe materialization shard is interrupted in the middle of processing a Flow transaction and the\ntransaction must be re-started. Files that were committed as part of a completed transaction will\nnever be re-written. In this way, eventually all collection data will be written to files\neffectively-once, although inconsistencies are possible when accessing the most recently written\ndata."})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>d,x:()=>c});var r=n(96540);const s={},i=r.createContext(s);function d(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/a0e6a329.782c5d27.js b/pr-preview/pr-1594/assets/js/a0e6a329.782c5d27.js deleted file mode 100644 index b8801f2f09..0000000000 --- a/pr-preview/pr-1594/assets/js/a0e6a329.782c5d27.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5266],{52251:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var t=r(74848),i=r(28453);const s={},c="Azure Blob Storage",o={id:"reference/Connectors/capture-connectors/azure-blob-storage",title:"Azure Blob Storage",description:"This connector captures data from an Azure Blob Storage Account.",source:"@site/docs/reference/Connectors/capture-connectors/azure-blob-storage.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/azure-blob-storage",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/azure-blob-storage.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Apache Kafka",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka"},next:{title:"BigQuery Batch Query Connector",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch"}},l={},d=[{value:"<strong>Prerequisites</strong>",id:"prerequisites",level:2},{value:"Setup <strong>a Microsoft Entra application</strong>",id:"setup-a-microsoft-entra-application",level:2},{value:"<strong>Configuration</strong>",id:"configuration",level:2},{value:"<strong>Properties</strong>",id:"properties",level:3},{value:"<strong>Endpoint</strong>",id:"endpoint",level:4},{value:"<strong>Bindings</strong>",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"<strong>Advanced: Parsing cloud storage data</strong>",id:"advanced-parsing-cloud-storage-data",level:3},{value:"CSV configuration",id:"csv-configuration",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"azure-blob-storage",children:"Azure Blob Storage"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from an Azure Blob Storage Account."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.code,{children:"[ghcr.io/estuary/source-azure-blob-storage:dev](https://ghcr.io/estuary/source-s3:dev)"})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:(0,t.jsx)(n.strong,{children:"Prerequisites"})}),"\n",(0,t.jsx)(n.p,{children:"You will need the following values to authenticate to Azure and an active subscription"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Subscription ID"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Client ID"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Client Secret"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Tenant ID"})}),"\n"]}),"\n",(0,t.jsxs)(n.h2,{id:"setup-a-microsoft-entra-application",children:["Setup ",(0,t.jsx)(n.strong,{children:"a Microsoft Entra application"})]}),"\n",(0,t.jsx)(n.p,{children:"These values can be obtained from the portal, here's the instructions:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Get Subscription ID","\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Login into your Azure account","\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Select ",(0,t.jsx)(n.a,{href:"https://portal.azure.com/#view/Microsoft_Azure_Billing/SubscriptionsBladeV2",children:"Subscriptions"})," in the left sidebar"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.li,{children:"Select whichever subscription is needed"}),"\n",(0,t.jsx)(n.li,{children:"Click on Overview"}),"\n",(0,t.jsx)(n.li,{children:"Copy the Subscription ID"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Get Client ID / Client Secret / Tenant ID","\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Go to Azure Active Directory, then select App registrations."}),"\n",(0,t.jsx)(n.li,{children:"Click New registration, fill out the required fields like Name and Supported account types."}),"\n",(0,t.jsx)(n.li,{children:"Click Register to create the new app registration."}),"\n",(0,t.jsx)(n.li,{children:"After registration, note down the Application (client) ID value."}),"\n",(0,t.jsx)(n.li,{children:"Go to Certificates & secrets and click New client secret. Fill in a Description, choose a Secret value type and length, then click Add to save the secret. A pop-up will appear with your new client secret value; copy it immediately as you won't be able to view it again."}),"\n",(0,t.jsx)(n.li,{children:"Go back to Overview page and copy the Directory (tenant) ID under Properties."}),"\n",(0,t.jsx)(n.li,{children:"Your service principal is now created, and you have its Application (client) ID, Directory (tenant) ID, and a client secret key. Use these values when configuring your application or service to interact with Azure services that require authentication through AAD."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:(0,t.jsx)(n.strong,{children:"Configuration"})}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See ",(0,t.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Azure Blob Storage source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:(0,t.jsx)(n.strong,{children:"Properties"})}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:(0,t.jsx)(n.strong,{children:"Endpoint"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"/advanced"}),(0,t.jsx)(n.td,{}),(0,t.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"/advanced/ascendingKeys"}),(0,t.jsx)(n.td,{children:"Ascending Keys"}),(0,t.jsx)(n.td,{children:"Improve sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors."}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:"false"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"/credentials"}),(0,t.jsx)(n.td,{children:"Credentials"}),(0,t.jsx)(n.td,{children:"Azure credentials used to authenticate with Azure Blob Storage."}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"/credentials/storageAccountName"}),(0,t.jsx)(n.td,{children:"Storage Account Name"}),(0,t.jsx)(n.td,{children:"The name of the Azure Blob Storage account."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"/credentials/azureClientID"}),(0,t.jsx)(n.td,{children:"Azure Client ID"}),(0,t.jsx)(n.td,{children:"The client ID used to authenticate with Azure Blob Storage."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required if using OAuth2"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"/credentials/azureClientSecret"}),(0,t.jsx)(n.td,{children:"Azure Client Secret"}),(0,t.jsx)(n.td,{children:"The client secret used to authenticate with Azure Blob Storage."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required if using OAuth2"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"/credentials/azureTenantID"}),(0,t.jsx)(n.td,{children:"Azure Tenant ID"}),(0,t.jsx)(n.td,{children:"The ID of the Azure tenant where the Azure Blob Storage account is located."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required if using OAuth2"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"/credentials/azureSubscriptionID"}),(0,t.jsx)(n.td,{children:"Azure Subscription ID"}),(0,t.jsx)(n.td,{children:"The ID of the Azure subscription that contains the Azure Blob Storage account."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required if using OAuth2"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"/credentials/ConnectionString"}),(0,t.jsx)(n.td,{children:"Connection String"}),(0,t.jsx)(n.td,{children:"The connection string used to authenticate with Azure Blob Storage."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required if using the Connection String authentication."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"/containerName"}),(0,t.jsx)(n.td,{children:"Container Name"}),(0,t.jsx)(n.td,{children:"The name of the Azure Blob Storage container to read from."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"/matchKeys"}),(0,t.jsx)(n.td,{children:"Match Keys"}),(0,t.jsx)(n.td,{children:'Filter applied to all object keys under the prefix. If provided, only objects whose absolute path matches this regex will be read. For example, you can use ".*\\.json" to only capture json files.'}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:(0,t.jsx)(n.strong,{children:"Bindings"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"/stream"}),(0,t.jsx)(n.td,{children:"Container"}),(0,t.jsx)(n.td,{children:"The container name"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"required"})]})})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/source-azure-blob-storage:dev"\n config:\n containerName: example\n credentials:\n azureClientID: e2889d31-aaaa-bbbb-cccc-85bb5a33d7a5\n azureClientSecret: just-a-secret\n azureSubscriptionID: f1a5bc81-aaaa-bbbb-cccc-b926c154ecc7\n azureTenantID: d494a2c6-aaaa-bbbb-cccc-ef1e5eaa64a6\n storageAccountName: example\n parser:\n compression: zip\n format:\n type: csv\n config:\n delimiter: ","\n encoding: UTF-8\n errorThreshold: 5\n headers: [ID, username, first_name, last_name]\n lineEnding: "\\\\r"\n quote: "\\""\n bindings:\n - resource:\n stream: example\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"advanced-parsing-cloud-storage-data",children:(0,t.jsx)(n.strong,{children:"Advanced: Parsing cloud storage data"})}),"\n",(0,t.jsx)(n.p,{children:"Cloud storage platforms like Azure Blob Storage can support a wider variety of file types than other data source systems. For each of these file types, Flow must parse and translate data into collections with defined fields and JSON schemas."}),"\n",(0,t.jsx)(n.p,{children:"By default, the parser will automatically detect the type and shape of the data in your bucket, so you won't need to change the parser configuration for most captures."}),"\n",(0,t.jsx)(n.p,{children:"However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector."}),"\n",(0,t.jsx)(n.p,{children:"The parser configuration includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Compression"}),": Specify how the bucket contents are compressed.\nIf no compression type is specified, the connector will try to determine the compression type automatically.\nOptions are:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"zip"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"gzip"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"zstd"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"none"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Format"}),": Specify the data format, which determines how it will be parsed.\nOptions are:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Auto"}),": If no format is specified, the connector will try to determine it automatically."]}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Avro"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"CSV"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"JSON"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Protobuf"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"W3C Extended Log"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"info"}),"\n",(0,t.jsx)(n.p,{children:"At this time, Flow only supports S3 captures with data of a single file type.\nSupport for multiple file types, which can be configured on a per-binding basis,\nwill be added in the future."}),"\n",(0,t.jsx)(n.p,{children:"For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"csv-configuration",children:"CSV configuration"}),"\n",(0,t.jsx)(n.p,{children:"CSV files include several additional properties that are important to the parser.\nIn most cases, Flow is able to automatically determine the correct values,\nbut you may need to specify for unusual datasets. These properties are:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Delimiter"}),". Options are:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Comma (",(0,t.jsx)(n.code,{children:'","'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Pipe (",(0,t.jsx)(n.code,{children:'"|"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Space (",(0,t.jsx)(n.code,{children:'"0x20"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Semicolon (",(0,t.jsx)(n.code,{children:'";"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Tab (",(0,t.jsx)(n.code,{children:'"0x09"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Vertical tab (",(0,t.jsx)(n.code,{children:'"0x0B"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Unit separator (",(0,t.jsx)(n.code,{children:'"0x1F"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["SOH (",(0,t.jsx)(n.code,{children:'"0x01"'}),")"]}),"\n",(0,t.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Encoding"})," type, specified by its ",(0,t.jsx)(n.a,{href:"https://encoding.spec.whatwg.org/#names-and-labels",children:"WHATWG label"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Optionally, an ",(0,t.jsx)(n.strong,{children:"Error threshold"}),", as an acceptable\npercentage of errors. If set to a number greater than zero, malformed\nrows that fall within the threshold will be excluded from the capture."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Escape characters"}),". Options are:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Backslash (",(0,t.jsx)(n.code,{children:'"\\\\"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Disable escapes (",(0,t.jsx)(n.code,{children:'""'}),")"]}),"\n",(0,t.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Optionally, a list of column ",(0,t.jsx)(n.strong,{children:"Headers"}),", if not already included in the first row of the CSV file."]}),"\n",(0,t.jsx)(n.p,{children:"If any headers are provided, it is assumed that the provided list of\nheaders is complete and authoritative.\nThe first row of your CSV file will be assumed to be data (not headers),\nand you must provide a header value for every column in the file."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Line ending"})," values"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["CRLF (",(0,t.jsx)(n.code,{children:'"\\\\r\\\\n"'}),") (Windows)"]}),"\n",(0,t.jsxs)(n.li,{children:["CR (",(0,t.jsx)(n.code,{children:'"\\\\r"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["LF (",(0,t.jsx)(n.code,{children:'"\\\\n"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Record Separator (",(0,t.jsx)(n.code,{children:'"0x1E"'}),")"]}),"\n",(0,t.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Quote character"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Double Quote (",(0,t.jsx)(n.code,{children:'"\\""'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Single Quote (",(0,t.jsx)(n.code,{children:'"'}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Disable Quoting (",(0,t.jsx)(n.code,{children:'""'}),")"]}),"\n",(0,t.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The sample specification ",(0,t.jsx)(n.a,{href:"https://docs.estuary.dev/reference/Connectors/capture-connectors/amazon-s3/#sample",children:"above"})," includes these fields."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>o});var t=r(96540);const i={},s=t.createContext(i);function c(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/a24b80f3.ff51b134.js b/pr-preview/pr-1594/assets/js/a24b80f3.ff51b134.js deleted file mode 100644 index 16476cdc96..0000000000 --- a/pr-preview/pr-1594/assets/js/a24b80f3.ff51b134.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9225],{85899:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var n=i(74848),r=i(28453);const s={sidebar_position:1},o="Notifications",a={id:"reference/notifications",title:"Notifications",description:"Estuary allows users to configure email notifications on specific tenants to send out alerts when a task hasn't received data within a time window and when billing information has been updated.",source:"@site/docs/reference/notifications.md",sourceDirName:"reference",slug:"/reference/notifications",permalink:"/pr-preview/pr-1594/reference/notifications",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/notifications.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Editing considerations",permalink:"/pr-preview/pr-1594/reference/editing"},next:{title:"Time Travel",permalink:"/pr-preview/pr-1594/reference/time-travel"}},l={},d=[{value:"Data Movement Alerts",id:"data-movement-alerts",level:2},{value:"Billing Alerts",id:"billing-alerts",level:2},{value:"Properties",id:"properties",level:2}];function c(e){const t={code:"code",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"notifications",children:"Notifications"}),"\n",(0,n.jsx)(t.p,{children:"Estuary allows users to configure email notifications on specific tenants to send out alerts when a task hasn't received data within a time window and when billing information has been updated."}),"\n",(0,n.jsxs)(t.p,{children:["In the ",(0,n.jsx)(t.code,{children:"Admin"})," section of the Flow Web Application, navigate to the the ",(0,n.jsx)(t.code,{children:"Settings"})," tab. Here you will be able to input your email to receive notifications from your tenant."]}),"\n",(0,n.jsx)(t.h2,{id:"data-movement-alerts",children:"Data Movement Alerts"}),"\n",(0,n.jsxs)(t.p,{children:["When navigating to the main view of a capture or a materialization, a user can select an interval for tracking zero data movement. Under the ",(0,n.jsx)(t.code,{children:"Nofitification Settiings"})," card, select a time interval from the dropdown labeled ",(0,n.jsx)(t.code,{children:"Interval"}),". There is no need to save, but you must also have already configured notifications in order for the alert to take into effect. If you are not yet subscribed to notifications, a pop up will appear prompting you to set up a subscribing by clicking on ",(0,n.jsx)(t.code,{children:"CLICK HERE"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"If your task does not receive any new documents with the selected timeframe, an email will be sent to any email addresses that are subscribed to this tenant."}),"\n",(0,n.jsx)(t.h2,{id:"billing-alerts",children:"Billing Alerts"}),"\n",(0,n.jsxs)(t.p,{children:["Billing alerts are automatically subscribed to when a user inputs their email into the ",(0,n.jsx)(t.code,{children:"Organization Notifications"})," table. Alerts will be sent out for the following events:"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Free Tier Started"}),": A tenenat has transitioned into the free trial"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Free Trial Ending"}),": Five days are remaining in a tenant's free trial"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Free Trial Ended"}),": A tenant's free trial has ended"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Provided Payment Method"}),": A valid payment method has been provided for a tenant"]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"properties",children:"Properties"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Property"}),(0,n.jsx)(t.th,{children:"Title"}),(0,n.jsx)(t.th,{children:"Description"}),(0,n.jsx)(t.th,{children:"Type"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"/catalogPrefix"})})}),(0,n.jsx)(t.td,{children:"Prefix"}),(0,n.jsx)(t.td,{children:"Subscribe to notifications for this tenant"}),(0,n.jsx)(t.td,{children:"string"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.code,{children:"/email"})})}),(0,n.jsx)(t.td,{children:"Email"}),(0,n.jsx)(t.td,{children:"Alert the following email with all notifications"}),(0,n.jsx)(t.td,{children:"string"})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},28453:(e,t,i)=>{i.d(t,{R:()=>o,x:()=>a});var n=i(96540);const r={},s=n.createContext(r);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/a3c49fd9.88a15c8a.js b/pr-preview/pr-1594/assets/js/a3c49fd9.88a15c8a.js deleted file mode 100644 index 8dc8d7d9ac..0000000000 --- a/pr-preview/pr-1594/assets/js/a3c49fd9.88a15c8a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4754],{4520:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var i=t(74848),s=t(28453);const r={sidebar_position:1},o="Create a basic Data Flow",a={id:"guides/create-dataflow",title:"Create a basic Data Flow",description:"This guide walks you through the process of creating an end-to-end Data Flow.",source:"@site/docs/guides/create-dataflow.md",sourceDirName:"guides",slug:"/guides/create-dataflow",permalink:"/pr-preview/pr-1594/guides/create-dataflow",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/create-dataflow.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Flow user guides",permalink:"/pr-preview/pr-1594/guides/"},next:{title:"System-specific Data Flows",permalink:"/pr-preview/pr-1594/guides/system-specific-dataflows/"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Introduction",id:"introduction",level:2},{value:"Create a capture",id:"create-a-capture",level:2},{value:"Create a materialization",id:"create-a-materialization",level:2},{value:"What's next?",id:"whats-next",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"create-a-basic-data-flow",children:"Create a basic Data Flow"}),"\n",(0,i.jsx)(n.p,{children:"This guide walks you through the process of creating an end-to-end Data Flow."}),"\n",(0,i.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(n.p,{children:["This guide is intended for new Flow users and briefly introduces Flow's key concepts.\nThough it's not required, you may find it helpful to read\nthe ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/#essential-concepts",children:"high level concepts"})," documentation for more detail before you begin."]}),"\n",(0,i.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsxs)(n.p,{children:["In Estuary Flow, you create Data Flows to connect data ",(0,i.jsx)(n.strong,{children:"source"})," and ",(0,i.jsx)(n.strong,{children:"destination"})," systems."]}),"\n",(0,i.jsx)(n.p,{children:"The simplest Data Flow comprises three types of entities:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A data ",(0,i.jsx)(n.strong,{children:"capture"}),", which ingests data from an external source"]}),"\n",(0,i.jsxs)(n.li,{children:["One or more ",(0,i.jsx)(n.strong,{children:"collections"}),", which store that data in a cloud-backed data lake"]}),"\n",(0,i.jsxs)(n.li,{children:["A ",(0,i.jsx)(n.strong,{children:"materialization"}),", to push the data to an external destination"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The capture and materialization each rely on a ",(0,i.jsx)(n.strong,{children:"connector"}),".\nA connector is a plug-in component that interfaces between Flow and whatever data system you need to connect to.\nHere, we'll walk through how to leverage various connectors, configure them, and deploy your Data Flow."]}),"\n",(0,i.jsx)(n.h2,{id:"create-a-capture",children:"Create a capture"}),"\n",(0,i.jsxs)(n.p,{children:["You'll first create a ",(0,i.jsx)(n.strong,{children:"capture"})," to connect to your data source system.\nThis process will create one or more ",(0,i.jsx)(n.strong,{children:"collections"})," in Flow, which you can then materialize to another system."]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Go to the Flow web application at ",(0,i.jsx)(n.a,{href:"https://dashboard.estuary.dev/",children:"dashboard.estuary.dev"})," and sign in using the\ncredentials provided by your Estuary account manager."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click the ",(0,i.jsx)(n.strong,{children:"Sources"})," tab and choose ",(0,i.jsx)(n.strong,{children:"New Capture"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Choose the appropriate ",(0,i.jsx)(n.strong,{children:"Connector"})," for your desired data source."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["A form appears with the properties required for that connector.\nA documentation page with details about that connector appears in the side panel.\nYou can also browse the ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/",children:"connectors reference"})," in your browser."]}),"\n",(0,i.jsxs)(n.ol,{start:"4",children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Type a name for your capture."}),"\n",(0,i.jsxs)(n.p,{children:["Your capture name must begin with a ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/catalogs#namespace",children:"prefix"})," to which you ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/authentication",children:"have access"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Name"})," field, click the drop-down arrow and select an available prefix.\nAppend a unique capture name after the ",(0,i.jsx)(n.code,{children:"/"})," to create the full name, for example ",(0,i.jsx)(n.code,{children:"acmeCo/myFirstCapture"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Fill out the required properties and click ",(0,i.jsx)(n.strong,{children:"Next"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Flow uses the provided information to initiate a connection to the source system.\nIt identifies one or more data ",(0,i.jsx)(n.strong,{children:"resources"})," \u2014 these may be tables, data streams, or something else, depending on the connector. These are each mapped to a ",(0,i.jsx)(n.strong,{children:"collection"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Output Collections"})," browser appears, showing this list of available collections.\nYou can decide which ones you want to capture."]}),"\n",(0,i.jsxs)(n.ol,{start:"6",children:["\n",(0,i.jsx)(n.li,{children:"Look over the list of available collections. All are selected by default.\nYou can remove collections you don't want to capture, change collection names, and for some connectors, modify other properties."}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["Narrow down a large list of available collections by typing in the ",(0,i.jsx)(n.strong,{children:"Search Bindings"})," box."]})}),"\n",(0,i.jsxs)(n.p,{children:["If you're unsure which collections you want to keep or remove, you can look at their ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/#schemas",children:"schemas"}),"."]}),"\n",(0,i.jsxs)(n.ol,{start:"7",children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Output Collections"})," browser, select a collection and click the ",(0,i.jsx)(n.strong,{children:"Collection"})," tab to view its schema and collection key.\n.\nFor many source systems, you'll notice that the collection schemas are quite permissive.\nYou'll have the option to apply more restrictive schemas later, when you materialize the collections."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If you made any changes to output collections, click ",(0,i.jsx)(n.strong,{children:"Next"})," again."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Once you're satisfied with the configuration, click ",(0,i.jsx)(n.strong,{children:"Save and Publish"}),". You'll see a notification when the capture publishes successfully."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Materialize collections"})," to continue."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"create-a-materialization",children:"Create a materialization"}),"\n",(0,i.jsx)(n.p,{children:"Now that you've captured data into one or more collections, you can materialize it to a destination."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Find the tile for your desired data destination and click ",(0,i.jsx)(n.strong,{children:"Materialization"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The page populates with the properties required for that connector.\nMore details are on each connector are provided in the ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/",children:"connectors reference"}),"."]}),"\n",(0,i.jsxs)(n.ol,{start:"2",children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Choose a unique name for your materialization like you did when naming your capture; for example, ",(0,i.jsx)(n.code,{children:"acmeCo/myFirstMaterialization"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Fill out the required properties in the ",(0,i.jsx)(n.strong,{children:"Endpoint Configuration"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Next"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Flow initiates a connection with the destination system."}),"\n",(0,i.jsxs)(n.p,{children:["The Endpoint Config has collapsed and the ",(0,i.jsx)(n.strong,{children:"Source Collections"})," browser is now prominent.\nIt shows each collection you captured previously.\nAll of them will be mapped to a ",(0,i.jsx)(n.strong,{children:"resource"})," in the destination.\nAgain, these may be tables, data streams, or something else.\nWhen you publish the Data Flow, Flow will create these new resources in the destination."]}),"\n",(0,i.jsx)(n.p,{children:"Now's your chance to make changes to the collections before you materialize them."}),"\n",(0,i.jsxs)(n.ol,{start:"5",children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Optionally remove some collections or add additional collections."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Type in the ",(0,i.jsx)(n.strong,{children:"Search Collections"})," box to find a collection."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["To remove a collection, click the ",(0,i.jsx)(n.strong,{children:"x"})," in its table row. You can also click the ",(0,i.jsx)(n.strong,{children:"Remove All"})," button."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Optionally apply a stricter schema to each collection to use for the materialization."}),"\n",(0,i.jsx)(n.p,{children:"Depending on the data source, you may have captured data with a fairly permissive schema.\nYou can tighten up the schema so it'll materialize to your destination in the correct shape.\n(This isn't necessary for database and SaaS data sources, so the option won't be available.)"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Choose a collection from the list and click its ",(0,i.jsx)(n.strong,{children:"Collection"})," tab."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Schema Inference"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the ",(0,i.jsx)(n.code,{children:"readSchema"}),", to use for the materialization."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Review the new schema and click ",(0,i.jsx)(n.strong,{children:"Apply Inferred Schema"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["You can exert even more control over the output data structure using the ",(0,i.jsx)(n.strong,{children:"Field Selector"})," on the ",(0,i.jsx)(n.strong,{children:"Config tab"}),".\n",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/customize-materialization-fields",children:"Learn how."})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If you've made any changes to source fields, click ",(0,i.jsx)(n.strong,{children:"Next"})," again."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Save and publish"}),". You'll see a notification when the full Data Flow publishes successfully."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"whats-next",children:"What's next?"}),"\n",(0,i.jsx)(n.p,{children:"Now that you've deployed your first Data Flow, you can explore more possibilities."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Read the ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/",children:"high level concepts"})," to better understand how Flow works and what's possible."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create more complex Data Flows by mixing and matching collections in your captures and materializations. For example:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Materialize the same collection to multiple destinations."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"If a capture produces multiple collections, materialize each one to a different destination."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Materialize collections that came from different sources to the same destination."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Advanced users can modify collection ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas",children:"schemas"}),", apply data ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"reductions"}),",\nor transform data with a ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivation"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var i=t(96540);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/a42036e6.6b75a9cc.js b/pr-preview/pr-1594/assets/js/a42036e6.6b75a9cc.js deleted file mode 100644 index edc88eaf33..0000000000 --- a/pr-preview/pr-1594/assets/js/a42036e6.6b75a9cc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7376],{32013:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>a,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var r=s(74848),t=s(28453);const i={},d="HTTP File",c={id:"reference/Connectors/capture-connectors/http-file",title:"HTTP File",description:"This connector captures data from an HTTP endpoint into a Flow collection.",source:"@site/docs/reference/Connectors/capture-connectors/http-file.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/http-file",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/http-file.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Harvest",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest"},next:{title:"HTTP Ingest (Webhook)",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest"}},o={},l=[{value:"Supported data types",id:"supported-data-types",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Advanced: Parsing HTTP-hosted data",id:"advanced-parsing-http-hosted-data",level:3},{value:"CSV configuration",id:"csv-configuration",level:4},{value:"Advanced: Using HTTP headers",id:"advanced-using-http-headers",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"http-file",children:"HTTP File"}),"\n",(0,r.jsx)(n.p,{children:"This connector captures data from an HTTP endpoint into a Flow collection."}),"\n",(0,r.jsxs)(n.p,{children:["To capture data from an ",(0,r.jsx)(n.em,{children:"incoming"})," HTTP request, see the ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest",children:"HTTP Ingest"})," connector."]}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://ghcr.io/estuary/source-http-file:dev",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-http-file:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"supported-data-types",children:"Supported data types"}),"\n",(0,r.jsx)(n.p,{children:"This connector automatically captures the data hosted at the specified URL into a single Flow collection."}),"\n",(0,r.jsx)(n.p,{children:"The following file types are supported:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Avro"}),"\n",(0,r.jsx)(n.li,{children:"CSV"}),"\n",(0,r.jsx)(n.li,{children:"JSON"}),"\n",(0,r.jsx)(n.li,{children:"Protobuf"}),"\n",(0,r.jsx)(n.li,{children:"W3C Extended Log"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"The following compression methods are supported:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"ZIP"}),"\n",(0,r.jsx)(n.li,{children:"GZIP"}),"\n",(0,r.jsx)(n.li,{children:"ZSTD"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["By default, Flow automatically detects the file type and compression method.\nIf necessary, you can specify the correct file type, compression, and other properties (CSV only) using the optional ",(0,r.jsx)(n.a,{href:"#advanced-parsing-http-hosted-data",children:"parser configuration"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.p,{children:["To use this connector, you'll need the URL to an HTTP endpoint that hosts data of one of the supported types.\nThe HTTP endpoint must support ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/HEAD",children:(0,r.jsx)(n.code,{children:"HEAD"})})," HTTP requests, and the response to this request must include a ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified",children:(0,r.jsx)(n.code,{children:"Last-Modified"})})," header."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["You can send a test ",(0,r.jsx)(n.code,{children:"HEAD"})," request using Curl with the ",(0,r.jsx)(n.code,{children:"-I"})," parameter, for example:\n",(0,r.jsx)(n.code,{children:"curl -I https://my-site.com/my_hosted_dataset.json.zip"}),"\nUse ",(0,r.jsx)(n.a,{href:"https://reqbin.com/req/c-tmyvmbgu/curl-head-request-example",children:"this online tool"})," to easily do so in your browser."]})}),"\n",(0,r.jsx)(n.p,{children:"Some HTTP endpoints require credentials for access.\nIf this is the case, have your username and password ready."}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the HTTP file source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials"})}),(0,r.jsx)(n.td,{children:"Credentials"}),(0,r.jsx)(n.td,{children:"User credentials, if required to access the data at the HTTP URL."}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/password"})}),(0,r.jsx)(n.td,{children:"Password"}),(0,r.jsx)(n.td,{children:"Password, if required to access the HTTP endpoint."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/user"})}),(0,r.jsx)(n.td,{children:"User"}),(0,r.jsx)(n.td,{children:"Username, if required to access the HTTP endpoint."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/headers"})}),(0,r.jsx)(n.td,{children:"Headers"}),(0,r.jsx)(n.td,{}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/headers/items"})}),(0,r.jsx)(n.td,{children:"Additional HTTP Headers"}),(0,r.jsx)(n.td,{children:"Additional HTTP headers when requesting the file. These are uncommon."}),(0,r.jsx)(n.td,{children:"array"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"/headers/items/-/key"})})}),(0,r.jsx)(n.td,{children:"Header Key"}),(0,r.jsx)(n.td,{}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"/headers/items/-/value"})})}),(0,r.jsx)(n.td,{children:"Header Value"}),(0,r.jsx)(n.td,{}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/parser"})}),(0,r.jsx)(n.td,{children:"Parser Configuration"}),(0,r.jsx)(n.td,{children:"Configures how files are parsed"}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/parser/compression"})}),(0,r.jsx)(n.td,{children:"Compression"}),(0,r.jsx)(n.td,{children:"Determines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically."}),(0,r.jsx)(n.td,{children:"null, string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"null"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/parser/format"})}),(0,r.jsx)(n.td,{children:"Format"}),(0,r.jsx)(n.td,{children:"Determines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available."}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'{"type":"auto"}'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/parser/format/type"})}),(0,r.jsx)(n.td,{children:"Type"}),(0,r.jsx)(n.td,{}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/url"})})}),(0,r.jsx)(n.td,{children:"HTTP File URL"}),(0,r.jsx)(n.td,{children:"A valid HTTP url for downloading the source file."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Name of the dataset"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-http-file:dev\n config:\n url: https://my-site.com/my_hosted_dataset.json.zip\n parser:\n compression: zip\n format:\n type: csv\n config:\n delimiter: ","\n encoding: UTF-8\n errorThreshold: 5\n headers: [ID, username, first_name, last_name]\n lineEnding: "\\\\r"\n quote: "\\""\n bindings:\n - resource:\n stream: my_hosted_dataset.json.zip\n target: ${PREFIX}/${COLLECTION_NAME}\n\n'})}),"\n",(0,r.jsx)(n.h3,{id:"advanced-parsing-http-hosted-data",children:"Advanced: Parsing HTTP-hosted data"}),"\n",(0,r.jsx)(n.p,{children:"HTTP endpoints can support a variety of file types.\nFor each file type, Flow must parse\nand translate data into collections with defined fields and JSON schemas."}),"\n",(0,r.jsx)(n.p,{children:"By default, the parser will automatically detect the type and shape of the data at the HTTP endpoint,\nso you won't need to change the parser configuration for most captures."}),"\n",(0,r.jsx)(n.p,{children:"However, the automatic detection may be incorrect in some cases.\nTo fix or prevent this, you can provide explicit information in the parser configuration,\nwhich is part of the endpoint configuration for this connector."}),"\n",(0,r.jsx)(n.p,{children:"The parser configuration includes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Compression"}),": Specify how the data is compressed.\nIf no compression type is specified, the connector will try to determine the compression type automatically.\nOptions are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"zip"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"gzip"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"zstd"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"none"})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Format"}),": Specify the data format, which determines how it will be parsed.\nIf no file type is specified, the connector will try to determine the file type automatically\nOptions are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Avro"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"CSV"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"JSON"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Protobuf"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"W3C Extended Log"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"csv-configuration",children:"CSV configuration"}),"\n",(0,r.jsx)(n.p,{children:"CSV files include several additional properties that are important to the parser.\nIn most cases, Flow is able to automatically determine the correct values,\nbut you may need to specify for unusual datasets. These properties are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Delimiter"}),". Options are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Comma (",(0,r.jsx)(n.code,{children:'","'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Pipe (",(0,r.jsx)(n.code,{children:'"|"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Space (",(0,r.jsx)(n.code,{children:'"0x20"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Semicolon (",(0,r.jsx)(n.code,{children:'";"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Tab (",(0,r.jsx)(n.code,{children:'"0x09"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Vertical tab (",(0,r.jsx)(n.code,{children:'"0x0B"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Unit separator (",(0,r.jsx)(n.code,{children:'"0x1F"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["SOH (",(0,r.jsx)(n.code,{children:'"0x01"'}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Encoding"})," type, specified by its ",(0,r.jsx)(n.a,{href:"https://encoding.spec.whatwg.org/#names-and-labels",children:"WHATWG label"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optionally, an ",(0,r.jsx)(n.strong,{children:"Error threshold"}),", as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Escape characters"}),". Options are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Backslash (",(0,r.jsx)(n.code,{children:'"\\\\"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Disable escapes (",(0,r.jsx)(n.code,{children:'""'}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optionally, a list of column ",(0,r.jsx)(n.strong,{children:"Headers"}),", if not already included in the first row of the CSV file."]}),"\n",(0,r.jsx)(n.p,{children:"If any headers are provided, it is assumed that the provided list of headers is complete and authoritative.\nThe first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Line ending"})," values"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["CRLF (",(0,r.jsx)(n.code,{children:'"\\\\r\\\\n"'}),") (Windows)"]}),"\n",(0,r.jsxs)(n.li,{children:["CR (",(0,r.jsx)(n.code,{children:'"\\\\r"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["LF (",(0,r.jsx)(n.code,{children:'"\\\\n"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Record Separator (",(0,r.jsx)(n.code,{children:'"0x1E"'}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Quote character"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Double Quote (",(0,r.jsx)(n.code,{children:'"\\""'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Single Quote (",(0,r.jsx)(n.code,{children:'"'}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Disable Quoting (",(0,r.jsx)(n.code,{children:'""'}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Auto"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The sample specification ",(0,r.jsx)(n.a,{href:"#sample",children:"above"})," includes these fields."]}),"\n",(0,r.jsx)(n.h3,{id:"advanced-using-http-headers",children:"Advanced: Using HTTP headers"}),"\n",(0,r.jsxs)(n.p,{children:["For data accessed through certain APIs, you may need to send ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Glossary/Request_header",children:"headers as part of your HTTP request"}),".\nThis is uncommon, and is supported by the optional ",(0,r.jsx)(n.strong,{children:"Headers"})," configuration."]}),"\n",(0,r.jsxs)(n.p,{children:["This configuration section is ",(0,r.jsxs)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#protecting-secrets",children:["encrypted with ",(0,r.jsx)(n.code,{children:"sops"})]}),", so you can safely include secretes such as API keys."]}),"\n",(0,r.jsx)(n.p,{children:"See the source data's API documentation for headers that may be required for your capture."})]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>d,x:()=>c});var r=s(96540);const t={},i=r.createContext(t);function d(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/a7456010.732b7642.js b/pr-preview/pr-1594/assets/js/a7456010.732b7642.js deleted file mode 100644 index 51002bddb8..0000000000 --- a/pr-preview/pr-1594/assets/js/a7456010.732b7642.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1235],{88552:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/a7bd4aaa.154be41b.js b/pr-preview/pr-1594/assets/js/a7bd4aaa.154be41b.js deleted file mode 100644 index f74c609e78..0000000000 --- a/pr-preview/pr-1594/assets/js/a7bd4aaa.154be41b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7098],{52151:(n,e,s)=>{s.r(e),s.d(e,{default:()=>x});s(96540);var r=s(1003),t=s(2967),o=s(32252),i=s(22831),c=s(41463),u=s(74848);function a(n){const{version:e}=n;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(c.A,{version:e.version,tag:(0,t.tU)(e.pluginId,e.version)}),(0,u.jsx)(r.be,{children:e.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:e,route:s}=n;return(0,u.jsx)(r.e3,{className:e.className,children:(0,u.jsx)(o.n,{version:e,children:(0,i.v)(s.routes)})})}function x(n){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...n}),(0,u.jsx)(l,{...n})]})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/a9379b01.b5f39f28.js b/pr-preview/pr-1594/assets/js/a9379b01.b5f39f28.js deleted file mode 100644 index cdcc98cd1d..0000000000 --- a/pr-preview/pr-1594/assets/js/a9379b01.b5f39f28.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1851],{15988:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var r=n(74848),s=n(28453);const i={sidebar_position:2},o="Configuring task shards",a={id:"reference/Configuring-task-shards",title:"Configuring task shards",description:"For some catalog tasks, it's helpful to control the behavior of shards",source:"@site/docs/reference/Configuring-task-shards.md",sourceDirName:"reference",slug:"/reference/Configuring-task-shards",permalink:"/pr-preview/pr-1594/reference/Configuring-task-shards",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Configuring-task-shards.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Time Travel",permalink:"/pr-preview/pr-1594/reference/time-travel"},next:{title:"Reduction strategies",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/"}},d={},c=[{value:"Properties",id:"properties",level:2},{value:"Sample",id:"sample",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"configuring-task-shards",children:"Configuring task shards"}),"\n",(0,r.jsxs)(t.p,{children:["For some catalog tasks, it's helpful to control the behavior of ",(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards",children:"shards"}),"\nYou do this by adding the ",(0,r.jsx)(t.code,{children:"shards"})," configuration to the capture or materialization configuration."]}),"\n",(0,r.jsx)(t.h2,{id:"properties",children:"Properties"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/disable"})}),(0,r.jsx)(t.td,{children:"Disable"}),(0,r.jsx)(t.td,{children:"Disable processing of the task's shards."}),(0,r.jsx)(t.td,{children:"Boolean"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/logLevel"})}),(0,r.jsx)(t.td,{children:"Log level"}),(0,r.jsx)(t.td,{children:'Log levels may currently be "error", "warn", "info", "debug", or "trace". If not set, the effective log level is "info".'}),(0,r.jsx)(t.td,{children:"String"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/maxTxnDuration"})}),(0,r.jsx)(t.td,{children:"Maximum transaction duration"}),(0,r.jsx)(t.td,{children:"This duration upper-bounds the amount of time during which a transaction may process documents before it must initiate a commit. Note that it may take some additional time for the commit to complete after it is initiated. The shard may run for less time if there aren't additional ready documents for it to process. If not set, the maximum duration defaults to one second for captures and derivations, and 5 minutes for materializations."}),(0,r.jsx)(t.td,{children:"String"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/minTxnDuration"})}),(0,r.jsx)(t.td,{children:"Minimum transaction duration"}),(0,r.jsx)(t.td,{children:"This duration lower-bounds the amount of time during which a transaction must process documents before it must flush and commit. It may run for more time if additional documents are available. The default value is zero seconds."}),(0,r.jsx)(t.td,{children:"String"})]})]})]}),"\n",(0,r.jsx)(t.p,{children:"For more information about these controls and when you might need to use them, see:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards#transactions",children:"Transactions"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/logs-stats#log-level",children:"Log level"})}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"materializations:\n acmeCo/snowflake-materialization:\n endpoint:\n connector:\n config:\n account: acmeCo\n database: acmeCo_db\n password: secret\n cloud_provider: aws\n region: us-east-1\n schema: acmeCo_flow_schema\n user: snowflake_user\n warehouse: acmeCo_warehouse\n image: ghcr.io/estuary/materialize-snowflake:dev\n bindings:\n - resource:\n table: anvils\n source: acmeCo/anvils\n shards:\n logLevel: debug\n minTxnDuration: 30s\n maxTxnDuration: 4m\n"})})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var r=n(96540);const s={},i=r.createContext(s);function o(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/a94703ab.226454ec.js b/pr-preview/pr-1594/assets/js/a94703ab.226454ec.js deleted file mode 100644 index a87eb70260..0000000000 --- a/pr-preview/pr-1594/assets/js/a94703ab.226454ec.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9048],{92559:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(96540),o=n(34164),i=n(1003),s=n(17559),l=n(84142),r=n(26588),c=n(21312),d=n(23104),u=n(75062);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(74848);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.gk)();return(0,d.Mq)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,u.$)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.T)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.A)("clean-btn",s.G.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(53109),x=n(56347),f=n(24581),j=n(6342),v=n(23465);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const A={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.T)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.T)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.A)("button button--secondary button--outline",A.collapseSidebarButton),onClick:t,children:(0,b.jsx)(_,{className:A.collapseSidebarButtonIcon})})}var k=n(65041),C=n(89532);const S=Symbol("EmptyContext"),T=a.createContext(S);function N(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(T.Provider,{value:i,children:t})}var I=n(41422),B=n(99169),y=n(28774),w=n(92303);function L(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.T)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.T)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),"aria-expanded":!t,type:"button",className:"clean-btn menu__caret",onClick:a})}function E(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.p)(),v=function(e){const t=(0,w.A)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.Nr)(e):void 0),[e,t])}(t),_=(0,l.w8)(t,i),A=(0,B.ys)(x,i),{collapsed:g,setCollapsed:k}=(0,I.u)({initialState:()=>!!h&&(!_&&t.collapsed)}),{expandedItem:N,setExpandedItem:E}=function(){const e=(0,a.useContext)(T);if(e===S)throw new C.dV("DocSidebarItemsExpandedStateProvider");return e}(),M=function(e){void 0===e&&(e=!g),E(e?null:c),k(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,C.ZC)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:_,collapsed:g,updateCollapsed:M}),(0,a.useEffect)((()=>{h&&null!=N&&N!==c&&f&&k(!0)}),[h,N,c,k,f]),(0,b.jsxs)("li",{className:(0,o.A)(s.G.docs.docSidebarItemCategory,s.G.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.A)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":A}),children:[(0,b.jsx)(y.A,{className:(0,o.A)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":_}),onClick:h?e=>{n?.(t),x?M(!1):(e.preventDefault(),M())}:()=>{n?.(t)},"aria-current":A?"page":void 0,role:h&&!x?"button":void 0,"aria-expanded":h&&!x?!g:void 0,href:h?v??"#":v,...d,children:m}),x&&h&&(0,b.jsx)(L,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),M()}})]}),(0,b.jsx)(I.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(U,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var M=n(16654),H=n(43186);const G={menuExternalLink:"menuExternalLink_NmtK"};function W(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l.w8)(t,a),x=(0,M.A)(d);return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(y.A,{className:(0,o.A)("menu__link",!x&&G.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.A,{})]})},u)}const P={menuHtmlItem:"menuHtmlItem_M9Kj"};function R(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(n),l&&[P.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function D(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(E,{item:t,...n});case"html":return(0,b.jsx)(R,{item:t,...n});default:return(0,b.jsx)(W,{item:t,...n})}}function F(e){let{items:t,...n}=e;const a=(0,l.Y)(t,n.activePath);return(0,b.jsx)(N,{children:a.map(((e,t)=>(0,b.jsx)(D,{item:e,index:t,...n},t)))})}const U=(0,a.memo)(F),V={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function Y(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,k.M)(),[t,n]=(0,a.useState)(e);return(0,d.Mq)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.T)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.A)("menu thin-scrollbar",V.menu,l&&V.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(U,{items:n,activePath:t,level:1})})})}const K="sidebar_njMd",z="sidebarWithHideableNavbar_wUlq",q="sidebarHidden_VK0M",O="sidebarLogo_isFc";function J(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.p)();return(0,b.jsxs)("div",{className:(0,o.A)(K,s&&z,i&&q),children:[s&&(0,b.jsx)(v.A,{tabIndex:-1,className:O}),(0,b.jsx)(Y,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const Q=a.memo(J);var X=n(75600),Z=n(22069);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,Z.M)();return(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(U,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(X.GX,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.l)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(Q,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.T)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.T)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(_,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,r.t)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.zy)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.O)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.A)(s.G.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.A)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.t)();return(0,b.jsx)("main",{className:(0,o.A)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.A)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,r.t)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(23363);function be(e){const t=(0,l.B5)(e);if(!t)return(0,b.jsx)(me.A,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.e3,{className:(0,o.A)(s.G.page.docsDocPage),children:(0,b.jsx)(r.V,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},23363:(e,t,n)=>{n.d(t,{A:()=>l});n(96540);var a=n(34164),o=n(21312),i=n(51107),s=n(74848);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.A)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.A,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/a995ee96.690695c5.js b/pr-preview/pr-1594/assets/js/a995ee96.690695c5.js deleted file mode 100644 index 49faacca8b..0000000000 --- a/pr-preview/pr-1594/assets/js/a995ee96.690695c5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5924],{54937:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var r=t(74848),i=t(28453);const s={},o="MySQL HeatWave",l={id:"reference/Connectors/materialization-connectors/mysql-heatwave",title:"MySQL HeatWave",description:"This connector lets you materialize data from your Flow collections directly into Oracle MySQL HeatWave instances.",source:"@site/docs/reference/Connectors/materialization-connectors/mysql-heatwave.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/mysql-heatwave",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/mysql-heatwave.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Cloud SQL for MySQL",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql"},next:{title:"Pinecone",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone"}},d={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:2},{value:"Endpoint",id:"endpoint",level:3},{value:"Advanced: SSL Mode",id:"advanced-ssl-mode",level:3},{value:"Bindings",id:"bindings",level:3},{value:"Sample",id:"sample",level:2},{value:"MySQL HeatWave on Oracle Cloud Infrastructure",id:"mysql-heatwave-on-oracle-cloud-infrastructure",level:2},{value:"SSH Tunneling (Required)",id:"ssh-tunneling-required",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"mysql-heatwave",children:"MySQL HeatWave"}),"\n",(0,r.jsx)(n.p,{children:"This connector lets you materialize data from your Flow collections directly into Oracle MySQL HeatWave instances."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://github.com/estuary/connectors/pkgs/container/materialize-mysql-heatwave",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/materialize-mysql-heatwave:dev"})})," provides the latest connector image. For earlier versions, please follow the link in your browser."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"To use this materialization connector, you\u2019ll need the following:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"A MySQL HeatWave database and the appropriate user credentials."}),"\n",(0,r.jsx)(n.li,{children:"At least one Flow collection."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"Select one or more of your Flow collections to start using this connector. The configuration properties below will help you to materialize your collections into tables in MySQL HeatWave."}),"\n",(0,r.jsx)(n.h2,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h3,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/address"})})}),(0,r.jsx)(n.td,{children:"Address"}),(0,r.jsxs)(n.td,{children:["Host and port of the database. If only the host is specified, the port will default to ",(0,r.jsx)(n.code,{children:"3306"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/database"})})}),(0,r.jsx)(n.td,{children:"Database"}),(0,r.jsx)(n.td,{children:"Name of the logical database to send data to."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/user"})})}),(0,r.jsx)(n.td,{children:"User"}),(0,r.jsx)(n.td,{children:"Username for authentication."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/password"})})}),(0,r.jsx)(n.td,{children:"Password"}),(0,r.jsx)(n.td,{children:"Password for authentication."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/timezone"})})}),(0,r.jsx)(n.td,{children:"Timezone"}),(0,r.jsx)(n.td,{children:"Timezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"advanced-ssl-mode",children:"Advanced: SSL Mode"}),"\n",(0,r.jsx)(n.p,{children:"Configuring the SSL mode strengthens security when transferring data to Oracle MySQL HeatWave. Here are the possible values for SSL mode:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"disabled"}),": Establishes an unencrypted connection with the server."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"preferred"}),": Initiates the SSL connection only if prompted by the server."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"required"}),": Establishes an SSL connection but doesn\u2019t verify the server\u2019s certificate."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"verify_ca"}),": Connects via SSL connection and verifies the server\u2019s certificate against the provided SSL Server CA, without validating the server's hostname. SSL Server CA is mandatory for this mode."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"verify_identity"}),": Ensures an SSL connection, and verifies both the server's certificate and hostname. This is the highest level of security. SSL Server CA is required for this mode."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/table"})})}),(0,r.jsx)(n.td,{children:"Table"}),(0,r.jsx)(n.td,{children:"The name of the table to send data to."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})})]}),"\n",(0,r.jsx)(n.h2,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${MAT_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-mysql-heatwave:dev\n config:\n database: flow\n address: localhost:5432\n password: secret\n user: flow\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"mysql-heatwave-on-oracle-cloud-infrastructure",children:"MySQL HeatWave on Oracle Cloud Infrastructure"}),"\n",(0,r.jsx)(n.p,{children:"This connector supports cloud-based MySQL HeatWave instances hosted on Oracle Cloud Infrastructure (OCI)."}),"\n",(0,r.jsx)(n.h3,{id:"ssh-tunneling-required",children:"SSH Tunneling (Required)"}),"\n",(0,r.jsx)(n.p,{children:"You are also required to configure SSH tunneling by providing the following:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"SSH Endpoint"}),": Enter the endpoint of the remote SSH server that supports tunneling (formatted as ",(0,r.jsx)(n.code,{children:"ssh://user@hostname[:port]"}),")."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"SSH Private Key"}),": Input the full RSA Private Key for SSH connection."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>l});var r=t(96540);const i={},s=r.createContext(i);function o(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/aba21aa0.421a8980.js b/pr-preview/pr-1594/assets/js/aba21aa0.421a8980.js deleted file mode 100644 index 2b3cc96abd..0000000000 --- a/pr-preview/pr-1594/assets/js/aba21aa0.421a8980.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5742],{27093:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/abc1ea5e.22be9f20.js b/pr-preview/pr-1594/assets/js/abc1ea5e.22be9f20.js deleted file mode 100644 index 60bfcf9f96..0000000000 --- a/pr-preview/pr-1594/assets/js/abc1ea5e.22be9f20.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1482],{91176:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var s=n(74848),t=n(28453);const i={},c="Instagram",o={id:"reference/Connectors/capture-connectors/instagram",title:"Instagram",description:"This connector captures data from Instagram into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/instagram.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/instagram",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/instagram.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"HubSpot ( Real-Time )",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time"},next:{title:"Intercom",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom"}},a={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"instagram",children:"Instagram"}),"\n",(0,s.jsx)(r.p,{children:"This connector captures data from Instagram into Flow collections."}),"\n",(0,s.jsxs)(r.p,{children:["This ",(0,s.jsx)(r.a,{href:"https://help.instagram.com/570895513091465",children:"Instagram article"})," talks about how to connect a Facebook page to your Instagram business account."]}),"\n",(0,s.jsxs)(r.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(r.a,{href:"https://ghcr.io/estuary/source-instagram:dev",children:(0,s.jsx)(r.code,{children:"ghcr.io/estuary/source-instagram:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(r.p,{children:"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system."}),"\n",(0,s.jsxs)(r.p,{children:["You can find their documentation ",(0,s.jsx)(r.a,{href:"https://docs.airbyte.com/integrations/sources/instagram/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,s.jsx)(r.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,s.jsx)(r.p,{children:"The following data resources are supported through the Instagram APIs:"}),"\n",(0,s.jsxs)(r.p,{children:["For more information, see the ",(0,s.jsx)(r.a,{href:"https://developers.facebook.com/docs/instagram-api/",children:"Instagram Graph API"})," and ",(0,s.jsx)(r.a,{href:"https://developers.facebook.com/docs/instagram-api/guides/insights/",children:"Instagram Insights API documentation"}),"."]}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://developers.facebook.com/docs/instagram-api/reference/ig-user",children:"User"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://developers.facebook.com/docs/instagram-api/reference/ig-user/insights",children:"User Insights"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://developers.facebook.com/docs/instagram-api/reference/ig-user/media",children:"Media"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://developers.facebook.com/docs/instagram-api/reference/ig-media/insights",children:"Media Insights"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://developers.facebook.com/docs/instagram-api/reference/ig-user/stories/",children:"Stories"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://developers.facebook.com/docs/instagram-api/reference/ig-media/insights",children:"Story Insights"})}),"\n"]}),"\n",(0,s.jsx)(r.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,s.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://developers.facebook.com",children:"Meta for Developers account"})}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.a,{href:"https://www.facebook.com/business/help/898752960195806",children:"Instagram business account"})," to your Facebook page"]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.a,{href:"https://developers.facebook.com/docs/instagram-api/",children:"Instagram Graph API"})," to your Facebook app"]}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://developers.facebook.com/docs/instagram-basic-display-api/reference",children:"Facebook OAuth Reference"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"https://www.facebook.com/business/help/1492627900875762",children:"Facebook ad account ID number"})}),"\n"]}),"\n",(0,s.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(r.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,s.jsx)(r.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Instagram source connector."]}),"\n",(0,s.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Property"}),(0,s.jsx)(r.th,{children:"Title"}),(0,s.jsx)(r.th,{children:"Description"}),(0,s.jsx)(r.th,{children:"Type"}),(0,s.jsx)(r.th,{children:"Required/Default"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"/client_id"})}),(0,s.jsx)(r.td,{children:"Client ID"}),(0,s.jsx)(r.td,{children:"The Client ID of your Instagram developer application."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"/client_secret"})}),(0,s.jsx)(r.td,{children:"Client Secret"}),(0,s.jsx)(r.td,{children:"The Client Secret of your Instagram developer application."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"/access_token"})}),(0,s.jsx)(r.td,{children:"Access Token"}),(0,s.jsx)(r.td,{children:"The value of the access token generated with instagram_basic, instagram_manage_insights, pages_show_list, pages_read_engagement, Instagram Public Content Access permissions."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"/start_date"})}),(0,s.jsx)(r.td,{children:"Replication Start Date"}),(0,s.jsx)(r.td,{children:"UTC date and time in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Property"}),(0,s.jsx)(r.th,{children:"Title"}),(0,s.jsx)(r.th,{children:"Description"}),(0,s.jsx)(r.th,{children:"Type"}),(0,s.jsx)(r.th,{children:"Required/Default"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.code,{children:"/stream"})})}),(0,s.jsx)(r.td,{children:"Stream"}),(0,s.jsx)(r.td,{children:"Resource of your Instagram project from which collections are captured."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.code,{children:"/syncMode"})})}),(0,s.jsx)(r.td,{children:"Sync Mode"}),(0,s.jsx)(r.td,{children:"Connection method."}),(0,s.jsx)(r.td,{children:"string"}),(0,s.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-instagram:dev\n config:\n client_id: <your client ID>\n client_secret: <secret>\n access_token: <secret>\n start_date: 2017-01-25T00:00:00Z\n bindings:\n - resource:\n stream: stories\n syncMode: full_refresh\n target: ${PREFIX}/stories\n {...}\n"})})]})}function h(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>c,x:()=>o});var s=n(96540);const t={},i=s.createContext(t);function c(e){const r=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/ac961e5b.234f3378.js b/pr-preview/pr-1594/assets/js/ac961e5b.234f3378.js deleted file mode 100644 index e522e81c0e..0000000000 --- a/pr-preview/pr-1594/assets/js/ac961e5b.234f3378.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4109],{60502:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>a});var s=r(74848),t=r(28453);const i={sidebar_position:6},c="Google Cloud SQL for SQL Server",o={id:"reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver",title:"Google Cloud SQL for SQL Server",description:"This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver.md",sourceDirName:"reference/Connectors/capture-connectors/SQLServer",slug:"/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Amazon RDS for SQL Server",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver"},next:{title:"MixPanel",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel"}},l={},a=[{value:"Supported versions and platforms",id:"supported-versions-and-platforms",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Specifying Flow collection keys",id:"specifying-flow-collection-keys",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"google-cloud-sql-for-sql-server",children:"Google Cloud SQL for SQL Server"}),"\n",(0,s.jsx)(n.p,{children:"This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections."}),"\n",(0,s.jsxs)(n.p,{children:["It\u2019s available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/source-sqlserver:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/source-sqlserver:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(n.h2,{id:"supported-versions-and-platforms",children:"Supported versions and platforms"}),"\n",(0,s.jsx)(n.p,{children:"This connector is designed for databases using any version of SQL Server which has CDC support, and is regularly tested against SQL Server 2017 and up."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"To capture change events from SQL Server tables using this connector, you need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["For each table to be captured, a primary key should be specified in the database.\nIf a table doesn't have a primary key, you must manually specify a key in the associated Flow collection definition while creating the capture.\n",(0,s.jsx)(n.a,{href:"#specifying-flow-collection-keys",children:"See detailed steps"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/enable-and-disable-change-data-capture-sql-server?view=sql-server-ver16",children:"CDC enabled"}),"\non the database and the individual tables to be captured.\n(This creates ",(0,s.jsx)(n.em,{children:"change tables"})," in the database, from which the connector reads.)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.strong,{children:"watermarks table"}),". The watermarks table is a small \u201cscratch space\u201d to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A user role with:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"SELECT"})," permissions on the CDC schema and the schemas that contain tables to be captured."]}),"\n",(0,s.jsx)(n.li,{children:"Access to the change tables created as part of the SQL Server CDC process."}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"SELECT"}),", ",(0,s.jsx)(n.code,{children:"INSERT"}),", and ",(0,s.jsx)(n.code,{children:"UPDATE"})," permissions on the watermarks table"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"setup",children:"Setup"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://cloud.google.com/sql/docs/sqlserver/configure-ip#add",children:"Enable public IP on your database"})," and add the ",(0,s.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"})," as authorized IP addresses."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Follow the guide to ",(0,s.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,s.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,s.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,s.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In your SQL client, connect to your instance as the default ",(0,s.jsx)(n.code,{children:"sqlserver"})," user and issue the following commands."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",children:"USE <database>;\n-- Enable CDC for the database.\nEXEC msdb.dbo.gcloudsql_cdc_enable_db '<database>';\n-- Create user and password for use with the connector.\nCREATE LOGIN flow_capture WITH PASSWORD = 'Secret123!';\nCREATE USER flow_capture FOR LOGIN flow_capture;\n-- Grant the user permissions on the CDC schema and schemas with data.\n-- This assumes all tables to be captured are in the default schema, `dbo`.\n-- Add similar queries for any other schemas that contain tables you want to capture.\nGRANT SELECT ON SCHEMA :: dbo TO flow_capture;\nGRANT SELECT ON SCHEMA :: cdc TO flow_capture;\n-- Create the watermarks table and grant permissions.\nCREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT);\nGRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture;\n-- Enable CDC on tables. The below query enables CDC the watermarks table ONLY.\n-- You should add similar query for all other tables you intend to capture.\nEXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture';\n"})}),"\n",(0,s.jsxs)(n.ol,{start:"3",children:["\n",(0,s.jsxs)(n.li,{children:["In the Cloud Console, note the instance's host under Public IP Address. Its port will always be ",(0,s.jsx)(n.code,{children:"1433"}),".\nTogether, you'll use the host",":port"," as the ",(0,s.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the SQL Server source connector."]}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/address"})})}),(0,s.jsx)(n.td,{children:"Server Address"}),(0,s.jsxs)(n.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/database"})})}),(0,s.jsx)(n.td,{children:"Database"}),(0,s.jsx)(n.td,{children:"Logical database name to capture from."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/user"})})}),(0,s.jsx)(n.td,{children:"User"}),(0,s.jsx)(n.td,{children:"The database user to authenticate as."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsxs)(n.td,{children:["Required, ",(0,s.jsx)(n.code,{children:'"flow_capture"'})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/password"})})}),(0,s.jsx)(n.td,{children:"Password"}),(0,s.jsx)(n.td,{children:"Password for the specified database user."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced"})}),(0,s.jsx)(n.td,{children:"Advanced Options"}),(0,s.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,s.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,s.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,s.jsx)(n.td,{children:"integer"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"4096"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/skip_backfills"})}),(0,s.jsx)(n.td,{children:"Skip Backfills"}),(0,s.jsx)(n.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/watermarksTable"})}),(0,s.jsx)(n.td,{children:"Watermarks Table"}),(0,s.jsx)(n.td,{children:"The name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:'"dbo.flow_watermarks"'})})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/namespace"})})}),(0,s.jsx)(n.td,{children:"Namespace"}),(0,s.jsxs)(n.td,{children:["The ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/sql/relational-databases/databases/databases?view=sql-server-ver16#basic-information-about-databases",children:"namespace/schema"})," of the table."]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/stream"})})}),(0,s.jsx)(n.td,{children:"Stream"}),(0,s.jsx)(n.td,{children:"Table name."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/primary_key"})}),(0,s.jsx)(n.td,{children:"Primary Key Columns"}),(0,s.jsx)(n.td,{children:"array"}),(0,s.jsx)(n.td,{children:"The columns which together form the primary key of the table."}),(0,s.jsx)(n.td,{})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/source-sqlserver:dev"\n config:\n address: "<host>:1433"\n database: "my_db"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n stream: ${TABLE_NAME}\n namespace: dbo\n primary_key: ["id"]\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,s.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,s.jsx)(n.h2,{id:"specifying-flow-collection-keys",children:"Specifying Flow collection keys"}),"\n",(0,s.jsxs)(n.p,{children:["Every Flow collection must have a ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#keys",children:"key"}),".\nAs long as your SQL Server tables have a primary key specified, the connector will set the\ncorresponding collection's key accordingly."]}),"\n",(0,s.jsxs)(n.p,{children:["In cases where a SQL Server table you want to capture doesn't have a primary key,\nyou can manually add it to the collection definition during the ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-capture",children:"capture creation workflow"}),"."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["After you input the endpoint configuration and click ",(0,s.jsx)(n.strong,{children:"Next"}),",\nthe tables in your database have been mapped to Flow collections.\nClick each collection's ",(0,s.jsx)(n.strong,{children:"Specification"})," tab and identify a collection where ",(0,s.jsx)(n.code,{children:'"key": [ ],'})," is empty."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click inside the empty key value in the editor and input the name of column in the table to use as the key, formatted as a JSON pointer. For example ",(0,s.jsx)(n.code,{children:'"key": ["/foo"],'})]}),"\n",(0,s.jsxs)(n.p,{children:["Make sure the key field is required, not nullable, and of an ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#schema-restrictions",children:"allowed type"}),".\nMake any other necessary changes to the ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#specification",children:"collection specification"})," to accommodate this."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Repeat with other missing collection keys, if necessary."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Save and publish the capture as usual."}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>o});var s=r(96540);const t={},i=s.createContext(t);function c(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/b05d4510.a0d5be06.js b/pr-preview/pr-1594/assets/js/b05d4510.a0d5be06.js deleted file mode 100644 index bee9751c0f..0000000000 --- a/pr-preview/pr-1594/assets/js/b05d4510.a0d5be06.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8112],{44195:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var t=r(74848),s=r(28453);const i={},o="Google Cloud SQL for SQLServer",l={id:"reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver",title:"Google Cloud SQL for SQLServer",description:"This connector materializes Flow collections into tables in a Microsoft SQLServer database.",source:"@site/docs/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver.md",sourceDirName:"reference/Connectors/materialization-connectors/SQLServer",slug:"/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amazon RDS for SQL Server",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver"},next:{title:"MongoDB",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb"}},a={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup Google Cloud SQL for SQL Server",id:"setup-google-cloud-sql-for-sql-server",level:2},{value:"Connecting to SQLServer",id:"connecting-to-sqlserver",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Delta updates",id:"delta-updates",level:2},{value:"Reserved words",id:"reserved-words",level:2},{value:"Changelog",id:"changelog",level:2},{value:"V1: 2023-09-01",id:"v1-2023-09-01",level:4}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"google-cloud-sql-for-sqlserver",children:"Google Cloud SQL for SQLServer"}),"\n",(0,t.jsx)(n.p,{children:"This connector materializes Flow collections into tables in a Microsoft SQLServer database."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or\nopen-source workflows,\n",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/materialize-sqlserver:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/materialize-sqlserver:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A SQLServer database to which to materialize, and user credentials.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"SQLServer 2017 and later are supported"}),"\n",(0,t.jsx)(n.li,{children:"The connector will create new tables in the database per your specification,\nso user credentials must have access to create new tables."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup-google-cloud-sql-for-sql-server",children:"Setup Google Cloud SQL for SQL Server"}),"\n",(0,t.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://cloud.google.com/sql/docs/sqlserver/configure-ip#add",children:"Enable public IP on your database"})," and add ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"})," as authorized IP addresses."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Follow the guide to ",(0,t.jsx)(n.a,{href:"../../../../../guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,t.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In your SQL client, connect to your instance as the default ",(0,t.jsx)(n.code,{children:"sqlserver"})," user and issue the following commands."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"USE <database>;\n-- Create user and password for use with the connector.\nCREATE LOGIN flow_materialize WITH PASSWORD = 'secret';\nCREATE USER flow_materialize FOR LOGIN flow_materialize;\n-- Grant control on the database to flow_materialize\nGRANT CONTROL ON DATABASE::<database> TO flow_materialize;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsxs)(n.li,{children:["In the Cloud Console, note the instance's host under Public IP Address. Its port will always be ",(0,t.jsx)(n.code,{children:"1433"}),".\nTogether, you'll use the host",":port"," as the ",(0,t.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"connecting-to-sqlserver",children:"Connecting to SQLServer"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://cloud.google.com/sql/docs/sqlserver/configure-ip#add",children:"Enable public IP on your database"})," and add ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"})," as authorized IP addresses."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Follow the guide to ",(0,t.jsx)(n.a,{href:"../../../../../guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,t.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In your SQL client, connect to your instance as the default ",(0,t.jsx)(n.code,{children:"sqlserver"})," user and issue the following commands."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"USE <database>;\n-- Create user and password for use with the connector.\nCREATE LOGIN flow_materialize WITH PASSWORD = 'Secret123!';\nCREATE USER flow_materialize FOR LOGIN flow_materialize;\n-- Grant control on the database to flow_materialize\nGRANT CONTROL ON DATABASE::<database> TO flow_materialize;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsxs)(n.li,{children:["In the Cloud Console, note the instance's host under Public IP Address. Its port will always be ",(0,t.jsx)(n.code,{children:"1433"}),".\nTogether, you'll use the host",":port"," as the ",(0,t.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a SQLServer materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database."}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/database"})})}),(0,t.jsx)(n.td,{children:"Database"}),(0,t.jsx)(n.td,{children:"Name of the logical database to materialize to."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/address"})})}),(0,t.jsx)(n.td,{children:"Address"}),(0,t.jsxs)(n.td,{children:["Host and port of the database. If only the host is specified, port will default to ",(0,t.jsx)(n.code,{children:"1433"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/password"})})}),(0,t.jsx)(n.td,{children:"Password"}),(0,t.jsx)(n.td,{children:"Password for the specified database user."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/user"})})}),(0,t.jsx)(n.td,{children:"User"}),(0,t.jsx)(n.td,{children:"Database user to connect as."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/table"})})}),(0,t.jsx)(n.td,{children:"Table"}),(0,t.jsx)(n.td,{children:"Table name to materialize to. It will be created by the connector, unless the connector has previously created it."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/delta_updates"})}),(0,t.jsx)(n.td,{children:"Delta Update"}),(0,t.jsx)(n.td,{children:"Should updates to this table be done via delta updates."}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-sqlserver:dev\n config:\n database: flow\n address: localhost:5432\n password: flow\n user: flow\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,t.jsxs)(n.p,{children:["This connector supports both standard (merge) and ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]}),"\n",(0,t.jsx)(n.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,t.jsxs)(n.p,{children:["SQLServer has a list of reserved words that must be quoted in order to be used as an identifier.\nFlow considers all the reserved words in the official ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-2017",children:"SQLServer documentation"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"These reserved words are listed in the table below. Flow automatically quotes fields that are in this list."}),"\n",(0,t.jsx)(n.p,{children:"| Reserved words | | | | |\n| -------------- | ------------- | ------------- | ------------- | ------------- | ----- |\n| absolute | connect | else | intersect | on |\n| action | connection | end | intersection | only |\n| ada | constraint | end-exec | interval | open |\n| add | constraints | equals | into | opendatasourc |\n| admin | constructor | errlvl | is | openquery |\n| after | contains | escape | isolation | openrowset |\n| aggregate | containstable | every | iterate | openxml |\n| alias | continue | except | join | operation |\n| all | convert | exception | key | option |\n| allocate | corr | exec | kill | or |\n| alter | corresponding | execute | language | order |\n| and | count | exists | large | ordinality |\n| any | covar_pop | exit | last | out |\n| are | covar_samp | external | lateral | outer |\n| array | create | extract | leading | output |\n| as | cross | false | left | over |\n| asc | cube | fetch | less | overlaps |\n| asensitive | cume_dist | file | level | overlay |\n| assertion | current | fillfactor | like | pad |\n| asymmetric | current_catal | filter | like_regex | parameter |\n| at | current_date | first | limit | parameters |\n| atomic | current_defau | float | lineno | partial |\n| authorization | current_path | for | ln | partition |\n| avg | current_role | foreign | load | pascal |\n| backup | current_schem | fortran | local | path |\n| before | current_time | found | localtime | percent |\n| begin | current_times | free | localtimestam | percent_rank |\n| between | current_trans | freetext | locator | percentile_co |\n| binary | current_user | freetexttable | lower | percentile_di |\n| bit | cursor | from | map | pivot |\n| bit_length | cycle | full | match | plan |\n| blob | data | fulltexttable | max | position |\n| boolean | database | function | member | position_rege |\n| both | date | fusion | merge | postfix |\n| breadth | day | general | method | precision |\n| break | dbcc | get | min | prefix |\n| browse | deallocate | global | minute | preorder |\n| bulk | dec | go | mod | prepare |\n| by | decimal | goto | modifies | preserve |\n| call | declare | grant | modify | primary |\n| called | default | group | module | print |\n| cardinality | deferrable | grouping | month | prior |\n| cascade | deferred | having | multiset | privileges |\n| cascaded | delete | hold | names | proc |\n| case | deny | holdlock | national | procedure |\n| cast | depth | host | natural | public |\n| catalog | deref | hour | nchar | raiserror |\n| char | desc | identity | nclob | range |\n| char_length | describe | identity_inse | new | read |\n| character | descriptor | identitycol | next | reads |\n| character_len | destroy | if | no | readtext |\n| check | destructor | ignore | nocheck | real |\n| checkpoint | deterministic | immediate | nonclustered | reconfigure |\n| class | diagnostics | in | none | recursive |\n| clob | dictionary | include | normalize | ref |\n| close | disconnect | index | not | references |\n| clustered | disk | indicator | null | referencing |\n| coalesce | distinct | initialize | nullif | regr_avgx |\n| collate | distributed | initially | numeric | regr_avgy |\n| collation | domain | inner | object | regr_count |\n| collect | double | inout | occurrences_r | regr_intercep |\n| column | drop | input | octet_length | regr_r2 |\n| commit | dump | insensitive | of | regr_slope |\n| completion | dynamic | insert | off | regr_sxx |\n| compute | each | int | offsets | regr_sxy |\n| condition | element | integer | old | regr_syy |\n| relative | semanticsimil | structure | truncate | window |\n| release | semanticsimil | submultiset | try_convert | with |\n| replication | sensitive | substring | tsequal | within | group |\n| restore | sequence | substring_reg | uescape | within |\n| restrict | session | sum | under | without |\n| result | session_user | symmetric | union | work |\n| return | set | system | unique | write |\n| returns | sets | system_user | unknown | writetext |\n| revert | setuser | table | unnest | xmlagg |\n| revoke | shutdown | tablesample | unpivot | xmlattributes |\n| right | similar | temporary | update | xmlbinary |\n| role | size | terminate | updatetext | xmlcast |\n| rollback | smallint | textsize | upper | xmlcomment |\n| rollup | some | than | usage | xmlconcat |\n| routine | space | then | use | xmldocument |\n| row | specific | time | user | xmlelement |\n| rowcount | specifictype | timestamp | using | xmlexists |\n| rowguidcol | sql | timezone_hour | value | xmlforest |\n| rows | sqlca | timezone_minu | values | xmliterate |\n| rule | sqlcode | to | var_pop | xmlnamespaces |\n| save | sqlerror | top | var_samp | xmlparse |\n| savepoint | sqlexception | trailing | varchar | xmlpi |\n| schema | sqlstate | tran | variable | xmlquery |\n| scope | sqlwarning | transaction | varying | xmlserialize |\n| scroll | start | translate | view | xmltable |\n| search | state | translate_reg | waitfor | xmltext |\n| second | statement | translation | when | xmlvalidate |\n| section | static | treat | whenever | year |\n| securityaudit | statistics | trigger | where | zone |\n| select | stddev_pop | trim | while |\n| semantickeyph | stddev_samp | true | width_bucket |"}),"\n",(0,t.jsx)(n.h2,{id:"changelog",children:"Changelog"}),"\n",(0,t.jsx)(n.p,{children:"The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Proceed with caution when editing materializations created with previous versions of this connector;\nediting always upgrades your materialization to the latest connector version."})}),"\n",(0,t.jsx)(n.h4,{id:"v1-2023-09-01",children:"V1: 2023-09-01"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"First version"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>l});var t=r(96540);const s={},i=t.createContext(s);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/b0d5790a.65438780.js b/pr-preview/pr-1594/assets/js/b0d5790a.65438780.js deleted file mode 100644 index 6847ed601c..0000000000 --- a/pr-preview/pr-1594/assets/js/b0d5790a.65438780.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9777],{58378:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>a});var t=n(74848),s=n(28453);const i={},c="Braze",d={id:"reference/Connectors/capture-connectors/braze",title:"Braze",description:"This connector captures data from Braze into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/braze.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/braze",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/braze.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Braintree",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree"},next:{title:"Chargebee",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee"}},o={},a=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"braze",children:"Braze"}),"\n",(0,t.jsx)(r.p,{children:"This connector captures data from Braze into Flow collections."}),"\n",(0,t.jsxs)(r.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(r.a,{href:"https://ghcr.io/estuary/source-braze:dev",children:(0,t.jsx)(r.code,{children:"ghcr.io/estuary/source-braze:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(r.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(r.a,{href:"https://docs.airbyte.com/integrations/sources/braze/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(r.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(r.p,{children:"The following data resources are supported through the Braze APIs:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#f3b0b3ef-04fb-4a31-8570-e6ad88dacb18",children:"campaigns"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#c07b5ebd-0246-471e-b154-416d63ae28a1",children:"campaigns_analytics"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#e6c150d7-fceb-4b10-91e2-a9ca4d5806d1",children:"canvases"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#0fd61e93-7edf-4d87-a8dc-052420aefb73",children:"canvases_analytics"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#93ecd8a5-305d-4b72-ae33-2d74983255c1",children:"events"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#0bd1ab63-d1a5-4301-8d17-246cf24a178c",children:"events_analytics"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#07756c39-cfa0-40a0-8101-03f8791cec01",children:"kpi_daily_new_users"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#90a64560-65aa-4f71-a8ef-1edf49321986",children:"kpi_daily_active_users"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#59c4d592-3e77-42f8-8ff1-d5d250acbeae",children:"kpi_daily_app_uninstalls"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#9fa7a3bc-4a02-4de2-bc4c-8f111750665e",children:"cards"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#9cdc3b1e-641e-4d62-b9e8-42d04ee9d4d8",children:"cards_analytics"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#1349e6f4-3ce7-4e60-b3e9-951c99c0993f",children:"segments"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#62d9d142-cdec-4aea-a287-c13efea7415e",children:"segments_analytics"})}),"\n"]}),"\n",(0,t.jsx)(r.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(r.p,{children:["It is required to have an account on Braze to provide us with ",(0,t.jsx)(r.code,{children:"URL"})," and ",(0,t.jsx)(r.code,{children:"Rest API Key"})," during set up."]}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.code,{children:"Rest API Key"})," could be found on Braze Dashboard -> Developer Console tab -> API Settings -> Rest API Keys"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.code,{children:"URL"})," could be found on Braze Dashboard -> Manage Settings -> Settings tab -> ",(0,t.jsx)(r.code,{children:"Your App name"})," -> SDK Endpoint"]}),"\n"]}),"\n",(0,t.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(r.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(r.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Braze source connector."]}),"\n",(0,t.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Property"}),(0,t.jsx)(r.th,{children:"Title"}),(0,t.jsx)(r.th,{children:"Description"}),(0,t.jsx)(r.th,{children:"Type"}),(0,t.jsx)(r.th,{children:"Required/Default"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"/api_key"})}),(0,t.jsx)(r.td,{children:"Braze REST API Key"}),(0,t.jsx)(r.td,{children:"Braze API Key."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"/start_date"})}),(0,t.jsx)(r.td,{children:"Start Date"}),(0,t.jsx)(r.td,{children:"Rows after this date will be synced."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"/url"})}),(0,t.jsx)(r.td,{children:"URL"}),(0,t.jsx)(r.td,{children:"Braze REST API endpoint."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Property"}),(0,t.jsx)(r.th,{children:"Title"}),(0,t.jsx)(r.th,{children:"Description"}),(0,t.jsx)(r.th,{children:"Type"}),(0,t.jsx)(r.th,{children:"Required/Default"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.code,{children:"/stream"})})}),(0,t.jsx)(r.td,{children:"Stream"}),(0,t.jsx)(r.td,{children:"Resource of your Braze project from which collections are captured."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.code,{children:"/syncMode"})})}),(0,t.jsx)(r.td,{children:"Sync Mode"}),(0,t.jsx)(r.td,{children:"Connection method."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-braze:dev\n config:\n api_key: <key>\n start_date: 2017-01-25T00:00:00Z\n url: <url>\n bindings:\n - resource:\n stream: events\n syncMode: full_refresh\n target: ${PREFIX}/events\n {...}\n"})})]})}function h(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>c,x:()=>d});var t=n(96540);const s={},i=t.createContext(s);function c(e){const r=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/b0d7f3f2.9d1cd86c.js b/pr-preview/pr-1594/assets/js/b0d7f3f2.9d1cd86c.js deleted file mode 100644 index e60c0f3d8b..0000000000 --- a/pr-preview/pr-1594/assets/js/b0d7f3f2.9d1cd86c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3355],{35035:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>c,metadata:()=>o,toc:()=>l});var s=t(74848),r=t(28453);const c={},i="Zendesk Chat",o={id:"reference/Connectors/capture-connectors/zendesk-chat",title:"Zendesk Chat",description:"This connector captures data from Zendesk into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/zendesk-chat.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/zendesk-chat",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/zendesk-chat.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"YouTube Analytics",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics"},next:{title:"Zendesk Support",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support"}},d={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"zendesk-chat",children:"Zendesk Chat"}),"\n",(0,s.jsx)(n.p,{children:"This connector captures data from Zendesk into Flow collections."}),"\n",(0,s.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/source-zendesk-chat:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/source-zendesk-chat:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,s.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/zendesk-chat/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,s.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,s.jsx)(n.p,{children:"The following data resources are supported through the Zendesk API:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/accounts#show-account",children:"Accounts"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/agents#list-agents",children:"Agents"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/incremental_export#incremental-agent-timeline-export",children:"Agent Timelines"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/chats#list-chats",children:"Chats"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/shortcuts#list-shortcuts",children:"Shortcuts"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/triggers#list-triggers",children:"Triggers"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/bans#list-bans",children:"Bans"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/departments#list-departments",children:"Departments"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/goals#list-goals",children:"Goals"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/skills#list-skills",children:"Skills"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/roles#list-roles",children:"Roles"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/routing_settings#show-account-routing-settings",children:"Routing Settings"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A Zendesk Account with permission to access data from accounts you want to sync."}),"\n",(0,s.jsxs)(n.li,{children:["An ",(0,s.jsx)(n.a,{href:"https://developer.zendesk.com/rest_api/docs/chat/auth",children:"Access Token"}),". We recommend creating a restricted, read-only key specifically for Estuary access to allow you to control which resources Estuary should be able to access."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification files.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Zendesk Chat source connector."]}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/start_date"})})}),(0,s.jsx)(n.td,{children:"Start Date"}),(0,s.jsx)(n.td,{children:"The date from which you would like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/subdomain"})})}),(0,s.jsx)(n.td,{children:"Subdomain"}),(0,s.jsx)(n.td,{children:"This is your Zendesk subdomain that can be found in your account URL."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/stream"})})}),(0,s.jsx)(n.td,{children:"Stream"}),(0,s.jsx)(n.td,{children:"Resource in Zendesk from which collections are captured."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/syncMode"})})}),(0,s.jsx)(n.td,{children:"Sync Mode"}),(0,s.jsx)(n.td,{children:"Connection method."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-zendesk-chat:dev\n config:\n credentials:\n access_token: <secret>\n credentials: access_token\n start_date: 2022-03-01T00:00:00Z\n subdomain: my_subdomain\n bindings:\n - resource:\n stream: accounts\n syncMode: full_refresh\n target: ${PREFIX}/accounts\n"})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var s=t(96540);const r={},c=s.createContext(r);function i(e){const n=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/b1a65bd3.d2b80b1e.js b/pr-preview/pr-1594/assets/js/b1a65bd3.d2b80b1e.js deleted file mode 100644 index 1897d3a89e..0000000000 --- a/pr-preview/pr-1594/assets/js/b1a65bd3.d2b80b1e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1751],{89200:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>a});var t=n(74848),o=n(28453);const s={},i="YouTube Analytics",c={id:"reference/Connectors/capture-connectors/youtube-analytics",title:"YouTube Analytics",description:"This connector captures data from YouTube Analytics into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/youtube-analytics.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/youtube-analytics",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/youtube-analytics.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"WooCommerce",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce"},next:{title:"Zendesk Chat",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat"}},l={},a=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function d(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"youtube-analytics",children:"YouTube Analytics"}),"\n",(0,t.jsx)(r.p,{children:"This connector captures data from YouTube Analytics into Flow collections."}),"\n",(0,t.jsxs)(r.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(r.a,{href:"https://ghcr.io/estuary/source-youtube-analytics:dev",children:(0,t.jsx)(r.code,{children:"ghcr.io/estuary/source-youtube-analytics:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(r.p,{children:"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system."}),"\n",(0,t.jsxs)(r.p,{children:["You can find their documentation ",(0,t.jsx)(r.a,{href:"https://docs.airbyte.com/integrations/sources/youtube-analytics/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(r.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(r.p,{children:"The following data resources are supported through the YouTube Analytics APIs:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#video-annotations",children:"channel_annotations_a1"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#video-user-activity",children:"channel_basic_a2"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#video-cards",children:"channel_cards_a1"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#video-combined",children:"channel_combined_a2"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#video-viewer-demographics",children:"channel_demographics_a1"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#video-device-type-and-operating-system",children:"channel_device_os_a2"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#video-end-screens",children:"channel_end_screens_a1"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#video-playback-locations",children:"channel_playback_location_a2"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#video-province",children:"channel_province_a2"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#video-content-sharing",children:"channel_sharing_service_a1"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#video-subtitles",children:"channel_subtitles_a2"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#video-traffic-sources",children:"channel_traffic_source_a2"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#playlist-user-activity",children:"playlist_basic_a1"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#playlist-combined",children:"playlist_combined_a1"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#playlist-device-type-and-operating-system",children:"playlist_device_os_a1"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#playlist-playback-locations",children:"playlist_playback_location_a1"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#playlist-province",children:"playlist_province_a1"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.google.com/youtube/reporting/v1/reports/channel_reports#playlist-traffic-sources",children:"playlist_traffic_source_a1"})}),"\n"]}),"\n",(0,t.jsx)(r.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(r.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(r.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the YouTube Analytics source connector."]}),"\n",(0,t.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Property"}),(0,t.jsx)(r.th,{children:"Title"}),(0,t.jsx)(r.th,{children:"Description"}),(0,t.jsx)(r.th,{children:"Type"}),(0,t.jsx)(r.th,{children:"Required/Default"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.code,{children:"/client_id"})})}),(0,t.jsx)(r.td,{children:"Client ID"}),(0,t.jsx)(r.td,{children:"Your Client ID"}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.code,{children:"/client_secret"})})}),(0,t.jsx)(r.td,{children:"Secret Key"}),(0,t.jsx)(r.td,{children:"Your Client Secret"}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.code,{children:"/refresh_token"})})}),(0,t.jsx)(r.td,{children:"Refresh Token"}),(0,t.jsx)(r.td,{children:"Your Refresh Token"}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Property"}),(0,t.jsx)(r.th,{children:"Title"}),(0,t.jsx)(r.th,{children:"Description"}),(0,t.jsx)(r.th,{children:"Type"}),(0,t.jsx)(r.th,{children:"Required/Default"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.code,{children:"/stream"})})}),(0,t.jsx)(r.td,{children:"Stream"}),(0,t.jsx)(r.td,{children:"Resource of your YouTube Analytics project from which collections are captured."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.code,{children:"/syncMode"})})}),(0,t.jsx)(r.td,{children:"Sync Mode"}),(0,t.jsx)(r.td,{children:"Connection method."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-youtube-analytics:dev\n config:\n credentials:\n auth_type: OAuth\n bindings:\n - resource:\n stream: channel_annotations_a1\n syncMode: incremental\n target: ${PREFIX}/channel_annotations_a1\n {...}\n"})})]})}function h(e={}){const{wrapper:r}={...(0,o.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>i,x:()=>c});var t=n(96540);const o={},s=t.createContext(o);function i(e){const r=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/b32e8f59.dc986ba8.js b/pr-preview/pr-1594/assets/js/b32e8f59.dc986ba8.js deleted file mode 100644 index ac9adaaea1..0000000000 --- a/pr-preview/pr-1594/assets/js/b32e8f59.dc986ba8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8117],{31308:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>n,toc:()=>d});var i=s(74848),a=s(28453);const r={},o="System-specific Data Flows",n={id:"guides/system-specific-dataflows/README",title:"System-specific Data Flows",description:"The guides in this section cover popular Estuary Flow use cases. Each guide walks you through the process of capturing data from a specific source system and materializing it to a specific destination.",source:"@site/docs/guides/system-specific-dataflows/README.md",sourceDirName:"guides/system-specific-dataflows",slug:"/guides/system-specific-dataflows/",permalink:"/pr-preview/pr-1594/guides/system-specific-dataflows/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/system-specific-dataflows/README.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Create a basic Data Flow",permalink:"/pr-preview/pr-1594/guides/create-dataflow"},next:{title:"Google Cloud Firestore to Snowflake",permalink:"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh"}},c={},d=[];function u(e){const t={a:"a",h1:"h1",p:"p",strong:"strong",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"system-specific-data-flows",children:"System-specific Data Flows"}),"\n",(0,i.jsxs)(t.p,{children:["The guides in this section cover popular Estuary Flow use cases. Each guide walks you through the process of ",(0,i.jsx)(t.strong,{children:"capturing"})," data from a specific source system and ",(0,i.jsx)(t.strong,{children:"materializing"})," it to a specific destination."]}),"\n",(0,i.jsxs)(t.p,{children:["These are supplemental to the ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"main guide to create a Data Flow"}),".\nIf you don't see your exact Data Flow here, use the main guide and the ",(0,i.jsx)(t.a,{href:"../../reference/Connectors/",children:"connector reference"}),"\nto mix and match your required source and destination systems."]})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>o,x:()=>n});var i=s(96540);const a={},r=i.createContext(a);function o(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function n(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/b5dab0d4.1e790139.js b/pr-preview/pr-1594/assets/js/b5dab0d4.1e790139.js deleted file mode 100644 index 449f74eaca..0000000000 --- a/pr-preview/pr-1594/assets/js/b5dab0d4.1e790139.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6839],{82892:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var t=s(74848),r=s(28453);const i={},o="Google Analytics UA",c={id:"reference/Connectors/capture-connectors/google-analytics",title:"Google Analytics UA",description:"This connector captures data from a view in Google Universal Analytics.",source:"@site/docs/reference/Connectors/capture-connectors/google-analytics.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/google-analytics",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/google-analytics.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Ads",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads"},next:{title:"Google Analytics 4",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4"}},l={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with Google in the Flow web app",id:"using-oauth2-to-authenticate-with-google-in-the-flow-web-app",level:3},{value:"Authenticating manually with a service account key",id:"authenticating-manually-with-a-service-account-key",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Custom reports",id:"custom-reports",level:3},{value:"Sample",id:"sample",level:3},{value:"Performance considerations",id:"performance-considerations",level:2},{value:"Data sampling",id:"data-sampling",level:3},{value:"Processing latency",id:"processing-latency",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"google-analytics-ua",children:"Google Analytics UA"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from a view in Google Universal Analytics."}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsx)(n.p,{children:"This connector supports Universal Analytics, not Google Analytics 4."}),(0,t.jsxs)(n.p,{children:["Google Analytics 4 is supported by a ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4",children:"separate connector"}),"."]})]}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-google-analytics-ua:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-google-analytics-ua:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/google-analytics-universal-analytics",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(n.p,{children:"The following data resources are captured to Flow collections by default:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Website overview"}),"\n",(0,t.jsx)(n.li,{children:"Traffic sources"}),"\n",(0,t.jsx)(n.li,{children:"Pages"}),"\n",(0,t.jsx)(n.li,{children:"Locations"}),"\n",(0,t.jsx)(n.li,{children:"Monthly active users"}),"\n",(0,t.jsx)(n.li,{children:"Four weekly active users"}),"\n",(0,t.jsx)(n.li,{children:"Two weekly active users"}),"\n",(0,t.jsx)(n.li,{children:"Weekly active users"}),"\n",(0,t.jsx)(n.li,{children:"Daily active users"}),"\n",(0,t.jsx)(n.li,{children:"Devices"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsxs)(n.p,{children:["You can also configure ",(0,t.jsx)(n.a,{href:"#custom-reports",children:"custom reports"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"There are two ways to authenticate with Google when capturing data from a Google Analytics view: using OAuth2, and manually, by generating a service account key.\nTheir prerequisites differ."}),"\n",(0,t.jsx)(n.p,{children:"OAuth is recommended for simplicity in the Flow web app;\nthe service account key method is the only supported method using the command line."}),"\n",(0,t.jsx)(n.h3,{id:"using-oauth2-to-authenticate-with-google-in-the-flow-web-app",children:"Using OAuth2 to authenticate with Google in the Flow web app"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The View ID for your Google Analytics account.\nYou can find this using Google's ",(0,t.jsx)(n.a,{href:"https://ga-dev-tools.web.app/account-explorer/",children:"Account Explorer"})," tool."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Your Google account username and password."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"authenticating-manually-with-a-service-account-key",children:"Authenticating manually with a service account key"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The View ID for your Google Analytics account.\nYou can find this using Google's ",(0,t.jsx)(n.a,{href:"https://ga-dev-tools.web.app/account-explorer/",children:"Account Explorer"})," tool."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Google Analytics and Google Analytics Reporting APIs enabled on your Google account."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"A Google service account with:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"A JSON key generated."}),"\n",(0,t.jsx)(n.li,{children:"Access to the source Google Analytics view."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Follow the steps below to meet these prerequisites:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://support.google.com/googleapi/answer/6158841?hl=en",children:"Enable"})," the Google Analytics and Google Analytics Reporting APIs\nfor the Google ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/storage/docs/projects",children:"project"})," with which your Analytics view is associated.\n(Unless you actively develop with Google Cloud, you'll likely just have one option)."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create a ",(0,t.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2/service-account#creatinganaccount",children:"service account and generate a JSON key"}),"\nDuring setup, grant the account the ",(0,t.jsx)(n.strong,{children:"Viewer"})," role on your project.\nYou'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://support.google.com/analytics/answer/1009702#Add&zippy=%2Cin-this-article",children:"Add the service account"})," to the Google Analytics view."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Grant the account ",(0,t.jsx)(n.strong,{children:"Viewer"})," permissions (formerly known as Read & Analyze permissions)."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors.\nThe values and specification sample below provide configuration details specific to the Google Analytics source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.p,{children:["The following properties reflect the Service Account Key authentication method. If you're working in the Flow web app, you'll use ",(0,t.jsx)(n.a,{href:"#using-oauth2-to-authenticate-with-google--in-the-flow-web-app",children:"OAuth2"}),", so some of these properties aren't required."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/credentials"})}),(0,t.jsx)(n.td,{children:"Credentials"}),(0,t.jsx)(n.td,{children:"Credentials for the service"}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/credentials/auth_type"})}),(0,t.jsx)(n.td,{children:"Authentication Type"}),(0,t.jsxs)(n.td,{children:["Authentication method. Set to ",(0,t.jsx)(n.code,{children:"Service"})," for manual configuration, or use OAuth in the web app."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"credentials/credentials_json"})}),(0,t.jsx)(n.td,{children:"Service Account Credentials"}),(0,t.jsx)(n.td,{children:"Contents of the JSON key file generated during setup."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/custom_reports"})}),(0,t.jsx)(n.td,{children:"Custom Reports (Optional)"}),(0,t.jsx)(n.td,{children:"A JSON array describing the custom reports you want to sync from GA."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/start_date"})})}),(0,t.jsx)(n.td,{children:"Start Date"}),(0,t.jsx)(n.td,{children:"The date in the format YYYY-MM-DD. Any data before this date will not be replicated."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/view_id"})})}),(0,t.jsx)(n.td,{children:"View ID"}),(0,t.jsxs)(n.td,{children:["The ID for the Google Analytics View you want to fetch data from. This can be found from the Google Analytics Account Explorer: ",(0,t.jsx)(n.a,{href:"https://ga-dev-tools.appspot.com/account-explorer/",children:"https://ga-dev-tools.appspot.com/account-explorer/"})]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/window_in_days"})}),(0,t.jsx)(n.td,{children:"Window in days (Optional)"}),(0,t.jsx)(n.td,{children:"The amount of days each stream slice would consist of beginning from start_date. Bigger the value - faster the fetch. (Min=1, as for a Day; Max=364, as for a Year)."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1"})})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Data resource from the Google Analytics view."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsxs)(n.td,{children:["Connection method. Always set to ",(0,t.jsx)(n.code,{children:"incremental"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"custom-reports",children:"Custom reports"}),"\n",(0,t.jsxs)(n.p,{children:["You can include data beyond the ",(0,t.jsx)(n.a,{href:"#supported-data-resources",children:"default data resources"})," with Custom Reports.\nThese replicate the functionality of ",(0,t.jsx)(n.a,{href:"https://support.google.com/analytics/answer/10445879?hl=en",children:"Custom Reports"})," in the Google Analytics Web console."]}),"\n",(0,t.jsx)(n.p,{children:"To do so, fill out the Custom Reports property with a JSON array as a string with the following schema:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'[{"name": string, "dimensions": [string], "metrics": [string]}]\n'})}),"\n",(0,t.jsxs)(n.p,{children:["You may specify ",(0,t.jsx)(n.a,{href:"https://ga-dev-tools.web.app/dimensions-metrics-explorer/",children:"default Google Analytics dimensions and metrics"})," from the table below,\nor custom dimensions and metrics you've previously defined.\nEach custom report may contain up to 7 unique dimensions and 10 unique metrics.\nYou must include the ",(0,t.jsx)(n.code,{children:"ga:date"})," dimension for proper data flow."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Supported GA dimensions"}),(0,t.jsx)(n.th,{children:"Supported GA metrics"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:browser"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:14dayUsers"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:city"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:1dayUsers"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:continent"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:28dayUsers"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:country"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:30dayUsers"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:date"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:7dayUsers"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:deviceCategory"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:avgSessionDuration"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:hostname"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:avgTimeOnPage"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:medium"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:bounceRate"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:metro"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:entranceRate"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:operatingSystem"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:entrances"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:pagePath"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:exits"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:region"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:newUsers"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:socialNetwork"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:pageviews"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:source"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:pageviewsPerSession"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:subContinent"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:sessions"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:sessionsPerUser"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:uniquePageviews"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ga:users"})})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.p,{children:"This sample reflects the manual authentication method."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-google-analytics-v4:dev\n config:\n view_id: 000000000\n start_date: 2022-03-01\n credentials:\n auth_type: service\n credentials_json: <secret>\n window_in_days: 1\n\n bindings:\n - resource:\n stream: daily_active_users\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: devices\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: four_weekly_active_users\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: locations\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: monthly_active_users\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: pages\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: traffic_sources\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: two_weekly_active_users\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: website_overview\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n\n - resource:\n stream: weekly_active_users\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,t.jsx)(n.h2,{id:"performance-considerations",children:"Performance considerations"}),"\n",(0,t.jsx)(n.h3,{id:"data-sampling",children:"Data sampling"}),"\n",(0,t.jsxs)(n.p,{children:["The Google Analytics Reporting API enforces compute thresholds for ad-hoc queries and reports.\nIf a threshold is exceeded, the API will apply sampling to limit the number of sessions analyzed for the specified time range.\nThese thresholds can be found ",(0,t.jsx)(n.a,{href:"https://support.google.com/analytics/answer/2637192?hl=en&ref_topic=2601030&visit_id=637868645346124317-2833523666&rd=1#thresholds&zippy=%2Cin-this-article",children:"here"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["If your account is on the Analytics 360 tier, you're less likely to run into these limitations.\nFor Analytics Standard accounts, you can avoid sampling by keeping the ",(0,t.jsx)(n.code,{children:"window_in_days"})," parameter set to its default value, ",(0,t.jsx)(n.code,{children:"1"}),".\nThis makes it less likely that you will exceed the threshold.\nWhen sampling occurs, a warning is written to the capture log."]}),"\n",(0,t.jsx)(n.h3,{id:"processing-latency",children:"Processing latency"}),"\n",(0,t.jsxs)(n.p,{children:["Data in Google Analytics reports may continue to update ",(0,t.jsx)(n.a,{href:"https://support.google.com/analytics/answer/1070983?hl=en#DataProcessingLatency&zippy=%2Cin-this-article",children:"up to 48 hours after it appears"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"To ensure data correctness, each time it reads from Google Analytics,\nthis connector automatically applies a lookback window of 2 days prior to its last read.\nThis allows it to double-check and correct for any changes in reports resulting from latent data updates."}),"\n",(0,t.jsxs)(n.p,{children:["This mechanism relies on the ",(0,t.jsx)(n.code,{children:"isDataGolden"})," flag in the ",(0,t.jsx)(n.a,{href:"https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet#reportdata",children:"Google Analytics Reporting API"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>c});var t=s(96540);const r={},i=t.createContext(r);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/b74f0b56.f52da84e.js b/pr-preview/pr-1594/assets/js/b74f0b56.f52da84e.js deleted file mode 100644 index dc447b227c..0000000000 --- a/pr-preview/pr-1594/assets/js/b74f0b56.f52da84e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5623],{26666:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>r,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var a=o(74848),t=o(28453);const i={sidebar_position:5},s="Organizing a Flow catalog",l={id:"reference/organizing-catalogs",title:"Organizing a Flow catalog",description:"This page is outdated. It does not reflect the current state of the Flow web application and the",source:"@site/docs/reference/organizing-catalogs.md",sourceDirName:"reference",slug:"/reference/organizing-catalogs",permalink:"/pr-preview/pr-1594/reference/organizing-catalogs",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/organizing-catalogs.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Working with logs and statistics",permalink:"/pr-preview/pr-1594/reference/working-logs-stats"},next:{title:"Allowlisting IP Addresses for Estuary Flow",permalink:"/pr-preview/pr-1594/reference/allow-ip-addresses"}},r={},c=[{value:"<code>import</code>",id:"import",level:3},{value:"Example: Organizing collections",id:"example-organizing-collections",level:4},{value:"Example: Separate environments",id:"example-separate-environments",level:4},{value:"Example: Cross-team collaboration",id:"example-cross-team-collaboration",level:4},{value:"Global namespace",id:"global-namespace",level:3}];function m(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"organizing-a-flow-catalog",children:"Organizing a Flow catalog"}),"\n",(0,a.jsx)(n.admonition,{title:"Beta",type:"caution",children:(0,a.jsxs)(n.p,{children:["This page is outdated. It does not reflect the current state of the Flow web application and the\n",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/authentication#authorizing-users-and-authenticating-with-flow",children:"authorization model"})," used to share\nentities in Flow catalogs. Updates are coming soon."]})}),"\n",(0,a.jsxs)(n.p,{children:["It's not necessary to store the entire catalog spec in one YAML file, and Flow provides the flexibility to reference other files, which can be managed independently.\nYou can leverage this capability when you ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/flowctl",children:"run Flow from the command line"}),". You may want to do so if:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"You want to ensure shared collections remain easy to find"}),"\n",(0,a.jsx)(n.li,{children:"You use group data that's managed by different teams"}),"\n",(0,a.jsx)(n.li,{children:"You could benefit from DRY factoring things that are different per environment"}),"\n",(0,a.jsx)(n.li,{children:"You need to manage sensitive credentials separately from materialization definitions"}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"import",children:(0,a.jsx)(n.code,{children:"import"})}),"\n",(0,a.jsxs)(n.p,{children:["Flow's ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/import",children:(0,a.jsx)(n.code,{children:"import"})})," directive can help you easily handle all of these scenarios while keeping your catalogs well organized. Each catalog spec file may import any number of other files, and each import may refer to either relative or an absolute URL."]}),"\n",(0,a.jsxs)(n.p,{children:["When you use ",(0,a.jsx)(n.code,{children:"import"})," in a catalog spec, you're conceptually bringing the entirety of another catalog \u2014 as well as the schemas and typescript files it uses \u2014 into your catalog. Imports are also transitive, so when you import another catalog, you're ",(0,a.jsx)(n.em,{children:"also"})," importing everything that other catalog has imported. This allows you to keep your catalogs organized, and is flexible enough to support collaboration between separate teams and organizations."]}),"\n",(0,a.jsx)(n.p,{children:"Perhaps the best way of explaining this is with some examples."}),"\n",(0,a.jsx)(n.h4,{id:"example-organizing-collections",children:"Example: Organizing collections"}),"\n",(0,a.jsx)(n.p,{children:"Let's look at a relatively simple case in which you want to organize your collections into multiple catalog files. Say you work for Acme Corp on the team that's introducing Flow. You might start with the collections and directory structure below:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"acme/customers/customerInfo\nacme/products/info/manufacturers\nacme/products/info/skus\nacme/products/inventory\nacme/sales/pending\nacme/sales/complete\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"acme\n\u251c\u2500\u2500 flow.yaml\n\u251c\u2500\u2500 customers\n\u2502 \u251c\u2500\u2500 flow.ts\n\u2502 \u251c\u2500\u2500 flow.yaml\n\u2502 \u2514\u2500\u2500 schemas.yaml\n\u251c\u2500\u2500 products\n\u2502 \u251c\u2500\u2500 flow.yaml\n\u2502 \u251c\u2500\u2500 info\n\u2502 \u2502 \u251c\u2500\u2500 flow.ts\n\u2502 \u2502 \u251c\u2500\u2500 flow.yaml\n\u2502 \u2502 \u2514\u2500\u2500 schemas.yaml\n\u2502 \u2514\u2500\u2500 inventory\n\u2502 \u251c\u2500\u2500 flow.ts\n\u2502 \u251c\u2500\u2500 flow.yaml\n\u2502 \u2514\u2500\u2500 schemas.yaml\nschemas.yaml\n\u2514\u2500\u2500 sales\n \u251c\u2500\u2500 flow.ts\n \u251c\u2500\u2500 flow.yaml\n \u2514\u2500\u2500 schemas.yaml\n"})}),"\n",(0,a.jsxs)(n.p,{children:["It's immediately clear where each of the given collections is defined, since the directory names match the path segments in the collection names. This is not required by the",(0,a.jsx)(n.code,{children:"flowctl"})," CLI, but is strongly recommended, since it makes your catalogs more readable and maintainable. Each directory contains a catalog spec (",(0,a.jsx)(n.code,{children:"flow.yaml"}),"), which will import all of the catalogs from child directories."]}),"\n",(0,a.jsxs)(n.p,{children:["So, the top-level catalog spec, ",(0,a.jsx)(n.code,{children:"acme/flow.yaml"}),", might look something like this:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"import:\n - customers/flow.yaml\n - products/flow.yaml\n - sales/flow.yaml\n"})}),"\n",(0,a.jsxs)(n.p,{children:["This type of layout has a number of other advantages. During development, you can easily work with a subset of collections using, for example, ",(0,a.jsx)(n.code,{children:"flowctl test --source acme/products/flow.yaml"})," to run only the tests for product-related collections. It also allows other imports to be more granular. For example, you might want a derivation under ",(0,a.jsx)(n.code,{children:"sales"})," to read from ",(0,a.jsx)(n.code,{children:"acme/products/info"}),". Since ",(0,a.jsx)(n.code,{children:"info"})," has a separate catalog spec, ",(0,a.jsx)(n.code,{children:"acme/sales/flow.yaml"})," can import ",(0,a.jsx)(n.code,{children:"acme/products/info/flow.yaml"})," without creating a dependency on the ",(0,a.jsx)(n.code,{children:"inventory"})," collection."]}),"\n",(0,a.jsx)(n.h4,{id:"example-separate-environments",children:"Example: Separate environments"}),"\n",(0,a.jsx)(n.p,{children:"It's common to use separate environments for tiers like development, staging, and production. Flow catalog specs often necessarily include endpoint configuration for external systems that will hold materialized views. Let's say you want your production environment to materialize views to Snowflake, but you want to develop locally on SQLite. We might modify the Acme example slightly to account for this."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"acme\n\u251c\u2500\u2500 dev.flow.yaml\n\u251c\u2500\u2500 prod.flow.yaml\n... the remainder is the same as above\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Each of the top-level catalog specs might import all of the collections and define an endpoint called ",(0,a.jsx)(n.code,{children:"ourMaterializationEndpoint"})," that points to the desired system. The ",(0,a.jsx)(n.code,{children:"import"})," block might be the same for each system, but each file may use a different configuration for the endpoint, which is used by any materializations that reference it."]}),"\n",(0,a.jsx)(n.p,{children:"Our configuration for our development environment will look like:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:'title="dev.flow.yaml"',children:" import:\n - customers/flow.yaml\n - products/flow.yaml\n - sales/flow.yaml\n\n ourMaterializationEndpoint:\n # dev.flow.yaml\n sqlite:\n path: dev-materializations.db\n"})}),"\n",(0,a.jsx)(n.p,{children:"While production will look like:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:'title="prod.flow.yaml"',children:"import:\n - customers/flow.yaml\n - products/flow.yaml\n - sales/flow.yaml\n\nendpoints:\n snowflake:\n account: acme_production\n role: admin\n schema: snowflake.com/acmeProd\n user: importantAdmin\n password: abc123\n warehouse: acme_production\n"})}),"\n",(0,a.jsx)(n.p,{children:"When we test the draft locally, we'll work with dev.flow.yaml, but we'll publish prod.flow.yaml."}),"\n",(0,a.jsx)(n.p,{children:"Everything will continue to work because in our development environment we'll be binding collections to our local SQLite DB and in production we'll use Snowflake."}),"\n",(0,a.jsx)(n.h4,{id:"example-cross-team-collaboration",children:"Example: Cross-team collaboration"}),"\n",(0,a.jsx)(n.p,{children:"When working across teams, it's common for one team to provide a data product for another to reference and use. Flow is designed for cross-team collaboration, allowing teams and users to reference each other's full catalog or schema. "}),"\n",(0,a.jsx)(n.p,{children:"Again using the Acme example, let's imagine we have two teams. Team Web is responsible for Acme's website, and Team User is responsible for providing a view of Acme customers that's always up to date. Since Acme wants a responsive site that provides a good customer experience, Team Web needs to pull the most up-to-date information from Team User at any point. Let's look at Team User's collections:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:'title="teamUser.flow.yaml"',children:"import:\n - userProfile.flow.yaml\n"})}),"\n",(0,a.jsx)(n.p,{children:"Which references:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:'title="userProfile.flow.yaml"',children:'collection:\n userProfile:\n schema:\n -"/userProfile/schema"\n key:\n [/id]\n'})}),"\n",(0,a.jsx)(n.p,{children:"Team User references files in their directory, which they actively manage in both their import and schema sections. If Team Web wants to access user data (and they have access), they can use a relative path or a URL-based path given that Team User publishes their data to a URL for access:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:'title="teamWeb.flow.yaml"',children:"import:\n -http://www.acme.com/teamUser#userProfile.flow.yaml\n -webStuff.flow.yaml\n"})}),"\n",(0,a.jsx)(n.p,{children:"Now Team Web has direct access to collections (referenced by their name) to build derived collections on top of. They can also directly import schemas:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",metastring:'title="webStuff.flow.yaml"',children:"collection:\n webStuff:\n schema:\n -http://acme.com/teamUser#userProfile/#schema\n key:\n [/id]\n"})}),"\n",(0,a.jsx)(n.h3,{id:"global-namespace",children:"Global namespace"}),"\n",(0,a.jsxs)(n.p,{children:["Every Flow collection has a name, and that name ",(0,a.jsx)(n.em,{children:"must"})," be unique within a running Flow system. Flow collections should be thought of as existing within a global namespace. Keeping names globally unique makes it easy to import catalogs from other teams, or even other organizations, without having naming conflicts or ambiguities."]}),"\n",(0,a.jsxs)(n.p,{children:["For example, imagine your catalog for the inside sales team has a collection just named ",(0,a.jsx)(n.code,{children:"customers"}),". If you later try to import a catalog from the outside sales team that also contains a ",(0,a.jsx)(n.code,{children:"customers"})," collection, \ud83d\udca5 there's a collision. A better collection name would be ",(0,a.jsx)(n.code,{children:"acme/inside-sales/customers"}),". This allows a catalog to include customer data from separate teams, and also separate organizations."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/#namespace",children:"Learn more about the Flow namespace."})})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(m,{...e})}):m(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>s,x:()=>l});var a=o(96540);const t={},i=a.createContext(t);function s(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/b7a68670.8abf42ed.js b/pr-preview/pr-1594/assets/js/b7a68670.8abf42ed.js deleted file mode 100644 index ff1ceb8116..0000000000 --- a/pr-preview/pr-1594/assets/js/b7a68670.8abf42ed.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7496],{73502:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var s=r(74848),t=r(28453);const i={sidebar_position:3},c="Amazon RDS for SQL Server",o={id:"reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver",title:"Amazon RDS for SQL Server",description:"This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver.md",sourceDirName:"reference/Connectors/capture-connectors/SQLServer",slug:"/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Microsoft SQL Server",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/"},next:{title:"Google Cloud SQL for SQL Server",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver"}},a={},l=[{value:"Supported versions and platforms",id:"supported-versions-and-platforms",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Specifying Flow collection keys",id:"specifying-flow-collection-keys",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"amazon-rds-for-sql-server",children:"Amazon RDS for SQL Server"}),"\n",(0,s.jsx)(n.p,{children:"This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections."}),"\n",(0,s.jsxs)(n.p,{children:["It\u2019s available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/source-sqlserver:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/source-sqlserver:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(n.h2,{id:"supported-versions-and-platforms",children:"Supported versions and platforms"}),"\n",(0,s.jsx)(n.p,{children:"This connector designed for databases using any version of SQL Server which has CDC support, and is regularly tested against SQL Server 2017 and up."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"To capture change events from SQL Server tables using this connector, you need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["For each table to be captured, a primary key should be specified in the database.\nIf a table doesn't have a primary key, you must manually specify a key in the associated Flow collection definition while creating the capture.\n",(0,s.jsx)(n.a,{href:"#specifying-flow-collection-keys",children:"See detailed steps"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/enable-and-disable-change-data-capture-sql-server?view=sql-server-ver16",children:"CDC enabled"}),"\non the database and the individual tables to be captured.\n(This creates ",(0,s.jsx)(n.em,{children:"change tables"})," in the database, from which the connector reads.)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.strong,{children:"watermarks table"}),". The watermarks table is a small \u201cscratch space\u201d to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A user role with:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"SELECT"})," permissions on the CDC schema and the schemas that contain tables to be captured."]}),"\n",(0,s.jsx)(n.li,{children:"Access to the change tables created as part of the SQL Server CDC process."}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"SELECT"}),", ",(0,s.jsx)(n.code,{children:"INSERT"}),", and ",(0,s.jsx)(n.code,{children:"UPDATE"})," permissions on the watermarks table"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"To meet these requirements, follow the steps for your hosting type."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#setup-self-hosted-sql-server",children:"Self-hosted SQL Server"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#setup-azure-sql-database",children:"Azure SQL Database"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#setup-amazon-rds-for-sql-server",children:"Amazon RDS for SQL Server"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#setup-google-cloud-sql-for-sql-server",children:"Google Cloud SQL for SQL Server"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html",children:"Modify the database"}),", setting ",(0,s.jsx)(n.strong,{children:"Public accessibility"})," to ",(0,s.jsx)(n.strong,{children:"Yes"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database as described in ",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html#Overview.RDSSecurityGroups.Create",children:"the Amazon documentation"}),".Create a new inbound rule and a new outbound rule that allow all traffic from the ",(0,s.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Follow the guide to ",(0,s.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,s.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,s.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,s.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In your SQL client, connect to your instance as the default ",(0,s.jsx)(n.code,{children:"sqlserver"})," user and issue the following commands."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",children:"USE <database>;\n-- Enable CDC for the database.\nEXEC msdb.dbo.rds_cdc_enable_db;\n-- Create user and password for use with the connector.\nCREATE LOGIN flow_capture WITH PASSWORD = 'secret';\nCREATE USER flow_capture FOR LOGIN flow_capture;\n-- Grant the user permissions on the CDC schema and schemas with data.\n-- This assumes all tables to be captured are in the default schema, `dbo`.\n-- Add similar queries for any other schemas that contain tables you want to capture.\nGRANT SELECT ON SCHEMA :: dbo TO flow_capture;\nGRANT SELECT ON SCHEMA :: cdc TO flow_capture;\n-- Create the watermarks table and grant permissions.\nCREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT);\nGRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture;\n-- Enable CDC on tables. The below query enables CDC the watermarks table ONLY.\n-- You should add similar query for all other tables you intend to capture.\nEXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture';\n"})}),"\n",(0,s.jsxs)(n.ol,{start:"6",children:["\n",(0,s.jsxs)(n.li,{children:["In the ",(0,s.jsx)(n.a,{href:"https://console.aws.amazon.com/rds/",children:"RDS console"}),", note the instance's Endpoint and Port. You'll need these for the ",(0,s.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the SQL Server source connector."]}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/address"})})}),(0,s.jsx)(n.td,{children:"Server Address"}),(0,s.jsxs)(n.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/database"})})}),(0,s.jsx)(n.td,{children:"Database"}),(0,s.jsx)(n.td,{children:"Logical database name to capture from."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/user"})})}),(0,s.jsx)(n.td,{children:"User"}),(0,s.jsx)(n.td,{children:"The database user to authenticate as."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsxs)(n.td,{children:["Required, ",(0,s.jsx)(n.code,{children:'"flow_capture"'})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/password"})})}),(0,s.jsx)(n.td,{children:"Password"}),(0,s.jsx)(n.td,{children:"Password for the specified database user."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced"})}),(0,s.jsx)(n.td,{children:"Advanced Options"}),(0,s.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,s.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,s.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,s.jsx)(n.td,{children:"integer"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"4096"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/skip_backfills"})}),(0,s.jsx)(n.td,{children:"Skip Backfills"}),(0,s.jsx)(n.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/watermarksTable"})}),(0,s.jsx)(n.td,{children:"Watermarks Table"}),(0,s.jsx)(n.td,{children:"The name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:'"dbo.flow_watermarks"'})})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/namespace"})})}),(0,s.jsx)(n.td,{children:"Namespace"}),(0,s.jsxs)(n.td,{children:["The ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/sql/relational-databases/databases/databases?view=sql-server-ver16#basic-information-about-databases",children:"namespace/schema"})," of the table."]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/stream"})})}),(0,s.jsx)(n.td,{children:"Stream"}),(0,s.jsx)(n.td,{children:"Table name."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/primary_key"})}),(0,s.jsx)(n.td,{children:"Primary Key Columns"}),(0,s.jsx)(n.td,{children:"array"}),(0,s.jsx)(n.td,{children:"The columns which together form the primary key of the table."}),(0,s.jsx)(n.td,{})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/source-sqlserver:dev"\n config:\n address: "<host>:1433"\n database: "my_db"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n stream: ${TABLE_NAME}\n namespace: dbo\n primary_key: ["id"]\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,s.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,s.jsx)(n.h2,{id:"specifying-flow-collection-keys",children:"Specifying Flow collection keys"}),"\n",(0,s.jsxs)(n.p,{children:["Every Flow collection must have a ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#keys",children:"key"}),".\nAs long as your SQL Server tables have a primary key specified, the connector will set the\ncorresponding collection's key accordingly."]}),"\n",(0,s.jsxs)(n.p,{children:["In cases where a SQL Server table you want to capture doesn't have a primary key,\nyou can manually add it to the collection definition during the ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-capture",children:"capture creation workflow"}),"."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["After you input the endpoint configuration and click ",(0,s.jsx)(n.strong,{children:"Next"}),",\nthe tables in your database have been mapped to Flow collections.\nClick each collection's ",(0,s.jsx)(n.strong,{children:"Specification"})," tab and identify a collection where ",(0,s.jsx)(n.code,{children:'"key": [ ],'})," is empty."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click inside the empty key value in the editor and input the name of column in the table to use as the key, formatted as a JSON pointer. For example ",(0,s.jsx)(n.code,{children:'"key": ["/foo"],'})]}),"\n",(0,s.jsxs)(n.p,{children:["Make sure the key field is required, not nullable, and of an ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#schema-restrictions",children:"allowed type"}),".\nMake any other necessary changes to the ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#specification",children:"collection specification"})," to accommodate this."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Repeat with other missing collection keys, if necessary."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Save and publish the capture as usual."}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>o});var s=r(96540);const t={},i=s.createContext(t);function c(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/be02d3e2.d0ed9e3a.js b/pr-preview/pr-1594/assets/js/be02d3e2.d0ed9e3a.js deleted file mode 100644 index d14de6f8fb..0000000000 --- a/pr-preview/pr-1594/assets/js/be02d3e2.d0ed9e3a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7132],{61467:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var o=n(74848),i=n(28453);const r={},s="HTTP Ingest (Webhook)",c={id:"reference/Connectors/capture-connectors/http-ingest",title:"HTTP Ingest (Webhook)",description:"The HTTP Ingest connector allows you to capture data from incoming HTTP requests.",source:"@site/docs/reference/Connectors/capture-connectors/http-ingest.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/http-ingest",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/http-ingest.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"HTTP File",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file"},next:{title:"Hubspot",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot"}},a={},d=[{value:"Usage",id:"usage",level:2},{value:"Send sample data to Flow",id:"send-sample-data-to-flow",level:3},{value:"Webhook URLs",id:"webhook-urls",level:3},{value:"Webhook IDs",id:"webhook-ids",level:3},{value:"Custom collection IDs",id:"custom-collection-ids",level:3},{value:"Authentication",id:"authentication",level:3},{value:"Webhook signature verification",id:"webhook-signature-verification",level:3},{value:"Endpoint Configuration",id:"endpoint-configuration",level:2},{value:"Resource configuration",id:"resource-configuration",level:2}];function h(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"http-ingest-webhook",children:"HTTP Ingest (Webhook)"}),"\n",(0,o.jsxs)(t.p,{children:["The HTTP Ingest connector allows you to capture data from ",(0,o.jsx)(t.em,{children:"incoming"})," HTTP requests.\nA common use case is to capture webhook deliveries, turning them into a Flow collection."]}),"\n",(0,o.jsxs)(t.p,{children:["If you need to capture a dataset hosted at at HTTP endpoint, see the ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file",children:"HTTP File"})," connector."]}),"\n",(0,o.jsxs)(t.p,{children:["The connector is available for use in the Flow web application. For local development or open-source workflows, ",(0,o.jsx)(t.a,{href:"https://ghcr.io/estuary/source-http-ingest:dev",children:(0,o.jsx)(t.code,{children:"ghcr.io/estuary/source-http-ingest:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,o.jsx)(t.h2,{id:"usage",children:"Usage"}),"\n",(0,o.jsx)(t.p,{children:"This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific\nsystem or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source."}),"\n",(0,o.jsx)(t.p,{children:"This is useful primarily if you want to test out Flow or see how your webhook data will come over."}),"\n",(0,o.jsxs)(t.p,{children:["To begin, use the web app to create a capture. Once published, the confirmation dialog displays\na unique URL for your public endpoint. By default, this will accept webhook requests at ",(0,o.jsx)(t.code,{children:"https://<your-public-endpoint>/webhook-data"}),", but you can customize the path, or even capture from multiple URL paths if you like."]}),"\n",(0,o.jsx)(t.p,{children:"You're now ready to send data to Flow."}),"\n",(0,o.jsx)(t.h3,{id:"send-sample-data-to-flow",children:"Send sample data to Flow"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Expand ",(0,o.jsx)(t.strong,{children:"POST"})," or ",(0,o.jsx)(t.strong,{children:"PUT"})," and click ",(0,o.jsx)(t.strong,{children:"Try it out"})," to send some example JSON documents using the UI. You can also copy the provided ",(0,o.jsx)(t.code,{children:"curl"})," commands to send data via the command line."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture.\nClick ",(0,o.jsx)(t.strong,{children:"Details"})," to view the data preview."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"webhook-urls",children:"Webhook URLs"}),"\n",(0,o.jsx)(t.p,{children:"To configure a webhook in another service, such as Github, Shopify, or Segment, you'll need to paste a webhook URL into the configuration of their service."}),"\n",(0,o.jsxs)(t.p,{children:["To determine the full URL, start with the base URL from the Flow web app (for example ",(0,o.jsx)(t.code,{children:"https://abc123-8080.us-central1.v1.estuary-data.dev"}),"), and then append the path."]}),"\n",(0,o.jsxs)(t.p,{children:["The path will be whatever is in the ",(0,o.jsx)(t.code,{children:"paths"})," endpoint configuration field (",(0,o.jsx)(t.code,{children:"/webhook-data"})," by default). For example, your full webhook URL would be ",(0,o.jsx)(t.code,{children:"https://<your-unique-hostname>/webhook-data"}),". You can add additional paths to ",(0,o.jsx)(t.code,{children:"paths"}),', and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you\'re editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to ',(0,o.jsx)(t.code,{children:"/my-webhook.json"}),", then the full URL for that binding would be ",(0,o.jsx)(t.code,{children:"https://<your-unique-hostname>/my-webhook.json"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["Any URL query parameters that are sent on the request will be captured and serialized under ",(0,o.jsx)(t.code,{children:"/_meta/query/*"})," the in documents. For example, a webhook request that's sent to ",(0,o.jsx)(t.code,{children:"/webhook-data?testKey=testValue"})," would result in a document like:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:'{\n "_meta": {\n "webhookId": "...",\n "query": {\n "testKey": "testValue"\n },\n ...\n }\n ...\n}\n'})}),"\n",(0,o.jsx)(t.h3,{id:"webhook-ids",children:"Webhook IDs"}),"\n",(0,o.jsxs)(t.p,{children:['Webhook delivery is typically "at least once". This means that webhooks from common services such as Github, Segment, Shopify, etc. may sometimes be sent multiple times.\nIn order to prevent problems due to duplicate processing of webhooks, these services typically provide either an HTTP header or a field within each document that serves\nas a unique ID for each webhook event. This can be used to deduplicate the events in your ',(0,o.jsx)(t.code,{children:"webhook-data"})," collection. The key of the discovered ",(0,o.jsx)(t.code,{children:"webhook-data"})," collection is ",(0,o.jsx)(t.code,{children:"/_meta/webhookId"}),".\nBy default, this value is generated automatically by the connector, and no-deduplication will be performed.\nYou can set the ",(0,o.jsx)(t.code,{children:"idFromHeader"})," option in the ",(0,o.jsx)(t.a,{href:"#resource-configuration",children:"resource configuration"})," to have the connector automatically assign the value of the given HTTP header to the ",(0,o.jsx)(t.code,{children:"/_meta/webhookId"})," property.\nDoing so means that a materialization of the ",(0,o.jsx)(t.code,{children:"webhook-data"})," collection will automatically deduplicate the webhook events."]}),"\n",(0,o.jsx)(t.p,{children:"Here's a table with some common webhook services and headers that they use:"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Service"}),(0,o.jsxs)(t.th,{children:["Value to use for ",(0,o.jsx)(t.code,{children:"idFromHeader"})]})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"Github"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"X-Github-Event"})})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"Shopify"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"X-Shopify-Webhook-Id"})})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"Zendesk"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"x-zendesk-webhook-id"})})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"Jira"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"X-Atlassian-Webhook-Identifier"})})]})]})]}),"\n",(0,o.jsx)(t.h3,{id:"custom-collection-ids",children:"Custom collection IDs"}),"\n",(0,o.jsxs)(t.p,{children:["Some webhooks don't pass a deduplication ID as part of the HTTP headers. That's fine, and you can still easily deduplicate the events.\nTo do so, you'll just need to customize the ",(0,o.jsx)(t.code,{children:"schema"})," and ",(0,o.jsx)(t.code,{children:"key"})," of your webhook-data collection, or bind the webhook to an existing collection that already has the correct ",(0,o.jsx)(t.code,{children:"schema"})," and ",(0,o.jsx)(t.code,{children:"key"}),".\nJust set the ",(0,o.jsx)(t.code,{children:"key"})," to the field(s) within the webhook payload that uniquely identify the event.\nFor example, to capture webhooks from Segment, you'll want to set the ",(0,o.jsx)(t.code,{children:"key"})," to ",(0,o.jsx)(t.code,{children:'["/messageId"]'}),", and ensure that the ",(0,o.jsx)(t.code,{children:"schema"})," requires that property to exist and be a ",(0,o.jsx)(t.code,{children:"string"}),"."]}),"\n",(0,o.jsx)(t.h3,{id:"authentication",children:"Authentication"}),"\n",(0,o.jsxs)(t.p,{children:["The connector can optionally require each request to present an authentication token as part of an ",(0,o.jsx)(t.code,{children:"Authorization: Bearer "}),' HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an ',(0,o.jsx)(t.code,{children:"Authorization"})," header with the value of your token. For example, if you use an auth token value of ",(0,o.jsx)(t.code,{children:"mySecretToken"}),", then the header on each request must be ",(0,o.jsx)(t.code,{children:"Authorization: Bearer mySecretToken"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection."})," We recommend using authentication whenever possible."]}),"\n",(0,o.jsx)(t.h3,{id:"webhook-signature-verification",children:"Webhook signature verification"}),"\n",(0,o.jsxs)(t.p,{children:["This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact ",(0,o.jsx)(t.a,{href:"mailto://support@estuary.dev",children:(0,o.jsx)(t.code,{children:"support@estuary.dev"})})," and let us know."]}),"\n",(0,o.jsx)(t.h2,{id:"endpoint-configuration",children:"Endpoint Configuration"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Property"}),(0,o.jsx)(t.th,{children:"Title"}),(0,o.jsx)(t.th,{children:"Description"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Required/Default"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"****"}),(0,o.jsx)(t.td,{children:"EndpointConfig"}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"object"}),(0,o.jsx)(t.td,{children:"Required"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/require_auth_token"})}),(0,o.jsx)(t.td,{children:"Authentication token"}),(0,o.jsx)(t.td,{children:"Optional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"null"})})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/paths"})}),(0,o.jsx)(t.td,{children:"URL Paths"}),(0,o.jsx)(t.td,{children:"List of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"null"})})]})]})]}),"\n",(0,o.jsx)(t.p,{children:"List of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment."}),"\n",(0,o.jsx)(t.h2,{id:"resource-configuration",children:"Resource configuration"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Property"}),(0,o.jsx)(t.th,{children:"Title"}),(0,o.jsx)(t.th,{children:"Description"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Required/Default"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"****"}),(0,o.jsx)(t.td,{children:"ResourceConfig"}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"object"}),(0,o.jsx)(t.td,{children:"Required"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/idFromHeader"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"Set the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/path"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"The URL path to use for adding documents to this binding. Defaults to the name of the collection."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/stream"})}),(0,o.jsx)(t.td,{}),(0,o.jsx)(t.td,{children:"The name of the binding, which is used as a merge key when doing Discovers."}),(0,o.jsx)(t.td,{children:"null, string"}),(0,o.jsx)(t.td,{})]})]})]})]})}function l(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>c});var o=n(96540);const i={},r=o.createContext(i);function s(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/bf636eff.50dbd921.js b/pr-preview/pr-1594/assets/js/bf636eff.50dbd921.js deleted file mode 100644 index 3c64d9ea1d..0000000000 --- a/pr-preview/pr-1594/assets/js/bf636eff.50dbd921.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2369],{67752:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var i=t(74848),o=t(28453);const a={sidebar_position:4},s="Materializations",r={id:"concepts/materialization",title:"Materializations",description:"A materialization is how Flow pushes data to an external destination.",source:"@site/docs/concepts/materialization.md",sourceDirName:"concepts",slug:"/concepts/materialization",permalink:"/pr-preview/pr-1594/concepts/materialization",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/materialization.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Collections",permalink:"/pr-preview/pr-1594/concepts/collections"},next:{title:"Connectors",permalink:"/pr-preview/pr-1594/concepts/connectors"}},c={},l=[{value:"Discovery",id:"discovery",level:2},{value:"Specification",id:"specification",level:2},{value:"How continuous materialization works",id:"how-continuous-materialization-works",level:2},{value:"Projected fields",id:"projected-fields",level:2},{value:"Partition selectors",id:"partition-selectors",level:2},{value:"Destination-specific performance",id:"destination-specific-performance",level:2},{value:"Delta updates",id:"delta-updates",level:2},{value:"Using <code>sourceCapture</code> to synchronize capture and materialization bindings",id:"using-sourcecapture-to-synchronize-capture-and-materialization-bindings",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"materializations",children:"Materializations"}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.strong,{children:"materialization"})," is how Flow pushes data to an external destination."]}),"\n",(0,i.jsxs)(n.p,{children:["Materializations are a type of Flow ",(0,i.jsx)(n.strong,{children:"task"}),".\nThey connect to an external destination system,\nor ",(0,i.jsx)(n.strong,{children:"endpoint"}),", and bind one or more Flow collections to resources at the endpoint, such as database tables."]}),"\n",(0,i.jsxs)(n.p,{children:["As documents added to the bound collections,\nthe materialization continuously pushes it to the destination resources, where it is reflected with very low latency.\nMaterializations can process ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#documents",children:"documents"})," up to 16 MB in size."]}),"\n",(0,i.jsxs)(n.p,{children:["Materializations are the conceptual inverse of ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures",children:"captures"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:t(933).A+"",width:"960",height:"540"})}),"\n",(0,i.jsxs)(n.p,{children:["You define and configure materializations in ",(0,i.jsx)(n.strong,{children:"Flow specifications"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/create-dataflow#create-a-materialization",children:"See the guide to create a materialization"})}),"\n",(0,i.jsx)(n.h2,{id:"discovery",children:"Discovery"}),"\n",(0,i.jsxs)(n.p,{children:["Materializations use real-time ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors",children:"connectors"})," to connect to many endpoint types."]}),"\n",(0,i.jsxs)(n.p,{children:["When you use a materialization connector in the Flow web app,\nflow helps you configure it through the ",(0,i.jsx)(n.strong,{children:"discovery"})," workflow."]}),"\n",(0,i.jsxs)(n.p,{children:["To begin discovery, you tell Flow the connector you'd like to use, basic information about the endpoint,\nand the collection(s) you'd like to materialize there.\nFlow maps the collection(s) to one or more ",(0,i.jsx)(n.strong,{children:"resources"})," \u2014 tables, data streams, or the equivalent \u2014\nthrough one or more ",(0,i.jsx)(n.strong,{children:"bindings"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"You may then modify the generated configuration as needed before publishing the materialization."}),"\n",(0,i.jsx)(n.h2,{id:"specification",children:"Specification"}),"\n",(0,i.jsx)(n.p,{children:"Materializations are defined in Flow specification files per the following format:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"# A set of materializations to include in the catalog.\n# Optional, type: object\nmaterializations:\n # The name of the materialization.\n acmeCo/example/database-views:\n # Endpoint defines how to connect to the destination of the materialization.\n # Required, type: object\n endpoint:\n # This endpoint uses a connector provided as a Docker image.\n connector:\n # Docker image that implements the materialization connector.\n image: ghcr.io/estuary/materialize-postgres:dev\n # File that provides the connector's required configuration.\n # Configuration may also be presented inline.\n config: path/to/connector-config.yaml\n\n # Bindings define how one or more collections map to materialized endpoint resources.\n # A single materialization may include many collections and endpoint resources,\n # each defined as a separate binding.\n # Required, type: object\n bindings:\n - # Source collection read by this binding.\n # Required, type: object or string\n source:\n # Name of the collection to be read.\n # Required.\n name: acmeCo/example/collection\n # Lower bound date-time for documents which should be processed. \n # Source collection documents published before this date-time are filtered.\n # `notBefore` is *only* a filter. Updating its value will not cause Flow\n # to re-process documents that have already been read.\n # Optional. Default is to process all documents.\n notBefore: 2023-01-23T01:00:00Z\n # Upper bound date-time for documents which should be processed.\n # Source collection documents published after this date-time are filtered.\n # Like `notBefore`, `notAfter` is *only* a filter. Updating its value will\n # not cause Flow to re-process documents that have already been read.\n # Optional. Default is to process all documents.\n notAfter: 2023-01-23T02:00:00Z\n\n # The resource is additional configuration required by the endpoint\n # connector to identify and materialize a specific endpoint resource.\n # The structure and meaning of this configuration is defined by\n # the specific connector.\n # Required, type: object\n resource:\n # The materialize-postgres connector expects a `table` key\n # which names a table to materialize into.\n table: example_table\n\n # Priority applied to documents processed by this binding.\n # When all bindings are of equal priority, documents are processed\n # in order of their associated publishing time.\n # \n # However, when one binding has a higher priority than others,\n # then *all* ready documents are processed through the binding\n # before *any* documents of other bindings are processed.\n # \n # Optional. Default: 0, integer >= 0\n priority: 0\n\n # A sourceCapture allows bindings to be managed automatically based on the\n # bindings of the given capture. As new bindings are added to the capture,\n # they will automatically be added to the materialization. This property\n # is optional.\n sourceCapture: acmeCo/example/a-capture\n"})}),"\n",(0,i.jsx)(n.h2,{id:"how-continuous-materialization-works",children:"How continuous materialization works"}),"\n",(0,i.jsxs)(n.p,{children:["Flow materializations are ",(0,i.jsx)(n.strong,{children:"continuous materialized views"}),".\nThey maintain a representation of the collection within the endpoint system\nthat is updated in near real-time. It's indexed on the\n",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#collection-keys",children:"collection key"}),".\nAs the materialization runs, it ensures that all collection documents\nand their accumulated ",(0,i.jsx)(n.a,{href:"../#reductions",children:"reductions"})," are reflected in this\nmanaged endpoint resource."]}),"\n",(0,i.jsx)(n.p,{children:"When you first publish a materialization,\nFlow back-fills the endpoint resource with the historical documents of the collection.\nOnce caught up, Flow applies new collection documents using incremental and low-latency updates."}),"\n",(0,i.jsx)(n.p,{children:"As collection documents arrive, Flow:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Reads"})," previously materialized documents from the endpoint for the relevant keys"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Reduces"})," new documents into these read documents"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Writes"})," updated documents back into the endpoint resource, indexed by their keys"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"For example, consider a collection and its materialization:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"\ncollections:\n acmeCo/colors:\n key: [/color]\n schema:\n type: object\n required: [color, total]\n reduce: {strategy: merge}\n properties:\n color: {enum: [red, blue, purple]}\n total:\n type: integer\n reduce: {strategy: sum}\n\nmaterializations:\n acmeCo/example/database-views:\n endpoint: ...\n bindings:\n - source: acmeCo/colors\n resource: { table: colors }\n"})}),"\n",(0,i.jsx)(n.p,{children:"Suppose documents are periodically added to the collection:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{"color": "red", "total": 1}\n{"color": "blue", "total": 2}\n{"color": "blue", "total": 3}\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Its materialization into a database table will have a single row for each unique color.\nAs documents arrive in the collection, the row ",(0,i.jsx)(n.code,{children:"total"})," is updated within the\nmaterialized table so that it reflects the overall count:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:t(4684).A+"",width:"769",height:"322"})}),"\n",(0,i.jsxs)(n.p,{children:["Flow does ",(0,i.jsx)(n.em,{children:"not"}),' keep separate internal copies of collection or reduction states,\nas some other systems do. The endpoint resource is the one and only place\nwhere state "lives" within a materialization. This makes materializations very\nefficient and scalable to operate. They are able to maintain ',(0,i.jsx)(n.em,{children:"very"})," large tables\nstored in highly scaled storage systems like OLAP data warehouses."]}),"\n",(0,i.jsx)(n.h2,{id:"projected-fields",children:"Projected fields"}),"\n",(0,i.jsxs)(n.p,{children:["Many endpoint systems are document-oriented and can directly work\nwith collections of JSON documents.\nOthers are table-oriented and require an up-front declaration\nof columns and types to be most useful, such as a SQL ",(0,i.jsx)(n.code,{children:"CREATE TABLE"})," definition."]}),"\n",(0,i.jsxs)(n.p,{children:["Flow uses collection ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections",children:"projections"})," to relate locations within\na hierarchical JSON document to equivalent named fields.\nA materialization can in turn select a subset of available projected fields\nwhere, for example, each field becomes a column in a SQL table created by\nthe connector."]}),"\n",(0,i.jsxs)(n.p,{children:["It would be tedious to explicitly list projections for every materialization,\nthough you certainly can if desired.\nInstead, Flow and the materialization connector ",(0,i.jsx)(n.em,{children:"negotiate"})," a recommended field selection\non your behalf, which can be fine-tuned.\nFor example, a SQL database connector will typically ",(0,i.jsx)(n.em,{children:"require"})," that fields\ncomprising the primary key be included, and will ",(0,i.jsx)(n.em,{children:"recommend"})," that scalar\nvalues be included, but will by default exclude document locations that\ndon't have native SQL representations, such as locations which can have\nmultiple JSON types or are arrays or maps."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"materializations:\n acmeCo/example/database-views:\n endpoint: ...\n bindings:\n - source: acmeCo/example/collection\n resource: { table: example_table }\n\n # Select (or exclude) projections of the collection for materialization as fields.\n # If not provided, the recommend fields of the endpoint connector are used.\n # Optional, type: object\n fields:\n # Whether to include fields that are recommended by the endpoint connector.\n # If false, then fields can still be added using `include`.\n # Required, type: boolean\n recommended: true\n\n # Fields to exclude. This is useful for deselecting a subset of recommended fields.\n # Default: [], type: array\n exclude: [myField, otherField]\n\n # Fields to include. This can supplement recommended fields, or can\n # designate explicit fields to use if recommended fields are disabled.\n #\n # Values of this map are used to customize connector behavior on a per-field basis.\n # They are passed directly to the connector and are not interpreted by Flow.\n # Consult your connector's documentation for details of what customizations are available.\n # This is an advanced feature and is not commonly used.\n #\n # default: {}, type: object\n include: {goodField: {}, greatField: {}}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"partition-selectors",children:"Partition selectors"}),"\n",(0,i.jsxs)(n.p,{children:["Partition selectors let you materialize only a subset of a collection that has\n",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections#logical-partitions",children:"logical partitions"}),".\nFor example, you might have a large collection that is logically partitioned\non each of your customers:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"collections:\n acmeCo/anvil/orders:\n key: [/id]\n schema: orders.schema.yaml\n projections:\n customer:\n location: /order/customer\n partition: true\n"})}),"\n",(0,i.jsx)(n.p,{children:"A large customer asks if you can provide an up-to-date accounting of their orders.\nThis can be accomplished with a partition selector:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'materializations:\n acmeCo/example/database-views:\n endpoint: ...\n bindings:\n # The source can be specified as an object, which allows setting a partition selector.\n - source:\n name: acmeCo/anvil/orders\n # Process partitions where "Coyote" is the customer.\n partitions:\n include:\n customer: [Coyote]\n resource: { table: coyote_orders }\n'})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections#partition-selectors",children:"Learn more about partition selectors"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"destination-specific-performance",children:"Destination-specific performance"}),"\n",(0,i.jsx)(n.p,{children:"Flow processes updates in transactions, as quickly as the destination endpoint can handle them.\nThis might be milliseconds in the case of a fast key/value store,\nor many minutes in the case of an OLAP warehouse."}),"\n",(0,i.jsx)(n.p,{children:"If the endpoint is also transactional, Flow integrates its internal transactions\nwith those of the endpoint for integrated end-to-end \u201cexactly once\u201d semantics."}),"\n",(0,i.jsx)(n.p,{children:"The materialization is sensitive to back pressure from the endpoint.\nAs a database gets busy, Flow adaptively batches and combines documents to consolidate updates:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"In a given transaction, Flow reduces all incoming documents on the collection key.\nMultiple documents combine and result in a single endpoint read and write during the transaction."}),"\n",(0,i.jsx)(n.li,{children:"As a target database becomes busier or slower, transactions become larger.\nFlow does more reduction work within each transaction, and each endpoint read or write\naccounts for an increasing volume of collection documents."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"This allows you to safely materialize a collection with a high rate of changes into a small database,\nso long as the cardinality of the materialization is of reasonable size."}),"\n",(0,i.jsx)(n.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,i.jsxs)(n.p,{children:["As described ",(0,i.jsx)(n.a,{href:"#how-continuous-materialization-works",children:"above"}),", Flow's standard materialization\nmechanism involves querying the target system for data state before reducing new documents\ndirectly into it."]}),"\n",(0,i.jsx)(n.p,{children:"For these standard updates to work, the endpoint must be a stateful system, like a relational database.\nHowever, other systems \u2014 like Webhooks and Pub/Sub \u2014 may also be endpoints.\nNone of these typically provide a state representation that Flow can query.\nThey are write-only in nature, so Flow cannot use their endpoint state\nto help it fully reduce collection documents on their keys.\nEven some stateful systems are incompatible with Flow's standard updates due to their unique\ndesign and architecture."}),"\n",(0,i.jsxs)(n.p,{children:["For all of these endpoints, Flow offers a ",(0,i.jsx)(n.strong,{children:"delta-updates"}),' mode.\nWhen using delta updates, Flow does not attempt to maintain\nfull reductions of each unique collection key.\nInstead, Flow locally reduces documents within each transaction\n(this is often called a "combine"), and then materializes one\n',(0,i.jsx)(n.em,{children:"delta"})," document per key to the endpoint."]}),"\n",(0,i.jsx)(n.p,{children:"In other words, when delta updates are used, Flow sends information about data changes by key,\nand further reduction is left up to the endpoint system.\nSome systems may reduce documents similar to Flow; others use a different\nmechanism; still others may not perform reductions at all."}),"\n",(0,i.jsxs)(n.p,{children:["A given endpoint may support standard updates, delta updates, or both.\nThis depends on the ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/",children:"materialization connector"}),". Expect that a connector will use\nstandard updates only unless otherwise noted in its documentation."]}),"\n",(0,i.jsxs)(n.h2,{id:"using-sourcecapture-to-synchronize-capture-and-materialization-bindings",children:["Using ",(0,i.jsx)(n.code,{children:"sourceCapture"})," to synchronize capture and materialization bindings"]}),"\n",(0,i.jsxs)(n.p,{children:["In some cases, you just want a destination system to always reflects the source\nsystem as closely as possible, even as the source system changes over time. The\n",(0,i.jsx)(n.code,{children:"sourceCapture"})," property of a materialization allows you to do exactly that.\nIf you set a ",(0,i.jsx)(n.code,{children:"sourceCapture"})," on your materialization, then the bindings of the\nmaterialization will be automatically kept in sync with the bindings of the\ncapture. As bindings are added to the capture, they will be automatically added\nto the materialization. This works regardless of whether the bindings were added\nto the capture manually or automatically. Bindings that are removed from the\ncapture are ",(0,i.jsx)(n.em,{children:"not"})," removed from the materialization."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},933:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/materialization-new-bbe45dcc13bded994190ac75f86dc01f.svg"},4684:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/materialization-13219c2248a49327c4c97340d0216bed.gif"},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>r});var i=t(96540);const o={},a=i.createContext(o);function s(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/bfc09eea.ce8f0d11.js b/pr-preview/pr-1594/assets/js/bfc09eea.ce8f0d11.js deleted file mode 100644 index 04694047c0..0000000000 --- a/pr-preview/pr-1594/assets/js/bfc09eea.ce8f0d11.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[18],{80024:(e,d,r)=>{r.r(d),r.d(d,{assets:()=>c,contentTitle:()=>i,default:()=>a,frontMatter:()=>t,metadata:()=>l,toc:()=>h});var s=r(74848),n=r(28453);const t={},i="Amazon RDS for PostgreSQL",l={id:"reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres",title:"Amazon RDS for PostgreSQL",description:"This connector materializes Flow collections into tables in a PostgreSQL database.",source:"@site/docs/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres.md",sourceDirName:"reference/Connectors/materialization-connectors/PostgreSQL",slug:"/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/"},next:{title:"Google Cloud SQL for PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres"}},c={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Connect Directly With Amazon RDS or Amazon Aurora",id:"connect-directly-with-amazon-rds-or-amazon-aurora",level:3},{value:"Connect With SSH Tunneling",id:"connect-with-ssh-tunneling",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"SSL Mode",id:"ssl-mode",level:4},{value:"Sample",id:"sample",level:3},{value:"Delta updates",id:"delta-updates",level:2},{value:"Reserved words",id:"reserved-words",level:2},{value:"Changelog",id:"changelog",level:2},{value:"V4: 2022-11-30",id:"v4-2022-11-30",level:4}];function o(e){const d={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.h1,{id:"amazon-rds-for-postgresql",children:"Amazon RDS for PostgreSQL"}),"\n",(0,s.jsx)(d.p,{children:"This connector materializes Flow collections into tables in a PostgreSQL database."}),"\n",(0,s.jsxs)(d.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,s.jsx)(d.a,{href:"https://ghcr.io/estuary/materialize-postgres:dev",children:(0,s.jsx)(d.code,{children:"ghcr.io/estuary/materialize-postgres:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(d.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(d.p,{children:"To use this connector, you'll need:"}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsx)(d.li,{children:"A Postgres database to which to materialize, and user credentials.\nThe connector will create new tables in the database per your specification. Tables created manually in advance are not supported."}),"\n",(0,s.jsx)(d.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,s.jsx)(d.h2,{id:"setup",children:"Setup"}),"\n",(0,s.jsx)(d.p,{children:"You must configure your database to allow connections from Estuary.\nThere are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,s.jsx)(d.h3,{id:"connect-directly-with-amazon-rds-or-amazon-aurora",children:"Connect Directly With Amazon RDS or Amazon Aurora"}),"\n",(0,s.jsxs)(d.ol,{children:["\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsx)(d.p,{children:"Edit the VPC security group associated with your database instance, or create a new VPC security group and associate it with the database instance."}),"\n",(0,s.jsxs)(d.ol,{children:["\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html",children:"Modify the instance"}),", choosing ",(0,s.jsx)(d.strong,{children:"Publicly accessible"})," in the ",(0,s.jsx)(d.strong,{children:"Connectivity"})," settings. See the instructions below to use SSH Tunneling instead of enabling public access."]}),"\n"]}),"\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:["Refer to the ",(0,s.jsx)(d.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html#Overview.RDSSecurityGroups.Create",children:"steps in the Amazon documentation"}),".\nCreate a new inbound rule and a new outbound rule that allow all traffic from the ",(0,s.jsx)(d.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(d.h3,{id:"connect-with-ssh-tunneling",children:"Connect With SSH Tunneling"}),"\n",(0,s.jsxs)(d.p,{children:["To allow SSH tunneling to a database instance hosted on AWS, you'll need to create a virtual computing environment, or ",(0,s.jsx)(d.em,{children:"instance"}),", in Amazon EC2."]}),"\n",(0,s.jsxs)(d.ol,{children:["\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:["Begin by finding your public SSH key on your local machine.\nIn the ",(0,s.jsx)(d.code,{children:".ssh"})," subdirectory of your user home directory,\nlook for the PEM file that contains the private SSH key. Check that it starts with ",(0,s.jsx)(d.code,{children:"-----BEGIN RSA PRIVATE KEY-----"}),",\nwhich indicates it is an RSA-based file."]}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsx)(d.li,{children:"If no such file exists, generate one using the command:"}),"\n"]}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-console",children:" ssh-keygen -m PEM -t rsa\n"})}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsxs)(d.li,{children:["If a PEM file exists, but starts with ",(0,s.jsx)(d.code,{children:"-----BEGIN OPENSSH PRIVATE KEY-----"}),", convert it with the command:"]}),"\n"]}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-console",children:' ssh-keygen -p -N "" -m pem -f /path/to/key\n'})}),"\n"]}),"\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.a,{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws",children:"Import your SSH key into AWS"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.a,{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html",children:"Launch a new instance in EC2"}),". During setup:"]}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsx)(d.li,{children:"Configure the security group to allow SSH connection from anywhere."}),"\n",(0,s.jsx)(d.li,{children:"When selecting a key pair, choose the key you just imported."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.a,{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html",children:"Connect to the instance"}),",\nsetting the user name to ",(0,s.jsx)(d.code,{children:"ec2-user"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:["Find and note the ",(0,s.jsx)(d.a,{href:"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-viewing",children:"instance's public DNS"}),". This will be formatted like: ",(0,s.jsx)(d.code,{children:"ec2-198-21-98-1.compute-1.amazonaws.com"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(d.admonition,{title:"Configuration Tip",type:"tip",children:[(0,s.jsxs)(d.p,{children:["To configure the connector, you must specify the database address in the format ",(0,s.jsx)(d.code,{children:"host:port"}),". (You can also supply ",(0,s.jsx)(d.code,{children:"host"})," only; the connector will use the port ",(0,s.jsx)(d.code,{children:"5432"})," by default, which is correct in many cases.)\nYou can find the host and port in the following locations in each platform's console:"]}),(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsx)(d.li,{children:"Amazon RDS: host as Endpoint; port as Port."}),"\n"]})]}),"\n",(0,s.jsx)(d.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsx)(d.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a Postgres materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database."}),"\n",(0,s.jsx)(d.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(d.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Property"}),(0,s.jsx)(d.th,{children:"Title"}),(0,s.jsx)(d.th,{children:"Description"}),(0,s.jsx)(d.th,{children:"Type"}),(0,s.jsx)(d.th,{children:"Required/Default"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/database"})}),(0,s.jsx)(d.td,{children:"Database"}),(0,s.jsx)(d.td,{children:"Name of the logical database to materialize to."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.strong,{children:(0,s.jsx)(d.code,{children:"/address"})})}),(0,s.jsx)(d.td,{children:"Address"}),(0,s.jsxs)(d.td,{children:["Host and port of the database. If only the host is specified, port will default to ",(0,s.jsx)(d.code,{children:"5432"}),"."]}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:"Required"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.strong,{children:(0,s.jsx)(d.code,{children:"/password"})})}),(0,s.jsx)(d.td,{children:"Password"}),(0,s.jsx)(d.td,{children:"Password for the specified database user."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:"Required"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/schema"})}),(0,s.jsx)(d.td,{children:"Database Schema"}),(0,s.jsxs)(d.td,{children:["Database ",(0,s.jsx)(d.a,{href:"https://www.postgresql.org/docs/current/ddl-schemas.html",children:"schema"})," to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables"]}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:'"public"'})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.strong,{children:(0,s.jsx)(d.code,{children:"/user"})})}),(0,s.jsx)(d.td,{children:"User"}),(0,s.jsx)(d.td,{children:"Database user to connect as."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:"Required"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/advanced"})}),(0,s.jsx)(d.td,{children:"Advanced Options"}),(0,s.jsx)(d.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,s.jsx)(d.td,{children:"object"}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/advanced/sslmode"})}),(0,s.jsx)(d.td,{children:"SSL Mode"}),(0,s.jsx)(d.td,{children:"Overrides SSL connection behavior by setting the 'sslmode' parameter."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{})]})]})]}),"\n",(0,s.jsx)(d.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Property"}),(0,s.jsx)(d.th,{children:"Title"}),(0,s.jsx)(d.th,{children:"Description"}),(0,s.jsx)(d.th,{children:"Type"}),(0,s.jsx)(d.th,{children:"Required/Default"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/additional_table_create_sql"})}),(0,s.jsx)(d.td,{children:"Additional Table Create SQL"}),(0,s.jsx)(d.td,{children:"Additional SQL statement(s) to be run in the same transaction that creates the table."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/delta_updates"})}),(0,s.jsx)(d.td,{children:"Delta Update"}),(0,s.jsx)(d.td,{children:"Should updates to this table be done via delta updates."}),(0,s.jsx)(d.td,{children:"boolean"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"false"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/schema"})}),(0,s.jsx)(d.td,{children:"Alternative Schema"}),(0,s.jsx)(d.td,{children:"Alternative schema for this table (optional). Overrides schema set in endpoint configuration."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.strong,{children:(0,s.jsx)(d.code,{children:"/table"})})}),(0,s.jsx)(d.td,{children:"Table"}),(0,s.jsx)(d.td,{children:"Table name to materialize to. It will be created by the connector, unless the connector has previously created it."}),(0,s.jsx)(d.td,{children:"string"}),(0,s.jsx)(d.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(d.h4,{id:"ssl-mode",children:"SSL Mode"}),"\n",(0,s.jsxs)(d.p,{children:["Certain managed PostgreSQL implementations may require you to explicitly set the ",(0,s.jsx)(d.a,{href:"https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION",children:"SSL Mode"})," to connect with Flow. One example is ",(0,s.jsx)(d.a,{href:"https://neon.tech/docs/connect/connect-securely",children:"Neon"}),", which requires the setting ",(0,s.jsx)(d.code,{children:"verify-full"}),". Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration."]}),"\n",(0,s.jsx)(d.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-postgres:dev\n config:\n database: flow\n address: localhost:5432\n password: flow\n user: flow\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,s.jsx)(d.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,s.jsxs)(d.p,{children:["This connector supports both standard (merge) and ",(0,s.jsx)(d.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]}),"\n",(0,s.jsx)(d.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,s.jsxs)(d.p,{children:['PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier.\nFlow considers all the reserved words that are marked as "reserved" in any of the columns in the official ',(0,s.jsx)(d.a,{href:"https://www.postgresql.org/docs/current/sql-keywords-appendix.html",children:"PostgreSQL documentation"}),"."]}),"\n",(0,s.jsx)(d.p,{children:"These reserve words are listed in the table below. Flow automatically quotes fields that are in this list."}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Reserved words"}),(0,s.jsx)(d.th,{}),(0,s.jsx)(d.th,{}),(0,s.jsx)(d.th,{}),(0,s.jsx)(d.th,{})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"abs"}),(0,s.jsx)(d.td,{children:"current_transform_group_for_type"}),(0,s.jsx)(d.td,{children:"indicator"}),(0,s.jsx)(d.td,{children:"order"}),(0,s.jsx)(d.td,{children:"sqlexception"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"absolute"}),(0,s.jsx)(d.td,{children:"current_user"}),(0,s.jsx)(d.td,{children:"initial"}),(0,s.jsx)(d.td,{children:"out"}),(0,s.jsx)(d.td,{children:"sqlstate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"acos"}),(0,s.jsx)(d.td,{children:"cursor"}),(0,s.jsx)(d.td,{children:"initially"}),(0,s.jsx)(d.td,{children:"outer"}),(0,s.jsx)(d.td,{children:"sqlwarning"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"action"}),(0,s.jsx)(d.td,{children:"cycle"}),(0,s.jsx)(d.td,{children:"inner"}),(0,s.jsx)(d.td,{children:"output"}),(0,s.jsx)(d.td,{children:"sqrt"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"add"}),(0,s.jsx)(d.td,{children:"datalink"}),(0,s.jsx)(d.td,{children:"inout"}),(0,s.jsx)(d.td,{children:"over"}),(0,s.jsx)(d.td,{children:"start"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"all"}),(0,s.jsx)(d.td,{children:"date"}),(0,s.jsx)(d.td,{children:"input"}),(0,s.jsx)(d.td,{children:"overlaps"}),(0,s.jsx)(d.td,{children:"static"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"allocate"}),(0,s.jsx)(d.td,{children:"day"}),(0,s.jsx)(d.td,{children:"insensitive"}),(0,s.jsx)(d.td,{children:"overlay"}),(0,s.jsx)(d.td,{children:"stddev_pop"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"alter"}),(0,s.jsx)(d.td,{children:"deallocate"}),(0,s.jsx)(d.td,{children:"insert"}),(0,s.jsx)(d.td,{children:"pad"}),(0,s.jsx)(d.td,{children:"stddev_samp"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"analyse"}),(0,s.jsx)(d.td,{children:"dec"}),(0,s.jsx)(d.td,{children:"int"}),(0,s.jsx)(d.td,{children:"parameter"}),(0,s.jsx)(d.td,{children:"submultiset"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"analyze"}),(0,s.jsx)(d.td,{children:"decfloat"}),(0,s.jsx)(d.td,{children:"integer"}),(0,s.jsx)(d.td,{children:"partial"}),(0,s.jsx)(d.td,{children:"subset"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"and"}),(0,s.jsx)(d.td,{children:"decimal"}),(0,s.jsx)(d.td,{children:"intersect"}),(0,s.jsx)(d.td,{children:"partition"}),(0,s.jsx)(d.td,{children:"substring"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"any"}),(0,s.jsx)(d.td,{children:"declare"}),(0,s.jsx)(d.td,{children:"intersection"}),(0,s.jsx)(d.td,{children:"pattern"}),(0,s.jsx)(d.td,{children:"substring_regex"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"are"}),(0,s.jsx)(d.td,{children:"default"}),(0,s.jsx)(d.td,{children:"interval"}),(0,s.jsx)(d.td,{children:"per"}),(0,s.jsx)(d.td,{children:"succeeds"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"array"}),(0,s.jsx)(d.td,{children:"deferrable"}),(0,s.jsx)(d.td,{children:"into"}),(0,s.jsx)(d.td,{children:"percent"}),(0,s.jsx)(d.td,{children:"sum"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"array_agg"}),(0,s.jsx)(d.td,{children:"deferred"}),(0,s.jsx)(d.td,{children:"is"}),(0,s.jsx)(d.td,{children:"percentile_cont"}),(0,s.jsx)(d.td,{children:"symmetric"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"array_max_cardinality"}),(0,s.jsx)(d.td,{children:"define"}),(0,s.jsx)(d.td,{children:"isnull"}),(0,s.jsx)(d.td,{children:"percentile_disc"}),(0,s.jsx)(d.td,{children:"system"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"as"}),(0,s.jsx)(d.td,{children:"delete"}),(0,s.jsx)(d.td,{children:"isolation"}),(0,s.jsx)(d.td,{children:"percent_rank"}),(0,s.jsx)(d.td,{children:"system_time"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"asc"}),(0,s.jsx)(d.td,{children:"dense_rank"}),(0,s.jsx)(d.td,{children:"join"}),(0,s.jsx)(d.td,{children:"period"}),(0,s.jsx)(d.td,{children:"system_user"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"asensitive"}),(0,s.jsx)(d.td,{children:"deref"}),(0,s.jsx)(d.td,{children:"json_array"}),(0,s.jsx)(d.td,{children:"permute"}),(0,s.jsx)(d.td,{children:"table"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"asin"}),(0,s.jsx)(d.td,{children:"desc"}),(0,s.jsx)(d.td,{children:"json_arrayagg"}),(0,s.jsx)(d.td,{children:"placing"}),(0,s.jsx)(d.td,{children:"tablesample"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"assertion"}),(0,s.jsx)(d.td,{children:"describe"}),(0,s.jsx)(d.td,{children:"json_exists"}),(0,s.jsx)(d.td,{children:"portion"}),(0,s.jsx)(d.td,{children:"tan"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"asymmetric"}),(0,s.jsx)(d.td,{children:"descriptor"}),(0,s.jsx)(d.td,{children:"json_object"}),(0,s.jsx)(d.td,{children:"position"}),(0,s.jsx)(d.td,{children:"tanh"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"at"}),(0,s.jsx)(d.td,{children:"deterministic"}),(0,s.jsx)(d.td,{children:"json_objectagg"}),(0,s.jsx)(d.td,{children:"position_regex"}),(0,s.jsx)(d.td,{children:"temporary"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"atan"}),(0,s.jsx)(d.td,{children:"diagnostics"}),(0,s.jsx)(d.td,{children:"json_query"}),(0,s.jsx)(d.td,{children:"power"}),(0,s.jsx)(d.td,{children:"then"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"atomic"}),(0,s.jsx)(d.td,{children:"disconnect"}),(0,s.jsx)(d.td,{children:"json_table"}),(0,s.jsx)(d.td,{children:"precedes"}),(0,s.jsx)(d.td,{children:"time"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"authorization"}),(0,s.jsx)(d.td,{children:"distinct"}),(0,s.jsx)(d.td,{children:"json_table_primitive"}),(0,s.jsx)(d.td,{children:"precision"}),(0,s.jsx)(d.td,{children:"timestamp"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"avg"}),(0,s.jsx)(d.td,{children:"dlnewcopy"}),(0,s.jsx)(d.td,{children:"json_value"}),(0,s.jsx)(d.td,{children:"prepare"}),(0,s.jsx)(d.td,{children:"timezone_hour"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"begin"}),(0,s.jsx)(d.td,{children:"dlpreviouscopy"}),(0,s.jsx)(d.td,{children:"key"}),(0,s.jsx)(d.td,{children:"preserve"}),(0,s.jsx)(d.td,{children:"timezone_minute"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"begin_frame"}),(0,s.jsx)(d.td,{children:"dlurlcomplete"}),(0,s.jsx)(d.td,{children:"lag"}),(0,s.jsx)(d.td,{children:"primary"}),(0,s.jsx)(d.td,{children:"to"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"begin_partition"}),(0,s.jsx)(d.td,{children:"dlurlcompleteonly"}),(0,s.jsx)(d.td,{children:"language"}),(0,s.jsx)(d.td,{children:"prior"}),(0,s.jsx)(d.td,{children:"trailing"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"between"}),(0,s.jsx)(d.td,{children:"dlurlcompletewrite"}),(0,s.jsx)(d.td,{children:"large"}),(0,s.jsx)(d.td,{children:"privileges"}),(0,s.jsx)(d.td,{children:"transaction"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"bigint"}),(0,s.jsx)(d.td,{children:"dlurlpath"}),(0,s.jsx)(d.td,{children:"last"}),(0,s.jsx)(d.td,{children:"procedure"}),(0,s.jsx)(d.td,{children:"translate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"binary"}),(0,s.jsx)(d.td,{children:"dlurlpathonly"}),(0,s.jsx)(d.td,{children:"last_value"}),(0,s.jsx)(d.td,{children:"ptf"}),(0,s.jsx)(d.td,{children:"translate_regex"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"bit"}),(0,s.jsx)(d.td,{children:"dlurlpathwrite"}),(0,s.jsx)(d.td,{children:"lateral"}),(0,s.jsx)(d.td,{children:"public"}),(0,s.jsx)(d.td,{children:"translation"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"bit_length"}),(0,s.jsx)(d.td,{children:"dlurlscheme"}),(0,s.jsx)(d.td,{children:"lead"}),(0,s.jsx)(d.td,{children:"range"}),(0,s.jsx)(d.td,{children:"treat"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"blob"}),(0,s.jsx)(d.td,{children:"dlurlserver"}),(0,s.jsx)(d.td,{children:"leading"}),(0,s.jsx)(d.td,{children:"rank"}),(0,s.jsx)(d.td,{children:"trigger"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"boolean"}),(0,s.jsx)(d.td,{children:"dlvalue"}),(0,s.jsx)(d.td,{children:"left"}),(0,s.jsx)(d.td,{children:"read"}),(0,s.jsx)(d.td,{children:"trim"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"both"}),(0,s.jsx)(d.td,{children:"do"}),(0,s.jsx)(d.td,{children:"level"}),(0,s.jsx)(d.td,{children:"reads"}),(0,s.jsx)(d.td,{children:"trim_array"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"by"}),(0,s.jsx)(d.td,{children:"domain"}),(0,s.jsx)(d.td,{children:"like"}),(0,s.jsx)(d.td,{children:"real"}),(0,s.jsx)(d.td,{children:"true"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"call"}),(0,s.jsx)(d.td,{children:"double"}),(0,s.jsx)(d.td,{children:"like_regex"}),(0,s.jsx)(d.td,{children:"recursive"}),(0,s.jsx)(d.td,{children:"truncate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"called"}),(0,s.jsx)(d.td,{children:"drop"}),(0,s.jsx)(d.td,{children:"limit"}),(0,s.jsx)(d.td,{children:"ref"}),(0,s.jsx)(d.td,{children:"uescape"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cardinality"}),(0,s.jsx)(d.td,{children:"dynamic"}),(0,s.jsx)(d.td,{children:"listagg"}),(0,s.jsx)(d.td,{children:"references"}),(0,s.jsx)(d.td,{children:"union"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cascade"}),(0,s.jsx)(d.td,{children:"each"}),(0,s.jsx)(d.td,{children:"ln"}),(0,s.jsx)(d.td,{children:"referencing"}),(0,s.jsx)(d.td,{children:"unique"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cascaded"}),(0,s.jsx)(d.td,{children:"element"}),(0,s.jsx)(d.td,{children:"local"}),(0,s.jsx)(d.td,{children:"regr_avgx"}),(0,s.jsx)(d.td,{children:"unknown"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"case"}),(0,s.jsx)(d.td,{children:"else"}),(0,s.jsx)(d.td,{children:"localtime"}),(0,s.jsx)(d.td,{children:"regr_avgy"}),(0,s.jsx)(d.td,{children:"unmatched"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cast"}),(0,s.jsx)(d.td,{children:"empty"}),(0,s.jsx)(d.td,{children:"localtimestamp"}),(0,s.jsx)(d.td,{children:"regr_count"}),(0,s.jsx)(d.td,{children:"unnest"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"catalog"}),(0,s.jsx)(d.td,{children:"end"}),(0,s.jsx)(d.td,{children:"log"}),(0,s.jsx)(d.td,{children:"regr_intercept"}),(0,s.jsx)(d.td,{children:"update"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"ceil"}),(0,s.jsx)(d.td,{children:"end-exec"}),(0,s.jsx)(d.td,{children:"log10"}),(0,s.jsx)(d.td,{children:"regr_r2"}),(0,s.jsx)(d.td,{children:"upper"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"ceiling"}),(0,s.jsx)(d.td,{children:"end_frame"}),(0,s.jsx)(d.td,{children:"lower"}),(0,s.jsx)(d.td,{children:"regr_slope"}),(0,s.jsx)(d.td,{children:"usage"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"char"}),(0,s.jsx)(d.td,{children:"end_partition"}),(0,s.jsx)(d.td,{children:"match"}),(0,s.jsx)(d.td,{children:"regr_sxx"}),(0,s.jsx)(d.td,{children:"user"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"character"}),(0,s.jsx)(d.td,{children:"equals"}),(0,s.jsx)(d.td,{children:"matches"}),(0,s.jsx)(d.td,{children:"regr_sxy"}),(0,s.jsx)(d.td,{children:"using"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"character_length"}),(0,s.jsx)(d.td,{children:"escape"}),(0,s.jsx)(d.td,{children:"match_number"}),(0,s.jsx)(d.td,{children:"regr_syy"}),(0,s.jsx)(d.td,{children:"value"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"char_length"}),(0,s.jsx)(d.td,{children:"every"}),(0,s.jsx)(d.td,{children:"match_recognize"}),(0,s.jsx)(d.td,{children:"relative"}),(0,s.jsx)(d.td,{children:"values"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"check"}),(0,s.jsx)(d.td,{children:"except"}),(0,s.jsx)(d.td,{children:"max"}),(0,s.jsx)(d.td,{children:"release"}),(0,s.jsx)(d.td,{children:"value_of"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"classifier"}),(0,s.jsx)(d.td,{children:"exception"}),(0,s.jsx)(d.td,{children:"measures"}),(0,s.jsx)(d.td,{children:"restrict"}),(0,s.jsx)(d.td,{children:"varbinary"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"clob"}),(0,s.jsx)(d.td,{children:"exec"}),(0,s.jsx)(d.td,{children:"member"}),(0,s.jsx)(d.td,{children:"result"}),(0,s.jsx)(d.td,{children:"varchar"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"close"}),(0,s.jsx)(d.td,{children:"execute"}),(0,s.jsx)(d.td,{children:"merge"}),(0,s.jsx)(d.td,{children:"return"}),(0,s.jsx)(d.td,{children:"variadic"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"coalesce"}),(0,s.jsx)(d.td,{children:"exists"}),(0,s.jsx)(d.td,{children:"method"}),(0,s.jsx)(d.td,{children:"returning"}),(0,s.jsx)(d.td,{children:"varying"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"collate"}),(0,s.jsx)(d.td,{children:"exp"}),(0,s.jsx)(d.td,{children:"min"}),(0,s.jsx)(d.td,{children:"returns"}),(0,s.jsx)(d.td,{children:"var_pop"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"collation"}),(0,s.jsx)(d.td,{children:"external"}),(0,s.jsx)(d.td,{children:"minute"}),(0,s.jsx)(d.td,{children:"revoke"}),(0,s.jsx)(d.td,{children:"var_samp"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"collect"}),(0,s.jsx)(d.td,{children:"extract"}),(0,s.jsx)(d.td,{children:"mod"}),(0,s.jsx)(d.td,{children:"right"}),(0,s.jsx)(d.td,{children:"verbose"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"column"}),(0,s.jsx)(d.td,{children:"false"}),(0,s.jsx)(d.td,{children:"modifies"}),(0,s.jsx)(d.td,{children:"rollback"}),(0,s.jsx)(d.td,{children:"versioning"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"commit"}),(0,s.jsx)(d.td,{children:"fetch"}),(0,s.jsx)(d.td,{children:"module"}),(0,s.jsx)(d.td,{children:"rollup"}),(0,s.jsx)(d.td,{children:"view"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"concurrently"}),(0,s.jsx)(d.td,{children:"filter"}),(0,s.jsx)(d.td,{children:"month"}),(0,s.jsx)(d.td,{children:"row"}),(0,s.jsx)(d.td,{children:"when"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"condition"}),(0,s.jsx)(d.td,{children:"first"}),(0,s.jsx)(d.td,{children:"multiset"}),(0,s.jsx)(d.td,{children:"rows"}),(0,s.jsx)(d.td,{children:"whenever"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"connect"}),(0,s.jsx)(d.td,{children:"first_value"}),(0,s.jsx)(d.td,{children:"names"}),(0,s.jsx)(d.td,{children:"row_number"}),(0,s.jsx)(d.td,{children:"where"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"connection"}),(0,s.jsx)(d.td,{children:"float"}),(0,s.jsx)(d.td,{children:"national"}),(0,s.jsx)(d.td,{children:"running"}),(0,s.jsx)(d.td,{children:"width_bucket"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"constraint"}),(0,s.jsx)(d.td,{children:"floor"}),(0,s.jsx)(d.td,{children:"natural"}),(0,s.jsx)(d.td,{children:"savepoint"}),(0,s.jsx)(d.td,{children:"window"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"constraints"}),(0,s.jsx)(d.td,{children:"for"}),(0,s.jsx)(d.td,{children:"nchar"}),(0,s.jsx)(d.td,{children:"schema"}),(0,s.jsx)(d.td,{children:"with"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"contains"}),(0,s.jsx)(d.td,{children:"foreign"}),(0,s.jsx)(d.td,{children:"nclob"}),(0,s.jsx)(d.td,{children:"scope"}),(0,s.jsx)(d.td,{children:"within"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"continue"}),(0,s.jsx)(d.td,{children:"found"}),(0,s.jsx)(d.td,{children:"new"}),(0,s.jsx)(d.td,{children:"scroll"}),(0,s.jsx)(d.td,{children:"without"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"convert"}),(0,s.jsx)(d.td,{children:"frame_row"}),(0,s.jsx)(d.td,{children:"next"}),(0,s.jsx)(d.td,{children:"search"}),(0,s.jsx)(d.td,{children:"work"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"copy"}),(0,s.jsx)(d.td,{children:"free"}),(0,s.jsx)(d.td,{children:"no"}),(0,s.jsx)(d.td,{children:"second"}),(0,s.jsx)(d.td,{children:"write"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"corr"}),(0,s.jsx)(d.td,{children:"freeze"}),(0,s.jsx)(d.td,{children:"none"}),(0,s.jsx)(d.td,{children:"section"}),(0,s.jsx)(d.td,{children:"xml"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"corresponding"}),(0,s.jsx)(d.td,{children:"from"}),(0,s.jsx)(d.td,{children:"normalize"}),(0,s.jsx)(d.td,{children:"seek"}),(0,s.jsx)(d.td,{children:"xmlagg"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cos"}),(0,s.jsx)(d.td,{children:"full"}),(0,s.jsx)(d.td,{children:"not"}),(0,s.jsx)(d.td,{children:"select"}),(0,s.jsx)(d.td,{children:"xmlattributes"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cosh"}),(0,s.jsx)(d.td,{children:"function"}),(0,s.jsx)(d.td,{children:"notnull"}),(0,s.jsx)(d.td,{children:"sensitive"}),(0,s.jsx)(d.td,{children:"xmlbinary"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"count"}),(0,s.jsx)(d.td,{children:"fusion"}),(0,s.jsx)(d.td,{children:"nth_value"}),(0,s.jsx)(d.td,{children:"session"}),(0,s.jsx)(d.td,{children:"xmlcast"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"covar_pop"}),(0,s.jsx)(d.td,{children:"get"}),(0,s.jsx)(d.td,{children:"ntile"}),(0,s.jsx)(d.td,{children:"session_user"}),(0,s.jsx)(d.td,{children:"xmlcomment"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"covar_samp"}),(0,s.jsx)(d.td,{children:"global"}),(0,s.jsx)(d.td,{children:"null"}),(0,s.jsx)(d.td,{children:"set"}),(0,s.jsx)(d.td,{children:"xmlconcat"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"create"}),(0,s.jsx)(d.td,{children:"go"}),(0,s.jsx)(d.td,{children:"nullif"}),(0,s.jsx)(d.td,{children:"show"}),(0,s.jsx)(d.td,{children:"xmldocument"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cross"}),(0,s.jsx)(d.td,{children:"goto"}),(0,s.jsx)(d.td,{children:"numeric"}),(0,s.jsx)(d.td,{children:"similar"}),(0,s.jsx)(d.td,{children:"xmlelement"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cube"}),(0,s.jsx)(d.td,{children:"grant"}),(0,s.jsx)(d.td,{children:"occurrences_regex"}),(0,s.jsx)(d.td,{children:"sin"}),(0,s.jsx)(d.td,{children:"xmlexists"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"cume_dist"}),(0,s.jsx)(d.td,{children:"group"}),(0,s.jsx)(d.td,{children:"octet_length"}),(0,s.jsx)(d.td,{children:"sinh"}),(0,s.jsx)(d.td,{children:"xmlforest"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current"}),(0,s.jsx)(d.td,{children:"grouping"}),(0,s.jsx)(d.td,{children:"of"}),(0,s.jsx)(d.td,{children:"size"}),(0,s.jsx)(d.td,{children:"xmliterate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_catalog"}),(0,s.jsx)(d.td,{children:"groups"}),(0,s.jsx)(d.td,{children:"offset"}),(0,s.jsx)(d.td,{children:"skip"}),(0,s.jsx)(d.td,{children:"xmlnamespaces"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_date"}),(0,s.jsx)(d.td,{children:"having"}),(0,s.jsx)(d.td,{children:"old"}),(0,s.jsx)(d.td,{children:"smallint"}),(0,s.jsx)(d.td,{children:"xmlparse"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_default_transform_group"}),(0,s.jsx)(d.td,{children:"hold"}),(0,s.jsx)(d.td,{children:"omit"}),(0,s.jsx)(d.td,{children:"some"}),(0,s.jsx)(d.td,{children:"xmlpi"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_path"}),(0,s.jsx)(d.td,{children:"hour"}),(0,s.jsx)(d.td,{children:"on"}),(0,s.jsx)(d.td,{children:"space"}),(0,s.jsx)(d.td,{children:"xmlquery"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_role"}),(0,s.jsx)(d.td,{children:"identity"}),(0,s.jsx)(d.td,{children:"one"}),(0,s.jsx)(d.td,{children:"specific"}),(0,s.jsx)(d.td,{children:"xmlserialize"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_row"}),(0,s.jsx)(d.td,{children:"ilike"}),(0,s.jsx)(d.td,{children:"only"}),(0,s.jsx)(d.td,{children:"specifictype"}),(0,s.jsx)(d.td,{children:"xmltable"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_schema"}),(0,s.jsx)(d.td,{children:"immediate"}),(0,s.jsx)(d.td,{children:"open"}),(0,s.jsx)(d.td,{children:"sql"}),(0,s.jsx)(d.td,{children:"xmltext"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_time"}),(0,s.jsx)(d.td,{children:"import"}),(0,s.jsx)(d.td,{children:"option"}),(0,s.jsx)(d.td,{children:"sqlcode"}),(0,s.jsx)(d.td,{children:"xmlvalidate"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"current_timestamp"}),(0,s.jsx)(d.td,{children:"in"}),(0,s.jsx)(d.td,{children:"or"}),(0,s.jsx)(d.td,{children:"sqlerror"}),(0,s.jsx)(d.td,{children:"year"})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"changelog",children:"Changelog"}),"\n",(0,s.jsx)(d.p,{children:"The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed."}),"\n",(0,s.jsx)(d.p,{children:(0,s.jsx)(d.strong,{children:"Proceed with caution when editing materializations created with previous versions of this connector;\nediting always upgrades your materialization to the latest connector version."})}),"\n",(0,s.jsx)(d.h4,{id:"v4-2022-11-30",children:"V4: 2022-11-30"}),"\n",(0,s.jsx)(d.p,{children:"This version includes breaking changes to materialized table columns.\nThese provide more consistent column names and types, but tables created from previous versions of the connector may\nnot be compatible with this version."}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsx)(d.p,{children:"Capitalization is now preserved when fields in Flow are converted to Postgres column names.\nPreviously, fields containing uppercase letters were converted to lowercase."}),"\n"]}),"\n",(0,s.jsxs)(d.li,{children:["\n",(0,s.jsxs)(d.p,{children:["Field names and values of types ",(0,s.jsx)(d.code,{children:"date"}),", ",(0,s.jsx)(d.code,{children:"duration"}),", ",(0,s.jsx)(d.code,{children:"ipv4"}),", ",(0,s.jsx)(d.code,{children:"ipv6"}),", ",(0,s.jsx)(d.code,{children:"macaddr"}),", ",(0,s.jsx)(d.code,{children:"macaddr8"}),", and ",(0,s.jsx)(d.code,{children:"time"})," are now converted into\ntheir corresponding Postgres types.\nPreviously, only ",(0,s.jsx)(d.code,{children:"date-time"})," was converted, and all others were materialized as strings."]}),"\n"]}),"\n"]})]})}function a(e={}){const{wrapper:d}={...(0,n.R)(),...e.components};return d?(0,s.jsx)(d,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},28453:(e,d,r)=>{r.d(d,{R:()=>i,x:()=>l});var s=r(96540);const n={},t=s.createContext(n);function i(e){const d=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function l(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(t.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/bfec4f44.274315dd.js b/pr-preview/pr-1594/assets/js/bfec4f44.274315dd.js deleted file mode 100644 index 91fde48cdf..0000000000 --- a/pr-preview/pr-1594/assets/js/bfec4f44.274315dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4509],{58321:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var t=n(74848),a=n(28453);const r={},o="Task shards",i={id:"concepts/advanced/shards",title:"Task shards",description:"Catalog tasks \u2014 captures, derivations, and materializations \u2014",source:"@site/docs/concepts/advanced/shards.md",sourceDirName:"concepts/advanced",slug:"/concepts/advanced/shards",permalink:"/pr-preview/pr-1594/concepts/advanced/shards",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/advanced/shards.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Projections",permalink:"/pr-preview/pr-1594/concepts/advanced/projections"},next:{title:"Connectors",permalink:"/pr-preview/pr-1594/reference/Connectors/"}},c={},d=[{value:"Shard splits",id:"shard-splits",level:2},{value:"Transactions",id:"transactions",level:2},{value:"Recovery logs",id:"recovery-logs",level:2}];function l(e){const s={a:"a",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"task-shards",children:"Task shards"}),"\n",(0,t.jsxs)(s.p,{children:["Catalog ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/#tasks",children:"tasks"})," \u2014 captures, derivations, and materializations \u2014\nare executed by one or more task ",(0,t.jsx)(s.strong,{children:"shards"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"Shards are a fault-tolerant and stateful unit of execution for a catalog task,\nwhich the Flow runtime assigns and runs on a scalable pool of compute resources.\nA single task can have many shards,\nwhich allow the task to scale across many machines to\nachieve more throughput and parallelism."}),"\n",(0,t.jsxs)(s.p,{children:["Shards are part of the Gazette project.\n",(0,t.jsx)(s.a,{href:"https://gazette.readthedocs.io/en/latest/consumers-concepts.html#shards",children:"See Gazette's Shard concepts page for details"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"shard-splits",children:"Shard splits"}),"\n",(0,t.jsx)(s.p,{children:"When a task is first created, it is initialized with a single shard.\nLater and as required, shards may be split into two shards.\nThis is done by the service operator on your behalf, depending on the size of your task.\nShard splitting doesn't require downtime; your task will continue to run as normal\non the old shard until the split occurs and then shift seamlessly to the new, split shards."}),"\n",(0,t.jsx)(s.p,{children:"This process can be repeated as needed until your required throughput is achieved.\nIf you have questions about how shards are split for your tasks, contact your Estuary account representative."}),"\n",(0,t.jsx)(s.h2,{id:"transactions",children:"Transactions"}),"\n",(0,t.jsxs)(s.p,{children:["Shards process messages in dynamic ",(0,t.jsx)(s.strong,{children:"transactions"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"Whenever a message is ready to be processed by the task (when new documents appear at the source endpoint or collection),\na new transaction is initiated.\nThe transaction will continue so long as further messages are available for processing.\nWhen no more messages are immediately available, the transaction closes.\nA new transaction is started whenever the next message is available."}),"\n",(0,t.jsxs)(s.p,{children:["In general, shorter transaction durations decrease latency, while longer transaction durations\nincrease efficiency.\nFlow automatically balances these two extremes to optimize each task,\nbut it may be useful in some cases to control transaction duration.\nFor example, materializations to large analytical warehouses may benefit from longer transactions,\nwhich can reduce cost by performing more data reduction before landing data in the warehouse.\nSome endpoint systems, like ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery#performance-considerations",children:"BigQuery"}),", limit the number of table operations you can perform.\nLonger transaction durations ensure that you don't exceed these limits."]}),"\n",(0,t.jsxs)(s.p,{children:["You can set the minimum and maximum transaction duration in a task's ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/reference/Configuring-task-shards",children:"shards configuration"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"recovery-logs",children:"Recovery logs"}),"\n",(0,t.jsx)(s.p,{children:"All task shards have associated state, which is managed in the shard's store."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Capture tasks must track incremental checkpoints of their endpoint connectors."}),"\n",(0,t.jsx)(s.li,{children:"Derivation tasks manage a potentially very large index of registers,\nas well as read checkpoints of sourced collection journals."}),"\n",(0,t.jsx)(s.li,{children:"Materialization tasks track incremental checkpoints of their endpoint connectors,\nas well as read checkpoints of sourced collection journals."}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Shard stores use\n",(0,t.jsx)(s.a,{href:"https://gazette.readthedocs.io/en/latest/consumers-concepts.html#recovery-logs",children:"recovery logs"}),"\nto replicate updates and implement transaction semantics."]}),"\n",(0,t.jsxs)(s.p,{children:["Recovery logs are regular ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/advanced/journals",children:"journals"}),",\nbut hold binary data and are not intended for direct use.\nHowever, they can hold your user data.\nRecovery logs of ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivations"})," hold your derivation register values."]}),"\n",(0,t.jsxs)(s.p,{children:["Recovery logs are stored in your cloud storage bucket,\nand must have a configured ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/storage-mappings#recovery-logs",children:"storage mapping"}),"."]})]})}function h(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>i});var t=n(96540);const a={},r=t.createContext(a);function o(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/c042bbf4.a74c0bcc.js b/pr-preview/pr-1594/assets/js/c042bbf4.a74c0bcc.js deleted file mode 100644 index 98b3c90d71..0000000000 --- a/pr-preview/pr-1594/assets/js/c042bbf4.a74c0bcc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2750],{23210:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var t=s(74848),o=s(28453);const r={sidebar_position:8},i="Configure connections with SSH tunneling",c={id:"guides/connect-network",title:"Configure connections with SSH tunneling",description:"Flow connects to certain types of endpoints \u2014 generally databases \u2014 using their IP address and port.",source:"@site/docs/guides/connect-network.md",sourceDirName:"guides",slug:"/guides/connect-network",permalink:"/pr-preview/pr-1594/guides/connect-network",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/connect-network.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8},sidebar:"tutorialSidebar",previous:{title:"Troubleshoot a task with flowctl",permalink:"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task"},next:{title:"Customize materialized fields",permalink:"/pr-preview/pr-1594/guides/customize-materialization-fields"}},a={},l=[{value:"General setup",id:"general-setup",level:2},{value:"Setup for AWS",id:"setup-for-aws",level:2},{value:"Setup for Google Cloud",id:"setup-for-google-cloud",level:2},{value:"Setup for Azure",id:"setup-for-azure",level:2},{value:"Configuration",id:"configuration",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"configure-connections-with-ssh-tunneling",children:"Configure connections with SSH tunneling"}),"\n",(0,t.jsxs)(n.p,{children:["Flow connects to certain types of endpoints \u2014 generally databases \u2014 using their IP address and port.\nFor added security, you can configure ",(0,t.jsx)(n.a,{href:"https://www.ssh.com/academy/ssh/tunneling/example#local-forwarding",children:"SSH tunneling"}),", also known as port forwarding.\nYou configure this in the ",(0,t.jsx)(n.code,{children:"networkTunnel"})," section of applicable capture or materialization definitions, but\nbefore you can do so, you need a properly configured SSH server on your internal network or cloud hosting platform."]}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["If permitted by your organization, a quicker way to connect to a secure database is to ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"allowlist the Estuary IP addresses"})]}),(0,t.jsxs)(n.p,{children:["For help completing this task on different cloud hosting platforms,\nsee the documentation for the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/",children:"connector"})," you're using."]})]}),"\n",(0,t.jsx)(n.p,{children:"This guide includes setup steps for popular cloud platforms,\nas well as generalized setup that provides a basic roadmap for on-premise servers or other cloud platforms."}),"\n",(0,t.jsxs)(n.p,{children:["After completing the appropriate setup requirements, proceed to the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section\nto add your SSH server to your capture or materialization definition."]}),"\n",(0,t.jsx)(n.h2,{id:"general-setup",children:"General setup"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Activate an ",(0,t.jsx)(n.a,{href:"https://www.ssh.com/academy/ssh/server#availability-of-ssh-servers",children:"SSH implementation on a server"}),", if you don't have one already.\nConsult the documentation for your server's operating system and/or cloud service provider, as the steps will vary.\nConfigure the server to your organization's standards, or reference the ",(0,t.jsx)(n.a,{href:"https://www.ssh.com/academy/ssh/sshd_config",children:"SSH documentation"})," for\nbasic configuration options."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Referencing the config files and shell output, collect the following information:"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The SSH ",(0,t.jsx)(n.strong,{children:"user"}),", which will be used to log into the SSH server, for example, ",(0,t.jsx)(n.code,{children:"sshuser"}),". You may choose to create a new\nuser for this workflow."]}),"\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.strong,{children:"SSH endpoint"})," for the SSH server, formatted as ",(0,t.jsx)(n.code,{children:"ssh://user@hostname[:port]"}),". This may look like the any of following:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"ssh://sshuser@ec2-198-21-98-1.compute-1.amazonaws.com"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"ssh://sshuser@198.21.98.1"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"ssh://sshuser@198.21.98.1:22"}),"\n",(0,t.jsx)(n.admonition,{title:"Hint",type:"info",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.a,{href:"https://www.ssh.com/academy/ssh/port",children:"SSH default port is 22"}),".\nDepending on where your server is hosted, you may not be required to specify a port,\nbut we recommend specifying ",(0,t.jsx)(n.code,{children:":22"})," in all cases to ensure a connection can be made."]})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsxs)(n.li,{children:["In the ",(0,t.jsx)(n.code,{children:".ssh"})," subdirectory of your user home directory,\nlook for the PEM file that contains the private SSH key. Check that it starts with ",(0,t.jsx)(n.code,{children:"-----BEGIN RSA PRIVATE KEY-----"}),",\nwhich indicates it is an RSA-based file.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"If no such file exists, generate one using the command:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:" ssh-keygen -m PEM -t rsa\n"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["If a PEM file exists, but starts with ",(0,t.jsx)(n.code,{children:"-----BEGIN OPENSSH PRIVATE KEY-----"}),", convert it with the command:"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:' ssh-keygen -p -N "" -m pem -f /path/to/key\n'})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Taken together, these configuration details would allow you to log into the SSH server from your local machine.\nThey'll allow the connector to do the same."}),"\n",(0,t.jsxs)(n.ol,{start:"5",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Configure your internal network to allow the SSH server to access your capture or materialization endpoint."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["To grant external access to the SSH server, it's essential to configure your network settings accordingly. The approach you take will be dictated by your organization's IT policies. One recommended step is to ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"allowlist the Estuary IP addresses"}),". This ensures that connections from this specific IP are permitted through your network's firewall or security measures."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup-for-aws",children:"Setup for AWS"}),"\n",(0,t.jsxs)(n.p,{children:["To allow SSH tunneling to a database instance hosted on AWS, you'll need to create a virtual computing environment, or ",(0,t.jsx)(n.em,{children:"instance"}),", in Amazon EC2."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Begin by finding your public SSH key on your local machine.\nIn the ",(0,t.jsx)(n.code,{children:".ssh"})," subdirectory of your user home directory,\nlook for the PEM file that contains the private SSH key. Check that it starts with ",(0,t.jsx)(n.code,{children:"-----BEGIN RSA PRIVATE KEY-----"}),",\nwhich indicates it is an RSA-based file."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"If no such file exists, generate one using the command:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:" ssh-keygen -m PEM -t rsa\n"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["If a PEM file exists, but starts with ",(0,t.jsx)(n.code,{children:"-----BEGIN OPENSSH PRIVATE KEY-----"}),", convert it with the command:"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:' ssh-keygen -p -N "" -m pem -f /path/to/key\n'})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws",children:"Import your SSH key into AWS"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html",children:"Launch a new instance in EC2"}),". During setup:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Configure the security group to allow SSH connection from anywhere."}),"\n",(0,t.jsx)(n.li,{children:"When selecting a key pair, choose the key you just imported."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html",children:"Connect to the instance"}),",\nsetting the user name to ",(0,t.jsx)(n.code,{children:"ec2-user"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Find and note the ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-viewing",children:"instance's public DNS"}),". This will be formatted like: ",(0,t.jsx)(n.code,{children:"ec2-198-21-98-1.compute-1.amazonaws.com"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup-for-google-cloud",children:"Setup for Google Cloud"}),"\n",(0,t.jsx)(n.p,{children:"To allow SSH tunneling to a database instance hosted on Google Cloud, you must set up a virtual machine (VM)."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Begin by finding your public SSH key on your local machine.\nIn the ",(0,t.jsx)(n.code,{children:".ssh"})," subdirectory of your user home directory,\nlook for the PEM file that contains the private SSH key. Check that it starts with ",(0,t.jsx)(n.code,{children:"-----BEGIN RSA PRIVATE KEY-----"}),",\nwhich indicates it is an RSA-based file."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"If no such file exists, generate one using the command:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:" ssh-keygen -m PEM -t rsa\n"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["If a PEM file exists, but starts with ",(0,t.jsx)(n.code,{children:"-----BEGIN OPENSSH PRIVATE KEY-----"}),", convert it with the command:"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:' ssh-keygen -p -N "" -m pem -f /path/to/key\n'})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"If your Google login differs from your local username, generate a key that includes your Google email address as a comment:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:" ssh-keygen -m PEM -t rsa -C user@domain.com\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://cloud.google.com/compute/docs/instances/create-start-instance",children:"Create and start a new VM in GCP"}),", ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/compute/docs/images/os-details#user-space-features",children:"choosing an image that supports OS Login"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://cloud.google.com/compute/docs/connect/add-ssh-keys",children:"Add your public key to the VM"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://cloud.google.com/compute/docs/ip-addresses/reserve-static-external-ip-address",children:"Reserve an external IP address"})," and connect it to the VM during setup.\nNote the generated address."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup-for-azure",children:"Setup for Azure"}),"\n",(0,t.jsx)(n.p,{children:"To allow SSH tunneling to a database instance hosted on Azure, you'll need to create a virtual machine (VM) in the same virtual network as your endpoint database."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Begin by finding your public SSH key on your local machine.\nIn the ",(0,t.jsx)(n.code,{children:".ssh"})," subdirectory of your user home directory,\nlook for the PEM file that contains the private SSH key. Check that it starts with ",(0,t.jsx)(n.code,{children:"-----BEGIN RSA PRIVATE KEY-----"}),",\nwhich indicates it is an RSA-based file."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"If no such file exists, generate one using the command:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:" ssh-keygen -m PEM -t rsa\n"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["If a PEM file exists, but starts with ",(0,t.jsx)(n.code,{children:"-----BEGIN OPENSSH PRIVATE KEY-----"}),", convert it with the command:"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-console",children:' ssh-keygen -p -N "" -m pem -f /path/to/key\n'})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create and connect to a VM in a ",(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-overview",children:"virtual network"}),", and add the endpoint database to the network."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/virtual-network/quick-create-portal",children:"Create a new virtual network and subnet"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create a ",(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/virtual-machines/linux/quick-create-portal",children:"Linux"})," or ",(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/virtual-machines/windows/quick-create-portal",children:"Windows"})," VM within the virtual network,\ndirecting the SSH public key source to the public key you generated previously."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Note the VM's public IP; you'll need this later."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create a service endpoint for your database in the same virtual network as your VM.\nInstructions for Azure Database For PostgreSQL can be found ",(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/postgresql/howto-manage-vnet-using-portal",children:"here"}),";\nnote that instructions for other database engines may be different."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.p,{children:"After you've completed the prerequisites, you should have the following parameters:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"SSH Endpoint"})," / ",(0,t.jsx)(n.code,{children:"sshEndpoint"}),": the remote SSH server's hostname, or public IP address, formatted as ",(0,t.jsx)(n.code,{children:"ssh://user@hostname[:port]"})]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.a,{href:"https://www.ssh.com/academy/ssh/port",children:"SSH default port is 22"}),".\nDepending on where your server is hosted, you may not be required to specify a port,\nbut we recommend specifying ",(0,t.jsx)(n.code,{children:":22"})," in all cases to ensure a connection can be made."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Private Key"})," / ",(0,t.jsx)(n.code,{children:"privateKey"}),": the contents of the SSH private key file"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Use these to add SSH tunneling to your capture or materialization definition, either by filling in the corresponding fields\nin the web app, or by working with the YAML directly. Reference the ",(0,t.jsx)(n.a,{href:"../../concepts/connectors/#connecting-to-endpoints-on-secure-networks",children:"Connectors"})," page for a YAML sample."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>c});var t=s(96540);const o={},r=t.createContext(o);function i(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/c10f38bc.a5ee4330.js b/pr-preview/pr-1594/assets/js/c10f38bc.a5ee4330.js deleted file mode 100644 index 739d9f889a..0000000000 --- a/pr-preview/pr-1594/assets/js/c10f38bc.a5ee4330.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9057],{84901:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var r=t(74848),s=t(28453);const i={},o="Amplitude",c={id:"reference/Connectors/capture-connectors/amplitude",title:"Amplitude",description:"This connector captures data from Amplitude into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/amplitude.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/amplitude",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/amplitude.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amazon SQS",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs"},next:{title:"Apache Kafka",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka"}},d={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"amplitude",children:"Amplitude"}),"\n",(0,r.jsx)(n.p,{children:"This connector captures data from Amplitude into Flow collections."}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://ghcr.io/estuary/source-amplitude:dev",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-amplitude:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/amplitude/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,r.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,r.jsx)(n.p,{children:"The following data resources are supported through the Amplitude APIs:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developers.amplitude.com/docs/dashboard-rest-api#active-and-new-user-counts",children:"Active User Counts"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developers.amplitude.com/docs/chart-annotations-api#get-all-annotations",children:"Annotations"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developers.amplitude.com/docs/dashboard-rest-api#average-session-length",children:"Average Session Length"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developers.amplitude.com/docs/behavioral-cohorts-api#listing-all-cohorts",children:"Cohorts"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://developers.amplitude.com/docs/export-api#export-api---export-your-projects-event-data",children:"Events"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["An Amplitude project with an ",(0,r.jsx)(n.a,{href:"https://help.amplitude.com/hc/en-us/articles/360058073772-Create-and-manage-organizations-and-projects",children:"API Key and Secret Key"})]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Amplitude source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/api_key"})})}),(0,r.jsx)(n.td,{children:"API Key"}),(0,r.jsx)(n.td,{children:"Amplitude API Key."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/secret_key"})})}),(0,r.jsx)(n.td,{children:"Secret Key"}),(0,r.jsx)(n.td,{children:"Amplitude Secret Key."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/start_date"})})}),(0,r.jsx)(n.td,{children:"Replication Start Date"}),(0,r.jsx)(n.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Resource of your Amplitude project from which collections are captured."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync Mode"}),(0,r.jsx)(n.td,{children:"Connection method."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-amplitude:dev\n config:\n api_key: <secret>\n secret_key: <secret>\n start_date: 2022-06-18T00:00:00Z\n bindings:\n - resource:\n stream: cohorts\n syncMode: full_refresh\n target: ${PREFIX}/cohorts\n - resource:\n stream: annotations\n syncMode: full_refresh\n target: ${PREFIX}/annotations\n - resource:\n stream: events\n syncMode: incremental\n target: ${PREFIX}/events\n - resource:\n stream: active_users\n syncMode: incremental\n target: ${PREFIX}/activeusers\n - resource:\n stream: average_session_length\n syncMode: incremental\n target: ${PREFIX}/averagesessionlength\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>c});var r=t(96540);const s={},i=r.createContext(s);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/c11c77a9.a2b9dcc2.js b/pr-preview/pr-1594/assets/js/c11c77a9.a2b9dcc2.js deleted file mode 100644 index 7c57e6b3f7..0000000000 --- a/pr-preview/pr-1594/assets/js/c11c77a9.a2b9dcc2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8667],{98058:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var s=t(74848),o=t(28453);const i={sidebar_position:9},r="Tests",c={id:"concepts/tests",title:"Tests",description:"The Flow web application automatically performs basic tests to validate the configurations of captures and materializations.",source:"@site/docs/concepts/tests.md",sourceDirName:"concepts",slug:"/concepts/tests",permalink:"/pr-preview/pr-1594/concepts/tests",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/tests.md",tags:[],version:"current",sidebarPosition:9,frontMatter:{sidebar_position:9},sidebar:"tutorialSidebar",previous:{title:"Storage mappings",permalink:"/pr-preview/pr-1594/concepts/storage-mappings"},next:{title:"Schema evolution",permalink:"/pr-preview/pr-1594/concepts/advanced/evolutions"}},a={},l=[{value:"Ingest",id:"ingest",level:2},{value:"Verify",id:"verify",level:2},{value:"Partition selectors",id:"partition-selectors",level:3},{value:"Tips",id:"tips",level:2},{value:"Testing reductions",id:"testing-reductions",level:3},{value:"Reusing common fixtures",id:"reusing-common-fixtures",level:3}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"tests",children:"Tests"}),"\n",(0,s.jsx)(n.p,{children:"The Flow web application automatically performs basic tests to validate the configurations of captures and materializations.\nAs your Data Flows grow in breadth and scope, and as requirements change or new contributors get involved,\nmore robust tests are invaluable for ensuring the correctness of your data products."}),"\n",(0,s.jsx)(n.p,{children:"You can use Flow tests to verify the end-to-end behavior of any modified schemas or derivations included in your Data Flow.\nAt their most basic, you feed example documents into a collection,\nand then verify that documents coming out of a derived collection meet your test's expectation:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'tests:\n acmeCo/tests/greetings:\n - ingest:\n description: Add people to greet.\n collection: acmeCo/people\n documents:\n - { userId: 1, name: "Zelda" }\n - { userId: 2, name: "Link" }\n\n - verify:\n description: Ensure people were greeted.\n collection: acmeCo/greetings\n documents:\n - { userId: 1, greeting: "Hello Zelda" }\n - { userId: 2, greeting: "Hello Link" }\n'})}),"\n",(0,s.jsxs)(n.p,{children:["A test is a sequence of one or more steps, each of either an ",(0,s.jsx)(n.code,{children:"ingest"})," or a ",(0,s.jsx)(n.code,{children:"verify"})," type."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"ingest"})," steps add one or more documents to a collection."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"verify"})," steps make assertions about the current contents of a collection."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"All steps must complete successfully in order for a test to pass."}),"\n",(0,s.jsx)(n.h2,{id:"ingest",children:"Ingest"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"ingest"})," steps add documents to a named collection.\nAll documents must validate against the collection's\n",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas",children:"schema"}),",\nor a catalog build error will be reported."]}),"\n",(0,s.jsxs)(n.p,{children:["All documents from a ",(0,s.jsx)(n.em,{children:"single"})," ",(0,s.jsx)(n.code,{children:"ingest"})," step are added in one transaction.\nThis means that multiple documents with a common key will be combined ",(0,s.jsx)(n.em,{children:"prior"}),"\nto their being appended to the collection. Suppose ",(0,s.jsx)(n.code,{children:"acmeCo/people"})," had key ",(0,s.jsx)(n.code,{children:"[/id]"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'tests:\n acmeCo/tests/greetings:\n - ingest:\n description: Zeldas are combined to one added document.\n collection: acmeCo/people\n documents:\n - { userId: 1, name: "Zelda One" }\n - { userId: 1, name: "Zelda Two" }\n\n - verify:\n description: Only one Zelda is greeted.\n collection: acmeCo/greetings\n documents:\n - { userId: 1, greeting: "Hello Zelda Two" }\n'})}),"\n",(0,s.jsx)(n.h2,{id:"verify",children:"Verify"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"verify"})," steps assert that the current contents of a collection match the provided document fixtures.\nVerified documents are fully reduced, with one document for each unique key, ordered under the key's natural order."]}),"\n",(0,s.jsxs)(n.p,{children:["You can verify the contents of both derivations and captured collections.\nDocuments given in ",(0,s.jsx)(n.code,{children:"verify"})," steps do ",(0,s.jsx)(n.em,{children:"not"})," need to be comprehensive.\nIt is not an error if the actual document has additional locations not present in the document to verify,\nso long as all matched document locations are equal.\nVerified documents also do not need to validate against the collection's schema.\nThey do, however, need to include all fields that are part of the collection's key."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'tests:\n acmeCo/tests/greetings:\n - ingest:\n collection: acmeCo/people\n documents:\n - { userId: 1, name: "Zelda" }\n - { userId: 2, name: "Link" }\n - ingest:\n collection: acmeCo/people\n documents:\n - { userId: 1, name: "Zelda Again" }\n - { userId: 3, name: "Pikachu" }\n\n - verify:\n collection: acmeCo/greetings\n documents:\n # greetings are keyed on /userId, and the second greeting is kept.\n - { userId: 1, greeting: "Hello Zelda Again" }\n # `greeting` is "Hello Link", but is not asserted here.\n - { userId: 2 }\n - { userId: 3, greeting: "Hello Pikachu" }\n'})}),"\n",(0,s.jsx)(n.h3,{id:"partition-selectors",children:"Partition selectors"}),"\n",(0,s.jsx)(n.p,{children:"Verify steps may include a partition selector to\nverify only documents of a specific partition:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'tests:\n acmeCo/tests/greetings:\n - verify:\n collection: acmeCo/greetings\n description: Verify only documents which greet Nintendo characters.\n documents:\n - { userId: 1, greeting: "Hello Zelda" }\n - { userId: 3, greeting: "Hello Pikachu" }\n partitions:\n include:\n platform: [Nintendo]\n'})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections#partition-selectors",children:"Learn more about partition selectors"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"tips",children:"Tips"}),"\n",(0,s.jsx)(n.p,{children:"The following tips can aid in testing large or complex derivations."}),"\n",(0,s.jsx)(n.h3,{id:"testing-reductions",children:"Testing reductions"}),"\n",(0,s.jsxs)(n.p,{children:["Reduction annotations are expressive and powerful, and their use should thus be tested thoroughly.\nAn easy way to test reduction annotations on captured collections is to write a two-step test that ingests multiple documents with the same key and then verifies the result.\nFor example, the following test might be used to verify the behavior of a simple ",(0,s.jsx)(n.code,{children:"sum"})," reduction:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"tests:\n acmeCo/tests/sum-reductions:\n - ingest:\n description: Ingest documents to be summed.\n collection: acmeCo/collection\n documents:\n - {id: 1, value: 5}\n - {id: 1, value: 4}\n - {id: 1, value: -3}\n - verify:\n description: Verify value was correctly summed.\n collection: acmeCo/collection\n documents:\n - {id: 1, value: 6}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"reusing-common-fixtures",children:"Reusing common fixtures"}),"\n",(0,s.jsxs)(n.p,{children:["When you write a lot of tests, it can be tedious to repeat documents that are used multiple times.\nYAML supports ",(0,s.jsx)(n.a,{href:"https://blog.daemonl.com/2016/02/yaml.html",children:"anchors and references"}),",\nwhich you can implement to re-use common documents throughout your tests.\nOne nice pattern is to define anchors for common ingest steps in the first test, which can be re-used by subsequent tests. For example:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"tests:\n acmeCo/tests/one:\n - ingest: &mySetup\n collection: acmeCo/collection\n documents:\n - {id: 1, ...}\n - {id: 2, ...}\n ...\n - verify: ...\n\n acmeCo/tests/two:\n - ingest: *mySetup\n - verify: ...\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This allows all the subsequent tests to re-use the documents from the first ",(0,s.jsx)(n.code,{children:"ingest"})," step without having to duplicate them."]})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>c});var s=t(96540);const o={},i=s.createContext(o);function r(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/c13ec0a6.a1c4a196.js b/pr-preview/pr-1594/assets/js/c13ec0a6.a1c4a196.js deleted file mode 100644 index 553d6e57ff..0000000000 --- a/pr-preview/pr-1594/assets/js/c13ec0a6.a1c4a196.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[503],{13693:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>t});var i=r(74848),s=r(28453);const a={},c="Materialization connectors",l={id:"reference/Connectors/materialization-connectors/README",title:"Materialization connectors",description:"Estuary's available materialization connectors are listed in this section. Each connector has a unique set of requirements for configuration; these are linked below the connector name.",source:"@site/docs/reference/Connectors/materialization-connectors/README.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/README.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Tinybird",permalink:"/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird"},next:{title:"AlloyDB",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb"}},o={},t=[{value:"Available materialization connectors",id:"available-materialization-connectors",level:2}];function h(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"materialization-connectors",children:"Materialization connectors"}),"\n",(0,i.jsx)(n.p,{children:"Estuary's available materialization connectors are listed in this section. Each connector has a unique set of requirements for configuration; these are linked below the connector name."}),"\n",(0,i.jsxs)(n.p,{children:["Also listed are links to the most recent Docker images for each connector. You'll need these to write Flow specifications manually (if you're ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/flowctl",children:"developing locally"}),"). If you're using the Flow web app, they aren't necessary."]}),"\n",(0,i.jsx)(n.p,{children:"Estuary is actively developing new connectors, so check back regularly for the latest additions. We\u2019re prioritizing the development of high-scale technological systems, as well as client needs."}),"\n",(0,i.jsx)(n.p,{children:"At this time, all the available materialization connectors are created by Estuary.\nIn the future, other open-source materialization connectors from third parties could be supported."}),"\n",(0,i.jsx)(n.h2,{id:"available-materialization-connectors",children:"Available materialization connectors"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["AlloyDB","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package - ghcr.io/estuary/materialize-alloydb",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Amazon DynamoDB","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package - ghcr.io/estuary/materialize-dynamodb",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Amazon Redshift","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package - ghcr.io/estuary/materialize-redshift",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Amazon SQL Server","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package - ghcr.io/estuary/materialize-amazon-rds-sqlserver",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Apache Iceberg Tables in S3","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-s3-iceberg",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Apache Parquet Files in GCS","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-gcs-parquet",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Apache Parquet Files in S3","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-s3-parquet",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Azure SQL Server","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"./SQLServer/",children:"Configuration"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["CSV Files in GCS","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-gcs-csv",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["CSV Files in S3","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-s3-csv",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Databricks","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-databricks",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Elasticsearch","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-elasticsearch",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Firebolt","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package - ghcr.io/estuary/materialize-firebolt",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Google BigQuery","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-bigquery",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Google Cloud Pub/Sub","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package - ghcr.io/estuary/materialize-google-pubsub",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Google Cloud SQL Server","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package = ghcr.io/estuary/materialize-google-cloud-sql-sqlserver",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["MongoDB","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package - ghcr.io/estuary/materialize-mongodb",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["MotherDuck","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package - ghcr.io/estuary/materialize-motherduck",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["MySQL","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"./MySQL/",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package - ghcr.io/estuary/materialize-mysql",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Pinecone","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-pinecone",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["PostgreSQL","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"./PostgreSQL/",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-postgres",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Rockset","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-rockset",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Snowflake","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-snowflake",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["SQLite","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package \u2014 ghcr.io/estuary/materialize-sqlite",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["SQL Server","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"./SQLServer/",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package - ghcr.io/estuary/materialize-sqlserver",":dev"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["TimescaleDB","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb",children:"Configuration"})}),"\n",(0,i.jsxs)(n.li,{children:["Package - ghcr.io/estuary/materialize-timescaledb",":dev"]}),"\n"]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>l});var i=r(96540);const s={},a=i.createContext(s);function c(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/c1e7e5a7.cf9e77e7.js b/pr-preview/pr-1594/assets/js/c1e7e5a7.cf9e77e7.js deleted file mode 100644 index 6b65d3be03..0000000000 --- a/pr-preview/pr-1594/assets/js/c1e7e5a7.cf9e77e7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9881],{52323:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>n,metadata:()=>r,toc:()=>c});var o=t(74848),s=t(28453);const n={sidebar_position:3,description:"High level explanations of Flow in terms of the systems you already know"},i="Comparisons",r={id:"overview/comparisons",title:"Comparisons",description:"High level explanations of Flow in terms of the systems you already know",source:"@site/docs/overview/comparisons.md",sourceDirName:"overview",slug:"/overview/comparisons",permalink:"/pr-preview/pr-1594/overview/comparisons",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/overview/comparisons.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,description:"High level explanations of Flow in terms of the systems you already know"},sidebar:"tutorialSidebar",previous:{title:"Who should use Flow?",permalink:"/pr-preview/pr-1594/overview/who-should-use-flow"},next:{title:"Registration and setup",permalink:"/pr-preview/pr-1594/getting-started/installation"}},l={},c=[{value:"Apache Beam and Google Cloud Dataflow",id:"apache-beam-and-google-cloud-dataflow",level:2},{value:"Kafka",id:"kafka",level:2},{value:"Spark",id:"spark",level:2},{value:"Hadoop, HDFS, and Hive",id:"hadoop-hdfs-and-hive",level:2},{value:"Fivetran, Airbyte, and other ELT solutions",id:"fivetran-airbyte-and-other-elt-solutions",level:2},{value:"dbt",id:"dbt",level:2},{value:"Materialize, Rockset, ksqlDB, and other real-time databases",id:"materialize-rockset-ksqldb-and-other-real-time-databases",level:2},{value:"Snowflake, BigQuery, and other OLAP databases",id:"snowflake-bigquery-and-other-olap-databases",level:2}];function d(e){const a={a:"a",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.h1,{id:"comparisons",children:"Comparisons"}),"\n",(0,o.jsx)(a.p,{children:"Because Flow combines many functionalities, it's related to many types of data systems. Choose a familiar system from the list below to jump to an explanation of how it compares with Flow (or how you can use the two together)."}),"\n",(0,o.jsxs)(a.ul,{children:["\n",(0,o.jsx)(a.li,{children:(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/overview/comparisons#apache-beam-and-google-cloud-dataflow",children:"Apache Beam and Google Cloud Dataflow"})}),"\n",(0,o.jsx)(a.li,{children:(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/overview/comparisons#kafka",children:"Kafka"})}),"\n",(0,o.jsx)(a.li,{children:(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/overview/comparisons#spark",children:"Spark"})}),"\n",(0,o.jsx)(a.li,{children:(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/overview/comparisons#hadoop-hdfs-and-hive",children:"Hadoop, HDFS, and Hive"})}),"\n",(0,o.jsx)(a.li,{children:(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/overview/comparisons#fivetran-airbyte-and-other-elt-solutions",children:"Fivetran, Airbyte, and other ELT solutions"})}),"\n",(0,o.jsx)(a.li,{children:(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/overview/comparisons#dbt",children:"dbt"})}),"\n",(0,o.jsx)(a.li,{children:(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/overview/comparisons#materialize-rockset-ksqldb-and-other-real-time-databases",children:"Materialize, Rockset, ksqlDB, and other realtime databases"})}),"\n",(0,o.jsx)(a.li,{children:(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/overview/comparisons#snowflake-bigquery-and-other-olap-databases",children:"Snowflake, BigQuery, and other OLAP databases"})}),"\n"]}),"\n",(0,o.jsx)(a.h2,{id:"apache-beam-and-google-cloud-dataflow",children:"Apache Beam and Google Cloud Dataflow"}),"\n",(0,o.jsx)(a.p,{children:"Flow\u2019s most apt comparison is to Apache Beam. You may use a variety of runners (processing engines) for your Beam deployment. One of the most popular, Google Cloud Dataflow, is a more robust redistribution under an additional SDK. Regardless of how you use Beam, there\u2019s a lot of conceptual overlap with Flow. This makes Beam and Flow alternatives rather than complementary technologies, but there are key differences."}),"\n",(0,o.jsxs)(a.p,{children:["Like Beam, Flow\u2019s primary primitive is a ",(0,o.jsx)(a.strong,{children:"collection"}),". You build a processing graph (called a ",(0,o.jsx)(a.strong,{children:"pipeline"})," in Beam and a ",(0,o.jsx)(a.strong,{children:"Data Flow"})," in Flow) by relating multiple collections together through procedural transformations, or lambdas. As with Beam, Flow\u2019s runtime performs automatic data shuffles and is designed to allow fully automatic scaling. Also like Beam, collections have associated schemas."]}),"\n",(0,o.jsx)(a.p,{children:"Unlike Beam, Flow doesn\u2019t distinguish between batch and streaming contexts. Flow unifies these paradigms under a single collection concept, allowing you to seamlessly work with both data types."}),"\n",(0,o.jsx)(a.p,{children:"Also, while Beam allows you the option to define combine operators, Flow\u2019s runtime always applies combine operators. These are built using the declared semantics of the document\u2019s schema, which makes it much more efficient and cost-effective to work with streaming data."}),"\n",(0,o.jsxs)(a.p,{children:["Finally, Flow allows stateful stream-to-stream joins without the windowing semantics imposed by Beam. Notably, Flow\u2019s modeling of state \u2013 via its per-key ",(0,o.jsx)(a.strong,{children:"register"})," concept \u2013 is substantially more powerful than Beam's per-key-and-window model. For example, registers can trivially model the cumulative lifetime value of a customer."]}),"\n",(0,o.jsx)(a.h2,{id:"kafka",children:"Kafka"}),"\n",(0,o.jsx)(a.p,{children:"Flow inhabits a different space than Kafka does by itself. Kafka is an infrastructure that supports streaming applications running elsewhere. Flow is an opinionated framework for working with real-time data. You might think of Flow as an analog to an opinionated bundling of several important features from the broader Kafka ecosystem."}),"\n",(0,o.jsxs)(a.p,{children:["Flow is built on ",(0,o.jsx)(a.a,{href:"https://gazette.readthedocs.io/en/latest/",children:"Gazette"}),", a highly-scalable streaming broker similar to log-oriented pub/sub systems. Thus, Kafka is more directly comparable to Gazette. Flow also uses Gazette\u2019s consumer framework, which has similarities to Kafka ",(0,o.jsx)(a.strong,{children:"consumers"}),". Both manage scale-out execution contexts for consumer tasks, offer durable local task stores, and provide exactly-once semantics."]}),"\n",(0,o.jsxs)(a.p,{children:[(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/concepts/advanced/journals",children:"Journals"})," in Gazette and Flow are roughly analogous to Kafka ",(0,o.jsx)(a.strong,{children:"partitions"}),". Each journal is a single append-only log. Gazette has no native notion of a ",(0,o.jsx)(a.strong,{children:"topic"}),", but instead supports label-based selection of subsets of journals, which tends to be more flexible. Gazette journals store data in contiguous chunks called ",(0,o.jsx)(a.strong,{children:"fragments"}),", which typically live in cloud storage. Each journal can have its own separate storage configuration, which Flow leverages to allow users to bring their own cloud storage buckets. Another unique feature of Gazette is its ability to serve reads of historical data by providing clients with pre-signed cloud storage URLs, which enables it to serve many readers very efficiently."]}),"\n",(0,o.jsxs)(a.p,{children:["Generally, Flow users don't need to know or care much about Gazette and its architecture, since Flow provides a higher-level interface over groups of journals, called ",(0,o.jsx)(a.strong,{children:"collections"}),"."]}),"\n",(0,o.jsxs)(a.p,{children:["Flow ",(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/concepts/collections",children:"collections"})," are somewhat similar to Kafka ",(0,o.jsx)(a.strong,{children:"streams"}),", but with some important differences. Collections always store JSON and must have an associated JSON schema. Collections also support automatic logical and physical partitioning. Each collection is backed by one or more journals, depending on the partitioning."]}),"\n",(0,o.jsxs)(a.p,{children:["Flow ",(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/concepts/#tasks",children:"tasks"})," are most similar to Kafka ",(0,o.jsx)(a.strong,{children:"stream processors"}),", but are more opinionated. Tasks fall into one of three categories: captures, derivations, and materializations. Tasks may also have more than one process, which Flow calls ",(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards",children:(0,o.jsx)(a.strong,{children:"shards"})}),", to allow for parallel processing. Tasks and shards are fully managed by Flow. This includes transactional state management and zero-downtime splitting of shards, which enables turnkey scaling."]}),"\n",(0,o.jsx)(a.p,{children:"See how Flow compares to popular stream processing platforms that use Kafka:"}),"\n",(0,o.jsxs)(a.ul,{children:["\n",(0,o.jsx)(a.li,{children:(0,o.jsx)(a.a,{href:"https://estuary.dev/vs-confluent/",children:"Flow vs Confluent feature and pricing breakdown"})}),"\n",(0,o.jsx)(a.li,{children:(0,o.jsx)(a.a,{href:"https://estuary.dev/vs-debezium/",children:"Flow vs Debezium feature and pricing breakdown"})}),"\n"]}),"\n",(0,o.jsx)(a.h2,{id:"spark",children:"Spark"}),"\n",(0,o.jsx)(a.p,{children:"Spark can be described as a batch engine with stream processing add-ons, where Flow is fundamentally a streaming system that is able to easily integrate with batch systems."}),"\n",(0,o.jsxs)(a.p,{children:["You can think of a Flow ",(0,o.jsx)(a.strong,{children:"collection"})," as a set of RDDs with common associated metadata. In Spark, you can save an RDD to a variety of external systems, like cloud storage or a database. Likewise, you can load from a variety of external systems to create an RDD. Finally, you can transform one RDD into another. You use Flow collections in a similar manner. They represent a logical dataset, which you can ",(0,o.jsx)(a.strong,{children:"materialize"})," to push the data into some external system like cloud storage or a database. You can also create a collection that is ",(0,o.jsx)(a.strong,{children:"derived"})," by applying stateful transformations to one or more source collections."]}),"\n",(0,o.jsx)(a.p,{children:"Unlike Spark RDDs, Flow collections are backed by one or more unbounded append-only logs. Therefore, you don't create a new collection each time data arrives; you simply append to the existing one. Collections can be partitioned and can support extremely large volumes of data."}),"\n",(0,o.jsxs)(a.p,{children:["Spark's processing primitives, ",(0,o.jsx)(a.strong,{children:"applications"}),", ",(0,o.jsx)(a.strong,{children:"jobs"}),", and ",(0,o.jsx)(a.strong,{children:"tasks"}),", don't translate perfectly to Flow, but we can make some useful analogies. This is partly because Spark is not very opinionated about what an application does. Your Spark application could read data from cloud storage, then transform it, then write the results out to a database. The closest analog to a Spark application in Flow is the ",(0,o.jsx)(a.strong,{children:"Data Flow"}),". A Data Flow is a composition of Flow tasks, which are quite different from tasks in Spark."]}),"\n",(0,o.jsxs)(a.p,{children:["In Flow, a task is a logical unit of work that does ",(0,o.jsx)(a.em,{children:"one"})," of capture (ingest), derive (transform), or materialize (write results to an external system). What Spark calls a task is actually closer to a Flow ",(0,o.jsx)(a.strong,{children:"shard"}),". In Flow, a task is a logical unit of work, and ",(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards",children:"shards"})," represent the potentially numerous processes that actually carry out that work. Shards are the unit of parallelism in Flow, and you can easily split them for turnkey scaling."]}),"\n",(0,o.jsx)(a.p,{children:"Composing Flow tasks is also a little different than composing Spark jobs. Flow tasks always produce and/or consume data in collections, instead of piping data directly from one shard to another. This is because every task in Flow is transactional and, to the greatest degree possible, fault-tolerant. This design also affords painless backfills of historical data when you want to add new transformations or materializations."}),"\n",(0,o.jsx)(a.h2,{id:"hadoop-hdfs-and-hive",children:"Hadoop, HDFS, and Hive"}),"\n",(0,o.jsx)(a.p,{children:"There are many different ways to use Hadoop, HDFS, and the ecosystem of related projects, several of which are useful comparisons to Flow."}),"\n",(0,o.jsxs)(a.p,{children:["To gain an understanding of Flow's processing model for derivations, see ",(0,o.jsx)(a.a,{href:"https://www.estuary.dev/why-mapreduce-is-making-a-comeback/",children:"this blog post about MapReduce in Flow"}),"."]}),"\n",(0,o.jsx)(a.p,{children:"HDFS is sometimes used as a system of record for analytics data, typically paired with an orchestration system for analytics jobs. If you do this, you likely export datasets from your source systems into HDFS. Then, you use some other tool to coordinate running various MapReduce jobs, often indirectly through systems like Hive."}),"\n",(0,o.jsxs)(a.p,{children:["For this use case, the best way of describing Flow is that it completely changes the paradigm. In Flow, you always append data to existing ",(0,o.jsx)(a.strong,{children:"collections"}),", rather than creating a new one each time a job is run. In fact, Flow has no notion of a ",(0,o.jsx)(a.strong,{children:"job"})," like there is in Hadoop. Flow tasks run continuously and everything stays up to date in real time, so there's never a need for outside orchestration or coordination. Put simply, Flow collections are log-like, and files in HDFS typically store table-like data. ",(0,o.jsx)(a.a,{href:"https://www.estuary.dev/the-power-and-implications-of-data-materialization/",children:"This blog post"})," explores those differences in greater depth."]}),"\n",(0,o.jsx)(a.p,{children:"To make this more concrete, imagine a hypothetical example of a workflow in the Hadoop world where you export data from a source system, perform some transformations, and then run some Hive queries."}),"\n",(0,o.jsxs)(a.p,{children:["In Flow, you instead define a ",(0,o.jsx)(a.strong,{children:"capture"})," of data from the source, which runs continuously and keeps a collection up to date with the latest data from the source. Then you transform the data with Flow ",(0,o.jsx)(a.strong,{children:"derivations"}),", which again apply the transformations incrementally and in real time. While you ",(0,o.jsx)(a.em,{children:"could"})," actually use tools like Hive to directly query data from Flow collections \u2014 the layout of collection data in cloud storage is intentionally compatible with this \u2014 you could also ",(0,o.jsx)(a.strong,{children:"materialize"})," a view of your transformation results to any database, which is also kept up to date in real time."]}),"\n",(0,o.jsx)(a.h2,{id:"fivetran-airbyte-and-other-elt-solutions",children:"Fivetran, Airbyte, and other ELT solutions"}),"\n",(0,o.jsxs)(a.p,{children:["Tools like Fivetran and Airbyte are purpose-built to move data from one place to another. These ELT tools typically model sources and destinations, and run regularly scheduled jobs to export from the source directly to the destination. Flow models things differently. Instead of modeling the world in terms of independent scheduled jobs that copy data from source to destination, Data Flows model a directed graph of\n",(0,o.jsx)(a.a,{href:"../../concepts/captures",children:(0,o.jsx)(a.strong,{children:"captures"})})," (reads from sources),\n",(0,o.jsx)(a.a,{href:"../../concepts/derivations",children:(0,o.jsx)(a.strong,{children:"derivations"})})," (transforms), and\n",(0,o.jsx)(a.a,{href:"../../concepts/materialization",children:(0,o.jsx)(a.strong,{children:"materializations"})})," (writes to destinations).\nCollectively, these are called ",(0,o.jsx)(a.em,{children:"tasks"}),"."]}),"\n",(0,o.jsxs)(a.p,{children:["Tasks in Flow are only indirectly linked. Captures read data from a source and output to ",(0,o.jsx)(a.strong,{children:"collections"}),". Flow collections store all the data in cloud storage, with configurable retention for historical data. You can then materialize each collection to any number of destination systems. Each one will be kept up to date in real time, and new materializations can automatically backfill all your historical data. Collections in Flow always have an associated JSON schema, and they use that to ensure the validity of all collection data. Tasks are also transactional and generally guarantee end-to-end exactly-once processing (so long as the endpoint system can accommodate them)."]}),"\n",(0,o.jsxs)(a.p,{children:["Like Airbyte, Flow uses ",(0,o.jsx)(a.a,{href:"/pr-preview/pr-1594/concepts/connectors",children:"connectors"})," for interacting with external systems in captures and materializations. For captures,\nFlow integrates the Airbyte specification,\nso all Airbyte source connectors can be used with Flow.\nFor materializations, Flow uses its own protocol which is not compatible with the Airbyte spec.\nIn either case, the usage of connectors is pretty similar."]}),"\n",(0,o.jsx)(a.p,{children:"In terms of technical capabilities, Flow can do everything that these tools can and more.\nBoth Fivetran and Airbyte both currently have graphical interfaces that make them much easier for\nnon-technical users to configure. Flow, too, is focused on empowering non-technical users through its web application.\nAt the same time, it Flow offers declarative YAML for configuration, which works excellently in a GitOps workflow."}),"\n",(0,o.jsx)(a.p,{children:(0,o.jsx)(a.a,{href:"https://estuary.dev/vs-fivetran/",children:"Flow vs Fivetran feature and pricing breakdown."})}),"\n",(0,o.jsx)(a.h2,{id:"dbt",children:"dbt"}),"\n",(0,o.jsx)(a.p,{children:"dbt is a tool that enables data analysts and engineers to transform data in their warehouses more effectively."}),"\n",(0,o.jsx)(a.p,{children:"In addition to \u2013 and perhaps more important than \u2013 its transform capability, dbt brought an entirely new workflow for working with data:\none that prioritizes version control, testing, local development, documentation, composition, and re-use."}),"\n",(0,o.jsx)(a.p,{children:"Like dbt, Flow uses a declarative model and tooling, but the similarities end there. dbt is a tool for defining transformations, which are executed within your analytics warehouse.\nFlow is a tool for delivering data to that warehouse, as well as continuous operational transforms that are applied everywhere else."}),"\n",(0,o.jsx)(a.p,{children:"These two tools can make lots of sense to use together. First, Flow brings timely, accurate data to the warehouse.\nWithin the warehouse, analysts can use tools like dbt to explore the data. The Flow pipeline is then ideally suited to\nproductionize important insights as materialized views or by pushing to another destination."}),"\n",(0,o.jsx)(a.p,{children:"Put another way, Flow is a complete ELT platform, but you might choose to perform and manage more complex transformations in\na separate, dedicated tool like dbt. While Flow and dbt don\u2019t interact directly, both offer easy integration through your data warehouse."}),"\n",(0,o.jsx)(a.h2,{id:"materialize-rockset-ksqldb-and-other-real-time-databases",children:"Materialize, Rockset, ksqlDB, and other real-time databases"}),"\n",(0,o.jsx)(a.p,{children:"Modern real-time databases like Materialize, Rockset, and ksqlDB consume streams of data, oftentimes from Kafka brokers,\nand can keep SQL views up to date in real time."}),"\n",(0,o.jsx)(a.p,{children:"These real-time databases have a lot of conceptual overlap with Flow. The biggest difference is that Flow can materialize this same type of incrementally updated view into any database, regardless of whether that database has real-time capabilities or not. "}),"\n",(0,o.jsxs)(a.p,{children:["However, this doesn't mean that Flow should ",(0,o.jsx)(a.em,{children:"replace"})," these systems in your stack. In fact, it can be optimal to use Flow to feed data into them.\nFlow adds real-time data capture and materialization options that many real-time databases don't support.\nOnce data has arrived in the database, you have access to real-time SQL analysis and other analytical tools not native to Flow.\nFor further explanation, read the section below on OLAP databases."]}),"\n",(0,o.jsx)(a.h2,{id:"snowflake-bigquery-and-other-olap-databases",children:"Snowflake, BigQuery, and other OLAP databases"}),"\n",(0,o.jsxs)(a.p,{children:["Flow differs from OLAP databases mainly in that it's not a database. Flow has no query interface, and no plans to add one. Instead, Flow allows you to use the query interfaces of any database by ",(0,o.jsx)(a.strong,{children:"materializing"})," views into it."]}),"\n",(0,o.jsxs)(a.p,{children:["Flow is similar to OLAP databases in that it can be the source of truth for all analytics data (though it's also capable enough to handle operational workloads). Instead of schemas and tables, Flow defines ",(0,o.jsx)(a.strong,{children:"collections"}),". These collections are conceptually similar to database tables in the sense that they are containers for data with an associated (primary) key. Under the hood, Flow collections are each backed by append-only logs, where each document in the log represents a delta update for a given key."]}),"\n",(0,o.jsx)(a.p,{children:"Collections can be easily materialized into a variety of external systems, such as Snowflake or BigQuery. This creates a table in your OLAP database that is continuously kept up to date with the collection. With Flow, there's no need to schedule exports to these systems, and thus no need to orchestrate the timing of those exports. You can also materialize a given collection into multiple destination systems, so you can always use whichever system is best for the type of queries you want to run."}),"\n",(0,o.jsx)(a.p,{children:"Like Snowflake, Flow uses inexpensive cloud storage for all collection data. It even lets you bring your own storage bucket, so you're always in control. Unlike data warehouses, Flow is able to directly capture data from source systems, and continuously and incrementally keep everything up to date."}),"\n",(0,o.jsx)(a.p,{children:"A common pattern is to use Flow to capture data from multiple different sources and materialize it into a data warehouse. Flow can also help you avoid expenses associated with queries you frequently pull from a data warehouse by keeping an up-to-date view of them where you want it. Because of Flow\u2019s exactly-once processing guarantees, these materialized views are always correct, consistent, and fault-tolerant."})]})}function h(e={}){const{wrapper:a}={...(0,s.R)(),...e.components};return a?(0,o.jsx)(a,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,a,t)=>{t.d(a,{R:()=>i,x:()=>r});var o=t(96540);const s={},n=o.createContext(s);function i(e){const a=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(n.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/c287b26d.f37a2575.js b/pr-preview/pr-1594/assets/js/c287b26d.f37a2575.js deleted file mode 100644 index 418264ad68..0000000000 --- a/pr-preview/pr-1594/assets/js/c287b26d.f37a2575.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6797],{63024:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var r=t(74848),s=t(28453);const i={sidebar_position:5},o="Google Cloud SQL for MySQL",a={id:"reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql",title:"Google Cloud SQL for MySQL",description:"This is a change data capture (CDC) connector that captures change events from a MySQL database via the Binary Log.",source:"@site/docs/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql.md",sourceDirName:"reference/Connectors/capture-connectors/MySQL",slug:"/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Amazon RDS for MySQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql"},next:{title:"MySQL Batch Query Connector",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Setting the MySQL time zone",id:"setting-the-mysql-time-zone",level:3},{value:"Backfills and performance considerations",id:"backfills-and-performance-considerations",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Troubleshooting Capture Errors",id:"troubleshooting-capture-errors",level:2},{value:"Unsupported Operations",id:"unsupported-operations",level:3},{value:"Data Manipulation Queries",id:"data-manipulation-queries",level:3},{value:"Unhandled Queries",id:"unhandled-queries",level:3},{value:"Metadata Errors",id:"metadata-errors",level:3},{value:"Insufficient Binlog Retention",id:"insufficient-binlog-retention",level:3},{value:"Empty Collection Key",id:"empty-collection-key",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"google-cloud-sql-for-mysql",children:"Google Cloud SQL for MySQL"}),"\n",(0,r.jsxs)(n.p,{children:["This is a change data capture (CDC) connector that captures change events from a MySQL database via the ",(0,r.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/binary-log.html",children:"Binary Log"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://github.com/estuary/connectors/pkgs/container/source-mysql",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-mysql:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"To use this connector, you'll need a MySQL database setup with the following."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_format",children:(0,r.jsx)(n.code,{children:"binlog_format"})}),"\nsystem variable set to ",(0,r.jsx)(n.code,{children:"ROW"})," (the default value)."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds",children:"Binary log expiration period"})," set to MySQL's default value of 30 days (2592000 seconds) if at all possible.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["This value may be set lower if necessary, but we ",(0,r.jsx)(n.a,{href:"#insufficient-binlog-retention",children:"strongly discourage"})," going below 7 days as this may increase the likelihood of unrecoverable failures."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:['A watermarks table. The watermarks table is a small "scratch space"\nto which the connector occasionally writes a small amount of data (a UUID,\nspecifically) to ensure accuracy when backfilling preexisting table contents.',"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The default name is ",(0,r.jsx)(n.code,{children:'"flow.watermarks"'}),", but this can be overridden in ",(0,r.jsx)(n.code,{children:"config.json"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["A database user with appropriate permissions:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"REPLICATION CLIENT"})," and ",(0,r.jsx)(n.code,{children:"REPLICATION SLAVE"})," privileges."]}),"\n",(0,r.jsx)(n.li,{children:"Permission to insert, update, and delete on the watermarks table."}),"\n",(0,r.jsx)(n.li,{children:"Permission to read the tables being captured."}),"\n",(0,r.jsxs)(n.li,{children:["Permission to read from ",(0,r.jsx)(n.code,{children:"information_schema"})," tables, if automatic discovery is used."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["If the table(s) to be captured include columns of type ",(0,r.jsx)(n.code,{children:"DATETIME"}),", the ",(0,r.jsx)(n.code,{children:"time_zone"})," system variable\nmust be set to an IANA zone name or numerical offset or the capture configured with a ",(0,r.jsx)(n.code,{children:"timezone"})," to use by default."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://cloud.google.com/sql/docs/mysql/configure-ip#add",children:"Enable public IP on your database"})," and add ",(0,r.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"})," as authorized IP addresses."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Follow the guide to ",(0,r.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,r.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,r.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,r.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Set the instance's ",(0,r.jsx)(n.code,{children:"binlog_expire_logs_seconds"})," ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/sql/docs/mysql/flags?_ga=2.8077298.-1359189752.1655241239&_gac=1.226418280.1655849730.Cj0KCQjw2MWVBhCQARIsAIjbwoOczKklaVaykkUiCMZ4n3_jVtsInpmlugWN92zx6rL5i7zTxm3AALIaAv6nEALw_wcB",children:"flag"}),"\nto ",(0,r.jsx)(n.code,{children:"2592000"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Using ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/sql/docs/mysql/connect-instance-cloud-shell",children:"Google Cloud Shell"})," or your preferred client, create the watermarks table."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"CREATE DATABASE IF NOT EXISTS flow;\nCREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"4",children:["\n",(0,r.jsxs)(n.li,{children:["Create the ",(0,r.jsx)(n.code,{children:"flow_capture"})," user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"SELECT"})," permission can be restricted to just the tables that need to be\ncaptured, but automatic discovery requires ",(0,r.jsx)(n.code,{children:"information_schema"})," access as well."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"CREATE USER IF NOT EXISTS flow_capture\n IDENTIFIED BY 'secret'\n COMMENT 'User account for Flow MySQL data capture';\nGRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';\nGRANT SELECT ON *.* TO 'flow_capture';\nGRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"5",children:["\n",(0,r.jsxs)(n.li,{children:["In the Cloud Console, note the instance's host under Public IP Address. Its port will always be ",(0,r.jsx)(n.code,{children:"3306"}),".\nTogether, you'll use the host",":port"," as the ",(0,r.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"setting-the-mysql-time-zone",children:"Setting the MySQL time zone"}),"\n",(0,r.jsxs)(n.p,{children:["MySQL's ",(0,r.jsxs)(n.a,{href:"https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_time_zone",children:[(0,r.jsx)(n.code,{children:"time_zone"})," server system variable"]})," is set to ",(0,r.jsx)(n.code,{children:"SYSTEM"})," by default."]}),"\n",(0,r.jsxs)(n.p,{children:["If you intend to capture tables including columns of the type ",(0,r.jsx)(n.code,{children:"DATETIME"}),",\nand ",(0,r.jsx)(n.code,{children:"time_zone"})," is set to ",(0,r.jsx)(n.code,{children:"SYSTEM"}),",\nFlow won't be able to detect the time zone and convert the column to ",(0,r.jsx)(n.a,{href:"https://www.rfc-editor.org/rfc/rfc3339",children:"RFC3339 format"}),".\nTo avoid this, you must explicitly set the time zone for your database."]}),"\n",(0,r.jsx)(n.p,{children:"You can:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Specify a numerical offset from UTC."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["For MySQL version 8.0.19 or higher, values from ",(0,r.jsx)(n.code,{children:"-13:59"})," to ",(0,r.jsx)(n.code,{children:"+14:00"}),", inclusive, are permitted."]}),"\n",(0,r.jsxs)(n.li,{children:["Prior to MySQL 8.0.19, values from ",(0,r.jsx)(n.code,{children:"-12:59"})," to ",(0,r.jsx)(n.code,{children:"+13:00"}),", inclusive, are permitted"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Specify a named timezone in ",(0,r.jsx)(n.a,{href:"https://www.iana.org/time-zones",children:"IANA timezone format"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["If you're using Amazon Aurora, create or modify the ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html",children:"DB cluster parameter group"}),"\nassociated with your MySQL database.\n",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html#USER_WorkingWithParamGroups.ModifyingCluster",children:"Set"})," the ",(0,r.jsx)(n.code,{children:"time_zone"})," parameter to the correct value."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For example, if you're located in New Jersey, USA, you could set ",(0,r.jsx)(n.code,{children:"time_zone"})," to ",(0,r.jsx)(n.code,{children:"-05:00"})," or ",(0,r.jsx)(n.code,{children:"-04:00"}),", depending on the time of year.\nBecause this region observes daylight savings time, you'd be responsible for changing the offset.\nAlternatively, you could set ",(0,r.jsx)(n.code,{children:"time_zone"})," to ",(0,r.jsx)(n.code,{children:"America/New_York"}),", and time changes would occur automatically."]}),"\n",(0,r.jsxs)(n.p,{children:["If using IANA time zones, your database must include time zone tables. ",(0,r.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html",children:"Learn more in the MySQL docs"}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"Capture Timezone Configuration",type:"tip",children:(0,r.jsxs)(n.p,{children:["If you are unable to set the ",(0,r.jsx)(n.code,{children:"time_zone"})," in the database and need to capture tables with ",(0,r.jsx)(n.code,{children:"DATETIME"})," columns, the capture can be configured to assume a time zone using the ",(0,r.jsx)(n.code,{children:"timezone"})," configuration property (see below). The ",(0,r.jsx)(n.code,{children:"timezone"})," configuration property can be set as a numerical offset or IANA timezone format."]})}),"\n",(0,r.jsx)(n.h2,{id:"backfills-and-performance-considerations",children:"Backfills and performance considerations"}),"\n",(0,r.jsxs)(n.p,{children:["When the a MySQL capture is initiated, by default, the connector first ",(0,r.jsx)(n.em,{children:"backfills"}),", or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis."]}),"\n",(0,r.jsx)(n.p,{children:"This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow.\nHowever, you may find it appropriate to skip the backfill, especially for extremely large tables."}),"\n",(0,r.jsxs)(n.p,{children:["In this case, you may turn of backfilling on a per-table basis. See ",(0,r.jsx)(n.a,{href:"#properties",children:"properties"})," for details."]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the MySQL source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/address"})})}),(0,r.jsx)(n.td,{children:"Server Address"}),(0,r.jsxs)(n.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/user"})})}),(0,r.jsx)(n.td,{children:"Login User"}),(0,r.jsx)(n.td,{children:"The database user to authenticate as."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsxs)(n.td,{children:["Required, ",(0,r.jsx)(n.code,{children:'"flow_capture"'})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/password"})})}),(0,r.jsx)(n.td,{children:"Login Password"}),(0,r.jsx)(n.td,{children:"Password for the specified database user."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/timezone"})}),(0,r.jsx)(n.td,{children:"Timezone"}),(0,r.jsxs)(n.td,{children:["Timezone to use when capturing datetime columns. Should normally be left blank to use the database's ",(0,r.jsx)(n.code,{children:"'time_zone'"})," system variable. Only required if the ",(0,r.jsx)(n.code,{children:"'time_zone'"})," system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH",":MM"," offset. Takes precedence over the ",(0,r.jsx)(n.code,{children:"'time_zone'"})," system variable if both are set."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/watermarks_table"})}),(0,r.jsx)(n.td,{children:"Watermarks Table Name"}),(0,r.jsx)(n.td,{children:"The name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"flow.watermarks"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/dbname"})}),(0,r.jsx)(n.td,{children:"Database Name"}),(0,r.jsx)(n.td,{children:"The name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"mysql"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/node_id"})}),(0,r.jsx)(n.td,{children:"Node ID"}),(0,r.jsx)(n.td,{children:"Node ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/skip_backfills"})}),(0,r.jsx)(n.td,{children:"Skip Backfills"}),(0,r.jsx)(n.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,r.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,r.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"131072"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/skip_binlog_retention_check"})}),(0,r.jsx)(n.td,{children:"Skip Binlog Retention Sanity Check"}),(0,r.jsx)(n.td,{children:"Bypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need."}),(0,r.jsx)(n.td,{children:"boolean"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/namespace"})})}),(0,r.jsx)(n.td,{children:"Namespace"}),(0,r.jsxs)(n.td,{children:["The ",(0,r.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/show-databases.html",children:"database/schema"})," in which the table resides."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Name of the table to be captured from the database."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync mode"}),(0,r.jsxs)(n.td,{children:["Connection method. Always set to ",(0,r.jsx)(n.code,{children:"incremental"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsxs)(n.p,{children:["When you configure this connector in the web application, the automatic ",(0,r.jsx)(n.strong,{children:"discovery"})," process sets up a binding for ",(0,r.jsx)(n.em,{children:"most"})," tables it finds in your database, but there are exceptions."]}),(0,r.jsxs)(n.p,{children:["Tables in the MySQL system schemas ",(0,r.jsx)(n.code,{children:"information_schema"}),", ",(0,r.jsx)(n.code,{children:"mysql"}),", ",(0,r.jsx)(n.code,{children:"performance_schema"}),", and ",(0,r.jsx)(n.code,{children:"sys"})," will not be discovered.\nYou can add bindings for such tables manually."]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-mysql:dev\n config:\n address: "127.0.0.1:3306"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n namespace: ${TABLE_NAMESPACE}\n stream: ${TABLE_NAME}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,r.jsx)(n.h2,{id:"troubleshooting-capture-errors",children:"Troubleshooting Capture Errors"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"source-mysql"})," connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations:"]}),"\n",(0,r.jsx)(n.h3,{id:"unsupported-operations",children:"Unsupported Operations"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture is failing with an ",(0,r.jsx)(n.code,{children:'"unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE"'})," error, this indicates that such an operation has taken place impacting a table which is currently being captured."]}),"\n",(0,r.jsxs)(n.p,{children:["In the case of ",(0,r.jsx)(n.code,{children:"DROP TABLE"})," and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety)."]}),"\n",(0,r.jsxs)(n.p,{children:["In the case of ",(0,r.jsx)(n.code,{children:"ALTER TABLE"})," we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a ",(0,r.jsx)(n.code,{children:"DROP"})," or ",(0,r.jsx)(n.code,{children:"TRUNCATE TABLE"}),", but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did."]}),"\n",(0,r.jsx)(n.h3,{id:"data-manipulation-queries",children:"Data Manipulation Queries"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture is failing with an ",(0,r.jsx)(n.code,{children:'"unsupported DML query"'})," error, this means that an ",(0,r.jsx)(n.code,{children:"INSERT"}),", ",(0,r.jsx)(n.code,{children:"UPDATE"}),", ",(0,r.jsx)(n.code,{children:"DELETE"})," or other data manipulation query is present in the MySQL binlog. This should generally not happen if ",(0,r.jsx)(n.code,{children:"binlog_format = 'ROW'"})," as described in the ",(0,r.jsx)(n.a,{href:"#prerequisites",children:"Prerequisites"})," section."]}),"\n",(0,r.jsxs)(n.p,{children:["Resolving this error requires fixing the ",(0,r.jsx)(n.code,{children:"binlog_format"})," system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an ",(0,r.jsx)(n.code,{children:"INSERT"}),"/",(0,r.jsx)(n.code,{children:"DELETE"})," query it may suffice to remove the capture binding for the offending table and then re-add it."]}),"\n",(0,r.jsx)(n.h3,{id:"unhandled-queries",children:"Unhandled Queries"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture is failing with an ",(0,r.jsx)(n.code,{children:'"unhandled query"'})," error, some SQL query is present in the binlog which the connector does not (currently) understand."]}),"\n",(0,r.jsxs)(n.p,{children:["In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported ",(0,r.jsx)(n.a,{href:"#data-manipulation-queries",children:"DML Query"}),", an unsupported ",(0,r.jsx)(n.a,{href:"#unsupported-operations",children:"Table Operation"}),", or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog."]}),"\n",(0,r.jsx)(n.h3,{id:"metadata-errors",children:"Metadata Errors"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture is failing with a ",(0,r.jsx)(n.code,{children:'"metadata error"'})," then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes."]}),"\n",(0,r.jsx)(n.p,{children:"This should never happen, and most likely means that the MySQL binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety)."}),"\n",(0,r.jsx)(n.h3,{id:"insufficient-binlog-retention",children:"Insufficient Binlog Retention"}),"\n",(0,r.jsxs)(n.p,{children:["If your capture fails with a ",(0,r.jsx)(n.code,{children:'"binlog retention period is too short"'})," error, it is informing you that the MySQL binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from."]}),"\n",(0,r.jsx)(n.p,{children:"(If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.)"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:'"binlog retention period is too short"'})," error should normally be fixed by setting ",(0,r.jsx)(n.code,{children:"binlog_expire_logs_seconds = 2592000"})," as described in the ",(0,r.jsx)(n.a,{href:"#prerequisites",children:"Prerequisites"})," section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the ",(0,r.jsx)(n.code,{children:"skip_binlog_retention_check"})," configuration option to disable this safety."]}),"\n",(0,r.jsx)(n.h3,{id:"empty-collection-key",children:"Empty Collection Key"}),"\n",(0,r.jsxs)(n.p,{children:["Every Flow collection must declare a ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#keys",children:"key"})," which is used to group its documents. When testing your capture, if you encounter an error indicating collection key cannot be empty, you will need to either add a key to the table in your source, or manually edit the generated specification and specify keys for the collection before publishing to the catalog as documented ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#empty-keys",children:"here"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var r=t(96540);const s={},i=r.createContext(s);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/c521cd6b.3bb8b1c4.js b/pr-preview/pr-1594/assets/js/c521cd6b.3bb8b1c4.js deleted file mode 100644 index 0d9f86d6dd..0000000000 --- a/pr-preview/pr-1594/assets/js/c521cd6b.3bb8b1c4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1757],{4201:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var n=s(74848),a=s(28453);const o={},i="Logs and statistics",r={id:"concepts/advanced/logs-stats",title:"Logs and statistics",description:"Flow collects logs and statistics of catalog tasks to aid in debugging and refinement of your workflows.",source:"@site/docs/concepts/advanced/logs-stats.md",sourceDirName:"concepts/advanced",slug:"/concepts/advanced/logs-stats",permalink:"/pr-preview/pr-1594/concepts/advanced/logs-stats",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/advanced/logs-stats.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Journals",permalink:"/pr-preview/pr-1594/concepts/advanced/journals"},next:{title:"Projections",permalink:"/pr-preview/pr-1594/concepts/advanced/projections"}},l={},c=[{value:"Logs",id:"logs",level:2},{value:"Log level",id:"log-level",level:3},{value:"Statistics",id:"statistics",level:2},{value:"Working with logs and statistics",id:"working-with-logs-and-statistics",level:2}];function d(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"logs-and-statistics",children:"Logs and statistics"}),"\n",(0,n.jsx)(t.p,{children:"Flow collects logs and statistics of catalog tasks to aid in debugging and refinement of your workflows."}),"\n",(0,n.jsx)(t.h2,{id:"logs",children:"Logs"}),"\n",(0,n.jsxs)(t.p,{children:["Each organization that uses Flow has a ",(0,n.jsx)(t.code,{children:"logs"})," collection under the global ",(0,n.jsx)(t.code,{children:"ops"})," prefix.\nFor the organization Acme Co, it would have the name ",(0,n.jsx)(t.code,{children:"ops/acmeCo/logs"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["These can be thought of as standard application logs:\nthey store information about events that occur at runtime.\nThey\u2019re distinct from ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards#recovery-logs",children:"recovery logs"}),", which track the state of various task shards."]}),"\n",(0,n.jsxs)(t.p,{children:["Regardless of how many Data Flows your organization has, all logs are stored in the same collection,\nwhich is read-only and ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections#logical-partitions",children:"logically partitioned"})," on ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/#tasks",children:"tasks"}),".\nLogs are collected from events that occur within the Flow runtime,\nas well as the capture and materialization ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/connectors",children:"connectors"})," your Data Flow is using."]}),"\n",(0,n.jsx)(t.h3,{id:"log-level",children:"Log level"}),"\n",(0,n.jsx)(t.p,{children:"You can set the log level for each catalog task to control the level of detail at which logs are collected for that task.\nThe available levels, listed from least to most detailed, are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"error"}),": Non-recoverable errors from the Flow runtime or connector that are critical to know about"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"warn"}),": Errors that can be re-tried, but likely require investigation"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"info"}),": Task lifecycle events, or information you might want to collect on an ongoing basis"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"debug"}),": Details that will help debug an issue with a task"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"trace"}),": Maximum level of detail that may yield gigabytes of logs"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["The default log level is ",(0,n.jsx)(t.code,{children:"info"}),". You can change a task\u2019s log level by adding the ",(0,n.jsx)(t.code,{children:"shards"})," keyword to its definition in the catalog spec:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-yaml",children:"materializations:\n acmeCo/debugMaterialization:\n shards:\n logLevel: debug\n endpoint:\n {}\n"})}),"\n",(0,n.jsx)(t.h2,{id:"statistics",children:"Statistics"}),"\n",(0,n.jsxs)(t.p,{children:["Each organization that uses Flow has a ",(0,n.jsx)(t.code,{children:"stats"})," collection under the global ",(0,n.jsx)(t.code,{children:"ops"})," prefix.\nFor the organization Acme Co, it would have the name ",(0,n.jsx)(t.code,{children:"ops/acmeCo/stats"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Regardless of how many Data Flows your organization has, all stats are stored in the same collection,\nwhich is read-only and ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections#logical-partitions",children:"logically partitioned"})," on ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/#tasks",children:"tasks"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["A new document is published to the ",(0,n.jsx)(t.code,{children:"stats"})," collection for each task transaction.\nEach document includes information about the time and quantity of data inputs and outputs.\nStatistics vary by task type (capture, materialization, or derivation)."]}),"\n",(0,n.jsx)(t.p,{children:"Use stats to:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Evaluate the data throughput of a task; for example, a derivation."}),"\n",(0,n.jsx)(t.li,{children:"Compare a data throughput of a task between platforms; for example, compare reported data capture by Flow to detected change rate in a source system."}),"\n",(0,n.jsx)(t.li,{children:"Access the same information used by Estuary for billing."}),"\n",(0,n.jsx)(t.li,{children:"Optimize your tasks for increased efficiency."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsxs)(t.a,{href:"/pr-preview/pr-1594/reference/working-logs-stats#available-statistics",children:["See a detailed table of the properties included in ",(0,n.jsx)(t.code,{children:"stats"})," documents."]})}),"\n",(0,n.jsx)(t.h2,{id:"working-with-logs-and-statistics",children:"Working with logs and statistics"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/working-logs-stats",children:"Learn more about working with logs and statistics"})})]})}function h(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>r});var n=s(96540);const a={},o=n.createContext(a);function i(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/c5a10934.815f7080.js b/pr-preview/pr-1594/assets/js/c5a10934.815f7080.js deleted file mode 100644 index b5b3c0309d..0000000000 --- a/pr-preview/pr-1594/assets/js/c5a10934.815f7080.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6361],{54460:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var s=t(74848),r=t(28453);const i={},c="HubSpot ( Real-Time )",o={id:"reference/Connectors/capture-connectors/hubspot-real-time",title:"HubSpot ( Real-Time )",description:"This connector captures data from HubSpot into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/hubspot-real-time.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/hubspot-real-time",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/hubspot-real-time.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Hubspot",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot"},next:{title:"Instagram",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram"}},l={},d=[{value:"Supported HubSpot Resources",id:"supported-hubspot-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with HubSpot in the Flow web app",id:"using-oauth2-to-authenticate-with-hubspot-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually",id:"configuring-the-connector-specification-manually",level:3},{value:"Setup",id:"setup",level:4},{value:"Configuration",id:"configuration",level:2},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"hubspot--real-time-",children:"HubSpot ( Real-Time )"}),"\n",(0,s.jsx)(n.p,{children:"This connector captures data from HubSpot into Flow collections."}),"\n",(0,s.jsx)(n.h2,{id:"supported-hubspot-resources",children:"Supported HubSpot Resources"}),"\n",(0,s.jsx)(n.p,{children:"The connector automatically discovers bindings for the following HubSpot resources:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.hubspot.com/docs/api/crm/companies",children:"Companies"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.hubspot.com/docs/api/crm/contacts",children:"Contacts"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.hubspot.com/docs/api/crm/crm-custom-objects",children:"Custom Objects"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.hubspot.com/docs/api/crm/deals",children:"Deals"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.hubspot.com/docs/api/crm/engagements",children:"Engagements"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.hubspot.com/docs/methods/email/get_events",children:"Email Events"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.hubspot.com/docs/api/crm/properties",children:"Properties"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.hubspot.com/docs/api/crm/tickets",children:"Tickets"})}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Updates for ",(0,s.jsx)(n.strong,{children:"Email Events"})," and ",(0,s.jsx)(n.strong,{children:"Custom Objects"})," may be delayed by up to 5 minutes due to\neventual consistency of the HubSpot API."]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"There are two ways to authenticate with HubSpot when capturing data: using OAuth2, or with a private app access token.\nTheir prerequisites differ."}),"\n",(0,s.jsx)(n.p,{children:"OAuth is recommended for simplicity in the Flow web app."}),"\n",(0,s.jsx)(n.h3,{id:"using-oauth2-to-authenticate-with-hubspot-in-the-flow-web-app",children:"Using OAuth2 to authenticate with HubSpot in the Flow web app"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A HubSpot account"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"configuring-the-connector-specification-manually",children:"Configuring the connector specification manually"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A HubSpot account"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["The access token for an appropriately configured ",(0,s.jsx)(n.a,{href:"https://developers.hubspot.com/docs/api/private-apps",children:"private app"})," on the Hubspot account."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"setup",children:"Setup"}),"\n",(0,s.jsx)(n.p,{children:"To create a private app in HubSpot and generate its access token, do the following."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Ensure that your HubSpot user account has ",(0,s.jsx)(n.a,{href:"https://knowledge.hubspot.com/settings/hubspot-user-permissions-guide#super-admin",children:"super admin"})," privileges."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In HubSpot, create a ",(0,s.jsx)(n.a,{href:"https://developers.hubspot.com/docs/api/private-apps#create-a-private-app",children:"new private app"}),"."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:'Name the app "Estuary Flow," or choose another name that is memorable to you.'}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Grant the new app ",(0,s.jsx)(n.strong,{children:"Read"})," access for all available scopes."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Copy the access token for use in the connector configuration."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the HubSpot Real-Time connector."]}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsx)(n.p,{children:"The following properties reflect the access token authentication method."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials"})})}),(0,s.jsx)(n.td,{children:"Private Application"}),(0,s.jsx)(n.td,{children:"Authenticate with a private app access token"}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials/access_token"})})}),(0,s.jsx)(n.td,{children:"Access Token"}),(0,s.jsx)(n.td,{children:"HubSpot Access token."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials/credentials_title"})})}),(0,s.jsx)(n.td,{children:"Credentials"}),(0,s.jsx)(n.td,{children:"Name of the credentials set"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsxs)(n.td,{children:["Required, ",(0,s.jsx)(n.code,{children:'"Private App Credentials"'})]})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/name"})})}),(0,s.jsx)(n.td,{children:"Data resource"}),(0,s.jsx)(n.td,{children:"Name of the data resource."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/interval"})}),(0,s.jsx)(n.td,{children:"Interval"}),(0,s.jsx)(n.td,{children:"Interval between data syncs"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-hubspot-native:dev\n config:\n credentials_title: Private App Credentials\n access_token: <secret>\n bindings:\n - resource:\n name: companies\n target: ${PREFIX}/${COLLECTION_NAME}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>o});var s=t(96540);const r={},i=s.createContext(r);function c(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/c66ae53f.5559e12c.js b/pr-preview/pr-1594/assets/js/c66ae53f.5559e12c.js deleted file mode 100644 index e01c134e0d..0000000000 --- a/pr-preview/pr-1594/assets/js/c66ae53f.5559e12c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6218],{27168:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>p,toc:()=>i});var o=n(74848),a=n(28453);const r={title:"Markdown page example"},s="Markdown page example",p={type:"mdx",permalink:"/pr-preview/pr-1594/example-markdown",source:"@site/src/pages/example-markdown.md",title:"Markdown page example",description:"You don't need React to write simple standalone pages.",frontMatter:{title:"Markdown page example"},unlisted:!1},c={},i=[];function d(e){const t={h1:"h1",p:"p",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"markdown-page-example",children:"Markdown page example"}),"\n",(0,o.jsx)(t.p,{children:"You don't need React to write simple standalone pages."})]})}function l(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>p});var o=n(96540);const a={},r=o.createContext(a);function s(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function p(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/ca7ab025.09643496.js b/pr-preview/pr-1594/assets/js/ca7ab025.09643496.js deleted file mode 100644 index 9ad333d702..0000000000 --- a/pr-preview/pr-1594/assets/js/ca7ab025.09643496.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9726],{40159:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var o=t(74848),s=t(28453),r=t(11470),i=t(19365);const a={sidebar_position:5},c="Connectors",l={id:"concepts/connectors",title:"Connectors",description:"Connectors bridge the gap between Flow and",source:"@site/docs/concepts/connectors.md",sourceDirName:"concepts",slug:"/concepts/connectors",permalink:"/pr-preview/pr-1594/concepts/connectors",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/connectors.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Materializations",permalink:"/pr-preview/pr-1594/concepts/materialization"},next:{title:"Derivations",permalink:"/pr-preview/pr-1594/concepts/derivations"}},d={},u=[{value:"Using connectors",id:"using-connectors",level:2},{value:"Flow web application",id:"flow-web-application",level:3},{value:"GitOps and flowctl",id:"gitops-and-flowctl",level:3},{value:"Configuration",id:"configuration",level:4},{value:"Protecting secrets",id:"protecting-secrets",level:3},{value:"Example: Protect a configuration",id:"example-protect-a-configuration",level:4},{value:"Example: Protect portions of a configuration",id:"example-protect-portions-of-a-configuration",level:4},{value:"Connecting to endpoints on secure networks",id:"connecting-to-endpoints-on-secure-networks",level:3},{value:"Sample",id:"sample",level:4},{value:"Why an open connector architecture?",id:"why-an-open-connector-architecture",level:2},{value:"Available connectors",id:"available-connectors",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"connectors",children:"Connectors"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Connectors"})," bridge the gap between Flow and\nthe various endpoints from which you capture or to which you materialize data."]}),"\n",(0,o.jsxs)(n.p,{children:["Supported connectors are all available to you within the Flow web application.\nFrom a technical perspective, they're packaged as ",(0,o.jsx)(n.a,{href:"https://github.com/orgs/estuary/packages?repo_name=connectors",children:"Docker images"}),",\neach encapsulating the details of working with a particular external system."]}),"\n",(0,o.jsx)(n.p,{children:"All connectors available in Flow are open-source, and many of them were built by Estuary.\nEstuary connectors are dual-licensed under Apache 2.0 or MIT.\nFlow also supports open-source connectors built by third parties, which Estuary independently tests and may alter slightly\nfor optimal performance within the Flow ecosystem."}),"\n",(0,o.jsxs)(n.p,{children:["Estuary\u2019s vision is to provide a common runtime against which any open connector may be run.\nTo that end, Flow currently supports the\n",(0,o.jsx)(n.a,{href:"https://docs.airbyte.io/understanding-airbyte/airbyte-specification",children:"Airbyte specification"}),"\nas well as Flow\u2019s low-latency gRPC protocols for captures and materializations."]}),"\n",(0,o.jsx)(n.h2,{id:"using-connectors",children:"Using connectors"}),"\n",(0,o.jsx)(n.p,{children:"Most \u2014 if not all \u2014 of your Data Flows will use at least one connector.\nYou configure connectors within capture or materialization specifications.\nWhen you publish one of these entities, you're also deploying all the connectors it uses."}),"\n",(0,o.jsx)(n.p,{children:"You can interact with connectors using either the Flow web application or the flowctl CLI."}),"\n",(0,o.jsx)(n.h3,{id:"flow-web-application",children:"Flow web application"}),"\n",(0,o.jsx)(n.p,{children:"The Flow web application is designed to assist you with connector configuration and deployment.\nIt's a completely no-code experience, but it's compatible with Flow's command line tools, discussed below."}),"\n",(0,o.jsxs)(n.p,{children:["When you add a capture or materialization in the Flow web app, choose the desired data system from the ",(0,o.jsx)(n.strong,{children:"Connector"})," drop-down menu."]}),"\n",(0,o.jsxs)(n.p,{children:["The required fields for the connector appear below the drop-down. When you fill in the fields and click ",(0,o.jsx)(n.strong,{children:"Discover Endpoint"}),',\nFlow automatically "discovers" the data streams or tables \u2014 known as ',(0,o.jsx)(n.strong,{children:"resources"})," \u2014 associated with the endpoint system.\nFrom there, you can refine the configuration, save, and publish the resulting Flow specification."]}),"\n",(0,o.jsx)(n.h3,{id:"gitops-and-flowctl",children:"GitOps and flowctl"}),"\n",(0,o.jsxs)(n.p,{children:["Connectors are packaged as ",(0,o.jsx)(n.a,{href:"https://opencontainers.org/",children:"Open Container"})," (Docker) images,\nand can be tagged, and pulled using\n",(0,o.jsx)(n.a,{href:"https://hub.docker.com/",children:"Docker Hub"}),",\n",(0,o.jsx)(n.a,{href:"https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry",children:"GitHub Container registry"}),",\nor any other public image registry provider."]}),"\n",(0,o.jsx)(n.p,{children:"To interface with a connector, the Flow runtime needs to know:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["The specific image to use, through an image name such as ",(0,o.jsx)(n.code,{children:"ghcr.io/estuary/source-postgres:dev"}),".\nNotice that the image name also conveys the specific image registry and version tag to use."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Endpoint configuration such as a database address and account, with meaning that is specific to the connector."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Resource configuration such as a specific database table to capture, which is also specific to the connector."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"To integrate a connector into your dataflow,\nyou must define all three components within your Flow specification."}),"\n",(0,o.jsxs)(n.p,{children:["The web application is intended to help you generate the Flow specification.\nFrom there, you can use ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/flowctl",children:"flowctl"})," to refine it in your local environment.\nIt's also possible to manually write your Flow specification files, but this isn't the recommended workflow."]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"materializations:\n acmeCo/postgres-views:\n endpoint:\n connector:\n # 1: Provide the image that implements your endpoint connector.\n # The `dev` tag uses the most recent version (the web app chooses this tag automatically)\n image: ghcr.io/estuary/materialize-postgres:dev\n # 2: Provide endpoint configuration that the connector requires.\n config:\n address: localhost:5432\n password: password\n database: postgres\n user: postgres\n bindings:\n - source: acmeCo/products/anvils\n # 3: Provide resource configuration for the binding between the Flow\n # collection and the endpoint resource. This connector interfaces\n # with a SQL database and its resources are database tables. Here,\n # we provide a table to create and materialize which is bound to the\n # `acmeCo/products/anvils` source collection.\n resource:\n table: anvil_products\n\n # Multiple resources can be configured through a single connector.\n # Bind additional collections to tables as part of this connector instance:\n - source: acmeCo/products/TNT\n resource:\n table: tnt_products\n\n - source: acmeCo/customers\n resource:\n table: customers\n"})}),"\n",(0,o.jsx)(n.h4,{id:"configuration",children:"Configuration"}),"\n",(0,o.jsxs)(n.p,{children:["Because connectors interface with external systems, each requires a slightly different ",(0,o.jsx)(n.strong,{children:"endpoint configuration"}),".\nHere you specify information such as a database hostname or account credentials \u2014\nwhatever that specific connector needs to function."]}),"\n",(0,o.jsx)(n.p,{children:"If you're working directly with Flow specification files,\nyou have the option of including the configuration inline\nor storing it in separate files:"}),"\n",(0,o.jsxs)(r.A,{children:[(0,o.jsx)(i.A,{value:"Inline",default:!0,children:(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",metastring:'title="my.flow.yaml"',children:"materializations:\n acmeCo/postgres-views:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-postgres:dev\n config:\n address: localhost:5432\n password: password\n database: postgres\n user: postgres\n bindings: []\n"})})}),(0,o.jsxs)(i.A,{value:"Referenced file",children:[(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",metastring:'title="my.flow.yaml"',children:"materializations:\n acmeCo/postgres-views:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-postgres:dev\n config: my.config.yaml\n bindings: []\n"})}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",metastring:'title="my.config.yaml"',children:"address: localhost:5432\npassword: password\ndatabase: postgres\nuser: postgres\n"})})]})]}),"\n",(0,o.jsx)(n.p,{children:"Storing configuration in separate files serves two important purposes:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Re-use of configuration across multiple captures or materializations"}),"\n",(0,o.jsx)(n.li,{children:"The ability to protect sensitive credentials"}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"protecting-secrets",children:"Protecting secrets"}),"\n",(0,o.jsx)(n.p,{children:"Most endpoint systems require credentials of some kind,\nsuch as a username or password."}),"\n",(0,o.jsx)(n.p,{children:"Sensitive credentials should be protected while not in use.\nThe only time a credential needs to be directly accessed is when Flow initiates the connector."}),"\n",(0,o.jsxs)(n.p,{children:["Flow integrates with Mozilla\u2019s ",(0,o.jsx)(n.a,{href:"https://github.com/mozilla/sops",children:"sops"})," tool,\nwhich can encrypt and protect credentials.\nIt stores a ",(0,o.jsx)(n.code,{children:"sops"}),"-protected configuration in its encrypted form,\nand decrypts it only when invoking a connector on the your behalf."]}),"\n",(0,o.jsxs)(n.p,{children:["sops, short for \u201cSecrets Operations,\u201d is a tool that encrypts the values of a JSON or YAML document\nagainst a key management system (KMS) such as Google Cloud Platform KMS, Azure Key Vault, or Hashicorp Vault.\nEncryption or decryption of a credential with ",(0,o.jsx)(n.code,{children:"sops"})," is an active process:\nit requires that the user (or the Flow runtime identity) have a current authorization to the required KMS,\nand creates a request trace which can be logged and audited.\nIt's also possible to revoke access to the KMS,\nwhich immediately and permanently removes access to the protected credential."]}),"\n",(0,o.jsxs)(n.p,{children:["When you use the Flow web application, Flow automatically\nadds ",(0,o.jsx)(n.code,{children:"sops"})," protection to sensitive fields on your behalf.\nYou can also implement ",(0,o.jsx)(n.code,{children:"sops"})," manually if you are writing a Flow specification locally.\nThe examples below provide a useful reference."]}),"\n",(0,o.jsx)(n.h4,{id:"example-protect-a-configuration",children:"Example: Protect a configuration"}),"\n",(0,o.jsx)(n.p,{children:"Suppose you're given a connector configuration:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",metastring:'title="config.yaml"',children:'host: my.hostname\npassword: "this is sensitive!"\nuser: my-user\n'})}),"\n",(0,o.jsx)(n.p,{children:"You can protect it using a Google KMS key that you own:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"# Login to Google Cloud and initialize application default credentials used by `sops`.\n$ gcloud auth application-default login\n# Use `sops` to re-write the configuration document in place, protecting its values.\n$ sops --encrypt --in-place --gcp-kms projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name config.yaml\n"})}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"sops"})," re-writes the file, wrapping each value in an encrypted envelope and adding a ",(0,o.jsx)(n.code,{children:"sops"})," metadata section:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",metastring:'title="config.yaml"',children:'host: ENC[AES256_GCM,data:K/clly65pThTg2U=,iv:1bNmY8wjtjHFBcXLR1KFcsNMGVXRl5LGTdREUZIgcEU=,tag:5GKcguVPihXXDIM7HHuNnA==,type:str]\npassword: ENC[AES256_GCM,data:IDDY+fl0/gAcsH+6tjRdww+G,iv:Ye8st7zJ9wsMRMs6BoAyWlaJeNc9qeNjkkjo6BPp/tE=,tag:EPS9Unkdg4eAFICGujlTfQ==,type:str]\nuser: ENC[AES256_GCM,data:w+F7MMwQhw==,iv:amHhNCJWAJnJaGujZgjhzVzUZAeSchEpUpBau7RVeCg=,tag:62HguhnnSDqJdKdwYnj7mQ==,type:str]\nsops:\n # Some items omitted for brevity:\n gcp_kms:\n - resource_id: projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name\n created_at: "2022-01-05T15:49:45Z"\n enc: CiQAW8BC2GDYWrJTp3ikVGkTI2XaZc6F4p/d/PCBlczCz8BZiUISSQCnySJKIptagFkIl01uiBQp056c\n lastmodified: "2022-01-05T15:49:45Z"\n version: 3.7.1\n'})}),"\n",(0,o.jsxs)(n.p,{children:["You then use this ",(0,o.jsx)(n.code,{children:"config.yaml"})," within your Flow specification.\nThe Flow runtime knows that this document is protected by ",(0,o.jsx)(n.code,{children:"sops"}),"\nwill continue to store it in its protected form,\nand will attempt a decryption only when invoking a connector on your behalf."]}),"\n",(0,o.jsxs)(n.p,{children:["If you need to make further changes to your configuration,\nedit it using ",(0,o.jsx)(n.code,{children:"sops config.yaml"}),".\nIt's not required to provide the KMS key to use again,\nas ",(0,o.jsx)(n.code,{children:"sops"})," finds it within its metadata section."]}),"\n",(0,o.jsxs)(n.admonition,{type:"important",children:[(0,o.jsx)(n.p,{children:"When deploying catalogs onto the managed Flow runtime,\nyou must grant access to decrypt your GCP KMS key to the Flow runtime service agent,\nwhich is:"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"flow-258@helpful-kingdom-273219.iam.gserviceaccount.com\n"})})]}),"\n",(0,o.jsx)(n.h4,{id:"example-protect-portions-of-a-configuration",children:"Example: Protect portions of a configuration"}),"\n",(0,o.jsxs)(n.p,{children:["Endpoint configurations are typically a mix of sensitive and non-sensitive values.\nIt can be cumbersome when ",(0,o.jsx)(n.code,{children:"sops"})," protects an entire configuration document as you\nlose visibility into non-sensitive values, which you might prefer to store as\ncleartext for ease of use."]}),"\n",(0,o.jsxs)(n.p,{children:["You can use the encrypted-suffix feature of ",(0,o.jsx)(n.code,{children:"sops"})," to selectively protect credentials:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",metastring:'title="config.yaml"',children:'host: my.hostname\npassword_sops: "this is sensitive!"\nuser: my-user\n'})}),"\n",(0,o.jsxs)(n.p,{children:["Notice that ",(0,o.jsx)(n.code,{children:"password"})," in this configuration has an added ",(0,o.jsx)(n.code,{children:"_sops"})," suffix.\nNext, encrypt only values which have that suffix:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:'$ sops --encrypt --in-place --encrypted-suffix "_sops" --gcp-kms projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name config.yaml\n'})}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"sops"}),' re-writes the file, wrapping only values having a "_sops" suffix and adding its ',(0,o.jsx)(n.code,{children:"sops"})," metadata section:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",metastring:'title="config.yaml"',children:'host: my.hostname\npassword_sops: ENC[AES256_GCM,data:dlfidMrHfDxN//nWQTPCsjoG,iv:DHQ5dXhyOOSKI6ZIzcUM67R6DD/2MSE4LENRgOt6GPY=,tag:FNs2pTlzYlagvz7vP/YcIQ==,type:str]\nuser: my-user\nsops:\n # Some items omitted for brevity:\n encrypted_suffix: _sops\n gcp_kms:\n - resource_id: projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name\n created_at: "2022-01-05T16:06:36Z"\n enc: CiQAW8BC2Au779CGdMFUjWPhNleCTAj9rL949sBvPQ6eyAC3EdESSQCnySJKD3eWX8XrtrgHqx327\n lastmodified: "2022-01-05T16:06:37Z"\n version: 3.7.1\n'})}),"\n",(0,o.jsxs)(n.p,{children:["You then use this ",(0,o.jsx)(n.code,{children:"config.yaml"})," within your Flow specification.\nFlow looks for and understands the ",(0,o.jsx)(n.code,{children:"encrypted_suffix"}),",\nand will remove this suffix from configuration keys before passing them to the connector."]}),"\n",(0,o.jsx)(n.h3,{id:"connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"}),"\n",(0,o.jsx)(n.p,{children:"In some cases, your source or destination endpoint may be within a secure network, and you may not be able\nto allow direct access to its port due to your organization's security policy."}),"\n",(0,o.jsxs)(n.admonition,{type:"tip",children:[(0,o.jsxs)(n.p,{children:["If permitted by your organization, a quicker solution is to ",(0,o.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"allowlist the Estuary IP addresses"})]}),(0,o.jsxs)(n.p,{children:["For help completing this task on different cloud hosting platforms,\nsee the documentation for the ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/",children:"connector"})," you're using."]})]}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.a,{href:"https://www.ssh.com/academy/ssh/tunneling/example#local-forwarding",children:"SHH tunneling"}),", or port forwarding,\nprovides a means for Flow to access the port indirectly through an SSH server.\nSSH tunneling is available in Estuary connectors for endpoints that use a network address for connection."]}),"\n",(0,o.jsxs)(n.p,{children:["To set up and configure the SSH server, see the ",(0,o.jsx)(n.a,{href:"../../guides/connect-network/",children:"guide"}),".\nThen, add the appropriate properties when you define the capture or materialization in the Flow web app,\nor add the ",(0,o.jsx)(n.code,{children:"networkTunnel"})," stanza directly to the YAML, as shown below."]}),"\n",(0,o.jsx)(n.h4,{id:"sample",children:"Sample"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",metastring:'title="source-postgres-ssh-tunnel.flow.yaml"',children:"captures:\n acmeCo/postgres-capture-ssh:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-postgres:dev\n config:\n address: 127.0.0.1:5432\n database: flow\n user: flow_user\n password: secret\n networkTunnel:\n sshForwarding:\n # Location of the remote SSH server that supports tunneling.\n # Formatted as ssh://user@hostname[:port].\n sshEndpoint: ssh://sshUser@198.21.98.1:22\n # Private key to connect to the SSH server, formatted as multiline plaintext.\n # Use the YAML literal block style with the indentation indicator.\n # See https://yaml-multiline.info/ for details.\n privateKey: |2\n -----BEGIN RSA PRIVATE KEY-----\n MIICXAIBAAKBgQCJO7G6R+kv2MMS8Suw21sk2twHg8Vog0fjimEWJEwyAfFM/Toi\n EJ6r5RTaSvN++/+MPWUll7sUdOOBZr6ErLKLHEt7uXxusAzOjMxFKZpEARMcjwHY\n v/tN1A2OYU0qay1DOwknEE0i+/Bvf8lMS7VDjHmwRaBtRed/+iAQHf128QIDAQAB\n AoGAGoOUBP+byAjDN8esv1DCPU6jsDf/Tf//RbEYrOR6bDb/3fYW4zn+zgtGih5t\n CR268+dwwWCdXohu5DNrn8qV/Awk7hWp18mlcNyO0skT84zvippe+juQMK4hDQNi\n ywp8mDvKQwpOuzw6wNEitcGDuACx5U/1JEGGmuIRGx2ST5kCQQDsstfWDcYqbdhr\n 5KemOPpu80OtBYzlgpN0iVP/6XW1e5FCRp2ofQKZYXVwu5txKIakjYRruUiiZTza\n QeXRPbp3AkEAlGx6wMe1l9UtAAlkgCFYbuxM+eRD4Gg5qLYFpKNsoINXTnlfDry5\n +1NkuyiQDjzOSPiLZ4Abpf+a+myjOuNL1wJBAOwkdM6aCVT1J9BkW5mrCLY+PgtV\n GT80KTY/d6091fBMKhxL5SheJ4SsRYVFtguL2eA7S5xJSpyxkadRzR0Wj3sCQAvA\n bxO2fE1SRqbbF4cBnOPjd9DNXwZ0miQejWHUwrQO0inXeExNaxhYKQCcnJNUAy1J\n 6JfAT/AbxeSQF3iBKK8CQAt5r/LLEM1/8ekGOvBh8MAQpWBW771QzHUN84SiUd/q\n xR9mfItngPwYJ9d/pTO7u9ZUPHEoat8Ave4waB08DsI=\n -----END RSA PRIVATE KEY-----\n bindings: []\n"})}),"\n",(0,o.jsx)(n.h2,{id:"why-an-open-connector-architecture",children:"Why an open connector architecture?"}),"\n",(0,o.jsx)(n.p,{children:"Historically, data platforms have directly implemented integrations to external systems with which they interact.\nToday, there are simply so many systems and APIs that companies use,\nthat it\u2019s not feasible for a company to provide all possible integrations.\nUsers are forced to wait indefinitely while the platform works through their prioritized integration list."}),"\n",(0,o.jsx)(n.p,{children:"An open connector architecture removes Estuary \u2014 or any company \u2014 as a bottleneck in the development of integrations.\nEstuary contributes open-source connectors to the ecosystem, and in turn is able to leverage connectors implemented by others.\nUsers are empowered to write their own connectors for esoteric systems not already covered by the ecosystem."}),"\n",(0,o.jsx)(n.p,{children:"Furthermore, implementing a Docker-based community specification brings other important qualities to Estuary connectors:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Cross-platform interoperability between Flow, Airbyte, and any other platform that supports the protocol"}),"\n",(0,o.jsx)(n.li,{children:"The abilities to write connectors in any language and run them on any machine"}),"\n",(0,o.jsx)(n.li,{children:"Built-in solutions for version management (through image tags) and distribution"}),"\n",(0,o.jsx)(n.li,{children:"The ability to integrate connectors from different sources at will, without the centralized control of a single company, thanks to container image registries"}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsxs)(n.p,{children:["In order to be reflected in the Flow web app and used on the managed Flow platform,\nconnectors must be reviewed and added by the Estuary team. Have a connector you'd like to add?\n",(0,o.jsx)(n.a,{href:"mailto:info@estuary.dev",children:"Contact us"}),"."]})}),"\n",(0,o.jsx)(n.h2,{id:"available-connectors",children:"Available connectors"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/",children:"Learn about available connectors in the reference section"})})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>i});t(96540);var o=t(34164);const s={tabItem:"tabItem_Ymn6"};var r=t(74848);function i(e){let{children:n,hidden:t,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.A)(s.tabItem,i),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>j});var o=t(96540),s=t(34164),r=t(23104),i=t(56347),a=t(205),c=t(57485),l=t(31682),d=t(70679);function u(e){return o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:o,default:s}}=e;return{value:n,label:t,attributes:o,default:s}}))}(t);return function(e){const n=(0,l.X)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:t}=e;const s=(0,i.W6)(),r=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,c.aZ)(r),(0,o.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(s.location.search);n.set(r,e),s.replace({...s.location,search:n.toString()})}),[r,s])]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,r=h(e),[i,c]=(0,o.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const o=t.find((e=>e.default))??t[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:n,tabValues:r}))),[l,u]=m({queryString:t,groupId:s}),[g,f]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,r]=(0,d.Dv)(t);return[s,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:s}),y=(()=>{const e=l??g;return p({value:e,tabValues:r})?e:null})();(0,a.A)((()=>{y&&c(y)}),[y]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),u(e),f(e)}),[u,f,r]),tabValues:r}}var f=t(92303);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var w=t(74848);function x(e){let{className:n,block:t,selectedValue:o,selectValue:i,tabValues:a}=e;const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,r.a_)(),d=e=>{const n=e.currentTarget,t=c.indexOf(n),s=a[t].value;s!==o&&(l(n),i(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;n=c[t]??c[0];break}case"ArrowLeft":{const t=c.indexOf(e.currentTarget)-1;n=c[t]??c[c.length-1];break}}n?.focus()};return(0,w.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":t},n),children:a.map((e=>{let{value:n,label:t,attributes:r}=e;return(0,w.jsx)("li",{role:"tab",tabIndex:o===n?0:-1,"aria-selected":o===n,ref:e=>c.push(e),onKeyDown:u,onClick:d,...r,className:(0,s.A)("tabs__item",y.tabItem,r?.className,{"tabs__item--active":o===n}),children:t??n},n)}))})}function b(e){let{lazy:n,children:t,selectedValue:s}=e;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===s));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,w.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function v(e){const n=g(e);return(0,w.jsxs)("div",{className:(0,s.A)("tabs-container",y.tabList),children:[(0,w.jsx)(x,{...n,...e}),(0,w.jsx)(b,{...n,...e})]})}function j(e){const n=(0,f.A)();return(0,w.jsx)(v,{...e,children:u(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>a});var o=t(96540);const s={},r=o.createContext(s);function i(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/cad0251b.5b4c1d93.js b/pr-preview/pr-1594/assets/js/cad0251b.5b4c1d93.js deleted file mode 100644 index 53ed90ace7..0000000000 --- a/pr-preview/pr-1594/assets/js/cad0251b.5b4c1d93.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1033],{64129:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>l,frontMatter:()=>o,metadata:()=>c,toc:()=>u});var s=t(74848),i=t(28453);const o={description:"Using conditionals statements to fine-tune reductions",sidebar_position:30},r="Composing with conditionals",c={id:"reference/reduction-strategies/composing-with-conditionals",title:"Composing with conditionals",description:"Using conditionals statements to fine-tune reductions",source:"@site/docs/reference/reduction-strategies/composing-with-conditionals.md",sourceDirName:"reference/reduction-strategies",slug:"/reference/reduction-strategies/composing-with-conditionals",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/reduction-strategies/composing-with-conditionals.md",tags:[],version:"current",sidebarPosition:30,frontMatter:{description:"Using conditionals statements to fine-tune reductions",sidebar_position:30},sidebar:"tutorialSidebar",previous:{title:"sum",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/sum"},next:{title:"Working with logs and statistics",permalink:"/pr-preview/pr-1594/reference/working-logs-stats"}},a={},u=[];function d(e){const n={a:"a",code:"code",h1:"h1",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"composing-with-conditionals",children:"Composing with conditionals"}),"\n",(0,s.jsxs)(n.p,{children:["Reduction strategies are JSON Schema ",(0,s.jsx)(n.a,{href:"https://json-schema.org/draft/2019-09/json-schema-core.html#rfc.section.7.7",children:"annotations"}),". As such, their applicability at a given document location can be controlled through the use of ",(0,s.jsx)(n.a,{href:"https://json-schema.org/understanding-json-schema/reference/conditionals.html",children:"conditional"})," keywords within the schema, like ",(0,s.jsx)(n.code,{children:"oneOf"})," or ",(0,s.jsx)(n.code,{children:"if/then/else"}),". This means Flow\u2019s built-in strategies can be combined with schema conditionals to construct a wider variety of custom reduction behaviors."]}),"\n",(0,s.jsx)(n.p,{children:"For example, here\u2019s a reset-able counter:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'collections:\n - name: example/reductions/sum-reset\n schema:\n type: object\n properties:\n key: { type: string }\n value: { type: number }\n required: [key]\n # Use oneOf to express a tagged union over "action".\n oneOf:\n # When action = reset, reduce by taking this document.\n - properties: { action: { const: reset } }\n reduce: { strategy: lastWriteWins }\n # When action = sum, reduce by summing "value". Keep the LHS "action",\n # preserving a LHS "reset", so that resets are properly associative.\n - properties:\n action:\n const: sum\n reduce: { strategy: firstWriteWins }\n value: { reduce: { strategy: sum } }\n reduce: { strategy: merge }\n key: [/key]\n\ntests:\n "Expect we can sum or reset numbers":\n - ingest:\n collection: example/reductions/sum-reset\n documents:\n - { key: "key", action: sum, value: 5 }\n - { key: "key", action: sum, value: -1.2 }\n - verify:\n collection: example/reductions/sum-reset\n documents:\n - { key: "key", value: 3.8 }\n - ingest:\n collection: example/reductions/sum-reset\n documents:\n - { key: "key", action: reset, value: 0 }\n - { key: "key", action: sum, value: 1.3 }\n - verify:\n collection: example/reductions/sum-reset\n documents:\n - { key: "key", value: 1.3 }\n'})})]})}function l(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>c});var s=t(96540);const i={},o=s.createContext(i);function r(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/caea5a36.df5bb5b9.js b/pr-preview/pr-1594/assets/js/caea5a36.df5bb5b9.js deleted file mode 100644 index 42ad8b3d75..0000000000 --- a/pr-preview/pr-1594/assets/js/caea5a36.df5bb5b9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3740],{51857:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var s=n(74848),i=n(28453);const l={sidebar_position:3},o="Troubleshoot a task with flowctl",r={id:"guides/flowctl/troubleshoot-task",title:"Troubleshoot a task with flowctl",description:"The flowctl logs and stats subcommands have been temporarily disabled while we work on some important changes to our authorization system. We expect to have these working again soon. In the meantime, please reach out to us via Slack or email (support@estuary.dev) if you want any help.",source:"@site/docs/guides/flowctl/troubleshoot-task.md",sourceDirName:"guides/flowctl",slug:"/guides/flowctl/troubleshoot-task",permalink:"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/flowctl/troubleshoot-task.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Create a derivation with flowctl",permalink:"/pr-preview/pr-1594/guides/flowctl/create-derivation"},next:{title:"Configure connections with SSH tunneling",permalink:"/pr-preview/pr-1594/guides/connect-network"}},a={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Print task logs",id:"print-task-logs",level:2},{value:"Change log level",id:"change-log-level",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"troubleshoot-a-task-with-flowctl",children:"Troubleshoot a task with flowctl"}),"\n",(0,s.jsx)(t.admonition,{type:"caution",children:(0,s.jsxs)(t.p,{children:["The flowctl logs and stats subcommands have been temporarily disabled while we work on some important changes to our authorization system. We expect to have these working again soon. In the meantime, please reach out to us via Slack or email (",(0,s.jsx)(t.a,{href:"mailto:support@estuary.dev",children:"support@estuary.dev"}),") if you want any help."]})}),"\n",(0,s.jsxs)(t.p,{children:["flowctl offers the most advanced views of ",(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/logs-stats",children:"task logs"}),".\nIf a task has errors or is failing in the web app, you'll be able to troubleshoot more effectively with flowctl."]}),"\n",(0,s.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(t.p,{children:"To complete this workflow, you need:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["An ",(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/getting-started/installation",children:"Estuary account"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/getting-started/installation#get-started-with-the-flow-cli",children:"flowctl installed locally"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"print-task-logs",children:"Print task logs"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Authorize flowctl."}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Go to the ",(0,s.jsx)(t.a,{href:"https://dashboard.estuary.dev/admin/api",children:"CLI-API tab of the web app"})," and copy your access token."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Run ",(0,s.jsx)(t.code,{children:"flowctl auth token --token <paste-token-here>"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Identify the name of the failing task in the web app; for example ",(0,s.jsx)(t.code,{children:"myOrg/marketing/leads"}),".\nUse the tables on the Captures or Materializations pages of the web app to do so."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Run ",(0,s.jsx)(t.code,{children:"flowctl logs --task <task-name>"}),". You have several options to get more specific. For example:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"flowctl logs --task myOrg/marketing/leads --follow"})," \u2014 If the task hasn't failed, continuously print logs as they're generated."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"flowctl logs --task myOrg/marketing/leads --since 1h"})," \u2014 Print logs from approximately the last hour.\nThe actual output window is approximate and may somewhat exceed this time boundary.\nYou may use any time, for example ",(0,s.jsx)(t.code,{children:"10m"})," and ",(0,s.jsx)(t.code,{children:"1d"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"change-log-level",children:"Change log level"}),"\n",(0,s.jsx)(t.p,{children:"If your logs aren't providing enough detail, you can change the log level."}),"\n",(0,s.jsx)(t.p,{children:"Flow offers several log levels. From least to most detailed, these are:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"error"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"warn"})}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"info"})," (default)"]}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"debug"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"trace"})}),"\n"]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Follow the guide to ",(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally",children:"edit a specification with flowctl"}),"."]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["Working in your local specification file, add the ",(0,s.jsx)(t.code,{children:"shards"})," stanza to the capture or materialization specification:"]}),"\n"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:"myOrg/marketing/leads:\n shards:\n logLevel: debug\n endpoint:\n {}\n"})}),"\n",(0,s.jsxs)(t.ol,{start:"2",children:["\n",(0,s.jsx)(t.li,{children:"Finish the workflow as described, re-publishing the task."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/working-logs-stats",children:"Learn more about working with logs"})})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>r});var s=n(96540);const i={},l=s.createContext(i);function o(e){const t=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/cc0c6179.b428285d.js b/pr-preview/pr-1594/assets/js/cc0c6179.b428285d.js deleted file mode 100644 index 7249fda425..0000000000 --- a/pr-preview/pr-1594/assets/js/cc0c6179.b428285d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7445],{22675:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var r=t(74848),n=t(28453);const i={},l="Allowlisting IP Addresses for Estuary Flow",o={id:"reference/allow-ip-addresses",title:"Allowlisting IP Addresses for Estuary Flow",description:"When configuring systems that interact with Estuary Flow, it's crucial to ensure that the necessary IP addresses are",source:"@site/docs/reference/allow-ip-addresses.md",sourceDirName:"reference",slug:"/reference/allow-ip-addresses",permalink:"/pr-preview/pr-1594/reference/allow-ip-addresses",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/allow-ip-addresses.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Organizing a Flow catalog",permalink:"/pr-preview/pr-1594/reference/organizing-catalogs"},next:{title:"Materialization sync schedule",permalink:"/pr-preview/pr-1594/reference/materialization-sync-schedule"}},a={},d=[{value:"IP Addresses to Allowlist",id:"ip-addresses-to-allowlist",level:2}];function c(e){const s={h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"allowlisting-ip-addresses-for-estuary-flow",children:"Allowlisting IP Addresses for Estuary Flow"}),"\n",(0,r.jsx)(s.p,{children:"When configuring systems that interact with Estuary Flow, it's crucial to ensure that the necessary IP addresses are\nallowlisted. This allows communication between Estuary Flow and your data systems. Below are the IP addresses that must\nbe allowlisted:"}),"\n",(0,r.jsx)(s.h2,{id:"ip-addresses-to-allowlist",children:"IP Addresses to Allowlist"}),"\n",(0,r.jsx)(s.p,{children:"Ensure that the following IP addresses are allowlisted on both the source and destination systems that interact with\nEstuary Flow:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.strong,{children:"34.121.207.128"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.strong,{children:"35.226.75.135"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.strong,{children:"34.68.62.148"})}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,s,t)=>{t.d(s,{R:()=>l,x:()=>o});var r=t(96540);const n={},i=r.createContext(n);function l(e){const s=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),r.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/cce87b67.6c56c4f9.js b/pr-preview/pr-1594/assets/js/cce87b67.6c56c4f9.js deleted file mode 100644 index 8dfc1d647c..0000000000 --- a/pr-preview/pr-1594/assets/js/cce87b67.6c56c4f9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5248],{63711:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var o=n(74848),i=n(28453);const a={sidebar_position:1},r="Editing considerations",s={id:"reference/editing",title:"Editing considerations",description:"You can edit the components of your Data Flows in the Flow web app and with flowctl, but before you do so, it's important to consider the implications of your changes.",source:"@site/docs/reference/editing.md",sourceDirName:"reference",slug:"/reference/editing",permalink:"/pr-preview/pr-1594/reference/editing",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/editing.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Authorizing users and authenticating with Flow",permalink:"/pr-preview/pr-1594/reference/authentication"},next:{title:"Notifications",permalink:"/pr-preview/pr-1594/reference/notifications"}},c={},d=[{value:"How to edit Flow entities",id:"how-to-edit-flow-entities",level:2},{value:"Endpoint configuration changes",id:"endpoint-configuration-changes",level:2},{value:"Managing connector updates",id:"managing-connector-updates",level:2},{value:"Considerations for name changes",id:"considerations-for-name-changes",level:2}];function l(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"editing-considerations",children:"Editing considerations"}),"\n",(0,o.jsx)(t.p,{children:"You can edit the components of your Data Flows in the Flow web app and with flowctl, but before you do so, it's important to consider the implications of your changes."}),"\n",(0,o.jsx)(t.p,{children:"Though Flow entities like captures, collections, and materializations are discrete components, they depend on one another to form complete Data Flows. Changing a configuration or a name can have adverse effects downstream."}),"\n",(0,o.jsx)(t.p,{children:"As you edit, you'll also have to account for any updates to the configuration for the connector used."}),"\n",(0,o.jsx)(t.h2,{id:"how-to-edit-flow-entities",children:"How to edit Flow entities"}),"\n",(0,o.jsxs)(t.p,{children:["In the Flow web app, you can edit captures and materializations, and use the ",(0,o.jsx)(t.strong,{children:"Schema Inference"})," tool to edit collection schemas."]}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/edit-data-flows#edit-a-capture",children:"Editing captures and associated collections"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/edit-data-flows#edit-a-materialization",children:"Editing materializations and associated collections"})}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"With flowctl, you can edit captures, materializations, collections, derivations, and tests.\nYou do this by pulling the desired specification locally, editing, and re-publishing."}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/flowctl#editing-data-flows-with-flowctl",children:"Editing with flowctl"})}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"endpoint-configuration-changes",children:"Endpoint configuration changes"}),"\n",(0,o.jsx)(t.p,{children:"A common reason to edit a capture or materialization to fix a broken endpoint configuration:\nfor example, if a database is now accessed through a different port.\nChanges that prevent Flow from finding the source system immediately cause the capture or materialization to fail."}),"\n",(0,o.jsxs)(t.p,{children:["By contrast, certain credential changes might not cause issues ",(0,o.jsx)(t.em,{children:"unless"})," you attempt to edit the capture or materialization.\nBecause Flow tasks run continuously, the connector doesn't have to re-authenticate and an outdated credential won't cause failure.\nEditing, however, requires the task to re-start, so you'll need to provide current credentials to the endpoint configuration.\nBefore editing, take note of any changed credentials, even if the task is still running successfully."]}),"\n",(0,o.jsx)(t.h2,{id:"managing-connector-updates",children:"Managing connector updates"}),"\n",(0,o.jsx)(t.p,{children:"Connectors are updated periodically. In some cases, required fields are added or removed.\nWhen you edit a capture or materialization, you'll need to update the configuration to comply with the current connector version.\nYou may need to change a property's formatting or add a new field."}),"\n",(0,o.jsx)(t.p,{children:"Additionally, certain updates to capture connectors can affect the way available collections are named.\nAfter editing, the connector may map a data resource to new collection with a different name."}),"\n",(0,o.jsxs)(t.p,{children:["For example, say you have capture that writes to a collection called ",(0,o.jsx)(t.code,{children:"post/fruity_pebbles/nutritionFacts"}),".\nYou begin to edit the capture using the latest version of the connector.\nThe connector detects the same set of nutrition facts data,\nbut maps it to a collection called ",(0,o.jsx)(t.code,{children:"post/fruity_pebbles/nutrition-facts"}),".\nIf you continue to publish the edited capture, both collections will persist,\nbut new data will be written to the new collection."]}),"\n",(0,o.jsx)(t.p,{children:"Before editing, check if a connector has been updated:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["Go to the ",(0,o.jsx)(t.strong,{children:"Admin"})," tab and view the list of connectors. Each tile shows the date it was last updated."]}),"\n",(0,o.jsxs)(t.li,{children:["Check the connector's ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/Connectors/",children:"documentation"}),". Pertinent updates, if any, are noted in the ",(0,o.jsx)(t.strong,{children:"Changelog"})," section."]}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"considerations-for-name-changes",children:"Considerations for name changes"}),"\n",(0,o.jsx)(t.p,{children:"You're not able to change the name of a capture or materialization after you create it.\nYou're also unable to manually change the names of collections;\nhowever, connector updates can cause collection names to change, as discussed above."}),"\n",(0,o.jsxs)(t.p,{children:["It ",(0,o.jsx)(t.em,{children:"is"})," possible to manually change the names of destination resources (tables or analogous data storage units to which collections are written) when editing a materialization.\nYou should avoid doing so unless you want to route future data to a new location."]}),"\n",(0,o.jsx)(t.p,{children:"If you do this, a new resource with that name will be created and the old resource will continue to exist.\nHistorical data will may not be backfilled into the new resource, depending on the connector used."})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>s});var o=n(96540);const i={},a=o.createContext(i);function r(e){const t=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/ce5ba636.9f197015.js b/pr-preview/pr-1594/assets/js/ce5ba636.9f197015.js deleted file mode 100644 index aa78d0f2bf..0000000000 --- a/pr-preview/pr-1594/assets/js/ce5ba636.9f197015.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8904],{98913:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>h,frontMatter:()=>c,metadata:()=>o,toc:()=>l});var t=r(74848),s=r(28453);const c={},i="Intercom",o={id:"reference/Connectors/capture-connectors/intercom",title:"Intercom",description:"This connector captures data from Intercom into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/intercom.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/intercom",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/intercom.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Instagram",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram"},next:{title:"Intercom HTTP Ingest (Webhook)",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest"}},a={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"intercom",children:"Intercom"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from Intercom into Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-intercom:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-intercom:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/intercom/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(n.p,{children:"The following data resources are supported through the Intercom API:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.intercom.com/intercom-api-reference/reference/list-admins",children:"Admins"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.intercom.com/intercom-api-reference/reference/list-companies",children:"Companies"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.intercom.com/intercom-api-reference/reference/list-data-attributes",children:"Company attributes"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.intercom.com/intercom-api-reference/reference/list-attached-segments-1",children:"Company segments"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.intercom.com/intercom-api-reference/reference/list-contacts",children:"Contacts"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.intercom.com/intercom-api-reference/reference/list-data-attributes",children:"Contact attributes"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.intercom.com/intercom-api-reference/reference/list-conversations",children:"Conversations"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.intercom.com/intercom-api-reference/reference/retrieve-a-conversation",children:"Conversation parts"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.intercom.com/intercom-api-reference/reference/list-segments",children:"Segments"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.intercom.com/intercom-api-reference/reference/list-tags-for-an-app",children:"Tags"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developers.intercom.com/intercom-api-reference/reference/list-teams",children:"Teams"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"There are two ways to authenticate with Intercom:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the Flow web app, you sign in directly. You'll need the username and password associated with ",(0,t.jsx)(n.a,{href:"https://www.intercom.com/help/en/articles/280-how-do-i-add-remove-or-delete-a-teammate",children:"a user with full permissions"})," on your Intercom workspace."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Using the flowctl CLI, you configure authentication manually. You'll need the ",(0,t.jsx)(n.a,{href:"https://developers.intercom.com/building-apps/docs/authentication-types#section-how-to-get-your-access-token",children:"access token"})," for you Intercom account."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Intercom source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsx)(n.p,{children:"The properties in the table below reflect manual authentication using the CLI. In the Flow web app,\nyou'll sign in directly and won't need the access token."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/access_token"})})}),(0,t.jsx)(n.td,{children:"Access token"}),(0,t.jsx)(n.td,{children:"Access token for making authenticated requests."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/start_date"})})}),(0,t.jsx)(n.td,{children:"Start date"}),(0,t.jsx)(n.td,{children:"UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Resource from Intercom from which collections are captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.p,{children:"The sample below reflects manual authentication in the CLI."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-intercom:dev\n config:\n access_token: <secret>\n start_date: 2022-06-18T00:00:00Z\n bindings:\n - resource:\n stream: admins\n syncMode: full_refresh\n target: ${PREFIX}/admins\n - resource:\n stream: companies\n syncMode: incremental\n target: ${PREFIX}/companies\n - resource:\n stream: company_segments\n syncMode: incremental\n target: ${PREFIX}/companysegments\n - resource:\n stream: conversations\n syncMode: incremental\n target: ${PREFIX}/conversations\n - resource:\n stream: conversation_parts\n syncMode: incremental\n target: ${PREFIX}/conversationparts\n - resource:\n stream: contacts\n syncMode: incremental\n target: ${PREFIX}/contacts\n - resource:\n stream: company_attributes\n syncMode: full_refresh\n target: ${PREFIX}/companyattributes\n - resource:\n stream: contact_attributes\n syncMode: full_refresh\n target: ${PREFIX}/contactattributes\n - resource:\n stream: segments\n syncMode: incremental\n target: ${PREFIX}/segments\n - resource:\n stream: tags\n syncMode: full_refresh\n target: ${PREFIX}/tags\n - resource:\n stream: teams\n syncMode: full_refresh\n target: ${PREFIX}/teams\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>i,x:()=>o});var t=r(96540);const s={},c=t.createContext(s);function i(e){const n=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/cf864737.d68d694e.js b/pr-preview/pr-1594/assets/js/cf864737.d68d694e.js deleted file mode 100644 index 93a3677716..0000000000 --- a/pr-preview/pr-1594/assets/js/cf864737.d68d694e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4663],{74547:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>d});var n=i(74848),a=i(28453),o=i(61114);const s={sidebar_position:1},r="Catalog",l={id:"concepts/catalogs",title:"Catalog",description:"The catalog is the set of published entities that comprise all Data Flows: captures, materializations, derivations, collections, schemas, tests, and more.",source:"@site/docs/concepts/catalogs.md",sourceDirName:"concepts",slug:"/concepts/catalogs",permalink:"/pr-preview/pr-1594/concepts/catalogs",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/catalogs.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Concepts",permalink:"/pr-preview/pr-1594/concepts/"},next:{title:"Captures",permalink:"/pr-preview/pr-1594/concepts/captures"}},c={},d=[{value:"Data Flows",id:"data-flows",level:2},{value:"Flow specification files",id:"flow-specification-files",level:2},{value:"In the Flow web app",id:"in-the-flow-web-app",level:3},{value:"With flowctl",id:"with-flowctl",level:3},{value:"Namespace",id:"namespace",level:2}];function p(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",strong:"strong",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"catalog",children:"Catalog"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"catalog"})," is the set of published entities that comprise all ",(0,n.jsx)(t.strong,{children:"Data Flows"}),": captures, materializations, derivations, collections, schemas, tests, and more."]}),"\n",(0,n.jsx)(t.h2,{id:"data-flows",children:"Data Flows"}),"\n",(0,n.jsx)(t.p,{children:"You can mix and match catalog entities to create a variety of Data Flows."}),"\n",(0,n.jsx)(t.p,{children:"The simplest Data Flow has just three entities."}),"\n","\n",(0,n.jsx)(o.A,{chart:"\n\tgraph LR;\n\t\tCapture--\x3eCollection;\n Collection--\x3eMaterialization;\n"}),"\n",(0,n.jsx)(t.p,{children:"It may also be more complex, combining multiple entities of each type."}),"\n",(0,n.jsx)(o.A,{chart:"\n\tgraph LR;\n\t\tcapture/two--\x3ecollection/D;\n\t\tcapture/one--\x3ecollection/C;\n\t\tcapture/one--\x3ecollection/A;\n collection/A--\x3ederivation/B;\n collection/D--\x3ederivation/E;\n collection/C--\x3ederivation/E;\n derivation/B--\x3ederivation/E;\n\t\tcollection/D--\x3ematerialization/one;\n\t\tderivation/E--\x3ematerialization/two;\n"}),"\n",(0,n.jsx)(t.h2,{id:"flow-specification-files",children:"Flow specification files"}),"\n",(0,n.jsxs)(t.p,{children:["Catalog entities are defined and described in Flow ",(0,n.jsx)(t.strong,{children:"specification files."}),"\nThese YAML files contain the configuration details that each entity requires."]}),"\n",(0,n.jsxs)(t.p,{children:["You work on specification files as ",(0,n.jsx)(t.strong,{children:"drafts"})," before you publish them to a catalog."]}),"\n",(0,n.jsx)(t.p,{children:"There are two ways to create and work with specification files."}),"\n",(0,n.jsx)(t.h3,{id:"in-the-flow-web-app",children:"In the Flow web app"}),"\n",(0,n.jsxs)(t.p,{children:["You don't need to write or edit the specification files directly \u2014 the web app is designed to generate them for you.\nYou do have the option to review and edit the generated specification as you create captures and materializations using the ",(0,n.jsx)(t.strong,{children:"Catalog Editor"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"with-flowctl",children:"With flowctl"}),"\n",(0,n.jsxs)(t.p,{children:["If you prefer a developer workflow, you can also work with specification files directly in your local environment using ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/flowctl",children:"flowctl"}),". You then ",(0,n.jsx)(t.strong,{children:"publish"})," them back to the catalog."]}),"\n",(0,n.jsxs)(t.p,{children:["A given Data Flow may be described by one specification file, or by many, so long as a top-level file ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/import",children:"imports"})," all the others."]}),"\n",(0,n.jsxs)(t.p,{children:["The files use the extension ",(0,n.jsx)(t.code,{children:"*.flow.yaml"})," or are simply named ",(0,n.jsx)(t.code,{children:"flow.yaml"})," by convention.\nUsing this extension activates Flow's VS Code integration and auto-complete.\nFlow integrates with VS Code for development environment support, like auto-complete,\ntooltips, and inline documentation."]}),"\n",(0,n.jsx)(t.p,{children:"Depending on your Data Flow, you may also have TypeScript modules,\nJSON schemas, or test fixtures."}),"\n",(0,n.jsx)(t.h2,{id:"namespace",children:"Namespace"}),"\n",(0,n.jsxs)(t.p,{children:["All catalog entities (captures, materializations, and collections) are identified by a ",(0,n.jsx)(t.strong,{children:"name"}),"\nsuch as ",(0,n.jsx)(t.code,{children:"acmeCo/teams/manufacturing/anvils"}),". Names have directory-like\nprefixes and every name within Flow is globally unique."]}),"\n",(0,n.jsx)(t.p,{children:"If you've ever used database schemas to organize your tables and authorize access,\nyou can think of name prefixes as being akin to database schemas with arbitrary nesting."}),"\n",(0,n.jsxs)(t.p,{children:["All catalog entities exist together in a single ",(0,n.jsx)(t.strong,{children:"namespace"}),".\nAs a Flow customer, you're provisioned one or more high-level prefixes for your organization.\nFurther division of the namespace into prefixes is up to you."]}),"\n",(0,n.jsxs)(t.p,{children:["Prefixes of the namespace, like ",(0,n.jsx)(t.code,{children:"acmeCo/teams/manufacturing/"}),",\nare the foundation for Flow's ",(0,n.jsx)(t.a,{href:"/pr-preview/pr-1594/reference/authentication",children:"authorization model"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},61114:(e,t,i)=>{i.d(t,{A:()=>s});var n=i(96540),a=i(99702),o=i(74848);a.N.initialize({startOnLoad:!0});const s=e=>{let{chart:t}=e;return(0,n.useEffect)((()=>{a.N.contentLoaded()}),[]),(0,o.jsx)("div",{className:"mermaid",children:t})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/cfe90ca7.b62377d3.js b/pr-preview/pr-1594/assets/js/cfe90ca7.b62377d3.js deleted file mode 100644 index 5a07b778fc..0000000000 --- a/pr-preview/pr-1594/assets/js/cfe90ca7.b62377d3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4169],{70470:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>a,frontMatter:()=>o,metadata:()=>c,toc:()=>h});var r=t(74848),s=t(28453);const o={},i="Google Sheets",c={id:"reference/Connectors/capture-connectors/google-sheets",title:"Google Sheets",description:"This connector captures data from a Google Sheets spreadsheet.",source:"@site/docs/reference/Connectors/capture-connectors/google-sheets.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/google-sheets",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/google-sheets.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Search Console",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console"},next:{title:"Greenhouse",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse"}},l={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with Google in the Flow web app",id:"using-oauth2-to-authenticate-with-google-in-the-flow-web-app",level:3},{value:"Spreadsheet Formatting",id:"spreadsheet-formatting",level:3},{value:"Configuring the connector specification manually",id:"configuring-the-connector-specification-manually",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"google-sheets",children:"Google Sheets"}),"\n",(0,r.jsx)(n.p,{children:"This connector captures data from a Google Sheets spreadsheet."}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://ghcr.io/estuary/source-google-sheets:dev",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-google-sheets:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,r.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/google-sheets",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"There are two ways to authenticate with Google when capturing data from a Sheet: using OAuth2, and manually,by generating a service account key.\nTheir prerequisites differ."}),"\n",(0,r.jsx)(n.p,{children:"OAuth is recommended for simplicity in the Flow web app;\nthe service account key method is the only supported method using the command line."}),"\n",(0,r.jsx)(n.h3,{id:"using-oauth2-to-authenticate-with-google-in-the-flow-web-app",children:"Using OAuth2 to authenticate with Google in the Flow web app"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"A link to a Google spreadsheet. Simply copy the link from your browser."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Your Google account username and password."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"spreadsheet-formatting",children:"Spreadsheet Formatting"}),"\n",(0,r.jsx)(n.p,{children:"For a more efficient usage, the connector expects a few basic formatting rules inside each\nspreadsheet:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["The first row must be frozen and contain header names for each column.","\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"If the first row is not frozen or does not contain header names, header names will\nbe set using high-case alphabet letters (A,B,C,D...Z)."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"Sheet is not a image sheet or contains images."}),"\n",(0,r.jsxs)(n.li,{children:["Sheet is not empty.","\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"If a Sheet is empty, the connector will not break and wait for changes\ninside the Sheet. When new data arrives, you will be prompted by flow to allow\nfor schema changes."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["Sheet does not contain ",(0,r.jsx)(n.code,{children:"formulaValue"})," inside any cell."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"configuring-the-connector-specification-manually",children:"Configuring the connector specification manually"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"A link to a Google spreadsheet. Simply copy the link from your browser."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Google Sheets and Google Drive APIs enabled on your Google account."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"A Google service account with:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"A JSON key generated."}),"\n",(0,r.jsx)(n.li,{children:"Access to the source spreadsheet."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Follow the steps below to meet these prerequisites:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://support.google.com/googleapi/answer/6158841?hl=en",children:"Enable"})," the Google Sheets and Google Drive APIs\nfor the Google ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/storage/docs/projects",children:"project"})," with which your spreadsheet is associated.\n(Unless you actively develop with Google Cloud, you'll likely just have one option)."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Create a ",(0,r.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2/service-account#creatinganaccount",children:"service account and generate a JSON key"}),".\nDuring setup, grant the account the ",(0,r.jsx)(n.strong,{children:"Viewer"})," role on your project.\nYou'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Share your Google spreadsheet with the service account. You may either share the sheet so that anyone with the link can view it,\nor share explicitly with the service account's email address."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors.\nThe values and specification sample below provide configuration details specific to the Google Sheets source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsx)(n.p,{children:"The following properties reflect the Service Account Key authentication method."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/credentials"})})}),(0,r.jsx)(n.td,{children:"Credentials"}),(0,r.jsx)(n.td,{children:"Google API Credentials for connecting to Google Sheets and Google Drive APIs"}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/credentials/auth_type"})})}),(0,r.jsx)(n.td,{children:"Authentication Type"}),(0,r.jsxs)(n.td,{children:["Authentication method. Set to ",(0,r.jsx)(n.code,{children:"Service"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"credentials/service_account_info"})})}),(0,r.jsx)(n.td,{children:"Service Account Credentials"}),(0,r.jsx)(n.td,{children:"Contents of the JSON key file generated during setup."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/spreadsheet_id"})})}),(0,r.jsx)(n.td,{children:"Spreadsheet Link"}),(0,r.jsx)(n.td,{children:"The link to your spreadsheet."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/stream"})})}),(0,r.jsx)(n.td,{children:"Sheet"}),(0,r.jsx)(n.td,{children:"Each sheet in your Google Sheets document."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/syncMode"})})}),(0,r.jsx)(n.td,{children:"Sync mode"}),(0,r.jsxs)(n.td,{children:["Connection method. Always set to ",(0,r.jsx)(n.code,{children:"full_refresh"}),"."]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-google-sheets:dev\n config:\n credentials:\n auth_type: Service\n service_account_info: <secret>\n spreadsheet_id: https://docs.google.com/spreadsheets/...\n bindings:\n - resource:\n stream: Sheet1\n syncMode: full_refresh\n target: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})})]})}function a(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>c});var r=t(96540);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/d14d20ef.fbb1f607.js b/pr-preview/pr-1594/assets/js/d14d20ef.fbb1f607.js deleted file mode 100644 index 8146d787de..0000000000 --- a/pr-preview/pr-1594/assets/js/d14d20ef.fbb1f607.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2061],{77575:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=r(74848),s=r(28453);const i={sidebar_position:5},o="MySQL",a={id:"reference/Connectors/capture-connectors/MySQL/MySQL",title:"MySQL",description:"This is a change data capture (CDC) connector that captures change events from a MySQL database via the Binary Log.",source:"@site/docs/reference/Connectors/capture-connectors/MySQL/MySQL.md",sourceDirName:"reference/Connectors/capture-connectors/MySQL",slug:"/reference/Connectors/capture-connectors/MySQL/",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/MySQL/MySQL.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"MongoDB",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb"},next:{title:"Amazon RDS for MySQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql"}},l={},c=[{value:"Supported platforms",id:"supported-platforms",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Self-hosted MySQL",id:"self-hosted-mysql",level:3},{value:"Amazon Aurora",id:"amazon-aurora",level:3},{value:"Azure Database for MySQL",id:"azure-database-for-mysql",level:3},{value:"Setting the MySQL time zone",id:"setting-the-mysql-time-zone",level:3},{value:"Backfills and performance considerations",id:"backfills-and-performance-considerations",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Troubleshooting Capture Errors",id:"troubleshooting-capture-errors",level:2},{value:"Unsupported Operations",id:"unsupported-operations",level:3},{value:"Data Manipulation Queries",id:"data-manipulation-queries",level:3},{value:"Unhandled Queries",id:"unhandled-queries",level:3},{value:"Metadata Errors",id:"metadata-errors",level:3},{value:"Insufficient Binlog Retention",id:"insufficient-binlog-retention",level:3},{value:"Empty Collection Key",id:"empty-collection-key",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"mysql",children:"MySQL"}),"\n",(0,t.jsxs)(n.p,{children:["This is a change data capture (CDC) connector that captures change events from a MySQL database via the ",(0,t.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/binary-log.html",children:"Binary Log"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://github.com/estuary/connectors/pkgs/container/source-mysql",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-mysql:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-platforms",children:"Supported platforms"}),"\n",(0,t.jsx)(n.p,{children:"This connector supports MySQL on major cloud providers, as well as self-hosted instances."}),"\n",(0,t.jsx)(n.p,{children:"Setup instructions are provided for the following platforms:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#self-hosted-mysql",children:"Self-hosted MySQL"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./amazon-rds-mysql/",children:"Amazon RDS"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#amazon-aurora",children:"Amazon Aurora"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./google-cloud-sql-mysql/",children:"Google Cloud SQL"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#azure-database-for-mysql",children:"Azure Database for MySQL"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, you'll need a MySQL database setup with the following."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_format",children:(0,t.jsx)(n.code,{children:"binlog_format"})}),"\nsystem variable set to ",(0,t.jsx)(n.code,{children:"ROW"})," (the default value)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds",children:"Binary log expiration period"})," set to MySQL's default value of 30 days (2592000 seconds) if at all possible.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["This value may be set lower if necessary, but we ",(0,t.jsx)(n.a,{href:"#insufficient-binlog-retention",children:"strongly discourage"})," going below 7 days as this may increase the likelihood of unrecoverable failures."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:['A watermarks table. The watermarks table is a small "scratch space"\nto which the connector occasionally writes a small amount of data (a UUID,\nspecifically) to ensure accuracy when backfilling preexisting table contents.',"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The default name is ",(0,t.jsx)(n.code,{children:'"flow.watermarks"'}),", but this can be overridden in ",(0,t.jsx)(n.code,{children:"config.json"}),"."]}),"\n",(0,t.jsx)(n.li,{children:"The watermark table will only ever have one row per capture from that database and that row is updated once per 50k rows scanned in each table during the initial backfill for MySQL databases."}),"\n",(0,t.jsx)(n.li,{children:"As each table backfills, the previous watermark record will be replaced. After the initial backfill, watermark records are updated approximately once per minute. At no time does a watermark table have more than one record."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["A database user with appropriate permissions:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"REPLICATION CLIENT"})," and ",(0,t.jsx)(n.code,{children:"REPLICATION SLAVE"})," privileges."]}),"\n",(0,t.jsx)(n.li,{children:"Permission to insert, update, and delete on the watermarks table."}),"\n",(0,t.jsx)(n.li,{children:"Permission to read the tables being captured."}),"\n",(0,t.jsxs)(n.li,{children:["Permission to read from ",(0,t.jsx)(n.code,{children:"information_schema"})," tables, if automatic discovery is used."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["If the table(s) to be captured include columns of type ",(0,t.jsx)(n.code,{children:"DATETIME"}),", the ",(0,t.jsx)(n.code,{children:"time_zone"})," system variable\nmust be set to an IANA zone name or numerical offset or the capture configured with a ",(0,t.jsx)(n.code,{children:"timezone"})," to use by default."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"Configuration Tip",type:"tip",children:(0,t.jsxs)(n.p,{children:["To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see ",(0,t.jsx)(n.a,{href:"/guides/connect-network/",children:"configure connections with SSH tunneling"}),"."]})}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsx)(n.p,{children:"To meet these requirements, follow the steps for your hosting type."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#self-hosted-mysql",children:"Self-hosted MySQL"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./amazon-rds-mysql/",children:"Amazon RDS"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#amazon-aurora",children:"Amazon Aurora"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./google-cloud-sql-mysql/",children:"Google Cloud SQL"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#azure-database-for-mysql",children:"Azure Database for MySQL"})}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"self-hosted-mysql",children:"Self-hosted MySQL"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Create the watermarks table. This table can have any name and be in any database, so long as the capture's ",(0,t.jsx)(n.code,{children:"config.json"})," file is modified accordingly."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE DATABASE IF NOT EXISTS flow;\nCREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsxs)(n.li,{children:["Create the ",(0,t.jsx)(n.code,{children:"flow_capture"})," user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"SELECT"})," permission can be restricted to just the tables that need to be\ncaptured, but automatic discovery requires ",(0,t.jsx)(n.code,{children:"information_schema"})," access as well."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE USER IF NOT EXISTS flow_capture\n IDENTIFIED BY 'secret'\n COMMENT 'User account for Flow MySQL data capture';\nGRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';\nGRANT SELECT ON *.* TO 'flow_capture';\nGRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsx)(n.li,{children:"Configure the binary log to retain data for the default MySQL setting of 30 days, if previously set lower."}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"SET PERSIST binlog_expire_logs_seconds = 2592000;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"4",children:["\n",(0,t.jsxs)(n.li,{children:["Configure the database's time zone. See ",(0,t.jsx)(n.a,{href:"#setting-the-mysql-time-zone",children:"below"})," for more information."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"SET PERSIST time_zone = '-05:00'\n"})}),"\n",(0,t.jsx)(n.h3,{id:"amazon-aurora",children:"Amazon Aurora"}),"\n",(0,t.jsx)(n.p,{children:"You must apply some of the settings to the entire Aurora DB cluster, and others to a database instance within the cluster.\nFor each step, take note of which entity you're working with."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Modifying.html#Aurora.Modifying.Instance",children:"Modify the instance"}),", choosing ",(0,t.jsx)(n.strong,{children:"Publicly accessible"})," in the ",(0,t.jsx)(n.strong,{children:"Connectivity"})," settings."]}),"\n",(0,t.jsxs)(n.li,{children:["Edit the VPC security group associated with your instance, or create a new VPC security group and associate it with the instance as described in ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html#Overview.RDSSecurityGroups.Create",children:"the Amazon documentation"}),". Create a new inbound rule and a new outbound rule that allow all traffic from the ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Follow the guide to ",(0,t.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,t.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create a RDS parameter group to enable replication on your Aurora DB cluster."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html#USER_WorkingWithParamGroups.CreatingCluster",children:"Create a parameter group"}),".\nCreate a unique name and description and set the following properties:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Family"}),": aurora-mysql8.0"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Type"}),": DB ClusterParameter group"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html#USER_WorkingWithParamGroups.ModifyingCluster",children:"Modify the new parameter group"})," and update the following parameters:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"binlog_format: ROW"}),"\n",(0,t.jsx)(n.li,{children:"binlog_row_metadata: FULL"}),"\n",(0,t.jsx)(n.li,{children:"read_only: 0"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html#USER_WorkingWithParamGroups.AssociatingCluster",children:"Associate the parameter group"}),"\nwith the DB cluster.\nWhile you're modifying the cluster, also set ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Managing.Backups.html",children:"Backup Retention Period"})," to 7 days."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Reboot the cluster to allow the changes to take effect."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Switch to your MySQL client. Run the following commands to create a new user for the capture with appropriate permissions,\nand set up the watermarks table:"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE DATABASE IF NOT EXISTS flow;\nCREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);\nCREATE USER IF NOT EXISTS flow_capture\n IDENTIFIED BY 'secret'\n COMMENT 'User account for Flow MySQL data capture';\nGRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';\nGRANT SELECT ON *.* TO 'flow_capture';\nGRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"5",children:["\n",(0,t.jsx)(n.li,{children:"Run the following command to set the binary log retention to 7 days, the maximum value Aurora permits:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CALL mysql.rds_set_configuration('binlog retention hours', 168);\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"6",children:["\n",(0,t.jsxs)(n.li,{children:["In the ",(0,t.jsx)(n.a,{href:"https://console.aws.amazon.com/rds/",children:"RDS console"}),", note the instance's Endpoint and Port. You'll need these for the ",(0,t.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"azure-database-for-mysql",children:"Azure Database for MySQL"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a new ",(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/mysql/flexible-server/how-to-manage-firewall-portal#create-a-firewall-rule-after-server-is-created",children:"firewall rule"})," that grants access to the ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Follow the guide to ",(0,t.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,t.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Set the ",(0,t.jsx)(n.code,{children:"binlog_expire_logs_seconds"})," ",(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/mysql/single-server/concepts-server-parameters#configurable-server-parameters",children:"server perameter"}),"\nto ",(0,t.jsx)(n.code,{children:"2592000"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Using ",(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/mysql/single-server/connect-workbench",children:"MySQL workbench"})," or your preferred client, create the watermarks table."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Your username must be specified in the format ",(0,t.jsx)(n.code,{children:"username@servername"}),"."]})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE DATABASE IF NOT EXISTS flow;\nCREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"4",children:["\n",(0,t.jsxs)(n.li,{children:["Create the ",(0,t.jsx)(n.code,{children:"flow_capture"})," user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"SELECT"})," permission can be restricted to just the tables that need to be\ncaptured, but automatic discovery requires ",(0,t.jsx)(n.code,{children:"information_schema"})," access as well."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE USER IF NOT EXISTS flow_capture\n IDENTIFIED BY 'secret'\n COMMENT 'User account for Flow MySQL data capture';\nGRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';\nGRANT SELECT ON *.* TO 'flow_capture';\nGRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"4",children:["\n",(0,t.jsxs)(n.li,{children:["Note the instance's host under Server name, and the port under Connection Strings (usually ",(0,t.jsx)(n.code,{children:"3306"}),").\nTogether, you'll use the host",":port"," as the ",(0,t.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"setting-the-mysql-time-zone",children:"Setting the MySQL time zone"}),"\n",(0,t.jsxs)(n.p,{children:["MySQL's ",(0,t.jsxs)(n.a,{href:"https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_time_zone",children:[(0,t.jsx)(n.code,{children:"time_zone"})," server system variable"]})," is set to ",(0,t.jsx)(n.code,{children:"SYSTEM"})," by default."]}),"\n",(0,t.jsxs)(n.p,{children:["If you intend to capture tables including columns of the type ",(0,t.jsx)(n.code,{children:"DATETIME"}),",\nand ",(0,t.jsx)(n.code,{children:"time_zone"})," is set to ",(0,t.jsx)(n.code,{children:"SYSTEM"}),",\nFlow won't be able to detect the time zone and convert the column to ",(0,t.jsx)(n.a,{href:"https://www.rfc-editor.org/rfc/rfc3339",children:"RFC3339 format"}),".\nTo avoid this, you must explicitly set the time zone for your database."]}),"\n",(0,t.jsx)(n.p,{children:"You can:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Specify a numerical offset from UTC."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["For MySQL version 8.0.19 or higher, values from ",(0,t.jsx)(n.code,{children:"-13:59"})," to ",(0,t.jsx)(n.code,{children:"+14:00"}),", inclusive, are permitted."]}),"\n",(0,t.jsxs)(n.li,{children:["Prior to MySQL 8.0.19, values from ",(0,t.jsx)(n.code,{children:"-12:59"})," to ",(0,t.jsx)(n.code,{children:"+13:00"}),", inclusive, are permitted"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Specify a named timezone in ",(0,t.jsx)(n.a,{href:"https://www.iana.org/time-zones",children:"IANA timezone format"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If you're using Amazon Aurora, create or modify the ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html",children:"DB cluster parameter group"}),"\nassociated with your MySQL database.\n",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html#USER_WorkingWithParamGroups.ModifyingCluster",children:"Set"})," the ",(0,t.jsx)(n.code,{children:"time_zone"})," parameter to the correct value."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["For example, if you're located in New Jersey, USA, you could set ",(0,t.jsx)(n.code,{children:"time_zone"})," to ",(0,t.jsx)(n.code,{children:"-05:00"})," or ",(0,t.jsx)(n.code,{children:"-04:00"}),", depending on the time of year.\nBecause this region observes daylight savings time, you'd be responsible for changing the offset.\nAlternatively, you could set ",(0,t.jsx)(n.code,{children:"time_zone"})," to ",(0,t.jsx)(n.code,{children:"America/New_York"}),", and time changes would occur automatically."]}),"\n",(0,t.jsxs)(n.p,{children:["If using IANA time zones, your database must include time zone tables. ",(0,t.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html",children:"Learn more in the MySQL docs"}),"."]}),"\n",(0,t.jsx)(n.admonition,{title:"Capture Timezone Configuration",type:"tip",children:(0,t.jsxs)(n.p,{children:["If you are unable to set the ",(0,t.jsx)(n.code,{children:"time_zone"})," in the database and need to capture tables with ",(0,t.jsx)(n.code,{children:"DATETIME"})," columns, the capture can be configured to assume a time zone using the ",(0,t.jsx)(n.code,{children:"timezone"})," configuration property (see below). The ",(0,t.jsx)(n.code,{children:"timezone"})," configuration property can be set as a numerical offset or IANA timezone format."]})}),"\n",(0,t.jsx)(n.h2,{id:"backfills-and-performance-considerations",children:"Backfills and performance considerations"}),"\n",(0,t.jsxs)(n.p,{children:["When the a MySQL capture is initiated, by default, the connector first ",(0,t.jsx)(n.em,{children:"backfills"}),", or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis."]}),"\n",(0,t.jsx)(n.p,{children:"This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow.\nHowever, you may find it appropriate to skip the backfill, especially for extremely large tables."}),"\n",(0,t.jsxs)(n.p,{children:["In this case, you may turn of backfilling on a per-table basis. See ",(0,t.jsx)(n.a,{href:"#properties",children:"properties"})," for details."]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.p,{children:"You configure connectors either in the Flow web app, or by directly editing the catalog specification file."}),"\n",(0,t.jsxs)(n.p,{children:["See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the MySQL source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/address"})})}),(0,t.jsx)(n.td,{children:"Server Address"}),(0,t.jsxs)(n.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/user"})})}),(0,t.jsx)(n.td,{children:"Login User"}),(0,t.jsx)(n.td,{children:"The database user to authenticate as."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsxs)(n.td,{children:["Required, ",(0,t.jsx)(n.code,{children:'"flow_capture"'})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/password"})})}),(0,t.jsx)(n.td,{children:"Login Password"}),(0,t.jsx)(n.td,{children:"Password for the specified database user."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/timezone"})}),(0,t.jsx)(n.td,{children:"Timezone"}),(0,t.jsxs)(n.td,{children:["Timezone to use when capturing datetime columns. Should normally be left blank to use the database's ",(0,t.jsx)(n.code,{children:"'time_zone'"})," system variable. Only required if the ",(0,t.jsx)(n.code,{children:"'time_zone'"})," system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH",":MM"," offset. Takes precedence over the ",(0,t.jsx)(n.code,{children:"'time_zone'"})," system variable if both are set."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/watermarks_table"})}),(0,t.jsx)(n.td,{children:"Watermarks Table Name"}),(0,t.jsx)(n.td,{children:"The name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'"flow.watermarks"'})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/dbname"})}),(0,t.jsx)(n.td,{children:"Database Name"}),(0,t.jsx)(n.td,{children:"The name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'"mysql"'})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/node_id"})}),(0,t.jsx)(n.td,{children:"Node ID"}),(0,t.jsx)(n.td,{children:"Node ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/skip_backfills"})}),(0,t.jsx)(n.td,{children:"Skip Backfills"}),(0,t.jsx)(n.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,t.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,t.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"131072"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/skip_binlog_retention_check"})}),(0,t.jsx)(n.td,{children:"Skip Binlog Retention Sanity Check"}),(0,t.jsx)(n.td,{children:"Bypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need."}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/namespace"})})}),(0,t.jsx)(n.td,{children:"Namespace"}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.a,{href:"https://dev.mysql.com/doc/refman/8.0/en/show-databases.html",children:"database/schema"})," in which the table resides."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Name of the table to be captured from the database."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync mode"}),(0,t.jsxs)(n.td,{children:["Connection method. Always set to ",(0,t.jsx)(n.code,{children:"incremental"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsxs)(n.p,{children:["When you configure this connector in the web application, the automatic ",(0,t.jsx)(n.strong,{children:"discovery"})," process sets up a binding for ",(0,t.jsx)(n.em,{children:"most"})," tables it finds in your database, but there are exceptions."]}),(0,t.jsxs)(n.p,{children:["Tables in the MySQL system schemas ",(0,t.jsx)(n.code,{children:"information_schema"}),", ",(0,t.jsx)(n.code,{children:"mysql"}),", ",(0,t.jsx)(n.code,{children:"performance_schema"}),", and ",(0,t.jsx)(n.code,{children:"sys"})," will not be discovered.\nYou can add bindings for such tables manually."]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-mysql:dev\n config:\n address: "127.0.0.1:3306"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n namespace: ${TABLE_NAMESPACE}\n stream: ${TABLE_NAME}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,t.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting-capture-errors",children:"Troubleshooting Capture Errors"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"source-mysql"})," connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations:"]}),"\n",(0,t.jsx)(n.h3,{id:"unsupported-operations",children:"Unsupported Operations"}),"\n",(0,t.jsxs)(n.p,{children:["If your capture is failing with an ",(0,t.jsx)(n.code,{children:'"unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE"'})," error, this indicates that such an operation has taken place impacting a table which is currently being captured."]}),"\n",(0,t.jsxs)(n.p,{children:["In the case of ",(0,t.jsx)(n.code,{children:"DROP TABLE"})," and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety)."]}),"\n",(0,t.jsxs)(n.p,{children:["In the case of ",(0,t.jsx)(n.code,{children:"ALTER TABLE"})," we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a ",(0,t.jsx)(n.code,{children:"DROP"})," or ",(0,t.jsx)(n.code,{children:"TRUNCATE TABLE"}),", but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did."]}),"\n",(0,t.jsx)(n.h3,{id:"data-manipulation-queries",children:"Data Manipulation Queries"}),"\n",(0,t.jsxs)(n.p,{children:["If your capture is failing with an ",(0,t.jsx)(n.code,{children:'"unsupported DML query"'})," error, this means that an ",(0,t.jsx)(n.code,{children:"INSERT"}),", ",(0,t.jsx)(n.code,{children:"UPDATE"}),", ",(0,t.jsx)(n.code,{children:"DELETE"})," or other data manipulation query is present in the MySQL binlog. This should generally not happen if ",(0,t.jsx)(n.code,{children:"binlog_format = 'ROW'"})," as described in the ",(0,t.jsx)(n.a,{href:"#prerequisites",children:"Prerequisites"})," section."]}),"\n",(0,t.jsxs)(n.p,{children:["Resolving this error requires fixing the ",(0,t.jsx)(n.code,{children:"binlog_format"})," system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an ",(0,t.jsx)(n.code,{children:"INSERT"}),"/",(0,t.jsx)(n.code,{children:"DELETE"})," query it may suffice to remove the capture binding for the offending table and then re-add it."]}),"\n",(0,t.jsx)(n.h3,{id:"unhandled-queries",children:"Unhandled Queries"}),"\n",(0,t.jsxs)(n.p,{children:["If your capture is failing with an ",(0,t.jsx)(n.code,{children:'"unhandled query"'})," error, some SQL query is present in the binlog which the connector does not (currently) understand."]}),"\n",(0,t.jsxs)(n.p,{children:["In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported ",(0,t.jsx)(n.a,{href:"#data-manipulation-queries",children:"DML Query"}),", an unsupported ",(0,t.jsx)(n.a,{href:"#unsupported-operations",children:"Table Operation"}),", or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog."]}),"\n",(0,t.jsx)(n.h3,{id:"metadata-errors",children:"Metadata Errors"}),"\n",(0,t.jsxs)(n.p,{children:["If your capture is failing with a ",(0,t.jsx)(n.code,{children:'"metadata error"'})," then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes."]}),"\n",(0,t.jsx)(n.p,{children:"This should never happen, and most likely means that the MySQL binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety)."}),"\n",(0,t.jsx)(n.h3,{id:"insufficient-binlog-retention",children:"Insufficient Binlog Retention"}),"\n",(0,t.jsxs)(n.p,{children:["If your capture fails with a ",(0,t.jsx)(n.code,{children:'"binlog retention period is too short"'})," error, it is informing you that the MySQL binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from."]}),"\n",(0,t.jsx)(n.p,{children:"(If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.)"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:'"binlog retention period is too short"'})," error should normally be fixed by setting ",(0,t.jsx)(n.code,{children:"binlog_expire_logs_seconds = 2592000"})," as described in the ",(0,t.jsx)(n.a,{href:"#prerequisites",children:"Prerequisites"})," section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the ",(0,t.jsx)(n.code,{children:"skip_binlog_retention_check"})," configuration option to disable this safety."]}),"\n",(0,t.jsx)(n.h3,{id:"empty-collection-key",children:"Empty Collection Key"}),"\n",(0,t.jsxs)(n.p,{children:["Every Flow collection must declare a ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#keys",children:"key"})," which is used to group its documents. When testing your capture, if you encounter an error indicating collection key cannot be empty, you will need to either add a key to the table in your source, or manually edit the generated specification and specify keys for the collection before publishing to the catalog as documented ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections#empty-keys",children:"here"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>a});var t=r(96540);const s={},i=t.createContext(s);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/d273ee52.32015f22.js b/pr-preview/pr-1594/assets/js/d273ee52.32015f22.js deleted file mode 100644 index ba4f54b1e0..0000000000 --- a/pr-preview/pr-1594/assets/js/d273ee52.32015f22.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9156],{70458:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>a});var o=t(74848),r=t(28453);const s={},i="Google Search Console",c={id:"reference/Connectors/capture-connectors/google-search-console",title:"Google Search Console",description:"This connector captures data from Google Search Console into Flow collections via the Google Search Console API.",source:"@site/docs/reference/Connectors/capture-connectors/google-search-console.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/google-search-console",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/google-search-console.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Cloud Pub/Sub",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub"},next:{title:"Google Sheets",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets"}},l={},a=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Custom reports",id:"custom-reports",level:3},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with Google in the Flow web app",id:"using-oauth2-to-authenticate-with-google-in-the-flow-web-app",level:3},{value:"Authenticating manually with a service account key",id:"authenticating-manually-with-a-service-account-key",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"google-search-console",children:"Google Search Console"}),"\n",(0,o.jsxs)(n.p,{children:["This connector captures data from Google Search Console into Flow collections via the ",(0,o.jsx)(n.a,{href:"https://developers.google.com/webmaster-tools/v1/api_reference_index",children:"Google Search Console API"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,o.jsx)(n.a,{href:"https://ghcr.io/estuary/source-google-search-console:dev",children:(0,o.jsx)(n.code,{children:"ghcr.io/estuary/source-google-search-console:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,o.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,o.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/google-search-console/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,o.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,o.jsx)(n.p,{children:"The following data resources are supported:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"https://developers.google.com/webmaster-tools/v1/searchanalytics",children:"Search analytics: all fields"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"This resource contains all data in for your search analytics, and can be large. The following five collections come from queries applied to this dataset."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.li,{children:"Search analytics by country"}),"\n",(0,o.jsx)(n.li,{children:"Search analytics by date"}),"\n",(0,o.jsx)(n.li,{children:"Search analytics by device"}),"\n",(0,o.jsx)(n.li,{children:"Search analytics by page"}),"\n",(0,o.jsx)(n.li,{children:"Search analytics by query"}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://developers.google.com/webmaster-tools/v1/sitemaps",children:"Sitemaps"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://developers.google.com/webmaster-tools/v1/sites",children:"Sites"})}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,o.jsx)(n.h3,{id:"custom-reports",children:"Custom reports"}),"\n",(0,o.jsxs)(n.p,{children:["In addition to the resources listed above, you can add custom reports created with the ",(0,o.jsx)(n.a,{href:"https://support.google.com/analytics/topic/1308589?hl=en&ref_topic=3125765",children:"Google Analytics Search Console integration"}),".\nYou add these to the ",(0,o.jsx)(n.a,{href:"#endpoint",children:"endpoint configuration"})," in the format ",(0,o.jsx)(n.code,{children:'{"name": "<report-name>", "dimensions": ["<dimension-name>", ...]}'}),".\nEach report is mapped to an additional Flow collection."]}),"\n",(0,o.jsx)(n.admonition,{type:"caution",children:(0,o.jsx)(n.p,{children:"Custom reports involve an integration with Google Universal Analytics, which Google will deprecate in July 2023."})}),"\n",(0,o.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,o.jsx)(n.p,{children:"There are two ways to authenticate with Google when capturing data from Google Search Console: using OAuth2, and manually, by generating a service account key.\nTheir prerequisites differ."}),"\n",(0,o.jsx)(n.p,{children:"OAuth2 is recommended for simplicity in the Flow web app;\nthe service account key method is the only supported method using the command line."}),"\n",(0,o.jsx)(n.h3,{id:"using-oauth2-to-authenticate-with-google-in-the-flow-web-app",children:"Using OAuth2 to authenticate with Google in the Flow web app"}),"\n",(0,o.jsx)(n.p,{children:"You'll need:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Google credentials with ",(0,o.jsx)(n.a,{href:"https://support.google.com/webmasters/answer/7687615?hl=en",children:"Owner access"})," on the Google Search Console property. This can be a user account or a ",(0,o.jsx)(n.a,{href:"https://cloud.google.com/iam/docs/service-accounts",children:"service account"}),"."]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"You'll use these credentials to log in to Google in the Flow web app."}),"\n",(0,o.jsx)(n.h3,{id:"authenticating-manually-with-a-service-account-key",children:"Authenticating manually with a service account key"}),"\n",(0,o.jsx)(n.p,{children:"You'll need:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["A Google service account with:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"A JSON key generated."}),"\n",(0,o.jsx)(n.li,{children:"Access to the Google Search Console view through the API."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"Follow the steps below to meet these prerequisites:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Create a ",(0,o.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2/service-account#creatinganaccount",children:"service account and generate a JSON key"}),"\nYou'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.a,{href:"https://developers.google.com/workspace/guides/create-credentials#optional_set_up_domain-wide_delegation_for_a_service_account",children:"Set up domain-wide delegation for the service account"}),"."]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["During this process, grant the ",(0,o.jsx)(n.code,{children:"https://www.googleapis.com/auth/webmasters.readonly"})," OAuth scope."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,o.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,o.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Search Console source connector."]}),"\n",(0,o.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,o.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,o.jsxs)(n.p,{children:["The properties in the table below reflect the manual authentication method.\nIf you're working in the Flow web app, you'll use ",(0,o.jsx)(n.a,{href:"#using-oauth2-to-authenticate-with-google-in-the-flow-web-app",children:"OAuth2"}),",\nso many of these properties aren't required."]}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Property"}),(0,o.jsx)(n.th,{children:"Title"}),(0,o.jsx)(n.th,{children:"Description"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Required/Default"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.code,{children:"/credentials"})})}),(0,o.jsx)(n.td,{children:"Authentication"}),(0,o.jsx)(n.td,{}),(0,o.jsx)(n.td,{children:"object"}),(0,o.jsx)(n.td,{children:"Required"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.code,{children:"/credentials/auth_type"})})}),(0,o.jsx)(n.td,{children:"Authentication Type"}),(0,o.jsxs)(n.td,{children:["Set to ",(0,o.jsx)(n.code,{children:"Service"})," for manual authentication"]}),(0,o.jsx)(n.td,{children:"string"}),(0,o.jsx)(n.td,{children:"Required"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.code,{children:"/credentials/service_account_info"})})}),(0,o.jsx)(n.td,{children:"Service Account JSON Key"}),(0,o.jsx)(n.td,{children:"The JSON key of the service account to use for authorization."}),(0,o.jsx)(n.td,{children:"Required"}),(0,o.jsx)(n.td,{})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.code,{children:"/credentials/email"})})}),(0,o.jsx)(n.td,{children:"Admin Email"}),(0,o.jsxs)(n.td,{children:["The email of your ",(0,o.jsx)(n.a,{href:"https://support.google.com/a/answer/182076?hl=en",children:"Google Workspace administrator"}),". This is likely the account used during setup."]}),(0,o.jsx)(n.td,{}),(0,o.jsx)(n.td,{})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.code,{children:"/custom_reports"})}),(0,o.jsx)(n.td,{children:"Custom Reports (Optional)"}),(0,o.jsxs)(n.td,{children:["A JSON array describing the ",(0,o.jsx)(n.a,{href:"#custom-reports",children:"custom reports"})," you want to sync from Google Search Console."]}),(0,o.jsx)(n.td,{children:"string"}),(0,o.jsx)(n.td,{})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.code,{children:"/end_date"})}),(0,o.jsx)(n.td,{children:"End Date"}),(0,o.jsx)(n.td,{children:"UTC date in the format 2017-01-25. Any data after this date will not be replicated. Must be greater or equal to the start date field."}),(0,o.jsx)(n.td,{children:"string"}),(0,o.jsx)(n.td,{})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.code,{children:"/site_urls"})})}),(0,o.jsx)(n.td,{children:"Website URL"}),(0,o.jsxs)(n.td,{children:["The ",(0,o.jsx)(n.a,{href:"https://support.google.com/webmasters/answer/34592?hl=en",children:"URLs of the website properties"})," attached to your GSC account."]}),(0,o.jsx)(n.td,{children:"array"}),(0,o.jsx)(n.td,{children:"Required"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.code,{children:"/start_date"})})}),(0,o.jsx)(n.td,{children:"Start Date"}),(0,o.jsx)(n.td,{children:"UTC date in the format 2017-01-25. Any data before this date will not be replicated."}),(0,o.jsx)(n.td,{children:"string"}),(0,o.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,o.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Property"}),(0,o.jsx)(n.th,{children:"Title"}),(0,o.jsx)(n.th,{children:"Description"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Required/Default"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.code,{children:"/stream"})})}),(0,o.jsx)(n.td,{children:"Stream"}),(0,o.jsx)(n.td,{children:"Google Search Consol resource from which a collection is captured."}),(0,o.jsx)(n.td,{children:"string"}),(0,o.jsx)(n.td,{children:"Required"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.code,{children:"/syncMode"})})}),(0,o.jsx)(n.td,{children:"Sync Mode"}),(0,o.jsx)(n.td,{children:"Connection method."}),(0,o.jsx)(n.td,{children:"string"}),(0,o.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,o.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,o.jsx)(n.p,{children:"This sample specification reflects the manual authentication method."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-google-search-console:dev\n config:\n credentials:\n auth_type: Service\n service_account_info: <secret>\n email: admin@yourdomain.com\n site_urls: https://yourdomain.com\n start_date: 2022-03-01\n\n bindings:\n - resource:\n stream: sites\n syncMode: full_refresh\n target: ${PREFIX}/sites\n {}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>c});var o=t(96540);const r={},s=o.createContext(r);function i(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/d6385b0d.7ea3f246.js b/pr-preview/pr-1594/assets/js/d6385b0d.7ea3f246.js deleted file mode 100644 index e626e730bb..0000000000 --- a/pr-preview/pr-1594/assets/js/d6385b0d.7ea3f246.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3109],{82749:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var r=t(74848),a=t(28453),s=t(11470),i=t(19365);const l={sidebar_position:4},o="Create a real-time materialized view in PostgreSQL",c={id:"getting-started/tutorials/continuous-materialized-view",title:"Create a real-time materialized view in PostgreSQL",description:"PostgreSQL supports materialized views: database objects that contain the result of a query, usually a focused subset of a large dataset.",source:"@site/docs/getting-started/tutorials/continuous-materialized-view.md",sourceDirName:"getting-started/tutorials",slug:"/getting-started/tutorials/continuous-materialized-view",permalink:"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/getting-started/tutorials/continuous-materialized-view.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Create your first dataflow with Amazon S3 and Snowflake",permalink:"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake"},next:{title:"Implementing Derivations for AcmeBank",permalink:"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank"}},d={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Introduction",id:"introduction",level:2},{value:"Loading the Wikipedia Demo",id:"loading-the-wikipedia-demo",level:2},{value:"Check out the source data",id:"check-out-the-source-data",level:2},{value:"Add a derivation to transform data",id:"add-a-derivation-to-transform-data",level:2},{value:"Create the continuous materialized view",id:"create-the-continuous-materialized-view",level:2},{value:"Explore the results",id:"explore-the-results",level:2},{value:"Resources",id:"resources",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"create-a-real-time-materialized-view-in-postgresql",children:"Create a real-time materialized view in PostgreSQL"}),"\n",(0,r.jsxs)(n.p,{children:["PostgreSQL supports ",(0,r.jsx)(n.em,{children:"materialized views"}),": database objects that contain the result of a query, usually a focused subset of a large dataset."]}),"\n",(0,r.jsx)(n.p,{children:"In this tutorial, you'll use Flow and your Postgres instance to create something that's not possible in Postgres alone:\na materialized view that updates continuously based on a real-time data feed."}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["An Estuary Flow account. If you don't have one, visit the ",(0,r.jsx)(n.a,{href:"https://dashboard.estuary.dev",children:"Flow web app"})," to register for free."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["A GitLab, GitHub, or BitBucket account. You'll use this to log into ",(0,r.jsx)(n.a,{href:"https://www.gitpod.io/",children:"GitPod"}),", the cloud development environment integrated with Flow."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Alternatively, you can complete this tutorial using a local development environment.\nIn that case, you'll need to ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/getting-started/installation#get-started-with-the-flow-cli",children:"install flowctl locally"}),".\nNote that the steps you'll need to take will be different. Refer to this ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/flowctl/create-derivation#create-a-derivation-locally",children:"guide"})," for help."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["A Postgres database set up to ",(0,r.jsx)(n.a,{href:"/reference/Connectors/materialization-connectors/PostgreSQL/#setup",children:"allow connections from Flow"}),".\nAmazon RDS, Amazon Aurora, Google Cloud SQL, Azure Database for PostgreSQL, and self-hosted databases are supported."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,r.jsx)(n.p,{children:"Materialized views in Postgres give you a powerful way narrow down a huge dataset into a compact one that you can easily monitor.\nBut if your data is updating in real-time, traditional materialized views introduce latency. They're batch workflows \u2014 the query is run at a set interval."}),"\n",(0,r.jsxs)(n.p,{children:["To get around this, you'll need to perform a real-time transformation elsewhere.\nFlow ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/#derivations",children:"derivations"})," are a great way to do this."]}),"\n",(0,r.jsxs)(n.p,{children:["For this example, you'll use Estuary's public data collection of recent changes to Wikipedia,\ncaptured from the ",(0,r.jsx)(n.a,{href:"https://www.mediawiki.org/wiki/API:Recent_changes_stream",children:"Wikimedia Foundation's event stream"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"The raw dataset is quite large.\nIt captures every change to the platform \u2014 about 30 per second \u2014 and includes various properties.\nWritten to a Postgres table, it quickly grows to an size that's very expensive to query."}),"\n",(0,r.jsx)(n.p,{children:"First, you'll scope the raw data down to a small fact table with a derivation."}),"\n",(0,r.jsx)(n.p,{children:"You'll then materialize both the raw and transformed datasets to your Postgres instance and compare performance."}),"\n",(0,r.jsx)(n.h2,{id:"loading-the-wikipedia-demo",children:"Loading the Wikipedia Demo"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Navigate to the ",(0,r.jsx)(n.a,{href:"https://dashboard.estuary.dev/welcome?activeTab=demo",children:"Live Demo"})," page and click on ",(0,r.jsx)(n.code,{children:"See the capture"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"After accepting the pop up, Estuary will populate your Sources, Collections and Destinations with the Wikipedia Demo tasks."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"check-out-the-source-data",children:"Check out the source data"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Got the the ",(0,r.jsx)(n.a,{href:"https://dashboard.estuary.dev/collections",children:"collections page"})," of the Flow web app."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Search for ",(0,r.jsx)(n.code,{children:"demo/wikipedia/recentchange"})," and click on its name."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["On the ",(0,r.jsx)(n.strong,{children:"Collection Details"})," page, click the ",(0,r.jsx)(n.strong,{children:"Spec"})," tab."]}),"\n",(0,r.jsx)(n.p,{children:"The collection schema has many fields. Because Wikipedia sees a lot of edits,\nthis would yield a large, unwieldy table in Postgres."}),"\n",(0,r.jsx)(n.admonition,{title:"Tip",type:"info",children:(0,r.jsxs)(n.p,{children:["To save on performance, you can also perform this tutorial using the smaller ",(0,r.jsx)(n.code,{children:"demo/wikipedia/recentchange-sampled"})," collection. Apart from the collection name, all other steps are the same."]})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsxs)(n.em,{children:["Learn more about ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/collections",children:"Flow collections"})," and ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas",children:"schemas"}),"."]})}),"\n",(0,r.jsx)(n.p,{children:"Now you'll create the derivation. A derivation is a new collection that's defined by a transformation.\nFirst, you'll define the collection's schema. Then, you'll write the transformation to shape the data to that schema."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"add-a-derivation-to-transform-data",children:"Add a derivation to transform data"}),"\n",(0,r.jsx)(n.p,{children:"You'll write your derivation using a cloud development environment integrated in the Flow web app."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Go back to the ",(0,r.jsx)(n.a,{href:"https://dashboard.estuary.dev/collections",children:"collections page"})," and click the ",(0,r.jsx)(n.strong,{children:"New Transformation"})," button."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Set the source collection to the raw Wikipedia data. Search for and select ",(0,r.jsx)(n.code,{children:"demo/wikipedia/recentchange"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Set the transformation language to SQL."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Give the derivation a name. From the dropdown, choose the name of your catalog prefix and append a unique name, for example ",(0,r.jsx)(n.code,{children:"yourprefix/wikipedia/user-fact-table"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Proceed to GitPod"})," to create your development environment. Sign in with one of the available account types."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["On the ",(0,r.jsx)(n.strong,{children:"New Workspace"})," screen, keep the ",(0,r.jsx)(n.strong,{children:"Context URL"})," option selected and click ",(0,r.jsx)(n.strong,{children:"Continue."})]}),"\n",(0,r.jsx)(n.p,{children:"A GitPod development environment opens.\nA stubbed-out derivation with a SQL transformation has already been created for you. Next, you'll locate and open the source files."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Each slash-delimited prefix of your derivation name has become a folder. Open the nested folders to locate a ",(0,r.jsx)(n.code,{children:"flow.yaml"})," file."]}),"\n",(0,r.jsxs)(n.p,{children:["Following the example above, you'd open the folders called ",(0,r.jsx)(n.code,{children:"yourprefix"}),", then ",(0,r.jsx)(n.code,{children:"wikipedia"}),", to find the correct ",(0,r.jsx)(n.code,{children:"flow.yaml"})," file. Its contents look like this:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"collections:\n yourprefix/wikipedia/user-fact-table:\n schema:\n properties:\n your_key:\n type: string\n required:\n - your_key\n type: object\n key:\n - /your_key\n derive:\n using:\n sqlite:\n migrations:\n - user-fact-table.migration.0.sql\n transforms:\n - name: recentchange\n source: demo/wikipedia/recentchange\n shuffle: any\n lambda: user-fact-table.lambda.recentchange.sql\n"})}),"\n",(0,r.jsx)(n.p,{children:"Your first order of business is to replace the placeholder schema and collection key.\nAs we saw earlier, the source collection's schema and key caused every Wikipedia event to generate a new document."}),"\n",(0,r.jsx)(n.p,{children:"You'll fix that here."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Replace the existing ",(0,r.jsx)(n.code,{children:"schema"})," and ",(0,r.jsx)(n.code,{children:"key"})," stanzas with the following:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"schema:\n properties:\n edits_this_day:\n reduce:\n strategy: sum\n type: integer\n date:\n format: date\n type: string\n user:\n type: string\n reduce:\n strategy: merge\n required:\n - user\n - date\n - edits_this_day\n type: object\n key:\n - /user\n - /date\n"})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The new schema contains ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas#reduce-annotations",children:"reduction annotations"}),".\nThese sum the changes made by a given user on a given date.\nThe collection is now keyed on each unique combination of user ID and date.\nIt has just three fields:\nthe user, date, and the number of changes made by that user on that date."]}),"\n",(0,r.jsx)(n.p,{children:"Next, you'll add the transformation."}),"\n",(0,r.jsxs)(n.ol,{start:"7",children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.code,{children:"transforms"})," stanza, give the transformation a new name to differentiate it from the name of the source collection. For example:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"transforms:\n - name: dailychangesbyuser\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Update the shuffle key. Since we're working with a large dataset, this ensures that each user is processed by the same task ",(0,r.jsx)(n.strong,{children:"shard"}),".\nThis way, you'll prevent Flow from creating multiple counts for a given user and date combination."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsxs)(n.em,{children:["Learn more about ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations#shuffles",children:"shuffles"}),"."]})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"shuffle: { key: [ /user ] }\n"})}),"\n",(0,r.jsx)(n.p,{children:"Now, the transform needs is the SQL lambda function \u2014 the function that will shape the source data to fit the new schema.\nFlow has created another file to contain it."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Open the file called ",(0,r.jsx)(n.code,{children:"user-fact-table.lambda.recentchange.sql"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Replace its contents with"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"select $user, 1 as edits_this_day, date($meta$dt) as date where $user is not null;\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This creates the ",(0,r.jsx)(n.code,{children:"edits_this_day"})," field we referenced earlier, and starts the counter at 1.\nIt converts the timestamp into a simplified date format.\nFinally, it filters out ",(0,r.jsx)(n.code,{children:"null"})," users (which occasionally occur in the Wikipedia data stream and would violate your schema)."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"All pieces of the derivation are in place. Double check your files against these samples:"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(i.A,{value:"flow.yaml",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:"file=./samples/continuous-materialized-view/flow.yaml",children:"---\ncollections:\n yourprefix/wikipedia/user-fact-table:\n schema:\n properties:\n edits_this_day:\n reduce:\n strategy: sum\n type: integer\n date:\n format: date\n type: string\n user:\n type: string\n reduce:\n strategy: merge\n required:\n - user\n - date\n - edits_this_day\n type: object\n key:\n - /user\n - /date\n derive:\n using:\n sqlite:\n migrations:\n - user-fact-table.migration.0.sql\n transforms:\n - name: dailychangesbyuser\n source: demo/wikipedia/recentchange\n shuffle: { key: [ /user ] }\n lambda: user-fact-table.lambda.recentchange.sql\n"})})}),(0,r.jsx)(i.A,{value:"user-fact-table.lambda.recentchange.sql",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",metastring:"file=./samples/continuous-materialized-view/user-fact-table.lambda.recentchange.sql",children:" select $user, 1 as edits_this_day, date($meta$dt) as date where $user is not null;\n"})})})]}),"\n",(0,r.jsxs)(n.ol,{start:"12",children:["\n",(0,r.jsx)(n.li,{children:"Run the derivation locally and preview its output:"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-console",children:"flowctl preview --source flow.yaml\n"})}),"\n",(0,r.jsx)(n.p,{children:"In your terminal, you'll see JSON documents that look like:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{"date":"2023-07-18","edits_this_day":3,"user":"WMrapids"}\n'})}),"\n",(0,r.jsx)(n.p,{children:"This looks right: it includes the correctly formatted date, the number of edits, and the username.\nYou're ready to publish."}),"\n",(0,r.jsxs)(n.ol,{start:"13",children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Stop the local derivation with ",(0,r.jsx)(n.strong,{children:"Ctrl-C"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Publish the derivation:"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-console",children:"flowctl catalog publish --source flow.yaml\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The message ",(0,r.jsx)(n.code,{children:"Publish successful"})," means you're all set.\nYour transformation will continue in real time based on the raw dataset, which is also updating in real time.\nYou're free to close your GitPod."]}),"\n",(0,r.jsx)(n.h2,{id:"create-the-continuous-materialized-view",children:"Create the continuous materialized view"}),"\n",(0,r.jsx)(n.p,{children:"Now, you'll materialize your new fact table to Postgres. You'll also materialize the source dataset to compare performance."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Go to the ",(0,r.jsx)(n.a,{href:"https://dashboard.estuary.dev/materializations",children:"Destinations page"})," in the Flow web app."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"New Materialization"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Find the ",(0,r.jsx)(n.strong,{children:"PostgreSQL"})," and click ",(0,r.jsx)(n.strong,{children:"Materialization"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Add a unique name for the materialization, for example, ",(0,r.jsx)(n.code,{children:"yourprefix/yourname-materialized-views-demo"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Fill out the ",(0,r.jsx)(n.strong,{children:"Basic Config"})," with:"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"A username and password for the Postgres instance."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Your database host and port."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["The database name (if in doubt, use the default, ",(0,r.jsx)(n.code,{children:"postgres"}),")."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["See the ",(0,r.jsx)(n.a,{href:"https://docs.estuary.dev/reference/Connectors/materialization-connectors/PostgreSQL/",children:"connector documentation"})," if you need help finding these properties."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.strong,{children:"Source Collections"})," browser, search for and add the collection ",(0,r.jsx)(n.code,{children:"demo/wikipedia/recentchange"})," and name the corresponding Postgres Table ",(0,r.jsx)(n.code,{children:"wikipedia_raw"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Also search for and add the collection you just derived, (for example, ",(0,r.jsx)(n.code,{children:"yourprefix/wikipedia/user-fact-table"}),").\nName the corresponding Postgres table ",(0,r.jsx)(n.code,{children:"wikipedia_data_by_user"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Next"})," to test the connection."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Save and Publish"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"explore-the-results",children:"Explore the results"}),"\n",(0,r.jsxs)(n.p,{children:["In your Postgres client of choice, note the size of each table and how they quickly change.\nTry running some basic queries against both and compare performance.\nSee the ",(0,r.jsx)(n.a,{href:"https://estuary.dev/how-to-create-a-real-time-materialized-view-in-postgresql/#step-3-compare-performance/",children:"blog post"})," for ideas."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsxs)(n.strong,{children:["Once you're satisfied, and to prevent continual resource use, disable or delete your materialization from the\n",(0,r.jsx)(n.a,{href:"https://dashboard.estuary.dev/materializations",children:"Destinations page"}),"."]})}),"\n",(0,r.jsx)(n.h2,{id:"resources",children:"Resources"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"About derivations"})})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>i});t(96540);var r=t(34164);const a={tabItem:"tabItem_Ymn6"};var s=t(74848);function i(e){let{children:n,hidden:t,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.A)(a.tabItem,i),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>b});var r=t(96540),a=t(34164),s=t(23104),i=t(56347),l=t(205),o=t(57485),c=t(31682),d=t(70679);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:a}}=e;return{value:n,label:t,attributes:r,default:a}}))}(t);return function(e){const n=(0,c.X)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:t}=e;const a=(0,i.W6)(),s=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,o.aZ)(s),(0,r.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(a.location.search);n.set(s,e),a.replace({...a.location,search:n.toString()})}),[s,a])]}function f(e){const{defaultValue:n,queryString:t=!1,groupId:a}=e,s=u(e),[i,o]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[c,h]=m({queryString:t,groupId:a}),[f,x]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[a,s]=(0,d.Dv)(t);return[a,(0,r.useCallback)((e=>{t&&s.set(e)}),[t,s])]}({groupId:a}),j=(()=>{const e=c??f;return p({value:e,tabValues:s})?e:null})();(0,l.A)((()=>{j&&o(j)}),[j]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),x(e)}),[h,x,s]),tabValues:s}}var x=t(92303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(74848);function w(e){let{className:n,block:t,selectedValue:r,selectValue:i,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),d=e=>{const n=e.currentTarget,t=o.indexOf(n),a=l[t].value;a!==r&&(c(n),i(a))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;n=o[t]??o[0];break}case"ArrowLeft":{const t=o.indexOf(e.currentTarget)-1;n=o[t]??o[o.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":t},n),children:l.map((e=>{let{value:n,label:t,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>o.push(e),onKeyDown:h,onClick:d,...s,className:(0,a.A)("tabs__item",j.tabItem,s?.className,{"tabs__item--active":r===n}),children:t??n},n)}))})}function y(e){let{lazy:n,children:t,selectedValue:a}=e;const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=s.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==a})))})}function v(e){const n=f(e);return(0,g.jsxs)("div",{className:(0,a.A)("tabs-container",j.tabList),children:[(0,g.jsx)(w,{...n,...e}),(0,g.jsx)(y,{...n,...e})]})}function b(e){const n=(0,x.A)();return(0,g.jsx)(v,{...e,children:h(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>l});var r=t(96540);const a={},s=r.createContext(a);function i(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/d7fdcae3.6b5923a2.js b/pr-preview/pr-1594/assets/js/d7fdcae3.6b5923a2.js deleted file mode 100644 index dee0e2e31a..0000000000 --- a/pr-preview/pr-1594/assets/js/d7fdcae3.6b5923a2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1462],{83214:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var s=t(74848),i=t(28453);const a={},r="Materialization sync schedule",o={id:"reference/materialization-sync-schedule",title:"Materialization sync schedule",description:"For some systems you might prefer to have data sync'd less frequently to reduce",source:"@site/docs/reference/materialization-sync-schedule.md",sourceDirName:"reference",slug:"/reference/materialization-sync-schedule",permalink:"/pr-preview/pr-1594/reference/materialization-sync-schedule",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/materialization-sync-schedule.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Allowlisting IP Addresses for Estuary Flow",permalink:"/pr-preview/pr-1594/reference/allow-ip-addresses"}},c={},d=[{value:"How transactions are used to sync data to a destination",id:"how-transactions-are-used-to-sync-data-to-a-destination",level:2},{value:"Configuring a sync schedule",id:"configuring-a-sync-schedule",level:2},{value:"Example: Sync data on a fixed schedule",id:"example-sync-data-on-a-fixed-schedule",level:4},{value:"Example: Sync data faster during certain times of the day",id:"example-sync-data-faster-during-certain-times-of-the-day",level:4},{value:"Example: Sync data faster only on certain days of the week",id:"example-sync-data-faster-only-on-certain-days-of-the-week",level:4},{value:"Timing of syncs",id:"timing-of-syncs",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h4:"h4",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"materialization-sync-schedule",children:"Materialization sync schedule"}),"\n",(0,s.jsx)(n.p,{children:"For some systems you might prefer to have data sync'd less frequently to reduce\ncompute costs in the destination if some delay in new data is acceptable. For\nexample, if the destination system has a minimum compute charge per-query, you\ncould reduce your compute charges by running a single large query every 30\nminutes rather than many smaller queries every few seconds."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Syncing data less frequently to your destination system does ",(0,s.jsx)(n.em,{children:"not"})," effect the\ncost for running the materialization connector within Estuary Flow. But it can\nreduce the costs incurred in the destination from the actions the connector\ntakes to load data to it."]})}),"\n",(0,s.jsx)(n.p,{children:"These materialization connectors support configuring a sync schedule:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery",children:"materialize-bigquery"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks",children:"materialize-databricks"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift",children:"materialize-redshift"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake",children:"materialize-snowflake"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst",children:"materialize-starburst"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"how-transactions-are-used-to-sync-data-to-a-destination",children:"How transactions are used to sync data to a destination"}),"\n",(0,s.jsxs)(n.p,{children:["Estuary Flow processes data in\n",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards#transactions",children:"transactions"}),". Materialization\nconnectors use the ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-protocol",children:"materialization\nprotocol"})," to process transactions and\nsync data to the destination."]}),"\n",(0,s.jsx)(n.p,{children:"When a materialization is caught up to its source collections, it runs frequent\nsmall transactions to keep the destination up to date. In this case every new\ntransaction contains the latest data that needs updated. But when a\nmaterialization is backfilling its source collections, it runs larger\ntransactions to efficiently load the data in bulk to the destination and catch\nup to the latest changes."}),"\n",(0,s.jsxs)(n.p,{children:["The sync schedule is configured in terms of these ",(0,s.jsx)(n.strong,{children:"transactions"}),": For less\nfrequent updates, processing of additional transactions is delayed by some\namount of time. This extra delay is only applied when the materialization is\nfully caught up - backfills always run as fast as possible. And while a\ntransaction is delayed, Estuary Flow will continue batching and combining new\ndocuments so that the next transaction contains all of the latest data."]}),"\n",(0,s.jsxs)(n.p,{children:["You can read about ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#how-continuous-materialization-works",children:"how continuous materialization\nworks"})," for\nmore background information."]}),"\n",(0,s.jsx)(n.h2,{id:"configuring-a-sync-schedule",children:"Configuring a sync schedule"}),"\n",(0,s.jsx)(n.p,{children:"A materialization can be configured to run on a fixed schedule 24/7 or it can\nhave a faster sync schedule during certain times of the day and on certain days\nof the week. The following options are available for configuring the sync\nschedule:"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/syncFrequency"})}),(0,s.jsx)(n.td,{children:"Sync Frequency"}),(0,s.jsx)(n.td,{children:"Frequency at which transactions are executed when the materialization is fully caught up and streaming changes. May be enabled only for certain time periods and days of the week if configured below; otherwise it is effective 24/7. Defaults to 30 minutes if unset."}),(0,s.jsx)(n.td,{children:"string"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/timezone"})}),(0,s.jsx)(n.td,{children:"Timezone"}),(0,s.jsxs)(n.td,{children:["Timezone applicable to sync time windows and active days. Must be a valid IANA time zone name or +HH",":MM"," offset."]}),(0,s.jsx)(n.td,{children:"string"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/fastSyncStartTime"})}),(0,s.jsx)(n.td,{children:"Fast Sync Start Time"}),(0,s.jsx)(n.td,{children:"Time of day that transactions begin executing at the configured Sync Frequency. Prior to this time transactions will be executed more slowly. Must be in the form of '09:00'."}),(0,s.jsx)(n.td,{children:"string"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/fastSyncStopTime"})}),(0,s.jsx)(n.td,{children:"Fast Sync Stop Time"}),(0,s.jsx)(n.td,{children:"Time of day that transactions stop executing at the configured Sync Frequency. After this time transactions will be executed more slowly. Must be in the form of '17:00'."}),(0,s.jsx)(n.td,{children:"string"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/fastSyncEnabledDays"})}),(0,s.jsx)(n.td,{children:"Fast Sync Enabled Days"}),(0,s.jsx)(n.td,{children:"Days of the week that the configured Sync Frequency is active. On days that are not enabled, transactions will be executed more slowly for the entire day. Examples: 'M-F' (Monday through Friday, inclusive), 'M,W,F' (Monday, Wednesday, and Friday), 'Su-T,Th-S' (Sunday through Tuesday, inclusive; Thursday through Saturday, inclusive). All days are enabled if unset."}),(0,s.jsx)(n.td,{children:"string"})]})]})]}),"\n",(0,s.jsxs)(n.admonition,{type:"warning",children:[(0,s.jsxs)(n.p,{children:["Changes to a ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#specification",children:"materialization's\nspecification"}),' are only applied\nafter the materialization task has completed and acknowledged all of its\noutstanding transactions. This means that if a task is running with a 4 hour\nsync frequency, it may take up to 8 hours for a change to the specification to\ntake effect: 4 hours for the "current" transaction to complete and be\nacknowledged, and another 4 hours for the next "pipelined" commit to complete\nand be acknowledged.']}),(0,s.jsxs)(n.p,{children:["If you are making changes to a materialization with a ",(0,s.jsx)(n.strong,{children:"Sync Schedule"}),"\nconfigured and would like those changes to take effect immediately, you can\ndisable and then re-enable the materialization."]})]}),"\n",(0,s.jsx)(n.h4,{id:"example-sync-data-on-a-fixed-schedule",children:"Example: Sync data on a fixed schedule"}),"\n",(0,s.jsxs)(n.p,{children:["To use the same schedule for syncing data 24/7, set the value of ",(0,s.jsx)(n.strong,{children:"Sync\nFrequency"})," only and leave the other inputs empty. For example, you might set a\n",(0,s.jsx)(n.strong,{children:"Sync Frequency"})," of ",(0,s.jsx)(n.code,{children:"15m"})," to always have you destination sync every 15 minutes\ninstead of the default 30 minutes."]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["If you want the materialization to always push updated data as fast as possible,\nuse a ",(0,s.jsx)(n.strong,{children:"Sync Frequency"})," of ",(0,s.jsx)(n.code,{children:"0s"}),"."]})}),"\n",(0,s.jsx)(n.h4,{id:"example-sync-data-faster-during-certain-times-of-the-day",children:"Example: Sync data faster during certain times of the day"}),"\n",(0,s.jsxs)(n.p,{children:["If you only care about having the most-up-to-date data possible during certain\ntimes of the day, you can set a start and stop time for that time period. The\nvalue you set for ",(0,s.jsx)(n.strong,{children:"Sync Frequency"})," will be used during that time period;\notherwise syncs will be performed every 4 hours."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"Fast Sync Start Time"})," and ",(0,s.jsx)(n.strong,{children:"Fast Sync Stop Time"})," values must be set as\n24-hour times, and you must provide a value for ",(0,s.jsx)(n.strong,{children:"Timezone"})," that this time\nwindow should use. Timezones must either be ",(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones",children:"a valid IANA time zone\nname"})," or a +HH",":MM","\noffset. Providing a time zone name will ensure local factors like daylight\nsavings time are considered for the schedule, whereas an offset timezone is\nalways relative to UTC."]}),"\n",(0,s.jsx)(n.p,{children:"An example configuration data syncs data as fast as possible between the hours\nof 9:00AM and 5:00PM in the Eastern Time Zone (ET) would use these values:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Sync Frequency"}),": ",(0,s.jsx)(n.code,{children:"0s"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Timezone"}),": ",(0,s.jsx)(n.code,{children:"America/New_York"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Fast Sync Start Time"}),": ",(0,s.jsx)(n.code,{children:"09:00"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Fast Sync Stop Time"}),": ",(0,s.jsx)(n.code,{children:"17:00"})]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"example-sync-data-faster-only-on-certain-days-of-the-week",children:"Example: Sync data faster only on certain days of the week"}),"\n",(0,s.jsx)(n.p,{children:"You can also set certain days of the week that the fast sync is active. On all\nother days, data will be sync'd more slowly all day."}),"\n",(0,s.jsxs)(n.p,{children:["To enable this, set values for ",(0,s.jsx)(n.strong,{children:"Sync Frequency"}),", ",(0,s.jsx)(n.strong,{children:"Timezone"}),", ",(0,s.jsx)(n.strong,{children:"Fast Sync\nStart Time"}),", and ",(0,s.jsx)(n.strong,{children:"Fast Sync Stop Time"})," as you would for syncing data faster\nduring certain times of the day, and also provide a value for ",(0,s.jsx)(n.strong,{children:"Fast Sync\nEnabled Days"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Fast Sync Enabled Days"})," is a range of days, where the days of the week are\nabbreviated as ",(0,s.jsx)(n.code,{children:"(Su)nday"}),", ",(0,s.jsx)(n.code,{children:"(M)onday"}),", ",(0,s.jsx)(n.code,{children:"(T)uesday"}),", ",(0,s.jsx)(n.code,{children:"(W)ednesday"}),", ",(0,s.jsx)(n.code,{children:"(Th)ursday"}),",\n",(0,s.jsx)(n.code,{children:"(F)riday"}),", ",(0,s.jsx)(n.code,{children:"(S)aturday"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Here are some examples of valid inputs for ",(0,s.jsx)(n.strong,{children:"Fast Sync Enabled Days"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"M-F"})," to enable fast sync on Monday through Friday."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Su, T, Th, S"})," to enable fast sync on Sunday, Tuesday, Thursday, and Saturday."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Su-M,Th-S"})," to enable fast sync on Thursday through Monday. Note that the days\nof the week must be listed in order, so ",(0,s.jsx)(n.code,{children:"Th-M"})," will not work."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"timing-of-syncs",children:"Timing of syncs"}),"\n",(0,s.jsx)(n.p,{children:"In technical terms, timing of syncs is controlled by the materialization\nconnector sending a transaction acknowledgement to the Flow runtime a computed\ntimes. Practically this means that at these times the prior transaction will\ncomplete and have its statistics recorded, and the next transaction will begin."}),"\n",(0,s.jsxs)(n.p,{children:["This timing is computed so that it occurs at predictable instants in time. As a\nhypothetical example, if you have set a ",(0,s.jsx)(n.strong,{children:"Sync Frequency"})," of ",(0,s.jsx)(n.code,{children:"15m"}),", transaction\nacknowledgements might be sent at times like ",(0,s.jsx)(n.code,{children:"00:00"}),", ",(0,s.jsx)(n.code,{children:"00:15"}),", ",(0,s.jsx)(n.code,{children:"00:30"}),", ",(0,s.jsx)(n.code,{children:"00:45"}),"\nand so on, where each acknowledgement is sent at a multiple of the ",(0,s.jsx)(n.strong,{children:"Sync\nFrequency"})," relative to the hour. This means that if the materialization ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards",children:"task\nshard"})," restarts and completes its first\ntransaction at ",(0,s.jsx)(n.code,{children:"00:13"}),", it will run its next transaction at ",(0,s.jsx)(n.code,{children:"00:15"})," rather than\n",(0,s.jsx)(n.code,{children:"00:28"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["In actuality these computed points in time have some amount of\n",(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Jitter",children:"jitter"})," applied to them to avoid\noverwhelming the system at common intervals, so setting a ",(0,s.jsx)(n.strong,{children:"Sync Frequency"})," to\na specific value will ensure that transactions are predictably acknowledged that\noften, but makes no assumptions about precisely what time instants the\nacknowledgements will occur."]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"jitter"})," value is deterministic based on the ",(0,s.jsx)(n.em,{children:"compute resource"})," for the\ndestination system from the materialization's endpoint configuration. How this\ncompute resource is identified various for different systems, but is usually\nsomething like ",(0,s.jsx)(n.code,{children:'"account_name" + "warehouse_Name"'}),"."]}),(0,s.jsxs)(n.p,{children:["This means that separate materialization use the same compute resource will\nsynchronize their usage of that compute resource if they have the same ",(0,s.jsx)(n.strong,{children:"Sync\nSchedule"})," configured."]})]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>o});var s=t(96540);const i={},a=s.createContext(i);function r(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/d8b2c51c.7d4e0add.js b/pr-preview/pr-1594/assets/js/d8b2c51c.7d4e0add.js deleted file mode 100644 index 9a9aa04b9a..0000000000 --- a/pr-preview/pr-1594/assets/js/d8b2c51c.7d4e0add.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6995],{66544:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>d,frontMatter:()=>c,metadata:()=>i,toc:()=>l});var t=r(74848),o=r(28453);const c={},s="Connectors",i={id:"reference/Connectors/README",title:"Connectors",description:"A current list and configuration details for Estuary's connectors can be found on the following pages:",source:"@site/docs/reference/Connectors/README.md",sourceDirName:"reference/Connectors",slug:"/reference/Connectors/",permalink:"/pr-preview/pr-1594/reference/Connectors/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/README.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Task shards",permalink:"/pr-preview/pr-1594/concepts/advanced/shards"},next:{title:"Capture connectors",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/"}},a={},l=[];function u(e){const n={a:"a",h1:"h1",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"connectors",children:"Connectors"}),"\n",(0,t.jsx)(n.p,{children:"A current list and configuration details for Estuary's connectors can be found on the following pages:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./capture-connectors/",children:"Capture connectors"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./materialization-connectors/",children:"Materialization connectors"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./dekaf",children:"Dekaf integrations"})}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["You can learn more about how connectors work and how to use them in their ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors",children:"conceptual documentation"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>i});var t=r(96540);const o={},c=t.createContext(o);function s(e){const n=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/d8b5b6da.fb36935e.js b/pr-preview/pr-1594/assets/js/d8b5b6da.fb36935e.js deleted file mode 100644 index fc3f64317d..0000000000 --- a/pr-preview/pr-1594/assets/js/d8b5b6da.fb36935e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[993],{24774:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>o,contentTitle:()=>d,default:()=>a,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var n=s(74848),t=s(28453);const i={},d="Amazon Redshift",c={id:"reference/Connectors/capture-connectors/amazon-redshift",title:"Amazon Redshift",description:"This connector captures data from your Amazon Redshift cluster into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/amazon-redshift.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/amazon-redshift",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/amazon-redshift.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amazon Kinesis",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis"},next:{title:"Amazon S3",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3"}},o={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function h(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h1,{id:"amazon-redshift",children:"Amazon Redshift"}),"\n",(0,n.jsx)(r.p,{children:"This connector captures data from your Amazon Redshift cluster into Flow collections."}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.a,{href:"https://ghcr.io/estuary/source-redshift:dev",children:(0,n.jsx)(r.code,{children:"ghcr.io/estuary/source-redshift:dev"})})," provides the latest connector image. You can access past image versions by following the link in your browser."]}),"\n",(0,n.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsx)(r.p,{children:"To use this connector, you'll need:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"Access credentials for connecting to your Amazon Redshift cluster."}),"\n",(0,n.jsx)(r.li,{children:"Properly configured IAM roles for the necessary permissions."}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsxs)(r.p,{children:["You can configure the Redshift source connector either through the Flow web app or by directly editing the Flow specification file. For more information on using this connector, see our guide on ",(0,n.jsx)(r.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"connectors"}),". The values and specification sample below provide configuration details that are specific to the Amazon Redshift source connector."]}),"\n",(0,n.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,n.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Property"}),(0,n.jsx)(r.th,{children:"Title"}),(0,n.jsx)(r.th,{children:"Description"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Required/Default"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/host"})})}),(0,n.jsx)(r.td,{children:"Host"}),(0,n.jsx)(r.td,{children:"Hostname or IP address of your Redshift cluster."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/port"})})}),(0,n.jsx)(r.td,{children:"Port"}),(0,n.jsx)(r.td,{children:"Port number for the cluster."}),(0,n.jsx)(r.td,{children:"integer"}),(0,n.jsx)(r.td,{children:"Default"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/database"})})}),(0,n.jsx)(r.td,{children:"Database Name"}),(0,n.jsx)(r.td,{children:"Name of the database to capture data from."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/user"})})}),(0,n.jsx)(r.td,{children:"User"}),(0,n.jsx)(r.td,{children:"Database user with necessary permissions."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/password"})})}),(0,n.jsx)(r.td,{children:"Password"}),(0,n.jsx)(r.td,{children:"Password for the specified database user."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/schemas"})})}),(0,n.jsx)(r.td,{children:"Schemas"}),(0,n.jsx)(r.td,{children:"List of schemas to include."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/jdbc_params"})})}),(0,n.jsx)(r.td,{children:"JDBC URL Params"}),(0,n.jsx)(r.td,{children:"Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{})]})]})]}),"\n",(0,n.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Property"}),(0,n.jsx)(r.th,{children:"Title"}),(0,n.jsx)(r.th,{children:"Description"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Required/Default"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/table"})})}),(0,n.jsx)(r.td,{children:"Table Name"}),(0,n.jsx)(r.td,{children:"Name of the table to capture."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/cursor_field"})})}),(0,n.jsx)(r.td,{children:"User-defined Cursor"}),(0,n.jsx)(r.td,{children:"Field for incremental syncs. Uses ascending values to ensure queries are sequential."}),(0,n.jsx)(r.td,{children:"string or integer"}),(0,n.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,n.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-redshift:dev\n config:\n host: "example-redshift-cluster.us-east-2.redshift.amazonaws.com"\n port: 5439\n database: "sample_db"\n user: "sample_user"\n password: "sample_password"\n schemas: "public"\n jdbc_params: "key1=value1&key2=value2&key3=value3"\n bindings:\n - resource:\n table: users\n cursor_field: cursor\n target: ${PREFIX}/users\n'})})]})}function a(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},28453:(e,r,s)=>{s.d(r,{R:()=>d,x:()=>c});var n=s(96540);const t={},i=n.createContext(t);function d(e){const r=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),n.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/da6eb168.ca96c985.js b/pr-preview/pr-1594/assets/js/da6eb168.ca96c985.js deleted file mode 100644 index 4fe58ebdd8..0000000000 --- a/pr-preview/pr-1594/assets/js/da6eb168.ca96c985.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[132],{11488:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>a,frontMatter:()=>r,metadata:()=>d,toc:()=>o});var s=t(74848),i=t(28453);const r={},c="NetSuite SuiteAnalytics Connect",d={id:"reference/Connectors/capture-connectors/netsuite-suiteanalytics",title:"NetSuite SuiteAnalytics Connect",description:"This connector captures data from Oracle NetSuite into Flow collections. It relies on the SuiteAnalytics Connect feature in order to both load large amounts of data quickly, as well as introspect the available tables, their schemas, keys, and cursor fields.",source:"@site/docs/reference/Connectors/capture-connectors/netsuite-suiteanalytics.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/netsuite-suiteanalytics",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/netsuite-suiteanalytics.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"MySQL Batch Query Connector",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch"},next:{title:"NetSuite SuiteTalk REST",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk"}},l={},o=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Token/Consumer Authentication",id:"tokenconsumer-authentication",level:4},{value:"Username/Password Authentication",id:"usernamepassword-authentication",level:4},{value:"Advanced Config options",id:"advanced-config-options",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"netsuite-suiteanalytics-connect",children:"NetSuite SuiteAnalytics Connect"}),"\n",(0,s.jsx)(n.p,{children:"This connector captures data from Oracle NetSuite into Flow collections. It relies on the SuiteAnalytics Connect feature in order to both load large amounts of data quickly, as well as introspect the available tables, their schemas, keys, and cursor fields."}),"\n",(0,s.jsxs)(n.p,{children:["If you don't have SuiteAnalytics Connect, check out our ",(0,s.jsx)(n.a,{href:"../netsuite-suitetalk",children:"SuiteTalk REST"})," connector."]}),"\n",(0,s.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,s.jsxs)(n.p,{children:["Flow discovers all of the tables to which you grant access during ",(0,s.jsx)(n.a,{href:"#setup",children:"setup"}),", including ",(0,s.jsx)(n.code,{children:"Transactions"}),", ",(0,s.jsx)(n.code,{children:"Reports"}),", ",(0,s.jsx)(n.code,{children:"Lists"}),", and ",(0,s.jsx)(n.code,{children:"Setup"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Oracle NetSuite ",(0,s.jsx)(n.a,{href:"https://system.netsuite.com/pages/customerlogin.jsp?country=US",children:"account"})]}),"\n",(0,s.jsx)(n.li,{children:"Allowed access to all Account permissions options"}),"\n",(0,s.jsx)(n.li,{children:"A new integration with token-based authentication"}),"\n",(0,s.jsxs)(n.li,{children:["A custom role with access to objects you want to capture. See ",(0,s.jsx)(n.a,{href:"#setup",children:"setup"}),"."]}),"\n",(0,s.jsx)(n.li,{children:"A new user assigned to the custom role"}),"\n",(0,s.jsx)(n.li,{children:"Access token generated for the custom role"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Create a NetSuite account"})}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Create an account on the ",(0,s.jsx)(n.a,{href:"https://www.netsuite.com/portal/home.shtml",children:"Oracle NetSuite"})," portal."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Confirm your email address."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Set up your NetSuite account"})}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Find your ",(0,s.jsx)(n.em,{children:"Realm"}),", or Account ID. You'll use this to connect with Flow."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In your NetSuite portal, go to ",(0,s.jsx)(n.strong,{children:"Setup"})," > ",(0,s.jsx)(n.strong,{children:"Company"})," > ",(0,s.jsx)(n.strong,{children:"Company Information"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Copy your Account ID."}),"\n",(0,s.jsxs)(n.p,{children:["If you have a production account, it will look like ",(0,s.jsx)(n.code,{children:"2345678"}),". If you're using a sandbox, it'll look like ",(0,s.jsx)(n.code,{children:"2345678_SB2"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Create a NetSuite ",(0,s.jsx)(n.em,{children:"integration"})," to obtain a Consumer Key and Consumer Secret."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Navigate to ",(0,s.jsx)(n.strong,{children:"Setup"})," > ",(0,s.jsx)(n.strong,{children:"Integration"})," > ",(0,s.jsx)(n.strong,{children:"Manage Integrations"})," > ",(0,s.jsx)(n.strong,{children:"New"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Give the integration a name, for example, ",(0,s.jsx)(n.code,{children:"estuary-rest-integration"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Make sure the ",(0,s.jsx)(n.strong,{children:"State"})," option is enabled."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.strong,{children:"Authentication"})," section, check the ",(0,s.jsx)(n.strong,{children:"Token-Based Authentication"})," checkbox."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Save your changes."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Your Consumer Key and Consumer Secret will be shown once. Copy them to a safe place."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Set up a role for use with Flow."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Go to ",(0,s.jsx)(n.strong,{children:"Setup"})," > ",(0,s.jsx)(n.strong,{children:"Users/Roles"})," > ",(0,s.jsx)(n.strong,{children:"Manage Roles"})," > ",(0,s.jsx)(n.strong,{children:"New"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Give the role a name, for example, ",(0,s.jsx)(n.code,{children:"estuary-integration-role"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Scroll to the ",(0,s.jsx)(n.strong,{children:"Permissions"})," section."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["(IMPORTANT) Click ",(0,s.jsx)(n.strong,{children:"Transactions"})," and add all the dropdown entities with either ",(0,s.jsx)(n.strong,{children:"full"})," or ",(0,s.jsx)(n.strong,{children:"view"})," access level."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["(IMPORTANT) Click ",(0,s.jsx)(n.strong,{children:"Reports"})," and add all the dropdown entities with either ",(0,s.jsx)(n.strong,{children:"full"})," or ",(0,s.jsx)(n.strong,{children:"view"})," access level."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["(IMPORTANT) Click ",(0,s.jsx)(n.strong,{children:"Lists"})," and add all the dropdown entities with either ",(0,s.jsx)(n.strong,{children:"full"})," or ",(0,s.jsx)(n.strong,{children:"view"})," access level."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["(IMPORTANT) Click ",(0,s.jsx)(n.strong,{children:"Setup"})," an add all the dropdown entities with either ",(0,s.jsx)(n.strong,{children:"full"})," or ",(0,s.jsx)(n.strong,{children:"view"})," access level."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"To allow your custom role to reflect future changes, be sure to edit these parameters again when you rename or customize any NetSuite object."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Set up user for use with Flow."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Go to ",(0,s.jsx)(n.strong,{children:"Setup"})," > ",(0,s.jsx)(n.strong,{children:"Users/Roles"})," > ",(0,s.jsx)(n.strong,{children:"Manage Users"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Find the user you want to give access to use with Flow. In the ",(0,s.jsx)(n.strong,{children:"Name"})," column, click the user's name. Then, click the ",(0,s.jsx)(n.strong,{children:"Edit"})," button."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Find the ",(0,s.jsx)(n.strong,{children:"Access"})," tab."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["From the dropdown list, select role you created previously; for example, ",(0,s.jsx)(n.code,{children:"estuary-integration-role"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Save your changes."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Generate an access token."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Go to ",(0,s.jsx)(n.strong,{children:"Setup"})," > ",(0,s.jsx)(n.strong,{children:"Users/Roles"})," > ",(0,s.jsx)(n.strong,{children:"Access Tokens"})," > ",(0,s.jsx)(n.strong,{children:"New"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Select an ",(0,s.jsx)(n.strong,{children:"Application Name"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"User"}),", select the user you assigned the role previously."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Role"}),", select the role you assigned to the user previously."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Token Name"}),", give a descriptive name to the token you are creating, for example ",(0,s.jsx)(n.code,{children:"estuary-rest-integration-token"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Save your changes."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Your Token ID and Token Secret will be shown once. Copy them to a safe place."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"You now have a properly configured account with the correct permissions and all the information you need to connect with Flow:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Realm (Account ID)"}),"\n",(0,s.jsx)(n.li,{children:"Consumer Key"}),"\n",(0,s.jsx)(n.li,{children:"Consumer Secret"}),"\n",(0,s.jsx)(n.li,{children:"Token ID"}),"\n",(0,s.jsx)(n.li,{children:"Token Secret"}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"You can also authenticate with a username and password, but a consumer/token is recommended for security."})}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the NetSuite source connector."]}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"`/account"}),(0,s.jsx)(n.td,{children:"Netsuite Account ID"}),(0,s.jsxs)(n.td,{children:["Netsuite realm/Account ID e.g. 2344535, as for ",(0,s.jsx)(n.code,{children:"production"})," or 2344535_SB1, as for the ",(0,s.jsx)(n.code,{children:"sandbox"})]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/role_id"})}),(0,s.jsx)(n.td,{children:"Role ID"}),(0,s.jsx)(n.td,{children:"The ID of the role you created. Defaults to 3, which is the ID of the administrator role."}),(0,s.jsx)(n.td,{children:"int"}),(0,s.jsx)(n.td,{children:"3"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/suiteanalytics_data_source"})}),(0,s.jsx)(n.td,{children:"Data Source"}),(0,s.jsxs)(n.td,{children:["Which NetSuite data source to use. Options are ",(0,s.jsx)(n.code,{children:"NetSuite.com"}),", or ",(0,s.jsx)(n.code,{children:"NetSuite2.com"})]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/authentication"})}),(0,s.jsx)(n.td,{children:"Authentication Details"}),(0,s.jsx)(n.td,{children:"Credentials to access your NetSuite account"}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"tokenconsumer-authentication",children:"Token/Consumer Authentication"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/authentication/consumer_key"})}),(0,s.jsx)(n.td,{children:"Consumer Key"}),(0,s.jsx)(n.td,{children:"Consumer key associated with your integration."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/authentication/consumer_secret"})}),(0,s.jsx)(n.td,{children:"Consumer Secret"}),(0,s.jsx)(n.td,{children:"Consumer secret associated with your integration."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/authentication/token_key"})}),(0,s.jsx)(n.td,{children:"Token Key"}),(0,s.jsx)(n.td,{children:"Access token key"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/authentication/token_secret"})}),(0,s.jsx)(n.td,{children:"Token Secret"}),(0,s.jsx)(n.td,{children:"Access token secret"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"usernamepassword-authentication",children:"Username/Password Authentication"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/authentication/username"})}),(0,s.jsx)(n.td,{children:"Username"}),(0,s.jsx)(n.td,{children:"Your NetSuite account's email/username"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/authentication/password"})}),(0,s.jsx)(n.td,{children:"Password"}),(0,s.jsx)(n.td,{children:"Your NetSuite account's password."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"advanced-config-options",children:"Advanced Config options"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/connection_limit"})}),(0,s.jsx)(n.td,{children:"Connection Limit"}),(0,s.jsx)(n.td,{children:"The maximum number of concurrent data streams to attempt at once."}),(0,s.jsx)(n.td,{children:"int"}),(0,s.jsx)(n.td,{children:"10 Connections"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/task_limit"})}),(0,s.jsx)(n.td,{children:"Task Limit"}),(0,s.jsxs)(n.td,{children:["The maximum number of concurrent tasks to run at once. A task is either a backfill or incremental load. Backfills can load multiple chunks in parallel, so this must be strictly <= ",(0,s.jsx)(n.code,{children:"/advanced/connection_limit"})]}),(0,s.jsx)(n.td,{children:"int"}),(0,s.jsx)(n.td,{children:"5 Tasks"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/advanced/start_date"})}),(0,s.jsx)(n.td,{children:"Start Date"}),(0,s.jsx)(n.td,{children:"The date that we should attempt to start backfilling from. If not provided, backfill from the beginning."}),(0,s.jsx)(n.td,{children:"date"}),(0,s.jsx)(n.td,{children:"Not Required"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/name"})}),(0,s.jsx)(n.td,{children:"Name"}),(0,s.jsx)(n.td,{children:"The name of the table this binding refers to"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/interval"})}),(0,s.jsx)(n.td,{children:"Interval"}),(0,s.jsx)(n.td,{children:"How frequently to check for incremental changes"}),(0,s.jsx)(n.td,{children:(0,s.jsxs)(n.a,{href:"https://www.digi.com/resources/documentation/digidocs/90001488-13/reference/r_iso_8601_duration_format.htm",children:[(0,s.jsx)(n.code,{children:"ISO8601"})," Duration"]})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"PT1H"})," (1 Hour)"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/log_cursor"})}),(0,s.jsx)(n.td,{children:"Log Cursor"}),(0,s.jsx)(n.td,{children:"A date-time column to use for incremental capture of modifications."}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Required (Automatically Discovered)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/page_cursor"})}),(0,s.jsx)(n.td,{children:"Page Cursor"}),(0,s.jsx)(n.td,{children:"An indexed, non-NULL integer column to use for ordered table backfills. Does not need to be unique, but should have high cardinality."}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Required (Automatically Discovered)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/concurrency"})}),(0,s.jsx)(n.td,{children:"Concurrency"}),(0,s.jsx)(n.td,{children:"Maximum number of concurrent connections to use for backfilling."}),(0,s.jsx)(n.td,{children:"int"}),(0,s.jsx)(n.td,{children:"1 Connection"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/query_limit"})}),(0,s.jsx)(n.td,{children:"Query Limit"}),(0,s.jsxs)(n.td,{children:["Maximum number of rows to fetch in a query. Will be divided between all connections if ",(0,s.jsx)(n.code,{children:"/concurrency"})," > 1"]}),(0,s.jsx)(n.td,{children:"int"}),(0,s.jsx)(n.td,{children:"100,000 Rows"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/query_timeout"})}),(0,s.jsx)(n.td,{children:"Query Timeout"}),(0,s.jsx)(n.td,{children:"Timeout for queries. Typically left as the default as some tables just take a very long time to respond."}),(0,s.jsx)(n.td,{children:(0,s.jsxs)(n.a,{href:"https://www.digi.com/resources/documentation/digidocs/90001488-13/reference/r_iso_8601_duration_format.htm",children:[(0,s.jsx)(n.code,{children:"ISO8601"})," Duration"]})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"PT10M"})," (10 Minutes)"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/associations"})}),(0,s.jsx)(n.td,{children:"Associations"}),(0,s.jsx)(n.td,{children:"List of associated tables for which related data should be loaded."}),(0,s.jsx)(n.td,{children:"Array[TableAssociation]"}),(0,s.jsx)(n.td,{children:"[]"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/associations/[n]/child_table_name"})}),(0,s.jsx)(n.td,{children:"Foreign Table Name"}),(0,s.jsx)(n.td,{children:'The name of the "foreign" table that should be associated with the "parent" binding containing this association'}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/associations/[n]/parent_join_column_name"})}),(0,s.jsx)(n.td,{children:"Parent Join Column"}),(0,s.jsx)(n.td,{children:'The name of the column on the "parent" table to be used as the join key'}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/associations/[n]/child_join_column_name"})}),(0,s.jsx)(n.td,{children:"Foreign Join Column"}),(0,s.jsx)(n.td,{children:'The name of the column on the "foreign" table to be used as the join key'}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/associations/[n]/load_during_backfill"})}),(0,s.jsx)(n.td,{children:"Load During Backfill"}),(0,s.jsx)(n.td,{children:"Whether or not to load associated documents during backfill"}),(0,s.jsx)(n.td,{children:"Boolean"}),(0,s.jsx)(n.td,{children:"False"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/associations/[n]/load_during_incremental"})}),(0,s.jsx)(n.td,{children:"Load During Incremental"}),(0,s.jsx)(n.td,{children:"Whether or not to load associated documents during incremental loads"}),(0,s.jsx)(n.td,{children:"Boolean"}),(0,s.jsx)(n.td,{children:"True"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-netsuite-v2:v3\n config:\n account: "12345678"\n authentication:\n auth_type: token\n consumer_key: xxx\n consumer_secret_sops: xxx\n token_id: xxx\n token_secret_sops: xxx\n connection_type: suiteanalytics\n role_id: 3\n suiteanalytics_data_source: NetSuite2.com\n advanced:\n connection_limit: 20\n cursor_fields: []\n enable_auto_cursor: false\n resource_tracing: false\n start_date: null\n task_limit: 10\n bindings:\n - resource:\n associations:\n - child_join_column_name: transaction\n child_table_name: TransactionAccountingLine\n parent_join_column_name: id\n load_during_backfill: false\n load_during_incremental: true\n interval: PT5M\n name: transaction\n page_cursor: id\n query_limit: 100000\n concurrency: 1\n query_timeout: PT10M\n log_cursor: lastmodifieddate\n target: ${PREFIX}/${CAPTURE_NAME}/transaction\n {...}\n'})})]})}function a(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>d});var s=t(96540);const i={},r=s.createContext(i);function c(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/db0f1c3a.7197a5a3.js b/pr-preview/pr-1594/assets/js/db0f1c3a.7197a5a3.js deleted file mode 100644 index f83b681567..0000000000 --- a/pr-preview/pr-1594/assets/js/db0f1c3a.7197a5a3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2571],{99263:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var t=r(74848),i=r(28453);const s={},c="Bing Ads",o={id:"reference/Connectors/capture-connectors/bing-ads",title:"Bing Ads",description:"This connector captures data from Bing Ads into Flow collections via the Bing Ads API.",source:"@site/docs/reference/Connectors/capture-connectors/bing-ads.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/bing-ads",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/bing-ads.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"BigQuery Batch Query Connector",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch"},next:{title:"Braintree",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree"}},d={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with Microsoft in the Flow web app",id:"using-oauth2-to-authenticate-with-microsoft-in-the-flow-web-app",level:3},{value:"Authenticating manually using the CLI",id:"authenticating-manually-using-the-cli",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"bing-ads",children:"Bing Ads"}),"\n",(0,t.jsxs)(n.p,{children:["This connector captures data from Bing Ads into Flow collections via the ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/guides/?view=bingads-13",children:"Bing Ads API"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-bing-ads:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-bing-ads:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/bing-ads/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(n.p,{children:"The following data resources are supported:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/customer-management-service/searchaccounts?view=bingads-13",children:"Accounts"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/reporting-service/accountperformancereportrequest?view=bingads-13",children:"Account performance reports"}),": hourly, daily, weekly, and monthly (",(0,t.jsx)(n.strong,{children:"four resources"}),")"]}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/campaign-management-service/getadgroupsbycampaignid?view=bingads-13",children:"Ad groups"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/reporting-service/adgroupperformancereportrequest?view=bingads-13",children:"Ad group performance reports"}),": hourly, daily, weekly, and monthly (",(0,t.jsx)(n.strong,{children:"four resources"}),")"]}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/campaign-management-service/getadsbyadgroupid?view=bingads-13",children:"Ads"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/reporting-service/adperformancereportrequest?view=bingads-13",children:"Ad performance reports"}),": hourly, daily, weekly, and monthly (",(0,t.jsx)(n.strong,{children:"four resources"}),")."]}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/reporting-service/budgetsummaryreportrequest?view=bingads-13",children:"Budget summary report"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/campaign-management-service/getcampaignsbyaccountid?view=bingads-13",children:"Campaigns"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/reporting-service/campaignperformancereportrequest?view=bingads-13",children:"Campaign performance reports"}),": hourly, daily, weekly, and monthly (",(0,t.jsx)(n.strong,{children:"four resources"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/reporting-service/keywordperformancereportrequest?view=bingads-13",children:"Keyword performance reports"}),": hourly, daily, weekly, and monthly (",(0,t.jsx)(n.strong,{children:"four resources"}),")."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"This connector uses OAuth2 to authenticate with Microsoft. You can do this in the Flow web app, or configure manually if you're using the flowctl CLI."}),"\n",(0,t.jsx)(n.h3,{id:"using-oauth2-to-authenticate-with-microsoft-in-the-flow-web-app",children:"Using OAuth2 to authenticate with Microsoft in the Flow web app"}),"\n",(0,t.jsx)(n.p,{children:"You'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["User credentials with ",(0,t.jsx)(n.a,{href:"https://help.ads.microsoft.com/#apex/3/en/52037/3-500",children:"access"})," to the Bing Ads account."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A ",(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/advertising/guides/get-started?view=bingads-13#get-developer-token",children:"developer token"})," associated with the user."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"authenticating-manually-using-the-cli",children:"Authenticating manually using the CLI"}),"\n",(0,t.jsx)(n.p,{children:"You'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"A registered Bing Ads application with the following credentials retrieved:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Client ID"}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Client Secret"}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Refresh Token"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"To set get these items, complete the following steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/guides/authentication-oauth-register?view=bingads-13",children:"Register your Bing Ads Application"})," in the Azure Portal."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["During setup, note the ",(0,t.jsx)(n.code,{children:"client_id"})," and ",(0,t.jsx)(n.code,{children:"client_secret"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Get a ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/guides/get-started?view=bingads-13#access-token",children:"user access token"}),"."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/advertising/guides/authentication-oauth-get-tokens?view=bingads-13",children:"Redeem the user authorization code for OAuth tokens"}),", and note the ",(0,t.jsx)(n.code,{children:"refresh_token"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Bing Ads source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.p,{children:["The properties in the table below reflect the manual authentication method.\nIf you're working in the Flow web app, you'll use ",(0,t.jsx)(n.a,{href:"#using-oauth2-to-authenticate-with-microsoft-in-the-flow-web-app",children:"OAuth2"}),",\nso many of these properties aren't required."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials"})})}),(0,t.jsx)(n.td,{children:"Credentials"}),(0,t.jsx)(n.td,{}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/auth_method"})})}),(0,t.jsx)(n.td,{children:"Authentication method"}),(0,t.jsxs)(n.td,{children:["Set to ",(0,t.jsx)(n.code,{children:"oauth2.0"})]}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"oauth2.0"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/client_id"})})}),(0,t.jsx)(n.td,{children:"Client ID"}),(0,t.jsx)(n.td,{children:"The Client ID of your Microsoft Advertising developer application."}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/client_secret"})})}),(0,t.jsx)(n.td,{children:"Client Secret"}),(0,t.jsx)(n.td,{children:"The Client Secret of your Microsoft Advertising developer application."}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/credentials/refresh_token"})})}),(0,t.jsx)(n.td,{children:"Refresh Token"}),(0,t.jsx)(n.td,{children:"Refresh Token to renew the expired Access Token."}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/developer_token"})})}),(0,t.jsx)(n.td,{children:"Developer Token"}),(0,t.jsx)(n.td,{children:"Developer token associated with user."}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/reports_start_date"})})}),(0,t.jsx)(n.td,{children:"Credentials"}),(0,t.jsx)(n.td,{children:"The start date from which to begin replicating report data. Any data generated before this date will not be replicated in reports. This is a UTC date in YYYY-MM-DD format."}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Required, ",(0,t.jsx)(n.code,{children:"2020-01-01"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/tenant_id"})})}),(0,t.jsx)(n.td,{children:"Credentials"}),(0,t.jsxs)(n.td,{children:["The Tenant ID of your Microsoft Advertising developer application. Set this to ",(0,t.jsx)(n.code,{children:"common"})," unless you know you need a different value."]}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Bing Ads resource from which a collection is captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.p,{children:"This sample specification reflects the manual authentication method."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-bing-ads:dev\n config:\n credentials:\n auth_type: oauth2.0\n client_id: 6731de76-14a6-49ae-97bc-6eba6914391e\n client_secret: <secret>\n refresh_token: <token>\n developer_token: <token>\n reports_start_date: 2020-01-01\n tenant_id: common\n\n bindings:\n - resource:\n stream: accounts\n syncMode: full_refresh\n target: ${PREFIX}/accounts\n {}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>o});var t=r(96540);const i={},s=t.createContext(i);function c(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/db2b4d90.8dfa8c0e.js b/pr-preview/pr-1594/assets/js/db2b4d90.8dfa8c0e.js deleted file mode 100644 index 4a2ea5c987..0000000000 --- a/pr-preview/pr-1594/assets/js/db2b4d90.8dfa8c0e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6846],{3536:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var t=r(74848),i=r(28453);const s={sidebar_position:3},a="Amazon RDS for MariaDB",o={id:"reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb",title:"Amazon RDS for MariaDB",description:"This is a change data capture (CDC) connector that captures change events from a MariaDB database via the Binary Log.",source:"@site/docs/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb.md",sourceDirName:"reference/Connectors/capture-connectors/MariaDB",slug:"/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"MariaDB",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/"},next:{title:"Marketo",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo"}},d={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:3},{value:"Backfills and performance considerations",id:"backfills-and-performance-considerations",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Troubleshooting Capture Errors",id:"troubleshooting-capture-errors",level:2},{value:"Unsupported Operations",id:"unsupported-operations",level:3},{value:"Data Manipulation Queries",id:"data-manipulation-queries",level:3},{value:"Unhandled Queries",id:"unhandled-queries",level:3},{value:"Metadata Errors",id:"metadata-errors",level:3},{value:"Insufficient Binlog Retention",id:"insufficient-binlog-retention",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"amazon-rds-for-mariadb",children:"Amazon RDS for MariaDB"}),"\n",(0,t.jsxs)(n.p,{children:["This is a change data capture (CDC) connector that captures change events from a MariaDB database via the ",(0,t.jsx)(n.a,{href:"https://mariadb.com/kb/en/overview-of-the-binary-log/",children:"Binary Log"}),".\nIt's derived from the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/",children:"MySQL capture connector"}),",\nso the same configuration applies, but the setup steps look somewhat different."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://github.com/estuary/connectors/pkgs/container/source-mariadb",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-mariadb:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, you'll need a MariaDB database setup with the following."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://mariadb.com/kb/en/binary-log-formats/",children:(0,t.jsx)(n.code,{children:"binlog_format"})}),"\nsystem variable set to ",(0,t.jsx)(n.code,{children:"ROW"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://mariadb.com/kb/en/using-and-maintaining-the-binary-log/#purging-log-files",children:"Binary log expiration period"})," set to at least 30 days (2592000 seconds) if at all possible.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["This value may be set lower if necessary, but we ",(0,t.jsx)(n.a,{href:"#insufficient-binlog-retention",children:"strongly discourage"})," going below 7 days as this may increase the likelihood of unrecoverable failures.\nMariaDB's default value is 0 (no expiration)."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:['A watermarks table. The watermarks table is a small "scratch space"\nto which the connector occasionally writes a small amount of data (a UUID,\nspecifically) to ensure accuracy when backfilling preexisting table contents.',"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The default name is ",(0,t.jsx)(n.code,{children:'"flow.watermarks"'}),", but this can be overridden in ",(0,t.jsx)(n.code,{children:"config.json"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["A database user with appropriate permissions:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"REPLICATION CLIENT"})," and ",(0,t.jsx)(n.code,{children:"REPLICATION SLAVE"})," ",(0,t.jsx)(n.a,{href:"https://mariadb.com/docs/skysql/ref/es10.6/privileges/",children:"privileges"}),"."]}),"\n",(0,t.jsx)(n.li,{children:"Permission to insert, update, and delete on the watermarks table."}),"\n",(0,t.jsx)(n.li,{children:"Permission to read the tables being captured."}),"\n",(0,t.jsxs)(n.li,{children:["Permission to read from ",(0,t.jsx)(n.code,{children:"information_schema"})," tables, if automatic discovery is used."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["If the table(s) to be captured include columns of type ",(0,t.jsx)(n.code,{children:"DATETIME"}),", the ",(0,t.jsx)(n.code,{children:"time_zone"})," system variable\nmust be set to an IANA zone name or numerical offset or the capture configured with a ",(0,t.jsx)(n.code,{children:"timezone"})," to use by default."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"setup",children:"Setup"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Allow connections to the database from the Estuary Flow IP address."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html",children:"Modify the database"}),", setting ",(0,t.jsx)(n.strong,{children:"Public accessibility"})," to ",(0,t.jsx)(n.strong,{children:"Yes"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database.\nRefer to the ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html#Overview.RDSSecurityGroups.Create",children:"steps in the Amazon documentation"}),".\nCreate a new inbound rule and a new outbound rule that allow all traffic from the ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsx)(n.p,{children:"Alternatively, you can allow secure connections via SSH tunneling. To do so:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Follow the guide to ",(0,t.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above,\nincluding the additional ",(0,t.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"}),"\nfor additional details and a sample."]}),"\n"]})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create a RDS parameter group to enable replication in MariaDB."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Creating",children:"Create a parameter group"}),".\nCreate a unique name and description and set the following properties:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Family"}),": mariadb10.6"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Type"}),": DB Parameter group"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Modifying",children:"Modify the new parameter group"})," and update the following parameters:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"binlog_format: ROW"}),"\n",(0,t.jsx)(n.li,{children:"binlog_row_metadata: FULL"}),"\n",(0,t.jsx)(n.li,{children:"read_only: 0"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If using the primary instance (not recommended), ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Associating",children:"associate the parameter group"}),"\nwith the database and set ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#USER_WorkingWithAutomatedBackups.Enabling",children:"Backup Retention Period"})," to 7 days.\nReboot the database to allow the changes to take effect."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create a read replica with the new parameter group applied (recommended)."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html#USER_ReadRepl.Create",children:"Create a read replica"}),"\nof your MariaDB database."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html",children:"Modify the replica"}),"\nand set the following:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"DB parameter group"}),": choose the parameter group you created previously"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Backup retention period"}),": 7 days"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Public access"}),": Publicly accessible"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Reboot the replica to allow the changes to take effect."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Switch to your MariaDB client. Run the following commands to create a new user for the capture with appropriate permissions,\nand set up the watermarks table:"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE DATABASE IF NOT EXISTS flow;\nCREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);\nCREATE USER IF NOT EXISTS flow_capture\n IDENTIFIED BY 'secret'\nGRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';\nGRANT SELECT ON *.* TO 'flow_capture';\nGRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"5",children:["\n",(0,t.jsx)(n.li,{children:"Run the following command to set the binary log retention to 7 days, the maximum value which RDS MariaDB permits:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CALL mysql.rds_set_configuration('binlog retention hours', 168);\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"6",children:["\n",(0,t.jsxs)(n.li,{children:["In the ",(0,t.jsx)(n.a,{href:"https://console.aws.amazon.com/rds/",children:"RDS console"}),", note the instance's Endpoint and Port. You'll need these for the ",(0,t.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"backfills-and-performance-considerations",children:"Backfills and performance considerations"}),"\n",(0,t.jsxs)(n.p,{children:["When the a MariaDB capture is initiated, by default, the connector first ",(0,t.jsx)(n.em,{children:"backfills"}),", or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis."]}),"\n",(0,t.jsx)(n.p,{children:"This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow.\nHowever, you may find it appropriate to skip the backfill, especially for extremely large tables."}),"\n",(0,t.jsxs)(n.p,{children:["In this case, you may turn of backfilling on a per-table basis. See ",(0,t.jsx)(n.a,{href:"#properties",children:"properties"})," for details."]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the MariaDB source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/address"})})}),(0,t.jsx)(n.td,{children:"Server Address"}),(0,t.jsxs)(n.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/user"})})}),(0,t.jsx)(n.td,{children:"Login User"}),(0,t.jsx)(n.td,{children:"The database user to authenticate as."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsxs)(n.td,{children:["Required, ",(0,t.jsx)(n.code,{children:'"flow_capture"'})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/password"})})}),(0,t.jsx)(n.td,{children:"Login Password"}),(0,t.jsx)(n.td,{children:"Password for the specified database user."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/timezone"})}),(0,t.jsx)(n.td,{children:"Timezone"}),(0,t.jsxs)(n.td,{children:["Timezone to use when capturing datetime columns. Should normally be left blank to use the database's ",(0,t.jsx)(n.code,{children:"'time_zone'"})," system variable. Only required if the ",(0,t.jsx)(n.code,{children:"'time_zone'"})," system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH",":MM"," offset. Takes precedence over the ",(0,t.jsx)(n.code,{children:"'time_zone'"})," system variable if both are set."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/watermarks_table"})}),(0,t.jsx)(n.td,{children:"Watermarks Table Name"}),(0,t.jsx)(n.td,{children:"The name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'"flow.watermarks"'})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/dbname"})}),(0,t.jsx)(n.td,{children:"Database Name"}),(0,t.jsx)(n.td,{children:"The name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'"mysql"'})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/node_id"})}),(0,t.jsx)(n.td,{children:"Node ID"}),(0,t.jsx)(n.td,{children:"Node ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/skip_backfills"})}),(0,t.jsx)(n.td,{children:"Skip Backfills"}),(0,t.jsx)(n.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,t.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,t.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"131072"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/skip_binlog_retention_check"})}),(0,t.jsx)(n.td,{children:"Skip Binlog Retention Sanity Check"}),(0,t.jsx)(n.td,{children:"Bypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need."}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/namespace"})})}),(0,t.jsx)(n.td,{children:"Namespace"}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.a,{href:"https://mariadb.com/kb/en/understanding-mariadb-architecture/#databases",children:"database"})," in which the table resides."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Name of the table to be captured from the database."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync mode"}),(0,t.jsxs)(n.td,{children:["Connection method. Always set to ",(0,t.jsx)(n.code,{children:"incremental"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsxs)(n.p,{children:["When you configure this connector in the web application, the automatic ",(0,t.jsx)(n.strong,{children:"discovery"})," process sets up a binding for ",(0,t.jsx)(n.em,{children:"most"})," tables it finds in your database, but there are exceptions."]}),(0,t.jsxs)(n.p,{children:["Tables in the MariaDB system databases ",(0,t.jsx)(n.code,{children:"information_schema"}),", ",(0,t.jsx)(n.code,{children:"mysql"}),", and ",(0,t.jsx)(n.code,{children:"performance_schema"})," will not be discovered.\nYou can add bindings for such tables manually."]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-mariadb:dev\n config:\n address: "127.0.0.1:3306"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n namespace: ${TABLE_NAMESPACE}\n stream: ${TABLE_NAME}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,t.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting-capture-errors",children:"Troubleshooting Capture Errors"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"source-amazon-rds-mariadb"})," connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations:"]}),"\n",(0,t.jsx)(n.h3,{id:"unsupported-operations",children:"Unsupported Operations"}),"\n",(0,t.jsxs)(n.p,{children:["If your capture is failing with an ",(0,t.jsx)(n.code,{children:'"unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE"'})," error, this indicates that such an operation has taken place impacting a table which is currently being captured."]}),"\n",(0,t.jsxs)(n.p,{children:["In the case of ",(0,t.jsx)(n.code,{children:"DROP TABLE"})," and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety)."]}),"\n",(0,t.jsxs)(n.p,{children:["In the case of ",(0,t.jsx)(n.code,{children:"ALTER TABLE"})," we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a ",(0,t.jsx)(n.code,{children:"DROP"})," or ",(0,t.jsx)(n.code,{children:"TRUNCATE TABLE"}),", but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did."]}),"\n",(0,t.jsx)(n.h3,{id:"data-manipulation-queries",children:"Data Manipulation Queries"}),"\n",(0,t.jsxs)(n.p,{children:["If your capture is failing with an ",(0,t.jsx)(n.code,{children:'"unsupported DML query"'})," error, this means that an ",(0,t.jsx)(n.code,{children:"INSERT"}),", ",(0,t.jsx)(n.code,{children:"UPDATE"}),", ",(0,t.jsx)(n.code,{children:"DELETE"})," or other data manipulation query is present in the binlog. This should generally not happen if ",(0,t.jsx)(n.code,{children:"binlog_format = 'ROW'"})," as described in the ",(0,t.jsx)(n.a,{href:"#prerequisites",children:"Prerequisites"})," section."]}),"\n",(0,t.jsxs)(n.p,{children:["Resolving this error requires fixing the ",(0,t.jsx)(n.code,{children:"binlog_format"})," system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an ",(0,t.jsx)(n.code,{children:"INSERT"}),"/",(0,t.jsx)(n.code,{children:"DELETE"})," query it may suffice to remove the capture binding for the offending table and then re-add it."]}),"\n",(0,t.jsx)(n.h3,{id:"unhandled-queries",children:"Unhandled Queries"}),"\n",(0,t.jsxs)(n.p,{children:["If your capture is failing with an ",(0,t.jsx)(n.code,{children:'"unhandled query"'})," error, some SQL query is present in the binlog which the connector does not (currently) understand."]}),"\n",(0,t.jsxs)(n.p,{children:["In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported ",(0,t.jsx)(n.a,{href:"#data-manipulation-queries",children:"DML Query"}),", an unsupported ",(0,t.jsx)(n.a,{href:"#unsupported-operations",children:"Table Operation"}),", or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog."]}),"\n",(0,t.jsx)(n.h3,{id:"metadata-errors",children:"Metadata Errors"}),"\n",(0,t.jsxs)(n.p,{children:["If your capture is failing with a ",(0,t.jsx)(n.code,{children:'"metadata error"'})," then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes."]}),"\n",(0,t.jsx)(n.p,{children:"This should never happen, and most likely means that the binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety)."}),"\n",(0,t.jsx)(n.h3,{id:"insufficient-binlog-retention",children:"Insufficient Binlog Retention"}),"\n",(0,t.jsxs)(n.p,{children:["If your capture fails with a ",(0,t.jsx)(n.code,{children:'"binlog retention period is too short"'})," error, it is informing you that the MariaDB binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from."]}),"\n",(0,t.jsx)(n.p,{children:"(If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.)"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:'"binlog retention period is too short"'})," error should normally be fixed by setting ",(0,t.jsx)(n.code,{children:"binlog_expire_logs_seconds = 2592000"})," as described in the ",(0,t.jsx)(n.a,{href:"#prerequisites",children:"Prerequisites"})," section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the ",(0,t.jsx)(n.code,{children:"skip_binlog_retention_check"})," configuration option to disable this safety."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>a,x:()=>o});var t=r(96540);const i={},s=t.createContext(i);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/dbd1cd20.28d3f6e1.js b/pr-preview/pr-1594/assets/js/dbd1cd20.28d3f6e1.js deleted file mode 100644 index a87a9506a1..0000000000 --- a/pr-preview/pr-1594/assets/js/dbd1cd20.28d3f6e1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8707],{41213:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=s(74848),r=s(28453);const i={sidebar_position:6},o="PostgreSQL",a={id:"reference/Connectors/capture-connectors/PostgreSQL/PostgreSQL",title:"PostgreSQL",description:"This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/PostgreSQL/PostgreSQL.md",sourceDirName:"reference/Connectors/capture-connectors/PostgreSQL",slug:"/reference/Connectors/capture-connectors/PostgreSQL/",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/PostgreSQL/PostgreSQL.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Pinterest",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest"},next:{title:"Supabase",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase"}},l={},c=[{value:"Supported versions and platforms",id:"supported-versions-and-platforms",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Self-hosted PostgreSQL",id:"self-hosted-postgresql",level:3},{value:"Amazon Aurora",id:"amazon-aurora",level:3},{value:"Azure Database for PostgreSQL",id:"azure-database-for-postgresql",level:3},{value:"Backfills and performance considerations",id:"backfills-and-performance-considerations",level:2},{value:"Configuration",id:"configuration",level:2},{value:"WAL Retention and Tuning Parameters",id:"wal-retention-and-tuning-parameters",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"SSL Mode",id:"ssl-mode",level:4},{value:"Sample",id:"sample",level:3},{value:"TOASTed values",id:"toasted-values",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"Publications",id:"publications",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"postgresql",children:"PostgreSQL"}),"\n",(0,t.jsx)(n.p,{children:"This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://github.com/estuary/connectors/pkgs/container/source-postgres",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-postgres:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(n.p,{children:["For managed PostgreSQL insteances that do not support logical replication, we offer a ",(0,t.jsx)(n.a,{href:"./postgres-batch/",children:"PostgreSQL Batch Connector"})," as an alternative."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-versions-and-platforms",children:"Supported versions and platforms"}),"\n",(0,t.jsx)(n.p,{children:"This connector supports PostgreSQL versions 10.0 and later on major cloud platforms, as well as self-hosted instances."}),"\n",(0,t.jsx)(n.p,{children:"Setup instructions are provided for the following platforms:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#self-hosted-postgresql",children:"Self-hosted PostgreSQL"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./amazon-rds-postgres/",children:"Amazon RDS"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#amazon-aurora",children:"Amazon Aurora"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./google-cloud-sql-postgres/",children:"Google Cloud SQL"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#azure-database-for-postgresql",children:"Azure Database for PostgreSQL"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"You'll need a PostgreSQL database setup with the following:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://www.postgresql.org/docs/current/runtime-config-wal.html",children:"Logical replication enabled"})," \u2014 ",(0,t.jsx)(n.code,{children:"wal_level=logical"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://www.postgresql.org/docs/current/sql-createrole.html",children:"User role"})," with ",(0,t.jsx)(n.code,{children:"REPLICATION"})," attribute"]}),"\n",(0,t.jsxs)(n.li,{children:["A ",(0,t.jsx)(n.a,{href:"https://www.postgresql.org/docs/current/warm-standby.html#STREAMING-REPLICATION-SLOTS",children:"replication slot"}),". This represents a \u201ccursor\u201d into the PostgreSQL write-ahead log from which change events can be read.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Optional; if none exist, one will be created by the connector."}),"\n",(0,t.jsxs)(n.li,{children:["If you wish to run multiple captures from the same database, each must have its own slot.\nYou can create these slots yourself, or by specifying a name other than the default in the advanced ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["A ",(0,t.jsx)(n.a,{href:"https://www.postgresql.org/docs/current/sql-createpublication.html",children:"publication"}),". This represents the set of tables for which change events will be reported.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["A watermarks table. The watermarks table is a small \u201cscratch space\u201d to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"Configuration Tip",type:"tip",children:(0,t.jsxs)(n.p,{children:["To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see ",(0,t.jsx)(n.a,{href:"/guides/connect-network/",children:"configure connections with SSH tunneling"}),"."]})}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsx)(n.p,{children:"To meet these requirements, follow the steps for your hosting type."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#self-hosted-postgresql",children:"Self-hosted PostgreSQL"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./amazon-rds-postgres/",children:"Amazon RDS"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#amazon-aurora",children:"Amazon Aurora"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./google-cloud-sql-postgres/",children:"Google Cloud SQL"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#azure-database-for-postgresql",children:"Azure Database for PostgreSQL"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"Supabase",children:"Supabase"})}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"self-hosted-postgresql",children:"Self-hosted PostgreSQL"}),"\n",(0,t.jsx)(n.p,{children:"The simplest way to meet the above prerequisites is to change the WAL level and have the connector use a database superuser role."}),"\n",(0,t.jsx)(n.p,{children:"For a more restricted setup, create a new user with just the required permissions as detailed in the following steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Connect to your instance and create a new user and password:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Assign the appropriate role."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"If using PostgreSQL v14 or later:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"GRANT pg_read_all_data TO flow_capture;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsx)(n.li,{children:"If using an earlier version:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture;\nGRANT SELECT ON ALL TABLES IN SCHEMA public, <other_schema> TO flow_capture;\nGRANT SELECT ON ALL TABLES IN SCHEMA information_schema, pg_catalog TO flow_capture;\n"})}),"\n",(0,t.jsxs)(n.p,{children:["where ",(0,t.jsx)(n.code,{children:"<other_schema>"})," lists all schemas that will be captured from."]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"If an even more restricted set of permissions is desired, you can also grant SELECT on\njust the specific table(s) which should be captured from. The \u2018information_schema\u2019 and\n\u2018pg_catalog\u2019 access is required for stream auto-discovery, but not for capturing already\nconfigured streams."})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create the watermarks table, grant privileges, and create publication:"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);\nGRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;\nCREATE PUBLICATION flow_publication;\nALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);\nALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>;\n"})}),"\n",(0,t.jsxs)(n.p,{children:["where ",(0,t.jsx)(n.code,{children:"<other_tables>"})," lists all tables that will be captured from. The ",(0,t.jsx)(n.code,{children:"publish_via_partition_root"}),"\nsetting is recommended (because most users will want changes to a partitioned table to be captured\nunder the name of the root table) but is not required."]}),"\n",(0,t.jsxs)(n.ol,{start:"4",children:["\n",(0,t.jsx)(n.li,{children:"Set WAL level to logical:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"ALTER SYSTEM SET wal_level = logical;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"5",children:["\n",(0,t.jsx)(n.li,{children:"Restart PostgreSQL to allow the WAL level change to take effect."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"amazon-aurora",children:"Amazon Aurora"}),"\n",(0,t.jsx)(n.p,{children:"You must apply some of the settings to the entire Aurora DB cluster, and others to a database instance within the cluster.\nFor each step, take note of which entity you're working with."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Modifying.html#Aurora.Modifying.Instance",children:"Modify the instance"}),", choosing ",(0,t.jsx)(n.strong,{children:"Publicly accessible"})," in the ",(0,t.jsx)(n.strong,{children:"Connectivity"})," settings."]}),"\n",(0,t.jsxs)(n.li,{children:["Edit the VPC security group associated with your instance, or create a new VPC security group and associate it with the instance as described in ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html#Overview.RDSSecurityGroups.Create",children:"the Amazon documentation"}),". Create a new inbound rule and a new outbound rule that allow all traffic from the ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Follow the guide to ",(0,t.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,t.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Enable logical replication on your Aurora DB cluster."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create a ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html#USER_WorkingWithParamGroups.CreatingCluster",children:"parameter group"}),".\nCreate a unique name and description and set the following properties:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Family"}),": aurora-postgresql13, or substitute the version of Aurora PostgreSQL used for your cluster."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Type"}),": DB Cluster Parameter group"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html#USER_WorkingWithParamGroups.ModifyingCluster",children:"Modify the new parameter group"})," and set ",(0,t.jsx)(n.code,{children:"rds.logical_replication=1"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithDBClusterParamGroups.html#USER_WorkingWithParamGroups.AssociatingCluster",children:"Associate the parameter group"})," with the DB cluster."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Reboot the cluster to allow the new parameter group to take effect."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"In the PostgreSQL client, connect to your instance and run the following commands to create a new user for the capture with appropriate permissions,\nand set up the watermarks table and publication."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE USER flow_capture WITH PASSWORD 'secret';\nGRANT rds_replication TO flow_capture;\nGRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture;\nALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture;\nCREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);\nGRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;\nCREATE PUBLICATION flow_publication;\nALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);\nALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>;\n"})}),"\n",(0,t.jsxs)(n.p,{children:["where ",(0,t.jsx)(n.code,{children:"<other_tables>"})," lists all tables that will be captured from. The ",(0,t.jsx)(n.code,{children:"publish_via_partition_root"}),"\nsetting is recommended (because most users will want changes to a partitioned table to be captured\nunder the name of the root table) but is not required."]}),"\n",(0,t.jsxs)(n.ol,{start:"6",children:["\n",(0,t.jsxs)(n.li,{children:["In the ",(0,t.jsx)(n.a,{href:"https://console.aws.amazon.com/rds/",children:"RDS console"}),", note the instance's Endpoint and Port. You'll need these for the ",(0,t.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"azure-database-for-postgresql",children:"Azure Database for PostgreSQL"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a new ",(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/postgresql/flexible-server/how-to-manage-firewall-portal#create-a-firewall-rule-after-server-is-created",children:"firewall rule"})," that grants access to the ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Follow the guide to ",(0,t.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,t.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In your Azure PostgreSQL instance's support parameters, ",(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/postgresql/single-server/concepts-logical#set-up-your-server",children:"set replication to logical"})," to enable logical replication."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"In the PostgreSQL client, connect to your instance and run the following commands to create a new user for the capture with appropriate permissions."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION;\n"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"If using PostgreSQL v14 or later:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"GRANT pg_read_all_data TO flow_capture;\n"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If using an earlier version:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture;\n GRANT SELECT ON ALL TABLES IN SCHEMA public, <others> TO flow_capture;\n GRANT SELECT ON ALL TABLES IN SCHEMA information_schema, pg_catalog TO flow_capture;\n"})}),"\n",(0,t.jsxs)(n.p,{children:["where ",(0,t.jsx)(n.code,{children:"<others>"})," lists all schemas that will be captured from."]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"If an even more restricted set of permissions is desired, you can also grant SELECT on\njust the specific table(s) which should be captured from. The \u2018information_schema\u2019 and \u2018pg_catalog\u2019 access is required for stream auto-discovery, but not for capturing already\nconfigured streams."})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"4",children:["\n",(0,t.jsx)(n.li,{children:"Set up the watermarks table and publication."}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture;\nGRANT SELECT ON ALL TABLES IN SCHEMA public, <others> TO flow_capture;\nGRANT SELECT ON information_schema.columns, information_schema.tables, pg_catalog.pg_attribute, pg_catalog.pg_class, pg_catalog.pg_index, pg_catalog.pg_namespace TO flow_capture;\nCREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);\nGRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;\nCREATE PUBLICATION flow_publication;\nALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);\nALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"5",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Note the following important items for configuration:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Find the instance's host under Server Name, and the port under Connection Strings (usually ",(0,t.jsx)(n.code,{children:"5432"}),"). Together, you'll use the host",":port"," as the ",(0,t.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n",(0,t.jsxs)(n.li,{children:["Format ",(0,t.jsx)(n.code,{children:"user"})," as ",(0,t.jsx)(n.code,{children:"username@databasename"}),"; for example, ",(0,t.jsx)(n.code,{children:"flow_capture@myazuredb"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"backfills-and-performance-considerations",children:"Backfills and performance considerations"}),"\n",(0,t.jsxs)(n.p,{children:["When the a PostgreSQL capture is initiated, by default, the connector first ",(0,t.jsx)(n.em,{children:"backfills"}),", or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis."]}),"\n",(0,t.jsx)(n.p,{children:"This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow.\nHowever, you may find it appropriate to skip the backfill, especially for extremely large tables."}),"\n",(0,t.jsxs)(n.p,{children:["In this case, you may turn of backfilling on a per-table basis. See ",(0,t.jsx)(n.a,{href:"#properties",children:"properties"})," for details."]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector."]}),"\n",(0,t.jsx)(n.h2,{id:"wal-retention-and-tuning-parameters",children:"WAL Retention and Tuning Parameters"}),"\n",(0,t.jsx)(n.p,{children:"Postgres logical replication works by reading change events from the writeahead log,\nreordering WAL events in memory on the server, and sending them to the client in the\norder that transactions were committed. The replication slot used by the capture is\nessentially a cursor into that logical sequence of changes."}),"\n",(0,t.jsxs)(n.p,{children:["Because of how Postgres reorders WAL events into atomic transactions, there are two\ndistinct LSNs which matter when it comes to WAL retention. The ",(0,t.jsx)(n.code,{children:"confirmed_flush_lsn"}),"\nproperty of a replication slot represents the latest event in the WAL which has been\nsent to and confirmed by the client. However there may be some number of uncommitted\nchanges prior to this point in the WAL which are still relevant and will be sent to\nthe client in later transactions. Thus there is also a ",(0,t.jsx)(n.code,{children:"restart_lsn"})," property which\nrepresents the point in the WAL from which logical decoding must resume in the future\nif the replication connection is closed and restarted."]}),"\n",(0,t.jsxs)(n.p,{children:["The server cannot clean up old WAL files so long as there are active replication slots\nwhose ",(0,t.jsx)(n.code,{children:"restart_lsn"})," position requires them. There are two ways that ",(0,t.jsx)(n.code,{children:"restart_lsn"})," might\nget stuck at a particular point in the WAL:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["When a capture is deleted, disabled, or repeatedly failing for other reasons,\nit is not able to advance the ",(0,t.jsx)(n.code,{children:"confirmed_flush_lsn"})," and thus ",(0,t.jsx)(n.code,{children:"restart_lsn"})," cannot\nadvance either."]}),"\n",(0,t.jsxs)(n.li,{children:["When a long-running transaction is open on the server the ",(0,t.jsx)(n.code,{children:"restart_lsn"})," of a\nreplication slot may be unable to advance even though ",(0,t.jsx)(n.code,{children:"confirmed_flush_lsn"})," is."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"By default Postgres will retain an unbounded amount of WAL data and fill up the entire\ndisk if a replication slot stops advancing. There are two ways to address this:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["When deleting a capture, make sure that the replication slot is also successfully deleted.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["You can list replication slots with the query ",(0,t.jsx)(n.code,{children:"SELECT * FROM pg_replication_slots"})," and\ncan drop the replication slot manually with ",(0,t.jsx)(n.code,{children:"pg_drop_replication_slot('flow_slot')"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["The database setting ",(0,t.jsx)(n.code,{children:"max_slot_wal_keep_size"})," can be used to bound the maximum amount of\nWAL data which a replication slot can force the database to retain.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["This setting defaults to ",(0,t.jsx)(n.code,{children:"-1"})," (unlimited) but should be set on production databases\nto protect them from unbounded WAL retention filling up the entire disk."]}),"\n",(0,t.jsxs)(n.li,{children:["Proper sizing of this setting is complex for reasons discussed below, but a value\nof ",(0,t.jsx)(n.code,{children:"50GB"})," should be enough for many databases."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["When the ",(0,t.jsx)(n.code,{children:"max_slot_wal_keep_size"})," limit is exceeded, Postgres will terminate any active\nreplication connections using that slot and invalidate the replication slot so that it\ncan no longer be used. If Postgres invalidates the replication slot, the Flow capture\nusing that slot will fail and manual intervention will be required to restart the capture\nand re-backfill all tables."]}),"\n",(0,t.jsxs)(n.p,{children:["Setting too low of a limit for ",(0,t.jsx)(n.code,{children:"max_slot_wal_keep_size"})," can cause additional failures\nin the presence of long-running transactions. Even when a client is actively receiving\nand acknowledging replication events, a long-running transaction can cause the ",(0,t.jsx)(n.code,{children:"restart_lsn"}),"\nof the replication slot to remain stuck until that transaction commits. Thus the value of\n",(0,t.jsx)(n.code,{children:"max_slot_wal_keep_size"})," needs to be set high enough to avoid this happening. The precise\nvalue depends on the overall change rate of your database and worst-case transaction open\ntime, but there is no downside to using a larger value provided you have enough free disk\nspace."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/address"})})}),(0,t.jsx)(n.td,{children:"Address"}),(0,t.jsxs)(n.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/database"})})}),(0,t.jsx)(n.td,{children:"Database"}),(0,t.jsx)(n.td,{children:"Logical database name to capture from."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsxs)(n.td,{children:["Required, ",(0,t.jsx)(n.code,{children:'"postgres"'})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/user"})})}),(0,t.jsx)(n.td,{children:"User"}),(0,t.jsx)(n.td,{children:"The database user to authenticate as."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsxs)(n.td,{children:["Required, ",(0,t.jsx)(n.code,{children:'"flow_capture"'})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/password"})})}),(0,t.jsx)(n.td,{children:"Password"}),(0,t.jsx)(n.td,{children:"Password for the specified database user."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced"})}),(0,t.jsx)(n.td,{children:"Advanced Options"}),(0,t.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,t.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,t.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"4096"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/publicationName"})}),(0,t.jsx)(n.td,{children:"Publication Name"}),(0,t.jsx)(n.td,{children:"The name of the PostgreSQL publication to replicate from."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'"flow_publication"'})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/skip_backfills"})}),(0,t.jsx)(n.td,{children:"Skip Backfills"}),(0,t.jsx)(n.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/slotName"})}),(0,t.jsx)(n.td,{children:"Slot Name"}),(0,t.jsx)(n.td,{children:"The name of the PostgreSQL replication slot to replicate from."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'"flow_slot"'})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/watermarksTable"})}),(0,t.jsx)(n.td,{children:"Watermarks Table"}),(0,t.jsx)(n.td,{children:"The name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'"public.flow_watermarks"'})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced/sslmode"})}),(0,t.jsx)(n.td,{children:"SSL Mode"}),(0,t.jsx)(n.td,{children:"Overrides SSL connection behavior by setting the 'sslmode' parameter."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/namespace"})})}),(0,t.jsx)(n.td,{children:"Namespace"}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.a,{href:"https://www.postgresql.org/docs/9.1/ddl-schemas.html",children:"namespace/schema"})," of the table."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Table name."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync mode"}),(0,t.jsxs)(n.td,{children:["Connection method. Always set to ",(0,t.jsx)(n.code,{children:"incremental"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"ssl-mode",children:"SSL Mode"}),"\n",(0,t.jsxs)(n.p,{children:["Certain managed PostgreSQL implementations may require you to explicitly set the ",(0,t.jsx)(n.a,{href:"https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION",children:"SSL Mode"})," to connect with Flow. One example is ",(0,t.jsx)(n.a,{href:"https://neon.tech/docs/connect/connect-securely",children:"Neon"}),", which requires the setting ",(0,t.jsx)(n.code,{children:"verify-full"}),". Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration."]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/source-postgres:dev"\n config:\n address: "localhost:5432"\n database: "postgres"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n stream: ${TABLE_NAME}\n namespace: ${TABLE_NAMESPACE}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,t.jsx)(n.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,t.jsx)(n.h2,{id:"toasted-values",children:"TOASTed values"}),"\n",(0,t.jsxs)(n.p,{children:["PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons.\nIf your tables contain values that exceed the limit, those values can't be stored directly.\nPostgreSQL uses ",(0,t.jsx)(n.a,{href:"https://www.postgresql.org/docs/current/storage-toast.html",children:"TOAST"})," (The Oversized-Attribute Storage Technique) to\nstore them separately."]}),"\n",(0,t.jsxs)(n.p,{children:["TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector.\nIf a change event occurs on a row that contains a TOASTed value, ",(0,t.jsx)(n.em,{children:"but the TOASTed value itself is unchanged"}),", it is omitted from the WAL.\nAs a result, the connector emits a row update with the a value omitted, which might cause\nunexpected results in downstream catalog tasks if adjustments are not made."]}),"\n",(0,t.jsxs)(n.p,{children:["The PostgreSQL connector handles TOASTed values for you when you follow the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#flowctl-discover",children:"standard discovery workflow"}),"\nor use the ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#flow-ui",children:"Flow UI"})," to create your capture.\nIt uses ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/merge",children:"merge"})," ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"reductions"}),"\nto fill in the previous known TOASTed value in cases when that value is omitted from a row update."]}),"\n",(0,t.jsx)(n.p,{children:"However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["When you materialize the captured data to another system using a connector that requires ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})]}),"\n",(0,t.jsxs)(n.li,{children:["When you perform a ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivation"})," that uses TOASTed values"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(n.p,{children:"If you encounter an issue that you suspect is due to TOASTed values, try the following:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Ensure your collection's schema is using the merge ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas#reduce-annotations",children:"reduction strategy"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://www.postgresql.org/docs/9.4/sql-altertable.html",children:"Set REPLICA IDENTITY to FULL"})," for the table. This circumvents the problem by forcing the\nWAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"mailto:support@estuary.dev",children:"Contact Estuary support"})," for assistance."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"publications",children:"Publications"}),"\n",(0,t.jsx)(n.p,{children:"It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true);\n"})}),"\n",(0,t.jsx)(n.p,{children:"Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes."})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var t=s(96540);const r={},i=t.createContext(r);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/de285be4.307d9b0b.js b/pr-preview/pr-1594/assets/js/de285be4.307d9b0b.js deleted file mode 100644 index 5bef73df5c..0000000000 --- a/pr-preview/pr-1594/assets/js/de285be4.307d9b0b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[698],{59109:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>l,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var s=r(74848),i=r(28453);const n={},o="Flow user guides",a={id:"guides/README",title:"Flow user guides",description:"In this section, you'll find step-by-step guides that walk you through common Flow tasks.",source:"@site/docs/guides/README.md",sourceDirName:"guides",slug:"/guides/",permalink:"/pr-preview/pr-1594/guides/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/README.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Implementing Derivations for AcmeBank",permalink:"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank"},next:{title:"Create a basic Data Flow",permalink:"/pr-preview/pr-1594/guides/create-dataflow"}},u={},c=[];function d(e){const t={a:"a",h1:"h1",p:"p",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"flow-user-guides",children:"Flow user guides"}),"\n",(0,s.jsx)(t.p,{children:"In this section, you'll find step-by-step guides that walk you through common Flow tasks."}),"\n",(0,s.jsxs)(t.p,{children:["These guides are designed to help you work with Data Flows in production \u2014 we assume you have your own data and are familiar with your source and destination systems. You might be here to ",(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"get your data moving with Flow"})," as quickly as possible, ",(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/flowctl/create-derivation",children:"reshape your collection with a derivation"}),", or ",(0,s.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/connect-network",children:"create a secure connection to your database"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["If you'd prefer a tailored learning experience with sample data, check out the ",(0,s.jsx)(t.a,{href:"../getting-started/tutorials/",children:"Flow tutorials"}),"."]})]})}function l(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,t,r)=>{r.d(t,{R:()=>o,x:()=>a});var s=r(96540);const i={},n=s.createContext(i);function o(e){const t=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/de7a358c.dd4ca8f3.js b/pr-preview/pr-1594/assets/js/de7a358c.dd4ca8f3.js deleted file mode 100644 index dd4e64fddf..0000000000 --- a/pr-preview/pr-1594/assets/js/de7a358c.dd4ca8f3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9789],{66994:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>w,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var i=n(74848),r=n(28453);const s={description:"Using the firstWriteWins and lastWriteWins reduction strategies",sidebar_position:2},a="firstWriteWins and lastWriteWins",o={id:"reference/reduction-strategies/firstwritewins-and-lastwritewins",title:"firstWriteWins and lastWriteWins",description:"Using the firstWriteWins and lastWriteWins reduction strategies",source:"@site/docs/reference/reduction-strategies/firstwritewins-and-lastwritewins.md",sourceDirName:"reference/reduction-strategies",slug:"/reference/reduction-strategies/firstwritewins-and-lastwritewins",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/reduction-strategies/firstwritewins-and-lastwritewins.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{description:"Using the firstWriteWins and lastWriteWins reduction strategies",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"append",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/append"},next:{title:"merge",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/merge"}},c={},d=[];function l(e){const t={code:"code",h1:"h1",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"firstwritewins-and-lastwritewins",children:"firstWriteWins and lastWriteWins"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"firstWriteWins"})," always takes the first value seen at the annotated location. Likewise, ",(0,i.jsx)(t.code,{children:"lastWriteWins"})," always takes the last. Schemas that don\u2019t have an explicit reduce annotation default to ",(0,i.jsx)(t.code,{children:"lastWriteWins"})," behavior."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:'collections:\n - name: example/reductions/fww-lww\n schema:\n type: object\n reduce: { strategy: merge }\n properties:\n key: { type: string }\n fww: { reduce: { strategy: firstWriteWins } }\n lww: { reduce: { strategy: lastWriteWins } }\n required: [key]\n key: [/key]\n\ntests:\n "Expect we can track first- and list-written values":\n - ingest:\n collection: example/reductions/fww-lww\n documents:\n - { key: "key", fww: "one", lww: "one" }\n - { key: "key", fww: "two", lww: "two" }\n - verify:\n collection: example/reductions/fww-lww\n documents:\n - { key: "key", fww: "one", lww: "two" }\n'})})]})}function w(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>o});var i=n(96540);const r={},s=i.createContext(r);function a(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/deef465e.8270f0d6.js b/pr-preview/pr-1594/assets/js/deef465e.8270f0d6.js deleted file mode 100644 index 92f696447e..0000000000 --- a/pr-preview/pr-1594/assets/js/deef465e.8270f0d6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9023],{91206:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>c});var s=o(74848),r=o(28453);const i={},t="Google Ads",d={id:"reference/Connectors/capture-connectors/google-ads",title:"Google Ads",description:"This connector captures data from resources in one or more Google Ads accounts into Flow collections via the Google Ads API.",source:"@site/docs/reference/Connectors/capture-connectors/google-ads.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/google-ads",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/google-ads.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Gladly",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly"},next:{title:"Google Analytics UA",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics"}},l={},c=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Customer Id & Login Customer Id",id:"customer-id--login-customer-id",level:3},{value:"Multiple Customer Ids",id:"multiple-customer-ids",level:4},{value:"Using OAuth2 to authenticate with Google in the Flow web app",id:"using-oauth2-to-authenticate-with-google-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually",id:"configuring-the-connector-specification-manually",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Custom queries",id:"custom-queries",level:2},{value:"Stream Limitations",id:"stream-limitations",level:2},{value:"ClickView",id:"clickview",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"google-ads",children:"Google Ads"}),"\n",(0,s.jsxs)(n.p,{children:["This connector captures data from ",(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/v11/overview",children:"resources"})," in one or more Google Ads accounts into Flow collections via the Google Ads API."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/source-google-ads:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/source-google-ads:dev"})})," provides the latest connector image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,s.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/google-ads/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,s.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,s.jsxs)(n.p,{children:["The following data resources are supported.\nResources ending in ",(0,s.jsx)(n.code,{children:"_report"})," represent legacy resources from the ",(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/docs/migration",children:"Google Adwords API"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/latest/ad_group_ad",children:"ad_group_ads"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/latest/ad_group_ad_label",children:"ad_group_ad_label"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/latest/ad_group",children:"ad_groups"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/latest/ad_group_label",children:"ad_group_label"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/v9/campaign",children:"campaigns"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/latest/campaign_label",children:"campaign_labels"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/reference/rpc/latest/ClickView",children:"click_view"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/latest/customer",children:"customer"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/latest/geographic_view",children:"geographic_view"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/latest/keyword_view",children:"keyword_view"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/latest/user_location_view",children:"user_location_view"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/docs/migration/mapping#account_performance",children:"account_performance_report"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/docs/migration/mapping#ad_performance",children:"ad_performance_report"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/docs/migration/mapping#display_keyword_performance",children:"display_keyword_performance_report"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/docs/migration/mapping#display_topics_performance",children:"display_topics_performance_report"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/docs/migration/mapping#shopping_performance",children:"shopping_performance_report"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,s.jsxs)(n.p,{children:["You may also generate custom resources using ",(0,s.jsx)(n.a,{href:"#custom-queries",children:"GAQL queries"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"There are two ways to authenticate with Google when capturing data into Flow: using OAuth2, and manually, using tokens and secret credentials.\nTheir prerequisites differ."}),"\n",(0,s.jsx)(n.p,{children:"OAuth is recommended for simplicity in the Flow web app;\nthe manual method is the only supported method using the command line."}),"\n",(0,s.jsx)(n.h3,{id:"customer-id--login-customer-id",children:"Customer Id & Login Customer Id"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"Login Customer Id"})," setting refers to your MCC Google Ads account Id.\nOne can easily find this number by accessing their Google Ads Dashboard and look to the far right corner of their screen."]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://github.com/estuary/flow/assets/14100959/f20aeeef-eeac-432f-b547-11477e31661d",alt:"Screenshot from 2024-02-19 05-10-29"})}),"\n",(0,s.jsxs)(n.p,{children:["In the above example, my ",(0,s.jsx)(n.code,{children:"login_customer_id"})," would be 1234567890."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"Customer Id"})," setting refers to your Client Accounts under a MCC account.\nOne can easily find this number by accessing their Google Ads Dashboard and look to the far left corner of their screen,\nafter selecting a client account."]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://github.com/estuary/flow/assets/14100959/4f171fa7-9c82-4f24-8a1d-8aacd382fb28",alt:"Screenshot from 2024-02-19 05-10-16"})}),"\n",(0,s.jsxs)(n.p,{children:["In the above example, my ",(0,s.jsx)(n.code,{children:"customer_id"})," would be 9876543210."]}),"\n",(0,s.jsx)(n.h4,{id:"multiple-customer-ids",children:"Multiple Customer Ids"}),"\n",(0,s.jsxs)(n.p,{children:["This Source allows for multiple Customer Ids to be selected.\nTo allow this, simply add your ",(0,s.jsx)(n.code,{children:"customer_id"})," followed by a comma."]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.p,{children:"Customer1 = 1234567890\nCustomer2 = 9876543210"}),"\n",(0,s.jsx)(n.p,{children:"customer_id = 1234567890,9876543210"}),"\n",(0,s.jsx)(n.h3,{id:"using-oauth2-to-authenticate-with-google-in-the-flow-web-app",children:"Using OAuth2 to authenticate with Google in the Flow web app"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"One or more Google Ads accounts."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Note each account's ",(0,s.jsx)(n.a,{href:"https://support.google.com/google-ads/answer/1704344",children:"customer ID"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A Google Account that has ",(0,s.jsx)(n.a,{href:"https://support.google.com/google-ads/answer/6372672?hl=en",children:"access"})," to the Google Ads account(s)."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["This account may be a ",(0,s.jsx)(n.a,{href:"https://ads.google.com/home/tools/manager-accounts/",children:(0,s.jsx)(n.strong,{children:"manager account"})}),".\nIf so, ensure that it is ",(0,s.jsx)(n.a,{href:"https://support.google.com/google-ads/answer/7459601",children:"linked to each Google Ads account"})," and make note of its ",(0,s.jsx)(n.a,{href:"https://support.google.com/google-ads/answer/29198?hl=en",children:"customer ID"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"configuring-the-connector-specification-manually",children:"Configuring the connector specification manually"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"One or more Google Ads accounts."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Note each account's ",(0,s.jsx)(n.a,{href:"https://support.google.com/google-ads/answer/1704344?hl=en",children:"customer ID"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A Google Ads ",(0,s.jsx)(n.a,{href:"https://ads.google.com/home/tools/manager-accounts/",children:(0,s.jsx)(n.strong,{children:"manager account"})})," that has been ",(0,s.jsx)(n.a,{href:"https://support.google.com/google-ads/answer/7459601",children:"linked to each Google Ads account"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A Google Ads ",(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/docs/first-call/dev-token?hl=en",children:"developer token"}),". Your Google Ads manager account must be configured prior to applying for a developer token."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"Developer token applications are independently reviewed by Google and may take one or more days to be approved.\nBe sure to carefully review Google's requirements before submitting an application."})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/docs/first-call/refresh-token?hl=en",children:"refresh token"}),", which fetches a new developer tokens for you as the previous token expires."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A generated ",(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/docs/oauth/cloud-project#create_a_client_id_and_client_secret",children:"Client ID and Client Secret"}),", used for authentication."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the Flow specification file.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Ads source connector."]}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.p,{children:["The properties in the table below reflect the manual authentication method.\nIf you're working in the Flow web app, you'll use ",(0,s.jsx)(n.a,{href:"#using-oauth2-to-authenticate-with-google-in-the-flow-web-app",children:"OAuth2"}),",\nso many of these properties aren't required."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/conversion_window_days"})}),(0,s.jsx)(n.td,{children:"Conversion Window (Optional)"}),(0,s.jsxs)(n.td,{children:["A conversion window is the period of time after an ad interaction (such as an ad click or video view) during which a conversion, such as a purchase, is recorded in Google Ads. For more information, see ",(0,s.jsx)(n.a,{href:"https://support.google.com/google-ads/answer/3123169?hl=en",children:"Google's docs"}),"."]}),(0,s.jsx)(n.td,{children:"integer"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"14"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials"})})}),(0,s.jsx)(n.td,{children:"Google Credentials"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials/client_id"})})}),(0,s.jsx)(n.td,{children:"Client ID"}),(0,s.jsx)(n.td,{children:"The Client ID of your Google Ads developer application."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials/client_secret"})})}),(0,s.jsx)(n.td,{children:"Client Secret"}),(0,s.jsx)(n.td,{children:"The Client Secret of your Google Ads developer application."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials/developer_token"})})}),(0,s.jsx)(n.td,{children:"Developer Token"}),(0,s.jsx)(n.td,{children:"Developer token granted by Google to use their APIs."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/credentials/refresh_token"})})}),(0,s.jsx)(n.td,{children:"Refresh Token"}),(0,s.jsx)(n.td,{children:"The token for obtaining a new access token."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/custom_queries"})}),(0,s.jsx)(n.td,{children:"Custom GAQL Queries (Optional)"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"array"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.em,{children:(0,s.jsx)(n.code,{children:"/custom_queries/-/query"})})}),(0,s.jsx)(n.td,{children:"Custom Query"}),(0,s.jsxs)(n.td,{children:["A custom defined GAQL query for building the report. Should not contain segments.date expression. See Google's ",(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/v11/overview_query_builder",children:"query builder"})," for more information."]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.em,{children:(0,s.jsx)(n.code,{children:"/custom_queries/-/table_name"})})}),(0,s.jsx)(n.td,{children:"Destination Table Name"}),(0,s.jsx)(n.td,{children:"The table name in your destination database for chosen query."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/customer_id"})})}),(0,s.jsx)(n.td,{children:"Customer ID(s)"}),(0,s.jsx)(n.td,{children:"Comma separated list of (client) customer IDs. Each customer ID must be specified as a 10-digit number without dashes. More instruction on how to find this value in our docs. Metrics streams like AdGroupAdReport cannot be requested for a manager account."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/end_date"})}),(0,s.jsx)(n.td,{children:"End Date (Optional)"}),(0,s.jsx)(n.td,{children:"UTC date in the format 2017-01-25. Any data after this date will not be replicated."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/login_customer_id"})}),(0,s.jsx)(n.td,{children:"Login Customer ID for Managed Accounts (Optional)"}),(0,s.jsx)(n.td,{children:"If your access to the customer account is through a manager account, this field is required and must be set to the customer ID of the manager account (10-digit number without dashes)."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/start_date"})})}),(0,s.jsx)(n.td,{children:"Start Date"}),(0,s.jsx)(n.td,{children:"UTC date in the format 2017-01-25. Any data before this date will not be replicated."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/stream"})})}),(0,s.jsx)(n.td,{children:"Stream"}),(0,s.jsx)(n.td,{children:"Google Ad resource from which a collection is captured."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/syncMode"})})}),(0,s.jsx)(n.td,{children:"Sync Mode"}),(0,s.jsx)(n.td,{children:"Connection method."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.p,{children:"This sample specification reflects the manual authentication method."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-google-ads:dev\n config:\n conversion_window_days: 7\n credentials:\n client_id: {secret_client_ID}\n client_secret: {secret_secret}\n developer_token: {access_token}\n refresh_token: {refresh_token}\n customer_id: 0123456789, 1234567890\n login_customer_id: 0987654321\n end_date: 2022-01-01\n start_date: 2020-01-01\n custom_queries:\n - query:\n SELECT\n campaign.id,\n campaign.name,\n campaign.status\n FROM campaign\n ORDER BY campaign.id\n table_name: campaigns_custom\n bindings:\n - resource:\n stream: campaign\n syncMode: incremental\n target: ${PREFIX}/campaign\n {...}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"custom-queries",children:"Custom queries"}),"\n",(0,s.jsxs)(n.p,{children:["You can create custom resources using Google Analytics Query Language (GAQL) queries.\nEach generated resource will be mapped to a Flow collection.\nFor help generating a valid query, see ",(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/v11/overview_query_builder",children:"Google's query builder documentation"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"If a query fails to validate against a given Google Ads account, it will be skipped."}),"\n",(0,s.jsx)(n.h2,{id:"stream-limitations",children:"Stream Limitations"}),"\n",(0,s.jsx)(n.h3,{id:"clickview",children:"ClickView"}),"\n",(0,s.jsx)(n.p,{children:"Due to Google Ads API limitations, ClickView stream queries are executed with a time range limited to one day.\nAlso, data can only be requested for periods 90 days before the time of the request."}),"\n",(0,s.jsx)(n.p,{children:"In pratical terms, this means that you can only search ClickView data limited to 3 months ago, anything before this is not returned."}),"\n",(0,s.jsxs)(n.p,{children:["For more information, check ",(0,s.jsx)(n.a,{href:"https://developers.google.com/google-ads/api/fields/v15/click_view",children:"Google's Ads API documentation"})]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>t,x:()=>d});var s=o(96540);const r={},i=s.createContext(r);function t(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/e1d33ea7.754a454b.js b/pr-preview/pr-1594/assets/js/e1d33ea7.754a454b.js deleted file mode 100644 index 81deddae2f..0000000000 --- a/pr-preview/pr-1594/assets/js/e1d33ea7.754a454b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1150],{48231:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var r=s(74848),t=s(28453);const i={},c="Amazon DynamoDB",o={id:"reference/Connectors/capture-connectors/amazon-dynamodb",title:"Amazon DynamoDB",description:"This connector uses DynamoDB streams to continuously capture updates from DynamoDB tables into one or more Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/amazon-dynamodb.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/amazon-dynamodb",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/amazon-dynamodb.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amazon Ads",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads"},next:{title:"Amazon Kinesis",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis"}},d={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"amazon-dynamodb",children:"Amazon DynamoDB"}),"\n",(0,r.jsx)(n.p,{children:"This connector uses DynamoDB streams to continuously capture updates from DynamoDB tables into one or more Flow collections."}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,r.jsx)(n.a,{href:"https://ghcr.io/estuary/source-dynamodb:dev",children:(0,r.jsx)(n.code,{children:"ghcr.io/estuary/source-dynamodb:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"One or more DynamoDB tables with DynamoDB streams enabled. To enable DynamoDB streams for a table:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Select the table in the AWS console"}),"\n",(0,r.jsxs)(n.li,{children:["Go to the ",(0,r.jsx)(n.strong,{children:"Exports and streams"})," tab"]}),"\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Turn on"})," in the DynamoDB stream details section"]}),"\n",(0,r.jsxs)(n.li,{children:["Select ",(0,r.jsx)(n.strong,{children:"New and old images"})," for the ",(0,r.jsx)(n.strong,{children:"View type"})]}),"\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Turn on stream"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["An IAM user with the following ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazondynamodb.html",children:"permissions"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"ListTables"})," on all resources"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"DescribeTable"})," on all resources"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"DescribeStream"})," on all resources"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Scan"})," on all tables used"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"GetRecords"})," on all streams used"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"GetShardIterator"})," on all streams used"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["These permissions should be specified with the ",(0,r.jsx)(n.code,{children:"dynamodb:"})," prefix in an IAM policy document. For more details and examples, see ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/using-identity-based-policies.html",children:"Using identity-based policies with Amazon DynamoDB"})," in the Amazon docs."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["The AWS ",(0,r.jsx)(n.strong,{children:"access key"})," and ",(0,r.jsx)(n.strong,{children:"secret access key"})," for the user. See the ",(0,r.jsx)(n.a,{href:"https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/",children:"AWS blog"})," for help finding these credentials."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the DynamoDB source connector."]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/awsAccessKeyId"})})}),(0,r.jsx)(n.td,{children:"Access Key ID"}),(0,r.jsx)(n.td,{children:"AWS Access Key ID for capturing from DynamoDB tables."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/awsSecretAccessKey"})})}),(0,r.jsx)(n.td,{children:"Secret Access Key"}),(0,r.jsx)(n.td,{children:"AWS Secret Access Key for capturing from DynamoDB tables."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/region"})})}),(0,r.jsx)(n.td,{children:"AWS Region"}),(0,r.jsx)(n.td,{children:"The name of the AWS region where the DynamoDB tables are located."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"advanced/backfillSegments"})}),(0,r.jsx)(n.td,{children:"Backfill Table Segments"}),(0,r.jsx)(n.td,{children:"Number of segments to use for backfill table scans. Has no effect if changed after the backfill has started."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"advanced/endpoint"})}),(0,r.jsx)(n.td,{children:"AWS Endpoint"}),(0,r.jsx)(n.td,{children:"The AWS endpoint URI to connect to. Use if you're capturing from a compatible API that isn't provided by AWS."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"advanced/scanLimit"})}),(0,r.jsx)(n.td,{children:"Scan Limit"}),(0,r.jsx)(n.td,{children:"Limit the number of items to evaluate for each table backfill scan request."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/table"})})}),(0,r.jsx)(n.td,{children:"Table Name"}),(0,r.jsx)(n.td,{children:"The name of the table to be captured."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/rcuAllocation"})}),(0,r.jsx)(n.td,{children:"RCU Allocation"}),(0,r.jsx)(n.td,{children:"Read capacity units the capture will attempt to consume during the table backfill. Leave blank to automatically determine based on the provisioned capacity of the table."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-dynamodb:dev\n config:\n awsAccessKeyId: "example-aws-access-key-id"\n awsSecretAccessKey: "example-aws-secret-access-key"\n region: "us-east-1"\n bindings:\n - resource:\n table: ${TABLE_NAME}\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Your capture definition may be more complex, with additional bindings for each DynamoDB table."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#specification",children:"Learn more about capture definitions."})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>c,x:()=>o});var r=s(96540);const t={},i=r.createContext(t);function c(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/e3318347.4be28ac9.js b/pr-preview/pr-1594/assets/js/e3318347.4be28ac9.js deleted file mode 100644 index a294814c81..0000000000 --- a/pr-preview/pr-1594/assets/js/e3318347.4be28ac9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5423],{19645:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>o});var r=n(74848),s=n(28453);const i={},c="MotherDuck",d={id:"reference/Connectors/materialization-connectors/motherduck",title:"MotherDuck",description:"This connector materializes Flow collections into tables in a MotherDuck database.",source:"@site/docs/reference/Connectors/materialization-connectors/motherduck.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/motherduck",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/motherduck.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"MongoDB",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb"},next:{title:"MySQL",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/"}},a={},o=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Delta updates",id:"delta-updates",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"motherduck",children:"MotherDuck"}),"\n",(0,r.jsx)(t.p,{children:"This connector materializes Flow collections into tables in a MotherDuck database."}),"\n",(0,r.jsx)(t.p,{children:"The connector uses your AWS account to materialize to MotherDuck tables by way of files in an S3\nbucket. The files in the bucket as as a temporary staging area for data storage and retrieval."}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://ghcr.io/estuary/materialize-motherduck:dev",children:(0,r.jsx)(t.code,{children:"ghcr.io/estuary/materialize-motherduck:dev"})}),"\nprovides the latest connector image. You can also follow the link in your browser to see past image\nversions."]}),"\n",(0,r.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(t.p,{children:"To use this connector, you'll need:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["A ",(0,r.jsx)(t.a,{href:"https://motherduck.com/",children:"MotherDuck"})," account and ",(0,r.jsx)(t.a,{href:"https://motherduck.com/docs/authenticating-to-motherduck#fetching-the-service-token",children:"Service\nToken"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["An S3 bucket for staging temporary files. See ",(0,r.jsx)(t.a,{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html",children:"this\nguide"})," for\ninstructions on setting up a new S3 bucket."]}),"\n",(0,r.jsxs)(t.li,{children:["An AWS root or IAM user with ",(0,r.jsx)(t.a,{href:"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_s3_rw-bucket.html",children:"read and write\naccess"}),"\nto the S3 bucket. For this user, you'll need the ",(0,r.jsx)(t.strong,{children:"access key"})," and ",(0,r.jsx)(t.strong,{children:"secret access key"}),". See the\n",(0,r.jsx)(t.a,{href:"https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/",children:"AWS blog"})," for help finding\nthese credentials."]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Use the below properties to configure MotherDuck materialization, which will direct one or\nmore of your Flow collections to your desired tables in the database."}),"\n",(0,r.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/token"})})}),(0,r.jsx)(t.td,{children:"MotherDuck Service Token"}),(0,r.jsx)(t.td,{children:"Service token for authenticating with MotherDuck."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/database"})})}),(0,r.jsx)(t.td,{children:"Database"}),(0,r.jsx)(t.td,{children:"The database to materialize to."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/schema"})})}),(0,r.jsx)(t.td,{children:"Database Schema"}),(0,r.jsx)(t.td,{children:"Database schema for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/bucket"})})}),(0,r.jsx)(t.td,{children:"S3 Staging Bucket"}),(0,r.jsx)(t.td,{children:"Name of the S3 bucket to use for staging data loads."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/awsAccessKeyId"})})}),(0,r.jsx)(t.td,{children:"Access Key ID"}),(0,r.jsx)(t.td,{children:"AWS Access Key ID for reading and writing data to the S3 staging bucket."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/awsSecretAccessKey"})})}),(0,r.jsx)(t.td,{children:"Secret Access Key"}),(0,r.jsx)(t.td,{children:"AWS Secret Access Key for reading and writing data to the S3 staging bucket."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/bucketPath"})}),(0,r.jsx)(t.td,{children:"Bucket Path"}),(0,r.jsx)(t.td,{children:"A prefix that will be used to store objects in S3."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Property"}),(0,r.jsx)(t.th,{children:"Title"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Required/Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:(0,r.jsx)(t.code,{children:"/table"})})}),(0,r.jsx)(t.td,{children:"Table"}),(0,r.jsx)(t.td,{children:"Name of the database table."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{children:"Required"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/delta_updates"})}),(0,r.jsx)(t.td,{children:"Delta Update"}),(0,r.jsx)(t.td,{children:"Should updates to this table be done via delta updates."}),(0,r.jsx)(t.td,{children:"boolean"}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/schema"})}),(0,r.jsx)(t.td,{children:"Alternative Schema"}),(0,r.jsx)(t.td,{children:"Alternative schema for this table (optional)."}),(0,r.jsx)(t.td,{children:"string"}),(0,r.jsx)(t.td,{})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:'materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/materialize-motherduck:dev"\n config:\n token: <motherduck_service_token>\n database: my_db\n schema: main\n bucket: my_bucket\n awsAccessKeyId: <access_key_id>\n awsSecretAccessKey: <secret_access_key>\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,r.jsx)(t.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,r.jsxs)(t.p,{children:["This connector supports both standard (merge) and ",(0,r.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta\nupdates"}),". The default is to\nuse standard updates."]}),"\n",(0,r.jsx)(t.p,{children:"Enabling delta updates will prevent Flow from querying for documents in your\nMotherDuck table, which can reduce latency and costs for large datasets. If you're\ncertain that all events will have unique keys, enabling delta updates is a\nsimple way to improve performance with no effect on the output. However,\nenabling delta updates is not suitable for all workflows, as the resulting table\nin MotherDuck won't be fully reduced."}),"\n",(0,r.jsx)(t.p,{children:"You can enable delta updates on a per-binding basis:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:" bindings:\n \t- resource:\n \ttable: ${table_name}\n delta_updates: true\n source: ${PREFIX}/${COLLECTION_NAME}\n"})})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>d});var r=n(96540);const s={},i=r.createContext(s);function c(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/e33c9cd6.b3bccb4b.js b/pr-preview/pr-1594/assets/js/e33c9cd6.b3bccb4b.js deleted file mode 100644 index 76deb0b15a..0000000000 --- a/pr-preview/pr-1594/assets/js/e33c9cd6.b3bccb4b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8419],{81969:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>c,metadata:()=>i,toc:()=>a});var o=n(74848),r=n(28453);const c={},s="Google Cloud Pub/Sub",i={id:"reference/Connectors/capture-connectors/google-pubsub",title:"Google Cloud Pub/Sub",description:"This connector captures messages in JSON format into Flow collections from",source:"@site/docs/reference/Connectors/capture-connectors/google-pubsub.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/google-pubsub",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/google-pubsub.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Firestore",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore"},next:{title:"Google Search Console",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console"}},l={},a=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Service Account",id:"service-account",level:3},{value:"Service Account Key",id:"service-account-key",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"At-Least-Once Message Capture",id:"at-least-once-message-capture",level:3},{value:"Message Format",id:"message-format",level:3}];function d(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"google-cloud-pubsub",children:"Google Cloud Pub/Sub"}),"\n",(0,o.jsx)(t.p,{children:"This connector captures messages in JSON format into Flow collections from\nGoogle Cloud Pub/Sub topics."}),"\n",(0,o.jsxs)(t.p,{children:["During setup, this connect will discover all topics it has access to. Each\n",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/#resources-and-bindings",children:"capture binding"})," that is\nenabled for a topic will automatically create a new subscription, and the\nconnector will read messages from that subscription."]}),"\n",(0,o.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,o.jsx)(t.p,{children:"To use this connector, you will need the following prerequisites:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"A Google Cloud Project with Pub/Sub enabled"}),"\n",(0,o.jsx)(t.li,{children:'A Google Cloud Service Account with the "Pub/Sub Editor" roles in your GCP project'}),"\n",(0,o.jsx)(t.li,{children:"A Service Account Key to authenticate into your Service Account"}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"See the setup guide for more information about how to create the required resources."}),"\n",(0,o.jsx)(t.h3,{id:"service-account",children:"Service Account"}),"\n",(0,o.jsx)(t.p,{children:'To sync data from Pub/Sub, you need credentials for a Service Account with the\n"Pub/Sub Editor" role. This role grants the necessary permissions to discover\ntopics, create subscriptions to those topics, and read messages from the\nsubscriptions. It is recommended to create a dedicated Service Account to\nfacilitate permission management and auditing. However, if you already have a\nService Account with the correct permissions, you can use it.'}),"\n",(0,o.jsx)(t.p,{children:"Here's how to provision a suitable service account:"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["Follow Google Cloud Platform's instructions for ",(0,o.jsx)(t.a,{href:"https://cloud.google.com/iam/docs/service-accounts-create#creating",children:"Creating a Service\nAccount"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["Note down the ID of the service account you just created. Service Account IDs\ntypically follow the format\n",(0,o.jsx)(t.code,{children:"<account-name>@<project-name>.iam.gserviceaccount.com"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["Follow Google Cloud Platform's instructions for ",(0,o.jsx)(t.a,{href:"https://cloud.google.com/iam/docs/grant-role-console#grant_an_iam_role",children:"Granting IAM\nRoles"}),'\nto the new service account. The "principal" email address should be the ID of\nthe service account you just created, and the role granted should be "Pub/Sub\nEditor".']}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"service-account-key",children:"Service Account Key"}),"\n",(0,o.jsx)(t.p,{children:"Service Account Keys are used to authenticate as Google Service Accounts. To be\nable to utilize the permissions granted to the Service Account in the previous\nstep, you'll need to provide its Service Account Key when creating the capture.\nIt is a good practice, though not required, to create a new key for Flow even if\nyou're reusing a preexisting account."}),"\n",(0,o.jsxs)(t.p,{children:["To create a new key for a service account, follow Google Cloud Platform's\ninstructions for ",(0,o.jsx)(t.a,{href:"https://cloud.google.com/iam/docs/keys-create-delete#creating",children:"Creating a Service Account\nKey"}),". Be sure to\ncreate the key in JSON format. Once the linked instructions have been followed\nyou should have a key file, which will need to be uploaded to Flow when setting\nup your capture."]}),"\n",(0,o.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,o.jsxs)(t.p,{children:["You configure connectors either in the Flow web app, or by directly editing the\ncatalog specification file. See\n",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more\nabout using connectors."]}),"\n",(0,o.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,o.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Property"}),(0,o.jsx)(t.th,{children:"Title"}),(0,o.jsx)(t.th,{children:"Description"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Required/Default"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.strong,{children:(0,o.jsx)(t.code,{children:"/projectId"})})}),(0,o.jsx)(t.td,{children:"Project ID"}),(0,o.jsx)(t.td,{children:"Google Cloud Project ID that contains the PubSub topics."}),(0,o.jsx)(t.td,{children:"string"}),(0,o.jsx)(t.td,{children:"Required"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.strong,{children:(0,o.jsx)(t.code,{children:"/credentialsJson"})})}),(0,o.jsx)(t.td,{children:"Service Account JSON"}),(0,o.jsx)(t.td,{children:"Google Cloud Service Account JSON credentials to use for authentication."}),(0,o.jsx)(t.td,{children:"string"}),(0,o.jsx)(t.td,{children:"Required"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.code,{children:"/subscriptionPrefix"})}),(0,o.jsx)(t.td,{children:"Subscription Prefix"}),(0,o.jsx)(t.td,{children:"Prefix to prepend to the PubSub topics subscription names."}),(0,o.jsx)(t.td,{children:"string"}),(0,o.jsx)(t.td,{})]})]})]}),"\n",(0,o.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Property"}),(0,o.jsx)(t.th,{children:"Title"}),(0,o.jsx)(t.th,{children:"Description"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Required/Default"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:(0,o.jsx)(t.strong,{children:(0,o.jsx)(t.code,{children:"/topic"})})}),(0,o.jsx)(t.td,{children:"Topic"}),(0,o.jsx)(t.td,{children:"Name of the PubSub topic to subscribe to."}),(0,o.jsx)(t.td,{children:"string"}),(0,o.jsx)(t.td,{children:"Required"})]})})]}),"\n",(0,o.jsx)(t.h3,{id:"at-least-once-message-capture",children:"At-Least-Once Message Capture"}),"\n",(0,o.jsx)(t.p,{children:'Received messages are acknowledged to Pub/Sub after they have been durably\ncommitted to your Flow collection. After Pub/Sub receives acknowledgement of\nmessages, it will not attempt to re-deliver messages to subscribers if\nsubscriptions are created with "exactly-once delivery", which this connector\ndoes set when it creates subscriptions. Occasionally messages will be captured\nto your Flow collection more than once if the connector is restarted after it\nhas durably committed the document to the collection but before it has\nacknowledged the message to Pub/Sub.'}),"\n",(0,o.jsxs)(t.p,{children:['In this way the committing of the message to your Flow collection is considered\na "side effect" of processing the message, and ',(0,o.jsx)(t.a,{href:"https://cloud.google.com/blog/products/data-analytics/cloud-pub-sub-exactly-once-delivery-feature-is-now-ga",children:"Pub/Sub does not provide\nguarantees around exactly-once side\neffects"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["If you materialize the collections using standard updates, duplicate documents\nwill automatically be de-duplicated in the destination based on the ID of the\ndocuments. Materializations that use ",(0,o.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta\nupdates"})," need to consider\nthe potential for more than one document with the same ID."]}),"\n",(0,o.jsx)(t.h3,{id:"message-format",children:"Message Format"}),"\n",(0,o.jsxs)(t.p,{children:["Currently only messages with data in JSON format can be processed. Data in other\nformats will cause errors with the capture connector. Support for other formats\nis planned - reach out to ",(0,o.jsx)(t.a,{href:"mailto:support@estuary.dev",children:"support@estuary.dev"})," if your use case requires\nprocessing data in a different format."]})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>i});var o=n(96540);const r={},c=o.createContext(r);function s(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/e459d51d.17071a91.js b/pr-preview/pr-1594/assets/js/e459d51d.17071a91.js deleted file mode 100644 index 08e57f3da2..0000000000 --- a/pr-preview/pr-1594/assets/js/e459d51d.17071a91.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4876],{82345:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>a});var s=t(74848),r=t(28453);const o={},i="Google Firestore",c={id:"reference/Connectors/capture-connectors/google-firestore",title:"Google Firestore",description:"This connector captures data from your Google Firestore collections into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/google-firestore.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/google-firestore",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/google-firestore.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Drive",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive"},next:{title:"Google Cloud Pub/Sub",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub"}},l={},a=[{value:"Data model",id:"data-model",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Backfill mode",id:"backfill-mode",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"google-firestore",children:"Google Firestore"}),"\n",(0,s.jsx)(n.p,{children:"This connector captures data from your Google Firestore collections into Flow collections."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://ghcr.io/estuary/source-firestore:dev",children:(0,s.jsx)(n.code,{children:"ghcr.io/estuary/source-firestore:dev"})})," provides the latest connector image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,s.jsx)(n.h2,{id:"data-model",children:"Data model"}),"\n",(0,s.jsxs)(n.p,{children:["Firestore is a NoSQL database. Its ",(0,s.jsx)(n.a,{href:"https://firebase.google.com/docs/firestore/data-model",children:"data model"})," consists of ",(0,s.jsx)(n.strong,{children:"documents"})," (lightweight records that contain mappings of fields and values) organized in ",(0,s.jsx)(n.strong,{children:"collections"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Collections are organized hierarchically. A given document in a collection can, in turn, be associated with a ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://firebase.google.com/docs/firestore/data-model#subcollections",children:"subcollection"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["For example, you might have a collection called ",(0,s.jsx)(n.code,{children:"users"}),", which contains two documents, ",(0,s.jsx)(n.code,{children:"alice"})," and ",(0,s.jsx)(n.code,{children:"bob"}),".\nEach document has a subcollection called ",(0,s.jsx)(n.code,{children:"messages"})," (for example, ",(0,s.jsx)(n.code,{children:"users/alice/messages"}),"), which contain more documents (for example, ",(0,s.jsx)(n.code,{children:"users/alice/messages/1"}),")."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-console",children:"users\n\u251c\u2500\u2500 alice\n\u2502 \u2514\u2500\u2500 messages\n\u2502 \u251c\u2500\u2500 1\n\u2502 \u2514\u2500\u2500 2\n\u2514\u2500\u2500 bob\n \u2514\u2500\u2500 messages\n \u2514\u2500\u2500 1\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The connector works by identifying documents associated with a particular sequence of Firestore collection names,\nregardless of documents that split the hierarchy.\nThese document groupings are mapped to Flow collections using a ",(0,s.jsx)(n.a,{href:"#bindings",children:"path"})," in the pattern ",(0,s.jsx)(n.code,{children:"collection/*/subcollection"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["In this example, we'd end up with ",(0,s.jsx)(n.code,{children:"users"})," and ",(0,s.jsx)(n.code,{children:"users/*/messages"})," Flow collections, with the latter contain messages from both users.\nThe ",(0,s.jsx)(n.code,{children:"/_meta/path"})," property for each document contains its full, original path, so we'd still know which messages were Alice's and which were Bob's."]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"You'll need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"A Google service account with:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Read access to your Firestore database, via ",(0,s.jsx)(n.a,{href:"https://cloud.google.com/datastore/docs/access/iam",children:"roles/datastore.viewer"}),".\nYou can assign this role when you ",(0,s.jsx)(n.a,{href:"https://cloud.google.com/iam/docs/creating-managing-service-accounts#creating",children:"create the service account"}),", or ",(0,s.jsx)(n.a,{href:"https://cloud.google.com/iam/docs/granting-changing-revoking-access#single-role",children:"add it to an existing service account"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A generated ",(0,s.jsx)(n.a,{href:"https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating",children:"JSON service account key"})," for the account."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the Flow specification file.\nSee ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Firestore source connector."]}),"\n",(0,s.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,s.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/googleCredentials"})})}),(0,s.jsx)(n.td,{children:"Credentials"}),(0,s.jsx)(n.td,{children:"Google Cloud Service Account JSON credentials."}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/database"})}),(0,s.jsx)(n.td,{children:"Database"}),(0,s.jsx)(n.td,{children:'Optional name of the database to capture from. Leave blank to autodetect. Typically "projects/$PROJECTID/databases/(default)".'}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Title"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required/Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/backfillMode"})})}),(0,s.jsx)(n.td,{children:"Backfill Mode"}),(0,s.jsxs)(n.td,{children:["Configures the handling of data already in the collection. See ",(0,s.jsx)(n.a,{href:"#backfill-mode",children:"below"})," for details or just stick with 'async'"]}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"/path"})})}),(0,s.jsx)(n.td,{children:"Path to Collection"}),(0,s.jsx)(n.td,{children:"Supports parent/*/nested to capture all nested collections of parent's children"}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-firestore:dev\n config:\n googleCredentials:\n "type": "service_account",\n "project_id": "project-id",\n "private_key_id": "key-id",\n "private_key": "-----BEGIN PRIVATE KEY-----\\nprivate-key\\n-----END PRIVATE KEY-----\\n",\n "client_email": "service-account-email",\n "client_id": "client-id",\n "auth_uri": "https://accounts.google.com/o/oauth2/auth",\n "token_uri": "https://accounts.google.com/o/oauth2/token",\n "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",\n "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email"\n bindings:\n - resource:\n #The below `path` will capture all Firestore documents that match the pattern\n #`orgs/<orgID>/runs/<runID>/runResults/<runResultID>/queryResults`.\n #See the Data Model section above for details.\n path: orgs/*/runs/*/runResults/*/queryResults\n backfillMode: async\n target: ${PREFIX}/orgs_runs_runResults_queryResults\n - resource:\n path: orgs/*/runs/*/runResults\n backfillMode: async\n target: ${PREFIX}/orgs_runs_runResults\n - resource:\n path: orgs/*/runs\n backfillMode: async\n target: ${PREFIX}/orgs_runs\n - resource:\n path: orgs\n backfillMode: async\n target: ${PREFIX}/orgs\n'})}),"\n",(0,s.jsx)(n.h2,{id:"backfill-mode",children:"Backfill mode"}),"\n",(0,s.jsxs)(n.p,{children:["In each captured collection's ",(0,s.jsx)(n.a,{href:"#bindings",children:"binding configuration"}),", you can choose whether and how to backfill historical data.\nThere are three options:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"none"}),": Skip preexisting data in the Firestore collection. Capture only new documents and changes to existing documents that occur after the capture is published."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"async"}),": Use two threads to capture data. The first captures new documents, as with ",(0,s.jsx)(n.code,{children:"none"}),".\nThe second progressively ingests historical data in chunks. This mode is most reliable for Firestore collections of all sizes but provides slightly weaker guarantees against data duplication."]}),"\n",(0,s.jsxs)(n.p,{children:["The connector uses a ",(0,s.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"reduction"})," to reconcile changes to the same document found on the parallel threads.\nThe version with the most recent timestamp the document metadata will be preserved (",(0,s.jsx)(n.code,{children:'{"strategy": "maximize", "key": "/_meta/mtime"}'}),"). For most collections, this produces an accurate copy of your Firestore collections in Flow."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"sync"}),": Request that Firestore stream all changes to the collection since its creation, in order."]}),"\n",(0,s.jsx)(n.p,{children:"This mode provides the strongest guarantee against duplicated data, but can cause errors for large datasets.\nFirestore may terminate the process if the backfill of historical data has not completed within about ten minutes, forcing the capture to restart from the beginning.\nIf this happens once it is likely to recur continuously. If left unattended for an extended time this can result in a massive number of read operations and a correspondingly large bill from Firestore."}),"\n",(0,s.jsx)(n.p,{children:"This mode should only be used when somebody can keep an eye on the backfill and shut it down if it has not completed within half an hour at most, and on relatively small collections.\n100,000 documents or fewer should generally be safe, although this can vary depending on the average document size in the collection."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["If you're unsure which backfill mode to use, choose ",(0,s.jsx)(n.code,{children:"async"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>c});var s=t(96540);const r={},o=s.createContext(r);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/e5e05fea.88348c3f.js b/pr-preview/pr-1594/assets/js/e5e05fea.88348c3f.js deleted file mode 100644 index 4f397893f8..0000000000 --- a/pr-preview/pr-1594/assets/js/e5e05fea.88348c3f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1557],{55621:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>d,frontMatter:()=>s,metadata:()=>a,toc:()=>u});var r=n(74848),o=n(28453);const s={},c="PostgreSQL Batch Query Connector",a={id:"reference/Connectors/capture-connectors/PostgreSQL/postgres-batch",title:"PostgreSQL Batch Query Connector",description:"This connector captures data from Postgres into Flow collections by periodically",source:"@site/docs/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch.md",sourceDirName:"reference/Connectors/capture-connectors/PostgreSQL",slug:"/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Neon PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres"},next:{title:"Recharge",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge"}},i={},u=[];function l(e){const t={a:"a",code:"code",h1:"h1",p:"p",strong:"strong",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"postgresql-batch-query-connector",children:"PostgreSQL Batch Query Connector"}),"\n",(0,r.jsx)(t.p,{children:"This connector captures data from Postgres into Flow collections by periodically\nexecuting queries and translating the results into JSON documents."}),"\n",(0,r.jsxs)(t.p,{children:["We recommend using our ",(0,r.jsx)(t.a,{href:"http://go.estuary.dev/source-postgres",children:"PostgreSQL CDC Connector"})," instead\nif possible. Using CDC provides lower latency data capture, delete and update events, and usually\nhas a smaller impact on the source database."]}),"\n",(0,r.jsx)(t.p,{children:"However there are some circumstances where this might not be feasible. Perhaps you need\nto capture from a managed PostgreSQL instance which doesn't support logical replication.\nOr perhaps you need to capture the contents of a view or the result of an ad-hoc query.\nThat's the sort of situation this connector is intended for."}),"\n",(0,r.jsxs)(t.p,{children:["The number one caveat you need to be aware of when using this connector is that ",(0,r.jsx)(t.strong,{children:"it will\nperiodically execute its update query over and over"}),". At the default polling interval of\n5 minutes, a naive ",(0,r.jsx)(t.code,{children:"SELECT * FROM foo"})," query against a 100 MiB view will produce 30 GiB/day\nof ingested data, most of it duplicated."]}),"\n",(0,r.jsxs)(t.p,{children:["This is why the connector's autodiscovery logic only returns ordinary tables of data, because\nin that particular case we can use the ",(0,r.jsx)(t.code,{children:"xmin"})," system column as a cursor and ask the database\nto ",(0,r.jsx)(t.code,{children:"SELECT xmin, * FROM foo WHERE xmin::text::bigint > $1;"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:['If you start editing these queries or manually adding capture bindings for views or to run\nad-hoc queries, you need to either have some way of restricting the query to "just the new\nrows since last time" or else have your polling interval set high enough that the data rate\n',(0,r.jsx)(t.code,{children:"<DatasetSize> / <PollingInterval>"})," is an amount of data you're willing to deal with."]})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>a});var r=n(96540);const o={},s=r.createContext(o);function c(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/e6e0301f.1895224e.js b/pr-preview/pr-1594/assets/js/e6e0301f.1895224e.js deleted file mode 100644 index 4512061ce3..0000000000 --- a/pr-preview/pr-1594/assets/js/e6e0301f.1895224e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3097],{32357:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>a});var t=n(74848),r=n(28453);const i={sidebar_position:6},o="Google Cloud SQL for PostgreSQL",l={id:"reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres",title:"Google Cloud SQL for PostgreSQL",description:"This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres.md",sourceDirName:"reference/Connectors/capture-connectors/PostgreSQL",slug:"/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Amazon RDS for PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres"},next:{title:"Neon PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres"}},c={},a=[{value:"Supported versions and platforms",id:"supported-versions-and-platforms",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Backfills and performance considerations",id:"backfills-and-performance-considerations",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"TOASTed values",id:"toasted-values",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"Publications",id:"publications",level:2}];function d(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"google-cloud-sql-for-postgresql",children:"Google Cloud SQL for PostgreSQL"}),"\n",(0,t.jsx)(s.p,{children:"This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections."}),"\n",(0,t.jsxs)(s.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(s.a,{href:"https://github.com/estuary/connectors/pkgs/container/source-postgres",children:(0,t.jsx)(s.code,{children:"ghcr.io/estuary/source-postgres:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(s.h2,{id:"supported-versions-and-platforms",children:"Supported versions and platforms"}),"\n",(0,t.jsx)(s.p,{children:"This connector supports PostgreSQL versions 10.0 and later."}),"\n",(0,t.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(s.p,{children:"You'll need a PostgreSQL database setup with the following:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/runtime-config-wal.html",children:"Logical replication enabled"})," \u2014 ",(0,t.jsx)(s.code,{children:"wal_level=logical"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/sql-createrole.html",children:"User role"})," with ",(0,t.jsx)(s.code,{children:"REPLICATION"})," attribute"]}),"\n",(0,t.jsxs)(s.li,{children:["A ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/warm-standby.html#STREAMING-REPLICATION-SLOTS",children:"replication slot"}),". This represents a \u201ccursor\u201d into the PostgreSQL write-ahead log from which change events can be read.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Optional; if none exist, one will be created by the connector."}),"\n",(0,t.jsxs)(s.li,{children:["If you wish to run multiple captures from the same database, each must have its own slot.\nYou can create these slots yourself, or by specifying a name other than the default in the advanced ",(0,t.jsx)(s.a,{href:"#configuration",children:"configuration"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["A ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/sql-createpublication.html",children:"publication"}),". This represents the set of tables for which change events will be reported.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["A watermarks table. The watermarks table is a small \u201cscratch space\u201d to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"To allow direct access:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://cloud.google.com/sql/docs/mysql/configure-ip#add",children:"Enable public IP on your database"})," and add the ",(0,t.jsx)(s.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"})," as authorized IP addresses."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Follow the guide to ",(0,t.jsx)(s.a,{href:"../../../../../guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(s.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(s.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,t.jsx)(s.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:['On Google Cloud, navigate to your instance\'s Overview page. Click "Edit configuration". Scroll down to the Flags section. Click "ADD FLAG". Set ',(0,t.jsxs)(s.a,{href:"https://cloud.google.com/sql/docs/postgres/flags",children:["the ",(0,t.jsx)(s.code,{children:"cloudsql.logical_decoding"})," flag to ",(0,t.jsx)(s.code,{children:"on"})]})," to enable logical replication on your Cloud SQL PostgreSQL instance."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"In your PostgreSQL client, connect to your instance and issue the following commands to create a new user for the capture with appropriate permissions,\nand set up the watermarks table and publication."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",children:"CREATE USER flow_capture WITH REPLICATION\nIN ROLE cloudsqlsuperuser LOGIN PASSWORD 'secret';\nGRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture;\nALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture;\nCREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);\nGRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;\nCREATE PUBLICATION flow_publication;\nALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);\nALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>;\n"})}),"\n",(0,t.jsxs)(s.p,{children:["where ",(0,t.jsx)(s.code,{children:"<other_tables>"})," lists all tables that will be captured from. The ",(0,t.jsx)(s.code,{children:"publish_via_partition_root"}),"\nsetting is recommended (because most users will want changes to a partitioned table to be captured\nunder the name of the root table) but is not required."]}),"\n",(0,t.jsxs)(s.ol,{start:"4",children:["\n",(0,t.jsxs)(s.li,{children:["In the Cloud Console, note the instance's host under Public IP Address. Its port will always be ",(0,t.jsx)(s.code,{children:"5432"}),".\nTogether, you'll use the host",":port"," as the ",(0,t.jsx)(s.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"backfills-and-performance-considerations",children:"Backfills and performance considerations"}),"\n",(0,t.jsxs)(s.p,{children:["When the a PostgreSQL capture is initiated, by default, the connector first ",(0,t.jsx)(s.em,{children:"backfills"}),", or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis."]}),"\n",(0,t.jsx)(s.p,{children:"This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow.\nHowever, you may find it appropriate to skip the backfill, especially for extremely large tables."}),"\n",(0,t.jsxs)(s.p,{children:["In this case, you may turn of backfilling on a per-table basis. See ",(0,t.jsx)(s.a,{href:"#properties",children:"properties"})," for details."]}),"\n",(0,t.jsx)(s.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(s.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector."]}),"\n",(0,t.jsx)(s.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(s.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Property"}),(0,t.jsx)(s.th,{children:"Title"}),(0,t.jsx)(s.th,{children:"Description"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Required/Default"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/address"})})}),(0,t.jsx)(s.td,{children:"Address"}),(0,t.jsxs)(s.td,{children:["The host or host",":port"," at which the database can be reached."]}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/database"})})}),(0,t.jsx)(s.td,{children:"Database"}),(0,t.jsx)(s.td,{children:"Logical database name to capture from."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsxs)(s.td,{children:["Required, ",(0,t.jsx)(s.code,{children:'"postgres"'})]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/user"})})}),(0,t.jsx)(s.td,{children:"User"}),(0,t.jsx)(s.td,{children:"The database user to authenticate as."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsxs)(s.td,{children:["Required, ",(0,t.jsx)(s.code,{children:'"flow_capture"'})]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/password"})})}),(0,t.jsx)(s.td,{children:"Password"}),(0,t.jsx)(s.td,{children:"Password for the specified database user."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced"})}),(0,t.jsx)(s.td,{children:"Advanced Options"}),(0,t.jsx)(s.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,t.jsx)(s.td,{children:"object"}),(0,t.jsx)(s.td,{})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/backfill_chunk_size"})}),(0,t.jsx)(s.td,{children:"Backfill Chunk Size"}),(0,t.jsx)(s.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,t.jsx)(s.td,{children:"integer"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"4096"})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/publicationName"})}),(0,t.jsx)(s.td,{children:"Publication Name"}),(0,t.jsx)(s.td,{children:"The name of the PostgreSQL publication to replicate from."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:'"flow_publication"'})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/skip_backfills"})}),(0,t.jsx)(s.td,{children:"Skip Backfills"}),(0,t.jsx)(s.td,{children:"A comma-separated list of fully-qualified table names which should not be backfilled."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/slotName"})}),(0,t.jsx)(s.td,{children:"Slot Name"}),(0,t.jsx)(s.td,{children:"The name of the PostgreSQL replication slot to replicate from."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:'"flow_slot"'})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/watermarksTable"})}),(0,t.jsx)(s.td,{children:"Watermarks Table"}),(0,t.jsx)(s.td,{children:"The name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:'"public.flow_watermarks"'})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"/advanced/sslmode"})}),(0,t.jsx)(s.td,{children:"SSL Mode"}),(0,t.jsx)(s.td,{children:"Overrides SSL connection behavior by setting the 'sslmode' parameter."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Property"}),(0,t.jsx)(s.th,{children:"Title"}),(0,t.jsx)(s.th,{children:"Description"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Required/Default"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/namespace"})})}),(0,t.jsx)(s.td,{children:"Namespace"}),(0,t.jsxs)(s.td,{children:["The ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/9.1/ddl-schemas.html",children:"namespace/schema"})," of the table."]}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/stream"})})}),(0,t.jsx)(s.td,{children:"Stream"}),(0,t.jsx)(s.td,{children:"Table name."}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:(0,t.jsx)(s.code,{children:"/syncMode"})})}),(0,t.jsx)(s.td,{children:"Sync mode"}),(0,t.jsxs)(s.td,{children:["Connection method. Always set to ",(0,t.jsx)(s.code,{children:"incremental"}),"."]}),(0,t.jsx)(s.td,{children:"string"}),(0,t.jsx)(s.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(s.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(s.p,{children:"A minimal capture definition will look like the following:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-yaml",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/source-postgres:dev"\n config:\n address: "localhost:5432"\n database: "postgres"\n user: "flow_capture"\n password: "secret"\n bindings:\n - resource:\n stream: ${TABLE_NAME}\n namespace: ${TABLE_NAMESPACE}\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,t.jsx)(s.p,{children:"Your capture definition will likely be more complex, with additional bindings for each table in the source database."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})}),"\n",(0,t.jsx)(s.h2,{id:"toasted-values",children:"TOASTed values"}),"\n",(0,t.jsxs)(s.p,{children:["PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons.\nIf your tables contain values that exceed the limit, those values can't be stored directly.\nPostgreSQL uses ",(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/storage-toast.html",children:"TOAST"})," (The Oversized-Attribute Storage Technique) to\nstore them separately."]}),"\n",(0,t.jsxs)(s.p,{children:["TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector.\nIf a change event occurs on a row that contains a TOASTed value, ",(0,t.jsx)(s.em,{children:"but the TOASTed value itself is unchanged"}),", it is omitted from the WAL.\nAs a result, the connector emits a row update with the a value omitted, which might cause\nunexpected results in downstream catalog tasks if adjustments are not made."]}),"\n",(0,t.jsxs)(s.p,{children:["The PostgreSQL connector handles TOASTed values for you when you follow the ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#flowctl-discover",children:"standard discovery workflow"}),"\nor use the ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/connectors#flow-ui",children:"Flow UI"})," to create your capture.\nIt uses ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/merge",children:"merge"})," ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"reductions"}),"\nto fill in the previous known TOASTed value in cases when that value is omitted from a row update."]}),"\n",(0,t.jsx)(s.p,{children:"However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["When you materialize the captured data to another system using a connector that requires ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})]}),"\n",(0,t.jsxs)(s.li,{children:["When you perform a ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/derivations",children:"derivation"})," that uses TOASTed values"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(s.p,{children:"If you encounter an issue that you suspect is due to TOASTed values, try the following:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Ensure your collection's schema is using the merge ",(0,t.jsx)(s.a,{href:"/pr-preview/pr-1594/concepts/schemas#reduce-annotations",children:"reduction strategy"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://www.postgresql.org/docs/9.4/sql-altertable.html",children:"Set REPLICA IDENTITY to FULL"})," for the table. This circumvents the problem by forcing the\nWAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"mailto:support@estuary.dev",children:"Contact Estuary support"})," for assistance."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"publications",children:"Publications"}),"\n",(0,t.jsx)(s.p,{children:"It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",children:"CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true);\n"})}),"\n",(0,t.jsx)(s.p,{children:"Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes."})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>l});var t=n(96540);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/e76aecec.5fe24bf1.js b/pr-preview/pr-1594/assets/js/e76aecec.5fe24bf1.js deleted file mode 100644 index c98b7d6f71..0000000000 --- a/pr-preview/pr-1594/assets/js/e76aecec.5fe24bf1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4920],{87709:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var a=t(74848),s=t(28453),r=t(61114);const i={sidebar_position:6},o="Derivations",l={id:"concepts/derivations",title:"Derivations",description:"At times, the collections generated by a capture may not be suitable for your needs.",source:"@site/docs/concepts/derivations.md",sourceDirName:"concepts",slug:"/concepts/derivations",permalink:"/pr-preview/pr-1594/concepts/derivations",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/concepts/derivations.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Connectors",permalink:"/pr-preview/pr-1594/concepts/connectors"},next:{title:"Web application",permalink:"/pr-preview/pr-1594/concepts/web-app"}},c={},d=[{value:"Specification",id:"specification",level:2},{value:"Supported Languages",id:"supported-languages",level:2},{value:"SQLite",id:"sqlite",level:2},{value:"SQL Lambdas",id:"sql-lambdas",level:3},{value:"Document Mapping",id:"document-mapping",level:3},{value:"Parameters",id:"parameters",level:3},{value:"Migrations",id:"migrations",level:3},{value:"Performance",id:"performance",level:3},{value:"TypeScript",id:"typescript",level:2},{value:"Modules",id:"modules",level:3},{value:"State",id:"state",level:3},{value:"Transformations",id:"transformations",level:2},{value:"Sources",id:"sources",level:3},{value:"Shuffles",id:"shuffles",level:3},{value:"shuffle: key",id:"shuffle-key",level:4},{value:"shuffle: any",id:"shuffle-any",level:4},{value:"shuffle: lambda",id:"shuffle-lambda",level:4},{value:"Lambdas",id:"lambdas",level:3},{value:"Processing order",id:"processing-order",level:3},{value:"Read delay",id:"read-delay",level:3},{value:"Read priority",id:"read-priority",level:3},{value:"Internal State",id:"internal-state",level:2},{value:"Where to accumulate?",id:"where-to-accumulate",level:2},{value:"Accumulate in Internal Task State",id:"accumulate-in-internal-task-state",level:3},{value:"Accumulate in a Database",id:"accumulate-in-a-database",level:3}];function h(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"derivations",children:"Derivations"}),"\n",(0,a.jsxs)(n.p,{children:["At times, the collections generated by a ",(0,a.jsx)(n.a,{href:"../#captures",children:"capture"})," may not be suitable for your needs.\nFor instance, you might want to filter certain documents or add calculations to them.\nPerhaps you need to unpack an array nested inside or aggregate data from many documents.\nAlternatively, you might need to merge across several collections using a common key,\nor employ business logic to arrive at a real-time decision.\nWith Flow derivations, you can perform a wide range of transformations,\nfrom a simple remapping to complicated, self-referential, and stateful transaction processing."]}),"\n",(0,a.jsxs)(n.p,{children:["In essence, a derivation is a ",(0,a.jsx)(n.a,{href:"../#collections",children:"collection"}),"\nthat is constructed from applying transformations to one or more sourced collections.\nDerivations operate continuously, keeping up with updates to the source collections as they happen."]}),"\n",(0,a.jsx)(n.p,{children:"A derivation consists of three primary elements:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"A collection that stores the output."}),"\n",(0,a.jsxs)(n.li,{children:["A ",(0,a.jsx)(n.a,{href:"../#tasks",children:"catalog task"})," that applies transformations to source documents\nas they become available and writes the resulting documents into the derived collection."]}),"\n",(0,a.jsxs)(n.li,{children:["An ",(0,a.jsx)(n.a,{href:"#internal-state",children:"internal task state"})," which enables aggregations, joins, and windowing."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["Today, Flow enables you to write derivations using either\n",(0,a.jsx)(n.a,{href:"#sqlite",children:"SQLite"})," or ",(0,a.jsx)(n.a,{href:"#typescript",children:"TypeScript"}),".\nAdditional language support is in the works."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["If you would like a a more hands-on approach to learn derivations, check out ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank",children:"this"})," tutorial!"]})}),"\n",(0,a.jsx)(n.h2,{id:"specification",children:"Specification"}),"\n",(0,a.jsxs)(n.p,{children:["A derivation is specified as a regular ",(0,a.jsx)(n.a,{href:"../#collections",children:"collection"}),"\nwith an additional ",(0,a.jsx)(n.code,{children:"derive"})," stanza:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:'collections:\n # The unique name of the derivation.\n acmeCo/my/derivation:\n schema: my-schema.yaml\n key: [/key]\n\n # Presence of a `derive` stanza makes this collection a derivation.\n # Type: object\n derive:\n # Connector which this derivation uses.\n # One of `typescript` or `sqlite`.\n using:\n # Derivation is using the SQLite connector.\n # Optional, type: object\n sqlite:\n # SQL migrations to apply as inline SQL or file references.\n # If a referenced file does not exist\n # a stub can be generated using `flowctl generate`.\n # Optional, type: array of strings\n migrations:\n - CREATE TABLE foobar (id INTEGER PRIMARY KEY NOT NULL);\n - ../path/to/other/migration.sql\n\n # Derivation is using the TypeScript connector.\n # Optional, type: object\n typescript:\n # TypeScript module implementing this derivation,\n # as inline TypeScript or a relative file reference.\n # If a referenced file does not exist\n # a stub can be generated using `flowctl generate`.\n module: acmeModule.ts\n\n # The array of transformations that build this derived collection.\n transform:\n # Unique name of the transformation, containing only Unicode\n # Letters, Numbers, `-`, or `_` (no spaces or other punctuation).\n - name: myTransformName\n # Source collection read by this transformation.\n # Required, type: object or string.\n source:\n # Name of the collection to be read.\n # Required.\n name: acmeCo/my/source/collection\n # Partition selector of the source collection.\n # Optional. Default is to read all partitions.\n partitions: {}\n # Lower bound date-time for documents which should be processed.\n # Source collection documents published before this date-time are filtered.\n # `notBefore` is *only* a filter. Updating its value will not cause Flow\n # to re-process documents that have already been read.\n # Optional. Default is to process all documents.\n notBefore: 2023-01-23T01:00:00Z\n # Upper bound date-time for documents which should be processed.\n # Source collection documents published after this date-time are filtered.\n # Like `notBefore`, `notAfter` is *only* a filter. Updating its value will\n # not cause Flow to re-process documents that have already been read.\n # Optional. Default is to process all documents.\n notAfter: 2023-01-23T02:00:00Z\n\n # Lambda of this transform, with a meaning which depends\n # on the derivation connector:\n # * SQLite derivation lambdas are blocks of SQL code.\n # * TypeScript does not use `lambda`, as implementations\n # are provided by the derivation\'s TypeScript module.\n # Lambdas can be either inline or a relative file reference.\n lambda: SELECT $foo, $bar;\n # Delay applied to sourced documents before being processed\n # by this transformation.\n # Default: No delay, pattern: ^\\\\d+(s|m|h)$\n readDelay: "48h"\n # Key by which source documents are shuffled to task shards.\n # Optional, type: object.\n # If not set, the source collection key is used.\n shuffle:\n # Composite key of JSON pointers which are extracted from\n # source documents.\n key: [/shuffle/key/one, /shuffle/key/two]\n # Priority applied to documents of this transformation\n # relative to other transformations of the derivation.\n # Default: 0, integer >= 0\n priority: 0\n'})}),"\n",(0,a.jsx)(n.h2,{id:"supported-languages",children:"Supported Languages"}),"\n",(0,a.jsxs)(n.p,{children:["As with captures and materializations,\nFlow derivations are built around a plug-able ",(0,a.jsx)(n.a,{href:"../#connectors",children:"connectors"})," architecture.\nDerivation connectors encapsulate the details of ",(0,a.jsx)(n.em,{children:"how"})," documents are transformed,\nand integrate with Flow's runtime through a common protocol."]}),"\n",(0,a.jsxs)(n.p,{children:["At present, Flow supports transformations in SQL using ",(0,a.jsx)(n.a,{href:"#sqlite",children:"SQLite"}),", and ",(0,a.jsx)(n.a,{href:"#typescript",children:"TypeScript"}),"."]}),"\n",(0,a.jsx)(n.h2,{id:"sqlite",children:"SQLite"}),"\n",(0,a.jsx)(n.p,{children:"Flow's SQLite connector lets you write plain SQL which\nis evaluated with each source collection document:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"derive:\n using:\n sqlite: {}\n transforms:\n - name: fromOrders\n source: acmeCo/orders\n shuffle: any\n lambda:\n SELECT $customer,\n DATE($timestamp) AS date,\n PRINTF('$%.2f', $item_price + $sales_tax) AS cost;\n"})}),"\n",(0,a.jsx)(n.p,{children:"Given an input document:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n "customer": "Wile E. Coyote",\n "timestamp": "2023-04-17T16:45:31Z",\n "item_price": 11.5,\n "sales_tax": 0.8\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:"The derivation will produce an output document like:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n "customer": "Wile E. Coyote",\n "date": "2023-04-17",\n "cost": "$12.30"\n}\n'})}),"\n",(0,a.jsxs)(n.p,{children:["SQLite derivations run within the context of a persistent,\nmanaged ",(0,a.jsx)(n.a,{href:"https://sqlite.org/",children:"SQLite database"}),".\nMost anything you can do within SQLite,\nyou can do within a SQLite derivation."]}),"\n",(0,a.jsx)(n.h3,{id:"sql-lambdas",children:"SQL Lambdas"}),"\n",(0,a.jsx)(n.p,{children:"Lambdas are blocks of one or more SQL statements.\nThey can be defined inline within a Flow specification,\nor they can be provided as a relative file reference to a file of SQL."}),"\n",(0,a.jsxs)(n.p,{children:["Your SQL lambda code can include any number of statements,\nand your statements are evaluated in the context of your applied\ndatabase ",(0,a.jsx)(n.a,{href:"#migrations",children:"migrations"}),".\nUse regular ",(0,a.jsx)(n.code,{children:"INSERT"}),", ",(0,a.jsx)(n.code,{children:"UPDATE"}),", and ",(0,a.jsx)(n.code,{children:"DELETE"})," statements\nin your SQL blocks to manipulate your internal tables as required."]}),"\n",(0,a.jsxs)(n.p,{children:["Any rows which are returned by SQL statements,\nsuch as ",(0,a.jsx)(n.code,{children:"SELECT"})," and also variations like ",(0,a.jsx)(n.code,{children:"INSERT ... RETURNING"}),",\nare ",(0,a.jsx)(n.a,{href:"#document-mapping",children:"mapped into documents"})," that are published\ninto your derived collection.\nPublished documents must conform to your collection schema\nor your derivation task will stop due to the schema violation."]}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:["The SQLite connector wraps your lambdas in an enclosing transaction.\nDo ",(0,a.jsx)(n.strong,{children:"not"})," include ",(0,a.jsx)(n.code,{children:"BEGIN"})," or ",(0,a.jsx)(n.code,{children:"COMMIT"})," statements in your lambdas.\nYou may use a ",(0,a.jsx)(n.a,{href:"https://www.sqlite.org/lang_savepoint.html",children:"SAVEPOINT"})," or ",(0,a.jsx)(n.code,{children:"ROLLBACK TO"}),"."]})}),"\n",(0,a.jsx)(n.h3,{id:"document-mapping",children:"Document Mapping"}),"\n",(0,a.jsx)(n.p,{children:"In most cases, each named output column of your query becomes\na top-level property of its corresponding document."}),"\n",(0,a.jsxs)(n.p,{children:["When you directly select a ",(0,a.jsx)(n.code,{children:"$parameter"})," its corresponding field name is used.\nFor example, a projection with field name ",(0,a.jsx)(n.code,{children:"my-field"})," would be queried as\n",(0,a.jsx)(n.code,{children:"SELECT $my_field;"})," and map into a document like ",(0,a.jsx)(n.code,{children:'{"my-field":"value"}'}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["A named column such as ",(0,a.jsx)(n.code,{children:"SELECT $x * 100 AS foo;"}),",\nmaps to a property using the provided name: ",(0,a.jsx)(n.code,{children:'{"foo": 200}'}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["Your selected columns may included nested JSON documents,\nsuch as ",(0,a.jsx)(n.code,{children:"SELECT 'hello' AS greeting, JSON_ARRAY(1, 'two', 3) AS items;"}),".\nThe connector looks for SQLite TEXT values which can be parsed\ninto JSON arrays or objects and embeds them into the mapped document:\n",(0,a.jsx)(n.code,{children:'{"greeting": "hello", "items": [1, "two", 3]}'}),".\nIf parsing fails, the raw string is used instead."]}),"\n",(0,a.jsxs)(n.p,{children:["As a special case if your query selects a ",(0,a.jsx)(n.em,{children:"single"})," column\nhaving a name that begins with ",(0,a.jsx)(n.code,{children:"json"})," or ",(0,a.jsx)(n.code,{children:"JSON"}),",\nas is common when working with SQLite's ",(0,a.jsx)(n.a,{href:"https://www.sqlite.org/json1.html",children:"JSON functions"}),",\nthen that column will become the output document.\nFor example ",(0,a.jsx)(n.code,{children:"SELECT JSON_OBJECT('a', 1, 'b', JSON('true'));"})," maps into document ",(0,a.jsx)(n.code,{children:'{"a": 1, "b": true}'}),".\nThis can be used to build documents with dynamic top-level properties."]}),"\n",(0,a.jsx)(n.h3,{id:"parameters",children:"Parameters"}),"\n",(0,a.jsxs)(n.p,{children:["Your SQL lambda will execute with every source document of the collection it transforms.\nTo access locations within the document, you utilize ",(0,a.jsx)(n.code,{children:"$parameter"})," placeholders\nin your SQL code, which bind to ",(0,a.jsx)(n.a,{href:"../#projections",children:"projections"})," of the source document.\nYou can use both your defined projections\nas well as projections which are statically inferred from your source collection's schema."]}),"\n",(0,a.jsx)(n.p,{children:"You can access projected fields that are top-level\nas well as those which are nested within a source document.\nConsider the following schematized document:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{"top-level": true, "object": {"foo": 42}, "arr": ["bar"]}\n'})}),"\n",(0,a.jsxs)(n.p,{children:["In your SQL code, you can use parameters like ",(0,a.jsx)(n.code,{children:"$top_level"}),", ",(0,a.jsx)(n.code,{children:"$object$foo"}),", or ",(0,a.jsx)(n.code,{children:"$arr$0"}),".\nIf you're unsure of what parameter to use for a given field,\ntry typing something approximate and Flow will suggest the appropriate ",(0,a.jsx)(n.code,{children:"$parameter"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"migrations",children:"Migrations"}),"\n",(0,a.jsxs)(n.p,{children:["The SQLite connector offers a managed, persistent SQLite database\nthat can accommodate any number of tables, indices, views, triggers, and other schema,\nas defined by your database migrations.\nTo add a migration, simply append it to the ",(0,a.jsx)(n.code,{children:"migrations"})," array,\neither as a block of inline SQL statements\nor as a relative path to a file of SQL statements:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"derive:\n using:\n sqlite:\n migrations:\n - CREATE TABLE foo (thing INTEGER NOT NULL);\n CREATE INDEX idx_foo_thing foo (thing);\n - ../path/to/another/migration.sql\n - ALTER TABLE foo ADD COLUMN other_thing TEXT NOT NULL;\n - https://example.com/yet/another/migration.sql\n"})}),"\n",(0,a.jsx)(n.admonition,{type:"caution",children:(0,a.jsx)(n.p,{children:"You cannot change an existing migration once it has been published.\nInstead, add a new migration which applies your desired schema."})}),"\n",(0,a.jsxs)(n.p,{children:["The tables and other schema you create through database migrations\nare the ",(0,a.jsx)(n.a,{href:"#internal-state",children:"internal state"})," of your derivation.\nThey don't directly cause any documents to be published into your derived collection,\nbut changes made to tables in one SQL lambda execution are immediately visible to others.\nChanges are also durable and transactional:\na Flow derivation transaction commits new documents to the derived collection\nin lockstep with committing changes made to your task tables."]}),"\n",(0,a.jsx)(n.p,{children:"Flow is responsible for the persistence and replication of your SQLite database,\nand the SQLite connector tracks and will apply your migrations as needed."}),"\n",(0,a.jsx)(n.h3,{id:"performance",children:"Performance"}),"\n",(0,a.jsxs)(n.p,{children:["Your observed performance will ",(0,a.jsx)(n.em,{children:"of course"})," depend on the specifics of your use case,\nincluding the size of your task states\nand the complexity of your source documents and transformations."]}),"\n",(0,a.jsxs)(n.p,{children:["Generally speaking, SQLite is very performant\nand Flow's SQLite connector strives to drive it as efficiently as possible.\nReal-world use cases are observed to process many ",(0,a.jsx)(n.strong,{children:"tens\nof thousands"})," of documents per second on a single core."]}),"\n",(0,a.jsx)(n.p,{children:"Flow can also scale your task without downtime\nby creating point-in-time clones of the database\nthat subdivide the overall workload and storage of the task.\nOnce created, these subdivisions process in parallel across\nmultiple physical machines to enhance performance."}),"\n",(0,a.jsx)(n.h2,{id:"typescript",children:"TypeScript"}),"\n",(0,a.jsxs)(n.p,{children:["Flow's TypeScript derivation connector transforms your source documents\nby executing methods of a TypeScript class which you implement.\nTypeScript derivations are executed using ",(0,a.jsx)(n.a,{href:"https://deno.land/",children:"Deno"}),"\nand let you take advantage of the broad ecosystem of\navailable third-party JavaScript and TypeScript libraries,\nas well as native code compiled to WASM."]}),"\n",(0,a.jsx)(n.p,{children:"TypeScript derivations are strongly typed:\nFlow maps the JSON schemas of your source and output collections\ninto corresponding TypeScript types,\nwhich are type-checked as you develop and test your derivation.\nThis helps catch a wide variety of potential bugs and avoid accidental violations of your collection data contracts."}),"\n",(0,a.jsx)(n.h3,{id:"modules",children:"Modules"}),"\n",(0,a.jsx)(n.p,{children:"The bulk of a TypeScript derivation lives in its associated module,\nwhich is a TypeScript source file that exports the class that implements your derivation."}),"\n",(0,a.jsx)(n.p,{children:"Each derivation also has an accompanying, generated interfaces module.\nInterface modules are managed by Flow and are purely advisory:\nthey're generated to improve your development experience,\nbut any changes you make are ignored."}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"flowctl generate --source path/to/my/derivation.flow.yaml"})," CLI command\nwill generate interface modules under paths like\n",(0,a.jsx)(n.code,{children:"flow_generated/typescript/acmeCo/my-derivation.ts"}),",\nunder the top-level directory under ",(0,a.jsx)(n.code,{children:"--source"})," having a ",(0,a.jsx)(n.code,{children:"flow.yaml"})," or ",(0,a.jsx)(n.code,{children:"flow.json"})," file."]}),"\n",(0,a.jsxs)(n.p,{children:["It will also generate a ",(0,a.jsx)(n.code,{children:"deno.json"})," file in your top-level directory,\nwhich is designed to work with developer tooling like\n",(0,a.jsx)(n.a,{href:"https://marketplace.visualstudio.com/items?itemName=denoland.vscode-deno",children:"VSCode's Deno extension"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"#current-account-balances",children:"See the Current Account Balances tutorial for a concrete example of modules"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"state",children:"State"}),"\n",(0,a.jsxs)(n.p,{children:["The abstract ",(0,a.jsx)(n.code,{children:"IDerivation"})," class generated within the interfaces module\nincludes additional, experimental methods which can be used for\npersisting and recovering internal state of the connector."]}),"\n",(0,a.jsx)(n.p,{children:"Consult the generated implementation and feel free to reach out to support\nif you'd like more information on building stateful TypeScript derivations."}),"\n",(0,a.jsx)(n.h2,{id:"transformations",children:"Transformations"}),"\n",(0,a.jsxs)(n.p,{children:["A transformation binds a ",(0,a.jsx)(n.a,{href:"#sources",children:"source"})," collection to a derivation,\ncausing its documents to be read and processed by the derivation connector."]}),"\n",(0,a.jsxs)(n.p,{children:["Read source documents are first ",(0,a.jsx)(n.a,{href:"#shuffles",children:"shuffled"})," on a ",(0,a.jsx)(n.strong,{children:"shuffle key"}),"\nto co-locate the processing of documents that have equal shuffle keys.\nThe transformation then processes documents by invoking ",(0,a.jsx)(n.strong,{children:"lambdas"}),":\nuser-defined functions that accept documents as arguments,\nreturn documents in response,\nand potentially update internal task state."]}),"\n",(0,a.jsx)(n.p,{children:"A derivation may have many transformations,\nand each transformation has a long-lived and stable name.\nEach transformation independently reads documents from its\nsource collection and tracks its own read progress.\nMore than one transformation can read from the same source collection,\nand transformations may also source from their own derivation,\nenabling cyclic data-flows and graph algorithms."}),"\n",(0,a.jsx)(n.p,{children:"Transformations may be added to or removed from a derivation at any time.\nThis makes it possible to, for example, add a new collection into an\nexisting multi-way join, or gracefully migrate to a new source\ncollection without incurring downtime.\nHowever, renaming a running transformation is not possible.\nIf attempted, the old transformation is dropped and\na new transformation under the new name is created,\nwhich begins reading its source collection all over again."}),"\n",(0,a.jsx)(r.A,{chart:"\n\tgraph LR;\n d[Derivation];\n t[Transformation];\n s[Internal State];\n l[Lambda];\n c[Sourced Collection];\n o[Derived Collection];\n d-- has many --\x3et;\n d-- has one --\x3es;\n d-- has one --\x3eo;\n c-- reads from --\x3et;\n t-- invokes --\x3el;\n l-- updates --\x3es;\n s-- queries --\x3el;\n l-- publishes to --\x3eo;\n"}),"\n",(0,a.jsx)(n.h3,{id:"sources",children:"Sources"}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.strong,{children:"source"})," of a transformation is a collection.\nAs documents are published into the source collection,\nthey are continuously read and processed by the transformation."]}),"\n",(0,a.jsxs)(n.p,{children:["A ",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/advanced/projections#partition-selectors",children:"partition selector"})," may be provided\nto process only a subset of the source collection's logical partitions.\nSelectors are efficient: only partitions that match the selector are read,\nand Flow can cheaply skip over partitions that don't."]}),"\n",(0,a.jsx)(n.p,{children:"Derivations re-validate their source documents against\nthe source collection's schema as they are read.\nThis is because collection schemas may evolve over time,\nand could have inadvertently become incompatible with\nhistorical documents of the source collection.\nUpon a schema error, the derivation will pause and\ngive you an opportunity to correct the problem."}),"\n",(0,a.jsx)(n.h3,{id:"shuffles",children:"Shuffles"}),"\n",(0,a.jsx)(n.p,{children:"As each source document is read, it's shuffled \u2014 or equivalently, mapped \u2014\non an extracted key."}),"\n",(0,a.jsx)(n.p,{children:"If you're familiar with data shuffles in tools like MapReduce,\nApache Spark, or Flink, the concept is very similar.\nFlow catalog tasks scale out into multiple shards,\neach running in parallel on different physical machines,\nwhere each shard processes a subset of source documents."}),"\n",(0,a.jsx)(n.p,{children:"Shuffles let Flow identify the shard that should process a particular\nsource document, in order to co-locate that processing with other\ndocuments it may need to know about."}),"\n",(0,a.jsxs)(n.p,{children:["For example, transforms of the\n",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank#approving-transfers",children:"Approving Transfers example"}),"\nshuffle on either ",(0,a.jsx)(n.code,{children:"/sender"})," or ",(0,a.jsx)(n.code,{children:"/recipient"})," in order to\nprocess documents that debit or credit accounts on the specific shard\nthat is uniquely responsible for maintaining the balance of a given account."]}),"\n",(0,a.jsx)(r.A,{chart:"\n\tgraph LR;\n subgraph s1 [Source Partitions]\n p1>acmeBank/transfers/part-1];\n p2>acmeBank/transfers/part-2];\n end\n subgraph s2 [Derivation Task Shards]\n t1([derivation/shard-1]);\n t2([derivation/shard-2]);\n end\n p1-- sender: alice --\x3et1;\n p1-- recipient: bob --\x3et2;\n p2-- recipient: alice --\x3et1;\n p2-- sender: bob --\x3et2;\n"}),"\n",(0,a.jsxs)(n.p,{children:["Flow offers three modes for configuring document shuffles: ",(0,a.jsx)(n.code,{children:"key"}),", ",(0,a.jsx)(n.code,{children:"any"}),", and ",(0,a.jsx)(n.code,{children:"lambda"}),"."]}),"\n",(0,a.jsx)(n.h4,{id:"shuffle-key",children:"shuffle: key"}),"\n",(0,a.jsx)(n.p,{children:"Shuffle keys are defined as an array of JSON pointers to locations\nthat should be extracted from your source documents.\nThis array forms the composite key over which your documents are shuffled:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"transforms:\n - name: fromOrders\n source: acmeCo/orders\n shuffle:\n key: [/item/product_id, /customer_id]\n # Flow guarantees that the same shard will process the user's lambda\n # for all instances of a specific (product ID, customer ID) tuple.\n lambda: ...\n"})}),"\n",(0,a.jsx)(n.p,{children:"If a derivation has more than one transformation,\nthe shuffle keys of all transformations must align with one another\nin terms of the extracted key types (string vs integer)\nas well as the number of components in a composite key."}),"\n",(0,a.jsxs)(n.p,{children:["For example, one transformation couldn't shuffle transfers on ",(0,a.jsx)(n.code,{children:"[/id]"}),"\nwhile another shuffles on ",(0,a.jsx)(n.code,{children:"[/sender]"}),", because ",(0,a.jsx)(n.code,{children:"sender"})," is a string and\n",(0,a.jsx)(n.code,{children:"id"})," an integer."]}),"\n",(0,a.jsxs)(n.p,{children:["Similarly mixing a shuffle of ",(0,a.jsx)(n.code,{children:"[/sender]"})," alongside ",(0,a.jsx)(n.code,{children:"[/sender, /recipient]"}),"\nis prohibited because the keys have different numbers of components."]}),"\n",(0,a.jsx)(n.h4,{id:"shuffle-any",children:"shuffle: any"}),"\n",(0,a.jsxs)(n.p,{children:["If your lambda doesn't rely on any task state then it may not matter which\ntask shard processes a given source document.\nIn these instances you can use ",(0,a.jsx)(n.code,{children:"shuffle: any"}),", which allows source documents\nto be processed by any available task shard."]}),"\n",(0,a.jsx)(n.p,{children:"This is common for transformation lambdas which perform basic filtering\nor mapping of source documents and which don't require any joined task state."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"transforms:\n - name: fromOrders\n source: acmeCo/orders\n shuffle: any\n # The user's lambda is a pure function and can be evaluated by any available shard.\n lambda:\n SELECT $customer_id, $item_price WHERE $item_price > 100;\n"})}),"\n",(0,a.jsx)(n.h4,{id:"shuffle-lambda",children:"shuffle: lambda"}),"\n",(0,a.jsx)(n.admonition,{title:"Warning",type:"info",children:(0,a.jsx)(n.p,{children:"Computed shuffles are in active development and are not yet functional."})}),"\n",(0,a.jsx)(n.p,{children:"Your source documents may not always contain an appropriate value to shuffle upon.\nFor instance, you might want to shuffle on product ID and order date,\nbut your source documents contain only an order timestamp field."}),"\n",(0,a.jsxs)(n.p,{children:["You can use ",(0,a.jsx)(n.code,{children:"shuffle: lambda"})," to define a function that maps your\nsource document into the appropriate shuffle key:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"transforms:\n - name: fromOrders\n source: acmeCo/orders\n shuffle:\n lambda: SELECT $product_id, DATE($order_timestamp);\n # Flow guarantees that the same shard will process the user's lambda\n # for all instances of a specific (product ID, date) tuple.\n lambda: ...\n"})}),"\n",(0,a.jsx)(n.p,{children:"Your shuffle lambda must return exactly one row, and its columns and\ntypes must align with the other shuffles of your derivation transformations."}),"\n",(0,a.jsxs)(n.p,{children:["Flow must know the types of your composite shuffle key.\nIn most cases it will infer these types from the ",(0,a.jsx)(n.code,{children:"shuffle: key"})," of another transformation.\nIf you have no ",(0,a.jsx)(n.code,{children:"shuffle: key"})," transformations, Flow will ask that you explicitly tell it your shuffle types:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"derive:\n using:\n sqlite: {}\n shuffleKeyTypes: [integer, string]\n transforms:\n - name: fromOrders\n source: acmeCo/orders\n shuffle:\n lambda: SELECT $product_id, DATE($order_timestamp);\n lambda: ...\n"})}),"\n",(0,a.jsx)(n.h3,{id:"lambdas",children:"Lambdas"}),"\n",(0,a.jsx)(n.p,{children:"Lambdas are user-defined functions that are invoked by transformations.\nThey accept documents as arguments\nand return transformed documents in response.\nLambdas can update internal task state,\npublish documents into the derived collection,\nor both."}),"\n",(0,a.jsx)(n.p,{children:'Lambdas are "serverless": Flow manages the execution\nand scaling of your transformation lambdas on your behalf.'}),"\n",(0,a.jsx)(n.h3,{id:"processing-order",children:"Processing order"}),"\n",(0,a.jsx)(n.p,{children:"Transformations may simultaneously read from many source collections,\nor even read from the same source collection multiple times."}),"\n",(0,a.jsxs)(n.p,{children:["Roughly speaking, the derivation will globally process transformations and\ntheir source documents in the time-based order in which the source documents\nwere originally written to their source collections.\nThis means that a derivation started a month ago\nand a new copy of the derivation started today,\nwill process documents in the same order and arrive at the same result.\nDerivations are ",(0,a.jsx)(n.strong,{children:"repeatable"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"More precisely, processing order is stable for each individual shuffle key,\nthough different shuffle keys may process in different orders if more than\none task shard is used."}),"\n",(0,a.jsxs)(n.p,{children:["Processing order can be attenuated through a ",(0,a.jsx)(n.a,{href:"#read-delay",children:"read delay"}),"\nor differentiated ",(0,a.jsx)(n.a,{href:"#read-priority",children:"read priority"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"read-delay",children:"Read delay"}),"\n",(0,a.jsx)(n.p,{children:"A transformation can define a read delay, which will hold back the processing\nof its source documents until the time delay condition is met.\nFor example, a read delay of 15 minutes would mean that a source document\ncannot be processed until it was published at least 15 minutes ago.\nIf the derivation is working through a historical backlog of source documents,\nthan a delayed transformation will respect its ordering delay relative\nto the publishing times of other historical documents also being read."}),"\n",(0,a.jsxs)(n.p,{children:["Event-driven workflows are a great fit for reacting to events as they occur,\nbut aren\u2019t terribly good at taking action when something ",(0,a.jsx)(n.em,{children:"hasn\u2019t"})," happened:"]}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"A user adds a product to their cart, but then doesn\u2019t complete a purchase."}),"\n",(0,a.jsx)(n.li,{children:"A temperature sensor stops producing its expected, periodic measurements."}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"A common pattern for tackling these workflows in Flow is to\nread a source collection without a delay and update an internal state.\nThen, read a collection with a read delay\nand determine whether the desired action has happened or not.\nFor example, source from a collection of sensor readings\nand index the last timestamp of each sensor.\nThen, source the same collection again with a read delay:\nif the register timestamp isn't more recent\nthan the delayed source reading,\nthe sensor failed to produce a measurement."}),"\n",(0,a.jsx)(n.p,{children:"Flow read delays are very efficient and scale better\nthan managing very large numbers of fine-grain timers."}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"#grouped-windows-of-transfers",children:"See Grouped Windows of Transfers for an example using a read delay"}),"\n",(0,a.jsx)(n.a,{href:"https://github.com/estuary/flow/blob/master/examples/citi-bike/idle-bikes.flow.yaml",children:'Learn more from the Citi Bike "idle bikes" example'})]}),"\n",(0,a.jsx)(n.h3,{id:"read-priority",children:"Read priority"}),"\n",(0,a.jsxs)(n.p,{children:["Sometimes it's necessary for ",(0,a.jsx)(n.em,{children:"all"})," documents of a source collection\nto be processed by a transformation before ",(0,a.jsx)(n.em,{children:"any"})," documents of some\nother source collection are processed, regardless of their\nrelative publishing time.\nFor example, a collection may have corrections that should be\napplied before the historical data of another collection\nis re-processed."]}),"\n",(0,a.jsxs)(n.p,{children:["Transformation priorities allow you to express the relative\nprocessing priority of a derivation's various transformations.\nWhen priorities are not equal, ",(0,a.jsx)(n.em,{children:"all"})," available source documents\nof a higher-priority transformation\nare processed before ",(0,a.jsx)(n.em,{children:"any"})," source documents\nof a lower-priority transformation."]}),"\n",(0,a.jsx)(n.h2,{id:"internal-state",children:"Internal State"}),"\n",(0,a.jsx)(n.p,{children:"Derivation tasks often require an internal state,\nperhaps to hold a partial aggregation or join result.\nInternal state is not a direct part of the output of a derivation.\nInstead, transformation lambdas query and update internal state\nas they process source documents and return derived documents."}),"\n",(0,a.jsx)(n.p,{children:"For SQLite derivations,\nthe entire SQLite database is the internal state of the task.\nTypeScript derivations can use in-memory states with a\nrecovery and checkpoint mechanism.\nEstuary intends to offer an additional mechanisms for\nautomatic internal state snapshot and recovery in the future."}),"\n",(0,a.jsx)(n.p,{children:"The exact nature of internal task states vary,\nbut under the hood they're backed by a replicated\nembedded RocksDB instance which is co-located\nwith the task shard execution contexts that Flow manages.\nAs contexts are assigned and re-assigned,\ntheir state databases travel with them."}),"\n",(0,a.jsxs)(n.p,{children:["If a task shard needs to be scaled out,\nFlow is able to perform an ",(0,a.jsx)(n.a,{href:"../advanced/shards/#shard-splits",children:"online split"}),",\nwhich cheaply clones its state database into two new databases\n\u2014 and paired shards \u2014 which are re-assigned to other machines."]}),"\n",(0,a.jsx)(n.h2,{id:"where-to-accumulate",children:"Where to accumulate?"}),"\n",(0,a.jsxs)(n.p,{children:["Derivation collection schemas may have\n",(0,a.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"reduction"})," annotations,\nand lambdas can be combined with reductions in interesting ways.\nYou may be familiar with ",(0,a.jsx)(n.code,{children:"map"})," and ",(0,a.jsx)(n.code,{children:"reduce"})," functions\nbuilt into languages like\n",(0,a.jsx)(n.a,{href:"https://book.pythontips.com/en/latest/map_filter.html",children:"Python"}),",\n",(0,a.jsx)(n.a,{href:"https://www.freecodecamp.org/news/javascript-map-reduce-and-filter-explained-with-examples/",children:"JavaScript"}),',\nand many others\nor have used tools like MapReduce or Spark.\nIn functional terms, lambdas you write within Flow are "mappers,"\nand reductions are always done\nby the Flow runtime using your schema annotations.']}),"\n",(0,a.jsxs)(n.p,{children:["This means that, when you implement a derivation,\nyou get to choose where ",(0,a.jsx)(n.strong,{children:"accumulation"})," will happen:"]}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:["Your lambdas can update and query aggregates stored in ",(0,a.jsx)(n.a,{href:"#internal-state",children:"internal task state"}),".\n",(0,a.jsx)(n.a,{href:"#approving-transfers",children:"Approving Transfers"})," is an example that maintains account balances in a SQLite table."]}),"\n",(0,a.jsxs)(n.li,{children:["Or, your lambdas can compute ",(0,a.jsx)(n.em,{children:"changes"})," of an aggregate, which are then reduced by Flow using reduction annotations.\n",(0,a.jsx)(n.a,{href:"#current-account-balances",children:"Current Account Balances"})," is an example that combines a lambda with a reduce annotation."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"These two approaches can produce equivalent results,\nbut they do so in very different ways."}),"\n",(0,a.jsx)(n.h3,{id:"accumulate-in-internal-task-state",children:"Accumulate in Internal Task State"}),"\n",(0,a.jsx)(n.p,{children:"You can accumulate using the internal state of your derivation:\nfor instance, by using an internal table within your SQLite derivation.\nYou then write lambdas which update that state,\nor query it to publish derived documents."}),"\n",(0,a.jsx)(n.p,{children:"For example, consider a collection that\u2019s summing a value:"}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:"Time"}),(0,a.jsx)(n.th,{children:"State"}),(0,a.jsx)(n.th,{children:"Lambdas"}),(0,a.jsx)(n.th,{children:"Derived Document"})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"T0"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"0"})}),(0,a.jsx)(n.td,{children:"UPDATE val = val + 5; SELECT val;"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"5"})})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"T1"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"5"})}),(0,a.jsx)(n.td,{children:"UPDATE val = val - 1; SELECT val;"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"4"})})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"T2"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"4"})}),(0,a.jsx)(n.td,{children:"UPDATE val = val + 2; SELECT val;"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"6"})})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"T3"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"6"})}),(0,a.jsx)(n.td,{}),(0,a.jsx)(n.td,{})]})]})]}),"\n",(0,a.jsx)(n.p,{children:"Using a derivation's internal state is a great solution if you expect to\nmaterialize the derived collection into a non-transactional store.\nThat's because its documents are complete statements of the current answer,\nand can be correctly applied to systems that support only at-least-once semantics."}),"\n",(0,a.jsx)(n.p,{children:"They\u2019re also well-suited for materializations into endpoints that aren't stateful,\nsuch as Pub/Sub systems or Webhooks."}),"\n",(0,a.jsx)(n.h3,{id:"accumulate-in-a-database",children:"Accumulate in a Database"}),"\n",(0,a.jsxs)(n.p,{children:["To accumulate in your materialization endpoint, such as a database,\nyou define a derivation with a reducible schema\nand implement lambdas which publish the ",(0,a.jsx)(n.em,{children:"changes"})," to a current answer.\nThe Flow runtime then uses your reduction annotations\nto combine the documents published into your derived collection."]}),"\n",(0,a.jsx)(n.p,{children:"Later, when the collection is materialized, your reduction annotations\nare applied again to reduce each collection document into a final,\nfully-reduced value for each collection key\nthat's kept up to date in the materialized table."}),"\n",(0,a.jsxs)(n.p,{children:["A key insight is that the database is\nthe ",(0,a.jsx)(n.em,{children:"only"})," stateful system in this scenario.\nThe derivation itself is stateless, with lambdas that are pure functions,\nwhich is typically extremely performant."]}),"\n",(0,a.jsx)(n.p,{children:"Returning to our summing example:"}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:"Time"}),(0,a.jsx)(n.th,{children:"DB"}),(0,a.jsx)(n.th,{children:"Lambdas"}),(0,a.jsx)(n.th,{children:"Derived Document"})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"T0"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"0"})}),(0,a.jsx)(n.td,{children:"SELECT 5;"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"5"})})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"T1"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"5"})}),(0,a.jsx)(n.td,{children:"SELECT -1;"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"-1"})})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"T2"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"4"})}),(0,a.jsx)(n.td,{children:"SELECT 2;"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"2"})})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"T3"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.strong,{children:"6"})}),(0,a.jsx)(n.td,{}),(0,a.jsx)(n.td,{})]})]})]}),"\n",(0,a.jsx)(n.p,{children:"This works especially well when materializing into a transactional database.\nFlow couples its processing transactions with corresponding database transactions,\nensuring end-to-end \u201cexactly once\u201d semantics."}),"\n",(0,a.jsxs)(n.p,{children:["When materializing into a non-transactional store,\nFlow is only able to provide weaker \u201cat least once\u201d semantics;\nit\u2019s possible that a document may be combined into a database value more than once.\nWhether that\u2019s a concern depends a bit on the task at hand.\nSome reductions like ",(0,a.jsx)(n.code,{children:"merge"}),' can be applied repeatedly without changing the result,\nwhile in other use cases approximations are acceptable.\nFor the summing example above,\n"at-least-once" semantics could give an incorrect result.']}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.a,{href:"https://github.com/estuary/flow/tree/master/examples/derive-patterns",children:"Learn more in the derivation pattern examples of Flow's repository"})})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},61114:(e,n,t)=>{t.d(n,{A:()=>i});var a=t(96540),s=t(99702),r=t(74848);s.N.initialize({startOnLoad:!0});const i=e=>{let{chart:n}=e;return(0,a.useEffect)((()=>{s.N.contentLoaded()}),[]),(0,r.jsx)("div",{className:"mermaid",children:n})}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/e8453306.8955c2e4.js b/pr-preview/pr-1594/assets/js/e8453306.8955c2e4.js deleted file mode 100644 index a7e06f48e0..0000000000 --- a/pr-preview/pr-1594/assets/js/e8453306.8955c2e4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3973],{76466:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var t=r(74848),i=r(28453);const s={},o="MixPanel",c={id:"reference/Connectors/capture-connectors/mixpanel",title:"MixPanel",description:"This connector captures data from MixPanel into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/mixpanel.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/mixpanel",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/mixpanel.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Cloud SQL for SQL Server",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver"},next:{title:"MongoDB",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb"}},d={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"mixpanel",children:"MixPanel"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from MixPanel into Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-mixpanel:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-mixpanel:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.p,{children:"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system."}),"\n",(0,t.jsxs)(n.p,{children:["You can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/mixpanel/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(n.p,{children:"The following data resources are supported through the MixPanel APIs:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.mixpanel.com/reference/raw-event-export",children:"Export"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.mixpanel.com/reference/engage-query",children:"Engage"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.mixpanel.com/reference/funnels-query",children:"Funnels"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.mixpanel.com/reference/engage-query",children:"Revenue"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.mixpanel.com/reference/overview-1",children:"Annotations"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.mixpanel.com/reference/cohorts-list",children:"Cohorts"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://developer.mixpanel.com/reference/engage-query",children:"Cohort Members"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["To set up the Mixpanel source connector, you'll need a Mixpanel ",(0,t.jsx)(n.a,{href:"https://developer.mixpanel.com/reference/service-accounts",children:"Service Account"})," and it's ",(0,t.jsx)(n.a,{href:"https://help.mixpanel.com/hc/en-us/articles/115004490503-Project-Settings#project-id",children:"Project ID"}),", the ",(0,t.jsx)(n.a,{href:"https://help.mixpanel.com/hc/en-us/articles/115004547203-Manage-Timezones-for-Projects-in-Mixpanel",children:"Project Timezone"}),", and the Project region (",(0,t.jsx)(n.code,{children:"US"})," or ",(0,t.jsx)(n.code,{children:"EU"}),")."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the MixPanel source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/project_id"})}),(0,t.jsx)(n.td,{children:"Project ID"}),(0,t.jsxs)(n.td,{children:["Your project ID number. See the ",(0,t.jsx)(n.a,{href:"https://help.mixpanel.com/hc/en-us/articles/115004490503-Project-Settings#project-id",children:"docs"})," for more information on how to obtain this."]}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/attribution_window"})}),(0,t.jsx)(n.td,{children:"Attribution Window"}),(0,t.jsx)(n.td,{children:"A period of time for attributing results to ads and the lookback period after those actions occur during which ad results are counted. Default attribution window is 5 days."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:"Default"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/project_timezone"})}),(0,t.jsx)(n.td,{children:"Project Timezone"}),(0,t.jsxs)(n.td,{children:["Time zone in which integer date times are stored. The project timezone may be found in the project settings in the ",(0,t.jsx)(n.a,{href:"https://help.mixpanel.com/hc/en-us/articles/115004547203-Manage-Timezones-for-Projects-in-Mixpanel",children:"Mixpanel console"})]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Default"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/select_properties_by_default"})}),(0,t.jsx)(n.td,{children:"Select Properties By Default"}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:"Default"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/start_date"})}),(0,t.jsx)(n.td,{children:"Start Date"}),(0,t.jsx)(n.td,{children:"The date in the format YYYY-MM-DD. Any data before this date will not be replicated. If this option is not set, the connector will replicate data from up to one year ago by default."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/end_date"})}),(0,t.jsx)(n.td,{children:"End Date"}),(0,t.jsx)(n.td,{children:"The date in the format YYYY-MM-DD. Any data after this date will not be replicated. Left empty to always sync to most recent date."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Default"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/region"})}),(0,t.jsx)(n.td,{children:"Region"}),(0,t.jsx)(n.td,{children:"The region of mixpanel domain instance either US or EU."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Default"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/date_window_size"})}),(0,t.jsx)(n.td,{children:"Date slicing window"}),(0,t.jsx)(n.td,{children:"Defines window size in days, that used to slice through data. You can reduce it, if amount of data in each window is too big for your environment."}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:"Default"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Resource of your MixPanel project from which collections are captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-mixpanel:dev\n config:\n credentials:\n auth_type: ServiceAccount\n secret: {secret}\n username: {your_username}\n project_id: 1234567\n attribution_window: 5\n project_timezone: US/Pacific\n select_properties_by_default: true\n start_date: 2017-01-25T00:00:00Z\n end_date: 2019-01-25T00:00:00Z\n region: US\n date_window_size: 30\n bindings:\n - resource:\n stream: annotations\n syncMode: full_refresh\n target: ${PREFIX}/annotations\n {...}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>c});var t=r(96540);const i={},s=t.createContext(i);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/e858514f.dcda684d.js b/pr-preview/pr-1594/assets/js/e858514f.dcda684d.js deleted file mode 100644 index 47917084d4..0000000000 --- a/pr-preview/pr-1594/assets/js/e858514f.dcda684d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1859],{34533:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var r=s(74848),t=s(28453);const i={},o="Google Cloud Firestore to Snowflake",l={id:"guides/system-specific-dataflows/firestore-to-dwh",title:"Google Cloud Firestore to Snowflake",description:"This guide walks you through the process of creating an",source:"@site/docs/guides/system-specific-dataflows/firestore-to-dwh.md",sourceDirName:"guides/system-specific-dataflows",slug:"/guides/system-specific-dataflows/firestore-to-dwh",permalink:"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/system-specific-dataflows/firestore-to-dwh.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"System-specific Data Flows",permalink:"/pr-preview/pr-1594/guides/system-specific-dataflows/"},next:{title:"Amazon S3 to Snowflake",permalink:"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake"}},a={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Introduction",id:"introduction",level:2},{value:"Capture from Firestore",id:"capture-from-firestore",level:2},{value:"Materialize to Snowflake",id:"materialize-to-snowflake",level:2},{value:"What's next?",id:"whats-next",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"google-cloud-firestore-to-snowflake",children:"Google Cloud Firestore to Snowflake"}),"\n",(0,r.jsx)(n.p,{children:"This guide walks you through the process of creating an\nend-to-end real-time Data Flow from Google Cloud Firestore to Snowflake using Estuary Flow."}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"You'll need:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["(Recommended) understanding of the ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/#essential-concepts",children:"basic Flow concepts"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Access to the ",(0,r.jsx)(n.a,{href:"http://dashboard.estuary.dev",children:(0,r.jsx)(n.strong,{children:"Flow web application"})})," through an Estuary account.\nIf you don't have one, visit the web app to register for free."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.strong,{children:"Firestore database"})," that contains the data you'd like to move to Snowflake. You ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/firestore/docs/create-database-web-mobile-client-library",children:"create this as part of a Google Firebase project"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"A Google service account with:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Read access to your Firestore database, via ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/datastore/docs/access/iam",children:"roles/datastore.viewer"}),".\nYou can assign this role when you ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/iam/docs/creating-managing-service-accounts#creating",children:"create the service account"}),", or ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/iam/docs/granting-changing-revoking-access#single-role",children:"add it to an existing service account"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["A generated ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating",children:"JSON service account key"})," for the account."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"A Snowflake account with:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["A target ",(0,r.jsx)(n.strong,{children:"database"}),", ",(0,r.jsx)(n.strong,{children:"schema"}),", and virtual ",(0,r.jsx)(n.strong,{children:"warehouse"}),"; and a ",(0,r.jsx)(n.strong,{children:"user"})," with a ",(0,r.jsx)(n.strong,{children:"role"})," assigned that grants the appropriate access levels to these resources.\n",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake#setup",children:"You can use a script to quickly create all of these items."})," Have these details on hand for setup with Flow."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["The account identifier and host URL noted. ",(0,r.jsx)(n.a,{href:"https://docs.snowflake.com/en/user-guide/admin-account-identifier.html#where-are-account-identifiers-used",children:"The URL is formatted using the account identifier"}),". For example, you might have the account identifier ",(0,r.jsx)(n.code,{children:"orgname-accountname.snowflakecomputing.com"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,r.jsxs)(n.p,{children:["In Estuary Flow, you create ",(0,r.jsx)(n.strong,{children:"Data Flows"})," to transfer data from ",(0,r.jsx)(n.strong,{children:"source"})," systems to ",(0,r.jsx)(n.strong,{children:"destination"})," systems in real time.\nIn this use case, your source is an Google Cloud Firestore NoSQL database and your destination is a Snowflake data warehouse."]}),"\n",(0,r.jsx)(n.p,{children:"After following this guide, you'll have a Data Flow that comprises:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["A ",(0,r.jsx)(n.strong,{children:"capture"}),", which ingests data from Firestore"]}),"\n",(0,r.jsxs)(n.li,{children:["Several ",(0,r.jsx)(n.strong,{children:"collection"}),", cloud-backed copies of ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/firestore/docs/data-model",children:"Firestore collections"})," in the Flow system"]}),"\n",(0,r.jsxs)(n.li,{children:["A ",(0,r.jsx)(n.strong,{children:"materialization"}),", which pushes the collections to Snowflake"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The capture and materialization rely on plug-in components called ",(0,r.jsx)(n.strong,{children:"connectors"}),".\nWe'll walk through how to configure the ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore",children:"Firestore"})," and ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake",children:"Snowflake"})," connectors to integrate these systems with Flow."]}),"\n",(0,r.jsx)(n.h2,{id:"capture-from-firestore",children:"Capture from Firestore"}),"\n",(0,r.jsxs)(n.p,{children:["You'll first create a capture to connect to your Firestore database, which will yield one Flow collection for each ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/firestore/docs/data-model",children:"Firestore collection"})," in your database."]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Go to the Flow web application at ",(0,r.jsx)(n.a,{href:"https://dashboard.estuary.dev/",children:"dashboard.estuary.dev"})," and sign in using the\ncredentials provided by your Estuary account manager."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click the ",(0,r.jsx)(n.strong,{children:"Sources"})," tab and choose ",(0,r.jsx)(n.strong,{children:"New Capture"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Find the ",(0,r.jsx)(n.strong,{children:"Google Firestore"})," tile and click ",(0,r.jsx)(n.strong,{children:"Capture"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"A form appears with the properties required for a Firestore capture."}),"\n",(0,r.jsxs)(n.ol,{start:"4",children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Type a name for your capture."}),"\n",(0,r.jsxs)(n.p,{children:["Your capture name must begin with a ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/catalogs#namespace",children:"prefix"})," to which you ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/authentication",children:"have access"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.strong,{children:"Name"})," field, use the drop-down to select your prefix.\nAppend a unique capture name after the ",(0,r.jsx)(n.code,{children:"/"})," to create the full name, for example, ",(0,r.jsx)(n.code,{children:"acmeCo/myFirestoreCapture"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Fill out the required properties for Firestore."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Database"}),": Flow can autodetect the database name, but you may optionally specify it here. This is helpful if the service account used has access to multiple Firebase projects. Your database name usually follows the format ",(0,r.jsx)(n.code,{children:"projects/$PROJECTID/databases/(default)"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Credentials"}),": The JSON service account key created per the ",(0,r.jsx)(n.a,{href:"#prerequisites",children:"prerequisites"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Next"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Flow uses the provided configuration to initiate a connection with Firestore."}),"\n",(0,r.jsx)(n.p,{children:"It maps each available Firestore collection to a possible Flow collection. It also generates minimal schemas for each collection."}),"\n",(0,r.jsxs)(n.p,{children:["You can use the ",(0,r.jsx)(n.strong,{children:"Source Collections"})," browser to remove or modify collections. You'll have the chance to tighten up each collection's JSON schema later, when you materialize to Snowflake."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["If you make any changes to collections, click ",(0,r.jsx)(n.strong,{children:"Next"})," again."]})}),"\n",(0,r.jsxs)(n.ol,{start:"7",children:["\n",(0,r.jsxs)(n.li,{children:["Once you're satisfied with the collections to be captured, click ",(0,r.jsx)(n.strong,{children:"Save and Publish"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You'll see a notification when the capture publishes successfully."}),"\n",(0,r.jsx)(n.p,{children:"The data currently in your Firestore database has been captured, and future updates to it will be captured continuously."}),"\n",(0,r.jsxs)(n.ol,{start:"8",children:["\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Materialize Collections"})," to continue."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"materialize-to-snowflake",children:"Materialize to Snowflake"}),"\n",(0,r.jsx)(n.p,{children:"Next, you'll add a Snowflake materialization to connect the captured data to its destination: your data warehouse."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Locate the ",(0,r.jsx)(n.strong,{children:"Snowflake"})," tile and click ",(0,r.jsx)(n.strong,{children:"Materialization"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"A form appears with the properties required for a Snowflake materialization."}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Choose a unique name for your materialization like you did when naming your capture; for example, ",(0,r.jsx)(n.code,{children:"acmeCo/mySnowflakeMaterialization"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Fill out the required properties for Snowflake (you should have most of these handy from the ",(0,r.jsx)(n.a,{href:"#prerequisites",children:"prerequisites"}),")."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Host URL"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Account"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"User"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Password"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Database"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Schema"})}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Warehouse"}),": optional"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Role"}),": optional"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Next"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Flow uses the provided configuration to initiate a connection to Snowflake."}),"\n",(0,r.jsxs)(n.p,{children:["You'll be notified if there's an error. In that case, fix the configuration form or Snowflake setup as needed and click ",(0,r.jsx)(n.strong,{children:"Next"})," to try again."]}),"\n",(0,r.jsxs)(n.p,{children:["Once the connection is successful, the Endpoint Config collapses and the ",(0,r.jsx)(n.strong,{children:"Source Collections"})," browser becomes prominent.\nIt shows the collections you captured previously.\nEach of them will be mapped to a Snowflake table."]}),"\n",(0,r.jsxs)(n.ol,{start:"5",children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.strong,{children:"Source Collections"})," browser, optionally change the name in the ",(0,r.jsx)(n.strong,{children:"Table"})," field for each collection."]}),"\n",(0,r.jsx)(n.p,{children:"These will be the names of the output tables in Snowflake."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["For each table, choose whether to ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake#delta-updates",children:"enable delta updates"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"For each collection, apply a stricter schema to be used for the materialization."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Firestore has a flat data structure.\nTo materialize data effectively from Firestore to Snowflake, you should apply a schema can translate to a table structure.\nFlow's ",(0,r.jsx)(n.strong,{children:"Schema Inference"})," tool can help."]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the Source Collections browser, choose a collection and click its ",(0,r.jsx)(n.strong,{children:"Collection"})," tab."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Schema Inference"})]}),"\n",(0,r.jsxs)(n.p,{children:["The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the ",(0,r.jsx)(n.code,{children:"readSchema"}),", to use for the materialization."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Review the new schema and click ",(0,r.jsx)(n.strong,{children:"Apply Inferred Schema"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Next"})," to apply the changes you made to collections."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Save and Publish"}),". You'll see a notification when the full Data Flow publishes successfully."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"whats-next",children:"What's next?"}),"\n",(0,r.jsx)(n.p,{children:"Your Data Flow has been deployed, and will run continuously until it's stopped. Updates in your Firestore database will be reflected in your Snowflake table as they occur."}),"\n",(0,r.jsxs)(n.p,{children:["You can advance your Data Flow by adding a ",(0,r.jsx)(n.strong,{children:"derivation"}),". Derivations are real-time data transformations.\nSee the ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/guides/flowctl/create-derivation",children:"guide to create a derivation"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>l});var r=s(96540);const t={},i=r.createContext(t);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/e8851b38.2dd6bd79.js b/pr-preview/pr-1594/assets/js/e8851b38.2dd6bd79.js deleted file mode 100644 index 9497388836..0000000000 --- a/pr-preview/pr-1594/assets/js/e8851b38.2dd6bd79.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7233],{70112:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var t=r(74848),s=r(28453);const i={},o="Microsoft SQLServer",l={id:"reference/Connectors/materialization-connectors/SQLServer/sqlserver",title:"Microsoft SQLServer",description:"This connector materializes Flow collections into tables in a Microsoft SQLServer database.",source:"@site/docs/reference/Connectors/materialization-connectors/SQLServer/sqlserver.md",sourceDirName:"reference/Connectors/materialization-connectors/SQLServer",slug:"/reference/Connectors/materialization-connectors/SQLServer/",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/SQLServer/sqlserver.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"HTTP Webhook",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook"},next:{title:"Amazon RDS for SQL Server",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver"}},a={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Self-hosted SQL Server",id:"self-hosted-sql-server",level:3},{value:"Azure SQL Database",id:"azure-sql-database",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Delta updates",id:"delta-updates",level:2},{value:"Reserved words",id:"reserved-words",level:2},{value:"Changelog",id:"changelog",level:2},{value:"V1: 2023-09-01",id:"v1-2023-09-01",level:4}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"microsoft-sqlserver",children:"Microsoft SQLServer"}),"\n",(0,t.jsx)(n.p,{children:"This connector materializes Flow collections into tables in a Microsoft SQLServer database."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or\nopen-source workflows,\n",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/materialize-sqlserver:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/materialize-sqlserver:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A SQLServer database to which to materialize, and user credentials.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"SQLServer 2017 and later are supported"}),"\n",(0,t.jsx)(n.li,{children:"The connector will create new tables in the database per your specification,\nso user credentials must have access to create new tables."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.li,{children:"At least one Flow collection"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsx)(n.p,{children:"To meet these requirements, follow the steps for your hosting type."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#self-hosted-sql-server",children:"Self-hosted SQL Server"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#azure-sql-database",children:"Azure SQL Database"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./amazon-rds-sqlserver/",children:"Amazon RDS for SQL Server"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"./google-cloud-sql-sqlserver/",children:"Google Cloud SQL for SQL Server"})}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"self-hosted-sql-server",children:"Self-hosted SQL Server"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Connect to the server and issue the following commands:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"USE <database>;\n-- Create user and password for use with the connector.\nCREATE LOGIN flow_materialize WITH PASSWORD = 'secret';\nCREATE USER flow_materialize FOR LOGIN flow_materialize;\n-- Grant control on the database to flow_materialize\nGRANT CONTROL ON DATABASE::<database> TO flow_materialize;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Allow secure connection to Estuary Flow from your hosting environment. Either:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Set up an ",(0,t.jsx)(n.a,{href:"/guides/connect-network/",children:"SSH server for tunneling"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["When you fill out the ",(0,t.jsx)(n.a,{href:"#endpoint",children:"endpoint configuration"}),",\ninclude the additional ",(0,t.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"}),"\nfor additional details and a sample."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Allowlist the Estuary IP addresses"})," in your firewall rules."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"azure-sql-database",children:"Azure SQL Database"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow direct access:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a new ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/azure-sql/database/firewall-configure?view=azuresql#use-the-azure-portal-to-manage-server-level-ip-firewall-rules",children:"firewall rule"})," that grants access to the ",(0,t.jsx)(n.a,{href:"/reference/allow-ip-addresses",children:"Estuary Flow IP addresses"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Follow the guide to ",(0,t.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,t.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,t.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,t.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In your SQL client, connect to your instance as the default ",(0,t.jsx)(n.code,{children:"sqlserver"})," user and issue the following commands."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sql",children:"USE <database>;\n-- Create user and password for use with the connector.\nCREATE LOGIN flow_materialize WITH PASSWORD = 'secret';\nCREATE USER flow_materialize FOR LOGIN flow_materialize;\n-- Grant control on the database to flow_materialize\nGRANT CONTROL ON DATABASE::<database> TO flow_materialize;\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Note the following important items for configuration:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Find the instance's host under Server Name. The port is always ",(0,t.jsx)(n.code,{children:"1433"}),". Together, you'll use the host",":port"," as the ",(0,t.jsx)(n.code,{children:"address"})," property when you configure the connector."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a SQLServer materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database."}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/database"})})}),(0,t.jsx)(n.td,{children:"Database"}),(0,t.jsx)(n.td,{children:"Name of the logical database to materialize to."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/address"})})}),(0,t.jsx)(n.td,{children:"Address"}),(0,t.jsxs)(n.td,{children:["Host and port of the database. If only the host is specified, port will default to ",(0,t.jsx)(n.code,{children:"3306"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/password"})})}),(0,t.jsx)(n.td,{children:"Password"}),(0,t.jsx)(n.td,{children:"Password for the specified database user."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/user"})})}),(0,t.jsx)(n.td,{children:"User"}),(0,t.jsx)(n.td,{children:"Database user to connect as."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/table"})})}),(0,t.jsx)(n.td,{children:"Table"}),(0,t.jsx)(n.td,{children:"Table name to materialize to. It will be created by the connector, unless the connector has previously created it."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/delta_updates"})}),(0,t.jsx)(n.td,{children:"Delta Update"}),(0,t.jsx)(n.td,{children:"Should updates to this table be done via delta updates."}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: ghcr.io/estuary/materialize-sqlserver:dev\n config:\n database: flow\n address: localhost:5432\n password: flow\n user: flow\n bindings:\n - resource:\n table: ${TABLE_NAME}\n source: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"delta-updates",children:"Delta updates"}),"\n",(0,t.jsxs)(n.p,{children:["This connector supports both standard (merge) and ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"}),".\nThe default is to use standard updates."]}),"\n",(0,t.jsx)(n.h2,{id:"reserved-words",children:"Reserved words"}),"\n",(0,t.jsxs)(n.p,{children:["SQLServer has a list of reserved words that must be quoted in order to be used as an identifier.\nFlow considers all the reserved words in the official ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-2017",children:"SQLServer documentation"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"These reserved words are listed in the table below. Flow automatically quotes fields that are in this list."}),"\n",(0,t.jsx)(n.p,{children:"| Reserved words | | | | |\n| -------------- | ------------- | ------------- | ------------- | ------------- | ----- |\n| absolute | connect | else | intersect | on |\n| action | connection | end | intersection | only |\n| ada | constraint | end-exec | interval | open |\n| add | constraints | equals | into | opendatasourc |\n| admin | constructor | errlvl | is | openquery |\n| after | contains | escape | isolation | openrowset |\n| aggregate | containstable | every | iterate | openxml |\n| alias | continue | except | join | operation |\n| all | convert | exception | key | option |\n| allocate | corr | exec | kill | or |\n| alter | corresponding | execute | language | order |\n| and | count | exists | large | ordinality |\n| any | covar_pop | exit | last | out |\n| are | covar_samp | external | lateral | outer |\n| array | create | extract | leading | output |\n| as | cross | false | left | over |\n| asc | cube | fetch | less | overlaps |\n| asensitive | cume_dist | file | level | overlay |\n| assertion | current | fillfactor | like | pad |\n| asymmetric | current_catal | filter | like_regex | parameter |\n| at | current_date | first | limit | parameters |\n| atomic | current_defau | float | lineno | partial |\n| authorization | current_path | for | ln | partition |\n| avg | current_role | foreign | load | pascal |\n| backup | current_schem | fortran | local | path |\n| before | current_time | found | localtime | percent |\n| begin | current_times | free | localtimestam | percent_rank |\n| between | current_trans | freetext | locator | percentile_co |\n| binary | current_user | freetexttable | lower | percentile_di |\n| bit | cursor | from | map | pivot |\n| bit_length | cycle | full | match | plan |\n| blob | data | fulltexttable | max | position |\n| boolean | database | function | member | position_rege |\n| both | date | fusion | merge | postfix |\n| breadth | day | general | method | precision |\n| break | dbcc | get | min | prefix |\n| browse | deallocate | global | minute | preorder |\n| bulk | dec | go | mod | prepare |\n| by | decimal | goto | modifies | preserve |\n| call | declare | grant | modify | primary |\n| called | default | group | module | print |\n| cardinality | deferrable | grouping | month | prior |\n| cascade | deferred | having | multiset | privileges |\n| cascaded | delete | hold | names | proc |\n| case | deny | holdlock | national | procedure |\n| cast | depth | host | natural | public |\n| catalog | deref | hour | nchar | raiserror |\n| char | desc | identity | nclob | range |\n| char_length | describe | identity_inse | new | read |\n| character | descriptor | identitycol | next | reads |\n| character_len | destroy | if | no | readtext |\n| check | destructor | ignore | nocheck | real |\n| checkpoint | deterministic | immediate | nonclustered | reconfigure |\n| class | diagnostics | in | none | recursive |\n| clob | dictionary | include | normalize | ref |\n| close | disconnect | index | not | references |\n| clustered | disk | indicator | null | referencing |\n| coalesce | distinct | initialize | nullif | regr_avgx |\n| collate | distributed | initially | numeric | regr_avgy |\n| collation | domain | inner | object | regr_count |\n| collect | double | inout | occurrences_r | regr_intercep |\n| column | drop | input | octet_length | regr_r2 |\n| commit | dump | insensitive | of | regr_slope |\n| completion | dynamic | insert | off | regr_sxx |\n| compute | each | int | offsets | regr_sxy |\n| condition | element | integer | old | regr_syy |\n| relative | semanticsimil | structure | truncate | window |\n| release | semanticsimil | submultiset | try_convert | with |\n| replication | sensitive | substring | tsequal | within | group |\n| restore | sequence | substring_reg | uescape | within |\n| restrict | session | sum | under | without |\n| result | session_user | symmetric | union | work |\n| return | set | system | unique | write |\n| returns | sets | system_user | unknown | writetext |\n| revert | setuser | table | unnest | xmlagg |\n| revoke | shutdown | tablesample | unpivot | xmlattributes |\n| right | similar | temporary | update | xmlbinary |\n| role | size | terminate | updatetext | xmlcast |\n| rollback | smallint | textsize | upper | xmlcomment |\n| rollup | some | than | usage | xmlconcat |\n| routine | space | then | use | xmldocument |\n| row | specific | time | user | xmlelement |\n| rowcount | specifictype | timestamp | using | xmlexists |\n| rowguidcol | sql | timezone_hour | value | xmlforest |\n| rows | sqlca | timezone_minu | values | xmliterate |\n| rule | sqlcode | to | var_pop | xmlnamespaces |\n| save | sqlerror | top | var_samp | xmlparse |\n| savepoint | sqlexception | trailing | varchar | xmlpi |\n| schema | sqlstate | tran | variable | xmlquery |\n| scope | sqlwarning | transaction | varying | xmlserialize |\n| scroll | start | translate | view | xmltable |\n| search | state | translate_reg | waitfor | xmltext |\n| second | statement | translation | when | xmlvalidate |\n| section | static | treat | whenever | year |\n| securityaudit | statistics | trigger | where | zone |\n| select | stddev_pop | trim | while |\n| semantickeyph | stddev_samp | true | width_bucket |"}),"\n",(0,t.jsx)(n.h2,{id:"changelog",children:"Changelog"}),"\n",(0,t.jsx)(n.p,{children:"The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Proceed with caution when editing materializations created with previous versions of this connector;\nediting always upgrades your materialization to the latest connector version."})}),"\n",(0,t.jsx)(n.h4,{id:"v1-2023-09-01",children:"V1: 2023-09-01"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"First version"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>l});var t=r(96540);const s={},i=t.createContext(s);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/ea7b1b11.fbf626bf.js b/pr-preview/pr-1594/assets/js/ea7b1b11.fbf626bf.js deleted file mode 100644 index b958302f73..0000000000 --- a/pr-preview/pr-1594/assets/js/ea7b1b11.fbf626bf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5857],{17483:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var i=t(74848),s=t(28453);const r={},c="LinkedIn Ads",o={id:"reference/Connectors/capture-connectors/linkedin-ads",title:"LinkedIn Ads",description:"This connector captures data from LinkedIn Ads into Flow collections through the LinkedIn Marketing API.",source:"@site/docs/reference/Connectors/capture-connectors/linkedin-ads.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/linkedin-ads",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/linkedin-ads.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Klaviyo",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo"},next:{title:"LinkedIn Pages",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages"}},a={},d=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Using OAuth2 to authenticate with LinkedIn in the Flow web app",id:"using-oauth2-to-authenticate-with-linkedin-in-the-flow-web-app",level:3},{value:"Configuring the connector specification manually",id:"configuring-the-connector-specification-manually",level:3},{value:"Setup",id:"setup",level:4},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"linkedin-ads",children:"LinkedIn Ads"}),"\n",(0,i.jsx)(n.p,{children:"This connector captures data from LinkedIn Ads into Flow collections through the LinkedIn Marketing API."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://ghcr.io/estuary/source-linkedin-ads:dev",children:(0,i.jsx)(n.code,{children:"ghcr.io/estuary/source-linkedin-ads:dev"})})," provides the latest connector image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,i.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,i.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/linkedin-ads/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,i.jsx)(n.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,i.jsx)(n.p,{children:"The following data resources are supported:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads/account-structure/create-and-manage-accounts?view=li-lms-2022-08&tabs=http",children:"Accounts"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads/account-structure/create-and-manage-account-users?view=li-lms-2022-08&tabs=http",children:"Account users"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads/account-structure/create-and-manage-campaign-groups?view=li-lms-2022-08&tabs=http",children:"Campaign groups"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads/account-structure/create-and-manage-campaigns?view=li-lms-2022-08&tabs=http",children:"Campaigns"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads/account-structure/create-and-manage-creatives?view=li-lms-unversioned&tabs=http",children:"Creatives"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads/advertising-targeting/create-and-manage-video?view=li-lms-unversioned&tabs=http",children:"AdDirectSponsoredContents (Video ads)"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads-reporting/ads-reporting?view=li-lms-2022-08&tabs=http",children:"Ad analytics"})," by campaign"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads-reporting/ads-reporting?view=li-lms-2022-08&tabs=http",children:"Ad analytics"})," by creative"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,i.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(n.p,{children:"There are two ways to authenticate with LinkedIn when capturing data into Flow: using OAuth2, and manually, by creating a developer application.\nTheir prerequisites differ."}),"\n",(0,i.jsx)(n.p,{children:"OAuth is recommended for simplicity in the Flow web app;\nthe developer application method is the only supported method using the command line."}),"\n",(0,i.jsx)(n.h3,{id:"using-oauth2-to-authenticate-with-linkedin-in-the-flow-web-app",children:"Using OAuth2 to authenticate with LinkedIn in the Flow web app"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["One or more LinkedIn ",(0,i.jsx)(n.a,{href:"https://www.linkedin.com/help/lms/answer/a426102/create-an-ad-account?lang=en",children:"Ad Accounts"})," with active campaigns."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["A LinkedIn user with ",(0,i.jsx)(n.a,{href:"https://www.linkedin.com/help/lms/answer/a425731/user-roles-and-permissions-in-campaign-manager?lang=en",children:"access to the Ad Accounts"})," from which you want to capture data."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"configuring-the-connector-specification-manually",children:"Configuring the connector specification manually"}),"\n",(0,i.jsx)(n.p,{children:"To configure without using OAuth, you'll need to create an application using the LinkedIn Marketing API,\nand generate its access token."}),"\n",(0,i.jsx)(n.h4,{id:"setup",children:"Setup"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Create a marketing application on ",(0,i.jsx)(n.a,{href:"https://www.linkedin.com/developers/apps/new",children:"LinkedIn Developers"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/marketing/getting-access?view=li-lms-2022-08#how-to-apply-to-the-marketing-developer-platform",children:"Apply to the LinkedIn Developer Program"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow?context=linkedin%2Fcontext&view=li-lms-2022-08&tabs=HTTPS",children:"Generate your access token"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"caution",children:(0,i.jsx)(n.p,{children:"LinkedIn access tokens expire in 60 days.\nYou must manually update your capture configuration to continue to capture data from LinkedIn."})}),"\n",(0,i.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the capture specification.\nSee ",(0,i.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the LinkedIn Ads source connector."]}),"\n",(0,i.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,i.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,i.jsxs)(n.p,{children:["The properties in the table below reflect the manual authentication method.\nIf you're working in the Flow web app, you'll use ",(0,i.jsx)(n.a,{href:"#using-oauth2-to-authenticate-with-linkedin-in-the-flow-web-app",children:"OAuth2"}),",\nso some of these properties aren't required."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Title"}),(0,i.jsx)(n.th,{children:"Description"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required/Default"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"/account_ids"})}),(0,i.jsx)(n.td,{children:"Account IDs (Optional)"}),(0,i.jsxs)(n.td,{children:["A space-separated list of the ",(0,i.jsx)(n.a,{href:"https://www.linkedin.com/help/linkedin/answer/a424270/find-linkedin-ads-account-details?lang=en",children:"account IDs"})," from which to capture data. Leave empty if you want to capture data from all linked accounts."]}),(0,i.jsx)(n.td,{children:"array"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"[]"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"/credentials"})}),(0,i.jsx)(n.td,{children:"Authentication"}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{children:"object"}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"/credentials/auth_method"})}),(0,i.jsx)(n.td,{children:"Authentication method"}),(0,i.jsxs)(n.td,{children:["Set to ",(0,i.jsx)(n.code,{children:"access_token"})," to authenticate manually."]}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"/credentials/access_token"})}),(0,i.jsx)(n.td,{children:"Access token"}),(0,i.jsx)(n.td,{children:"Access token generated from your LinkedIn Developers app."}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"/start_date"})})}),(0,i.jsx)(n.td,{children:"Start date"}),(0,i.jsx)(n.td,{children:"UTC date in the format 2020-09-17. Any data before this date will not be replicated."}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Title"}),(0,i.jsx)(n.th,{children:"Description"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required/Default"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"/stream"})})}),(0,i.jsx)(n.td,{children:"Stream"}),(0,i.jsx)(n.td,{children:"LinkedIn Ads stream from which a collection is captured."}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Required"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"/syncMode"})})}),(0,i.jsx)(n.td,{children:"Sync Mode"}),(0,i.jsx)(n.td,{children:"Connection method."}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,i.jsx)(n.p,{children:"This sample specification reflects the manual authentication method."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-linkedin-ads:dev\n config:\n account_ids:\n - 000000000\n - 111111111\n credentials:\n auth_method: access_token\n access_token: {secret}\n start_date: 2022-01-01\n bindings:\n - resource:\n stream: campaigns\n syncMode: incremental\n target: ${PREFIX}/campaign\n {...}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>o});var i=t(96540);const s={},r=i.createContext(s);function c(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/eae8ea84.583bf550.js b/pr-preview/pr-1594/assets/js/eae8ea84.583bf550.js deleted file mode 100644 index 9976cf44e6..0000000000 --- a/pr-preview/pr-1594/assets/js/eae8ea84.583bf550.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2444],{24065:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>a});var n=t(74848),i=t(28453);const s={},o="Marketo",c={id:"reference/Connectors/capture-connectors/marketo",title:"Marketo",description:"This connector captures data from Marketo into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/marketo.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/marketo",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/marketo.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Amazon RDS for MariaDB",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb"},next:{title:"Microsoft SQL Server",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/"}},d={},a=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h1,{id:"marketo",children:"Marketo"}),"\n",(0,n.jsx)(r.p,{children:"This connector captures data from Marketo into Flow collections."}),"\n",(0,n.jsxs)(r.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,n.jsx)(r.a,{href:"https://ghcr.io/estuary/source-marketo:dev",children:(0,n.jsx)(r.code,{children:"ghcr.io/estuary/source-marketo:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,n.jsx)(r.p,{children:"This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system."}),"\n",(0,n.jsxs)(r.p,{children:["You can find their documentation ",(0,n.jsx)(r.a,{href:"https://docs.airbyte.com/integrations/sources/marketo/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,n.jsx)(r.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,n.jsx)(r.p,{children:"This connector can be used to sync the following tables from Marketo:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.strong,{children:"activities_X"})," where X is an activity type contains information about lead activities of the type X. For example, activities_send_email contains information about lead activities related to the activity type ",(0,n.jsx)(r.code,{children:"send_email"}),". See the ",(0,n.jsx)(r.a,{href:"https://developers.marketo.com/rest-api/endpoint-reference/lead-database-endpoint-reference/#!/Activities/getLeadActivitiesUsingGET",children:"Marketo docs"})," for a detailed explanation of what each column means."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.strong,{children:"activity_types."})," Contains metadata about activity types. See the ",(0,n.jsx)(r.a,{href:"https://developers.marketo.com/rest-api/endpoint-reference/lead-database-endpoint-reference/#!/Activities/getAllActivityTypesUsingGET",children:"Marketo docs"})," for a detailed explanation of columns."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.strong,{children:"campaigns."})," Contains info about your Marketo campaigns. ",(0,n.jsx)(r.a,{href:"https://developers.marketo.com/rest-api/endpoint-reference/lead-database-endpoint-reference/#!/Campaigns/getCampaignsUsingGET",children:"Marketo docs"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.strong,{children:"leads."})," Contains info about your Marketo leads. ",(0,n.jsx)(r.a,{href:"https://developers.marketo.com/rest-api/endpoint-reference/lead-database-endpoint-reference/#!/Leads/getLeadByIdUsingGET",children:"Marketo docs"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.strong,{children:"lists."})," Contains info about your Marketo static lists. ",(0,n.jsx)(r.a,{href:"https://developers.marketo.com/rest-api/endpoint-reference/lead-database-endpoint-reference/#!/Static_Lists/getListByIdUsingGET",children:"Marketo docs"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.strong,{children:"programs."})," Contains info about your Marketo programs. ",(0,n.jsx)(r.a,{href:"https://developers.marketo.com/rest-api/endpoint-reference/asset-endpoint-reference/#!/Programs/browseProgramsUsingGET",children:"Marketo docs"}),"."]}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,n.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["(Optional) ",(0,n.jsx)(r.a,{href:"/reference/allow-ip-addresses",children:"allowlist the Estuary IP addresses"})," if needed"]}),"\n",(0,n.jsx)(r.li,{children:"An API-only Marketo User Role"}),"\n",(0,n.jsx)(r.li,{children:"An Estuary Marketo API-only user"}),"\n",(0,n.jsx)(r.li,{children:"A Marketo API Custom Service"}),"\n",(0,n.jsx)(r.li,{children:"Marketo Client ID & Client Secret"}),"\n",(0,n.jsx)(r.li,{children:"Marketo Base URL"}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsxs)(r.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,n.jsx)(r.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Marketo source connector."]}),"\n",(0,n.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,n.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Property"}),(0,n.jsx)(r.th,{children:"Title"}),(0,n.jsx)(r.th,{children:"Description"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Required/Default"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"/client_id"})}),(0,n.jsx)(r.td,{children:"Client ID"}),(0,n.jsx)(r.td,{children:"The Client ID of your Marketo developer application."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"/client_secret"})}),(0,n.jsx)(r.td,{children:"Client Secret"}),(0,n.jsx)(r.td,{children:"The Client Secret of your Marketo developer application."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"/start_date"})}),(0,n.jsx)(r.td,{children:"Start Date"}),(0,n.jsx)(r.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"/domain_url"})}),(0,n.jsx)(r.td,{children:"Domain URL"}),(0,n.jsx)(r.td,{children:"Your Marketo Base URL."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,n.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Property"}),(0,n.jsx)(r.th,{children:"Title"}),(0,n.jsx)(r.th,{children:"Description"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Required/Default"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/stream"})})}),(0,n.jsx)(r.td,{children:"Stream"}),(0,n.jsx)(r.td,{children:"Resource of your Marketo project from which collections are captured."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.strong,{children:(0,n.jsx)(r.code,{children:"/syncMode"})})}),(0,n.jsx)(r.td,{children:"Sync Mode"}),(0,n.jsx)(r.td,{children:"Connection method."}),(0,n.jsx)(r.td,{children:"string"}),(0,n.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,n.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-marketo:dev\n config:\n client_id: <secret>\n client_secret: <secret>\n start_date: 2017-01-25T00:00:00Z\n domain_url: <your domain URL>\n bindings:\n - resource:\n stream: leads\n syncMode: full_refresh\n target: ${PREFIX}/leads\n {...}\n"})})]})}function h(e={}){const{wrapper:r}={...(0,i.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},28453:(e,r,t)=>{t.d(r,{R:()=>o,x:()=>c});var n=t(96540);const i={},s=n.createContext(i);function o(e){const r=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/ebce6379.9b37e36b.js b/pr-preview/pr-1594/assets/js/ebce6379.9b37e36b.js deleted file mode 100644 index 7485044541..0000000000 --- a/pr-preview/pr-1594/assets/js/ebce6379.9b37e36b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9187],{17837:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>l,frontMatter:()=>c,metadata:()=>o,toc:()=>d});var t=r(74848),s=r(28453);const c={},i="Exchange Rates API",o={id:"reference/Connectors/capture-connectors/exchange-rates",title:"Exchange Rates API",description:"This connector captures data from the Exchange Rates API.",source:"@site/docs/reference/Connectors/capture-connectors/exchange-rates.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/exchange-rates",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/exchange-rates.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Dropbox",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox"},next:{title:"Facebook Marketing",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing"}},a={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function h(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"exchange-rates-api",children:"Exchange Rates API"}),"\n",(0,t.jsxs)(n.p,{children:["This connector captures data from the ",(0,t.jsx)(n.a,{href:"https://exchangeratesapi.io/",children:"Exchange Rates API"}),".\nIt creates a Flow collection with daily exchange rate data for a variety of supported currencies.\nThis simple connector is useful for educational and demonstration purposes."]}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-exchange-rates:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-exchange-rates:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/exchangeratesapi",children:"here"}),",\nbut keep in mind that the two versions differ."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["An API key generated through an ",(0,t.jsx)(n.a,{href:"https://apilayer.com/marketplace/description/exchangerates_data-api?preview=true#pricing",children:"Exchange Rate API account"}),".\nAfter you sign up, your API key can be found on your account page.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"You may use the free account, but note that you'll be limited to the default base currency, EUR."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Exchange Rates source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/access_key"})})}),(0,t.jsx)(n.td,{children:"Access key"}),(0,t.jsx)(n.td,{children:"Your API access key. The key is case sensitive."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/base"})}),(0,t.jsx)(n.td,{children:"Base currency"}),(0,t.jsxs)(n.td,{children:["ISO reference currency. See the ",(0,t.jsx)(n.a,{href:"https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html",children:"documentation"}),". Free plan doesn't support Source Currency Switching, default base currency is EUR"]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"EUR"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/ignore_weekends"})}),(0,t.jsx)(n.td,{children:"Ignore weekends"}),(0,t.jsx)(n.td,{children:"Ignore weekends? (Exchanges don't run on weekends)"}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/start_date"})})}),(0,t.jsx)(n.td,{children:"Start date"}),(0,t.jsx)(n.td,{children:"The date in the format YYYY-MM-DD. Data will begin from this date."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsxs)(n.td,{children:["Data stream from which Flow captures data. Always set to ",(0,t.jsx)(n.code,{children:"exchange_rates"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync mode"}),(0,t.jsxs)(n.td,{children:["Connection method. Always set to ",(0,t.jsx)(n.code,{children:"incremental"}),"."]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-exchange-rates:dev\n config:\n base: EUR\n access_key: <secret>\n start_date: 2022-01-01\n ignore_weekends: true\n bindings:\n - resource:\n stream: exchange_rates\n syncMode: incremental\n target: ${PREFIX}/${COLLECTION_NAME}\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This capture definition should only have one binding, as ",(0,t.jsx)(n.code,{children:"exchange_rates"})," is the only available data stream."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/captures#pull-captures",children:"Learn more about capture definitions."})})]})}function l(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>i,x:()=>o});var t=r(96540);const s={},c=t.createContext(s);function i(e){const n=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/ecf790cf.29e2deb3.js b/pr-preview/pr-1594/assets/js/ecf790cf.29e2deb3.js deleted file mode 100644 index 42b5f1176a..0000000000 --- a/pr-preview/pr-1594/assets/js/ecf790cf.29e2deb3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1346],{27296:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var i=n(74848),o=n(28453);const s={},a="How to transform data using SQL",r={id:"guides/derivation_tutorial_sql",title:"How to transform data using SQL",description:"This guide will teach you how to write and publish a simple SQL derivation that you can use to transform data from one collection to another.",source:"@site/docs/guides/derivation_tutorial_sql.md",sourceDirName:"guides",slug:"/guides/derivation_tutorial_sql",permalink:"/pr-preview/pr-1594/guides/derivation_tutorial_sql",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/derivation_tutorial_sql.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Connecting to Estuary Flow from Kafka using Dekaf",permalink:"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka"},next:{title:"How to join two collections (TypeScript)",permalink:"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript"}},d={},l=[{value:"Introduction<a></a>",id:"introduction",level:2},{value:"Setting up your development environment<a></a>",id:"setting-up-your-development-environment",level:2},{value:"Writing the derivation<a></a>",id:"writing-the-derivation",level:2},{value:"Verify<a></a>",id:"verify",level:2},{value:"Wrapping up<a></a>",id:"wrapping-up",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"how-to-transform-data-using-sql",children:"How to transform data using SQL"}),"\n",(0,i.jsx)(t.p,{children:"This guide will teach you how to write and publish a simple SQL derivation that you can use to transform data from one collection to another."}),"\n",(0,i.jsxs)(t.h2,{id:"introduction",children:["Introduction",(0,i.jsx)("a",{id:"introduction"})]}),"\n",(0,i.jsx)(t.p,{children:"This tutorial will show you how to implement a stateless transformation using SQL. You\u2019ll learn how to implement a flow that transforms events coming from the live, real-time Wikipedia API."}),"\n",(0,i.jsxs)(t.h2,{id:"setting-up-your-development-environment",children:["Setting up your development environment",(0,i.jsx)("a",{id:"setting-up-your-development-environment"})]}),"\n",(0,i.jsxs)(t.p,{children:["In order to implement transformations through ",(0,i.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/#derivations",children:"derivations"}),", you\u2019ll need to set up your development environment. You\u2019ll need a text editor and ",(0,i.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/flowctl/",children:"flowtcl"}),", the CLI-tool for Flow installed on your machine. Check out the ",(0,i.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/flowctl/#installation-and-setup",children:"docs page"})," on installation instructions."]}),"\n",(0,i.jsxs)(t.p,{children:["Before continuing, sign in to the Estuary Flow dashboard, make sure you enable access to the Wikipedia demo. Using ",(0,i.jsx)(t.code,{children:"flowtcl"}),", quickly verify you are able to view the demo collections used in this guide."]}),"\n",(0,i.jsxs)(t.p,{children:["Execute the below command to display the documents in the ",(0,i.jsx)(t.code,{children:"demo/wikipedia/recentchange-sampled"})," collection:"]}),"\n",(0,i.jsxs)(t.p,{children:["::note This collection is a 3% sample of the enormous ",(0,i.jsx)(t.code,{children:"demo/wikipedia/recentchange"})," collection which contains millions of documents. Since the purpose of this tutorial is to demonstrate a proof of concept, we avoid publishing a derivation that processes hundreds of gigabytes of data.\n:::"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-shell",children:"flowctl collections read --collection demo/wikipedia/recentchange-sampled --uncommitted\n"})}),"\n",(0,i.jsxs)(t.p,{children:["If you see a stream of JSON documents on your terminal, you\u2019re all good - feel free to cancel the process by pressing ",(0,i.jsx)(t.code,{children:"C^C"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"Examine a sample JSON that lives in the demo collection, as this is the data you\u2019ll be using as the input for our derivation."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'{\n\xa0\xa0"$schema": "/mediawiki/recentchange/1.0.0",\n\xa0\xa0"_meta": {\n\xa0\xa0\xa0\xa0"file": "recentchange",\n\xa0\xa0\xa0\xa0"offset": 12837,\n\xa0\xa0\xa0\xa0"uuid": "f8f07d87-f5bf-11ee-8401-4fdf95f7b91a"\n\xa0\xa0},\n\xa0\xa0"bot": false,\n\xa0\xa0"comment": "[[:File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg]] added to category",\n\xa0\xa0"id": 2468434138,\n\xa0\xa0"meta": {\n\xa0\xa0\xa0\xa0"domain": "commons.wikimedia.org",\n\xa0\xa0\xa0\xa0"dt": "2024-04-08T15:52:13Z",\n\xa0\xa0\xa0\xa0"id": "d9e8698f-4eac-4262-a451-b7ca247e401c",\n\xa0\xa0\xa0\xa0"offset": 5008568732,\n\xa0\xa0\xa0\xa0"partition": 0,\n\xa0\xa0\xa0\xa0"request_id": "b5372124-63fa-45e1-b35e-86784f1692bc",\n\xa0\xa0\xa0\xa0"stream": "mediawiki.recentchange",\n\xa0\xa0\xa0\xa0"topic": "eqiad.mediawiki.recentchange",\n\xa0\xa0\xa0\xa0"uri": "https://commons.wikimedia.org/wiki/Category:Jetons"\n\xa0\xa0},\n\xa0\xa0"namespace": 14,\n\xa0\xa0"notify_url": "https://commons.wikimedia.org/w/index.php?diff=866807860&oldid=861559382&rcid=2468434138",\n\xa0\xa0"parsedcomment": "<a href=\\"/wiki/File:Jeton._Ordinaire_des_guerres_-_btv1b10405460g_(1_of_2).jpg\\" title=\\"File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg\\">File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg</a> added to category",\n\xa0\xa0"server_name": "commons.wikimedia.org",\n\xa0\xa0"server_script_path": "/w",\n\xa0\xa0"server_url": "https://commons.wikimedia.org",\n\xa0\xa0"timestamp": 1712591533,\n\xa0\xa0"title": "Category:Jetons",\n\xa0\xa0"title_url": "https://commons.wikimedia.org/wiki/Category:Jetons",\n\xa0\xa0"type": "categorize",\n\xa0\xa0"user": "Denghi\xf9Comm",\n\xa0\xa0"wiki": "commonswiki"\n}\n'})}),"\n",(0,i.jsxs)(t.p,{children:["The transformation in this tutorial will make use of the ",(0,i.jsx)(t.code,{children:"length"}),", ",(0,i.jsx)(t.code,{children:"bot"})," and ",(0,i.jsx)(t.code,{children:"user_id"})," fields to calculate how many lines a given non-bot user has modified on a day."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'{\n\xa0...\n\xa0"user_id": "User"\n\xa0"bot": 0\n\xa0"length": 1253\n\xa0...\n}\n'})}),"\n",(0,i.jsxs)(t.h2,{id:"writing-the-derivation",children:["Writing the derivation",(0,i.jsx)("a",{id:"writing-the-derivation"})]}),"\n",(0,i.jsxs)(t.p,{children:["Set up your folder structure so you can organize the resources required for the derivation. Create a working directory to follow along, and inside, create a ",(0,i.jsx)(t.code,{children:"flow.yaml"})," file."]}),"\n",(0,i.jsxs)(t.p,{children:["Inside your ",(0,i.jsx)(t.code,{children:"flow.yaml "}),"file, add the following contents:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"---\ncollections:\n\xa0\xa0Dani/derivation-tutorial/edits-by-users:\n\n\xa0\xa0\xa0\xa0schema:\n\xa0\xa0\xa0\xa0\xa0\xa0type: object\n\xa0\xa0\xa0\xa0\xa0\xa0properties:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0user_id:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0date:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0format: date\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0total_edits:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0reduce:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0strategy: sum\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: number\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0total_new_lines:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0reduce:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0strategy: sum\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: number\n\xa0\xa0\xa0\xa0\xa0\xa0reduce:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0strategy: merge\n\xa0\xa0\xa0\xa0\xa0\xa0required:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- date\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- user_id\n\n\xa0\xa0\xa0\xa0key:\n\xa0\xa0\xa0\xa0\xa0\xa0- /date\n\xa0\xa0\xa0\xa0\xa0\xa0- /user_id\n\n\xa0\xa0\xa0\xa0derive:\n\xa0\xa0\xa0\xa0\xa0\xa0using:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0sqlite: {}\n\xa0\xa0\xa0\xa0\xa0\xa0transforms:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- name: edits_by_users\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0source: demo/wikipedia/recentchange-sampled\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0shuffle: any\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0lambda: |\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0select\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0$user as user_id,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0substr($meta$dt,1,10) as date,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa01 as total_edits,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0coalesce($length$new - $length$old, 0) as total_new_lines\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0where $type = 'edit' and $user is not null and $bot = 0;\n"})}),"\n",(0,i.jsx)(t.p,{children:"\xa0"}),"\n",(0,i.jsxs)(t.p,{children:["The Flow consists of just one collection, which is what you define here, called ",(0,i.jsx)(t.code,{children:"edits-by-users"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"Let\u2019s go over this in a bit more detail."}),"\n",(0,i.jsxs)(t.p,{children:["First of all, the collection needs a schema. The schema of the incoming data (also called the ",(0,i.jsx)(t.a,{href:"https://docs.estuary.dev/concepts/schemas/#write-and-read-schemas",children:"\u201cwrite\u201d schema"}),") is already defined by the demo, you only have to define the schema of the documents the transformation will output, which is the \u201cread\u201d schema."]}),"\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.code,{children:"flow.yaml"})," file, the schema is defined in-line with the rest of the configuration."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"schema:\n\xa0\xa0type: object\n\xa0\xa0properties:\n\xa0\xa0\xa0\xa0user_id:\n\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0date:\n\xa0\xa0\xa0\xa0\xa0\xa0format: date\n\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0total_edits:\n\xa0\xa0\xa0\xa0\xa0\xa0reduce:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0strategy: sum\n\xa0\xa0\xa0\xa0\xa0\xa0type: number\n\xa0\xa0\xa0\xa0total_new_lines:\n\xa0\xa0\xa0\xa0\xa0\xa0reduce:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0strategy: sum\n\xa0\xa0\xa0\xa0\xa0\xa0type: number\n\xa0\xa0reduce:\n\xa0\xa0\xa0\xa0strategy: merge\n\xa0\xa0required:\n\xa0\xa0\xa0\xa0- date\n\xa0\xa0\xa0\xa0- user_id\n"})}),"\n",(0,i.jsx)(t.p,{children:"As you can see, this schema includes less fields than what is available in the incoming documents, this is expected, but if you wish to include more, this is where you would add them first."}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"user_id"})," and ",(0,i.jsx)(t.code,{children:"date"})," fields do not contain any modifications, but the other two have their reduction strategy defined as well to be ",(0,i.jsx)(t.code,{children:"sum"}),". This strategy reduces two numbers or integers by adding their values."]}),"\n",(0,i.jsxs)(t.p,{children:["To learn more about how reduction strategies work, check out the ",(0,i.jsx)(t.a,{href:"https://docs.estuary.dev/reference/reduction-strategies/",children:"documentation"})," page."]}),"\n",(0,i.jsx)(t.p,{children:"Moving on, the next section in the yaml file defines the key of the documents."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"key:\n\xa0\xa0- /date\n\xa0\xa0- /user_id\n"})}),"\n",(0,i.jsx)(t.p,{children:"Every Flow collection must declare a key which is used to group its documents. Keys are specified as an array of JSON pointers to document locations. The important detail here is to know that a collection key instructs Flow how documents of a collection are to be reduced, such as while being materialized to an endpoint."}),"\n",(0,i.jsx)(t.p,{children:"The final section is where you specify that this collection is derived from another collection."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"derive:\n\xa0\xa0using:\n\xa0\xa0\xa0\xa0sqlite: {}\n\xa0\xa0transforms:\n\xa0\xa0\xa0\xa0- name: edits_by_users\n\xa0\xa0\xa0\xa0\xa0\xa0source: demo/wikipedia/recentchange-sampled\n\xa0\xa0\xa0\xa0\xa0\xa0shuffle: any\n\xa0\xa0\xa0\xa0\xa0\xa0lambda: |\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0select\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0$user as user_id,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0substr($meta$dt,1,10) as date,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa01 as total_edits,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0coalesce($length$new - $length$old, 0) as total_new_lines\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0where $type = 'edit' and $user is not null and $bot = 0;\n"})}),"\n",(0,i.jsx)(t.p,{children:"Here you define the SQL statement that gets executed on the documents of the source collection."}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"source: demo/wikipedia/recentchange-sampled"})," property lets Flow know that the source collection is the demo collection from mentioned at in the beginning of the tutorial while ",(0,i.jsx)(t.code,{children:"shuffle"})," tells Flow how to colocate documents while processing, which in this case is set to ",(0,i.jsx)(t.code,{children:"any"}),", meaning source documents can be processed by any available compute."]}),"\n",(0,i.jsx)(t.p,{children:"The SQL is straightforward"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",children:"select\n $user as user_id,\n substr($meta$dt,1,10) as date,\n 1 as total_edits,\n coalesce($length$new - $length$old, 0) as total_new_lines\nwhere $type = 'edit' and $user is not null and $bot = 0\n"})}),"\n",(0,i.jsxs)(t.p,{children:["We select the ",(0,i.jsx)(t.code,{children:"user_id"}),", parse the event ",(0,i.jsx)(t.code,{children:"date"})," and calculate the amount of line changes. We also select ",(0,i.jsx)(t.code,{children:"1"})," for the value of ",(0,i.jsx)(t.code,{children:"total_edits"}),", this is important because during the reduction phase, due to having selected ",(0,i.jsx)(t.code,{children:"sum"})," as the strategy, these values will get added together to form the total number of edits in the result. We also filter out non-edit events, bot users or events without a user_id to have a somewhat clean dataset."]}),"\n",(0,i.jsxs)(t.h2,{id:"verify",children:["Verify",(0,i.jsx)("a",{id:"verify"})]}),"\n",(0,i.jsxs)(t.p,{children:["You can use ",(0,i.jsx)(t.code,{children:"flowctl"})," to quickly verify your derivation before publishing it. Use the ",(0,i.jsx)(t.code,{children:"preview"})," command to get an idea of the resulting collections."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-shell",children:'flowctl preview --source flow.yaml --name Dani/derivation-tutorial/edits-by-users\n\n{"date":"2024-04-08","total_edits":3,"total_new_lines":110,"user_id":"Renamerr"}\n{"date":"2024-04-08","total_edits":1,"total_new_lines":769,"user_id":"Sebring12Hrs"}\n{"date":"2024-04-08","total_edits":5,"total_new_lines":3360,"user_id":"Sic19"}\n{"date":"2024-04-08","total_edits":1,"total_new_lines":82,"user_id":"Simeon"}\n^C\n'})}),"\n",(0,i.jsxs)(t.p,{children:["As you can see, the output format matches the defined schema.\xa0 The last step would be to publish your derivation to Flow, which you can also do using ",(0,i.jsx)(t.code,{children:"flowctl"}),"."]}),"\n",(0,i.jsx)(t.admonition,{title:"Publishing the derivation will initialize the transformation on the live, real-time Wikipedia stream, make sure to delete it after completing the tutorial.",type:"warning"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-shell",children:"flowctl catalog publish --source flow.yaml\n"})}),"\n",(0,i.jsx)(t.p,{children:"After successfully publishing your derivation, head over to the Collections page on the Web UI and you will be able to see your derivation in action!"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//Screenshot_2024_05_09_at_17_04_08_7aa8dc036d/Screenshot_2024_05_09_at_17_04_08_7aa8dc036d.png",alt:"Verifying derivation on Web UI"})}),"\n",(0,i.jsxs)(t.h2,{id:"wrapping-up",children:["Wrapping up",(0,i.jsx)("a",{id:"wrapping-up"})]}),"\n",(0,i.jsx)(t.p,{children:"In this guide you learned how to write your first stateless SQL derivation to filter data in a collection."})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>r});var i=n(96540);const o={},s=i.createContext(o);function a(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/eec1121c.a7bb96af.js b/pr-preview/pr-1594/assets/js/eec1121c.a7bb96af.js deleted file mode 100644 index 264fda8572..0000000000 --- a/pr-preview/pr-1594/assets/js/eec1121c.a7bb96af.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2472],{10604:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>c,metadata:()=>l,toc:()=>a});var r=s(74848),t=s(28453);const c={},i="OracleDB (Flashback)",l={id:"reference/Connectors/capture-connectors/OracleDB/flashback",title:"OracleDB (Flashback)",description:"This connector captures data from OracleDB into Flow collections using Oracle Flashback.",source:"@site/docs/reference/Connectors/capture-connectors/OracleDB/flashback.md",sourceDirName:"reference/Connectors/capture-connectors/OracleDB",slug:"/reference/Connectors/capture-connectors/OracleDB/flashback",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/OracleDB/flashback.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"OracleDB",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/"},next:{title:"Paypal Transaction",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction"}},d={},a=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Create a Dedicated User",id:"create-a-dedicated-user",level:3},{value:"Include Schemas for Discovery",id:"include-schemas-for-discovery",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function o(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"oracledb-flashback",children:"OracleDB (Flashback)"}),"\n",(0,r.jsxs)(n.p,{children:["This connector captures data from OracleDB into Flow collections using ",(0,r.jsx)(n.a,{href:"https://www.oracle.com/database/technologies/flashback/",children:"Oracle Flashback"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-oracle-flashback",":dev"," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Oracle 11g or above"}),"\n",(0,r.jsx)(n.li,{children:"Allow connections from Estuary Flow to your Oracle database (if they exist in separate VPCs)"}),"\n",(0,r.jsx)(n.li,{children:"Create a dedicated read-only Estuary Flow user with access to all tables needed for replication"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,r.jsx)(n.p,{children:"Follow the steps below to set up the OracleDB connector."}),"\n",(0,r.jsx)(n.h3,{id:"create-a-dedicated-user",children:"Create a Dedicated User"}),"\n",(0,r.jsx)(n.p,{children:"Creating a dedicated database user with read-only access is recommended for better permission control and auditing."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"To create the user, run the following commands against your database:"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"CREATE USER estuary_flow_user IDENTIFIED BY <your_password_here>;\nGRANT CREATE SESSION TO estuary_flow_user;\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsx)(n.li,{children:"Next, grant the user read-only access to the relevant tables. The simplest way is to grant read access to all tables in the schema as follows:"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"GRANT SELECT ANY TABLE TO estuary_flow_user;\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"3",children:["\n",(0,r.jsx)(n.li,{children:"Alternatively, you can be more granular and grant access to specific tables in different schemas:"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:'GRANT SELECT ON "<schema_a>"."<table_1>" TO estuary_flow_user;\nGRANT SELECT ON "<schema_b>"."<table_2>" TO estuary_flow_user;\n'})}),"\n",(0,r.jsxs)(n.ol,{start:"4",children:["\n",(0,r.jsx)(n.li,{children:"Finally you need to grant the user access to read metadata from the database:"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sql",children:"GRANT SELECT_CATALOG_ROLE TO estuary_flow_user;\n"})}),"\n",(0,r.jsxs)(n.ol,{start:"5",children:["\n",(0,r.jsx)(n.li,{children:"Your database user should now be ready for use with Estuary Flow."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"include-schemas-for-discovery",children:"Include Schemas for Discovery"}),"\n",(0,r.jsx)(n.p,{children:"In your Oracle configuration, you can specify the schemas that Flow should look at when discovering tables. The schema names are case-sensitive and will default to the upper-cased user if empty. If the user does not have access to the configured schemas, no tables will be discovered."}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See ",(0,r.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the OracleDB Flashback source connector."]}),"\n",(0,r.jsx)(n.p,{children:"To allow secure connections via SSH tunneling:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Follow the guide to ",(0,r.jsx)(n.a,{href:"/guides/connect-network/",children:"configure an SSH server for tunneling"})]}),"\n",(0,r.jsxs)(n.li,{children:["When you configure your connector as described in the ",(0,r.jsx)(n.a,{href:"#configuration",children:"configuration"})," section above, including the additional ",(0,r.jsx)(n.code,{children:"networkTunnel"})," configuration to enable the SSH tunnel. See ",(0,r.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#connecting-to-endpoints-on-secure-networks",children:"Connecting to endpoints on secure networks"})," for additional details and a sample."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/address"})}),(0,r.jsx)(n.td,{children:"Address"}),(0,r.jsxs)(n.td,{children:["The connection string for connecting to the database, either in the format of host",":port","/SID or a connect descriptor such as (address=(protocol=tcps)(host=...)...)"]}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials"})}),(0,r.jsx)(n.td,{children:"Credentials"}),(0,r.jsx)(n.td,{children:"Credentials for authenticating with the database. Wallet and Username & Password authentication are supported."}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/credentials_title"})}),(0,r.jsx)(n.td,{children:"Credentials Title"}),(0,r.jsx)(n.td,{children:'Authentication method to use, one of "Wallet" or "Username & Password"'}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/username"})}),(0,r.jsx)(n.td,{children:"Username"}),(0,r.jsx)(n.td,{children:"The username which is used to access the database."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/password"})}),(0,r.jsx)(n.td,{children:"Password"}),(0,r.jsx)(n.td,{children:"The password associated with the username."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/tnsnames"})}),(0,r.jsx)(n.td,{children:"tnsnames"}),(0,r.jsx)(n.td,{children:"The tnsnames.ora file from the wallet."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/ewallet"})}),(0,r.jsx)(n.td,{children:"ewallet"}),(0,r.jsx)(n.td,{children:"The ewallet.pem file from the wallet."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/credentials/wallet_password"})}),(0,r.jsx)(n.td,{children:"Wallet Password"}),(0,r.jsx)(n.td,{children:"Password of the wallet, if protected."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/backfill_chunk_size"})}),(0,r.jsx)(n.td,{children:"Backfill Chunk Size"}),(0,r.jsx)(n.td,{children:"The number of rows which should be fetched from the database in a single backfill query."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"50000"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/skip_flashback_retention_checks"})}),(0,r.jsx)(n.td,{children:"Skip Flashback Retention Checks"}),(0,r.jsx)(n.td,{children:"Skip Flashback retention checks. Use this cautiously as we cannot guarantee consistency if Flashback retention is not sufficient."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"/advanced/default_interval"})}),(0,r.jsx)(n.td,{children:"Default Interval"}),(0,r.jsx)(n.td,{children:"Default interval between updates for all resources. Can be overwritten by each resource."}),(0,r.jsx)(n.td,{children:"integer"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"PT5M"})})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Title"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required/Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/name"})})}),(0,r.jsx)(n.td,{children:"Name"}),(0,r.jsx)(n.td,{children:"The table name"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/schema"})})}),(0,r.jsx)(n.td,{children:"Schema"}),(0,r.jsx)(n.td,{children:"In Oracle tables reside in a schema that points to the user that owns the table."}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Required"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"/interval"})})}),(0,r.jsx)(n.td,{children:"Interval"}),(0,r.jsx)(n.td,{children:"Interval between updates for this resource"}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"PT5M"})})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'captures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-oracle-flashback:dev\n config:\n address: "database-1.ukqdmzdqvvsz.us-east-2.rds.amazonaws.com:1521/ORCL"\n user: "flow_capture"\n credentials:\n credentials_title: Username & Password\n username: ADMIN\n password: secret\n networkTunnel:\n sshForwarding:\n privateKey: -----BEGIN RSA PRIVATE KEY-----\\n...\n sshEndpoint: ssh://ec2-user@19.220.21.33:22\n \n bindings:\n - resource:\n name: ${TABLE_NAME}\n schema: ${TABLE_NAMESPACE}\n interval: PT5M\n target: ${PREFIX}/${COLLECTION_NAME}\n'})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>l});var r=s(96540);const t={},c=r.createContext(t);function i(e){const n=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/f09a1148.cc1f16d4.js b/pr-preview/pr-1594/assets/js/f09a1148.cc1f16d4.js deleted file mode 100644 index f2747425ab..0000000000 --- a/pr-preview/pr-1594/assets/js/f09a1148.cc1f16d4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9193],{12726:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var t=r(74848),i=r(28453);const s={},c="Airtable",o={id:"reference/Connectors/capture-connectors/airtable",title:"Airtable",description:"This connector captures data from Airtable into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/airtable.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/airtable",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/airtable.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Aircall",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall"},next:{title:"AlloyDB",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"airtable",children:"Airtable"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from Airtable into Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/source-airtable:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/source-airtable:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(n.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(n.a,{href:"https://docs.airbyte.com/integrations/sources/airtable/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"An active Airtable account"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Airtable source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsx)(n.p,{children:"The following properties reflect the API Key authentication method."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/api_key"})}),(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/access_token"})}),(0,t.jsx)(n.td,{children:"Personal Access Token"}),(0,t.jsx)(n.td,{children:"The Personal Access Token for the Airtable account."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Resource of your Airtable project from which collections are captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-airtable:dev\n config:\n access_token: <secret>\n api_key: <secret>\n bindings:\n - resource:\n stream: users\n syncMode: full_refresh\n target: ${PREFIX}/users\n {...}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>o});var t=r(96540);const i={},s=t.createContext(i);function c(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/f47a7ed3.5af1643e.js b/pr-preview/pr-1594/assets/js/f47a7ed3.5af1643e.js deleted file mode 100644 index 4824b3397b..0000000000 --- a/pr-preview/pr-1594/assets/js/f47a7ed3.5af1643e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4430],{28216:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var i=n(74848),a=n(28453);const o={sidebar_position:2,description:"Common pain points you might have, and how Flow addresses them."},s="Who should use Flow?",r={id:"overview/who-should-use-flow",title:"Who should use Flow?",description:"Common pain points you might have, and how Flow addresses them.",source:"@site/docs/overview/who-should-use-flow.md",sourceDirName:"overview",slug:"/overview/who-should-use-flow",permalink:"/pr-preview/pr-1594/overview/who-should-use-flow",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/overview/who-should-use-flow.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Common pain points you might have, and how Flow addresses them."},sidebar:"tutorialSidebar",previous:{title:"Flow documentation",permalink:"/pr-preview/pr-1594/"},next:{title:"Comparisons",permalink:"/pr-preview/pr-1594/overview/comparisons"}},l={},c=[{value:"How Flow can help",id:"how-flow-can-help",level:2},{value:"Fully integrated pipelines",id:"fully-integrated-pipelines",level:3},{value:"Efficient architecture",id:"efficient-architecture",level:3},{value:"Powerful transformations",id:"powerful-transformations",level:3},{value:"Data integrity",id:"data-integrity",level:3},{value:"Dynamic scaling",id:"dynamic-scaling",level:3}];function d(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"who-should-use-flow",children:"Who should use Flow?"}),"\n",(0,i.jsxs)(t.p,{children:["Flow is a data movement and transformation platform designed for all members of your data team. Its powerful command-line interface gives backend engineers data integration superpowers.\nAt the same time, Flow allows data analysts and other user cohorts to meaningfully contribute to and manage the same data pipelines, or ",(0,i.jsx)(t.strong,{children:"data flows"}),", using the web application."]}),"\n",(0,i.jsx)(t.p,{children:'If you answer "yes" to any of the following questions, Flow can help:'}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Do you work with multiple databases and struggle to keep them in sync with one another?"}),"\n",(0,i.jsxs)(t.li,{children:["Do you issue repeated OLAP queries to your warehouse that are expensive to execute?","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Or do you need instant metrics for specific events like Black Friday?"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.li,{children:"Do you operate separate batch and streaming systems, and grapple with reconciling them?"}),"\n",(0,i.jsx)(t.li,{children:"Do you manage continuous processing workflows with tools like Spark,\nFlink, or Google Cloud Dataflow, and want a faster, easier-to-evolve alternative?"}),"\n",(0,i.jsx)(t.li,{children:"Is your organization held back by a data engineering bottleneck,\nwhile less-technical stakeholders are blocked from contributing by a high barrier to entry?"}),"\n",(0,i.jsxs)(t.li,{children:["Are you implementing a new data architecture framework, like a\n",(0,i.jsx)(t.a,{href:"https://martinfowler.com/articles/data-monolith-to-mesh.html",children:"distributed data mesh"}),"\nand are seeking a tool to help with orchestration?"]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"how-flow-can-help",children:"How Flow can help"}),"\n",(0,i.jsx)(t.p,{children:"These unique Flow features can help you solve the problems listed above."}),"\n",(0,i.jsx)(t.h3,{id:"fully-integrated-pipelines",children:"Fully integrated pipelines"}),"\n",(0,i.jsx)(t.p,{children:"With Flow, you can build, test, and evolve pipelines that continuously capture, transform, and materialize data across all of your systems. With one tool, you can power workflows that have historically required you to first piece together services, then integrate and operate them in-house to meet your needs."}),"\n",(0,i.jsx)(t.p,{children:"To achieve comparable capabilities to Flow you would need:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"A low-latency streaming system, such as AWS Kinesis"}),"\n",(0,i.jsx)(t.li,{children:"Data lake build-out, such as Kinesis Firehose to S3"}),"\n",(0,i.jsx)(t.li,{children:"Custom ETL application development, such as Spark, Flink, or AWS \u03bb"}),"\n",(0,i.jsx)(t.li,{children:"Supplemental data stores for intermediate transformation states"}),"\n",(0,i.jsx)(t.li,{children:"ETL job management and execution, such as a self-hosting or Google Cloud Dataflow"}),"\n",(0,i.jsx)(t.li,{children:"Custom reconciliation of historical vs streaming datasets, including onerous backfills of new streaming applications from historical data"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Flow dramatically simplifies this inherent complexity. It saves you time and costs, catches mistakes before they hit production, and keeps your data fresh across all the places you use it.\nWith both a UI-forward web application and a powerful CLI ,\nmore types of professionals can contribute to what would otherwise require a\nhighly specialized set of technical skills."}),"\n",(0,i.jsx)(t.h3,{id:"efficient-architecture",children:"Efficient architecture"}),"\n",(0,i.jsx)(t.p,{children:"Flow mixes a variety of architectural techniques to deliver high throughput, avoid latency, and minimize operating costs. These include:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Leveraging ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/schemas#reductions",children:"reductions"})," to reduce the amount of data that must be ingested, stored, and processed, often dramatically"]}),"\n",(0,i.jsx)(t.li,{children:"Executing transformations predominantly in-memory"}),"\n",(0,i.jsx)(t.li,{children:"Optimistic pipelining and vectorization of internal remote procedure calls (RPCs) and operations"}),"\n",(0,i.jsx)(t.li,{children:"A cloud-native design that optimizes for public cloud pricing models"}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["Flow also makes it easy to ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/materialization",children:(0,i.jsx)(t.strong,{children:"materialize"})})," focused data views directly into your warehouse, so you don't need to repeatedly query the much larger source datasets. This can dramatically lower warehouse costs."]}),"\n",(0,i.jsx)(t.h3,{id:"powerful-transformations",children:"Powerful transformations"}),"\n",(0,i.jsx)(t.p,{children:"With Flow, you can build pipelines that join a current event with an event that happened days, weeks, even years in the past. Flow can model arbitrary stream-to-stream joins without the windowing constraints imposed by other systems, which limit how far back in time you can join."}),"\n",(0,i.jsx)(t.p,{children:"Flow transforms data in durable micro-transactions, meaning that an outcome, once committed, won't be silently re-ordered or changed due to a crash or machine failure. This makes Flow uniquely suited for operational workflows, like assigning a dynamic amount of available inventory to a stream of requests \u2014 decisions that, once made, should not be forgotten. You can also evolve transformations as business requirements change, enriching them with new datasets or behaviors without needing to re-compute from scratch."}),"\n",(0,i.jsx)(t.h3,{id:"data-integrity",children:"Data integrity"}),"\n",(0,i.jsx)(t.p,{children:"Flow is architected to ensure that your data is accurate and that changes don't break pipelines.\nIt supports strong schematization, durable transactions with exactly-once semantics, and easy end-to-end testing."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Required JSON schemas ensure that only clean, consistent data is ingested into Flow or written to external systems. If a document violates its schema, Flow pauses the pipeline, giving you a chance to fix the error."}),"\n",(0,i.jsx)(t.li,{children:"Schemas can encode constraints, like that a latitude value must be between +90 and -90 degrees, or that a field must be a valid email address."}),"\n",(0,i.jsx)(t.li,{children:"Flow can project JSON schema into other flavors, like TypeScript types or SQL tables. Strong type checking catches bugs before they're applied to production."}),"\n",(0,i.jsx)(t.li,{children:"Flow's declarative tests verify the integrated, end-to-end behavior of data flows."}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"dynamic-scaling",children:"Dynamic scaling"}),"\n",(0,i.jsx)(t.p,{children:"The Flow runtime scales from a single process up to a large Kubernetes cluster for high-volume production deployments. Processing tasks are quickly reassigned upon any machine failure for high availability."}),"\n",(0,i.jsxs)(t.p,{children:["Each process can also be scaled independently, at any time, and without downtime. This is unique to Flow. Comparable systems require that an arbitrary data partitioning be decided upfront, a crucial performance knob that's awkward and expensive to change. Instead, Flow can repeatedly ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/concepts/advanced/shards",children:"split a running task"})," into two new tasks, each half the size, without stopping it or impacting its downstream uses."]})]})}function h(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>r});var i=n(96540);const a={},o=i.createContext(a);function s(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/f59a0ebe.dd03be98.js b/pr-preview/pr-1594/assets/js/f59a0ebe.dd03be98.js deleted file mode 100644 index 2988a09591..0000000000 --- a/pr-preview/pr-1594/assets/js/f59a0ebe.dd03be98.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5364],{19764:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>d});var t=r(74848),i=r(28453);const s={},c="Aircall",l={id:"reference/Connectors/capture-connectors/aircall",title:"Aircall",description:"This connector captures data from Aircall into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/aircall.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/aircall",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/aircall.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Capture connectors",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/"},next:{title:"Airtable",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable"}},o={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup",id:"setup",level:2},{value:"Set up the Aircall connector in Estuary Flow",id:"set-up-the-aircall-connector-in-estuary-flow",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Supported Streams",id:"supported-streams",level:2},{value:"API Method Example",id:"api-method-example",level:2},{value:"Performance Considerations",id:"performance-considerations",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"aircall",children:"Aircall"}),"\n",(0,t.jsx)(n.p,{children:"This connector captures data from Aircall into Flow collections."}),"\n",(0,t.jsxs)(n.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-aircall",":dev"," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"To set up the Aircall connector, you need the following prerequisite:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Access Token: An access token acting as a bearer token is required for the connector to work. You can find the access token in the settings of ",(0,t.jsx)(n.a,{href:"https://dashboard.aircall.io/integrations/api-keys",children:"Aircall"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsx)(n.p,{children:"Follow the steps below to set up the Aircall connector."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Obtain an Aircall access token from the Aircall ",(0,t.jsx)(n.a,{href:"https://dashboard.aircall.io/integrations/api-keys",children:"settings"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"set-up-the-aircall-connector-in-estuary-flow",children:"Set up the Aircall connector in Estuary Flow"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Log into your Estuary Flow account."}),"\n",(0,t.jsx)(n.li,{children:'In the left navigation bar, click on "Captures". In the top-left corner, click "Connector Search".'}),"\n",(0,t.jsx)(n.li,{children:'Enter the name for the Aircall connector and select "Aircall" from the dropdown.'}),"\n",(0,t.jsxs)(n.li,{children:["Fill out the following endpoint configurations:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"api_id"}),": The auto-generated ID."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"api_token"}),": The access token obtained from Aircall settings."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"start_date"}),": Date filter for eligible streams. Enter the desired start date."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See ",(0,t.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/connectors/#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Aircall source connector."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/api_id"})}),(0,t.jsx)(n.td,{children:"API ID"}),(0,t.jsxs)(n.td,{children:["App ID found at ",(0,t.jsx)(n.a,{href:"https://dashboard.aircall.io/integrations/api-keys",children:"settings"})]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/api_token"})}),(0,t.jsx)(n.td,{children:"API Token"}),(0,t.jsxs)(n.td,{children:["App token found at ",(0,t.jsx)(n.a,{href:"https://dashboard.aircall.io/integrations/api-keys",children:"settings"})]}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/start_date"})}),(0,t.jsx)(n.td,{children:"Start Date"}),(0,t.jsx)(n.td,{children:"Date time filter for incremental filter, Specify which date to extract from."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/stream"})})}),(0,t.jsx)(n.td,{children:"Stream"}),(0,t.jsx)(n.td,{children:"Resource of your Aircall project from which collections are captured."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/syncMode"})})}),(0,t.jsx)(n.td,{children:"Sync Mode"}),(0,t.jsx)(n.td,{children:"Connection method."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "properties": {\n "start_date": {\n "default": "2023-01-01T00:00:00.000Z",\n "format": null\n }\n }\n}\n'})}),"\n",(0,t.jsx)(n.h2,{id:"supported-streams",children:"Supported Streams"}),"\n",(0,t.jsx)(n.p,{children:"The Aircall connector supports the following streams:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"calls"}),"\n",(0,t.jsx)(n.li,{children:"company"}),"\n",(0,t.jsx)(n.li,{children:"contacts"}),"\n",(0,t.jsx)(n.li,{children:"numbers"}),"\n",(0,t.jsx)(n.li,{children:"tags"}),"\n",(0,t.jsx)(n.li,{children:"user_availablity"}),"\n",(0,t.jsx)(n.li,{children:"users"}),"\n",(0,t.jsx)(n.li,{children:"teams"}),"\n",(0,t.jsx)(n.li,{children:"webhooks"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"api-method-example",children:"API Method Example"}),"\n",(0,t.jsx)(n.p,{children:"An example of an API method call for Aircall:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:"GET https://api.aircall.io/v1/numbers"})}),"\n",(0,t.jsx)(n.h2,{id:"performance-considerations",children:"Performance Considerations"}),"\n",(0,t.jsx)(n.p,{children:"The Aircall API currently uses v1. The connector defaults to using v1."})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>l});var t=r(96540);const i={},s=t.createContext(i);function c(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/f5f0d846.43fdf6c7.js b/pr-preview/pr-1594/assets/js/f5f0d846.43fdf6c7.js deleted file mode 100644 index 77c4666540..0000000000 --- a/pr-preview/pr-1594/assets/js/f5f0d846.43fdf6c7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7272],{14511:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var i=t(74848),o=t(28453);const r={},s="How to transform data using TypeScript",a={id:"guides/transform_data_using_typescript",title:"How to transform data using TypeScript",description:"This guide will teach you how to write and publish a simple TypeScript derivation.",source:"@site/docs/guides/transform_data_using_typescript.md",sourceDirName:"guides",slug:"/guides/transform_data_using_typescript",permalink:"/pr-preview/pr-1594/guides/transform_data_using_typescript",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/guides/transform_data_using_typescript.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Schema evolution",permalink:"/pr-preview/pr-1594/guides/schema-evolution"},next:{title:"Concepts",permalink:"/pr-preview/pr-1594/concepts/"}},l={},c=[{value:"Introduction<a></a>",id:"introduction",level:2},{value:"Setting up your development environment<a></a>",id:"setting-up-your-development-environment",level:2},{value:"Writing the derivation<a></a>",id:"writing-the-derivation",level:2},{value:"The transformation code<a></a>",id:"the-transformation-code",level:2},{value:"Verify<a></a>",id:"verify",level:2},{value:"Wrapping up<a></a>",id:"wrapping-up",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"how-to-transform-data-using-typescript",children:"How to transform data using TypeScript"}),"\n",(0,i.jsx)(n.p,{children:"This guide will teach you how to write and publish a simple TypeScript derivation."}),"\n",(0,i.jsxs)(n.h2,{id:"introduction",children:["Introduction",(0,i.jsx)("a",{id:"introduction"})]}),"\n",(0,i.jsx)(n.p,{children:"This tutorial will show you how to implement a stateless transformation using TypeScript. You\u2019ll learn how to implement a flow that filters events coming from the live, real-time Wikipedia API."}),"\n",(0,i.jsxs)(n.h2,{id:"setting-up-your-development-environment",children:["Setting up your development environment",(0,i.jsx)("a",{id:"setting-up-your-development-environment"})]}),"\n",(0,i.jsxs)(n.p,{children:["In order to implement transformations through ",(0,i.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/#derivations",children:"derivations"}),", you\u2019ll need to set up your development environment. You\u2019ll need a text editor and ",(0,i.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/flowctl/",children:"flowtcl"}),", the CLI-tool for Flow installed on your machine. Check out the ",(0,i.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/flowctl/#installation-and-setup",children:"docs page"})," on installation instructions."]}),"\n",(0,i.jsxs)(n.p,{children:["Before continuing, sign in to the Estuary Flow dashboard, make sure you enable access to the Wikipedia demo. Using ",(0,i.jsx)(n.code,{children:"flowtcl"}),", quickly verify you are able to view the demo collections used in this guide."]}),"\n",(0,i.jsxs)(n.p,{children:["Execute the below command to display the documents in the ",(0,i.jsx)(n.code,{children:"demo/wikipedia/recentchange-sampled"})," collection:"]}),"\n",(0,i.jsxs)(n.p,{children:["::note This collection is a 3% sample of the enormous ",(0,i.jsx)(n.code,{children:"demo/wikipedia/recentchange"})," collection which contains millions of documents. Since the purpose of this tutorial is to demonstrate a proof of concept, we avoid publishing a derivation that processes hundreds of gigabytes of data.\n:::"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"flowctl collections read --collection demo/wikipedia/recentchange-sampled --uncommitted\n"})}),"\n",(0,i.jsxs)(n.p,{children:["If you see a stream of JSON documents on your terminal, you\u2019re all good - feel free to cancel the process by pressing ",(0,i.jsx)(n.code,{children:"C^C"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Examine a sample JSON that lives in the demo collection, as this is the data you\u2019ll be using as the input for our derivation."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n\xa0\xa0"$schema": "/mediawiki/recentchange/1.0.0",\n\xa0\xa0"_meta": {\n\xa0\xa0\xa0\xa0"file": "recentchange",\n\xa0\xa0\xa0\xa0"offset": 12837,\n\xa0\xa0\xa0\xa0"uuid": "f8f07d87-f5bf-11ee-8401-4fdf95f7b91a"\n\xa0\xa0},\n\xa0\xa0"bot": false,\n\xa0\xa0"comment": "[[:File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg]] added to category",\n\xa0\xa0"id": 2468434138,\n\xa0\xa0"meta": {\n\xa0\xa0\xa0\xa0"domain": "commons.wikimedia.org",\n\xa0\xa0\xa0\xa0"dt": "2024-04-08T15:52:13Z",\n\xa0\xa0\xa0\xa0"id": "d9e8698f-4eac-4262-a451-b7ca247e401c",\n\xa0\xa0\xa0\xa0"offset": 5008568732,\n\xa0\xa0\xa0\xa0"partition": 0,\n\xa0\xa0\xa0\xa0"request_id": "b5372124-63fa-45e1-b35e-86784f1692bc",\n\xa0\xa0\xa0\xa0"stream": "mediawiki.recentchange",\n\xa0\xa0\xa0\xa0"topic": "eqiad.mediawiki.recentchange",\n\xa0\xa0\xa0\xa0"uri": "https://commons.wikimedia.org/wiki/Category:Jetons"\n\xa0\xa0},\n\xa0\xa0"namespace": 14,\n\xa0\xa0"notify_url": "https://commons.wikimedia.org/w/index.php?diff=866807860&oldid=861559382&rcid=2468434138",\n\xa0\xa0"parsedcomment": "<a href=\\"/wiki/File:Jeton._Ordinaire_des_guerres_-_btv1b10405460g_(1_of_2).jpg\\" title=\\"File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg\\">File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg</a> added to category",\n\xa0\xa0"server_name": "commons.wikimedia.org",\n\xa0\xa0"server_script_path": "/w",\n\xa0\xa0"server_url": "https://commons.wikimedia.org",\n\xa0\xa0"timestamp": 1712591533,\n\xa0\xa0"title": "Category:Jetons",\n\xa0\xa0"title_url": "https://commons.wikimedia.org/wiki/Category:Jetons",\n\xa0\xa0"type": "categorize",\n\xa0\xa0"user": "Denghi\xf9Comm",\n\xa0\xa0"wiki": "commonswiki"\n}\n'})}),"\n",(0,i.jsxs)(n.p,{children:["There\u2019s a bunch of fields available, but as mentioned earlier, the scope of the transformation for this tutorial is limited to only one field, which lives nested inside the ",(0,i.jsx)(n.code,{children:"meta"})," object."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n\xa0...\n\xa0"meta": {\n\xa0\xa0\xa0...\n\xa0\xa0\xa0"domain": "commons.wikimedia.org",\n\xa0\xa0\xa0...\n\xa0\xa0},\n\xa0...\n}\n'})}),"\n",(0,i.jsxs)(n.p,{children:["This field is composed of the various wikipedia domains that are used to serve different sites of the organization. This is what you\u2019ll use as the base of the filter derivation. Let's say that the goal is to only keep events that originate from the English-language wikipedia page, which is running under the domain ",(0,i.jsx)(n.code,{children:"en.wikipedia.org"}),"."]}),"\n",(0,i.jsxs)(n.h2,{id:"writing-the-derivation",children:["Writing the derivation",(0,i.jsx)("a",{id:"writing-the-derivation"})]}),"\n",(0,i.jsxs)(n.p,{children:["Set up your folder structure so you can organize the resources required for the derivation. Create a working directory to follow along, and inside, create a ",(0,i.jsx)(n.code,{children:"flow.yaml"})," file."]}),"\n",(0,i.jsxs)(n.p,{children:["Inside your ",(0,i.jsx)(n.code,{children:"flow.yaml "}),"file, add the following contents:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"---\ncollections:\n\xa0\xa0Dani/derivation-tutorial/recentchange-filtered-typescript:\n\xa0\xa0\xa0\xa0schema: recentchange-filtered.schema.yaml\n\xa0\xa0\xa0\xa0key:\n\xa0\xa0\xa0\xa0\xa0\xa0- /_meta/file\n\xa0\xa0\xa0\xa0\xa0\xa0- /_meta/offset\n\xa0\xa0\xa0\xa0derive:\n\xa0\xa0\xa0\xa0\xa0\xa0using:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0typescript:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0module: recentchange-filtered.ts\n\xa0\xa0\xa0\xa0\xa0\xa0transforms:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0- name: filter_values_typescript\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0source: demo/wikipedia/recentchange-sampled\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0shuffle: any\n"})}),"\n",(0,i.jsx)(n.p,{children:"\xa0"}),"\n",(0,i.jsxs)(n.p,{children:["The Flow consists of just one collection, which is what you define here, called ",(0,i.jsx)(n.code,{children:"Dani/derivation-tutorial/recentchange-filtered-typescript"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Let\u2019s go over this in a bit more detail."}),"\n",(0,i.jsxs)(n.p,{children:["First of all, the collection needs a schema. The schema of the incoming data (also called the ",(0,i.jsx)(n.a,{href:"https://docs.estuary.dev/concepts/schemas/#write-and-read-schemas",children:"\u201cwrite\u201d schema"}),") is already defined by the demo, you only have to define the schema of the documents the transformation will output, which is the \u201cread\u201d schema."]}),"\n",(0,i.jsx)(n.p,{children:"Let\u2019s define what the final documents will look like."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'---\n$schema: "http://json-schema.org/draft-07/schema#"\nproperties:\n\xa0\xa0_meta:\n\xa0\xa0\xa0\xa0properties:\n\xa0\xa0\xa0\xa0\xa0\xa0file:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0\xa0\xa0offset:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: integer\n\xa0\xa0\xa0\xa0\xa0\xa0uuid:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0type: string\n\xa0\xa0\xa0\xa0required:\n\xa0\xa0\xa0\xa0\xa0\xa0- file\n\xa0\xa0\xa0\xa0\xa0\xa0- offset\n\xa0\xa0\xa0\xa0type: object\n\xa0\xa0domain:\n\xa0\xa0\xa0\xa0type: string\n\xa0\xa0title:\n\xa0\xa0\xa0\xa0type: string\n\xa0\xa0user:\n\xa0\xa0\xa0\xa0type: string\ntype: object\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Save this schema as ",(0,i.jsx)(n.code,{children:"recentchange-filtered.schema.yaml"})," next to your ",(0,i.jsx)(n.code,{children:"flow.yaml"})," file."]}),"\n",(0,i.jsx)(n.p,{children:"As you can see, this schema definition includes a lot less fields than what is available in the incoming documents, this is expected, but if you wish to include more, this is where you would add them first."}),"\n",(0,i.jsx)(n.p,{children:"In the collection yaml definition, the next section defines the key of the documents."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"key:\n\xa0\xa0- /_meta/file\n\xa0\xa0- /_meta/offset\n"})}),"\n",(0,i.jsx)(n.p,{children:"Every Flow collection must declare a key which is used to group its documents. Keys are specified as an array of JSON pointers to document locations. The important detail here is to know that a collection key instructs Flow how documents of a collection are to be reduced, such as while being materialized to an endpoint. For this tutorial, you are just going to reuse the key definition of the base collection."}),"\n",(0,i.jsx)(n.p,{children:"The final section is where you specify that this collection is derived from another collection."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"derive:\n\xa0\xa0using:\n\xa0\xa0\xa0\xa0typescript:\n\xa0\xa0\xa0\xa0\xa0\xa0module: recentchange-filtered.ts\n\xa0\xa0transforms:\n\xa0\xa0\xa0\xa0- name: filter_values_typescript\n\xa0\xa0\xa0\xa0\xa0\xa0source: demo/wikipedia/recentchange-sampled\n\xa0\xa0\xa0\xa0\xa0\xa0shuffle: any\n"})}),"\n",(0,i.jsx)(n.p,{children:"Here you configure the name of the Typescript file that will contain the code for the actual transformation (don\u2019t worry about the file not existing yet!) and give a name to the transformation.\xa0"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"source: demo/wikipedia/recentchange-sampled"})," property lets Flow know that the source collection is the demo collection from mentioned at in the beginning of the tutorial while ",(0,i.jsx)(n.code,{children:"shuffle"})," tells Flow how to colocate documents while processing, which in this case is set to ",(0,i.jsx)(n.code,{children:"any"}),", meaning source documents can be processed by any available compute."]}),"\n",(0,i.jsx)(n.p,{children:"Alright, the configuration required for the derivation is in place, all that\u2019s left is to write some TypeScript!"}),"\n",(0,i.jsxs)(n.h2,{id:"the-transformation-code",children:["The transformation code",(0,i.jsx)("a",{id:"the-transformation-code"})]}),"\n",(0,i.jsxs)(n.p,{children:["The next step is to use ",(0,i.jsx)(n.code,{children:"flowctl"})," to generate TypeScript stubs you can use as aid when writing the transformation code."]}),"\n",(0,i.jsx)(n.p,{children:"Execute the following command:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"flowctl generate --source flow.yaml\n"})}),"\n",(0,i.jsxs)(n.p,{children:["If everything went well, you\u2019ll see a bunch of new files that ",(0,i.jsx)(n.code,{children:"flowctl"})," generated for you in your working directory."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"\u279c tree\n.\n\u251c\u2500\u2500 deno.json\n\u251c\u2500\u2500 flow.yaml\n\u251c\u2500\u2500 flow_generated\n\u2502 \xa0 \u2514\u2500\u2500 typescript\n\u2502 \xa0 \xa0 \xa0 \u2514\u2500\u2500 Dani\n\u2502 \xa0 \xa0 \xa0 \xa0 \xa0 \u2514\u2500\u2500 derivation-tutorial\n\u2502 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \u2514\u2500\u2500 recentchange-filtered-typescript.ts\n\u251c\u2500\u2500 recentchange-filtered.schema.yaml\n\u2514\u2500\u2500 recentchange-filtered.ts\n\n5 directories, 5 files\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The folder ",(0,i.jsx)(n.code,{children:"flow_generated"})," along with the ",(0,i.jsx)(n.code,{children:"deno.json"})," file are two things you won\u2019t have to modify during this tutorial. If you take a look at file that ",(0,i.jsx)(n.code,{children:"flowtcl"})," generated under ",(0,i.jsx)(n.code,{children:"flow_generated/typescript/<your_working_directory>/<your_prefix>/recentchange-filtered-typescript.ts"})," you can see the types you are able to use in your transformations."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:'// Generated for published documents of derived collection Dani/derivation-tutorial/recentchange-filtered-typescript.\nexport type Document = {\n\xa0\xa0\xa0\xa0"_meta"?: {\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0file: string;\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0offset: number;\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0uuid?: string;\n\xa0\xa0\xa0\xa0};\n\xa0\xa0\xa0\xa0domain?: string;\n\xa0\xa0\xa0\xa0title?: string;\n\xa0\xa0\xa0\xa0user?: string;\n};\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Now, the actual transformation code will live in the following file: ",(0,i.jsx)(n.code,{children:"recentchange-filtered.ts"}),". Take a look at the default contents."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"import { IDerivation, Document, SourceFilterValuesTypescript } from 'flow/Dani/derivation-tutorial/recentchange-filtered-typescript.ts';\n\n// Implementation for derivation Dani/derivation-tutorial/recentchange-filtered-typescript.\nexport class Derivation extends IDerivation {\n\xa0\xa0\xa0\xa0filterValuesTypescript(_read: { doc: SourceFilterValuesTypescript }): Document[] {\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0throw new Error(\"Not implemented\");\n\xa0\xa0\xa0\xa0}\n}\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Helpfully, ",(0,i.jsx)(n.code,{children:"flowctl"})," provides a skeleton function. Update the function body to implement the filter functionality."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:'export class Derivation extends IDerivation {\n\xa0\xa0\xa0\xa0filterValuesTypescript(_read: { doc: SourceFilterValuesTypescript }): Document[] {\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0if (_read.doc.meta?.domain == \'en.wikipedia.org\') {\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0return [{\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0"_meta": {\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0"file": _read.doc._meta.file,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0"offset": _read.doc._meta.offset,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0"uuid": _read.doc._meta.uuid,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0},\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0"domain": _read.doc.meta.domain,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0"title": _read.doc.title,\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0"user": _read.doc.user\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0}];\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0}\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0else {\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0return []\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0}\n\xa0\xa0\xa0\xa0}\n}\n'})}),"\n",(0,i.jsx)(n.p,{children:"As you can see, only documents which contain the \u201cen.wikipedia.org\u201d domain are being returned, in addition to discarding most fields from the incoming record, and just keeping the ones defined in the collection schema."}),"\n",(0,i.jsxs)(n.h2,{id:"verify",children:["Verify",(0,i.jsx)("a",{id:"verify"})]}),"\n",(0,i.jsxs)(n.p,{children:["You can use ",(0,i.jsx)(n.code,{children:"flowctl"})," to quickly verify your derivation before publishing it. Use the ",(0,i.jsx)(n.code,{children:"preview"})," command to get an idea of the resulting collections."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'\u279c flowctl preview --source flow.yaml --name Dani/derivation-tutorial/recentchange-filtered-typescript\n\n{"_meta":{"file":"recentchange","offset":13757,"uuid":"079296fe-f5c0-11ee-9401-4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"Adoption","user":"JustBeCool"}\n{"_meta":{"file":"recentchange","offset":13772,"uuid":"082ae4fc-f5c0-11ee-8801-4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"Wikipedia:Teahouse","user":"Subanark"}\n{"_meta":{"file":"recentchange","offset":13774,"uuid":"082ae4fc-f5c0-11ee-9001-4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"Islandia, New York","user":"204.116.28.102"}\n^C\n'})}),"\n",(0,i.jsxs)(n.p,{children:["As you can see, the output format matches the defined schema.\xa0 The last step would be to publish your derivation to Flow, which you can also do using ",(0,i.jsx)(n.code,{children:"flowctl"}),"."]}),"\n",(0,i.jsx)(n.admonition,{title:"Publishing the derivation will initialize the transformation on the live, real-time Wikipedia stream, make sure to delete it after completing the tutorial.",type:"warning"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"flowctl catalog publish --source flow.yaml\n"})}),"\n",(0,i.jsx)(n.p,{children:"After successfully publishing your derivation, head over to the Collections page on the Web UI and you will be able to see your derivation in action!"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://storage.googleapis.com/estuary-marketing-strapi-uploads/uploads//Screenshot_2024_05_09_at_14_06_03_90f8bb7c34/Screenshot_2024_05_09_at_14_06_03_90f8bb7c34.png",alt:"Verify Derivation on Web UI"})}),"\n",(0,i.jsxs)(n.h2,{id:"wrapping-up",children:["Wrapping up",(0,i.jsx)("a",{id:"wrapping-up"})]}),"\n",(0,i.jsx)(n.p,{children:"In this guide you learned how to write your first stateless TypeScript derivation to filter data in a collection."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var i=t(96540);const o={},r=i.createContext(o);function s(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/f65e0d6c.e05fb411.js b/pr-preview/pr-1594/assets/js/f65e0d6c.e05fb411.js deleted file mode 100644 index b3d878466f..0000000000 --- a/pr-preview/pr-1594/assets/js/f65e0d6c.e05fb411.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1980],{56196:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var t=n(74848),i=n(28453);const s={},c="Braintree",o={id:"reference/Connectors/capture-connectors/braintree",title:"Braintree",description:"This connector captures data from Braintree into Flow collections.",source:"@site/docs/reference/Connectors/capture-connectors/braintree.md",sourceDirName:"reference/Connectors/capture-connectors",slug:"/reference/Connectors/capture-connectors/braintree",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/capture-connectors/braintree.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Bing Ads",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads"},next:{title:"Braze",permalink:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze"}},d={},l=[{value:"Supported data resources",id:"supported-data-resources",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function a(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"braintree",children:"Braintree"}),"\n",(0,t.jsx)(r.p,{children:"This connector captures data from Braintree into Flow collections."}),"\n",(0,t.jsxs)(r.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,t.jsx)(r.a,{href:"https://ghcr.io/estuary/source-braintree:dev",children:(0,t.jsx)(r.code,{children:"ghcr.io/estuary/source-braintree:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,t.jsxs)(r.p,{children:["This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.\nYou can find their documentation ",(0,t.jsx)(r.a,{href:"https://docs.airbyte.com/integrations/sources/braintree/",children:"here"}),",\nbut keep in mind that the two versions may be significantly different."]}),"\n",(0,t.jsx)(r.h2,{id:"supported-data-resources",children:"Supported data resources"}),"\n",(0,t.jsx)(r.p,{children:"The following data resources are supported through the Braintree APIs:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.paypal.com/braintree/docs/reference/request/customer/search",children:"Customers"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.paypal.com/braintree/docs/reference/response/discount",children:"Discounts"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.paypal.com/braintree/docs/reference/request/dispute/search",children:"Disputes"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developers.braintreepayments.com/reference/response/transaction/python",children:"Transactions"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.paypal.com/braintree/docs/reference/response/merchant-account",children:"Merchant Accounts"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.paypal.com/braintree/docs/reference/response/plan",children:"Plans"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.paypal.com/braintree/docs/reference/response/subscription",children:"Subscriptions"})}),"\n"]}),"\n",(0,t.jsx)(r.p,{children:"By default, each resource is mapped to a Flow collection through a separate binding."}),"\n",(0,t.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(r.p,{children:"To set up the Braintree source connector, you'll need Braintree's:"}),"\n",(0,t.jsxs)(r.ol,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.paypal.com/braintree/articles/control-panel/important-gateway-credentials#public-key",children:"Public Key"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.paypal.com/braintree/articles/control-panel/important-gateway-credentials#environment",children:"Environment"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.paypal.com/braintree/articles/control-panel/important-gateway-credentials#merchant-id",children:"Merchant ID"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"https://developer.paypal.com/braintree/articles/control-panel/important-gateway-credentials#private-key",children:"Private Key"})}),"\n"]}),"\n",(0,t.jsx)(r.p,{children:"We recommend creating a restricted, read-only key specifically for Estuary access. This will allow you to control which resources Estuary should be able to access."}),"\n",(0,t.jsx)(r.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(r.p,{children:["You configure connectors either in the Flow web app, or by directly editing the catalog specification file.\nSee ",(0,t.jsx)(r.a,{href:"/pr-preview/pr-1594/concepts/connectors#using-connectors",children:"connectors"})," to learn more about using connectors. The values and specification sample below provide configuration details specific to the Braintree source connector."]}),"\n",(0,t.jsx)(r.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(r.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Property"}),(0,t.jsx)(r.th,{children:"Title"}),(0,t.jsx)(r.th,{children:"Description"}),(0,t.jsx)(r.th,{children:"Type"}),(0,t.jsx)(r.th,{children:"Required/Default"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"/environment"})}),(0,t.jsx)(r.td,{children:"Environment"}),(0,t.jsx)(r.td,{children:"Environment specifies where the data will come from."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"/merchant_id"})}),(0,t.jsx)(r.td,{children:"Merchant ID"}),(0,t.jsx)(r.td,{children:"The unique identifier for your entire gateway account."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"/private_key"})}),(0,t.jsx)(r.td,{children:"Private Key"}),(0,t.jsx)(r.td,{children:"Braintree Private Key."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"/public_key"})}),(0,t.jsx)(r.td,{children:"Public Key"}),(0,t.jsx)(r.td,{children:"Braintree Public Key."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"/start_date"})}),(0,t.jsx)(r.td,{children:"Start Date"}),(0,t.jsx)(r.td,{children:"UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Default"})]})]})]}),"\n",(0,t.jsx)(r.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Property"}),(0,t.jsx)(r.th,{children:"Title"}),(0,t.jsx)(r.th,{children:"Description"}),(0,t.jsx)(r.th,{children:"Type"}),(0,t.jsx)(r.th,{children:"Required/Default"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.code,{children:"/stream"})})}),(0,t.jsx)(r.td,{children:"Stream"}),(0,t.jsx)(r.td,{children:"Resource of your Braintree project from which collections are captured."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.code,{children:"/syncMode"})})}),(0,t.jsx)(r.td,{children:"Sync Mode"}),(0,t.jsx)(r.td,{children:"Connection method."}),(0,t.jsx)(r.td,{children:"string"}),(0,t.jsx)(r.td,{children:"Required"})]})]})]}),"\n",(0,t.jsx)(r.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"\ncaptures:\n ${PREFIX}/${CAPTURE_NAME}:\n endpoint:\n connector:\n image: ghcr.io/estuary/source-braintree:dev\n config:\n environment: Development\n merchant_id: <id>\n private_key: <key>\n public_key: <key>\n start_date: 2017-01-25T00:00:00Z\n bindings:\n - resource:\n stream: customers\n syncMode: full_refresh\n target: ${PREFIX}/customers\n {...}\n"})})]})}function h(e={}){const{wrapper:r}={...(0,i.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>c,x:()=>o});var t=n(96540);const i={},s=t.createContext(i);function c(e){const r=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),t.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/fc44458b.b9f3d72a.js b/pr-preview/pr-1594/assets/js/fc44458b.b9f3d72a.js deleted file mode 100644 index 30868cc734..0000000000 --- a/pr-preview/pr-1594/assets/js/fc44458b.b9f3d72a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6097],{81201:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=n(74848),o=n(28453);const r={},s="Google Sheets",l={id:"reference/Connectors/materialization-connectors/Google-sheets",title:"Google Sheets",description:"This connector materializes Flow collections into sheets in a Google Sheets spreadsheet.",source:"@site/docs/reference/Connectors/materialization-connectors/Google-sheets.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/Google-sheets",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/Google-sheets.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Google Cloud Pub/Sub",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub"},next:{title:"HTTP Webhook",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook"}},a={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"OAuth authentication using the Flow web app",id:"oauth-authentication-using-the-flow-web-app",level:3},{value:"Manual authentication",id:"manual-authentication",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3}];function h(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"google-sheets",children:"Google Sheets"}),"\n",(0,i.jsx)(t.p,{children:"This connector materializes Flow collections into sheets in a Google Sheets spreadsheet."}),"\n",(0,i.jsxs)(t.p,{children:["It is available for use in the Flow web application. For local development or open-source workflows, ",(0,i.jsx)(t.a,{href:"https://ghcr.io/estuary/materialize-google-sheets:dev",children:(0,i.jsx)(t.code,{children:"ghcr.io/estuary/materialize-google-sheets:dev"})})," provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions."]}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(t.p,{children:"To use this connector, you'll need:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"At least one Flow collection."}),"\n",(0,i.jsxs)(t.p,{children:["If you haven't yet captured your data from its external source, start at the beginning of the ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/create-dataflow",children:"guide to create a dataflow"}),". You'll be referred back to this connector-specific documentation at the appropriate steps."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.admonition,{type:"caution",children:[(0,i.jsx)(t.p,{children:"For performance reasons, this connector is limited to 1 million cells per materialized sheet.\nIf a bound collection has more than 1 million unique keys, the materialization will fail."}),(0,i.jsxs)(t.p,{children:["If you plan to materialize a collection with an unbounded number of keys,\nyou should first use a ",(0,i.jsx)(t.a,{href:"/pr-preview/pr-1594/guides/flowctl/create-derivation",children:"derivation"})," to summarize it\ninto a collection with a bounded set of keys."]})]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["The URL of a Google spreadsheet that ",(0,i.jsx)(t.em,{children:"does not"})," contain the output of a prior Flow materialization."]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"caution",children:(0,i.jsx)(t.p,{children:"Materializing data to a spreadsheet that already contains the output of another Flow materialization can result in an error.\nUse a new spreadsheet for each materialization, or completely clear the output of prior materializations from the spreadsheet before you continue."})}),"\n",(0,i.jsx)(t.p,{children:"There are two ways to authenticate with Google when using this connector:\nsigning in with Google through OAuth in the web app, and configuring manually with a Google service account key.\nOAuth is simpler, and is recommended when using the web app.\nOnly manual configuration is supported using the CLI."}),"\n",(0,i.jsx)(t.p,{children:"Additional prerequisites depend on the authentication method you choose."}),"\n",(0,i.jsx)(t.h3,{id:"oauth-authentication-using-the-flow-web-app",children:"OAuth authentication using the Flow web app"}),"\n",(0,i.jsx)(t.p,{children:"You'll need:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"The username and password of a Google account with edit access to the destination spreadsheet."}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"manual-authentication",children:"Manual authentication"}),"\n",(0,i.jsx)(t.p,{children:"You'll need:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Google Sheets and Google Drive APIs enabled on your Google account."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"A Google service account with:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"A JSON key generated."}),"\n",(0,i.jsx)(t.li,{children:"Edit access to the destination spreadsheet."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Follow the steps below to meet these prerequisites:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://support.google.com/googleapi/answer/6158841?hl=en",children:"Enable"})," the Google Sheets and Google Drive APIs\nfor the Google ",(0,i.jsx)(t.a,{href:"https://cloud.google.com/storage/docs/projects",children:"project"})," with which your spreadsheet is associated.\n(Unless you actively develop with Google Cloud, you'll likely just have one option)."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Create a ",(0,i.jsx)(t.a,{href:"https://developers.google.com/identity/protocols/oauth2/service-account#creatinganaccount",children:"service account and generate a JSON key"}),".\nDuring setup, grant the account the ",(0,i.jsx)(t.strong,{children:"Editor"})," role on your project.\nYou'll copy the contents of the downloaded key file into the Service Account JSON parameter when you configure the connector."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Share your Google spreadsheet with the service account, granting edit access."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsx)(t.p,{children:"To use this connector, begin with data in one or more Flow collections.\nUse the below properties to configure a Google Sheets materialization."}),"\n",(0,i.jsx)(t.h3,{id:"properties",children:"Properties"}),"\n",(0,i.jsx)(t.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,i.jsxs)(t.p,{children:["The following properties reflect the manual authentication method. If you're working in the Flow web app, you can use ",(0,i.jsx)(t.a,{href:"#oauth-authentication-using-the-flow-web-app",children:"OAuth"}),", so some of these properties aren't required."]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Property"}),(0,i.jsx)(t.th,{children:"Title"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Required/Default"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/credentials"})})}),(0,i.jsx)(t.td,{children:"Authentication"}),(0,i.jsx)(t.td,{children:"Credentials used to authenticate with Google."}),(0,i.jsx)(t.td,{children:"array, boolean, null, number, object, string"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"/credentials/auth_type"})}),(0,i.jsx)(t.td,{children:"Authentication type"}),(0,i.jsxs)(t.td,{children:["Set to ",(0,i.jsx)(t.code,{children:"Service"})," for manual authentication, or use OAuth in the web app."]}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/credentials/credentials_json"})})}),(0,i.jsx)(t.td,{children:"Service Account JSON"}),(0,i.jsxs)(t.td,{children:["The JSON key of the service account to use for authorization, when using the ",(0,i.jsx)(t.code,{children:"Service"})," authentication method."]}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/spreadsheetURL"})})}),(0,i.jsx)(t.td,{children:"Spreadsheet URL"}),(0,i.jsx)(t.td,{children:"URL of the spreadsheet to materialize into, which is shared with the service account."}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"bindings",children:"Bindings"}),"\n",(0,i.jsx)(t.p,{children:"Configure a separate binding for each collection you want to materialize to a sheet.\nNote that the connector will add an addition column to the beginning of each sheet;\nthis is to track the internal state of the data."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Property"}),(0,i.jsx)(t.th,{children:"Title"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Required/Default"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"/sheet"})})}),(0,i.jsx)(t.td,{children:"Sheet Name"}),(0,i.jsx)(t.td,{children:"Name of the spreadsheet sheet to materialize into"}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:"Required"})]})})]}),"\n",(0,i.jsx)(t.h3,{id:"sample",children:"Sample"}),"\n",(0,i.jsxs)(t.p,{children:["This sample reflects the ",(0,i.jsx)(t.a,{href:"#manual-authentication",children:"manual authentication"})," method using the CLI."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"materializations:\n ${PREFIX}/${mat_name}:\n\t endpoint:\n connector:\n config:\n credentials:\n auth_type: Service\n credentials_json: <secret>\n spreadsheetURL: `https://docs.google.com/spreadsheets/d/<your_spreadsheet_ID>/edit\n image: ghcr.io/estuary/materialize-google-sheets:dev\n\t# If you have multiple collections you need to materialize, add a binding for each one\n # to ensure complete data flow-through\n bindings:\n - resource:\n sheet: my_sheet\n source: ${PREFIX}/${source_collection}\n"})})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>l});var i=n(96540);const o={},r=i.createContext(o);function s(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/fca4800a.1513ebb2.js b/pr-preview/pr-1594/assets/js/fca4800a.1513ebb2.js deleted file mode 100644 index e5c4411063..0000000000 --- a/pr-preview/pr-1594/assets/js/fca4800a.1513ebb2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6656],{84922:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>a});var t=i(74848),r=i(28453);const s={},d="Pinecone",c={id:"reference/Connectors/materialization-connectors/pinecone",title:"Pinecone",description:"This connector materializes Flow collections into namespaces in a Pinecone index.",source:"@site/docs/reference/Connectors/materialization-connectors/pinecone.md",sourceDirName:"reference/Connectors/materialization-connectors",slug:"/reference/Connectors/materialization-connectors/pinecone",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/Connectors/materialization-connectors/pinecone.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"MySQL HeatWave",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave"},next:{title:"PostgreSQL",permalink:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/"}},o={},a=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Embedding Input",id:"embedding-input",level:2},{value:"Pinecone Record Metadata",id:"pinecone-record-metadata",level:2},{value:"Properties",id:"properties",level:3},{value:"Endpoint",id:"endpoint",level:4},{value:"Bindings",id:"bindings",level:4},{value:"Sample",id:"sample",level:3},{value:"Delta Updates",id:"delta-updates",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"pinecone",children:"Pinecone"}),"\n",(0,t.jsx)(n.p,{children:"This connector materializes Flow collections into namespaces in a Pinecone index."}),"\n",(0,t.jsxs)(n.p,{children:["The connector uses the ",(0,t.jsx)(n.a,{href:"https://platform.openai.com/docs/guides/embeddings",children:"OpenAI Embedding API"})," to\ncreate vector embeddings based on the documents in your collections and inserts these vector\nembeddings and associated metadata into Pinecone for storage and retrieval."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://ghcr.io/estuary/materialize-pinecone:dev",children:(0,t.jsx)(n.code,{children:"ghcr.io/estuary/materialize-pinecone:dev"})}),"\nprovides the latest connector image. You can also follow the link in your browser to see past image\nversions."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"To use this connector, you'll need:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A ",(0,t.jsx)(n.a,{href:"https://www.pinecone.io/",children:"Pinecone"})," account with an ",(0,t.jsx)(n.a,{href:"https://docs.pinecone.io/docs/quickstart#2-get-and-verify-your-pinecone-api-key",children:"API\nKey"})," for\nauthentication."]}),"\n",(0,t.jsxs)(n.li,{children:["An ",(0,t.jsx)(n.a,{href:"https://openai.com/",children:"OpenAI"})," account with an ",(0,t.jsx)(n.a,{href:"https://platform.openai.com/docs/api-reference/authentication",children:"API\nKey"})," for authentication."]}),"\n",(0,t.jsxs)(n.li,{children:["A ",(0,t.jsx)(n.a,{href:"https://docs.pinecone.io/docs/indexes",children:"Pinecone Index"})," created to store materialized vector\nembeddings. When using the embedding model ",(0,t.jsx)(n.code,{children:"text-embedding-ada-002"})," (recommended), the index must\nhave ",(0,t.jsx)(n.code,{children:"Dimensions"})," set to 1536."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"embedding-input",children:"Embedding Input"}),"\n",(0,t.jsx)(n.p,{children:"The materialization creates a vector embedding for each collection document. Its structure is based\non the collection fields."}),"\n",(0,t.jsxs)(n.p,{children:["By default, fields of a single scalar type are including in the embedding: strings, integers,\nnumbers, and booleans. You can include additional array or object type fields using ",(0,t.jsx)(n.a,{href:"../../../../concepts/materialization/#projected-fields",children:"projected\nfields"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The text generated for the embedding has this structure, with field names and their values separated\nby newlines:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"stringField: stringValue\nintField: 3\nnumberField: 1.2\nboolField: false\n"})}),"\n",(0,t.jsx)(n.h2,{id:"pinecone-record-metadata",children:"Pinecone Record Metadata"}),"\n",(0,t.jsxs)(n.p,{children:["Pinecone supports metadata fields associated with stored vectors that can be used when performing\n",(0,t.jsx)(n.a,{href:"https://www.pinecone.io/learn/vector-search-filtering/",children:"vector queries"}),". This materialization will\ninclude the materialized document as a JSON string in the metadata field ",(0,t.jsx)(n.code,{children:"flow_document"})," to enable\nretrieval of the document from vectors returned by Pinecone queries."]}),"\n",(0,t.jsxs)(n.p,{children:["Pinecone indexes all metadata fields by default. To manage memory usage of the index, use ",(0,t.jsx)(n.a,{href:"https://docs.pinecone.io/docs/manage-indexes#selective-metadata-indexing",children:"selective\nmetadata indexing"})," to\nexclude the ",(0,t.jsx)(n.code,{children:"flow_document"})," metadata field."]}),"\n",(0,t.jsx)(n.h3,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.h4,{id:"endpoint",children:"Endpoint"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/index"})})}),(0,t.jsx)(n.td,{children:"Pinecone Index"}),(0,t.jsx)(n.td,{children:"Pinecone index for this materialization. Must already exist and have appropriate dimensions for the embedding model used."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/environment"})})}),(0,t.jsx)(n.td,{children:"Pinecone Environment"}),(0,t.jsx)(n.td,{children:"Cloud region for your Pinecone project. Example: us-central1-gcp"}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/pineconeApiKey"})})}),(0,t.jsx)(n.td,{children:"Pinecone API Key"}),(0,t.jsx)(n.td,{children:"Pinecone API key used for authentication."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/openAiApiKey"})})}),(0,t.jsx)(n.td,{children:"OpenAI API Key"}),(0,t.jsx)(n.td,{children:"OpenAI API key used for authentication."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/embeddingModel"})}),(0,t.jsx)(n.td,{children:"Embedding Model ID"}),(0,t.jsx)(n.td,{children:"Embedding model ID for generating OpenAI bindings. The default text-embedding-ada-002 is recommended."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'"text-embedding-ada-002"'})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advanced"})}),(0,t.jsx)(n.td,{}),(0,t.jsx)(n.td,{children:"Options for advanced users. You should not typically need to modify these."}),(0,t.jsx)(n.td,{children:"object"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"/advaned/openAiOrg"})}),(0,t.jsx)(n.td,{children:"OpenAI Organization"}),(0,t.jsx)(n.td,{children:"Optional organization name for OpenAI requests. Use this if you belong to multiple organizations to specify which organization is used for API requests."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"bindings",children:"Bindings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Property"}),(0,t.jsx)(n.th,{children:"Title"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required/Default"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/namespace"})})}),(0,t.jsx)(n.td,{children:"Pinecone Namespace"}),(0,t.jsx)(n.td,{children:"Name of the Pinecone namespace that this collection will materialize vectors into."}),(0,t.jsx)(n.td,{children:"string"}),(0,t.jsx)(n.td,{children:"Required"})]})})]}),"\n",(0,t.jsx)(n.h3,{id:"sample",children:"Sample"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'materializations:\n ${PREFIX}/${mat_name}:\n endpoint:\n connector:\n image: "ghcr.io/estuary/materialize-pinecone:dev"\n config:\n index: your-index\n environment: us-central1-gcp\n pineconeApiKey: <YOUR_PINECONE_API_KEY>\n openAiApiKey: <YOUR_OPENAI_API_KEY>\n bindings:\n - resource:\n namespace: your-namespace\n source: ${PREFIX}/${COLLECTION_NAME}\n'})}),"\n",(0,t.jsx)(n.h2,{id:"delta-updates",children:"Delta Updates"}),"\n",(0,t.jsxs)(n.p,{children:["This connector operates only in ",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/concepts/materialization#delta-updates",children:"delta updates"})," mode."]}),"\n",(0,t.jsxs)(n.p,{children:["Pinecone ",(0,t.jsx)(n.a,{href:"https://docs.pinecone.io/reference/upsert",children:"upserts"})," vectors based on their ",(0,t.jsx)(n.code,{children:"id"}),". The ",(0,t.jsx)(n.code,{children:"id"}),"\nfor materialized vectors is based on the Flow Collection key."]}),"\n",(0,t.jsxs)(n.p,{children:["For collections with a a top-level reduction strategy of\n",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/merge",children:"merge"})," and a strategy of\n",(0,t.jsx)(n.a,{href:"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins",children:"lastWriteWins"}),' for all nested\nvalues (this is also the default), collections will be materialized "effectively once", with any\nupdated Flow documents replacing vectors in the Pinecone index if they have the same key.']})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>d,x:()=>c});var t=i(96540);const r={},s=t.createContext(r);function d(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/fe12321f.dca86e54.js b/pr-preview/pr-1594/assets/js/fe12321f.dca86e54.js deleted file mode 100644 index 924cf98f79..0000000000 --- a/pr-preview/pr-1594/assets/js/fe12321f.dca86e54.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8207],{23552:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>m,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>o});var t=i(74848),r=i(28453);const a={description:"Using the minimize and maximize reduction strategies",sidebar_position:4},m="minimize and maximize",s={id:"reference/reduction-strategies/minimize-and-maximize",title:"minimize and maximize",description:"Using the minimize and maximize reduction strategies",source:"@site/docs/reference/reduction-strategies/minimize-and-maximize.md",sourceDirName:"reference/reduction-strategies",slug:"/reference/reduction-strategies/minimize-and-maximize",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize",draft:!1,unlisted:!1,editUrl:"https://github.com/estuary/flow/edit/master/site/docs/reference/reduction-strategies/minimize-and-maximize.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{description:"Using the minimize and maximize reduction strategies",sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"merge",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/merge"},next:{title:"set",permalink:"/pr-preview/pr-1594/reference/reduction-strategies/set"}},c={},o=[];function d(e){const n={code:"code",h1:"h1",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"minimize-and-maximize",children:"minimize and maximize"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"minimize"})," and ",(0,t.jsx)(n.code,{children:"maximize"})," reduce by taking the smallest or largest seen value, respectively."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'collections:\n - name: example/reductions/min-max\n schema:\n type: object\n reduce: { strategy: merge }\n properties:\n key: { type: string }\n min: { reduce: { strategy: minimize } }\n max: { reduce: { strategy: maximize } }\n required: [key]\n key: [/key]\n\ntests:\n "Expect we can min/max values":\n - ingest:\n collection: example/reductions/min-max\n documents:\n - { key: "key", min: 32, max: "abc" }\n - { key: "key", min: 42, max: "def" }\n - verify:\n collection: example/reductions/min-max\n documents:\n - { key: "key", min: 32, max: "def" }\n'})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"minimize"})," and ",(0,t.jsx)(n.code,{children:"maximize"})," can also take a ",(0,t.jsx)(n.code,{children:"key"}),", which is one or more JSON pointers that are relative to the reduced location. Keys make it possible to minimize and maximize over complex types by ordering over an extracted composite key."]}),"\n",(0,t.jsx)(n.p,{children:"In the event that a right-hand side document key equals the current left-hand side minimum or maximum, the documents are deeply merged. This can be used to, for example, track not just the minimum value but also the number of times it\u2019s been seen:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'collections:\n - name: example/reductions/min-max-key\n schema:\n type: object\n reduce: { strategy: merge }\n properties:\n key: { type: string }\n min:\n $anchor: min-max-value\n type: array\n items:\n - type: string\n - type: number\n reduce: { strategy: sum }\n reduce:\n strategy: minimize\n key: [/0]\n max:\n $ref: "#min-max-value"\n reduce:\n strategy: maximize\n key: [/0]\n required: [key]\n key: [/key]\n\ntests:\n "Expect we can min/max values using a key extractor":\n - ingest:\n collection: example/reductions/min-max-key\n documents:\n - { key: "key", min: ["a", 1], max: ["a", 1] }\n - { key: "key", min: ["c", 2], max: ["c", 2] }\n - { key: "key", min: ["b", 3], max: ["b", 3] }\n - { key: "key", min: ["a", 4], max: ["a", 4] }\n - verify:\n collection: example/reductions/min-max-key\n documents:\n # Min of equal keys ["a", 1] and ["a", 4] => ["a", 5].\n - { key: "key", min: ["a", 5], max: ["c", 2] }\n'})})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>m,x:()=>s});var t=i(96540);const r={},a=t.createContext(r);function m(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:m(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/main.8532303a.js b/pr-preview/pr-1594/assets/js/main.8532303a.js deleted file mode 100644 index fce8a2c1c5..0000000000 --- a/pr-preview/pr-1594/assets/js/main.8532303a.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.8532303a.js.LICENSE.txt */ -(self.webpackChunksite=self.webpackChunksite||[]).push([[8792],{35947:(e,t,r)=>{"use strict";r.d(t,{A:()=>d});r(96540);var n=r(53259),o=r.n(n),a=r(84054);const i={"014c8d62":[()=>r.e(3161).then(r.bind(r,26860)),"@site/docs/reference/Connectors/materialization-connectors/Elasticsearch.md",26860],"01f1a992":[()=>r.e(6802).then(r.bind(r,36297)),"@site/docs/reference/Connectors/capture-connectors/harvest.md",36297],"02365777":[()=>Promise.all([r.e(9610),r.e(6792)]).then(r.bind(r,28953)),"@site/docs/concepts/README.md",28953],"02ad5b1c":[()=>r.e(5031).then(r.bind(r,78032)),"@site/docs/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres.md",78032],"0359e208":[()=>r.e(1419).then(r.bind(r,53181)),"@site/docs/reference/Connectors/materialization-connectors/databricks.md",53181],"04c11cf4":[()=>r.e(6221).then(r.bind(r,16764)),"@site/docs/concepts/advanced/projections.md",16764],"061adc4c":[()=>r.e(5039).then(r.bind(r,10150)),"@site/docs/reference/Connectors/capture-connectors/mailchimp.md",10150],"07003cee":[()=>Promise.all([r.e(1869),r.e(1036)]).then(r.bind(r,2157)),"@site/docs/reference/Connectors/capture-connectors/amazon-s3.md",2157],"08b3569b":[()=>r.e(7746).then(r.bind(r,60961)),"@site/docs/reference/Connectors/dekaf/dekaf-tinybird.md",60961],"08c8edc4":[()=>r.e(9856).then(r.bind(r,9738)),"@site/docs/reference/Connectors/capture-connectors/intercom-ingest.md",9738],"08cd1031":[()=>r.e(3073).then(r.bind(r,32627)),"@site/docs/reference/Connectors/capture-connectors/apache-kafka.md",32627],"08e5c7dc":[()=>r.e(8164).then(r.bind(r,67151)),"@site/docs/reference/Connectors/capture-connectors/confluence.md",67151],"0ad621fa":[()=>r.e(7308).then(r.bind(r,37934)),"@site/docs/reference/Connectors/materialization-connectors/PostgreSQL/PostgreSQL.md",37934],"0bcbca69":[()=>r.e(7993).then(r.bind(r,85866)),"@site/docs/reference/Connectors/capture-connectors/pendo.md",85866],"0c8d310c":[()=>Promise.all([r.e(1869),r.e(9610),r.e(5795)]).then(r.bind(r,175)),"@site/docs/getting-started/tutorials/derivations_acmebank.md",175],"0d3223a3":[()=>r.e(6917).then(r.bind(r,55048)),"@site/docs/reference/Connectors/capture-connectors/survey-monkey.md",55048],"0d762a34":[()=>r.e(658).then(r.bind(r,14639)),"@site/docs/overview/README.md",14639],"0ea4d505":[()=>r.e(6341).then(r.bind(r,96243)),"@site/docs/guides/flowctl/README.md",96243],"0fda5f57":[()=>Promise.all([r.e(9610),r.e(929)]).then(r.bind(r,36814)),"@site/docs/concepts/import.md",36814],"104ea86a":[()=>r.e(6313).then(r.bind(r,32076)),"@site/docs/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time.md",32076],"116b31b8":[()=>r.e(7843).then(r.bind(r,65520)),"@site/docs/reference/Connectors/capture-connectors/paypal-transaction.md",65520],"12ca7dc6":[()=>r.e(3516).then(r.bind(r,53387)),"@site/docs/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres.md",53387],"1434155d":[()=>r.e(7196).then(r.bind(r,1826)),"@site/docs/reference/Connectors/materialization-connectors/alloydb.md",1826],"161e6f0a":[()=>r.e(3765).then(r.bind(r,15331)),"@site/docs/reference/Connectors/materialization-connectors/SQLite.md",15331],"1714037f":[()=>r.e(4480).then(r.bind(r,60189)),"@site/docs/guides/system-specific-dataflows/s3-to-snowflake.md",60189],17896441:[()=>Promise.all([r.e(1869),r.e(9610),r.e(3658),r.e(8401)]).then(r.bind(r,36365)),"@theme/DocItem",36365],"1875cf18":[()=>r.e(2216).then(r.bind(r,88235)),"@site/docs/reference/Connectors/capture-connectors/datadog-ingest.md",88235],"189edb0d":[()=>r.e(5352).then(r.bind(r,1891)),"@site/docs/guides/flowctl/create-derivation.md",1891],"1bc1529f":[()=>r.e(4134).then(r.bind(r,70041)),"@site/docs/reference/reduction-strategies/set.md",70041],"1ca4a2d7":[()=>r.e(722).then(r.bind(r,96719)),"@site/docs/reference/Connectors/capture-connectors/facebook-marketing.md",96719],"1cde271f":[()=>r.e(9938).then(r.bind(r,75237)),"@site/docs/reference/Connectors/materialization-connectors/amazon-redshift.md",75237],"1d129a7b":[()=>r.e(3380).then(r.bind(r,1276)),"@site/docs/concepts/storage-mappings.md",1276],"1f391b9e":[()=>Promise.all([r.e(1869),r.e(9610),r.e(3658),r.e(6061)]).then(r.bind(r,67973)),"@theme/MDXPage",67973],"22ed3411":[()=>r.e(903).then(r.bind(r,93766)),"@site/docs/reference/Connectors/capture-connectors/dropbox.md",93766],"25491a6a":[()=>r.e(228).then(r.bind(r,78749)),"@site/docs/reference/Connectors/materialization-connectors/starburst.md",78749],"25a17fcd":[()=>r.e(368).then(r.bind(r,76787)),"@site/docs/reference/Connectors/materialization-connectors/slack.md",76787],"28a8491c":[()=>Promise.all([r.e(9610),r.e(3239)]).then(r.bind(r,76374)),"@site/docs/getting-started/tutorials/dataflow-s3-snowflake.md",76374],"2e3ffc99":[()=>r.e(8036).then(r.bind(r,44392)),"@site/docs/guides/schema-evolution.md",44392],"2e426791":[()=>r.e(9481).then(r.bind(r,94135)),"@site/docs/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver.md",94135],"2fea2d40":[()=>r.e(5727).then(r.bind(r,67364)),"@site/docs/reference/Connectors/materialization-connectors/timescaledb.md",67364],"31570a90":[()=>Promise.all([r.e(9610),r.e(1181)]).then(r.bind(r,64939)),"@site/docs/concepts/web-app.md",64939],"375ba1d8":[()=>r.e(6386).then(r.bind(r,46101)),"@site/docs/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data.md",46101],"37788a03":[()=>r.e(1874).then(r.bind(r,53759)),"@site/docs/reference/Connectors/capture-connectors/Salesforce/salesforce.md",53759],"38a516ae":[()=>Promise.all([r.e(1869),r.e(383)]).then(r.bind(r,60634)),"@site/docs/concepts/collections.md",60634],"38fdfb5b":[()=>r.e(9729).then(r.bind(r,65949)),"@site/docs/guides/dekaf_reading_collections_from_kafka.md",65949],"397210d6":[()=>Promise.all([r.e(4132),r.e(9065)]).then(r.bind(r,89333)),"@site/docs/getting-started/tutorials/real-time-cdc-with-mongodb.md",89333],"3bada45e":[()=>r.e(4226).then(r.bind(r,67707)),"@site/docs/reference/Connectors/capture-connectors/MariaDB/MariaDB.md",67707],"3c6e6542":[()=>r.e(9779).then(r.bind(r,84065)),"@site/docs/reference/Connectors/capture-connectors/OracleDB/OracleDB.md",84065],"3c6ed59c":[()=>r.e(4787).then(r.bind(r,30146)),"@site/docs/guides/customize-materialization-fields.md",30146],"3c711bdb":[()=>r.e(5934).then(r.bind(r,39260)),"@site/docs/guides/edit-data-flows.md",39260],"405f2d9a":[()=>r.e(4882).then(r.bind(r,8749)),"@site/docs/reference/reduction-strategies/merge.md",8749],"41d993a6":[()=>r.e(4018).then(r.bind(r,26037)),"@site/docs/reference/Connectors/capture-connectors/bigquery-batch.md",26037],"42e3560a":[()=>r.e(1021).then(r.bind(r,95464)),"@site/docs/reference/Connectors/materialization-connectors/Rockset.md",95464],"432d7d66":[()=>r.e(6519).then(r.bind(r,19789)),"@site/docs/reference/Connectors/capture-connectors/linkedin-pages.md",19789],"4434a8b7":[()=>r.e(7972).then(r.bind(r,51791)),"@site/docs/reference/Connectors/materialization-connectors/http-webhook.md",51791],"44386d1b":[()=>r.e(7749).then(r.bind(r,86959)),"@site/docs/reference/Connectors/capture-connectors/gcs.md",86959],"44b1e2f5":[()=>r.e(4578).then(r.bind(r,4858)),"@site/docs/reference/Connectors/capture-connectors/twilio.md",4858],"45462f11":[()=>r.e(3214).then(r.bind(r,34152)),"@site/docs/reference/Connectors/capture-connectors/slack.md",34152],"4648c831":[()=>r.e(6040).then(r.bind(r,90170)),"@site/docs/reference/Connectors/capture-connectors/amazon-sqs.md",90170],"46cf1090":[()=>r.e(5970).then(r.bind(r,64126)),"@site/docs/reference/Connectors/capture-connectors/mongodb.md",64126],"477598dd":[()=>r.e(6079).then(r.bind(r,73027)),"@site/docs/reference/Connectors/capture-connectors/gladly.md",73027],"482d6521":[()=>r.e(2505).then(r.bind(r,5459)),"@site/docs/reference/Connectors/materialization-connectors/amazon-s3-csv.md",5459],"487bf429":[()=>r.e(4865).then(r.bind(r,55795)),"@site/docs/reference/time-travel.md",55795],"49e00cf0":[()=>r.e(8264).then(r.bind(r,58521)),"@site/docs/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql.md",58521],"4a1a3e03":[()=>Promise.all([r.e(9610),r.e(6803)]).then(r.bind(r,62440)),"@site/docs/guides/flowctl/edit-specification-locally.md",62440],"4acaa9c4":[()=>Promise.all([r.e(1869),r.e(4333)]).then(r.bind(r,29967)),"@site/docs/concepts/schemas.md",29967],"4bccbb93":[()=>r.e(7083).then(r.bind(r,79890)),"@site/docs/getting-started/tutorials/README.md",79890],"4d317276":[()=>Promise.all([r.e(9610),r.e(4147)]).then(r.bind(r,80822)),"@site/docs/concepts/advanced/evolutions.md",80822],"4d4f51e2":[()=>r.e(8362).then(r.bind(r,46794)),"@site/docs/reference/Connectors/materialization-connectors/google-pubsub.md",46794],"4da0167e":[()=>r.e(5225).then(r.bind(r,84657)),"@site/docs/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql.md",84657],"4dbcc71c":[()=>r.e(3060).then(r.bind(r,24778)),"@site/docs/reference/Connectors/capture-connectors/MySQL/mysql-batch.md",24778],"4e1df6a3":[()=>Promise.all([r.e(9610),r.e(8113)]).then(r.bind(r,36686)),"@site/docs/concepts/flowctl.md",36686],"4f08651a":[()=>r.e(2912).then(r.bind(r,57543)),"@site/docs/reference/Connectors/capture-connectors/recharge.md",57543],"4f1ddcc5":[()=>r.e(2677).then(r.bind(r,2543)),"@site/docs/reference/Connectors/materialization-connectors/google-gcs-parquet.md",2543],"540a1167":[()=>r.e(866).then(r.bind(r,52481)),"@site/docs/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres.md",52481],"547dc70b":[()=>r.e(337).then(r.bind(r,27615)),"@site/docs/reference/reduction-strategies/README.md",27615],"54a88ed7":[()=>r.e(6113).then(r.bind(r,54561)),"@site/docs/reference/Connectors/capture-connectors/amazon-ads.md",54561],"5769edfb":[()=>r.e(3663).then(r.bind(r,94848)),"@site/docs/reference/Connectors/capture-connectors/woocommerce.md",94848],"57aea1fc":[()=>r.e(6914).then(r.bind(r,46760)),"@site/docs/reference/Connectors/materialization-connectors/amazon-dynamodb.md",46760],"58d4a820":[()=>r.e(7713).then(r.bind(r,64636)),"@site/docs/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql.md",64636],"5b71c68f":[()=>r.e(1815).then(r.bind(r,6357)),"@site/docs/reference/Connectors/capture-connectors/sentry.md",6357],"5ba559d4":[()=>Promise.all([r.e(1869),r.e(1158)]).then(r.bind(r,66722)),"@site/src/pages/example.tsx",66722],"5bb0dc82":[()=>r.e(745).then(r.bind(r,21728)),"@site/docs/reference/working-logs-stats.md",21728],"5c7e141f":[()=>r.e(7229).then(r.bind(r,63177)),"@site/docs/reference/Connectors/materialization-connectors/mongodb.md",63177],"5d9eac72":[()=>Promise.all([r.e(9610),r.e(925)]).then(r.bind(r,16540)),"@site/docs/reference/Connectors/materialization-protocol.md",16540],"5e95c892":[()=>r.e(9647).then(r.bind(r,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(r.bind(r,4784)),"@generated/docusaurus.config",4784],61038276:[()=>r.e(354).then(r.bind(r,65918)),"@site/docs/reference/Connectors/capture-connectors/pinterest.md",65918],"6181342c":[()=>r.e(7745).then(r.bind(r,12727)),"@site/docs/reference/Connectors/capture-connectors/greenhouse.md",12727],"63b37bf5":[()=>r.e(515).then(r.bind(r,81760)),"@site/docs/reference/Connectors/capture-connectors/alpaca.md",81760],"6459b84b":[()=>r.e(6459).then(r.bind(r,24519)),"@site/docs/getting-started/installation.mdx",24519],"645c44d3":[()=>r.e(1586).then(r.bind(r,33988)),"@site/docs/reference/Connectors/capture-connectors/README.md",33988],"65a8f618":[()=>r.e(2172).then(r.bind(r,54624)),"@site/docs/reference/Connectors/capture-connectors/chargebee.md",54624],"68a929a9":[()=>r.e(7438).then(r.bind(r,25324)),"@site/docs/reference/Connectors/dekaf/README.md",25324],"68cc1c24":[()=>r.e(3349).then(r.bind(r,91733)),"@site/docs/reference/Connectors/materialization-connectors/BigQuery.md",91733],"6b49cdad":[()=>r.e(6744).then(r.bind(r,8763)),"@site/docs/reference/Connectors/capture-connectors/klaviyo.md",8763],"6bdc832c":[()=>r.e(4742).then(r.bind(r,92704)),"@site/docs/reference/Connectors/capture-connectors/netsuite-suitetalk.md",92704],"6d42ac36":[()=>r.e(3640).then(r.bind(r,99521)),"@site/docs/reference/Connectors/capture-connectors/github.md",99521],"6e2958ef":[()=>r.e(5109).then(r.bind(r,77175)),"@site/docs/reference/Connectors/materialization-connectors/google-gcs-csv.md",77175],"6e773b1a":[()=>r.e(5719).then(r.bind(r,25139)),"@site/docs/reference/Connectors/capture-connectors/sftp.md",25139],"6f6bf398":[()=>r.e(9017).then(r.bind(r,77163)),"@site/docs/reference/authentication.md",77163],"76bcc235":[()=>r.e(2902).then(r.bind(r,97297)),"@site/docs/reference/Connectors/capture-connectors/freshdesk.md",97297],"770e6532":[()=>r.e(3756).then(r.bind(r,32652)),"@site/docs/reference/Connectors/capture-connectors/snowflake.md",32652],"7718f40c":[()=>r.e(9595).then(r.bind(r,7106)),"@site/docs/reference/Connectors/materialization-connectors/amazon-s3-iceberg.md",7106],"7c555ba4":[()=>r.e(2333).then(r.bind(r,97663)),"@site/docs/reference/Connectors/capture-connectors/stripe.md",97663],"7cda2da6":[()=>r.e(9515).then(r.bind(r,51186)),"@site/docs/reference/reduction-strategies/sum.md",51186],"7cfb1d0c":[()=>r.e(4753).then(r.bind(r,49908)),"@site/docs/reference/Connectors/capture-connectors/google-drive.md",49908],"7fd3d7a0":[()=>r.e(2135).then(r.bind(r,19092)),"@site/docs/reference/Connectors/capture-connectors/sendgrid.md",19092],"8114665f":[()=>r.e(8152).then(r.bind(r,32854)),"@site/docs/getting-started/tutorials/postgresql_cdc_to_snowflake.md",32854],"8431750a":[()=>r.e(50).then(r.bind(r,53697)),"@site/docs/reference/Connectors/capture-connectors/google-analytics-4.md",53697],"845ce2f5":[()=>r.e(9917).then(r.bind(r,60555)),"@site/docs/reference/Connectors/capture-connectors/SQLServer/sqlserver.md",60555],"858820da":[()=>r.e(3353).then(r.bind(r,1465)),"@site/docs/reference/Connectors/capture-connectors/gitlab.md",1465],"88fa6390":[()=>r.e(3406).then(r.bind(r,68267)),"@site/docs/reference/Connectors/materialization-connectors/Snowflake.md",68267],"8a611437":[()=>r.e(5828).then(r.bind(r,70056)),"@site/docs/reference/Connectors/capture-connectors/snapchat.md",70056],"8dce94c3":[()=>r.e(3798).then(r.bind(r,93316)),"@site/docs/concepts/advanced/journals.md",93316],"8e876c80":[()=>r.e(3624).then(r.bind(r,16188)),"@site/docs/concepts/captures.md",16188],"905c32de":[()=>r.e(9090).then(r.bind(r,56317)),"@site/docs/reference/Connectors/capture-connectors/alloydb.md",56317],"906e1e9f":[()=>r.e(2340).then(r.bind(r,50828)),"@site/docs/reference/Connectors/capture-connectors/iterable.md",50828],"921f956e":[()=>r.e(9922).then(r.bind(r,84335)),"@site/docs/reference/Connectors/capture-connectors/hubspot.md",84335],"952b3fdc":[()=>r.e(4886).then(r.bind(r,88582)),"@site/docs/reference/Connectors/capture-connectors/jira.md",88582],"964d596a":[()=>r.e(6523).then(r.bind(r,69662)),"@site/docs/reference/Connectors/capture-connectors/zendesk-support.md",69662],"971e8ccd":[()=>r.e(3655).then(r.bind(r,6871)),"@site/docs/reference/Connectors/capture-connectors/jira-ingest.md",6871],"977d5535":[()=>r.e(3876).then(r.bind(r,87708)),"@site/docs/reference/Connectors/materialization-connectors/MySQL/mysql.md",87708],"986b9943":[()=>r.e(185).then(r.bind(r,51008)),"@site/docs/reference/Connectors/capture-connectors/tiktok.md",51008],"9b515b04":[()=>r.e(3101).then(r.t.bind(r,78551,19)),"@generated/docusaurus-plugin-content-docs/default/p/pr-preview-pr-1594-588.json",78551],"9d18d13c":[()=>r.e(7544).then(r.bind(r,35168)),"@site/docs/reference/Connectors/materialization-connectors/Firebolt.md",35168],"9d57d0a6":[()=>r.e(233).then(r.bind(r,43079)),"@site/docs/reference/Connectors/capture-connectors/notion.md",43079],"9e25251f":[()=>r.e(44).then(r.bind(r,59124)),"@site/docs/guides/howto_join_two_collections_typescript.md",59124],"9e64d05b":[()=>Promise.all([r.e(9610),r.e(5306)]).then(r.bind(r,11712)),"@site/docs/guides/flowctl/edit-draft-from-webapp.md",11712],"9e8f5f1c":[()=>r.e(6730).then(r.bind(r,93057)),"@site/docs/reference/reduction-strategies/append.md",93057],"9fc067fe":[()=>r.e(7057).then(r.bind(r,9585)),"@site/docs/reference/Connectors/capture-connectors/amazon-kinesis.md",9585],"9fce37be":[()=>r.e(1771).then(r.bind(r,42677)),"@site/docs/reference/Connectors/capture-connectors/PostgreSQL/Supabase.md",42677],a06d9ffe:[()=>r.e(3344).then(r.bind(r,7867)),"@site/docs/reference/Connectors/materialization-connectors/amazon-s3-parquet.md",7867],a0e6a329:[()=>r.e(5266).then(r.bind(r,52251)),"@site/docs/reference/Connectors/capture-connectors/azure-blob-storage.md",52251],a24b80f3:[()=>r.e(9225).then(r.bind(r,85899)),"@site/docs/reference/notifications.md",85899],a3c49fd9:[()=>r.e(4754).then(r.bind(r,4520)),"@site/docs/guides/create-dataflow.md",4520],a42036e6:[()=>r.e(7376).then(r.bind(r,32013)),"@site/docs/reference/Connectors/capture-connectors/http-file.md",32013],a7456010:[()=>r.e(1235).then(r.t.bind(r,88552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",88552],a7bd4aaa:[()=>r.e(7098).then(r.bind(r,52151)),"@theme/DocVersionRoot",52151],a9379b01:[()=>r.e(1851).then(r.bind(r,15988)),"@site/docs/reference/Configuring-task-shards.md",15988],a94703ab:[()=>Promise.all([r.e(1869),r.e(9048)]).then(r.bind(r,92559)),"@theme/DocRoot",92559],a995ee96:[()=>r.e(5924).then(r.bind(r,54937)),"@site/docs/reference/Connectors/materialization-connectors/mysql-heatwave.md",54937],aba21aa0:[()=>r.e(5742).then(r.t.bind(r,27093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",27093],abc1ea5e:[()=>r.e(1482).then(r.bind(r,91176)),"@site/docs/reference/Connectors/capture-connectors/instagram.md",91176],ac961e5b:[()=>r.e(4109).then(r.bind(r,60502)),"@site/docs/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver.md",60502],b05d4510:[()=>r.e(8112).then(r.bind(r,44195)),"@site/docs/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver.md",44195],b0d5790a:[()=>r.e(9777).then(r.bind(r,58378)),"@site/docs/reference/Connectors/capture-connectors/braze.md",58378],b0d7f3f2:[()=>r.e(3355).then(r.bind(r,35035)),"@site/docs/reference/Connectors/capture-connectors/zendesk-chat.md",35035],b1a65bd3:[()=>r.e(1751).then(r.bind(r,89200)),"@site/docs/reference/Connectors/capture-connectors/youtube-analytics.md",89200],b32e8f59:[()=>r.e(8117).then(r.bind(r,31308)),"@site/docs/guides/system-specific-dataflows/README.md",31308],b5dab0d4:[()=>r.e(6839).then(r.bind(r,82892)),"@site/docs/reference/Connectors/capture-connectors/google-analytics.md",82892],b74f0b56:[()=>r.e(5623).then(r.bind(r,26666)),"@site/docs/reference/organizing-catalogs.md",26666],b7a68670:[()=>r.e(7496).then(r.bind(r,73502)),"@site/docs/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver.md",73502],be02d3e2:[()=>r.e(7132).then(r.bind(r,61467)),"@site/docs/reference/Connectors/capture-connectors/http-ingest.md",61467],bf636eff:[()=>r.e(2369).then(r.bind(r,67752)),"@site/docs/concepts/materialization.md",67752],bfc09eea:[()=>r.e(18).then(r.bind(r,80024)),"@site/docs/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres.md",80024],bfec4f44:[()=>r.e(4509).then(r.bind(r,58321)),"@site/docs/concepts/advanced/shards.md",58321],c042bbf4:[()=>r.e(2750).then(r.bind(r,23210)),"@site/docs/guides/connect-network.md",23210],c10f38bc:[()=>r.e(9057).then(r.bind(r,84901)),"@site/docs/reference/Connectors/capture-connectors/amplitude.md",84901],c11c77a9:[()=>r.e(8667).then(r.bind(r,98058)),"@site/docs/concepts/tests.md",98058],c13ec0a6:[()=>r.e(503).then(r.bind(r,13693)),"@site/docs/reference/Connectors/materialization-connectors/README.md",13693],c1e7e5a7:[()=>r.e(9881).then(r.bind(r,52323)),"@site/docs/overview/comparisons.md",52323],c287b26d:[()=>r.e(6797).then(r.bind(r,63024)),"@site/docs/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql.md",63024],c521cd6b:[()=>r.e(1757).then(r.bind(r,4201)),"@site/docs/concepts/advanced/logs-stats.md",4201],c5a10934:[()=>r.e(6361).then(r.bind(r,54460)),"@site/docs/reference/Connectors/capture-connectors/hubspot-real-time.md",54460],c66ae53f:[()=>r.e(6218).then(r.bind(r,27168)),"@site/src/pages/example-markdown.md",27168],ca7ab025:[()=>Promise.all([r.e(1869),r.e(9726)]).then(r.bind(r,40159)),"@site/docs/concepts/connectors.md",40159],cad0251b:[()=>r.e(1033).then(r.bind(r,64129)),"@site/docs/reference/reduction-strategies/composing-with-conditionals.md",64129],caea5a36:[()=>r.e(3740).then(r.bind(r,51857)),"@site/docs/guides/flowctl/troubleshoot-task.md",51857],cc0c6179:[()=>r.e(7445).then(r.bind(r,22675)),"@site/docs/reference/allow-ip-addresses.md",22675],cce87b67:[()=>r.e(5248).then(r.bind(r,63711)),"@site/docs/reference/editing.md",63711],ce5ba636:[()=>r.e(8904).then(r.bind(r,98913)),"@site/docs/reference/Connectors/capture-connectors/intercom.md",98913],cf864737:[()=>Promise.all([r.e(9610),r.e(4663)]).then(r.bind(r,74547)),"@site/docs/concepts/catalogs.md",74547],cfe90ca7:[()=>r.e(4169).then(r.bind(r,70470)),"@site/docs/reference/Connectors/capture-connectors/google-sheets.md",70470],d14d20ef:[()=>r.e(2061).then(r.bind(r,77575)),"@site/docs/reference/Connectors/capture-connectors/MySQL/MySQL.md",77575],d273ee52:[()=>r.e(9156).then(r.bind(r,70458)),"@site/docs/reference/Connectors/capture-connectors/google-search-console.md",70458],d6385b0d:[()=>Promise.all([r.e(1869),r.e(3109)]).then(r.bind(r,82749)),"@site/docs/getting-started/tutorials/continuous-materialized-view.md",82749],d7fdcae3:[()=>r.e(1462).then(r.bind(r,83214)),"@site/docs/reference/materialization-sync-schedule.md",83214],d8b2c51c:[()=>r.e(6995).then(r.bind(r,66544)),"@site/docs/reference/Connectors/README.md",66544],d8b5b6da:[()=>r.e(993).then(r.bind(r,24774)),"@site/docs/reference/Connectors/capture-connectors/amazon-redshift.md",24774],da6eb168:[()=>r.e(132).then(r.bind(r,11488)),"@site/docs/reference/Connectors/capture-connectors/netsuite-suiteanalytics.md",11488],db0f1c3a:[()=>r.e(2571).then(r.bind(r,99263)),"@site/docs/reference/Connectors/capture-connectors/bing-ads.md",99263],db2b4d90:[()=>r.e(6846).then(r.bind(r,3536)),"@site/docs/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb.md",3536],dbd1cd20:[()=>r.e(8707).then(r.bind(r,41213)),"@site/docs/reference/Connectors/capture-connectors/PostgreSQL/PostgreSQL.md",41213],de285be4:[()=>r.e(698).then(r.bind(r,59109)),"@site/docs/guides/README.md",59109],de7a358c:[()=>r.e(9789).then(r.bind(r,66994)),"@site/docs/reference/reduction-strategies/firstwritewins-and-lastwritewins.md",66994],deef465e:[()=>r.e(9023).then(r.bind(r,91206)),"@site/docs/reference/Connectors/capture-connectors/google-ads.md",91206],e1d33ea7:[()=>r.e(1150).then(r.bind(r,48231)),"@site/docs/reference/Connectors/capture-connectors/amazon-dynamodb.md",48231],e3318347:[()=>r.e(5423).then(r.bind(r,19645)),"@site/docs/reference/Connectors/materialization-connectors/motherduck.md",19645],e33c9cd6:[()=>r.e(8419).then(r.bind(r,81969)),"@site/docs/reference/Connectors/capture-connectors/google-pubsub.md",81969],e459d51d:[()=>r.e(4876).then(r.bind(r,82345)),"@site/docs/reference/Connectors/capture-connectors/google-firestore.md",82345],e5e05fea:[()=>r.e(1557).then(r.bind(r,55621)),"@site/docs/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch.md",55621],e6e0301f:[()=>r.e(3097).then(r.bind(r,32357)),"@site/docs/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres.md",32357],e76aecec:[()=>Promise.all([r.e(9610),r.e(4920)]).then(r.bind(r,87709)),"@site/docs/concepts/derivations.md",87709],e8453306:[()=>r.e(3973).then(r.bind(r,76466)),"@site/docs/reference/Connectors/capture-connectors/mixpanel.md",76466],e858514f:[()=>r.e(1859).then(r.bind(r,34533)),"@site/docs/guides/system-specific-dataflows/firestore-to-dwh.md",34533],e8851b38:[()=>r.e(7233).then(r.bind(r,70112)),"@site/docs/reference/Connectors/materialization-connectors/SQLServer/sqlserver.md",70112],ea7b1b11:[()=>r.e(5857).then(r.bind(r,17483)),"@site/docs/reference/Connectors/capture-connectors/linkedin-ads.md",17483],eae8ea84:[()=>r.e(2444).then(r.bind(r,24065)),"@site/docs/reference/Connectors/capture-connectors/marketo.md",24065],ebce6379:[()=>r.e(9187).then(r.bind(r,17837)),"@site/docs/reference/Connectors/capture-connectors/exchange-rates.md",17837],ecf790cf:[()=>r.e(1346).then(r.bind(r,27296)),"@site/docs/guides/derivation_tutorial_sql.md",27296],eec1121c:[()=>r.e(2472).then(r.bind(r,10604)),"@site/docs/reference/Connectors/capture-connectors/OracleDB/flashback.md",10604],f09a1148:[()=>r.e(9193).then(r.bind(r,12726)),"@site/docs/reference/Connectors/capture-connectors/airtable.md",12726],f47a7ed3:[()=>r.e(4430).then(r.bind(r,28216)),"@site/docs/overview/who-should-use-flow.md",28216],f59a0ebe:[()=>r.e(5364).then(r.bind(r,19764)),"@site/docs/reference/Connectors/capture-connectors/aircall.md",19764],f5f0d846:[()=>r.e(7272).then(r.bind(r,14511)),"@site/docs/guides/transform_data_using_typescript.md",14511],f65e0d6c:[()=>r.e(1980).then(r.bind(r,56196)),"@site/docs/reference/Connectors/capture-connectors/braintree.md",56196],fc44458b:[()=>r.e(6097).then(r.bind(r,81201)),"@site/docs/reference/Connectors/materialization-connectors/Google-sheets.md",81201],fca4800a:[()=>r.e(6656).then(r.bind(r,84922)),"@site/docs/reference/Connectors/materialization-connectors/pinecone.md",84922],fe12321f:[()=>r.e(8207).then(r.bind(r,23552)),"@site/docs/reference/reduction-strategies/minimize-and-maximize.md",23552]};var c=r(74848);function s(e){let{error:t,retry:r,pastDelay:n}=e;return t?(0,c.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,c.jsx)("p",{children:String(t)}),(0,c.jsx)("div",{children:(0,c.jsx)("button",{type:"button",onClick:r,children:"Retry"})})]}):n?(0,c.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,c.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,c.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,c.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,c.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,c.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,c.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,c.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,c.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,c.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,c.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,c.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,c.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var l=r(86921),u=r(53102);function p(e,t){if("*"===e)return o()({loading:s,loader:()=>r.e(2237).then(r.bind(r,82237)),modules:["@theme/NotFound"],webpack:()=>[82237],render(e,t){const r=e.default;return(0,c.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,c.jsx)(r,{...t})})}});const n=a[`${e}-${t}`],p={},d=[],f=[],m=(0,l.A)(n);return Object.entries(m).forEach((e=>{let[t,r]=e;const n=i[r];n&&(p[t]=n[0],d.push(n[1]),f.push(n[2]))})),o().Map({loading:s,loader:p,modules:d,webpack:()=>f,render(t,r){const o=JSON.parse(JSON.stringify(n));Object.entries(t).forEach((t=>{let[r,n]=t;const a=n.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(n).filter((e=>"default"!==e)).forEach((e=>{a[e]=n[e]}));let i=o;const c=r.split(".");c.slice(0,-1).forEach((e=>{i=i[e]})),i[c[c.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const s=o.__props;return delete o.__props,(0,c.jsx)(u.W,{value:i,children:(0,c.jsx)(a,{...o,...s,...r})})}})}const d=[{path:"/pr-preview/pr-1594/example-markdown/",component:p("/pr-preview/pr-1594/example-markdown/","930"),exact:!0},{path:"/pr-preview/pr-1594/example/",component:p("/pr-preview/pr-1594/example/","252"),exact:!0},{path:"/pr-preview/pr-1594/",component:p("/pr-preview/pr-1594/","a36"),routes:[{path:"/pr-preview/pr-1594/",component:p("/pr-preview/pr-1594/","ad5"),routes:[{path:"/pr-preview/pr-1594/",component:p("/pr-preview/pr-1594/","6ef"),routes:[{path:"/pr-preview/pr-1594/concepts/",component:p("/pr-preview/pr-1594/concepts/","cc8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/advanced/evolutions/",component:p("/pr-preview/pr-1594/concepts/advanced/evolutions/","490"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/advanced/journals/",component:p("/pr-preview/pr-1594/concepts/advanced/journals/","60d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/advanced/logs-stats/",component:p("/pr-preview/pr-1594/concepts/advanced/logs-stats/","1ed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/advanced/projections/",component:p("/pr-preview/pr-1594/concepts/advanced/projections/","558"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/advanced/shards/",component:p("/pr-preview/pr-1594/concepts/advanced/shards/","757"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/captures/",component:p("/pr-preview/pr-1594/concepts/captures/","1ba"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/catalogs/",component:p("/pr-preview/pr-1594/concepts/catalogs/","103"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/collections/",component:p("/pr-preview/pr-1594/concepts/collections/","606"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/connectors/",component:p("/pr-preview/pr-1594/concepts/connectors/","4da"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/derivations/",component:p("/pr-preview/pr-1594/concepts/derivations/","4ed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/flowctl/",component:p("/pr-preview/pr-1594/concepts/flowctl/","f93"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/import/",component:p("/pr-preview/pr-1594/concepts/import/","050"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/materialization/",component:p("/pr-preview/pr-1594/concepts/materialization/","9a8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/schemas/",component:p("/pr-preview/pr-1594/concepts/schemas/","699"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/storage-mappings/",component:p("/pr-preview/pr-1594/concepts/storage-mappings/","192"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/tests/",component:p("/pr-preview/pr-1594/concepts/tests/","75a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/concepts/web-app/",component:p("/pr-preview/pr-1594/concepts/web-app/","184"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/getting-started/installation/",component:p("/pr-preview/pr-1594/getting-started/installation/","bc5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/getting-started/tutorials/",component:p("/pr-preview/pr-1594/getting-started/tutorials/","e49"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/",component:p("/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/","b2d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/",component:p("/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/","dde"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/",component:p("/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/","22a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/",component:p("/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/","fa3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/",component:p("/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/","f48"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/",component:p("/pr-preview/pr-1594/guides/","230"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/connect-network/",component:p("/pr-preview/pr-1594/guides/connect-network/","a2c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/create-dataflow/",component:p("/pr-preview/pr-1594/guides/create-dataflow/","8d0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/customize-materialization-fields/",component:p("/pr-preview/pr-1594/guides/customize-materialization-fields/","d4c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/",component:p("/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/","47c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/derivation_tutorial_sql/",component:p("/pr-preview/pr-1594/guides/derivation_tutorial_sql/","c6c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/edit-data-flows/",component:p("/pr-preview/pr-1594/guides/edit-data-flows/","76e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/flowctl/",component:p("/pr-preview/pr-1594/guides/flowctl/","868"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/flowctl/create-derivation/",component:p("/pr-preview/pr-1594/guides/flowctl/create-derivation/","d40"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/",component:p("/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/","1d0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/",component:p("/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/","27c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/",component:p("/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/","5ca"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/",component:p("/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/","f61"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/schema-evolution/",component:p("/pr-preview/pr-1594/guides/schema-evolution/","a14"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/system-specific-dataflows/",component:p("/pr-preview/pr-1594/guides/system-specific-dataflows/","f61"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/",component:p("/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/","95b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/",component:p("/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/","335"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/guides/transform_data_using_typescript/",component:p("/pr-preview/pr-1594/guides/transform_data_using_typescript/","9bb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/overview/comparisons/",component:p("/pr-preview/pr-1594/overview/comparisons/","ce9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/overview/who-should-use-flow/",component:p("/pr-preview/pr-1594/overview/who-should-use-flow/","985"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/allow-ip-addresses/",component:p("/pr-preview/pr-1594/reference/allow-ip-addresses/","592"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/authentication/",component:p("/pr-preview/pr-1594/reference/authentication/","dad"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Configuring-task-shards/",component:p("/pr-preview/pr-1594/reference/Configuring-task-shards/","10c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/",component:p("/pr-preview/pr-1594/reference/Connectors/","bbe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/","f8b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/","5b4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/","8b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/","bf0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/","7b0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/","bc2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/","6d7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/","9b2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/","b85"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/","176"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/","9c6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/","d16"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/","03d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/","b09"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/","e2f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/","be5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/","3b7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/","a4e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/","9df"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/","126"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/","ae6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/","99a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/","eff"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/","e1f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/","363"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/","2d7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/","da7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/","f4e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/","26c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/","30f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/","e7f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/","56c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/","c72"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/","d6a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/","539"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/","a0a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/","ff7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/","779"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/","396"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/","17c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/","83c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/","c51"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/","5b5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/","305"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/","af7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/","968"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/","6e8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/","f1f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/","84b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/","864"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/","904"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/","be4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/","bb2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/","baa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/","a8c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/","5fe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/","02b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/","dd2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/","382"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/","359"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/","ca2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch/","75d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/","f71"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/","b33"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/","dc3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/","dde"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/","d24"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/","3eb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/","47b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/","a6c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/","5e6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/","fff"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/","032"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/","9b5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch/","388"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/","f00"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/","c2d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/","c0b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/","0f7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/","1b8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/","d6c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/","4a4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/","39c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/","690"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/","5bc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/","6fd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/","020"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/","028"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/","3e6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/","b05"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/","6eb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/","0ab"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/","65e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/","674"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/","cbd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/","64a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/",component:p("/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/","d2c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/dekaf/",component:p("/pr-preview/pr-1594/reference/Connectors/dekaf/","077"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird/",component:p("/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird/","6eb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/","5b4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/","744"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/","971"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/","204"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/","942"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/","34c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/","5e8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/","54d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/","af3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/","116"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/","839"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/","b1b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/","baa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/","7c4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/","3e1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/","f64"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/","e60"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/","6fd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/","2bf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/","e5a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/","3ec"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/","894"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/","d97"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/","6de"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/","ed0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/","db6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/","d12"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/","5cc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/","b4c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/","867"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/","885"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/","758"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/","c55"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/","c5c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/","b00"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/",component:p("/pr-preview/pr-1594/reference/Connectors/materialization-protocol/","bc5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/editing/",component:p("/pr-preview/pr-1594/reference/editing/","62a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/materialization-sync-schedule/",component:p("/pr-preview/pr-1594/reference/materialization-sync-schedule/","733"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/notifications/",component:p("/pr-preview/pr-1594/reference/notifications/","3e7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/organizing-catalogs/",component:p("/pr-preview/pr-1594/reference/organizing-catalogs/","465"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/reduction-strategies/",component:p("/pr-preview/pr-1594/reference/reduction-strategies/","06f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/reduction-strategies/append/",component:p("/pr-preview/pr-1594/reference/reduction-strategies/append/","d05"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals/",component:p("/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals/","666"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins/",component:p("/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins/","6f5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/reduction-strategies/merge/",component:p("/pr-preview/pr-1594/reference/reduction-strategies/merge/","6b4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize/",component:p("/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize/","98e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/reduction-strategies/set/",component:p("/pr-preview/pr-1594/reference/reduction-strategies/set/","f26"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/reduction-strategies/sum/",component:p("/pr-preview/pr-1594/reference/reduction-strategies/sum/","575"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/time-travel/",component:p("/pr-preview/pr-1594/reference/time-travel/","8e5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/reference/working-logs-stats/",component:p("/pr-preview/pr-1594/reference/working-logs-stats/","e6a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/pr-preview/pr-1594/",component:p("/pr-preview/pr-1594/","4fa"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"*",component:p("*")}]},6125:(e,t,r)=>{"use strict";r.d(t,{o:()=>a,x:()=>i});var n=r(96540),o=r(74848);const a=n.createContext(!1);function i(e){let{children:t}=e;const[r,i]=(0,n.useState)(!1);return(0,n.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:r,children:t})}},4568:(e,t,r)=>{"use strict";var n=r(96540),o=r(5338),a=r(80545),i=r(54625),c=r(4784),s=r(38193);const l=[r(10119),r(26134),r(76294),r(51043)];var u=r(35947),p=r(56347),d=r(22831);function f(e){const t=e.scriptUrlPattern||"https://static.reo.dev/<clientID>/reo<version>.js",r=e.clientID,n=e.version||"";if(!r||"string"!=typeof r)throw new Error("clientID required");return function(e){return new Promise(((t,r)=>{var n;(n=0)<e.length?(e=>{const n=document.createElement("script");n.onload=()=>{"undefined"!=typeof window&&window.Reo?t(Reo):r(new Error("Failed to load the script or access methods."))},n.onerror=e=>r(new Error("Failed to load the JS script of the agent")),n.async=!0,n.src=e,document.head.appendChild(n)})(e[n]):t()}))}((Array.isArray(t)?t:[t]).map((e=>e.replace(/<clientID>/g,r).replace(/<version>/g,n))))}var m=r(74848);const h="estuary.docs.hideNavBar",g="running-in-iframe",b="a2955ffcdd9029c";function v(e){let{children:t}=e;return(0,n.useEffect)((()=>{f({clientID:b}).then((e=>{e.init({clientID:b})}));const e=e=>{"http://localhost:3000"!==e.origin&&"https://dashboard.estuary.dev"!==e.origin||e.data?.type===h&&window.document.body.classList.add(g)};return window.addEventListener("message",e),()=>{window.removeEventListener("message",e)}}),[]),(0,m.jsx)(m.Fragment,{children:t})}var y=r(5260),w=r(44586),k=r(86025),S=r(6342),C=r(1003),x=r(32131),_=r(14090),E=r(2967),A=r(70440),T=r(41463);function L(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:r}}=(0,w.A)(),n=(0,x.o)(),o=r[e].htmlLang,a=e=>e.replace("-","_");return(0,m.jsxs)(y.A,{children:[Object.entries(r).map((e=>{let[t,{htmlLang:r}]=e;return(0,m.jsx)("link",{rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:r},t)})),(0,m.jsx)("link",{rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,m.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(r).filter((e=>o!==e.htmlLang)).map((e=>(0,m.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function z(e){let{permalink:t}=e;const{siteConfig:{url:r}}=(0,w.A)(),n=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:r}}=(0,w.A)(),{pathname:n}=(0,p.zy)();return e+(0,A.applyTrailingSlash)((0,k.Ay)(n),{trailingSlash:r,baseUrl:t})}(),o=t?`${r}${t}`:n;return(0,m.jsxs)(y.A,{children:[(0,m.jsx)("meta",{property:"og:url",content:o}),(0,m.jsx)("link",{rel:"canonical",href:o})]})}function j(){const{i18n:{currentLocale:e}}=(0,w.A)(),{metadata:t,image:r}=(0,S.p)();return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)(y.A,{children:[(0,m.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,m.jsx)("body",{className:_.w})]}),r&&(0,m.jsx)(C.be,{image:r}),(0,m.jsx)(z,{}),(0,m.jsx)(L,{}),(0,m.jsx)(T.A,{tag:E.Cy,locale:e}),(0,m.jsx)(y.A,{children:t.map(((e,t)=>(0,m.jsx)("meta",{...e},t)))})]})}const R=new Map;var N=r(6125),P=r(26988),O=r(205);function D(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];const o=l.map((t=>{const n=t.default?.[e]??t[e];return n?.(...r)}));return()=>o.forEach((e=>e?.()))}const M=function(e){let{children:t,location:r,previousLocation:n}=e;return(0,O.A)((()=>{n!==r&&(!function(e){let{location:t,previousLocation:r}=e;if(!r)return;const n=t.pathname===r.pathname,o=t.hash===r.hash,a=t.search===r.search;if(n&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:r,previousLocation:n}),D("onRouteDidUpdate",{previousLocation:n,location:r}))}),[n,r]),t};function I(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class F extends n.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.A.canUseDOM?D("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const r=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=D("onRouteUpdate",{previousLocation:this.previousLocation,location:r}),I(r.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,m.jsx)(M,{previousLocation:this.previousLocation,location:t,children:(0,m.jsx)(p.qh,{location:t,render:()=>e})})}}const B=F,q="__docusaurus-base-url-issue-banner-container",$="__docusaurus-base-url-issue-banner",U="__docusaurus-base-url-issue-banner-suggestion-container";function Q(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${q}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${$}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${U}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${U}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function H(){const{siteConfig:{baseUrl:e}}=(0,w.A)();return(0,m.jsx)(m.Fragment,{children:!s.A.canUseDOM&&(0,m.jsx)(y.A,{children:(0,m.jsx)("script",{children:Q(e)})})})}function G(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,w.A)(),{pathname:r}=(0,p.zy)();return t&&r===e?(0,m.jsx)(H,{}):null}function W(){const{siteConfig:{favicon:e,title:t,noIndex:r},i18n:{currentLocale:n,localeConfigs:o}}=(0,w.A)(),a=(0,k.Ay)(e),{htmlLang:i,direction:c}=o[n];return(0,m.jsxs)(y.A,{children:[(0,m.jsx)("html",{lang:i,dir:c}),(0,m.jsx)("title",{children:t}),(0,m.jsx)("meta",{property:"og:title",content:t}),(0,m.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),r&&(0,m.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,m.jsx)("link",{rel:"icon",href:a})]})}var V=r(67489),K=r(92303);function Y(){const e=(0,K.A)();return(0,m.jsx)(y.A,{children:(0,m.jsx)("html",{"data-has-hydrated":e})})}const J=(0,d.v)(u.A);function Z(){const e=function(e){if(R.has(e.pathname))return{...e,pathname:R.get(e.pathname)};if((0,d.u)(u.A,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return R.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return R.set(e.pathname,t),{...e,pathname:t}}((0,p.zy)());return(0,m.jsx)(B,{location:e,children:J})}function X(){return(0,m.jsx)(V.A,{children:(0,m.jsx)(P.l,{children:(0,m.jsxs)(N.x,{children:[(0,m.jsxs)(v,{children:[(0,m.jsx)(W,{}),(0,m.jsx)(j,{}),(0,m.jsx)(G,{}),(0,m.jsx)(Z,{})]}),(0,m.jsx)(Y,{})]})})})}var ee=r(84054);const te=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,r)=>{if("undefined"==typeof document)return void r();const n=document.createElement("link");n.setAttribute("rel","prefetch"),n.setAttribute("href",e),n.onload=()=>t(),n.onerror=()=>r();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(n)}))}:function(e){return new Promise(((t,r)=>{const n=new XMLHttpRequest;n.open("GET",e,!0),n.withCredentials=!0,n.onload=()=>{200===n.status?t():r()},n.send(null)}))};var re=r(86921);const ne=new Set,oe=new Set,ae=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ie={prefetch:e=>{if(!(e=>!ae()&&!oe.has(e)&&!ne.has(e))(e))return!1;ne.add(e);const t=(0,d.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(ee).filter((e=>{let[r]=e;return r.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,re.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=r.gca(e);return t&&!t.includes("undefined")?te(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!ae()&&!oe.has(e))(e)&&(oe.add(e),I(e))},ce=Object.freeze(ie);function se(e){let{children:t}=e;return"hash"===c.default.future.experimental_router?(0,m.jsx)(i.I9,{children:t}):(0,m.jsx)(i.Kd,{children:t})}const le=Boolean(!0);if(s.A.canUseDOM){window.docusaurus=ce;const e=document.getElementById("__docusaurus"),t=(0,m.jsx)(a.vd,{children:(0,m.jsx)(se,{children:(0,m.jsx)(X,{})})}),r=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(le)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:r});else{const n=o.createRoot(e,{onRecoverableError:r});n.render(t),window.docusaurusRoot=n}};I(window.location.pathname).then((()=>{(0,n.startTransition)(i)}))}},26988:(e,t,r)=>{"use strict";r.d(t,{o:()=>p,l:()=>d});var n=r(96540),o=r(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/pr-preview/pr-1594/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/pr-preview/pr-1594/","mainDocId":"overview/README","docs":[{"id":"concepts/advanced/evolutions","path":"/pr-preview/pr-1594/concepts/advanced/evolutions","sidebar":"tutorialSidebar"},{"id":"concepts/advanced/journals","path":"/pr-preview/pr-1594/concepts/advanced/journals","sidebar":"tutorialSidebar"},{"id":"concepts/advanced/logs-stats","path":"/pr-preview/pr-1594/concepts/advanced/logs-stats","sidebar":"tutorialSidebar"},{"id":"concepts/advanced/projections","path":"/pr-preview/pr-1594/concepts/advanced/projections","sidebar":"tutorialSidebar"},{"id":"concepts/advanced/shards","path":"/pr-preview/pr-1594/concepts/advanced/shards","sidebar":"tutorialSidebar"},{"id":"concepts/captures","path":"/pr-preview/pr-1594/concepts/captures","sidebar":"tutorialSidebar"},{"id":"concepts/catalogs","path":"/pr-preview/pr-1594/concepts/catalogs","sidebar":"tutorialSidebar"},{"id":"concepts/collections","path":"/pr-preview/pr-1594/concepts/collections","sidebar":"tutorialSidebar"},{"id":"concepts/connectors","path":"/pr-preview/pr-1594/concepts/connectors","sidebar":"tutorialSidebar"},{"id":"concepts/derivations","path":"/pr-preview/pr-1594/concepts/derivations","sidebar":"tutorialSidebar"},{"id":"concepts/flowctl","path":"/pr-preview/pr-1594/concepts/flowctl","sidebar":"tutorialSidebar"},{"id":"concepts/import","path":"/pr-preview/pr-1594/concepts/import","sidebar":"tutorialSidebar"},{"id":"concepts/materialization","path":"/pr-preview/pr-1594/concepts/materialization","sidebar":"tutorialSidebar"},{"id":"concepts/README","path":"/pr-preview/pr-1594/concepts/","sidebar":"tutorialSidebar"},{"id":"concepts/schemas","path":"/pr-preview/pr-1594/concepts/schemas","sidebar":"tutorialSidebar"},{"id":"concepts/storage-mappings","path":"/pr-preview/pr-1594/concepts/storage-mappings","sidebar":"tutorialSidebar"},{"id":"concepts/tests","path":"/pr-preview/pr-1594/concepts/tests","sidebar":"tutorialSidebar"},{"id":"concepts/web-app","path":"/pr-preview/pr-1594/concepts/web-app","sidebar":"tutorialSidebar"},{"id":"getting-started/installation","path":"/pr-preview/pr-1594/getting-started/installation","sidebar":"tutorialSidebar"},{"id":"getting-started/tutorials/continuous-materialized-view","path":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view","sidebar":"tutorialSidebar"},{"id":"getting-started/tutorials/dataflow-s3-snowflake","path":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake","sidebar":"tutorialSidebar"},{"id":"getting-started/tutorials/derivations_acmebank","path":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank","sidebar":"tutorialSidebar"},{"id":"getting-started/tutorials/postgresql_cdc_to_snowflake","path":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake","sidebar":"tutorialSidebar"},{"id":"getting-started/tutorials/README","path":"/pr-preview/pr-1594/getting-started/tutorials/","sidebar":"tutorialSidebar"},{"id":"getting-started/tutorials/real_time_cdc_with_mongodb","path":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb","sidebar":"tutorialSidebar"},{"id":"guides/connect-network","path":"/pr-preview/pr-1594/guides/connect-network","sidebar":"tutorialSidebar"},{"id":"guides/create-dataflow","path":"/pr-preview/pr-1594/guides/create-dataflow","sidebar":"tutorialSidebar"},{"id":"guides/customize-materialization-fields","path":"/pr-preview/pr-1594/guides/customize-materialization-fields","sidebar":"tutorialSidebar"},{"id":"guides/dekaf_reading_collections_from_kafka","path":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka","sidebar":"tutorialSidebar"},{"id":"guides/derivation_tutorial_sql","path":"/pr-preview/pr-1594/guides/derivation_tutorial_sql","sidebar":"tutorialSidebar"},{"id":"guides/edit-data-flows","path":"/pr-preview/pr-1594/guides/edit-data-flows","sidebar":"tutorialSidebar"},{"id":"guides/flowctl/create-derivation","path":"/pr-preview/pr-1594/guides/flowctl/create-derivation","sidebar":"tutorialSidebar"},{"id":"guides/flowctl/edit-draft-from-webapp","path":"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp","sidebar":"tutorialSidebar"},{"id":"guides/flowctl/edit-specification-locally","path":"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally","sidebar":"tutorialSidebar"},{"id":"guides/flowctl/README","path":"/pr-preview/pr-1594/guides/flowctl/","sidebar":"tutorialSidebar"},{"id":"guides/flowctl/troubleshoot-task","path":"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task","sidebar":"tutorialSidebar"},{"id":"guides/howto_join_two_collections_typescript","path":"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript","sidebar":"tutorialSidebar"},{"id":"guides/README","path":"/pr-preview/pr-1594/guides/","sidebar":"tutorialSidebar"},{"id":"guides/schema-evolution","path":"/pr-preview/pr-1594/guides/schema-evolution","sidebar":"tutorialSidebar"},{"id":"guides/system-specific-dataflows/firestore-to-dwh","path":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh","sidebar":"tutorialSidebar"},{"id":"guides/system-specific-dataflows/README","path":"/pr-preview/pr-1594/guides/system-specific-dataflows/","sidebar":"tutorialSidebar"},{"id":"guides/system-specific-dataflows/s3-to-snowflake","path":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake","sidebar":"tutorialSidebar"},{"id":"guides/transform_data_using_typescript","path":"/pr-preview/pr-1594/guides/transform_data_using_typescript","sidebar":"tutorialSidebar"},{"id":"overview/comparisons","path":"/pr-preview/pr-1594/overview/comparisons","sidebar":"tutorialSidebar"},{"id":"overview/README","path":"/pr-preview/pr-1594/","sidebar":"tutorialSidebar"},{"id":"overview/who-should-use-flow","path":"/pr-preview/pr-1594/overview/who-should-use-flow","sidebar":"tutorialSidebar"},{"id":"reference/allow-ip-addresses","path":"/pr-preview/pr-1594/reference/allow-ip-addresses","sidebar":"tutorialSidebar"},{"id":"reference/authentication","path":"/pr-preview/pr-1594/reference/authentication","sidebar":"tutorialSidebar"},{"id":"reference/Configuring-task-shards","path":"/pr-preview/pr-1594/reference/Configuring-task-shards","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/aircall","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/airtable","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/alloydb","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/alpaca","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amazon-ads","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amazon-dynamodb","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amazon-kinesis","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amazon-redshift","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amazon-s3","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amazon-sqs","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/amplitude","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/apache-kafka","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/azure-blob-storage","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/bigquery-batch","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/bing-ads","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/braintree","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/braze","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/chargebee","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/confluence","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/datadog-ingest","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/dropbox","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/exchange-rates","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/facebook-marketing","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/freshdesk","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/gcs","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/github","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/gitlab","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/gladly","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-ads","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-analytics","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-analytics-4","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-drive","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-firestore","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-pubsub","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-search-console","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/google-sheets","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/greenhouse","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/harvest","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/http-file","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/http-ingest","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/hubspot","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/hubspot-real-time","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/instagram","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/intercom","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/intercom-ingest","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/iterable","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/jira","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/jira-ingest","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/klaviyo","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/linkedin-ads","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/linkedin-pages","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/mailchimp","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/MariaDB/MariaDB","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/marketo","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/mixpanel","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/mongodb","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/MySQL/MySQL","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/MySQL/mysql-batch","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/netsuite-suiteanalytics","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/netsuite-suitetalk","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/notion","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/OracleDB/flashback","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/OracleDB/OracleDB","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/paypal-transaction","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/pendo","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/pinterest","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/PostgreSQL/neon-postgres","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/PostgreSQL/postgres-batch","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/PostgreSQL/PostgreSQL","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/PostgreSQL/Supabase","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/README","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/recharge","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/Salesforce/salesforce","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/Salesforce/salesforce-real-time","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/sendgrid","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/sentry","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/sftp","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/slack","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/snapchat","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/snowflake","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/SQLServer/sqlserver","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/stripe","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/survey-monkey","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/tiktok","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/twilio","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/woocommerce","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/youtube-analytics","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/zendesk-chat","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/capture-connectors/zendesk-support","path":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/dekaf/dekaf-tinybird","path":"/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/dekaf/README","path":"/pr-preview/pr-1594/reference/Connectors/dekaf/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/alloydb","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/amazon-dynamodb","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/amazon-redshift","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/amazon-s3-csv","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/amazon-s3-iceberg","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/amazon-s3-parquet","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/BigQuery","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/databricks","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/Elasticsearch","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/Firebolt","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/google-gcs-csv","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/google-gcs-parquet","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/google-pubsub","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/Google-sheets","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/http-webhook","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/mongodb","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/motherduck","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/mysql-heatwave","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/MySQL/mysql","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/pinecone","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/PostgreSQL/PostgreSQL","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/README","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/Rockset","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/slack","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/Snowflake","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/SQLite","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/SQLServer/sqlserver","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/starburst","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-connectors/timescaledb","path":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/materialization-protocol","path":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol","sidebar":"tutorialSidebar"},{"id":"reference/Connectors/README","path":"/pr-preview/pr-1594/reference/Connectors/","sidebar":"tutorialSidebar"},{"id":"reference/editing","path":"/pr-preview/pr-1594/reference/editing","sidebar":"tutorialSidebar"},{"id":"reference/materialization-sync-schedule","path":"/pr-preview/pr-1594/reference/materialization-sync-schedule","sidebar":"tutorialSidebar"},{"id":"reference/notifications","path":"/pr-preview/pr-1594/reference/notifications","sidebar":"tutorialSidebar"},{"id":"reference/organizing-catalogs","path":"/pr-preview/pr-1594/reference/organizing-catalogs","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/append","path":"/pr-preview/pr-1594/reference/reduction-strategies/append","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/composing-with-conditionals","path":"/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/firstwritewins-and-lastwritewins","path":"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/merge","path":"/pr-preview/pr-1594/reference/reduction-strategies/merge","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/minimize-and-maximize","path":"/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/README","path":"/pr-preview/pr-1594/reference/reduction-strategies/","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/set","path":"/pr-preview/pr-1594/reference/reduction-strategies/set","sidebar":"tutorialSidebar"},{"id":"reference/reduction-strategies/sum","path":"/pr-preview/pr-1594/reference/reduction-strategies/sum","sidebar":"tutorialSidebar"},{"id":"reference/time-travel","path":"/pr-preview/pr-1594/reference/time-travel","sidebar":"tutorialSidebar"},{"id":"reference/working-logs-stats","path":"/pr-preview/pr-1594/reference/working-logs-stats","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/pr-preview/pr-1594/","label":"Overview"}}}}],"breadcrumbs":true}},"docusaurus-lunr-search":{"default":{"fileNames":{"searchDoc":"search-doc-1724944510578.json","lunrIndex":"lunr-index-1724944510578.json"}}},"docusaurus-plugin-google-tag-manager":{"default":{"containerId":"GTM-WK8SB2L","id":"default"}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var c=r(22654);const s=JSON.parse('{"docusaurusVersion":"3.4.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.4.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.4.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.4.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.4.0"},"docusaurus-lunr-search":{"type":"package","name":"docusaurus-lunr-search","version":"3.4.0"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.4.0"},"docusaurus-plugin-google-tag-manager":{"type":"package","name":"@docusaurus/plugin-google-tag-manager","version":"3.4.0"}}}');var l=r(74848);const u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:c},p=n.createContext(u);function d(e){let{children:t}=e;return(0,l.jsx)(p.Provider,{value:u,children:t})}},67489:(e,t,r)=>{"use strict";r.d(t,{A:()=>h});var n=r(96540),o=r(38193),a=r(5260),i=r(70440),c=r(58356),s=r(53102),l=r(74848);function u(e){let{error:t,tryAgain:r}=e;return(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:r,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(p,{error:t})]})}function p(e){let{error:t}=e;const r=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:r})}function d(e){let{children:t}=e;return(0,l.jsx)(s.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:r}=e;return(0,l.jsx)(d,{children:(0,l.jsxs)(h,{fallback:()=>(0,l.jsx)(u,{error:t,tryAgain:r}),children:[(0,l.jsx)(a.A,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(c.A,{children:(0,l.jsx)(u,{error:t,tryAgain:r})})]})})}const m=e=>(0,l.jsx)(f,{...e});class h extends n.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??m)(e)}return e??null}}},38193:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});const n="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:n,canUseEventListeners:n&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:n&&"IntersectionObserver"in window,canUseViewport:n&&"screen"in window}},5260:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});r(96540);var n=r(80545),o=r(74848);function a(e){return(0,o.jsx)(n.mg,{...e})}},28774:(e,t,r)=>{"use strict";r.d(t,{A:()=>f});var n=r(96540),o=r(54625),a=r(70440),i=r(44586),c=r(16654),s=r(38193),l=r(63427),u=r(86025),p=r(74848);function d(e,t){let{isNavLink:r,to:d,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:y}=(0,i.A)(),{trailingSlash:w,baseUrl:k}=y,S=y.future.experimental_router,{withBaseUrl:C}=(0,u.hH)(),x=(0,l.A)(),_=(0,n.useRef)(null);(0,n.useImperativeHandle)(t,(()=>_.current));const E=d||f;const A=(0,c.A)(E),T=E?.replace("pathname://","");let L=void 0!==T?(z=T,b&&(e=>e.startsWith("/"))(z)?C(z):z):void 0;var z;"hash"===S&&L?.startsWith("./")&&(L=L?.slice(1)),L&&A&&(L=(0,a.applyTrailingSlash)(L,{trailingSlash:w,baseUrl:k}));const j=(0,n.useRef)(!1),R=r?o.k2:o.N_,N=s.A.canUseIntersectionObserver,P=(0,n.useRef)(),O=()=>{j.current||null==L||(window.docusaurus.preload(L),j.current=!0)};(0,n.useEffect)((()=>(!N&&A&&null!=L&&window.docusaurus.prefetch(L),()=>{N&&P.current&&P.current.disconnect()})),[P,L,N,A]);const D=L?.startsWith("#")??!1,M=!v.target||"_self"===v.target,I=!L||!A||!M;return g||!D&&I||x.collectLink(L),v.id&&x.collectAnchor(v.id),I?(0,p.jsx)("a",{ref:_,href:L,...E&&!A&&{target:"_blank",rel:"noopener noreferrer"},...v}):(0,p.jsx)(R,{...v,onMouseEnter:O,onTouchStart:O,innerRef:e=>{_.current=e,N&&e&&A&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=L&&window.docusaurus.prefetch(L))}))})),P.current.observe(e))},to:L,...r&&{isActive:h,activeClassName:m}})}const f=n.forwardRef(d)},21312:(e,t,r)=>{"use strict";r.d(t,{A:()=>l,T:()=>s});var n=r(96540),o=r(74848);function a(e,t){const r=e.split(/(\{\w+\})/).map(((e,r)=>{if(r%2==1){const r=t?.[e.slice(1,-1)];if(void 0!==r)return r}return e}));return r.some((e=>(0,n.isValidElement)(e)))?r.map(((e,t)=>(0,n.isValidElement)(e)?n.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):r.join("")}var i=r(22654);function c(e){let{id:t,message:r}=e;if(void 0===t&&void 0===r)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??r]??r??t}function s(e,t){let{message:r,id:n}=e;return a(c({message:r,id:n}),t)}function l(e){let{children:t,id:r,values:n}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const i=c({message:t,id:r});return(0,o.jsx)(o.Fragment,{children:a(i,n)})}},17065:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n="default"},16654:(e,t,r)=>{"use strict";function n(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!n(e)}r.d(t,{A:()=>o,z:()=>n})},86025:(e,t,r)=>{"use strict";r.d(t,{Ay:()=>c,hH:()=>i});var n=r(96540),o=r(44586),a=r(16654);function i(){const{siteConfig:e}=(0,o.A)(),{baseUrl:t,url:r}=e,i=e.future.experimental_router,c=(0,n.useCallback)(((e,n)=>function(e){let{siteUrl:t,baseUrl:r,url:n,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:c}=e;if(!n||n.startsWith("#")||(0,a.z)(n))return n;if("hash"===c)return n.startsWith("/")?`.${n}`:`./${n}`;if(o)return r+n.replace(/^\//,"");if(n===r.replace(/\/$/,""))return r;const s=n.startsWith(r)?n:r+n.replace(/^\//,"");return i?t+s:s}({siteUrl:r,baseUrl:t,url:e,options:n,router:i})),[r,t,i]);return{withBaseUrl:c}}function c(e,t){void 0===t&&(t={});const{withBaseUrl:r}=i();return r(e,t)}},63427:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(96540);r(74848);const o=n.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,n.useContext)(o);function i(){return a()}},44586:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(96540),o=r(26988);function a(){return(0,n.useContext)(o.o)}},66588:(e,t,r)=>{"use strict";r.d(t,{P_:()=>i,kh:()=>a});var n=r(44586),o=r(17065);function a(e,t){void 0===t&&(t={});const r=function(){const{globalData:e}=(0,n.A)();return e}()[e];if(!r&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return r}function i(e,t,r){void 0===t&&(t=o.W),void 0===r&&(r={});const n=a(e),i=n?.[t];if(!i&&r.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},92303:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(96540),o=r(6125);function a(){return(0,n.useContext)(o.o)}},205:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(96540);const o=r(38193).A.canUseDOM?n.useLayoutEffect:n.useEffect},86921:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});const n=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(r,o){Object.entries(r).forEach((r=>{let[a,i]=r;const c=o?`${o}.${a}`:a;n(i)?e(i,c):t[c]=i}))}(e),t}},53102:(e,t,r)=>{"use strict";r.d(t,{W:()=>i,o:()=>a});var n=r(96540),o=r(74848);const a=n.createContext(null);function i(e){let{children:t,value:r}=e;const i=n.useContext(a),c=(0,n.useMemo)((()=>function(e){let{parent:t,value:r}=e;if(!t){if(!r)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in r))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return r}const n={...t.data,...r?.data};return{plugin:t.plugin,data:n}}({parent:i,value:r})),[i,r]);return(0,o.jsx)(a.Provider,{value:c,children:t})}},48295:(e,t,r)=>{"use strict";r.d(t,{zK:()=>f,vT:()=>u,Gy:()=>s,HW:()=>m,ht:()=>l,r7:()=>d,jh:()=>p});var n=r(56347),o=r(66588);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const r=function(e,t){const r=a(e);return[...e.versions.filter((e=>e!==r)),r].find((e=>!!(0,n.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=r?.docs.find((e=>!!(0,n.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:r,activeDoc:o,alternateDocVersions:o?function(t){const r={};return e.versions.forEach((e=>{e.docs.forEach((n=>{n.id===t&&(r[e.name]=n)}))})),r}(o.id):{}}}const c={},s=()=>(0,o.kh)("docusaurus-plugin-content-docs")??c,l=e=>{try{return(0,o.P_)("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function u(e){void 0===e&&(e={});const t=s(),{pathname:r}=(0,n.zy)();return function(e,t,r){void 0===r&&(r={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,r]=e;return!!(0,n.B6)(t,{path:r.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&r.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,r,e)}function p(e){return l(e).versions}function d(e){const t=l(e);return a(t)}function f(e){const t=l(e),{pathname:r}=(0,n.zy)();return i(t,r)}function m(e){const t=l(e),{pathname:r}=(0,n.zy)();return function(e,t){const r=a(e);return{latestDocSuggestion:i(e,t).alternateDocVersions[r.name],latestVersionSuggestion:r}}(t,r)}},76294:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>a});var n=r(5947),o=r.n(n);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:r}=e;if(r&&t.pathname!==r.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},26134:(e,t,r)=>{"use strict";r.r(t);var n=r(71765),o=r(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:n}=t;globalThis.Prism=e,n.forEach((e=>{"php"===e&&r(19700),r(18692)(`./prism-${e}`)})),delete globalThis.Prism}(n.My)},51107:(e,t,r)=>{"use strict";r.d(t,{A:()=>u});r(96540);var n=r(34164),o=r(21312),a=r(6342),i=r(28774),c=r(63427);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var l=r(74848);function u(e){let{as:t,id:r,...u}=e;const p=(0,c.A)(),{navbar:{hideOnScroll:d}}=(0,a.p)();if("h1"===t||!r)return(0,l.jsx)(t,{...u,id:void 0});p.collectAnchor(r);const f=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:r});return(0,l.jsxs)(t,{...u,className:(0,n.A)("anchor",d?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,u.className),id:r,children:[u.children,(0,l.jsx)(i.A,{className:"hash-link",to:`#${r}`,"aria-label":f,title:f,children:"\u200b"})]})}},43186:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});r(96540);const n={iconExternalLink:"iconExternalLink_nPIU"};var o=r(74848);function a(e){let{width:t=13.5,height:r=13.5}=e;return(0,o.jsx)("svg",{width:t,height:r,"aria-hidden":"true",viewBox:"0 0 24 24",className:n.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},58356:(e,t,r)=>{"use strict";r.d(t,{A:()=>kt});var n=r(96540),o=r(34164),a=r(67489),i=r(1003),c=r(56347),s=r(21312),l=r(75062),u=r(74848);const p="__docusaurus_skipToContent_fallback";function d(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,n.useRef)(null),{action:t}=(0,c.W6)(),r=(0,n.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(p);t&&d(t)}),[]);return(0,l.$)((r=>{let{location:n}=r;e.current&&!n.hash&&"PUSH"===t&&d(e.current)})),{containerRef:e,onClick:r}}const m=(0,s.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:r,onClick:n}=f();return(0,u.jsx)("div",{ref:r,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:`#${p}`,onClick:n,children:t})})}var g=r(17559),b=r(14090);const v={skipToContent:"skipToContent_fXgn"};function y(){return(0,u.jsx)(h,{className:v.skipToContent})}var w=r(6342),k=r(65041);function S(e){let{width:t=21,height:r=21,color:n="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:r,...i,children:(0,u.jsx)("g",{stroke:n,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const C={closeButton:"closeButton_CVFx"};function x(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",C.closeButton,e.className),children:(0,u.jsx)(S,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function E(e){const{announcementBar:t}=(0,w.p)(),{content:r}=t;return(0,u.jsx)("div",{...e,className:(0,o.A)(_.content,e.className),dangerouslySetInnerHTML:{__html:r}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:r}=(0,k.M)();if(!t)return null;const{backgroundColor:n,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:n,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:A.announcementBarPlaceholder}),(0,u.jsx)(E,{className:A.announcementBarContent}),a&&(0,u.jsx)(x,{onClick:r,className:A.announcementBarClose})]})}var L=r(22069),z=r(23104);var j=r(89532),R=r(75600);const N=n.createContext(null);function P(e){let{children:t}=e;const r=function(){const e=(0,L.M)(),t=(0,R.YL)(),[r,o]=(0,n.useState)(!1),a=null!==t.component,i=(0,j.ZC)(a);return(0,n.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,n.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,n.useMemo)((()=>[r,o]),[r])}();return(0,u.jsx)(N.Provider,{value:r,children:t})}function O(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function D(){const e=(0,n.useContext)(N);if(!e)throw new j.dV("NavbarSecondaryMenuDisplayProvider");const[t,r]=e,o=(0,n.useCallback)((()=>r(!1)),[r]),a=(0,R.YL)();return(0,n.useMemo)((()=>({shown:t,hide:o,content:O(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:r,secondaryMenu:n}=e;const{shown:a}=D();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n})]})]})}var I=r(95293),F=r(92303);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function q(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function U(e){let{className:t,buttonClassName:r,value:n,onChange:a}=e;const i=(0,F.A)(),c=(0,s.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,s.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,s.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.A)($.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.A)("clean-btn",$.toggleButton,!i&&$.toggleButtonDisabled,r),type:"button",onClick:()=>a("dark"===n?"light":"dark"),disabled:!i,title:c,"aria-label":c,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,o.A)($.toggleIcon,$.lightToggleIcon)}),(0,u.jsx)(q,{className:(0,o.A)($.toggleIcon,$.darkToggleIcon)})]})})}const Q=n.memo(U),H="estuary.colorMode";function G(e){const[t,r]=(0,n.useState)(!1),{onChange:o}=e;return(0,n.useEffect)((()=>{const e=e=>{"http://localhost:3000"!==e.origin&&"https://dashboard.estuary.dev"!==e.origin||e.data?.type===H&&o(e.data.mode)};return t||(window.addEventListener("message",e),r(!0)),()=>{window.removeEventListener("message",e)}}),[]),(0,u.jsx)(u.Fragment,{children:(0,u.jsx)(Q,{...e})})}const W={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const r=(0,w.p)().navbar.style,n=(0,w.p)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,I.G)();return n?null:(0,u.jsx)(G,{className:t,buttonClassName:"dark"===r?W.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var K=r(23465);function Y(){return(0,u.jsx)(K.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function J(){const e=(0,L.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(S,{color:"var(--ifm-color-emphasis-600)"})})}function Z(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(Y,{}),(0,u.jsx)(V,{className:"margin-right--md"}),(0,u.jsx)(J,{})]})}var X=r(28774),ee=r(86025),te=r(16654);function re(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var ne=r(43186);function oe(e){let{activeBasePath:t,activeBaseRegex:r,to:n,href:o,label:a,html:i,isDropdownLink:c,prependBaseUrlToHref:s,...l}=e;const p=(0,ee.Ay)(n),d=(0,ee.Ay)(t),f=(0,ee.Ay)(o,{forcePrependBaseUrl:!0}),m=a&&o&&!(0,te.A)(o),h=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,m&&(0,u.jsx)(ne.A,{...c&&{width:12,height:12}})]})};return o?(0,u.jsx)(X.A,{href:s?f:o,...l,...h}):(0,u.jsx)(X.A,{to:p,isNavLink:!0,...(t||r)&&{isActive:(e,t)=>r?re(r,t.pathname):t.pathname.startsWith(d)},...l,...h})}function ae(e){let{className:t,isDropdownItem:r=!1,...n}=e;const a=(0,u.jsx)(oe,{className:(0,o.A)(r?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:r,...n});return r?(0,u.jsx)("li",{children:a}):a}function ie(e){let{className:t,isDropdownItem:r,...n}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(oe,{className:(0,o.A)("menu__link",t),...n})})}function ce(e){let{mobile:t=!1,position:r,...n}=e;const o=t?ie:ae;return(0,u.jsx)(o,{...n,activeClassName:n.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var se=r(41422),le=r(99169),ue=r(44586);const pe={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function de(e,t){return e.some((e=>function(e,t){return!!(0,le.ys)(e.to,t)||!!re(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function fe(e){let{items:t,position:r,className:a,onClick:i,...c}=e;const s=(0,n.useRef)(null),[l,p]=(0,n.useState)(!1);return(0,n.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&p(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[s]),(0,u.jsxs)("div",{ref:s,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===r,"dropdown--show":l}),children:[(0,u.jsx)(oe,{"aria-haspopup":"true","aria-expanded":l,role:"button",href:c.to?void 0:"#",className:(0,o.A)("navbar__link",a),...c,onClick:c.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),p(!l))},children:c.children??c.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,n.createElement)(Ne,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function me(e){let{items:t,className:r,position:a,onClick:i,...s}=e;const l=function(){const{siteConfig:{baseUrl:e}}=(0,ue.A)(),{pathname:t}=(0,c.zy)();return t.replace(e,"/")}(),p=de(t,l),{collapsed:d,toggleCollapsed:f,setCollapsed:m}=(0,se.u)({initialState:()=>!p});return(0,n.useEffect)((()=>{p&&m(!p)}),[l,p,m]),(0,u.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":d}),children:[(0,u.jsx)(oe,{role:"button",className:(0,o.A)(pe.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",r),...s,onClick:e=>{e.preventDefault(),f()},children:s.children??s.label}),(0,u.jsx)(se.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:d,children:t.map(((e,t)=>(0,n.createElement)(Ne,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function he(e){let{mobile:t=!1,...r}=e;const n=t?me:fe;return(0,u.jsx)(n,{...r})}var ge=r(32131);function be(e){let{width:t=20,height:r=20,...n}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:r,"aria-hidden":!0,...n,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const ve="iconLanguage_nlXk";function ye(e){var t,r,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(r=ye(e[t]))&&(n&&(n+=" "),n+=r);else for(t in e)e[t]&&(n&&(n+=" "),n+=t);return n}const we=function(){for(var e,t,r=0,n="";r<arguments.length;)(e=arguments[r++])&&(t=ye(e))&&(n&&(n+=" "),n+=t);return n};var ke=r(66588),Se=r(689),Ce=r.n(Se);function xe(){const e=(0,c.zy)(),t=(0,c.W6)(),{siteConfig:{baseUrl:r}}=(0,ue.A)(),[o,a]=(0,n.useState)({wordToHighlight:"",isTitleSuggestion:!1,titleText:""});return(0,n.useEffect)((()=>{if(!e.state?.highlightState||0===e.state.highlightState.wordToHighlight.length)return;a(e.state.highlightState);const{highlightState:r,...n}=e.state;t.replace({...e,state:n})}),[e.state?.highlightState,t,e]),(0,n.useEffect)((()=>{if(0===o.wordToHighlight.length)return;const e=document.getElementsByTagName("article")[0]??document.getElementsByTagName("main")[0];if(!e)return;const t=new(Ce())(e),r={ignoreJoiners:!0};return t.mark(o.wordToHighlight,r),()=>t.unmark(r)}),[o,r]),null}const _e=e=>{const t=(0,n.useRef)(!1),o=(0,n.useRef)(null),[a,i]=(0,n.useState)(!1),s=(0,c.W6)(),{siteConfig:l={}}=(0,ue.A)(),p=(l.plugins||[]).find((e=>Array.isArray(e)&&"string"==typeof e[0]&&e[0].includes("docusaurus-lunr-search"))),d=(0,F.A)(),{baseUrl:f}=l,m=p&&p[1]?.assetUrl||f,h=(0,ke.P_)("docusaurus-lunr-search"),g=()=>{t.current||(Promise.all([fetch(`${m}${h.fileNames.searchDoc}`).then((e=>e.json())),fetch(`${m}${h.fileNames.lunrIndex}`).then((e=>e.json())),Promise.all([r.e(8591),r.e(8577)]).then(r.bind(r,15765)),Promise.all([r.e(1869),r.e(9278)]).then(r.bind(r,89278))]).then((e=>{let[t,r,{default:n}]=e;const{searchDocs:o,options:a}=t;o&&0!==o.length&&(((e,t,r,n)=>{new r({searchDocs:e,searchIndex:t,baseUrl:f,inputSelector:"#search_input_react",handleSelected:(e,t,r)=>{const o=r.url||"/";document.createElement("a").href=o,e.setVal(""),t.target.blur();let a="";if(n.highlightResult)try{const e=(r.text||r.subcategory||r.title).match(new RegExp("<span.+span>\\w*","g"));if(e&&e.length>0){const t=document.createElement("div");t.innerHTML=e[0],a=t.textContent}}catch(i){console.log(i)}s.push(o,{highlightState:{wordToHighlight:a}})},maxHits:n.maxHits})})(o,r,n,a),i(!0))})),t.current=!0)},b=(0,n.useCallback)((t=>{o.current.contains(t.target)||o.current.focus(),e.handleSearchBarToggle&&e.handleSearchBarToggle(!e.isSearchBarExpanded)}),[e.isSearchBarExpanded]);let v;return d&&(g(),v=window.navigator.platform.startsWith("Mac")?"Search \u2318+K":"Search Ctrl+K"),(0,n.useEffect)((()=>{e.autoFocus&&a&&o.current.focus()}),[a]),(0,u.jsxs)("div",{className:"navbar__search",children:[(0,u.jsx)("span",{"aria-label":"expand searchbar",role:"button",className:we("search-icon",{"search-icon-hidden":e.isSearchBarExpanded}),onClick:b,onKeyDown:b,tabIndex:0}),(0,u.jsx)("input",{id:"search_input_react",type:"search",placeholder:a?v:"Loading...","aria-label":"Search",className:we("navbar__search-input",{"search-bar-expanded":e.isSearchBarExpanded},{"search-bar":!e.isSearchBarExpanded}),onClick:g,onMouseOver:g,onFocus:b,onBlur:b,ref:o,disabled:!a}),(0,u.jsx)(xe,{})]},"search-box")},Ee={navbarSearchContainer:"navbarSearchContainer_Bca1"};function Ae(e){let{children:t,className:r}=e;return(0,u.jsx)("div",{className:(0,o.A)(r,Ee.navbarSearchContainer),children:t})}var Te=r(48295),Le=r(84142);var ze=r(55597);const je=e=>e.docs.find((t=>t.id===e.mainDocId));const Re={default:ce,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:r,dropdownItemsAfter:n,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:l,localeConfigs:p}}=(0,ue.A)(),d=(0,ge.o)(),{search:f,hash:m}=(0,c.zy)(),h=[...r,...l.map((e=>{const r=`${`pathname://${d.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${o}`;return{label:p[e].label,lang:p[e].htmlLang,to:r,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...n],g=t?(0,s.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):p[i].label;return(0,u.jsx)(he,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(be,{className:ve}),g]}),items:h})},search:function(e){let{mobile:t,className:r}=e;return t?null:(0,u.jsx)(Ae,{className:r,children:(0,u.jsx)(_e,{})})},dropdown:he,html:function(e){let{value:t,className:r,mobile:n=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.A)({navbar__item:!n&&!a,"menu__list-item":n},r),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:r,docsPluginId:n,...o}=e;const{activeDoc:a}=(0,Te.zK)(n),i=(0,Le.QB)(t,n),c=a?.path===i?.path;return null===i||i.unlisted&&!c?null:(0,u.jsx)(ce,{exact:!0,...o,isActive:()=>c||!!a?.sidebar&&a.sidebar===i.sidebar,label:r??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:r,docsPluginId:n,...o}=e;const{activeDoc:a}=(0,Te.zK)(n),i=(0,Le.fW)(t,n).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ce,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:r??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:r,docsPluginId:n,...o}=e;const a=(0,Le.Vd)(n)[0],i=t??a.label,c=r??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ce,{...o,label:i,to:c})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:r,dropdownActiveClassDisabled:n,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:l,hash:p}=(0,c.zy)(),d=(0,Te.zK)(r),f=(0,Te.jh)(r),{savePreferredVersionName:m}=(0,ze.g1)(r),h=[...o,...f.map((e=>{const t=d.alternateDocVersions[e.name]??je(e);return{label:e.label,to:`${t.path}${l}${p}`,isActive:()=>e===d.activeVersion,onClick:()=>m(e.name)}})),...a],g=(0,Le.Vd)(r)[0],b=t&&h.length>1?(0,s.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,v=t&&h.length>1?void 0:je(g).path;return h.length<=1?(0,u.jsx)(ce,{...i,mobile:t,label:b,to:v,isActive:n?()=>!1:void 0}):(0,u.jsx)(he,{...i,mobile:t,label:b,to:v,items:h,isActive:n?()=>!1:void 0})}};function Ne(e){let{type:t,...r}=e;const n=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,r),o=Re[n];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...r})}function Pe(){const e=(0,L.M)(),t=(0,w.p)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,r)=>(0,n.createElement)(Ne,{mobile:!0,...t,onClick:()=>e.toggle(),key:r})))})}function Oe(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(s.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function De(){const e=0===(0,w.p)().navbar.items.length,t=D();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Oe,{onClick:()=>t.hide()}),t.content]})}function Me(){const e=(0,L.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,n.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(M,{header:(0,u.jsx)(Z,{}),primaryMenu:(0,u.jsx)(Pe,{}),secondaryMenu:(0,u.jsx)(De,{})}):null}const Ie={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Fe(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.A)("navbar-sidebar__backdrop",e.className)})}function Be(e){let{children:t}=e;const{navbar:{hideOnScroll:r,style:a}}=(0,w.p)(),i=(0,L.M)(),{navbarRef:c,isNavbarVisible:p}=function(e){const[t,r]=(0,n.useState)(e),o=(0,n.useRef)(!1),a=(0,n.useRef)(0),i=(0,n.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,z.Mq)(((t,n)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void r(!0);if(o.current)return void(o.current=!1);const c=n?.scrollY,s=document.documentElement.scrollHeight-a.current,l=window.innerHeight;c&&i>=c?r(!1):i+l<s&&r(!0)})),(0,l.$)((t=>{if(!e)return;const n=t.location.hash;if(n?document.getElementById(n.substring(1)):void 0)return o.current=!0,void r(!1);r(!0)})),{navbarRef:i,isNavbarVisible:t}}(r);return(0,u.jsxs)("nav",{ref:c,"aria-label":(0,s.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.A)("navbar","navbar--fixed-top",r&&[Ie.navbarHideable,!p&&Ie.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Fe,{onClick:i.toggle}),(0,u.jsx)(Me,{})]})}var qe=r(70440);const $e={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Ue(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(s.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Qe(e){let{error:t}=e;const r=(0,qe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:$e.errorBoundaryError,children:r})}class He extends n.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ge="right";function We(e){let{width:t=30,height:r=30,className:n,...o}=e;return(0,u.jsx)("svg",{className:n,width:t,height:r,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Ve(){const{toggle:e,shown:t}=(0,L.M)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,s.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(We,{})})}const Ke={colorModeToggle:"colorModeToggle_DEke"};function Ye(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(He,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(Ne,{...e})},t)))})}function Je(e){let{left:t,right:r}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:r})]})}function Ze(){const e=(0,L.M)(),t=(0,w.p)().navbar.items,[r,n]=function(e){function t(e){return"left"===(e.position??Ge)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(Je,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(Ve,{}),(0,u.jsx)(Y,{}),(0,u.jsx)(Ye,{items:r})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Ye,{items:n}),(0,u.jsx)(V,{className:Ke.colorModeToggle}),!o&&(0,u.jsx)(Ae,{children:(0,u.jsx)(_e,{})})]})})}function Xe(){return(0,u.jsx)(Be,{children:(0,u.jsx)(Ze,{})})}function et(e){let{item:t}=e;const{to:r,href:n,label:o,prependBaseUrlToHref:a,...i}=t,c=(0,ee.Ay)(r),s=(0,ee.Ay)(n,{forcePrependBaseUrl:!0});return(0,u.jsxs)(X.A,{className:"footer__link-item",...n?{href:a?s:n}:{to:c},...i,children:[o,n&&!(0,te.A)(n)&&(0,u.jsx)(ne.A,{})]})}function tt(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(et,{item:t})},t.href??t.to)}function rt(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(tt,{item:e},t)))})]})}function nt(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(rt,{column:e},t)))})}function ot(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function at(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(et,{item:t})}function it(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,r)=>(0,u.jsxs)(n.Fragment,{children:[(0,u.jsx)(at,{item:e}),t.length!==r+1&&(0,u.jsx)(ot,{})]},r)))})})}function ct(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(nt,{columns:t}):(0,u.jsx)(it,{links:t})}var st=r(21122);const lt={footerLogoLink:"footerLogoLink_BH7S"};function ut(e){let{logo:t}=e;const{withBaseUrl:r}=(0,ee.hH)(),n={light:r(t.src),dark:r(t.srcDark??t.src)};return(0,u.jsx)(st.A,{className:(0,o.A)("footer__logo",t.className),alt:t.alt,sources:n,width:t.width,height:t.height,style:t.style})}function pt(e){let{logo:t}=e;return t.href?(0,u.jsx)(X.A,{href:t.href,className:lt.footerLogoLink,target:t.target,children:(0,u.jsx)(ut,{logo:t})}):(0,u.jsx)(ut,{logo:t})}function dt(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ft(e){let{style:t,links:r,logo:n,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.A)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[r,(n||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[n&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:n}),a]})]})})}function mt(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:r,logo:n,style:o}=e;return(0,u.jsx)(ft,{style:o,links:r&&r.length>0&&(0,u.jsx)(ct,{links:r}),logo:n&&(0,u.jsx)(pt,{logo:n}),copyright:t&&(0,u.jsx)(dt,{copyright:t})})}const ht=n.memo(mt),gt=(0,j.fM)([I.a,k.o,z.Tv,ze.VQ,i.Jx,function(e){let{children:t}=e;return(0,u.jsx)(R.y_,{children:(0,u.jsx)(L.e,{children:(0,u.jsx)(P,{children:t})})})}]);function bt(e){let{children:t}=e;return(0,u.jsx)(gt,{children:t})}var vt=r(51107);function yt(e){let{error:t,tryAgain:r}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(vt.A,{as:"h1",className:"hero__title",children:(0,u.jsx)(s.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Ue,{onClick:r,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Qe,{error:t})})]})})})}const wt={mainWrapper:"mainWrapper_z2l0"};function kt(e){const{children:t,noFooter:r,wrapperClassName:n,title:c,description:s}=e;return(0,b.J)(),(0,u.jsxs)(bt,{children:[(0,u.jsx)(i.be,{title:c,description:s}),(0,u.jsx)(y,{}),(0,u.jsx)(T,{}),(0,u.jsx)(Xe,{}),(0,u.jsx)("div",{id:p,className:(0,o.A)(g.G.wrapper.main,wt.mainWrapper,n),children:(0,u.jsx)(a.A,{fallback:e=>(0,u.jsx)(yt,{...e}),children:t})}),!r&&(0,u.jsx)(ht,{})]})}},23465:(e,t,r)=>{"use strict";r.d(t,{A:()=>u});r(96540);var n=r(28774),o=r(86025),a=r(44586),i=r(6342),c=r(21122),s=r(74848);function l(e){let{logo:t,alt:r,imageClassName:n}=e;const a={light:(0,o.Ay)(t.src),dark:(0,o.Ay)(t.srcDark||t.src)},i=(0,s.jsx)(c.A,{className:t.className,sources:a,height:t.height,width:t.width,alt:r,style:t.style});return n?(0,s.jsx)("div",{className:n,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.A)(),{navbar:{title:r,logo:c}}=(0,i.p)(),{imageClassName:u,titleClassName:p,...d}=e,f=(0,o.Ay)(c?.href||"/"),m=r?"":t,h=c?.alt??m;return(0,s.jsxs)(n.A,{to:f,...d,...c?.target&&{target:c.target},children:[c&&(0,s.jsx)(l,{logo:c,alt:h,imageClassName:u}),null!=r&&(0,s.jsx)("b",{className:p,children:r})]})}},41463:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});r(96540);var n=r(5260),o=r(74848);function a(e){let{locale:t,version:r,tag:a}=e;const i=t;return(0,o.jsxs)(n.A,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),r&&(0,o.jsx)("meta",{name:"docusaurus_version",content:r}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),r&&(0,o.jsx)("meta",{name:"docsearch:version",content:r}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},21122:(e,t,r)=>{"use strict";r.d(t,{A:()=>u});var n=r(96540),o=r(34164),a=r(92303),i=r(95293);const c={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=r(74848);function l(e){let{className:t,children:r}=e;const l=(0,a.A)(),{colorMode:u}=(0,i.G)();return(0,s.jsx)(s.Fragment,{children:(l?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=r({theme:e,className:(0,o.A)(t,c.themedComponent,c[`themedComponent--${e}`])});return(0,s.jsx)(n.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:r,alt:n,...o}=e;return(0,s.jsx)(l,{className:r,children:e=>{let{theme:r,className:a}=e;return(0,s.jsx)("img",{src:t[r],alt:n,className:a,...o})}})}},41422:(e,t,r)=>{"use strict";r.d(t,{N:()=>b,u:()=>l});var n=r(96540),o=r(38193),a=r(205),i=r(53109),c=r(74848);const s="ease-in-out";function l(e){let{initialState:t}=e;const[r,o]=(0,n.useState)(t??!1),a=(0,n.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:r,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},p={display:"block",overflow:"visible",height:"auto"};function d(e,t){const r=t?u:p;e.style.display=r.display,e.style.overflow=r.overflow,e.style.height=r.height}function f(e){let{collapsibleRef:t,collapsed:r,animation:o}=e;const a=(0,n.useRef)(!1);(0,n.useEffect)((()=>{const e=t.current;function n(){const t=e.scrollHeight,r=o?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${r}ms ${o?.easing??s}`,height:`${t}px`}}function c(){const t=n();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,r),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{r?(c(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{c()})))}));return()=>cancelAnimationFrame(t)}()}),[t,r,o])}function m(e){if(!o.A.canUseDOM)return e?u:p}function h(e){let{as:t="div",collapsed:r,children:o,animation:a,onCollapseTransitionEnd:i,className:s,disableSSRStyle:l}=e;const u=(0,n.useRef)(null);return f({collapsibleRef:u,collapsed:r,animation:a}),(0,c.jsx)(t,{ref:u,style:l?void 0:m(r),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,r),i?.(r))},className:s,children:o})}function g(e){let{collapsed:t,...r}=e;const[o,i]=(0,n.useState)(!t),[s,l]=(0,n.useState)(t);return(0,a.A)((()=>{t||i(!0)}),[t]),(0,a.A)((()=>{o&&l(t)}),[o,t]),o?(0,c.jsx)(h,{...r,collapsed:s}):null}function b(e){let{lazy:t,...r}=e;const n=t?g:h;return(0,c.jsx)(n,{...r})}},65041:(e,t,r)=>{"use strict";r.d(t,{M:()=>h,o:()=>m});var n=r(96540),o=r(92303),a=r(70679),i=r(89532),c=r(6342),s=r(74848);const l=(0,a.Wf)("docusaurus.announcement.dismiss"),u=(0,a.Wf)("docusaurus.announcement.id"),p=()=>"true"===l.get(),d=e=>l.set(String(e)),f=n.createContext(null);function m(e){let{children:t}=e;const r=function(){const{announcementBar:e}=(0,c.p)(),t=(0,o.A)(),[r,a]=(0,n.useState)((()=>!!t&&p()));(0,n.useEffect)((()=>{a(p())}),[]);const i=(0,n.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,n.useEffect)((()=>{if(!e)return;const{id:t}=e;let r=u.get();"annoucement-bar"===r&&(r="announcement-bar");const n=t!==r;u.set(t),n&&d(!1),!n&&p()||a(!1)}),[e]),(0,n.useMemo)((()=>({isActive:!!e&&!r,close:i})),[e,r,i])}();return(0,s.jsx)(f.Provider,{value:r,children:t})}function h(){const e=(0,n.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},95293:(e,t,r)=>{"use strict";r.d(t,{G:()=>b,a:()=>g});var n=r(96540),o=r(38193),a=r(89532),i=r(70679),c=r(6342),s=r(74848);const l=n.createContext(void 0),u="theme",p=(0,i.Wf)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,m=e=>o.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),h=e=>{p.set(f(e))};function g(e){let{children:t}=e;const r=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:r}}=(0,c.p)(),[o,a]=(0,n.useState)(m(e));(0,n.useEffect)((()=>{t&&p.del()}),[t]);const i=(0,n.useCallback)((function(t,n){void 0===n&&(n={});const{persist:o=!0}=n;t?(a(t),o&&h(t)):(a(r?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),p.del())}),[r,e]);(0,n.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,n.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=p.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,n.useRef)(!1);return(0,n.useEffect)((()=>{if(t&&!r)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(n),()=>e.removeListener(n)}),[i,t,r]),(0,n.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return(0,s.jsx)(l.Provider,{value:r,children:t})}function b(){const e=(0,n.useContext)(l);if(null==e)throw new a.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},55597:(e,t,r)=>{"use strict";r.d(t,{VQ:()=>b,g1:()=>y});var n=r(96540),o=r(48295),a=r(17065),i=r(6342),c=r(84142),s=r(89532),l=r(70679),u=r(74848);const p=e=>`docs-preferred-version-${e}`,d={save:(e,t,r)=>{(0,l.Wf)(p(e),{persistence:t}).set(r)},read:(e,t)=>(0,l.Wf)(p(e),{persistence:t}).get(),clear:(e,t)=>{(0,l.Wf)(p(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=n.createContext(null);function h(){const e=(0,o.Gy)(),t=(0,i.p)().docs.versionPersistence,r=(0,n.useMemo)((()=>Object.keys(e)),[e]),[a,c]=(0,n.useState)((()=>f(r)));(0,n.useEffect)((()=>{c(function(e){let{pluginIds:t,versionPersistence:r,allDocsData:n}=e;function o(e){const t=d.read(e,r);return n[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,r),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:r}))}),[e,t,r]);return[a,(0,n.useMemo)((()=>({savePreferredVersion:function(e,r){d.save(e,t,r),c((t=>({...t,[e]:{preferredVersionName:r}})))}})),[t])]}function g(e){let{children:t}=e;const r=h();return(0,u.jsx)(m.Provider,{value:r,children:t})}function b(e){let{children:t}=e;return c.C5?(0,u.jsx)(g,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function v(){const e=(0,n.useContext)(m);if(!e)throw new s.dV("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=a.W);const t=(0,o.ht)(e),[r,i]=v(),{preferredVersionName:c}=r[e];return{preferredVersion:t.versions.find((e=>e.name===c))??null,savePreferredVersionName:(0,n.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},26588:(e,t,r)=>{"use strict";r.d(t,{V:()=>s,t:()=>l});var n=r(96540),o=r(89532),a=r(74848);const i=Symbol("EmptyContext"),c=n.createContext(i);function s(e){let{children:t,name:r,items:o}=e;const i=(0,n.useMemo)((()=>r&&o?{name:r,items:o}:null),[r,o]);return(0,a.jsx)(c.Provider,{value:i,children:t})}function l(){const e=(0,n.useContext)(c);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},32252:(e,t,r)=>{"use strict";r.d(t,{n:()=>c,r:()=>s});var n=r(96540),o=r(89532),a=r(74848);const i=n.createContext(null);function c(e){let{children:t,version:r}=e;return(0,a.jsx)(i.Provider,{value:r,children:t})}function s(){const e=(0,n.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},22069:(e,t,r)=>{"use strict";r.d(t,{M:()=>f,e:()=>d});var n=r(96540),o=r(75600),a=r(24581),i=r(57485),c=r(6342),s=r(89532),l=r(74848);const u=n.createContext(void 0);function p(){const e=function(){const e=(0,o.YL)(),{items:t}=(0,c.p)().navbar;return 0===t.length&&!e.component}(),t=(0,a.l)(),r=!e&&"mobile"===t,[s,l]=(0,n.useState)(!1);(0,i.$Z)((()=>{if(s)return l(!1),!1}));const u=(0,n.useCallback)((()=>{l((e=>!e))}),[]);return(0,n.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,n.useMemo)((()=>({disabled:e,shouldRender:r,toggle:u,shown:s})),[e,r,u,s])}function d(e){let{children:t}=e;const r=p();return(0,l.jsx)(u.Provider,{value:r,children:t})}function f(){const e=n.useContext(u);if(void 0===e)throw new s.dV("NavbarMobileSidebarProvider");return e}},75600:(e,t,r)=>{"use strict";r.d(t,{GX:()=>l,YL:()=>s,y_:()=>c});var n=r(96540),o=r(89532),a=r(74848);const i=n.createContext(null);function c(e){let{children:t}=e;const r=(0,n.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:r,children:t})}function s(){const e=(0,n.useContext)(i);if(!e)throw new o.dV("NavbarSecondaryMenuContentProvider");return e[0]}function l(e){let{component:t,props:r}=e;const a=(0,n.useContext)(i);if(!a)throw new o.dV("NavbarSecondaryMenuContentProvider");const[,c]=a,s=(0,o.Be)(r);return(0,n.useEffect)((()=>{c({component:t,props:s})}),[c,t,s]),(0,n.useEffect)((()=>()=>c({component:null,props:null})),[c]),null}},14090:(e,t,r)=>{"use strict";r.d(t,{w:()=>o,J:()=>a});var n=r(96540);const o="navigation-with-keyboard";function a(){(0,n.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},24581:(e,t,r)=>{"use strict";r.d(t,{l:()=>c});var n=r(96540),o=r(38193);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function c(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[r,c]=(0,n.useState)((()=>"ssr"));return(0,n.useEffect)((()=>{function e(){c(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),r}},17559:(e,t,r)=>{"use strict";r.d(t,{G:()=>n});const n={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},53109:(e,t,r)=>{"use strict";function n(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}r.d(t,{O:()=>n})},84142:(e,t,r)=>{"use strict";r.d(t,{B5:()=>x,C5:()=>d,Nr:()=>f,OF:()=>w,QB:()=>C,Vd:()=>k,Y:()=>v,fW:()=>S,w8:()=>g});var n=r(96540),o=r(56347),a=r(22831),i=r(48295),c=r(55597),s=r(32252),l=r(26588),u=r(31682),p=r(99169);const d=!!i.Gy;function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}const m=(e,t)=>void 0!==e&&(0,p.ys)(e,t),h=(e,t)=>e.some((e=>g(e,t)));function g(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||h(e.items,t))}function b(e,t){switch(e.type){case"category":return g(e,t)||e.items.some((e=>b(e,t)));case"link":return!e.unlisted||g(e,t);default:return!0}}function v(e,t){return(0,n.useMemo)((()=>e.filter((e=>b(e,t)))),[e,t])}function y(e){let{sidebarItems:t,pathname:r,onlyCategories:n=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,p.ys)(a.href,r)||e(a.items))||"link"===a.type&&(0,p.ys)(a.href,r)){return n&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function w(){const e=(0,l.t)(),{pathname:t}=(0,o.zy)(),r=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==r&&e?y({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:r}=(0,c.g1)(e),o=(0,i.r7)(e);return(0,n.useMemo)((()=>(0,u.s)([t,r,o].filter(Boolean))),[t,r,o])}function S(e,t){const r=k(t);return(0,n.useMemo)((()=>{const t=r.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),n=t.find((t=>t[0]===e));if(!n)throw new Error(`Can't find any sidebar with id "${e}" in version${r.length>1?"s":""} ${r.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return n[1]}),[e,r])}function C(e,t){const r=k(t);return(0,n.useMemo)((()=>{const t=r.flatMap((e=>e.docs)),n=t.find((t=>t.id===e));if(!n){if(r.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${r.length>1?"s":""} "${r.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.s)(t.map((e=>e.id))).join("\n- ")}`)}return n}),[e,r])}function x(e){let{route:t}=e;const r=(0,o.zy)(),n=(0,s.r)(),i=t.routes,c=i.find((e=>(0,o.B6)(r.pathname,e)));if(!c)return null;const l=c.sidebar,u=l?n.docsSidebars[l]:void 0;return{docElement:(0,a.v)(i),sidebarName:l,sidebarItems:u}}},57485:(e,t,r)=>{"use strict";r.d(t,{$Z:()=>i,aZ:()=>s});var n=r(96540),o=r(56347),a=r(89532);function i(e){!function(e){const t=(0,o.W6)(),r=(0,a._q)(e);(0,n.useEffect)((()=>t.block(((e,t)=>r(e,t)))),[t,r])}(((t,r)=>{if("POP"===r)return e(t,r)}))}function c(e){const t=(0,o.W6)();return(0,n.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function s(e){return c((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},31682:(e,t,r)=>{"use strict";function n(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((r,n)=>e.findIndex((e=>t(e,r)))!==n))}function o(e){return Array.from(new Set(e))}r.d(t,{X:()=>n,s:()=>o})},1003:(e,t,r)=>{"use strict";r.d(t,{e3:()=>f,be:()=>p,Jx:()=>m});var n=r(96540),o=r(34164),a=r(5260),i=r(53102);function c(){const e=n.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=r(86025),l=r(44586);var u=r(74848);function p(e){let{title:t,description:r,keywords:n,image:o,children:i}=e;const c=function(e){const{siteConfig:t}=(0,l.A)(),{title:r,titleDelimiter:n}=t;return e?.trim().length?`${e.trim()} ${n} ${r}`:r}(t),{withBaseUrl:p}=(0,s.hH)(),d=o?p(o,{absolute:!0}):void 0;return(0,u.jsxs)(a.A,{children:[t&&(0,u.jsx)("title",{children:c}),t&&(0,u.jsx)("meta",{property:"og:title",content:c}),r&&(0,u.jsx)("meta",{name:"description",content:r}),r&&(0,u.jsx)("meta",{property:"og:description",content:r}),n&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(n)?n.join(","):n}),d&&(0,u.jsx)("meta",{property:"og:image",content:d}),d&&(0,u.jsx)("meta",{name:"twitter:image",content:d}),i]})}const d=n.createContext(void 0);function f(e){let{className:t,children:r}=e;const i=n.useContext(d),c=(0,o.A)(i,t);return(0,u.jsxs)(d.Provider,{value:c,children:[(0,u.jsx)(a.A,{children:(0,u.jsx)("html",{className:c})}),r]})}function m(e){let{children:t}=e;const r=c(),n=`plugin-${r.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${r.plugin.id}`;return(0,u.jsx)(f,{className:(0,o.A)(n,a),children:t})}},89532:(e,t,r)=>{"use strict";r.d(t,{Be:()=>l,ZC:()=>c,_q:()=>i,dV:()=>s,fM:()=>u});var n=r(96540),o=r(205),a=r(74848);function i(e){const t=(0,n.useRef)(e);return(0,o.A)((()=>{t.current=e}),[e]),(0,n.useCallback)((function(){return t.current(...arguments)}),[])}function c(e){const t=(0,n.useRef)();return(0,o.A)((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function l(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,n.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:r}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),r)})}}},99169:(e,t,r)=>{"use strict";r.d(t,{Dt:()=>c,ys:()=>i});var n=r(96540),o=r(35947),a=r(44586);function i(e,t){const r=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return r(e)===r(t)}function c(){const{baseUrl:e}=(0,a.A)().siteConfig;return(0,n.useMemo)((()=>function(e){let{baseUrl:t,routes:r}=e;function n(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(n)||e(t.filter(o).flatMap((e=>e.routes??[])))}(r)}({routes:o.A,baseUrl:e})),[e])}},23104:(e,t,r)=>{"use strict";r.d(t,{Mq:()=>f,Tv:()=>u,a_:()=>m,gk:()=>h});var n=r(96540),o=r(38193),a=r(92303),i=r(205),c=r(89532),s=r(74848);const l=n.createContext(void 0);function u(e){let{children:t}=e;const r=function(){const e=(0,n.useRef)(!0);return(0,n.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,s.jsx)(l.Provider,{value:r,children:t})}function p(){const e=(0,n.useContext)(l);if(null==e)throw new c.dV("ScrollControllerProvider");return e}const d=()=>o.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:r}=p(),o=(0,n.useRef)(d()),a=(0,c._q)(e);(0,n.useEffect)((()=>{const e=()=>{if(!r.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,r,...t])}function m(){const e=p(),t=function(){const e=(0,n.useRef)({elem:null,top:0}),t=(0,n.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),r=(0,n.useCallback)((()=>{const{current:{elem:t,top:r}}=e;if(!t)return{restored:!1};const n=t.getBoundingClientRect().top-r;return n&&window.scrollBy({left:0,top:n}),e.current={elem:null,top:0},{restored:0!==n}}),[]);return(0,n.useMemo)((()=>({save:t,restore:r})),[r,t])}(),r=(0,n.useRef)(void 0),o=(0,n.useCallback)((n=>{t.save(n),e.disableScrollEvents(),r.current=()=>{const{restored:n}=t.restore();if(r.current=void 0,n){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.A)((()=>{queueMicrotask((()=>r.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function h(){const e=(0,n.useRef)(null),t=(0,a.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:r=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(r):function(e){let t=null;const r=document.documentElement.scrollTop>e;return function n(){const o=document.documentElement.scrollTop;(r&&o>e||!r&&o<e)&&(t=requestAnimationFrame(n),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(r)},cancelScroll:()=>e.current?.()}}},2967:(e,t,r)=>{"use strict";r.d(t,{Cy:()=>n,tU:()=>o});r(44586);const n="default";function o(e,t){return`docs-${e}-${t}`}},70679:(e,t,r)=>{"use strict";r.d(t,{Wf:()=>u,Dv:()=>p});var n=r(96540);const o=JSON.parse('{"N":"localStorage","M":""}'),a=o.N;function i(e){let{key:t,oldValue:r,newValue:n,storage:o}=e;if(r===n)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,r,n,window.location.href,o),window.dispatchEvent(a)}function c(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(r){return t=r,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){const r=`${e}${o.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(r);const n=c(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(r)}catch(e){return console.error(`Docusaurus storage error, can't get key=${r}`,e),null}},set:e=>{try{const t=n.getItem(r);n.setItem(r,e),i({key:r,oldValue:t,newValue:e,storage:n})}catch(t){console.error(`Docusaurus storage error, can't set ${r}=${e}`,t)}},del:()=>{try{const e=n.getItem(r);n.removeItem(r),i({key:r,oldValue:e,newValue:null,storage:n})}catch(e){console.error(`Docusaurus storage error, can't delete key=${r}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===n&&t.key===r&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${r}`,t),()=>{}}}}}function p(e,t){const r=(0,n.useRef)((()=>null===e?l:u(e,t))).current(),o=(0,n.useCallback)((e=>"undefined"==typeof window?()=>{}:r.listen(e)),[r]);return[(0,n.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:r.get()),(()=>null)),r]}},32131:(e,t,r)=>{"use strict";r.d(t,{o:()=>i});var n=r(44586),o=r(56347),a=r(70440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:r},i18n:{defaultLocale:i,currentLocale:c}}=(0,n.A)(),{pathname:s}=(0,o.zy)(),l=(0,a.applyTrailingSlash)(s,{trailingSlash:r,baseUrl:e}),u=c===i?e:e.replace(`/${c}/`,"/"),p=l.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:n}=e;return`${n?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(r)}${p}`}}}},75062:(e,t,r)=>{"use strict";r.d(t,{$:()=>i});var n=r(96540),o=r(56347),a=r(89532);function i(e){const t=(0,o.zy)(),r=(0,a.ZC)(t),i=(0,a._q)(e);(0,n.useEffect)((()=>{r&&t!==r&&i({location:t,previousLocation:r})}),[i,t,r])}},6342:(e,t,r)=>{"use strict";r.d(t,{p:()=>o});var n=r(44586);function o(){return(0,n.A)().siteConfig.themeConfig}},12983:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;const n=r(42566);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,n.removeSuffix)(e,"/")}t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:r,baseUrl:n}=t;if(e.startsWith("#"))return e;if(void 0===r)return e;const[i]=e.split(/[#?]/),c="/"===i||i===n?i:(s=i,r?o(s):a(s));var s;return e.replace(i,c)},t.addLeadingSlash=function(e){return(0,n.addPrefix)(e,"/")},t.removeTrailingSlash=a},80253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},70440:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=r(12983);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return n(o).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return o.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return o.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return o.removeTrailingSlash}});var a=r(42566);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return a.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return a.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return a.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return a.removePrefix}});var i=r(80253);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},42566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},31513:(e,t,r)=>{"use strict";r.d(t,{zR:()=>w,TM:()=>E,yJ:()=>f,sC:()=>T,AO:()=>d});var n=r(58168);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var r=t,n=r+1,o=e.length;n<o;r+=1,n+=1)e[r]=e[n];e.pop()}const i=function(e,t){void 0===t&&(t="");var r,n=e&&e.split("/")||[],i=t&&t.split("/")||[],c=e&&o(e),s=t&&o(t),l=c||s;if(e&&o(e)?i=n:n.length&&(i.pop(),i=i.concat(n)),!i.length)return"/";if(i.length){var u=i[i.length-1];r="."===u||".."===u||""===u}else r=!1;for(var p=0,d=i.length;d>=0;d--){var f=i[d];"."===f?a(i,d):".."===f?(a(i,d),p++):p&&(a(i,d),p--)}if(!l)for(;p--;p)i.unshift("..");!l||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return r&&"/"!==m.substr(-1)&&(m+="/"),m};var c=r(11561);function s(e){return"/"===e.charAt(0)?e:"/"+e}function l(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function d(e){var t=e.pathname,r=e.search,n=e.hash,o=t||"/";return r&&"?"!==r&&(o+="?"===r.charAt(0)?r:"?"+r),n&&"#"!==n&&(o+="#"===n.charAt(0)?n:"#"+n),o}function f(e,t,r,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",r="",n="",o=t.indexOf("#");-1!==o&&(n=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(r=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===r?"":r,hash:"#"===n?"":n}}(e),a.state=t):(void 0===(a=(0,n.A)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(c){throw c instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):c}return r&&(a.key=r),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,r,n,o){if(null!=e){var a="function"==typeof e?e(t,r):e;"string"==typeof a?"function"==typeof n?n(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var r=!0;function n(){r&&e.apply(void 0,arguments)}return t.push(n),function(){r=!1,t=t.filter((function(e){return e!==n}))}},notifyListeners:function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];t.forEach((function(e){return e.apply(void 0,r)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var b="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,c.A)(!1);var t,r=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,l=i.forceRefresh,w=void 0!==l&&l,k=i.getUserConfirmation,S=void 0===k?g:k,C=i.keyLength,x=void 0===C?6:C,_=e.basename?p(s(e.basename)):"";function E(e){var t=e||{},r=t.key,n=t.state,o=window.location,a=o.pathname+o.search+o.hash;return _&&(a=u(a,_)),f(a,n,r)}function A(){return Math.random().toString(36).substr(2,x)}var T=m();function L(e){(0,n.A)(q,e),q.length=r.length,T.notifyListeners(q.location,q.action)}function z(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||N(E(e.state))}function j(){N(E(y()))}var R=!1;function N(e){if(R)R=!1,L();else{T.confirmTransitionTo(e,"POP",S,(function(t){t?L({action:"POP",location:e}):function(e){var t=q.location,r=O.indexOf(t.key);-1===r&&(r=0);var n=O.indexOf(e.key);-1===n&&(n=0);var o=r-n;o&&(R=!0,M(o))}(e)}))}}var P=E(y()),O=[P.key];function D(e){return _+d(e)}function M(e){r.go(e)}var I=0;function F(e){1===(I+=e)&&1===e?(window.addEventListener(b,z),a&&window.addEventListener(v,j)):0===I&&(window.removeEventListener(b,z),a&&window.removeEventListener(v,j))}var B=!1;var q={length:r.length,action:"POP",location:P,createHref:D,push:function(e,t){var n="PUSH",a=f(e,t,A(),q.location);T.confirmTransitionTo(a,n,S,(function(e){if(e){var t=D(a),i=a.key,c=a.state;if(o)if(r.pushState({key:i,state:c},null,t),w)window.location.href=t;else{var s=O.indexOf(q.location.key),l=O.slice(0,s+1);l.push(a.key),O=l,L({action:n,location:a})}else window.location.href=t}}))},replace:function(e,t){var n="REPLACE",a=f(e,t,A(),q.location);T.confirmTransitionTo(a,n,S,(function(e){if(e){var t=D(a),i=a.key,c=a.state;if(o)if(r.replaceState({key:i,state:c},null,t),w)window.location.replace(t);else{var s=O.indexOf(q.location.key);-1!==s&&(O[s]=a.key),L({action:n,location:a})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=T.appendListener(e);return F(1),function(){F(-1),t()}}};return q}var k="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+l(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:l,decodePath:s},slash:{encodePath:s,decodePath:s}};function C(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function x(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function _(e){window.location.replace(C(window.location.href)+"#"+e)}function E(e){void 0===e&&(e={}),h||(0,c.A)(!1);var t=window.history,r=(window.navigator.userAgent.indexOf("Firefox"),e),o=r.getUserConfirmation,a=void 0===o?g:o,i=r.hashType,l=void 0===i?"slash":i,b=e.basename?p(s(e.basename)):"",v=S[l],y=v.encodePath,w=v.decodePath;function E(){var e=w(x());return b&&(e=u(e,b)),f(e)}var A=m();function T(e){(0,n.A)(B,e),B.length=t.length,A.notifyListeners(B.location,B.action)}var L=!1,z=null;function j(){var e,t,r=x(),n=y(r);if(r!==n)_(n);else{var o=E(),i=B.location;if(!L&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(z===d(o))return;z=null,function(e){if(L)L=!1,T();else{var t="POP";A.confirmTransitionTo(e,t,a,(function(r){r?T({action:t,location:e}):function(e){var t=B.location,r=O.lastIndexOf(d(t));-1===r&&(r=0);var n=O.lastIndexOf(d(e));-1===n&&(n=0);var o=r-n;o&&(L=!0,D(o))}(e)}))}}(o)}}var R=x(),N=y(R);R!==N&&_(N);var P=E(),O=[d(P)];function D(e){t.go(e)}var M=0;function I(e){1===(M+=e)&&1===e?window.addEventListener(k,j):0===M&&window.removeEventListener(k,j)}var F=!1;var B={length:t.length,action:"POP",location:P,createHref:function(e){var t=document.querySelector("base"),r="";return t&&t.getAttribute("href")&&(r=C(window.location.href)),r+"#"+y(b+d(e))},push:function(e,t){var r="PUSH",n=f(e,void 0,void 0,B.location);A.confirmTransitionTo(n,r,a,(function(e){if(e){var t=d(n),o=y(b+t);if(x()!==o){z=t,function(e){window.location.hash=e}(o);var a=O.lastIndexOf(d(B.location)),i=O.slice(0,a+1);i.push(t),O=i,T({action:r,location:n})}else T()}}))},replace:function(e,t){var r="REPLACE",n=f(e,void 0,void 0,B.location);A.confirmTransitionTo(n,r,a,(function(e){if(e){var t=d(n),o=y(b+t);x()!==o&&(z=t,_(o));var a=O.indexOf(d(B.location));-1!==a&&(O[a]=t),T({action:r,location:n})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=A.setPrompt(e);return F||(I(1),F=!0),function(){return F&&(F=!1,I(-1)),t()}},listen:function(e){var t=A.appendListener(e);return I(1),function(){I(-1),t()}}};return B}function A(e,t,r){return Math.min(Math.max(e,t),r)}function T(e){void 0===e&&(e={});var t=e,r=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,c=void 0===i?0:i,s=t.keyLength,l=void 0===s?6:s,u=m();function p(e){(0,n.A)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,l)}var g=A(c,0,a.length-1),b=a.map((function(e){return f(e,void 0,"string"==typeof e?h():e.key||h())})),v=d;function y(e){var t=A(w.index+e,0,w.entries.length-1),n=w.entries[t];u.confirmTransitionTo(n,"POP",r,(function(e){e?p({action:"POP",location:n,index:t}):p()}))}var w={length:b.length,action:"POP",location:b[g],index:g,entries:b,createHref:v,push:function(e,t){var n="PUSH",o=f(e,t,h(),w.location);u.confirmTransitionTo(o,n,r,(function(e){if(e){var t=w.index+1,r=w.entries.slice(0);r.length>t?r.splice(t,r.length-t,o):r.push(o),p({action:n,location:o,index:t,entries:r})}}))},replace:function(e,t){var n="REPLACE",o=f(e,t,h(),w.location);u.confirmTransitionTo(o,n,r,(function(e){e&&(w.entries[w.index]=o,p({action:n,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},4146:(e,t,r)=>{"use strict";var n=r(44363),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},c={};function s(e){return n.isMemo(e)?i:c[e.$$typeof]||o}c[n.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},c[n.Memo]=i;var l=Object.defineProperty,u=Object.getOwnPropertyNames,p=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,r,n){if("string"!=typeof r){if(m){var o=f(r);o&&o!==m&&e(t,o,n)}var i=u(r);p&&(i=i.concat(p(r)));for(var c=s(t),h=s(r),g=0;g<i.length;++g){var b=i[g];if(!(a[b]||n&&n[b]||h&&h[b]||c&&c[b])){var v=d(r,b);try{l(t,b,v)}catch(y){}}}}return t}},20311:e=>{"use strict";e.exports=function(e,t,r,n,o,a,i,c){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[r,n,o,a,i,c],u=0;(s=new Error(t.replace(/%s/g,(function(){return l[u++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},64634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},689:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},r=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},o=function(){function e(r){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=r,this.iframes=n,this.exclude=o,this.iframesTimeout=a}return r(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var r=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||r||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},n=void 0;try{var o=e.contentWindow;if(n=o.document,!o||!n)throw new Error("iframe inaccessible")}catch(a){r()}n&&t(n)}},{key:"isIframeBlank",value:function(e){var t="about:blank",r=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&r!==t&&r}},{key:"observeIframeLoad",value:function(e,t,r){var n=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{n.isIframeBlank(e)||(e.removeEventListener("load",i),n.getIframeContents(e,t,r))}catch(c){r()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,r){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,r):this.getIframeContents(e,t,r):this.observeIframeLoad(e,t,r)}catch(n){r()}}},{key:"waitForIframes",value:function(e,t){var r=this,n=0;this.forEachIframe(e,(function(){return!0}),(function(e){n++,r.waitForIframes(e.querySelector("html"),(function(){--n||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,r,n){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),c=i.length,s=0;i=Array.prototype.slice.call(i);var l=function(){--c<=0&&a(s)};c||l(),i.forEach((function(t){e.matches(t,o.exclude)?l():o.onIframeReady(t,(function(e){r(t)&&(s++,n(e)),l()}),l)}))}},{key:"createIterator",value:function(e,t,r){return document.createNodeIterator(e,t,r,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,r){if(e.compareDocumentPosition(r)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(r)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,r,n){var o=!1,a=!1;return n.forEach((function(e,t){e.val===r&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,r)?(!1!==o||a?!1===o||a||(n[o].handled=!0):n.push({val:r,handled:!0}),!0):(!1===o&&n.push({val:r,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,r,n){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,r,n)}))}))}},{key:"iterateThroughNodes",value:function(e,t,r,n,o){for(var a=this,i=this.createIterator(t,e,n),c=[],s=[],l=void 0,u=void 0,p=function(){var e=a.getIteratorNode(i);return u=e.prevNode,l=e.node};p();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(l,u,e,c)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return s.push(e)}),n)})),s.push(l);s.forEach((function(e){r(e)})),this.iframes&&this.handleOpenIframes(c,e,r,n),o()}},{key:"forEachNode",value:function(e,t,r){var n=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var c=function(){n.iterateThroughNodes(e,a,t,r,(function(){--i<=0&&o()}))};n.iframes?n.waitForIframes(a,c):c()}))}}],[{key:"matches",value:function(e,t){var r="string"==typeof t?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){var o=!1;return r.every((function(t){return!n.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var r=window.navigator.userAgent;(r.indexOf("MSIE")>-1||r.indexOf("Trident")>-1)&&(this.ie=!0)}return r(a,[{key:"log",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",n=this.opt.log;this.opt.debug&&"object"===(void 0===n?"undefined":e(n))&&"function"==typeof n[r]&&n[r]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,r=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),c="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==c&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(c)+")","gm"+r),n+"("+this.processSynomyms(i)+"|"+this.processSynomyms(c)+")"+n))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,r){var n=r.charAt(t+1);return/[(|)\\]/.test(n)||""===n?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],r=this.opt.ignorePunctuation;return Array.isArray(r)&&r.length&&t.push(this.escapeStr(r.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",r=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],n=[];return e.split("").forEach((function(o){r.every((function(r){if(-1!==r.indexOf(o)){if(n.indexOf(r)>-1)return!1;e=e.replace(new RegExp("["+r+"]","gm"+t),"["+r+"]"),n.push(r)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,r="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",n=this.opt.accuracy,o="string"==typeof n?n:n.value,a="string"==typeof n?[]:n.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(r)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,r=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===r.indexOf(e)&&r.push(e)})):e.trim()&&-1===r.indexOf(e)&&r.push(e)})),{keywords:r.sort((function(e,t){return t.length-e.length})),length:r.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var r=[],n=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,n),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,r.push(e),n=i)})),r}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var r=void 0,n=void 0,o=!1;return e&&void 0!==e.start?(n=(r=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-r>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:r,end:n,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,r){var n=void 0,o=!0,a=r.length,i=t-a,c=parseInt(e.start,10)-i;return(n=(c=c>a?a:c)+parseInt(e.length,10))>a&&(n=a,this.log("End range automatically set to the max value of "+a)),c<0||n-c<0||c>a||n>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===r.substring(c,n).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:c,end:n,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,r="",n=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){n.push({start:r.length,end:(r+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:r,nodes:n})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,r){var n=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(r-t),i=document.createElement(n);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,r,n,o){var a=this;e.nodes.every((function(i,c){var s=e.nodes[c+1];if(void 0===s||s.start>t){if(!n(i.node))return!1;var l=t-i.start,u=(r>i.end?i.end:r)-i.start,p=e.value.substr(0,i.start),d=e.value.substr(u+i.start);if(i.node=a.wrapRangeInTextNode(i.node,l,u),e.value=p+d,e.nodes.forEach((function(t,r){r>=c&&(e.nodes[r].start>0&&r!==c&&(e.nodes[r].start-=u),e.nodes[r].end-=u)})),r-=u,o(i.node.previousSibling,i.start),!(r>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,r,n,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(r(o[i],t)){var c=o.index;if(0!==i)for(var s=1;s<i;s++)c+=o[s].length;t=a.wrapRangeInTextNode(t,c,c+o[i].length),n(t.previousSibling),e.lastIndex=0}})),o()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,r,n,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){for(var c=void 0;null!==(c=e.exec(t.value))&&""!==c[i];){var s=c.index;if(0!==i)for(var l=1;l<i;l++)s+=c[l].length;var u=s+c[i].length;a.wrapRangeInMappedTextNode(t,s,u,(function(e){return r(c[i],e)}),(function(t,r){e.lastIndex=r,n(t)}))}o()}))}},{key:"wrapRangeFromIndex",value:function(e,t,r,n){var o=this;this.getTextNodes((function(a){var i=a.value.length;e.forEach((function(e,n){var c=o.checkWhitespaceRanges(e,i,a.value),s=c.start,l=c.end;c.valid&&o.wrapRangeInMappedTextNode(a,s,l,(function(r){return t(r,e,a.value.substring(s,l),n)}),(function(t){r(t,e)}))})),n()}))}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,r=document.createDocumentFragment();e.firstChild;)r.appendChild(e.removeChild(e.firstChild));t.replaceChild(r,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var r=this;this.opt=t,this.log('Searching with expression "'+e+'"');var n=0,o="wrapMatches",a=function(e){n++,r.opt.each(e)};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),this[o](e,this.opt.ignoreGroups,(function(e,t){return r.opt.filter(t,e,n)}),a,(function(){0===n&&r.opt.noMatch(e),r.opt.done(n)}))}},{key:"mark",value:function(e,t){var r=this;this.opt=t;var n=0,o="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=a.keywords,c=a.length,s=this.opt.caseSensitive?"":"i",l=function e(t){var a=new RegExp(r.createRegExp(t),"gm"+s),l=0;r.log('Searching with expression "'+a+'"'),r[o](a,1,(function(e,o){return r.opt.filter(o,t,n,l)}),(function(e){l++,n++,r.opt.each(e)}),(function(){0===l&&r.opt.noMatch(t),i[c-1]===t?r.opt.done(n):e(i[i.indexOf(t)+1])}))};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),0===c?this.opt.done(n):l(i[0])}},{key:"markRanges",value:function(e,t){var r=this;this.opt=t;var n=0,o=this.checkRanges(e);o&&o.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(o)),this.wrapRangeFromIndex(o,(function(e,t,n,o){return r.opt.filter(e,t,n,o)}),(function(e,t){n++,r.opt.each(e,t)}),(function(){r.opt.done(n)}))):this.opt.done(n)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var r=this.opt.element?this.opt.element:"*";r+="[data-markjs]",this.opt.className&&(r+="."+this.opt.className),this.log('Removal selector "'+r+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,(function(e){t.unwrapMatches(e)}),(function(e){var n=o.matches(e,r),a=t.matchesExclude(e);return!n||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),this.opt.done)}},{key:"opt",set:function(e){this._opt=n({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new o(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();function i(e){var t=this,r=new a(e);return this.mark=function(e,n){return r.mark(e,n),t},this.markRegExp=function(e,n){return r.markRegExp(e,n),t},this.markRanges=function(e,n){return r.markRanges(e,n),t},this.unmark=function(e){return r.unmark(e),t},this}return i}()},10119:(e,t,r)=>{"use strict";r.r(t)},51043:(e,t,r)=>{"use strict";r.r(t)},5947:function(e,t,r){var n,o;n=function(){var e,t,r={version:"0.2.0"},n=r.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,r){return e<t?t:e>r?r:e}function a(e){return 100*(-1+e)}function i(e,t,r){var o;return(o="translate3d"===n.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===n.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+r,o}r.configure=function(e){var t,r;for(t in e)void 0!==(r=e[t])&&e.hasOwnProperty(t)&&(n[t]=r);return this},r.status=null,r.set=function(e){var t=r.isStarted();e=o(e,n.minimum,1),r.status=1===e?null:e;var a=r.render(!t),l=a.querySelector(n.barSelector),u=n.speed,p=n.easing;return a.offsetWidth,c((function(t){""===n.positionUsing&&(n.positionUsing=r.getPositioningCSS()),s(l,i(e,u,p)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){r.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},r.isStarted=function(){return"number"==typeof r.status},r.start=function(){r.status||r.set(0);var e=function(){setTimeout((function(){r.status&&(r.trickle(),e())}),n.trickleSpeed)};return n.trickle&&e(),this},r.done=function(e){return e||r.status?r.inc(.3+.5*Math.random()).set(1):this},r.inc=function(e){var t=r.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),r.set(t)):r.start()},r.trickle=function(){return r.inc(Math.random()*n.trickleRate)},e=0,t=0,r.promise=function(n){return n&&"resolved"!==n.state()?(0===t&&r.start(),e++,t++,n.always((function(){0==--t?(e=0,r.done()):r.set((e-t)/e)})),this):this},r.render=function(e){if(r.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=n.template;var o,i=t.querySelector(n.barSelector),c=e?"-100":a(r.status||0),l=document.querySelector(n.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+c+"%,0,0)"}),n.showSpinner||(o=t.querySelector(n.spinnerSelector))&&f(o),l!=document.body&&u(l,"nprogress-custom-parent"),l.appendChild(t),t},r.remove=function(){p(document.documentElement,"nprogress-busy"),p(document.querySelector(n.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},r.isRendered=function(){return!!document.getElementById("nprogress")},r.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var c=function(){var e=[];function t(){var r=e.shift();r&&r(t)}return function(r){e.push(r),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function r(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function n(t){var r=document.body.style;if(t in r)return t;for(var n,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((n=e[o]+a)in r)return n;return t}function o(e){return e=r(e),t[e]||(t[e]=n(e))}function a(e,t,r){t=o(t),e.style[t]=r}return function(e,t){var r,n,o=arguments;if(2==o.length)for(r in t)void 0!==(n=t[r])&&t.hasOwnProperty(r)&&a(e,r,n);else a(e,o[1],o[2])}}();function l(e,t){return("string"==typeof e?e:d(e)).indexOf(" "+t+" ")>=0}function u(e,t){var r=d(e),n=r+t;l(r,t)||(e.className=n.substring(1))}function p(e,t){var r,n=d(e);l(e,t)&&(r=n.replace(" "+t+" "," "),e.className=r.substring(1,r.length-1))}function d(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return r},void 0===(o="function"==typeof n?n.call(t,r,t,e):n)||(e.exports=o)},35302:(e,t,r)=>{var n=r(64634);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return c(a(e,t),t)},e.exports.tokensToFunction=c,e.exports.tokensToRegExp=d;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var r,n=[],a=0,i=0,c="",u=t&&t.delimiter||"/";null!=(r=o.exec(e));){var p=r[0],d=r[1],f=r.index;if(c+=e.slice(i,f),i=f+p.length,d)c+=d[1];else{var m=e[i],h=r[2],g=r[3],b=r[4],v=r[5],y=r[6],w=r[7];c&&(n.push(c),c="");var k=null!=h&&null!=m&&m!==h,S="+"===y||"*"===y,C="?"===y||"*"===y,x=r[2]||u,_=b||v;n.push({name:g||a++,prefix:h||"",delimiter:x,optional:C,repeat:S,partial:k,asterisk:!!w,pattern:_?l(_):w?".*":"[^"+s(x)+"]+?"})}}return i<e.length&&(c+=e.substr(i)),c&&n.push(c),n}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function c(e,t){for(var r=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(r[o]=new RegExp("^(?:"+e[o].pattern+")$",p(t)));return function(t,o){for(var a="",c=t||{},s=(o||{}).pretty?i:encodeURIComponent,l=0;l<e.length;l++){var u=e[l];if("string"!=typeof u){var p,d=c[u.name];if(null==d){if(u.optional){u.partial&&(a+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(n(d)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(d)+"`");if(0===d.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<d.length;f++){if(p=s(d[f]),!r[l].test(p))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(p)+"`");a+=(0===f?u.prefix:u.delimiter)+p}}else{if(p=u.asterisk?encodeURI(d).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(d),!r[l].test(p))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+p+'"');a+=u.prefix+p}}else a+=u}return a}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function l(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function p(e){return e&&e.sensitive?"":"i"}function d(e,t,r){n(t)||(r=t||r,t=[]);for(var o=(r=r||{}).strict,a=!1!==r.end,i="",c=0;c<e.length;c++){var l=e[c];if("string"==typeof l)i+=s(l);else{var d=s(l.prefix),f="(?:"+l.pattern+")";t.push(l),l.repeat&&(f+="(?:"+d+f+")*"),i+=f=l.optional?l.partial?d+"("+f+")?":"(?:"+d+"("+f+"))?":d+"("+f+")"}}var m=s(r.delimiter||"/"),h=i.slice(-m.length)===m;return o||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&h?"":"(?="+m+"|$)",u(new RegExp("^"+i,p(r)),t)}function f(e,t,r){return n(t)||(r=t||r,t=[]),r=r||{},e instanceof RegExp?function(e,t){var r=e.source.match(/\((?!\?)/g);if(r)for(var n=0;n<r.length;n++)t.push({name:n,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):n(e)?function(e,t,r){for(var n=[],o=0;o<e.length;o++)n.push(f(e[o],t,r).source);return u(new RegExp("(?:"+n.join("|")+")",p(r)),t)}(e,t,r):function(e,t,r){return d(a(e,r),t,r)}(e,t,r)}},6969:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},8722:(e,t,r)=>{const n=r(6969),o=r(98380),a=new Set;function i(e){void 0===e?e=Object.keys(n.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(n,e,t).load((e=>{if(!(e in n.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete r.c[r(63157).resolve(t)],delete Prism.languages[e],r(63157)(t),a.add(e)}))}i.silent=!1,e.exports=i},19700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(r,n,o,a){if(r.language===n){var i=r.tokenStack=[];r.code=r.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,c=i.length;-1!==r.code.indexOf(o=t(n,c));)++c;return i[c]=e,o})),r.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(r,n){if(r.language===n&&r.tokenStack){r.grammar=e.languages[n];var o=0,a=Object.keys(r.tokenStack);!function i(c){for(var s=0;s<c.length&&!(o>=a.length);s++){var l=c[s];if("string"==typeof l||l.content&&"string"==typeof l.content){var u=a[o],p=r.tokenStack[u],d="string"==typeof l?l:l.content,f=t(n,u),m=d.indexOf(f);if(m>-1){++o;var h=d.substring(0,m),g=new e.Token(n,e.tokenize(p,r.grammar),"language-"+n,p),b=d.substring(m+f.length),v=[];h&&v.push.apply(v,i([h])),v.push(g),b&&v.push.apply(v,i([b])),"string"==typeof l?c.splice.apply(c,[s,1].concat(v)):l.content=v}}else l.content&&i(l.content)}return c}(r.tokens)}}}})}(Prism)},18692:(e,t,r)=>{var n={"./":8722};function o(e){var t=a(e);return r(t)}function a(e){if(!r.o(n,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return n[e]}o.keys=function(){return Object.keys(n)},o.resolve=a,e.exports=o,o.id=18692},63157:(e,t,r)=>{var n={"./":8722};function o(e){var t=a(e);return r(t)}function a(e){if(!r.o(n,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return n[e]}o.keys=function(){return Object.keys(n)},o.resolve=a,e.exports=o,o.id=63157},98380:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function r(e){for(var t={},r=0,n=e.length;r<n;r++)t[e[r]]=!0;return t}function n(e){var r={},n=[];function o(n,a){if(!(n in r)){a.push(n);var i=a.indexOf(n);if(i<a.length-1)throw new Error("Circular dependency: "+a.slice(i).join(" -> "));var c={},s=e[n];if(s){function l(t){if(!(t in e))throw new Error(n+" depends on an unknown component "+t);if(!(t in c))for(var i in o(t,a),c[t]=!0,r[t])c[i]=!0}t(s.require,l),t(s.optional,l),t(s.modify,l)}r[n]=c,a.pop()}}return function(e){var t=r[e];return t||(o(e,n),t=r[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,c){var s=function(e){var t={};for(var r in e){var n=e[r];for(var o in n)if("meta"!=o){var a=n[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),l=function(e){var r;return function(n){if(n in e)return n;if(!r)for(var o in r={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in r)throw new Error(t+" cannot be alias for both "+o+" and "+r[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");r[t]=o}))}return r[n]||n}}(s);i=i.map(l),c=(c||[]).map(l);var u=r(i),p=r(c);i.forEach((function e(r){var n=s[r];t(n&&n.require,(function(t){t in p||(u[t]=!0,e(t))}))}));for(var d,f=n(s),m=u;o(m);){for(var h in d={},m){var g=s[h];t(g&&g.modify,(function(e){e in p&&(d[e]=!0)}))}for(var b in p)if(!(b in u))for(var v in f(b))if(v in u){d[b]=!0;break}for(var y in m=d)u[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,r){return function(t,r,n,o){var a=o?o.series:void 0,i=o?o.parallel:e,c={},s={};function l(e){if(e in c)return c[e];s[e]=!0;var o,u=[];for(var p in t(e))p in r&&u.push(p);if(0===u.length)o=n(e);else{var d=i(u.map((function(e){var t=l(e);return delete s[e],t})));a?o=a(d,(function(){return n(e)})):n(e)}return c[e]=o}for(var u in r)l(u);var p=[];for(var d in s)p.push(c[d]);return i(p)}(f,u,t,r)}};return w}}();e.exports=t},2694:(e,t,r)=>{"use strict";var n=r(6925);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,r,o,a,i){if(i!==n){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return r.PropTypes=r,r}},5556:(e,t,r)=>{e.exports=r(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},22551:(e,t,r)=>{"use strict";var n=r(96540),o=r(69982);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r<arguments.length;r++)t+="&args[]="+encodeURIComponent(arguments[r]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,c={};function s(e,t){l(e,t),l(e+"Capture",t)}function l(e,t){for(c[e]=t,e=0;e<t.length;e++)i.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),p=Object.prototype.hasOwnProperty,d=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},m={};function h(e,t,r,n,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=n,this.attributeNamespace=o,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var g={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){g[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];g[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){g[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){g[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){g[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){g[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){g[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){g[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){g[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function y(e,t,r,n){var o=g.hasOwnProperty(t)?g[t]:null;(null!==o?0!==o.type:n||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,r,n){if(null==t||function(e,t,r,n){if(null!==r&&0===r.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!n&&(null!==r?!r.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,r,n))return!0;if(n)return!1;if(null!==r)switch(r.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,r,o,n)&&(r=null),n||null===o?function(e){return!!p.call(m,e)||!p.call(f,e)&&(d.test(e)?m[e]=!0:(f[e]=!0,!1))}(t)&&(null===r?e.removeAttribute(t):e.setAttribute(t,""+r)):o.mustUseProperty?e[o.propertyName]=null===r?3!==o.type&&"":r:(t=o.attributeName,n=o.attributeNamespace,null===r?e.removeAttribute(t):(r=3===(o=o.type)||4===o&&!0===r?"":""+r,n?e.setAttributeNS(n,t,r):e.setAttribute(t,r))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,v);g[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,v);g[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,v);g[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),g.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=Symbol.for("react.element"),S=Symbol.for("react.portal"),C=Symbol.for("react.fragment"),x=Symbol.for("react.strict_mode"),_=Symbol.for("react.profiler"),E=Symbol.for("react.provider"),A=Symbol.for("react.context"),T=Symbol.for("react.forward_ref"),L=Symbol.for("react.suspense"),z=Symbol.for("react.suspense_list"),j=Symbol.for("react.memo"),R=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var N=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var P=Symbol.iterator;function O(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=P&&e[P]||e["@@iterator"])?e:null}var D,M=Object.assign;function I(e){if(void 0===D)try{throw Error()}catch(r){var t=r.stack.trim().match(/\n( *(at )?)/);D=t&&t[1]||""}return"\n"+D+e}var F=!1;function B(e,t){if(!e||F)return"";F=!0;var r=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(l){var n=l}Reflect.construct(e,[],t)}else{try{t.call()}catch(l){n=l}e.call(t.prototype)}else{try{throw Error()}catch(l){n=l}e()}}catch(l){if(l&&n&&"string"==typeof l.stack){for(var o=l.stack.split("\n"),a=n.stack.split("\n"),i=o.length-1,c=a.length-1;1<=i&&0<=c&&o[i]!==a[c];)c--;for(;1<=i&&0<=c;i--,c--)if(o[i]!==a[c]){if(1!==i||1!==c)do{if(i--,0>--c||o[i]!==a[c]){var s="\n"+o[i].replace(" at new "," at ");return e.displayName&&s.includes("<anonymous>")&&(s=s.replace("<anonymous>",e.displayName)),s}}while(1<=i&&0<=c);break}}}finally{F=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?I(e):""}function q(e){switch(e.tag){case 5:return I(e.type);case 16:return I("Lazy");case 13:return I("Suspense");case 19:return I("SuspenseList");case 0:case 2:case 15:return e=B(e.type,!1);case 11:return e=B(e.type.render,!1);case 1:return e=B(e.type,!0);default:return""}}function $(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case C:return"Fragment";case S:return"Portal";case _:return"Profiler";case x:return"StrictMode";case L:return"Suspense";case z:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case A:return(e.displayName||"Context")+".Consumer";case E:return(e._context.displayName||"Context")+".Provider";case T:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case j:return null!==(t=e.displayName||null)?t:$(e.type)||"Memo";case R:t=e._payload,e=e._init;try{return $(e(t))}catch(r){}}return null}function U(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return $(t);case 8:return t===x?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function Q(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function H(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function G(e){e._valueTracker||(e._valueTracker=function(e){var t=H(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==r&&"function"==typeof r.get&&"function"==typeof r.set){var o=r.get,a=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){n=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(e){n=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function W(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=H(e)?e.checked?"true":"false":e.value),(e=n)!==r&&(t.setValue(e),!0)}function V(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function K(e,t){var r=t.checked;return M({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=r?r:e._wrapperState.initialChecked})}function Y(e,t){var r=null==t.defaultValue?"":t.defaultValue,n=null!=t.checked?t.checked:t.defaultChecked;r=Q(null!=t.value?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function J(e,t){null!=(t=t.checked)&&y(e,"checked",t,!1)}function Z(e,t){J(e,t);var r=Q(t.value),n=t.type;if(null!=r)"number"===n?(0===r&&""===e.value||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if("submit"===n||"reset"===n)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,r):t.hasOwnProperty("defaultValue")&&ee(e,t.type,Q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function X(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!("submit"!==n&&"reset"!==n||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}""!==(r=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==r&&(e.name=r)}function ee(e,t,r){"number"===t&&V(e.ownerDocument)===e||(null==r?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var te=Array.isArray;function re(e,t,r,n){if(e=e.options,t){t={};for(var o=0;o<r.length;o++)t["$"+r[o]]=!0;for(r=0;r<e.length;r++)o=t.hasOwnProperty("$"+e[r].value),e[r].selected!==o&&(e[r].selected=o),o&&n&&(e[r].defaultSelected=!0)}else{for(r=""+Q(r),t=null,o=0;o<e.length;o++){if(e[o].value===r)return e[o].selected=!0,void(n&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function ne(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return M({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var r=t.value;if(null==r){if(r=t.children,t=t.defaultValue,null!=r){if(null!=t)throw Error(a(92));if(te(r)){if(1<r.length)throw Error(a(93));r=r[0]}t=r}null==t&&(t=""),r=t}e._wrapperState={initialValue:Q(r)}}function ae(e,t){var r=Q(t.value),n=Q(t.defaultValue);null!=r&&((r=""+r)!==e.value&&(e.value=r),null==t.defaultValue&&e.defaultValue!==r&&(e.defaultValue=r)),null!=n&&(e.defaultValue=""+n)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function ce(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function se(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?ce(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var le,ue,pe=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((le=le||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=le.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,r,n){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function de(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&3===r.nodeType)return void(r.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=["Webkit","ms","Moz","O"];function he(e,t,r){return null==t||"boolean"==typeof t||""===t?"":r||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function ge(e,t){for(var r in e=e.style,t)if(t.hasOwnProperty(r)){var n=0===r.indexOf("--"),o=he(r,t[r],n);"float"===r&&(r="cssFloat"),n?e.setProperty(r,o):e[r]=o}}Object.keys(fe).forEach((function(e){me.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=M({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ve(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function ye(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function ke(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Se=null,Ce=null,xe=null;function _e(e){if(e=wo(e)){if("function"!=typeof Se)throw Error(a(280));var t=e.stateNode;t&&(t=So(t),Se(e.stateNode,e.type,t))}}function Ee(e){Ce?xe?xe.push(e):xe=[e]:Ce=e}function Ae(){if(Ce){var e=Ce,t=xe;if(xe=Ce=null,_e(e),t)for(e=0;e<t.length;e++)_e(t[e])}}function Te(e,t){return e(t)}function Le(){}var ze=!1;function je(e,t,r){if(ze)return e(t,r);ze=!0;try{return Te(e,t,r)}finally{ze=!1,(null!==Ce||null!==xe)&&(Le(),Ae())}}function Re(e,t){var r=e.stateNode;if(null===r)return null;var n=So(r);if(null===n)return null;r=n[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(n=!n.disabled)||(n=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!n;break e;default:e=!1}if(e)return null;if(r&&"function"!=typeof r)throw Error(a(231,t,typeof r));return r}var Ne=!1;if(u)try{var Pe={};Object.defineProperty(Pe,"passive",{get:function(){Ne=!0}}),window.addEventListener("test",Pe,Pe),window.removeEventListener("test",Pe,Pe)}catch(ue){Ne=!1}function Oe(e,t,r,n,o,a,i,c,s){var l=Array.prototype.slice.call(arguments,3);try{t.apply(r,l)}catch(u){this.onError(u)}}var De=!1,Me=null,Ie=!1,Fe=null,Be={onError:function(e){De=!0,Me=e}};function qe(e,t,r,n,o,a,i,c,s){De=!1,Me=null,Oe.apply(Be,arguments)}function $e(e){var t=e,r=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(r=t.return),e=t.return}while(e)}return 3===t.tag?r:null}function Ue(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Qe(e){if($e(e)!==e)throw Error(a(188))}function He(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=$e(e)))throw Error(a(188));return t!==e?null:e}for(var r=e,n=t;;){var o=r.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(n=o.return)){r=n;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===r)return Qe(o),e;if(i===n)return Qe(o),t;i=i.sibling}throw Error(a(188))}if(r.return!==n.return)r=o,n=i;else{for(var c=!1,s=o.child;s;){if(s===r){c=!0,r=o,n=i;break}if(s===n){c=!0,n=o,r=i;break}s=s.sibling}if(!c){for(s=i.child;s;){if(s===r){c=!0,r=i,n=o;break}if(s===n){c=!0,n=i,r=o;break}s=s.sibling}if(!c)throw Error(a(189))}}if(r.alternate!==n)throw Error(a(190))}if(3!==r.tag)throw Error(a(188));return r.stateNode.current===r?e:t}(e))?Ge(e):null}function Ge(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=Ge(e);if(null!==t)return t;e=e.sibling}return null}var We=o.unstable_scheduleCallback,Ve=o.unstable_cancelCallback,Ke=o.unstable_shouldYield,Ye=o.unstable_requestPaint,Je=o.unstable_now,Ze=o.unstable_getCurrentPriorityLevel,Xe=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,rt=o.unstable_LowPriority,nt=o.unstable_IdlePriority,ot=null,at=null;var it=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(ct(e)/st|0)|0},ct=Math.log,st=Math.LN2;var lt=64,ut=4194304;function pt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function dt(e,t){var r=e.pendingLanes;if(0===r)return 0;var n=0,o=e.suspendedLanes,a=e.pingedLanes,i=268435455&r;if(0!==i){var c=i&~o;0!==c?n=pt(c):0!==(a&=i)&&(n=pt(a))}else 0!==(i=r&~o)?n=pt(i):0!==a&&(n=pt(a));if(0===n)return 0;if(0!==t&&t!==n&&0==(t&o)&&((o=n&-n)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&n)&&(n|=16&r),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=n;0<t;)o=1<<(r=31-it(t)),n|=e[r],t&=~o;return n}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function mt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function ht(){var e=lt;return 0==(4194240&(lt<<=1))&&(lt=64),e}function gt(e){for(var t=[],r=0;31>r;r++)t.push(e);return t}function bt(e,t,r){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=r}function vt(e,t){var r=e.entangledLanes|=t;for(e=e.entanglements;r;){var n=31-it(r),o=1<<n;o&t|e[n]&t&&(e[n]|=t),r&=~o}}var yt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var kt,St,Ct,xt,_t,Et=!1,At=[],Tt=null,Lt=null,zt=null,jt=new Map,Rt=new Map,Nt=[],Pt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Ot(e,t){switch(e){case"focusin":case"focusout":Tt=null;break;case"dragenter":case"dragleave":Lt=null;break;case"mouseover":case"mouseout":zt=null;break;case"pointerover":case"pointerout":jt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Rt.delete(t.pointerId)}}function Dt(e,t,r,n,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:r,eventSystemFlags:n,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=wo(t))&&St(t)),e):(e.eventSystemFlags|=n,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function Mt(e){var t=yo(e.target);if(null!==t){var r=$e(t);if(null!==r)if(13===(t=r.tag)){if(null!==(t=Ue(r)))return e.blockedOn=t,void _t(e.priority,(function(){Ct(r)}))}else if(3===t&&r.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===r.tag?r.stateNode.containerInfo:null)}e.blockedOn=null}function It(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var r=Kt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==r)return null!==(t=wo(r))&&St(t),e.blockedOn=r,!1;var n=new(r=e.nativeEvent).constructor(r.type,r);we=n,r.target.dispatchEvent(n),we=null,t.shift()}return!0}function Ft(e,t,r){It(e)&&r.delete(t)}function Bt(){Et=!1,null!==Tt&&It(Tt)&&(Tt=null),null!==Lt&&It(Lt)&&(Lt=null),null!==zt&&It(zt)&&(zt=null),jt.forEach(Ft),Rt.forEach(Ft)}function qt(e,t){e.blockedOn===t&&(e.blockedOn=null,Et||(Et=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Bt)))}function $t(e){function t(t){return qt(t,e)}if(0<At.length){qt(At[0],e);for(var r=1;r<At.length;r++){var n=At[r];n.blockedOn===e&&(n.blockedOn=null)}}for(null!==Tt&&qt(Tt,e),null!==Lt&&qt(Lt,e),null!==zt&&qt(zt,e),jt.forEach(t),Rt.forEach(t),r=0;r<Nt.length;r++)(n=Nt[r]).blockedOn===e&&(n.blockedOn=null);for(;0<Nt.length&&null===(r=Nt[0]).blockedOn;)Mt(r),null===r.blockedOn&&Nt.shift()}var Ut=w.ReactCurrentBatchConfig,Qt=!0;function Ht(e,t,r,n){var o=yt,a=Ut.transition;Ut.transition=null;try{yt=1,Wt(e,t,r,n)}finally{yt=o,Ut.transition=a}}function Gt(e,t,r,n){var o=yt,a=Ut.transition;Ut.transition=null;try{yt=4,Wt(e,t,r,n)}finally{yt=o,Ut.transition=a}}function Wt(e,t,r,n){if(Qt){var o=Kt(e,t,r,n);if(null===o)Qn(e,t,n,Vt,r),Ot(e,n);else if(function(e,t,r,n,o){switch(t){case"focusin":return Tt=Dt(Tt,e,t,r,n,o),!0;case"dragenter":return Lt=Dt(Lt,e,t,r,n,o),!0;case"mouseover":return zt=Dt(zt,e,t,r,n,o),!0;case"pointerover":var a=o.pointerId;return jt.set(a,Dt(jt.get(a)||null,e,t,r,n,o)),!0;case"gotpointercapture":return a=o.pointerId,Rt.set(a,Dt(Rt.get(a)||null,e,t,r,n,o)),!0}return!1}(o,e,t,r,n))n.stopPropagation();else if(Ot(e,n),4&t&&-1<Pt.indexOf(e)){for(;null!==o;){var a=wo(o);if(null!==a&&kt(a),null===(a=Kt(e,t,r,n))&&Qn(e,t,n,Vt,r),a===o)break;o=a}null!==o&&n.stopPropagation()}else Qn(e,t,n,null,r)}}var Vt=null;function Kt(e,t,r,n){if(Vt=null,null!==(e=yo(e=ke(n))))if(null===(t=$e(e)))e=null;else if(13===(r=t.tag)){if(null!==(e=Ue(t)))return e;e=null}else if(3===r){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Vt=e,null}function Yt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Ze()){case Xe:return 1;case et:return 4;case tt:case rt:return 16;case nt:return 536870912;default:return 16}default:return 16}}var Jt=null,Zt=null,Xt=null;function er(){if(Xt)return Xt;var e,t,r=Zt,n=r.length,o="value"in Jt?Jt.value:Jt.textContent,a=o.length;for(e=0;e<n&&r[e]===o[e];e++);var i=n-e;for(t=1;t<=i&&r[n-t]===o[a-t];t++);return Xt=o.slice(e,1<t?1-t:void 0)}function tr(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function rr(){return!0}function nr(){return!1}function or(e){function t(t,r,n,o,a){for(var i in this._reactName=t,this._targetInst=n,this.type=r,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?rr:nr,this.isPropagationStopped=nr,this}return M(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=rr)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=rr)},persist:function(){},isPersistent:rr}),t}var ar,ir,cr,sr={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},lr=or(sr),ur=M({},sr,{view:0,detail:0}),pr=or(ur),dr=M({},ur,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:xr,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cr&&(cr&&"mousemove"===e.type?(ar=e.screenX-cr.screenX,ir=e.screenY-cr.screenY):ir=ar=0,cr=e),ar)},movementY:function(e){return"movementY"in e?e.movementY:ir}}),fr=or(dr),mr=or(M({},dr,{dataTransfer:0})),hr=or(M({},ur,{relatedTarget:0})),gr=or(M({},sr,{animationName:0,elapsedTime:0,pseudoElement:0})),br=M({},sr,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),vr=or(br),yr=or(M({},sr,{data:0})),wr={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},kr={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Sr={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Cr(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sr[e])&&!!t[e]}function xr(){return Cr}var _r=M({},ur,{key:function(e){if(e.key){var t=wr[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tr(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?kr[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:xr,charCode:function(e){return"keypress"===e.type?tr(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tr(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Er=or(_r),Ar=or(M({},dr,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Tr=or(M({},ur,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:xr})),Lr=or(M({},sr,{propertyName:0,elapsedTime:0,pseudoElement:0})),zr=M({},dr,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),jr=or(zr),Rr=[9,13,27,32],Nr=u&&"CompositionEvent"in window,Pr=null;u&&"documentMode"in document&&(Pr=document.documentMode);var Or=u&&"TextEvent"in window&&!Pr,Dr=u&&(!Nr||Pr&&8<Pr&&11>=Pr),Mr=String.fromCharCode(32),Ir=!1;function Fr(e,t){switch(e){case"keyup":return-1!==Rr.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Br(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var qr=!1;var $r={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Ur(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!$r[e.type]:"textarea"===t}function Qr(e,t,r,n){Ee(n),0<(t=Gn(t,"onChange")).length&&(r=new lr("onChange","change",null,r,n),e.push({event:r,listeners:t}))}var Hr=null,Gr=null;function Wr(e){In(e,0)}function Vr(e){if(W(ko(e)))return e}function Kr(e,t){if("change"===e)return t}var Yr=!1;if(u){var Jr;if(u){var Zr="oninput"in document;if(!Zr){var Xr=document.createElement("div");Xr.setAttribute("oninput","return;"),Zr="function"==typeof Xr.oninput}Jr=Zr}else Jr=!1;Yr=Jr&&(!document.documentMode||9<document.documentMode)}function en(){Hr&&(Hr.detachEvent("onpropertychange",tn),Gr=Hr=null)}function tn(e){if("value"===e.propertyName&&Vr(Gr)){var t=[];Qr(t,Gr,e,ke(e)),je(Wr,t)}}function rn(e,t,r){"focusin"===e?(en(),Gr=r,(Hr=t).attachEvent("onpropertychange",tn)):"focusout"===e&&en()}function nn(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Vr(Gr)}function on(e,t){if("click"===e)return Vr(t)}function an(e,t){if("input"===e||"change"===e)return Vr(t)}var cn="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function sn(e,t){if(cn(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(n=0;n<r.length;n++){var o=r[n];if(!p.call(t,o)||!cn(e[o],t[o]))return!1}return!0}function ln(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function un(e,t){var r,n=ln(e);for(e=0;n;){if(3===n.nodeType){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ln(n)}}function pn(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?pn(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function dn(){for(var e=window,t=V();t instanceof e.HTMLIFrameElement;){try{var r="string"==typeof t.contentWindow.location.href}catch(n){r=!1}if(!r)break;t=V((e=t.contentWindow).document)}return t}function fn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function mn(e){var t=dn(),r=e.focusedElem,n=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&pn(r.ownerDocument.documentElement,r)){if(null!==n&&fn(r))if(t=n.start,void 0===(e=n.end)&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if((e=(t=r.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=r.textContent.length,a=Math.min(n.start,o);n=void 0===n.end?a:Math.min(n.end,o),!e.extend&&a>n&&(o=n,n=a,a=o),o=un(r,a);var i=un(r,n);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>n?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=r;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof r.focus&&r.focus(),r=0;r<t.length;r++)(e=t[r]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var hn=u&&"documentMode"in document&&11>=document.documentMode,gn=null,bn=null,vn=null,yn=!1;function wn(e,t,r){var n=r.window===r?r.document:9===r.nodeType?r:r.ownerDocument;yn||null==gn||gn!==V(n)||("selectionStart"in(n=gn)&&fn(n)?n={start:n.selectionStart,end:n.selectionEnd}:n={anchorNode:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset},vn&&sn(vn,n)||(vn=n,0<(n=Gn(bn,"onSelect")).length&&(t=new lr("onSelect","select",null,t,r),e.push({event:t,listeners:n}),t.target=gn)))}function kn(e,t){var r={};return r[e.toLowerCase()]=t.toLowerCase(),r["Webkit"+e]="webkit"+t,r["Moz"+e]="moz"+t,r}var Sn={animationend:kn("Animation","AnimationEnd"),animationiteration:kn("Animation","AnimationIteration"),animationstart:kn("Animation","AnimationStart"),transitionend:kn("Transition","TransitionEnd")},Cn={},xn={};function _n(e){if(Cn[e])return Cn[e];if(!Sn[e])return e;var t,r=Sn[e];for(t in r)if(r.hasOwnProperty(t)&&t in xn)return Cn[e]=r[t];return e}u&&(xn=document.createElement("div").style,"AnimationEvent"in window||(delete Sn.animationend.animation,delete Sn.animationiteration.animation,delete Sn.animationstart.animation),"TransitionEvent"in window||delete Sn.transitionend.transition);var En=_n("animationend"),An=_n("animationiteration"),Tn=_n("animationstart"),Ln=_n("transitionend"),zn=new Map,jn="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Rn(e,t){zn.set(e,t),s(t,[e])}for(var Nn=0;Nn<jn.length;Nn++){var Pn=jn[Nn];Rn(Pn.toLowerCase(),"on"+(Pn[0].toUpperCase()+Pn.slice(1)))}Rn(En,"onAnimationEnd"),Rn(An,"onAnimationIteration"),Rn(Tn,"onAnimationStart"),Rn("dblclick","onDoubleClick"),Rn("focusin","onFocus"),Rn("focusout","onBlur"),Rn(Ln,"onTransitionEnd"),l("onMouseEnter",["mouseout","mouseover"]),l("onMouseLeave",["mouseout","mouseover"]),l("onPointerEnter",["pointerout","pointerover"]),l("onPointerLeave",["pointerout","pointerover"]),s("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),s("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),s("onBeforeInput",["compositionend","keypress","textInput","paste"]),s("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),s("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),s("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var On="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Dn=new Set("cancel close invalid load scroll toggle".split(" ").concat(On));function Mn(e,t,r){var n=e.type||"unknown-event";e.currentTarget=r,function(e,t,r,n,o,i,c,s,l){if(qe.apply(this,arguments),De){if(!De)throw Error(a(198));var u=Me;De=!1,Me=null,Ie||(Ie=!0,Fe=u)}}(n,t,void 0,e),e.currentTarget=null}function In(e,t){t=0!=(4&t);for(var r=0;r<e.length;r++){var n=e[r],o=n.event;n=n.listeners;e:{var a=void 0;if(t)for(var i=n.length-1;0<=i;i--){var c=n[i],s=c.instance,l=c.currentTarget;if(c=c.listener,s!==a&&o.isPropagationStopped())break e;Mn(o,c,l),a=s}else for(i=0;i<n.length;i++){if(s=(c=n[i]).instance,l=c.currentTarget,c=c.listener,s!==a&&o.isPropagationStopped())break e;Mn(o,c,l),a=s}}}if(Ie)throw e=Fe,Ie=!1,Fe=null,e}function Fn(e,t){var r=t[go];void 0===r&&(r=t[go]=new Set);var n=e+"__bubble";r.has(n)||(Un(t,e,2,!1),r.add(n))}function Bn(e,t,r){var n=0;t&&(n|=4),Un(r,e,n,t)}var qn="_reactListening"+Math.random().toString(36).slice(2);function $n(e){if(!e[qn]){e[qn]=!0,i.forEach((function(t){"selectionchange"!==t&&(Dn.has(t)||Bn(t,!1,e),Bn(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[qn]||(t[qn]=!0,Bn("selectionchange",!1,t))}}function Un(e,t,r,n){switch(Yt(t)){case 1:var o=Ht;break;case 4:o=Gt;break;default:o=Wt}r=o.bind(null,t,r,e),o=void 0,!Ne||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),n?void 0!==o?e.addEventListener(t,r,{capture:!0,passive:o}):e.addEventListener(t,r,!0):void 0!==o?e.addEventListener(t,r,{passive:o}):e.addEventListener(t,r,!1)}function Qn(e,t,r,n,o){var a=n;if(0==(1&t)&&0==(2&t)&&null!==n)e:for(;;){if(null===n)return;var i=n.tag;if(3===i||4===i){var c=n.stateNode.containerInfo;if(c===o||8===c.nodeType&&c.parentNode===o)break;if(4===i)for(i=n.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==c;){if(null===(i=yo(c)))return;if(5===(s=i.tag)||6===s){n=a=i;continue e}c=c.parentNode}}n=n.return}je((function(){var n=a,o=ke(r),i=[];e:{var c=zn.get(e);if(void 0!==c){var s=lr,l=e;switch(e){case"keypress":if(0===tr(r))break e;case"keydown":case"keyup":s=Er;break;case"focusin":l="focus",s=hr;break;case"focusout":l="blur",s=hr;break;case"beforeblur":case"afterblur":s=hr;break;case"click":if(2===r.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=fr;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=mr;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=Tr;break;case En:case An:case Tn:s=gr;break;case Ln:s=Lr;break;case"scroll":s=pr;break;case"wheel":s=jr;break;case"copy":case"cut":case"paste":s=vr;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=Ar}var u=0!=(4&t),p=!u&&"scroll"===e,d=u?null!==c?c+"Capture":null:c;u=[];for(var f,m=n;null!==m;){var h=(f=m).stateNode;if(5===f.tag&&null!==h&&(f=h,null!==d&&(null!=(h=Re(m,d))&&u.push(Hn(m,h,f)))),p)break;m=m.return}0<u.length&&(c=new s(c,l,null,r,o),i.push({event:c,listeners:u}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(c="mouseover"===e||"pointerover"===e)||r===we||!(l=r.relatedTarget||r.fromElement)||!yo(l)&&!l[ho])&&(s||c)&&(c=o.window===o?o:(c=o.ownerDocument)?c.defaultView||c.parentWindow:window,s?(s=n,null!==(l=(l=r.relatedTarget||r.toElement)?yo(l):null)&&(l!==(p=$e(l))||5!==l.tag&&6!==l.tag)&&(l=null)):(s=null,l=n),s!==l)){if(u=fr,h="onMouseLeave",d="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(u=Ar,h="onPointerLeave",d="onPointerEnter",m="pointer"),p=null==s?c:ko(s),f=null==l?c:ko(l),(c=new u(h,m+"leave",s,r,o)).target=p,c.relatedTarget=f,h=null,yo(o)===n&&((u=new u(d,m+"enter",l,r,o)).target=f,u.relatedTarget=p,h=u),p=h,s&&l)e:{for(d=l,m=0,f=u=s;f;f=Wn(f))m++;for(f=0,h=d;h;h=Wn(h))f++;for(;0<m-f;)u=Wn(u),m--;for(;0<f-m;)d=Wn(d),f--;for(;m--;){if(u===d||null!==d&&u===d.alternate)break e;u=Wn(u),d=Wn(d)}u=null}else u=null;null!==s&&Vn(i,c,s,u,!1),null!==l&&null!==p&&Vn(i,p,l,u,!0)}if("select"===(s=(c=n?ko(n):window).nodeName&&c.nodeName.toLowerCase())||"input"===s&&"file"===c.type)var g=Kr;else if(Ur(c))if(Yr)g=an;else{g=nn;var b=rn}else(s=c.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===c.type||"radio"===c.type)&&(g=on);switch(g&&(g=g(e,n))?Qr(i,g,r,o):(b&&b(e,c,n),"focusout"===e&&(b=c._wrapperState)&&b.controlled&&"number"===c.type&&ee(c,"number",c.value)),b=n?ko(n):window,e){case"focusin":(Ur(b)||"true"===b.contentEditable)&&(gn=b,bn=n,vn=null);break;case"focusout":vn=bn=gn=null;break;case"mousedown":yn=!0;break;case"contextmenu":case"mouseup":case"dragend":yn=!1,wn(i,r,o);break;case"selectionchange":if(hn)break;case"keydown":case"keyup":wn(i,r,o)}var v;if(Nr)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else qr?Fr(e,r)&&(y="onCompositionEnd"):"keydown"===e&&229===r.keyCode&&(y="onCompositionStart");y&&(Dr&&"ko"!==r.locale&&(qr||"onCompositionStart"!==y?"onCompositionEnd"===y&&qr&&(v=er()):(Zt="value"in(Jt=o)?Jt.value:Jt.textContent,qr=!0)),0<(b=Gn(n,y)).length&&(y=new yr(y,e,null,r,o),i.push({event:y,listeners:b}),v?y.data=v:null!==(v=Br(r))&&(y.data=v))),(v=Or?function(e,t){switch(e){case"compositionend":return Br(t);case"keypress":return 32!==t.which?null:(Ir=!0,Mr);case"textInput":return(e=t.data)===Mr&&Ir?null:e;default:return null}}(e,r):function(e,t){if(qr)return"compositionend"===e||!Nr&&Fr(e,t)?(e=er(),Xt=Zt=Jt=null,qr=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Dr&&"ko"!==t.locale?null:t.data}}(e,r))&&(0<(n=Gn(n,"onBeforeInput")).length&&(o=new yr("onBeforeInput","beforeinput",null,r,o),i.push({event:o,listeners:n}),o.data=v))}In(i,t)}))}function Hn(e,t,r){return{instance:e,listener:t,currentTarget:r}}function Gn(e,t){for(var r=t+"Capture",n=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Re(e,r))&&n.unshift(Hn(e,a,o)),null!=(a=Re(e,t))&&n.push(Hn(e,a,o))),e=e.return}return n}function Wn(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Vn(e,t,r,n,o){for(var a=t._reactName,i=[];null!==r&&r!==n;){var c=r,s=c.alternate,l=c.stateNode;if(null!==s&&s===n)break;5===c.tag&&null!==l&&(c=l,o?null!=(s=Re(r,a))&&i.unshift(Hn(r,s,c)):o||null!=(s=Re(r,a))&&i.push(Hn(r,s,c))),r=r.return}0!==i.length&&e.push({event:t,listeners:i})}var Kn=/\r\n?/g,Yn=/\u0000|\uFFFD/g;function Jn(e){return("string"==typeof e?e:""+e).replace(Kn,"\n").replace(Yn,"")}function Zn(e,t,r){if(t=Jn(t),Jn(e)!==t&&r)throw Error(a(425))}function Xn(){}var eo=null,to=null;function ro(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var no="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ao="function"==typeof Promise?Promise:void 0,io="function"==typeof queueMicrotask?queueMicrotask:void 0!==ao?function(e){return ao.resolve(null).then(e).catch(co)}:no;function co(e){setTimeout((function(){throw e}))}function so(e,t){var r=t,n=0;do{var o=r.nextSibling;if(e.removeChild(r),o&&8===o.nodeType)if("/$"===(r=o.data)){if(0===n)return e.removeChild(o),void $t(t);n--}else"$"!==r&&"$?"!==r&&"$!"!==r||n++;r=o}while(r);$t(t)}function lo(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var r=e.data;if("$"===r||"$!"===r||"$?"===r){if(0===t)return e;t--}else"/$"===r&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,mo="__reactProps$"+po,ho="__reactContainer$"+po,go="__reactEvents$"+po,bo="__reactListeners$"+po,vo="__reactHandles$"+po;function yo(e){var t=e[fo];if(t)return t;for(var r=e.parentNode;r;){if(t=r[ho]||r[fo]){if(r=t.alternate,null!==t.child||null!==r&&null!==r.child)for(e=uo(e);null!==e;){if(r=e[fo])return r;e=uo(e)}return t}r=(e=r).parentNode}return null}function wo(e){return!(e=e[fo]||e[ho])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ko(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function So(e){return e[mo]||null}var Co=[],xo=-1;function _o(e){return{current:e}}function Eo(e){0>xo||(e.current=Co[xo],Co[xo]=null,xo--)}function Ao(e,t){xo++,Co[xo]=e.current,e.current=t}var To={},Lo=_o(To),zo=_o(!1),jo=To;function Ro(e,t){var r=e.type.contextTypes;if(!r)return To;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in r)a[o]=t[o];return n&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function No(e){return null!=(e=e.childContextTypes)}function Po(){Eo(zo),Eo(Lo)}function Oo(e,t,r){if(Lo.current!==To)throw Error(a(168));Ao(Lo,t),Ao(zo,r)}function Do(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,"function"!=typeof n.getChildContext)return r;for(var o in n=n.getChildContext())if(!(o in t))throw Error(a(108,U(e)||"Unknown",o));return M({},r,n)}function Mo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||To,jo=Lo.current,Ao(Lo,e),Ao(zo,zo.current),!0}function Io(e,t,r){var n=e.stateNode;if(!n)throw Error(a(169));r?(e=Do(e,t,jo),n.__reactInternalMemoizedMergedChildContext=e,Eo(zo),Eo(Lo),Ao(Lo,e)):Eo(zo),Ao(zo,r)}var Fo=null,Bo=!1,qo=!1;function $o(e){null===Fo?Fo=[e]:Fo.push(e)}function Uo(){if(!qo&&null!==Fo){qo=!0;var e=0,t=yt;try{var r=Fo;for(yt=1;e<r.length;e++){var n=r[e];do{n=n(!0)}while(null!==n)}Fo=null,Bo=!1}catch(o){throw null!==Fo&&(Fo=Fo.slice(e+1)),We(Xe,Uo),o}finally{yt=t,qo=!1}}return null}var Qo=[],Ho=0,Go=null,Wo=0,Vo=[],Ko=0,Yo=null,Jo=1,Zo="";function Xo(e,t){Qo[Ho++]=Wo,Qo[Ho++]=Go,Go=e,Wo=t}function ea(e,t,r){Vo[Ko++]=Jo,Vo[Ko++]=Zo,Vo[Ko++]=Yo,Yo=e;var n=Jo;e=Zo;var o=32-it(n)-1;n&=~(1<<o),r+=1;var a=32-it(t)+o;if(30<a){var i=o-o%5;a=(n&(1<<i)-1).toString(32),n>>=i,o-=i,Jo=1<<32-it(t)+o|r<<o|n,Zo=a+e}else Jo=1<<a|r<<o|n,Zo=e}function ta(e){null!==e.return&&(Xo(e,1),ea(e,1,0))}function ra(e){for(;e===Go;)Go=Qo[--Ho],Qo[Ho]=null,Wo=Qo[--Ho],Qo[Ho]=null;for(;e===Yo;)Yo=Vo[--Ko],Vo[Ko]=null,Zo=Vo[--Ko],Vo[Ko]=null,Jo=Vo[--Ko],Vo[Ko]=null}var na=null,oa=null,aa=!1,ia=null;function ca(e,t){var r=Rl(5,null,null,0);r.elementType="DELETED",r.stateNode=t,r.return=e,null===(t=e.deletions)?(e.deletions=[r],e.flags|=16):t.push(r)}function sa(e,t){switch(e.tag){case 5:var r=e.type;return null!==(t=1!==t.nodeType||r.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,na=e,oa=lo(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,na=e,oa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(r=null!==Yo?{id:Jo,overflow:Zo}:null,e.memoizedState={dehydrated:t,treeContext:r,retryLane:1073741824},(r=Rl(18,null,null,0)).stateNode=t,r.return=e,e.child=r,na=e,oa=null,!0);default:return!1}}function la(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function ua(e){if(aa){var t=oa;if(t){var r=t;if(!sa(e,t)){if(la(e))throw Error(a(418));t=lo(r.nextSibling);var n=na;t&&sa(e,t)?ca(n,r):(e.flags=-4097&e.flags|2,aa=!1,na=e)}}else{if(la(e))throw Error(a(418));e.flags=-4097&e.flags|2,aa=!1,na=e}}}function pa(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;na=e}function da(e){if(e!==na)return!1;if(!aa)return pa(e),aa=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!ro(e.type,e.memoizedProps)),t&&(t=oa)){if(la(e))throw fa(),Error(a(418));for(;t;)ca(e,t),t=lo(t.nextSibling)}if(pa(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var r=e.data;if("/$"===r){if(0===t){oa=lo(e.nextSibling);break e}t--}else"$"!==r&&"$!"!==r&&"$?"!==r||t++}e=e.nextSibling}oa=null}}else oa=na?lo(e.stateNode.nextSibling):null;return!0}function fa(){for(var e=oa;e;)e=lo(e.nextSibling)}function ma(){oa=na=null,aa=!1}function ha(e){null===ia?ia=[e]:ia.push(e)}var ga=w.ReactCurrentBatchConfig;function ba(e,t){if(e&&e.defaultProps){for(var r in t=M({},t),e=e.defaultProps)void 0===t[r]&&(t[r]=e[r]);return t}return t}var va=_o(null),ya=null,wa=null,ka=null;function Sa(){ka=wa=ya=null}function Ca(e){var t=va.current;Eo(va),e._currentValue=t}function xa(e,t,r){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==n&&(n.childLanes|=t)):null!==n&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===r)break;e=e.return}}function _a(e,t){ya=e,ka=wa=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(wc=!0),e.firstContext=null)}function Ea(e){var t=e._currentValue;if(ka!==e)if(e={context:e,memoizedValue:t,next:null},null===wa){if(null===ya)throw Error(a(308));wa=e,ya.dependencies={lanes:0,firstContext:e}}else wa=wa.next=e;return t}var Aa=null;function Ta(e){null===Aa?Aa=[e]:Aa.push(e)}function La(e,t,r,n){var o=t.interleaved;return null===o?(r.next=r,Ta(t)):(r.next=o.next,o.next=r),t.interleaved=r,za(e,n)}function za(e,t){e.lanes|=t;var r=e.alternate;for(null!==r&&(r.lanes|=t),r=e,e=e.return;null!==e;)e.childLanes|=t,null!==(r=e.alternate)&&(r.childLanes|=t),r=e,e=e.return;return 3===r.tag?r.stateNode:null}var ja=!1;function Ra(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Na(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Pa(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Oa(e,t,r){var n=e.updateQueue;if(null===n)return null;if(n=n.shared,0!=(2&Ls)){var o=n.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),n.pending=t,za(e,r)}return null===(o=n.interleaved)?(t.next=t,Ta(n)):(t.next=o.next,o.next=t),n.interleaved=t,za(e,r)}function Da(e,t,r){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&r))){var n=t.lanes;r|=n&=e.pendingLanes,t.lanes=r,vt(e,r)}}function Ma(e,t){var r=e.updateQueue,n=e.alternate;if(null!==n&&r===(n=n.updateQueue)){var o=null,a=null;if(null!==(r=r.firstBaseUpdate)){do{var i={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};null===a?o=a=i:a=a.next=i,r=r.next}while(null!==r);null===a?o=a=t:a=a.next=t}else o=a=t;return r={baseState:n.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:n.shared,effects:n.effects},void(e.updateQueue=r)}null===(e=r.lastBaseUpdate)?r.firstBaseUpdate=t:e.next=t,r.lastBaseUpdate=t}function Ia(e,t,r,n){var o=e.updateQueue;ja=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,c=o.shared.pending;if(null!==c){o.shared.pending=null;var s=c,l=s.next;s.next=null,null===i?a=l:i.next=l,i=s;var u=e.alternate;null!==u&&((c=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===c?u.firstBaseUpdate=l:c.next=l,u.lastBaseUpdate=s))}if(null!==a){var p=o.baseState;for(i=0,u=l=s=null,c=a;;){var d=c.lane,f=c.eventTime;if((n&d)===d){null!==u&&(u=u.next={eventTime:f,lane:0,tag:c.tag,payload:c.payload,callback:c.callback,next:null});e:{var m=e,h=c;switch(d=t,f=r,h.tag){case 1:if("function"==typeof(m=h.payload)){p=m.call(f,p,d);break e}p=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(d="function"==typeof(m=h.payload)?m.call(f,p,d):m))break e;p=M({},p,d);break e;case 2:ja=!0}}null!==c.callback&&0!==c.lane&&(e.flags|=64,null===(d=o.effects)?o.effects=[c]:d.push(c))}else f={eventTime:f,lane:d,tag:c.tag,payload:c.payload,callback:c.callback,next:null},null===u?(l=u=f,s=p):u=u.next=f,i|=d;if(null===(c=c.next)){if(null===(c=o.shared.pending))break;c=(d=c).next,d.next=null,o.lastBaseUpdate=d,o.shared.pending=null}}if(null===u&&(s=p),o.baseState=s,o.firstBaseUpdate=l,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Ms|=i,e.lanes=i,e.memoizedState=p}}function Fa(e,t,r){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var n=e[t],o=n.callback;if(null!==o){if(n.callback=null,n=r,"function"!=typeof o)throw Error(a(191,o));o.call(n)}}}var Ba=(new n.Component).refs;function qa(e,t,r,n){r=null==(r=r(n,t=e.memoizedState))?t:M({},t,r),e.memoizedState=r,0===e.lanes&&(e.updateQueue.baseState=r)}var $a={isMounted:function(e){return!!(e=e._reactInternals)&&$e(e)===e},enqueueSetState:function(e,t,r){e=e._reactInternals;var n=tl(),o=rl(e),a=Pa(n,o);a.payload=t,null!=r&&(a.callback=r),null!==(t=Oa(e,a,o))&&(nl(t,e,o,n),Da(t,e,o))},enqueueReplaceState:function(e,t,r){e=e._reactInternals;var n=tl(),o=rl(e),a=Pa(n,o);a.tag=1,a.payload=t,null!=r&&(a.callback=r),null!==(t=Oa(e,a,o))&&(nl(t,e,o,n),Da(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var r=tl(),n=rl(e),o=Pa(r,n);o.tag=2,null!=t&&(o.callback=t),null!==(t=Oa(e,o,n))&&(nl(t,e,n,r),Da(t,e,n))}};function Ua(e,t,r,n,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(n,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!sn(r,n)||!sn(o,a))}function Qa(e,t,r){var n=!1,o=To,a=t.contextType;return"object"==typeof a&&null!==a?a=Ea(a):(o=No(t)?jo:Lo.current,a=(n=null!=(n=t.contextTypes))?Ro(e,o):To),t=new t(r,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=$a,e.stateNode=t,t._reactInternals=e,n&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function Ha(e,t,r,n){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(r,n),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(r,n),t.state!==e&&$a.enqueueReplaceState(t,t.state,null)}function Ga(e,t,r,n){var o=e.stateNode;o.props=r,o.state=e.memoizedState,o.refs=Ba,Ra(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=Ea(a):(a=No(t)?jo:Lo.current,o.context=Ro(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(qa(e,t,a,r),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&$a.enqueueReplaceState(o,o.state,null),Ia(e,r,o,n),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function Wa(e,t,r){if(null!==(e=r.ref)&&"function"!=typeof e&&"object"!=typeof e){if(r._owner){if(r=r._owner){if(1!==r.tag)throw Error(a(309));var n=r.stateNode}if(!n)throw Error(a(147,e));var o=n,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;t===Ba&&(t=o.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(a(284));if(!r._owner)throw Error(a(290,e))}return e}function Va(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Ka(e){return(0,e._init)(e._payload)}function Ya(e){function t(t,r){if(e){var n=t.deletions;null===n?(t.deletions=[r],t.flags|=16):n.push(r)}}function r(r,n){if(!e)return null;for(;null!==n;)t(r,n),n=n.sibling;return null}function n(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Pl(e,t)).index=0,e.sibling=null,e}function i(t,r,n){return t.index=n,e?null!==(n=t.alternate)?(n=n.index)<r?(t.flags|=2,r):n:(t.flags|=2,r):(t.flags|=1048576,r)}function c(t){return e&&null===t.alternate&&(t.flags|=2),t}function s(e,t,r,n){return null===t||6!==t.tag?((t=Il(r,e.mode,n)).return=e,t):((t=o(t,r)).return=e,t)}function l(e,t,r,n){var a=r.type;return a===C?p(e,t,r.props.children,n,r.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===R&&Ka(a)===t.type)?((n=o(t,r.props)).ref=Wa(e,t,r),n.return=e,n):((n=Ol(r.type,r.key,r.props,null,e.mode,n)).ref=Wa(e,t,r),n.return=e,n)}function u(e,t,r,n){return null===t||4!==t.tag||t.stateNode.containerInfo!==r.containerInfo||t.stateNode.implementation!==r.implementation?((t=Fl(r,e.mode,n)).return=e,t):((t=o(t,r.children||[])).return=e,t)}function p(e,t,r,n,a){return null===t||7!==t.tag?((t=Dl(r,e.mode,n,a)).return=e,t):((t=o(t,r)).return=e,t)}function d(e,t,r){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Il(""+t,e.mode,r)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(r=Ol(t.type,t.key,t.props,null,e.mode,r)).ref=Wa(e,null,t),r.return=e,r;case S:return(t=Fl(t,e.mode,r)).return=e,t;case R:return d(e,(0,t._init)(t._payload),r)}if(te(t)||O(t))return(t=Dl(t,e.mode,r,null)).return=e,t;Va(e,t)}return null}function f(e,t,r,n){var o=null!==t?t.key:null;if("string"==typeof r&&""!==r||"number"==typeof r)return null!==o?null:s(e,t,""+r,n);if("object"==typeof r&&null!==r){switch(r.$$typeof){case k:return r.key===o?l(e,t,r,n):null;case S:return r.key===o?u(e,t,r,n):null;case R:return f(e,t,(o=r._init)(r._payload),n)}if(te(r)||O(r))return null!==o?null:p(e,t,r,n,null);Va(e,r)}return null}function m(e,t,r,n,o){if("string"==typeof n&&""!==n||"number"==typeof n)return s(t,e=e.get(r)||null,""+n,o);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return l(t,e=e.get(null===n.key?r:n.key)||null,n,o);case S:return u(t,e=e.get(null===n.key?r:n.key)||null,n,o);case R:return m(e,t,r,(0,n._init)(n._payload),o)}if(te(n)||O(n))return p(t,e=e.get(r)||null,n,o,null);Va(t,n)}return null}function h(o,a,c,s){for(var l=null,u=null,p=a,h=a=0,g=null;null!==p&&h<c.length;h++){p.index>h?(g=p,p=null):g=p.sibling;var b=f(o,p,c[h],s);if(null===b){null===p&&(p=g);break}e&&p&&null===b.alternate&&t(o,p),a=i(b,a,h),null===u?l=b:u.sibling=b,u=b,p=g}if(h===c.length)return r(o,p),aa&&Xo(o,h),l;if(null===p){for(;h<c.length;h++)null!==(p=d(o,c[h],s))&&(a=i(p,a,h),null===u?l=p:u.sibling=p,u=p);return aa&&Xo(o,h),l}for(p=n(o,p);h<c.length;h++)null!==(g=m(p,o,h,c[h],s))&&(e&&null!==g.alternate&&p.delete(null===g.key?h:g.key),a=i(g,a,h),null===u?l=g:u.sibling=g,u=g);return e&&p.forEach((function(e){return t(o,e)})),aa&&Xo(o,h),l}function g(o,c,s,l){var u=O(s);if("function"!=typeof u)throw Error(a(150));if(null==(s=u.call(s)))throw Error(a(151));for(var p=u=null,h=c,g=c=0,b=null,v=s.next();null!==h&&!v.done;g++,v=s.next()){h.index>g?(b=h,h=null):b=h.sibling;var y=f(o,h,v.value,l);if(null===y){null===h&&(h=b);break}e&&h&&null===y.alternate&&t(o,h),c=i(y,c,g),null===p?u=y:p.sibling=y,p=y,h=b}if(v.done)return r(o,h),aa&&Xo(o,g),u;if(null===h){for(;!v.done;g++,v=s.next())null!==(v=d(o,v.value,l))&&(c=i(v,c,g),null===p?u=v:p.sibling=v,p=v);return aa&&Xo(o,g),u}for(h=n(o,h);!v.done;g++,v=s.next())null!==(v=m(h,o,g,v.value,l))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),c=i(v,c,g),null===p?u=v:p.sibling=v,p=v);return e&&h.forEach((function(e){return t(o,e)})),aa&&Xo(o,g),u}return function e(n,a,i,s){if("object"==typeof i&&null!==i&&i.type===C&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case k:e:{for(var l=i.key,u=a;null!==u;){if(u.key===l){if((l=i.type)===C){if(7===u.tag){r(n,u.sibling),(a=o(u,i.props.children)).return=n,n=a;break e}}else if(u.elementType===l||"object"==typeof l&&null!==l&&l.$$typeof===R&&Ka(l)===u.type){r(n,u.sibling),(a=o(u,i.props)).ref=Wa(n,u,i),a.return=n,n=a;break e}r(n,u);break}t(n,u),u=u.sibling}i.type===C?((a=Dl(i.props.children,n.mode,s,i.key)).return=n,n=a):((s=Ol(i.type,i.key,i.props,null,n.mode,s)).ref=Wa(n,a,i),s.return=n,n=s)}return c(n);case S:e:{for(u=i.key;null!==a;){if(a.key===u){if(4===a.tag&&a.stateNode.containerInfo===i.containerInfo&&a.stateNode.implementation===i.implementation){r(n,a.sibling),(a=o(a,i.children||[])).return=n,n=a;break e}r(n,a);break}t(n,a),a=a.sibling}(a=Fl(i,n.mode,s)).return=n,n=a}return c(n);case R:return e(n,a,(u=i._init)(i._payload),s)}if(te(i))return h(n,a,i,s);if(O(i))return g(n,a,i,s);Va(n,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==a&&6===a.tag?(r(n,a.sibling),(a=o(a,i)).return=n,n=a):(r(n,a),(a=Il(i,n.mode,s)).return=n,n=a),c(n)):r(n,a)}}var Ja=Ya(!0),Za=Ya(!1),Xa={},ei=_o(Xa),ti=_o(Xa),ri=_o(Xa);function ni(e){if(e===Xa)throw Error(a(174));return e}function oi(e,t){switch(Ao(ri,t),Ao(ti,e),Ao(ei,Xa),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:se(null,"");break;default:t=se(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Eo(ei),Ao(ei,t)}function ai(){Eo(ei),Eo(ti),Eo(ri)}function ii(e){ni(ri.current);var t=ni(ei.current),r=se(t,e.type);t!==r&&(Ao(ti,e),Ao(ei,r))}function ci(e){ti.current===e&&(Eo(ei),Eo(ti))}var si=_o(0);function li(e){for(var t=e;null!==t;){if(13===t.tag){var r=t.memoizedState;if(null!==r&&(null===(r=r.dehydrated)||"$?"===r.data||"$!"===r.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ui=[];function pi(){for(var e=0;e<ui.length;e++)ui[e]._workInProgressVersionPrimary=null;ui.length=0}var di=w.ReactCurrentDispatcher,fi=w.ReactCurrentBatchConfig,mi=0,hi=null,gi=null,bi=null,vi=!1,yi=!1,wi=0,ki=0;function Si(){throw Error(a(321))}function Ci(e,t){if(null===t)return!1;for(var r=0;r<t.length&&r<e.length;r++)if(!cn(e[r],t[r]))return!1;return!0}function xi(e,t,r,n,o,i){if(mi=i,hi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,di.current=null===e||null===e.memoizedState?cc:sc,e=r(n,o),yi){i=0;do{if(yi=!1,wi=0,25<=i)throw Error(a(301));i+=1,bi=gi=null,t.updateQueue=null,di.current=lc,e=r(n,o)}while(yi)}if(di.current=ic,t=null!==gi&&null!==gi.next,mi=0,bi=gi=hi=null,vi=!1,t)throw Error(a(300));return e}function _i(){var e=0!==wi;return wi=0,e}function Ei(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===bi?hi.memoizedState=bi=e:bi=bi.next=e,bi}function Ai(){if(null===gi){var e=hi.alternate;e=null!==e?e.memoizedState:null}else e=gi.next;var t=null===bi?hi.memoizedState:bi.next;if(null!==t)bi=t,gi=e;else{if(null===e)throw Error(a(310));e={memoizedState:(gi=e).memoizedState,baseState:gi.baseState,baseQueue:gi.baseQueue,queue:gi.queue,next:null},null===bi?hi.memoizedState=bi=e:bi=bi.next=e}return bi}function Ti(e,t){return"function"==typeof t?t(e):t}function Li(e){var t=Ai(),r=t.queue;if(null===r)throw Error(a(311));r.lastRenderedReducer=e;var n=gi,o=n.baseQueue,i=r.pending;if(null!==i){if(null!==o){var c=o.next;o.next=i.next,i.next=c}n.baseQueue=o=i,r.pending=null}if(null!==o){i=o.next,n=n.baseState;var s=c=null,l=null,u=i;do{var p=u.lane;if((mi&p)===p)null!==l&&(l=l.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),n=u.hasEagerState?u.eagerState:e(n,u.action);else{var d={lane:p,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===l?(s=l=d,c=n):l=l.next=d,hi.lanes|=p,Ms|=p}u=u.next}while(null!==u&&u!==i);null===l?c=n:l.next=s,cn(n,t.memoizedState)||(wc=!0),t.memoizedState=n,t.baseState=c,t.baseQueue=l,r.lastRenderedState=n}if(null!==(e=r.interleaved)){o=e;do{i=o.lane,hi.lanes|=i,Ms|=i,o=o.next}while(o!==e)}else null===o&&(r.lanes=0);return[t.memoizedState,r.dispatch]}function zi(e){var t=Ai(),r=t.queue;if(null===r)throw Error(a(311));r.lastRenderedReducer=e;var n=r.dispatch,o=r.pending,i=t.memoizedState;if(null!==o){r.pending=null;var c=o=o.next;do{i=e(i,c.action),c=c.next}while(c!==o);cn(i,t.memoizedState)||(wc=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),r.lastRenderedState=i}return[i,n]}function ji(){}function Ri(e,t){var r=hi,n=Ai(),o=t(),i=!cn(n.memoizedState,o);if(i&&(n.memoizedState=o,wc=!0),n=n.queue,Qi(Oi.bind(null,r,n,e),[e]),n.getSnapshot!==t||i||null!==bi&&1&bi.memoizedState.tag){if(r.flags|=2048,Fi(9,Pi.bind(null,r,n,o,t),void 0,null),null===zs)throw Error(a(349));0!=(30&mi)||Ni(r,t,o)}return o}function Ni(e,t,r){e.flags|=16384,e={getSnapshot:t,value:r},null===(t=hi.updateQueue)?(t={lastEffect:null,stores:null},hi.updateQueue=t,t.stores=[e]):null===(r=t.stores)?t.stores=[e]:r.push(e)}function Pi(e,t,r,n){t.value=r,t.getSnapshot=n,Di(t)&&Mi(e)}function Oi(e,t,r){return r((function(){Di(t)&&Mi(e)}))}function Di(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!cn(e,r)}catch(n){return!0}}function Mi(e){var t=za(e,1);null!==t&&nl(t,e,1,-1)}function Ii(e){var t=Ei();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ti,lastRenderedState:e},t.queue=e,e=e.dispatch=rc.bind(null,hi,e),[t.memoizedState,e]}function Fi(e,t,r,n){return e={tag:e,create:t,destroy:r,deps:n,next:null},null===(t=hi.updateQueue)?(t={lastEffect:null,stores:null},hi.updateQueue=t,t.lastEffect=e.next=e):null===(r=t.lastEffect)?t.lastEffect=e.next=e:(n=r.next,r.next=e,e.next=n,t.lastEffect=e),e}function Bi(){return Ai().memoizedState}function qi(e,t,r,n){var o=Ei();hi.flags|=e,o.memoizedState=Fi(1|t,r,void 0,void 0===n?null:n)}function $i(e,t,r,n){var o=Ai();n=void 0===n?null:n;var a=void 0;if(null!==gi){var i=gi.memoizedState;if(a=i.destroy,null!==n&&Ci(n,i.deps))return void(o.memoizedState=Fi(t,r,a,n))}hi.flags|=e,o.memoizedState=Fi(1|t,r,a,n)}function Ui(e,t){return qi(8390656,8,e,t)}function Qi(e,t){return $i(2048,8,e,t)}function Hi(e,t){return $i(4,2,e,t)}function Gi(e,t){return $i(4,4,e,t)}function Wi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Vi(e,t,r){return r=null!=r?r.concat([e]):null,$i(4,4,Wi.bind(null,t,e),r)}function Ki(){}function Yi(e,t){var r=Ai();t=void 0===t?null:t;var n=r.memoizedState;return null!==n&&null!==t&&Ci(t,n[1])?n[0]:(r.memoizedState=[e,t],e)}function Ji(e,t){var r=Ai();t=void 0===t?null:t;var n=r.memoizedState;return null!==n&&null!==t&&Ci(t,n[1])?n[0]:(e=e(),r.memoizedState=[e,t],e)}function Zi(e,t,r){return 0==(21&mi)?(e.baseState&&(e.baseState=!1,wc=!0),e.memoizedState=r):(cn(r,t)||(r=ht(),hi.lanes|=r,Ms|=r,e.baseState=!0),t)}function Xi(e,t){var r=yt;yt=0!==r&&4>r?r:4,e(!0);var n=fi.transition;fi.transition={};try{e(!1),t()}finally{yt=r,fi.transition=n}}function ec(){return Ai().memoizedState}function tc(e,t,r){var n=rl(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},nc(e))oc(t,r);else if(null!==(r=La(e,t,r,n))){nl(r,e,n,tl()),ac(r,t,n)}}function rc(e,t,r){var n=rl(e),o={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(nc(e))oc(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,c=a(i,r);if(o.hasEagerState=!0,o.eagerState=c,cn(c,i)){var s=t.interleaved;return null===s?(o.next=o,Ta(t)):(o.next=s.next,s.next=o),void(t.interleaved=o)}}catch(l){}null!==(r=La(e,t,o,n))&&(nl(r,e,n,o=tl()),ac(r,t,n))}}function nc(e){var t=e.alternate;return e===hi||null!==t&&t===hi}function oc(e,t){yi=vi=!0;var r=e.pending;null===r?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function ac(e,t,r){if(0!=(4194240&r)){var n=t.lanes;r|=n&=e.pendingLanes,t.lanes=r,vt(e,r)}}var ic={readContext:Ea,useCallback:Si,useContext:Si,useEffect:Si,useImperativeHandle:Si,useInsertionEffect:Si,useLayoutEffect:Si,useMemo:Si,useReducer:Si,useRef:Si,useState:Si,useDebugValue:Si,useDeferredValue:Si,useTransition:Si,useMutableSource:Si,useSyncExternalStore:Si,useId:Si,unstable_isNewReconciler:!1},cc={readContext:Ea,useCallback:function(e,t){return Ei().memoizedState=[e,void 0===t?null:t],e},useContext:Ea,useEffect:Ui,useImperativeHandle:function(e,t,r){return r=null!=r?r.concat([e]):null,qi(4194308,4,Wi.bind(null,t,e),r)},useLayoutEffect:function(e,t){return qi(4194308,4,e,t)},useInsertionEffect:function(e,t){return qi(4,2,e,t)},useMemo:function(e,t){var r=Ei();return t=void 0===t?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=Ei();return t=void 0!==r?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=tc.bind(null,hi,e),[n.memoizedState,e]},useRef:function(e){return e={current:e},Ei().memoizedState=e},useState:Ii,useDebugValue:Ki,useDeferredValue:function(e){return Ei().memoizedState=e},useTransition:function(){var e=Ii(!1),t=e[0];return e=Xi.bind(null,e[1]),Ei().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var n=hi,o=Ei();if(aa){if(void 0===r)throw Error(a(407));r=r()}else{if(r=t(),null===zs)throw Error(a(349));0!=(30&mi)||Ni(n,t,r)}o.memoizedState=r;var i={value:r,getSnapshot:t};return o.queue=i,Ui(Oi.bind(null,n,i,e),[e]),n.flags|=2048,Fi(9,Pi.bind(null,n,i,r,t),void 0,null),r},useId:function(){var e=Ei(),t=zs.identifierPrefix;if(aa){var r=Zo;t=":"+t+"R"+(r=(Jo&~(1<<32-it(Jo)-1)).toString(32)+r),0<(r=wi++)&&(t+="H"+r.toString(32)),t+=":"}else t=":"+t+"r"+(r=ki++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},sc={readContext:Ea,useCallback:Yi,useContext:Ea,useEffect:Qi,useImperativeHandle:Vi,useInsertionEffect:Hi,useLayoutEffect:Gi,useMemo:Ji,useReducer:Li,useRef:Bi,useState:function(){return Li(Ti)},useDebugValue:Ki,useDeferredValue:function(e){return Zi(Ai(),gi.memoizedState,e)},useTransition:function(){return[Li(Ti)[0],Ai().memoizedState]},useMutableSource:ji,useSyncExternalStore:Ri,useId:ec,unstable_isNewReconciler:!1},lc={readContext:Ea,useCallback:Yi,useContext:Ea,useEffect:Qi,useImperativeHandle:Vi,useInsertionEffect:Hi,useLayoutEffect:Gi,useMemo:Ji,useReducer:zi,useRef:Bi,useState:function(){return zi(Ti)},useDebugValue:Ki,useDeferredValue:function(e){var t=Ai();return null===gi?t.memoizedState=e:Zi(t,gi.memoizedState,e)},useTransition:function(){return[zi(Ti)[0],Ai().memoizedState]},useMutableSource:ji,useSyncExternalStore:Ri,useId:ec,unstable_isNewReconciler:!1};function uc(e,t){try{var r="",n=t;do{r+=q(n),n=n.return}while(n);var o=r}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o,digest:null}}function pc(e,t,r){return{value:e,source:null,stack:null!=r?r:null,digest:null!=t?t:null}}function dc(e,t){try{console.error(t.value)}catch(r){setTimeout((function(){throw r}))}}var fc="function"==typeof WeakMap?WeakMap:Map;function mc(e,t,r){(r=Pa(-1,r)).tag=3,r.payload={element:null};var n=t.value;return r.callback=function(){Hs||(Hs=!0,Gs=n),dc(0,t)},r}function hc(e,t,r){(r=Pa(-1,r)).tag=3;var n=e.type.getDerivedStateFromError;if("function"==typeof n){var o=t.value;r.payload=function(){return n(o)},r.callback=function(){dc(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(r.callback=function(){dc(0,t),"function"!=typeof n&&(null===Ws?Ws=new Set([this]):Ws.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),r}function gc(e,t,r){var n=e.pingCache;if(null===n){n=e.pingCache=new fc;var o=new Set;n.set(t,o)}else void 0===(o=n.get(t))&&(o=new Set,n.set(t,o));o.has(r)||(o.add(r),e=El.bind(null,e,t,r),t.then(e,e))}function bc(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function vc(e,t,r,n,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,r.flags|=131072,r.flags&=-52805,1===r.tag&&(null===r.alternate?r.tag=17:((t=Pa(-1,1)).tag=2,Oa(r,t,1))),r.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var yc=w.ReactCurrentOwner,wc=!1;function kc(e,t,r,n){t.child=null===e?Za(t,null,r,n):Ja(t,e.child,r,n)}function Sc(e,t,r,n,o){r=r.render;var a=t.ref;return _a(t,o),n=xi(e,t,r,n,a,o),r=_i(),null===e||wc?(aa&&r&&ta(t),t.flags|=1,kc(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Hc(e,t,o))}function Cc(e,t,r,n,o){if(null===e){var a=r.type;return"function"!=typeof a||Nl(a)||void 0!==a.defaultProps||null!==r.compare||void 0!==r.defaultProps?((e=Ol(r.type,null,n,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,xc(e,t,a,n,o))}if(a=e.child,0==(e.lanes&o)){var i=a.memoizedProps;if((r=null!==(r=r.compare)?r:sn)(i,n)&&e.ref===t.ref)return Hc(e,t,o)}return t.flags|=1,(e=Pl(a,n)).ref=t.ref,e.return=t,t.child=e}function xc(e,t,r,n,o){if(null!==e){var a=e.memoizedProps;if(sn(a,n)&&e.ref===t.ref){if(wc=!1,t.pendingProps=n=a,0==(e.lanes&o))return t.lanes=e.lanes,Hc(e,t,o);0!=(131072&e.flags)&&(wc=!0)}}return Ac(e,t,r,n,o)}function _c(e,t,r){var n=t.pendingProps,o=n.children,a=null!==e?e.memoizedState:null;if("hidden"===n.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ao(Ps,Ns),Ns|=r;else{if(0==(1073741824&r))return e=null!==a?a.baseLanes|r:r,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ao(Ps,Ns),Ns|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=null!==a?a.baseLanes:r,Ao(Ps,Ns),Ns|=n}else null!==a?(n=a.baseLanes|r,t.memoizedState=null):n=r,Ao(Ps,Ns),Ns|=n;return kc(e,t,o,r),t.child}function Ec(e,t){var r=t.ref;(null===e&&null!==r||null!==e&&e.ref!==r)&&(t.flags|=512,t.flags|=2097152)}function Ac(e,t,r,n,o){var a=No(r)?jo:Lo.current;return a=Ro(t,a),_a(t,o),r=xi(e,t,r,n,a,o),n=_i(),null===e||wc?(aa&&n&&ta(t),t.flags|=1,kc(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Hc(e,t,o))}function Tc(e,t,r,n,o){if(No(r)){var a=!0;Mo(t)}else a=!1;if(_a(t,o),null===t.stateNode)Qc(e,t),Qa(t,r,n),Ga(t,r,n,o),n=!0;else if(null===e){var i=t.stateNode,c=t.memoizedProps;i.props=c;var s=i.context,l=r.contextType;"object"==typeof l&&null!==l?l=Ea(l):l=Ro(t,l=No(r)?jo:Lo.current);var u=r.getDerivedStateFromProps,p="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;p||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(c!==n||s!==l)&&Ha(t,i,n,l),ja=!1;var d=t.memoizedState;i.state=d,Ia(t,n,i,o),s=t.memoizedState,c!==n||d!==s||zo.current||ja?("function"==typeof u&&(qa(t,r,u,n),s=t.memoizedState),(c=ja||Ua(t,r,c,n,d,s,l))?(p||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=n,t.memoizedState=s),i.props=n,i.state=s,i.context=l,n=c):("function"==typeof i.componentDidMount&&(t.flags|=4194308),n=!1)}else{i=t.stateNode,Na(e,t),c=t.memoizedProps,l=t.type===t.elementType?c:ba(t.type,c),i.props=l,p=t.pendingProps,d=i.context,"object"==typeof(s=r.contextType)&&null!==s?s=Ea(s):s=Ro(t,s=No(r)?jo:Lo.current);var f=r.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(c!==p||d!==s)&&Ha(t,i,n,s),ja=!1,d=t.memoizedState,i.state=d,Ia(t,n,i,o);var m=t.memoizedState;c!==p||d!==m||zo.current||ja?("function"==typeof f&&(qa(t,r,f,n),m=t.memoizedState),(l=ja||Ua(t,r,l,n,d,m,s)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(n,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(n,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||c===e.memoizedProps&&d===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||c===e.memoizedProps&&d===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=m),i.props=n,i.state=m,i.context=s,n=l):("function"!=typeof i.componentDidUpdate||c===e.memoizedProps&&d===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||c===e.memoizedProps&&d===e.memoizedState||(t.flags|=1024),n=!1)}return Lc(e,t,r,n,a,o)}function Lc(e,t,r,n,o,a){Ec(e,t);var i=0!=(128&t.flags);if(!n&&!i)return o&&Io(t,r,!1),Hc(e,t,a);n=t.stateNode,yc.current=t;var c=i&&"function"!=typeof r.getDerivedStateFromError?null:n.render();return t.flags|=1,null!==e&&i?(t.child=Ja(t,e.child,null,a),t.child=Ja(t,null,c,a)):kc(e,t,c,a),t.memoizedState=n.state,o&&Io(t,r,!0),t.child}function zc(e){var t=e.stateNode;t.pendingContext?Oo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Oo(0,t.context,!1),oi(e,t.containerInfo)}function jc(e,t,r,n,o){return ma(),ha(o),t.flags|=256,kc(e,t,r,n),t.child}var Rc,Nc,Pc,Oc,Dc={dehydrated:null,treeContext:null,retryLane:0};function Mc(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ic(e,t,r){var n,o=t.pendingProps,i=si.current,c=!1,s=0!=(128&t.flags);if((n=s)||(n=(null===e||null!==e.memoizedState)&&0!=(2&i)),n?(c=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),Ao(si,1&i),null===e)return ua(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(s=o.children,e=o.fallback,c?(o=t.mode,c=t.child,s={mode:"hidden",children:s},0==(1&o)&&null!==c?(c.childLanes=0,c.pendingProps=s):c=Ml(s,o,0,null),e=Dl(e,o,r,null),c.return=t,e.return=t,c.sibling=e,t.child=c,t.child.memoizedState=Mc(r),t.memoizedState=Dc,e):Fc(t,s));if(null!==(i=e.memoizedState)&&null!==(n=i.dehydrated))return function(e,t,r,n,o,i,c){if(r)return 256&t.flags?(t.flags&=-257,Bc(e,t,c,n=pc(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=n.fallback,o=t.mode,n=Ml({mode:"visible",children:n.children},o,0,null),(i=Dl(i,o,c,null)).flags|=2,n.return=t,i.return=t,n.sibling=i,t.child=n,0!=(1&t.mode)&&Ja(t,e.child,null,c),t.child.memoizedState=Mc(c),t.memoizedState=Dc,i);if(0==(1&t.mode))return Bc(e,t,c,null);if("$!"===o.data){if(n=o.nextSibling&&o.nextSibling.dataset)var s=n.dgst;return n=s,Bc(e,t,c,n=pc(i=Error(a(419)),n,void 0))}if(s=0!=(c&e.childLanes),wc||s){if(null!==(n=zs)){switch(c&-c){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(n.suspendedLanes|c))?0:o)&&o!==i.retryLane&&(i.retryLane=o,za(e,o),nl(n,e,o,-1))}return gl(),Bc(e,t,c,n=pc(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Tl.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,oa=lo(o.nextSibling),na=t,aa=!0,ia=null,null!==e&&(Vo[Ko++]=Jo,Vo[Ko++]=Zo,Vo[Ko++]=Yo,Jo=e.id,Zo=e.overflow,Yo=t),t=Fc(t,n.children),t.flags|=4096,t)}(e,t,s,o,n,i,r);if(c){c=o.fallback,s=t.mode,n=(i=e.child).sibling;var l={mode:"hidden",children:o.children};return 0==(1&s)&&t.child!==i?((o=t.child).childLanes=0,o.pendingProps=l,t.deletions=null):(o=Pl(i,l)).subtreeFlags=14680064&i.subtreeFlags,null!==n?c=Pl(n,c):(c=Dl(c,s,r,null)).flags|=2,c.return=t,o.return=t,o.sibling=c,t.child=o,o=c,c=t.child,s=null===(s=e.child.memoizedState)?Mc(r):{baseLanes:s.baseLanes|r,cachePool:null,transitions:s.transitions},c.memoizedState=s,c.childLanes=e.childLanes&~r,t.memoizedState=Dc,o}return e=(c=e.child).sibling,o=Pl(c,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=r),o.return=t,o.sibling=null,null!==e&&(null===(r=t.deletions)?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=o,t.memoizedState=null,o}function Fc(e,t){return(t=Ml({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function Bc(e,t,r,n){return null!==n&&ha(n),Ja(t,e.child,null,r),(e=Fc(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function qc(e,t,r){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),xa(e.return,t,r)}function $c(e,t,r,n,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:r,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=n,a.tail=r,a.tailMode=o)}function Uc(e,t,r){var n=t.pendingProps,o=n.revealOrder,a=n.tail;if(kc(e,t,n.children,r),0!=(2&(n=si.current)))n=1&n|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&qc(e,r,t);else if(19===e.tag)qc(e,r,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}n&=1}if(Ao(si,n),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(r=t.child,o=null;null!==r;)null!==(e=r.alternate)&&null===li(e)&&(o=r),r=r.sibling;null===(r=o)?(o=t.child,t.child=null):(o=r.sibling,r.sibling=null),$c(t,!1,o,r,a);break;case"backwards":for(r=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===li(e)){t.child=o;break}e=o.sibling,o.sibling=r,r=o,o=e}$c(t,!0,r,null,a);break;case"together":$c(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Qc(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Hc(e,t,r){if(null!==e&&(t.dependencies=e.dependencies),Ms|=t.lanes,0==(r&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(r=Pl(e=t.child,e.pendingProps),t.child=r,r.return=t;null!==e.sibling;)e=e.sibling,(r=r.sibling=Pl(e,e.pendingProps)).return=t;r.sibling=null}return t.child}function Gc(e,t){if(!aa)switch(e.tailMode){case"hidden":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?e.tail=null:r.sibling=null;break;case"collapsed":r=e.tail;for(var n=null;null!==r;)null!==r.alternate&&(n=r),r=r.sibling;null===n?t||null===e.tail?e.tail=null:e.tail.sibling=null:n.sibling=null}}function Wc(e){var t=null!==e.alternate&&e.alternate.child===e.child,r=0,n=0;if(t)for(var o=e.child;null!==o;)r|=o.lanes|o.childLanes,n|=14680064&o.subtreeFlags,n|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)r|=o.lanes|o.childLanes,n|=o.subtreeFlags,n|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=n,e.childLanes=r,t}function Vc(e,t,r){var n=t.pendingProps;switch(ra(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Wc(t),null;case 1:case 17:return No(t.type)&&Po(),Wc(t),null;case 3:return n=t.stateNode,ai(),Eo(zo),Eo(Lo),pi(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||(da(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==ia&&(cl(ia),ia=null))),Nc(e,t),Wc(t),null;case 5:ci(t);var o=ni(ri.current);if(r=t.type,null!==e&&null!=t.stateNode)Pc(e,t,r,n,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!n){if(null===t.stateNode)throw Error(a(166));return Wc(t),null}if(e=ni(ei.current),da(t)){n=t.stateNode,r=t.type;var i=t.memoizedProps;switch(n[fo]=t,n[mo]=i,e=0!=(1&t.mode),r){case"dialog":Fn("cancel",n),Fn("close",n);break;case"iframe":case"object":case"embed":Fn("load",n);break;case"video":case"audio":for(o=0;o<On.length;o++)Fn(On[o],n);break;case"source":Fn("error",n);break;case"img":case"image":case"link":Fn("error",n),Fn("load",n);break;case"details":Fn("toggle",n);break;case"input":Y(n,i),Fn("invalid",n);break;case"select":n._wrapperState={wasMultiple:!!i.multiple},Fn("invalid",n);break;case"textarea":oe(n,i),Fn("invalid",n)}for(var s in ve(r,i),o=null,i)if(i.hasOwnProperty(s)){var l=i[s];"children"===s?"string"==typeof l?n.textContent!==l&&(!0!==i.suppressHydrationWarning&&Zn(n.textContent,l,e),o=["children",l]):"number"==typeof l&&n.textContent!==""+l&&(!0!==i.suppressHydrationWarning&&Zn(n.textContent,l,e),o=["children",""+l]):c.hasOwnProperty(s)&&null!=l&&"onScroll"===s&&Fn("scroll",n)}switch(r){case"input":G(n),X(n,i,!0);break;case"textarea":G(n),ie(n);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(n.onclick=Xn)}n=o,t.updateQueue=n,null!==n&&(t.flags|=4)}else{s=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=ce(r)),"http://www.w3.org/1999/xhtml"===e?"script"===r?((e=s.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof n.is?e=s.createElement(r,{is:n.is}):(e=s.createElement(r),"select"===r&&(s=e,n.multiple?s.multiple=!0:n.size&&(s.size=n.size))):e=s.createElementNS(e,r),e[fo]=t,e[mo]=n,Rc(e,t,!1,!1),t.stateNode=e;e:{switch(s=ye(r,n),r){case"dialog":Fn("cancel",e),Fn("close",e),o=n;break;case"iframe":case"object":case"embed":Fn("load",e),o=n;break;case"video":case"audio":for(o=0;o<On.length;o++)Fn(On[o],e);o=n;break;case"source":Fn("error",e),o=n;break;case"img":case"image":case"link":Fn("error",e),Fn("load",e),o=n;break;case"details":Fn("toggle",e),o=n;break;case"input":Y(e,n),o=K(e,n),Fn("invalid",e);break;case"option":default:o=n;break;case"select":e._wrapperState={wasMultiple:!!n.multiple},o=M({},n,{value:void 0}),Fn("invalid",e);break;case"textarea":oe(e,n),o=ne(e,n),Fn("invalid",e)}for(i in ve(r,o),l=o)if(l.hasOwnProperty(i)){var u=l[i];"style"===i?ge(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&pe(e,u):"children"===i?"string"==typeof u?("textarea"!==r||""!==u)&&de(e,u):"number"==typeof u&&de(e,""+u):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(c.hasOwnProperty(i)?null!=u&&"onScroll"===i&&Fn("scroll",e):null!=u&&y(e,i,u,s))}switch(r){case"input":G(e),X(e,n,!1);break;case"textarea":G(e),ie(e);break;case"option":null!=n.value&&e.setAttribute("value",""+Q(n.value));break;case"select":e.multiple=!!n.multiple,null!=(i=n.value)?re(e,!!n.multiple,i,!1):null!=n.defaultValue&&re(e,!!n.multiple,n.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Xn)}switch(r){case"button":case"input":case"select":case"textarea":n=!!n.autoFocus;break e;case"img":n=!0;break e;default:n=!1}}n&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Wc(t),null;case 6:if(e&&null!=t.stateNode)Oc(e,t,e.memoizedProps,n);else{if("string"!=typeof n&&null===t.stateNode)throw Error(a(166));if(r=ni(ri.current),ni(ei.current),da(t)){if(n=t.stateNode,r=t.memoizedProps,n[fo]=t,(i=n.nodeValue!==r)&&null!==(e=na))switch(e.tag){case 3:Zn(n.nodeValue,r,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Zn(n.nodeValue,r,0!=(1&e.mode))}i&&(t.flags|=4)}else(n=(9===r.nodeType?r:r.ownerDocument).createTextNode(n))[fo]=t,t.stateNode=n}return Wc(t),null;case 13:if(Eo(si),n=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(aa&&null!==oa&&0!=(1&t.mode)&&0==(128&t.flags))fa(),ma(),t.flags|=98560,i=!1;else if(i=da(t),null!==n&&null!==n.dehydrated){if(null===e){if(!i)throw Error(a(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(a(317));i[fo]=t}else ma(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Wc(t),i=!1}else null!==ia&&(cl(ia),ia=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=r,t):((n=null!==n)!==(null!==e&&null!==e.memoizedState)&&n&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&si.current)?0===Os&&(Os=3):gl())),null!==t.updateQueue&&(t.flags|=4),Wc(t),null);case 4:return ai(),Nc(e,t),null===e&&$n(t.stateNode.containerInfo),Wc(t),null;case 10:return Ca(t.type._context),Wc(t),null;case 19:if(Eo(si),null===(i=t.memoizedState))return Wc(t),null;if(n=0!=(128&t.flags),null===(s=i.rendering))if(n)Gc(i,!1);else{if(0!==Os||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(s=li(e))){for(t.flags|=128,Gc(i,!1),null!==(n=s.updateQueue)&&(t.updateQueue=n,t.flags|=4),t.subtreeFlags=0,n=r,r=t.child;null!==r;)e=n,(i=r).flags&=14680066,null===(s=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=s.childLanes,i.lanes=s.lanes,i.child=s.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=s.memoizedProps,i.memoizedState=s.memoizedState,i.updateQueue=s.updateQueue,i.type=s.type,e=s.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),r=r.sibling;return Ao(si,1&si.current|2),t.child}e=e.sibling}null!==i.tail&&Je()>Us&&(t.flags|=128,n=!0,Gc(i,!1),t.lanes=4194304)}else{if(!n)if(null!==(e=li(s))){if(t.flags|=128,n=!0,null!==(r=e.updateQueue)&&(t.updateQueue=r,t.flags|=4),Gc(i,!0),null===i.tail&&"hidden"===i.tailMode&&!s.alternate&&!aa)return Wc(t),null}else 2*Je()-i.renderingStartTime>Us&&1073741824!==r&&(t.flags|=128,n=!0,Gc(i,!1),t.lanes=4194304);i.isBackwards?(s.sibling=t.child,t.child=s):(null!==(r=i.last)?r.sibling=s:t.child=s,i.last=s)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Je(),t.sibling=null,r=si.current,Ao(si,n?1&r|2:1&r),t):(Wc(t),null);case 22:case 23:return dl(),n=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==n&&(t.flags|=8192),n&&0!=(1&t.mode)?0!=(1073741824&Ns)&&(Wc(t),6&t.subtreeFlags&&(t.flags|=8192)):Wc(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Kc(e,t){switch(ra(t),t.tag){case 1:return No(t.type)&&Po(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ai(),Eo(zo),Eo(Lo),pi(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return ci(t),null;case 13:if(Eo(si),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ma()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Eo(si),null;case 4:return ai(),null;case 10:return Ca(t.type._context),null;case 22:case 23:return dl(),null;default:return null}}Rc=function(e,t){for(var r=t.child;null!==r;){if(5===r.tag||6===r.tag)e.appendChild(r.stateNode);else if(4!==r.tag&&null!==r.child){r.child.return=r,r=r.child;continue}if(r===t)break;for(;null===r.sibling;){if(null===r.return||r.return===t)return;r=r.return}r.sibling.return=r.return,r=r.sibling}},Nc=function(){},Pc=function(e,t,r,n){var o=e.memoizedProps;if(o!==n){e=t.stateNode,ni(ei.current);var a,i=null;switch(r){case"input":o=K(e,o),n=K(e,n),i=[];break;case"select":o=M({},o,{value:void 0}),n=M({},n,{value:void 0}),i=[];break;case"textarea":o=ne(e,o),n=ne(e,n),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof n.onClick&&(e.onclick=Xn)}for(u in ve(r,n),r=null,o)if(!n.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var s=o[u];for(a in s)s.hasOwnProperty(a)&&(r||(r={}),r[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(c.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in n){var l=n[u];if(s=null!=o?o[u]:void 0,n.hasOwnProperty(u)&&l!==s&&(null!=l||null!=s))if("style"===u)if(s){for(a in s)!s.hasOwnProperty(a)||l&&l.hasOwnProperty(a)||(r||(r={}),r[a]="");for(a in l)l.hasOwnProperty(a)&&s[a]!==l[a]&&(r||(r={}),r[a]=l[a])}else r||(i||(i=[]),i.push(u,r)),r=l;else"dangerouslySetInnerHTML"===u?(l=l?l.__html:void 0,s=s?s.__html:void 0,null!=l&&s!==l&&(i=i||[]).push(u,l)):"children"===u?"string"!=typeof l&&"number"!=typeof l||(i=i||[]).push(u,""+l):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(c.hasOwnProperty(u)?(null!=l&&"onScroll"===u&&Fn("scroll",e),i||s===l||(i=[])):(i=i||[]).push(u,l))}r&&(i=i||[]).push("style",r);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Oc=function(e,t,r,n){r!==n&&(t.flags|=4)};var Yc=!1,Jc=!1,Zc="function"==typeof WeakSet?WeakSet:Set,Xc=null;function es(e,t){var r=e.ref;if(null!==r)if("function"==typeof r)try{r(null)}catch(n){_l(e,t,n)}else r.current=null}function ts(e,t,r){try{r()}catch(n){_l(e,t,n)}}var rs=!1;function ns(e,t,r){var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var o=n=n.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&ts(t,r,a)}o=o.next}while(o!==n)}}function os(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function as(e){var t=e.ref;if(null!==t){var r=e.stateNode;e.tag,e=r,"function"==typeof t?t(e):t.current=e}}function is(e){var t=e.alternate;null!==t&&(e.alternate=null,is(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fo],delete t[mo],delete t[go],delete t[bo],delete t[vo])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function cs(e){return 5===e.tag||3===e.tag||4===e.tag}function ss(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||cs(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function ls(e,t,r){var n=e.tag;if(5===n||6===n)e=e.stateNode,t?8===r.nodeType?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(8===r.nodeType?(t=r.parentNode).insertBefore(e,r):(t=r).appendChild(e),null!=(r=r._reactRootContainer)||null!==t.onclick||(t.onclick=Xn));else if(4!==n&&null!==(e=e.child))for(ls(e,t,r),e=e.sibling;null!==e;)ls(e,t,r),e=e.sibling}function us(e,t,r){var n=e.tag;if(5===n||6===n)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(4!==n&&null!==(e=e.child))for(us(e,t,r),e=e.sibling;null!==e;)us(e,t,r),e=e.sibling}var ps=null,ds=!1;function fs(e,t,r){for(r=r.child;null!==r;)ms(e,t,r),r=r.sibling}function ms(e,t,r){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,r)}catch(c){}switch(r.tag){case 5:Jc||es(r,t);case 6:var n=ps,o=ds;ps=null,fs(e,t,r),ds=o,null!==(ps=n)&&(ds?(e=ps,r=r.stateNode,8===e.nodeType?e.parentNode.removeChild(r):e.removeChild(r)):ps.removeChild(r.stateNode));break;case 18:null!==ps&&(ds?(e=ps,r=r.stateNode,8===e.nodeType?so(e.parentNode,r):1===e.nodeType&&so(e,r),$t(e)):so(ps,r.stateNode));break;case 4:n=ps,o=ds,ps=r.stateNode.containerInfo,ds=!0,fs(e,t,r),ps=n,ds=o;break;case 0:case 11:case 14:case 15:if(!Jc&&(null!==(n=r.updateQueue)&&null!==(n=n.lastEffect))){o=n=n.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(0!=(2&a)||0!=(4&a))&&ts(r,t,i),o=o.next}while(o!==n)}fs(e,t,r);break;case 1:if(!Jc&&(es(r,t),"function"==typeof(n=r.stateNode).componentWillUnmount))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(c){_l(r,t,c)}fs(e,t,r);break;case 21:fs(e,t,r);break;case 22:1&r.mode?(Jc=(n=Jc)||null!==r.memoizedState,fs(e,t,r),Jc=n):fs(e,t,r);break;default:fs(e,t,r)}}function hs(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var r=e.stateNode;null===r&&(r=e.stateNode=new Zc),t.forEach((function(t){var n=Ll.bind(null,e,t);r.has(t)||(r.add(t),t.then(n,n))}))}}function gs(e,t){var r=t.deletions;if(null!==r)for(var n=0;n<r.length;n++){var o=r[n];try{var i=e,c=t,s=c;e:for(;null!==s;){switch(s.tag){case 5:ps=s.stateNode,ds=!1;break e;case 3:case 4:ps=s.stateNode.containerInfo,ds=!0;break e}s=s.return}if(null===ps)throw Error(a(160));ms(i,c,o),ps=null,ds=!1;var l=o.alternate;null!==l&&(l.return=null),o.return=null}catch(u){_l(o,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)bs(t,e),t=t.sibling}function bs(e,t){var r=e.alternate,n=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(gs(t,e),vs(e),4&n){try{ns(3,e,e.return),os(3,e)}catch(g){_l(e,e.return,g)}try{ns(5,e,e.return)}catch(g){_l(e,e.return,g)}}break;case 1:gs(t,e),vs(e),512&n&&null!==r&&es(r,r.return);break;case 5:if(gs(t,e),vs(e),512&n&&null!==r&&es(r,r.return),32&e.flags){var o=e.stateNode;try{de(o,"")}catch(g){_l(e,e.return,g)}}if(4&n&&null!=(o=e.stateNode)){var i=e.memoizedProps,c=null!==r?r.memoizedProps:i,s=e.type,l=e.updateQueue;if(e.updateQueue=null,null!==l)try{"input"===s&&"radio"===i.type&&null!=i.name&&J(o,i),ye(s,c);var u=ye(s,i);for(c=0;c<l.length;c+=2){var p=l[c],d=l[c+1];"style"===p?ge(o,d):"dangerouslySetInnerHTML"===p?pe(o,d):"children"===p?de(o,d):y(o,p,d,u)}switch(s){case"input":Z(o,i);break;case"textarea":ae(o,i);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var m=i.value;null!=m?re(o,!!i.multiple,m,!1):f!==!!i.multiple&&(null!=i.defaultValue?re(o,!!i.multiple,i.defaultValue,!0):re(o,!!i.multiple,i.multiple?[]:"",!1))}o[mo]=i}catch(g){_l(e,e.return,g)}}break;case 6:if(gs(t,e),vs(e),4&n){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(g){_l(e,e.return,g)}}break;case 3:if(gs(t,e),vs(e),4&n&&null!==r&&r.memoizedState.isDehydrated)try{$t(t.containerInfo)}catch(g){_l(e,e.return,g)}break;case 4:default:gs(t,e),vs(e);break;case 13:gs(t,e),vs(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||($s=Je())),4&n&&hs(e);break;case 22:if(p=null!==r&&null!==r.memoizedState,1&e.mode?(Jc=(u=Jc)||p,gs(t,e),Jc=u):gs(t,e),vs(e),8192&n){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!p&&0!=(1&e.mode))for(Xc=e,p=e.child;null!==p;){for(d=Xc=p;null!==Xc;){switch(m=(f=Xc).child,f.tag){case 0:case 11:case 14:case 15:ns(4,f,f.return);break;case 1:es(f,f.return);var h=f.stateNode;if("function"==typeof h.componentWillUnmount){n=f,r=f.return;try{t=n,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(g){_l(n,r,g)}}break;case 5:es(f,f.return);break;case 22:if(null!==f.memoizedState){Ss(d);continue}}null!==m?(m.return=f,Xc=m):Ss(d)}p=p.sibling}e:for(p=null,d=e;;){if(5===d.tag){if(null===p){p=d;try{o=d.stateNode,u?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(s=d.stateNode,c=null!=(l=d.memoizedProps.style)&&l.hasOwnProperty("display")?l.display:null,s.style.display=he("display",c))}catch(g){_l(e,e.return,g)}}}else if(6===d.tag){if(null===p)try{d.stateNode.nodeValue=u?"":d.memoizedProps}catch(g){_l(e,e.return,g)}}else if((22!==d.tag&&23!==d.tag||null===d.memoizedState||d===e)&&null!==d.child){d.child.return=d,d=d.child;continue}if(d===e)break e;for(;null===d.sibling;){if(null===d.return||d.return===e)break e;p===d&&(p=null),d=d.return}p===d&&(p=null),d.sibling.return=d.return,d=d.sibling}}break;case 19:gs(t,e),vs(e),4&n&&hs(e);case 21:}}function vs(e){var t=e.flags;if(2&t){try{e:{for(var r=e.return;null!==r;){if(cs(r)){var n=r;break e}r=r.return}throw Error(a(160))}switch(n.tag){case 5:var o=n.stateNode;32&n.flags&&(de(o,""),n.flags&=-33),us(e,ss(e),o);break;case 3:case 4:var i=n.stateNode.containerInfo;ls(e,ss(e),i);break;default:throw Error(a(161))}}catch(c){_l(e,e.return,c)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function ys(e,t,r){Xc=e,ws(e,t,r)}function ws(e,t,r){for(var n=0!=(1&e.mode);null!==Xc;){var o=Xc,a=o.child;if(22===o.tag&&n){var i=null!==o.memoizedState||Yc;if(!i){var c=o.alternate,s=null!==c&&null!==c.memoizedState||Jc;c=Yc;var l=Jc;if(Yc=i,(Jc=s)&&!l)for(Xc=o;null!==Xc;)s=(i=Xc).child,22===i.tag&&null!==i.memoizedState?Cs(o):null!==s?(s.return=i,Xc=s):Cs(o);for(;null!==a;)Xc=a,ws(a,t,r),a=a.sibling;Xc=o,Yc=c,Jc=l}ks(e)}else 0!=(8772&o.subtreeFlags)&&null!==a?(a.return=o,Xc=a):ks(e)}}function ks(e){for(;null!==Xc;){var t=Xc;if(0!=(8772&t.flags)){var r=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Jc||os(5,t);break;case 1:var n=t.stateNode;if(4&t.flags&&!Jc)if(null===r)n.componentDidMount();else{var o=t.elementType===t.type?r.memoizedProps:ba(t.type,r.memoizedProps);n.componentDidUpdate(o,r.memoizedState,n.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&Fa(t,i,n);break;case 3:var c=t.updateQueue;if(null!==c){if(r=null,null!==t.child)switch(t.child.tag){case 5:case 1:r=t.child.stateNode}Fa(t,c,r)}break;case 5:var s=t.stateNode;if(null===r&&4&t.flags){r=s;var l=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":l.autoFocus&&r.focus();break;case"img":l.src&&(r.src=l.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var p=u.memoizedState;if(null!==p){var d=p.dehydrated;null!==d&&$t(d)}}}break;default:throw Error(a(163))}Jc||512&t.flags&&as(t)}catch(f){_l(t,t.return,f)}}if(t===e){Xc=null;break}if(null!==(r=t.sibling)){r.return=t.return,Xc=r;break}Xc=t.return}}function Ss(e){for(;null!==Xc;){var t=Xc;if(t===e){Xc=null;break}var r=t.sibling;if(null!==r){r.return=t.return,Xc=r;break}Xc=t.return}}function Cs(e){for(;null!==Xc;){var t=Xc;try{switch(t.tag){case 0:case 11:case 15:var r=t.return;try{os(4,t)}catch(s){_l(t,r,s)}break;case 1:var n=t.stateNode;if("function"==typeof n.componentDidMount){var o=t.return;try{n.componentDidMount()}catch(s){_l(t,o,s)}}var a=t.return;try{as(t)}catch(s){_l(t,a,s)}break;case 5:var i=t.return;try{as(t)}catch(s){_l(t,i,s)}}}catch(s){_l(t,t.return,s)}if(t===e){Xc=null;break}var c=t.sibling;if(null!==c){c.return=t.return,Xc=c;break}Xc=t.return}}var xs,_s=Math.ceil,Es=w.ReactCurrentDispatcher,As=w.ReactCurrentOwner,Ts=w.ReactCurrentBatchConfig,Ls=0,zs=null,js=null,Rs=0,Ns=0,Ps=_o(0),Os=0,Ds=null,Ms=0,Is=0,Fs=0,Bs=null,qs=null,$s=0,Us=1/0,Qs=null,Hs=!1,Gs=null,Ws=null,Vs=!1,Ks=null,Ys=0,Js=0,Zs=null,Xs=-1,el=0;function tl(){return 0!=(6&Ls)?Je():-1!==Xs?Xs:Xs=Je()}function rl(e){return 0==(1&e.mode)?1:0!=(2&Ls)&&0!==Rs?Rs&-Rs:null!==ga.transition?(0===el&&(el=ht()),el):0!==(e=yt)?e:e=void 0===(e=window.event)?16:Yt(e.type)}function nl(e,t,r,n){if(50<Js)throw Js=0,Zs=null,Error(a(185));bt(e,r,n),0!=(2&Ls)&&e===zs||(e===zs&&(0==(2&Ls)&&(Is|=r),4===Os&&sl(e,Rs)),ol(e,n),1===r&&0===Ls&&0==(1&t.mode)&&(Us=Je()+500,Bo&&Uo()))}function ol(e,t){var r=e.callbackNode;!function(e,t){for(var r=e.suspendedLanes,n=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var i=31-it(a),c=1<<i,s=o[i];-1===s?0!=(c&r)&&0==(c&n)||(o[i]=ft(c,t)):s<=t&&(e.expiredLanes|=c),a&=~c}}(e,t);var n=dt(e,e===zs?Rs:0);if(0===n)null!==r&&Ve(r),e.callbackNode=null,e.callbackPriority=0;else if(t=n&-n,e.callbackPriority!==t){if(null!=r&&Ve(r),1===t)0===e.tag?function(e){Bo=!0,$o(e)}(ll.bind(null,e)):$o(ll.bind(null,e)),io((function(){0==(6&Ls)&&Uo()})),r=null;else{switch(wt(n)){case 1:r=Xe;break;case 4:r=et;break;case 16:default:r=tt;break;case 536870912:r=nt}r=zl(r,al.bind(null,e))}e.callbackPriority=t,e.callbackNode=r}}function al(e,t){if(Xs=-1,el=0,0!=(6&Ls))throw Error(a(327));var r=e.callbackNode;if(Cl()&&e.callbackNode!==r)return null;var n=dt(e,e===zs?Rs:0);if(0===n)return null;if(0!=(30&n)||0!=(n&e.expiredLanes)||t)t=bl(e,n);else{t=n;var o=Ls;Ls|=2;var i=hl();for(zs===e&&Rs===t||(Qs=null,Us=Je()+500,fl(e,t));;)try{yl();break}catch(s){ml(e,s)}Sa(),Es.current=i,Ls=o,null!==js?t=0:(zs=null,Rs=0,t=Os)}if(0!==t){if(2===t&&(0!==(o=mt(e))&&(n=o,t=il(e,o))),1===t)throw r=Ds,fl(e,0),sl(e,n),ol(e,Je()),r;if(6===t)sl(e,n);else{if(o=e.current.alternate,0==(30&n)&&!function(e){for(var t=e;;){if(16384&t.flags){var r=t.updateQueue;if(null!==r&&null!==(r=r.stores))for(var n=0;n<r.length;n++){var o=r[n],a=o.getSnapshot;o=o.value;try{if(!cn(a(),o))return!1}catch(c){return!1}}}if(r=t.child,16384&t.subtreeFlags&&null!==r)r.return=t,t=r;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=bl(e,n))&&(0!==(i=mt(e))&&(n=i,t=il(e,i))),1===t))throw r=Ds,fl(e,0),sl(e,n),ol(e,Je()),r;switch(e.finishedWork=o,e.finishedLanes=n,t){case 0:case 1:throw Error(a(345));case 2:case 5:Sl(e,qs,Qs);break;case 3:if(sl(e,n),(130023424&n)===n&&10<(t=$s+500-Je())){if(0!==dt(e,0))break;if(((o=e.suspendedLanes)&n)!==n){tl(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=no(Sl.bind(null,e,qs,Qs),t);break}Sl(e,qs,Qs);break;case 4:if(sl(e,n),(4194240&n)===n)break;for(t=e.eventTimes,o=-1;0<n;){var c=31-it(n);i=1<<c,(c=t[c])>o&&(o=c),n&=~i}if(n=o,10<(n=(120>(n=Je()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*_s(n/1960))-n)){e.timeoutHandle=no(Sl.bind(null,e,qs,Qs),n);break}Sl(e,qs,Qs);break;default:throw Error(a(329))}}}return ol(e,Je()),e.callbackNode===r?al.bind(null,e):null}function il(e,t){var r=Bs;return e.current.memoizedState.isDehydrated&&(fl(e,t).flags|=256),2!==(e=bl(e,t))&&(t=qs,qs=r,null!==t&&cl(t)),e}function cl(e){null===qs?qs=e:qs.push.apply(qs,e)}function sl(e,t){for(t&=~Fs,t&=~Is,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var r=31-it(t),n=1<<r;e[r]=-1,t&=~n}}function ll(e){if(0!=(6&Ls))throw Error(a(327));Cl();var t=dt(e,0);if(0==(1&t))return ol(e,Je()),null;var r=bl(e,t);if(0!==e.tag&&2===r){var n=mt(e);0!==n&&(t=n,r=il(e,n))}if(1===r)throw r=Ds,fl(e,0),sl(e,t),ol(e,Je()),r;if(6===r)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Sl(e,qs,Qs),ol(e,Je()),null}function ul(e,t){var r=Ls;Ls|=1;try{return e(t)}finally{0===(Ls=r)&&(Us=Je()+500,Bo&&Uo())}}function pl(e){null!==Ks&&0===Ks.tag&&0==(6&Ls)&&Cl();var t=Ls;Ls|=1;var r=Ts.transition,n=yt;try{if(Ts.transition=null,yt=1,e)return e()}finally{yt=n,Ts.transition=r,0==(6&(Ls=t))&&Uo()}}function dl(){Ns=Ps.current,Eo(Ps)}function fl(e,t){e.finishedWork=null,e.finishedLanes=0;var r=e.timeoutHandle;if(-1!==r&&(e.timeoutHandle=-1,oo(r)),null!==js)for(r=js.return;null!==r;){var n=r;switch(ra(n),n.tag){case 1:null!=(n=n.type.childContextTypes)&&Po();break;case 3:ai(),Eo(zo),Eo(Lo),pi();break;case 5:ci(n);break;case 4:ai();break;case 13:case 19:Eo(si);break;case 10:Ca(n.type._context);break;case 22:case 23:dl()}r=r.return}if(zs=e,js=e=Pl(e.current,null),Rs=Ns=t,Os=0,Ds=null,Fs=Is=Ms=0,qs=Bs=null,null!==Aa){for(t=0;t<Aa.length;t++)if(null!==(n=(r=Aa[t]).interleaved)){r.interleaved=null;var o=n.next,a=r.pending;if(null!==a){var i=a.next;a.next=o,n.next=i}r.pending=n}Aa=null}return e}function ml(e,t){for(;;){var r=js;try{if(Sa(),di.current=ic,vi){for(var n=hi.memoizedState;null!==n;){var o=n.queue;null!==o&&(o.pending=null),n=n.next}vi=!1}if(mi=0,bi=gi=hi=null,yi=!1,wi=0,As.current=null,null===r||null===r.return){Os=1,Ds=t,js=null;break}e:{var i=e,c=r.return,s=r,l=t;if(t=Rs,s.flags|=32768,null!==l&&"object"==typeof l&&"function"==typeof l.then){var u=l,p=s,d=p.tag;if(0==(1&p.mode)&&(0===d||11===d||15===d)){var f=p.alternate;f?(p.updateQueue=f.updateQueue,p.memoizedState=f.memoizedState,p.lanes=f.lanes):(p.updateQueue=null,p.memoizedState=null)}var m=bc(c);if(null!==m){m.flags&=-257,vc(m,c,s,0,t),1&m.mode&&gc(i,u,t),l=u;var h=(t=m).updateQueue;if(null===h){var g=new Set;g.add(l),t.updateQueue=g}else h.add(l);break e}if(0==(1&t)){gc(i,u,t),gl();break e}l=Error(a(426))}else if(aa&&1&s.mode){var b=bc(c);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),vc(b,c,s,0,t),ha(uc(l,s));break e}}i=l=uc(l,s),4!==Os&&(Os=2),null===Bs?Bs=[i]:Bs.push(i),i=c;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Ma(i,mc(0,l,t));break e;case 1:s=l;var v=i.type,y=i.stateNode;if(0==(128&i.flags)&&("function"==typeof v.getDerivedStateFromError||null!==y&&"function"==typeof y.componentDidCatch&&(null===Ws||!Ws.has(y)))){i.flags|=65536,t&=-t,i.lanes|=t,Ma(i,hc(i,s,t));break e}}i=i.return}while(null!==i)}kl(r)}catch(w){t=w,js===r&&null!==r&&(js=r=r.return);continue}break}}function hl(){var e=Es.current;return Es.current=ic,null===e?ic:e}function gl(){0!==Os&&3!==Os&&2!==Os||(Os=4),null===zs||0==(268435455&Ms)&&0==(268435455&Is)||sl(zs,Rs)}function bl(e,t){var r=Ls;Ls|=2;var n=hl();for(zs===e&&Rs===t||(Qs=null,fl(e,t));;)try{vl();break}catch(o){ml(e,o)}if(Sa(),Ls=r,Es.current=n,null!==js)throw Error(a(261));return zs=null,Rs=0,Os}function vl(){for(;null!==js;)wl(js)}function yl(){for(;null!==js&&!Ke();)wl(js)}function wl(e){var t=xs(e.alternate,e,Ns);e.memoizedProps=e.pendingProps,null===t?kl(e):js=t,As.current=null}function kl(e){var t=e;do{var r=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(r=Vc(r,t,Ns)))return void(js=r)}else{if(null!==(r=Kc(r,t)))return r.flags&=32767,void(js=r);if(null===e)return Os=6,void(js=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(js=t);js=t=e}while(null!==t);0===Os&&(Os=5)}function Sl(e,t,r){var n=yt,o=Ts.transition;try{Ts.transition=null,yt=1,function(e,t,r,n){do{Cl()}while(null!==Ks);if(0!=(6&Ls))throw Error(a(327));r=e.finishedWork;var o=e.finishedLanes;if(null===r)return null;if(e.finishedWork=null,e.finishedLanes=0,r===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var i=r.lanes|r.childLanes;if(function(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0<r;){var o=31-it(r),a=1<<o;t[o]=0,n[o]=-1,e[o]=-1,r&=~a}}(e,i),e===zs&&(js=zs=null,Rs=0),0==(2064&r.subtreeFlags)&&0==(2064&r.flags)||Vs||(Vs=!0,zl(tt,(function(){return Cl(),null}))),i=0!=(15990&r.flags),0!=(15990&r.subtreeFlags)||i){i=Ts.transition,Ts.transition=null;var c=yt;yt=1;var s=Ls;Ls|=4,As.current=null,function(e,t){if(eo=Qt,fn(e=dn())){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{var n=(r=(r=e.ownerDocument)&&r.defaultView||window).getSelection&&r.getSelection();if(n&&0!==n.rangeCount){r=n.anchorNode;var o=n.anchorOffset,i=n.focusNode;n=n.focusOffset;try{r.nodeType,i.nodeType}catch(k){r=null;break e}var c=0,s=-1,l=-1,u=0,p=0,d=e,f=null;t:for(;;){for(var m;d!==r||0!==o&&3!==d.nodeType||(s=c+o),d!==i||0!==n&&3!==d.nodeType||(l=c+n),3===d.nodeType&&(c+=d.nodeValue.length),null!==(m=d.firstChild);)f=d,d=m;for(;;){if(d===e)break t;if(f===r&&++u===o&&(s=c),f===i&&++p===n&&(l=c),null!==(m=d.nextSibling))break;f=(d=f).parentNode}d=m}r=-1===s||-1===l?null:{start:s,end:l}}else r=null}r=r||{start:0,end:0}}else r=null;for(to={focusedElem:e,selectionRange:r},Qt=!1,Xc=t;null!==Xc;)if(e=(t=Xc).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Xc=e;else for(;null!==Xc;){t=Xc;try{var h=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==h){var g=h.memoizedProps,b=h.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?g:ba(t.type,g),b);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(a(163))}}catch(k){_l(t,t.return,k)}if(null!==(e=t.sibling)){e.return=t.return,Xc=e;break}Xc=t.return}h=rs,rs=!1}(e,r),bs(r,e),mn(to),Qt=!!eo,to=eo=null,e.current=r,ys(r,e,o),Ye(),Ls=s,yt=c,Ts.transition=i}else e.current=r;if(Vs&&(Vs=!1,Ks=e,Ys=o),i=e.pendingLanes,0===i&&(Ws=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(t){}}(r.stateNode),ol(e,Je()),null!==t)for(n=e.onRecoverableError,r=0;r<t.length;r++)o=t[r],n(o.value,{componentStack:o.stack,digest:o.digest});if(Hs)throw Hs=!1,e=Gs,Gs=null,e;0!=(1&Ys)&&0!==e.tag&&Cl(),i=e.pendingLanes,0!=(1&i)?e===Zs?Js++:(Js=0,Zs=e):Js=0,Uo()}(e,t,r,n)}finally{Ts.transition=o,yt=n}return null}function Cl(){if(null!==Ks){var e=wt(Ys),t=Ts.transition,r=yt;try{if(Ts.transition=null,yt=16>e?16:e,null===Ks)var n=!1;else{if(e=Ks,Ks=null,Ys=0,0!=(6&Ls))throw Error(a(331));var o=Ls;for(Ls|=4,Xc=e.current;null!==Xc;){var i=Xc,c=i.child;if(0!=(16&Xc.flags)){var s=i.deletions;if(null!==s){for(var l=0;l<s.length;l++){var u=s[l];for(Xc=u;null!==Xc;){var p=Xc;switch(p.tag){case 0:case 11:case 15:ns(8,p,i)}var d=p.child;if(null!==d)d.return=p,Xc=d;else for(;null!==Xc;){var f=(p=Xc).sibling,m=p.return;if(is(p),p===u){Xc=null;break}if(null!==f){f.return=m,Xc=f;break}Xc=m}}}var h=i.alternate;if(null!==h){var g=h.child;if(null!==g){h.child=null;do{var b=g.sibling;g.sibling=null,g=b}while(null!==g)}}Xc=i}}if(0!=(2064&i.subtreeFlags)&&null!==c)c.return=i,Xc=c;else e:for(;null!==Xc;){if(0!=(2048&(i=Xc).flags))switch(i.tag){case 0:case 11:case 15:ns(9,i,i.return)}var v=i.sibling;if(null!==v){v.return=i.return,Xc=v;break e}Xc=i.return}}var y=e.current;for(Xc=y;null!==Xc;){var w=(c=Xc).child;if(0!=(2064&c.subtreeFlags)&&null!==w)w.return=c,Xc=w;else e:for(c=y;null!==Xc;){if(0!=(2048&(s=Xc).flags))try{switch(s.tag){case 0:case 11:case 15:os(9,s)}}catch(S){_l(s,s.return,S)}if(s===c){Xc=null;break e}var k=s.sibling;if(null!==k){k.return=s.return,Xc=k;break e}Xc=s.return}}if(Ls=o,Uo(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(S){}n=!0}return n}finally{yt=r,Ts.transition=t}}return!1}function xl(e,t,r){e=Oa(e,t=mc(0,t=uc(r,t),1),1),t=tl(),null!==e&&(bt(e,1,t),ol(e,t))}function _l(e,t,r){if(3===e.tag)xl(e,e,r);else for(;null!==t;){if(3===t.tag){xl(t,e,r);break}if(1===t.tag){var n=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof n.componentDidCatch&&(null===Ws||!Ws.has(n))){t=Oa(t,e=hc(t,e=uc(r,e),1),1),e=tl(),null!==t&&(bt(t,1,e),ol(t,e));break}}t=t.return}}function El(e,t,r){var n=e.pingCache;null!==n&&n.delete(t),t=tl(),e.pingedLanes|=e.suspendedLanes&r,zs===e&&(Rs&r)===r&&(4===Os||3===Os&&(130023424&Rs)===Rs&&500>Je()-$s?fl(e,0):Fs|=r),ol(e,t)}function Al(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var r=tl();null!==(e=za(e,t))&&(bt(e,t,r),ol(e,r))}function Tl(e){var t=e.memoizedState,r=0;null!==t&&(r=t.retryLane),Al(e,r)}function Ll(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,o=e.memoizedState;null!==o&&(r=o.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(a(314))}null!==n&&n.delete(t),Al(e,r)}function zl(e,t){return We(e,t)}function jl(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Rl(e,t,r,n){return new jl(e,t,r,n)}function Nl(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Pl(e,t){var r=e.alternate;return null===r?((r=Rl(e.tag,t,e.key,e.mode)).elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=14680064&e.flags,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function Ol(e,t,r,n,o,i){var c=2;if(n=e,"function"==typeof e)Nl(e)&&(c=1);else if("string"==typeof e)c=5;else e:switch(e){case C:return Dl(r.children,o,i,t);case x:c=8,o|=8;break;case _:return(e=Rl(12,r,t,2|o)).elementType=_,e.lanes=i,e;case L:return(e=Rl(13,r,t,o)).elementType=L,e.lanes=i,e;case z:return(e=Rl(19,r,t,o)).elementType=z,e.lanes=i,e;case N:return Ml(r,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case E:c=10;break e;case A:c=9;break e;case T:c=11;break e;case j:c=14;break e;case R:c=16,n=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Rl(c,r,t,o)).elementType=e,t.type=n,t.lanes=i,t}function Dl(e,t,r,n){return(e=Rl(7,e,n,t)).lanes=r,e}function Ml(e,t,r,n){return(e=Rl(22,e,n,t)).elementType=N,e.lanes=r,e.stateNode={isHidden:!1},e}function Il(e,t,r){return(e=Rl(6,e,null,t)).lanes=r,e}function Fl(e,t,r){return(t=Rl(4,null!==e.children?e.children:[],e.key,t)).lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Bl(e,t,r,n,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=gt(0),this.expirationTimes=gt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=gt(0),this.identifierPrefix=n,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function ql(e,t,r,n,o,a,i,c,s){return e=new Bl(e,t,r,c,s),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Rl(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ra(a),e}function $l(e){if(!e)return To;e:{if($e(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(No(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var r=e.type;if(No(r))return Do(e,r,t)}return t}function Ul(e,t,r,n,o,a,i,c,s){return(e=ql(r,n,!0,e,0,a,0,c,s)).context=$l(null),r=e.current,(a=Pa(n=tl(),o=rl(r))).callback=null!=t?t:null,Oa(r,a,o),e.current.lanes=o,bt(e,o,n),ol(e,n),e}function Ql(e,t,r,n){var o=t.current,a=tl(),i=rl(o);return r=$l(r),null===t.context?t.context=r:t.pendingContext=r,(t=Pa(a,i)).payload={element:e},null!==(n=void 0===n?null:n)&&(t.callback=n),null!==(e=Oa(o,t,i))&&(nl(e,o,i,a),Da(e,o,i)),i}function Hl(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Gl(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var r=e.retryLane;e.retryLane=0!==r&&r<t?r:t}}function Wl(e,t){Gl(e,t),(e=e.alternate)&&Gl(e,t)}xs=function(e,t,r){if(null!==e)if(e.memoizedProps!==t.pendingProps||zo.current)wc=!0;else{if(0==(e.lanes&r)&&0==(128&t.flags))return wc=!1,function(e,t,r){switch(t.tag){case 3:zc(t),ma();break;case 5:ii(t);break;case 1:No(t.type)&&Mo(t);break;case 4:oi(t,t.stateNode.containerInfo);break;case 10:var n=t.type._context,o=t.memoizedProps.value;Ao(va,n._currentValue),n._currentValue=o;break;case 13:if(null!==(n=t.memoizedState))return null!==n.dehydrated?(Ao(si,1&si.current),t.flags|=128,null):0!=(r&t.child.childLanes)?Ic(e,t,r):(Ao(si,1&si.current),null!==(e=Hc(e,t,r))?e.sibling:null);Ao(si,1&si.current);break;case 19:if(n=0!=(r&t.childLanes),0!=(128&e.flags)){if(n)return Uc(e,t,r);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),Ao(si,si.current),n)break;return null;case 22:case 23:return t.lanes=0,_c(e,t,r)}return Hc(e,t,r)}(e,t,r);wc=0!=(131072&e.flags)}else wc=!1,aa&&0!=(1048576&t.flags)&&ea(t,Wo,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;Qc(e,t),e=t.pendingProps;var o=Ro(t,Lo.current);_a(t,r),o=xi(null,t,n,e,o,r);var i=_i();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,No(n)?(i=!0,Mo(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Ra(t),o.updater=$a,t.stateNode=o,o._reactInternals=t,Ga(t,n,e,r),t=Lc(null,t,n,!0,i,r)):(t.tag=0,aa&&i&&ta(t),kc(null,t,o,r),t=t.child),t;case 16:n=t.elementType;e:{switch(Qc(e,t),e=t.pendingProps,n=(o=n._init)(n._payload),t.type=n,o=t.tag=function(e){if("function"==typeof e)return Nl(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===j)return 14}return 2}(n),e=ba(n,e),o){case 0:t=Ac(null,t,n,e,r);break e;case 1:t=Tc(null,t,n,e,r);break e;case 11:t=Sc(null,t,n,e,r);break e;case 14:t=Cc(null,t,n,ba(n.type,e),r);break e}throw Error(a(306,n,""))}return t;case 0:return n=t.type,o=t.pendingProps,Ac(e,t,n,o=t.elementType===n?o:ba(n,o),r);case 1:return n=t.type,o=t.pendingProps,Tc(e,t,n,o=t.elementType===n?o:ba(n,o),r);case 3:e:{if(zc(t),null===e)throw Error(a(387));n=t.pendingProps,o=(i=t.memoizedState).element,Na(e,t),Ia(t,n,null,r);var c=t.memoizedState;if(n=c.element,i.isDehydrated){if(i={element:n,isDehydrated:!1,cache:c.cache,pendingSuspenseBoundaries:c.pendingSuspenseBoundaries,transitions:c.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=jc(e,t,n,r,o=uc(Error(a(423)),t));break e}if(n!==o){t=jc(e,t,n,r,o=uc(Error(a(424)),t));break e}for(oa=lo(t.stateNode.containerInfo.firstChild),na=t,aa=!0,ia=null,r=Za(t,null,n,r),t.child=r;r;)r.flags=-3&r.flags|4096,r=r.sibling}else{if(ma(),n===o){t=Hc(e,t,r);break e}kc(e,t,n,r)}t=t.child}return t;case 5:return ii(t),null===e&&ua(t),n=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,c=o.children,ro(n,o)?c=null:null!==i&&ro(n,i)&&(t.flags|=32),Ec(e,t),kc(e,t,c,r),t.child;case 6:return null===e&&ua(t),null;case 13:return Ic(e,t,r);case 4:return oi(t,t.stateNode.containerInfo),n=t.pendingProps,null===e?t.child=Ja(t,null,n,r):kc(e,t,n,r),t.child;case 11:return n=t.type,o=t.pendingProps,Sc(e,t,n,o=t.elementType===n?o:ba(n,o),r);case 7:return kc(e,t,t.pendingProps,r),t.child;case 8:case 12:return kc(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,o=t.pendingProps,i=t.memoizedProps,c=o.value,Ao(va,n._currentValue),n._currentValue=c,null!==i)if(cn(i.value,c)){if(i.children===o.children&&!zo.current){t=Hc(e,t,r);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var s=i.dependencies;if(null!==s){c=i.child;for(var l=s.firstContext;null!==l;){if(l.context===n){if(1===i.tag){(l=Pa(-1,r&-r)).tag=2;var u=i.updateQueue;if(null!==u){var p=(u=u.shared).pending;null===p?l.next=l:(l.next=p.next,p.next=l),u.pending=l}}i.lanes|=r,null!==(l=i.alternate)&&(l.lanes|=r),xa(i.return,r,t),s.lanes|=r;break}l=l.next}}else if(10===i.tag)c=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(c=i.return))throw Error(a(341));c.lanes|=r,null!==(s=c.alternate)&&(s.lanes|=r),xa(c,r,t),c=i.sibling}else c=i.child;if(null!==c)c.return=i;else for(c=i;null!==c;){if(c===t){c=null;break}if(null!==(i=c.sibling)){i.return=c.return,c=i;break}c=c.return}i=c}kc(e,t,o.children,r),t=t.child}return t;case 9:return o=t.type,n=t.pendingProps.children,_a(t,r),n=n(o=Ea(o)),t.flags|=1,kc(e,t,n,r),t.child;case 14:return o=ba(n=t.type,t.pendingProps),Cc(e,t,n,o=ba(n.type,o),r);case 15:return xc(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:ba(n,o),Qc(e,t),t.tag=1,No(n)?(e=!0,Mo(t)):e=!1,_a(t,r),Qa(t,n,o),Ga(t,n,o,r),Lc(null,t,n,!0,e,r);case 19:return Uc(e,t,r);case 22:return _c(e,t,r)}throw Error(a(156,t.tag))};var Vl="function"==typeof reportError?reportError:function(e){console.error(e)};function Kl(e){this._internalRoot=e}function Yl(e){this._internalRoot=e}function Jl(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Zl(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Xl(){}function eu(e,t,r,n,o){var a=r._reactRootContainer;if(a){var i=a;if("function"==typeof o){var c=o;o=function(){var e=Hl(i);c.call(e)}}Ql(t,i,e,o)}else i=function(e,t,r,n,o){if(o){if("function"==typeof n){var a=n;n=function(){var e=Hl(i);a.call(e)}}var i=Ul(t,n,e,0,null,!1,0,"",Xl);return e._reactRootContainer=i,e[ho]=i.current,$n(8===e.nodeType?e.parentNode:e),pl(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof n){var c=n;n=function(){var e=Hl(s);c.call(e)}}var s=ql(e,0,!1,null,0,!1,0,"",Xl);return e._reactRootContainer=s,e[ho]=s.current,$n(8===e.nodeType?e.parentNode:e),pl((function(){Ql(t,s,r,n)})),s}(r,t,e,o,n);return Hl(i)}Yl.prototype.render=Kl.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));Ql(e,t,null,null)},Yl.prototype.unmount=Kl.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;pl((function(){Ql(null,e,null,null)})),t[ho]=null}},Yl.prototype.unstable_scheduleHydration=function(e){if(e){var t=xt();e={blockedOn:null,target:e,priority:t};for(var r=0;r<Nt.length&&0!==t&&t<Nt[r].priority;r++);Nt.splice(r,0,e),0===r&&Mt(e)}},kt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var r=pt(t.pendingLanes);0!==r&&(vt(t,1|r),ol(t,Je()),0==(6&Ls)&&(Us=Je()+500,Uo()))}break;case 13:pl((function(){var t=za(e,1);if(null!==t){var r=tl();nl(t,e,1,r)}})),Wl(e,1)}},St=function(e){if(13===e.tag){var t=za(e,134217728);if(null!==t)nl(t,e,134217728,tl());Wl(e,134217728)}},Ct=function(e){if(13===e.tag){var t=rl(e),r=za(e,t);if(null!==r)nl(r,e,t,tl());Wl(e,t)}},xt=function(){return yt},_t=function(e,t){var r=yt;try{return yt=e,t()}finally{yt=r}},Se=function(e,t,r){switch(t){case"input":if(Z(e,r),t=r.name,"radio"===r.type&&null!=t){for(r=e;r.parentNode;)r=r.parentNode;for(r=r.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<r.length;t++){var n=r[t];if(n!==e&&n.form===e.form){var o=So(n);if(!o)throw Error(a(90));W(n),Z(n,o)}}}break;case"textarea":ae(e,r);break;case"select":null!=(t=r.value)&&re(e,!!r.multiple,t,!1)}},Te=ul,Le=pl;var tu={usingClientEntryPoint:!1,Events:[wo,ko,So,Ee,Ae,ul]},ru={findFiberByHostInstance:yo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},nu={bundleType:ru.bundleType,version:ru.version,rendererPackageName:ru.rendererPackageName,rendererConfig:ru.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=He(e))?null:e.stateNode},findFiberByHostInstance:ru.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ou=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ou.isDisabled&&ou.supportsFiber)try{ot=ou.inject(nu),at=ou}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tu,t.createPortal=function(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Jl(t))throw Error(a(200));return function(e,t,r){var n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:S,key:null==n?null:""+n,children:e,containerInfo:t,implementation:r}}(e,t,null,r)},t.createRoot=function(e,t){if(!Jl(e))throw Error(a(299));var r=!1,n="",o=Vl;return null!=t&&(!0===t.unstable_strictMode&&(r=!0),void 0!==t.identifierPrefix&&(n=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=ql(e,1,!1,null,0,r,0,n,o),e[ho]=t.current,$n(8===e.nodeType?e.parentNode:e),new Kl(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return e=null===(e=He(t))?null:e.stateNode},t.flushSync=function(e){return pl(e)},t.hydrate=function(e,t,r){if(!Zl(t))throw Error(a(200));return eu(null,e,t,!0,r)},t.hydrateRoot=function(e,t,r){if(!Jl(e))throw Error(a(405));var n=null!=r&&r.hydratedSources||null,o=!1,i="",c=Vl;if(null!=r&&(!0===r.unstable_strictMode&&(o=!0),void 0!==r.identifierPrefix&&(i=r.identifierPrefix),void 0!==r.onRecoverableError&&(c=r.onRecoverableError)),t=Ul(t,null,e,1,null!=r?r:null,o,0,i,c),e[ho]=t.current,$n(e),n)for(e=0;e<n.length;e++)o=(o=(r=n[e])._getVersion)(r._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[r,o]:t.mutableSourceEagerHydrationData.push(r,o);return new Yl(t)},t.render=function(e,t,r){if(!Zl(t))throw Error(a(200));return eu(null,e,t,!1,r)},t.unmountComponentAtNode=function(e){if(!Zl(e))throw Error(a(40));return!!e._reactRootContainer&&(pl((function(){eu(null,null,e,!1,(function(){e._reactRootContainer=null,e[ho]=null}))})),!0)},t.unstable_batchedUpdates=ul,t.unstable_renderSubtreeIntoContainer=function(e,t,r,n){if(!Zl(r))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return eu(e,t,r,!1,n)},t.version="18.2.0-next-9e3b772b8-20220608"},5338:(e,t,r)=>{"use strict";var n=r(40961);t.createRoot=n.createRoot,t.hydrateRoot=n.hydrateRoot},40961:(e,t,r)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=r(22551)},30115:e=>{var t="undefined"!=typeof Element,r="function"==typeof Map,n="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var c,s,l,u;if(Array.isArray(e)){if((c=e.length)!=i.length)return!1;for(s=c;0!=s--;)if(!a(e[s],i[s]))return!1;return!0}if(r&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(s=u.next()).done;)if(!i.has(s.value[0]))return!1;for(u=e.entries();!(s=u.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(n&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(s=u.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((c=e.length)!=i.length)return!1;for(s=c;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((c=(l=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=c;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,l[s]))return!1;if(t&&e instanceof Element)return!1;for(s=c;0!=s--;)if(("_owner"!==l[s]&&"__v"!==l[s]&&"__o"!==l[s]||!e.$$typeof)&&!a(e[l[s]],i[l[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(r){if((r.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw r}}},80545:(e,t,r)=>{"use strict";r.d(t,{mg:()=>X,vd:()=>H});var n=r(96540),o=r(5556),a=r.n(o),i=r(30115),c=r.n(i),s=r(20311),l=r.n(s),u=r(2833),p=r.n(u);function d(){return d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},d.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)t.indexOf(r=a[n])>=0||(o[r]=e[r]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},S=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),C=function(e,t){for(var r=e.length-1;r>=0;r-=1){var n=e[r];if(Object.prototype.hasOwnProperty.call(n,t))return n[t]}return null},x=function(e){var t=C(e,g.TITLE),r=C(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),r&&t)return r.replace(/%s/g,(function(){return t}));var n=C(e,"defaultTitle");return t||n||void 0},_=function(e){return C(e,"onChangeClientState")||function(){}},E=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return d({},e,t)}),{})},A=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,r){if(!t.length)for(var n=Object.keys(r),o=0;o<n.length;o+=1){var a=n[o].toLowerCase();if(-1!==e.indexOf(a)&&r[a])return t.concat(r)}return t}),[])},T=function(e,t,r){var n={};return r.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,r){var o={};r.filter((function(e){for(var r,a=Object.keys(e),i=0;i<a.length;i+=1){var c=a[i],s=c.toLowerCase();-1===t.indexOf(s)||"rel"===r&&"canonical"===e[r].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(r=s),-1===t.indexOf(c)||"innerHTML"!==c&&"cssText"!==c&&"itemprop"!==c||(r=c)}if(!r||!e[r])return!1;var l=e[r].toLowerCase();return n[r]||(n[r]={}),o[r]||(o[r]={}),!n[r][l]&&(o[r][l]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var c=a[i],s=d({},n[c],o[c]);n[c]=s}return e}),[]).reverse()},L=function(e,t){if(Array.isArray(e)&&e.length)for(var r=0;r<e.length;r+=1)if(e[r][t])return!0;return!1},z=function(e){return Array.isArray(e)?e.join(""):e},j=function(e,t){return Array.isArray(e)?e.reduce((function(e,r){return function(e,t){for(var r=Object.keys(e),n=0;n<r.length;n+=1)if(t[r[n]]&&t[r[n]].includes(e[r[n]]))return!0;return!1}(r,t)?e.priority.push(r):e.default.push(r),e}),{priority:[],default:[]}):{default:e}},R=function(e,t){var r;return d({},e,((r={})[t]=void 0,r))},N=[g.NOSCRIPT,g.SCRIPT,g.STYLE],P=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},O=function(e){return Object.keys(e).reduce((function(t,r){var n=void 0!==e[r]?r+'="'+e[r]+'"':""+r;return t?t+" "+n:n}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,r){return t[k[r]||r]=e[r],t}),t)},M=function(e,t){return t.map((function(t,r){var o,a=((o={key:r})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var r=k[e]||e;"innerHTML"===r||"cssText"===r?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[r]=t[e]})),n.createElement(e,a)}))},I=function(e,t,r){switch(e){case g.TITLE:return{toComponent:function(){return r=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(r,o),[n.createElement(g.TITLE,a,e)];var e,r,o,a},toString:function(){return function(e,t,r,n){var o=O(r),a=z(t);return o?"<"+e+' data-rh="true" '+o+">"+P(a,n)+"</"+e+">":"<"+e+' data-rh="true">'+P(a,n)+"</"+e+">"}(e,t.title,t.titleAttributes,r)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return O(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,r){return t.reduce((function(t,n){var o=Object.keys(n).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===n[t]?t:t+'="'+P(n[t],r)+'"';return e?e+" "+o:o}),""),a=n.innerHTML||n.cssText||"",i=-1===N.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,r)}}}},F=function(e){var t=e.baseTag,r=e.bodyAttributes,n=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,c=e.title,s=void 0===c?"":c,l=e.titleAttributes,u=e.linkTags,p=e.metaTags,d=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,r=e.scriptTags,n=e.encode,o=j(e.metaTags,y),a=j(t,b),i=j(r,v);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,o.priority),M(g.LINK,a.priority),M(g.SCRIPT,i.priority))},toString:function(){return I(g.META,o.priority,n)+" "+I(g.LINK,a.priority,n)+" "+I(g.SCRIPT,i.priority,n)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);f=m.priorityMethods,u=m.linkTags,p=m.metaTags,d=m.scriptTags}return{priority:f,base:I(g.BASE,t,n),bodyAttributes:I("bodyAttributes",r,n),htmlAttributes:I("htmlAttributes",o,n),link:I(g.LINK,u,n),meta:I(g.META,p,n),noscript:I(g.NOSCRIPT,a,n),script:I(g.SCRIPT,d,n),style:I(g.STYLE,i,n),title:I(g.TITLE,{title:s,titleAttributes:l},n)}},B=[],q=function(e,t){var r=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){r.context.helmet=e},helmetInstances:{get:function(){return r.canUseDOM?B:r.instances},add:function(e){(r.canUseDOM?B:r.instances).push(e)},remove:function(e){var t=(r.canUseDOM?B:r.instances).indexOf(e);(r.canUseDOM?B:r.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=F({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=n.createContext({}),U=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),Q="undefined"!=typeof document,H=function(e){function t(r){var n;return(n=e.call(this,r)||this).helmetData=new q(n.props.context,t.canUseDOM),n}return f(t,e),t.prototype.render=function(){return n.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(n.Component);H.canUseDOM=Q,H.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},H.defaultProps={context:{}},H.displayName="HelmetProvider";var G=function(e,t){var r,n=document.head||document.querySelector(g.HEAD),o=n.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var n=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?n.innerHTML=t.innerHTML:"cssText"===o?n.styleSheet?n.styleSheet.cssText=t.cssText:n.appendChild(document.createTextNode(t.cssText)):n.setAttribute(o,void 0===t[o]?"":t[o]));n.setAttribute("data-rh","true"),a.some((function(e,t){return r=t,n.isEqualNode(e)}))?a.splice(r,1):i.push(n)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return n.appendChild(e)})),{oldTags:a,newTags:i}},W=function(e,t){var r=document.getElementsByTagName(e)[0];if(r){for(var n=r.getAttribute("data-rh"),o=n?n.split(","):[],a=[].concat(o),i=Object.keys(t),c=0;c<i.length;c+=1){var s=i[c],l=t[s]||"";r.getAttribute(s)!==l&&r.setAttribute(s,l),-1===o.indexOf(s)&&o.push(s);var u=a.indexOf(s);-1!==u&&a.splice(u,1)}for(var p=a.length-1;p>=0;p-=1)r.removeAttribute(a[p]);o.length===a.length?r.removeAttribute("data-rh"):r.getAttribute("data-rh")!==i.join(",")&&r.setAttribute("data-rh",i.join(","))}},V=function(e,t){var r=e.baseTag,n=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,c=e.onChangeClientState,s=e.scriptTags,l=e.styleTags,u=e.title,p=e.titleAttributes;W(g.BODY,e.bodyAttributes),W(g.HTML,n),function(e,t){void 0!==e&&document.title!==e&&(document.title=z(e)),W(g.TITLE,t)}(u,p);var d={baseTag:G(g.BASE,r),linkTags:G(g.LINK,o),metaTags:G(g.META,a),noscriptTags:G(g.NOSCRIPT,i),scriptTags:G(g.SCRIPT,s),styleTags:G(g.STYLE,l)},f={},m={};Object.keys(d).forEach((function(e){var t=d[e],r=t.newTags,n=t.oldTags;r.length&&(f[e]=r),n.length&&(m[e]=d[e].oldTags)})),t&&t(),c(e,f,m)},K=null,Y=function(e){function t(){for(var t,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return(t=e.call.apply(e,[this].concat(n))||this).rendered=!1,t}f(t,e);var r=t.prototype;return r.shouldComponentUpdate=function(e){return!p()(e,this.props)},r.componentDidUpdate=function(){this.emitChange()},r.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},r.emitChange=function(){var e,t,r=this.props.context,n=r.setHelmet,o=null,a=(e=r.helmetInstances.get().map((function(e){var t=d({},e.props);return delete t.context,t})),{baseTag:A(["href"],e),bodyAttributes:E("bodyAttributes",e),defer:C(e,"defer"),encode:C(e,"encodeSpecialCharacters"),htmlAttributes:E("htmlAttributes",e),linkTags:T(g.LINK,["rel","href"],e),metaTags:T(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:T(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:_(e),scriptTags:T(g.SCRIPT,["src","innerHTML"],e),styleTags:T(g.STYLE,["cssText"],e),title:x(e),titleAttributes:E("titleAttributes",e),prioritizeSeoTags:L(e,"prioritizeSeoTags")});H.canUseDOM?(t=a,K&&cancelAnimationFrame(K),t.defer?K=requestAnimationFrame((function(){V(t,(function(){K=null}))})):(V(t),K=null)):F&&(o=F(a)),n(o)},r.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},r.render=function(){return this.init(),null},t}(n.Component);Y.propTypes={context:U.isRequired},Y.displayName="HelmetDispatcher";var J=["children"],Z=["children"],X=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var r=t.prototype;return r.shouldComponentUpdate=function(e){return!c()(R(this.props,"helmetData"),R(e,"helmetData"))},r.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},r.flattenArrayTypeChildren=function(e){var t,r=e.child,n=e.arrayTypeChildren;return d({},n,((t={})[r.type]=[].concat(n[r.type]||[],[d({},e.newChildProps,this.mapNestedChildrenToProps(r,e.nestedChildren))]),t))},r.mapObjectTypeChildren=function(e){var t,r,n=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(n.type){case g.TITLE:return d({},o,((t={})[n.type]=i,t.titleAttributes=d({},a),t));case g.BODY:return d({},o,{bodyAttributes:d({},a)});case g.HTML:return d({},o,{htmlAttributes:d({},a)});default:return d({},o,((r={})[n.type]=d({},a),r))}},r.mapArrayTypeChildrenToProps=function(e,t){var r=d({},t);return Object.keys(e).forEach((function(t){var n;r=d({},r,((n={})[t]=e[t],n))})),r},r.warnOnInvalidChildren=function(e,t){return l()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),l()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},r.mapChildrenToProps=function(e,t){var r=this,o={};return n.Children.forEach(e,(function(e){if(e&&e.props){var n=e.props,a=n.children,i=h(n,J),c=Object.keys(i).reduce((function(e,t){return e[S[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():r.warnOnInvalidChildren(e,a),s){case g.FRAGMENT:t=r.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=r.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:c,nestedChildren:a});break;default:t=r.mapObjectTypeChildren({child:e,newProps:t,newChildProps:c,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},r.render=function(){var e=this.props,t=e.children,r=h(e,Z),o=d({},r),a=r.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof q||(a=new q(a.context,a.instances)),a?n.createElement(Y,d({},o,{context:a.value,helmetData:void 0})):n.createElement($.Consumer,null,(function(e){return n.createElement(Y,d({},o,{context:e}))}))},t}(n.Component);X.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},X.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},X.displayName="Helmet"},22799:(e,t)=>{"use strict";var r="function"==typeof Symbol&&Symbol.for,n=r?Symbol.for("react.element"):60103,o=r?Symbol.for("react.portal"):60106,a=r?Symbol.for("react.fragment"):60107,i=r?Symbol.for("react.strict_mode"):60108,c=r?Symbol.for("react.profiler"):60114,s=r?Symbol.for("react.provider"):60109,l=r?Symbol.for("react.context"):60110,u=r?Symbol.for("react.async_mode"):60111,p=r?Symbol.for("react.concurrent_mode"):60111,d=r?Symbol.for("react.forward_ref"):60112,f=r?Symbol.for("react.suspense"):60113,m=r?Symbol.for("react.suspense_list"):60120,h=r?Symbol.for("react.memo"):60115,g=r?Symbol.for("react.lazy"):60116,b=r?Symbol.for("react.block"):60121,v=r?Symbol.for("react.fundamental"):60117,y=r?Symbol.for("react.responder"):60118,w=r?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case n:switch(e=e.type){case u:case p:case a:case c:case i:case f:return e;default:switch(e=e&&e.$$typeof){case l:case d:case g:case h:case s:return e;default:return t}}case o:return t}}}function S(e){return k(e)===p}t.AsyncMode=u,t.ConcurrentMode=p,t.ContextConsumer=l,t.ContextProvider=s,t.Element=n,t.ForwardRef=d,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=c,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return S(e)||k(e)===u},t.isConcurrentMode=S,t.isContextConsumer=function(e){return k(e)===l},t.isContextProvider=function(e){return k(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===n},t.isForwardRef=function(e){return k(e)===d},t.isFragment=function(e){return k(e)===a},t.isLazy=function(e){return k(e)===g},t.isMemo=function(e){return k(e)===h},t.isPortal=function(e){return k(e)===o},t.isProfiler=function(e){return k(e)===c},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===p||e===c||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===l||e.$$typeof===d||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},44363:(e,t,r)=>{"use strict";e.exports=r(22799)},53259:(e,t,r)=>{"use strict";function n(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},i.apply(this,arguments)}var c=r(96540),s=[],l=[];var u=c.createContext(null);function p(e){var t=e(),r={loading:!0,loaded:null,error:null};return r.promise=t.then((function(e){return r.loading=!1,r.loaded=e,e})).catch((function(e){throw r.loading=!1,r.error=e,e})),r}function d(e){var t={loading:!1,loaded:{},error:null},r=[];try{Object.keys(e).forEach((function(n){var o=p(e[n]);o.loading?t.loading=!0:(t.loaded[n]=o.loaded,t.error=o.error),r.push(o.promise),o.promise.then((function(e){t.loaded[n]=e})).catch((function(e){t.error=e}))}))}catch(n){t.error=n}return t.promise=Promise.all(r).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return c.createElement((r=e)&&r.__esModule?r.default:r,t);var r}function m(e,t){var p,d;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return s.push(g),"function"==typeof m.webpack&&l.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==r.m[e]})))return g()})),d=p=function(t){function r(r){var n;return a(o(o(n=t.call(this,r)||this)),"retry",(function(){n.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),n._loadModule()})),g(),n.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},n}n(r,t),r.preload=function(){return g()};var i=r.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var r=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return r(),null})).catch((function(e){return r(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?c.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},r}(c.Component),a(p,"contextType",u),d}function h(e){return m(p,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(d,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){return c.createElement(u.Provider,{value:{report:this.props.report}},c.Children.only(this.props.children))},t}(c.Component);function b(e){for(var t=[];e.length;){var r=e.pop();t.push(r())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){b(s).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){b(l).then(e,e)}))},e.exports=h},22831:(e,t,r)=>{"use strict";r.d(t,{u:()=>i,v:()=>c});var n=r(56347),o=r(58168),a=r(96540);function i(e,t,r){return void 0===r&&(r=[]),e.some((function(e){var o=e.path?(0,n.B6)(t,e):r.length?r[r.length-1].match:n.Ix.computeRootMatch(t);return o&&(r.push({route:e,match:o}),e.routes&&i(e.routes,t,r)),o})),r}function c(e,t,r){return void 0===t&&(t={}),void 0===r&&(r={}),e?a.createElement(n.dO,r,e.map((function(e,r){return a.createElement(n.qh,{key:e.key||r,path:e.path,exact:e.exact,strict:e.strict,render:function(r){return e.render?e.render((0,o.A)({},r,{},t,{route:e})):a.createElement(e.component,(0,o.A)({},r,t,{route:e}))}})}))):null}},54625:(e,t,r)=>{"use strict";r.d(t,{I9:()=>p,Kd:()=>u,N_:()=>b,k2:()=>w});var n=r(56347),o=r(42892),a=r(96540),i=r(31513),c=r(58168),s=r(98587),l=r(11561),u=function(e){function t(){for(var t,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return(t=e.call.apply(e,[this].concat(n))||this).history=(0,i.zR)(t.props),t}return(0,o.A)(t,e),t.prototype.render=function(){return a.createElement(n.Ix,{history:this.history,children:this.props.children})},t}(a.Component);var p=function(e){function t(){for(var t,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return(t=e.call.apply(e,[this].concat(n))||this).history=(0,i.TM)(t.props),t}return(0,o.A)(t,e),t.prototype.render=function(){return a.createElement(n.Ix,{history:this.history,children:this.props.children})},t}(a.Component);var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.yJ)(e,null,null,t):e},m=function(e){return e},h=a.forwardRef;void 0===h&&(h=m);var g=h((function(e,t){var r=e.innerRef,n=e.navigate,o=e.onClick,i=(0,s.A)(e,["innerRef","navigate","onClick"]),l=i.target,u=(0,c.A)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||l&&"_self"!==l||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),n())}});return u.ref=m!==h&&t||r,a.createElement("a",u)}));var b=h((function(e,t){var r=e.component,o=void 0===r?g:r,u=e.replace,p=e.to,b=e.innerRef,v=(0,s.A)(e,["component","replace","to","innerRef"]);return a.createElement(n.XZ.Consumer,null,(function(e){e||(0,l.A)(!1);var r=e.history,n=f(d(p,e.location),e.location),s=n?r.createHref(n):"",g=(0,c.A)({},v,{href:s,navigate:function(){var t=d(p,e.location),n=(0,i.AO)(e.location)===(0,i.AO)(f(t));(u||n?r.replace:r.push)(t)}});return m!==h?g.ref=t||b:g.innerRef=b,a.createElement(o,g)}))})),v=function(e){return e},y=a.forwardRef;void 0===y&&(y=v);var w=y((function(e,t){var r=e["aria-current"],o=void 0===r?"page":r,i=e.activeClassName,u=void 0===i?"active":i,p=e.activeStyle,m=e.className,h=e.exact,g=e.isActive,w=e.location,k=e.sensitive,S=e.strict,C=e.style,x=e.to,_=e.innerRef,E=(0,s.A)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(n.XZ.Consumer,null,(function(e){e||(0,l.A)(!1);var r=w||e.location,i=f(d(x,r),r),s=i.pathname,A=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),T=A?(0,n.B6)(r.pathname,{path:A,exact:h,sensitive:k,strict:S}):null,L=!!(g?g(T,r):T),z="function"==typeof m?m(L):m,j="function"==typeof C?C(L):C;L&&(z=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return t.filter((function(e){return e})).join(" ")}(z,u),j=(0,c.A)({},j,p));var R=(0,c.A)({"aria-current":L&&o||null,className:z,style:j,to:i},E);return v!==y?R.ref=t||_:R.innerRef=_,a.createElement(b,R)}))}))},56347:(e,t,r)=>{"use strict";r.d(t,{B6:()=>C,Ix:()=>y,W6:()=>R,XZ:()=>v,dO:()=>z,qh:()=>x,zy:()=>N});var n=r(42892),o=r(96540),a=r(5556),i=r.n(a),c=r(31513),s=r(11561),l=r(58168),u=r(35302),p=r.n(u),d=(r(44363),r(98587)),f=(r(4146),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==r.g?r.g:{};var h=o.createContext||function(e,t){var r,a,c="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function r(){for(var t,r,n,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(r=t.props.value,n=[],{on:function(e){n.push(e)},off:function(e){n=n.filter((function(t){return t!==e}))},get:function(){return r},set:function(e,t){r=e,n.forEach((function(e){return e(r,t)}))}}),t}(0,n.A)(r,e);var o=r.prototype;return o.getChildContext=function(){var e;return(e={})[c]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var r,n=this.props.value,o=e.value;((a=n)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?r=0:(r="function"==typeof t?t(n,o):f,0!==(r|=0)&&this.emitter.set(e.value,r))}var a,i},o.render=function(){return this.props.children},r}(o.Component);s.childContextTypes=((r={})[c]=i().object.isRequired,r);var l=function(t){function r(){for(var e,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return(e=t.call.apply(t,[this].concat(n))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,r){0!=((0|e.observedBits)&r)&&e.setState({value:e.getValue()})},e}(0,n.A)(r,t);var o=r.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[c]&&this.context[c].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[c]&&this.context[c].off(this.onUpdate)},o.getValue=function(){return this.context[c]?this.context[c].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},r}(o.Component);return l.contextTypes=((a={})[c]=i().object,a),{Provider:s,Consumer:l}},g=function(e){var t=h();return t.displayName=e,t},b=g("Router-History"),v=g("Router"),y=function(e){function t(t){var r;return(r=e.call(this,t)||this).state={location:t.history.location},r._isMounted=!1,r._pendingLocation=null,t.staticContext||(r.unlisten=t.history.listen((function(e){r._pendingLocation=e}))),r}(0,n.A)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var r=t.prototype;return r.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},r.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},r.render=function(){return o.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},k=1e4,S=0;function C(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var r=t,n=r.path,o=r.exact,a=void 0!==o&&o,i=r.strict,c=void 0!==i&&i,s=r.sensitive,l=void 0!==s&&s;return[].concat(n).reduce((function(t,r){if(!r&&""!==r)return null;if(t)return t;var n=function(e,t){var r=""+t.end+t.strict+t.sensitive,n=w[r]||(w[r]={});if(n[e])return n[e];var o=[],a={regexp:p()(e,o,t),keys:o};return S<k&&(n[e]=a,S++),a}(r,{end:a,strict:c,sensitive:l}),o=n.regexp,i=n.keys,s=o.exec(e);if(!s)return null;var u=s[0],d=s.slice(1),f=e===u;return a&&!f?null:{path:r,url:"/"===r&&""===u?"/":u,isExact:f,params:i.reduce((function(e,t,r){return e[t.name]=d[r],e}),{})}}),null)}var x=function(e){function t(){return e.apply(this,arguments)||this}return(0,n.A)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,s.A)(!1);var r=e.props.location||t.location,n=e.props.computedMatch?e.props.computedMatch:e.props.path?C(r.pathname,e.props):t.match,a=(0,l.A)({},t,{location:r,match:n}),i=e.props,c=i.children,u=i.component,p=i.render;return Array.isArray(c)&&function(e){return 0===o.Children.count(e)}(c)&&(c=null),o.createElement(v.Provider,{value:a},a.match?c?"function"==typeof c?c(a):c:u?o.createElement(u,a):p?p(a):null:"function"==typeof c?c(a):null)}))},t}(o.Component);function _(e){return"/"===e.charAt(0)?e:"/"+e}function E(e,t){if(!e)return t;var r=_(e);return 0!==t.pathname.indexOf(r)?t:(0,l.A)({},t,{pathname:t.pathname.substr(r.length)})}function A(e){return"string"==typeof e?e:(0,c.AO)(e)}function T(e){return function(){(0,s.A)(!1)}}function L(){}o.Component;var z=function(e){function t(){return e.apply(this,arguments)||this}return(0,n.A)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,s.A)(!1);var r,n,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==n&&o.isValidElement(e)){r=e;var i=e.props.path||e.props.from;n=i?C(a.pathname,(0,l.A)({},e.props,{path:i})):t.match}})),n?o.cloneElement(r,{location:a,computedMatch:n}):null}))},t}(o.Component);var j=o.useContext;function R(){return j(b)}function N(){return j(v).location}},21020:(e,t,r)=>{"use strict";var n=r(96540),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,c=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s={key:!0,ref:!0,__self:!0,__source:!0};function l(e,t,r){var n,a={},l=null,u=null;for(n in void 0!==r&&(l=""+r),void 0!==t.key&&(l=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,n)&&!s.hasOwnProperty(n)&&(a[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===a[n]&&(a[n]=t[n]);return{$$typeof:o,type:e,key:l,ref:u,props:a,_owner:c.current}}t.Fragment=a,t.jsx=l,t.jsxs=l},15287:(e,t)=>{"use strict";var r=Symbol.for("react.element"),n=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),c=Symbol.for("react.provider"),s=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),d=Symbol.for("react.lazy"),f=Symbol.iterator;var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,g={};function b(e,t,r){this.props=e,this.context=t,this.refs=g,this.updater=r||m}function v(){}function y(e,t,r){this.props=e,this.context=t,this.refs=g,this.updater=r||m}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=b.prototype;var w=y.prototype=new v;w.constructor=y,h(w,b.prototype),w.isPureReactComponent=!0;var k=Array.isArray,S=Object.prototype.hasOwnProperty,C={current:null},x={key:!0,ref:!0,__self:!0,__source:!0};function _(e,t,n){var o,a={},i=null,c=null;if(null!=t)for(o in void 0!==t.ref&&(c=t.ref),void 0!==t.key&&(i=""+t.key),t)S.call(t,o)&&!x.hasOwnProperty(o)&&(a[o]=t[o]);var s=arguments.length-2;if(1===s)a.children=n;else if(1<s){for(var l=Array(s),u=0;u<s;u++)l[u]=arguments[u+2];a.children=l}if(e&&e.defaultProps)for(o in s=e.defaultProps)void 0===a[o]&&(a[o]=s[o]);return{$$typeof:r,type:e,key:i,ref:c,props:a,_owner:C.current}}function E(e){return"object"==typeof e&&null!==e&&e.$$typeof===r}var A=/\/+/g;function T(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function L(e,t,o,a,i){var c=typeof e;"undefined"!==c&&"boolean"!==c||(e=null);var s=!1;if(null===e)s=!0;else switch(c){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case r:case n:s=!0}}if(s)return i=i(s=e),e=""===a?"."+T(s,0):a,k(i)?(o="",null!=e&&(o=e.replace(A,"$&/")+"/"),L(i,t,o,"",(function(e){return e}))):null!=i&&(E(i)&&(i=function(e,t){return{$$typeof:r,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(A,"$&/")+"/")+e)),t.push(i)),1;if(s=0,a=""===a?".":a+":",k(e))for(var l=0;l<e.length;l++){var u=a+T(c=e[l],l);s+=L(c,t,o,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),l=0;!(c=e.next()).done;)s+=L(c=c.value,t,o,u=a+T(c,l++),i);else if("object"===c)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return s}function z(e,t,r){if(null==e)return e;var n=[],o=0;return L(e,n,"","",(function(e){return t.call(r,e,o++)})),n}function j(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var R={current:null},N={transition:null},P={ReactCurrentDispatcher:R,ReactCurrentBatchConfig:N,ReactCurrentOwner:C};t.Children={map:z,forEach:function(e,t,r){z(e,(function(){t.apply(this,arguments)}),r)},count:function(e){var t=0;return z(e,(function(){t++})),t},toArray:function(e){return z(e,(function(e){return e}))||[]},only:function(e){if(!E(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=o,t.Profiler=i,t.PureComponent=y,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=P,t.cloneElement=function(e,t,n){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=h({},e.props),a=e.key,i=e.ref,c=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,c=C.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(l in t)S.call(t,l)&&!x.hasOwnProperty(l)&&(o[l]=void 0===t[l]&&void 0!==s?s[l]:t[l])}var l=arguments.length-2;if(1===l)o.children=n;else if(1<l){s=Array(l);for(var u=0;u<l;u++)s[u]=arguments[u+2];o.children=s}return{$$typeof:r,type:e.type,key:a,ref:i,props:o,_owner:c}},t.createContext=function(e){return(e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:c,_context:e},e.Consumer=e},t.createElement=_,t.createFactory=function(e){var t=_.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=E,t.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:j}},t.memo=function(e,t){return{$$typeof:p,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=N.transition;N.transition={};try{e()}finally{N.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return R.current.useCallback(e,t)},t.useContext=function(e){return R.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return R.current.useDeferredValue(e)},t.useEffect=function(e,t){return R.current.useEffect(e,t)},t.useId=function(){return R.current.useId()},t.useImperativeHandle=function(e,t,r){return R.current.useImperativeHandle(e,t,r)},t.useInsertionEffect=function(e,t){return R.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return R.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return R.current.useMemo(e,t)},t.useReducer=function(e,t,r){return R.current.useReducer(e,t,r)},t.useRef=function(e){return R.current.useRef(e)},t.useState=function(e){return R.current.useState(e)},t.useSyncExternalStore=function(e,t,r){return R.current.useSyncExternalStore(e,t,r)},t.useTransition=function(){return R.current.useTransition()},t.version="18.2.0"},96540:(e,t,r)=>{"use strict";e.exports=r(15287)},74848:(e,t,r)=>{"use strict";e.exports=r(21020)},7463:(e,t)=>{"use strict";function r(e,t){var r=e.length;e.push(t);e:for(;0<r;){var n=r-1>>>1,o=e[n];if(!(0<a(o,t)))break e;e[n]=t,e[r]=o,r=n}}function n(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],r=e.pop();if(r!==t){e[0]=r;e:for(var n=0,o=e.length,i=o>>>1;n<i;){var c=2*(n+1)-1,s=e[c],l=c+1,u=e[l];if(0>a(s,r))l<o&&0>a(u,s)?(e[n]=u,e[l]=r,n=l):(e[n]=s,e[c]=r,n=c);else{if(!(l<o&&0>a(u,r)))break e;e[n]=u,e[l]=r,n=l}}}return t}function a(e,t){var r=e.sortIndex-t.sortIndex;return 0!==r?r:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var c=Date,s=c.now();t.unstable_now=function(){return c.now()-s}}var l=[],u=[],p=1,d=null,f=3,m=!1,h=!1,g=!1,b="function"==typeof setTimeout?setTimeout:null,v="function"==typeof clearTimeout?clearTimeout:null,y="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=n(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,r(l,t)}t=n(u)}}function k(e){if(g=!1,w(e),!h)if(null!==n(l))h=!0,N(S);else{var t=n(u);null!==t&&P(k,t.startTime-e)}}function S(e,r){h=!1,g&&(g=!1,v(E),E=-1),m=!0;var a=f;try{for(w(r),d=n(l);null!==d&&(!(d.expirationTime>r)||e&&!L());){var i=d.callback;if("function"==typeof i){d.callback=null,f=d.priorityLevel;var c=i(d.expirationTime<=r);r=t.unstable_now(),"function"==typeof c?d.callback=c:d===n(l)&&o(l),w(r)}else o(l);d=n(l)}if(null!==d)var s=!0;else{var p=n(u);null!==p&&P(k,p.startTime-r),s=!1}return s}finally{d=null,f=a,m=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var C,x=!1,_=null,E=-1,A=5,T=-1;function L(){return!(t.unstable_now()-T<A)}function z(){if(null!==_){var e=t.unstable_now();T=e;var r=!0;try{r=_(!0,e)}finally{r?C():(x=!1,_=null)}}else x=!1}if("function"==typeof y)C=function(){y(z)};else if("undefined"!=typeof MessageChannel){var j=new MessageChannel,R=j.port2;j.port1.onmessage=z,C=function(){R.postMessage(null)}}else C=function(){b(z,0)};function N(e){_=e,x||(x=!0,C())}function P(e,r){E=b((function(){e(t.unstable_now())}),r)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){h||m||(h=!0,N(S))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):A=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return n(l)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var r=f;f=t;try{return e()}finally{f=r}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var r=f;f=e;try{return t()}finally{f=r}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?i+a:i:a=i,e){case 1:var c=-1;break;case 2:c=250;break;case 5:c=1073741823;break;case 4:c=1e4;break;default:c=5e3}return e={id:p++,callback:o,priorityLevel:e,startTime:a,expirationTime:c=a+c,sortIndex:-1},a>i?(e.sortIndex=a,r(u,e),null===n(l)&&e===n(u)&&(g?(v(E),E=-1):g=!0,P(k,a-i))):(e.sortIndex=c,r(l,e),h||m||(h=!0,N(S))),e},t.unstable_shouldYield=L,t.unstable_wrapCallback=function(e){var t=f;return function(){var r=f;f=t;try{return e.apply(this,arguments)}finally{f=r}}}},69982:(e,t,r)=>{"use strict";e.exports=r(7463)},2833:e=>{e.exports=function(e,t,r,n){var o=r?r.call(n,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var c=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var l=a[s];if(!c(l))return!1;var u=e[l],p=t[l];if(!1===(o=r?r.call(n,u,p,l):void 0)||void 0===o&&u!==p)return!1}return!0}},4784:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={title:"Estuary Flow",tagline:"Dinosaurs are cool",url:"https://docs.estuary.dev",baseUrl:"/pr-preview/pr-1594/",onBrokenAnchors:"warn",onBrokenLinks:"throw",onBrokenMarkdownLinks:"throw",favicon:"img/favicon-2.ico",organizationName:"estuary",projectName:"flow",trailingSlash:!0,plugins:[["/home/runner/work/flow/flow/site/node_modules/docusaurus-lunr-search/src/index.js",{excludeRoutes:["blog/**/*"]}],["@docusaurus/plugin-client-redirects",{redirects:[{to:"/guides/flowctl/create-derivation/",from:"/guides/create-derivation/"}]}],["@docusaurus/plugin-google-tag-manager",{containerId:"GTM-WK8SB2L"}]],presets:[["classic",{docs:{sidebarPath:"/home/runner/work/flow/flow/site/sidebars.js",editUrl:"https://github.com/estuary/flow/edit/master/site/",routeBasePath:"/",remarkPlugins:[null]},theme:{customCss:"/home/runner/work/flow/flow/site/src/css/custom.css"}}]],themeConfig:{navbar:{title:"Estuary Flow",logo:{alt:"Estuary Flow Logo",src:"img/estuary-new.png"},items:[{type:"doc",docId:"overview/README",position:"left",label:"Documentation"},{type:"html",position:"left",value:'<a href="https://estuary.dev/blog/data-engineering/">Blog</a>'},{type:"html",position:"left",className:"button-link",value:'<a href="https://dashboard.estuary.dev/register">Try Estuary</a>'},{href:"https://github.com/estuary/flow",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Flow Documentation",to:"/"}]},{title:"Community",items:[{label:"Twitter",href:"https://twitter.com/EstuaryDev"}]},{title:"More",items:[{label:"GitHub",href:"https://github.com/estuary/flow"}]}],copyright:"Copyright \xa9 2024 Estuary Technologies, Inc. Built with Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},baseUrlIssueBanner:!0,i18n:{defaultLocale:"en",path:"i18n",locales:["en"],localeConfigs:{}},future:{experimental_storage:{type:"localStorage",namespace:!1},experimental_router:"browser"},onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0},anchors:{maintainCase:!1}}}},58168:(e,t,r)=>{"use strict";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},n.apply(this,arguments)}r.d(t,{A:()=>n})},42892:(e,t,r)=>{"use strict";function n(e,t){return n=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},n(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,n(e,t)}r.d(t,{A:()=>o})},98587:(e,t,r)=>{"use strict";function n(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}r.d(t,{A:()=>n})},34164:(e,t,r)=>{"use strict";function n(e){var t,r,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(r=n(e[t]))&&(o&&(o+=" "),o+=r)}else for(r in e)e[r]&&(o&&(o+=" "),o+=r);return o}r.d(t,{A:()=>o});const o=function(){for(var e,t,r=0,o="",a=arguments.length;r<a;r++)(e=arguments[r])&&(t=n(e))&&(o&&(o+=" "),o+=t);return o}},71765:(e,t,r)=>{"use strict";r.d(t,{My:()=>A,f4:()=>ee});var n,o,a,i,c,s,l,u=r(96540),p=r(34164),d=Object.create,f=Object.defineProperty,m=Object.defineProperties,h=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyDescriptors,b=Object.getOwnPropertyNames,v=Object.getOwnPropertySymbols,y=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,S=(e,t,r)=>t in e?f(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,C=(e,t)=>{for(var r in t||(t={}))w.call(t,r)&&S(e,r,t[r]);if(v)for(var r of v(t))k.call(t,r)&&S(e,r,t[r]);return e},x=(e,t)=>m(e,g(t)),_=(e,t)=>{var r={};for(var n in e)w.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&v)for(var n of v(e))t.indexOf(n)<0&&k.call(e,n)&&(r[n]=e[n]);return r},E=(n={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},n={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,r){var o,a;switch(r=r||{},n.util.type(t)){case"Object":if(a=n.util.objId(t),r[a])return r[a];for(var i in o={},r[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],r));return o;case"Array":return a=n.util.objId(t),r[a]?r[a]:(o=[],r[a]=o,t.forEach((function(t,n){o[n]=e(t,r)})),o);default:return t}},getLanguage:function(t){for(;t;){var r=e.exec(t.className);if(r)return r[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,r){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+r)},isActive:function(e,t,r){for(var n="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(n))return!1;e=e.parentElement}return!!r}},languages:{plain:r,plaintext:r,text:r,txt:r,extend:function(e,t){var r=n.util.clone(n.languages[e]);for(var o in t)r[o]=t[o];return r},insertBefore:function(e,t,r,o){var a=(o=o||n.languages)[e],i={};for(var c in a)if(a.hasOwnProperty(c)){if(c==t)for(var s in r)r.hasOwnProperty(s)&&(i[s]=r[s]);r.hasOwnProperty(c)||(i[c]=a[c])}var l=o[e];return o[e]=i,n.languages.DFS(n.languages,(function(t,r){r===l&&t!=e&&(this[t]=i)})),i},DFS:function e(t,r,o,a){a=a||{};var i=n.util.objId;for(var c in t)if(t.hasOwnProperty(c)){r.call(t,c,t[c],o||c);var s=t[c],l=n.util.type(s);"Object"!==l||a[i(s)]?"Array"!==l||a[i(s)]||(a[i(s)]=!0,e(s,r,c,a)):(a[i(s)]=!0,e(s,r,null,a))}}},plugins:{},highlight:function(e,t,r){var a={code:e,grammar:t,language:r};if(n.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=n.tokenize(a.code,a.grammar),n.hooks.run("after-tokenize",a),o.stringify(n.util.encode(a.tokens),a.language)},tokenize:function(e,t){var r=t.rest;if(r){for(var n in r)t[n]=r[n];delete t.rest}var o=new c;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){for(var t=[],r=e.head.next;r!==e.tail;)t.push(r.value),r=r.next;return t}(o)},hooks:{all:{},add:function(e,t){var r=n.hooks.all;r[e]=r[e]||[],r[e].push(t)},run:function(e,t){var r=n.hooks.all[e];if(r&&r.length)for(var o,a=0;o=r[a++];)o(t)}},Token:o};function o(e,t,r,n){this.type=e,this.content=t,this.alias=r,this.length=0|(n||"").length}function a(e,t,r,n){e.lastIndex=t;var o=e.exec(r);if(o&&n&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,r,c,u,p){for(var d in r)if(r.hasOwnProperty(d)&&r[d]){var f=r[d];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(p&&p.cause==d+","+m)return;var h=f[m],g=h.inside,b=!!h.lookbehind,v=!!h.greedy,y=h.alias;if(v&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var k=h.pattern||h,S=c.next,C=u;S!==t.tail&&!(p&&C>=p.reach);C+=S.value.length,S=S.next){var x=S.value;if(t.length>e.length)return;if(!(x instanceof o)){var _,E=1;if(v){if(!(_=a(k,C,e,b))||_.index>=e.length)break;var A=_.index,T=_.index+_[0].length,L=C;for(L+=S.value.length;A>=L;)L+=(S=S.next).value.length;if(C=L-=S.value.length,S.value instanceof o)continue;for(var z=S;z!==t.tail&&(L<T||"string"==typeof z.value);z=z.next)E++,L+=z.value.length;E--,x=e.slice(C,L),_.index-=C}else if(!(_=a(k,0,x,b)))continue;A=_.index;var j=_[0],R=x.slice(0,A),N=x.slice(A+j.length),P=C+x.length;p&&P>p.reach&&(p.reach=P);var O=S.prev;if(R&&(O=s(t,O,R),C+=R.length),l(t,O,E),S=s(t,O,new o(d,g?n.tokenize(j,g):j,y,j)),N&&s(t,S,N),E>1){var D={cause:d+","+m,reach:P};i(e,t,r,S.prev,C,D),p&&D.reach>p.reach&&(p.reach=D.reach)}}}}}}function c(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,r){var n=t.next,o={value:r,prev:t,next:n};return t.next=o,n.prev=o,e.length++,o}function l(e,t,r){for(var n=t.next,o=0;o<r&&n!==e.tail;o++)n=n.next;t.next=n,n.prev=t,e.length-=o}return o.stringify=function e(t,r){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,r)})),o}var a={type:t.type,content:e(t.content,r),tag:"span",classes:["token",t.type],attributes:{},language:r},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),n.hooks.run("wrap",a);var c="";for(var s in a.attributes)c+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+c+">"+a.content+"</"+a.tag+">"},n}();t.exports=r,r.default=r}},function(){return o||(0,n[b(n)[0]])((o={exports:{}}).exports,o),o.exports}),A=((e,t,r)=>(r=null!=e?d(y(e)):{},((e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of b(t))w.call(e,o)||o===r||f(e,o,{get:()=>t[o],enumerable:!(n=h(t,o))||n.enumerable});return e})(!t&&e&&e.__esModule?r:f(r,"default",{value:e,enumerable:!0}),e)))(E());A.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},A.languages.markup.tag.inside["attr-value"].inside.entity=A.languages.markup.entity,A.languages.markup.doctype.inside["internal-subset"].inside=A.languages.markup,A.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(A.languages.markup.tag,"addInlined",{value:function(e,t){var r;(t=((r=((r={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:A.languages[t]},r.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:r}}))["language-"+t]={pattern:/[\s\S]+/,inside:A.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},A.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(A.languages.markup.tag,"addAttribute",{value:function(e,t){A.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:A.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),A.languages.html=A.languages.markup,A.languages.mathml=A.languages.markup,A.languages.svg=A.languages.markup,A.languages.xml=A.languages.extend("markup",{}),A.languages.ssml=A.languages.xml,A.languages.atom=A.languages.xml,A.languages.rss=A.languages.xml,a=A,i={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},s="(?:[^\\\\-]|"+(c=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/).source+")",s=RegExp(s+"-"+s),l={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"},a.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:s,inside:{escape:c,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":i,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:c}},"special-escape":i,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":l}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:c,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":l}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}},A.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},A.languages.javascript=A.languages.extend("clike",{"class-name":[A.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),A.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,A.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:A.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:A.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:A.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:A.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:A.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),A.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:A.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),A.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),A.languages.markup&&(A.languages.markup.tag.addInlined("script","javascript"),A.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),A.languages.js=A.languages.javascript,A.languages.actionscript=A.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),A.languages.actionscript["class-name"].alias="function",delete A.languages.actionscript.parameter,delete A.languages.actionscript["literal-property"],A.languages.markup&&A.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:A.languages.markup}}),function(e){var t=/#(?!\{).+/,r={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:r}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:r}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:r}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(A),function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,r){(t="string"==typeof t?[t]:t).forEach((function(t){var n=function(e){e.inside||(e.inside={}),e.inside.rest=r},o="doc-comment";if(a=e.languages[t]){var a,i=a[o];if((i=i||(a=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[o])instanceof RegExp&&(i=a[o]={pattern:i}),Array.isArray(i))for(var c=0,s=i.length;c<s;c++)i[c]instanceof RegExp&&(i[c]={pattern:i[c]}),n(i[c]);else n(i)}}))}}),t.addSupport(["java","javascript","php"],t)}(A),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(A),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,r=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:r,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:r})}(A),function(e){var t=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,n="(?:"+r.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+r.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var r=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return n})).replace(/<<value>>/g,(function(){return e}));return RegExp(r,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return n}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return n})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:r,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(A),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function r(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var n=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return n})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(n),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(n),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:r(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:r(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:r(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:r(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(r){t!==r&&(e.languages.markdown[t].inside.content.inside[r]=e.languages.markdown[r])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var r=0,n=t.length;r<n;r++){var o,a=t[r];"code"!==a.type?e(a.content):(o=a.content[1],a=a.content[3],o&&a&&"code-language"===o.type&&"code-block"===a.type&&"string"==typeof o.content&&(o=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),o="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase()),a.alias?"string"==typeof a.alias?a.alias=[a.alias,o]:a.alias.push(o):a.alias=[o]))}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var r="",n=0,o=t.classes.length;n<o;n++){var a=t.classes[n];if(a=/language-(.+)/.exec(a)){r=a[1];break}}var l,u=e.languages[r];u?t.content=e.highlight(t.content.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var r;return"#"===(t=t.toLowerCase())[0]?(r="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(r)):c[t]||e})),u,r):r&&"none"!==r&&e.plugins.autoloader&&(l="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=l,e.plugins.autoloader.loadLanguages(r,(function(){var t=document.getElementById(l);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[r],r))})))}})),RegExp(e.languages.markup.tag.pattern.source,"gi")),c={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(A),A.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:A.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},A.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),r=0;r<t.length;){var n=t[r++];if("keyword"===n.type&&"mutation"===n.content){var o=[];if(p(["definition-mutation","punctuation"])&&"("===u(1).content){r+=2;var a=d(/^\($/,/^\)$/);if(-1===a)continue;for(;r<a;r++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}r=a+1}if(p(["punctuation","property-query"])&&"{"===u(0).content&&(r++,f(u(0),"property-mutation"),0<o.length)){var c=d(/^\{$/,/^\}$/);if(-1!==c)for(var s=r;s<c;s++){var l=t[s];"variable"===l.type&&0<=o.indexOf(l.content)&&f(l,"variable-input")}}}}function u(e){return t[r+e]}function p(e,t){t=t||0;for(var r=0;r<e.length;r++){var n=u(r+t);if(!n||n.type!==e[r])return}return 1}function d(e,n){for(var o=1,a=r;a<t.length;a++){var i=t[a],c=i.content;if("punctuation"===i.type&&"string"==typeof c)if(e.test(c))o++;else if(n.test(c)&&0==--o)return a}return-1}function f(e,t){var r=e.alias;r?Array.isArray(r)||(e.alias=r=[r]):e.alias=r=[],r.push(t)}})),A.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],r=t.pattern.source,n=t.inside.interpolation,o=n.inside["interpolation-punctuation"],a=n.pattern.source;function i(t,n){if(e.languages[t])return{pattern:RegExp("((?:"+n+")\\s*)"+r),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function c(t,r,n){return t={code:t,grammar:r,language:n},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function s(t,r,i){var s=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),l=0,u={},p=(s=c(s.map((function(e){if("string"==typeof e)return e;var r,n;for(e=e.content;-1!==t.indexOf((n=l++,r="___"+i.toUpperCase()+"_"+n+"___")););return u[r]=e,r})).join(""),r,i),Object.keys(u));return l=0,function t(r){for(var a=0;a<r.length;a++){if(l>=p.length)return;var i,s,d,f,m,h,g,b=r[a];"string"==typeof b||"string"==typeof b.content?(i=p[l],-1!==(g=(h="string"==typeof b?b:b.content).indexOf(i))&&(++l,s=h.substring(0,g),m=u[i],d=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(m,f)).length&&((d=[1,1]).push.apply(d,c(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,d)),d=new e.Token("interpolation",f,n.alias,m),f=h.substring(g+i.length),m=[],s&&m.push(s),m.push(d),f&&(t(h=[f]),m.push.apply(m,h)),"string"==typeof b?(r.splice.apply(r,[a,1].concat(m)),a+=m.length-1):b.content=m)):(g=b.content,Array.isArray(g)?t(g):t([g]))}}(s),new e.Token(i,s,"language-"+i,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var l={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in l&&function t(r){for(var n=0,o=r.length;n<o;n++){var a,i,c,l=r[n];"string"!=typeof l&&(a=l.content,Array.isArray(a)?"template-string"===l.type?(l=a[1],3===a.length&&"string"!=typeof l&&"embedded-code"===l.type&&(i=u(l),l=l.alias,l=Array.isArray(l)?l[0]:l,c=e.languages[l])&&(a[1]=s(i,c,l))):t(a):"string"!=typeof a&&t([a]))}}(t.tokens)}))}(A),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(A),function(e){var t=e.languages.javascript,r=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,n="(@(?:arg|argument|param|property)\\s+(?:"+r+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(n+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(n+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,(function(){return r}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+r),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(A),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(A),A.languages.n4js=A.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),A.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),A.languages.n4jsd=A.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var r=["function","function-variable","method","method-variable","property-access"],n=0;n<r.length;n++){var o=r[n],a=e.languages.javascript[o];o=(a="RegExp"===e.util.type(a)?e.languages.javascript[o]={pattern:a}:a).inside||{};(a.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(A),function(e){var t=e.util.clone(e.languages.javascript),r=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,n=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return r})).replace(/<BRACES>/g,(function(){return n})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}function i(t){for(var r=[],n=0;n<t.length;n++){var o=t[n],a=!1;"string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?0<r.length&&r[r.length-1].tagName===c(o.content[0].content[1])&&r.pop():"/>"!==o.content[o.content.length-1].content&&r.push({tagName:c(o.content[0].content[1]),openedBraces:0}):0<r.length&&"punctuation"===o.type&&"{"===o.content?r[r.length-1].openedBraces++:0<r.length&&0<r[r.length-1].openedBraces&&"punctuation"===o.type&&"}"===o.content?r[r.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&0<r.length&&0===r[r.length-1].openedBraces&&(a=c(o),n<t.length-1&&("string"==typeof t[n+1]||"plain-text"===t[n+1].type)&&(a+=c(t[n+1]),t.splice(n+1,1)),0<n&&("string"==typeof t[n-1]||"plain-text"===t[n-1].type)&&(a=c(t[n-1])+a,t.splice(n-1,1),n--),t[n]=new e.Token("plain-text",a,null,a)),o.content&&"string"!=typeof o.content&&i(o.content)}}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var c=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(c).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||i(e.tokens)}))}(A),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(A),A.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},A.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=A.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(A),A.languages.c=A.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),A.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),A.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},A.languages.c.string],char:A.languages.c.char,comment:A.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:A.languages.c}}}}),A.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete A.languages.c.boolean,A.languages.objectivec=A.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete A.languages.objectivec["class-name"],A.languages.objc=A.languages.objectivec,A.languages.reason=A.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),A.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete A.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,r=0;r<2;r++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(A),A.languages.go=A.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),A.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete A.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,r=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return r}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(A),A.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},A.languages.python["string-interpolation"].inside.interpolation.inside.rest=A.languages.python,A.languages.py=A.languages.python;((e,t)=>{for(var r in t)f(e,r,{get:t[r],enumerable:!0})})({},{dracula:()=>T,duotoneDark:()=>L,duotoneLight:()=>z,github:()=>j,jettwaveDark:()=>Q,jettwaveLight:()=>H,nightOwl:()=>R,nightOwlLight:()=>N,oceanicNext:()=>D,okaidia:()=>M,oneDark:()=>G,oneLight:()=>W,palenight:()=>I,shadesOfPurple:()=>F,synthwave84:()=>B,ultramin:()=>q,vsDark:()=>$,vsLight:()=>U});var T={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},L={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},z={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},j={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},R={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},N={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},P="#c5a5c5",O="#8dc891",D={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:P}},{types:["attr-value"],style:{color:O}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:O}},{types:["punctuation"],style:{color:O}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:P}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},M={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},I={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},F={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},B={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},q={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},$={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},U={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},Q={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},H={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},G={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},W={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},V=(e,t)=>{const{plain:r}=e,n=e.styles.reduce(((e,r)=>{const{languages:n,style:o}=r;return n&&!n.includes(t)||r.types.forEach((t=>{const r=C(C({},e[t]),o);e[t]=r})),e}),{});return n.root=r,n.plain=x(C({},r),{backgroundColor:void 0}),n},K=/\r\n|\r|\n/,Y=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},J=(e,t)=>{const r=e.length;return r>0&&e[r-1]===t?e:e.concat(t)},Z=e=>{const t=[[]],r=[e],n=[0],o=[e.length];let a=0,i=0,c=[];const s=[c];for(;i>-1;){for(;(a=n[i]++)<o[i];){let e,l=t[i];const u=r[i][a];if("string"==typeof u?(l=i>0?l:["plain"],e=u):(l=J(l,u.type),u.alias&&(l=J(l,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(l),r.push(e),n.push(0),o.push(e.length);continue}const p=e.split(K),d=p.length;c.push({types:l,content:p[0]});for(let t=1;t<d;t++)Y(c),s.push(c=[]),c.push({types:l,content:p[t]})}i--,t.pop(),r.pop(),n.pop(),o.pop()}return Y(c),s},X=({children:e,language:t,code:r,theme:n,prism:o})=>{const a=t.toLowerCase(),i=((e,t)=>{const[r,n]=(0,u.useState)(V(t,e)),o=(0,u.useRef)(),a=(0,u.useRef)();return(0,u.useEffect)((()=>{t===o.current&&e===a.current||(o.current=t,a.current=e,n(V(t,e)))}),[e,t]),r})(a,n),c=(e=>(0,u.useCallback)((t=>{var r=t,{className:n,style:o,line:a}=r,i=_(r,["className","style","line"]);const c=x(C({},i),{className:(0,p.A)("token-line",n)});return"object"==typeof e&&"plain"in e&&(c.style=e.plain),"object"==typeof o&&(c.style=C(C({},c.style||{}),o)),c}),[e]))(i),s=(e=>{const t=(0,u.useCallback)((({types:t,empty:r})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=r?{display:"inline-block"}:void 0:1===t.length&&null!=r?e[t[0]]:Object.assign(null!=r?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,u.useCallback)((e=>{var r=e,{token:n,className:o,style:a}=r,i=_(r,["token","className","style"]);const c=x(C({},i),{className:(0,p.A)("token",...n.types,o),children:n.content,style:t(n)});return null!=a&&(c.style=C(C({},c.style||{}),a)),c}),[t])})(i),l=(({prism:e,code:t,grammar:r,language:n})=>{const o=(0,u.useRef)(e);return(0,u.useMemo)((()=>{if(null==r)return Z([t]);const e={code:t,grammar:r,language:n,tokens:[]};return o.current.hooks.run("before-tokenize",e),e.tokens=o.current.tokenize(t,r),o.current.hooks.run("after-tokenize",e),Z(e.tokens)}),[t,r,n])})({prism:o,language:a,code:r,grammar:o.languages[a]});return e({tokens:l,className:`prism-code language-${a}`,style:null!=i?i.root:{},getLineProps:c,getTokenProps:s})},ee=e=>(0,u.createElement)(X,x(C({},e),{prism:e.prism||A,theme:e.theme||$,code:e.code,language:e.language}))},11561:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=!0,o="Invariant failed";function a(e,t){if(!e){if(n)throw new Error(o);var r="function"==typeof t?t():t,a=r?"".concat(o,": ").concat(r):o;throw new Error(a)}}},22654:e=>{"use strict";e.exports={}},84054:e=>{"use strict";e.exports=JSON.parse('{"/pr-preview/pr-1594/example-markdown/-930":{"__comp":"1f391b9e","__context":{"plugin":"a7456010"},"content":"c66ae53f"},"/pr-preview/pr-1594/example/-252":{"__comp":"5ba559d4","__context":{"plugin":"a7456010"},"config":"5e9f5e1a"},"/pr-preview/pr-1594/-a36":{"__comp":"5e95c892","__context":{"plugin":"aba21aa0"}},"/pr-preview/pr-1594/-ad5":{"__comp":"a7bd4aaa","__props":"9b515b04"},"/pr-preview/pr-1594/-6ef":{"__comp":"a94703ab"},"/pr-preview/pr-1594/concepts/-cc8":{"__comp":"17896441","content":"02365777"},"/pr-preview/pr-1594/concepts/advanced/evolutions/-490":{"__comp":"17896441","content":"4d317276"},"/pr-preview/pr-1594/concepts/advanced/journals/-60d":{"__comp":"17896441","content":"8dce94c3"},"/pr-preview/pr-1594/concepts/advanced/logs-stats/-1ed":{"__comp":"17896441","content":"c521cd6b"},"/pr-preview/pr-1594/concepts/advanced/projections/-558":{"__comp":"17896441","content":"04c11cf4"},"/pr-preview/pr-1594/concepts/advanced/shards/-757":{"__comp":"17896441","content":"bfec4f44"},"/pr-preview/pr-1594/concepts/captures/-1ba":{"__comp":"17896441","content":"8e876c80"},"/pr-preview/pr-1594/concepts/catalogs/-103":{"__comp":"17896441","content":"cf864737"},"/pr-preview/pr-1594/concepts/collections/-606":{"__comp":"17896441","content":"38a516ae"},"/pr-preview/pr-1594/concepts/connectors/-4da":{"__comp":"17896441","content":"ca7ab025"},"/pr-preview/pr-1594/concepts/derivations/-4ed":{"__comp":"17896441","content":"e76aecec"},"/pr-preview/pr-1594/concepts/flowctl/-f93":{"__comp":"17896441","content":"4e1df6a3"},"/pr-preview/pr-1594/concepts/import/-050":{"__comp":"17896441","content":"0fda5f57"},"/pr-preview/pr-1594/concepts/materialization/-9a8":{"__comp":"17896441","content":"bf636eff"},"/pr-preview/pr-1594/concepts/schemas/-699":{"__comp":"17896441","content":"4acaa9c4"},"/pr-preview/pr-1594/concepts/storage-mappings/-192":{"__comp":"17896441","content":"1d129a7b"},"/pr-preview/pr-1594/concepts/tests/-75a":{"__comp":"17896441","content":"c11c77a9"},"/pr-preview/pr-1594/concepts/web-app/-184":{"__comp":"17896441","content":"31570a90"},"/pr-preview/pr-1594/getting-started/installation/-bc5":{"__comp":"17896441","content":"6459b84b"},"/pr-preview/pr-1594/getting-started/tutorials/-e49":{"__comp":"17896441","content":"4bccbb93"},"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/-b2d":{"__comp":"17896441","content":"d6385b0d"},"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/-dde":{"__comp":"17896441","content":"28a8491c"},"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/-22a":{"__comp":"17896441","content":"0c8d310c"},"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/-fa3":{"__comp":"17896441","content":"8114665f"},"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/-f48":{"__comp":"17896441","content":"397210d6"},"/pr-preview/pr-1594/guides/-230":{"__comp":"17896441","content":"de285be4"},"/pr-preview/pr-1594/guides/connect-network/-a2c":{"__comp":"17896441","content":"c042bbf4"},"/pr-preview/pr-1594/guides/create-dataflow/-8d0":{"__comp":"17896441","content":"a3c49fd9"},"/pr-preview/pr-1594/guides/customize-materialization-fields/-d4c":{"__comp":"17896441","content":"3c6ed59c"},"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/-47c":{"__comp":"17896441","content":"38fdfb5b"},"/pr-preview/pr-1594/guides/derivation_tutorial_sql/-c6c":{"__comp":"17896441","content":"ecf790cf"},"/pr-preview/pr-1594/guides/edit-data-flows/-76e":{"__comp":"17896441","content":"3c711bdb"},"/pr-preview/pr-1594/guides/flowctl/-868":{"__comp":"17896441","content":"0ea4d505"},"/pr-preview/pr-1594/guides/flowctl/create-derivation/-d40":{"__comp":"17896441","content":"189edb0d"},"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/-1d0":{"__comp":"17896441","content":"9e64d05b"},"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/-27c":{"__comp":"17896441","content":"4a1a3e03"},"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/-5ca":{"__comp":"17896441","content":"caea5a36"},"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/-f61":{"__comp":"17896441","content":"9e25251f"},"/pr-preview/pr-1594/guides/schema-evolution/-a14":{"__comp":"17896441","content":"2e3ffc99"},"/pr-preview/pr-1594/guides/system-specific-dataflows/-f61":{"__comp":"17896441","content":"b32e8f59"},"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/-95b":{"__comp":"17896441","content":"e858514f"},"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/-335":{"__comp":"17896441","content":"1714037f"},"/pr-preview/pr-1594/guides/transform_data_using_typescript/-9bb":{"__comp":"17896441","content":"f5f0d846"},"/pr-preview/pr-1594/overview/comparisons/-ce9":{"__comp":"17896441","content":"c1e7e5a7"},"/pr-preview/pr-1594/overview/who-should-use-flow/-985":{"__comp":"17896441","content":"f47a7ed3"},"/pr-preview/pr-1594/reference/allow-ip-addresses/-592":{"__comp":"17896441","content":"cc0c6179"},"/pr-preview/pr-1594/reference/authentication/-dad":{"__comp":"17896441","content":"6f6bf398"},"/pr-preview/pr-1594/reference/Configuring-task-shards/-10c":{"__comp":"17896441","content":"a9379b01"},"/pr-preview/pr-1594/reference/Connectors/-bbe":{"__comp":"17896441","content":"d8b2c51c"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/-f8b":{"__comp":"17896441","content":"645c44d3"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/-5b4":{"__comp":"17896441","content":"f59a0ebe"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/-8b1":{"__comp":"17896441","content":"f09a1148"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/-bf0":{"__comp":"17896441","content":"905c32de"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/-7b0":{"__comp":"17896441","content":"63b37bf5"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/-bc2":{"__comp":"17896441","content":"54a88ed7"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/-6d7":{"__comp":"17896441","content":"e1d33ea7"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/-9b2":{"__comp":"17896441","content":"9fc067fe"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/-b85":{"__comp":"17896441","content":"d8b5b6da"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/-176":{"__comp":"17896441","content":"07003cee"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/-9c6":{"__comp":"17896441","content":"4648c831"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/-d16":{"__comp":"17896441","content":"c10f38bc"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/-03d":{"__comp":"17896441","content":"08cd1031"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/-b09":{"__comp":"17896441","content":"a0e6a329"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/-e2f":{"__comp":"17896441","content":"41d993a6"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/-be5":{"__comp":"17896441","content":"db0f1c3a"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/-3b7":{"__comp":"17896441","content":"f65e0d6c"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/-a4e":{"__comp":"17896441","content":"b0d5790a"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/-9df":{"__comp":"17896441","content":"65a8f618"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/-126":{"__comp":"17896441","content":"08e5c7dc"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/-ae6":{"__comp":"17896441","content":"1875cf18"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/-99a":{"__comp":"17896441","content":"22ed3411"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/-eff":{"__comp":"17896441","content":"ebce6379"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/-e1f":{"__comp":"17896441","content":"1ca4a2d7"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/-363":{"__comp":"17896441","content":"76bcc235"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/-2d7":{"__comp":"17896441","content":"44386d1b"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/-da7":{"__comp":"17896441","content":"6d42ac36"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/-f4e":{"__comp":"17896441","content":"858820da"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/-26c":{"__comp":"17896441","content":"477598dd"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/-30f":{"__comp":"17896441","content":"deef465e"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/-e7f":{"__comp":"17896441","content":"8431750a"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/-56c":{"__comp":"17896441","content":"b5dab0d4"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/-c72":{"__comp":"17896441","content":"7cfb1d0c"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/-d6a":{"__comp":"17896441","content":"e459d51d"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/-539":{"__comp":"17896441","content":"e33c9cd6"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/-a0a":{"__comp":"17896441","content":"d273ee52"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/-ff7":{"__comp":"17896441","content":"cfe90ca7"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/-779":{"__comp":"17896441","content":"6181342c"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/-396":{"__comp":"17896441","content":"01f1a992"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/-17c":{"__comp":"17896441","content":"a42036e6"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/-83c":{"__comp":"17896441","content":"be02d3e2"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/-c51":{"__comp":"17896441","content":"c5a10934"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/-5b5":{"__comp":"17896441","content":"921f956e"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/-305":{"__comp":"17896441","content":"abc1ea5e"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/-af7":{"__comp":"17896441","content":"08c8edc4"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/-968":{"__comp":"17896441","content":"ce5ba636"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/-6e8":{"__comp":"17896441","content":"906e1e9f"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/-f1f":{"__comp":"17896441","content":"971e8ccd"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/-84b":{"__comp":"17896441","content":"952b3fdc"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/-864":{"__comp":"17896441","content":"6b49cdad"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/-904":{"__comp":"17896441","content":"ea7b1b11"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/-be4":{"__comp":"17896441","content":"432d7d66"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/-bb2":{"__comp":"17896441","content":"061adc4c"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/-baa":{"__comp":"17896441","content":"3bada45e"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/-a8c":{"__comp":"17896441","content":"db2b4d90"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/-5fe":{"__comp":"17896441","content":"eae8ea84"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/-02b":{"__comp":"17896441","content":"e8453306"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/-dd2":{"__comp":"17896441","content":"46cf1090"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/-382":{"__comp":"17896441","content":"d14d20ef"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/-359":{"__comp":"17896441","content":"58d4a820"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/-ca2":{"__comp":"17896441","content":"c287b26d"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch/-75d":{"__comp":"17896441","content":"4dbcc71c"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/-f71":{"__comp":"17896441","content":"da6eb168"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/-b33":{"__comp":"17896441","content":"6bdc832c"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/-dc3":{"__comp":"17896441","content":"9d57d0a6"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/-dde":{"__comp":"17896441","content":"3c6e6542"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/-d24":{"__comp":"17896441","content":"eec1121c"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/-3eb":{"__comp":"17896441","content":"116b31b8"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/-47b":{"__comp":"17896441","content":"0bcbca69"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/-a6c":{"__comp":"17896441","content":"61038276"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/-5e6":{"__comp":"17896441","content":"dbd1cd20"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/-fff":{"__comp":"17896441","content":"540a1167"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/-032":{"__comp":"17896441","content":"e6e0301f"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/-9b5":{"__comp":"17896441","content":"12ca7dc6"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch/-388":{"__comp":"17896441","content":"e5e05fea"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/-f00":{"__comp":"17896441","content":"9fce37be"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/-c2d":{"__comp":"17896441","content":"4f08651a"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/-c0b":{"__comp":"17896441","content":"37788a03"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/-0f7":{"__comp":"17896441","content":"375ba1d8"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/-1b8":{"__comp":"17896441","content":"104ea86a"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/-d6c":{"__comp":"17896441","content":"7fd3d7a0"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/-4a4":{"__comp":"17896441","content":"5b71c68f"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/-39c":{"__comp":"17896441","content":"6e773b1a"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/-690":{"__comp":"17896441","content":"45462f11"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/-5bc":{"__comp":"17896441","content":"8a611437"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/-6fd":{"__comp":"17896441","content":"770e6532"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/-020":{"__comp":"17896441","content":"845ce2f5"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/-028":{"__comp":"17896441","content":"b7a68670"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/-3e6":{"__comp":"17896441","content":"ac961e5b"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/-b05":{"__comp":"17896441","content":"7c555ba4"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/-6eb":{"__comp":"17896441","content":"0d3223a3"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/-0ab":{"__comp":"17896441","content":"986b9943"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/-65e":{"__comp":"17896441","content":"44b1e2f5"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/-674":{"__comp":"17896441","content":"5769edfb"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/-cbd":{"__comp":"17896441","content":"b1a65bd3"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/-64a":{"__comp":"17896441","content":"b0d7f3f2"},"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/-d2c":{"__comp":"17896441","content":"964d596a"},"/pr-preview/pr-1594/reference/Connectors/dekaf/-077":{"__comp":"17896441","content":"68a929a9"},"/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird/-6eb":{"__comp":"17896441","content":"08b3569b"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/-5b4":{"__comp":"17896441","content":"c13ec0a6"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/-744":{"__comp":"17896441","content":"1434155d"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/-971":{"__comp":"17896441","content":"57aea1fc"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/-204":{"__comp":"17896441","content":"1cde271f"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/-942":{"__comp":"17896441","content":"482d6521"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/-34c":{"__comp":"17896441","content":"7718f40c"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/-5e8":{"__comp":"17896441","content":"a06d9ffe"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/-54d":{"__comp":"17896441","content":"68cc1c24"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/-af3":{"__comp":"17896441","content":"0359e208"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/-116":{"__comp":"17896441","content":"014c8d62"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/-839":{"__comp":"17896441","content":"9d18d13c"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/-b1b":{"__comp":"17896441","content":"6e2958ef"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/-baa":{"__comp":"17896441","content":"4f1ddcc5"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/-7c4":{"__comp":"17896441","content":"4d4f51e2"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/-3e1":{"__comp":"17896441","content":"fc44458b"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/-f64":{"__comp":"17896441","content":"4434a8b7"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/-e60":{"__comp":"17896441","content":"5c7e141f"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/-6fd":{"__comp":"17896441","content":"e3318347"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/-2bf":{"__comp":"17896441","content":"a995ee96"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/-e5a":{"__comp":"17896441","content":"977d5535"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/-3ec":{"__comp":"17896441","content":"4da0167e"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/-894":{"__comp":"17896441","content":"49e00cf0"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/-d97":{"__comp":"17896441","content":"fca4800a"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/-6de":{"__comp":"17896441","content":"0ad621fa"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/-ed0":{"__comp":"17896441","content":"bfc09eea"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/-db6":{"__comp":"17896441","content":"02ad5b1c"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/-d12":{"__comp":"17896441","content":"42e3560a"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/-5cc":{"__comp":"17896441","content":"25a17fcd"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/-b4c":{"__comp":"17896441","content":"88fa6390"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/-867":{"__comp":"17896441","content":"161e6f0a"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/-885":{"__comp":"17896441","content":"e8851b38"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/-758":{"__comp":"17896441","content":"2e426791"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/-c55":{"__comp":"17896441","content":"b05d4510"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/-c5c":{"__comp":"17896441","content":"25491a6a"},"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/-b00":{"__comp":"17896441","content":"2fea2d40"},"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/-bc5":{"__comp":"17896441","content":"5d9eac72"},"/pr-preview/pr-1594/reference/editing/-62a":{"__comp":"17896441","content":"cce87b67"},"/pr-preview/pr-1594/reference/materialization-sync-schedule/-733":{"__comp":"17896441","content":"d7fdcae3"},"/pr-preview/pr-1594/reference/notifications/-3e7":{"__comp":"17896441","content":"a24b80f3"},"/pr-preview/pr-1594/reference/organizing-catalogs/-465":{"__comp":"17896441","content":"b74f0b56"},"/pr-preview/pr-1594/reference/reduction-strategies/-06f":{"__comp":"17896441","content":"547dc70b"},"/pr-preview/pr-1594/reference/reduction-strategies/append/-d05":{"__comp":"17896441","content":"9e8f5f1c"},"/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals/-666":{"__comp":"17896441","content":"cad0251b"},"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins/-6f5":{"__comp":"17896441","content":"de7a358c"},"/pr-preview/pr-1594/reference/reduction-strategies/merge/-6b4":{"__comp":"17896441","content":"405f2d9a"},"/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize/-98e":{"__comp":"17896441","content":"fe12321f"},"/pr-preview/pr-1594/reference/reduction-strategies/set/-f26":{"__comp":"17896441","content":"1bc1529f"},"/pr-preview/pr-1594/reference/reduction-strategies/sum/-575":{"__comp":"17896441","content":"7cda2da6"},"/pr-preview/pr-1594/reference/time-travel/-8e5":{"__comp":"17896441","content":"487bf429"},"/pr-preview/pr-1594/reference/working-logs-stats/-e6a":{"__comp":"17896441","content":"5bb0dc82"},"/pr-preview/pr-1594/-4fa":{"__comp":"17896441","content":"0d762a34"}}')}},e=>{e.O(0,[1869],(()=>{return t=4568,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/main.8532303a.js.LICENSE.txt b/pr-preview/pr-1594/assets/js/main.8532303a.js.LICENSE.txt deleted file mode 100644 index ae63de0ab6..0000000000 --- a/pr-preview/pr-1594/assets/js/main.8532303a.js.LICENSE.txt +++ /dev/null @@ -1,71 +0,0 @@ -/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT */ - -/*! Bundled license information: - -prismjs/prism.js: - (** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT <https://opensource.org/licenses/MIT> - * @author Lea Verou <https://lea.verou.me> - * @namespace - * @public - *) -*/ - -/*!*************************************************** -* mark.js v8.11.1 -* https://markjs.io/ -* Copyright (c) 2014–2018, Julian Kühnel -* Released under the MIT license https://git.io/vwTVl -*****************************************************/ - -/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** - * @license React - * react-jsx-runtime.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** - * @license React - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v16.13.1 - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ diff --git a/pr-preview/pr-1594/assets/js/reactPlayerDailyMotion.70afc90f.js b/pr-preview/pr-1594/assets/js/reactPlayerDailyMotion.70afc90f.js deleted file mode 100644 index 29f845c442..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerDailyMotion.70afc90f.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[6328],{39348:(e,t,r)=>{var a,s=Object.create,o=Object.defineProperty,n=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,l=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,u=(e,t,r,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of i(t))p.call(e,s)||s===r||o(e,s,{get:()=>t[s],enumerable:!(a=n(t,s))||a.enumerable});return e},h=(e,t,r)=>(((e,t,r)=>{t in e?o(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r})(e,"symbol"!=typeof t?t+"":t,r),r),c={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(c,{default:()=>f}),e.exports=(a=c,u(o({},"__esModule",{value:!0}),a));var y=((e,t,r)=>(r=null!=e?s(l(e)):{},u(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)))(r(96540)),d=r(75635),m=r(50327);class f extends y.Component{constructor(){super(...arguments),h(this,"callPlayer",d.callPlayer),h(this,"onDurationChange",(()=>{const e=this.getDuration();this.props.onDuration(e)})),h(this,"mute",(()=>{this.callPlayer("setMuted",!0)})),h(this,"unmute",(()=>{this.callPlayer("setMuted",!1)})),h(this,"ref",(e=>{this.container=e}))}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e){const{controls:t,config:r,onError:a,playing:s}=this.props,[,o]=e.match(m.MATCH_URL_DAILYMOTION);this.player?this.player.load(o,{start:(0,d.parseStartTime)(e),autoplay:s}):(0,d.getSDK)("https://api.dmcdn.net/all.js","DM","dmAsyncInit",(e=>e.player)).then((s=>{if(!this.container)return;const n=s.player;this.player=new n(this.container,{width:"100%",height:"100%",video:o,params:{controls:t,autoplay:this.props.playing,mute:this.props.muted,start:(0,d.parseStartTime)(e),origin:window.location.origin,...r.params},events:{apiready:this.props.onReady,seeked:()=>this.props.onSeek(this.player.currentTime),video_end:this.props.onEnded,durationchange:this.onDurationChange,pause:this.props.onPause,playing:this.props.onPlay,waiting:this.props.onBuffer,error:e=>a(e)}})}),a)}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){}seekTo(e,t=!0){this.callPlayer("seek",e),t||this.pause()}setVolume(e){this.callPlayer("setVolume",e)}getDuration(){return this.player.duration||null}getCurrentTime(){return this.player.currentTime}getSecondsLoaded(){return this.player.bufferedTime}render(){const{display:e}=this.props,t={width:"100%",height:"100%",display:e};return y.default.createElement("div",{style:t},y.default.createElement("div",{ref:this.ref}))}}h(f,"displayName","DailyMotion"),h(f,"canPlay",m.canPlay.dailymotion),h(f,"loopOnEnded",!0)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerDailyMotion.f20d032c.js b/pr-preview/pr-1594/assets/js/reactPlayerDailyMotion.f20d032c.js deleted file mode 100644 index febad141db..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerDailyMotion.f20d032c.js +++ /dev/null @@ -1,155 +0,0 @@ -exports.id = 328; -exports.ids = [328]; -exports.modules = { - -/***/ 39348: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var DailyMotion_exports = {}; -__export(DailyMotion_exports, { - default: () => DailyMotion -}); -module.exports = __toCommonJS(DailyMotion_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_utils = __webpack_require__(75635); -var import_patterns = __webpack_require__(50327); -const SDK_URL = "https://api.dmcdn.net/all.js"; -const SDK_GLOBAL = "DM"; -const SDK_GLOBAL_READY = "dmAsyncInit"; -class DailyMotion extends import_react.Component { - constructor() { - super(...arguments); - __publicField(this, "callPlayer", import_utils.callPlayer); - __publicField(this, "onDurationChange", () => { - const duration = this.getDuration(); - this.props.onDuration(duration); - }); - __publicField(this, "mute", () => { - this.callPlayer("setMuted", true); - }); - __publicField(this, "unmute", () => { - this.callPlayer("setMuted", false); - }); - __publicField(this, "ref", (container) => { - this.container = container; - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - } - load(url) { - const { controls, config, onError, playing } = this.props; - const [, id] = url.match(import_patterns.MATCH_URL_DAILYMOTION); - if (this.player) { - this.player.load(id, { - start: (0, import_utils.parseStartTime)(url), - autoplay: playing - }); - return; - } - (0, import_utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, (DM) => DM.player).then((DM) => { - if (!this.container) - return; - const Player = DM.player; - this.player = new Player(this.container, { - width: "100%", - height: "100%", - video: id, - params: { - controls, - autoplay: this.props.playing, - mute: this.props.muted, - start: (0, import_utils.parseStartTime)(url), - origin: window.location.origin, - ...config.params - }, - events: { - apiready: this.props.onReady, - seeked: () => this.props.onSeek(this.player.currentTime), - video_end: this.props.onEnded, - durationchange: this.onDurationChange, - pause: this.props.onPause, - playing: this.props.onPlay, - waiting: this.props.onBuffer, - error: (event) => onError(event) - } - }); - }, onError); - } - play() { - this.callPlayer("play"); - } - pause() { - this.callPlayer("pause"); - } - stop() { - } - seekTo(seconds, keepPlaying = true) { - this.callPlayer("seek", seconds); - if (!keepPlaying) { - this.pause(); - } - } - setVolume(fraction) { - this.callPlayer("setVolume", fraction); - } - getDuration() { - return this.player.duration || null; - } - getCurrentTime() { - return this.player.currentTime; - } - getSecondsLoaded() { - return this.player.bufferedTime; - } - render() { - const { display } = this.props; - const style = { - width: "100%", - height: "100%", - display - }; - return /* @__PURE__ */ import_react.default.createElement("div", { style }, /* @__PURE__ */ import_react.default.createElement("div", { ref: this.ref })); - } -} -__publicField(DailyMotion, "displayName", "DailyMotion"); -__publicField(DailyMotion, "canPlay", import_patterns.canPlay.dailymotion); -__publicField(DailyMotion, "loopOnEnded", true); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerFacebook.1a4ea89c.js b/pr-preview/pr-1594/assets/js/reactPlayerFacebook.1a4ea89c.js deleted file mode 100644 index eb54072fef..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerFacebook.1a4ea89c.js +++ /dev/null @@ -1,156 +0,0 @@ -exports.id = 887; -exports.ids = [887]; -exports.modules = { - -/***/ 61343: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Facebook_exports = {}; -__export(Facebook_exports, { - default: () => Facebook -}); -module.exports = __toCommonJS(Facebook_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_utils = __webpack_require__(75635); -var import_patterns = __webpack_require__(50327); -const SDK_URL = "https://connect.facebook.net/en_US/sdk.js"; -const SDK_GLOBAL = "FB"; -const SDK_GLOBAL_READY = "fbAsyncInit"; -const PLAYER_ID_PREFIX = "facebook-player-"; -class Facebook extends import_react.Component { - constructor() { - super(...arguments); - __publicField(this, "callPlayer", import_utils.callPlayer); - __publicField(this, "playerID", this.props.config.playerId || `${PLAYER_ID_PREFIX}${(0, import_utils.randomString)()}`); - __publicField(this, "mute", () => { - this.callPlayer("mute"); - }); - __publicField(this, "unmute", () => { - this.callPlayer("unmute"); - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - } - load(url, isReady) { - if (isReady) { - (0, import_utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then((FB) => FB.XFBML.parse()); - return; - } - (0, import_utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then((FB) => { - FB.init({ - appId: this.props.config.appId, - xfbml: true, - version: this.props.config.version - }); - FB.Event.subscribe("xfbml.render", (msg) => { - this.props.onLoaded(); - }); - FB.Event.subscribe("xfbml.ready", (msg) => { - if (msg.type === "video" && msg.id === this.playerID) { - this.player = msg.instance; - this.player.subscribe("startedPlaying", this.props.onPlay); - this.player.subscribe("paused", this.props.onPause); - this.player.subscribe("finishedPlaying", this.props.onEnded); - this.player.subscribe("startedBuffering", this.props.onBuffer); - this.player.subscribe("finishedBuffering", this.props.onBufferEnd); - this.player.subscribe("error", this.props.onError); - if (this.props.muted) { - this.callPlayer("mute"); - } else { - this.callPlayer("unmute"); - } - this.props.onReady(); - document.getElementById(this.playerID).querySelector("iframe").style.visibility = "visible"; - } - }); - }); - } - play() { - this.callPlayer("play"); - } - pause() { - this.callPlayer("pause"); - } - stop() { - } - seekTo(seconds, keepPlaying = true) { - this.callPlayer("seek", seconds); - if (!keepPlaying) { - this.pause(); - } - } - setVolume(fraction) { - this.callPlayer("setVolume", fraction); - } - getDuration() { - return this.callPlayer("getDuration"); - } - getCurrentTime() { - return this.callPlayer("getCurrentPosition"); - } - getSecondsLoaded() { - return null; - } - render() { - const { attributes } = this.props.config; - const style = { - width: "100%", - height: "100%" - }; - return /* @__PURE__ */ import_react.default.createElement( - "div", - { - style, - id: this.playerID, - className: "fb-video", - "data-href": this.props.url, - "data-autoplay": this.props.playing ? "true" : "false", - "data-allowfullscreen": "true", - "data-controls": this.props.controls ? "true" : "false", - ...attributes - } - ); - } -} -__publicField(Facebook, "displayName", "Facebook"); -__publicField(Facebook, "canPlay", import_patterns.canPlay.facebook); -__publicField(Facebook, "loopOnEnded", true); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerFacebook.c760d132.js b/pr-preview/pr-1594/assets/js/reactPlayerFacebook.c760d132.js deleted file mode 100644 index d9c3128c32..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerFacebook.c760d132.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[6887],{61343:(e,t,s)=>{var r,a=Object.create,l=Object.defineProperty,i=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,n=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,u=(e,t,s,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of o(t))p.call(e,a)||a===s||l(e,a,{get:()=>t[a],enumerable:!(r=i(t,a))||r.enumerable});return e},c=(e,t,s)=>(((e,t,s)=>{t in e?l(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s})(e,"symbol"!=typeof t?t+"":t,s),s),h={};((e,t)=>{for(var s in t)l(e,s,{get:t[s],enumerable:!0})})(h,{default:()=>g}),e.exports=(r=h,u(l({},"__esModule",{value:!0}),r));var y=((e,t,s)=>(s=null!=e?a(n(e)):{},u(!t&&e&&e.__esModule?s:l(s,"default",{value:e,enumerable:!0}),e)))(s(96540)),d=s(75635),b=s(50327);const f="https://connect.facebook.net/en_US/sdk.js",m="fbAsyncInit";class g extends y.Component{constructor(){super(...arguments),c(this,"callPlayer",d.callPlayer),c(this,"playerID",this.props.config.playerId||`facebook-player-${(0,d.randomString)()}`),c(this,"mute",(()=>{this.callPlayer("mute")})),c(this,"unmute",(()=>{this.callPlayer("unmute")}))}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e,t){t?(0,d.getSDK)(f,"FB",m).then((e=>e.XFBML.parse())):(0,d.getSDK)(f,"FB",m).then((e=>{e.init({appId:this.props.config.appId,xfbml:!0,version:this.props.config.version}),e.Event.subscribe("xfbml.render",(e=>{this.props.onLoaded()})),e.Event.subscribe("xfbml.ready",(e=>{"video"===e.type&&e.id===this.playerID&&(this.player=e.instance,this.player.subscribe("startedPlaying",this.props.onPlay),this.player.subscribe("paused",this.props.onPause),this.player.subscribe("finishedPlaying",this.props.onEnded),this.player.subscribe("startedBuffering",this.props.onBuffer),this.player.subscribe("finishedBuffering",this.props.onBufferEnd),this.player.subscribe("error",this.props.onError),this.props.muted?this.callPlayer("mute"):this.callPlayer("unmute"),this.props.onReady(),document.getElementById(this.playerID).querySelector("iframe").style.visibility="visible")}))}))}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){}seekTo(e,t=!0){this.callPlayer("seek",e),t||this.pause()}setVolume(e){this.callPlayer("setVolume",e)}getDuration(){return this.callPlayer("getDuration")}getCurrentTime(){return this.callPlayer("getCurrentPosition")}getSecondsLoaded(){return null}render(){const{attributes:e}=this.props.config;return y.default.createElement("div",{style:{width:"100%",height:"100%"},id:this.playerID,className:"fb-video","data-href":this.props.url,"data-autoplay":this.props.playing?"true":"false","data-allowfullscreen":"true","data-controls":this.props.controls?"true":"false",...e})}}c(g,"displayName","Facebook"),c(g,"canPlay",b.canPlay.facebook),c(g,"loopOnEnded",!0)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerFilePlayer.d5d95a3c.js b/pr-preview/pr-1594/assets/js/reactPlayerFilePlayer.d5d95a3c.js deleted file mode 100644 index c4faaafdf7..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerFilePlayer.d5d95a3c.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[7458],{20688:(e,t,s)=>{var r,i=Object.create,n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,h=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,p=(e,t,s,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of a(t))l.call(e,i)||i===s||n(e,i,{get:()=>t[i],enumerable:!(r=o(t,i))||r.enumerable});return e},d=(e,t,s)=>(((e,t,s)=>{t in e?n(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s})(e,"symbol"!=typeof t?t+"":t,s),s),u={};((e,t)=>{for(var s in t)n(e,s,{get:t[s],enumerable:!0})})(u,{default:()=>L}),e.exports=(r=u,p(n({},"__esModule",{value:!0}),r));var c=((e,t,s)=>(s=null!=e?i(h(e)):{},p(!t&&e&&e.__esModule?s:n(s,"default",{value:e,enumerable:!0}),e)))(s(96540)),y=s(75635),f=s(50327);const m="undefined"!=typeof navigator,v=m&&"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1,E=m&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||v)&&!window.MSStream,P=m&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent)&&!window.MSStream,g=/www\.dropbox\.com\/.+/,b=/https:\/\/watch\.cloudflarestream\.com\/([a-z0-9]+)/;class L extends c.Component{constructor(){super(...arguments),d(this,"onReady",((...e)=>this.props.onReady(...e))),d(this,"onPlay",((...e)=>this.props.onPlay(...e))),d(this,"onBuffer",((...e)=>this.props.onBuffer(...e))),d(this,"onBufferEnd",((...e)=>this.props.onBufferEnd(...e))),d(this,"onPause",((...e)=>this.props.onPause(...e))),d(this,"onEnded",((...e)=>this.props.onEnded(...e))),d(this,"onError",((...e)=>this.props.onError(...e))),d(this,"onPlayBackRateChange",(e=>this.props.onPlaybackRateChange(e.target.playbackRate))),d(this,"onEnablePIP",((...e)=>this.props.onEnablePIP(...e))),d(this,"onDisablePIP",(e=>{const{onDisablePIP:t,playing:s}=this.props;t(e),s&&this.play()})),d(this,"onPresentationModeChange",(e=>{if(this.player&&(0,y.supportsWebKitPresentationMode)(this.player)){const{webkitPresentationMode:t}=this.player;"picture-in-picture"===t?this.onEnablePIP(e):"inline"===t&&this.onDisablePIP(e)}})),d(this,"onSeek",(e=>{this.props.onSeek(e.target.currentTime)})),d(this,"mute",(()=>{this.player.muted=!0})),d(this,"unmute",(()=>{this.player.muted=!1})),d(this,"renderSourceElement",((e,t)=>"string"==typeof e?c.default.createElement("source",{key:t,src:e}):c.default.createElement("source",{key:t,...e}))),d(this,"renderTrack",((e,t)=>c.default.createElement("track",{key:t,...e}))),d(this,"ref",(e=>{this.player&&(this.prevPlayer=this.player),this.player=e}))}componentDidMount(){this.props.onMount&&this.props.onMount(this),this.addListeners(this.player);const e=this.getSource(this.props.url);e&&(this.player.src=e),(E||this.props.config.forceDisableHls)&&this.player.load()}componentDidUpdate(e){this.shouldUseAudio(this.props)!==this.shouldUseAudio(e)&&(this.removeListeners(this.prevPlayer,e.url),this.addListeners(this.player)),this.props.url===e.url||(0,y.isMediaStream)(this.props.url)||this.props.url instanceof Array||(this.player.srcObject=null)}componentWillUnmount(){this.player.removeAttribute("src"),this.removeListeners(this.player),this.hls&&this.hls.destroy()}addListeners(e){const{url:t,playsinline:s}=this.props;e.addEventListener("play",this.onPlay),e.addEventListener("waiting",this.onBuffer),e.addEventListener("playing",this.onBufferEnd),e.addEventListener("pause",this.onPause),e.addEventListener("seeked",this.onSeek),e.addEventListener("ended",this.onEnded),e.addEventListener("error",this.onError),e.addEventListener("ratechange",this.onPlayBackRateChange),e.addEventListener("enterpictureinpicture",this.onEnablePIP),e.addEventListener("leavepictureinpicture",this.onDisablePIP),e.addEventListener("webkitpresentationmodechanged",this.onPresentationModeChange),this.shouldUseHLS(t)||e.addEventListener("canplay",this.onReady),s&&(e.setAttribute("playsinline",""),e.setAttribute("webkit-playsinline",""),e.setAttribute("x5-playsinline",""))}removeListeners(e,t){e.removeEventListener("canplay",this.onReady),e.removeEventListener("play",this.onPlay),e.removeEventListener("waiting",this.onBuffer),e.removeEventListener("playing",this.onBufferEnd),e.removeEventListener("pause",this.onPause),e.removeEventListener("seeked",this.onSeek),e.removeEventListener("ended",this.onEnded),e.removeEventListener("error",this.onError),e.removeEventListener("ratechange",this.onPlayBackRateChange),e.removeEventListener("enterpictureinpicture",this.onEnablePIP),e.removeEventListener("leavepictureinpicture",this.onDisablePIP),e.removeEventListener("webkitpresentationmodechanged",this.onPresentationModeChange),this.shouldUseHLS(t)||e.removeEventListener("canplay",this.onReady)}shouldUseAudio(e){return!e.config.forceVideo&&(!e.config.attributes.poster&&(f.AUDIO_EXTENSIONS.test(e.url)||e.config.forceAudio))}shouldUseHLS(e){return!!(P&&this.props.config.forceSafariHLS||this.props.config.forceHLS)||!E&&!this.props.config.forceDisableHls&&(f.HLS_EXTENSIONS.test(e)||b.test(e))}shouldUseDASH(e){return f.DASH_EXTENSIONS.test(e)||this.props.config.forceDASH}shouldUseFLV(e){return f.FLV_EXTENSIONS.test(e)||this.props.config.forceFLV}load(e){const{hlsVersion:t,hlsOptions:s,dashVersion:r,flvVersion:i}=this.props.config;if(this.hls&&this.hls.destroy(),this.dash&&this.dash.reset(),this.shouldUseHLS(e)&&(0,y.getSDK)("https://cdn.jsdelivr.net/npm/hls.js@VERSION/dist/hls.min.js".replace("VERSION",t),"Hls").then((t=>{if(this.hls=new t(s),this.hls.on(t.Events.MANIFEST_PARSED,(()=>{this.props.onReady()})),this.hls.on(t.Events.ERROR,((e,s)=>{this.props.onError(e,s,this.hls,t)})),b.test(e)){const t=e.match(b)[1];this.hls.loadSource("https://videodelivery.net/{id}/manifest/video.m3u8".replace("{id}",t))}else this.hls.loadSource(e);this.hls.attachMedia(this.player),this.props.onLoaded()})),this.shouldUseDASH(e)&&(0,y.getSDK)("https://cdnjs.cloudflare.com/ajax/libs/dashjs/VERSION/dash.all.min.js".replace("VERSION",r),"dashjs").then((t=>{this.dash=t.MediaPlayer().create(),this.dash.initialize(this.player,e,this.props.playing),this.dash.on("error",this.props.onError),parseInt(r)<3?this.dash.getDebug().setLogToBrowserConsole(!1):this.dash.updateSettings({debug:{logLevel:t.Debug.LOG_LEVEL_NONE}}),this.props.onLoaded()})),this.shouldUseFLV(e)&&(0,y.getSDK)("https://cdn.jsdelivr.net/npm/flv.js@VERSION/dist/flv.min.js".replace("VERSION",i),"flvjs").then((t=>{this.flv=t.createPlayer({type:"flv",url:e}),this.flv.attachMediaElement(this.player),this.flv.on(t.Events.ERROR,((e,s)=>{this.props.onError(e,s,this.flv,t)})),this.flv.load(),this.props.onLoaded()})),e instanceof Array)this.player.load();else if((0,y.isMediaStream)(e))try{this.player.srcObject=e}catch(n){this.player.src=window.URL.createObjectURL(e)}}play(){const e=this.player.play();e&&e.catch(this.props.onError)}pause(){this.player.pause()}stop(){this.player.removeAttribute("src"),this.dash&&this.dash.reset()}seekTo(e,t=!0){this.player.currentTime=e,t||this.pause()}setVolume(e){this.player.volume=e}enablePIP(){this.player.requestPictureInPicture&&document.pictureInPictureElement!==this.player?this.player.requestPictureInPicture():(0,y.supportsWebKitPresentationMode)(this.player)&&"picture-in-picture"!==this.player.webkitPresentationMode&&this.player.webkitSetPresentationMode("picture-in-picture")}disablePIP(){document.exitPictureInPicture&&document.pictureInPictureElement===this.player?document.exitPictureInPicture():(0,y.supportsWebKitPresentationMode)(this.player)&&"inline"!==this.player.webkitPresentationMode&&this.player.webkitSetPresentationMode("inline")}setPlaybackRate(e){try{this.player.playbackRate=e}catch(t){this.props.onError(t)}}getDuration(){if(!this.player)return null;const{duration:e,seekable:t}=this.player;return e===1/0&&t.length>0?t.end(t.length-1):e}getCurrentTime(){return this.player?this.player.currentTime:null}getSecondsLoaded(){if(!this.player)return null;const{buffered:e}=this.player;if(0===e.length)return 0;const t=e.end(e.length-1),s=this.getDuration();return t>s?s:t}getSource(e){const t=this.shouldUseHLS(e),s=this.shouldUseDASH(e),r=this.shouldUseFLV(e);if(!(e instanceof Array||(0,y.isMediaStream)(e)||t||s||r))return g.test(e)?e.replace("www.dropbox.com","dl.dropboxusercontent.com"):e}render(){const{url:e,playing:t,loop:s,controls:r,muted:i,config:n,width:o,height:a}=this.props,h=this.shouldUseAudio(this.props)?"audio":"video",l={width:"auto"===o?o:"100%",height:"auto"===a?a:"100%"};return c.default.createElement(h,{ref:this.ref,src:this.getSource(e),style:l,preload:"auto",autoPlay:t||void 0,controls:r,muted:i,loop:s,...n.attributes},e instanceof Array&&e.map(this.renderSourceElement),n.tracks.map(this.renderTrack))}}d(L,"displayName","FilePlayer"),d(L,"canPlay",f.canPlay.file)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerFilePlayer.f1588da1.js b/pr-preview/pr-1594/assets/js/reactPlayerFilePlayer.f1588da1.js deleted file mode 100644 index 7a184edc85..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerFilePlayer.f1588da1.js +++ /dev/null @@ -1,385 +0,0 @@ -exports.id = 458; -exports.ids = [458]; -exports.modules = { - -/***/ 20688: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var FilePlayer_exports = {}; -__export(FilePlayer_exports, { - default: () => FilePlayer -}); -module.exports = __toCommonJS(FilePlayer_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_utils = __webpack_require__(75635); -var import_patterns = __webpack_require__(50327); -const HAS_NAVIGATOR = typeof navigator !== "undefined"; -const IS_IPAD_PRO = HAS_NAVIGATOR && navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1; -const IS_IOS = HAS_NAVIGATOR && (/iPad|iPhone|iPod/.test(navigator.userAgent) || IS_IPAD_PRO) && !window.MSStream; -const IS_SAFARI = HAS_NAVIGATOR && /^((?!chrome|android).)*safari/i.test(navigator.userAgent) && !window.MSStream; -const HLS_SDK_URL = "https://cdn.jsdelivr.net/npm/hls.js@VERSION/dist/hls.min.js"; -const HLS_GLOBAL = "Hls"; -const DASH_SDK_URL = "https://cdnjs.cloudflare.com/ajax/libs/dashjs/VERSION/dash.all.min.js"; -const DASH_GLOBAL = "dashjs"; -const FLV_SDK_URL = "https://cdn.jsdelivr.net/npm/flv.js@VERSION/dist/flv.min.js"; -const FLV_GLOBAL = "flvjs"; -const MATCH_DROPBOX_URL = /www\.dropbox\.com\/.+/; -const MATCH_CLOUDFLARE_STREAM = /https:\/\/watch\.cloudflarestream\.com\/([a-z0-9]+)/; -const REPLACE_CLOUDFLARE_STREAM = "https://videodelivery.net/{id}/manifest/video.m3u8"; -class FilePlayer extends import_react.Component { - constructor() { - super(...arguments); - // Proxy methods to prevent listener leaks - __publicField(this, "onReady", (...args) => this.props.onReady(...args)); - __publicField(this, "onPlay", (...args) => this.props.onPlay(...args)); - __publicField(this, "onBuffer", (...args) => this.props.onBuffer(...args)); - __publicField(this, "onBufferEnd", (...args) => this.props.onBufferEnd(...args)); - __publicField(this, "onPause", (...args) => this.props.onPause(...args)); - __publicField(this, "onEnded", (...args) => this.props.onEnded(...args)); - __publicField(this, "onError", (...args) => this.props.onError(...args)); - __publicField(this, "onPlayBackRateChange", (event) => this.props.onPlaybackRateChange(event.target.playbackRate)); - __publicField(this, "onEnablePIP", (...args) => this.props.onEnablePIP(...args)); - __publicField(this, "onDisablePIP", (e) => { - const { onDisablePIP, playing } = this.props; - onDisablePIP(e); - if (playing) { - this.play(); - } - }); - __publicField(this, "onPresentationModeChange", (e) => { - if (this.player && (0, import_utils.supportsWebKitPresentationMode)(this.player)) { - const { webkitPresentationMode } = this.player; - if (webkitPresentationMode === "picture-in-picture") { - this.onEnablePIP(e); - } else if (webkitPresentationMode === "inline") { - this.onDisablePIP(e); - } - } - }); - __publicField(this, "onSeek", (e) => { - this.props.onSeek(e.target.currentTime); - }); - __publicField(this, "mute", () => { - this.player.muted = true; - }); - __publicField(this, "unmute", () => { - this.player.muted = false; - }); - __publicField(this, "renderSourceElement", (source, index) => { - if (typeof source === "string") { - return /* @__PURE__ */ import_react.default.createElement("source", { key: index, src: source }); - } - return /* @__PURE__ */ import_react.default.createElement("source", { key: index, ...source }); - }); - __publicField(this, "renderTrack", (track, index) => { - return /* @__PURE__ */ import_react.default.createElement("track", { key: index, ...track }); - }); - __publicField(this, "ref", (player) => { - if (this.player) { - this.prevPlayer = this.player; - } - this.player = player; - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - this.addListeners(this.player); - const src = this.getSource(this.props.url); - if (src) { - this.player.src = src; - } - if (IS_IOS || this.props.config.forceDisableHls) { - this.player.load(); - } - } - componentDidUpdate(prevProps) { - if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(prevProps)) { - this.removeListeners(this.prevPlayer, prevProps.url); - this.addListeners(this.player); - } - if (this.props.url !== prevProps.url && !(0, import_utils.isMediaStream)(this.props.url) && !(this.props.url instanceof Array)) { - this.player.srcObject = null; - } - } - componentWillUnmount() { - this.player.removeAttribute("src"); - this.removeListeners(this.player); - if (this.hls) { - this.hls.destroy(); - } - } - addListeners(player) { - const { url, playsinline } = this.props; - player.addEventListener("play", this.onPlay); - player.addEventListener("waiting", this.onBuffer); - player.addEventListener("playing", this.onBufferEnd); - player.addEventListener("pause", this.onPause); - player.addEventListener("seeked", this.onSeek); - player.addEventListener("ended", this.onEnded); - player.addEventListener("error", this.onError); - player.addEventListener("ratechange", this.onPlayBackRateChange); - player.addEventListener("enterpictureinpicture", this.onEnablePIP); - player.addEventListener("leavepictureinpicture", this.onDisablePIP); - player.addEventListener("webkitpresentationmodechanged", this.onPresentationModeChange); - if (!this.shouldUseHLS(url)) { - player.addEventListener("canplay", this.onReady); - } - if (playsinline) { - player.setAttribute("playsinline", ""); - player.setAttribute("webkit-playsinline", ""); - player.setAttribute("x5-playsinline", ""); - } - } - removeListeners(player, url) { - player.removeEventListener("canplay", this.onReady); - player.removeEventListener("play", this.onPlay); - player.removeEventListener("waiting", this.onBuffer); - player.removeEventListener("playing", this.onBufferEnd); - player.removeEventListener("pause", this.onPause); - player.removeEventListener("seeked", this.onSeek); - player.removeEventListener("ended", this.onEnded); - player.removeEventListener("error", this.onError); - player.removeEventListener("ratechange", this.onPlayBackRateChange); - player.removeEventListener("enterpictureinpicture", this.onEnablePIP); - player.removeEventListener("leavepictureinpicture", this.onDisablePIP); - player.removeEventListener("webkitpresentationmodechanged", this.onPresentationModeChange); - if (!this.shouldUseHLS(url)) { - player.removeEventListener("canplay", this.onReady); - } - } - shouldUseAudio(props) { - if (props.config.forceVideo) { - return false; - } - if (props.config.attributes.poster) { - return false; - } - return import_patterns.AUDIO_EXTENSIONS.test(props.url) || props.config.forceAudio; - } - shouldUseHLS(url) { - if (IS_SAFARI && this.props.config.forceSafariHLS || this.props.config.forceHLS) { - return true; - } - if (IS_IOS || this.props.config.forceDisableHls) { - return false; - } - return import_patterns.HLS_EXTENSIONS.test(url) || MATCH_CLOUDFLARE_STREAM.test(url); - } - shouldUseDASH(url) { - return import_patterns.DASH_EXTENSIONS.test(url) || this.props.config.forceDASH; - } - shouldUseFLV(url) { - return import_patterns.FLV_EXTENSIONS.test(url) || this.props.config.forceFLV; - } - load(url) { - const { hlsVersion, hlsOptions, dashVersion, flvVersion } = this.props.config; - if (this.hls) { - this.hls.destroy(); - } - if (this.dash) { - this.dash.reset(); - } - if (this.shouldUseHLS(url)) { - (0, import_utils.getSDK)(HLS_SDK_URL.replace("VERSION", hlsVersion), HLS_GLOBAL).then((Hls) => { - this.hls = new Hls(hlsOptions); - this.hls.on(Hls.Events.MANIFEST_PARSED, () => { - this.props.onReady(); - }); - this.hls.on(Hls.Events.ERROR, (e, data) => { - this.props.onError(e, data, this.hls, Hls); - }); - if (MATCH_CLOUDFLARE_STREAM.test(url)) { - const id = url.match(MATCH_CLOUDFLARE_STREAM)[1]; - this.hls.loadSource(REPLACE_CLOUDFLARE_STREAM.replace("{id}", id)); - } else { - this.hls.loadSource(url); - } - this.hls.attachMedia(this.player); - this.props.onLoaded(); - }); - } - if (this.shouldUseDASH(url)) { - (0, import_utils.getSDK)(DASH_SDK_URL.replace("VERSION", dashVersion), DASH_GLOBAL).then((dashjs) => { - this.dash = dashjs.MediaPlayer().create(); - this.dash.initialize(this.player, url, this.props.playing); - this.dash.on("error", this.props.onError); - if (parseInt(dashVersion) < 3) { - this.dash.getDebug().setLogToBrowserConsole(false); - } else { - this.dash.updateSettings({ debug: { logLevel: dashjs.Debug.LOG_LEVEL_NONE } }); - } - this.props.onLoaded(); - }); - } - if (this.shouldUseFLV(url)) { - (0, import_utils.getSDK)(FLV_SDK_URL.replace("VERSION", flvVersion), FLV_GLOBAL).then((flvjs) => { - this.flv = flvjs.createPlayer({ type: "flv", url }); - this.flv.attachMediaElement(this.player); - this.flv.on(flvjs.Events.ERROR, (e, data) => { - this.props.onError(e, data, this.flv, flvjs); - }); - this.flv.load(); - this.props.onLoaded(); - }); - } - if (url instanceof Array) { - this.player.load(); - } else if ((0, import_utils.isMediaStream)(url)) { - try { - this.player.srcObject = url; - } catch (e) { - this.player.src = window.URL.createObjectURL(url); - } - } - } - play() { - const promise = this.player.play(); - if (promise) { - promise.catch(this.props.onError); - } - } - pause() { - this.player.pause(); - } - stop() { - this.player.removeAttribute("src"); - if (this.dash) { - this.dash.reset(); - } - } - seekTo(seconds, keepPlaying = true) { - this.player.currentTime = seconds; - if (!keepPlaying) { - this.pause(); - } - } - setVolume(fraction) { - this.player.volume = fraction; - } - enablePIP() { - if (this.player.requestPictureInPicture && document.pictureInPictureElement !== this.player) { - this.player.requestPictureInPicture(); - } else if ((0, import_utils.supportsWebKitPresentationMode)(this.player) && this.player.webkitPresentationMode !== "picture-in-picture") { - this.player.webkitSetPresentationMode("picture-in-picture"); - } - } - disablePIP() { - if (document.exitPictureInPicture && document.pictureInPictureElement === this.player) { - document.exitPictureInPicture(); - } else if ((0, import_utils.supportsWebKitPresentationMode)(this.player) && this.player.webkitPresentationMode !== "inline") { - this.player.webkitSetPresentationMode("inline"); - } - } - setPlaybackRate(rate) { - try { - this.player.playbackRate = rate; - } catch (error) { - this.props.onError(error); - } - } - getDuration() { - if (!this.player) - return null; - const { duration, seekable } = this.player; - if (duration === Infinity && seekable.length > 0) { - return seekable.end(seekable.length - 1); - } - return duration; - } - getCurrentTime() { - if (!this.player) - return null; - return this.player.currentTime; - } - getSecondsLoaded() { - if (!this.player) - return null; - const { buffered } = this.player; - if (buffered.length === 0) { - return 0; - } - const end = buffered.end(buffered.length - 1); - const duration = this.getDuration(); - if (end > duration) { - return duration; - } - return end; - } - getSource(url) { - const useHLS = this.shouldUseHLS(url); - const useDASH = this.shouldUseDASH(url); - const useFLV = this.shouldUseFLV(url); - if (url instanceof Array || (0, import_utils.isMediaStream)(url) || useHLS || useDASH || useFLV) { - return void 0; - } - if (MATCH_DROPBOX_URL.test(url)) { - return url.replace("www.dropbox.com", "dl.dropboxusercontent.com"); - } - return url; - } - render() { - const { url, playing, loop, controls, muted, config, width, height } = this.props; - const useAudio = this.shouldUseAudio(this.props); - const Element = useAudio ? "audio" : "video"; - const style = { - width: width === "auto" ? width : "100%", - height: height === "auto" ? height : "100%" - }; - return /* @__PURE__ */ import_react.default.createElement( - Element, - { - ref: this.ref, - src: this.getSource(url), - style, - preload: "auto", - autoPlay: playing || void 0, - controls, - muted, - loop, - ...config.attributes - }, - url instanceof Array && url.map(this.renderSourceElement), - config.tracks.map(this.renderTrack) - ); - } -} -__publicField(FilePlayer, "displayName", "FilePlayer"); -__publicField(FilePlayer, "canPlay", import_patterns.canPlay.file); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerKaltura.337ee336.js b/pr-preview/pr-1594/assets/js/reactPlayerKaltura.337ee336.js deleted file mode 100644 index 7d51d64a8a..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerKaltura.337ee336.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[6463],{97945:(e,t,r)=>{var s,a=Object.create,l=Object.defineProperty,o=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,i=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,p=(e,t,r,s)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of n(t))u.call(e,a)||a===r||l(e,a,{get:()=>t[a],enumerable:!(s=o(t,a))||s.enumerable});return e},h=(e,t,r)=>(((e,t,r)=>{t in e?l(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r})(e,"symbol"!=typeof t?t+"":t,r),r),d={};((e,t)=>{for(var r in t)l(e,r,{get:t[r],enumerable:!0})})(d,{default:()=>f}),e.exports=(s=d,p(l({},"__esModule",{value:!0}),s));var c=((e,t,r)=>(r=null!=e?a(i(e)):{},p(!t&&e&&e.__esModule?r:l(r,"default",{value:e,enumerable:!0}),e)))(r(96540)),y=r(75635),m=r(50327);class f extends c.Component{constructor(){super(...arguments),h(this,"callPlayer",y.callPlayer),h(this,"duration",null),h(this,"currentTime",null),h(this,"secondsLoaded",null),h(this,"mute",(()=>{this.callPlayer("mute")})),h(this,"unmute",(()=>{this.callPlayer("unmute")})),h(this,"ref",(e=>{this.iframe=e}))}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e){(0,y.getSDK)("https://cdn.embed.ly/player-0.1.0.min.js","playerjs").then((e=>{this.iframe&&(this.player=new e.Player(this.iframe),this.player.on("ready",(()=>{setTimeout((()=>{this.player.isReady=!0,this.player.setLoop(this.props.loop),this.props.muted&&this.player.mute(),this.addListeners(this.player,this.props),this.props.onReady()}),500)})))}),this.props.onError)}addListeners(e,t){e.on("play",t.onPlay),e.on("pause",t.onPause),e.on("ended",t.onEnded),e.on("error",t.onError),e.on("timeupdate",(({duration:e,seconds:t})=>{this.duration=e,this.currentTime=t}))}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){}seekTo(e,t=!0){this.callPlayer("setCurrentTime",e),t||this.pause()}setVolume(e){this.callPlayer("setVolume",e)}setLoop(e){this.callPlayer("setLoop",e)}getDuration(){return this.duration}getCurrentTime(){return this.currentTime}getSecondsLoaded(){return this.secondsLoaded}render(){return c.default.createElement("iframe",{ref:this.ref,src:this.props.url,frameBorder:"0",scrolling:"no",style:{width:"100%",height:"100%"},allow:"encrypted-media; autoplay; fullscreen;",referrerPolicy:"no-referrer-when-downgrade"})}}h(f,"displayName","Kaltura"),h(f,"canPlay",m.canPlay.kaltura)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerKaltura.910cba58.js b/pr-preview/pr-1594/assets/js/reactPlayerKaltura.910cba58.js deleted file mode 100644 index 1df06dcf95..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerKaltura.910cba58.js +++ /dev/null @@ -1,153 +0,0 @@ -exports.id = 463; -exports.ids = [463]; -exports.modules = { - -/***/ 97945: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Kaltura_exports = {}; -__export(Kaltura_exports, { - default: () => Kaltura -}); -module.exports = __toCommonJS(Kaltura_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_utils = __webpack_require__(75635); -var import_patterns = __webpack_require__(50327); -const SDK_URL = "https://cdn.embed.ly/player-0.1.0.min.js"; -const SDK_GLOBAL = "playerjs"; -class Kaltura extends import_react.Component { - constructor() { - super(...arguments); - __publicField(this, "callPlayer", import_utils.callPlayer); - __publicField(this, "duration", null); - __publicField(this, "currentTime", null); - __publicField(this, "secondsLoaded", null); - __publicField(this, "mute", () => { - this.callPlayer("mute"); - }); - __publicField(this, "unmute", () => { - this.callPlayer("unmute"); - }); - __publicField(this, "ref", (iframe) => { - this.iframe = iframe; - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - } - load(url) { - (0, import_utils.getSDK)(SDK_URL, SDK_GLOBAL).then((playerjs) => { - if (!this.iframe) - return; - this.player = new playerjs.Player(this.iframe); - this.player.on("ready", () => { - setTimeout(() => { - this.player.isReady = true; - this.player.setLoop(this.props.loop); - if (this.props.muted) { - this.player.mute(); - } - this.addListeners(this.player, this.props); - this.props.onReady(); - }, 500); - }); - }, this.props.onError); - } - addListeners(player, props) { - player.on("play", props.onPlay); - player.on("pause", props.onPause); - player.on("ended", props.onEnded); - player.on("error", props.onError); - player.on("timeupdate", ({ duration, seconds }) => { - this.duration = duration; - this.currentTime = seconds; - }); - } - play() { - this.callPlayer("play"); - } - pause() { - this.callPlayer("pause"); - } - stop() { - } - seekTo(seconds, keepPlaying = true) { - this.callPlayer("setCurrentTime", seconds); - if (!keepPlaying) { - this.pause(); - } - } - setVolume(fraction) { - this.callPlayer("setVolume", fraction); - } - setLoop(loop) { - this.callPlayer("setLoop", loop); - } - getDuration() { - return this.duration; - } - getCurrentTime() { - return this.currentTime; - } - getSecondsLoaded() { - return this.secondsLoaded; - } - render() { - const style = { - width: "100%", - height: "100%" - }; - return /* @__PURE__ */ import_react.default.createElement( - "iframe", - { - ref: this.ref, - src: this.props.url, - frameBorder: "0", - scrolling: "no", - style, - allow: "encrypted-media; autoplay; fullscreen;", - referrerPolicy: "no-referrer-when-downgrade" - } - ); - } -} -__publicField(Kaltura, "displayName", "Kaltura"); -__publicField(Kaltura, "canPlay", import_patterns.canPlay.kaltura); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerMixcloud.433550ac.js b/pr-preview/pr-1594/assets/js/reactPlayerMixcloud.433550ac.js deleted file mode 100644 index 7860224108..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerMixcloud.433550ac.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[7570],{3276:(e,t,r)=>{var s,o=Object.create,n=Object.defineProperty,a=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,i=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,u=(e,t,r,s)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of l(t))p.call(e,o)||o===r||n(e,o,{get:()=>t[o],enumerable:!(s=a(t,o))||s.enumerable});return e},h=(e,t,r)=>(((e,t,r)=>{t in e?n(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r})(e,"symbol"!=typeof t?t+"":t,r),r),c={};((e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})})(c,{default:()=>f}),e.exports=(s=c,u(n({},"__esModule",{value:!0}),s));var d=((e,t,r)=>(r=null!=e?o(i(e)):{},u(!t&&e&&e.__esModule?r:n(r,"default",{value:e,enumerable:!0}),e)))(r(96540)),y=r(75635),m=r(50327);class f extends d.Component{constructor(){super(...arguments),h(this,"callPlayer",y.callPlayer),h(this,"duration",null),h(this,"currentTime",null),h(this,"secondsLoaded",null),h(this,"mute",(()=>{})),h(this,"unmute",(()=>{})),h(this,"ref",(e=>{this.iframe=e}))}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e){(0,y.getSDK)("https://widget.mixcloud.com/media/js/widgetApi.js","Mixcloud").then((e=>{this.player=e.PlayerWidget(this.iframe),this.player.ready.then((()=>{this.player.events.play.on(this.props.onPlay),this.player.events.pause.on(this.props.onPause),this.player.events.ended.on(this.props.onEnded),this.player.events.error.on(this.props.error),this.player.events.progress.on(((e,t)=>{this.currentTime=e,this.duration=t})),this.props.onReady()}))}),this.props.onError)}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){}seekTo(e,t=!0){this.callPlayer("seek",e),t||this.pause()}setVolume(e){}getDuration(){return this.duration}getCurrentTime(){return this.currentTime}getSecondsLoaded(){return null}render(){const{url:e,config:t}=this.props,r=e.match(m.MATCH_URL_MIXCLOUD)[1],s=(0,y.queryString)({...t.options,feed:`/${r}/`});return d.default.createElement("iframe",{key:r,ref:this.ref,style:{width:"100%",height:"100%"},src:`https://www.mixcloud.com/widget/iframe/?${s}`,frameBorder:"0",allow:"autoplay"})}}h(f,"displayName","Mixcloud"),h(f,"canPlay",m.canPlay.mixcloud),h(f,"loopOnEnded",!0)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerMixcloud.7864a519.js b/pr-preview/pr-1594/assets/js/reactPlayerMixcloud.7864a519.js deleted file mode 100644 index faf83aa217..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerMixcloud.7864a519.js +++ /dev/null @@ -1,141 +0,0 @@ -exports.id = 570; -exports.ids = [570]; -exports.modules = { - -/***/ 3276: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Mixcloud_exports = {}; -__export(Mixcloud_exports, { - default: () => Mixcloud -}); -module.exports = __toCommonJS(Mixcloud_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_utils = __webpack_require__(75635); -var import_patterns = __webpack_require__(50327); -const SDK_URL = "https://widget.mixcloud.com/media/js/widgetApi.js"; -const SDK_GLOBAL = "Mixcloud"; -class Mixcloud extends import_react.Component { - constructor() { - super(...arguments); - __publicField(this, "callPlayer", import_utils.callPlayer); - __publicField(this, "duration", null); - __publicField(this, "currentTime", null); - __publicField(this, "secondsLoaded", null); - __publicField(this, "mute", () => { - }); - __publicField(this, "unmute", () => { - }); - __publicField(this, "ref", (iframe) => { - this.iframe = iframe; - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - } - load(url) { - (0, import_utils.getSDK)(SDK_URL, SDK_GLOBAL).then((Mixcloud2) => { - this.player = Mixcloud2.PlayerWidget(this.iframe); - this.player.ready.then(() => { - this.player.events.play.on(this.props.onPlay); - this.player.events.pause.on(this.props.onPause); - this.player.events.ended.on(this.props.onEnded); - this.player.events.error.on(this.props.error); - this.player.events.progress.on((seconds, duration) => { - this.currentTime = seconds; - this.duration = duration; - }); - this.props.onReady(); - }); - }, this.props.onError); - } - play() { - this.callPlayer("play"); - } - pause() { - this.callPlayer("pause"); - } - stop() { - } - seekTo(seconds, keepPlaying = true) { - this.callPlayer("seek", seconds); - if (!keepPlaying) { - this.pause(); - } - } - setVolume(fraction) { - } - getDuration() { - return this.duration; - } - getCurrentTime() { - return this.currentTime; - } - getSecondsLoaded() { - return null; - } - render() { - const { url, config } = this.props; - const id = url.match(import_patterns.MATCH_URL_MIXCLOUD)[1]; - const style = { - width: "100%", - height: "100%" - }; - const query = (0, import_utils.queryString)({ - ...config.options, - feed: `/${id}/` - }); - return /* @__PURE__ */ import_react.default.createElement( - "iframe", - { - key: id, - ref: this.ref, - style, - src: `https://www.mixcloud.com/widget/iframe/?${query}`, - frameBorder: "0", - allow: "autoplay" - } - ); - } -} -__publicField(Mixcloud, "displayName", "Mixcloud"); -__publicField(Mixcloud, "canPlay", import_patterns.canPlay.mixcloud); -__publicField(Mixcloud, "loopOnEnded", true); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerMux.462f90bd.js b/pr-preview/pr-1594/assets/js/reactPlayerMux.462f90bd.js deleted file mode 100644 index 4e0a43790f..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerMux.462f90bd.js +++ /dev/null @@ -1,241 +0,0 @@ -exports.id = 723; -exports.ids = [723]; -exports.modules = { - -/***/ 47553: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Mux_exports = {}; -__export(Mux_exports, { - default: () => Mux -}); -module.exports = __toCommonJS(Mux_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_patterns = __webpack_require__(50327); -const SDK_URL = "https://cdn.jsdelivr.net/npm/@mux/mux-player@VERSION/dist/mux-player.mjs"; -class Mux extends import_react.Component { - constructor() { - super(...arguments); - // Proxy methods to prevent listener leaks - __publicField(this, "onReady", (...args) => this.props.onReady(...args)); - __publicField(this, "onPlay", (...args) => this.props.onPlay(...args)); - __publicField(this, "onBuffer", (...args) => this.props.onBuffer(...args)); - __publicField(this, "onBufferEnd", (...args) => this.props.onBufferEnd(...args)); - __publicField(this, "onPause", (...args) => this.props.onPause(...args)); - __publicField(this, "onEnded", (...args) => this.props.onEnded(...args)); - __publicField(this, "onError", (...args) => this.props.onError(...args)); - __publicField(this, "onPlayBackRateChange", (event) => this.props.onPlaybackRateChange(event.target.playbackRate)); - __publicField(this, "onEnablePIP", (...args) => this.props.onEnablePIP(...args)); - __publicField(this, "onSeek", (e) => { - this.props.onSeek(e.target.currentTime); - }); - __publicField(this, "onDurationChange", () => { - const duration = this.getDuration(); - this.props.onDuration(duration); - }); - __publicField(this, "mute", () => { - this.player.muted = true; - }); - __publicField(this, "unmute", () => { - this.player.muted = false; - }); - __publicField(this, "ref", (player) => { - this.player = player; - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - this.addListeners(this.player); - const playbackId = this.getPlaybackId(this.props.url); - if (playbackId) { - this.player.playbackId = playbackId; - } - } - componentWillUnmount() { - this.player.playbackId = null; - this.removeListeners(this.player); - } - addListeners(player) { - const { playsinline } = this.props; - player.addEventListener("play", this.onPlay); - player.addEventListener("waiting", this.onBuffer); - player.addEventListener("playing", this.onBufferEnd); - player.addEventListener("pause", this.onPause); - player.addEventListener("seeked", this.onSeek); - player.addEventListener("ended", this.onEnded); - player.addEventListener("error", this.onError); - player.addEventListener("ratechange", this.onPlayBackRateChange); - player.addEventListener("enterpictureinpicture", this.onEnablePIP); - player.addEventListener("leavepictureinpicture", this.onDisablePIP); - player.addEventListener("webkitpresentationmodechanged", this.onPresentationModeChange); - player.addEventListener("canplay", this.onReady); - if (playsinline) { - player.setAttribute("playsinline", ""); - } - } - removeListeners(player) { - player.removeEventListener("canplay", this.onReady); - player.removeEventListener("play", this.onPlay); - player.removeEventListener("waiting", this.onBuffer); - player.removeEventListener("playing", this.onBufferEnd); - player.removeEventListener("pause", this.onPause); - player.removeEventListener("seeked", this.onSeek); - player.removeEventListener("ended", this.onEnded); - player.removeEventListener("error", this.onError); - player.removeEventListener("ratechange", this.onPlayBackRateChange); - player.removeEventListener("enterpictureinpicture", this.onEnablePIP); - player.removeEventListener("leavepictureinpicture", this.onDisablePIP); - player.removeEventListener("canplay", this.onReady); - } - async load(url) { - var _a; - const { onError, config } = this.props; - if (!((_a = globalThis.customElements) == null ? void 0 : _a.get("mux-player"))) { - try { - const sdkUrl = SDK_URL.replace("VERSION", config.version); - await import( - /* webpackIgnore: true */ - `${sdkUrl}` - ); - this.props.onLoaded(); - } catch (error) { - onError(error); - } - } - const [, id] = url.match(import_patterns.MATCH_URL_MUX); - this.player.playbackId = id; - } - play() { - const promise = this.player.play(); - if (promise) { - promise.catch(this.props.onError); - } - } - pause() { - this.player.pause(); - } - stop() { - this.player.playbackId = null; - } - seekTo(seconds, keepPlaying = true) { - this.player.currentTime = seconds; - if (!keepPlaying) { - this.pause(); - } - } - setVolume(fraction) { - this.player.volume = fraction; - } - enablePIP() { - if (this.player.requestPictureInPicture && document.pictureInPictureElement !== this.player) { - this.player.requestPictureInPicture(); - } - } - disablePIP() { - if (document.exitPictureInPicture && document.pictureInPictureElement === this.player) { - document.exitPictureInPicture(); - } - } - setPlaybackRate(rate) { - try { - this.player.playbackRate = rate; - } catch (error) { - this.props.onError(error); - } - } - getDuration() { - if (!this.player) - return null; - const { duration, seekable } = this.player; - if (duration === Infinity && seekable.length > 0) { - return seekable.end(seekable.length - 1); - } - return duration; - } - getCurrentTime() { - if (!this.player) - return null; - return this.player.currentTime; - } - getSecondsLoaded() { - if (!this.player) - return null; - const { buffered } = this.player; - if (buffered.length === 0) { - return 0; - } - const end = buffered.end(buffered.length - 1); - const duration = this.getDuration(); - if (end > duration) { - return duration; - } - return end; - } - getPlaybackId(url) { - const [, id] = url.match(import_patterns.MATCH_URL_MUX); - return id; - } - render() { - const { url, playing, loop, controls, muted, config, width, height } = this.props; - const style = { - width: width === "auto" ? width : "100%", - height: height === "auto" ? height : "100%" - }; - if (controls === false) { - style["--controls"] = "none"; - } - return /* @__PURE__ */ import_react.default.createElement( - "mux-player", - { - ref: this.ref, - "playback-id": this.getPlaybackId(url), - style, - preload: "auto", - autoPlay: playing || void 0, - muted: muted ? "" : void 0, - loop: loop ? "" : void 0, - ...config.attributes - } - ); - } -} -__publicField(Mux, "displayName", "Mux"); -__publicField(Mux, "canPlay", import_patterns.canPlay.mux); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerMux.93d8b537.js b/pr-preview/pr-1594/assets/js/reactPlayerMux.93d8b537.js deleted file mode 100644 index a16b8395a0..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerMux.93d8b537.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[2723],{47553:(e,t,n)=>{var r,s=Object.create,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,l=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,h=(e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of o(t))p.call(e,s)||s===n||i(e,s,{get:()=>t[s],enumerable:!(r=a(t,s))||r.enumerable});return e},u=(e,t,n)=>(((e,t,n)=>{t in e?i(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n})(e,"symbol"!=typeof t?t+"":t,n),n),d={};((e,t)=>{for(var n in t)i(e,n,{get:t[n],enumerable:!0})})(d,{default:()=>m}),e.exports=(r=d,h(i({},"__esModule",{value:!0}),r));var c=((e,t,n)=>(n=null!=e?s(l(e)):{},h(!t&&e&&e.__esModule?n:i(n,"default",{value:e,enumerable:!0}),e)))(n(96540)),y=n(50327);class m extends c.Component{constructor(){super(...arguments),u(this,"onReady",((...e)=>this.props.onReady(...e))),u(this,"onPlay",((...e)=>this.props.onPlay(...e))),u(this,"onBuffer",((...e)=>this.props.onBuffer(...e))),u(this,"onBufferEnd",((...e)=>this.props.onBufferEnd(...e))),u(this,"onPause",((...e)=>this.props.onPause(...e))),u(this,"onEnded",((...e)=>this.props.onEnded(...e))),u(this,"onError",((...e)=>this.props.onError(...e))),u(this,"onPlayBackRateChange",(e=>this.props.onPlaybackRateChange(e.target.playbackRate))),u(this,"onEnablePIP",((...e)=>this.props.onEnablePIP(...e))),u(this,"onSeek",(e=>{this.props.onSeek(e.target.currentTime)})),u(this,"onDurationChange",(()=>{const e=this.getDuration();this.props.onDuration(e)})),u(this,"mute",(()=>{this.player.muted=!0})),u(this,"unmute",(()=>{this.player.muted=!1})),u(this,"ref",(e=>{this.player=e}))}componentDidMount(){this.props.onMount&&this.props.onMount(this),this.addListeners(this.player);const e=this.getPlaybackId(this.props.url);e&&(this.player.playbackId=e)}componentWillUnmount(){this.player.playbackId=null,this.removeListeners(this.player)}addListeners(e){const{playsinline:t}=this.props;e.addEventListener("play",this.onPlay),e.addEventListener("waiting",this.onBuffer),e.addEventListener("playing",this.onBufferEnd),e.addEventListener("pause",this.onPause),e.addEventListener("seeked",this.onSeek),e.addEventListener("ended",this.onEnded),e.addEventListener("error",this.onError),e.addEventListener("ratechange",this.onPlayBackRateChange),e.addEventListener("enterpictureinpicture",this.onEnablePIP),e.addEventListener("leavepictureinpicture",this.onDisablePIP),e.addEventListener("webkitpresentationmodechanged",this.onPresentationModeChange),e.addEventListener("canplay",this.onReady),t&&e.setAttribute("playsinline","")}removeListeners(e){e.removeEventListener("canplay",this.onReady),e.removeEventListener("play",this.onPlay),e.removeEventListener("waiting",this.onBuffer),e.removeEventListener("playing",this.onBufferEnd),e.removeEventListener("pause",this.onPause),e.removeEventListener("seeked",this.onSeek),e.removeEventListener("ended",this.onEnded),e.removeEventListener("error",this.onError),e.removeEventListener("ratechange",this.onPlayBackRateChange),e.removeEventListener("enterpictureinpicture",this.onEnablePIP),e.removeEventListener("leavepictureinpicture",this.onDisablePIP),e.removeEventListener("canplay",this.onReady)}async load(e){var t;const{onError:n,config:r}=this.props;if(!(null==(t=globalThis.customElements)?void 0:t.get("mux-player")))try{const e="https://cdn.jsdelivr.net/npm/@mux/mux-player@VERSION/dist/mux-player.mjs".replace("VERSION",r.version);await import(`${e}`),this.props.onLoaded()}catch(i){n(i)}const[,s]=e.match(y.MATCH_URL_MUX);this.player.playbackId=s}play(){const e=this.player.play();e&&e.catch(this.props.onError)}pause(){this.player.pause()}stop(){this.player.playbackId=null}seekTo(e,t=!0){this.player.currentTime=e,t||this.pause()}setVolume(e){this.player.volume=e}enablePIP(){this.player.requestPictureInPicture&&document.pictureInPictureElement!==this.player&&this.player.requestPictureInPicture()}disablePIP(){document.exitPictureInPicture&&document.pictureInPictureElement===this.player&&document.exitPictureInPicture()}setPlaybackRate(e){try{this.player.playbackRate=e}catch(t){this.props.onError(t)}}getDuration(){if(!this.player)return null;const{duration:e,seekable:t}=this.player;return e===1/0&&t.length>0?t.end(t.length-1):e}getCurrentTime(){return this.player?this.player.currentTime:null}getSecondsLoaded(){if(!this.player)return null;const{buffered:e}=this.player;if(0===e.length)return 0;const t=e.end(e.length-1),n=this.getDuration();return t>n?n:t}getPlaybackId(e){const[,t]=e.match(y.MATCH_URL_MUX);return t}render(){const{url:e,playing:t,loop:n,controls:r,muted:s,config:i,width:a,height:o}=this.props,l={width:"auto"===a?a:"100%",height:"auto"===o?o:"100%"};return!1===r&&(l["--controls"]="none"),c.default.createElement("mux-player",{ref:this.ref,"playback-id":this.getPlaybackId(e),style:l,preload:"auto",autoPlay:t||void 0,muted:s?"":void 0,loop:n?"":void 0,...i.attributes})}}u(m,"displayName","Mux"),u(m,"canPlay",y.canPlay.mux)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerPreview.76287d19.js b/pr-preview/pr-1594/assets/js/reactPlayerPreview.76287d19.js deleted file mode 100644 index d6e581f869..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerPreview.76287d19.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[6353],{66734:(e,t,r)=>{var a,i=Object.create,n=Object.defineProperty,l=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,o=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,c=(e,t,r,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of s(t))p.call(e,i)||i===r||n(e,i,{get:()=>t[i],enumerable:!(a=l(t,i))||a.enumerable});return e},u=(e,t,r)=>(((e,t,r)=>{t in e?n(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r})(e,"symbol"!=typeof t?t+"":t,r),r),d={};((e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})})(d,{default:()=>g}),e.exports=(a=d,c(n({},"__esModule",{value:!0}),a));var h=((e,t,r)=>(r=null!=e?i(o(e)):{},c(!t&&e&&e.__esModule?r:n(r,"default",{value:e,enumerable:!0}),e)))(r(96540));const m="64px",b={};class g extends h.Component{constructor(){super(...arguments),u(this,"mounted",!1),u(this,"state",{image:null}),u(this,"handleKeyPress",(e=>{"Enter"!==e.key&&" "!==e.key||this.props.onClick()}))}componentDidMount(){this.mounted=!0,this.fetchImage(this.props)}componentDidUpdate(e){const{url:t,light:r}=this.props;e.url===t&&e.light===r||this.fetchImage(this.props)}componentWillUnmount(){this.mounted=!1}fetchImage({url:e,light:t,oEmbedUrl:r}){if(!h.default.isValidElement(t))if("string"!=typeof t){if(!b[e])return this.setState({image:null}),window.fetch(r.replace("{url}",e)).then((e=>e.json())).then((t=>{if(t.thumbnail_url&&this.mounted){const r=t.thumbnail_url.replace("height=100","height=480").replace("-d_295x166","-d_640");this.setState({image:r}),b[e]=r}}));this.setState({image:b[e]})}else this.setState({image:t})}render(){const{light:e,onClick:t,playIcon:r,previewTabIndex:a,previewAriaLabel:i}=this.props,{image:n}=this.state,l=h.default.isValidElement(e),s={display:"flex",alignItems:"center",justifyContent:"center"},o={preview:{width:"100%",height:"100%",backgroundImage:n&&!l?`url(${n})`:void 0,backgroundSize:"cover",backgroundPosition:"center",cursor:"pointer",...s},shadow:{background:"radial-gradient(rgb(0, 0, 0, 0.3), rgba(0, 0, 0, 0) 60%)",borderRadius:m,width:m,height:m,position:l?"absolute":void 0,...s},playIcon:{borderStyle:"solid",borderWidth:"16px 0 16px 26px",borderColor:"transparent transparent transparent white",marginLeft:"7px"}},p=h.default.createElement("div",{style:o.shadow,className:"react-player__shadow"},h.default.createElement("div",{style:o.playIcon,className:"react-player__play-icon"}));return h.default.createElement("div",{style:o.preview,className:"react-player__preview",onClick:t,tabIndex:a,onKeyPress:this.handleKeyPress,...i?{"aria-label":i}:{}},l?e:null,r||p)}}}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerPreview.f0416885.js b/pr-preview/pr-1594/assets/js/reactPlayerPreview.f0416885.js deleted file mode 100644 index 3d5fcffe04..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerPreview.f0416885.js +++ /dev/null @@ -1,150 +0,0 @@ -exports.id = 353; -exports.ids = [353]; -exports.modules = { - -/***/ 66734: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Preview_exports = {}; -__export(Preview_exports, { - default: () => Preview -}); -module.exports = __toCommonJS(Preview_exports); -var import_react = __toESM(__webpack_require__(96540)); -const ICON_SIZE = "64px"; -const cache = {}; -class Preview extends import_react.Component { - constructor() { - super(...arguments); - __publicField(this, "mounted", false); - __publicField(this, "state", { - image: null - }); - __publicField(this, "handleKeyPress", (e) => { - if (e.key === "Enter" || e.key === " ") { - this.props.onClick(); - } - }); - } - componentDidMount() { - this.mounted = true; - this.fetchImage(this.props); - } - componentDidUpdate(prevProps) { - const { url, light } = this.props; - if (prevProps.url !== url || prevProps.light !== light) { - this.fetchImage(this.props); - } - } - componentWillUnmount() { - this.mounted = false; - } - fetchImage({ url, light, oEmbedUrl }) { - if (import_react.default.isValidElement(light)) { - return; - } - if (typeof light === "string") { - this.setState({ image: light }); - return; - } - if (cache[url]) { - this.setState({ image: cache[url] }); - return; - } - this.setState({ image: null }); - return window.fetch(oEmbedUrl.replace("{url}", url)).then((response) => response.json()).then((data) => { - if (data.thumbnail_url && this.mounted) { - const image = data.thumbnail_url.replace("height=100", "height=480").replace("-d_295x166", "-d_640"); - this.setState({ image }); - cache[url] = image; - } - }); - } - render() { - const { light, onClick, playIcon, previewTabIndex, previewAriaLabel } = this.props; - const { image } = this.state; - const isElement = import_react.default.isValidElement(light); - const flexCenter = { - display: "flex", - alignItems: "center", - justifyContent: "center" - }; - const styles = { - preview: { - width: "100%", - height: "100%", - backgroundImage: image && !isElement ? `url(${image})` : void 0, - backgroundSize: "cover", - backgroundPosition: "center", - cursor: "pointer", - ...flexCenter - }, - shadow: { - background: "radial-gradient(rgb(0, 0, 0, 0.3), rgba(0, 0, 0, 0) 60%)", - borderRadius: ICON_SIZE, - width: ICON_SIZE, - height: ICON_SIZE, - position: isElement ? "absolute" : void 0, - ...flexCenter - }, - playIcon: { - borderStyle: "solid", - borderWidth: "16px 0 16px 26px", - borderColor: "transparent transparent transparent white", - marginLeft: "7px" - } - }; - const defaultPlayIcon = /* @__PURE__ */ import_react.default.createElement("div", { style: styles.shadow, className: "react-player__shadow" }, /* @__PURE__ */ import_react.default.createElement("div", { style: styles.playIcon, className: "react-player__play-icon" })); - return /* @__PURE__ */ import_react.default.createElement( - "div", - { - style: styles.preview, - className: "react-player__preview", - onClick, - tabIndex: previewTabIndex, - onKeyPress: this.handleKeyPress, - ...previewAriaLabel ? { "aria-label": previewAriaLabel } : {} - }, - isElement ? light : null, - playIcon || defaultPlayIcon - ); - } -} - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerSoundCloud.b8f7e226.js b/pr-preview/pr-1594/assets/js/reactPlayerSoundCloud.b8f7e226.js deleted file mode 100644 index 5d4b9e846c..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerSoundCloud.b8f7e226.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[9979],{93127:(e,t,r)=>{var s,o=Object.create,i=Object.defineProperty,l=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,n=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,p=(e,t,r,s)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of a(t))u.call(e,o)||o===r||i(e,o,{get:()=>t[o],enumerable:!(s=l(t,o))||s.enumerable});return e},h=(e,t,r)=>(((e,t,r)=>{t in e?i(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r})(e,"symbol"!=typeof t?t+"":t,r),r),d={};((e,t)=>{for(var r in t)i(e,r,{get:t[r],enumerable:!0})})(d,{default:()=>f}),e.exports=(s=d,p(i({},"__esModule",{value:!0}),s));var c=((e,t,r)=>(r=null!=e?o(n(e)):{},p(!t&&e&&e.__esModule?r:i(r,"default",{value:e,enumerable:!0}),e)))(r(96540)),y=r(75635),m=r(50327);class f extends c.Component{constructor(){super(...arguments),h(this,"callPlayer",y.callPlayer),h(this,"duration",null),h(this,"currentTime",null),h(this,"fractionLoaded",null),h(this,"mute",(()=>{this.setVolume(0)})),h(this,"unmute",(()=>{null!==this.props.volume&&this.setVolume(this.props.volume)})),h(this,"ref",(e=>{this.iframe=e}))}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e,t){(0,y.getSDK)("https://w.soundcloud.com/player/api.js","SC").then((r=>{if(!this.iframe)return;const{PLAY:s,PLAY_PROGRESS:o,PAUSE:i,FINISH:l,ERROR:a}=r.Widget.Events;t||(this.player=r.Widget(this.iframe),this.player.bind(s,this.props.onPlay),this.player.bind(i,(()=>{this.duration-this.currentTime<.05||this.props.onPause()})),this.player.bind(o,(e=>{this.currentTime=e.currentPosition/1e3,this.fractionLoaded=e.loadedProgress})),this.player.bind(l,(()=>this.props.onEnded())),this.player.bind(a,(e=>this.props.onError(e)))),this.player.load(e,{...this.props.config.options,callback:()=>{this.player.getDuration((e=>{this.duration=e/1e3,this.props.onReady()}))}})}))}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){}seekTo(e,t=!0){this.callPlayer("seekTo",1e3*e),t||this.pause()}setVolume(e){this.callPlayer("setVolume",100*e)}getDuration(){return this.duration}getCurrentTime(){return this.currentTime}getSecondsLoaded(){return this.fractionLoaded*this.duration}render(){const{display:e}=this.props,t={width:"100%",height:"100%",display:e};return c.default.createElement("iframe",{ref:this.ref,src:`https://w.soundcloud.com/player/?url=${encodeURIComponent(this.props.url)}`,style:t,frameBorder:0,allow:"autoplay"})}}h(f,"displayName","SoundCloud"),h(f,"canPlay",m.canPlay.soundcloud),h(f,"loopOnEnded",!0)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerSoundCloud.e82f1e0e.js b/pr-preview/pr-1594/assets/js/reactPlayerSoundCloud.e82f1e0e.js deleted file mode 100644 index 63033086f7..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerSoundCloud.e82f1e0e.js +++ /dev/null @@ -1,158 +0,0 @@ -exports.id = 979; -exports.ids = [979]; -exports.modules = { - -/***/ 93127: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var SoundCloud_exports = {}; -__export(SoundCloud_exports, { - default: () => SoundCloud -}); -module.exports = __toCommonJS(SoundCloud_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_utils = __webpack_require__(75635); -var import_patterns = __webpack_require__(50327); -const SDK_URL = "https://w.soundcloud.com/player/api.js"; -const SDK_GLOBAL = "SC"; -class SoundCloud extends import_react.Component { - constructor() { - super(...arguments); - __publicField(this, "callPlayer", import_utils.callPlayer); - __publicField(this, "duration", null); - __publicField(this, "currentTime", null); - __publicField(this, "fractionLoaded", null); - __publicField(this, "mute", () => { - this.setVolume(0); - }); - __publicField(this, "unmute", () => { - if (this.props.volume !== null) { - this.setVolume(this.props.volume); - } - }); - __publicField(this, "ref", (iframe) => { - this.iframe = iframe; - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - } - load(url, isReady) { - (0, import_utils.getSDK)(SDK_URL, SDK_GLOBAL).then((SC) => { - if (!this.iframe) - return; - const { PLAY, PLAY_PROGRESS, PAUSE, FINISH, ERROR } = SC.Widget.Events; - if (!isReady) { - this.player = SC.Widget(this.iframe); - this.player.bind(PLAY, this.props.onPlay); - this.player.bind(PAUSE, () => { - const remaining = this.duration - this.currentTime; - if (remaining < 0.05) { - return; - } - this.props.onPause(); - }); - this.player.bind(PLAY_PROGRESS, (e) => { - this.currentTime = e.currentPosition / 1e3; - this.fractionLoaded = e.loadedProgress; - }); - this.player.bind(FINISH, () => this.props.onEnded()); - this.player.bind(ERROR, (e) => this.props.onError(e)); - } - this.player.load(url, { - ...this.props.config.options, - callback: () => { - this.player.getDuration((duration) => { - this.duration = duration / 1e3; - this.props.onReady(); - }); - } - }); - }); - } - play() { - this.callPlayer("play"); - } - pause() { - this.callPlayer("pause"); - } - stop() { - } - seekTo(seconds, keepPlaying = true) { - this.callPlayer("seekTo", seconds * 1e3); - if (!keepPlaying) { - this.pause(); - } - } - setVolume(fraction) { - this.callPlayer("setVolume", fraction * 100); - } - getDuration() { - return this.duration; - } - getCurrentTime() { - return this.currentTime; - } - getSecondsLoaded() { - return this.fractionLoaded * this.duration; - } - render() { - const { display } = this.props; - const style = { - width: "100%", - height: "100%", - display - }; - return /* @__PURE__ */ import_react.default.createElement( - "iframe", - { - ref: this.ref, - src: `https://w.soundcloud.com/player/?url=${encodeURIComponent(this.props.url)}`, - style, - frameBorder: 0, - allow: "autoplay" - } - ); - } -} -__publicField(SoundCloud, "displayName", "SoundCloud"); -__publicField(SoundCloud, "canPlay", import_patterns.canPlay.soundcloud); -__publicField(SoundCloud, "loopOnEnded", true); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerStreamable.28f63750.js b/pr-preview/pr-1594/assets/js/reactPlayerStreamable.28f63750.js deleted file mode 100644 index 482c077eba..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerStreamable.28f63750.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[7627],{9643:(e,t,r)=>{var s,a=Object.create,o=Object.defineProperty,l=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,i=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,u=(e,t,r,s)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of n(t))p.call(e,a)||a===r||o(e,a,{get:()=>t[a],enumerable:!(s=l(t,a))||s.enumerable});return e},h=(e,t,r)=>(((e,t,r)=>{t in e?o(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r})(e,"symbol"!=typeof t?t+"":t,r),r),c={};((e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})})(c,{default:()=>f}),e.exports=(s=c,u(o({},"__esModule",{value:!0}),s));var d=((e,t,r)=>(r=null!=e?a(i(e)):{},u(!t&&e&&e.__esModule?r:o(r,"default",{value:e,enumerable:!0}),e)))(r(96540)),y=r(75635),m=r(50327);class f extends d.Component{constructor(){super(...arguments),h(this,"callPlayer",y.callPlayer),h(this,"duration",null),h(this,"currentTime",null),h(this,"secondsLoaded",null),h(this,"mute",(()=>{this.callPlayer("mute")})),h(this,"unmute",(()=>{this.callPlayer("unmute")})),h(this,"ref",(e=>{this.iframe=e}))}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e){(0,y.getSDK)("https://cdn.embed.ly/player-0.1.0.min.js","playerjs").then((e=>{this.iframe&&(this.player=new e.Player(this.iframe),this.player.setLoop(this.props.loop),this.player.on("ready",this.props.onReady),this.player.on("play",this.props.onPlay),this.player.on("pause",this.props.onPause),this.player.on("seeked",this.props.onSeek),this.player.on("ended",this.props.onEnded),this.player.on("error",this.props.onError),this.player.on("timeupdate",(({duration:e,seconds:t})=>{this.duration=e,this.currentTime=t})),this.player.on("buffered",(({percent:e})=>{this.duration&&(this.secondsLoaded=this.duration*e)})),this.props.muted&&this.player.mute())}),this.props.onError)}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){}seekTo(e,t=!0){this.callPlayer("setCurrentTime",e),t||this.pause()}setVolume(e){this.callPlayer("setVolume",100*e)}setLoop(e){this.callPlayer("setLoop",e)}getDuration(){return this.duration}getCurrentTime(){return this.currentTime}getSecondsLoaded(){return this.secondsLoaded}render(){const e=this.props.url.match(m.MATCH_URL_STREAMABLE)[1];return d.default.createElement("iframe",{ref:this.ref,src:`https://streamable.com/o/${e}`,frameBorder:"0",scrolling:"no",style:{width:"100%",height:"100%"},allow:"encrypted-media; autoplay; fullscreen;"})}}h(f,"displayName","Streamable"),h(f,"canPlay",m.canPlay.streamable)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerStreamable.41e1bb3f.js b/pr-preview/pr-1594/assets/js/reactPlayerStreamable.41e1bb3f.js deleted file mode 100644 index 7dea6af45e..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerStreamable.41e1bb3f.js +++ /dev/null @@ -1,151 +0,0 @@ -exports.id = 627; -exports.ids = [627]; -exports.modules = { - -/***/ 9643: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Streamable_exports = {}; -__export(Streamable_exports, { - default: () => Streamable -}); -module.exports = __toCommonJS(Streamable_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_utils = __webpack_require__(75635); -var import_patterns = __webpack_require__(50327); -const SDK_URL = "https://cdn.embed.ly/player-0.1.0.min.js"; -const SDK_GLOBAL = "playerjs"; -class Streamable extends import_react.Component { - constructor() { - super(...arguments); - __publicField(this, "callPlayer", import_utils.callPlayer); - __publicField(this, "duration", null); - __publicField(this, "currentTime", null); - __publicField(this, "secondsLoaded", null); - __publicField(this, "mute", () => { - this.callPlayer("mute"); - }); - __publicField(this, "unmute", () => { - this.callPlayer("unmute"); - }); - __publicField(this, "ref", (iframe) => { - this.iframe = iframe; - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - } - load(url) { - (0, import_utils.getSDK)(SDK_URL, SDK_GLOBAL).then((playerjs) => { - if (!this.iframe) - return; - this.player = new playerjs.Player(this.iframe); - this.player.setLoop(this.props.loop); - this.player.on("ready", this.props.onReady); - this.player.on("play", this.props.onPlay); - this.player.on("pause", this.props.onPause); - this.player.on("seeked", this.props.onSeek); - this.player.on("ended", this.props.onEnded); - this.player.on("error", this.props.onError); - this.player.on("timeupdate", ({ duration, seconds }) => { - this.duration = duration; - this.currentTime = seconds; - }); - this.player.on("buffered", ({ percent }) => { - if (this.duration) { - this.secondsLoaded = this.duration * percent; - } - }); - if (this.props.muted) { - this.player.mute(); - } - }, this.props.onError); - } - play() { - this.callPlayer("play"); - } - pause() { - this.callPlayer("pause"); - } - stop() { - } - seekTo(seconds, keepPlaying = true) { - this.callPlayer("setCurrentTime", seconds); - if (!keepPlaying) { - this.pause(); - } - } - setVolume(fraction) { - this.callPlayer("setVolume", fraction * 100); - } - setLoop(loop) { - this.callPlayer("setLoop", loop); - } - getDuration() { - return this.duration; - } - getCurrentTime() { - return this.currentTime; - } - getSecondsLoaded() { - return this.secondsLoaded; - } - render() { - const id = this.props.url.match(import_patterns.MATCH_URL_STREAMABLE)[1]; - const style = { - width: "100%", - height: "100%" - }; - return /* @__PURE__ */ import_react.default.createElement( - "iframe", - { - ref: this.ref, - src: `https://streamable.com/o/${id}`, - frameBorder: "0", - scrolling: "no", - style, - allow: "encrypted-media; autoplay; fullscreen;" - } - ); - } -} -__publicField(Streamable, "displayName", "Streamable"); -__publicField(Streamable, "canPlay", import_patterns.canPlay.streamable); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerTwitch.72c73ef7.js b/pr-preview/pr-1594/assets/js/reactPlayerTwitch.72c73ef7.js deleted file mode 100644 index a6216b40b8..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerTwitch.72c73ef7.js +++ /dev/null @@ -1,145 +0,0 @@ -exports.id = 42; -exports.ids = [42]; -exports.modules = { - -/***/ 21400: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Twitch_exports = {}; -__export(Twitch_exports, { - default: () => Twitch -}); -module.exports = __toCommonJS(Twitch_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_utils = __webpack_require__(75635); -var import_patterns = __webpack_require__(50327); -const SDK_URL = "https://player.twitch.tv/js/embed/v1.js"; -const SDK_GLOBAL = "Twitch"; -const PLAYER_ID_PREFIX = "twitch-player-"; -class Twitch extends import_react.Component { - constructor() { - super(...arguments); - __publicField(this, "callPlayer", import_utils.callPlayer); - __publicField(this, "playerID", this.props.config.playerId || `${PLAYER_ID_PREFIX}${(0, import_utils.randomString)()}`); - __publicField(this, "mute", () => { - this.callPlayer("setMuted", true); - }); - __publicField(this, "unmute", () => { - this.callPlayer("setMuted", false); - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - } - load(url, isReady) { - const { playsinline, onError, config, controls } = this.props; - const isChannel = import_patterns.MATCH_URL_TWITCH_CHANNEL.test(url); - const id = isChannel ? url.match(import_patterns.MATCH_URL_TWITCH_CHANNEL)[1] : url.match(import_patterns.MATCH_URL_TWITCH_VIDEO)[1]; - if (isReady) { - if (isChannel) { - this.player.setChannel(id); - } else { - this.player.setVideo("v" + id); - } - return; - } - (0, import_utils.getSDK)(SDK_URL, SDK_GLOBAL).then((Twitch2) => { - this.player = new Twitch2.Player(this.playerID, { - video: isChannel ? "" : id, - channel: isChannel ? id : "", - height: "100%", - width: "100%", - playsinline, - autoplay: this.props.playing, - muted: this.props.muted, - // https://github.com/CookPete/react-player/issues/733#issuecomment-549085859 - controls: isChannel ? true : controls, - time: (0, import_utils.parseStartTime)(url), - ...config.options - }); - const { READY, PLAYING, PAUSE, ENDED, ONLINE, OFFLINE, SEEK } = Twitch2.Player; - this.player.addEventListener(READY, this.props.onReady); - this.player.addEventListener(PLAYING, this.props.onPlay); - this.player.addEventListener(PAUSE, this.props.onPause); - this.player.addEventListener(ENDED, this.props.onEnded); - this.player.addEventListener(SEEK, this.props.onSeek); - this.player.addEventListener(ONLINE, this.props.onLoaded); - this.player.addEventListener(OFFLINE, this.props.onLoaded); - }, onError); - } - play() { - this.callPlayer("play"); - } - pause() { - this.callPlayer("pause"); - } - stop() { - this.callPlayer("pause"); - } - seekTo(seconds, keepPlaying = true) { - this.callPlayer("seek", seconds); - if (!keepPlaying) { - this.pause(); - } - } - setVolume(fraction) { - this.callPlayer("setVolume", fraction); - } - getDuration() { - return this.callPlayer("getDuration"); - } - getCurrentTime() { - return this.callPlayer("getCurrentTime"); - } - getSecondsLoaded() { - return null; - } - render() { - const style = { - width: "100%", - height: "100%" - }; - return /* @__PURE__ */ import_react.default.createElement("div", { style, id: this.playerID }); - } -} -__publicField(Twitch, "displayName", "Twitch"); -__publicField(Twitch, "canPlay", import_patterns.canPlay.twitch); -__publicField(Twitch, "loopOnEnded", true); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerTwitch.e499980d.js b/pr-preview/pr-1594/assets/js/reactPlayerTwitch.e499980d.js deleted file mode 100644 index 5f975c9966..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerTwitch.e499980d.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[2042],{21400:(e,t,r)=>{var s,a=Object.create,l=Object.defineProperty,n=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,o=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,h=(e,t,r,s)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of i(t))p.call(e,a)||a===r||l(e,a,{get:()=>t[a],enumerable:!(s=n(t,a))||s.enumerable});return e},y=(e,t,r)=>(((e,t,r)=>{t in e?l(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r})(e,"symbol"!=typeof t?t+"":t,r),r),d={};((e,t)=>{for(var r in t)l(e,r,{get:t[r],enumerable:!0})})(d,{default:()=>P}),e.exports=(s=d,h(l({},"__esModule",{value:!0}),s));var u=((e,t,r)=>(r=null!=e?a(o(e)):{},h(!t&&e&&e.__esModule?r:l(r,"default",{value:e,enumerable:!0}),e)))(r(96540)),c=r(75635),m=r(50327);class P extends u.Component{constructor(){super(...arguments),y(this,"callPlayer",c.callPlayer),y(this,"playerID",this.props.config.playerId||`twitch-player-${(0,c.randomString)()}`),y(this,"mute",(()=>{this.callPlayer("setMuted",!0)})),y(this,"unmute",(()=>{this.callPlayer("setMuted",!1)}))}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e,t){const{playsinline:r,onError:s,config:a,controls:l}=this.props,n=m.MATCH_URL_TWITCH_CHANNEL.test(e),i=n?e.match(m.MATCH_URL_TWITCH_CHANNEL)[1]:e.match(m.MATCH_URL_TWITCH_VIDEO)[1];t?n?this.player.setChannel(i):this.player.setVideo("v"+i):(0,c.getSDK)("https://player.twitch.tv/js/embed/v1.js","Twitch").then((t=>{this.player=new t.Player(this.playerID,{video:n?"":i,channel:n?i:"",height:"100%",width:"100%",playsinline:r,autoplay:this.props.playing,muted:this.props.muted,controls:!!n||l,time:(0,c.parseStartTime)(e),...a.options});const{READY:s,PLAYING:o,PAUSE:p,ENDED:h,ONLINE:y,OFFLINE:d,SEEK:u}=t.Player;this.player.addEventListener(s,this.props.onReady),this.player.addEventListener(o,this.props.onPlay),this.player.addEventListener(p,this.props.onPause),this.player.addEventListener(h,this.props.onEnded),this.player.addEventListener(u,this.props.onSeek),this.player.addEventListener(y,this.props.onLoaded),this.player.addEventListener(d,this.props.onLoaded)}),s)}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){this.callPlayer("pause")}seekTo(e,t=!0){this.callPlayer("seek",e),t||this.pause()}setVolume(e){this.callPlayer("setVolume",e)}getDuration(){return this.callPlayer("getDuration")}getCurrentTime(){return this.callPlayer("getCurrentTime")}getSecondsLoaded(){return null}render(){return u.default.createElement("div",{style:{width:"100%",height:"100%"},id:this.playerID})}}y(P,"displayName","Twitch"),y(P,"canPlay",m.canPlay.twitch),y(P,"loopOnEnded",!0)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerVidyard.0018beb1.js b/pr-preview/pr-1594/assets/js/reactPlayerVidyard.0018beb1.js deleted file mode 100644 index 67a0bd7403..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerVidyard.0018beb1.js +++ /dev/null @@ -1,149 +0,0 @@ -exports.id = 392; -exports.ids = [392]; -exports.modules = { - -/***/ 53552: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Vidyard_exports = {}; -__export(Vidyard_exports, { - default: () => Vidyard -}); -module.exports = __toCommonJS(Vidyard_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_utils = __webpack_require__(75635); -var import_patterns = __webpack_require__(50327); -const SDK_URL = "https://play.vidyard.com/embed/v4.js"; -const SDK_GLOBAL = "VidyardV4"; -const SDK_GLOBAL_READY = "onVidyardAPI"; -class Vidyard extends import_react.Component { - constructor() { - super(...arguments); - __publicField(this, "callPlayer", import_utils.callPlayer); - __publicField(this, "mute", () => { - this.setVolume(0); - }); - __publicField(this, "unmute", () => { - if (this.props.volume !== null) { - this.setVolume(this.props.volume); - } - }); - __publicField(this, "ref", (container) => { - this.container = container; - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - } - load(url) { - const { playing, config, onError, onDuration } = this.props; - const id = url && url.match(import_patterns.MATCH_URL_VIDYARD)[1]; - if (this.player) { - this.stop(); - } - (0, import_utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then((Vidyard2) => { - if (!this.container) - return; - Vidyard2.api.addReadyListener((data, player) => { - if (this.player) { - return; - } - this.player = player; - this.player.on("ready", this.props.onReady); - this.player.on("play", this.props.onPlay); - this.player.on("pause", this.props.onPause); - this.player.on("seek", this.props.onSeek); - this.player.on("playerComplete", this.props.onEnded); - }, id); - Vidyard2.api.renderPlayer({ - uuid: id, - container: this.container, - autoplay: playing ? 1 : 0, - ...config.options - }); - Vidyard2.api.getPlayerMetadata(id).then((meta) => { - this.duration = meta.length_in_seconds; - onDuration(meta.length_in_seconds); - }); - }, onError); - } - play() { - this.callPlayer("play"); - } - pause() { - this.callPlayer("pause"); - } - stop() { - window.VidyardV4.api.destroyPlayer(this.player); - } - seekTo(amount, keepPlaying = true) { - this.callPlayer("seek", amount); - if (!keepPlaying) { - this.pause(); - } - } - setVolume(fraction) { - this.callPlayer("setVolume", fraction); - } - setPlaybackRate(rate) { - this.callPlayer("setPlaybackSpeed", rate); - } - getDuration() { - return this.duration; - } - getCurrentTime() { - return this.callPlayer("currentTime"); - } - getSecondsLoaded() { - return null; - } - render() { - const { display } = this.props; - const style = { - width: "100%", - height: "100%", - display - }; - return /* @__PURE__ */ import_react.default.createElement("div", { style }, /* @__PURE__ */ import_react.default.createElement("div", { ref: this.ref })); - } -} -__publicField(Vidyard, "displayName", "Vidyard"); -__publicField(Vidyard, "canPlay", import_patterns.canPlay.vidyard); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerVidyard.86fd8a80.js b/pr-preview/pr-1594/assets/js/reactPlayerVidyard.86fd8a80.js deleted file mode 100644 index cefc649668..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerVidyard.86fd8a80.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[3392],{53552:(e,t,a)=>{var r,s=Object.create,l=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,n=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,y=(e,t,a,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of i(t))p.call(e,s)||s===a||l(e,s,{get:()=>t[s],enumerable:!(r=o(t,s))||r.enumerable});return e},u=(e,t,a)=>(((e,t,a)=>{t in e?l(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a})(e,"symbol"!=typeof t?t+"":t,a),a),h={};((e,t)=>{for(var a in t)l(e,a,{get:t[a],enumerable:!0})})(h,{default:()=>P}),e.exports=(r=h,y(l({},"__esModule",{value:!0}),r));var d=((e,t,a)=>(a=null!=e?s(n(e)):{},y(!t&&e&&e.__esModule?a:l(a,"default",{value:e,enumerable:!0}),e)))(a(96540)),c=a(75635),m=a(50327);class P extends d.Component{constructor(){super(...arguments),u(this,"callPlayer",c.callPlayer),u(this,"mute",(()=>{this.setVolume(0)})),u(this,"unmute",(()=>{null!==this.props.volume&&this.setVolume(this.props.volume)})),u(this,"ref",(e=>{this.container=e}))}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e){const{playing:t,config:a,onError:r,onDuration:s}=this.props,l=e&&e.match(m.MATCH_URL_VIDYARD)[1];this.player&&this.stop(),(0,c.getSDK)("https://play.vidyard.com/embed/v4.js","VidyardV4","onVidyardAPI").then((e=>{this.container&&(e.api.addReadyListener(((e,t)=>{this.player||(this.player=t,this.player.on("ready",this.props.onReady),this.player.on("play",this.props.onPlay),this.player.on("pause",this.props.onPause),this.player.on("seek",this.props.onSeek),this.player.on("playerComplete",this.props.onEnded))}),l),e.api.renderPlayer({uuid:l,container:this.container,autoplay:t?1:0,...a.options}),e.api.getPlayerMetadata(l).then((e=>{this.duration=e.length_in_seconds,s(e.length_in_seconds)})))}),r)}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){window.VidyardV4.api.destroyPlayer(this.player)}seekTo(e,t=!0){this.callPlayer("seek",e),t||this.pause()}setVolume(e){this.callPlayer("setVolume",e)}setPlaybackRate(e){this.callPlayer("setPlaybackSpeed",e)}getDuration(){return this.duration}getCurrentTime(){return this.callPlayer("currentTime")}getSecondsLoaded(){return null}render(){const{display:e}=this.props,t={width:"100%",height:"100%",display:e};return d.default.createElement("div",{style:t},d.default.createElement("div",{ref:this.ref}))}}u(P,"displayName","Vidyard"),u(P,"canPlay",m.canPlay.vidyard)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerVimeo.0d5ed4f1.js b/pr-preview/pr-1594/assets/js/reactPlayerVimeo.0d5ed4f1.js deleted file mode 100644 index 47df21a3e0..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerVimeo.0d5ed4f1.js +++ /dev/null @@ -1,190 +0,0 @@ -exports.id = 173; -exports.ids = [173]; -exports.modules = { - -/***/ 91423: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Vimeo_exports = {}; -__export(Vimeo_exports, { - default: () => Vimeo -}); -module.exports = __toCommonJS(Vimeo_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_utils = __webpack_require__(75635); -var import_patterns = __webpack_require__(50327); -const SDK_URL = "https://player.vimeo.com/api/player.js"; -const SDK_GLOBAL = "Vimeo"; -const cleanUrl = (url) => { - return url.replace("/manage/videos", ""); -}; -class Vimeo extends import_react.Component { - constructor() { - super(...arguments); - // Prevent checking isLoading when URL changes - __publicField(this, "callPlayer", import_utils.callPlayer); - __publicField(this, "duration", null); - __publicField(this, "currentTime", null); - __publicField(this, "secondsLoaded", null); - __publicField(this, "mute", () => { - this.setMuted(true); - }); - __publicField(this, "unmute", () => { - this.setMuted(false); - }); - __publicField(this, "ref", (container) => { - this.container = container; - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - } - load(url) { - this.duration = null; - (0, import_utils.getSDK)(SDK_URL, SDK_GLOBAL).then((Vimeo2) => { - if (!this.container) - return; - const { playerOptions, title } = this.props.config; - this.player = new Vimeo2.Player(this.container, { - url: cleanUrl(url), - autoplay: this.props.playing, - muted: this.props.muted, - loop: this.props.loop, - playsinline: this.props.playsinline, - controls: this.props.controls, - ...playerOptions - }); - this.player.ready().then(() => { - const iframe = this.container.querySelector("iframe"); - iframe.style.width = "100%"; - iframe.style.height = "100%"; - if (title) { - iframe.title = title; - } - }).catch(this.props.onError); - this.player.on("loaded", () => { - this.props.onReady(); - this.refreshDuration(); - }); - this.player.on("play", () => { - this.props.onPlay(); - this.refreshDuration(); - }); - this.player.on("pause", this.props.onPause); - this.player.on("seeked", (e) => this.props.onSeek(e.seconds)); - this.player.on("ended", this.props.onEnded); - this.player.on("error", this.props.onError); - this.player.on("timeupdate", ({ seconds }) => { - this.currentTime = seconds; - }); - this.player.on("progress", ({ seconds }) => { - this.secondsLoaded = seconds; - }); - this.player.on("bufferstart", this.props.onBuffer); - this.player.on("bufferend", this.props.onBufferEnd); - this.player.on("playbackratechange", (e) => this.props.onPlaybackRateChange(e.playbackRate)); - }, this.props.onError); - } - refreshDuration() { - this.player.getDuration().then((duration) => { - this.duration = duration; - }); - } - play() { - const promise = this.callPlayer("play"); - if (promise) { - promise.catch(this.props.onError); - } - } - pause() { - this.callPlayer("pause"); - } - stop() { - this.callPlayer("unload"); - } - seekTo(seconds, keepPlaying = true) { - this.callPlayer("setCurrentTime", seconds); - if (!keepPlaying) { - this.pause(); - } - } - setVolume(fraction) { - this.callPlayer("setVolume", fraction); - } - setMuted(muted) { - this.callPlayer("setMuted", muted); - } - setLoop(loop) { - this.callPlayer("setLoop", loop); - } - setPlaybackRate(rate) { - this.callPlayer("setPlaybackRate", rate); - } - getDuration() { - return this.duration; - } - getCurrentTime() { - return this.currentTime; - } - getSecondsLoaded() { - return this.secondsLoaded; - } - render() { - const { display } = this.props; - const style = { - width: "100%", - height: "100%", - overflow: "hidden", - display - }; - return /* @__PURE__ */ import_react.default.createElement( - "div", - { - key: this.props.url, - ref: this.ref, - style - } - ); - } -} -__publicField(Vimeo, "displayName", "Vimeo"); -__publicField(Vimeo, "canPlay", import_patterns.canPlay.vimeo); -__publicField(Vimeo, "forceLoad", true); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerVimeo.554e1970.js b/pr-preview/pr-1594/assets/js/reactPlayerVimeo.554e1970.js deleted file mode 100644 index a64359f333..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerVimeo.554e1970.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[6173],{91423:(e,t,s)=>{var r,o=Object.create,a=Object.defineProperty,i=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,l=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,h=(e,t,s,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of n(t))p.call(e,o)||o===s||a(e,o,{get:()=>t[o],enumerable:!(r=i(t,o))||r.enumerable});return e},u=(e,t,s)=>(((e,t,s)=>{t in e?a(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s})(e,"symbol"!=typeof t?t+"":t,s),s),c={};((e,t)=>{for(var s in t)a(e,s,{get:t[s],enumerable:!0})})(c,{default:()=>b}),e.exports=(r=c,h(a({},"__esModule",{value:!0}),r));var y=((e,t,s)=>(s=null!=e?o(l(e)):{},h(!t&&e&&e.__esModule?s:a(s,"default",{value:e,enumerable:!0}),e)))(s(96540)),d=s(75635),f=s(50327);const m=e=>e.replace("/manage/videos","");class b extends y.Component{constructor(){super(...arguments),u(this,"callPlayer",d.callPlayer),u(this,"duration",null),u(this,"currentTime",null),u(this,"secondsLoaded",null),u(this,"mute",(()=>{this.setMuted(!0)})),u(this,"unmute",(()=>{this.setMuted(!1)})),u(this,"ref",(e=>{this.container=e}))}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e){this.duration=null,(0,d.getSDK)("https://player.vimeo.com/api/player.js","Vimeo").then((t=>{if(!this.container)return;const{playerOptions:s,title:r}=this.props.config;this.player=new t.Player(this.container,{url:m(e),autoplay:this.props.playing,muted:this.props.muted,loop:this.props.loop,playsinline:this.props.playsinline,controls:this.props.controls,...s}),this.player.ready().then((()=>{const e=this.container.querySelector("iframe");e.style.width="100%",e.style.height="100%",r&&(e.title=r)})).catch(this.props.onError),this.player.on("loaded",(()=>{this.props.onReady(),this.refreshDuration()})),this.player.on("play",(()=>{this.props.onPlay(),this.refreshDuration()})),this.player.on("pause",this.props.onPause),this.player.on("seeked",(e=>this.props.onSeek(e.seconds))),this.player.on("ended",this.props.onEnded),this.player.on("error",this.props.onError),this.player.on("timeupdate",(({seconds:e})=>{this.currentTime=e})),this.player.on("progress",(({seconds:e})=>{this.secondsLoaded=e})),this.player.on("bufferstart",this.props.onBuffer),this.player.on("bufferend",this.props.onBufferEnd),this.player.on("playbackratechange",(e=>this.props.onPlaybackRateChange(e.playbackRate)))}),this.props.onError)}refreshDuration(){this.player.getDuration().then((e=>{this.duration=e}))}play(){const e=this.callPlayer("play");e&&e.catch(this.props.onError)}pause(){this.callPlayer("pause")}stop(){this.callPlayer("unload")}seekTo(e,t=!0){this.callPlayer("setCurrentTime",e),t||this.pause()}setVolume(e){this.callPlayer("setVolume",e)}setMuted(e){this.callPlayer("setMuted",e)}setLoop(e){this.callPlayer("setLoop",e)}setPlaybackRate(e){this.callPlayer("setPlaybackRate",e)}getDuration(){return this.duration}getCurrentTime(){return this.currentTime}getSecondsLoaded(){return this.secondsLoaded}render(){const{display:e}=this.props,t={width:"100%",height:"100%",overflow:"hidden",display:e};return y.default.createElement("div",{key:this.props.url,ref:this.ref,style:t})}}u(b,"displayName","Vimeo"),u(b,"canPlay",f.canPlay.vimeo),u(b,"forceLoad",!0)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerWistia.3c90c4da.js b/pr-preview/pr-1594/assets/js/reactPlayerWistia.3c90c4da.js deleted file mode 100644 index a778a46b36..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerWistia.3c90c4da.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[9340],{23330:(e,t,a)=>{var s,n=Object.create,l=Object.defineProperty,i=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,h=(e,t,a,s)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of o(t))p.call(e,n)||n===a||l(e,n,{get:()=>t[n],enumerable:!(s=i(t,n))||s.enumerable});return e},u=(e,t,a)=>(((e,t,a)=>{t in e?l(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a})(e,"symbol"!=typeof t?t+"":t,a),a),y={};((e,t)=>{for(var a in t)l(e,a,{get:t[a],enumerable:!0})})(y,{default:()=>P}),e.exports=(s=y,h(l({},"__esModule",{value:!0}),s));var c=((e,t,a)=>(a=null!=e?n(r(e)):{},h(!t&&e&&e.__esModule?a:l(a,"default",{value:e,enumerable:!0}),e)))(a(96540)),d=a(75635),b=a(50327);class P extends c.Component{constructor(){super(...arguments),u(this,"callPlayer",d.callPlayer),u(this,"playerID",this.props.config.playerId||`wistia-player-${(0,d.randomString)()}`),u(this,"onPlay",((...e)=>this.props.onPlay(...e))),u(this,"onPause",((...e)=>this.props.onPause(...e))),u(this,"onSeek",((...e)=>this.props.onSeek(...e))),u(this,"onEnded",((...e)=>this.props.onEnded(...e))),u(this,"onPlaybackRateChange",((...e)=>this.props.onPlaybackRateChange(...e))),u(this,"mute",(()=>{this.callPlayer("mute")})),u(this,"unmute",(()=>{this.callPlayer("unmute")}))}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e){const{playing:t,muted:a,controls:s,onReady:n,config:l,onError:i}=this.props;(0,d.getSDK)("https://fast.wistia.com/assets/external/E-v1.js","Wistia").then((e=>{l.customControls&&l.customControls.forEach((t=>e.defineControl(t))),window._wq=window._wq||[],window._wq.push({id:this.playerID,options:{autoPlay:t,silentAutoPlay:"allow",muted:a,controlsVisibleOnLoad:s,fullscreenButton:s,playbar:s,playbackRateControl:s,qualityControl:s,volumeControl:s,settingsControl:s,smallPlayButton:s,...l.options},onReady:e=>{this.player=e,this.unbind(),this.player.bind("play",this.onPlay),this.player.bind("pause",this.onPause),this.player.bind("seek",this.onSeek),this.player.bind("end",this.onEnded),this.player.bind("playbackratechange",this.onPlaybackRateChange),n()}})}),i)}unbind(){this.player.unbind("play",this.onPlay),this.player.unbind("pause",this.onPause),this.player.unbind("seek",this.onSeek),this.player.unbind("end",this.onEnded),this.player.unbind("playbackratechange",this.onPlaybackRateChange)}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){this.unbind(),this.callPlayer("remove")}seekTo(e,t=!0){this.callPlayer("time",e),t||this.pause()}setVolume(e){this.callPlayer("volume",e)}setPlaybackRate(e){this.callPlayer("playbackRate",e)}getDuration(){return this.callPlayer("duration")}getCurrentTime(){return this.callPlayer("time")}getSecondsLoaded(){return null}render(){const{url:e}=this.props,t=e&&e.match(b.MATCH_URL_WISTIA)[1],a=`wistia_embed wistia_async_${t}`;return c.default.createElement("div",{id:this.playerID,key:t,className:a,style:{width:"100%",height:"100%"}})}}u(P,"displayName","Wistia"),u(P,"canPlay",b.canPlay.wistia),u(P,"loopOnEnded",!0)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerWistia.3eab0b00.js b/pr-preview/pr-1594/assets/js/reactPlayerWistia.3eab0b00.js deleted file mode 100644 index 04c7393a10..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerWistia.3eab0b00.js +++ /dev/null @@ -1,165 +0,0 @@ -exports.id = 340; -exports.ids = [340]; -exports.modules = { - -/***/ 23330: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Wistia_exports = {}; -__export(Wistia_exports, { - default: () => Wistia -}); -module.exports = __toCommonJS(Wistia_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_utils = __webpack_require__(75635); -var import_patterns = __webpack_require__(50327); -const SDK_URL = "https://fast.wistia.com/assets/external/E-v1.js"; -const SDK_GLOBAL = "Wistia"; -const PLAYER_ID_PREFIX = "wistia-player-"; -class Wistia extends import_react.Component { - constructor() { - super(...arguments); - __publicField(this, "callPlayer", import_utils.callPlayer); - __publicField(this, "playerID", this.props.config.playerId || `${PLAYER_ID_PREFIX}${(0, import_utils.randomString)()}`); - // Proxy methods to prevent listener leaks - __publicField(this, "onPlay", (...args) => this.props.onPlay(...args)); - __publicField(this, "onPause", (...args) => this.props.onPause(...args)); - __publicField(this, "onSeek", (...args) => this.props.onSeek(...args)); - __publicField(this, "onEnded", (...args) => this.props.onEnded(...args)); - __publicField(this, "onPlaybackRateChange", (...args) => this.props.onPlaybackRateChange(...args)); - __publicField(this, "mute", () => { - this.callPlayer("mute"); - }); - __publicField(this, "unmute", () => { - this.callPlayer("unmute"); - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - } - load(url) { - const { playing, muted, controls, onReady, config, onError } = this.props; - (0, import_utils.getSDK)(SDK_URL, SDK_GLOBAL).then((Wistia2) => { - if (config.customControls) { - config.customControls.forEach((control) => Wistia2.defineControl(control)); - } - window._wq = window._wq || []; - window._wq.push({ - id: this.playerID, - options: { - autoPlay: playing, - silentAutoPlay: "allow", - muted, - controlsVisibleOnLoad: controls, - fullscreenButton: controls, - playbar: controls, - playbackRateControl: controls, - qualityControl: controls, - volumeControl: controls, - settingsControl: controls, - smallPlayButton: controls, - ...config.options - }, - onReady: (player) => { - this.player = player; - this.unbind(); - this.player.bind("play", this.onPlay); - this.player.bind("pause", this.onPause); - this.player.bind("seek", this.onSeek); - this.player.bind("end", this.onEnded); - this.player.bind("playbackratechange", this.onPlaybackRateChange); - onReady(); - } - }); - }, onError); - } - unbind() { - this.player.unbind("play", this.onPlay); - this.player.unbind("pause", this.onPause); - this.player.unbind("seek", this.onSeek); - this.player.unbind("end", this.onEnded); - this.player.unbind("playbackratechange", this.onPlaybackRateChange); - } - play() { - this.callPlayer("play"); - } - pause() { - this.callPlayer("pause"); - } - stop() { - this.unbind(); - this.callPlayer("remove"); - } - seekTo(seconds, keepPlaying = true) { - this.callPlayer("time", seconds); - if (!keepPlaying) { - this.pause(); - } - } - setVolume(fraction) { - this.callPlayer("volume", fraction); - } - setPlaybackRate(rate) { - this.callPlayer("playbackRate", rate); - } - getDuration() { - return this.callPlayer("duration"); - } - getCurrentTime() { - return this.callPlayer("time"); - } - getSecondsLoaded() { - return null; - } - render() { - const { url } = this.props; - const videoID = url && url.match(import_patterns.MATCH_URL_WISTIA)[1]; - const className = `wistia_embed wistia_async_${videoID}`; - const style = { - width: "100%", - height: "100%" - }; - return /* @__PURE__ */ import_react.default.createElement("div", { id: this.playerID, key: videoID, className, style }); - } -} -__publicField(Wistia, "displayName", "Wistia"); -__publicField(Wistia, "canPlay", import_patterns.canPlay.wistia); -__publicField(Wistia, "loopOnEnded", true); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerYouTube.2978d928.js b/pr-preview/pr-1594/assets/js/reactPlayerYouTube.2978d928.js deleted file mode 100644 index 10c4910b01..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerYouTube.2978d928.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[8446],{82910:(e,t,a)=>{var s,o=Object.create,l=Object.defineProperty,r=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,i=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,y=(e,t,a,s)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of n(t))p.call(e,o)||o===a||l(e,o,{get:()=>t[o],enumerable:!(s=r(t,o))||s.enumerable});return e},c=(e,t,a)=>(((e,t,a)=>{t in e?l(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a})(e,"symbol"!=typeof t?t+"":t,a),a),u={};((e,t)=>{for(var a in t)l(e,a,{get:t[a],enumerable:!0})})(u,{default:()=>b}),e.exports=(s=u,y(l({},"__esModule",{value:!0}),s));var h=((e,t,a)=>(a=null!=e?o(i(e)):{},y(!t&&e&&e.__esModule?a:l(a,"default",{value:e,enumerable:!0}),e)))(a(96540)),d=a(75635),P=a(50327);const m=/[?&](?:list|channel)=([a-zA-Z0-9_-]+)/,f=/user\/([a-zA-Z0-9_-]+)\/?/,g=/youtube-nocookie\.com/;class b extends h.Component{constructor(){super(...arguments),c(this,"callPlayer",d.callPlayer),c(this,"parsePlaylist",(e=>{if(e instanceof Array)return{listType:"playlist",playlist:e.map(this.getID).join(",")};if(m.test(e)){const[,t]=e.match(m);return{listType:"playlist",list:t.replace(/^UC/,"UU")}}if(f.test(e)){const[,t]=e.match(f);return{listType:"user_uploads",list:t}}return{}})),c(this,"onStateChange",(e=>{const{data:t}=e,{onPlay:a,onPause:s,onBuffer:o,onBufferEnd:l,onEnded:r,onReady:n,loop:i,config:{playerVars:p,onUnstarted:y}}=this.props,{UNSTARTED:c,PLAYING:u,PAUSED:h,BUFFERING:d,ENDED:P,CUED:m}=window.YT.PlayerState;if(t===c&&y(),t===u&&(a(),l()),t===h&&s(),t===d&&o(),t===P){const e=!!this.callPlayer("getPlaylist");i&&!e&&(p.start?this.seekTo(p.start):this.play()),r()}t===m&&n()})),c(this,"mute",(()=>{this.callPlayer("mute")})),c(this,"unmute",(()=>{this.callPlayer("unMute")})),c(this,"ref",(e=>{this.container=e}))}componentDidMount(){this.props.onMount&&this.props.onMount(this)}getID(e){return!e||e instanceof Array||m.test(e)?null:e.match(P.MATCH_URL_YOUTUBE)[1]}load(e,t){const{playing:a,muted:s,playsinline:o,controls:l,loop:r,config:n,onError:i}=this.props,{playerVars:p,embedOptions:y}=n,c=this.getID(e);if(t)return m.test(e)||f.test(e)||e instanceof Array?void this.player.loadPlaylist(this.parsePlaylist(e)):void this.player.cueVideoById({videoId:c,startSeconds:(0,d.parseStartTime)(e)||p.start,endSeconds:(0,d.parseEndTime)(e)||p.end});(0,d.getSDK)("https://www.youtube.com/iframe_api","YT","onYouTubeIframeAPIReady",(e=>e.loaded)).then((t=>{this.container&&(this.player=new t.Player(this.container,{width:"100%",height:"100%",videoId:c,playerVars:{autoplay:a?1:0,mute:s?1:0,controls:l?1:0,start:(0,d.parseStartTime)(e),end:(0,d.parseEndTime)(e),origin:window.location.origin,playsinline:o?1:0,...this.parsePlaylist(e),...p},events:{onReady:()=>{r&&this.player.setLoop(!0),this.props.onReady()},onPlaybackRateChange:e=>this.props.onPlaybackRateChange(e.data),onPlaybackQualityChange:e=>this.props.onPlaybackQualityChange(e),onStateChange:this.onStateChange,onError:e=>i(e.data)},host:g.test(e)?"https://www.youtube-nocookie.com":void 0,...y}))}),i),y.events&&console.warn("Using `embedOptions.events` will likely break things. Use ReactPlayer\u2019s callback props instead, eg onReady, onPlay, onPause")}play(){this.callPlayer("playVideo")}pause(){this.callPlayer("pauseVideo")}stop(){document.body.contains(this.callPlayer("getIframe"))&&this.callPlayer("stopVideo")}seekTo(e,t=!1){this.callPlayer("seekTo",e),t||this.props.playing||this.pause()}setVolume(e){this.callPlayer("setVolume",100*e)}setPlaybackRate(e){this.callPlayer("setPlaybackRate",e)}setLoop(e){this.callPlayer("setLoop",e)}getDuration(){return this.callPlayer("getDuration")}getCurrentTime(){return this.callPlayer("getCurrentTime")}getSecondsLoaded(){return this.callPlayer("getVideoLoadedFraction")*this.getDuration()}render(){const{display:e}=this.props,t={width:"100%",height:"100%",display:e};return h.default.createElement("div",{style:t},h.default.createElement("div",{ref:this.ref}))}}c(b,"displayName","YouTube"),c(b,"canPlay",P.canPlay.youtube)}}]); \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/reactPlayerYouTube.606b56bc.js b/pr-preview/pr-1594/assets/js/reactPlayerYouTube.606b56bc.js deleted file mode 100644 index 73e8315c1a..0000000000 --- a/pr-preview/pr-1594/assets/js/reactPlayerYouTube.606b56bc.js +++ /dev/null @@ -1,235 +0,0 @@ -exports.id = 446; -exports.ids = [446]; -exports.modules = { - -/***/ 82910: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var YouTube_exports = {}; -__export(YouTube_exports, { - default: () => YouTube -}); -module.exports = __toCommonJS(YouTube_exports); -var import_react = __toESM(__webpack_require__(96540)); -var import_utils = __webpack_require__(75635); -var import_patterns = __webpack_require__(50327); -const SDK_URL = "https://www.youtube.com/iframe_api"; -const SDK_GLOBAL = "YT"; -const SDK_GLOBAL_READY = "onYouTubeIframeAPIReady"; -const MATCH_PLAYLIST = /[?&](?:list|channel)=([a-zA-Z0-9_-]+)/; -const MATCH_USER_UPLOADS = /user\/([a-zA-Z0-9_-]+)\/?/; -const MATCH_NOCOOKIE = /youtube-nocookie\.com/; -const NOCOOKIE_HOST = "https://www.youtube-nocookie.com"; -class YouTube extends import_react.Component { - constructor() { - super(...arguments); - __publicField(this, "callPlayer", import_utils.callPlayer); - __publicField(this, "parsePlaylist", (url) => { - if (url instanceof Array) { - return { - listType: "playlist", - playlist: url.map(this.getID).join(",") - }; - } - if (MATCH_PLAYLIST.test(url)) { - const [, playlistId] = url.match(MATCH_PLAYLIST); - return { - listType: "playlist", - list: playlistId.replace(/^UC/, "UU") - }; - } - if (MATCH_USER_UPLOADS.test(url)) { - const [, username] = url.match(MATCH_USER_UPLOADS); - return { - listType: "user_uploads", - list: username - }; - } - return {}; - }); - __publicField(this, "onStateChange", (event) => { - const { data } = event; - const { onPlay, onPause, onBuffer, onBufferEnd, onEnded, onReady, loop, config: { playerVars, onUnstarted } } = this.props; - const { UNSTARTED, PLAYING, PAUSED, BUFFERING, ENDED, CUED } = window[SDK_GLOBAL].PlayerState; - if (data === UNSTARTED) - onUnstarted(); - if (data === PLAYING) { - onPlay(); - onBufferEnd(); - } - if (data === PAUSED) - onPause(); - if (data === BUFFERING) - onBuffer(); - if (data === ENDED) { - const isPlaylist = !!this.callPlayer("getPlaylist"); - if (loop && !isPlaylist) { - if (playerVars.start) { - this.seekTo(playerVars.start); - } else { - this.play(); - } - } - onEnded(); - } - if (data === CUED) - onReady(); - }); - __publicField(this, "mute", () => { - this.callPlayer("mute"); - }); - __publicField(this, "unmute", () => { - this.callPlayer("unMute"); - }); - __publicField(this, "ref", (container) => { - this.container = container; - }); - } - componentDidMount() { - this.props.onMount && this.props.onMount(this); - } - getID(url) { - if (!url || url instanceof Array || MATCH_PLAYLIST.test(url)) { - return null; - } - return url.match(import_patterns.MATCH_URL_YOUTUBE)[1]; - } - load(url, isReady) { - const { playing, muted, playsinline, controls, loop, config, onError } = this.props; - const { playerVars, embedOptions } = config; - const id = this.getID(url); - if (isReady) { - if (MATCH_PLAYLIST.test(url) || MATCH_USER_UPLOADS.test(url) || url instanceof Array) { - this.player.loadPlaylist(this.parsePlaylist(url)); - return; - } - this.player.cueVideoById({ - videoId: id, - startSeconds: (0, import_utils.parseStartTime)(url) || playerVars.start, - endSeconds: (0, import_utils.parseEndTime)(url) || playerVars.end - }); - return; - } - (0, import_utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, (YT) => YT.loaded).then((YT) => { - if (!this.container) - return; - this.player = new YT.Player(this.container, { - width: "100%", - height: "100%", - videoId: id, - playerVars: { - autoplay: playing ? 1 : 0, - mute: muted ? 1 : 0, - controls: controls ? 1 : 0, - start: (0, import_utils.parseStartTime)(url), - end: (0, import_utils.parseEndTime)(url), - origin: window.location.origin, - playsinline: playsinline ? 1 : 0, - ...this.parsePlaylist(url), - ...playerVars - }, - events: { - onReady: () => { - if (loop) { - this.player.setLoop(true); - } - this.props.onReady(); - }, - onPlaybackRateChange: (event) => this.props.onPlaybackRateChange(event.data), - onPlaybackQualityChange: (event) => this.props.onPlaybackQualityChange(event), - onStateChange: this.onStateChange, - onError: (event) => onError(event.data) - }, - host: MATCH_NOCOOKIE.test(url) ? NOCOOKIE_HOST : void 0, - ...embedOptions - }); - }, onError); - if (embedOptions.events) { - console.warn("Using `embedOptions.events` will likely break things. Use ReactPlayer\u2019s callback props instead, eg onReady, onPlay, onPause"); - } - } - play() { - this.callPlayer("playVideo"); - } - pause() { - this.callPlayer("pauseVideo"); - } - stop() { - if (!document.body.contains(this.callPlayer("getIframe"))) - return; - this.callPlayer("stopVideo"); - } - seekTo(amount, keepPlaying = false) { - this.callPlayer("seekTo", amount); - if (!keepPlaying && !this.props.playing) { - this.pause(); - } - } - setVolume(fraction) { - this.callPlayer("setVolume", fraction * 100); - } - setPlaybackRate(rate) { - this.callPlayer("setPlaybackRate", rate); - } - setLoop(loop) { - this.callPlayer("setLoop", loop); - } - getDuration() { - return this.callPlayer("getDuration"); - } - getCurrentTime() { - return this.callPlayer("getCurrentTime"); - } - getSecondsLoaded() { - return this.callPlayer("getVideoLoadedFraction") * this.getDuration(); - } - render() { - const { display } = this.props; - const style = { - width: "100%", - height: "100%", - display - }; - return /* @__PURE__ */ import_react.default.createElement("div", { style }, /* @__PURE__ */ import_react.default.createElement("div", { ref: this.ref })); - } -} -__publicField(YouTube, "displayName", "YouTube"); -__publicField(YouTube, "canPlay", import_patterns.canPlay.youtube); - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/pr-preview/pr-1594/assets/js/runtime~main.95e4f360.js b/pr-preview/pr-1594/assets/js/runtime~main.95e4f360.js deleted file mode 100644 index fd47dc0fef..0000000000 --- a/pr-preview/pr-1594/assets/js/runtime~main.95e4f360.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,a,c,d,f,b={},r={};function t(e){var a=r[e];if(void 0!==a)return a.exports;var c=r[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,t),c.loaded=!0,c.exports}t.m=b,t.c=r,e=[],t.O=(a,c,d,f)=>{if(!c){var b=1/0;for(i=0;i<e.length;i++){c=e[i][0],d=e[i][1],f=e[i][2];for(var r=!0,o=0;o<c.length;o++)(!1&f||b>=f)&&Object.keys(t.O).every((e=>t.O[e](c[o])))?c.splice(o--,1):(r=!1,f<b&&(b=f));if(r){e.splice(i--,1);var l=d();void 0!==l&&(a=l)}}return a}f=f||0;for(var i=e.length;i>0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[c,d,f]},t.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,t.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var f=Object.create(null);t.r(f);var b={};a=a||[null,c({}),c([]),c(c)];for(var r=2&d&&e;"object"==typeof r&&!~a.indexOf(r);r=c(r))Object.getOwnPropertyNames(r).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,t.d(f,b),f},t.d=(e,a)=>{for(var c in a)t.o(a,c)&&!t.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce(((a,c)=>(t.f[c](e,a),a)),[])),t.u=e=>"assets/js/"+({18:"bfc09eea",44:"9e25251f",50:"8431750a",132:"da6eb168",185:"986b9943",228:"25491a6a",233:"9d57d0a6",337:"547dc70b",354:"61038276",368:"25a17fcd",383:"38a516ae",503:"c13ec0a6",515:"63b37bf5",658:"0d762a34",698:"de285be4",722:"1ca4a2d7",745:"5bb0dc82",866:"540a1167",903:"22ed3411",925:"5d9eac72",929:"0fda5f57",993:"d8b5b6da",1021:"42e3560a",1033:"cad0251b",1036:"07003cee",1150:"e1d33ea7",1158:"5ba559d4",1181:"31570a90",1235:"a7456010",1346:"ecf790cf",1419:"0359e208",1462:"d7fdcae3",1482:"abc1ea5e",1557:"e5e05fea",1586:"645c44d3",1751:"b1a65bd3",1757:"c521cd6b",1771:"9fce37be",1815:"5b71c68f",1851:"a9379b01",1859:"e858514f",1874:"37788a03",1980:"f65e0d6c",2042:"reactPlayerTwitch",2061:"d14d20ef",2135:"7fd3d7a0",2172:"65a8f618",2216:"1875cf18",2333:"7c555ba4",2340:"906e1e9f",2369:"bf636eff",2444:"eae8ea84",2472:"eec1121c",2505:"482d6521",2571:"db0f1c3a",2677:"4f1ddcc5",2723:"reactPlayerMux",2750:"c042bbf4",2902:"76bcc235",2912:"4f08651a",3060:"4dbcc71c",3073:"08cd1031",3097:"e6e0301f",3101:"9b515b04",3109:"d6385b0d",3161:"014c8d62",3214:"45462f11",3239:"28a8491c",3344:"a06d9ffe",3349:"68cc1c24",3353:"858820da",3355:"b0d7f3f2",3380:"1d129a7b",3392:"reactPlayerVidyard",3406:"88fa6390",3516:"12ca7dc6",3624:"8e876c80",3640:"6d42ac36",3655:"971e8ccd",3663:"5769edfb",3740:"caea5a36",3756:"770e6532",3765:"161e6f0a",3798:"8dce94c3",3876:"977d5535",3973:"e8453306",4018:"41d993a6",4109:"ac961e5b",4134:"1bc1529f",4147:"4d317276",4169:"cfe90ca7",4226:"3bada45e",4333:"4acaa9c4",4430:"f47a7ed3",4480:"1714037f",4509:"bfec4f44",4578:"44b1e2f5",4663:"cf864737",4742:"6bdc832c",4753:"7cfb1d0c",4754:"a3c49fd9",4787:"3c6ed59c",4865:"487bf429",4876:"e459d51d",4882:"405f2d9a",4886:"952b3fdc",4920:"e76aecec",5031:"02ad5b1c",5039:"061adc4c",5109:"6e2958ef",5225:"4da0167e",5248:"cce87b67",5266:"a0e6a329",5306:"9e64d05b",5352:"189edb0d",5364:"f59a0ebe",5423:"e3318347",5623:"b74f0b56",5719:"6e773b1a",5727:"2fea2d40",5742:"aba21aa0",5795:"0c8d310c",5828:"8a611437",5857:"ea7b1b11",5924:"a995ee96",5934:"3c711bdb",5970:"46cf1090",6040:"4648c831",6061:"1f391b9e",6079:"477598dd",6097:"fc44458b",6113:"54a88ed7",6173:"reactPlayerVimeo",6218:"c66ae53f",6221:"04c11cf4",6313:"104ea86a",6328:"reactPlayerDailyMotion",6341:"0ea4d505",6353:"reactPlayerPreview",6361:"c5a10934",6386:"375ba1d8",6459:"6459b84b",6463:"reactPlayerKaltura",6519:"432d7d66",6523:"964d596a",6656:"fca4800a",6730:"9e8f5f1c",6744:"6b49cdad",6792:"02365777",6797:"c287b26d",6802:"01f1a992",6803:"4a1a3e03",6839:"b5dab0d4",6846:"db2b4d90",6887:"reactPlayerFacebook",6914:"57aea1fc",6917:"0d3223a3",6995:"d8b2c51c",7057:"9fc067fe",7083:"4bccbb93",7098:"a7bd4aaa",7132:"be02d3e2",7196:"1434155d",7229:"5c7e141f",7233:"e8851b38",7272:"f5f0d846",7308:"0ad621fa",7376:"a42036e6",7438:"68a929a9",7445:"cc0c6179",7458:"reactPlayerFilePlayer",7496:"b7a68670",7544:"9d18d13c",7570:"reactPlayerMixcloud",7627:"reactPlayerStreamable",7713:"58d4a820",7745:"6181342c",7746:"08b3569b",7749:"44386d1b",7843:"116b31b8",7972:"4434a8b7",7993:"0bcbca69",8036:"2e3ffc99",8112:"b05d4510",8113:"4e1df6a3",8117:"b32e8f59",8152:"8114665f",8164:"08e5c7dc",8207:"fe12321f",8264:"49e00cf0",8362:"4d4f51e2",8401:"17896441",8419:"e33c9cd6",8446:"reactPlayerYouTube",8667:"c11c77a9",8707:"dbd1cd20",8904:"ce5ba636",9017:"6f6bf398",9023:"deef465e",9048:"a94703ab",9057:"c10f38bc",9065:"397210d6",9090:"905c32de",9156:"d273ee52",9187:"ebce6379",9193:"f09a1148",9225:"a24b80f3",9340:"reactPlayerWistia",9481:"2e426791",9515:"7cda2da6",9595:"7718f40c",9647:"5e95c892",9726:"ca7ab025",9729:"38fdfb5b",9777:"b0d5790a",9779:"3c6e6542",9789:"de7a358c",9856:"08c8edc4",9881:"c1e7e5a7",9917:"845ce2f5",9922:"921f956e",9938:"1cde271f",9979:"reactPlayerSoundCloud"}[e]||e)+"."+{18:"ce8f0d11",44:"8354a6a9",50:"e60b9ff0",132:"ca96c985",185:"fb5e319e",228:"1255d965",233:"6861fb38",337:"f76ed865",354:"4935de1d",368:"f1fd2bbd",383:"4ac9c90c",503:"a1c4a196",515:"cf27ab4f",658:"feefc22e",698:"307d9b0b",722:"9a1ce243",745:"2ac019c2",866:"3d448be8",903:"65f32600",925:"17517544",929:"aa85507c",993:"fb36935e",1021:"c10d6b08",1033:"5b4c1d93",1036:"b4545e62",1150:"754a454b",1158:"e84db72e",1169:"640da5fa",1176:"6957abeb",1181:"2a22eeaa",1235:"732b7642",1245:"c5d67bd8",1331:"ec0a48c7",1346:"29e2deb3",1398:"40a441e2",1419:"9032423a",1462:"6b5923a2",1482:"22be9f20",1557:"88348c3f",1586:"db494a12",1751:"d2b80b1e",1757:"3bb8b1c4",1771:"7fefd728",1815:"ee8c2b84",1851:"b5f39f28",1859:"dcda684d",1874:"8ee42d0e",1946:"abc6ec22",1980:"e05fb411",2042:"e499980d",2061:"fbb1f607",2130:"c89b510d",2135:"638976a6",2172:"a33655b0",2216:"3bf76a87",2237:"baec02cf",2333:"b049aafe",2340:"8bf790cc",2369:"50dbd921",2376:"9cdcd224",2444:"583bf550",2453:"2ecc4026",2472:"a7bb96af",2505:"2cfa7538",2548:"3eaa016b",2571:"7197a5a3",2677:"d704e6be",2723:"93d8b537",2750:"a74c0bcc",2843:"6beaccba",2902:"e9a356aa",2912:"6c382f9c",2925:"5a7d8b64",2983:"236363d9",3060:"aeeb3f61",3068:"5e00bfe3",3073:"e390c4de",3097:"1895224e",3101:"fad6a0cb",3109:"7ea3f246",3161:"cdd16169",3214:"9c7c6de5",3239:"13ec90df",3344:"c7666626",3349:"1d1d9631",3353:"470c2343",3355:"9d1cd86c",3380:"62510428",3392:"86fd8a80",3406:"cb1c4c18",3516:"d05b6203",3624:"c8f53ef4",3626:"1692bd06",3640:"5676c2f3",3655:"1f633718",3658:"0c8f3c0c",3663:"b3730ae4",3706:"4e7ba6f2",3740:"df5bb5b9",3756:"6787aeaf",3765:"3eb5081c",3798:"e9ffddf1",3876:"4f5651d7",3973:"8955c2e4",4018:"6eb7edc2",4109:"234f3378",4132:"adc4137b",4134:"f5dc7d77",4147:"f8901f15",4162:"aab6f778",4169:"b62377d3",4226:"c4a4a13c",4333:"8e18b133",4430:"5af1643e",4480:"090798cc",4509:"274315dd",4578:"3eccbccd",4663:"d68d694e",4741:"460f6e7f",4742:"c5fbbab6",4753:"f28a5984",4754:"88a15c8a",4787:"234f75b7",4865:"ec0ba307",4876:"17071a91",4882:"b8852ea3",4886:"bf8bb02d",4920:"5fe24bf1",4943:"ce789d06",5031:"d0c45e12",5039:"1893b077",5109:"adf03a04",5225:"b6e7eb4e",5248:"6c56c4f9",5266:"782c5d27",5306:"e2db52a4",5352:"5a86180d",5364:"dd03be98",5423:"4be28ac9",5623:"f52da84e",5719:"8f6d9140",5727:"5d40aa26",5742:"421a8980",5795:"ef9f80a5",5828:"2791fab7",5857:"fbf626bf",5924:"690695c5",5934:"54e664af",5970:"eef6ac79",6040:"3dbeef75",6061:"19b65b27",6079:"947758f8",6097:"b9f3d72a",6113:"1baf8def",6173:"554e1970",6218:"5559e12c",6221:"2c889b63",6313:"f1e9ae96",6328:"70afc90f",6341:"941429b1",6353:"76287d19",6361:"815f7080",6386:"fab37c6c",6420:"ed961081",6459:"62c1dfdf",6463:"337ee336",6519:"1e8d1f70",6523:"f473761b",6656:"1513ebb2",6730:"a4c5d2e7",6744:"22931ba6",6788:"0068c12f",6792:"75cbb3fb",6797:"f37a2575",6802:"d58243ab",6803:"96287a86",6839:"1e790139",6846:"8dfa8c0e",6887:"c760d132",6914:"95ca8c03",6917:"65fc4528",6995:"7d4e0add",7057:"251a75bc",7083:"23c8fa60",7098:"154be41b",7132:"d0ed9e3a",7196:"858c890c",7229:"4ab4be0d",7233:"2dd6bd79",7272:"43fdf6c7",7308:"7adcf55b",7376:"6b75a9cc",7426:"ae5481b0",7438:"0d90be75",7445:"b428285d",7458:"d5d95a3c",7496:"8abf42ed",7544:"41265962",7570:"433550ac",7627:"28f63750",7713:"4aebbe0f",7745:"6b6f6a4d",7746:"177052bf",7749:"cfce857c",7843:"1da8035b",7972:"1fe1ee28",7993:"ed09f615",8036:"3c49228a",8055:"435b03d2",8112:"a0d5be06",8113:"b2cf9f16",8117:"dc986ba8",8152:"1e39622d",8164:"2226f998",8207:"dca86e54",8264:"cdedc3b2",8337:"d2982b80",8362:"da6d3a2e",8401:"adc411f8",8419:"b3bccb4b",8446:"2978d928",8478:"e385cd80",8577:"769b0788",8591:"54a6cd4d",8635:"2c31446f",8667:"a2b9dcc2",8707:"28d3f6e1",8810:"e107d159",8869:"7e05992f",8904:"9f197015",9017:"23c7fab7",9023:"8270f0d6",9048:"226454ec",9057:"a5ee4330",9065:"7624d70a",9090:"4949c5ef",9156:"32015f22",9184:"0cf47614",9187:"9b37e36b",9193:"cc1f16d4",9225:"ff51b134",9278:"bc46237a",9309:"04c2ac1e",9340:"3c90c4da",9481:"7b73cb21",9515:"e581f4a5",9595:"fd132592",9610:"9966723f",9647:"af57b059",9689:"0064c4fa",9726:"09643496",9729:"40732ef4",9777:"65438780",9779:"17a2c4da",9789:"dd4ca8f3",9856:"34819e19",9881:"cf9e77e7",9917:"a0d8342a",9922:"eed2c065",9938:"b1370c1a",9979:"b8f7e226"}[e]+".js",t.miniCssF=e=>{},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},f="site:",t.l=(e,a,c,b)=>{if(d[e])d[e].push(a);else{var r,o;if(void 0!==c)for(var l=document.getElementsByTagName("script"),i=0;i<l.length;i++){var n=l[i];if(n.getAttribute("src")==e||n.getAttribute("data-webpack")==f+c){r=n;break}}r||(o=!0,(r=document.createElement("script")).charset="utf-8",r.timeout=120,t.nc&&r.setAttribute("nonce",t.nc),r.setAttribute("data-webpack",f+c),r.src=e),d[e]=[a];var u=(a,c)=>{r.onerror=r.onload=null,clearTimeout(s);var f=d[e];if(delete d[e],r.parentNode&&r.parentNode.removeChild(r),f&&f.forEach((e=>e(c))),a)return a(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=u.bind(null,r.onerror),r.onload=u.bind(null,r.onload),o&&document.head.appendChild(r)}},t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.p="/pr-preview/pr-1594/",t.gca=function(e){return e={17896441:"8401",61038276:"354",bfc09eea:"18","9e25251f":"44","8431750a":"50",da6eb168:"132","986b9943":"185","25491a6a":"228","9d57d0a6":"233","547dc70b":"337","25a17fcd":"368","38a516ae":"383",c13ec0a6:"503","63b37bf5":"515","0d762a34":"658",de285be4:"698","1ca4a2d7":"722","5bb0dc82":"745","540a1167":"866","22ed3411":"903","5d9eac72":"925","0fda5f57":"929",d8b5b6da:"993","42e3560a":"1021",cad0251b:"1033","07003cee":"1036",e1d33ea7:"1150","5ba559d4":"1158","31570a90":"1181",a7456010:"1235",ecf790cf:"1346","0359e208":"1419",d7fdcae3:"1462",abc1ea5e:"1482",e5e05fea:"1557","645c44d3":"1586",b1a65bd3:"1751",c521cd6b:"1757","9fce37be":"1771","5b71c68f":"1815",a9379b01:"1851",e858514f:"1859","37788a03":"1874",f65e0d6c:"1980",reactPlayerTwitch:"2042",d14d20ef:"2061","7fd3d7a0":"2135","65a8f618":"2172","1875cf18":"2216","7c555ba4":"2333","906e1e9f":"2340",bf636eff:"2369",eae8ea84:"2444",eec1121c:"2472","482d6521":"2505",db0f1c3a:"2571","4f1ddcc5":"2677",reactPlayerMux:"2723",c042bbf4:"2750","76bcc235":"2902","4f08651a":"2912","4dbcc71c":"3060","08cd1031":"3073",e6e0301f:"3097","9b515b04":"3101",d6385b0d:"3109","014c8d62":"3161","45462f11":"3214","28a8491c":"3239",a06d9ffe:"3344","68cc1c24":"3349","858820da":"3353",b0d7f3f2:"3355","1d129a7b":"3380",reactPlayerVidyard:"3392","88fa6390":"3406","12ca7dc6":"3516","8e876c80":"3624","6d42ac36":"3640","971e8ccd":"3655","5769edfb":"3663",caea5a36:"3740","770e6532":"3756","161e6f0a":"3765","8dce94c3":"3798","977d5535":"3876",e8453306:"3973","41d993a6":"4018",ac961e5b:"4109","1bc1529f":"4134","4d317276":"4147",cfe90ca7:"4169","3bada45e":"4226","4acaa9c4":"4333",f47a7ed3:"4430","1714037f":"4480",bfec4f44:"4509","44b1e2f5":"4578",cf864737:"4663","6bdc832c":"4742","7cfb1d0c":"4753",a3c49fd9:"4754","3c6ed59c":"4787","487bf429":"4865",e459d51d:"4876","405f2d9a":"4882","952b3fdc":"4886",e76aecec:"4920","02ad5b1c":"5031","061adc4c":"5039","6e2958ef":"5109","4da0167e":"5225",cce87b67:"5248",a0e6a329:"5266","9e64d05b":"5306","189edb0d":"5352",f59a0ebe:"5364",e3318347:"5423",b74f0b56:"5623","6e773b1a":"5719","2fea2d40":"5727",aba21aa0:"5742","0c8d310c":"5795","8a611437":"5828",ea7b1b11:"5857",a995ee96:"5924","3c711bdb":"5934","46cf1090":"5970","4648c831":"6040","1f391b9e":"6061","477598dd":"6079",fc44458b:"6097","54a88ed7":"6113",reactPlayerVimeo:"6173",c66ae53f:"6218","04c11cf4":"6221","104ea86a":"6313",reactPlayerDailyMotion:"6328","0ea4d505":"6341",reactPlayerPreview:"6353",c5a10934:"6361","375ba1d8":"6386","6459b84b":"6459",reactPlayerKaltura:"6463","432d7d66":"6519","964d596a":"6523",fca4800a:"6656","9e8f5f1c":"6730","6b49cdad":"6744","02365777":"6792",c287b26d:"6797","01f1a992":"6802","4a1a3e03":"6803",b5dab0d4:"6839",db2b4d90:"6846",reactPlayerFacebook:"6887","57aea1fc":"6914","0d3223a3":"6917",d8b2c51c:"6995","9fc067fe":"7057","4bccbb93":"7083",a7bd4aaa:"7098",be02d3e2:"7132","1434155d":"7196","5c7e141f":"7229",e8851b38:"7233",f5f0d846:"7272","0ad621fa":"7308",a42036e6:"7376","68a929a9":"7438",cc0c6179:"7445",reactPlayerFilePlayer:"7458",b7a68670:"7496","9d18d13c":"7544",reactPlayerMixcloud:"7570",reactPlayerStreamable:"7627","58d4a820":"7713","6181342c":"7745","08b3569b":"7746","44386d1b":"7749","116b31b8":"7843","4434a8b7":"7972","0bcbca69":"7993","2e3ffc99":"8036",b05d4510:"8112","4e1df6a3":"8113",b32e8f59:"8117","8114665f":"8152","08e5c7dc":"8164",fe12321f:"8207","49e00cf0":"8264","4d4f51e2":"8362",e33c9cd6:"8419",reactPlayerYouTube:"8446",c11c77a9:"8667",dbd1cd20:"8707",ce5ba636:"8904","6f6bf398":"9017",deef465e:"9023",a94703ab:"9048",c10f38bc:"9057","397210d6":"9065","905c32de":"9090",d273ee52:"9156",ebce6379:"9187",f09a1148:"9193",a24b80f3:"9225",reactPlayerWistia:"9340","2e426791":"9481","7cda2da6":"9515","7718f40c":"9595","5e95c892":"9647",ca7ab025:"9726","38fdfb5b":"9729",b0d5790a:"9777","3c6e6542":"9779",de7a358c:"9789","08c8edc4":"9856",c1e7e5a7:"9881","845ce2f5":"9917","921f956e":"9922","1cde271f":"9938",reactPlayerSoundCloud:"9979"}[e]||e,t.p+t.u(e)},(()=>{var e={5354:0,1869:0};t.f.j=(a,c)=>{var d=t.o(e,a)?e[a]:void 0;if(0!==d)if(d)c.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var f=new Promise(((c,f)=>d=e[a]=[c,f]));c.push(d[2]=f);var b=t.p+t.u(a),r=new Error;t.l(b,(c=>{if(t.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var f=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;r.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",r.name="ChunkLoadError",r.type=f,r.request=b,d[1](r)}}),"chunk-"+a,a)}},t.O.j=a=>0===e[a];var a=(a,c)=>{var d,f,b=c[0],r=c[1],o=c[2],l=0;if(b.some((a=>0!==e[a]))){for(d in r)t.o(r,d)&&(t.m[d]=r[d]);if(o)var i=o(t)}for(a&&a(c);l<b.length;l++)f=b[l],t.o(e,f)&&e[f]&&e[f][0](),e[f]=0;return t.O(i)},c=self.webpackChunksite=self.webpackChunksite||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})(); \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/advanced/evolutions/index.html b/pr-preview/pr-1594/concepts/advanced/evolutions/index.html deleted file mode 100644 index 82534ef0a8..0000000000 --- a/pr-preview/pr-1594/concepts/advanced/evolutions/index.html +++ /dev/null @@ -1,78 +0,0 @@ -<!doctype html> -<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-concepts/advanced/evolutions" data-has-hydrated="false"> -<head> -<meta charset="UTF-8"> -<meta name="generator" content="Docusaurus v3.4.0"> -<title data-rh="true">Schema evolution | Estuary Flow - - - - - - - - - -

      Schema evolution

      -

      Schema evolutions are a feature you can use to update your whole Data Flow to reflect edits to a collection, preventing your Data Flow from failing due to mismatched components.

      -
      info

      Evolutions are a relatively advanced concept in Flow. -Before continuing, you should have a basic understanding of Flow captures, collections, schemas, and materializations.

      -

      Introduction

      -

      Flow stores your real-times datasets as collections, groups of continually updating JSON documents. -Captures write data to collections, and materializations read data from collections. -Together, these three components form a complete Data Flow.

      -
      Note

      Derivations can also read data from and write data to collections. -To keep things simple in this article, we'll be referring only to captures and materializations.

      - -
      - graph LR; - Source[Source System]-->Capture; - Capture-->Collection; - Collection-->Materialization; - Materialization-->Dest[Destination System]; -
      -

      Each collection and its data are defined by a collection specification, or spec. -The spec serves as a formal contract between the capture and the materialization, ensuring that data is correctly shaped and moves through the Data Flow without error.

      -

      The spec includes the collection's key, its schema, and logical partitions of the collection, if any.

      -

      When any of these parts change, any capture or materialization writing to or reading from the collection must be updated to approve of the change, otherwise, the Data Flow will fail with an error.

      -

      You can use Flow's schema evolutions feature to quickly and simultaneously update other parts of a Data Flow so you're able to re-start it without error when you introduce a collection change.

      -

      Collection specs may change for a variety of reasons, such as:

      -
        -
      • The source system is a database, and someone ran an ALTER TABLE statement on a captured table, so you need to update the collection schema (through AutoDiscover or manually).
      • -
      • The source system contains unstructured data, and some data with a different shape was just captured so you need to update the collection schema (through AutoDiscover or manually).
      • -
      • Someone manually changed the collection's logical partitions.
      • -
      -

      Regardless of why or how a spec change is introduced, the effect is the same. Flow will never permit you to publish changes that break this contract between captures and materializations, so you'll need to update the contract.

      -

      Using evolutions

      -

      When you attempt to publish a breaking change to a collection in the Flow web app, you get an error message that looks similar to this one:

      -

      -

      Click the Apply button to trigger an evolution and update all necessary specification to keep your Data Flow functioning. Then, review and publish your draft.

      -

      If you enabled AutoDiscover on a capture, any breaking changes that it introduces will trigger an automatic schema evolution, so long as you selected the Breaking change re-versions collections option(evolveIncompatibleCollections).

      -

      What do schema evolutions do?

      -

      The schema evolution feature is available in the Flow web app when you're editing pre-existing Flow entities. -It notices when one of your edit would cause other components of the Data Flow to fail, alerts you, and gives you the option to automatically update the specs of these components to prevent failure.

      -

      In other words, evolutions happen in the draft state. Whenever you edit, you create a draft. -Evolutions add to the draft so that when it is published and updates the active data flow, operations can continue seamlessly.

      -

      Alternatively, you could manually update all the specs to agree to your edit, but this becomes time-consuming and repetitive.

      -

      Evolutions can prevent errors resulting from mismatched specs in two ways:

      -
        -
      • -

        Materialize data to a new resource in the endpoint system: The evolution updates the affected materialization bindings to increment their backfill counter, which causes the materialization to re-create the resource (database table, for example) and backfill it from the beginning.

        -

        This is a simpler change, and how evolutions work in most cases.

        -
      • -
      • -

        Re-create the Flow collection with a new name: The evolution creates a completely new collection with numerical suffix, such as _v2. This collection starts out empty and backfills from the source. The evolution also updates all captures and materializations that reference the old collection to instead reference the new collection, and increments their backfill counters.

        -

        This is a more complicated change, and evolutions only work this way when necessary: when the collection key or logical partitioning changes.

        -
      • -
      -

      In either case, the names of the destination resources will remain the same. For example, a materialization to Postgres would drop and re-create the affected tables with the same names they had previously.

      -

      Also in either case, only the specific bindings that had incompatible changes will be affected. Other bindings will remain untouched, and will not re-backfill.

      -

      What causes breaking schema changes?

      -

      Though changes to the collection key or logical partition can happen, the most common cause of a breaking change is a change to the collection schema.

      -

      Generally materializations, not captures, require updates following breaking schema changes. This is because the new collection specs are usually discovered from the source, so the capture is edited at the same time as the collection.

      -

      Consider a collection schema that looks like this:

      -
      schema:
      type: object
      properties:
      id: { type: integer }
      foo: { type: string, format: date-time }
      required: [id]
      key: [/id]
      -

      If you materialized that collection into a relational database table, the table would look something like my_table (id integer primary key, foo timestamptz).

      -

      Now, say you edit the collection spec to remove format: date-time from bar. You'd expect the materialized database table to then look like (id integer primary key, foo text). But since the column type of foo has changed, this will fail. An easy solution in this case would be to change the name of the table that the collection is materialized into. Evolutions do this by appending a suffix to the original table name. In this case, you'd end up with my_table_v2 (id integer primary key, foo text).

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/advanced/journals/index.html b/pr-preview/pr-1594/concepts/advanced/journals/index.html deleted file mode 100644 index db1e2b23aa..0000000000 --- a/pr-preview/pr-1594/concepts/advanced/journals/index.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - -Journals | Estuary Flow - - - - - - - - - -

      Journals

      -
      tip

      Journals are an advanced concept of Flow. -You can use Flow without knowing the details of journals, -but this section may help you better understand how Flow works.

      -

      Flow collections store their data in one or more journals, -resources resembling files. -Journals are part of the Gazette project. -See Gazette's Journal concepts page for details. -The number of journals that comprise a given collection depends -on how the collection is partitioned.

      -

      Journals are a real-time data lake. -Historical journal data is stored as an organized layout of -fragment files in cloud storage. -Fragment files are regular files that collectively hold the journal's content. -Just-written data is held in a replicated buffer, -where it is immediately available to readers. -From there, buffers are regularly persisted -to your bucket for long-term storage.

      -

      Journals may be read from any offset. -Readers of historical data, -such as a new materialization or derivation task, -fetch files directly from your bucket for efficiency and throughput. -Then, as they reach the present, they automatically switch to -streaming new documents within milliseconds of their being written.

      -

      -

      All data of a collection is stored as regular JSON files -under a common and unique prefix within your cloud storage bucket. -For example, all fragment files of collection acmeCo/orders -would live under the storage prefix -s3://acmeCo-bucket/acmeCo/orders.

      -

      Files are directly accessible by other tools. -This is an important aspect of Flow's design, -and it has some major implications:

      -
        -
      • You can use tools including Snowflake, Spark, Hive, Pandas, -and many others to read and process the data in your Flow collections.
      • -
      • You can capture and organize data into Flow collections -without knowing how it will be used quite yet. -Perform ad-hoc analysis using the collection data lake, -and layer in derivations -or materializations later, -or not at all.
      • -
      • If you ever decide to stop using Flow, -your data is still yours. -There's no lock-in or need to migrate data out.
      • -
      • Removing files from your bucket also removes them from your collection. -Apply bucket lifecycle policies or directly delete files to permanently -drop their contents from the collection.
      • -
      -

      Flow collections have one or more -logical partitions, -and each logical partition has one or more -physical partitions. -Every physical partition is implemented as a journal, -and a journal may have many fragment files.

      -
      EntityExample
      CollectionacmeCo/orders
      Logical PartitionacmeCo/orders/category=Anvils
      Physical Partition / JournalacmeCo/orders/category=Anvils/pivot=00
      Journal Storages3://acmeCo-bucket/acmeCo/orders/category=Anvils/pivot=00
      Fragment Files3://acmeCo-bucket/acmeCo/orders/category=Anvils/pivot=00/utc_date=2022-01-07/utc_hour=19/0000000000000000-00000000201a3f27-1ec69e2de187b7720fb864a8cd6d50bb69cc7f26.gz
      -

      Specification

      -

      Flow collections can control some aspects of how -their contents are mapped into journals through the journals stanza:

      -
      collections:
      acmeCo/orders:
      schema: orders.schema.yaml
      key: [/id]

      journals:
      # Configuration for journal fragments.
      # Required, type: object.
      fragments:
      # Codec used to compress fragment files.
      # One of ZSTANDARD, SNAPPY, GZIP, or NONE.
      # Optional. Default is GZIP.
      compressionCodec: GZIP
      # Maximum flush delay before in-progress fragment buffers are closed
      # and persisted. Default uses no flush interval.
      # Optional. Given as a time duration.
      flushInterval: 15m
      # Desired content length of each fragment, in megabytes before compression.
      # Default is 512MB.
      # Optional, type: integer.
      length: 512
      # Duration for which historical files of the collection should be kept.
      # Default is forever.
      # Optional. Given as a time duration.
      retention: 720h
      -

      Your storage mappings determine -which of your cloud storage buckets is used -for storage of collection fragment files.

      -

      Physical partitions

      -

      Every logical partition of a Flow collection -is created with a single physical partition. -Later and as required, new physical partitions are added -in order to increase the write throughput of the collection.

      -

      Each physical partition is responsible for all new writes -covering a range of keys occurring in collection documents. -Conceptually, if keys range from [A-Z] then one partition -might cover [A-F] while another covers [G-Z]. -The pivot of a partition reflects the first key -in its covered range. -One physical partition is turned into more partitions -by subdividing its range of key ownership. -For instance, a partition covering [A-F] -is split into partitions [A-C] and [D-F].

      -

      Physical partitions are journals. -The relationship between the journal and -its specific collection and logical partition are -encoded within -its journal specification.

      -

      Fragment files

      -

      Journal fragment files each hold a slice of your collection's content, -stored as a compressed file of newline-delimited JSON documents -in your cloud storage bucket.

      -

      Files are flushed to cloud storage periodically, -typically after they reach a desired size threshold. -They use a content-addressed naming scheme -which allows Flow to understand -how each file stitches into the overall journal. -Consider a fragment file path like:

      -

      s3://acmeCo-bucket/acmeCo/orders/category=Anvils/pivot=00/utc_date=2022-01-07/utc_hour=19/0000000000000000-00000000201a3f27-1ec69e2de187b7720fb864a8cd6d50bb69cc7f26.gz

      -

      This path has the following components:

      -
      ComponentExample
      Storage prefix of physical partitions3://acmeCo-bucket/acmeCo/orders/category=Anvils/pivot=00/
      Supplemental time pseudo-partitionsutc_date=2022-01-07/utc_hour=19/
      Beginning content offset0000000000000000
      Ending content offset00000000201a3f27
      SHA content checksum1ec69e2de187b7720fb864a8cd6d50bb69cc7f26
      Compression codec.gz
      -

      The supplemental time pseudo-partitions are not logical partitions, -but are added to each fragment file path to facilitate -integration with external tools that understand Hive layouts.

      -

      Hive layouts

      -

      As we've seen, -collection fragment files are written to cloud storage -with path components like -/category=Anvils/pivot=00/utc_date=2022-01-07/utc_hour=19/.

      -

      If you've used tools within the Apache Hive ecosystem, this layout should feel familiar. -Flow organizes files in this way to make them directly usable -by tools that understand Hive partitioning, like Spark and Hive itself. -Collections can also be integrated as Hive-compatible external tables -in tools like -Snowflake -and -BigQuery -for ad-hoc analysis.

      -

      SQL queries against these tables can even utilize predicate push-down, -taking query predicates over category, utc_date, and utc_hour -and pushing them down into the selection of files that must be read to answer -the query — often offering much faster and more efficient query execution because -far less data must be read.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/advanced/logs-stats/index.html b/pr-preview/pr-1594/concepts/advanced/logs-stats/index.html deleted file mode 100644 index cb6f4447a5..0000000000 --- a/pr-preview/pr-1594/concepts/advanced/logs-stats/index.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - -Logs and statistics | Estuary Flow - - - - - - - - - -

      Logs and statistics

      -

      Flow collects logs and statistics of catalog tasks to aid in debugging and refinement of your workflows.

      -

      Logs

      -

      Each organization that uses Flow has a logs collection under the global ops prefix. -For the organization Acme Co, it would have the name ops/acmeCo/logs.

      -

      These can be thought of as standard application logs: -they store information about events that occur at runtime. -They’re distinct from recovery logs, which track the state of various task shards.

      -

      Regardless of how many Data Flows your organization has, all logs are stored in the same collection, -which is read-only and logically partitioned on tasks. -Logs are collected from events that occur within the Flow runtime, -as well as the capture and materialization connectors your Data Flow is using.

      -

      Log level

      -

      You can set the log level for each catalog task to control the level of detail at which logs are collected for that task. -The available levels, listed from least to most detailed, are:

      -
        -
      • error: Non-recoverable errors from the Flow runtime or connector that are critical to know about
      • -
      • warn: Errors that can be re-tried, but likely require investigation
      • -
      • info: Task lifecycle events, or information you might want to collect on an ongoing basis
      • -
      • debug: Details that will help debug an issue with a task
      • -
      • trace: Maximum level of detail that may yield gigabytes of logs
      • -
      -

      The default log level is info. You can change a task’s log level by adding the shards keyword to its definition in the catalog spec:

      -
      materializations:
      acmeCo/debugMaterialization:
      shards:
      logLevel: debug
      endpoint:
      {}
      -

      Statistics

      -

      Each organization that uses Flow has a stats collection under the global ops prefix. -For the organization Acme Co, it would have the name ops/acmeCo/stats.

      -

      Regardless of how many Data Flows your organization has, all stats are stored in the same collection, -which is read-only and logically partitioned on tasks.

      -

      A new document is published to the stats collection for each task transaction. -Each document includes information about the time and quantity of data inputs and outputs. -Statistics vary by task type (capture, materialization, or derivation).

      -

      Use stats to:

      -
        -
      • Evaluate the data throughput of a task; for example, a derivation.
      • -
      • Compare a data throughput of a task between platforms; for example, compare reported data capture by Flow to detected change rate in a source system.
      • -
      • Access the same information used by Estuary for billing.
      • -
      • Optimize your tasks for increased efficiency.
      • -
      -

      See a detailed table of the properties included in stats documents.

      -

      Working with logs and statistics

      -

      Learn more about working with logs and statistics

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/advanced/projections/index.html b/pr-preview/pr-1594/concepts/advanced/projections/index.html deleted file mode 100644 index ff6397c598..0000000000 --- a/pr-preview/pr-1594/concepts/advanced/projections/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - -Projections | Estuary Flow - - - - - - - - - -

      Projections

      -
      tip

      Projections are an advanced concept of Flow. -You can use Flow without knowing the details of projections, -but this section may help you better understand how Flow works.

      -

      Flow documents are arbitrary JSON, and may contain multiple levels of hierarchy and nesting. -However, systems that Flow integrates with often model flat tables of rows and columns, without hierarchy. -Others are somewhere in between.

      -

      Projections are the means by which Flow translates between the documents -of a collection and a table representation. -A projection defines a mapping between a structured document location, -given as a JSON-Pointer, -and a corresponding field name used as, for example, a CSV file header or SQL table column.

      -

      Many projections are inferred automatically from a collection’s JSON schema, -using a field that is simply the JSON Pointer with its leading slash removed. -For example, a schema scalar with pointer /myScalar will generate a projection with field myScalar.

      -

      You can supplement by providing additional collection projections, -and a document location can have more than one projection field that references it:

      -
      collections:
      acmeCo/user-sessions:
      schema: session.schema.yaml
      key: [/user/id, /timestamp]
      projections:
      # A "user/id" projection field is automatically inferred.
      # Add an additional field that doesn't have a slash.
      user_id: /user/id
      # Partly decompose a nested array of requests into a handful of named projections.
      "first request": /requests/0
      "second request": /requests/1
      "third request": /requests/2
      -

      Logical partitions

      -

      Projections can also be used to logically partition a collection, -specified as a longer-form variant of a projection definition:

      -
      collections:
      acmeCo/user-sessions:
      schema: session.schema.yaml
      key: [/user/id, /timestamp]
      projections:
      country:
      location: /country
      partition: true
      device:
      location: /agent/type
      partition: true
      network:
      location: /agent/network
      partition: true
      -

      Logical partitions isolate the storage of documents -by their differing values for partitioned fields. -Flow extracts partitioned fields from each document, -and every unique combination of partitioned fields -is a separate logical partition.

      -

      Every logical partition has one or more physical partitions -into which their documents are written, -which in turn controls -how files are arranged within cloud storage.

      -

      For example, a document of "acmeCo/user-sessions" like:

      -
      {"country": "CA", "agent": {"type": "iPhone", "network": "LTE"}, ...}
      -

      Might produce files in cloud storage like:

      -
      s3://bucket/example/sessions/country=CA/device=iPhone/network=LTE/pivot=00/utc_date=2020-11-04/utc_hour=16/<name>.gz
      -
      info

      country, device, and network together identify a logical partition, -while pivot identifies a physical partition. -utc_date and utc_hour is the time at which the journal fragment was created.

      -

      Learn more about physical partitions.

      -

      Partition selectors

      -

      When reading from a collection, Flow catalog entities like derivations, materializations, -and tests can provide a partition selector, which identifies the subset -of partitions that should be read from a source collection:

      -
      # Partition selectors are included as part of a larger entity,
      # such as a derivation or materialization.
      partitions:
      # `include` selects partitioned fields and corresponding values that
      # must be matched in order for a partition to be processed.
      # All of the included fields must be matched.
      # Default: All partitions are included. type: object
      include:
      # Include partitions from North America.
      country: [US, CA]
      # AND where the device is a mobile phone.
      device: [iPhone, Android]

      # `exclude` selects partitioned fields and corresponding values which,
      # if matched, exclude the partition from being processed.
      # A match of any of the excluded fields will exclude the partition.
      # Default: No partitions are excluded. type: object
      exclude:
      # Skip sessions which were over a 3G network.
      network: ["3G"]
      -

      Partition selectors are efficient as they allow Flow to altogether -avoid reading documents that aren’t needed.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/advanced/shards/index.html b/pr-preview/pr-1594/concepts/advanced/shards/index.html deleted file mode 100644 index 2e01a58e86..0000000000 --- a/pr-preview/pr-1594/concepts/advanced/shards/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - -Task shards | Estuary Flow - - - - - - - - - -

      Task shards

      -

      Catalog tasks — captures, derivations, and materializations — -are executed by one or more task shards.

      -

      Shards are a fault-tolerant and stateful unit of execution for a catalog task, -which the Flow runtime assigns and runs on a scalable pool of compute resources. -A single task can have many shards, -which allow the task to scale across many machines to -achieve more throughput and parallelism.

      -

      Shards are part of the Gazette project. -See Gazette's Shard concepts page for details.

      -

      Shard splits

      -

      When a task is first created, it is initialized with a single shard. -Later and as required, shards may be split into two shards. -This is done by the service operator on your behalf, depending on the size of your task. -Shard splitting doesn't require downtime; your task will continue to run as normal -on the old shard until the split occurs and then shift seamlessly to the new, split shards.

      -

      This process can be repeated as needed until your required throughput is achieved. -If you have questions about how shards are split for your tasks, contact your Estuary account representative.

      -

      Transactions

      -

      Shards process messages in dynamic transactions.

      -

      Whenever a message is ready to be processed by the task (when new documents appear at the source endpoint or collection), -a new transaction is initiated. -The transaction will continue so long as further messages are available for processing. -When no more messages are immediately available, the transaction closes. -A new transaction is started whenever the next message is available.

      -

      In general, shorter transaction durations decrease latency, while longer transaction durations -increase efficiency. -Flow automatically balances these two extremes to optimize each task, -but it may be useful in some cases to control transaction duration. -For example, materializations to large analytical warehouses may benefit from longer transactions, -which can reduce cost by performing more data reduction before landing data in the warehouse. -Some endpoint systems, like BigQuery, limit the number of table operations you can perform. -Longer transaction durations ensure that you don't exceed these limits.

      -

      You can set the minimum and maximum transaction duration in a task's shards configuration.

      -

      Recovery logs

      -

      All task shards have associated state, which is managed in the shard's store.

      -
        -
      • Capture tasks must track incremental checkpoints of their endpoint connectors.
      • -
      • Derivation tasks manage a potentially very large index of registers, -as well as read checkpoints of sourced collection journals.
      • -
      • Materialization tasks track incremental checkpoints of their endpoint connectors, -as well as read checkpoints of sourced collection journals.
      • -
      -

      Shard stores use -recovery logs -to replicate updates and implement transaction semantics.

      -

      Recovery logs are regular journals, -but hold binary data and are not intended for direct use. -However, they can hold your user data. -Recovery logs of derivations hold your derivation register values.

      -

      Recovery logs are stored in your cloud storage bucket, -and must have a configured storage mapping.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/captures/index.html b/pr-preview/pr-1594/concepts/captures/index.html deleted file mode 100644 index 623dfdefbc..0000000000 --- a/pr-preview/pr-1594/concepts/captures/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - -Captures | Estuary Flow - - - - - - - - - -

      Captures

      -

      A capture is how Flow ingests data from an external source. -Every Data Flow starts with a capture.

      -

      Captures are a type of Flow task. -They connect to an external data source, or endpoint, -and bind one or more of its resources, such as database tables. -Each binding adds documents to a corresponding Flow collection.

      -

      Captures run continuously: -as soon as new documents are made available at the endpoint resources, -Flow validates their schema and adds them to the appropriate collection. -Captures can process documents up to 16 MB in size.

      -

      -

      You define and configure captures in Flow specifications.

      -

      See the guide to create a capture

      -

      Connectors

      -

      Captures extract data from an endpoint using a connector. -Estuary builds and maintains many real-time connectors for various technology systems, -such as database change data capture (CDC) connectors.

      -

      See the source connector reference documentation.

      -

      Batch sources

      -

      Flow supports running both first and third party connectors to batch sources including Singer, Meltano and Airbyte as well as natively-written Estuary connectors.
      -These connectors tend to focus on SaaS APIs, and do not offer real-time streaming integrations. -Flow runs the connector at regular intervals to capture updated documents.

      -

      Third-party source connectors are independently reviewed and sometimes updated for compatibility with Flow. -Estuary's source connectors documentation includes all actively supported connectors. -If you see a connector you'd like to prioritize for access in the Flow web app, contact us.

      -

      Discovery

      -

      To help you configure new pull captures, Flow offers the guided discovery workflow in the Flow web application.

      -

      To begin discovery, you tell Flow the connector you'd like to use and basic information about the endpoint. -Flow automatically generates a capture configuration for you. It identifies one or more -resources — tables, data streams, or the equivalent — and generates bindings so that each will be mapped to a -data collection in Flow.

      -

      You may then modify the generated configuration as needed before publishing the capture.

      -
      info

      Discovers can also be run when editing an existing capture. This is commonly done in order to add new bindings, or update the collection specs and schemas associated with existing bindings.

      -

      Automatically update captures

      -

      You can choose to run periodic discovers in the background by adding the autoDiscover property to the capture. Flow will periodically check for changes to the source and re-publish the capture to reflect those changes.

      -

      There are several options for controlling the behavior of autoDiscover:

      -
        -
      • -

        The addNewBindings option determines whether to add newly discovered resources, such as database tables, to the capture as bindings. If set to false, autoCapture will only update the collection specs for existing bindings.

        -
      • -
      • -

        The evolveIncompatibleCollections option determines how to respond when the discovered updates would cause a breaking change to the collection. If true, it will trigger an evolution of the incompatible collection(s) to prevent failures.

        -
      • -
      -

      In the Flow web app, you can set these properties when you create or edit a capture.

      -

      -

      The toggles in the web app correspond directly to the properties above:

      -
        -
      • "Automatically keep schemas up to date" enables autoDiscover
      • -
      • "Automatically add new collections" corresponds to addNewBindings
      • -
      • "Breaking changes re-versions collections" corresponds to evolveIncompatibleCollections
      • -
      -

      Specification

      -

      Captures are defined in Flow specification files per the following format:

      -
      # A set of captures to include in the catalog.
      # Optional, type: object
      captures:
      # The name of the capture.
      acmeCo/example/source-s3:
      # Automatically performs periodic discover operations, which updates the bindings
      # to reflect what's in the source, and also updates collection schemas.
      # To disable autoDiscover, either omit this property or set it to `null`.
      autoDiscover:
      # Also add any newly discovered bindings automatically
      addNewBindings: true
      # How to handle breaking changes to discovered collections. If true, then existing
      # materialization bindings will be re-created with new names, as necessary. Or if
      # collection keys have changed, then new Flow collections will be created. If false,
      # then incompatible changes will simply result in failed publications, and will
      # effectively be ignored.
      evolveIncompatibleCollections: true

      # Endpoint defines how to connect to the source of the capture.
      # Required, type: object
      endpoint:
      # This endpoint uses a connector provided as a Docker image.
      connector:
      # Docker image that implements the capture connector.
      image: ghcr.io/estuary/source-s3:dev
      # File that provides the connector's required configuration.
      # Configuration may also be presented inline.
      config: path/to/connector-config.yaml

      # Bindings define how collections are populated from the data source.
      # A capture may bind multiple resources to different collections.
      # Required, type: array
      bindings:
      - # The target collection to capture into.
      # This may be defined in a separate, imported specification file.
      # Required, type: string
      target: acmeCo/example/collection

      # The resource is additional configuration required by the endpoint
      # connector to identify and capture a specific endpoint resource.
      # The structure and meaning of this configuration is defined by
      # the specific connector.
      # Required, type: object
      resource:
      stream: a-bucket/and-prefix
      # syncMode should be set to incremental for all Estuary connectors
      syncMode: incremental

      - target: acmeCo/example/another-collection
      resource:
      stream: a-bucket/another-prefix
      syncMode: incremental

      # Interval of time between invocations of non-streaming connectors.
      # If a connector runs to completion and then exits, the capture task will
      # restart the connector after this interval of time has elapsed.
      #
      # Intervals are relative to the start of an invocation and not its completion.
      # For example, if the interval is five minutes, and an invocation of the
      # capture finishes after two minutes, then the next invocation will be started
      # after three additional minutes.
      #
      # Optional. Default: Five minutes.
      interval: 5m
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/catalogs/index.html b/pr-preview/pr-1594/concepts/catalogs/index.html deleted file mode 100644 index 66cd066bd7..0000000000 --- a/pr-preview/pr-1594/concepts/catalogs/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - -Catalog | Estuary Flow - - - - - - - - - -

      Catalog

      -

      The catalog is the set of published entities that comprise all Data Flows: captures, materializations, derivations, collections, schemas, tests, and more.

      -

      Data Flows

      -

      You can mix and match catalog entities to create a variety of Data Flows.

      -

      The simplest Data Flow has just three entities.

      - -
      - graph LR; - Capture-->Collection; - Collection-->Materialization; -
      -

      It may also be more complex, combining multiple entities of each type.

      -
      - graph LR; - capture/two-->collection/D; - capture/one-->collection/C; - capture/one-->collection/A; - collection/A-->derivation/B; - collection/D-->derivation/E; - collection/C-->derivation/E; - derivation/B-->derivation/E; - collection/D-->materialization/one; - derivation/E-->materialization/two; -
      -

      Flow specification files

      -

      Catalog entities are defined and described in Flow specification files. -These YAML files contain the configuration details that each entity requires.

      -

      You work on specification files as drafts before you publish them to a catalog.

      -

      There are two ways to create and work with specification files.

      -

      In the Flow web app

      -

      You don't need to write or edit the specification files directly — the web app is designed to generate them for you. -You do have the option to review and edit the generated specification as you create captures and materializations using the Catalog Editor.

      -

      With flowctl

      -

      If you prefer a developer workflow, you can also work with specification files directly in your local environment using flowctl. You then publish them back to the catalog.

      -

      A given Data Flow may be described by one specification file, or by many, so long as a top-level file imports all the others.

      -

      The files use the extension *.flow.yaml or are simply named flow.yaml by convention. -Using this extension activates Flow's VS Code integration and auto-complete. -Flow integrates with VS Code for development environment support, like auto-complete, -tooltips, and inline documentation.

      -

      Depending on your Data Flow, you may also have TypeScript modules, -JSON schemas, or test fixtures.

      -

      Namespace

      -

      All catalog entities (captures, materializations, and collections) are identified by a name -such as acmeCo/teams/manufacturing/anvils. Names have directory-like -prefixes and every name within Flow is globally unique.

      -

      If you've ever used database schemas to organize your tables and authorize access, -you can think of name prefixes as being akin to database schemas with arbitrary nesting.

      -

      All catalog entities exist together in a single namespace. -As a Flow customer, you're provisioned one or more high-level prefixes for your organization. -Further division of the namespace into prefixes is up to you.

      -

      Prefixes of the namespace, like acmeCo/teams/manufacturing/, -are the foundation for Flow's authorization model.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/collections/index.html b/pr-preview/pr-1594/concepts/collections/index.html deleted file mode 100644 index 9768bbd263..0000000000 --- a/pr-preview/pr-1594/concepts/collections/index.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - -Collections | Estuary Flow - - - - - - - - - -

      Collections

      -

      The documents of your Data Flows are stored in collections: -real-time data lakes of JSON documents in cloud storage.

      -

      The data in a collection may be captured from an external system, -or derived as a transformation of one or more other collections. -When you create a new capture in a typical workflow, -you define one or more new collections as part of that process. -Materializations then read data from collections.

      -

      Every collection has a key and an associated schema -that its documents must validate against.

      -

      Documents

      -

      Flow processes and stores data in terms of documents: JSON files that consist of multiple key-value pair objects. Collections are comprised of documents; Flow tasks (captures, materializations, and derivations) process data in terms of documents.

      -

      A Flow document corresponds to different units of data in different types of endpoint systems. -For example, it might map to a table row, a pub/sub message, or an API response. -The structure of a given collection’s documents is determined by that collection’s schema and the way in which tasks handle documents is determined by the collection key.

      -

      The size of a document depends on the complexity of the source data. -Flow allows documents up to 16 MB in size, but it's rare for documents to approach this limit.

      -

      An example document for a collection with two fields, name and count is shown below.

      -
      {
      "_meta": {
      "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      },
      "count": 5954,
      "message": "Hello #5954"
      }
      -

      System Fields and Metadata

      -

      The _meta object is present in all Flow documents, and contains metadata added by Flow. -Minimally, every document _meta always has a uuid, which is a globally unique id for each document. -Some capture connectors may add additional _meta properties to tie each document to a specific record -within the source system. Documents that were captured from cloud storage connectors, for example, -will contain /_meta/file and /_meta/offset properties that tell you where the document came from -within your cloud storage bucket.

      -

      _meta/uuid

      -

      The _meta/uuid field is a system-generated globally unique identifier for each document within Estuary Flow.

      -

      flow_published_at

      -

      The flow_published_at field is a system-generated timestamp within Estuary Flow, -derived from the runtime environment. It captures the exact moment a document is published to a collection, -offering a reliable proxy for when the document was last modified or inserted.

      -
        -
      • Source: The flow_published_at field is generated by the runtime environment of Estuary Flow.
      • -
      • Definition: This field represents the timestamp when a document is captured and subsequently published -to a collection. Essentially, it is a projection of the _meta/uuid field, where the UUID contains an -encoded timestamp component.
      • -
      • Availability: The flow_published_at field is available in every collection, as it is a derived -projection from the _meta/uuid field.
      • -
      -

      For a given document identified by a unique key, the flow_published_at field can be used as a proxy for -the last time the document was modified. This is particularly useful when performing incremental updates -or transformations, such as in a data warehouse environment.

      -

      When dealing with materializations that are not delta updates:

      -
        -
      • A document in Estuary Flow is any JSON object emitted by a capture connector. -The flow_published_at field provides the timestamp for when this JSON object was captured and inserted -into the collection.
      • -
      • If the collection is reduced with a strategy like lastWriteWins or merge on the -capture side, flow_published_at becomes the timestamp for the last event that updated the document.
      • -
      -

      Viewing collection documents

      -

      In many cases, it's not necessary to view your collection data — you're able to materialize it directly to a destination in the correct shape using a connector.

      -

      However, it can be helpful to view collection documents to confirm the source data was captured as expected, or verify a schema change.

      -

      In the web application

      -

      Sign into the Flow web application and click the Collections tab. The collections to which you have access are listed. -Click the Details drop down to show a sample of collection documents as well as the collection specification.

      -

      The collection documents are displayed by key. Click the desired key to preview it in its native JSON format.

      -

      Using the flowctl CLI

      -

      In your authenticated flowctl session, issue the command flowctl collections read --collection <full/collection-name> --uncommitted. For example, flowctl collections read --collection acmeCo/inventory/anvils --uncommitted.

      -

      Options are available to read a subset of data from collections. -For example, --since allows you to specify an approximate start time from which to read data, and ---include-partition allows you to read only data from a specified logical partition. -Use flowctl collections read --help to see documentation for all options.

      -
      Beta

      While in beta, this command currently has the following limitations. They will be removed in a later release:

        -
      • -

        The --uncommitted flag is required. This means that all collection documents are read, regardless of whether they were successfully committed or not. -In the future, reads of committed documents will be the default.

        -
      • -
      • -

        Only reads of a single partition are supported. If you need to read from a partitioned collection, use --include-partition or --exclude-partition to narrow down to a single partition.

        -
      • -
      • -

        The --output flag is not usable for this command. Only JSON data can be read from collections.

        -
      • -
      -

      Specification

      -

      Collections are defined in Flow specification files per the following format:

      -
      # A set of collections to include in the catalog.
      # Optional, type: object
      collections:
      # The unique name of the collection.
      acmeCo/products/anvils:

      # The schema of the collection, against which collection documents
      # are validated. This may be an inline definition or a relative URI
      # reference.
      # Required, type: string (relative URI form) or object (inline form)
      schema: anvils.schema.yaml

      # The key of the collection, specified as JSON pointers of one or more
      # locations within collection documents. If multiple fields are given,
      # they act as a composite key, equivalent to a SQL table PRIMARY KEY
      # with multiple table columns.
      # Required, type: array
      key: [/product/id]

      # Projections and logical partitions for this collection.
      # Optional, type: object
      projections:

      # Derivation that builds this collection from others through transformations.
      # See the "Derivations" concept page to learn more.
      # Optional, type: object
      derive: ~
      -

      Schemas

      -

      Every Flow collection must declare a schema, -and will never accept documents -that do not validate against the schema. -This helps ensure the quality of your data products -and the reliability of your derivations and materializations. -Schema specifications are flexible: -yours could be exactingly strict, extremely permissive, or somewhere in between. -For many source types, Flow is able to generate a basic schema during discovery.

      -

      Schemas may either be declared inline, or provided as a reference to a file. -References can also include JSON pointers as a URL fragment to name a specific schema of a larger schema document:

      - -
      collections:
      acmeCo/collection:
      schema:
      type: object
      required: [id]
      properties:
      id: string
      key: [/id]
      -

      Learn more about schemas

      -

      Keys

      -

      Every Flow collection must declare a key which is used to group its documents. -Keys are specified as an array of JSON pointers to document locations. For example:

      -
      collections:
      acmeCo/users:
      schema: schema.yaml
      key: [/userId]
      -

      Suppose the following JSON documents are captured into acmeCo/users:

      -
      {"userId": 1, "name": "Will"}
      {"userId": 1, "name": "William"}
      {"userId": 1, "name": "Will"}
      -

      As its key is [/userId], a materialization of the collection into a database table will reduce to a single row:

      -
      userId | name
      1 | Will
      -

      If its key were instead [/name], there would be two rows in the table:

      -
      userId | name
      1 | Will
      1 | William
      -

      Schema restrictions

      -

      Keyed document locations may be of a limited set of allowed types:

      -
        -
      • boolean
      • -
      • integer
      • -
      • string
      • -
      -

      Excluded types are:

      -
        -
      • array
      • -
      • null
      • -
      • object
      • -
      • Fractional number
      • -
      -

      Keyed fields also must always exist in collection documents. -Flow performs static inference of the collection schema to verify the existence -and types of all keyed document locations, and will report an error if the -location could not exist, or could exist with the wrong type.

      -

      Flow itself doesn't mind if a keyed location has multiple types, -so long as they're each of the allowed types: an integer or string for example. -Some materialization connectors, however, may impose further type -restrictions as required by the endpoint. -For example, SQL databases do not support multiple types for a primary key.

      -

      Composite Keys

      -

      A collection may have multiple locations which collectively form a composite key. -This can include locations within nested objects and arrays:

      -
      collections:
      acmeCo/compound-key:
      schema: schema.yaml
      key: [/foo/a, /foo/b, /foo/c/0, /foo/c/1]
      -

      Key behaviors

      -

      A collection key instructs Flow how documents of a collection are to be -reduced, such as while being materialized to an endpoint. -Flow also performs opportunistic local reductions over windows of documents -to improve its performance and reduce the volumes -of data at each processing stage.

      -

      An important subtlety is that the underlying storage of a collection -will potentially retain many documents of a given key.

      -

      In the acmeCo/users example, each of the "Will" or "William" variants -is likely represented in the collection's storage — so long as they didn't -arrive so closely together that they were locally combined by Flow. -If desired, a derivation could re-key the collection -on [/userId, /name] to materialize the various /names seen for a /userId.

      -

      This property makes keys less lossy than they might otherwise appear, -and it is generally good practice to chose a key that reflects how -you wish to query a collection, rather than an exhaustive key -that's certain to be unique for every document.

      -

      Empty keys

      -

      When a specification is automatically generated, there may not be an unambiguously correct key for all collections. This could occur, for example, when a SQL database doesn't have a primary key defined for some table.

      -

      In cases like this, the generated specification will contain an empty collection key. However, every collection must have a non-empty key, so you'll need to manually edit the generated specification and specify keys for those collections before publishing to the catalog.

      -

      Projections

      -

      Projections are named locations within a collection document that may be used for -logical partitioning or directly exposed to databases into which collections are -materialized.

      -

      Many projections are automatically inferred from the collection schema. -The projections stanza can be used to provide additional projections, -and to declare logical partitions:

      -
      collections:
      acmeCo/products/anvils:
      schema: anvils.schema.yaml
      key: [/product/id]

      # Projections and logical partitions for this collection.
      # Keys name the unique projection field, and values are its JSON Pointer
      # location within the document and configure logical partitioning.
      # Optional, type: object
      projections:
      # Short form: define a field "product_id" with document pointer /product/id.
      product_id: "/product/id"

      # Long form: define a field "metal" with document pointer /metal_type
      # which is a logical partition of the collection.
      metal:
      location: "/metal_type"
      partition: true

      -

      Learn more about projections.

      -

      Storage

      -

      Collections are real-time data lakes. -Historical documents of the collection -are stored as an organized layout of -regular JSON files in your cloud storage bucket. -Reads of that history are served by -directly reading files from your bucket.

      -

      Your storage mappings -determine how Flow collections are mapped into -your cloud storage buckets.

      -

      Unlike a traditional data lake, however, -it's very efficient to read collection documents as they are written. -Derivations and materializations that source from a collection -are notified of its new documents within milliseconds of their being published.

      -

      Learn more about journals, which provide storage for collections

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/connectors/index.html b/pr-preview/pr-1594/concepts/connectors/index.html deleted file mode 100644 index 53937922a7..0000000000 --- a/pr-preview/pr-1594/concepts/connectors/index.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - -Connectors | Estuary Flow - - - - - - - - - -

      Connectors

      -

      Connectors bridge the gap between Flow and -the various endpoints from which you capture or to which you materialize data.

      -

      Supported connectors are all available to you within the Flow web application. -From a technical perspective, they're packaged as Docker images, -each encapsulating the details of working with a particular external system.

      -

      All connectors available in Flow are open-source, and many of them were built by Estuary. -Estuary connectors are dual-licensed under Apache 2.0 or MIT. -Flow also supports open-source connectors built by third parties, which Estuary independently tests and may alter slightly -for optimal performance within the Flow ecosystem.

      -

      Estuary’s vision is to provide a common runtime against which any open connector may be run. -To that end, Flow currently supports the -Airbyte specification -as well as Flow’s low-latency gRPC protocols for captures and materializations.

      -

      Using connectors

      -

      Most — if not all — of your Data Flows will use at least one connector. -You configure connectors within capture or materialization specifications. -When you publish one of these entities, you're also deploying all the connectors it uses.

      -

      You can interact with connectors using either the Flow web application or the flowctl CLI.

      -

      Flow web application

      -

      The Flow web application is designed to assist you with connector configuration and deployment. -It's a completely no-code experience, but it's compatible with Flow's command line tools, discussed below.

      -

      When you add a capture or materialization in the Flow web app, choose the desired data system from the Connector drop-down menu.

      -

      The required fields for the connector appear below the drop-down. When you fill in the fields and click Discover Endpoint, -Flow automatically "discovers" the data streams or tables — known as resources — associated with the endpoint system. -From there, you can refine the configuration, save, and publish the resulting Flow specification.

      -

      GitOps and flowctl

      -

      Connectors are packaged as Open Container (Docker) images, -and can be tagged, and pulled using -Docker Hub, -GitHub Container registry, -or any other public image registry provider.

      -

      To interface with a connector, the Flow runtime needs to know:

      -
        -
      1. -

        The specific image to use, through an image name such as ghcr.io/estuary/source-postgres:dev. -Notice that the image name also conveys the specific image registry and version tag to use.

        -
      2. -
      3. -

        Endpoint configuration such as a database address and account, with meaning that is specific to the connector.

        -
      4. -
      5. -

        Resource configuration such as a specific database table to capture, which is also specific to the connector.

        -
      6. -
      -

      To integrate a connector into your dataflow, -you must define all three components within your Flow specification.

      -

      The web application is intended to help you generate the Flow specification. -From there, you can use flowctl to refine it in your local environment. -It's also possible to manually write your Flow specification files, but this isn't the recommended workflow.

      -
      materializations:
      acmeCo/postgres-views:
      endpoint:
      connector:
      # 1: Provide the image that implements your endpoint connector.
      # The `dev` tag uses the most recent version (the web app chooses this tag automatically)
      image: ghcr.io/estuary/materialize-postgres:dev
      # 2: Provide endpoint configuration that the connector requires.
      config:
      address: localhost:5432
      password: password
      database: postgres
      user: postgres
      bindings:
      - source: acmeCo/products/anvils
      # 3: Provide resource configuration for the binding between the Flow
      # collection and the endpoint resource. This connector interfaces
      # with a SQL database and its resources are database tables. Here,
      # we provide a table to create and materialize which is bound to the
      # `acmeCo/products/anvils` source collection.
      resource:
      table: anvil_products

      # Multiple resources can be configured through a single connector.
      # Bind additional collections to tables as part of this connector instance:
      - source: acmeCo/products/TNT
      resource:
      table: tnt_products

      - source: acmeCo/customers
      resource:
      table: customers
      -

      Configuration

      -

      Because connectors interface with external systems, each requires a slightly different endpoint configuration. -Here you specify information such as a database hostname or account credentials — -whatever that specific connector needs to function.

      -

      If you're working directly with Flow specification files, -you have the option of including the configuration inline -or storing it in separate files:

      -
      my.flow.yaml
      materializations:
      acmeCo/postgres-views:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-postgres:dev
      config:
      address: localhost:5432
      password: password
      database: postgres
      user: postgres
      bindings: []
      -

      Storing configuration in separate files serves two important purposes:

      -
        -
      • Re-use of configuration across multiple captures or materializations
      • -
      • The ability to protect sensitive credentials
      • -
      -

      Protecting secrets

      -

      Most endpoint systems require credentials of some kind, -such as a username or password.

      -

      Sensitive credentials should be protected while not in use. -The only time a credential needs to be directly accessed is when Flow initiates the connector.

      -

      Flow integrates with Mozilla’s sops tool, -which can encrypt and protect credentials. -It stores a sops-protected configuration in its encrypted form, -and decrypts it only when invoking a connector on the your behalf.

      -

      sops, short for “Secrets Operations,” is a tool that encrypts the values of a JSON or YAML document -against a key management system (KMS) such as Google Cloud Platform KMS, Azure Key Vault, or Hashicorp Vault. -Encryption or decryption of a credential with sops is an active process: -it requires that the user (or the Flow runtime identity) have a current authorization to the required KMS, -and creates a request trace which can be logged and audited. -It's also possible to revoke access to the KMS, -which immediately and permanently removes access to the protected credential.

      -

      When you use the Flow web application, Flow automatically -adds sops protection to sensitive fields on your behalf. -You can also implement sops manually if you are writing a Flow specification locally. -The examples below provide a useful reference.

      -

      Example: Protect a configuration

      -

      Suppose you're given a connector configuration:

      -
      config.yaml
      host: my.hostname
      password: "this is sensitive!"
      user: my-user
      -

      You can protect it using a Google KMS key that you own:

      -
      # Login to Google Cloud and initialize application default credentials used by `sops`.
      $ gcloud auth application-default login
      # Use `sops` to re-write the configuration document in place, protecting its values.
      $ sops --encrypt --in-place --gcp-kms projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name config.yaml
      -

      sops re-writes the file, wrapping each value in an encrypted envelope and adding a sops metadata section:

      -
      config.yaml
      host: ENC[AES256_GCM,data:K/clly65pThTg2U=,iv:1bNmY8wjtjHFBcXLR1KFcsNMGVXRl5LGTdREUZIgcEU=,tag:5GKcguVPihXXDIM7HHuNnA==,type:str]
      password: ENC[AES256_GCM,data:IDDY+fl0/gAcsH+6tjRdww+G,iv:Ye8st7zJ9wsMRMs6BoAyWlaJeNc9qeNjkkjo6BPp/tE=,tag:EPS9Unkdg4eAFICGujlTfQ==,type:str]
      user: ENC[AES256_GCM,data:w+F7MMwQhw==,iv:amHhNCJWAJnJaGujZgjhzVzUZAeSchEpUpBau7RVeCg=,tag:62HguhnnSDqJdKdwYnj7mQ==,type:str]
      sops:
      # Some items omitted for brevity:
      gcp_kms:
      - resource_id: projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name
      created_at: "2022-01-05T15:49:45Z"
      enc: CiQAW8BC2GDYWrJTp3ikVGkTI2XaZc6F4p/d/PCBlczCz8BZiUISSQCnySJKIptagFkIl01uiBQp056c
      lastmodified: "2022-01-05T15:49:45Z"
      version: 3.7.1
      -

      You then use this config.yaml within your Flow specification. -The Flow runtime knows that this document is protected by sops -will continue to store it in its protected form, -and will attempt a decryption only when invoking a connector on your behalf.

      -

      If you need to make further changes to your configuration, -edit it using sops config.yaml. -It's not required to provide the KMS key to use again, -as sops finds it within its metadata section.

      -
      important

      When deploying catalogs onto the managed Flow runtime, -you must grant access to decrypt your GCP KMS key to the Flow runtime service agent, -which is:

      flow-258@helpful-kingdom-273219.iam.gserviceaccount.com
      -

      Example: Protect portions of a configuration

      -

      Endpoint configurations are typically a mix of sensitive and non-sensitive values. -It can be cumbersome when sops protects an entire configuration document as you -lose visibility into non-sensitive values, which you might prefer to store as -cleartext for ease of use.

      -

      You can use the encrypted-suffix feature of sops to selectively protect credentials:

      -
      config.yaml
      host: my.hostname
      password_sops: "this is sensitive!"
      user: my-user
      -

      Notice that password in this configuration has an added _sops suffix. -Next, encrypt only values which have that suffix:

      -
      $ sops --encrypt --in-place --encrypted-suffix "_sops" --gcp-kms projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name config.yaml
      -

      sops re-writes the file, wrapping only values having a "_sops" suffix and adding its sops metadata section:

      -
      config.yaml
      host: my.hostname
      password_sops: ENC[AES256_GCM,data:dlfidMrHfDxN//nWQTPCsjoG,iv:DHQ5dXhyOOSKI6ZIzcUM67R6DD/2MSE4LENRgOt6GPY=,tag:FNs2pTlzYlagvz7vP/YcIQ==,type:str]
      user: my-user
      sops:
      # Some items omitted for brevity:
      encrypted_suffix: _sops
      gcp_kms:
      - resource_id: projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name
      created_at: "2022-01-05T16:06:36Z"
      enc: CiQAW8BC2Au779CGdMFUjWPhNleCTAj9rL949sBvPQ6eyAC3EdESSQCnySJKD3eWX8XrtrgHqx327
      lastmodified: "2022-01-05T16:06:37Z"
      version: 3.7.1
      -

      You then use this config.yaml within your Flow specification. -Flow looks for and understands the encrypted_suffix, -and will remove this suffix from configuration keys before passing them to the connector.

      -

      Connecting to endpoints on secure networks

      -

      In some cases, your source or destination endpoint may be within a secure network, and you may not be able -to allow direct access to its port due to your organization's security policy.

      -
      tip

      If permitted by your organization, a quicker solution is to allowlist the Estuary IP addresses

      For help completing this task on different cloud hosting platforms, -see the documentation for the connector you're using.

      -

      SHH tunneling, or port forwarding, -provides a means for Flow to access the port indirectly through an SSH server. -SSH tunneling is available in Estuary connectors for endpoints that use a network address for connection.

      -

      To set up and configure the SSH server, see the guide. -Then, add the appropriate properties when you define the capture or materialization in the Flow web app, -or add the networkTunnel stanza directly to the YAML, as shown below.

      -

      Sample

      -
      source-postgres-ssh-tunnel.flow.yaml
      captures:
      acmeCo/postgres-capture-ssh:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-postgres:dev
      config:
      address: 127.0.0.1:5432
      database: flow
      user: flow_user
      password: secret
      networkTunnel:
      sshForwarding:
      # Location of the remote SSH server that supports tunneling.
      # Formatted as ssh://user@hostname[:port].
      sshEndpoint: ssh://sshUser@198.21.98.1:22
      # Private key to connect to the SSH server, formatted as multiline plaintext.
      # Use the YAML literal block style with the indentation indicator.
      # See https://yaml-multiline.info/ for details.
      privateKey: |2
      -----BEGIN RSA PRIVATE KEY-----
      MIICXAIBAAKBgQCJO7G6R+kv2MMS8Suw21sk2twHg8Vog0fjimEWJEwyAfFM/Toi
      EJ6r5RTaSvN++/+MPWUll7sUdOOBZr6ErLKLHEt7uXxusAzOjMxFKZpEARMcjwHY
      v/tN1A2OYU0qay1DOwknEE0i+/Bvf8lMS7VDjHmwRaBtRed/+iAQHf128QIDAQAB
      AoGAGoOUBP+byAjDN8esv1DCPU6jsDf/Tf//RbEYrOR6bDb/3fYW4zn+zgtGih5t
      CR268+dwwWCdXohu5DNrn8qV/Awk7hWp18mlcNyO0skT84zvippe+juQMK4hDQNi
      ywp8mDvKQwpOuzw6wNEitcGDuACx5U/1JEGGmuIRGx2ST5kCQQDsstfWDcYqbdhr
      5KemOPpu80OtBYzlgpN0iVP/6XW1e5FCRp2ofQKZYXVwu5txKIakjYRruUiiZTza
      QeXRPbp3AkEAlGx6wMe1l9UtAAlkgCFYbuxM+eRD4Gg5qLYFpKNsoINXTnlfDry5
      +1NkuyiQDjzOSPiLZ4Abpf+a+myjOuNL1wJBAOwkdM6aCVT1J9BkW5mrCLY+PgtV
      GT80KTY/d6091fBMKhxL5SheJ4SsRYVFtguL2eA7S5xJSpyxkadRzR0Wj3sCQAvA
      bxO2fE1SRqbbF4cBnOPjd9DNXwZ0miQejWHUwrQO0inXeExNaxhYKQCcnJNUAy1J
      6JfAT/AbxeSQF3iBKK8CQAt5r/LLEM1/8ekGOvBh8MAQpWBW771QzHUN84SiUd/q
      xR9mfItngPwYJ9d/pTO7u9ZUPHEoat8Ave4waB08DsI=
      -----END RSA PRIVATE KEY-----
      bindings: []
      -

      Why an open connector architecture?

      -

      Historically, data platforms have directly implemented integrations to external systems with which they interact. -Today, there are simply so many systems and APIs that companies use, -that it’s not feasible for a company to provide all possible integrations. -Users are forced to wait indefinitely while the platform works through their prioritized integration list.

      -

      An open connector architecture removes Estuary — or any company — as a bottleneck in the development of integrations. -Estuary contributes open-source connectors to the ecosystem, and in turn is able to leverage connectors implemented by others. -Users are empowered to write their own connectors for esoteric systems not already covered by the ecosystem.

      -

      Furthermore, implementing a Docker-based community specification brings other important qualities to Estuary connectors:

      -
        -
      • Cross-platform interoperability between Flow, Airbyte, and any other platform that supports the protocol
      • -
      • The abilities to write connectors in any language and run them on any machine
      • -
      • Built-in solutions for version management (through image tags) and distribution
      • -
      • The ability to integrate connectors from different sources at will, without the centralized control of a single company, thanks to container image registries
      • -
      -
      info

      In order to be reflected in the Flow web app and used on the managed Flow platform, -connectors must be reviewed and added by the Estuary team. Have a connector you'd like to add? -Contact us.

      -

      Available connectors

      -

      Learn about available connectors in the reference section

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/derivations/index.html b/pr-preview/pr-1594/concepts/derivations/index.html deleted file mode 100644 index e10f1eff62..0000000000 --- a/pr-preview/pr-1594/concepts/derivations/index.html +++ /dev/null @@ -1,455 +0,0 @@ - - - - - -Derivations | Estuary Flow - - - - - - - - - -

      Derivations

      -

      At times, the collections generated by a capture may not be suitable for your needs. -For instance, you might want to filter certain documents or add calculations to them. -Perhaps you need to unpack an array nested inside or aggregate data from many documents. -Alternatively, you might need to merge across several collections using a common key, -or employ business logic to arrive at a real-time decision. -With Flow derivations, you can perform a wide range of transformations, -from a simple remapping to complicated, self-referential, and stateful transaction processing.

      -

      In essence, a derivation is a collection -that is constructed from applying transformations to one or more sourced collections. -Derivations operate continuously, keeping up with updates to the source collections as they happen.

      -

      A derivation consists of three primary elements:

      -
        -
      • A collection that stores the output.
      • -
      • A catalog task that applies transformations to source documents -as they become available and writes the resulting documents into the derived collection.
      • -
      • An internal task state which enables aggregations, joins, and windowing.
      • -
      -

      Today, Flow enables you to write derivations using either -SQLite or TypeScript. -Additional language support is in the works.

      -
      note

      If you would like a a more hands-on approach to learn derivations, check out this tutorial!

      -

      Specification

      -

      A derivation is specified as a regular collection -with an additional derive stanza:

      -
      collections:
      # The unique name of the derivation.
      acmeCo/my/derivation:
      schema: my-schema.yaml
      key: [/key]

      # Presence of a `derive` stanza makes this collection a derivation.
      # Type: object
      derive:
      # Connector which this derivation uses.
      # One of `typescript` or `sqlite`.
      using:
      # Derivation is using the SQLite connector.
      # Optional, type: object
      sqlite:
      # SQL migrations to apply as inline SQL or file references.
      # If a referenced file does not exist
      # a stub can be generated using `flowctl generate`.
      # Optional, type: array of strings
      migrations:
      - CREATE TABLE foobar (id INTEGER PRIMARY KEY NOT NULL);
      - ../path/to/other/migration.sql

      # Derivation is using the TypeScript connector.
      # Optional, type: object
      typescript:
      # TypeScript module implementing this derivation,
      # as inline TypeScript or a relative file reference.
      # If a referenced file does not exist
      # a stub can be generated using `flowctl generate`.
      module: acmeModule.ts

      # The array of transformations that build this derived collection.
      transform:
      # Unique name of the transformation, containing only Unicode
      # Letters, Numbers, `-`, or `_` (no spaces or other punctuation).
      - name: myTransformName
      # Source collection read by this transformation.
      # Required, type: object or string.
      source:
      # Name of the collection to be read.
      # Required.
      name: acmeCo/my/source/collection
      # Partition selector of the source collection.
      # Optional. Default is to read all partitions.
      partitions: {}
      # Lower bound date-time for documents which should be processed.
      # Source collection documents published before this date-time are filtered.
      # `notBefore` is *only* a filter. Updating its value will not cause Flow
      # to re-process documents that have already been read.
      # Optional. Default is to process all documents.
      notBefore: 2023-01-23T01:00:00Z
      # Upper bound date-time for documents which should be processed.
      # Source collection documents published after this date-time are filtered.
      # Like `notBefore`, `notAfter` is *only* a filter. Updating its value will
      # not cause Flow to re-process documents that have already been read.
      # Optional. Default is to process all documents.
      notAfter: 2023-01-23T02:00:00Z

      # Lambda of this transform, with a meaning which depends
      # on the derivation connector:
      # * SQLite derivation lambdas are blocks of SQL code.
      # * TypeScript does not use `lambda`, as implementations
      # are provided by the derivation's TypeScript module.
      # Lambdas can be either inline or a relative file reference.
      lambda: SELECT $foo, $bar;
      # Delay applied to sourced documents before being processed
      # by this transformation.
      # Default: No delay, pattern: ^\\d+(s|m|h)$
      readDelay: "48h"
      # Key by which source documents are shuffled to task shards.
      # Optional, type: object.
      # If not set, the source collection key is used.
      shuffle:
      # Composite key of JSON pointers which are extracted from
      # source documents.
      key: [/shuffle/key/one, /shuffle/key/two]
      # Priority applied to documents of this transformation
      # relative to other transformations of the derivation.
      # Default: 0, integer >= 0
      priority: 0
      -

      Supported Languages

      -

      As with captures and materializations, -Flow derivations are built around a plug-able connectors architecture. -Derivation connectors encapsulate the details of how documents are transformed, -and integrate with Flow's runtime through a common protocol.

      -

      At present, Flow supports transformations in SQL using SQLite, and TypeScript.

      -

      SQLite

      -

      Flow's SQLite connector lets you write plain SQL which -is evaluated with each source collection document:

      -
      derive:
      using:
      sqlite: {}
      transforms:
      - name: fromOrders
      source: acmeCo/orders
      shuffle: any
      lambda:
      SELECT $customer,
      DATE($timestamp) AS date,
      PRINTF('$%.2f', $item_price + $sales_tax) AS cost;
      -

      Given an input document:

      -
      {
      "customer": "Wile E. Coyote",
      "timestamp": "2023-04-17T16:45:31Z",
      "item_price": 11.5,
      "sales_tax": 0.8
      }
      -

      The derivation will produce an output document like:

      -
      {
      "customer": "Wile E. Coyote",
      "date": "2023-04-17",
      "cost": "$12.30"
      }
      -

      SQLite derivations run within the context of a persistent, -managed SQLite database. -Most anything you can do within SQLite, -you can do within a SQLite derivation.

      -

      SQL Lambdas

      -

      Lambdas are blocks of one or more SQL statements. -They can be defined inline within a Flow specification, -or they can be provided as a relative file reference to a file of SQL.

      -

      Your SQL lambda code can include any number of statements, -and your statements are evaluated in the context of your applied -database migrations. -Use regular INSERT, UPDATE, and DELETE statements -in your SQL blocks to manipulate your internal tables as required.

      -

      Any rows which are returned by SQL statements, -such as SELECT and also variations like INSERT ... RETURNING, -are mapped into documents that are published -into your derived collection. -Published documents must conform to your collection schema -or your derivation task will stop due to the schema violation.

      -
      tip

      The SQLite connector wraps your lambdas in an enclosing transaction. -Do not include BEGIN or COMMIT statements in your lambdas. -You may use a SAVEPOINT or ROLLBACK TO.

      -

      Document Mapping

      -

      In most cases, each named output column of your query becomes -a top-level property of its corresponding document.

      -

      When you directly select a $parameter its corresponding field name is used. -For example, a projection with field name my-field would be queried as -SELECT $my_field; and map into a document like {"my-field":"value"}.

      -

      A named column such as SELECT $x * 100 AS foo;, -maps to a property using the provided name: {"foo": 200}.

      -

      Your selected columns may included nested JSON documents, -such as SELECT 'hello' AS greeting, JSON_ARRAY(1, 'two', 3) AS items;. -The connector looks for SQLite TEXT values which can be parsed -into JSON arrays or objects and embeds them into the mapped document: -{"greeting": "hello", "items": [1, "two", 3]}. -If parsing fails, the raw string is used instead.

      -

      As a special case if your query selects a single column -having a name that begins with json or JSON, -as is common when working with SQLite's JSON functions, -then that column will become the output document. -For example SELECT JSON_OBJECT('a', 1, 'b', JSON('true')); maps into document {"a": 1, "b": true}. -This can be used to build documents with dynamic top-level properties.

      -

      Parameters

      -

      Your SQL lambda will execute with every source document of the collection it transforms. -To access locations within the document, you utilize $parameter placeholders -in your SQL code, which bind to projections of the source document. -You can use both your defined projections -as well as projections which are statically inferred from your source collection's schema.

      -

      You can access projected fields that are top-level -as well as those which are nested within a source document. -Consider the following schematized document:

      -
      {"top-level": true, "object": {"foo": 42}, "arr": ["bar"]}
      -

      In your SQL code, you can use parameters like $top_level, $object$foo, or $arr$0. -If you're unsure of what parameter to use for a given field, -try typing something approximate and Flow will suggest the appropriate $parameter.

      -

      Migrations

      -

      The SQLite connector offers a managed, persistent SQLite database -that can accommodate any number of tables, indices, views, triggers, and other schema, -as defined by your database migrations. -To add a migration, simply append it to the migrations array, -either as a block of inline SQL statements -or as a relative path to a file of SQL statements:

      -
      derive:
      using:
      sqlite:
      migrations:
      - CREATE TABLE foo (thing INTEGER NOT NULL);
      CREATE INDEX idx_foo_thing foo (thing);
      - ../path/to/another/migration.sql
      - ALTER TABLE foo ADD COLUMN other_thing TEXT NOT NULL;
      - https://example.com/yet/another/migration.sql
      -
      caution

      You cannot change an existing migration once it has been published. -Instead, add a new migration which applies your desired schema.

      -

      The tables and other schema you create through database migrations -are the internal state of your derivation. -They don't directly cause any documents to be published into your derived collection, -but changes made to tables in one SQL lambda execution are immediately visible to others. -Changes are also durable and transactional: -a Flow derivation transaction commits new documents to the derived collection -in lockstep with committing changes made to your task tables.

      -

      Flow is responsible for the persistence and replication of your SQLite database, -and the SQLite connector tracks and will apply your migrations as needed.

      -

      Performance

      -

      Your observed performance will of course depend on the specifics of your use case, -including the size of your task states -and the complexity of your source documents and transformations.

      -

      Generally speaking, SQLite is very performant -and Flow's SQLite connector strives to drive it as efficiently as possible. -Real-world use cases are observed to process many tens -of thousands of documents per second on a single core.

      -

      Flow can also scale your task without downtime -by creating point-in-time clones of the database -that subdivide the overall workload and storage of the task. -Once created, these subdivisions process in parallel across -multiple physical machines to enhance performance.

      -

      TypeScript

      -

      Flow's TypeScript derivation connector transforms your source documents -by executing methods of a TypeScript class which you implement. -TypeScript derivations are executed using Deno -and let you take advantage of the broad ecosystem of -available third-party JavaScript and TypeScript libraries, -as well as native code compiled to WASM.

      -

      TypeScript derivations are strongly typed: -Flow maps the JSON schemas of your source and output collections -into corresponding TypeScript types, -which are type-checked as you develop and test your derivation. -This helps catch a wide variety of potential bugs and avoid accidental violations of your collection data contracts.

      -

      Modules

      -

      The bulk of a TypeScript derivation lives in its associated module, -which is a TypeScript source file that exports the class that implements your derivation.

      -

      Each derivation also has an accompanying, generated interfaces module. -Interface modules are managed by Flow and are purely advisory: -they're generated to improve your development experience, -but any changes you make are ignored.

      -

      The flowctl generate --source path/to/my/derivation.flow.yaml CLI command -will generate interface modules under paths like -flow_generated/typescript/acmeCo/my-derivation.ts, -under the top-level directory under --source having a flow.yaml or flow.json file.

      -

      It will also generate a deno.json file in your top-level directory, -which is designed to work with developer tooling like -VSCode's Deno extension.

      -

      See the Current Account Balances tutorial for a concrete example of modules.

      -

      State

      -

      The abstract IDerivation class generated within the interfaces module -includes additional, experimental methods which can be used for -persisting and recovering internal state of the connector.

      -

      Consult the generated implementation and feel free to reach out to support -if you'd like more information on building stateful TypeScript derivations.

      -

      Transformations

      -

      A transformation binds a source collection to a derivation, -causing its documents to be read and processed by the derivation connector.

      -

      Read source documents are first shuffled on a shuffle key -to co-locate the processing of documents that have equal shuffle keys. -The transformation then processes documents by invoking lambdas: -user-defined functions that accept documents as arguments, -return documents in response, -and potentially update internal task state.

      -

      A derivation may have many transformations, -and each transformation has a long-lived and stable name. -Each transformation independently reads documents from its -source collection and tracks its own read progress. -More than one transformation can read from the same source collection, -and transformations may also source from their own derivation, -enabling cyclic data-flows and graph algorithms.

      -

      Transformations may be added to or removed from a derivation at any time. -This makes it possible to, for example, add a new collection into an -existing multi-way join, or gracefully migrate to a new source -collection without incurring downtime. -However, renaming a running transformation is not possible. -If attempted, the old transformation is dropped and -a new transformation under the new name is created, -which begins reading its source collection all over again.

      -
      - graph LR; - d[Derivation]; - t[Transformation]; - s[Internal State]; - l[Lambda]; - c[Sourced Collection]; - o[Derived Collection]; - d-- has many -->t; - d-- has one -->s; - d-- has one -->o; - c-- reads from -->t; - t-- invokes -->l; - l-- updates -->s; - s-- queries -->l; - l-- publishes to -->o; -
      -

      Sources

      -

      The source of a transformation is a collection. -As documents are published into the source collection, -they are continuously read and processed by the transformation.

      -

      A partition selector may be provided -to process only a subset of the source collection's logical partitions. -Selectors are efficient: only partitions that match the selector are read, -and Flow can cheaply skip over partitions that don't.

      -

      Derivations re-validate their source documents against -the source collection's schema as they are read. -This is because collection schemas may evolve over time, -and could have inadvertently become incompatible with -historical documents of the source collection. -Upon a schema error, the derivation will pause and -give you an opportunity to correct the problem.

      -

      Shuffles

      -

      As each source document is read, it's shuffled — or equivalently, mapped — -on an extracted key.

      -

      If you're familiar with data shuffles in tools like MapReduce, -Apache Spark, or Flink, the concept is very similar. -Flow catalog tasks scale out into multiple shards, -each running in parallel on different physical machines, -where each shard processes a subset of source documents.

      -

      Shuffles let Flow identify the shard that should process a particular -source document, in order to co-locate that processing with other -documents it may need to know about.

      -

      For example, transforms of the -Approving Transfers example -shuffle on either /sender or /recipient in order to -process documents that debit or credit accounts on the specific shard -that is uniquely responsible for maintaining the balance of a given account.

      -
      - graph LR; - subgraph s1 [Source Partitions] - p1>acmeBank/transfers/part-1]; - p2>acmeBank/transfers/part-2]; - end - subgraph s2 [Derivation Task Shards] - t1([derivation/shard-1]); - t2([derivation/shard-2]); - end - p1-- sender: alice -->t1; - p1-- recipient: bob -->t2; - p2-- recipient: alice -->t1; - p2-- sender: bob -->t2; -
      -

      Flow offers three modes for configuring document shuffles: key, any, and lambda.

      -

      shuffle: key

      -

      Shuffle keys are defined as an array of JSON pointers to locations -that should be extracted from your source documents. -This array forms the composite key over which your documents are shuffled:

      -
      transforms:
      - name: fromOrders
      source: acmeCo/orders
      shuffle:
      key: [/item/product_id, /customer_id]
      # Flow guarantees that the same shard will process the user's lambda
      # for all instances of a specific (product ID, customer ID) tuple.
      lambda: ...
      -

      If a derivation has more than one transformation, -the shuffle keys of all transformations must align with one another -in terms of the extracted key types (string vs integer) -as well as the number of components in a composite key.

      -

      For example, one transformation couldn't shuffle transfers on [/id] -while another shuffles on [/sender], because sender is a string and -id an integer.

      -

      Similarly mixing a shuffle of [/sender] alongside [/sender, /recipient] -is prohibited because the keys have different numbers of components.

      -

      shuffle: any

      -

      If your lambda doesn't rely on any task state then it may not matter which -task shard processes a given source document. -In these instances you can use shuffle: any, which allows source documents -to be processed by any available task shard.

      -

      This is common for transformation lambdas which perform basic filtering -or mapping of source documents and which don't require any joined task state.

      -
      transforms:
      - name: fromOrders
      source: acmeCo/orders
      shuffle: any
      # The user's lambda is a pure function and can be evaluated by any available shard.
      lambda:
      SELECT $customer_id, $item_price WHERE $item_price > 100;
      -

      shuffle: lambda

      -
      Warning

      Computed shuffles are in active development and are not yet functional.

      -

      Your source documents may not always contain an appropriate value to shuffle upon. -For instance, you might want to shuffle on product ID and order date, -but your source documents contain only an order timestamp field.

      -

      You can use shuffle: lambda to define a function that maps your -source document into the appropriate shuffle key:

      -
      transforms:
      - name: fromOrders
      source: acmeCo/orders
      shuffle:
      lambda: SELECT $product_id, DATE($order_timestamp);
      # Flow guarantees that the same shard will process the user's lambda
      # for all instances of a specific (product ID, date) tuple.
      lambda: ...
      -

      Your shuffle lambda must return exactly one row, and its columns and -types must align with the other shuffles of your derivation transformations.

      -

      Flow must know the types of your composite shuffle key. -In most cases it will infer these types from the shuffle: key of another transformation. -If you have no shuffle: key transformations, Flow will ask that you explicitly tell it your shuffle types:

      -
      derive:
      using:
      sqlite: {}
      shuffleKeyTypes: [integer, string]
      transforms:
      - name: fromOrders
      source: acmeCo/orders
      shuffle:
      lambda: SELECT $product_id, DATE($order_timestamp);
      lambda: ...
      -

      Lambdas

      -

      Lambdas are user-defined functions that are invoked by transformations. -They accept documents as arguments -and return transformed documents in response. -Lambdas can update internal task state, -publish documents into the derived collection, -or both.

      -

      Lambdas are "serverless": Flow manages the execution -and scaling of your transformation lambdas on your behalf.

      -

      Processing order

      -

      Transformations may simultaneously read from many source collections, -or even read from the same source collection multiple times.

      -

      Roughly speaking, the derivation will globally process transformations and -their source documents in the time-based order in which the source documents -were originally written to their source collections. -This means that a derivation started a month ago -and a new copy of the derivation started today, -will process documents in the same order and arrive at the same result. -Derivations are repeatable.

      -

      More precisely, processing order is stable for each individual shuffle key, -though different shuffle keys may process in different orders if more than -one task shard is used.

      -

      Processing order can be attenuated through a read delay -or differentiated read priority.

      -

      Read delay

      -

      A transformation can define a read delay, which will hold back the processing -of its source documents until the time delay condition is met. -For example, a read delay of 15 minutes would mean that a source document -cannot be processed until it was published at least 15 minutes ago. -If the derivation is working through a historical backlog of source documents, -than a delayed transformation will respect its ordering delay relative -to the publishing times of other historical documents also being read.

      -

      Event-driven workflows are a great fit for reacting to events as they occur, -but aren’t terribly good at taking action when something hasn’t happened:

      -
      -
        -
      • A user adds a product to their cart, but then doesn’t complete a purchase.
      • -
      • A temperature sensor stops producing its expected, periodic measurements.
      • -
      -
      -

      A common pattern for tackling these workflows in Flow is to -read a source collection without a delay and update an internal state. -Then, read a collection with a read delay -and determine whether the desired action has happened or not. -For example, source from a collection of sensor readings -and index the last timestamp of each sensor. -Then, source the same collection again with a read delay: -if the register timestamp isn't more recent -than the delayed source reading, -the sensor failed to produce a measurement.

      -

      Flow read delays are very efficient and scale better -than managing very large numbers of fine-grain timers.

      -

      See Grouped Windows of Transfers for an example using a read delay -Learn more from the Citi Bike "idle bikes" example

      -

      Read priority

      -

      Sometimes it's necessary for all documents of a source collection -to be processed by a transformation before any documents of some -other source collection are processed, regardless of their -relative publishing time. -For example, a collection may have corrections that should be -applied before the historical data of another collection -is re-processed.

      -

      Transformation priorities allow you to express the relative -processing priority of a derivation's various transformations. -When priorities are not equal, all available source documents -of a higher-priority transformation -are processed before any source documents -of a lower-priority transformation.

      -

      Internal State

      -

      Derivation tasks often require an internal state, -perhaps to hold a partial aggregation or join result. -Internal state is not a direct part of the output of a derivation. -Instead, transformation lambdas query and update internal state -as they process source documents and return derived documents.

      -

      For SQLite derivations, -the entire SQLite database is the internal state of the task. -TypeScript derivations can use in-memory states with a -recovery and checkpoint mechanism. -Estuary intends to offer an additional mechanisms for -automatic internal state snapshot and recovery in the future.

      -

      The exact nature of internal task states vary, -but under the hood they're backed by a replicated -embedded RocksDB instance which is co-located -with the task shard execution contexts that Flow manages. -As contexts are assigned and re-assigned, -their state databases travel with them.

      -

      If a task shard needs to be scaled out, -Flow is able to perform an online split, -which cheaply clones its state database into two new databases -— and paired shards — which are re-assigned to other machines.

      -

      Where to accumulate?

      -

      Derivation collection schemas may have -reduction annotations, -and lambdas can be combined with reductions in interesting ways. -You may be familiar with map and reduce functions -built into languages like -Python, -JavaScript, -and many others -or have used tools like MapReduce or Spark. -In functional terms, lambdas you write within Flow are "mappers," -and reductions are always done -by the Flow runtime using your schema annotations.

      -

      This means that, when you implement a derivation, -you get to choose where accumulation will happen:

      -
        -
      1. Your lambdas can update and query aggregates stored in internal task state. -Approving Transfers is an example that maintains account balances in a SQLite table.
      2. -
      3. Or, your lambdas can compute changes of an aggregate, which are then reduced by Flow using reduction annotations. -Current Account Balances is an example that combines a lambda with a reduce annotation.
      4. -
      -

      These two approaches can produce equivalent results, -but they do so in very different ways.

      -

      Accumulate in Internal Task State

      -

      You can accumulate using the internal state of your derivation: -for instance, by using an internal table within your SQLite derivation. -You then write lambdas which update that state, -or query it to publish derived documents.

      -

      For example, consider a collection that’s summing a value:

      -
      TimeStateLambdasDerived Document
      T00UPDATE val = val + 5; SELECT val;5
      T15UPDATE val = val - 1; SELECT val;4
      T24UPDATE val = val + 2; SELECT val;6
      T36
      -

      Using a derivation's internal state is a great solution if you expect to -materialize the derived collection into a non-transactional store. -That's because its documents are complete statements of the current answer, -and can be correctly applied to systems that support only at-least-once semantics.

      -

      They’re also well-suited for materializations into endpoints that aren't stateful, -such as Pub/Sub systems or Webhooks.

      -

      Accumulate in a Database

      -

      To accumulate in your materialization endpoint, such as a database, -you define a derivation with a reducible schema -and implement lambdas which publish the changes to a current answer. -The Flow runtime then uses your reduction annotations -to combine the documents published into your derived collection.

      -

      Later, when the collection is materialized, your reduction annotations -are applied again to reduce each collection document into a final, -fully-reduced value for each collection key -that's kept up to date in the materialized table.

      -

      A key insight is that the database is -the only stateful system in this scenario. -The derivation itself is stateless, with lambdas that are pure functions, -which is typically extremely performant.

      -

      Returning to our summing example:

      -
      TimeDBLambdasDerived Document
      T00SELECT 5;5
      T15SELECT -1;-1
      T24SELECT 2;2
      T36
      -

      This works especially well when materializing into a transactional database. -Flow couples its processing transactions with corresponding database transactions, -ensuring end-to-end “exactly once” semantics.

      -

      When materializing into a non-transactional store, -Flow is only able to provide weaker “at least once” semantics; -it’s possible that a document may be combined into a database value more than once. -Whether that’s a concern depends a bit on the task at hand. -Some reductions like merge can be applied repeatedly without changing the result, -while in other use cases approximations are acceptable. -For the summing example above, -"at-least-once" semantics could give an incorrect result.

      -

      Learn more in the derivation pattern examples of Flow's repository

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/flowctl/index.html b/pr-preview/pr-1594/concepts/flowctl/index.html deleted file mode 100644 index 2d254f1605..0000000000 --- a/pr-preview/pr-1594/concepts/flowctl/index.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - -flowctl | Estuary Flow - - - - - - - - - -

      flowctl

      -

      There are two ways to work with Flow: through the web app, and using the flowctl command-line interface. -flowctl gives you more direct control over the files and directories that comprise your Data Flows. -You can work with any catalog to which you have access, regardless of whether it was created from the command line or in the web app.

      -

      You can also authorize Flow users and roles and generate TypeScript modules to write custom transformations for your derivations — workflows that aren't yet available in the web app.

      -

      flowctl is the only Flow binary that you need to work with, -so distribution and upgrades are all simple.

      -

      Installation and setup

      -

      flowctl binaries for MacOS and Linux are available. Fow Windows, install Windows Subsystem for Linux (WSL) to run Linux on Windows, or use a remote development environment.

      -
        -
      1. -

        Copy and paste the appropriate script below into your terminal. This will download flowctl, make it executable, and add it to your PATH.

        -
          -
        • For Linux:
        • -
        -
        sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-x86_64-linux' && sudo chmod +x /usr/local/bin/flowctl
        -
          -
        • For Mac:
        • -
        -
        sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-multiarch-macos' && sudo chmod +x /usr/local/bin/flowctl
        -

        Alternatively, Mac users can install with Homebrew:

        -
        brew tap estuary/flowctl
        brew install flowctl
        -

        You can also find the source files on GitHub here.

        -
      2. -
      3. -

        To connect to your Flow account and start a session, use an authentication token from the web app.

        -
      4. -
      -

      User guides

      -

      View guides for common flowctl workflows.

      -

      flowctl subcommands

      -

      flowctl includes several top-level subcommands representing different functional areas. Each of these include multiple nested subcommands. -Important top-level flowctl subcommands are described below.

      -
        -
      • -

        auth allows you to authenticate your development session in your local development environment. -It's also how you provision Flow roles and users. Learn more about authentication.

        -
      • -
      • -

        catalog allows you to work with your organization's current active catalog entities. You can investigate the current Data Flows, -pull specifications for local editing, test and publish specifications that you wrote or edited locally, -and delete entities from the catalog.

        -
      • -
      • -

        collections allows you to work with your Flow collections. You can read the data from the collection and output it to stdout, or list the journals or journal fragments that comprise the collection. Learn more about reading collections with flowctl.

        -
      • -
      • -

        draft provides an alternative method for many of the actions you'd normally perform with catalog, but common workflows have more steps.

        -
      • -
      -

      You can access full documentation of all flowctl subcommands from the command line by passing the --help or -h flag, for example:

      -
        -
      • -

        flowctl --help lists top-level flowctl subcommands.

        -
      • -
      • -

        flowctl catalog --help lists subcommands of catalog.

        -
      • -
      -

      Editing Data Flows with flowctl

      -

      flowctl allows you to work locally on the specification files that define your Data Flows. -You'll often need to move these specifications back and forth between your local environment and the catalog -of published entities.

      -

      The basic steps of this workflow are listed below, along with a diagram of the subcommands you'd use to accomplish them. -Keep in mind that there's no single, correct way to work with flowctl, -but we recommend this method to get started.

      -
        -
      • -

        List all the active specifications in the catalog, which you can then pull into your local environment. -You can filter the output by prefix or entity type. -For example, flowctl catalog list --prefix acmeCo/sales/ --collections only lists collections under the -acmeCo/sales/ prefix.

        -
      • -
      • -

        Pull a group of active specifications directly, resulting in local source files. You can refine results by prefix or entity type as described above (1).

        -

        Note that if there are already files in your working directory, flowctl must reconcile them with the newly pulled specification. -Learn more about your options.

        -
      • -
      • -

        Make edits locally.

        -
      • -
      • -

        Test local specifications (2).

        -
      • -
      • -

        Publish local specifications to the catalog (3).

        -
      • -
      -
      - graph LR; - d[Local environment]; - c[Active catalog]; - d-- 2: flowctl catalog test -->d; - d-- 3: flowctl catalog publish -->c; - c-- 1: flowctl catalog pull-specs -->d; -
      -

      View the step-by-step guide.

      -

      Reconciling specifications in local drafts

      -

      When you pull specifications to your working directory directly using flowctl catalog pull-specs, -there may be conflicts between the existing files in that directory and the specifications you pull.

      -

      By default, flowctl catalog pull-specs will abort if it detects an existing file with the same name as a specification -it is attempting to pull. You can change this behavior with the --existing flag:

      -
        -
      • -

        --existing=overwrite pulls the new versions of conflicting files in place of the old versions.

        -
      • -
      • -

        --existing=keep keeps the old versions of conflicting files.

        -
      • -
      • -

        --existing=merge-specs performs a simple merge of new and old versions of conflicting files. -For example, if an existing flow.yaml file references collections a and b, -and the new version of flow.yaml references collections a and c, -the merged version will reference collections a, b, and c.

        -
      • -
      -

      Development directories

      -

      Flow specifications and other files are written to your working directory when you run flowctl draft develop or flowctl catalog pull-specs.

      -

      They typically include:

      -
        -
      • -

        flow.yaml: -The main specification file that imports all other Flow specification files created in a single operation. -As part of local development, you may add new specifications that you create as imports.

        -
      • -
      • -

        flow_generated/: -Directory of generated files, including TypeScript classes and interfaces. -See TypeScript code generation.

        -
      • -
      • -

        <prefix-name>/: -Directory of specifications that you pulled. Its name corresponds to your catalog prefix. Its contents will vary, but it may contain various YAML files and subdirectories.

        -
      • -
      • -

        package.json and package-lock.json: -Files used by npm to manage dependencies and your Data Flow's associated JavaScript project. -You may customize package.json, -but its dependencies stanza will be overwritten by the -npmDependencies -of your Flow specification source files, if any exist.

        -
      • -
      -

      When you run commands like flowctl catalog publish or flowctl draft author, you can use the --source-dir flag -to push specifications from a directory other than your current working directory, -for example, flowctl draft author --source-dir ../AcmeCoNew/marketing.

      -

      TypeScript code generation

      -

      TypeScript files are used in the Flow catalog both as part of the automatic build process, -and to define lambdas functions for derivations, which requires your input.

      -

      As part of the Data Flow build process, Flow translates your -schemas -into equivalent TypeScript types on your behalf. -These definitions live within flow_generated/ in your Data Flow's build directory , -and are frequently over-written by invocations of flowctl. -Files in this subdirectory are human-readable and stable. -You may want to commit them as part of a GitOps-managed project, but this isn't required.

      -

      Whenever you define a derivation that uses a lambda, -you must define the lambda in an accompanying TypeScript module, and reference that module -in the derivation's definition. To facilitate this, -you can generate a stub of the module using flowctl generate -and simply write the function bodies. -Learn more about this workflow.

      -

      If a TypeScript module exists, flowctl will never overwrite it, -even if you update or expand your specifications such that the required interfaces have changed.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/import/index.html b/pr-preview/pr-1594/concepts/import/index.html deleted file mode 100644 index c52661d9d3..0000000000 --- a/pr-preview/pr-1594/concepts/import/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - -Imports | Estuary Flow - - - - - - - - - -

      Imports

      -

      When you work on a draft Data Flow using flowctl draft, -your Flow specifications may be spread across multiple files. -For example, you may have multiple materializations that read from collections defined in separate files, -or you could store a derivation separately from its tests. -You might also reference specifications that aren't in your local draft. -For example, you might create a derivation with a source collection that is not in your local draft.

      -

      When you publish your draft, Flow automatically resolves references to specifications across the entirety of the catalog. -This is possible because every entity in Flow has a globally unique name.

      -

      Alternatively, you can explicitly add other local specification files to the Data Flow's build process by including an import section -in the Flow specification file you'll publish. -When the draft is published, the imported specifications are treated as part of the file -into which they are imported. -All entities in the draft will be used to overwrite any existing version of those entities in the global catalog.

      -

      Explicit imports are useful when you need to update multiple components of a data flow at the same time, -but they're in separate files. -For example, when you update a derivation, you must also update its test(s) at the same time to prevent failures. -You could import test.yaml into my-derivation.yaml and then publish my-derivation.yaml to update both entities in the catalog.

      -

      A common pattern for a given draft is to have a single top-level specification -file which explicitly imports all the others. -Flow automatically generates such a top-level file for your draft when you begin a local work session -using flowctl draft develop.

      -

      Specification

      -

      The import section is structured as a list of partial or absolute URIs, -which Flow always evaluates relative to the base directory of the current source file. -For example, these are possible imports within a collection:

      -
      # Suppose we're in file "/path/dir/flow.yaml"
      import:
      - sub/directory/flow.yaml # Resolves to "file:///path/dir/sub/directory/flow.yaml".
      - ../sibling/directory/flow.yaml # Resolves to "file:///path/sibling/directory/flow.yaml".
      - https://example/path/flow.yaml # Uses the absolute url.
      -

      The import rule is flexible; a collection doesn’t have to do anything special -to be imported by another, -and flowctl can even directly build remote sources:

      -
      # Test an example from a GitHub repository.
      $ flowctl draft test --source https://raw.githubusercontent.com/estuary/flow-template/main/word-counts.flow.yaml
      -

      Fetch behavior

      -

      Flow resolves, fetches, and validates all imports in your local environment during the catalog build process, -and then includes their fetched contents within the published catalog on the Estuary servers. -The resulting catalog entities are thus self-contained snapshots of all resources -as they were at the time of publication.

      -

      This means it's both safe and recommended to directly reference -an authoritative source of a resource, such as a third-party JSON schema, as well as resources within your private network. -It will be fetched and verified locally at build time, -and thereafter that fetched version will be used for execution, -regardless of whether the authority URL itself later changes or errors.

      -

      Import types

      -

      Almost always, the import stanza is used to import other Flow -specification files. -This is the default when given a string path:

      -
      import:
      - path/to/source/catalog.flow.yaml
      -

      A long-form variant also accepts a content type of the imported resource:

      -
      import:
      - url: path/to/source/catalog.flow.yaml
      contentType: CATALOG
      -

      Other permitted content types include JSON_SCHEMA, -but these are not typically used and are needed only for advanced use cases.

      -

      JSON Schema $ref

      -

      Certain catalog entities, like collections, commonly reference JSON schemas. -It's not necessary to explicitly add these to the import section; -they are automatically resolved and treated as an import. -You can think of this as an analog to the JSON Schema $ref keyword, -which is used to reference a schema that may -be contained in another file.

      -

      The one exception is schemas that use the $id keyword -at their root to define an alternative canonical URL. -In this case, the schema must be referenced through its canonical URL, -and then explicitly added to the import section -with JSON_SCHEMA content type.

      -

      Importing derivation resources

      -

      In many cases, derivations in your catalog will need to import resources. -Usually, these are TypeScript modules that define the lambda functions of a transformation, -and, in certain cases, the NPM dependencies of that TypeScript module.

      -

      These imports are specified in the derivation specification, not in the import section of the specification file.

      -

      For more information, see Derivation specification and creating TypeScript modules.

      -

      Import paths

      - -

      If a catalog source file foo.flow.yaml references a collection in bar.flow.yaml, -for example as a target of a capture, -there must be an import path where either foo.flow.yaml -imports bar.flow.yaml or vice versa.

      -

      When you omit the import section, Flow chooses an import path for you. -When you explicitly include the import section, you have more control over the import path.

      -

      Import paths can be direct:

      -
      - graph LR; - foo.flow.yaml-->bar.flow.yaml; -
      -

      Or they can be indirect:

      -
      - graph LR; - bar.flow.yaml-->other.flow.yaml; - other.flow.yaml-->foo.flow.yaml; -
      -

      The sources must still have an import path -even if referenced from a common parent. -The following would not work:

      -
      - graph LR; - parent.flow.yaml-->foo.flow.yaml; - parent.flow.yaml-->bar.flow.yaml; -
      -

      These rules make your catalog sources more self-contained -and less brittle to refactoring and reorganization. -Consider what might otherwise happen if foo.flow.yaml -were imported in another project without bar.flow.yaml.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/index.html b/pr-preview/pr-1594/concepts/index.html deleted file mode 100644 index 038f5e0f31..0000000000 --- a/pr-preview/pr-1594/concepts/index.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - -Concepts | Estuary Flow - - - - - - - - - -

      Concepts

      -

      Flow helps you define data pipelines, known as Data Flows, that connect multiple data systems, APIs, and storage, and optionally transform data along the way. -Data Flows are defined by a set of Flow specifications and deployed using either the web application or the command-line interface.

      -

      This page introduces concepts and terms that will help you begin working with Flow and better understand its underlying mechanisms. -These concepts are discussed in more detail on subsequent pages.

      -

      -

      Working with Flow

      -

      There are two main environments in which you can work with Flow: -the web application or your preferred local environment using the flowctl command-line tool.

      -

      Web application

      -

      The Flow web application is where you'll most likely create, monitor, and update your Data Flows. -You can find it at dashboard.estuary.dev. -The app is backed by secure, cloud-hosted infrastructure that Estuary manages.

      -

      Take a tour of the web app.

      -

      Create your first Data Flow with the web app.

      -

      flowctl

      -

      flowctl is a command-line interface for working with Flow's public API. -Using flowctl, developers can inspect, edit, test, and publish Data Flows — just as with the web application. -For example, you can create a Data Flow with the web app, and then use flowctl to fetch it into files that you manage within a Git repo.

      -

      Learn more about flowctl

      -

      Essential concepts

      -

      In this section, you'll find the most important Flow terms and concepts. If you're new to Flow, start here.

      -

      A complete end-to-end Data Flow between two systems has three components:

      -
        -
      • Capture: Flow ingests data from an outside source.
      • -
      • Collections: Flow maintains the captured data in cloud storage.
      • -
      • Materialization: Flow pushes data to an outside destination.
      • -
      - -
      - graph LR; - Capture-->Collection; - Collection-->Materialization; -
      -

      It may also include:

      -
        -
      • Derivations: You apply a transformation to data in a collection, resulting in a new collection.
      • -
      -

      All of these entities are described in the catalog.

      -

      Catalog

      -

      The catalog is the set of active entities that comprise all Data Flows: captures, materializations, derivations, collections, schemas, tests, and more.

      -

      All catalog entities are defined in Flow specification files — either manually, by you, or generated by the Flow web app. You create the specifications as drafts, and publish them to add them to the catalog.

      -

      You can mix and match catalog entities to create a variety of Data Flows.

      -

      Learn more about the catalog

      -
      -

      Collections

      -

      Collections represent datasets within Flow. -All captured documents are written to a collection, and all materialized documents are read from a collection.

      -

      Collections are a real-time data lake. -Like a traditional data lake, the documents that make up a collection are stored as plain JSON in your cloud storage bucket. -Unlike a traditional data lake, updates to the collection are reflected downstream in the data flow -within milliseconds.

      -

      Documents in collections are stored indefinitely in your cloud storage bucket (or may be managed with your regular bucket lifecycle policies). -This means that the full historical content of a collection is available to support future data operations and perform backfills without going back to the source.

      -

      Each collection has a keyed schema against which incoming documents are validated. -This ensures that data is always clean and organized.

      -

      Learn more about collections

      -
      -

      Captures

      -

      A capture is a Flow task that ingests data from an external source into one or more Flow collections. -Documents continuously move from the source into Flow; -as new documents become available at the source, -Flow validates their schema and adds them to their corresponding collection. -Captures interface with source systems using connectors.

      -

      Learn more about captures

      -
      -

      Materializations

      -

      A materialization is a Flow task that pushes data from one or more collections -to an external destination. -Documents continuously moves from each Flow collection to the destination. -Materializations are the conceptual inverse of captures.

      -

      As new documents become available within bound collections, the materialization -keeps the destination up to date within milliseconds, or as fast as that system allows. -Materializations interface with destinations using connectors.

      -

      Learn more about materializations

      -
      -

      Endpoints

      -

      Endpoints are the source systems from which Flow captures data and the destination systems to which Flow materializes data. All kinds of data systems can be endpoints, including databases, key/value stores, streaming pub/sub systems, SaaS products, and cloud storage locations.

      -

      Flow connects to this wide variety of endpoints using connectors.

      -
      -

      Connectors

      -

      Connectors are plugin components that allow Flow to interface with endpoint data systems. -They power captures and materializations.

      -

      Flow uses an open-source connector model. -Many connectors are made by Estuary, and others are made by third parties. -Because connectors are open-source and kept separate from Flow itself, -new integrations can be added and updated quickly. -This is important, as the landscape of data systems and platforms is constantly evolving.

      -

      All currently supported connectors are ready to use in the Flow web application. -They're also available as Docker images, each encapsulating the details of working with -a particular source or destination system.

      -

      Learn more about connectors

      -
      -

      Intermediate concepts

      -

      In this section, you'll find important concepts that are optional for basic usage. -Read this to unlock more powerful workflows.

      -

      Derivations

      -

      A derivation is a collection that results from the transformation of one or more other collections, -which is continuously updated in sync with its source collection(s).

      -

      You can use derivations to map, reshape, and filter documents. -They can also be used to tackle complex stateful streaming workflows, -including joins and aggregations, -without windowing and scaling limitations.

      -

      Learn more about derivations

      -
      -

      Schemas

      -

      All collections in Flow have an associated -JSON schema -against which documents are validated every time they're written or read. -Schemas are critical to how Flow ensures the integrity of your data. -Flow validates your documents to ensure that -bad data doesn't make it into your collections — or worse, -into downstream data products!

      -

      JSON schema is a flexible standard for representing structure, invariants, -and other constraints over your documents. -Schemas can be very permissive, highly exacting, or somewhere in between.

      -

      Flow pauses catalog tasks when documents don't match the collection schema, -alerting you to the mismatch and allowing you to fix it before it creates a bigger problem.

      -

      Learn more about schemas

      -
      -

      Reductions

      -

      Every Flow collection schema includes a key. -The key is used to identify collection documents and determine how they are grouped. -When a collection is materialized into a database table, for example, its key becomes -the SQL primary key of the materialized table.

      -

      Flow also uses the key to reduce documents in collections, making storage and materializations more efficient. -If multiple documents of a given key are added to a collection, -by default, the most recent document supersedes all previous documents of that key.

      -

      You can exert more control over your data by changing the default reduction strategy. -By doing so, you can deeply merge documents, maintain running counts, -and achieve other complex aggregation behaviors.

      -

      Learn more about reductions

      -
      -

      Tests

      -

      Tests become an important part of your Data Flows when you add derivations and customized reduction behavior. -You use tests to verify the end-to-end behavior of your collections and derivations.

      -

      A test is a sequence of ingestion or verification steps. -Ingestion steps ingest one or more document fixtures into a collection, -and verification steps assert that the contents of another derived collection match a test expectation.

      -

      Learn more about tests

      -
      -

      Tasks

      -

      Captures, derivations, and materializations are collectively referred to as catalog tasks. -They are the "active" components of a Data Flow, each running continuously and reacting to documents -as they become available.

      -

      Collections, by way of comparison, are inert. They reflect data at rest, and are acted upon by -catalog tasks:

      -
        -
      • A capture adds documents to a collection pulled from a source endpoint.
      • -
      • A derivation updates a collection by applying transformations to other collections.
      • -
      • A materialization reacts to changes of a collection to update a destination endpoint.
      • -
      -
      -

      Resources and bindings

      -

      A resource is an addressable collection of data within a source or destination system. -The exact meaning of a resource is up to the endpoint and its connector. For example:

      -
        -
      • Resources of a database endpoint might be its individual tables.
      • -
      • Resources of a Kafka cluster might be its topics.
      • -
      • Resources of a SaaS connector might be its various API feeds.
      • -
      -

      When you create capture or materialization, it connects a collection to a resource through a binding. -A given capture or materialization may have multiple bindings, which connect multiple collections to different resources.

      -
      -

      Storage mappings

      -

      Flow collections use cloud storage buckets for the durable storage of data. -Storage mappings define how Flow maps your various collections into your storage buckets and prefixes.

      -

      Learn more about storage mappings

      -

      Advanced concepts

      -

      This section discusses advanced Flow concepts. The information here unlocks -a more technical understanding of how Flow works, and may be helpful in advanced use cases.

      -

      Journals

      -

      Journals provide the low-level storage for Flow collections. -Each logical and physical partition of a collection is backed by a journal.

      -

      Task shards also use journals to provide for their durability -and fault tolerance. -Each shard has an associated recovery log, which is a journal into which -internal checkpoint states are written.

      -

      Learn more about journals

      -

      Task shards

      -

      Task shards are the unit of execution for a catalog task. -A single task can have many shards, which allow the task to scale across -many machines to achieve more throughput and parallelism.

      -

      Shards are created and managed by the Flow runtime. -Each shard represents a slice of the overall work of the catalog task, -including its processing status and associated internal checkpoints. -Catalog tasks are created with a single shard, -which can be repeatedly subdivided at any time — with no downtime — to -increase the processing capacity of the task.

      -

      Learn more about shards

      -

      Projections

      -

      Flow leverages your JSON schemas to produce other types of schemas as needed, -such as TypeScript types and SQL CREATE TABLE statements.

      -

      In many cases these projections provide comprehensive end-to-end type safety -of Data Flows and their TypeScript transformations, all statically verified -at build time.

      -

      Learn more about projections

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/materialization/index.html b/pr-preview/pr-1594/concepts/materialization/index.html deleted file mode 100644 index 338e78072f..0000000000 --- a/pr-preview/pr-1594/concepts/materialization/index.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - -Materializations | Estuary Flow - - - - - - - - - -

      Materializations

      -

      A materialization is how Flow pushes data to an external destination.

      -

      Materializations are a type of Flow task. -They connect to an external destination system, -or endpoint, and bind one or more Flow collections to resources at the endpoint, such as database tables.

      -

      As documents added to the bound collections, -the materialization continuously pushes it to the destination resources, where it is reflected with very low latency. -Materializations can process documents up to 16 MB in size.

      -

      Materializations are the conceptual inverse of captures.

      -

      -

      You define and configure materializations in Flow specifications.

      -

      See the guide to create a materialization

      -

      Discovery

      -

      Materializations use real-time connectors to connect to many endpoint types.

      -

      When you use a materialization connector in the Flow web app, -flow helps you configure it through the discovery workflow.

      -

      To begin discovery, you tell Flow the connector you'd like to use, basic information about the endpoint, -and the collection(s) you'd like to materialize there. -Flow maps the collection(s) to one or more resources — tables, data streams, or the equivalent — -through one or more bindings.

      -

      You may then modify the generated configuration as needed before publishing the materialization.

      -

      Specification

      -

      Materializations are defined in Flow specification files per the following format:

      -
      # A set of materializations to include in the catalog.
      # Optional, type: object
      materializations:
      # The name of the materialization.
      acmeCo/example/database-views:
      # Endpoint defines how to connect to the destination of the materialization.
      # Required, type: object
      endpoint:
      # This endpoint uses a connector provided as a Docker image.
      connector:
      # Docker image that implements the materialization connector.
      image: ghcr.io/estuary/materialize-postgres:dev
      # File that provides the connector's required configuration.
      # Configuration may also be presented inline.
      config: path/to/connector-config.yaml

      # Bindings define how one or more collections map to materialized endpoint resources.
      # A single materialization may include many collections and endpoint resources,
      # each defined as a separate binding.
      # Required, type: object
      bindings:
      - # Source collection read by this binding.
      # Required, type: object or string
      source:
      # Name of the collection to be read.
      # Required.
      name: acmeCo/example/collection
      # Lower bound date-time for documents which should be processed.
      # Source collection documents published before this date-time are filtered.
      # `notBefore` is *only* a filter. Updating its value will not cause Flow
      # to re-process documents that have already been read.
      # Optional. Default is to process all documents.
      notBefore: 2023-01-23T01:00:00Z
      # Upper bound date-time for documents which should be processed.
      # Source collection documents published after this date-time are filtered.
      # Like `notBefore`, `notAfter` is *only* a filter. Updating its value will
      # not cause Flow to re-process documents that have already been read.
      # Optional. Default is to process all documents.
      notAfter: 2023-01-23T02:00:00Z

      # The resource is additional configuration required by the endpoint
      # connector to identify and materialize a specific endpoint resource.
      # The structure and meaning of this configuration is defined by
      # the specific connector.
      # Required, type: object
      resource:
      # The materialize-postgres connector expects a `table` key
      # which names a table to materialize into.
      table: example_table

      # Priority applied to documents processed by this binding.
      # When all bindings are of equal priority, documents are processed
      # in order of their associated publishing time.
      #
      # However, when one binding has a higher priority than others,
      # then *all* ready documents are processed through the binding
      # before *any* documents of other bindings are processed.
      #
      # Optional. Default: 0, integer >= 0
      priority: 0

      # A sourceCapture allows bindings to be managed automatically based on the
      # bindings of the given capture. As new bindings are added to the capture,
      # they will automatically be added to the materialization. This property
      # is optional.
      sourceCapture: acmeCo/example/a-capture
      -

      How continuous materialization works

      -

      Flow materializations are continuous materialized views. -They maintain a representation of the collection within the endpoint system -that is updated in near real-time. It's indexed on the -collection key. -As the materialization runs, it ensures that all collection documents -and their accumulated reductions are reflected in this -managed endpoint resource.

      -

      When you first publish a materialization, -Flow back-fills the endpoint resource with the historical documents of the collection. -Once caught up, Flow applies new collection documents using incremental and low-latency updates.

      -

      As collection documents arrive, Flow:

      -
        -
      • Reads previously materialized documents from the endpoint for the relevant keys
      • -
      • Reduces new documents into these read documents
      • -
      • Writes updated documents back into the endpoint resource, indexed by their keys
      • -
      -

      For example, consider a collection and its materialization:

      -

      collections:
      acmeCo/colors:
      key: [/color]
      schema:
      type: object
      required: [color, total]
      reduce: {strategy: merge}
      properties:
      color: {enum: [red, blue, purple]}
      total:
      type: integer
      reduce: {strategy: sum}

      materializations:
      acmeCo/example/database-views:
      endpoint: ...
      bindings:
      - source: acmeCo/colors
      resource: { table: colors }
      -

      Suppose documents are periodically added to the collection:

      -
      {"color": "red", "total": 1}
      {"color": "blue", "total": 2}
      {"color": "blue", "total": 3}
      -

      Its materialization into a database table will have a single row for each unique color. -As documents arrive in the collection, the row total is updated within the -materialized table so that it reflects the overall count:

      -

      -

      Flow does not keep separate internal copies of collection or reduction states, -as some other systems do. The endpoint resource is the one and only place -where state "lives" within a materialization. This makes materializations very -efficient and scalable to operate. They are able to maintain very large tables -stored in highly scaled storage systems like OLAP data warehouses.

      -

      Projected fields

      -

      Many endpoint systems are document-oriented and can directly work -with collections of JSON documents. -Others are table-oriented and require an up-front declaration -of columns and types to be most useful, such as a SQL CREATE TABLE definition.

      -

      Flow uses collection projections to relate locations within -a hierarchical JSON document to equivalent named fields. -A materialization can in turn select a subset of available projected fields -where, for example, each field becomes a column in a SQL table created by -the connector.

      -

      It would be tedious to explicitly list projections for every materialization, -though you certainly can if desired. -Instead, Flow and the materialization connector negotiate a recommended field selection -on your behalf, which can be fine-tuned. -For example, a SQL database connector will typically require that fields -comprising the primary key be included, and will recommend that scalar -values be included, but will by default exclude document locations that -don't have native SQL representations, such as locations which can have -multiple JSON types or are arrays or maps.

      -
      materializations:
      acmeCo/example/database-views:
      endpoint: ...
      bindings:
      - source: acmeCo/example/collection
      resource: { table: example_table }

      # Select (or exclude) projections of the collection for materialization as fields.
      # If not provided, the recommend fields of the endpoint connector are used.
      # Optional, type: object
      fields:
      # Whether to include fields that are recommended by the endpoint connector.
      # If false, then fields can still be added using `include`.
      # Required, type: boolean
      recommended: true

      # Fields to exclude. This is useful for deselecting a subset of recommended fields.
      # Default: [], type: array
      exclude: [myField, otherField]

      # Fields to include. This can supplement recommended fields, or can
      # designate explicit fields to use if recommended fields are disabled.
      #
      # Values of this map are used to customize connector behavior on a per-field basis.
      # They are passed directly to the connector and are not interpreted by Flow.
      # Consult your connector's documentation for details of what customizations are available.
      # This is an advanced feature and is not commonly used.
      #
      # default: {}, type: object
      include: {goodField: {}, greatField: {}}
      -

      Partition selectors

      -

      Partition selectors let you materialize only a subset of a collection that has -logical partitions. -For example, you might have a large collection that is logically partitioned -on each of your customers:

      -
      collections:
      acmeCo/anvil/orders:
      key: [/id]
      schema: orders.schema.yaml
      projections:
      customer:
      location: /order/customer
      partition: true
      -

      A large customer asks if you can provide an up-to-date accounting of their orders. -This can be accomplished with a partition selector:

      -
      materializations:
      acmeCo/example/database-views:
      endpoint: ...
      bindings:
      # The source can be specified as an object, which allows setting a partition selector.
      - source:
      name: acmeCo/anvil/orders
      # Process partitions where "Coyote" is the customer.
      partitions:
      include:
      customer: [Coyote]
      resource: { table: coyote_orders }
      -

      Learn more about partition selectors.

      -

      Destination-specific performance

      -

      Flow processes updates in transactions, as quickly as the destination endpoint can handle them. -This might be milliseconds in the case of a fast key/value store, -or many minutes in the case of an OLAP warehouse.

      -

      If the endpoint is also transactional, Flow integrates its internal transactions -with those of the endpoint for integrated end-to-end “exactly once” semantics.

      -

      The materialization is sensitive to back pressure from the endpoint. -As a database gets busy, Flow adaptively batches and combines documents to consolidate updates:

      -
        -
      • In a given transaction, Flow reduces all incoming documents on the collection key. -Multiple documents combine and result in a single endpoint read and write during the transaction.
      • -
      • As a target database becomes busier or slower, transactions become larger. -Flow does more reduction work within each transaction, and each endpoint read or write -accounts for an increasing volume of collection documents.
      • -
      -

      This allows you to safely materialize a collection with a high rate of changes into a small database, -so long as the cardinality of the materialization is of reasonable size.

      -

      Delta updates

      -

      As described above, Flow's standard materialization -mechanism involves querying the target system for data state before reducing new documents -directly into it.

      -

      For these standard updates to work, the endpoint must be a stateful system, like a relational database. -However, other systems — like Webhooks and Pub/Sub — may also be endpoints. -None of these typically provide a state representation that Flow can query. -They are write-only in nature, so Flow cannot use their endpoint state -to help it fully reduce collection documents on their keys. -Even some stateful systems are incompatible with Flow's standard updates due to their unique -design and architecture.

      -

      For all of these endpoints, Flow offers a delta-updates mode. -When using delta updates, Flow does not attempt to maintain -full reductions of each unique collection key. -Instead, Flow locally reduces documents within each transaction -(this is often called a "combine"), and then materializes one -delta document per key to the endpoint.

      -

      In other words, when delta updates are used, Flow sends information about data changes by key, -and further reduction is left up to the endpoint system. -Some systems may reduce documents similar to Flow; others use a different -mechanism; still others may not perform reductions at all.

      -

      A given endpoint may support standard updates, delta updates, or both. -This depends on the materialization connector. Expect that a connector will use -standard updates only unless otherwise noted in its documentation.

      -

      Using sourceCapture to synchronize capture and materialization bindings

      -

      In some cases, you just want a destination system to always reflects the source -system as closely as possible, even as the source system changes over time. The -sourceCapture property of a materialization allows you to do exactly that. -If you set a sourceCapture on your materialization, then the bindings of the -materialization will be automatically kept in sync with the bindings of the -capture. As bindings are added to the capture, they will be automatically added -to the materialization. This works regardless of whether the bindings were added -to the capture manually or automatically. Bindings that are removed from the -capture are not removed from the materialization.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/schemas/index.html b/pr-preview/pr-1594/concepts/schemas/index.html deleted file mode 100644 index 5003830aa2..0000000000 --- a/pr-preview/pr-1594/concepts/schemas/index.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - -Schemas | Estuary Flow - - - - - - - - - -

      Schemas

      -

      Flow documents and collections always have an associated schema -that defines the structure, representation, and constraints -of your documents. -Collections must have one schema, but may have two distinct schemas: one for when documents are added to the collection, and one for when documents are read from that collection.

      -

      Schemas are a powerful tool for data quality. -Flow verifies every document against its schema whenever it's read or written, -which provides a strong guarantee that your collections hold only "clean" data, -and that bugs and invalid documents are caught before they can impact downstream data products.

      -

      In most cases, Flow generates a functioning schema on your behalf during the discovery -phase of capture. -In advanced use cases, however, customizing your schema becomes more important.

      -

      JSON Schema

      -

      JSON Schema -is an expressive open standard for defining the schema and structure of documents. -Flow uses it for all schemas defined in Flow specifications.

      -

      JSON Schema goes well beyond basic type information and can model -tagged unions, -recursion, and other complex, real-world composite types. -Schemas can also define rich data validations like minimum and maximum values, -regular expressions, dates, timestamps, email addresses, and other formats.

      -

      Together, these features let schemas represent structure as well as -expectations and constraints that are evaluated and must hold true -for every collection document before it’s added to the collection. -They’re a powerful tool for ensuring end-to-end data quality: -for catching data errors and mistakes early, -before they can impact your production data products.

      -

      Generation

      -

      When capturing data from an external system, -Flow can usually generate suitable JSON schemas on your behalf.

      -

      Learn more about using connectors

      -

      For systems like relational databases, Flow will typically generate a complete JSON schema by introspecting the table definition.

      -

      For systems that store unstructured data, Flow will typically generate a very minimal schema, and will rely on schema inferrence to fill in the details. See continuous schema inferenece for more information.

      -

      Translations

      -

      You must only provide Flow -a model of a given dataset one time, as a JSON schema. -Having done that, Flow leverages static inference over your schemas -to perform many build-time validations of your catalog entities, -helping you catch potential problems early.

      -

      Schema inference is also used to provide translations into other schema flavors:

      -
        -
      • Most projections of a collection -are automatically inferred from its schema. -Materializations use your projections to create appropriate representations -in your endpoint system. -A SQL connector will create table definitions with appropriate -columns, types, and constraints.
      • -
      • Flow generates TypeScript definitions from schemas to provide -compile-time type checks of user lambda functions. -These checks are immensely helpful for surfacing mismatched expectations around, -for example, whether a field could ever be null or is misspelt — -which, if not caught, might otherwise fail at runtime.
      • -
      -

      Annotations

      -

      The JSON Schema standard introduces the concept of -annotations, -which are keywords that attach metadata to a location within a validated JSON document. -For example, title and description can be used to annotate a schema with its meaning:

      -
      properties:
      myField:
      title: My Field
      description: A description of myField
      -

      Flow extends JSON Schema with additional annotation keywords, -which provide Flow with further instruction for how documents should be processed. -In particular, the reduce and default keywords -help you define merge behaviors and avoid null values at your destination systems, respectively.

      -

      What’s especially powerful about annotations is that they respond to -conditionals within the schema. -Consider a schema validating a positive or negative number:

      -
      type: number
      oneOf:
      - exclusiveMinimum: 0
      description: A positive number.
      - exclusiveMaximum: 0
      description: A negative number.
      - const: 0
      description: Zero.
      -

      Here, the activated description of this schema location depends -on whether the integer is positive, negative, or zero.

      -

      Writing schemas

      -

      Your schema can be quite permissive or as strict as you wish. -There are a few things to know, however.

      -
        -
      • -

        The top-level type must be object. -Flow adds a bit of metadata to each of your documents under the _meta property, -which can only be done with a top-level object.

        -
      • -
      • -

        Any fields that are part of the collection's key must provably exist -in any document that validates against the schema. -Put another way, every document within a collection must include all of the fields -of the collection's key, and the schema must guarantee that.

        -
      • -
      -

      For example, the following collection schema would be invalid because -the id field, which is used as its key, is not required, -so it might not actually exist in all documents:

      -
      collections:
      acmeCo/whoops:
      schema:
      type: object
      required: [value]
      properties:
      id: {type: integer}
      value: {type: string}
      key: [/id]
      -

      To fix the above schema, change required to [id, value].

      -

      Learn more of how schemas can be expressed within collections.

      -

      Organization

      -

      JSON schema has a $ref keyword which is used to reference a schema stored elsewhere. -Flow resolves $ref as a relative URL of the current file, -and also supports -JSON fragment pointers -for referencing a specific schema within a larger schema document, -such as ../my/widget.schema.yaml#/path/to/schema. -It's recommended to use references in order to organize your schemas for reuse.

      -

      $ref can also be used in combination with other schema keywords -to further refine a base schema. -Here's an example that uses references to organize and -further tighten the constraints of a reused base schema:

      - -
      collections:
      acmeCo/coordinates:
      key: [/id]
      schema: schemas.yaml#/definitions/coordinate

      acmeCo/integer-coordinates:
      key: [/id]
      schema: schemas.yaml#/definitions/integer-coordinate

      acmeCo/positive-coordinates:
      key: [/id]
      schema:
      # Compose a restriction that `x` & `y` must be positive.
      $ref: schemas.yaml#/definitions/coordinate
      properties:
      x: {exclusiveMinimum: 0}
      y: {exclusiveMinimum: 0}
      -
      tip

      You can write your JSON schemas as either YAML or JSON across any number -of files, all referenced from Flow catalog files or other schemas.

      Schema references are always resolved as URLs relative to the current file, -but you can also use absolute URLs to a third-party schema like -schemastore.org.

      -

      Write and read schemas

      -

      In some cases, you may want to impose different constraints to data that is being added (written) to the collection -and data that is exiting (read from) the collection.

      -

      For example, you may need to start capturing data now from a source system; say, a pub-sub system with short-lived -historical data support or an HTTP endpoint, but don't know or don't control the endpoint's schema. -You can capture the data with a permissive write schema, and impose a stricter read schema on the data -as you need to perform a derivation or materialization. -You can safely experiment with the read schema at your convenience, knowing the data has already been captured.

      -

      To achieve this, edit the collection, re-naming the standard schema to writeSchema and adding a readSchema. -Make sure that the field used as the collection key is defined in both schemas.

      -

      You can either perform this manually, or use Flow's Schema Inference tool to infer a read schema. -Schema Inference is available in the web app when you edit a capture or materialization and create a materialization.

      -

      Before separating your write and read schemas, have the following in mind:

      -
        -
      • -

        The write schema comes from the capture connector that produced the collection and shouldn't be modified. -Always apply your schema changes to the read schema.

        -
      • -
      • -

        Separate read and write schemas are typically useful for collections that come from a source system with a flat or loosely -defined data structure, such as cloud storage or pub-sub systems. -Collections sourced from databases and most SaaS systems come with an explicitly defined data structure and shouldn't -need a different read schema.

        -
      • -
      • -

        If you're using standard projections, you must only define them in the read schema. -However, if your projections are logical partitions, you must define them in both schemas.

        -
      • -
      -

      Here's a simple example in which you don't know how purchase prices are formatted when capturing them, -but find out later that number is the appropriate data type:

      -
      collections:
      purchases:
      writeSchema:
      type: object
      title: Store price as strings
      description: Not sure if prices are formatted as numbers or strings.
      properties:
      id: { type: integer}
      price: {type: [string, number]}
      readSchema:
      type: object
      title: Prices as numbers
      properties:
      id: { type: integer}
      price: {type: number}
      key: [/id]
      -

      Reductions

      -

      Flow collections have keys, and multiple documents -may be added to collections that share a common key. -When this happens, Flow will opportunistically merge all such documents -into a single representative document for that key through a process -known as reduction.

      -

      Flow's default is simply to retain the most recent document of a given key, -which is often the behavior that you're after. -Schema reduce annotations allow for far more powerful behaviors.

      -

      The Flow runtime performs reductions frequently and continuously -to reduce the overall movement and cost of data transfer and storage. -A torrent of input collection documents can often become a trickle -of reduced updates that must be stored or materialized into your -endpoints.

      -
      info

      Flow never delays processing in order to batch or combine more documents, -as some systems do (commonly known as micro-batches, or time-based polling). -Every document is processed as quickly as possible, from end to end.

      Instead Flow uses optimistic transaction pipelining to do as much useful work as possible, -while it awaits the commit of a previous transaction. -This natural back-pressure affords plenty of opportunity for -data reductions while minimizing latency.

      -

      reduce annotations

      -

      Reduction behaviors are defined by reduce -JSON schema annotations -within your document schemas. -These annotations provide Flow with the specific reduction strategies -to use at your various document locations.

      -

      If you're familiar with the map and reduce primitives present in -Python, Javascript, and many other languages, this should feel familiar. -When multiple documents map into a collection with a common key, -Flow reduces them on your behalf by using your reduce annotations.

      -

      Here's an example that sums an integer:

      -
      type: integer
      reduce: { strategy: sum }

      # 1, 2, -1 => 2
      -

      Or deeply merges a map:

      -
      type: object
      reduce: { strategy: merge }

      # {"a": "b"}, {"c": "d"} => {"a": "b", "c": "d"}
      -

      Learn more in the -reduction strategies -reference documentation.

      -

      Reductions and collection keys

      -

      Reduction annotations change the common patterns for how you think about collection keys.

      -

      Suppose you are building a reporting fact table over events of your business. -Today you would commonly consider a unique event ID to be its natural key. -You would load all events into your warehouse and perform query-time aggregation. -When that becomes too slow, you periodically refresh materialized views for fast-but-stale queries.

      -

      With Flow, you instead use a collection key of your fact table dimensions, -and use reduce annotations to define your metric aggregations. -A materialization of the collection then maintains a -database table which is keyed on your dimensions, -so that queries are both fast and up to date.

      -

      Composition with conditionals

      -

      Like any other JSON Schema annotation, -reduce annotations respond to schema conditionals. -Here we compose append and lastWriteWins strategies to -reduce an appended array which can also be cleared:

      -
      type: array
      oneOf:
      # If the array is non-empty, reduce by appending its items.
      - minItems: 1
      reduce: { strategy: append }
      # Otherwise, if the array is empty, reset the reduced array to be empty.
      - maxItems: 0
      reduce: { strategy: lastWriteWins }

      # [1, 2], [3, 4, 5] => [1, 2, 3, 4, 5]
      # [1, 2], [], [3, 4, 5] => [3, 4, 5]
      # [1, 2], [3, 4, 5], [] => []
      -

      You can combine schema conditionals with annotations to build -rich behaviors.

      -

      Continuous schema inference

      -

      Flow automatically infers a JSON schema for every captured collection. This schema is updated automatically as data is captured.

      -

      For some systems, like relational databases, Flow is able to determine a complete JSON schema for each collection up front, before even starting the capture. But many other systems are not able to provide detailed and accurate information about the data before it's captured. Often, this is because the source system data is unstructured or loosely structured. For these systems, the schema can only be known after the data is captured. Continuous schema inference is most useful in these scenarios.

      -

      For example, say you're capturing from MongoDB. MongoDB documents must all have an _id field, but that is essentially the only requirement. You can't know what other fields may exist on MongoDB documents until you've read them. When you set up a capture from MongoDB using the Flow web app, the collection specifications will look something like this:

      -
      key: [ /_id ]
      writeSchema:
      type: object
      properties:
      _id: { type: string }
      required: [ _id ]
      readSchema:
      allOf:
      - $ref: flow://write-schema
      - $ref: flow://inferred-schema
      -

      Note that this spec uses separate read and write schemas. The writeSchema is extremely permissive, and only requires an _id property with a string value. The readSchema references flow://inferred-schema, which expands to the current inferred schema when the collection is published.

      -
      info

      Note that $ref: flow://write-schema expands to the current writeSchema. Whenever you use $ref: flow://inferred-schema, you should always include the flow://write-schema as well, so that you don't need to repeat any fields that are defined in the writeSchema or wait for those fields to be observed by schema inference.

      -

      When you first publish a collection using the inferred schema, flow://inferred-schema expands to a special placeholder schema that rejects all documents. This is to ensure that a non-placeholder inferred schema has been published before allowing any documents to be materialized. Once data is captured to the collection, the inferred schema immediately updates to strictly and minimally describe the captured.

      -

      Because the effective readSchema is only ever updated when the collection is published, the best option is usually to use the inferred schema in conjunction with autoDiscover.

      -

      default annotations

      -

      You can use default annotations to prevent null values from being materialized to your endpoint system.

      -

      When this annotation is absent for a non-required field, missing values in that field are materialized as null. -When the annotation is present, missing values are materialized with the field's default value:

      -
      collections:
      acmeCo/coyotes:
      schema:
      type: object
      required: [id]
      properties:
      id: {type: integer}
      anvils_dropped: {type: integer}
      reduce: {strategy: sum }
      default: 0
      key: [/id]
      -

      default annotations are only used for materializations; they're ignored by captures and derivations. -If your collection has both a write and read schema, make sure you add this annotation to the read schema.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/storage-mappings/index.html b/pr-preview/pr-1594/concepts/storage-mappings/index.html deleted file mode 100644 index 8914e68cef..0000000000 --- a/pr-preview/pr-1594/concepts/storage-mappings/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - -Storage mappings | Estuary Flow - - - - - - - - - -

      Storage mappings

      -

      Flow stores the documents that comprise your collections in a cloud storage bucket. -Your storage mapping tells Flow which bucket to use.

      -

      When you first register for Flow, your storage mapping is Estuary's secure Google Cloud Storage bucket. -Data in Flow's cloud storage bucket is deleted 30 days after collection.

      -

      For production workflows, you should set up your own cloud storage bucket as a storage mapping.

      -

      You may also use apply different storage mappings to different catalog prefixes within your organization's prefix.

      -

      You can set up a bucket lifecycle policy to manage data retention in your storage mapping; -for example, to remove data after six months.

      -

      Recovery logs

      -

      In addition to collection data, Flow uses your storage mapping to temporarily store recovery logs.

      -

      Flow tasks — captures, derivations, and materializations — use recovery logs to durably store their processing context as a backup. -Recovery logs are an opaque binary log, but may contain user data.

      -

      The recovery logs of a task are always prefixed by recovery/, -so a task named acmeCo/produce-TNT would have a recovery log called recovery/acmeCo/roduce-TNT

      -

      Flow prunes data from recovery logs once it is no longer required.

      -
      warning

      Deleting data from recovery logs while it is still in use can -cause Flow processing tasks to fail permanently.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/tests/index.html b/pr-preview/pr-1594/concepts/tests/index.html deleted file mode 100644 index 15f9dd034c..0000000000 --- a/pr-preview/pr-1594/concepts/tests/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - -Tests | Estuary Flow - - - - - - - - - -

      Tests

      -

      The Flow web application automatically performs basic tests to validate the configurations of captures and materializations. -As your Data Flows grow in breadth and scope, and as requirements change or new contributors get involved, -more robust tests are invaluable for ensuring the correctness of your data products.

      -

      You can use Flow tests to verify the end-to-end behavior of any modified schemas or derivations included in your Data Flow. -At their most basic, you feed example documents into a collection, -and then verify that documents coming out of a derived collection meet your test's expectation:

      -
      tests:
      acmeCo/tests/greetings:
      - ingest:
      description: Add people to greet.
      collection: acmeCo/people
      documents:
      - { userId: 1, name: "Zelda" }
      - { userId: 2, name: "Link" }

      - verify:
      description: Ensure people were greeted.
      collection: acmeCo/greetings
      documents:
      - { userId: 1, greeting: "Hello Zelda" }
      - { userId: 2, greeting: "Hello Link" }
      -

      A test is a sequence of one or more steps, each of either an ingest or a verify type.

      -
        -
      • ingest steps add one or more documents to a collection.
      • -
      • verify steps make assertions about the current contents of a collection.
      • -
      -

      All steps must complete successfully in order for a test to pass.

      -

      Ingest

      -

      ingest steps add documents to a named collection. -All documents must validate against the collection's -schema, -or a catalog build error will be reported.

      -

      All documents from a single ingest step are added in one transaction. -This means that multiple documents with a common key will be combined prior -to their being appended to the collection. Suppose acmeCo/people had key [/id]:

      -
      tests:
      acmeCo/tests/greetings:
      - ingest:
      description: Zeldas are combined to one added document.
      collection: acmeCo/people
      documents:
      - { userId: 1, name: "Zelda One" }
      - { userId: 1, name: "Zelda Two" }

      - verify:
      description: Only one Zelda is greeted.
      collection: acmeCo/greetings
      documents:
      - { userId: 1, greeting: "Hello Zelda Two" }
      -

      Verify

      -

      verify steps assert that the current contents of a collection match the provided document fixtures. -Verified documents are fully reduced, with one document for each unique key, ordered under the key's natural order.

      -

      You can verify the contents of both derivations and captured collections. -Documents given in verify steps do not need to be comprehensive. -It is not an error if the actual document has additional locations not present in the document to verify, -so long as all matched document locations are equal. -Verified documents also do not need to validate against the collection's schema. -They do, however, need to include all fields that are part of the collection's key.

      -
      tests:
      acmeCo/tests/greetings:
      - ingest:
      collection: acmeCo/people
      documents:
      - { userId: 1, name: "Zelda" }
      - { userId: 2, name: "Link" }
      - ingest:
      collection: acmeCo/people
      documents:
      - { userId: 1, name: "Zelda Again" }
      - { userId: 3, name: "Pikachu" }

      - verify:
      collection: acmeCo/greetings
      documents:
      # greetings are keyed on /userId, and the second greeting is kept.
      - { userId: 1, greeting: "Hello Zelda Again" }
      # `greeting` is "Hello Link", but is not asserted here.
      - { userId: 2 }
      - { userId: 3, greeting: "Hello Pikachu" }
      -

      Partition selectors

      -

      Verify steps may include a partition selector to -verify only documents of a specific partition:

      -
      tests:
      acmeCo/tests/greetings:
      - verify:
      collection: acmeCo/greetings
      description: Verify only documents which greet Nintendo characters.
      documents:
      - { userId: 1, greeting: "Hello Zelda" }
      - { userId: 3, greeting: "Hello Pikachu" }
      partitions:
      include:
      platform: [Nintendo]
      -

      Learn more about partition selectors.

      -

      Tips

      -

      The following tips can aid in testing large or complex derivations.

      -

      Testing reductions

      -

      Reduction annotations are expressive and powerful, and their use should thus be tested thoroughly. -An easy way to test reduction annotations on captured collections is to write a two-step test that ingests multiple documents with the same key and then verifies the result. -For example, the following test might be used to verify the behavior of a simple sum reduction:

      -
      tests:
      acmeCo/tests/sum-reductions:
      - ingest:
      description: Ingest documents to be summed.
      collection: acmeCo/collection
      documents:
      - {id: 1, value: 5}
      - {id: 1, value: 4}
      - {id: 1, value: -3}
      - verify:
      description: Verify value was correctly summed.
      collection: acmeCo/collection
      documents:
      - {id: 1, value: 6}
      -

      Reusing common fixtures

      -

      When you write a lot of tests, it can be tedious to repeat documents that are used multiple times. -YAML supports anchors and references, -which you can implement to re-use common documents throughout your tests. -One nice pattern is to define anchors for common ingest steps in the first test, which can be re-used by subsequent tests. For example:

      -
      tests:
      acmeCo/tests/one:
      - ingest: &mySetup
      collection: acmeCo/collection
      documents:
      - {id: 1, ...}
      - {id: 2, ...}
      ...
      - verify: ...

      acmeCo/tests/two:
      - ingest: *mySetup
      - verify: ...
      -

      This allows all the subsequent tests to re-use the documents from the first ingest step without having to duplicate them.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/concepts/web-app/index.html b/pr-preview/pr-1594/concepts/web-app/index.html deleted file mode 100644 index ec69b14be3..0000000000 --- a/pr-preview/pr-1594/concepts/web-app/index.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - -Web application | Estuary Flow - - - - - - - - - -

      Web application

      -

      Flow's web application is at dashboard.estuary.dev.

      -

      The web app is the central, low-code environment for creating, managing, and monitoring Data Flows.

      -

      When to use the web app

      -

      The web app and flowctl are designed to work together as a complete platform. -You can use either, or both, to work on your Data Flows, depending on your preference.

      -

      With the Flow web app, you can perform most common workflows, including:

      -
        -
      • Creating end-to-end Data Flows: capturing data from source systems and materializing it to destinations.
      • -
      • Creating, viewing, and editing individual captures and materializations.
      • -
      • Monitor the amount of data being processed by the system.
      • -
      • Viewing data collections.
      • -
      • Viewing users and permissions.
      • -
      • Granting permissions to other users.
      • -
      • Authenticating with the flowctl CLI.
      • -
      • Manage billing details.
      • -
      -

      Some advanced workflows, like transforming data with derivations, aren't fully available in the web app.

      -

      Even if you prefer the command line or plan to perform a task that's only available through flowctl, we recommend you begin your work in the web app; -it provides a quicker and easier path to create captures and materializations. You can then switch to flowctl to continue working.

      -

      Signing in

      -

      You use a Google, Microsoft, or GitHub account to sign into Flow.

      -

      -

      If you've never used Flow before, you'll be prompted to register before being issued a trial account. If you want to use Flow for production workflows or collaborate with team members, you'll need an organizational account. -Contact Estuary to create a new organizational account or join an existing organization.

      - -

      When you log into the web app, you land on the Welcome page. -There are four additional pages visible as tabs in the side navigation: Sources (captures), Collections, Destinations (materializations), and Admin.

      -

      The order of the tabs mirrors the order of a basic Data Flow:

      - -
      - graph LR; - Capture-->Collection; - Collection-->Materialization; -
      -

      While you may choose to use the tabs in this sequence, it's not necessary. -All Flow entities exist individually, outside of the context of complete Data Flow. -You can use the different pages in the web app to monitor and manage your items in a number of other ways, as described below.

      -

      Captures page

      -

      The Captures page shows you a table of existing Flow captures to which you have access. -The New Capture button is also visible. -You use the table to monitor your captures.

      -

      -

      1: Select all or deselect all.

      -

      2: Enable, Disable, and Delete buttons. These actions will be applied to the selected table rows. Choose Disable to temporarily pause the flow of data, Enable to resume, and Delete to permanently remove the capture(s).

      -

      3: Materialize button. When you click this button, you're directed to the Create Materializations page. -All the collections of the selected capture(s) will be added to the materialization.

      -

      4: Filter captures. Type a catalog prefix, unique capture name, or connector name to return captures that match your query.

      -

      Capture names follow the pattern prefix/unique-identifier/connector-name, with prefix supporting multiple layers of nesting. -You can search for any part of this full capture name. You can also use the * wildcard. -For example, if you have a capture called acmeCo/logistics/anvil-locations/source-postgres, -you can find it by filtering for acmeCo*source-postgres.

      -

      5: Status indicator. Shows the status of the primary task shard that backs this capture.

      -
        -
      • Primary (Green): Data is actively flowing through the capture.
      • -
      • Pending (Yellow): The capture is attempting to re-connect. Often, you'll see this after you re-enable the capture as Flow backfills historical data.
      • -
      • Failed (Red): The capture has failed with an unrecoverable error.
      • -
      • Disabled (Hollow circle): The capture is disabled.
      • -
      • Unknown (Black when app is in light mode; white when app is in dark mode): The web app is unable to determine shard status. Usually, this is due to a temporary connection error.
      • -
      -

      6: Capture name. The full name is shown, including all prefixes. It is also a link to the details page of the capture.

      -

      7: Capture type. The icon shows the type of source system data is captured from.

      -

      8: Capture statistics. The Data Written column shows the total amount of data, in bytes and in documents, -that the capture has written to its associated collections within a configurable time interval. -Click the time interval in the header to select from Today, Yesterday, This Week, Last Week, This Month, or Last Month. -Note that the time intervals are in UTC.

      -

      9: Associated collections. The Writes to column shows all the collections to which the capture writes data. For captures with a large number of collections, there is a chip stating how many collections are hidden. Clicking on this will all you to hover over this column and scroll to view the full list. These are also links to the details page of the collection.

      -

      10: Publish time. Hover over this value to see the exact UTC time the capture was last published.

      -

      11: Options. Click to open the menu to Edit Specification.

      -

      Editing captures and collections

      -

      When you click Edit specification for a capture, you're taken to the Edit Capture page.

      -

      This page is similar to the Create Capture page as it was filled out just before the capture was published.

      -

      For detailed steps to edit a capture, see the guide.

      -

      Creating a capture

      -

      When you click Create Capture, you're taken to the Create Capture page. -In the first view, all available capture connectors are displayed.

      -

      Select the tile of the system from which you want to capture data to show the full capture form. -The form details are specific to the connector you chose.

      -

      For detailed steps to create a capture, see the guide.

      -

      After you successfully publish a capture, you're given the option to materialize the collections you just captured. -You can proceed to the materialization, or opt to exit to a different page of the web app.

      -

      Collections page

      -

      The Collections page shows a read-only table of collections to which you have access. -The table has nearly all of the same features as the Captures table, with several important distinctions -that are called out in the image below.

      -

      You can use the table to view each collection's specification and see a sample of its data. -This can help you verify that collection data was captured as expected and that you'll be able to materialize it how you want, and troubleshoot if necessary.

      -

      -

      1: Select all or deselect all.

      -

      2: Enable, Disable, and Delete buttons. These actions will be applied to the selected table rows. Choose Disable to temporarily pause the flow of data, Enable to resume, and Delete to permanently remove the collection(s).

      -

      3: Filter collections by name. Type a catalog prefix, unique collection name to return collections that match your query.

      -

      4: Status indicator. If the collection does not contain a derivation, the indicator should always show green, and hover text will say "Collection." -In the event that the server cannot be reached, the indicator will show "Unknown" status (black in light mode and white in dark mode).

      -

      If the collection contains a derivation, the status of the derivation's primary task shard will be indicated:

      -
        -
      • Primary (Green): Data is actively flowing through the derivation.
      • -
      • Pending (Yellow): The derivation is attempting to re-connect.
      • -
      • Failed (Red): The derivation has failed with an unrecoverable error.
      • -
      • Disabled (Hollow circle): The derivation is disabled.
      • -
      • Unknown (Black when app is in light mode; white when app is in dark mode): The web app is unable to determine shard status. Usually, this is due to a temporary connection error.
      • -
      -

      5: Collection name. The full name is shown, including all prefixes. It is also a link to the details page of the collection.

      -

      6: Collection statistics. The Data Written column shows the total amount of data, in bytes and in documents, -that has been written to each collection from its associated capture or derivation within a configurable time interval. -Click the time interval in the header to select from Today, Yesterday, This Week, Last Week, This Month, or Last Month. -Note that the time intervals are in UTC.

      -

      7: Publish time. Hover over this value to see the exact UTC time the collection was last published.

      -

      Materializations page

      -

      The Materializations page shows you a table of existing Flow materializations to which you have access. -The New Materialization button is also visible.

      -

      You use the table to monitor your materializations. It's nearly identical to the table on the Captures page, with a few exceptions.

      -

      -

      1: Select all or deselect all.

      -

      2: Enable, Disable, and Delete buttons. These actions will be applied to the selected table rows. Choose Disable to temporarily pause the flow of data, Enable to resume, and Delete to permanently remove the materialization(s).

      -

      3: Filter materializations by name. Type a catalog prefix, unique materialization name, or connector name to return materializations that match your query.

      -

      Materialization names follow the pattern prefix/unique-identifier/connector-name, with prefix supporting multiple layers of nesting. -You can search for any part of this full materialization name. You can also use the * wildcard. -For example, if you have a materialization called acmeCo/anvil-locations/materialize-mysql, -you can find it by filtering for acmeCo*mysql.

      -

      4: Status indicator. Shows the status of the primary task shard that backs this materialization.

      -
        -
      • Primary (Green): Data is actively flowing through the materialization.
      • -
      • Pending (Yellow): The materialization is attempting to re-connect. Often, you'll see this after you re-enable the materialization as Flow backfills historical data.
      • -
      • Failed (Red): The materialization has failed with an unrecoverable error.
      • -
      • Disabled (Hollow circle): The materialization is disabled.
      • -
      • Unknown (Black when app is in light mode; white when app is in dark mode): The web app is unable to determine shard status. Usually, this is due to a temporary connection error.
      • -
      -

      5: Materialization name. The full name is shown, including all prefixes. It is also a link to the details page of the materialization.

      -

      6: Materialization type. The icon shows the type of destination system data is materialized to.

      -

      7: Materialization statistics. The Data Read column shows the total amount of data, in bytes and in documents, -that the materialization has read from its associated collections within a configurable time interval. -Click the time interval in the header to select from Today, Yesterday, This Week, Last Week, This Month, or Last Month. -Note that the time intervals are in UTC.

      -

      8: Associated collections. The Reads from column shows all the collections from which the materialization reads data. For materializations with a large number of collections, there is a chip stating how many collections are hidden. Clicking on this will all you to hover over this column and scroll to view the full list. These are also links to the details page of the collection.

      -

      9: Publish time. Hover over this value to see the exact UTC time the materialization was last published.

      -

      10: Options. Click to open the menu to Edit Specification.

      -

      Editing materializations

      -

      When you click Edit specification for a materialization, you're taken to the Edit Materialization page.

      -

      This page is similar to the Create Materialization page as it was filled out just before the materialization was published.

      -

      For detailed steps to edit a materialization, see the guide.

      -

      Creating a materialization

      -

      There are three ways to begin creating a materialization:

      -
        -
      • Clicking New Materialization on the Materializations page.
      • -
      • Selecting one or more captures from the Captures page and clicking Materialize.
      • -
      • Clicking Materialize Collections immediately after publishing a capture.
      • -
      -

      When you initiate the workflow in any of these ways, all available materialization connectors are displayed. -Select a connector to reveal the full form with configuration options specific to your desired destination.

      -

      Fill out the Endpoint Config form and in the Source Collections section use the Collection Selector to map Flow collections to resources in the destination system.

      -

      Note that if you entered the workflow from the Captures page or after publishing a capture, collections will be pre-populated for you.

      -

      For detailed steps to create a materialization, see the guide.

      -

      Capture Details page

      -

      When you click on the name of a capture on the captures page you will be taken to the capture details page to view data stats, sharding information, and general details.

      -

      Overview Tab

      -

      -

      1: The full name of the capture.

      -

      2: Capture statistics. The Usage section displays the total amount of data, in bytes and in documents written by the capture, per hour. The number of hours being displayed in the chart can be changed by clicking the time interval in the header to select from 6 hours, 12 hours, 24 hours.

      -

      3: The Details section shows different pieces of information about the capture. When it was last updated, when it was created, the connector being used, and the collections to which the capture writes data.

      -

      4: Detailed tooltip. You can hover over a section in the graph to see the specific data of that hour.

      -

      5: The most recent hour. This will automatically update every 15 seconds with the most recent data and docs.

      -

      6: Associated collections. Shows all the collections to which the capture writes data and when clicked will take you to the collection's detail page

      -

      7: The Shard Information section shows the full identifier of the shard(s) that back your capture. If there's an error, you'll see an alert identifying the failing shard(s). Use the drop-down to open an expanded view of the failed shard's logs.

      -

      Spec Tab

      -

      -

      In the Spec tab, you can view the specification of the capture itself.

      -

      Collection Details page

      -

      When you click on the name of a collection on the collections page you will be taken to the collection details page to view data stats, sharding information, preview of data, and general details.

      -

      Overview Tab

      -

      -

      1: The full name of the collection.

      -

      2: Collection statistics. The Usage section shows the total amount of data, in bytes and in documents passing through a collection, per hour. The number of hours being displayed in the chart can be changed by clicking the time interval in the header to select from 6 hours, 12 hours, 24 hours.

      -

      3: The Details section shows different pieces of information about the collection. When it was last updated, when it was created, and the associated collections (if any).

      -

      4: Detailed tooltip. You can hover over a section in the graph to see the specific data of that hour.

      -

      5: The most recent hour. This will automatically update every 15 seconds with the most recent data and docs.

      -

      6: Associated collections. Shows all the collections to which the capture writes data and when clicked will take you to the collection's detail page

      -

      7: The Shard Information section (for derivations) shows the full identifier of the shard(s) that back your derivation. If there's an error, you'll see an alert identifying the failing shard(s). Use the drop-down to open an expanded view of the failed shard's logs.

      -

      8: The Data Preview section shows a sample of collection documents: the individual JSON files that comprise the collection. -Documents are organized by their collection key value. Click a key from the list to view its document.

      -

      Spec Tab

      -

      -

      1: The collection's key of the collection.

      -

      2: The collection's schema displayed in a read only table. The table columns can be sorted to more easily find what you need.

      -
      tip

      If you need to modify a collection, edit the capture that it came from.

      -

      Materialization Details Page

      -

      When you click on the name of a materialization on the materializations page you will be taken to the detail page to view data stats, sharding information, and general details.

      -

      Overview Tab

      -

      -

      1: The full name of the materialization.

      -

      2: Materialization statistics. The Usage section shows the total amount of data, in bytes and in documents read by a materialization, per hour. The number of hours being displayed in the chart can be changed by clicking the time interval in the header to select from 6 hours, 12 hours, 24 hours.

      -

      3: The Details section shows different pieces of information about the materialization. When it was last updated, when it was created, and the associated collections.

      -

      4: Detailed tooltip. You can hover over a section in the graph to see the specific data of that hour.

      -

      5: The most recent hour. This will automatically update every 15 seconds with the most recent data and docs.

      -

      6: Associated collections. Shows all the collections to which the capture writes data and when clicked will take you to the collection's detail page

      -

      7: The Shard Information section shows the full identifier of the shard(s) that back your materialization. If there's an error, you'll see an alert identifying the failing shard(s). Use the drop-down to open an expanded view of the failed shard's logs.

      -

      Spec Tab

      -

      -

      In the Spec tab, you can view the specification of the materialization itself.

      -

      Admin page

      -

      On the Admin page, you can view users' access grants, your organization's cloud storage locations, and a complete list of connectors. -You can also get an access token to authenticate with flowctl and update your cookie preferences.

      -

      Users

      -

      The Users tab shows you all provisioned access grants on objects to which you also have access. -Both users and catalog prefixes can receive access grants. -These are split up into two tables called Users and Prefixes. -Each access grant has its own row, so a given user or prefix may have multiple rows.

      -

      For example, if you had read access to foo/ and write access to bar/, you'd have a separate table row in the Users table for each of these capabilities. -If users Alice, Bob, and Carol each had write access on foo/, you'd see three more table rows representing these access grants.

      -

      Taking this a step further, the prefix foo/ could have read access to buz/. You'd see this in the Prefixes table, -and it'd signify that everyone who has access to foo/ also inherits read access to buz/.

      -

      Use the search boxes to filter by username, prefix, or object.

      -

      Learn more about capabilities and access.

      -

      Storage Mappings

      -

      The Storage Mappings tab includes a table of the cloud storage locations that back your Flow collections. -You're able to view the table if you're an admin.

      -

      Each top-level Flow prefix is backed by one or more cloud storage bucket that you own. -You typically have just one prefix: your organization name, which you provided when configuring your Flow organizational account. -If you're a trial user, your prefix is trial/, and this tab isn't applicable to you; -your data is stored temporarily in Estuary's cloud storage bucket for your trial period.

      -

      Learn more about storage mappings.

      -

      Connectors

      -

      The Connectors tab offers a complete view of all connectors that are currently available through the web application, including both capture and materialization connectors. -If a connector you need is missing, you can request it.

      -

      CLI-API

      -

      The CLI-API tab provides the access token required to authenticate with flowctl.

      - -

      You use the Cookie Preferences tab to view and modify cookie settings.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/example-markdown/index.html b/pr-preview/pr-1594/example-markdown/index.html deleted file mode 100644 index 3812f53e81..0000000000 --- a/pr-preview/pr-1594/example-markdown/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - -Markdown page example | Estuary Flow - - - - - - - - - -

      Markdown page example

      -

      You don't need React to write simple standalone pages.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/example/index.html b/pr-preview/pr-1594/example/index.html deleted file mode 100644 index f356d5f5de..0000000000 --- a/pr-preview/pr-1594/example/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - -Hello from Estuary Flow | Estuary Flow - - - - - - - - - -

      Estuary Flow

      Dinosaurs are cool

      Easy to Use

      Easy to Use

      Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.

      Focus on What Matters

      Focus on What Matters

      Docusaurus lets you focus on your docs, and we'll do the chores. Go ahead and move your docs into the docs directory.

      Powered by React

      Powered by React

      Extend or customize your website layout by reusing React. Docusaurus can be extended while reusing the same header and footer.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/getting-started/installation/index.html b/pr-preview/pr-1594/getting-started/installation/index.html deleted file mode 100644 index efa81ae62a..0000000000 --- a/pr-preview/pr-1594/getting-started/installation/index.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - -Registration and setup | Estuary Flow - - - - - - - - - -

      Registration and setup

      -

      Estuary Flow is a fully managed web application that also offers a robust CLI. -Once you register in the web application, you can seamlessly use either or both tools to do your work.

      -

      Get started with the Flow web application

      -

      To start using Flow for free, visit the web application. -See what the free tier includes on the Pricing page.

      -

      When you register for Flow, your account will use Flow's secure cloud storage bucket to store your data. -Data in Flow's cloud storage bucket is deleted 30 days after collection.

      -

      For production use cases, you should configure your own cloud storage bucket to use with Flow.

      -

      Get started with the Flow CLI

      -

      After your account has been activated through the web app, you can begin to work with your data flows from the command line. -This is not required, but it enables more advanced workflows or might simply be your preference.

      -

      Flow has a single binary, flowctl.

      -

      flowctl is available for:

      -
        -
      • Linux x86-64. All distributions are supported.
      • -
      • MacOS 11 (Big Sur) or later. Both Intel and M1 chips are supported.
      • -
      -

      To install, copy and paste the appropriate script below into your terminal. This will download flowctl, make it executable, and add it to your PATH.

      -
        -
      • For Linux:
      • -
      -
      sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-x86_64-linux' && sudo chmod +x /usr/local/bin/flowctl
      -
        -
      • For Mac:
      • -
      -
      sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-multiarch-macos' && sudo chmod +x /usr/local/bin/flowctl
      -

      Alternatively, Mac users can install with Homebrew:

      -
      brew tap estuary/flowctl
      brew install flowctl
      -

      flowctl isn't currently available for Windows. -For Windows users, we recommend running the Linux version inside WSL, -or using a remote development environment.

      -

      The flowctl source files are also on GitHub here.

      -

      Once you've installed flowctl and are ready to begin working, authenticate your session using an access token.

      -
        -
      1. -

        Ensure that you have an Estuary account and have signed into the Flow web app before.

        -
      2. -
      3. -

        In the terminal of your local development environment, run:

        -
        flowctl auth login
        -

        In a browser window, the web app opens to the CLI-API tab.

        -
      4. -
      5. -

        Copy the access token.

        -
      6. -
      7. -

        Return to the terminal, paste the access token, and press Enter.

        -
      8. -
      -

      The token will expire after a predetermined duration. Repeat this process to re-authenticate.

      -

      Learn more about using flowctl.

      -

      Configuring your cloud storage bucket for use with Flow

      -

      New Flow accounts are connected to Flow's secure cloud storage bucket to store collection data. -To switch to your own bucket, choose a cloud provider and complete the setup steps:

      - -

      Once you're done, get in touch.

      -

      Google Cloud Storage buckets

      -

      You'll need to grant Estuary Flow access to your GCS bucket.

      -
        -
      1. -

        Create a bucket to use with Flow, if you haven't already.

        -
      2. -
      3. -

        Follow the steps to add a principal to a bucket level policy. -As you do so:

        -
          -
        • -

          For the principal, enter flow-258@helpful-kingdom-273219.iam.gserviceaccount.com

          -
        • -
        • -

          Select the roles/storage.admin role.

          -
        • -
        -
      4. -
      -

      Amazon S3 buckets

      -

      You'll need to grant Estuary Flow access to your S3 bucket.

      -
        -
      1. -

        Create a bucket to use with Flow, if you haven't already.

        -
      2. -
      3. -

        Follow the steps to add a bucket policy, pasting the policy below. -Be sure to replace YOUR-S3-BUCKET with the actual name of your bucket.

        -
      4. -
      -
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "AllowUsersToAccessObjectsUnderPrefix",
      "Effect": "Allow",
      "Principal": {
      "AWS": "arn:aws:iam::789740162118:user/flow-aws"
      },
      "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
      "Resource": "arn:aws:s3:::YOUR-S3-BUCKET/*"
      },
      {
      "Effect": "Allow",
      "Principal": {
      "AWS": "arn:aws:iam::789740162118:user/flow-aws"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::YOUR-S3-BUCKET"
      },
      {
      "Effect": "Allow",
      "Principal": {
      "AWS": "arn:aws:iam::789740162118:user/flow-aws"
      },
      "Action": "s3:GetBucketPolicy",
      "Resource": "arn:aws:s3:::YOUR-S3-BUCKET"
      }
      ]
      }
      -

      Azure Blob Storage

      -

      You'll need to grant Estuary Flow access to your storage account and container. -You'll also need to provide some identifying information.

      -
        -
      1. -

        Create an Azure Blob Storage container to use with Flow, if you haven't already.

        -
      2. -
      3. -

        Gather the following information. You'll need this when you contact us to complete setup.

        -
          -
        • -

          Your Azure AD tenant ID. You can find this in the Azure Active Directory page. -

          -
        • -
        • -

          Your Azure Blob Storage account ID. You can find this in the Storage Accounts page. -

          -
        • -
        • -

          Your Azure Blob Storage container ID. You can find this inside your storage account. -

          -
        • -
        -

        You'll grant Flow access to your storage resources by connecting to Estuary's -Azure application.

        -
      4. -
      5. -

        Add Estuary's Azure application to your tenant.

        -
      6. -
      - - -
        -
      1. -

        Grant the application access to your storage account via the -Storage Blob Data Owner IAM role.

        -
          -
        • -

          Inside your storage account's Access Control (IAM) tab, click Add Role Assignment.

          -
        • -
        • -

          Search for Storage Blob Data Owner and select it.

          -
        • -
        • -

          On the next page, make sure User, group, or service principal is selected, then click + Select Members.

          -
        • -
        • -

          You must search for the exact name of the application, otherwise it won't show up: Estuary Storage Mappings Prod

          -
        • -
        • -

          Once you've selected the application, finish granting the role.

          -
        • -
        -

        For more help, see the Azure docs.

        -
      2. -
      -

      Add the Bucket

      -

      If your bucket is for Google Cloud Storage or AWS S3, you can add it yourself. Once you've finished the above steps, head to "Admin", "Settings" then "Configure Cloud Storage" -and enter the relevant information there and we'll start to use your bucket for all data going forward.

      -

      If your bucket is for Azure, send support@estuary.dev an email with the name of the storage bucket and any other information you gathered per the steps above. -Let us know whether you want to use this storage bucket to for your whole Flow account, or just a specific prefix. -We'll be in touch when it's done!

      -

      Self-hosting Flow

      -

      The Flow runtime is available under the Business Source License. It's possible to self-host Flow using a cloud provider of your choice.

      -
      Beta

      Setup for self-hosting is not covered in this documentation, and full support is not guaranteed at this time. -We recommend using the hosted version of Flow for the best experience. -If you'd still like to self-host, refer to the GitHub repository or the Estuary Slack.

      -

      What's next?

      -

      Start using Flow with these recommended resources.

      -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/index.html b/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/index.html deleted file mode 100644 index 2ebb49845d..0000000000 --- a/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/index.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - -Create a real-time materialized view in PostgreSQL | Estuary Flow - - - - - - - - - -

      Create a real-time materialized view in PostgreSQL

      -

      PostgreSQL supports materialized views: database objects that contain the result of a query, usually a focused subset of a large dataset.

      -

      In this tutorial, you'll use Flow and your Postgres instance to create something that's not possible in Postgres alone: -a materialized view that updates continuously based on a real-time data feed.

      -

      Prerequisites

      -
        -
      • -

        An Estuary Flow account. If you don't have one, visit the Flow web app to register for free.

        -
      • -
      • -

        A GitLab, GitHub, or BitBucket account. You'll use this to log into GitPod, the cloud development environment integrated with Flow.

        -
          -
        • Alternatively, you can complete this tutorial using a local development environment. -In that case, you'll need to install flowctl locally. -Note that the steps you'll need to take will be different. Refer to this guide for help.
        • -
        -
      • -
      • -

        A Postgres database set up to allow connections from Flow. -Amazon RDS, Amazon Aurora, Google Cloud SQL, Azure Database for PostgreSQL, and self-hosted databases are supported.

        -
      • -
      -

      Introduction

      -

      Materialized views in Postgres give you a powerful way narrow down a huge dataset into a compact one that you can easily monitor. -But if your data is updating in real-time, traditional materialized views introduce latency. They're batch workflows — the query is run at a set interval.

      -

      To get around this, you'll need to perform a real-time transformation elsewhere. -Flow derivations are a great way to do this.

      -

      For this example, you'll use Estuary's public data collection of recent changes to Wikipedia, -captured from the Wikimedia Foundation's event stream.

      -

      The raw dataset is quite large. -It captures every change to the platform — about 30 per second — and includes various properties. -Written to a Postgres table, it quickly grows to an size that's very expensive to query.

      -

      First, you'll scope the raw data down to a small fact table with a derivation.

      -

      You'll then materialize both the raw and transformed datasets to your Postgres instance and compare performance.

      -

      Loading the Wikipedia Demo

      -
        -
      1. -

        Navigate to the Live Demo page and click on See the capture.

        -
      2. -
      3. -

        After accepting the pop up, Estuary will populate your Sources, Collections and Destinations with the Wikipedia Demo tasks.

        -
      4. -
      -

      Check out the source data

      -
        -
      1. -

        Got the the collections page of the Flow web app.

        -
      2. -
      3. -

        Search for demo/wikipedia/recentchange and click on its name.

        -
      4. -
      5. -

        On the Collection Details page, click the Spec tab.

        -

        The collection schema has many fields. Because Wikipedia sees a lot of edits, -this would yield a large, unwieldy table in Postgres.

        -
        Tip

        To save on performance, you can also perform this tutorial using the smaller demo/wikipedia/recentchange-sampled collection. Apart from the collection name, all other steps are the same.

        -

        Learn more about Flow collections and schemas.

        -

        Now you'll create the derivation. A derivation is a new collection that's defined by a transformation. -First, you'll define the collection's schema. Then, you'll write the transformation to shape the data to that schema.

        -
      6. -
      -

      Add a derivation to transform data

      -

      You'll write your derivation using a cloud development environment integrated in the Flow web app.

      -
        -
      1. -

        Go back to the collections page and click the New Transformation button.

        -
      2. -
      3. -

        Set the source collection to the raw Wikipedia data. Search for and select demo/wikipedia/recentchange.

        -
      4. -
      5. -

        Set the transformation language to SQL.

        -
      6. -
      7. -

        Give the derivation a name. From the dropdown, choose the name of your catalog prefix and append a unique name, for example yourprefix/wikipedia/user-fact-table.

        -
      8. -
      9. -

        Click Proceed to GitPod to create your development environment. Sign in with one of the available account types.

        -
      10. -
      11. -

        On the New Workspace screen, keep the Context URL option selected and click Continue.

        -

        A GitPod development environment opens. -A stubbed-out derivation with a SQL transformation has already been created for you. Next, you'll locate and open the source files.

        -
      12. -
      13. -

        Each slash-delimited prefix of your derivation name has become a folder. Open the nested folders to locate a flow.yaml file.

        -

        Following the example above, you'd open the folders called yourprefix, then wikipedia, to find the correct flow.yaml file. Its contents look like this:

        -
        collections:
        yourprefix/wikipedia/user-fact-table:
        schema:
        properties:
        your_key:
        type: string
        required:
        - your_key
        type: object
        key:
        - /your_key
        derive:
        using:
        sqlite:
        migrations:
        - user-fact-table.migration.0.sql
        transforms:
        - name: recentchange
        source: demo/wikipedia/recentchange
        shuffle: any
        lambda: user-fact-table.lambda.recentchange.sql
        -

        Your first order of business is to replace the placeholder schema and collection key. -As we saw earlier, the source collection's schema and key caused every Wikipedia event to generate a new document.

        -

        You'll fix that here.

        -
      14. -
      15. -

        Replace the existing schema and key stanzas with the following:

        -
        schema:
        properties:
        edits_this_day:
        reduce:
        strategy: sum
        type: integer
        date:
        format: date
        type: string
        user:
        type: string
        reduce:
        strategy: merge
        required:
        - user
        - date
        - edits_this_day
        type: object
        key:
        - /user
        - /date
        -
      16. -
      -

      The new schema contains reduction annotations. -These sum the changes made by a given user on a given date. -The collection is now keyed on each unique combination of user ID and date. -It has just three fields: -the user, date, and the number of changes made by that user on that date.

      -

      Next, you'll add the transformation.

      -
        -
      1. -

        In the transforms stanza, give the transformation a new name to differentiate it from the name of the source collection. For example:

        -
        transforms:
        - name: dailychangesbyuser
        -
      2. -
      3. -

        Update the shuffle key. Since we're working with a large dataset, this ensures that each user is processed by the same task shard. -This way, you'll prevent Flow from creating multiple counts for a given user and date combination.

        -

        Learn more about shuffles.

        -
        shuffle: { key: [ /user ] }
        -

        Now, the transform needs is the SQL lambda function — the function that will shape the source data to fit the new schema. -Flow has created another file to contain it.

        -
      4. -
      5. -

        Open the file called user-fact-table.lambda.recentchange.sql.

        -
      6. -
      7. -

        Replace its contents with

        -
        select $user, 1 as edits_this_day, date($meta$dt) as date where $user is not null;
        -

        This creates the edits_this_day field we referenced earlier, and starts the counter at 1. -It converts the timestamp into a simplified date format. -Finally, it filters out null users (which occasionally occur in the Wikipedia data stream and would violate your schema).

        -
      8. -
      9. -

        All pieces of the derivation are in place. Double check your files against these samples:

        -
      10. -
      -
      ---
      collections:
      yourprefix/wikipedia/user-fact-table:
      schema:
      properties:
      edits_this_day:
      reduce:
      strategy: sum
      type: integer
      date:
      format: date
      type: string
      user:
      type: string
      reduce:
      strategy: merge
      required:
      - user
      - date
      - edits_this_day
      type: object
      key:
      - /user
      - /date
      derive:
      using:
      sqlite:
      migrations:
      - user-fact-table.migration.0.sql
      transforms:
      - name: dailychangesbyuser
      source: demo/wikipedia/recentchange
      shuffle: { key: [ /user ] }
      lambda: user-fact-table.lambda.recentchange.sql
      -
        -
      1. Run the derivation locally and preview its output:
      2. -
      -
      flowctl preview --source flow.yaml
      -

      In your terminal, you'll see JSON documents that look like:

      -
      {"date":"2023-07-18","edits_this_day":3,"user":"WMrapids"}
      -

      This looks right: it includes the correctly formatted date, the number of edits, and the username. -You're ready to publish.

      -
        -
      1. -

        Stop the local derivation with Ctrl-C.

        -
      2. -
      3. -

        Publish the derivation:

        -
      4. -
      -
      flowctl catalog publish --source flow.yaml
      -

      The message Publish successful means you're all set. -Your transformation will continue in real time based on the raw dataset, which is also updating in real time. -You're free to close your GitPod.

      -

      Create the continuous materialized view

      -

      Now, you'll materialize your new fact table to Postgres. You'll also materialize the source dataset to compare performance.

      -
        -
      1. -

        Go to the Destinations page in the Flow web app.

        -
      2. -
      3. -

        Click New Materialization.

        -
      4. -
      5. -

        Find the PostgreSQL and click Materialization.

        -
      6. -
      7. -

        Add a unique name for the materialization, for example, yourprefix/yourname-materialized-views-demo.

        -
      8. -
      9. -

        Fill out the Basic Config with:

        -
          -
        1. -

          A username and password for the Postgres instance.

          -
        2. -
        3. -

          Your database host and port.

          -
        4. -
        5. -

          The database name (if in doubt, use the default, postgres).

          -
        6. -
        -

        See the connector documentation if you need help finding these properties.

        -
      10. -
      11. -

        In the Source Collections browser, search for and add the collection demo/wikipedia/recentchange and name the corresponding Postgres Table wikipedia_raw.

        -
      12. -
      13. -

        Also search for and add the collection you just derived, (for example, yourprefix/wikipedia/user-fact-table). -Name the corresponding Postgres table wikipedia_data_by_user.

        -
      14. -
      15. -

        Click Next to test the connection.

        -
      16. -
      17. -

        Click Save and Publish.

        -
      18. -
      -

      Explore the results

      -

      In your Postgres client of choice, note the size of each table and how they quickly change. -Try running some basic queries against both and compare performance. -See the blog post for ideas.

      -

      Once you're satisfied, and to prevent continual resource use, disable or delete your materialization from the -Destinations page.

      -

      Resources

      -

      About derivations

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/index.html b/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/index.html deleted file mode 100644 index 5eb257195d..0000000000 --- a/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/index.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - - -Create your first dataflow with Amazon S3 and Snowflake | Estuary Flow - - - - - - - - - -

      Create your first dataflow with Amazon S3 and Snowflake

      -

      In this tutorial, you'll create your first complete Data Flow with Estuary Flow using publicly available data.

      -

      The dataset you'll use is composed of zipped CSV files in an Amazon S3 cloud storage bucket. You'll transport this data to a table in your own Snowflake data warehouse.

      -

      Prerequisites

      -

      You'll need:

      - -

      Introduction

      -

      The data

      -

      New York City hosts the United States' largest bike share program, Citi Bike. Citi Bike shares ride data in CSV format with the public, including the starting and ending times and locations for every ride. -They upload new data monthly to their Amazon S3 bucket as a zipped CSV file.

      -

      In this scenario, let's imagine you're interested in urban bike safety, or perhaps you plan to open a bike store and entice Citi Bike renters to buy their own bikes. -You'd like to access the Citi Bike data in your Snowflake data warehouse. -From there, you plan to use your data analytics platform of choice to explore the data, and perhaps integrate it with business intelligence apps.

      -

      You can use Estuary Flow to build a real-time Data Flow that will capture all the new data from Citi Bike as soon as it appears, convert it to Snowflake's format, and land the data in your warehouse.

      -

      Estuary Flow

      -

      In Estuary Flow, you create Data Flows to connect data source and destination systems.

      -

      The simplest Data Flow comprises three types of entities:

      -
        -
      • -

        A data capture, which ingests data from the source. In this case, you'll capture from Amazon S3.

        -
      • -
      • -

        One or more collections, which Flow uses to store that data inside a cloud-backed data lake

        -
      • -
      • -

        A materialization, to push the data to an external destination. In this case, you'll materialize to a Snowflake data warehouse.

        -
      • -
      - -
      - graph LR; - Capture-->Collection; - Collection-->Materialization; -
      -

      For the capture and materialization to work, they need to integrate with outside systems: in this case, S3 and Snowflake, but many other systems can be used. -To accomplish this, Flow uses connectors. -Connectors are plug-in components that interface between Flow and an outside system. -Today, you'll use Flow's S3 capture connector and Snowflake materialization connector.

      -

      You'll start by creating your capture.

      -

      Capture Citi Bike data from S3

      -
        -
      1. -

        Go to the Flow web app at dashboard.estuary.dev and sign in.

        -
      2. -
      3. -

        Click the Sources tab and choose New Capture

        -

        All of the available capture connectors — representing the possible data sources — appear as tiles.

        -
      4. -
      5. -

        Find the Amazon S3 tile and click Capture.

        -

        A form appears with the properties required for an S3 capture. Every connector requires different properties to configure.

        -

        First, you'll name your capture.

        -
      6. -
      7. -

        Click inside the Name box.

        -
      8. -
      -

      Names of entities in Flow must be unique. They're organized by prefixes, similar to paths in a file system.

      -

      You'll see one or more prefixes pertaining to your organization. -These prefixes represent the namespaces of Flow to which you have access.

      -
        -
      1. -

        Click your prefix from the dropdown and append a unique name after it. For example, myOrg/yourname/citibiketutorial.

        -
      2. -
      3. -

        Next, fill out the required properties for S3.

        -
          -
        • -

          AWS Access Key ID and AWS Secret Access Key: The bucket is public, so you can leave these fields blank.

          -
        • -
        • -

          AWS Region: us-east-1

          -
        • -
        • -

          Bucket: tripdata

          -
        • -
        • -

          Prefix: The storage bucket isn't organized by prefixes, so leave this blank.

          -
        • -
        • -

          Match Keys: 2022

          -
        • -
        -

        The Citi Bike storage bucket has been around for a while. Some of the older datasets have incorrect file extensions or contain data in different formats. By selecting a subset of files from the year 2022, you'll make things easier to manage for the purposes of this tutorial. -(In a real-world use case, you'd likely reconcile the different schemas of the various data formats using a derivation. -Derivations are a more advanced Flow skill.)

        -
      4. -
      5. -

        Click Next.

        -

        Flow uses the configuration you provided to initiate a connection with S3. It generates a list of collections that will store the data inside Flow. In this case, there's just one collection from the bucket.

        -

        Once this process completes, you can move on to the next step. If there's an error, go back and check your configuration.

        -
      6. -
      7. -

        Click Save and Publish.

        -

        Flow deploys, or publishes, your capture, including your change to the schema. You'll see a notification when the this is complete.

        -

        A subset of data from the Citi Bike tripdata bucket has been captured to a Flow collection. Now, you can materialize that data to Snowflake.

        -
      8. -
      9. -

        Click Materialize Collections.

        -
      10. -
      -

      Prepare Snowflake to use with Flow

      -

      Before you can materialize from Flow to Snowflake, you need to complete some setup steps.

      -
        -
      1. Leave the Flow web app open. In a new window or tab, go to your Snowflake console.
      2. -
      -

      If you're a new trial user, you should have received instructions by email. For additional help in this section, see the Snowflake documentation.

      -
        -
      1. -

        Create a new SQL worksheet if you don't have one open.

        -

        This provides an interface where you can run queries.

        -
      2. -
      3. -

        Paste the follow script into the console, changing the value for estuary_password from secret to a strong password):

        -
      4. -
      -
      set database_name = 'ESTUARY_DB';
      set warehouse_name = 'ESTUARY_WH';
      set estuary_role = 'ESTUARY_ROLE';
      set estuary_user = 'ESTUARY_USER';
      set estuary_password = 'secret';
      set estuary_schema = 'ESTUARY_SCHEMA';
      -- create role and schema for Estuary
      create role if not exists identifier($estuary_role);
      grant role identifier($estuary_role) to role SYSADMIN;
      -- Create snowflake DB
      create database if not exists identifier($database_name);
      use database identifier($database_name);
      create schema if not exists identifier($estuary_schema);
      -- create a user for Estuary
      create user if not exists identifier($estuary_user)
      password = $estuary_password
      default_role = $estuary_role
      default_warehouse = $warehouse_name;
      grant role identifier($estuary_role) to user identifier($estuary_user);
      grant all on schema identifier($estuary_schema) to identifier($estuary_role);
      -- create a warehouse for estuary
      create warehouse if not exists identifier($warehouse_name)
      warehouse_size = xsmall
      warehouse_type = standard
      auto_suspend = 60
      auto_resume = true
      initially_suspended = true;
      -- grant Estuary role access to warehouse
      grant USAGE
      on warehouse identifier($warehouse_name)
      to role identifier($estuary_role);
      -- grant Estuary access to database
      grant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role);
      -- change role to ACCOUNTADMIN for STORAGE INTEGRATION support to Estuary (only needed for Snowflake on GCP)
      use role ACCOUNTADMIN;
      grant CREATE INTEGRATION on account to role identifier($estuary_role);
      use role sysadmin;
      COMMIT;
      -
        -
      1. Click the drop-down arrow next to the Run button and click Run All.
      2. -
      -

      Snowflake runs all the queries and is ready to use with Flow.

      -
        -
      1. Return to the Flow web application.
      2. -
      -

      Materialize your Flow collection to Snowflake

      -

      You were directed to the Materializations page. -All of the available materialization connectors — representing the possible data destinations — are shown as tiles.

      -
        -
      1. -

        Find the Snowflake tile and click Materialization.

        -

        A new form appears with the properties required to materialize to Snowflake.

        -
      2. -
      3. -

        Click inside the Name box.

        -
      4. -
      5. -

        Click your prefix from the dropdown and append a unique name after it. For example, myOrg/yourname/citibiketutorial.

        -
      6. -
      7. -

        Next, fill out the required properties for Snowflake (most of these come from the script you just ran).

        -
          -
        • -

          Host URL: This is the URL you use to log into Snowflake. If you recently signed up for a trial, it should be in your email. Omit the protocol from the beginning. For example, ACCOUNTID.region.cloudprovider.snowflakecomputing.com or orgname-accountname.snowflakecomputing.com.

          -

          Learn more about account identifiers and host URLs.

          -
        • -
        • -

          Account: Your account identifier. This is part of the Host URL. Using the previous examples, it would be ACCOUNTID or accountname.

          -
        • -
        • -

          User: ESTUARY_USER

          -
        • -
        • -

          Password: secret (Substitute the password you set in the script.)

          -
        • -
        • -

          Database: ESTUARY_DB

          -
        • -
        • -

          Schema: ESTUARY_SCHEMA

          -
        • -
        • -

          Warehouse: ESTUARY_WH

          -
        • -
        • -

          Role: ESTUARY_ROLE

          -
        • -
        -
      8. -
      9. -

        Scroll down to view the Source Collections section and change the default name in the Table field to CitiBikeData or another name of your choosing.

        -

        Every Flow collection is defined by one or more schemas. -Because S3 is a cloud storage bucket, the schema used to ingest the data is quite permissive.

        -

        You'll add a more detailed schema for Flow to use to materialize the data to Snowflake. This will ensure that each field from the source CSV is mapped to a column in the Snowflake table.

        -
      10. -
      11. -

        With the collection still selected, click its Collection tab. Then, click Schema Inference.

        -

        Flow examines the data and automatically generates a new readSchema. Scroll through and note the differences between this and the original schema, renamed writeSchema.

        -
      12. -
      13. -

        Click Apply Inferred Schema.

        -
      14. -
      15. -

        Click Next.

        -

        Flow uses the configuration you provided to initiate a connection with Snowflake and generate a specification with details of the materialization.

        -

        Once this process completes, you can move on to the next step. If there's an error, go back and check your configuration.

        -
      16. -
      17. -

        Click Save and Publish.

        -

        Flow publishes the materialization.

        -
      18. -
      19. -

        Return to the Snowflake console and expand ESTUARY_DB and ESTUARY_SCHEMA. -You'll find the materialized table there.

        -
      20. -
      -

      Conclusion

      -

      You've created a complete Data Flow that ingests the Citi Bike CSV files from an Amazon S3 bucket and materializes them into your Snowflake database.

      -

      When Citi Bike uploads new data, it'll be reflected in Snowflake in near-real-time, so long as you don't disable your capture or materialization.

      -

      Data warehouses like Snowflake are designed to power data analytics. From here, you can begin any number of analytical workflows.

      -

      Want to learn more?

      -
        -
      • -

        For more information on the connectors you used today, see the pages on S3 and Snowflake.

        -
      • -
      • -

        You can create a Data Flow using any combination of supported connectors with a similar process to the one you followed in this tutorial. For a more generalized procedure, see the guide to create a Data Flow.

        -
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/index.html b/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/index.html deleted file mode 100644 index c535a92a42..0000000000 --- a/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/index.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Implementing Derivations for AcmeBank | Estuary Flow - - - - - - - - - -
      - -

      Implementing Derivations for AcmeBank

      -

      The following tutorial sections use an illustrative example -to introduce you to derivations, how you might use them, and their common components. -We'll discuss each component in depth in subsequent sections of this page, -but we recommend you start here to get your bearings.

      -

      Suppose you have an application through which users send one another -some amount of currency, like in-game tokens or dollars or digital kittens. -You have a transfers collection of user-requested transfers, -each sending funds from one account to another:

      -
      collections:
      # Collection of 💲 transfers between accounts:
      # {id: 123, sender: alice, recipient: bob, amount: 32.50}
      acmeBank/transfers:
      schema: transfers.schema.yaml
      key: [/id]
      -

      There are many views over this data that you might require, -such as summaries of sender or receiver activity, -or current account balances within your application.

      -

      Filtering Large Transfers

      -
      note

      This section introduces SQLite derivations, SQL lambda blocks and $parameters.

      -

      Your compliance department has reached out, and they require an understanding -of the last large transfer (if any) made by each user account.

      -

      You create a SQL derivation to help them out. -The transfers collection is keyed on the transfer /id, -so you'll need to re-key your derivation on the /sender account. -You also need to filter out transfers that aren't large enough.

      -

      Putting this all together:

      -
      collections:
      acmeBank/last-large-send:
      schema: transfers.schema.yaml
      key: [/sender]

      derive:
      using:
      sqlite: {}
      transforms:
      - name: filterTransfers
      source: acmeBank/transfers
      shuffle: any
      lambda: SELECT $id, $sender, $recipient, $amount WHERE $amount > 100;
      -

      derive: using: sqlite: {} tells Flow that collection -acmeBank/last-large-send is derived using Flow's SQLite derivation connector.

      -

      This derivation has just one transform, which sources from the transfers collection. -As source documents become available, they're evaluated by the SQL lambda -and its SELECT output is published to the derived collection. -Your SQL queries access locations of source documents through $parameter bindings.

      -

      The compliance department then materializes this collection to their preferred destination, -for an always up-to-date view indexed by each account.

      -

      Finding New Account Pairs

      -
      note

      This section introduces SQLite migrations and internal task tables.

      -

      The fraud team needs your help: they have a new process they must run -the first time some sending account sends funds to a receiving account. -They would like to see only those transfers which reflect a new account pair of (sender, recipient). -To tackle this you need to know which account pairs have been seen before.

      -

      SQLite derivations run within the context of a persistent, managed SQLite database. -You can apply database migrations that create whatever tables, triggers, or views you might need. -Then, the statements of your SQL lambda code can INSERT, UPDATE, or DELETE -from those tables, query from them, or any other operation supported by SQLite. -The tables and other schema you create through your migrations -are the internal state of your task.

      -
      collections:
      acmeBank/first-send:
      schema: transfers.schema.yaml
      key: [/id]

      derive:
      using:
      sqlite:
      migrations:
      - CREATE TABLE seen_pairs (
      sender TEXT NOT NULL,
      recipient TEXT NOT NULL,
      PRIMARY KEY (sender, recipient)
      );

      transforms:
      - name: fromTransfers
      source: acmeBank/transfers
      shuffle:
      key: [/sender, /recipient]
      lambda:
      INSERT INTO seen_pairs (sender, recipient) VALUES ($sender, $recipient)
      ON CONFLICT DO NOTHING
      RETURNING $id, $sender, $recipient, $amount;
      -

      This time, the derivation attempts to INSERT into the seen_pairs table, -and uses SQLite's RETURNING -syntax to only publish documents for rows which were successfully inserted.

      -

      You can evolve the internal SQLite tables of your derivation as needed, -by appending SQL blocks which perform a database migration to the migrations array. -Any migrations appended to the list are automatically applied by Flow.

      -

      Grouped Windows of Transfers

      -
      note

      This section introduces delayed reads, and applies them to implement a custom window policy.

      -

      The fraud team is back, and now needs to know the other -transfers which an account has made in the last day. -They want you to enrich each transfer with the grouping of all -transfers initiated by that account in the prior 24 hours.

      -

      You may have encountered "windowing" in other tools for stream processing. -Some systems even require that you define a window policy in order to function. -Flow does not use windows, but sometimes you do want a time-bound grouping of recent events.

      -

      All collection documents contain a wall-clock timestamp of when they were published. -The transforms of a derivation will generally process source documents in ascending wall-time order. -You can augment this behavior by using a read delay to refine the relative order in which -source documents are read, which is useful for implementing arbitrary window policies:

      -
      collections:
      acmeBank/grouped-transfers:
      schema:
      # Enrich transfer with a window of *other* transfers.
      $ref: transfers.schema.yaml
      required: [window]
      properties:
      window: { type: array }
      key: [/id]

      derive:
      using:
      sqlite:
      migrations:
      - CREATE TABLE transfers (
      id INTEGER PRIMARY KEY NOT NULL,
      sender TEXT NOT NULL,
      recipient TEXT NOT NULL,
      amount REAL NOT NULL
      );
      CREATE INDEX idx_transfers_sender ON transfers (sender);
      transforms:
      - name: enrichAndAddToWindow
      source: acmeBank/transfers
      shuffle: { key: [/sender] }
      lambda: enrichAndAddToWindow.sql

      - name: removeFromWindow
      source: acmeBank/transfers
      shuffle: { key: [/sender] }
      readDelay: 24h
      lambda: DELETE FROM transfers WHERE id = $id;
      -

      Approving Transfers

      -
      note

      This section expands usage of SQLite task tables and introduces a recursive data flow.

      -

      Your users don't always check if they have sufficient funds before starting a transfer, -and account overdrafts are becoming common. -The product team has tapped you to fix this -by enriching each transfer with an approve or deny outcome -based on the account balance of the sender.

      -

      To do this, you first need to track the sender's current account balance. -Clearly an account balance is debited when it's used to sends funds. -It's also credited when it receives funds.

      -

      But there's a catch: -an account can only be credited for funds received from approved transfers! -This implies you need a collection of transfer outcomes -in order to derive your collection of transfer outcomes 🤯.

      -

      This is an example of a self-referential, recursive data-flow. -You may have used tools which require that data flow in a Directed Acyclic Graph (DAG). -Flow does not require that your data flows are acyclic, -and it also supports a derivation that reads from itself, -which lets you tackle this task:

      -
      collections:
      acmeBank/transfer-outcomes:
      schema:
      # Enrich transfer schema with outcome and the sender's balance.
      $ref: transfers.schema.yaml
      required: [outcome, sender_balance]
      properties:
      outcome:
      description: Transfer was approved, or denied for insufficient funds.
      enum: [approve, deny]
      sender_balance: { type: number }
      key: [/id]

      derive:
      using:
      sqlite:
      migrations:
      - CREATE TABLE current_balances (
      account TEXT PRIMARY KEY NOT NULL,
      balance REAL NOT NULL
      );

      transforms:
      - name: debitSender
      source: acmeBank/transfers
      # Shuffle on the sender, as we'll debit their balance.
      shuffle: { key: [/sender] }
      lambda: debitSender.sql

      - name: creditRecipient
      # When a transfer is approved, we've debited the sender but still need to
      # credit the recipient. Read approved transfers from ourselves to do so.
      source:
      name: acmeBank/transfer-outcomes
      partitions:
      include:
      outcome: [approve]
      shuffle: { key: [/recipient] }
      lambda:
      INSERT INTO current_balances (account, balance) VALUES ($recipient, $amount)
      ON CONFLICT DO UPDATE SET balance = balance + $amount;

      # Partition output based on the transfer outcome.
      projections:
      outcome:
      location: /outcome
      partition: true
      -

      Current Account Balances

      -
      note

      This section introduces TypeScript derivations and reduction annotations.

      -

      Your product team is back, and they want a database table -keyed by account that contains its up-to-date current balance.

      -

      As shown in the previous section, you could create -a task table which aggregates each account balance, -and then SELECT the current balance after every transfer. -For most use cases, this is a great place to start. -For interest and variety, you'll solve this problem using TypeScript.

      -

      TypeScript derivations require a module which you write. -You don't know how to write that module yet, -so first implement the derivation specification in balances.flow.yaml. -Next run the flowctl generate command, which generates two files:

      -
        -
      • A module stub for you to fill out.
      • -
      • A file of TypeScript interfaces which are used by your module.
      • -
      -
      collections:
      acmeBank/balances:
      schema: balances.schema.yaml
      key: [/user]

      derive:
      using:
      typescript:
      module: balances.ts
      transforms:
      - name: fromOutcomes
      source:
      name: acmeBank/transfer-outcomes
      partitions:
      include:
      outcome: [approve]
      shuffle: any
      -

      Next fill out the body of your TypeScript module and write a test:

      -
      import { IDerivation, Document, SourceFromOutcomes } from 'flow/acmeBank/balances.ts';

      // Implementation for derivation acmeBank/balances.
      export class Derivation extends IDerivation {
      fromOutcomes(read: { doc: SourceFromOutcomes }): Document[] {
      const doc = read.doc;
      return [
      // Debit the sender.
      { user: doc.sender, balance: -doc.amount },
      // Credit the recipient.
      { user: doc.recipient, balance: doc.amount },
      ];
      }
      }
      -

      One piece is still missing. -Your TypeScript module is publishing the change in account balance for each transfer. -That's not the same thing as the current balance for each account.

      -

      You can ask Flow to sum up the balance changes into a current account balance -through reduction annotations. -Here's the balances schema, with reduce annotations for summing the account balance:

      -
      type: object
      required: [user, balance]
      reduce: { strategy: merge }
      properties:
      user: { type: string }
      balance:
      type: number
      reduce: { strategy: sum }
      -

      This section has more moving parts that the previous SQL-based examples. -You might be wondering, why bother? Fair question! -This is just an illustrative example, after all.

      -

      While they're more verbose, TypeScript derivations do have certain advantages:

      -
        -
      • TypeScript derivations are strongly typed, and those checks often catch meaningful bugs and defects before they're deployed. -Your derivation modules also play nicely with VSCode and other developer tooling.
      • -
      • TypeScript derivations can use third-party libraries, as well as your native code compiled to WASM.
      • -
      • TypeScript can be easier when working with nested or complex document structures.
      • -
      -

      Reduction annotations also have some benefits over task state (like SQLite tables):

      -
        -
      • Internal task state is managed by Flow. -If it grows to be large (say, you have a lot of accounts), -then your task must be scaled and could require performance tuning. -Reduction annotations, on the other hand, require no internal state and are extremely efficient.
      • -
      • Certain aggregations, such as recursive merging of tree-like structures, -are much simpler to express through reduction annotations vs implementing yourself.
      • -
      -

      [See "Where to Accumulate?" for more discussion]../../concepts/derivations.md(#where-to-accumulate).

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/getting-started/tutorials/index.html b/pr-preview/pr-1594/getting-started/tutorials/index.html deleted file mode 100644 index 10990027ce..0000000000 --- a/pr-preview/pr-1594/getting-started/tutorials/index.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - -Flow tutorials | Estuary Flow - - - - - - - - - -

      Flow tutorials

      -

      Flow tutorials are complete learning experiences that help you get to know Flow using sample data.

      -

      You'll find these helpful if:

      -
        -
      • -

        You're a new user looking for practice before you implement production Data Flows.

        -
      • -
      • -

        You'd rather learn the Flow concepts in a hands-on setting.

        -
      • -
      -

      If you're looking for more streamlined guidance for your own use case, check out the user guides.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/index.html b/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/index.html deleted file mode 100644 index 37649071ef..0000000000 --- a/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/index.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - -PostgreSQL CDC streaming to Snowflake | Estuary Flow - - - - - - - - - -
      -

      PostgreSQL CDC streaming to Snowflake

      -

      Introduction

      -

      In this tutorial, we'll set up a streaming CDC pipeline from PostgreSQL to Snowflake using Estuary Flow. By the end, you’ll have learned everything you need to know about building a pipeline on your own.

      -

      You'll use Flow's PostgreSQL capture connector and Snowflake materialization connector to set up an end-to-end CDC pipeline in three steps:

      -
        -
      1. -

        First, you’ll ingest change event data from a PostgreSQL database, using a table filled with generated realistic product data.

        -
      2. -
      3. -

        Then, you’ll learn how to configure Flow to persist data as collections while maintaining data integrity.

        -
      4. -
      5. -

        And finally, you will see how you can materialize these collections in Snowflake to make them ready for analytics!

        -
      6. -
      -

      By the end of this tutorial, you'll have established a robust and efficient data pipeline with near real-time replication of data from PostgreSQL to Snowflake.

      -

      Before you get started, make sure you do two things.

      -
        -
      1. -

        Sign up for Estuary Flow here. It’s simple, fast and free.

        -
      2. -
      3. -

        Make sure you also join the Estuary Slack Community. Don’t struggle. Just ask a question.

        -
      4. -
      -

      What is CDC?

      -

      CDC, or Change Data Capture, is a method used to track and capture changes made to data in a database. It enables the real-time capture of insertions, updates, and deletions, providing a continuous stream of changes.

      -

      This stream of change data is invaluable for keeping downstream systems synchronized and up-to-date with the source database, facilitating real-time analytics, replication, and data integration. In essence, CDC allows organizations to capture and react to data changes as they occur, ensuring data accuracy and timeliness across their systems. CDC provides a lower-latency, lower-load way to extract data. It’s also often the only way to capture every change as well as deletes, which are harder to track with batch-based extraction.

      -

      If you are interested in the intricacies of change data capture, head over to this article, where we explain the theory behind it - this is not a requirement for this tutorial, so if you want to dive in head first, keep on reading!

      -

      Prerequisites

      -

      This tutorial will assume you have access to the following things:

      -
        -
      • -

        Docker: for convenience, we are providing a docker compose definition which will allow you to spin up a database and a fake data generator service in about 5 seconds!

        -
      • -
      • -

        ngrok: Flow is a fully managed service. Because the database used in this tutorial will be running on your machine, you’ll need something to expose it to the internet. ngrok is a lightweight tool that does just that.

        -
      • -
      • -

        Snowflake account: The target data warehouse for our flow is Snowflake. In order to follow along with the tutorial, a trial account is perfectly fine.

        -
      • -
      -

      Step 1. Set up source database

      -

      PostgreSQL setup

      -

      As this tutorial is focused on CDC replication from PostgreSQL, we’ll need a database. We recommend you create this database first, so you can learn Flow more easily. Then try these steps on your own database. Let’s take a look at what we are working with!

      -

      Save the below yaml snippet as a file called docker-compose.yml. This docker-compose.yml file contains the service definitions for the PostgreSQL database and the mock data generator service.

      -
      Since V2, compose is integrated into your base Docker package, there’s no need to download any separate tooling!
      -
      docker-compose.yml
      services:
        postgres:
          image: postgres:latest
          container_name: postgres_cdc
          hostname: postgres_cdc
          restart: unless-stopped
          user: postgres
          environment:
            POSTGRES_USER: postgres
            POSTGRES_DB: postgres
            POSTGRES_PASSWORD: postgres
          command:
            - "postgres"
            - "-c"
            - "wal_level=logical"
          healthcheck:
            test: ["CMD-SHELL", "sh -c 'pg_isready -U flow_capture -d postgres'"]
            interval: 5s
            timeout: 10s
            retries: 120   
          volumes:
            - ./init.sql:/docker-entrypoint-initdb.d/init.sql 
          ports:
            - "5432:5432"

        datagen:
          image: materialize/datagen
          container_name: datagen
          restart: unless-stopped
          environment:
            POSTGRES_HOST: postgres_cdc
            POSTGRES_PORT: 5432
            POSTGRES_DB: postgres
            POSTGRES_USER: postgres
            POSTGRES_PASSWORD: postgres
          entrypoint:
            "datagen -s /app/schemas/products.sql -n 10000 -f postgres -w 1000"
          depends_on:
            postgres:
              condition: service_healthy

          volumes:
            - ./schemas/products.sql:/app/schemas/products.sql
      -

      Don’t be alarmed by all these Docker configurations, they are made to be reproducible on any machine, so you don’t have to worry about modifying anything in them! Before you spin up the database, let’s take a quick look at what exactly you can expect to happen.

      -

      Next up, create a folder called schemas and paste the below SQL DDL into a file called products.sql. This file contains the schema of the demo data.

      -
      This file defines the schema via a create table statement, but the actual table creation happens in the init.sql file, this is just a quirk of the Datagen data generator tool.
      -
      products.sql
      CREATE TABLE "public"."products" (
        "id" int PRIMARY KEY,
        "name" varchar COMMENT 'faker.internet.userName()',
        "merchant_id" int NOT NULL COMMENT 'faker.datatype.number()',
        "price" int COMMENT 'faker.datatype.number()',
        "status" varchar COMMENT 'faker.datatype.boolean()',
        "created_at" timestamp DEFAULT (now())
      );
      -

      If you take a closer look at the schema definition, you can see that in the COMMENT attribute we define Python snippets which actually tell Datagen how to generate fake data for those fields!

      -

      Finally, create the init.sql file, which contains the database-level requirements to enable Flow to stream CDC data.

      -
      init.sql
      CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION;

      GRANT pg_read_all_data TO flow_capture;

      CREATE TABLE products (
        "id" int PRIMARY KEY,
        "name" varchar COMMENT 'faker.internet.userName()',
        "merchant_id" int NOT NULL COMMENT 'faker.datatype.number()',
        "price" int COMMENT 'faker.datatype.number()',
        "status" varchar COMMENT 'faker.datatype.boolean()',
        "created_at" timestamp DEFAULT (now())
      );

      CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);
      GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;
      CREATE PUBLICATION flow_publication;
      ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);
      ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, public.products;
      -

      In the init.sql file, you create the products table and all the database objects Flow requires for real-time CDC streaming.

      -

      Configuring PostgreSQL for CDC

      -

      To enable CDC replication in PostgreSQL, several database objects need to be created and configured. These objects facilitate the capture and propagation of data changes to downstream systems. Let's examine each object and its significance in the context of CDC replication:

      -
      CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION;
      -

      This user is dedicated to the CDC replication process. It is granted the necessary permissions to read all data from the database, allowing it to capture changes across tables efficiently. In a production environment, make sure you use a more secure password than what is in the example.

      -
      GRANT pg_read_all_data TO flow_capture;
      -

      Granting the pg_read_all_data privilege to the flow_capture user ensures that it can access and read data from all tables in the database, essential for capturing changes.

      -
      pg_read_all_data is used for convenience, but is not a hard requirement, since it is possible to grant a more granular set of permissions. For more details check out the connector docs.
      -
      CREATE TABLE products (...)
      -

      The source tables, such as the products table in this example, contain the data whose changes we want to capture and replicate. It is recommended for tables to have a primary key defined, although not a hard requirement for CDC.

      -
      CREATE TABLE IF NOT EXISTS public.flow_watermarks (...)
      -

      The flow_watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents.

      -
      GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;
      -

      The flow_capture user needs full privileges on the flow_watermarks table to insert, update, and query metadata related to the replication process.

      -
      CREATE PUBLICATION flow_publication;
      ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);
      ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, public.products;
      -

      A publication defines a set of tables whose changes will be replicated. In this case, the flow_publication publication includes the public.flow_watermarks and public.products tables.

      -

      These commands configure the flow_publication publication to publish changes via partition root and add the specified tables to the publication. By setting publish_via_partition_root to true, the publication ensures that updates to partitioned tables are correctly captured and replicated.

      -
      The table in this tutorial is not partitioned, but we recommend always setting publish_via_partition_root when creating a publication.
      -

      These objects form the backbone of a robust CDC replication setup, ensuring data consistency and integrity across systems. After the initial setup, you will not have to touch these objects in the future, unless you wish to start ingesting change events from a new table.

      -

      With that out of the way, you’re ready to start the source database. In order to initialize Postgres and the fake data generator service, all you have to do is execute the following (to free up your current terminal, use the -d flag so the containers run in a daemonized background process):

      -
      docker compose up
      -

      After a few seconds, you should see that both services are up and running. The postgres_cdc service should print the following on the terminal:

      -
      postgres_cdc  | LOG:  database system is ready to accept connections
      -

      While the datagen service will be a little bit more spammy, as it prints every record it generates, but don’t be alarmed, this is enough for us to verify that both are up and running. Let’s see how we can expose the database so Flow can connect to it.

      -

      Expose the database to the internet via ngrok

      -

      As mentioned above, the next step is to make the database available for other services. To do this in one quick command, we can use ngrok, a free CLI tool that enables tunneling of services. In our case we only want to expose the port 5432 and only the tcp protocol.

      -
      ngrok tcp 5432
      -

      ngrok

      -

      You should immediately be greeted with a screen that contains the public URL for the tunnel we just started! In the example above, the public URL 5.tcp.eu.ngrok.io:14407 is mapped to localhost:5432, which is the address of the Postgres database.

      -
      Don’t close this window while working on the tutorial as this is required to keep the connections between Flow and the database alive.
      -

      Before we jump into setting up the replication, you can quickly verify the data being properly generated by connecting to the database and peeking into the products table, as shown below:

      -
      ~ psql -h 5.tcp.eu.ngrok.io -p 14407 -U postgres -d postgres
      Password for user postgres:
      psql (16.2)
      Type "help" for help.

      postgres=# \d
                    List of relations
       Schema |      Name       | Type  |  Owner
      --------+-----------------+-------+----------
       public | flow_watermarks | table | postgres
       public | products        | table | postgres
      (2 rows)

      postgres=# select count(*) from products;
       count
      -------
        2637
      (1 row)

      postgres=# select count(*) from products;
       count
      -------
        2642
      (1 row)
      -

      By executing a count(*) statement a few seconds apart you are able to verify that data is in fact being written into the table.

      -

      Step 2. Set up a Capture

      -

      Good news, the hard part is over! Smooth sailing from here on out. Head over to your Flow dashboard (if you haven’t registered yet, you can do so here.) and create a new Capture. A capture is how Flow ingests data from an external source. Every Data Flow starts with a Capture.

      -

      Go to the sources page by clicking on the Sources on the left hand side of your screen, then click on + New Capture

      -

      Add new Capture

      -

      Configure the connection to the database based on the information we gathered in the previous step and press Next.

      -

      Configure Capture

      -

      On the following page, we can configure how our incoming data should be represented in Flow as collections. As a quick refresher, let’s recap how Flow represents data on a high level.

      -

      Documents

      -

      The documents of your flows are stored in collections: real-time data lakes of JSON documents in cloud storage. Documents being backed by an object storage mean that once you start capturing data, you won’t have to worry about it not being available to replay – object stores such as S3 can be configured to cheaply store data forever. See docs page for more information.

      -

      Schemas

      -

      Flow documents and collections always have an associated schema that defines the structure, representation, and constraints of your documents. In most cases, Flow generates a functioning schema on your behalf during the discovery phase of capture, which has already automatically happened - that’s why you’re able to take a peek into the structure of the incoming data!

      -

      To see how Flow parsed the incoming records, click on the Collection tab and verify the inferred schema looks correct.

      -

      Configure Collections

      -

      Before you advance to the next step, let’s take a look at the other configuration options we have here. You’ll see three toggles, all turned on by default:

      -
        -
      • -

        Automatically keep schemas up to date

        -
      • -
      • -

        Automatically add new source collections

        -
      • -
      • -

        Breaking changes re-version collections

        -
      • -
      -

      All of these settings relate to how Flow handles schema evolution, so let’s take a quick detour to explain them from a high-level perspective.

      -

      Estuary Flow's schema evolution feature seamlessly handles updates to dataset structures within a Data Flow, ensuring uninterrupted operation. Collection specifications define each dataset, including key, schema, and partitions. When specs change, schema evolution automatically updates associated components to maintain compatibility.

      -

      It addresses breaking changes by updating materializations or recreating collections with new names, preventing disruptions. Common causes of breaking changes include modifications to collection schemas, which require updates to materializations.

      -

      Overall, schema evolution streamlines adaptation to structural changes, maintaining smooth data flow within the system.

      -

      For more information, check out the dedicated documentation page for schema evolution.

      -

      For the sake of this tutorial, feel free to leave everything at its default setting and press Next again, then Save and Publish to deploy the connector and kick off a backfill.

      -

      Step 3. Set up a Materialization

      -

      Similarly to the source side, we’ll need to set up some initial configuration in Snowflake to allow Flow to materialize collections into a table.

      -

      Preparing Snowflake for use with Estuary Flow involves the following steps:

      -

      1. Keep the Flow web app open and open a new tab or window to access your Snowflake console.

      -

      3. Create a new SQL worksheet. This provides a platform to execute queries.

      -

      4. Paste the provided script into the SQL console, adjusting the value for estuary_password to a strong password.

      -
      set database_name = 'ESTUARY_DB';
      set warehouse_name = 'ESTUARY_WH';
      set estuary_role = 'ESTUARY_ROLE';
      set estuary_user = 'ESTUARY_USER';
      set estuary_password = 'secret';
      set estuary_schema = 'ESTUARY_SCHEMA';
      -- create role and schema for Estuary
      create role if not exists identifier($estuary_role);
      grant role identifier($estuary_role) to role SYSADMIN;
      -- Create snowflake DB
      create database if not exists identifier($database_name);
      use database identifier($database_name);
      create schema if not exists identifier($estuary_schema);
      -- create a user for Estuary
      create user if not exists identifier($estuary_user)
      password = $estuary_password
      default_role = $estuary_role
      default_warehouse = $warehouse_name;
      grant role identifier($estuary_role) to user identifier($estuary_user);
      grant all on schema identifier($estuary_schema) to identifier($estuary_role);
      -- create a warehouse for estuary
      create warehouse if not exists identifier($warehouse_name)
      warehouse_size = xsmall
      warehouse_type = standard
      auto_suspend = 60
      auto_resume = true
      initially_suspended = true;
      -- grant Estuary role access to warehouse
      grant USAGE
      on warehouse identifier($warehouse_name)
      to role identifier($estuary_role);
      -- grant Estuary access to database
      grant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role);
      -- change role to ACCOUNTADMIN for STORAGE INTEGRATION support to Estuary (only needed for Snowflake on GCP)
      use role ACCOUNTADMIN;
      grant CREATE INTEGRATION on account to role identifier($estuary_role);
      use role sysadmin;
      COMMIT;
      -

      5. Execute all the queries by clicking the drop-down arrow next to the Run button and selecting "Run All."

      -

      6. Snowflake will process the queries, setting up the necessary roles, databases, schemas, users, and warehouses for Estuary Flow.

      -

      7. Once the setup is complete, return to the Flow web application to continue with the integration process.

      -

      Back in Flow, head over to the Destinations page, where you can create a new Materialization.

      -

      Add new Materialization

      -

      Choose Snowflake and start filling out the connection details based on the values inside the script you executed in the previous step. If you haven’t changed anything, this is how the connector configuration should look like:

      -

      Configure Materialization endpoint

      -

      You can grab your Snowflake host URL and account identifier by navigating to these two little buttons on the Snowflake UI.

      -

      Grab your Snowflake account id

      -

      If you scroll down to the Advanced Options section, you will be able to configure the "Update Delay" parameter. If you leave this parameter unset, the default value of 30 minutes will be used.

      -

      Update Delay

      -

      The Update Delay parameter in Estuary materializations offers a flexible approach to data ingestion scheduling. It represents the amount of time the system will wait before it begins materializing the latest data.

      -

      For example, if an update delay is set to 2 hours, the materialization task will pause for 2 hours before processing the latest available data. This delay ensures that data is not pulled in immediately after it becomes available, allowing your Snowflake warehouse to go idle and be suspended in between updates, which can significantly reduce the number of credits consumed.

      -

      After the connection details are in place, the next step is to link the capture we just created to Flow is able to see collections we are loading data into from Postgres.

      -

      You can achieve this by clicking on the “Source from Capture” button, and selecting the name of the capture from the table.

      -

      Link Capture

      -

      After pressing continue, you are met with a few configuration options, but for now, feel free to press Next, then Save and Publish in the top right corner, the defaults will work perfectly fine for this tutorial.

      -

      A successful deployment will look something like this:

      -

      Successful Deployment screen

      -

      And that’s pretty much it, you’ve successfully published a real-time CDC pipeline. Let’s check out Snowflake to see how the data looks.

      -

      Results in Snowflake

      -

      Looks like the data is arriving as expected, and the schema of the table is properly configured by the connector based on the types of the original table in Postgres.

      -

      To get a feel for how the data flow works; head over to the collection details page on the Flow web UI to see your changes immediately. On the Snowflake end, they will be materialized after the next update.

      -
      Based on your configuration of the "Update Delay" parameter when setting up the Snowflake Materialization, you might have to wait until the configured amount of time passes for your changes to make it to the destination.
      -

      Party time!

      -

      Congratulations! 🎉 You've successfully set up a CDC pipeline from PostgreSQL to Snowflake using Estuary Flow. In just a few minutes, you've learned how to configure log-based CDC replication, handle schema evolution, and deploy a robust data integration solution.

      -

      Take a moment to celebrate your achievement! You've not only gained valuable technical knowledge but also demonstrated the agility and efficiency of modern data engineering practices. With your newfound skills, you're well-equipped to tackle complex data challenges and drive innovation in your organization.

      -

      Clean up

      -

      After every party, it’s customary to clean up after ourselves. After you are done exploring the flow, make sure to remove any resources which you won’t use anymore!

      -

      Postgres

      -

      Simply stop the Docker containers & terminate the ngrok process. This will terminate both the database process and the tunnel which exposed it to the internet.

      -

      Snowflake

      -

      To clean up resources in Snowflake use the following SQL script.

      -
      snowflake_cleanup.sql
      -- Revoke all privileges from Estuary role
      revoke all privileges on schema ESTUARY_SCHEMA from role ESTUARY_ROLE;
      revoke all privileges on database ESTUARY_DB from role ESTUARY_ROLE;

      -- Drop the warehouse
      drop warehouse if exists ESTUARY_WH;

      -- Drop the role and user
      drop user if exists ESTUARY_USER;
      drop role if exists ESTUARY_ROLE;

      -- Drop the schema and database
      drop schema if exists ESTUARY_SCHEMA;
      drop database if exists ESTUARY_DB;
      -

      Flow

      -

      In the UI, disable or delete any resources you don’t wish to keep.

      -

      Next Steps

      -

      That’s it! You should have everything you need to know to create your own data pipeline for loading data into Snowflake! 

      -

      Now try it out on your own PostgreSQL database or other sources.

      -

      If you want to learn more, make sure you read through the Estuary documentation.

      -

      You’ll find instructions on how to use other connectors here. There are more tutorials here

      -

      Also, don’t forget to join the Estuary Slack Community!

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/index.html b/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/index.html deleted file mode 100644 index 5aa7445d3a..0000000000 --- a/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/index.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - -Real-time CDC with MongoDB | Estuary Flow - - - - - - - - - -
      -

      Real-time CDC with MongoDB

      -

      A step-by-step guide to setting up Change Data Capture (CDC) from MongoDB with Estuary Flow.

      -

      High level architecture

      -

      MongoDB is still one of the most popular document stores powering web applications today. Due to its flexible schema handling and tight integration with JSON-based libraries developers love working with it. It’s easy to set up, painless to maintain, and works at scale.

      -

      Because it’s the centerpiece of so many applications, it’s a common data engineering challenge to extract data out of MongoDB in order to power a data warehouse or enable other downstream use cases, like AI or operational analytics.

      -

      This tutorial will guide you through using Estuary Flow to capture data from MongoDB using change data capture (CDC), requiring minimal configuration. By following these steps, you can empower your organization to leverage its application data in just a few minutes.

      -

      Video tutorial

      -
      -

      What is CDC?

      -

      CDC, or Change Data Capture, is a method used to track and capture changes made to data in a database. It enables the real-time capture of insertions, updates, and deletions, providing a continuous stream of changes.

      -

      This stream of data is invaluable for keeping downstream systems synchronized and up-to-date with the source database, facilitating real-time analytics, replication, and data integration. In essence, CDC allows organizations to capture and react to data changes as they occur, ensuring data accuracy and timeliness across their systems.

      -

      Optionally, if you are interested in the intricacies of change data capture, head over to this article, where we explain the theory behind it - this is not a requirement for this tutorial, so if you want to dive in head first, keep on reading!

      -

      Understanding Change Events in MongoDB

      -

      Change events in MongoDB are notifications triggered by modifications to the database's data, configuration, or structure through a mechanism called change streams.

      -

      Change Streams in MongoDB are a convenient way for CDC, enabling real-time monitoring of data changes without having to directly interact with the underlying oplog. CDC processes leverage Change Streams to subscribe to data changes, capturing detailed events promptly as insertions, updates, or deletions occur.

      -

      This approach ensures efficient data propagation to downstream systems, scalability for high-throughput environments, and robust error handling for operations.

      -

      MongoDB supports various types of change events, each catering to different aspects of database operations. For data synchronization, the following three events are the only ones that matter:

      -
        -
      • Insert Events: Triggered when new documents are inserted into a collection.
      • -
      -

      Create event

      -
        -
      • Update Events: Fired upon modifications to existing documents, including field updates and replacements.
      • -
      -

      Update event

      -
        -
      • Delete Events: Signaled when documents are removed from a collection.
      • -
      -
      In MongoDB, if you delete a key from a document, the corresponding change event that gets fired is an "update" event. This may seem counterintuitive at first, but in MongoDB, updates are atomic operations that can modify specific fields within a document, including removing keys. So, when a key is deleted from a document, MongoDB interprets it as an update operation where the specific field (i.e., the key) is being removed, resulting in an "update" event being generated in the oplog.
      -

      Delete event

      -

      Introduction to Estuary Flow

      -

      Estuary is the best tool for integrating CDC streams from MongoDB. Here are a few reasons why:

      -
        -
      • -

        Unlike ELT vendors, Estuary does streaming CDC and incremental snapshots, not full snapshots or batch change data extraction. This puts less of a load on the source database and lowers latency.

        -
      • -
      • -

        Estuary also extracts exactly-and-only-once. As it streams snapshots and changes data it also stores it as a collection for later reuse, such as for backfilling or stream replay. ELT vendors require you to re-extract every time to want to resend the data or restart a change data stream.

        -
      • -
      • -

        Estuary supports both real-time and batch. Its streaming latency is within 100ms, and it always extracts in real-time. But it supports any latency from real-time to hours or days for destinations.

        -
      • -
      • -

        Estuary guarantees change data is delivered exactly once.

        -
      • -
      • -

        Estuary can also maintain type I and type II slowly changing dimensions directly into a target.

        -
      • -
      • -

        Estuary streaming has 50MB/sec per connection per table throughput rates, which is 5-10x any other benchmarks for CDC. It also scales horizontally to increase throughput.

        -
      • -
      -

      Time to build a real-time CDC pipeline!

      -

      Prerequisites

      -

      To follow along with the tutorial, you’ll need the following:

      -
        -
      • -

        An Estuary Flow account. If you haven’t yet, sign up for free here. A fully-managed MongoDB Capture connector is ready for you to get started.

        -
      • -
      • -

        A MongoDB Atlas cluster: This tutorial uses Atlas as the source database, but Estuary supports other types of MongoDB deployments as well.

        -
      • -
      -

      Setting up MongoDB

      -

      To prepare MongoDB for Estuary Flow, you need to ensure the following prerequisites are met:

      -

      Credentials

      -

      Obtain the necessary credentials for connecting to your MongoDB instance and database. This includes credentials for authentication purposes, typically a username and password.

      -

      Read Access

      -

      Ensure that you have read access to the MongoDB database(s) from which you intend to capture data. MongoDB utilizes Role-Based Access Control (RBAC), so make sure your user account has the appropriate permissions to read data.

      -

      MongoDB built-in roles

      -

      In MongoDB Atlas, any of the built-in Roles will work for the tutorial, but Flow needs at least read permissions over the data you wish to capture if you wish to set up more granular, restricted permissions.

      -

      Configuration Considerations

      -
        -
      1. -

        If you haven't already, make sure you deploy a Replica Set-type MongoDB cluster. Change streams require a replica set in order to work. A replica set is a group of MongoDB deployments that maintain the same data set. If you are working following along with a fresh MongoDB Atlas project, you shouldn’t need to configure anything manually for this, as the default free-tier instance is a cluster of 3 replicas. To learn more about replica sets, see the Replication Introduction in the MongoDB manual.

        -
      2. -
      3. -

        Ensure that Estuary's IP addresses are allowlisted to allow access. We’ll show you how to do this in the next section.

        -
      4. -
      -

      Configure MongoDB

      -

      Let’s start by provisioning our database. As you can see, for this tutorial, you can just deploy an M0-category cluster, which is free to use.

      -

      MongoDB deployment options

      -

      After the cluster has finished provisioning, we’ll need to make sure that Estuary Flow is able to connect to the database. For this, the only requirement with MongoDB Atlas is allowlisting the Estuary Flow IP addresses.

      -

      Navigate to the “Network Access” page using the left hand sidebar, and using the “Add new IP address” button, create the list entry which enables the communication between the two services.

      -

      Allowlisting Estuary Flow's IP

      -

      Next, find your connection string by navigating to the mongosh setup page by clicking the “Connect” button on the database overview section, then choosing the “Shell” option.

      -
      You’re not going to set up mongosh for this tutorial, but this is the easiest way to get ahold of the connection string we’ll be using.
      -

      Grab your MongoDB connection string

      -

      Copy the connection string and head over to your Estuary Flow dashboard to continue the tutorial.

      -

      Setting up Estuary Flow

      -

      On the dashboard, create a new capture by navigating to the “Sources” menu using the sidebar, then pressing the “New Capture” button. In the list of available connectors, search for “MongoDB”, then press “Capture”.

      -

      Create a Source Capture

      -

      Pressing this button will bring you to the connector configuration page, where you’ll be able to provision your fully managed real-time Data Flow.

      -

      MongoDB Capture Configuration

      -

      As a first step, in the Capture Details section, name your capture and optionally add a description for it.

      -

      Capture details configuration

      -

      Once you are finished, step down to the second configuration section, called “Endpoint Config”. Here you have to use the address for the database you took a note of in the MongoDB setup section, along with your username and password which you configured when setting up MongoDB Atlas.

      -

      If your user has access to all databases, ensure that in your MongoDB address, you specify the ?authSource=admin parameter in the connection address. In this case, authentication is performed through your admin database.

      -

      Capture endpoint configuration

      -

      As for the "Database" option, feel free to leave it empty, that way the automated discovery process of Flow will make sure every available database is ready for data extraction.

      -

      After you press the blue “Next” button in the top right corner, Flow will automatically crawl through the connection to discover available resources. Next up, you’ll see the third, and final configuration section, where you are able to view and choose from all the databases and collections which are discovered by Flow.

      -

      Capture output collections confuration

      -

      Documents and Collections

      -

      Before we initialize the connector, let’s talk a little bit about how incoming data is represented in Flow.

      -

      The documents of your flows are stored in collections: real-time data lakes of JSON documents in cloud storage.

      -
      Keep in mind, these are not the same documents and collections as the ones in MongoDB, only the names are similar, but we are talking about separate systems.
      -

      Collections being stored in an object storage mean that once you start capturing data, you won’t have to worry about it not being available to replay – object stores such as S3 can be configured to cheaply store data forever. See docs page for more information about documents.

      -

      To see how Flow parsed the incoming records, click on the “Collection” tab on the UI.

      -

      Capture bindings configuration

      -

      When you set up a capture from MongoDB using the Flow web app, the underlying collection specifications will look something like this:

      -
      key: [ /_id ]
      writeSchema:
        type: object
        properties:
          _id: { type: string }
        required: [ _id ]
      readSchema:
        allOf:
          - $ref: flow://write-schema
          - $ref: flow://inferred-schema
      -

      This specification uses separate read and write schemas. The writeSchema is extremely permissive, and only requires an _id property with a string value. The readSchema references flow://inferred-schema, which expands to the current inferred schema when the collection is published.

      -

      MongoDB documents have a mandatory _id field that is used as the key of the collection. But that is essentially the only requirement. You can't know what other fields may exist on MongoDB documents until you've read them.  On the UI, for this reason, only three fields are visible initially in the collection schema tab.

      -

      Automating schema evolution

      -

      In addition to selecting the collections for capture, this interface provides access to three settings that govern schema evolution. In a NoSQL database environment like MongoDB, schema alterations are frequent occurrences. Manually synchronizing source and destination schemas can end up being a lot of maintenance. To help with this, Estuary introduces a more sophisticated schema evolution strategy.

      -

      With Estuary Flow, teams can opt to suspend the Data Flow using data contracts, automate the update of the target schema with the new MongoDB schema, or create a new table in the destination to maintain separation between old and new schemas. Details can be found in our schema evolution docs.

      -

      Schema evolutions serve to prevent errors stemming from discrepancies between specifications in a number of ways:

      -
        -
      1. -

        Materializations will automatically apply backward-compatible schema changes, like adding a new column. This doesn't require re-backfilling the target tables or re-creating the Flow collection.

        -
      2. -
      3. -

        For more complex scenarios, the evolution adjusts the affected materialization bindings to increment their backfill counter, prompting the materialization process to reconstruct the resource (such as a database table) and backfill it from the offset.

        -
      4. -
      5. -

        In instances where necessary, such as when the collection key or logical partitioning undergoes changes, the evolution generates a completely new collection with a numerical suffix (e.g., _v2). This new collection initializes as empty and undergoes backfilling from the source. Moreover, the evolution updates all captures and materializations referencing the old collection to point to the new collection, incrementing their backfill counters accordingly. This method is more intricate and is only invoked when essential alterations are identified.

        -
      6. -
      -

      In these scenarios, the names of destination resources remain unaltered. For instance, a materialization to Postgres would drop and re-establish the affected tables with their original names.

      -

      Publishing the Capture

      -

      To finalize the connector configuration and kick it off, press the “Save and Publish” button. Flow will test, save and publish your capture. You’ll see a similar screen if everything went well or if there were any issues setting up the connector, you’ll see detailed error messages instead.

      -

      Successful capture publish screen

      -

      During the initial database snapshot – which is triggered automatically – the connector seamlessly captures change events by continuously monitoring change streams while concurrently executing collection scans to backfill pre-existing documents. Following the initial snapshot, the connector perpetually monitors change streams to capture all subsequent changes in real-time.

      -

      Incremental backfills in the MongoDB connector follow a straightforward approach to ensure comprehensive data capture with minimal latency. Initially, all tracked change streams are synchronized to maintain data integrity. Then, a targeted backfilling effort occurs across MongoDB collections until all are up to date. Continuous monitoring via change streams ensures ongoing data capture and means there is no need to pause replication during an ongoing backfill.

      -

      In the event of a pause in the connector's process, it resumes capturing change events from the point of interruption. However, the connector's ability to accomplish this depends on the size of the replica set oplog. In certain scenarios where the pause duration is significant enough for the oplog to purge old change events, the connector may necessitate redoing the backfill to maintain data consistency.

      -
      To ensure reliable data capture, it is recommended to adjust the oplog size or set a minimum retention period. A recommended minimum retention period of at least 24 hours is sufficient for most cases.
      -

      Real-time CDC

      -

      Let’s head over to the collections page to see our arriving documents.

      -

      Collections

      -

      Looks like all of the selected MongoDB collections have been fully replicated into Flow by the initial backfill.

      -

      Let’s take a look at the movies collection to see what details Flow can tell us about the documents. You can see some statistics about the integration throughput and you can also take a look at the actual documents in a preview window.

      -

      Collection details

      -

      You can also check out the generated specification, which is the Flow’s behind-the-scenes declarative way of representing the Collection resource.

      -

      For the movies collection, this is what it looks like:

      -
      {
      "writeSchema": {
      "type": "object",
      "required": ["_id"],
      "properties": {
      "_id": {
      "type": "string"
      },
      "_meta": {
      "$schema": "http://json-schema.org/draft/2020-12/schema",
      "properties": {
      "op": {
      "type": "string",
      "enum": ["c", "u", "d"],
      "title": "Change Operation",
      "description": "Change operation type: 'c' Create/Insert 'u' Update 'd' Delete."
      }
      },
      "type": "object"
      }
      },
      "x-infer-schema": true
      },
      "readSchema": {
      "allOf": [
      {
      "$ref": "flow://write-schema"
      },
      {
      "$ref": "flow://inferred-schema"
      }
      ]
      },
      "key": ["/_id"]
      }
      -

      You can see the flexible readSchema configuration in action we mentioned above.

      -

      You can use the preview window on the collections “Overview” page to quickly test how change events propagate from MongoDB. Head over to the MongoDB Atlas UI and insert a new document into the movies collection.

      -

      Insert new document

      -

      Here’s a sample JSON (describing non-existent but very intriguing movie) you can copy paste into the pop-up modal to spare you the trouble.

      -
      {
      "title": "Dataflow",
      "fullplot": "In a near-future world driven by data, a team of maverick engineers and programmers set out to revolutionize the way information is processed and transmitted. As they delve deeper into the complexities of real-time data streaming, they uncover dark secrets and face moral dilemmas that threaten to unravel their ambitious project.",
      "plot": "A team of brilliant engineers embark on a groundbreaking project to develop a real-time data streaming platform, but they soon discover unexpected challenges and threats lurking in the digital realm.",
      "genres": ["Drama", "Sci-Fi", "Thriller"],
      "runtime": 135,
      "cast": [
      "Emily Blunt",
      "Michael B. Jordan",
      "Idris Elba",
      "Zendaya",
      "Oscar Isaac"
      ],
      "poster": "https://example.com/posters/real-time-data-streaming.jpg",
      "languages": ["English"],
      "released": 1739808000000,
      "directors": ["Christopher Nolan"],
      "rated": "PG-13",
      "awards": {
      "wins": 3,
      "nominations": 8,
      "text": "3 wins, 8 nominations"
      },
      "lastupdated": "2024-04-30 10:15:00.000000",
      "year": 2024,
      "imdb": {
      "rating": 8.5,
      "votes": 15234,
      "id": 1001
      },
      "countries": ["USA", "United Kingdom"],
      "type": "movie",
      "tomatoes": {
      "viewer": {
      "rating": 4.2,
      "numReviews": 3856,
      "meter": 82
      },
      "fresh": 34,
      "critic": {
      "rating": 8.0,
      "numReviews": 22,
      "meter": 91
      },
      "rotten": 2,
      "lastUpdated": 1739894400000
      },
      "num_mflix_comments": 120
      }
      -

      After you insert the document, check out the collection preview on the Flow UI to verify it has indeed arrived. The process for updating and deleting collections in MongoDB works similarly.

      -

      CDC event verification

      -

      Wrapping up

      -

      In this tutorial, you set up a MongoDB Change Data Capture (CDC) integration using Estuary Flow. Throughout the process, you learned about the technical nuances of capturing and synchronizing data changes from MongoDB collections in real-time.

      -

      Key takeaways from this tutorial:

      -
        -
      • -

        MongoDB's document-based approach and schema flexibility present unique challenges and opportunities for Change Data Capture workflows.

        -
      • -
      • -

        You explored the prerequisites and configuration settings required to establish a seamless connection between MongoDB and Estuary, ensuring efficient data capture and synchronization.

        -
      • -
      • -

        Estuary's schema evolution capabilities enable data teams to manage schema changes effectively, ensuring data consistency and integrity across source and destination systems.

        -
      • -
      • -

        You learned how Flow continuously monitors MongoDB change streams and executes backfilling processes to capture changes accurately, even in the event of interruptions or schema alterations.

        -
      • -
      -

      Next Steps

      -

      That’s it! You should have everything you need to know to create your own data pipeline for capturing change events from MongoDB!

      -

      Now try it out on your own CloudSQL database or other sources.

      -

      If you want to learn more, make sure you read through the Estuary documentation.

      -

      You’ll find instructions on how to use other connectors here. There are more tutorials here.

      -

      Also, don’t forget to join the Estuary Slack Community!

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/connect-network/index.html b/pr-preview/pr-1594/guides/connect-network/index.html deleted file mode 100644 index e33e19b693..0000000000 --- a/pr-preview/pr-1594/guides/connect-network/index.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - -Configure connections with SSH tunneling | Estuary Flow - - - - - - - - - -

      Configure connections with SSH tunneling

      -

      Flow connects to certain types of endpoints — generally databases — using their IP address and port. -For added security, you can configure SSH tunneling, also known as port forwarding. -You configure this in the networkTunnel section of applicable capture or materialization definitions, but -before you can do so, you need a properly configured SSH server on your internal network or cloud hosting platform.

      -
      tip

      If permitted by your organization, a quicker way to connect to a secure database is to allowlist the Estuary IP addresses

      For help completing this task on different cloud hosting platforms, -see the documentation for the connector you're using.

      -

      This guide includes setup steps for popular cloud platforms, -as well as generalized setup that provides a basic roadmap for on-premise servers or other cloud platforms.

      -

      After completing the appropriate setup requirements, proceed to the configuration section -to add your SSH server to your capture or materialization definition.

      -

      General setup

      -
        -
      1. -

        Activate an SSH implementation on a server, if you don't have one already. -Consult the documentation for your server's operating system and/or cloud service provider, as the steps will vary. -Configure the server to your organization's standards, or reference the SSH documentation for -basic configuration options.

        -
      2. -
      3. -

        Referencing the config files and shell output, collect the following information:

        -
      4. -
      -
        -
      • The SSH user, which will be used to log into the SSH server, for example, sshuser. You may choose to create a new -user for this workflow.
      • -
      • The SSH endpoint for the SSH server, formatted as ssh://user@hostname[:port]. This may look like the any of following: -
          -
        • ssh://sshuser@ec2-198-21-98-1.compute-1.amazonaws.com
        • -
        • ssh://sshuser@198.21.98.1
        • -
        • ssh://sshuser@198.21.98.1:22 -
          Hint

          The SSH default port is 22. -Depending on where your server is hosted, you may not be required to specify a port, -but we recommend specifying :22 in all cases to ensure a connection can be made.

          -
        • -
        -
      • -
      -
        -
      1. In the .ssh subdirectory of your user home directory, -look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, -which indicates it is an RSA-based file. -
          -
        • If no such file exists, generate one using the command:
        • -
        -
           ssh-keygen -m PEM -t rsa
        -
          -
        • If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command:
        • -
        -
           ssh-keygen -p -N "" -m pem -f /path/to/key
        -
      2. -
      -

      Taken together, these configuration details would allow you to log into the SSH server from your local machine. -They'll allow the connector to do the same.

      -
        -
      1. -

        Configure your internal network to allow the SSH server to access your capture or materialization endpoint.

        -
      2. -
      3. -

        To grant external access to the SSH server, it's essential to configure your network settings accordingly. The approach you take will be dictated by your organization's IT policies. One recommended step is to allowlist the Estuary IP addresses. This ensures that connections from this specific IP are permitted through your network's firewall or security measures.

        -
      4. -
      -

      Setup for AWS

      -

      To allow SSH tunneling to a database instance hosted on AWS, you'll need to create a virtual computing environment, or instance, in Amazon EC2.

      -
        -
      1. -

        Begin by finding your public SSH key on your local machine. -In the .ssh subdirectory of your user home directory, -look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, -which indicates it is an RSA-based file.

        -
          -
        • If no such file exists, generate one using the command:
        • -
        -
           ssh-keygen -m PEM -t rsa
        -
          -
        • If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command:
        • -
        -
           ssh-keygen -p -N "" -m pem -f /path/to/key
        -
      2. -
      3. -

        Import your SSH key into AWS.

        -
      4. -
      5. -

        Launch a new instance in EC2. During setup:

        -
          -
        • Configure the security group to allow SSH connection from anywhere.
        • -
        • When selecting a key pair, choose the key you just imported.
        • -
        -
      6. -
      7. -

        Connect to the instance, -setting the user name to ec2-user.

        -
      8. -
      9. -

        Find and note the instance's public DNS. This will be formatted like: ec2-198-21-98-1.compute-1.amazonaws.com.

        -
      10. -
      -

      Setup for Google Cloud

      -

      To allow SSH tunneling to a database instance hosted on Google Cloud, you must set up a virtual machine (VM).

      -
        -
      1. -

        Begin by finding your public SSH key on your local machine. -In the .ssh subdirectory of your user home directory, -look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, -which indicates it is an RSA-based file.

        -
          -
        • If no such file exists, generate one using the command:
        • -
        -
           ssh-keygen -m PEM -t rsa
        -
          -
        • If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command:
        • -
        -
           ssh-keygen -p -N "" -m pem -f /path/to/key
        -
          -
        • If your Google login differs from your local username, generate a key that includes your Google email address as a comment:
        • -
        -
           ssh-keygen -m PEM -t rsa -C user@domain.com
        -
      2. -
      3. -

        Create and start a new VM in GCP, choosing an image that supports OS Login.

        -
      4. -
      5. -

        Add your public key to the VM.

        -
      6. -
      7. -

        Reserve an external IP address and connect it to the VM during setup. -Note the generated address.

        -
      8. -
      -

      Setup for Azure

      -

      To allow SSH tunneling to a database instance hosted on Azure, you'll need to create a virtual machine (VM) in the same virtual network as your endpoint database.

      -
        -
      1. -

        Begin by finding your public SSH key on your local machine. -In the .ssh subdirectory of your user home directory, -look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, -which indicates it is an RSA-based file.

        -
          -
        • If no such file exists, generate one using the command:
        • -
        -
           ssh-keygen -m PEM -t rsa
        -
          -
        • If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command:
        • -
        -
           ssh-keygen -p -N "" -m pem -f /path/to/key
        -
      2. -
      3. -

        Create and connect to a VM in a virtual network, and add the endpoint database to the network.

        -
          -
        1. -

          Create a new virtual network and subnet.

          -
        2. -
        3. -

          Create a Linux or Windows VM within the virtual network, -directing the SSH public key source to the public key you generated previously.

          -
        4. -
        5. -

          Note the VM's public IP; you'll need this later.

          -
        6. -
        -
      4. -
      5. -

        Create a service endpoint for your database in the same virtual network as your VM. -Instructions for Azure Database For PostgreSQL can be found here; -note that instructions for other database engines may be different.

        -
      6. -
      -

      Configuration

      -

      After you've completed the prerequisites, you should have the following parameters:

      -
        -
      • -

        SSH Endpoint / sshEndpoint: the remote SSH server's hostname, or public IP address, formatted as ssh://user@hostname[:port]

        -

        The SSH default port is 22. -Depending on where your server is hosted, you may not be required to specify a port, -but we recommend specifying :22 in all cases to ensure a connection can be made.

        -
      • -
      • -

        Private Key / privateKey: the contents of the SSH private key file

        -
      • -
      -

      Use these to add SSH tunneling to your capture or materialization definition, either by filling in the corresponding fields -in the web app, or by working with the YAML directly. Reference the Connectors page for a YAML sample.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/create-dataflow/index.html b/pr-preview/pr-1594/guides/create-dataflow/index.html deleted file mode 100644 index ac395c646a..0000000000 --- a/pr-preview/pr-1594/guides/create-dataflow/index.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - -Create a basic Data Flow | Estuary Flow - - - - - - - - - -

      Create a basic Data Flow

      -

      This guide walks you through the process of creating an end-to-end Data Flow.

      -

      Prerequisites

      -

      This guide is intended for new Flow users and briefly introduces Flow's key concepts. -Though it's not required, you may find it helpful to read -the high level concepts documentation for more detail before you begin.

      -

      Introduction

      -

      In Estuary Flow, you create Data Flows to connect data source and destination systems.

      -

      The simplest Data Flow comprises three types of entities:

      -
        -
      • A data capture, which ingests data from an external source
      • -
      • One or more collections, which store that data in a cloud-backed data lake
      • -
      • A materialization, to push the data to an external destination
      • -
      -

      The capture and materialization each rely on a connector. -A connector is a plug-in component that interfaces between Flow and whatever data system you need to connect to. -Here, we'll walk through how to leverage various connectors, configure them, and deploy your Data Flow.

      -

      Create a capture

      -

      You'll first create a capture to connect to your data source system. -This process will create one or more collections in Flow, which you can then materialize to another system.

      -
        -
      1. -

        Go to the Flow web application at dashboard.estuary.dev and sign in using the -credentials provided by your Estuary account manager.

        -
      2. -
      3. -

        Click the Sources tab and choose New Capture.

        -
      4. -
      5. -

        Choose the appropriate Connector for your desired data source.

        -
      6. -
      -

      A form appears with the properties required for that connector. -A documentation page with details about that connector appears in the side panel. -You can also browse the connectors reference in your browser.

      -
        -
      1. -

        Type a name for your capture.

        -

        Your capture name must begin with a prefix to which you have access.

        -

        In the Name field, click the drop-down arrow and select an available prefix. -Append a unique capture name after the / to create the full name, for example acmeCo/myFirstCapture.

        -
      2. -
      3. -

        Fill out the required properties and click Next.

        -
      4. -
      -

      Flow uses the provided information to initiate a connection to the source system. -It identifies one or more data resources — these may be tables, data streams, or something else, depending on the connector. These are each mapped to a collection.

      -

      The Output Collections browser appears, showing this list of available collections. -You can decide which ones you want to capture.

      -
        -
      1. Look over the list of available collections. All are selected by default. -You can remove collections you don't want to capture, change collection names, and for some connectors, modify other properties.
      2. -
      -
      tip

      Narrow down a large list of available collections by typing in the Search Bindings box.

      -

      If you're unsure which collections you want to keep or remove, you can look at their schemas.

      -
        -
      1. -

        In the Output Collections browser, select a collection and click the Collection tab to view its schema and collection key. -. -For many source systems, you'll notice that the collection schemas are quite permissive. -You'll have the option to apply more restrictive schemas later, when you materialize the collections.

        -
      2. -
      3. -

        If you made any changes to output collections, click Next again.

        -
      4. -
      5. -

        Once you're satisfied with the configuration, click Save and Publish. You'll see a notification when the capture publishes successfully.

        -
      6. -
      7. -

        Click Materialize collections to continue.

        -
      8. -
      -

      Create a materialization

      -

      Now that you've captured data into one or more collections, you can materialize it to a destination.

      -
        -
      1. Find the tile for your desired data destination and click Materialization.
      2. -
      -

      The page populates with the properties required for that connector. -More details are on each connector are provided in the connectors reference.

      -
        -
      1. -

        Choose a unique name for your materialization like you did when naming your capture; for example, acmeCo/myFirstMaterialization.

        -
      2. -
      3. -

        Fill out the required properties in the Endpoint Configuration.

        -
      4. -
      5. -

        Click Next.

        -
      6. -
      -

      Flow initiates a connection with the destination system.

      -

      The Endpoint Config has collapsed and the Source Collections browser is now prominent. -It shows each collection you captured previously. -All of them will be mapped to a resource in the destination. -Again, these may be tables, data streams, or something else. -When you publish the Data Flow, Flow will create these new resources in the destination.

      -

      Now's your chance to make changes to the collections before you materialize them.

      -
        -
      1. -

        Optionally remove some collections or add additional collections.

        -
          -
        • -

          Type in the Search Collections box to find a collection.

          -
        • -
        • -

          To remove a collection, click the x in its table row. You can also click the Remove All button.

          -
        • -
        -
      2. -
      3. -

        Optionally apply a stricter schema to each collection to use for the materialization.

        -

        Depending on the data source, you may have captured data with a fairly permissive schema. -You can tighten up the schema so it'll materialize to your destination in the correct shape. -(This isn't necessary for database and SaaS data sources, so the option won't be available.)

        -
          -
        1. -

          Choose a collection from the list and click its Collection tab.

          -
        2. -
        3. -

          Click Schema Inference.

          -

          The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for the materialization.

          -
        4. -
        5. -

          Review the new schema and click Apply Inferred Schema.

          -
        6. -
        -

        You can exert even more control over the output data structure using the Field Selector on the Config tab. -Learn how.

        -
      4. -
      5. -

        If you've made any changes to source fields, click Next again.

        -
      6. -
      7. -

        Click Save and publish. You'll see a notification when the full Data Flow publishes successfully.

        -
      8. -
      -

      What's next?

      -

      Now that you've deployed your first Data Flow, you can explore more possibilities.

      -
        -
      • -

        Read the high level concepts to better understand how Flow works and what's possible.

        -
      • -
      • -

        Create more complex Data Flows by mixing and matching collections in your captures and materializations. For example:

        -
          -
        • -

          Materialize the same collection to multiple destinations.

          -
        • -
        • -

          If a capture produces multiple collections, materialize each one to a different destination.

          -
        • -
        • -

          Materialize collections that came from different sources to the same destination.

          -
        • -
        • -

          Advanced users can modify collection schemas, apply data reductions, -or transform data with a derivation

          -
        • -
        -
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/create-derivation/index.html b/pr-preview/pr-1594/guides/create-derivation/index.html deleted file mode 100644 index e93cf44c08..0000000000 --- a/pr-preview/pr-1594/guides/create-derivation/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/customize-materialization-fields/index.html b/pr-preview/pr-1594/guides/customize-materialization-fields/index.html deleted file mode 100644 index 0cfe3fc3d8..0000000000 --- a/pr-preview/pr-1594/guides/customize-materialization-fields/index.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - -Customize materialized fields | Estuary Flow - - - - - - - - - -

      Customize materialized fields

      -

      When you first materialize a collection to an endpoint like a database or data warehouse, -the resulting table columns might not be formatted how you want. -You might notice missing columns, extra columns, or columns with names you don't like. -This happens when the collection's JSON schema doesn't map to a table schema appropriate for your use case.

      -

      You can control the shape and appearance of materialized tables using a two-step process.

      -

      First, you modify the source collection schema. -You can change column names by adding projections: -JSON pointers that turn locations in a document's JSON structure into custom named fields.

      -

      Then, you add the fields stanza to the materialization specification, telling Flow which fields to materialize.

      -

      The following sections break down the process in more detail.

      -
      Hint

      If you just need to add a field that isn't included by default and it's already present in the schema -with a name you like, skip ahead to include desired fields in your materialization.

      -

      Capture desired fields and generate projections

      -

      Any field you eventually want to materialize must be included in the collection's schema. -It's ok if the field is nested in the JSON structure; you'll flatten the structure with projections.

      -
      caution

      In this workflow, you'll edit a collection. This change can impact other downstream materializations and derivations. -Use caution and be mindful of any edit's consequences before publishing.

      -

      Captured collections

      -

      If the collection you're using was captured directly, follow these steps.

      -
        -
      1. -

        Go to the Captures page of the Flow web app -and locate the capture that produced the collection.

        -
      2. -
      3. -

        Click the Options button and choose Edit Specification.

        -
      4. -
      5. -

        Under Output Collections, choose the binding that corresponds to the collection. -Then, click the Collection tab.

        -
      6. -
      7. -

        In the list of fields, look for the fields you want to materialize. -If they're present and correctly named, you can skip to -including them in the materialization.

        -
      8. -
      -
      hint:

      Compare the field name and pointer. -For nested pointers, you'll probably want to change the field name to omit slashes.

      -
        -
      1. -

        If your desired fields aren't present or need to be re-named, edit the collection schema manually:

        -
          -
        1. -

          Click Edit.

          -
        2. -
        3. -

          Add missing fields to the schema in the correct location based on the source data structure.

          -
        4. -
        5. -

          Click Close.

          -
        6. -
        -
      2. -
      3. -

        Generate projections for new or incorrectly named fields.

        -
          -
        1. -

          If available, click the Schema Inference button. The Schema Inference Window appears. Flow cleans up your schema and adds projections for new fields.

          -
        2. -
        3. -

          Manually change the names of projected fields. These names will be used by the materialization and shown in the endpoint system as column names or the equivalent.

          -
        4. -
        5. -

          Click Next.

          -
        6. -
        -
        info

        Schema Inference isn't available for all capture types. -You can also add projections manually with flowctl. -Refer to the guide to editing with flowctl and -how to format projections.

        -
      4. -
      5. -

        Repeat steps 3 through 6 with other collections, if necessary.

        -
      6. -
      7. -

        Click Save and Publish.

        -
      8. -
      -

      Derived collections

      -

      If the collection you're using came from a derivation, follow these steps.

      -
        -
      1. Pull the derived collection's specification locally using flowctl.
      2. -
      -
      flowctl catalog pull-specs --name <yourOrg/full/collectionName>
      -
        -
      1. -

        Review the collection's schema to see if the fields of interest are included. If they're present, you can skip to -including them in the materialization.

        -
      2. -
      3. -

        If your desired fields aren't present or are incorrectly named, add any missing fields to the schema in the correct location based on the source data structure.

        -
      4. -
      5. -

        Use schema inference to generate projections for the fields.

        -
      6. -
      -
      flowctl preview --infer-schema --source <full\path\to\flow.yaml> --collection <yourOrg/full/collectionName>

      -
        -
      1. -

        Review the updated schema. Manually change the names of projected fields. These names will be used by the materialization and shown in the endpoint system as column names or the equivalent.

        -
      2. -
      3. -

        Re-publish the collection specification.

        -
      4. -
      -

      Include desired fields in your materialization

      -

      Now that all your fields are present in the collection schema as projections, -you can choose which ones to include in the materialization.

      -

      Every included field will be mapped to a table column or equivalent in the endpoint system.

      -
        -
      1. -

        If you haven't created the materialization, begin the process. Pause once you've selected the collections to materialize.

        -

        If your materialization already exists, navigate to the edit materialization page.

        -
      2. -
      3. -

        In the Collection Selector, choose the collection whose output fields you want to change. Click its Collection tab.

        -
      4. -
      5. -

        Review the listed field.

        -

        In most cases, Flow automatically detects all fields to materialize, projected or otherwise. However, a projected field may still be missing, or you may want to exclude other fields.

        -
      6. -
      7. -

        If you want to make changes, click Edit.

        -
      8. -
      9. -

        Use the editor to add the fields stanza to the collection's binding specification.

        -

        Learn more about configuring fields and view a sample specification.

        -
      10. -
      11. -

        Choose whether to start with Flow's recommended fields. Under fields, set recommended to true or false. If you choose true, you can exclude fields later.

        -
      12. -
      13. -

        Use include to add missing projections, or exclude to remove fields.

        -
      14. -
      15. -

        Click Close.

        -
      16. -
      17. -

        Repeat steps 2 through 8 with other collections, if necessary.

        -
      18. -
      19. -

        Click Save and Publish.

        -
      20. -
      -

      The named, included fields will be reflected in the endpoint system.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/index.html b/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/index.html deleted file mode 100644 index 574669dc3f..0000000000 --- a/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - -Connecting to Estuary Flow from Kafka using Dekaf | Estuary Flow - - - - - - - - - -

      Connecting to Estuary Flow from Kafka using Dekaf

      -
      Dekaf is currently in beta.

      Reporting is not yet supported for Dekaf, but is coming.

      We're currently not charging for use of Dekaf, but will eventually charge under our standard data movement pricing

      We appreciate your feedback as we continue to refine and enhance this feature.

      -

      Dekaf is Estuary Flow's Kafka API compatibility layer, allowing consumers to read data from Estuary Flow collections -as if they were Kafka topics. Additionally, Dekaf provides a schema registry API for managing schemas. This guide will -walk you through the steps to connect to Estuary Flow using Dekaf and its schema registry.

      -

      Overview

      -
        -
      • Collections represent datasets within Estuary Flow. All captured documents are written to a collection, and all -materialized documents are read from a collection.
      • -
      • Dekaf enables you to interact with these collections as though they were Kafka topics, providing seamless -integration with existing Kafka-based tools and workflows.
      • -
      -

      Key Features

      -
        -
      • Kafka Topic Emulation: Access Estuary Flow collections as if they were Kafka topics.
      • -
      • Schema Registry Emulation: Manage and retrieve schemas assigned to Estuary Flow collections, emulating Confluent's -Schema Registry.
      • -
      -

      Connection Details

      -

      To connect to Estuary Flow via Dekaf, you need the following connection details:

      -
        -
      • Broker Address: dekaf.estuary.dev
      • -
      • Schema Registry Address: https://dekaf.estuary.dev
      • -
      • Security Protocol: SASL_SSL
      • -
      • SASL Mechanism: PLAIN
      • -
      • SASL Username: {}
      • -
      • SASL Password: Estuary Refresh Token (Generate your token in -the Estuary Admin Dashboard)
      • -
      • Schema Registry Username: {}
      • -
      • Schema Registry Password: The same Estuary Refresh Token as above
      • -
      -

      How to Connect to Dekaf

      -

      1. Generate an Estuary Refresh Token:

      -
        -
      1. Log in to the Estuary Admin Dashboard.
      2. -
      3. Navigate to the section where you can generate tokens.
      4. -
      5. Generate a new refresh token and note it down securely.
      6. -
      -

      2. Set Up Your Kafka Client

      -

      Configure your Kafka client using the connection details provided.

      -

      Example Kafka Client Configuration

      -

      Below is an example configuration for a Kafka client using Python’s kafka-python library:

      -
      from kafka import KafkaConsumer

      # Configuration details
      conf = {
      'bootstrap_servers': 'dekaf.estuary.dev:9092',
      'security_protocol': 'SASL_SSL',
      'sasl_mechanism': 'PLAIN',
      'sasl_plain_username': '{}',
      'sasl_plain_password': 'Your_Estuary_Refresh_Token',
      'group_id': 'your_group_id',
      'auto_offset_reset': 'earliest'
      }

      # Create Consumer instance
      consumer = KafkaConsumer(
      'your_topic_name',
      bootstrap_servers=conf['bootstrap_servers'],
      security_protocol=conf['security_protocol'],
      sasl_mechanism=conf['sasl_mechanism'],
      sasl_plain_username=conf['sasl_plain_username'],
      sasl_plain_password=conf['sasl_plain_password'],
      group_id=conf['group_id'],
      auto_offset_reset=conf['auto_offset_reset'],
      enable_auto_commit=True,
      value_deserializer=lambda x: x.decode('utf-8')
      )

      # Poll for messages
      try:
      for msg in consumer:
      print(f"Received message: {msg.value}")
      except KeyboardInterrupt:
      pass
      finally:
      consumer.close()
      -

      You can also use kcat (formerly known as kafkacat) to test reading messages from an -Estuary Flow collection as if it were a Kafka topic.

      -
      kcat -C \
      -X broker.address.family=v4 \
      -X security.protocol=SASL_SSL \
      -X sasl.mechanism=PLAIN \
      -X sasl.username="{}" \
      -X sasl.password="Your_Estuary_Refresh_Token" \
      -b dekaf.estuary.dev:9092 \
      -t "full/nameof/estuarycolletion" \
      -p 0 \
      -o beginning \
      -s avro \
      -r https://{}:{Your_Estuary_Refresh_Token}@dekaf.estuary.dev
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/derivation_tutorial_sql/index.html b/pr-preview/pr-1594/guides/derivation_tutorial_sql/index.html deleted file mode 100644 index 4f6191266d..0000000000 --- a/pr-preview/pr-1594/guides/derivation_tutorial_sql/index.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - -How to transform data using SQL | Estuary Flow - - - - - - - - - -

      How to transform data using SQL

      -

      This guide will teach you how to write and publish a simple SQL derivation that you can use to transform data from one collection to another.

      -

      Introduction

      -

      This tutorial will show you how to implement a stateless transformation using SQL. You’ll learn how to implement a flow that transforms events coming from the live, real-time Wikipedia API.

      -

      Setting up your development environment

      -

      In order to implement transformations through derivations, you’ll need to set up your development environment. You’ll need a text editor and flowtcl, the CLI-tool for Flow installed on your machine. Check out the docs page on installation instructions.

      -

      Before continuing, sign in to the Estuary Flow dashboard, make sure you enable access to the Wikipedia demo. Using flowtcl, quickly verify you are able to view the demo collections used in this guide.

      -

      Execute the below command to display the documents in the demo/wikipedia/recentchange-sampled collection:

      -

      ::note This collection is a 3% sample of the enormous demo/wikipedia/recentchange collection which contains millions of documents. Since the purpose of this tutorial is to demonstrate a proof of concept, we avoid publishing a derivation that processes hundreds of gigabytes of data. -:::

      -
      flowctl collections read --collection demo/wikipedia/recentchange-sampled --uncommitted
      -

      If you see a stream of JSON documents on your terminal, you’re all good - feel free to cancel the process by pressing C^C.

      -

      Examine a sample JSON that lives in the demo collection, as this is the data you’ll be using as the input for our derivation.

      -
      {
        "$schema": "/mediawiki/recentchange/1.0.0",
        "_meta": {
          "file": "recentchange",
          "offset": 12837,
          "uuid": "f8f07d87-f5bf-11ee-8401-4fdf95f7b91a"
        },
        "bot": false,
        "comment": "[[:File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg]] added to category",
        "id": 2468434138,
        "meta": {
          "domain": "commons.wikimedia.org",
          "dt": "2024-04-08T15:52:13Z",
          "id": "d9e8698f-4eac-4262-a451-b7ca247e401c",
          "offset": 5008568732,
          "partition": 0,
          "request_id": "b5372124-63fa-45e1-b35e-86784f1692bc",
          "stream": "mediawiki.recentchange",
          "topic": "eqiad.mediawiki.recentchange",
          "uri": "https://commons.wikimedia.org/wiki/Category:Jetons"
        },
        "namespace": 14,
        "notify_url": "https://commons.wikimedia.org/w/index.php?diff=866807860&oldid=861559382&rcid=2468434138",
        "parsedcomment": "<a href=\"/wiki/File:Jeton._Ordinaire_des_guerres_-_btv1b10405460g_(1_of_2).jpg\" title=\"File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg\">File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg</a> added to category",
        "server_name": "commons.wikimedia.org",
        "server_script_path": "/w",
        "server_url": "https://commons.wikimedia.org",
        "timestamp": 1712591533,
        "title": "Category:Jetons",
        "title_url": "https://commons.wikimedia.org/wiki/Category:Jetons",
        "type": "categorize",
        "user": "DenghiùComm",
        "wiki": "commonswiki"
      }
      -

      The transformation in this tutorial will make use of the length, bot and user_id fields to calculate how many lines a given non-bot user has modified on a day.

      -
      {
       ...
       "user_id": "User"
       "bot": 0
       "length": 1253
       ...
      }
      -

      Writing the derivation

      -

      Set up your folder structure so you can organize the resources required for the derivation. Create a working directory to follow along, and inside, create a flow.yaml file.

      -

      Inside your flow.yaml file, add the following contents:

      -
      ---
      collections:
        Dani/derivation-tutorial/edits-by-users:

          schema:
            type: object
            properties:
              user_id:
                type: string
              date:
                format: date
                type: string
              total_edits:
                reduce:
                  strategy: sum
                type: number
              total_new_lines:
                reduce:
                  strategy: sum
                type: number
            reduce:
              strategy: merge
            required:
              - date
              - user_id

          key:
            - /date
            - /user_id

          derive:
            using:
              sqlite: {}
            transforms:
              - name: edits_by_users
                source: demo/wikipedia/recentchange-sampled
                shuffle: any
                lambda: |
                  select
                  $user as user_id,
                  substr($meta$dt,1,10) as date,
                  1 as total_edits,
                  coalesce($length$new - $length$old, 0) as total_new_lines
                  where $type = 'edit' and $user is not null and $bot = 0;
      -

       

      -

      The Flow consists of just one collection, which is what you define here, called edits-by-users.

      -

      Let’s go over this in a bit more detail.

      -

      First of all, the collection needs a schema. The schema of the incoming data (also called the “write” schema) is already defined by the demo, you only have to define the schema of the documents the transformation will output, which is the “read” schema.

      -

      In the flow.yaml file, the schema is defined in-line with the rest of the configuration.

      -
      schema:
        type: object
        properties:
          user_id:
            type: string
          date:
            format: date
            type: string
          total_edits:
            reduce:
              strategy: sum
            type: number
          total_new_lines:
            reduce:
              strategy: sum
            type: number
        reduce:
          strategy: merge
        required:
          - date
          - user_id
      -

      As you can see, this schema includes less fields than what is available in the incoming documents, this is expected, but if you wish to include more, this is where you would add them first.

      -

      The user_id and date fields do not contain any modifications, but the other two have their reduction strategy defined as well to be sum. This strategy reduces two numbers or integers by adding their values.

      -

      To learn more about how reduction strategies work, check out the documentation page.

      -

      Moving on, the next section in the yaml file defines the key of the documents.

      -
      key:
        - /date
        - /user_id
      -

      Every Flow collection must declare a key which is used to group its documents. Keys are specified as an array of JSON pointers to document locations. The important detail here is to know that a collection key instructs Flow how documents of a collection are to be reduced, such as while being materialized to an endpoint.

      -

      The final section is where you specify that this collection is derived from another collection.

      -
      derive:
        using:
          sqlite: {}
        transforms:
          - name: edits_by_users
            source: demo/wikipedia/recentchange-sampled
            shuffle: any
            lambda: |
              select
              $user as user_id,
              substr($meta$dt,1,10) as date,
              1 as total_edits,
              coalesce($length$new - $length$old, 0) as total_new_lines
              where $type = 'edit' and $user is not null and $bot = 0;
      -

      Here you define the SQL statement that gets executed on the documents of the source collection.

      -

      The source: demo/wikipedia/recentchange-sampled property lets Flow know that the source collection is the demo collection from mentioned at in the beginning of the tutorial while shuffle tells Flow how to colocate documents while processing, which in this case is set to any, meaning source documents can be processed by any available compute.

      -

      The SQL is straightforward

      -
      select
      $user as user_id,
      substr($meta$dt,1,10) as date,
      1 as total_edits,
      coalesce($length$new - $length$old, 0) as total_new_lines
      where $type = 'edit' and $user is not null and $bot = 0
      -

      We select the user_id, parse the event date and calculate the amount of line changes. We also select 1 for the value of total_edits, this is important because during the reduction phase, due to having selected sum as the strategy, these values will get added together to form the total number of edits in the result. We also filter out non-edit events, bot users or events without a user_id to have a somewhat clean dataset.

      -

      Verify

      -

      You can use flowctl to quickly verify your derivation before publishing it. Use the preview command to get an idea of the resulting collections.

      -
      flowctl preview --source flow.yaml --name Dani/derivation-tutorial/edits-by-users

      {"date":"2024-04-08","total_edits":3,"total_new_lines":110,"user_id":"Renamerr"}
      {"date":"2024-04-08","total_edits":1,"total_new_lines":769,"user_id":"Sebring12Hrs"}
      {"date":"2024-04-08","total_edits":5,"total_new_lines":3360,"user_id":"Sic19"}
      {"date":"2024-04-08","total_edits":1,"total_new_lines":82,"user_id":"Simeon"}
      ^C
      -

      As you can see, the output format matches the defined schema.  The last step would be to publish your derivation to Flow, which you can also do using flowctl.

      -
      Publishing the derivation will initialize the transformation on the live, real-time Wikipedia stream, make sure to delete it after completing the tutorial.
      -
      flowctl catalog publish --source flow.yaml
      -

      After successfully publishing your derivation, head over to the Collections page on the Web UI and you will be able to see your derivation in action!

      -

      Verifying derivation on Web UI

      -

      Wrapping up

      -

      In this guide you learned how to write your first stateless SQL derivation to filter data in a collection.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/edit-data-flows/index.html b/pr-preview/pr-1594/guides/edit-data-flows/index.html deleted file mode 100644 index 95c10ccffa..0000000000 --- a/pr-preview/pr-1594/guides/edit-data-flows/index.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - -Edit Data Flows in the web app | Estuary Flow - - - - - - - - - -

      Edit Data Flows in the web app

      -

      You can edit existing captures, collection schemas, and materializations in the Flow web app. -For a tour of the web app, start here.

      -

      There are separate workflows for editing captures and materializations. -You can edit a collection schema using Flow's Schema Inference tool by editing either a capture or materialization associated -with that collection.

      -
      caution

      Although you edit components of your Data Flows separately, they are all connected. -Flow's schema evolution and AutoDiscover features help prevent common errors, but it's still important to be mindful of your edits' potential effects.

      -

      Edit a capture

      -
        -
      1. -

        Go to the Sources page of the web app.

        -
      2. -
      3. -

        Locate the capture you'd like to edit. Click the Options button in its table row, then click Edit specification.

        -

        The Edit Capture page opens.

        -
      4. -
      5. -

        Edit the connection to the destination system, if desired. You can either update fields in the Endpoint Config section or manually update the JSON in the Advanced Specification Editor.

        -
      6. -
      -
      caution

      You may have to re-authenticate with the source system. Be sure to have current credentials on hand before editing the endpoint configuration.

      -
        -
      1. -

        Use the Output Collections browser to add or remove collections from the capture, if desired.

        -

        To refresh your connection with the source and see an updated list of possible collections, click the Refresh button, -but be aware that it will overwrite all existing collection selections.

        -
      2. -
      3. -

        Use the Schema Inference tool, if desired.

        -

        This option is available for source systems with permissive schemas, such as NoSQL databases and cloud storage. -Flow can help you tighten up the schema to be used for downstream tasks in your Data Flow.

        -
          -
        1. -

          In the Output Collections browser, choose a collection and click its Collection tab.

          -
        2. -
        3. -

          Click Schema Inference

          -

          The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for -downstream tasks like materializations and derivations.

          -
        4. -
        5. -

          Review the new schema and click Apply Inferred Schema.

          -
        6. -
        -
      4. -
      5. -

        When you're done making changes, click Next.

        -
      6. -
      7. -

        Click Save and Publish.

        -
      8. -
      -

      Editing a capture only affects how it will work going forward. -Data that was captured before editing will reflect the original configuration.

      -

      Edit a materialization

      -

      To edit a materialization:

      -
        -
      1. -

        Go to the Destinations page of the web app.

        -
      2. -
      3. -

        Locate the materialization you'd like to edit. Click the Options button in its table row, then click Edit specification.

        -

        The Edit Materialization page opens.

        -
      4. -
      5. -

        Edit the connection to the destination system, if desired. You can either update fields in the Endpoint Config section or manually update the JSON in the Advanced Specification Editor.

        -
      6. -
      -
      caution

      You may have to re-authenticate with the destination system. Be sure to have current credentials on hand before editing the endpoint configuration.

      -
        -
      1. -

        Use the Source Collections browser to add or remove collections from the materialization, if desired.

        -
      2. -
      3. -

        Optionally apply a stricter schema to each collection to use for the materialization.

        -

        This option is available for collections captured from source systems with permissive schemas, such as NoSQL databases and cloud storage. -Flow can help you tighten up the schema to be used for downstream tasks in your Data Flow.

        -
          -
        1. -

          In the Source Collections browser, choose a collection and click its Collection tab.

          -
        2. -
        3. -

          Click Schema Inference

          -

          The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for the materialization.

          -
        4. -
        5. -

          Review the new schema and click Apply Inferred Schema.

          -
        6. -
        -
      4. -
      5. -

        When you're done making changes, click Next.

        -
      6. -
      7. -

        Click Save and Publish.

        -
      8. -
      -

      Editing a materialization only affects how it will work going forward. -Data that was materialized before editing will reflect the original configuration.

      -

      Advanced editing

      -

      For more fine-grain control over editing, you can use flowctl and work directly on specification files in your local environment. -View the tutorial.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/flowctl/create-derivation/index.html b/pr-preview/pr-1594/guides/flowctl/create-derivation/index.html deleted file mode 100644 index b3925c9db0..0000000000 --- a/pr-preview/pr-1594/guides/flowctl/create-derivation/index.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - -Create a derivation with flowctl | Estuary Flow - - - - - - - - - -

      Create a derivation with flowctl

      -

      Once you're familiar with creating a basic Data Flow, you can take things a step further -and transform your data with derivations.

      -

      A derivation is a kind of Flow collection that results from the transformation of one or more other collections. -This transformed stream of data keeps the order of the source data intact, -and can then be materialized to an outside system or further transformed with another derivation. -When you master derivations, you unlock the full flexibility and power of Flow.

      -

      Prerequisites

      -
        -
      • -

        A Flow account and access to the web app. -If you don't have an account yet, go to the web app to register for free.

        -
      • -
      • -

        An existing Flow collection. Typically, you create this through a capture in the Flow web application. -If you need help, see the guide to create a Data Flow.

        -
      • -
      • -

        A development environment to work with flowctl. Choose between:

        -
          -
        • -

          GitPod, the cloud development environment integrated with Flow. -GitPod comes ready for derivation writing, with stubbed out files and flowctl installed. You'll need a GitLab, GitHub, or BitBucket account to log in.

          -
        • -
        • -

          Your local development environment. Install flowctl locally

          -
        • -
        -
      • -
      -

      Get started with GitPod

      -

      You'll write your derivation using GitPod, a cloud development environment integrated in the Flow web app.

      -
        -
      1. -

        Navigate to the Collections page in Flow.

        -
      2. -
      3. -

        Click on the New Transformation button.

        -

        The Derive A New Collection pop-up window appears.

        -
      4. -
      5. -

        In the Available Collections dropdown, select the collection you want to use as the source.

        -

        For example, if your organization is acmeCo, you might choose the acmeCo/resources/anvils collection.

        -
      6. -
      7. -

        Set the transformation language to either SQL and TypeScript.

        -

        SQL transformations can be a more approachable place to start if you're new to derivations. -TypeScript transformations can provide more resiliency against failures through static type checking.

        -
      8. -
      9. -

        Give your derivation a name. From the dropdown, choose the name of your catalog prefix and append a unique name, for example acmeCo/resources/anvil-status.

        -
      10. -
      11. -

        Click Proceed to GitPod to create your development environment. Sign in with one of the available account types.

        -
      12. -
      13. -

        On the New Workspace screen, keep the Context URL option selected and click Continue.

        -

        A GitPod development environment opens. -A stubbed-out derivation with a transformation has already been created for you in the language you chose. Next, you'll locate and open the source files.

        -
      14. -
      15. -

        Each slash-delimited prefix of your derivation name has become a folder. Open the nested folders to find the flow.yaml file with the derivation specification.

        -

        Following the example above, you'd open the folders called acmeCo, then resources to find the correct flow.yaml file.

        -

        The file contains a placeholder collection specification and schema for the derivation.

        -

        In the same folder, you'll also find supplementary TypeScript or SQL files you'll need for your transformation.

        -
      16. -
      -

      Continue with SQL

      -

      Continue with TypeScript

      -
      Authentication

      When you first connect to GitPod, you will have already authenticated Flow, but if you leave GitPod opened for too long, you may have to reauthenticate Flow. To do this:

        -
      1. -

        Go to the CLI-API tab of the web app and copy your access token.

        -
      2. -
      3. -

        Run flowctl auth token --token <paste-token-here> in the GitPod terminal.

        -
      4. -
      -

      Add a SQL derivation in GitPod

      -

      If you chose SQL as your transformation language, follow these steps.

      -

      Along with the derivation's flow.yaml you found in the previous steps, there are two other files:

      -
        -
      • -

        A lambda file. This is where you'll write your first SQL transformation. -Its name follows the pattern derivation-name.lambda.source-collection-name.sql. -Using the example above, it'd be called anvil-status.lambda.anvils.sql.

        -
      • -
      • -

        A migrations file. Migrations allow you to leverage other features of the sqlite database that backs your derivation by creating tables, indices, views, and more. -Its name follows the pattern derivation-name.migration.0.sql. -Using the example above, it'd be called anvil-status.migration.0.sql.

        -
      • -
      -
        -
      1. -

        Open the flow.yaml file for your derivation. It looks something like this:

        -
        collections:
        acmeCo/resources/anvil-status:
        schema:
        properties:
        your_key:
        type: string
        required:
        - your_key
        type: object
        key:
        - /your_key
        derive:
        using:
        sqlite:
        migrations:
        - anvil-status.migration.0.sql
        transforms:
        - name: anvils
        source: acmeCo/resources/anvils
        shuffle: any
        lambda: anvil-status.lambda.anvils.sql
        -

        Note the stubbed out schema and key.

        -
      2. -
      3. -

        Write the schema you'd like your derivation to conform to and specify its collection key. Keep in mind:

        -
          -
        • -

          The source collection's schema.

          -
        • -
        • -

          The transformation required to get from the source schema to the new schema.

          -
        • -
        -
      4. -
      5. -

        Give the transform a unique name (by default, it's the name of the source collection).

        -
      6. -
      7. -

        In the lambda file, write your SQL transformation.

        -
      8. -
      -
      Tip

      For help writing your derivation, start with these examples:

      The main derivations page includes many other examples and in-depth explanations of how derivations work.

      -
        -
      1. -

        If necessary, open the migration file and write your migration.

        -
      2. -
      3. -

        Preview the derivation locally.

        -
        flowctl preview --source flow.yaml
        -
      4. -
      5. -

        If the preview output appears as expected, publish the derivation.

        -
        flowctl catalog publish --source flow.yaml
        -
      6. -
      -

      The derivation you created is now live and ready for further use. -You can access it from the web application and materialize it to a destination, -just as you would any other Flow collection.

      -

      Add a TypeScript derivation in GitPod

      -

      If you chose TypeScript as your transformation language, follow these steps.

      -

      Along with the derivation's flow.yaml you found in the previous steps, there's another file for the TypeScript transformation. -It follows the naming convention derivation-name.ts. -Using the example above, it'd be called anvil-status.ts.

      -
        -
      1. -

        Open the flow.yaml file for your derivation. It looks something like this:

        -
        collections:
        acmeCo/resources/anvil-status:
        schema:
        properties:
        your_key:
        type: string
        required:
        - your_key
        type: object
        key:
        - /your_key
        derive:
        using:
        typescript:
        module: anvil-status.ts
        transforms:
        - name: anvils
        source: acmeCo/resources/anvils
        shuffle: any
        -

        Note the stubbed out schema and key.

        -
      2. -
      3. -

        Write the schema you'd like your derivation to conform to and specify the collection key. Keep in mind:

        -
          -
        • -

          The source collection's schema.

          -
        • -
        • -

          The transformation required to get from the source schema to the new schema.

          -
        • -
        -
      4. -
      5. -

        Give the transform a unique name (by default, it's the name of the source collection).

        -
      6. -
      7. -

        In the TypeScript file, write your transformation.

        -
      8. -
      -
      Tip

      For help writing a TypeScript derivation, start with this example.

      The main derivations page includes many other examples and in-depth explanations of how derivations work.

      -
        -
      1. -

        Preview the derivation locally.

        -
        flowctl preview --source flow.yaml
        -
      2. -
      3. -

        If the preview output appears how you'd expect, publish the derivation.

        -
        flowctl catalog publish --source flow.yaml
        -
      4. -
      -

      The derivation you created is now live and ready for further use. -You can access it from the web application and materialize it to a destination, -just as you would any other Flow collection.

      -

      Create a derivation locally

      -

      Creating a derivation locally is largely the same as using GitPod, but has some extra steps. Those extra steps are explained here, but you'll find more useful context in the sections above.

      -
        -
      1. -

        Authorize flowctl.

        -
          -
        1. -

          Go to the CLI-API tab of the web app and copy your access token.

          -
        2. -
        3. -

          Run flowctl auth token --token <paste-token-here> in your local environment.

          -
        4. -
        -
      2. -
      3. -

        Locate the source collection for your derivation.

        -
          -
        • -

          Check the web app's Collections. -All published entities to which you have access are listed and can be searched.

          -
        • -
        • -

          Run flowctl catalog list --collections. This command returns a complete list of collections to which you have access. -You can refine by specifying a --prefix.

          -
        • -
        -
      4. -
      5. -

        Pull the source collection locally using the full collection name.

        -
        flowctl catalog pull-specs --name acmeCo/resources/anvils
        -

        The source files are written to your current working directory.

        -
      6. -
      7. -

        Each slash-delimited prefix of your collection name has become a folder. Open the nested folders to find the flow.yaml file with the collection specification.

        -

        Following the example above, you'd open the folders called acmeCo, then resources to find the correct flow.yaml file.

        -

        The file contains the source collection specification and schema.

        -
      8. -
      9. -

        Add the derivation as a second collection in the flow.yaml file.

        -
          -
        1. -

          Write the schema you'd like your derivation to conform to and specify the collection key. Reference the source collection's schema, and keep in mind the transformation required to get from the source schema to the new schema.

          -
        2. -
        3. -

          Add the derive stanza. See examples for SQL and TypeScript above. Give your transform a a unique name.

          -
        4. -
        -
      10. -
      11. -

        Stub out the SQL or TypeScript files for your transform.

        -
        flowctl generate --source flow.yaml
        -
      12. -
      13. -

        Locate the generated file, likely in the same subdirectory as the flow.yaml file you've been working in.

        -
      14. -
      15. -

        Write your transformation.

        -
      16. -
      17. -

        Preview the derivation locally.

        -
      18. -
      -
      flowctl preview --source flow.yaml
      -
        -
      1. If the preview output appears how you'd expect, publish the derivation.
      2. -
      -
      flowctl catalog publish --source flow.yaml
      -

      The derivation you created is now live and ready for further use. -You can access it from the web application and materialize it to a destination, -just as you would any other Flow collection.

      -

      Updating an existing derivation

      -

      Derivations are applied on a go-forward basis only.

      -

      If you would like to make an update to an existing derivation (for example, adding columns to the derived collection), you can add a new transform by changing the name of your existing transform to a new name, and at the same time updating your lambda or TypeScript module.

      -

      From the Flow's perspective, this is equivalent to deleting the old transform and adding a new one. This will backfill over the source collection again with the updated SQL statement.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/index.html b/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/index.html deleted file mode 100644 index 6d23fe56e8..0000000000 --- a/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/index.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - -Edit a draft created in the web app | Estuary Flow - - - - - - - - - -

      Edit a draft created in the web app

      -

      When you create or edit tasks in the web app, your work is periodically saved as a draft. -Specifically, each time you click the Next button to reveal the Save and Publish button, a draft is saved.

      -

      If you navigate away from your workflow in the web app before publishing, or if you simply prefer to finish up with flowctl, -you can pull the draft into a local environment, finish making changes, and publish the task.

      -
      - graph LR; - a[Catalog]; - d[Local files]; - c[Draft]; - d-- 2: Author to draft -->c; - c-- 1: Pull draft -->d; - c-- 3: Publish draft -->a; -
      -

      Prerequisites

      -

      To complete this workflow, you need:

      - -

      Identify the draft and pull it locally

      -

      Drafts aren't currently visible in the Flow web app, but you can get a list with flowctl.

      -
        -
      1. -

        Authorize flowctl.

        -
          -
        1. -

          Go to the CLI-API tab of the web app and copy your access token.

          -
        2. -
        3. -

          Run flowctl auth token --token <paste-token-here>

          -
        4. -
        -
      2. -
      3. -

        Run flowctl draft list

        -
      4. -
      -

      flowctl outputs a table of all the drafts to which you have access, from oldest to newest.

      -
        -
      1. Use the name and timestamp to find the draft you're looking for.
      2. -
      -

      Each draft has an ID, and most have a name in the Details column. Note the # of Specs column. -For drafts created in the web app, materialization drafts will always contain one specification. -A number higher than 1 indicates a capture with its associated collections.

      -
        -
      1. -

        Copy the draft ID.

        -
      2. -
      3. -

        Select the draft: flowctl draft select --id <paste-id-here>.

        -
      4. -
      5. -

        Pull the draft source files to your working directory: flowctl draft develop.

        -
      6. -
      7. -

        Browse the source files.

        -
      8. -
      -

      The source files and their directory structure will look slightly different depending on the draft. -Regardless, there will always be a top-level file called flow.yaml that imports all other YAML files, -which you'll find in a subdirectory named for your catalog prefix. -These, in turn, contain the specifications you'll want to edit.

      -

      Edit the draft and publish

      -

      Next, you'll make changes to the specification(s), test, and publish the draft.

      -
        -
      1. -

        Open the YAML files that contain the specification you want to edit.

        -
      2. -
      3. -

        Make changes. For guidance on how to construct Flow specifications, see the documentation for the entity type:

        - -
      4. -
      5. -

        When you're done, sync the local work to the global draft: flowctl draft author --source flow.yaml.

        -
      6. -
      -

      Specifying the top-level flow.yaml file as the source ensures that all entities in the draft are imported.

      -
        -
      1. -

        Publish the draft: flowctl draft publish

        -
      2. -
      3. -

        Once this operation completes successfully, check to verify if the entity or entities are live. You can:

        -
          -
        • -

          Go to the appropriate tab in the Flow web app.

          -
        • -
        • -

          Run flowctl catalog list, filtering by --name, --prefix, or entity type, for example --capture.

          -
        • -
        -
      4. -
      -

      If you're not satisfied with the published entities, you can continue to edit them. -See the other guides for help:

      -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/index.html b/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/index.html deleted file mode 100644 index 95abae5d80..0000000000 --- a/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/index.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - -Edit a Flow specification locally | Estuary Flow - - - - - - - - - -

      Edit a Flow specification locally

      -

      The Flow web application is designed to make the most common Flow tasks quick and easy. -With the app, you're able to create, monitor, and manage captures, materializations, and more. -For creating basic Data Flows, the web app is by far the most efficient option, -and basic editing capabilities are provided.

      -

      However, advanced editing tasks are only possible using flowctl. These include:

      -
        -
      • Manually editing collection schemas, for example, to add projections -or change the reduction strategy.
      • -
      • Editing, testing, and publishing multiple entities at once.
      • -
      • Creating and editing derivations.
      • -
      -
      tip

      A simplified development experience for derivations is available. You can use the web app to create a cloud-based development environment pre-populated with the components you need. Learn how here.

      -

      This guide covers the basic procedure of pulling one or more live Flow entities to your local development environment, -editing their specifications, and re-publishing them.

      -
      - graph LR; - d[Local files]; - c[Catalog]; - d-- 2: Test -->d; - d-- 3: Publish specifications -->c; - c-- 1: Pull specifications -->d; -
      -

      Prerequisites

      -

      To complete this workflow, you need:

      - -

      Pull specifications locally

      -

      Every entity (including active tasks, like captures and materializations, and static collections) -has a globally unique name in the Flow catalog.

      -

      For example, a given Data Flow may comprise:

      -
        -
      • A capture, myOrg/marketing/leads, which writes to...
      • -
      • Two collections, myOrg/marketing/emailList and myOrg/marketing/socialMedia, which are materialized as part of...
      • -
      • A materialization, myOrg/marketing/contacts.
      • -
      -

      Using these names, you'll identify and pull the relevant specifications for editing.

      -
        -
      1. -

        Authorize flowctl.

        -
          -
        1. -

          Go to the CLI-API tab of the web app and copy your access token.

          -
        2. -
        3. -

          Run flowctl auth token --token <paste-token-here>

          -
        4. -
        -
      2. -
      3. -

        Determine which entities you need to pull from the catalog. You can:

        -
          -
        • -

          Check the web app's Sources, Collections, and Destinations pages. -All published entities to which you have access are listed and can be searched.

          -
        • -
        • -

          Run flowctl catalog list. This command returns a complete list of entities to which you have access. -You can refine by specifying a --prefix and filter by entity type: --captures, --collections, --materializations, or --tests.

          -
        • -
        -

        From the above example, flowctl catalog list --prefix myOrg/marketing --captures --materializations would return -myOrg/marketing/leads and myOrg/marketing/contacts.

        -
      4. -
      5. -

        Pull the specifications you need by running flowctl catalog pull-specs:

        -
          -
        • -

          Pull one or more specifications by name, for example: flowctl catalog pull-specs --name myOrg/marketing/emailList

          -
        • -
        • -

          Pull a group of specifications by prefix or type filter, for example: flowctl catalog pull-specs --prefix myOrg/marketing --collections

          -
        • -
        -
      6. -
      -

      The source files are written to your current working directory.

      -
        -
      1. Browse the source files.
      2. -
      -

      flowctl pulls specifications into subdirectories organized by entity name, -and specifications sharing a catalog prefix are written to the same YAML file.

      -

      Regardless of what you pull, there is always a top-level file called flow.yaml that imports all other nested YAML files. -These, in turn, contain the entities' specifications.

      -

      Edit source files and re-publish specifications

      -

      Next, you'll complete your edits, test that they were performed correctly, and re-publish everything.

      -
        -
      1. -

        Open the YAML files that contain the specification you want to edit.

        -
      2. -
      3. -

        Make changes. For guidance on how to construct Flow specifications, see the documentation for the task type:

        - -
      4. -
      5. -

        When you're done, you can test your changes: -flowctl catalog test --source flow.yaml

        -
      6. -
      -

      You'll almost always use the top-level flow.yaml file as the source here because it imports all other Flow specifications -in your working directory.

      -

      Once the test has passed, you can publish your specifications.

      -
        -
      1. Re-publish all the specifications you pulled: flowctl catalog publish --source flow.yaml
      2. -
      -

      Again you'll almost always want to use the top-level flow.yaml file. If you want to publish only certain specifications, -you can provide a path to a different file.

      -
        -
      1. Return to the web app or use flowctl catalog list to check the status of the entities you just published. -Their publication time will be updated to reflect the work you just did.
      2. -
      -

      If you're not satisfied with the results of your edits, repeat the process iteratively until you are.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/flowctl/index.html b/pr-preview/pr-1594/guides/flowctl/index.html deleted file mode 100644 index 1a406b9c4c..0000000000 --- a/pr-preview/pr-1594/guides/flowctl/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - -flowctl guides | Estuary Flow - - - - - - - - - - - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/index.html b/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/index.html deleted file mode 100644 index 4269e2d790..0000000000 --- a/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - -Troubleshoot a task with flowctl | Estuary Flow - - - - - - - - - -

      Troubleshoot a task with flowctl

      -
      caution

      The flowctl logs and stats subcommands have been temporarily disabled while we work on some important changes to our authorization system. We expect to have these working again soon. In the meantime, please reach out to us via Slack or email (support@estuary.dev) if you want any help.

      -

      flowctl offers the most advanced views of task logs. -If a task has errors or is failing in the web app, you'll be able to troubleshoot more effectively with flowctl.

      -

      Prerequisites

      -

      To complete this workflow, you need:

      - - -
        -
      1. -

        Authorize flowctl.

        -
          -
        1. -

          Go to the CLI-API tab of the web app and copy your access token.

          -
        2. -
        3. -

          Run flowctl auth token --token <paste-token-here>

          -
        4. -
        -
      2. -
      3. -

        Identify the name of the failing task in the web app; for example myOrg/marketing/leads. -Use the tables on the Captures or Materializations pages of the web app to do so.

        -
      4. -
      5. -

        Run flowctl logs --task <task-name>. You have several options to get more specific. For example:

        -
          -
        • -

          flowctl logs --task myOrg/marketing/leads --follow — If the task hasn't failed, continuously print logs as they're generated.

          -
        • -
        • -

          flowctl logs --task myOrg/marketing/leads --since 1h — Print logs from approximately the last hour. -The actual output window is approximate and may somewhat exceed this time boundary. -You may use any time, for example 10m and 1d.

          -
        • -
        -
      6. -
      -

      Change log level

      -

      If your logs aren't providing enough detail, you can change the log level.

      -

      Flow offers several log levels. From least to most detailed, these are:

      -
        -
      • error
      • -
      • warn
      • -
      • info (default)
      • -
      • debug
      • -
      • trace
      • -
      -
        -
      1. -

        Follow the guide to edit a specification with flowctl.

        -
          -
        1. Working in your local specification file, add the shards stanza to the capture or materialization specification:
        2. -
        -
        myOrg/marketing/leads:
        shards:
        logLevel: debug
        endpoint:
        {}
        -
          -
        1. Finish the workflow as described, re-publishing the task.
        2. -
        -
      2. -
      -

      Learn more about working with logs

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/index.html b/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/index.html deleted file mode 100644 index 1146b4cddf..0000000000 --- a/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/index.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - -How to join two collections (TypeScript) | Estuary Flow - - - - - - - - - -

      How to join two collections (TypeScript)

      -

      This guide will teach you how to write and publish a TypeScript derivation, which will join two collections together on a common key.

      -

      Introduction

      -

      This tutorial will show you how to implement a stateless transformation using TypeScript. You’ll learn how to implement a flow that matches orders to customers in real-time.

      -

      Setting up your development environment

      -

      The data sources used in this tutorial are available in two Google Sheets. This one for the orders and this one for the customers. Make a copy of each so you’ll be able to test out the pipeline by adding, editing or removing records.

      -

      Customers table sample

      -
      customer_idemailnamephone
      101customer1@email.comJohn Doe123-456-7890
      102customer2@email.comJane Smith987-654-3210
      103customer3@email.comAlex Lee555-123-4567
      -

      Orders table sample

      -
      order_idcustomer_idorder_datetotal_amount
      11012024-05-10 8:00:0050
      21022024-05-09 12:00:0075.5
      31032024-05-08 15:30:00100.25
      -

      As you can see, both tables contain a field called customer_id. This is what we’re going to use as the key in our join operation. One customer can have multiple orders, but one order can only belong to one customer. There are also some customers without any orders.

      -

      Let’s say you want to see all customers and all of their orders in the results. This means, you’ll be looking to implement a full outer join.

      -

      To create the collections in Estuary Flow, head over to the dashboard and create a new Google Sheet capture. Give it a name and add one of the previously copied sheet’s URL as the “Spreadsheet Link”. Repeat this process for the other sheet, which should leave you with 2 collections.

      -

      You can take a look into each via the data preview window on the Collections page to verify that the sample data has already landed in Flow.

      -

      Orders collection

      -

      In order to implement transformations through derivations, you’ll need to set up your development environment. You’ll need a text editor and flowtcl, the CLI-tool for Flow installed on your machine. Check out the docs page on installation instructions.

      -

      To verify that you’re able to access Flow via flowctl, see if you can execute these commands successfully to view documents in your collections.

      -
      flowctl collections read --collection <your_collection_id> --uncommitted

      {"_meta":{"uuid":"9790e50e-0ed3-11ef-8401-6d9be407e4b8"},"customer_id":"101","order_date":"2024-05-10 8:00:00","order_id":"1","row_id":203,"total_amount":"50"}
      {"_meta":{"uuid":"9790e50e-0ed3-11ef-8801-6d9be407e4b8"},"customer_id":"102","order_date":"2024-05-09 12:00:00","order_id":"2","row_id":204,"total_amount":"75.5"}
      {"_meta":{"uuid":"9790e50e-0ed3-11ef-8c01-6d9be407e4b8"},"customer_id":"103","order_date":"2024-05-08 15:30:00","order_id":"3","row_id":205,"total_amount":"100.25"}
      {"_meta":{"uuid":"9790e50e-0ed3-11ef-9001-6d9be407e4b8"},"customer_id":"101","order_date":"2024-05-07 10:00:00","order_id":"4","row_id":206,"total_amount":"25.75"}
      {"_meta":{"uuid":"9790e50e-0ed3-11ef-9401-6d9be407e4b8"},"customer_id":"103","order_date":"2024-05-06 14:45:00","order_id":"5","row_id":207,"total_amount":"60.2"}
      {"_meta":{"uuid":"9790e50e-0ed3-11ef-9801-6d9be407e4b8"},"customer_id":"102","order_date":"2024-05-05 11:20:00","order_id":"6","row_id":208,"total_amount":"45.9"}
      {"_meta":{"uuid":"9790e50e-0ed3-11ef-9c01-6d9be407e4b8"},"customer_id":"104","order_date":"2024-05-04 9:30:00","order_id":"7","row_id":209,"total_amount":"80.1"}
      -

      If you see something similar, you’re good to continue!

      -

      Writing the derivation

      -

      Set up your folder structure so you can organize the resources required for the derivation. Create a working directory to follow along, and inside, create a flow.yaml file.

      -

      Inside your flow.yaml file, add the following contents:

      -
      collections:

        Dani/join-tutorial-typescript/customers_with_orders:
          schema:
            description: >-
              A document that represents the joined result of orders with customer
              information
            type: object
            properties:
              customer_id:
                type: string
              email:
                type: string
              name:
                type: string
              phone:
                type: string
              orders:
                type: array
                items:
                  $ref: orders.schema.yaml
                reduce:
                  strategy: merge
                  key:
                    - /order_id
            required:
              - customer_id
            reduce:
              strategy: merge
          key:
            - /customer_id

          derive:
            using:
              typescript:
                module: full-outer-join.flow.ts
            transforms:
              - name: fromOrders
                source:
                  name: Dani/join-tutorial-orders/Sheet1_v2
                shuffle:
                  key:
                    - /customer_id
              - name: fromCustomers
                source:
                  name: Dani/join-tutorial-customers/Sheet1
                shuffle:
                  key:
                    - /customer_id
      -

      Let’s take a look at this in a bit more detail. Essentially, we define one collection which it’s a derivation that is the result of two transformations.

      -

      In the schema definition, we specify what structure we want the documents of the result collection to take on.

      -
        Dani/join-tutorial-typescript/customers_with_orders:
          schema:
            description: >-
              A document that represents the joined result of orders with customer
              information
            type: object
            properties:
              customer_id:
                type: string
              email:
                type: string
              name:
                type: string
              phone:
                type: string
              orders:
                type: array
                items:
                  $ref: orders.schema.yaml
                reduce:
                  strategy: merge
                  key:
                    - /order_id
            required:
              - customer_id
            reduce:
              strategy: merge
          key:
            - /customer_id
      -

      Because you are going to implement a 1-to-many join using the two source collections, it’s important to pay attention to what reduction strategy Flow uses.

      -

      There are two merge strategies defined here, one for the customers_with_orders collection and for the nested orders array. 

      -
      Merge reduces the left-hand side and right-hand side by recursively reducing shared document locations. The LHS and RHS must either both be objects, or both be arrays.
      -

      For the nested merge, you have to define a key, which is one or more JSON pointers that are relative to the reduced location. If both sides are arrays and a merge key is present, then a deep sorted merge of the respective items is done, as ordered by the key. In this case, setting it to order_id will cause the reduction to collect all orders for a given customer.

      -

      The items in the nested array of orders are defined by the schema in a separate file, to which we refer to using $ref: orders.schema.yaml.

      -

      The derivation details are defined in the next section of the yaml:

      -
          derive:
            using:
              typescript:
                module: full-outer-join.flow.ts
            transforms:
              - name: fromOrders
                source:
                  name: Dani/join-tutorial-orders/Sheet1_v2
                shuffle:
                  key:
                    - /customer_id
              - name: fromCustomers
                source:
                  name: Dani/join-tutorial-customers/Sheet1
                shuffle:
                  key:
                    - /customer_id
      -

      This tells flow that the transformation code is defined in a TypeScript file called full-outer-join.flow.ts (which doesn’t exist – yet!) and that there are in fact two transformations that it expects, one for each source collection.

      -

      Shuffles let Flow identify the shard that should process a particular source document, in order to co-locate that processing with other documents it may need to know about.

      -

      Both transformations shuffle data on the same key. An important detail is that if a derivation has more than one transformation, the shuffle keys of all transformations must align with one another in terms of the extracted key types (string vs integer) as well as the number of components in a composite key.

      -

      Let’s generate the scaffolding for the derivation using flowctl.

      -
      flowctl generate --source flow.yaml
      -

      This command will create a few new files in your current working directory.

      -
      ➜  tree
      .
      ├── deno.json
      ├── flow.yaml
      ├── flow_generated
      │   └── typescript
      │       └── Dani
      │           └── join-tutorial-typescript
      │               └── customers_with_orders.ts
      ├── full-outer-join.flow.ts
      └── orders.schema.yaml

      5 directories, 5 files
      -

      The folder flow_generated along with the deno.json file are two things you won’t have to modify during this tutorial. If you take a look at file that flowtcl generated under flow_generated/typescript/<your_working_directory>/<your_prefix>/customers_with_orders.ts you can see the types you are able to use in your transformations.

      -
      // Generated for published documents of derived collection customers_with_orders.
      export type Document = /* A document that represents the joined result of orders with customer information */ {
          customer_id: string;
          email?: string;
          name?: string;
          orders?: unknown[];
          phone?: string;
      };

      // Generated for read documents of sourced collection Sheet1.
      export type SourceFromOrders = {
          customer_id?: string;
          order_date?: string;
          order_id?: string;
          row_id: number;
          total_amount?: string;
      };

      // Generated for read documents of sourced collection Sheet1.
      export type SourceFromCustomers = {
          customer_id?: string;
          email?: string;
          name?: string;
          phone?: string;
          row_id: number;
      };
      -

      Now, the actual transformation code will live in the following file: full-outer-join.flow.ts. Take a look at its contents.

      -
      import { IDerivation, Document, SourceFromOrders, SourceFromCustomers } from 'flow/Dani/join-tutorial-typescript/customers_with_orders.ts';

      // Implementation for derivation Dani/join-tutorial-typescript/customers_with_orders.
      export class Derivation extends IDerivation {
          fromOrders(_read: { doc: SourceFromOrders }): Document[] {
            throw new Error("Not implemented");
          }
          fromCustomers(_read: { doc: SourceFromCustomers }): Document[] {
            throw new Error("Not implemented");
        }
      }
      -

      Helpfully, flowctl provides two skeleton functions. Update the function body to implement the filter functionality. Modify the Derivation class like this:

      -
      import { IDerivation, Document, SourceFromOrders, SourceFromCustomers } from 'flow/Dani/join-tutorial-typescript/customers_with_orders.ts';

      // Implementation for derivation Dani/join-tutorial-typescript/customers_with_orders.
      export class Derivation extends IDerivation {
          fromOrders(_read: { doc: SourceFromOrders }): Document[] {
            return [{
              customer_id: _read.doc.customer_id || "",
              orders: [_read.doc],
            }];
          }
          fromCustomers(_read: { doc: SourceFromCustomers }): Document[] {
            return [{
              customer_id: _read.doc.customer_id || "",
              email: _read.doc.email,
              name: _read.doc.name,
              phone: _read.doc.phone
            }];
        }
      }
      -

      As you can see here, all we do is return the fields we need from each document, there’s no code required to define the actual “join” – all the heavy lifting is done in the reduction phase during materialization by the Flow runtime based on the schema you defined earlier.

      -

      Publish the derivation using flowctl:

      -
      flowctl catalog publish --source flow.yaml
      -

      After it’s successfully published, head over to the Flow dashboard to see the new collection.

      -

      Customers with Orders collection

      -

      If you take a look at the preview window at the bottom of the page, you might notice that the documents are not yet in their final, reduced form. As mentioned earlier, the reduction happens during materialization. Let's create one to show the results!

      -

      Head over to the materialization creation page, search for Google Sheets and configure a new connector. Create a fresh Google Sheet and copy its URL as the Spreadsheet Link.

      -

      In the third configuration step, select the derivation you created as the source collection.

      -

      Link source collection to materialization

      -

      After everything looks good, press the “Save and Publish” button in the top-right corner to provision your materialization connector.

      -

      And that’s it! Go check out the sheet you created to store the results. You should see all orders associated with their respective customer in the nested array.

      -

      Reduced results in a Google Sheet

      -

      To test the data flow, head over to the source “Orders” sheet, and add a new order for a customer. After a few seconds, you should see the new order added to the array of existing orders of the customer. Take a few minutes to play around with different actions as well; deleting an order, adding a customer, editing details of either entity.

      -

      Wrapping up

      -

      In this guide you learned how to write a TypeScript derivation to join two collections. After finishing with the tutorial, don’t forget to delete resources you don’t need anymore.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/index.html b/pr-preview/pr-1594/guides/index.html deleted file mode 100644 index 4c02b4c959..0000000000 --- a/pr-preview/pr-1594/guides/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - -Flow user guides | Estuary Flow - - - - - - - - - -

      Flow user guides

      -

      In this section, you'll find step-by-step guides that walk you through common Flow tasks.

      -

      These guides are designed to help you work with Data Flows in production — we assume you have your own data and are familiar with your source and destination systems. You might be here to get your data moving with Flow as quickly as possible, reshape your collection with a derivation, or create a secure connection to your database.

      -

      If you'd prefer a tailored learning experience with sample data, check out the Flow tutorials.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/schema-evolution/index.html b/pr-preview/pr-1594/guides/schema-evolution/index.html deleted file mode 100644 index 32d0d4f69d..0000000000 --- a/pr-preview/pr-1594/guides/schema-evolution/index.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - -Schema evolution | Estuary Flow - - - - - - - - - -

      Schema evolution

      -

      When collection specifications and schemas change, you must make corresponding changes in other parts of your Data Flow to avoid errors. In this guide, you'll learn how to respond to different types of collection changes.

      -

      Manual methods (using flowctl) as well as features available in the Flow web app are covered here. -For an in-depth overview of the automatic schema evolution feature in the web app and how it works, see this article.

      -

      Introduction

      -

      Flow collections serve not only as your real-time data storage, but also as a contract between tasks that produce and consume their data. Captures are producers, materializations are consumers, and derivations can act as either.

      -

      This contract helps prevent data loss and error in your Data Flows, and is defined in terms of the collection specification, or spec, which includes:

      -
        -
      • The JSON schema
      • -
      • The collection key
      • -
      • Projections, if any
      • -
      -

      There are many reasons a collection spec might change. Often, it's due to a change in the source data. Regardless, you'll need to make changes to downstream tasks — most often, materializations — to avoid errors.

      -

      Schema evolution scenarios

      -

      This guide is broken down into sections for different common scenarios, depending on which properties of the collection spec have changed.

      - -
      info

      There are a variety of reasons why these properties may change, and also different mechanisms for detecting changes in source data. In general, it doesn't matter why the collection spec has changed, only what has changed. However, AutoDiscovers are able to handle some of these scenarios automatically. Where applicable, AutoDiscover behavior will be called out under each section.

      -

      Re-creating a collection

      -

      Scenario: the key pointer or logical partitioning configurations have changed.

      -

      The key of a Flow collection cannot be changed after the collection is created. The same is true of the logical partitioning, which also cannot be changed after the collection is created.

      -

      If you need to change either of those parts of a collection spec, you'll need to create a new collection and update the bindings of any captures or materializations that reference the old collection.

      -

      Web app workflow

      -

      If you're working in the Flow web app, you'll see an error message and an option to re-create the collection as shown in the example below.

      -

      -

      Click Apply to re-create the collection and update any tasks that reference the old collection with the new name.

      -

      flowctl workflow:

      -

      If you're working with flowctl, you'll need to re-create the collection manually in your flow.yaml file. You must also update any captures or materializations that reference it. For example, say you have a data flow defined by the following specs:

      -
      captures:
      acmeCo/inventory/source-postgres:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-postgres:v1
      config: encrypted-pg-config.sops.yaml
      bindings:
      - resource:
      namespace: public
      stream: anvils
      mode: Normal
      target: acmeCo/inventory/anvils

      collections:
      acmeCo/inventory/anvils:
      key: [/sku]
      schema:
      type: object
      properties:
      sku: { type: string }
      warehouse_id: { type: string }
      quantity: { type: integer }
      required: [sku, warehouse_id, quantity]

      materializations:
      acmeCo/data-warehouse/materialize-snowflake:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-snowflake:v1
      config: encrypted-snowflake-config.sops.yaml
      bindings:
      - source: acmeCo/inventory/anvils
      resource:
      table: anvils
      schema: inventory
      -

      To change the collection key, you would update the YAML like so. Note the capture target, collection name, and materialization source.

      -
      captures:
      acmeCo/inventory/source-postgres:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-postgres:v1
      config: encrypted-pg-config.sops.yaml
      bindings:
      - resource:
      namespace: public
      stream: anvils
      mode: Normal
      backfill: 1
      target: acmeCo/inventory/anvils_v2

      collections:
      acmeCo/inventory/anvils_v2:
      key: [/sku]
      schema:
      type: object
      properties:
      sku: { type: string }
      warehouse_id: { type: string }
      quantity: { type: integer }
      required: [sku, warehouse_id, quantity]

      materializations:
      acmeCo/data-warehouse/materialize-snowflake:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-snowflake:v1
      config: encrypted-snowflake-config.sops.yaml
      bindings:
      - source: acmeCo/inventory/anvils_v2
      backfill: 1
      resource:
      table: anvils
      schema: inventory
      -

      The existing acmeCo/inventory/anvils collection will not be modified and will remain in place, but won't update because no captures are writing to it.

      -

      Also note the addition of the backfill property. If the backfill property already exists, just increment its value. For the materialization, this will ensure that the destination table in Snowflake gets dropped and re-created, and that the materialization will backfill it from the beginning. In the capture, it similarly causes it to start over from the beginning, writing the captured data into the new collection.

      -

      Auto-Discovers:

      -

      If you enabled the option to Automatically keep schemas up to date (autoDiscover) and selected Breaking change re-versions collections (evolveIncompatibleCollections) for the capture, this evolution would be performed automatically.

      -

      A new field is added

      -

      Scenario: this is one way in which the schema can change.

      -

      When a new field appears in the collection schema, it may automatically be added to any materializations that use recommended fields. Recommended fields are enabled by default in each binding. See the materialization docs for more info about how to enable or disable recommended fields.

      -

      When recommended fields are enabled, new fields are added automatically if they meet the criteria for the particular materialization connector. For example, scalar fields (strings, numbers, and booleans) are considered "recommended" fields when materializing to database tables.

      -

      If your materialization binding is set to recommended: false, or if the new field is not recommended, you can manually add it to the materialization.

      -

      To manually add a field:

      -
        -
      • In the Flow web app, edit the materialization, find the affected binding, and click Show Fields.
      • -
      • Using flowctl, add the field to fields.include in the materialization specification as shown here.
      • -
      -
      info

      Newly added fields will not be set for rows that have already been materialized. If you want to ensure that all rows have the new field, just increment the backfill counter in the affected binding to have it re-start from the beginning.

      -

      A field's data type has changed

      -

      Scenario: this is one way in which the schema can change.

      -

      When a field's data type has changed, the effect on your materialization depends on the specific connector you're using.

      -
      warning

      Note that these restrictions only apply to fields that are actively being materialized. If a field is excluded from your materialization, either explicitly or because it's not recommended, then the data types may change in any way.

      Regardless of whether the field is materialized or not, it must still pass schema validation tests. Therefore, you must still make sure existing data remains valid against the new schema. For example, if you changed excluded_field: { type: string } to type: integer while there was existing data with string values, your materialization would fail due to a schema validation error.

      -

      Database and data warehouse materializations tend to be somewhat restrictive about changing column types. They typically only allow dropping NOT NULL constraints. This means that you can safely change a schema to make a required field optional, or to add null as a possible type, and the materialization will continue to work normally. Most other types of changes will require materializing into a new table.

      -

      The best way to find out whether a change is acceptable to a given connector is to run test or attempt to re-publish. Failed attempts to publish won't affect any tasks that are already running.

      -

      Web app workflow

      -

      If you're working in the Flow web app, and attempt to publish a change that's unacceptable to the connector, you'll see an error message and an offer to increment the necessary backfill counters, or, in rare cases, to re-create the collection.

      -

      Click Apply to to accept this solution and continue to publish.

      -

      flowctl workflow

      -

      If you test or attempt to publish a change that's unacceptable to the connector, you'll see an error message pointing to the field that's changed. In most cases, you can work around the issue by manually updating the materialization to materialize into a new table.

      -

      For example, say you have a data flow defined by the following specs:

      -
      collections:
      acmeCo/inventory/anvils:
      key: [/sku]
      schema:
      type: object
      properties:
      sku: { type: string }
      quantity: { type: integer }
      description: { type: string }
      required: [sku, quantity]

      materializations:
      acmeCo/data-warehouse/materialize-snowflake:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-snowflake:v1
      config: encrypted-snowflake-config.sops.yaml
      bindings:
      - source: acmeCo/inventory/anvils
      backfill: 3
      resource:
      table: anvils
      schema: inventory
      -

      Let's say the type of description was broadened to allow object values in addition to string. You'd update your specs as follows:

      -
      collections:
      acmeCo/inventory/anvils:
      key: [/sku]
      schema:
      type: object
      properties:
      sku: { type: string }
      quantity: { type: integer }
      description: { type: [string, object] }
      required: [sku, quantity]

      materializations:
      acmeCo/data-warehouse/materialize-snowflake:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-snowflake:v1
      config: encrypted-snowflake-config.sops.yaml
      bindings:
      - source: acmeCo/inventory/anvils
      backfill: 4
      resource:
      table: anvils
      schema: inventory
      -

      Note that the only change was to increment the backfill counter. If the previous binding spec did not specify backfill, then just add backfill: 1.

      -

      This works because the type is broadened, so existing values will still validate against the new schema. If this were not the case, then you'd likely need to re-create the whole collection.

      -

      Auto-Discovers:

      -

      If you enabled the option to Automatically keep schemas up to date (autoDiscover) and selected Breaking change re-versions collections (evolveIncompatibleCollections) for the capture, this evolution would be performed automatically.

      -

      A field was removed

      -

      Scenario: this is one way in which the schema can change.

      -

      Removing fields is generally allowed by all connectors, and does not require new tables or collections. Note that for database materializations, the existing column will not be dropped, and will just be ignored by the materialization going forward. A NOT NULL constraint would be removed from that column, but it will otherwise be left in place.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/index.html b/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/index.html deleted file mode 100644 index bf79fd85d3..0000000000 --- a/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/index.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - -Google Cloud Firestore to Snowflake | Estuary Flow - - - - - - - - - -

      Google Cloud Firestore to Snowflake

      -

      This guide walks you through the process of creating an -end-to-end real-time Data Flow from Google Cloud Firestore to Snowflake using Estuary Flow.

      -

      Prerequisites

      -

      You'll need:

      - -

      Introduction

      -

      In Estuary Flow, you create Data Flows to transfer data from source systems to destination systems in real time. -In this use case, your source is an Google Cloud Firestore NoSQL database and your destination is a Snowflake data warehouse.

      -

      After following this guide, you'll have a Data Flow that comprises:

      -
        -
      • A capture, which ingests data from Firestore
      • -
      • Several collection, cloud-backed copies of Firestore collections in the Flow system
      • -
      • A materialization, which pushes the collections to Snowflake
      • -
      -

      The capture and materialization rely on plug-in components called connectors. -We'll walk through how to configure the Firestore and Snowflake connectors to integrate these systems with Flow.

      -

      Capture from Firestore

      -

      You'll first create a capture to connect to your Firestore database, which will yield one Flow collection for each Firestore collection in your database.

      -
        -
      1. -

        Go to the Flow web application at dashboard.estuary.dev and sign in using the -credentials provided by your Estuary account manager.

        -
      2. -
      3. -

        Click the Sources tab and choose New Capture.

        -
      4. -
      5. -

        Find the Google Firestore tile and click Capture.

        -
      6. -
      -

      A form appears with the properties required for a Firestore capture.

      -
        -
      1. -

        Type a name for your capture.

        -

        Your capture name must begin with a prefix to which you have access.

        -

        In the Name field, use the drop-down to select your prefix. -Append a unique capture name after the / to create the full name, for example, acmeCo/myFirestoreCapture.

        -
      2. -
      3. -

        Fill out the required properties for Firestore.

        -
          -
        • -

          Database: Flow can autodetect the database name, but you may optionally specify it here. This is helpful if the service account used has access to multiple Firebase projects. Your database name usually follows the format projects/$PROJECTID/databases/(default).

          -
        • -
        • -

          Credentials: The JSON service account key created per the prerequisites.

          -
        • -
        -
      4. -
      5. -

        Click Next.

        -
      6. -
      -

      Flow uses the provided configuration to initiate a connection with Firestore.

      -

      It maps each available Firestore collection to a possible Flow collection. It also generates minimal schemas for each collection.

      -

      You can use the Source Collections browser to remove or modify collections. You'll have the chance to tighten up each collection's JSON schema later, when you materialize to Snowflake.

      -
      tip

      If you make any changes to collections, click Next again.

      -
        -
      1. Once you're satisfied with the collections to be captured, click Save and Publish.
      2. -
      -

      You'll see a notification when the capture publishes successfully.

      -

      The data currently in your Firestore database has been captured, and future updates to it will be captured continuously.

      -
        -
      1. Click Materialize Collections to continue.
      2. -
      -

      Materialize to Snowflake

      -

      Next, you'll add a Snowflake materialization to connect the captured data to its destination: your data warehouse.

      -
        -
      1. Locate the Snowflake tile and click Materialization.
      2. -
      -

      A form appears with the properties required for a Snowflake materialization.

      -
        -
      1. -

        Choose a unique name for your materialization like you did when naming your capture; for example, acmeCo/mySnowflakeMaterialization.

        -
      2. -
      3. -

        Fill out the required properties for Snowflake (you should have most of these handy from the prerequisites).

        -
          -
        • Host URL
        • -
        • Account
        • -
        • User
        • -
        • Password
        • -
        • Database
        • -
        • Schema
        • -
        • Warehouse: optional
        • -
        • Role: optional
        • -
        -
      4. -
      5. -

        Click Next.

        -
      6. -
      -

      Flow uses the provided configuration to initiate a connection to Snowflake.

      -

      You'll be notified if there's an error. In that case, fix the configuration form or Snowflake setup as needed and click Next to try again.

      -

      Once the connection is successful, the Endpoint Config collapses and the Source Collections browser becomes prominent. -It shows the collections you captured previously. -Each of them will be mapped to a Snowflake table.

      -
        -
      1. -

        In the Source Collections browser, optionally change the name in the Table field for each collection.

        -

        These will be the names of the output tables in Snowflake.

        -
      2. -
      3. -

        For each table, choose whether to enable delta updates.

        -
      4. -
      5. -

        For each collection, apply a stricter schema to be used for the materialization.

        -
      6. -
      -

      Firestore has a flat data structure. -To materialize data effectively from Firestore to Snowflake, you should apply a schema can translate to a table structure. -Flow's Schema Inference tool can help.

      -
        -
      1. -

        In the Source Collections browser, choose a collection and click its Collection tab.

        -
      2. -
      3. -

        Click Schema Inference

        -

        The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for the materialization.

        -
      4. -
      5. -

        Review the new schema and click Apply Inferred Schema.

        -
      6. -
      7. -

        Click Next to apply the changes you made to collections.

        -
      8. -
      9. -

        Click Save and Publish. You'll see a notification when the full Data Flow publishes successfully.

        -
      10. -
      -

      What's next?

      -

      Your Data Flow has been deployed, and will run continuously until it's stopped. Updates in your Firestore database will be reflected in your Snowflake table as they occur.

      -

      You can advance your Data Flow by adding a derivation. Derivations are real-time data transformations. -See the guide to create a derivation.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/system-specific-dataflows/index.html b/pr-preview/pr-1594/guides/system-specific-dataflows/index.html deleted file mode 100644 index f3d414e40a..0000000000 --- a/pr-preview/pr-1594/guides/system-specific-dataflows/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -System-specific Data Flows | Estuary Flow - - - - - - - - - -

      System-specific Data Flows

      -

      The guides in this section cover popular Estuary Flow use cases. Each guide walks you through the process of capturing data from a specific source system and materializing it to a specific destination.

      -

      These are supplemental to the main guide to create a Data Flow. -If you don't see your exact Data Flow here, use the main guide and the connector reference -to mix and match your required source and destination systems.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/index.html b/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/index.html deleted file mode 100644 index a0027623d5..0000000000 --- a/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/index.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - -Amazon S3 to Snowflake | Estuary Flow - - - - - - - - - -

      Amazon S3 to Snowflake

      -

      This guide walks you through the process of creating an -end-to-end real-time Data Flow from Amazon S3 to Snowflake using Estuary Flow.

      -

      Prerequisites

      -

      You'll need:

      -
        -
      • -

        (Recommended) understanding of the basic Flow concepts.

        -
      • -
      • -

        Access to the Flow web application through an Estuary account. -If you don't have one, visit the web app to register for free.

        -
      • -
      • -

        An S3 bucket that contains the data you'd like to move to Snowflake.

        -
          -
        • -

          For public buckets, verify that the access policy allows anonymous reads.

          -
        • -
        • -

          For buckets accessed by a user account, you'll need the AWS access key and secret access key for the user. -See the AWS blog for help finding these credentials.

          -
        • -
        -
      • -
      • -

        A Snowflake account with:

        - -
      • -
      -

      Introduction

      -

      In Estuary Flow, you create Data Flows to transfer data from source systems to destination systems in real time. -In this use case, your source is an Amazon S3 bucket and your destination is a Snowflake data warehouse.

      -

      After following this guide, you'll have a Data Flow that comprises:

      -
        -
      • A capture, which ingests data from S3
      • -
      • A collection, a cloud-backed copy of that data in the Flow system
      • -
      • A materialization, which pushes the data to Snowflake
      • -
      -

      The capture and materialization rely on plug-in components called connectors. -We'll walk through how to configure the S3 and Snowflake connectors to integrate these systems with Flow.

      -

      Capture from S3

      -

      You'll first create a capture to connect to your S3 bucket, which will yield one or more Flow collections.

      -
        -
      1. -

        Go to the Flow web application at dashboard.estuary.dev and sign in using the -credentials provided by your Estuary account manager.

        -
      2. -
      3. -

        Click the Sources tab and choose New Capture.

        -
      4. -
      5. -

        Find the Amazon S3 tile and click Capture.

        -
      6. -
      -

      A form appears with the properties required for an S3 capture.

      -
        -
      1. -

        Type a name for your capture.

        -

        Your capture name must begin with a prefix to which you have access.

        -

        In the Name field, use the drop-down to select your prefix. -Append a unique capture name after the / to create the full name, for example, acmeCo/myS3Capture.

        -
      2. -
      3. -

        Fill out the required properties for S3.

        -
          -
        • -

          AWS Access Key ID and AWS Secret Access Key: Required for private buckets.

          -
        • -
        • -

          AWS Region and Bucket: These are listed in your S3 console.

          -
        • -
        • -

          Prefix: You might organize your S3 bucket using prefixes, which emulate a directory structure. To capture only from a specific prefix, add it here.

          -
        • -
        • -

          Match Keys: Filters to apply to the objects in the S3 bucket. If provided, only data whose absolute path matches the filter will be captured. For example, *\.json will only capture JSON file.

          -
        • -
        -

        See the S3 connector documentation for information on advanced fields and parser settings. (You're unlikely to need these for most use cases.)

        -
      4. -
      5. -

        Click Next.

        -
      6. -
      -

      Flow uses the provided configuration to initiate a connection to S3.

      -

      It generates a permissive schema and details of the Flow collection that will store the data from S3.

      -

      You'll have the chance to tighten up each collection's JSON schema later, when you materialize to Snowflake.

      -
        -
      1. Click Save and publish.
      2. -
      -

      You'll see a notification when the capture publishes successfully.

      -

      The data currently in your S3 bucket has been captured, and future updates to it will be captured continuously.

      -
        -
      1. Click Materialize Collections to continue.
      2. -
      -

      Materialize to Snowflake

      -

      Next, you'll add a Snowflake materialization to connect the captured data to its destination: your data warehouse.

      -
        -
      1. Locate the Snowflake tile and click Materialization.
      2. -
      -

      A form appears with the properties required for a Snowflake materialization.

      -
        -
      1. -

        Choose a unique name for your materialization like you did when naming your capture; for example, acmeCo/mySnowflakeMaterialization.

        -
      2. -
      3. -

        Fill out the required properties for Snowflake (you should have most of these handy from the prerequisites).

        -
          -
        • Host URL
        • -
        • Account
        • -
        • User
        • -
        • Password
        • -
        • Database
        • -
        • Schema
        • -
        • Warehouse: optional
        • -
        • Role: optional
        • -
        -
      4. -
      5. -

        Click Next.

        -
      6. -
      -

      Flow uses the provided configuration to initiate a connection to Snowflake.

      -

      You'll be notified if there's an error. In that case, fix the configuration form or Snowflake setup as needed and click Next to try again.

      -

      Once the connection is successful, the Endpoint Config collapses and the Source Collections browser becomes prominent. -It shows the collection you captured previously, which will be mapped to a Snowflake table.

      -
        -
      1. -

        In the Collection Selector, optionally change the name in the Table field.

        -

        This will be the name of the output table in Snowflake.

        -
      2. -
      3. -

        Choose whether to enable delta updates.

        -
      4. -
      5. -

        Apply a stricter schema to the collection for the materialization.

        -
      6. -
      -

      S3 has a flat data structure. -To materialize this data effectively to Snowflake, you should apply a schema that can translate to a table structure. -Flow's Schema Inference tool can help.

      -
        -
      1. -

        In the Source Collections browser, click the collection's Collection tab.

        -
      2. -
      3. -

        Click Schema Inference

        -

        The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for the materialization.

        -
      4. -
      5. -

        Review the new schema and click Apply Inferred Schema.

        -
      6. -
      7. -

        Click Next to apply the changes you made to the collection.

        -
      8. -
      9. -

        Click Save and Publish. You'll see a notification when the full Data Flow publishes successfully.

        -
      10. -
      -

      What's next?

      -

      Your Data Flow has been deployed, and will run continuously until it's stopped. Updates in your S3 bucket will be reflected in your Snowflake table as they occur.

      -

      You can advance your Data Flow by adding a derivation. Derivations are real-time data transformations. -See the guide to create a derivation.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/guides/transform_data_using_typescript/index.html b/pr-preview/pr-1594/guides/transform_data_using_typescript/index.html deleted file mode 100644 index a973a25a55..0000000000 --- a/pr-preview/pr-1594/guides/transform_data_using_typescript/index.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - -How to transform data using TypeScript | Estuary Flow - - - - - - - - - -

      How to transform data using TypeScript

      -

      This guide will teach you how to write and publish a simple TypeScript derivation.

      -

      Introduction

      -

      This tutorial will show you how to implement a stateless transformation using TypeScript. You’ll learn how to implement a flow that filters events coming from the live, real-time Wikipedia API.

      -

      Setting up your development environment

      -

      In order to implement transformations through derivations, you’ll need to set up your development environment. You’ll need a text editor and flowtcl, the CLI-tool for Flow installed on your machine. Check out the docs page on installation instructions.

      -

      Before continuing, sign in to the Estuary Flow dashboard, make sure you enable access to the Wikipedia demo. Using flowtcl, quickly verify you are able to view the demo collections used in this guide.

      -

      Execute the below command to display the documents in the demo/wikipedia/recentchange-sampled collection:

      -

      ::note This collection is a 3% sample of the enormous demo/wikipedia/recentchange collection which contains millions of documents. Since the purpose of this tutorial is to demonstrate a proof of concept, we avoid publishing a derivation that processes hundreds of gigabytes of data. -:::

      -
      flowctl collections read --collection demo/wikipedia/recentchange-sampled --uncommitted
      -

      If you see a stream of JSON documents on your terminal, you’re all good - feel free to cancel the process by pressing C^C.

      -

      Examine a sample JSON that lives in the demo collection, as this is the data you’ll be using as the input for our derivation.

      -
      {
        "$schema": "/mediawiki/recentchange/1.0.0",
        "_meta": {
          "file": "recentchange",
          "offset": 12837,
          "uuid": "f8f07d87-f5bf-11ee-8401-4fdf95f7b91a"
        },
        "bot": false,
        "comment": "[[:File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg]] added to category",
        "id": 2468434138,
        "meta": {
          "domain": "commons.wikimedia.org",
          "dt": "2024-04-08T15:52:13Z",
          "id": "d9e8698f-4eac-4262-a451-b7ca247e401c",
          "offset": 5008568732,
          "partition": 0,
          "request_id": "b5372124-63fa-45e1-b35e-86784f1692bc",
          "stream": "mediawiki.recentchange",
          "topic": "eqiad.mediawiki.recentchange",
          "uri": "https://commons.wikimedia.org/wiki/Category:Jetons"
        },
        "namespace": 14,
        "notify_url": "https://commons.wikimedia.org/w/index.php?diff=866807860&oldid=861559382&rcid=2468434138",
        "parsedcomment": "<a href=\"/wiki/File:Jeton._Ordinaire_des_guerres_-_btv1b10405460g_(1_of_2).jpg\" title=\"File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg\">File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg</a> added to category",
        "server_name": "commons.wikimedia.org",
        "server_script_path": "/w",
        "server_url": "https://commons.wikimedia.org",
        "timestamp": 1712591533,
        "title": "Category:Jetons",
        "title_url": "https://commons.wikimedia.org/wiki/Category:Jetons",
        "type": "categorize",
        "user": "DenghiùComm",
        "wiki": "commonswiki"
      }
      -

      There’s a bunch of fields available, but as mentioned earlier, the scope of the transformation for this tutorial is limited to only one field, which lives nested inside the meta object.

      -
      {
       ...
       "meta": {
         ...
         "domain": "commons.wikimedia.org",
         ...
        },
       ...
      }
      -

      This field is composed of the various wikipedia domains that are used to serve different sites of the organization. This is what you’ll use as the base of the filter derivation. Let's say that the goal is to only keep events that originate from the English-language wikipedia page, which is running under the domain en.wikipedia.org.

      -

      Writing the derivation

      -

      Set up your folder structure so you can organize the resources required for the derivation. Create a working directory to follow along, and inside, create a flow.yaml file.

      -

      Inside your flow.yaml file, add the following contents:

      -
      ---
      collections:
        Dani/derivation-tutorial/recentchange-filtered-typescript:
          schema: recentchange-filtered.schema.yaml
          key:
            - /_meta/file
            - /_meta/offset
          derive:
            using:
              typescript:
                module: recentchange-filtered.ts
            transforms:
              - name: filter_values_typescript
                source: demo/wikipedia/recentchange-sampled
                shuffle: any
      -

       

      -

      The Flow consists of just one collection, which is what you define here, called Dani/derivation-tutorial/recentchange-filtered-typescript.

      -

      Let’s go over this in a bit more detail.

      -

      First of all, the collection needs a schema. The schema of the incoming data (also called the “write” schema) is already defined by the demo, you only have to define the schema of the documents the transformation will output, which is the “read” schema.

      -

      Let’s define what the final documents will look like.

      -
      ---
      $schema: "http://json-schema.org/draft-07/schema#"
      properties:
        _meta:
          properties:
            file:
              type: string
            offset:
              type: integer
            uuid:
              type: string
          required:
            - file
            - offset
          type: object
        domain:
          type: string
        title:
          type: string
        user:
          type: string
      type: object
      -

      Save this schema as recentchange-filtered.schema.yaml next to your flow.yaml file.

      -

      As you can see, this schema definition includes a lot less fields than what is available in the incoming documents, this is expected, but if you wish to include more, this is where you would add them first.

      -

      In the collection yaml definition, the next section defines the key of the documents.

      -
      key:
        - /_meta/file
        - /_meta/offset
      -

      Every Flow collection must declare a key which is used to group its documents. Keys are specified as an array of JSON pointers to document locations. The important detail here is to know that a collection key instructs Flow how documents of a collection are to be reduced, such as while being materialized to an endpoint. For this tutorial, you are just going to reuse the key definition of the base collection.

      -

      The final section is where you specify that this collection is derived from another collection.

      -
      derive:
        using:
          typescript:
            module: recentchange-filtered.ts
        transforms:
          - name: filter_values_typescript
            source: demo/wikipedia/recentchange-sampled
            shuffle: any
      -

      Here you configure the name of the Typescript file that will contain the code for the actual transformation (don’t worry about the file not existing yet!) and give a name to the transformation. 

      -

      The source: demo/wikipedia/recentchange-sampled property lets Flow know that the source collection is the demo collection from mentioned at in the beginning of the tutorial while shuffle tells Flow how to colocate documents while processing, which in this case is set to any, meaning source documents can be processed by any available compute.

      -

      Alright, the configuration required for the derivation is in place, all that’s left is to write some TypeScript!

      -

      The transformation code

      -

      The next step is to use flowctl to generate TypeScript stubs you can use as aid when writing the transformation code.

      -

      Execute the following command:

      -
      flowctl generate --source flow.yaml
      -

      If everything went well, you’ll see a bunch of new files that flowctl generated for you in your working directory.

      -
      ➜ tree
      .
      ├── deno.json
      ├── flow.yaml
      ├── flow_generated
      │   └── typescript
      │       └── Dani
      │           └── derivation-tutorial
      │               └── recentchange-filtered-typescript.ts
      ├── recentchange-filtered.schema.yaml
      └── recentchange-filtered.ts

      5 directories, 5 files
      -

      The folder flow_generated along with the deno.json file are two things you won’t have to modify during this tutorial. If you take a look at file that flowtcl generated under flow_generated/typescript/<your_working_directory>/<your_prefix>/recentchange-filtered-typescript.ts you can see the types you are able to use in your transformations.

      -
      // Generated for published documents of derived collection Dani/derivation-tutorial/recentchange-filtered-typescript.
      export type Document = {
          "_meta"?: {
              file: string;
              offset: number;
              uuid?: string;
          };
          domain?: string;
          title?: string;
          user?: string;
      };
      -

      Now, the actual transformation code will live in the following file: recentchange-filtered.ts. Take a look at the default contents.

      -
      import { IDerivation, Document, SourceFilterValuesTypescript } from 'flow/Dani/derivation-tutorial/recentchange-filtered-typescript.ts';

      // Implementation for derivation Dani/derivation-tutorial/recentchange-filtered-typescript.
      export class Derivation extends IDerivation {
          filterValuesTypescript(_read: { doc: SourceFilterValuesTypescript }): Document[] {
              throw new Error("Not implemented");
          }
      }
      -

      Helpfully, flowctl provides a skeleton function. Update the function body to implement the filter functionality.

      -
      export class Derivation extends IDerivation {
          filterValuesTypescript(_read: { doc: SourceFilterValuesTypescript }): Document[] {
              if (_read.doc.meta?.domain == 'en.wikipedia.org') {
                  return [{
                      "_meta": {
                          "file": _read.doc._meta.file,
                          "offset": _read.doc._meta.offset,
                          "uuid": _read.doc._meta.uuid,
                      },
                      "domain": _read.doc.meta.domain,
                      "title": _read.doc.title,
                      "user": _read.doc.user
                  }];
              }
              else {
                  return []
              }
          }
      }
      -

      As you can see, only documents which contain the “en.wikipedia.org” domain are being returned, in addition to discarding most fields from the incoming record, and just keeping the ones defined in the collection schema.

      -

      Verify

      -

      You can use flowctl to quickly verify your derivation before publishing it. Use the preview command to get an idea of the resulting collections.

      -
      ➜ flowctl preview --source flow.yaml --name Dani/derivation-tutorial/recentchange-filtered-typescript

      {"_meta":{"file":"recentchange","offset":13757,"uuid":"079296fe-f5c0-11ee-9401-4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"Adoption","user":"JustBeCool"}
      {"_meta":{"file":"recentchange","offset":13772,"uuid":"082ae4fc-f5c0-11ee-8801-4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"Wikipedia:Teahouse","user":"Subanark"}
      {"_meta":{"file":"recentchange","offset":13774,"uuid":"082ae4fc-f5c0-11ee-9001-4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"Islandia, New York","user":"204.116.28.102"}
      ^C
      -

      As you can see, the output format matches the defined schema.  The last step would be to publish your derivation to Flow, which you can also do using flowctl.

      -
      Publishing the derivation will initialize the transformation on the live, real-time Wikipedia stream, make sure to delete it after completing the tutorial.
      -
      flowctl catalog publish --source flow.yaml
      -

      After successfully publishing your derivation, head over to the Collections page on the Web UI and you will be able to see your derivation in action!

      -

      Verify Derivation on Web UI

      -

      Wrapping up

      -

      In this guide you learned how to write your first stateless TypeScript derivation to filter data in a collection.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/img/Estuary.png b/pr-preview/pr-1594/img/Estuary.png deleted file mode 100644 index 52c66d935110423d9a5f11a194fd7897926618c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27316 zcmd3O)mI%pur*fP-QnQw?(Po7rMN?JcXxM(gS!`RaSrYd#ogV%{_a}e{TuGXtjr`2 z$wM-0viDA+RFtHV;PK(Xz`&4XWhB(Vz`!N{89prZzn<_K$$)U5{0>ZoT zw|_B@xwfo@q9PdGKOYthJi;0b>YoSx&+z{l7#Kt$#Q*OBmn?+*U;lqbN3w-zz`#Vn zWF`m$kkd`IV-*VS~p6N)~dHHf-fev3=>_xzQep%2h9dw1m~2IE~^Kx|&gs&%*?9 z01(46pTBHEqAQ@|g{qjJAT^S!E95F-=>Vn}0`!2Al5RY{g7PAH7n@xsyxf5^-Gd50 zfl5{Ls{DZbwSK3fDUJYBW$d8*u-{7Rb@+=&sDCXhs7qvW2^LTX^2+?5Po1#TNwiAt zHDx{9ZtodTJ56mgbA%*(SZXx`XlzgiIq~OmemAS?qfoxRrs%; zu{7W^670Qs9^Qii2=b~4$lo%A^*vxl_G~yF_!IQmBh>jlPzlM8>(tKKBxF~FY1B5u zx(Y+3i$|KD@~2**sF&@DDzY#p16rkQRMa*rhpY9{ma^;)tZ&kL7Ke>zkien|)Jyut6F&F6=rEhu#R^ zY#^Vie;Fb$UWK+LiL}ZTFX=!4Z(dLAIC((p zk4}cD&v8zRIyQ(JE)bu26EAl0DZhw+&qgT3d<&(>q8dqpjUUN71Zs=|YAXoQ3tUOf zmwtX9Z_M8|+S8tLwB>E9M>oJ1-=-OBeI6sTzTGi&I2cjncQ}4ZyLr=#k8s?T{SzTn#cFv9H&3o zBJctk(@dcPWj`-rcstD!TOI(?ynsQB9^C(2J2Z0@8d&L6!_iT*BQTQ=kf)LJyWKo+gNlY7WWx=+3e>SReEIj2Hfl?Yk0yu=vayfrBeAFEEfbeyu`C z8t)zZfDwIRpbd%u8DsHwvLhXH9bzSEYxPI?Y?Hp6d0%h=GxTRKI9?J1oj>P+RL4s zJ4V_zBCgVW4zx0PC5U^Ec`SdNv=@orDCIAVXl+DeH59Z4*e6?77R^W(U24-J`2is` zTBM2&VvaS97x`=4K7tU%3EJiUl6l?52B9>+Wpz@W%NGvPF~21)ZMc)$OtE`iKn8ly znqq|n--udA)#%UTdyjk?$o-I)Rl8PzITaa)q@DY&to}QL)x4E}R&D?183RNFIVnD| zWufJ9#TRg+rOz;W$x-ejsBc+UO@MF1E$bhI|)IJ9*M->h!D1$c~Z2%KPkvrY9?bQDWBD6ByI#;k6EDSBH>6S|3WQY>8*ud=5@Fgje>j+J5j%yxJiQAGrKRfg_B*uYwv%!)?TmdneQ?vb z#HEq)GxK*+03W0fi+uCmKRLX%-5+w&lhTUtB`>t9)Z!KsK#EsXk^^?P-kl@5ewaTk zXB96oVx?Ccno{E~_kfs|)V35?0ySW?3x0(60HOz|mo9}k%mEzD&GI)h8+ukO1hun; zqp|fb(gf2)lQ)BvhUnVdt_I1U)qJw$gDG3`(M9&HDBz=S)~4amg@+J!Z_WMws#Z`< z7@Rxs#RmHqHgr>axnD~D%&H@2d13Lv4}HI3YuMBFPn3T&fCrJL$p2*9%Qe=q35{A% z^;TSp*^-VXn2gehT_s!w8@>)itSy#q6S%K&k%v>OQ;+3~LPH=*+%r0M|A2JC=C5TO zb4b4+m~2JexmYmL5lPBH=$dRIeBkSx?6WeJLilT<-$*F%BN*75CP;f*32ZF0-2Y%_0DYNrRI@#1B8s%k;Cqc}Xm66QL8 z`Uh%HZK@fNiHG)<005f_A6b<8+Hm4{%r_P48@EGLx)ZMP{SDDN%amPj7wm8E1>m;VB$!7_@ux%IXgJMehP5!2|YfF`MWOO1;Qh)f*BOUw;xu5_7vI z&@U2i=I$|tLX>tB;!~6JWutRqTPT(RaK5pom|)uENYWs`xAUJ+O>-p+v4{qCAyo-A zW7ywG1`6M)?y=7Oxgz#7E2!xezljqR1Wl~afpy6d5q)LE38#@+N4}vAls3Q zYFSHuzq$hlo?sk3H25W4bp>l!UudjJ>NAKKp#>u_wQ{UccaBI0>3OxZ*#vac*N=F~ zNz>$D+2U%7AjvypXdDA}R>u)n#M5C=R*necKN1asCc+kWn8AmJer)(dqC}YBqVEd5 zzcyqS;t;;NjK5tfM>}TzVVLbmlJHA*8rT8Hb8nHfj!NulgC&d(T*$7$q{Uhq2u_%O zL_pq4?0qF4p>q@9C(|{*5l^!HFl>>~cf*LAvL}QLxpbDMmZa<>+n3Y*ZhXCyvp>#? zSL~Cr3ymm;|6q>HdW&DD?m*=J7A{HJ2Wv(-iikDckS*2x5!~-tH?3`kPJ1iC=(D1| zj1Q4Bf%oIli=`XFgken2QQ0DA9?=U|<94m^*S4UnYK@`o1DbA9fG8j0Lt6aUN9{rQ z$0k`K3>1)S3_wA9gh{20q|Tm=XEzj`jku?C5G#(nTnu4mfF1N;!Ql472bGia$H9!0 z=&)KS!X15?bjWB#_xY$U{0SM~Epa)|X>$MkDyZmZ9ycG?iL$5Y}5xaTztb-XvCOhFAhSF%X(~^v0iG zW{xWtKU?vlR9x_Ad^7hrSjN7B;Q5)CQzTjidlxewsHfvfPFKuU=O6(eoCi&Cm-?K>0!-VXF@v!OKO*pv5 zt|gM425G&;eL`pr)%0yGzzng%cGS?Z;9whjDx0tLpgIX4ic(!fqEq2uP@+_;kziqL zd65`SHQpqeFSZ-|&RpSr0nH_DMw= z8F!9)`eb5=O$5fQ@begceKu^bKZ_LW3ovO6exe6%LFFER1F)6P?GzXw3=%}zhT8~J zQlkh^9!QYzY$&ATz!9)y($_2G^++pgQI`!z)rP541Z?-Mb`2R6yn}jPC^Y7NtAf^% z7JAYB<6P>F==#;;DvEgtsCbbcp<3{#y&ygn_hUZwQA8qXcZ3MH7-|e3&3*05Vr^Gh;pO`xJEt$Xv>yy!rpv^Lw1xuOa;*plfW~^al7^jHE(s!FU z`F*f&)q_krP)!-#YV$n?$r4p;WU8}05Y4O#xhIP{_iU+?E$ zpnH7JLz>@^5$KIN$Z6(gy{e)&ziT>;>>4i8h>1dlG`+;VK0>N0?RHBnK z3!a7admS9y*n)C0eFrwkVoWLDvcCCq{Ho(Jlll{@KMYtvp(q?WcLkD0U3I4*@o$|* zF(uTDj4xt*l4{I1u#kkKinmTGX{R)GPK zz_x^u%Z;ZT+|q5b?_`AFB_$0#9>ACSU^XrM%3>Bv&2;Sr(ln2kp3E*BinrFe8sfP5d#4GG(^RSuYNZ;n26Ksy74aL08YmUqqhx`QwCY$=*XUS zSi*P_O|b>->G%rehLPwR>gnpU+{H6tWs3vC zc+3cfkvSV2Egx9b_?~yo0YAngZ#K|T0R~|aZ!>tJMSup`>#aio@~WvfkBg7rwe(iZ zb(h&gP$Hu!M1&i5kT_~0J{fwk8j6~!13eT#E;5XIh>l7_ldYOi-6#UAE=`0NCxc%^ zT1-()74LH_cFAzm0V4?uvbf%<=E$FYO`HGO93^JrY%L9ywJ__?f)3na5*unsNPLE> zrIP|_ji{L?8L6y%;zjUc?*;GTeuYLmFyuYLICeY~B#ZhxK;^{z z3bQD8_a~z|G02Tg3ee?izpo7?`Vr#EOf_7M2U)8wj?lnj6lnHWaMqw4Wa*=_n=ws|tlxaA8UG@QqWqp3&@9Pfgr^APMiVRlC(` z5k+QnL4=PXJUUO&i3ZI(G3ofG9*{o`@kRnDT4tr}D=L%+#)r3XkexwP-Uw8vD9|e& z31GgPU3gS*&~IZy#!JhG_&K1B;y}QhR>9IEsBnJSS!%ORL+8|+g?_>U>P9?)A)&_= zv>L~C^`on);TROwus?B}e8MvYk^csmUxhOoh=odv8!|wZ1`plip!dmpUP$cfP3;7i zx8xNyLuE^+%L=uZnZmM&1y-m?u z!io7Egyx2`I-~BAIsA_89m&s+kj-GePu)G!KlxT!wp}#9jR}9s=Rs;NhR0^wn(rxy zm^ER#WMjQ7SrY=N=Q7E4p|b9PV9N!0p)Sz4Y-xI*leRqGk^MUzwS-OJnF+=%Z07(> z6M-*WSwRt^5zk6R;V`+?WfjgorC_PV!a64%m2aAj5M*Vcsot@BI5ss3x%Y`ZURsTU z;=xRAR1GE!*kj64?y*5#sAieYJFJORb8XQvwi;~&)x zxBH)d&j<2lm|h3a=yymmjYcftE2_flZ+={qb6KfQumfgMVtbpC<<=bQ3Xl7Op4?eG zKm0971?emrk;s8X@%w-1w9+Zo^{UR_^1=caj4}@OHU1)Q9^AZI=3(6z?U+^W&m7tJ zamNB2R7k=Qhd`6Rl`>G9X;Il+j~m{O(dZs*&C0&v=4ux+EzG%H5;-)Z363}s;-vh| zBD7SWkucV;Azr`a6w%fSg_R*nN6&_jJ@l81GtaC}Lpnpqie@O?#~!vJx1g~kFWQ)z zeW})HYRrJc6i!4W>EBvsUc9dFsdD|U<@VQQfNk3-s`!_vG)FNLOb)`eKm76mreI@A zhUApe%szp~nbA60q8cu7G14u>;;*gi_LF9b0FM7784VMx)bD#P}Pt96977bB|hI7tjHDz|=4oC?3*BLs`=qb>r~ zwSsRd@ zj@0nHG~?Hp|6J-c1(0?o{3}gW!C4Iv{nd+xdvlvl1$UOy2@}GKKWa;0WdzfAm{x`U zX!Y$@MY9eP5j}7jZChHGU3^A4tsn)l-6SNj4+AQ(w#-fOl!`~Q&5~fRcDhC4W_=Jy zf{1bZoz;QJ6AAYu`L0&U`S)rl8f?2?b&Q+FOq$-`dQN zJLM<8gn`qR#ZKfYB{YN2 z55ASA?IR3C_JEVt*<2`6{q5^XiVJGnc3l|-I(W1*yYd4Mf2GOuwqv!wBU>WD?-U; znwTtE`i{tn{-scfv$En?#~2y&lC9lYKt`YOgf+e%>>vyHVIz7YYM3wqLK3oIjTZmu z7w+X3z&5pjkAmy5jUEk^vnDFYPoZ(m1<=76=Mr!`Ue|L8@}+HSC>0tvhCoUZcKRro zVCvJhn-$RYZE|(p-!Tgon8pPH%eR1-8;YyXXi~;^osAkr ztdmrGqdRu&DR_%--=g?)Bo4P_kBePsuvry;fNbOOZLu2eP+WujFy}4!8gQ9FJ2;8u z#e~EqXo3xoYv^V{>_ss>(`-@UtS#Qrx*vj?-ZbXA&bZrKhIB}($07^NUqAg=`FrlCVHo-5ogf=HnFjb#4NfB3)5<3JcpQ-1ddzy5g!R&;* zo+%TJ^CJdRo>(GpL_gYL)K_3Kp1I)Yy=O2eK$8uMF39lR(aR%FZN$-jD+;vO$>p5|*I3KwpU!1wj0fhFpE{tlE({~_JHsyUYicka7_j#J%c74a zEmBgc7)g^@GF~|xz0?6Bu1?h8iO%@c@fwoH4KAprb5wjM!y##5Nvl^*w~mU8lU7D2 z=>Ym1yV9ks%5JKz%{ahLM@Nk#TWG!sn`GtHymkI^bsN+u67Sn$5p3kaPi~fI`nL$9 z!3RnCl#*lgpI z=0OX8=JKg$zQ0!C7vUToW_^IjW?}=6#~+7q>r9xPR(+&OVDP5&^@gr}agyzbkhOpd zq*6A_6ZyA@)Qnd%`j$p@*vs!fC^0*iBK) z^Ti3CU7Vd&@Men(#u3T1-%8O6@@$ywe#IswjaFA`5nZd^2fk!wi*o9JSRQ*^J?d?= zmUY08L?^)x3uu$Srk22BZt-}}G9(MXLoGE68I>^Z6v>rAVikzy*4}$E{MAh^(r!{s zED}AVC?Zx9e|RXc~ zL4nWuY((fLXkR2T8j#yC>_pyM!Kr~wqZjFqXBII`%FlJV%*t|!UMXQV) z&x(nlZ#I~AF*NLmoNM-e78z7|*o~go=fwsxh-ecq&c@$U9Aw z1Wc4^Ooay&W05_|rRffCLQo6{>x`jtAUo-fQOIMe3)9WO@b4cTt~31FF_Xin9Zv~- z6Q@!q7QTgftduN-MP;E0cl=FLN3!CRD;sO^6ETQzH#bkjaMz^o3~n!RwKH2Wbri(5 zTfg8Q-!yrG`8ykRCRFlRjTRtCVKRQGxDi7l{S2~ItM|A1;$yBy7S zfZrol%~HXu24!%5-1;X~s>PA#h27fwyd!QKB(a0NMYL7(K zq2{b2hw{39+HF>Gk{Pj{f<9Y9h6IQ9(L@fGlVTLj)ENSf@!9&(<-if~laNZ@NHe6z zmicW!J+pgHH|58RTJ>Gd!ph{~!W=Ao!$?XYEpm#Tj0;Q+Pr5839Ow{=cOe;-KTUZ@ znkJj){o_`Fo>FU1W*oDaz>jH= zz_Ft0qv>gBAP?2Fx^SEI57*R&(iIo!+@uHee-c`Et`Y-JoR2EOQCGlVYe)AX91b zz<>Vle|Sg3zZn=H{)ejlKNhY9fergr$Cl6q3|N@uCj6~=*d`A&A<_A_TtOu863aF+&J&jdC`^|gk-uKPcHHnr6lPP^-!>FAXgy4;bLT3fL?t$oE3 z>SC-NRm2A$2sVeUHcqa}H@s7vu4qyP#mt8 z9~?Qb>X)J4rWgsk$17gwf7K}VJa^MPDGu&`p-%f zh*l0yfVFv_?MY~K+)RQQ@rSgq`lYd&p9g95FT-(#%U|o+1-KKBE^=g?!&_#r&^Jfr zvE{_NKRVTM^{QV;KlDbHpKdCY>843l6U=w=rTu)=v~#$(g;{#-I*oV^@wm9hVe*Z( zPyZxpT1aQ<`qi@XcReByb+`8xgDDdC&T%0NVO2j#jPMho-M~zk)qabmxAP_8PRUOL z^c-|L-`jA$&P)Cy6l^mQOx^rLj^It&pgw?VPf4ve|Cr|z*XV6vv;lnh2_`Ax1JEiI zAK!qX@8UkYaB$w_|2L?J;wO-X{Hfl>7^7w2&Rf?VZ5-~WT3Ir!kPA!wIp+f(fn1!3OJ1oSk| zT()`qM%;IlI+>1%5<;_$f}HrnH4{hPo3n(7+MTT^x6qe83NaIwJ?^kqjJ8k0c6sqU zkT$D5!1Qk*6w36(`yl44J(b+5A3LdG{~eMzgDy1|urhAF&>(=Gzp36LVCrG`Zh2;8 zrGjm%^VRi4>APn3>h~{{FNsnC`P7#&tTXutw3)Q#j9mRI^GkRAC&cY-VKdKPBWjJ>6n-=1&n0Imf|w=Pjh&sd4l?v>2)woyL1#|rNcb7?5qLuZU(+SeVuU+ zadB{tJN;Q4)0)|K%&(6h@qp{8oOI%&QnfE}-kvJP2YAsi=R94NB@H%yyjmvNtb8TYadT>G>twY|G!-;m;Fhf~)I*%&QfI~k$5b|qte%ck{3#WC`KB5=$Z zm6VGo+4W>deozR0f?5hXCX!7enwEGhwS;i4=F1)Xl_^K&p9Cj8?$<{n@$QACX+{*G zntrIt1`^3#vkH~beETYrhu5Al5X}bSt%xU?*{tjIGi*B(#o65_Te$G0)lH@%DInK< zNqc|3SC@ua_3RUqyS}AJl1dbUI!qqBrk>(DZ~$g4aKmVNBT^uS$yZ`!^Qm^=3ZG#_ z539>zN|I}Vm5I#u;AolEJ|ea07IL8_xrkz+9-+dIP_vb|(mw-gn_Dnq@kIi7O{J*j z@R|2gplx0JILdrYX8x>X^ONNLDc6hM?6psVi^;oyzl0xLnJiIVCGz8Pn`VpJ_;Q#l9wrC5DHG@C z&0gmz$UmwRgJjMyHjMVyL%q%{5CBnVb>2C*B!~EVcd!$S?dKSSk(Y=oUU>nGO*7X{ zs#Y)Mxp+z9*uoy$D3LUm)pL4g(eY~`&_dxOJPqQ@c;fW@L7jgAuWN z&afNOgSlH*svKiM09iH4dCem$_=Ti!@6)j5Ft-KhYh-qcGKf!ye?FeLVd13U)sJ4t zT=s_LI=1%~BpEdU#>r5e=aTuS6I<1n&v{a03T!!N1P%qVS_FkA{Z9a13LAzg_3!aK^K7g4w)#LhF-dr-dIlGFweKbi&<-NtEaWo$-8Xf6V!j!uo155;bVv zJ>#B&!pJw|iGpRZ=pWoT>Y6=lm$z44y5>1edcbVsI_aI~{-hJkF#LWdlG_mFIrKV& zGiUypWO@&`(|JhvKJQ!m9>!qabBS`NB#uFb+cEa1#NjjQ7%v?uL4$|SDg3CD1R{03 zLg6DgDUxvT$^ls#CAv2eSfcM|D-_6CF$L-o?@!i_ieE8wkbBKh5dGdC|*efxgJZ=PgKtiRCA(Rnz_Z4%*t4qZ6x z^k-c8eHtu2`FEDg0)mDfxSn0*YK73Sfhd_or-M;G7tZkVD|Ni)*#v1#3Bjw%WVny~ z0=M^S0)nTD$~O4Dp@M3dkp@tQ^J1|qRdJu_r&wf1n=MD7l%eUPOt-9iBxQGERXJT_ zkS^Ra?vxF)z8+G%QDZOMER&#+5xix26EWzJRi;SxepThc$z82E-K6_THt!bujjxq0 zFM8ooD{A=V?#R@!3gixmCXF#4r59rG4kn=eh<4Ado-O)wC=>snb#ENE23hX^IO|ou z;xDl&(|&ppA8pbje_nL}dsuY5`gR#7B9d5qO1_s^T$Nr_ ze4G*ch|NFjHyk&pS(;gX z^PL1=37YDGSo-V$Gy4eF$NNuAww4;Fzgvrg<-BP^&!`PPz33%OT_Dcf{F&)%{)zPm zW7TyB0PoN+p>(}Q!GhA_{0mOJu#JAq76bw8FQ1MjeM_~|XbH#|t2L0`Vw#79IL zTnnw$!Du#Sza%HqW<13{ zC^X&~ZUNo?3zrxXJ+u{OQ99+CfCaua13C3K0rY)&5G!-}8G*+#%_8o0nu1;lmc8V| z@zu8+Me{PGg@ZRbgOLw1#re_P2h`?2qbgDE$qFqWz<_NbBfr0OQD&=22JO^C@^wC~ zu^&RzO}7u^6mK>htS~w!*P~hX1@4$ZD#4gh;&jMZ-?`p(l_9$`%}tceQ@!FoM3%Uh zE^HAko66Y(?MDFXA)PW2S%5<*YK#}c{z?8UjM~vEoz{^8@ol%bHlG?{v3pm#=D`@O*QD0JaSXaE}N9{m&RIQ5fWTWLCD5`2t$!{$KJLfHF@ zcAA)<%9y&V)g$`+=_eVbYBpb5%T^70&3E?|4BkwMlTlCcB+7ZI@*DuFToPN#q=aH} z^e=)ceX)>_Zs!k4zSRb?%3hx{Q>?g2J(f`2!%c=XuLP#fh-S@tTJ9S`>JI;Rs?PSS zZ(Y4!)zg0lquWt}KB_I_-v$D-zPAdAF4a;ZlxXlt|=jJY5%h!bhcnZ%_K--54{bQ~hykBQIlN*l{ARZa0^Jh^hHN-$3(vusMr zxNQ8U2bFXGY-Q3=9s$%Ce3>K6M&V8TiTig~+B+s$UX2YJD&T zT-W{i>J2gp|!p zHRcLpuBCa(nUfVZ%;R!Q2SS{%8K!SAn^T?bd8?=^P`_O)RhA{4yDT3Mm#~)8qPyv* zIG5Z^h@?d|$o!MI-4eu6@FRnAVi9?wco0?M=cyCj0b+nbB_|I2`1rEe0^gMcN#XhI z;K#;Y4GN(4LHE&Gb%L$)Kh8Yw^n8+LV@0YWlLL?#iP^W^9F_Tgu{ zOlquPl}%_gzRj$V7XM=6JaKHv`2$h8q0gt#2rFlzO;7y>M|WD;Nc?Fu`P25_n7ayIykZuY<{7?Yk(0a*S-=+a&gg_Y-FnTtNlC^5EG2)FE4Tw z65Iobj|hX$=_7|q0lg)k?zFU^&I2`SKL;t^_9Sw4O4f8#{_N66pP1jXs8)5C{V9Lw zYqbK3gkMNHKX6uI41AGCjcQ!G&+#8Bg(q?z^@Ye5Bz;4$*d>4nHs+v(0yKe>!(Qv>(KvQkLsF(%t43m|$1XvigVC zlaY|!EAM>-<~Oq)sPJ?-6^*;}>RmBFcu9)1Q9VpTA4v6HA8)ApBcvVFHn~*+dHi1G zXJ6SkS8wv_*?>31c;&}jn+JvFd}3{E5(7N)ER#}oPrq|qwSJqR5haWpkp8Sqp zUcbH`qa+K<0W%B$u^>Gnt$>%L4)yig+)aFnJgI1Q%X((o@pE2r(a6|SLxy+Nh0sh& zQJxrpMK~jF=2DGpS{C0VnF}(7KFUY6lz)vSM`wO}L%i6Vc_o zrLrN(^&u$7i0-@MR+k^qmj^`dzDL>TT#!|ZKV@Oe-{Dw7GGZGfr8OF6S*r8H7baLo z0{*DlAQEot=|TkT%{sCy=oBtmtcMgQ>hxrTpEJ+{C84(l!sxPmlv$AlDu$h@7C&hG z<3nVrZ`Z62AD{>F$O+qMLVoOlN8!U|8~u~=1pkxrSU^?eyr&SaVpknypd-zHwyT7* z!!yxN<@Wp{X}JNX`|L}qK$C3eE7c*xgiG)vojc!8mxwmi;%)}bTHwhw(YIjel>0dv zjQ!qcYCSmD7-1VY27$0_cIXC01b@8d5!!hRSKj4~d??%J7;9x^TM|pbt@`Il01zoT1VLT}y^}o4+OYU<* z0rNdB^tt-0r+wq_B2Y-f(lEzE;h~Oa1?^d=KEgFG=j+biSMN>>e9X31*GVsfLpBX_ z>4iJH1+r}LugdR-gnYKphfd-#&XhBRf;f%WdmNYxA3rWbz|JGQ8W9KV>60pZ4VSK8 zgQwWC(v8$4U~a0C;ZoGr-eKUp3id^o(M@Qy!sytm485}4*4#+Urk-ZQ-QEnxhH6x_ z(yBlSLOO<8Modz?%qEYo5ER$6s6Iv%vevH0hAEosJ(pGIjXQ@JL4l}wn7TyuGn}ve zS4a81ECpNbhgw@QtSTU;JdUi{8OP_|FDAOmg}J4E=D$~?{<;dUopE+1y=iCPdNup1 zNwn@x`>POi-c|+kw8^g6d#_NJxbhP0e7M+Oj>O|lt+eFvVk8zvM*Ne3we*cw`73MM zIFJyjX4J_NV!mr`Y}z^nN>Z@>PrYoieNL6-{@(aW@j?*qE9)@kqzp;sX)q;7I$TpEvR!fgEcsVdY0}V z!;^K?+LxUEvswmBK^1Y{F(OaNPZ*I$F9^7{RA1|^mlHBwaZ)owyopwfQNCe6bnkS} zaLpQH2G`I`$6c(5ZAVW0JeQL9f0@~&?(Jt5%*U!5_$B4GkURc3aK!rQ3D`V~s5??GIHA6tz_u& zM=(f^A=(y>1J5aviKqO5<6ch*(hO#3i#;Q{K@&sNtb8WO6nLNg)$14Fs)Yv2#+yv$ z9ZBNv-jYK1mhU|Ay<&^h&lMXGu3A=|f19c`PPQk^TgUBKD13d=;WE-lknJWd_P6TH z2=}=1S!0-ldAR9Vk2a3Fn3R}_nFB-@K?29|R`U~9Byz!6Gr{YO@W799zI>Y`y3{fQ zf%a5~yN9n|_H~=;JBb9PgxwQ1a(B8=1S3K?t^$&J%`{&;JF`L3`<SmVR`Gi$l9o-cHpG{e${KO>chHl4J_a2z&iDG(Mr(md`(;J@Tb`oGv{f2=hjHbDZy);*(F*p*Zj0glgCqiCGK9ZO(<8 z8#{}yvNaqLV0DIMdUBcr+?02+DB3j2Kx+1ZEz-{l9UijGBa!R1NSOm_PG)Npbh z3=`mdI#oj1FT{)pan*g}h()LFFF$Cu>LdPcVQ}YL5V@B-)%ypBrTx);dv?#@;QmS5hfz}a_iuDFM;ds0`MuBl z{64IMaHCX7f~)L+C*BoWM*n3x+TOde(h;wd{Q&mzTcOkvgp}e$#JDqw(+`DPN+KtJ zV96&5Nfvua5evAkk&C2Ay6e)DjzDr8-qdi*>bka}f3LfVI4%#fIWJnej|v8ghsXT0MZs-}3LTUXjIK^u>7zDGW@G^M0Y|8ipHHMpk8hHMsb=2KLf z#YrM;gMhN&`2J*G)zxF4ko&TEkAt=0k-5i?SXKAV$sgHykIo~@Eh+zeaeuM&S?2{G z6aDqp<*<-mSYPZhshah|o^vmPSwJs+6#^)51?U zBU{7PqbHFZK}qw~e&X`4v-I@$^Cw|iA-~c`;Ak%a8ELxD<3lZh>h93=gYOj)M@2au zH5oU!3v}3($2}aXAaQmvlsJ3XeO$NZN*R z?q27-+sS~WQ-M=*_+aEt+0UH#B^R>cuB)e~sUIFpXWl{(QbqwEF_4c^8z)qI`jIuB zOyN$-6q|N$_%->BpqXOf+IJU17lO;hrl23B6dQX|aA!1b3DQ zcI!A}ePL`@%0Yzct$Du0ypM1VvruousD}OtqY@$)<$n9@bps9iHTY#wAdl@5$=>U) zJ%{<>5BP5_d+CnZdYJE3rHRauRv$(v(>cAs+N9>I2RkT;fnN@Xn23=2feWlD#%b2N z(x3{jnx4mtwKEgYXCc!#o8W1arm{q9hpqgCz_vPYAYG-MRB|F{(lEG4`wM5(eSohH z$k?pvki0tj{V#8MK!MPc;Ll|V+sQJ@*GF$*h+-7m_j`_Q_KXJSQ^IhaVe!O+xt?%} z+RHtEAm0lard=k->_0*=!%Ay&AYBbb@U|My(cM{rkMY+BkOmq&S?SPl*n4XhAciPv zCNozrYI*Xtp?%1o@P0lK;Hn#KC$dQ#^fYBCkYo;F>Dk*s76lk#J&sQTP~aADa|e|f^^`SQe;j~c=NM~LCh3`8-She0az@$$zZBPvf6gowDKxne~%k)z2mJ zU=TrrqXlfJGWTSBZeeJgb@fEw9z_qq+JU3{C1!v_n56Mmk|C^EeL!q06WxpDIEJFO zDv5>5>tAdL?d8J+Xq9%>*Qw>q+Z&x@LT$MX++z3%d$Hy?_hc-hQ~zKC8vST3@6c(7 zTK!{(I)*CEIK>jG87G;3q`l|wVKF*IP29IP_lo?wRV##&`0M;tt4`$mPh##5JQ@1{ z2(Z-Fc(>k+*J{+=fv5aOhU-Hbhc;o)H_0mzQf+fit6SVYA>Nd+-yT0&UkIh8CG8a~ z>MjNqn1)0~Su$0_5gP@6bnmkbBavLIXGs(L6nZ?~-cQhB$kzBAATK)!EncS42e}>> zj$U3YNNwBZKIa+qU}!NN^!v|$p#D0^mN+*)Iz=Ygnl zp3|0HJ?A-nG*)%lCbV5FJIcr;lQ+hSLHca8KG9yjo0`J?Qk$5{3sa3QIu=S-nH8@V zM7NYrG@iPk7N=H(oGTP)-f*+q-y8=6qa*n5FMtV>R)Uv{fxb-8;ayuq`Sz58(ZUm+ zf}2!(?HPk<1Tr7Goq#DDGamJAPxG*nUrQDI8ScMFxSgm$pq%ALdp6D#HrcNWjf*>) z3cE^FA`xCi)LPgvWi%iKey0mz+wQFO!v1L@dUZ+Re3jGdG-UyQklO@w}e5^O>3Zdtdi814;&tCyo#* zk$=-jysjvPcZ5P!jZb!?=JYK{v8mSd<309Y&^}%QyM0%Ozih5B#E3YPl5U(FuV#N= znQ|{X$!WtcWwR}VbH>K-nhhePsuI)~f+I)nP*%icosqrWYsFjA2VR_evei!;l5}5q z*-pO052^S0-n*Lq4LD^xYfth2pdBU=V+Y<$F$<>zpe0@~*jIV`y}u%z#Q!VzH$$Vv zho%oSUGE&p$NN{&XiZ;Y@ssId>`)-T!mU{tJNubyEg%-QXPj6h(JBZ!gw=9hhR`Bz z(!nRFTE8}5v+hIlUfOW@{cu4tMN|?O&3}xkK3&q&M_8=&9RTxL4vEPj)ODn-eEG?c zdF4AOD{=5}AG}OHAx%)qP3|<-*Ub+C%@!PXJX7v^J8m~2V7{QaH8CI)%*`~FRZlu_ zPJ)F`t#PW!VcuGQX17xI>&!JI7%mp8HUXvYIQVM~z0Ee~QM&bN5Ufql-KT6JK^L9Q zv+7x~??Mc4;S|kk{IzB7)^SGdjht#w@6_whm zk+Rq7OYbiDi92aLeQL*CRVV6{*Tna4M8G;8wyZ{Nf{Tl~lJ`}^ zg}Qu!hyJpAU&p?m@NTHk4!uvMhv})piNk?m)pru9gGyo>mYfXy;ZLh1Q-}#JkxiIM zjF8^L6%-Tdg>+-2rEcZfFs+F!RAXnc3yRKF61A2=?eSV~l>;`Ok%qWR~ZvZhEbpp@cR*iPG2FT98ps8-k! z!8uTi8@2{@jGV=6rqKM^LD7cECSbg=U|>BP1<8cB%}IH)^Qp$5x&us6=KeX{3N51D z>r6YhR#a$fY6v;qypqJ)oTlNa6-r#t3_(3P_O!s?;zEO@v8=Drdv$fPWfxJe)*qb@ zA5mPJg>m@_f_O(VLEool^!X^mA@vvF^krLv%;mYsq-z+&?Ox4sFqDJ8{H?2KrTaT7 z5cfLz)vF3^7s+?lXYGsW`AmM(hWiH5s?zyoNmggJmg!qR$=av<0-Ihw`iI2Q^M)-T z==64hL{}yKila2kXQ+eCxL8qp-gAc-F~n};2lD8mB5NM%UzlG;IxNTK$#~fA0&L}D z5~NbX`LP$(wOPU+gbZ(Y*>k2CHvd1A*7mqy9?LYAN zL_t03TK{~qiRYv)f#ZMc`tW|2F=c&<)yB9&B!^a5!6*bhv8y_b(r4KMnipH4VY*1G*h#T( zUxDi{E=&iYa(44Nxux=D7{0ph&e&_|28_|op78=<;bj&HM(}^TkPUv~IV=hlNI60; z9Ka`VkPCOD0N>i^K5u~DL7R6?9K(NZc-|%6q~y__qL?7-_n;6t+f-dxVWXbRNk1jz z+#n;7W}&yhQm5V_>kYQk&kCx2?zjE2yc;Sgq837wuzDH`vwx)WxINb*094&}*OdWJTAL zq=I6M+gj`)>v~Rw;MFv;w7NC)e|_cq7_Z~apb#Cbz`-JOw7dt`MVP81|pNDkcz9r zLQ0J)ujpWGvnC>%*Q2g%=Mss;1N;O2v3XAs%l_8L`rWeLq?w%Dkjlw2@4Oj z1x_;_u`7|85ZDN;k6dPVee{Or<8FE@+lVXa&9_<(zL7cIOj2jltD7qTjG86x?gY6I zRq+R$ztwm^4N^RO;WPVk?=t)??DSrsJx*^euaw<(E_ODZS z0swy8GO}DDxTJNVEGjmKxLuaOZ|?&E-&|WK+Fmyd4uV9~)0|uFzf&ogSM`y64?T2I zldz4PGWZEhc<4)s2ZWk1g$*o-7rGaNiU9Z zi9=hT^RPj6{^)OwmNLO=+OoAG-E^X`fz!WOb&INMOE$yi@}0tgTH3Ohy64z8SenJa zLvl<>VVA%2OOc&I(!m6C``a2q1&_<^Qjb*53B~irj|CuN8RsEH@X*t52lhn#ot}#Nv7ztFdYO8)@$-XPyT$i?k@@&D!S?hIv}y5=Ck9 zZbH^_@t~3~SGsdcYh#x(-atAeM4cP$I_uvAza412YRlK&*atgkk1O2iC}mafRQ=WS z(#R8_%lth!p#d5uR2cIkwDKRKcnprjt9+{`aDq6h5*6$Hpouk*pUx5@)SP6Um2xOh zM`1!@-a9sB62x9GY*~z#py9?qyj*}PE`nG@xI^1*&0IZ;p>xLTLxnQs5}=zkXVZhB z;(KgT<-zZhUM!9sVEmy2{Z%xG?d{}v&XSfWPrlxaeQ=pM!Y8)^{H?zDSa5QvQGe?p zJA*;Ei4V

      Z>SXZivah(%2~d*iqMSSgoKX&x9K-#Kyf$!O+?o#^uQd#BLlmiH1}u zD=x9eDK`oA3%LrPYKp88dU|3_B~;J74-N_F74q>ShgkaEb7lc-$CLG}tB#>69y z&bmrNoT82&MHZZ=HtZ^L3QesT;@p2936{Rx6taPVBpYEAodd`&`SJv6u;uhcFTM^% z4tRm8xtp}yFE)J^E|>NBSE4iS4~Sz$z&OAy^b&_sgMf6Gl+nt7W22#^k&7<FbJ@00}uJ4K{bR#95H-xl?YhN1k+#f|brlPJJ z9r}_*3$3I9n{)r0m&Te|k0yaguZJhS83hgGE#jzx=EMfkkR#B0>YE_XMvb* z1Mtd;qSTocaBk=w4TCQ`x2-OR{8#6`?t&NlWmko3PY$!I!#8Y9>^tgm-JB`qhe>HU zOc9rxnjA5@*>uqr349ULPqyk?9mMjHT1CYfwdXESkn=e8_zm4`d1x~Zx+50Wkx#fM ztoV^Vo$#Di^bVcxPI577~*v>4>F}g9>$Mx|nt!&(%H9 zI6Af~_C=v9J~AL?(WFpr?}c`Lp%40o#LkE%;tIosR4jYO)B+(PD1EH?Reth)$&~*>MSD_FAuNlAT+D#RMjW zacSzM)nJ`{R@K0#ImLMZ62-J6PQFXdXm+b#KR;~2oUMWs7$auHwGYSzC>JeH95xD z8uR^Uy!$gP;;V&fh5S|U(88v>ulhhS-|4xreg-LN$fPrujo&=VEufyNe%vJuKn1zi z1V{315U@IO@sXb1a1g4OKsn?Yu&H)CYx7MXTrG3vn~11n{Q9eEi7@rQFO{Z ztM>FW{6*#Xbmb)Mm}l4l)||PzRa4Esn5~4+HxTB>wR^uUlfYZyVTW$b84*sDYYyu| zb!z@?$F#d6f?=3(z314?D@5+}|MXEJFLvOY*8~tvjGH!|4Nl>e<3pHR2UCcpi9T&3 zda=%lINGqCAw)eIf9va*7``vKVs$2a5ULg)XQm)v?L(UAOoHA6AlY-}dd`=B;ylTO zE=sgLWx&ULa6feETwg`jt)-A#jQqic!;cwSe~@hU5nfg(JE7o+`-}muqkoY>(|M5a zut_wf-drP>O`Bv2?fM8bt+YH89h)LFzFlet3{xtnWkW2I?3@G^GbfD4bmo4keLkl1 z+BQY?Q>y3HnCN7pgGF5SJ%JNwXv|97;i7!BhtST(fk^m~`8G*T3ePE@s2W^hWsP^@847;m?$%DzMSKYN_rI{ZoT*ZrdFgTTJfC?X@YQ9{}eyd_%r2V}RF! zC3{u!uvtfpa2}7A=O7zRPGl14rpj5jIaxJCfO~;QwPCiVE+nP6R)82T@~NPLx{6yV zN;8n|&;v%8H>6C}OjL|ou;s7y87xdSaICCreJ~|$zXe@Oa84yrG`dl_8i%K9^O%@;z~LT zE`8Wz*I4{c^=vbJoGBJK5=v+0{vMP2E@^sRsgNIaiqb^`I7~?{CE;^_yCCc~LpePm zdDHeK`R(Grc_{zg`yEPEdc4S|?(wL0Fq_7B%^2HQ7KBRQ@MNlRSB! z$1EDON`=KpDm#UIMtOwpu)6{~eoh|lm)`j5Bxv^YhrNj{2Ue9uK$_j-Pzv!$Z0|ls zRmigdaA<)Kq(&|I1NjB4z;8Dk&pJb*%#s!Pta*!O=)eGyRElQzXfM+tifC9uLaTQy zYtBUqO7d%^wukxC`&qTXLun(Zz81blUj^%oU*lUqET7G2|8COMvTw<%>aOlJSh$<6 zFjG3Rfjf4QRTuSJZtshWhtm+wO~&_VF%9h0Kr zZn9yygt*Y`RFr7_kVt9XE+3}}o=wG%Y`Mh%*eD(VI1F8g0iZ4j9dgJrV2#uJ;-l)_ zO=~O#Y}U+cIiI|a5PiID**+ZQ&N0+5im+5Ha|muro;GuQcSFOdFqCRi)2AdWmWan? zb?}bg@TJ}q%>u1ym7qQFFG$T@qUids64zwyGd>2KI!s~u`W!8T@;F6RY#ts%F&kHM zd;U1!x9;qfACgeK?Iu!bA-$`UB+9nGuxeE=N1I%et>lZ|Y?6sN_&QTyXK?$f!iVH+ zB7&@c3|%$}@Tr=-#fA>U1p}mEEKS8*67C2E4s|GGv)zYz-I{vhW+S^`h{o{4BB-gc z@E`abxyuOPNQCI+*kNRg-A;QVTT`K+~SBi{`sPb3#SCS z(;?wHk?Q!A!;7T83%P$Egv&k^1cF*#+oR>9*>CAMfL*M0K~ytq5zxDvI9? zy*flYz+X)tt-+lJ;`31%QVMEm9drvg=%*vZd;^z(oGJJig`>Ms1MoW>Q0Q)w@d)vX z$)*S#XD|CoY_*PWLuWqfbt}0;d`lNMw|TQoj_M-~692>yf6<6s1KC$v=8W_IwQSyg zgAStvTPfn1QO;AO`$<&QU^niK^d!y^Z>|kon7~wo3$_sOEzKfTm*;a`8Q_Q9G>EZO zF$i6B^v2AZmy)BE6z5-$S43m^h2F;=$9%k9d6F8BLXRn*!-HGR};`>SQU$yy2tsBx|tRnOy(tyXz;PVE`0T zU(`=9)ysB&%itdhBmSKb5skMjS_?$mj4l9}{HhW2D~>ZTn<6Fa{aPL9 zs@mc6jl}tcT{ZX3`Y#KHItPc2KjDm|;n*?pK818G33hM^>5OW&t+#*bQrCcKtW$N% zX^Yzk=+8olI*v;k+!7VYYw}=H#_Yk9ulE^w=Mj3=L~v#TOs2kw^j|V#NkN*-?7_s> z%k$38g(`+wE$Qu?Cl}4rbo9CjImVV0`;5zBMiK^&*y{{-H&898reW&BHTD#XP2xsf zja`LyKSz!t9kZDo4V@CL%*; z+qN2ILTOlV?Lkdmh19l(CTsnrRxLYF6rjv2ib=d=m7;b=uVfq^@ycw|Nt6 zt0qGJifD;FF$VmWyiZAVMNP1qFCL~C5hjh+5dbhFx9UX14-KK3^sz%bWQBqxGr6A-!NBkwyQ6`8^Ne@{@u<9$c{h zuH7PEn=8=vw#bR7A5iy}j5nOQH&$aRNP=w1`j-O%iUeL;!)dgp^)tC5j)7R;CQz!C zsOYTT!gZh4FPLw{QT(l+FFSjf(_1slUAj;%GpeBMfH$ax`8DVy@{dNQ8QGOj2ws_` z?NT+-j|TGOEy_O=f_uF58=xt%=x;bON;HC|q))vdS&KHjkSWK^MV=TDO>&W^sTp0J zDAG%NU=Y*j5VTg^)ienmeo1`~Q>Jo9+Oszs@kpXY=foHJEPm_8p&$k0 z(4^$`CD`2UcDf(`n8McUr*&h+7_1n$44?2uBYGl_%8Htw;|i0pp%jJ0vtjHRBX^b- zl=RDIBC1HAcrsav!}9p-{|VKbKHbiow}mj}j<)#7X65W03Xl z{W4kZgCz^S0EH9L_@l({LZgYZs3X+#*Y`GFdlXzm)RJU_DtE`|v%etqrLboAbQRP9&3gYf-re{*6Ld;{`2?M;eSvWT#AI*b&#; zl2UlPHRn&aW+5$FVYl4Xx(v}f7TA5$zwKnHlfIaUQnIAJOHyBEuTRSJTn~NlL(xMl z+?d`2@F)-15i_}5nqzNiOzZ^a<&Ja1(d_?&%cy3XC{`LIzi}%}I=_?XTr%aQ8Kn5c z^f+?whr}pI?=o0&GdbwtK_ohDc+Gg++XKC{)&&cyrFNnyF^BAnTT{|( zxjaUSP+b%HJ~m~_eemj!ls7~^>1bBX?t$p-r-d~b4x8;-O5oX3;#``R4Sg$ z6blOFGwU#(`Sxe*)7M;10a!FnAIm;yslPCHUk=5M+}Jp};-wVXPRm_)FW}*Lyd+So zX(KCgH^|_FR^4HgztkYR`zA;D9+}jx$uAy3NAt7uu|!T|F11!UlucGRelnqqOuInT z)PsH&e`J>DuoGS!mT_e$spa!tkR zV-F4j)1tP!Y)}|9+wW0}9XY|!u*Y&$O+k+Gn4zwk(%i-qYI>N91s-}ppE1|y^#yHO{lVw&JjYEv^B}Blhh*CZ=rMRY zYpkwXNU5K`QV{%N$?J;LXKyIWSP2U2$hx^v+ZnOaf5%=c=e|vy>|cYGc;8IkPEc>L zfzUsm{UwkFyYJ>FoYn-Kl6l~_J7whCN4?!V|K3U*5pEo)AlMryR;jaq#W6859_^82 z0RaWBs%&~qm-EqB~-vhg})ZL?wonbi)hwjiN=7W6Hg^6c>ZHRFSHvm6;hY4%!jXP zPd$X%#OFV*{t=rNJ)PVxnkN=%(v%p5k^cM&<3Av5Ja{?uq~Ff`WJP)pIv}ZK2Xmp= zKwD>v?ebu)m#fGq8X>z-Hid#;5E^NyR?A9%!iV)wI`Hn|0fjd(mX0e;@{#Q^=%z6B z2Vw8X(C@G)BiSa5u%~`N$W=E+7`@9$=90M1Z)HlXXtayePD_iCvMLtMYf(z$x#mjs z7D&D)P#A`Dx4jl!YK>kyfg)EdH@*b#cLJ{fSUGSNfBN`)fjz2r8({I@c3E4o+Po$M`ky=U|XaQ_JXD{I&ruJP}|@l_aO zA1O)1(?PUKg_p5EXkWxq;nR5KE3rlZmAtWPZ|z6FQ~(ju4t^B2$M+fJN>ykv(dLx$wN4tN1T@;n}NU~7m z!x0wtMo`7WbEQfbTi}Uv$Y4B_9j9ObH5LKjBeu^jGGHmAd+w&`g!7_pS|UiXF`E0n zI|H3~eus>_rQlBJ{|#(Ln%4g*r-FQ1ucHjJBhP7%dcPE3f9F=IH8^v?C;yMIV&*0- zdQa<-br@KjNbJTa4rA1?TUi!$vGoCyC+FJwqF}(#VH(8`2%MJPOuZreI3cU)8pmM2gJf8fEX`8r_#X?Gw zaSO)_p9)tzlw0)GD+j4$=gPB}1sNQcs6@>{7pP6WMm&d-G6s!?_m5xAD*1ajGuHFtgX1`Mz(tsu9o)7)F4Y(u?W z`-lFi2P`taoU`7DBN4ny^#_FCHED@zSFm1?NN7C2ku&xdxPk@>0H+$yU)#_WG|Lac zc7fvIk;{L-!&~j;&yeBC;>htOsqW9PeXz2a#I1i1K20O%7#o$xLn`|5sz_SMB$zKx zvkOTx1J>U|d}iMsYtU0Xo5f+4U7ai8%*oi4VdNgx|6^#L#hvp75Z62ts3r~(#iFC| z2US-C$MC$G+#~Rv{HM%c?LqLnGTeK7-M4?fn^1GiHhY&Y%5)lLHFsVKdlW-}!y9kn zkY}O*B4TD?#|r#TjtL(b=N0-u^r;mBtA49r%lU8C!qE-@1g0tXUdV|!#U#Soy76Aj zV(YCOL1SgKnf<$Kb#(Li7tC&SdO)f4({C7=lKtPrldEI5=7JSGtf|bKwIi}TITXn0 z_DWuPU27!+iYRw@7G}@$FrK1H#N`;TXh73FXQLRM2td)hfZX?r?6O&p6B`az#+$2} z`HE6%0pT)|ZqlzbJM1w+=RZE*7x$A=+~uU@)TAT9h&DnYYg@ij5#N2*5r#*e<_o9S ze!t4x2_%UsNo;M|e6{HK=l^q0JrD}iKIUwWwzw07eJ3a(mE*j+A#XT9P1xXRO7!(8 zOyvvIcz!B2)Gif0`^+Ly((Lw-fy z1%R%Kfo6*n>xmRd&L=v*y1ekm1&HO@FUuvf&XT`E$%UuFwK6jfHrbt<`oiIoWUDZu zAV+_l0m_x5uc$9VuWXSwVkh~aF|bKGztxzbE88ZsF7y^cOtld@pN_pT1tMd?7o})1Y*JIwdp7 zr^@D5QEHvF{K-nxH;7qCG;=6QXeR_eVzxx1E`_1JHbm~U1R$-^ZZ1@(HkqCvZ=Cak zHQT31Iey>`#&M^td{7(FNgT5*HmlI(PwF?eAwCj(v=#o&jv9NG+P758VLuk~^kR?Q zcRFn(vL_9ZJ;S1^rks-Ofg<9WOjPIN6LmUvz$5=2t>m%s^jG~oQ>F`8dc?EkI_i1$ zM-SJCzGT%jE;LL$7LsS5K-2@H=$Oer964lh8|PWzM9>(XO^vKv*k{v-U_}y*6`uu7 zb|vOAb+b;mY>nSdOf~1S$B}4cMMnr2uPfHvpQ->4xOU(Tg)yJ6?B_5jJ>W}oJDV89 z&yKB02*N;0xp0?5HV;u_2cjDjLd|RBmfiCzYOWY)^4n7U7&vaCsmJ?(*X$P!9btq49*p$>}OY?J+j;#S~%XJ$&KBzL^!R}$Wi znbNc~w3}1e{T#ShtEQQ8lj=Ke?ySm*ccLjD%hTAp0bSt9X;w&(noo-9#hG1yQAR#2 z|H&*Z_gpN_0oB!n?AHR3^1uQ1Z+wl)$4h-=OH6p1?~pstCpqTzV;Jy*YeBquI6zig zh~#;o4-VPD?&x3uvpNP^B~`GR0k6|0F~2T(2AWpK980$jWl7l455S%oW3|g(cYi4= zx_*1YnKNessVqhar@lQ?gW*Sc@A>Zy&lIC7W;H3;lw75UWP>f8qvQFV0r zGXOK|90(*lBnf4$#xt{b<3!V0L8V*>pMTjj`EqswO7V2U9KxO`GlHmI{*BEytnJMB z*BZe1dfeGv5)j`PP%zDx{Md-AIl<+t^c<`VMLt0{<{KG|LdwyUPicYo4bIxPK;07+ zBiG#jXYgH4SRT$l90k~5gBz{FIyX3qJAOA3O=owMj3$v!0=FF-ktjz7imLge zW&1T7T}PWrE13#lhWyR|>Lc>M)^D}8g842o`nzncQ=~-@xca4Hj(VLMIUP=_f?v*d z4>Hc3#Ikn#EyrzgZ1UBEL(@7a^9Um~Fw@?J8wz1qzO-W}yct|l;*Of^=|u6=ef|&T ztdtQ-91ZfBQrwF-;m{^Si^e|zSU^Wcy=hf0Km528$3Bb)Q!>>4fD4UNB1`;Zbv~&Z zu!tlI;y2Xo(|=SMQ`K%H>hFTgYIQNFc4+ELYt+Og>;wkezD{9LtLug467YF!V9J_q z^IA7EbB5BGr(?pQ>iUAo;)Br5?VG~n>V>=@4lKL=Mv+!Z8kFuDdVm3j9(u?bx*HLY4ncD0lfq-nmQ5UCcqv_w+ATt{>JcZ)&gK z8EiZl{k@AynvG7GjfKy~rOhYjUZfUWq!wOhATJOl*J*{9Sw)w~^4X}wshY-Fmz6Wb z{BFX^VOs7Qs&cPxY*lXc9<+{8S-bZMoA3>v3W%Hvj-CjEp~I6-A<0+K=~pr7*GW0o zvFTTFSr@4}6ZW%55i{EklN;%UCxOeyR?Fu(CA*dL$KopwuUGCJd`6x9$6Uc;;583;jI|W^mPu-BuKRlX!c=T_d$LL!0>RI)Fu^Te}Hf-s2VeNfk z=XYx7cVX{$i9ho|IQu|^z9*i2&@k%JGVL{UJu~+>|K@)zI(r2`KVZ*3;LKp~=O0uJ zyVX8-8#|wwxSpH2U3_)F0L(mK&tR1GyNsO9O$Wh;{4at)jxco%$ob-ZT5@ ztFq0zgUj}8LC{l%sJ=Ymero<~EYt*jfqKOhzq{dI@0R5XJx0#hkqy!2exrt^1E8-! z#rWYxtAB;SDaJn#9PAeo777XXjEaQDM8jg^;}R2+QX+y<;Th>!nTWKUJw#qgmcY4x!`B`w}>{Fu70roh=4aIKB)(m0UQ7(#4&2hKi~! zHL~6YV=pMVTK~yY@Z;1TaOD|8s^=&_nN75vDAB1=Ux=*Z)2%Qm3A>j{E}f}18_%6A zPTrrbaa`(2Qfc_M(ByHv<2EQ!VcZgcbI3%hSGm#_O2NlDM0dQ}8^b1%McP#TcQ8Uo zYq7McW^)Mf*5%oY=31Nn9E}prVTSXa>B_GSS^LfPdvlF0<5R=0&JPybgGnyc?i!9) z`V#nzf8TkYZr10hco<3Fob94(?3TV~ws`C;{n90P+17e}x;37lJJR;!_VTEuB39#P z+x_j;>F&}8p@Vx3D%!SX8ZF*~VvCWu==&P;7N2JwCP!nl9s_z- zv>vZ|Luj6$&dI}(_(4bMZ<3y6(cfeZgBgw#lQ5nQxVgWLWvX>y(MFf!AFrdlU65=Uxm}p% zzO#+=41 zRlS@g_EkdyyY@As&u>d>$93$!VQSH{#rt*h?z`XWm%pp*H>@YyeQ(@~;X7#BE8qRz za@51;(0tZba?pCUSmMxjcd_g618`_}_!F1H-m!y_B;%-)RO0E;F9JUPs$bNKpO3p~ ztf0p|RCe=1y(|Iz&VB4YpHKQZkQZ`=V}A&$!I(_h+kpw`mi_`*XBeirU4DVS1)J z+CFdJea@kT%wyheTJ3VddGqz7^Fiy{ z;_YEA&P(5;uG=?v$30xJcPA|(hrY+7Z(sVIjq6tUo=#cC{ z<9aK*!vAW!VWjQ$s6wOd?s&u)b9=cN`}5&$?l1rY$TtQMG`_`Vs00(JA^=bN+A(5B zfrKFlTsB|_vA}2`%@6`#0whcBT^YGh2(DqDn5{<94 zBh*j%Ueb{1%g%(2W4LW6jo}*O>ovB7>Jf;&zmH44J%jI}LE6wH-Hn`WpEzg;+a27Ao4NB4O@Kc5813Y5{KlA^Kd}c);Yt>1UDF|PQm})vv@{QAe4~oF;ftUrp*$P9ru!fn=g+99g z=EdHj&DorAa-3N_-&!`VsG>ix=SR|T60O^-2ydsyMeTF0CC_YYuEkL>h|sHZDl7eU zn%CZ*bkuU*=G5p3)Q7=o_xrx4TZ((cM#lU})n@c)fxd4ed0D zew<@DP@omHaE&T&QHZb#{>5-J&D4c&g{<&2rMDL`5^w3pxE4H%N-3K@k3`j}cEYWy z^94xCqk-(#Wd?66EtZqD(it_^qjB;K$&wU|6;jw=Q zFJ65F%JN3OtpsBw{6~yQWhf<=gWrC;f~1Lp{$(-u7(D6@L_x2;?0_Wz`v_0F@QehN#Etc-RUSnwg&{1{spr7+vg#nAV&q` zbGl4$==Zk^Qznj&rpUe>=nZGSzdh=WZQ7giIFv?B>Z;1)J#Bp1h5_7VpAATe-}-5| z4V?C_VRQe)m(uh<+hxEkHnh24tps9ABk)D~WHFB%KYmO{+=4cRaNLhV=;Tb#%($3} z>nOYleFh#rqTb<89fdGMXGwx}Wk-%;!X*BQu}^R3T?Yx^d59@Rppz`4ln_L79zlg{ z=o))*6!2`+_;Gk&H@Ek(o4oxzO?FBoMu=%S!ul?kVVthVQtSg*qk8B`3#eCW*2(26 zc#=G+uZte;7!5Z6%JK-*U2y*)GNB|ldJNe2N=i8RQ$}Xb(MA{Uv(32Zp?sD{l0Uau zIsG!8en}=TQc_K;j;c-%q}b$sE14{unC@%AGv}%FG0a)WO1eP6LvpaYK=^Z&j|sgo zjt5zO&v^C3}JG>+_OkzY|oH>SR>=HZTz*;7XzJ+G_Evf1vO|G=b`e z;oH{+DhPwRLjB?Qp9nyo!o0OnRs~4jzy00Py!J)LKXyJ8@Jv+|$FgZBl^7N9f+wFQ zI3;}IWm`+rq`!I+3B)s1rb%l0A*B;c&B95B)gld_NvfP&FOE!9(${!>S{>VMs~;t$ z@0c}MZPU$<_rhi>CvA`UR`r{;JeMS!tu{QffbR5@o!YRGGfIYp;guENY@0htbe`Y- zGp{J+aU-r`)1tZyzQg!vsL__kUmot`9dW9SA zqHhUJTzhvF50zcv#D@D?f5HrIgFMu3>e7cl@1S9v9yQAOc5{s?CYQFlVbb%3$GCik zdg^ZRmm>W8<_xMn40;_mIDbPWr17B#&Y1)UUvD2&R`vFEkQsye6b3_DbgC8blNb4B zHvC^Y>&Cm@erJfCeubSzPfzjcS#^BM&^qU<>we9c>O`dKUtYuO0lnYV|E}}D0zULs z6za31Jwp;i8chzTbyG|rUbHy!v8APvv!9(I7Wka3j{;SOb24P*c0=Di&2*A+sk(J9 z5M5QeSCdOrxuqa-^M^YIb2^7jX$WF$A60Iu$s-!xR`GrS(NMMc zEbjl7sP^DJw3znde%ad4Mj+s*j*%+t49zV6Q?hDBb+>XAbJfxWJMwxDoW~n!>?!(k zz{V>*V@m$AOHtrBe)smryK(VSE45K&hr7Rm)1JK+(8Igwb#z78mB*CFd^B zq41bf-_zEYBpL3_m{>#C%vV3QaS1-xe#x?Tpt|4D8}Wu>37owiPtW}n(2UM`b5UMn zkiUT6GV{&vg-87TzCpN8&XRBTL3R4Ryqo9D-?q!PCBI#R^Xo>fJ-maS%tOfAyLl`! zGg^|xS>S&05?A)sfJ(-(M#)@SD$>IdheTY_=3SPSreBsnFUE?LZ>F>!&OdnE zuD>1eo}M#0YozsCpYgt3{Pl3z#>LwFk@;?(5p(s_L7EPT6 zJRq5WmT|av>hfch6a(<-ypJpc)+E58R`!_9fO|zBTP|?d1;gAWn9kFW816(045Wky z%1;N@wFhL;IyhK(5Ws_Ay#@_Wd_p9YS*`+iE`wAaIr3e(HH3NdHU=ki2C;3ql3sF= za|a7SzKiMwPo-F~>gsRw2A}ns1syqk33v9Evtb8?==E7Y*7KRZ^nZQnsgCkd?9)=9 z)i(*VmM8RmLr7gM;RLj{8cPl_Mcb*+fxqjCWpnuJUwH$7&n9U?v`)=jxWOHW@VVq~ zBDLWT4Ph%1o@W+B-+&O3UPy;i=%+0)CwLfNiu;~K1m_imn>*qcjoCxJ|D8o>7z*xryg16Bcjtb5=5(g{@M zgg9NQ1PHrmCWps0y3jp=I?IXZi(CHHa)uK4vz=Nvn?nC;$Haw1uX2aH39}sOirD5B z1&M3Tx|%OP#{Ta#1P37Y9|Ios&wwui0Qi{pwEr6IzI^BYQaoJ1mR4}l$1*fZe0=Yp z(XRA_md3x^3JV+h?$huu?@CpSiyYq(EFaurz!qdg)?AMX10&2F9|sdN62)01B*w=E zhkHk+XJpD@5nHq5vD#)K-#Zb+B;@A*8+ue*!E9-$QBBRp^f*=4k6Qw@sAGOs_w^4{ zu*cPVb^d9lC+jWn8T-~9J2kktR8>oyN;9(&@yM#Te$%7@wy=D1I`lhy|LQ9t;{wr# zYZU=&I_e69toOayJWiirf2i&KfS71dIAdoN-KH3uMAZtF+hEV}_Lf{w1(aLM->xUd z{1q8XN>j!=P{DBefI6ggS(pKg(d1KVdj+ZCR!AoC@y?~ungND=Abc#QeExjQMEQwO z(&iuY@gkEFnrK%(K7{KD1K{pTyVS5sw+YViRe0YZ%HcGu&Ol}LvyoWv>TRQLg=r$A z;)8azSlMTnN8o2!s*2aCPxJsq4~*McIj^z%gyBUaEJ3dLM%= z5rvOE#wWs-LzfFo`#JjcKVl#OL!L;cF!p3%vJZX`DmQ|^9G+&j`D1z&D*9YhQGjw! zA}vbn0zLdKU9>O-DCB6e9{1EyBsW%d3`bVr-N{uB_WDXyZxVDJo{^~LtdzuqB&}T! zfIWqU0RyVm6P||qM6lT3O0}sf2{%+FCY#Y;L6|vjVM}+S+ zn~47C$uO{)Q}KbWForiGBpsaa@rEN2T7HFc{Gc>jgq$K>p7}^4x`{$~wz7wope*4_ z1-!*O(+19B-a8dUi_MAV<^o(3RNZg`JM9R3a9;IKs4b0mt$-c;?S7~v%ezX;TiyCe z1H+`kkq4_nn;;oJO!=1^)~UzMihC3G_!sQ-*(4+Z*Rp$8^u^DfCnxp>A@N>lbG{|l2M&1 z7-Uin{}B|Cz|U&zw~cK{$Q5|h6<-y@%=m=QTbGQb+21m21{CcGtqjVEDsSG{`ny6H zo+5)Hnk|`rgL#qMsP+B!p!M?L_OPAc<=s⁢5}MA6LcQ$&ke1KclVq^8Rc>*WuqF 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%0D)eIFhoWD1*2 zhn}O4*^&{=KV#PPG0yyQHr>zk;!ruxzrhq1!p1-iFxJ2W&ax0khC8{znGwkUT|O`; zo>8%bWZWwf4(h@@*uu0hCo%zam>XhgD~RuRfJWPRF2ICz<2hNow(S`2b}JKyrn4vb zT>!zGfGnp}{)>6QU~)2BkD}^s6`vE%lkX1bcvv>p*7nI%gsjwh6o+xdAt`Z+fH}9< z%LFbdzp3L*c(V+y(~)n`kw^~$d`&bZN1LJQhEQ<91u>$qBp7pHf=LA|N_pN90neLL zlSE7w@hyo8=_wlbe_C5b$4VFCT&&F_-wXiQn_r;EY_ogPTP&H&HZR|L0LAEc z^}5XQ3DWfix7SL4S9LR%lg|fSW6oh+-{g{D^V(n~>goVx+T;F;K;)$NNw^a0UGRnA zP#R0z6(@Xve-tjAZYhpeke`P(y$+(}z{l5lJ+pMhKlXvJHlUU?SFk$<8~Jrgdgeo( z%lrecxB0GFDpb~_)uv3-)HC)6<2ege0z8wtpf0e;CcM=FCL5N_V8n%fCcvUh`m1Vg zZDA@^{jH7w59v&{eo1$xZ$lC^kU4*kYqru2UUqVU^l_<@JkKY21^yrC6u>bt@GN}& za^x-KI_o_}Kfuyz{=C?RUt|Xb!_7s7sEaStqc(>1QCLFhQ4lPH_Ho*K<@k$fj_Ow1 zZJcj^pvBk^OMvQ7R}C{Jn_sdXXS_#zgYEp=+76wvwx0UIwS5E>d|ywvYCAyO%~tGy zHRKGM4rY8fdw)uC{4JkzR>POMmK&UAYI;%>zN!KGU9*Gj`14 zqOhB9Z5A|g;mQ{jBbl>{Th`-WEiyI?DNlo8-^kW{qS0IDCRX)c-l4j#Y5A>NzxYHV zKO`B0)BjGK$U3ZZX!gXnAA^xU6S{^^ocfwQTXCxF@b37`%?Wn)w;#!B|D~4Q?){1y z1ntGD&7$yVTq%;P6d44d|KOOhH+R5g6>-fgI)C3?;GR2B{UN8mzw-67E`zK=|J~Vj z+kpn1!%c}?{^5Ul=iV2X{(B2&)@Di9r)(DN_F|i*)@aBDhAwS8r}@8AGrv*~-rto- z1v@b*fm2_BG4q2Uwg_1VU~# zY*_(QMq;d(BR_|3{?lBt*wR~VXx@DiIcxFypXfh~vCDLW&8_${dTxO zwDoV)t-~X7NSOVM>Gs3U>ScUtTW9*hAR0 zmv5e30kw~_=Uu;Ly1`2?e%5VRo{^X`w)zvDwNiTOKYLd2<4R~2ecxqbri#wt00#aQ zhl`%vX;oY9d%u|Eq9DiMTD`m$CxOkFvk&cEDo3c^1G~> zHSxt0v|eTnW81FbFC#RtjsSg5vT5P^i(egve_�PloN`*5p2MOFfR?|)2YW@e$K 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�bL#7<3Cc`437$PzLS(PFrvI#` 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 YOa?JM5by8^bx;Pho&unwDFFchJIwRIod5s; diff --git a/pr-preview/pr-1594/img/docusaurus.png b/pr-preview/pr-1594/img/docusaurus.png deleted file mode 100644 index f458149e3c8f53335f28fbc162ae67f55575c881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5142 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 F{0H{b<4^zq diff --git a/pr-preview/pr-1594/img/estuary-new.png b/pr-preview/pr-1594/img/estuary-new.png deleted file mode 100644 index 60a65182b0f30e5eed565fd29f0c75c96a5f4cc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21498 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 diff --git a/pr-preview/pr-1594/img/favicon-2.ico b/pr-preview/pr-1594/img/favicon-2.ico deleted file mode 100644 index c74b0cb6b3b099693b8a8b3f7e226f5b2c65bdde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 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 JPDHLkV1o1w=f3~| diff --git a/pr-preview/pr-1594/img/logo.svg b/pr-preview/pr-1594/img/logo.svg deleted file mode 100644 index 9db6d0d066..0000000000 --- a/pr-preview/pr-1594/img/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pr-preview/pr-1594/img/undraw_docusaurus_mountain.svg b/pr-preview/pr-1594/img/undraw_docusaurus_mountain.svg deleted file mode 100644 index 431cef2f7f..0000000000 --- a/pr-preview/pr-1594/img/undraw_docusaurus_mountain.svg +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pr-preview/pr-1594/img/undraw_docusaurus_react.svg b/pr-preview/pr-1594/img/undraw_docusaurus_react.svg deleted file mode 100644 index e417050433..0000000000 --- a/pr-preview/pr-1594/img/undraw_docusaurus_react.svg +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pr-preview/pr-1594/img/undraw_docusaurus_tree.svg b/pr-preview/pr-1594/img/undraw_docusaurus_tree.svg deleted file mode 100644 index a05cc03dda..0000000000 --- a/pr-preview/pr-1594/img/undraw_docusaurus_tree.svg +++ /dev/null @@ -1 +0,0 @@ -docu_tree \ No newline at end of file diff --git a/pr-preview/pr-1594/index.html b/pr-preview/pr-1594/index.html deleted file mode 100644 index 5e6f1505ec..0000000000 --- a/pr-preview/pr-1594/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - -Flow documentation | Estuary Flow - - - - - - - - - -

      Flow documentation

      -

      Estuary Flow is a data movement and transformation platform for the whole data team.

      -

      With Flow, you build, test, and evolve streaming pipelines (called data flows in the Flow ecosystem) that continuously move data across all of your systems with optional in-flight transformations.

      -

      You work with Flow through its intuitive web application or using the command line interface. -Business users and analysts can configure data flows to connect disparate systems in minutes, -and engineers can then refine those data flows, troubleshoot, and configure complex transformations in their preferred environment.

      -

      Quick start

      -

      Want to get up and running ASAP?

      -

      Use the web app to sign up. (You start for free.)

      -

      See the get started documentation.

      -

      Wondering if Flow is right for you?

      -

      If you're unsure if Flow is the right solution for your data integration needs, you can read about the technical benefits and clear comparisons with similar systems that may be familiar to you.

      - -

      Looking to understand the concepts behind Flow at a deeper level?

      -

      We recommend starting with a tutorial or guide to get acquainted with basic Flow concepts in action. -After that, read the Concepts to go deeper.

      -

      Real-time data and Flow

      -

      Flow synchronizes your systems – SaaS, databases, streaming, and more – around the same datasets, which it stores in the cloud and updates in milliseconds. It combines the easy cross-system integration of an ELT tool and a flexible streaming backbone, -all while remaining aware of your data's complete history.

      -

      A few examples of what you can do with Flow:

      -
        -
      • Perform change data capture from MySQL tables into PostgreSQL or a cloud analytics warehouse
      • -
      • Fetch, transform, and load logs from cloud delivery networks (CDNs) into Elasticsearch or BigQuery
      • -
      • Instrument real-time analytics over your business events, accessible from current tools like PostgreSQL or even Google Sheets
      • -
      • Capture and organize your data from your SaaS vendors (like Hubspot or Facebook), into a Parquet data lake
      • -
      -

      Under the hood, Flow comprises cloud-native streaming infrastructure, a powerful runtime for data processing, -and an open-source ecosystem of pluggable connectors for integrating your existing data systems.

      -
      -

      Other resources

      -
        -
      • Our website offers general information about Flow, Estuary, and how we fit into the data infrastructure landscape.
      • -
      • Our source code lives on GitHub.
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/lunr-index-1724944510578.json b/pr-preview/pr-1594/lunr-index-1724944510578.json deleted file mode 100644 index 7a21a1c599..0000000000 --- a/pr-preview/pr-1594/lunr-index-1724944510578.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,1221.28]],["content/0",[]],["keywords/0",[]],["title/1",[1,390.556]],["content/1",[0,14.879,2,1.149,3,3.413,4,5.888,5,9.685,6,7.473,7,6.54,8,3.993,9,7.108,10,9.685,11,3.009,12,9.685,13,2.443,14,3.831,15,6.714,16,1.595,17,15.768,18,2.468,19,3.732,20,3.674,21,10.224,22,1.864,23,9.731,24,4.966,25,3.133,26,11.042,27,11.042,28,19.172,29,6.855,30,6.751,31,5.457,32,11.042,33,6.636,34,12.119,35,7.303,36,6.228,37,7.926,38,11.042,39,6.636,40,7.019,41,5.476,42,7.672,43,4.252,44,12.342,45,11.042,46,9.685,47,4.995,48,12.413,49,2.841,50,11.042,51,11.042,52,4.477,53,8.961,54,6.272,55,8.264,56,9.685,57,6.444,58,11.042,59,8.469,60,6.167,61,3.855,62,4.568]],["keywords/1",[]],["title/2",[63,1009.408,64,639.394]],["content/2",[0,14.636,1,4.043,2,1.325,3,3.644,13,4.989,18,2.846,25,5.091,49,3.276,63,17.408,64,12.622,65,8.156,66,2.812,67,6.067,68,6.134,69,5.006,70,5.123,71,5.523,72,8.095,73,6.206,74,9.326,75,7.432,76,19.292,77,13.694,78,6.945,79,3.437,80,9.763,81,15.736,82,14.636,83,6.999,84,12.734,85,10.335,86,5.847,87,5.29,88,7.654,89,2.744,90,11.17,91,12.734,92,5.678,93,8.973,94,8.545,95,9.531,96,12.734,97,5.678,98,7.906,99,12.734]],["keywords/2",[]],["title/3",[17,924.895,24,357.029]],["content/3",[0,11.821,2,1.206,6,10.581,17,13.229,21,10.733,22,1.127,23,10.082,24,6.191,34,8.676,43,4.405,47,5.244,49,5.072,59,7.41,61,5.857,62,4.796,63,8.489,64,10.023,65,5.27,70,4.664,79,3.129,100,7.667,101,9.745,102,6.274,103,5.005,104,10.733,105,7.369,106,4.219,107,6.052,108,5.715,109,6.765,110,5.434,111,8.489,112,3.879,113,2.729,114,10.168,115,4.32,116,9.79,117,11.592,118,8.887,119,6.703,120,8.832,121,16.775,122,11.592,123,7.782,124,11.592,125,16.775,126,11.592,127,2.829,128,10.415,129,11.592,130,5.219,131,11.592,132,13.615,133,16.775,134,11.592,135,10.733,136,4.475,137,8.881,138,11.592,139,5.323,140,10.168,141,9.745,142,11.592,143,11.592,144,8.489,145,5.405,146,5.971,147,6.227,148,9.408,149,9.127]],["keywords/3",[]],["title/4",[148,1118.642,149,1085.254]],["content/4",[2,1.325,3,2.899,15,3.169,17,8.545,22,1.238,24,5.38,59,5.625,61,4.446,64,5.907,70,5.123,89,2.744,116,7.432,120,5.705,123,5.907,128,7.906,135,11.791,145,5.938,146,6.56,147,11.157,148,18.301,149,10.027,150,11.791,151,10.027,152,6.892,153,12.734,154,8.307,155,5.026,156,8.677,157,10.335,158,9.326,159,10.027,160,5.969,161,4.952,162,5.269,163,4.237,164,11.791,165,9.763,166,7.577,167,7.363,168,3.622,169,12.734,170,10.335,171,11.17,172,4.746,173,8.461,174,7.234,175,6.945,176,10.027,177,17.94,178,12.224,179,9.366,180,6.169,181,5.335,182,11.17,183,10.706,184,12.734,185,4.446,186,5.582,187,10.706,188,8.307,189,9.531,190,10.027,191,7.503,192,6.316,193,9.326,194,8.307,195,1.745]],["keywords/4",[]],["title/5",[196,534.023,197,782.945]],["content/5",[]],["keywords/5",[]],["title/6",[196,671.515]],["content/6",[2,2.485,3,3.604,22,1.914,49,3.749,64,6.758,65,6.623,78,10.736,103,8.5,113,3.429,130,6.559,155,5.75,160,10.452,186,4.533,195,2.697,196,9.664,198,6.656,199,8.584,200,11.824,201,12.248,202,10.09,203,13.49,204,13.49,205,6.83,206,6.028,207,6.235,208,8.145,209,11.832,210,12.779,211,8.848,212,9.503,213,8.944,214,6.941,215,9.635,216,8.282,217,7.606,218,8.944,219,6.591,220,6.182,221,7.315,222,2.312,223,3.191,224,1.655]],["keywords/6",[]],["title/7",[196,534.023,225,663.969]],["content/7",[2,1.419,3,3.04,4,7.268,15,3.392,18,3.046,31,3.523,33,8.192,49,3.507,70,5.484,196,9.441,207,5.833,208,5.639,209,8.192,216,9.061,217,9.821,223,2.985,224,1.548,225,12.137,226,3.071,227,6.048,228,6.449,229,5.71,230,4.616,231,8.599,232,8.192,233,13.63,234,12.62,235,7.021,236,13.63,237,5.911,238,7.551,239,13.63,240,12.62,241,5.663,242,9.287,243,13.63,244,6.259,245,15.814,246,7.613,247,13.63,248,11.459,249,11.955,250,7.613,251,4.066,252,13.63,253,10.449,254,6.801,255,7.742,256,13.63,257,11.459,258,2.72]],["keywords/7",[]],["title/8",[197,984.527]],["content/8",[2,2.111,3,3.279,19,2.812,22,1.972,43,3.203,49,5.22,64,5.66,65,5.546,69,3.404,72,7.756,74,12.745,79,5.476,97,5.44,103,5.268,113,2.872,130,5.492,160,9.51,168,2.463,186,3.796,191,7.188,195,3.204,197,6.93,198,5.574,199,7.188,200,9.902,201,10.257,202,8.449,207,7.448,216,10.23,218,7.49,219,5.519,220,7.384,222,2.761,223,2.672,228,3.388,251,3.64,259,16.197,260,12.2,261,4.531,262,5.268,263,5.343,264,10.701,265,7.12,266,5.812,267,7.854,268,4.547,269,8.597,270,5.444,271,12.2,272,6.243,273,8.069,274,6.414,275,7.49,276,8.187,277,2.572,278,12.2,279,4.012,280,12.2,281,2.812,282,2.32]],["keywords/8",[]],["title/9",[196,443.265,197,649.882,283,429.303]],["content/9",[89,4.79,196,8.611,197,12.625,283,8.34,284,6.682]],["keywords/9",[]],["title/10",[11,375.556,285,887.311]],["content/10",[]],["keywords/10",[]],["title/11",[286,1163.024]],["content/11",[1,1.861,2,2.184,3,4.067,8,5.801,11,4.955,13,1.827,22,0.803,43,2.168,49,2.125,64,6.023,65,5.902,73,5.549,97,5.789,102,7.026,103,3.566,106,3.006,128,5.127,168,2.621,186,4.991,195,3.4,218,5.07,220,3.504,222,3.484,223,4.597,231,6.405,237,3.582,251,6.55,255,11.23,261,3.067,263,2.535,268,3.078,277,2.737,285,5.316,287,3.534,288,4.282,289,3.792,290,3.55,291,5.759,292,8.258,293,4.612,294,5.187,295,4.312,296,3.247,297,3.489,298,4.199,299,5.819,300,5.387,301,7.244,302,6.181,303,3.534,304,5.316,305,6.048,306,8.258,307,6.122,308,8.258,309,6.702,310,6.702,311,8.258,312,3.534,313,6.048,314,8.258,315,13.487,316,3.235,317,5.719,318,9.148,319,5.627,320,6.439,321,6.219,322,6.502,323,5.127,324,4.047,325,3.956,326,4.913,327,5.316,328,7.647,329,3.211,330,2.788,331,8.991,332,5.187,333,5.387,334,3.403,335,1.861,336,8.258,337,7.647,338,4.312,339,5.25,340,3.571,341,9.508,342,8.258,343,3.067,344,7.244,345,3.582,346,8.258,347,2.976,348,4.404,349,4.819,350,5.462,351,4.775,352,2.384]],["keywords/11",[]],["title/12",[22,134.003,285,887.311]],["content/12",[1,3.599,2,2.178,3,3.382,11,4.351,25,4.532,185,5.575,195,2.188,222,2.534,231,6.375,237,6.926,251,6.963,261,7.772,285,13.471,291,4.382,298,8.119,331,11.06,341,11.695,351,13.496,353,9.804,354,3.94,355,4.109,356,9.071,357,7.486,358,9.151,359,6.865,360,7.155,361,9.501,362,12.709,363,8.226,364,8.994,365,10.562,366,10.281,367,6.056,368,5.813,369,8.395,370,7.155,371,15.969]],["keywords/12",[]],["title/13",[11,375.556,285,887.311]],["content/13",[1,1.929,2,2.093,3,3.444,11,2.333,13,1.894,25,2.43,30,2.738,43,2.248,64,3.972,65,3.892,66,4.44,69,5.175,89,1.845,113,3.865,128,8.292,136,3.305,161,5.194,168,2.697,195,2.25,214,4.079,220,5.667,222,1.359,223,4.405,229,3.587,231,3.418,237,8.044,251,5.533,255,9.327,258,1.709,261,3.18,270,4.178,277,1.805,283,5.012,285,15.23,290,3.681,291,5.519,296,3.367,303,5.716,307,2.882,324,4.196,326,5.094,329,3.33,330,2.891,334,3.528,335,1.929,347,3.086,354,2.113,355,2.203,363,4.41,366,10.571,368,3.117,372,5.725,373,6.146,374,3.169,375,4.706,376,6.949,377,6.835,378,6.033,379,5.746,380,8.027,381,5.094,382,4.634,383,4.706,384,5.512,385,2.808,386,4.221,387,4.148,388,6.742,389,4.533,390,8.562,391,5.256,392,5.378,393,8.562,394,3.836,395,7.198,396,3.557,397,3.469,398,12.29,399,3.354,400,5.667,401,8.091,402,10.239,403,7.51,404,5.594,405,4.951,406,6.742,407,7.928,408,3.649,409,4.634,410,5.146,411,4.533,412,7.928,413,3.952,414,8.962,415,4.599,416,4.44,417,4.822,418,6.742,419,8.562]],["keywords/13",[]],["title/14",[11,266.446,251,291.737,351,565.432,377,500.408]],["content/14",[3,3.951,11,5.576,13,4.843,14,7.965,15,5.094,18,3.451,19,4.718,20,3.445,43,4.848,52,8.299,64,4.803,65,4.707,69,2.889,113,3.634,119,5.987,127,2.527,139,4.754,168,4.42,220,4.393,222,2.45,223,4.482,251,6.849,255,8.77,277,2.183,282,1.969,285,6.665,291,2.841,324,5.074,335,3.479,351,8.927,357,8.654,372,4.765,377,5.298,383,5.69,404,5.26,406,8.152,420,7.582,421,5.736,422,3.187,423,5.987,424,5.881,425,17.236,426,3.019,427,5.601,428,5.715,429,6.428,430,5.831,431,10.354,432,8.271,433,9.587,434,5.198,435,5.264,436,7.749,437,7.901,438,6.428,439,8.174,440,4.011,441,8.152,442,7.749,443,6.042,444,7.582,445,3.17,446,10.354]],["keywords/14",[]],["title/15",[447,686.675]],["content/15",[]],["keywords/15",[]],["title/16",[64,639.394,65,626.598]],["content/16",[0,7.744,2,1.144,3,2.608,4,5.86,11,2.994,13,2.431,15,2.735,17,7.374,22,1.068,24,4.18,25,3.119,43,2.886,49,2.828,59,8.445,61,5.633,63,14.002,64,12.275,65,10.201,66,2.426,79,5.687,85,8.919,88,6.605,89,3.477,152,5.948,155,4.338,250,6.138,254,5.483,270,3.438,284,3.304,293,6.138,295,5.738,345,4.766,447,7.575,448,3.825,449,7.611,450,9.639,451,9.639,452,6.475,453,10.99,454,10.99,455,5.777,456,16.074,457,8.566,458,8.445,459,13.565,460,10.99,461,8.604,462,10.99,463,7.374,464,2.753,465,6.343,466,6.605,467,4.456,468,6.605,469,4.054,470,10.99,471,10.176,472,10.99,473,10.99,474,10.99,475,10.99,476,10.99,477,8.425,478,10.99,479,10.99,480,10.99,481,6.747,482,10.99,483,8.048,484,10.99,485,7.03,486,10.99,487,10.99]],["keywords/16",[]],["title/17",[64,639.394,488,939.177]],["content/17",[2,1.685,3,2.617,15,6.657,19,3.732,20,5.387,31,4.185,64,12.408,71,4.789,79,2.981,115,4.115,181,4.626,185,5.653,186,5.965,191,6.505,223,3.546,227,3.55,263,7.214,268,6.034,277,2.328,321,5.289,334,4.55,340,2.458,375,8.899,452,6.505,456,9.283,459,13.612,461,8.634,464,4.057,465,7.005,485,4.811,488,13.064,489,5.204,490,3.081,491,6.935,492,7.926,493,8.634,494,10.95,495,5.973,496,10.224,497,11.042,498,8.264,499,11.042,500,9.283,501,11.042,502,11.042,503,14.758,504,5.544,505,5.614,506,11.042,507,11.042,508,11.042,509,6.505,510,10.224]],["keywords/17",[]],["title/18",[216,579.843,217,719.607]],["content/18",[]],["keywords/18",[]],["title/19",[93,971.224,217,719.607]],["content/19",[18,5.097,66,3.364,67,7.259,68,7.34,69,4.251,74,11.159,78,8.309,87,6.33,93,17.844,110,7.143,216,10.23,217,13.877,279,5.011,290,6.55,340,3.392,387,7.382,388,11.997,396,6.33,410,9.158,495,5.621,511,7.299,512,8.246,513,6.465,514,11.159,515,7.797,516,8.51,517,11.997,518,5.925,519,8.374,520,12.07,521,14.109,522,9.686,523,11.405,524,12.81,525,10.938,526,4.324,527,7.901]],["keywords/19",[]],["title/20",[262,748.351]],["content/20",[2,1.189,3,1.846,4,6.09,16,1.65,22,1.11,33,6.864,36,4.393,39,6.864,44,14.672,49,2.939,69,5.454,72,7.261,79,3.083,89,3.577,168,2.306,191,6.729,195,2.274,216,6.982,217,8.665,223,2.501,226,2.574,229,8.189,258,3.312,262,11.387,270,3.573,277,2.408,290,4.91,307,3.845,316,4.474,330,3.856,356,12.947,368,4.157,369,6.004,384,10.684,387,5.533,396,4.745,404,3.891,422,3.516,449,13.538,495,7.211,511,5.471,528,7.45,529,6.936,530,6.665,531,7.664,532,6.327,533,5.218,534,10.018,535,11.421,536,7.261,537,8.199,538,7.261,539,8.048,540,5.533,541,5.923,542,8.915,543,10.575,544,5.845,545,7.664,546,6.55,547,5.883,548,9.602,549,7.261,550,7.78,551,4.631,552,5.883,553,8.048,554,7.782,555,9.602]],["keywords/20",[]],["title/21",[196,534.023,212,899.071]],["content/21",[0,12.941,3,2.968,7,5.318,16,1.903,22,1.28,59,8.112,61,4.597,62,5.448,100,13.986,103,9.131,186,5.714,195,2.516,196,8.194,212,13.795,213,11.274,214,6.273,216,9.626,217,9.588,221,9.22,222,2.089,224,1.496,258,3.665,262,5.685,268,6.844,277,3.872,291,3.613,400,7.792,464,3.299,540,6.379,556,5.736,557,8.075,558,10.686,559,15.591,560,13.167,561,8.476,562,8.708,563,7.613,564,12.146,565,13.167,566,13.167,567,13.167,568,5.028,569,6.828,570,8.708,571,9.452,572,7.997,573,8.174,574,5.986,575,3.159]],["keywords/21",[]],["title/22",[227,557.255]],["content/22",[]],["keywords/22",[]],["title/23",[2,143.445,195,188.839]],["content/23",[2,2.178,3,2.581,19,3.681,49,4.109,66,3.526,89,3.442,195,2.867,222,2.534,227,5.135,294,10.03,304,13.471,305,15.325,309,12.961,310,12.961,332,10.03,375,12.828,468,9.598,494,8.281,576,12.243,577,11.953,578,8.578,579,7.26,580,15.969,581,15.969,582,20.926,583,15.969,584,15.969,585,15.969,586,15.969,587,20.926,588,23.341,589,15.969,590,15.969,591,15.969,592,15.969,593,15.969]],["keywords/23",[]],["title/24",[1,257.805,2,119.066,24,296.351]],["content/24",[1,5.597,2,1.896,16,2.633,18,4.073,24,6.433,36,7.009,49,4.688,66,4.023,161,7.086,227,7.321,228,5.06,261,6.767,283,8.544,312,7.799,343,6.767,366,11.73,375,12.514,396,7.57,594,8.125,595,18.221,596,11.583]],["keywords/24",[]],["title/25",[2,119.066,354,282.279,355,294.361]],["content/25",[1,5.26,15,4.72,22,1.844,24,4.912,30,6.064,66,4.187,73,6.56,163,6.31,222,3.009,223,4.153,227,6.097,340,4.221,354,4.679,355,4.879,365,12.542,372,7.204,422,7.185,552,9.768,597,10.867,598,11.911]],["keywords/25",[]],["title/26",[599,748.351]],["content/26",[1,4.326,2,2.277,11,3.826,22,2.127,24,6.092,25,3.985,42,6.653,79,3.79,106,5.111,113,3.305,145,8.953,163,4.672,195,2.63,219,6.352,225,6.764,227,4.515,261,5.215,283,5.269,296,7.549,325,6.726,369,7.382,386,6.922,489,6.617,515,7.185,594,6.261,599,6.063,600,9.568,601,8.906,602,7.185,603,6.514,604,9.889,605,6.922,606,8.194,607,6.261,608,8.194,609,14.06,610,11.66,611,9.286,612,11.396,613,14.06,614,12.205,615,11.919,616,3.581,617,11.805,618,10.079,619,7.779,620,8.62,621,11.805]],["keywords/26",[]],["title/27",[622,898.75]],["content/27",[2,2.04,3,2.34,11,5.341,22,1.408,25,4.109,67,6.898,89,3.12,113,5.232,130,11.205,154,9.444,155,5.715,160,9.189,168,2.923,199,8.53,222,2.297,223,3.171,225,6.975,227,6.303,293,8.087,325,6.936,329,5.63,335,4.417,374,5.359,375,10.774,445,4.433,467,5.871,485,6.308,504,7.269,531,9.715,622,11.525,623,14.478,624,14.478,625,7.777,626,9.094,627,3.684,628,11.4,629,14.478,630,12.172,631,8.614,632,6.487,633,9.715,634,9.575,635,14.478,636,14.478,637,14.478,638,9.204]],["keywords/27",[]],["title/28",[639,1064.028]],["content/28",[]],["keywords/28",[]],["title/29",[2,143.445,283,517.202]],["content/29",[2,2.111,22,1.972,147,10.898,206,8.394,283,7.613,354,5.006,396,8.428,599,8.76,600,13.824,603,9.411,604,12.526,640,15.185,641,8.879,642,10.741]],["keywords/29",[]],["title/30",[206,570.267,354,340.075]],["content/30",[2,2.576,61,6.312,66,5.003,87,7.511,180,8.759,195,3.104,206,7.48,279,5.946,291,4.961,352,5.22,354,6.106,355,6.367,557,7.949,605,8.913,643,11.639,644,7.218,645,14.674,646,8.387,647,6.738,648,15.2,649,18.08]],["keywords/30",[]],["title/31",[599,748.351]],["content/31",[2,2.27,15,4.236,22,2.12,24,4.409,66,3.758,89,3.668,155,6.718,195,2.988,206,7.042,261,6.322,270,5.324,283,6.387,284,5.117,325,8.154,354,5.381,355,4.379,372,5.253,489,8.022,557,7.484,599,10.958,601,7.896,641,7.449,642,9.012,650,10.821,651,6.875,652,5.663,653,15.76,654,8.826,655,17.021,656,14.31]],["keywords/31",[]],["title/32",[639,846.169,657,971.224]],["content/32",[2,2.69,3,3.638,61,5.184,69,5.563,97,6.621,128,9.218,139,9.156,178,10.117,195,3.439,222,3.572,227,4.774,263,4.558,268,5.533,294,9.326,296,5.839,304,9.559,305,10.874,307,4.999,309,12.051,310,12.051,329,5.774,330,5.013,352,4.287,360,6.652,375,8.161,394,6.652,396,6.169,413,6.853,594,6.621,607,6.621,639,9.115,644,5.928,658,5.951,659,9.964,660,6.96,661,7.806,662,14.924,663,14.848,664,9.326,665,14.848,666,6.717]],["keywords/32",[]],["title/33",[227,557.255]],["content/33",[1,4.78,2,2.599,3,2.635,11,4.443,15,4.058,24,4.224,66,4.683,89,4.571,195,2.906,222,2.587,223,3.571,226,3.674,227,8.323,261,6.056,268,6.076,284,4.902,312,6.978,332,10.241,347,5.877,354,4.023,355,4.195,366,10.497,375,12.958,385,5.347,386,8.038,422,5.019,489,7.684,494,8.455,576,12.5,667,11.11]],["keywords/33",[]],["title/34",[3,280.117]],["content/34",[2,1.839,3,4.289,6,5.751,11,3.395,13,2.757,43,3.272,49,3.206,54,7.079,59,7.804,61,6.168,62,8.492,79,6.364,86,5.722,89,2.686,103,7.628,106,4.536,152,6.744,155,6.973,160,5.842,162,5.156,174,7.079,186,3.877,195,3.355,222,1.977,223,2.729,229,5.22,240,11.538,277,2.627,284,3.747,287,5.333,288,6.462,291,3.42,316,4.882,320,6.18,387,6.037,401,5.014,445,3.816,527,6.462,546,4.919,557,5.479,571,8.945,605,6.143,616,3.178,668,16.161,669,14.853,670,9.812,671,9.327,672,8.129,673,10.476,674,10.476,675,7.922,676,6.107,677,5.556,678,7.65,679,5.781,680,8.781,681,6.506,682,4.956,683,9.553]],["keywords/34",[]],["title/35",[222,275.003]],["content/35",[2,2.648,3,3.541,11,4.672,22,1.667,25,4.866,69,4.784,79,5.915,89,4.722,146,8.832,195,2.349,216,7.213,222,3.832,224,1.948,229,7.183,277,5.365,284,5.155,290,7.371,307,5.772,319,11.684,385,5.623,391,10.527,493,9.144,650,10.9,661,9.014,681,8.952]],["keywords/35",[]],["title/36",[223,379.576]],["content/36",[2,2.178,3,3.772,22,1.553,25,4.532,49,4.109,69,4.456,79,5.649,80,12.243,89,4.51,115,5.951,146,8.226,155,8.259,178,10.881,195,2.188,216,6.718,222,2.534,223,5.632,224,1.814,229,6.69,284,4.801,290,6.865,298,8.119,307,5.376,319,10.881,391,9.804,413,11.432,428,5.911,445,4.89,650,10.152,673,13.425,684,15.969,685,10.716,686,11.695]],["keywords/36",[]],["title/37",[258,345.873]],["content/37",[2,2.531,22,1.692,59,7.687,61,6.076,103,7.514,195,3.332,222,2.761,223,3.811,224,1.977,258,4.853,263,5.343,277,3.669,307,8.614,332,10.931,335,3.922,413,8.032,457,7.797,687,16.114,688,15.265,689,4.891,690,11.063,691,13.703,692,9.28,693,4.549,694,14.631]],["keywords/37",[]],["title/38",[224,196.887]],["content/38",[2,2.435,22,1.851,49,3.57,55,10.384,69,3.871,70,5.582,89,2.99,115,5.17,128,8.613,145,6.47,166,8.255,195,2.609,206,5.74,219,6.276,222,2.201,223,3.038,224,2.878,228,3.853,229,5.812,258,2.769,272,7.1,277,4.584,279,4.563,283,5.206,284,4.171,291,3.807,307,7.319,327,8.931,354,3.423,413,6.403,469,5.118,529,8.426,607,6.186,608,8.097,616,3.538,638,8.82,650,8.82,695,11.664,696,8.931,697,9.681,698,9.874,699,9.776,700,9.454,701,13.874,702,13.874,703,11.26,704,5.476,705,9.31,706,9.454,707,4.784,708,12.846,709,9.454]],["keywords/38",[]],["title/39",[639,846.169,710,1208.976]],["content/39",[30,6.602,89,4.45,186,6.424,352,5.961,602,10.566,607,9.207,639,12.676,644,8.243,658,8.275,696,13.292,711,13.656,712,11.348,713,16.758]],["keywords/39",[]],["title/40",[268,645.896]],["content/40",[3,3.575,7,7.029,22,2.151,25,4.939,79,4.698,89,4.767,214,8.291,263,5.343,268,9.062,277,3.669,284,5.232,290,7.481,291,4.776,320,8.631,394,7.797,550,8.158,578,9.349,602,8.906,666,7.873,689,4.891,714,6.793,715,14.125,716,16.114,717,8.684,718,14.125,719,9.565,720,11.352,721,8.58,722,11.352]],["keywords/40",[]],["title/41",[11,472.249]],["content/41",[2,2.441,3,3.525,11,6.696,15,3.474,36,5.368,43,3.665,66,3.082,79,6.332,89,3.008,97,6.223,106,5.08,115,5.201,145,6.508,152,7.554,162,5.775,181,5.847,186,4.342,195,2.988,205,6.543,216,5.872,227,4.487,234,12.923,284,4.196,316,7.49,378,9.835,395,11.734,494,7.237,516,7.795,527,7.237,552,7.189,562,9.231,672,9.104,681,9.982,692,7.443,705,9.366,723,13.957,724,13.957,725,13.957,726,12.923,727,10.221,728,7.795,729,12.242,730,8.476,731,5.775,732,11.328,733,9.835,734,12.923,735,9.104,736,7.389,737,12.923,738,9.835]],["keywords/41",[]],["title/42",[547,892.766]],["content/42",[2,1.958,3,3.938,4,7.268,11,3.714,13,5.712,22,1.829,31,4.862,42,6.458,59,6.021,60,7.613,70,5.484,79,6.801,89,4.642,162,5.639,168,3.798,172,5.079,181,5.71,191,8.03,195,1.867,223,4.717,251,4.066,263,4.184,270,4.264,284,4.098,289,6.259,335,3.071,391,8.368,432,6.106,485,5.938,518,5.3,523,10.202,544,6.975,547,9.689,578,7.322,579,6.196,664,8.561,720,8.891,739,8.561,740,13.63,741,7.433,742,12.62,743,8.109,744,9.784,745,11.062,746,6.166,747,9.014,748,7.322]],["keywords/42",[]],["title/43",[489,816.797]],["content/43",[2,1.673,3,3.785,6,7.421,22,1.563,25,4.563,79,4.341,83,8.838,89,4.53,139,9.652,195,2.203,268,8.727,284,4.834,321,7.703,385,5.273,391,9.872,438,9.983,489,12.145,494,8.338,547,8.283,607,7.17,621,13.518,632,7.204,661,12.312,748,11.292,749,7.975,750,12.035,751,15.394,752,9.174,753,11.543]],["keywords/43",[]],["title/44",[216,729.133]],["content/44",[2,1.628,3,4.129,49,4.026,79,5.573,86,7.185,128,9.714,161,6.085,195,2.829,216,8.686,222,3.276,223,4.522,227,6.639,229,6.555,251,4.668,258,3.123,268,7.695,277,3.299,290,6.726,291,5.666,303,6.697,360,7.01,385,5.131,391,9.606,413,7.221,518,6.085,666,7.078,754,15.647,755,17.358,756,13.155,757,15.647,758,10.348,759,12.32,760,12.32,761,8.739,762,15.647,763,15.647]],["keywords/44",[]],["title/45",[397,291.165,399,281.565]],["content/45",[3,3.772,8,5.775,42,7.567,66,3.526,112,5.344,155,6.303,195,2.188,215,10.562,222,3.32,223,4.583,224,2.377,258,4.176,270,4.995,277,3.367,307,5.376,335,3.599,345,6.926,397,5.432,399,4.275,413,7.37,445,4.89,579,9.513,652,5.313,676,7.827,691,12.574,693,5.47,733,11.253,764,11.463,765,15.969,766,9.804,767,8.709,768,15.969,769,12.961]],["keywords/45",[]],["title/46",[7,556.712,59,608.821]],["content/46",[2,2.429,3,3.772,7,10.213,22,1.844,59,11.967,61,6.621,62,9.657,89,4.087,130,8.537,195,2.598,215,12.542,284,5.702,312,8.116,770,13.888]],["keywords/46",[]],["title/47",[639,846.169,771,592.497]],["content/47",[2,2.505,22,1.939,89,4.297,116,11.637,207,8.534,244,9.156,283,7.482,404,6.793,639,12.241,658,7.991,660,9.347,713,16.183,771,10.345,772,16.183,773,15.7]],["keywords/47",[]],["title/48",[0,1221.28]],["content/48",[0,18.571,2,1.798,3,3.558,22,1.679,49,5.664,59,7.63,63,12.651,64,8.013,65,7.853,89,3.723,152,9.349,196,6.693,212,11.268,214,8.229,216,7.267,217,11.494,225,8.321,284,5.193,490,6.143,556,7.526,559,11.77,605,8.516,770,12.651,774,12.172,775,13.601,776,15.152,777,10.177]],["keywords/48",[]],["title/49",[216,579.843,217,719.607]],["content/49",[2,1.555,15,4.984,43,3.924,49,3.845,66,4.421,67,9.54,72,9.5,74,10.944,89,4.316,90,13.107,101,12.563,115,5.569,118,11.456,192,7.411,209,8.981,216,11.127,217,13.52,219,9.059,227,7.262,263,4.588,283,5.607,284,4.493,495,7.387,517,11.766,523,11.185,527,7.749,556,6.51,557,6.57,559,10.182,722,9.748,777,8.804,778,11.456,779,9.075,780,10.727,781,10.182,782,12.128,783,13.837]],["keywords/49",[]],["title/50",[447,686.675]],["content/50",[2,2.291,11,5.999,19,5.586,43,4.536,66,3.814,89,3.723,106,6.288,139,10.109,168,3.488,172,6.437,195,2.367,219,7.814,284,5.193,334,7.118,339,10.981,340,3.845,404,5.885,447,8.722,481,10.605,490,4.82,619,12.197,666,7.814,749,8.567,784,11.963,785,14.02,786,13.243,787,11.424,788,10.278]],["keywords/50",[]],["title/51",[222,275.003]],["content/51",[]],["keywords/51",[]],["title/52",[224,196.887]],["content/52",[22,1.772,43,4.785,79,4.919,195,3.12,215,12.051,219,8.243,222,3.613,224,2.955,251,5.436,258,3.636,277,3.842,279,5.993,281,4.2,287,7.799,303,7.799,307,6.134,334,7.508,335,4.106,466,10.951,664,11.444,788,10.841,789,15.983,790,9.937]],["keywords/52",[]],["title/53",[277,290.587,791,812.067]],["content/53",[2,2.46,41,7.049,43,3.732,79,5.226,87,5.905,145,6.628,152,7.692,167,8.218,188,9.271,221,7.136,222,2.255,224,3.019,263,5.943,277,4.641,279,4.674,281,3.276,287,6.083,291,5.312,354,3.507,355,3.657,365,9.4,386,7.007,437,7.273,518,7.528,525,10.203,571,10.203,616,4.936,627,3.616,652,4.729,689,3.994,691,11.191,699,13.641,700,13.191,791,8.374,792,5.857,793,14.213,794,14.213,795,11.535,796,10.638,797,11.949,798,14.213,799,11.535,800,10.203,801,9.843,802,11.949]],["keywords/53",[]],["title/54",[803,924.222]],["content/54",[2,2.541,3,3.052,7,5.538,11,3.736,15,4.701,16,3.122,22,1.333,25,3.891,36,5.274,49,3.528,69,5.27,71,5.946,136,5.293,168,2.768,188,8.943,195,2.588,206,5.672,207,5.868,222,3.694,224,1.557,244,6.295,250,7.658,255,7.788,258,2.736,261,5.092,291,3.762,340,3.052,354,3.383,368,4.99,372,4.232,374,6.991,385,4.496,399,4.414,422,6.651,424,7.788,437,7.016,485,5.973,512,7.42,518,5.331,556,5.973,602,7.016,689,3.853,711,9.067,761,7.658,803,10.071,804,5.649,805,9.661,806,13.71,807,8.611,808,5.842,809,10.262]],["keywords/54",[]],["title/55",[222,181.529,291,313.941,368,416.425]],["content/55",[2,1.778,3,2.761,4,6.339,11,3.239,30,6.394,60,9.542,66,2.625,69,3.317,70,4.783,86,5.459,107,8.919,163,3.955,168,2.4,222,3.468,226,3.85,237,7.409,251,6.522,255,6.753,261,4.415,277,2.506,282,3.803,285,7.653,291,4.688,298,6.044,334,4.899,335,2.679,341,12.511,351,6.874,354,4.215,355,4.395,362,7.22,367,4.508,370,5.326,372,3.669,374,4.4,377,6.084,380,7.145,381,7.073,385,5.602,397,2.511,399,3.49,418,9.361,424,11.359,445,3.64,458,5.251,493,10.663,518,4.623,715,9.648,748,6.386,810,5.352,811,9.994,812,5.326,813,6.586,814,7.557,815,11.008,816,6.586,817,8.898,818,5.603,819,11.888,820,14.362,821,9.361,822,10.428,823,5.251,824,11.008,825,11.888,826,11.888,827,15.818,828,11.888]],["keywords/55",[]],["title/56",[1,390.556]],["content/56",[1,3.514,2,1.092,3,3.33,11,1.728,13,1.403,15,6.9,16,2.253,18,4.159,19,3.982,20,4.465,22,0.617,24,3.476,30,3.355,31,1.64,41,8.567,43,2.755,66,2.317,69,2.928,86,2.913,97,2.829,107,3.312,113,2.47,127,1.548,130,4.724,195,0.869,216,2.669,222,3.582,223,1.389,224,2.427,226,3.024,227,2.04,232,3.813,237,2.751,251,4.004,258,3.447,263,1.948,270,1.984,277,2.829,279,2.086,282,1.206,291,2.88,294,3.984,296,4.126,312,7.393,324,3.109,330,3.543,341,7.685,345,2.751,348,3.383,351,3.668,363,3.268,368,3.82,374,2.348,385,2.08,387,3.073,394,2.842,396,2.635,397,3.649,399,3.802,400,5.694,418,4.995,424,7.623,426,1.85,427,2.301,458,5.928,469,2.34,485,2.764,490,2.928,518,2.467,533,2.898,546,2.504,569,3.29,579,2.884,607,2.829,611,4.195,618,4.554,651,2.562,676,3.109,689,3.772,693,1.658,706,7.15,707,4.628,728,3.543,815,5.874,817,4.748,818,2.99,820,5.333,829,2.856,830,6.344,831,3.073,832,4.995,833,3.514,834,3.984,835,3.022,836,3.813,837,3.938,838,2.727,839,5.564,840,4.646,841,3.359,842,2.161,843,5.874,844,5.333,845,5.333,846,3.056,847,5.036,848,5.333,849,3.924,850,6.344,851,4.917,852,6.344,853,6.344,854,13.11,855,4.646,856,3.738,857,6.344,858,3.573,859,9.204,860,8.44,861,4.554,862,4.646]],["keywords/56",[]],["title/57",[599,748.351]],["content/57",[]],["keywords/57",[]],["title/58",[863,911.566,864,498.398]],["content/58",[2,1.311,22,1.731,24,3.263,120,5.643,162,5.212,192,6.247,229,5.277,277,2.656,330,4.253,354,3.108,355,3.241,385,4.131,389,6.669,452,7.422,518,4.898,526,3.575,572,7.65,575,3.022,599,8.915,601,5.843,604,6.488,644,5.029,660,5.905,693,3.293,721,10.179,863,13.655,865,16.484,866,20.765,867,12.596,868,12.596,869,11.663,870,8.217,871,6.364,872,7.422,873,5.936,874,8.583,875,3.515,876,8.109,877,8.876,878,20.778,879,13.325,880,15.615,881,20.778,882,15.615,883,16.484,884,11.663,885,16.484,886,16.484,887,12.545,888,16.484,889,11.663,890,11.663,891,16.484,892,11.049,893,11.663,894,7.733,895,3.777,896,4.694]],["keywords/58",[]],["title/59",[575,330.693,804,567.943]],["content/59",[421,12.313,599,9.597,602,11.374,804,9.158,897,8.399]],["keywords/59",[]],["title/60",[599,595.127,898,1118.642]],["content/60",[0,10.952,1,3.502,2,1.932,3,3.551,17,7.01,49,2.688,79,2.82,89,4,115,6.917,186,4.836,195,2.129,219,4.726,225,8.941,227,7.405,230,6.286,244,8.522,261,3.88,263,4.772,266,4.977,270,3.268,283,5.832,284,4.673,345,4.531,364,5.884,366,6.725,372,4.797,375,8.542,386,5.15,389,5.531,421,5.787,437,5.346,452,6.155,489,4.923,490,2.915,519,5.742,527,5.417,546,4.123,575,2.506,579,4.749,594,4.658,599,10.299,601,7.21,602,5.346,603,8.61,604,5.381,606,10.832,607,4.658,627,2.658,631,6.215,633,7.01,641,4.572,642,5.531,667,7.118,677,4.658,704,6.135,752,4.092,761,5.835,814,6.641,875,2.915,895,4.661,898,18.693,899,10.447,900,6.561,901,5.032,902,4.593,903,7.819,904,10.447,905,10.447,906,4.68,907,10.447,908,3.753,909,5.835,910,7.361,911,8.782,912,7.499]],["keywords/60",[]],["title/61",[2,101.77,195,133.976,372,301.814,599,422.226]],["content/61",[1,5.073,2,1.023,3,2.4,19,3.423,22,0.956,24,4.635,30,3.143,67,4.682,89,2.118,94,6.595,95,11.113,97,4.382,115,3.663,130,8.976,161,3.822,162,4.066,163,3.27,195,1.347,198,4.49,227,7.515,230,6.752,255,5.583,261,6.646,266,4.682,270,3.074,277,2.072,283,6.715,289,4.513,297,4.152,298,4.997,304,6.327,305,7.198,312,4.206,319,6.697,330,3.319,340,2.188,352,2.838,372,3.034,375,9.835,386,7.32,394,6.652,437,5.03,489,6.997,594,4.382,599,10.092,602,5.03,603,10.843,604,9.217,605,4.845,625,5.28,711,6.5,717,4.904,752,7.01,761,11.137,804,4.05,817,7.356,823,4.341,875,2.742,897,3.714,898,7.977,908,3.531,913,9.829,914,9.829,915,6.411,916,9.101,917,7.535,918,6.697,919,6.697,920,5.167,921,4.206,922,9.829,923,9.829,924,7.356,925,6.784,926,5.097,927,7.977,928,9.829,929,7.598,930,7.918,931,9.829,932,9.829,933,14.848,934,9.829]],["keywords/61",[]],["title/62",[1,220.355,366,629.522,603,453.632,927,793.645]],["content/62",[1,4.737,3,3.397,22,1.266,24,6.433,31,3.365,69,5.865,94,12.227,97,5.805,113,3.065,163,4.332,220,5.524,227,5.858,251,3.884,255,11.941,270,4.073,275,7.993,283,4.885,298,6.62,300,8.493,303,8.996,353,7.993,370,11.127,374,8.428,410,12.634,546,5.139,599,7.867,610,11.066,625,9.788,746,8.243,748,6.994,761,13.872,912,9.346,935,18.48,936,12.055,937,13.02,938,7.746,939,13.02,940,13.02,941,15.318]],["keywords/62",[]],["title/63",[601,639.394,625,740.39]],["content/63",[1,5.463,2,1.99,6,5.072,9,7.075,22,1.569,24,6.28,66,3.562,67,5.235,69,3.066,108,5.418,113,2.587,130,4.947,152,5.948,178,7.488,195,1.506,215,7.268,227,6.147,255,6.243,261,4.081,263,4.954,267,7.075,270,3.438,277,4.031,281,2.533,283,6.055,321,5.264,325,5.264,343,4.081,366,12.309,374,4.068,385,3.604,387,5.324,422,4.967,447,4.354,493,5.86,515,8.257,518,6.275,556,4.788,557,4.832,596,6.986,599,9.689,601,7.485,603,5.098,607,7.195,610,6.674,614,6.986,619,8.939,625,12.054,626,7.485,632,4.924,640,8.225,641,4.81,650,6.986,704,4.338,761,9.012,912,7.889,942,9.239,943,7.744,944,10.99,945,9.239,946,7.168,947,16.135,948,9.239,949,10.99,950,10.176,951,9.639,952,10.176,953,10.99,954,16.135,955,10.99]],["keywords/63",[]],["title/64",[422,352.17,614,727.292,619,633.815]],["content/64",[1,2.679,2,2.081,15,2.959,18,4.469,19,2.74,22,1.944,24,4.425,73,4.112,89,2.562,144,8.706,152,6.434,155,4.692,175,6.483,181,4.98,195,2.341,227,3.822,241,4.939,251,3.547,254,8.524,265,6.938,268,6.366,291,3.262,303,5.088,312,8.558,321,9.579,325,5.695,334,4.899,349,6.938,364,9.622,368,4.327,374,4.4,384,7.653,422,3.659,447,4.71,495,6.302,514,8.706,557,5.227,599,8.634,602,6.084,611,7.862,619,12.11,620,13.42,625,6.386,650,7.557,788,11.897,792,4.899,807,7.467,854,9.994,942,9.994,946,7.755,956,11.562,957,7.145,958,11.888,959,7.467,960,7.977,961,11.888,962,11.008,963,9.994,964,6.084,965,9.994,966,7.755,967,11.008,968,9.114,969,8.534,970,11.888,971,11.888,972,11.008,973,7.977]],["keywords/64",[]],["title/65",[3,280.117]],["content/65",[]],["keywords/65",[]],["title/66",[79,467.849]],["content/66",[2,2.249,3,3.186,7,4.682,11,3.159,13,3.711,15,5.378,19,2.672,20,3.857,24,3.003,42,5.492,60,9.37,75,6.765,79,7.05,103,5.005,106,4.219,110,7.864,113,2.729,115,4.32,161,4.508,168,2.34,195,2.96,216,7.057,222,1.839,223,2.539,258,2.313,268,4.32,270,5.248,277,2.444,307,3.902,345,7.276,356,6.585,396,4.816,445,3.549,464,2.904,465,3.846,493,6.181,495,6.188,515,5.932,550,5.434,578,6.227,579,5.27,652,3.857,659,11.257,667,7.899,690,7.369,728,6.475,747,7.667,778,8.887,836,6.967,875,3.234,901,5.584,974,6.643,975,7.779,976,4.983,977,16.775,978,10.168,979,10.733,980,8.887,981,8.321,982,7.281,983,8.489,984,9.745,985,11.592,986,19.714,987,11.592,988,11.592,989,11.592,990,11.592,991,9.745,992,11.592]],["keywords/66",[]],["title/67",[307,385.149,465,379.544,993,619.168]],["content/67",[1,1.881,2,2.068,3,2.956,13,1.847,14,2.896,20,5.375,22,1.273,42,3.955,43,2.192,49,4.156,59,5.783,61,4.571,62,3.454,70,3.358,79,6.893,98,5.182,106,4.766,155,7.22,188,5.445,195,1.144,199,7.714,208,3.454,209,7.869,222,3.498,223,1.828,224,1.835,229,3.497,261,4.863,268,4.879,270,2.611,277,2.76,279,6.016,282,2.49,291,4.433,307,5.438,334,3.439,343,5.999,385,2.737,391,5.124,400,3.542,422,4.973,447,5.187,455,10.446,465,7.787,467,6.55,485,5.704,490,2.329,527,4.328,542,4.484,544,4.271,546,3.295,604,8.321,657,5.882,666,3.776,682,3.32,733,5.882,743,4.966,746,3.776,805,5.882,808,5.579,841,4.419,849,3.121,993,4.517,994,14.169,995,4.966,996,9.226,997,8.347,998,5.017,999,7.729,1000,7.729,1001,7.017,1002,18.293,1003,22.045,1004,6.775,1005,6.775,1006,11.007,1007,8.434,1008,6.343,1009,8.347,1010,7.322,1011,8.347,1012,7.729,1013,7.729,1014,3.482,1015,6.572,1016,8.347,1017,6.113,1018,5.688]],["keywords/67",[]],["title/68",[3,184.904,79,308.825,897,432.305]],["content/68",[1,1.988,2,0.918,3,4.255,11,2.404,13,3.024,15,2.196,18,1.972,22,1.832,30,4.371,31,2.28,43,2.316,47,3.991,64,10.438,65,4.011,67,6.512,68,4.25,79,5.823,106,4.976,115,5.094,127,2.153,163,2.935,164,8.169,179,7.137,186,7.727,195,2.956,206,5.656,218,5.416,219,3.991,221,4.429,222,1.4,223,1.932,224,1.002,228,2.45,229,3.696,230,2.988,244,6.277,246,4.927,251,2.632,263,4.197,266,4.203,270,4.276,277,1.86,281,2.034,318,6.216,329,3.431,330,2.979,340,1.964,354,3.373,359,7.194,363,4.544,404,3.006,413,4.072,416,4.575,427,3.201,435,4.485,438,5.477,448,4.758,452,5.198,491,5.541,503,5.541,550,4.135,599,8.806,616,2.25,627,2.245,641,7.324,676,4.324,678,5.416,704,3.482,749,4.375,796,6.603,816,4.887,895,2.646,897,5.165,901,4.25,912,9.813,920,4.638,945,7.417,964,6.995,1019,6.11,1020,4.849,1021,4.158,1022,4.887,1023,2.072,1024,5.679,1025,5.541,1026,4.671,1027,8.822,1028,12.256,1029,7.738,1030,6.333,1031,11.094,1032,5.835,1033,5.541,1034,7.738]],["keywords/68",[]],["title/69",[1,390.556]],["content/69",[1,2.453,2,1.133,3,4.161,8,3.937,11,4.366,13,4.64,15,6.87,18,3.581,19,5.153,20,6.978,24,2.82,25,3.089,30,6.08,42,5.158,64,5.05,65,4.949,79,4.326,89,3.453,106,3.963,113,2.563,127,2.657,155,4.297,168,3.235,172,4.057,174,6.184,226,2.453,227,3.5,254,5.432,263,3.342,268,5.972,281,2.51,284,3.273,295,8.366,303,4.659,312,4.659,426,3.175,427,3.95,432,4.877,440,4.218,447,6.349,448,3.789,457,4.877,465,3.612,467,4.415,579,7.285,608,6.353,618,11.503,639,6.683,666,4.925,681,5.684,759,8.572,788,6.477,807,6.838,829,4.901,846,5.244,858,9.025,1035,9.549,1036,11.735,1037,10.08,1038,6.921,1039,7.671,1040,10.08,1041,10.887,1042,4.38]],["keywords/69",[]],["title/70",[11,472.249]],["content/70",[1,4.205,2,1.942,3,3.016,11,7.258,13,2.98,14,7.428,17,9.04,18,3.011,19,4.301,20,4.482,24,3.49,79,5.037,89,2.903,97,6.007,106,4.904,113,3.171,174,7.653,195,1.846,219,6.094,223,2.95,244,6.186,263,4.136,268,5.021,277,2.84,282,2.562,284,4.05,303,7.986,316,5.278,349,7.862,422,4.147,426,3.929,490,3.759,492,9.671,538,8.564,618,9.671,681,7.034,692,7.184,711,8.91,727,9.866,731,5.574,734,12.474,803,7.184,1005,10.934,1038,11.862,1043,10.89,1044,7.653,1045,11.817,1046,11.817,1047,13.472,1048,11.817,1049,6.418,1050,5.644,1051,13.472,1052,13.472,1053,11.817]],["keywords/70",[]],["title/71",[13,383.443]],["content/71",[2,1.444,3,3.514,11,3.78,13,5.425,15,6.103,22,1.349,67,6.61,79,5.869,106,6.931,113,5.118,127,3.386,168,3.845,222,2.201,223,3.038,270,4.34,289,6.371,335,3.126,396,5.764,411,7.345,448,4.829,451,16.702,457,6.216,544,7.1,846,6.683,925,11.574,976,8.185,1038,8.82,1043,8.097,1054,12.846,1055,12.169,1056,18.991,1057,10.924,1058,21.741,1059,17.118,1060,17.631,1061,12.846,1062,13.874]],["keywords/71",[]],["title/72",[11,375.556,1063,745.942]],["content/72",[2,1.974,3,3.065,11,3.758,13,5.414,18,3.082,19,6.082,49,3.548,52,5.592,79,5.85,115,7.067,166,8.206,172,5.14,223,3.02,224,1.567,226,3.108,231,5.506,258,2.752,270,5.932,274,7.25,335,3.108,369,7.25,374,8.639,426,4.022,432,6.179,457,10.457,465,4.575,503,8.662,516,7.703,531,9.255,546,5.443,550,6.465,551,5.592,579,8.621,616,3.517,682,5.485,705,9.255,749,6.84,787,9.121,918,9.397,1063,7.464,1064,13.792,1065,13.792,1066,8.662,1067,9.718,1068,10.859]],["keywords/72",[]],["title/73",[13,304.933,1039,971.224]],["content/73",[3,4.072,11,5.125,13,5.574,20,6.259,155,7.425,263,5.775,295,9.821,457,10.405,579,8.552,631,11.192,846,9.062,1039,13.255,1054,17.418,1055,16.5,1069,18.811,1070,18.811,1071,18.811,1072,18.811,1073,18.811]],["keywords/73",[]],["title/74",[13,304.933,748,740.39]],["content/74",[2,2.117,3,3.788,13,5.389,15,3.053,39,7.371,42,5.811,47,5.548,49,4.494,59,7.716,79,5.985,86,5.632,102,6.637,113,4.112,151,9.657,162,5.074,173,4.602,181,5.138,194,8,195,1.68,215,8.111,219,5.548,223,3.826,237,5.319,258,2.447,268,4.57,270,3.836,282,2.333,293,6.85,323,7.614,334,5.054,369,6.448,422,3.775,450,10.758,451,10.758,467,4.973,468,7.371,495,4.524,504,6.157,527,6.36,530,7.157,544,8.939,546,6.895,547,6.317,561,7.895,603,8.103,607,5.469,721,6.046,1056,14.177,1060,11.356,1061,11.356,1074,6.12,1075,11.356,1076,8.494,1077,8.982,1078,8.357,1079,12.264,1080,10.758,1081,9.18,1082,12.264,1083,8.804,1084,12.264,1085,8.642,1086,8.642,1087,9.657,1088,8,1089,9.657,1090,7.895,1091,6.741]],["keywords/74",[]],["title/75",[13,304.933,409,745.942]],["content/75",[1,5.367,3,4.068,13,5.765,36,6.406,78,9.083,168,3.363,172,6.207,227,5.355,232,10.01,261,6.186,270,5.21,312,7.128,335,3.753,340,3.707,343,6.186,347,6.003,352,4.809,368,6.062,372,5.141,404,5.674,409,11.639,422,7.332,432,7.462,448,5.797,516,9.303,813,9.227,920,8.756,1092,16.656]],["keywords/75",[]],["title/76",[447,686.675]],["content/76",[3,3.916,9,7.772,11,4.707,13,3.822,15,6.21,16,1.744,19,2.783,20,4.017,22,1.679,30,3.86,64,11.241,65,10.59,79,5.943,89,2.602,106,4.395,113,4.066,155,6.818,163,4.017,219,5.462,223,2.644,284,3.63,295,9.018,312,7.393,335,2.721,368,4.395,369,6.347,447,10.11,457,9.036,458,5.333,464,3.025,465,6.691,467,4.896,490,3.369,849,4.515,1035,10.59,1037,11.179,1038,12.822,1040,15.994,1043,7.046,1066,7.583,1093,9.506,1094,9.037,1095,12.073,1096,11.179,1097,12.073,1098,12.073,1099,12.073,1100,12.073,1101,12.073]],["keywords/76",[]],["title/77",[59,765.571]],["content/77",[0,10.266,2,1.516,3,4.154,7,5.885,24,5.099,43,3.825,54,8.276,59,10.548,61,6.873,62,9.225,69,4.065,79,6.019,89,3.14,103,6.291,106,5.303,149,11.471,152,7.885,155,5.75,160,6.83,163,4.847,186,6.937,191,8.584,195,2.697,223,3.191,261,5.411,268,5.429,277,3.072,284,4.38,287,6.235,313,10.67,490,4.065,504,7.315,562,9.635,571,10.458,668,15.5,669,12.248,671,10.905,673,12.248,901,7.018,1102,11.471,1103,14.569,1104,12.248]],["keywords/77",[]],["title/78",[224,196.887]],["content/78",[]],["keywords/78",[]],["title/79",[22,134.003,224,156.574]],["content/79",[1,4.106,2,2.37,15,5.667,16,2.633,22,2.415,25,6.462,155,7.192,195,2.496,206,7.539,222,2.891,223,3.991,224,2.955,261,6.767,329,7.086,354,4.496,375,10.015,599,7.868,1026,9.647,1105,10.951,1106,13.08]],["keywords/79",[]],["title/80",[2,119.066,206,473.349,354,282.279]],["content/80",[1,3.164,2,2.448,15,4.778,16,2.774,18,3.138,47,6.352,147,7.543,167,8.119,168,2.835,179,10.023,195,2.63,206,5.809,222,2.228,223,3.075,224,2.485,258,3.831,261,5.215,296,5.521,307,6.463,325,6.726,354,4.737,355,3.613,359,6.036,368,5.111,385,4.605,394,6.291,397,2.966,416,9.956,424,7.976,465,6.369,530,8.194,556,6.117,597,8.046,614,8.926,641,6.145,642,7.434,689,3.946,772,11.396,810,6.321,875,5.357,901,9.248,924,10.51,1105,8.439,1107,11.056,1108,10.51,1109,11.805,1110,7.717,1111,14.041,1112,9.039,1113,7.006]],["keywords/80",[]],["title/81",[599,595.127,965,1158.748]],["content/81",[1,4.937,2,1.924,3,2.148,8,3.752,15,5.718,16,3.166,18,2.319,22,1.667,24,4.441,30,2.001,49,1.61,66,1.382,67,2.981,73,2.165,92,2.791,97,2.791,103,4.48,112,4.448,113,2.443,128,3.885,145,2.918,146,3.224,155,2.47,163,2.082,168,3.953,172,2.332,206,2.589,207,2.678,209,3.761,222,1.646,223,2.911,224,2.704,235,3.224,237,2.714,244,2.874,258,3.907,263,1.921,277,3.26,283,2.348,294,3.931,307,2.107,312,2.678,313,4.583,321,2.998,329,2.434,334,6.372,335,4.412,340,2.31,343,3.854,345,2.714,347,2.256,354,2.56,355,1.61,364,3.525,368,2.278,370,4.649,376,5.079,396,2.6,397,4.328,399,3.159,415,8.307,422,1.926,448,2.178,469,3.828,490,4.784,526,2.945,569,3.245,573,3.885,575,2.49,579,4.717,599,2.702,602,3.203,603,2.903,604,3.224,607,2.791,618,4.492,632,2.804,650,8.45,651,2.528,660,4.864,676,3.067,685,4.2,697,3.182,706,4.264,707,7.33,739,3.931,761,3.495,810,2.817,838,2.69,842,3.535,849,2.34,897,3.921,901,3.015,921,2.678,924,4.684,925,2.859,929,3.203,930,3.337,948,5.261,966,4.082,1035,9.102,1114,12.177,1115,6.258,1116,6.258,1117,11.175,1118,9.949,1119,6.258,1120,4.334,1121,2.981,1122,9.608,1123,5.489,1124,5.703,1125,7.186,1126,5.317,1127,6.258,1128,6.258,1129,6.258,1130,6.258,1131,5.079,1132,4.583,1133,3.728,1134,4.2,1135,6.258,1136,6.258,1137,4.928,1138,6.258,1139,4.334,1140,5.079,1141,3.978]],["keywords/81",[]],["title/82",[1140,1118.642,1142,481.212]],["content/82",[1,2.33,2,2.183,13,4.247,15,4.128,16,2.774,18,2.767,22,1.988,24,2.014,31,2.009,36,1.715,42,2.113,43,1.171,49,1.147,61,2.714,66,0.984,70,4.159,73,4.282,79,3.341,103,4.464,106,1.623,108,2.198,113,2.914,116,2.602,123,5.742,145,2.079,147,4.177,155,4.08,162,1.845,163,1.483,174,2.533,185,1.557,196,1.728,206,4.277,209,7.44,224,1.595,227,1.434,232,4.673,235,2.297,237,4.484,251,1.33,258,1.552,270,3.234,272,2.282,290,1.917,295,4.059,303,1.908,307,2.617,326,2.653,329,1.734,334,3.204,340,1.731,347,1.607,353,2.737,354,1.1,357,2.09,368,1.623,370,3.483,372,1.376,376,3.619,385,1.462,386,2.198,387,2.16,406,12.143,435,3.953,447,4.904,464,4.156,465,1.479,490,2.169,495,1.645,511,3.725,513,1.892,514,7.571,531,2.992,532,2.47,533,2.037,557,3.418,569,2.312,575,4.219,576,3.418,596,2.834,600,3.038,603,2.068,607,1.988,626,2.068,627,3.15,644,1.78,647,4.613,658,4.143,687,4.128,704,1.76,834,4.883,844,15.507,875,1.244,900,2.8,901,3.745,910,3.142,938,6.151,993,5.595,1057,3.511,1094,3.337,1105,2.68,1121,2.124,1126,4.256,1133,6.317,1140,17.024,1141,8.926,1142,1.557,1143,2.239,1144,4.459,1145,20.628,1146,14.06,1147,12.378,1148,5.961,1149,18.446,1150,3.598,1151,2.47,1152,7.775,1153,4.459,1154,2.834,1155,2.211,1156,4.459,1157,3.511,1158,2.949,1159,3.142,1160,10.338,1161,7.775,1162,7.775,1163,4.379,1164,4.459,1165,7.044,1166,12.378,1167,12.378,1168,12.378,1169,12.378,1170,6.122,1171,4.459,1172,4.459,1173,4.459,1174,4.459,1175,4.673,1176,7.775,1177,7.775,1178,7.775,1179,7.199,1180,12.378,1181,7.775,1182,7.199,1183,4.459,1184,7.775,1185,7.775,1186,4.459,1187,2.834,1188,4.459,1189,1.773,1190,3.911,1191,4.128,1192,4.128,1193,4.128,1194,3.511,1195,4.459,1196,2.555,1197,4.128,1198,3.142,1199,4.459,1200,4.459,1201,7.775,1202,7.775,1203,7.775,1204,2.555,1205,4.459,1206,7.775,1207,4.459,1208,4.459,1209,4.459]],["keywords/82",[]],["title/83",[258,195.144,461,521.453,646,453.632,693,255.603]],["content/83",[2,1.733,8,3.166,9,5.637,13,3.685,15,5.353,16,1.265,22,1.619,61,3.057,79,2.363,112,5.574,115,3.263,136,3.38,139,4.02,155,3.456,160,4.104,163,2.913,216,3.683,222,2.643,223,1.918,224,1.892,226,1.973,228,2.431,229,3.668,244,4.02,258,3.324,272,4.48,277,2.865,279,4.47,281,3.839,282,1.665,296,3.443,312,3.747,329,3.405,335,1.973,345,3.797,350,5.791,354,2.16,355,2.253,385,4.457,399,1.789,404,2.983,413,4.041,415,4.703,427,4.93,442,6.553,445,2.681,457,3.923,461,7.247,490,2.443,574,3.98,575,2.101,596,8.639,616,2.233,627,3.458,646,6.304,647,3.263,675,5.566,676,4.291,693,3.552,707,3.019,804,3.608,838,3.764,842,2.983,870,5.711,873,4.126,875,2.443,903,6.553,929,4.48,982,5.499,1023,2.057,1118,6.553,1122,8.107,1126,3.01,1142,3.057,1210,7.891,1211,5.159,1212,4.775,1213,8.107,1214,5.711,1215,3.98,1216,8.756,1217,7.498,1218,6.285,1219,7.68,1220,10.053,1221,7.3,1222,7.3,1223,8.756,1224,7.68,1225,8.107,1226,7.106,1227,7.68,1228,6.894,1229,8.756,1230,8.637,1231,8.756,1232,8.107,1233,8.756,1234,5.966,1235,8.756,1236,8.756,1237,4.54,1238,8.756,1239,8.756,1240,6.712,1241,8.988,1242,7.68,1243,7.68,1244,7.68,1245,7.68,1246,7.68,1247,7.68,1248,7.68,1249,7.68,1250,7.68,1251,7.68,1252,7.68,1253,7.68,1254,7.68]],["keywords/83",[]],["title/84",[224,129.964,697,581.683,1255,877.073]],["content/84",[1,2.302,2,1.906,4,5.448,8,5.528,15,3.805,22,1.486,54,5.804,67,4.867,70,4.111,71,4.431,73,5.288,76,8.292,86,4.691,88,6.141,97,4.556,145,10.151,146,5.263,157,12.407,163,3.399,195,1.4,219,4.622,224,2.828,230,3.46,250,5.707,272,11.139,277,3.223,279,6.687,283,3.834,307,6.166,320,5.067,343,3.795,345,4.431,354,2.521,355,2.629,365,6.757,370,4.577,435,5.195,437,5.228,442,7.647,490,2.851,518,3.973,557,6.721,569,9.498,575,3.668,601,4.74,607,4.556,608,5.963,611,6.757,616,2.605,652,3.399,674,8.59,697,7.772,706,6.962,707,5.272,784,7.076,795,8.292,802,8.59,926,5.298,1045,8.962,1106,7.334,1114,8.045,1117,8.59,1121,4.867,1139,10.587,1255,7.833,1256,7.334,1257,15.586,1258,7.647,1259,8.962,1260,7.199,1261,7.199,1262,10.217,1263,9.46,1264,9.46,1265,10.217,1266,10.217,1267,4.335,1268,7.833,1269,7.833,1270,6.577,1271,10.217,1272,10.217,1273,6.272,1274,10.217,1275,10.217,1276,9.46,1277,10.217,1278,6.665,1279,10.217]],["keywords/84",[]],["title/85",[224,156.574,229,577.406]],["content/85",[224,2.525,229,9.311,284,6.682,303,9.513,658,8.908]],["keywords/85",[]],["title/86",[607,772.804]],["content/86",[]],["keywords/86",[]],["title/87",[1,390.556]],["content/87",[2,1.444,3,3.077,15,6.305,22,1.349,24,4.932,83,7.625,155,5.476,163,4.616,175,7.566,230,4.698,269,9.776,270,5.956,277,4.584,366,8.931,489,8.974,599,8.222,607,10.934,625,7.453,658,5.56,682,5.518,704,5.476,727,10.16,728,7.749,788,8.255,858,7.814,870,9.05,894,8.517,1036,10.16,1050,5.812,1057,10.924,1121,6.61,1267,5.887,1280,9.31,1281,12.593,1282,12.846,1283,13.874,1284,13.874,1285,11.329,1286,13.874,1287,13.874,1288,13.874,1289,13.874,1290,8.097,1291,11.26,1292,10.636,1293,9.959,1294,10.16,1295,13.874,1296,13.874,1297,13.874]],["keywords/87",[]],["title/88",[654,714.732,748,740.39]],["content/88",[2,1.453,6,6.441,11,3.803,22,1.357,43,5.02,68,6.723,106,5.08,155,7.547,163,4.644,166,8.304,192,6.922,218,8.568,221,7.007,227,7.012,231,5.572,251,4.164,261,5.184,263,4.285,277,2.943,279,4.59,303,5.973,334,5.751,343,5.184,370,6.253,375,7.671,394,6.253,397,4.039,461,7.443,495,5.148,603,8.87,604,7.189,607,6.223,626,6.475,651,5.637,654,12.164,676,6.84,681,7.287,699,9.835,700,9.51,749,6.922,788,11.376,792,5.751,816,7.732,901,6.723,921,5.973,1049,6.649,1050,5.847,1221,5.427,1230,7.237,1285,8.304,1298,9.231,1299,8.476,1300,10.447,1301,13.957,1302,9.51,1303,9.835,1304,13.957]],["keywords/88",[]],["title/89",[19,317.729,607,614.573]],["content/89",[1,3.808,2,1.759,6,10.018,9,10.878,19,5.004,22,2.332,24,4.377,31,4.367,42,8.006,108,8.33,120,7.57,227,5.433,263,5.188,295,8.822,340,3.761,350,11.175,369,8.883,397,3.57,404,5.757,426,4.927,450,14.822,607,11.672,682,6.72,771,7.264,1044,9.599,1050,7.079,1305,21.707,1306,16.898,1307,15.646]],["keywords/89",[]],["title/90",[11,311.729,106,416.425,1308,736.511]],["content/90",[3,2.447,6,6.986,8,5.474,11,6.885,14,5.252,19,3.49,22,1.964,24,3.921,25,4.296,70,6.09,83,8.32,106,7.352,227,4.867,253,15.485,303,8.645,312,6.479,343,5.622,363,7.798,368,5.51,375,8.32,385,4.964,389,8.015,404,5.157,607,10.136,628,11.919,658,8.095,809,11.33,901,7.292,1050,8.462,1091,8.32,1285,9.007,1307,14.017,1308,9.745,1309,12.686,1310,10.315,1311,11.919,1312,9.098,1313,9.623,1314,20.199,1315,9.508]],["keywords/90",[]],["title/91",[268,426.353,397,241.681,607,510.125]],["content/91",[1,5.442,24,4.442,66,3.786,89,3.695,207,7.339,219,7.757,227,5.513,268,8.999,281,3.953,312,7.339,340,3.817,364,9.657,397,3.622,404,7.465,423,9.915,448,5.968,515,8.774,607,10.768,619,13.378,620,14.825,658,6.872,666,7.757,950,15.877,956,9.915,1091,9.424]],["keywords/91",[]],["title/92",[120,617.512,607,614.573]],["content/92",[2,1.333,3,2.069,4,6.828,24,3.317,83,7.037,89,3.881,119,7.404,120,10.671,127,3.125,162,5.298,175,6.983,181,5.364,194,8.352,222,2.032,227,5.79,263,3.931,270,4.005,277,4.392,283,4.805,303,5.48,304,13.411,305,15.256,320,6.35,323,7.949,343,4.755,383,7.037,421,7.094,447,5.073,574,5.821,607,11.552,658,7.218,810,5.764,834,8.042,847,4.805,1290,7.473,1299,7.776,1309,8.042,1315,8.042,1316,18.009,1317,22.603,1318,12.805,1319,11.856,1320,11.856,1321,18.009,1322,12.805,1323,12.805,1324,12.805,1325,18.009,1326,7.212,1327,11.231,1328,18.009,1329,12.805,1330,12.805,1331,10.765,1332,12.805]],["keywords/92",[]],["title/93",[268,645.896]],["content/93",[]],["keywords/93",[]],["title/94",[1,390.556]],["content/94",[2,0.93,3,3.201,9,5.756,11,1.428,13,3.986,14,1.819,15,6.976,18,1.998,19,3.89,20,5.157,22,1.846,24,4.015,25,1.488,30,5.761,31,4.006,35,5.913,36,3.439,43,3.627,52,3.625,64,5.422,66,1.158,79,5.855,106,1.908,113,3.649,123,4.148,162,2.169,168,1.059,172,4.356,185,1.83,186,4.823,216,2.206,217,2.737,224,1.569,226,1.181,237,3.878,261,3.32,268,8.426,277,4.176,291,2.453,303,5.003,343,1.947,360,5.237,374,3.309,377,4.575,422,4.252,425,4.128,426,2.607,428,5.112,432,2.349,436,3.924,448,1.825,464,2.24,466,3.151,467,3.625,488,3.572,490,1.463,495,6.647,504,2.632,515,2.683,551,2.126,569,4.636,571,3.763,599,3.86,614,3.333,618,8.391,619,9.983,620,7.176,666,8.588,676,2.569,685,5.999,717,6.892,788,3.119,835,2.498,846,4.307,849,1.96,858,6.583,926,4.636,956,8.963,968,4.019,969,6.418,1038,3.333,1039,3.694,1055,4.599,1234,3.572,1315,5.615,1333,5.243,1334,5.243,1335,4.854,1336,8.218,1337,5.684,1338,5.243,1339,5.243,1340,5.243,1341,4.408,1342,4.128,1343,5.243,1344,3.184,1345,5.243,1346,5.243,1347,5.243,1348,3.004,1349,9.827,1350,6.092,1351,4.599,1352,3.572,1353,7.256,1354,4.599,1355,3.119,1356,5.243,1357,4.854,1358,5.243,1359,5.684,1360,5.243,1361,5.243,1362,7.256,1363,6.759,1364,3.375]],["keywords/94",[]],["title/95",[616,351.477,1273,846.169]],["content/95",[2,2.358,8,6.538,22,1.758,79,4.88,145,8.431,172,6.738,209,10.866,222,2.869,223,3.96,224,2.574,228,5.021,268,8.444,325,8.661,421,10.016,616,4.61,619,10.016,666,10.25,708,16.741,841,9.572,1255,13.86,1336,10.757,1365,13.86,1366,13.532,1367,14.674,1368,11.957]],["keywords/95",[]],["title/96",[1336,1031.201]],["content/96",[3,2.092,10,11.356,15,6.17,22,1.259,40,8.231,42,6.134,49,3.331,73,4.478,79,5.657,113,3.048,155,8.272,172,4.825,185,4.52,224,1.471,265,7.556,266,6.168,268,8.465,269,9.123,277,3.827,325,6.202,335,2.917,428,4.792,481,7.948,518,5.035,545,8.688,557,5.692,632,5.801,666,5.857,670,10.194,956,7.486,1292,9.926,1336,14.751,1359,8.231,1369,10.508,1370,11.356,1371,12.947,1372,12.947,1373,11.988,1374,12.947,1375,18.15,1376,18.15,1377,18.15,1378,18.15,1379,11.356,1380,15.92,1381,14.291,1382,12.947,1383,12.947,1384,12.947,1385,12.947,1386,12.947,1387,12.947,1388,10.885,1389,12.947,1390,12.947,1391,8.335]],["keywords/96",[]],["title/97",[172,513.649,956,796.976]],["content/97",[1,2.885,2,1.333,3,2.911,7,5.172,11,4.907,15,3.187,18,2.862,22,1.751,24,4.665,25,3.634,79,4.861,89,2.759,136,4.943,155,5.054,168,2.585,172,8.876,185,4.47,216,5.387,224,1.455,261,6.689,262,5.529,263,5.529,268,6.711,269,9.023,291,3.514,303,5.48,312,5.48,334,5.276,335,2.885,339,15.705,360,5.737,490,3.573,551,5.192,571,9.192,614,8.14,618,9.192,777,7.544,858,7.212,906,5.737,956,13.07,964,6.552,976,5.504,1008,8.725,1170,10.082,1211,7.544,1212,6.983,1234,12.272,1336,7.618,1337,8.14,1391,8.243,1392,8.868,1393,9.277,1394,12.805,1395,10.765,1396,8.243,1397,10.392,1398,10.765,1399,8.725,1400,8.725]],["keywords/97",[]],["title/98",[7,556.712,79,372.057]],["content/98",[7,8.321,15,2.612,20,3.491,22,2.003,49,2.7,67,4.999,79,6.228,106,8.013,113,5.431,136,4.051,163,3.491,173,6.983,185,8.055,224,1.192,225,7.512,263,3.222,266,7.429,270,4.878,282,3.539,283,3.938,324,5.143,334,6.426,357,4.919,364,5.91,391,9.574,396,4.36,404,5.313,411,5.556,421,5.814,425,8.262,426,3.06,439,5.556,440,8.53,447,4.158,458,4.635,464,2.629,465,6.174,490,2.928,493,8.316,528,6.845,606,9.101,631,6.243,788,6.243,846,5.055,887,7.394,925,8.502,930,8.316,941,8.822,1175,6.307,1204,6.013,1293,7.533,1336,6.243,1401,4.868,1402,10.494,1403,10.494,1404,9.204,1405,10.494,1406,8.822,1407,9.716,1408,10.494,1409,10.494,1410,8.517,1411,10.494,1412,9.574,1413,9.716,1414,10.494,1415,10.494,1416,10.494,1417,9.716,1418,9.204,1419,9.716,1420,10.494,1421,10.494,1422,8.517,1423,8.517]],["keywords/98",[]],["title/99",[1401,804.016]],["content/99",[2,1.386,3,2.152,11,3.629,19,3.07,22,2.069,42,6.31,79,6.523,102,7.208,119,7.701,127,3.251,155,7.306,172,7.929,176,10.486,192,6.605,221,9.294,225,6.415,238,7.378,277,4.848,312,5.7,329,5.179,399,2.721,430,7.501,447,9.11,457,5.967,458,5.883,465,6.141,606,7.772,614,11.768,627,4.71,631,7.924,666,6.025,787,8.808,792,5.488,813,7.378,873,6.276,956,7.701,1030,9.56,1066,8.365,1401,10.667,1407,12.331,1424,11.196,1425,12.331,1426,13.318,1427,13.318,1428,11.196,1429,12.331,1430,13.318,1431,13.318,1432,13.318,1433,13.318,1434,13.318,1435,11.196,1436,10.486]],["keywords/99",[]],["title/100",[1337,1101.797]],["content/100",[2,1.607,3,2.495,8,3.744,11,5.03,22,1.007,24,2.682,25,2.938,40,9.815,47,4.684,52,4.198,66,4.076,69,4.308,75,6.042,79,4.168,120,4.639,163,3.445,168,4.635,172,6.88,188,6.754,192,5.135,213,6.356,214,4.932,216,4.356,224,1.754,251,6.106,261,5.734,262,6.666,268,8.158,299,10.879,312,4.431,335,4.612,338,5.406,339,9.815,340,2.305,360,6.917,362,6.288,374,3.832,377,5.298,385,6.055,411,5.482,425,14.537,439,5.482,440,4.011,443,6.042,532,5.736,551,4.198,552,5.333,557,4.552,563,5.987,568,3.954,608,6.042,611,6.847,618,7.432,698,8.006,770,7.582,777,6.1,835,7.355,846,4.988,858,5.831,897,3.912,956,5.987,964,7.901,1198,7.296,1234,7.055,1237,5.369,1336,13.024,1337,15.539,1437,8.403,1438,10.354,1439,10.354,1440,10.354,1441,10.354,1442,5.783,1443,4.595,1444,10.354]],["keywords/100",[]],["title/101",[546,684.084]],["content/101",[1,3.164,2,1.461,22,1.867,43,3.687,59,6.202,63,10.283,66,4.239,67,6.689,79,5.182,90,12.316,110,6.582,118,10.764,191,8.273,214,6.689,216,9.203,219,6.352,224,1.595,263,4.311,277,2.96,287,6.009,320,6.964,325,6.726,335,3.164,404,6.541,422,4.322,495,7.082,515,7.185,517,11.056,546,8.635,562,9.286,578,7.543,579,6.383,666,6.352,722,9.159,779,8.528,780,10.079,829,6.321,1121,6.689,1336,11.423,1443,6.231,1445,13.528,1446,14.041,1447,10.764,1448,14.041,1449,10.079,1450,11.056,1451,13.001,1452,14.041,1453,7.657,1454,14.041,1455,8.439,1456,10.764,1457,13.001,1458,14.041,1459,13.001]],["keywords/101",[]],["title/102",[619,960.186]],["content/102",[2,1.488,3,3.142,7,5.776,11,3.896,19,5.091,22,1.39,79,3.86,106,5.205,157,11.606,180,6.928,192,9.641,195,1.959,221,7.18,224,1.624,229,5.991,244,6.566,266,6.813,268,8.831,277,4.098,315,12.022,325,6.85,332,8.982,489,6.739,493,7.626,509,8.425,561,9.206,569,7.415,601,6.634,614,9.091,619,14.162,666,6.469,694,12.022,699,10.077,700,9.744,796,10.703,812,6.407,908,5.137,943,10.077,951,12.543,1397,11.606,1460,14.3,1461,12.022,1462,14.3,1463,12.543,1464,12.543,1465,14.3,1466,10.473,1467,10.473,1468,12.543,1469,14.3]],["keywords/102",[]],["title/103",[620,1064.028]],["content/103",[2,1.37,24,5.478,49,3.388,120,5.899,147,7.073,162,5.448,198,9.662,225,8.847,251,3.928,268,7.881,270,4.119,277,4.459,281,3.035,283,4.941,422,7.408,526,3.737,537,9.452,556,5.736,557,5.789,569,6.828,597,7.545,599,5.685,601,8.519,606,10.718,609,9.643,610,7.997,619,10.174,620,14.774,625,9.865,641,5.763,650,13.444,704,5.197,705,8.835,837,8.174,943,9.278,959,8.27,967,12.192,1026,6.971,1076,9.119,1108,9.855,1204,7.545,1470,9.855,1471,9.119,1472,11.549,1473,13.167,1474,13.167,1475,13.167,1476,13.167,1477,13.167,1478,11.549,1479,13.167,1480,13.167,1481,6.971,1482,12.192]],["keywords/103",[]],["title/104",[214,825.695]],["content/104",[22,1.718,40,11.231,89,3.807,109,10.311,155,6.973,158,12.939,207,7.562,214,10.639,224,2.007,263,5.424,268,6.584,408,7.529,422,6.874,437,9.041,569,9.162,616,4.505,619,9.788,620,10.846,650,11.231,777,10.409,788,10.512,849,6.607,908,6.347,943,12.449,1483,17.668,1484,14.853,1485,17.668,1486,13.911,1487,15.497,1488,9.491]],["keywords/104",[]],["title/105",[666,784.059]],["content/105",[2,0.943,3,3.791,13,2.005,25,4.83,37,6.505,43,2.38,49,3.591,66,2.001,69,5.335,70,3.646,75,5.289,79,6.133,87,3.765,89,1.953,94,6.081,95,12.74,113,3.285,136,3.499,161,3.524,162,3.75,173,3.401,181,3.797,186,7.069,195,1.242,198,4.141,202,6.276,213,5.564,214,6.649,216,3.813,219,6.314,220,3.845,224,1.029,261,3.366,268,7.694,270,2.835,277,4.79,291,3.83,304,8.985,305,6.637,312,3.879,320,4.495,353,5.564,364,5.104,367,3.437,369,4.764,374,3.354,377,4.638,385,2.972,399,1.851,410,5.447,416,4.699,435,4.608,457,4.06,495,6.279,517,7.136,518,3.524,561,5.834,575,2.174,666,11.312,719,4.981,777,5.339,799,7.355,882,12.242,956,5.24,959,5.692,963,7.619,1044,5.148,1121,6.649,1148,10.7,1187,5.761,1337,5.761,1359,10.82,1393,4.668,1489,9.063,1490,6.081,1491,8.391,1492,9.063,1493,7.619,1494,9.063,1495,8.391,1496,7.949,1497,6.783,1498,9.063,1499,9.063,1500,9.063,1501,9.063,1502,9.063,1503,9.063,1504,13.957,1505,13.957,1506,13.957,1507,6.386,1508,13.957,1509,7.355]],["keywords/105",[]],["title/106",[277,365.403]],["content/106",[2,1.488,3,3.83,11,6.018,43,3.755,54,8.123,64,10.993,65,6.501,79,5.961,102,10.521,174,8.123,181,8.144,186,6.871,191,8.425,231,5.709,237,6.202,261,5.311,268,7.244,277,5.39,290,6.147,379,9.596,391,8.779,418,11.26,488,15.049,490,3.99,491,8.982,494,7.415,495,7.171,505,7.271,552,7.366,666,8.794,681,7.466,703,11.606,735,9.328,738,10.077,760,11.26,920,7.518,1510,11.606,1511,13.241,1512,12.543]],["keywords/106",[]],["title/107",[1359,1101.797]],["content/107",[1,2.419,2,1.771,7,4.336,10,11.231,13,4.825,14,4.443,15,5.041,16,0.677,18,1.047,19,3.337,22,1.044,25,3.634,42,3.845,49,2.762,52,4.353,63,3.43,64,2.173,71,5.553,75,2.733,79,5.887,83,5.9,89,1.009,92,5.709,106,1.705,113,3.014,115,1.745,128,5.037,139,3.726,147,2.516,156,3.191,159,3.687,165,3.59,181,1.962,185,3.748,186,1.457,188,3.055,195,0.642,202,3.243,214,3.866,216,6.672,217,10.234,220,3.443,221,2.351,227,1.506,229,3.399,235,4.18,241,1.946,268,4.772,269,3.3,270,2.538,277,4.686,294,2.941,295,2.445,304,3.015,305,3.43,312,3.473,329,1.821,340,1.042,343,3.014,345,3.519,358,2.684,364,6.046,386,2.309,404,1.596,408,1.996,421,2.594,426,3.131,428,3.003,440,1.814,455,2.462,457,3.635,464,1.173,465,1.554,466,6.452,467,1.899,485,2.04,491,2.941,495,6.643,516,2.616,518,1.821,526,2.303,537,3.362,546,1.848,551,3.29,552,2.412,562,3.097,576,3.59,579,2.129,601,2.173,613,3.43,632,2.098,639,2.875,659,3.143,664,2.941,666,9.424,682,1.863,692,5.725,709,3.191,711,3.097,717,2.337,719,2.574,722,3.055,760,3.687,779,2.844,780,3.362,805,3.3,807,2.941,846,3.909,873,3.824,901,2.256,925,3.707,929,4.152,956,12.851,976,2.013,1038,2.977,1039,7.565,1066,2.941,1096,7.513,1309,2.941,1336,2.786,1359,16.224,1364,3.015,1370,11.231,1373,7.513,1393,2.412,1406,3.937,1472,4.108,1513,4.108,1514,4.336,1515,4.683,1516,5.293,1517,4.683,1518,13.049,1519,8.453,1520,4.108,1521,3.801,1522,8.114,1523,4.683,1524,4.683,1525,4.683,1526,4.683,1527,4.683,1528,4.683,1529,8.114,1530,7.117,1531,8.114,1532,7.117,1533,8.114,1534,8.114,1535,1.821,1536,4.683,1537,6.389,1538,5.224,1539,7.862,1540,7.117,1541,7.513,1542,4.683,1543,4.683,1544,4.683,1545,3.801,1546,4.108,1547,4.683,1548,4.108,1549,3.243,1550,3.362,1551,3.143,1552,3.015,1553,8.114,1554,2.977,1555,3.505,1556,4.683]],["keywords/107",[]],["title/108",[956,1002.17]],["content/108",[2,1.839,3,2.855,75,10.311,79,6.61,192,8.762,214,8.417,216,7.433,261,6.562,268,6.584,291,4.848,312,7.562,364,9.951,514,12.939,557,7.768,575,4.239,666,11.078,722,11.525,777,10.409,792,7.28,956,14.877,1044,10.036,1148,13.545,1393,9.101,1491,16.359,1557,17.668]],["keywords/108",[]],["title/109",[71,597.791,495,508.435]],["content/109",[3,3.397,8,4.708,13,4.031,22,1.266,25,3.695,43,4.784,49,3.35,69,3.633,71,10.394,79,5.674,89,3.927,152,7.046,175,7.1,186,7.084,199,7.671,216,5.477,217,6.797,219,5.89,220,8.919,268,8.485,277,5.053,328,12.055,330,6.152,345,7.903,394,5.833,420,9.535,444,9.535,495,8.841,522,8.277,579,5.919,666,8.243,676,6.381,764,9.346,871,6.578,963,10.945,1083,9.346,1256,9.346,1267,5.524,1359,11.583,1362,10.567,1447,9.981,1558,10.945,1559,8.493,1560,10.945,1561,8.277,1562,13.02,1563,13.02,1564,12.055]],["keywords/109",[]],["title/110",[35,911.566,186,428.833]],["content/110",[2,1.461,3,3.103,8,3.303,22,0.888,35,16.286,43,3.687,47,4.132,49,2.35,54,7.976,60,5.102,71,3.961,78,4.981,79,5.182,89,3.026,100,6.041,107,4.769,180,4.425,186,7.795,191,5.381,208,5.809,214,4.351,220,3.875,261,5.215,268,3.404,270,6.005,277,4.804,281,2.106,283,3.427,289,4.194,291,2.506,296,3.592,312,3.909,320,4.53,324,4.476,383,7.717,385,2.995,421,5.06,430,5.144,438,5.67,455,7.382,481,8.62,495,5.179,504,4.586,510,8.457,520,8.354,540,4.425,551,3.704,557,4.016,562,9.286,563,5.281,564,6.041,575,2.191,602,7.185,605,4.503,666,6.352,676,4.476,692,4.871,718,7.413,721,4.503,722,5.958,739,5.737,755,7.679,777,5.381,816,5.06,858,5.144,860,7.599,909,7.842,966,5.958,1007,4.769,1085,6.436,1187,5.806,1291,7.413,1355,5.434,1396,5.88,1516,5.958,1560,7.679,1565,5.806,1566,8.012,1567,10.764,1568,9.134,1569,6.326,1570,7.002,1571,7.679,1572,8.012,1573,9.134,1574,9.134,1575,9.134,1576,9.134,1577,9.134,1578,19.199,1579,10.764,1580,7.192,1581,7.002,1582,8.012,1583,9.134,1584,9.134,1585,7.413,1586,7.413,1587,9.134,1588,9.134]],["keywords/110",[]],["title/111",[186,428.833,1362,1118.642]],["content/111",[3,3.93,36,8.772,43,4.001,54,8.655,79,6.564,83,8.374,115,5.678,195,2.088,215,10.077,218,9.354,229,6.383,237,6.609,261,5.659,270,4.766,277,5.127,360,6.827,363,7.849,495,9.341,666,11.455,800,10.938,858,11.426,901,7.34,920,8.01,968,11.681,1348,8.732,1362,20.552,1490,10.225,1589,11.405,1590,10.225]],["keywords/111",[]],["title/112",[214,656.634,777,812.067]],["content/112",[2,1.697,15,4.058,18,2.491,22,1.084,69,3.11,79,4.401,92,4.971,93,7.855,100,7.373,173,4.183,188,7.271,192,5.529,198,5.093,202,7.72,212,10.636,214,12.134,216,9.495,217,10.065,237,7.072,266,5.311,267,7.176,268,8.411,277,2.35,279,3.666,291,3.059,321,5.34,335,4.78,340,2.481,368,4.058,394,4.994,396,4.631,408,4.75,411,5.902,457,4.994,495,4.112,546,4.4,557,4.901,559,7.596,568,4.257,573,6.921,574,5.068,605,5.496,619,6.176,666,5.043,678,6.844,705,7.48,719,6.127,720,7.271,722,7.271,733,7.855,777,13.891,779,6.77,849,4.169,956,6.446,975,7.48,1196,6.388,1280,7.48,1300,8.344,1336,9.701,1391,10.497,1393,5.742,1456,8.546,1510,9.047,1591,8.777,1592,8.546,1593,11.11,1594,6.226,1595,10.322,1596,9.047,1597,11.148,1598,11.586,1599,9.372,1600,9.372]],["keywords/112",[]],["title/113",[1601,1297.249]],["content/113",[2,2.162,3,2.058,7,5.144,11,4.888,22,2.019,73,4.405,103,5.498,147,6.841,155,5.026,159,10.027,161,6.976,165,9.763,173,4.778,209,7.654,216,5.357,219,5.761,251,3.799,268,6.686,270,5.612,291,3.494,345,5.523,364,10.104,383,6.999,394,5.705,396,5.29,468,10.782,481,7.818,512,6.892,526,5.091,537,12.878,544,10.629,547,10.699,562,8.422,569,6.603,608,7.432,659,8.545,664,7.998,676,6.241,682,5.065,720,11.702,777,7.503,807,7.998,810,5.733,956,13.744,981,9.141,1273,7.818,1336,7.577,1365,9.763,1513,11.17,1516,8.307,1552,8.198,1601,9.531,1602,12.734,1603,13.045,1604,8.973,1605,12.734,1606,12.734,1607,12.734,1608,12.734,1609,12.734]],["keywords/113",[]],["title/114",[214,465.863,216,411.382,777,576.139,1601,731.918]],["content/114",[3,2.721,15,5.717,22,1.922,43,3.059,73,4.03,79,4.545,92,5.195,103,5.03,119,6.736,155,4.598,168,2.352,173,4.372,185,6.902,187,9.794,210,10.219,214,10.944,221,5.849,223,3.687,232,7.002,258,2.325,261,4.327,262,5.03,268,8.561,270,3.644,291,5.943,296,4.581,307,5.668,317,8.068,334,4.8,339,7.406,360,5.219,438,7.233,442,8.72,464,2.919,570,7.705,616,2.971,690,7.406,704,4.598,777,11.648,925,5.323,929,5.962,956,9.735,968,8.931,1090,7.5,1336,6.931,1363,6.736,1443,5.17,1571,9.794,1601,8.72,1610,8.72,1611,6.931,1612,10.787,1613,25.753,1614,10.866,1615,10.787,1616,9.919,1617,10.787,1618,11.472,1619,10.787,1620,9.794,1621,7.075,1622,5.962]],["keywords/114",[]],["title/115",[335,310.59,1601,1031.638]],["content/115",[2,1.767,3,3.084,11,2.46,13,3.079,22,1.353,43,2.37,49,3.58,55,6.757,68,4.349,79,4.583,89,2.999,103,3.898,108,4.45,139,6.39,166,5.371,168,1.823,185,5.928,187,7.589,209,5.426,214,4.301,216,3.798,221,4.532,223,4.514,232,5.426,251,4.151,258,1.802,261,5.168,262,8.238,268,7.681,270,5.311,283,3.387,284,2.714,307,3.039,312,3.864,316,3.537,320,4.477,325,4.325,334,3.72,335,4.644,360,6.234,364,5.084,379,6.058,394,6.234,404,3.076,428,3.341,445,2.764,464,3.486,468,8.363,490,2.519,493,4.814,495,3.33,515,4.62,538,5.739,544,8.689,546,3.563,547,8.746,569,4.681,570,11.23,704,3.563,746,4.084,782,7.327,816,5.001,823,3.988,925,6.357,929,7.121,956,9.818,1030,6.48,1044,5.128,1090,5.812,1121,4.301,1187,5.739,1258,6.757,1294,6.611,1355,5.371,1363,5.22,1393,4.65,1443,7.535,1472,7.918,1554,5.739,1601,6.757,1603,8.74,1610,6.757,1611,8.279,1612,8.359,1614,9.332,1615,8.359,1616,5.319,1617,8.359,1618,6.151,1619,8.359,1623,5.604,1624,4.746,1625,7.108,1626,6.252,1627,7.108,1628,5.812,1629,6.151,1630,9.027,1631,7.918,1632,9.027,1633,5.371,1634,6.058,1635,8.359,1636,7.918,1637,5.739]],["keywords/115",[]],["title/116",[7,556.712,59,608.821]],["content/116",[]],["keywords/116",[]],["title/117",[196,534.023,212,899.071]],["content/117",[2,2.423,3,2.216,7,5.538,15,4.701,18,3.064,22,2.101,59,6.056,103,8.155,113,3.227,130,6.172,195,3.19,196,10.208,212,17.187,216,9.795,222,2.175,223,3.003,268,5.109,324,6.719,343,5.092,377,7.016,449,9.495,495,6.967,572,8.327,575,3.289,682,5.453,770,10.041,849,5.127,906,6.142,1159,9.661,1326,7.722,1391,8.826,1443,6.084,1551,9.2,1638,10.795,1639,9.842,1640,12.695,1641,13.71,1642,18.887,1643,6.496,1644,13.71,1645,12.695]],["keywords/117",[]],["title/118",[223,379.576]],["content/118",[]],["keywords/118",[]],["title/119",[803,924.222]],["content/119",[2,2.505,7,5.997,8,7.21,15,4.963,16,2.881,19,3.423,22,2.189,25,5.659,36,5.711,43,3.899,89,4.297,136,5.732,168,2.998,195,2.034,207,6.355,219,6.717,223,5.27,224,2.557,244,6.818,258,3.979,261,5.514,287,6.355,340,3.305,354,3.663,355,3.82,397,3.137,399,3.033,422,4.571,437,10.204,602,7.598,689,4.173,693,3.881,711,9.82,715,16.183,803,10.633,805,10.463,807,9.326,808,6.327]],["keywords/119",[]],["title/120",[1,390.556]],["content/120",[1,2.864,2,1.323,3,2.896,7,2.374,8,2.126,13,1.301,15,6.938,16,2.149,18,4.253,19,3.817,20,5.51,22,0.572,24,2.551,25,2.795,30,5.295,31,3.285,36,3.788,42,2.785,43,4.348,49,1.513,52,2.384,67,2.801,69,1.64,70,3.963,71,2.55,79,6.082,89,1.267,113,3.501,115,2.191,123,4.569,127,1.435,168,2.566,186,4.627,219,2.659,222,2.017,223,4.934,224,2.035,226,1.325,227,1.89,237,4.272,258,3.798,261,4.721,263,3.024,277,3.135,282,1.118,291,2.703,312,7.088,360,2.634,368,3.585,377,5.04,397,3.498,399,4.603,413,2.713,415,3.158,426,1.714,427,2.133,428,5.504,438,3.65,464,2.468,469,2.169,485,2.561,490,2.748,495,7.904,529,3.57,556,2.561,557,2.585,569,3.048,608,3.431,618,4.22,676,2.881,685,6.609,693,1.537,706,6.711,707,4.383,717,7.42,728,3.283,829,2.646,840,4.305,841,3.112,842,2.003,843,5.443,844,4.942,848,4.942,849,2.198,897,2.221,926,5.107,1118,4.4,1124,3.231,1267,2.494,1348,3.369,1349,10.686,1350,6.711,1351,5.156,1352,4.006,1353,7.994,1354,5.156,1362,12.07,1363,7.35,1364,3.785,1490,3.945,1590,3.945,1646,4.771,1647,5.443,1648,8.639,1649,5.879]],["keywords/120",[]],["title/121",[223,250.557,283,429.303,290,491.801]],["content/121",[2,2.03,3,3.838,11,2.188,13,3.485,15,3.921,18,1.795,19,2.927,20,2.672,22,0.781,25,2.279,43,2.109,49,2.066,52,3.256,54,4.561,59,3.547,67,3.826,69,3.543,70,3.231,79,6.259,86,5.831,87,3.336,103,3.467,107,4.192,118,6.156,119,4.643,155,6.218,162,3.322,168,3.615,186,3.951,191,4.731,195,1.1,214,6.05,223,5.305,258,4.335,261,2.982,270,2.512,277,1.693,282,1.527,287,3.437,290,3.452,291,4.913,298,4.083,307,5.303,316,3.146,335,1.81,360,3.598,387,3.89,397,4.12,399,1.64,400,3.407,417,4.523,445,2.459,467,3.256,469,2.962,518,3.123,536,5.105,540,3.89,542,4.314,544,6.499,547,6.542,557,3.531,562,8.399,563,7.343,605,6.261,664,7.976,722,5.238,732,6.517,743,7.556,746,3.633,747,5.311,774,5.658,777,4.731,871,4.057,897,4.799,901,3.868,925,3.669,929,4.109,930,4.282,938,4.778,976,5.459,1057,6.323,1083,9.116,1110,4.413,1443,3.564,1601,6.01,1611,4.778,1646,6.517,1650,6.01,1651,6.751,1652,8.03,1653,6.751,1654,6.156,1655,8.03,1656,8.03,1657,12.699,1658,19.504,1659,11.1,1660,6.517,1661,6.517,1662,7.044,1663,8.03,1664,15.753,1665,8.03,1666,15.753,1667,12.699,1668,8.03,1669,7.044,1670,6.517]],["keywords/121",[]],["title/122",[447,546.078,465,457.256]],["content/122",[2,1.519,3,2.36,7,4.682,13,1.585,15,6.655,18,3.263,19,4.544,20,3.857,22,2.101,30,2.291,31,3.773,47,3.241,49,1.843,66,2.559,70,2.882,79,4.973,88,4.306,106,5.314,108,3.532,113,1.686,132,5.815,155,2.828,163,3.857,168,3.387,172,6.252,185,5.097,219,3.241,223,4.035,224,2.357,228,1.989,229,4.856,230,2.426,254,3.575,258,3.348,263,6.052,270,3.626,277,1.51,283,2.688,307,2.412,326,4.263,334,4.776,335,1.614,391,4.398,397,1.513,399,1.464,411,3.793,420,5.247,429,4.448,432,3.21,440,4.491,445,2.194,447,6.646,457,6.541,458,3.165,464,2.904,465,8.457,490,1.999,491,7.281,503,10.536,514,5.247,552,3.69,579,3.257,597,4.106,608,4.181,632,5.193,667,4.882,748,3.848,771,3.08,796,5.362,807,4.5,809,5.362,816,3.969,818,3.376,829,3.225,833,3.969,840,5.247,846,5.584,848,6.023,897,2.707,910,5.048,921,9.247,1043,4.181,1309,4.5,1326,4.035,1487,6.284,1581,5.492,1646,5.815,1647,6.634,1650,5.362,1671,10.733,1672,6.634,1673,6.634,1674,6.634,1675,7.164,1676,7.164,1677,6.023,1678,5.815,1679,3.29,1680,6.023,1681,6.284,1682,7.164,1683,5.362,1684,4.221,1685,6.284,1686,7.164,1687,7.164]],["keywords/122",[]],["title/123",[64,639.394,488,939.177]],["content/123",[3,3.47,11,3.692,12,11.886,13,2.998,14,4.702,15,6.052,20,4.508,49,3.486,64,12.373,65,6.16,71,5.877,89,2.92,113,3.19,115,5.05,168,2.736,223,4.103,226,3.053,258,2.704,263,4.16,270,4.239,277,3.95,284,4.074,397,2.862,399,2.768,428,5.015,445,4.149,447,5.369,448,4.716,457,6.071,458,5.985,488,15.785,490,3.781,491,8.511,495,4.999,526,3.845,540,9.076,632,10.894,897,5.12,917,10.388,1555,10.142,1646,10.998,1688,13.551,1689,18.735,1690,13.551,1691,13.551,1692,13.551,1693,13.551]],["keywords/123",[]],["title/124",[1,257.805,413,528.008,546,451.561]],["content/124",[2,2.377,3,3.168,13,2.539,42,5.438,49,4.285,67,5.468,72,7.296,73,5.761,79,5.805,89,2.473,103,4.956,110,5.38,115,4.277,139,7.648,145,7.767,155,4.53,186,5.182,219,5.192,223,4.293,251,3.424,258,4.753,262,10.284,276,7.702,283,4.307,291,4.57,327,7.389,333,7.487,335,4.417,369,6.034,391,10.225,394,5.142,404,5.674,413,5.297,468,10.01,492,8.239,495,4.234,526,3.257,542,6.165,544,5.873,547,5.912,570,7.591,579,5.218,605,5.658,634,7.591,673,9.649,680,8.088,686,8.406,688,10.067,777,6.762,791,6.762,813,6.359,836,6.898,847,4.307,860,6.212,1049,5.468,1077,8.406,1141,7.296,1302,7.821,1443,5.094,1554,7.296,1670,9.315,1694,10.627,1695,9.649,1696,7.702,1697,10.067,1698,11.478,1699,11.478,1700,11.478,1701,11.478,1702,7.126,1703,8.239]],["keywords/124",[]],["title/125",[291,378.221,1014,574.998]],["content/125",[2,2.408,3,2.347,13,4.346,15,3.615,22,2.055,29,5.926,36,3.672,42,4.523,49,3.737,69,2.664,73,3.302,79,6.009,108,4.706,155,3.768,163,3.176,173,5.45,175,5.206,188,6.227,195,1.99,205,9.907,207,4.086,214,10.069,223,3.85,224,1.65,244,4.383,251,2.848,258,4.618,262,4.122,283,3.582,291,6.544,297,4.033,307,7.494,323,5.926,325,6.957,335,2.151,345,4.14,353,5.861,358,5.47,382,5.166,411,5.054,418,7.516,429,5.926,438,5.926,445,2.923,467,5.889,490,2.664,515,4.885,531,6.406,544,10.053,546,3.768,547,9.055,594,4.257,597,5.47,603,4.428,608,8.476,616,2.434,664,5.996,677,4.257,690,6.069,792,3.934,823,4.217,829,4.298,847,3.582,1014,8.195,1211,5.624,1255,7.318,1326,5.377,1535,3.712,1593,9.896,1594,5.332,1622,4.885,1624,5.019,1643,4.523,1650,7.145,1704,8.025,1705,9.546,1706,9.546,1707,5.091,1708,4.651,1709,5.128]],["keywords/125",[]],["title/126",[22,73.669,222,120.229,223,165.947,399,154.791,1648,664.638,1710,543.929]],["content/126",[39,9.341,43,4.081,55,11.633,70,9.267,86,7.137,115,5.792,175,8.476,181,6.511,218,9.542,222,3.889,223,5.582,226,3.502,241,6.457,251,4.637,277,4.334,282,2.956,283,5.832,307,7.754,347,5.602,368,8.384,399,5.207,404,5.295,413,7.173,435,10.451,682,6.181,714,6.066,816,8.611,1121,7.405,1554,9.881,1648,13.633,1711,15.543]],["keywords/126",[]],["title/127",[489,816.797]],["content/127",[]],["keywords/127",[]],["title/128",[661,911.164]],["content/128",[3,3.698,13,4.063,14,4.569,15,6.204,25,6.001,67,6.273,70,7.389,79,6.904,113,4.978,174,7.479,227,4.233,231,5.257,262,5.685,274,6.922,385,4.318,421,7.294,443,7.684,468,11.038,489,6.205,504,6.611,579,5.986,661,11.118,676,6.453,681,6.874,749,6.53,752,7.195,788,7.834,925,9.662,991,11.069,1056,17.164,1057,10.367,1410,14.905,1712,13.167,1713,13.167,1714,17.005,1715,11.549,1716,5.872,1717,19.581,1718,17.005,1719,13.167,1720,18.365,1721,11.549]],["keywords/128",[]],["title/129",[749,859.577]],["content/129",[3,3.485,6,6.941,11,2.724,13,4,15,6.7,25,2.837,42,4.737,49,2.572,55,7.483,71,6.523,79,6.912,102,8.14,113,4.734,174,5.679,198,4.568,222,1.586,231,3.991,263,3.069,268,3.726,321,4.789,340,4.024,369,5.256,457,6.738,465,3.317,467,4.054,489,4.712,490,2.79,494,7.799,544,5.116,621,8.405,660,4.687,661,7.907,681,5.22,704,3.946,749,11.659,752,5.892,753,10.796,785,8.114,792,4.12,841,5.293,849,3.739,925,8.26,929,7.696,930,8.02,991,15.199,1056,19.633,1410,17.503,1453,5.452,1490,6.709,1594,5.584,1624,5.256,1714,13.926,1715,8.769,1717,9.257,1718,9.257,1721,8.769,1722,9.998,1723,6.812,1724,9.998,1725,9.998,1726,15.04,1727,9.998,1728,9.998,1729,9.257]],["keywords/129",[]],["title/130",[64,639.394,488,939.177]],["content/130",[1,3.674,3,2.635,15,6.215,64,11.583,79,6.364,89,3.514,263,6.512,272,8.344,284,4.902,488,14.454,489,7.684,749,12.384,752,6.388,925,7.45,930,8.695,991,17.833,1056,17.216,1410,19.135,1715,14.302,1716,5.213,1721,14.302,1729,15.098,1730,21.212,1731,9.607,1732,16.305]],["keywords/130",[]],["title/131",[1212,945.178]],["content/131",[127,5.323,268,8.128,489,10.278,540,10.566,578,11.715,1212,11.894,1733,20.194]],["keywords/131",[]],["title/132",[489,649.558,547,709.973]],["content/132",[3,3.481,13,3.015,14,8.058,22,1.829,73,4.715,79,6.269,127,3.327,161,5.3,220,5.783,222,2.163,270,4.264,300,8.891,317,9.439,394,6.106,396,5.663,441,10.732,464,6.105,489,11.484,547,11.963,579,6.196,661,11.324,696,8.774,748,7.322,749,11.518,752,5.34,925,10.611,930,7.268,1053,16.499,1298,9.014,1589,10.202,1603,11.814,1611,12.815,1614,7.491,1616,8.03,1618,9.287,1716,6.014,1734,13.63,1735,13.63]],["keywords/132",[]],["title/133",[421,633.815,621,961.816,1736,837.857]],["content/133",[3,2.242,14,6.607,15,6.103,22,2.275,25,3.937,43,3.643,73,4.799,79,6.316,87,7.911,115,5.17,237,9.429,270,4.34,303,5.938,312,5.938,320,6.881,421,10.549,489,11.938,522,8.82,569,7.194,579,6.307,596,8.82,616,3.538,661,12.301,749,9.444,752,7.46,925,6.339,929,7.1,1010,16.702,1053,12.169,1204,7.95,1355,8.255,1674,12.846,1737,10.16,1738,17.631,1739,12.169,1740,12.846,1741,13.874,1742,13.874,1743,13.874,1744,13.874,1745,9.31]],["keywords/133",[]],["title/134",[206,570.267,354,340.075]],["content/134",[]],["keywords/134",[]],["title/135",[22,111.229,354,282.279,355,294.361]],["content/135",[2,2.117,8,4.435,22,1.192,66,3.857,120,5.495,136,4.735,139,8.021,175,6.688,195,3.337,216,5.159,222,3.228,223,3.826,228,3.406,229,7.318,263,3.765,268,4.57,272,6.276,277,2.586,283,8.32,290,5.272,293,6.85,296,4.823,307,4.129,354,5.471,355,5.705,372,3.785,421,6.794,490,3.422,495,4.524,504,6.157,515,6.276,546,6.895,575,2.943,597,7.028,599,9.574,600,11.903,602,8.939,641,5.368,642,6.493,666,5.548,731,5.074,764,8.804,771,5.272,792,5.054,897,4.634,921,5.249,1090,7.895,1213,11.356,1621,7.448,1624,6.448,1746,12.264,1747,12.264,1748,6.046,1749,12.264,1750,12.264,1751,12.264,1752,12.264,1753,12.264,1754,9.954,1755,8,1756,10.311,1757,8.982]],["keywords/135",[]],["title/136",[1020,952.57]],["content/136",[2,2.479,22,2.316,36,8.272,66,3.677,69,4.647,154,10.864,160,7.808,241,6.92,246,9.303,279,5.478,340,3.707,349,9.72,352,6.209,374,6.165,504,8.362,526,6.759,564,11.015,602,8.523,692,8.882,719,9.154,894,10.225,1020,9.154,1150,5.797,1278,10.864,1758,11.736,1759,12.769,1760,12.769,1761,14.609,1762,10.115,1763,19.913,1764,16.656]],["keywords/136",[]],["title/137",[354,282.279,355,294.361,1765,694.819]],["content/137",[2,2.328,3,3.195,22,1.922,71,8.574,161,5.701,195,2.709,196,5.68,222,3.137,223,3.211,277,3.091,296,5.765,304,9.438,305,10.737,309,11.899,310,11.899,345,6.359,354,4.878,355,5.087,363,7.552,374,5.426,375,8.058,413,6.766,548,12.325,551,5.945,557,6.446,594,6.537,643,9.438,662,10.973,711,9.696,750,10.973,764,10.524,810,6.6,849,5.482,875,4.091,901,7.062,1018,9.99,1021,10.541,1042,8.999,1175,8.811,1198,10.331,1391,9.438,1765,8.904,1766,14.661,1767,13.575,1768,8.401,1769,13.575]],["keywords/137",[]],["title/138",[222,218.697,1042,554.539]],["content/138",[1,1.418,2,1.615,3,3.172,8,2.275,15,1.566,16,0.909,19,3.076,22,1.013,30,2.012,41,6.617,43,4.516,54,3.574,60,3.514,66,1.389,69,1.756,70,2.532,73,3.605,79,1.698,113,4.62,127,1.536,130,6.007,152,5.641,155,2.484,168,2.694,173,2.361,181,4.366,185,5.417,195,2.539,197,3.574,214,2.998,216,2.647,217,5.442,219,2.846,222,4.153,223,2.922,224,0.715,227,2.023,228,2.894,230,2.131,231,2.512,237,4.521,261,3.871,263,1.932,270,1.968,277,1.327,281,2.403,297,2.658,307,2.118,321,3.014,324,3.084,329,2.447,352,1.817,353,3.863,354,1.552,355,3.433,359,6.67,360,2.819,361,9.232,367,5.06,372,1.942,374,2.329,386,3.102,401,2.532,415,5.599,423,3.638,432,4.67,435,3.199,440,5.17,464,1.576,467,2.551,483,4.608,494,3.263,540,3.048,551,2.551,556,4.541,574,2.861,579,2.861,605,3.102,616,1.605,627,1.601,631,3.744,643,4.051,644,2.512,677,5.949,693,2.724,697,3.199,717,5.201,733,4.434,735,4.104,781,9.092,810,2.833,833,5.774,897,2.378,906,4.67,909,3.514,925,2.875,929,3.22,930,3.355,976,2.705,982,3.952,1007,6.966,1022,9.527,1042,6.243,1109,5.29,1159,4.434,1198,4.434,1211,3.707,1237,3.263,1256,4.517,1355,3.744,1393,3.241,1535,4.053,1559,6.799,1614,3.458,1616,3.707,1618,4.287,1638,4.954,1643,2.981,1659,4.434,1661,5.107,1680,5.29,1748,3.102,1770,4.608,1771,10.423,1772,5.826,1773,5.826,1774,5.826,1775,3.38,1776,5.519,1777,6.292,1778,6.292,1779,6.292,1780,5.519,1781,6.292,1782,5.519,1783,5.826,1784,4.287,1785,5.519,1786,5.519,1787,5.519,1788,5.519,1789,5.519,1790,5.519,1791,5.519,1792,5.107,1793,4.358,1794,3.952,1795,6.141,1796,3.821,1797,5.826,1798,4,1799,4.161,1800,3.38,1801,5.29,1802,7.633,1803,5.48,1804,5.826,1805,5.519,1806,5.519,1807,8.207,1808,4.104,1809,3.952]],["keywords/138",[]],["title/139",[3,184.904,222,181.529,372,353.108]],["content/139",[1,4.205,36,7.177,66,4.12,222,4.279,228,5.182,261,6.93,281,4.301,329,7.256,358,10.693,359,8.021,372,7.748,408,7.952,752,7.31,804,7.689,1042,10.1,1110,10.256,1810,11.584]],["keywords/139",[]],["title/140",[66,304.314,222,218.697]],["content/140",[1,3.456,3,2.479,30,4.904,42,7.267,66,5.052,87,6.372,185,5.355,195,2.101,222,4.29,223,4.462,224,2.315,228,5.658,229,6.425,241,6.372,261,5.696,281,3.536,295,10.638,307,5.163,329,7.924,345,6.652,354,3.784,355,3.946,359,6.593,677,6.839,752,6.009,804,6.32,855,11.232,897,5.796,1022,8.497,1024,9.874,1033,9.633,1042,8.198,1087,12.076,1810,9.522,1811,11.232,1812,9.315,1813,14.202]],["keywords/140",[]],["title/141",[3,222.763,1042,554.539]],["content/141",[1,1.65,2,1.228,3,3.949,8,2.648,16,1.058,19,1.688,22,0.712,41,7.348,43,4.892,49,3.035,60,4.09,79,1.977,102,3.963,109,4.273,113,3.999,130,5.311,152,6.385,155,2.89,168,3.761,173,2.748,181,3.067,185,5.173,186,2.278,195,2.728,197,4.159,208,3.03,211,4.447,216,3.08,217,6.159,220,3.107,222,2.351,223,1.604,227,2.354,228,2.033,231,2.923,237,3.176,241,3.042,244,3.362,261,4.382,263,2.248,268,7.42,281,2.72,297,3.094,324,3.589,326,4.357,343,4.382,352,2.114,353,4.495,354,1.807,355,3.812,359,3.148,360,3.281,361,4.357,363,3.772,367,4.474,386,3.61,408,3.12,423,4.234,432,5.286,435,3.723,438,4.546,439,3.877,440,2.837,464,1.834,467,2.969,494,3.797,556,3.19,607,3.265,627,1.863,677,3.265,682,2.912,693,1.914,707,2.525,715,5.943,717,3.654,733,5.16,735,4.776,749,3.631,781,11.577,810,3.296,814,4.655,833,6.536,875,2.043,897,2.767,906,5.286,909,4.09,925,3.345,929,3.747,930,3.905,968,5.613,976,3.148,982,4.599,1007,7.735,1022,9.412,1023,1.72,1042,4.747,1159,5.16,1211,4.314,1221,2.847,1237,8.81,1256,5.256,1393,3.772,1535,6.607,1559,7.696,1614,4.024,1616,4.314,1618,4.989,1638,5.765,1643,3.469,1659,5.16,1661,5.943,1680,6.156,1748,3.61,1770,5.362,1780,10.348,1782,6.423,1784,4.989,1785,6.423,1786,6.423,1787,6.423,1788,6.423,1789,10.348,1790,10.348,1791,10.348,1792,9.575,1793,5.071,1794,4.599,1795,4.314,1796,4.447,1799,4.843,1800,3.933,1801,6.156,1802,8.64,1803,6.202,1807,9.289,1814,6.78,1815,4.913,1816,7.322,1817,7.322,1818,7.322,1819,7.322]],["keywords/141",[]],["title/142",[223,301.858,1042,554.539]],["content/142",[1,1.445,2,1.634,3,3.024,8,2.319,15,1.596,16,0.927,19,3.118,22,1.03,30,2.051,41,6.707,43,4.563,54,3.643,60,3.582,69,1.79,79,1.731,113,4.871,127,1.565,130,6.088,155,2.531,168,3.17,173,2.407,181,4.436,185,4.722,186,4.885,195,2.563,197,3.643,214,3.055,216,2.698,217,5.528,219,2.901,222,1.018,223,5.751,224,0.729,227,2.062,228,2.94,230,2.172,231,2.561,237,4.593,261,3.933,263,1.969,270,2.006,281,2.441,297,2.71,307,2.159,321,3.072,324,3.143,352,1.852,353,3.937,354,1.582,355,3.48,359,5.814,360,2.873,361,6.3,367,5.128,372,1.98,374,2.374,386,3.162,401,2.58,413,2.96,423,3.709,432,4.744,435,3.261,440,5.24,464,1.607,467,2.601,494,3.326,540,3.107,551,2.601,556,4.613,579,2.916,605,3.162,616,1.636,627,1.632,631,3.816,643,4.129,644,2.561,677,6.03,693,2.768,697,3.261,717,5.284,733,4.519,735,4.184,781,9.215,810,2.887,833,5.866,897,2.424,901,3.09,906,4.744,909,3.582,925,2.93,929,3.282,930,3.42,976,2.757,982,4.028,1007,7.061,1022,9.627,1042,6.316,1109,5.392,1154,4.077,1159,4.519,1198,4.519,1211,3.779,1237,3.326,1256,4.604,1312,3.855,1355,3.816,1393,3.304,1535,4.118,1559,6.907,1614,3.525,1616,3.779,1618,4.37,1638,5.05,1643,3.039,1659,4.519,1661,5.205,1680,5.392,1748,3.162,1770,4.697,1772,5.939,1773,5.939,1774,5.939,1775,3.445,1776,5.626,1780,5.626,1782,5.626,1783,5.939,1784,4.37,1785,5.626,1786,5.626,1787,5.626,1788,5.626,1789,5.626,1790,5.626,1791,5.626,1792,5.205,1793,4.442,1794,4.028,1795,6.239,1796,3.895,1797,5.939,1798,4.077,1799,4.242,1800,3.445,1801,5.392,1802,7.755,1803,5.567,1804,5.939,1805,5.626,1806,5.626,1807,8.338,1808,4.184,1809,4.028,1814,5.939,1820,4.442,1821,6.414,1822,5.939,1823,6.414,1824,2.676,1825,6.414,1826,6.414]],["keywords/142",[]],["title/143",[223,301.858,372,425.406]],["content/143",[1,4.205,36,7.177,66,4.12,223,5.906,228,5.182,261,6.93,281,4.301,329,7.256,358,10.693,359,8.021,372,7.748,408,7.952,752,7.31,804,7.689,1042,10.1,1110,10.256,1810,11.584]],["keywords/143",[]],["title/144",[66,304.314,223,301.858]],["content/144",[1,3.053,2,1.41,3,3.93,7,5.473,16,1.958,22,1.317,25,3.845,30,4.333,47,6.13,66,4.136,69,3.781,89,2.92,136,5.231,161,7.285,185,4.731,222,3.858,223,5.508,224,2.128,228,3.763,229,5.677,258,2.704,261,6.958,277,2.857,281,3.124,294,8.511,295,9.781,297,5.725,307,4.562,359,8.053,373,9.727,397,2.862,408,5.774,413,8.646,488,9.233,511,6.491,532,7.507,602,9.587,658,5.431,677,6.042,752,5.308,804,5.584,842,4.617,845,11.392,1024,8.723,1042,7.538,1110,7.447,1827,13.551,1828,13.551,1829,13.551,1830,9.384]],["keywords/144",[]],["title/145",[222,181.529,228,317.695,1042,460.294]],["content/145",[113,4.734,195,2.755,207,8.608,217,10.5,222,4.117,228,6.717,259,13.929,359,8.646,422,6.191,897,7.6,1042,9.733,1810,12.486]],["keywords/145",[]],["title/146",[1021,649.558,1831,1009.408]],["content/146",[1,2.442,3,3.065,22,1.553,41,5.374,43,2.845,66,2.392,73,5.524,79,2.925,102,5.864,113,2.551,152,5.864,179,5.657,180,5.25,181,4.539,185,3.783,195,3.057,196,4.198,197,6.155,207,6.835,217,5.657,222,3.83,224,1.231,228,5.266,231,4.326,251,3.233,281,3.681,291,4.382,304,6.976,324,7.826,345,4.7,352,3.128,359,6.865,368,3.944,378,7.635,416,5.619,485,6.957,504,8.017,551,4.394,556,4.721,558,8.794,605,5.342,617,9.11,658,8.386,677,7.12,697,5.509,712,5.955,739,10.03,829,4.878,897,4.095,919,7.384,925,4.951,929,5.545,930,5.778,973,7.271,1007,5.657,1022,10.506,1024,10.28,1042,4.36,1453,5.909,1567,8.307,1614,5.955,1616,6.384,1618,10.881,1659,7.635,1748,5.342,1796,6.581,1799,7.166,1800,5.821,1807,8.532,1832,13.163,1833,9.505,1834,8.532,1835,8.11,1836,8.532,1837,5.407,1838,14.007]],["keywords/146",[]],["title/147",[255,782.945,1021,649.558]],["content/147",[1,4.961,166,13.099,222,3.493,255,12.506,897,8.319,1021,10.375]],["keywords/147",[]],["title/148",[3,184.904,228,317.695,1042,460.294]],["content/148",[3,4.162,113,4.654,195,3.28,207,8.461,217,10.322,228,6.648,259,13.692,359,8.499,422,6.086,897,7.47,1025,12.417,1042,9.632,1810,12.274]],["keywords/148",[]],["title/149",[1021,649.558,1831,1009.408]],["content/149",[1,2.234,3,4.066,8,3.584,13,3.306,22,0.964,24,2.568,41,4.916,43,2.603,66,2.189,73,3.429,79,5.405,102,5.365,106,3.608,113,2.333,160,4.647,179,5.175,180,4.802,181,4.152,185,3.461,195,2.944,196,3.84,197,5.631,207,6.395,217,5.175,222,1.573,228,4.995,230,3.357,231,3.957,251,2.957,268,5.569,281,3.445,291,4.101,304,6.381,324,7.324,345,4.299,352,2.862,359,7.732,368,3.608,378,6.985,416,5.14,464,2.483,485,6.51,504,4.977,551,4.019,556,6.51,558,8.045,605,4.887,617,8.333,658,8.611,667,6.754,677,6.663,697,5.04,712,5.448,739,9.385,764,7.115,829,4.462,897,5.647,910,6.985,919,6.754,925,4.529,929,5.072,930,5.286,973,6.651,1007,5.175,1022,11.903,1023,2.328,1024,6.381,1025,6.226,1042,3.988,1453,5.406,1567,7.599,1614,5.448,1616,5.84,1618,10.182,1659,6.985,1748,4.887,1796,6.02,1798,6.301,1799,6.556,1800,5.325,1807,7.805,1832,12.784,1833,8.694,1834,7.805,1835,7.419,1836,7.805,1837,4.946,1838,13.107]],["keywords/149",[]],["title/150",[255,782.945,1021,649.558]],["content/150",[3,3.754,11,5.125,13,4.162,89,4.054,102,12.569,168,4.689,186,5.853,222,2.985,340,5.17,372,5.806,440,7.288,644,7.51,808,8.016,925,8.594,929,9.626,1001,15.814,1024,12.11,1212,10.258,1839,14.421,1840,13.503]],["keywords/150",[]],["title/151",[223,250.557,228,317.695,1042,460.294]],["content/151",[113,4.776,195,2.78,207,8.683,217,10.592,223,5.326,228,6.753,259,14.05,359,8.721,422,6.245,897,7.666,1042,9.783,1810,12.595]],["keywords/151",[]],["title/152",[1021,649.558,1831,1009.408]],["content/152",[1,2.5,3,3.107,22,1.079,41,5.502,43,2.913,66,2.449,73,3.838,79,2.995,102,6.004,113,2.612,179,5.792,180,5.375,181,4.648,185,3.873,186,3.452,195,2.9,196,4.298,197,6.302,207,6.954,217,5.792,222,1.76,223,4.933,228,5.339,231,4.429,251,3.31,281,3.745,291,4.459,304,7.142,324,7.963,345,4.812,352,3.203,359,6.985,368,4.038,378,7.818,416,5.753,485,7.079,504,5.57,551,4.499,556,7.079,558,9.004,605,5.469,617,9.327,658,8.482,677,7.245,697,5.641,712,6.098,739,10.205,829,4.994,897,4.192,919,7.56,925,5.069,929,5.677,930,5.916,973,7.445,1007,5.792,1022,11.725,1024,7.142,1042,4.464,1453,6.05,1567,8.505,1614,6.098,1616,6.537,1618,11.071,1659,7.818,1748,5.469,1796,6.738,1799,7.337,1800,5.96,1807,8.735,1832,13.261,1833,9.731,1834,8.735,1835,8.304,1836,8.735,1837,5.536,1838,14.252]],["keywords/152",[]],["title/153",[255,782.945,1021,649.558]],["content/153",[1,4.961,166,13.099,223,4.822,255,12.506,897,8.319,1021,10.375]],["keywords/153",[]],["title/154",[1042,554.539,1768,789.838]],["content/154",[2,1.542,3,1.183,7,5.984,8,2.648,16,1.058,18,1.637,20,3.925,22,1.147,25,3.348,42,3.469,49,4.371,59,9.249,61,5.932,62,4.881,73,4.081,89,3.661,93,5.16,103,3.162,107,3.823,108,3.61,113,1.724,130,10.124,160,3.432,168,4.228,180,3.547,186,4.61,188,4.776,195,1.003,206,4.881,222,1.162,223,1.604,224,2.262,225,3.527,226,1.65,227,2.354,229,3.067,230,2.48,263,3.622,270,2.29,281,2.72,284,3.547,291,2.009,294,4.599,296,4.639,329,5.762,340,1.63,354,1.807,396,3.042,425,13.377,436,5.481,437,7.582,445,2.242,457,5.286,469,2.701,490,3.292,526,2.078,527,3.797,531,4.913,575,5.395,579,3.329,599,5.094,600,10.096,605,5.816,606,4.273,627,6.383,633,4.913,652,3.925,704,2.89,717,3.654,752,2.869,792,4.861,801,5.071,808,3.12,895,3.538,896,4.397,897,6.42,903,5.481,966,4.776,976,7.303,1021,9.383,1022,4.057,1026,6.246,1042,2.946,1143,3.676,1155,3.631,1189,7.409,1530,6.423,1532,6.423,1638,5.765,1643,3.469,1760,11.359,1763,6.78,1768,6.761,1775,3.933,1841,16.99,1842,5.256,1843,7.324,1844,7.322,1845,11.798,1846,6.423,1847,7.322,1848,7.322,1849,6.423,1850,5.613,1851,5.256]],["keywords/154",[]],["title/155",[11,472.249]],["content/155",[]],["keywords/155",[]],["title/156",[11,375.556,106,501.688]],["content/156",[1,2.901,2,1.882,3,2.922,11,6.503,19,4.168,22,1.252,33,7.738,36,6.954,70,5.18,79,4.88,100,8.515,106,6.581,112,4.309,139,8.302,147,6.916,195,3.104,205,6.036,207,5.51,210,11.294,221,9.077,231,5.14,269,9.073,287,5.51,293,7.191,312,8.943,316,5.044,326,7.661,427,4.671,428,4.766,455,6.769,458,5.687,464,3.226,527,6.677,554,8.773,571,9.242,578,6.916,681,6.722,692,9.641,696,8.289,697,6.546,711,8.515,728,10.098,730,7.82,1039,9.073,1045,11.294,1258,9.637,1450,10.138,1467,9.429,1589,13.532,1852,12.875,1853,11.922,1854,11.294,1855,12.875,1856,8.185,1857,8.289,1858,12.875,1859,7.191,1860,12.875,1861,11.922,1862,11.922,1863,8.399]],["keywords/156",[]],["title/157",[422,533.514]],["content/157",[2,2.413,11,6.976,22,1.532,89,4.469,103,6.802,106,7.549,108,10.224,146,8.114,168,3.181,195,2.841,207,6.742,222,2.5,224,1.79,228,4.374,254,7.86,281,3.631,284,4.736,290,6.772,296,6.194,307,7.805,335,3.55,344,13.818,422,7.137,423,9.109,429,9.78,514,11.537,562,10.419,995,9.373,1110,8.658,1549,10.91,1864,10.571,1865,15.753,1866,15.753,1867,15.753]],["keywords/157",[]],["title/158",[957,1041.674]],["content/158",[2,1.839,3,2.014,11,6.672,15,3.102,19,4.073,22,1.718,25,3.536,42,5.904,43,5.39,66,3.901,106,4.536,168,2.516,172,4.644,181,5.22,209,7.49,219,5.637,223,2.729,224,1.416,227,4.007,244,8.113,254,8.816,258,2.487,270,3.898,288,6.462,307,4.195,323,7.736,324,6.107,364,7.018,368,4.536,375,6.849,395,10.476,422,3.836,438,7.736,440,4.828,447,7,465,4.134,490,5.727,512,6.744,546,4.919,561,8.022,575,2.99,619,6.904,638,7.922,681,6.506,738,8.781,784,8.63,787,8.242,788,7.414,812,7.915,816,6.904,835,5.937,873,8.326,956,7.206,957,7.49,1066,12.892,1204,7.141,1366,9.327,1464,10.93,1467,9.126,1650,9.327,1653,10.476,1862,11.538,1868,11.538,1869,12.462,1870,12.462,1871,12.462,1872,12.462]],["keywords/158",[]],["title/159",[1603,1088.567]],["content/159",[2,1.771,11,6.557,19,2.727,22,1.15,31,3.057,52,4.796,79,4.595,106,7.258,119,6.839,155,6.718,205,5.545,244,5.431,253,15.286,270,3.7,282,2.25,307,3.982,312,5.062,331,8.191,386,5.831,413,5.459,457,7.626,464,2.963,465,3.924,490,3.3,495,4.363,509,6.969,515,6.053,531,7.937,544,6.053,551,8.843,639,7.261,660,5.545,676,5.797,681,8.886,696,7.614,709,8.059,746,5.351,748,6.354,816,6.553,821,9.313,835,5.635,849,4.423,993,6.401,1074,5.902,1363,11.529,1569,8.191,1603,12.523,1629,8.059,1681,14.93,1716,7.929,1873,11.828,1874,9.313,1875,5.73,1876,7.343,1877,11.828,1878,11.828,1879,14.05,1880,18.462,1881,10.375,1882,10.952,1883,11.828,1884,10.375,1885,10.82]],["keywords/159",[]],["title/160",[11,375.556,73,476.77]],["content/160",[2,1.283,3,3.592,11,6.84,13,4.917,14,7.712,18,4.561,19,5.123,20,6.789,22,1.199,49,3.172,52,5,79,5.999,83,6.776,89,2.657,102,9.489,127,3.009,155,6.921,161,4.794,174,7.004,198,5.633,225,8.447,235,6.351,251,3.678,263,3.785,270,3.857,282,3.335,284,3.707,299,8.688,321,5.906,374,6.49,385,4.043,426,3.595,464,5.112,465,6.77,512,6.673,606,10.233,681,6.437,731,5.101,736,6.528,823,5.446,993,6.673,994,10.815,1048,10.815,1088,8.042,1538,7.937,1589,9.228,1633,7.336,1723,8.401,1820,8.539,1886,10.007,1887,12.329,1888,8.688,1889,10.815,1890,12.329]],["keywords/160",[]],["title/161",[160,812.464]],["content/161",[1,2.397,2,1.639,3,1.719,11,7.359,13,4.15,14,6.509,15,2.648,17,7.138,22,2.153,24,5.372,71,4.614,73,3.68,79,2.871,103,4.593,106,6.828,155,4.199,160,7.384,227,3.42,253,12.077,270,3.328,282,2.023,303,8.876,334,4.383,468,6.393,492,7.636,531,10.571,551,4.314,596,6.762,682,4.231,699,7.496,700,7.248,704,6.218,730,6.461,858,8.872,887,11.1,901,5.124,921,4.553,924,7.962,1050,7.859,1063,5.757,1212,5.801,1267,6.684,1281,7.035,1285,9.373,1308,13.351,1315,9.894,1363,9.109,1736,11.537,1879,7.496,1882,14.586,1891,9.331,1892,10.638,1893,10.638,1894,10.638,1895,7.962,1896,8.634,1897,10.638,1898,10.638,1899,15.753,1900,10.638,1901,17.37,1902,10.638,1903,10.638,1904,7.79,1905,7.496,1906,14.586,1907,10.638]],["keywords/161",[]],["title/162",[11,311.729,73,395.742,186,355.952]],["content/162",[3,3.484,4,3.797,11,6.937,13,2.552,14,5.044,15,2.871,19,4.772,20,3.838,22,1.625,36,2.739,52,4.677,54,4.045,59,3.145,61,2.486,64,3.303,65,3.237,66,1.572,68,3.43,70,4.641,73,5.782,103,3.074,108,3.51,113,1.676,127,1.738,147,3.825,152,3.854,162,2.946,186,6.93,195,3.135,205,5.407,222,3.119,223,3.184,224,0.809,229,2.983,235,7.489,237,3.088,241,2.958,251,2.124,258,1.421,268,2.654,270,3.608,277,3.065,282,2.194,300,4.645,307,6.182,312,7.86,325,3.411,329,2.769,330,2.404,334,2.934,335,1.605,340,3.236,345,5.003,347,2.566,354,1.757,355,1.832,360,3.19,372,3.56,404,2.426,408,3.034,426,4.24,427,4.185,434,3.575,447,4.57,465,2.362,469,4.255,481,4.371,504,3.575,523,5.33,546,4.553,551,7.447,552,7.489,616,1.816,644,2.843,682,2.832,691,5.607,728,6.442,730,4.324,731,2.946,792,4.753,808,3.034,855,5.215,873,3.356,918,4.852,926,3.692,959,4.472,1066,9.131,1068,9.082,1094,5.33,1108,5.33,1302,4.852,1309,4.472,1716,2.277,1875,3.883,1895,5.33,1908,11.534,1909,9.697,1910,3.945,1911,7.121,1912,5.779,1913,5.986,1914,9.697,1915,8.28,1916,5.941,1917,9.906,1918,9.082,1919,6.246,1920,6.593,1921,9.361,1922,15.478]],["keywords/162",[]],["title/163",[547,892.766]],["content/163",[2,2.326,3,3.073,8,3.937,11,2.966,13,4.64,22,1.558,31,2.814,35,7.2,42,5.158,43,2.859,59,4.809,67,5.186,70,4.38,71,4.722,79,6.525,89,3.453,103,4.701,115,4.057,118,8.346,139,7.358,189,8.148,193,7.973,195,2.195,209,6.543,223,2.384,250,6.081,258,2.173,262,6.919,265,6.353,283,4.085,290,4.68,291,2.987,307,3.665,325,5.215,327,7.008,329,4.233,334,4.486,349,6.353,383,5.983,391,6.683,411,5.764,421,6.031,468,6.543,495,7.014,527,5.645,536,6.921,544,9.731,545,7.305,546,4.297,547,9.795,579,4.949,605,5.367,611,7.2,696,7.008,739,6.838,741,5.937,746,4.925,748,8.608,791,9.441,809,8.148,960,7.305,964,5.571,995,6.477,1075,10.08,1081,8.148,1112,10.316,1121,7.634,1267,4.619,1512,9.549,1516,7.101,1594,6.081,1603,6.838,1694,10.08,1923,7.008,1924,9.549,1925,10.887,1926,10.887,1927,9.549,1928,7.973,1929,9.549,1930,6.838,1931,10.08,1932,10.08,1933,10.887]],["keywords/163",[]],["title/164",[544,705.325,1603,865.683]],["content/164",[1,1.539,2,1.47,3,2.904,7,5.706,11,4.896,13,4.265,14,2.369,15,6.339,19,3.256,20,2.272,22,1.585,43,1.793,52,4.52,79,4.401,89,1.471,106,2.485,107,3.565,119,3.948,158,5,159,8.777,168,2.852,173,5.301,181,2.86,208,5.845,215,4.516,219,3.089,223,2.441,232,4.104,251,2.037,270,2.136,274,3.59,284,2.053,312,4.771,323,4.239,329,2.655,335,1.539,391,4.192,409,7.645,411,3.615,421,6.176,428,2.527,443,9.515,445,2.091,457,3.059,467,2.769,468,4.104,490,1.905,514,5,542,3.668,544,11.825,546,2.695,547,8.399,579,3.104,628,5.376,660,3.201,664,4.288,686,8.164,720,7.271,743,11.47,745,5.542,746,5.043,748,5.988,788,4.062,792,2.813,809,5.111,821,5.376,841,3.615,846,8.655,897,2.58,925,9.292,929,9.865,930,9.581,951,5.989,1017,8.164,1039,4.811,1057,5.376,1175,4.104,1256,4.901,1273,4.192,1355,4.062,1363,3.948,1364,11.567,1422,9.047,1423,9.047,1565,8.98,1594,3.814,1603,12.108,1611,6.632,1614,9.875,1616,10.586,1696,4.582,1881,5.989,1895,5.111,1904,5,1934,6.828,1935,6.828,1936,5.376,1937,5.989,1938,9.047,1939,9.778,1940,6.828,1941,6.828,1942,8.002,1943,3.913,1944,5.74,1945,3.913,1946,6.828,1947,8.546,1948,5.542,1949,6.828,1950,5.989,1951,6.828,1952,5.542,1953,6.828,1954,6.828]],["keywords/164",[]],["title/165",[11,311.729,290,491.801,1066,718.559]],["content/165",[1,1.671,2,1.555,3,3.402,11,7.161,13,1.641,15,4.984,18,3.34,19,2.747,20,2.467,22,1.947,30,2.371,36,5.748,49,1.908,60,4.142,73,2.565,79,4.62,87,3.081,106,4.338,115,2.764,154,4.837,175,4.044,186,3.708,195,2.569,207,3.174,219,3.355,221,3.723,222,3.584,223,1.624,226,1.671,228,2.059,232,4.457,235,3.82,250,4.142,255,4.212,261,6.356,263,2.277,270,2.32,277,1.563,282,2.267,290,3.188,291,4.101,296,2.916,297,5.035,303,3.174,307,5.762,312,3.174,316,2.905,329,2.884,330,2.504,335,1.671,340,1.651,341,5.431,344,6.505,348,3.954,354,1.83,355,1.908,357,3.476,368,4.338,374,2.745,384,4.774,423,4.288,426,3.476,429,4.604,430,4.177,445,3.649,464,1.858,465,5.678,469,2.735,490,2.069,520,4.412,522,4.714,532,4.108,538,4.714,552,3.82,594,3.307,657,5.225,682,2.949,704,4.704,728,4.142,731,3.068,813,4.108,901,3.572,973,10.027,995,4.412,1066,13.746,1112,4.774,1261,5.225,1293,5.323,1308,11.018,1424,10.02,1443,3.291,1445,5.225,1626,5.136,1672,6.866,1914,14.388,1915,10.727,1920,6.866,1955,5.839,1956,9.333,1957,16.446,1958,5.431,1959,6.866,1960,13.836,1961,15.847,1962,7.416,1963,6.019,1964,5.225,1965,7.416]],["keywords/165",[]],["title/166",[31,356.226,1603,865.683]],["content/166",[3,3.065,11,5.905,13,3.051,14,7.52,15,3.433,18,4.238,19,4.996,20,4.589,22,1.844,31,6.032,52,7.69,73,4.771,162,5.706,186,5.9,222,2.188,223,5.112,232,8.289,258,2.752,268,5.14,282,2.623,307,4.643,380,8.289,385,4.523,464,5.848,465,6.291,504,6.924,544,7.058,705,9.255,743,8.206,792,5.683,835,9.034,837,8.562,841,7.302,1363,7.975,1603,15.369,1611,8.206,1851,13.613,1916,7.104,1966,13.792,1967,11.595,1968,13.792,1969,13.792]],["keywords/166",[]],["title/167",[864,498.398,1970,1118.642]],["content/167",[]],["keywords/167",[]],["title/168",[2,101.77,206,404.588,330,330.179,354,241.274]],["content/168",[2,2.462,3,2.654,16,2.373,22,2.434,59,10.45,61,8.259,62,9.788,103,7.09,195,2.92,206,6.794,263,5.041,281,3.785,325,10.208,330,5.544,354,4.051,404,5.594,526,4.66,564,10.86,646,7.617,692,8.756,906,7.357,1042,6.606,1488,11.447,1922,12.929,1971,12.29,1972,12.29,1973,9.77,1974,8.095]],["keywords/168",[]],["title/169",[2,119.066,330,386.293,1026,605.71]],["content/169",[2,1.717,8,3.119,18,1.928,22,1.604,24,2.234,36,3.318,44,5.553,67,4.109,68,4.155,89,2.895,120,3.864,136,5.186,154,5.627,162,3.569,192,4.278,195,1.182,229,5.627,237,3.741,277,1.819,279,2.837,283,5.041,284,2.593,316,3.379,354,4.071,355,4.245,367,3.271,370,3.864,385,2.829,386,4.252,389,4.567,452,5.082,483,6.317,495,3.182,518,5.224,522,5.483,526,3.812,529,5.239,572,5.239,575,3.223,599,10.238,600,5.878,601,6.231,602,4.414,603,4.001,604,6.919,611,5.705,616,2.2,627,4.198,641,3.775,642,4.567,652,2.87,660,4.043,697,4.386,704,3.405,721,8.133,771,3.708,792,3.554,863,12.316,865,7.987,866,16.334,869,7.987,870,5.627,871,6.786,872,7.914,873,4.065,874,5.878,875,2.407,876,10.621,877,6.078,878,17.243,879,10.054,880,11.783,881,17.243,882,11.783,883,12.438,884,7.987,885,12.438,886,12.438,887,9.465,888,12.438,889,7.987,890,7.987,891,12.438,892,7.566,893,7.987,894,5.295,895,4.028,896,6.94,900,5.418,921,3.692,966,5.627,1020,4.741,1021,4.065,1026,4.567,1163,4.858,1393,4.443,1443,3.828,1805,7.566,1830,5.974,1975,8.626,1976,8.626,1977,6.792,1978,8.626,1979,7.987,1980,8.626,1981,8.626,1982,8.626,1983,5.705,1984,5.788,1985,6.078,1986,5.355,1987,7.987]],["keywords/169",[]],["title/170",[2,78.859,16,109.486,22,73.669,59,334.701,61,264.548,62,313.506]],["content/170",[2,1.839,3,2.855,59,10.816,61,8.549,62,9.24,69,4.93,103,7.629,195,2.421,296,6.947,325,8.464,329,6.87,490,4.93,512,9.562,526,5.014,646,8.196,693,4.618,752,6.921,810,7.954,831,8.559,864,6.389,1150,6.149,1151,9.788,1443,7.841,1757,12.939,1988,7.529,1989,10.969,1990,15.497]],["keywords/170",[]],["title/171",[59,431.941,61,341.406,62,404.588,1150,340.348]],["content/171",[2,2.566,22,1.744,62,10.203,66,3.961,127,4.379,185,6.263,225,8.642,279,5.9,340,3.993,352,5.18,385,5.883,627,4.565,675,11.405,752,7.028,902,7.888,926,9.303,1189,7.135,1191,16.611,1192,16.611,1193,16.611,1830,12.425,1991,11.702,1992,12.224,1993,19.779,1994,17.94]],["keywords/171",[]],["title/172",[62,473.349,831,554.256,1988,487.519]],["content/172",[2,1.818,15,6.915,22,1.192,62,9.696,66,2.708,113,2.887,127,2.993,279,4.034,340,2.73,352,3.541,385,4.022,627,3.121,675,11.105,752,4.805,831,11.353,872,7.226,875,3.422,926,6.36,1189,4.878,1388,10.311,1723,8.357,1809,7.703,1916,6.317,1992,8.357,1995,8.357,1996,10.758,1997,10.758,1998,10.758,1999,10.758,2000,12.264,2001,17.846,2002,17.846,2003,17.105,2004,20.346,2005,20.346,2006,20.346,2007,17.105,2008,10.758,2009,12.264,2010,12.264,2011,17.105,2012,20.346,2013,12.264,2014,10.758,2015,16.174,2016,12.264]],["keywords/172",[]],["title/173",[59,505.351,1151,633.815,1989,710.262]],["content/173",[2,1.857,4,5.219,7,3.953,14,6.193,15,2.436,22,0.952,59,11.254,66,2.161,70,3.938,89,2.109,113,2.304,127,2.389,154,6.384,162,4.049,185,6.946,195,2.028,206,8.841,207,6.334,244,4.494,279,4.868,281,2.256,289,4.494,296,3.848,323,6.076,340,3.973,343,6.629,352,5.744,359,6.362,385,4.854,386,4.825,397,2.068,445,2.997,485,4.264,490,2.731,513,4.153,525,7.026,526,6.064,533,4.472,575,2.348,625,5.257,627,5.062,644,7.125,693,2.558,733,6.896,801,6.778,861,7.026,864,3.539,902,7.847,926,5.075,1021,4.612,1022,5.422,1042,7.181,1151,12.931,1189,7.913,1443,4.343,1598,5.882,1762,5.944,1775,7.95,1837,4.884,1916,5.041,1983,9.789,1989,13.266,1992,6.669,1993,8.585,2017,8.585,2018,10.839,2019,9.787,2020,4.264,2021,9.787,2022,11.654,2023,8.72,2024,7.503,2025,5.609,2026,9.787]],["keywords/173",[]],["title/174",[62,570.267,385,452.013]],["content/174",[1,3.346,2,1.545,22,1.939,59,9.944,61,6.961,62,10.387,113,3.495,130,6.684,154,9.685,195,2.034,207,8.534,235,7.648,241,6.169,302,14.924,330,5.013,385,4.869,512,8.036,526,4.214,679,6.888,752,7.811,816,8.226,823,8.807,829,6.684,831,7.193,861,10.658,901,7.153,1150,5.168,1151,8.226,1218,10.658,1443,6.589,1654,11.383,1707,7.918,1830,10.283,1859,8.293,1990,13.024,2017,13.024,2027,7.501,2028,11.383,2029,10.283,2030,14.848,2031,14.848,2032,14.848,2033,14.848,2034,11.691,2035,13.024]],["keywords/174",[]],["title/175",[2,119.066,647,426.353,1299,694.819]],["content/175",[2,2.462,22,2.072,43,4.312,61,5.733,76,13.327,79,4.432,198,7.502,209,9.869,229,6.879,277,3.462,279,5.4,303,7.028,370,7.357,437,8.403,490,4.582,616,4.187,647,9.33,677,7.322,864,5.938,894,10.081,901,7.91,921,7.028,1031,13.327,1108,12.29,1121,7.823,1294,12.025,1299,14.368,1326,9.248,1538,10.571,1696,11.019,1964,11.571,2036,16.42,2037,11.189,2038,11.189]],["keywords/175",[]],["title/176",[533,629.721,832,1085.254]],["content/176",[2,2.821,22,1.718,66,4.931,87,9.278,89,3.807,127,4.312,195,3.06,225,8.511,284,6.714,330,7.541,354,4.359,355,4.546,397,3.732,607,7.878,634,11.685,639,13.71,657,12.449,659,11.856,660,8.282,804,7.28,921,7.562]],["keywords/176",[]],["title/177",[2,143.445,1481,729.728]],["content/177",[2,2.694,22,2.062,36,6.272,69,4.55,89,3.514,195,2.906,226,3.674,235,8.399,244,9.74,284,6.377,296,6.412,329,8.249,352,4.708,357,9.944,404,5.555,408,6.948,437,8.344,569,8.455,575,5.089,639,10.01,644,6.51,692,8.695,804,6.719,812,7.305,1023,3.83,1086,11.489,1108,12.204,1481,11.23,1634,10.941,2039,15.098,2040,14.302]],["keywords/177",[]],["title/178",[43,198.963,66,167.298,223,165.947,287,324.3,897,286.322,2041,328.638]],["content/178",[]],["keywords/178",[]],["title/179",[2042,532.102]],["content/179",[2,2.441,22,1.859,25,3.961,61,6.675,115,5.201,145,6.508,172,5.201,180,6.762,196,5.408,226,3.145,244,6.409,279,4.59,296,5.488,297,5.897,303,5.973,335,4.914,340,4.256,345,6.053,352,6.297,354,3.444,355,3.591,389,7.389,404,4.755,415,7.497,445,4.274,526,5.426,552,7.189,564,9.231,599,6.026,601,8.87,603,8.87,604,9.849,616,3.559,647,5.201,693,3.648,752,5.468,804,5.751,863,9.231,894,8.568,1150,4.858,1151,7.732,1299,8.476,1481,7.389,1488,7.497,1971,10.447,1988,8.147,2041,6.053,2043,10.221,2044,12.923,2045,10.447,2046,7.795,2047,9.666]],["keywords/179",[]],["title/180",[286,1163.024]],["content/180",[2,1.195,3,1.855,15,4.879,22,1.116,25,3.257,41,5.692,43,4.373,87,4.768,92,5.118,110,5.38,152,6.212,161,6.477,168,3.363,173,6.25,179,8.696,195,2.686,208,4.749,215,7.591,222,2.643,223,4.293,226,2.586,251,4.969,263,3.524,268,6.207,270,3.59,272,5.873,273,7.591,282,2.183,287,7.128,288,10.165,291,3.15,327,7.389,331,7.949,340,2.555,352,6.209,379,7.702,415,10.53,518,4.463,536,7.296,540,5.56,546,6.574,562,7.591,602,5.873,643,7.389,651,4.636,666,7.535,669,9.649,689,3.226,696,7.389,705,7.702,739,7.209,791,6.762,792,4.729,801,7.949,829,5.167,897,6.293,1034,10.067,1090,7.389,1366,8.591,1418,17.195,1453,6.259,1571,9.649,1702,7.126,1840,8.239,1886,9.315,1891,10.067,1942,8.239,1973,6.829,2048,11.478,2049,9.315,2050,8.088,2051,11.478,2052,11.478,2053,10.627,2054,9.037,2055,6.898]],["keywords/180",[]],["title/181",[1943,655.603,2050,806.162,2056,856.309]],["content/181",[3,3.195,216,8.317,222,3.137,277,4.168,279,6.502,281,4.557,359,8.499,413,9.124,445,6.054,845,16.621,959,12.417,1042,7.954,1044,11.23,1765,12.007,2050,13.931,2056,17.92,2057,15.567]],["keywords/181",[]],["title/182",[195,133.976,277,206.163,408,416.7,812,438.107]],["content/182",[2,1.974,3,4.186,11,6.36,22,1.341,66,3.045,69,3.848,73,4.771,87,5.73,89,2.972,102,7.464,113,4.464,168,2.785,195,1.89,219,6.239,220,5.852,228,3.83,248,11.595,255,7.834,268,7.067,281,3.179,284,4.146,312,8.116,318,9.718,352,6.257,354,3.403,355,3.548,359,8.152,372,4.257,415,7.408,434,6.924,465,4.575,540,6.681,546,7.485,666,8.579,752,5.403,1021,6.5,1023,3.24,1042,7.63,1090,8.878,1113,6.882,1212,7.521,1481,7.302,1737,10.1,1775,7.408,2050,9.718,2058,14.538,2059,13.792,2060,10.323,2061,12.77]],["keywords/182",[]],["title/183",[195,133.976,268,364.419,385,320.691,666,442.372]],["content/183",[2,0.999,3,2.546,6,3.301,9,4.605,11,4.806,13,4.073,14,1.407,15,4.39,18,2.145,19,4.401,20,3.194,22,0.933,24,3.778,25,1.151,30,1.296,39,2.437,42,4.548,43,1.878,49,2.47,52,2.901,61,1.416,66,2.917,69,4.069,71,1.759,73,1.403,78,2.211,79,1.931,83,2.228,87,1.684,89,0.874,94,2.721,102,2.194,105,2.578,106,1.476,113,4.152,127,1.746,130,3.22,145,1.891,161,1.577,168,1.938,172,3.577,174,2.303,185,3.351,195,1.315,208,1.678,216,1.706,217,2.117,220,1.72,226,2.163,227,2.3,229,1.699,251,2.134,261,4.3,263,1.245,266,1.932,268,6.86,270,3.003,277,3.718,281,0.935,282,1.826,283,1.521,284,1.219,287,3.062,288,3.709,290,3.075,291,1.963,294,2.547,298,2.061,316,1.588,317,2.808,318,2.857,329,3.733,330,1.369,340,0.903,343,2.657,352,4.211,354,1,355,1.043,356,2.303,357,4.5,359,4.126,361,2.412,364,4.029,372,1.251,374,1.501,377,2.075,379,4.8,380,2.437,385,1.33,391,2.489,402,3.108,408,3.048,422,1.248,426,3.853,427,4.2,428,7.992,434,3.591,437,2.075,443,2.366,455,2.132,457,3.205,465,2.373,467,2.901,468,4.299,495,1.496,518,1.577,526,1.151,529,2.462,533,3.268,540,1.964,544,5.924,547,2.089,551,2.901,575,5.623,579,1.843,599,3.089,601,4.453,603,3.318,604,4.944,605,1.999,610,7.031,631,2.412,644,1.619,660,1.901,666,8.636,676,1.987,679,1.881,689,1.14,697,6.717,698,3.709,717,2.023,736,2.147,743,6.888,746,3.236,747,2.682,810,1.825,812,1.817,823,1.791,835,3.408,876,2.61,920,2.132,925,3.268,926,2.103,938,2.412,956,5.55,969,2.911,1020,2.228,1023,0.952,1025,4.493,1042,1.631,1050,1.699,1143,2.036,1267,1.72,1273,2.489,1282,3.754,1315,2.547,1336,4.256,1337,4.547,1359,8.399,1391,2.61,1396,2.61,1397,3.291,1418,6.274,1424,3.409,1488,2.178,1564,3.754,1572,3.556,1603,2.547,1611,5.711,1623,2.517,1643,3.389,1696,2.721,1775,2.178,1812,2.462,1836,3.192,1942,12.661,1995,6.54,2045,7.184,2050,8.158,2058,7.359,2062,3.035,2063,8.888,2064,2.911,2065,3.108,2066,3.409,2067,6.441,2068,4.055,2069,8.419,2070,7.153,2071,3.556,2072,11.577,2073,4.055,2074,5.354,2075,14.584,2076,7.153,2077,4.055,2078,2.178,2079,3.754,2080,2.645,2081,2.437,2082,4.055,2083,4.055,2084,3.556,2085,4.055,2086,2.366,2087,4.055,2088,3.409]],["keywords/183",[]],["title/184",[66,215.902,223,214.16,290,420.36,897,369.507]],["content/184",[2,1.27,3,3.279,22,1.186,31,3.153,69,4.856,79,3.293,92,5.44,113,5.207,168,4.466,223,5.325,224,1.386,244,5.602,261,4.531,268,4.547,270,5.444,273,8.069,277,3.669,281,2.812,282,2.32,288,6.326,335,3.922,340,2.716,352,5.025,354,3.01,355,3.139,359,9.509,385,6.653,408,5.199,413,5.631,415,12.563,434,6.125,467,4.947,489,5.75,493,9.28,533,5.574,546,4.815,644,6.948,647,4.547,679,5.66,693,3.189,711,8.069,842,4.156,897,4.61,1042,4.908,1110,6.705,1113,6.087,1126,4.194,1143,6.125,1210,5.781,1775,9.348,1942,12.493,1984,8.187,2041,5.291,2056,9.131,2058,9.353,2063,11.296,2089,12.2,2090,12.2,2091,12.2,2092,12.2]],["keywords/184",[]],["title/185",[394,617.512,2093,989.405]],["content/185",[22,1.705,49,4.512,110,8.22,168,3.54,173,6.58,174,9.96,223,3.84,238,9.714,251,5.231,273,11.597,281,4.042,290,7.538,297,7.408,327,11.288,329,6.819,380,10.539,397,3.704,415,9.419,518,6.819,546,6.921,711,11.597,792,7.225,833,9.714,906,7.856,1042,7.055,1443,7.782,2037,11.948,2094,7.605,2095,12.144,2096,11.766,2097,15.38,2098,13.806,2099,17.535]],["keywords/185",[]],["title/186",[397,366.13]],["content/186",[268,8.612]],["keywords/186",[]],["title/187",[66,167.298,87,314.799,831,367.092,1120,524.772,1988,322.891,2100,360.987]],["content/187",[]],["keywords/187",[]],["title/188",[2042,532.102]],["content/188",[2,2.417,25,5.338,279,6.187,340,4.187,352,5.431,354,4.641,355,4.84,526,7.15,552,9.689,564,12.441,677,8.388,681,9.821,1488,12.475,1760,17.804,1971,14.079,1973,11.192,1974,9.274,2100,11.064]],["keywords/188",[]],["title/189",[286,1163.024]],["content/189",[2,2.4,3,2.025,19,1.82,22,2.001,24,2.045,25,2.24,43,3.29,61,2.756,62,3.266,66,2.766,69,4.346,89,1.701,97,3.52,103,5.41,128,4.901,139,3.625,145,5.842,146,4.066,178,5.379,195,3.616,214,3.761,219,3.571,222,3.424,223,3.884,224,2.015,263,2.423,272,4.04,277,2.641,279,5.123,283,2.962,287,3.378,294,4.958,304,5.082,305,5.781,307,5.97,309,6.407,310,6.407,325,3.781,329,3.07,330,4.23,340,1.757,352,5.12,355,2.031,375,4.339,404,5.307,413,5.782,427,4.545,437,4.04,457,3.537,530,4.607,541,4.093,542,8.367,548,6.636,577,5.908,605,3.892,627,2.008,647,2.942,650,5.018,651,3.188,661,4.15,662,9.377,667,5.379,668,6.215,693,2.063,697,4.013,778,6.052,786,6.052,788,4.697,831,8.592,917,6.052,1256,5.666,1367,6.407,1585,16.708,1586,18.714,1591,9.865,1604,5.562,1626,5.467,1696,5.297,1755,8.172,1923,8.065,1983,5.221,1988,5.339,2037,5.379,2078,4.24,2093,5.666,2100,8.449,2101,7.894,2102,6.924,2103,7.309,2104,12.528,2105,7.691,2106,5.666,2107,7.309,2108,6.215,2109,6.215,2110,6.636,2111,7.894,2112,7.894,2113,7.894,2114,7.894,2115,7.894,2116,6.924,2117,6.924]],["keywords/189",[]],["title/190",[195,116.983,222,135.479,831,413.654,1585,692.98,1586,692.98]],["content/190",[2,2.259,3,2.731,11,3.19,13,3.257,14,2.517,15,2.914,16,2.127,18,3.29,22,1.431,24,3.814,25,3.323,59,5.172,62,8.203,69,2.024,87,3.014,89,2.523,103,3.132,113,3.977,120,3.25,130,8.925,160,6.901,162,3.001,185,2.533,195,2.716,215,4.797,222,3.31,223,2.564,224,1.33,229,3.039,230,2.457,231,2.896,251,2.164,261,4.348,263,2.227,270,2.269,277,2.468,281,2.699,282,2.8,287,3.105,288,3.761,295,3.787,296,4.604,299,5.111,307,2.442,319,4.943,343,2.694,345,6.385,352,4.878,354,1.79,355,1.866,358,4.157,359,8.966,375,3.987,404,3.989,408,3.091,422,2.233,427,4.248,434,3.642,437,3.712,443,4.233,465,2.406,467,4.748,490,2.024,491,7.354,494,3.761,495,2.676,511,3.475,527,6.072,530,6.833,533,6.726,557,3.189,605,3.576,609,5.312,622,3.761,627,3.746,644,2.896,645,5.887,651,2.93,679,5.432,693,1.896,705,4.868,752,2.842,771,3.118,810,3.266,812,3.25,831,8.186,919,7.978,925,3.314,927,5.887,966,4.732,1020,3.987,1021,3.418,1105,4.36,1110,3.987,1113,3.619,1121,3.456,1137,5.711,1142,2.533,1366,5.429,1443,3.219,1450,5.711,1481,3.84,1585,9.503,1586,9.503,1637,4.611,1756,6.098,1811,8.575,1850,5.561,1983,7.744,1988,3.091,2027,7.438,2062,5.429,2100,3.456,2118,7.254,2119,6.716,2120,7.637,2121,7.269,2122,3.576,2123,4.453,2124,11.709,2125,6.966,2126,6.363,2127,4.36,2128,7.254,2129,6.363,2130,4.943]],["keywords/190",[]],["title/191",[2,101.77,22,95.072,2100,465.863,2131,629.522]],["content/191",[2,1.771,11,4.638,15,6.172,22,1.655,25,2.085,36,2.825,59,3.245,66,5.313,69,4.143,79,1.983,127,1.793,145,5.515,172,2.737,173,4.438,179,3.835,205,3.443,206,3.039,223,1.609,226,4.493,244,3.373,251,3.529,279,6.558,281,1.693,296,2.888,329,2.856,335,3.835,340,2.633,354,2.918,355,1.89,359,5.084,361,4.37,374,6.906,416,3.809,458,5.224,464,1.84,490,2.05,518,6.619,526,2.085,529,4.461,533,3.356,542,9.143,552,3.784,575,4.084,616,1.873,627,3.009,643,4.729,650,4.67,658,2.944,679,3.407,697,6.014,712,6.501,721,3.621,752,2.878,849,2.747,864,2.656,872,4.328,874,5.005,902,10.581,964,3.759,1021,3.462,1074,3.665,1126,4.066,1142,4.129,1165,5.005,1189,8.673,1393,3.784,1628,4.729,1760,5.631,1842,5.273,1859,4.103,2100,9.499,2120,4.791,2132,6.175,2133,6.801,2134,12.482,2135,6.443,2136,6.175,2137,5.962,2138,9.943,2139,5.631,2140,11.691,2141,8.853,2142,9.599,2143,17.626,2144,9.943,2145,12.482,2146,10.374,2147,9.943,2148,6.175,2149,6.175,2150,9.943,2151,6.175,2152,6.175,2153,6.175,2154,5.962,2155,5.379,2156,6.175,2157,6.175,2158,10.374,2159,6.443]],["keywords/191",[]],["title/192",[2,101.77,3,158.044,223,214.16,2100,465.863]],["content/192",[1,1.65,2,1.939,3,2.746,7,2.958,8,2.648,11,5.705,15,2.936,16,1.705,18,2.637,22,1.811,25,2.078,31,1.892,49,1.884,59,3.234,61,2.556,62,3.03,69,3.292,83,4.024,89,3.193,97,3.265,113,3.999,130,3.296,136,2.827,168,2.991,179,3.823,185,2.556,195,2.328,196,2.837,223,4.771,224,0.832,226,1.65,228,3.276,229,3.067,231,2.923,251,2.185,261,4.382,270,4.635,277,2.487,282,2.244,284,2.201,295,3.823,296,2.879,297,3.094,312,3.134,316,2.869,319,4.989,321,3.508,335,1.65,337,6.78,345,3.176,352,3.406,359,9.364,360,3.281,368,2.665,385,2.401,408,3.12,413,3.379,422,3.632,440,2.837,443,4.273,444,5.362,445,2.242,465,3.914,467,2.969,485,5.14,490,2.043,495,2.701,511,3.508,526,4.205,527,3.797,530,4.273,533,6.769,542,3.933,574,3.329,575,1.757,605,3.61,644,4.71,647,5.521,658,2.935,661,3.849,679,3.397,693,1.914,731,3.03,739,4.599,741,3.993,752,2.869,810,3.296,812,3.281,831,3.547,834,4.599,874,8.039,897,2.767,902,3.219,919,4.989,973,4.913,982,4.599,1020,4.024,1021,3.451,1042,2.946,1050,7.117,1066,7.41,1110,4.024,1113,3.654,1121,3.488,1126,4.056,1142,2.556,1326,4.124,1368,4.843,1393,3.772,1443,3.25,1497,5.481,1760,5.613,1808,7.696,1811,8.64,1850,5.613,1859,4.09,1886,5.943,1914,6.156,1915,5.256,1917,4.989,1983,4.843,2062,5.481,2100,10.377,2105,4.495,2119,6.78,2132,3.823,2137,9.575,2139,5.613,2140,5.765,2141,5.481,2142,9.575,2160,7.322,2161,5.613,2162,5.765,2163,7.322,2164,7.322,2165,6.423,2166,7.322,2167,6.156]],["keywords/192",[]],["title/193",[2168,1733.188]],["content/193",[2,2.208,22,1.793,24,3.43,25,3.758,43,3.477,62,5.479,66,4.683,69,3.695,86,6.08,89,4.571,127,3.232,136,5.112,154,8.638,195,3.421,207,5.667,222,2.101,223,4.038,224,2.094,241,5.501,281,4.25,284,3.981,287,5.667,296,5.207,335,2.984,358,7.588,369,6.961,422,4.076,468,7.959,495,4.885,541,9.561,542,7.113,551,5.37,552,6.821,597,7.588,602,6.776,616,3.377,660,6.207,661,6.961,696,8.525,804,5.456,831,8.932,833,7.336,1042,5.328,1256,9.506,1481,7.011,1585,14.964,1586,14.964,1651,11.132,1988,5.643,2100,10.928,2105,8.129,2106,9.506,2169,11.132,2170,8.886]],["keywords/193",[]],["title/194",[43,256.768,287,418.518,790,533.277,1956,533.277]],["content/194",[]],["keywords/194",[]],["title/195",[1481,729.728,2171,1158.748]],["content/195",[]],["keywords/195",[]],["title/196",[790,945.178]],["content/196",[18,2.977,22,1.295,30,4.258,43,4.861,78,7.263,87,5.533,115,4.963,144,9.753,145,6.21,160,6.243,181,5.579,186,4.144,195,3.515,213,8.176,222,3.834,241,5.533,251,7.209,277,2.808,287,7.922,290,5.725,291,3.654,298,9.412,301,11.682,307,6.232,316,5.217,335,4.171,367,5.05,428,4.929,445,4.078,490,3.716,541,6.906,568,5.086,672,8.687,689,5.202,698,6.906,755,11.196,790,10.095,906,5.967,908,4.784,1008,6.452,1481,7.051,1604,9.384,1710,9.56,2029,12.82,2172,12.331,2173,12.331,2174,8.573,2175,12.331,2176,12.331,2177,9.56,2178,12.331,2179,11.682,2180,12.331]],["keywords/196",[]],["title/197",[116,570.685,208,404.588,251,291.737,1956,533.277]],["content/197",[1,3.193,3,2.29,5,8.107,8,3.342,13,4.274,16,1.335,19,2.131,25,2.623,43,2.427,49,2.378,69,2.579,74,6.769,78,5.04,79,5.933,87,3.84,127,2.256,155,3.648,161,3.594,163,3.075,191,5.446,195,2.854,208,10.221,215,6.113,222,1.467,228,2.567,231,3.69,251,7.043,263,4.35,287,3.956,291,5.716,294,5.805,307,3.112,316,3.621,320,4.584,335,2.083,345,4.009,362,8.605,367,3.505,374,3.421,387,9.359,394,4.141,422,2.845,435,8.761,465,5.716,493,4.929,495,3.409,504,7.114,604,4.761,616,2.357,634,6.113,643,5.95,672,6.029,689,4.843,728,5.162,760,7.277,784,6.401,790,7.727,808,3.939,836,5.555,906,8.655,981,6.635,1008,8.348,1080,8.107,1106,6.635,1204,5.296,1550,6.635,1593,6.298,1643,4.379,1669,8.107,1685,8.107,1695,7.77,1710,6.635,1913,7.77,1956,11.987,1995,6.298,2130,6.298,2181,9.813,2182,6.401,2183,12.429,2184,7.086,2185,8.558,2186,8.107,2187,7.501,2188,9.243,2189,14.169,2190,7.501,2191,14.169,2192,9.243,2193,8.558,2194,6.635,2195,9.243]],["keywords/197",[]],["title/198",[2,119.066,279,376.27,286,767.708]],["content/198",[3,1.704,18,2.356,19,3.607,43,6.068,68,5.078,72,6.701,74,11.459,103,4.551,145,4.916,147,5.662,155,4.161,163,3.507,168,2.128,194,6.876,195,3.022,237,4.572,241,4.379,251,6.58,276,7.074,277,2.222,279,7.868,287,8.837,333,6.876,334,4.344,335,2.375,400,4.473,401,4.241,413,4.865,466,12.409,536,11.862,616,3.99,660,4.941,664,6.621,671,7.89,677,4.7,682,4.192,689,6.724,693,2.755,722,6.876,788,6.272,790,11.26,791,9.219,792,4.344,829,7.044,847,3.956,856,6.211,1300,13.966,1348,6.041,1443,6.944,1538,6.786,1554,9.947,1614,5.794,1736,7.72,1820,7.3,1832,5.749,1888,7.428,1930,6.621,1943,6.041,1947,8.081,1956,5.749,1964,7.428,1974,5.197,2196,13.154,2197,15.647,2198,8.862,2199,10.541,2200,10.541,2201,8.555,2202,10.541,2203,9.246,2204,10.541,2205,10.541,2206,10.541,2207,10.541]],["keywords/198",[]],["title/199",[2042,532.102]],["content/199",[2,1.798,19,3.982,22,1.679,127,5.373,221,8.673,222,2.741,224,1.962,277,3.642,279,7.241,330,5.833,335,3.893,340,3.845,445,5.289,526,4.902,529,10.491,557,7.595,616,4.405,660,8.098,767,9.42,915,11.268,1020,9.494,1105,10.382,1481,11.656,1488,9.279,1624,9.081,1956,13.215,2208,10.981,2209,15.152,2210,16.478]],["keywords/199",[]],["title/200",[226,257.805,445,350.312,1956,623.908]],["content/200",[2,2.228,127,5.225,279,7.041,316,8.387,340,4.765,1566,18.778,1956,11.675,2042,6.572,2131,13.782]],["keywords/200",[]],["title/201",[1133,622.648]],["content/201",[92,9.126,108,10.09,263,6.283,335,4.612,363,10.542,693,5.35,895,6.137,1126,7.036,1133,8.782,1137,16.114,1143,10.275,1956,11.161,2211,14.174]],["keywords/201",[]],["title/202",[186,428.833,627,350.696]],["content/202",[2,1.685,4,8.634,89,3.489,162,6.699,176,12.749,181,6.783,186,7.311,195,3.219,222,3.35,226,3.649,283,6.076,316,6.343,340,3.604,445,4.958,526,4.595,573,10.052,575,3.885,627,5.373,731,9.722,873,7.631,902,9.284,1063,8.763,1088,13.774,1267,6.87,1365,12.413,1481,8.572,1916,8.34,1956,12.814,2210,12.119,2212,14.992,2213,16.192,2214,12.119]],["keywords/202",[]],["title/203",[16,199.154,2215,812.067]],["content/203",[16,2.041,18,3.157,19,3.256,31,3.651,71,6.127,89,3.044,92,6.299,112,4.728,115,5.264,127,3.448,162,5.845,195,1.935,220,5.994,226,5.561,251,4.214,281,3.256,283,7.234,284,4.247,286,9.479,289,6.487,316,5.534,340,3.144,347,6.948,447,5.597,533,6.454,568,5.395,627,3.594,658,5.662,664,8.873,689,3.97,767,10.513,801,9.783,915,9.215,926,7.325,930,7.533,1022,7.826,1105,11.587,1214,9.215,1215,6.422,1292,10.83,1488,7.588,1916,7.277,1956,12.858,1972,10.573,1992,9.626,2210,10.573,2216,16.321,2217,11.465,2218,14.127,2219,11.465]],["keywords/203",[]],["title/204",[16,199.154,1956,751.653]],["content/204",[2,2.099,18,2.698,22,2.14,30,3.86,66,2.666,69,3.369,97,5.383,112,5.781,161,4.695,162,4.995,181,5.058,182,10.59,226,2.721,230,4.089,279,6.634,281,2.783,290,5.19,330,4.077,335,4.545,340,2.687,359,5.19,361,10.277,367,4.578,385,3.959,396,5.016,426,5.882,445,3.697,461,6.438,513,5.123,533,5.516,627,3.072,633,11.591,644,4.82,658,4.839,679,5.601,693,6.089,767,9.42,810,5.435,861,8.667,864,4.366,871,6.1,1042,6.95,1105,7.256,1214,7.875,1215,7.853,1268,9.256,1481,10.679,1488,6.485,1634,8.102,1708,5.883,1765,10.491,1831,8.842,1916,6.219,1956,6.584,2029,8.361,2210,9.037,2219,14.019,2220,8.507,2221,12.073,2222,10.59,2223,10.15,2224,17.274,2225,10.15,2226,9.506,2227,11.179,2228,12.073,2229,8.102]],["keywords/204",[]],["title/205",[2,101.77,226,220.355,279,321.611,445,299.424]],["content/205",[2,1.811,16,2.515,22,1.692,43,4.57,66,3.842,69,6.172,195,2.384,222,3.858,224,2.513,229,7.291,230,5.894,277,3.669,287,7.448,361,13.161,557,7.652,633,11.678,1042,7.002,1109,14.631,1269,13.342,1624,9.149,1765,10.569,1775,9.349,1956,9.491,1985,17.135,2208,11.063,2222,15.265,2229,11.678]],["keywords/205",[]],["title/206",[16,165.308,222,181.529,1956,623.908]],["content/206",[2,2.052,3,1.873,8,6.066,16,2.848,22,1.127,30,5.364,87,4.816,112,6.598,113,2.729,158,8.489,161,4.508,162,4.796,179,6.052,195,1.588,222,2.662,226,2.612,228,3.219,229,7.028,258,2.313,281,2.672,297,4.897,316,4.541,335,5.166,361,6.897,368,4.219,385,3.802,397,2.449,404,3.949,409,6.274,424,9.529,445,5.137,448,4.035,466,6.967,495,4.276,529,7.04,533,7.664,546,4.575,575,2.781,606,6.765,627,2.949,658,8.659,660,5.434,693,4.385,699,8.168,752,6.572,803,6.181,810,5.219,842,3.949,861,8.321,864,4.192,895,3.476,897,4.38,915,7.561,1126,3.985,1143,5.82,1401,5.377,1443,5.144,1453,6.322,1488,6.227,1623,7.197,1643,5.492,1662,10.168,1716,3.706,1768,6.643,1916,5.971,1956,10.751,1985,8.168,2086,6.765,2120,7.561,2208,7.369,2210,8.676,2230,9.127,2231,11.592,2232,11.592,2233,9.745,2234,8.887,2235,11.592]],["keywords/206",[]],["title/207",[3,222.763,79,372.057]],["content/207",[1,3.071,2,1.958,3,3.753,11,5.869,13,3.015,15,5.593,16,1.27,18,3.731,19,3.142,20,5.555,22,1.623,25,2.494,36,3.381,43,2.308,56,7.709,59,6.02,61,3.068,73,3.04,79,5.814,89,1.894,103,8.122,106,3.199,113,2.069,154,5.733,186,4.241,195,2.577,207,3.761,220,3.729,222,2.163,224,0.998,226,1.98,229,3.682,235,4.527,261,3.264,281,3.142,282,2.592,287,3.761,294,5.52,298,4.468,303,3.761,307,2.959,330,2.967,333,5.733,334,3.621,354,2.168,355,2.261,357,4.12,358,5.036,359,3.778,374,3.253,426,3.975,430,4.95,445,2.691,464,2.202,465,5.539,469,5.028,504,6.843,511,6.529,520,5.229,527,4.557,538,5.587,657,6.193,668,6.92,676,4.307,680,9.604,704,3.469,731,3.636,831,4.258,918,5.989,973,5.897,998,5.282,1021,6.423,1042,3.536,1066,5.52,1080,7.709,1198,6.193,1308,8.774,1412,5.395,1443,3.9,1510,7.133,1633,5.229,1837,4.385,1914,11.458,1915,9.784,1956,10.258,1957,17.857,1958,6.436,1959,8.138,1960,8.138,1961,12.62,2198,7.389,2220,6.193,2236,13.63,2237,7.389,2238,7.133,2239,7.389,2240,8.192,2241,7.389]],["keywords/207",[]],["title/208",[11,311.729,285,736.511,2233,961.816]],["content/208",[1,1.841,2,1.658,3,3.534,11,6.503,13,1.808,18,1.826,22,0.794,64,3.791,65,3.715,66,2.843,69,6.101,70,3.288,89,3.434,92,5.741,97,5.741,113,3.031,137,4.326,139,3.752,161,3.177,167,4.725,168,3.65,185,2.853,195,1.764,222,2.043,223,4.308,226,1.841,228,2.269,231,3.262,237,6.91,244,3.752,251,3.841,277,2.714,279,4.234,285,14.077,291,3.533,294,5.132,296,3.213,313,5.984,315,6.869,331,5.659,334,5.305,335,2.901,338,6.722,347,2.945,360,3.661,363,4.209,368,2.974,380,4.911,397,2.72,398,9.637,399,1.669,400,5.463,401,7.914,402,9.87,405,4.725,406,6.434,407,7.566,409,4.422,410,7.738,413,7.353,414,5.483,415,4.389,416,4.237,422,2.515,440,3.166,444,5.984,445,2.502,469,3.014,485,3.56,490,2.28,495,3.014,504,4.102,511,3.914,516,4.564,551,3.313,578,4.389,604,4.209,627,2.079,650,5.194,657,5.758,664,5.132,743,4.862,847,4.831,849,3.056,908,2.935,960,5.483,1148,6.264,1278,5.33,1315,5.132,1455,4.911,1626,8.917,1710,5.866,1737,5.984,1759,6.264,1813,7.566,1837,4.077,1956,7.021,2233,6.869,2242,8.171,2243,6.434,2244,8.171,2245,7.167,2246,8.171,2247,6.434,2248,4.642,2249,8.171,2250,8.171,2251,5.568,2252,5.866,2253,8.171,2254,12.875,2255,6.116,2256,8.171,2257,6.116,2258,8.171,2259,8.171,2260,6.264]],["keywords/208",[]],["title/209",[222,218.697,261,511.896]],["content/209",[2,0.898,3,2.171,15,3.343,16,1.246,43,2.265,44,5.553,57,7.839,78,4.704,79,2.328,107,7.013,110,6.297,127,3.279,145,4.022,192,4.278,195,2.765,208,7.705,213,5.295,221,4.331,222,3.541,224,2.428,226,3.718,228,2.395,231,3.444,242,9.153,246,4.818,251,6.886,261,4.989,281,3.097,287,3.692,290,5.774,316,6.463,335,1.944,340,1.92,356,4.9,358,4.943,361,5.132,362,5.239,368,3.14,373,6.192,374,3.193,388,6.792,400,3.66,401,8.12,404,2.939,410,5.184,411,4.567,428,3.193,445,4.113,489,4.065,495,3.182,511,7.903,515,4.414,520,5.132,536,5.483,554,9.153,568,3.294,643,10.621,664,8.437,676,4.227,689,5.234,735,10.761,785,7.001,840,9.838,847,3.237,917,6.613,921,5.749,974,4.943,981,6.192,995,5.132,1005,7.001,1010,7.566,1049,6.399,1091,4.741,1113,6.703,1139,5.974,1300,10.054,1455,5.184,1623,5.355,1626,5.974,1710,6.192,1770,6.317,1832,4.704,1835,6.456,1956,7.326,1985,6.078,2020,3.758,2065,6.613,2183,14.471,2208,8.539,2216,5.705,2252,6.192,2261,7.566,2262,5.974,2263,7.987,2264,6.078,2265,6.317,2266,8.626,2267,7.987,2268,8.626,2269,6.792,2270,7.566,2271,6.192,2272,7.001,2273,8.626,2274,7.987,2275,7.001]],["keywords/209",[]],["title/210",[43,300.406,287,489.646,790,623.908]],["content/210",[1,1.173,2,1.21,3,3.192,15,6.659,16,0.752,19,1.2,22,0.506,43,3.054,69,1.453,74,3.814,79,4.168,94,3.494,95,3.898,106,1.895,145,2.428,161,3.457,180,4.307,181,3.724,185,1.818,195,1.884,197,2.958,207,2.229,208,2.155,226,1.173,228,1.446,232,3.13,251,1.554,272,2.665,281,3.17,283,1.954,287,3.805,291,2.439,327,3.352,357,6.446,374,1.927,387,2.523,397,1.1,401,2.095,408,4.956,422,1.603,424,2.958,445,1.595,447,2.063,458,2.3,477,11.836,489,2.454,495,3.279,511,2.495,527,2.7,562,3.444,568,1.989,578,2.797,594,2.322,601,2.416,678,3.197,689,2.498,721,4.382,727,3.814,749,2.583,805,3.669,812,3.983,823,2.3,871,2.631,872,3.068,906,2.333,909,2.909,929,2.665,930,2.777,941,4.378,983,3.814,1008,4.307,1023,1.223,1025,7.305,1042,3.576,1043,3.039,1066,3.271,1083,6.381,1142,1.818,1278,5.799,1381,4.1,1428,7.473,1450,4.1,1545,4.226,1570,3.992,1624,2.738,1651,4.378,1723,3.548,1792,4.226,1798,5.651,1831,3.814,1915,3.738,1938,4.226,1939,4.568,1956,7.499,1973,3.098,2029,6.156,2057,4.1,2116,4.568,2179,4.568,2186,4.568,2210,3.898,2220,6.264,2240,5.343,2276,13.75,2277,4.378,2278,5.207,2279,5.207,2280,4.822,2281,8.889,2282,7.215,2283,8.231,2284,4.568,2285,4.822,2286,5.207,2287,5.207,2288,5.207,2289,5.207,2290,5.207,2291,7.215,2292,8.889,2293,5.207,2294,4.822,2295,5.207,2296,4.378,2297,5.207,2298,4.822,2299,11.63,2300,5.207,2301,5.207,2302,8.889,2303,5.207,2304,5.207,2305,3.606,2306,5.207,2307,3.992,2308,4.822,2309,5.207,2310,5.207,2311,5.207,2312,5.207,2313,5.207,2314,5.207,2315,5.207,2316,5.207,2317,6.156,2318,5.207,2319,5.207,2320,5.207,2321,5.207,2322,5.207,2323,5.207,2324,4.822,2325,5.207,2326,5.207,2327,5.207,2328,5.207,2329,5.207,2330,5.207,2331,5.207,2332,5.207,2333,5.207,2334,5.207,2335,5.207,2336,3.669,2337,3.898,2338,5.207,2339,5.207,2340,4.822,2341,5.207,2342,5.207,2343,5.207,2344,5.207,2345,5.207,2346,5.207,2347,5.207,2348,5.207,2349,5.207,2350,5.207,2351,5.207,2352,5.207,2353,5.207,2354,5.207,2355,5.207,2356,5.207,2357,5.207,2358,5.207,2359,5.207,2360,5.207,2361,5.207,2362,5.207,2363,5.207,2364,5.207,2365,5.207,2366,5.207,2367,5.207,2368,5.207,2369,5.207,2370,5.207,2371,5.207,2372,5.207,2373,5.207,2374,5.207,2375,5.207,2376,5.207,2377,4.822,2378,5.207,2379,8.889,2380,4.568,2381,5.207,2382,5.207,2383,4.822,2384,5.207,2385,11.63,2386,5.207,2387,5.207,2388,5.207,2389,3.992,2390,5.207,2391,5.207,2392,5.207,2393,5.207,2394,5.207,2395,5.207,2396,5.207,2397,5.207,2398,5.207,2399,8.889,2400,5.207,2401,8.889,2402,5.207,2403,5.207,2404,5.207,2405,5.207,2406,5.207,2407,4.568,2408,5.207,2409,5.207,2410,5.207,2411,5.207,2412,4.568,2413,5.207]],["keywords/210",[]],["title/211",[445,422.038,1170,1085.254]],["content/211",[2,1.791,3,1.941,11,5.984,13,2.657,16,1.735,18,2.684,22,1.168,43,3.154,79,3.242,97,5.356,145,8.025,175,6.55,191,7.077,192,5.957,195,3.314,208,4.969,222,3.689,226,3.878,251,7.217,277,2.532,279,5.66,284,5.174,285,7.732,287,5.141,290,5.163,307,4.043,316,6.742,338,6.271,348,6.405,367,4.555,401,4.832,413,5.543,445,3.678,467,4.87,495,6.348,557,5.281,602,6.146,643,7.732,689,3.376,693,3.14,727,8.796,773,9.457,790,6.55,801,8.318,841,6.359,974,6.883,981,8.622,1267,5.096,1278,7.835,1481,9.112,1512,10.535,1710,12.354,1739,10.535,1843,7.457,1955,9.457,1956,11.977,2042,3.687,2093,8.622,2260,9.208,2269,9.457,2337,8.99,2414,12.011,2415,12.011,2416,12.011,2417,10.535]],["keywords/211",[]],["title/212",[533,629.721,752,539.96]],["content/212",[8,5.98,22,1.608,66,3.651,79,4.464,89,4.613,162,6.842,186,5.145,195,2.266,208,6.842,222,2.624,224,1.879,235,8.518,238,9.162,241,6.87,251,4.934,277,3.486,279,7.041,284,4.972,335,3.726,340,3.681,408,7.047,434,8.303,644,6.602,660,10.035,719,9.089,1074,8.252,1268,12.678,1481,8.755,1610,12.378,1916,8.518,1930,10.387,1956,9.018,2038,11.268,2208,10.513,2262,11.453,2418,16.537,2419,11.653,2420,14.505]],["keywords/212",[]],["title/213",[2,119.066,575,274.491,804,471.42]],["content/213",[2,2.641,3,2.479,8,5.546,15,3.817,66,3.386,159,12.076,195,3.34,216,6.452,244,7.043,268,5.716,277,3.234,283,5.755,284,4.611,307,5.163,319,10.451,327,9.874,335,3.456,352,4.428,408,6.536,413,7.079,421,8.497,437,7.849,575,3.68,597,8.789,600,10.451,644,6.123,646,7.115,658,6.147,660,7.19,692,8.179,693,4.009,716,14.202,752,7.982,804,9.428,812,6.872,1023,3.603,1108,11.48,1121,7.307,1481,8.12,2421,12.448,2422,9.416,2423,15.338]],["keywords/213",[]],["title/214",[2,101.77,66,215.902,195,133.976,711,646.731]],["content/214",[]],["keywords/214",[]],["title/215",[2042,532.102]],["content/215",[2,1.958,13,4.162,18,4.204,36,7.235,69,5.249,79,5.078,89,4.054,136,7.262,186,5.853,225,9.062,228,5.224,244,8.638,325,9.011,331,13.028,420,13.776,573,11.678,575,4.513,634,12.441,639,14.258,644,7.51,804,7.751,901,9.062,2424,18.811]],["keywords/215",[]],["title/216",[286,1163.024]],["content/216",[2,2.579,3,2.311,8,5.171,16,2.066,19,3.296,49,3.679,61,4.993,66,3.157,89,3.082,97,6.376,103,6.175,128,8.878,146,10.013,178,9.744,195,3.738,215,9.458,222,3.084,223,4.257,224,2.509,277,3.015,279,4.703,294,8.982,302,10.703,307,6.544,340,3.183,375,7.86,413,8.972,577,10.703,605,7.05,650,9.091,660,6.704,661,7.518,667,9.744,693,5.081,784,9.904,1105,8.595,1134,9.596,1367,11.606,1549,9.904,2421,11.606,2425,14.3,2426,14.3]],["keywords/216",[]],["title/217",[66,304.314,222,218.697]],["content/217",[2,1.545,3,4.141,7,2.967,11,4.638,13,1.625,15,3.695,16,1.061,18,2.643,19,2.727,22,1.15,25,4.214,30,2.349,31,1.898,47,3.323,49,1.89,66,3.278,68,3.538,69,2.05,79,1.983,83,4.037,87,3.052,89,3.2,113,4.694,130,5.325,136,2.836,168,1.483,179,6.175,181,3.077,185,5.184,195,2.332,206,3.039,207,3.144,219,3.323,222,3.46,223,3.252,224,2.265,228,2.04,229,7.13,230,5.028,241,6.168,251,3.529,261,4.393,266,7.074,270,2.298,277,3.934,279,2.416,281,1.693,282,2.824,290,3.158,295,3.835,298,3.735,303,3.144,307,5.73,329,4.599,352,4.914,354,1.812,357,5.544,359,9.013,360,3.291,376,5.962,397,1.552,399,1.501,408,3.13,416,3.809,430,4.137,435,6.014,443,4.287,465,2.437,467,2.979,485,3.2,490,3.3,495,2.71,511,3.519,515,3.759,526,2.085,530,8.665,533,5.404,540,3.559,552,3.784,557,3.23,627,1.869,645,5.962,677,3.275,679,3.407,689,2.064,693,3.092,698,3.809,731,3.039,808,3.13,810,5.325,873,3.462,897,2.776,1018,5.005,1020,4.037,1021,5.574,1022,4.069,1033,4.613,1034,6.443,1042,2.955,1063,3.975,1110,4.037,1113,3.665,1133,2.639,1187,4.67,1212,4.006,1435,6.175,1443,3.26,1775,3.946,1850,5.631,1886,5.962,1984,9.963,2098,5.784,2130,5.005,2159,6.443,2427,7.345,2428,5.784,2429,7.345,2430,6.801]],["keywords/217",[]],["title/218",[66,304.314,223,301.858]],["content/218",[2,1.99,3,4.001,4,4.112,7,3.114,11,6.049,16,1.114,18,2.748,19,1.777,22,1.491,25,2.188,30,4.904,36,2.966,47,3.488,49,3.946,66,1.702,69,4.279,89,3.305,113,2.895,154,8.021,162,3.19,168,2.483,175,4.205,181,3.23,195,3.214,222,2.777,223,4.682,224,1.742,228,2.141,229,3.23,230,2.611,251,3.669,258,2.454,261,5.696,266,3.673,270,2.412,277,3.69,281,1.777,282,2.339,303,3.3,307,2.596,318,5.433,335,1.738,352,2.226,359,9.836,360,5.509,361,4.588,363,3.972,365,5.1,385,2.529,397,2.598,408,3.286,413,9.404,417,4.343,430,4.343,434,6.174,435,7.798,445,2.361,465,4.079,467,3.127,488,5.254,490,2.151,511,3.694,515,3.946,530,4.5,533,5.618,644,4.909,677,3.438,689,2.167,691,6.071,693,2.015,698,3.998,721,3.801,728,4.307,731,3.19,742,7.14,810,5.536,842,4.189,845,6.482,849,2.883,887,5.433,920,4.054,966,5.03,976,3.315,1021,3.634,1022,4.272,1033,4.843,1042,3.102,1066,10.992,1110,4.238,1113,3.847,1187,7.817,1643,3.653,1775,4.142,1811,5.647,1850,5.911,1896,6.258,1912,6.258,1915,5.535,1984,5.174,2025,4.419,2130,5.254,2169,6.482,2265,5.647,2431,7.711,2432,6.763,2433,6.763,2434,7.711,2435,6.482,2436,7.711,2437,7.711]],["keywords/218",[]],["title/219",[533,629.721,832,1085.254]],["content/219",[2,2.306,3,4.014,11,3.921,25,4.083,49,3.702,66,3.177,87,5.978,89,4.207,116,8.397,154,9.386,186,4.477,195,3.255,220,8.283,222,3.097,223,5.203,225,6.931,268,5.362,270,4.501,277,3.034,283,5.399,345,8.466,360,6.446,413,10.225,434,7.224,481,8.833,494,7.461,547,7.412,575,3.452,576,11.031,578,7.729,579,8.874,634,9.516,639,8.833,666,6.509,771,6.185,808,6.131,832,11.329,1001,12.097,1105,8.648,1121,9.3,1580,11.329,2093,10.329]],["keywords/219",[]],["title/220",[16,141.294,693,255.603,1217,440.224,1220,438.107]],["content/220",[]],["keywords/220",[]],["title/221",[422,424.277,864,498.398]],["content/221",[1,1.785,3,1.28,8,2.864,13,3.454,15,3.127,16,2.799,18,1.77,22,1.221,24,5.019,25,4.43,30,2.533,31,2.047,61,2.765,66,1.749,69,2.21,79,3.391,82,5.581,112,2.651,115,5.818,127,3.066,136,4.85,146,4.08,180,3.837,196,4.867,205,3.713,207,3.39,220,3.361,222,1.257,223,1.735,224,0.9,226,1.785,228,2.199,258,2.507,266,3.773,267,5.099,270,2.478,279,2.605,293,4.424,303,3.39,307,2.667,316,4.921,330,4.242,334,3.264,343,2.942,350,5.238,357,5.889,374,4.65,386,3.905,387,3.837,404,2.699,422,2.438,427,2.874,448,4.372,461,6.699,490,2.21,513,3.361,515,4.053,552,4.08,569,4.107,575,3.746,603,3.674,625,4.255,627,3.196,641,5.498,646,3.674,647,2.952,657,5.581,675,5.035,693,3.284,698,4.107,711,5.238,752,4.921,777,4.667,779,4.81,810,3.566,812,3.549,842,2.699,901,3.816,903,9.403,921,5.376,926,4.107,946,5.167,981,5.686,1189,3.15,1210,5.952,1214,5.167,1215,5.711,1220,11.308,1221,8.716,1227,6.948,1230,8.096,1237,4.107,1241,10.325,1267,3.361,1315,4.975,1487,6.948,1507,5.581,1579,6.072,1810,4.917,2078,4.255,2225,6.659,2257,5.928,2407,11.019,2438,6.237,2439,6.237,2440,7.921,2441,7.921,2442,7.921,2443,6.659,2444,5.801,2445,6.659,2446,6.659,2447,7.921,2448,7.334,2449,5.928,2450,13.013,2451,9.403,2452,9.2,2453,5.928,2454,5.686,2455,5.315,2456,5.686,2457,5.928,2458,7.921,2459,7.921,2460,7.921,2461,5.686]],["keywords/221",[]],["title/222",[864,498.398,2027,696.341]],["content/222",[13,5.293,15,3.894,16,1.523,22,1.025,24,5.348,25,2.991,66,2.327,69,2.941,82,7.428,92,9.206,113,2.481,115,5.831,136,7.203,185,3.68,226,2.375,289,4.84,297,4.453,330,5.283,334,4.344,335,2.375,340,2.346,343,3.915,352,3.043,357,4.941,374,5.791,422,3.245,427,3.824,575,4.477,603,4.89,604,5.43,607,6.977,625,5.662,641,6.848,644,6.247,646,4.89,647,3.928,651,6.32,693,4.09,779,6.402,810,4.746,812,4.723,864,3.812,946,6.876,975,7.074,1049,5.022,1217,4.746,1220,11.009,1230,9.676,1237,5.466,1241,12.341,1267,4.473,1507,7.428,1552,6.786,1988,4.492,2027,7.905,2078,5.662,2443,8.862,2444,7.72,2445,8.862,2446,8.862,2449,7.89,2450,15.121,2451,11.711,2452,11.459,2453,7.89,2454,7.567,2455,7.074,2456,7.567,2457,7.89,2462,6.621,2463,17.358,2464,9.246,2465,9.246,2466,6.402,2467,9.246,2468,9.246]],["keywords/222",[]],["title/223",[61,399.429,864,413.694,1150,398.191]],["content/223",[13,5.112,15,3.894,22,1.025,24,5.348,25,2.991,61,3.68,66,2.327,69,2.941,82,7.428,92,4.7,94,7.074,112,6.245,115,3.928,136,7.203,146,5.43,226,2.375,263,3.236,297,4.453,330,6.3,334,4.344,335,2.375,343,3.915,345,4.572,357,4.941,374,5.791,385,3.457,422,5.744,445,3.228,575,2.529,603,7.259,616,2.688,625,5.662,641,6.848,644,4.208,647,3.928,651,6.32,693,2.755,707,3.635,779,9.503,810,4.746,812,4.723,864,3.812,946,6.876,1049,5.022,1143,5.292,1150,6.494,1163,8.813,1165,7.183,1215,4.792,1217,4.746,1220,10.718,1230,9.676,1237,5.466,1241,13.655,1267,4.473,1507,11.026,1859,5.888,2078,5.662,2449,7.89,2450,16.153,2451,13.966,2452,13.665,2453,7.89,2454,7.567,2455,7.074,2456,7.567,2457,7.89,2462,6.621,2469,16.257,2470,6.876,2471,8.862,2472,9.246,2473,5.705]],["keywords/223",[]],["title/224",[864,498.398,1151,763.589]],["content/224",[13,4.981,15,3.696,22,0.956,24,5.165,25,2.789,66,4.726,68,4.735,69,2.742,82,6.926,92,4.382,115,3.663,136,6.908,155,3.879,220,6.3,258,3.571,277,2.072,297,6.273,330,5.013,334,4.05,335,5.073,340,3.305,343,3.65,345,4.263,352,4.287,357,4.607,374,5.496,385,3.223,417,5.536,422,4.57,461,12.005,513,4.17,574,4.468,575,2.358,603,4.559,625,5.28,641,6.498,644,3.924,647,3.663,651,8.054,660,4.607,693,2.569,721,4.845,779,9.017,812,4.403,866,8.621,946,6.411,1074,7.409,1151,8.226,1215,4.468,1217,4.425,1220,10.472,1230,9.279,1237,5.097,1241,11.834,1267,4.17,1507,6.926,2041,4.263,2078,5.28,2248,5.583,2317,6.807,2449,7.356,2450,14.602,2451,11.113,2452,10.874,2453,7.356,2454,7.055,2455,6.595,2456,7.055,2457,7.356,2462,14.139,2469,15.7,2474,9.829,2475,8.621]],["keywords/224",[]],["title/225",[16,250.43]],["content/225",[6,6.56,13,4.283,15,4.818,18,3.177,22,1.382,24,3.682,31,3.673,112,4.757,127,3.469,154,9.271,163,4.729,222,2.255,223,3.113,224,1.615,254,7.092,258,2.836,283,5.333,296,5.589,303,6.083,316,5.568,354,3.507,355,3.657,385,4.661,404,4.842,427,5.156,448,6.738,465,4.715,493,7.579,515,7.273,596,12.306,647,5.297,651,5.741,693,3.715,698,7.37,870,9.271,921,6.083,1023,3.339,1042,5.718,1110,7.812,1132,10.409,1210,9.172,1215,6.461,1217,6.398,1220,11.08,1221,5.527,1227,12.467,1228,11.191,1230,10.038,1240,10.896,1401,6.593,2042,4.363,2407,16.98,2438,11.191]],["keywords/225",[]],["title/226",[223,250.557,465,379.544,632,512.565]],["content/226",[]],["keywords/226",[]],["title/227",[47,386.262,222,135.479,422,262.833,447,338.286,465,283.262]],["content/227",[3,2.813,11,4.742,22,1.692,36,6.694,102,9.419,106,6.335,223,4.844,241,7.23,251,5.192,261,6.463,263,5.343,268,6.486,352,6.386,372,5.371,447,6.895,465,7.338,602,8.906,631,10.355,672,11.352,728,12.355,901,8.384,918,11.859,1442,12.355,1863,11.352,2476,12.263,2477,17.403,2478,17.403,2479,17.403,2480,17.403]],["keywords/227",[]],["title/228",[3,222.763,222,218.697]],["content/228",[1,2.075,2,1.47,3,3.693,8,3.329,11,5.98,19,2.122,22,1.373,30,2.944,39,5.533,47,4.165,69,3.942,113,5.55,127,2.247,163,3.063,195,1.261,198,4.206,222,3.059,223,3.764,229,5.918,230,3.118,237,3.993,241,5.869,250,5.142,251,4.214,258,1.837,261,3.419,266,4.386,273,6.089,277,1.941,303,3.94,307,3.099,317,6.376,329,3.58,340,2.049,347,6.195,352,2.658,354,2.271,355,2.369,357,4.316,359,9.822,361,8.405,363,4.742,372,5.95,385,5.637,399,1.881,422,2.834,427,3.34,440,3.567,445,2.819,447,8.239,457,6.329,465,8.02,481,5.652,493,4.909,505,4.681,522,5.852,530,5.373,533,4.206,599,6.099,631,5.477,679,4.271,683,7.058,705,6.178,721,4.539,728,5.142,752,5.534,804,3.793,807,5.782,810,6.359,834,5.782,841,7.479,920,4.84,930,4.909,966,6.005,982,5.782,1021,4.339,1038,8.98,1042,3.704,1066,10.796,1113,4.594,1267,3.906,1618,6.273,1621,5.591,1851,6.608,2066,7.74,2448,8.524,2481,8.524,2482,9.206,2483,8.524,2484,9.206]],["keywords/228",[]],["title/229",[3,222.763,268,513.649]],["content/229",[1,4.043,3,3.357,11,6.477,22,2.192,47,5.761,102,9.709,113,5.595,127,3.108,195,1.745,223,3.929,227,4.094,237,5.523,251,3.799,255,7.234,258,2.541,261,4.729,263,3.91,268,6.686,277,3.782,281,2.936,291,3.494,307,4.287,329,4.952,347,4.59,365,11.865,385,4.176,422,3.92,440,4.934,447,7.108,457,5.705,465,7.886,505,6.475,599,8.968,603,5.907,705,8.545,728,7.113,752,4.989,761,10.02,807,7.998,841,9.498,920,6.695,982,7.998,1001,10.706,1025,7.998,1066,11.268,1267,5.403,1604,8.973,1621,7.734,1851,9.141,2481,11.791,2483,11.791,2485,17.94,2486,12.734]],["keywords/229",[]],["title/230",[47,442.372,223,214.16,263,300.216,465,324.41]],["content/230",[1,3.433,2,1.059,3,3.686,7,4.109,8,3.678,9,6.549,11,2.772,16,1.47,22,1.481,25,2.887,39,6.114,66,2.246,68,4.9,86,4.671,89,2.192,102,5.505,113,2.395,136,3.927,154,6.635,162,4.209,168,2.054,185,3.552,198,4.648,223,4.995,226,2.292,230,3.445,241,7.59,251,4.546,258,3.041,261,3.778,263,6.228,266,4.846,275,6.245,284,3.058,307,5.129,323,6.315,325,4.873,330,3.435,359,8.721,363,5.24,365,6.728,368,3.703,372,4.703,374,3.765,385,4.997,399,2.078,404,3.466,434,5.107,435,5.172,440,3.941,447,8.038,458,6.73,465,8.818,488,6.931,495,3.752,503,11.474,522,6.467,598,6.389,735,6.635,752,3.985,807,6.389,810,9.133,816,5.636,818,4.794,841,5.386,897,3.844,921,6.521,926,5.275,929,5.206,1021,4.794,1023,2.389,1042,4.093,1113,5.076,1326,5.729,1443,4.514,1765,6.178,1798,6.467,1851,10.938,1992,6.931,2487,7.168]],["keywords/230",[]],["title/231",[689,274.828,790,533.277,2041,424.116,2100,465.863]],["content/231",[]],["keywords/231",[]],["title/232",[286,1163.024]],["content/232",[2,2.001,3,2.626,16,1.603,22,1.869,36,4.267,40,7.053,43,2.913,87,4.609,139,9.718,145,5.173,162,7.954,168,2.24,191,6.537,195,3.225,208,4.59,222,1.76,223,3.558,224,1.846,226,3.661,235,5.715,251,3.31,279,6.323,281,2.557,284,4.885,287,4.748,294,6.968,299,7.818,300,7.237,302,8.304,325,5.315,330,3.746,335,2.5,340,2.47,352,4.691,396,4.609,422,3.415,445,5.887,524,9.327,529,6.738,541,5.753,568,4.237,660,5.201,661,5.832,664,6.968,686,8.125,689,3.118,692,5.916,719,6.098,752,4.346,788,6.601,790,8.861,1020,6.098,1110,6.098,1258,8.304,1268,8.505,1481,8.602,1488,5.96,1555,8.304,1623,6.888,1651,9.327,1916,8.369,1930,13.292,2038,7.56,2041,9.179,2100,10.082,2187,9.004,2208,12.221,2260,8.505,2262,7.683,2419,7.818,2488,11.094,2489,11.094]],["keywords/232",[]],["title/233",[790,945.178]],["content/233",[18,2.671,22,1.162,43,4.502,78,6.516,87,4.964,115,4.453,144,8.751,145,5.572,160,5.601,161,6.668,181,5.006,186,3.718,195,3.486,213,10.526,221,5.999,222,3.832,241,4.964,251,7.421,277,2.519,287,7.338,290,5.137,291,3.279,298,8.718,301,10.481,307,5.772,316,4.681,335,3.864,367,4.531,428,4.423,445,3.659,466,10.305,490,4.784,536,7.596,541,6.196,568,4.563,672,7.794,689,4.819,698,6.196,755,10.046,790,10.936,791,7.04,906,7.682,908,4.293,1008,5.789,1258,8.944,1267,5.07,1348,9.826,1481,6.326,1604,8.42,1710,8.578,1943,6.848,2029,11.875,2172,11.064,2173,11.064,2174,7.693,2175,11.064,2176,11.064,2177,8.578,2178,11.064,2179,10.481,2180,11.064,2490,11.949]],["keywords/233",[]],["title/234",[2042,532.102]],["content/234",[2,2.102,22,1.472,71,6.566,115,5.641,127,4.93,147,8.132,195,2.767,254,7.553,299,10.667,335,4.552,340,3.37,422,4.66,430,8.526,445,4.635,490,4.224,513,8.57,518,5.887,526,5.732,542,8.132,557,6.656,627,3.852,706,13.764,779,9.194,847,5.68,915,9.874,1093,11.919,1453,8.255,1481,12.035,1581,11.605,1614,8.32,1624,7.958,1760,11.605,1904,11.086,1913,12.726,2100,9.623,2208,9.623,2422,9.293,2491,14.017,2492,13.278,2493,16.981,2494,12.726,2495,12.726,2496,13.278]],["keywords/234",[]],["title/235",[226,170.748,277,159.751,335,170.748,445,232.017,752,296.845,925,346.191]],["content/235",[]],["keywords/235",[]],["title/236",[864,498.398,2041,597.791]],["content/236",[2,1.214,11,3.758,13,2.582,15,3.853,16,0.756,18,1.994,20,1.74,24,4.912,31,2.306,36,2.012,41,2.594,43,1.374,66,4.526,82,3.686,87,2.173,89,1.127,94,3.51,95,3.915,145,2.439,147,4.793,168,3.829,172,1.949,180,5.653,195,2.121,225,2.52,226,1.179,238,2.898,254,4.453,281,1.206,283,1.963,284,1.573,287,2.239,312,3.819,335,4.056,338,4.659,339,3.325,340,1.986,343,4.334,357,5.47,367,1.984,374,1.936,383,4.904,385,1.715,415,11.013,422,3.592,432,5.228,434,4.48,438,3.247,439,4.724,445,2.732,455,4.691,458,2.311,465,1.735,469,1.93,489,2.465,513,4.951,533,2.39,568,3.408,575,2.141,596,3.325,604,4.596,641,2.289,651,4.713,689,2.508,692,4.758,698,2.712,706,10.548,707,3.077,752,2.049,779,3.177,790,6.364,805,3.686,808,2.229,813,2.898,835,4.251,856,5.257,872,3.082,875,2.49,877,3.686,921,2.239,948,4.398,1059,7.026,1077,6.535,1113,2.61,1126,1.798,1132,3.831,1142,1.826,1189,3.549,1210,2.478,1267,2.219,1292,4.01,1396,5.745,1481,2.769,1509,4.245,1554,3.325,1565,3.325,1623,3.247,1643,5.529,1709,4.793,1723,6.08,1809,3.285,1840,3.755,1904,3.831,1937,4.588,2020,2.279,2041,3.87,2056,3.915,2067,3.51,2219,4.245,2220,6.288,2239,4.398,2296,4.398,2389,6.841,2412,4.588,2419,6.288,2455,3.51,2470,12.908,2491,4.843,2492,4.588,2497,4.588,2498,8.923,2499,11.669,2500,5.231,2501,4.588,2502,4.398,2503,5.231,2504,8.923,2505,10.805,2506,8.923,2507,8.923,2508,8.923,2509,3.564,2510,2.946,2511,5.231,2512,5.231,2513,5.231,2514,5.231,2515,5.231,2516,5.231,2517,5.231,2518,8.467,2519,5.231,2520,5.231,2521,4.398,2522,4.588,2523,5.231,2524,8.923,2525,5.231,2526,5.231,2527,12.77,2528,5.231,2529,5.231,2530,5.231,2531,3.755,2532,5.231,2533,5.231,2534,4.843,2535,5.231,2536,5.231,2537,5.231,2538,5.231,2539,5.231,2540,4.843,2541,5.231,2542,4.119,2543,5.231,2544,8.923,2545,3.623,2546,13.791,2547,5.231,2548,5.231,2549,11.311,2550,9.397,2551,8.923,2552,8.923,2553,13.791,2554,8.923,2555,8.923,2556,8.923,2557,8.923,2558,4.843,2559,3.564,2560,4.245,2561,8.546,2562,2.971,2563,2.579,2564,2.971,2565,7.718,2566,3.51,2567,4.843]],["keywords/236",[]],["title/237",[16,165.308,790,623.908,2041,496.196]],["content/237",[2,0.577,6,2.558,13,1.226,15,3.565,16,1.354,18,2.095,20,5.328,22,1.184,49,1.426,64,5.65,66,3.838,69,1.546,71,2.404,73,1.917,89,3.086,95,4.148,115,2.065,127,2.288,144,4.059,145,2.585,161,2.155,162,2.293,168,4.907,173,2.08,186,2.916,191,3.265,192,2.749,195,2.536,196,2.147,208,2.293,222,2.541,224,1.065,226,3.608,228,1.539,241,2.303,251,5.522,261,2.058,263,1.702,270,2.932,277,1.976,281,2.161,291,2.572,295,2.894,307,4.1,312,4.012,316,5.611,317,3.838,330,3.165,334,2.284,335,3.917,338,4.894,340,2.086,343,3.481,363,2.855,367,2.102,374,2.051,385,3.074,401,2.23,404,1.888,408,3.994,415,2.977,422,2.885,429,3.441,432,2.483,445,4.385,448,1.929,458,4.14,495,4.492,511,4.49,513,6.077,518,4.736,529,5.692,568,7.74,575,3.436,604,2.855,627,1.41,641,2.426,646,2.571,651,8.186,657,3.905,661,2.914,672,3.615,677,2.471,678,3.403,682,2.204,692,6.494,693,2.45,704,2.188,706,3.777,731,3.878,749,2.749,790,8.733,792,3.862,811,4.66,812,2.483,814,3.523,864,3.389,876,6.034,912,3.979,921,4.012,974,3.176,993,3,998,3.331,1008,2.685,1044,3.148,1088,3.615,1093,4.364,1121,2.64,1126,3.222,1142,1.935,1189,6.368,1313,3.523,1344,3.366,1391,3.568,1453,3.023,1481,2.934,1488,2.977,1633,3.298,1702,5.819,1709,2.977,1748,2.732,1820,3.838,1837,2.766,1904,4.059,1913,4.66,1916,2.855,1990,4.862,2020,2.415,2041,2.404,2080,3.615,2109,4.364,2167,4.66,2174,3.568,2186,4.862,2187,4.498,2214,4.148,2220,3.905,2226,4.364,2237,4.66,2270,4.862,2271,3.979,2419,3.905,2487,6.605,2492,4.862,2505,8.679,2518,9.831,2527,5.132,2540,5.132,2560,9.884,2561,10.489,2564,6.918,2565,10.59,2566,8.172,2567,8.679,2568,3.481,2569,7.015,2570,4.148,2571,7.38,2572,3.979,2573,3.523,2574,5.543,2575,5.543,2576,7.186,2577,5.543]],["keywords/237",[]],["title/238",[335,192.405,1093,672.297,2020,371.995,2493,717.825,2494,717.825]],["content/238",[2,0.958,7,3.718,11,2.508,15,6.419,18,2.058,19,3.256,22,0.895,25,2.613,36,3.541,39,5.533,95,10.573,97,4.105,112,3.081,113,2.167,147,4.945,152,4.982,162,3.809,168,3.892,185,4.932,192,4.566,195,1.935,226,2.075,229,3.857,230,3.118,241,3.825,244,4.227,270,2.88,283,3.455,298,4.681,327,5.927,330,3.108,335,4.344,339,5.852,343,3.419,367,3.491,404,3.136,415,12.987,422,2.834,429,5.715,445,2.819,504,7.092,513,5.994,532,5.1,533,4.206,568,3.516,575,2.209,641,4.029,651,7.787,692,10.28,693,3.692,721,4.539,747,13.753,749,7.006,752,3.607,823,6.24,875,2.569,911,7.74,925,6.454,929,4.711,976,7.389,982,5.782,1026,4.874,1050,5.918,1093,7.249,1125,6.376,1126,3.165,1210,4.362,1217,6.359,1368,6.089,1410,7.472,1453,5.02,1481,4.874,1488,4.945,1820,6.376,1942,6.608,2022,7.249,2061,8.524,2065,7.058,2296,7.74,2307,7.058,2419,6.487,2454,6.608,2493,11.876,2531,10.14,2542,7.249,2571,7.249,2578,14.126,2579,9.206,2580,9.206,2581,9.206,2582,6.891,2583,8.524,2584,13.08,2585,9.206,2586,9.206,2587,9.206,2588,9.206,2589,9.206,2590,9.206]],["keywords/238",[]],["title/239",[222,135.479,226,192.405,445,261.445,752,334.496,929,436.937]],["content/239",[1,1.318,2,2.341,3,3.347,11,6.129,13,1.294,15,2.441,16,2.142,18,1.307,20,3.263,30,1.87,31,2.535,36,2.25,43,1.536,49,1.505,56,5.131,59,4.332,61,2.042,64,2.713,66,1.291,69,4.608,79,5.125,88,3.515,89,2.114,103,5.468,106,2.129,112,1.958,113,1.377,118,4.484,127,1.428,128,3.631,146,3.013,155,3.871,158,4.284,167,3.382,180,6.136,181,4.109,195,2.93,207,5.42,222,2.836,223,2.148,224,0.664,225,4.725,226,2.21,229,2.45,237,2.537,251,4.927,255,3.323,261,2.172,263,3.011,277,3.125,279,1.924,281,2.919,285,10.631,287,2.503,288,5.086,291,4.068,294,3.674,298,2.974,307,1.969,312,4.198,316,2.291,321,2.802,325,2.802,326,3.48,330,3.312,334,2.41,335,1.318,351,7.323,357,4.598,359,5.444,364,3.294,368,5.396,370,2.621,377,2.993,380,3.515,383,3.215,385,1.918,387,2.834,388,4.605,401,2.353,404,1.993,408,4.179,421,3.24,422,1.8,428,2.165,429,3.631,445,1.791,504,4.924,514,4.284,527,5.086,533,5.786,556,4.273,564,3.868,605,2.884,634,6.486,660,5.937,661,3.075,664,6.16,668,4.605,676,2.867,679,2.713,680,8.924,682,2.326,693,1.529,728,8.28,730,3.552,741,3.19,749,2.901,752,3.842,771,2.514,803,3.119,812,2.621,822,5.131,831,2.834,836,5.895,920,3.075,926,3.033,998,3.515,1018,3.986,1021,2.757,1042,5.964,1049,2.787,1066,3.674,1085,4.122,1105,3.515,1113,2.919,1187,3.718,1267,2.482,1412,3.591,1443,2.596,1481,3.097,1488,3.142,1510,4.747,1610,4.378,1634,3.925,1650,4.378,1697,5.131,1708,2.85,1837,2.919,1945,3.352,1985,6.911,2017,5.131,2029,4.051,2039,5.416,2065,4.484,2120,3.815,2177,4.199,2181,4.051,2198,4.917,2208,3.718,2209,5.131,2220,8.924,2226,4.605,2229,3.925,2238,4.747,2239,4.917,2261,5.131,2262,4.051,2542,7.722,2568,3.674,2569,4.378,2583,5.416,2591,9.808,2592,5.849,2593,5.849,2594,3.868,2595,5.849,2596,5.416,2597,5.849,2598,3.414,2599,5.849,2600,5.849]],["keywords/239",[]],["title/240",[223,186.996,226,192.405,445,261.445,752,334.496,930,455.313]],["content/240",[2,1.84,3,1.558,11,3.986,15,5.172,16,2.283,19,0.94,22,1.289,30,2.298,31,1.857,35,6.374,36,2.764,43,2.531,59,1.8,66,4.588,69,2.689,97,1.817,113,0.959,115,2.678,127,0.995,136,1.573,139,1.872,145,4.494,158,5.263,162,1.686,168,2.346,172,2.678,173,3.617,179,3.752,181,3.011,185,2.509,188,2.659,189,3.051,192,4.78,195,2.302,205,1.911,206,1.686,216,1.715,222,1.529,223,3.46,224,0.816,226,4.158,228,2.676,229,3.011,251,3.467,261,2.669,270,1.275,272,2.086,277,1.515,279,5.815,281,2.222,283,2.697,287,1.744,290,3.089,291,3.189,296,1.603,298,2.072,307,1.372,316,1.597,330,1.376,335,2.987,340,1.6,354,2.378,355,1.049,357,5.447,359,3.089,361,5.735,363,2.099,374,4.907,391,2.502,392,2.56,396,1.693,408,3.062,413,3.317,415,3.86,416,2.114,430,2.296,434,2.046,438,2.53,444,2.985,445,2.951,458,3.174,464,2.415,485,1.776,490,2.005,495,3.555,511,1.953,518,1.585,520,2.425,523,3.051,526,2.039,527,2.114,532,3.981,533,5.309,542,7.859,544,2.086,551,1.653,575,2.788,605,2.009,606,2.379,616,1.039,627,2.452,643,2.624,647,1.519,658,1.634,661,2.143,679,1.891,693,1.878,697,3.654,712,3.95,721,2.009,727,2.985,735,2.659,741,2.223,752,3.776,761,2.277,771,1.752,790,2.223,810,1.835,812,1.826,860,2.206,864,1.474,872,2.401,874,4.897,902,8.92,910,2.872,925,1.862,929,3.678,930,2.173,938,2.425,964,2.086,981,2.926,1018,2.777,1021,1.921,1033,2.56,1042,2.891,1050,1.707,1083,2.926,1105,2.45,1110,2.24,1113,2.034,1126,2.471,1142,1.423,1165,2.777,1189,6.684,1261,5.064,1267,4.089,1292,3.125,1393,2.099,1401,5.391,1443,1.809,1481,2.158,1488,2.189,1521,3.308,1545,3.308,1566,3.575,1581,3.125,1610,3.051,1614,2.24,1616,2.401,1618,2.777,1628,2.624,1704,3.427,1748,3.543,1765,2.475,1795,2.401,1796,2.475,1808,2.659,1820,2.823,1832,3.919,1930,2.56,1943,2.336,1973,2.425,1983,2.696,1985,5.064,2029,4.977,2086,2.379,2088,3.427,2100,9.665,2120,2.659,2131,2.624,2132,3.752,2133,3.774,2134,8.103,2135,3.575,2136,3.427,2137,3.308,2138,6.042,2139,3.125,2140,7.589,2141,5.379,2142,5.833,2143,13.282,2144,6.042,2145,8.103,2146,6.304,2147,6.042,2148,3.427,2149,3.427,2150,6.042,2151,3.427,2152,3.427,2153,3.427,2154,3.308,2155,2.985,2156,3.427,2157,3.427,2158,6.304,2159,3.575,2209,3.575,2219,3.308,2220,2.872,2234,3.125,2237,3.427,2240,4.319,2247,3.209,2252,2.926,2496,3.575,2582,3.051,2601,3.774,2602,4.076,2603,4.076,2604,7.186,2605,7.186,2606,2.823,2607,2.45,2608,4.118,2609,3.774,2610,3.774,2611,3.774,2612,4.076]],["keywords/240",[]],["title/241",[43,361.914,700,939.177]],["content/241",[2,1.535,11,4.02,15,3.672,16,2.132,22,1.434,145,6.88,154,14.638,160,6.916,180,7.148,191,8.693,195,3.074,196,5.716,221,7.407,226,3.325,279,4.852,284,4.436,285,9.498,329,5.737,442,11.043,445,4.518,523,11.043,568,5.634,578,7.925,718,11.974,773,11.617,790,10.827,836,8.867,860,7.985,1004,11.974,1033,9.266,1086,10.396,1105,8.867,1267,6.26,1449,10.591,1820,10.218,1930,9.266,2041,6.399,2100,7.029,2129,12.941,2187,11.974,2317,10.218,2337,11.043,2613,14.754,2614,14.754,2615,13.661,2616,14.754,2617,13.661,2618,12.941,2619,14.754,2620,13.661,2621,14.754,2622,14.754,2623,14.754]],["keywords/241",[]],["title/242",[445,422.038,683,1056.653]],["content/242",[2,1.791,11,5.48,22,1.673,127,2.932,162,4.969,172,4.476,279,3.95,298,6.107,335,4.949,343,4.461,374,8.605,397,4.249,415,6.452,416,13.214,435,6.107,445,5.27,495,6.348,512,6.5,542,9.245,575,4.129,611,7.944,683,13.194,700,8.184,706,8.184,792,4.949,833,6.654,874,8.184,876,11.079,902,10.221,906,5.381,1088,7.835,1093,9.457,1158,13.301,1217,5.407,1258,8.99,1396,7.732,1905,8.464,1916,6.187,2093,8.622,2100,8.199,2137,13.968,2139,9.208,2140,15.835,2141,8.99,2142,13.968,2238,9.748,2240,7.219,2419,8.464,2493,10.098,2494,10.098,2564,11.424,2624,12.011,2625,11.121,2626,11.121,2627,12.011]],["keywords/242",[]],["title/243",[533,629.721,752,539.96]],["content/243",[8,6.023,22,1.619,66,3.677,79,4.496,89,4.635,162,6.891,186,5.182,195,2.947,224,1.892,235,8.579,238,9.227,241,6.92,277,3.511,279,7.073,284,5.008,335,3.753,340,3.707,408,7.097,434,8.362,644,6.649,660,10.082,719,9.154,1074,8.311,1268,12.769,1481,8.818,1610,12.466,1916,8.579,1930,10.461,1943,9.544,2038,11.349,2041,7.224,2100,7.935,2208,10.588,2262,11.535,2419,11.736,2420,14.609]],["keywords/243",[]],["title/244",[2,78.859,22,73.669,279,249.209,693,198.061,766,465.184,2628,614.977]],["content/244",[]],["keywords/244",[]],["title/245",[1831,1269.296]],["content/245",[2,1.896,3,4.014,79,6.146,145,8.497,147,9.788,152,9.861,155,7.192,186,5.669,222,2.891,223,3.991,279,5.993,288,9.449,367,6.909,374,6.744,420,13.344,490,5.084,527,9.449,602,9.324,766,13.979,1106,13.08,1267,7.731,2417,15.983,2629,18.221,2630,12.051]],["keywords/245",[]],["title/246",[13,304.933,326,820.063]],["content/246",[2,2.441,3,3.791,11,6.392,279,7.715,557,8.407,627,4.865,766,14.402,1117,19.722,1598,11.492,2630,12.645,2631,23.498,2632,19.12,2633,14.311,2634,17.704]],["keywords/246",[]],["title/247",[228,382.743,693,360.272]],["content/247",[2,1.733,11,4.538,112,7.198,127,4.065,220,7.067,228,4.625,279,8.279,340,3.707,422,5.127,693,5.621,823,7.357,896,8.876,1117,20.024,1126,7.394,1143,10.797,1368,11.015,1593,11.349,1768,9.544,1945,12.324,2020,7.256,2628,13.518,2635,14.002,2636,16.656,2637,16.656,2638,16.656,2639,15.422,2640,13.518,2641,16.656]],["keywords/247",[]],["title/248",[693,360.272,2628,1118.642]],["content/248",[]],["keywords/248",[]],["title/249",[279,280.819,422,262.833,896,318.197,925,390.102,1945,489.291]],["content/249",[69,5.761,179,10.78,196,8,279,6.791,297,8.723,422,6.356,646,9.578,658,8.275,896,7.695,1768,11.832,1945,11.832,2642,20.648,2643,20.648]],["keywords/249",[]],["title/250",[226,192.405,445,261.445,766,524.187,929,436.937,2094,370.322]],["content/250",[2,1.063,3,1.651,15,6.875,16,2.938,22,1.781,66,2.256,92,4.556,94,6.856,136,3.944,186,3.179,228,4.245,238,5.66,270,4.782,279,3.36,356,10.405,392,11.504,489,4.815,490,2.851,607,4.556,670,8.045,693,2.671,766,14.024,875,2.851,880,8.962,887,16.097,910,7.199,941,8.59,1112,6.577,1312,6.141,1363,5.908,1463,8.962,1507,7.199,1509,8.292,1623,6.343,1798,6.495,1928,7.482,1937,8.962,2094,7.944,2454,7.334,2630,6.757,2644,10.217,2645,15.287,2646,10.217,2647,9.46,2648,15.287,2649,10.217,2650,10.217,2651,10.217,2652,10.217,2653,10.217,2654,10.217,2655,10.217,2656,10.217,2657,10.217,2658,10.217,2659,10.217,2660,10.217,2661,10.217,2662,10.217,2663,10.217,2664,10.217,2665,10.217,2666,10.217,2667,10.217,2668,10.217,2669,10.217,2670,10.217,2671,10.217,2672,10.217,2673,10.217,2674,10.217,2675,15.287,2676,9.46,2677,10.217,2678,10.217,2679,10.217,2680,10.217,2681,10.217,2682,10.217,2683,10.217,2684,8.962,2685,10.217,2686,10.217]],["keywords/250",[]],["title/251",[22,95.072,172,364.419,195,133.976,666,442.372]],["content/251",[]],["keywords/251",[]],["title/252",[286,1163.024]],["content/252",[2,2.04,22,1.906,43,5.147,172,7.306,208,8.111,284,5.894,287,8.39,569,12.351,652,6.522,666,10.775,959,12.312,1022,10.86,1481,10.379,1627,15.435,1917,13.358,2050,13.814,2208,12.462]],["keywords/252",[]],["title/253",[226,220.355,445,299.424,601,453.632,604,503.706]],["content/253",[2,1.163,3,3.291,8,2.476,15,5.757,22,1.588,36,2.634,42,3.245,48,5.25,70,4.496,71,2.97,79,3.821,106,4.067,147,3.679,158,5.015,162,4.623,186,2.131,192,3.396,195,1.531,219,3.098,226,1.543,232,4.116,249,6.007,261,2.543,265,3.996,268,5.275,279,2.252,281,1.579,290,2.944,297,2.893,327,4.408,340,2.487,343,2.543,367,2.597,408,2.918,439,3.626,445,2.097,465,2.272,477,5.25,495,4.122,509,4.035,569,3.551,575,1.643,598,4.301,599,2.957,601,3.177,604,3.527,627,1.742,639,4.204,641,2.997,642,3.626,666,5.055,689,1.925,749,3.396,779,4.159,804,2.822,808,2.918,812,3.068,818,3.227,863,7.39,875,1.911,876,4.408,897,2.588,925,6.467,930,3.652,959,4.301,983,5.015,984,5.757,1020,3.764,1023,3.837,1024,4.408,1026,3.626,1028,5.015,1042,2.755,1074,3.417,1085,4.825,1137,5.392,1363,6.461,1379,6.007,1381,5.392,1481,5.916,1488,3.679,1837,3.417,1916,3.527,1974,3.376,1985,4.825,2050,4.825,2056,10.595,2058,10.852,2167,5.757,2208,8.998,2226,5.392,2229,4.595,2284,6.007,2291,5.558,2380,6.007,2389,8.566,2618,6.007,2687,9.069,2688,6.341,2689,6.007,2690,6.341,2691,6.341,2692,6.341,2693,6.341,2694,6.341,2695,6.007,2696,6.341,2697,9.801,2698,6.341,2699,6.341,2700,6.341,2701,6.007,2702,6.007,2703,6.341,2704,10.347,2705,6.341,2706,6.341,2707,13.107,2708,11.488,2709,13.107,2710,13.107,2711,6.341,2712,10.347,2713,6.341,2714,6.341,2715,6.007,2716,10.347,2717,6.341,2718,6.341,2719,6.341,2720,6.341,2721,6.341,2722,6.341,2723,6.341,2724,6.341,2725,6.341,2726,6.341,2727,6.341,2728,6.341,2729,6.341,2730,6.341,2731,6.341,2732,6.341,2733,6.341,2734,6.341,2735,6.341,2736,6.341,2737,10.347,2738,6.341,2739,5.757,2740,6.341,2741,6.341,2742,6.341,2743,6.341,2744,6.341,2745,6.341,2746,6.341,2747,6.341,2748,6.341,2749,6.341,2750,6.341,2751,6.341,2752,6.341,2753,6.341,2754,6.341,2755,6.341,2756,6.341,2757,6.341,2758,9.801,2759,6.341,2760,6.341,2761,6.341,2762,10.347,2763,6.007,2764,6.341,2765,6.848,2766,6.848,2767,6.848]],["keywords/253",[]],["title/254",[73,476.77,268,513.649]],["content/254",[2,1.53,3,3.305,6,2.215,11,5.195,13,3.557,15,4.929,16,0.693,18,2.445,19,4.963,20,2.757,22,1.063,24,3.372,25,1.362,52,1.946,66,1.83,70,3.334,73,1.66,79,5.346,83,2.638,87,3.443,89,2.357,106,1.747,113,1.951,127,2.023,136,1.853,160,2.25,172,3.088,181,2.01,185,5.614,186,1.493,192,2.38,194,3.13,195,0.658,208,4.525,221,2.409,223,1.051,226,1.868,228,2.301,229,3.472,232,2.884,235,4.269,251,1.432,258,0.958,263,2.544,266,2.286,268,4.852,277,3.39,281,1.106,282,2.08,283,3.11,284,1.443,288,2.489,289,2.204,293,2.68,295,2.506,312,7.377,319,3.27,320,2.38,334,1.978,339,3.051,340,1.068,343,1.782,372,4.963,385,2.718,394,2.15,396,3.443,397,1.014,404,1.635,408,3.532,426,3.797,427,3.007,428,7.969,438,2.979,445,1.469,448,2.884,457,2.15,464,2.74,465,2.749,495,3.057,504,2.409,533,2.193,544,9.324,547,5.634,551,6.52,575,4.575,596,3.051,607,3.695,610,6.643,625,2.578,642,4.388,658,3.321,660,5.127,666,4.948,676,2.352,679,2.226,680,5.84,683,3.679,717,2.395,728,2.68,743,11.782,746,3.749,758,3.174,805,3.382,812,2.15,835,5.211,846,2.312,915,3.13,925,5.948,926,2.489,956,4.792,974,2.75,1023,2.569,1038,3.051,1042,1.931,1043,2.801,1049,2.286,1074,2.395,1088,3.13,1204,2.75,1211,2.828,1336,4.931,1359,6.953,1363,9.298,1369,3.895,1412,2.946,1481,2.541,1552,3.09,1611,9.567,1623,2.979,1633,2.855,1643,3.927,1659,3.382,1695,4.035,1748,2.366,1983,5.481,2056,6.203,2058,8.385,2067,3.22,2181,3.324,2220,3.382,2267,4.444,2307,3.679,2594,3.174,2762,12.055,2763,18.438,2764,4.444,2768,3.895,2769,4.444,2770,16.079,2771,14.698,2772,8.288,2773,10.938,2774,10.938,2775,10.938,2776,4.444,2777,3.895]],["keywords/254",[]],["title/255",[749,859.577]],["content/255",[2,1.363,3,2.956,11,3.567,22,2.05,36,5.036,43,3.438,94,8.786,113,3.082,162,5.417,181,5.485,227,4.21,261,8.919,266,6.237,268,8.95,277,3.857,281,4.217,287,5.604,296,5.148,312,5.604,327,8.429,354,3.23,394,5.866,427,4.75,494,6.789,511,6.272,575,3.141,599,9.855,610,11.11,641,5.73,666,5.923,689,3.68,749,6.493,752,5.129,906,5.866,909,7.313,959,8.223,1007,6.836,1025,11.489,1033,8.223,1042,5.268,1381,17.972,1481,6.932,1916,6.744,2029,9.067,2050,9.226,2097,11.484,2240,7.869,2768,10.626,2769,12.123,2778,22.825,2779,13.093,2780,13.093,2781,13.093,2782,13.093]],["keywords/255",[]],["title/256",[445,422.038,1170,1085.254]],["content/256",[3,3.428,73,7.338,87,8.813,172,7.905,195,2.906,268,7.905,284,6.378,717,10.585,804,8.741,1627,16.702]],["keywords/256",[]],["title/257",[599,595.127,804,567.943]],["content/257",[2,2.405,22,1.814,66,4.12,76,15.144,89,4.021,235,9.612,261,6.93,268,6.954,279,6.137,281,4.301,284,5.61,372,5.759,375,10.256,421,10.338,599,10.839,602,9.549,639,11.456,658,7.478,804,9.522,1026,9.879,1042,7.507]],["keywords/257",[]],["title/258",[2,88.862,195,116.983,354,210.671,355,219.688,372,263.532]],["content/258",[]],["keywords/258",[]],["title/259",[222,218.697,372,425.406]],["content/259",[1,3.288,2,1.836,3,3.862,11,6.511,16,2.108,22,1.916,30,5.206,36,5.613,47,7.366,49,1.468,59,4.243,61,3.353,69,4.071,86,4.411,106,3.496,147,3.065,162,3.974,168,1.939,185,1.992,195,2.417,216,5.233,222,2.8,223,4.641,229,4.024,230,1.932,237,4.166,244,4.411,251,2.866,258,2.912,261,3.567,266,4.576,268,2.126,277,3.957,281,1.315,283,3.604,291,4.468,307,5.94,329,3.735,334,3.958,335,2.164,347,3.462,354,2.37,355,2.471,359,10.128,360,5.573,361,7.401,365,6.353,372,7.375,374,2.112,385,3.15,398,7.189,413,6.734,435,4.884,437,4.915,444,7.034,445,2.941,457,4.303,465,3.187,512,5.198,530,5.606,533,4.388,598,6.033,658,3.85,672,8.114,679,6.769,693,3.251,697,4.884,704,3.791,721,4.735,731,3.974,771,4.129,810,4.324,842,3.272,895,2.88,972,5.283,976,4.129,1021,4.527,1042,5.871,1066,12.879,1113,4.793,1121,2.718,1133,3.451,1218,6.895,1442,5.365,1634,6.445,1643,4.551,1896,7.796,1912,4.631,1915,6.895,1916,4.948,1945,5.504,1984,9.791,2243,7.563,2265,7.034,2783,4.631]],["keywords/259",[]],["title/260",[372,425.406,771,592.497]],["content/260",[1,4.572,4,10.818,22,1.972,24,5.255,89,4.372,163,6.75,181,8.499,283,7.613,372,6.262,599,8.76,603,9.411,1481,10.741,1581,15.553,1582,17.795,2784,20.288]],["keywords/260",[]],["title/261",[66,188.518,354,210.671,355,219.688,366,549.674,372,263.532]],["content/261",[]],["keywords/261",[]],["title/262",[2042,532.102]],["content/262",[279,7.106,296,8.496,340,4.809,526,6.132,599,9.329,602,11.057,603,10.023,863,14.29]],["keywords/262",[]],["title/263",[366,629.522,485,426.032,603,453.632,761,546.176]],["content/263",[1,3.445,2,1.063,3,1.651,14,7.054,15,2.543,22,0.993,24,5.639,25,2.899,49,2.629,66,2.256,88,6.141,113,4.312,130,4.6,168,2.063,185,5.337,218,6.272,222,1.621,223,2.238,225,4.922,227,3.285,228,2.837,230,5.177,241,4.245,255,5.804,266,4.867,277,3.862,283,3.834,297,4.317,329,3.973,343,5.677,345,4.431,352,4.414,354,4.519,355,4.713,357,7.166,366,16.964,372,3.153,440,5.923,455,5.371,515,5.228,518,5.945,551,4.143,556,4.451,596,6.495,599,10.225,601,4.74,606,5.963,607,4.556,610,6.205,625,8.212,626,4.74,627,3.89,644,6.103,652,3.399,679,4.74,682,6.08,704,4.033,728,5.707,761,5.707,871,7.723,896,7.577,900,6.417,925,4.668,946,6.665,1021,4.815,1026,5.409,1131,8.292,1198,7.199,1237,5.298,1590,6.856,1621,6.205,1643,4.841,2428,8.045,2785,12.407,2786,12.407,2787,10.217,2788,10.217]],["keywords/263",[]],["title/264",[261,424.898,366,736.511,372,353.108]],["content/264",[1,3.907,2,1.804,19,3.997,24,4.491,79,3.276,113,2.857,130,5.464,162,7.174,199,7.15,222,1.926,225,5.846,227,3.902,230,4.11,241,5.042,244,5.573,251,5.173,261,8.196,270,3.796,277,3.655,281,3.997,283,4.554,290,5.217,296,4.772,316,4.754,329,6.742,343,4.507,352,3.504,354,4.278,355,3.123,366,15.627,372,6.243,375,13.341,387,5.88,448,4.224,489,5.72,512,6.568,518,4.719,533,5.545,596,7.715,599,9.528,603,5.63,606,7.083,607,5.411,610,10.53,626,5.63,679,5.63,697,6.171,714,4.737,717,6.056,749,6.019,804,5.001,812,5.437,873,5.72,959,7.623,1021,5.72,1033,7.623,1443,5.386,2040,10.645,2098,9.556,2789,12.136,2790,10.645,2791,12.136,2792,12.136]],["keywords/264",[]],["title/265",[66,252.595,268,426.353,599,493.984]],["content/265",[]],["keywords/265",[]],["title/266",[2042,532.102]],["content/266",[2,2.574,3,2.297,8,5.139,24,3.682,61,4.962,66,4.274,73,4.916,97,6.337,108,7.007,145,6.628,195,1.947,196,5.507,206,5.88,222,2.255,244,6.526,268,5.297,281,3.276,283,5.333,340,4.309,352,4.103,354,5.432,355,4.981,374,5.261,408,6.057,526,6.248,529,8.632,552,7.321,564,9.4,599,9.506,601,10.213,603,8.98,604,11.34,627,3.616,679,6.593,804,5.857,810,6.398,863,12.803,894,8.726,969,10.203,1488,7.635,1917,9.685,2043,10.409,2044,13.16,2045,14.489]],["keywords/266",[]],["title/267",[330,465.387,2045,1031.638]],["content/267",[1,2.771,2,1.821,3,3.293,8,2.788,11,2.101,19,2.835,22,1.196,24,4.953,25,2.188,30,2.465,49,1.984,61,2.692,66,2.715,69,4.883,73,2.667,87,3.203,89,2.65,105,4.902,113,4.12,127,1.882,130,5.536,145,3.596,160,3.615,172,6.522,174,4.38,185,4.293,220,3.272,226,1.738,227,2.479,229,5.151,241,3.203,268,8.273,270,4.798,277,2.592,290,6.593,298,3.92,329,2.998,330,2.603,340,1.716,343,2.864,352,5.053,354,3.034,355,3.164,359,6.593,361,4.588,369,4.054,379,5.174,381,4.588,391,4.734,397,1.629,408,3.286,437,3.946,443,4.5,445,2.361,457,3.455,467,3.127,490,2.151,518,2.998,526,2.188,530,4.5,533,3.523,599,3.329,601,7.115,604,7.9,610,7.468,619,9.696,627,1.962,631,4.588,644,6.123,652,2.565,666,9.218,679,3.577,693,2.015,697,9.721,721,3.801,781,5.254,787,5.1,810,5.536,812,3.455,823,3.406,871,3.896,876,4.964,895,3.687,896,6.522,900,4.843,920,4.054,926,6.376,938,4.588,969,5.535,981,5.535,1020,4.238,1021,3.634,1026,4.082,1042,3.102,1050,3.23,1087,6.071,1273,7.549,1391,4.964,1424,6.482,1643,3.653,1765,4.683,1812,4.683,2045,15.251,2057,6.071,2062,9.204,2064,5.535,2065,5.911,2066,6.482,2067,11.744,2120,5.03,2785,6.258,2786,6.258,2793,9.682,2794,10.338,2795,7.711,2796,7.711,2797,7.711]],["keywords/267",[]],["title/268",[172,364.419,268,364.419,385,320.691,2045,731.918]],["content/268",[2,0.822,3,3.126,11,5.609,13,3.446,18,2.8,19,2.888,20,2.626,22,1.724,24,5.332,31,2.04,66,2.766,69,2.203,73,6.691,87,3.279,89,1.701,102,4.272,113,4.553,115,2.942,127,3.802,168,1.594,172,5.805,206,3.266,219,3.571,223,2.744,227,2.538,244,3.625,261,4.653,263,2.423,266,3.761,268,9.142,270,6.05,277,4.34,282,1.501,283,2.962,290,3.393,297,3.335,298,4.013,326,4.697,330,2.665,335,1.779,352,2.279,354,1.948,357,3.7,363,4.066,379,5.297,396,3.279,408,3.364,413,3.643,426,2.302,430,4.446,434,3.963,437,4.04,438,4.901,448,2.747,467,3.201,529,4.794,530,4.607,531,5.297,599,5.41,603,3.662,605,3.892,610,10.771,627,2.008,640,5.908,666,9.313,697,6.37,741,4.305,752,4.908,781,5.379,784,5.467,823,5.534,897,4.734,901,3.803,915,5.149,918,5.379,956,9.007,959,4.958,968,6.052,969,5.666,1025,9.783,1042,3.176,1087,6.215,1212,4.305,1237,4.093,1273,4.846,1336,7.454,1337,12.296,1355,7.454,1359,5.018,1395,6.636,1643,5.936,1846,10.989,2069,13.663,2248,4.484,2794,10.533,2798,7.894,2799,7.894,2800,15.698,2801,12.528,2802,7.894,2803,12.528,2804,7.894,2805,7.894,2806,6.215,2807,6.636]],["keywords/268",[]],["title/269",[268,364.419,385,320.691,619,541.745,2045,731.918]],["content/269",[2,0.977,3,3.148,11,6.027,13,3.85,18,3.206,19,3.307,20,3.125,22,1.692,24,4.508,31,2.427,66,2.074,69,2.621,73,6.02,83,5.162,102,5.083,113,4.585,127,3.501,206,3.886,219,4.249,223,2.057,227,3.02,244,4.313,261,5.327,263,2.883,266,4.474,268,9.246,270,5.444,277,4.663,282,1.786,283,3.524,297,3.968,298,4.775,330,3.171,354,2.317,357,4.403,379,6.302,408,4.002,413,4.335,426,2.739,430,5.29,434,4.715,437,7.34,438,5.831,448,3.269,467,3.808,529,5.704,530,5.481,531,6.302,599,6.194,603,4.357,610,11.831,612,7.623,619,11.624,620,5.766,627,2.39,640,7.03,666,10.007,697,4.775,741,5.122,752,5.619,781,6.4,823,4.149,901,4.524,915,6.126,918,6.4,919,6.4,959,5.899,968,7.2,969,6.742,1025,10.93,1042,3.779,1087,7.395,1212,5.122,1273,5.766,1359,5.971,1395,7.896,1643,4.45,1846,8.238,2069,15.265,2248,5.335,2794,12.059,2800,14.124,2806,7.395,2807,7.896,2808,9.392,2809,14.344]],["keywords/269",[]],["title/270",[66,252.595,268,426.353,603,530.728]],["content/270",[1,2.672,2,0.767,3,3.893,9,4.744,11,5.092,13,1.63,18,1.647,22,1.658,24,5.656,49,1.896,66,2.618,69,2.056,73,4.102,89,1.588,102,3.988,105,4.684,113,4.014,127,1.799,130,5.338,152,3.988,154,4.807,172,4.419,206,3.049,220,5.031,223,1.614,227,4.784,230,5.039,255,4.186,261,5.526,266,3.51,268,8.137,270,3.709,277,4.751,281,1.699,283,4.45,296,2.897,298,3.746,303,3.154,343,2.737,352,2.127,354,3.671,355,1.896,375,4.05,379,4.945,385,3.889,391,4.524,397,1.557,408,3.14,413,3.401,422,3.65,434,3.699,437,7.614,438,4.575,448,4.127,457,5.313,467,2.988,518,4.611,529,4.475,530,4.3,531,4.945,540,3.57,599,9.064,603,7.91,604,3.796,610,12.75,619,6.569,625,3.958,626,3.418,627,4.339,631,4.384,641,3.225,644,5.94,652,2.452,658,2.953,660,3.454,666,7.714,677,3.286,679,3.418,697,6.029,704,2.908,752,4.645,761,6.623,812,3.301,813,4.082,823,6.572,871,3.723,896,6.355,900,4.628,918,5.021,920,3.874,924,5.515,946,4.807,959,4.628,969,5.289,1021,3.473,1025,9.345,1026,3.901,1391,4.744,1393,3.796,1395,6.195,1453,4.018,1643,3.491,1775,3.958,2045,5.515,2066,6.195,2067,9.985,2177,5.289,2785,5.98,2786,5.98,2793,5.802,2794,6.195,2810,10.979,2811,5.98]],["keywords/270",[]],["title/271",[268,426.353,291,313.941,374,423.455]],["content/271",[3,3.382,25,4.532,43,4.193,69,6.513,70,8.419,113,4.926,162,6.607,172,5.951,181,6.69,220,6.776,251,4.764,268,8.698,270,4.995,277,3.367,291,6.405,325,7.65,339,10.152,360,7.155,374,7.745,385,5.237,401,6.425,410,9.598,440,6.187,619,8.847,620,9.804,666,10.559,679,7.408,807,10.03,906,7.155,956,9.234,1187,10.152,1218,11.463,1684,9.409,2596,14.787]],["keywords/271",[]],["title/272",[1,220.355,2,101.77,372,301.814,603,453.632]],["content/272",[]],["keywords/272",[]],["title/273",[2042,532.102]],["content/273",[2,2.058,22,1.922,25,5.611,89,4.261,261,7.342,279,6.502,296,7.774,340,4.401,366,12.727,372,6.102,375,10.866,526,5.611,599,8.536,602,10.117,603,9.171,804,8.146,863,13.075,2812,19.77]],["keywords/273",[]],["title/274",[1,257.805,603,530.728,761,639]],["content/274",[1,4.968,2,1.363,3,3.212,19,3.018,22,0.812,24,5.147,25,2.369,42,3.955,60,4.662,73,2.887,88,5.017,89,1.799,113,4.677,130,8.946,152,7.086,160,3.913,195,1.144,199,4.918,216,3.512,218,5.124,220,3.542,222,2.902,223,4.352,225,4.021,227,7.339,230,6.195,255,9.176,261,3.1,263,2.563,270,5.722,277,3.406,283,3.132,289,3.833,296,3.282,321,3.999,340,2.914,343,3.1,352,2.41,354,3.23,355,2.148,372,2.576,375,12.116,386,4.115,413,3.852,448,2.905,467,3.385,485,3.637,489,3.934,518,6.282,596,8.323,599,9.855,606,4.871,607,3.722,610,5.069,625,4.484,626,3.872,627,4.11,631,4.966,641,3.653,652,2.777,667,5.688,679,3.872,682,3.32,704,3.295,717,6.533,761,13.413,787,5.52,812,3.74,823,3.687,871,4.217,896,6.817,900,5.243,924,6.248,946,5.445,1021,3.934,1026,4.419,1042,3.358,1393,4.3,1643,3.955,1654,6.399,1775,4.484,1923,5.374,2428,6.572,2785,6.775,2786,6.775,2811,6.775,2813,7.322,2814,8.347,2815,13.093,2816,8.347,2817,8.347,2818,13.093,2819,13.093,2820,8.347]],["keywords/274",[]],["title/275",[1,170.748,24,196.278,237,328.638,261,281.416,277,159.751,372,233.868]],["content/275",[1,5.349,2,1.721,19,2.62,22,1.895,24,5.545,43,2.984,79,3.068,86,5.219,120,5.092,162,4.702,216,4.781,225,7.966,227,6.268,230,3.849,237,7.172,241,8.099,251,3.391,261,8.816,277,4.11,281,2.62,283,6.205,291,3.119,296,4.469,317,7.871,329,6.431,343,4.221,345,4.929,352,5.628,354,2.804,355,2.924,372,6.017,375,6.247,394,5.092,489,10.089,490,3.171,495,4.192,512,6.151,520,6.762,522,7.225,533,5.193,546,4.486,596,7.225,599,7.14,606,9.651,607,5.068,610,13.001,625,6.105,651,4.591,660,5.328,682,6.577,697,5.779,761,6.348,781,7.744,812,5.092,910,8.009,1091,6.247,1187,7.225,1393,5.854,1443,5.044,2040,9.969,2098,8.949,2262,7.871,2790,9.969,2821,11.365,2822,11.365,2823,7.517]],["keywords/275",[]],["title/276",[268,426.353,569,593.262,2824,1144.071]],["content/276",[]],["keywords/276",[]],["title/277",[540,554.256,717,570.86,1516,746.272]],["content/277",[2,1.023,3,3.46,8,3.554,11,2.678,13,3.959,14,5.152,15,3.696,18,2.197,22,1.74,25,2.789,49,3.82,66,2.17,79,4.008,109,5.736,113,2.314,116,5.736,172,7.431,173,3.688,185,5.184,223,2.153,224,1.117,229,4.117,237,4.263,244,4.513,261,3.65,266,4.682,268,9.179,269,6.926,277,4.204,293,5.49,297,4.152,325,4.708,331,6.807,340,3.305,352,2.838,391,6.034,399,2.008,408,7.625,413,4.536,428,3.638,445,3.009,457,4.403,526,5.078,540,10.906,563,5.683,575,2.358,600,6.697,627,2.501,658,3.939,666,6.717,682,3.909,698,5.097,705,6.595,717,4.904,805,6.926,897,3.714,956,8.585,1007,7.752,1234,6.697,1336,11.863,1359,6.248,1364,6.327,1401,6.888,1406,8.263,1516,13.964,1518,13.718,1519,7.739,1621,5.969,1707,9.542,1748,7.32,1888,6.926,2271,7.055,2825,14.848,2826,14.848,2827,9.829,2828,7.977,2829,9.829,2830,8.263,2831,9.829,2832,7.977,2833,9.829,2834,9.829]],["keywords/277",[]],["title/278",[69,272.849,526,277.509,644,390.397,975,656.187]],["content/278",[2,0.911,3,1.415,8,3.166,11,3.703,13,3.685,14,4.715,15,3.382,22,1.321,36,3.368,40,5.566,43,3.568,66,3.677,69,3.792,79,2.363,86,4.02,87,5.646,113,2.061,151,6.894,155,3.456,168,4.531,172,5.064,173,3.285,214,4.171,216,5.717,230,2.965,235,4.51,244,4.02,261,3.252,268,6.996,277,1.846,281,2.018,291,2.403,297,3.699,331,6.064,335,3.753,339,5.566,340,4.179,353,5.375,360,6.089,362,5.317,368,3.187,387,4.242,432,3.923,439,7.195,443,7.931,464,2.194,495,3.23,518,5.285,526,5.327,546,3.456,557,3.85,614,5.566,616,2.233,658,3.509,666,3.961,703,7.106,718,7.106,777,9.813,813,7.529,835,6.474,846,4.218,897,3.308,935,7.106,956,7.858,975,9.119,976,3.764,1008,9.094,1033,5.499,1134,5.875,1234,5.966,1278,5.711,1336,12.796,1337,14.265,1359,5.566,1391,5.637,1393,4.51,1419,8.107,1516,5.711,1518,17.203,1519,17.669,1707,10.01,1748,4.316,1842,6.285,2828,7.106,2830,7.361,2832,7.106,2835,8.107,2836,8.107,2837,8.756,2838,8.756,2839,8.756,2840,16.655,2841,8.756,2842,8.107,2843,8.756]],["keywords/278",[]],["title/279",[289,525.332,721,564.018,1516,746.272]],["content/279",[2,0.904,3,2.184,11,2.368,13,4.136,14,6.487,15,6.046,18,3.02,19,2.003,22,1.818,35,8.936,43,3.548,49,2.236,52,3.524,66,2.983,71,7.189,79,4.474,113,3.18,147,4.668,168,1.755,175,4.739,186,5.157,208,3.595,235,4.476,241,5.613,261,3.227,268,5.035,277,3.942,282,1.653,287,3.719,289,6.204,297,3.671,307,2.926,312,3.719,331,6.018,340,1.934,343,3.227,360,3.893,364,4.894,422,2.675,432,3.893,434,4.363,439,7.153,455,4.569,495,4.984,511,4.163,526,3.834,563,5.025,569,7.006,605,4.284,630,7.306,632,3.893,658,3.483,666,6.112,675,10.538,685,5.831,689,2.442,698,4.506,721,11.032,739,5.458,748,4.668,800,6.238,835,8.907,846,4.186,858,4.894,906,3.893,924,6.504,956,7.812,1007,4.537,1278,5.669,1308,5.594,1336,5.17,1337,5.524,1357,8.046,1359,8.589,1516,15.092,1518,14.334,1519,6.842,1748,4.284,1832,4.739,1835,6.504,1974,4.284,2828,7.053,2830,7.306,2832,10.965,2835,8.046,2844,8.69,2845,11.851,2846,5.335,2847,5.831,2848,8.69,2849,13.511,2850,8.69,2851,6.504,2852,8.69,2853,8.69,2854,8.69,2855,8.69,2856,8.69,2857,8.69,2858,8.69,2859,8.69]],["keywords/279",[]],["title/280",[322,1085.254,1516,899.071]],["content/280",[2,1.896,3,2.325,11,3.104,13,3.665,14,2.433,15,6.252,18,3.216,19,1.617,22,1.399,36,2.698,49,1.804,64,6.675,66,1.548,71,3.042,87,2.914,113,3.387,147,3.767,150,6.494,166,4.173,168,2.3,186,3.545,195,2.27,213,4.305,216,4.793,226,1.58,263,2.153,266,3.341,268,5.362,270,2.194,277,2.402,282,1.334,287,3.002,291,1.924,297,2.963,302,5.249,304,4.515,322,16.195,330,2.368,331,4.857,340,3.203,391,4.305,421,3.885,432,3.142,439,3.713,447,2.779,457,3.142,458,3.098,464,1.757,526,5.837,537,15.903,551,2.844,552,3.612,574,3.188,575,1.683,616,1.788,658,2.811,666,3.173,682,2.789,692,3.74,704,2.768,712,3.854,718,5.692,736,3.713,812,3.142,835,5.428,892,6.152,901,5.488,919,4.779,935,5.692,956,6.588,973,4.706,1008,3.398,1267,4.834,1278,4.575,1299,4.259,1308,4.515,1326,3.95,1336,6.779,1337,4.458,1359,9.147,1369,5.692,1467,5.136,1516,14.852,1518,12.7,1519,11.329,1520,12.621,1521,11.678,1660,5.692,1707,3.74,1716,2.242,1748,5.617,1842,8.178,1857,7.334,2275,5.692,2625,6.494,2828,5.692,2830,5.896,2832,11.678,2836,16.871,2845,9.993,2860,7.013,2861,12.096,2862,19.973,2863,11.393,2864,7.013,2865,7.013,2866,7.013,2867,11.393,2868,7.013,2869,7.013,2870,11.393,2871,5.376,2872,11.393,2873,7.013,2874,7.013,2875,7.013]],["keywords/280",[]],["title/281",[526,324.673,537,821.254,704,451.561]],["content/281",[1,1.209,2,0.949,3,0.867,8,3.296,11,2.484,13,2.017,15,6.325,18,3.133,19,3.232,20,1.785,22,1.527,24,2.361,25,1.522,36,2.063,49,3.059,64,2.488,66,1.184,73,4.112,79,3.209,87,2.228,89,2.562,113,2.146,168,2.4,172,1.999,181,2.247,185,1.873,189,4.015,214,5.664,216,5.898,220,2.276,221,2.693,235,2.763,241,2.228,251,2.72,261,1.992,263,1.647,268,7.715,270,2.852,277,1.131,281,1.236,282,1.02,283,2.013,297,2.266,299,3.779,319,3.655,321,2.569,322,4.223,330,1.811,331,3.715,332,3.369,334,2.21,335,1.209,343,1.992,352,1.549,396,2.228,403,4.705,404,1.827,408,2.286,422,2.806,426,1.564,428,1.985,445,2.791,489,2.528,518,2.086,524,4.509,526,5.171,533,4.165,537,16.037,538,3.41,540,2.598,543,4.966,544,6.083,546,2.117,547,8.092,551,2.175,552,2.763,557,2.358,569,6.165,575,3.769,578,2.881,599,2.316,601,2.488,605,2.644,607,2.392,613,3.928,614,3.41,619,11.078,620,11.774,631,3.191,641,2.347,650,3.41,658,4.764,666,2.426,692,2.86,699,3.779,700,3.655,704,5.534,705,6.117,720,5.946,722,3.499,728,5.091,738,3.779,741,4.971,743,5.424,746,4.124,777,5.371,796,4.015,812,2.403,813,2.971,938,3.191,943,3.779,969,3.85,982,3.369,1090,3.453,1091,2.948,1105,3.224,1110,5.01,1267,2.276,1278,3.499,1326,3.021,1336,3.191,1359,3.41,1393,2.763,1461,4.509,1463,4.705,1464,4.705,1466,3.928,1467,3.928,1468,4.705,1471,3.715,1484,7.664,1516,5.946,1518,4.112,1519,4.223,1520,4.705,1521,4.353,1555,4.015,1571,4.509,1589,4.015,1601,4.015,1603,10.73,1604,3.779,1611,7.073,1634,3.599,1677,4.509,1737,3.928,1740,4.966,1756,4.509,1836,4.223,1837,4.549,1851,3.85,1857,3.453,1876,3.33,1884,4.705,1895,4.015,2028,4.112,2053,4.966,2828,4.353,2832,4.353,2862,7.664,2876,4.966,2877,5.364,2878,5.364,2879,5.364,2880,5.364,2881,9.116,2882,5.364,2883,5.364,2884,5.364,2885,4.705,2886,5.364,2887,9.116,2888,5.364,2889,5.364,2890,5.364,2891,5.364,2892,9.116,2893,5.364,2894,5.364,2895,5.364,2896,5.364,2897,4.966,2898,4.223,2899,5.364,2900,5.364,2901,4.966,2902,5.364,2903,5.364,2904,5.364,2905,5.364,2906,4.705,2907,5.364,2908,5.364,2909,5.364]],["keywords/281",[]],["title/282",[216,481.298,599,493.984,1815,767.708]],["content/282",[]],["keywords/282",[]],["title/283",[2042,532.102]],["content/283",[279,7.106,296,8.496,340,4.809,526,6.132,599,9.329,602,11.057,603,10.023,863,14.29]],["keywords/283",[]],["title/284",[196,443.265,216,481.298,2576,877.073]],["content/284",[1,2.87,15,4.465,22,1.744,30,4.072,43,4.711,89,2.744,113,2.998,127,3.108,168,2.571,196,9.21,216,10,222,2.021,223,2.789,266,6.067,270,6.497,290,5.474,324,8.792,354,5.125,355,5.344,422,3.92,485,5.548,518,6.976,553,8.973,599,10.263,626,5.907,627,3.24,652,4.237,679,5.907,705,8.545,721,6.278,814,8.095,871,6.434,896,8.403,900,7.998,945,10.706,1007,6.649,1021,6.001,1026,6.742,1030,12.878,1042,5.123,1723,8.677,1832,6.945,2576,13.753,2777,10.335,2785,10.335,2786,10.335,2813,18.218,2910,11.791,2911,12.734,2912,11.791,2913,11.791,2914,12.734,2915,12.734]],["keywords/284",[]],["title/285",[196,443.265,225,551.126,251,341.318]],["content/285",[1,5.242,2,1.651,9,10.21,15,3.948,24,4.108,89,3.418,127,3.871,188,10.346,196,9.572,216,6.672,217,10.876,222,2.517,223,3.474,225,10.035,228,5.785,237,6.879,245,13.334,251,4.732,257,13.334,258,3.165,261,5.89,283,7.817,284,4.768,372,4.895,385,5.201,490,4.425,594,7.072,599,6.848,602,8.116,603,7.358,804,6.535,814,10.083,861,11.385,1621,9.632,2271,11.385,2813,13.912,2916,15.861,2917,15.861]],["keywords/285",[]],["title/286",[1,220.355,2,101.77,195,133.976,307,329.201]],["content/286",[1,5.225,2,2.564,8,5.696,18,3.521,22,2.016,49,4.053,66,3.478,76,12.785,132,12.785,195,3.376,222,2.5,223,3.45,224,1.79,277,4.372,279,5.181,281,3.631,307,7.805,404,5.367,413,9.572,494,8.169,495,5.811,552,8.114,576,12.077,640,15.523,658,6.313,660,7.385,733,11.1,804,10.153,2421,12.785,2918,13.244,2919,15.753]],["keywords/286",[]],["title/287",[61,341.406,1150,340.348,2100,465.863,2920,646.731]],["content/287",[]],["keywords/287",[]],["title/288",[2042,532.102]],["content/288",[2,2.081,8,4.299,11,3.239,13,2.63,22,1.661,25,3.374,66,4.415,106,4.327,116,6.938,186,3.699,195,1.629,206,4.919,225,5.727,228,3.301,270,3.719,279,3.91,297,5.023,319,8.101,321,5.695,327,7.653,335,4.506,340,2.646,343,4.415,352,3.432,354,4.215,355,3.059,374,4.4,385,3.899,422,3.659,427,4.313,437,6.084,447,4.71,485,8.712,513,9.275,526,7.454,542,6.386,552,6.124,564,7.862,575,2.852,627,5.088,639,7.298,647,4.43,711,7.862,847,4.461,864,4.299,873,5.603,874,8.101,902,7.511,921,5.088,1050,7.157,1150,5.946,1175,7.145,1189,4.728,1488,6.386,1598,10.267,1634,7.977,1971,8.898,2020,5.179,2100,8.139,2161,9.114,2162,9.361,2462,7.467,2920,11.298,2921,11.008,2922,11.008,2923,11.008]],["keywords/288",[]],["title/289",[286,1163.024]],["content/289",[2,2.574,3,3.558,8,5.139,16,2.054,22,1.382,43,3.732,61,6.759,66,3.138,127,3.469,128,8.824,145,6.628,178,9.685,195,3.388,222,3.072,223,4.24,224,2.199,277,4.081,279,4.674,287,6.083,302,10.638,307,7.411,335,3.203,352,4.103,404,4.842,413,8.934,542,7.635,605,7.007,661,7.472,667,9.685,804,5.857,871,7.181,1150,4.947,1367,11.535,1516,9.271,1549,9.843,1643,6.734,2100,10.488,2243,11.191,2421,11.535,2920,14.56,2924,14.213,2925,13.16]],["keywords/289",[]],["title/290",[222,218.697,2920,911.566]],["content/290",[2,2.068,3,3.881,7,3.371,11,3.567,13,1.847,15,2.078,16,1.206,18,2.926,19,1.924,22,1.932,25,2.369,30,2.669,49,4.707,66,3.567,68,4.021,69,2.329,87,3.468,102,4.517,106,4.766,113,5.189,127,2.037,130,5.894,136,3.222,162,3.454,179,4.358,185,2.914,195,1.144,206,3.454,222,3.884,223,2.867,229,3.497,244,3.833,248,7.017,251,2.49,261,4.863,270,2.611,277,2.76,279,2.745,281,1.924,282,2.49,290,5.628,291,2.291,295,4.358,329,3.246,335,4.751,352,4.664,354,2.059,359,9.063,408,3.557,416,4.328,422,2.569,423,4.827,427,3.028,435,4.244,443,4.871,445,2.556,447,3.307,448,2.905,465,2.769,467,3.385,490,3.653,511,3.999,513,5.555,526,4.584,530,4.871,533,5.982,557,3.67,579,3.795,627,3.331,644,3.332,645,6.775,660,3.913,677,3.722,678,5.124,679,3.872,693,3.422,704,3.295,808,3.557,810,3.758,829,3.758,995,4.966,1020,4.588,1021,3.934,1033,5.243,1110,4.588,1113,4.165,1121,3.977,1133,4.704,1150,2.905,1187,5.306,1212,4.552,1443,3.704,1811,6.113,1896,6.775,1984,5.601,2042,2.563,2098,6.572,2100,3.977,2130,5.688,2435,7.017,2920,15.096,2921,7.729,2926,8.347,2927,7.729,2928,8.347]],["keywords/290",[]],["title/291",[223,301.858,2100,656.634]],["content/291",[2,1.673,3,3.873,7,3.347,11,6.204,16,1.881,18,2.91,22,1.563,30,4.163,49,4.688,69,3.633,113,4.289,147,4.452,168,3.998,195,2.88,222,2.551,223,4.815,231,3.309,238,4.591,244,3.806,251,3.884,258,1.654,261,4.835,266,3.948,270,2.592,277,3.39,281,1.91,282,2.476,291,2.274,295,6.797,325,3.97,340,1.845,348,4.419,352,4.642,359,9.788,360,8.163,365,5.481,367,3.143,385,2.718,391,5.088,404,2.824,408,3.532,413,3.825,417,4.668,457,3.713,465,2.749,467,3.361,490,2.312,511,3.97,530,7.598,533,8.325,542,4.452,647,3.088,677,3.695,693,4.203,698,4.298,721,4.086,728,7.272,736,4.388,810,7.239,816,4.591,842,2.824,864,2.997,919,5.647,957,4.981,1014,3.457,1021,3.906,1022,4.591,1033,5.205,1066,12.438,1104,6.967,1110,4.555,1113,4.135,1187,5.268,1443,3.678,1643,3.927,1811,6.069,1912,6.726,1915,5.949,1919,7.269,1984,10.79,2042,2.544,2088,6.967,2100,11.157,2130,5.647,2265,6.069,2432,7.269,2433,7.269,2920,8.611,2929,7.674,2930,7.674,2931,7.674,2932,7.674]],["keywords/291",[]],["title/292",[533,629.721,832,1085.254]],["content/292",[2,2.358,43,4.747,66,3.992,70,7.274,78,9.86,86,8.302,168,3.65,195,3.391,268,9.223,281,4.168,287,7.738,290,7.772,291,4.961,335,4.074,518,7.031,520,10.757,666,8.179,771,7.772,804,7.45,901,8.709,1105,10.866,1396,11.639,2100,8.613,2920,11.957]],["keywords/292",[]],["title/293",[3,158.044,396,406.257,619,541.745,719,537.447]],["content/293",[]],["keywords/293",[]],["title/294",[286,1163.024]],["content/294",[2,2.093,22,1.955,43,5.281,71,8.723,284,6.047,287,8.608,494,10.429,569,12.544,619,11.142,632,9.011,666,9.098,1022,11.142,1481,10.648,1627,15.836,2208,12.785]],["keywords/294",[]],["title/295",[226,220.355,445,299.424,601,453.632,604,503.706]],["content/295",[2,1.62,3,3.004,8,2.288,13,1.4,22,1.018,25,5.274,49,2.694,66,2.312,69,1.765,70,2.545,71,8.533,79,1.708,113,2.465,147,3.398,162,2.618,168,2.704,180,3.065,181,2.65,186,1.968,192,3.138,195,1.835,222,1.004,226,1.426,229,2.65,241,2.628,268,2.358,277,1.334,279,2.081,281,3.589,290,2.72,320,3.138,340,2.331,343,2.35,357,4.908,358,3.625,372,1.953,379,4.245,385,2.075,387,3.065,394,2.834,396,2.628,408,4.462,417,3.563,430,3.563,435,3.217,439,3.349,445,1.937,465,2.099,489,2.981,495,2.334,500,5.319,522,4.022,548,5.319,569,5.429,579,2.876,598,3.973,599,4.521,601,2.935,604,3.259,627,1.61,632,8.326,641,2.769,666,2.862,676,3.101,677,2.821,679,2.935,719,5.754,721,3.119,749,5.193,779,3.842,792,2.607,812,2.834,863,6.924,871,5.29,897,2.391,925,2.89,926,3.281,929,5.358,930,3.374,998,3.802,1023,3.146,1025,3.973,1026,3.349,1028,4.633,1033,3.973,1042,4.212,1050,2.65,1074,3.157,1085,4.458,1150,3.644,1381,4.981,1481,3.349,1537,10.546,1643,2.998,1795,3.727,1809,6.576,1837,3.157,1859,3.534,1930,3.973,2020,4.561,2029,4.381,2084,5.549,2120,4.127,2208,9.897,2220,4.458,2226,8.244,2229,4.245,2383,12.402,2687,5.135,2702,5.549,2933,8.858,2934,10.47,2935,6.326,2936,6.326,2937,6.326,2938,10.47,2939,6.326,2940,6.326,2941,10.47,2942,6.326,2943,6.326,2944,6.326,2945,6.326,2946,6.326,2947,6.326,2948,10.47,2949,6.326,2950,6.326,2951,6.326,2952,6.326,2953,6.326,2954,5.858,2955,5.858,2956,5.858,2957,22.558,2958,6.326,2959,5.549,2960,8.497,2961,6.326,2962,6.326,2963,8.244,2964,6.326,2965,6.326,2966,6.326,2967,5.549,2968,4.184,2969,6.326,2970,4.458,2971,6.326,2972,19.674,2973,19.674,2974,19.674,2975,10.47,2976,6.326,2977,5.858,2978,10.47,2979,6.326,2980,6.326,2981,10.47,2982,6.326,2983,5.858,2984,6.326,2985,5.858,2986,4.85,2987,6.326,2988,6.326,2989,6.326,2990,6.326,2991,6.326,2992,6.326]],["keywords/295",[]],["title/296",[73,476.77,268,513.649]],["content/296",[2,1.124,3,2.575,6,2.179,11,2.607,12,7.167,13,3.895,15,6.442,16,0.682,18,1.826,19,4.269,20,2.186,22,1.252,24,3.563,25,3.376,42,1.213,49,1.215,52,1.038,66,2.627,69,3.319,70,1.899,71,8.21,79,5.213,83,1.407,89,1.416,103,1.105,106,0.932,113,3.893,127,1.604,128,1.589,160,1.2,180,5.233,181,2.753,185,0.894,186,1.469,195,0.647,198,1.169,202,1.773,207,2.812,209,1.538,217,1.336,219,1.158,220,1.086,221,2.37,223,1.79,224,0.536,226,1.064,227,0.823,228,2.269,235,1.319,241,1.063,254,1.277,261,3.554,268,6.561,277,3.486,281,2.206,282,0.898,283,1.772,291,0.702,295,1.336,299,1.804,303,1.096,312,5.51,340,1.051,345,1.11,357,4.486,361,1.523,364,3.701,372,0.79,374,1.747,375,1.407,376,2.077,377,1.31,383,1.407,385,1.548,394,5.33,396,4.488,397,0.541,404,0.872,408,1.091,422,3.325,426,5.833,434,1.285,438,1.589,445,0.784,448,0.891,457,2.944,465,0.849,466,1.538,469,0.944,485,1.115,489,1.206,490,0.714,495,1.742,500,8.045,512,2.555,527,3.407,533,1.169,544,6.589,547,4.209,551,2.664,556,1.115,569,4.237,596,1.627,599,4.132,606,1.494,607,3.643,610,5.812,613,1.875,614,4.177,619,5.302,620,2.898,625,3.53,631,4.862,632,5.768,633,1.718,641,1.12,657,1.804,658,1.026,659,1.718,660,2.213,666,6.582,677,4.267,679,2.19,699,1.804,704,1.01,709,1.744,717,1.277,719,5.937,721,1.262,728,2.637,743,6.427,746,6.222,752,1.003,792,3.367,805,1.804,808,2.012,812,1.147,841,1.355,846,6.202,858,1.442,860,1.385,871,1.293,906,1.147,909,1.43,915,3.08,925,1.169,942,3.969,943,4.63,959,1.608,1018,4.477,1022,1.418,1025,1.608,1033,1.608,1038,1.627,1039,1.804,1042,1.899,1049,3.13,1050,1.072,1085,1.804,1113,1.277,1150,1.643,1175,4.911,1258,4.918,1267,1.086,1291,2.077,1308,4.23,1359,7.563,1364,3.039,1366,1.916,1370,4.141,1393,3.385,1453,1.396,1471,6.627,1478,4.141,1481,8.435,1484,6.869,1537,13.862,1541,2.37,1569,3.27,1610,1.916,1614,2.595,1623,1.589,1633,1.523,1634,3.168,1643,1.213,1708,1.247,1716,1.51,1723,3.217,1775,1.375,1795,1.508,1820,4.551,1837,4.077,1839,1.962,1857,1.648,1859,5.345,1876,2.931,1923,1.648,1942,1.837,1983,3.122,1985,1.804,2029,4.551,2067,3.168,2074,3.534,2086,2.755,2109,2.015,2217,2.077,2220,3.327,2229,1.718,2234,1.962,2238,2.077,2262,1.773,2307,1.962,2456,3.389,2502,2.152,2545,1.773,2594,1.693,2687,2.077,2885,2.245,2901,2.37,2906,2.245,2933,5.404,2954,7.566,2955,2.37,2956,2.37,2968,6.329,2970,1.804,2993,12.875,2994,8.171,2995,9.57,2996,4.721,2997,4.721,2998,4.721,2999,2.37,3000,2.56,3001,4.721,3002,2.152,3003,2.245,3004,2.37,3005,2.56,3006,2.37,3007,2.56,3008,2.56,3009,1.773,3010,4.371,3011,9.57,3012,4.721,3013,9.57,3014,4.721,3015,4.721,3016,4.721,3017,3.832,3018,4.371,3019,4.371,3020,4.721,3021,2.37,3022,2.37,3023,4.721,3024,2.56,3025,2.56,3026,2.56,3027,2.56,3028,2.56,3029,2.56,3030,2.37]],["keywords/296",[]],["title/297",[445,422.038,1170,1085.254]],["content/297",[3,3.223,73,6.897,268,7.431,284,5.995,340,4.438,396,8.284,397,4.212,619,11.047,719,10.959,804,8.216,861,14.313,906,8.933,1481,10.557,2419,16.958,2420,17.49,2626,18.463]],["keywords/297",[]],["title/298",[831,554.256,1988,487.519,2100,545.038]],["content/298",[]],["keywords/298",[]],["title/299",[2042,532.102]],["content/299",[2,2.093,8,4.343,11,3.273,13,3.807,22,1.673,25,3.409,62,8.321,66,2.652,115,4.476,116,7.01,186,3.737,195,1.646,206,4.969,225,5.786,228,3.335,244,5.515,270,3.757,279,3.95,281,2.769,297,5.074,319,8.184,327,7.732,335,2.707,340,3.831,343,4.461,352,4.969,354,4.246,355,3.09,427,4.357,437,6.146,485,8.762,526,6.865,542,6.452,552,6.187,564,7.944,575,4.825,627,6.155,639,7.374,644,4.795,647,4.476,651,4.851,675,7.635,711,7.944,749,5.957,831,5.819,847,4.507,864,4.343,873,5.66,874,8.184,902,5.281,921,5.141,1050,7.21,1133,4.315,1142,4.193,1175,7.219,1189,4.777,1488,6.452,1598,7.219,1634,8.06,1971,8.99,2027,8.695,2095,8.318,2100,8.199,2161,9.208,2162,9.457,2462,7.544,2923,11.121,3031,10.098]],["keywords/299",[]],["title/300",[286,1163.024]],["content/300",[2,2.59,3,2.34,8,5.235,16,2.092,22,1.408,43,3.802,61,5.055,62,5.99,66,3.197,127,3.534,128,8.988,145,6.751,178,9.865,195,3.595,222,3.11,223,4.293,224,2.227,277,4.133,279,4.762,287,6.197,302,10.837,307,7.482,352,4.18,404,4.933,413,9.047,542,7.777,605,7.138,661,7.611,667,9.865,804,5.966,831,9.497,871,7.315,1367,11.751,1516,9.444,1549,10.027,1643,6.86,1988,6.17,2100,10.588,2421,11.751,2925,13.406,3032,14.478]],["keywords/300",[]],["title/301",[222,218.697,831,667.74]],["content/301",[1,1.822,2,1.871,3,2.558,11,3.479,13,3.501,14,2.806,15,2.013,16,1.168,18,3.537,19,1.864,20,2.69,22,1.903,24,2.095,25,2.295,49,2.08,62,8.606,66,2.819,68,3.895,69,2.256,79,2.183,87,3.359,89,1.743,102,4.376,103,3.491,106,5.76,113,4.607,120,3.623,130,8.81,136,3.121,160,3.79,179,4.222,185,2.823,195,2.168,206,3.345,207,3.461,222,3.973,223,2.797,224,0.919,226,1.822,228,2.245,230,2.738,248,6.798,261,4.742,270,3.994,277,1.705,279,2.659,281,2.944,282,2.429,290,5.489,291,2.219,295,4.222,329,3.144,340,1.8,352,4.569,354,1.995,359,8.413,360,3.623,385,2.652,404,2.755,408,3.446,416,4.193,422,2.489,443,4.719,445,2.476,465,4.236,467,3.279,490,4.415,494,6.622,511,3.873,526,2.295,530,4.719,533,3.694,557,3.555,625,4.344,627,4.026,644,3.228,645,6.563,660,3.79,671,6.052,677,3.605,678,4.964,679,3.751,693,3.338,704,3.191,717,6.371,728,4.516,731,3.345,771,3.476,810,3.64,831,11.758,1020,4.444,1021,3.811,1033,5.079,1110,4.444,1113,4.035,1133,2.905,1142,2.823,1230,4.193,1281,5.348,1811,5.922,1896,6.563,1988,3.446,2027,7.995,2100,3.852,2122,3.986,2130,5.51,2132,4.222,2435,6.798,2487,5.698,2631,7.487,3033,8.086,3034,4.86]],["keywords/301",[]],["title/302",[223,301.858,2100,656.634]],["content/302",[2,1.713,3,3.726,7,3.471,11,6.281,16,1.935,18,2.994,22,1.302,30,4.283,69,3.737,102,4.651,113,4.375,147,4.616,168,3.752,195,2.924,222,2.612,223,4.881,231,3.431,238,4.761,244,3.946,251,3.996,258,1.715,261,4.975,266,4.094,270,2.688,277,2.824,281,1.981,282,2.547,291,2.358,295,6.993,325,4.117,340,1.913,348,4.583,352,4.752,359,9.909,360,8.326,365,5.684,367,3.259,385,2.818,391,5.276,404,2.928,408,3.662,413,3.966,417,4.84,457,3.85,465,2.851,467,3.485,488,5.856,490,2.398,511,4.117,530,7.817,533,8.491,542,4.616,647,3.203,677,3.832,693,4.302,698,4.456,721,4.237,728,7.481,736,4.55,810,6.03,816,4.761,831,4.163,842,2.928,864,3.108,919,5.856,957,5.165,1014,3.585,1021,4.05,1022,4.761,1033,5.398,1066,12.653,1104,7.225,1110,4.723,1113,4.288,1187,5.463,1443,3.814,1643,4.072,1811,6.294,1912,6.975,1915,6.169,1919,7.538,1984,8.988,2042,2.638,2088,7.225,2100,11.283,2130,5.856,2265,6.294,2432,7.538,2433,7.538,2929,7.957,2930,7.957,2931,7.957,2932,7.957]],["keywords/302",[]],["title/303",[533,629.721,832,1085.254]],["content/303",[2,2.358,43,4.747,62,7.48,66,3.992,70,7.274,78,9.86,86,8.302,168,3.65,195,3.391,268,9.223,281,4.168,287,7.738,290,7.772,291,4.961,518,7.031,520,10.757,666,8.179,771,7.772,804,7.45,831,8.759,901,8.709,1105,10.866,1396,11.639,2100,8.613]],["keywords/303",[]],["title/304",[11,375.556,285,887.311]],["content/304",[]],["keywords/304",[]],["title/305",[286,1163.024]],["content/305",[1,3.304,2,2.057,3,3.869,15,4.921,43,3.85,59,6.476,97,6.537,106,5.336,162,6.066,195,3.425,216,8.317,218,9.001,219,6.632,222,2.326,223,4.33,231,7.893,244,6.732,251,6.673,255,11.23,263,4.501,268,5.464,277,3.091,287,6.275,312,6.275,313,10.737,315,16.62,333,9.563,340,3.263,352,4.233,380,8.811,392,12.417,481,12.137,509,8.638,659,9.838,672,9.563,759,11.544,901,7.062,1211,8.638,3035,12.86,3036,14.661,3037,14.661]],["keywords/305",[]],["title/306",[11,311.729,285,736.511,1626,792.33]],["content/306",[3,3.142,11,3.896,13,3.164,16,2.066,19,3.296,49,3.679,64,6.634,65,6.501,69,3.99,179,7.466,195,2.663,198,6.533,206,5.917,250,7.987,251,7.627,255,11.042,275,8.779,277,3.015,282,3.697,312,6.12,332,8.982,333,9.328,341,14.236,345,8.431,368,5.205,408,6.094,421,7.922,422,4.402,435,7.271,465,6.449,469,5.275,515,7.318,516,7.987,658,7.791,748,7.682,804,5.893,836,8.595,1038,9.091,1550,10.265,1593,9.744,1626,13.463,1643,6.776,1915,10.265,1967,12.022,3038,12.543,3039,19.439,3040,14.3,3041,14.3]],["keywords/306",[]],["title/307",[3,184.904,66,252.595,237,496.196]],["content/307",[2,1.285,3,3.901,11,4.412,13,3.582,15,5.536,16,0.816,18,2.129,19,4.524,20,3.17,24,1.464,30,3.046,52,3.863,64,4.419,65,4.331,66,4.124,69,3.446,73,3.295,113,2.242,127,1.379,136,3.678,168,2.494,181,2.367,185,1.973,195,1.305,216,2.377,220,2.397,222,3.241,223,4.091,224,1.647,231,2.256,237,7.022,251,5.238,255,5.411,258,2.894,264,12.719,270,2.98,277,2.604,281,1.302,282,2.758,283,3.575,285,3.637,291,4.443,297,4.025,298,2.873,303,5.286,312,2.418,316,2.213,321,2.707,329,3.705,330,1.908,340,2.749,341,4.138,347,2.036,351,3.267,352,3.566,354,2.351,355,2.451,356,3.21,359,2.429,360,2.531,367,2.143,368,3.468,370,2.531,374,3.526,377,2.891,397,3.063,399,3.308,400,2.397,401,6.514,410,5.726,413,2.608,414,3.791,415,5.117,416,2.93,424,3.21,426,4.228,428,2.091,445,1.73,458,2.496,464,1.416,519,5.236,546,2.23,596,3.592,599,4.113,602,4.875,610,3.432,615,3.508,622,4.94,651,3.848,689,2.677,707,5.001,808,2.408,813,3.13,820,4.75,838,4.095,842,4.94,847,4.635,849,2.113,875,1.577,925,4.352,926,2.93,938,3.362,982,3.549,1029,12.719,1038,3.592,1124,5.236,1146,10.619,1535,3.705,1545,4.586,1626,3.913,1695,4.75,2025,3.238,2100,7.714,2800,11.769,3042,9.527,3043,9.527,3044,9.527,3045,13.427,3046,16.256,3047,14.501,3048,8.821,3049,8.821,3050,8.356,3051,8.009,3052,12.351]],["keywords/307",[]],["title/308",[69,319.22,70,460.294,465,379.544]],["content/308",[1,2.512,2,1.16,3,1.802,11,4.443,22,1.084,25,3.164,31,2.881,49,2.868,69,5.919,70,7.756,89,2.402,119,6.446,136,4.303,161,4.335,168,2.251,223,5.578,224,1.266,226,3.674,237,4.835,241,4.631,250,9.107,251,3.326,270,3.487,281,2.57,316,4.367,330,3.764,335,2.512,347,5.877,354,2.75,355,2.868,359,4.792,367,7.31,368,5.935,372,3.441,385,6.322,398,12.204,399,4.333,400,4.73,401,4.485,402,8.546,426,3.251,465,8.889,530,6.506,551,4.52,599,4.813,644,4.45,660,5.226,709,7.596,817,8.344,818,5.253,833,6.176,921,10.091,926,5.781,976,7.009,982,7.001,1022,6.176,1626,7.72,1678,9.047,1679,5.119,1837,5.562,3053,6.921,3054,9.372,3055,10.322,3056,11.148,3057,11.148]],["keywords/308",[]],["title/309",[19,225.419,195,133.976,251,291.737,1967,822.099]],["content/309",[1,1.135,2,0.899,3,2.447,11,5.676,13,1.912,15,5.558,18,3.007,19,5.4,20,4.476,22,0.49,25,1.43,30,2.763,42,2.387,52,4.601,66,1.908,69,3.753,108,2.484,115,3.22,127,2.109,161,4.412,162,3.575,168,2.716,174,4.909,185,1.759,188,3.286,195,2.263,216,2.12,218,3.093,222,0.799,223,4.685,224,1.876,231,4.53,237,5.834,246,2.814,251,6.53,255,6.445,258,1.725,261,5.622,264,11.799,270,2.703,277,1.822,281,1.992,282,1.644,283,5.048,285,3.243,290,3.715,291,2.371,297,3.651,298,2.562,312,2.156,324,4.235,329,3.36,335,1.135,340,1.121,341,3.69,347,1.816,348,2.687,351,2.913,352,2.495,353,8.259,354,2.132,355,2.223,356,4.909,359,2.166,360,3.872,363,2.595,367,1.91,368,3.145,370,2.257,374,4.2,385,2.834,386,2.484,397,1.826,398,3.771,399,2.318,400,3.667,401,6.645,402,6.625,404,3.866,408,2.147,414,3.381,416,2.613,424,2.862,426,5.152,428,1.865,437,4.422,440,1.952,442,3.771,445,1.543,448,1.754,464,2.843,465,5.022,489,5.347,503,3.164,504,2.529,515,2.578,518,3.36,519,2.769,542,2.706,546,1.989,599,2.175,602,4.422,615,3.128,644,2.011,676,2.469,681,7.023,707,2.98,730,3.06,741,2.748,797,4.236,816,4.787,820,4.236,835,4.117,842,2.944,849,1.884,901,2.427,910,3.55,921,2.156,925,2.302,926,2.613,930,2.687,980,3.862,1029,11.799,1044,4.909,1063,4.677,1090,7.305,1121,2.4,1124,4.75,1146,6.329,1211,2.968,1302,3.433,1309,3.164,1326,6.391,1366,3.771,1455,3.028,1551,3.381,1616,2.968,1626,3.489,1716,3.628,1916,2.595,1964,3.55,1967,4.236,2025,2.887,2035,4.419,2100,6.409,2109,3.967,2777,4.089,2800,7.014,3045,8.002,3046,15.294,3048,8.002,3049,8.002,3050,7.58,3051,7.265,3058,4.236,3059,5.038,3060,8.642,3061,8.642]],["keywords/309",[]],["title/310",[435,700.782,465,457.256]],["content/310",[3,2.877,11,4.851,18,3.979,25,5.052,69,4.967,115,6.635,161,6.923,168,3.594,223,4.915,224,2.022,251,5.311,297,7.521,323,11.052,335,4.012,374,6.589,416,9.232,422,5.48,435,11.409,440,8.694,465,5.906,679,8.259,730,10.812,835,8.481,837,11.052,938,10.592,1218,12.78,1626,12.33,1708,8.674]],["keywords/310",[]],["title/311",[22,95.072,195,133.976,619,541.745,666,442.372]],["content/311",[]],["keywords/311",[]],["title/312",[286,1163.024]],["content/312",[2,2.04,22,1.906,43,5.147,208,8.111,284,5.894,287,8.39,569,12.351,619,10.86,652,6.522,666,8.868,717,9.782,959,12.312,1022,10.86,1481,10.379,1627,15.435,1917,13.358,2050,13.814,2208,12.462]],["keywords/312",[]],["title/313",[226,220.355,445,299.424,601,453.632,604,503.706]],["content/313",[2,1.087,3,3.176,8,2.281,15,6.023,20,2.099,22,1.674,25,1.79,36,2.427,70,4.203,71,2.736,79,3.609,106,3.802,147,3.389,158,4.621,160,2.958,162,2.61,186,1.963,192,3.129,195,1.431,198,2.883,208,2.61,215,4.173,226,1.422,229,2.643,249,5.534,261,2.343,265,3.682,268,5.792,279,2.075,281,1.454,290,2.712,297,2.666,298,3.208,313,4.621,327,4.062,340,2.325,343,2.343,345,2.736,367,2.392,408,2.689,439,3.34,444,4.621,445,1.932,465,4.435,477,4.837,495,3.854,509,3.717,518,2.453,550,2.958,569,3.272,598,3.963,599,2.724,601,2.927,604,3.25,627,1.605,631,3.754,639,3.873,641,2.761,666,4.726,689,1.773,717,3.148,749,3.129,779,3.832,804,2.6,812,2.827,818,2.973,863,6.909,875,1.76,876,4.062,897,2.384,925,6.108,930,3.364,959,6.561,983,4.621,984,5.304,1020,3.468,1023,3.651,1024,4.062,1026,3.34,1028,4.621,1042,4.203,1074,3.148,1085,4.446,1137,4.968,1267,2.677,1273,3.873,1363,3.648,1379,5.534,1381,4.968,1481,5.531,1488,3.389,1837,3.148,1904,4.621,1916,3.25,1983,4.173,1985,4.446,2050,9.42,2055,3.792,2056,10.006,2058,10.249,2074,4.722,2109,4.968,2167,5.304,2208,9.88,2226,4.968,2229,4.234,2284,5.534,2291,5.121,2307,4.837,2380,5.534,2389,8.009,2502,5.304,2618,5.534,2687,8.478,2688,5.842,2689,5.534,2690,5.842,2691,5.842,2692,5.842,2693,5.842,2694,5.842,2695,5.534,2696,5.842,2697,9.163,2698,5.842,2699,5.842,2700,5.842,2701,5.534,2702,5.534,2703,5.842,2704,5.842,2705,5.842,2706,5.842,2707,12.378,2708,10.85,2709,12.378,2710,12.378,2711,5.842,2712,9.673,2713,5.842,2714,9.673,2715,9.163,2716,12.378,2717,5.842,2718,5.842,2719,5.842,2720,5.842,2721,5.842,2722,5.842,2723,5.842,2724,5.842,2725,5.842,2726,5.842,2727,5.842,2728,5.842,2729,5.842,2730,5.842,2731,5.842,2732,5.842,2733,5.842,2734,5.842,2735,5.842,2736,5.842,2737,9.673,2738,5.842,2739,5.304,2740,5.842,2741,5.842,2742,5.842,2743,5.842,2744,5.842,2745,5.842,2746,5.842,2747,5.842,2748,5.842,2749,5.842,2750,5.842,2751,5.842,2752,5.842,2753,5.842,2754,5.842,2755,5.842,2756,5.842,2757,5.842,2758,5.534,2759,5.842,2760,5.842,2761,5.842,3062,5.842,3063,5.534,3064,6.344,3065,5.121,3066,6.309,3067,6.309,3068,5.842]],["keywords/313",[]],["title/314",[73,476.77,268,513.649]],["content/314",[2,1.806,3,3.738,6,2.952,11,5.839,13,4.374,16,1.527,18,3.017,19,4.765,20,3.515,22,1.312,24,5.121,25,1.815,52,2.594,66,2.333,73,3.655,79,5.784,83,3.515,87,4.389,89,2.277,106,2.328,113,3.689,127,2.579,136,2.469,137,5.594,160,2.998,181,2.679,186,1.99,194,4.172,195,0.876,223,1.401,226,2.381,228,2.934,229,4.426,235,5.442,254,6.735,258,1.276,263,3.244,266,3.047,268,6.466,277,3.658,281,1.474,282,2.567,283,2.4,289,2.937,312,7.426,334,2.636,340,1.424,343,2.375,357,2.998,374,2.367,379,4.292,385,3.465,397,1.351,404,2.179,426,5.06,438,3.971,445,1.958,448,3.677,457,2.866,465,2.122,495,3.897,504,3.211,533,4.827,544,3.273,575,1.535,596,4.066,607,2.852,610,8.198,614,4.066,619,10.351,620,6.486,625,3.436,658,4.234,660,6.327,666,7.849,676,3.135,679,4.901,680,7.445,717,5.272,728,3.572,805,4.507,846,3.081,915,4.172,926,3.317,938,3.805,974,3.665,994,5.61,996,4.507,999,9.783,1000,9.783,1023,3.171,1038,4.066,1043,3.733,1074,3.191,1088,4.172,1113,3.191,1267,2.714,1359,8.581,1369,5.191,1481,5.594,1552,4.118,1610,4.787,1623,6.559,1633,3.805,1643,5.006,1708,3.116,1723,4.358,1736,4.684,1737,4.684,1875,2.153,1983,6.987,2056,7.908,2058,10.348,2067,4.292,2071,13.748,2220,7.445,2239,5.377,2285,5.922,2307,4.903,2419,4.507,2768,8.575,2776,5.922,3064,3.884,3069,9.267,3070,9.783,3071,9.783,3072,10.565,3073,6.396,3074,6.396,3075,6.396]],["keywords/314",[]],["title/315",[614,876.205,666,623.523]],["content/315",[3,1.81,6,3.17,11,1.871,15,7.03,19,2.582,22,1.379,24,5.007,25,1.949,31,1.775,69,3.125,73,2.376,79,5.218,127,2.734,137,3.636,180,5.426,192,3.406,198,3.138,221,3.448,261,2.551,268,6.717,277,1.448,281,3.27,283,2.577,291,1.885,298,3.492,299,4.84,312,2.939,343,2.551,357,5.251,364,7.988,396,2.853,422,5.548,426,5.256,434,3.448,465,2.279,490,1.916,504,3.448,533,3.138,551,2.785,569,5.808,575,1.648,599,7.065,607,3.062,610,6.803,614,7.121,619,9.065,625,6.017,641,3.006,666,6.416,680,4.84,717,9.646,752,2.691,808,2.927,849,2.568,915,4.48,942,9.417,943,7.893,959,4.314,969,4.93,983,8.203,984,5.774,996,4.84,998,4.128,1049,3.272,1393,7.306,1471,9.823,1478,9.825,1481,5.93,1484,11.924,1614,6.156,1723,4.68,1733,6.359,1837,5.589,1875,2.312,1876,6.954,2067,4.609,2071,14.352,2208,4.366,2238,5.574,2262,4.757,2263,6.359,2291,5.574,2687,5.574,2695,6.024,2697,6.024,2715,6.024,2758,6.024,2768,9.091,2885,6.024,2906,6.024,3006,6.359,3017,5.574,3018,6.359,3019,6.359,3021,6.359,3022,6.359,3062,6.359,3064,6.803,3068,10.371,3069,12.441,3070,6.359,3071,10.371,3076,14.184,3077,6.868,3078,14.184,3079,6.868,3080,11.201,3081,6.868,3082,6.868,3083,6.868,3084,6.868,3085,6.868,3086,6.868,3087,6.868,3088,5.774]],["keywords/315",[]],["title/316",[749,859.577]],["content/316",[2,1.311,3,2.877,11,3.432,15,3.135,22,2.007,36,4.845,43,3.308,69,3.515,94,8.453,113,2.965,162,5.212,181,5.277,227,4.05,261,8.792,266,6.001,268,8.822,277,3.753,281,4.104,287,5.391,296,4.953,312,5.391,327,8.109,354,3.108,394,5.643,427,4.57,494,6.532,511,6.034,599,9.689,610,10.812,619,6.978,641,5.513,666,5.698,689,3.54,717,6.285,749,6.247,752,4.935,906,5.643,909,7.036,959,7.911,1007,6.577,1025,11.181,1033,7.911,1042,5.068,1481,6.669,1916,6.488,2029,8.724,2050,8.876,2097,11.049,2240,7.571,2701,18.11,2768,10.223,2977,11.663,2983,11.663,2985,11.663,3069,11.049,3089,12.596,3090,20.647,3091,12.596,3092,12.596,3093,12.596,3094,12.596,3095,12.596,3096,12.596]],["keywords/316",[]],["title/317",[445,422.038,1170,1085.254]],["content/317",[3,3.428,73,7.338,87,8.813,195,2.906,268,7.905,284,6.378,619,11.752,717,10.585,804,8.741,1627,16.702]],["keywords/317",[]],["title/318",[756,1457.086]],["content/318",[]],["keywords/318",[]],["title/319",[61,298.102,156,581.805,1120,591.333,1150,297.179,3097,790.599]],["content/319",[2,2.339,3,3.04,8,3.178,11,3.714,13,3.694,15,3.392,19,2.026,22,1.623,25,2.494,30,2.81,61,3.068,67,4.187,80,6.738,89,3.598,97,3.919,115,7.01,156,5.989,162,5.639,189,6.578,191,5.178,195,2.577,198,6.227,209,8.192,214,6.493,218,5.395,270,2.749,283,5.114,293,4.909,304,5.658,312,3.761,320,4.359,332,5.52,345,3.812,348,4.687,360,3.937,368,4.961,387,6.603,388,6.92,389,4.653,429,5.456,432,3.937,464,2.202,468,8.192,495,5.028,545,5.897,546,3.469,556,3.829,564,9.014,570,9.014,579,3.995,597,5.036,632,3.937,638,10.613,639,8.367,666,3.976,671,6.578,682,3.495,689,5.287,696,5.658,719,4.83,721,6.719,722,5.733,756,7.389,788,5.229,789,7.709,791,5.178,792,3.621,829,6.136,849,3.287,956,5.082,1043,5.129,1068,6.92,1105,5.282,1120,6.087,1150,3.059,1291,7.133,1359,5.587,1365,6.738,1391,5.658,1623,5.456,1624,4.62,1643,4.164,1737,6.436,1930,5.52,1936,6.92,2020,3.829,2170,5.897,2187,7.133,2277,17.115,2317,6.087,2502,7.389,2918,7.389,3097,22.974,3098,8.789,3099,8.789,3100,8.789,3101,8.138,3102,6.087,3103,8.789,3104,8.789,3105,8.789,3106,8.138,3107,8.789,3108,8.138,3109,8.789,3110,8.789,3111,8.138,3112,8.789,3113,7.133]],["keywords/319",[]],["title/320",[766,1064.028]],["content/320",[0,14.033,2,2.538,3,2.83,11,1.772,16,0.94,17,4.364,22,1.041,25,3.875,43,1.708,49,3.514,54,3.694,59,6.994,61,4.768,62,2.691,63,4.763,64,6.335,65,2.956,67,3.098,83,3.574,89,3.773,93,4.583,103,5.896,106,3.899,108,3.206,115,3.992,157,5.278,163,2.164,166,3.869,181,2.724,182,5.704,185,2.271,186,2.023,188,4.242,189,4.868,191,3.832,192,3.225,195,1.871,196,4.15,206,2.691,214,3.098,216,7.924,217,7.13,219,2.942,222,1.032,223,1.424,225,3.133,235,3.35,262,2.808,263,1.997,268,2.424,272,3.328,273,7.084,281,1.499,283,2.44,287,2.783,289,2.986,294,4.085,307,2.189,313,7.844,326,9.42,340,1.448,345,4.646,358,9.073,367,4.062,368,2.367,373,4.668,392,8.577,408,2.771,411,3.443,422,2.002,443,3.795,467,2.637,469,2.399,490,3.81,491,4.085,495,5.038,515,3.328,517,5.121,518,2.529,552,3.35,556,2.833,557,6.004,562,4.301,570,4.301,575,2.57,603,3.017,605,3.206,607,4.776,613,7.844,616,3.482,628,5.121,648,5.467,650,4.134,682,2.586,689,4.92,690,4.134,722,6.987,727,4.763,732,5.278,766,13.237,770,4.763,780,4.668,784,4.504,792,2.68,796,4.868,797,5.467,814,4.134,959,4.085,1020,3.574,1050,2.724,1139,4.504,1255,4.986,1267,2.759,1269,4.986,1298,4.301,1311,8.434,1344,3.95,1365,4.986,1391,4.187,1443,2.886,1554,4.134,1558,5.467,1590,4.364,1624,3.419,1643,6.471,1669,5.704,1671,6.022,1885,4.134,1891,5.704,1922,8.434,2094,2.821,2630,4.301,2635,5.467,2777,5.278,2918,5.467,3114,6.503,3115,12.645,3116,9.918,3117,6.022,3118,6.503,3119,19.915,3120,6.503,3121,4.868,3122,4.668,3123,6.503,3124,4.037,3125,6.503,3126,5.467,3127,6.503,3128,4.868,3129,6.022,3130,6.503,3131,6.503,3132,6.503,3133,5.467]],["keywords/320",[]],["title/321",[165,1328.705]],["content/321",[2,2.613,3,3.46,22,1.105,25,5.83,43,1.836,49,1.799,54,3.972,59,6.343,61,5.013,64,3.244,65,6.528,66,3.17,69,3.171,73,3.931,83,6.246,89,2.449,93,4.927,145,3.26,146,8.518,162,2.893,163,2.326,165,16.966,178,4.764,186,2.175,195,3.032,196,2.709,206,6.842,214,3.331,216,9.31,217,8.634,222,1.109,223,3.145,226,1.576,241,2.905,262,3.019,268,4.235,277,1.474,283,5.388,288,3.626,307,6.562,332,7.138,335,3.236,345,4.929,358,4.007,360,3.133,374,2.588,385,3.727,392,4.392,394,5.092,401,2.813,405,4.043,408,4.843,411,3.702,421,3.874,443,6.633,481,4.293,495,5.297,527,5.894,538,4.445,540,3.387,552,5.854,556,3.046,561,4.501,562,4.624,594,3.118,597,4.007,605,3.447,611,4.624,616,1.783,628,5.505,661,3.676,666,8.23,671,5.233,682,2.781,689,3.194,722,4.561,775,5.505,776,6.133,778,11.008,780,5.019,791,6.696,957,4.202,993,3.784,1039,4.927,1077,5.121,1083,5.019,1113,3.489,1121,3.331,1311,8.949,1623,4.341,1643,3.313,1723,7.744,1840,8.158,1886,5.675,1904,8.323,1932,6.474,1936,5.505,1943,4.007,2237,5.878,2317,4.842,2439,5.505,2496,6.133,2558,6.474,3058,5.878,3115,6.474,3129,6.474,3134,6.992,3135,18.192,3136,6.474,3137,6.992,3138,5.36,3139,6.992,3140,9.224,3141,6.992,3142,6.992,3143,6.474,3144,6.992,3145,6.992,3146,6.474,3147,6.992]],["keywords/321",[]],["title/322",[148,928.526,3148,1059.327,3149,1059.327]],["content/322",[2,2.484,3,3.179,8,2.955,15,3.205,22,2.031,24,2.117,25,2.319,43,4.747,49,2.102,55,6.116,59,3.609,61,2.853,66,1.804,69,2.28,89,1.761,103,3.528,108,6.347,116,4.769,147,6.916,148,12.931,149,6.434,157,6.632,161,5.007,162,3.381,163,2.719,167,4.725,168,1.65,173,4.831,195,3.194,196,3.166,215,5.404,216,3.438,219,3.696,222,1.297,223,1.79,251,2.438,268,4.798,270,2.556,277,3.812,281,1.884,287,6.819,288,4.237,290,5.535,296,3.213,298,4.154,307,6.622,312,3.497,325,3.914,335,1.841,340,1.819,345,5.584,349,4.769,360,3.661,374,3.024,394,3.661,400,3.467,404,2.784,411,4.326,428,5.897,429,5.073,443,4.769,445,4.879,447,3.237,495,3.014,518,7.649,541,6.676,546,3.225,594,3.643,602,4.181,611,5.404,638,5.194,662,6.116,666,8.179,682,3.25,756,6.869,800,5.866,813,4.527,814,5.194,897,3.088,919,5.568,975,5.483,998,4.911,1187,5.194,1219,7.167,1450,6.434,1471,8.917,1482,7.566,1513,11.293,1723,5.568,1888,5.758,1901,11.922,1942,5.866,1964,5.758,2093,5.866,2095,8.917,2096,8.64,2110,6.869,2262,5.659,2608,4.682,2615,7.566,2806,6.434,3106,7.566,3121,6.116,3140,14.673,3148,14.753,3149,16.74,3150,11.922,3151,7.566,3152,5.866,3153,7.566,3154,8.171]],["keywords/322",[]],["title/323",[442,731.918,795,793.645,2196,822.099,3155,905.445]],["content/323",[1,1.779,2,2.591,3,3.327,8,2.854,11,2.151,16,2.251,22,1.724,25,3.555,43,3.29,49,3.223,54,7.117,55,5.908,57,4.607,59,3.487,61,2.756,69,2.203,73,2.731,83,4.339,89,1.701,103,3.408,106,2.873,108,3.892,139,5.753,145,3.681,146,4.066,147,8.367,162,3.266,163,2.626,167,4.564,186,3.898,188,5.149,189,5.908,195,3.067,206,3.266,216,6.553,220,3.349,222,2.472,223,3.884,224,1.77,232,7.53,255,4.484,258,1.575,262,3.408,266,3.761,277,4.078,283,2.962,287,3.378,299,5.562,304,5.082,307,5.244,316,3.092,319,5.379,326,4.697,345,3.424,354,1.948,358,4.524,368,2.873,369,4.15,401,3.176,404,2.689,411,4.179,413,8.927,422,2.43,428,2.922,445,2.417,495,2.912,518,3.07,551,3.201,556,3.439,574,3.589,575,3.006,596,5.018,602,4.04,613,5.781,638,11.274,650,5.018,659,8.407,666,3.571,681,4.121,682,3.139,704,3.116,712,4.339,773,12.265,792,5.162,795,16.708,799,6.407,871,3.988,938,4.697,965,6.636,1043,4.607,1106,5.666,1137,6.215,1219,6.924,1264,7.309,1365,6.052,1368,5.221,1437,6.407,1443,3.503,1450,6.215,1471,5.467,1538,5.082,1554,5.018,1643,3.74,1756,6.636,1795,4.651,1843,4.901,1922,6.215,2196,6.636,2262,5.467,2497,6.924,2607,7.53,2611,7.309,3133,6.636,3140,10.168,3155,14.423,3156,6.407,3157,7.894,3158,7.894,3159,7.894,3160,7.894,3161,7.894]],["keywords/323",[]],["title/324",[3162,1604.808]],["content/324",[2,2.381,4,5.472,8,3.711,15,3.817,22,1.981,25,2.912,43,2.695,69,2.863,79,2.77,83,8.43,87,4.263,89,3.958,139,4.712,145,4.785,147,12.739,155,6.054,161,3.991,162,4.246,163,3.414,178,6.993,188,6.694,192,5.09,195,3.249,221,5.152,223,2.247,237,4.451,272,5.251,283,3.851,290,4.411,293,5.732,296,4.035,312,4.392,348,5.472,358,5.881,360,4.598,367,3.891,370,4.598,387,4.972,396,4.263,413,4.736,441,8.08,469,3.786,489,4.836,541,5.322,542,12.291,546,4.05,557,4.512,578,5.513,601,4.761,602,5.251,603,4.761,607,6.839,638,6.524,666,9.866,792,4.229,802,8.627,810,4.62,849,3.838,897,3.878,1039,7.231,1043,5.989,1106,7.367,1196,5.881,1269,7.867,1591,8.08,1620,8.627,1625,8.08,1737,7.516,1843,6.371,1888,7.231,1930,6.445,1955,8.08,2093,7.367,2196,8.627,2201,8.329,2317,7.107,2419,7.231,2568,6.445,3162,21.958,3163,15.337,3164,10.262,3165,10.262,3166,9.502,3167,9.502,3168,10.262]],["keywords/324",[]],["title/325",[43,198.963,223,165.947,287,324.3,335,170.748,3169,567.146,3170,701.608]],["content/325",[2,2.54,19,2.842,22,1.199,30,3.942,43,6.592,80,9.452,147,6.623,171,10.815,172,6.534,186,3.836,195,3.045,218,7.569,219,5.578,220,5.231,222,1.956,223,4.469,287,10.744,291,3.383,298,6.269,307,4.151,335,5.657,345,5.347,385,4.043,392,7.744,400,5.231,428,4.563,445,3.775,516,6.886,531,8.273,539,8.688,541,6.393,552,6.351,616,3.144,627,3.137,658,4.941,676,6.043,689,3.465,766,7.569,769,10.007,796,9.228,816,6.83,875,3.44,897,6.626,1083,8.85,1443,5.472,1670,10.007,1737,9.029,1843,7.654,1942,8.85,1995,8.401,2620,11.416,2635,10.365,2807,10.365,3102,8.539,3169,9.228,3170,11.416,3171,12.329,3172,12.329,3173,10.365]],["keywords/325",[]],["title/326",[335,220.355,549,621.643,1670,793.645,2100,465.863]],["content/326",[2,2.533,3,3.534,4,4.357,11,2.226,13,2.848,19,1.884,22,1.758,25,2.319,42,6.1,43,2.146,49,3.313,55,6.116,59,5.687,61,2.853,62,3.381,66,1.804,79,2.206,80,6.264,115,3.045,146,4.209,163,2.719,168,3.217,173,6.784,175,4.456,195,3.104,196,4.988,198,3.733,222,2.043,223,4.308,241,5.349,244,3.752,277,3.359,290,5.535,291,2.242,298,6.546,307,6.622,312,3.497,329,3.177,332,5.132,334,3.367,335,4.708,340,2.866,343,3.035,345,5.584,358,7.378,385,2.68,387,3.959,400,3.467,411,6.817,413,3.771,420,5.984,421,4.527,428,5.897,432,3.661,443,4.769,445,4.879,495,3.014,509,4.814,518,3.177,527,4.237,541,4.237,542,8.559,549,5.194,556,5.609,579,5.853,605,4.028,650,8.185,671,6.116,682,6.336,761,4.564,775,6.434,776,7.167,813,4.527,836,4.911,897,6.02,901,6.202,919,5.568,920,4.296,960,5.483,974,4.682,1014,3.409,1269,6.264,1298,5.404,1355,4.862,1369,6.632,1443,3.626,1457,7.566,1471,8.917,1538,5.26,1554,5.194,1595,7.566,1670,12.931,1755,5.33,1840,5.866,1843,5.073,1964,5.758,2054,6.434,2100,6.134,2262,5.659,2271,5.866,2277,6.869,2607,4.911,3150,7.566,3166,7.566,3174,8.171,3175,8.171,3176,7.566,3177,8.171]],["keywords/326",[]],["title/327",[2,143.445,22,134.003]],["content/327",[]],["keywords/327",[]],["title/328",[2,143.445,244,632.894]],["content/328",[2,2.249,230,7.317,244,9.921,326,12.855,467,8.762,738,15.225,823,9.544,2876,20.006]],["keywords/328",[]],["title/329",[145,533.493,1624,601.456,1930,718.559]],["content/329",[2,1.963,15,2.672,18,3.545,19,2.475,22,1.044,25,3.047,36,4.129,43,2.819,54,10.714,61,3.748,69,2.996,87,4.46,89,2.314,103,4.636,132,8.713,145,5.006,147,5.767,165,8.23,192,5.324,195,2.854,206,7.804,222,1.703,223,2.351,226,2.419,263,3.296,273,7.1,288,5.567,290,4.615,293,5.996,298,5.458,307,5.339,323,6.665,334,8.584,340,3.53,354,2.649,387,5.201,401,4.319,408,4.575,489,5.059,513,4.555,523,8.036,536,6.825,545,7.204,557,4.72,578,5.767,601,4.98,602,5.494,613,7.862,647,4.001,666,7.175,668,8.453,689,5.301,692,5.725,696,10.21,703,8.713,710,9.417,732,8.713,773,8.453,774,7.565,788,9.436,792,4.424,938,6.388,1026,5.684,1113,5.357,1150,3.737,1218,7.707,1263,9.941,1293,7.707,1299,6.52,1467,7.862,1514,9.941,1836,8.453,1843,6.665,1861,9.941,1930,6.743,2027,8.013,2079,9.941,2129,9.417,2217,8.713,2240,6.452,3053,6.665,3140,8.713,3178,10.736,3179,10.736,3180,8.23,3181,10.736,3182,10.736,3183,10.736,3184,10.736,3185,10.736,3186,10.736,3187,10.736,3188,9.417,3189,10.736,3190,9.941,3191,10.736]],["keywords/329",[]],["title/330",[191,812.067,1255,1056.653]],["content/330",[2,2.023,61,6.787,74,10.473,103,6.175,162,5.917,163,4.758,173,5.366,189,10.703,195,2.663,223,3.132,263,4.39,277,3.015,288,7.415,332,8.982,340,3.183,387,6.928,441,11.26,492,10.265,495,5.275,509,8.425,536,9.091,539,10.077,542,10.442,544,7.318,545,13.044,547,7.366,552,7.366,576,10.963,597,8.195,634,9.458,638,9.091,651,5.776,661,7.518,666,6.469,777,8.425,782,11.606,784,9.904,796,10.703,870,9.328,897,5.404,995,8.508,1255,10.963,1348,8.195,1643,6.776,1748,7.05,1922,11.26,1930,8.982,2170,9.596,2201,11.606,2497,12.543,3188,12.543,3192,10.963,3193,14.3,3194,14.3,3195,14.3,3196,11.26,3197,12.022,3198,14.3]],["keywords/330",[]],["title/331",[666,623.523,696,887.311]],["content/331",[2,2.364,15,3.222,18,2.894,43,3.4,69,3.613,71,5.615,162,5.357,175,7.061,193,9.482,195,1.774,208,7.509,229,5.424,237,7.872,251,5.415,262,5.59,288,6.714,307,4.359,320,9.002,340,2.882,381,7.703,383,7.116,387,6.272,467,5.25,528,8.445,550,6.069,602,6.625,605,6.383,630,10.885,638,8.231,666,8.211,676,6.345,689,5.89,698,6.714,703,10.508,704,5.11,719,11.518,721,6.383,730,7.863,748,6.955,770,9.482,779,7.863,788,7.703,872,7.628,964,6.625,1068,10.194,1155,6.421,1211,7.628,1443,8.055,1552,8.335,1598,7.781,1620,10.885,1696,8.688,1748,6.383,1802,9.482,1927,11.356,1930,8.132,1974,6.383,2025,7.419,2127,7.781,2572,9.294,2845,11.356,2862,10.885,3051,10.885,3199,12.947,3200,12.947,3201,12.947,3202,12.947]],["keywords/331",[]],["title/332",[145,642.725,195,188.839]],["content/332",[2,2.358,11,5.693,18,2.878,19,4.168,36,4.952,79,3.476,97,5.741,98,7.993,106,6.581,139,10.404,145,6.004,146,6.632,152,6.968,168,2.6,172,4.798,195,2.863,251,3.841,262,5.559,307,4.334,316,7.083,351,7.445,360,5.768,379,8.64,441,10.138,447,5.101,464,3.226,465,4.271,489,8.52,552,6.632,570,8.515,616,3.283,619,7.133,661,6.769,681,6.722,683,9.871,705,8.64,730,7.82,735,8.399,736,6.817,748,6.916,749,6.386,770,9.429,812,5.768,974,7.378,1043,7.514,1397,10.45,1425,11.922,1443,5.714,1467,9.429,1468,11.294,1554,8.185,1859,7.191,1868,11.922,1930,11.355,1955,10.138,2135,15.858,2435,10.824,3146,11.922,3203,12.875,3204,12.875,3205,12.875,3206,15.858,3207,12.875,3208,12.875]],["keywords/332",[]],["title/333",[528,899.071,722,899.071]],["content/333",[2,2.298,18,3.196,22,1.39,43,3.755,49,5.002,64,6.634,67,6.813,69,3.99,93,10.077,110,6.704,195,1.959,209,8.595,216,9.291,229,5.991,251,4.266,273,9.458,307,4.814,320,9.641,327,9.206,381,8.508,396,5.941,411,7.571,445,4.379,467,5.799,495,8.147,517,11.26,518,5.561,540,6.928,546,5.644,630,12.022,634,12.856,672,9.328,692,7.626,722,12.68,760,11.26,767,7.799,779,8.685,782,11.606,799,11.606,1077,10.473,1090,9.206,1105,8.595,1396,9.206,1863,9.328,2054,11.26,2430,13.241,3209,14.3,3210,14.3,3211,14.3,3212,13.241,3213,14.3,3214,14.3,3215,13.241]],["keywords/333",[]],["title/334",[2,88.862,112,285.755,279,280.819,1214,556.959,1215,388.167]],["content/334",[]],["keywords/334",[]],["title/335",[112,382.885,1214,746.272,1215,520.107]],["content/335",[2,2.149,112,6.91,127,5.04,277,4.353,279,6.791,307,6.951,316,8.089,413,9.529,792,8.508,1106,14.822,1214,13.468,1215,9.387,3216,20.648]],["keywords/335",[]],["title/336",[2,101.77,575,234.618,626,453.632,895,293.241]],["content/336",[]],["keywords/336",[]],["title/337",[20,325.355,1843,607.087,1849,857.735,3217,769.957]],["content/337",[20,6.55,73,5.04,115,5.429,130,10.038,181,6.103,186,6.125,195,1.996,201,12.248,202,10.09,270,4.557,368,5.303,369,7.659,375,10.82,575,5.984,627,6.346,631,8.668,662,14.735,682,5.794,699,10.266,700,9.927,887,13.872,1189,9.497,1643,9.328,1768,11.281,1843,12.222,1849,17.268,1906,18.228,1923,14.354,2793,15.5,3217,17.556,3218,18.228]],["keywords/337",[]],["title/338",[31,295.685,226,257.805,626,530.728]],["content/338",[2,1.488,22,2.147,70,5.753,73,6.724,87,5.941,88,8.595,89,3.082,103,6.175,130,11.508,160,6.704,166,8.508,186,6.048,196,5.541,198,6.533,199,8.425,200,11.606,220,6.068,270,4.473,368,5.205,445,5.952,467,5.799,514,10.473,575,5.299,627,6.504,633,13.044,887,13.698,1020,10.684,1026,7.571,1143,7.18,1189,8.783,1257,10.963,1768,12.656,1843,8.878,1909,12.022,2793,17.389,3219,14.3,3220,14.3]],["keywords/338",[]],["title/339",[2,101.77,354,241.274,355,251.601,895,293.241]],["content/339",[2,1.942,22,1.814,44,12.013,69,5.207,136,7.203,160,8.747,206,7.72,352,5.387,354,4.604,452,13.615,515,9.549,546,7.365,575,4.477,633,12.521,704,7.365,897,7.051,909,10.422,1020,10.256,1021,8.794,1189,7.421,1768,10.693,1843,14.347,3221,13.395]],["keywords/339",[]],["title/340",[2,101.77,22,95.072,895,293.241,1026,517.722]],["content/340",[2,1.526,22,1.922,36,5.639,44,9.438,127,3.578,227,4.714,237,6.359,279,4.822,283,5.501,316,5.743,354,4.878,355,5.087,366,9.438,452,8.638,495,5.408,518,5.701,522,9.32,526,4.161,599,8.536,601,10.376,603,10.376,604,10.183,627,5.03,652,4.878,697,7.454,721,7.228,871,7.407,872,8.638,876,12.727,895,5.928,896,8.336,900,9.208,903,10.973,1020,8.058,1021,6.909,1026,11.842,1163,8.257,1393,7.552,1830,10.153,1984,9.838,1985,10.331,1986,9.102,1987,13.575]],["keywords/340",[]],["title/341",[633,924.895,1843,855.688]],["content/341",[20,6.414,22,2.134,81,12.391,186,4.395,228,3.923,230,6.529,244,8.852,270,4.419,575,4.625,599,10.18,627,4.905,633,12.936,644,5.64,662,14.429,704,5.576,898,15.646,900,14.808,902,10.366,911,11.876,912,10.141,1026,7.479,1158,12.75,1189,7.667,1393,7.277,1768,12.576,1843,11.968,1923,12.411,2793,11.123,3217,15.179,3218,17.85,3222,19.278,3223,14.127,3224,14.127,3225,14.127,3226,14.127,3227,14.127,3228,14.127]],["keywords/341",[]],["title/342",[16,165.308,216,481.298,217,597.308]],["content/342",[]],["keywords/342",[]],["title/343",[282,329.633]],["content/343",[4,6.031,22,1.1,25,3.21,31,4.259,33,9.904,34,8.465,36,6.338,43,5.961,44,14.615,79,5.765,89,3.551,180,5.479,194,7.378,196,7.532,207,4.841,217,8.603,222,1.795,223,2.477,225,10.289,226,3.713,229,4.738,257,9.508,262,9.222,268,4.215,281,2.607,282,2.151,296,4.447,297,4.778,340,2.518,348,6.031,426,5.669,464,2.834,495,7.879,511,7.894,518,6.408,529,6.869,554,7.707,555,9.508,685,11.057,704,4.464,833,9.129,849,7.269,860,6.121,964,9.948,1049,7.85,1348,6.481,1352,7.707,1453,8.986,1614,6.216,1621,6.869,1679,5.193,1716,3.616,1748,8.124,1875,3.808,1885,7.19,3229,11.31,3230,11.31,3231,11.31,3232,16.478,3233,11.31,3234,11.31,3235,10.472,3236,10.472,3237,11.31]],["keywords/343",[]],["title/344",[1023,407.123]],["content/344",[11,4.571,168,3.387,217,8.758,223,4.732,224,1.906,245,14.103,257,14.103,258,3.348,277,3.537,335,3.78,397,3.544,399,3.427,526,4.761,542,9.011,575,4.025,707,5.785,842,5.715,925,7.664,1124,9.22,1126,5.767,1142,5.857,1822,15.533,1973,9.981,2027,8.475,2122,8.27,2123,10.299,2793,13.209,2800,13.615,3235,15.533,3236,15.533,3238,16.776,3239,15.533,3240,16.776,3241,15.533,3242,15.533,3243,15.533,3244,14.103,3245,16.776]],["keywords/344",[]],["title/345",[224,196.887]],["content/345",[16,2.786,22,1.874,79,5.204,80,14.779,89,4.155,127,4.705,145,8.99,222,3.059,224,2.893,228,5.353,230,6.529,283,7.234,284,5.796,704,7.609,801,13.351,1042,7.756,2248,10.951,3246,19.279,3247,19.279]],["keywords/345",[]],["title/346",[3248,1244.143]],["content/346",[]],["keywords/346",[]],["title/347",[2042,532.102]],["content/347",[18,4.273,127,4.667,224,2.665,226,5.286,283,7.175,340,4.256,445,5.855,627,6.457,644,7.633,759,15.055,896,9.861,2042,5.87,3248,16.839,3249,13.473]],["keywords/347",[]],["title/348",[864,626.718]],["content/348",[127,5.04,224,2.346,226,5.537,445,6.322,627,5.254,752,8.089,875,5.761,896,7.695,2211,14.3,3248,18.834]],["keywords/348",[]],["title/349",[2,78.859,224,86.077,226,170.748,279,249.209,445,232.017,3248,543.929]],["content/349",[2,1.709,16,2.373,47,7.428,113,3.865,127,4.008,185,5.733,196,6.362,224,1.865,258,3.277,279,5.4,330,5.544,359,9.16,408,6.997,422,5.055,428,7.887,436,12.29,606,9.583,615,10.194,627,4.178,689,4.615,717,8.193,896,6.119,1708,10.383,1765,9.972,1830,11.372,2211,11.372,2234,12.588,3248,15.297,3250,14.403,3251,14.403,3252,15.204,3253,15.204,3254,16.42,3255,15.204,3256,16.42,3257,16.42,3258,16.42,3259,16.42]],["keywords/349",[]],["title/350",[16,250.43]],["content/350",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3248,13.183]],["keywords/350",[]],["title/351",[282,329.633]],["content/351",[3,2.4,14,6.918,18,5.611,19,4.596,43,3.899,222,2.356,226,4.493,258,2.963,282,3.792,330,5.013,355,5.13,397,3.137,399,3.033,400,6.3,426,7.321,428,8.333,447,5.883,448,5.168,466,8.924,652,6.634,689,4.173,693,3.881,714,5.795,717,9.949,851,5.441,896,7.431,908,5.334,1535,5.774,1716,6.375,1875,6.713,2248,11.326,3248,10.658,3260,14.848,3261,12.051,3262,6.469,3263,7.035]],["keywords/351",[]],["title/352",[1023,407.123]],["content/352",[15,6.99,123,9.494,835,9.75,1380,17.952,2282,16.61,3264,18.95,3265,18.95,3266,20.466,3267,20.466]],["keywords/352",[]],["title/353",[616,351.477,689,387.369]],["content/353",[127,5.374,224,2.501,616,5.614,689,6.187,3248,15.804,3268,22.016]],["keywords/353",[]],["title/354",[270,357.875,652,380.65,908,411.007]],["content/354",[270,6.887,652,7.325,908,7.909,1643,10.431,3248,15.804,3269,22.016]],["keywords/354",[]],["title/355",[546,544.018,2215,812.067]],["content/355",[22,2.441,31,5.533,224,2.432,652,7.123,704,8.45,3248,15.367,3270,19.246]],["keywords/355",[]],["title/356",[3271,1406.653]],["content/356",[]],["keywords/356",[]],["title/357",[2042,532.102]],["content/357",[386,11.171,526,6.43,3271,18.39]],["keywords/357",[]],["title/358",[16,250.43]],["content/358",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3271,14.905]],["keywords/358",[]],["title/359",[282,329.633]],["content/359",[3,2.495,13,5.079,18,5.463,19,4.718,86,7.089,127,3.768,222,2.45,258,3.081,282,4.366,397,3.262,399,3.154,426,7.128,447,6.117,526,4.382,627,5.207,652,7.638,689,4.339,693,4.036,714,6.026,851,5.657,895,4.63,896,7.627,908,7.352,1535,6.004,1716,6.544,1875,6.89,3263,7.315,3271,16.61,3272,12.157,3273,9.697,3274,14.421]],["keywords/359",[]],["title/360",[1023,407.123]],["content/360",[15,4.798,222,3.059,224,2.19,258,3.847,397,4.073,399,3.938,575,4.625,689,5.418,707,6.648,838,8.287,842,6.568,847,7.234,851,7.064,3273,12.108,3275,8.11,3276,19.279,3277,12.76,3278,14.779,3279,10.858,3280,15.647]],["keywords/360",[]],["title/361",[222,218.697,224,156.574]],["content/361",[]],["keywords/361",[]],["title/362",[222,181.529,224,129.964,229,479.274]],["content/362",[]],["keywords/362",[]],["title/363",[224,156.574,279,453.311]],["content/363",[15,5.702,24,2.186,43,4.271,59,5.832,61,6.424,66,1.863,156,5.75,172,7.443,195,1.809,222,1.339,224,1.5,277,1.779,279,4.343,287,6.962,307,4.445,530,4.924,549,8.394,601,3.914,634,5.581,661,4.436,690,5.364,722,5.504,766,5.18,789,7.401,802,7.094,831,4.088,838,11.86,839,7.401,1118,6.316,1150,7.372,1151,9.012,1221,7.156,1622,4.318,1758,5.946,1824,3.52,1910,10.194,1956,4.602,1988,8.511,1989,8.197,2041,3.66,2046,7.375,2100,4.02,2920,5.581,3180,6.469,3244,7.094,3281,6.18,3282,24.281,3283,7.401,3284,6.316,3285,8.438,3286,5.844,3287,7.094,3288,7.813,3289,5.125,3290,7.813,3291,8.438,3292,8.438,3293,10.716,3294,8.438,3295,6.316,3296,8.438,3297,7.813,3298,7.813,3299,7.813,3300,8.438,3301,7.401,3302,8.438,3303,8.197,3304,7.813,3305,5.18,3306,7.401,3307,7.094,3308,6.18,3309,6.644,3310,7.813,3311,7.501,3312,7.813,3313,6.644,3314,8.438]],["keywords/363",[]],["title/364",[224,129.964,699,806.162,700,779.562]],["content/364",[2,1.402,39,3.834,43,1.675,54,3.623,66,1.408,70,6.295,89,1.375,108,3.145,115,2.377,155,2.518,166,3.795,167,3.688,195,2.144,222,1.012,224,2.12,226,1.437,229,4.416,262,2.754,276,4.28,277,1.345,279,2.098,287,2.73,352,1.842,367,2.419,370,2.858,387,3.09,400,2.706,518,2.48,541,8.114,550,2.99,616,2.688,652,2.122,691,5.022,697,3.243,698,3.308,699,9.493,700,9.18,704,2.518,791,3.758,795,5.177,838,11.711,894,3.916,1042,2.566,1121,3.039,1150,7.677,1616,3.758,1697,5.595,1775,5.662,1988,4.492,2038,4.346,2132,3.33,2823,4.218,2933,4.218,3121,4.774,3271,5.177,3282,24.522,3303,3.96,3311,3.623,3315,5.906,3316,6.378,3317,22.618,3318,6.378,3319,6.378,3320,5.022,3321,5.906,3322,8.081,3323,10.934,3324,5.022,3325,5.906,3326,5.022,3327,5.906,3328,5.022,3329,6.378,3330,7.567,3331,5.906,3332,7.567,3333,4.218,3334,5.595,3335,5.177,3336,5.906,3337,5.906,3338,5.177,3339,6.378,3340,5.906,3341,5.595,3342,6.378,3343,5.906,3344,5.595,3345,5.022,3346,6.378,3347,4.89,3348,5.906,3349,5.906,3350,5.177,3351,5.906,3352,4.774,3353,5.906,3354,6.378,3355,4.671,3356,6.378,3357,5.022,3358,6.378,3359,10.206,3360,6.378,3361,4.774,3362,5.906,3363,5.022,3364,6.378,3365,5.022,3366,6.378,3367,4.346,3368,5.906,3369,5.906,3370,8.081,3371,6.378,3372,5.022,3373,5.906,3374,5.906,3375,5.022,3376,5.906,3377,5.022,3378,5.906,3379,5.595,3380,5.022,3381,5.906,3382,4.89,3383,5.906,3384,5.022,3385,5.906,3386,5.022,3387,5.906,3388,10.206,3389,5.595,3390,5.906,3391,5.906]],["keywords/364",[]],["title/365",[3281,1269.296]],["content/365",[]],["keywords/365",[]],["title/366",[2042,532.102]],["content/366",[6,5.22,16,1.634,25,3.21,29,7.022,30,3.616,31,2.923,49,2.91,65,5.142,66,5.232,73,5.7,89,3.551,92,5.043,113,2.662,127,2.761,168,4.312,186,3.519,195,1.55,196,4.382,208,6.818,220,4.799,222,1.795,224,2.208,226,2.549,251,4.916,274,5.946,316,4.431,335,3.713,340,3.668,347,5.939,352,4.758,368,5.998,374,4.186,401,4.55,448,3.936,516,6.317,518,4.398,527,8.545,568,6.293,579,5.142,616,2.884,646,5.247,651,4.568,693,2.956,731,6.818,771,4.862,779,6.869,864,7.029,902,4.973,1063,8.918,1088,7.378,1214,7.378,1215,5.142,1217,5.092,1220,5.067,1344,6.869,1702,10.23,1748,5.576,1864,11.057,2020,4.928,2028,8.671,2041,4.905,2080,7.378,2174,7.281,2462,7.104,2562,11.042,2563,8.124,2572,8.119,2573,7.19,3281,12.068,3392,9.921,3393,11.31,3394,9.179,3395,6.37,3396,8.119,3397,9.179]],["keywords/366",[]],["title/367",[864,626.718]],["content/367",[11,4.851,13,2.787,31,3.256,61,4.398,65,5.726,66,5.227,69,3.515,92,9.206,127,4.345,168,4.961,185,6.215,220,5.345,222,1.999,226,4.012,246,7.036,296,4.953,338,6.577,367,4.777,374,4.662,432,5.643,439,9.425,445,3.857,447,4.991,568,6.799,575,4.271,641,5.513,651,9.064,693,3.293,731,5.212,752,4.935,779,7.65,873,5.936,902,5.538,912,9.042,1074,6.285,1126,4.331,1142,4.398,1150,4.384,1163,7.094,1189,8.211,1220,5.643,2042,3.867,2094,5.463,2462,7.911,2518,13.776,2561,13.038,2562,7.155,2563,8.777,2564,10.113,2565,8.331,2584,11.663,3053,7.82,3281,9.225,3398,12.596,3399,12.596,3400,11.663]],["keywords/367",[]],["title/368",[401,460.294,546,451.561,2215,674.055]],["content/368",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,3281,11.941,3401,11.11]],["keywords/368",[]],["title/369",[16,250.43]],["content/369",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2041,7.965]],["keywords/369",[]],["title/370",[282,329.633]],["content/370",[8,2.788,13,2.72,18,4.961,19,2.835,20,5.103,22,0.75,30,3.932,52,3.127,61,2.692,65,3.505,67,3.673,73,2.667,108,3.801,109,4.5,110,3.615,112,6.399,113,5.225,168,4.114,173,2.893,222,1.223,224,0.876,226,1.738,230,2.611,258,3.061,281,1.777,282,2.339,295,6.42,307,2.596,335,5.002,340,1.716,352,2.226,399,1.575,400,3.272,401,7.692,404,2.627,426,7.219,448,4.28,461,6.557,469,2.844,505,3.92,551,3.127,568,5.857,575,4.587,616,1.966,622,3.998,647,4.583,651,4.967,654,3.998,658,3.09,682,3.067,689,3.456,693,4.009,714,3.009,759,6.071,771,6.593,808,3.286,842,4.189,851,2.825,870,8.021,875,2.151,895,2.312,908,2.77,976,3.315,1023,1.811,1049,3.673,1110,4.238,1126,5.273,1150,2.684,1215,5.59,1217,5.536,1218,5.535,1220,9.945,1221,5.964,1222,4.142,1230,6.376,1535,2.998,1624,6.465,1716,3.932,1875,4.14,2041,5.333,2469,6.071,2475,6.763,2509,5.254,2562,6.985,2563,6.062,3124,4.787,3402,7.14,3403,4.634,3404,4.343,3405,4.343,3406,5.03,3407,5.647,3408,6.071,3409,6.071,3410,5.1,3411,4.38,3412,8.021,3413,6.071,3414,6.071,3415,5.535,3416,5.174,3417,6.071,3418,7.14,3419,7.14,3420,7.14,3421,7.14,3422,7.14,3423,5.03,3424,7.711]],["keywords/370",[]],["title/371",[1023,407.123]],["content/371",[13,4.112,49,3.446,89,4.005,112,6.22,127,3.269,136,5.171,139,6.15,168,2.704,222,3.658,224,1.522,254,10.649,258,2.673,277,2.824,284,4.027,335,4.188,357,6.279,397,2.83,399,3.797,400,5.683,575,3.214,578,7.195,622,6.946,689,3.764,707,4.619,842,4.563,847,5.026,849,5.009,851,4.908,929,6.854,995,7.969,1126,4.605,1215,6.089,1222,7.195,1226,10.871,1228,10.546,1230,9.637,1240,10.269,1241,12.291,1242,11.749,1243,11.749,1244,11.749,1245,11.749,1246,11.749,1247,11.749,1248,11.749,1249,11.749,1250,11.749,1251,11.749,1252,11.749,1253,11.749,1254,11.749,2509,9.127,3275,5.635,3405,7.544,3425,9.276,3426,13.394,3427,13.394,3428,8.988,3429,13.394,3430,6.643,3431,9.127,3432,6.416]],["keywords/371",[]],["title/372",[3284,1297.249]],["content/372",[]],["keywords/372",[]],["title/373",[43,224.2,54,485.021,195,116.983,287,365.434,3433,672.297]],["content/373",[16,1.537,18,2.378,22,1.824,43,6.088,54,13.17,69,2.968,89,2.292,107,5.554,109,6.208,123,9.621,195,3.601,220,4.513,221,5.341,222,2.499,224,2.131,229,4.456,263,3.266,281,2.452,284,3.198,287,8.876,290,4.573,291,2.919,330,7.476,334,4.383,352,3.071,394,4.766,396,4.419,401,6.338,428,5.831,448,5.483,495,3.924,511,5.096,520,6.329,536,6.762,546,4.199,550,4.987,579,4.836,652,7.983,667,7.248,674,8.943,689,5.829,758,7.035,780,7.636,792,4.383,841,8.34,927,8.634,1004,8.634,1121,5.068,1396,10.141,2020,4.635,3102,7.367,3284,11.791,3333,10.418,3433,19.4,3434,9.331,3435,14.586,3436,14.586,3437,10.638]],["keywords/373",[]],["title/374",[195,156.745,397,241.681,616,291.743]],["content/374",[2,2.158,3,3.352,16,2.276,22,2.016,42,7.464,67,9.88,89,3.395,181,6.599,195,2.841,222,4.062,224,2.356,226,3.55,230,5.335,385,5.166,445,6.35,579,7.162,611,10.419,616,5.289,652,5.241,812,7.058,816,8.727,2635,13.244,3284,17.354,3434,18.191,3438,15.753,3439,15.753,3440,10.571,3441,18.889,3442,17.436]],["keywords/374",[]],["title/375",[2042,532.102]],["content/375",[13,4.672,14,5.618,16,2.34,22,2.053,30,5.177,35,10.709,43,4.252,162,6.699,195,2.893,224,2.399,226,3.649,287,6.93,296,6.367,340,4.7,352,6.096,526,4.595,627,5.373,652,5.387,769,13.141,810,7.289,860,8.763,1023,3.803,1142,5.653,1488,11.343,1567,12.413,1755,15.328,1916,8.34,2060,12.119,3284,15.805,3433,12.749,3434,14.202,3443,14.202,3444,14.202]],["keywords/375",[]],["title/376",[16,250.43]],["content/376",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3284,13.746]],["keywords/376",[]],["title/377",[282,329.633]],["content/377",[3,2.064,13,3.977,14,4.431,18,4.649,19,2.944,20,2.69,22,1.748,30,4.083,33,4.86,35,5.348,41,9.706,43,4.72,44,8.22,54,10.21,108,3.986,113,3.006,123,3.751,195,3.093,213,4.964,219,3.658,222,1.283,226,3.566,230,2.738,251,3.81,258,1.614,282,2.429,287,5.465,296,3.18,330,5.343,340,1.8,348,4.312,399,2.609,401,9.349,426,7.077,428,6.653,467,3.279,469,2.983,511,3.873,554,5.51,575,1.94,643,5.205,652,6.921,679,5.924,681,6.667,689,4.447,761,4.516,769,12.843,771,5.489,808,3.446,810,3.64,833,9.958,860,4.376,1142,4.458,1155,6.333,1396,8.22,1443,3.588,1488,8.5,1567,6.199,1593,5.51,1679,7.266,1716,4.083,1755,10.322,1875,4.299,2020,7.831,2060,6.052,2074,6.052,2102,7.092,3262,3.523,3284,13.453,3333,5.348,3411,4.593,3433,6.367,3435,7.487,3436,7.487,3441,13.78,3444,11.2,3445,6.798,3446,8.086,3447,8.086,3448,8.086,3449,8.086,3450,8.086,3451,7.092,3452,8.086,3453,7.487,3454,7.487,3455,8.086,3456,6.199,3457,6.199]],["keywords/377",[]],["title/378",[1023,407.123]],["content/378",[113,4.256,222,2.869,224,2.054,258,3.608,397,3.819,399,3.693,458,7.986,483,13.241,707,6.235,769,14.674,771,7.772,842,6.16,847,6.784,2125,10.757,3262,7.877,3275,7.606,3277,12.263,3425,12.521,3433,14.236,3441,13.86,3444,15.858,3453,16.741,3454,16.741,3456,13.86,3458,18.08,3459,18.08,3460,18.08,3461,18.08]],["keywords/378",[]],["title/379",[550,812.464]],["content/379",[2,1.634,30,3.386,31,2.737,43,4.913,54,10.628,67,7.479,79,5.05,89,3.383,93,7.462,97,4.722,136,4.088,161,4.118,195,3.171,205,8.77,222,3.673,223,4.532,224,2.125,231,4.228,232,6.364,258,3.734,282,2.014,287,8.007,291,5.678,307,3.565,316,4.148,323,6.574,340,2.357,345,6.809,394,8.382,396,6.522,445,3.242,448,3.686,469,3.906,492,7.601,495,3.906,518,4.118,547,5.455,551,4.294,616,5.277,652,3.523,678,6.501,689,5.816,772,8.594,792,4.363,807,6.651,814,6.732,823,4.677,841,5.606,921,4.532,993,5.731,1014,6.55,1017,7.755,1032,7.003,1042,4.26,1049,5.045,1154,6.732,1285,9.341,1467,7.755,1535,6.105,1709,5.688,1745,12.555,1755,12.204,3102,7.334,3284,7.926,3433,8.338,3441,14.343,3442,13.199]],["keywords/379",[]],["title/380",[70,554.539,1988,587.339]],["content/380",[]],["keywords/380",[]],["title/381",[195,156.745,397,241.681,616,291.743]],["content/381",[2,1.516,3,2.355,7,5.885,8,5.268,31,3.765,49,3.749,70,10.035,127,3.556,195,1.996,274,12.554,397,4.159,399,2.976,469,5.374,616,3.715,689,4.095,692,14.252,1024,16.057,1880,13.49,2171,12.248,3462,14.569,3463,23.095,3464,22.297,3465,22.297,3466,22.297,3467,22.297,3468,14.569,3469,19.686,3470,14.569]],["keywords/381",[]],["title/382",[2042,532.102]],["content/382",[2,2.13,16,2.957,22,2.377,224,2.325,329,7.959,347,7.376,354,5.05,355,5.266,599,8.837,895,6.137,1026,10.835,1988,8.721,3471,9.972]],["keywords/382",[]],["title/383",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,1988,290.223,3471,331.852]],["content/383",[22,1.955,70,8.092,195,2.755,222,3.191,340,4.477,352,6.984,526,6.865,575,4.825,627,5.117,1020,11.054,1088,13.119,1133,7.225,1988,10.308]],["keywords/383",[]],["title/384",[22,95.072,347,352.446,895,293.241,1026,517.722]],["content/384",[14,6.13,16,2.553,22,1.718,70,7.108,220,7.496,224,2.007,296,6.947,347,6.368,354,4.359,355,4.546,368,6.431,490,4.93,495,6.517,652,5.878,654,9.162,896,8.322,1133,8.023,1142,6.168,1945,10.124,1988,7.529,2094,10.621,2211,12.236,2633,16.715,3471,8.609,3472,16.359,3473,17.668,3474,17.668]],["keywords/384",[]],["title/385",[185,341.406,195,133.976,2122,482.086,3221,701.955]],["content/385",[8,4.958,14,4.757,16,1.981,25,3.891,30,4.384,49,4.859,70,5.516,155,5.411,179,7.158,185,4.787,193,10.041,195,2.96,222,3.428,224,1.557,228,3.807,258,3.769,281,3.16,294,8.611,404,4.671,448,6.574,456,11.526,469,5.057,490,3.825,493,7.311,496,12.695,518,5.331,527,7.11,579,8.586,627,3.488,652,4.562,810,6.172,1050,5.744,1087,10.795,1088,8.943,1837,6.841,1916,7.062,1988,10.406,2122,11.478,2123,8.417,3038,12.026,3221,17.529,3333,9.067,3440,9.2,3475,12.695,3476,13.71,3477,13.71,3478,13.71,3479,13.71,3480,21.606]],["keywords/385",[]],["title/386",[16,250.43]],["content/386",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,70,7.331,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1988,7.765]],["keywords/386",[]],["title/387",[282,329.633]],["content/387",[2,0.932,3,2.236,14,6.593,15,4.206,18,5.057,19,3.895,20,2.98,22,0.871,30,4.423,33,8.313,44,5.767,52,5.609,66,1.978,70,7.645,86,4.113,89,1.93,145,4.177,168,1.809,195,2.315,206,5.723,219,4.052,220,3.801,222,1.421,224,1.018,226,2.019,237,3.885,241,3.722,258,1.788,274,10.797,282,3.614,283,3.361,329,5.379,330,4.67,347,6.09,352,2.586,353,5.499,354,2.21,355,2.305,397,1.892,399,1.83,422,2.757,426,6.815,427,3.25,428,5.12,575,2.149,601,6.417,650,5.695,654,7.173,689,2.518,693,2.341,714,3.496,744,6.43,761,5.003,846,4.315,851,3.282,860,4.848,872,5.278,875,2.499,895,2.686,896,5.155,900,5.626,908,6.07,1133,3.218,1142,4.829,1261,6.312,1535,3.483,1614,4.923,1621,5.44,1716,4.423,1875,4.657,1945,7.927,1974,4.416,1988,8.097,2094,8.242,2122,8.33,2155,10.13,2521,11.629,2522,12.133,3221,12.129,3262,3.903,3263,4.244,3471,4.365,3481,5.695,3482,6.011,3483,7.053,3484,4.526,3485,6.867,3486,6.867,3487,7.27,3488,8.958,3489,8.958,3490,8.294,3491,8.294,3492,5.626,3493,5.561,3494,6.312]],["keywords/387",[]],["title/388",[1023,407.123]],["content/388",[1,3.623,15,4.002,86,7.384,123,7.459,222,2.551,224,1.827,258,3.209,347,5.796,397,3.397,399,3.285,689,4.519,707,5.545,838,6.912,842,5.478,847,6.034,851,5.892,895,4.822,908,5.777,1023,3.777,1133,5.777,1614,8.838,1988,6.852,2122,7.927,2125,9.567,2155,11.776,3221,11.543,3262,7.006,3275,6.765,3277,8.702,3279,9.056,3323,13.05,3475,14.889,3483,12.661,3490,14.889,3491,14.889,3495,9.872,3496,10.635,3497,16.08,3498,16.08,3499,16.08,3500,9.872,3501,11.136,3502,16.08,3503,12.661,3504,16.08]],["keywords/388",[]],["title/389",[1988,587.339,3180,1056.653]],["content/389",[]],["keywords/389",[]],["title/390",[2042,532.102]],["content/390",[4,7.579,13,4.283,22,1.882,25,4.033,42,6.734,79,3.837,89,4.172,106,5.173,127,3.469,130,6.398,195,2.652,220,6.03,222,2.255,224,1.615,228,3.947,244,6.526,270,4.446,281,4.462,340,3.164,343,5.279,352,4.103,448,4.947,575,4.645,627,5.602,644,5.674,675,9.035,689,7.171,731,8.009,1133,5.106,1142,4.962,1837,7.092,1988,9.381,2023,11.405,2027,11.122,2095,9.843,2122,7.007,3180,16.877,3505,14.213,3506,14.213,3507,14.213,3508,13.16,3509,14.213,3510,14.213]],["keywords/390",[]],["title/391",[16,250.43]],["content/391",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1988,7.765,3180,13.969]],["keywords/391",[]],["title/392",[282,329.633]],["content/392",[13,4.595,14,4.419,18,5.04,19,4.136,22,2.019,113,4.223,167,7.363,222,2.021,258,4.5,282,3.412,321,8.594,329,4.952,399,2.601,426,6.932,457,5.705,490,3.553,627,5.737,652,4.237,689,5.837,693,5.429,966,8.307,1036,9.326,1133,6.445,1142,6.263,1716,5.736,1875,6.039,2027,13.618,2122,10.24,2123,7.818,3180,17.286,3263,6.034,3511,11.17,3512,14.56,3513,9.531,3514,8.095,3515,10.335,3516,10.027,3517,10.027]],["keywords/392",[]],["title/393",[1023,407.123]],["content/393",[13,3.485,49,4.053,89,4.469,127,3.845,222,3.909,224,1.79,254,11.569,258,3.144,284,4.736,357,7.385,397,3.328,399,4.237,578,8.462,627,5.277,689,5.829,707,5.432,838,6.772,842,5.367,847,5.911,849,5.891,995,9.373,1142,5.5,2027,10.478,2122,7.766,2123,9.671,3180,12.077,3275,6.627,3288,14.586,3432,7.546,3512,16.832,3513,11.791,3514,10.014,3515,12.785,3516,12.404,3517,12.404,3518,10.419,3519,15.753]],["keywords/393",[]],["title/394",[1988,587.339,3286,954.559]],["content/394",[]],["keywords/394",[]],["title/395",[2042,532.102]],["content/395",[13,4.015,22,2.038,25,3.674,69,3.613,79,3.495,88,10.908,89,3.911,127,3.16,130,5.829,168,4.586,185,4.52,224,1.471,228,5.04,244,5.945,270,4.05,281,4.184,340,2.882,352,3.738,367,6.882,410,7.781,448,4.506,575,4.355,627,4.618,644,5.169,675,11.538,689,7.155,707,4.465,731,7.509,897,4.892,1133,4.651,1142,4.52,1154,8.231,1267,5.493,1471,8.967,1837,6.46,1988,7.734,2023,10.693,2027,10.588,2095,8.967,3286,17.17,3508,11.988,3520,12.947,3521,12.947,3522,12.947,3523,12.947,3524,12.947,3525,12.947,3526,12.947,3527,12.947,3528,12.947]],["keywords/395",[]],["title/396",[16,250.43]],["content/396",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3286,12.719]],["keywords/396",[]],["title/397",[282,329.633]],["content/397",[13,4.578,14,5.447,18,4.625,19,3.619,22,1.526,49,2.725,52,7.587,60,5.914,113,4.404,167,6.123,168,5.163,186,3.295,222,3.506,251,3.159,258,3.734,269,7.462,282,2.986,329,4.118,330,3.575,348,5.647,353,6.501,368,3.854,392,6.651,399,2.163,401,8.891,426,6.444,457,4.744,490,2.955,550,7.36,551,6.366,627,5.265,633,7.106,652,3.523,693,2.768,778,8.118,783,14.537,966,6.907,1036,7.755,1049,5.045,1142,5.481,1155,5.252,1175,6.364,1267,4.493,1716,5.02,1875,5.285,2027,12.104,2120,6.907,2121,6.574,2122,9.224,2265,13.702,3286,12.957,3511,9.288,3514,6.732,3529,10.589,3530,10.873,3531,9.288,3532,10.589,3533,6.574,3534,10.589,3535,10.589,3536,7.462]],["keywords/397",[]],["title/398",[1023,407.123]],["content/398",[13,3.485,49,4.053,89,4.469,127,3.845,168,4.187,222,3.909,224,1.79,254,11.569,258,3.144,284,4.736,357,7.385,397,3.328,399,4.237,578,8.462,627,5.277,707,5.432,838,6.772,842,5.367,847,5.911,849,5.891,995,9.373,1142,5.5,2027,10.478,2122,7.766,2123,9.671,3275,6.627,3286,10.91,3287,13.244,3430,7.813,3432,7.546,3512,16.832,3513,11.791,3514,10.014,3515,12.785,3516,12.404,3517,12.404,3518,10.419]],["keywords/398",[]],["title/399",[1988,587.339,3537,954.559]],["content/399",[]],["keywords/399",[]],["title/400",[2042,532.102]],["content/400",[16,2.931,22,1.972,224,2.305,340,4.516,352,5.857,363,10.45,627,5.162,693,5.303,731,8.394,902,8.92,1133,7.288,1988,8.645,2023,11.953,3537,14.05,3538,20.288]],["keywords/400",[]],["title/401",[16,250.43]],["content/401",[1,5.518,2,2.324,8,6.389,16,3.227,22,1.718,24,4.577,89,3.807,163,5.878,207,7.562,224,2.923,228,4.906,277,4.708,281,4.073,354,4.359,355,4.546,372,5.453,464,4.426,490,4.93,804,7.28,875,4.93,1023,4.15,1988,7.529,3537,15.466]],["keywords/401",[]],["title/402",[282,329.633]],["content/402",[11,5.433,18,5.379,19,3.924,22,1.15,31,3.057,52,6.902,112,3.958,113,5.134,168,3.437,173,4.438,195,1.62,222,2.701,230,4.006,258,2.36,263,3.631,282,3.792,312,5.062,316,4.634,335,5.423,363,6.093,399,2.416,400,5.018,426,7.537,427,4.291,448,4.117,464,2.963,465,3.924,551,4.796,575,5.544,647,4.408,693,3.092,714,4.616,731,4.894,767,9.282,849,4.423,910,8.334,975,7.937,1050,7.13,1126,6.855,1132,8.662,1210,9.447,1215,5.377,1716,5.442,1875,5.73,2851,8.853,3395,6.662,3533,7.343,3537,8.191,3539,9.944,3540,10.952,3541,17.021,3542,11.828,3543,11.828,3544,10.375,3545,10.952]],["keywords/402",[]],["title/403",[1023,407.123]],["content/403",[11,4.742,168,3.514,222,2.761,224,1.977,258,3.473,335,3.922,397,3.676,399,3.555,575,5.307,647,6.486,707,6.002,838,7.481,842,5.929,847,6.53,1126,5.983,1210,8.246,2123,10.684,3275,7.321,3280,14.125,3395,9.802,3512,14.125,3537,12.053,3540,16.114,3544,15.265,3546,16.114,3547,17.403,3548,17.403,3549,17.403,3550,17.403,3551,17.403,3552,17.403,3553,13.342,3554,17.403]],["keywords/403",[]],["title/404",[1988,587.339,3555,1118.642]],["content/404",[]],["keywords/404",[]],["title/405",[2042,532.102]],["content/405",[627,5.447,1142,7.474,2023,14.791,2027,10.816,3555,17.375,3556,25.104,3557,17.998]],["keywords/405",[]],["title/406",[864,626.718]],["content/406",[13,3.416,18,3.451,22,1.501,66,3.409,127,3.768,186,6.367,205,7.238,224,1.754,226,3.479,295,8.061,297,8.646,340,3.437,356,11.625,426,4.502,432,6.917,445,4.728,455,8.117,458,6.82,464,3.868,465,5.122,575,3.704,598,9.697,675,9.815,704,6.094,731,8.467,752,6.048,792,6.362,818,7.276,906,9.169,1988,6.579,2023,14.402,2027,11.598,3395,8.696,3555,16.61,3558,15.439,3559,15.439,3560,20.466,3561,15.439,3562,15.439]],["keywords/406",[]],["title/407",[16,250.43]],["content/407",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3563,18.365]],["keywords/407",[]],["title/408",[282,329.633]],["content/408",[3,2.036,13,4.965,14,6.177,18,5.291,19,4.104,22,1.731,186,5.539,222,1.999,258,2.514,282,3.386,356,12.747,397,2.661,399,2.573,426,7.166,447,4.991,627,4.53,689,3.54,693,3.293,714,4.916,761,9.943,851,4.616,902,7.827,906,7.976,908,4.525,1050,7.458,1142,6.215,1535,4.898,1679,5.784,1716,5.692,1875,5.993,1988,5.368,2023,13.221,2027,12.415,2122,10.179,3263,5.968,3555,18.212,3557,18.865,3564,12.596,3565,11.663,3566,11.049,3567,12.596]],["keywords/408",[]],["title/409",[1023,407.123]],["content/409",[15,7.197,925,8.197,929,9.181,930,9.567,1363,10.374,1616,10.57,2282,14.56,3568,17.94,3569,24.683,3570,17.94,3571,17.94,3572,17.94,3573,17.94]],["keywords/409",[]],["title/410",[546,544.018,2215,812.067]],["content/410",[5,15.265,33,13.295,36,6.694,43,5.808,60,9.72,67,8.291,110,8.158,119,10.063,127,4.248,186,5.415,226,3.922,312,7.448,356,13.813,369,9.149,392,13.893,504,8.737,546,6.869,551,7.057,791,10.254,964,8.906,1198,12.263,1261,12.263,1453,9.491,1806,15.265,1928,12.745,2521,14.631,3574,12.493,3575,17.403,3576,17.403]],["keywords/410",[]],["title/411",[195,156.745,1551,767.708,3035,1003.508]],["content/411",[30,5.966,36,7.177,40,11.862,186,7.19,356,14.904,367,8.763,413,8.612,504,9.368,509,10.994,672,12.172,906,10.353,964,9.549,1159,13.149,1442,10.422,1538,12.013,3035,16.367,3555,15.144,3557,15.687,3577,18.66]],["keywords/411",[]],["title/412",[831,667.74,1988,587.339]],["content/412",[]],["keywords/412",[]],["title/413",[2042,532.102]],["content/413",[20,5.277,22,1.542,62,10.221,106,5.773,115,5.911,130,9.378,155,6.26,186,4.935,195,2.173,222,2.517,224,1.802,226,3.574,263,4.869,281,3.656,312,6.788,340,3.53,352,4.579,397,3.35,404,5.404,445,4.856,575,4.998,627,6.286,675,13.243,731,6.562,752,6.213,792,6.535,831,10.092,875,4.425,1196,9.089,1313,10.083,1874,12.488,2020,6.91,2023,12.274,2027,8.013,3031,13.334,3578,11.615]],["keywords/413",[]],["title/414",[62,473.349,651,462.098,864,413.694]],["content/414",[1,4.012,15,6.941,22,1.225,36,4.845,62,10.167,66,2.781,115,4.694,130,8.014,181,5.277,186,6.424,226,2.838,231,5.029,374,4.662,385,4.131,627,4.53,651,7.191,675,15.622,677,5.617,833,6.978,872,7.422,875,3.515,1019,8.724,1113,6.285,1234,8.583,1285,7.495,1388,10.59,1551,8.453,1809,7.911,1996,11.049,1997,11.049,1998,11.049,1999,11.049,2001,15.615,2002,15.615,2003,14.967,2007,14.967,2008,11.049,2011,14.967,2014,11.049,2035,11.049,3031,14.967,3579,10.223,3580,12.596,3581,12.596,3582,16.484,3583,11.663,3584,11.663]],["keywords/414",[]],["title/415",[526,277.509,575,234.618,627,248.809,864,353.599]],["content/415",[1,3.753,2,1.195,13,4.758,15,6.849,22,1.619,25,3.257,62,6.891,66,3.677,130,7.498,244,5.27,281,2.646,297,4.849,340,3.707,352,4.809,360,5.142,385,3.764,526,3.257,552,5.912,575,5.896,627,6.528,644,4.582,675,15.142,677,5.118,875,3.202,1133,4.123,1142,5.815,1189,4.565,1388,9.649,1539,8.406,1809,7.209,1874,9.037,1996,10.067,1997,10.067,1998,10.067,1999,10.067,2001,14.609,2002,14.609,2007,14.002,2008,10.067,2011,14.002,2014,10.067,2023,12.671,2027,9.904,2095,7.949,3579,9.315,3583,10.627,3584,10.627,3585,11.478,3586,11.478]],["keywords/415",[]],["title/416",[16,250.43]],["content/416",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,831,8.897,875,5.124,1023,4.314]],["keywords/416",[]],["title/417",[282,329.633]],["content/417",[6,5.169,13,4.511,14,2.383,16,1.618,18,4.321,19,3.772,20,6.432,22,1.879,23,6.732,24,4.238,30,3.581,31,3.666,43,1.803,60,9.139,62,9.356,71,7.096,73,2.376,106,2.5,108,3.386,113,3.339,115,4.174,120,5.018,130,8.703,139,3.154,155,2.711,167,3.971,186,4.413,195,1.535,198,3.138,222,2.596,229,2.877,230,5.541,231,2.742,238,7.858,258,2.831,270,2.148,281,1.583,282,2.13,288,3.562,317,4.757,321,5.366,329,4.356,334,2.83,340,1.529,360,3.077,368,4.077,377,3.515,399,1.403,426,6.595,427,5.146,455,3.611,457,3.077,490,3.125,494,7.355,550,3.22,575,1.648,609,5.03,615,6.954,627,2.85,651,4.524,652,2.285,660,3.22,693,3.707,714,4.372,717,3.427,771,2.952,808,2.927,818,3.237,831,8.732,835,5.336,875,1.916,966,4.48,1007,3.586,1036,5.03,1076,4.757,1133,4.024,1142,2.398,1196,3.936,1267,2.914,1281,4.542,1412,6.877,1435,5.774,1679,3.154,1709,6.017,1716,3.581,1875,3.771,1888,4.84,2027,11.111,2122,6.992,2123,6.877,2181,4.757,2487,4.84,2851,10.616,2918,5.774,3031,9.417,3034,6.732,3263,3.254,3445,5.774,3514,4.366,3516,8.819,3517,8.819,3518,4.542,3531,6.024,3587,5.574,3588,5.574,3589,5.408,3590,5.408,3591,5.574,3592,5.574,3593,5.574,3594,5.774,3595,5.574,3596,5.574,3597,5.574,3598,5.574,3599,5.574,3600,5.774,3601,6.359]],["keywords/417",[]],["title/418",[1023,407.123]],["content/418",[14,5.055,19,3.358,23,8.756,62,8.145,89,4.242,98,9.045,105,9.262,130,6.559,155,5.75,220,6.182,222,3.538,224,1.655,254,9.823,258,2.907,284,4.38,345,6.319,397,3.078,399,4.022,427,5.285,578,7.826,689,4.095,707,5.024,831,7.058,838,6.263,839,12.779,842,6.707,847,5.467,849,5.448,1143,7.315,1404,12.779,1614,8.007,1798,9.262,1800,7.826,2015,13.49,2105,8.944,2108,11.471,2122,7.182,2123,8.944,2510,8.205,3034,8.756,3275,6.129,3432,6.979,3516,11.471,3517,11.471,3602,11.824,3603,11.471,3604,11.824,3605,11.824,3606,11.824,3607,11.824,3608,11.824,3609,12.248,3610,13.49]],["keywords/418",[]],["title/419",[59,377.154,61,298.102,195,116.983,771,367.042,1412,524.187]],["content/419",[1,1.552,2,1.479,3,1.113,6,3.179,11,1.877,16,2.95,19,5.075,22,0.67,23,9.851,24,5.703,30,6.19,31,1.78,43,1.809,49,2.889,59,3.043,60,9.155,61,2.405,62,4.646,67,5.349,70,2.771,87,4.665,98,4.277,105,4.379,106,2.507,111,8.223,130,3.101,139,3.163,155,2.719,195,2.797,196,2.669,207,2.948,222,2.601,224,1.615,226,1.552,230,3.802,231,4.483,238,6.22,250,3.847,251,2.055,258,2.241,263,5.032,272,3.525,275,6.893,277,1.452,282,2.135,288,3.572,296,2.709,307,2.319,312,2.948,318,4.854,321,3.3,332,4.327,340,2.499,368,5.966,380,4.14,399,1.407,404,3.825,427,5.156,434,3.458,440,4.35,448,6.738,464,3.561,465,3.725,469,4.142,490,4.573,503,4.327,550,3.229,551,2.793,579,3.132,607,3.072,615,4.277,616,3.624,642,3.647,678,4.229,736,3.647,814,4.379,823,3.043,829,3.101,831,5.44,849,2.576,920,3.621,926,3.572,957,4.14,976,6.11,1021,3.246,1023,1.618,1044,3.913,1303,4.854,1412,6.893,1637,4.379,1683,5.156,1684,4.059,1731,6.615,1800,9.697,1876,4.277,1885,4.379,2025,3.947,2055,4.14,2081,4.14,2105,10.063,2422,6.893,2510,9.232,3034,10.849,3122,4.945,3128,5.156,3152,4.945,3411,3.913,3611,5.591,3612,5.424,3613,5.791,3614,5.424,3615,5.424,3616,5.424,3617,5.424,3618,5.424,3619,5.424,3620,5.424,3621,5.424,3622,5.424,3623,5.424,3624,5.424,3625,5.424,3626,7.052,3627,5.424,3628,5.424,3629,8.841,3630,5.424,3631,5.424,3632,5.424,3633,5.424,3634,5.424,3635,5.424,3636,5.424,3637,5.424]],["keywords/419",[]],["title/420",[3320,1364.669]],["content/420",[]],["keywords/420",[]],["title/421",[195,156.745,397,241.681,616,291.743]],["content/421",[2,2.006,3,3.116,7,7.787,8,8.526,31,4.983,49,4.96,127,4.705,195,2.641,386,9.504,397,4.981,399,3.938,452,11.358,469,7.112,575,4.625,616,4.916,652,6.414,3320,15.18,3638,19.279,3639,19.279]],["keywords/421",[]],["title/422",[2042,532.102]],["content/422",[13,5.645,447,8.723,652,7.325,1142,7.686,3320,17.335]],["keywords/422",[]],["title/423",[16,250.43]],["content/423",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3320,14.46]],["keywords/423",[]],["title/424",[282,329.633]],["content/424",[3,2.369,13,5.297,18,5.587,19,4.557,36,5.639,43,3.85,123,6.801,195,2.009,222,2.326,258,2.926,282,3.76,330,4.95,397,3.097,399,2.995,426,7.289,427,5.319,428,8.279,447,5.809,568,7.55,652,6.578,689,4.12,693,3.832,714,5.722,851,5.372,908,5.267,1142,6.902,1535,5.701,1716,6.321,1803,7.707,1875,6.655,3262,6.387,3263,6.947,3272,11.544,3320,17.612,3566,12.86,3640,9.99,3641,8.122]],["keywords/424",[]],["title/425",[1023,407.123]],["content/425",[208,6.346,222,2.434,224,1.742,258,3.061,397,5.361,399,3.133,400,9.708,689,7.132,707,5.289,838,6.593,842,5.225,847,9.523,851,9.299,1603,9.633,2125,9.125,2986,11.758,3262,6.682,3275,6.452,3277,11.027,3278,11.758,3279,11.476,3321,14.202,3566,13.453,3642,13.453,3643,15.338,3644,15.338,3645,14.202,3646,12.894,3647,15.338,3648,15.338,3649,15.338,3650,15.338]],["keywords/425",[]],["title/426",[156,939.177,766,846.169]],["content/426",[]],["keywords/426",[]],["title/427",[19,263.73,195,156.745,616,291.743]],["content/427",[2,2.188,3,2.599,19,3.707,36,6.185,43,4.222,66,3.55,70,6.469,86,7.384,89,3.465,103,6.943,106,8.524,195,3.209,207,6.882,224,2.66,279,5.288,329,6.253,343,5.972,356,14.108,525,11.543,616,5.972,715,13.05,728,8.981,766,15.247,808,6.852,1031,13.05,1105,9.664,1278,10.489,2116,14.104,2684,14.104,3651,16.08]],["keywords/427",[]],["title/428",[2042,532.102]],["content/428",[16,2.675,47,8.374,226,4.171,367,7.019,445,5.668,604,9.535,646,8.587,647,6.899,692,12.262,693,4.839,732,18.663,766,11.364,767,10.095,895,5.551,921,9.841,1593,12.614,2020,8.065,2037,12.614,2094,8.029,3652,18.511,3653,18.511,3654,18.511,3655,14.191]],["keywords/428",[]],["title/429",[646,530.728,693,299.043,895,343.078]],["content/429",[2,1.059,18,2.274,22,1.972,31,2.629,53,8.256,79,2.746,128,6.315,140,13.365,162,4.209,206,4.209,221,5.107,224,1.731,226,2.292,228,4.231,229,4.261,230,3.445,279,5.011,281,2.345,297,4.298,303,4.354,325,4.873,332,6.389,353,6.245,367,7.693,434,5.107,445,3.115,489,4.794,490,2.838,552,5.24,601,4.719,603,4.719,604,5.24,607,4.536,616,3.885,646,10.079,669,8.552,678,6.245,692,5.424,693,5.961,694,8.552,704,4.015,748,5.464,766,12.454,767,11.063,792,6.278,810,4.579,834,6.389,895,7.091,908,7.288,921,6.521,926,5.275,1031,8.256,1126,3.497,1143,5.107,1146,14.857,1232,9.419,1311,8.01,1326,5.729,1368,6.728,1466,7.45,1538,6.549,1545,8.256,1593,13.823,1963,8.256,1995,6.931,2037,6.931,2094,4.412,2215,5.993,2634,9.419,2640,8.256,3655,15.552,3656,10.172,3657,18.269,3658,10.172,3659,10.172,3660,10.172,3661,9.419,3662,9.419,3663,6.245,3664,10.172,3665,10.172]],["keywords/429",[]],["title/430",[557,375.411,689,239.969,766,524.187,2027,431.371,3666,790.599]],["content/430",[2,1.798,4,9.211,16,2.496,22,2.14,89,3.723,112,5.781,115,6.437,156,11.77,162,7.147,186,5.374,224,1.962,241,7.176,279,5.681,557,7.595,627,4.395,689,4.855,766,10.605,895,6.602,1155,8.567,1215,7.853,1837,8.619,1916,8.898,2023,14.277,2027,11.122,3666,20.385,3667,15.995,3668,11.963,3669,11.591,3670,11.963]],["keywords/430",[]],["title/431",[16,250.43]],["content/431",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,156,12.416,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,766,11.186,875,5.084,1023,4.28]],["keywords/431",[]],["title/432",[282,329.633]],["content/432",[13,3.327,14,3.469,18,4.041,19,4.168,20,3.326,22,1.955,25,4.268,113,2.353,206,6.223,207,4.279,226,3.389,228,2.776,258,1.995,282,2.86,399,2.042,400,4.242,426,7.467,469,3.688,511,4.789,594,4.458,627,3.827,682,3.976,689,2.81,693,5.923,714,3.902,758,6.612,766,12.347,767,8.202,835,4.763,851,3.663,895,6.795,908,3.592,1126,5.171,1133,5.403,1142,3.49,1143,7.551,1221,7.03,1535,3.888,1593,13.704,1716,4.809,1875,5.063,2020,4.356,2023,5.89,2027,11.877,2094,7.841,2122,4.929,2630,6.612,2640,16.322,3263,4.737,3330,7.177,3411,5.679,3440,12.132,3482,6.709,3495,11.099,3655,13.86,3671,9.998,3672,9.257,3673,11.53,3674,9.998,3675,9.257,3676,9.998,3677,8.114,3678,13.192,3679,8.769,3680,9.998,3681,9.998,3682,9.998]],["keywords/432",[]],["title/433",[1023,407.123]],["content/433",[49,3.295,53,10.392,89,3.881,140,11.231,222,3.586,224,2.046,254,10.395,258,3.594,284,3.85,397,3.804,399,4.256,400,7.641,575,3.072,578,6.878,689,5.061,707,6.211,766,7.861,838,7.742,842,6.136,847,6.758,849,4.788,851,6.599,895,5.401,925,5.85,1126,6.192,1133,6.47,1142,4.47,1143,6.429,1593,8.725,2023,7.544,2027,9.099,2122,6.313,2123,7.861,2630,8.468,2640,10.392,2647,16.675,3275,7.576,3290,16.675,3432,8.627,3495,11.056,3655,13.806,3661,11.856,3675,11.856,3683,18.009,3684,18.009,3685,12.805,3686,12.805,3687,18.009,3688,11.231,3689,12.805,3690,11.231]],["keywords/433",[]],["title/434",[59,505.351,1151,633.815,1989,710.262]],["content/434",[]],["keywords/434",[]],["title/435",[2042,532.102]],["content/435",[14,7.228,127,5.085,340,4.637,386,10.27,464,5.219,895,6.247,1151,11.541,3472,22.875,3691,17.734,3692,20.833]],["keywords/435",[]],["title/436",[206,404.588,864,353.599,1758,689.056,3693,977.878]],["content/436",[8,3.795,13,2.322,14,8.515,15,3.881,16,1.516,18,3.485,19,2.419,22,1.02,48,8.045,66,3.443,69,5.748,113,2.47,179,5.479,185,6.497,198,4.794,206,7.7,297,4.433,355,4.012,359,6.704,385,3.441,386,5.173,408,4.472,434,5.268,445,3.213,464,5.161,465,3.481,513,7.896,526,4.426,530,6.124,532,5.814,564,6.94,605,5.173,616,2.676,625,9.997,679,4.868,810,4.724,871,7.878,895,3.147,897,3.965,1042,4.222,1074,5.236,1106,7.533,1110,8.571,1113,5.236,1142,8.34,1151,10.31,1163,5.91,1708,5.113,1716,3.355,1831,7.685,1895,7.854,1905,7.394,1970,12.656,1993,9.204,2018,13.629,2025,6.013,2057,8.262,2094,10.361,2211,7.267,2222,9.204,3176,9.716,3691,14.788,3694,8.822,3695,10.494,3696,10.494,3697,10.494,3698,10.494,3699,10.494,3700,10.494,3701,7.854,3702,10.494,3703,10.494,3704,10.494]],["keywords/436",[]],["title/437",[16,250.43]],["content/437",[1,5.577,2,1.882,16,3.274,22,1.758,24,4.683,59,7.986,89,3.896,163,6.015,224,2.947,227,5.813,228,5.021,277,3.812,281,4.168,284,5.436,354,4.461,355,4.652,372,5.58,464,4.53,490,5.045,875,5.045,1023,4.247,1151,10.016,1989,11.224]],["keywords/437",[]],["title/438",[282,329.633]],["content/438",[13,4.251,14,7.101,18,5.131,19,2.857,20,6.393,22,2.335,24,3.211,30,2.49,43,2.045,59,10.14,62,3.222,71,7.633,73,2.694,106,2.835,108,3.839,113,4.523,120,3.489,130,5.58,139,3.576,186,3.856,195,1.067,198,3.558,222,1.236,230,4.198,231,3.109,258,1.554,270,2.436,282,2.357,317,5.394,334,3.209,340,1.734,343,7.136,360,3.489,377,3.985,399,1.591,426,7.128,455,4.094,457,3.489,490,2.173,494,8.006,526,4.995,575,1.869,693,4.036,714,4.838,717,3.886,771,3.348,808,3.319,818,3.67,895,5.762,1007,4.066,1076,5.394,1133,5.547,1142,4.327,1151,14.09,1196,4.463,1281,5.151,1679,3.576,1716,2.49,1875,5.198,1989,13.831,2018,9.077,2094,7.633,2181,5.394,2487,5.488,2851,11.556,3263,3.69,3445,6.547,3471,8.576,3587,6.321,3588,6.321,3589,6.132,3590,6.132,3591,6.321,3592,6.321,3593,6.321,3594,6.547,3691,8.898,3705,7.788,3706,7.788,3707,7.788,3708,7.788,3709,7.788,3710,7.788,3711,7.211]],["keywords/438",[]],["title/439",[1023,407.123]],["content/439",[14,4.932,19,3.276,23,8.542,98,8.824,105,9.035,222,2.255,224,1.615,258,2.836,270,6.887,397,3.002,399,2.903,427,5.156,689,3.994,707,4.901,842,6.595,847,5.333,1133,5.106,1142,4.962,1143,7.136,1151,7.874,1614,7.812,1798,9.035,1800,7.635,1989,8.824,2105,8.726,2108,11.191,2510,8.005,3034,8.542,3275,5.979,3425,9.843,3432,6.809,3602,11.535,3603,11.191,3604,11.535,3605,11.535,3606,11.535,3607,11.535,3608,11.535,3609,11.949,3711,13.16,3712,14.213,3713,14.213,3714,14.213,3715,22.015,3716,22.015,3717,22.015,3718,14.213,3719,14.213,3720,14.213,3721,14.213,3722,14.213,3723,14.213,3724,14.213,3725,14.213,3726,14.213]],["keywords/439",[]],["title/440",[59,377.154,61,298.102,195,116.983,771,367.042,1412,524.187]],["content/440",[2,1.618,3,1.688,6,4.821,11,2.846,16,3.328,19,5.65,22,1.016,23,12.354,24,5.692,30,4.969,31,2.7,43,2.743,49,3.999,59,6.865,60,10.366,61,3.647,62,6.431,67,7.404,70,4.203,106,3.802,130,4.703,195,3.156,196,4.047,207,4.471,222,2.945,224,2.108,238,8.61,250,5.835,251,3.117,258,3.102,263,3.207,272,5.346,275,9.542,277,2.202,307,3.517,312,4.471,318,7.361,321,5.004,332,6.561,340,2.325,368,6.756,380,6.279,399,2.134,404,3.559,427,6.733,434,5.245,448,7.154,465,3.466,490,2.915,550,4.897,579,4.749,615,6.485,616,4.733,678,6.413,736,5.531,829,4.703,831,5.061,957,6.279,1151,5.787,1412,9.542,1637,6.641,1683,7.819,1684,6.155,1876,6.485,1989,6.485,2025,5.986,2055,6.279,3034,12.354,3611,8.478,3612,8.225,3613,8.782]],["keywords/440",[]],["title/441",[16,199.154,2105,846.169]],["content/441",[1,2.442,2,1.128,19,2.498,24,5.42,30,6.691,60,6.052,87,6.634,98,6.727,105,6.888,111,11.695,139,4.976,155,4.277,195,1.485,222,1.719,226,2.442,230,5.408,231,6.375,263,5.822,282,3.037,288,5.619,296,4.261,340,2.412,368,3.944,404,3.692,440,6.187,448,5.558,464,4.751,465,3.595,469,5.891,490,5.291,503,6.806,551,4.394,607,4.832,642,5.737,814,6.888,823,4.786,849,4.052,920,5.697,926,5.619,976,8.152,1021,5.107,1023,2.545,1044,6.155,1303,7.635,1731,9.409,1800,11.985,1885,6.888,2081,6.513,2105,11.642,2422,9.804,2510,11.786,3034,6.513,3122,7.778,3128,8.11,3152,7.778,3411,6.155,3614,8.532,3615,8.532,3616,8.532,3617,8.532,3618,8.532,3619,8.532,3620,8.532,3621,8.532,3622,8.532,3623,8.532,3624,8.532,3625,8.532,3626,10.03,3627,8.532,3628,8.532,3629,12.574,3630,8.532,3631,8.532,3632,8.532,3633,8.532,3634,8.532,3635,8.532,3636,8.532,3637,8.532]],["keywords/441",[]],["title/442",[70,554.539,3322,1056.653]],["content/442",[]],["keywords/442",[]],["title/443",[195,156.745,397,241.681,616,291.743]],["content/443",[2,1.535,3,2.385,7,5.959,8,5.335,31,3.813,49,3.796,127,3.601,195,2.021,274,13.169,289,6.775,397,4.74,399,3.014,469,5.442,546,9.887,616,3.762,1767,23.195,2107,23.195,3727,13.661,3728,21.972,3729,21.059,3730,21.972,3731,14.754,3732,14.754,3733,14.754,3734,14.754,3735,14.754,3736,14.754,3737,14.754]],["keywords/443",[]],["title/444",[2042,532.102]],["content/444",[2,2.13,16,2.957,22,2.377,224,2.325,329,7.959,347,7.376,354,5.05,355,5.266,599,8.837,895,6.137,1026,10.835,1758,14.421,3471,9.972]],["keywords/444",[]],["title/445",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,1758,479.913,3471,331.852]],["content/445",[70,8.382,340,4.637,352,6.015,526,5.912,556,9.076,575,5.927,601,9.664,627,5.301,896,7.764,1133,7.484,3322,15.971]],["keywords/445",[]],["title/446",[22,95.072,347,352.446,895,293.241,1026,517.722]],["content/446",[14,5.697,70,8.573,127,5.201,206,8.817,226,3.7,296,6.457,297,9.003,340,3.655,352,4.741,564,14.093,575,5.113,614,10.439,626,7.617,627,4.178,752,6.433,864,5.938,896,8.816,1049,7.823,1133,5.899,1142,5.733,1151,9.097,1175,9.869,1945,9.41,2094,9.242,2633,12.29,3322,16.336,3484,8.296,3496,10.86,3500,10.081,3501,11.372,3694,13.805,3738,16.42]],["keywords/446",[]],["title/447",[16,250.43]],["content/447",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,70,7.331,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,3322,13.969]],["keywords/447",[]],["title/448",[282,329.633]],["content/448",[2,1.01,3,1.569,14,6.161,18,5.593,19,3.39,20,3.229,22,0.944,36,3.733,70,3.905,86,4.457,123,6.822,136,3.747,168,1.96,195,2.015,206,7.347,219,4.391,222,1.54,226,3.314,235,4.999,258,1.937,274,7.732,282,3.768,283,3.642,329,3.774,330,3.277,340,2.16,345,4.209,347,3.498,352,2.802,354,2.395,355,2.497,397,2.05,399,1.983,421,5.377,422,2.988,426,7.157,427,3.521,428,6.573,464,2.432,556,4.228,568,5.617,575,2.329,601,9.876,627,2.469,689,2.728,693,2.537,714,3.788,851,3.556,875,2.708,895,4.41,896,7.934,908,6.379,1133,6.379,1142,5.135,1535,3.774,1621,5.894,1709,5.214,1716,4.702,1758,12.513,1803,5.102,1875,4.951,1945,8.428,1986,6.025,2018,7.108,2094,8.593,3263,4.599,3322,7.441,3471,4.729,3481,6.17,3483,11.58,3485,7.441,3486,7.441,3487,7.877,3492,6.096,3493,6.025,3494,6.839,3739,8.987,3740,14.928,3741,9.706,3742,8.513,3743,8.987,3744,7.642,3745,8.987]],["keywords/448",[]],["title/449",[1023,407.123]],["content/449",[1,3.623,15,4.002,86,7.384,123,9.751,222,2.551,224,1.827,258,3.209,347,5.796,397,3.397,399,3.285,421,8.908,526,4.563,689,4.519,707,5.545,838,6.912,842,5.478,847,6.034,851,5.892,895,4.822,908,5.777,1023,3.777,1133,5.777,3275,6.765,3277,8.702,3279,9.056,3322,12.327,3323,13.05,3483,12.661,3495,9.872,3496,10.635,3500,9.872,3501,11.136,3742,14.104,3743,14.889,3744,12.661,3745,14.889,3746,16.08,3747,16.08,3748,16.08,3749,16.08,3750,16.08,3751,19.464,3752,14.104]],["keywords/449",[]],["title/450",[3324,1364.669]],["content/450",[]],["keywords/450",[]],["title/451",[195,156.745,397,241.681,616,291.743]],["content/451",[2,2.058,3,3.195,7,7.985,8,8.657,31,5.11,49,5.087,127,4.825,195,2.709,397,5.058,399,4.039,469,7.293,616,5.041,652,6.578,3324,15.567,3753,19.77,3754,19.77]],["keywords/451",[]],["title/452",[2042,532.102]],["content/452",[1,4.205,4,9.95,13,5.113,66,4.12,115,6.954,186,5.806,224,2.12,226,4.205,277,3.934,279,7.6,340,4.154,352,5.387,397,3.942,445,5.714,627,5.88,651,7.537,921,7.986,1063,10.099,3324,14.692,3755,18.66,3756,18.66,3757,18.66]],["keywords/452",[]],["title/453",[16,250.43]],["content/453",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3324,14.46]],["keywords/453",[]],["title/454",[282,329.633]],["content/454",[3,2.14,13,5.075,14,4.595,18,5.581,19,4.25,31,3.422,36,5.093,43,3.477,123,6.143,195,2.526,222,2.101,258,2.643,282,3.507,330,4.471,397,2.797,399,2.705,426,7.47,427,4.804,428,7.851,447,5.246,448,4.609,467,5.37,485,5.769,526,3.758,568,5.057,604,9.497,651,7.447,689,3.722,693,3.461,714,5.168,851,4.852,908,4.757,1196,7.588,1230,9.561,1535,5.149,1716,5.895,1803,6.961,1875,6.207,1917,9.023,3262,5.769,3263,6.274,3324,16.702,3640,9.023,3641,7.336,3758,13.242,3759,12.261,3760,13.242,3761,13.242,3762,12.261,3763,12.261]],["keywords/454",[]],["title/455",[1023,407.123]],["content/455",[15,4.5,123,8.387,222,2.869,224,2.054,258,3.608,397,3.819,399,3.693,601,8.387,604,9.313,632,8.1,689,5.081,707,6.235,838,7.772,842,6.16,847,6.784,851,6.625,3262,7.877,3275,7.606,3279,10.183,3325,16.741,3641,10.016,3759,16.741,3762,16.741,3763,16.741,3764,18.08,3765,19.875,3766,10.454,3767,16.741]],["keywords/455",[]],["title/456",[3328,1364.669]],["content/456",[]],["keywords/456",[]],["title/457",[195,156.745,397,241.681,616,291.743]],["content/457",[2,2.04,3,3.168,7,7.918,8,8.613,31,5.067,49,5.044,127,4.785,195,2.686,397,5.032,399,4.005,469,7.231,616,4.999,652,6.522,1175,11.782,3328,15.435,3768,19.604,3769,19.604]],["keywords/457",[]],["title/458",[2042,532.102]],["content/458",[13,4.568,224,2.346,226,4.653,227,6.639,277,4.353,340,4.596,352,5.961,370,9.251,445,6.322,652,6.87,692,11.01,3328,19.349]],["keywords/458",[]],["title/459",[16,250.43]],["content/459",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3328,14.46]],["keywords/459",[]],["title/460",[282,329.633]],["content/460",[3,2.116,13,4.047,18,5.561,19,4.217,36,5.036,43,3.438,92,5.838,123,6.074,130,5.894,195,1.794,198,5.982,222,2.077,227,5.881,258,2.613,282,3.479,330,4.421,370,9.446,397,2.766,399,2.675,426,7.255,427,4.75,428,7.804,447,5.187,568,5,644,7.303,652,7.015,658,5.247,689,3.68,692,9.755,693,3.422,714,5.11,851,4.797,908,4.704,1074,6.533,1535,5.091,1716,5.849,1803,6.883,1837,6.533,1875,6.158,3065,18.525,3262,5.704,3263,6.204,3328,18.909,3640,8.921,3641,7.253,3770,13.093,3771,12.123]],["keywords/460",[]],["title/461",[1023,407.123]],["content/461",[15,4.465,123,8.322,222,2.847,224,2.038,258,3.58,397,3.79,399,3.665,689,5.042,692,9.567,707,6.187,838,7.712,842,6.112,847,6.732,851,6.574,1175,10.782,3065,14.56,3262,7.816,3275,7.547,3277,9.709,3279,10.104,3641,9.939,3766,10.374,3771,16.611,3772,17.94,3773,17.94,3774,17.754,3775,17.94,3776,17.94,3777,17.94]],["keywords/461",[]],["title/462",[3326,1364.669]],["content/462",[]],["keywords/462",[]],["title/463",[195,156.745,397,241.681,616,291.743]],["content/463",[2,2.075,3,3.223,7,8.054,8,8.702,31,5.153,49,5.13,127,4.867,195,2.732,397,5.084,399,4.073,469,7.355,616,5.085,652,6.634,3326,15.7,3778,19.94]],["keywords/463",[]],["title/464",[2042,532.102]],["content/464",[13,4.693,18,3.644,113,3.838,226,5.627,258,3.254,355,4.195,445,4.993,490,4.55,526,4.627,557,7.169,601,7.564,652,8.308,758,15.593,1021,9.997,1049,7.768,1050,6.831,1364,17.395,2132,8.513,2229,14.234,2248,12.049,3101,15.098,3326,18.564,3779,16.305]],["keywords/464",[]],["title/465",[16,250.43]],["content/465",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3326,14.46]],["keywords/465",[]],["title/466",[282,329.633]],["content/466",[3,2.479,13,4.508,18,5.672,19,4.697,222,2.434,258,4.066,282,3.875,330,5.179,397,3.24,399,3.133,426,7.4,428,7.542,447,6.077,652,7.613,689,4.311,693,4.009,714,7.953,758,13.476,851,5.62,908,5.51,976,6.593,1050,8.536,1535,5.964,1716,6.515,1875,6.86,3262,6.682,3263,7.267,3272,12.076,3326,19.197]],["keywords/466",[]],["title/467",[1023,407.123]],["content/467",[15,4.644,123,8.656,208,7.72,222,2.961,224,2.12,258,3.724,397,3.942,399,3.812,689,5.244,707,6.435,838,8.021,842,6.357,847,7.002,851,6.837,1050,7.817,3262,8.13,3275,7.85,3278,14.305,3279,10.509,3327,17.278,3641,10.338,3646,15.687,3765,16.367,3766,10.79,3780,18.66]],["keywords/467",[]],["title/468",[3781,1520.246]],["content/468",[]],["keywords/468",[]],["title/469",[195,156.745,397,241.681,616,291.743]],["content/469",[16,3.01,113,4.904,127,5.085,185,7.273,195,2.854,222,3.306,224,2.367,397,4.401,448,7.251,652,6.931,1859,11.636,3064,12.652]],["keywords/469",[]],["title/470",[397,366.13]],["content/470",[2,2.208,3,3.428,7,8.568,8,7.67,49,5.458,397,4.481,399,4.333,469,7.825,3782,21.213,3783,21.213]],["keywords/470",[]],["title/471",[2042,532.102]],["content/471",[652,7.123,1163,12.057,1859,11.957,3064,13.002,3781,22.02,3784,18.778,3785,18.778,3786,21.408]],["keywords/471",[]],["title/472",[16,250.43]],["content/472",[1,4.723,2,2.181,16,2.623,22,1.259,24,3.354,66,4.007,79,3.495,89,2.79,163,4.308,196,5.016,222,2.054,224,2.717,226,2.917,227,4.163,228,5.04,277,2.73,279,5.969,281,2.985,284,3.893,303,5.541,354,3.194,355,3.331,359,7.802,372,3.996,445,3.964,464,3.244,465,6.953,490,3.613,652,6.973,875,3.613,894,7.948,896,6.764,1023,3.041,1074,6.46,1163,7.292,1775,6.955,1830,14.514,3064,7.863,3781,18.382,3784,15.92,3787,9.691,3788,8.563,3789,12.947,3790,11.356,3791,12.947,3792,12.947,3793,18.15,3794,12.947,3795,9.691,3796,12.947,3797,12.947,3798,11.988,3799,12.947,3800,12.947,3801,11.988,3802,11.988]],["keywords/472",[]],["title/473",[1023,407.123]],["content/473",[1,4.012,15,4.431,86,8.175,222,2.825,224,2.022,258,3.553,347,6.417,397,3.761,399,3.637,689,5.003,707,6.139,838,7.653,842,6.065,847,6.68,851,6.523,895,5.339,908,6.396,1023,4.182,1133,8.062,1157,14.018,1859,9.944,3261,14.449,3275,7.49,3279,10.027,3803,17.803,3804,14.018,3805,17.803,3806,17.803,3807,17.803,3808,17.803]],["keywords/473",[]],["title/474",[173,366.94,224,111.085,549,621.643,791,576.139]],["content/474",[]],["keywords/474",[]],["title/475",[2042,532.102]],["content/475",[13,3.793,18,3.832,22,1.667,61,7.65,66,3.786,89,3.695,127,4.185,195,2.349,207,7.339,224,1.948,281,3.953,340,3.817,397,3.622,447,6.793,513,10.246,526,6.853,549,10.9,804,7.065,864,6.2,895,5.142,902,7.539,1150,7.626,1165,11.684,2042,5.264,3809,15.877,3810,20.289,3811,15.877,3812,15.877,3813,15.877]],["keywords/475",[]],["title/476",[864,626.718]],["content/476",[127,5.323,224,2.478,226,4.915,445,6.678,549,13.864,752,8.544,875,6.085]],["keywords/476",[]],["title/477",[513,584.809,526,391.149]],["content/477",[6,5.543,14,6.978,22,1.168,61,6.008,66,4.849,69,3.351,108,5.921,112,4.02,127,4.201,144,8.796,155,4.741,168,3.475,179,6.271,186,3.737,195,2.755,288,6.228,340,2.674,363,6.187,424,6.823,427,4.357,513,11.008,518,4.671,526,7.232,549,10.94,557,5.281,633,8.06,714,4.688,731,8.321,813,6.654,902,9.657,920,6.314,921,5.141,926,6.228,1074,8.587,1133,4.315,1150,5.99,1157,9.457,1189,7.998,1859,6.709,1864,8.06,1895,8.99,2003,10.098,2023,7.077,2568,7.544,3140,9.748,3810,20.336,3811,15.935,3812,15.935,3814,12.604,3815,11.121,3816,11.121,3817,11.121,3818,11.121]],["keywords/477",[]],["title/478",[13,253.109,513,485.419,526,324.673]],["content/478",[2,1.99,13,5.749,18,3.119,22,1.357,24,3.615,61,4.873,66,5.426,69,5.335,106,5.08,127,4.667,175,7.611,176,10.989,222,3.034,226,3.145,329,5.427,340,4.256,352,4.03,420,10.221,427,5.063,445,4.274,490,3.894,513,10.768,526,7.374,731,5.775,741,7.611,752,5.468,895,4.185,1074,9.54,1085,9.835,1086,9.835,1150,6.655,1189,5.551,1443,6.194,1736,10.221,1795,8.223,1916,7.189,2106,10.019,2573,8.873,3814,10.221]],["keywords/478",[]],["title/479",[2,78.859,224,86.077,226,170.748,279,249.209,445,232.017,549,481.696]],["content/479",[2,1.347,6,5.975,13,2.864,14,4.492,30,4.14,31,3.346,49,3.331,113,4.272,168,4.231,185,7.317,196,5.016,222,3.325,224,1.471,226,2.917,229,5.424,279,4.258,288,6.714,323,8.038,359,9.009,361,10.799,368,4.713,399,4.281,424,7.355,436,9.691,440,5.016,447,7.191,448,6.317,513,5.493,526,3.674,534,11.356,573,8.038,606,7.556,748,6.955,829,5.829,872,7.628,873,6.102,1088,11.839,1196,7.419,1261,9.123,1443,5.746,1708,8.844,1716,4.14,1765,7.863,2098,10.194,2106,9.294,2234,9.926,3250,11.356,3395,7.292,3801,11.988,3802,11.988,3819,12.947,3820,12.947,3821,12.947,3822,12.947,3823,12.947,3824,12.947,3825,12.947,3826,12.947,3827,12.947,3828,12.947,3829,12.947,3830,12.947,3831,10.194,3832,12.947]],["keywords/479",[]],["title/480",[440,443.265,448,398.191,3395,644.352]],["content/480",[2,0.925,3,2.222,14,3.084,15,3.422,16,1.284,22,1.337,31,2.297,41,9.386,47,4.021,69,2.48,70,6.766,71,8.208,72,8.741,79,2.4,83,4.886,97,3.964,106,3.236,107,4.641,161,3.457,168,4.132,173,5.16,175,4.848,180,4.307,185,4.801,190,6.999,192,4.409,195,1.218,213,5.457,221,4.463,222,1.41,224,1.562,229,3.724,241,3.693,244,6.314,251,4.102,263,2.729,266,4.235,270,2.781,275,5.457,276,5.965,283,3.336,288,4.61,291,5.616,295,7.179,298,6.991,347,3.204,360,3.983,387,4.307,394,3.983,399,1.816,404,3.029,421,4.925,423,5.14,438,5.519,440,7.929,443,5.188,448,6.587,455,7.229,464,2.227,485,8.245,492,6.381,552,4.579,579,4.041,744,6.381,774,6.264,817,12.586,960,5.965,976,8.797,1077,6.51,1088,5.799,1196,5.094,1310,6.057,1348,7.88,1364,5.723,1443,7.463,1445,6.264,1540,14.75,1864,9.227,1928,13.86,1963,7.215,1964,6.264,1974,4.382,2025,5.094,2037,6.057,2275,7.215,2573,5.651,2999,8.231,3395,13.476,3589,6.999,3833,8.889,3834,8.889,3835,8.889,3836,8.889,3837,8.889,3838,8.889,3839,8.231,3840,8.889,3841,8.231,3842,8.231,3843,8.889,3844,8.889]],["keywords/480",[]],["title/481",[16,250.43]],["content/481",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,549,11.675,875,5.124,1023,4.314]],["keywords/481",[]],["title/482",[282,329.633]],["content/482",[1,2.764,6,5.66,13,2.713,14,6.061,15,3.053,18,5.238,19,4.027,22,1.192,24,3.177,41,10.997,106,6.358,113,4.112,155,4.841,168,2.476,173,4.602,192,6.083,199,7.226,222,1.946,258,2.447,277,2.586,282,3.322,288,11.498,343,4.555,399,4.787,400,5.204,424,6.967,426,7.309,440,4.752,447,8.061,467,4.973,485,5.343,513,5.204,526,3.48,549,11.105,846,5.908,1133,4.406,1165,8.357,1716,5.585,1875,5.881,1928,17.839,2456,8.804,3395,11.459,3457,9.402,3579,16.513,3841,11.356,3845,10.758,3846,9.402,3847,12.264,3848,7.895,3849,12.264,3850,8.23]],["keywords/482",[]],["title/483",[173,517.202,3579,1118.642]],["content/483",[16,1.903,25,5.212,31,3.403,42,6.239,66,4.055,67,6.273,69,5.124,89,2.838,92,5.871,168,3.708,173,9.03,174,7.479,192,6.53,214,6.273,216,5.539,220,5.587,222,2.914,226,2.967,265,7.684,282,2.504,312,5.635,335,4.138,340,2.931,341,9.643,374,4.873,385,4.318,394,5.899,396,5.47,399,4.32,411,6.971,440,7.115,468,7.914,469,6.774,481,8.083,541,6.828,546,5.197,569,9.523,578,7.073,594,8.189,615,8.174,632,5.899,748,7.073,803,7.021,808,5.611,816,7.294,824,12.192,827,12.192,833,7.294,897,4.975,1134,8.835,1488,7.073,2193,12.192,2846,8.083,3395,11.911,3579,17.164,3851,13.167,3852,13.167]],["keywords/483",[]],["title/484",[661,514.086,1622,500.408,1910,541.745,3853,857.735]],["content/484",[]],["keywords/484",[]],["title/485",[712,952.57]],["content/485",[1,4.592,2,2.121,16,2.216,18,3.428,20,5.103,22,1.981,66,3.386,106,5.583,136,5.921,181,6.425,195,3.135,211,9.315,222,3.233,224,2.315,241,6.372,258,4.566,261,5.696,277,3.234,281,3.536,307,5.163,329,5.964,354,3.784,355,3.946,408,6.536,434,7.7,467,6.219,489,7.228,529,9.315,597,8.789,651,6.195,681,8.008,761,8.567,901,7.389,1019,10.622,1024,9.874,1044,8.712,1050,6.425,1443,6.807,1622,7.849,1707,8.179,1917,10.451,3854,12.894,3855,11.232]],["keywords/485",[]],["title/486",[2,101.77,195,133.976,1023,229.702,1707,521.453]],["content/486",[2,1.618,3,3.322,22,1.511,79,4.196,106,5.657,195,3.156,222,3.655,228,4.316,238,8.611,258,3.102,261,5.772,270,4.862,354,3.835,355,3.999,359,9.901,408,6.623,490,4.337,556,6.771,641,8.997,642,8.229,644,6.205,679,7.21,697,7.902,871,7.852,879,11.633,897,5.873,973,10.43,1019,10.764,1025,9.762,1042,8.27,1707,12.282,1795,9.157,1888,10.952,2020,6.771,2096,10.43,2240,12.355,3855,11.383,3856,13.067]],["keywords/486",[]],["title/487",[16,165.308,1622,585.453,3853,1003.508]],["content/487",[16,2.005,19,3.198,22,1.349,30,4.436,61,6.648,66,3.063,69,3.871,113,3.266,127,3.386,145,10.911,155,7.516,185,7.59,195,2.609,198,6.339,207,5.938,272,9.744,279,4.563,312,5.938,359,5.964,378,9.776,436,10.384,464,3.476,465,4.603,467,7.721,643,13.996,661,7.294,863,9.176,1021,6.538,1050,7.977,1104,11.664,1278,9.05,1565,8.82,1622,13.521,1765,11.564,1775,10.229,1830,9.608,1948,11.26,2062,14.252,3853,19.07,3857,13.874,3858,13.874,3859,13.874,3860,13.874]],["keywords/487",[]],["title/488",[1050,577.406,1622,705.325]],["content/488",[2,1.155,3,1.793,15,6.206,16,1.603,31,2.867,49,4.181,60,6.197,79,4.386,120,11.172,173,4.163,195,2.226,198,5.069,222,2.578,224,1.26,226,2.5,258,3.242,270,6.62,281,2.557,329,4.314,330,3.746,354,2.737,355,2.854,359,4.769,361,6.601,372,5.015,385,3.638,394,7.279,399,3.927,443,6.475,465,3.681,467,6.589,469,4.092,493,5.916,598,6.968,677,8.572,842,3.78,849,4.149,983,8.125,1044,6.302,1050,9.86,1090,7.142,1134,7.445,1155,9.535,1267,4.707,1401,5.147,1622,11.528,2020,4.833,2240,6.668,3861,9.327,3862,9.327,3863,9.327,3864,9.327,3865,12.793,3866,9.327,3867,9.327,3868,9.327,3869,13.66,3870,9.327,3871,10.903,3872,8.505,3873,9.327,3874,9.327,3875,9.327,3876,9.327,3877,9.327,3878,9.327,3879,9.327]],["keywords/488",[]],["title/489",[895,519.739]],["content/489",[3,2.128,18,2.943,22,2.056,30,4.21,49,5.441,195,1.804,224,1.496,235,6.782,241,5.47,261,4.89,270,4.119,298,6.695,307,4.433,321,6.307,367,8.019,384,8.476,422,6.51,464,5.733,465,4.368,552,6.782,557,5.789,626,9.81,680,9.278,833,7.294,841,6.971,872,7.758,895,7.217,896,7.881,900,11.535,918,8.972,921,7.86,1050,5.516,1091,7.237,1121,6.273,1126,4.527,1142,6.412,1155,10.488,1293,13.183,1707,7.021,1731,10.82,1800,11.36,1910,7.294,3249,12.941,3795,9.855,3880,11.069,3881,15.439,3882,9.643]],["keywords/489",[]],["title/490",[751,837.857,1622,585.453,3883,856.309]],["content/490",[18,4.656,22,2.025,224,2.367,235,10.731,404,7.098,525,14.954,616,5.312,751,15.257,1622,10.661,2034,16.403,3787,15.593,3883,15.593]],["keywords/490",[]],["title/491",[16,199.154,258,275.056]],["content/491",[3,3.25,17,10.092,18,3.361,19,3.467,20,5.004,30,4.809,42,7.126,49,3.87,73,5.202,98,9.337,120,11.296,173,5.644,195,2.061,224,1.709,230,5.093,235,7.747,263,4.617,282,2.86,320,7.459,409,8.14,426,5.865,469,5.548,490,4.197,803,8.02,835,11.524,895,4.51,896,5.605,1044,8.543,1050,9.492,1155,9.974,1393,7.747,1401,6.977,1551,10.092,1622,7.696,1716,4.809,1875,5.063,2606,10.416,3249,10.598,3882,11.015,3884,11.257,3885,12.644,3886,12.644,3887,10.416]],["keywords/491",[]],["title/492",[16,199.154,397,291.165]],["content/492",[3,2.431,13,3.327,14,5.219,18,4.495,19,3.467,20,5.004,22,2.203,31,3.887,42,7.126,49,5.175,70,6.051,79,4.06,113,4.734,120,9.01,226,5.106,282,2.86,368,5.474,399,4.108,422,4.63,424,8.543,426,6.607,464,5.039,689,4.227,744,10.796,746,6.804,835,10.795,1050,6.301,1155,9.974,1716,4.809,1800,12.172,1875,5.063,1910,8.332,3884,11.257,3888,12.644,3889,12.207,3890,16.323,3891,11.53]],["keywords/492",[]],["title/493",[276,767.708,652,380.65,3330,821.254]],["content/493",[]],["keywords/493",[]],["title/494",[2042,532.102]],["content/494",[8,6.747,13,5.113,22,1.814,31,4.823,276,12.521,297,7.883,352,5.387,422,5.744,445,5.714,526,7.124,550,8.747,652,8.353,1020,10.256,1042,7.507,1267,7.917,1488,10.024,2248,10.6,3330,13.395,3892,17.278,3893,16.367]],["keywords/494",[]],["title/495",[16,250.43]],["content/495",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,276,12.227,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,3330,13.08]],["keywords/495",[]],["title/496",[282,329.633]],["content/496",[2,1.29,13,4.528,18,4.979,19,4.057,31,3.204,79,3.346,136,4.785,195,2.804,222,1.967,226,3.966,258,2.474,277,2.613,281,2.857,282,3.347,303,5.305,330,4.185,399,2.532,400,5.259,404,4.223,426,6.861,427,4.497,428,7.575,458,5.475,516,6.923,518,4.82,552,6.385,616,3.161,627,4.478,652,4.124,682,7,689,4.947,693,3.24,714,4.838,837,10.927,851,4.542,908,4.453,1141,7.88,1267,8.683,1488,6.658,1535,4.82,1679,5.692,1716,5.628,1755,8.085,1757,9.078,1875,5.925,3262,5.4,3263,5.873,3330,8.898,3492,7.785,3493,7.695,3494,8.734,3892,20.629,3893,15.438,3894,12.395,3895,12.395,3896,11.477,3897,20.466,3898,11.477]],["keywords/496",[]],["title/497",[1023,407.123]],["content/497",[25,4.761,89,3.615,123,10.023,195,2.298,222,3.792,224,1.906,229,7.028,254,10.781,258,3.348,284,5.044,397,3.544,399,4.414,400,7.118,458,7.41,689,6.072,707,5.785,838,7.211,842,5.715,847,6.295,851,6.147,1267,7.118,2125,9.981,3262,7.309,3275,7.057,3277,9.079,3330,12.042,3331,15.533,3432,8.036,3565,15.533,3893,14.715,3896,15.533,3898,20.006]],["keywords/497",[]],["title/498",[3295,1297.249]],["content/498",[]],["keywords/498",[]],["title/499",[19,263.73,195,156.745,616,291.743]],["content/499",[2,2.208,3,2.635,16,2.356,19,5.435,22,1.585,23,14.17,24,6.107,30,5.213,31,4.214,67,7.768,127,5.177,155,6.436,195,2.234,196,6.317,222,2.587,224,1.852,275,10.01,282,3.101,363,8.399,368,7.721,448,7.383,616,5.409,908,7.621,920,8.572,1876,10.123,2067,10.941,2105,10.01,3034,9.8,3295,12.204,3899,13.708,3900,15.098]],["keywords/499",[]],["title/500",[2042,532.102]],["content/500",[1,4.309,2,1.99,22,2.281,24,4.953,162,7.911,224,2.665,297,8.078,354,4.718,355,4.919,386,9.426,457,8.566,526,5.426,597,10.957,836,11.492,895,5.734,1916,9.849,2067,12.83,3295,17.558,3471,9.316]],["keywords/500",[]],["title/501",[16,250.43]],["content/501",[1,5.233,2,1.958,16,3.356,22,1.829,89,4.054,224,2.989,228,5.224,277,4.896,281,4.336,284,5.655,354,4.641,355,4.84,464,4.713,490,5.249,875,5.249,1023,4.419,3295,17.383]],["keywords/501",[]],["title/502",[282,329.633]],["content/502",[6,6.422,13,4.56,16,2.011,18,4.264,19,4.398,20,7.795,22,1.353,23,8.363,24,4.942,30,4.449,31,3.596,43,2.37,60,10.657,62,3.735,71,8.275,73,3.123,106,5.065,108,4.45,120,9.234,130,6.264,139,4.145,186,4.329,195,1.237,198,4.124,222,1.432,229,3.782,230,4.712,231,3.604,238,7.709,258,1.802,270,4.353,281,2.081,282,2.646,317,6.252,334,3.72,340,2.009,354,2.227,360,4.044,368,6.18,377,4.62,399,1.844,426,5.564,427,5.048,455,4.746,490,2.519,494,8.805,575,2.166,609,6.611,615,8.639,714,5.431,717,4.504,771,7.299,808,3.847,818,4.254,835,6.629,836,5.426,875,2.519,1007,4.713,1076,6.252,1133,6.1,1196,5.173,1267,3.83,1281,5.97,1412,8.543,1679,4.145,1716,4.449,1875,4.685,2067,9.337,2181,6.252,2240,5.426,2487,6.361,2851,12.709,3034,8.363,3263,4.277,3295,12.709,3471,4.399,3587,7.327,3588,7.327,3589,7.108,3590,7.108,3591,7.327,3592,7.327,3593,7.327,3595,7.327,3596,7.327,3597,7.327,3598,7.327,3599,7.327,3600,7.589,3901,7.327,3902,8.359]],["keywords/502",[]],["title/503",[1023,407.123]],["content/503",[120,8.783,222,3.11,224,2.227,258,3.912,397,4.141,399,4.005,689,5.509,707,6.76,838,8.427,842,6.679,847,7.356,1910,10.86,3275,8.247,3301,17.195,3432,9.391,3592,15.91,3594,16.481,3902,18.152,3903,19.604]],["keywords/503",[]],["title/504",[24,253.302,771,420.36,1412,600.333,3295,731.918]],["content/504",[2,1.297,3,1.267,11,2.136,16,2.785,19,5.148,23,10.618,24,5.785,30,6.563,31,2.026,49,2.017,60,9.868,87,5.177,98,4.868,105,4.984,106,2.854,111,9.126,139,3.6,155,3.095,195,2.641,196,3.038,207,3.356,222,1.977,224,1.762,226,1.767,230,4.22,231,4.975,238,6.904,251,2.339,258,1.565,263,4.761,275,7.65,282,2.37,288,4.066,296,3.083,312,3.356,318,5.525,321,3.756,332,4.924,340,2.774,343,2.912,368,7.017,380,4.712,404,4.245,427,4.521,440,4.828,448,7.144,464,3.885,465,2.601,469,4.597,490,4.93,503,4.924,551,3.179,607,3.496,642,4.151,736,4.151,814,4.984,849,2.932,920,4.122,926,4.066,957,4.712,976,6.666,1021,3.695,1044,4.454,1303,5.525,1412,7.65,1637,4.984,1683,5.869,1731,7.342,1800,10.356,1876,4.868,1885,4.984,2025,4.493,2067,8.362,2081,4.712,2105,10.846,2422,7.65,2510,9.95,3034,11.586,3122,5.628,3128,5.869,3152,5.628,3295,9.327,3411,4.454,3612,6.174,3614,6.174,3615,6.174,3616,6.174,3617,6.174,3618,6.174,3619,6.174,3620,6.174,3621,6.174,3622,6.174,3623,6.174,3624,6.174,3625,6.174,3626,7.827,3627,6.174,3628,6.174,3629,9.812,3630,6.174,3631,6.174,3632,6.174,3633,6.174,3634,6.174,3635,6.174,3636,6.174,3637,6.174,3899,6.592]],["keywords/504",[]],["title/505",[3335,1406.653]],["content/505",[]],["keywords/505",[]],["title/506",[195,156.745,397,241.681,616,291.743]],["content/506",[2,1.839,3,2.855,7,7.136,8,6.389,31,4.566,49,4.546,75,10.311,127,4.312,195,2.421,397,4.718,399,3.609,469,6.517,616,4.505,2223,14.853,3904,17.668,3905,17.668,3906,17.668,3907,17.668,3908,17.668,3909,17.668,3910,17.668,3911,17.668,3912,17.668,3913,17.668,3914,17.668,3915,17.668,3916,17.668,3917,17.668,3918,17.668,3919,17.668,3920,17.668]],["keywords/506",[]],["title/507",[2042,532.102]],["content/507",[13,4.693,22,2.062,224,2.41,340,4.722,352,6.124,526,6.02,652,7.058,3335,20.265,3921,21.213]],["keywords/507",[]],["title/508",[16,250.43]],["content/508",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3335,14.905]],["keywords/508",[]],["title/509",[282,329.633]],["content/509",[3,2.128,13,4.063,18,5.114,19,4.233,22,1.28,43,3.457,52,5.339,66,2.907,115,4.907,195,2.516,222,2.089,226,2.967,258,2.628,276,8.835,277,2.776,282,3.493,330,4.446,355,3.388,397,2.781,399,2.69,426,7.018,428,7.827,526,3.737,550,6.172,551,5.339,568,7.013,652,7.036,689,3.701,693,3.442,714,5.139,829,10.834,851,4.825,860,11.445,908,4.73,1155,10.488,1401,6.108,1535,5.12,1716,5.872,1803,6.922,1875,6.183,2959,11.549,3064,12.844,3262,5.736,3263,6.239,3272,10.367,3335,17.164,3922,13.167]],["keywords/509",[]],["title/510",[1023,407.123]],["content/510",[15,4.798,222,3.059,224,2.19,258,3.847,397,4.073,399,3.938,400,8.18,689,5.418,707,6.648,838,8.287,842,6.568,847,7.234,851,7.064,1190,16.91,3064,11.708,3275,8.11,3278,14.779,3336,17.851,3923,17.851,3924,19.279,3925,19.279]],["keywords/510",[]],["title/511",[3332,989.405,3333,911.566]],["content/511",[]],["keywords/511",[]],["title/512",[195,156.745,397,241.681,616,291.743]],["content/512",[2,1.974,3,3.065,7,7.66,8,6.857,31,4.901,49,4.879,70,7.63,127,4.629,195,2.598,397,4.931,399,3.874,469,6.996,526,5.382,556,8.262,616,4.836,1696,12.726,3332,13.613,3926,18.964,3927,18.964,3928,18.964,3929,18.964,3930,18.964]],["keywords/512",[]],["title/513",[2042,532.102]],["content/513",[2,2.37,22,1.772,161,7.086,195,2.496,222,2.891,345,7.903,347,8.207,354,4.496,355,4.688,396,7.57,616,4.647,627,4.636,641,7.975,642,9.647,895,5.464,896,6.79,908,8.18,921,7.799,1020,10.015,2042,5.594,3332,13.08,3440,12.227,3471,8.878,3484,9.206,3931,12.84]],["keywords/513",[]],["title/514",[1020,757.532,3471,671.584]],["content/514",[2,2.149,14,7.164,22,2.007,70,8.307,340,4.596,352,5.961,354,5.094,355,5.313,526,6.974,1696,13.855,3332,14.822,3471,10.061]],["keywords/514",[]],["title/515",[16,141.294,347,352.446,627,248.809,896,364.419]],["content/515",[1,2.561,14,3.944,16,1.642,18,2.54,19,2.62,31,2.937,66,2.509,69,4.614,70,7.843,115,4.235,127,4.036,147,6.105,205,7.752,224,1.879,226,2.561,229,4.761,276,11.097,322,8.949,326,6.762,340,2.53,347,4.096,352,4.774,355,5.016,359,4.886,361,6.762,422,3.499,445,3.48,518,4.42,526,5.532,550,7.752,557,4.997,601,5.272,616,2.898,627,6.387,634,7.517,644,4.537,652,7.568,731,8.065,752,4.452,771,8.38,864,4.11,875,3.171,896,7.265,1021,5.356,1155,9.668,1443,5.044,1696,11.097,1812,6.902,2229,7.627,2271,8.159,2275,9.224,2811,9.224,3053,7.056,3063,9.969,3332,13.993,3333,15.044,3932,11.365,3933,10.524,3934,9.555,3935,7.414,3936,16.537,3937,16.537,3938,11.365,3939,11.365]],["keywords/515",[]],["title/516",[16,250.43]],["content/516",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,3332,13.08,3333,12.051]],["keywords/516",[]],["title/517",[282,329.633]],["content/517",[1,2.816,3,0.73,14,2.73,15,2.6,16,0.653,18,3.165,19,1.814,22,1.511,30,3.34,31,1.168,33,4.728,41,2.241,43,2.066,49,2.024,52,5.067,69,2.915,70,5.027,75,2.637,97,3.508,103,1.951,110,5.857,112,2.633,113,2.941,115,1.684,123,2.097,136,1.745,139,4.797,195,2.952,197,4.469,222,2.651,224,1.419,226,3.191,230,4.231,246,4.394,258,0.902,263,2.415,266,3.748,268,3.893,270,1.414,274,2.376,282,1.496,289,2.075,312,4.471,326,2.689,329,1.757,330,4.781,340,2.781,343,2.922,347,1.629,360,4.68,394,4.68,397,0.955,399,0.923,400,1.918,404,2.68,421,2.504,422,5.143,426,5.994,427,4.533,428,7.802,437,6.394,448,4.349,464,1.971,465,5.872,469,1.667,491,2.839,520,4.681,526,3.546,551,3.19,556,1.969,568,5.408,575,1.888,627,2.002,632,3.525,652,4.711,654,4.08,682,3.129,689,2.936,693,1.181,707,1.559,714,4.877,720,5.132,721,5.15,761,2.524,791,6.155,818,3.708,829,2.035,846,6.019,851,1.656,895,1.355,896,2.932,906,3.525,908,1.624,909,2.524,924,3.383,925,2.065,930,2.41,943,7.361,998,4.728,1042,4.203,1091,2.484,1155,6.197,1535,1.757,1614,2.484,1625,12.238,1677,6.614,1679,3.612,1696,3.033,1707,4.195,1709,4.226,1716,2.515,1796,4.778,1875,2.648,1973,2.689,1974,6.981,2084,3.964,2223,6.614,2444,3.31,2455,5.279,2559,3.079,2608,4.508,2739,3.799,2959,3.964,2986,3.465,3124,2.806,3133,14.045,3262,5.444,3263,2.141,3332,11.992,3333,8.264,3442,3.799,3492,7.848,3493,7.757,3678,9.163,3940,4.519,3941,4.519,3942,4.519,3943,3.799,3944,3.558,3945,18.491,3946,11.569,3947,4.519,3948,15.542,3949,4.519,3950,5.448,3951,9.579,3952,4.519,3953,4.519,3954,7.867,3955,4.519,3956,4.519,3957,4.519,3958,4.519,3959,7.867,3960,4.519,3961,4.519,3962,4.185,3963,4.519,3964,4.519,3965,4.519,3966,3.13,3967,4.519,3968,4.519,3969,3.383,3970,4.519,3971,4.519,3972,4.185,3973,3.964]],["keywords/517",[]],["title/518",[1023,407.123]],["content/518",[1,2.243,70,4.005,86,4.571,89,2.145,113,2.343,222,2.379,224,1.131,254,4.967,258,1.987,284,2.993,347,3.588,386,4.908,397,5.538,399,2.034,400,10.998,465,3.302,632,4.46,689,7.367,707,3.433,838,4.279,842,3.391,847,9.837,851,9.605,895,2.985,908,3.576,1023,2.338,1625,7.838,2125,8.919,3133,8.369,3262,6.531,3273,6.252,3275,4.188,3277,5.387,3279,5.607,3332,7.146,3334,8.732,3456,11.493,3503,11.804,3944,7.838,3945,9.217,3946,9.217,3966,6.894,3974,9.955,3975,9.955,3976,9.955,3977,9.955,3978,9.955,3979,9.955,3980,9.955,3981,9.955,3982,9.955,3983,9.955,3984,9.955,3985,9.955,3986,9.955,3987,9.955,3988,9.955,3989,9.955,3990,9.955,3991,9.955,3992,9.955,3993,9.955,3994,9.955,3995,9.955,3996,9.955,3997,8.369,3998,9.955,3999,9.955,4000,9.955,4001,9.955]],["keywords/518",[]],["title/519",[2043,1269.296]],["content/519",[]],["keywords/519",[]],["title/520",[195,156.745,397,241.681,616,291.743]],["content/520",[16,2.983,127,5.04,185,7.209,195,3.367,222,3.899,224,2.346,230,6.992,289,9.481,397,4.362,447,8.18,2043,15.121]],["keywords/520",[]],["title/521",[397,366.13]],["content/521",[2,1.839,3,2.855,7,7.136,8,6.389,49,4.546,229,9.356,246,12.473,397,3.732,399,3.609,447,7,469,6.517,526,5.014,746,7.993,2043,16.355,4002,17.668,4003,17.668,4004,17.668,4005,17.668,4006,17.668,4007,17.668,4008,17.668,4009,17.668,4010,20.678,4011,22.332,4012,22.332,4013,17.668]],["keywords/521",[]],["title/522",[2042,532.102]],["content/522",[2,2.158,22,2.016,71,6.832,160,10.869,161,6.126,195,2.158,222,2.5,226,3.55,321,7.546,340,3.507,345,6.832,347,5.678,354,3.887,355,4.053,367,5.974,396,6.545,422,4.849,515,8.061,575,3.78,616,4.017,627,5.899,641,6.894,642,8.34,656,13.244,675,10.014,810,7.092,894,9.671,895,6.219,896,7.729,908,8.329,921,6.742,1293,11.308,2042,4.836,2043,11.537,3274,11.1,3471,7.676,3484,7.959,3931,11.1]],["keywords/522",[]],["title/523",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,2043,498.782,3471,331.852]],["content/523",[160,9.854,385,6.894,526,5.965,575,5.043,627,5.349,1294,15.395,1604,17.501,1762,15.084,2043,15.395]],["keywords/523",[]],["title/524",[1,139.372,16,89.367,22,60.132,224,70.26,347,222.918,627,157.369,896,230.491,3274,435.82]],["content/524",[375,11.659,526,6.02,575,5.089,627,6.353,896,7.905,1604,14.947,2043,18.287,3274,14.947]],["keywords/524",[]],["title/525",[16,250.43]],["content/525",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,894,11.275,1023,4.314]],["keywords/525",[]],["title/526",[864,626.718]],["content/526",[22,1.99,185,7.145,289,9.398,296,8.048,330,6.91,427,7.425,428,7.575,447,8.108,895,6.137,1350,13.945,2963,16.114,3484,10.34,4014,20.466,4015,20.466]],["keywords/526",[]],["title/527",[1023,407.123]],["content/527",[1,3.836,15,4.236,86,7.816,123,7.896,222,2.701,224,1.934,258,3.397,289,7.816,347,6.135,397,3.596,399,3.477,447,6.744,689,4.784,707,5.87,838,7.317,842,5.799,847,6.387,851,6.237,895,5.104,908,6.115,1023,3.998,1133,7.835,1142,5.943,2125,10.127,3262,7.416,3275,7.161,3279,9.587,3456,13.049,3804,13.402,4016,17.021,4017,15.76,4018,14.93,4019,17.021,4020,14.93,4021,14.31,4022,15.76]],["keywords/527",[]],["title/528",[894,1064.028]],["content/528",[]],["keywords/528",[]],["title/529",[195,156.745,397,241.681,616,291.743]],["content/529",[2,1.212,3,1.883,7,4.706,8,4.213,16,1.683,43,3.059,49,2.997,127,4.109,160,5.461,185,4.067,195,2.307,206,4.82,208,6.966,222,2.671,224,1.323,230,3.945,246,13.372,250,6.507,259,8.068,287,4.986,365,11.135,397,4.575,399,2.38,400,4.943,440,4.514,447,7.833,448,4.055,465,3.865,469,4.297,518,4.53,575,2.795,602,8.616,616,2.971,677,5.195,761,12.096,791,6.864,894,7.152,964,11.082,1032,7.705,1105,7.002,1114,9.173,1155,11.874,1278,12.896,1294,12.33,1761,10.219,1762,7.075,1945,6.676,2439,9.173,2470,15.617,3122,8.363,3262,5.076,4021,9.794,4023,11.65,4024,20.052,4025,10.787,4026,11.65,4027,10.219,4028,11.65,4029,11.65,4030,11.65,4031,11.65,4032,11.65]],["keywords/529",[]],["title/530",[2042,532.102]],["content/530",[2,2.158,22,2.016,71,6.832,160,10.869,161,6.126,195,2.158,222,2.5,226,3.55,321,7.546,340,3.507,345,6.832,347,5.678,354,3.887,355,4.053,367,5.974,396,6.545,422,4.849,515,8.061,575,3.78,616,4.017,627,5.899,641,6.894,642,8.34,656,13.244,675,10.014,810,7.092,894,12.732,895,6.219,896,7.729,908,8.329,921,6.742,1293,11.308,2042,4.836,3274,11.1,3471,7.676,3484,7.959,3931,11.1]],["keywords/530",[]],["title/531",[2,70.881,22,66.215,354,168.042,355,175.235,894,418.12,895,204.236,3471,331.852]],["content/531",[160,10.656,198,9.228,206,8.357,226,4.552,228,4.204,281,3.49,340,3.37,355,5.849,359,6.507,526,4.296,533,6.916,575,5.454,626,7.022,627,6.429,679,7.022,698,7.85,700,10.315,707,5.22,849,5.661,894,14.889,1042,6.09,1155,11.274,1189,6.02,1294,11.086,1539,11.086,1604,14.233,1762,9.194,1837,7.553,3274,10.667,3484,7.648,4033,15.138,4034,14.017,4035,11.33,4036,14.017,4037,15.138]],["keywords/531",[]],["title/532",[1,139.372,16,89.367,22,60.132,224,70.26,347,222.918,627,157.369,896,230.491,3274,435.82]],["content/532",[22,1.705,160,8.22,198,8.011,340,3.903,526,4.976,537,12.587,575,5.333,579,7.971,627,6.528,652,5.834,700,11.948,894,13.645,896,8.283,903,13.124,1189,6.974,1294,12.841,1604,15.661,1762,10.649,1943,10.048,3274,12.356,4034,16.236,4035,13.124,4036,16.236,4038,16.236,4039,17.535,4040,17.535]],["keywords/532",[]],["title/533",[16,250.43]],["content/533",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,894,11.275,1023,4.314]],["keywords/533",[]],["title/534",[282,329.633]],["content/534",[2,0.888,3,1.379,16,1.233,18,4.755,19,3.07,20,2.838,22,1.295,30,4.258,31,2.205,52,3.459,67,4.064,86,3.917,97,3.804,105,8.466,110,7.679,160,3.999,168,1.722,195,2.244,222,2.113,224,0.969,226,1.922,230,5.548,258,1.702,263,2.619,279,2.806,282,3.521,283,3.201,329,3.317,330,4.497,334,3.515,347,5.904,352,2.463,354,2.105,355,2.195,360,3.822,397,4.241,399,1.743,422,2.626,426,6.204,427,3.095,428,6.063,437,4.365,448,4.635,464,2.137,465,2.83,469,3.147,515,4.365,516,4.765,540,6.452,568,5.086,579,6.054,616,2.175,627,4.168,656,7.172,689,3.743,693,2.23,714,3.33,761,7.438,810,3.84,814,5.423,851,3.126,875,2.38,894,13.644,895,6.38,896,6.105,908,5.885,921,3.651,964,4.365,1042,5.358,1133,4.784,1294,16.84,1344,8.088,1535,3.317,1621,5.181,1716,4.258,1748,4.206,1809,8.364,1875,4.483,1973,5.076,2255,9.968,3262,3.717,3263,4.042,3274,6.011,3411,4.846,3471,4.157,3492,5.358,3493,5.296,3804,6.717,3951,6.54,4020,11.681,4021,16.878,4041,8.531,4042,8.531,4043,8.531,4044,7.899,4045,7.899,4046,8.531,4047,8.531]],["keywords/534",[]],["title/535",[1023,407.123]],["content/535",[1,3.836,15,4.236,86,7.816,123,7.896,222,2.701,224,1.934,258,3.397,347,6.135,397,3.596,399,3.477,689,4.784,707,5.87,838,7.317,842,5.799,847,6.387,851,6.237,895,5.104,908,6.115,1023,3.998,1133,7.835,1142,5.943,1294,12.465,1809,10.691,2125,10.127,3262,7.416,3275,7.161,3279,9.587,3337,15.76,3456,13.049,3804,13.402,4017,15.76,4018,14.93,4020,14.93,4022,15.76,4045,15.76,4048,17.021]],["keywords/535",[]],["title/536",[3338,1406.653]],["content/536",[]],["keywords/536",[]],["title/537",[195,156.745,397,241.681,616,291.743]],["content/537",[2,2.04,3,3.168,7,7.918,8,7.089,19,5.491,22,1.906,31,5.067,49,5.044,127,4.785,208,8.111,224,2.227,375,13.091,399,4.005,469,7.231,714,7.651,3338,15.91,4049,19.604]],["keywords/537",[]],["title/538",[2042,532.102]],["content/538",[224,2.388,226,4.737,277,4.432,340,4.679,352,6.069,445,6.437,526,5.965,652,6.994,896,7.834,3338,20.157]],["keywords/538",[]],["title/539",[16,250.43]],["content/539",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3338,14.905]],["keywords/539",[]],["title/540",[282,329.633]],["content/540",[18,5.492,19,4.76,22,2.007,41,11.461,97,6.977,112,5.237,113,4.86,160,9.679,195,2.144,258,3.123,282,3.927,291,4.294,397,4.362,399,3.196,426,7.449,652,6.87,895,6.192,896,7.695,1155,7.76,1190,18.111,1716,6.602,1859,11.532,1875,6.951,3457,11.996,4050,15.647,4051,14.488,4052,14.488]],["keywords/540",[]],["title/541",[1023,407.123]],["content/541",[15,4.798,41,9.561,113,4.538,160,9.037,222,3.059,224,2.19,258,3.847,397,4.073,399,3.938,707,6.648,838,8.287,842,6.568,847,7.234,3275,8.11,3277,10.434,4051,17.851,4052,17.851,4053,19.279,4054,19.279,4055,19.279,4056,19.279]],["keywords/541",[]],["title/542",[59,505.351,61,399.429,1150,398.191]],["content/542",[]],["keywords/542",[]],["title/543",[2042,532.102]],["content/543",[13,3.711,20,5.582,22,2.101,24,4.345,31,4.336,62,10.443,106,6.106,186,5.219,206,6.941,224,1.906,316,6.572,513,10.141,526,6.783,575,4.025,627,5.497,651,8.727,749,8.32,895,5.031,902,7.376,1133,6.027,1150,7.52,1598,10.082,1991,10.943,2020,7.309,3578,12.286,4057,16.776,4058,16.776,4059,12.861]],["keywords/543",[]],["title/544",[16,250.43]],["content/544",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,1991,11.98]],["keywords/544",[]],["title/545",[282,329.633]],["content/545",[6,6.182,13,4.931,16,1.935,18,3.679,19,4.284,20,7.101,22,1.807,23,8.05,24,4.814,30,2.748,31,4.254,43,2.257,59,3.796,60,10.38,61,3,62,9.221,71,8.06,73,2.973,106,4.875,108,4.237,113,3.153,120,3.85,130,10.033,139,3.946,155,3.392,186,2.674,195,1.835,198,3.926,206,3.556,222,2.612,229,3.6,230,4.536,231,3.431,238,7.42,258,1.715,270,2.688,282,2.547,288,4.456,317,5.952,334,3.541,340,1.913,360,3.85,368,4.875,377,4.398,399,1.756,426,6.499,427,5.971,455,4.518,490,2.398,494,8.535,513,5.683,526,3.801,550,4.029,575,2.062,609,6.294,615,8.315,714,5.228,717,4.288,771,3.694,808,3.662,818,4.05,835,6.381,858,4.84,1007,4.487,1076,5.952,1133,3.087,1150,4.662,1196,4.925,1267,3.646,1412,8.223,1679,3.946,1716,4.283,1875,4.509,2181,5.952,2487,6.056,2851,12.319,3034,8.05,3263,4.072,3445,7.225,3587,6.975,3588,6.975,3589,6.767,3590,6.767,3591,6.975,3592,6.975,3593,6.975,3594,7.225,3595,6.975,3596,6.975,3597,6.975,3598,6.975,3599,6.975,3600,7.225,3601,7.957,4060,7.225]],["keywords/545",[]],["title/546",[1023,407.123]],["content/546",[13,3.836,14,4.211,19,2.798,23,7.294,62,8.369,89,3.736,98,7.535,105,7.715,130,5.464,136,4.685,139,5.573,155,4.79,220,5.149,222,3.21,224,1.379,254,8.651,258,2.422,284,3.649,345,5.264,397,2.564,399,3.542,427,4.403,477,9.304,526,4.92,578,6.519,689,3.411,707,4.185,838,5.217,842,5.907,847,4.554,849,4.538,1143,6.093,1230,8.991,1614,6.67,1798,7.715,1800,6.519,1991,7.917,2105,7.451,2108,9.556,2510,9.765,3034,7.294,3275,5.106,3297,11.237,3432,5.814,3513,15.14,3602,9.85,3603,9.556,3604,9.85,3605,9.85,3606,9.85,3607,9.85,3608,9.85,3609,10.203,3610,11.237,4060,10.203,4061,11.237,4062,11.237,4063,11.237,4064,11.237,4065,11.237,4066,11.237,4067,11.237,4068,11.237,4069,11.237,4070,11.237,4071,11.237,4072,16.054,4073,10.645,4074,10.203,4075,11.237,4076,11.237,4077,11.237,4078,11.237,4079,11.237,4080,11.237,4081,11.237,4082,11.237]],["keywords/546",[]],["title/547",[59,377.154,61,298.102,195,116.983,771,367.042,1412,524.187]],["content/547",[1,1.552,2,1.479,3,1.113,6,3.179,11,1.877,16,2.95,19,5.075,22,0.67,23,9.851,24,5.703,30,6.19,31,1.78,43,1.809,49,2.889,59,3.043,60,9.155,61,2.405,62,4.646,67,5.349,70,2.771,87,4.665,98,4.277,105,4.379,106,2.507,111,8.223,130,3.101,139,3.163,155,2.719,195,2.797,196,2.669,207,2.948,222,2.601,224,1.615,226,1.552,230,3.802,231,4.483,238,6.22,250,3.847,251,2.055,258,2.241,263,5.032,272,3.525,275,6.893,277,1.452,282,2.135,288,3.572,296,2.709,307,2.319,312,2.948,318,4.854,321,3.3,332,4.327,340,2.499,368,5.966,380,4.14,399,1.407,404,3.825,427,5.156,434,3.458,440,4.35,448,6.738,464,3.561,465,3.725,469,4.142,490,4.573,503,4.327,550,3.229,551,2.793,579,3.132,607,3.072,615,4.277,616,3.624,642,3.647,678,4.229,736,3.647,814,4.379,823,3.043,829,3.101,849,2.576,920,3.621,926,3.572,957,4.14,976,6.11,1021,3.246,1023,1.618,1044,3.913,1303,4.854,1412,6.893,1637,4.379,1683,5.156,1684,4.059,1731,6.615,1800,9.697,1876,4.277,1885,4.379,1991,7.324,2025,3.947,2055,4.14,2081,4.14,2105,10.063,2422,6.893,2510,9.232,3034,10.849,3122,4.945,3128,5.156,3152,4.945,3411,3.913,3611,5.591,3612,5.424,3613,5.791,3614,5.424,3615,5.424,3616,5.424,3617,5.424,3618,5.424,3619,5.424,3620,5.424,3621,5.424,3622,5.424,3623,5.424,3624,5.424,3625,5.424,3626,7.052,3627,5.424,3628,5.424,3629,8.841,3630,5.424,3631,5.424,3632,5.424,3633,5.424,3634,5.424,3635,5.424,3636,5.424,3637,5.424]],["keywords/547",[]],["title/548",[16,109.486,513,321.5,526,215.036,771,325.727,1150,263.728,4083,701.608]],["content/548",[2,1.618,4,5.571,13,3.439,15,5.116,16,3.175,19,3.583,22,2.136,24,2.706,25,4.411,36,4.018,62,4.322,83,5.742,106,6.756,127,2.55,136,4.033,159,8.225,162,4.322,222,1.658,226,2.354,230,3.538,241,4.34,258,2.085,321,5.004,326,6.215,329,4.062,343,3.88,352,3.016,363,5.381,367,3.961,385,3.426,406,8.225,447,4.139,465,5.156,513,7.875,519,5.742,526,6.536,556,4.551,557,4.593,579,4.749,602,5.346,626,4.846,627,2.658,638,6.641,644,4.171,758,6.909,804,4.305,810,4.703,842,3.559,847,5.832,849,3.906,871,5.278,872,6.155,945,8.782,965,8.782,1023,3.651,1050,4.376,1133,7.894,1141,6.641,1145,16.28,1146,16.092,1150,3.636,1196,5.986,1840,7.499,1916,5.381,1991,6.814,2023,6.155,4060,8.782,4083,19.033,4084,7.499,4085,10.447,4086,10.447,4087,10.447,4088,10.447,4089,10.447,4090,10.447,4091,10.447,4092,10.447,4093,10.447,4094,10.447,4095,10.447,4096,10.447,4097,10.447,4098,10.447]],["keywords/548",[]],["title/549",[70,554.539,1150,479.72]],["content/549",[]],["keywords/549",[]],["title/550",[195,156.745,397,241.681,616,291.743]],["content/550",[2,1.882,3,2.922,7,7.303,8,6.538,22,1.758,31,4.673,49,4.652,127,4.413,139,8.302,173,6.784,195,2.477,397,5.644,399,3.693,422,5.565,469,6.669,527,9.375,616,4.61,632,8.1,652,6.015,1150,6.293,4099,18.08,4100,18.08,4101,18.08,4102,18.08,4103,15.858]],["keywords/550",[]],["title/551",[2042,532.102]],["content/551",[2,2.358,22,2.406,161,7.031,195,2.477,222,2.869,345,7.841,347,8.167,354,4.461,355,4.652,396,7.511,616,4.61,641,7.913,642,9.572,895,5.422,896,6.738,908,8.14,921,7.738,1133,6.495,1142,6.312,1150,6.293,2042,5.551,3471,8.809,3484,9.134,3931,12.74]],["keywords/551",[]],["title/552",[14,420.758,15,188.594,632,543.291,1163,426.764]],["content/552",[14,8.248,15,5.17,25,5.091,70,8.356,115,6.686,127,3.108,185,6.263,193,13.138,198,5.818,226,4.043,270,7.435,277,2.685,303,7.678,357,8.41,385,4.176,526,6.399,551,7.275,579,8.156,611,8.422,627,4.565,632,10.102,644,7.162,823,7.924,1150,7.229,1163,7.172,1537,16.354,1708,6.205,1840,12.878,2065,13.753,2086,7.432,2094,7.781,2229,12.038,2234,13.753,3411,7.234,4104,17.94,4105,11.17,4106,16.611,4107,17.94,4108,12.734,4109,12.734,4110,12.734]],["keywords/552",[]],["title/553",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,1150,237.045,3471,331.852]],["content/553",[14,7.862,25,5.131,49,5.83,70,9.957,89,3.896,162,7.48,297,9.573,316,7.083,526,7.583,557,7.949,627,4.6,632,10.152,1150,9.03,1795,10.652,2024,13.86,4111,18.08]],["keywords/553",[]],["title/554",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/554",[14,6.607,16,2.005,18,3.101,22,1.349,25,5.404,36,5.336,49,4.899,69,3.871,70,9.866,89,4.104,180,6.721,206,7.878,297,5.861,322,10.924,360,6.216,365,12.593,422,4.271,526,6.64,557,8.372,601,10.855,632,6.216,654,7.194,741,7.566,799,11.26,895,4.16,896,9.44,1142,4.844,1150,8.817,1442,7.749,1795,8.174,1916,7.146,1945,7.95,1974,6.84,1986,8.613,2024,10.636,2094,8.259,2846,8.517,4059,10.636,4112,10.924,4113,13.874]],["keywords/554",[]],["title/555",[16,250.43]],["content/555",[1,5.597,2,2.37,16,3.29,22,1.772,24,4.72,70,7.331,89,3.927,163,6.063,224,2.955,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1150,6.342]],["keywords/555",[]],["title/556",[282,329.633]],["content/556",[2,0.7,3,1.088,8,2.433,14,6.643,18,5.142,19,2.539,20,2.239,22,1.071,30,5.168,36,2.588,43,1.767,49,1.731,52,2.729,69,1.878,70,7.703,86,3.09,89,3.014,107,3.513,113,2.593,123,5.11,139,3.09,168,2.824,173,7.184,195,1.509,206,4.558,207,4.714,219,3.044,222,1.068,226,1.516,230,2.279,258,1.343,274,3.538,281,2.539,282,3.074,283,2.525,312,2.88,320,5.463,329,2.617,330,2.272,334,4.539,335,1.516,343,2.499,347,2.425,352,1.943,354,1.66,355,1.731,359,2.893,397,1.422,399,1.375,413,5.084,426,6.846,427,3.996,428,7.086,448,2.342,464,1.686,465,2.232,469,2.482,526,5.06,551,4.467,557,7.107,568,4.207,601,7.498,627,2.803,632,9.781,644,2.686,652,2.239,689,3.096,693,1.759,714,2.626,721,5.431,788,4.004,846,3.242,851,2.466,875,1.878,895,2.018,896,6.645,897,2.543,908,3.957,998,4.044,1049,3.206,1074,3.358,1106,4.83,1133,3.957,1142,3.846,1150,6.664,1155,3.337,1163,3.79,1189,2.676,1535,2.617,1537,5.298,1589,5.037,1621,4.087,1716,3.522,1803,5.791,1809,6.918,1837,5.496,1875,3.708,1921,5.461,1945,3.856,1948,5.461,2094,7.733,2171,5.657,2211,4.66,2340,10.2,2739,5.657,3262,2.932,3263,3.188,3411,3.822,3430,3.337,3471,3.279,3485,5.159,3486,5.159,3487,5.461,3678,5.902,3766,6.369,3950,4.66,3973,9.662,4059,8.445,4103,9.662,4105,5.902,4114,6.729,4115,11.757,4116,6.729,4117,12.949,4118,6.729,4119,6.231,4120,6.729,4121,11.015,4122,6.729]],["keywords/556",[]],["title/557",[1023,407.123]],["content/557",[1,3.304,15,3.649,71,6.359,86,6.732,123,11.106,173,5.501,185,5.119,222,2.326,224,1.665,258,2.926,347,5.284,397,3.097,399,2.995,400,6.22,689,4.12,707,5.056,838,6.302,842,4.995,847,5.501,851,5.372,895,4.396,908,5.267,1023,3.444,1133,5.267,1150,5.103,1537,11.544,1796,8.904,2125,8.723,3262,6.387,3273,9.208,3275,6.168,3323,11.899,3430,7.271,3496,9.696,3500,9.001,3501,13.692,3742,12.86,3744,11.544,3950,10.153,3966,13.692,3997,12.325,4105,12.86,4106,13.575,4117,13.575,4123,14.661,4124,14.661,4125,14.661,4126,14.661,4127,14.661,4128,19.77,4129,14.661,4130,14.661,4131,14.661]],["keywords/557",[]],["title/558",[173,517.202,632,617.512]],["content/558",[2,1.811,3,2.813,7,7.029,22,1.692,42,8.246,49,4.478,66,3.842,70,7.002,79,4.698,173,9.912,174,9.886,244,7.991,281,4.012,324,8.529,397,4.673,422,6.809,505,8.848,526,4.939,541,9.025,632,7.797,681,11.549,1150,7.699,1273,10.684,4059,13.342,4103,15.265,4119,16.114]],["keywords/558",[]],["title/559",[550,646.112,689,387.369]],["content/559",[]],["keywords/559",[]],["title/560",[4132,1604.808]],["content/560",[25,4.66,36,8.197,43,5.595,70,8.573,77,9.972,79,4.432,89,3.539,107,8.573,173,6.162,192,8.144,195,2.92,207,7.028,550,11.09,652,7.09,659,11.019,676,8.048,689,4.615,812,7.357,930,8.756,1150,5.715,1155,10.568,1211,9.674,1292,12.588,1393,8.458,1559,10.711,1560,13.805,1775,8.821,1974,10.505,3206,14.403,4059,12.588,4132,19.731,4133,16.42]],["keywords/560",[]],["title/561",[1150,479.72,1449,989.405]],["content/561",[]],["keywords/561",[]],["title/562",[2042,532.102]],["content/562",[1,4.138,16,2.654,22,1.786,24,4.757,127,4.483,162,7.598,224,2.599,297,7.759,386,9.054,397,3.88,448,6.392,457,8.228,526,5.212,597,10.524,627,4.673,731,7.598,1150,8.675,1449,17.892,1916,9.46,2067,12.324,2105,11.275,4134,18.365]],["keywords/562",[]],["title/563",[16,250.43]],["content/563",[1,5.461,2,2.291,8,6.246,16,2.496,22,1.679,24,4.475,89,3.723,163,5.747,207,7.393,224,2.899,226,4.961,228,4.797,277,3.642,303,7.393,354,4.262,355,4.444,372,5.332,445,6.741,464,4.328,490,4.82,804,7.118,875,4.82,1023,4.058,1150,7.662,1449,15.803]],["keywords/563",[]],["title/564",[282,329.633]],["content/564",[18,4.495,19,4.636,24,6.266,106,7.321,258,4.014,282,3.825,343,7.469,895,6.031,1133,8.69,1150,7,1449,14.437,1716,6.431,1875,6.771,3481,12.785]],["keywords/564",[]],["title/565",[399,354.058]],["content/565",[14,6.58,18,5.217,19,4.372,24,6.55,120,11.329,282,3.607,426,6.806,467,7.69,485,8.262,625,10.187,1150,8.124,1449,16.755,1716,6.064,1875,6.384,4135,18.964]],["keywords/565",[]],["title/566",[1023,407.123]],["content/566",[120,8.783,222,3.11,224,2.227,258,3.912,397,4.141,399,4.005,707,6.76,838,8.427,842,6.679,847,7.356,1133,7.043,1150,6.823,3275,8.247,4136,19.604,4137,19.604,4138,19.604,4139,19.604,4140,19.604,4141,19.604]],["keywords/566",[]],["title/567",[541,593.262,1150,398.191,4142,1144.071]],["content/567",[]],["keywords/567",[]],["title/568",[195,156.745,397,241.681,616,291.743]],["content/568",[2,2.313,3,3.592,7,7.082,8,6.34,16,2.534,31,4.532,49,4.512,127,4.28,195,2.402,222,2.782,274,9.218,386,13.052,397,4.695,399,3.582,469,6.468,632,7.856,3730,19.495,4143,15.38,4144,17.535,4145,17.535,4146,17.535,4147,17.535,4148,17.535,4149,17.535,4150,17.535]],["keywords/568",[]],["title/569",[2042,532.102]],["content/569",[2,1.825,13,4.917,22,2.161,161,6.819,195,2.402,222,2.782,345,7.605,347,6.32,354,4.326,355,4.512,396,7.285,422,5.398,513,9.43,526,6.307,541,9.093,616,4.471,641,7.674,642,9.283,895,5.258,897,6.626,908,7.985,921,7.505,1150,7.736,2042,5.383,3471,8.544,3484,8.859,3931,12.356]],["keywords/569",[]],["title/570",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,1150,237.045,3471,331.852]],["content/570",[14,7.039,22,1.972,147,10.898,526,7.39,541,10.52,644,8.099,897,7.666,1126,6.975,1143,10.186,1150,8.463,2093,14.563,4059,15.553]],["keywords/570",[]],["title/571",[13,188.901,347,307.742,513,362.279,526,242.31,895,256.047]],["content/571",[6,5.515,13,3.793,14,4.146,16,1.727,22,1.162,24,3.095,25,3.391,30,3.821,61,4.172,66,2.638,106,6.241,127,2.917,147,6.419,186,3.718,224,1.357,274,9.014,277,2.519,352,4.95,367,6.502,385,3.919,386,5.891,422,3.678,447,6.793,513,9.297,526,7.353,541,13.196,556,5.206,601,5.543,644,4.771,652,5.705,731,7.094,752,4.681,864,4.321,871,6.037,875,3.334,877,8.42,897,8.28,902,5.254,1112,7.693,1133,4.293,1150,9.265,1189,6.819,1401,5.543,1709,6.419,1905,8.42,2042,3.669,2093,8.578,2676,11.064,3053,7.418,3934,10.046,4059,9.161,4151,11.949,4152,15.04,4153,8.276]],["keywords/571",[]],["title/572",[16,250.43]],["content/572",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,541,9.449,875,5.084,1023,4.28,1150,6.342]],["keywords/572",[]],["title/573",[282,329.633]],["content/573",[2,0.966,6,4.283,13,3.144,14,4.931,16,1.341,18,5.121,19,3.982,20,3.087,22,1.382,24,2.404,30,4.544,36,3.569,49,2.388,52,3.763,86,4.261,101,7.801,106,5.173,127,2.265,136,3.582,190,7.307,195,2.367,226,3.203,241,5.905,258,1.852,274,7.472,282,3.682,283,3.482,329,3.609,330,3.133,347,3.345,352,2.679,354,3.507,355,3.657,397,1.96,399,1.896,400,3.937,422,2.856,426,6.682,427,3.367,428,6.394,464,2.325,513,8.214,526,4.902,541,8.957,568,3.544,594,4.138,632,6.368,654,7.37,682,3.691,689,3.994,693,2.426,714,5.547,721,4.575,737,8.592,846,4.47,851,3.4,864,3.355,895,5.18,897,6.527,908,6.206,925,4.24,974,5.318,1049,4.421,1123,8.139,1133,6.206,1150,6.012,1535,3.609,1621,5.636,1716,4.544,1748,4.575,1875,4.785,1974,8.516,2093,10.202,2127,5.577,2248,5.271,3262,6.192,3263,4.397,3471,4.521,3481,5.899,3482,6.227,3484,4.688,3492,5.828,3493,5.761,3494,6.539,4154,7.801,4155,8.139,4156,8.592,4157,8.592,4158,9.28,4159,9.28,4160,7.307,4161,9.28,4162,9.28]],["keywords/573",[]],["title/574",[274,724.603,632,617.512]],["content/574",[2,1.206,11,3.159,31,4.336,49,2.983,106,4.219,127,2.829,154,7.561,168,2.34,195,2.701,263,5.15,274,11.359,282,2.205,312,4.961,343,4.305,354,2.86,364,6.529,397,2.449,408,4.94,417,6.529,426,6.301,445,3.549,448,4.035,467,6.802,541,8.699,568,4.427,616,4.278,632,10.271,846,5.584,875,3.234,1059,9.127,1110,6.371,1150,5.839,1796,7.04,1809,7.281,1854,10.168,1947,17.576,1948,16,2132,6.052,4156,15.533,4163,10.168,4164,10.733,4165,16.775,4166,11.592,4167,11.592,4168,11.592,4169,11.592,4170,11.592,4171,11.592,4172,11.592,4173,11.592,4174,11.592,4175,11.592,4176,11.592,4177,11.592,4178,11.592,4179,11.592,4180,11.592,4181,11.592,4182,11.592,4183,11.592,4184,11.592,4185,11.592,4186,11.592,4187,11.592,4188,11.592,4189,11.592,4190,11.592,4191,11.592,4192,11.592,4193,11.592,4194,11.592,4195,11.592,4196,11.592,4197,11.592,4198,11.592]],["keywords/574",[]],["title/575",[1023,407.123]],["content/575",[86,5.27,89,2.473,123,5.324,222,2.643,224,1.304,254,5.727,258,2.29,284,3.451,347,4.137,397,5.505,399,2.345,400,11.057,457,5.142,459,9.649,513,4.87,541,5.952,689,7.324,707,3.958,838,4.934,842,3.91,847,9.779,851,9.549,895,3.442,908,4.123,925,5.244,1023,2.696,1042,4.618,1133,4.123,1150,3.995,2125,6.829,3262,5,3275,4.828,3277,6.212,3432,12.484,3495,7.046,3503,9.037,3846,8.799,4157,10.627,4160,9.037,4199,11.478,4200,10.067,4201,10.627,4202,10.627,4203,11.478,4204,10.627,4205,11.478,4206,10.627,4207,10.627]],["keywords/575",[]],["title/576",[546,544.018,2215,812.067]],["content/576",[]],["keywords/576",[]],["title/577",[195,188.839,1023,323.765]],["content/577",[31,3.862,43,3.924,70,6.012,77,9.075,78,8.149,111,17.67,152,8.087,162,6.183,170,12.128,173,5.607,194,13.062,196,5.79,205,7.005,222,2.371,226,3.367,274,10.528,298,7.598,329,5.811,360,6.695,448,5.201,452,8.804,464,3.744,509,8.804,518,5.811,526,5.683,541,11.712,550,9.387,551,6.06,553,10.53,652,6.663,660,7.005,925,6.827,1023,5.305,1150,5.201,1401,6.932,1551,10.028,1552,9.62,1972,11.185,2248,8.489,4153,10.349,4160,11.766,4208,12.128,4209,12.563,4210,13.837]],["keywords/577",[]],["title/578",[495,508.435,536,876.205]],["content/578",[43,4.193,49,4.109,115,5.951,186,6.511,195,3.198,224,1.814,251,4.764,274,12.271,290,6.865,291,5.742,316,6.256,360,7.155,368,5.813,394,7.155,445,4.89,530,9.32,541,12.103,652,5.313,721,7.873,812,7.155,912,11.463,920,11.001,929,8.172,1007,8.338,1150,8.124,1549,11.06,1593,10.881,1832,8.709,1974,7.873,2081,9.598,2846,9.804,3969,11.953,4211,15.969,4212,15.969,4213,15.969]],["keywords/578",[]],["title/579",[541,593.262,1150,398.191,1616,674.055]],["content/579",[]],["keywords/579",[]],["title/580",[195,156.745,397,241.681,616,291.743]],["content/580",[2,1.927,3,2.992,7,7.477,8,6.694,49,4.763,127,4.518,195,2.536,222,2.937,274,12.089,386,12.332,397,3.91,399,3.782,469,6.829,575,4.441,616,4.72,632,8.293,654,9.599,3729,15.563,3730,16.237,4214,18.511,4215,18.511,4216,18.511,4217,18.511]],["keywords/580",[]],["title/581",[2042,532.102]],["content/581",[2,1.586,8,5.51,13,3.371,14,5.287,22,2.217,25,4.324,30,4.872,61,5.32,89,3.284,161,5.925,163,5.07,195,2.088,224,2.305,282,3.858,340,4.516,347,5.492,352,6.585,354,3.759,355,3.92,367,5.778,386,7.512,396,6.33,422,4.69,447,6.037,513,6.465,526,4.324,541,11.827,556,6.638,601,7.068,652,5.07,895,4.569,908,5.474,1126,5.238,1143,7.65,1150,9.063,1616,8.977,1709,8.185,2042,4.678,3484,7.698]],["keywords/581",[]],["title/582",[13,188.901,347,307.742,513,362.279,526,242.31,895,256.047]],["content/582",[6,7.032,13,5.046,16,2.202,24,3.947,66,3.364,106,7.384,224,1.731,226,3.434,282,3.858,340,3.392,352,5.857,385,4.997,422,6.245,445,4.666,447,6.037,513,10.317,526,7.39,541,10.52,627,3.877,731,6.304,823,6.73,849,5.698,864,5.51,871,7.698,877,10.737,902,6.699,1049,7.259,1133,5.474,1150,7.938,1189,8.068,1401,7.068,1616,8.977,2042,4.678,4152,17.795]],["keywords/582",[]],["title/583",[16,250.43]],["content/583",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,541,9.449,875,5.084,1023,4.28,1150,6.342,1616,10.736]],["keywords/583",[]],["title/584",[282,329.633]],["content/584",[2,0.943,6,4.183,13,2.005,14,3.144,18,4.874,19,3.217,20,3.015,22,0.881,24,2.348,25,2.572,30,4.463,33,5.447,43,3.665,52,3.675,77,5.504,86,4.161,89,1.953,106,5.08,115,3.377,127,2.212,162,3.75,163,3.015,190,7.136,195,2.62,208,3.75,213,5.564,224,1.029,226,3.835,228,2.517,241,3.765,258,1.809,274,8.948,281,2.089,282,4.148,284,2.725,330,4.713,347,5.03,354,2.236,355,2.332,397,1.914,399,1.851,400,7.222,422,2.79,426,6.626,427,3.288,428,6.3,464,3.497,465,3.007,485,3.948,513,7.222,526,2.572,541,9.915,554,6.175,594,4.041,632,7.626,652,3.015,682,3.604,689,2.547,693,2.369,714,6.643,846,4.366,851,3.321,864,3.277,895,5.733,908,6.115,921,3.879,925,7.776,1023,2.129,1049,4.317,1133,6.115,1150,7.186,1155,6.922,1256,6.505,1535,3.524,1621,5.504,1709,4.868,1716,4.463,1801,7.619,1875,4.699,1974,4.468,2054,7.136,2174,5.834,2487,6.386,2569,6.783,3263,4.294,3481,5.761,3482,6.081,3492,5.692,3493,5.626,3494,6.386,4154,7.619,4155,7.949,4160,7.136,4218,8.391,4219,9.063,4220,8.391,4221,9.063,4222,9.063]],["keywords/584",[]],["title/585",[274,724.603,632,617.512]],["content/585",[11,3.873,15,5.883,22,1.382,31,3.673,106,5.173,127,3.469,195,2.652,263,5.943,274,11.574,282,2.703,354,3.507,364,8.005,397,3.002,408,6.057,426,4.145,541,7.37,568,5.428,616,3.624,632,9.863,717,7.092,846,6.847,1059,15.242,1110,7.812,1150,4.947,1854,12.467,1947,14.841,2132,7.42,3530,13.407,4163,16.98,4164,17.925,4223,17.925,4224,23.627,4225,13.16,4226,19.358,4227,14.213,4228,14.213,4229,14.213,4230,14.213,4231,14.213,4232,14.213,4233,14.213,4234,14.213,4235,14.213]],["keywords/585",[]],["title/586",[1023,407.123]],["content/586",[86,5.753,123,8.227,195,1.717,222,1.988,224,1.423,258,2.5,347,4.516,397,5.443,399,2.559,400,10.932,457,5.613,459,10.533,513,5.316,541,6.497,689,7.241,707,4.32,838,5.386,842,4.268,847,9.668,851,9.44,895,3.757,908,4.501,925,5.724,1023,2.943,1042,5.041,1133,4.501,1150,4.361,1350,8.537,3275,5.271,3277,6.78,3340,11.601,3432,12.342,3495,7.692,3846,9.605,4160,9.865,4200,10.989,4201,11.601,4202,11.601,4204,11.601,4206,11.601,4207,11.601,4218,11.601,4220,11.601]],["keywords/586",[]],["title/587",[546,544.018,2215,812.067]],["content/587",[]],["keywords/587",[]],["title/588",[195,188.839,1023,323.765]],["content/588",[31,4.017,43,4.081,70,6.253,77,9.439,111,17.949,162,6.431,170,12.614,173,5.832,194,13.409,195,2.129,205,7.286,226,3.502,274,8.171,298,7.902,329,6.044,360,6.963,448,5.41,452,9.157,464,3.894,509,9.157,518,6.044,526,5.834,541,11.944,550,9.636,551,6.303,553,10.952,652,6.839,660,7.286,925,7.101,1023,4.829,1150,5.41,1401,7.21,1552,10.006,1972,11.633,2248,8.829,4153,10.764,4160,12.238,4208,12.614,4209,13.067,4210,14.391]],["keywords/588",[]],["title/589",[1150,479.72,2920,911.566]],["content/589",[]],["keywords/589",[]],["title/590",[195,188.839,638,876.205]],["content/590",[2,1.673,3,3.913,7,6.495,15,6.414,22,1.063,42,5.182,49,4.137,79,6.842,88,6.574,89,2.357,93,7.707,113,2.575,120,7.204,139,5.022,160,7.538,195,1.499,218,6.715,224,1.243,235,5.634,270,6.575,282,2.08,283,4.104,289,5.022,335,2.465,343,8.318,356,12.722,396,4.544,444,8.01,445,3.349,464,2.74,465,3.629,485,4.765,556,7.005,575,5.043,638,6.953,677,4.877,709,7.453,750,8.187,792,4.507,925,7.346,929,5.597,974,6.268,998,6.574,1326,6.16,1355,6.508,1530,14.104,1532,14.104,1643,7.619,1673,10.128,2243,8.612,2495,9.195,2920,10.634,4236,16.08,4237,10.938,4238,10.938,4239,10.938,4240,10.938,4241,16.08,4242,10.938,4243,10.938,4244,10.938,4245,10.938,4246,10.938]],["keywords/590",[]],["title/591",[2042,532.102]],["content/591",[13,4.095,66,4.087,106,6.738,186,5.759,335,4.171,340,4.12,352,5.345,374,6.852,385,6.071,422,5.698,513,11.101,526,7.635,627,4.71,902,8.139,1150,6.443,1598,11.126,2020,8.065,2920,12.243,2922,17.14]],["keywords/591",[]],["title/592",[16,250.43]],["content/592",[1,5.617,2,2.381,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2920,12.146]],["keywords/592",[]],["title/593",[282,329.633]],["content/593",[3,3.615,16,2.118,18,4.999,19,4.557,30,4.688,61,5.119,106,5.336,108,7.228,113,3.451,120,8.857,195,2.009,222,3.137,228,4.071,258,2.926,281,3.38,282,3.76,335,5.04,399,2.995,401,5.899,426,6.981,513,6.22,526,4.161,616,3.739,631,8.723,836,8.811,875,4.091,926,7.602,1133,7.102,1150,5.103,1535,5.701,1716,6.321,1875,6.655,2120,9.563,2121,9.102,2927,13.575,4247,14.661,4248,14.661,4249,14.661,4250,14.661,4251,12.325,4252,14.661,4253,14.661,4254,14.661]],["keywords/593",[]],["title/594",[1023,407.123]],["content/594",[13,3.894,79,3.346,120,10.542,136,4.785,139,5.692,195,1.698,222,2.793,224,1.408,228,3.442,258,2.474,281,2.857,397,4.706,399,2.532,477,9.502,494,6.428,526,4.995,638,7.88,658,4.968,707,4.274,823,5.475,838,5.328,842,4.223,847,8.36,875,3.458,1230,9.127,1355,7.375,2510,6.981,2920,8.198,3275,5.214,3298,11.477,3513,15.318,4060,10.421,4061,11.477,4062,11.477,4063,11.477,4064,11.477,4065,11.477,4066,11.477,4067,11.477,4068,11.477,4069,11.477,4070,11.477,4071,11.477,4072,16.297,4073,10.872,4074,10.421,4075,11.477,4076,11.477,4077,11.477,4078,11.477,4079,11.477,4080,11.477,4081,11.477,4082,11.477,4251,18.73,4255,12.395,4256,12.395,4257,22.279,4258,12.395,4259,12.395,4260,12.395,4261,12.395,4262,12.395,4263,12.395,4264,12.395]],["keywords/594",[]],["title/595",[401,554.539,1535,535.982]],["content/595",[2,0.908,3,3.622,16,1.26,22,1.821,29,8.412,30,2.789,37,6.262,43,2.29,49,2.244,54,9.438,69,3.781,71,3.783,78,4.757,79,6.049,87,3.624,102,4.721,110,6.352,136,3.367,155,5.348,174,7.697,179,4.554,186,2.714,195,3.07,220,3.701,222,3.407,224,0.991,231,3.482,251,4.957,261,3.24,267,5.615,288,4.523,290,3.75,294,5.479,296,5.328,298,4.435,329,3.392,370,3.908,374,3.229,377,4.464,383,4.794,387,4.226,394,3.908,396,3.624,399,1.782,401,7.537,422,2.685,455,4.586,481,5.355,490,3.781,495,3.218,505,4.435,515,4.464,540,6.565,547,4.493,551,3.537,661,4.586,689,2.451,714,3.405,739,5.479,780,6.262,810,6.1,816,4.832,856,5.139,858,4.913,860,4.721,871,4.407,876,5.615,927,7.079,993,4.721,1005,7.079,1131,7.079,1155,4.326,1260,6.146,1302,5.944,1435,7.333,1443,3.871,1451,8.077,1453,4.757,1535,7.285,1538,8.723,1631,7.651,1702,5.415,1708,4.25,1745,9.093,1754,7.079,1832,4.757,1876,5.415,1955,6.868,2248,4.955,2305,6.041,2545,6.041,2570,6.529,2573,5.545,2920,14.201,3124,5.415,3215,8.077,4251,11.392,4265,12.547,4266,5.479,4267,8.723,4268,8.723,4269,8.723,4270,8.723,4271,8.723,4272,8.723,4273,8.723,4274,8.723,4275,8.723,4276,8.723,4277,8.723,4278,8.077,4279,8.077,4280,8.723]],["keywords/595",[]],["title/596",[61,399.429,690,727.292,1150,398.191]],["content/596",[]],["keywords/596",[]],["title/597",[2042,532.102]],["content/597",[13,3.879,18,3.919,22,1.705,61,7.76,66,3.871,89,3.779,127,4.28,207,7.505,224,1.992,281,4.042,340,3.903,397,3.704,447,6.947,513,10.354,526,6.925,690,11.147,804,7.225,864,6.34,895,5.258,902,7.709,1150,7.736,1165,11.948,2042,5.383,3809,16.236,3813,16.236,4281,16.236,4282,16.236]],["keywords/597",[]],["title/598",[513,584.809,526,391.149]],["content/598",[14,7.164,22,1.225,61,6.215,66,5.227,69,3.515,108,6.21,112,4.216,127,4.345,144,9.225,179,6.577,186,3.919,195,1.726,340,2.804,356,7.155,363,6.488,424,7.155,513,11.132,526,7.322,557,5.538,633,8.453,690,8.008,714,4.916,731,8.543,813,6.978,902,9.078,920,6.622,921,5.391,926,6.532,1074,8.883,1133,4.525,1150,6.196,1157,9.918,1189,8.211,1859,7.036,1864,8.453,1895,9.428,2003,10.59,2023,7.422,2568,7.911,2630,11.774,3691,12.779,3814,13.038,3815,11.663,3817,11.663,3818,11.663,4281,16.484,4282,16.484,4283,12.596,4284,12.596]],["keywords/598",[]],["title/599",[13,253.109,513,485.419,526,324.673]],["content/599",[2,1.99,13,5.749,18,3.119,22,1.357,24,3.615,61,4.873,66,5.426,69,5.335,106,5.08,127,4.667,175,7.611,176,10.989,222,3.034,226,3.145,329,5.427,340,4.256,352,4.03,420,10.221,427,5.063,445,4.274,490,3.894,513,10.768,526,7.374,731,5.775,741,7.611,752,5.468,895,4.185,1074,9.54,1085,9.835,1086,9.835,1150,6.655,1189,5.551,1443,6.194,1736,10.221,1795,8.223,1916,7.189,2106,10.019,2573,8.873,3814,10.221]],["keywords/599",[]],["title/600",[16,250.43]],["content/600",[1,4.572,2,2.111,16,2.931,22,1.972,24,5.255,89,4.372,163,6.75,224,2.762,227,6.523,284,6.099,354,5.006,355,5.22,372,6.262,4285,20.288]],["keywords/600",[]],["title/601",[282,329.633]],["content/601",[14,7.009,18,5.081,19,4.656,22,1.472,61,7.052,106,7.352,113,4.755,130,9.093,258,3.021,282,3.842,343,5.622,399,3.092,426,7.072,447,8.003,513,8.57,526,5.732,895,4.539,1133,5.438,1150,7.03,1716,6.458,1875,6.8,2184,11.605,2630,16.04,3691,14.5,4286,15.138,4287,21.049,4288,12.286,4289,15.138,4290,15.138,4291,15.138]],["keywords/601",[]],["title/602",[222,181.529,356,649.882,1443,507.721]],["content/602",[2,2.136,3,3.811,14,6.13,22,1.718,25,3.536,36,4.793,66,3.901,79,6.028,89,3.807,119,10.216,161,4.846,205,5.842,220,5.287,222,1.977,223,3.869,224,2.007,226,2.808,237,5.405,291,4.848,340,2.774,348,6.645,353,7.65,356,14.304,368,4.536,413,5.751,490,3.477,495,4.597,561,8.022,690,14.197,770,12.939,856,7.342,964,10.504,1014,5.199,1018,8.491,1267,5.287,1366,9.327,1443,9.109,1538,8.022,1554,7.922,1745,11.855,1842,12.682,2080,8.129,2184,9.553,2201,10.114,2708,10.114,3691,12.682,4292,15.032,4293,12.462,4294,12.462,4295,12.462,4296,12.462]],["keywords/602",[]],["title/603",[356,782.945,427,500.036]],["content/603",[18,4.171,22,1.814,106,6.792,109,10.89,195,3.439,222,2.961,224,2.12,231,7.45,345,8.093,356,10.6,377,9.549,404,6.357,408,7.952,427,9.518,495,8.524,616,4.758,704,7.365,1755,12.172,2034,14.692]],["keywords/603",[]],["title/604",[1150,398.191,1775,614.559,2132,597.308]],["content/604",[]],["keywords/604",[]],["title/605",[195,156.745,397,241.681,616,291.743]],["content/605",[2,1.733,3,3.476,7,6.727,8,6.023,31,4.305,49,4.285,127,5.249,173,6.25,195,2.947,288,8.637,343,6.186,360,7.462,397,5.032,399,3.402,465,5.525,469,6.144,540,8.069,541,14.082,616,4.247,859,14.609,1775,12.795,1917,11.349,4297,16.656,4298,16.656,4299,16.656,4300,16.656,4301,16.656]],["keywords/605",[]],["title/606",[274,724.603,632,617.512]],["content/606",[2,1.709,3,2.654,7,6.632,15,4.087,16,2.373,49,4.225,66,3.625,145,9.937,230,5.561,258,3.277,274,12.437,385,6.988,397,3.469,427,5.957,541,11.05,632,9.547,823,7.253,849,7.969,1059,12.929,1150,8.234,1350,11.189,1442,9.171,1704,13.805,1775,8.821,2132,8.573,3341,14.403,3662,15.204,4163,14.403,4223,15.204,4224,19.731,4225,15.204,4302,16.42]],["keywords/606",[]],["title/607",[2042,532.102]],["content/607",[2,1.825,13,4.917,22,2.161,161,6.819,195,2.402,222,2.782,345,7.605,347,6.32,354,4.326,355,4.512,396,7.285,422,5.398,513,9.43,526,6.307,616,4.471,641,7.674,642,9.283,895,5.258,908,7.985,921,7.505,1150,7.736,1775,9.419,2042,5.383,2132,9.155,3471,10.829,3931,12.356]],["keywords/607",[]],["title/608",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,1150,237.045,3471,331.852]],["content/608",[2,1.99,22,1.859,196,7.408,282,3.636,340,4.256,352,6.773,354,4.718,355,4.919,513,8.113,526,6.657,575,4.587,627,4.865,1133,8.428,1150,8.833,1775,10.271,2022,15.055,2132,9.982]],["keywords/608",[]],["title/609",[13,188.901,347,307.742,513,362.279,526,242.31,895,256.047]],["content/609",[6,7.221,8,5.658,13,4.568,16,2.261,24,4.053,66,3.455,106,7.515,127,3.819,224,1.777,226,3.526,340,3.483,352,4.518,422,4.817,445,4.791,495,5.772,513,10.426,526,6.974,652,5.206,694,13.155,752,6.13,871,7.905,875,4.366,877,11.026,897,5.913,1049,7.454,1133,5.621,1150,7.186,1189,6.223,1401,7.259,1775,8.405,2042,4.804,2055,9.404,2132,8.169,3053,9.714,3064,9.503,3484,7.905,3934,13.155,4303,15.647,4304,15.647,4305,15.647]],["keywords/609",[]],["title/610",[16,250.43]],["content/610",[1,5.577,2,1.882,16,3.274,22,1.758,24,4.683,89,3.896,163,6.015,224,2.947,227,5.813,228,5.021,277,3.812,281,4.168,284,5.436,354,4.461,355,4.652,372,5.58,464,4.53,490,5.045,875,5.045,1023,4.247,1150,6.293,1775,9.712,2132,9.439]],["keywords/610",[]],["title/611",[282,329.633]],["content/611",[2,1.006,3,1.562,13,3.243,18,5.351,19,4.083,20,3.216,22,1.722,30,3.09,36,3.718,86,4.438,106,6.447,123,6.801,139,4.438,168,1.951,195,2.009,219,4.372,222,1.534,226,2.178,241,4.015,258,1.929,274,7.707,282,4.042,283,3.627,329,3.758,330,4.95,347,5.284,352,2.79,354,2.385,355,2.487,397,2.042,399,1.974,426,6.523,427,5.319,428,8.602,465,3.206,513,7.515,526,5.61,568,5.599,594,4.31,626,4.484,632,6.568,689,2.716,693,2.526,714,5.722,846,7.062,851,3.541,864,3.495,875,2.697,895,5.928,908,5.267,1049,4.605,1050,6.142,1150,6.165,1490,6.486,1535,3.758,1621,5.87,1716,4.688,1768,5.539,1775,7.875,1803,7.707,1859,8.188,1874,7.61,1875,4.935,2064,6.938,2132,7.654,3152,6.938,3262,4.211,3263,4.579,3471,4.709,3481,6.144,3482,6.486,3766,8.477,3950,6.694,3973,12.859,4035,7.234,4143,12.859,4155,8.478,4306,8.949,4307,8.949,4308,8.949,4309,9.665]],["keywords/611",[]],["title/612",[1023,407.123]],["content/612",[1,3.808,15,4.206,86,7.759,123,7.839,222,2.681,224,1.92,258,3.372,347,6.09,397,3.57,399,3.452,513,7.17,689,4.749,707,5.827,838,7.264,842,5.757,847,6.341,851,6.191,895,5.067,908,6.07,1023,3.969,1133,6.07,1150,5.881,1775,9.077,1859,9.438,2125,10.054,3065,13.714,3262,7.362,3275,7.109,3277,9.145,3279,9.517,3343,15.646,3495,10.374,3503,13.305,4308,15.646,4310,15.646,4311,16.898,4312,16.898,4313,16.898]],["keywords/612",[]],["title/613",[1150,479.72,2933,911.566]],["content/613",[]],["keywords/613",[]],["title/614",[2042,532.102]],["content/614",[2,1.853,13,4.965,22,2.182,161,6.923,195,2.439,222,2.825,345,7.721,354,4.393,355,4.581,396,7.396,422,5.48,513,9.521,526,6.368,616,4.54,641,7.792,642,9.426,895,5.339,908,8.062,921,7.619,1150,6.196,2042,5.466,2933,11.774,3471,8.674,3484,8.994,3931,12.545,4314,17.803]],["keywords/614",[]],["title/615",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,1150,237.045,3471,331.852]],["content/615",[526,5.965,611,13.902,871,10.62,1126,7.227,1143,10.554,1150,8.644,1795,14.633,1984,14.106,2970,14.812]],["keywords/615",[]],["title/616",[427,500.036,2970,971.224]],["content/616",[2,1.497,11,3.921,22,1.399,49,5.023,69,4.015,87,8.11,89,3.101,113,5.215,115,5.362,191,8.477,195,1.971,224,2.218,226,3.242,251,5.824,343,8.823,351,8.32,404,4.902,409,10.565,427,5.22,438,8.933,440,5.575,634,9.516,707,4.962,711,9.516,712,7.908,976,8.391,1083,10.329,1261,10.139,1290,8.397,1342,11.329,1759,11.031,1800,11.901,1820,9.965,1983,14.652,2933,16.426,2970,10.139,4315,19.521,4316,14.389,4317,14.389,4318,14.389,4319,14.389,4320,12.621]],["keywords/616",[]],["title/617",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/617",[6,5.751,13,4.541,16,1.801,24,3.228,25,3.536,30,3.984,61,4.351,66,2.751,106,6.431,112,4.17,127,3.042,224,1.416,277,2.627,352,5.101,367,6.699,386,6.143,422,3.836,447,7,513,10.004,526,6.949,556,5.429,601,5.781,611,8.242,652,5.878,752,4.882,864,4.506,871,8.926,875,3.477,877,8.781,897,4.709,902,5.479,1049,5.937,1133,4.477,1150,9.236,1189,4.956,1309,7.827,1401,5.781,1449,12.682,1709,6.694,1795,12.093,1859,6.96,1923,13.214,1984,8.362,2024,9.553,2042,3.826,2933,13.575,2970,15.736,3053,7.736,3882,9.126,3934,10.476,4152,10.93]],["keywords/617",[]],["title/618",[16,250.43]],["content/618",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1150,6.342,2933,12.051]],["keywords/618",[]],["title/619",[282,329.633]],["content/619",[6,6.009,13,4.031,18,5.551,19,4.846,20,4.332,24,3.372,49,3.35,79,3.514,86,5.978,106,4.739,127,3.178,226,4.106,258,2.598,282,3.998,399,2.66,422,4.008,426,6.989,513,8.919,526,5.171,652,6.062,682,5.178,693,4.763,714,5.082,851,4.771,864,4.708,895,6.303,908,7.552,1049,6.203,1133,7.552,1150,7.925,1449,9.346,1535,5.063,1716,5.826,1795,10.735,1875,6.134,2933,15.059,2970,12.839,3263,6.169,3279,7.333,3481,8.277,3482,8.737,4306,12.055,4321,12.055]],["keywords/619",[]],["title/620",[1023,407.123]],["content/620",[89,3.927,222,3.613,224,2.07,254,9.092,258,3.636,284,5.478,397,3.849,399,3.722,513,7.731,689,5.121,707,6.284,838,7.833,842,6.208,847,6.837,851,6.677,1133,6.546,1150,6.342,3010,16.872,3275,7.666,3277,9.861,3279,10.262,3344,15.983,3432,8.729,3495,11.186,4310,16.872,4321,16.872,4322,18.221]],["keywords/620",[]],["title/621",[3345,1364.669]],["content/621",[]],["keywords/621",[]],["title/622",[195,156.745,397,241.681,616,291.743]],["content/622",[2,1.867,3,2.9,7,7.246,8,8.154,31,4.637,49,4.616,127,4.379,195,2.458,386,8.844,397,4.763,399,3.665,469,6.618,616,4.575,652,5.969,902,7.888,3345,14.126,4323,17.94,4324,17.94,4325,17.94,4326,17.94,4327,17.94,4328,17.94,4329,17.94,4330,17.94,4331,17.94,4332,17.94,4333,17.94,4334,17.94]],["keywords/622",[]],["title/623",[2042,532.102]],["content/623",[2,2.111,13,4.488,224,2.305,226,4.572,277,4.277,279,6.672,340,4.516,352,5.857,397,4.286,445,6.212,627,5.162,652,6.75,731,8.394,3345,15.974,3347,15.553]],["keywords/623",[]],["title/624",[16,250.43]],["content/624",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3345,14.46]],["keywords/624",[]],["title/625",[282,329.633]],["content/625",[3,2.771,13,4.848,18,5.397,19,5.051,222,2.721,258,3.422,282,4.167,397,3.622,399,3.503,422,5.278,426,7.042,447,6.793,464,4.296,652,7.29,689,4.819,693,4.482,714,6.692,851,6.283,908,6.16,1535,6.668,1716,7.006,1875,7.377,3263,8.124,3345,17.253,4335,15.04]],["keywords/625",[]],["title/626",[1023,407.123]],["content/626",[15,4.879,206,8.111,222,3.11,224,2.227,258,3.912,397,4.141,399,4.005,689,5.509,707,6.76,838,8.427,842,6.679,847,7.356,851,7.183,3275,8.247,3277,10.609,3279,11.041,4336,19.604,4337,15.91,4338,19.604]],["keywords/626",[]],["title/627",[3347,1328.705]],["content/627",[]],["keywords/627",[]],["title/628",[195,156.745,397,241.681,616,291.743]],["content/628",[2,1.709,3,2.654,7,6.632,8,7.705,31,4.244,49,4.225,127,4.008,195,2.25,216,6.908,397,4.502,399,3.354,447,6.506,469,6.057,545,11.019,575,3.94,616,4.187,652,5.463,1175,12.807,2094,7.122,3347,12.588,4339,16.42,4340,16.42,4341,16.42,4342,16.42,4343,16.42,4344,16.42,4345,16.42,4346,16.42,4347,16.42,4348,16.42,4349,16.42,4350,21.309,4351,16.42,4352,16.42,4353,16.42,4354,16.42,4355,16.42,4356,16.42]],["keywords/628",[]],["title/629",[2042,532.102]],["content/629",[13,4.609,14,7.228,224,2.367,226,4.694,277,4.392,340,4.637,352,6.015,445,6.379,526,5.912,652,6.931,3347,18.939]],["keywords/629",[]],["title/630",[16,250.43]],["content/630",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3347,14.079]],["keywords/630",[]],["title/631",[282,329.633]],["content/631",[3,2.177,14,6.474,18,5.423,19,4.301,31,3.482,36,7.177,43,4.9,123,8.656,139,6.186,195,2.556,222,2.138,258,2.688,282,3.549,330,4.549,397,2.846,399,2.752,426,7.076,427,6.769,428,9.292,447,5.338,526,5.295,568,7.126,627,3.428,689,3.786,693,3.521,714,5.258,851,4.936,896,5.021,908,4.84,975,9.04,1155,6.681,1535,5.239,1716,5.966,1803,9.81,1875,6.282,3262,5.869,3263,6.383,3274,9.493,3347,16.411,3640,12.715,3641,10.337,3950,9.33,4357,11.326]],["keywords/631",[]],["title/632",[1023,407.123]],["content/632",[15,4.535,123,10.563,222,2.891,224,2.07,258,3.636,397,3.849,399,3.722,400,7.731,689,5.121,707,6.284,838,7.833,842,6.208,847,6.837,851,6.677,2094,7.903,3262,7.939,3275,7.666,3348,16.872,3641,12.614,3744,14.347,3766,10.536,3816,16.872,3944,14.347,3950,12.619,4358,15.319,4359,18.221]],["keywords/632",[]],["title/633",[24,357.029,1910,763.589]],["content/633",[]],["keywords/633",[]],["title/634",[19,263.73,195,156.745,616,291.743]],["content/634",[2,2.218,3,2.654,16,2.373,19,5.453,22,1.596,23,14.218,24,6.128,30,5.25,31,4.244,67,7.823,127,5.201,195,2.25,196,6.362,222,2.605,224,1.865,275,10.081,282,3.123,363,8.458,368,7.756,448,7.417,616,5.434,647,6.119,908,7.655,920,8.632,1050,6.879,1876,10.194,2105,10.081,3034,9.869,3899,13.805,3900,15.204]],["keywords/634",[]],["title/635",[2042,532.102]],["content/635",[18,3.521,19,3.631,22,2.016,25,4.471,75,9.193,147,8.462,195,2.158,224,1.79,258,4.627,263,4.836,340,3.507,352,4.548,404,5.367,489,7.424,529,9.567,616,5.289,627,4.008,647,5.871,808,6.713,879,11.791,1007,8.225,1050,6.599,1126,5.416,1133,5.659,1143,7.909,1155,11.499,1212,8.591,1401,7.308,1600,13.244,1707,8.4,1800,8.462,1840,11.308,1910,13.65,1984,10.571,2029,14.363,4360,15.753,4361,14.586,4362,15.753]],["keywords/635",[]],["title/636",[16,250.43]],["content/636",[1,5.597,2,1.896,16,3.29,22,1.772,24,5.898,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1910,10.095]],["keywords/636",[]],["title/637",[282,329.633]],["content/637",[6,7.221,13,3.462,16,2.261,18,4.93,19,4.76,20,6.87,23,9.404,24,5.713,31,4.044,60,11.532,113,2.481,195,1.444,229,4.416,238,8.668,258,3.724,277,2.222,282,2.976,288,5.466,368,5.695,399,2.153,426,7.166,427,5.677,464,3.92,575,3.754,609,7.72,615,9.714,627,4.748,681,5.503,689,2.963,835,7.454,846,5.078,849,5.851,877,7.428,1050,8.65,1126,5.379,1133,5.621,1143,5.292,1155,5.228,1267,4.473,1412,9.606,1716,5.003,1800,12.413,1875,5.268,1910,13.254,3034,9.404,3263,4.995,3481,6.701,3595,8.555,3596,8.555,3597,8.555,3598,8.555,3599,8.555,3600,8.862,3677,8.555,4363,9.76,4364,18.659,4365,9.76]],["keywords/637",[]],["title/638",[1023,407.123]],["content/638",[14,5.738,19,3.812,23,9.939,98,10.267,105,10.513,222,2.624,224,1.879,258,3.3,397,3.493,399,3.378,427,5.999,689,4.648,707,5.703,838,7.109,842,7.293,847,6.205,1050,6.928,1143,8.303,1614,9.089,1798,10.513,1800,8.883,1910,9.162,2105,10.152,2108,13.021,2510,9.314,3034,9.939,3275,6.957,3301,14.505,3432,7.922,3602,13.422,3603,13.021,3604,13.422,3605,13.422,3606,13.422,3607,13.422,3608,13.422,3609,13.903,4361,15.312,4366,16.537,4367,16.537]],["keywords/638",[]],["title/639",[195,116.983,647,318.197,771,367.042,1412,524.187,1910,473.03]],["content/639",[1,1.738,2,1.28,3,1.246,11,2.101,16,2.763,19,5.117,23,10.518,24,5.75,30,6.515,31,1.993,49,1.984,60,9.775,87,5.109,98,4.787,105,4.902,106,2.807,111,9.005,139,3.541,155,3.043,195,2.62,196,2.987,207,3.3,222,1.951,224,1.742,226,1.738,230,4.164,231,4.909,238,6.812,251,2.3,258,3.061,263,5.373,275,7.549,282,2.339,288,3.998,296,3.032,312,3.3,318,5.433,321,3.694,332,4.843,340,2.737,368,6.959,380,4.634,404,4.189,427,4.461,440,4.764,448,7.092,464,3.843,465,4.079,469,4.536,490,4.883,503,4.843,551,3.127,607,3.438,616,1.966,642,4.082,736,4.082,814,4.902,823,3.406,849,2.883,920,4.054,926,3.998,957,4.634,976,6.593,1021,3.634,1023,1.811,1044,4.38,1303,5.433,1412,7.549,1637,4.902,1683,5.771,1731,7.245,1800,10.27,1876,4.787,1885,4.902,1910,6.812,2025,4.419,2081,4.634,2105,10.744,2422,7.549,2510,9.857,3034,11.491,3122,5.535,3128,5.771,3152,5.535,3411,4.38,3612,6.071,3614,6.071,3615,6.071,3616,6.071,3617,6.071,3618,6.071,3619,6.071,3620,6.071,3621,6.071,3622,6.071,3623,6.071,3624,6.071,3625,6.071,3626,7.723,3627,6.071,3628,6.071,3629,9.682,3630,6.071,3631,6.071,3632,6.071,3633,6.071,3634,6.071,3635,6.071,3636,6.071,3637,6.071,3899,6.482]],["keywords/639",[]],["title/640",[22,95.072,771,420.36,1800,525.286,1910,541.745]],["content/640",[8,6.293,13,3.85,16,3.196,18,3.89,30,5.564,79,4.698,195,2.384,222,2.761,263,5.343,277,3.669,281,4.012,321,8.337,334,7.171,340,3.874,616,4.438,627,4.428,652,8.091,658,6.975,1091,9.565,1142,6.076,1145,15.265,1146,12.745,1155,8.631,1302,11.859,1707,9.28,1800,13.062,1910,9.641,4365,16.114,4368,17.403]],["keywords/640",[]],["title/641",[15,331.695,43,224.2,287,365.434,3303,530.084]],["content/641",[]],["keywords/641",[]],["title/642",[397,241.681,616,291.743,3303,710.262]],["content/642",[20,6.259,35,12.441,127,4.591,208,7.783,224,2.137,291,5.162,368,6.847,397,3.974,399,3.843,424,10.685,445,5.76,632,8.428,652,6.259,860,10.18,974,10.779,1211,11.083,1614,10.339,1859,10.506,2476,13.255,3303,14.418,4369,18.811,4370,18.811,4371,18.811]],["keywords/642",[]],["title/643",[2042,532.102]],["content/643",[2,2.023,22,1.89,161,7.559,195,2.663,222,3.084,345,8.431,354,4.796,355,6.097,396,8.076,627,4.946,895,5.829,896,7.244,921,8.32,1230,10.081,2042,5.968,3303,12.069,3471,9.472,3484,9.821,3931,13.698]],["keywords/643",[]],["title/644",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,3303,422.823,3471,331.852]],["content/644",[526,6.494,3303,14.206]],["keywords/644",[]],["title/645",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/645",[16,2.944,22,1.491,66,4.499,69,5.685,83,8.43,113,4.796,127,3.744,186,4.772,224,1.742,229,6.425,316,6.009,355,6.53,422,4.721,526,6.493,575,3.68,627,6.203,810,6.905,864,5.546,871,7.749,873,7.228,896,8.527,1189,6.1,1230,11.865,1768,8.789,2055,9.218,2564,8.712,3303,15.755,4372,12.448,4373,14.202,4374,14.202,4375,14.202]],["keywords/645",[]],["title/646",[16,250.43]],["content/646",[1,4.612,2,1.29,16,2.543,18,4.979,19,4.057,20,4.124,22,1.205,24,3.211,41,10.15,43,3.255,86,5.692,89,2.671,97,5.527,113,4.143,127,3.025,163,4.124,195,2.804,206,5.128,224,2.531,226,2.793,227,3.985,228,3.442,258,2.474,281,2.857,282,3.892,284,3.727,287,5.305,354,3.058,355,5.266,372,3.826,397,3.718,399,2.532,426,6.497,464,3.105,490,3.458,627,5.669,714,4.838,875,3.458,895,5.278,896,8.302,908,4.453,1023,2.912,1133,6.323,1230,9.127,1716,5.628,1875,5.925,3303,10.927,3457,9.502,3481,7.88,4376,9.76,4377,10.872,4378,10.872,4379,11.477]],["keywords/646",[]],["title/647",[1023,407.123]],["content/647",[113,4.538,222,3.059,224,2.19,258,3.847,355,4.96,397,4.073,399,3.938,707,6.648,838,8.287,842,6.568,847,7.234,1133,6.926,1230,9.997,1257,14.779,3273,12.108,3275,8.11,3277,10.434,3303,11.969,3304,17.851,3432,9.235,4380,16.91]],["keywords/647",[]],["title/648",[3303,1075.998]],["content/648",[]],["keywords/648",[]],["title/649",[195,156.745,397,241.681,616,291.743]],["content/649",[2,1.639,3,2.546,7,6.363,8,5.696,16,2.276,19,3.631,31,4.071,49,4.053,127,5.062,195,2.841,225,7.589,226,3.55,230,5.335,397,4.898,399,3.218,469,5.811,526,5.886,556,6.863,616,5.289,1930,9.894,3303,9.78,3691,14.887,4381,15.753,4382,15.753,4383,15.753,4384,15.753,4385,15.753,4386,15.753,4387,15.753,4388,15.753,4389,15.753,4390,15.753,4391,15.753,4392,15.753,4393,15.753,4394,15.753,4395,20.739,4396,15.753,4397,15.753,4398,15.753]],["keywords/649",[]],["title/650",[2042,532.102]],["content/650",[2,1.896,22,2.214,161,7.086,195,2.496,222,2.891,345,7.903,354,4.496,355,5.858,396,7.57,616,4.647,627,5.793,641,7.975,642,9.647,895,5.464,896,8.485,908,8.18,921,7.799,1230,9.449,2042,5.594,3303,11.312,3471,8.878,3484,9.206,3931,12.84]],["keywords/650",[]],["title/651",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,3303,422.823,3471,331.852]],["content/651",[526,6.494,3303,14.206]],["keywords/651",[]],["title/652",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/652",[16,2.944,22,1.491,66,4.499,69,5.685,83,8.43,113,4.796,127,3.744,186,4.772,224,1.742,229,6.425,316,6.009,355,6.53,422,4.721,526,6.493,575,3.68,627,6.203,810,6.905,864,5.546,871,7.749,873,7.228,896,8.527,1189,6.1,1230,11.865,1768,8.789,2055,9.218,2564,8.712,3303,15.755,4372,12.448,4373,14.202,4374,14.202,4375,14.202]],["keywords/652",[]],["title/653",[16,250.43]],["content/653",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3303,11.402]],["keywords/653",[]],["title/654",[282,329.633]],["content/654",[18,5.407,19,4.636,20,3.996,22,1.168,36,4.62,43,3.154,86,5.515,113,4.051,123,5.572,127,2.932,185,4.193,195,3.009,206,4.969,207,5.141,226,2.707,229,5.032,258,2.397,282,3.825,330,4.056,355,4.428,397,3.636,399,2.454,426,7.054,427,4.357,428,7.444,526,3.409,568,4.587,627,5.588,689,4.837,693,3.14,714,4.688,761,6.709,851,4.401,895,5.161,896,8.185,908,6.183,948,10.098,1091,6.601,1133,6.183,1230,8.924,1535,4.671,1716,5.503,1803,6.314,1875,5.794,3262,5.233,3263,5.691,3303,10.684,3481,7.635,3641,6.654,3691,12.354,3766,6.945,4376,9.457,4377,10.535,4378,10.535,4379,11.121,4399,12.011,4400,12.011]],["keywords/654",[]],["title/655",[1023,407.123]],["content/655",[16,2.478,89,4.722,219,7.757,222,3.477,224,1.948,254,8.556,258,3.422,284,5.155,355,4.412,397,3.622,399,4.476,400,7.275,526,4.866,527,8.892,616,4.372,689,4.819,707,5.913,838,7.371,842,5.842,847,6.434,851,6.283,1133,7.872,1230,8.892,1257,13.145,3273,10.769,3275,7.213,3277,9.28,3303,10.645,3349,15.877,3432,8.214,4380,15.04,4401,17.147]],["keywords/655",[]],["title/656",[661,601.456,1622,585.453,1910,633.815]],["content/656",[]],["keywords/656",[]],["title/657",[712,952.57]],["content/657",[1,4.308,2,1.99,16,2.017,18,3.119,20,4.644,22,1.859,31,3.607,66,3.082,106,5.08,120,8.566,136,5.388,175,7.611,181,5.847,195,3.214,211,8.476,222,3.46,224,2.172,241,5.798,258,4.352,261,5.184,277,2.943,281,3.217,307,4.699,329,5.427,354,3.444,355,3.591,408,5.947,434,7.007,467,5.66,489,6.578,529,8.476,579,6.345,597,7.998,632,6.253,651,7.723,681,7.287,761,7.795,901,6.723,1019,9.666,1024,8.985,1044,10.861,1050,8.01,1155,6.922,1443,6.194,1622,9.784,1707,7.443,1917,9.51,3854,11.734,3855,10.221,3865,10.989,4402,13.957]],["keywords/657",[]],["title/658",[2,101.77,195,133.976,1023,229.702,1707,521.453]],["content/658",[2,1.618,3,3.322,22,1.511,79,4.196,106,5.657,195,3.156,222,3.655,228,4.316,238,8.611,258,3.102,261,5.772,270,4.862,354,3.835,355,3.999,359,9.901,408,6.623,490,4.337,556,6.771,641,8.997,642,8.229,644,6.205,679,7.21,697,7.902,871,7.852,879,11.633,897,5.873,973,10.43,1019,10.764,1025,9.762,1042,8.27,1707,12.282,1795,9.157,1888,10.952,2020,6.771,2096,10.43,2240,12.355,3855,11.383,3856,13.067]],["keywords/658",[]],["title/659",[1050,577.406,1622,705.325]],["content/659",[2,1.078,3,1.673,15,6.084,16,2.668,31,2.676,49,3.972,60,5.783,79,4.168,83,5.69,120,10.952,173,3.885,195,2.115,198,4.73,222,2.45,224,1.176,226,2.333,258,3.081,270,6.402,281,2.387,329,4.026,330,3.496,334,4.266,340,2.305,352,2.989,354,2.555,355,2.664,359,4.451,361,6.16,372,4.765,385,3.395,394,6.917,399,3.771,443,6.042,465,3.435,467,6.261,469,3.819,493,5.521,513,6.551,598,6.503,677,8.232,842,3.527,849,3.872,872,6.1,894,6.356,983,7.582,1044,5.881,1050,9.964,1090,6.665,1134,6.948,1155,9.156,1267,4.393,1401,4.803,1622,12.171,2020,4.511,2240,6.223,3530,7.17,3861,8.704,3862,8.704,3863,8.704,3864,8.704,3865,12.156,3866,8.704,3867,8.704,3868,8.704,3869,12.98,3870,8.704,3871,10.36,3872,7.937,3873,8.704,3874,8.704,3875,8.704,3876,8.704,3877,8.704,3878,8.704,3879,8.704,4403,9.587]],["keywords/659",[]],["title/660",[14,478.24,1622,705.325]],["content/660",[3,3.09,13,2.431,14,6.634,16,1.588,22,1.859,30,3.514,31,2.84,42,5.207,43,2.886,49,4.152,71,4.766,79,2.966,108,7.955,155,4.338,168,2.219,195,2.62,208,8.717,223,2.407,224,1.833,226,2.476,282,2.09,313,8.048,334,4.528,368,6.959,380,6.605,397,2.321,421,8.939,422,3.383,424,6.243,464,4.79,465,3.646,467,4.456,485,4.788,490,3.066,495,4.054,513,8.939,546,4.338,579,4.996,676,7.908,738,7.744,744,7.889,800,7.889,887,14.845,894,9.906,1211,6.475,1598,6.605,1622,13.541,1635,10.176,1636,9.639,1745,7.374,1800,10.27,1895,8.225,1910,8.939,3355,8.048,3388,10.525,3530,7.611,3784,9.639,3871,7.374,3889,8.919,3890,13.095,4403,17.703,4404,10.99,4405,10.99,4406,17.703,4407,10.99]],["keywords/660",[]],["title/661",[3,184.904,14,396.962,632,512.565]],["content/661",[3,3.265,11,6.194,13,5.366,14,5.252,18,3.383,155,5.975,195,2.074,208,8.357,222,2.402,226,4.552,241,6.289,270,4.735,282,2.879,316,5.93,321,7.252,340,3.37,352,5.832,374,7.476,399,3.092,426,4.414,467,6.138,485,6.595,552,7.798,632,6.782,910,10.667,920,7.958,926,7.85,1090,9.745,1326,8.526,1581,11.605,1622,12.93,1800,8.132,1840,10.867,1910,8.386,3530,10.484,4406,18.703,4408,15.138,4409,15.138,4410,15.138]],["keywords/661",[]],["title/662",[895,519.739]],["content/662",[3,2.128,18,2.943,22,2.056,30,4.21,49,5.441,195,1.804,224,1.496,235,6.782,241,5.47,261,4.89,270,4.119,298,6.695,307,4.433,321,6.307,367,8.019,384,8.476,422,6.51,464,5.733,465,4.368,552,6.782,557,5.789,626,9.81,680,9.278,833,7.294,841,6.971,872,7.758,895,7.217,896,7.881,900,11.535,918,8.972,921,7.86,1050,5.516,1091,7.237,1121,6.273,1126,4.527,1142,6.412,1155,10.488,1293,13.183,1707,7.021,1731,10.82,1800,11.36,1910,7.294,3249,12.941,3795,9.855,3880,11.069,3881,15.439,3882,9.643]],["keywords/662",[]],["title/663",[751,837.857,1622,585.453,3883,856.309]],["content/663",[18,4.656,22,2.025,224,2.367,235,10.731,404,7.098,525,14.954,616,5.312,751,15.257,1622,10.661,2034,16.403,3787,15.593,3883,15.593]],["keywords/663",[]],["title/664",[16,199.154,258,275.056]],["content/664",[3,3.408,17,12.275,18,2.926,19,3.018,20,4.356,30,4.186,42,8.667,49,4.707,73,4.529,98,11.356,120,11.672,173,6.864,195,1.794,224,1.487,230,6.195,235,6.744,263,5.616,282,2.49,320,9.072,409,7.086,426,5.334,469,6.748,490,5.104,803,9.755,835,10.874,895,5.486,896,6.817,1044,10.391,1050,9.562,1155,10.457,1393,9.423,1401,8.486,1551,8.786,1622,6.7,1716,4.186,1875,4.408,2606,9.067,3249,9.226,3882,9.589,3884,9.8,3885,11.007,3886,11.007,3887,12.669]],["keywords/664",[]],["title/665",[16,199.154,397,291.165]],["content/665",[3,2.431,13,3.327,14,5.219,18,4.495,19,3.467,20,5.004,22,2.203,31,3.887,42,7.126,49,5.175,70,6.051,79,4.06,113,4.734,120,9.01,226,5.106,282,2.86,368,5.474,399,4.108,422,4.63,424,8.543,426,6.607,464,5.039,689,4.227,744,10.796,746,6.804,835,10.795,1050,6.301,1155,9.974,1716,4.809,1800,12.172,1875,5.063,1910,8.332,3884,11.257,3888,12.644,3889,12.207,3890,16.323,3891,11.53]],["keywords/665",[]],["title/666",[3350,1406.653]],["content/666",[]],["keywords/666",[]],["title/667",[195,156.745,397,241.681,616,291.743]],["content/667",[2,1.867,3,2.9,7,7.246,8,8.154,31,4.637,49,4.616,79,4.843,89,3.866,127,4.379,195,2.458,207,7.678,281,4.136,304,11.549,397,4.763,399,3.665,469,6.618,616,4.575,652,8.205,1625,17.754,3350,20.015,4411,17.94,4412,17.94,4413,17.94]],["keywords/667",[]],["title/668",[2042,532.102]],["content/668",[14,6.919,70,8.022,304,12.836,526,6.829,551,8.086,601,9.25,652,6.634,1696,13.38,3063,17.49,3332,17.275,3484,10.074,4414,19.94,4415,19.94,4416,19.94,4417,19.94]],["keywords/668",[]],["title/669",[16,250.43]],["content/669",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3350,14.905]],["keywords/669",[]],["title/670",[282,329.633]],["content/670",[3,2.081,6,5.942,14,6.273,18,5.531,19,4.168,36,4.952,43,3.381,195,1.764,206,7.48,222,2.043,258,2.569,282,3.439,330,4.347,397,2.72,399,2.63,422,3.963,426,7.217,427,4.671,428,7.734,447,5.101,464,3.226,568,6.904,601,8.387,627,5.316,651,5.2,689,3.619,693,3.365,714,5.025,731,5.327,851,4.718,896,6.738,908,4.625,1142,6.312,1535,5.007,1716,5.781,1803,6.769,1875,6.086,2094,9.827,3262,5.609,3263,6.101,3273,8.087,3350,18.39,3492,8.087,3493,7.993,3500,7.904,3951,9.871,4418,10.824,4419,12.875,4420,12.875,4421,12.875,4422,12.875]],["keywords/670",[]],["title/671",[1023,407.123]],["content/671",[15,4.5,123,8.387,222,2.869,224,2.054,258,3.608,397,3.819,399,3.693,689,5.081,707,6.235,838,7.772,842,6.16,847,6.784,851,6.625,2094,7.841,3262,7.877,3273,11.355,3275,7.606,3277,12.263,3279,10.183,3351,16.741,3496,11.957,3500,11.099,3641,10.016,3766,10.454,3774,14.236,4358,15.2,4423,18.08,4424,18.08]],["keywords/671",[]],["title/672",[661,514.086,1622,500.408,1910,541.745,3352,731.918]],["content/672",[]],["keywords/672",[]],["title/673",[712,952.57]],["content/673",[1,4.592,2,2.121,16,2.216,18,3.428,20,5.103,22,1.981,66,3.386,106,5.583,136,5.921,181,6.425,195,3.135,211,9.315,222,3.233,224,2.315,241,6.372,258,4.566,261,5.696,277,3.234,281,3.536,307,5.163,329,5.964,354,3.784,355,3.946,408,6.536,434,7.7,467,6.219,489,7.228,529,9.315,597,8.789,651,6.195,681,8.008,761,8.567,901,7.389,1019,10.622,1024,9.874,1044,8.712,1050,6.425,1443,6.807,1622,7.849,1707,8.179,1917,10.451,3854,12.894,3855,11.232]],["keywords/673",[]],["title/674",[2,101.77,195,133.976,1023,229.702,1707,521.453]],["content/674",[2,1.618,3,3.322,22,1.511,79,4.196,106,5.657,195,3.156,222,3.655,228,4.316,238,8.611,258,3.102,261,5.772,270,4.862,354,3.835,355,3.999,359,9.901,408,6.623,490,4.337,556,6.771,641,8.997,642,8.229,644,6.205,679,7.21,697,7.902,871,7.852,879,11.633,897,5.873,973,10.43,1019,10.764,1025,9.762,1042,8.27,1707,12.282,1795,9.157,1888,10.952,2020,6.771,2096,10.43,2240,12.355,3855,11.383,3856,13.067]],["keywords/674",[]],["title/675",[16,165.308,1622,585.453,3352,856.309]],["content/675",[16,3.093,30,6.845,185,7.474,195,2.933,198,7.555,208,6.842,258,4.272,279,7.041,355,4.255,359,7.109,362,10.043,422,5.091,427,5.999,467,6.706,489,7.793,600,11.268,601,7.672,658,6.628,661,8.694,1025,10.387,1050,8.968,1113,8.252,1155,8.202,1622,12.847,1707,8.818,1765,10.043,1830,11.453,2630,10.937,3865,13.021,4425,16.537,4426,16.537]],["keywords/675",[]],["title/676",[1050,577.406,1622,705.325]],["content/676",[2,1.155,3,1.793,15,6.206,16,1.603,31,2.867,49,4.181,60,6.197,79,4.386,120,11.172,173,4.163,195,2.226,198,5.069,222,2.578,224,1.26,226,2.5,258,3.242,270,6.62,281,2.557,329,4.314,330,3.746,354,2.737,355,2.854,359,4.769,361,6.601,372,5.015,385,3.638,394,7.279,399,3.927,443,6.475,465,3.681,467,6.589,469,4.092,493,5.916,598,6.968,677,8.572,842,3.78,849,4.149,983,8.125,1044,6.302,1050,9.86,1090,7.142,1134,7.445,1155,9.535,1267,4.707,1401,5.147,1622,11.528,2020,4.833,2240,6.668,3861,9.327,3862,9.327,3863,9.327,3864,9.327,3865,12.793,3866,9.327,3867,9.327,3868,9.327,3869,13.66,3870,9.327,3871,10.903,3872,8.505,3873,9.327,3874,9.327,3875,9.327,3876,9.327,3877,9.327,3878,9.327,3879,9.327]],["keywords/676",[]],["title/677",[895,519.739]],["content/677",[3,2.128,18,2.943,22,2.056,30,4.21,49,5.441,195,1.804,224,1.496,235,6.782,241,5.47,261,4.89,270,4.119,298,6.695,307,4.433,321,6.307,367,8.019,384,8.476,422,6.51,464,5.733,465,4.368,552,6.782,557,5.789,626,9.81,680,9.278,833,7.294,841,6.971,872,7.758,895,7.217,896,7.881,900,11.535,918,8.972,921,7.86,1050,5.516,1091,7.237,1121,6.273,1126,4.527,1142,6.412,1155,10.488,1293,13.183,1707,7.021,1731,10.82,1800,11.36,1910,7.294,3249,12.941,3795,9.855,3880,11.069,3881,15.439,3882,9.643]],["keywords/677",[]],["title/678",[751,837.857,1622,585.453,3883,856.309]],["content/678",[18,4.656,22,2.025,224,2.367,235,10.731,404,7.098,525,14.954,616,5.312,751,15.257,1622,10.661,2034,16.403,3787,15.593,3883,15.593]],["keywords/678",[]],["title/679",[16,199.154,258,275.056]],["content/679",[3,3.25,17,10.092,18,3.361,19,3.467,20,5.004,30,4.809,42,7.126,49,3.87,73,5.202,98,9.337,120,11.296,173,5.644,195,2.061,224,1.709,230,5.093,235,7.747,263,4.617,282,2.86,320,7.459,409,8.14,426,5.865,469,5.548,490,4.197,803,8.02,835,11.524,895,4.51,896,5.605,1044,8.543,1050,9.492,1155,9.974,1393,7.747,1401,6.977,1551,10.092,1622,7.696,1716,4.809,1875,5.063,2606,10.416,3249,10.598,3882,11.015,3884,11.257,3885,12.644,3886,12.644,3887,10.416]],["keywords/679",[]],["title/680",[16,199.154,397,291.165]],["content/680",[3,2.599,14,5.579,18,4.698,19,3.707,20,5.35,22,2.044,31,4.156,42,7.619,49,5.408,70,6.469,79,4.341,113,3.785,120,9.418,226,5.277,282,3.058,368,5.853,399,3.285,422,4.95,426,6.13,464,5.266,835,10.014,1050,6.736,1155,10.425,1716,5.141,1800,12.58,1875,5.413,1910,8.908,3884,12.035,3888,13.518,3889,13.05,3890,17.06,3891,12.327]],["keywords/680",[]],["title/681",[3352,1297.249]],["content/681",[]],["keywords/681",[]],["title/682",[195,156.745,397,241.681,616,291.743]],["content/682",[2,2.006,3,3.116,7,7.787,8,8.526,31,4.983,49,4.96,127,4.705,195,2.641,397,4.981,399,3.938,469,7.112,616,4.916,652,6.414,3352,14.43,4427,19.279,4428,19.279,4429,19.279,4430,19.279,4431,19.279]],["keywords/682",[]],["title/683",[2042,532.102]],["content/683",[2,1.853,16,2.572,22,1.731,161,6.923,163,5.923,340,4.995,347,6.417,352,6.479,354,4.393,355,4.581,396,7.396,526,5.052,556,7.756,575,4.271,599,7.687,627,4.53,677,7.938,731,7.366,895,6.729,896,6.635,1020,9.785,1026,9.426,1126,6.121,1143,8.938,2064,12.78,3352,18.393]],["keywords/683",[]],["title/684",[16,250.43]],["content/684",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3352,13.746]],["keywords/684",[]],["title/685",[282,329.633]],["content/685",[2,1.435,3,2.229,18,5.217,19,4.372,22,1.341,36,5.305,43,3.621,86,6.333,123,6.398,162,5.706,163,4.589,168,2.785,195,1.89,222,2.188,258,2.752,282,4.122,330,4.657,340,3.07,347,4.971,352,3.982,354,3.403,355,3.548,397,2.913,399,2.817,426,6.806,427,5.003,428,8.022,568,5.267,627,5.515,689,3.876,693,3.605,714,5.383,851,5.053,875,3.848,895,5.687,896,8.077,908,4.955,1020,7.58,1026,7.302,1155,6.84,1535,5.363,1716,6.063,1803,7.25,1875,6.384,2025,7.903,3262,6.009,3263,6.535,3352,10.323,3641,7.641,3766,7.975,3943,11.595]],["keywords/685",[]],["title/686",[1023,407.123]],["content/686",[86,5.404,222,1.867,224,1.337,258,2.348,347,4.241,397,5.606,399,2.404,400,10.193,525,8.447,689,7.458,707,4.058,838,5.059,842,4.009,847,9.957,851,9.723,875,3.284,895,3.529,1023,2.764,1026,6.23,1114,9.266,1257,9.022,1278,7.676,1768,6.744,2125,7.002,2986,9.022,3262,5.127,3273,7.391,3275,4.951,3277,6.369,3279,12.989,3353,10.896,3530,8.15,3642,10.322,4115,9.893,4432,11.768,4433,11.768,4434,11.768,4435,11.768,4436,11.768,4437,11.768,4438,11.768,4439,11.768,4440,11.768,4441,11.768,4442,11.768,4443,11.768,4444,11.768,4445,10.896,4446,11.768]],["keywords/686",[]],["title/687",[661,514.086,1622,500.408,1910,541.745,3355,716.147]],["content/687",[]],["keywords/687",[]],["title/688",[712,952.57]],["content/688",[1,4.592,2,2.121,16,2.216,18,3.428,20,5.103,22,1.981,66,3.386,106,5.583,136,5.921,181,6.425,195,3.135,211,9.315,222,3.233,224,2.315,241,6.372,258,4.566,261,5.696,277,3.234,281,3.536,307,5.163,329,5.964,354,3.784,355,3.946,408,6.536,434,7.7,467,6.219,489,7.228,529,9.315,597,8.789,651,6.195,681,8.008,761,8.567,901,7.389,1019,10.622,1024,9.874,1044,8.712,1050,6.425,1443,6.807,1622,7.849,1707,8.179,1917,10.451,3854,12.894,3855,11.232]],["keywords/688",[]],["title/689",[2,101.77,195,133.976,1023,229.702,1707,521.453]],["content/689",[2,1.618,3,3.322,22,1.511,79,4.196,106,5.657,195,3.156,222,3.655,228,4.316,238,8.611,258,3.102,261,5.772,270,4.862,354,3.835,355,3.999,359,9.901,408,6.623,490,4.337,556,6.771,641,8.997,642,8.229,644,6.205,679,7.21,697,7.902,871,7.852,879,11.633,897,5.873,973,10.43,1019,10.764,1025,9.762,1042,8.27,1707,12.282,1795,9.157,1888,10.952,2020,6.771,2096,10.43,2240,12.355,3855,11.383,3856,13.067]],["keywords/689",[]],["title/690",[16,165.308,1622,585.453,3355,837.857]],["content/690",[2,1.746,13,3.711,15,4.175,16,2.424,66,3.704,79,4.528,89,4.656,207,9.247,222,2.662,261,6.23,265,9.79,281,3.867,359,7.211,365,11.095,422,5.164,445,5.137,658,8.659,728,9.37,875,4.681,1050,10.574,1269,12.861,1622,12.916,1775,11.606,1985,11.821,2132,8.758,3355,12.286,4035,12.556,4447,21.606]],["keywords/690",[]],["title/691",[1050,577.406,1622,705.325]],["content/691",[2,1.155,3,1.793,15,6.206,16,1.603,31,2.867,49,4.181,60,6.197,79,4.386,120,11.172,173,4.163,195,2.226,198,5.069,222,2.578,224,1.26,226,2.5,258,3.242,270,6.62,281,2.557,329,4.314,330,3.746,354,2.737,355,2.854,359,4.769,361,6.601,372,5.015,385,3.638,394,7.279,399,3.927,443,6.475,465,3.681,467,6.589,469,4.092,493,5.916,598,6.968,677,8.572,842,3.78,849,4.149,983,8.125,1044,6.302,1050,9.86,1090,7.142,1134,7.445,1155,9.535,1267,4.707,1401,5.147,1622,11.528,2020,4.833,2240,6.668,3861,9.327,3862,9.327,3863,9.327,3864,9.327,3865,12.793,3866,9.327,3867,9.327,3868,9.327,3869,13.66,3870,9.327,3871,10.903,3872,8.505,3873,9.327,3874,9.327,3875,9.327,3876,9.327,3877,9.327,3878,9.327,3879,9.327]],["keywords/691",[]],["title/692",[895,519.739]],["content/692",[3,2.128,18,2.943,22,2.056,30,4.21,49,5.441,195,1.804,224,1.496,235,6.782,241,5.47,261,4.89,270,4.119,298,6.695,307,4.433,321,6.307,367,8.019,384,8.476,422,6.51,464,5.733,465,4.368,552,6.782,557,5.789,626,9.81,680,9.278,833,7.294,841,6.971,872,7.758,895,7.217,896,7.881,900,11.535,918,8.972,921,7.86,1050,5.516,1091,7.237,1121,6.273,1126,4.527,1142,6.412,1155,10.488,1293,13.183,1707,7.021,1731,10.82,1800,11.36,1910,7.294,3249,12.941,3795,9.855,3880,11.069,3881,15.439,3882,9.643]],["keywords/692",[]],["title/693",[751,837.857,1622,585.453,3883,856.309]],["content/693",[18,4.656,22,2.025,224,2.367,235,10.731,404,7.098,525,14.954,616,5.312,751,15.257,1622,10.661,2034,16.403,3787,15.593,3883,15.593]],["keywords/693",[]],["title/694",[16,199.154,258,275.056]],["content/694",[3,3.25,17,10.092,18,3.361,19,3.467,20,5.004,30,4.809,42,7.126,49,3.87,73,5.202,98,9.337,120,11.296,173,5.644,195,2.061,224,1.709,230,5.093,235,7.747,263,4.617,282,2.86,320,7.459,409,8.14,426,5.865,469,5.548,490,4.197,803,8.02,835,11.524,895,4.51,896,5.605,1044,8.543,1050,9.492,1155,9.974,1393,7.747,1401,6.977,1551,10.092,1622,7.696,1716,4.809,1875,5.063,2606,10.416,3249,10.598,3882,11.015,3884,11.257,3885,12.644,3886,12.644,3887,10.416]],["keywords/694",[]],["title/695",[16,199.154,397,291.165]],["content/695",[3,2.431,13,3.327,14,5.219,18,4.495,19,3.467,20,5.004,22,2.203,31,3.887,42,7.126,49,5.175,70,6.051,79,4.06,113,4.734,120,9.01,226,5.106,282,2.86,368,5.474,399,4.108,422,4.63,424,8.543,426,6.607,464,5.039,689,4.227,744,10.796,746,6.804,835,10.795,1050,6.301,1155,9.974,1716,4.809,1800,12.172,1875,5.063,1910,8.332,3884,11.257,3888,12.644,3889,12.207,3890,16.323,3891,11.53]],["keywords/695",[]],["title/696",[2823,1146.263]],["content/696",[]],["keywords/696",[]],["title/697",[195,156.745,397,241.681,616,291.743]],["content/697",[2,1.882,3,2.922,7,7.303,8,8.193,31,4.673,49,4.652,127,4.413,195,2.477,397,4.787,399,3.693,469,6.669,616,4.61,652,6.015,1707,9.641,2823,11.957,4448,18.08,4449,18.08,4450,18.08,4451,18.08,4452,18.08,4453,18.08,4454,18.08,4455,18.08,4456,18.08,4457,18.08,4458,18.08,4459,18.08]],["keywords/697",[]],["title/698",[2042,532.102]],["content/698",[13,4.528,205,9.594,224,2.325,226,4.612,277,4.315,340,4.556,352,5.909,445,6.267,652,6.809,731,8.468,1018,13.945,1221,7.959,2823,16.167]],["keywords/698",[]],["title/699",[16,250.43]],["content/699",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2823,12.146]],["keywords/699",[]],["title/700",[282,329.633]],["content/700",[3,2.479,13,4.508,18,5.449,19,4.697,36,5.9,43,4.027,123,7.115,195,2.101,222,2.434,258,3.061,282,3.875,330,5.179,397,3.24,399,3.133,422,4.721,426,7.11,427,5.564,428,8.469,447,6.077,464,3.843,568,5.857,652,6.779,689,4.311,693,4.009,714,5.986,851,5.62,908,5.51,1535,5.964,1716,6.515,1803,8.063,1875,6.86,2823,13.476,3262,6.682,3263,7.267,3640,10.451,3641,8.497,4335,13.453]],["keywords/700",[]],["title/701",[1023,407.123]],["content/701",[15,4.72,123,8.797,222,3.009,224,2.154,258,3.784,397,4.006,399,3.874,689,5.33,707,6.54,838,8.152,842,6.461,847,7.116,851,6.949,1921,15.391,3262,8.262,3275,7.978,3277,10.263,3279,10.681,3641,10.506,3766,10.966,4337,15.391,4460,18.964,4461,18.964]],["keywords/701",[]],["title/702",[3357,1364.669]],["content/702",[]],["keywords/702",[]],["title/703",[195,156.745,397,241.681,616,291.743]],["content/703",[2,2.093,3,3.251,7,8.123,8,7.273,22,1.955,31,5.198,49,5.175,127,4.909,168,4.061,224,2.285,397,4.249,399,4.109,469,7.419,714,7.85,3357,15.836,4462,20.112]],["keywords/703",[]],["title/704",[2042,532.102]],["content/704",[13,4.651,224,2.388,226,4.737,277,4.432,340,4.679,352,6.069,445,6.437,652,6.994,1230,10.901,3357,19.556]],["keywords/704",[]],["title/705",[16,250.43]],["content/705",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3357,14.46]],["keywords/705",[]],["title/706",[282,329.633]],["content/706",[3,2.479,13,4.508,18,5.449,19,4.697,36,5.9,43,4.027,123,7.115,195,2.101,222,2.434,258,3.061,282,3.875,330,5.179,397,3.24,399,3.133,422,4.721,426,7.11,427,5.564,428,8.469,447,6.077,464,3.843,568,5.857,652,6.779,689,4.311,693,4.009,714,5.986,851,5.62,908,5.51,1535,5.964,1716,6.515,1803,8.063,1875,6.86,3262,6.682,3263,7.267,3272,12.076,3357,16.044,3640,10.451,3641,8.497]],["keywords/706",[]],["title/707",[1023,407.123]],["content/707",[15,4.72,123,8.797,222,3.009,224,2.154,230,6.422,258,3.784,397,4.006,399,3.874,689,5.33,707,6.54,838,8.152,842,6.461,847,7.116,851,6.949,3262,8.262,3275,7.978,3277,10.263,3278,14.538,3279,10.681,3641,10.506,3766,10.966,4463,18.964,4464,17.56]],["keywords/707",[]],["title/708",[3355,1269.296]],["content/708",[]],["keywords/708",[]],["title/709",[195,156.745,397,241.681,616,291.743]],["content/709",[2,1.444,3,2.242,7,5.604,8,6.885,19,4.389,31,3.586,49,3.57,127,3.386,195,1.901,206,5.74,397,4.022,399,2.834,465,6.317,469,5.118,616,3.538,632,6.216,646,6.436,652,4.616,731,5.74,781,9.454,870,9.05,1021,6.538,1765,8.426,1795,8.174,2065,10.636,2130,9.454,3355,10.16,4465,13.874,4466,13.874,4467,13.874,4468,13.874,4469,13.874,4470,13.874,4471,13.874,4472,23.399,4473,13.874,4474,13.874,4475,13.874,4476,13.874,4477,13.874,4478,13.874,4479,13.874,4480,13.874,4481,13.874,4482,13.874,4483,13.874,4484,13.874,4485,13.874,4486,13.874,4487,13.874,4488,13.874,4489,13.874,4490,13.874,4491,13.874,4492,13.874,4493,13.874,4494,13.874,4495,13.874,4496,13.874,4497,13.874,4498,13.874]],["keywords/709",[]],["title/710",[2042,532.102]],["content/710",[66,4.77,127,5.274,652,8.398,752,8.465,896,9.406,4499,21.607]],["keywords/710",[]],["title/711",[16,250.43]],["content/711",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3355,13.45]],["keywords/711",[]],["title/712",[282,329.633]],["content/712",[3,2.256,18,5.492,19,4.407,22,2.12,222,2.215,258,2.785,282,3.636,397,2.948,399,2.851,422,4.296,426,7.166,447,5.53,465,4.63,526,6.657,575,3.349,626,8.87,652,7.256,689,3.923,693,3.648,714,5.447,851,5.114,896,8.127,908,5.014,1535,5.427,1716,6.113,1859,12.181,1875,6.437,2255,10.447,3064,13.245,3263,6.613,3355,17.18,4500,13.957,4501,19.12,4502,13.957,4503,13.957,4504,13.957,4505,13.957]],["keywords/712",[]],["title/713",[1023,407.123]],["content/713",[15,4.72,222,3.009,224,2.154,246,10.592,258,3.784,397,4.006,399,3.874,400,8.046,689,5.33,707,6.54,838,8.152,842,6.461,847,7.116,851,6.949,1859,10.592,3064,11.517,3261,15.391,3275,7.978,3751,17.56,4506,18.964,4507,18.964,4508,18.964,4509,18.964]],["keywords/713",[]],["title/714",[70,554.539,3359,899.071]],["content/714",[]],["keywords/714",[]],["title/715",[195,156.745,397,241.681,616,291.743]],["content/715",[2,1.99,3,3.09,7,7.723,8,6.914,31,4.942,49,4.919,127,4.667,195,2.62,397,4.956,399,3.906,469,7.053,541,12.165,616,4.876,2171,16.074,3727,17.704,3962,17.704,4510,19.12,4511,19.12,4512,19.12,4513,19.12]],["keywords/715",[]],["title/716",[2042,532.102]],["content/716",[2,2.358,22,2.203,66,3.992,161,7.031,195,2.477,206,9.375,222,2.869,345,7.841,347,6.516,354,4.461,355,4.652,396,7.511,601,10.511,616,4.61,641,7.913,642,9.572,895,5.422,908,8.14,921,7.738,2042,5.551,3359,11.793,3471,8.809,3484,9.134,3931,12.74]],["keywords/716",[]],["title/717",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,3359,444.26,3471,331.852]],["content/717",[25,5.757,70,9.783,89,4.372,195,2.78,222,3.219,241,8.428,386,10.002,526,6.901,575,4.868,627,5.162,3359,15.862,3966,14.05]],["keywords/717",[]],["title/718",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/718",[16,3.093,22,2.081,66,4.726,195,2.266,206,8.857,222,3.397,290,7.109,291,4.538,320,8.202,340,3.681,347,5.96,352,4.775,422,5.091,601,7.672,627,6.04,652,5.502,864,5.98,896,8.846,1442,9.237,1974,8.153,1986,10.267,2155,12.111,3333,14.158,3359,16.961,3484,8.355,4514,16.537,4515,16.537]],["keywords/718",[]],["title/719",[16,250.43]],["content/719",[1,5.617,2,1.911,16,3.306,22,1.786,70,7.389,89,3.958,163,6.11,222,2.914,224,2.964,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3359,11.98]],["keywords/719",[]],["title/720",[282,329.633]],["content/720",[2,1.212,3,1.883,14,5.842,15,2.9,18,4.84,19,3.881,20,3.876,22,1.133,30,3.725,36,4.481,70,4.687,86,5.349,168,2.352,195,2.709,222,3.137,226,2.625,230,3.945,241,4.84,258,2.325,282,4.119,283,4.372,329,4.53,330,3.934,347,6.068,352,3.364,354,2.874,355,4.332,399,2.38,409,6.305,422,3.586,426,6.699,427,4.226,428,7.317,469,4.297,526,5.61,568,4.449,601,5.404,627,4.284,689,4.732,693,3.045,714,4.547,846,5.612,851,4.269,875,3.251,895,6.494,896,6.274,908,7.102,1133,4.185,1344,7.075,1535,4.53,1621,7.075,1716,5.383,1795,6.864,1803,6.125,1875,5.668,2120,7.599,2960,9.455,3262,5.076,3263,5.52,3273,7.317,3359,10.982,3471,5.676,3739,10.787,3744,9.173,4357,9.794,4376,9.173,4516,11.65]],["keywords/720",[]],["title/721",[1023,407.123]],["content/721",[1,3.864,15,4.268,86,7.873,123,10.165,222,2.721,224,1.948,258,3.422,347,6.18,397,3.622,399,3.503,400,7.275,689,4.819,707,5.913,838,7.371,842,5.842,847,6.434,851,6.283,895,5.142,908,6.16,1023,4.028,1133,6.16,1142,5.986,2125,10.202,3262,7.47,3273,13.762,3275,7.213,3323,13.916,3359,11.185,3944,13.501,3966,11.875,3997,14.415,4200,15.04,4517,17.147,4518,17.147]],["keywords/721",[]],["title/722",[1042,554.539,3359,899.071]],["content/722",[]],["keywords/722",[]],["title/723",[2042,532.102]],["content/723",[18,3.777,73,5.845,127,5.298,160,7.921,186,7.462,195,2.315,197,12.331,258,4.332,274,8.883,334,6.963,374,6.254,526,6.16,575,4.054,652,7.979,731,8.981,902,7.429,903,16.247,1042,6.798,1598,10.156,1768,9.683,1923,10.878,2096,11.339,2470,11.022,3359,11.022,4024,15.646,4519,16.898,4520,14.822,4521,16.898]],["keywords/723",[]],["title/724",[895,519.739]],["content/724",[16,2.707,18,4.187,22,1.821,69,3.781,71,5.877,75,7.908,89,4.037,195,1.857,206,5.606,222,2.973,228,5.202,231,5.41,250,7.568,277,2.857,281,4.319,290,5.825,291,3.718,340,3.016,347,4.884,355,3.486,365,8.962,422,4.171,428,5.015,557,5.958,627,5.464,676,6.641,693,3.542,749,6.72,840,9.924,849,5.067,864,4.9,895,4.063,896,9.372,910,9.548,1268,10.388,1837,9.348,1842,9.727,1889,11.886,1945,7.765,1974,9.236,1986,13.331,2055,8.144,2155,9.924,2545,9.384,3359,15.111,3484,9.465,4522,17.347,4523,13.551,4524,13.551]],["keywords/724",[]],["title/725",[627,291.095,895,343.078,896,426.353]],["content/725",[66,4.328,147,10.53,340,4.364,355,5.044,359,8.427,601,9.094,627,4.988,679,9.094,896,8.876,1113,9.782,3359,12.787,3484,9.904,3785,17.195,3795,14.673,4520,17.195,4525,18.152,4526,18.152,4527,18.152]],["keywords/725",[]],["title/726",[895,413.323,3484,696.341]],["content/726",[22,1.434,66,5.3,147,7.925,198,6.741,206,8.215,296,5.801,340,3.284,355,5.774,359,6.342,552,7.6,557,6.487,601,10.41,627,3.754,652,6.606,679,6.844,692,7.868,896,8.363,900,9.266,1021,9.357,1042,5.936,1063,7.985,1113,7.362,1268,11.311,1945,8.455,3333,9.758,3359,16.34,3484,10.031,3496,9.758,3500,9.058,3785,12.941,3795,11.043,4520,12.941,4522,13.661,4525,13.661,4526,13.661,4527,13.661,4528,14.754,4529,14.754,4530,13.661,4531,14.754,4532,14.754]],["keywords/726",[]],["title/727",[16,250.43]],["content/727",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1042,7.331,3359,11.886]],["keywords/727",[]],["title/728",[282,329.633]],["content/728",[14,8.222,18,5.539,19,3.296,22,1.89,147,10.442,160,9.113,282,2.72,422,5.984,426,7.227,464,4.87,467,5.799,601,9.018,627,3.639,896,9.527,903,10.703,1042,5.753,1050,5.991,1142,6.787,1716,4.572,1875,4.814,1945,8.195,2094,10.278,2248,8.123,2811,15.777,3273,8.982,3359,12.68,3484,11.972,3496,9.458,3500,8.779,3501,9.904,4533,14.3,4534,14.3]],["keywords/728",[]],["title/729",[616,351.477,689,387.369]],["content/729",[127,5.374,160,10.32,747,14.56,4535,22.016,4536,22.016,4537,22.016]],["keywords/729",[]],["title/730",[3361,1297.249]],["content/730",[]],["keywords/730",[]],["title/731",[2042,532.102]],["content/731",[2,1.911,13,5.062,22,2.225,161,7.142,195,2.516,222,2.914,345,7.965,347,6.619,354,4.531,355,4.725,396,7.63,616,4.683,641,8.038,642,9.723,652,7.613,895,5.507,908,8.22,921,7.86,2042,5.638,3361,13.746,3471,8.948,3484,9.278,3931,12.941]],["keywords/731",[]],["title/732",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,3361,509.766,3471,331.852]],["content/732",[526,6.494,3361,17.127]],["keywords/732",[]],["title/733",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/733",[13,4.917,526,6.308,652,7.395,3361,19.205]],["keywords/733",[]],["title/734",[16,250.43]],["content/734",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3361,13.746]],["keywords/734",[]],["title/735",[282,329.633]],["content/735",[13,4.949,18,5.587,19,5.762,20,4.878,86,6.732,127,3.578,226,4.455,228,4.071,230,4.965,258,2.926,282,4.254,397,3.097,399,2.995,400,6.22,426,6.981,652,7.442,682,5.831,693,3.832,714,5.722,851,5.372,895,7.496,908,7.102,1535,5.701,1716,6.321,1875,6.655,3263,6.947,3361,14.797,3481,9.32,3482,9.838,3966,10.153,4337,11.899,4538,13.575,4539,13.575]],["keywords/735",[]],["title/736",[1023,407.123]],["content/736",[89,3.615,222,3.428,224,1.906,230,5.681,254,8.371,258,3.348,284,5.044,397,5.049,399,3.427,400,10.141,689,6.717,707,5.785,838,7.211,842,5.715,847,8.968,851,8.757,1133,6.027,3275,7.057,3277,9.079,3362,15.533,3432,11.449,3495,10.299,3966,11.618,4337,17.536,4539,15.533]],["keywords/736",[]],["title/737",[3363,1364.669]],["content/737",[]],["keywords/737",[]],["title/738",[195,156.745,397,241.681,616,291.743]],["content/738",[2,1.363,3,2.116,7,5.288,8,4.734,19,5.262,22,1.273,31,3.384,49,4.707,127,3.196,168,2.643,207,7.829,224,1.487,228,5.08,230,4.434,250,12.749,270,4.096,281,4.217,343,9.484,386,11.839,397,2.766,399,2.675,429,8.128,440,5.073,469,4.83,714,5.11,787,8.659,887,12.89,993,7.086,1837,10.52,2103,12.123,2807,15.379,3363,21.336,3966,9.067,4540,13.093,4541,13.242,4542,13.093,4543,13.093,4544,13.093,4545,13.093,4546,13.093,4547,13.093,4548,13.093]],["keywords/738",[]],["title/739",[2042,532.102]],["content/739",[14,6.475,30,5.966,112,6.245,279,7.6,575,4.477,632,8.36,652,8.353,1050,7.817,1214,12.172,1215,8.483,1267,7.917,1905,13.149,2094,10.023,3363,19.766,4549,18.66,4550,18.66,4551,18.66,4552,18.66,4553,18.66]],["keywords/739",[]],["title/740",[16,250.43]],["content/740",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3363,14.46]],["keywords/740",[]],["title/741",[282,329.633]],["content/741",[3,2.216,14,6.553,18,5.641,19,4.354,36,5.274,43,3.6,123,6.36,195,1.878,206,7.814,222,2.175,258,2.736,282,3.592,330,4.629,397,2.896,399,2.801,426,7.36,427,4.974,428,7.997,447,5.432,568,5.236,601,8.762,689,3.853,693,3.584,714,5.351,851,5.024,908,4.925,1050,7.912,1142,6.594,1267,5.817,1535,5.331,1716,6.039,1803,7.208,1875,6.358,2094,10.098,3064,8.327,3262,5.973,3263,6.496,3363,18.332,3500,8.417,3640,9.342,3641,7.595,4418,11.526,4554,12.695]],["keywords/741",[]],["title/742",[1023,407.123]],["content/742",[15,4.5,123,8.387,222,2.869,224,2.054,258,3.608,397,3.819,399,3.693,689,5.081,707,6.235,838,7.772,842,6.16,847,6.784,851,6.625,3064,10.98,3262,7.877,3275,7.606,3277,12.263,3279,10.183,3496,11.957,3500,11.099,3641,10.016,3766,10.454,3774,14.236,4541,11.355,4554,16.741,4555,18.08,4556,18.08,4557,18.08]],["keywords/742",[]],["title/743",[3365,1364.669]],["content/743",[]],["keywords/743",[]],["title/744",[195,156.745,397,241.681,616,291.743]],["content/744",[2,2.058,3,3.195,7,7.985,8,8.657,31,5.11,49,5.087,127,4.825,195,2.709,397,5.058,399,4.039,469,7.293,616,5.041,652,6.578,1762,12.007,3365,15.567,4558,19.77]],["keywords/744",[]],["title/745",[2042,532.102]],["content/745",[14,6.86,224,2.246,226,4.455,277,4.168,340,4.401,352,5.708,445,6.054,447,10.203,513,8.388,526,5.611,901,9.524,2122,9.747,3365,18.851,4559,11.763,4560,18.306]],["keywords/745",[]],["title/746",[16,250.43]],["content/746",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3365,14.46]],["keywords/746",[]],["title/747",[282,329.633]],["content/747",[3,1.448,8,3.239,14,4.799,18,4.247,19,3.189,22,0.871,25,2.542,30,2.864,31,6.198,36,3.446,43,4.437,49,2.305,52,7.705,70,5.565,78,4.885,89,1.93,92,3.994,101,11.629,103,3.868,107,7.222,110,4.199,139,4.113,185,3.127,195,2.814,207,3.834,222,1.421,224,1.018,226,3.117,258,1.788,281,2.065,282,3.214,312,3.834,330,3.025,394,6.197,397,1.892,399,1.83,409,4.848,426,6.33,427,5.018,428,8.877,445,2.743,447,8.6,544,4.584,551,3.632,568,6.453,604,4.614,682,3.563,689,2.518,693,2.341,714,5.399,721,10.125,739,5.626,747,5.924,813,4.963,851,3.282,908,3.218,909,5.003,1049,4.268,1535,3.483,1560,7.531,1614,4.923,1679,4.113,1708,4.365,1716,4.423,1748,4.416,1837,4.47,1875,4.657,1974,6.819,1979,8.294,2122,8.33,2127,5.384,2132,4.677,2211,6.204,2248,5.088,2559,11.514,3064,5.44,3262,3.903,3263,4.244,3365,13.304,3492,8.688,3493,8.587,3494,9.747,3845,7.857,3950,6.204,3969,6.705,4559,8.23,4560,8.294,4561,8.294,4562,8.294,4563,4.743,4564,8.294,4565,8.294]],["keywords/747",[]],["title/748",[1023,407.123]],["content/748",[15,4.058,123,9.84,222,2.587,224,1.852,258,3.254,397,3.444,399,3.331,458,7.202,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,851,5.974,1133,5.858,1142,7.406,1143,8.186,1603,10.241,1614,8.962,1973,9.701,2122,8.038,3262,7.104,3275,6.859,3279,9.183,3495,10.01,3641,11.752,3645,15.098,3766,9.428,3950,11.292,4561,15.098,4562,15.098,4564,15.098,4565,15.098,4566,16.305,4567,16.305,4568,16.305,4569,13.233,4570,16.305,4571,16.305,4572,16.305]],["keywords/748",[]],["title/749",[3305,1064.028]],["content/749",[]],["keywords/749",[]],["title/750",[2042,532.102]],["content/750",[1,3.389,6,4.614,16,2.906,19,2.305,22,1.758,31,4.673,72,6.356,73,3.458,89,2.155,107,5.22,113,3.54,127,2.44,137,5.293,168,4.354,186,4.679,195,2.061,196,3.874,222,2.869,224,2.054,226,4.86,263,3.069,281,2.305,291,2.743,307,3.366,316,3.917,335,4.074,340,2.225,352,2.886,363,5.15,368,3.639,381,5.948,401,4.022,405,5.781,440,3.874,445,3.061,461,5.331,464,3.768,504,5.019,568,5.744,575,2.399,647,3.726,679,4.638,693,2.613,731,4.136,777,5.89,803,5.331,864,5.438,873,4.712,875,2.79,906,4.479,996,7.045,1008,4.843,1074,4.989,1121,4.763,1212,5.452,1217,6.771,1220,6.738,1348,5.729,1363,5.781,1453,5.452,1466,7.322,1702,9.337,1748,4.929,1784,6.812,1796,6.072,1973,5.948,1974,7.415,1986,9.337,2080,6.521,2094,4.336,2174,6.436,2563,8.913,2573,6.356,3305,6.138,3848,6.436,4559,5.948,4563,5.293,4573,8.114,4574,8.02,4575,9.257,4576,6.612,4577,8.114,4578,8.114,4579,8.769,4580,8.114,4581,8.114,4582,7.177,4583,7.872,4584,6.521,4585,8.114,4586,8.114,4587,8.114,4588,6.356,4589,6.279,4590,5.679,4591,6.009,4592,6.138]],["keywords/750",[]],["title/751",[864,626.718]],["content/751",[]],["keywords/751",[]],["title/752",[647,426.353,1299,694.819,3305,702.361]],["content/752",[2,1.177,13,2.502,15,5.651,16,2.381,18,3.683,24,2.93,40,10.475,43,2.97,52,4.586,66,5.012,73,3.912,89,2.437,113,2.662,127,2.761,168,4.785,185,5.753,186,5.127,195,1.55,196,4.382,207,4.841,221,5.678,222,1.795,226,4.38,281,2.607,291,3.104,335,3.713,340,2.518,368,4.117,369,5.946,374,7.195,417,6.37,432,5.067,439,5.988,485,4.928,568,7.424,572,6.869,575,3.954,627,2.878,731,6.818,803,6.031,808,4.82,875,3.156,906,5.067,1008,5.479,1063,6.121,1081,8.465,1139,11.412,1142,3.949,1189,7.731,1348,6.481,1973,6.729,1974,5.576,2094,4.905,2182,7.833,2257,8.465,2518,13.938,2562,6.425,2563,9.583,3053,7.022,4084,8.119,4563,5.988,4576,7.48,4583,8.905,4584,7.378,4588,7.19,4591,6.798,4593,12.334,4594,8.119,4595,8.283]],["keywords/752",[]],["title/753",[335,257.805,1151,633.815,3305,702.361]],["content/753",[2,1.75,13,1.967,15,3.422,16,2.957,18,1.987,22,1.84,52,3.605,66,4.778,69,2.48,73,3.075,92,3.964,112,5.628,113,2.093,115,5.124,127,3.356,168,4.132,185,4.801,186,4.278,198,6.282,221,4.463,222,1.41,224,1.91,226,2.003,228,2.468,250,4.965,258,1.774,263,2.729,279,4.522,281,2.049,282,1.691,291,2.439,293,4.965,297,3.756,335,3.789,340,1.979,352,2.567,367,3.371,368,3.236,374,6.224,389,4.706,423,5.14,426,2.592,427,3.225,432,3.983,439,4.706,448,3.094,485,3.873,568,6.422,575,3.299,594,3.964,600,6.057,627,3.499,646,6.379,647,3.313,658,3.563,693,4.947,731,5.689,803,4.74,804,3.663,823,3.927,849,5.142,864,3.214,906,3.983,1008,4.307,1023,2.088,1063,4.811,1074,4.436,1139,9.523,1142,3.104,1143,4.463,1151,4.925,1189,7.527,1210,4.212,1212,4.848,1215,6.251,1217,6.19,1220,7.534,1221,6.539,1222,4.775,2020,3.873,2094,5.964,2461,6.381,2466,5.399,2518,12.564,2562,5.05,2563,8.29,3305,10.323,3404,5.007,4576,5.879,4584,5.799,4588,5.651,4593,10.292,4594,6.381,4596,8.889,4597,5.457,4598,6.815,4599,8.231,4600,8.231,4601,6.057]],["keywords/753",[]],["title/754",[43,256.768,226,220.355,3305,600.333,4563,517.722]],["content/754",[2,1.586,16,2.931,19,2.345,22,1.481,31,2.629,43,6.529,69,2.838,75,5.937,78,5.547,89,2.192,113,2.395,137,9.672,161,3.956,168,3.688,222,3.219,226,5.603,251,4.546,263,4.678,270,3.182,275,9.354,281,2.345,282,2.898,284,3.058,307,6.15,329,3.956,335,4.571,340,2.264,368,3.703,389,5.386,405,8.81,427,6.628,437,5.206,440,7.078,448,5.303,457,4.557,509,5.993,515,5.206,573,6.315,875,2.838,901,4.9,1113,5.076,1221,3.956,1309,9.57,1445,7.168,1793,7.045,1803,5.348,1837,5.076,2025,5.829,2078,5.464,2122,5.015,2127,6.114,2422,6.245,3305,6.245,4559,13.569,4563,12.075,4574,8.125,4579,8.923,4590,8.655,4591,13.058,4592,11.215,4595,7.45,4602,8.552,4603,7.798,4604,7.798,4605,7.798,4606,7.614,4607,7.798]],["keywords/754",[]],["title/755",[401,460.294,546,451.561,2215,674.055]],["content/755",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,3305,10.01,3401,11.11]],["keywords/755",[]],["title/756",[16,250.43]],["content/756",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3305,11.275]],["keywords/756",[]],["title/757",[282,329.633]],["content/757",[1,2.555,14,4.972,16,1.007,18,4.586,19,3.303,22,1.393,43,1.83,49,1.794,52,4.597,57,6.617,67,3.321,73,2.411,109,4.068,110,3.268,112,2.333,113,4.83,116,4.068,137,3.691,168,4.317,173,2.616,180,3.377,181,2.92,186,2.169,206,2.884,222,2.882,224,1.628,226,3.229,230,2.361,250,3.894,258,1.391,282,2.156,295,3.64,307,5.557,334,2.872,335,5.24,340,1.552,347,2.513,354,1.72,368,2.537,369,3.665,385,2.286,399,2.927,400,2.958,401,6.641,422,2.146,424,6.44,426,6.627,440,4.393,445,2.135,448,2.426,464,2.84,467,4.597,469,2.572,495,2.572,504,3.5,505,5.764,516,3.894,519,3.831,551,2.827,568,2.662,575,3.961,622,3.615,626,3.234,627,1.774,644,2.783,647,2.598,654,3.615,681,3.64,682,2.772,689,3.186,693,2.963,714,2.721,767,3.802,792,2.872,803,3.717,812,5.079,851,2.554,895,2.09,901,3.358,908,2.504,976,2.997,1094,5.218,1126,4.926,1163,6.385,1221,2.711,1312,4.19,1535,2.711,1550,8.139,1624,5.96,1633,4.148,1679,3.201,1708,3.397,1716,3.625,1824,2.908,1875,3.817,1885,4.432,1918,5.489,2121,4.328,2182,4.828,2563,5.589,2606,4.828,3124,4.328,3305,4.28,3403,4.19,3404,3.926,3405,3.926,3406,4.547,3410,4.61,3411,3.96,3412,7.395,3416,4.678,3423,4.547,3673,10.985,4559,8.526,4563,3.691,4574,7.641,4582,5.004,4588,4.432,4590,6.44,4591,8.612,4592,4.28,4608,5.105,4609,4.432,4610,5.658,4611,5.658,4612,5.658,4613,5.489,4614,5.344,4615,5.344,4616,5.658,4617,5.658,4618,6.231,4619,9.202,4620,5.489,4621,8.139,4622,5.489,4623,5.344,4624,5.658]],["keywords/757",[]],["title/758",[1023,407.123]],["content/758",[49,4.195,89,4.571,112,5.457,127,3.98,168,3.292,222,3.962,224,1.852,254,11.764,258,3.254,277,3.438,284,4.902,335,3.674,357,7.643,397,3.444,399,4.333,400,6.918,575,3.912,578,8.759,622,8.455,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,849,6.097,851,5.974,995,9.701,1126,5.606,3275,6.859,3306,14.302,3405,9.183,3428,10.941,3430,8.087,3431,11.11,3432,7.811,4625,13.233]],["keywords/758",[]],["title/759",[222,181.529,231,456.746,1815,767.708]],["content/759",[127,4.483,195,2.516,224,2.086,230,6.219,232,11.038,266,8.749,277,3.872,290,7.895,381,10.927,383,10.094,411,9.723,430,10.344,532,10.174,561,14.73,597,10.524,736,9.723,909,10.258,1067,12.941,1089,14.46,1535,7.142,1637,11.675,1810,11.402,2336,12.941,3305,11.275,4626,14.905,4627,14.079]],["keywords/759",[]],["title/760",[387,667.74,4628,989.405]],["content/760",[11,3.547,47,5.89,109,7.598,168,5.253,214,6.203,220,5.524,222,3.613,230,4.409,231,7.274,281,3.001,324,6.381,334,5.365,338,11.888,377,6.662,385,5.976,387,10.184,399,2.66,404,6.208,408,5.548,416,10.9,435,6.62,440,5.044,504,6.537,532,7.213,546,5.139,616,5.806,704,8.297,938,10.841,960,8.737,1086,9.174,1134,12.227,1237,9.449,1285,7.746,1337,8.277,1447,9.981,1810,8.083,1863,8.493,2230,10.251,2598,7.598,2608,7.461,3831,10.251,4589,8.177,4629,9.346,4630,10.567,4631,10.251,4632,10.567,4633,8.611,4634,8.493,4635,10.567,4636,8.382,4637,10.567]],["keywords/760",[]],["title/761",[173,429.303,195,156.745,1392,792.33]],["content/761",[15,3.868,18,3.474,68,7.487,168,3.138,173,7.713,179,8.115,195,2.129,222,3.655,231,8.207,237,6.741,291,4.265,307,5.232,324,7.617,383,8.542,385,5.097,399,3.175,404,5.295,422,4.784,435,7.902,594,6.93,658,6.229,676,7.617,736,8.229,841,8.229,856,9.157,906,6.963,976,6.681,1008,7.53,1196,8.907,1285,9.247,1392,10.764,1455,9.341,2042,4.772,2598,9.071,4574,8.288,4618,11.298,4629,11.157,4633,10.279,4638,11.157,4639,11.157,4640,15.386,4641,11.157,4642,12.614,4643,12.614]],["keywords/761",[]],["title/762",[173,517.202,4644,1118.642]],["content/762",[19,3.681,68,7.693,116,9.32,168,3.224,172,5.951,173,8.758,179,8.338,222,3.703,224,2.377,231,8.354,324,7.827,334,6.58,340,3.555,387,7.737,422,4.916,430,8.994,520,9.501,698,8.281,704,6.303,736,8.455,808,6.805,837,9.914,841,8.455,856,9.409,1196,9.151,1302,10.881,1436,12.574,1455,9.598,1812,9.699,2598,9.32,4618,11.501,4628,15.021,4638,11.463,4639,11.463,4641,11.463,4645,12.961,4646,12.961,4647,12.961]],["keywords/762",[]],["title/763",[231,550.264,993,745.942]],["content/763",[3,2.654,69,4.582,78,8.955,113,3.865,161,6.385,166,9.77,168,4.302,213,10.081,222,3.973,230,5.561,237,7.122,324,8.048,334,6.766,349,9.583,377,8.403,383,9.025,399,3.354,422,5.055,430,9.248,435,8.349,440,6.362,495,6.057,676,8.048,993,8.887,1067,11.571,1285,9.77,2598,9.583,4084,11.787,4589,10.313,4618,9.025,4633,10.86,4634,10.711,4648,13.327,4649,13.327,4650,13.327,4651,13.327,4652,13.327,4653,13.327]],["keywords/763",[]],["title/764",[57,667.674,2871,877.073,4618,628.788]],["content/764",[6,5.297,15,2.857,16,1.658,18,2.565,22,1.116,30,3.67,37,8.239,43,3.014,49,2.953,57,11.44,61,5.815,107,10.235,116,6.698,162,4.749,168,2.317,179,5.992,186,3.571,195,1.573,207,4.912,208,4.749,222,3.779,226,3.753,231,6.649,237,4.978,251,3.424,272,5.873,296,4.513,303,4.912,320,5.692,324,5.625,330,3.875,334,4.729,335,2.586,340,2.555,349,6.698,381,6.829,383,6.308,401,4.618,464,2.876,481,7.046,518,4.463,519,6.308,557,7.323,561,7.389,575,2.754,594,5.118,658,4.6,704,4.53,709,7.821,735,7.487,736,6.077,752,4.496,771,4.934,774,8.088,786,8.799,823,5.07,833,6.359,849,4.292,864,4.15,1074,5.727,1159,8.088,1221,4.463,1298,7.591,1326,6.464,1637,7.296,1748,5.658,1784,7.821,1986,7.126,2042,3.524,2598,6.698,3305,7.046,3530,7.949,4576,7.591,4594,8.239,4618,9.154,4621,8.239,4634,7.487,4654,13.517,4655,13.517,4656,13.517,4657,9.315,4658,9.315,4659,9.315,4660,9.037,4661,9.315,4662,9.315]],["keywords/764",[]],["title/765",[1988,487.519,2046,639,3305,702.361]],["content/765",[]],["keywords/765",[]],["title/766",[2042,532.102]],["content/766",[1,2.5,6,5.12,16,1.603,19,2.557,22,1.869,31,4.969,72,7.053,73,3.838,107,5.792,113,3.825,127,2.708,137,5.874,168,4.548,186,5.055,195,1.52,196,4.298,222,2.578,224,1.846,226,4.769,263,3.406,291,3.044,307,3.735,316,4.346,335,3.661,340,2.47,352,3.203,363,5.715,368,4.038,381,6.601,401,4.464,405,6.415,440,4.298,464,4.071,504,5.57,568,6.205,575,2.662,679,5.147,731,4.59,803,5.916,864,4.012,873,5.228,875,3.096,906,4.97,996,7.818,1008,5.375,1121,5.285,1348,6.358,1363,6.415,1453,6.05,1466,8.125,1702,10.087,1748,5.469,1784,7.56,1796,6.738,1973,6.601,1974,8.01,1986,10.087,2080,7.237,2094,4.812,2174,7.142,2563,9.478,2573,7.053,3305,6.811,3848,7.142,4559,6.601,4563,5.874,4573,9.004,4574,8.664,4575,10.273,4576,7.337,4577,9.004,4578,9.004,4579,9.731,4580,9.004,4581,9.004,4582,7.964,4583,8.735,4584,7.237,4585,9.004,4586,9.004,4587,9.004,4588,7.053,4589,6.968,4590,6.302,4591,6.668,4592,6.811]],["keywords/766",[]],["title/767",[864,626.718]],["content/767",[2,1.435,13,1.459,15,2.697,16,2.549,22,0.641,33,3.964,52,2.674,57,9.319,66,5.153,69,5.291,79,1.78,92,2.941,107,5.657,112,4.616,113,1.553,115,6.574,127,4.629,168,2.188,180,5.25,185,2.303,186,3.371,196,2.555,222,1.047,224,1.231,226,4.273,228,1.832,250,3.684,251,3.233,258,2.162,263,2.025,279,3.564,281,1.52,282,2.061,289,9.952,291,2.973,297,2.786,303,2.823,335,4.715,340,1.468,348,5.778,350,4.362,352,1.904,360,2.955,367,4.109,372,2.036,374,5.105,389,3.492,432,4.855,439,3.492,445,2.02,464,1.652,467,2.674,485,2.873,518,4.214,556,6.008,568,5.267,572,4.006,575,2.6,594,2.941,627,3.509,641,4.742,646,7.408,651,2.664,658,2.643,693,3.605,731,2.729,752,2.584,804,2.718,808,5.877,810,2.969,823,2.913,849,4.052,873,3.108,906,2.955,921,4.638,1008,3.195,1023,1.549,1142,2.303,1189,5.485,1210,3.125,1215,4.926,1217,4.878,1220,6.179,1221,2.565,1222,3.543,1290,6.324,1363,3.814,1401,10.054,1628,6.976,1639,4.735,1643,3.125,1716,2.109,1757,4.83,1796,8.376,1832,3.597,1974,5.342,1988,2.811,2020,2.873,2046,7.703,2094,4.7,2132,3.443,2216,7.166,2466,4.006,2518,9.804,2562,3.747,2563,5.342,3305,9.804,3578,4.83,3668,7.504,3669,4.426,3670,4.568,4584,4.302,4593,8.11,4597,4.049,4598,5.056,4640,4.937,4663,6.596,4664,4.494,4665,5.353,4666,6.596,4667,5.785,4668,5.785,4669,5.785,4670,8.794,4671,6.107,4672,6.107,4673,6.107,4674,6.107,4675,5.785,4676,5.785]],["keywords/767",[]],["title/768",[401,460.294,546,451.561,2215,674.055]],["content/768",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,3305,10.01,3401,11.11]],["keywords/768",[]],["title/769",[16,250.43]],["content/769",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3305,11.275]],["keywords/769",[]],["title/770",[282,329.633]],["content/770",[1,2.555,14,4.972,16,1.007,18,4.586,19,3.303,22,1.393,43,1.83,49,1.794,52,4.597,57,6.617,67,3.321,73,2.411,109,4.068,110,3.268,112,2.333,113,4.83,116,4.068,137,3.691,168,4.317,173,2.616,180,3.377,181,2.92,186,2.169,206,2.884,222,2.882,224,1.628,226,3.229,230,2.361,250,3.894,258,1.391,282,2.156,295,3.64,307,5.557,334,2.872,335,5.24,340,1.552,347,2.513,354,1.72,368,2.537,369,3.665,385,2.286,399,2.927,400,2.958,401,6.641,422,2.146,424,6.44,426,6.627,440,4.393,445,2.135,448,2.426,464,2.84,467,4.597,469,2.572,495,2.572,504,3.5,505,5.764,516,3.894,519,3.831,551,2.827,568,2.662,575,3.961,622,3.615,626,3.234,627,1.774,644,2.783,647,2.598,654,3.615,681,3.64,682,2.772,689,3.186,693,2.963,714,2.721,767,3.802,792,2.872,803,3.717,812,5.079,851,2.554,895,2.09,901,3.358,908,2.504,976,2.997,1094,5.218,1126,4.926,1163,6.385,1221,2.711,1312,4.19,1535,2.711,1550,8.139,1624,5.96,1633,4.148,1679,3.201,1708,3.397,1716,3.625,1824,2.908,1875,3.817,1885,4.432,1918,5.489,2121,4.328,2182,4.828,2563,5.589,2606,4.828,3124,4.328,3305,4.28,3403,4.19,3404,3.926,3405,3.926,3406,4.547,3410,4.61,3411,3.96,3412,7.395,3416,4.678,3423,4.547,3673,10.985,4559,8.526,4563,3.691,4574,7.641,4582,5.004,4588,4.432,4590,6.44,4591,8.612,4592,4.28,4608,5.105,4609,4.432,4610,5.658,4611,5.658,4612,5.658,4613,5.489,4614,5.344,4615,5.344,4616,5.658,4617,5.658,4618,6.231,4619,9.202,4620,5.489,4621,8.139,4622,5.489,4623,5.344,4624,5.658]],["keywords/770",[]],["title/771",[1023,407.123]],["content/771",[49,4.195,89,4.571,112,5.457,127,3.98,168,3.292,222,3.962,224,1.852,254,11.764,258,3.254,277,3.438,284,4.902,335,3.674,357,7.643,397,3.444,399,4.333,400,6.918,575,3.912,578,8.759,622,8.455,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,849,6.097,851,5.974,995,9.701,1126,5.606,3275,6.859,3306,14.302,3405,9.183,3428,10.941,3430,8.087,3431,11.11,3432,7.811,4625,13.233]],["keywords/771",[]],["title/772",[222,181.529,231,456.746,1815,767.708]],["content/772",[127,4.413,195,2.477,224,2.054,230,6.123,232,10.866,266,8.613,277,3.812,290,7.772,381,10.757,383,9.937,411,9.572,430,10.183,532,10.016,561,14.587,597,10.361,736,9.572,909,10.098,1067,12.74,1089,14.236,1535,7.031,1637,11.493,1810,11.224,1988,7.704,2046,10.098,2336,12.74,3305,11.099,4626,14.674,4627,13.86]],["keywords/772",[]],["title/773",[387,667.74,4628,989.405]],["content/773",[11,3.547,47,5.89,109,7.598,168,5.253,214,6.203,220,5.524,222,3.613,230,4.409,231,7.274,281,3.001,324,6.381,334,5.365,338,11.888,377,6.662,385,5.976,387,10.184,399,2.66,404,6.208,408,5.548,416,10.9,435,6.62,440,5.044,504,6.537,532,7.213,546,5.139,616,5.806,704,8.297,938,10.841,960,8.737,1086,9.174,1134,12.227,1237,9.449,1285,7.746,1337,8.277,1447,9.981,1810,8.083,1863,8.493,2230,10.251,2598,7.598,2608,7.461,3831,10.251,4589,8.177,4629,9.346,4630,10.567,4631,10.251,4632,10.567,4633,8.611,4634,8.493,4635,10.567,4636,8.382,4637,10.567]],["keywords/773",[]],["title/774",[173,429.303,195,156.745,1392,792.33]],["content/774",[15,3.868,18,3.474,68,7.487,168,3.138,173,7.713,179,8.115,195,2.129,222,3.655,231,8.207,237,6.741,291,4.265,307,5.232,324,7.617,383,8.542,385,5.097,399,3.175,404,5.295,422,4.784,435,7.902,594,6.93,658,6.229,676,7.617,736,8.229,841,8.229,856,9.157,906,6.963,976,6.681,1008,7.53,1196,8.907,1285,9.247,1392,10.764,1455,9.341,2042,4.772,2598,9.071,4574,8.288,4618,11.298,4629,11.157,4633,10.279,4638,11.157,4639,11.157,4640,15.386,4641,11.157,4642,12.614,4643,12.614]],["keywords/774",[]],["title/775",[173,517.202,4644,1118.642]],["content/775",[19,3.681,68,7.693,116,9.32,168,3.224,172,5.951,173,8.758,179,8.338,222,3.703,224,2.377,231,8.354,324,7.827,334,6.58,340,3.555,387,7.737,422,4.916,430,8.994,520,9.501,698,8.281,704,6.303,736,8.455,808,6.805,837,9.914,841,8.455,856,9.409,1196,9.151,1302,10.881,1436,12.574,1455,9.598,1812,9.699,2598,9.32,4618,11.501,4628,15.021,4638,11.463,4639,11.463,4641,11.463,4645,12.961,4646,12.961,4647,12.961]],["keywords/775",[]],["title/776",[231,550.264,993,745.942]],["content/776",[3,2.654,69,4.582,78,8.955,113,3.865,161,6.385,166,9.77,168,4.302,213,10.081,222,3.973,230,5.561,237,7.122,324,8.048,334,6.766,349,9.583,377,8.403,383,9.025,399,3.354,422,5.055,430,9.248,435,8.349,440,6.362,495,6.057,676,8.048,993,8.887,1067,11.571,1285,9.77,2598,9.583,4084,11.787,4589,10.313,4618,9.025,4633,10.86,4634,10.711,4648,13.327,4649,13.327,4650,13.327,4651,13.327,4652,13.327,4653,13.327]],["keywords/776",[]],["title/777",[57,667.674,2871,877.073,4618,628.788]],["content/777",[6,5.297,15,2.857,16,1.658,18,2.565,22,1.116,30,3.67,37,8.239,43,3.014,49,2.953,57,11.44,61,5.815,107,10.235,116,6.698,162,4.749,168,2.317,179,5.992,186,3.571,195,1.573,207,4.912,208,4.749,222,3.779,226,3.753,231,6.649,237,4.978,251,3.424,272,5.873,296,4.513,303,4.912,320,5.692,324,5.625,330,3.875,334,4.729,335,2.586,340,2.555,349,6.698,381,6.829,383,6.308,401,4.618,464,2.876,481,7.046,518,4.463,519,6.308,557,7.323,561,7.389,575,2.754,594,5.118,658,4.6,704,4.53,709,7.821,735,7.487,736,6.077,752,4.496,771,4.934,774,8.088,786,8.799,823,5.07,833,6.359,849,4.292,864,4.15,1074,5.727,1159,8.088,1221,4.463,1298,7.591,1326,6.464,1637,7.296,1748,5.658,1784,7.821,1986,7.126,2042,3.524,2598,6.698,3305,7.046,3530,7.949,4576,7.591,4594,8.239,4618,9.154,4621,8.239,4634,7.487,4654,13.517,4655,13.517,4656,13.517,4657,9.315,4658,9.315,4659,9.315,4660,9.037,4661,9.315,4662,9.315]],["keywords/777",[]],["title/778",[1956,945.178]],["content/778",[]],["keywords/778",[]],["title/779",[195,188.839,638,876.205]],["content/779",[3,3.065,7,7.66,13,4.196,22,1.844,79,5.119,160,8.89,195,2.598,335,4.273,343,7.043,464,4.751,465,7.743,638,12.056,974,10.867,998,11.398,1956,12.729,1957,16.634,2241,15.943,2243,14.932,2495,15.943,4677,18.964,4678,18.964]],["keywords/779",[]],["title/780",[2042,532.102]],["content/780",[4,8.125,8,5.51,16,2.202,18,3.406,22,1.972,89,3.284,92,6.794,112,6.789,186,4.741,207,6.521,226,3.434,279,5.011,281,4.677,335,5.48,340,4.516,352,4.399,367,5.778,490,4.251,512,8.246,575,3.656,627,5.803,693,3.983,895,4.569,902,6.699,1105,9.158,1133,5.474,1212,8.309,1214,9.939,1215,9.223,1267,6.465,1401,7.068,1768,8.732,1956,13.81,2210,11.405,2212,14.109,2216,10.077,4679,15.237,4680,15.237,4681,15.237]],["keywords/780",[]],["title/781",[16,250.43]],["content/781",[1,5.617,2,2.381,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,1956,10.015]],["keywords/781",[]],["title/782",[282,329.633]],["content/782",[3,3.129,18,5.527,19,4.462,30,6.19,92,6.337,112,4.757,113,4.557,114,12.467,229,5.954,230,4.813,258,2.836,282,3.682,334,5.857,335,6.072,399,2.903,424,10.996,426,7.441,448,6.738,469,5.243,490,3.966,575,5.671,647,5.297,689,3.994,693,3.715,1050,5.954,1126,7.569,1210,6.734,1716,6.19,1875,6.517,3403,8.542,3411,8.074,4682,13.16,4683,9.843]],["keywords/782",[]],["title/783",[1023,407.123]],["content/783",[3,3.09,112,6.399,222,3.034,224,2.172,258,3.816,335,4.309,397,4.039,399,3.906,489,9.011,575,5.628,707,6.594,838,8.219,842,6.514,847,7.175,1126,6.573,3275,8.044,3280,15.518,3307,16.074,4684,17.704,4685,21.721]],["keywords/783",[]],["title/784",[1217,620.495,1220,617.512]],["content/784",[9,10.722,16,3.442,22,1.619,61,5.815,92,7.427,115,6.207,163,5.542,224,1.892,228,4.625,258,3.324,272,8.523,281,3.839,303,7.128,367,6.316,389,8.818,461,8.882,594,7.427,646,9.977,658,6.675,693,6.226,804,6.863,823,7.357,849,8.042,1023,3.912,1217,9.682,1220,10.671,1221,6.477,1222,8.947,1956,9.083,2020,7.256,2037,11.349]],["keywords/784",[]],["title/785",[43,256.768,287,418.518,291,268.337,401,393.43]],["content/785",[3,2.014,57,10.311,79,3.364,107,6.506,110,5.842,186,5.497,192,6.18,195,2.421,208,8.492,222,3.543,224,2.332,226,3.981,237,5.405,251,7.305,290,7.595,316,4.882,335,2.808,340,2.774,353,7.65,363,6.419,369,6.551,373,8.945,374,4.612,401,7.108,404,4.246,410,7.49,464,3.122,495,4.597,511,8.463,515,6.377,546,4.919,554,12.038,674,10.476,679,5.781,689,4.965,735,11.524,840,12.939,921,7.561,974,7.141,1005,14.339,1076,8.63,1091,6.849,1139,8.63,1218,8.945,1300,13.224,1590,8.362,1708,6.072,1770,9.126,1832,6.796,1835,9.327,2183,18.004,2265,9.126,2271,8.945,4686,12.462,4687,9.553,4688,12.462,4689,12.462,4690,12.462,4691,12.462]],["keywords/785",[]],["title/786",[208,353.271,251,254.733,373,612.92,707,294.447,2096,572.957]],["content/786",[3,2.654,15,4.087,16,2.373,79,4.432,89,3.539,207,7.028,208,6.794,222,3.754,226,4.802,229,6.879,251,6.357,263,5.041,277,3.462,281,3.785,291,5.847,367,8.08,373,15.297,387,10.324,677,7.322,682,6.53,689,4.615,707,8.158,906,7.357,1956,11.621,1995,11.189,2096,11.019,3788,10.86,4692,16.42,4693,16.42,4694,16.42,4695,16.42]],["keywords/786",[]],["title/787",[1824,723.04]],["content/787",[]],["keywords/787",[]],["title/788",[272,705.325,616,351.477]],["content/788",[61,8.108,92,8.388,127,4.591,221,9.444,224,2.137,272,9.626,335,4.239,490,6.48,616,4.797,647,8.655,864,6.802,1074,9.386,1299,14.105,1824,9.689,4696,15.814,4697,17.418,4698,15.814,4699,15.814,4700,14.811]],["keywords/788",[]],["title/789",[2042,532.102]],["content/789",[1,2.975,6,3.894,16,2.659,19,1.945,22,1.582,25,3.747,31,4.756,43,2.216,49,3.397,72,5.364,73,2.919,89,2.846,107,4.405,113,3.108,127,2.06,137,4.467,168,4.755,186,4.108,195,1.809,196,3.269,222,2.92,224,1.848,226,4.501,263,2.591,281,1.945,291,4.464,307,2.841,316,3.306,335,4.146,340,1.878,352,2.436,363,4.346,368,3.071,381,5.02,401,7.403,405,4.879,440,3.269,445,2.584,461,4.5,464,3.308,504,4.236,511,6.325,568,5.043,575,2.024,647,3.145,679,3.914,693,2.206,731,3.491,741,4.602,777,4.971,803,4.5,829,7.323,860,4.567,864,4.775,873,3.977,875,2.354,906,3.78,976,7.91,996,5.946,998,9.777,1008,4.088,1030,6.057,1049,4.02,1074,4.21,1121,4.02,1212,4.602,1217,5.944,1220,5.916,1348,4.835,1443,5.86,1453,4.602,1466,6.18,1702,8.197,1748,4.16,1784,5.75,1796,5.125,1824,5.508,1973,5.02,1974,6.51,1986,5.238,1995,5.75,2080,5.504,2094,3.66,2174,5.432,2265,6.18,2563,10.912,2573,5.364,3848,5.432,4559,5.02,4563,4.467,4573,6.848,4574,7.041,4576,5.581,4577,6.848,4578,6.848,4580,6.848,4581,6.848,4582,6.057,4584,5.504,4585,6.848,4586,6.848,4587,6.848,4588,5.364,4589,5.3,4590,4.793,4591,5.071,4592,5.18,4701,7.401,4702,6.18,4703,8.438,4704,8.438,4705,8.438]],["keywords/789",[]],["title/790",[864,626.718]],["content/790",[18,4.534,19,4.677,61,7.083,127,4.952,335,4.572,647,9.062,752,7.948,1299,12.321,1824,8.463,3053,12.595,4697,18.785,4698,17.056,4699,17.056,4700,15.974]],["keywords/790",[]],["title/791",[647,426.353,1299,694.819,1824,477.276]],["content/791",[2,1.673,13,2.42,15,5.574,16,2.323,18,2.445,24,2.833,31,2.827,40,10.222,43,2.872,52,4.435,66,4.945,73,3.783,89,2.357,113,2.575,168,4.728,185,5.614,186,5.003,195,2.203,196,4.238,207,4.681,221,5.491,222,2.551,226,4.737,281,2.521,291,3.001,335,3.623,340,2.435,368,3.981,369,5.75,374,7.057,417,6.16,432,4.9,439,5.791,485,4.765,526,3.104,568,7.282,572,6.643,575,4.575,627,2.783,731,6.653,803,5.833,808,4.661,875,3.052,906,4.9,1008,5.299,1063,5.92,1081,8.187,1139,11.136,1142,3.819,1189,7.583,1348,6.268,1824,6.708,1973,6.508,1974,5.392,2094,4.744,2182,7.575,2257,8.187,2470,7.135,2518,13.75,2562,6.213,2563,9.4,4084,7.852,4563,5.791,4576,7.234,4583,8.612,4584,7.135,4588,6.953,4591,6.574,4593,12.035,4594,7.852,4595,8.01]],["keywords/791",[]],["title/792",[1988,587.339,2047,954.559]],["content/792",[2,1.668,13,1.467,15,2.71,16,2.557,33,3.987,49,1.707,52,2.69,57,8.08,66,4.935,69,4.937,79,1.791,92,7.145,97,2.958,107,3.463,112,3.643,113,1.561,115,6.594,127,4.319,155,2.618,161,2.579,168,2.198,180,5.274,185,2.316,195,0.909,196,2.57,222,1.727,224,1.237,226,3.987,228,1.842,251,1.979,258,2.173,263,2.036,279,3.58,281,1.529,282,2.07,283,2.489,289,8.731,291,2.987,297,4.599,325,3.178,329,4.233,335,3.12,340,1.476,348,3.537,350,4.387,352,1.915,360,2.972,367,4.128,374,5.125,375,3.646,396,2.756,432,2.972,439,3.512,445,2.031,461,3.537,464,1.662,467,2.69,485,2.89,518,4.233,526,1.882,556,6.032,568,5.288,572,4.028,574,4.949,575,3.322,594,4.854,608,3.871,627,3.523,641,4.765,646,7.433,658,2.658,693,4.188,731,2.744,752,2.599,767,10.37,804,2.733,808,5.9,810,2.986,823,2.93,849,4.071,873,3.126,906,2.972,1008,3.214,1023,1.558,1142,2.316,1189,6.373,1196,3.801,1210,3.143,1215,4.949,1217,6.233,1220,7.179,1221,2.579,1222,3.563,1290,6.353,1363,3.835,1401,8.208,1628,10.316,1639,4.762,1643,3.143,1716,2.121,1757,4.858,1796,6.612,1824,4.542,1832,3.617,1974,5.367,1988,2.827,2020,2.89,2046,6.08,2047,11.098,2094,4.722,2132,3.463,2466,4.028,2470,4.327,2518,9.837,2562,3.768,2563,5.367,3578,4.858,3668,7.54,3669,4.451,3670,4.594,4584,4.327,4593,8.148,4597,4.072,4640,4.965,4664,4.52,4665,5.383,4667,5.818,4668,5.818,4669,5.818,4670,5.383,4675,5.818,4676,5.818,4706,6.142,4707,6.142,4708,6.633]],["keywords/792",[]],["title/793",[335,257.805,1151,633.815,1824,477.276]],["content/793",[2,1.942,13,1.915,15,3.353,16,2.921,18,1.935,22,1.31,52,3.511,66,4.934,69,2.416,73,2.995,97,3.86,112,4.509,113,2.038,115,6.163,127,2.113,161,3.367,168,4.082,185,4.703,186,4.191,195,1.186,198,6.155,221,4.347,222,2.138,224,1.53,226,1.951,228,2.404,258,1.728,263,2.658,279,4.431,281,1.996,282,1.647,291,2.376,293,4.836,297,3.658,325,4.147,335,3.036,340,1.927,352,2.5,367,3.283,368,3.151,374,6.121,396,3.597,423,5.006,426,2.525,427,3.141,432,3.879,439,4.584,448,3.013,461,4.617,485,3.772,526,2.457,568,6.315,574,6.124,575,3.968,594,3.86,600,5.899,627,4.748,646,6.25,647,3.226,658,3.47,693,4.877,731,5.574,803,4.617,804,3.568,823,3.824,849,5.038,906,3.879,1008,4.194,1023,2.034,1063,4.686,1139,9.33,1142,3.023,1143,4.347,1189,8.04,1210,4.102,1212,4.721,1215,6.124,1217,7.445,1220,8.36,1221,6.431,1222,4.651,1290,5.053,1824,5.62,2020,3.772,2094,5.843,2461,6.215,2466,5.258,2470,5.647,2518,12.411,2562,4.918,2563,8.153,3404,4.876,4576,5.726,4584,5.647,4588,5.504,4593,10.083,4594,6.215,4597,5.315,4599,8.017,4600,8.017,4601,5.899,4709,8.658]],["keywords/793",[]],["title/794",[43,256.768,226,220.355,1824,407.945,4563,517.722]],["content/794",[2,0.97,16,2.803,19,2.148,22,1.684,31,2.408,43,6.214,66,2.057,69,2.6,75,5.437,78,5.081,89,2.008,113,2.193,137,9.168,168,3.496,222,3.078,226,5.171,251,4.253,263,4.377,270,2.914,275,5.72,281,2.148,282,2.711,284,2.801,307,5.83,329,5.544,335,3.902,340,2.074,350,6.162,368,3.391,370,4.174,389,4.933,405,8.243,427,6.282,437,4.768,440,6.709,448,4.962,457,4.174,464,4.338,509,5.489,515,4.768,573,5.784,767,5.081,808,3.97,875,2.6,920,4.898,1113,4.649,1221,3.623,1309,5.852,1401,6.613,1445,6.565,1590,6.252,1628,5.998,1793,6.452,1803,4.898,1824,8.093,1837,4.649,1988,3.97,2025,5.339,2047,6.452,2078,5.005,2122,4.593,2127,5.6,2422,5.72,4559,13.119,4563,11.069,4574,4.968,4590,8.098,4591,13.252,4592,10.631,4595,6.823,4602,7.833,4603,7.142,4604,7.142,4605,7.142,4606,6.973,4607,7.142,4702,6.823,4710,11.225,4711,7.336,4712,7.336,4713,10.67,4714,7.336,4715,7.336,4716,7.336,4717,7.833,4718,7.833]],["keywords/794",[]],["title/795",[401,460.294,546,451.561,2215,674.055]],["content/795",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,1824,6.802,3401,11.11]],["keywords/795",[]],["title/796",[16,250.43]],["content/796",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,1824,7.662]],["keywords/796",[]],["title/797",[282,329.633]],["content/797",[1,2.549,11,1.894,14,4.962,16,1.004,18,4.58,19,3.296,22,1.39,43,1.825,49,1.788,52,4.586,57,6.6,67,3.311,73,2.404,109,4.056,110,3.258,112,2.326,113,4.823,116,4.056,137,3.68,168,4.312,173,2.608,180,3.367,181,2.912,186,2.162,206,2.876,222,2.878,224,1.624,226,3.222,230,2.354,250,3.882,258,1.387,282,2.151,295,3.629,307,5.547,334,2.864,335,4.977,340,1.547,347,2.505,354,1.715,368,2.53,369,3.654,385,2.279,399,2.921,400,2.949,401,6.63,422,2.139,424,6.425,426,6.62,440,4.382,445,2.128,448,2.419,464,2.834,467,4.586,469,2.564,495,2.564,504,3.489,505,5.75,516,3.882,519,3.82,551,2.818,568,2.654,575,3.954,622,3.604,626,3.224,627,1.768,644,2.775,647,2.59,654,3.604,681,3.629,682,2.764,689,3.179,693,2.956,714,2.713,767,3.79,792,2.864,803,3.706,812,5.067,851,2.547,895,2.084,901,3.348,908,2.497,976,2.988,1094,5.202,1126,4.916,1163,6.37,1221,2.703,1312,4.177,1535,2.703,1550,8.119,1624,5.946,1633,4.135,1679,3.191,1708,3.387,1716,3.616,1824,4.718,1875,3.808,1885,4.418,1918,5.472,2121,4.315,2182,4.813,2563,5.576,2606,4.813,3124,4.315,3403,4.177,3404,3.914,3405,3.914,3406,4.534,3410,4.597,3411,3.948,3412,7.377,3416,4.664,3423,4.534,3673,10.963,4559,8.508,4563,3.68,4574,7.625,4582,4.989,4588,4.418,4590,6.425,4591,8.595,4592,4.267,4608,5.09,4609,4.418,4610,5.641,4611,5.641,4612,5.641,4613,5.472,4614,5.328,4615,5.328,4616,5.641,4617,5.641,4618,6.216,4619,9.179,4620,5.472,4621,8.119,4622,5.472,4623,5.328,4624,5.641,4719,6.096,4720,6.096]],["keywords/797",[]],["title/798",[1023,407.123]],["content/798",[49,4.195,89,4.571,112,5.457,127,3.98,168,3.292,222,3.962,224,1.852,254,11.764,258,3.254,277,3.438,284,4.902,335,3.674,357,7.643,397,3.444,399,4.333,400,6.918,575,3.912,578,8.759,622,8.455,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,849,6.097,851,5.974,995,9.701,1126,5.606,3275,6.859,3308,11.941,3405,9.183,3428,10.941,3430,8.087,3431,11.11,3432,7.811,4625,13.233]],["keywords/798",[]],["title/799",[222,181.529,231,456.746,1815,767.708]],["content/799",[127,4.483,195,2.516,224,2.086,230,6.219,232,11.038,266,8.749,277,3.872,290,7.895,381,10.927,383,10.094,411,9.723,430,10.344,532,10.174,561,14.73,597,10.524,736,9.723,909,10.258,1067,12.941,1089,14.46,1535,7.142,1637,11.675,1810,11.402,1824,7.662,2336,12.941,4626,14.905,4627,14.079]],["keywords/799",[]],["title/800",[387,667.74,4628,989.405]],["content/800",[11,3.547,47,5.89,109,7.598,168,5.253,214,6.203,220,5.524,222,3.613,230,4.409,231,7.274,281,3.001,324,6.381,334,5.365,338,11.888,377,6.662,385,5.976,387,10.184,399,2.66,404,6.208,408,5.548,416,10.9,435,6.62,440,5.044,504,6.537,532,7.213,546,5.139,616,5.806,704,8.297,938,10.841,960,8.737,1086,9.174,1134,12.227,1237,9.449,1285,7.746,1337,8.277,1447,9.981,1810,8.083,1863,8.493,2230,10.251,2598,7.598,2608,7.461,3831,10.251,4589,8.177,4629,9.346,4630,10.567,4631,10.251,4632,10.567,4633,8.611,4634,8.493,4635,10.567,4636,8.382,4637,10.567]],["keywords/800",[]],["title/801",[173,429.303,195,156.745,1392,792.33]],["content/801",[15,3.843,18,3.451,68,7.438,168,3.117,173,7.68,179,8.061,195,2.115,222,3.643,231,8.17,237,6.696,291,4.237,307,5.198,324,7.567,383,8.486,385,5.063,399,3.154,404,5.26,422,4.753,435,7.85,594,6.884,658,6.188,676,7.567,736,8.174,841,8.174,856,9.096,906,6.917,976,6.637,1008,7.48,1196,8.847,1285,9.186,1392,10.693,1455,9.279,1824,6.441,2042,4.74,2598,9.01,4574,8.233,4618,11.248,4629,11.083,4633,10.211,4638,11.083,4639,11.083,4640,15.318,4641,11.083,4642,12.531,4643,12.531]],["keywords/801",[]],["title/802",[173,517.202,4644,1118.642]],["content/802",[19,3.681,68,7.693,116,9.32,168,3.224,172,5.951,173,8.758,179,8.338,222,3.703,224,2.377,231,8.354,324,7.827,334,6.58,340,3.555,387,7.737,422,4.916,430,8.994,520,9.501,698,8.281,704,6.303,736,8.455,808,6.805,837,9.914,841,8.455,856,9.409,1196,9.151,1302,10.881,1436,12.574,1455,9.598,1812,9.699,2598,9.32,4618,11.501,4628,15.021,4638,11.463,4639,11.463,4641,11.463,4645,12.961,4646,12.961,4647,12.961]],["keywords/802",[]],["title/803",[231,550.264,993,745.942]],["content/803",[3,2.635,69,4.55,78,8.892,113,3.838,161,6.341,166,9.701,168,4.283,213,10.01,222,3.962,230,5.522,237,7.072,324,7.991,334,6.719,349,9.516,377,8.344,383,8.962,399,3.331,422,5.019,430,9.183,435,8.29,440,6.317,495,6.015,676,7.991,993,8.824,1067,11.489,1285,9.701,1824,6.802,2598,9.516,4084,11.705,4589,10.241,4618,8.962,4633,10.784,4634,10.636,4648,13.233,4649,13.233,4650,13.233,4651,13.233,4652,13.233,4653,13.233]],["keywords/803",[]],["title/804",[57,667.674,2871,877.073,4618,628.788]],["content/804",[6,5.297,15,2.857,16,1.658,18,2.565,22,1.116,30,3.67,37,8.239,43,3.014,49,2.953,57,11.44,61,5.815,107,10.235,116,6.698,162,4.749,168,2.317,179,5.992,186,3.571,195,1.573,207,4.912,208,4.749,222,3.779,226,3.753,231,6.649,237,4.978,251,3.424,272,5.873,296,4.513,303,4.912,320,5.692,324,5.625,330,3.875,334,4.729,335,2.586,340,2.555,349,6.698,381,6.829,383,6.308,401,4.618,464,2.876,481,7.046,518,4.463,519,6.308,557,7.323,561,7.389,575,2.754,594,5.118,658,4.6,704,4.53,709,7.821,735,7.487,736,6.077,752,4.496,771,4.934,774,8.088,786,8.799,823,5.07,833,6.359,849,4.292,864,4.15,1074,5.727,1159,8.088,1221,4.463,1298,7.591,1326,6.464,1637,7.296,1748,5.658,1784,7.821,1824,4.788,1986,7.126,2042,3.524,2598,6.698,3530,7.949,4576,7.591,4594,8.239,4618,9.154,4621,8.239,4634,7.487,4654,13.517,4655,13.517,4656,13.517,4657,9.315,4658,9.315,4659,9.315,4660,9.037,4661,9.315,4662,9.315]],["keywords/804",[]],["title/805",[3,184.904,13,253.109,409,619.168]],["content/805",[1,3.981,2,1.839,3,3.958,13,5.692,22,1.718,36,6.796,79,6.028,168,3.567,222,2.803,227,5.681,231,7.053,261,6.562,277,3.725,289,8.113,340,3.933,347,6.368,372,5.453,385,5.794,409,9.562,422,5.439,448,6.149,489,8.326,660,8.282,1043,10.311,1237,9.162,2847,11.856]],["keywords/805",[]],["title/806",[61,341.406,172,364.419,1150,340.348,1824,407.945]],["content/806",[]],["keywords/806",[]],["title/807",[2042,532.102]],["content/807",[1,2.5,6,5.12,16,1.603,19,2.557,22,1.869,31,5.47,72,7.053,73,3.838,107,5.792,113,3.825,127,2.708,137,5.874,168,4.548,186,5.055,195,1.52,196,4.298,222,2.578,224,1.846,226,4.769,263,3.406,291,3.044,307,3.735,316,4.346,335,3.661,340,2.47,352,3.203,363,5.715,368,4.038,381,6.601,401,4.464,405,6.415,440,4.298,464,4.071,504,5.57,568,6.205,575,2.662,679,5.147,731,4.59,803,5.916,864,4.012,873,5.228,875,3.096,906,4.97,976,4.769,996,7.818,1008,5.375,1121,5.285,1348,6.358,1453,6.05,1466,8.125,1702,10.087,1748,5.469,1784,7.56,1796,6.738,1824,4.628,1973,6.601,1974,8.01,1986,6.888,2080,7.237,2094,4.812,2174,7.142,2563,9.478,2573,7.053,3848,7.142,4559,6.601,4563,5.874,4573,9.004,4574,8.664,4576,7.337,4577,9.004,4578,9.004,4580,9.004,4581,9.004,4582,7.964,4583,8.735,4584,7.237,4585,9.004,4586,9.004,4587,9.004,4588,7.053,4589,6.968,4590,6.302,4591,6.668,4592,6.811,4701,9.731,4702,8.125]],["keywords/807",[]],["title/808",[864,626.718]],["content/808",[2,1.95,13,1.93,15,3.373,16,2.931,18,1.95,22,1.317,52,3.537,61,4.731,66,4.741,73,3.017,97,3.889,112,6.27,115,6.192,127,2.129,161,3.392,168,4.096,185,4.731,186,4.216,195,1.195,198,3.985,221,4.379,222,2.15,224,1.539,226,1.966,228,2.422,258,1.741,263,2.678,279,4.457,281,2.011,282,1.659,291,2.394,293,4.872,297,3.685,325,4.179,335,3.744,340,1.942,352,2.518,367,5.138,368,3.175,374,6.15,385,2.861,396,3.624,432,3.908,439,4.618,461,4.651,485,3.8,526,2.475,568,6.345,574,6.16,575,3.986,594,3.889,600,5.944,626,4.046,627,4.228,646,6.286,647,3.251,651,5.473,658,3.496,682,3.469,693,4.343,731,5.606,803,4.651,804,3.594,823,3.853,849,5.067,906,3.908,1008,4.226,1023,2.049,1063,4.721,1139,9.384,1142,3.045,1150,3.036,1189,7.451,1210,4.133,1215,9.223,1217,7.48,1220,8.393,1221,3.392,1222,4.686,1824,3.639,2020,3.8,2094,5.877,2132,4.554,2225,7.333,2466,8.229,2470,5.69,2518,12.454,2562,4.955,2563,8.191,3404,4.913,4576,5.769,4584,5.69,4588,5.545,4593,10.142,4594,6.262,4597,5.355,4601,5.944,4721,8.723]],["keywords/808",[]],["title/809",[43,256.768,226,220.355,1824,407.945,4563,517.722]],["content/809",[2,0.97,16,2.803,19,2.148,22,1.684,31,2.408,43,6.214,66,2.057,69,2.6,75,5.437,78,5.081,89,2.008,113,2.193,137,9.168,168,3.496,222,3.078,226,5.171,251,4.253,263,4.377,270,2.914,275,5.72,281,2.148,282,2.711,284,2.801,307,5.83,329,5.544,335,3.902,340,2.074,350,6.162,368,3.391,370,4.174,389,4.933,405,8.243,427,6.282,437,4.768,440,6.709,448,4.962,457,4.174,464,4.338,509,5.489,515,4.768,573,5.784,767,5.081,808,3.97,875,2.6,920,4.898,1113,4.649,1221,3.623,1309,5.852,1401,6.613,1445,6.565,1590,6.252,1628,5.998,1793,6.452,1803,4.898,1824,8.093,1837,4.649,1988,3.97,2025,5.339,2047,6.452,2078,5.005,2122,4.593,2127,5.6,2422,5.72,4559,13.119,4563,11.069,4574,4.968,4590,8.098,4591,13.252,4592,10.631,4595,6.823,4602,7.833,4603,7.142,4604,7.142,4605,7.142,4606,6.973,4607,7.142,4702,6.823,4710,11.225,4711,7.336,4712,7.336,4713,10.67,4714,7.336,4715,7.336,4716,7.336,4717,7.833,4718,7.833]],["keywords/809",[]],["title/810",[401,460.294,546,451.561,2215,674.055]],["content/810",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,1824,6.802,3401,11.11]],["keywords/810",[]],["title/811",[16,250.43]],["content/811",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,1824,7.662]],["keywords/811",[]],["title/812",[282,329.633]],["content/812",[1,2.549,11,1.894,14,4.962,16,1.004,18,4.58,19,3.296,22,1.39,43,1.825,49,1.788,52,4.586,57,6.6,67,3.311,73,2.404,109,4.056,110,3.258,112,2.326,113,4.823,116,4.056,137,3.68,168,4.312,173,2.608,180,3.367,181,2.912,186,2.162,206,2.876,222,2.878,224,1.624,226,3.222,230,2.354,250,3.882,258,1.387,282,2.151,295,3.629,307,5.547,334,2.864,335,4.977,340,1.547,347,2.505,354,1.715,368,2.53,369,3.654,385,2.279,399,2.921,400,2.949,401,6.63,422,2.139,424,6.425,426,6.62,440,4.382,445,2.128,448,2.419,464,2.834,467,4.586,469,2.564,495,2.564,504,3.489,505,5.75,516,3.882,519,3.82,551,2.818,568,2.654,575,3.954,622,3.604,626,3.224,627,1.768,644,2.775,647,2.59,654,3.604,681,3.629,682,2.764,689,3.179,693,2.956,714,2.713,767,3.79,792,2.864,803,3.706,812,5.067,851,2.547,895,2.084,901,3.348,908,2.497,976,2.988,1094,5.202,1126,4.916,1163,6.37,1221,2.703,1312,4.177,1535,2.703,1550,8.119,1624,5.946,1633,4.135,1679,3.191,1708,3.387,1716,3.616,1824,4.718,1875,3.808,1885,4.418,1918,5.472,2121,4.315,2182,4.813,2563,5.576,2606,4.813,3124,4.315,3403,4.177,3404,3.914,3405,3.914,3406,4.534,3410,4.597,3411,3.948,3412,7.377,3416,4.664,3423,4.534,3673,10.963,4559,8.508,4563,3.68,4574,7.625,4582,4.989,4588,4.418,4590,6.425,4591,8.595,4592,4.267,4608,5.09,4609,4.418,4610,5.641,4611,5.641,4612,5.641,4613,5.472,4614,5.328,4615,5.328,4616,5.641,4617,5.641,4618,6.216,4619,9.179,4620,5.472,4621,8.119,4622,5.472,4623,5.328,4624,5.641,4719,6.096,4720,6.096]],["keywords/812",[]],["title/813",[1023,407.123]],["content/813",[49,4.195,89,4.571,112,5.457,127,3.98,168,3.292,222,3.962,224,1.852,254,11.764,258,3.254,277,3.438,284,4.902,335,3.674,357,7.643,397,3.444,399,4.333,400,6.918,575,3.912,578,8.759,622,8.455,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,849,6.097,851,5.974,995,9.701,1126,5.606,3275,6.859,3308,11.941,3405,9.183,3428,10.941,3430,8.087,3431,11.11,3432,7.811,4625,13.233]],["keywords/813",[]],["title/814",[222,181.529,231,456.746,1815,767.708]],["content/814",[127,4.483,195,2.516,224,2.086,230,6.219,232,11.038,266,8.749,277,3.872,290,7.895,381,10.927,383,10.094,411,9.723,430,10.344,532,10.174,561,14.73,597,10.524,736,9.723,909,10.258,1067,12.941,1089,14.46,1535,7.142,1637,11.675,1810,11.402,1824,7.662,2336,12.941,4626,14.905,4627,14.079]],["keywords/814",[]],["title/815",[387,667.74,4628,989.405]],["content/815",[11,3.547,47,5.89,109,7.598,168,5.253,214,6.203,220,5.524,222,3.613,230,4.409,231,7.274,281,3.001,324,6.381,334,5.365,338,11.888,377,6.662,385,5.976,387,10.184,399,2.66,404,6.208,408,5.548,416,10.9,435,6.62,440,5.044,504,6.537,532,7.213,546,5.139,616,5.806,704,8.297,938,10.841,960,8.737,1086,9.174,1134,12.227,1237,9.449,1285,7.746,1337,8.277,1447,9.981,1810,8.083,1863,8.493,2230,10.251,2598,7.598,2608,7.461,3831,10.251,4589,8.177,4629,9.346,4630,10.567,4631,10.251,4632,10.567,4633,8.611,4634,8.493,4635,10.567,4636,8.382,4637,10.567]],["keywords/815",[]],["title/816",[173,429.303,195,156.745,1392,792.33]],["content/816",[15,3.843,18,3.451,68,7.438,168,3.117,173,7.68,179,8.061,195,2.115,222,3.643,231,8.17,237,6.696,291,4.237,307,5.198,324,7.567,383,8.486,385,5.063,399,3.154,404,5.26,422,4.753,435,7.85,594,6.884,658,6.188,676,7.567,736,8.174,841,8.174,856,9.096,906,6.917,976,6.637,1008,7.48,1196,8.847,1285,9.186,1392,10.693,1455,9.279,1824,6.441,2042,4.74,2598,9.01,4574,8.233,4618,11.248,4629,11.083,4633,10.211,4638,11.083,4639,11.083,4640,15.318,4641,11.083,4642,12.531,4643,12.531]],["keywords/816",[]],["title/817",[173,517.202,4644,1118.642]],["content/817",[19,3.681,68,7.693,116,9.32,168,3.224,172,5.951,173,8.758,179,8.338,222,3.703,224,2.377,231,8.354,324,7.827,334,6.58,340,3.555,387,7.737,422,4.916,430,8.994,520,9.501,698,8.281,704,6.303,736,8.455,808,6.805,837,9.914,841,8.455,856,9.409,1196,9.151,1302,10.881,1436,12.574,1455,9.598,1812,9.699,2598,9.32,4618,11.501,4628,15.021,4638,11.463,4639,11.463,4641,11.463,4645,12.961,4646,12.961,4647,12.961]],["keywords/817",[]],["title/818",[231,550.264,993,745.942]],["content/818",[3,2.635,69,4.55,78,8.892,113,3.838,161,6.341,166,9.701,168,4.283,213,10.01,222,3.962,230,5.522,237,7.072,324,7.991,334,6.719,349,9.516,377,8.344,383,8.962,399,3.331,422,5.019,430,9.183,435,8.29,440,6.317,495,6.015,676,7.991,993,8.824,1067,11.489,1285,9.701,1824,6.802,2598,9.516,4084,11.705,4589,10.241,4618,8.962,4633,10.784,4634,10.636,4648,13.233,4649,13.233,4650,13.233,4651,13.233,4652,13.233,4653,13.233]],["keywords/818",[]],["title/819",[57,667.674,2871,877.073,4618,628.788]],["content/819",[6,5.297,15,2.857,16,1.658,18,2.565,22,1.116,30,3.67,37,8.239,43,3.014,49,2.953,57,11.44,61,5.815,107,10.235,116,6.698,162,4.749,168,2.317,179,5.992,186,3.571,195,1.573,207,4.912,208,4.749,222,3.779,226,3.753,231,6.649,237,4.978,251,3.424,272,5.873,296,4.513,303,4.912,320,5.692,324,5.625,330,3.875,334,4.729,335,2.586,340,2.555,349,6.698,381,6.829,383,6.308,401,4.618,464,2.876,481,7.046,518,4.463,519,6.308,557,7.323,561,7.389,575,2.754,594,5.118,658,4.6,704,4.53,709,7.821,735,7.487,736,6.077,752,4.496,771,4.934,774,8.088,786,8.799,823,5.07,833,6.359,849,4.292,864,4.15,1074,5.727,1159,8.088,1221,4.463,1298,7.591,1326,6.464,1637,7.296,1748,5.658,1784,7.821,1824,4.788,1986,7.126,2042,3.524,2598,6.698,3530,7.949,4576,7.591,4594,8.239,4618,9.154,4621,8.239,4634,7.487,4654,13.517,4655,13.517,4656,13.517,4657,9.315,4658,9.315,4659,9.315,4660,9.037,4661,9.315,4662,9.315]],["keywords/819",[]],["title/820",[3,184.904,13,253.109,409,619.168]],["content/820",[1,3.981,2,1.839,3,3.958,13,5.692,22,1.718,36,6.796,79,6.028,168,3.567,222,2.803,227,5.681,231,7.053,261,6.562,277,3.725,289,8.113,340,3.933,347,6.368,372,5.453,385,5.794,409,9.562,422,5.439,448,6.149,489,8.326,660,8.282,1043,10.311,1237,9.162,2847,11.856]],["keywords/820",[]],["title/821",[173,366.94,224,111.085,791,576.139,1824,407.945]],["content/821",[2,0.993,3,1.543,6,4.406,14,3.312,22,2.319,25,2.709,31,2.467,41,4.734,65,4.34,69,2.664,70,7.072,72,6.069,79,2.577,92,4.257,106,3.475,107,7.582,110,4.475,168,1.927,170,7.748,173,7.371,175,5.206,181,6.084,192,7.203,195,2.408,208,3.95,222,3.117,224,2.232,226,2.151,229,3.999,251,2.848,263,2.931,270,2.986,277,2.013,282,1.816,288,7.531,291,5.391,335,2.151,340,3.913,372,2.946,394,6.507,399,1.95,421,5.289,423,8.398,443,5.571,448,3.323,455,7.635,485,9.208,490,2.664,495,3.521,504,4.793,515,4.885,516,5.332,536,6.069,551,3.871,557,4.197,568,3.646,573,5.926,616,2.434,676,4.679,748,5.128,790,7.92,791,5.624,817,10.87,897,3.607,906,4.277,921,4.086,957,5.737,976,8.445,995,5.68,1090,6.145,1121,4.548,1259,8.373,1348,5.47,1591,11.435,1594,5.332,1737,6.991,1745,6.406,1824,8.195,1832,5.206,1835,7.145,1839,7.318,1863,9.474,1864,6.406,1928,6.991,1958,6.991,1964,6.727,2037,6.505,2060,7.145,2783,7.748,3395,9.9,4627,7.318,4687,7.318,4722,9.546,4723,8.839,4724,9.546,4725,9.546]],["keywords/821",[]],["title/822",[1824,477.276,1988,487.519,2046,639]],["content/822",[]],["keywords/822",[]],["title/823",[2042,532.102]],["content/823",[1,2.5,6,5.12,16,1.603,19,2.557,22,1.869,31,5.47,72,7.053,73,3.838,107,5.792,113,3.825,127,2.708,137,5.874,168,4.548,186,5.055,195,1.52,196,4.298,222,2.578,224,1.846,226,4.769,263,3.406,291,3.044,307,3.735,316,4.346,335,3.661,340,2.47,352,3.203,363,5.715,368,4.038,381,6.601,401,4.464,405,6.415,440,4.298,464,4.071,504,5.57,568,6.205,575,2.662,679,5.147,731,4.59,803,5.916,864,4.012,873,5.228,875,3.096,906,4.97,976,4.769,996,7.818,1008,5.375,1121,5.285,1348,6.358,1453,6.05,1466,8.125,1702,10.087,1748,5.469,1784,7.56,1796,6.738,1824,4.628,1973,6.601,1974,8.01,1986,6.888,2080,7.237,2094,4.812,2174,7.142,2563,9.478,2573,7.053,3848,7.142,4559,6.601,4563,5.874,4573,9.004,4574,8.664,4576,7.337,4577,9.004,4578,9.004,4580,9.004,4581,9.004,4582,7.964,4583,8.735,4584,7.237,4585,9.004,4586,9.004,4587,9.004,4588,7.053,4589,6.968,4590,6.302,4591,6.668,4592,6.811,4701,9.731,4702,8.125]],["keywords/823",[]],["title/824",[864,626.718]],["content/824",[2,1.62,13,1.4,15,2.606,16,2.492,22,0.615,33,3.802,52,2.565,57,9.086,66,5.185,69,5.186,79,1.708,92,2.821,97,2.821,107,5.466,112,3.504,113,1.489,115,6.926,127,4.536,161,2.46,168,2.114,180,5.072,185,2.209,186,3.257,195,0.867,196,2.451,222,1.661,224,1.189,226,4.188,228,1.757,251,3.124,258,2.089,263,1.942,279,3.443,281,1.458,282,1.991,289,9.8,291,2.873,297,2.673,325,3.031,335,4.637,340,1.408,348,5.583,350,4.184,352,1.827,360,2.834,367,3.97,374,4.958,396,2.628,432,4.691,439,3.349,445,1.937,461,3.374,464,1.585,467,2.565,485,2.756,518,4.071,526,1.795,556,5.835,568,5.115,572,3.842,574,4.76,575,3.214,594,4.668,627,4.389,641,4.582,646,7.222,651,2.555,658,2.535,693,3.501,731,2.618,804,2.607,808,5.708,810,2.848,823,2.794,849,3.915,873,2.981,906,2.834,921,4.481,1008,3.065,1023,1.486,1142,2.209,1189,6.192,1210,2.998,1215,4.76,1217,6.03,1220,6.975,1221,2.46,1222,3.398,1290,6.11,1363,3.658,1401,9.9,1628,6.74,1639,4.541,1643,2.998,1716,2.023,1757,4.633,1796,8.135,1824,7.195,1832,3.45,1974,5.162,1988,2.696,2020,2.756,2046,7.481,2094,4.541,2132,3.303,2216,6.924,2466,3.842,2470,4.127,2518,9.558,2562,3.594,2563,5.162,3578,4.633,3668,7.251,3669,4.245,3670,4.381,4584,4.127,4593,7.837,4597,3.884,4640,4.735,4664,4.311,4665,5.135,4667,5.549,4668,5.549,4669,5.549,4670,8.497,4671,5.858,4672,5.858,4673,5.858,4674,5.858,4675,5.549,4676,5.549,4707,5.858,4726,5.135]],["keywords/824",[]],["title/825",[43,256.768,226,220.355,1824,407.945,4563,517.722]],["content/825",[2,1.036,16,2.9,19,2.295,22,1.457,31,2.573,43,6.344,69,2.778,75,5.81,78,5.429,89,2.145,113,2.343,137,9.547,168,3.641,222,3.184,226,5.29,251,4.472,263,4.602,270,3.114,275,6.111,281,2.295,282,2.851,284,2.993,307,6.071,329,3.871,335,4.063,340,2.216,350,6.584,368,3.623,370,4.46,389,5.27,405,8.668,427,6.542,437,5.094,440,6.987,448,5.218,457,4.46,464,3.756,509,5.865,515,5.094,573,6.18,875,2.778,1113,4.967,1221,3.871,1309,6.252,1445,7.015,1590,6.68,1793,6.894,1803,5.233,1824,7.523,1837,4.967,2025,5.705,2078,5.347,2122,4.908,2127,5.983,2422,6.111,4559,13.459,4563,11.397,4574,5.308,4590,8.516,4591,12.938,4592,11.07,4595,7.29,4602,8.369,4603,7.632,4604,7.632,4605,7.632,4606,7.451,4607,7.632,4702,7.29,4710,11.804,4711,7.838,4712,7.838,4713,11.221,4714,7.838,4715,7.838,4716,7.838]],["keywords/825",[]],["title/826",[401,460.294,546,451.561,2215,674.055]],["content/826",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,1824,6.802,3401,11.11]],["keywords/826",[]],["title/827",[16,250.43]],["content/827",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,1824,7.662]],["keywords/827",[]],["title/828",[282,329.633]],["content/828",[1,2.549,11,1.894,14,4.962,16,1.004,18,4.58,19,3.296,22,1.39,43,1.825,49,1.788,52,4.586,57,6.6,67,3.311,73,2.404,109,4.056,110,3.258,112,2.326,113,4.823,116,4.056,137,3.68,168,4.312,173,2.608,180,3.367,181,2.912,186,2.162,206,2.876,222,2.878,224,1.624,226,3.222,230,2.354,250,3.882,258,1.387,282,2.151,295,3.629,307,5.547,334,2.864,335,4.977,340,1.547,347,2.505,354,1.715,368,2.53,369,3.654,385,2.279,399,2.921,400,2.949,401,6.63,422,2.139,424,6.425,426,6.62,440,4.382,445,2.128,448,2.419,464,2.834,467,4.586,469,2.564,495,2.564,504,3.489,505,5.75,516,3.882,519,3.82,551,2.818,568,2.654,575,3.954,622,3.604,626,3.224,627,1.768,644,2.775,647,2.59,654,3.604,681,3.629,682,2.764,689,3.179,693,2.956,714,2.713,767,3.79,792,2.864,803,3.706,812,5.067,851,2.547,895,2.084,901,3.348,908,2.497,976,2.988,1094,5.202,1126,4.916,1163,6.37,1221,2.703,1312,4.177,1535,2.703,1550,8.119,1624,5.946,1633,4.135,1679,3.191,1708,3.387,1716,3.616,1824,4.718,1875,3.808,1885,4.418,1918,5.472,2121,4.315,2182,4.813,2563,5.576,2606,4.813,3124,4.315,3403,4.177,3404,3.914,3405,3.914,3406,4.534,3410,4.597,3411,3.948,3412,7.377,3416,4.664,3423,4.534,3673,10.963,4559,8.508,4563,3.68,4574,7.625,4582,4.989,4588,4.418,4590,6.425,4591,8.595,4592,4.267,4608,5.09,4609,4.418,4610,5.641,4611,5.641,4612,5.641,4613,5.472,4614,5.328,4615,5.328,4616,5.641,4617,5.641,4618,6.216,4619,9.179,4620,5.472,4621,8.119,4622,5.472,4623,5.328,4624,5.641,4719,6.096,4720,6.096]],["keywords/828",[]],["title/829",[1023,407.123]],["content/829",[49,4.195,89,4.571,112,5.457,127,3.98,168,3.292,222,3.962,224,1.852,254,11.764,258,3.254,277,3.438,284,4.902,335,3.674,357,7.643,397,3.444,399,4.333,400,6.918,575,3.912,578,8.759,622,8.455,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,849,6.097,851,5.974,995,9.701,1126,5.606,3275,6.859,3308,11.941,3405,9.183,3428,10.941,3430,8.087,3431,11.11,3432,7.811,4625,13.233]],["keywords/829",[]],["title/830",[222,181.529,231,456.746,1815,767.708]],["content/830",[127,4.483,195,2.516,224,2.086,230,6.219,232,11.038,266,8.749,277,3.872,290,7.895,381,10.927,383,10.094,411,9.723,430,10.344,532,10.174,561,14.73,597,10.524,736,9.723,909,10.258,1067,12.941,1089,14.46,1535,7.142,1637,11.675,1810,11.402,1824,7.662,2336,12.941,4626,14.905,4627,14.079]],["keywords/830",[]],["title/831",[387,667.74,4628,989.405]],["content/831",[11,3.547,47,5.89,109,7.598,168,5.253,214,6.203,220,5.524,222,3.613,230,4.409,231,7.274,281,3.001,324,6.381,334,5.365,338,11.888,377,6.662,385,5.976,387,10.184,399,2.66,404,6.208,408,5.548,416,10.9,435,6.62,440,5.044,504,6.537,532,7.213,546,5.139,616,5.806,704,8.297,938,10.841,960,8.737,1086,9.174,1134,12.227,1237,9.449,1285,7.746,1337,8.277,1447,9.981,1810,8.083,1863,8.493,2230,10.251,2598,7.598,2608,7.461,3831,10.251,4589,8.177,4629,9.346,4630,10.567,4631,10.251,4632,10.567,4633,8.611,4634,8.493,4635,10.567,4636,8.382,4637,10.567]],["keywords/831",[]],["title/832",[173,429.303,195,156.745,1392,792.33]],["content/832",[15,3.843,18,3.451,68,7.438,168,3.117,173,7.68,179,8.061,195,2.115,222,3.643,231,8.17,237,6.696,291,4.237,307,5.198,324,7.567,383,8.486,385,5.063,399,3.154,404,5.26,422,4.753,435,7.85,594,6.884,658,6.188,676,7.567,736,8.174,841,8.174,856,9.096,906,6.917,976,6.637,1008,7.48,1196,8.847,1285,9.186,1392,10.693,1455,9.279,1824,6.441,2042,4.74,2598,9.01,4574,8.233,4618,11.248,4629,11.083,4633,10.211,4638,11.083,4639,11.083,4640,15.318,4641,11.083,4642,12.531,4643,12.531]],["keywords/832",[]],["title/833",[173,517.202,4644,1118.642]],["content/833",[19,3.681,68,7.693,116,9.32,168,3.224,172,5.951,173,8.758,179,8.338,222,3.703,224,2.377,231,8.354,324,7.827,334,6.58,340,3.555,387,7.737,422,4.916,430,8.994,520,9.501,698,8.281,704,6.303,736,8.455,808,6.805,837,9.914,841,8.455,856,9.409,1196,9.151,1302,10.881,1436,12.574,1455,9.598,1812,9.699,2598,9.32,4618,11.501,4628,15.021,4638,11.463,4639,11.463,4641,11.463,4645,12.961,4646,12.961,4647,12.961]],["keywords/833",[]],["title/834",[231,550.264,993,745.942]],["content/834",[3,2.635,69,4.55,78,8.892,113,3.838,161,6.341,166,9.701,168,4.283,213,10.01,222,3.962,230,5.522,237,7.072,324,7.991,334,6.719,349,9.516,377,8.344,383,8.962,399,3.331,422,5.019,430,9.183,435,8.29,440,6.317,495,6.015,676,7.991,993,8.824,1067,11.489,1285,9.701,1824,6.802,2598,9.516,4084,11.705,4589,10.241,4618,8.962,4633,10.784,4634,10.636,4648,13.233,4649,13.233,4650,13.233,4651,13.233,4652,13.233,4653,13.233]],["keywords/834",[]],["title/835",[57,667.674,2871,877.073,4618,628.788]],["content/835",[6,5.297,15,2.857,16,1.658,18,2.565,22,1.116,30,3.67,37,8.239,43,3.014,49,2.953,57,11.44,61,5.815,107,10.235,116,6.698,162,4.749,168,2.317,179,5.992,186,3.571,195,1.573,207,4.912,208,4.749,222,3.779,226,3.753,231,6.649,237,4.978,251,3.424,272,5.873,296,4.513,303,4.912,320,5.692,324,5.625,330,3.875,334,4.729,335,2.586,340,2.555,349,6.698,381,6.829,383,6.308,401,4.618,464,2.876,481,7.046,518,4.463,519,6.308,557,7.323,561,7.389,575,2.754,594,5.118,658,4.6,704,4.53,709,7.821,735,7.487,736,6.077,752,4.496,771,4.934,774,8.088,786,8.799,823,5.07,833,6.359,849,4.292,864,4.15,1074,5.727,1159,8.088,1221,4.463,1298,7.591,1326,6.464,1637,7.296,1748,5.658,1784,7.821,1824,4.788,1986,7.126,2042,3.524,2598,6.698,3530,7.949,4576,7.591,4594,8.239,4618,9.154,4621,8.239,4634,7.487,4654,13.517,4655,13.517,4656,13.517,4657,9.315,4658,9.315,4659,9.315,4660,9.037,4661,9.315,4662,9.315]],["keywords/835",[]],["title/836",[3,184.904,13,253.109,409,619.168]],["content/836",[1,3.981,2,1.839,3,3.958,13,5.692,22,1.718,36,6.796,79,6.028,168,3.567,222,2.803,227,5.681,231,7.053,261,6.562,277,3.725,289,8.113,340,3.933,347,6.368,372,5.453,385,5.794,409,9.562,422,5.439,448,6.149,489,8.326,660,8.282,1043,10.311,1237,9.162,2847,11.856]],["keywords/836",[]],["title/837",[693,299.043,3367,779.562,4727,877.073]],["content/837",[]],["keywords/837",[]],["title/838",[195,156.745,397,241.681,616,291.743]],["content/838",[2,2.168,168,4.206,230,7.055,262,8.995,263,6.396,274,10.952,424,11.834,627,5.301,864,8.933,1049,9.925,1189,8.285]],["keywords/838",[]],["title/839",[2042,532.102]],["content/839",[20,6.015,69,6.322,145,8.431,222,2.869,241,7.511,281,4.168,422,5.565,526,5.131,575,4.338,627,5.765,632,11.088,731,7.48,896,8.444,902,9.962,1267,7.671,1598,10.866,3367,12.319,4728,12.319,4729,16.741,4730,16.741,4731,16.741,4732,16.741,4733,16.741]],["keywords/839",[]],["title/840",[864,626.718]],["content/840",[2,1.741,13,2.212,14,4.467,16,0.865,20,1.991,22,1.626,30,1.913,66,3.693,69,3.592,86,2.748,112,2.003,113,4.517,115,2.23,145,9.378,162,2.476,185,5.251,198,5.882,206,2.476,207,4.279,214,2.851,225,7.245,226,2.901,230,3.386,241,2.486,250,3.343,251,4.487,262,2.584,270,4.705,274,3.146,279,4.946,329,2.327,340,1.332,352,1.728,357,4.686,359,7.772,361,3.561,367,2.269,372,3.086,375,8.266,379,10.092,385,4.932,392,9.446,417,7.251,422,1.842,434,3.005,440,2.319,445,3.942,526,5.707,557,5.661,575,4.338,607,6.706,627,5.117,632,4.479,644,5.14,646,2.776,658,4.007,677,6.706,678,3.674,679,6.977,692,3.191,693,2.613,731,4.136,758,6.612,812,2.681,864,6.537,871,6.505,895,3.861,896,7.495,897,5.683,902,9.482,920,3.146,921,2.561,938,5.948,982,6.279,1019,4.145,1021,2.82,1113,6.424,1126,2.057,1142,5.251,1143,3.005,1187,3.804,1257,7.664,1267,2.539,1302,6.812,1364,14.876,1401,2.776,1443,4.437,1497,4.479,1539,4.383,1598,6.009,1716,1.913,1765,3.635,1808,3.904,1859,3.343,1916,5.15,2062,12.52,2169,5.031,2211,4.145,2582,4.479,3367,12.319,3694,8.405,4728,4.078,4734,9.257,4735,5.541,4736,4.217,4737,5.541,4738,4.857,4739,11.921,4740,5.985,4741,5.541,4742,5.541,4743,5.541,4744,5.985]],["keywords/840",[]],["title/841",[16,250.43]],["content/841",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3367,12.514]],["keywords/841",[]],["title/842",[282,329.633]],["content/842",[13,3.711,14,5.343,15,1.29,18,5.204,19,3.55,20,1.725,22,1.631,30,2.831,31,2.289,33,8.24,41,4.392,43,2.325,44,5.701,52,2.102,66,1.145,71,2.248,79,2.39,97,2.312,108,2.556,113,3.949,136,2.001,145,4.129,168,3.813,173,5.145,180,2.512,195,1.878,196,2.009,216,5.768,222,0.823,228,1.44,230,1.756,232,3.116,251,1.547,258,1.035,277,1.867,282,2.929,303,2.219,330,2.99,340,1.154,343,1.925,353,5.437,368,3.223,369,2.725,392,8.611,399,2.368,400,6.533,401,7.599,424,5.03,426,6.571,428,5.074,429,3.218,440,6.499,458,2.29,467,2.102,490,1.447,518,2.016,526,2.513,550,5.434,551,5.559,556,8.589,562,3.429,563,2.998,579,2.357,627,2.949,634,3.429,654,2.688,689,1.457,692,2.764,693,4.025,719,7.535,771,2.229,780,3.721,812,2.323,816,4.906,818,2.443,821,4.082,835,2.47,842,1.766,860,2.806,895,4.111,896,5.109,902,5.097,925,5.296,930,4.722,960,3.479,976,3.807,1042,2.086,1049,6.531,1126,3.045,1133,1.862,1142,4.787,1143,2.603,1327,4.547,1364,3.337,1443,3.93,1614,2.849,1679,4.066,1703,3.721,1708,2.526,1716,4.923,1809,5.562,1832,2.827,1875,5.184,1943,10.823,1963,4.208,2024,6.789,2181,3.59,2255,3.88,2264,11.821,2521,7.445,2549,10.333,3124,3.218,3367,11.431,3395,4.988,3457,3.974,4035,3.88,4278,4.8,4736,3.653,4745,5.184,4746,5.184,4747,4.8,4748,4.8,4749,4.8,4750,4.8,4751,5.184,4752,4.8,4753,5.184,4754,5.184,4755,5.184,4756,5.184,4757,5.184,4758,5.184,4759,5.184,4760,5.184,4761,5.184,4762,5.184,4763,5.184,4764,5.184,4765,5.184,4766,5.184,4767,8.2,4768,5.184,4769,4.8,4770,4.8,4771,4.8,4772,5.184,4773,4.8,4774,4.8,4775,5.184,4776,5.184,4777,6.034,4778,8.856,4779,8.856,4780,5.184,4781,5.184,4782,5.184,4783,5.184]],["keywords/842",[]],["title/843",[1023,407.123]],["content/843",[14,6.527,15,4.682,41,6.76,113,3.208,222,2.163,224,1.548,258,2.72,262,8.122,397,2.879,399,2.784,458,6.021,526,3.868,556,5.938,707,4.7,771,5.859,818,10.151,835,6.493,838,5.859,842,4.644,847,5.115,895,4.087,896,5.079,925,6.227,930,7.268,1809,8.561,2264,9.604,3262,5.938,3275,5.734,3367,9.287,3442,11.459,3495,8.368,3544,11.955,4727,10.449,4749,12.62,4750,12.62,4752,12.62,4769,12.62,4770,12.62,4771,12.62,4773,12.62,4774,12.62,4784,13.63,4785,13.63,4786,11.955,4787,23.224,4788,13.63,4789,13.63,4790,13.63,4791,13.63,4792,13.63,4793,13.63,4794,13.63,4795,13.63,4796,13.63,4797,13.63,4798,13.63,4799,13.63,4800,13.63,4801,13.63,4802,11.062,4803,13.63,4804,13.63,4805,13.63]],["keywords/843",[]],["title/844",[758,756.644,3367,779.562,4806,1059.327]],["content/844",[]],["keywords/844",[]],["title/845",[613,554.925,652,252.11,758,501.136,2020,330.123,4727,580.899,4807,664.638]],["content/845",[13,4.871,345,11.067,396,9.146,693,5.755,1535,8.561]],["keywords/845",[]],["title/846",[693,360.272,4727,1056.653]],["content/846",[18,3.949,19,4.073,168,4.944,195,2.421,205,8.282,279,5.811,326,10.512,374,6.539,427,6.41,428,6.539,448,6.149,465,5.861,526,5.014,632,7.915,653,20.678,676,8.659,693,5.837,733,12.449,1679,8.113,1905,12.449,1921,14.339,2582,13.224,3367,12.039,4590,10.036,4727,13.545,4808,22.332,4809,17.668]],["keywords/846",[]],["title/847",[652,325.355,758,646.731,2020,426.032,4807,857.735]],["content/847",[1,3.836,18,3.804,19,3.924,43,4.469,60,9.507,168,4.403,205,7.979,224,1.934,226,3.836,279,5.598,283,6.387,320,10.816,347,6.135,412,15.76,428,6.3,440,6.595,464,4.264,527,8.826,550,7.979,616,5.561,632,9.771,731,7.042,758,11.257,849,6.365,1189,6.769,2086,9.934,2582,12.74,4810,17.021,4811,17.021,4812,17.021,4813,17.021,4814,17.021,4815,17.021]],["keywords/847",[]],["title/848",[2042,532.102]],["content/848",[20,5.878,69,6.231,145,8.239,222,2.803,241,7.34,281,4.073,422,5.439,526,5.014,575,4.239,620,10.846,627,5.682,632,10.971,731,7.31,896,8.322,902,9.819,1267,7.496,1598,10.619,1921,14.339,3367,12.039,4727,13.545,4728,12.039,4729,16.359,4730,16.359,4731,16.359,4732,16.359,4733,16.359]],["keywords/848",[]],["title/849",[422,424.277,864,498.398]],["content/849",[2,1.353,13,2.416,14,4.511,16,0.692,18,2.906,20,1.593,22,2.042,30,1.531,42,2.269,60,2.675,66,2.87,69,3.047,86,2.199,92,2.135,113,4.053,115,1.785,127,1.169,145,9.227,162,1.982,179,2.5,181,2.006,185,4.539,195,0.656,196,1.856,198,4.989,206,1.982,207,3.541,214,2.282,219,2.167,224,0.94,225,3.985,226,2.93,230,1.622,235,2.467,241,3.437,251,4.792,262,3.572,270,3.416,279,4.276,283,1.797,299,3.375,326,6.497,329,1.862,340,1.841,345,2.077,349,2.795,352,2.388,354,2.694,357,3.878,359,6.904,361,2.849,363,2.467,367,4.141,372,2.553,375,4.547,379,8.724,385,2.713,392,8.166,411,2.536,417,6.151,422,1.474,434,2.404,440,1.856,445,3.981,513,3.51,526,4.558,541,2.483,542,4.444,552,2.467,557,5.716,575,3.853,607,3.689,627,4.632,632,5.825,644,5.19,652,1.593,658,5.21,660,2.245,677,3.689,678,2.94,679,6.031,692,2.554,693,4.979,731,6.645,758,7.222,812,5.825,849,1.791,864,6.582,871,5.517,874,3.263,895,3.899,896,7.374,897,3.126,902,9.235,920,2.518,938,4.922,973,3.214,982,5.196,998,2.878,1021,3.899,1022,2.653,1113,7.324,1142,4.539,1187,5.259,1257,9.967,1267,3.51,1302,5.637,1364,15.068,1401,2.222,1443,3.671,1497,3.585,1539,3.507,1598,4.972,1716,1.531,1765,6.632,1808,3.124,1916,4.261,2055,2.878,2062,6.192,2074,3.585,2169,4.026,2211,3.317,2227,4.435,2255,3.585,2582,6.192,3117,4.435,3122,7.839,3367,10.002,3694,4.026,4035,3.585,4727,9.967,4735,4.435,4736,3.375,4737,4.435,4738,10.552,4739,10.112,4741,4.435,4742,4.435,4743,4.435,4806,4.435,4807,7.256,4816,4.789,4817,4.789,4818,4.789,4819,4.789,4820,4.789,4821,4.789,4822,4.789,4823,4.789,4824,4.789,4825,4.789]],["keywords/849",[]],["title/850",[16,250.43]],["content/850",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3367,12.514]],["keywords/850",[]],["title/851",[282,329.633]],["content/851",[3,2.933,13,5.025,18,5.807,19,4.184,145,8.464,195,1.774,222,2.054,258,2.584,282,3.452,330,4.372,392,14.266,397,2.735,399,2.645,426,7.424,428,6.718,447,5.13,556,7.907,627,4.618,689,3.639,692,6.904,693,3.384,714,5.053,851,4.744,896,8.913,908,4.651,1142,8.35,1535,5.035,1716,5.803,1875,6.11,2255,9.691,3262,5.641,3263,6.134,3367,12.367,4357,10.885,4734,16.806,4736,9.123,4747,11.988,4748,11.988,4786,11.356,4826,11.988,4827,11.988,4828,11.988]],["keywords/851",[]],["title/852",[1023,407.123]],["content/852",[15,4.431,222,2.825,224,2.022,258,3.553,262,7.687,397,3.761,399,3.637,483,13.038,526,5.052,689,5.003,707,6.139,838,7.653,842,6.065,847,6.68,1380,15.616,3262,7.756,3275,7.49,3277,12.145,3368,16.484,3765,19.683,3774,14.018,3944,14.018,4358,14.967,4786,15.616,4826,16.484,4827,16.484,4828,16.484,4829,17.803,4830,16.484]],["keywords/852",[]],["title/853",[3121,1297.249]],["content/853",[]],["keywords/853",[]],["title/854",[195,156.745,397,241.681,616,291.743]],["content/854",[2,2.13,3,3.308,7,8.266,8,7.401,31,5.289,49,5.266,127,4.995,195,2.804,397,5.164,399,4.181,469,7.55,616,5.219,4831,20.466]],["keywords/854",[]],["title/855",[2042,532.102]],["content/855",[2,1.759,16,2.442,22,2.461,36,6.5,66,4.793,145,10.122,161,6.571,163,5.622,224,1.92,340,3.761,347,7.824,352,6.267,354,5.356,355,5.585,396,7.02,526,4.795,616,4.309,627,4.299,693,4.417,810,7.607,895,5.067,896,6.297,921,7.232,1020,9.287,1026,8.946,3121,16.247,3484,10.967]],["keywords/855",[]],["title/856",[864,413.694,895,343.078,3484,577.996]],["content/856",[18,4.105,19,4.234,22,1.786,66,4.055,69,6.384,145,11.623,251,5.479,465,6.093,651,7.418,675,11.675,679,8.52,1036,13.45,1042,9.206,1110,10.094,1142,6.412,4832,18.365,4833,18.365,4834,18.365,4835,18.365,4836,18.365,4837,18.365,4838,18.365,4839,18.365]],["keywords/856",[]],["title/857",[347,412.345,864,413.694,895,343.078]],["content/857",[16,2.572,22,1.731,31,5.8,66,3.931,69,4.967,112,5.958,145,11.459,186,5.539,207,9.604,224,2.022,251,5.311,320,8.829,422,5.48,575,5.896,679,8.259,777,13.221,864,6.438,871,8.994,896,6.635,1042,7.163,1049,8.481,1859,9.944,3121,13.325,4840,17.803]],["keywords/857",[]],["title/858",[16,250.43]],["content/858",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3121,13.746]],["keywords/858",[]],["title/859",[282,329.633]],["content/859",[2,1.219,3,1.892,18,5.144,19,4.57,20,3.896,22,1.643,36,6.499,43,3.074,86,5.376,168,2.364,195,1.604,219,5.297,222,1.858,226,3.808,258,2.337,282,4.128,283,4.394,329,4.553,330,5.705,347,6.09,352,3.38,354,2.889,355,3.013,397,3.569,399,2.392,400,4.968,422,3.604,426,6.712,427,4.248,428,8.519,518,4.553,568,4.471,627,4.299,652,3.896,689,3.291,714,6.595,841,6.199,851,4.29,875,3.267,895,6.902,896,7.388,908,6.07,929,5.992,1535,4.553,1621,7.111,1624,6.155,1708,5.705,1716,5.403,1803,6.155,1875,5.688,1945,6.71,2121,7.269,2127,7.037,3121,12.647,3262,5.101,3263,5.548,3471,5.705,3481,7.443,3482,7.857,3492,7.354,3493,7.269,4615,8.976,4841,11.709,4842,11.709]],["keywords/859",[]],["title/860",[1023,407.123]],["content/860",[1,3.981,15,4.397,86,8.113,123,8.196,222,2.803,224,2.007,258,3.526,347,6.368,397,3.732,399,3.609,400,7.496,689,4.965,707,6.093,838,7.595,842,6.019,847,6.63,851,6.474,895,5.298,896,8.322,908,6.347,1023,4.15,1133,6.347,1142,6.168,1234,12.039,3262,7.697,3275,7.433,3369,16.359,3495,10.846,3640,12.039,3641,9.788,4843,16.359]],["keywords/860",[]],["title/861",[4844,1364.669]],["content/861",[]],["keywords/861",[]],["title/862",[2042,532.102]],["content/862",[2,2.466,168,3.925,186,6.048,279,7.794,335,4.381,340,4.327,374,7.195,469,7.171,568,7.424,575,4.664,627,4.946,693,5.081,2568,12.21,4728,16.147,4845,18,4846,18,4847,18]],["keywords/862",[]],["title/863",[864,626.718]],["content/863",[127,5.323,224,2.478,226,4.915,445,6.678,752,8.544,875,6.085,4844,17.172]],["keywords/863",[]],["title/864",[66,252.595,575,274.491,2568,718.559]],["content/864",[1,2.151,2,0.993,4,5.091,11,3.957,13,2.112,22,1.91,66,4.915,73,3.302,89,2.057,92,6.476,127,3.545,132,11.787,136,3.685,139,4.383,161,3.712,168,4.815,174,5.423,185,7.772,186,6.112,195,1.308,196,5.627,279,3.14,291,2.62,335,4.763,338,4.984,340,2.125,345,4.14,367,3.62,385,4.763,389,5.054,432,4.277,434,4.793,440,3.699,452,5.624,485,4.159,518,3.712,519,5.247,529,5.798,533,4.361,575,5.341,577,7.145,627,5.378,641,4.178,731,3.95,921,4.086,993,5.166,1008,4.625,1157,7.516,1189,10.537,1364,9.35,1580,7.516,1623,5.926,1654,7.318,1988,4.068,2046,5.332,2214,7.145,2563,8.666,2568,5.996,4848,22.526,4849,8.839,4850,8.839,4851,8.839,4852,9.546,4853,9.546,4854,9.546,4855,12.21,4856,8.839,4857,9.546,4858,9.546,4859,9.546,4860,9.546,4861,9.546,4862,9.546]],["keywords/864",[]],["title/865",[11,311.729,263,351.238,803,610.076]],["content/865",[2,2.04,11,7.272,16,2.833,113,4.615,168,4.809,357,9.19,404,6.679,424,13.53,448,6.823,575,4.703,627,4.988,1091,10.774,1141,12.462,4728,13.358]],["keywords/865",[]],["title/866",[16,250.43]],["content/866",[1,5.024,2,1.516,16,3.714,22,1.416,24,3.774,89,3.14,115,5.429,127,3.556,163,4.847,224,2.833,227,4.684,228,5.467,258,2.907,263,4.473,277,3.072,281,4.538,284,4.38,354,3.595,355,3.749,367,5.525,372,4.497,461,7.769,464,3.65,490,4.065,594,6.496,646,9.132,658,5.839,693,5.146,804,6.003,823,6.435,849,7.362,875,4.065,1023,4.624,1217,8.862,1220,9.989,1221,5.665,1222,7.826,2020,6.347,4597,8.944,4844,11.471]],["keywords/866",[]],["title/867",[282,329.633]],["content/867",[1,1.693,11,4.698,14,5.23,18,4.501,19,2.776,22,1.835,25,2.132,31,3.112,49,1.933,52,6.991,65,3.415,67,5.737,73,2.598,77,7.313,89,1.619,109,4.384,110,5.645,112,2.514,113,4.059,168,4.44,173,4.519,185,2.622,208,3.108,214,3.578,222,2.994,224,0.853,230,2.544,251,4.497,258,1.499,263,2.306,282,2.29,295,3.922,320,3.725,335,5.111,351,4.343,368,2.734,369,3.949,397,2.544,399,1.534,400,6.395,401,7.593,424,8.562,426,6.786,448,4.191,464,3.017,466,10.363,467,4.883,469,2.771,495,2.771,505,3.819,516,4.195,544,3.844,550,3.521,551,4.883,568,2.869,575,3.616,622,3.895,647,2.799,654,6.244,689,3.384,712,4.128,767,4.096,818,3.54,834,4.718,836,4.515,895,2.252,976,5.176,1049,3.578,1102,5.914,1126,5.182,1143,3.771,1495,6.955,1535,6.705,1550,5.392,1600,10.124,1623,4.663,1624,6.331,1633,4.469,1679,3.449,1716,3.85,1875,4.054,1885,4.775,2223,6.315,2534,6.955,2563,5.937,2606,5.202,2823,4.968,3124,7.476,3403,4.515,3404,4.231,3406,4.9,3410,4.968,3411,4.267,3412,7.855,3415,5.392,3423,4.9,3673,11.555,4613,5.914,4614,5.758,4615,5.758,4855,6.315,4863,6.955,4864,6.955,4865,7.511,4866,7.511,4867,10.562,4868,7.511,4869,7.511,4870,10.562,4871,7.511,4872,9.482,4873,5.501,4874,7.511,4875,7.511,4876,7.511]],["keywords/867",[]],["title/868",[1023,407.123]],["content/868",[13,3.557,112,5.381,136,6.207,222,2.551,224,1.827,258,3.209,335,4.737,397,3.397,399,3.285,466,9.664,575,3.858,622,8.338,689,4.519,707,5.545,771,6.912,818,7.578,838,6.912,842,5.478,847,6.034,1126,5.528,1142,5.614,1222,8.638,1226,13.05,1228,12.661,1230,8.338,1240,12.327,1241,10.635,2123,9.872,2455,10.79,3275,6.765,3405,9.056,3430,7.975,3431,10.957,3432,7.703,4863,14.889,4864,14.889,4867,14.104,4877,16.08,4878,14.889,4879,16.08,4880,16.08,4881,16.08,4882,14.889,4883,14.889]],["keywords/868",[]],["title/869",[1535,535.982,4872,1085.254]],["content/869",[11,4.571,14,4.757,20,7.746,22,2.417,24,4.892,31,2.289,43,3.6,54,5.03,73,3.063,89,2.955,92,3.949,107,4.623,113,5.304,163,2.946,168,4.125,175,4.829,181,3.71,186,2.755,191,5.217,195,2.588,196,7.318,208,3.664,221,6.883,222,1.405,224,1.006,235,4.562,246,4.946,251,5.635,270,2.77,335,3.78,338,4.623,339,5.63,345,3.841,360,3.967,368,3.223,370,3.967,374,3.278,387,6.642,392,5.562,395,7.445,397,1.871,440,5.312,466,10.082,485,7.309,575,2.125,657,6.24,682,3.522,704,3.495,712,4.867,801,6.133,810,3.987,813,4.906,836,8.24,873,4.173,957,10.082,1106,6.357,1112,5.701,1121,6.532,1211,5.217,1285,5.269,1442,4.946,1535,8.762,1600,15.878,2274,17.488,2324,8.2,2608,5.075,2783,7.187,2871,6.789,4541,5.562,4728,9.342,4855,15.878,4872,18.332,4873,6.485,4884,8.856,4885,8.856,4886,8.856,4887,8.856,4888,7.768,4889,11.526,4890,13.71,4891,8.856]],["keywords/869",[]],["title/870",[77,518.559,208,353.271,276,572.957,400,362.279,4870,748.94]],["content/870",[1,3.836,22,1.15,25,3.357,30,3.782,31,3.057,43,5.236,49,3.043,77,13.245,92,7.589,168,2.388,190,9.313,195,1.62,208,9.023,219,9.02,222,2.701,224,2.265,231,4.722,238,6.553,244,5.431,251,5.078,270,3.7,281,2.727,291,3.246,307,3.982,335,5.423,340,2.633,363,6.093,383,9.355,397,2.499,404,4.03,423,6.839,464,2.963,495,8.045,504,5.938,515,6.053,520,7.037,540,5.73,550,5.545,551,4.796,553,8.334,654,6.133,712,6.501,778,13.049,807,7.429,829,7.663,836,7.109,921,5.062,1108,8.853,1237,6.133,1348,6.778,1558,9.944,1572,10.375,1590,7.937,1592,13.049,1748,5.831,2439,9.313,2570,8.853,2823,13.187,3190,10.952,4870,14.93,4892,11.828,4893,11.828,4894,11.828,4895,11.828,4896,11.828,4897,11.828]],["keywords/870",[]],["title/871",[1815,1163.024]],["content/871",[127,4.705,172,7.184,231,7.697,238,10.68,246,10.768,281,4.444,338,10.065,575,6.111,641,8.437,693,5.039,875,5.379,1285,11.47,2564,10.951,3443,16.91,4038,17.851,4848,16.91,4898,19.279,4899,19.279,4900,16.207]],["keywords/871",[]],["title/872",[550,646.112,1112,887.311]],["content/872",[113,4.948,168,4.244,224,2.388,440,8.144,449,14.558,616,6.333,1298,13.902,1731,12.385,1973,12.507,4855,17.672]],["keywords/872",[]],["title/873",[4844,1085.254,4901,1208.976]],["content/873",[]],["keywords/873",[]],["title/874",[2042,532.102]],["content/874",[2,2.466,168,3.925,186,6.048,279,7.794,335,4.381,340,4.327,374,7.195,469,7.171,568,7.424,575,4.664,627,4.946,693,5.081,2568,12.21,4728,16.147,4845,18,4846,18,4847,18]],["keywords/874",[]],["title/875",[864,626.718]],["content/875",[127,5.323,224,2.478,226,4.915,445,6.678,752,8.544,875,6.085,4844,17.172]],["keywords/875",[]],["title/876",[66,252.595,575,274.491,2568,718.559]],["content/876",[1,2.901,2,1.34,4,6.866,11,4.926,22,1.252,66,5.003,89,2.775,127,4.413,161,5.007,168,4.575,174,7.314,185,7.295,186,7.05,279,4.235,335,5.106,340,2.866,345,5.584,389,6.817,434,6.464,452,7.586,485,5.609,518,5.007,529,7.82,533,5.882,575,5.938,577,9.637,627,6.073,641,5.635,731,5.327,921,5.51,993,6.968,1157,10.138,1189,10.487,1580,10.138,1623,7.993,1654,9.871,2214,9.637,2568,8.087,4848,21.707,4849,11.922,4850,11.922,4851,11.922,4856,11.922]],["keywords/876",[]],["title/877",[11,311.729,263,351.238,803,610.076]],["content/877",[2,1.974,11,6.89,16,3.373,31,4.901,113,4.464,168,4.713,357,8.89,404,7.952,409,10.263,424,13.259,448,6.6,575,5.6,627,4.825,1141,12.056,1352,12.922,4728,12.922]],["keywords/877",[]],["title/878",[16,250.43]],["content/878",[1,5.008,2,1.507,16,3.707,22,1.408,24,3.75,89,3.12,115,5.396,127,3.534,163,4.817,224,2.827,227,4.655,228,5.444,258,2.889,263,4.445,277,3.052,281,4.519,284,4.353,354,3.572,355,3.725,367,5.49,372,4.469,461,7.721,464,3.627,490,4.04,594,6.456,646,9.094,658,5.803,693,5.124,804,5.966,823,6.395,849,7.331,875,4.04,1023,4.605,1217,8.825,1220,9.957,1221,5.63,1222,7.777,2020,6.308,4597,8.888,4844,11.4,4901,12.7]],["keywords/878",[]],["title/879",[282,329.633]],["content/879",[11,4.683,18,4.905,19,3.256,20,3.063,22,1.671,24,3.659,25,2.613,31,3.651,41,10.313,49,2.369,52,6.97,57,10.031,67,4.386,97,6.299,110,4.316,112,3.081,113,3.325,168,3.47,173,3.455,258,1.837,282,2.687,291,3.876,334,3.793,335,4.344,397,3.631,399,1.881,401,5.683,426,7.321,427,3.34,505,7.182,551,3.733,556,4.011,575,2.209,616,2.348,627,2.342,654,4.774,693,4.493,812,6.329,818,4.339,895,5.154,908,3.307,952,8.524,974,5.276,976,3.957,1126,7.149,1133,6.926,1140,7.472,1143,9.679,1455,5.533,1538,5.927,1716,4.517,1875,5.787,1905,9.954,2275,7.472,3124,5.715,3403,5.533,3406,6.005,3457,7.058,3677,7.472,3679,8.075,4377,8.075,4623,7.058,4728,6.273,4802,11.465,4867,8.075,4901,15.077,4902,9.206,4903,6.742,4904,9.206,4905,20.795,4906,9.206,4907,9.206,4908,9.206,4909,9.206,4910,9.206,4911,9.206,4912,9.206,4913,9.206,4914,9.206,4915,9.206,4916,9.206,4917,9.206,4918,9.206,4919,9.206]],["keywords/879",[]],["title/880",[1023,407.123]],["content/880",[11,4.351,13,3.533,41,7.92,112,5.344,113,3.759,136,6.165,222,2.534,224,1.814,258,3.187,397,3.373,399,3.262,575,3.831,707,5.507,838,6.865,842,5.441,847,5.992,1126,7.194,1133,5.737,1142,5.575,1143,10.506,1222,8.578,1226,12.961,1228,12.574,1230,8.281,1240,12.243,1241,10.562,1768,9.151,1905,11.253,2123,9.804,2455,10.716,3275,6.718,3405,8.994,3430,7.92,3431,10.881,3432,7.65,4380,14.007,4728,10.881,4802,12.961,4878,14.787,4882,14.787,4883,14.787,4920,15.969,4921,15.969,4922,15.969]],["keywords/880",[]],["title/881",[262,595.127,3370,1056.653]],["content/881",[]],["keywords/881",[]],["title/882",[195,156.745,397,241.681,616,291.743]],["content/882",[2,2.075,3,3.223,7,8.054,8,8.702,31,5.153,49,5.13,127,4.867,195,2.732,397,5.084,399,4.073,469,7.355,616,5.085,652,6.634,3370,15.286,4923,19.94]],["keywords/882",[]],["title/883",[2042,532.102]],["content/883",[22,2.101,262,10.898,526,6.132,652,7.189,1102,17.013,3370,19.35]],["keywords/883",[]],["title/884",[16,250.43]],["content/884",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,262,7.868,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,3370,13.969]],["keywords/884",[]],["title/885",[282,329.633]],["content/885",[3,2.069,13,2.833,14,6.249,18,5.521,19,4.152,36,4.925,43,3.362,123,5.94,195,1.754,206,7.451,222,2.032,258,2.555,262,5.529,282,3.425,330,4.323,397,2.705,399,2.616,426,7.204,427,4.645,428,7.711,447,5.073,568,4.89,601,8.354,604,6.596,627,3.258,689,3.599,693,3.347,714,4.998,816,7.094,818,6.034,851,4.692,896,6.711,908,4.6,1142,6.288,1237,6.64,1535,4.979,1679,5.88,1716,5.758,1803,6.732,1875,6.063,1945,10.32,1986,7.949,2094,9.803,3262,5.579,3263,6.067,3370,15.97,3500,7.861,3501,8.868,3640,8.725,3641,7.094,4418,10.765,4736,12.69,4738,10.392,4924,10.082]],["keywords/885",[]],["title/886",[1023,407.123]],["content/886",[15,4.465,123,8.322,222,2.847,224,2.038,258,3.58,262,7.746,397,3.79,399,3.665,689,5.042,707,6.187,818,8.455,838,7.712,842,6.112,847,6.732,851,6.574,3262,7.816,3275,7.547,3277,13.346,3279,10.104,3370,13.753,3496,11.865,3500,11.014,3501,12.425,3641,9.939,3766,10.374,4830,16.611,4924,14.126,4925,17.94]],["keywords/886",[]],["title/887",[3309,1364.669]],["content/887",[]],["keywords/887",[]],["title/888",[195,156.745,397,241.681,616,291.743]],["content/888",[2,2.075,3,3.223,7,8.054,8,8.702,31,5.153,49,5.13,127,4.867,195,2.732,397,5.084,399,4.073,469,7.355,616,5.085,652,6.634,3309,15.7,4926,19.94]],["keywords/888",[]],["title/889",[2042,532.102]],["content/889",[13,4.78,145,10.076,326,12.855,526,6.132,652,7.189,3309,19.874,3933,20.006]],["keywords/889",[]],["title/890",[16,250.43]],["content/890",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3309,14.46]],["keywords/890",[]],["title/891",[282,329.633]],["content/891",[3,2.546,13,4.588,18,4.635,19,4.781,36,6.059,43,5.446,195,2.841,222,2.5,258,3.144,282,3.944,330,5.319,397,4.381,399,3.218,426,6.761,427,5.715,428,8.582,568,7.92,652,6.9,704,6.218,925,7.197,1716,6.631,1803,8.282,1832,8.591,1875,6.982,2846,9.671,3309,16.33,3457,12.077,3493,9.78,4927,15.753,4928,15.753,4929,15.753,4930,15.753]],["keywords/891",[]],["title/892",[1023,407.123]],["content/892",[113,6.401,222,2.356,224,1.687,258,2.963,274,7.806,326,8.834,397,5.744,399,3.033,707,5.12,804,6.118,838,6.383,842,5.059,847,10.203,1042,5.974,1133,5.334,3273,9.326,3275,6.246,3277,8.036,3310,13.748,4931,14.848,4932,14.848,4933,14.848,4934,14.848,4935,14.848,4936,14.848,4937,14.848,4938,14.848,4939,14.848,4940,14.848,4941,14.848,4942,14.848,4943,14.848,4944,14.848]],["keywords/892",[]],["title/893",[4945,1328.705]],["content/893",[]],["keywords/893",[]],["title/894",[2042,532.102]],["content/894",[14,7.039,127,4.952,224,2.305,226,4.572,277,4.277,340,4.516,352,5.857,355,5.22,445,6.212,896,7.56,1142,7.083,2042,6.228,4945,18.642,4946,20.288]],["keywords/894",[]],["title/895",[864,626.718]],["content/895",[2,1.516,13,3.223,14,5.055,22,1.416,31,3.765,70,5.862,127,3.556,185,5.086,195,1.996,196,5.645,224,1.655,226,3.283,277,3.072,279,4.792,355,3.749,359,6.263,427,5.285,428,7.286,445,6.028,490,4.065,526,4.135,626,6.758,627,3.707,679,6.758,752,5.707,875,4.065,896,7.336,908,5.234,1142,5.086,1830,13.634,1945,8.349,3251,12.779,3483,15.5,3492,9.15,3493,9.045,3494,10.266,3513,10.905,4074,16.55,4945,18.307,4947,14.569,4948,14.569,4949,12.779,4950,14.569,4951,14.569,4952,13.49,4953,14.569,4954,14.569,4955,13.49,4956,14.569,4957,14.569,4958,14.569]],["keywords/895",[]],["title/896",[16,250.43]],["content/896",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,4945,14.079]],["keywords/896",[]],["title/897",[282,329.633]],["content/897",[3,2.581,18,5.217,19,4.824,31,4.127,115,5.951,222,2.534,226,3.599,258,3.187,282,3.98,330,5.392,397,3.373,399,3.262,426,6.806,427,5.794,428,9.168,447,6.327,652,5.313,689,4.488,693,4.174,714,6.233,851,5.851,908,5.737,1256,11.463,1535,6.21,1716,6.691,1875,7.045,1974,7.873,2608,9.151,3263,7.567,3492,10.03,3493,9.914,3494,11.253,4945,12.243,4959,14.007,4960,15.969]],["keywords/897",[]],["title/898",[1023,407.123]],["content/898",[14,3.272,15,7.114,69,2.631,162,3.902,458,8.623,477,18.213,627,3.661,835,4.493,895,2.828,896,6.502,901,4.543,1142,3.292,1363,8.32,1428,12.096,2094,6.24,2211,6.531,2280,16.154,2282,14.16,2283,20.514,2291,17.981,2294,18.075,2298,8.732,3264,13.323,3265,13.323,3471,4.595,3484,7.269,3513,7.058,3569,13.323,3795,13.058,4073,8.271,4074,12.096,4955,13.323,4961,14.389,4962,9.43,4963,9.43,4964,9.43,4965,21.02,4966,9.43,4967,17.446,4968,9.43,4969,9.43,4970,14.389,4971,19.521,4972,17.446,4973,9.43,4974,9.43,4975,9.43,4976,8.732,4977,14.389,4978,9.43,4979,14.389,4980,19.521,4981,9.43]],["keywords/898",[]],["title/899",[616,351.477,689,387.369]],["content/899",[127,4.124,224,1.92,277,3.562,289,9.967,400,7.17,526,6.806,541,13.575,616,4.309,658,8.7,677,11.672,689,4.749,4945,12.954,4982,16.898,4983,16.898,4984,21.707,4985,20.099,4986,21.707,4987,21.707,4988,25.309]],["keywords/899",[]],["title/900",[546,544.018,2215,812.067]],["content/900",[70,8.198,79,4.14,127,3.744,180,7.43,207,6.564,224,1.742,276,10.292,289,7.043,297,8.608,303,6.564,355,3.946,526,4.353,541,7.953,550,9.552,575,4.889,652,6.779,689,6.431,829,12.172,849,5.735,860,8.301,1068,12.076,1091,8.43,1453,8.364,1643,10.842,1809,9.633,1815,10.292,1974,7.561,3787,11.48,3788,10.144,3966,10.622,4945,15.621,4989,15.338,4990,15.338,4991,15.338,4992,15.338]],["keywords/900",[]],["title/901",[1988,487.519,2041,496.196,2046,639]],["content/901",[]],["keywords/901",[]],["title/902",[272,585.453,370,512.565,616,291.743]],["content/902",[61,7.474,68,10.313,224,2.432,272,10.955,370,9.591,616,5.459,2041,9.285,4696,17.998,4993,18.778]],["keywords/902",[]],["title/903",[2042,532.102]],["content/903",[6,5.572,15,3.005,16,1.744,25,3.426,29,7.495,30,3.86,31,3.12,49,3.106,65,5.489,66,5.35,73,5.975,89,3.723,113,2.842,127,2.947,168,4.445,186,3.756,195,1.654,196,4.678,208,7.147,220,5.123,222,1.916,224,2.291,226,2.721,251,5.153,274,6.347,316,4.73,335,3.892,340,2.687,347,6.226,352,3.486,367,4.578,368,6.287,374,4.469,401,4.857,448,4.202,518,4.695,527,8.957,568,7.703,579,5.489,651,4.877,731,7.147,771,5.19,864,7.293,902,5.308,1063,9.349,1088,7.875,1344,7.332,1702,10.724,1748,5.952,1864,11.591,2028,9.256,2041,7.492,2080,7.875,2174,7.772,2562,11.457,2563,8.516,2572,8.667,2573,7.675,3394,9.799,3395,6.8,3396,8.667,3397,9.799,4994,10.15]],["keywords/903",[]],["title/904",[864,626.718]],["content/904",[2,1.203,11,3.151,13,1.58,15,1.778,16,2.658,18,1.596,31,1.846,64,3.313,65,3.247,66,4.765,69,5.493,92,5.156,97,3.185,112,3.87,113,2.722,115,6.855,127,3.556,161,2.777,168,4.502,180,3.46,185,4.037,198,3.263,222,2.312,224,1.314,226,4.145,228,1.983,230,2.419,241,2.967,251,2.131,258,2.308,263,2.193,279,3.803,281,1.646,282,2.199,289,9.517,297,3.018,325,3.421,335,4.436,338,7.606,340,1.59,348,3.809,352,2.062,367,4.385,374,2.644,385,2.342,396,2.967,432,3.2,439,6.122,445,2.187,458,3.155,461,3.809,467,2.896,518,2.777,556,6.347,568,2.728,574,5.257,575,3.495,594,5.156,627,3.707,641,3.126,646,7.768,651,8.371,658,2.862,693,4.377,731,2.955,804,2.943,808,4.927,823,3.155,849,4.324,873,3.366,921,3.057,1023,1.678,1126,2.456,1142,2.494,1189,7.315,1210,3.384,1215,5.257,1217,6.559,1220,7.502,1221,2.777,1222,3.837,1290,6.748,1313,4.54,1401,8.533,1628,4.598,1716,2.284,1988,3.044,2020,3.112,2041,5.015,2046,6.458,2094,3.098,2132,3.729,2466,4.338,2518,11.292,2561,10.669,2562,4.057,2563,5.7,2564,6.568,2565,9.635,2566,4.793,3668,8.008,3669,4.793,3670,4.946,4597,4.385,4664,4.867,4665,5.797,4670,5.797,4726,5.797,4995,6.005,4996,7.142,4997,6.613,4998,6.613,4999,9.104,5000,5.624]],["keywords/904",[]],["title/905",[401,460.294,546,451.561,2215,674.055]],["content/905",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,2041,7.072,3401,11.11]],["keywords/905",[]],["title/906",[16,250.43]],["content/906",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2041,7.965]],["keywords/906",[]],["title/907",[282,329.633]],["content/907",[2,0.875,16,1.215,18,5.258,19,3.035,20,2.797,22,0.817,25,2.386,30,4.21,52,3.409,65,3.822,67,4.005,73,2.908,79,2.269,108,4.145,109,4.907,110,3.941,112,2.814,113,5.386,168,4.026,173,3.155,222,1.334,226,4.138,228,2.335,230,2.847,231,3.357,258,1.678,270,2.63,282,2.504,295,4.389,335,4.981,340,1.871,399,1.717,400,3.567,401,8.022,426,7.268,429,5.22,448,2.926,469,3.101,505,4.275,551,3.409,557,5.789,568,6.198,569,4.36,575,4.784,622,4.36,647,3.133,651,5.318,654,4.36,677,3.749,682,3.344,689,3.7,693,4.242,714,3.281,748,4.516,749,4.17,771,6.976,808,3.583,812,3.767,851,3.081,895,2.521,908,3.02,976,3.614,1049,4.005,1091,4.621,1126,5.58,1309,5.28,1401,3.9,1535,7.754,1624,6.922,1716,4.21,1875,4.433,2041,7.039,2509,5.729,2562,7.479,2563,6.491,2847,5.642,3124,5.22,3403,5.053,3404,4.735,3405,4.735,3406,5.484,3407,6.157,3408,6.62,3409,6.62,3410,5.56,3411,4.776,3412,8.589,3413,6.62,3414,6.62,3415,6.035,3416,5.642,3417,6.62,3423,5.484,3663,12.241,3850,5.642,5001,5.924,5002,5.924,5003,6.293,5004,5.729,5005,6.823]],["keywords/907",[]],["title/908",[1023,407.123]],["content/908",[49,4.137,89,4.53,112,5.381,127,3.925,168,3.247,222,3.941,224,1.827,254,11.685,258,3.209,277,3.39,284,4.834,335,4.737,357,7.538,397,3.397,399,4.294,400,6.823,575,3.858,578,8.638,622,8.338,689,4.519,707,5.545,842,5.478,847,6.034,849,6.013,851,5.892,995,9.567,1126,5.528,2509,10.957,3275,6.765,3405,9.056,3425,11.136,3428,10.79,3430,7.975,3431,10.957,3432,7.703,5006,13.05,5007,13.05]],["keywords/908",[]],["title/909",[464,345.315,5008,911.566]],["content/909",[1,2.302,2,1.906,18,2.284,22,2.116,59,4.513,66,2.256,73,3.534,78,5.572,83,5.615,103,6.601,110,4.789,127,2.494,163,3.399,166,6.079,168,2.063,195,2.094,196,3.959,205,4.789,208,6.325,216,6.431,222,2.426,223,2.238,224,2.31,227,3.285,251,3.048,268,3.808,281,2.355,291,4.195,307,5.146,333,6.665,343,5.677,377,5.228,394,8.206,404,3.481,423,5.908,464,6.351,469,3.769,546,6.034,550,7.166,553,7.199,672,6.665,698,5.298,741,5.572,746,4.622,800,7.334,803,5.448,813,5.66,834,11.504,836,6.141,841,5.409,901,4.922,976,7.874,1014,4.262,1015,8.045,1042,4.111,1091,5.615,1110,5.615,1112,6.577,1121,4.867,1211,6.02,1326,5.754,1549,7.076,1570,7.833,1594,5.707,1798,6.495,1958,7.482,2041,8.818,2240,6.141,2252,7.334,2336,10.772,2337,7.647,2559,6.962,2569,7.647,3192,7.833,3396,7.334,5008,15.661,5009,8.292,5010,8.292,5011,10.258,5012,8.292,5013,8.292,5014,8.292,5015,8.292]],["keywords/909",[]],["title/910",[1815,1163.024]],["content/910",[11,4.707,22,1.679,102,9.349,110,8.098,127,4.216,168,3.488,218,10.605,238,9.57,246,9.648,279,5.681,316,6.767,335,3.893,464,5.516,546,6.818,547,8.898,616,4.405,677,7.702,738,12.172,746,7.814,998,10.382,1107,13.601,1154,10.981,1211,10.177,1260,12.172,1863,11.268,2216,11.424,2847,11.591,4112,13.601,5008,11.424,5011,11.591,5016,14.02,5017,14.02,5018,14.02,5019,14.02]],["keywords/910",[]],["title/911",[651,700.046]],["content/911",[1,3.674,13,3.607,15,4.058,22,2.292,47,7.376,66,5.206,161,6.341,168,5.226,175,8.892,222,3.741,263,5.006,270,5.1,291,4.474,321,7.811,335,3.674,343,6.056,374,6.035,404,5.555,411,8.633,432,7.305,449,11.292,458,7.202,495,6.015,651,10.085,813,9.033,906,7.305,921,6.978,1442,9.107,2565,10.784,2566,10.941]],["keywords/911",[]],["title/912",[173,366.94,224,111.085,791,576.139,2041,424.116]],["content/912",[2,0.947,3,1.47,6,4.199,15,4.247,22,1.863,25,2.582,31,2.351,41,6.943,65,6.364,69,2.539,70,6.865,79,2.456,92,4.057,106,3.312,107,7.309,161,3.538,168,1.837,170,11.361,173,8.814,174,5.168,181,5.864,185,4.887,192,6.943,195,2.993,208,3.764,222,3.282,224,2.35,226,2.05,277,1.918,291,3.841,307,3.063,329,3.538,330,3.072,335,3.155,340,4.265,347,3.279,372,2.808,394,6.272,399,1.859,404,3.1,411,4.817,415,4.887,423,5.261,425,11.022,440,3.525,481,5.585,490,2.539,516,5.082,518,3.538,536,5.784,551,3.689,557,4,568,3.475,573,5.648,616,2.32,634,6.017,661,4.783,709,6.199,790,7.634,791,5.36,840,6.663,860,4.924,897,6.447,906,4.076,921,3.894,925,4.157,957,5.468,976,3.911,1007,4.75,1013,8.424,1063,4.924,1090,5.857,1121,4.334,1259,7.98,1348,5.214,1364,5.857,1393,4.686,1406,7.649,1555,6.81,1591,11.022,1614,5,1745,6.105,1748,4.485,1839,6.975,1863,5.935,1928,10.252,1973,5.413,2041,7.4,2060,6.81,2271,6.531,2783,7.384,3395,5.124,4627,6.975,4687,6.975,4723,8.424,5020,9.098,5021,7.98,5022,9.098,5023,9.098,5024,9.098,5025,13.999,5026,9.098,5027,9.098,5028,9.098,5029,9.098,5030,9.098,5031,9.098]],["keywords/912",[]],["title/913",[2041,751.702]],["content/913",[]],["keywords/913",[]],["title/914",[272,585.453,370,512.565,616,291.743]],["content/914",[61,7.989,68,8.847,92,8.189,127,4.483,221,9.22,224,2.086,272,11.709,335,4.138,370,8.228,490,5.124,616,4.683,647,8.527,864,6.641,1074,9.164,1299,13.897,2041,9.924,4696,15.44,4698,15.44,4699,15.44,4700,14.46,4993,16.109,5032,17.005]],["keywords/914",[]],["title/915",[2042,532.102]],["content/915",[1,2.43,6,4.978,15,2.684,16,3.017,25,3.061,29,6.696,30,3.449,31,2.788,49,2.775,65,4.903,66,5.145,73,5.505,89,4.076,113,2.539,127,2.633,168,4.215,186,3.356,195,2.18,196,4.179,208,6.585,220,4.576,222,2.525,224,2.372,226,3.586,251,4.748,274,5.67,281,2.486,316,4.225,335,4.262,340,2.401,347,5.736,352,3.114,367,4.09,368,5.793,374,3.992,401,4.339,445,3.303,448,3.754,461,5.751,518,4.194,527,8.253,568,7.223,579,4.903,647,4.019,651,4.356,693,2.819,731,6.585,771,4.636,777,6.355,864,7.55,902,4.742,1063,8.613,1074,5.382,1088,7.035,1212,5.882,1217,7.164,1220,7.13,1344,6.55,1702,9.88,1748,5.317,1864,10.679,2028,8.269,2041,6.902,2080,7.035,2174,6.943,2562,10.743,2563,7.846,2572,7.742,2573,6.857,3394,8.754,3395,6.075,3396,7.742,3397,8.754,4994,9.067]],["keywords/915",[]],["title/916",[864,626.718]],["content/916",[18,4.534,19,4.677,61,7.083,127,4.952,335,4.572,647,9.062,752,7.948,1299,12.321,3053,12.595,4698,17.056,4699,17.056,4700,15.974,5032,18.785,5033,20.288]],["keywords/916",[]],["title/917",[647,426.353,1299,694.819,2041,496.196]],["content/917",[1,1.922,11,5.044,13,1.887,15,3.315,16,1.233,18,3.661,22,1.593,31,2.205,47,3.859,64,3.957,65,6.054,66,4.907,68,4.109,69,3.716,89,2.87,92,3.804,113,2.008,115,3.179,127,2.082,161,3.317,168,4.879,175,4.652,180,4.133,185,6.463,198,3.898,222,3.186,224,0.969,225,7.891,226,4.171,228,2.369,230,4.51,241,3.544,250,4.765,251,4.887,307,2.872,335,1.922,338,9.664,348,4.549,370,3.822,374,3.158,385,2.798,432,3.822,439,7.051,458,3.768,568,3.258,575,4.441,577,6.385,615,5.296,627,2.171,651,8.594,689,3.743,693,2.23,731,5.51,752,3.342,803,4.549,823,3.768,856,5.026,864,3.085,873,4.02,902,5.855,921,3.651,926,4.424,1063,7.207,1126,4.579,1142,2.978,1189,8.839,1313,5.423,1598,5.127,2041,5.776,2042,2.619,2074,6.385,2518,13.062,2560,6.924,2561,11.997,2562,4.846,2563,6.565,2564,9.305,2565,10.834,2566,5.724,3053,5.296,4588,8.466,4589,5.358,4999,10.486,5000,6.717,5011,10.993,5034,7.899,5035,7.483,5036,12.331,5037,11.681,5038,7.483]],["keywords/917",[]],["title/918",[1988,587.339,2047,954.559]],["content/918",[2,1.122,11,2.939,13,1.451,15,1.632,16,2.541,18,1.466,22,0.638,31,1.695,49,1.687,64,3.042,65,2.981,66,4.775,69,5.277,79,1.77,92,7.842,97,2.924,112,3.61,113,2.539,115,6.554,127,3.353,155,2.589,161,2.55,168,4.367,180,5.225,185,3.766,198,2.996,222,2.18,224,1.225,226,3.963,228,1.821,230,2.221,241,2.725,251,1.957,258,2.152,263,2.013,279,3.547,281,1.512,282,2.051,283,2.461,289,9.178,297,4.557,325,3.142,329,2.55,335,2.43,338,7.172,340,1.46,348,3.497,352,1.893,360,2.938,367,4.09,370,2.938,374,2.427,375,3.605,385,2.151,396,2.725,432,2.938,439,5.71,445,2.008,458,2.897,461,3.497,467,2.659,518,2.55,556,5.985,568,2.505,574,4.903,575,3.296,594,4.809,608,3.827,627,3.495,641,2.87,646,7.383,651,7.639,658,2.628,693,4.597,731,2.713,752,2.569,767,10.314,804,2.702,808,4.596,810,2.952,823,2.897,849,4.033,873,3.091,921,2.807,1023,1.541,1126,2.255,1142,2.29,1189,6.994,1196,3.758,1210,3.107,1215,4.903,1217,6.184,1220,7.13,1221,2.55,1222,3.523,1290,6.294,1313,4.169,1401,8.159,1628,10.245,1716,2.097,1988,2.795,2020,2.857,2041,4.678,2046,3.663,2047,11.022,2094,2.844,2132,3.424,2165,5.753,2466,3.983,2518,10.797,2561,10.06,2562,3.725,2563,5.317,2564,6.127,2565,9.085,2566,4.401,3578,4.803,3668,7.47,3669,4.401,3670,4.542,4597,4.026,4664,4.469,4665,5.323,4670,5.323,4706,6.073,4997,6.073,4998,6.073,4999,8.492,5000,5.164,5039,6.558,5040,6.558]],["keywords/918",[]],["title/919",[335,257.805,1151,633.815,2041,496.196]],["content/919",[1,1.53,2,1.155,11,5.238,13,1.502,15,1.689,16,2.931,18,1.517,22,1.368,31,2.867,47,3.071,65,5.044,66,4.245,68,3.27,69,3.096,89,1.463,92,3.027,97,3.027,112,3.713,113,1.598,115,5.243,127,3.434,161,2.64,168,4.422,175,3.702,185,7.083,198,5.069,222,2.578,224,0.771,226,3.661,228,1.885,230,2.299,250,3.791,258,1.355,263,2.084,270,2.123,279,3.649,281,1.565,282,1.291,293,3.791,297,2.868,325,3.252,335,1.53,338,8.483,352,1.96,367,4.207,370,3.041,374,2.512,385,2.226,396,2.82,423,3.925,426,1.979,432,3.041,439,5.874,445,2.078,458,2.998,461,3.62,518,2.64,568,5.373,574,5.044,575,3.376,594,3.027,607,3.027,615,4.214,616,1.731,627,4.134,641,2.971,644,2.71,646,5.147,647,2.53,651,8.548,658,2.72,689,3.118,693,4.682,731,4.59,803,3.62,804,2.797,823,2.998,849,4.149,873,3.199,926,3.52,1023,1.594,1063,3.674,1126,2.334,1142,2.37,1151,3.761,1175,4.08,1189,9.174,1210,3.216,1215,5.044,1217,6.334,1220,7.279,1221,4.314,1222,3.646,1290,3.961,1401,3.149,2020,2.957,2041,6.102,2074,5.081,2094,2.944,2461,4.873,2466,6.738,2518,13.445,2531,4.873,2560,5.509,2561,10.304,2562,3.856,2563,5.469,2564,7.992,2565,9.305,2566,4.555,3404,3.823,4588,7.053,4589,4.263,4597,4.167,4999,5.345,5035,5.954,5037,9.731,5041,14.069,5042,6.788,5043,6.788,5044,6.788,5045,6.788,5046,6.788,5047,6.788,5048,6.788,5049,6.788,5050,6.788]],["keywords/919",[]],["title/920",[401,460.294,546,451.561,2215,674.055]],["content/920",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,2041,7.072,3401,11.11]],["keywords/920",[]],["title/921",[16,250.43]],["content/921",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2041,7.965]],["keywords/921",[]],["title/922",[57,570.685,1401,453.632,1677,822.099,5011,656.187]],["content/922",[2,0.616,15,1.474,18,2.215,22,1.749,24,1.534,31,2.562,33,3.56,39,3.56,43,1.555,57,5.785,65,5.81,68,2.854,71,2.569,110,2.777,112,1.982,118,4.541,161,3.855,162,2.451,168,1.196,173,2.223,175,5.406,185,2.068,186,1.843,195,1.358,196,2.295,208,6.881,211,3.598,219,2.68,222,2.639,226,4.053,230,2.006,237,2.569,251,4.458,262,8.646,276,3.975,282,1.127,283,2.223,324,4.858,333,6.466,335,3.748,340,1.319,347,3.573,369,7.856,377,5.072,381,3.524,383,3.256,386,6.301,396,5.31,401,2.383,404,2.018,410,3.56,414,3.975,415,8.934,416,3.072,420,4.338,445,3.913,449,4.102,464,3.744,490,1.653,492,4.252,509,3.49,515,3.031,518,4.97,520,3.524,527,5.14,550,4.647,551,2.402,568,9.214,578,3.182,634,3.918,657,4.174,678,3.637,683,4.541,685,3.975,692,3.159,693,2.591,697,5.04,709,4.036,750,4.434,771,6.424,772,4.808,774,4.174,782,4.808,833,3.282,849,2.215,856,5.84,875,1.653,876,3.813,906,5.726,925,2.706,964,5.072,1019,4.102,1028,4.338,1033,3.72,1081,7.419,1110,5.448,1140,4.808,1196,5.68,1221,4.97,1260,4.174,1298,8.453,1326,3.336,1335,5.485,1344,3.598,1396,3.813,1455,7.681,1488,3.182,1550,4.252,1561,3.766,1592,4.541,1654,4.541,1707,3.159,1748,4.887,1770,4.338,1793,4.102,1842,4.252,1879,4.174,1889,8.694,1916,3.051,1917,4.036,2094,6.481,2194,4.252,2271,9.175,2487,4.174,2562,13.316,2608,3.395,2846,3.637,3138,7.599,3392,5.196,3395,3.336,3443,5.196,3842,5.485,3871,6.651,4209,4.98,4292,4.338,4873,7.259,5011,14.811,5051,5.924,5052,9.912,5053,5.924,5054,5.924,5055,16.631,5056,9.912,5057,9.912,5058,5.924,5059,5.924,5060,5.924,5061,12.781,5062,5.924,5063,5.924,5064,5.924,5065,5.924,5066,5.924,5067,5.924]],["keywords/922",[]],["title/923",[282,329.633]],["content/923",[2,0.875,16,1.215,18,5.258,19,3.035,20,2.797,22,0.817,25,2.386,30,4.21,52,3.409,65,3.822,67,4.005,73,2.908,79,2.269,108,4.145,109,4.907,110,3.941,112,2.814,113,5.386,168,4.026,173,3.155,222,1.334,226,4.138,228,2.335,230,2.847,231,3.357,258,1.678,270,2.63,282,2.504,295,4.389,335,4.981,340,1.871,399,1.717,400,3.567,401,8.022,426,7.268,429,5.22,448,2.926,469,3.101,505,4.275,551,3.409,557,5.789,568,6.198,569,4.36,575,4.784,622,4.36,647,3.133,651,5.318,654,4.36,677,3.749,682,3.344,689,3.7,693,4.242,714,3.281,748,4.516,749,4.17,771,6.976,808,3.583,812,3.767,851,3.081,895,2.521,908,3.02,976,3.614,1049,4.005,1091,4.621,1126,5.58,1309,5.28,1401,3.9,1535,7.754,1624,6.922,1716,4.21,1875,4.433,2041,7.039,2509,5.729,2562,7.479,2563,6.491,2847,5.642,3124,5.22,3403,5.053,3404,4.735,3405,4.735,3406,5.484,3407,6.157,3408,6.62,3409,6.62,3410,5.56,3411,4.776,3412,8.589,3413,6.62,3414,6.62,3415,6.035,3416,5.642,3417,6.62,3423,5.484,3663,12.241,3850,5.642,5001,5.924,5002,5.924,5003,6.293,5004,5.729,5005,6.823]],["keywords/923",[]],["title/924",[1023,407.123]],["content/924",[49,4.137,89,4.53,112,5.381,127,3.925,168,3.247,222,3.941,224,1.827,254,11.685,258,3.209,277,3.39,284,4.834,335,4.737,357,7.538,397,3.397,399,4.294,400,6.823,575,3.858,578,8.638,622,8.338,689,4.519,707,5.545,842,5.478,847,6.034,849,6.013,851,5.892,995,9.567,1126,5.528,2509,10.957,3275,6.765,3405,9.056,3425,11.136,3428,10.79,3430,7.975,3431,10.957,3432,7.703,5006,13.05,5007,13.05]],["keywords/924",[]],["title/925",[464,345.315,5008,911.566]],["content/925",[1,2.302,2,1.906,18,2.284,22,2.116,59,4.513,66,2.256,73,3.534,78,5.572,83,5.615,103,6.601,110,4.789,127,2.494,163,3.399,166,6.079,168,2.063,195,2.094,196,3.959,205,4.789,208,6.325,216,6.431,222,2.426,223,2.238,224,2.31,227,3.285,251,3.048,268,3.808,281,2.355,291,4.195,307,5.146,333,6.665,343,5.677,377,5.228,394,8.206,404,3.481,423,5.908,464,6.351,469,3.769,546,6.034,550,7.166,553,7.199,672,6.665,698,5.298,741,5.572,746,4.622,800,7.334,803,5.448,813,5.66,834,11.504,836,6.141,841,5.409,901,4.922,976,7.874,1014,4.262,1015,8.045,1042,4.111,1091,5.615,1110,5.615,1112,6.577,1121,4.867,1211,6.02,1326,5.754,1549,7.076,1570,7.833,1594,5.707,1798,6.495,1958,7.482,2041,8.818,2240,6.141,2252,7.334,2336,10.772,2337,7.647,2559,6.962,2569,7.647,3192,7.833,3396,7.334,5008,15.661,5009,8.292,5010,8.292,5011,10.258,5012,8.292,5013,8.292,5014,8.292,5015,8.292]],["keywords/925",[]],["title/926",[1815,1163.024]],["content/926",[11,4.707,22,1.679,102,9.349,110,8.098,127,4.216,168,3.488,218,10.605,238,9.57,246,9.648,279,5.681,316,6.767,335,3.893,464,5.516,546,6.818,547,8.898,616,4.405,677,7.702,738,12.172,746,7.814,998,10.382,1107,13.601,1154,10.981,1211,10.177,1260,12.172,1863,11.268,2216,11.424,2847,11.591,4112,13.601,5008,11.424,5011,11.591,5016,14.02,5017,14.02,5018,14.02,5019,14.02]],["keywords/926",[]],["title/927",[651,700.046]],["content/927",[1,3.674,13,3.607,15,4.058,22,2.292,47,7.376,66,5.206,161,6.341,168,5.226,175,8.892,222,3.741,263,5.006,270,5.1,291,4.474,321,7.811,335,3.674,343,6.056,374,6.035,404,5.555,411,8.633,432,7.305,449,11.292,458,7.202,495,6.015,651,10.085,813,9.033,906,7.305,921,6.978,1442,9.107,2565,10.784,2566,10.941]],["keywords/927",[]],["title/928",[61,341.406,172,364.419,1150,340.348,2041,424.116]],["content/928",[]],["keywords/928",[]],["title/929",[272,585.453,370,512.565,616,291.743]],["content/929",[68,10.606,224,2.501,370,9.864,616,5.614,2041,9.549,4993,19.311]],["keywords/929",[]],["title/930",[2042,532.102]],["content/930",[6,5.572,15,3.005,16,1.744,25,3.426,29,7.495,30,3.86,31,3.12,49,3.106,65,5.489,66,5.35,73,5.975,89,3.723,113,2.842,127,2.947,168,4.445,186,3.756,195,1.654,196,4.678,208,7.147,220,5.123,222,1.916,224,2.291,226,2.721,251,5.153,274,6.347,316,4.73,335,3.892,340,2.687,347,6.226,352,3.486,367,4.578,368,6.287,374,4.469,401,4.857,448,4.202,518,4.695,527,8.957,568,7.703,579,5.489,651,4.877,731,7.147,771,5.19,864,7.293,902,5.308,1063,9.349,1088,7.875,1344,7.332,1702,10.724,1748,5.952,1864,11.591,2028,9.256,2041,7.492,2080,7.875,2174,7.772,2562,11.457,2563,8.516,2572,8.667,2573,7.675,3394,9.799,3395,6.8,3396,8.667,3397,9.799,4994,10.15]],["keywords/930",[]],["title/931",[864,626.718]],["content/931",[2,1.283,11,3.359,13,1.712,15,1.926,16,2.767,18,1.729,22,0.752,31,1.999,61,5.367,64,3.589,65,3.517,66,4.228,69,2.159,92,5.497,97,3.45,112,5.868,113,1.821,115,5.728,127,3.009,161,3.008,168,4.625,172,2.883,179,4.039,185,4.304,198,5.633,222,2.439,224,1.401,226,3.464,228,2.148,230,2.62,241,3.214,246,4.321,251,2.308,258,1.544,263,2.375,279,4.055,281,1.783,282,1.471,293,4.321,297,3.268,325,3.706,335,2.778,338,8.025,352,2.234,359,5.3,367,5.829,374,2.863,385,4.043,396,3.214,432,3.466,439,6.528,445,2.369,458,3.417,461,4.125,568,4.708,574,5.605,575,3.688,594,3.45,626,3.589,627,3.137,641,3.386,646,5.719,647,2.883,651,8.977,658,4.941,682,3.077,693,4.583,731,3.201,804,3.188,823,3.417,849,4.61,873,3.646,902,3.401,912,8.85,921,3.311,1023,1.817,1042,3.113,1126,2.66,1142,2.701,1150,2.693,1163,4.357,1189,6.973,1210,3.666,1215,8.706,1217,6.92,1220,7.856,1221,3.008,1222,4.156,1313,4.918,1765,4.698,1808,5.046,1831,5.666,2020,3.37,2041,5.347,2094,3.355,2132,4.039,2466,7.488,2518,10.764,2531,5.553,2561,11.257,2562,4.395,2563,6.078,2564,7.004,2565,10.166,2566,5.191,3404,4.357,4597,4.749,4999,9.708,5000,6.091,5068,7.736,5069,7.736,5070,7.736,5071,7.736,5072,7.736,5073,7.736]],["keywords/931",[]],["title/932",[401,460.294,546,451.561,2215,674.055]],["content/932",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,2041,7.072,3401,11.11]],["keywords/932",[]],["title/933",[16,250.43]],["content/933",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2041,7.965]],["keywords/933",[]],["title/934",[282,329.633]],["content/934",[18,5.157,19,3.327,20,3.15,22,0.921,30,4.615,52,3.839,65,4.304,67,4.511,73,3.275,108,4.668,109,5.526,110,4.439,112,3.169,113,5.6,168,4.252,173,3.553,222,1.502,226,3.252,230,3.207,258,1.89,282,2.745,295,4.943,335,5.2,340,2.108,399,1.934,400,4.017,401,8.472,426,7.475,448,3.295,469,3.493,505,4.814,551,3.839,568,6.679,575,5.052,622,4.91,647,3.529,651,5.83,654,4.91,682,3.766,689,4.056,693,3.773,714,3.696,748,5.086,771,7.518,808,4.035,851,3.469,895,2.839,908,3.402,976,4.07,1049,4.511,1126,6.013,1401,4.392,1535,5.613,1624,7.588,1716,4.615,1875,4.859,2041,6.26,2509,6.452,2562,8.199,2563,7.115,3124,5.878,3403,5.691,3404,5.333,3405,5.333,3406,6.176,3407,6.934,3408,7.455,3409,7.455,3410,6.262,3411,5.379,3412,9.415,3413,7.455,3414,7.455,3415,6.797,3416,6.354,3417,7.455,3423,6.176,3663,8.861,3850,6.354,5001,6.672,5002,6.672,5003,7.087]],["keywords/934",[]],["title/935",[1023,407.123]],["content/935",[49,4.137,89,4.53,112,5.381,127,3.925,168,3.247,222,3.941,224,1.827,254,11.685,258,3.209,277,3.39,284,4.834,335,4.737,357,7.538,397,3.397,399,4.294,400,6.823,575,3.858,578,8.638,622,8.338,689,4.519,707,5.545,842,5.478,847,6.034,849,6.013,851,5.892,995,9.567,1126,5.528,2509,10.957,3275,6.765,3405,9.056,3425,11.136,3428,10.79,3430,7.975,3431,10.957,3432,7.703,5006,13.05,5007,13.05]],["keywords/935",[]],["title/936",[464,345.315,5008,911.566]],["content/936",[1,2.302,2,1.906,18,2.284,22,2.116,59,4.513,66,2.256,73,3.534,78,5.572,83,5.615,103,6.601,110,4.789,127,2.494,163,3.399,166,6.079,168,2.063,195,2.094,196,3.959,205,4.789,208,6.325,216,6.431,222,2.426,223,2.238,224,2.31,227,3.285,251,3.048,268,3.808,281,2.355,291,4.195,307,5.146,333,6.665,343,5.677,377,5.228,394,8.206,404,3.481,423,5.908,464,6.351,469,3.769,546,6.034,550,7.166,553,7.199,672,6.665,698,5.298,741,5.572,746,4.622,800,7.334,803,5.448,813,5.66,834,11.504,836,6.141,841,5.409,901,4.922,976,7.874,1014,4.262,1015,8.045,1042,4.111,1091,5.615,1110,5.615,1112,6.577,1121,4.867,1211,6.02,1326,5.754,1549,7.076,1570,7.833,1594,5.707,1798,6.495,1958,7.482,2041,8.818,2240,6.141,2252,7.334,2336,10.772,2337,7.647,2559,6.962,2569,7.647,3192,7.833,3396,7.334,5008,15.661,5009,8.292,5010,8.292,5011,10.258,5012,8.292,5013,8.292,5014,8.292,5015,8.292]],["keywords/936",[]],["title/937",[1815,1163.024]],["content/937",[11,4.707,22,1.679,102,9.349,110,8.098,127,4.216,168,3.488,218,10.605,238,9.57,246,9.648,279,5.681,316,6.767,335,3.893,464,5.516,546,6.818,547,8.898,616,4.405,677,7.702,738,12.172,746,7.814,998,10.382,1107,13.601,1154,10.981,1211,10.177,1260,12.172,1863,11.268,2216,11.424,2847,11.591,4112,13.601,5008,11.424,5011,11.591,5016,14.02,5017,14.02,5018,14.02,5019,14.02]],["keywords/937",[]],["title/938",[651,700.046]],["content/938",[1,3.674,13,3.607,15,4.058,22,2.292,47,7.376,66,5.206,161,6.341,168,5.226,175,8.892,222,3.741,263,5.006,270,5.1,291,4.474,321,7.811,335,3.674,343,6.056,374,6.035,404,5.555,411,8.633,432,7.305,449,11.292,458,7.202,495,6.015,651,10.085,813,9.033,906,7.305,921,6.978,1442,9.107,2565,10.784,2566,10.941]],["keywords/938",[]],["title/939",[2041,597.791,5004,939.177]],["content/939",[]],["keywords/939",[]],["title/940",[2042,532.102]],["content/940",[2,2.208,279,6.977,330,7.162,526,7.086,1488,11.395,1521,17.216,4027,18.606,5004,14.454,5074,21.213]],["keywords/940",[]],["title/941",[864,626.718]],["content/941",[]],["keywords/941",[]],["title/942",[65,388.167,367,323.775,568,326.078,925,390.102,5004,581.805]],["content/942",[16,2.054,65,12.081,127,3.469,172,5.297,173,5.333,185,6.759,226,3.203,251,5.775,335,3.203,367,9.676,386,7.007,415,7.635,416,7.37,447,9.365,518,5.527,568,9.444,598,8.927,676,6.966,693,3.715,749,7.049,808,6.057,856,8.374,1022,7.874,1401,6.593,1443,6.307,1552,9.15,2216,9.4,2229,9.537,5004,17.387,5038,20.733,5075,11.949,5076,14.213,5077,14.213,5078,14.213,5079,14.213]],["keywords/942",[]],["title/943",[66,188.518,415,458.659,568,326.078,902,375.411,929,436.937]],["content/943",[6,4.821,15,6.344,18,2.335,19,2.408,22,1.016,31,2.7,66,5.628,69,2.915,79,4.195,95,7.819,113,2.459,127,3.794,195,1.431,241,4.34,281,2.408,303,6.652,415,8.349,447,4.139,448,3.636,490,2.915,568,7.088,641,8.123,652,6.839,879,7.819,897,5.873,902,11.744,908,5.584,911,15.604,921,4.471,1026,10.883,1044,5.934,1059,8.225,1126,3.592,1189,4.155,1662,9.163,1765,6.344,2132,8.115,2545,7.235,2564,8.829,2568,6.561,3249,7.361,3855,7.651,4021,8.782,4025,9.673,4320,9.163,4952,9.673,5004,16.7,5080,10.447,5081,10.447,5082,10.447,5083,10.447,5084,10.447,5085,10.447,5086,10.447,5087,10.447,5088,10.447,5089,10.447,5090,10.447,5091,10.447,5092,14.391,5093,10.447,5094,10.447,5095,10.447,5096,10.447]],["keywords/943",[]],["title/944",[11,206.463,415,407.032,627,192.796,902,333.154,930,404.062,1189,301.353]],["content/944",[1,3.526,11,7.149,31,4.044,49,4.026,68,7.538,113,3.683,162,6.474,168,5.297,185,8.068,338,8.169,385,6.771,411,8.284,509,9.219,518,6.085,568,7.885,627,3.981,641,6.848,651,9.925,712,8.6,902,6.88,1189,10.159,1204,8.967,1916,8.06,2564,11.729,5097,23.109]],["keywords/944",[]],["title/945",[66,252.595,651,462.098,1616,674.055]],["content/945",[2,1.759,15,2.914,18,3.777,25,3.323,43,3.074,59,5.172,64,5.432,66,4.793,89,3.641,107,6.113,113,4.667,127,2.858,130,5.271,168,4.842,195,1.604,198,5.349,208,4.844,222,1.858,224,1.33,226,2.638,241,4.864,251,5.041,263,3.595,279,5.557,281,2.699,284,3.52,303,5.011,330,3.953,338,6.113,340,2.606,368,6.15,380,7.037,385,3.84,386,5.772,389,6.199,415,10.65,435,8.591,445,3.585,458,5.172,467,4.748,485,5.101,568,8.79,573,7.269,575,2.809,651,9.297,661,8.883,760,9.219,921,5.011,1204,6.71,1313,7.443,1837,5.842,2562,13.075,2565,11.175,2566,7.857,3787,8.764,5000,9.219,5004,7.978,5098,11.709,5099,11.709,5100,11.709,5101,11.709,5102,11.709,5103,11.709,5104,11.709,5105,9.503,5106,11.709]],["keywords/945",[]],["title/946",[115,426.353,3669,767.708,4664,779.562]],["content/946",[2,2.249,16,3.122,22,1.631,79,4.528,112,7.231,115,9.406,207,7.18,230,5.681,279,7.861,281,3.867,303,7.18,325,8.036,326,9.981,340,4.809,526,4.761,550,7.864,693,4.385,1214,10.943,1215,12.156,2122,8.27,3669,11.257,4664,11.431,5004,14.722,5107,16.776]],["keywords/946",[]],["title/947",[2,78.859,66,167.298,224,86.077,277,159.751,279,249.209,415,407.032]],["content/947",[2,1.596,3,1.659,11,2.796,25,2.912,30,3.281,49,3.946,69,4.279,89,2.212,112,3.434,113,5.386,168,3.097,180,4.972,185,5.355,222,2.434,224,2.086,227,3.3,228,5.658,251,3.062,261,3.811,277,3.872,279,5.044,335,3.456,345,4.451,352,2.963,354,2.532,357,7.19,359,9.836,385,3.365,401,4.129,413,4.736,426,5.942,434,5.152,436,7.681,447,4.066,448,5.338,464,3.843,465,3.404,495,3.786,533,7.007,568,3.919,633,6.886,644,4.097,689,2.884,693,6.199,810,4.62,812,4.598,823,4.533,875,2.863,982,6.445,1021,4.836,1023,2.411,1113,5.121,1142,5.355,1267,4.354,1708,5,1765,6.232,1792,12.448,1830,10.622,2041,4.451,2123,9.416,2229,6.886,2233,8.627,2240,6.168,2261,9.001,2265,7.516,4589,6.445,4738,8.329,5004,13.884,5108,10.262,5109,10.262,5110,15.337,5111,15.337,5112,10.262,5113,10.262,5114,10.262,5115,10.262,5116,10.262,5117,10.262,5118,10.262,5119,10.262]],["keywords/947",[]],["title/948",[401,460.294,546,451.561,2215,674.055]],["content/948",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,2041,7.072,3401,11.11]],["keywords/948",[]],["title/949",[16,250.43]],["content/949",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2041,7.965]],["keywords/949",[]],["title/950",[282,329.633]],["content/950",[18,5.157,19,3.327,20,3.15,22,0.921,30,4.615,52,3.839,65,4.304,67,4.511,73,3.275,108,4.668,109,5.526,110,4.439,112,3.169,113,5.6,168,4.252,173,3.553,222,1.502,226,3.252,230,3.207,258,1.89,282,2.745,295,4.943,335,5.2,340,2.108,399,1.934,400,4.017,401,8.472,426,7.475,448,3.295,469,3.493,505,4.814,551,3.839,568,6.679,575,5.052,622,4.91,647,3.529,651,5.83,654,4.91,682,3.766,689,4.056,693,3.773,714,3.696,748,5.086,771,7.518,808,4.035,851,3.469,895,2.839,908,3.402,976,4.07,1049,4.511,1126,6.013,1401,4.392,1535,5.613,1624,7.588,1716,4.615,1875,4.859,2041,6.26,2509,6.452,2562,8.199,2563,7.115,3124,5.878,3403,5.691,3404,5.333,3405,5.333,3406,6.176,3407,6.934,3408,7.455,3409,7.455,3410,6.262,3411,5.379,3412,9.415,3413,7.455,3414,7.455,3415,6.797,3416,6.354,3417,7.455,3423,6.176,3663,8.861,3850,6.354,5001,6.672,5002,6.672,5003,7.087]],["keywords/950",[]],["title/951",[1023,407.123]],["content/951",[49,4.137,89,4.53,112,5.381,127,3.925,168,3.247,222,3.941,224,1.827,254,11.685,258,3.209,277,3.39,284,4.834,335,4.737,357,7.538,397,3.397,399,4.294,400,6.823,575,3.858,578,8.638,622,8.338,689,4.519,707,5.545,842,5.478,847,6.034,849,6.013,851,5.892,995,9.567,1126,5.528,2509,10.957,3275,6.765,3405,9.056,3425,11.136,3428,10.79,3430,7.975,3431,10.957,3432,7.703,5006,13.05,5007,13.05]],["keywords/951",[]],["title/952",[464,345.315,5008,911.566]],["content/952",[1,2.302,2,1.906,18,2.284,22,2.116,59,4.513,66,2.256,73,3.534,78,5.572,83,5.615,103,6.601,110,4.789,127,2.494,163,3.399,166,6.079,168,2.063,195,2.094,196,3.959,205,4.789,208,6.325,216,6.431,222,2.426,223,2.238,224,2.31,227,3.285,251,3.048,268,3.808,281,2.355,291,4.195,307,5.146,333,6.665,343,5.677,377,5.228,394,8.206,404,3.481,423,5.908,464,6.351,469,3.769,546,6.034,550,7.166,553,7.199,672,6.665,698,5.298,741,5.572,746,4.622,800,7.334,803,5.448,813,5.66,834,11.504,836,6.141,841,5.409,901,4.922,976,7.874,1014,4.262,1015,8.045,1042,4.111,1091,5.615,1110,5.615,1112,6.577,1121,4.867,1211,6.02,1326,5.754,1549,7.076,1570,7.833,1594,5.707,1798,6.495,1958,7.482,2041,8.818,2240,6.141,2252,7.334,2336,10.772,2337,7.647,2559,6.962,2569,7.647,3192,7.833,3396,7.334,5008,15.661,5009,8.292,5010,8.292,5011,10.258,5012,8.292,5013,8.292,5014,8.292,5015,8.292]],["keywords/952",[]],["title/953",[1815,1163.024]],["content/953",[11,4.707,22,1.679,102,9.349,110,8.098,127,4.216,168,3.488,218,10.605,238,9.57,246,9.648,279,5.681,316,6.767,335,3.893,464,5.516,546,6.818,547,8.898,616,4.405,677,7.702,738,12.172,746,7.814,998,10.382,1107,13.601,1154,10.981,1211,10.177,1260,12.172,1863,11.268,2216,11.424,2847,11.591,4112,13.601,5008,11.424,5011,11.591,5016,14.02,5017,14.02,5018,14.02,5019,14.02]],["keywords/953",[]],["title/954",[651,700.046]],["content/954",[1,3.674,13,3.607,15,4.058,22,2.292,47,7.376,66,5.206,161,6.341,168,5.226,175,8.892,222,3.741,263,5.006,270,5.1,291,4.474,321,7.811,335,3.674,343,6.056,374,6.035,404,5.555,411,8.633,432,7.305,449,11.292,458,7.202,495,6.015,651,10.085,813,9.033,906,7.305,921,6.978,1442,9.107,2565,10.784,2566,10.941]],["keywords/954",[]],["title/955",[3372,1364.669]],["content/955",[]],["keywords/955",[]],["title/956",[195,156.745,397,241.681,616,291.743]],["content/956",[2,2.075,3,3.223,7,8.054,8,8.702,31,5.153,49,5.13,127,4.867,195,2.732,397,5.084,399,4.073,469,7.355,616,5.085,652,6.634,3372,15.7,5120,19.94]],["keywords/956",[]],["title/957",[2042,532.102]],["content/957",[627,5.71,895,6.729,896,8.363,3372,17.669]],["keywords/957",[]],["title/958",[16,250.43]],["content/958",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3372,14.46]],["keywords/958",[]],["title/959",[282,329.633]],["content/959",[3,2.447,18,5.421,19,4.656,36,5.823,195,2.767,222,2.402,258,3.021,282,3.842,330,5.111,397,3.198,399,3.092,422,4.66,426,7.072,427,5.492,428,8.414,437,7.747,447,5.998,464,3.793,568,7.714,627,5.139,652,5.037,689,4.254,693,3.957,714,5.908,851,5.547,896,7.527,908,5.438,1535,5.887,1716,6.458,1875,6.8,3262,6.595,3263,7.173,3372,15.904,3492,9.508,3493,9.398,3943,12.726,3951,11.605]],["keywords/959",[]],["title/960",[1023,407.123]],["content/960",[15,4.72,112,6.347,123,8.797,222,3.009,224,2.154,258,3.784,397,4.006,399,3.874,689,5.33,707,6.54,838,8.152,842,6.461,847,7.116,851,6.949,3262,8.262,3273,11.911,3275,7.978,3277,10.263,3279,10.681,3373,17.56,3641,10.506,3766,10.966,5121,18.964]],["keywords/960",[]],["title/961",[5122,1457.086]],["content/961",[]],["keywords/961",[]],["title/962",[272,585.453,370,512.565,616,291.743]],["content/962",[92,9.91,224,2.525,616,5.668,2041,9.64,5122,18.686]],["keywords/962",[]],["title/963",[2042,532.102]],["content/963",[1,2.272,6,4.654,15,2.51,16,2.919,25,2.862,29,6.261,30,3.224,31,2.606,49,2.595,66,5.019,73,5.236,89,3.916,112,3.375,113,2.374,127,2.461,168,4.078,186,3.137,195,2.074,196,3.907,208,6.263,220,4.279,222,2.402,224,2.295,226,3.411,251,4.516,274,5.301,281,3.49,316,3.951,335,4.552,340,2.245,347,5.456,352,2.911,367,3.824,368,5.51,374,3.732,401,4.057,445,3.088,448,3.51,461,5.377,518,3.921,527,7.85,568,6.94,574,6.882,579,4.584,647,3.758,651,4.073,693,5.28,731,6.263,771,4.335,777,5.941,864,7.304,902,4.434,1063,8.193,1074,5.032,1088,6.578,1132,7.385,1212,5.499,1217,6.815,1220,6.782,1344,6.124,1702,9.398,1748,4.971,1864,10.158,2028,7.731,2041,6.565,2080,6.578,2174,6.492,2562,10.323,2563,7.463,2572,7.239,2573,6.411,3394,8.184,3395,5.68,3396,7.239,3397,8.184,4620,7.94,4994,8.478,5122,15.278,5123,7.94,5124,9.337,5125,10.084]],["keywords/963",[]],["title/964",[335,257.805,574,520.107,693,299.043]],["content/964",[8,4.929,16,2.718,18,3.046,25,3.868,31,3.523,112,6.295,162,5.639,198,6.227,206,5.639,207,5.833,219,6.166,222,2.163,224,2.137,226,4.239,244,6.259,326,8.109,335,5.233,340,3.034,385,4.47,447,5.4,512,7.376,568,5.205,574,8.551,575,3.27,616,3.476,693,6.586,790,7.433,804,5.616,873,6.423,926,7.068,982,8.561,1024,8.774,1364,13.866,1549,9.439,1765,8.278,1916,7.021,2229,12.622,2248,7.742,2568,11.814,4738,11.062,5122,18.108,5123,14.811,5124,21.504,5126,13.63,5127,13.63,5128,13.63,5129,13.63,5130,13.63]],["keywords/964",[]],["title/965",[864,626.718]],["content/965",[1,1.922,11,5.044,13,1.887,15,3.315,16,1.233,18,3.661,22,1.593,31,2.205,47,3.859,64,3.957,65,6.054,66,4.907,68,4.109,69,3.716,89,2.87,92,3.804,113,2.008,115,3.179,127,2.082,161,3.317,168,4.879,175,4.652,180,4.133,185,6.463,198,3.898,222,3.186,224,0.969,225,7.891,226,4.171,228,2.369,230,4.51,241,3.544,250,4.765,251,4.887,307,2.872,335,1.922,338,9.664,348,4.549,370,3.822,374,3.158,385,2.798,432,3.822,439,7.051,458,3.768,568,3.258,575,4.441,577,6.385,615,5.296,627,2.171,651,8.594,689,3.743,693,2.23,731,5.51,752,3.342,803,4.549,823,3.768,856,5.026,864,3.085,873,4.02,902,5.855,921,3.651,926,4.424,1063,7.207,1126,4.579,1142,2.978,1189,8.839,1313,5.423,1598,5.127,2041,5.776,2042,2.619,2074,6.385,2518,13.062,2560,6.924,2561,11.997,2562,4.846,2563,6.565,2564,9.305,2565,10.834,2566,5.724,3053,5.296,4588,8.466,4589,5.358,4999,10.486,5000,6.717,5011,10.993,5034,7.899,5035,7.483,5036,12.331,5037,11.681,5038,7.483]],["keywords/965",[]],["title/966",[401,460.294,546,451.561,2215,674.055]],["content/966",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,2041,7.072,3401,11.11]],["keywords/966",[]],["title/967",[16,250.43]],["content/967",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2041,7.965]],["keywords/967",[]],["title/968",[282,329.633]],["content/968",[2,0.875,16,1.215,18,5.258,19,3.035,20,2.797,22,0.817,25,2.386,30,4.21,52,3.409,65,3.822,67,4.005,73,2.908,79,2.269,108,4.145,109,4.907,110,3.941,112,2.814,113,5.386,168,4.026,173,3.155,222,1.334,226,4.138,228,2.335,230,2.847,231,3.357,258,1.678,270,2.63,282,2.504,295,4.389,335,4.981,340,1.871,399,1.717,400,3.567,401,8.022,426,7.268,429,5.22,448,2.926,469,3.101,505,4.275,551,3.409,557,5.789,568,6.198,569,4.36,575,4.784,622,4.36,647,3.133,651,5.318,654,4.36,677,3.749,682,3.344,689,3.7,693,4.242,714,3.281,748,4.516,749,4.17,771,6.976,808,3.583,812,3.767,851,3.081,895,2.521,908,3.02,976,3.614,1049,4.005,1091,4.621,1126,5.58,1309,5.28,1401,3.9,1535,7.754,1624,6.922,1716,4.21,1875,4.433,2041,7.039,2509,5.729,2562,7.479,2563,6.491,2847,5.642,3124,5.22,3403,5.053,3404,4.735,3405,4.735,3406,5.484,3407,6.157,3408,6.62,3409,6.62,3410,5.56,3411,4.776,3412,8.589,3413,6.62,3414,6.62,3415,6.035,3416,5.642,3417,6.62,3423,5.484,3663,12.241,3850,5.642,5001,5.924,5002,5.924,5003,6.293,5004,5.729,5005,6.823]],["keywords/968",[]],["title/969",[1023,407.123]],["content/969",[49,4.137,89,4.53,112,5.381,127,3.925,168,3.247,222,3.941,224,1.827,254,11.685,258,3.209,277,3.39,284,4.834,335,4.737,357,7.538,397,3.397,399,4.294,400,6.823,575,3.858,578,8.638,622,8.338,689,4.519,707,5.545,842,5.478,847,6.034,849,6.013,851,5.892,995,9.567,1126,5.528,2509,10.957,3275,6.765,3405,9.056,3425,11.136,3428,10.79,3430,7.975,3431,10.957,3432,7.703,5006,13.05,5007,13.05]],["keywords/969",[]],["title/970",[464,345.315,5008,911.566]],["content/970",[1,2.302,2,1.906,18,2.284,22,2.116,59,4.513,66,2.256,73,3.534,78,5.572,83,5.615,103,6.601,110,4.789,127,2.494,163,3.399,166,6.079,168,2.063,195,2.094,196,3.959,205,4.789,208,6.325,216,6.431,222,2.426,223,2.238,224,2.31,227,3.285,251,3.048,268,3.808,281,2.355,291,4.195,307,5.146,333,6.665,343,5.677,377,5.228,394,8.206,404,3.481,423,5.908,464,6.351,469,3.769,546,6.034,550,7.166,553,7.199,672,6.665,698,5.298,741,5.572,746,4.622,800,7.334,803,5.448,813,5.66,834,11.504,836,6.141,841,5.409,901,4.922,976,7.874,1014,4.262,1015,8.045,1042,4.111,1091,5.615,1110,5.615,1112,6.577,1121,4.867,1211,6.02,1326,5.754,1549,7.076,1570,7.833,1594,5.707,1798,6.495,1958,7.482,2041,8.818,2240,6.141,2252,7.334,2336,10.772,2337,7.647,2559,6.962,2569,7.647,3192,7.833,3396,7.334,5008,15.661,5009,8.292,5010,8.292,5011,10.258,5012,8.292,5013,8.292,5014,8.292,5015,8.292]],["keywords/970",[]],["title/971",[1815,1163.024]],["content/971",[11,4.707,22,1.679,102,9.349,110,8.098,127,4.216,168,3.488,218,10.605,238,9.57,246,9.648,279,5.681,316,6.767,335,3.893,464,5.516,546,6.818,547,8.898,616,4.405,677,7.702,738,12.172,746,7.814,998,10.382,1107,13.601,1154,10.981,1211,10.177,1260,12.172,1863,11.268,2216,11.424,2847,11.591,4112,13.601,5008,11.424,5011,11.591,5016,14.02,5017,14.02,5018,14.02,5019,14.02]],["keywords/971",[]],["title/972",[651,700.046]],["content/972",[1,3.674,13,3.607,15,4.058,22,2.292,47,7.376,66,5.206,161,6.341,168,5.226,175,8.892,222,3.741,263,5.006,270,5.1,291,4.474,321,7.811,335,3.674,343,6.056,374,6.035,404,5.555,411,8.633,432,7.305,449,11.292,458,7.202,495,6.015,651,10.085,813,9.033,906,7.305,921,6.978,1442,9.107,2565,10.784,2566,10.941]],["keywords/972",[]],["title/973",[3311,984.527]],["content/973",[]],["keywords/973",[]],["title/974",[1831,1269.296]],["content/974",[2,1.853,3,2.877,19,4.104,20,5.923,54,10.113,97,7.938,144,13.038,145,8.302,195,3.074,224,3.021,229,7.458,279,7.38,396,7.396,432,7.976,495,6.567,575,4.271,714,6.949,801,12.33,2417,15.616,3116,16.484,3311,13.959,5131,17.803,5132,16.484]],["keywords/974",[]],["title/975",[54,649.882,195,156.745,3311,649.882]],["content/975",[2,1.746,3,2.711,20,5.582,22,1.631,54,13.576,145,7.823,191,9.884,195,3.578,222,2.662,224,2.454,316,6.572,495,8.816,540,8.127,597,9.613,602,8.585,714,6.548,784,11.618,785,13.615,791,12.73,801,11.618,908,6.027,1012,15.533,1077,12.286,1620,14.103,1710,12.042,1843,10.415,2633,12.556,3311,12.273]],["keywords/975",[]],["title/976",[43,256.768,195,133.976,287,418.518,3311,555.478]],["content/976",[2,2.228,3,3.46,20,7.123,43,6.233,86,7.594,176,13.021,195,2.933,222,2.624,224,2.432,251,4.934,279,7.041,287,10.159,291,4.538,316,6.478,367,6.271,490,4.614,493,8.818,652,7.123,689,4.648,784,11.453,1593,11.268,1843,10.267,2181,11.453,2185,15.312,3311,14.26,5133,21.407]],["keywords/976",[]],["title/977",[224,111.085,518,380.264,780,701.955,792,402.94]],["content/977",[2,1.325,3,2.058,16,1.84,22,2.019,25,3.614,43,5.921,54,13.502,66,2.812,115,4.746,145,5.938,155,5.026,171,11.17,195,3.257,220,7.612,222,3.578,224,2.561,244,5.847,287,9.651,291,4.923,348,6.791,388,10.027,396,5.29,413,5.877,428,4.713,442,9.531,445,3.899,468,10.782,469,4.697,490,3.553,495,4.697,525,9.141,575,4.983,616,3.247,664,7.998,689,3.579,696,8.198,746,5.761,780,9.141,784,8.819,785,10.335,791,7.503,792,8.558,801,8.819,981,9.141,1278,8.307,1391,8.198,1455,7.654,1459,11.791,1625,10.027,1650,9.531,1843,7.906,3311,7.234,4266,7.998,5132,11.791]],["keywords/977",[]],["title/978",[3375,1364.669]],["content/978",[]],["keywords/978",[]],["title/979",[195,156.745,397,241.681,616,291.743]],["content/979",[2,1.942,3,3.016,7,7.537,8,8.356,31,4.823,49,4.801,127,4.554,195,2.557,274,9.81,289,8.568,397,4.882,399,3.812,469,6.883,616,4.758,652,6.208,3375,14.692,5134,18.66,5135,18.66,5136,18.66,5137,18.66,5138,18.66,5139,18.66,5140,18.66]],["keywords/979",[]],["title/980",[2042,532.102]],["content/980",[13,4.965,652,7.466,895,6.729,3375,17.669]],["keywords/980",[]],["title/981",[16,250.43]],["content/981",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3375,14.46]],["keywords/981",[]],["title/982",[282,329.633]],["content/982",[3,2.415,13,4.43,18,5.393,19,4.616,36,5.748,195,2.744,222,2.371,258,2.982,282,3.809,330,5.046,397,3.157,399,3.053,422,4.6,426,7.036,427,5.421,428,8.36,437,7.647,447,5.92,464,3.744,568,7.647,652,7.514,689,4.2,693,3.906,714,5.832,851,5.475,908,5.368,1535,5.811,1716,6.403,1875,6.741,3262,6.51,3263,7.08,3375,18.997,3492,9.386,3493,9.277,3951,11.456,4335,13.107]],["keywords/982",[]],["title/983",[1023,407.123]],["content/983",[15,4.72,123,8.797,222,3.009,224,2.154,258,3.784,397,4.006,399,3.874,400,8.046,689,5.33,707,6.54,838,8.152,842,6.461,847,7.116,851,6.949,1234,12.922,3262,8.262,3275,7.978,3277,10.263,3376,17.56,3641,10.506,3766,10.966,4337,15.391,4843,17.56]],["keywords/983",[]],["title/984",[15,212.515,43,224.2,195,116.983,287,365.434,3311,485.021]],["content/984",[]],["keywords/984",[]],["title/985",[195,156.745,397,241.681,616,291.743]],["content/985",[4,8.756,20,8.33,66,3.625,127,4.008,161,6.385,195,2.25,205,7.697,206,6.794,222,4.117,224,1.865,229,6.879,241,8.853,343,6.098,354,4.051,399,3.354,435,8.349,437,8.403,491,10.313,526,6.047,540,7.955,552,8.458,575,3.94,627,4.178,814,10.439,841,8.694,1049,7.823,1077,12.025,2545,11.372,2568,10.313,3311,13.438,5141,15.204]],["keywords/985",[]],["title/986",[2042,532.102]],["content/986",[]],["keywords/986",[]],["title/987",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,3311,386.879,3471,331.852]],["content/987",[2,1.853,22,2.182,66,3.931,127,4.345,160,8.345,186,5.539,329,6.923,340,3.963,352,6.479,354,4.393,355,4.581,575,5.384,652,5.923,807,11.182,895,5.339,921,7.619,1133,6.396,1155,8.829,1759,13.648,1972,13.325,2568,11.182,3311,14.656,3484,8.994,3536,12.545,5142,16.484]],["keywords/987",[]],["title/988",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/988",[1,3.922,14,6.038,18,3.89,73,6.02,206,7.2,226,3.922,281,4.012,283,6.53,329,6.768,340,4.924,347,6.273,352,6.386,422,5.357,445,5.329,599,7.514,601,10.261,603,8.073,604,8.964,752,6.818,864,6.293,896,6.486,1133,6.252,1142,6.076,1175,10.46,1945,9.973,2094,9.594,3311,9.886,3440,11.678,3471,8.48,3484,8.792]],["keywords/988",[]],["title/989",[864,626.718]],["content/989",[1,2.224,2,2.08,8,3.569,13,2.184,14,5.168,16,1.426,20,4.956,22,0.96,43,2.592,66,5.32,69,5.575,73,3.414,75,5.76,112,3.303,127,2.409,161,3.838,185,5.2,186,5.582,195,2.041,205,6.982,206,7.422,222,2.847,226,2.224,263,3.03,300,6.438,316,3.867,340,2.197,347,3.557,350,6.528,352,4.301,354,4.426,355,3.832,360,4.422,372,4.597,392,9.355,422,3.038,437,5.051,448,3.435,457,4.422,495,3.641,546,3.896,554,6.726,557,6.549,575,5.616,601,8.322,626,6.91,627,3.79,632,4.422,652,4.956,731,4.084,807,6.199,895,2.96,896,6.686,1020,5.425,1126,3.393,1142,6.263,1155,4.895,1189,3.925,1221,3.838,1299,5.994,1456,7.567,1539,7.228,1569,6.836,1623,6.128,1859,5.513,1945,8.536,1984,6.623,2020,6.489,2055,5.932,2094,8.666,2096,6.623,2211,6.836,2568,6.199,3221,12.878,3311,12.183,3501,6.836,4035,7.388,5143,9.139,5144,9.139]],["keywords/989",[]],["title/990",[16,250.43]],["content/990",[1,5.577,2,1.882,16,3.274,22,1.758,24,4.683,43,4.747,89,3.896,163,6.015,224,2.947,227,5.813,228,5.021,277,3.812,281,4.168,284,5.436,287,7.738,354,4.461,355,4.652,372,5.58,464,4.53,490,5.045,875,5.045,1023,4.247,3311,10.27]],["keywords/990",[]],["title/991",[282,329.633]],["content/991",[2,1.297,3,2.014,13,2.757,14,6.13,18,5.27,19,4.073,20,5.878,22,1.718,86,5.722,168,2.516,206,8.492,222,1.977,230,4.22,258,2.487,282,3.904,283,4.676,329,6.87,340,2.774,347,4.491,352,3.598,354,3.075,355,3.206,392,11.096,399,2.546,422,3.836,426,6.512,464,3.122,601,9.522,660,5.842,689,3.502,816,6.904,818,5.873,875,3.477,895,3.737,896,6.584,908,4.477,1112,11.374,1133,4.477,1142,7.166,1679,5.722,1716,5.649,1875,5.948,1945,10.124,2025,7.141,2094,9.686,3263,5.904,3311,12.686,3471,6.072,3481,7.922,3485,9.553,3486,9.553,3487,10.114,4736,12.449,4924,9.812]],["keywords/991",[]],["title/992",[1023,407.123]],["content/992",[222,2.869,224,2.054,258,3.608,397,4.787,399,3.693,689,6.368,707,6.235,818,8.52,838,7.772,842,6.16,847,8.503,1133,6.495,1142,6.312,3275,7.606,3311,10.27,3312,16.741,3496,11.957,3500,11.099,3501,12.521,4924,14.236,5145,15.2,5146,16.741,5147,16.741,5148,16.741,5149,16.741,5150,16.741]],["keywords/992",[]],["title/993",[3377,1364.669]],["content/993",[]],["keywords/993",[]],["title/994",[195,156.745,397,241.681,616,291.743]],["content/994",[2,2.075,3,3.223,7,8.054,8,8.702,31,5.153,49,5.13,127,4.867,195,2.732,397,5.084,399,4.073,469,7.355,616,5.085,652,6.634,3377,15.7,5151,19.94]],["keywords/994",[]],["title/995",[2042,532.102]],["content/995",[113,4.86,160,9.679,224,2.346,226,4.653,277,4.353,340,4.596,352,5.961,445,6.322,447,8.18,895,6.192,896,7.695,3377,19.349]],["keywords/995",[]],["title/996",[16,250.43]],["content/996",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3377,14.46]],["keywords/996",[]],["title/997",[282,329.633]],["content/997",[3,2.479,18,5.672,19,4.697,113,3.61,160,10.726,222,2.434,241,6.372,258,3.061,282,3.875,289,7.043,397,3.24,399,3.133,422,4.721,426,7.4,447,9.659,689,4.311,693,4.009,714,7.953,851,5.62,896,7.593,900,12.798,908,5.51,1535,5.964,1716,6.515,1875,6.86,2967,13.453,3263,7.267,3377,16.044,5152,15.338,5153,20.376]],["keywords/997",[]],["title/998",[1023,407.123]],["content/998",[15,4.644,160,8.747,208,7.72,222,2.961,224,2.12,258,3.724,397,3.942,399,3.812,447,7.393,689,5.244,707,6.435,838,8.021,842,6.357,847,7.002,851,6.837,3275,7.85,3277,10.099,3279,10.509,3378,17.278,3646,15.687,3774,18.195,5154,16.367,5155,18.66,5156,18.66]],["keywords/998",[]],["title/999",[15,243.386,54,555.478,195,133.976,3311,555.478]],["content/999",[]],["keywords/999",[]],["title/1000",[195,156.745,397,241.681,616,291.743]],["content/1000",[4,7.354,16,1.993,20,8.779,66,3.045,127,3.366,161,5.363,195,1.89,205,8.89,206,5.706,221,6.924,222,4.11,224,2.651,229,9.079,241,7.878,343,5.122,354,3.403,360,8.496,399,2.817,435,7.012,437,7.058,491,8.662,526,5.382,530,8.049,540,6.681,552,9.768,575,4.55,627,3.509,632,6.179,693,3.605,717,9.462,814,8.767,841,7.302,1049,6.57,1077,10.1,1139,9.551,2545,9.551,2568,8.662,3311,14.364,5141,12.77]],["keywords/1000",[]],["title/1001",[2042,532.102]],["content/1001",[]],["keywords/1001",[]],["title/1002",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,3311,386.879,3471,331.852]],["content/1002",[2,1.853,22,2.182,66,3.931,127,4.345,160,8.345,186,5.539,329,6.923,340,3.963,352,6.479,354,4.393,355,4.581,575,5.384,652,5.923,807,11.182,895,5.339,921,7.619,1133,6.396,1155,8.829,1759,13.648,1972,13.325,2568,11.182,3311,14.656,3484,8.994,3536,12.545,5142,16.484]],["keywords/1002",[]],["title/1003",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/1003",[1,3.922,14,6.038,18,3.89,73,6.02,206,7.2,226,3.922,281,4.012,283,6.53,329,6.768,340,4.924,347,6.273,352,6.386,422,5.357,445,5.329,599,7.514,601,10.261,603,8.073,604,8.964,752,6.818,864,6.293,896,6.486,1133,6.252,1142,6.076,1175,10.46,1945,9.973,2094,9.594,3311,9.886,3440,11.678,3471,8.48,3484,8.792]],["keywords/1003",[]],["title/1004",[864,626.718]],["content/1004",[1,2.169,2,2.053,8,3.48,13,2.129,14,5.071,16,1.391,20,4.863,22,1.421,43,2.527,66,5.279,69,5.504,73,3.329,75,5.617,112,3.221,127,2.349,160,4.512,161,3.743,185,5.102,186,5.497,195,2.421,205,6.851,206,7.31,222,2.803,226,2.169,263,2.955,300,6.278,316,3.771,340,2.142,347,3.469,350,6.366,352,4.219,354,4.359,355,3.76,360,4.312,372,4.511,392,9.179,422,2.963,437,4.925,448,3.35,457,4.312,495,3.551,540,4.663,546,3.799,554,6.559,557,6.426,575,5.568,601,8.196,626,6.78,627,3.719,632,4.312,652,4.863,731,3.982,807,6.045,895,2.886,896,6.584,1020,5.29,1126,3.309,1142,6.168,1155,4.774,1189,3.828,1221,3.743,1299,5.846,1456,7.379,1539,7.049,1569,6.666,1623,5.976,1748,4.745,1859,5.376,1945,8.375,1984,6.459,2020,6.367,2055,5.785,2094,8.556,2096,6.459,2211,6.666,2568,6.045,3221,12.682,3311,12.686,3501,6.666,4035,7.204,5143,8.912,5144,8.912]],["keywords/1004",[]],["title/1005",[16,250.43]],["content/1005",[1,5.597,2,2.37,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,791,10.736,875,5.084,1023,4.28,3311,10.351]],["keywords/1005",[]],["title/1006",[465,457.256,5157,1276.224]],["content/1006",[16,2.957,42,7.315,54,8.77,71,8.876,86,7.089,97,6.884,155,6.094,195,2.115,222,3.247,224,1.754,251,4.606,277,3.255,279,7.55,291,5.616,296,6.071,316,8.017,401,6.212,428,5.715,445,4.728,464,5.127,465,8.109,495,5.695,511,7.396,571,11.083,677,9.125,714,7.988,791,9.096,921,6.608,1443,6.852,1945,8.847,2217,12.531,2783,12.531,3156,12.531,3311,8.77,5157,22.634]],["keywords/1006",[]],["title/1007",[19,196.828,251,254.733,929,436.937,1947,654.579,2203,748.94]],["content/1007",[8,7.089,89,4.225,186,6.099,195,2.686,222,3.11,251,5.848,279,6.447,283,7.356,291,6.536,326,11.664,689,5.509,1014,9.937,1643,9.288,1837,9.782,1843,12.17,1971,14.673,3311,11.136]],["keywords/1007",[]],["title/1008",[43,224.2,195,116.983,287,365.434,746,386.262,791,503.062]],["content/1008",[1,2.764,2,0.8,3,3.451,14,4.255,15,3.052,16,1.11,18,2.741,19,2.827,20,2.557,22,1.978,24,1.991,36,2.956,43,5.012,49,3.938,66,3.857,69,3.422,71,3.333,73,2.658,79,3.311,86,3.529,89,1.656,113,4.493,127,3.735,130,3.46,139,5.631,155,3.033,162,5.074,179,4.012,186,2.391,188,5.013,195,1.68,207,3.289,220,7.412,222,3.797,224,1.984,225,5.908,227,3.943,251,2.293,255,4.366,261,4.555,263,2.359,270,3.836,277,2.586,279,4.034,282,1.462,287,8.169,290,3.304,316,3.011,317,5.322,343,2.854,368,2.797,385,2.52,386,3.789,396,3.193,422,2.366,426,2.241,445,3.755,458,3.395,481,4.718,518,2.989,544,3.933,547,6.317,569,3.985,596,4.886,599,6.608,603,5.689,604,3.959,606,4.485,607,3.427,610,4.667,612,6.237,622,3.985,641,6.698,642,6.493,644,3.068,689,2.16,728,6.85,743,9.105,746,5.548,752,4.805,761,8.548,791,10.292,792,7.198,817,5.752,823,5.417,875,2.144,1121,3.661,1313,4.886,1745,5.157,1851,8.804,1875,2.587,1909,10.31,1916,6.317,1923,4.947,1971,5.752,2018,11.208,2067,12.809,3311,9.923,3787,9.179,5158,12.264,5159,7.685,5160,7.685,5161,7.685,5162,7.685,5163,6.741]],["keywords/1008",[]],["title/1009",[282,329.633]],["content/1009",[2,0.878,3,1.364,13,1.867,14,4.581,18,4.734,19,3.75,20,6.645,22,1.789,30,2.698,70,3.395,86,3.875,108,4.16,168,1.704,185,2.946,195,2.229,206,6.73,213,5.18,222,2.92,226,1.901,230,2.858,258,1.684,282,3.094,283,3.166,329,5.135,330,4.458,340,1.878,347,3.041,352,2.436,354,2.082,355,2.171,392,8.293,399,1.724,422,2.597,426,6.868,427,3.061,428,6.021,455,4.436,464,4.075,465,6.105,568,3.222,601,7.546,626,3.914,659,5.662,660,3.955,689,3.711,693,2.206,714,3.293,717,8.117,816,4.675,818,3.977,835,4.02,846,6.361,851,3.092,875,2.354,895,2.53,896,4.921,908,4.744,1112,8.5,1121,4.02,1133,3.031,1142,5.679,1535,3.281,1679,3.875,1716,4.222,1775,8.738,1875,4.445,1945,7.567,2025,4.835,2094,8.663,2121,5.238,3054,13.676,3262,3.676,3311,12.031,3395,7.437,3471,4.111,3481,5.364,3482,5.662,3485,6.469,3486,6.469,3487,6.848,3492,5.3,3493,5.238,3494,5.946,4736,9.304,4924,6.644,4949,11.582,5164,15.062,5165,17.038,5166,13.204,5167,13.204,5168,8.438,5169,13.204,5170,8.438,5171,8.438,5172,8.438,5173,8.438]],["keywords/1009",[]],["title/1010",[1023,407.123]],["content/1010",[1,3.411,86,6.951,123,9.37,222,2.402,224,1.72,258,3.021,347,5.456,397,4.267,399,3.092,400,8.57,464,3.793,689,5.677,707,5.22,818,7.134,838,6.507,842,5.157,847,7.58,851,7.401,895,4.539,908,5.438,1023,3.556,1133,5.438,1142,5.285,2094,6.566,2125,9.007,3054,12.726,3262,6.595,3275,6.368,3374,14.017,3495,9.293,3496,10.012,3500,9.293,3501,10.484,4924,11.919,4949,13.278,5145,12.726,5146,14.017,5147,14.017,5148,14.017,5149,14.017,5150,14.017,5164,14.017,5165,14.017,5174,15.138,5175,17.717,5176,20.199]],["keywords/1010",[]],["title/1011",[2038,1180.983]],["content/1011",[]],["keywords/1011",[]],["title/1012",[195,156.745,397,241.681,616,291.743]],["content/1012",[2,1.911,3,2.968,7,7.418,8,8.274,24,4.757,31,4.747,49,4.725,127,4.483,195,2.516,397,4.834,399,3.752,469,6.775,616,4.683,652,6.11,1762,11.154,2038,12.514,4115,20.954,5177,14.079,5178,18.365,5179,18.365,5180,18.365,5181,18.365,5182,18.365]],["keywords/1012",[]],["title/1013",[2042,532.102]],["content/1013",[652,7.325,895,6.602,896,8.205,1050,9.223,2038,15.001,2064,15.804]],["keywords/1013",[]],["title/1014",[16,250.43]],["content/1014",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2038,12.514]],["keywords/1014",[]],["title/1015",[282,329.633]],["content/1015",[3,2.326,18,5.31,19,4.5,36,5.535,43,3.778,52,5.835,123,6.675,193,10.538,195,1.971,222,2.283,258,2.871,282,3.713,330,4.858,356,8.173,357,6.745,397,3.04,399,2.939,426,6.461,427,5.22,428,8.2,447,5.701,458,6.356,568,5.495,689,4.044,693,3.761,714,5.616,719,10.729,721,7.094,816,7.971,851,5.272,872,8.477,908,5.169,1535,5.595,1679,6.607,1716,6.242,1803,7.564,1875,6.572,1974,7.094,2038,9.804,3262,6.269,3263,6.818,3640,9.804,3641,7.971,3969,10.77,4265,18.075,5177,14.965,5183,14.389,5184,12.097]],["keywords/1015",[]],["title/1016",[1023,407.123]],["content/1016",[15,4.332,123,8.073,222,2.761,224,1.977,258,3.473,397,3.676,399,3.555,458,7.687,689,4.891,707,6.002,838,7.481,842,5.929,847,6.53,851,6.377,1133,6.252,1142,7.723,1796,10.569,3262,7.582,3273,10.931,3275,7.321,3279,9.802,3379,15.265,3484,8.792,3495,10.684,3496,11.51,3500,10.684,3641,9.641,3766,10.063,5145,14.631,5184,14.631,5185,17.403,5186,17.403,5187,17.403]],["keywords/1016",[]],["title/1017",[3313,1364.669]],["content/1017",[]],["keywords/1017",[]],["title/1018",[2042,532.102]],["content/1018",[2,2.149,22,2.007,112,6.91,279,6.791,340,4.596,352,5.961,693,5.397,895,6.192,1044,11.729,1126,7.099,1215,9.387,1221,8.029,3313,16.258]],["keywords/1018",[]],["title/1019",[946,746.272,1795,674.055,3441,877.073]],["content/1019",[16,3.589,24,6.739,166,10.841,222,4.128,224,2.07,303,7.799,519,10.015,625,13.341,946,14.853,1795,14.633,2570,13.638,3441,19.04,5188,18.221]],["keywords/1019",[]],["title/1020",[24,296.351,71,496.196,222,181.529]],["content/1020",[4,4.297,13,3.969,22,0.783,24,6.982,30,2.576,36,3.099,43,5.13,69,4.405,70,9.339,71,8.473,72,5.122,89,2.744,94,5.407,113,2.998,119,7.363,120,8.753,127,1.967,181,3.376,195,1.104,205,3.777,222,4.105,224,2.038,226,4.043,229,3.376,237,3.495,270,2.521,291,2.211,303,3.449,316,3.157,360,3.61,377,4.123,387,7.649,389,4.266,400,3.419,417,7.172,495,2.972,511,8.594,519,4.429,625,10.495,644,3.217,676,3.949,677,3.593,679,7.324,728,4.501,739,7.998,771,3.464,909,4.501,921,3.449,1048,7.068,1221,6.976,1267,5.403,1313,5.122,1445,5.678,1535,6.14,1590,8.545,1684,9.302,1795,7.503,1917,10.758,1963,6.54,2181,14.384,2851,13.428,3152,5.784,3441,9.762,5189,7.461,5190,15.383,5191,12.734,5192,8.058,5193,12.734,5194,8.058,5195,8.058,5196,12.734,5197,8.058,5198,8.058,5199,15.788,5200,8.058,5201,8.058]],["keywords/1020",[]],["title/1021",[16,250.43]],["content/1021",[1,3.464,2,0.805,6,5.69,13,3.401,16,2.767,18,4.28,19,3.543,20,5.114,22,1.199,23,7.41,24,6.321,25,3.499,30,3.942,31,3.186,43,2.031,60,9.793,71,6.667,73,2.676,89,1.667,106,4.488,108,3.814,112,2.589,113,1.821,120,6.887,130,3.483,139,3.552,163,2.574,222,2.782,224,1.992,227,2.487,228,2.148,229,3.241,230,4.175,238,6.83,258,1.544,263,2.375,270,3.857,277,1.631,281,2.842,282,2.345,284,2.326,334,3.188,340,1.722,354,1.909,355,1.99,360,3.466,368,4.488,372,2.388,399,1.58,426,6.481,427,4.473,455,4.067,464,1.938,490,4.892,494,7.971,575,1.856,609,5.666,615,7.654,625,11.939,647,2.883,714,4.812,717,3.86,771,5.3,808,3.297,818,3.646,835,5.874,858,4.357,875,3.44,895,4.609,946,5.046,1007,4.039,1023,1.817,1076,5.358,1126,6.584,1143,7.717,1210,3.666,1220,5.524,1221,3.008,1267,3.282,1412,7.569,1679,3.552,1716,3.942,1875,4.151,2181,5.358,2487,5.451,2851,9.228,3034,7.41,3263,3.666,3313,9.708,3403,4.65,3587,6.279,3588,6.279,3589,6.091,3590,6.091,3591,6.279,3593,10.006,3595,6.279,3596,6.279,3597,6.279,3598,6.279,3599,6.279,5190,6.091,5202,7.163,5203,15.371,5204,7.736]],["keywords/1021",[]],["title/1022",[1023,407.123]],["content/1022",[14,5.579,19,3.707,23,9.664,98,9.983,105,10.222,112,5.381,195,2.88,222,2.551,224,1.827,258,3.209,397,3.397,399,3.285,427,5.834,625,8.638,689,4.519,707,5.545,842,7.161,847,6.034,1126,5.528,1143,10.554,1614,8.838,1798,10.222,1800,8.638,2105,9.872,2108,12.661,2510,11.839,3034,9.664,3277,11.376,3425,11.136,3602,13.05,3603,12.661,3604,13.05,3605,13.05,3606,13.05,3607,13.05,3608,13.05,5202,14.889,5205,16.08,5206,16.08,5207,12.661]],["keywords/1022",[]],["title/1023",[24,253.302,771,420.36,1412,600.333,3313,769.957]],["content/1023",[1,1.562,2,1.485,3,1.12,6,3.198,11,1.888,16,2.957,19,5.086,22,0.674,23,9.886,24,5.715,30,6.207,31,1.791,43,1.82,49,2.903,60,9.187,62,4.668,67,5.375,70,2.788,87,4.687,98,4.302,105,4.405,106,2.522,111,8.263,130,3.12,139,3.182,155,2.735,195,2.804,196,2.685,207,2.966,222,2.61,224,1.621,226,1.562,230,3.821,231,4.504,238,6.251,250,3.87,251,2.067,258,2.252,263,5.05,275,6.927,277,1.461,282,2.146,288,3.593,296,2.725,307,2.333,312,2.966,318,4.883,321,3.32,332,4.352,340,2.511,368,5.987,380,4.165,399,1.416,404,3.844,427,5.177,434,3.479,440,4.371,448,6.756,464,3.575,465,3.743,469,4.162,490,4.59,503,4.352,550,3.248,551,2.81,579,3.15,607,3.09,615,4.302,616,3.639,642,3.669,678,4.254,736,3.669,814,4.405,823,3.061,829,3.12,849,2.591,920,3.643,926,3.593,957,4.165,976,6.135,1021,3.266,1023,1.628,1044,3.936,1221,2.695,1303,4.883,1412,6.927,1637,4.405,1683,5.187,1684,4.083,1731,6.647,1800,9.727,1876,4.302,1885,4.405,2025,3.971,2055,4.165,2081,4.165,2105,10.098,2422,6.927,2510,9.264,3034,10.883,3122,4.974,3128,5.187,3152,4.974,3313,8.884,3411,3.936,3611,5.624,3612,5.456,3613,5.826,3614,5.456,3615,5.456,3616,5.456,3617,5.456,3618,5.456,3619,5.456,3620,5.456,3621,5.456,3622,5.456,3623,5.456,3624,5.456,3625,5.456,3626,7.086,3627,5.456,3628,5.456,3629,8.884,3630,5.456,3631,5.456,3632,5.456,3633,5.456,3634,5.456,3635,5.456,3636,5.456,3637,5.456]],["keywords/1023",[]],["title/1024",[3333,911.566,3380,1085.254]],["content/1024",[]],["keywords/1024",[]],["title/1025",[195,156.745,397,241.681,616,291.743]],["content/1025",[2,2.093,3,3.251,7,8.123,8,7.273,22,1.955,31,5.198,49,5.175,127,4.909,168,4.061,224,2.285,397,4.249,399,4.109,469,7.419,714,7.85,3380,15.836,5208,20.112]],["keywords/1025",[]],["title/1026",[2042,532.102]],["content/1026",[195,2.933,241,8.894,526,7.124,627,5.447,714,8.356,731,8.857,3333,14.158,3380,16.856]],["keywords/1026",[]],["title/1027",[16,250.43]],["content/1027",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3380,14.46]],["keywords/1027",[]],["title/1028",[282,329.633]],["content/1028",[3,2.385,18,5.015,19,4.577,31,3.813,36,7.637,43,5.213,123,9.21,139,6.775,195,2.72,222,2.341,258,2.944,282,3.776,330,4.982,397,3.117,399,3.014,426,6.999,427,7.203,428,9.549,447,5.845,568,7.582,689,4.147,693,3.856,714,5.758,851,5.406,908,5.3,1535,5.737,1716,6.348,1803,10.438,1875,6.684,3263,6.991,3380,11.617,3640,13.529,3641,10.999,3950,10.218,4959,12.941]],["keywords/1028",[]],["title/1029",[1023,407.123]],["content/1029",[15,4.644,123,10.72,222,2.961,224,2.12,230,6.319,258,3.724,397,3.942,399,3.812,689,5.244,707,6.435,838,8.021,842,6.357,847,7.002,851,6.837,3262,8.13,3275,7.85,3279,10.509,3381,17.278,3641,12.802,3766,10.79,3950,12.923,4464,17.278,5209,18.66]],["keywords/1029",[]],["title/1030",[224,129.964,790,623.908,2100,545.038]],["content/1030",[]],["keywords/1030",[]],["title/1031",[2042,532.102]],["content/1031",[11,5.833,22,2.081,31,3.482,47,6.094,66,2.974,100,8.91,113,3.171,168,4.899,186,4.192,192,6.681,221,6.764,222,2.138,224,2.432,228,3.741,241,5.597,263,4.136,277,3.934,281,3.106,335,3.036,340,2.999,343,5.003,352,3.89,357,6.315,397,2.846,427,4.887,430,7.588,485,5.869,526,6.075,542,7.237,557,5.923,575,3.232,626,6.25,627,3.428,647,5.021,689,5.244,771,5.791,847,5.055,874,9.18,875,3.759,1050,5.644,1078,12.715,1189,5.358,1267,5.716,1709,7.237,2100,10.199,2462,8.461,3848,8.673,4084,9.671,5210,13.472,5211,13.472,5212,12.474,5213,13.472,5214,13.472,5215,13.472,5216,13.472,5217,12.474]],["keywords/1031",[]],["title/1032",[864,626.718]],["content/1032",[11,4.974,15,6.274,22,0.809,30,4.174,66,4.861,87,3.455,113,3.073,127,2.03,168,3.254,172,3.1,173,3.121,185,4.558,186,2.588,192,4.125,205,3.899,222,2.897,224,0.945,226,4.961,279,5.301,335,4.961,374,5.965,445,2.547,458,5.767,518,3.234,526,2.36,542,10.656,575,5.051,598,5.224,627,3.322,632,3.726,642,4.403,643,5.354,678,8.015,712,10.034,731,3.441,790,4.536,808,3.544,871,4.202,872,4.9,874,8.896,902,10.929,964,4.256,1043,4.854,1078,5.667,1126,5.541,1142,2.904,1189,9.541,1196,4.766,1539,6.091,1704,6.992,1820,5.76,1916,4.284,2100,6.22,2134,10.976,2136,6.992,2138,10.976,2139,6.376,2140,12.69,2141,9.772,2143,19.71,2144,6.992,2145,16.677,2147,10.976,2148,6.992,2149,6.992,2150,10.976,2151,6.992,2152,6.992,2153,6.992,2154,6.75,2155,6.091,2156,6.992,2157,6.992,2601,7.701,4574,4.435,5218,7.701,5219,8.317]],["keywords/1032",[]],["title/1033",[16,250.43]],["content/1033",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,790,9.937,875,5.084,1023,4.28,2100,8.681]],["keywords/1033",[]],["title/1034",[258,275.056,282,262.141]],["content/1034",[2,1.853,11,4.851,18,5.291,19,2.904,20,4.191,22,2.007,30,5.692,31,3.256,66,2.781,108,6.21,113,4.191,168,2.543,173,4.727,192,6.247,222,1.999,263,3.867,270,3.94,282,2.396,335,4.653,340,2.804,426,7.366,448,4.384,485,5.488,526,5.859,542,12.054,557,5.538,575,5.896,647,6.634,689,3.54,693,3.293,771,8.876,808,5.368,1050,5.277,1078,8.583,1126,7.098,1163,10.027,1368,8.331,1716,4.028,1875,4.241,2100,11.278,2121,7.82,2161,9.657,2162,9.918,2462,7.911,3539,10.59,5212,11.663,5220,12.596]],["keywords/1034",[]],["title/1035",[282,262.141,399,281.565]],["content/1035",[11,7.017,18,5.351,19,4.557,113,4.654,168,5.2,222,3.137,282,3.76,426,6.982,1716,6.321,1875,6.656,3533,12.274,4623,15.156]],["keywords/1035",[]],["title/1036",[41,683.579,1928,1009.408]],["content/1036",[2,1.166,3,1.81,4,5.973,16,2.364,22,1.089,31,2.895,41,12.4,43,4.296,69,3.125,97,4.994,115,4.174,168,2.262,175,6.108,192,5.555,195,1.535,216,4.712,218,6.877,219,5.067,222,3.373,224,1.272,226,2.524,251,4.882,255,6.363,266,5.336,277,3.45,282,2.13,288,5.808,291,3.074,297,4.732,298,5.695,343,4.16,353,6.877,372,3.457,386,5.522,404,3.816,445,3.43,448,3.899,449,7.757,490,4.565,536,10.402,537,8.041,542,10.384,544,5.732,545,12.972,575,2.687,594,4.994,597,6.419,660,5.251,689,3.148,712,6.156,741,6.108,790,6.108,860,6.062,901,5.396,960,7.516,1004,9.091,1113,5.589,1326,6.309,1348,6.419,1496,9.825,1548,9.825,1552,7.211,1581,8.587,1582,9.825,1590,10.98,1614,6.156,1650,8.384,1820,7.757,1832,6.108,1928,14.157,1955,8.82,2054,8.82,2060,8.384,2100,10.129,2609,10.372,5221,10.372,5222,11.201,5223,11.201,5224,11.201,5225,11.201,5226,8.203,5227,11.201]],["keywords/1036",[]],["title/1037",[16,199.154,1023,323.765]],["content/1037",[11,4.888,41,8.898,168,3.622,222,2.847,224,2.038,258,3.58,335,4.043,397,3.79,399,3.665,526,5.091,575,4.304,647,6.686,707,6.187,838,7.712,842,6.112,847,6.732,1126,6.168,1142,6.263,2100,8.547,2141,13.428,3050,15.736,3430,8.898,5217,16.611,5218,16.611,5228,17.94,5229,17.94,5230,17.94,5231,13.753,5232,17.94,5233,17.94]],["keywords/1037",[]],["title/1038",[172,426.353,1221,444.891,1758,806.162]],["content/1038",[]],["keywords/1038",[]],["title/1039",[272,585.453,370,512.565,616,291.743]],["content/1039",[22,1.608,61,7.474,127,4.036,172,10.103,174,9.394,224,1.879,272,8.463,283,6.205,335,3.726,370,7.409,445,5.064,489,7.793,490,5.973,597,9.477,616,4.217,647,7.978,790,9.018,792,6.814,864,5.98,1074,8.252,1105,9.939,1221,9.231,1299,10.043,2046,9.237,3156,13.422,3766,9.562,4696,13.903,5234,13.903,5235,13.903,5236,14.505]],["keywords/1039",[]],["title/1040",[2042,532.102]],["content/1040",[2,1.311,3,2.036,6,5.813,11,4.851,13,4.568,22,1.225,49,3.241,66,4.559,73,4.357,168,5.431,172,6.634,185,4.398,186,3.919,195,1.726,208,5.212,222,3.276,224,2.345,228,3.498,251,6.16,254,6.285,291,3.457,316,4.935,321,6.034,335,4.653,340,2.804,343,4.678,347,4.54,401,5.068,432,7.976,448,6.196,516,7.036,556,5.488,575,3.022,731,7.366,752,4.935,764,9.042,790,11.26,902,5.538,1008,6.102,1221,6.923,1344,7.65,1702,11.052,1748,6.21,2080,8.217,2174,8.109,2563,10.179,2572,9.042,2573,8.008,5237,11.049,5238,11.049,5239,11.049,5240,11.049]],["keywords/1040",[]],["title/1041",[864,626.718]],["content/1041",[18,4.381,19,4.519,61,6.844,127,4.785,172,10.191,647,8.876,752,7.68,1221,7.623,1299,11.906,2046,10.949,3053,12.17,5234,16.481,5235,16.481,5241,19.604]],["keywords/1041",[]],["title/1042",[172,364.419,647,364.419,1221,380.264,1299,593.887]],["content/1042",[2,0.998,11,6.075,13,2.121,15,5.549,16,2.105,22,1.416,31,2.477,52,3.887,66,4.675,112,3.208,115,3.572,127,2.34,168,4.679,173,6.613,185,6.153,195,1.313,222,2.796,224,1.089,226,2.16,228,2.662,241,3.982,246,5.354,258,2.907,263,2.943,279,4.791,281,2.21,291,2.63,335,2.16,343,3.56,358,8.349,367,7.465,385,4.778,408,4.085,432,4.294,439,5.075,445,2.935,573,5.951,575,4.228,604,4.938,641,4.195,646,6.758,647,3.572,693,4.606,731,6.028,790,11.547,849,5.448,875,2.675,1008,4.644,1023,2.252,1110,5.268,1126,5.009,1142,3.347,1163,8.205,1189,8.421,1214,6.253,1215,4.358,1217,6.559,1220,6.527,1221,5.665,1222,5.149,1290,5.594,2422,5.885,2461,6.881,2518,14.227,2563,8.688,2571,7.547,4598,7.349,5242,6.754,5243,10.09,5244,8.876,5245,13.51,5246,8.059,5247,8.059,5248,8.059,5249,8.059,5250,8.059,5251,8.059]],["keywords/1042",[]],["title/1043",[172,426.353,335,257.805,1151,633.815]],["content/1043",[2,1.304,11,5.609,13,1.746,15,5.124,16,2.975,22,1.514,31,3.238,52,3.201,66,4.764,69,2.203,92,3.52,97,3.52,112,4.193,113,1.858,115,5.805,127,3.802,161,3.07,168,4.356,172,2.942,173,5.845,185,5.438,195,1.082,198,3.607,222,2.472,224,1.77,228,2.192,241,3.279,246,4.409,258,1.575,263,2.423,279,4.12,281,1.82,282,1.501,291,2.166,293,4.409,297,3.335,325,3.781,335,2.823,343,2.932,352,2.279,358,7.179,367,6.725,385,4.109,396,3.279,432,3.537,439,4.179,461,4.209,573,4.901,574,5.696,575,4.255,594,3.52,607,3.52,627,3.963,641,3.455,644,3.151,646,5.812,647,2.942,658,3.164,682,3.139,693,4.636,731,5.184,790,10.548,804,3.253,823,3.487,849,4.685,875,2.203,1008,3.824,1023,1.854,1126,4.307,1142,2.756,1163,7.056,1175,4.744,1189,8.581,1210,3.74,1215,5.696,1217,7.012,1220,7.945,1221,4.872,1222,4.24,1290,4.607,2020,3.439,2094,3.424,2422,4.846,2461,5.666,2466,4.794,2518,13.247,2563,7.679,2571,6.215,3289,4.794,3404,4.446,4597,4.846,5242,5.562,5243,8.677,5244,7.309,5245,11.942,5246,6.636,5247,6.636,5248,6.636,5249,6.636,5250,6.636,5251,6.636,5252,6.215]],["keywords/1043",[]],["title/1044",[16,250.43]],["content/1044",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,172,6.79,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1221,7.086]],["keywords/1044",[]],["title/1045",[282,329.633]],["content/1045",[13,3.509,18,5.199,19,3.656,20,3.572,22,1.044,30,5.071,52,4.353,65,4.881,67,5.115,73,3.714,108,5.293,109,6.265,110,5.033,112,3.593,113,4.904,168,4.697,173,4.029,222,1.703,230,3.636,258,2.142,282,3.016,293,5.996,295,8.281,335,5.423,340,2.39,399,2.193,401,8.942,426,7.204,432,7.106,440,6.145,448,3.737,469,3.96,505,5.458,551,4.353,575,5.332,622,5.567,647,4.001,654,5.567,689,4.457,771,8.108,808,4.575,846,5.172,895,3.219,976,4.615,1049,5.115,1126,6.484,1221,4.175,1624,8.338,1716,5.071,1875,5.339,2563,7.819,3124,6.665,3403,6.452,3404,6.047,3405,6.047,3406,7.003,3407,7.862,3410,7.1,3411,6.098,3412,10.346,3415,7.707,3416,7.204,3423,7.003,5003,8.036,5253,9.417,5254,8.453]],["keywords/1045",[]],["title/1046",[1023,407.123]],["content/1046",[49,4.285,89,4.635,112,5.574,168,3.363,222,3.779,224,1.892,254,10.731,258,3.324,277,3.511,284,5.008,335,4.846,397,3.518,399,4.393,575,3.996,578,8.947,622,8.637,689,4.681,707,5.744,842,5.674,847,6.25,849,6.228,1126,5.726,2389,12.769,3275,7.007,3405,9.381,3425,11.535,3428,11.176,3430,8.26,3432,7.979,5245,12.769,5254,13.114,5255,14.609,5256,14.609,5257,14.609]],["keywords/1046",[]],["title/1047",[2,101.77,3,158.044,13,216.341,448,340.348]],["content/1047",[1,3.864,2,1.784,3,3.903,7,4.826,13,5.63,15,4.268,16,1.727,18,2.671,19,2.755,22,1.162,49,3.074,102,9.28,106,4.349,113,2.813,115,4.453,162,7.094,168,4.424,172,6.39,222,3.182,224,1.357,226,2.693,241,4.964,251,3.565,254,5.962,258,2.385,261,4.438,265,10.007,270,3.738,335,2.693,347,4.307,359,8.621,363,8.832,369,6.282,385,3.919,404,4.071,409,9.28,423,6.909,427,4.335,432,7.682,440,4.63,448,4.159,464,2.994,465,3.964,485,5.206,493,6.372,516,6.674,522,7.596,533,5.459,598,7.505,602,6.115,1021,5.631,1038,7.596,1049,5.693,1113,5.962,1221,6.668,1437,9.698,1851,8.578,1916,6.155,1983,7.903,2257,8.944,2305,11.875,2545,8.276,5258,10.481,5259,10.481]],["keywords/1047",[]],["title/1048",[172,364.419,1221,380.264,1988,416.7,2046,546.176]],["content/1048",[]],["keywords/1048",[]],["title/1049",[272,585.453,370,512.565,616,291.743]],["content/1049",[22,1.955,172,9.015,174,11.425,224,2.285,335,4.532,370,9.011,445,6.158,489,9.478,597,11.525,616,5.129,790,10.968,1221,9.407,3156,16.323,3766,11.629]],["keywords/1049",[]],["title/1050",[2042,532.102]],["content/1050",[2,1.189,3,1.846,6,5.271,11,4.522,13,4.325,18,2.553,19,2.633,22,1.11,49,2.939,61,3.987,66,4.316,73,3.951,127,2.788,168,5.325,172,9.144,185,3.987,186,3.553,195,1.565,208,4.725,222,3.102,224,2.221,228,3.172,251,5.832,254,5.699,291,3.134,316,4.474,321,5.471,335,4.405,340,2.542,343,4.242,347,4.116,401,4.595,432,7.435,448,5.776,516,6.379,556,4.976,575,2.74,647,6.185,731,6.866,752,6.501,764,8.199,790,10.66,902,5.022,1008,5.533,1221,7.602,1299,6.936,1344,6.936,1702,10.303,1748,5.631,2046,6.379,2080,7.45,2174,7.353,2563,9.637,2572,8.199,2573,7.261,3053,7.091,5234,9.602,5235,9.602,5236,10.018,5237,10.018,5238,10.018,5239,10.018,5240,10.018]],["keywords/1050",[]],["title/1051",[864,626.718]],["content/1051",[2,1.26,11,5.504,13,1.673,15,5.027,16,2.736,22,1.177,31,3.128,52,3.066,66,4.683,69,4.224,92,3.371,97,3.371,112,4.051,115,6.449,127,2.954,161,2.94,168,4.283,172,2.817,173,5.68,185,5.285,195,1.036,222,2.402,224,1.72,226,1.704,228,2.099,241,3.141,246,4.223,258,2.416,263,2.321,279,3.981,281,1.743,282,1.438,289,5.558,291,2.075,297,3.194,325,3.622,335,4.266,340,1.683,343,2.808,352,2.183,358,6.937,367,6.562,385,3.97,396,3.141,432,3.387,439,4.003,461,4.032,556,5.274,573,4.694,574,5.503,575,4.152,594,5.397,627,3.852,641,3.309,646,8.028,651,3.054,658,3.03,693,4.523,731,5.008,790,10.325,804,3.115,808,3.222,823,3.339,849,4.526,875,2.109,1008,3.663,1023,1.776,1126,4.162,1142,2.64,1163,6.817,1189,8.033,1210,3.582,1215,5.503,1217,6.815,1220,7.753,1221,2.94,1222,4.061,1290,7.064,1988,3.222,2020,3.294,2046,4.223,2094,3.279,2132,3.947,2422,4.641,2466,4.592,2518,13.022,2563,7.463,2571,5.953,3289,4.592,3668,8.383,3669,5.073,3670,5.236,4597,4.641,4664,5.152,4726,6.136,4995,6.356,5242,5.327,5243,8.383,5245,11.605,5246,6.356,5247,6.356,5248,6.356,5249,6.356,5250,6.356,5251,6.356,5260,7.56]],["keywords/1051",[]],["title/1052",[16,250.43]],["content/1052",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,172,6.79,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1221,7.086]],["keywords/1052",[]],["title/1053",[282,329.633]],["content/1053",[13,3.509,18,5.199,19,3.656,20,3.572,22,1.044,30,5.071,52,4.353,65,4.881,67,5.115,73,3.714,108,5.293,109,6.265,110,5.033,112,3.593,113,4.904,168,4.697,173,4.029,222,1.703,230,3.636,258,2.142,282,3.016,293,5.996,295,8.281,335,5.423,340,2.39,399,2.193,401,8.942,426,7.204,432,7.106,440,6.145,448,3.737,469,3.96,505,5.458,551,4.353,575,5.332,622,5.567,647,4.001,654,5.567,689,4.457,771,8.108,808,4.575,846,5.172,895,3.219,976,4.615,1049,5.115,1126,6.484,1221,4.175,1624,8.338,1716,5.071,1875,5.339,2563,7.819,3124,6.665,3403,6.452,3404,6.047,3405,6.047,3406,7.003,3407,7.862,3410,7.1,3411,6.098,3412,10.346,3415,7.707,3416,7.204,3423,7.003,5003,8.036,5253,9.417,5254,8.453]],["keywords/1053",[]],["title/1054",[1023,407.123]],["content/1054",[49,4.285,89,4.635,112,5.574,168,3.363,222,3.779,224,1.892,254,10.731,258,3.324,277,3.511,284,5.008,335,4.846,397,3.518,399,4.393,575,3.996,578,8.947,622,8.637,689,4.681,707,5.744,842,5.674,847,6.25,849,6.228,1126,5.726,2389,12.769,3275,7.007,3405,9.381,3425,11.535,3428,11.176,3430,8.26,3432,7.979,5245,12.769,5254,13.114,5255,14.609,5256,14.609,5257,14.609]],["keywords/1054",[]],["title/1055",[2,101.77,3,158.044,13,216.341,448,340.348]],["content/1055",[1,3.864,2,1.784,3,3.903,7,4.826,13,5.63,15,4.268,16,1.727,18,2.671,19,2.755,22,1.162,49,3.074,102,9.28,106,4.349,113,2.813,115,4.453,162,7.094,168,4.424,172,6.39,222,3.182,224,1.357,226,2.693,241,4.964,251,3.565,254,5.962,258,2.385,261,4.438,265,10.007,270,3.738,335,2.693,347,4.307,359,8.621,363,8.832,369,6.282,385,3.919,404,4.071,409,9.28,423,6.909,427,4.335,432,7.682,440,4.63,448,4.159,464,2.994,465,3.964,485,5.206,493,6.372,516,6.674,522,7.596,533,5.459,598,7.505,602,6.115,1021,5.631,1038,7.596,1049,5.693,1113,5.962,1221,6.668,1437,9.698,1851,8.578,1916,6.155,1983,7.903,2257,8.944,2305,11.875,2545,8.276,5258,10.481,5259,10.481]],["keywords/1055",[]],["title/1056",[61,298.102,172,496.644,1150,297.179,1221,332.032]],["content/1056",[]],["keywords/1056",[]],["title/1057",[272,585.453,370,512.565,616,291.743]],["content/1057",[22,1.955,172,9.015,174,11.425,224,2.285,335,4.532,370,9.011,445,6.158,489,9.478,597,11.525,616,5.129,790,10.968,1221,9.407,3156,16.323,3766,11.629]],["keywords/1057",[]],["title/1058",[2042,532.102]],["content/1058",[2,1.311,3,2.036,6,5.813,11,4.851,13,4.568,22,1.225,49,3.241,66,4.559,73,4.357,168,5.431,172,6.634,185,4.398,186,3.919,195,1.726,208,5.212,222,3.276,224,2.345,228,3.498,251,6.16,254,6.285,291,3.457,316,4.935,321,6.034,335,4.653,340,2.804,343,4.678,347,4.54,401,5.068,432,7.976,448,6.196,516,7.036,556,5.488,575,3.022,731,7.366,752,4.935,764,9.042,790,11.26,902,5.538,1008,6.102,1221,6.923,1344,7.65,1702,11.052,1748,6.21,2080,8.217,2174,8.109,2563,10.179,2572,9.042,2573,8.008,5237,11.049,5238,11.049,5239,11.049,5240,11.049]],["keywords/1058",[]],["title/1059",[864,626.718]],["content/1059",[2,1.3,11,5.601,13,1.74,15,5.116,16,2.79,22,1.511,31,3.229,52,3.19,61,2.747,66,4.538,92,3.508,97,3.508,112,5.924,115,5.792,127,3.05,161,3.059,168,4.351,172,2.932,173,5.832,185,5.426,195,1.078,198,3.594,222,2.466,224,1.766,228,2.185,241,3.268,246,4.394,258,1.57,263,2.415,279,4.109,281,1.814,282,1.496,291,2.159,293,4.394,297,3.324,325,3.769,335,3.502,343,2.922,352,2.271,358,7.16,367,7.322,385,5.097,396,3.268,432,3.525,439,4.165,461,4.195,573,4.884,574,5.68,575,4.247,594,3.508,626,3.65,627,3.179,641,3.443,646,5.796,647,2.932,651,5.047,658,3.153,682,3.129,693,4.627,731,5.17,790,10.531,804,3.242,823,3.475,849,4.672,875,2.195,1008,3.811,1023,1.848,1126,4.296,1163,7.037,1189,8.175,1210,3.728,1215,8.779,1217,6.997,1220,7.93,1221,3.059,1222,4.226,2020,3.427,2094,3.412,2132,4.107,2422,4.83,2466,4.778,2518,13.229,2563,7.662,2571,6.194,3289,4.778,3404,4.431,4597,4.83,5242,8.804,5243,8.653,5245,11.915,5246,6.614,5247,6.614,5248,6.614,5249,6.614,5250,6.614,5251,6.614,5252,6.194,5261,7.867,5262,6.901]],["keywords/1059",[]],["title/1060",[16,250.43]],["content/1060",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,172,6.79,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1221,7.086]],["keywords/1060",[]],["title/1061",[282,329.633]],["content/1061",[13,3.509,18,5.199,19,3.656,20,3.572,22,1.044,30,5.071,52,4.353,65,4.881,67,5.115,73,3.714,108,5.293,109,6.265,110,5.033,112,3.593,113,4.904,168,4.697,173,4.029,222,1.703,230,3.636,258,2.142,282,3.016,293,5.996,295,8.281,335,5.423,340,2.39,399,2.193,401,8.942,426,7.204,432,7.106,440,6.145,448,3.737,469,3.96,505,5.458,551,4.353,575,5.332,622,5.567,647,4.001,654,5.567,689,4.457,771,8.108,808,4.575,846,5.172,895,3.219,976,4.615,1049,5.115,1126,6.484,1221,4.175,1624,8.338,1716,5.071,1875,5.339,2563,7.819,3124,6.665,3403,6.452,3404,6.047,3405,6.047,3406,7.003,3407,7.862,3410,7.1,3411,6.098,3412,10.346,3415,7.707,3416,7.204,3423,7.003,5003,8.036,5253,9.417,5254,8.453]],["keywords/1061",[]],["title/1062",[1023,407.123]],["content/1062",[49,4.285,89,4.635,112,5.574,168,3.363,222,3.779,224,1.892,254,10.731,258,3.324,277,3.511,284,5.008,335,4.846,397,3.518,399,4.393,575,3.996,578,8.947,622,8.637,689,4.681,707,5.744,842,5.674,847,6.25,849,6.228,1126,5.726,2389,12.769,3275,7.007,3405,9.381,3425,11.535,3428,11.176,3430,8.26,3432,7.979,5245,12.769,5254,13.114,5255,14.609,5256,14.609,5257,14.609]],["keywords/1062",[]],["title/1063",[2,101.77,3,158.044,13,216.341,448,340.348]],["content/1063",[1,3.864,2,1.784,3,3.903,7,4.826,13,5.63,15,4.268,16,1.727,18,2.671,19,2.755,22,1.162,49,3.074,102,9.28,106,4.349,113,2.813,115,4.453,162,7.094,168,4.424,172,6.39,222,3.182,224,1.357,226,2.693,241,4.964,251,3.565,254,5.962,258,2.385,261,4.438,265,10.007,270,3.738,335,2.693,347,4.307,359,8.621,363,8.832,369,6.282,385,3.919,404,4.071,409,9.28,423,6.909,427,4.335,432,7.682,440,4.63,448,4.159,464,2.994,465,3.964,485,5.206,493,6.372,516,6.674,522,7.596,533,5.459,598,7.505,602,6.115,1021,5.631,1038,7.596,1049,5.693,1113,5.962,1221,6.668,1437,9.698,1851,8.578,1916,6.155,1983,7.903,2257,8.944,2305,11.875,2545,8.276,5258,10.481,5259,10.481]],["keywords/1063",[]],["title/1064",[5263,1208.976,5264,1276.224]],["content/1064",[]],["keywords/1064",[]],["title/1065",[195,156.745,397,241.681,616,291.743]],["content/1065",[2,2.075,3,3.223,7,8.054,8,7.21,31,5.153,49,5.13,75,11.637,127,4.867,195,2.732,397,5.084,399,4.073,469,7.355,616,5.085,5265,19.94,5266,19.94,5267,19.94]],["keywords/1065",[]],["title/1066",[2042,532.102]],["content/1066",[2,2.249,16,3.122,145,10.076,340,4.809,352,6.238,355,5.559,1230,11.204,3384,17.013]],["keywords/1066",[]],["title/1067",[864,626.718]],["content/1067",[2,1.394,14,4.648,16,1.935,18,4.154,22,2.075,66,4.712,69,3.737,75,7.817,127,3.269,161,5.209,224,1.522,226,3.018,297,5.659,321,6.416,323,8.316,340,2.981,347,4.828,352,5.366,354,4.586,355,6.741,396,5.565,445,4.101,575,3.214,599,8.025,627,4.729,679,6.214,895,6.4,896,6.926,897,5.061,906,6.001,1026,7.091,1042,5.389,1105,8.05,1126,4.605,1142,4.676,1143,6.725,1230,11.067,1443,5.944,1755,8.737,1974,6.603,2055,8.05,2094,5.809,3206,11.749,3384,18.15,3484,9.389,5268,13.394,5269,13.394,5270,13.394,5271,13.394]],["keywords/1067",[]],["title/1068",[546,544.018,2215,812.067]],["content/1068",[22,1.939,224,2.265,509,11.748,550,11.281,652,6.634,829,10.834,860,10.791,1068,15.7,1643,9.448,1974,9.83,2412,17.49,3384,15.7,4209,16.763,5272,19.94,5273,16.763]],["keywords/1068",[]],["title/1069",[16,250.43]],["content/1069",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3384,14.46]],["keywords/1069",[]],["title/1070",[282,329.633]],["content/1070",[2,1.128,3,1.751,14,7.261,18,5.536,19,3.681,20,3.605,22,1.053,36,4.168,43,2.845,86,4.976,123,5.027,168,2.188,195,2.598,219,4.902,222,1.719,258,2.162,282,3.98,283,4.066,329,4.214,330,3.659,347,3.905,352,3.128,354,2.674,355,5.384,397,2.289,399,2.214,409,5.864,426,6.806,427,3.931,428,7.019,437,5.545,513,4.598,556,6.957,568,7.242,627,4.825,689,3.045,693,2.832,714,4.229,846,5.22,851,3.97,875,3.023,895,3.249,896,5.951,908,5.737,1133,5.737,1142,5.575,1230,9.834,1535,4.214,1621,6.581,1708,5.28,1716,5.106,1803,5.697,1875,5.376,2094,9.076,3262,4.721,3263,5.134,3384,16.476,3471,5.28,3481,6.888,3485,8.307,3486,8.307,3641,6.003,3766,6.266,4376,8.532,4985,10.033,5263,16.634,5264,10.033,5274,10.836]],["keywords/1070",[]],["title/1071",[1023,407.123]],["content/1071",[1,3.922,15,4.332,86,7.991,123,8.073,222,2.761,224,1.977,258,3.473,347,6.273,397,3.676,399,3.555,400,7.384,689,4.891,707,6.002,838,7.481,842,5.929,847,6.53,851,6.377,895,5.219,908,6.252,1023,4.088,1133,6.252,1142,7.723,3262,7.582,3273,10.931,3275,7.321,3385,16.114,3496,11.51,3500,10.684,3640,11.859,3641,9.641,3923,16.114,5263,15.265,5275,17.403]],["keywords/1071",[]],["title/1072",[3382,1328.705]],["content/1072",[]],["keywords/1072",[]],["title/1073",[195,156.745,397,241.681,616,291.743]],["content/1073",[2,1.853,3,2.877,7,7.191,8,8.114,31,4.601,49,4.581,127,4.345,195,2.439,397,4.74,399,3.637,452,10.489,469,6.567,537,16.108,616,4.54,642,11.881,652,5.923,3382,13.648,5276,17.803,5277,17.803,5278,17.803,5279,17.803,5280,17.803,5281,17.803,5282,17.803,5283,17.803,5284,17.803,5285,17.803]],["keywords/1073",[]],["title/1074",[2042,532.102]],["content/1074",[13,4.825,14,7.567,526,6.189,652,7.256,3382,19.456,5286,21.809]],["keywords/1074",[]],["title/1075",[16,250.43]],["content/1075",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3382,14.079]],["keywords/1075",[]],["title/1076",[282,329.633]],["content/1076",[3,1.921,13,3.779,14,5.928,18,5.175,19,3.938,22,1.156,30,3.801,43,3.122,52,4.821,123,5.515,195,2.74,222,1.886,224,1.35,226,3.85,237,5.156,258,2.372,282,3.249,291,3.262,330,6.752,397,2.511,399,2.429,422,3.659,423,6.874,426,6.752,427,4.313,428,7.401,464,2.978,526,4.848,568,6.524,644,6.82,652,3.955,660,9.374,682,4.728,689,3.341,693,3.107,714,4.64,721,5.861,851,4.356,872,7.004,908,4.271,960,7.977,1046,14.985,1142,4.151,1363,6.874,1471,8.233,1535,4.623,1716,5.462,1803,6.25,1875,5.751,1974,8.422,2455,11.464,2545,8.233,3262,5.179,3263,5.633,3382,15.33,3500,7.298,3641,6.586,3766,6.874,3969,8.898,4357,9.994,5287,11.888,5288,11.888,5289,11.888,5290,11.888,5291,11.888]],["keywords/1076",[]],["title/1077",[330,288.299,428,316.034,721,420.939,810,384.386,3969,639.083]],["content/1077",[22,1.231,42,6.001,43,4.693,66,2.796,68,6.101,69,3.534,136,6.899,155,4.999,195,3.466,222,3.764,224,2.695,226,4.027,251,5.332,270,5.59,290,7.682,296,4.98,330,8.01,357,5.937,366,8.153,386,6.244,414,8.499,428,7.665,455,6.658,526,3.594,568,4.837,643,8.153,652,4.214,698,6.568,704,4.999,721,11.089,810,5.702,901,6.101,915,8.261,930,9.53,1218,9.091,1455,7.612,1618,8.63,1796,7.692,1809,7.955,1853,11.727,2125,7.535,2986,9.709,3382,9.709,3969,15.5,5292,12.665,5293,11.727,5294,12.665,5295,22.494,5296,11.109]],["keywords/1077",[]],["title/1078",[1023,407.123]],["content/1078",[208,3.556,222,1.364,224,0.976,258,1.715,397,5.749,399,1.756,400,11.288,632,3.85,689,7.648,692,4.583,707,2.964,838,3.694,842,2.928,847,10.212,851,9.971,1516,5.606,1755,5.606,2125,5.113,2986,6.588,3262,3.744,3275,3.615,3277,4.651,3279,10.467,3383,7.957,3500,5.276,3642,7.538,3646,7.225,3691,6.169,3767,7.957,3944,6.767,5293,7.957,5297,8.594,5298,8.594,5299,8.594,5300,8.594,5301,8.594,5302,7.957,5303,8.594,5304,8.594,5305,8.594,5306,8.594,5307,8.594,5308,7.957,5309,8.594,5310,8.594,5311,8.594,5312,8.594,5313,8.594,5314,8.594,5315,8.594,5316,8.594,5317,8.594,5318,8.594,5319,8.594,5320,8.594,5321,8.594,5322,8.594,5323,8.594,5324,8.594,5325,8.594,5326,8.594,5327,8.594,5328,8.594,5329,8.594,5330,8.594,5331,8.594,5332,8.594]],["keywords/1078",[]],["title/1079",[3333,911.566,5333,1085.254]],["content/1079",[]],["keywords/1079",[]],["title/1080",[195,156.745,397,241.681,616,291.743]],["content/1080",[2,0.998,3,1.549,7,3.872,8,3.466,31,2.477,49,2.466,70,10.342,127,2.34,195,1.313,274,14.461,289,10.238,397,3.723,399,1.958,456,12.248,469,3.536,616,2.444,692,5.111,887,20.379,3113,17.184,3728,20.946,3729,20.076,3740,18.745,3966,15.441,5334,9.586,5335,24.459]],["keywords/1080",[]],["title/1081",[2042,532.102]],["content/1081",[2,2.093,22,1.955,345,8.723,352,5.807,354,4.962,355,5.175,515,10.292,526,5.708,599,8.684,692,10.725,816,13.402,1026,10.648,1696,13.496,2042,6.175,5336,20.112]],["keywords/1081",[]],["title/1082",[354,186.957,355,194.959,526,215.036,692,404.062,895,227.226,3484,382.815]],["content/1082",[2,1.896,22,2.415,25,5.171,89,3.927,196,7.06,297,7.698,327,11.73,340,4.056,352,6.574,354,4.496,355,4.688,386,8.983,526,7.048,692,9.717,1020,10.015,1126,6.264,1143,9.148,1696,12.227,3333,12.051,3484,9.206,3966,12.619,5333,17.928]],["keywords/1082",[]],["title/1083",[354,168.042,355,175.235,627,173.291,895,204.236,896,253.811,1026,360.583,4736,479.913]],["content/1083",[14,6.13,66,3.901,198,8.072,206,7.31,283,6.63,297,7.464,329,6.87,340,3.933,352,6.448,354,4.359,355,4.546,422,5.439,526,6.949,627,5.682,792,7.28,895,5.298,896,8.322,1026,9.354,1696,14.986,3740,14.853,4736,17.255,5333,17.584,5337,17.668]],["keywords/1083",[]],["title/1084",[16,250.43]],["content/1084",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,3333,12.051,5333,14.347]],["keywords/1084",[]],["title/1085",[282,329.633]],["content/1085",[2,0.966,3,1.5,14,4.931,18,4.664,19,3.982,20,3.087,22,1.679,30,2.967,36,3.569,86,4.261,97,4.138,139,4.261,168,1.874,195,3.016,206,3.839,219,4.198,222,1.472,226,3.892,258,1.852,274,7.472,282,3.682,329,3.609,330,5.832,347,5.123,352,2.679,354,2.29,355,2.388,369,4.878,394,4.157,397,1.96,399,1.896,400,3.937,422,4.375,426,6.893,427,5.156,428,8.749,437,4.749,520,5.521,526,4.033,546,3.663,568,7.97,626,4.305,627,3.616,659,6.227,682,3.691,689,3.994,692,4.948,693,2.426,704,3.663,714,5.547,720,9.271,810,4.178,851,3.4,875,2.589,895,6.602,896,5.297,908,6.954,1401,4.305,1535,3.609,1621,5.636,1716,4.544,1832,5.061,1875,4.785,1974,4.575,2214,10.638,3113,7.531,3262,6.192,3263,4.397,3471,4.521,3481,5.899,3482,6.227,3492,8.927,3493,8.824,3494,10.015,3740,11.949,3950,6.427,4376,7.307,4736,12.172,5333,7.307,5338,8.592,5339,9.28,5340,9.28,5341,9.28,5342,8.592]],["keywords/1085",[]],["title/1086",[1023,407.123]],["content/1086",[1,3.674,15,4.058,86,7.487,123,11.583,222,2.587,224,1.852,258,3.254,397,3.444,399,3.331,400,6.918,526,4.627,627,4.149,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,851,5.974,896,6.076,908,5.858,1023,3.83,1133,5.858,1142,7.406,1974,8.038,2125,9.701,3262,7.104,3273,10.241,3275,6.859,3334,14.302,3495,10.01,3744,12.838,3950,11.292,3966,11.292,3997,13.708,4736,11.489,5333,12.838,5338,15.098,5342,15.098,5343,16.305]],["keywords/1086",[]],["title/1087",[274,724.603,720,899.071]],["content/1087",[16,2.633,25,5.171,49,4.688,185,6.362,195,2.496,219,8.243,224,2.07,270,5.7,274,13.057,343,6.767,397,3.849,616,4.647,720,11.886,810,10.251,976,9.788,1267,7.731,1974,8.983,2214,18.589,3113,14.788,3728,15.983,3729,19.142]],["keywords/1087",[]],["title/1088",[5344,1244.143]],["content/1088",[]],["keywords/1088",[]],["title/1089",[2042,532.102]],["content/1089",[13,5.037,69,5.084,186,5.669,224,2.07,226,5.131,258,3.636,277,3.842,340,4.056,445,5.579,616,4.647,627,4.636,632,11.127,652,6.063,731,7.539,1142,6.362,1364,11.73,2255,13.638,5344,16.345,5345,18.221,5346,18.221,5347,22.77,5348,18.221]],["keywords/1089",[]],["title/1090",[864,626.718]],["content/1090",[127,5.274,224,2.454,226,4.869,277,4.555,445,6.616,752,8.465,875,6.029,5344,15.51]],["keywords/1090",[]],["title/1091",[226,257.805,445,350.312,5344,821.254]],["content/1091",[13,4.736,69,5.973,422,6.59,632,11.247,652,7.123,758,14.158,1142,7.474,5349,21.408]],["keywords/1091",[]],["title/1092",[2,78.859,224,86.077,226,170.748,279,249.209,445,232.017,5344,543.929]],["content/1092",[2,1.685,113,4.971,185,5.653,195,2.893,196,6.273,224,1.839,241,6.727,270,5.065,279,5.325,330,7.13,359,9.077,428,5.993,436,12.119,606,9.449,714,6.32,752,6.343,925,7.398,1050,6.783,1708,10.289,1765,9.834,2234,12.413,3250,14.202,3251,14.202,3252,14.992,3253,14.992,3255,14.992,3515,13.141,3798,14.992,4976,14.992,5344,11.623,5350,16.192,5351,21.116,5352,16.192,5353,16.192,5354,19.552,5355,16.192,5356,16.192]],["keywords/1092",[]],["title/1093",[16,250.43]],["content/1093",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,5344,13.183]],["keywords/1093",[]],["title/1094",[282,329.633]],["content/1094",[3,2.283,13,4.265,18,5.693,19,4.444,103,6.1,113,4.538,195,1.935,222,2.241,258,2.819,282,3.667,330,4.77,397,2.984,399,2.886,426,7.427,427,5.125,428,7.135,447,5.597,568,5.395,632,10.563,652,6.414,689,3.97,693,3.692,714,5.514,851,5.176,908,5.075,1142,6.731,1535,5.493,1716,6.164,1875,6.49,3262,6.155,3263,6.693,3492,8.873,3493,8.77,3494,9.954,5344,15.754,5354,20.32,5357,14.127,5358,14.127,5359,14.127]],["keywords/1094",[]],["title/1095",[1023,407.123]],["content/1095",[15,6.92,2282,18.039]],["keywords/1095",[]],["title/1096",[616,351.477,689,387.369]],["content/1096",[2,1.798,127,4.216,224,1.962,276,11.591,277,3.642,279,5.681,365,11.424,616,4.405,689,4.855,781,11.77,2559,11.77,4563,11.656,5308,15.995,5344,12.4,5360,17.274,5361,22.015,5362,17.274,5363,17.274,5364,17.274,5365,17.274,5366,17.274,5367,17.274,5368,17.274,5369,17.274,5370,17.274,5371,17.274,5372,17.274,5373,22.015,5374,17.274,5375,17.274,5376,17.274,5377,17.274]],["keywords/1096",[]],["title/1097",[1,192.405,15,212.515,224,96.995,326,508.015,5378,853.845]],["content/1097",[22,2.14,652,7.325,758,14.56,1795,12.971,1837,10.985,5344,15.804]],["keywords/1097",[]],["title/1098",[541,714.732,5379,1118.642]],["content/1098",[]],["keywords/1098",[]],["title/1099",[195,156.745,397,241.681,616,291.743]],["content/1099",[2,2.058,3,3.195,7,7.985,8,8.657,31,5.11,49,5.087,127,4.825,195,2.709,397,5.058,399,4.039,469,7.293,541,10.252,616,5.041,652,6.578,5379,16.045,5380,19.77]],["keywords/1099",[]],["title/1100",[16,250.43]],["content/1100",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,541,9.449,875,5.084,1023,4.28,5379,14.788]],["keywords/1100",[]],["title/1101",[282,329.633]],["content/1101",[3,2.546,13,3.485,14,7.196,18,5.722,19,4.781,222,2.5,258,3.144,282,3.944,397,3.328,399,3.218,426,7.466,447,6.241,541,8.169,689,4.427,693,4.118,714,6.148,851,5.772,896,7.729,908,5.659,1142,7.241,1535,6.126,1716,6.631,1875,6.982,1945,11.885,2094,10.056,3263,7.464,3500,9.671,3501,10.91,4418,13.244,5379,12.785]],["keywords/1101",[]],["title/1102",[1023,407.123]],["content/1102",[15,4.798,222,3.059,224,2.19,258,3.847,397,4.073,399,3.938,400,8.18,689,5.418,707,6.648,838,8.287,842,6.568,847,7.234,851,7.064,1133,6.926,3275,8.11,3484,9.74,3495,11.835,5379,15.647,5381,19.279,5382,19.279,5383,19.279]],["keywords/1102",[]],["title/1103",[3388,899.071,3389,1208.976]],["content/1103",[]],["keywords/1103",[]],["title/1104",[195,156.745,397,241.681,616,291.743]],["content/1104",[2,2.04,3,3.168,7,7.918,8,8.613,31,5.067,49,5.044,127,4.785,195,2.686,226,4.417,397,5.032,399,4.005,469,7.231,616,4.999,652,6.522,3388,12.787,5384,19.604,5385,19.604]],["keywords/1104",[]],["title/1105",[2042,532.102]],["content/1105",[1,4.273,4,10.113,13,4.196,66,4.187,115,7.067,186,5.9,195,2.598,241,7.879,279,7.677,397,4.006,526,6.624,627,6.714,731,7.846,896,7.067,921,8.116,1063,10.263,3388,12.37,5386,18.964]],["keywords/1105",[]],["title/1106",[16,250.43]],["content/1106",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,3388,11.886,3389,15.983]],["keywords/1106",[]],["title/1107",[282,329.633]],["content/1107",[3,2.463,18,5.435,19,4.677,195,2.779,222,2.418,258,3.041,282,3.858,330,5.145,397,3.219,399,3.113,422,4.69,426,7.091,427,5.528,428,8.441,526,4.324,568,7.748,616,3.886,652,5.07,689,4.282,693,3.983,714,5.947,851,5.583,908,5.474,1050,6.383,1535,5.925,1716,6.487,1875,6.83,2248,8.655,3263,7.22,3388,14.877,3492,9.57,3493,9.46,3951,11.681,4959,13.365,5387,17.957]],["keywords/1107",[]],["title/1108",[1023,407.123]],["content/1108",[222,2.891,224,2.07,258,3.636,397,3.849,399,3.722,526,5.171,689,5.121,707,6.284,838,7.833,842,6.208,847,6.837,851,6.677,1133,8.18,2125,10.841,3262,7.939,3273,14.301,3275,7.666,3277,9.861,3279,10.262,3388,11.886,3390,16.872,3456,13.969,3503,14.347,3752,15.983,5387,14.347,5388,14.788]],["keywords/1108",[]],["title/1109",[3386,1364.669]],["content/1109",[]],["keywords/1109",[]],["title/1110",[195,156.745,397,241.681,616,291.743]],["content/1110",[2,1.709,3,2.654,7,6.632,8,7.705,31,4.244,49,4.225,127,4.008,195,2.25,362,9.972,397,4.502,399,3.354,469,6.057,500,22.351,551,10.152,616,4.187,652,5.463,3386,12.929,5389,16.42,5390,16.42,5391,16.42,5392,16.42,5393,16.42,5394,16.42,5395,16.42,5396,16.42,5397,16.42,5398,16.42,5399,16.42,5400,16.42,5401,16.42,5402,16.42,5403,16.42]],["keywords/1110",[]],["title/1111",[2042,532.102]],["content/1111",[895,6.729,896,8.363,900,14.094,3386,17.669]],["keywords/1111",[]],["title/1112",[16,250.43]],["content/1112",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3386,14.46]],["keywords/1112",[]],["title/1113",[282,329.633]],["content/1113",[3,2.229,14,4.785,18,5.469,19,4.372,31,3.564,36,5.305,43,3.621,52,5.592,123,6.398,193,10.1,195,1.89,222,2.188,258,2.752,282,3.607,330,4.657,357,6.465,397,2.913,399,2.817,426,7.136,427,5.003,428,8.022,447,5.464,526,5.382,568,7.242,689,3.876,693,3.605,714,5.383,721,6.799,851,5.053,860,7.464,872,8.126,896,7.067,900,11.911,908,4.955,998,8.289,1535,5.363,1716,6.063,1803,7.25,1875,6.384,3262,6.009,3263,6.535,3386,17.065,3640,9.397,3641,7.641,3969,10.323,5154,12.097,5184,11.595,5404,13.792,5405,13.792]],["keywords/1113",[]],["title/1114",[1023,407.123]],["content/1114",[15,4.5,123,8.387,222,2.869,224,2.054,258,3.608,397,3.819,399,3.693,526,6.43,689,5.081,707,6.235,838,7.772,842,6.16,847,6.784,851,6.625,1796,10.98,3262,7.877,3275,7.606,3277,9.785,3279,10.183,3387,16.741,3641,10.016,3752,15.858,3766,10.454,3774,14.236,4358,15.2,5154,15.858,5184,15.2,5406,18.08]],["keywords/1114",[]],["title/1115",[145,642.725,2628,1118.642]],["content/1115",[]],["keywords/1115",[]],["title/1116",[145,533.493,229,479.274,2628,928.526]],["content/1116",[5407,20.27]],["keywords/1116",[]],["title/1117",[5407,1520.246]],["content/1117",[]],["keywords/1117",[]],["title/1118",[2042,532.102]],["content/1118",[2,1.639,3,3.032,11,4.292,16,2.276,18,2.378,22,2.016,43,2.793,66,4.142,69,5.234,127,3.845,158,7.79,162,4.401,185,3.714,195,3.033,220,4.513,224,1.208,226,3.55,228,2.954,230,3.603,241,4.419,277,4.372,279,8.103,281,3.631,287,4.553,289,4.885,296,4.183,340,2.368,356,6.043,359,8.064,392,6.681,422,3.275,526,4.47,533,7.197,564,7.035,627,2.707,661,5.592,693,5.421,766,6.531,823,4.699,896,7.729,1025,6.681,1050,4.456,1083,7.636,1126,5.416,1143,5.341,1221,4.137,1488,5.714,1593,7.248,1623,6.604,1768,9.027,1850,8.155,1905,11.1,1945,9.027,2064,11.308,2181,7.367,2229,7.138,2630,10.418,2639,9.85,2640,8.634,2684,9.331,3392,9.331,3672,9.85,5407,21.046,5408,10.638,5409,10.638,5410,10.638,5411,10.638,5412,10.638]],["keywords/1118",[]],["title/1119",[223,301.858,224,156.574]],["content/1119",[]],["keywords/1119",[]],["title/1120",[223,250.557,224,129.964,229,479.274]],["content/1120",[15,6.488,16,1.33,24,4.994,61,6.001,156,11.712,168,1.859,172,7.749,549,5.852,690,5.852,831,10.632,1118,6.891,1124,15.274,1150,7.238,1151,5.1,1221,7.497,1336,5.477,1824,3.841,1956,5.02,1988,8.215,1991,12.575,2041,3.993,2046,5.142,2100,4.386,2105,8.672,3169,6.891,3244,7.74,3281,6.742,3282,24.377,3283,8.075,3286,6.376,3287,7.74,3293,13.95,3299,8.524,3307,7.74,3308,6.742,3537,6.376,3546,8.524,5413,7.74,5414,9.206,5415,10.83,5416,14.126,5417,14.126,5418,7.058,5419,8.524,5420,6.891,5421,8.524,5422,6.742,5423,8.524,5424,8.524,5425,7.249,5426,9.206,5427,7.058,5428,9.206,5429,8.524,5430,8.524,5431,6.891,5432,8.524]],["keywords/1120",[]],["title/1121",[1988,587.339,3286,954.559]],["content/1121",[]],["keywords/1121",[]],["title/1122",[2042,532.102]],["content/1122",[13,4.693,22,2.062,79,4.401,89,3.514,130,7.34,224,1.852,228,4.528,244,7.487,270,5.1,281,4.89,340,3.629,352,4.708,397,3.444,448,5.675,575,5.089,627,5.397,644,6.51,675,13.485,731,6.746,1133,5.858,1142,5.693,1154,10.365,1267,6.918,1837,8.136,1988,9.039,2023,12.498,2027,10.717,2095,11.292,3286,11.292,5433,16.305,5434,16.305,5435,16.305,5436,16.305,5437,16.305]],["keywords/1122",[]],["title/1123",[3,222.763,18,308.056]],["content/1123",[3,4.199,7,7.331,13,5.485,16,1.871,19,2.985,22,1.259,31,3.346,64,6.006,69,3.613,79,6.692,89,2.79,110,8.508,113,3.048,168,2.614,185,4.52,219,5.857,223,5.238,231,5.169,246,7.231,263,5.572,268,6.764,277,2.73,377,6.625,389,6.855,411,6.855,418,10.194,447,5.13,465,7.535,540,8.793,550,6.069,553,9.123,681,6.76,764,9.294,849,4.842,929,9.288,976,7.802,1285,7.703,1313,13.323,1709,6.955,1839,9.926,3286,15.731,5438,12.947,5439,12.947,5440,11.988]],["keywords/1123",[]],["title/1124",[16,250.43]],["content/1124",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,223,4.022,224,2.964,227,5.905,228,5.1,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3286,12.719]],["keywords/1124",[]],["title/1125",[282,329.633]],["content/1125",[13,5.037,14,6.322,18,5.089,19,4.2,22,1.266,31,3.365,113,4.289,167,7.528,168,4.597,223,5.249,258,4.195,282,3.465,291,5.768,329,5.063,399,2.66,426,6.989,490,3.633,512,7.046,627,5.793,652,4.332,693,3.403,818,8.587,966,8.493,1014,7.601,1036,9.535,1142,6.362,1679,5.978,1716,5.826,1875,6.134,2020,5.672,2027,12.547,2122,10.363,3286,12.619,3511,11.42,3514,8.277,3531,11.42,3533,8.083,5441,7.671]],["keywords/1125",[]],["title/1126",[1023,407.123]],["content/1126",[13,3.969,168,3.622,223,3.929,224,2.038,258,3.58,277,3.782,397,3.79,399,3.665,627,5.737,707,6.187,842,6.112,1124,9.86,1142,6.263,2027,11.392,2122,8.844,2123,11.014,3287,15.082,3430,8.898,3432,8.594,3512,18.301,3513,13.428,3514,11.405,3515,14.56,3516,14.126,3517,14.126,3518,11.865,5442,16.611]],["keywords/1126",[]],["title/1127",[616,351.477,3388,899.071]],["content/1127",[]],["keywords/1127",[]],["title/1128",[195,156.745,397,241.681,616,291.743]],["content/1128",[2,1.771,3,2.751,7,6.875,8,7.886,31,4.399,49,4.379,127,4.154,195,2.332,397,4.607,399,3.477,469,6.279,526,4.83,616,4.34,652,5.663,1948,13.814,2470,11.103,3388,11.103,5443,17.021,5444,17.021,5445,17.021,5446,17.021,5447,17.021,5448,17.021,5449,17.021,5450,17.021,5451,17.021,5452,17.021,5453,17.021,5454,17.021,5455,17.021,5456,17.021,5457,17.021,5458,17.021,5459,17.021,5460,17.021]],["keywords/1128",[]],["title/1129",[2042,532.102]],["content/1129",[2,2.023,22,1.89,161,7.559,195,2.663,222,3.084,230,6.583,345,8.431,396,8.076,490,5.424,616,4.957,652,6.468,792,8.01,875,5.424,895,7.106,896,7.244,908,6.984,2042,5.968,3388,12.68,3471,9.472]],["keywords/1129",[]],["title/1130",[895,413.323,3471,671.584]],["content/1130",[1050,10.632,3388,14.226,5387,19.982,5388,17.701,5461,19.13]],["keywords/1130",[]],["title/1131",[652,380.65,895,343.078,896,426.353]],["content/1131",[69,5.335,112,6.399,281,4.408,367,7.25,422,5.886,556,8.33,652,6.362,896,9.458,1050,9.827,1837,9.54,3388,17.26,5387,15.055,5388,15.518,5461,16.771,5462,19.12,5463,19.12]],["keywords/1131",[]],["title/1132",[16,250.43]],["content/1132",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,616,4.647,875,5.084,1023,4.28,3388,11.886]],["keywords/1132",[]],["title/1133",[282,329.633]],["content/1133",[3,1.556,8,3.48,14,5.071,18,5.672,19,4.073,22,1.421,195,2.002,222,1.527,226,2.169,258,1.921,270,3.011,282,2.78,330,3.25,355,2.476,394,4.312,397,2.033,399,1.966,400,4.084,422,4.499,426,7.4,427,3.492,428,6.539,437,4.925,464,3.661,465,4.848,526,4.147,568,5.581,575,2.309,616,2.454,627,3.719,652,7.058,689,2.705,693,2.516,714,3.757,851,5.355,895,6.361,896,8.322,908,5.25,1050,4.032,1133,5.25,1142,5.102,1535,3.743,1716,4.673,1842,6.909,1859,8.163,1875,4.92,2094,8.556,2248,5.468,2811,11.861,3261,7.812,3262,4.193,3263,4.561,3388,12.868,3395,8.231,3471,8.608,3483,7.579,3484,10.717,3485,7.379,3486,7.379,3492,6.045,3493,5.976,3951,7.379,3972,8.912,4307,8.912,4376,7.579,5175,8.443,5387,15.533,5388,7.812,5461,8.443,5464,9.625,5465,9.625]],["keywords/1133",[]],["title/1134",[1023,407.123]],["content/1134",[43,1.767,160,3.154,222,1.068,224,0.764,258,1.343,289,3.09,397,5.673,399,1.375,400,10.672,575,1.614,689,7.547,707,2.321,838,2.893,842,2.293,847,10.077,851,9.84,1114,5.298,1133,3.957,1179,12.949,1859,3.758,2096,4.515,2125,4.004,2471,5.657,2607,4.044,3261,8.94,3262,2.932,3275,2.831,3277,3.642,3279,12.651,3280,5.461,3388,4.389,3391,6.231,3456,5.159,3463,6.231,3503,5.298,4445,6.231,5175,22.062,5387,5.298,5388,5.461,5466,6.729,5467,6.729,5468,6.729,5469,6.729,5470,6.729,5471,6.729,5472,6.729,5473,6.729,5474,6.729,5475,6.729,5476,23.005,5477,6.729,5478,6.729,5479,6.729,5480,6.729,5481,6.729,5482,6.729,5483,6.729,5484,6.729,5485,6.729,5486,6.729,5487,6.729,5488,6.729,5489,6.729,5490,6.729,5491,6.729,5492,6.729,5493,6.729,5494,6.729,5495,6.729,5496,6.729,5497,6.729,5498,6.729,5499,6.729,5500,6.729,5501,6.729,5502,6.729,5503,6.729,5504,6.729,5505,6.729,5506,6.729,5507,6.729,5508,6.729,5509,6.729,5510,6.729,5511,11.015,5512,6.729]],["keywords/1134",[]],["title/1135",[3281,1269.296]],["content/1135",[]],["keywords/1135",[]],["title/1136",[2042,532.102]],["content/1136",[1,3.599,22,1.553,61,5.575,66,5.153,69,4.456,92,9.331,127,3.898,168,4.225,220,6.776,223,3.497,224,2.377,335,4.715,340,3.555,347,5.756,352,4.611,447,6.327,516,8.919,575,3.831,616,4.072,646,7.408,693,4.174,771,6.865,779,12.709,829,7.189,1074,7.968,1133,5.737,1150,5.558,1214,10.417,1215,7.26,1217,7.189,1220,9.375,2020,6.957,2462,13.143,3281,15.325,3400,14.787,5513,15.969]],["keywords/1136",[]],["title/1137",[16,250.43]],["content/1137",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,3281,13.888]],["keywords/1137",[]],["title/1138",[282,329.633]],["content/1138",[8,2.986,11,5.982,13,2.872,16,1.876,18,4.419,19,2.993,20,4.32,22,0.803,30,2.64,61,2.883,65,3.754,66,4.015,112,7.024,113,3.056,155,3.259,168,4.834,172,4.838,220,3.504,221,4.146,223,3.983,224,1.822,226,2.926,258,3.629,262,3.566,281,1.904,282,2.469,291,4.402,295,4.312,307,2.78,335,4.947,352,2.384,367,3.131,389,6.874,397,1.745,399,2.652,404,2.813,417,4.651,426,6.981,448,4.519,461,6.923,512,4.469,518,3.211,556,3.598,575,4.363,616,2.106,647,4.838,658,3.31,693,4.193,759,6.502,818,3.892,842,4.423,849,4.855,870,8.469,875,2.304,993,4.469,1014,5.416,1023,1.94,1110,4.539,1126,5.515,1150,2.874,1210,3.913,1215,5.902,1217,7.222,1218,5.928,1220,10.48,1221,6.238,1222,4.436,1224,7.244,1230,6.732,1679,3.792,1709,6.974,1716,4.151,1875,4.371,2020,3.598,2469,6.502,2475,7.244,3402,7.647,3418,7.647,3419,7.647,3420,7.647,3421,7.647,3422,7.647,3553,6.331,3848,5.316,3850,5.542,4683,5.719,5441,4.866,5514,6.702,5515,6.702]],["keywords/1138",[]],["title/1139",[1023,407.123]],["content/1139",[2,2.13,13,4.528,112,5.167,136,5.96,139,7.089,168,3.117,223,3.381,224,1.754,258,3.081,277,3.255,335,3.479,397,3.262,399,3.154,415,8.294,575,3.704,707,5.324,842,5.26,929,7.901,1124,8.486,1126,5.308,1215,7.019,1222,8.294,1224,13.543,1226,12.531,1228,12.157,1230,10.613,1240,11.836,1241,13.535,1242,13.543,1243,13.543,1244,13.543,1245,13.543,1246,13.543,1247,13.543,1248,13.543,1249,13.543,1250,13.543,1251,13.543,1252,13.543,1253,13.543,1254,13.543,3283,13.543,3430,7.657,3432,7.396,5516,8.77,5517,15.439,5518,15.439]],["keywords/1139",[]],["title/1140",[382,745.942,2473,745.942]],["content/1140",[1,0.917,2,0.747,3,0.658,11,1.109,13,0.9,22,0.698,25,1.155,29,2.526,30,1.301,31,1.052,39,2.445,41,2.018,43,1.068,49,1.047,52,1.65,64,1.887,66,0.898,68,1.96,69,1.135,71,3.112,73,1.407,77,2.471,79,1.098,87,1.69,97,1.814,100,2.691,107,2.124,110,1.907,113,0.958,119,2.353,136,1.571,137,2.154,139,3.295,146,2.096,155,1.606,168,1.449,172,1.516,181,1.704,185,1.421,186,2.232,192,2.018,196,1.576,199,2.397,202,2.818,211,2.471,225,1.96,226,0.917,227,1.308,230,3.26,262,1.757,265,2.375,266,1.938,267,2.619,283,1.527,287,1.741,289,4.42,290,1.749,291,1.116,303,1.741,307,1.37,312,1.741,320,2.018,330,1.374,338,2.124,343,1.511,358,2.332,362,2.471,364,2.292,368,1.481,370,1.823,374,1.506,382,6.281,384,2.619,385,1.334,394,1.823,404,1.386,405,2.353,408,1.734,409,2.202,410,2.445,416,2.11,428,1.506,432,1.823,440,2.78,452,2.397,455,2.139,458,1.797,463,2.73,464,1.798,465,1.35,466,2.445,467,1.65,485,1.773,491,2.555,493,2.17,494,3.721,505,2.069,511,3.437,518,1.582,519,2.236,528,2.654,532,2.254,533,1.859,540,1.971,550,1.907,572,2.471,575,0.976,594,1.814,603,1.887,607,1.814,620,2.498,626,1.887,651,1.643,654,2.11,658,1.631,677,1.814,679,1.887,693,1.876,696,2.619,697,2.069,704,1.606,712,2.236,717,2.03,719,2.236,721,2.006,730,4.358,746,1.841,747,2.691,753,2.921,787,2.691,792,1.677,808,1.734,812,1.823,818,1.917,829,1.832,834,2.555,835,1.938,846,1.96,858,2.292,860,2.202,871,2.056,875,1.135,897,1.537,906,1.823,908,1.462,909,2.273,938,2.421,957,4.313,964,2.082,976,3.084,1007,2.124,1008,1.971,1022,2.254,1032,2.691,1043,2.375,1063,2.202,1141,2.587,1154,2.587,1158,2.691,1189,1.618,1194,3.204,1204,2.332,1237,2.11,1270,2.619,1273,2.498,1280,2.73,1281,2.691,1308,2.619,1310,2.772,1312,4.313,1315,2.555,1344,2.471,1348,2.332,1352,2.772,1355,2.421,1393,4.958,1399,2.772,1400,2.772,1401,1.887,1453,2.219,1488,2.186,1490,2.73,1559,2.654,1561,2.587,1565,2.587,1579,3.119,1594,2.273,1611,2.421,1633,2.421,1643,3.4,1679,1.868,1703,2.921,1708,1.982,1731,2.397,1762,2.471,1775,2.186,1794,2.555,1808,2.654,1832,2.219,1856,2.587,1857,2.619,1879,2.867,1974,2.006,1989,2.526,2041,3.112,2055,2.445,2078,2.186,2081,2.445,2086,2.375,2127,2.445,2131,2.619,2170,2.73,2194,2.921,2248,2.311,2264,2.867,2473,6.281,2510,4.041,2549,2.73,2550,2.772,2564,2.311,2846,2.498,2898,3.204,2968,2.691,3009,2.818,3064,2.471,3102,2.818,3395,2.292,3536,2.867,3574,2.921,3626,2.555,3788,2.691,3887,2.818,4153,2.818,4266,2.555,4541,4.507,4609,2.587,4636,2.619,4777,2.772,4903,2.98,5226,2.98,5243,4.969,5519,3.204,5520,3.204,5521,3.302,5522,3.302,5523,2.867,5524,2.772,5525,2.867,5526,3.302,5527,2.867,5528,3.045,5529,2.691,5530,3.302,5531,3.302,5532,2.867,5533,2.818,5534,3.045,5535,3.045,5536,2.818,5537,2.818,5538,3.045,5539,3.045,5540,2.867,5541,3.045,5542,3.302,5543,2.818,5544,4.619,5545,3.045,5546,3.302,5547,3.302,5548,2.98,5549,3.302,5550,2.818,5551,3.302,5552,3.045,5553,3.302,5554,3.119,5555,3.302,5556,2.867,5557,3.302,5558,2.818,5559,3.045,5560,3.045,5561,2.867,5562,3.045,5563,3.204,5564,3.302,5565,3.302,5566,2.772,5567,3.302,5568,2.98,5569,3.204,5570,3.302,5571,3.045,5572,3.204,5573,3.302,5574,2.818,5575,3.302,5576,3.302,5577,3.302,5578,2.867,5579,3.204,5580,3.045,5581,2.98,5582,3.302,5583,2.867,5584,3.302,5585,2.98,5586,3.045,5587,3.302,5588,3.302,5589,3.302,5590,3.302,5591,3.302,5592,3.302,5593,2.818,5594,3.302,5595,2.98,5596,3.302,5597,3.302,5598,3.045,5599,3.302,5600,3.302,5601,3.302,5602,3.045,5603,3.302,5604,3.302,5605,3.045,5606,3.302,5607,2.921,5608,3.302,5609,3.045,5610,2.98,5611,3.204,5612,4.969,5613,3.045,5614,3.045,5615,3.045,5616,2.772,5617,3.045,5618,3.302,5619,2.867,5620,3.045,5621,3.045,5622,2.921,5623,3.302,5624,5.824,5625,3.302,5626,3.045,5627,3.302,5628,3.045,5629,2.818,5630,3.302,5631,3.045,5632,3.045,5633,3.302,5634,3.302,5635,3.045,5636,3.045,5637,3.302,5638,3.302,5639,3.302,5640,3.045,5641,3.045,5642,3.302,5643,2.867,5644,4.969,5645,3.302,5646,2.98,5647,3.045,5648,3.045,5649,2.867,5650,2.867,5651,3.045,5652,3.045,5653,3.045,5654,2.818,5655,2.867,5656,3.045,5657,3.302,5658,2.867,5659,3.045,5660,3.302,5661,3.045,5662,3.302,5663,3.045,5664,3.302,5665,3.045,5666,3.045,5667,3.302,5668,3.204,5669,3.045,5670,3.045,5671,3.045,5672,3.045,5673,3.045,5674,3.045,5675,3.045,5676,3.045,5677,3.045,5678,3.045,5679,3.045,5680,3.045,5681,3.045,5682,3.045,5683,2.818,5684,3.302,5685,3.302,5686,3.045,5687,2.867,5688,3.045,5689,3.302,5690,3.045,5691,3.045,5692,3.204,5693,3.045,5694,2.691,5695,2.867,5696,3.045,5697,3.302,5698,3.045,5699,2.98,5700,3.045,5701,2.98,5702,3.045,5703,3.302,5704,3.119,5705,3.045,5706,3.045,5707,3.204,5708,3.045,5709,2.73,5710,3.045,5711,3.045,5712,2.98,5713,3.045]],["keywords/1140",[]],["title/1141",[24,253.302,831,473.743,1988,416.7,2105,600.333]],["content/1141",[]],["keywords/1141",[]],["title/1142",[2042,532.102]],["content/1142",[13,4.802,22,1.643,24,4.377,62,8.981,69,4.715,73,5.845,224,1.92,226,3.808,244,7.759,281,5.004,340,4.832,352,6.267,445,5.174,575,5.208,627,5.523,644,6.746,731,6.991,804,6.963,831,11.619,1074,8.431,1133,6.07,1142,5.899,1313,10.742,2023,9.956,2027,10.967,2095,11.703,5714,13.714,5715,15.646]],["keywords/1142",[]],["title/1143",[16,250.43]],["content/1143",[2,2.188,3,3.397,16,3.037,22,2.044,25,5.965,62,8.697,89,4.53,223,4.604,282,3.998,574,9.556,875,5.865]],["keywords/1143",[]],["title/1144",[282,329.633]],["content/1144",[13,4.328,14,5.008,18,4.707,19,3.327,20,5.819,22,1.7,24,5.067,30,3.027,31,4.52,33,5.691,41,4.696,48,7.259,52,7.932,62,8.713,67,4.511,73,6.767,103,6.232,105,6.019,110,6.766,120,6.466,130,7.874,155,3.737,167,5.475,195,1.977,223,4.284,258,3.904,282,2.745,329,3.682,399,1.934,409,5.124,426,7.371,440,3.669,464,2.372,469,3.493,490,2.642,505,4.814,519,5.204,527,4.91,550,4.439,627,4.977,632,4.242,652,3.15,693,2.475,831,6.992,835,6.876,862,6.934,925,4.326,966,6.176,976,4.07,1030,6.797,1036,6.934,1142,5.039,1708,4.613,1716,4.615,1731,8.504,1799,9.546,1800,7.753,1809,5.947,1875,4.859,2027,8.836,2106,10.361,2121,12.144,2122,8.623,3411,5.379,3514,6.019,3518,6.262,3901,7.685,5716,7.96,5717,7.087,5718,6.557,5719,7.96,5720,7.96,5721,7.96,5722,8.767,5723,8.767,5724,8.767]],["keywords/1144",[]],["title/1145",[1023,407.123]],["content/1145",[62,9.514,120,8.293,223,4.054,224,2.103,258,3.694,277,3.903,397,3.91,399,3.782,707,6.384,831,8.968,842,6.307,862,13.557,929,9.473,2122,9.126,2123,11.364,3432,8.868,3514,11.768,3518,12.243,5207,14.575,5516,10.515,5717,13.855,5725,13.855,5726,17.14,5727,15.563,5728,15.563]],["keywords/1145",[]],["title/1146",[24,357.029,113,324.447]],["content/1146",[1,3.526,3,2.529,16,2.983,24,5.986,42,7.414,52,6.345,62,6.474,72,13.126,113,4.86,120,7.01,130,7.044,181,6.555,223,4.522,226,3.526,237,6.786,258,3.123,270,4.895,330,5.283,399,4.721,401,8.307,414,10.5,464,5.173,527,8.114,605,7.714,660,7.335,704,6.176,915,10.207,1363,9.048,4541,9.828,5190,12.32,5537,10.837,5729,13.155,5730,13.155,5731,13.155,5732,14.488,5733,14.488,5734,14.488,5735,13.155,5736,13.155]],["keywords/1146",[]],["title/1147",[974,789.838,2476,971.224]],["content/1147",[2,1.697,3,2.635,24,6.468,113,3.838,152,13.513,161,6.341,195,2.906,217,8.513,220,6.918,223,4.646,237,10.226,262,10.18,296,6.412,321,7.811,330,5.505,348,8.695,349,9.516,495,6.015,627,4.149,739,13.323,964,8.344,980,12.5,1121,7.768,1443,7.236,2269,12.838,2476,11.489,2570,12.204,4687,12.5,5737,13.708,5738,13.708]],["keywords/1147",[]],["title/1148",[1988,587.339,3537,954.559]],["content/1148",[]],["keywords/1148",[]],["title/1149",[2042,532.102]],["content/1149",[1,2.934,11,3.547,13,4.031,16,2.633,22,1.771,24,3.372,62,8.697,66,4.023,69,5.084,73,4.504,89,2.806,163,4.332,168,3.679,186,4.051,220,5.524,224,2.07,226,2.934,244,5.978,281,4.846,335,2.934,340,4.056,347,4.692,352,5.261,445,3.987,546,5.139,575,5.043,616,3.32,627,5.348,644,5.198,693,3.403,731,5.387,767,9.937,771,5.597,804,5.365,829,5.861,831,10.184,864,4.708,1074,6.496,1078,8.871,1133,4.677,1142,4.546,1217,5.861,1220,5.833,1313,8.277,1794,8.177,1964,9.174,2023,7.671,2027,6.578,2095,9.017,2122,6.419,3537,14.558,3790,11.42,4631,10.251,5714,10.567,5739,13.02,5740,12.055,5741,12.055]],["keywords/1149",[]],["title/1150",[16,250.43]],["content/1150",[2,2.111,3,3.279,16,2.931,22,1.972,25,5.757,47,9.178,89,4.372,168,4.096,223,4.443,282,3.858,335,4.572,574,9.223,875,5.661,1988,8.645,3537,14.05]],["keywords/1150",[]],["title/1151",[282,329.633]],["content/1151",[3,1.384,11,5.806,13,4.103,14,4.634,16,1.237,18,5.146,19,3.079,20,2.849,22,1.298,30,2.738,31,3.452,62,9.208,65,3.892,73,4.62,103,3.697,112,2.866,113,3.865,120,3.836,130,3.855,155,3.379,168,4.302,186,4.155,195,2.25,220,3.633,221,4.299,223,3.596,258,1.709,270,2.678,282,2.54,291,4.506,335,5.553,353,5.256,389,7.071,397,1.809,399,2.728,426,7.301,448,2.98,490,2.389,512,4.634,521,7.928,539,6.033,546,3.379,556,3.73,575,4.825,627,4.719,647,3.191,685,5.746,693,3.491,767,7.283,818,6.294,831,10.323,834,5.378,993,4.634,1014,5.572,1078,13.704,1126,5.645,1142,4.663,1210,4.057,1661,6.949,1679,3.932,1709,4.599,1716,4.27,1875,4.496,1943,4.907,2020,3.73,2027,6.747,2122,9.144,2123,5.256,3403,5.146,3514,5.443,3518,5.663,3533,5.316,3537,5.93,3553,6.564,3848,5.512,5441,5.045,5742,8.562,5743,8.562,5744,7.198]],["keywords/1151",[]],["title/1152",[1023,407.123]],["content/1152",[62,9.152,112,5.824,168,3.514,223,3.811,224,1.977,258,3.473,277,3.669,335,3.922,397,3.676,399,3.555,575,5.307,707,6.002,842,5.929,929,8.906,1126,7.605,1628,11.204,2122,8.58,2123,13.58,3430,8.631,3432,8.337,3514,11.063,3518,11.51,5516,9.886,5725,13.026,5745,17.403,5746,17.403,5747,17.403,5748,17.403,5749,17.403,5750,17.403]],["keywords/1152",[]],["title/1153",[714,537.961,2607,828.392]],["content/1153",[16,3.627,186,6.661,224,2.432,616,5.459,660,10.035,714,8.356,2607,12.867,5718,14.826]],["keywords/1153",[]],["title/1154",[864,626.718]],["content/1154",[2,1.363,9,8.429,16,3.298,22,2.335,30,4.186,62,5.417,92,5.838,112,4.382,115,6.817,162,7.568,181,9.562,224,1.487,228,3.636,258,2.613,279,4.306,281,3.018,303,5.604,335,2.95,367,4.965,461,9.755,594,5.838,627,4.654,646,8.486,658,5.247,693,6.503,698,6.789,767,11.498,804,5.395,823,5.783,831,6.343,849,6.841,917,10.037,1023,3.075,1074,6.533,1078,8.921,1215,5.952,1217,10.276,1220,10.226,1221,5.091,1222,7.033,1910,7.253,2020,5.704,2027,6.615,2463,11.007,2494,15.379,3663,8.038,5751,13.093,5752,13.093]],["keywords/1154",[]],["title/1155",[113,324.447,612,1118.642]],["content/1155",[1,3.346,2,1.545,3,3.638,18,3.319,113,5.909,168,4.026,221,7.455,223,4.367,224,1.687,251,4.43,277,3.13,324,7.277,340,3.305,360,8.933,363,7.648,367,5.63,368,5.404,385,4.869,399,3.033,404,6.793,440,5.753,447,5.883,465,7.468,467,8.085,485,9.808,493,7.918,504,7.455,613,10.874,767,8.097,1310,10.117,1681,17.49,1684,11.748,1709,7.976,2510,8.363,3537,10.283,5533,13.809,5753,12.051,5754,14.848,5755,14.848]],["keywords/1155",[]],["title/1156",[546,544.018,2215,812.067]],["content/1156",[3,3.397,11,5.728,16,1.881,22,1.771,25,3.695,49,3.35,66,4.023,67,8.681,70,5.238,71,5.647,79,3.514,88,7.825,115,4.852,168,4.839,180,6.307,220,7.731,223,5.698,225,6.272,231,5.198,258,2.598,262,7.867,282,2.476,340,2.898,380,7.825,386,8.983,399,2.66,404,4.436,457,5.833,463,8.737,469,4.803,495,4.803,523,9.745,546,5.139,579,8.283,748,6.994,829,5.861,849,4.869,964,9.324,993,12.323,1443,5.778,1554,8.277,1923,8.382,1964,9.174,2054,10.251,3537,12.619,5756,17.672,5757,18.221,5758,13.02,5759,13.02]],["keywords/1156",[]],["title/1157",[33,687.605,110,536.304,998,687.605]],["content/1157",[3,3.575,22,1.692,33,10.46,66,3.842,67,8.291,79,6.564,110,8.158,195,3.031,223,5.326,231,6.948,265,10.157,268,6.486,343,6.463,353,10.684,394,7.797,465,7.338,492,12.493,503,10.931,632,7.797,979,20.482,1616,13.033,1748,8.58,2060,13.026,5440,16.114,5760,17.403]],["keywords/1157",[]],["title/1158",[291,378.221,1014,574.998]],["content/1158",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1158",[]],["title/1159",[156,581.805,168,172.392,831,413.654,1988,363.847,5413,717.825]],["content/1159",[]],["keywords/1159",[]],["title/1160",[2042,532.102]],["content/1160",[13,4.374,22,1.425,24,3.798,62,8.18,69,4.091,73,7.737,162,6.066,185,5.119,186,4.561,224,2.246,226,4.455,244,6.732,281,5.156,340,4.401,352,5.708,367,5.559,445,6.053,575,5.367,627,6.36,644,5.853,731,6.066,804,8.146,831,9.578,1074,9.865,1133,5.267,1142,5.119,1313,9.32,1916,7.552,2023,11.648,2027,12.095,2095,10.153,5714,11.899,5761,18.305,5762,14.661]],["keywords/1160",[]],["title/1161",[16,250.43]],["content/1161",[2,2.188,3,3.397,16,3.037,22,2.044,25,5.965,89,4.53,168,4.244,223,4.604,282,3.998,574,9.556,875,5.865]],["keywords/1161",[]],["title/1162",[282,329.633]],["content/1162",[3,1.719,13,4.588,14,5.466,16,1.537,18,5.182,19,3.631,20,3.539,22,1.034,24,4.081,30,5.037,41,5.276,44,6.848,62,7.762,73,3.68,103,4.593,113,2.504,130,8.445,155,4.199,168,4.47,195,1.457,224,1.208,258,2.123,282,2.996,291,5.691,335,2.397,389,8.34,397,2.247,399,3.218,426,7.466,458,4.699,512,5.757,513,6.684,616,2.713,622,12.023,627,5.899,681,5.554,685,7.138,704,4.199,831,5.154,1014,7.826,1142,5.5,1616,6.267,1709,5.714,1716,5.037,1832,5.801,1875,5.303,2020,4.635,2027,11.186,2106,11.308,2122,9.248,3152,7.636,3533,6.604,3690,9.331,3848,6.848,4767,9.85,4802,8.634,5441,6.267,5718,7.367,5763,10.638,5764,9.85,5765,8.634]],["keywords/1162",[]],["title/1163",[1023,407.123]],["content/1163",[62,9.329,168,3.622,223,3.929,224,2.038,258,3.58,277,3.782,397,3.79,399,3.665,458,7.924,622,11.693,707,6.187,831,8.691,842,6.112,929,9.181,2122,8.844,2123,11.014,3432,8.594,3688,15.736,3690,15.736,4802,14.56,5207,14.126,5441,10.57,5516,10.191,5725,13.428,5727,15.082,5728,15.082,5764,16.611,5766,17.94]],["keywords/1163",[]],["title/1164",[19,263.73,440,443.265,5413,961.816]],["content/1164",[2,2.142,3,3.618,19,5.655,20,4.168,43,5.405,52,7.191,66,2.766,152,6.78,156,8.537,165,9.605,167,7.244,168,2.53,195,2.43,223,2.744,369,9.323,426,7.911,427,8.899,428,7.62,433,11.601,440,9.153,465,7.838,551,7.191,572,7.609,608,7.312,616,3.195,631,7.454,704,4.945,996,12.497,1267,5.316,1561,7.965,1679,8.143,1936,9.865,2081,10.659,2501,10.989,5413,17.307,5767,12.529,5768,10.989,5769,10.168,5770,9.865]],["keywords/1164",[]],["title/1165",[168,278.284,2245,1208.976]],["content/1165",[22,1.744,24,4.647,168,4.553,173,6.732,195,2.458,223,3.929,224,2.038,227,5.768,316,7.028,329,6.976,367,6.803,368,8.976,539,12.642,546,8.9,571,12.878,616,4.575,804,7.392,1755,11.702,2027,9.064,2049,14.56,2245,21.631,5761,16.611,5771,17.94,5772,17.94]],["keywords/1165",[]],["title/1166",[570,911.566,1443,611.676]],["content/1166",[3,3.168,79,5.292,89,4.225,168,5.18,173,7.356,180,9.497,223,4.293,277,4.133,404,6.679,443,11.441,575,4.703,847,7.356,980,15.029,1121,11.347,1443,8.7,2215,11.55]],["keywords/1166",[]],["title/1167",[24,221.174,156,581.805,831,413.654,1988,363.847,5415,654.579]],["content/1167",[]],["keywords/1167",[]],["title/1168",[2042,532.102]],["content/1168",[13,4.802,22,1.643,24,4.377,62,8.981,69,4.715,73,5.845,224,1.92,226,3.808,244,7.759,281,5.004,340,4.832,352,6.267,445,5.174,575,5.208,627,5.523,644,6.746,731,6.991,804,6.963,831,11.619,1074,8.431,1133,6.07,1142,5.899,1313,10.742,2023,9.956,2027,10.967,2095,11.703,5714,13.714,5715,15.646]],["keywords/1168",[]],["title/1169",[16,250.43]],["content/1169",[2,2.188,3,3.397,16,3.037,22,2.044,25,5.965,62,8.697,89,4.53,223,4.604,282,3.998,574,9.556,875,5.865]],["keywords/1169",[]],["title/1170",[282,329.633]],["content/1170",[13,4.374,14,5.087,18,4.75,19,3.38,20,5.893,22,1.425,24,4.588,30,3.09,31,4.578,33,10.645,41,4.793,52,7.182,53,7.844,62,8.792,73,6.127,103,6.33,110,6.872,120,6.568,130,7.974,167,5.589,195,2.009,223,4.33,258,3.945,282,2.788,289,9.078,329,3.758,399,1.974,426,6.981,490,2.697,519,5.312,550,8.303,551,5.945,627,5.03,632,4.33,652,3.216,693,2.526,831,7.103,862,7.078,966,6.305,976,9.615,1030,10.524,1036,7.078,1142,5.118,1708,4.709,1716,4.688,1799,11.714,1809,6.07,1875,4.935,2027,8.948,2106,10.524,2121,12.273,2122,8.732,3514,6.144,3518,6.392,3901,7.844,5021,8.478,5716,8.126,5717,7.234,5718,6.694,5719,8.126,5720,8.126,5721,8.126,5773,8.949,5774,8.949,5775,8.949,5776,8.949]],["keywords/1170",[]],["title/1171",[1023,407.123]],["content/1171",[62,9.514,120,8.293,223,4.054,224,2.103,258,3.694,277,3.903,397,3.91,399,3.782,707,6.384,831,8.968,842,6.307,862,13.557,929,9.473,2122,9.126,2123,11.364,3432,8.868,3514,11.768,3518,12.243,5207,14.575,5516,10.515,5717,13.855,5725,13.855,5727,15.563,5728,15.563,5777,17.14]],["keywords/1171",[]],["title/1172",[19,263.73,195,156.745,5415,877.073]],["content/1172",[2,1.177,3,2.663,19,5.779,20,3.763,24,2.93,41,5.609,43,5.104,44,7.281,48,12.633,52,4.586,106,5.998,152,6.121,195,3.11,426,7.455,427,8.597,428,8.403,455,5.946,465,7.086,515,5.788,551,4.586,608,6.601,846,5.448,978,9.921,996,11.611,1267,4.799,1561,10.475,1679,7.566,1803,8.663,1834,8.905,1876,16.125,1936,12.975,2081,6.798,2252,11.829,5415,18.167,5768,9.921,5769,9.179,5770,12.975,5778,10.472,5779,21.021,5780,17.999,5781,10.472,5782,15.258]],["keywords/1172",[]],["title/1173",[24,357.029,113,324.447]],["content/1173",[1,3.526,3,2.529,16,2.983,24,5.986,42,7.414,52,6.345,62,6.474,72,13.126,113,4.86,120,7.01,130,7.044,181,6.555,223,4.522,226,3.526,237,6.786,258,3.123,270,4.895,330,5.283,399,4.721,401,8.307,414,10.5,464,5.173,527,8.114,605,7.714,660,7.335,704,6.176,915,10.207,1363,9.048,4541,9.828,5190,12.32,5537,10.837,5729,13.155,5730,13.155,5731,13.155,5735,13.155,5736,13.155,5783,14.488,5784,14.488,5785,14.488]],["keywords/1173",[]],["title/1174",[974,789.838,2476,971.224]],["content/1174",[2,1.697,3,2.635,24,6.468,113,3.838,152,13.513,161,6.341,195,2.906,217,8.513,220,6.918,223,4.646,237,10.226,262,10.18,296,6.412,321,7.811,330,5.505,348,8.695,349,9.516,495,6.015,627,4.149,739,13.323,964,8.344,980,12.5,1121,7.768,1443,7.236,2269,12.838,2476,11.489,2570,12.204,4687,12.5,5737,13.708,5738,13.708]],["keywords/1174",[]],["title/1175",[549,876.205,1150,479.72]],["content/1175",[]],["keywords/1175",[]],["title/1176",[2042,532.102]],["content/1176",[1,3.242,13,3.183,22,1.399,24,3.727,59,6.356,61,6.815,62,8.077,66,4.31,69,4.015,79,3.884,127,3.512,136,5.555,146,7.412,195,1.971,220,6.105,222,2.283,224,2.218,226,3.242,228,3.996,277,3.034,281,3.317,288,10.123,303,6.158,330,4.858,340,3.203,352,5.636,413,10.225,422,4.429,445,4.406,447,5.701,513,8.283,526,5.54,549,12.41,605,7.094,752,7.647,804,5.929,823,6.356,864,5.203,873,6.781,902,6.326,1120,9.965,1150,6.794,1212,7.847,1991,9.386,1992,9.804,2122,7.094,5786,13.323,5787,14.389,5788,14.389]],["keywords/1176",[]],["title/1177",[864,626.718]],["content/1177",[13,5.437,16,2.983,22,1.521,61,5.463,66,4.559,69,5.761,106,5.695,127,3.819,185,5.463,196,6.062,224,1.777,230,5.299,296,6.153,352,4.518,359,6.726,368,5.695,385,5.131,512,8.468,513,10.426,526,7.249,575,4.954,627,3.981,752,6.13,877,11.026,902,6.88,1021,7.374,1049,7.454,1150,5.446,1189,6.223,2132,8.169,2545,10.837,5786,14.488,5789,15.647,5790,15.647,5791,15.647]],["keywords/1177",[]],["title/1178",[16,250.43]],["content/1178",[2,2.149,3,3.337,11,4.263,16,2.261,22,2.007,25,5.859,47,7.078,89,4.45,136,6.04,155,8.149,160,7.335,168,4.169,195,2.144,223,3.427,224,1.777,225,7.538,281,3.607,282,2.976,286,10.5,288,11.983,296,6.153,335,3.526,343,5.811,397,3.305,429,9.714,447,6.199,549,16.239,574,7.113,579,7.113,606,9.132,628,12.32,667,10.662,875,4.366,1311,12.32,1837,7.808,2777,12.699]],["keywords/1178",[]],["title/1179",[282,329.633]],["content/1179",[3,1.595,14,6.933,16,2.152,18,5.04,19,3.434,22,1.448,31,2.551,59,4.36,61,3.446,62,9.329,89,2.127,103,4.262,106,5.422,108,4.866,113,2.323,120,6.673,155,5.879,168,4.553,205,4.627,220,6.32,221,4.955,223,3.262,226,2.224,241,4.101,258,2.973,281,2.275,282,2.833,284,2.968,288,12.138,291,4.087,387,4.782,389,5.226,394,4.422,397,2.085,399,3.043,426,7.191,447,8.497,457,4.422,513,6.32,526,4.227,549,13.634,556,4.3,626,4.579,685,6.623,816,5.468,818,4.652,993,5.342,1014,6.214,1133,3.546,1150,3.435,1267,4.188,1643,4.677,1679,4.532,1709,5.302,1716,4.763,1754,14.56,1837,4.925,1875,5.015,1991,13.034,2122,9.851,2132,5.153,3533,6.128,3845,8.658,3846,7.567,3848,6.354,4569,12.089,5441,5.815,5792,8.658,5793,9.87,5794,9.87]],["keywords/1179",[]],["title/1180",[1023,407.123]],["content/1180",[62,10.239,120,8.1,168,3.65,195,2.477,223,4.962,224,2.054,258,3.608,277,3.812,288,9.375,397,3.819,399,3.693,447,7.163,549,11.493,707,6.235,842,6.16,1124,9.937,1991,11.793,2122,8.913,3277,9.785,3430,8.967,3846,13.86,4569,14.674,5424,16.741,5516,10.27,5792,15.858,5795,12.74]],["keywords/1180",[]],["title/1181",[714,537.961,2607,828.392]],["content/1181",[16,3.627,186,6.661,224,2.432,616,5.459,660,10.035,714,8.356,2607,12.867,5718,14.826]],["keywords/1181",[]],["title/1182",[291,378.221,1014,574.998]],["content/1182",[2,1.479,13,3.144,22,1.382,31,3.673,79,3.837,161,5.527,168,4.445,173,5.333,205,9.075,208,5.88,224,1.615,266,6.771,277,2.996,288,7.37,291,7.002,300,9.271,329,5.527,348,7.579,367,8.963,380,8.542,394,6.368,397,3.002,399,3.955,458,6.278,467,5.763,536,9.035,540,6.886,544,9.906,545,9.537,546,5.61,549,12.306,602,7.273,616,3.624,746,6.43,792,5.857,829,6.398,1014,10.317,1076,9.843,1091,7.812,1624,7.472,1684,8.374,1864,9.537,2025,8.145,3430,7.049,5441,8.374,5795,10.015]],["keywords/1182",[]],["title/1183",[64,639.394,168,278.284]],["content/1183",[1,2.365,2,1.092,3,1.696,13,2.322,15,2.612,25,4.426,64,11.384,66,4.861,69,5.193,113,2.47,168,5.572,185,3.664,195,3.016,216,6.56,223,5.232,224,1.192,237,4.551,241,4.36,290,4.511,338,5.479,345,4.551,357,7.31,367,3.979,368,3.82,369,5.517,372,3.239,373,7.533,374,8.539,416,10.683,432,4.701,434,5.268,444,11.421,512,5.679,605,5.173,735,6.845,744,7.533,749,7.734,833,8.639,871,9.402,966,6.845,1085,10.989,1121,4.999,1267,4.452,1638,8.262,2078,8.377,2240,6.307,4115,8.822,5796,10.494,5797,10.494,5798,18.61,5799,10.494,5800,18.61,5801,18.61,5802,10.494,5803,18.61]],["keywords/1183",[]],["title/1184",[5418,1328.705]],["content/1184",[]],["keywords/1184",[]],["title/1185",[2042,532.102]],["content/1185",[1,3.574,2,1.651,3,2.563,11,4.322,15,3.948,22,1.542,25,4.501,65,7.21,66,3.502,79,4.281,136,6.123,146,8.17,168,3.202,172,5.911,195,2.173,222,2.517,224,2.367,225,7.64,263,4.869,277,3.344,289,7.283,303,6.788,330,5.355,340,3.53,352,6.015,397,3.35,526,4.501,575,3.805,605,7.819,627,4.036,752,6.213,804,6.535,873,9.818,902,6.973,1120,10.984,1189,6.308,1212,8.649,1598,9.532,1992,10.807,5418,12.159,5804,14.686,5805,19.289,5806,14.686]],["keywords/1185",[]],["title/1186",[864,626.718]],["content/1186",[16,3.103,22,1.317,25,3.845,31,3.502,35,12.39,66,4.741,71,5.877,79,5.057,87,5.63,172,8.633,198,6.191,224,2.128,226,3.053,228,5.963,229,5.677,281,4.95,291,3.718,340,4.17,363,6.98,368,4.932,413,6.254,464,3.395,526,3.845,542,12.444,545,9.093,552,6.98,554,9.233,575,3.251,615,8.412,627,4.767,644,5.41,693,4.897,714,5.289,801,9.384,860,7.333,875,3.781,896,6.982,921,5.799,926,7.027,1021,6.386,1113,6.761,1396,8.723,1401,6.286,1569,9.384,1973,8.062,2607,8.144,5189,12.547,5418,17.76]],["keywords/1186",[]],["title/1187",[16,250.43]],["content/1187",[2,2.441,3,3.791,16,2.763,22,2.281,25,6.657,69,5.335,89,5.055,136,7.381,168,3.86,195,2.62,223,4.187,224,2.172,282,3.636,574,8.692,875,5.335,5418,17.984]],["keywords/1187",[]],["title/1188",[282,329.633]],["content/1188",[1,2.612,11,6.512,18,5.509,19,4.544,20,3.857,22,1.917,31,5.095,112,3.879,113,5.086,120,7.516,168,3.98,172,6.252,205,5.434,223,2.539,226,2.612,227,5.394,258,2.313,282,3.191,291,4.603,295,6.052,389,8.881,399,2.368,426,7.36,490,3.234,542,9.011,627,4.268,647,4.32,816,6.422,818,5.463,895,5.031,896,6.252,902,7.376,1014,6.998,1133,7.082,1210,9.341,1679,5.323,1716,5.364,1875,5.647,1910,9.294,3274,11.821,3403,6.967,3482,7.779,3533,7.197,3804,9.127,4044,10.733,5231,8.887,5441,6.83,5804,10.733,5807,11.592,5808,11.592,5809,10.733,5810,9.127]],["keywords/1188",[]],["title/1189",[1023,407.123]],["content/1189",[2,1.662,3,2.581,8,5.775,11,4.351,15,5.208,25,4.532,31,5.408,49,4.109,112,5.344,168,3.224,195,2.188,223,4.583,224,1.814,258,3.187,277,3.367,296,6.279,316,6.256,340,3.555,385,5.237,397,3.373,399,4.275,579,7.26,640,11.953,707,5.507,842,5.441,1124,8.777,1133,5.737,1142,5.575,3430,7.92,3495,9.804,3804,12.574,4018,14.007,5231,12.243,5419,14.787,5516,9.071,5795,11.253,5809,14.787,5810,12.574,5811,15.969,5812,15.969,5813,15.969,5814,15.969]],["keywords/1189",[]],["title/1190",[714,537.961,2607,828.392]],["content/1190",[16,3.627,186,6.661,224,2.432,616,5.459,660,10.035,714,8.356,2607,12.867,5718,14.826]],["keywords/1190",[]],["title/1191",[291,378.221,1014,574.998]],["content/1191",[2,1.461,11,3.826,13,3.106,22,1.365,31,4.962,79,3.79,161,5.46,168,4.417,173,5.269,205,9,208,5.809,224,1.595,266,6.689,277,2.96,288,7.281,291,6.977,300,9.159,329,5.46,348,7.488,367,8.918,380,8.439,394,6.291,397,2.966,399,3.922,458,6.202,467,5.694,536,8.926,540,6.802,544,9.825,545,9.422,546,5.542,602,7.185,616,3.581,746,6.352,792,5.786,829,6.321,1014,10.273,1076,9.724,1091,7.717,1624,7.382,1684,8.273,1864,9.422,2025,8.046,3430,6.964,5418,14.718,5441,8.273,5795,9.894]],["keywords/1191",[]],["title/1192",[382,745.942,2473,745.942]],["content/1192",[2,1.479,20,4.729,22,1.882,31,3.673,66,4.274,68,6.847,71,6.164,79,3.837,168,2.87,172,5.297,173,5.333,230,7.456,231,5.674,263,4.363,281,3.276,323,8.824,339,9.035,368,5.173,382,11.915,394,6.368,458,6.278,465,4.715,485,8.434,644,5.674,660,6.663,677,6.337,682,5.653,719,7.812,818,6.698,835,6.771,875,3.966,1270,9.15,1312,8.542,1315,8.927,1442,7.938,1554,9.035,1594,7.938,1708,6.925,1837,7.092,2086,8.295,2473,11.915,2510,13.313,5418,16.877,5529,9.4,5544,9.15,5815,14.213,5816,14.213,5817,13.16,5818,19.358]],["keywords/1192",[]],["title/1193",[5420,1297.249]],["content/1193",[]],["keywords/1193",[]],["title/1194",[2042,532.102]],["content/1194",[1,3.242,2,1.497,3,2.326,22,2.154,25,4.083,49,3.702,66,4.892,73,4.977,79,5.269,127,3.512,136,5.555,146,7.412,186,4.477,195,1.971,222,2.283,224,2.218,277,3.034,281,3.317,303,6.158,312,6.158,330,4.858,340,3.203,352,5.636,563,11.287,605,7.094,646,6.675,693,3.761,752,5.637,767,10.646,804,5.929,873,6.781,902,8.583,1112,9.263,1120,9.965,1189,5.722,1212,7.847,1237,7.461,1776,12.621,1992,9.804,2564,14.108,3582,13.323,5420,10.77,5819,13.323,5820,14.389,5821,14.389,5822,14.389,5823,14.389,5824,14.389]],["keywords/1194",[]],["title/1195",[16,250.43]],["content/1195",[2,2.04,3,3.592,6,6.682,7,5.848,13,3.203,16,2.832,22,2.495,25,4.109,31,3.742,49,5.718,66,3.197,89,3.12,113,5.232,128,8.988,136,5.589,185,5.055,195,1.984,223,4.293,224,2.227,282,3.728,368,5.27,397,3.058,399,4.54,465,4.803,563,14.392,574,6.582,632,6.487,652,4.817,875,4.04,895,5.879,1007,7.559,1126,4.978,1143,7.269,1237,7.508,5420,17.828]],["keywords/1195",[]],["title/1196",[282,329.633]],["content/1196",[13,4.207,14,3.777,15,2.71,18,4.25,19,3.694,20,3.622,22,2.273,31,4.141,52,6.498,61,3.801,66,3.538,69,3.038,98,9.948,103,4.701,113,2.563,127,2.657,205,5.103,217,8.366,223,2.384,258,3.795,282,3.048,291,4.397,330,3.676,394,4.877,399,2.224,426,6.518,427,3.95,551,7.711,563,12.127,647,4.057,652,6.978,719,5.983,767,8.739,816,6.031,818,5.131,895,5.702,925,4.974,1014,6.685,1050,4.561,1126,5.509,1133,5.757,1143,8.045,1237,5.645,1650,8.148,1679,4.999,1716,5.124,1798,6.921,1875,5.395,1910,8.877,2120,10.453,2121,9.948,2216,10.598,3278,8.346,3603,8.572,3677,8.836,3679,9.549,4538,10.08,5420,15.698,5441,6.414,5769,8.836,5819,10.08,5825,10.887,5826,10.887,5827,10.887,5828,10.887,5829,10.08,5830,10.887]],["keywords/1196",[]],["title/1197",[1023,407.123]],["content/1197",[2,1.651,3,2.563,8,5.735,15,5.79,25,4.501,49,4.081,120,7.106,195,2.173,223,4.562,224,2.367,258,4.157,277,3.344,296,6.237,316,6.213,340,3.53,370,7.106,385,5.201,397,3.35,399,4.256,490,4.425,563,12.046,579,7.21,706,10.807,707,7.184,842,5.404,1124,8.717,1126,5.453,1133,5.698,1142,5.537,1143,7.963,1225,14.686,2123,9.737,2608,9.089,5420,11.871,5421,14.686,5831,15.861,5832,15.861,5833,15.861,5834,15.861]],["keywords/1197",[]],["title/1198",[864,626.718]],["content/1198",[9,10.21,16,3.57,22,1.542,61,5.537,112,5.308,115,7.763,224,1.802,228,4.404,258,3.165,272,8.116,279,6.851,281,3.656,303,6.788,363,8.17,367,6.014,389,8.397,461,8.458,594,7.072,646,9.664,658,6.356,693,6.081,767,8.649,804,6.535,823,7.006,849,7.79,1023,3.726,1214,10.346,1215,7.21,1217,9.378,1220,10.422,1221,6.168,1222,8.52,2020,6.91,2037,10.807,5420,11.871]],["keywords/1198",[]],["title/1199",[291,378.221,1014,574.998]],["content/1199",[19,4.519,22,1.906,30,6.268,49,6.128,89,4.225,205,9.19,224,2.227,284,5.894,291,7.041,399,4.005,616,4.999,792,8.078,810,8.825,1014,9.937,5835,19.604]],["keywords/1199",[]],["title/1200",[253,1056.653,465,457.256]],["content/1200",[1,3.85,3,3.533,7,9.352,13,4.424,15,6.798,16,2.468,19,3.938,22,1.661,66,3.772,89,2.562,106,6.218,163,3.955,185,4.151,223,4.379,228,3.301,251,3.547,253,16.758,270,3.719,291,3.262,321,8.184,354,2.933,355,3.059,372,3.669,399,3.49,411,6.294,426,4.982,439,6.294,458,8.833,464,2.978,465,7.252,563,6.874,598,7.467,599,5.133,771,5.11,875,3.317,982,7.467,1204,6.813,1237,6.165,1404,10.428,2011,9.994,3055,11.008,5420,8.898,5836,11.888,5837,17.083,5838,11.888,5839,11.008,5840,11.888,5841,11.888,5842,11.008,5843,11.888,5844,11.888,5845,11.888,5846,11.888,5847,11.888]],["keywords/1200",[]],["title/1201",[5848,1021.147]],["content/1201",[7,7.787,16,3.171,30,6.164,66,4.845,69,3.942,79,3.813,167,8.168,185,4.932,209,8.49,223,5.164,224,2.493,225,6.805,230,6.529,251,5.751,258,2.819,263,4.337,319,9.626,351,8.168,370,8.637,372,5.95,397,2.984,417,7.956,434,9.679,465,4.686,528,9.215,563,8.168,682,7.667,698,7.325,741,7.704,771,6.073,1196,8.095,1237,7.325,1267,5.994,1313,8.98,1350,9.626,1442,7.89,1812,8.579,2251,9.626,2444,10.346,2608,8.095,2963,11.123,3935,9.215,5848,8.323,5849,14.127,5850,19.278,5851,14.127,5852,14.127]],["keywords/1201",[]],["title/1202",[5422,1269.296]],["content/1202",[]],["keywords/1202",[]],["title/1203",[2042,532.102]],["content/1203",[1,2.917,2,1.347,3,2.092,16,1.871,22,1.259,25,5.151,36,4.98,62,8.671,66,4.007,79,4.899,103,5.59,106,4.713,136,4.998,146,6.669,185,4.52,195,1.774,222,2.054,223,2.835,224,2.062,226,4.09,277,2.73,281,2.985,303,5.541,316,5.072,330,6.128,335,2.917,340,2.882,352,5.24,372,3.996,404,4.411,445,3.964,494,6.714,575,4.355,605,6.383,607,5.773,615,8.038,616,3.302,627,3.294,651,5.229,682,5.149,752,7.11,804,5.335,831,6.272,873,6.102,875,3.613,1120,8.967,1212,7.061,1396,8.335,1739,11.356,1943,7.419,1992,8.822,2023,10.693,2027,6.541,2122,6.383,2317,17.631,2846,7.948,3113,10.508,3151,11.988,5422,13.292,5853,12.947,5854,12.947]],["keywords/1203",[]],["title/1204",[864,626.718]],["content/1204",[13,5.313,14,6.347,16,3.046,22,1.778,24,3.391,62,5.417,66,4.655,69,3.653,79,3.534,127,3.196,146,6.744,163,4.356,168,2.643,180,6.343,224,2.078,226,2.95,232,7.869,254,6.533,281,3.018,297,5.531,316,5.129,340,2.914,352,5.281,374,4.846,385,4.294,422,4.03,445,4.009,575,4.389,627,6.498,651,5.288,675,13.403,731,5.417,752,5.129,810,8.235,864,4.734,877,9.226,902,5.757,925,5.982,1042,5.268,1049,6.237,1133,6.572,1142,6.387,1197,12.123,1837,6.533,1874,14.403,1988,5.579,2023,13.448,2027,6.615,5422,9.589,5855,13.093]],["keywords/1204",[]],["title/1205",[16,250.43]],["content/1205",[2,2.429,3,3.065,16,2.74,22,2.269,25,5.382,47,8.579,89,4.087,136,7.321,146,9.768,168,4.713,195,3.198,223,4.153,224,2.154,282,3.607,574,8.621,875,5.291,2020,8.262,5422,17.094]],["keywords/1205",[]],["title/1206",[282,329.633]],["content/1206",[13,4.528,14,5.357,18,5.316,19,4.718,24,3.999,62,9.498,89,2.231,103,8.837,113,4.817,130,6.95,146,7.953,168,4.802,223,3.381,228,2.875,258,2.066,281,2.387,282,2.936,335,4.612,394,6.917,399,2.115,406,8.152,426,7.527,427,3.756,627,5.207,710,9.082,831,10.605,1050,6.468,1126,6.347,1142,5.39,1143,9.269,1716,4.936,1837,5.166,1875,5.198,2027,11.598,2122,7.611,2317,10.692,3533,6.428,5422,17.418,5856,10.354,5857,10.354,5858,10.354,5859,9.587,5860,10.354,5861,10.354,5862,9.587,5863,10.354,5864,10.354,5865,9.587]],["keywords/1206",[]],["title/1207",[1023,407.123]],["content/1207",[2,1.488,3,2.311,8,5.171,15,5.898,18,3.196,25,4.058,49,3.679,62,9.137,113,4.576,120,6.407,168,3.925,195,1.959,223,4.257,224,2.208,258,2.854,277,3.015,296,5.623,316,5.602,335,3.222,340,3.183,370,6.407,385,4.69,397,3.021,399,3.971,490,3.99,575,3.431,579,6.501,651,5.776,706,9.744,707,6.704,831,6.928,842,4.872,1124,7.86,1126,4.916,1142,4.993,1143,7.18,1628,12.514,1942,10.265,2123,8.779,2317,9.904,2608,8.195,5422,10.473,5423,13.241,5516,8.123,5795,10.077,5859,13.241,5862,13.241,5865,13.241,5866,14.3,5867,14.3,5868,14.3]],["keywords/1207",[]],["title/1208",[291,378.221,1014,574.998]],["content/1208",[3,2.834,15,5.532,22,1.705,79,4.733,103,7.571,163,5.834,205,8.22,223,3.84,224,1.992,273,11.597,291,6.696,307,7.482,357,8.22,387,8.495,398,13.124,404,5.974,516,9.794,616,4.471,897,6.626,906,7.856,1008,8.495,1014,9.272,1535,6.819,5422,18.791,5869,17.535]],["keywords/1208",[]],["title/1209",[382,745.942,2473,745.942]],["content/1209",[3,1.759,22,1.558,41,5.399,43,2.859,52,4.415,64,5.05,66,2.404,71,4.722,87,4.523,97,4.854,113,2.563,137,5.764,181,4.561,185,3.801,192,5.399,211,6.612,223,2.384,226,2.453,230,3.687,263,3.342,289,4.999,291,2.987,321,5.215,335,2.453,338,5.684,368,3.963,369,5.723,374,4.029,382,10.291,404,3.709,405,6.295,416,5.645,422,3.351,428,4.029,432,4.877,439,5.764,455,5.723,458,4.809,465,3.612,466,6.543,485,4.743,533,4.974,550,5.103,594,4.854,606,6.353,654,5.645,677,4.854,719,5.983,792,4.486,818,5.131,835,5.186,846,5.244,871,5.5,906,4.877,976,6.888,1008,5.274,1022,6.031,1023,2.557,1204,6.239,1270,7.008,1312,6.543,1561,6.921,1594,6.081,1679,4.999,1708,5.305,1802,7.973,1856,6.921,2081,6.543,2086,6.353,2131,7.008,2177,7.815,2473,10.291,2510,6.131,2549,7.305,2550,7.418,2968,7.2,4541,6.838,4590,6.184,4636,7.008,5422,11.735,5529,7.2,5543,7.54,5544,7.008,5554,8.346,5593,7.54,5595,7.973,5607,7.815,5619,7.671,5620,8.148,5622,7.815,5629,7.54,5654,7.54,5694,7.2,5704,8.346,5712,7.973,5765,8.836,5870,9.152,5871,10.887,5872,10.887,5873,10.887,5874,10.887,5875,10.887,5876,10.887,5877,10.887,5878,10.887,5879,10.887,5880,10.887]],["keywords/1209",[]],["title/1210",[24,253.302,1150,340.348,1991,637.866,2105,600.333]],["content/1210",[]],["keywords/1210",[]],["title/1211",[2042,532.102]],["content/1211",[13,4,22,1.758,24,5.869,61,6.312,62,9.375,66,3.992,69,5.045,73,6.254,224,2.054,226,4.074,281,4.168,340,4.024,352,5.22,445,5.536,513,9.614,526,5.131,804,7.45,1074,9.021,1150,6.293,1991,16.143,5881,16.741,5882,16.741,5883,16.741,5884,16.741]],["keywords/1211",[]],["title/1212",[16,250.43]],["content/1212",[2,2.188,3,3.397,16,3.037,22,2.044,25,5.965,62,8.697,89,4.53,223,4.604,282,3.998,574,9.556,875,5.865]],["keywords/1212",[]],["title/1213",[282,329.633]],["content/1213",[18,4.357,19,3.812,20,6.486,22,1.895,24,5.545,30,3.634,31,5.038,33,6.831,41,5.637,48,8.713,52,8.681,62,6.842,67,5.415,73,3.931,103,7.14,105,7.225,106,6.019,110,7.752,120,7.409,130,8.776,155,4.486,223,4.269,258,2.268,282,3.145,399,2.322,409,6.151,426,7.321,440,4.403,464,2.847,469,4.192,505,5.779,513,7.016,526,4.693,527,5.894,550,5.328,626,5.272,835,7.878,862,8.323,925,5.193,976,4.886,1030,8.159,1133,4.083,1716,5.287,1731,9.743,1799,10.937,1800,8.883,1809,7.138,1875,5.567,2106,11.871,2121,12.102,3411,6.456,3901,9.224,4288,9.224,5716,9.555,5717,8.507,5718,7.871,5719,9.555,5720,9.555,5721,9.555,5722,10.524,5723,10.524,5724,10.524]],["keywords/1213",[]],["title/1214",[1023,407.123]],["content/1214",[62,9.755,120,8.637,223,4.222,224,2.19,258,3.847,277,4.064,397,4.073,399,3.938,707,6.648,842,6.568,862,14.119,1991,12.575,3432,9.235,4288,15.647,5207,15.18,5516,10.951,5717,14.43,5725,14.43,5726,17.851,5885,17.851]],["keywords/1214",[]],["title/1215",[24,357.029,113,324.447]],["content/1215",[1,3.526,3,2.529,16,2.983,24,5.986,42,7.414,52,6.345,62,6.474,72,13.126,113,4.86,120,7.01,130,7.044,181,6.555,223,4.522,226,3.526,237,6.786,258,3.123,270,4.895,330,5.283,399,4.721,401,8.307,414,10.5,464,5.173,527,8.114,605,7.714,660,7.335,704,6.176,915,10.207,1363,9.048,4541,9.828,5190,12.32,5537,10.837,5729,13.155,5730,13.155,5731,13.155,5732,14.488,5733,14.488,5734,14.488,5735,13.155,5736,13.155]],["keywords/1215",[]],["title/1216",[974,789.838,2476,971.224]],["content/1216",[2,1.697,3,2.635,24,6.468,113,3.838,152,13.513,161,6.341,195,2.906,217,8.513,220,6.918,223,4.646,237,10.226,262,10.18,296,6.412,321,7.811,330,5.505,348,8.695,349,9.516,495,6.015,627,4.149,739,13.323,964,8.344,980,12.5,1121,7.768,1443,7.236,2269,12.838,2476,11.489,2570,12.204,4687,12.5,5737,13.708,5738,13.708]],["keywords/1216",[]],["title/1217",[24,221.174,156,581.805,1150,297.179,1991,556.959,5415,654.579]],["content/1217",[]],["keywords/1217",[]],["title/1218",[2042,532.102]],["content/1218",[13,4,22,1.758,24,5.869,61,6.312,62,9.375,66,3.992,69,5.045,73,6.254,224,2.054,226,4.074,281,4.168,340,4.024,352,5.22,445,5.536,513,9.614,526,5.131,804,7.45,1074,9.021,1150,6.293,1991,16.143,5881,16.741,5882,16.741,5883,16.741,5884,16.741]],["keywords/1218",[]],["title/1219",[16,250.43]],["content/1219",[2,2.188,3,3.397,16,3.037,22,2.044,25,5.965,62,8.697,89,4.53,223,4.604,282,3.998,574,9.556,875,5.865]],["keywords/1219",[]],["title/1220",[282,329.633]],["content/1220",[18,4.419,19,3.881,20,6.578,22,1.637,24,5.121,30,3.725,31,5.109,33,11.882,41,5.778,52,8.017,53,9.455,62,6.966,103,7.269,106,6.128,110,7.892,120,7.543,130,8.9,223,4.33,258,2.325,282,3.202,289,9.944,399,2.38,426,6.699,513,7.143,526,4.778,550,9.267,551,6.827,626,5.404,862,8.532,976,10.292,1030,12.086,1133,4.185,1716,5.383,1799,13.075,1809,7.317,1875,5.668,2106,12.086,2121,12.273,3901,9.455,4288,9.455,5021,10.219,5716,9.794,5717,8.72,5718,8.068,5719,9.794,5720,9.794,5721,9.794,5773,10.787,5774,10.787,5775,10.787,5776,10.787]],["keywords/1220",[]],["title/1221",[1023,407.123]],["content/1221",[62,9.755,120,8.637,223,4.222,224,2.19,258,3.847,277,4.064,397,4.073,399,3.938,707,6.648,842,6.568,862,14.119,1991,12.575,3432,9.235,4288,15.647,5207,15.18,5516,10.951,5717,14.43,5725,14.43,5777,17.851,5885,17.851]],["keywords/1221",[]],["title/1222",[19,263.73,195,156.745,5415,877.073]],["content/1222",[2,1.177,3,2.663,19,5.779,20,3.763,24,2.93,41,5.609,43,5.104,44,7.281,48,12.633,52,4.586,106,5.998,152,6.121,195,3.11,426,7.455,427,8.597,428,8.403,455,5.946,465,7.086,515,5.788,551,4.586,608,6.601,846,5.448,978,9.921,996,11.611,1267,4.799,1561,10.475,1679,7.566,1803,8.663,1834,8.905,1876,16.125,1936,12.975,2081,6.798,2252,11.829,5415,18.167,5768,9.921,5769,9.179,5770,12.975,5778,10.472,5779,21.021,5780,17.999,5781,10.472,5782,15.258]],["keywords/1222",[]],["title/1223",[24,357.029,113,324.447]],["content/1223",[1,3.526,3,2.529,16,2.983,24,5.986,42,7.414,52,6.345,62,6.474,72,13.126,113,4.86,120,7.01,130,7.044,181,6.555,223,4.522,226,3.526,237,6.786,258,3.123,270,4.895,330,5.283,399,4.721,401,8.307,414,10.5,464,5.173,527,8.114,605,7.714,660,7.335,704,6.176,915,10.207,1363,9.048,4541,9.828,5190,12.32,5537,10.837,5729,13.155,5730,13.155,5731,13.155,5735,13.155,5736,13.155,5783,14.488,5784,14.488,5785,14.488]],["keywords/1223",[]],["title/1224",[974,789.838,2476,971.224]],["content/1224",[2,1.697,3,2.635,24,6.468,113,3.838,152,13.513,161,6.341,195,2.906,217,8.513,220,6.918,223,4.646,237,10.226,262,10.18,296,6.412,321,7.811,330,5.505,348,8.695,349,9.516,495,6.015,627,4.149,739,13.323,964,8.344,980,12.5,1121,7.768,1443,7.236,2269,12.838,2476,11.489,2570,12.204,4687,12.5,5737,13.708,5738,13.708]],["keywords/1224",[]],["title/1225",[61,399.429,690,727.292,1150,398.191]],["content/1225",[]],["keywords/1225",[]],["title/1226",[2042,532.102]],["content/1226",[1,3.55,2,2.158,3,2.546,16,2.997,18,3.521,22,2.016,25,4.471,61,5.5,66,3.478,79,4.252,136,6.081,146,8.114,195,2.158,222,2.5,223,3.45,224,2.356,277,3.321,303,6.742,330,5.319,340,3.507,345,6.832,352,5.988,354,3.887,355,4.053,447,8.217,605,7.766,627,4.008,652,5.241,690,10.014,752,6.171,804,6.491,873,7.424,921,6.742,1120,10.91,1150,7.218,1175,9.468,1212,8.591,1992,10.734,3484,7.959,5886,15.753,5887,15.753]],["keywords/1226",[]],["title/1227",[2,78.859,22,73.669,354,186.957,355,194.959,895,227.226,3484,382.815]],["content/1227",[2,1.853,61,6.216,79,4.806,281,4.104,284,5.352,340,3.963,352,6.479,354,4.393,355,4.581,447,7.053,526,5.052,577,13.325,616,4.54,807,11.182,895,6.729,902,9.866,908,6.396,1126,6.121,1143,8.938,1150,8.553,1189,7.08,2023,10.489,2024,13.648,3440,11.946,3484,8.994,5888,16.484]],["keywords/1227",[]],["title/1228",[347,496.773,895,413.323]],["content/1228",[13,4.758,22,1.619,61,5.815,66,3.677,69,4.647,79,5.805,106,6.062,244,7.648,281,4.958,284,5.008,340,3.707,347,6.003,352,4.809,422,5.127,447,6.599,513,10.106,526,6.759,599,7.192,601,7.726,603,7.726,616,4.247,807,10.461,895,4.995,902,9.456,908,5.984,1150,8.761,1189,6.624,2023,9.813,5888,15.422]],["keywords/1228",[]],["title/1229",[16,250.43]],["content/1229",[2,2.417,3,3.754,16,2.718,22,2.258,25,6.591,47,8.51,61,6.567,89,5.005,136,7.262,195,2.577,223,4.12,224,2.137,282,3.578,574,8.552,690,14.764,875,5.249,1150,6.547,2630,12.441]],["keywords/1229",[]],["title/1230",[282,329.633]],["content/1230",[1,2.302,13,2.26,14,3.545,16,1.476,18,4.544,19,4.222,20,3.399,22,1.781,30,3.267,31,5.626,61,3.567,66,5.044,106,5.564,113,4.312,223,3.348,226,3.445,258,2.039,261,5.677,263,3.137,282,2.907,323,6.343,333,6.665,340,2.274,343,3.795,347,5.51,348,5.448,354,2.521,355,2.629,356,8.684,374,3.782,394,4.577,397,3.229,399,3.742,426,6.661,447,6.057,448,3.556,458,6.752,485,7.98,513,7.772,526,4.338,551,4.143,626,4.74,835,4.867,846,4.922,895,6.097,926,5.298,1133,3.671,1150,5.321,1442,5.707,1679,7.019,1709,5.488,1716,4.888,1875,5.146,2120,6.665,2201,8.292,2559,6.962,2630,16.103,3481,6.495,3482,6.856,3484,5.162,3691,14.595,4154,8.59,4287,14.155,4569,8.292,4660,8.045,5889,10.217,5890,10.217,5891,10.217,5892,8.962,5893,10.217]],["keywords/1230",[]],["title/1231",[1023,407.123]],["content/1231",[22,1.786,86,8.433,223,4.022,224,2.086,258,3.665,277,3.872,347,6.619,397,3.88,399,3.752,458,8.112,513,7.792,842,6.257,895,5.507,908,6.598,1023,4.314,1026,9.723,1133,6.598,1142,6.412,2630,12.146,3495,11.275,3846,14.079,4569,14.905,5516,10.432,5795,12.941,5894,18.365,5895,18.365,5896,18.365]],["keywords/1231",[]],["title/1232",[2630,911.566,5892,1208.976]],["content/1232",[2,2.075,3,2.4,16,2.881,25,4.214,30,4.747,70,5.974,220,8.46,223,4.367,241,6.169,277,4.204,316,5.817,345,6.44,357,6.96,358,8.509,396,6.169,397,4.212,399,5.28,437,7.598,465,4.926,467,6.021,468,8.924,485,10.484,579,6.75,690,9.439,761,8.293,1112,9.559,1292,11.383,2630,17.752,5892,21.108,5897,14.848,5898,14.848,5899,14.848,5900,14.848]],["keywords/1232",[]],["title/1233",[291,378.221,1014,574.998]],["content/1233",[22,2.044,61,7.339,73,7.271,208,8.697,224,2.388,291,5.768,307,7.077,689,5.908,690,13.363,1014,8.769,1150,7.316]],["keywords/1233",[]],["title/1234",[71,597.791,356,782.945]],["content/1234",[2,1.882,3,2.922,13,5.475,22,2.203,61,6.312,71,11.252,79,4.88,224,2.054,226,4.074,261,9.191,356,14.058,504,11.376,557,7.949,690,11.493,829,8.139,1150,6.293,1684,10.652,5901,18.08]],["keywords/1234",[]],["title/1235",[1622,705.325,1910,763.589]],["content/1235",[]],["keywords/1235",[]],["title/1236",[2042,532.102]],["content/1236",[2,2.093,3,3.251,22,1.955,25,5.708,127,4.909,223,4.405,224,2.285,340,4.477,513,8.533,847,7.547,1044,11.425,1155,9.975,1221,7.821,1910,11.142,2208,12.785,5902,20.112]],["keywords/1236",[]],["title/1237",[16,250.43]],["content/1237",[2,2.093,22,2.352,89,4.334,206,8.321,224,2.947,226,4.532,229,8.425,284,6.047,354,4.962,445,6.158,804,8.287,1622,10.292,1971,15.053]],["keywords/1237",[]],["title/1238",[282,329.633]],["content/1238",[]],["keywords/1238",[]],["title/1239",[258,345.873]],["content/1239",[18,3.949,19,4.073,20,5.878,22,1.718,31,4.566,112,5.913,195,2.421,258,3.526,263,5.424,282,3.36,426,6.512,849,6.607,908,8.797,1050,7.401,1155,8.762,1707,9.421,1716,5.649,1800,13.154,1875,5.948,1888,12.449,1910,13.566,2096,14.986,2255,13.224,3403,10.619]],["keywords/1239",[]],["title/1240",[399,354.058]],["content/1240",[18,4.574,19,4.718,120,10.952,195,2.804,282,3.892,426,5.968,858,13.768,1221,7.959,1716,6.544,1875,6.89,3871,13.733,5903,20.466]],["keywords/1240",[]],["title/1241",[1023,407.123]],["content/1241",[6,8.752,19,4.372,112,6.347,224,2.154,258,3.784,277,3.998,397,4.006,399,3.874,626,8.797,707,6.54,842,6.461,908,6.813,1124,10.423,1800,10.187,2096,12.726,3249,13.363,5092,17.56,5904,18.964,5905,17.56,5906,18.964,5907,18.964,5908,18.964,5909,18.964]],["keywords/1241",[]],["title/1242",[1150,479.72,2933,911.566]],["content/1242",[]],["keywords/1242",[]],["title/1243",[2042,532.102]],["content/1243",[1,2.312,2,1.911,3,3.293,8,3.711,13,4.508,16,2.216,22,2.225,25,2.912,36,3.947,49,2.64,66,2.266,69,2.863,79,2.77,83,5.64,87,4.263,89,2.212,136,3.962,146,5.286,161,3.991,195,2.101,222,1.628,223,5.339,224,2.315,226,2.312,231,4.097,266,8.749,268,3.824,277,2.164,290,4.411,296,4.035,303,4.392,324,5.029,330,3.465,333,6.694,340,2.284,343,5.696,347,5.528,352,4.428,354,3.784,355,3.946,394,4.598,396,4.263,403,9.001,467,4.161,513,4.354,515,5.251,526,2.912,546,4.05,550,4.811,551,4.161,605,5.059,616,2.617,685,10.292,752,4.02,804,4.229,810,4.62,829,4.62,849,3.838,873,4.836,895,4.599,908,3.687,921,4.392,925,7.007,926,5.322,1020,5.64,1026,5.433,1050,4.299,1120,7.107,1150,7.092,1442,8.566,1755,6.694,1950,9.001,1992,6.993,2042,3.151,2689,13.453,2846,9.416,2933,6.787,2970,14.358,3138,7.867,3484,7.749,4320,9.001,5910,10.262]],["keywords/1243",[]],["title/1244",[2,78.859,22,73.669,354,186.957,355,194.959,895,227.226,3484,382.815]],["content/1244",[340,4.722,352,6.124,372,6.547,413,9.79,526,6.02,627,5.397,1126,7.293,1143,10.65,1150,7.383,2970,14.947]],["keywords/1244",[]],["title/1245",[347,496.773,895,413.323]],["content/1245",[6,6.146,13,4.707,16,1.924,24,3.45,25,3.779,30,4.258,61,4.65,66,2.94,106,7.744,127,3.251,224,1.513,340,2.964,352,6.143,367,7.019,372,4.11,386,6.566,413,6.146,422,4.099,447,7.334,513,9.756,526,7.099,556,5.802,598,8.365,601,6.178,627,4.71,652,6.159,752,5.217,864,4.816,871,6.728,875,3.716,877,9.384,902,5.855,1049,6.345,1150,9.248,1189,7.362,1401,6.178,1449,13.288,1709,7.154,1923,8.573,2042,4.089,2933,12.243,2970,14.993,3053,8.268,5911,13.318]],["keywords/1245",[]],["title/1246",[16,250.43]],["content/1246",[2,2.111,3,3.279,16,2.931,22,2.364,25,5.757,89,4.372,136,7.832,195,2.78,223,4.443,224,2.305,282,3.858,875,5.661,1150,7.061,2933,13.417]],["keywords/1246",[]],["title/1247",[282,329.633]],["content/1247",[2,1.171,3,1.819,13,2.49,16,1.626,18,5.064,19,4.469,20,3.745,22,2.203,49,4.225,86,5.168,106,5.977,113,3.865,127,2.747,136,4.345,195,1.542,213,6.91,214,5.362,223,4.245,224,1.279,226,2.536,241,4.676,258,2.246,282,4.053,283,4.224,297,4.755,329,4.377,347,5.918,354,4.051,355,4.225,385,3.691,399,3.354,426,6.607,440,4.361,469,4.152,513,9.614,526,5.501,551,4.564,626,5.221,777,6.631,835,5.362,846,5.422,849,4.209,895,7.094,908,5.899,1050,6.879,1133,4.044,1150,3.917,1621,6.836,1679,5.168,1716,5.25,1875,5.528,1923,7.246,2933,14.093,2970,13.66,3481,7.155,3482,7.553,3484,8.296,4154,9.462,5912,10.422,5913,11.255]],["keywords/1247",[]],["title/1248",[1023,407.123]],["content/1248",[2,1.685,3,2.617,8,5.855,15,5.256,22,1.574,25,4.595,49,4.166,86,7.435,195,2.218,223,4.624,224,1.839,258,3.231,277,3.414,296,6.367,316,6.343,340,3.604,347,5.836,385,5.31,397,3.42,399,4.314,513,6.87,579,7.361,707,5.584,842,5.516,895,4.856,908,5.817,1023,3.803,1026,8.572,1124,8.899,1133,5.817,1150,5.636,2933,10.709,3277,8.763,3344,14.202,3495,9.94,3846,12.413,5516,9.198,5795,11.409,5912,14.992,5914,16.192,5915,16.192]],["keywords/1248",[]],["title/1249",[1956,945.178]],["content/1249",[]],["keywords/1249",[]],["title/1250",[195,188.839,638,876.205]],["content/1250",[3,3.811,7,7.787,13,4.265,22,1.874,79,6.364,160,9.037,195,2.641,335,4.344,343,7.16,464,4.83,465,7.822,998,11.587,1956,12.858,2243,15.18,2495,16.207,5916,19.279,5917,19.279]],["keywords/1250",[]],["title/1251",[2042,532.102]],["content/1251",[3,2.813,4,9.28,18,3.89,22,1.692,47,7.873,73,6.02,89,3.751,92,7.76,112,5.824,186,5.415,207,7.448,279,5.724,281,4.012,335,4.985,340,4.924,352,5.025,490,4.856,627,5.628,693,4.549,902,7.652,1133,6.252,1214,14.429,1215,10.056,1267,7.384,1956,13.954,2210,13.026]],["keywords/1251",[]],["title/1252",[16,250.43]],["content/1252",[1,5.617,2,2.381,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2920,12.146]],["keywords/1252",[]],["title/1253",[282,329.633]],["content/1253",[3,2.326,18,5.551,19,4.5,30,4.601,112,4.815,113,4.595,114,12.621,168,2.905,222,2.283,258,2.871,282,3.713,291,6.079,334,5.929,335,5.771,399,2.939,426,7.242,448,6.794,512,7.787,575,5.7,647,5.362,689,4.044,693,3.761,818,6.781,1014,8.144,1050,6.028,1126,7.617,1210,6.818,1679,6.607,1716,6.242,1875,6.572,2020,6.269,3403,8.648,4682,13.323,5441,8.477,5918,14.389]],["keywords/1253",[]],["title/1254",[1023,407.123]],["content/1254",[3,3.04,112,6.295,223,4.12,224,2.137,258,3.754,277,3.966,335,5.233,397,3.974,399,3.843,489,8.865,575,5.572,707,6.487,842,6.409,1124,10.339,1126,6.467,3275,7.914,3280,15.267,3307,15.814,4684,17.418,4685,21.504,5919,18.811]],["keywords/1254",[]],["title/1255",[1217,620.495,1220,617.512]],["content/1255",[9,10.722,16,3.442,22,1.619,61,5.815,92,7.427,115,6.207,163,5.542,224,1.892,228,4.625,258,3.324,272,8.523,281,3.839,303,7.128,367,6.316,389,8.818,461,8.882,594,7.427,646,9.977,658,6.675,693,6.226,804,6.863,823,7.357,849,8.042,1023,3.912,1217,9.682,1220,10.671,1221,6.477,1222,8.947,1956,9.083,2020,7.256,2037,11.349]],["keywords/1255",[]],["title/1256",[291,378.221,1014,574.998]],["content/1256",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1256",[]],["title/1257",[5425,1364.669]],["content/1257",[]],["keywords/1257",[]],["title/1258",[2042,532.102]],["content/1258",[13,4.672,22,1.574,24,4.194,62,8.737,69,4.518,73,5.601,186,5.038,224,1.839,226,3.649,244,7.435,281,4.868,340,4.7,352,6.096,445,4.958,513,6.87,526,4.595,575,5.066,627,5.373,644,6.464,804,6.672,831,11.384,1074,8.079,1078,11.033,1133,5.817,1142,5.653,1313,10.293,1794,10.17,2023,9.54,2027,8.18,2095,11.214,5425,12.749,5714,13.141,5740,14.992,5741,14.992,5920,16.192]],["keywords/1258",[]],["title/1259",[16,250.43]],["content/1259",[2,2.13,3,3.308,16,2.957,22,1.99,25,5.808,47,9.258,89,4.411,168,4.132,223,4.482,282,3.892,335,4.612,574,9.304,875,5.71,5425,16.114]],["keywords/1259",[]],["title/1260",[282,329.633]],["content/1260",[3,1.666,11,6.245,13,4.518,14,5.339,16,1.489,18,5.308,19,3.547,20,3.43,22,1.496,30,3.296,62,9.483,73,5.323,103,4.451,113,3.622,120,4.618,130,4.64,155,4.068,168,4.627,186,4.788,195,2.523,221,5.175,223,3.37,258,2.057,282,2.927,291,5.053,335,5.165,389,8.147,397,2.177,399,3.144,426,7.277,512,5.578,513,6.529,556,4.491,627,5.196,685,6.917,831,10.585,895,3.091,896,5.735,993,5.578,1014,6.42,1078,13.914,1142,5.372,1679,4.733,1709,5.537,1716,4.92,1875,5.18,1943,5.907,2020,4.491,2027,7.774,3514,6.553,3518,6.817,3533,6.399,3848,6.636,5425,12.116,5441,6.073,5744,8.666,5921,10.308]],["keywords/1260",[]],["title/1261",[1023,407.123]],["content/1261",[11,5.044,62,7.659,168,3.737,223,4.054,224,2.103,258,3.694,277,3.903,335,4.171,397,3.91,399,3.782,640,13.855,707,6.384,842,6.307,896,6.899,3430,9.181,3432,8.868,3514,11.768,3518,12.243,5516,10.515,5725,13.855,5727,15.563,5728,15.563,5922,18.511,5923,18.511,5924,18.511,5925,18.511]],["keywords/1261",[]],["title/1262",[291,378.221,1014,574.998]],["content/1262",[2,1.479,13,3.144,22,1.382,31,3.673,79,3.837,161,5.527,168,4.445,173,5.333,205,9.075,208,5.88,224,1.615,266,6.771,277,2.996,288,7.37,291,7.002,300,9.271,329,5.527,348,7.579,367,8.963,380,8.542,394,6.368,397,3.002,399,3.955,458,6.278,467,5.763,536,9.035,540,6.886,544,9.906,545,9.537,546,5.61,602,7.273,616,3.624,746,6.43,792,5.857,829,6.398,1014,10.317,1076,9.843,1091,7.812,1624,7.472,1684,8.374,1864,9.537,2025,8.145,3430,7.049,3432,6.809,5425,15.242,5441,8.374]],["keywords/1262",[]],["title/1263",[1824,574.998,5926,1085.254]],["content/1263",[]],["keywords/1263",[]],["title/1264",[2042,532.102]],["content/1264",[2,2.111,3,3.279,22,1.972,25,5.757,127,4.952,223,4.443,224,2.305,335,4.572,340,4.516,575,4.868,873,9.561,1824,8.463,2208,12.897,5926,15.974,5927,20.288]],["keywords/1264",[]],["title/1265",[16,250.43]],["content/1265",[2,2.075,3,3.889,16,2.881,22,1.939,25,5.659,89,4.297,168,4.026,185,6.962,223,4.367,224,2.265,244,9.156,282,3.792,330,6.733,875,5.564,1824,8.318,5926,15.7]],["keywords/1265",[]],["title/1266",[282,329.633]],["content/1266",[]],["keywords/1266",[]],["title/1267",[258,345.873]],["content/1267",[18,5.599,19,3.401,22,1.93,31,3.813,65,6.707,112,4.938,113,3.473,186,4.59,195,2.021,223,3.231,282,2.806,307,6.684,335,5.409,426,7.305,440,5.716,448,5.135,519,8.109,575,4.764,647,7.399,895,5.954,1126,7.715,1143,7.407,1210,9.407,1707,7.868,1708,7.189,1716,4.717,1875,4.967,2121,9.16,2182,10.218,3403,8.867,4559,13.351,4574,10.587,4590,8.381,4591,11.933,4601,10.053]],["keywords/1267",[]],["title/1268",[771,491.801,1535,444.891,3663,702.361]],["content/1268",[16,1.993,18,3.082,174,7.834,195,1.89,225,6.644,316,5.403,320,6.84,464,3.455,490,3.848,498,16.222,511,6.607,646,8.797,660,6.465,681,7.2,693,6.609,749,10.749,792,5.683,833,7.641,1121,6.57,1132,13.888,1221,8.428,1291,11.193,1516,8.996,1535,8.428,1759,10.573,1824,5.753,2020,6.009,2241,11.595,2260,14.538,2438,14.932,3663,16.437,3701,14.194,3839,12.77,4728,9.397,5926,10.859,5928,13.792,5929,11.595,5930,13.792,5931,13.792,5932,18.964,5933,11.595,5934,13.792]],["keywords/1268",[]],["title/1269",[399,354.058]],["content/1269",[18,4.656,19,4.802,113,4.904,168,4.988,195,2.854,282,3.962,426,6.075,1707,11.109,1716,6.661,1875,7.013,3533,12.933]],["keywords/1269",[]],["title/1270",[1023,407.123]],["content/1270",[2,2.429,112,6.347,168,3.829,223,4.153,224,2.154,258,3.784,277,3.998,335,4.273,397,4.006,399,3.874,575,4.55,707,6.54,842,6.461,1124,10.423,1125,13.134,1126,6.52,1142,6.621,1824,7.911,3430,9.405,3432,9.085,5516,10.773,5935,18.964]],["keywords/1270",[]],["title/1271",[61,298.102,648,717.825,1824,356.201,4728,581.805,5926,672.297]],["content/1271",[61,8.625,92,9.289,224,2.367,616,5.312,647,7.764,648,17.514,1267,8.839,1824,8.691,4728,14.195,5926,16.403,5936,20.833]],["keywords/1271",[]],["title/1272",[18,255.701,1217,515.041,1220,512.565]],["content/1272",[13,5.087,16,2.675,18,4.137,127,4.518,258,4.589,265,10.803,427,6.716,490,5.165,616,4.72,677,8.254,693,4.839,870,12.075,1217,10.352,1220,11.722,1221,7.198,1230,11.924,1241,12.243,1830,12.82,5937,18.511]],["keywords/1272",[]],["title/1273",[5427,1328.705]],["content/1273",[]],["keywords/1273",[]],["title/1274",[2042,532.102]],["content/1274",[13,4.917,22,2.161,66,3.871,103,7.571,223,3.84,224,1.992,226,3.951,340,3.903,352,5.062,439,9.283,526,6.307,563,12.851,638,11.147,652,7.395,921,7.505,1596,19.805,1947,13.442,3196,13.806,5427,17.039,5938,17.535,5939,16.236,5940,17.535,5941,14.231,5942,16.236,5943,17.535]],["keywords/1274",[]],["title/1275",[265,804.379,1596,1118.642]],["content/1275",[3,3.352,19,4.781,20,5.241,22,1.532,31,4.071,49,4.053,52,6.388,66,3.478,67,7.505,79,4.252,104,14.586,113,3.708,223,3.45,263,6.367,422,4.849,426,4.594,439,8.34,447,6.241,464,3.947,465,8.493,469,5.811,551,6.388,728,11.584,818,7.424,846,7.589,849,5.891,930,8.4,1267,6.684,1596,18.817,1678,12.785,1679,7.234,3196,12.404,5839,14.586,5944,15.753,5945,15.753,5946,15.753,5947,13.818,5948,15.753]],["keywords/1275",[]],["title/1276",[993,619.168,998,687.605,5427,877.073]],["content/1276",[22,2.062,31,4.214,79,5.726,103,7.04,106,5.935,173,7.96,185,5.693,223,4.646,263,5.006,367,6.183,426,4.755,465,8.284,503,10.241,556,7.104,557,7.169,563,13.633,616,4.158,712,8.962,993,14.01,1393,8.399,1592,12.5,2633,12.204,3196,16.702,5427,18.075,5949,16.305,5950,21.212]],["keywords/1276",[]],["title/1277",[282,329.633]],["content/1277",[3,1.735,13,4.609,14,5.503,18,4.967,19,3.656,20,3.572,22,2.161,30,5.071,31,2.775,61,3.748,108,5.293,113,3.733,160,9.765,223,3.473,258,2.142,270,3.358,282,3.016,340,2.39,374,3.974,399,3.24,422,3.305,426,7.018,439,5.684,447,4.253,448,3.737,563,9.171,575,2.576,579,4.881,604,8.17,622,8.224,638,11.99,652,7.395,771,6.818,808,4.575,873,5.059,895,4.756,921,4.595,926,5.567,1155,7.866,1165,7.315,1596,18.038,1716,5.071,1875,5.339,1947,8.23,2122,5.293,2967,9.417,3196,8.453,3423,7.003,5427,18.939,5829,9.941,5939,20.579,5941,12.872,5942,9.941,5951,9.941,5952,9.941,5953,9.941,5954,10.736,5955,10.736,5956,10.736,5957,10.736]],["keywords/1277",[]],["title/1278",[1023,407.123]],["content/1278",[223,4.153,224,2.154,258,3.784,277,3.998,397,4.006,399,3.874,563,13.496,604,9.768,622,12.104,707,6.54,842,6.461,1165,12.922,3432,9.085,5516,10.773,5725,14.194,5951,17.56,5952,17.56,5953,17.56,5958,18.964,5959,18.964,5960,18.964]],["keywords/1278",[]],["title/1279",[291,378.221,1014,574.998]],["content/1279",[2,2.228,3,3.836,13,4.736,14,5.738,31,4.274,79,4.464,220,7.017,223,4.688,224,1.879,225,7.966,291,5.874,387,8.012,464,4.143,547,8.518,563,9.562,606,9.651,631,9.839,743,12.737,1014,6.899,1267,9.083,1535,6.431,1636,14.505,1995,11.268,3196,18.691,5427,16.412,5961,16.537,5962,16.537,5963,16.537,5964,16.537,5965,16.537]],["keywords/1279",[]],["title/1280",[1824,723.04]],["content/1280",[]],["keywords/1280",[]],["title/1281",[2042,532.102]],["content/1281",[1,3.674,2,1.697,3,2.635,15,4.058,22,1.585,25,4.627,66,4.683,68,7.855,69,5.919,168,3.292,199,12.498,223,3.571,224,2.41,226,4.78,335,5.313,340,3.629,352,4.708,367,8.044,370,7.305,458,7.202,518,6.341,575,5.089,627,4.149,829,7.34,1133,7.621,1824,8.849,4574,8.695,5966,14.302,5967,12.838,5968,14.302,5969,18.606]],["keywords/1281",[]],["title/1282",[864,626.718]],["content/1282",[18,3.521,19,3.631,22,2.016,61,8.602,92,7.024,127,3.845,205,7.385,224,1.79,272,10.613,279,5.181,335,3.55,354,3.887,367,5.974,513,6.684,516,8.799,546,6.218,574,7.162,616,5.289,627,4.008,646,7.308,647,5.871,693,4.118,704,6.218,752,6.171,849,5.891,1150,5.483,1151,8.727,1215,7.162,1217,7.092,1220,7.058,1267,6.684,1538,10.141,1758,11.1,1824,9.672,1988,8.838,3053,9.78,4700,12.404,5970,14.586,5971,13.818]],["keywords/1282",[]],["title/1283",[335,257.805,1151,633.815,1824,477.276]],["content/1283",[2,1.721,16,2.389,66,4.726,69,4.614,112,5.534,115,6.163,127,4.036,161,6.431,163,5.502,226,3.726,279,7.041,325,7.922,335,5.349,396,6.87,445,5.064,574,7.518,627,5.447,693,6.562,1074,8.252,1151,11.86,1189,8.514,1215,9.732,1217,9.637,1220,10.635,1290,9.651,1824,6.899,2461,11.871]],["keywords/1283",[]],["title/1284",[16,250.43]],["content/1284",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,1824,7.911]],["keywords/1284",[]],["title/1285",[282,329.633]],["content/1285",[13,3.285,18,4.785,19,2.266,20,3.27,22,2.081,30,6.845,31,2.54,43,2.581,65,4.468,108,4.845,112,4.969,113,3.495,137,5.204,180,4.762,181,4.117,186,3.058,223,3.252,226,3.346,258,1.961,282,1.869,307,6.024,335,4.824,340,2.188,426,7.183,440,3.808,448,5.168,498,7.356,519,5.402,575,5.136,626,4.559,632,8.017,647,5.533,681,5.131,693,5.596,748,5.28,771,7.692,792,4.05,808,4.188,1126,6.152,1210,7.035,1221,5.774,1401,4.559,1535,7.754,1708,4.789,1716,3.143,1875,3.309,2094,8.648,2121,6.102,2182,6.807,3663,14.774,3701,13.393,3850,6.595,4559,10.646,4563,5.204,4574,9.542,4590,5.583,4591,10.755,4592,6.034,4601,6.697,4608,7.198,4609,6.248,4683,6.807,5001,6.926,5002,6.926,5972,8.621,5973,8.621,5974,8.621]],["keywords/1285",[]],["title/1286",[43,256.768,226,220.355,1824,407.945,4563,517.722]],["content/1286",[2,0.667,3,1.711,13,1.419,16,2.268,18,1.433,19,1.478,22,2.148,30,4.324,31,1.658,42,3.039,43,6.078,66,2.986,69,1.79,75,3.743,78,3.498,89,1.382,112,2.146,113,2.493,137,7.16,168,3.17,174,3.643,223,4.097,224,1.203,226,4.46,251,3.159,263,3.251,270,2.006,275,3.937,281,1.478,282,2.572,284,1.928,291,3.711,307,4.553,329,4.118,335,3.047,340,1.428,350,4.242,363,3.304,368,2.334,370,2.873,389,3.396,399,1.31,405,6.123,417,3.612,426,1.87,427,5.696,428,3.919,437,3.282,448,3.686,457,2.873,464,3.933,465,3.513,490,2.955,498,10.122,509,3.779,512,3.471,515,3.282,573,3.982,626,2.975,646,2.975,670,5.05,693,5.607,749,8.618,767,3.498,808,2.733,809,4.8,818,3.023,823,2.833,833,3.553,873,3.023,920,3.372,1014,4.418,1113,3.2,1121,3.055,1132,9.904,1215,2.916,1221,6.757,1309,4.028,1401,4.912,1445,4.519,1535,5.259,1555,4.8,1590,4.304,1628,4.129,1679,2.945,1709,3.445,1716,2.051,1793,4.442,1803,3.372,1824,6.549,1837,3.2,1875,2.159,1988,2.733,2020,2.794,2025,3.675,2047,4.442,2078,3.445,2094,4.593,2122,3.162,2127,3.855,2260,4.917,2422,3.937,2438,13.682,3533,3.982,3663,13.169,3701,10.122,4559,11.777,4563,9.2,4574,3.42,4590,3.643,4591,11.245,4592,8.303,4595,4.697,4603,4.917,4604,4.917,4605,4.917,4606,4.8,4607,4.917,4702,4.697,4710,8.338,4711,5.05,4712,5.05,4713,7.926,4714,5.05,4715,5.05,4716,5.05,4717,5.392,4718,5.392,5441,3.779,5929,5.392,5933,5.392,5975,5.626,5976,5.626,5977,5.626]],["keywords/1286",[]],["title/1287",[1023,407.123]],["content/1287",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1125,13.242,1126,6.573,3308,14.003,3430,9.483,3432,9.159,5516,10.861]],["keywords/1287",[]],["title/1288",[61,341.406,272,500.408,557,429.944,1824,407.945]],["content/1288",[22,2.13,61,8.431,92,7.646,205,8.038,224,1.948,272,11.213,279,5.639,354,4.231,367,6.502,513,7.275,516,9.577,546,6.768,574,7.795,616,5.588,627,4.363,646,7.954,693,4.482,704,6.768,849,6.412,1150,5.968,1151,9.499,1215,7.795,1217,7.719,1220,7.682,1267,7.275,1538,11.038,1758,12.082,1824,9.141,1988,7.307,5971,15.04]],["keywords/1288",[]],["title/1289",[864,626.718]],["content/1289",[2,0.878,9,5.432,15,2.1,16,3.198,22,1.582,31,2.181,49,2.171,61,5.679,66,3.592,69,4.539,79,2.278,92,7.253,112,6.684,113,1.986,115,4.921,127,2.06,161,3.281,163,4.393,172,4.921,198,3.855,219,3.817,224,1.848,226,1.901,228,2.343,258,2.635,272,4.318,279,4.343,281,3.044,289,6.063,303,3.611,325,4.042,335,4.773,340,1.878,367,6.168,372,2.604,385,2.767,396,3.506,404,2.875,411,4.467,423,4.879,426,2.461,448,2.937,457,3.78,556,5.753,574,3.836,594,3.762,626,3.914,627,4.139,644,3.369,646,7.546,647,7.443,651,5.333,658,3.382,682,3.356,693,5.786,752,3.306,804,3.477,808,3.596,810,3.799,823,3.727,829,3.799,849,4.938,875,2.354,920,4.436,1023,1.982,1074,4.21,1150,2.937,1189,3.356,1210,9.464,1212,4.602,1215,10.063,1217,8.284,1220,8.948,1221,5.135,1222,4.533,1230,6.847,1290,7.706,1988,8.511,2037,5.75,2046,7.375,2047,9.145,2132,4.405,3440,5.662,3578,6.18,3668,9.145,3669,5.662,3670,5.844,3814,6.18,4598,6.469,4601,11.084,4664,5.75,5978,7.094,5979,7.813,5980,7.813]],["keywords/1289",[]],["title/1290",[291,378.221,1014,574.998]],["content/1290",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1290",[]],["title/1291",[15,284.75,43,300.406,428,423.455]],["content/1291",[3,3.223,40,12.676,43,6.319,321,9.552,368,7.258,427,7.234,428,8.907,448,6.94,465,7.984,1803,12.652,1824,8.318,2078,10.711,4590,11.327]],["keywords/1291",[]],["title/1292",[382,745.942,2473,745.942]],["content/1292",[1,0.618,2,0.524,11,1.371,13,1.113,18,0.613,19,1.16,22,0.678,23,3.025,24,0.711,25,0.779,29,1.703,30,2.76,31,0.709,34,2.054,35,1.815,36,1.055,39,1.649,40,1.744,41,1.361,43,0.72,49,0.706,52,1.113,59,1.212,62,1.135,64,3.234,66,0.606,68,1.322,69,0.766,71,2.183,73,0.949,77,1.666,79,0.741,87,1.14,92,1.223,97,1.223,103,1.185,106,0.999,113,1.185,119,1.587,120,1.229,127,1.228,128,1.703,136,1.059,137,1.453,139,2.311,141,2.307,160,1.286,168,1.407,172,1.023,173,1.03,174,1.559,181,1.149,183,2.307,185,0.958,186,1.566,192,1.361,194,1.79,195,0.376,196,1.063,199,1.617,208,2.082,211,1.666,225,1.322,226,0.618,230,2.924,231,2.009,244,1.26,251,1.501,254,1.369,262,1.185,267,1.766,277,0.578,283,1.03,287,1.174,289,3.201,290,1.18,291,0.753,296,1.079,300,1.79,303,2.154,307,0.924,312,1.174,320,1.361,330,2.354,335,1.134,338,1.433,343,1.019,349,1.601,362,3.057,364,1.545,367,1.04,368,0.999,369,1.443,374,1.016,382,4.672,385,0.9,386,1.353,397,0.58,404,0.935,405,1.587,408,1.169,409,1.485,410,1.649,416,1.423,422,2.146,426,0.8,427,0.995,428,1.016,432,1.229,435,1.395,439,1.453,440,1.95,452,1.617,455,1.443,458,1.212,463,1.841,464,1.261,465,1.67,467,1.113,469,1.012,485,2.193,494,1.423,495,1.012,503,1.723,505,1.395,511,2.411,520,1.633,522,3.199,526,0.779,528,1.79,533,1.254,539,1.934,550,1.286,551,1.113,563,2.91,568,1.048,572,1.666,575,0.658,594,1.223,603,1.273,607,1.223,608,1.601,614,1.744,625,1.474,627,0.698,631,1.633,642,1.453,646,1.273,647,1.876,654,1.423,677,1.223,681,1.433,682,1.091,686,2.01,689,0.771,693,0.717,695,4.231,697,1.395,704,1.083,712,1.508,713,2.227,717,1.369,719,1.508,720,1.79,721,1.353,730,1.666,736,1.453,746,1.241,775,2.161,781,1.87,792,1.131,808,2.145,812,1.229,818,1.293,833,1.52,835,2.398,837,1.703,846,1.322,855,2.01,856,1.617,860,1.485,861,1.97,863,1.815,870,1.79,875,0.766,876,1.766,897,1.037,902,1.206,906,1.229,909,1.533,964,2.575,974,1.572,976,2.163,1006,2.307,1007,1.433,1008,1.329,1020,1.508,1022,1.52,1028,2.01,1032,1.815,1042,1.104,1043,1.601,1050,1.149,1063,1.485,1081,2.054,1102,2.161,1126,0.943,1141,1.744,1146,2.01,1148,2.104,1158,1.815,1189,2.002,1198,1.934,1204,1.572,1210,1.3,1221,1.067,1234,1.87,1260,1.934,1261,1.934,1270,1.766,1273,1.685,1280,1.841,1300,2.054,1312,1.649,1331,2.307,1337,1.744,1341,2.307,1391,1.766,1393,3.591,1396,1.766,1398,2.307,1399,1.87,1400,1.87,1453,1.496,1455,1.649,1456,2.104,1470,2.054,1471,1.9,1486,2.161,1493,2.307,1497,2.054,1535,1.067,1551,1.841,1559,1.79,1561,1.744,1565,1.744,1569,1.9,1592,2.104,1594,1.533,1633,1.633,1639,1.97,1643,1.3,1660,2.227,1679,1.26,1708,1.337,1716,0.877,1731,1.617,1736,2.01,1745,1.841,1757,2.01,1762,1.666,1768,1.572,1770,2.01,1794,1.723,1799,1.815,1802,2.01,1824,2.1,1832,1.496,1856,1.744,1857,1.766,1876,1.703,1923,1.766,1943,1.572,1944,2.307,1952,2.227,1970,2.227,1974,1.353,1986,1.703,1989,1.703,1995,1.87,2022,2.161,2049,2.227,2078,1.474,2081,1.649,2086,1.601,2094,1.19,2120,3.283,2127,1.649,2131,1.766,2170,1.841,2177,1.97,2190,2.227,2216,3.328,2247,2.161,2248,1.559,2264,1.934,2272,2.227,2317,3.485,2462,1.723,2470,1.79,2473,4.672,2510,2.835,2542,2.161,2549,1.841,2550,1.87,2559,1.87,2564,1.559,2594,1.815,2607,1.649,2823,1.815,2968,1.815,3009,1.9,3034,1.649,3088,2.307,3138,2.104,3173,2.307,3217,2.161,3221,3.613,3330,1.97,3395,1.545,3430,1.361,3626,3.161,3655,2.104,3663,1.685,3788,1.815,3872,2.104,3891,2.104,3935,1.79,4153,1.9,4208,2.227,4266,1.723,4372,2.227,4541,3.161,4563,1.453,4574,1.463,4584,1.79,4590,1.559,4609,3.199,4618,1.508,4636,1.766,4777,1.87,4873,2.01,4889,2.307,4900,2.307,5105,2.227,5177,2.104,5226,2.01,5231,2.104,5273,2.307,5523,1.934,5524,1.87,5525,1.934,5527,1.934,5529,1.815,5532,1.934,5533,1.9,5536,1.9,5539,2.054,5540,1.934,5543,1.9,5544,1.766,5556,1.934,5558,1.9,5559,2.054,5561,1.934,5566,1.87,5574,1.9,5578,1.934,5581,2.01,5583,1.934,5585,2.01,5593,1.9,5595,2.01,5598,2.054,5605,2.054,5612,3.485,5616,1.87,5629,1.9,5640,2.054,5643,1.934,5644,3.485,5649,1.934,5650,1.934,5652,2.054,5653,2.054,5654,1.9,5655,1.934,5658,1.934,5663,2.054,5671,2.054,5674,2.054,5683,1.9,5687,1.934,5694,1.815,5695,1.934,5709,3.377,5756,5.861,5765,2.227,5770,2.161,5810,2.161,5870,2.307,5981,2.407,5982,2.407,5983,2.407,5984,2.407,5985,2.407,5986,2.407,5987,2.407,5988,2.407,5989,2.407,5990,2.407,5991,2.407,5992,2.407,5993,2.407,5994,2.407,5995,2.407,5996,2.407,5997,2.407,5998,2.407,5999,2.407,6000,2.407,6001,2.407,6002,2.407,6003,2.407,6004,2.407,6005,2.407,6006,2.407,6007,2.407,6008,2.407,6009,2.407,6010,2.407,6011,2.407,6012,2.407,6013,2.407,6014,2.407,6015,2.407,6016,2.407,6017,2.407,6018,2.407,6019,2.407,6020,2.161,6021,2.407,6022,2.407,6023,2.407,6024,2.407,6025,2.407,6026,2.407,6027,2.407,6028,2.407,6029,2.407,6030,2.407,6031,2.407,6032,2.407,6033,2.407,6034,2.407,6035,2.407,6036,2.407,6037,2.407,6038,2.407,6039,2.407,6040,2.407,6041,2.407,6042,2.161,6043,2.407,6044,2.307,6045,2.407,6046,2.407,6047,2.407,6048,2.407,6049,2.407,6050,2.407,6051,2.407,6052,2.407,6053,2.407,6054,2.407,6055,2.407,6056,2.161,6057,2.407,6058,2.407,6059,2.407,6060,2.407,6061,2.407,6062,2.407,6063,2.407,6064,2.407,6065,2.407,6066,2.407,6067,2.407,6068,2.407,6069,2.407,6070,2.407,6071,2.407,6072,2.407,6073,2.407,6074,2.407,6075,2.407,6076,2.407,6077,2.407,6078,2.407,6079,2.407,6080,2.407,6081,2.407,6082,2.407,6083,2.407,6084,2.407,6085,2.407,6086,2.407,6087,2.407,6088,2.407,6089,2.407,6090,2.407,6091,4.414,6092,2.407,6093,2.407,6094,2.407,6095,2.407,6096,2.407,6097,2.307,6098,2.407,6099,4.414,6100,4.414,6101,2.407,6102,2.407,6103,2.407,6104,2.407,6105,2.407,6106,4.414,6107,2.407,6108,2.161,6109,2.407,6110,2.407,6111,2.407,6112,2.407,6113,2.407,6114,2.407,6115,2.407,6116,2.407,6117,2.407,6118,2.407,6119,2.407,6120,2.407,6121,2.407,6122,2.407,6123,2.407,6124,2.407,6125,2.407,6126,2.407,6127,2.407,6128,2.407,6129,2.407,6130,2.407,6131,2.407,6132,2.407,6133,2.407,6134,2.407,6135,2.407,6136,2.407,6137,2.407,6138,2.407,6139,2.407,6140,2.407,6141,2.407,6142,4.414,6143,2.407,6144,2.407,6145,2.227,6146,2.407,6147,2.407,6148,2.407,6149,2.407,6150,2.407,6151,2.407,6152,2.407,6153,2.407,6154,2.407,6155,2.161,6156,2.407,6157,2.407,6158,2.407,6159,2.407,6160,2.407,6161,2.407,6162,2.407,6163,2.407,6164,2.407,6165,2.407,6166,2.407,6167,2.407,6168,2.407,6169,2.407,6170,2.407,6171,2.407,6172,2.407,6173,2.407,6174,2.407,6175,2.407,6176,2.407,6177,2.407,6178,2.407,6179,2.407,6180,2.407,6181,2.407,6182,2.407,6183,2.161,6184,2.407,6185,4.414,6186,2.407,6187,2.407,6188,2.407,6189,4.414,6190,2.407,6191,2.407,6192,2.407,6193,2.407,6194,2.407,6195,2.407,6196,4.414,6197,2.407,6198,2.407,6199,2.407,6200,2.407,6201,2.407,6202,2.407,6203,2.407,6204,2.407,6205,2.407,6206,2.407,6207,2.407,6208,2.407,6209,2.407,6210,2.407,6211,4.414,6212,2.407,6213,2.407,6214,2.407,6215,2.407,6216,2.161,6217,2.407,6218,2.407,6219,2.407,6220,2.407,6221,2.407,6222,2.407,6223,2.407,6224,2.407,6225,2.407,6226,2.407,6227,2.407,6228,2.407,6229,2.407,6230,2.407,6231,2.407,6232,2.407,6233,2.407,6234,2.407,6235,2.407,6236,2.407,6237,2.407,6238,2.407,6239,2.227,6240,2.407,6241,2.407,6242,2.407,6243,2.407,6244,2.407,6245,2.407,6246,2.407,6247,2.407,6248,2.407]],["keywords/1292",[]],["title/1293",[5848,1021.147]],["content/1293",[66,3.901,87,7.34,167,10.216,223,4.891,224,2.782,230,7.563,251,6.663,263,5.424,351,10.216,370,10.971,372,6.893,682,7.027,698,9.162,741,9.635,1350,12.039,1442,9.868,1812,10.73,2251,12.039,2444,12.939,2608,10.124,2963,13.911,3270,13.545,3935,11.525,5848,10.409]],["keywords/1293",[]],["title/1294",[61,341.406,172,364.419,1150,340.348,1824,407.945]],["content/1294",[]],["keywords/1294",[]],["title/1295",[2042,532.102]],["content/1295",[1,3.674,2,1.697,3,2.635,15,4.058,22,1.585,25,4.627,66,4.683,68,7.855,69,5.919,168,3.292,199,12.498,223,3.571,224,2.41,226,4.78,335,5.313,340,3.629,352,4.708,367,8.044,370,7.305,458,7.202,518,6.341,575,5.089,627,4.149,829,7.34,1133,7.621,1824,8.849,4574,8.695,5966,14.302,5967,12.838,5968,14.302,5969,18.606]],["keywords/1295",[]],["title/1296",[864,626.718]],["content/1296",[]],["keywords/1296",[]],["title/1297",[61,298.102,163,284.088,172,318.197,1150,297.179,6249,790.599]],["content/1297",[2,2.168,112,8.268,279,6.852,335,4.694,367,7.9,385,6.832,626,9.664,651,8.414,1215,11.973]],["keywords/1297",[]],["title/1298",[693,299.043,1217,515.041,1220,512.565]],["content/1298",[13,4.901,15,3.581,16,2.079,22,1.399,24,5.057,25,2.676,31,2.437,49,2.426,61,3.292,66,2.082,69,2.631,82,6.645,92,4.205,94,6.328,112,6.533,115,3.514,127,2.302,136,6.735,146,4.857,219,4.266,224,1.635,226,2.125,263,2.895,297,3.984,330,5.891,334,3.886,335,3.242,343,3.502,345,4.09,357,4.421,374,5.326,385,3.093,404,3.213,422,5.37,445,2.887,448,3.282,457,4.225,575,2.263,603,6.675,616,2.405,625,5.066,641,6.297,644,5.744,647,6.502,651,5.812,693,2.465,707,3.252,779,8.738,810,4.245,812,4.225,864,3.41,920,4.958,946,6.151,1049,4.493,1143,4.734,1150,6.072,1163,8.104,1165,6.426,1210,6.817,1212,5.143,1215,4.287,1217,4.245,1220,10.324,1230,9.047,1237,4.89,1241,12.91,1267,4.001,1507,10.139,1859,5.267,2078,5.066,2132,4.923,2449,7.058,2450,15.394,2451,13.058,2452,12.777,2453,7.058,2454,6.769,2455,6.328,2456,6.769,2457,7.058,2462,5.923,2469,15.37,2470,6.151,2471,7.928,2472,8.271,2473,5.104,3440,6.328,3814,6.906,4601,6.426,5978,7.928]],["keywords/1298",[]],["title/1299",[16,250.43]],["content/1299",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,1824,7.911]],["keywords/1299",[]],["title/1300",[282,329.633]],["content/1300",[13,3.285,18,4.785,19,2.266,20,3.27,22,2.081,30,6.845,31,2.54,43,2.581,65,4.468,108,4.845,112,4.969,113,3.495,137,5.204,180,4.762,181,4.117,186,3.058,223,3.252,226,3.346,258,1.961,282,1.869,307,6.024,335,4.824,340,2.188,426,7.183,440,3.808,448,5.168,498,7.356,519,5.402,575,5.136,626,4.559,632,8.017,647,5.533,681,5.131,693,5.596,748,5.28,771,7.692,792,4.05,808,4.188,1126,6.152,1210,7.035,1221,5.774,1401,4.559,1535,7.754,1708,4.789,1716,3.143,1875,3.309,2094,8.648,2121,6.102,2182,6.807,3663,14.774,3701,13.393,3850,6.595,4559,10.646,4563,5.204,4574,9.542,4590,5.583,4591,10.755,4592,6.034,4601,6.697,4608,7.198,4609,6.248,4683,6.807,5001,6.926,5002,6.926,5972,8.621,5973,8.621,5974,8.621]],["keywords/1300",[]],["title/1301",[43,256.768,226,220.355,1824,407.945,4563,517.722]],["content/1301",[2,0.698,3,1.776,13,1.484,16,2.331,18,1.5,19,1.547,22,2.12,30,4.462,31,1.734,42,3.179,43,6.16,66,2.426,69,1.872,75,3.916,78,3.659,89,1.446,112,2.246,113,2.587,137,7.389,168,3.258,174,3.811,223,4.187,224,1.248,226,4.549,251,3.279,263,3.374,270,2.099,275,4.119,281,1.547,282,2.654,284,2.017,291,3.83,307,4.699,329,2.609,335,3.145,340,1.494,350,4.438,363,3.456,368,2.442,370,3.006,389,3.552,399,1.371,405,6.354,417,3.779,426,1.957,427,5.854,428,4.068,437,3.434,448,3.825,457,3.006,464,3.497,465,3.646,490,3.066,498,10.446,509,3.953,512,3.631,515,3.434,573,4.166,626,3.113,646,3.113,670,5.283,693,5.7,749,8.829,809,5.022,818,3.162,823,2.964,833,3.717,873,3.162,1014,4.584,1113,3.348,1121,3.197,1132,10.221,1215,3.05,1221,6.923,1309,4.214,1445,4.728,1535,5.427,1555,5.022,1590,4.502,1679,3.081,1709,3.604,1716,2.145,1793,4.647,1803,3.527,1824,5.822,1837,3.348,1875,2.259,2020,2.923,2025,3.845,2078,3.604,2094,4.766,2122,3.308,2127,4.033,2260,5.144,2422,4.119,2438,14.017,3533,4.166,3663,13.389,3701,10.446,4559,12.01,4563,9.425,4574,3.578,4590,3.811,4591,10.7,4592,8.568,4595,4.914,4603,5.144,4604,5.144,4605,5.144,4606,5.022,4607,5.144,4702,4.914,4710,8.653,4711,5.283,4712,5.283,4713,8.225,4714,5.283,4715,5.283,4716,5.283,5441,3.953,5929,5.641,5933,5.641,5975,5.885,5976,5.885,5977,5.885]],["keywords/1301",[]],["title/1302",[1023,407.123]],["content/1302",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1125,13.242,1126,6.573,3308,14.003,3430,9.483,3432,9.159,5516,10.861]],["keywords/1302",[]],["title/1303",[864,626.718]],["content/1303",[2,1.725,9,5.594,16,3.51,22,1.612,31,2.246,61,3.034,66,4.128,97,3.875,112,6.778,115,6.177,127,2.121,161,3.379,168,1.755,195,1.191,198,3.97,219,3.931,223,1.903,224,2.301,228,3.752,258,2.696,263,2.668,279,4.444,281,3.115,282,1.653,291,2.385,293,4.854,297,3.671,325,4.163,335,4.563,340,3.007,352,2.509,367,6.286,374,3.216,385,2.85,396,3.61,404,2.961,448,3.025,461,4.634,485,3.786,526,2.466,574,6.142,575,4.486,594,6.024,626,4.031,627,3.438,644,3.469,646,7.69,647,6.968,651,5.457,658,5.415,682,5.373,693,4.887,804,3.581,823,5.968,849,6.992,920,4.569,1023,3.174,1139,6.018,1142,3.034,1165,5.921,1189,5.373,1210,6.402,1212,4.739,1215,10.173,1217,8.417,1220,9.073,1221,3.379,1222,7.258,1230,4.506,1824,3.625,2020,3.786,2132,7.054,2466,5.278,2470,5.669,2564,4.936,3404,4.894,3440,5.831,4378,7.622,4597,5.335,4598,6.662,4601,11.295,5242,6.123,5978,7.306,6250,8.69,6251,8.69,6252,14.334,6253,8.69]],["keywords/1303",[]],["title/1304",[291,378.221,1014,574.998]],["content/1304",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1304",[]],["title/1305",[15,284.75,43,300.406,428,423.455]],["content/1305",[3,3.223,40,12.676,43,6.319,321,9.552,368,7.258,427,7.234,428,8.907,448,6.94,465,7.984,1803,12.652,1824,8.318,2078,10.711,4590,11.327]],["keywords/1305",[]],["title/1306",[382,745.942,2473,745.942]],["content/1306",[1,0.618,2,0.524,11,1.371,13,1.113,18,0.613,19,1.16,22,0.678,23,3.025,24,0.711,25,0.779,29,1.703,30,2.76,31,0.709,34,2.054,35,1.815,36,1.055,39,1.649,40,1.744,41,1.361,43,0.72,49,0.706,52,1.113,59,1.212,62,1.135,64,3.234,66,0.606,68,1.322,69,0.766,71,2.183,73,0.949,77,1.666,79,0.741,87,1.14,92,1.223,97,1.223,103,1.185,106,0.999,113,1.185,119,1.587,120,1.229,127,1.228,128,1.703,136,1.059,137,1.453,139,2.311,141,2.307,160,1.286,168,1.407,172,1.023,173,1.03,174,1.559,181,1.149,183,2.307,185,0.958,186,1.566,192,1.361,194,1.79,195,0.376,196,1.063,199,1.617,208,2.082,211,1.666,225,1.322,226,0.618,230,2.924,231,2.009,244,1.26,251,1.501,254,1.369,262,1.185,267,1.766,277,0.578,283,1.03,287,1.174,289,3.201,290,1.18,291,0.753,296,1.079,300,1.79,303,2.154,307,0.924,312,1.174,320,1.361,330,2.354,335,1.134,338,1.433,343,1.019,349,1.601,362,3.057,364,1.545,367,1.04,368,0.999,369,1.443,374,1.016,382,4.672,385,0.9,386,1.353,397,0.58,404,0.935,405,1.587,408,1.169,409,1.485,410,1.649,416,1.423,422,2.146,426,0.8,427,0.995,428,1.016,432,1.229,435,1.395,439,1.453,440,1.95,452,1.617,455,1.443,458,1.212,463,1.841,464,1.261,465,1.67,467,1.113,469,1.012,485,2.193,494,1.423,495,1.012,503,1.723,505,1.395,511,2.411,520,1.633,522,3.199,526,0.779,528,1.79,533,1.254,539,1.934,550,1.286,551,1.113,563,2.91,568,1.048,572,1.666,575,0.658,594,1.223,603,1.273,607,1.223,608,1.601,614,1.744,625,1.474,627,0.698,631,1.633,642,1.453,646,1.273,647,1.876,654,1.423,677,1.223,681,1.433,682,1.091,686,2.01,689,0.771,693,0.717,695,4.231,697,1.395,704,1.083,712,1.508,713,2.227,717,1.369,719,1.508,720,1.79,721,1.353,730,1.666,736,1.453,746,1.241,775,2.161,781,1.87,792,1.131,808,2.145,812,1.229,818,1.293,833,1.52,835,2.398,837,1.703,846,1.322,855,2.01,856,1.617,860,1.485,861,1.97,863,1.815,870,1.79,875,0.766,876,1.766,897,1.037,902,1.206,906,1.229,909,1.533,964,2.575,974,1.572,976,2.163,1006,2.307,1007,1.433,1008,1.329,1020,1.508,1022,1.52,1028,2.01,1032,1.815,1042,1.104,1043,1.601,1050,1.149,1063,1.485,1081,2.054,1102,2.161,1126,0.943,1141,1.744,1146,2.01,1148,2.104,1158,1.815,1189,2.002,1198,1.934,1204,1.572,1210,1.3,1221,1.067,1234,1.87,1260,1.934,1261,1.934,1270,1.766,1273,1.685,1280,1.841,1300,2.054,1312,1.649,1331,2.307,1337,1.744,1341,2.307,1391,1.766,1393,3.591,1396,1.766,1398,2.307,1399,1.87,1400,1.87,1453,1.496,1455,1.649,1456,2.104,1470,2.054,1471,1.9,1486,2.161,1493,2.307,1497,2.054,1535,1.067,1551,1.841,1559,1.79,1561,1.744,1565,1.744,1569,1.9,1592,2.104,1594,1.533,1633,1.633,1639,1.97,1643,1.3,1660,2.227,1679,1.26,1708,1.337,1716,0.877,1731,1.617,1736,2.01,1745,1.841,1757,2.01,1762,1.666,1768,1.572,1770,2.01,1794,1.723,1799,1.815,1802,2.01,1824,2.1,1832,1.496,1856,1.744,1857,1.766,1876,1.703,1923,1.766,1943,1.572,1944,2.307,1952,2.227,1970,2.227,1974,1.353,1986,1.703,1989,1.703,1995,1.87,2022,2.161,2049,2.227,2078,1.474,2081,1.649,2086,1.601,2094,1.19,2120,3.283,2127,1.649,2131,1.766,2170,1.841,2177,1.97,2190,2.227,2216,3.328,2247,2.161,2248,1.559,2264,1.934,2272,2.227,2317,3.485,2462,1.723,2470,1.79,2473,4.672,2510,2.835,2542,2.161,2549,1.841,2550,1.87,2559,1.87,2564,1.559,2594,1.815,2607,1.649,2823,1.815,2968,1.815,3009,1.9,3034,1.649,3088,2.307,3138,2.104,3173,2.307,3217,2.161,3221,3.613,3330,1.97,3395,1.545,3430,1.361,3626,3.161,3655,2.104,3663,1.685,3788,1.815,3872,2.104,3891,2.104,3935,1.79,4153,1.9,4208,2.227,4266,1.723,4372,2.227,4541,3.161,4563,1.453,4574,1.463,4584,1.79,4590,1.559,4609,3.199,4618,1.508,4636,1.766,4777,1.87,4873,2.01,4889,2.307,4900,2.307,5105,2.227,5177,2.104,5226,2.01,5231,2.104,5273,2.307,5523,1.934,5524,1.87,5525,1.934,5527,1.934,5529,1.815,5532,1.934,5533,1.9,5536,1.9,5539,2.054,5540,1.934,5543,1.9,5544,1.766,5556,1.934,5558,1.9,5559,2.054,5561,1.934,5566,1.87,5574,1.9,5578,1.934,5581,2.01,5583,1.934,5585,2.01,5593,1.9,5595,2.01,5598,2.054,5605,2.054,5612,3.485,5616,1.87,5629,1.9,5640,2.054,5643,1.934,5644,3.485,5649,1.934,5650,1.934,5652,2.054,5653,2.054,5654,1.9,5655,1.934,5658,1.934,5663,2.054,5671,2.054,5674,2.054,5683,1.9,5687,1.934,5694,1.815,5695,1.934,5709,3.377,5756,5.861,5765,2.227,5770,2.161,5810,2.161,5870,2.307,5981,2.407,5982,2.407,5983,2.407,5984,2.407,5985,2.407,5986,2.407,5987,2.407,5988,2.407,5989,2.407,5990,2.407,5991,2.407,5992,2.407,5993,2.407,5994,2.407,5995,2.407,5996,2.407,5997,2.407,5998,2.407,5999,2.407,6000,2.407,6001,2.407,6002,2.407,6003,2.407,6004,2.407,6005,2.407,6006,2.407,6007,2.407,6008,2.407,6009,2.407,6010,2.407,6011,2.407,6012,2.407,6013,2.407,6014,2.407,6015,2.407,6016,2.407,6017,2.407,6018,2.407,6019,2.407,6020,2.161,6021,2.407,6022,2.407,6023,2.407,6024,2.407,6025,2.407,6026,2.407,6027,2.407,6028,2.407,6029,2.407,6030,2.407,6031,2.407,6032,2.407,6033,2.407,6034,2.407,6035,2.407,6036,2.407,6037,2.407,6038,2.407,6039,2.407,6040,2.407,6041,2.407,6042,2.161,6043,2.407,6044,2.307,6045,2.407,6046,2.407,6047,2.407,6048,2.407,6049,2.407,6050,2.407,6051,2.407,6052,2.407,6053,2.407,6054,2.407,6055,2.407,6056,2.161,6057,2.407,6058,2.407,6059,2.407,6060,2.407,6061,2.407,6062,2.407,6063,2.407,6064,2.407,6065,2.407,6066,2.407,6067,2.407,6068,2.407,6069,2.407,6070,2.407,6071,2.407,6072,2.407,6073,2.407,6074,2.407,6075,2.407,6076,2.407,6077,2.407,6078,2.407,6079,2.407,6080,2.407,6081,2.407,6082,2.407,6083,2.407,6084,2.407,6085,2.407,6086,2.407,6087,2.407,6088,2.407,6089,2.407,6090,2.407,6091,4.414,6092,2.407,6093,2.407,6094,2.407,6095,2.407,6096,2.407,6097,2.307,6098,2.407,6099,4.414,6100,4.414,6101,2.407,6102,2.407,6103,2.407,6104,2.407,6105,2.407,6106,4.414,6107,2.407,6108,2.161,6109,2.407,6110,2.407,6111,2.407,6112,2.407,6113,2.407,6114,2.407,6115,2.407,6116,2.407,6117,2.407,6118,2.407,6119,2.407,6120,2.407,6121,2.407,6122,2.407,6123,2.407,6124,2.407,6125,2.407,6126,2.407,6127,2.407,6128,2.407,6129,2.407,6130,2.407,6131,2.407,6132,2.407,6133,2.407,6134,2.407,6135,2.407,6136,2.407,6137,2.407,6138,2.407,6139,2.407,6140,2.407,6141,2.407,6142,4.414,6143,2.407,6144,2.407,6145,2.227,6146,2.407,6147,2.407,6148,2.407,6149,2.407,6150,2.407,6151,2.407,6152,2.407,6153,2.407,6154,2.407,6155,2.161,6156,2.407,6157,2.407,6158,2.407,6159,2.407,6160,2.407,6161,2.407,6162,2.407,6163,2.407,6164,2.407,6165,2.407,6166,2.407,6167,2.407,6168,2.407,6169,2.407,6170,2.407,6171,2.407,6172,2.407,6173,2.407,6174,2.407,6175,2.407,6176,2.407,6177,2.407,6178,2.407,6179,2.407,6180,2.407,6181,2.407,6182,2.407,6183,2.161,6184,2.407,6185,4.414,6186,2.407,6187,2.407,6188,2.407,6189,4.414,6190,2.407,6191,2.407,6192,2.407,6193,2.407,6194,2.407,6195,2.407,6196,4.414,6197,2.407,6198,2.407,6199,2.407,6200,2.407,6201,2.407,6202,2.407,6203,2.407,6204,2.407,6205,2.407,6206,2.407,6207,2.407,6208,2.407,6209,2.407,6210,2.407,6211,4.414,6212,2.407,6213,2.407,6214,2.407,6215,2.407,6216,2.161,6217,2.407,6218,2.407,6219,2.407,6220,2.407,6221,2.407,6222,2.407,6223,2.407,6224,2.407,6225,2.407,6226,2.407,6227,2.407,6228,2.407,6229,2.407,6230,2.407,6231,2.407,6232,2.407,6233,2.407,6234,2.407,6235,2.407,6236,2.407,6237,2.407,6238,2.407,6239,2.227,6240,2.407,6241,2.407,6242,2.407,6243,2.407,6244,2.407,6245,2.407,6246,2.407,6247,2.407,6248,2.407]],["keywords/1306",[]],["title/1307",[5848,1021.147]],["content/1307",[66,3.901,87,7.34,167,10.216,223,4.891,224,2.782,230,7.563,251,6.663,263,5.424,351,10.216,370,10.971,372,6.893,682,7.027,698,9.162,741,9.635,1350,12.039,1442,9.868,1812,10.73,2251,12.039,2444,12.939,2608,10.124,2963,13.911,3270,13.545,3935,11.525,5848,10.409]],["keywords/1307",[]],["title/1308",[2041,751.702]],["content/1308",[]],["keywords/1308",[]],["title/1309",[2042,532.102]],["content/1309",[1,4.239,2,1.958,3,3.04,22,1.829,25,5.338,66,5.128,69,5.249,168,4.689,223,4.12,224,2.638,335,5.233,340,4.187,347,6.78,352,5.431,415,10.105,575,4.513,771,8.086,829,8.468,1133,6.758,6254,16.5]],["keywords/1309",[]],["title/1310",[864,626.718]],["content/1310",[16,2.77,18,2.468,19,2.545,22,1.864,31,2.854,49,2.841,61,7.85,92,4.923,112,5.419,113,2.599,127,3.952,172,4.115,198,5.045,205,5.176,219,4.995,224,2.178,258,2.203,272,8.286,279,3.631,335,4.32,340,2.458,354,2.724,367,4.187,404,3.762,423,6.385,426,3.22,427,4.006,448,3.843,457,4.947,513,4.685,516,6.167,546,4.358,574,5.02,616,4.129,627,2.809,644,4.408,646,5.122,647,9.28,682,4.391,693,4.232,704,4.358,752,4.326,849,4.129,920,5.805,1150,3.843,1151,6.117,1210,11.504,1212,6.021,1215,8.716,1217,4.971,1220,4.947,1221,4.294,1230,8.396,1267,4.685,1538,7.108,1758,7.78,1988,8.998,2041,8.315,2046,6.167,2047,7.647,2132,5.765,2531,11.623,3053,6.855,3404,6.219,3440,7.409,3814,8.086,4700,8.694,5970,10.224,5971,9.685,5979,10.224,5980,10.224,6255,11.042]],["keywords/1310",[]],["title/1311",[335,257.805,1151,633.815,2041,496.196]],["content/1311",[2,1.927,66,4.087,69,5.165,112,6.195,127,4.518,163,6.159,226,4.171,279,6.088,335,5.182,445,5.668,627,4.71,693,6.538,1074,9.237,1151,12.739,1189,7.362,1215,8.416,1217,8.334,1220,10.302,1290,10.803,2041,8.029,2461,13.288]],["keywords/1311",[]],["title/1312",[16,250.43]],["content/1312",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,415,10.187,574,8.621,875,5.291,897,7.166]],["keywords/1312",[]],["title/1313",[282,329.633]],["content/1313",[2,0.904,11,6.097,16,2.395,18,4.792,19,3.115,20,2.891,22,0.845,25,2.466,30,5.3,31,2.246,65,3.951,66,4.128,79,2.346,108,4.284,112,4.522,113,3.18,155,3.43,168,4.798,172,5.035,220,3.687,221,4.363,223,4.095,224,1.535,226,4.213,228,2.413,231,3.469,258,2.696,262,3.752,270,2.718,282,2.57,291,4.549,335,5.043,340,1.934,389,7.153,397,1.836,399,2.76,417,4.894,426,6.93,429,5.395,448,4.702,512,4.703,518,3.379,556,3.786,557,5.94,569,4.506,575,4.859,647,5.035,677,3.875,693,4.333,748,4.668,749,4.31,771,7.126,808,3.703,812,3.893,818,4.095,849,5.052,993,4.703,1014,5.636,1091,4.776,1126,5.699,1210,6.402,1309,5.458,1401,4.031,1535,7.271,1679,3.99,1709,7.258,1716,4.32,1875,4.548,2020,3.786,2041,3.769,2531,6.238,2847,5.831,3553,6.662,3663,12.433,3848,5.594,3850,9.066,4683,6.018,5001,6.123,5002,6.123,5004,5.921,5005,7.053,5441,5.12,5514,7.053,5515,7.053]],["keywords/1313",[]],["title/1314",[1023,407.123]],["content/1314",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1118,14.311,1124,10.509,1125,13.242,1126,6.573,3430,9.483,3432,9.159,5516,10.861]],["keywords/1314",[]],["title/1315",[291,378.221,1014,574.998]],["content/1315",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1315",[]],["title/1316",[382,745.942,2473,745.942]],["content/1316",[1,0.917,2,0.747,3,0.658,11,1.109,13,0.9,22,0.698,25,1.155,29,2.526,30,1.301,31,1.052,39,2.445,41,2.018,43,1.068,49,1.047,52,1.65,64,1.887,66,0.898,68,1.96,69,1.135,71,3.112,73,1.407,77,2.471,79,1.098,87,1.69,97,1.814,100,2.691,107,2.124,110,1.907,113,0.958,119,2.353,136,1.571,137,2.154,139,3.295,146,2.096,155,1.606,168,1.449,172,1.516,181,1.704,185,1.421,186,2.232,192,2.018,196,1.576,199,2.397,202,2.818,211,2.471,225,1.96,226,0.917,227,1.308,230,3.26,262,1.757,265,2.375,266,1.938,267,2.619,283,1.527,287,1.741,289,4.42,290,1.749,291,1.116,303,1.741,307,1.37,312,1.741,320,2.018,330,1.374,338,2.124,343,1.511,358,2.332,362,2.471,364,2.292,368,1.481,370,1.823,374,1.506,382,6.281,384,2.619,385,1.334,394,1.823,404,1.386,405,2.353,408,1.734,409,2.202,410,2.445,416,2.11,428,1.506,432,1.823,440,2.78,452,2.397,455,2.139,458,1.797,463,2.73,464,1.798,465,1.35,466,2.445,467,1.65,485,1.773,491,2.555,493,2.17,494,3.721,505,2.069,511,3.437,518,1.582,519,2.236,528,2.654,532,2.254,533,1.859,540,1.971,550,1.907,572,2.471,575,0.976,594,1.814,603,1.887,607,1.814,620,2.498,626,1.887,651,1.643,654,2.11,658,1.631,677,1.814,679,1.887,693,1.876,696,2.619,697,2.069,704,1.606,712,2.236,717,2.03,719,2.236,721,2.006,730,4.358,746,1.841,747,2.691,753,2.921,787,2.691,792,1.677,808,1.734,812,1.823,818,1.917,829,1.832,834,2.555,835,1.938,846,1.96,858,2.292,860,2.202,871,2.056,875,1.135,897,1.537,906,1.823,908,1.462,909,2.273,938,2.421,957,4.313,964,2.082,976,3.084,1007,2.124,1008,1.971,1022,2.254,1032,2.691,1043,2.375,1063,2.202,1141,2.587,1154,2.587,1158,2.691,1189,1.618,1194,3.204,1204,2.332,1237,2.11,1270,2.619,1273,2.498,1280,2.73,1281,2.691,1308,2.619,1310,2.772,1312,4.313,1315,2.555,1344,2.471,1348,2.332,1352,2.772,1355,2.421,1393,4.958,1399,2.772,1400,2.772,1401,1.887,1453,2.219,1488,2.186,1490,2.73,1559,2.654,1561,2.587,1565,2.587,1579,3.119,1594,2.273,1611,2.421,1633,2.421,1643,3.4,1679,1.868,1703,2.921,1708,1.982,1731,2.397,1762,2.471,1775,2.186,1794,2.555,1808,2.654,1832,2.219,1856,2.587,1857,2.619,1879,2.867,1974,2.006,1989,2.526,2041,3.112,2055,2.445,2078,2.186,2081,2.445,2086,2.375,2127,2.445,2131,2.619,2170,2.73,2194,2.921,2248,2.311,2264,2.867,2473,6.281,2510,4.041,2549,2.73,2550,2.772,2564,2.311,2846,2.498,2898,3.204,2968,2.691,3009,2.818,3064,2.471,3102,2.818,3395,2.292,3536,2.867,3574,2.921,3626,2.555,3788,2.691,3887,2.818,4153,2.818,4266,2.555,4541,4.507,4609,2.587,4636,2.619,4777,2.772,4903,2.98,5226,2.98,5243,4.969,5519,3.204,5520,3.204,5521,3.302,5522,3.302,5523,2.867,5524,2.772,5525,2.867,5526,3.302,5527,2.867,5528,3.045,5529,2.691,5530,3.302,5531,3.302,5532,2.867,5533,2.818,5534,3.045,5535,3.045,5536,2.818,5537,2.818,5538,3.045,5539,3.045,5540,2.867,5541,3.045,5542,3.302,5543,2.818,5544,4.619,5545,3.045,5546,3.302,5547,3.302,5548,2.98,5549,3.302,5550,2.818,5551,3.302,5552,3.045,5553,3.302,5554,3.119,5555,3.302,5556,2.867,5557,3.302,5558,2.818,5559,3.045,5560,3.045,5561,2.867,5562,3.045,5563,3.204,5564,3.302,5565,3.302,5566,2.772,5567,3.302,5568,2.98,5569,3.204,5570,3.302,5571,3.045,5572,3.204,5573,3.302,5574,2.818,5575,3.302,5576,3.302,5577,3.302,5578,2.867,5579,3.204,5580,3.045,5581,2.98,5582,3.302,5583,2.867,5584,3.302,5585,2.98,5586,3.045,5587,3.302,5588,3.302,5589,3.302,5590,3.302,5591,3.302,5592,3.302,5593,2.818,5594,3.302,5595,2.98,5596,3.302,5597,3.302,5598,3.045,5599,3.302,5600,3.302,5601,3.302,5602,3.045,5603,3.302,5604,3.302,5605,3.045,5606,3.302,5607,2.921,5608,3.302,5609,3.045,5610,2.98,5611,3.204,5612,4.969,5613,3.045,5614,3.045,5615,3.045,5616,2.772,5617,3.045,5618,3.302,5619,2.867,5620,3.045,5621,3.045,5622,2.921,5623,3.302,5624,5.824,5625,3.302,5626,3.045,5627,3.302,5628,3.045,5629,2.818,5630,3.302,5631,3.045,5632,3.045,5633,3.302,5634,3.302,5635,3.045,5636,3.045,5637,3.302,5638,3.302,5639,3.302,5640,3.045,5641,3.045,5642,3.302,5643,2.867,5644,4.969,5645,3.302,5646,2.98,5647,3.045,5648,3.045,5649,2.867,5650,2.867,5651,3.045,5652,3.045,5653,3.045,5654,2.818,5655,2.867,5656,3.045,5657,3.302,5658,2.867,5659,3.045,5660,3.302,5661,3.045,5662,3.302,5663,3.045,5664,3.302,5665,3.045,5666,3.045,5667,3.302,5668,3.204,5669,3.045,5670,3.045,5671,3.045,5672,3.045,5673,3.045,5674,3.045,5675,3.045,5676,3.045,5677,3.045,5678,3.045,5679,3.045,5680,3.045,5681,3.045,5682,3.045,5683,2.818,5684,3.302,5685,3.302,5686,3.045,5687,2.867,5688,3.045,5689,3.302,5690,3.045,5691,3.045,5692,3.204,5693,3.045,5694,2.691,5695,2.867,5696,3.045,5697,3.302,5698,3.045,5699,2.98,5700,3.045,5701,2.98,5702,3.045,5703,3.302,5704,3.119,5705,3.045,5706,3.045,5707,3.204,5708,3.045,5709,2.73,5710,3.045,5711,3.045,5712,2.98,5713,3.045]],["keywords/1316",[]],["title/1317",[5848,1021.147]],["content/1317",[2,1.283,19,4.704,43,4.604,44,7.937,66,3.871,89,2.657,113,4.803,167,10.139,168,3.54,223,4.867,224,2.525,230,5.938,251,6.088,263,5.383,343,4.579,351,10.139,370,10.52,372,5.412,415,9.419,417,9.875,426,3.595,428,6.49,434,8.803,440,7.906,464,3.089,465,6.77,483,9.029,490,3.44,493,6.575,608,7.195,682,4.903,698,6.393,741,9.562,974,7.065,1342,9.708,1442,6.886,1812,7.488,1973,7.336,2078,11.939,2125,7.336,2251,8.401,2608,7.065,3935,8.042,4266,7.744,5123,9.708,5753,10.007,5848,7.264,6256,10.365,6257,10.365,6258,10.365,6259,10.365,6260,10.365,6261,10.365]],["keywords/1317",[]],["title/1318",[1824,477.276,1988,487.519,2046,639]],["content/1318",[]],["keywords/1318",[]],["title/1319",[2042,532.102]],["content/1319",[1,3.674,2,1.697,3,2.635,15,4.058,22,1.585,25,4.627,66,4.683,68,7.855,69,5.919,168,3.292,199,12.498,223,3.571,224,2.41,226,4.78,335,5.313,340,3.629,352,4.708,367,8.044,370,7.305,458,7.202,518,6.341,575,5.089,627,4.149,829,7.34,1133,7.621,1824,8.849,4574,8.695,5966,14.302,5967,12.838,5968,14.302,5969,18.606]],["keywords/1319",[]],["title/1320",[864,626.718]],["content/1320",[16,2.931,66,4.479,115,7.56,161,7.889,279,6.672,325,9.719,335,4.572,396,8.428,574,9.223,627,5.162,693,5.303,1189,8.068,1215,9.223,1217,9.133,1220,9.089]],["keywords/1320",[]],["title/1321",[163,325.355,693,255.603,1988,416.7,2046,546.176]],["content/1321",[2,1.746,66,4.77,69,6.669,79,4.528,92,10.657,112,5.614,115,6.252,226,3.78,279,5.517,289,9.921,335,4.869,372,5.178,556,9.413,627,4.268,646,10.023,693,4.385,752,6.572,808,7.149,810,7.552,829,7.552,1215,7.626,1290,12.609,1988,7.149,3578,12.286,3668,14.964,3669,11.257,3670,11.618,4664,11.431]],["keywords/1321",[]],["title/1322",[693,299.043,1217,515.041,1220,512.565]],["content/1322",[9,5.26,13,4.838,15,3.205,16,3.019,22,1.549,24,4.683,25,2.319,31,2.112,49,2.102,61,2.853,66,1.804,69,2.28,82,5.758,92,8.061,112,2.735,113,1.923,115,4.798,127,1.994,136,6.151,185,2.853,219,3.696,224,1.81,226,1.841,228,2.269,258,2.569,272,4.181,281,1.884,289,3.752,297,3.452,303,3.497,330,4.347,334,3.367,335,2.901,340,1.819,343,3.035,352,2.359,357,3.83,367,3.098,374,4.766,404,2.784,422,2.515,427,2.964,448,2.844,457,3.661,575,3.823,594,3.643,603,3.791,604,4.209,607,5.741,625,4.389,641,5.635,644,6.361,646,5.973,647,6.737,651,5.2,658,3.275,693,4.726,779,4.963,804,3.367,810,3.679,812,3.661,823,3.609,849,4.815,864,2.955,920,4.296,946,5.33,975,5.483,1023,1.919,1049,3.893,1210,8.566,1212,4.456,1217,7.173,1220,10.905,1221,3.177,1222,4.389,1230,8.262,1237,4.237,1241,10.537,1267,3.467,1507,5.758,1552,5.26,1988,5.486,2027,6.505,2037,5.568,2046,4.564,2078,4.389,2132,4.266,2443,6.869,2444,5.984,2445,6.869,2446,6.869,2449,6.116,2450,13.24,2451,9.637,2452,9.429,2453,6.116,2454,5.866,2455,5.483,2456,5.866,2457,6.116,2462,5.132,2463,15.199,2464,7.167,2465,7.167,2466,4.963,2467,7.167,2468,7.167,3440,5.483,3814,5.984,4598,6.264,4601,5.568,5978,6.869]],["keywords/1322",[]],["title/1323",[16,250.43]],["content/1323",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,1824,7.911]],["keywords/1323",[]],["title/1324",[282,329.633]],["content/1324",[13,3.285,18,4.785,19,2.266,20,3.27,22,2.081,30,6.845,31,2.54,43,2.581,65,4.468,108,4.845,112,4.969,113,3.495,137,5.204,180,4.762,181,4.117,186,3.058,223,3.252,226,3.346,258,1.961,282,1.869,307,6.024,335,4.824,340,2.188,426,7.183,440,3.808,448,5.168,498,7.356,519,5.402,575,5.136,626,4.559,632,8.017,647,5.533,681,5.131,693,5.596,748,5.28,771,7.692,792,4.05,808,4.188,1126,6.152,1210,7.035,1221,5.774,1401,4.559,1535,7.754,1708,4.789,1716,3.143,1875,3.309,2094,8.648,2121,6.102,2182,6.807,3663,14.774,3701,13.393,3850,6.595,4559,10.646,4563,5.204,4574,9.542,4590,5.583,4591,10.755,4592,6.034,4601,6.697,4608,7.198,4609,6.248,4683,6.807,5001,6.926,5002,6.926,5972,8.621,5973,8.621,5974,8.621]],["keywords/1324",[]],["title/1325",[43,256.768,226,220.355,1824,407.945,4563,517.722]],["content/1325",[2,0.667,3,1.711,13,1.419,16,2.268,18,1.433,19,1.478,22,2.148,30,4.324,31,1.658,42,3.039,43,6.078,66,2.986,69,1.79,75,3.743,78,3.498,89,1.382,112,2.146,113,2.493,137,7.16,168,3.17,174,3.643,223,4.097,224,1.203,226,4.46,251,3.159,263,3.251,270,2.006,275,3.937,281,1.478,282,2.572,284,1.928,291,3.711,307,4.553,329,4.118,335,3.047,340,1.428,350,4.242,363,3.304,368,2.334,370,2.873,389,3.396,399,1.31,405,6.123,417,3.612,426,1.87,427,5.696,428,3.919,437,3.282,448,3.686,457,2.873,464,3.933,465,3.513,490,2.955,498,10.122,509,3.779,512,3.471,515,3.282,573,3.982,626,2.975,646,2.975,670,5.05,693,5.607,749,8.618,767,3.498,808,2.733,809,4.8,818,3.023,823,2.833,833,3.553,873,3.023,920,3.372,1014,4.418,1113,3.2,1121,3.055,1132,9.904,1215,2.916,1221,6.757,1309,4.028,1401,4.912,1445,4.519,1535,5.259,1555,4.8,1590,4.304,1628,4.129,1679,2.945,1709,3.445,1716,2.051,1793,4.442,1803,3.372,1824,6.549,1837,3.2,1875,2.159,1988,2.733,2020,2.794,2025,3.675,2047,4.442,2078,3.445,2094,4.593,2122,3.162,2127,3.855,2260,4.917,2422,3.937,2438,13.682,3533,3.982,3663,13.169,3701,10.122,4559,11.777,4563,9.2,4574,3.42,4590,3.643,4591,11.245,4592,8.303,4595,4.697,4603,4.917,4604,4.917,4605,4.917,4606,4.8,4607,4.917,4702,4.697,4710,8.338,4711,5.05,4712,5.05,4713,7.926,4714,5.05,4715,5.05,4716,5.05,4717,5.392,4718,5.392,5441,3.779,5929,5.392,5933,5.392,5975,5.626,5976,5.626,5977,5.626]],["keywords/1325",[]],["title/1326",[1023,407.123]],["content/1326",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1125,13.242,1126,6.573,3308,14.003,3430,9.483,3432,9.159,5516,10.861]],["keywords/1326",[]],["title/1327",[291,378.221,1014,574.998]],["content/1327",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1327",[]],["title/1328",[15,284.75,43,300.406,428,423.455]],["content/1328",[3,3.223,40,12.676,43,6.319,321,9.552,368,7.258,427,7.234,428,8.907,448,6.94,465,7.984,1803,12.652,1824,8.318,2078,10.711,4590,11.327]],["keywords/1328",[]],["title/1329",[382,745.942,2473,745.942]],["content/1329",[1,0.618,2,0.524,11,1.371,13,1.113,18,0.613,19,1.16,22,0.678,23,3.025,24,0.711,25,0.779,29,1.703,30,2.76,31,0.709,34,2.054,35,1.815,36,1.055,39,1.649,40,1.744,41,1.361,43,0.72,49,0.706,52,1.113,59,1.212,62,1.135,64,3.234,66,0.606,68,1.322,69,0.766,71,2.183,73,0.949,77,1.666,79,0.741,87,1.14,92,1.223,97,1.223,103,1.185,106,0.999,113,1.185,119,1.587,120,1.229,127,1.228,128,1.703,136,1.059,137,1.453,139,2.311,141,2.307,160,1.286,168,1.407,172,1.023,173,1.03,174,1.559,181,1.149,183,2.307,185,0.958,186,1.566,192,1.361,194,1.79,195,0.376,196,1.063,199,1.617,208,2.082,211,1.666,225,1.322,226,0.618,230,2.924,231,2.009,244,1.26,251,1.501,254,1.369,262,1.185,267,1.766,277,0.578,283,1.03,287,1.174,289,3.201,290,1.18,291,0.753,296,1.079,300,1.79,303,2.154,307,0.924,312,1.174,320,1.361,330,2.354,335,1.134,338,1.433,343,1.019,349,1.601,362,3.057,364,1.545,367,1.04,368,0.999,369,1.443,374,1.016,382,4.672,385,0.9,386,1.353,397,0.58,404,0.935,405,1.587,408,1.169,409,1.485,410,1.649,416,1.423,422,2.146,426,0.8,427,0.995,428,1.016,432,1.229,435,1.395,439,1.453,440,1.95,452,1.617,455,1.443,458,1.212,463,1.841,464,1.261,465,1.67,467,1.113,469,1.012,485,2.193,494,1.423,495,1.012,503,1.723,505,1.395,511,2.411,520,1.633,522,3.199,526,0.779,528,1.79,533,1.254,539,1.934,550,1.286,551,1.113,563,2.91,568,1.048,572,1.666,575,0.658,594,1.223,603,1.273,607,1.223,608,1.601,614,1.744,625,1.474,627,0.698,631,1.633,642,1.453,646,1.273,647,1.876,654,1.423,677,1.223,681,1.433,682,1.091,686,2.01,689,0.771,693,0.717,695,4.231,697,1.395,704,1.083,712,1.508,713,2.227,717,1.369,719,1.508,720,1.79,721,1.353,730,1.666,736,1.453,746,1.241,775,2.161,781,1.87,792,1.131,808,2.145,812,1.229,818,1.293,833,1.52,835,2.398,837,1.703,846,1.322,855,2.01,856,1.617,860,1.485,861,1.97,863,1.815,870,1.79,875,0.766,876,1.766,897,1.037,902,1.206,906,1.229,909,1.533,964,2.575,974,1.572,976,2.163,1006,2.307,1007,1.433,1008,1.329,1020,1.508,1022,1.52,1028,2.01,1032,1.815,1042,1.104,1043,1.601,1050,1.149,1063,1.485,1081,2.054,1102,2.161,1126,0.943,1141,1.744,1146,2.01,1148,2.104,1158,1.815,1189,2.002,1198,1.934,1204,1.572,1210,1.3,1221,1.067,1234,1.87,1260,1.934,1261,1.934,1270,1.766,1273,1.685,1280,1.841,1300,2.054,1312,1.649,1331,2.307,1337,1.744,1341,2.307,1391,1.766,1393,3.591,1396,1.766,1398,2.307,1399,1.87,1400,1.87,1453,1.496,1455,1.649,1456,2.104,1470,2.054,1471,1.9,1486,2.161,1493,2.307,1497,2.054,1535,1.067,1551,1.841,1559,1.79,1561,1.744,1565,1.744,1569,1.9,1592,2.104,1594,1.533,1633,1.633,1639,1.97,1643,1.3,1660,2.227,1679,1.26,1708,1.337,1716,0.877,1731,1.617,1736,2.01,1745,1.841,1757,2.01,1762,1.666,1768,1.572,1770,2.01,1794,1.723,1799,1.815,1802,2.01,1824,2.1,1832,1.496,1856,1.744,1857,1.766,1876,1.703,1923,1.766,1943,1.572,1944,2.307,1952,2.227,1970,2.227,1974,1.353,1986,1.703,1989,1.703,1995,1.87,2022,2.161,2049,2.227,2078,1.474,2081,1.649,2086,1.601,2094,1.19,2120,3.283,2127,1.649,2131,1.766,2170,1.841,2177,1.97,2190,2.227,2216,3.328,2247,2.161,2248,1.559,2264,1.934,2272,2.227,2317,3.485,2462,1.723,2470,1.79,2473,4.672,2510,2.835,2542,2.161,2549,1.841,2550,1.87,2559,1.87,2564,1.559,2594,1.815,2607,1.649,2823,1.815,2968,1.815,3009,1.9,3034,1.649,3088,2.307,3138,2.104,3173,2.307,3217,2.161,3221,3.613,3330,1.97,3395,1.545,3430,1.361,3626,3.161,3655,2.104,3663,1.685,3788,1.815,3872,2.104,3891,2.104,3935,1.79,4153,1.9,4208,2.227,4266,1.723,4372,2.227,4541,3.161,4563,1.453,4574,1.463,4584,1.79,4590,1.559,4609,3.199,4618,1.508,4636,1.766,4777,1.87,4873,2.01,4889,2.307,4900,2.307,5105,2.227,5177,2.104,5226,2.01,5231,2.104,5273,2.307,5523,1.934,5524,1.87,5525,1.934,5527,1.934,5529,1.815,5532,1.934,5533,1.9,5536,1.9,5539,2.054,5540,1.934,5543,1.9,5544,1.766,5556,1.934,5558,1.9,5559,2.054,5561,1.934,5566,1.87,5574,1.9,5578,1.934,5581,2.01,5583,1.934,5585,2.01,5593,1.9,5595,2.01,5598,2.054,5605,2.054,5612,3.485,5616,1.87,5629,1.9,5640,2.054,5643,1.934,5644,3.485,5649,1.934,5650,1.934,5652,2.054,5653,2.054,5654,1.9,5655,1.934,5658,1.934,5663,2.054,5671,2.054,5674,2.054,5683,1.9,5687,1.934,5694,1.815,5695,1.934,5709,3.377,5756,5.861,5765,2.227,5770,2.161,5810,2.161,5870,2.307,5981,2.407,5982,2.407,5983,2.407,5984,2.407,5985,2.407,5986,2.407,5987,2.407,5988,2.407,5989,2.407,5990,2.407,5991,2.407,5992,2.407,5993,2.407,5994,2.407,5995,2.407,5996,2.407,5997,2.407,5998,2.407,5999,2.407,6000,2.407,6001,2.407,6002,2.407,6003,2.407,6004,2.407,6005,2.407,6006,2.407,6007,2.407,6008,2.407,6009,2.407,6010,2.407,6011,2.407,6012,2.407,6013,2.407,6014,2.407,6015,2.407,6016,2.407,6017,2.407,6018,2.407,6019,2.407,6020,2.161,6021,2.407,6022,2.407,6023,2.407,6024,2.407,6025,2.407,6026,2.407,6027,2.407,6028,2.407,6029,2.407,6030,2.407,6031,2.407,6032,2.407,6033,2.407,6034,2.407,6035,2.407,6036,2.407,6037,2.407,6038,2.407,6039,2.407,6040,2.407,6041,2.407,6042,2.161,6043,2.407,6044,2.307,6045,2.407,6046,2.407,6047,2.407,6048,2.407,6049,2.407,6050,2.407,6051,2.407,6052,2.407,6053,2.407,6054,2.407,6055,2.407,6056,2.161,6057,2.407,6058,2.407,6059,2.407,6060,2.407,6061,2.407,6062,2.407,6063,2.407,6064,2.407,6065,2.407,6066,2.407,6067,2.407,6068,2.407,6069,2.407,6070,2.407,6071,2.407,6072,2.407,6073,2.407,6074,2.407,6075,2.407,6076,2.407,6077,2.407,6078,2.407,6079,2.407,6080,2.407,6081,2.407,6082,2.407,6083,2.407,6084,2.407,6085,2.407,6086,2.407,6087,2.407,6088,2.407,6089,2.407,6090,2.407,6091,4.414,6092,2.407,6093,2.407,6094,2.407,6095,2.407,6096,2.407,6097,2.307,6098,2.407,6099,4.414,6100,4.414,6101,2.407,6102,2.407,6103,2.407,6104,2.407,6105,2.407,6106,4.414,6107,2.407,6108,2.161,6109,2.407,6110,2.407,6111,2.407,6112,2.407,6113,2.407,6114,2.407,6115,2.407,6116,2.407,6117,2.407,6118,2.407,6119,2.407,6120,2.407,6121,2.407,6122,2.407,6123,2.407,6124,2.407,6125,2.407,6126,2.407,6127,2.407,6128,2.407,6129,2.407,6130,2.407,6131,2.407,6132,2.407,6133,2.407,6134,2.407,6135,2.407,6136,2.407,6137,2.407,6138,2.407,6139,2.407,6140,2.407,6141,2.407,6142,4.414,6143,2.407,6144,2.407,6145,2.227,6146,2.407,6147,2.407,6148,2.407,6149,2.407,6150,2.407,6151,2.407,6152,2.407,6153,2.407,6154,2.407,6155,2.161,6156,2.407,6157,2.407,6158,2.407,6159,2.407,6160,2.407,6161,2.407,6162,2.407,6163,2.407,6164,2.407,6165,2.407,6166,2.407,6167,2.407,6168,2.407,6169,2.407,6170,2.407,6171,2.407,6172,2.407,6173,2.407,6174,2.407,6175,2.407,6176,2.407,6177,2.407,6178,2.407,6179,2.407,6180,2.407,6181,2.407,6182,2.407,6183,2.161,6184,2.407,6185,4.414,6186,2.407,6187,2.407,6188,2.407,6189,4.414,6190,2.407,6191,2.407,6192,2.407,6193,2.407,6194,2.407,6195,2.407,6196,4.414,6197,2.407,6198,2.407,6199,2.407,6200,2.407,6201,2.407,6202,2.407,6203,2.407,6204,2.407,6205,2.407,6206,2.407,6207,2.407,6208,2.407,6209,2.407,6210,2.407,6211,4.414,6212,2.407,6213,2.407,6214,2.407,6215,2.407,6216,2.161,6217,2.407,6218,2.407,6219,2.407,6220,2.407,6221,2.407,6222,2.407,6223,2.407,6224,2.407,6225,2.407,6226,2.407,6227,2.407,6228,2.407,6229,2.407,6230,2.407,6231,2.407,6232,2.407,6233,2.407,6234,2.407,6235,2.407,6236,2.407,6237,2.407,6238,2.407,6239,2.227,6240,2.407,6241,2.407,6242,2.407,6243,2.407,6244,2.407,6245,2.407,6246,2.407,6247,2.407,6248,2.407]],["keywords/1329",[]],["title/1330",[5848,1021.147]],["content/1330",[66,3.901,87,7.34,167,10.216,223,4.891,224,2.782,230,7.563,251,6.663,263,5.424,351,10.216,370,10.971,372,6.893,682,7.027,698,9.162,741,9.635,1350,12.039,1442,9.868,1812,10.73,2251,12.039,2444,12.939,2608,10.124,2963,13.911,3270,13.545,3935,11.525,5848,10.409]],["keywords/1330",[]],["title/1331",[1988,487.519,2041,496.196,2046,639]],["content/1331",[]],["keywords/1331",[]],["title/1332",[2042,532.102]],["content/1332",[1,4.239,2,1.958,3,3.04,22,1.829,25,5.338,66,5.128,69,5.249,168,4.689,223,4.12,224,2.638,335,5.233,340,4.187,347,6.78,352,5.431,415,10.105,575,4.513,771,8.086,829,8.468,1133,6.758,6254,16.5]],["keywords/1332",[]],["title/1333",[864,626.718]],["content/1333",[16,2.931,66,4.479,115,7.56,161,7.889,279,6.672,325,9.719,335,4.572,396,8.428,574,9.223,627,5.162,693,5.303,1189,8.068,1215,9.223,1217,9.133,1220,9.089]],["keywords/1333",[]],["title/1334",[163,252.11,693,198.061,1988,516.744,2046,423.219,2047,524.772]],["content/1334",[2,1.628,22,1.521,66,4.559,69,6.448,79,4.224,92,10.304,112,5.237,115,5.831,226,3.526,279,5.146,281,3.607,289,9.481,303,6.697,335,4.653,367,5.933,372,4.829,411,8.284,556,8.995,627,5.253,646,9.578,651,6.32,693,4.09,752,6.13,808,6.668,810,7.044,875,4.366,1074,7.808,1215,7.113,1217,7.044,1220,7.01,1290,12.05,1988,6.668,3578,11.459,3668,14.299,3669,10.5,3670,10.837,4664,10.662]],["keywords/1334",[]],["title/1335",[693,299.043,1217,515.041,1220,512.565]],["content/1335",[13,5.048,15,3.505,16,2.477,22,1.369,24,4.983,25,2.602,31,2.37,49,2.359,66,2.025,69,2.559,82,6.461,92,8.578,112,3.069,113,2.159,115,5.248,127,2.238,136,6.619,185,3.201,219,4.148,224,1.6,226,2.066,258,1.83,289,4.211,297,3.874,330,4.755,334,3.778,335,3.174,340,2.041,343,3.406,352,2.647,357,4.299,374,5.213,404,3.124,422,2.823,427,5.109,448,3.192,457,4.108,575,4.114,603,4.254,604,4.723,607,6.28,625,4.926,641,6.164,644,6.845,646,4.254,647,7.169,651,5.688,693,3.681,779,5.569,810,4.128,812,4.108,864,3.316,920,4.821,946,5.981,975,6.153,1049,4.369,1210,9.115,1212,5.001,1217,4.128,1220,10.55,1230,8.891,1237,4.755,1241,11.34,1267,3.891,1507,6.461,1552,5.903,1988,6.001,2027,7.115,2046,5.122,2078,4.926,2132,4.787,2443,7.709,2444,6.716,2445,7.709,2446,7.709,2449,6.863,2450,14.089,2451,10.541,2452,10.314,2453,6.863,2454,6.582,2455,6.153,2456,6.582,2457,6.863,2462,5.759,2463,16.173,2464,8.043,2465,8.043,2466,5.569,2467,8.043,2468,8.043,2531,6.582,3404,5.165,3440,6.153,3814,6.716]],["keywords/1335",[]],["title/1336",[16,250.43]],["content/1336",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,415,10.187,574,8.621,875,5.291,897,7.166]],["keywords/1336",[]],["title/1337",[282,329.633]],["content/1337",[2,0.904,11,6.097,16,2.395,18,4.792,19,3.115,20,2.891,22,0.845,25,2.466,30,5.3,31,2.246,65,3.951,66,4.128,79,2.346,108,4.284,112,4.522,113,3.18,155,3.43,168,4.798,172,5.035,220,3.687,221,4.363,223,4.095,224,1.535,226,4.213,228,2.413,231,3.469,258,2.696,262,3.752,270,2.718,282,2.57,291,4.549,335,5.043,340,1.934,389,7.153,397,1.836,399,2.76,417,4.894,426,6.93,429,5.395,448,4.702,512,4.703,518,3.379,556,3.786,557,5.94,569,4.506,575,4.859,647,5.035,677,3.875,693,4.333,748,4.668,749,4.31,771,7.126,808,3.703,812,3.893,818,4.095,849,5.052,993,4.703,1014,5.636,1091,4.776,1126,5.699,1210,6.402,1309,5.458,1401,4.031,1535,7.271,1679,3.99,1709,7.258,1716,4.32,1875,4.548,2020,3.786,2041,3.769,2531,6.238,2847,5.831,3553,6.662,3663,12.433,3848,5.594,3850,9.066,4683,6.018,5001,6.123,5002,6.123,5004,5.921,5005,7.053,5441,5.12,5514,7.053,5515,7.053]],["keywords/1337",[]],["title/1338",[1023,407.123]],["content/1338",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1118,14.311,1124,10.509,1125,13.242,1126,6.573,3430,9.483,3432,9.159,5516,10.861]],["keywords/1338",[]],["title/1339",[291,378.221,1014,574.998]],["content/1339",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1339",[]],["title/1340",[382,745.942,2473,745.942]],["content/1340",[1,0.917,2,0.747,3,0.658,11,1.109,13,0.9,22,0.698,25,1.155,29,2.526,30,1.301,31,1.052,39,2.445,41,2.018,43,1.068,49,1.047,52,1.65,64,1.887,66,0.898,68,1.96,69,1.135,71,3.112,73,1.407,77,2.471,79,1.098,87,1.69,97,1.814,100,2.691,107,2.124,110,1.907,113,0.958,119,2.353,136,1.571,137,2.154,139,3.295,146,2.096,155,1.606,168,1.449,172,1.516,181,1.704,185,1.421,186,2.232,192,2.018,196,1.576,199,2.397,202,2.818,211,2.471,225,1.96,226,0.917,227,1.308,230,3.26,262,1.757,265,2.375,266,1.938,267,2.619,283,1.527,287,1.741,289,4.42,290,1.749,291,1.116,303,1.741,307,1.37,312,1.741,320,2.018,330,1.374,338,2.124,343,1.511,358,2.332,362,2.471,364,2.292,368,1.481,370,1.823,374,1.506,382,6.281,384,2.619,385,1.334,394,1.823,404,1.386,405,2.353,408,1.734,409,2.202,410,2.445,416,2.11,428,1.506,432,1.823,440,2.78,452,2.397,455,2.139,458,1.797,463,2.73,464,1.798,465,1.35,466,2.445,467,1.65,485,1.773,491,2.555,493,2.17,494,3.721,505,2.069,511,3.437,518,1.582,519,2.236,528,2.654,532,2.254,533,1.859,540,1.971,550,1.907,572,2.471,575,0.976,594,1.814,603,1.887,607,1.814,620,2.498,626,1.887,651,1.643,654,2.11,658,1.631,677,1.814,679,1.887,693,1.876,696,2.619,697,2.069,704,1.606,712,2.236,717,2.03,719,2.236,721,2.006,730,4.358,746,1.841,747,2.691,753,2.921,787,2.691,792,1.677,808,1.734,812,1.823,818,1.917,829,1.832,834,2.555,835,1.938,846,1.96,858,2.292,860,2.202,871,2.056,875,1.135,897,1.537,906,1.823,908,1.462,909,2.273,938,2.421,957,4.313,964,2.082,976,3.084,1007,2.124,1008,1.971,1022,2.254,1032,2.691,1043,2.375,1063,2.202,1141,2.587,1154,2.587,1158,2.691,1189,1.618,1194,3.204,1204,2.332,1237,2.11,1270,2.619,1273,2.498,1280,2.73,1281,2.691,1308,2.619,1310,2.772,1312,4.313,1315,2.555,1344,2.471,1348,2.332,1352,2.772,1355,2.421,1393,4.958,1399,2.772,1400,2.772,1401,1.887,1453,2.219,1488,2.186,1490,2.73,1559,2.654,1561,2.587,1565,2.587,1579,3.119,1594,2.273,1611,2.421,1633,2.421,1643,3.4,1679,1.868,1703,2.921,1708,1.982,1731,2.397,1762,2.471,1775,2.186,1794,2.555,1808,2.654,1832,2.219,1856,2.587,1857,2.619,1879,2.867,1974,2.006,1989,2.526,2041,3.112,2055,2.445,2078,2.186,2081,2.445,2086,2.375,2127,2.445,2131,2.619,2170,2.73,2194,2.921,2248,2.311,2264,2.867,2473,6.281,2510,4.041,2549,2.73,2550,2.772,2564,2.311,2846,2.498,2898,3.204,2968,2.691,3009,2.818,3064,2.471,3102,2.818,3395,2.292,3536,2.867,3574,2.921,3626,2.555,3788,2.691,3887,2.818,4153,2.818,4266,2.555,4541,4.507,4609,2.587,4636,2.619,4777,2.772,4903,2.98,5226,2.98,5243,4.969,5519,3.204,5520,3.204,5521,3.302,5522,3.302,5523,2.867,5524,2.772,5525,2.867,5526,3.302,5527,2.867,5528,3.045,5529,2.691,5530,3.302,5531,3.302,5532,2.867,5533,2.818,5534,3.045,5535,3.045,5536,2.818,5537,2.818,5538,3.045,5539,3.045,5540,2.867,5541,3.045,5542,3.302,5543,2.818,5544,4.619,5545,3.045,5546,3.302,5547,3.302,5548,2.98,5549,3.302,5550,2.818,5551,3.302,5552,3.045,5553,3.302,5554,3.119,5555,3.302,5556,2.867,5557,3.302,5558,2.818,5559,3.045,5560,3.045,5561,2.867,5562,3.045,5563,3.204,5564,3.302,5565,3.302,5566,2.772,5567,3.302,5568,2.98,5569,3.204,5570,3.302,5571,3.045,5572,3.204,5573,3.302,5574,2.818,5575,3.302,5576,3.302,5577,3.302,5578,2.867,5579,3.204,5580,3.045,5581,2.98,5582,3.302,5583,2.867,5584,3.302,5585,2.98,5586,3.045,5587,3.302,5588,3.302,5589,3.302,5590,3.302,5591,3.302,5592,3.302,5593,2.818,5594,3.302,5595,2.98,5596,3.302,5597,3.302,5598,3.045,5599,3.302,5600,3.302,5601,3.302,5602,3.045,5603,3.302,5604,3.302,5605,3.045,5606,3.302,5607,2.921,5608,3.302,5609,3.045,5610,2.98,5611,3.204,5612,4.969,5613,3.045,5614,3.045,5615,3.045,5616,2.772,5617,3.045,5618,3.302,5619,2.867,5620,3.045,5621,3.045,5622,2.921,5623,3.302,5624,5.824,5625,3.302,5626,3.045,5627,3.302,5628,3.045,5629,2.818,5630,3.302,5631,3.045,5632,3.045,5633,3.302,5634,3.302,5635,3.045,5636,3.045,5637,3.302,5638,3.302,5639,3.302,5640,3.045,5641,3.045,5642,3.302,5643,2.867,5644,4.969,5645,3.302,5646,2.98,5647,3.045,5648,3.045,5649,2.867,5650,2.867,5651,3.045,5652,3.045,5653,3.045,5654,2.818,5655,2.867,5656,3.045,5657,3.302,5658,2.867,5659,3.045,5660,3.302,5661,3.045,5662,3.302,5663,3.045,5664,3.302,5665,3.045,5666,3.045,5667,3.302,5668,3.204,5669,3.045,5670,3.045,5671,3.045,5672,3.045,5673,3.045,5674,3.045,5675,3.045,5676,3.045,5677,3.045,5678,3.045,5679,3.045,5680,3.045,5681,3.045,5682,3.045,5683,2.818,5684,3.302,5685,3.302,5686,3.045,5687,2.867,5688,3.045,5689,3.302,5690,3.045,5691,3.045,5692,3.204,5693,3.045,5694,2.691,5695,2.867,5696,3.045,5697,3.302,5698,3.045,5699,2.98,5700,3.045,5701,2.98,5702,3.045,5703,3.302,5704,3.119,5705,3.045,5706,3.045,5707,3.204,5708,3.045,5709,2.73,5710,3.045,5711,3.045,5712,2.98,5713,3.045]],["keywords/1340",[]],["title/1341",[5848,1021.147]],["content/1341",[2,1.283,19,4.704,43,4.604,44,7.937,66,3.871,89,2.657,113,4.803,167,10.139,168,3.54,223,4.867,224,2.525,230,5.938,251,6.088,263,5.383,343,4.579,351,10.139,370,10.52,372,5.412,415,9.419,417,9.875,426,3.595,428,6.49,434,8.803,440,7.906,464,3.089,465,6.77,483,9.029,490,3.44,493,6.575,608,7.195,682,4.903,698,6.393,741,9.562,974,7.065,1342,9.708,1442,6.886,1812,7.488,1973,7.336,2078,11.939,2125,7.336,2251,8.401,2608,7.065,3935,8.042,4266,7.744,5123,9.708,5753,10.007,5848,7.264,6256,10.365,6257,10.365,6258,10.365,6259,10.365,6260,10.365,6261,10.365]],["keywords/1341",[]],["title/1342",[61,341.406,172,364.419,1150,340.348,2041,424.116]],["content/1342",[]],["keywords/1342",[]],["title/1343",[2042,532.102]],["content/1343",[1,4.239,2,1.958,3,3.04,22,1.829,25,5.338,66,5.128,69,5.249,168,4.689,223,4.12,224,2.638,335,5.233,340,4.187,347,6.78,352,5.431,415,10.105,575,4.513,771,8.086,829,8.468,1133,6.758,6254,16.5]],["keywords/1343",[]],["title/1344",[864,626.718]],["content/1344",[16,2.931,66,4.479,115,7.56,161,7.889,279,6.672,325,9.719,335,4.572,396,8.428,574,9.223,627,5.162,693,5.303,1189,8.068,1215,9.223,1217,9.133,1220,9.089]],["keywords/1344",[]],["title/1345",[61,298.102,163,284.088,172,318.197,1150,297.179,6249,790.599]],["content/1345",[2,2.168,112,8.268,279,6.852,335,4.694,367,7.9,385,6.832,626,9.664,651,8.414,1215,11.973]],["keywords/1345",[]],["title/1346",[693,299.043,1217,515.041,1220,512.565]],["content/1346",[13,4.825,15,3.474,16,2.459,22,1.357,24,4.953,25,2.572,31,2.342,61,3.164,66,2.001,69,2.529,82,6.386,92,4.041,94,6.081,112,6.91,115,3.377,127,2.212,136,6.571,146,4.668,219,4.1,224,1.585,226,2.042,263,2.782,297,3.829,330,5.747,334,3.734,335,3.835,340,2.017,343,3.366,345,3.931,357,4.248,374,5.166,385,2.972,404,3.088,422,5.239,427,3.288,445,2.775,448,3.154,457,4.06,575,2.174,603,6.475,616,2.311,625,4.868,641,6.108,644,5.572,647,7.125,651,5.637,682,3.604,693,2.369,707,3.125,779,8.476,810,4.08,812,4.06,864,3.277,920,4.764,946,5.912,1049,4.317,1143,4.55,1150,5.924,1163,7.861,1165,6.175,1210,8.065,1212,4.942,1215,7.738,1217,4.08,1220,10.18,1230,10.707,1237,4.699,1241,12.645,1267,3.845,1507,9.835,1859,5.062,2078,4.868,2449,6.783,2450,15.121,2451,12.74,2452,12.465,2453,6.783,2454,6.505,2455,6.081,2456,6.505,2457,6.783,2462,5.692,2469,15.054,2470,5.912,2471,7.619,2472,7.949,2473,4.905,2531,10.019,3404,5.104,3440,6.081]],["keywords/1346",[]],["title/1347",[16,250.43]],["content/1347",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,415,10.187,574,8.621,875,5.291,897,7.166]],["keywords/1347",[]],["title/1348",[282,329.633]],["content/1348",[11,6.369,16,2.145,18,4.456,19,3.423,20,3.27,22,0.956,30,5.721,31,2.54,65,4.468,66,4.402,108,4.845,112,4.969,113,3.495,155,3.879,168,4.973,172,5.533,220,4.17,221,4.935,223,4.367,224,1.687,226,3.346,258,2.963,262,4.244,282,2.824,291,4.91,335,5.267,340,2.188,389,7.861,397,2.076,399,3.033,417,5.536,426,7.183,448,5.168,512,5.319,518,3.822,556,4.282,575,5.136,647,5.533,693,3.881,748,5.28,771,7.692,808,4.188,818,4.632,849,5.552,993,5.319,1014,6.194,1126,6.152,1210,7.035,1401,4.559,1535,3.822,1679,4.513,1709,7.976,1716,4.747,1875,4.999,2020,4.282,2531,7.055,3553,7.535,3663,9.115,3848,6.327,3850,9.963,4683,6.807,5001,6.926,5002,6.926,5441,5.791,5514,7.977,5515,7.977]],["keywords/1348",[]],["title/1349",[1023,407.123]],["content/1349",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1118,14.311,1124,10.509,1125,13.242,1126,6.573,3430,9.483,3432,9.159,5516,10.861]],["keywords/1349",[]],["title/1350",[291,378.221,1014,574.998]],["content/1350",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1350",[]],["title/1351",[382,745.942,2473,745.942]],["content/1351",[1,0.917,2,0.747,3,0.658,11,1.109,13,0.9,22,0.698,25,1.155,29,2.526,30,1.301,31,1.052,39,2.445,41,2.018,43,1.068,49,1.047,52,1.65,64,1.887,66,0.898,68,1.96,69,1.135,71,3.112,73,1.407,77,2.471,79,1.098,87,1.69,97,1.814,100,2.691,107,2.124,110,1.907,113,0.958,119,2.353,136,1.571,137,2.154,139,3.295,146,2.096,155,1.606,168,1.449,172,1.516,181,1.704,185,1.421,186,2.232,192,2.018,196,1.576,199,2.397,202,2.818,211,2.471,225,1.96,226,0.917,227,1.308,230,3.26,262,1.757,265,2.375,266,1.938,267,2.619,283,1.527,287,1.741,289,4.42,290,1.749,291,1.116,303,1.741,307,1.37,312,1.741,320,2.018,330,1.374,338,2.124,343,1.511,358,2.332,362,2.471,364,2.292,368,1.481,370,1.823,374,1.506,382,6.281,384,2.619,385,1.334,394,1.823,404,1.386,405,2.353,408,1.734,409,2.202,410,2.445,416,2.11,428,1.506,432,1.823,440,2.78,452,2.397,455,2.139,458,1.797,463,2.73,464,1.798,465,1.35,466,2.445,467,1.65,485,1.773,491,2.555,493,2.17,494,3.721,505,2.069,511,3.437,518,1.582,519,2.236,528,2.654,532,2.254,533,1.859,540,1.971,550,1.907,572,2.471,575,0.976,594,1.814,603,1.887,607,1.814,620,2.498,626,1.887,651,1.643,654,2.11,658,1.631,677,1.814,679,1.887,693,1.876,696,2.619,697,2.069,704,1.606,712,2.236,717,2.03,719,2.236,721,2.006,730,4.358,746,1.841,747,2.691,753,2.921,787,2.691,792,1.677,808,1.734,812,1.823,818,1.917,829,1.832,834,2.555,835,1.938,846,1.96,858,2.292,860,2.202,871,2.056,875,1.135,897,1.537,906,1.823,908,1.462,909,2.273,938,2.421,957,4.313,964,2.082,976,3.084,1007,2.124,1008,1.971,1022,2.254,1032,2.691,1043,2.375,1063,2.202,1141,2.587,1154,2.587,1158,2.691,1189,1.618,1194,3.204,1204,2.332,1237,2.11,1270,2.619,1273,2.498,1280,2.73,1281,2.691,1308,2.619,1310,2.772,1312,4.313,1315,2.555,1344,2.471,1348,2.332,1352,2.772,1355,2.421,1393,4.958,1399,2.772,1400,2.772,1401,1.887,1453,2.219,1488,2.186,1490,2.73,1559,2.654,1561,2.587,1565,2.587,1579,3.119,1594,2.273,1611,2.421,1633,2.421,1643,3.4,1679,1.868,1703,2.921,1708,1.982,1731,2.397,1762,2.471,1775,2.186,1794,2.555,1808,2.654,1832,2.219,1856,2.587,1857,2.619,1879,2.867,1974,2.006,1989,2.526,2041,3.112,2055,2.445,2078,2.186,2081,2.445,2086,2.375,2127,2.445,2131,2.619,2170,2.73,2194,2.921,2248,2.311,2264,2.867,2473,6.281,2510,4.041,2549,2.73,2550,2.772,2564,2.311,2846,2.498,2898,3.204,2968,2.691,3009,2.818,3064,2.471,3102,2.818,3395,2.292,3536,2.867,3574,2.921,3626,2.555,3788,2.691,3887,2.818,4153,2.818,4266,2.555,4541,4.507,4609,2.587,4636,2.619,4777,2.772,4903,2.98,5226,2.98,5243,4.969,5519,3.204,5520,3.204,5521,3.302,5522,3.302,5523,2.867,5524,2.772,5525,2.867,5526,3.302,5527,2.867,5528,3.045,5529,2.691,5530,3.302,5531,3.302,5532,2.867,5533,2.818,5534,3.045,5535,3.045,5536,2.818,5537,2.818,5538,3.045,5539,3.045,5540,2.867,5541,3.045,5542,3.302,5543,2.818,5544,4.619,5545,3.045,5546,3.302,5547,3.302,5548,2.98,5549,3.302,5550,2.818,5551,3.302,5552,3.045,5553,3.302,5554,3.119,5555,3.302,5556,2.867,5557,3.302,5558,2.818,5559,3.045,5560,3.045,5561,2.867,5562,3.045,5563,3.204,5564,3.302,5565,3.302,5566,2.772,5567,3.302,5568,2.98,5569,3.204,5570,3.302,5571,3.045,5572,3.204,5573,3.302,5574,2.818,5575,3.302,5576,3.302,5577,3.302,5578,2.867,5579,3.204,5580,3.045,5581,2.98,5582,3.302,5583,2.867,5584,3.302,5585,2.98,5586,3.045,5587,3.302,5588,3.302,5589,3.302,5590,3.302,5591,3.302,5592,3.302,5593,2.818,5594,3.302,5595,2.98,5596,3.302,5597,3.302,5598,3.045,5599,3.302,5600,3.302,5601,3.302,5602,3.045,5603,3.302,5604,3.302,5605,3.045,5606,3.302,5607,2.921,5608,3.302,5609,3.045,5610,2.98,5611,3.204,5612,4.969,5613,3.045,5614,3.045,5615,3.045,5616,2.772,5617,3.045,5618,3.302,5619,2.867,5620,3.045,5621,3.045,5622,2.921,5623,3.302,5624,5.824,5625,3.302,5626,3.045,5627,3.302,5628,3.045,5629,2.818,5630,3.302,5631,3.045,5632,3.045,5633,3.302,5634,3.302,5635,3.045,5636,3.045,5637,3.302,5638,3.302,5639,3.302,5640,3.045,5641,3.045,5642,3.302,5643,2.867,5644,4.969,5645,3.302,5646,2.98,5647,3.045,5648,3.045,5649,2.867,5650,2.867,5651,3.045,5652,3.045,5653,3.045,5654,2.818,5655,2.867,5656,3.045,5657,3.302,5658,2.867,5659,3.045,5660,3.302,5661,3.045,5662,3.302,5663,3.045,5664,3.302,5665,3.045,5666,3.045,5667,3.302,5668,3.204,5669,3.045,5670,3.045,5671,3.045,5672,3.045,5673,3.045,5674,3.045,5675,3.045,5676,3.045,5677,3.045,5678,3.045,5679,3.045,5680,3.045,5681,3.045,5682,3.045,5683,2.818,5684,3.302,5685,3.302,5686,3.045,5687,2.867,5688,3.045,5689,3.302,5690,3.045,5691,3.045,5692,3.204,5693,3.045,5694,2.691,5695,2.867,5696,3.045,5697,3.302,5698,3.045,5699,2.98,5700,3.045,5701,2.98,5702,3.045,5703,3.302,5704,3.119,5705,3.045,5706,3.045,5707,3.204,5708,3.045,5709,2.73,5710,3.045,5711,3.045,5712,2.98,5713,3.045]],["keywords/1351",[]],["title/1352",[5848,1021.147]],["content/1352",[2,1.283,19,4.704,43,4.604,44,7.937,66,3.871,89,2.657,113,4.803,167,10.139,168,3.54,223,4.867,224,2.525,230,5.938,251,6.088,263,5.383,343,4.579,351,10.139,370,10.52,372,5.412,415,9.419,417,9.875,426,3.595,428,6.49,434,8.803,440,7.906,464,3.089,465,6.77,483,9.029,490,3.44,493,6.575,608,7.195,682,4.903,698,6.393,741,9.562,974,7.065,1342,9.708,1442,6.886,1812,7.488,1973,7.336,2078,11.939,2125,7.336,2251,8.401,2608,7.065,3935,8.042,4266,7.744,5123,9.708,5753,10.007,5848,7.264,6256,10.365,6257,10.365,6258,10.365,6259,10.365,6260,10.365,6261,10.365]],["keywords/1352",[]],["title/1353",[3169,1297.249]],["content/1353",[]],["keywords/1353",[]],["title/1354",[2042,532.102]],["content/1354",[1,3.479,2,1.607,3,3.308,13,4.528,22,1.501,25,6.515,29,12.705,30,6.544,66,5.069,79,4.168,136,5.96,146,7.953,195,2.115,222,2.45,224,2.777,277,3.255,303,6.608,330,5.213,340,3.437,352,5.909,374,7.575,422,4.753,605,7.612,652,6.809,752,6.048,804,6.362,873,7.276,902,6.788,1120,10.693,1212,8.42,1762,9.377,1768,8.847,1992,10.52,2064,11.083,3169,17.183]],["keywords/1354",[]],["title/1355",[16,250.43]],["content/1355",[2,2.441,3,4.102,16,2.763,22,2.281,25,6.657,47,8.65,89,5.055,136,7.381,195,2.62,223,4.187,224,2.172,282,3.636,574,8.692,875,5.335,3169,17.558]],["keywords/1355",[]],["title/1356",[282,329.633]],["content/1356",[1,2.178,3,3.615,13,3.919,16,1.397,18,4.419,19,3.38,20,3.216,22,0.94,30,4.688,36,3.718,43,3.85,52,3.919,57,5.641,66,3.237,89,2.083,102,5.231,107,7.654,113,4.654,173,3.627,195,2.427,208,3.999,226,3.991,230,3.273,244,6.732,258,1.929,263,4.501,266,4.605,270,3.023,281,3.38,282,2.788,298,4.914,374,5.426,399,2.995,426,6.197,448,3.364,464,2.421,465,7.05,539,10.331,551,3.919,563,8.477,616,2.465,644,3.859,652,4.878,658,3.874,693,2.526,767,10.781,771,6.302,774,6.811,846,4.656,895,2.898,902,4.25,1046,8.478,1050,6.142,1105,5.809,1267,7.515,1355,5.751,1368,6.392,1453,7.995,1716,4.688,1748,7.228,1762,5.87,1768,5.539,1837,4.823,1875,4.935,2060,7.234,2064,12.714,2122,4.765,2272,11.899,3169,18.709,3272,7.61,6262,8.949,6263,8.949,6264,9.665,6265,9.665,6266,9.665,6267,14.661,6268,9.665,6269,9.665]],["keywords/1356",[]],["title/1357",[1023,407.123]],["content/1357",[2,1.697,3,3.428,8,5.896,15,5.868,25,4.627,49,4.195,120,7.305,195,2.234,223,4.646,224,2.41,258,3.254,277,3.438,296,6.412,316,6.388,340,3.629,370,7.305,385,5.347,397,3.444,399,4.333,490,4.55,579,7.413,706,11.11,707,7.315,842,5.555,1124,8.962,2064,11.705,2608,9.344,3278,12.5,3430,8.087,5429,15.098,5516,9.262,5795,11.489,6262,15.098,6263,15.098,6270,16.305,6271,16.305]],["keywords/1357",[]],["title/1358",[291,268.337,547,503.706,743,581.812,1014,407.945]],["content/1358",[2,2.464,3,3.337,11,6.114,13,2.787,22,1.731,31,3.256,42,5.968,79,5.573,102,6.817,106,4.585,127,3.074,195,1.726,205,5.905,223,3.899,224,1.431,225,6.068,258,2.514,266,6.001,273,8.331,291,4.885,307,4.241,312,8.837,316,4.935,345,5.463,357,5.905,387,6.102,398,9.428,404,4.292,464,3.156,544,6.446,546,4.972,547,11.559,570,11.774,606,7.351,607,5.617,631,7.495,676,6.173,682,5.01,743,12.285,746,9.34,897,4.76,901,6.068,917,9.657,974,7.218,1014,5.255,1017,9.225,1535,4.898,1603,7.911,1769,11.663,3108,11.663,3169,18.393,3590,9.918,6272,12.596,6273,12.596,6274,12.596,6275,12.596]],["keywords/1358",[]],["title/1359",[5848,1021.147]],["content/1359",[3,2.563,18,3.545,30,5.071,43,4.165,66,3.502,70,6.381,167,9.171,223,4.562,224,2.643,226,3.574,230,7.055,251,6.215,258,3.165,263,4.869,321,7.598,351,9.171,370,9.333,372,6.43,434,7.963,435,8.064,465,5.262,682,6.308,698,8.225,741,8.649,771,6.818,1008,7.684,1050,6.644,1267,6.73,1442,8.859,1812,9.632,1834,12.488,2122,7.819,2125,9.437,2251,10.807,2501,13.912,2608,9.089,2986,12.159,3935,10.346,5848,9.345,6276,15.861]],["keywords/1359",[]],["title/1360",[2038,1180.983]],["content/1360",[]],["keywords/1360",[]],["title/1361",[2042,532.102]],["content/1361",[2,2.093,3,3.251,22,1.955,25,5.708,127,4.909,224,2.285,316,7.879,386,9.915,627,5.117,873,9.478,896,7.495,1133,7.225,2038,13.704,2064,14.437,6277,20.112,6278,20.112]],["keywords/1361",[]],["title/1362",[16,250.43]],["content/1362",[2,1.853,14,7.164,18,5.291,19,4.104,22,2.007,89,2.715,113,4.191,186,3.919,195,1.726,206,5.212,224,2.345,226,2.838,229,5.277,258,2.514,277,3.753,282,3.386,284,3.787,354,3.108,356,7.155,399,2.573,426,7.366,445,3.857,627,4.53,652,5.923,804,5.19,895,5.339,896,6.634,1024,11.461,1142,6.215,1518,9.657,1707,6.717,1716,5.692,1875,5.993,2038,16.744,2094,9.732,3496,8.331,3500,7.733,3871,8.453,3943,10.59,5177,15.829,6279,12.596,6280,11.663,6281,11.663,6282,12.596,6283,17.803]],["keywords/1362",[]],["title/1363",[1023,407.123]],["content/1363",[216,7.547,223,3.929,224,2.038,258,3.58,277,3.782,397,3.79,399,3.665,643,11.549,707,6.187,842,6.112,1124,9.86,1133,6.445,1142,7.873,3273,11.268,3379,15.736,3484,9.064,3495,11.014,3496,11.865,3500,11.014,5145,15.082,5177,13.753,5442,16.611,6280,16.611,6281,16.611,6284,17.94,6285,17.94,6286,17.94,6287,17.94,6288,17.94]],["keywords/1363",[]],["title/1364",[1336,1031.201]],["content/1364",[]],["keywords/1364",[]],["title/1365",[2042,532.102]],["content/1365",[2,2.27,3,3.525,22,2.12,25,6.189,224,2.478,340,4.855,352,6.297]],["keywords/1365",[]],["title/1366",[16,250.43]],["content/1366",[3,3.525,16,3.151,18,4.874,223,5.558,340,4.855,810,9.818]],["keywords/1366",[]],["title/1367",[282,329.633]],["content/1367",[18,4.419,19,4.557,66,5.286,113,4.654,168,4.834,223,4.33,224,2.72,282,3.76,399,4.039,417,11.135,426,5.765,1709,10.62,1716,6.321,1875,6.656,3533,12.274]],["keywords/1367",[]],["title/1368",[1023,407.123]],["content/1368",[15,5.049,168,4.096,223,4.443,224,2.305,258,4.049,277,4.277,397,4.286,399,4.144,707,6.996,842,6.912,1124,11.15,3430,10.062,3432,9.719,5430,18.785,5516,11.524]],["keywords/1368",[]],["title/1369",[291,378.221,1014,574.998]],["content/1369",[224,2.525,291,6.099,616,5.668,1004,18.039,1014,9.272]],["keywords/1369",[]],["title/1370",[382,745.942,2473,745.942]],["content/1370",[2,1.47,13,2.037,22,1.373,31,2.379,36,3.541,49,2.369,64,4.271,66,2.033,71,6.127,77,5.591,79,2.485,87,3.825,97,4.105,119,5.323,127,2.247,136,3.554,137,4.874,139,4.227,168,2.852,173,3.455,181,3.857,185,3.214,211,5.591,223,2.016,226,2.075,230,5.821,262,3.975,289,6.487,291,2.526,303,3.94,320,4.566,324,4.512,335,2.075,338,4.806,362,5.591,368,3.351,374,3.407,382,10.433,385,3.019,404,3.136,411,4.874,416,4.774,422,2.834,432,4.125,440,5.473,464,2.306,465,3.054,467,3.733,485,4.011,494,4.774,503,5.782,511,4.41,532,5.1,550,4.316,563,8.168,608,5.373,677,4.105,682,3.661,704,3.634,717,4.594,719,5.06,721,4.539,730,5.591,812,4.125,835,6.73,837,5.715,875,2.569,897,3.479,906,4.125,909,5.142,935,7.472,936,8.524,964,4.711,976,6.073,1007,4.806,1008,4.46,1032,6.089,1063,4.982,1204,5.276,1270,5.927,1312,5.533,1336,8.405,1393,4.742,1399,6.273,1400,6.273,1497,6.891,1594,5.142,1708,4.486,1755,6.005,1794,5.782,1856,5.852,1857,5.927,1874,7.249,1995,6.273,2086,5.373,2177,6.608,2462,5.782,2473,10.433,2510,7.956,2842,8.524,2968,6.089,3138,7.058,3626,5.782,3788,6.089,4153,6.376,4609,5.852,4777,6.273,5519,7.249,5520,7.249,5529,6.089,5544,5.927,5548,6.742,5550,6.376,5554,7.058,5558,6.376,5566,6.273,5612,6.376,5619,6.487,5644,6.376,5668,7.249,5694,6.089,5709,6.178,5712,6.742,6145,7.472,6239,7.472,6289,9.206,6290,9.206,6291,9.206,6292,9.206,6293,9.206,6294,9.206,6295,9.206,6296,9.206,6297,9.206]],["keywords/1370",[]],["title/1371",[172,364.419,1221,380.264,1988,416.7,2046,546.176]],["content/1371",[]],["keywords/1371",[]],["title/1372",[2042,532.102]],["content/1372",[1,4.074,2,1.882,3,2.922,22,1.758,25,5.131,66,5.003,68,8.709,69,6.322,168,4.575,223,3.96,224,2.574,335,5.106,340,4.024,352,5.22,575,5.436,627,4.6,829,8.139,1133,8.14,3289,13.761,3766,10.454,5967,14.236]],["keywords/1372",[]],["title/1373",[172,318.197,864,308.749,1221,332.032,1988,363.847,2046,476.9]],["content/1373",[2,1.57,4,8.046,15,2.499,16,3.122,22,1.467,31,2.595,66,4.77,69,5.058,92,4.477,97,4.477,112,5.05,115,7.511,127,3.683,161,3.904,172,3.742,224,2.059,226,2.263,228,2.788,246,5.608,258,3.011,263,3.083,279,4.962,281,2.315,282,1.91,289,6.928,297,4.242,325,4.81,335,4.542,340,2.235,352,2.899,367,3.807,396,4.171,461,5.354,556,6.574,574,6.859,575,4.349,594,6.728,627,4.612,641,4.394,646,9.35,651,4.056,658,4.024,693,5.268,804,4.137,808,4.279,823,4.435,849,5.642,1023,2.359,1126,5.187,1142,3.506,1163,8.498,1189,7.209,1210,4.757,1215,6.859,1217,8.16,1220,9.03,1221,3.904,1222,5.394,1290,8.806,1988,4.279,2020,4.374,2046,5.608,2094,4.355,2132,5.242,2466,6.098,3289,6.098,3668,10.45,3669,6.738,3670,6.954,4597,6.164,4664,6.842,4726,8.149,4995,8.441,5242,7.075,6252,16.564,6298,7.906]],["keywords/1373",[]],["title/1374",[693,360.272,3289,837.083]],["content/1374",[2,1.57,4,8.046,15,2.499,16,3.122,22,1.467,31,2.595,66,4.77,69,5.058,92,4.477,97,4.477,112,5.05,115,7.511,127,3.683,161,3.904,172,3.742,224,2.059,226,2.263,228,2.788,246,5.608,258,3.011,263,3.083,279,4.962,281,2.315,282,1.91,289,6.928,297,4.242,325,4.81,335,4.542,340,2.235,352,2.899,367,3.807,396,4.171,461,5.354,556,6.574,574,6.859,575,4.349,594,6.728,627,4.612,641,4.394,646,9.35,651,4.056,658,4.024,693,5.268,804,4.137,808,4.279,823,4.435,849,5.642,1023,2.359,1126,5.187,1163,8.498,1189,7.209,1210,4.757,1215,6.859,1217,8.16,1220,9.03,1221,3.904,1222,5.394,1290,8.806,1988,4.279,2020,4.374,2046,5.608,2094,4.355,2132,5.242,2466,6.098,3289,6.098,3668,10.45,3669,6.738,3670,6.954,4597,6.164,4664,6.842,4726,8.149,4995,8.441,5242,7.075,5262,8.807,6252,16.564,6298,7.906]],["keywords/1374",[]],["title/1375",[16,250.43]],["content/1375",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,3289,11.517]],["keywords/1375",[]],["title/1376",[282,329.633]],["content/1376",[18,5.469,19,4.372,31,3.564,65,6.27,66,4.187,112,6.347,113,4.464,168,4.376,223,4.153,224,2.154,258,2.752,282,3.607,291,5.947,335,5.514,399,2.817,417,7.768,426,7.136,448,6.6,512,7.464,575,5.6,647,7.067,693,3.605,818,6.5,1014,7.911,1126,7.451,1210,8.985,1679,6.333,1709,7.408,1716,6.063,1875,6.384,2020,6.009,3533,8.562,4601,9.397,4683,9.551,5441,8.126]],["keywords/1376",[]],["title/1377",[1023,407.123]],["content/1377",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1125,13.242,1126,6.573,3293,15.518,3430,9.483,3432,9.159,5516,10.861]],["keywords/1377",[]],["title/1378",[291,378.221,1014,574.998]],["content/1378",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1378",[]],["title/1379",[382,745.942,2473,745.942]],["content/1379",[1,0.447,2,0.388,3,0.321,7,0.801,11,0.54,13,0.439,15,7.375,20,0.66,22,0.512,24,0.514,29,1.231,30,0.634,31,0.513,36,0.763,39,1.192,41,0.984,43,0.521,49,0.51,52,0.804,64,0.92,66,0.438,68,0.955,69,0.553,71,1.615,73,0.686,77,1.205,79,0.535,85,1.61,87,0.824,97,0.884,100,1.312,110,0.93,113,0.467,119,1.147,120,0.889,130,0.893,136,0.766,137,1.05,139,1.71,146,1.022,155,1.47,168,0.752,172,0.739,181,0.831,185,0.692,186,1.158,192,0.984,194,1.294,195,0.272,197,1.127,198,0.906,199,1.169,211,1.205,214,0.945,225,0.955,226,0.839,227,0.638,230,1.782,262,0.856,263,0.609,265,1.158,266,0.945,267,1.277,283,0.744,287,0.849,289,2.416,290,0.853,291,0.544,296,0.78,303,0.849,307,0.668,320,0.984,330,0.67,335,0.447,338,1.036,339,1.261,343,0.737,351,1.147,358,1.137,362,1.205,364,1.117,368,0.722,374,0.734,382,3.59,384,1.277,385,0.65,387,0.961,394,0.889,404,0.676,405,1.147,408,0.845,410,1.192,416,1.029,422,0.611,428,0.734,432,0.889,440,0.768,452,1.169,455,1.043,457,0.889,458,0.876,463,1.331,464,0.933,465,0.658,466,1.192,467,0.804,485,0.864,493,1.058,494,1.029,511,1.784,519,1.09,528,1.294,532,1.099,533,0.906,540,0.961,550,0.93,559,1.352,563,1.147,568,0.757,572,1.205,575,0.476,594,0.884,603,0.92,606,1.158,620,1.218,626,0.92,647,0.739,651,0.801,654,1.029,658,0.795,677,0.884,679,0.92,693,0.973,697,1.008,704,0.783,712,1.09,717,0.99,719,1.09,720,1.294,721,0.978,728,1.108,730,2.261,746,0.897,747,1.312,750,1.485,753,1.424,767,1.082,787,1.312,792,0.817,808,1.587,812,0.889,818,0.935,835,0.945,837,1.231,846,0.955,855,1.453,858,1.117,860,1.073,875,0.553,876,1.277,897,0.749,902,0.872,906,0.889,908,0.713,909,1.108,943,1.398,957,2.238,964,1.015,976,1.601,1007,1.036,1008,0.961,1032,1.312,1043,1.158,1063,1.073,1113,0.99,1141,1.261,1154,1.261,1158,1.312,1189,0.789,1204,1.137,1237,1.029,1270,1.277,1273,1.218,1280,1.331,1281,1.312,1290,1.158,1308,1.277,1310,1.352,1312,2.238,1315,1.246,1344,1.205,1348,1.137,1352,1.352,1393,1.918,1399,1.352,1400,1.352,1401,1.727,1453,1.082,1470,1.485,1488,1.065,1490,1.331,1552,1.277,1559,1.294,1561,1.261,1565,1.261,1594,1.108,1611,1.18,1633,1.18,1639,1.424,1643,1.764,1679,0.911,1703,1.424,1708,0.966,1731,1.169,1755,1.294,1762,1.205,1768,1.137,1775,1.065,1794,1.246,1808,1.294,1832,1.082,1856,1.261,1857,1.277,1879,1.398,1943,1.137,1974,0.978,1977,1.562,1989,1.231,2055,1.192,2078,1.065,2081,1.192,2086,1.158,2127,1.192,2131,1.277,2170,1.331,2194,1.424,2248,1.127,2428,1.562,2473,3.59,2510,2.097,2549,1.331,2550,1.352,2564,1.127,2576,1.521,2806,1.562,2823,1.312,2846,1.218,2861,1.667,2968,1.312,3009,1.374,3064,1.205,3102,1.374,3289,2.261,3395,1.117,3536,1.398,3574,1.424,3626,1.246,3788,1.312,3887,1.374,4266,1.246,4541,1.246,4563,1.05,4574,1.058,4636,1.277,4777,1.352,4872,1.562,4873,1.453,4903,1.453,5075,1.667,5243,2.579,5523,1.398,5524,1.352,5525,1.398,5527,1.398,5528,1.485,5529,1.312,5532,1.398,5533,1.374,5534,1.485,5535,1.485,5536,1.374,5537,1.374,5538,1.485,5540,1.398,5541,1.485,5543,1.374,5544,2.397,5545,1.485,5548,1.453,5550,1.374,5552,1.485,5556,1.398,5558,1.374,5560,1.485,5561,1.398,5562,1.485,5566,1.352,5568,1.453,5571,1.485,5574,1.374,5578,1.398,5580,1.485,5583,1.398,5586,1.485,5593,1.374,5602,1.485,5607,1.424,5609,1.485,5610,1.453,5612,2.579,5613,1.485,5614,1.485,5615,1.485,5616,1.352,5617,1.485,5619,1.398,5621,1.485,5622,1.424,5626,1.485,5628,1.485,5629,1.374,5631,1.485,5632,1.485,5635,1.485,5636,1.485,5641,1.485,5643,1.398,5644,2.579,5646,1.453,5647,1.485,5648,1.485,5649,1.398,5650,1.398,5651,1.485,5654,1.374,5655,1.398,5656,1.485,5658,1.398,5659,1.485,5661,1.485,5665,1.485,5666,1.485,5669,1.485,5670,1.485,5672,1.485,5673,1.485,5675,1.485,5676,1.485,5677,1.485,5678,1.485,5679,1.485,5680,1.485,5681,1.485,5682,1.485,5683,1.374,5686,1.485,5687,1.398,5688,1.485,5690,1.485,5691,1.485,5693,1.485,5694,1.312,5695,1.398,5696,1.485,5698,1.485,5699,1.453,5700,1.485,5701,1.453,5702,1.485,5705,1.485,5706,1.485,5708,1.485,5709,2.499,5710,1.485,5711,1.485,5713,1.485,5941,1.61,6020,1.562,6042,1.562,6108,1.562,6155,1.562,6183,1.562,6216,1.562,6299,1.74,6300,1.74,6301,1.74,6302,1.74,6303,1.74,6304,1.74,6305,1.74,6306,1.74,6307,1.74,6308,1.74,6309,1.74,6310,1.74,6311,1.74,6312,1.74,6313,1.74,6314,1.74,6315,1.74,6316,1.74,6317,1.74,6318,1.74,6319,1.74,6320,1.74,6321,1.74,6322,1.74,6323,1.74,6324,1.74,6325,1.74,6326,1.74,6327,1.74,6328,1.74,6329,1.74,6330,1.74,6331,1.74,6332,1.74,6333,1.74,6334,1.74,6335,1.74,6336,1.74,6337,1.74,6338,1.74,6339,1.74,6340,3.266,6341,1.74,6342,1.74,6343,1.74,6344,1.74,6345,1.74,6346,1.74,6347,1.74,6348,1.74,6349,1.74,6350,1.74,6351,1.74,6352,1.74,6353,1.74,6354,1.74,6355,1.74,6356,1.74,6357,1.74]],["keywords/1379",[]],["title/1380",[5848,1021.147]],["content/1380",[66,3.901,87,7.34,123,8.196,167,10.216,223,4.891,224,2.782,230,7.563,251,6.663,263,5.424,351,10.216,370,10.971,372,6.893,682,7.027,698,9.162,741,9.635,1350,12.039,1442,9.868,1812,10.73,2251,12.039,2608,10.124,2960,14.339,3270,13.545,3935,11.525,5848,10.409]],["keywords/1380",[]],["title/1381",[2100,825.695]],["content/1381",[]],["keywords/1381",[]],["title/1382",[2042,532.102]],["content/1382",[1,3.071,2,1.419,3,2.203,11,3.714,15,4.682,20,4.535,22,1.829,25,3.868,65,6.196,66,3.009,79,3.679,136,5.262,146,7.021,155,5.38,195,1.867,222,2.163,223,2.985,224,2.137,225,6.566,228,3.785,235,7.021,263,4.184,270,4.264,277,2.874,281,3.142,289,6.259,303,5.833,330,4.602,335,4.239,340,3.034,352,6.219,397,2.879,427,4.945,485,5.938,526,5.338,575,3.27,605,6.719,627,3.468,647,5.079,752,5.34,804,5.616,847,7.058,873,8.865,874,9.287,875,3.803,902,5.993,1050,5.71,1120,9.439,1189,5.421,1212,7.433,1598,8.192,1992,9.287,2024,10.449,2100,10.261,2161,10.449,2462,8.561,5806,12.62,6358,13.63,6359,13.63,6360,13.63]],["keywords/1382",[]],["title/1383",[864,626.718]],["content/1383",[11,5.314,15,6.302,22,1.741,59,3.547,66,5.44,69,2.241,87,3.336,113,2.989,127,1.96,145,5.922,172,2.993,173,3.013,205,3.764,226,4.895,251,2.396,279,6.821,335,4.395,340,1.787,359,3.452,374,7.676,437,6.499,448,2.795,458,5.61,518,3.123,526,2.279,542,10.477,575,3.779,598,5.043,616,2.048,627,3.231,642,4.251,643,5.169,712,6.98,812,5.69,871,4.057,872,4.731,874,8.653,902,10.833,964,4.109,1126,2.761,1134,5.388,1142,2.804,1165,5.472,1175,4.826,1189,8.957,1628,5.169,1850,6.156,1916,4.136,1995,5.472,2042,2.465,2100,7.505,2134,13.243,2136,6.751,2137,6.517,2138,13.243,2139,6.156,2140,14.098,2141,11.791,2142,12.785,2143,18.261,2144,10.676,2145,13.243,2146,11.139,2147,10.676,2148,6.751,2149,6.751,2150,10.676,2151,6.751,2152,6.751,2153,6.751,2154,6.517,2155,5.881,2156,6.751,2157,6.751,2158,11.139,2257,6.01,2439,6.323,3053,4.985,4574,4.282,6361,8.03,6362,8.03]],["keywords/1383",[]],["title/1384",[13,188.901,15,212.515,895,256.047,975,572.957,6363,717.825]],["content/1384",[13,5.713,15,5.809,16,1.414,22,2.077,25,2.777,71,4.245,87,4.066,136,3.778,139,4.494,172,3.647,185,3.417,186,3.045,195,1.341,207,4.189,224,1.112,226,3.335,273,6.473,291,4.061,338,5.11,340,2.179,367,5.612,370,4.385,399,3.023,408,6.307,422,6.125,434,4.914,445,2.997,494,5.075,572,5.944,575,4.774,603,6.866,641,4.283,651,9.078,749,4.854,871,4.945,895,6.408,975,13.351,1014,6.174,1112,6.301,1182,9.062,1230,7.675,1241,9.789,1443,4.343,1598,5.882,1943,5.609,2100,8.503,2141,11.078,2225,8.228,2450,7.168,5566,6.669,5769,7.943,6363,12.443,6364,8.585,6365,22.476,6366,9.787,6367,9.787,6368,9.787,6369,9.787,6370,14.801,6371,9.787,6372,9.787,6373,17.848,6374,9.787,6375,9.787,6376,9.787,6377,9.787,6378,9.787,6379,9.787,6380,9.062,6381,9.787,6382,9.787,6383,9.787,6384,14.801,6385,9.787,6386,9.787,6387,9.787,6388,9.787]],["keywords/1384",[]],["title/1385",[16,250.43]],["content/1385",[2,2.441,3,3.791,16,2.763,22,2.281,25,6.657,69,5.335,89,5.055,136,7.381,168,3.86,195,2.62,223,4.187,224,2.172,282,3.636,574,8.692,875,5.335,2100,11.176]],["keywords/1385",[]],["title/1386",[282,329.633]],["content/1386",[3,1.623,11,6.184,13,2.221,16,1.451,18,5.729,19,4.178,20,3.341,22,1.96,25,2.849,113,4.267,155,3.963,168,4.362,195,1.376,205,4.707,221,5.041,223,3.304,258,2.004,263,3.083,270,3.141,282,2.87,291,4.14,335,4.869,343,3.729,389,7.988,397,2.121,399,3.082,426,7.573,485,4.374,526,5.72,542,9.737,556,4.374,575,3.62,647,5.623,685,6.738,693,2.624,816,5.563,895,6.044,902,7.97,993,5.434,1014,6.295,1050,4.206,1126,3.452,1133,6.512,1143,5.041,1230,5.207,1368,6.641,1598,6.035,1679,4.61,1709,5.394,1716,4.824,1875,5.08,2100,9.602,2161,7.697,2162,7.906,3482,6.738,3533,6.233,3539,8.441,3677,8.149,3848,6.464,4363,9.297,5441,5.916,6364,13.235,6389,15.089,6390,10.041]],["keywords/1386",[]],["title/1387",[1023,407.123]],["content/1387",[2,1.703,3,2.644,8,5.917,11,4.458,13,4.277,15,6.45,25,4.643,49,4.21,136,4.324,139,5.143,168,3.304,195,2.242,223,4.656,224,1.859,258,3.265,277,3.45,296,6.434,316,6.41,335,3.687,340,3.642,385,5.366,397,3.456,399,4.343,542,8.789,575,4.638,579,7.439,647,6.098,707,5.643,842,5.575,895,4.907,975,7.516,1124,8.993,1126,5.625,1133,5.878,1142,3.911,1230,8.485,1240,8.587,2161,12.544,2162,12.883,3239,15.15,3241,15.15,3242,15.15,3243,15.15,3244,13.756,3430,8.115,3495,10.045,5516,9.295,5795,11.53,6364,9.825,6391,11.201,6392,11.201]],["keywords/1387",[]],["title/1388",[714,537.961,2607,828.392]],["content/1388",[15,3.205,16,3.274,18,2.878,22,1.252,25,5.131,43,3.381,49,3.313,113,3.031,173,4.831,179,6.722,186,4.006,195,1.764,224,1.463,226,2.901,241,5.349,262,5.559,296,5.063,298,6.546,316,5.044,338,6.722,352,5.22,386,8.913,396,5.349,504,6.464,542,12.171,545,8.64,552,6.632,554,8.773,615,7.993,616,3.283,660,6.036,714,7.056,829,5.796,860,6.968,875,3.593,917,9.871,921,5.51,981,9.242,982,8.087,995,7.661,1267,5.463,1453,11.395,1496,11.294,1552,11.639,1916,6.632,1922,10.138,2100,8.613,2117,11.294,2139,9.871,2154,10.45,2155,15.302,2165,11.294,2214,9.637,2217,10.45,2247,10.138,2607,10.866,3451,11.294,5105,10.45,5302,16.74,5718,8.917,6393,12.875,6394,12.875,6395,10.824]],["keywords/1388",[]],["title/1389",[291,378.221,1014,574.998]],["content/1389",[2,1.479,13,3.144,22,1.382,31,3.673,79,3.837,161,5.527,168,4.445,173,5.333,205,9.075,208,5.88,224,1.615,266,6.771,277,2.996,288,7.37,291,7.002,300,9.271,329,5.527,348,7.579,367,8.963,380,8.542,394,6.368,397,3.002,399,3.955,458,6.278,467,5.763,536,9.035,540,6.886,544,9.906,545,9.537,546,5.61,602,7.273,616,3.624,746,6.43,792,5.857,829,6.398,1014,10.317,1076,9.843,1091,7.812,1624,7.472,1684,8.374,1864,9.537,2025,8.145,2100,9.222,3430,7.049,5441,8.374,5795,10.015]],["keywords/1389",[]],["title/1390",[546,544.018,2215,812.067]],["content/1390",[]],["keywords/1390",[]],["title/1391",[205,458.399,291,268.337,539,689.056,546,385.965]],["content/1391",[3,3.159,13,5.042,22,1.613,33,6.864,43,2.999,49,4.27,63,12.154,64,10.573,71,4.954,152,6.181,155,4.508,168,2.306,180,5.533,181,4.785,186,3.553,191,6.729,193,12.154,195,2.274,205,5.354,220,4.846,223,4.699,244,5.244,262,4.931,263,3.506,270,3.573,273,7.554,281,2.633,288,5.923,291,4.554,334,4.706,340,2.542,352,3.297,428,7.235,440,4.425,464,2.861,471,10.575,540,5.533,546,7.716,554,7.782,676,8.134,726,10.575,797,16.434,810,7.471,813,6.327,959,7.173,976,7.134,993,8.982,1461,9.602,1510,9.269,1558,13.952,1580,8.993,1621,6.936,1645,15.367,1654,8.756,1863,7.45,1927,19.991,2100,10.222,2270,10.018,2763,18.82,3188,10.018,4279,10.575,6396,11.421,6397,11.421]],["keywords/1391",[]],["title/1392",[6363,1457.086]],["content/1392",[13,5.343,16,3.166,18,3.832,22,2.13,89,3.695,115,6.39,168,3.462,195,2.349,291,4.705,320,8.504,399,3.503,445,5.25,542,9.211,546,6.768,847,6.434,895,7.242,975,14.703,1014,7.153,1042,6.899,1074,8.556,1230,8.892,1905,12.082,1943,9.826,2248,9.74,6363,20.302,6398,17.147,6399,17.147]],["keywords/1392",[]],["title/1393",[7,394.971,19,225.419,195,133.976,455,514.086]],["content/1393",[2,2.54,16,2.534,19,4.042,22,2.161,66,3.871,79,4.733,89,3.779,195,2.402,207,7.505,223,3.84,226,3.951,281,4.042,349,10.233,377,8.973,440,9.454,455,9.218,1709,9.419,2100,11.625,6400,22.226,6401,17.535,6402,22.226,6403,22.226,6404,17.535]],["keywords/1393",[]],["title/1394",[382,745.942,2473,745.942]],["content/1394",[2,1.133,11,2.966,20,3.622,22,1.558,66,4.198,68,5.244,71,6.95,79,2.939,97,4.854,127,2.657,160,5.103,168,3.235,172,4.057,173,4.085,185,3.801,211,6.612,226,2.453,230,6.44,231,4.346,246,6.081,263,3.342,281,2.51,289,4.999,291,2.987,323,6.759,330,3.676,335,2.453,338,5.684,339,6.921,362,6.612,368,3.963,374,4.029,382,10.291,384,7.008,394,4.877,400,4.619,404,3.709,416,5.645,440,4.218,458,4.809,464,2.727,465,3.612,467,4.415,485,6.981,526,3.089,644,4.346,660,5.103,677,4.854,682,4.33,693,4.188,704,4.297,719,5.983,730,6.612,812,4.877,818,5.131,835,5.186,875,3.038,897,4.114,906,4.877,976,6.888,1008,5.274,1023,2.557,1158,7.2,1189,4.33,1204,6.239,1270,7.008,1315,6.838,1442,6.081,1554,6.921,1594,6.081,1708,5.305,1837,5.432,1856,6.921,2086,6.353,2100,9.059,2117,9.549,2473,10.291,2510,11.812,3412,7.101,5524,7.418,5529,7.2,5544,7.008,5568,7.973,5616,7.418,5619,7.671,5620,8.148,5694,7.2,5704,8.346,5709,7.305,5712,7.973,5817,10.08,6097,9.152,6145,8.836,6405,10.887,6406,10.887]],["keywords/1394",[]],["title/1395",[61,341.406,172,364.419,1150,340.348,3289,593.887]],["content/1395",[]],["keywords/1395",[]],["title/1396",[2042,532.102]],["content/1396",[1,4.074,2,1.882,3,2.922,22,1.758,25,5.131,66,5.003,68,8.709,69,6.322,168,4.575,223,3.96,224,2.574,335,5.106,340,4.024,352,5.22,575,5.436,627,4.6,829,8.139,1133,8.14,3289,13.761,3766,10.454,5967,14.236]],["keywords/1396",[]],["title/1397",[61,264.548,172,451.911,864,273.996,1150,263.728,1221,294.658]],["content/1397",[2,1.634,4,8.372,15,2.636,16,3.193,22,1.819,31,2.737,61,3.697,66,4.569,92,4.722,97,4.722,112,6.925,115,6.972,127,3.832,161,4.118,172,3.946,198,4.838,224,2.125,228,2.941,246,5.914,258,2.113,263,3.251,279,5.163,281,2.441,282,2.014,293,5.914,297,4.474,325,5.073,335,4.216,352,3.057,367,5.953,385,3.473,396,4.399,461,5.647,574,7.137,575,4.489,594,4.722,626,4.912,627,3.995,641,4.634,646,7.283,647,3.946,651,6.341,658,4.244,682,4.211,693,5.409,804,4.363,823,4.677,849,5.871,1023,2.487,1126,5.398,1142,3.697,1163,8.842,1189,7.441,1210,5.017,1215,10.046,1217,8.423,1220,9.271,1221,4.118,1222,5.688,2020,4.613,2094,4.593,2132,5.529,2466,6.431,3289,6.431,3404,5.964,4597,6.501,5242,7.462,5252,8.338,6252,16.941,6298,8.338]],["keywords/1397",[]],["title/1398",[693,360.272,3289,837.083]],["content/1398",[2,1.634,4,8.372,15,2.636,16,3.193,22,1.819,31,2.737,61,3.697,66,4.569,92,4.722,97,4.722,112,6.925,115,6.972,127,3.832,161,4.118,172,3.946,198,4.838,224,2.125,228,2.941,246,5.914,258,2.113,263,3.251,279,5.163,281,2.441,282,2.014,293,5.914,297,4.474,325,5.073,335,4.216,352,3.057,367,5.953,385,3.473,396,4.399,461,5.647,574,7.137,575,4.489,594,4.722,626,4.912,627,3.995,641,4.634,646,7.283,647,3.946,651,6.341,658,4.244,682,4.211,693,5.409,804,4.363,823,4.677,849,5.871,1023,2.487,1126,5.398,1163,8.842,1189,7.441,1210,5.017,1215,10.046,1217,8.423,1220,9.271,1221,4.118,1222,5.688,2020,4.613,2094,4.593,2132,5.529,2466,6.431,3289,6.431,3404,5.964,4597,6.501,5242,7.462,5252,8.338,5262,9.288,6252,16.941,6298,8.338]],["keywords/1398",[]],["title/1399",[16,250.43]],["content/1399",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,3289,11.517]],["keywords/1399",[]],["title/1400",[282,329.633]],["content/1400",[18,5.469,19,4.372,31,3.564,65,6.27,66,4.187,112,6.347,113,4.464,168,4.376,223,4.153,224,2.154,258,2.752,282,3.607,291,5.947,335,5.514,399,2.817,417,7.768,426,7.136,448,6.6,512,7.464,575,5.6,647,7.067,693,3.605,818,6.5,1014,7.911,1126,7.451,1210,8.985,1679,6.333,1709,7.408,1716,6.063,1875,6.384,2020,6.009,3533,8.562,4683,9.551,5252,10.859,5441,8.126]],["keywords/1400",[]],["title/1401",[1023,407.123]],["content/1401",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1125,13.242,1126,6.573,3293,15.518,3430,9.483,3432,9.159,5516,10.861]],["keywords/1401",[]],["title/1402",[291,378.221,1014,574.998]],["content/1402",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1402",[]],["title/1403",[382,745.942,2473,745.942]],["content/1403",[1,0.447,2,0.388,3,0.321,7,0.801,11,0.54,13,0.439,15,7.375,20,0.66,22,0.512,24,0.514,29,1.231,30,0.634,31,0.513,36,0.763,39,1.192,41,0.984,43,0.521,49,0.51,52,0.804,64,0.92,66,0.438,68,0.955,69,0.553,71,1.615,73,0.686,77,1.205,79,0.535,85,1.61,87,0.824,97,0.884,100,1.312,110,0.93,113,0.467,119,1.147,120,0.889,130,0.893,136,0.766,137,1.05,139,1.71,146,1.022,155,1.47,168,0.752,172,0.739,181,0.831,185,0.692,186,1.158,192,0.984,194,1.294,195,0.272,197,1.127,198,0.906,199,1.169,211,1.205,214,0.945,225,0.955,226,0.839,227,0.638,230,1.782,262,0.856,263,0.609,265,1.158,266,0.945,267,1.277,283,0.744,287,0.849,289,2.416,290,0.853,291,0.544,296,0.78,303,0.849,307,0.668,320,0.984,330,0.67,335,0.447,338,1.036,339,1.261,343,0.737,351,1.147,358,1.137,362,1.205,364,1.117,368,0.722,374,0.734,382,3.59,384,1.277,385,0.65,387,0.961,394,0.889,404,0.676,405,1.147,408,0.845,410,1.192,416,1.029,422,0.611,428,0.734,432,0.889,440,0.768,452,1.169,455,1.043,457,0.889,458,0.876,463,1.331,464,0.933,465,0.658,466,1.192,467,0.804,485,0.864,493,1.058,494,1.029,511,1.784,519,1.09,528,1.294,532,1.099,533,0.906,540,0.961,550,0.93,559,1.352,563,1.147,568,0.757,572,1.205,575,0.476,594,0.884,603,0.92,606,1.158,620,1.218,626,0.92,647,0.739,651,0.801,654,1.029,658,0.795,677,0.884,679,0.92,693,0.973,697,1.008,704,0.783,712,1.09,717,0.99,719,1.09,720,1.294,721,0.978,728,1.108,730,2.261,746,0.897,747,1.312,750,1.485,753,1.424,767,1.082,787,1.312,792,0.817,808,1.587,812,0.889,818,0.935,835,0.945,837,1.231,846,0.955,855,1.453,858,1.117,860,1.073,875,0.553,876,1.277,897,0.749,902,0.872,906,0.889,908,0.713,909,1.108,943,1.398,957,2.238,964,1.015,976,1.601,1007,1.036,1008,0.961,1032,1.312,1043,1.158,1063,1.073,1113,0.99,1141,1.261,1154,1.261,1158,1.312,1189,0.789,1204,1.137,1237,1.029,1270,1.277,1273,1.218,1280,1.331,1281,1.312,1290,1.158,1308,1.277,1310,1.352,1312,2.238,1315,1.246,1344,1.205,1348,1.137,1352,1.352,1393,1.918,1399,1.352,1400,1.352,1401,1.727,1453,1.082,1470,1.485,1488,1.065,1490,1.331,1552,1.277,1559,1.294,1561,1.261,1565,1.261,1594,1.108,1611,1.18,1633,1.18,1639,1.424,1643,1.764,1679,0.911,1703,1.424,1708,0.966,1731,1.169,1755,1.294,1762,1.205,1768,1.137,1775,1.065,1794,1.246,1808,1.294,1832,1.082,1856,1.261,1857,1.277,1879,1.398,1943,1.137,1974,0.978,1977,1.562,1989,1.231,2055,1.192,2078,1.065,2081,1.192,2086,1.158,2127,1.192,2131,1.277,2170,1.331,2194,1.424,2248,1.127,2428,1.562,2473,3.59,2510,2.097,2549,1.331,2550,1.352,2564,1.127,2576,1.521,2806,1.562,2823,1.312,2846,1.218,2861,1.667,2968,1.312,3009,1.374,3064,1.205,3102,1.374,3289,2.261,3395,1.117,3536,1.398,3574,1.424,3626,1.246,3788,1.312,3887,1.374,4266,1.246,4541,1.246,4563,1.05,4574,1.058,4636,1.277,4777,1.352,4872,1.562,4873,1.453,4903,1.453,5075,1.667,5243,2.579,5523,1.398,5524,1.352,5525,1.398,5527,1.398,5528,1.485,5529,1.312,5532,1.398,5533,1.374,5534,1.485,5535,1.485,5536,1.374,5537,1.374,5538,1.485,5540,1.398,5541,1.485,5543,1.374,5544,2.397,5545,1.485,5548,1.453,5550,1.374,5552,1.485,5556,1.398,5558,1.374,5560,1.485,5561,1.398,5562,1.485,5566,1.352,5568,1.453,5571,1.485,5574,1.374,5578,1.398,5580,1.485,5583,1.398,5586,1.485,5593,1.374,5602,1.485,5607,1.424,5609,1.485,5610,1.453,5612,2.579,5613,1.485,5614,1.485,5615,1.485,5616,1.352,5617,1.485,5619,1.398,5621,1.485,5622,1.424,5626,1.485,5628,1.485,5629,1.374,5631,1.485,5632,1.485,5635,1.485,5636,1.485,5641,1.485,5643,1.398,5644,2.579,5646,1.453,5647,1.485,5648,1.485,5649,1.398,5650,1.398,5651,1.485,5654,1.374,5655,1.398,5656,1.485,5658,1.398,5659,1.485,5661,1.485,5665,1.485,5666,1.485,5669,1.485,5670,1.485,5672,1.485,5673,1.485,5675,1.485,5676,1.485,5677,1.485,5678,1.485,5679,1.485,5680,1.485,5681,1.485,5682,1.485,5683,1.374,5686,1.485,5687,1.398,5688,1.485,5690,1.485,5691,1.485,5693,1.485,5694,1.312,5695,1.398,5696,1.485,5698,1.485,5699,1.453,5700,1.485,5701,1.453,5702,1.485,5705,1.485,5706,1.485,5708,1.485,5709,2.499,5710,1.485,5711,1.485,5713,1.485,5941,1.61,6020,1.562,6042,1.562,6108,1.562,6155,1.562,6183,1.562,6216,1.562,6299,1.74,6300,1.74,6301,1.74,6302,1.74,6303,1.74,6304,1.74,6305,1.74,6306,1.74,6307,1.74,6308,1.74,6309,1.74,6310,1.74,6311,1.74,6312,1.74,6313,1.74,6314,1.74,6315,1.74,6316,1.74,6317,1.74,6318,1.74,6319,1.74,6320,1.74,6321,1.74,6322,1.74,6323,1.74,6324,1.74,6325,1.74,6326,1.74,6327,1.74,6328,1.74,6329,1.74,6330,1.74,6331,1.74,6332,1.74,6333,1.74,6334,1.74,6335,1.74,6336,1.74,6337,1.74,6338,1.74,6339,1.74,6340,3.266,6341,1.74,6342,1.74,6343,1.74,6344,1.74,6345,1.74,6346,1.74,6347,1.74,6348,1.74,6349,1.74,6350,1.74,6351,1.74,6352,1.74,6353,1.74,6354,1.74,6355,1.74,6356,1.74,6357,1.74]],["keywords/1403",[]],["title/1404",[5848,1021.147]],["content/1404",[66,3.901,87,7.34,123,8.196,167,10.216,223,4.891,224,2.782,230,7.563,251,6.663,263,5.424,351,10.216,370,10.971,372,6.893,682,7.027,698,9.162,741,9.635,1350,12.039,1442,9.868,1812,10.73,2251,12.039,2608,10.124,2960,14.339,3270,13.545,3935,11.525,5848,10.409]],["keywords/1404",[]],["title/1405",[1758,971.224,3289,837.083]],["content/1405",[]],["keywords/1405",[]],["title/1406",[2042,532.102]],["content/1406",[1,4.074,2,1.882,3,2.922,22,1.758,25,5.131,66,5.003,68,8.709,69,6.322,168,4.575,223,3.96,224,2.574,335,5.106,340,4.024,352,5.22,575,5.436,627,4.6,829,8.139,1133,8.14,3289,13.761,3766,10.454,5967,14.236]],["keywords/1406",[]],["title/1407",[864,626.718]],["content/1407",[18,4.381,19,4.519,61,6.844,127,4.785,172,10.191,647,8.876,752,7.68,1221,7.623,1299,11.906,2046,10.949,3053,12.17,5234,16.481,5235,16.481,5236,17.195]],["keywords/1407",[]],["title/1408",[172,364.419,647,364.419,1221,380.264,1299,593.887]],["content/1408",[2,1.444,4,10.154,15,3.453,16,2.751,22,1.851,66,4.8,112,4.643,115,5.17,127,3.386,224,1.576,226,3.126,228,3.853,246,7.749,258,3.8,263,4.259,279,6.263,281,3.198,335,3.126,367,5.261,408,5.912,445,4.248,575,4.569,604,7.146,641,6.072,646,8.833,647,5.17,693,5.683,849,7.121,1023,3.259,1110,7.625,1126,6.546,1142,4.844,1163,10.724,1189,7.573,1214,9.05,1215,6.307,1217,8.572,1220,8.531,1221,7.405,1222,7.453,1290,8.097,2461,9.959,4598,10.636,5242,9.776,6252,18.799,6298,10.924]],["keywords/1408",[]],["title/1409",[172,426.353,335,257.805,1151,633.815]],["content/1409",[2,1.634,4,8.372,15,2.636,16,3.345,22,1.819,31,2.737,66,4.879,69,2.955,92,4.722,97,4.722,112,5.254,113,2.493,115,6.972,127,4.567,161,4.118,172,3.946,198,4.838,224,2.125,228,2.941,246,5.914,258,2.113,263,3.251,279,5.163,281,2.441,282,2.014,293,5.914,297,4.474,325,5.073,335,3.538,352,3.057,367,4.015,396,4.399,461,5.647,574,7.137,575,4.489,594,4.722,607,4.722,627,4.76,641,4.634,644,4.228,646,7.283,647,3.946,658,4.244,682,4.211,693,5.409,804,4.363,823,4.677,849,5.871,1023,2.487,1126,5.398,1142,3.697,1163,8.842,1175,6.364,1189,8.23,1210,5.017,1215,7.137,1217,8.423,1220,9.271,1221,6.105,1222,5.688,1290,6.18,2020,4.613,2094,4.593,2461,7.601,2466,6.431,3289,6.431,3404,5.964,4597,6.501,5242,7.462,5252,8.338,6252,16.941,6298,8.338]],["keywords/1409",[]],["title/1410",[16,250.43]],["content/1410",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,3289,11.517]],["keywords/1410",[]],["title/1411",[282,329.633]],["content/1411",[18,5.469,19,4.372,31,3.564,65,6.27,66,4.187,112,6.347,113,4.464,168,4.376,223,4.153,224,2.154,258,2.752,282,3.607,291,5.947,335,5.514,399,2.817,417,7.768,426,7.136,448,6.6,512,7.464,575,5.6,647,7.067,693,3.605,818,6.5,1014,7.911,1126,7.451,1210,8.985,1679,6.333,1709,7.408,1716,6.063,1875,6.384,2020,6.009,3533,8.562,4601,9.397,4683,9.551,5441,8.126]],["keywords/1411",[]],["title/1412",[1023,407.123]],["content/1412",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1125,13.242,1126,6.573,3293,15.518,3430,9.483,3432,9.159,5516,10.861]],["keywords/1412",[]],["title/1413",[291,378.221,1014,574.998]],["content/1413",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1413",[]],["title/1414",[382,745.942,2473,745.942]],["content/1414",[1,0.447,2,0.388,3,0.321,7,0.801,11,0.54,13,0.439,15,7.375,20,0.66,22,0.512,24,0.514,29,1.231,30,0.634,31,0.513,36,0.763,39,1.192,41,0.984,43,0.521,49,0.51,52,0.804,64,0.92,66,0.438,68,0.955,69,0.553,71,1.615,73,0.686,77,1.205,79,0.535,85,1.61,87,0.824,97,0.884,100,1.312,110,0.93,113,0.467,119,1.147,120,0.889,130,0.893,136,0.766,137,1.05,139,1.71,146,1.022,155,1.47,168,0.752,172,0.739,181,0.831,185,0.692,186,1.158,192,0.984,194,1.294,195,0.272,197,1.127,198,0.906,199,1.169,211,1.205,214,0.945,225,0.955,226,0.839,227,0.638,230,1.782,262,0.856,263,0.609,265,1.158,266,0.945,267,1.277,283,0.744,287,0.849,289,2.416,290,0.853,291,0.544,296,0.78,303,0.849,307,0.668,320,0.984,330,0.67,335,0.447,338,1.036,339,1.261,343,0.737,351,1.147,358,1.137,362,1.205,364,1.117,368,0.722,374,0.734,382,3.59,384,1.277,385,0.65,387,0.961,394,0.889,404,0.676,405,1.147,408,0.845,410,1.192,416,1.029,422,0.611,428,0.734,432,0.889,440,0.768,452,1.169,455,1.043,457,0.889,458,0.876,463,1.331,464,0.933,465,0.658,466,1.192,467,0.804,485,0.864,493,1.058,494,1.029,511,1.784,519,1.09,528,1.294,532,1.099,533,0.906,540,0.961,550,0.93,559,1.352,563,1.147,568,0.757,572,1.205,575,0.476,594,0.884,603,0.92,606,1.158,620,1.218,626,0.92,647,0.739,651,0.801,654,1.029,658,0.795,677,0.884,679,0.92,693,0.973,697,1.008,704,0.783,712,1.09,717,0.99,719,1.09,720,1.294,721,0.978,728,1.108,730,2.261,746,0.897,747,1.312,750,1.485,753,1.424,767,1.082,787,1.312,792,0.817,808,1.587,812,0.889,818,0.935,835,0.945,837,1.231,846,0.955,855,1.453,858,1.117,860,1.073,875,0.553,876,1.277,897,0.749,902,0.872,906,0.889,908,0.713,909,1.108,943,1.398,957,2.238,964,1.015,976,1.601,1007,1.036,1008,0.961,1032,1.312,1043,1.158,1063,1.073,1113,0.99,1141,1.261,1154,1.261,1158,1.312,1189,0.789,1204,1.137,1237,1.029,1270,1.277,1273,1.218,1280,1.331,1281,1.312,1290,1.158,1308,1.277,1310,1.352,1312,2.238,1315,1.246,1344,1.205,1348,1.137,1352,1.352,1393,1.918,1399,1.352,1400,1.352,1401,1.727,1453,1.082,1470,1.485,1488,1.065,1490,1.331,1552,1.277,1559,1.294,1561,1.261,1565,1.261,1594,1.108,1611,1.18,1633,1.18,1639,1.424,1643,1.764,1679,0.911,1703,1.424,1708,0.966,1731,1.169,1755,1.294,1762,1.205,1768,1.137,1775,1.065,1794,1.246,1808,1.294,1832,1.082,1856,1.261,1857,1.277,1879,1.398,1943,1.137,1974,0.978,1977,1.562,1989,1.231,2055,1.192,2078,1.065,2081,1.192,2086,1.158,2127,1.192,2131,1.277,2170,1.331,2194,1.424,2248,1.127,2428,1.562,2473,3.59,2510,2.097,2549,1.331,2550,1.352,2564,1.127,2576,1.521,2806,1.562,2823,1.312,2846,1.218,2861,1.667,2968,1.312,3009,1.374,3064,1.205,3102,1.374,3289,2.261,3395,1.117,3536,1.398,3574,1.424,3626,1.246,3788,1.312,3887,1.374,4266,1.246,4541,1.246,4563,1.05,4574,1.058,4636,1.277,4777,1.352,4872,1.562,4873,1.453,4903,1.453,5075,1.667,5243,2.579,5523,1.398,5524,1.352,5525,1.398,5527,1.398,5528,1.485,5529,1.312,5532,1.398,5533,1.374,5534,1.485,5535,1.485,5536,1.374,5537,1.374,5538,1.485,5540,1.398,5541,1.485,5543,1.374,5544,2.397,5545,1.485,5548,1.453,5550,1.374,5552,1.485,5556,1.398,5558,1.374,5560,1.485,5561,1.398,5562,1.485,5566,1.352,5568,1.453,5571,1.485,5574,1.374,5578,1.398,5580,1.485,5583,1.398,5586,1.485,5593,1.374,5602,1.485,5607,1.424,5609,1.485,5610,1.453,5612,2.579,5613,1.485,5614,1.485,5615,1.485,5616,1.352,5617,1.485,5619,1.398,5621,1.485,5622,1.424,5626,1.485,5628,1.485,5629,1.374,5631,1.485,5632,1.485,5635,1.485,5636,1.485,5641,1.485,5643,1.398,5644,2.579,5646,1.453,5647,1.485,5648,1.485,5649,1.398,5650,1.398,5651,1.485,5654,1.374,5655,1.398,5656,1.485,5658,1.398,5659,1.485,5661,1.485,5665,1.485,5666,1.485,5669,1.485,5670,1.485,5672,1.485,5673,1.485,5675,1.485,5676,1.485,5677,1.485,5678,1.485,5679,1.485,5680,1.485,5681,1.485,5682,1.485,5683,1.374,5686,1.485,5687,1.398,5688,1.485,5690,1.485,5691,1.485,5693,1.485,5694,1.312,5695,1.398,5696,1.485,5698,1.485,5699,1.453,5700,1.485,5701,1.453,5702,1.485,5705,1.485,5706,1.485,5708,1.485,5709,2.499,5710,1.485,5711,1.485,5713,1.485,5941,1.61,6020,1.562,6042,1.562,6108,1.562,6155,1.562,6183,1.562,6216,1.562,6299,1.74,6300,1.74,6301,1.74,6302,1.74,6303,1.74,6304,1.74,6305,1.74,6306,1.74,6307,1.74,6308,1.74,6309,1.74,6310,1.74,6311,1.74,6312,1.74,6313,1.74,6314,1.74,6315,1.74,6316,1.74,6317,1.74,6318,1.74,6319,1.74,6320,1.74,6321,1.74,6322,1.74,6323,1.74,6324,1.74,6325,1.74,6326,1.74,6327,1.74,6328,1.74,6329,1.74,6330,1.74,6331,1.74,6332,1.74,6333,1.74,6334,1.74,6335,1.74,6336,1.74,6337,1.74,6338,1.74,6339,1.74,6340,3.266,6341,1.74,6342,1.74,6343,1.74,6344,1.74,6345,1.74,6346,1.74,6347,1.74,6348,1.74,6349,1.74,6350,1.74,6351,1.74,6352,1.74,6353,1.74,6354,1.74,6355,1.74,6356,1.74,6357,1.74]],["keywords/1414",[]],["title/1415",[5848,1021.147]],["content/1415",[66,3.901,87,7.34,123,8.196,167,10.216,223,4.891,224,2.782,230,7.563,251,6.663,263,5.424,351,10.216,370,10.971,372,6.893,682,7.027,698,9.162,741,9.635,1350,12.039,1442,9.868,1812,10.73,2251,12.039,2608,10.124,2960,14.339,3270,13.545,3935,11.525,5848,10.409]],["keywords/1415",[]],["title/1416",[6407,1457.086]],["content/1416",[]],["keywords/1416",[]],["title/1417",[2042,532.102]],["content/1417",[2,1.651,3,2.563,11,4.322,22,2.025,25,5.912,65,7.21,66,4.599,168,3.202,195,2.173,224,1.802,227,5.099,263,4.869,289,7.283,330,5.355,340,3.53,343,5.89,352,4.579,416,8.225,448,5.52,493,8.458,518,6.168,526,4.501,575,3.805,627,4.036,767,8.649,808,6.759,831,11.27,902,6.973,1189,6.308,1598,9.532,1794,9.962,1988,8.877,3514,10.083,3518,10.49,5805,19.289,6407,13.334,6408,18.273,6409,15.861,6410,15.861]],["keywords/1417",[]],["title/1418",[864,626.718]],["content/1418",[1,3.922,11,4.742,59,7.687,168,3.514,185,7.723,250,9.72,340,3.874,385,5.707,457,7.797,627,4.428,647,6.486,679,8.073,693,5.782,767,9.491,902,9.726,1189,6.921,1364,17.38,1794,10.931,1837,8.684,2094,9.594,2564,13.813,3790,15.265,6411,17.403]],["keywords/1418",[]],["title/1419",[16,250.43]],["content/1419",[2,2.441,3,3.791,16,2.763,22,2.281,25,6.657,69,5.335,89,5.055,136,7.381,168,3.86,195,2.62,223,4.187,224,2.172,282,3.636,574,8.692,875,5.335,6407,19.722]],["keywords/1419",[]],["title/1420",[282,329.633]],["content/1420",[11,6.568,13,3.779,14,4.125,18,5.943,19,3.938,20,3.955,22,1.156,30,3.801,31,3.073,59,5.251,62,8.273,103,5.133,113,5.45,120,5.326,130,5.352,168,4.037,223,2.604,227,7.028,258,2.372,282,3.249,389,9.045,399,2.429,426,7.835,526,6.204,627,4.347,647,4.43,831,5.759,1126,6.875,1142,4.151,1210,5.633,1716,5.462,1875,5.751,2027,11.044,2122,9.858,3514,7.557,3518,7.862,3533,7.38,3539,9.994,5744,9.994,6408,17.54]],["keywords/1420",[]],["title/1421",[1023,407.123]],["content/1421",[2,1.607,3,2.495,8,5.583,11,5.576,15,5.094,25,4.382,31,3.99,49,3.972,62,8.467,168,3.117,195,2.115,223,4.482,224,1.754,227,4.964,258,3.081,277,3.255,296,6.071,316,6.048,340,3.437,385,5.063,397,3.262,399,4.181,526,5.808,579,7.019,647,5.754,707,5.324,842,5.26,1124,8.486,1126,7.036,2122,10.089,3404,8.696,3430,7.657,3514,9.815,3518,10.211,3688,13.543,5231,11.836,5516,8.77,5744,12.98,5792,13.543,5795,10.879,5810,12.157,6412,15.439,6413,15.439]],["keywords/1421",[]],["title/1422",[714,537.961,2607,828.392]],["content/1422",[16,3.627,186,6.661,224,2.432,616,5.459,660,10.035,714,8.356,2607,12.867,5718,14.826]],["keywords/1422",[]],["title/1423",[382,745.942,2473,745.942]],["content/1423",[2,1.276,20,4.081,22,1.698,66,3.857,71,5.319,79,3.311,139,5.632,168,3.527,172,4.57,173,4.602,192,6.083,211,7.448,230,6.89,231,4.896,263,3.765,281,2.827,323,7.614,339,7.797,368,4.464,374,4.539,382,11.011,394,5.495,416,6.36,458,5.417,464,3.073,465,4.069,485,7.61,519,6.741,594,5.469,644,4.896,660,5.749,682,4.878,719,6.741,835,5.843,875,3.422,906,5.495,1008,5.942,1312,7.371,1315,7.703,1442,6.85,1554,7.797,1594,6.85,1708,5.976,1837,6.12,1856,7.797,2473,11.011,2510,12.488,3626,7.703,5524,8.357,5536,8.494,5544,7.895,5563,9.657,5569,9.657,5572,9.657,5579,9.657,5581,8.982,5585,8.982,5607,8.804,5610,8.982,5611,9.657,5616,8.357,5620,9.18,5622,8.804,5683,8.494,5692,9.657,5694,8.111,5699,8.982,5701,8.982,5707,9.657,5709,8.23,5712,8.982,6407,14.686,6408,15.322,6414,12.264,6415,12.264]],["keywords/1423",[]],["title/1424",[5431,1297.249]],["content/1424",[]],["keywords/1424",[]],["title/1425",[2042,532.102]],["content/1425",[2,1.958,3,3.04,22,2.258,25,5.338,61,6.567,207,8.051,223,4.12,224,2.137,229,7.88,235,9.689,250,10.506,335,4.239,340,4.187,352,5.431,575,4.513,647,7.01,693,4.917,1133,6.758,1210,8.913,2132,9.821,5431,14.079,6416,18.811,6417,18.811]],["keywords/1425",[]],["title/1426",[16,250.43]],["content/1426",[1,3.893,2,2.291,3,3.558,16,2.496,22,2.14,25,6.248,47,7.814,66,4.861,69,4.82,89,4.744,136,6.668,168,4.893,195,2.367,223,3.783,224,2.501,282,3.285,335,4.961,347,6.226,574,7.853,616,4.405,771,7.426,829,7.777,875,4.82,897,6.527,5431,12.929]],["keywords/1426",[]],["title/1427",[282,329.633]],["content/1427",[11,6.586,16,2.315,18,4.687,19,3.694,22,1.558,30,3.481,65,4.949,66,4.935,112,5.363,113,3.772,155,4.297,168,5.111,172,5.972,220,4.619,221,5.466,223,4.593,224,1.82,226,2.453,258,3.198,262,4.701,282,3.048,291,5.218,335,5.447,389,8.484,397,2.3,399,3.273,417,6.131,426,7.233,448,3.789,512,5.892,518,4.233,556,4.743,575,5.032,647,4.057,693,2.846,818,5.131,849,5.992,993,5.892,1014,6.685,1126,6.537,1210,5.158,1679,4.999,1709,8.608,1716,5.124,1875,5.395,2020,4.743,3553,8.346,3848,7.008,3850,7.305,4683,7.54,5441,6.414,5514,8.836,5515,8.836,6418,9.549]],["keywords/1427",[]],["title/1428",[1023,407.123]],["content/1428",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1126,6.573,3430,9.483,3432,9.159,5432,17.704,5516,10.861,6419,19.12]],["keywords/1428",[]],["title/1429",[66,252.595,5431,856.309,6418,1003.508]],["content/1429",[2,1.394,3,2.165,16,2.685,30,4.283,43,6.053,49,3.446,70,5.389,113,3.153,127,3.269,168,5.189,172,4.992,180,6.489,185,6.489,195,1.835,223,4.07,270,4.19,277,2.824,339,8.515,343,4.975,357,6.279,374,4.958,385,4.393,397,2.83,399,4.947,427,4.859,440,5.19,455,7.042,464,5.347,465,7.08,481,8.223,494,6.946,539,9.438,571,9.615,829,6.03,1546,11.749,1643,6.346,1684,7.892,2041,8.061,2422,8.223,5431,10.025,6418,16.302,6420,13.394,6421,18.585,6422,13.394,6423,18.585,6424,18.585,6425,18.585,6426,13.394]],["keywords/1429",[]],["title/1430",[291,378.221,1014,574.998]],["content/1430",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1430",[]],["title/1431",[382,745.942,2473,745.942]],["content/1431",[1,0.914,2,0.744,3,0.655,11,1.105,13,0.897,22,0.695,25,1.151,29,2.517,30,1.296,31,1.048,39,2.437,41,2.011,43,1.065,49,1.043,52,1.644,64,1.881,66,0.895,68,1.953,69,1.131,71,3.102,73,1.403,77,2.462,79,1.094,87,1.684,97,1.808,100,2.682,107,2.117,110,1.901,113,0.954,119,2.344,136,1.565,137,2.147,139,3.285,146,2.089,155,1.6,168,1.444,172,1.511,181,1.699,185,1.416,186,2.226,192,2.011,196,1.571,199,2.389,202,2.808,211,2.462,225,1.953,226,0.914,227,1.304,230,3.251,262,1.751,265,2.366,266,1.932,267,2.61,283,1.521,287,1.735,289,4.407,290,1.743,291,1.113,303,1.735,307,1.365,312,1.735,320,2.011,330,1.369,338,2.117,343,1.506,358,2.323,362,2.462,364,2.284,368,1.476,370,1.817,374,1.501,382,6.266,384,2.61,385,1.33,394,1.817,404,1.381,405,2.344,408,1.728,409,2.194,410,2.437,416,2.103,428,1.501,432,1.817,440,2.772,452,2.389,455,2.132,458,1.791,463,2.721,464,1.792,465,1.345,466,2.437,467,1.644,485,1.766,491,2.547,493,2.162,494,3.709,505,2.061,511,3.427,518,1.577,519,2.228,528,2.645,532,2.246,533,1.852,540,1.964,550,1.901,572,2.462,575,0.973,594,1.808,603,1.881,607,1.808,620,2.489,626,1.881,651,1.638,654,2.103,658,1.625,677,1.808,679,1.881,693,1.87,696,2.61,697,2.061,704,1.6,712,2.228,717,2.023,719,2.228,721,1.999,730,4.344,746,1.834,747,2.682,753,2.911,787,2.682,792,1.671,808,1.728,812,1.817,818,1.911,829,1.825,834,2.547,835,1.932,846,1.953,858,2.284,860,2.194,871,2.048,875,1.131,897,1.532,906,1.817,908,1.457,909,2.265,938,2.412,957,4.299,964,2.075,976,3.075,1007,2.117,1008,1.964,1022,2.246,1032,2.682,1043,2.366,1063,2.194,1141,2.578,1154,2.578,1158,2.682,1189,1.613,1194,3.192,1204,2.323,1237,2.103,1270,2.61,1273,2.489,1280,2.721,1281,2.682,1298,2.682,1308,2.61,1310,2.763,1312,4.299,1315,2.547,1344,2.462,1348,2.323,1352,2.763,1355,2.412,1393,4.944,1399,2.763,1400,2.763,1401,1.881,1453,2.211,1488,2.178,1490,2.721,1559,2.645,1561,2.578,1565,2.578,1579,3.108,1594,2.265,1611,2.412,1633,2.412,1643,3.389,1679,1.862,1703,2.911,1708,1.976,1731,2.389,1762,2.462,1775,2.178,1794,2.547,1808,2.645,1832,2.211,1856,2.578,1857,2.61,1879,2.857,1974,1.999,1989,2.517,2041,3.102,2055,2.437,2078,2.178,2081,2.437,2086,2.366,2127,2.437,2131,2.61,2170,2.721,2194,2.911,2248,2.303,2264,2.857,2473,6.266,2510,4.029,2549,2.721,2550,2.763,2564,2.303,2846,2.489,2898,3.192,2968,2.682,3009,2.808,3064,2.462,3102,2.808,3395,2.284,3536,2.857,3574,2.911,3626,2.547,3788,2.682,3887,2.808,4153,2.808,4266,2.547,4541,4.493,4609,2.578,4636,2.61,4777,2.763,4903,2.969,5226,2.969,5243,4.954,5431,3.035,5519,3.192,5520,3.192,5521,3.291,5522,3.291,5523,2.857,5524,2.763,5525,2.857,5526,3.291,5527,2.857,5528,3.035,5529,2.682,5530,3.291,5531,3.291,5532,2.857,5533,2.808,5534,3.035,5535,3.035,5536,2.808,5537,2.808,5538,3.035,5539,3.035,5540,2.857,5541,3.035,5542,3.291,5543,2.808,5544,4.605,5545,3.035,5546,3.291,5547,3.291,5548,2.969,5549,3.291,5550,2.808,5551,3.291,5552,3.035,5553,3.291,5554,3.108,5555,3.291,5556,2.857,5557,3.291,5558,2.808,5559,3.035,5560,3.035,5561,2.857,5562,3.035,5563,3.192,5564,3.291,5565,3.291,5566,2.763,5567,3.291,5568,2.969,5569,3.192,5570,3.291,5571,3.035,5572,3.192,5573,3.291,5574,2.808,5575,3.291,5576,3.291,5577,3.291,5578,2.857,5579,3.192,5580,3.035,5581,2.969,5582,3.291,5583,2.857,5584,3.291,5585,2.969,5586,3.035,5587,3.291,5588,3.291,5589,3.291,5590,3.291,5591,3.291,5592,3.291,5593,2.808,5594,3.291,5595,2.969,5596,3.291,5597,3.291,5598,3.035,5599,3.291,5600,3.291,5601,3.291,5602,3.035,5603,3.291,5604,3.291,5605,3.035,5606,3.291,5607,2.911,5608,3.291,5609,3.035,5610,2.969,5611,3.192,5612,4.954,5613,3.035,5614,3.035,5615,3.035,5616,2.763,5617,3.035,5618,3.291,5619,2.857,5620,3.035,5621,3.035,5622,2.911,5623,3.291,5624,5.806,5625,3.291,5626,3.035,5627,3.291,5628,3.035,5629,2.808,5630,3.291,5631,3.035,5632,3.035,5633,3.291,5634,3.291,5635,3.035,5636,3.035,5637,3.291,5638,3.291,5639,3.291,5640,3.035,5641,3.035,5642,3.291,5643,2.857,5644,4.954,5645,3.291,5646,2.969,5647,3.035,5648,3.035,5649,2.857,5650,2.857,5651,3.035,5652,3.035,5653,3.035,5654,2.808,5655,2.857,5656,3.035,5657,3.291,5658,2.857,5659,3.035,5660,3.291,5661,3.035,5662,3.291,5663,3.035,5664,3.291,5665,3.035,5666,3.035,5667,3.291,5668,3.192,5669,3.035,5670,3.035,5671,3.035,5672,3.035,5673,3.035,5674,3.035,5675,3.035,5676,3.035,5677,3.035,5678,3.035,5679,3.035,5680,3.035,5681,3.035,5682,3.035,5683,2.808,5684,3.291,5685,3.291,5686,3.035,5687,2.857,5688,3.035,5689,3.291,5690,3.035,5691,3.035,5692,3.192,5693,3.035,5694,2.682,5695,2.857,5696,3.035,5697,3.291,5698,3.035,5699,2.969,5700,3.035,5701,2.969,5702,3.035,5703,3.291,5704,3.108,5705,3.035,5706,3.035,5707,3.192,5708,3.035,5709,2.721,5710,3.035,5711,3.035,5712,2.969,5713,3.035]],["keywords/1431",[]],["title/1432",[5848,1021.147]],["content/1432",[2,1.27,19,4.677,43,4.57,44,7.854,66,3.842,89,2.629,113,4.775,167,10.063,168,3.514,223,4.844,224,2.513,230,5.894,251,6.052,263,5.343,343,4.531,351,10.063,370,10.478,372,5.371,415,9.348,417,9.802,426,3.558,428,6.441,434,8.737,440,7.86,464,3.057,465,6.73,483,8.935,490,3.404,493,6.506,608,7.12,682,4.852,698,6.326,741,9.491,974,6.991,1342,9.606,1442,6.814,1812,7.409,1973,7.259,2078,11.882,2125,7.259,2251,8.313,2608,6.991,3935,7.958,4266,7.663,5123,9.606,5431,13.026,5753,9.902,5848,7.188,6256,10.257,6257,10.257,6258,10.257,6259,10.257,6260,10.257,6261,10.257]],["keywords/1432",[]],["title/1433",[223,301.858,1368,911.566]],["content/1433",[]],["keywords/1433",[]],["title/1434",[750,1031.638,916,1276.224]],["content/1434",[13,1.641,15,2.966,19,1.709,25,2.104,34,8.921,43,1.947,49,1.908,75,4.328,103,5.146,113,2.806,136,2.863,139,6.862,181,7.17,196,4.618,206,3.068,209,16.156,212,7.774,262,5.146,263,2.277,269,5.225,296,2.916,297,10.94,356,4.212,374,5.531,434,3.723,511,3.552,522,4.714,544,3.795,546,2.927,552,3.82,559,5.053,612,6.019,654,3.845,682,2.949,693,1.938,834,4.658,872,4.369,964,7.647,1007,6.223,1078,5.053,1628,4.774,1707,3.954,1708,9.757,1930,4.658,1943,12.061,2086,12.772,2594,9.883,2633,8.921,2846,7.317,3315,6.866,4292,15.414,5550,5.136,6056,5.839,6427,6.866,6428,7.416,6429,19.852,6430,7.416,6431,7.416,6432,23.178,6433,7.416,6434,7.416,6435,7.416,6436,7.416,6437,20.025,6438,7.416,6439,7.416,6440,17.115,6441,7.416,6442,7.416,6443,7.416,6444,7.416,6445,7.416,6446,7.416,6447,7.416,6448,7.416,6449,7.416,6450,7.416,6451,7.416,6452,7.416,6453,7.416,6454,7.416,6455,7.416,6456,7.416,6457,7.416,6458,7.416,6459,7.416,6460,7.416,6461,7.416,6462,7.416,6463,7.416,6464,7.416,6465,7.416,6466,7.416,6467,7.416,6468,7.416]],["keywords/1434",[]],["title/1435",[570,756.644,1443,507.721,1554,727.292]],["content/1435",[2,1.419,37,9.784,68,6.566,87,5.663,89,2.937,187,11.459,196,7.288,212,12.27,214,11.609,216,5.734,219,6.166,220,5.783,223,5.337,251,4.066,258,2.72,262,10.028,291,5.162,293,7.613,307,6.333,312,5.833,325,6.529,333,8.891,524,11.459,559,15.825,569,7.068,605,6.719,616,3.476,682,5.421,733,9.604,770,9.982,792,7.751,897,8.139,964,11.022,1276,12.62,1303,9.604,1368,9.014,1594,7.613,1604,9.604,1624,7.165,1702,8.462,1843,8.462,2018,9.982,2487,9.604,6429,16.513,6469,12.62,6470,13.63]],["keywords/1435",[]],["title/1436",[421,633.815,569,593.262,1355,680.692]],["content/1436",[223,4.562,258,4.157,262,8.995,421,11.541,515,10.661,569,10.803,870,13.589,1355,14.699,1820,14.428,1843,12.933,2037,14.195]],["keywords/1436",[]],["title/1437",[103,493.984,870,746.272,1303,806.162]],["content/1437",[2,2.027,18,2.099,22,0.913,25,2.665,40,5.971,49,4.478,69,2.621,81,8.238,83,7.884,86,4.313,92,4.188,93,12.263,103,9.06,108,4.63,168,1.896,186,2.922,196,3.639,212,6.126,214,6.834,216,8.827,219,4.249,220,3.985,223,3.141,251,2.802,262,9.551,270,2.938,291,4.775,293,5.246,307,3.162,334,5.911,335,2.116,340,2.091,348,9.28,380,8.621,381,5.588,463,6.302,464,2.353,495,3.465,504,4.715,509,5.534,518,3.652,531,9.625,559,14.297,569,4.87,570,6.212,602,7.34,607,4.188,664,5.899,678,5.766,697,7.293,748,5.045,749,4.658,813,5.203,817,7.03,829,4.228,837,5.831,870,9.357,897,5.42,901,4.524,964,10.737,1303,6.618,1355,8.534,1368,6.212,1391,6.046,1486,7.395,1511,8.696,1535,3.652,1546,8.238,1598,12.611,1710,6.742,1745,6.302,1843,5.831,1977,7.395,2055,5.645,2126,8.238,2215,5.534,2455,6.302,2594,6.212,3192,7.2,3197,12.059,6239,7.623,6469,8.696,6471,9.392,6472,9.392,6473,9.392,6474,9.392,6475,16.114,6476,9.392,6477,9.392,6478,9.392,6479,9.392,6480,9.392,6481,9.392,6482,9.392,6483,19.48]],["keywords/1437",[]],["title/1438",[103,368.671,196,330.818,212,556.959,232,513.175,262,368.671]],["content/1438",[2,1.347,3,2.092,8,6.563,11,4.945,22,1.259,40,8.231,73,7.249,88,7.781,89,2.79,102,9.823,103,9.049,161,5.035,163,4.308,196,5.016,212,8.445,232,7.781,262,9.049,268,4.825,296,5.091,297,5.47,321,6.202,324,8.895,334,7.479,348,9.678,360,5.801,377,6.625,490,3.613,547,9.349,559,8.822,570,8.563,652,4.308,688,11.356,748,6.955,813,7.173,836,7.781,856,7.628,1007,10.942,1049,6.168,1211,7.628,1280,12.179,1326,7.292,1355,10.799,1392,8.967,1443,9.301,1535,5.035,1603,8.132,1621,7.863,1624,6.806,1810,8.038,1943,7.419,2198,10.885,2377,19.405,2422,7.948,2594,8.563,3126,10.885,4010,11.988,6429,9.926,6475,11.988,6484,11.988]],["keywords/1438",[]],["title/1439",[196,378.874,212,637.866,360,438.107,6485,822.099]],["content/1439",[2,1.453,6,4.183,18,2.026,22,1.357,24,4.953,36,3.486,43,2.38,59,4.003,69,2.529,71,3.931,73,3.135,75,5.289,103,9.811,115,5.201,144,6.637,146,4.668,161,3.524,163,3.015,175,4.942,186,2.82,196,6.595,209,5.447,212,11.103,214,6.649,221,4.55,235,4.668,262,8.255,263,2.782,270,2.835,273,5.994,291,3.83,293,5.062,297,3.829,303,3.879,316,3.55,326,5.392,334,3.734,348,9.076,360,9.771,369,4.764,387,4.39,389,4.798,422,2.79,429,5.626,467,5.66,490,2.529,559,15.482,570,9.231,579,4.12,609,6.637,616,2.311,739,5.692,744,6.505,792,3.734,805,6.386,813,5.021,823,4.003,831,6.762,836,5.447,856,5.339,901,4.366,920,4.764,963,7.619,964,11.627,974,5.193,1049,4.317,1078,11.598,1267,3.845,1290,5.289,1303,6.386,1326,5.104,1355,11.376,1393,4.668,1413,8.391,1443,6.194,1538,5.834,1554,5.761,1589,6.783,1624,4.764,1631,7.949,1943,5.193,2126,7.949,2131,5.834,2307,6.948,2476,6.386,2522,7.949,2594,5.994,3058,7.619,3212,8.391,6429,17.419,6485,17.358,6486,9.063,6487,9.063,6488,9.063,6489,9.063,6490,9.063,6491,9.063,6492,9.063]],["keywords/1439",[]],["title/1440",[15,212.515,178,581.805,258,170.393,291,234.301,1014,356.201]],["content/1440",[2,1.689,3,2.968,11,2.291,18,1.879,22,1.578,36,3.234,49,3.388,69,2.346,73,2.908,79,7.042,86,3.861,103,8.609,119,4.861,151,6.62,152,4.55,155,3.318,178,5.729,181,5.516,193,6.157,209,5.053,219,3.803,223,2.884,237,3.646,262,7.929,270,2.63,273,5.56,291,6.604,297,5.563,300,5.484,307,2.83,320,4.17,330,2.839,334,3.464,353,5.161,370,3.767,402,6.445,404,4.486,411,4.451,445,2.574,468,11.038,494,4.36,495,3.101,505,4.275,518,3.269,527,4.36,531,5.642,533,6.016,544,10.203,547,9.46,652,2.797,671,6.293,676,4.12,677,5.871,682,3.344,690,8.37,693,2.198,704,3.318,721,4.145,739,5.28,743,5.002,748,7.073,766,5.161,925,8.39,929,10.822,930,7.021,1014,10.039,1017,6.157,1049,4.005,1083,11.65,1204,4.818,1298,5.56,1486,6.62,1535,5.12,1594,4.696,1611,7.834,1616,9.562,1618,8.972,1622,4.302,1624,6.922,1707,4.483,1796,7.996,1943,7.545,2184,6.445,2594,5.56,2897,7.785,3111,7.785,5296,7.375,6493,8.407,6494,8.407,6495,8.407,6496,8.407,6497,8.407]],["keywords/1440",[]],["title/1441",[1368,911.566,2594,911.566]],["content/1441",[]],["keywords/1441",[]],["title/1442",[4292,1269.296]],["content/1442",[2,0.929,36,5.305,37,6.406,71,3.87,79,2.409,87,7.003,127,2.178,180,4.323,186,5.244,196,5.343,209,10.131,212,5.821,235,4.597,237,3.87,251,2.662,258,1.781,262,9.358,263,2.74,269,9.718,270,2.791,296,5.423,323,5.54,324,4.373,330,3.013,356,10.772,360,6.179,369,4.691,386,4.399,387,4.323,404,3.04,411,4.724,495,5.087,512,4.829,520,5.309,532,9.338,533,4.077,562,11.148,570,11.148,611,5.902,682,3.549,741,7.521,811,11.594,836,5.363,854,11.594,921,3.819,964,12.522,1007,7.2,1078,9.397,1237,7.152,1261,6.288,1298,5.902,1319,8.263,1320,8.263,1355,5.309,1397,7.242,1443,6.12,1707,10.932,1929,7.827,1930,5.605,1943,10.867,2131,5.745,2439,7.026,2582,6.679,2594,5.902,2846,8.467,3126,7.502,3197,14.171,3871,11.311,4292,19.473,4622,7.026,5550,6.18,6429,19.095,6485,11.594,6498,13.791,6499,8.924,6500,8.924,6501,8.924,6502,8.924,6503,8.263]],["keywords/1442",[]],["title/1443",[1943,993.194]],["content/1443",[13,3.659,34,16.023,36,4.372,39,6.831,42,5.385,49,2.924,75,9.651,79,5.262,89,2.449,103,4.907,136,6.384,186,3.536,209,14.267,219,5.141,223,2.489,262,9.822,263,3.489,269,13.736,291,3.119,296,4.469,349,9.651,356,12.921,399,2.322,414,7.627,495,6.1,522,7.225,530,6.633,532,6.296,607,5.068,654,5.894,704,4.486,741,6.198,821,13.021,1014,4.741,1155,5.637,1237,5.894,1298,7.517,1326,6.401,1443,5.044,1535,4.42,1623,7.056,1624,5.975,1707,10.395,1812,6.902,1842,13.993,1885,7.225,1929,9.969,1930,7.138,1931,10.524,1943,14.667,2190,13.421,2594,7.517,2846,6.977,3557,9.555,3871,11.097,4292,12.111,5550,11.453,6429,14.944,6504,11.365,6505,11.365,6506,11.365]],["keywords/1443",[]],["title/1444",[103,748.351]],["content/1444",[13,2.699,18,2.727,69,3.404,75,7.12,79,4.698,89,2.629,103,10.098,136,6.718,186,3.796,196,4.727,206,5.048,209,14.056,212,7.958,235,6.284,262,8.759,263,3.746,291,4.776,316,4.779,343,4.531,356,13.285,434,6.125,465,4.047,466,7.332,495,6.42,559,15.936,569,6.326,605,6.015,660,5.719,678,7.49,697,6.203,704,4.815,821,9.606,837,7.574,964,8.906,1237,6.326,1355,10.354,1366,9.131,1368,8.069,1443,5.414,1624,6.414,1640,11.296,1707,6.506,1885,7.756,2594,8.069,2633,9.131,3143,11.296,3197,10.257,3871,8.187,4266,7.663,4292,8.935,6056,9.606,6429,18.642,6484,11.296,6503,16.114,6507,17.403,6508,12.2,6509,12.2,6510,12.2,6511,12.2,6512,12.2]],["keywords/1444",[]],["title/1445",[372,425.406,2215,812.067]],["content/1445",[]],["keywords/1445",[]],["title/1446",[2,119.066,372,353.108,375,628.788]],["content/1446",[1,3.864,2,1.785,3,3.903,11,5.97,22,1.667,47,7.757,147,9.211,222,3.832,223,5.289,237,7.437,261,6.368,268,6.39,354,4.231,355,4.412,372,8.301,489,8.081,556,9.546,599,9.461,603,7.954,761,9.577,1066,10.769,6513,17.147]],["keywords/1446",[]],["title/1447",[16,165.308,251,341.318,258,228.31]],["content/1447",[2,1.934,8,4.843,16,2.685,18,2.994,36,5.152,175,7.305,180,6.489,216,8.978,222,3.386,223,4.674,224,1.522,237,8.061,246,7.481,251,6.367,258,3.709,270,4.19,277,2.824,290,5.758,297,5.659,307,4.509,324,6.565,330,4.523,333,8.737,335,3.018,340,2.981,345,5.809,352,3.867,353,8.223,372,7.115,377,10.921,380,8.05,381,7.969,421,7.421,434,6.725,490,3.737,516,7.481,518,7.227,532,7.421,627,3.408,644,5.347,704,5.287,736,7.091,895,4.017,1033,8.413,1091,7.362,1133,8.281,1210,6.346,1326,7.544,1709,7.195,2025,7.676,3038,11.749,6514,13.394,6515,13.394]],["keywords/1447",[]],["title/1448",[224,129.964,291,313.941,557,503.014]],["content/1448",[3,3.83,7,6.656,16,1.634,18,2.528,22,1.1,36,4.35,40,7.19,49,2.91,69,5.959,70,4.55,73,3.912,79,3.053,107,5.905,113,3.879,136,4.366,152,6.121,161,4.398,195,2.663,220,4.799,222,3.602,223,2.477,224,2.848,226,2.549,229,4.738,230,3.83,251,3.374,261,4.2,270,3.538,275,6.943,290,4.862,291,6.23,297,4.778,340,3.668,345,4.905,352,3.265,370,7.383,372,7.007,385,3.709,397,2.389,398,8.465,404,3.853,427,4.103,428,4.186,435,5.75,465,5.467,658,4.533,679,5.247,704,4.464,792,4.66,812,5.067,840,8.283,897,4.274,1007,5.905,1021,5.33,1022,6.266,1091,6.216,1643,7.808,1768,6.481,1811,8.283,1942,11.829,2608,6.481,3667,10.472,4530,10.472,5848,6.664,6516,11.31,6517,11.31,6518,11.31,6519,11.31,6520,11.31,6521,11.31]],["keywords/1448",[]],["title/1449",[113,269.307,251,341.318,2215,674.055]],["content/1449",[3,3.604,22,1.416,54,8.276,59,6.435,66,4.346,69,6.221,113,5.871,152,7.885,168,2.942,195,3.055,222,2.312,223,4.311,224,2.236,241,6.053,251,7.124,290,6.263,291,3.998,329,7.655,347,7.095,372,4.497,374,5.392,377,7.455,397,5.045,401,5.862,410,8.756,413,6.724,457,6.527,509,8.584,515,7.455,678,8.944,744,10.458,772,11.824,778,11.169,823,6.435,1121,6.941,1311,11.471,1709,7.826,1793,10.09,6522,14.569]],["keywords/1449",[]],["title/1450",[223,250.557,714,446.534,2607,687.605]],["content/1450",[]],["keywords/1450",[]],["title/1451",[22,83.013,195,116.983,262,368.671,413,394.064,714,333.258]],["content/1451",[2,1.759,3,2.731,16,1.692,22,1.138,35,13.112,43,3.074,69,4.715,79,3.161,89,2.523,186,3.643,191,6.898,194,7.638,195,3.154,207,5.011,223,5.252,224,1.33,251,3.493,262,10.928,277,3.562,279,5.557,283,4.394,290,7.264,291,4.637,298,5.953,340,2.606,343,6.276,360,5.246,401,6.798,404,3.989,413,9.15,428,4.334,445,6.647,468,7.037,492,8.405,495,7.313,518,7.71,533,5.349,659,7.857,682,4.657,686,8.575,714,6.595,791,6.898,811,9.843,849,4.378,960,11.339,1121,5.578,1368,7.744,1467,8.575,1470,8.764,1624,6.155,1653,14.206,1702,7.269,1748,5.772,1943,6.71,2607,7.037,2608,11.361,2810,10.841,6523,11.709]],["keywords/1451",[]],["title/1452",[16,165.308,714,446.534,2607,687.605]],["content/1452",[1,1.619,8,4.794,16,2.283,22,1.289,30,1.303,31,1.857,43,6.477,46,3.575,71,1.768,77,2.475,82,5.064,83,2.24,89,2.504,97,1.817,107,5.032,113,2.269,119,2.357,127,0.995,136,1.573,137,3.805,162,1.686,178,2.777,180,4.669,190,9.15,192,7.256,195,2.528,206,1.686,216,3.023,220,1.729,223,3.204,226,3.56,229,1.707,230,1.38,237,1.768,241,1.693,251,3.955,262,7.256,265,4.194,270,4.942,282,0.775,283,1.529,291,1.118,295,3.752,296,3.79,297,1.722,316,1.597,323,4.462,330,4.476,348,5.14,360,1.826,367,7.486,386,4.752,409,2.206,411,2.158,413,1.881,426,3.866,428,1.509,445,2.951,464,3.958,490,2.689,518,2.795,532,2.258,533,1.862,546,1.609,603,1.891,660,1.911,676,1.998,681,5.032,682,3.833,686,15.841,689,1.146,714,10.126,721,3.543,736,3.805,813,2.258,833,2.258,858,2.296,860,5.216,875,1.137,964,2.086,1049,6.316,1091,9.236,1113,2.034,1121,4.592,1196,2.336,1204,2.336,1212,2.223,1396,9.418,1507,2.872,1509,7.822,1551,2.735,1567,3.125,1616,6.847,1624,2.143,1653,3.427,1716,1.303,1798,2.591,1802,11.57,1803,2.143,1832,8.616,1835,3.051,1875,1.372,1973,4.276,1974,11.793,2120,2.659,2203,10.193,2452,7.059,2606,4.977,2607,8.793,2846,2.502,3126,3.427,4251,3.427,4292,7.059,4559,9.4,4563,6.152,4592,4.412,4606,3.051,4608,2.985,4713,7.214,5221,8.924,5718,13.672,6044,3.427,6395,3.427,6524,4.076,6525,4.076,6526,4.076,6527,4.076,6528,7.186,6529,4.076,6530,11.621,6531,7.186,6532,4.076,6533,4.076,6534,4.076,6535,4.076,6536,7.186,6537,7.186,6538,9.638,6539,4.076,6540,4.076,6541,4.076,6542,4.076,6543,4.076,6544,4.076,6545,4.076,6546,4.076,6547,4.076,6548,4.076,6549,4.076,6550,4.076,6551,4.076,6552,4.076,6553,4.076,6554,4.076,6555,4.076,6556,4.076,6557,4.076,6558,4.076,6559,4.076,6560,4.076,6561,4.076,6562,4.076,6563,7.186,6564,4.076,6565,4.076]],["keywords/1452",[]],["title/1453",[43,361.914,714,537.961]],["content/1453",[1,2.253,2,1.04,4,5.331,15,2.488,16,2.173,22,0.972,41,4.958,43,6.352,46,8.769,49,2.572,78,8.202,87,4.153,136,3.859,162,4.136,197,5.679,209,6.009,215,6.612,216,4.206,217,5.22,220,6.381,223,3.959,224,1.136,226,3.389,250,5.584,258,1.995,262,10.151,270,3.127,296,5.914,307,6.086,316,3.917,345,4.336,360,4.479,397,4.248,413,4.614,421,5.539,423,5.781,430,5.631,464,3.768,469,3.688,485,4.356,509,5.89,518,3.888,533,6.871,579,4.545,659,6.709,676,8.861,712,5.495,714,8.417,773,7.872,856,5.89,858,5.631,998,6.009,1086,7.045,1267,4.242,1455,6.009,1552,15.134,1561,6.356,1707,5.331,1710,7.177,1723,6.812,1748,4.929,1832,5.452,2607,6.009,2846,6.138,3153,9.257,3871,10.092,4292,15.794,5574,6.924,5718,12.521,6395,8.405,6566,15.04,6567,15.04,6568,9.998,6569,15.04,6570,9.998,6571,9.998,6572,9.998,6573,9.998,6574,9.998,6575,9.998,6576,9.998,6577,9.998,6578,9.998,6579,9.998]],["keywords/1453",[]],["title/1454",[2130,1180.983]],["content/1454",[]],["keywords/1454",[]],["title/1455",[195,156.745,378,806.162,1924,1003.508]],["content/1455",[16,2.173,41,11.238,43,3.949,69,4.197,71,6.523,79,4.06,112,5.033,180,7.286,185,7.911,195,2.061,198,6.871,213,9.233,216,6.327,222,2.386,223,3.294,226,3.389,340,3.348,348,8.02,359,8.645,378,10.598,445,6.158,530,8.777,575,3.608,640,11.257,660,7.05,897,5.683,926,7.799,1113,7.505,1759,11.53,1765,9.134,1842,10.796,1859,11.233,1885,9.561,1924,13.192,2018,11.015,2057,11.842,2062,11.257,2130,13.704,2184,17.371,3122,10.796,3871,10.092,4027,13.192,6580,15.04,6581,15.04,6582,15.04]],["keywords/1455",[]],["title/1456",[378,971.224,1754,1118.642]],["content/1456",[127,3.98,139,9.74,160,7.643,168,3.292,208,6.746,265,9.516,330,5.505,368,5.935,378,14.947,408,6.948,414,10.941,490,4.55,575,3.912,681,8.513,859,14.302,908,7.621,1488,13.413,1754,13.233,1760,18.075,1859,9.107,1972,12.204,1974,8.038,2018,11.941,2130,11.11,2184,12.5,3401,11.11,3871,10.941,6583,16.305,6584,21.212,6585,21.212,6586,16.305,6587,21.212]],["keywords/1456",[]],["title/1457",[282,329.633]],["content/1457",[127,4.909,130,9.054,282,3.825,378,14.172,426,7.054,1716,6.431,1859,14.491,1875,6.771,2018,14.729,2130,16.483,2184,15.418,6588,20.112]],["keywords/1457",[]],["title/1458",[547,709.973,743,820.063]],["content/1458",[]],["keywords/1458",[]],["title/1459",[547,709.973,1538,887.311]],["content/1459",[2,2.033,3,2.552,13,3.493,15,6.377,22,0.783,25,5.091,36,3.099,43,3.344,47,3.645,64,5.907,65,5.789,67,3.839,71,9.433,78,4.394,79,6.916,89,2.744,115,3.003,116,4.703,119,4.659,127,1.967,152,8.545,155,3.18,163,2.681,175,4.394,191,4.748,220,6.699,222,2.021,223,1.765,237,3.495,262,5.498,268,3.003,270,4.939,273,5.329,293,7.112,298,4.097,303,3.449,307,2.713,340,1.794,345,3.495,360,5.705,369,4.236,455,4.236,458,3.559,468,9.489,481,4.947,520,4.794,527,4.178,540,3.904,544,4.123,547,9.241,556,5.548,569,6.603,570,5.329,608,4.703,616,2.055,676,6.241,743,7.577,792,3.32,829,3.628,847,3.024,858,4.538,918,5.491,929,9.18,930,9.566,966,5.256,973,5.407,1018,8.677,1121,3.839,1187,5.122,1267,5.403,1326,7.172,1443,5.651,1509,12.814,1538,10.164,1554,10.037,1616,7.503,1623,5.003,1634,8.545,1659,8.973,1702,5.003,1708,3.926,1748,3.973,1810,5.003,1923,5.187,2086,4.703,2219,6.54,2296,6.774,2862,6.774,3002,10.706,3003,11.17,3341,7.068,3545,7.461,4609,5.122,4888,7.068,6485,6.774,6589,8.058,6590,8.058,6591,8.058,6592,8.058,6593,8.058]],["keywords/1459",[]],["title/1460",[2,119.066,160,536.304,227,367.842]],["content/1460",[]],["keywords/1460",[]],["title/1461",[607,772.804]],["content/1461",[2,0.932,3,3.319,11,4.087,13,1.465,14,2.298,15,6.405,16,1.294,18,0.831,19,0.857,22,1.719,24,3.583,25,1.055,42,3.138,47,1.682,49,4.119,66,0.821,75,5.228,80,2.85,83,4.923,89,1.427,97,1.658,100,2.459,113,2.109,115,3.338,120,4.872,146,1.915,149,2.927,160,5.848,161,1.446,162,1.538,163,1.237,186,1.157,195,1.227,198,1.698,201,12.609,207,1.591,220,2.81,221,3.325,223,1.962,225,3.191,227,6.864,241,4.517,244,1.707,250,3.7,255,8.52,258,2.17,261,2.46,263,1.141,268,2.468,270,5.008,277,0.784,283,4.681,290,1.598,298,3.368,300,2.425,302,8.139,303,5.92,307,3.016,312,2.835,320,1.844,325,1.781,329,2.576,330,1.255,331,2.575,340,0.828,343,1.381,345,1.612,354,2.683,357,5.848,366,2.393,386,1.833,396,1.544,399,0.759,404,1.267,421,3.67,428,2.452,429,2.308,430,2.094,434,1.866,445,2.028,469,4.011,489,4.222,490,2.499,491,2.335,494,1.928,515,1.902,518,1.446,526,1.88,532,2.06,542,1.997,551,2.686,557,1.635,574,3.011,575,3.598,579,1.69,597,2.13,599,1.605,601,5.787,603,4.155,604,6.426,606,5.228,607,9.962,610,9.109,616,0.948,619,2.06,625,6.701,627,2.767,632,4.013,658,1.49,664,2.335,677,1.658,682,1.478,692,7.998,727,2.723,728,2.076,761,2.076,788,2.212,792,1.532,808,1.584,823,1.642,836,2.234,858,5.045,875,1.037,897,3.385,901,4.315,902,1.635,921,1.591,962,3.442,1026,1.968,1049,1.771,1050,3.753,1078,2.533,1085,2.62,1090,4.264,1108,2.783,1123,3.261,1126,1.278,1131,3.017,1187,2.363,1234,2.533,1267,1.577,1269,2.85,1270,4.264,1278,13.926,1281,2.459,1315,2.335,1336,5.33,1455,3.981,1461,3.125,1466,2.723,1539,2.723,1591,2.927,1626,2.575,1628,2.393,1643,1.761,1761,7.857,1768,2.13,1840,4.755,1950,3.261,1964,2.62,1972,2.783,2100,4.268,2109,8.562,2110,3.125,2177,2.669,2214,2.783,2262,4.587,2271,2.669,3051,5.569,3065,3.017,3401,2.533,3530,2.575,4143,3.261,4634,2.425,6594,3.718,6595,3.718,6596,3.718,6597,3.718,6598,3.718,6599,3.718,6600,3.718,6601,10.874,6602,12.475,6603,6.133,6604,3.718,6605,3.718,6606,3.718,6607,8.958,6608,8.958,6609,8.958,6610,3.718,6611,3.718,6612,3.718,6613,3.718,6614,3.718,6615,10.874,6616,8.958,6617,3.718,6618,6.624,6619,3.718,6620,6.624,6621,3.718,6622,3.718,6623,3.718,6624,3.718,6625,3.718,6626,3.718,6627,6.624,6628,3.718,6629,3.718,6630,3.718,6631,3.718,6632,6.624,6633,3.718,6634,3.718]],["keywords/1461",[]],["title/1462",[199,812.067,622,714.732]],["content/1462",[2,2.411,3,3.93,15,3.373,68,6.528,89,2.92,113,5.92,115,5.05,155,7.395,160,8.782,162,5.606,175,7.39,195,1.857,199,11.038,204,12.547,227,7.448,238,7.507,263,4.16,270,4.239,284,4.074,298,6.89,307,4.562,320,6.72,343,5.033,374,5.015,441,10.669,467,7.597,469,6.911,518,5.269,607,8.354,622,9.715,632,9.62,662,10.142,919,9.233,935,10.998,1204,7.765,1278,15.111,1580,10.669,1983,8.962,2110,11.392,6427,12.547,6603,17.347,6635,13.551,6636,13.551,6637,13.551]],["keywords/1462",[]],["title/1463",[1017,1009.408,6638,1158.748]],["content/1463",[3,3.177,11,4.554,13,5.445,15,6.925,18,2.578,19,3.853,20,3.838,31,2.981,79,4.512,87,6.944,113,2.715,151,9.082,152,6.242,180,8.098,213,7.081,230,3.906,282,2.194,426,3.364,457,5.168,464,2.89,489,5.436,544,11.031,661,6.064,682,6.648,743,11.696,746,5.218,748,6.196,749,5.721,1007,6.022,1017,15.787,1417,18.202,1603,10.498,1683,8.633,2305,13.614,2419,8.128,3136,10.68,6638,16.527,6639,19.658,6640,24.611,6641,21.556,6642,8.843,6643,10.68,6644,19.658]],["keywords/1463",[]],["title/1464",[443,1011.479]],["content/1464",[3,3.082,11,4.381,13,5.356,15,6.703,18,2.445,19,4.846,20,3.639,43,2.872,79,4.34,113,2.575,200,8.877,231,4.367,282,2.08,283,6.034,394,4.9,404,3.726,414,7.34,426,3.19,443,13.071,464,5.266,468,6.574,489,5.155,512,5.92,544,8.228,547,9.822,608,6.383,661,5.75,682,4.35,743,9.567,746,4.948,749,5.425,788,6.508,816,6.06,822,9.594,835,10.014,846,10.126,925,7.346,929,8.228,930,8.574,1018,12.992,1175,6.574,1310,7.453,1565,6.953,1634,14.105,1708,7.835,1876,6.79,2086,9.384,2305,13.205,3017,8.877,6642,8.385,6645,19.067,6646,10.128,6647,10.128,6648,14.889]],["keywords/1464",[]],["title/1465",[1565,876.205,1904,1009.408]],["content/1465",[3,3.116,4,4.181,8,2.835,11,4.814,13,5.216,15,6.995,18,1.752,19,3.575,20,2.609,22,1.212,42,3.715,79,5.541,106,2.854,113,1.846,155,3.095,180,3.798,181,3.285,206,3.244,253,6.011,270,2.453,282,2.949,298,3.986,332,4.924,334,3.231,402,6.011,426,2.286,457,3.513,464,5.595,468,4.712,489,3.695,544,10.504,547,6.419,551,3.179,556,3.416,632,3.513,661,6.551,676,3.843,743,12.212,746,3.547,748,4.212,749,6.18,909,12.473,1017,5.742,1114,6.174,1363,4.534,1365,6.011,1565,9.858,1589,5.869,1603,4.924,1611,13.287,1614,4.309,1856,4.984,1881,13.602,1884,10.93,1904,5.742,1952,19.531,2007,10.476,2277,6.592,2305,14.215,2308,7.26,2582,5.869,2790,6.877,3002,10.476,3611,6.363,4266,4.924,5947,6.877,6380,7.26,6638,6.592,6642,6.011,6649,7.841,6650,17.85,6651,7.841,6652,7.26,6653,7.26,6654,12.461]],["keywords/1465",[]],["title/1466",[1611,1031.201]],["content/1466",[3,3.387,11,3.528,13,5.632,15,6.891,18,2.894,19,5.236,20,4.308,43,3.4,52,5.25,70,5.209,79,4.899,113,3.048,231,5.169,282,2.462,283,4.858,396,7.54,426,3.775,464,5.992,489,6.102,544,10.724,551,7.36,608,7.556,661,6.806,743,10.799,746,5.857,749,6.421,788,7.703,1611,14.23,1614,7.116,2305,14.514,3017,10.508,5947,11.356,6642,9.926,6650,19.405,6652,11.988,6653,11.988,6655,12.947,6656,12.947]],["keywords/1466",[]],["title/1467",[746,784.059]],["content/1467",[3,3.007,11,2.346,13,5.622,15,6.966,18,1.924,19,4.481,20,5.483,22,0.488,25,1.424,43,1.317,49,2.215,71,3.734,79,4.759,89,1.081,106,1.826,113,2.027,166,2.985,180,4.171,200,4.071,231,2.003,282,2.551,283,1.882,293,2.802,297,2.119,334,2.067,373,3.601,394,2.247,396,2.084,404,1.709,414,3.366,426,2.511,443,2.928,449,3.474,457,5.067,464,5.211,489,4.057,512,2.715,534,4.4,544,10.318,546,1.98,547,2.584,551,3.491,563,2.901,608,2.928,661,5.946,664,3.151,682,1.995,729,4.4,743,10.489,745,4.071,746,10.96,749,5.609,788,2.985,792,6.79,835,4.102,841,2.656,846,8.962,858,2.825,925,9.758,929,9.52,930,4.591,1018,11.228,1038,3.189,1175,10.595,1310,3.418,1422,13.374,1423,10.886,1428,4.217,1569,3.474,1594,2.802,1611,6.729,1634,5.777,1678,4.071,1708,2.444,1745,3.366,1839,10.283,1857,3.229,1876,3.114,1909,4.217,1923,3.229,1938,10.886,2086,2.928,2305,13.463,2708,4.071,3002,9.508,3003,7.552,3004,7.972,3017,4.071,5163,4.4,5842,4.645,6638,4.217,6642,8.671,6646,4.645,6647,4.645,6657,18.603,6658,5.017,6659,18.603,6660,17.629]],["keywords/1467",[]],["title/1468",[196,443.265,197,649.882,283,429.303]],["content/1468",[]],["keywords/1468",[]],["title/1469",[196,443.265,197,649.882,627,291.095]],["content/1469",[2,2.188,146,10.828,196,8.144,197,11.941,223,4.604,258,4.195,354,5.187,355,5.409,627,5.349,641,9.2,642,11.129]],["keywords/1469",[]],["title/1470",[2,88.862,196,330.818,197,485.021,354,210.671,355,219.688]],["content/1470",[2,1.601,3,3.704,19,2.376,22,1.002,39,6.195,49,3.959,69,2.876,113,2.426,152,13.212,186,6.798,195,2.523,196,9.458,197,10.46,216,6.474,217,5.382,222,3.467,223,4.785,228,2.862,259,10.657,261,5.715,282,2.927,296,4.053,307,3.47,324,5.052,345,4.471,354,3.797,355,3.959,359,4.431,375,5.665,377,5.275,381,6.133,396,4.282,445,3.156,465,3.42,491,6.474,493,8.206,527,9.548,530,6.016,555,8.666,556,8.897,599,4.451,627,2.623,662,7.715,676,5.052,677,4.596,721,7.586,764,7.399,897,7.716,982,6.474,1024,9.906,1131,8.366,1443,4.574,1659,10.843,1799,13.505,1837,9.188,1958,7.549,2057,8.116,4084,7.399,6395,8.666,6661,10.308,6662,10.308,6663,10.308,6664,10.308,6665,10.308,6666,10.308,6667,10.308]],["keywords/1470",[]],["title/1471",[196,330.818,197,485.021,627,217.25,641,373.691,642,452.055]],["content/1471",[1,3.687,2,1.166,8,4.05,17,7.516,18,2.503,25,5.486,30,3.581,31,2.895,36,4.308,43,5.583,89,2.414,107,5.848,115,6.098,186,5.091,196,9.45,197,6.363,216,8.944,218,6.877,244,5.143,245,9.417,259,17.948,261,4.16,262,7.065,266,5.336,270,5.118,330,5.525,550,5.251,599,10.796,605,5.522,627,2.85,641,7.161,642,8.663,676,5.49,678,6.877,682,4.455,704,4.421,727,8.203,741,6.108,816,6.205,849,4.189,872,6.599,898,9.091,908,4.024,912,8.041,964,8.373,1007,5.848,1028,14.157,1030,8.041,1031,9.091,1033,7.035,1155,5.555,1569,7.757,1723,7.632,1832,6.108,2576,12.544,2610,10.372,2633,14.469,2912,10.372,2913,10.372,3167,10.372,5296,9.825,6668,16.362,6669,11.201]],["keywords/1471",[]],["title/1472",[196,378.874,223,214.16,259,677.233,627,248.809]],["content/1472",[3,3.408,15,3.259,22,1.273,64,10.589,108,6.455,112,4.382,113,3.082,146,6.744,166,7.79,185,4.571,196,10.094,197,13.642,203,12.123,208,5.417,216,8.87,223,5.259,224,2.078,258,2.613,259,12.669,277,2.76,283,4.913,290,5.628,307,4.408,323,8.128,362,7.952,385,4.294,397,2.766,399,2.675,488,12.465,491,8.223,503,13.242,509,7.714,600,8.921,643,8.429,707,4.515,842,4.461,908,4.704,1124,7.196,1442,7.313,1916,6.744,5905,12.123,6056,14.403,6670,13.093,6671,18.293,6672,18.293,6673,13.093,6674,13.093,6675,13.093]],["keywords/1472",[]],["title/1473",[197,782.945,229,577.406]],["content/1473",[3,2.771,19,3.953,49,4.412,79,4.629,127,4.185,195,2.349,197,13.717,207,9.378,216,7.213,222,2.721,223,3.755,229,7.183,259,11.875,262,9.461,263,7.414,265,10.007,266,8.169,267,11.038,268,6.39,282,3.261,325,8.214,348,9.144,363,8.832,639,10.527,771,7.371,784,11.875,1748,8.453,2617,15.877,6676,17.147,6677,17.147]],["keywords/1473",[]],["title/1474",[207,589.901,217,719.607]],["content/1474",[2,1.318,13,2.802,14,6.201,19,4.774,20,4.214,25,3.594,49,3.259,60,7.074,74,9.275,77,10.853,79,3.419,113,4.207,115,4.72,130,5.702,136,7.994,195,2.837,206,5.24,207,7.649,216,9.979,217,13.208,227,5.746,259,8.771,262,5.468,282,2.409,320,6.281,426,6.559,467,5.136,468,7.612,485,5.518,495,6.592,558,14.504,579,5.758,607,5.647,667,12.177,813,7.016,816,7.016,1598,10.741,1716,4.049,1977,9.972,4713,13.376,6678,17.871,6679,17.871,6680,12.665,6681,12.665,6682,12.665,6683,12.665,6684,12.665,6685,12.665,6686,12.665,6687,12.665,6688,12.665,6689,12.665,6690,12.665]],["keywords/1474",[]],["title/1475",[207,589.901,262,595.127]],["content/1475",[1,1.98,2,0.915,3,2.203,13,1.944,19,2.026,20,8.107,22,1.623,36,3.381,43,3.579,52,7.628,66,1.94,69,2.452,79,6.269,98,5.456,106,3.199,146,4.527,160,6.389,191,5.178,195,2.287,197,4.992,206,3.636,207,5.833,216,5.734,222,2.985,223,4.717,259,14.099,261,5.062,262,8.79,263,2.698,265,10.978,266,8.961,268,8.886,277,1.853,282,1.672,291,4.581,316,3.443,330,4.602,413,4.056,426,2.563,438,5.456,455,4.62,468,5.282,493,4.687,494,4.557,495,5.028,518,3.418,527,7.068,544,4.497,547,4.527,551,8.255,555,7.389,564,9.014,666,6.166,697,4.468,792,3.621,854,11.458,860,4.756,956,7.881,964,4.497,1659,14.345,1716,2.81,1748,6.719,1799,5.812,1810,5.456,2910,18.85,6691,8.789,6692,8.789,6693,8.789,6694,8.789,6695,8.789,6696,16.695,6697,8.789,6698,8.789,6699,8.789,6700,8.789,6701,8.789,6702,8.789,6703,8.789,6704,8.789,6705,8.789,6706,8.789,6707,8.789]],["keywords/1475",[]],["title/1476",[995,820.063,6708,1276.224]],["content/1476",[3,2.992,11,2.834,13,5.878,15,6.806,18,2.324,19,4.728,20,3.46,22,1.011,25,1.781,33,3.772,43,1.648,71,2.722,79,4.997,89,1.352,106,2.284,113,2.448,151,8.189,162,2.596,180,5.038,181,4.357,208,2.596,213,3.852,270,1.963,282,1.978,426,3.883,457,2.811,464,3.881,466,3.772,489,4.901,544,10.888,551,4.217,554,7.086,578,3.371,661,5.467,704,2.477,743,11.663,745,5.093,746,6.025,749,5.158,846,3.023,858,3.534,925,6.084,929,6.815,930,5.546,995,11.013,1018,7.086,1038,3.989,1039,4.422,1121,2.99,1175,3.772,1258,4.697,1308,4.04,1363,6.013,1364,4.04,1422,16.646,1423,8.44,1429,5.81,1490,6.979,1569,4.346,1611,3.734,1614,5.716,1616,7.846,1634,6.979,1708,3.058,1738,5.81,1938,10.808,2086,3.662,2102,5.504,2305,14.205,3451,5.504,3574,17.956,4614,7.973,5646,16.84,6642,7.973,6643,5.81,6648,5.81,6708,17.14,6709,18.511,6710,10.4,6711,10.4,6712,6.275,6713,6.275,6714,6.275]],["keywords/1476",[]],["title/1477",[226,390.556]],["content/1477",[2,0.658,3,2.788,7,2.555,11,3.283,13,5.392,15,7.056,18,2.34,19,4.535,20,5.973,22,0.836,25,2.439,42,1.673,49,2.211,67,1.682,70,1.421,71,2.744,79,5.017,89,0.761,106,1.285,113,1.489,115,3.203,127,1.544,155,1.394,162,1.461,220,1.498,226,4.885,282,2.547,291,2.358,313,2.586,343,1.312,360,5.398,373,2.535,385,2.818,387,3.065,400,2.684,404,1.203,426,2.506,435,6.81,457,4.691,464,5.347,489,2.981,490,0.985,527,3.281,544,9.51,547,3.259,551,2.565,556,4.561,659,2.37,660,2.966,661,5.504,664,2.218,682,4.792,704,2.497,729,3.097,743,10.681,745,2.866,746,5.45,749,5.193,788,3.764,792,1.455,816,1.956,837,3.928,846,8.953,849,3.214,858,1.989,925,10.306,929,5.358,930,3.374,974,2.024,1017,4.633,1018,4.311,1038,2.245,1175,6.293,1187,2.245,1204,2.024,1267,1.498,1327,5.549,1363,8.416,1422,15.083,1423,8.497,1540,5.549,1548,3.097,1594,1.972,1603,3.973,1611,7.168,1634,2.37,1678,2.866,1685,7.538,1708,1.721,1745,2.37,1762,2.145,1839,8.027,1856,4.022,1905,2.488,1938,8.497,1939,13.655,2305,13.625,2708,2.866,3058,5.319,4888,5.549,5163,7.538,5544,6.74,6642,4.85,6715,6.326,6716,6.326,6717,3.531,6718,17.248,6719,18.585,6720,10.47,6721,10.47,6722,6.326,6723,10.47,6724,6.326]],["keywords/1477",[]],["title/1478",[43,361.914,1599,1158.748]],["content/1478",[]],["keywords/1478",[]],["title/1479",[16,165.308,43,300.406,1599,961.816]],["content/1479",[1,2.967,2,1.37,3,3.418,16,1.903,22,1.28,25,3.737,30,4.21,36,7.064,43,5.553,66,2.907,69,5.901,180,6.379,185,6.412,195,2.516,198,6.016,223,5.27,226,2.967,263,4.042,277,2.776,283,4.941,290,5.66,316,5.158,348,7.021,352,3.802,354,3.249,355,3.388,359,5.66,374,4.873,382,7.126,396,5.47,397,2.781,428,7.827,464,5.298,465,7.591,569,6.828,644,5.257,697,6.695,792,8.714,901,6.343,1349,15.439,1353,14.905,1599,15.439,1765,7.997,1795,7.758,1808,8.589,2241,11.069,3030,12.192,3053,8.174,3054,11.069,3128,9.855,6725,13.167,6726,13.167]],["keywords/1479",[]],["title/1480",[1,390.556]],["content/1480",[1,2.083,2,1.793,3,3.122,15,6.812,16,2.047,18,4.318,19,3.266,20,4.714,22,0.899,24,3.67,30,4.53,31,3.662,36,3.555,43,5.072,79,6.372,113,4.056,123,6.573,127,2.256,186,6.01,223,4.231,224,1.957,237,6.145,258,3.439,261,5.262,277,4.073,291,3.888,312,6.064,377,7.251,389,4.893,399,2.895,413,4.266,426,2.695,427,3.353,428,7.15,464,3.55,465,3.066,490,3.954,495,8.108,569,4.793,618,6.635,685,9.508,693,2.416,706,9.655,707,5.942,717,9.639,792,3.809,840,6.769,841,4.893,842,3.149,844,7.77,848,7.77,897,3.493,926,7.348,1124,5.08,1348,5.296,1349,14.486,1350,9.655,1351,8.107,1352,6.298,1353,11.5,1354,8.107,1646,7.501,3308,6.769,6727,9.243]],["keywords/1480",[]],["title/1481",[282,329.633]],["content/1481",[36,9.257,43,7.048,195,2.732,263,7.388,282,3.792,428,9.567,1353,16.183,1716,6.375,1875,6.713,6728,19.94]],["keywords/1481",[]]],"invertedIndex":[["",{"_index":15,"title":{"552":{"position":[[12,1]]},"641":{"position":[[8,1],[20,1]]},"984":{"position":[[11,1]]},"999":{"position":[[11,1]]},"1097":{"position":[[28,1]]},"1291":{"position":[[5,1]]},"1305":{"position":[[5,1]]},"1328":{"position":[[5,1]]},"1384":{"position":[[24,1]]},"1440":{"position":[[20,1]]}},"content":{"1":{"position":[[196,1],[235,1],[272,1],[313,1],[356,1],[408,1],[477,1],[526,1],[583,1],[659,1],[679,1],[718,1],[790,1],[812,1]]},"4":{"position":[[725,1]]},"7":{"position":[[775,2]]},"14":{"position":[[478,1],[494,1],[501,1],[535,1]]},"16":{"position":[[987,4]]},"17":{"position":[[224,1],[287,1],[342,1],[411,1],[471,1],[517,1],[579,1],[638,1],[706,1],[777,1],[835,1],[903,1],[964,1]]},"25":{"position":[[66,1]]},"31":{"position":[[147,1]]},"33":{"position":[[215,1]]},"41":{"position":[[289,1]]},"49":{"position":[[477,1],[496,1]]},"54":{"position":[[319,1],[361,1]]},"56":{"position":[[77,1],[124,1],[159,1],[212,1],[294,1],[366,1],[454,1],[530,1],[613,1],[695,1],[780,1],[860,1],[922,1],[986,1],[1021,1],[1093,1],[1184,1],[1245,1],[1329,1],[1399,1],[1465,1],[1501,1],[1542,1],[1608,1],[1667,1],[1735,1],[1801,1],[1865,1],[1891,1],[1954,1],[2151,1],[2219,1],[2293,1],[2358,1],[2360,1],[2439,1],[2512,1],[2591,1],[2625,1],[2627,1]]},"64":{"position":[[367,1]]},"66":{"position":[[848,1],[869,1],[938,2],[1011,1]]},"68":{"position":[[64,1]]},"69":{"position":[[80,1],[130,1],[168,1],[229,1],[296,1],[364,1],[377,1],[473,1],[544,1],[615,1],[684,1],[715,1],[758,1],[816,1],[854,1],[932,1],[994,1],[1027,1]]},"71":{"position":[[625,1],[634,1],[722,1],[731,1],[740,1]]},"74":{"position":[[557,1]]},"76":{"position":[[440,1],[498,1],[571,1],[638,1],[676,1],[799,1],[879,1]]},"79":{"position":[[6,1],[19,1]]},"80":{"position":[[526,1],[547,1]]},"81":{"position":[[1087,1],[1151,1],[1289,1],[1482,1],[1551,1],[1617,1],[1684,1],[1753,1],[1831,1],[1898,1],[2297,1],[2742,2]]},"82":{"position":[[1518,1],[1605,1],[1645,1],[1730,1],[2396,1],[4017,1],[4513,1]]},"83":{"position":[[1121,1],[1182,1],[1267,1],[1345,1],[1412,1],[2372,2]]},"84":{"position":[[414,1],[431,1]]},"87":{"position":[[222,1],[312,1],[413,1],[514,1],[699,1],[743,1]]},"94":{"position":[[98,1],[192,1],[260,1],[283,1],[323,1],[365,1],[409,1],[442,1],[502,1],[540,1],[592,1],[729,1],[777,1],[814,1],[864,1],[917,1],[955,1],[1029,1],[1107,1],[1168,1],[1188,1],[1190,2],[1258,1],[1307,1],[1351,1],[1388,1],[1434,1],[1481,1],[1540,2],[1543,1],[1608,1],[1684,1],[1757,1],[1812,1],[1893,1],[1958,1],[2033,1],[2108,1],[2178,1],[2258,1],[2315,1],[2346,1],[2348,1],[2400,1],[2402,1],[2457,1],[2511,1],[2599,1],[2659,1],[2685,1],[2756,1],[2817,1],[2843,1],[2901,1],[2959,1],[3021,1],[3076,1],[3131,1]]},"96":{"position":[[131,2],[280,1],[331,1],[497,1],[555,1],[686,1]]},"97":{"position":[[536,3]]},"98":{"position":[[385,1]]},"107":{"position":[[48,1],[74,1],[1530,1],[1599,1],[1674,3],[2676,1],[3378,1],[3447,1],[3515,3],[3944,2],[4104,3]]},"112":{"position":[[1021,1],[1041,1]]},"114":{"position":[[339,1],[345,1],[380,1],[421,1],[427,1]]},"117":{"position":[[112,1],[158,1]]},"119":{"position":[[415,1],[457,1]]},"120":{"position":[[85,1],[140,1],[183,1],[249,1],[326,1],[361,1],[433,1],[543,1],[604,1],[688,1],[774,1],[854,1],[892,1],[929,1],[971,1],[1014,1],[1051,1],[1095,1],[1160,1],[1236,1],[1309,1],[1364,1],[1445,1],[1510,1],[1585,1],[1660,1],[1730,1],[1810,1],[1878,1],[1948,1],[2012,1],[2038,1],[2073,1],[2132,1],[2196,1],[2255,1],[2322,1],[2370,1],[2372,1],[2435,1],[2498,1],[2556,1],[2558,1],[2610,1],[2685,1],[2760,1],[2833,1]]},"121":{"position":[[1157,3],[1205,1],[1221,1]]},"122":{"position":[[1163,3],[1223,1],[1246,1],[1248,1],[1331,1],[1407,1],[1440,1],[1516,1],[1576,1],[1620,1],[1704,1],[1715,3],[1762,1],[1830,1],[1901,1],[1903,1],[1987,1],[2064,1],[2155,1],[2211,1],[2213,1],[2224,3],[2262,3],[2278,3]]},"123":{"position":[[538,3],[552,1],[675,1],[788,1],[811,1]]},"125":{"position":[[290,1],[318,1]]},"128":{"position":[[517,1],[558,1],[562,1],[603,1],[697,1],[748,1]]},"129":{"position":[[762,1],[799,1],[803,1],[839,1],[890,1],[933,1],[937,1],[976,1],[1028,1],[1097,1],[1150,1],[1152,1],[1220,1],[1232,1],[1236,1],[1285,1]]},"130":{"position":[[249,1],[296,1],[300,1],[349,1]]},"133":{"position":[[448,4],[463,4],[468,3],[482,3],[533,3]]},"138":{"position":[[944,1]]},"142":{"position":[[923,1]]},"158":{"position":[[873,1]]},"161":{"position":[[844,1]]},"162":{"position":[[2142,1],[2257,1]]},"164":{"position":[[543,1],[559,1],[561,1],[628,1],[646,1],[648,1],[1841,1],[1923,1],[1942,1],[1944,1],[2039,1],[2065,1],[2067,1],[2109,1],[2119,3],[2149,1],[2170,2],[2179,2]]},"165":{"position":[[990,1],[997,1],[1042,1],[1057,1],[1069,1],[1075,1]]},"166":{"position":[[467,1]]},"172":{"position":[[259,1],[329,1],[331,1],[462,1],[533,2],[703,2],[706,1],[770,1],[841,2],[953,2],[956,1],[1020,1],[1091,2],[1208,1],[1210,1],[1212,1]]},"173":{"position":[[1021,1]]},"180":{"position":[[248,1],[637,1],[659,1]]},"183":{"position":[[2744,1],[2751,1],[2759,1],[2761,1],[2815,1],[3940,1],[3947,1],[3955,1],[3957,1]]},"190":{"position":[[147,1],[188,1]]},"191":{"position":[[568,1],[603,1],[636,1],[671,1],[710,1],[741,1],[1176,1],[1209,1],[1243,1],[1520,1],[1544,1],[1568,1],[1585,1],[1612,1]]},"192":{"position":[[97,1],[143,1]]},"207":{"position":[[532,1],[891,1],[898,1],[943,1],[958,1],[970,1],[976,1]]},"209":{"position":[[332,1],[367,1]]},"210":{"position":[[632,1],[659,1],[764,1],[783,1],[822,2],[844,1],[948,1],[966,1],[1221,1],[1223,2],[1263,1],[1265,2],[1301,2],[1328,1],[1349,1],[1351,1],[1403,2],[1406,1],[1461,1],[1463,1],[1465,2],[1504,1],[1945,1],[2712,1],[2839,2],[3129,1],[3232,2],[3342,1],[3416,2],[3548,1],[3570,1],[3649,2],[3695,1],[3772,2],[3837,2],[3876,1]]},"213":{"position":[[180,1]]},"217":{"position":[[845,1],[1080,1],[1851,1]]},"221":{"position":[[1129,1],[1326,1]]},"222":{"position":[[374,1],[571,1]]},"223":{"position":[[340,1],[537,1]]},"224":{"position":[[393,1],[590,1]]},"225":{"position":[[99,1],[416,1]]},"236":{"position":[[2195,1],[2532,2],[2980,1],[3317,2],[3585,1]]},"237":{"position":[[1053,5],[1341,5],[1857,1],[3308,1]]},"238":{"position":[[860,1],[1032,1],[1039,1],[1046,1],[1062,1],[1080,1],[1088,1],[1107,1],[1125,1],[1133,1],[1151,1],[1162,1],[1170,1]]},"239":{"position":[[382,1],[973,1]]},"240":{"position":[[529,1],[564,1],[597,1],[632,1],[671,1],[702,1],[1137,1],[1170,1],[1204,1],[1481,1],[1505,1],[1529,1],[1546,1],[1573,1]]},"241":{"position":[[18,2]]},"250":{"position":[[229,1],[258,1],[260,1],[392,5],[512,1],[514,1],[550,1],[957,1],[959,1],[1260,1],[1290,1],[1322,1],[1348,1],[1382,1],[1440,1],[1468,1],[1514,1],[1521,1],[1536,1],[1546,1]]},"253":{"position":[[847,3],[1193,1],[1278,1],[1418,2],[1612,1],[2114,2],[3064,1],[3229,1],[3231,3],[3317,3],[3321,1]]},"254":{"position":[[575,2],[678,1],[824,1],[864,1],[2632,2],[2735,1],[2881,1],[2921,1],[3542,1],[3582,1]]},"263":{"position":[[489,1]]},"277":{"position":[[650,2],[827,2]]},"278":{"position":[[1013,1],[1094,2]]},"279":{"position":[[1067,1],[1188,1],[1202,1],[1275,1],[1378,2],[1515,1],[1532,1],[1628,1],[1645,1],[1701,1]]},"280":{"position":[[770,3],[1180,1],[1437,1],[1452,1],[1532,1],[1591,2],[1653,1],[1717,1],[1734,1],[1784,1],[1858,1],[2021,1],[2041,1],[2162,1],[2172,1],[2183,1]]},"281":{"position":[[1225,1],[1269,1],[1305,2],[1401,1],[1422,1],[1448,3],[1463,1],[1475,1],[1494,1],[1496,2],[1517,1],[1558,2],[1561,2],[1586,1],[1629,2],[1632,2],[1635,1],[1637,1],[2065,1],[2083,1],[2103,1],[2118,1],[2150,1],[2166,1]]},"284":{"position":[[466,1],[594,1]]},"285":{"position":[[410,2]]},"290":{"position":[[653,1]]},"296":{"position":[[3079,1],[3849,1],[3856,1],[3858,3],[3872,3],[3886,3],[3905,1],[3907,3],[3922,1],[3924,3],[3933,1],[3935,3],[3964,1],[3966,3],[3995,3],[4023,3],[4415,2],[4518,1],[4520,2],[4604,2],[4607,1],[4697,2],[4700,2],[4791,1],[4793,1],[4896,2],[4899,2],[4993,1],[4995,1],[5082,2],[5218,1],[5281,1],[5351,2],[5481,1],[5501,1],[5525,3],[5540,1],[5588,1],[5611,1],[5638,3],[5653,1],[5701,1],[5703,1],[5870,1],[5933,1],[6003,2],[6133,1],[6153,1],[6177,3],[6192,1],[6201,2],[6239,2],[6277,3],[6281,1],[6304,1],[6331,3],[6346,1],[6355,2],[6393,2],[6479,3],[6483,1],[6485,1],[6622,1]]},"301":{"position":[[593,1]]},"305":{"position":[[599,1],[630,1]]},"307":{"position":[[1348,1],[1363,1],[1379,1],[1394,1],[1406,1],[1422,1],[2216,1],[2231,1],[2247,1],[2262,1],[2274,1],[2290,1]]},"309":{"position":[[654,1],[669,1],[2182,1],[2197,1],[2209,1],[2225,1],[2240,1],[2255,1],[2779,1],[2794,1],[2806,1],[2822,1],[2837,1],[2862,1]]},"313":{"position":[[847,3],[1193,1],[1278,1],[1418,2],[1612,1],[2114,2],[3064,1],[3255,1],[3257,3],[3279,1],[3281,3],[3340,3],[3344,2],[3347,3],[3351,1]]},"315":{"position":[[306,1],[313,1],[315,3],[329,3],[343,3],[362,1],[364,3],[379,1],[381,3],[390,1],[392,3],[416,1],[418,3],[458,3],[496,3],[905,2],[1044,1],[1046,1],[1068,1],[1115,2],[1166,2],[1311,1],[1365,1],[1441,2],[1577,1],[1609,1],[1645,3],[1660,1],[1708,1],[1710,1],[1872,1],[1904,1],[1940,3],[1955,1],[1984,2],[2007,1],[2016,2],[2038,1],[2164,2],[2279,3],[2283,1],[2290,1],[2299,2],[2302,1],[2304,1],[2306,1]]},"316":{"position":[[147,1]]},"319":{"position":[[1414,1],[1449,1]]},"322":{"position":[[1721,1],[1808,1]]},"324":{"position":[[128,1],[162,1]]},"329":{"position":[[1070,1]]},"331":{"position":[[589,1]]},"352":{"position":[[1,1],[27,1],[53,1],[139,1],[141,1],[143,1]]},"360":{"position":[[247,5]]},"363":{"position":[[431,1],[588,1],[654,1],[729,1],[883,1],[1035,1],[1187,1],[1938,1]]},"387":{"position":[[856,1],[982,1],[1104,1]]},"388":{"position":[[508,2]]},"409":{"position":[[1,1],[27,1],[52,1],[75,2],[98,1],[121,2],[148,1],[171,2],[198,1],[221,2],[253,1],[276,1],[278,1],[280,1]]},"414":{"position":[[246,1],[316,1],[318,1],[467,1],[495,2],[520,1],[562,1],[564,2],[567,1],[666,1],[693,2],[718,1],[762,1],[764,1],[766,1],[768,1]]},"415":{"position":[[506,1],[576,1],[578,1],[690,1],[718,2],[743,1],[785,1],[787,2],[790,1],[851,1],[878,2],[903,1],[947,1],[949,1],[951,1],[953,1]]},"436":{"position":[[259,1],[275,1]]},"449":{"position":[[489,2]]},"455":{"position":[[334,5]]},"461":{"position":[[327,5]]},"467":{"position":[[264,5]]},"473":{"position":[[365,5]]},"480":{"position":[[60,1],[1014,1]]},"482":{"position":[[706,2]]},"488":{"position":[[1092,1],[1113,1],[1174,1],[1219,2],[1222,3],[1226,1],[1228,3],[1232,1]]},"510":{"position":[[255,5]]},"517":{"position":[[1039,2],[1266,2],[1764,2]]},"527":{"position":[[419,5]]},"535":{"position":[[434,5]]},"541":{"position":[[270,5]]},"548":{"position":[[869,1],[1126,1],[1228,1],[1333,1]]},"552":{"position":[[746,1],[769,1],[795,1]]},"557":{"position":[[683,5]]},"585":{"position":[[376,5],[437,6],[696,5],[757,5]]},"590":{"position":[[549,3],[559,1],[561,3],[574,1],[576,3],[582,1],[584,3],[590,3],[598,3],[611,3]]},"606":{"position":[[304,6]]},"612":{"position":[[430,2]]},"626":{"position":[[233,5]]},"632":{"position":[[291,5]]},"659":{"position":[[1249,1],[1270,1],[1331,1],[1376,2],[1379,3],[1383,1],[1385,3],[1389,1]]},"671":{"position":[[325,5]]},"676":{"position":[[1092,1],[1113,1],[1174,1],[1219,2],[1222,3],[1226,1],[1228,3],[1232,1]]},"690":{"position":[[46,1]]},"691":{"position":[[1092,1],[1113,1],[1174,1],[1219,2],[1222,3],[1226,1],[1228,3],[1232,1]]},"701":{"position":[[256,5]]},"707":{"position":[[250,5]]},"713":{"position":[[260,5]]},"720":{"position":[[418,2]]},"721":{"position":[[395,5]]},"742":{"position":[[318,5]]},"748":{"position":[[490,5]]},"752":{"position":[[733,3],[772,3],[982,1],[1086,1],[1088,1]]},"753":{"position":[[1389,3],[1428,3]]},"761":{"position":[[228,1]]},"764":{"position":[[881,1]]},"767":{"position":[[2066,3],[2105,3]]},"774":{"position":[[228,1]]},"777":{"position":[[881,1]]},"786":{"position":[[147,1]]},"791":{"position":[[738,3],[777,3],[1016,1],[1120,1],[1122,1]]},"792":{"position":[[2058,3],[2097,3]]},"793":{"position":[[1412,3],[1451,3]]},"801":{"position":[[234,1]]},"804":{"position":[[879,1]]},"808":{"position":[[1358,3],[1397,3]]},"816":{"position":[[234,1]]},"819":{"position":[[879,1]]},"824":{"position":[[2180,3],[2219,3]]},"832":{"position":[[234,1]]},"835":{"position":[[879,1]]},"842":{"position":[[2972,2]]},"843":{"position":[[388,2],[857,5]]},"852":{"position":[[374,5]]},"860":{"position":[[341,5]]},"886":{"position":[[355,5]]},"898":{"position":[[1,1],[100,1],[126,1],[165,2],[193,1],[222,1],[274,2],[296,1],[298,1],[457,1],[484,1],[629,2],[655,1],[848,2],[878,1],[1080,2],[1110,1],[1328,1],[1330,2],[1355,1],[1408,1],[1410,2],[1413,1],[1522,1],[1550,1],[1755,2],[1783,1],[1936,1],[1938,2],[1963,1],[2015,1],[2017,1],[2019,1],[2021,1],[2023,1],[2025,1]]},"903":{"position":[[90,1]]},"904":{"position":[[1947,1]]},"911":{"position":[[331,1]]},"912":{"position":[[908,1],[1214,1],[1563,1]]},"915":{"position":[[90,1]]},"917":{"position":[[1456,1],[1869,1]]},"918":{"position":[[2239,1]]},"919":{"position":[[2294,1]]},"922":{"position":[[1813,1]]},"927":{"position":[[331,1]]},"930":{"position":[[90,1]]},"931":{"position":[[1609,1]]},"938":{"position":[[331,1]]},"943":{"position":[[752,1],[1033,1],[1065,1],[1118,1],[1156,1],[1161,2],[1182,1],[1223,1],[1225,2],[1228,1]]},"945":{"position":[[264,1]]},"954":{"position":[[331,1]]},"960":{"position":[[264,5]]},"963":{"position":[[244,1]]},"965":{"position":[[1456,1],[1869,1]]},"972":{"position":[[331,1]]},"983":{"position":[[251,5]]},"998":{"position":[[291,5]]},"1008":{"position":[[1728,3],[1747,1]]},"1016":{"position":[[388,5]]},"1029":{"position":[[258,5]]},"1032":{"position":[[289,1],[355,1],[427,1],[498,1],[563,1],[833,1],[866,1],[900,1],[1122,1],[1146,1],[1170,1],[1187,1],[1214,1]]},"1042":{"position":[[235,1],[552,2],[599,2],[1022,1],[1044,1],[1076,1]]},"1043":{"position":[[899,1],[1216,2],[1263,2],[1686,1],[1708,1],[1740,1]]},"1047":{"position":[[566,1],[568,2]]},"1051":{"position":[[1161,1],[1478,2],[1525,2],[1948,1],[1970,1],[2002,1]]},"1055":{"position":[[566,1],[568,2]]},"1059":{"position":[[950,1],[1271,2],[1318,2],[1741,1],[1763,1],[1795,1]]},"1063":{"position":[[566,1],[568,2]]},"1071":{"position":[[391,5]]},"1086":{"position":[[450,5]]},"1095":{"position":[[1,1],[27,1],[29,1],[31,1]]},"1102":{"position":[[266,5]]},"1114":{"position":[[314,5]]},"1120":{"position":[[375,1],[469,1],[563,1],[677,1],[756,1],[829,1],[909,1],[1067,1],[1245,1],[1551,1],[1626,1],[1698,1],[1771,1],[1843,1]]},"1183":{"position":[[962,1]]},"1185":{"position":[[113,1]]},"1189":{"position":[[315,1],[402,1]]},"1196":{"position":[[692,4]]},"1197":{"position":[[57,1],[321,1],[408,1]]},"1200":{"position":[[777,1],[801,1],[803,1],[827,1],[883,2],[964,1],[987,1],[1014,1],[1042,1],[1044,2],[1077,1],[1079,1],[1081,1],[1083,1]]},"1207":{"position":[[179,1],[282,1],[404,1],[491,1]]},"1208":{"position":[[179,1],[215,1]]},"1248":{"position":[[348,1],[435,1]]},"1281":{"position":[[392,1]]},"1289":{"position":[[587,3]]},"1295":{"position":[[392,1]]},"1298":{"position":[[340,1],[537,1]]},"1319":{"position":[[392,1]]},"1322":{"position":[[374,1],[571,1]]},"1335":{"position":[[374,1],[571,1]]},"1346":{"position":[[340,1],[537,1]]},"1357":{"position":[[132,1],[253,1],[340,1]]},"1368":{"position":[[117,2]]},"1373":{"position":[[1082,1]]},"1374":{"position":[[1082,1]]},"1379":{"position":[[287,1],[304,1],[306,1],[308,1],[310,1],[312,1],[314,1],[331,1],[347,1],[363,1],[379,1],[395,1],[403,1],[405,1],[416,1],[426,1],[433,1],[445,1],[450,1],[452,1],[461,1],[474,1],[480,1],[495,1],[502,1],[504,1],[510,1],[523,1],[534,1],[545,1],[552,1],[554,1],[560,1],[574,1],[583,1],[590,1],[606,1],[608,1],[616,1],[630,1],[639,1],[644,1],[656,1],[658,1],[666,1],[677,1],[686,1],[698,1],[711,1],[713,1],[725,1],[741,1],[749,1],[759,1],[769,1],[771,1],[779,1],[790,1],[799,1],[806,1],[818,1],[820,1],[826,1],[836,1],[848,1],[854,1],[863,1],[865,1],[876,1],[883,1],[890,1],[897,1],[902,1],[904,1],[912,1],[928,1],[938,1],[949,1],[957,1],[959,1],[965,1],[973,1],[982,1],[990,1],[1003,1],[1005,1],[1011,1],[1023,1],[1030,1],[1037,1],[1043,1],[1045,1],[1051,1],[1064,1],[1075,1],[1085,1],[1093,1],[1095,1],[1103,1],[1112,1],[1122,1],[1132,1],[1141,1],[1143,1],[1148,1],[1156,1],[1164,1],[1171,1],[1178,1],[1180,1],[1186,1],[1193,1],[1201,1],[1208,1],[1219,1],[1221,1],[1234,1],[1246,1],[1253,1],[1261,1],[1271,1],[1273,1],[1285,1],[1295,1],[1308,1],[1315,1],[1321,1],[1323,1],[1336,1],[1352,1],[1361,1],[1374,1],[1386,1],[1388,1],[1393,1],[1408,1],[1416,1],[1424,1],[1437,1],[1439,1],[1448,1],[1464,1],[1472,1],[1481,1],[1491,1],[1493,1],[1509,1],[1524,1],[1530,1],[1535,1],[1547,1],[1549,1],[1555,1],[1570,1],[1580,1],[1587,1],[1596,1],[1598,1],[1607,1],[1623,1],[1633,1],[1641,1],[1648,1],[1650,1],[1659,1],[1674,1],[1682,1],[1694,1],[1704,1],[1706,1],[1714,1],[1730,1],[1737,1],[1753,1],[1768,1],[1770,1],[1780,1],[1796,1],[1807,1],[1817,1],[1833,1],[1835,1],[1844,1],[1859,1],[1875,1],[1883,1],[1899,1],[1901,1],[1907,1],[1916,1],[1923,1],[1929,1],[1937,1],[1939,1],[1952,1],[1960,1],[1967,1],[1975,1],[1982,1],[1984,1],[1991,1],[1998,1],[2014,1],[2020,1],[2031,1],[2033,1],[2043,1],[2054,1],[2065,1],[2074,1],[2090,1],[2092,1],[2099,1],[2106,1],[2115,1],[2123,1],[2133,1],[2135,1],[2145,1],[2151,1],[2161,1],[2170,1],[2182,1],[2184,1],[2192,1],[2199,1],[2205,1],[2211,1],[2220,1],[2222,1],[2231,1],[2244,1],[2253,1],[2262,1],[2273,1],[2275,1],[2282,1],[2288,1],[2293,1],[2299,1],[2309,1],[2311,1],[2316,1],[2326,1],[2333,1],[2344,1],[2355,1],[2357,1],[2364,1],[2374,1],[2382,1],[2391,1],[2401,1],[2403,1],[2412,1],[2422,1],[2430,1],[2439,1],[2447,1],[2449,1],[2463,1],[2476,1],[2487,1],[2495,1],[2503,1],[2505,1],[2515,1],[2526,1],[2535,1],[2546,1],[2559,1],[2561,1],[2572,1],[2581,1],[2588,1],[2596,1],[2603,1],[2605,1],[2612,1],[2619,1],[2630,1],[2641,1],[2653,1],[2655,1],[2662,1],[2670,1],[2677,1],[2687,1],[2696,1],[2698,1],[2708,1],[2716,1],[2723,1],[2731,1],[2743,1],[2745,1],[2752,1],[2759,1],[2770,1],[2778,1],[2786,1],[2788,1],[2802,1],[2813,1],[2829,1],[2835,1],[2842,1],[2844,1],[2856,1],[2869,1],[2883,1],[2890,1],[2898,1],[2900,1],[2916,1],[2926,1],[2931,1],[2936,1],[2947,1],[2949,1],[2957,1],[2970,1],[2979,1],[2989,1],[2996,1],[2998,1],[3011,1],[3027,1],[3039,1],[3054,1],[3068,1],[3070,1],[3078,1],[3092,1],[3097,1],[3104,1],[3116,1],[3118,1],[3125,1],[3138,1],[3148,1],[3160,1],[3166,1],[3168,1],[3176,1],[3189,1],[3197,1],[3203,1],[3216,1],[3218,1],[3230,1],[3237,1],[3249,1],[3256,1],[3270,1],[3272,1],[3283,1],[3294,1],[3307,1],[3316,1],[3328,1],[3330,1],[3340,1],[3354,1],[3366,1],[3376,1],[3388,1],[3390,1],[3402,1],[3411,1],[3419,1],[3428,1],[3441,1],[3443,1],[3453,1],[3462,1],[3470,1],[3486,1],[3502,1],[3504,1],[3513,1],[3520,1],[3528,1],[3543,1],[3553,1],[3555,1],[3564,1],[3571,1],[3585,1],[3590,1],[3603,1],[3605,1],[3618,1],[3628,1],[3637,1],[3643,1],[3654,1],[3656,1],[3666,1],[3673,1],[3679,1],[3689,1],[3700,1],[3702,1],[3714,1],[3724,1],[3734,1],[3740,1],[3751,1],[3753,1],[3764,1],[3780,1],[3792,1],[3803,1],[3812,1],[3814,1],[3824,1],[3840,1],[3854,1],[3868,1],[3875,1],[3877,1],[3891,1],[3903,1],[3915,1],[3925,1],[3934,1],[3942,1],[3944,1],[3954,1],[3965,1],[3981,1],[3991,1],[4000,1],[4002,1],[4013,1],[4023,1],[4029,1],[4037,1],[4047,1],[4049,1],[4058,1],[4073,1],[4085,1],[4093,1],[4100,1],[4102,1],[4111,1],[4117,1],[4126,1],[4135,1],[4143,1],[4145,1],[4155,1],[4162,1],[4176,1],[4186,1],[4198,1],[4200,1],[4209,1],[4219,1],[4227,1],[4236,1],[4245,1],[4247,1],[4256,1],[4267,1],[4281,1],[4291,1],[4307,1],[4309,1],[4317,1],[4327,1],[4339,1],[4348,1],[4360,1],[4362,1],[4369,1],[4376,1],[4388,1],[4401,1],[4411,1],[4413,1],[4424,1],[4435,1],[4446,1],[4454,1],[4467,1],[4469,1],[4478,1],[4485,1],[4492,1],[4500,1],[4512,1],[4514,1],[4524,1],[4532,1],[4539,1],[4545,1],[4559,1],[4561,1],[4567,1],[4578,1],[4585,1],[4592,1],[4605,1],[4607,1],[4618,1],[4633,1],[4645,1],[4653,1],[4665,1],[4667,1],[4680,1],[4686,1],[4702,1],[4710,1],[4722,1],[4724,1],[4731,1],[4739,1],[4755,1],[4764,1],[4777,1],[4779,1],[4786,1],[4796,1],[4801,1],[4811,1],[4827,1],[4829,1],[4836,1],[4847,1],[4853,1],[4864,1],[4875,1],[4877,1],[4889,1],[4904,1],[4915,1],[4925,1],[4933,1],[4935,1],[4944,1],[4955,1],[4962,1],[4973,1],[4984,1],[4986,1],[4994,1],[5007,1],[5021,1],[5031,1],[5046,1],[5048,1],[5057,1],[5065,1],[5077,1],[5084,1],[5095,1],[5097,1],[5106,1],[5114,1],[5130,1],[5140,1],[5150,1],[5152,1],[5161,1],[5173,1],[5187,1],[5194,1],[5208,1],[5210,1],[5220,1],[5229,1],[5237,1],[5248,1],[5255,1],[5257,1],[5273,1],[5286,1],[5296,1],[5304,1],[5311,1],[5313,1],[5322,1],[5335,1],[5342,1],[5350,1],[5352,1],[5368,1],[5382,1],[5389,1],[5404,1]]},"1382":{"position":[[133,1],[174,1]]},"1383":{"position":[[516,1],[551,1],[584,1],[619,1],[658,1],[689,1],[1124,1],[1157,1],[1191,1],[1468,1],[1492,1],[1516,1],[1533,1],[1560,1]]},"1384":{"position":[[246,1],[291,1],[351,1],[427,1],[911,1],[1035,1],[1066,1]]},"1387":{"position":[[354,1],[441,1],[845,1],[885,3],[889,3],[893,3],[897,3],[901,3],[980,1],[1067,1]]},"1388":{"position":[[705,1]]},"1397":{"position":[[861,1]]},"1398":{"position":[[860,1]]},"1403":{"position":[[287,1],[304,1],[306,1],[308,1],[310,1],[312,1],[314,1],[331,1],[347,1],[363,1],[379,1],[395,1],[403,1],[405,1],[416,1],[426,1],[433,1],[445,1],[450,1],[452,1],[461,1],[474,1],[480,1],[495,1],[502,1],[504,1],[510,1],[523,1],[534,1],[545,1],[552,1],[554,1],[560,1],[574,1],[583,1],[590,1],[606,1],[608,1],[616,1],[630,1],[639,1],[644,1],[656,1],[658,1],[666,1],[677,1],[686,1],[698,1],[711,1],[713,1],[725,1],[741,1],[749,1],[759,1],[769,1],[771,1],[779,1],[790,1],[799,1],[806,1],[818,1],[820,1],[826,1],[836,1],[848,1],[854,1],[863,1],[865,1],[876,1],[883,1],[890,1],[897,1],[902,1],[904,1],[912,1],[928,1],[938,1],[949,1],[957,1],[959,1],[965,1],[973,1],[982,1],[990,1],[1003,1],[1005,1],[1011,1],[1023,1],[1030,1],[1037,1],[1043,1],[1045,1],[1051,1],[1064,1],[1075,1],[1085,1],[1093,1],[1095,1],[1103,1],[1112,1],[1122,1],[1132,1],[1141,1],[1143,1],[1148,1],[1156,1],[1164,1],[1171,1],[1178,1],[1180,1],[1186,1],[1193,1],[1201,1],[1208,1],[1219,1],[1221,1],[1234,1],[1246,1],[1253,1],[1261,1],[1271,1],[1273,1],[1285,1],[1295,1],[1308,1],[1315,1],[1321,1],[1323,1],[1336,1],[1352,1],[1361,1],[1374,1],[1386,1],[1388,1],[1393,1],[1408,1],[1416,1],[1424,1],[1437,1],[1439,1],[1448,1],[1464,1],[1472,1],[1481,1],[1491,1],[1493,1],[1509,1],[1524,1],[1530,1],[1535,1],[1547,1],[1549,1],[1555,1],[1570,1],[1580,1],[1587,1],[1596,1],[1598,1],[1607,1],[1623,1],[1633,1],[1641,1],[1648,1],[1650,1],[1659,1],[1674,1],[1682,1],[1694,1],[1704,1],[1706,1],[1714,1],[1730,1],[1737,1],[1753,1],[1768,1],[1770,1],[1780,1],[1796,1],[1807,1],[1817,1],[1833,1],[1835,1],[1844,1],[1859,1],[1875,1],[1883,1],[1899,1],[1901,1],[1907,1],[1916,1],[1923,1],[1929,1],[1937,1],[1939,1],[1952,1],[1960,1],[1967,1],[1975,1],[1982,1],[1984,1],[1991,1],[1998,1],[2014,1],[2020,1],[2031,1],[2033,1],[2043,1],[2054,1],[2065,1],[2074,1],[2090,1],[2092,1],[2099,1],[2106,1],[2115,1],[2123,1],[2133,1],[2135,1],[2145,1],[2151,1],[2161,1],[2170,1],[2182,1],[2184,1],[2192,1],[2199,1],[2205,1],[2211,1],[2220,1],[2222,1],[2231,1],[2244,1],[2253,1],[2262,1],[2273,1],[2275,1],[2282,1],[2288,1],[2293,1],[2299,1],[2309,1],[2311,1],[2316,1],[2326,1],[2333,1],[2344,1],[2355,1],[2357,1],[2364,1],[2374,1],[2382,1],[2391,1],[2401,1],[2403,1],[2412,1],[2422,1],[2430,1],[2439,1],[2447,1],[2449,1],[2463,1],[2476,1],[2487,1],[2495,1],[2503,1],[2505,1],[2515,1],[2526,1],[2535,1],[2546,1],[2559,1],[2561,1],[2572,1],[2581,1],[2588,1],[2596,1],[2603,1],[2605,1],[2612,1],[2619,1],[2630,1],[2641,1],[2653,1],[2655,1],[2662,1],[2670,1],[2677,1],[2687,1],[2696,1],[2698,1],[2708,1],[2716,1],[2723,1],[2731,1],[2743,1],[2745,1],[2752,1],[2759,1],[2770,1],[2778,1],[2786,1],[2788,1],[2802,1],[2813,1],[2829,1],[2835,1],[2842,1],[2844,1],[2856,1],[2869,1],[2883,1],[2890,1],[2898,1],[2900,1],[2916,1],[2926,1],[2931,1],[2936,1],[2947,1],[2949,1],[2957,1],[2970,1],[2979,1],[2989,1],[2996,1],[2998,1],[3011,1],[3027,1],[3039,1],[3054,1],[3068,1],[3070,1],[3078,1],[3092,1],[3097,1],[3104,1],[3116,1],[3118,1],[3125,1],[3138,1],[3148,1],[3160,1],[3166,1],[3168,1],[3176,1],[3189,1],[3197,1],[3203,1],[3216,1],[3218,1],[3230,1],[3237,1],[3249,1],[3256,1],[3270,1],[3272,1],[3283,1],[3294,1],[3307,1],[3316,1],[3328,1],[3330,1],[3340,1],[3354,1],[3366,1],[3376,1],[3388,1],[3390,1],[3402,1],[3411,1],[3419,1],[3428,1],[3441,1],[3443,1],[3453,1],[3462,1],[3470,1],[3486,1],[3502,1],[3504,1],[3513,1],[3520,1],[3528,1],[3543,1],[3553,1],[3555,1],[3564,1],[3571,1],[3585,1],[3590,1],[3603,1],[3605,1],[3618,1],[3628,1],[3637,1],[3643,1],[3654,1],[3656,1],[3666,1],[3673,1],[3679,1],[3689,1],[3700,1],[3702,1],[3714,1],[3724,1],[3734,1],[3740,1],[3751,1],[3753,1],[3764,1],[3780,1],[3792,1],[3803,1],[3812,1],[3814,1],[3824,1],[3840,1],[3854,1],[3868,1],[3875,1],[3877,1],[3891,1],[3903,1],[3915,1],[3925,1],[3934,1],[3942,1],[3944,1],[3954,1],[3965,1],[3981,1],[3991,1],[4000,1],[4002,1],[4013,1],[4023,1],[4029,1],[4037,1],[4047,1],[4049,1],[4058,1],[4073,1],[4085,1],[4093,1],[4100,1],[4102,1],[4111,1],[4117,1],[4126,1],[4135,1],[4143,1],[4145,1],[4155,1],[4162,1],[4176,1],[4186,1],[4198,1],[4200,1],[4209,1],[4219,1],[4227,1],[4236,1],[4245,1],[4247,1],[4256,1],[4267,1],[4281,1],[4291,1],[4307,1],[4309,1],[4317,1],[4327,1],[4339,1],[4348,1],[4360,1],[4362,1],[4369,1],[4376,1],[4388,1],[4401,1],[4411,1],[4413,1],[4424,1],[4435,1],[4446,1],[4454,1],[4467,1],[4469,1],[4478,1],[4485,1],[4492,1],[4500,1],[4512,1],[4514,1],[4524,1],[4532,1],[4539,1],[4545,1],[4559,1],[4561,1],[4567,1],[4578,1],[4585,1],[4592,1],[4605,1],[4607,1],[4618,1],[4633,1],[4645,1],[4653,1],[4665,1],[4667,1],[4680,1],[4686,1],[4702,1],[4710,1],[4722,1],[4724,1],[4731,1],[4739,1],[4755,1],[4764,1],[4777,1],[4779,1],[4786,1],[4796,1],[4801,1],[4811,1],[4827,1],[4829,1],[4836,1],[4847,1],[4853,1],[4864,1],[4875,1],[4877,1],[4889,1],[4904,1],[4915,1],[4925,1],[4933,1],[4935,1],[4944,1],[4955,1],[4962,1],[4973,1],[4984,1],[4986,1],[4994,1],[5007,1],[5021,1],[5031,1],[5046,1],[5048,1],[5057,1],[5065,1],[5077,1],[5084,1],[5095,1],[5097,1],[5106,1],[5114,1],[5130,1],[5140,1],[5150,1],[5152,1],[5161,1],[5173,1],[5187,1],[5194,1],[5208,1],[5210,1],[5220,1],[5229,1],[5237,1],[5248,1],[5255,1],[5257,1],[5273,1],[5286,1],[5296,1],[5304,1],[5311,1],[5313,1],[5322,1],[5335,1],[5342,1],[5350,1],[5352,1],[5368,1],[5382,1],[5389,1],[5404,1]]},"1408":{"position":[[180,1]]},"1409":{"position":[[844,1]]},"1414":{"position":[[287,1],[304,1],[306,1],[308,1],[310,1],[312,1],[314,1],[331,1],[347,1],[363,1],[379,1],[395,1],[403,1],[405,1],[416,1],[426,1],[433,1],[445,1],[450,1],[452,1],[461,1],[474,1],[480,1],[495,1],[502,1],[504,1],[510,1],[523,1],[534,1],[545,1],[552,1],[554,1],[560,1],[574,1],[583,1],[590,1],[606,1],[608,1],[616,1],[630,1],[639,1],[644,1],[656,1],[658,1],[666,1],[677,1],[686,1],[698,1],[711,1],[713,1],[725,1],[741,1],[749,1],[759,1],[769,1],[771,1],[779,1],[790,1],[799,1],[806,1],[818,1],[820,1],[826,1],[836,1],[848,1],[854,1],[863,1],[865,1],[876,1],[883,1],[890,1],[897,1],[902,1],[904,1],[912,1],[928,1],[938,1],[949,1],[957,1],[959,1],[965,1],[973,1],[982,1],[990,1],[1003,1],[1005,1],[1011,1],[1023,1],[1030,1],[1037,1],[1043,1],[1045,1],[1051,1],[1064,1],[1075,1],[1085,1],[1093,1],[1095,1],[1103,1],[1112,1],[1122,1],[1132,1],[1141,1],[1143,1],[1148,1],[1156,1],[1164,1],[1171,1],[1178,1],[1180,1],[1186,1],[1193,1],[1201,1],[1208,1],[1219,1],[1221,1],[1234,1],[1246,1],[1253,1],[1261,1],[1271,1],[1273,1],[1285,1],[1295,1],[1308,1],[1315,1],[1321,1],[1323,1],[1336,1],[1352,1],[1361,1],[1374,1],[1386,1],[1388,1],[1393,1],[1408,1],[1416,1],[1424,1],[1437,1],[1439,1],[1448,1],[1464,1],[1472,1],[1481,1],[1491,1],[1493,1],[1509,1],[1524,1],[1530,1],[1535,1],[1547,1],[1549,1],[1555,1],[1570,1],[1580,1],[1587,1],[1596,1],[1598,1],[1607,1],[1623,1],[1633,1],[1641,1],[1648,1],[1650,1],[1659,1],[1674,1],[1682,1],[1694,1],[1704,1],[1706,1],[1714,1],[1730,1],[1737,1],[1753,1],[1768,1],[1770,1],[1780,1],[1796,1],[1807,1],[1817,1],[1833,1],[1835,1],[1844,1],[1859,1],[1875,1],[1883,1],[1899,1],[1901,1],[1907,1],[1916,1],[1923,1],[1929,1],[1937,1],[1939,1],[1952,1],[1960,1],[1967,1],[1975,1],[1982,1],[1984,1],[1991,1],[1998,1],[2014,1],[2020,1],[2031,1],[2033,1],[2043,1],[2054,1],[2065,1],[2074,1],[2090,1],[2092,1],[2099,1],[2106,1],[2115,1],[2123,1],[2133,1],[2135,1],[2145,1],[2151,1],[2161,1],[2170,1],[2182,1],[2184,1],[2192,1],[2199,1],[2205,1],[2211,1],[2220,1],[2222,1],[2231,1],[2244,1],[2253,1],[2262,1],[2273,1],[2275,1],[2282,1],[2288,1],[2293,1],[2299,1],[2309,1],[2311,1],[2316,1],[2326,1],[2333,1],[2344,1],[2355,1],[2357,1],[2364,1],[2374,1],[2382,1],[2391,1],[2401,1],[2403,1],[2412,1],[2422,1],[2430,1],[2439,1],[2447,1],[2449,1],[2463,1],[2476,1],[2487,1],[2495,1],[2503,1],[2505,1],[2515,1],[2526,1],[2535,1],[2546,1],[2559,1],[2561,1],[2572,1],[2581,1],[2588,1],[2596,1],[2603,1],[2605,1],[2612,1],[2619,1],[2630,1],[2641,1],[2653,1],[2655,1],[2662,1],[2670,1],[2677,1],[2687,1],[2696,1],[2698,1],[2708,1],[2716,1],[2723,1],[2731,1],[2743,1],[2745,1],[2752,1],[2759,1],[2770,1],[2778,1],[2786,1],[2788,1],[2802,1],[2813,1],[2829,1],[2835,1],[2842,1],[2844,1],[2856,1],[2869,1],[2883,1],[2890,1],[2898,1],[2900,1],[2916,1],[2926,1],[2931,1],[2936,1],[2947,1],[2949,1],[2957,1],[2970,1],[2979,1],[2989,1],[2996,1],[2998,1],[3011,1],[3027,1],[3039,1],[3054,1],[3068,1],[3070,1],[3078,1],[3092,1],[3097,1],[3104,1],[3116,1],[3118,1],[3125,1],[3138,1],[3148,1],[3160,1],[3166,1],[3168,1],[3176,1],[3189,1],[3197,1],[3203,1],[3216,1],[3218,1],[3230,1],[3237,1],[3249,1],[3256,1],[3270,1],[3272,1],[3283,1],[3294,1],[3307,1],[3316,1],[3328,1],[3330,1],[3340,1],[3354,1],[3366,1],[3376,1],[3388,1],[3390,1],[3402,1],[3411,1],[3419,1],[3428,1],[3441,1],[3443,1],[3453,1],[3462,1],[3470,1],[3486,1],[3502,1],[3504,1],[3513,1],[3520,1],[3528,1],[3543,1],[3553,1],[3555,1],[3564,1],[3571,1],[3585,1],[3590,1],[3603,1],[3605,1],[3618,1],[3628,1],[3637,1],[3643,1],[3654,1],[3656,1],[3666,1],[3673,1],[3679,1],[3689,1],[3700,1],[3702,1],[3714,1],[3724,1],[3734,1],[3740,1],[3751,1],[3753,1],[3764,1],[3780,1],[3792,1],[3803,1],[3812,1],[3814,1],[3824,1],[3840,1],[3854,1],[3868,1],[3875,1],[3877,1],[3891,1],[3903,1],[3915,1],[3925,1],[3934,1],[3942,1],[3944,1],[3954,1],[3965,1],[3981,1],[3991,1],[4000,1],[4002,1],[4013,1],[4023,1],[4029,1],[4037,1],[4047,1],[4049,1],[4058,1],[4073,1],[4085,1],[4093,1],[4100,1],[4102,1],[4111,1],[4117,1],[4126,1],[4135,1],[4143,1],[4145,1],[4155,1],[4162,1],[4176,1],[4186,1],[4198,1],[4200,1],[4209,1],[4219,1],[4227,1],[4236,1],[4245,1],[4247,1],[4256,1],[4267,1],[4281,1],[4291,1],[4307,1],[4309,1],[4317,1],[4327,1],[4339,1],[4348,1],[4360,1],[4362,1],[4369,1],[4376,1],[4388,1],[4401,1],[4411,1],[4413,1],[4424,1],[4435,1],[4446,1],[4454,1],[4467,1],[4469,1],[4478,1],[4485,1],[4492,1],[4500,1],[4512,1],[4514,1],[4524,1],[4532,1],[4539,1],[4545,1],[4559,1],[4561,1],[4567,1],[4578,1],[4585,1],[4592,1],[4605,1],[4607,1],[4618,1],[4633,1],[4645,1],[4653,1],[4665,1],[4667,1],[4680,1],[4686,1],[4702,1],[4710,1],[4722,1],[4724,1],[4731,1],[4739,1],[4755,1],[4764,1],[4777,1],[4779,1],[4786,1],[4796,1],[4801,1],[4811,1],[4827,1],[4829,1],[4836,1],[4847,1],[4853,1],[4864,1],[4875,1],[4877,1],[4889,1],[4904,1],[4915,1],[4925,1],[4933,1],[4935,1],[4944,1],[4955,1],[4962,1],[4973,1],[4984,1],[4986,1],[4994,1],[5007,1],[5021,1],[5031,1],[5046,1],[5048,1],[5057,1],[5065,1],[5077,1],[5084,1],[5095,1],[5097,1],[5106,1],[5114,1],[5130,1],[5140,1],[5150,1],[5152,1],[5161,1],[5173,1],[5187,1],[5194,1],[5208,1],[5210,1],[5220,1],[5229,1],[5237,1],[5248,1],[5255,1],[5257,1],[5273,1],[5286,1],[5296,1],[5304,1],[5311,1],[5313,1],[5322,1],[5335,1],[5342,1],[5350,1],[5352,1],[5368,1],[5382,1],[5389,1],[5404,1]]},"1421":{"position":[[341,1],[428,1]]},"1434":{"position":[[488,2],[1928,1]]},"1453":{"position":[[1432,1]]},"1459":{"position":[[980,1],[1230,1],[1235,1],[1239,1],[1243,1],[1248,1],[1253,2],[1284,1],[1288,1],[1292,1],[1296,1],[1300,1],[1316,1],[1324,1],[1328,2]]},"1461":{"position":[[346,1],[400,1],[1193,3],[1207,3],[1221,1],[1223,3],[1235,1],[1237,3],[1251,1],[1253,3],[1270,3],[1283,1],[1285,3],[1299,1],[1301,3],[1310,1],[1312,1],[1314,3],[1326,1],[1328,1],[1330,3],[1344,1],[1346,1],[1348,3],[1365,1],[1367,3],[1381,1],[1383,3],[1395,1],[1397,3],[1411,1],[1413,3],[1443,3],[1453,3],[1465,3],[1479,3],[3027,3],[3045,3],[3064,3],[3623,1]]},"1462":{"position":[[537,2]]},"1463":{"position":[[322,1],[340,1],[359,1],[374,1],[381,1],[391,1],[418,1],[420,1],[427,1],[437,1],[463,1],[465,1],[628,1],[695,1],[699,1],[766,1],[830,1],[897,1]]},"1464":{"position":[[178,1],[196,1],[215,1],[230,1],[239,1],[288,1],[352,1],[371,1],[510,1],[548,1],[552,1],[610,1],[673,1],[737,1]]},"1465":{"position":[[510,1],[525,1],[534,1],[549,1],[567,1],[637,1],[651,1],[706,1],[716,1],[731,1],[733,1],[743,1],[769,1],[771,1],[785,1],[862,1],[982,1],[1009,1],[1018,1],[1028,1],[1044,1],[1046,1],[1056,1],[1074,1],[1207,1],[1253,1],[1257,1],[1306,1],[1372,1],[1407,1],[1473,1],[1521,1],[1525,1],[1573,1],[1639,1],[1674,1]]},"1466":{"position":[[137,1],[155,1],[174,1],[189,1],[198,1],[269,1],[334,1],[350,1],[488,1],[521,1],[525,1],[561,1],[621,1],[656,1]]},"1467":{"position":[[480,1],[498,1],[517,1],[532,1],[541,1],[612,1],[686,1],[704,1],[706,1],[802,1],[818,1],[863,1],[879,1],[1025,1],[1063,1],[1067,1],[1108,1],[1170,1],[1211,1],[1326,1],[1357,1],[1394,1],[1396,1],[1400,1],[1431,1],[1468,1],[1470,1],[1532,1],[1563,1],[1618,1],[1620,1],[1998,4],[2151,1],[2169,1],[2188,1],[2203,1],[2265,1],[2275,1],[2302,1],[2304,1],[2452,1],[2483,2],[2509,2],[2512,1],[2537,2],[2540,1],[2544,1],[2575,2],[2601,2],[2604,1],[2629,2],[2632,1],[2698,1],[2729,2],[2755,2],[2758,1],[2783,2],[2786,1],[2811,3],[2815,1]]},"1472":{"position":[[829,1]]},"1476":{"position":[[188,1],[206,1],[225,1],[240,1],[247,1],[257,1],[278,1],[280,1],[287,1],[297,1],[318,1],[320,1],[461,1],[515,1],[519,1],[573,1],[637,1],[691,1],[1254,1],[1272,1],[1291,1],[1306,1],[1393,1],[1409,1],[1688,1],[1761,1],[1765,1],[1838,1],[1842,1],[1915,1],[1919,1],[1992,1],[2058,1],[2148,1],[2221,1]]},"1477":{"position":[[958,1],[976,1],[995,1],[1010,1],[1019,1],[1084,1],[1100,1],[1102,1],[1189,1],[1317,1],[1333,1],[1335,1],[1395,1],[1434,1],[1510,1],[1536,1],[1719,1],[1750,1],[1769,1],[1824,1],[1826,1],[1828,1],[1832,1],[1863,1],[1885,1],[1904,1],[1906,1],[1908,1],[1912,1],[1943,1],[1962,1],[1999,1],[2001,1],[2003,1],[2063,1],[2094,1],[2113,1],[2168,1],[2170,1],[2172,1],[2232,1],[2263,1],[2288,1],[2325,1],[2327,1],[2329,1],[2333,1],[2364,1],[2383,1],[2420,1],[2422,1],[2424,1],[2484,1],[2515,1],[2534,1],[2589,1],[2591,1],[2593,1],[2893,4],[3038,1],[3052,1],[3180,1],[3198,1],[3217,1],[3232,1],[3241,1],[3330,1],[3419,1],[3501,1],[3561,1],[3600,1],[3676,1],[3702,1],[3704,1],[3812,1],[3828,1],[3838,1],[3856,1],[3893,1],[3999,1],[4065,1],[4096,1],[4176,1],[4178,1],[4182,1],[4213,1],[4256,1],[4258,1],[4262,1],[4293,1],[4353,1],[4355,1],[4421,1],[4452,1],[4532,1],[4534,1],[4600,1],[4631,1],[4697,1],[4699,1],[4703,1],[4734,1],[4794,1],[4796,1],[4862,1],[4893,1],[4973,1],[4975,1]]},"1480":{"position":[[120,1],[186,1],[263,1],[298,1],[370,1],[477,1],[538,1],[635,1],[677,1],[720,1],[757,1],[801,1],[866,1],[942,1],[1015,1],[1070,1],[1151,1],[1216,1],[1291,1],[1366,1],[1436,1]]}},"keywords":{}}],["0",{"_index":1363,"title":{},"content":{"94":{"position":[[3142,2],[3159,1],[3171,1]]},"114":{"position":[[326,1]]},"115":{"position":[[806,1]]},"120":{"position":[[2579,2],[2596,1],[2608,1]]},"159":{"position":[[807,1],[861,1],[904,1]]},"161":{"position":[[982,2],[1007,2]]},"164":{"position":[[2029,1]]},"166":{"position":[[478,1]]},"250":{"position":[[1519,1]]},"253":{"position":[[1840,2],[3290,1]]},"254":{"position":[[790,2],[866,2],[2847,2],[2923,2],[3508,2],[3584,1]]},"313":{"position":[[1840,2]]},"409":{"position":[[73,1]]},"750":{"position":[[391,1]]},"766":{"position":[[391,1]]},"767":{"position":[[1124,1]]},"792":{"position":[[1429,1]]},"824":{"position":[[1190,1]]},"898":{"position":[[546,2],[1849,2]]},"1076":{"position":[[584,1]]},"1146":{"position":[[683,2]]},"1173":{"position":[[695,2]]},"1215":{"position":[[683,2]]},"1223":{"position":[[695,2]]},"1465":{"position":[[1519,1]]},"1476":{"position":[[1443,4],[1518,4]]},"1477":{"position":[[1902,1],[2305,2],[2323,1],[3325,4],[4252,3],[4673,3],[4693,3]]}},"keywords":{}}],["0'",{"_index":5730,"title":{},"content":{"1146":{"position":[[96,3]]},"1173":{"position":[[96,3]]},"1215":{"position":[[96,3]]},"1223":{"position":[[96,3]]}},"keywords":{}}],["0.8",{"_index":1386,"title":{},"content":{"96":{"position":[[493,3]]}},"keywords":{}}],["00000000",{"_index":5297,"title":{},"content":{"1078":{"position":[[120,8]]}},"keywords":{}}],["000000000",{"_index":4200,"title":{},"content":{"575":{"position":[[186,9]]},"586":{"position":[[296,9]]},"721":{"position":[[199,9]]}},"keywords":{}}],["000000000000000",{"_index":3974,"title":{},"content":{"518":{"position":[[231,15]]}},"keywords":{}}],["0000000000000000",{"_index":138,"title":{},"content":{"3":{"position":[[847,16]]}},"keywords":{}}],["00000000201a3f27",{"_index":125,"title":{},"content":{"3":{"position":[[537,16],[886,16]]}},"keywords":{}}],["002",{"_index":5942,"title":{},"content":{"1274":{"position":[[261,3]]},"1277":{"position":[[628,3]]}},"keywords":{}}],["002"",{"_index":5956,"title":{},"content":{"1277":{"position":[[680,9]]}},"keywords":{}}],["00:00",{"_index":6568,"title":{},"content":{"1453":{"position":[[511,6]]}},"keywords":{}}],["00:13",{"_index":6572,"title":{},"content":{"1453":{"position":[[739,6]]}},"keywords":{}}],["00:15",{"_index":6569,"title":{},"content":{"1453":{"position":[[518,6],[782,5]]}},"keywords":{}}],["00:30",{"_index":6570,"title":{},"content":{"1453":{"position":[[525,6]]}},"keywords":{}}],["00:45and",{"_index":6571,"title":{},"content":{"1453":{"position":[[532,8]]}},"keywords":{}}],["01",{"_index":123,"title":{},"content":{"3":{"position":[[502,2],[803,2]]},"4":{"position":[[136,2]]},"82":{"position":[[2568,2],[2701,2],[4709,2],[4839,2]]},"94":{"position":[[1877,2],[2242,2]]},"120":{"position":[[1429,2],[1794,2]]},"352":{"position":[[87,2]]},"373":{"position":[[270,2],[273,2],[376,2],[379,2]]},"377":{"position":[[1552,2]]},"388":{"position":[[416,2]]},"424":{"position":[[245,2]]},"448":{"position":[[1023,2],[1026,2]]},"449":{"position":[[376,2],[379,2]]},"454":{"position":[[435,2]]},"455":{"position":[[227,2]]},"460":{"position":[[249,2]]},"461":{"position":[[182,2]]},"467":{"position":[[146,2]]},"497":{"position":[[170,2],[173,2]]},"517":{"position":[[2524,2]]},"527":{"position":[[313,2]]},"535":{"position":[[327,2]]},"556":{"position":[[1728,2],[2102,2]]},"557":{"position":[[426,2],[429,2],[449,2],[452,2]]},"575":{"position":[[216,2]]},"586":{"position":[[277,2],[280,2]]},"611":{"position":[[825,2],[1092,2]]},"612":{"position":[[344,2]]},"631":{"position":[[249,2],[388,2]]},"632":{"position":[[158,2],[189,2]]},"654":{"position":[[489,2]]},"671":{"position":[[222,2]]},"685":{"position":[[369,2]]},"700":{"position":[[197,2]]},"701":{"position":[[151,2]]},"706":{"position":[[197,2]]},"707":{"position":[[151,2]]},"721":{"position":[[300,2],[303,2]]},"741":{"position":[[312,2]]},"742":{"position":[[183,2]]},"748":{"position":[[316,2],[347,2]]},"860":{"position":[[241,2]]},"885":{"position":[[498,2]]},"886":{"position":[[242,2]]},"960":{"position":[[157,2]]},"983":{"position":[[151,2]]},"1010":{"position":[[326,2],[329,2]]},"1015":{"position":[[311,2]]},"1016":{"position":[[269,2]]},"1028":{"position":[[120,2],[258,2]]},"1029":{"position":[[128,2],[159,2]]},"1070":{"position":[[696,2]]},"1071":{"position":[[289,2]]},"1076":{"position":[[658,2]]},"1086":{"position":[[307,2],[310,2],[354,2],[357,2]]},"1113":{"position":[[249,2]]},"1114":{"position":[[190,2]]},"1380":{"position":[[313,3]]},"1404":{"position":[[313,3]]},"1415":{"position":[[313,3]]},"1480":{"position":[[1135,2],[1500,2]]}},"keywords":{}}],["0123456789",{"_index":4126,"title":{},"content":{"557":{"position":[[358,11]]}},"keywords":{}}],["01950",{"_index":4899,"title":{},"content":{"871":{"position":[[61,6]]}},"keywords":{}}],["01t00:00:00.000z"",{"_index":3266,"title":{},"content":{"352":{"position":[[90,23]]}},"keywords":{}}],["01t00:00:00z",{"_index":3456,"title":{},"content":{"377":{"position":[[1555,13]]},"378":{"position":[[208,12]]},"518":{"position":[[267,12],[440,12]]},"527":{"position":[[316,12]]},"535":{"position":[[330,12]]},"1108":{"position":[[202,12]]},"1134":{"position":[[222,12]]}},"keywords":{}}],["01t00:00:00z"",{"_index":4829,"title":{},"content":{"852":{"position":[[283,18]]}},"keywords":{}}],["03",{"_index":3503,"title":{},"content":{"388":{"position":[[413,2]]},"518":{"position":[[264,2],[437,2]]},"575":{"position":[[213,2]]},"612":{"position":[[341,2]]},"1108":{"position":[[199,2]]},"1134":{"position":[[219,2]]}},"keywords":{}}],["04",{"_index":1381,"title":{},"content":{"96":{"position":[[417,2],[636,2]]},"210":{"position":[[3271,2]]},"253":{"position":[[1696,2]]},"255":{"position":[[258,2],[399,2],[544,2],[683,2]]},"295":{"position":[[3771,2]]},"313":{"position":[[1696,2]]}},"keywords":{}}],["04/utc_hour=16/<name>.gz",{"_index":484,"title":{},"content":{"16":{"position":[[1130,30]]}},"keywords":{}}],["04:00",{"_index":4605,"title":{},"content":{"754":{"position":[[648,6]]},"794":{"position":[[854,6]]},"809":{"position":[[854,6]]},"825":{"position":[[690,6]]},"1286":{"position":[[911,6]]},"1301":{"position":[[747,6]]},"1325":{"position":[[911,6]]}},"keywords":{}}],["05",{"_index":2957,"title":{},"content":{"295":{"position":[[509,2],[537,2],[568,2],[2070,2],[2350,2],[2633,2],[2918,2],[3202,2],[3485,2],[3488,2],[3768,2]]}},"keywords":{}}],["05:00",{"_index":4595,"title":{},"content":{"752":{"position":[[1090,6]]},"754":{"position":[[638,5]]},"791":{"position":[[1124,6]]},"794":{"position":[[844,5]]},"809":{"position":[[844,5]]},"825":{"position":[[680,5]]},"1286":{"position":[[901,5]]},"1301":{"position":[[737,5]]},"1325":{"position":[[901,5]]}},"keywords":{}}],["05t15:49:45z"",{"_index":1181,"title":{},"content":{"82":{"position":[[2571,18],[2704,18]]}},"keywords":{}}],["05t16:06:36z"",{"_index":1207,"title":{},"content":{"82":{"position":[[4712,18]]}},"keywords":{}}],["05t16:06:37z"",{"_index":1209,"title":{},"content":{"82":{"position":[[4842,18]]}},"keywords":{}}],["06",{"_index":2986,"title":{},"content":{"295":{"position":[[3205,2]]},"425":{"position":[[180,2]]},"517":{"position":[[2529,3]]},"686":{"position":[[217,2]]},"1077":{"position":[[514,2]]},"1078":{"position":[[176,2]]},"1359":{"position":[[313,3]]}},"keywords":{}}],["06t00:00:00z",{"_index":5294,"title":{},"content":{"1077":{"position":[[517,12]]}},"keywords":{}}],["07",{"_index":2084,"title":{},"content":{"183":{"position":[[4188,2]]},"295":{"position":[[2921,2]]},"517":{"position":[[2533,2]]}},"keywords":{}}],["07/schema#"",{"_index":3074,"title":{},"content":{"314":{"position":[[1092,16]]}},"keywords":{}}],["07/utc_hour=19",{"_index":135,"title":{},"content":{"3":{"position":[[806,15]]},"4":{"position":[[139,16]]}},"keywords":{}}],["07/utc_hour=19/0000000000000000",{"_index":124,"title":{},"content":{"3":{"position":[[505,31]]}},"keywords":{}}],["08",{"_index":2963,"title":{},"content":{"295":{"position":[[571,2],[2636,2]]},"526":{"position":[[87,2]]},"1201":{"position":[[310,2]]},"1293":{"position":[[310,2]]},"1307":{"position":[[310,2]]},"1330":{"position":[[310,2]]}},"keywords":{}}],["08","total_edits":1,"total_new_lines":769,"user_id":"sebring12hrs"",{"_index":2780,"title":{},"content":{"255":{"position":[[402,112]]}},"keywords":{}}],["08","total_edits":1,"total_new_lines":82,"user_id":"simeon"",{"_index":2782,"title":{},"content":{"255":{"position":[[686,105]]}},"keywords":{}}],["08","total_edits":3,"total_new_lines":110,"user_id":"renamerr"",{"_index":2779,"title":{},"content":{"255":{"position":[[261,108]]}},"keywords":{}}],["08","total_edits":5,"total_new_lines":3360,"user_id":"sic19"",{"_index":2781,"title":{},"content":{"255":{"position":[[547,106]]}},"keywords":{}}],["08t15:52:13z"",{"_index":2718,"title":{},"content":{"253":{"position":[[1699,19]]},"313":{"position":[[1699,19]]}},"keywords":{}}],["09",{"_index":2960,"title":{},"content":{"295":{"position":[[540,2],[2353,2]]},"720":{"position":[[711,2]]},"1380":{"position":[[310,2]]},"1404":{"position":[[310,2]]},"1415":{"position":[[310,2]]}},"keywords":{}}],["0987654321",{"_index":4127,"title":{},"content":{"557":{"position":[[400,10]]}},"keywords":{}}],["09:00",{"_index":6526,"title":{},"content":{"1452":{"position":[[919,8]]}},"keywords":{}}],["09:00fast",{"_index":6553,"title":{},"content":{"1452":{"position":[[3622,9]]}},"keywords":{}}],["0ed3",{"_index":2973,"title":{},"content":{"295":{"position":[[1961,4],[2241,4],[2524,4],[2809,4],[3093,4],[3376,4],[3659,4]]}},"keywords":{}}],["0s",{"_index":6544,"title":{},"content":{"1452":{"position":[[2656,3]]}},"keywords":{}}],["0stimezon",{"_index":6551,"title":{},"content":{"1452":{"position":[[3572,11]]}},"keywords":{}}],["1",{"_index":925,"title":{"235":{"position":[[5,2]]},"249":{"position":[[0,2]]},"942":{"position":[[0,2]]}},"content":{"61":{"position":[[891,4],[1288,2]]},"71":{"position":[[341,2],[401,2],[464,2],[632,1],[729,1],[738,1]]},"81":{"position":[[1089,2]]},"98":{"position":[[791,3],[1111,2],[1169,2]]},"107":{"position":[[883,3],[983,4]]},"114":{"position":[[388,2]]},"115":{"position":[[833,2],[837,1]]},"121":{"position":[[1342,2]]},"128":{"position":[[527,2],[572,2],[707,2]]},"129":{"position":[[772,2],[900,2],[1107,2]]},"130":{"position":[[259,2]]},"132":{"position":[[509,2],[529,2],[549,2],[669,2]]},"133":{"position":[[445,2]]},"138":{"position":[[176,2]]},"141":{"position":[[486,2]]},"142":{"position":[[289,2]]},"146":{"position":[[3,2]]},"149":{"position":[[3,2]]},"150":{"position":[[3,2]]},"152":{"position":[[3,2]]},"164":{"position":[[563,2],[570,1],[1913,1],[2069,3],[2093,3],[2111,3],[2151,3]]},"183":{"position":[[3032,1],[3188,2]]},"190":{"position":[[971,1]]},"238":{"position":[[1251,2],[1320,2]]},"240":{"position":[[225,2]]},"253":{"position":[[1526,2],[2470,2],[2544,2]]},"254":{"position":[[736,1],[2793,1],[3454,1],[3689,1]]},"263":{"position":[[626,1]]},"295":{"position":[[498,1]]},"296":{"position":[[1687,1]]},"307":{"position":[[2088,1],[2566,1]]},"309":{"position":[[3311,2]]},"313":{"position":[[1526,2],[2470,2],[2544,2]]},"344":{"position":[[171,1]]},"409":{"position":[[119,1]]},"433":{"position":[[718,1]]},"517":{"position":[[2595,1]]},"573":{"position":[[1252,1]]},"575":{"position":[[300,1]]},"577":{"position":[[478,2]]},"584":{"position":[[1125,1],[1258,2],[1324,1]]},"586":{"position":[[322,1]]},"588":{"position":[[473,2]]},"590":{"position":[[580,1],[615,1]]},"842":{"position":[[2083,2],[2522,1],[2665,1]]},"843":{"position":[[759,1]]},"891":{"position":[[285,1]]},"912":{"position":[[1255,4]]},"922":{"position":[[2109,1]]},"1092":{"position":[[341,1]]},"1144":{"position":[[1028,2]]},"1196":{"position":[[1221,1]]},"1204":{"position":[[486,2]]},"1213":{"position":[[705,2]]},"1243":{"position":[[344,1],[420,1]]},"1440":{"position":[[607,2],[740,1],[933,2],[1047,1]]},"1464":{"position":[[541,3],[704,3]]},"1467":{"position":[[1056,3],[1060,2],[1374,2],[1392,1],[1448,2],[1466,1],[1598,2],[1616,1],[2507,1],[2535,1],[2753,1],[2781,1]]},"1476":{"position":[[1733,3],[1758,2],[2094,2]]},"1477":{"position":[[1786,2],[1804,2],[1822,1],[1979,2],[1997,1],[2148,2],[2166,1],[2400,2],[2418,1],[2569,2],[2587,1],[4132,3],[4152,3],[4172,3],[4329,3],[4349,3],[4508,3],[4528,3],[4770,3],[4790,3],[4949,3],[4969,3]]}},"keywords":{}}],["1"",{"_index":3517,"title":{},"content":{"392":{"position":[[653,7]]},"393":{"position":[[307,7]]},"398":{"position":[[308,7]]},"417":{"position":[[2081,7],[2189,7]]},"418":{"position":[[368,7]]},"1126":{"position":[[269,7]]}},"keywords":{}}],["1.2",{"_index":5947,"title":{},"content":{"1275":{"position":[[490,3]]},"1465":{"position":[[1302,3]]},"1466":{"position":[[557,3]]}},"keywords":{}}],["1.3",{"_index":6654,"title":{},"content":{"1465":{"position":[[1569,3],[1670,3]]}},"keywords":{}}],["1.amazonaws.com",{"_index":2468,"title":{},"content":{"222":{"position":[[1011,16]]},"1322":{"position":[[1011,16]]},"1335":{"position":[[1011,16]]}},"keywords":{}}],["1.amazonaws.comssh://sshuser@198.21.98.1ssh://sshuser@198.21.98.1:22",{"_index":2447,"title":{},"content":{"221":{"position":[[692,68]]}},"keywords":{}}],["1.app.firebolt.io",{"_index":5868,"title":{},"content":{"1207":{"position":[[144,17]]}},"keywords":{}}],["1.aws.found.io:9243",{"_index":5833,"title":{},"content":{"1197":{"position":[[251,19]]}},"keywords":{}}],["1.comput",{"_index":2446,"title":{},"content":{"221":{"position":[[682,9]]},"222":{"position":[[1001,9]]},"1322":{"position":[[1001,9]]},"1335":{"position":[[1001,9]]}},"keywords":{}}],["1.ukqdmzdqvvsz.u",{"_index":4878,"title":{},"content":{"868":{"position":[[126,17]]},"880":{"position":[[142,17]]}},"keywords":{}}],["10",{"_index":1809,"title":{},"content":{"138":{"position":[[2631,3]]},"142":{"position":[[2815,3]]},"172":{"position":[[293,2]]},"236":{"position":[[1012,3]]},"295":{"position":[[512,2],[2073,2]]},"414":{"position":[[280,2]]},"415":{"position":[[540,2]]},"534":{"position":[[1083,2],[1102,2]]},"535":{"position":[[282,2]]},"556":{"position":[[1486,2],[2010,3]]},"574":{"position":[[575,2]]},"842":{"position":[[1438,2],[2841,3]]},"843":{"position":[[470,2]]},"900":{"position":[[257,2]]},"1077":{"position":[[758,3]]},"1144":{"position":[[669,3]]},"1170":{"position":[[669,3]]},"1213":{"position":[[524,3]]},"1220":{"position":[[524,3]]}},"keywords":{}}],["10.0",{"_index":4993,"title":{},"content":{"902":{"position":[[45,4]]},"914":{"position":[[45,4]]},"929":{"position":[[45,4]]}},"keywords":{}}],["100",{"_index":1406,"title":{},"content":{"98":{"position":[[387,3]]},"107":{"position":[[2824,4]]},"277":{"position":[[797,4]]},"912":{"position":[[935,3]]}},"keywords":{}}],["100,000",{"_index":4278,"title":{},"content":{"595":{"position":[[1706,7]]},"842":{"position":[[2671,7]]}},"keywords":{}}],["100.25",{"_index":2965,"title":{},"content":{"295":{"position":[[583,6]]}},"keywords":{}}],["1000",{"_index":4991,"title":{},"content":{"900":{"position":[[203,4]]}},"keywords":{}}],["1000"",{"_index":2536,"title":{},"content":{"236":{"position":[[1417,10]]}},"keywords":{}}],["10000",{"_index":2534,"title":{},"content":{"236":{"position":[[1396,5]]},"867":{"position":[[1144,5]]}},"keywords":{}}],["100000",{"_index":4803,"title":{},"content":{"843":{"position":[[739,6]]}},"keywords":{}}],["1000000",{"_index":5774,"title":{},"content":{"1170":{"position":[[977,7]]},"1220":{"position":[[654,7]]}},"keywords":{}}],["1001",{"_index":2390,"title":{},"content":{"210":{"position":[[3411,4]]}},"keywords":{}}],["100m",{"_index":2200,"title":{},"content":{"198":{"position":[[654,6]]}},"keywords":{}}],["101",{"_index":2934,"title":{},"content":{"295":{"position":[[290,3],[500,3]]}},"keywords":{}}],["102",{"_index":2941,"title":{},"content":{"295":{"position":[[336,3],[528,3]]}},"keywords":{}}],["103",{"_index":2948,"title":{},"content":{"295":{"position":[[384,3],[559,3]]}},"keywords":{}}],["10737418240",{"_index":5720,"title":{},"content":{"1144":{"position":[[657,11]]},"1170":{"position":[[657,11]]},"1213":{"position":[[512,11]]},"1220":{"position":[[512,11]]}},"keywords":{}}],["10:00:00","order_id":"4","row_id":206,"total_amount":"25.75"",{"_index":2984,"title":{},"content":{"295":{"position":[[2924,116]]}},"keywords":{}}],["10:15:00.000000"",{"_index":2381,"title":{},"content":{"210":{"position":[[3277,22]]}},"keywords":{}}],["10m",{"_index":2914,"title":{},"content":{"284":{"position":[[759,3]]}},"keywords":{}}],["10x",{"_index":2205,"title":{},"content":{"198":{"position":[[1015,3]]}},"keywords":{}}],["11",{"_index":483,"title":{},"content":{"16":{"position":[[1127,2]]},"138":{"position":[[2730,3]]},"169":{"position":[[339,2]]},"378":{"position":[[205,2]]},"852":{"position":[[280,2]]},"1317":{"position":[[310,2]]},"1341":{"position":[[310,2]]},"1352":{"position":[[310,2]]},"1432":{"position":[[310,2]]}},"keywords":{}}],["11.5",{"_index":1384,"title":{},"content":{"96":{"position":[[464,5]]}},"keywords":{}}],["111111111",{"_index":4517,"title":{},"content":{"721":{"position":[[211,9]]}},"keywords":{}}],["11:20:00","order_id":"6","row_id":208,"total_amount":"45.9"",{"_index":2989,"title":{},"content":{"295":{"position":[[3491,115]]}},"keywords":{}}],["11ee",{"_index":2701,"title":{},"content":{"253":{"position":[[1389,4]]},"313":{"position":[[1389,4]]},"316":{"position":[[373,4],[655,4],[945,4]]}},"keywords":{}}],["11ef",{"_index":2974,"title":{},"content":{"295":{"position":[[1966,4],[2246,4],[2529,4],[2814,4],[3098,4],[3381,4],[3664,4]]}},"keywords":{}}],["11g",{"_index":4845,"title":{},"content":{"862":{"position":[[8,3]]},"874":{"position":[[8,3]]}},"keywords":{}}],["12",{"_index":1834,"title":{},"content":{"146":{"position":[[305,2]]},"149":{"position":[[314,2]]},"152":{"position":[[321,2]]},"1172":{"position":[[822,3]]},"1222":{"position":[[822,3]]},"1359":{"position":[[310,2]]}},"keywords":{}}],["12/schema"",{"_index":2287,"title":{},"content":{"210":{"position":[[907,16]]}},"keywords":{}}],["120",{"_index":2412,"title":{},"content":{"210":{"position":[[3872,3]]},"236":{"position":[[1025,3]]},"1068":{"position":[[61,3]]}},"keywords":{}}],["123",{"_index":2938,"title":{},"content":{"295":{"position":[[323,3],[421,3]]}},"keywords":{}}],["123456.u",{"_index":5111,"title":{},"content":{"947":{"position":[[454,9],[771,9]]}},"keywords":{}}],["1234567",{"_index":4570,"title":{},"content":{"748":{"position":[[205,7]]}},"keywords":{}}],["1234567890",{"_index":4106,"title":{},"content":{"552":{"position":[[260,11],[748,10]]},"557":{"position":[[370,10]]}},"keywords":{}}],["1234567890,9876543210",{"_index":4110,"title":{},"content":{"552":{"position":[[797,21]]}},"keywords":{}}],["1253",{"_index":2767,"title":{},"content":{"253":{"position":[[3312,4]]}},"keywords":{}}],["127.0.0.1:5432",{"_index":1224,"title":{},"content":{"83":{"position":[[1028,14]]},"1138":{"position":[[390,14]]},"1139":{"position":[[146,14]]}},"keywords":{}}],["12837",{"_index":2698,"title":{},"content":{"253":{"position":[[1344,6]]},"313":{"position":[[1344,6]]}},"keywords":{}}],["12:00:00",{"_index":2961,"title":{},"content":{"295":{"position":[[543,8]]}},"keywords":{}}],["12:00:00","order_id":"2","row_id":204,"total_amount":"75.5"",{"_index":2979,"title":{},"content":{"295":{"position":[[2356,115]]}},"keywords":{}}],["12:59",{"_index":4715,"title":{},"content":{"794":{"position":[[508,5]]},"809":{"position":[[508,5]]},"825":{"position":[[508,5]]},"1286":{"position":[[565,5]]},"1301":{"position":[[565,5]]},"1325":{"position":[[565,5]]}},"keywords":{}}],["13",{"_index":3957,"title":{},"content":{"517":{"position":[[2538,3]]}},"keywords":{}}],["13"",{"_index":2371,"title":{},"content":{"210":{"position":[[3099,9]]}},"keywords":{}}],["131072",{"_index":4616,"title":{},"content":{"757":{"position":[[1657,6]]},"770":{"position":[[1657,6]]},"797":{"position":[[1657,6]]},"812":{"position":[[1657,6]]},"828":{"position":[[1657,6]]}},"keywords":{}}],["135",{"_index":2348,"title":{},"content":{"210":{"position":[[2689,4]]}},"keywords":{}}],["13:00",{"_index":4716,"title":{},"content":{"794":{"position":[[517,7]]},"809":{"position":[[517,7]]},"825":{"position":[[517,7]]},"1286":{"position":[[574,7]]},"1301":{"position":[[574,7]]},"1325":{"position":[[574,7]]}},"keywords":{}}],["13:59",{"_index":4711,"title":{},"content":{"794":{"position":[[430,5]]},"809":{"position":[[430,5]]},"825":{"position":[[430,5]]},"1286":{"position":[[487,5]]},"1301":{"position":[[487,5]]},"1325":{"position":[[487,5]]}},"keywords":{}}],["14",{"_index":2739,"title":{},"content":{"253":{"position":[[2140,3]]},"313":{"position":[[2140,3]]},"517":{"position":[[2542,2]]},"556":{"position":[[518,2]]}},"keywords":{}}],["1433",{"_index":5252,"title":{},"content":{"1043":{"position":[[1877,5]]},"1059":{"position":[[1911,5]]},"1397":{"position":[[1146,5]]},"1398":{"position":[[1149,5]]},"1400":{"position":[[243,5]]},"1409":{"position":[[1150,5]]}},"keywords":{}}],["14407",{"_index":2586,"title":{},"content":{"238":{"position":[[891,5]]}},"keywords":{}}],["14:00",{"_index":4712,"title":{},"content":{"794":{"position":[[439,7]]},"809":{"position":[[439,7]]},"825":{"position":[[439,7]]},"1286":{"position":[[496,7]]},"1301":{"position":[[496,7]]},"1325":{"position":[[496,7]]}},"keywords":{}}],["14:45:00","order_id":"5","row_id":207,"total_amount":"60.2"",{"_index":2987,"title":{},"content":{"295":{"position":[[3208,115]]}},"keywords":{}}],["14a6",{"_index":3747,"title":{},"content":{"449":{"position":[[233,4]]}},"keywords":{}}],["15",{"_index":1567,"title":{},"content":{"110":{"position":[[171,2],[268,2]]},"146":{"position":[[699,2]]},"149":{"position":[[672,2]]},"152":{"position":[[675,2]]},"375":{"position":[[181,2]]},"377":{"position":[[602,2]]},"1452":{"position":[[2500,2]]}},"keywords":{}}],["15234",{"_index":2388,"title":{},"content":{"210":{"position":[[3388,6]]}},"keywords":{}}],["1536",{"_index":5943,"title":{},"content":{"1274":{"position":[[318,5]]}},"keywords":{}}],["15:30:00",{"_index":2964,"title":{},"content":{"295":{"position":[[574,8]]}},"keywords":{}}],["15:30:00","order_id":"3","row_id":205,"total_amount":"100.25"",{"_index":2982,"title":{},"content":{"295":{"position":[[2639,117]]}},"keywords":{}}],["15m",{"_index":46,"title":{},"content":{"1":{"position":[[579,3]]},"1452":{"position":[[2454,3]]},"1453":{"position":[[449,4]]}},"keywords":{}}],["16",{"_index":978,"title":{},"content":{"66":{"position":[[694,2]]},"1172":{"position":[[905,3]]},"1222":{"position":[[905,3]]}},"keywords":{}}],["16.2",{"_index":2587,"title":{},"content":{"238":{"position":[[954,6]]}},"keywords":{}}],["168",{"_index":4676,"title":{},"content":{"767":{"position":[[2371,5]]},"792":{"position":[[2352,5]]},"824":{"position":[[2483,5]]}},"keywords":{}}],["17",{"_index":4516,"title":{},"content":{"720":{"position":[[714,3]]}},"keywords":{}}],["17"",{"_index":1388,"title":{},"content":{"96":{"position":[[639,9]]},"172":{"position":[[296,9]]},"414":{"position":[[283,9]]},"415":{"position":[[543,9]]}},"keywords":{}}],["1712591533",{"_index":2754,"title":{},"content":{"253":{"position":[[2790,11]]},"313":{"position":[[2790,11]]}},"keywords":{}}],["1739808000000",{"_index":2365,"title":{},"content":{"210":{"position":[[3000,14]]}},"keywords":{}}],["1739894400000",{"_index":2410,"title":{},"content":{"210":{"position":[[3823,13]]}},"keywords":{}}],["17:00",{"_index":6528,"title":{},"content":{"1452":{"position":[[1134,8],[3648,5]]}},"keywords":{}}],["17t16:45:31z"",{"_index":1382,"title":{},"content":{"96":{"position":[[420,19]]}},"keywords":{}}],["18","edits_this_day":3,"user":"wmrapids"",{"_index":2085,"title":{},"content":{"183":{"position":[[4191,76]]}},"keywords":{}}],["18t00:00:00z",{"_index":3642,"title":{},"content":{"425":{"position":[[183,12]]},"686":{"position":[[220,12]]},"1078":{"position":[[179,12]]}},"keywords":{}}],["198",{"_index":2443,"title":{},"content":{"221":{"position":[[672,3]]},"222":{"position":[[991,3]]},"1322":{"position":[[991,3]]},"1335":{"position":[[991,3]]}},"keywords":{}}],["1d",{"_index":2915,"title":{},"content":{"284":{"position":[[767,3]]}},"keywords":{}}],["1ec69e2de187b7720fb864a8cd6d50bb69cc7f26",{"_index":142,"title":{},"content":{"3":{"position":[[924,40]]}},"keywords":{}}],["1ec69e2de187b7720fb864a8cd6d50bb69cc7f26.gz",{"_index":126,"title":{},"content":{"3":{"position":[[554,43]]}},"keywords":{}}],["1h",{"_index":2912,"title":{},"content":{"284":{"position":[[591,2]]},"1471":{"position":[[875,2]]}},"keywords":{}}],["1nkuyiqdjzospilz4abpf+a+myjounl1wjbaowkdm6acvt1j9bkw5mrcly+pgtv",{"_index":1250,"title":{},"content":{"83":{"position":[[2027,64]]},"371":{"position":[[946,64]]},"1139":{"position":[[833,64]]}},"keywords":{}}],["1st",{"_index":3955,"title":{},"content":{"517":{"position":[[2460,3]]}},"keywords":{}}],["2",{"_index":929,"title":{"239":{"position":[[5,2]]},"250":{"position":[[0,2]]},"943":{"position":[[0,2]]},"1007":{"position":[[32,2]]}},"content":{"61":{"position":[[1101,4],[1211,2]]},"81":{"position":[[1291,2]]},"83":{"position":[[1472,2]]},"107":{"position":[[917,3],[1009,4]]},"114":{"position":[[429,2]]},"115":{"position":[[851,2],[854,1]]},"121":{"position":[[1402,2]]},"129":{"position":[[813,2],[1230,1]]},"133":{"position":[[460,2]]},"138":{"position":[[208,2]]},"141":{"position":[[518,2]]},"142":{"position":[[321,2]]},"146":{"position":[[37,2]]},"149":{"position":[[40,2]]},"150":{"position":[[47,2]]},"152":{"position":[[45,2]]},"164":{"position":[[566,2],[578,1],[2073,3],[2097,2],[2115,3],[2155,3]]},"210":{"position":[[3795,2]]},"230":{"position":[[1205,1]]},"238":{"position":[[1181,2]]},"240":{"position":[[3363,1],[3412,1]]},"295":{"position":[[526,1],[1270,1]]},"371":{"position":[[391,2]]},"409":{"position":[[169,1]]},"578":{"position":[[219,1]]},"590":{"position":[[588,1]]},"859":{"position":[[666,1]]},"1123":{"position":[[43,1],[714,1]]},"1139":{"position":[[278,2]]},"1145":{"position":[[244,1]]},"1152":{"position":[[360,1]]},"1163":{"position":[[254,1]]},"1171":{"position":[[248,1]]},"1440":{"position":[[617,1],[777,2],[795,2],[943,1],[1098,2],[1407,2]]},"1459":{"position":[[1227,2],[1241,1],[1286,1],[1298,1]]},"1464":{"position":[[545,2],[708,2]]},"1467":{"position":[[1098,3],[1102,2],[1105,2],[1208,2],[1580,2],[2599,1],[2627,1],[2809,1]]},"1476":{"position":[[1810,3],[1835,2],[2218,2]]},"1477":{"position":[[2130,2],[3456,1],[3738,1],[4488,3]]}},"keywords":{}}],["2).jpg",{"_index":2711,"title":{},"content":{"253":{"position":[[1532,8]]},"313":{"position":[[1532,8]]}},"keywords":{}}],["2).jpg</a>",{"_index":2748,"title":{},"content":{"253":{"position":[[2550,16]]},"313":{"position":[[2550,16]]}},"keywords":{}}],["2).jpg\\">file:jeton",{"_index":2747,"title":{},"content":{"253":{"position":[[2476,28]]},"313":{"position":[[2476,28]]}},"keywords":{}}],["2.aws.neon.tech/dbname?sslmode=requir",{"_index":5112,"title":{},"content":{"947":{"position":[[469,38]]}},"keywords":{}}],["2.aws.neon.tech:5432us",{"_index":5115,"title":{},"content":{"947":{"position":[[786,25]]}},"keywords":{}}],["2.rds.amazonaws.com:1521",{"_index":4879,"title":{},"content":{"868":{"position":[[149,24]]}},"keywords":{}}],["2.rds.amazonaws.com:1521/orcl"",{"_index":4922,"title":{},"content":{"880":{"position":[[165,35]]}},"keywords":{}}],["2.redshift.amazonaws.com"",{"_index":3548,"title":{},"content":{"403":{"position":[[155,30]]}},"keywords":{}}],["2.redshift.amazonaws.com:5439",{"_index":5743,"title":{},"content":{"1151":{"position":[[156,29]]}},"keywords":{}}],["2.redshift.amazonaws.com:5439"",{"_index":5748,"title":{},"content":{"1152":{"position":[[179,35]]}},"keywords":{}}],["20",{"_index":3442,"title":{},"content":{"374":{"position":[[255,2],[332,3]]},"379":{"position":[[30,2],[133,2]]},"517":{"position":[[2547,3]]},"843":{"position":[[370,2]]}},"keywords":{}}],["200",{"_index":1408,"title":{},"content":{"98":{"position":[[462,5]]}},"keywords":{}}],["2016",{"_index":3436,"title":{},"content":{"373":{"position":[[276,5],[382,5]]},"377":{"position":[[1547,4]]}},"keywords":{}}],["2017",{"_index":3766,"title":{},"content":{"455":{"position":[[222,4]]},"461":{"position":[[177,4]]},"467":{"position":[[141,4]]},"556":{"position":[[1723,4],[2097,4]]},"611":{"position":[[820,4],[1087,4]]},"632":{"position":[[153,4]]},"654":{"position":[[484,4]]},"671":{"position":[[217,4]]},"685":{"position":[[364,4]]},"701":{"position":[[146,4]]},"707":{"position":[[146,4]]},"742":{"position":[[178,4]]},"748":{"position":[[311,4]]},"886":{"position":[[237,4]]},"960":{"position":[[152,4]]},"983":{"position":[[146,4]]},"1016":{"position":[[264,4]]},"1029":{"position":[[123,4]]},"1039":{"position":[[211,4]]},"1049":{"position":[[137,4]]},"1057":{"position":[[140,4]]},"1070":{"position":[[691,4]]},"1076":{"position":[[653,4]]},"1114":{"position":[[185,4]]},"1372":{"position":[[116,4]]},"1396":{"position":[[116,4]]},"1406":{"position":[[116,4]]}},"keywords":{}}],["2018",{"_index":5209,"title":{},"content":{"1029":{"position":[[154,4]]}},"keywords":{}}],["2019",{"_index":4572,"title":{},"content":{"748":{"position":[[342,4]]}},"keywords":{}}],["2020",{"_index":3744,"title":{},"content":{"448":{"position":[[1018,4]]},"449":{"position":[[371,4]]},"557":{"position":[[444,4]]},"632":{"position":[[184,4]]},"720":{"position":[[706,4]]},"1086":{"position":[[349,4]]}},"keywords":{}}],["2021",{"_index":3640,"title":{},"content":{"424":{"position":[[240,4]]},"454":{"position":[[430,4]]},"460":{"position":[[244,4]]},"631":{"position":[[244,4],[383,4]]},"700":{"position":[[192,4]]},"706":{"position":[[192,4]]},"741":{"position":[[307,4]]},"860":{"position":[[236,4]]},"885":{"position":[[493,4]]},"1015":{"position":[[306,4]]},"1028":{"position":[[115,4],[253,4]]},"1071":{"position":[[284,4]]},"1113":{"position":[[244,4]]}},"keywords":{}}],["2022",{"_index":2125,"title":{},"content":{"190":{"position":[[1079,4],[1283,5]]},"378":{"position":[[200,4]]},"388":{"position":[[408,4]]},"425":{"position":[[175,4]]},"497":{"position":[[165,4]]},"518":{"position":[[259,4],[432,4]]},"527":{"position":[[308,4]]},"535":{"position":[[322,4]]},"557":{"position":[[421,4]]},"575":{"position":[[208,4]]},"612":{"position":[[336,4]]},"686":{"position":[[212,4]]},"721":{"position":[[295,4]]},"1010":{"position":[[321,4]]},"1077":{"position":[[509,4]]},"1078":{"position":[[171,4]]},"1086":{"position":[[302,4]]},"1108":{"position":[[194,4]]},"1134":{"position":[[214,4]]},"1317":{"position":[[305,4]]},"1341":{"position":[[305,4]]},"1352":{"position":[[305,4]]},"1359":{"position":[[305,4]]},"1432":{"position":[[305,4]]}},"keywords":{}}],["2023",{"_index":1350,"title":{},"content":{"94":{"position":[[1872,4],[2237,4]]},"120":{"position":[[1424,4],[1789,4]]},"526":{"position":[[82,4]]},"586":{"position":[[272,4]]},"606":{"position":[[483,5]]},"1201":{"position":[[305,4]]},"1293":{"position":[[305,4]]},"1307":{"position":[[305,4]]},"1330":{"position":[[305,4]]},"1380":{"position":[[305,4]]},"1404":{"position":[[305,4]]},"1415":{"position":[[305,4]]},"1480":{"position":[[1130,4],[1495,4]]}},"keywords":{}}],["2024",{"_index":2383,"title":{},"content":{"210":{"position":[[3318,5]]},"295":{"position":[[504,4],[532,4],[563,4]]}},"keywords":{}}],["2048",{"_index":6367,"title":{},"content":{"1384":{"position":[[286,4]]}},"keywords":{}}],["21",{"_index":2444,"title":{},"content":{"221":{"position":[[676,2]]},"222":{"position":[[995,2]]},"517":{"position":[[2551,2]]},"1201":{"position":[[313,3]]},"1293":{"position":[[313,3]]},"1307":{"position":[[313,3]]},"1322":{"position":[[995,2]]},"1330":{"position":[[313,3]]},"1335":{"position":[[995,2]]}},"keywords":{}}],["22",{"_index":2407,"title":{},"content":{"210":{"position":[[3746,3]]},"221":{"position":[[790,3],[907,3]]},"225":{"position":[[234,3],[351,3]]}},"keywords":{}}],["2344535",{"_index":4747,"title":{},"content":{"842":{"position":[[121,8]]},"851":{"position":[[98,8]]}},"keywords":{}}],["2344535_sb1",{"_index":4748,"title":{},"content":{"842":{"position":[[151,12]]},"851":{"position":[[128,12]]}},"keywords":{}}],["2345678",{"_index":4735,"title":{},"content":{"840":{"position":[[356,8]]},"849":{"position":[[299,8]]}},"keywords":{}}],["2345678_sb2",{"_index":4737,"title":{},"content":{"840":{"position":[[408,12]]},"849":{"position":[[351,12]]}},"keywords":{}}],["23t01:00:00z",{"_index":1351,"title":{},"content":{"94":{"position":[[1880,12]]},"120":{"position":[[1432,12]]},"1480":{"position":[[1138,12]]}},"keywords":{}}],["23t02:00:00z",{"_index":1354,"title":{},"content":{"94":{"position":[[2245,12]]},"120":{"position":[[1797,12]]},"1480":{"position":[[1503,12]]}},"keywords":{}}],["24",{"_index":1835,"title":{},"content":{"146":{"position":[[315,2]]},"149":{"position":[[324,2]]},"152":{"position":[[331,2]]},"209":{"position":[[1709,2]]},"279":{"position":[[320,2]]},"785":{"position":[[921,2]]},"821":{"position":[[870,2]]},"1452":{"position":[[3070,2]]}},"keywords":{}}],["24/7",{"_index":5221,"title":{},"content":{"1036":{"position":[[46,4]]},"1452":{"position":[[64,4],[530,5],[2331,5]]}},"keywords":{}}],["2468434138",{"_index":2713,"title":{},"content":{"253":{"position":[[1582,11]]},"313":{"position":[[1582,11]]}},"keywords":{}}],["24h",{"_index":2859,"title":{},"content":{"279":{"position":[[1658,3]]}},"keywords":{}}],["25",{"_index":3973,"title":{},"content":{"517":{"position":[[3744,2]]},"556":{"position":[[1731,3],[2105,3]]},"611":{"position":[[828,3],[1095,3]]}},"keywords":{}}],["256",{"_index":3658,"title":{},"content":{"429":{"position":[[475,4]]}},"keywords":{}}],["258@help",{"_index":1191,"title":{},"content":{"82":{"position":[[3349,11]]},"171":{"position":[[227,11]]}},"keywords":{}}],["2592000",{"_index":4576,"title":{},"content":{"750":{"position":[[175,8]]},"752":{"position":[[984,8]]},"753":{"position":[[706,8]]},"764":{"position":[[883,7]]},"766":{"position":[[175,8]]},"777":{"position":[[883,7]]},"789":{"position":[[209,8]]},"791":{"position":[[1018,8]]},"793":{"position":[[666,8]]},"804":{"position":[[881,7]]},"807":{"position":[[209,8]]},"808":{"position":[[681,8]]},"819":{"position":[[881,7]]},"823":{"position":[[209,8]]},"835":{"position":[[881,7]]}},"keywords":{}}],["25t00:00:00z",{"_index":3641,"title":{},"content":{"424":{"position":[[248,13]]},"454":{"position":[[438,13]]},"455":{"position":[[230,12]]},"460":{"position":[[252,13]]},"461":{"position":[[185,12]]},"467":{"position":[[149,12]]},"631":{"position":[[252,13],[391,13]]},"632":{"position":[[161,12],[192,12]]},"654":{"position":[[492,13]]},"671":{"position":[[225,12]]},"685":{"position":[[372,13]]},"700":{"position":[[200,13]]},"701":{"position":[[154,12]]},"706":{"position":[[200,13]]},"707":{"position":[[154,12]]},"741":{"position":[[315,13]]},"742":{"position":[[186,12]]},"748":{"position":[[319,12],[350,12]]},"860":{"position":[[244,12]]},"885":{"position":[[501,13]]},"886":{"position":[[245,12]]},"960":{"position":[[160,12]]},"983":{"position":[[154,12]]},"1015":{"position":[[314,13]]},"1016":{"position":[[272,12]]},"1028":{"position":[[123,13],[261,13]]},"1029":{"position":[[131,12],[162,12]]},"1070":{"position":[[699,13]]},"1071":{"position":[[292,12]]},"1076":{"position":[[661,13]]},"1113":{"position":[[252,13]]},"1114":{"position":[[193,12]]}},"keywords":{}}],["2637",{"_index":2589,"title":{},"content":{"238":{"position":[[1246,4]]}},"keywords":{}}],["2642",{"_index":2590,"title":{},"content":{"238":{"position":[[1315,4]]}},"keywords":{}}],["27",{"_index":3958,"title":{},"content":{"517":{"position":[[2556,3]]}},"keywords":{}}],["273219.iam.gserviceaccount.com",{"_index":1193,"title":{},"content":{"82":{"position":[[3369,30]]},"171":{"position":[[247,30]]}},"keywords":{}}],["28",{"_index":3959,"title":{},"content":{"517":{"position":[[2564,2],[3182,2]]}},"keywords":{}}],["3",{"_index":930,"title":{"240":{"position":[[5,2]]},"944":{"position":[[0,2]]}},"content":{"61":{"position":[[1150,4],[1248,2]]},"81":{"position":[[1484,2]]},"98":{"position":[[584,2],[812,4]]},"121":{"position":[[1462,2]]},"129":{"position":[[947,2],[1246,2]]},"130":{"position":[[310,2]]},"132":{"position":[[560,2]]},"138":{"position":[[428,2]]},"141":{"position":[[741,2]]},"142":{"position":[[549,2]]},"146":{"position":[[326,2]]},"149":{"position":[[335,2]]},"152":{"position":[[342,2]]},"164":{"position":[[2077,3],[2100,2],[2123,3],[2139,3],[2159,3]]},"203":{"position":[[399,1]]},"210":{"position":[[3149,2]]},"228":{"position":[[1431,1]]},"240":{"position":[[319,2]]},"253":{"position":[[592,2]]},"295":{"position":[[557,1]]},"309":{"position":[[2514,1]]},"313":{"position":[[592,2]]},"409":{"position":[[219,1]]},"517":{"position":[[2572,2]]},"560":{"position":[[279,1]]},"842":{"position":[[260,2],[310,1]]},"843":{"position":[[298,1]]},"1077":{"position":[[566,2],[629,2]]},"1275":{"position":[[475,1]]},"1440":{"position":[[610,2],[936,2]]},"1459":{"position":[[1232,2],[1245,2],[1290,1],[1294,1]]},"1464":{"position":[[583,3],[711,2]]},"1467":{"position":[[1201,3],[1205,2]]},"1476":{"position":[[1887,3],[1912,2]]},"1477":{"position":[[2551,2],[4929,3]]}},"keywords":{}}],["3.5+wordpress",{"_index":5345,"title":{},"content":{"1089":{"position":[[73,13]]}},"keywords":{}}],["3.7.1",{"_index":1185,"title":{},"content":{"82":{"position":[[2732,5],[4870,5]]}},"keywords":{}}],["3.8",{"_index":6653,"title":{},"content":{"1465":{"position":[[1403,3]]},"1466":{"position":[[652,3]]}},"keywords":{}}],["30",{"_index":1973,"title":{},"content":{"168":{"position":[[264,2]]},"180":{"position":[[645,2]]},"188":{"position":[[191,2]]},"210":{"position":[[3274,2]]},"240":{"position":[[3078,2]]},"344":{"position":[[396,3]]},"517":{"position":[[2569,2]]},"534":{"position":[[1090,3]]},"748":{"position":[[392,2]]},"750":{"position":[[167,2]]},"752":{"position":[[908,2]]},"766":{"position":[[167,2]]},"789":{"position":[[201,2]]},"791":{"position":[[942,2]]},"807":{"position":[[201,2]]},"823":{"position":[[201,2]]},"872":{"position":[[36,2]]},"912":{"position":[[961,2]]},"1186":{"position":[[596,2]]},"1317":{"position":[[313,3]]},"1341":{"position":[[313,3]]},"1352":{"position":[[313,3]]},"1432":{"position":[[313,3]]},"1452":{"position":[[548,2],[2534,2]]}},"keywords":{}}],["300",{"_index":4989,"title":{},"content":{"900":{"position":[[128,3]]}},"keywords":{}}],["30m",{"_index":5233,"title":{},"content":{"1037":{"position":[[347,3]]}},"keywords":{}}],["30th",{"_index":3956,"title":{},"content":{"517":{"position":[[2476,5]]}},"keywords":{}}],["31t00:00:00option",{"_index":4015,"title":{},"content":{"526":{"position":[[90,21]]}},"keywords":{}}],["32",{"_index":4614,"title":{},"content":{"757":{"position":[[1249,2]]},"770":{"position":[[1249,2]]},"797":{"position":[[1249,2]]},"812":{"position":[[1249,2]]},"828":{"position":[[1249,2]]},"867":{"position":[[1957,2]]},"1476":{"position":[[490,3],[666,3]]}},"keywords":{}}],["3210",{"_index":2947,"title":{},"content":{"295":{"position":[[379,4]]}},"keywords":{}}],["3306",{"_index":4601,"title":{},"content":{"753":{"position":[[1611,6]]},"793":{"position":[[1634,6]]},"808":{"position":[[1585,5]]},"1267":{"position":[[153,5]]},"1285":{"position":[[243,5]]},"1289":{"position":[[1335,4],[1593,5],[1729,6]]},"1298":{"position":[[1167,4]]},"1300":{"position":[[243,5]]},"1303":{"position":[[1046,4],[1197,5],[1707,5]]},"1322":{"position":[[1554,4]]},"1324":{"position":[[243,5]]},"1376":{"position":[[243,5]]},"1411":{"position":[[243,5]]}},"keywords":{}}],["3339",{"_index":3591,"title":{},"content":{"417":{"position":[[391,4]]},"438":{"position":[[391,4]]},"502":{"position":[[851,4]]},"545":{"position":[[391,4]]},"1021":{"position":[[1428,4]]}},"keywords":{}}],["34",{"_index":2404,"title":{},"content":{"210":{"position":[[3671,3]]}},"keywords":{}}],["34.121.207.12835.226.75.13534.68.62.148",{"_index":3216,"title":{},"content":{"335":{"position":[[133,39]]}},"keywords":{}}],["360",{"_index":4210,"title":{},"content":{"577":{"position":[[296,3]]},"588":{"position":[[291,3]]}},"keywords":{}}],["364",{"_index":4222,"title":{},"content":{"584":{"position":[[1280,4]]}},"keywords":{}}],["365",{"_index":4523,"title":{},"content":{"724":{"position":[[511,3]]}},"keywords":{}}],["3856",{"_index":2400,"title":{},"content":{"210":{"position":[[3621,5]]}},"keywords":{}}],["3g",{"_index":506,"title":{},"content":{"17":{"position":[[998,2]]}},"keywords":{}}],["4",{"_index":1616,"title":{"579":{"position":[[17,1]]},"945":{"position":[[0,2]]}},"content":{"114":{"position":[[403,1],[408,1]]},"115":{"position":[[842,1]]},"132":{"position":[[539,2]]},"138":{"position":[[618,2]]},"141":{"position":[[864,2]]},"142":{"position":[[1075,2]]},"146":{"position":[[534,2]]},"149":{"position":[[507,2]]},"152":{"position":[[510,2]]},"164":{"position":[[2081,2],[2103,2],[2127,2],[2143,2],[2163,2]]},"240":{"position":[[396,2]]},"309":{"position":[[3121,1]]},"364":{"position":[[1453,1]]},"409":{"position":[[274,1]]},"581":{"position":[[256,1]]},"582":{"position":[[138,1]]},"583":{"position":[[257,1]]},"1157":{"position":[[48,1],[119,1]]},"1162":{"position":[[718,1]]},"1440":{"position":[[648,2],[699,1],[994,2]]},"1452":{"position":[[1781,1],[1880,1],[1973,1],[2989,1]]},"1459":{"position":[[1237,1],[1250,2]]},"1476":{"position":[[1964,3],[1989,2],[2117,2]]}},"keywords":{}}],["4.2",{"_index":2398,"title":{},"content":{"210":{"position":[[3592,4]]}},"keywords":{}}],["4.4+pretti",{"_index":5346,"title":{},"content":{"1089":{"position":[[87,10]]}},"keywords":{}}],["400kb",{"_index":5439,"title":{},"content":{"1123":{"position":[[388,5]]}},"keywords":{}}],["401",{"_index":4524,"title":{},"content":{"724":{"position":[[563,3]]}},"keywords":{}}],["4096",{"_index":3407,"title":{},"content":{"370":{"position":[[890,4]]},"907":{"position":[[673,4]]},"923":{"position":[[673,4]]},"934":{"position":[[673,4]]},"950":{"position":[[673,4]]},"968":{"position":[[673,4]]},"1045":{"position":[[658,4]]},"1053":{"position":[[658,4]]},"1061":{"position":[[658,4]]}},"keywords":{}}],["42",{"_index":1429,"title":{},"content":{"99":{"position":[[594,4]]},"1476":{"position":[[548,3]]}},"keywords":{}}],["4262",{"_index":2721,"title":{},"content":{"253":{"position":[[1755,4]]},"313":{"position":[[1755,4]]}},"keywords":{}}],["443",{"_index":5808,"title":{},"content":{"1188":{"position":[[147,3]]}},"keywords":{}}],["456",{"_index":2939,"title":{},"content":{"295":{"position":[[327,3]]}},"keywords":{}}],["4567",{"_index":2953,"title":{},"content":{"295":{"position":[[425,4]]}},"keywords":{}}],["45e1",{"_index":2729,"title":{},"content":{"253":{"position":[[1887,4]]},"313":{"position":[[1887,4]]}},"keywords":{}}],["48",{"_index":4211,"title":{},"content":{"578":{"position":[[63,2]]}},"keywords":{}}],["49ae",{"_index":3748,"title":{},"content":{"449":{"position":[[238,4]]}},"keywords":{}}],["4eac",{"_index":2720,"title":{},"content":{"253":{"position":[[1750,4]]},"313":{"position":[[1750,4]]}},"keywords":{}}],["4fdf95f7b91a"",{"_index":2703,"title":{},"content":{"253":{"position":[[1399,18]]},"313":{"position":[[1399,18]]}},"keywords":{}}],["4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"adoption","user":"justbecool"",{"_index":3091,"title":{},"content":{"316":{"position":[[383,147]]}},"keywords":{}}],["4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"islandia",{"_index":3095,"title":{},"content":{"316":{"position":[[955,101]]}},"keywords":{}}],["4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"wikipedia:teahouse","user":"subanark"",{"_index":3093,"title":{},"content":{"316":{"position":[[665,155]]}},"keywords":{}}],["4m",{"_index":3245,"title":{},"content":{"344":{"position":[[416,2]]}},"keywords":{}}],["5",{"_index":1614,"title":{},"content":{"114":{"position":[[347,2],[362,1],[367,1]]},"115":{"position":[[815,2],[818,1],[823,1]]},"132":{"position":[[519,2]]},"138":{"position":[[1106,2]]},"141":{"position":[[1705,2]]},"142":{"position":[[1717,2]]},"146":{"position":[[637,2]]},"149":{"position":[[610,2]]},"152":{"position":[[613,2]]},"164":{"position":[[2084,2],[2106,2],[2130,2],[2146,2],[2166,3]]},"198":{"position":[[1013,1]]},"234":{"position":[[225,1]]},"240":{"position":[[2089,2]]},"296":{"position":[[4046,1],[4061,1]]},"315":{"position":[[525,1],[540,1]]},"343":{"position":[[757,1]]},"387":{"position":[[1061,1]]},"388":{"position":[[370,1]]},"418":{"position":[[242,1]]},"439":{"position":[[499,1]]},"517":{"position":[[2513,1]]},"546":{"position":[[979,1]]},"638":{"position":[[271,1]]},"642":{"position":[[232,1]]},"747":{"position":[[385,1]]},"748":{"position":[[233,1]]},"842":{"position":[[1699,1]]},"912":{"position":[[882,1]]},"1022":{"position":[[308,1]]},"1036":{"position":[[307,1]]},"1465":{"position":[[1251,1]]},"1466":{"position":[[519,1]]},"1476":{"position":[[2142,3],[2193,3]]}},"keywords":{}}],["5.7",{"_index":5966,"title":{},"content":{"1281":{"position":[[117,3]]},"1295":{"position":[[117,3]]},"1319":{"position":[[117,3]]}},"keywords":{}}],["5.tcp.eu.ngrok.io",{"_index":2585,"title":{},"content":{"238":{"position":[[870,17]]}},"keywords":{}}],["5.tcp.eu.ngrok.io:14407",{"_index":2579,"title":{},"content":{"238":{"position":[[434,23]]}},"keywords":{}}],["50",{"_index":2959,"title":{},"content":{"295":{"position":[[523,2]]},"509":{"position":[[296,2]]},"517":{"position":[[3445,2]]}},"keywords":{}}],["50,000",{"_index":4892,"title":{},"content":{"870":{"position":[[240,6]]}},"keywords":{}}],["500",{"_index":5272,"title":{},"content":{"1068":{"position":[[45,3]]}},"keywords":{}}],["50000",{"_index":4867,"title":{},"content":{"867":{"position":[[982,5],[1255,5]]},"868":{"position":[[289,5]]},"879":{"position":[[1139,5]]}},"keywords":{}}],["5008568732",{"_index":2724,"title":{},"content":{"253":{"position":[[1805,11]]},"313":{"position":[[1805,11]]}},"keywords":{}}],["50gb",{"_index":5063,"title":{},"content":{"922":{"position":[[2322,4]]}},"keywords":{}}],["50k",{"_index":4704,"title":{},"content":{"789":{"position":[[832,3]]}},"keywords":{}}],["50mb/sec",{"_index":2204,"title":{},"content":{"198":{"position":[[952,8]]}},"keywords":{}}],["512",{"_index":53,"title":{},"content":{"1":{"position":[[714,3]]},"429":{"position":[[495,4]]},"433":{"position":[[266,3]]},"1170":{"position":[[1131,4]]},"1220":{"position":[[808,4]]}},"keywords":{}}],["512mb",{"_index":51,"title":{},"content":{"1":{"position":[[672,6]]}},"keywords":{}}],["536870912",{"_index":5776,"title":{},"content":{"1170":{"position":[[1121,9]]},"1220":{"position":[[798,9]]}},"keywords":{}}],["5432",{"_index":2531,"title":{},"content":{"236":{"position":[[1259,4]]},"238":{"position":[[236,4],[279,4]]},"919":{"position":[[2541,6]]},"931":{"position":[[2064,5]]},"1310":{"position":[[656,4],[914,5]]},"1313":{"position":[[234,5]]},"1335":{"position":[[1202,4]]},"1337":{"position":[[234,5]]},"1346":{"position":[[1168,4],[1319,5]]},"1348":{"position":[[234,5]]}},"keywords":{}}],["5432).timescaledb",{"_index":6255,"title":{},"content":{"1310":{"position":[[1050,18]]}},"keywords":{}}],["5439",{"_index":3549,"title":{},"content":{"403":{"position":[[192,4]]}},"keywords":{}}],["555",{"_index":2952,"title":{},"content":{"295":{"position":[[417,3]]}},"keywords":{}}],["5954",{"_index":989,"title":{},"content":{"66":{"position":[[960,5]]}},"keywords":{}}],["5954"",{"_index":992,"title":{},"content":{"66":{"position":[[999,11]]}},"keywords":{}}],["5:00pm",{"_index":6548,"title":{},"content":{"1452":{"position":[[3494,6]]}},"keywords":{}}],["5kemoppu80otbyzlgpn0ivp/6xw1e5fcrp2ofqkzyxvwu5txkiakjyrruuiiztza",{"_index":1248,"title":{},"content":{"83":{"position":[[1897,64]]},"371":{"position":[[816,64]]},"1139":{"position":[[703,64]]}},"keywords":{}}],["5m",{"_index":862,"title":{},"content":{"56":{"position":[[2672,2]]},"1144":{"position":[[480,2]]},"1145":{"position":[[262,2]]},"1170":{"position":[[480,2]]},"1171":{"position":[[266,2]]},"1213":{"position":[[335,2]]},"1214":{"position":[[202,2]]},"1220":{"position":[[335,2]]},"1221":{"position":[[206,2]]}},"keywords":{}}],["5s",{"_index":2520,"title":{},"content":{"236":{"position":[[1000,2]]}},"keywords":{}}],["6",{"_index":1618,"title":{},"content":{"114":{"position":[[444,1],[449,1]]},"115":{"position":[[859,1]]},"132":{"position":[[679,2]]},"138":{"position":[[1700,2]]},"141":{"position":[[1831,2]]},"142":{"position":[[1853,2]]},"146":{"position":[[296,1],[747,2]]},"149":{"position":[[305,1],[720,2]]},"152":{"position":[[312,1],[723,2]]},"228":{"position":[[1441,1]]},"240":{"position":[[2207,2]]},"1077":{"position":[[536,2]]},"1440":{"position":[[728,2],[1035,2]]}},"keywords":{}}],["60",{"_index":2155,"title":{},"content":{"191":{"position":[[1570,2]]},"240":{"position":[[1531,2]]},"387":{"position":[[1155,2],[1282,2]]},"388":{"position":[[393,2]]},"718":{"position":[[310,2]]},"724":{"position":[[379,2]]},"1032":{"position":[[1172,2]]},"1383":{"position":[[1518,2]]},"1388":{"position":[[186,2],[429,2],[707,3]]}},"keywords":{}}],["63fa",{"_index":2728,"title":{},"content":{"253":{"position":[[1882,4]]},"313":{"position":[[1882,4]]}},"keywords":{}}],["64",{"_index":1976,"title":{},"content":{"169":{"position":[[297,3]]}},"keywords":{}}],["654",{"_index":2946,"title":{},"content":{"295":{"position":[[375,3]]}},"keywords":{}}],["671580/role",{"_index":5091,"title":{},"content":{"943":{"position":[[1019,13]]}},"keywords":{}}],["6731de76",{"_index":3746,"title":{},"content":{"449":{"position":[[224,8]]}},"keywords":{}}],["6d9be407e4b8"},"customer_id":"101","order_date":"2024",{"_index":2975,"title":{},"content":{"295":{"position":[[1976,93],[2824,93]]}},"keywords":{}}],["6d9be407e4b8"},"customer_id":"102","order_date":"2024",{"_index":2978,"title":{},"content":{"295":{"position":[[2256,93],[3391,93]]}},"keywords":{}}],["6d9be407e4b8"},"customer_id":"103","order_date":"2024",{"_index":2981,"title":{},"content":{"295":{"position":[[2539,93],[3108,93]]}},"keywords":{}}],["6d9be407e4b8"},"customer_id":"104","order_date":"2024",{"_index":2991,"title":{},"content":{"295":{"position":[[3674,93]]}},"keywords":{}}],["6eba6914391",{"_index":3750,"title":{},"content":{"449":{"position":[[248,12]]}},"keywords":{}}],["6jfat/abxesqf3ibkk8cqat5r/llem1/8ekgovbh8maqpwbw771qzhun84siud/q",{"_index":1253,"title":{},"content":{"83":{"position":[[2222,64]]},"371":{"position":[[1141,64]]},"1139":{"position":[[1028,64]]}},"keywords":{}}],["7",{"_index":1796,"title":{},"content":{"138":{"position":[[1820,2]]},"141":{"position":[[2222,2]]},"142":{"position":[[1950,2]]},"146":{"position":[[897,2]]},"149":{"position":[[870,2]]},"152":{"position":[[873,2]]},"240":{"position":[[2339,2]]},"517":{"position":[[2328,2],[2371,1]]},"557":{"position":[[206,1]]},"574":{"position":[[551,1]]},"750":{"position":[[294,1]]},"766":{"position":[[294,1]]},"767":{"position":[[1257,1],[1578,1],[2258,1]]},"789":{"position":[[328,1]]},"792":{"position":[[1553,1],[2250,1]]},"807":{"position":[[328,1]]},"823":{"position":[[328,1]]},"824":{"position":[[1323,1],[1642,1],[2372,1]]},"1016":{"position":[[250,1]]},"1077":{"position":[[825,1]]},"1114":{"position":[[223,1]]},"1440":{"position":[[732,2],[1039,2]]}},"keywords":{}}],["720h",{"_index":58,"title":{},"content":{"1":{"position":[[861,4]]}},"keywords":{}}],["7396",{"_index":6272,"title":{},"content":{"1358":{"position":[[369,4]]}},"keywords":{}}],["75.5",{"_index":2962,"title":{},"content":{"295":{"position":[[552,4]]}},"keywords":{}}],["763301/branches/br",{"_index":5089,"title":{},"content":{"943":{"position":[[989,18]]}},"keywords":{}}],["7890",{"_index":2940,"title":{},"content":{"295":{"position":[[331,4]]}},"keywords":{}}],["8",{"_index":1798,"title":{},"content":{"138":{"position":[[1902,2]]},"142":{"position":[[2326,2]]},"149":{"position":[[1137,2]]},"210":{"position":[[3177,2],[3212,1]]},"230":{"position":[[1215,1]]},"250":{"position":[[953,3]]},"418":{"position":[[224,1]]},"439":{"position":[[481,1]]},"546":{"position":[[961,1]]},"638":{"position":[[253,1]]},"909":{"position":[[48,1]]},"925":{"position":[[48,1]]},"936":{"position":[[48,1]]},"952":{"position":[[48,1]]},"970":{"position":[[48,1]]},"1022":{"position":[[290,1]]},"1196":{"position":[[635,1]]},"1452":{"position":[[1822,1]]}},"keywords":{}}],["8.0",{"_index":2406,"title":{},"content":{"210":{"position":[[3717,4]]}},"keywords":{}}],["8.0.19",{"_index":4710,"title":{},"content":{"794":{"position":[[399,6],[487,7]]},"809":{"position":[[399,6],[487,7]]},"825":{"position":[[399,6],[487,7]]},"1286":{"position":[[456,6],[544,7]]},"1301":{"position":[[456,6],[544,7]]},"1325":{"position":[[456,6],[544,7]]}},"keywords":{}}],["8.5",{"_index":2386,"title":{},"content":{"210":{"position":[[3364,4]]}},"keywords":{}}],["8000",{"_index":3438,"title":{},"content":{"374":{"position":[[22,4]]}},"keywords":{}}],["8080.u",{"_index":3862,"title":{},"content":{"488":{"position":[[102,7]]},"659":{"position":[[259,7]]},"676":{"position":[[102,7]]},"691":{"position":[[102,7]]}},"keywords":{}}],["82",{"_index":2402,"title":{},"content":{"210":{"position":[[3646,2]]}},"keywords":{}}],["8401",{"_index":2702,"title":{},"content":{"253":{"position":[[1394,4]]},"295":{"position":[[1971,4]]},"313":{"position":[[1394,4]]}},"keywords":{}}],["85bb5a33d7a5",{"_index":3718,"title":{},"content":{"439":{"position":[[207,12]]}},"keywords":{}}],["86784f1692bc"",{"_index":2731,"title":{},"content":{"253":{"position":[[1897,19]]},"313":{"position":[[1897,19]]}},"keywords":{}}],["8801",{"_index":2977,"title":{},"content":{"295":{"position":[[2251,4]]},"316":{"position":[[660,4]]}},"keywords":{}}],["89",{"_index":4960,"title":{},"content":{"897":{"position":[[196,3]]}},"keywords":{}}],["8:00:00",{"_index":2958,"title":{},"content":{"295":{"position":[[515,7]]}},"keywords":{}}],["8:00:00","order_id":"1","row_id":203,"total_amount":"50"",{"_index":2976,"title":{},"content":{"295":{"position":[[2076,112]]}},"keywords":{}}],["8c01",{"_index":2980,"title":{},"content":{"295":{"position":[[2534,4]]}},"keywords":{}}],["9",{"_index":1804,"title":{},"content":{"138":{"position":[[2266,2]]},"142":{"position":[[2709,2]]}},"keywords":{}}],["90",{"_index":3206,"title":{},"content":{"332":{"position":[[502,3],[511,2]]},"560":{"position":[[157,2]]},"1067":{"position":[[225,2]]}},"keywords":{}}],["9001",{"_index":2983,"title":{},"content":{"295":{"position":[[2819,4]]},"316":{"position":[[950,4]]}},"keywords":{}}],["91",{"_index":2408,"title":{},"content":{"210":{"position":[[3769,2]]}},"keywords":{}}],["9401",{"_index":2985,"title":{},"content":{"295":{"position":[[3103,4]]},"316":{"position":[[378,4]]}},"keywords":{}}],["97bc",{"_index":3749,"title":{},"content":{"449":{"position":[[243,4]]}},"keywords":{}}],["98",{"_index":2445,"title":{},"content":{"221":{"position":[[679,2]]},"222":{"position":[[998,2]]},"1322":{"position":[[998,2]]},"1335":{"position":[[998,2]]}},"keywords":{}}],["9801",{"_index":2988,"title":{},"content":{"295":{"position":[[3386,4]]}},"keywords":{}}],["987",{"_index":2945,"title":{},"content":{"295":{"position":[[371,3]]}},"keywords":{}}],["9876543210",{"_index":4107,"title":{},"content":{"552":{"position":[[563,11],[771,10]]}},"keywords":{}}],["9:00am",{"_index":6547,"title":{},"content":{"1452":{"position":[[3483,6]]}},"keywords":{}}],["9:30:00","order_id":"7","row_id":209,"total_amount":"80.1"",{"_index":2992,"title":{},"content":{"295":{"position":[[3774,114]]}},"keywords":{}}],["9c01",{"_index":2990,"title":{},"content":{"295":{"position":[[3669,4]]}},"keywords":{}}],["_",{"_index":1343,"title":{},"content":{"94":{"position":[[1196,3]]}},"keywords":{}}],["_btv1b10405460g_(1_of_2).jpg\\"",{"_index":2745,"title":{},"content":{"253":{"position":[[2370,35]]},"313":{"position":[[2370,35]]}},"keywords":{}}],["_extern",{"_index":5864,"title":{},"content":{"1206":{"position":[[1003,9]]}},"keywords":{}}],["_id",{"_index":1957,"title":{},"content":{"165":{"position":[[715,3],[992,4],[1037,4],[1071,3],[1277,3]]},"207":{"position":[[893,4],[938,4],[972,3],[1177,3],[1376,3]]},"779":{"position":[[191,3]]}},"keywords":{}}],["_meta",{"_index":994,"title":{},"content":{"67":{"position":[[5,5],[115,5],[232,5]]},"160":{"position":[[204,5]]},"314":{"position":[[1121,6]]}},"keywords":{}}],["_meta/fil",{"_index":999,"title":{},"content":{"67":{"position":[[403,11]]},"314":{"position":[[357,11],[1700,11]]}},"keywords":{}}],["_meta/offset",{"_index":1000,"title":{},"content":{"67":{"position":[[419,13]]},"314":{"position":[[371,13],[1714,13]]}},"keywords":{}}],["_meta/path",{"_index":4244,"title":{},"content":{"590":{"position":[[1029,11]]}},"keywords":{}}],["_meta/queri",{"_index":3873,"title":{},"content":{"488":{"position":[[947,14]]},"659":{"position":[[1104,14]]},"676":{"position":[[947,14]]},"691":{"position":[[947,14]]}},"keywords":{}}],["_meta/uuid",{"_index":1002,"title":{},"content":{"67":{"position":[[522,11],[539,10],[1185,10],[1373,10]]}},"keywords":{}}],["_meta/webhookid",{"_index":3890,"title":{},"content":{"492":{"position":[[107,16],[343,19]]},"660":{"position":[[518,17],[795,16]]},"665":{"position":[[107,16],[343,19]]},"680":{"position":[[107,16],[343,19]]},"695":{"position":[[107,16],[343,19]]}},"keywords":{}}],["_read.doc",{"_index":3024,"title":{},"content":{"296":{"position":[[6264,12]]}},"keywords":{}}],["_read.doc._meta.fil",{"_index":3082,"title":{},"content":{"315":{"position":[[2058,21]]}},"keywords":{}}],["_read.doc._meta.offset",{"_index":3083,"title":{},"content":{"315":{"position":[[2100,23]]}},"keywords":{}}],["_read.doc._meta.uuid",{"_index":3084,"title":{},"content":{"315":{"position":[[2142,21]]}},"keywords":{}}],["_read.doc.customer_id",{"_index":3023,"title":{},"content":{"296":{"position":[[6217,21],[6371,21]]}},"keywords":{}}],["_read.doc.email",{"_index":3025,"title":{},"content":{"296":{"position":[[6417,16]]}},"keywords":{}}],["_read.doc.meta.domain",{"_index":3085,"title":{},"content":{"315":{"position":[[2187,22]]}},"keywords":{}}],["_read.doc.meta?.domain",{"_index":3081,"title":{},"content":{"315":{"position":[[1960,23]]}},"keywords":{}}],["_read.doc.nam",{"_index":3026,"title":{},"content":{"296":{"position":[[6440,15]]}},"keywords":{}}],["_read.doc.phon",{"_index":3027,"title":{},"content":{"296":{"position":[[6463,15]]}},"keywords":{}}],["_read.doc.titl",{"_index":3086,"title":{},"content":{"315":{"position":[[2229,16]]}},"keywords":{}}],["_read.doc.us",{"_index":3087,"title":{},"content":{"315":{"position":[[2264,14]]}},"keywords":{}}],["_report",{"_index":4099,"title":{},"content":{"550":{"position":[[65,7]]}},"keywords":{}}],["_sop",{"_index":1202,"title":{},"content":{"82":{"position":[[3952,5],[4565,5]]}},"keywords":{}}],["_v2",{"_index":407,"title":{},"content":{"13":{"position":[[1209,4]]},"208":{"position":[[1448,5]]}},"keywords":{}}],["a,b,c,d...z",{"_index":4317,"title":{},"content":{"616":{"position":[[300,14]]}},"keywords":{}}],["a12b.cloud.databricks.com",{"_index":5813,"title":{},"content":{"1189":{"position":[[94,25]]}},"keywords":{}}],["a451",{"_index":2722,"title":{},"content":{"253":{"position":[[1760,4]]},"313":{"position":[[1760,4]]}},"keywords":{}}],["aaaa",{"_index":3715,"title":{},"content":{"439":{"position":[[192,4],[283,4],[335,4]]}},"keywords":{}}],["aad",{"_index":3704,"title":{},"content":{"436":{"position":[[1161,4]]}},"keywords":{}}],["aapl,msft,amzn,tsla,googl,goog,nvda,brk.b,meta,unh",{"_index":3459,"title":{},"content":{"378":{"position":[[230,50]]}},"keywords":{}}],["ab",{"_index":5521,"title":{},"content":{"1140":{"position":[[365,3]]},"1316":{"position":[[365,3]]},"1340":{"position":[[365,3]]},"1351":{"position":[[365,3]]},"1431":{"position":[[388,3]]}},"keywords":{}}],["abbrevi",{"_index":6555,"title":{},"content":{"1452":{"position":[[4150,11]]}},"keywords":{}}],["abc123",{"_index":6623,"title":{},"content":{"1461":{"position":[[3918,6]]}},"keywords":{}}],["abc123def",{"_index":5117,"title":{},"content":{"947":{"position":[[897,9]]}},"keywords":{}}],["abcdefgh",{"_index":5812,"title":{},"content":{"1189":{"position":[[85,8]]}},"keywords":{}}],["abil",{"_index":1139,"title":{},"content":{"81":{"position":[[2891,7]]},"84":{"position":[[952,9],[1108,7]]},"209":{"position":[[1282,7]]},"320":{"position":[[1253,7]]},"752":{"position":[[385,7],[421,7]]},"753":{"position":[[1041,7],[1077,7]]},"785":{"position":[[479,7]]},"791":{"position":[[338,7],[374,7]]},"793":{"position":[[1012,7],[1048,7]]},"808":{"position":[[958,7],[994,7]]},"1000":{"position":[[375,7]]},"1303":{"position":[[1354,7]]}},"keywords":{}}],["abort",{"_index":936,"title":{},"content":{"62":{"position":[[245,5]]},"1370":{"position":[[357,5]]}},"keywords":{}}],["aboutwarn",{"_index":236,"title":{},"content":{"7":{"position":[[278,10]]}},"keywords":{}}],["abov",{"_index":823,"title":{},"content":{"55":{"position":[[908,6]]},"61":{"position":[[885,5]]},"115":{"position":[[1490,6]]},"125":{"position":[[14,6]]},"160":{"position":[[855,5]]},"174":{"position":[[105,5],[464,6]]},"183":{"position":[[998,6]]},"210":{"position":[[1581,6]]},"238":{"position":[[14,6],[412,6]]},"247":{"position":[[408,5]]},"267":{"position":[[1422,6]]},"268":{"position":[[342,6],[639,6]]},"269":{"position":[[277,6]]},"270":{"position":[[184,6],[1051,6],[1563,6]]},"274":{"position":[[1081,5]]},"328":{"position":[[67,6]]},"379":{"position":[[397,6]]},"419":{"position":[[2787,5]]},"441":{"position":[[1396,5]]},"547":{"position":[[2789,5]]},"552":{"position":[[215,5],[524,5]]},"582":{"position":[[20,5]]},"594":{"position":[[1073,5]]},"606":{"position":[[37,6]]},"639":{"position":[[2414,5]]},"753":{"position":[[483,6]]},"764":{"position":[[1059,7]]},"767":{"position":[[629,6]]},"777":{"position":[[1059,7]]},"784":{"position":[[282,6]]},"792":{"position":[[907,6]]},"793":{"position":[[442,6]]},"804":{"position":[[1057,7]]},"808":{"position":[[458,6]]},"819":{"position":[[1057,7]]},"824":{"position":[[699,6]]},"835":{"position":[[1057,7]]},"866":{"position":[[459,6]]},"878":{"position":[[469,6]]},"904":{"position":[[698,6]]},"917":{"position":[[30,5]]},"918":{"position":[[907,6]]},"919":{"position":[[442,6]]},"931":{"position":[[462,6]]},"947":{"position":[[625,6]]},"965":{"position":[[30,5]]},"1008":{"position":[[1253,5],[1851,5]]},"1023":{"position":[[2770,5]]},"1043":{"position":[[442,6]]},"1051":{"position":[[698,6]]},"1059":{"position":[[462,6]]},"1118":{"position":[[709,5]]},"1154":{"position":[[648,6]]},"1176":{"position":[[408,5]]},"1198":{"position":[[371,6]]},"1255":{"position":[[282,6]]},"1286":{"position":[[1518,7]]},"1289":{"position":[[988,6]]},"1301":{"position":[[1354,7]]},"1303":{"position":[[462,6],[699,6]]},"1322":{"position":[[1207,6]]},"1325":{"position":[[1518,7]]},"1373":{"position":[[680,6]]},"1374":{"position":[[680,6]]},"1397":{"position":[[459,6]]},"1398":{"position":[[458,6]]},"1409":{"position":[[442,6]]},"1439":{"position":[[1199,6]]},"1449":{"position":[[231,6]]},"1461":{"position":[[3097,5]]}},"keywords":{}}],["above.a",{"_index":5884,"title":{},"content":{"1211":{"position":[[222,7]]},"1218":{"position":[[222,7]]}},"keywords":{}}],["aboveallow",{"_index":4846,"title":{},"content":{"862":{"position":[[15,10]]},"874":{"position":[[15,10]]}},"keywords":{}}],["absent",{"_index":1966,"title":{},"content":{"166":{"position":[[130,6]]}},"keywords":{}}],["absolut",{"_index":1281,"title":{},"content":{"87":{"position":[[58,8],[525,8]]},"161":{"position":[[1253,8]]},"301":{"position":[[1068,8]]},"417":{"position":[[1237,8]]},"438":{"position":[[1753,8]]},"502":{"position":[[275,8]]},"1140":{"position":[[431,8]]},"1316":{"position":[[431,8]]},"1340":{"position":[[431,8]]},"1351":{"position":[[431,8]]},"1379":{"position":[[407,8]]},"1403":{"position":[[407,8]]},"1414":{"position":[[407,8]]},"1431":{"position":[[454,8]]},"1461":{"position":[[231,8]]}},"keywords":{}}],["abstract",{"_index":1483,"title":{},"content":{"104":{"position":[[5,8]]}},"keywords":{}}],["accept",{"_index":1044,"title":{},"content":{"70":{"position":[[61,6]]},"89":{"position":[[201,7]]},"105":{"position":[[359,6]]},"108":{"position":[[78,6]]},"115":{"position":[[1454,11]]},"181":{"position":[[68,9]]},"237":{"position":[[3343,6]]},"309":{"position":[[1260,10],[1691,6]]},"419":{"position":[[1933,10]]},"441":{"position":[[542,10]]},"485":{"position":[[193,6]]},"488":{"position":[[424,6]]},"491":{"position":[[348,6]]},"504":{"position":[[1562,10]]},"547":{"position":[[1935,10]]},"639":{"position":[[1560,10]]},"657":{"position":[[193,6],[506,6]]},"659":{"position":[[581,6]]},"664":{"position":[[369,6],[604,6]]},"673":{"position":[[193,6]]},"676":{"position":[[424,6]]},"679":{"position":[[348,6]]},"688":{"position":[[193,6]]},"691":{"position":[[424,6]]},"694":{"position":[[348,6]]},"943":{"position":[[1038,8]]},"1018":{"position":[[37,6]]},"1023":{"position":[[1916,10]]},"1236":{"position":[[97,6]]}},"keywords":{}}],["access",{"_index":627,"title":{"202":{"position":[[5,7]]},"415":{"position":[[7,9]]},"515":{"position":[[29,6]]},"524":{"position":[[64,6]]},"532":{"position":[[64,6]]},"725":{"position":[[0,6]]},"944":{"position":[[16,6]]},"1083":{"position":[[8,6]]},"1469":{"position":[[0,9]]},"1471":{"position":[[0,9]]},"1472":{"position":[[0,9]]}},"content":{"27":{"position":[[293,7]]},"53":{"position":[[582,6]]},"60":{"position":[[1047,6]]},"68":{"position":[[425,6]]},"82":{"position":[[198,8],[943,6],[1004,6],[3264,6]]},"83":{"position":[[124,6],[474,6]]},"99":{"position":[[93,6],[377,6]]},"138":{"position":[[81,7]]},"141":{"position":[[79,7]]},"142":{"position":[[97,7]]},"154":{"position":[[40,6],[155,6],[282,6],[330,7],[382,6],[464,6],[574,6],[599,6],[744,6],[811,6],[887,6],[980,6],[1014,6],[1129,7],[2024,6]]},"169":{"position":[[1325,6],[1573,6],[1621,6]]},"171":{"position":[[35,6]]},"172":{"position":[[35,6]]},"173":{"position":[[35,6],[577,6],[730,6],[832,6]]},"189":{"position":[[476,6]]},"190":{"position":[[674,7],[851,6],[880,6]]},"191":{"position":[[1642,6],[1767,6]]},"202":{"position":[[27,6],[128,6]]},"203":{"position":[[561,7]]},"204":{"position":[[393,7]]},"206":{"position":[[415,6]]},"208":{"position":[[79,6]]},"217":{"position":[[721,7]]},"221":{"position":[[1628,6],[1695,6]]},"234":{"position":[[36,6]]},"237":{"position":[[756,6]]},"240":{"position":[[287,6],[1603,6],[1728,6]]},"246":{"position":[[24,6]]},"253":{"position":[[334,6]]},"263":{"position":[[162,6],[316,7]]},"266":{"position":[[20,6]]},"267":{"position":[[2000,6]]},"268":{"position":[[2016,6]]},"269":{"position":[[1478,6]]},"270":{"position":[[262,6],[483,6],[632,7],[2094,6]]},"274":{"position":[[560,6],[806,6],[938,7]]},"277":{"position":[[1172,6]]},"284":{"position":[[71,6]]},"288":{"position":[[71,6],[364,6],[721,6]]},"290":{"position":[[546,7],[905,6]]},"295":{"position":[[1714,6]]},"299":{"position":[[71,6],[302,6],[352,8],[400,6],[422,6],[636,6]]},"301":{"position":[[486,7],[698,6],[727,6]]},"313":{"position":[[334,6]]},"325":{"position":[[727,6]]},"337":{"position":[[93,6],[344,6],[395,7],[442,6],[529,6]]},"338":{"position":[[115,6],[166,6],[192,6],[401,6],[458,6],[485,6]]},"340":{"position":[[433,6],[481,6]]},"341":{"position":[[309,6],[498,6]]},"347":{"position":[[72,6],[89,6],[183,6]]},"348":{"position":[[76,6]]},"349":{"position":[[337,6]]},"359":{"position":[[193,6],[219,6]]},"375":{"position":[[60,6],[136,6]]},"383":{"position":[[41,6]]},"385":{"position":[[345,6]]},"390":{"position":[[511,6],[569,6],[591,6]]},"392":{"position":[[80,6],[198,6],[249,6],[371,6]]},"393":{"position":[[203,6],[268,6]]},"395":{"position":[[748,6],[770,6]]},"397":{"position":[[76,6],[94,6],[187,6],[209,6]]},"398":{"position":[[204,6],[269,6]]},"400":{"position":[[38,6]]},"405":{"position":[[9,6]]},"408":{"position":[[201,6],[219,6]]},"413":{"position":[[153,10],[194,10],[261,6],[440,7]]},"414":{"position":[[34,6],[914,6]]},"415":{"position":[[13,8],[61,6],[83,6],[137,6],[172,6],[293,6],[315,6],[438,6],[474,6]]},"417":{"position":[[724,6],[918,6]]},"430":{"position":[[168,6]]},"432":{"position":[[954,6],[1052,6]]},"445":{"position":[[37,6]]},"446":{"position":[[304,6]]},"448":{"position":[[680,6]]},"452":{"position":[[189,7],[270,7]]},"496":{"position":[[72,6],[92,6]]},"513":{"position":[[131,6]]},"515":{"position":[[31,6],[173,6],[225,6],[258,7],[618,6],[747,6],[802,6],[863,6]]},"517":{"position":[[545,6],[575,6]]},"522":{"position":[[132,6],[236,6],[492,6]]},"523":{"position":[[28,6]]},"524":{"position":[[28,6],[82,6]]},"530":{"position":[[132,6],[236,6],[492,6]]},"531":{"position":[[28,6],[145,6],[347,6],[469,6],[513,6]]},"532":{"position":[[28,6],[138,6],[282,6],[346,6]]},"534":{"position":[[680,6],[702,6],[773,6]]},"543":{"position":[[80,6],[206,8]]},"548":{"position":[[181,6]]},"552":{"position":[[108,9],[384,9]]},"553":{"position":[[92,6]]},"556":{"position":[[976,6],[1868,6]]},"562":{"position":[[95,6]]},"582":{"position":[[107,6]]},"591":{"position":[[51,6]]},"608":{"position":[[45,6]]},"623":{"position":[[141,7]]},"631":{"position":[[159,6]]},"635":{"position":[[469,7]]},"637":{"position":[[118,6],[214,6],[295,6]]},"640":{"position":[[10,8]]},"643":{"position":[[106,6]]},"645":{"position":[[23,6],[165,6],[413,6],[455,6]]},"646":{"position":[[328,6],[478,6],[533,6],[554,6]]},"650":{"position":[[105,6],[209,6]]},"652":{"position":[[23,6],[165,6],[413,6],[455,6]]},"654":{"position":[[49,6],[199,6],[254,6],[275,6]]},"670":{"position":[[270,6],[300,6],[437,6]]},"683":{"position":[[284,6]]},"685":{"position":[[155,6],[232,6],[245,6]]},"717":{"position":[[78,6]]},"718":{"position":[[123,6],[254,6],[286,6]]},"720":{"position":[[582,6],[595,6]]},"724":{"position":[[80,6],[355,6],[615,6]]},"725":{"position":[[170,6]]},"726":{"position":[[588,6]]},"728":{"position":[[459,6]]},"752":{"position":[[607,6]]},"753":{"position":[[227,6],[1263,6]]},"757":{"position":[[1111,7]]},"767":{"position":[[105,13],[1591,7],[1608,10]]},"770":{"position":[[1111,7]]},"780":{"position":[[85,6],[136,6],[221,6]]},"791":{"position":[[560,6]]},"792":{"position":[[294,6],[360,7],[407,10]]},"793":{"position":[[108,6],[174,7],[221,6],[1234,6]]},"797":{"position":[[1111,7]]},"808":{"position":[[108,6],[174,7],[1180,6]]},"812":{"position":[[1111,7]]},"824":{"position":[[108,6],[174,7],[218,13],[1655,7],[1672,10]]},"828":{"position":[[1111,7]]},"838":{"position":[[53,6]]},"839":{"position":[[32,6],[141,6]]},"840":{"position":[[1132,6],[1231,6],[1328,6],[1424,6],[1690,6],[1796,6],[1938,6],[1986,6]]},"842":{"position":[[500,6],[881,6],[956,6]]},"848":{"position":[[32,6],[141,6]]},"849":{"position":[[2143,6],[2253,6],[2280,6],[2315,6],[2731,6],[2837,6],[3057,6],[3105,6]]},"851":{"position":[[464,6],[524,6]]},"855":{"position":[[274,6]]},"859":{"position":[[436,6],[460,6]]},"862":{"position":[[164,6]]},"864":{"position":[[51,6],[337,6],[402,6],[547,6],[958,6]]},"865":{"position":[[172,6]]},"874":{"position":[[164,6]]},"876":{"position":[[51,6],[337,6],[402,6],[547,6],[823,6]]},"877":{"position":[[222,6]]},"879":{"position":[[624,6]]},"885":{"position":[[408,6]]},"895":{"position":[[371,6]]},"898":{"position":[[1205,6],[1621,6]]},"904":{"position":[[108,6],[174,7],[218,13]]},"917":{"position":[[1023,6]]},"918":{"position":[[294,6],[360,7],[407,10]]},"919":{"position":[[108,6],[174,7],[221,6],[1548,6]]},"931":{"position":[[108,6],[174,7]]},"944":{"position":[[107,7]]},"957":{"position":[[10,6]]},"959":{"position":[[74,6],[104,6]]},"965":{"position":[[1023,6]]},"985":{"position":[[551,6]]},"989":{"position":[[236,6],[302,6]]},"1000":{"position":[[729,6]]},"1004":{"position":[[319,6],[385,6]]},"1026":{"position":[[49,6]]},"1031":{"position":[[405,6]]},"1032":{"position":[[1035,6],[1327,6]]},"1043":{"position":[[108,6],[174,7],[221,6]]},"1051":{"position":[[108,6],[174,7],[218,13]]},"1059":{"position":[[108,6],[174,7]]},"1067":{"position":[[356,6],[624,6]]},"1070":{"position":[[335,6],[348,6],[930,6]]},"1083":{"position":[[89,6],[255,6]]},"1085":{"position":[[635,6],[673,6]]},"1086":{"position":[[40,6]]},"1089":{"position":[[262,6]]},"1105":{"position":[[38,6],[84,6],[173,6],[246,7]]},"1118":{"position":[[122,6]]},"1122":{"position":[[374,6],[396,6]]},"1125":{"position":[[76,6],[94,6],[182,6],[204,6]]},"1126":{"position":[[165,6],[230,6]]},"1133":{"position":[[657,6],[674,6]]},"1142":{"position":[[238,6],[260,6]]},"1144":{"position":[[149,6],[163,6],[256,6],[274,6]]},"1147":{"position":[[446,9]]},"1149":{"position":[[57,10],[686,6],[708,6]]},"1151":{"position":[[738,6],[756,6],[868,6],[890,6]]},"1154":{"position":[[116,10],[336,10]]},"1160":{"position":[[161,6],[257,6],[309,6],[401,6],[423,6]]},"1162":{"position":[[83,6],[97,6],[115,9],[189,6],[207,6],[222,9]]},"1168":{"position":[[238,6],[260,6]]},"1170":{"position":[[149,6],[163,6],[256,6],[274,6]]},"1174":{"position":[[446,9]]},"1177":{"position":[[171,6]]},"1185":{"position":[[212,6]]},"1186":{"position":[[626,6],[751,6]]},"1188":{"position":[[582,6],[660,6]]},"1203":{"position":[[541,10]]},"1204":{"position":[[50,6],[240,7],[253,7],[282,6],[307,6],[566,6],[591,6]]},"1206":{"position":[[87,6],[105,9],[223,6],[253,9]]},"1216":{"position":[[446,9]]},"1224":{"position":[[446,9]]},"1226":{"position":[[162,6]]},"1244":{"position":[[71,6]]},"1245":{"position":[[140,6],[742,7]]},"1251":{"position":[[96,6],[168,6]]},"1258":{"position":[[280,6],[302,6]]},"1260":{"position":[[537,6],[555,6],[667,6],[689,6]]},"1281":{"position":[[251,6]]},"1282":{"position":[[423,6]]},"1283":{"position":[[119,6],[257,6]]},"1288":{"position":[[135,6]]},"1289":{"position":[[119,6],[408,10],[802,7]]},"1292":{"position":[[294,10]]},"1295":{"position":[[251,6]]},"1303":{"position":[[108,6],[174,7]]},"1306":{"position":[[294,10]]},"1310":{"position":[[438,6]]},"1311":{"position":[[93,6]]},"1319":{"position":[[251,6]]},"1320":{"position":[[119,6]]},"1321":{"position":[[188,10]]},"1329":{"position":[[294,10]]},"1333":{"position":[[119,6]]},"1334":{"position":[[188,10],[304,7]]},"1344":{"position":[[119,6]]},"1361":{"position":[[133,6]]},"1362":{"position":[[236,6],[263,6]]},"1372":{"position":[[251,6]]},"1373":{"position":[[108,6],[174,7],[218,13]]},"1374":{"position":[[108,6],[174,7],[218,13]]},"1382":{"position":[[277,6]]},"1383":{"position":[[1590,6],[1715,6]]},"1396":{"position":[[251,6]]},"1397":{"position":[[108,6],[175,7]]},"1398":{"position":[[108,6],[174,7]]},"1406":{"position":[[251,6]]},"1409":{"position":[[108,6],[174,7],[221,6]]},"1417":{"position":[[368,6]]},"1418":{"position":[[121,6]]},"1420":{"position":[[367,6],[428,6]]},"1447":{"position":[[128,8]]},"1461":{"position":[[5199,6],[5231,8],[5344,7],[5477,6]]},"1469":{"position":[[9,6]]},"1470":{"position":[[247,6]]},"1471":{"position":[[1132,8]]}},"keywords":{}}],["access"",{"_index":4034,"title":{},"content":{"531":{"position":[[379,13]]},"532":{"position":[[313,12]]}},"keywords":{}}],["access.cr",{"_index":4058,"title":{},"content":{"543":{"position":[[300,13]]}},"keywords":{}}],["access_key",{"_index":3565,"title":{},"content":{"408":{"position":[[181,11]]},"497":{"position":[[126,11]]}},"keywords":{}}],["access_key_id",{"_index":5749,"title":{},"content":{"1152":{"position":[[274,13]]}},"keywords":{}}],["access_token",{"_index":3273,"title":{},"content":{"359":{"position":[[170,13]]},"360":{"position":[[111,13]]},"518":{"position":[[190,13]]},"557":{"position":[[299,14]]},"647":{"position":[[159,13]]},"655":{"position":[[165,13]]},"670":{"position":[[256,13]]},"671":{"position":[[176,13]]},"686":{"position":[[171,13]]},"720":{"position":[[510,12]]},"721":{"position":[[247,12],[260,13]]},"728":{"position":[[445,13]]},"892":{"position":[[120,13]]},"960":{"position":[[111,13]]},"1016":{"position":[[138,13]]},"1071":{"position":[[197,13]]},"1086":{"position":[[245,13]]},"1108":{"position":[[127,13],[169,12]]},"1363":{"position":[[158,13]]}},"keywords":{}}],["accessto",{"_index":5740,"title":{},"content":{"1149":{"position":[[631,8]]},"1258":{"position":[[225,8]]}},"keywords":{}}],["accident",{"_index":1469,"title":{},"content":{"102":{"position":[[606,10]]}},"keywords":{}}],["accommod",{"_index":1437,"title":{},"content":{"100":{"position":[[76,11]]},"323":{"position":[[1215,11]]},"1047":{"position":[[910,11]]},"1055":{"position":[[910,11]]},"1063":{"position":[[910,11]]}},"keywords":{}}],["accompani",{"_index":967,"title":{},"content":{"64":{"position":[[663,12]]},"103":{"position":[[188,13]]}},"keywords":{}}],["accomplish",{"_index":917,"title":{},"content":{"61":{"position":[[328,10]]},"123":{"position":[[438,12]]},"189":{"position":[[1596,10]]},"209":{"position":[[1293,10]]},"1154":{"position":[[80,12]]},"1358":{"position":[[733,10]]},"1388":{"position":[[317,10]]}},"keywords":{}}],["accord",{"_index":5189,"title":{},"content":{"1020":{"position":[[70,9]]},"1186":{"position":[[489,9]]}},"keywords":{}}],["accordingli",{"_index":2257,"title":{},"content":{"208":{"position":[[1704,12]]},"221":{"position":[[1771,12]]},"752":{"position":[[184,12]]},"791":{"position":[[137,12]]},"1047":{"position":[[162,12]]},"1055":{"position":[[162,12]]},"1063":{"position":[[162,12]]},"1383":{"position":[[282,12]]}},"keywords":{}}],["account",{"_index":526,"title":{"278":{"position":[[12,7]]},"281":{"position":[[8,7]]},"415":{"position":[[29,8]]},"477":{"position":[[8,8]]},"478":{"position":[[8,7]]},"548":{"position":[[35,7]]},"571":{"position":[[39,7]]},"582":{"position":[[39,7]]},"598":{"position":[[8,8]]},"599":{"position":[[8,7]]},"609":{"position":[[39,7]]},"1082":{"position":[[48,10]]}},"content":{"19":{"position":[[564,7]]},"58":{"position":[[842,7]]},"81":{"position":[[483,8],[2277,7]]},"103":{"position":[[811,7]]},"107":{"position":[[702,8],[801,8]]},"113":{"position":[[665,7],[821,7]]},"123":{"position":[[398,10]]},"124":{"position":[[883,8]]},"136":{"position":[[40,7],[163,8],[340,7]]},"154":{"position":[[1522,8]]},"168":{"position":[[145,7]]},"169":{"position":[[12,7],[1372,7]]},"170":{"position":[[10,8]]},"173":{"position":[[58,7],[414,7],[459,8],[550,8],[753,7]]},"174":{"position":[[550,8]]},"179":{"position":[[17,8],[125,8]]},"183":{"position":[[578,7]]},"188":{"position":[[31,8],[131,7],[150,9]]},"191":{"position":[[2056,7]]},"192":{"position":[[835,7],[870,8],[884,7]]},"199":{"position":[[80,8]]},"202":{"position":[[174,7]]},"217":{"position":[[294,7]]},"234":{"position":[[463,8],[577,7]]},"240":{"position":[[2017,7],[2815,7]]},"262":{"position":[[50,7]]},"266":{"position":[[8,7],[64,7],[535,7]]},"267":{"position":[[946,7]]},"273":{"position":[[50,7]]},"277":{"position":[[218,8],[385,8],[1377,8]]},"278":{"position":[[173,7],[208,8],[281,7],[356,7]]},"279":{"position":[[174,7],[299,7]]},"280":{"position":[[186,7],[342,7],[431,7],[459,7],[585,7],[1534,7],[2080,9]]},"281":{"position":[[148,7],[289,7],[1720,7],[1813,8],[1885,7],[2000,7],[2985,10]]},"283":{"position":[[50,7]]},"288":{"position":[[125,8],[345,7],[480,8],[522,8],[556,7],[576,8],[597,7],[865,7],[935,7],[987,7]]},"290":{"position":[[271,7],[888,7],[1060,7]]},"299":{"position":[[125,8],[371,8],[512,7],[780,7],[850,7],[902,7]]},"301":{"position":[[224,7]]},"340":{"position":[[232,7]]},"344":{"position":[[82,8]]},"357":{"position":[[20,7]]},"359":{"position":[[249,8]]},"375":{"position":[[48,8]]},"383":{"position":[[28,7],[66,7]]},"415":{"position":[[32,8]]},"436":{"position":[[115,7],[424,7]]},"438":{"position":[[689,7],[737,8],[1144,7],[1321,8]]},"445":{"position":[[60,8]]},"449":{"position":[[430,8]]},"454":{"position":[[225,8]]},"464":{"position":[[27,7]]},"475":{"position":[[135,7],[250,7],[296,7]]},"477":{"position":[[64,7],[340,7],[437,7],[535,8],[652,7],[686,7],[878,8],[959,7]]},"478":{"position":[[9,7],[65,9],[136,7],[201,7],[350,8],[394,8],[470,7]]},"479":{"position":[[363,7]]},"482":{"position":[[317,7]]},"494":{"position":[[51,8],[113,7],[148,8]]},"500":{"position":[[61,8]]},"507":{"position":[[53,7]]},"509":{"position":[[331,8]]},"512":{"position":[[193,7]]},"514":{"position":[[68,7],[87,7]]},"515":{"position":[[79,8],[99,7],[411,7]]},"517":{"position":[[90,8],[627,7],[654,7],[4044,7]]},"521":{"position":[[329,9]]},"523":{"position":[[15,7]]},"524":{"position":[[15,7]]},"531":{"position":[[15,7]]},"532":{"position":[[15,7]]},"538":{"position":[[61,7]]},"543":{"position":[[108,8],[235,8],[329,7]]},"545":{"position":[[658,7],[674,7]]},"546":{"position":[[433,7],[851,7]]},"548":{"position":[[76,7],[115,8],[208,8],[422,7],[890,7],[1148,7]]},"552":{"position":[[61,7],[319,8],[340,8],[495,8]]},"553":{"position":[[24,9],[75,7],[134,7],[159,8],[219,7]]},"554":{"position":[[24,9],[87,7],[135,7],[197,7]]},"556":{"position":[[1645,8],[1840,8],[1891,7],[1920,8],[2002,7]]},"558":{"position":[[282,8]]},"562":{"position":[[82,7]]},"569":{"position":[[150,7],[261,7]]},"570":{"position":[[39,8],[81,7],[116,7]]},"571":{"position":[[39,8],[81,7],[180,8],[206,7],[574,7],[629,7],[739,7],[819,7],[867,7]]},"573":{"position":[[57,7],[493,7],[952,7]]},"577":{"position":[[268,7],[379,9]]},"581":{"position":[[474,7]]},"582":{"position":[[70,7],[185,7],[242,7],[352,7],[432,7],[484,7]]},"584":{"position":[[424,7]]},"588":{"position":[[263,7],[374,9]]},"591":{"position":[[32,7],[167,8],[209,8],[243,7],[263,8]]},"593":{"position":[[112,7]]},"594":{"position":[[421,7],[839,7]]},"597":{"position":[[134,7],[213,7],[259,7]]},"598":{"position":[[63,7],[304,7],[401,7],[499,8],[616,7],[650,7],[840,8],[921,7]]},"599":{"position":[[9,7],[65,9],[136,7],[201,7],[350,8],[394,8],[470,7]]},"601":{"position":[[180,7],[214,7]]},"607":{"position":[[148,7],[260,7]]},"608":{"position":[[110,7],[131,8]]},"609":{"position":[[32,7],[196,7],[296,7],[406,8]]},"611":{"position":[[426,7],[471,7],[614,7],[1017,8]]},"614":{"position":[[133,7],[244,7]]},"615":{"position":[[85,7]]},"617":{"position":[[132,8],[158,7],[496,7],[553,7],[663,7],[774,8]]},"619":{"position":[[57,7],[398,7]]},"629":{"position":[[65,7]]},"631":{"position":[[72,7],[91,7]]},"644":{"position":[[11,7]]},"645":{"position":[[11,7],[95,8],[228,7]]},"649":{"position":[[56,7],[555,8]]},"651":{"position":[[11,7]]},"652":{"position":[[11,7],[95,8],[228,7]]},"654":{"position":[[604,7]]},"655":{"position":[[395,8]]},"668":{"position":[[47,7],[152,7]]},"683":{"position":[[314,8]]},"712":{"position":[[130,7],[208,8],[342,7],[437,7]]},"717":{"position":[[25,8],[95,8]]},"720":{"position":[[253,7],[306,7],[402,9]]},"723":{"position":[[22,7],[44,7]]},"732":{"position":[[13,7]]},"733":{"position":[[13,7]]},"745":{"position":[[73,7]]},"791":{"position":[[653,7]]},"792":{"position":[[1973,7]]},"793":{"position":[[1327,7]]},"808":{"position":[[1273,7]]},"824":{"position":[[2095,7]]},"839":{"position":[[46,7]]},"840":{"position":[[19,7],[38,7],[127,7],[156,7],[292,7],[329,8],[2415,7],[2514,8]]},"842":{"position":[[79,7],[521,7]]},"843":{"position":[[113,8]]},"846":{"position":[[268,7]]},"848":{"position":[[46,7]]},"849":{"position":[[43,7],[62,7],[235,7],[272,8],[3555,7],[3648,7]]},"852":{"position":[[132,7]]},"855":{"position":[[45,7]]},"883":{"position":[[84,8]]},"889":{"position":[[9,7]]},"895":{"position":[[342,7]]},"899":{"position":[[65,7],[205,8],[229,7]]},"900":{"position":[[157,8]]},"940":{"position":[[17,7],[69,7]]},"946":{"position":[[291,8]]},"985":{"position":[[90,8],[366,8]]},"1000":{"position":[[90,8],[544,8]]},"1026":{"position":[[22,7],[66,8]]},"1031":{"position":[[50,7],[630,8],[678,7]]},"1032":{"position":[[18,7]]},"1034":{"position":[[207,8],[216,7],[238,7]]},"1037":{"position":[[164,8]]},"1074":{"position":[[1,7]]},"1076":{"position":[[72,7],[95,7]]},"1077":{"position":[[235,7]]},"1081":{"position":[[95,8]]},"1082":{"position":[[32,7],[168,7],[265,7]]},"1083":{"position":[[52,8],[168,8],[187,7]]},"1085":{"position":[[99,9],[138,8]]},"1086":{"position":[[72,9]]},"1105":{"position":[[11,7],[55,8]]},"1107":{"position":[[346,7]]},"1108":{"position":[[269,8]]},"1113":{"position":[[73,7],[91,7]]},"1114":{"position":[[131,7],[255,8]]},"1118":{"position":[[12,7],[47,7]]},"1128":{"position":[[70,7]]},"1133":{"position":[[349,8],[1040,7]]},"1176":{"position":[[151,7],[466,8]]},"1177":{"position":[[27,8],[122,8],[138,7],[330,7],[363,9]]},"1179":{"position":[[198,7],[247,7]]},"1185":{"position":[[51,7]]},"1186":{"position":[[80,8]]},"1211":{"position":[[255,8]]},"1213":{"position":[[154,7],[203,7]]},"1218":{"position":[[255,8]]},"1220":{"position":[[154,7],[203,7]]},"1227":{"position":[[107,7]]},"1228":{"position":[[122,7],[298,8],[369,7]]},"1230":{"position":[[347,7],[388,7]]},"1243":{"position":[[1199,7]]},"1244":{"position":[[53,7]]},"1245":{"position":[[74,8],[100,7],[448,7],[505,7],[615,7],[719,8]]},"1247":{"position":[[518,7],[559,7],[764,8]]},"1258":{"position":[[51,7]]},"1274":{"position":[[49,7],[102,7]]},"1292":{"position":[[330,7]]},"1303":{"position":[[1497,7]]},"1306":{"position":[[330,7]]},"1329":{"position":[[330,7]]},"1382":{"position":[[50,7],[424,7]]},"1383":{"position":[[2004,7]]},"1386":{"position":[[71,8],[635,8],[644,7],[666,7]]},"1394":{"position":[[480,7]]},"1417":{"position":[[57,7]]},"1420":{"position":[[235,8],[244,7],[259,7],[314,7]]},"1421":{"position":[[88,8],[97,7]]},"1461":{"position":[[3003,7],[3819,8]]}},"keywords":{}}],["account>@<anotherproject>.iam.gserviceaccount.com",{"_index":4094,"title":{},"content":{"548":{"position":[[1394,58]]}},"keywords":{}}],["account>@<project>.iam.gserviceaccount.com:generateaccesstoken",{"_index":4090,"title":{},"content":{"548":{"position":[[1054,71]]}},"keywords":{}}],["account'",{"_index":2024,"title":{},"content":{"173":{"position":[[822,9]]},"553":{"position":[[44,9]]},"554":{"position":[[44,9]]},"617":{"position":[[893,9]]},"842":{"position":[[1124,9],[1213,9]]},"1227":{"position":[[276,9]]},"1382":{"position":[[365,9]]}},"keywords":{}}],["account(",{"_index":4111,"title":{},"content":{"553":{"position":[[117,11]]}},"keywords":{}}],["account.a",{"_index":5463,"title":{},"content":{"1131":{"position":[[151,9]]}},"keywords":{}}],["account.contact",{"_index":1764,"title":{},"content":{"136":{"position":[[285,15]]}},"keywords":{}}],["account.in",{"_index":3250,"title":{},"content":{"349":{"position":[[28,10]]},"479":{"position":[[28,10]]},"1092":{"position":[[28,10]]}},"keywords":{}}],["account.navig",{"_index":4947,"title":{},"content":{"895":{"position":[[94,16]]}},"keywords":{}}],["account.not",{"_index":3815,"title":{},"content":{"477":{"position":[[612,12]]},"598":{"position":[[576,12]]}},"keywords":{}}],["account.secret",{"_index":5286,"title":{},"content":{"1074":{"position":[[27,14]]}},"keywords":{}}],["account_attribut",{"_index":5466,"title":{},"content":{"1134":{"position":[[289,18]]}},"keywords":{}}],["account_curr",{"_index":3976,"title":{},"content":{"518":{"position":[[339,17]]}},"keywords":{}}],["account_id",{"_index":3944,"title":{},"content":{"517":{"position":[[615,11]]},"518":{"position":[[219,11]]},"632":{"position":[[110,11]]},"721":{"position":[[184,12]]},"852":{"position":[[111,11]]},"1078":{"position":[[108,11]]}},"keywords":{}}],["account_sid",{"_index":5406,"title":{},"content":{"1114":{"position":[[109,12]]}},"keywords":{}}],["accountadmin",{"_index":2158,"title":{},"content":{"191":{"position":[[1914,12],[2014,13]]},"240":{"position":[[1875,12],[1975,13]]},"1383":{"position":[[1862,12],[1962,13]]}},"keywords":{}}],["accountallow",{"_index":4729,"title":{},"content":{"839":{"position":[[17,14]]},"848":{"position":[[17,14]]}},"keywords":{}}],["accountcan",{"_index":4808,"title":{},"content":{"846":{"position":[[78,10],[148,10]]}},"keywords":{}}],["accountcontactuseropportunityfilledhistoryleadhistoryopportunitycampaigncasecontactlineitementitlementleadlivechattranscriptmessagingsessionquotequotelineitemserviceappointmentservicecontracttaskuserservicepresenceworkorderworkorderlineitem",{"_index":5141,"title":{},"content":{"985":{"position":[[100,240]]},"1000":{"position":[[100,240]]}},"keywords":{}}],["accountid",{"_index":2163,"title":{},"content":{"192":{"position":[[975,9]]}},"keywords":{}}],["accountid.region.cloudprovider.snowflakecomputing.com",{"_index":2160,"title":{},"content":{"192":{"position":[[717,53]]}},"keywords":{}}],["accountinstagram",{"_index":4414,"title":{},"content":{"668":{"position":[[21,16]]}},"keywords":{}}],["accountnam",{"_index":2164,"title":{},"content":{"192":{"position":[[988,12]]}},"keywords":{}}],["accountname.snowflakecomputing.com",{"_index":2162,"title":{},"content":{"192":{"position":[[782,35]]},"288":{"position":[[1014,35]]},"299":{"position":[[929,35]]},"1034":{"position":[[125,34]]},"1386":{"position":[[146,34]]},"1387":{"position":[[140,34],[694,34]]}},"keywords":{}}],["accountname.snowflakecomputing.com.at",{"_index":6360,"title":{},"content":{"1382":{"position":[[465,37]]}},"keywords":{}}],["accounts)ep",{"_index":4013,"title":{},"content":{"521":{"position":[[252,13]]}},"keywords":{}}],["accountsaccount",{"_index":3727,"title":{},"content":{"443":{"position":[[46,15]]},"715":{"position":[[46,15]]}},"keywords":{}}],["accountsaddressesalertsapplicationsavail",{"_index":5389,"title":{},"content":{"1110":{"position":[[70,44]]}},"keywords":{}}],["accountsagentsag",{"_index":5384,"title":{},"content":{"1104":{"position":[[70,19]]}},"keywords":{}}],["accountscampaignsimagesvideo",{"_index":3930,"title":{},"content":{"512":{"position":[[97,29]]}},"keywords":{}}],["accountschargescheckout",{"_index":5277,"title":{},"content":{"1073":{"position":[[94,23]]}},"keywords":{}}],["accountsplanssubscript",{"_index":3754,"title":{},"content":{"451":{"position":[[120,26]]}},"keywords":{}}],["accountwith",{"_index":5882,"title":{},"content":{"1211":{"position":[[156,11]]},"1218":{"position":[[156,11]]}},"keywords":{}}],["acct_",{"_index":5287,"title":{},"content":{"1076":{"position":[[119,8]]}},"keywords":{}}],["accumul",{"_index":1601,"title":{"113":{"position":[[9,12]]},"114":{"position":[[0,10]]},"115":{"position":[[0,10]]}},"content":{"113":{"position":[[514,12]]},"114":{"position":[[9,10]]},"115":{"position":[[4,10]]},"121":{"position":[[284,11]]},"281":{"position":[[3416,12]]}},"keywords":{}}],["accumulate?"",{"_index":2908,"title":{},"content":{"281":{"position":[[3338,17]]}},"keywords":{}}],["accur",{"_index":1955,"title":{},"content":{"165":{"position":[[349,8]]},"211":{"position":[[896,11]]},"324":{"position":[[755,8]]},"332":{"position":[[49,8]]},"595":{"position":[[898,8]]},"1036":{"position":[[971,8]]}},"keywords":{}}],["accuraci",{"_index":2174,"title":{},"content":{"196":{"position":[[510,8]]},"233":{"position":[[517,8]]},"237":{"position":[[1478,8]]},"366":{"position":[[876,8]]},"584":{"position":[[1204,9]]},"750":{"position":[[587,8]]},"766":{"position":[[587,8]]},"789":{"position":[[575,8]]},"807":{"position":[[575,8]]},"823":{"position":[[575,8]]},"903":{"position":[[902,8]]},"915":{"position":[[902,8]]},"930":{"position":[[902,8]]},"963":{"position":[[1056,8]]},"1040":{"position":[[618,8]]},"1050":{"position":[[618,8]]},"1058":{"position":[[618,8]]}},"keywords":{}}],["achiev",{"_index":523,"title":{},"content":{"19":{"position":[[468,9]]},"42":{"position":[[685,7]]},"49":{"position":[[149,7]]},"162":{"position":[[661,7]]},"240":{"position":[[3877,7]]},"241":{"position":[[299,12]]},"329":{"position":[[315,7]]},"1156":{"position":[[283,7]]}},"keywords":{}}],["acknowledg",{"_index":4292,"title":{"1442":{"position":[[0,12]]}},"content":{"602":{"position":[[23,12],[134,15],[539,12]]},"922":{"position":[[2918,13]]},"1434":{"position":[[688,11],[723,12],[765,12],[989,12],[1118,11],[2251,11],[2273,13]]},"1442":{"position":[[1,11],[17,12],[251,12],[322,11],[338,12],[368,12],[400,11],[459,12],[625,13],[684,14],[968,15],[1302,15],[1396,13],[1503,16],[1633,12],[1712,12],[1831,12]]},"1443":{"position":[[592,12],[618,12]]},"1444":{"position":[[1044,11]]},"1452":{"position":[[1687,12],[1947,13],[2042,13]]},"1453":{"position":[[106,15],[466,16],[559,15],[1040,12],[1129,16]]}},"keywords":{}}],["acm",{"_index":201,"title":{},"content":{"6":{"position":[[106,4]]},"8":{"position":[[107,4]]},"337":{"position":[[326,4]]},"1461":{"position":[[922,4],[1188,4],[2978,4],[3022,4],[4503,4],[4647,4],[4694,4]]}},"keywords":{}}],["acme'",{"_index":6625,"title":{},"content":{"1461":{"position":[[4578,6]]}},"keywords":{}}],["acme/customers/customerinfo",{"_index":6595,"title":{},"content":{"1461":{"position":[[1038,27]]}},"keywords":{}}],["acme/flow.yaml",{"_index":6606,"title":{},"content":{"1461":{"position":[[1921,15]]}},"keywords":{}}],["acme/insid",{"_index":6636,"title":{},"content":{"1462":{"position":[[595,11]]}},"keywords":{}}],["acme/products/flow.yaml",{"_index":6610,"title":{},"content":{"1461":{"position":[[2206,23]]}},"keywords":{}}],["acme/products/info",{"_index":6611,"title":{},"content":{"1461":{"position":[[2401,19]]}},"keywords":{}}],["acme/products/info/flow.yaml",{"_index":6613,"title":{},"content":{"1461":{"position":[[2493,28]]}},"keywords":{}}],["acme/products/info/manufactur",{"_index":6596,"title":{},"content":{"1461":{"position":[[1066,32]]}},"keywords":{}}],["acme/products/info/sku",{"_index":6597,"title":{},"content":{"1461":{"position":[[1099,23]]}},"keywords":{}}],["acme/products/inventori",{"_index":6598,"title":{},"content":{"1461":{"position":[[1123,23]]}},"keywords":{}}],["acme/sales/complet",{"_index":6600,"title":{},"content":{"1461":{"position":[[1166,19]]}},"keywords":{}}],["acme/sales/flow.yaml",{"_index":6612,"title":{},"content":{"1461":{"position":[[2461,20]]}},"keywords":{}}],["acme/sales/pend",{"_index":6599,"title":{},"content":{"1461":{"position":[[1147,18]]}},"keywords":{}}],["acme_product",{"_index":6620,"title":{},"content":{"1461":{"position":[[3828,15],[3936,15]]}},"keywords":{}}],["acmebank",{"_index":2824,"title":{"276":{"position":[[29,8]]}},"content":{},"keywords":{}}],["acmebank/bal",{"_index":2881,"title":{},"content":{"281":{"position":[[878,18],[1338,18]]}},"keywords":{}}],["acmebank/first",{"_index":2839,"title":{},"content":{"278":{"position":[[890,14]]}},"keywords":{}}],["acmebank/group",{"_index":2854,"title":{},"content":{"279":{"position":[[1031,16]]}},"keywords":{}}],["acmebank/last",{"_index":2829,"title":{},"content":{"277":{"position":[[556,13]]}},"keywords":{}}],["acmebank/transf",{"_index":2832,"title":{},"content":{"277":{"position":[[697,18]]},"278":{"position":[[1139,18]]},"279":{"position":[[1487,18],[1600,18]]},"280":{"position":[[1144,17],[1634,18],[1945,17]]},"281":{"position":[[1033,17]]}},"keywords":{}}],["acmeco",{"_index":2793,"title":{},"content":{"267":{"position":[[371,7],[1459,7]]},"270":{"position":[[1088,7]]},"337":{"position":[[358,7],[429,7]]},"338":{"position":[[355,7],[415,7],[468,7]]},"341":{"position":[[319,6]]},"344":{"position":[[91,6]]}},"keywords":{}}],["acmeco*mysql",{"_index":1825,"title":{},"content":{"142":{"position":[[1060,13]]}},"keywords":{}}],["acmeco*sourc",{"_index":1779,"title":{},"content":{"138":{"position":[[1081,13]]}},"keywords":{}}],["acmeco/'",{"_index":3228,"title":{},"content":{"341":{"position":[[483,9]]}},"keywords":{}}],["acmeco/anvil",{"_index":1822,"title":{},"content":{"142":{"position":[[985,12]]},"344":{"position":[[342,13]]}},"keywords":{}}],["acmeco/anvil/ord",{"_index":1689,"title":{},"content":{"123":{"position":[[217,20],[655,19]]}},"keywords":{}}],["acmeco/anvils/captur",{"_index":6668,"title":{},"content":{"1471":{"position":[[280,21],[327,21]]}},"keywords":{}}],["acmeco/anvils/log",{"_index":6672,"title":{},"content":{"1472":{"position":[[634,19],[926,22]]}},"keywords":{}}],["acmeco/anvils/materi",{"_index":6669,"title":{},"content":{"1471":{"position":[[833,29]]}},"keywords":{}}],["acmeco/collect",{"_index":1053,"title":{},"content":{"70":{"position":[[683,18]]},"132":{"position":[[473,17],[633,17]]},"133":{"position":[[409,17]]}},"keywords":{}}],["acmeco/color",{"_index":1657,"title":{},"content":{"121":{"position":[[905,14],[1181,13]]}},"keywords":{}}],["acmeco/compound",{"_index":1069,"title":{},"content":{"73":{"position":[[179,15]]}},"keywords":{}}],["acmeco/coordin",{"_index":1898,"title":{},"content":{"161":{"position":[[628,19]]}},"keywords":{}}],["acmeco/coyot",{"_index":1968,"title":{},"content":{"166":{"position":[[328,15]]}},"keywords":{}}],["acmeco/custom",{"_index":1130,"title":{},"content":{"81":{"position":[[2044,16]]}},"keywords":{}}],["acmeco/data",{"_index":3048,"title":{},"content":{"307":{"position":[[1482,11],[2350,11]]},"309":{"position":[[2301,11],[2908,11]]}},"keywords":{}}],["acmeco/debugmateri",{"_index":256,"title":{},"content":{"7":{"position":[[712,28]]}},"keywords":{}}],["acmeco/example/a",{"_index":1649,"title":{},"content":{"120":{"position":[[2863,16]]}},"keywords":{}}],["acmeco/example/anoth",{"_index":852,"title":{},"content":{"56":{"position":[[2053,22]]}},"keywords":{}}],["acmeco/example/collect",{"_index":848,"title":{},"content":{"56":{"position":[[1641,25]]},"120":{"position":[[1069,25]]},"122":{"position":[[1187,25]]},"1480":{"position":[[775,25]]}},"keywords":{}}],["acmeco/example/databas",{"_index":1646,"title":{},"content":{"120":{"position":[[218,23]]},"121":{"position":[[1116,23]]},"122":{"position":[[1122,23]]},"123":{"position":[[497,23]]},"1480":{"position":[[155,23]]}},"keywords":{}}],["acmeco/example/sourc",{"_index":830,"title":{},"content":{"56":{"position":[[186,21]]}},"keywords":{}}],["acmeco/greet",{"_index":1721,"title":{},"content":{"128":{"position":[[667,16]]},"129":{"position":[[1000,16]]},"130":{"position":[[151,16]]}},"keywords":{}}],["acmeco/integ",{"_index":1900,"title":{},"content":{"161":{"position":[[704,14]]}},"keywords":{}}],["acmeco/inventory/anvil",{"_index":1029,"title":{},"content":{"68":{"position":[[880,23]]},"307":{"position":[[1236,23],[1273,24],[1661,23],[2625,23]]},"309":{"position":[[2107,24],[2480,23],[2704,24],[3087,23]]}},"keywords":{}}],["acmeco/inventory/anvils_v2",{"_index":3052,"title":{},"content":{"307":{"position":[[2098,26],[2138,27],[2529,26]]}},"keywords":{}}],["acmeco/inventory/sourc",{"_index":3042,"title":{},"content":{"307":{"position":[[1025,23],[1875,23]]}},"keywords":{}}],["acmeco/logistics/anvil",{"_index":1777,"title":{},"content":{"138":{"position":[[998,22]]}},"keywords":{}}],["acmeco/my/deriv",{"_index":1334,"title":{},"content":{"94":{"position":[[135,21]]}},"keywords":{}}],["acmeco/my/source/collect",{"_index":1347,"title":{},"content":{"94":{"position":[[1406,27]]}},"keywords":{}}],["acmeco/my_time_seri",{"_index":6424,"title":{},"content":{"1429":{"position":[[604,21],[905,21]]}},"keywords":{}}],["acmeco/myfirestorecaptur",{"_index":2926,"title":{},"content":{"290":{"position":[[693,26]]}},"keywords":{}}],["acmeco/myfirstcaptur",{"_index":2429,"title":{},"content":{"217":{"position":[[884,22]]}},"keywords":{}}],["acmeco/myfirstmateri",{"_index":2431,"title":{},"content":{"218":{"position":[[423,30]]}},"keywords":{}}],["acmeco/mys3captur",{"_index":3033,"title":{},"content":{"301":{"position":[[633,19]]}},"keywords":{}}],["acmeco/mysnowflakemateri",{"_index":2929,"title":{},"content":{"291":{"position":[[347,34]]},"302":{"position":[[347,34]]}},"keywords":{}}],["acmeco/ord",{"_index":10,"title":{},"content":{"1":{"position":[[133,14]]},"96":{"position":[[173,13]]},"107":{"position":[[1469,13],[2649,13],[3303,13],[4021,13]]}},"keywords":{}}],["acmeco/peopl",{"_index":1714,"title":{},"content":{"128":{"position":[[351,13],[490,13]]},"129":{"position":[[735,13],[863,13]]}},"keywords":{}}],["acmeco/posit",{"_index":1903,"title":{},"content":{"161":{"position":[[796,15]]}},"keywords":{}}],["acmeco/postgr",{"_index":1122,"title":{},"content":{"81":{"position":[[1043,15],[2555,15]]},"83":{"position":[[918,15]]}},"keywords":{}}],["acmeco/produc",{"_index":1641,"title":{},"content":{"117":{"position":[[379,14]]}},"keywords":{}}],["acmeco/products/anvil",{"_index":1035,"title":{},"content":{"69":{"position":[[205,23]]},"76":{"position":[[370,23]]},"81":{"position":[[1459,22],[1755,24]]}},"keywords":{}}],["acmeco/products/tnt",{"_index":1128,"title":{},"content":{"81":{"position":[[1984,19]]}},"keywords":{}}],["acmeco/resources/anvil",{"_index":2794,"title":{},"content":{"267":{"position":[[400,23],[817,22]]},"268":{"position":[[780,22],[1006,23]]},"269":{"position":[[405,22],[616,23]]},"270":{"position":[[782,23]]}},"keywords":{}}],["acmeco/sal",{"_index":922,"title":{},"content":{"61":{"position":[[661,13]]}},"keywords":{}}],["acmeco/snowflak",{"_index":3238,"title":{},"content":{"344":{"position":[[19,16]]}},"keywords":{}}],["acmeco/teams/manufactur",{"_index":636,"title":{},"content":{"27":{"position":[[639,28]]}},"keywords":{}}],["acmeco/teams/manufacturing/anvil",{"_index":624,"title":{},"content":{"27":{"position":[[100,34]]}},"keywords":{}}],["acmeco/tests/greet",{"_index":1715,"title":{},"content":{"128":{"position":[[388,23]]},"129":{"position":[[689,23]]},"130":{"position":[[105,23]]}},"keywords":{}}],["acmeco/tests/on",{"_index":1741,"title":{},"content":{"133":{"position":[[356,17]]}},"keywords":{}}],["acmeco/tests/sum",{"_index":1735,"title":{},"content":{"132":{"position":[[378,16]]}},"keywords":{}}],["acmeco/tests/two",{"_index":1743,"title":{},"content":{"133":{"position":[[486,17]]}},"keywords":{}}],["acmeco/us",{"_index":451,"title":{},"content":{"16":{"position":[[144,11]]},"71":{"position":[[199,13],[305,13]]},"74":{"position":[[424,12]]}},"keywords":{}}],["acmeco/whoop",{"_index":1890,"title":{},"content":{"160":{"position":[[723,14]]}},"keywords":{}}],["acmeco_db",{"_index":3239,"title":{},"content":{"344":{"position":[[108,9]]},"1387":{"position":[[116,9],[670,9]]}},"keywords":{}}],["acmeco_flow_schema",{"_index":3241,"title":{},"content":{"344":{"position":[[181,18]]},"1387":{"position":[[183,18],[737,18]]}},"keywords":{}}],["acmeco_warehous",{"_index":3243,"title":{},"content":{"344":{"position":[[232,16]]},"1387":{"position":[[213,16],[767,16]]}},"keywords":{}}],["acmeconew/market",{"_index":955,"title":{},"content":{"63":{"position":[[1218,23]]}},"keywords":{}}],["acmemodule.t",{"_index":1340,"title":{},"content":{"94":{"position":[[1015,13]]}},"keywords":{}}],["acmesupport.freshdesk.com",{"_index":3924,"title":{},"content":{"510":{"position":[[145,25]]}},"keywords":{}}],["aco",{"_index":5526,"title":{},"content":{"1140":{"position":[[474,4]]},"1316":{"position":[[474,4]]},"1340":{"position":[[474,4]]},"1351":{"position":[[474,4]]},"1431":{"position":[[497,4]]}},"keywords":{}}],["aconnect",{"_index":5126,"title":{},"content":{"964":{"position":[[77,11]]}},"keywords":{}}],["acquir",{"_index":5757,"title":{},"content":{"1156":{"position":[[506,8],[641,9]]}},"keywords":{}}],["acronym",{"_index":3664,"title":{},"content":{"429":{"position":[[1208,7]]}},"keywords":{}}],["act",{"_index":759,"title":{},"content":{"44":{"position":[[311,5]]},"69":{"position":[[622,3]]},"305":{"position":[[215,3]]},"347":{"position":[[102,6]]},"370":{"position":[[1580,4]]},"1138":{"position":[[871,4]]}},"keywords":{}}],["action",{"_index":909,"title":{},"content":{"60":{"position":[[955,7]]},"110":{"position":[[618,6],[1014,6]]},"138":{"position":[[254,7]]},"141":{"position":[[564,7]]},"142":{"position":[[367,7]]},"210":{"position":[[1561,6]]},"255":{"position":[[1300,7]]},"296":{"position":[[8019,7]]},"316":{"position":[[1625,7]]},"339":{"position":[[132,7]]},"517":{"position":[[971,6]]},"747":{"position":[[304,7]]},"759":{"position":[[252,6]]},"772":{"position":[[263,6]]},"799":{"position":[[250,6]]},"814":{"position":[[250,6]]},"830":{"position":[[250,6]]},"1020":{"position":[[477,7]]},"1140":{"position":[[513,6]]},"1292":{"position":[[368,6]]},"1306":{"position":[[368,6]]},"1316":{"position":[[513,6]]},"1329":{"position":[[368,6]]},"1340":{"position":[[513,6]]},"1351":{"position":[[513,6]]},"1370":{"position":[[373,6]]},"1379":{"position":[[454,6]]},"1403":{"position":[[454,6]]},"1414":{"position":[[454,6]]},"1431":{"position":[[536,6]]},"1465":{"position":[[644,6],[708,7],[778,6],[955,7],[1231,7],[1281,7],[1497,7],[1549,7]]}},"keywords":{}}],["action_breakdown",{"_index":3946,"title":{},"content":{"517":{"position":[[910,17],[952,18],[1006,17],[1060,19]]},"518":{"position":[[387,18]]}},"keywords":{}}],["action_typ",{"_index":3978,"title":{},"content":{"518":{"position":[[406,13]]}},"keywords":{}}],["activ",{"_index":386,"title":{},"content":{"13":{"position":[[477,6]]},"26":{"position":[[407,9]]},"33":{"position":[[27,6]]},"53":{"position":[[499,8]]},"60":{"position":[[441,6]]},"61":{"position":[[475,6],[759,6]]},"82":{"position":[[730,6]]},"107":{"position":[[2882,6]]},"138":{"position":[[1221,8]]},"141":{"position":[[1304,8]]},"142":{"position":[[1198,8]]},"159":{"position":[[937,9]]},"169":{"position":[[29,9]]},"173":{"position":[[367,6]]},"221":{"position":[[1,8]]},"274":{"position":[[25,6]]},"309":{"position":[[249,8]]},"357":{"position":[[4,6]]},"421":{"position":[[73,6]]},"435":{"position":[[68,6]]},"436":{"position":[[299,6]]},"500":{"position":[[46,6]]},"518":{"position":[[1455,10]]},"562":{"position":[[62,6]]},"568":{"position":[[129,6],[153,6],[176,6],[195,6],[213,6]]},"571":{"position":[[484,8]]},"580":{"position":[[52,6],[83,6],[147,6]]},"581":{"position":[[161,8]]},"617":{"position":[[406,8]]},"622":{"position":[[74,8]]},"717":{"position":[[39,6]]},"738":{"position":[[99,8],[145,10],[238,10],[264,8],[404,8]]},"922":{"position":[[1022,6],[2444,6],[2895,8]]},"942":{"position":[[322,6]]},"945":{"position":[[975,6]]},"1008":{"position":[[1052,6]]},"1036":{"position":[[39,6]]},"1077":{"position":[[674,7]]},"1082":{"position":[[193,6]]},"1156":{"position":[[72,6],[884,8]]},"1245":{"position":[[358,8]]},"1292":{"position":[[409,6]]},"1306":{"position":[[409,6]]},"1329":{"position":[[409,6]]},"1361":{"position":[[59,6]]},"1388":{"position":[[158,9],[300,6]]},"1442":{"position":[[723,8]]},"1452":{"position":[[640,6],[1249,7],[3780,7]]},"1461":{"position":[[5120,8]]}},"keywords":{}}],["active_us",{"_index":3647,"title":{},"content":{"425":{"position":[[462,12]]}},"keywords":{}}],["activities_send_email",{"_index":4542,"title":{},"content":{"738":{"position":[[184,21]]}},"keywords":{}}],["activities_x",{"_index":4540,"title":{},"content":{"738":{"position":[[72,12]]}},"keywords":{}}],["activitiesad",{"_index":3927,"title":{},"content":{"512":{"position":[[52,12]]}},"keywords":{}}],["actual",{"_index":1723,"title":{},"content":{"129":{"position":[[383,6]]},"160":{"position":[[676,8]]},"172":{"position":[[230,6]]},"210":{"position":[[387,6]]},"236":{"position":[[2019,6],[2663,8]]},"284":{"position":[[645,6]]},"296":{"position":[[5096,6],[6608,6]]},"314":{"position":[[2490,6]]},"315":{"position":[[1180,6]]},"321":{"position":[[1746,8],[1883,8]]},"322":{"position":[[1647,8]]},"1453":{"position":[[810,9]]},"1471":{"position":[[941,6]]}},"keywords":{}}],["acycl",{"_index":2867,"title":{},"content":{"280":{"position":[[905,7],[973,8]]}},"keywords":{}}],["ad",{"_index":70,"title":{"308":{"position":[[15,6]]},"380":{"position":[[7,3]]},"442":{"position":[[5,3]]},"549":{"position":[[7,3]]},"714":{"position":[[9,3]]}},"content":{"2":{"position":[[142,5]]},"3":{"position":[[1064,5]]},"4":{"position":[[487,2]]},"7":{"position":[[628,6]]},"38":{"position":[[346,5]]},"42":{"position":[[417,5]]},"55":{"position":[[63,6]]},"67":{"position":[[74,5]]},"82":{"position":[[1947,6],[3946,5],[4281,6]]},"84":{"position":[[1384,5]]},"90":{"position":[[545,5]]},"105":{"position":[[885,5]]},"120":{"position":[[2738,5],[2789,5]]},"121":{"position":[[1260,5]]},"122":{"position":[[1553,5]]},"126":{"position":[[413,5],[462,5],[543,5]]},"128":{"position":[[199,5],[462,5]]},"138":{"position":[[587,5]]},"156":{"position":[[627,5]]},"162":{"position":[[83,5],[745,6]]},"163":{"position":[[59,5]]},"173":{"position":[[322,2]]},"208":{"position":[[898,6]]},"253":{"position":[[1541,5],[2567,5]]},"254":{"position":[[1975,6],[3841,5]]},"271":{"position":[[130,6],[411,6]]},"292":{"position":[[208,6]]},"295":{"position":[[198,7]]},"296":{"position":[[7915,5],[8055,6]]},"303":{"position":[[199,6]]},"308":{"position":[[135,5],[400,5],[1022,5]]},"313":{"position":[[1541,5],[2567,5]]},"338":{"position":[[540,6]]},"364":{"position":[[589,3],[729,3],[1371,3],[2345,3]]},"381":{"position":[[71,2],[215,2],[242,2],[280,3],[361,2]]},"383":{"position":[[62,3]]},"384":{"position":[[240,3]]},"385":{"position":[[516,3]]},"386":{"position":[[257,3]]},"387":{"position":[[519,3],[636,3],[727,3],[1393,3]]},"419":{"position":[[1232,5]]},"427":{"position":[[385,5]]},"440":{"position":[[1248,5]]},"445":{"position":[[56,3]]},"446":{"position":[[33,3],[204,3]]},"447":{"position":[[255,3]]},"448":{"position":[[1278,3]]},"480":{"position":[[454,5],[724,5],[887,5]]},"492":{"position":[[406,6]]},"512":{"position":[[94,2]]},"514":{"position":[[84,2]]},"515":{"position":[[96,2],[408,2],[839,3]]},"517":{"position":[[87,2],[651,2],[2906,2],[3070,4]]},"518":{"position":[[1537,3]]},"547":{"position":[[1234,5]]},"552":{"position":[[57,3],[131,3],[407,3]]},"553":{"position":[[20,3],[113,3],[215,3]]},"554":{"position":[[20,3],[75,3],[131,3],[152,3],[185,3]]},"555":{"position":[[254,3]]},"556":{"position":[[344,2],[371,2],[464,4],[631,3],[748,3],[2257,2]]},"558":{"position":[[278,3]]},"560":{"position":[[15,3],[369,3]]},"577":{"position":[[68,2]]},"588":{"position":[[63,2]]},"665":{"position":[[406,6]]},"668":{"position":[[149,2]]},"680":{"position":[[406,6]]},"695":{"position":[[406,6]]},"717":{"position":[[22,2],[92,2]]},"719":{"position":[[254,3]]},"720":{"position":[[868,3]]},"747":{"position":[[264,3],[331,2]]},"821":{"position":[[615,2],[1431,5],[1563,5]]},"895":{"position":[[222,5]]},"900":{"position":[[186,2],[197,5]]},"912":{"position":[[631,2],[1307,6],[1351,2]]},"1009":{"position":[[889,5]]},"1020":{"position":[[214,5],[272,5],[1238,5],[1460,5],[1525,5],[1627,5],[1719,5],[1857,5],[2080,5]]},"1023":{"position":[[1215,5]]},"1080":{"position":[[89,2],[103,3],[125,3],[148,3],[170,3],[283,2],[312,2],[340,2],[574,2],[611,2],[647,3],[679,3]]},"1156":{"position":[[152,5]]},"1232":{"position":[[123,6]]},"1359":{"position":[[338,5]]},"1429":{"position":[[205,6]]},"1448":{"position":[[73,5]]},"1466":{"position":[[43,6]]},"1477":{"position":[[749,6]]}},"keywords":{}}],["ad_account",{"_index":3979,"title":{},"content":{"518":{"position":[[483,10]]}},"keywords":{}}],["ad_cr",{"_index":4000,"title":{},"content":{"518":{"position":[[1605,12]]}},"keywords":{}}],["ad_group_adsad_group_ad_labelad_groupsad_group_labelcampaignscampaign_labelsclick_viewcustomergeographic_viewkeyword_viewuser_location_viewaccount_performance_reportad_performance_reportdisplay_keyword_performance_reportdisplay_topics_performance_reportshopping_performance_report",{"_index":4102,"title":{},"content":{"550":{"position":[[130,280]]}},"keywords":{}}],["ad_id",{"_index":3975,"title":{},"content":{"518":{"position":[[331,7]]}},"keywords":{}}],["ad_set",{"_index":3981,"title":{},"content":{"518":{"position":[[565,7]]}},"keywords":{}}],["ada",{"_index":5941,"title":{},"content":{"1274":{"position":[[257,3]]},"1277":{"position":[[624,3],[676,3]]},"1379":{"position":[[506,3]]},"1403":{"position":[[506,3]]},"1414":{"position":[[506,3]]}},"keywords":{}}],["adaccountsadsadsquadscampaignscreativesmediaorganizationssegmentsadaccountsstatshourlyadaccountsstatsdailyadaccountsstatslifetimeadsstatshourlyadsstatsdailyadsstatshourlyadsstatsdailyadsstatslifetimeadsquadsstatsdailyadsquadsstatslifetimecampaignsstatshourlycampaignsstatsdailycampaignsstatslifetim",{"_index":5208,"title":{},"content":{"1025":{"position":[[73,299]]}},"keywords":{}}],["adapt",{"_index":1697,"title":{},"content":{"124":{"position":[[474,10]]},"239":{"position":[[2632,10]]},"364":{"position":[[486,7]]}},"keywords":{}}],["add",{"_index":385,"title":{"174":{"position":[[0,3]]},"183":{"position":[[0,3]]},"268":{"position":[[0,3]]},"269":{"position":[[0,3]]}},"content":{"13":{"position":[[415,3]]},"33":{"position":[[337,3]]},"35":{"position":[[239,4]]},"43":{"position":[[60,3]]},"44":{"position":[[351,4]]},"54":{"position":[[634,3]]},"55":{"position":[[342,3],[1006,3]]},"56":{"position":[[461,3]]},"58":{"position":[[291,3]]},"63":{"position":[[323,3]]},"67":{"position":[[217,3]]},"80":{"position":[[214,3]]},"82":{"position":[[1099,4]]},"83":{"position":[[692,3],[794,3]]},"90":{"position":[[111,3]]},"100":{"position":[[197,3],[524,3],[697,3]]},"105":{"position":[[976,3]]},"110":{"position":[[665,4]]},"128":{"position":[[14,3]]},"160":{"position":[[145,4]]},"166":{"position":[[661,3]]},"169":{"position":[[530,3]]},"171":{"position":[[141,3]]},"172":{"position":[[140,3]]},"173":{"position":[[655,3],[864,3]]},"174":{"position":[[63,3]]},"183":{"position":[[2280,3]]},"184":{"position":[[249,3],[647,3],[771,3]]},"192":{"position":[[1477,3]]},"204":{"position":[[449,4]]},"206":{"position":[[83,3]]},"218":{"position":[[1059,3]]},"223":{"position":[[865,3]]},"224":{"position":[[727,3]]},"225":{"position":[[485,3]]},"228":{"position":[[743,3],[1024,4],[1306,3]]},"229":{"position":[[433,3]]},"230":{"position":[[822,3],[1125,3]]},"236":{"position":[[3629,3]]},"237":{"position":[[1901,3],[2238,3]]},"239":{"position":[[1797,3]]},"254":{"position":[[203,3],[1772,3]]},"259":{"position":[[558,3],[2252,3]]},"270":{"position":[[1213,3],[1504,3]]},"271":{"position":[[181,3]]},"285":{"position":[[282,3]]},"288":{"position":[[492,3]]},"291":{"position":[[14,3]]},"295":{"position":[[1129,3]]},"296":{"position":[[203,3],[7833,3]]},"301":{"position":[[964,3]]},"302":{"position":[[14,3]]},"308":{"position":[[757,3],[801,3],[926,3]]},"309":{"position":[[1056,3],[3297,3]]},"314":{"position":[[203,3],[1589,3]]},"321":{"position":[[65,3],[2391,3]]},"325":{"position":[[578,4]]},"326":{"position":[[115,3]]},"374":{"position":[[318,3]]},"414":{"position":[[772,3]]},"415":{"position":[[957,3]]},"436":{"position":[[687,3]]},"483":{"position":[[772,3]]},"488":{"position":[[370,3]]},"523":{"position":[[127,3]]},"548":{"position":[[590,3]]},"552":{"position":[[683,3]]},"571":{"position":[[803,3]]},"582":{"position":[[416,3]]},"591":{"position":[[179,3]]},"606":{"position":[[52,3],[137,3]]},"659":{"position":[[527,3]]},"676":{"position":[[370,3]]},"691":{"position":[[370,3]]},"757":{"position":[[2496,3]]},"760":{"position":[[587,3],[891,3]]},"761":{"position":[[589,3]]},"770":{"position":[[2496,3]]},"773":{"position":[[587,3],[891,3]]},"774":{"position":[[589,3]]},"797":{"position":[[2504,3]]},"800":{"position":[[587,3],[891,3]]},"801":{"position":[[595,3]]},"805":{"position":[[200,3]]},"808":{"position":[[220,3]]},"812":{"position":[[2504,3]]},"815":{"position":[[587,3],[891,3]]},"816":{"position":[[595,3]]},"820":{"position":[[200,3]]},"828":{"position":[[2504,3]]},"831":{"position":[[587,3],[891,3]]},"832":{"position":[[595,3]]},"836":{"position":[[200,3]]},"840":{"position":[[1077,3],[1176,3],[1273,3],[1369,3]]},"849":{"position":[[2088,3],[2201,3]]},"864":{"position":[[1477,3],[1622,6]]},"904":{"position":[[1991,3]]},"917":{"position":[[1500,3]]},"918":{"position":[[2283,3]]},"919":{"position":[[2338,3]]},"931":{"position":[[220,3],[1653,3]]},"944":{"position":[[426,3],[454,3]]},"945":{"position":[[502,3]]},"947":{"position":[[836,3]]},"964":{"position":[[747,3]]},"965":{"position":[[1500,3]]},"1008":{"position":[[1808,3]]},"1042":{"position":[[446,3],[916,3]]},"1043":{"position":[[1110,3],[1580,3]]},"1047":{"position":[[275,3]]},"1051":{"position":[[1372,3],[1842,3]]},"1055":{"position":[[275,3]]},"1059":{"position":[[220,3],[1165,3],[1635,3]]},"1063":{"position":[[275,3]]},"1140":{"position":[[544,3]]},"1155":{"position":[[599,3]]},"1177":{"position":[[396,3]]},"1189":{"position":[[375,3]]},"1197":{"position":[[381,3]]},"1204":{"position":[[142,3]]},"1207":{"position":[[464,3]]},"1247":{"position":[[915,3]]},"1248":{"position":[[408,3]]},"1289":{"position":[[669,3]]},"1292":{"position":[[446,3]]},"1297":{"position":[[39,3]]},"1298":{"position":[[865,3]]},"1303":{"position":[[220,3]]},"1306":{"position":[[446,3]]},"1316":{"position":[[544,3]]},"1329":{"position":[[446,3]]},"1340":{"position":[[544,3]]},"1345":{"position":[[39,3]]},"1346":{"position":[[865,3]]},"1351":{"position":[[544,3]]},"1357":{"position":[[313,3]]},"1370":{"position":[[385,3]]},"1379":{"position":[[556,3]]},"1387":{"position":[[414,3],[1040,3]]},"1397":{"position":[[221,3]]},"1398":{"position":[[220,3]]},"1403":{"position":[[556,3]]},"1414":{"position":[[556,3]]},"1418":{"position":[[221,3]]},"1421":{"position":[[401,3]]},"1429":{"position":[[139,3]]},"1431":{"position":[[567,3]]},"1448":{"position":[[271,3]]},"1472":{"position":[[377,3]]},"1477":{"position":[[266,5],[428,5],[3032,5]]}},"keywords":{}}],["add"",{"_index":6715,"title":{},"content":{"1477":{"position":[[107,11],[173,11]]}},"keywords":{}}],["add?contact",{"_index":1279,"title":{},"content":{"84":{"position":[[1442,11]]}},"keywords":{}}],["addeda",{"_index":3040,"title":{},"content":{"306":{"position":[[296,6]]}},"keywords":{}}],["addit",{"_index":849,"title":{},"content":{"56":{"position":[[1685,10],[2605,10]]},"67":{"position":[[221,10]]},"76":{"position":[[297,10]]},"81":{"position":[[1905,10]]},"94":{"position":[[58,10]]},"104":{"position":[[80,11]]},"112":{"position":[[504,10]]},"117":{"position":[[4,8]]},"120":{"position":[[1828,10]]},"129":{"position":[[403,10]]},"137":{"position":[[77,10]]},"159":{"position":[[346,10]]},"191":{"position":[[256,10]]},"208":{"position":[[4,8]]},"218":{"position":[[1063,10]]},"307":{"position":[[2778,8]]},"309":{"position":[[2634,8]]},"315":{"position":[[2408,8]]},"319":{"position":[[216,10]]},"324":{"position":[[116,8]]},"343":{"position":[[507,10],[621,10],[998,10]]},"371":{"position":[[1474,10]]},"393":{"position":[[457,10]]},"398":{"position":[[448,10]]},"402":{"position":[[502,10]]},"418":{"position":[[515,10]]},"419":{"position":[[1418,10]]},"433":{"position":[[883,10]]},"441":{"position":[[27,10]]},"488":{"position":[[374,10]]},"504":{"position":[[1047,10]]},"531":{"position":[[543,10]]},"546":{"position":[[1222,10]]},"547":{"position":[[1420,10]]},"548":{"position":[[1233,8]]},"582":{"position":[[4,8]]},"606":{"position":[[4,8],[339,10]]},"637":{"position":[[367,10],[391,10]]},"639":{"position":[[1045,10]]},"659":{"position":[[531,10]]},"676":{"position":[[374,10]]},"691":{"position":[[374,10]]},"724":{"position":[[154,10]]},"753":{"position":[[504,10],[619,10]]},"758":{"position":[[458,10]]},"764":{"position":[[979,10]]},"767":{"position":[[650,10],[765,10]]},"771":{"position":[[458,10]]},"777":{"position":[[979,10]]},"784":{"position":[[298,8],[422,10]]},"792":{"position":[[928,10],[1044,10]]},"793":{"position":[[463,10],[579,10]]},"798":{"position":[[456,10]]},"804":{"position":[[977,10]]},"808":{"position":[[479,10],[595,10]]},"813":{"position":[[456,10]]},"819":{"position":[[977,10]]},"824":{"position":[[720,10],[836,10]]},"829":{"position":[[456,10]]},"835":{"position":[[977,10]]},"847":{"position":[[115,10]]},"849":{"position":[[1993,10]]},"866":{"position":[[480,10],[596,10]]},"878":{"position":[[490,10],[606,10]]},"900":{"position":[[308,10]]},"904":{"position":[[719,10],[835,10]]},"908":{"position":[[502,10]]},"918":{"position":[[928,10],[1044,10]]},"919":{"position":[[463,10],[579,10]]},"922":{"position":[[2807,10]]},"924":{"position":[[502,10]]},"931":{"position":[[483,10],[599,10]]},"935":{"position":[[502,10]]},"951":{"position":[[502,10]]},"969":{"position":[[502,10]]},"1023":{"position":[[1401,10]]},"1042":{"position":[[1269,10],[1384,10]]},"1043":{"position":[[463,10],[579,10]]},"1046":{"position":[[436,10]]},"1051":{"position":[[719,10],[835,10]]},"1054":{"position":[[436,10]]},"1059":{"position":[[483,10],[599,10]]},"1062":{"position":[[436,10]]},"1123":{"position":[[334,10]]},"1138":{"position":[[1361,10],[1389,10]]},"1154":{"position":[[664,10],[790,10]]},"1156":{"position":[[100,10]]},"1198":{"position":[[387,8],[511,10]]},"1239":{"position":[[221,10]]},"1243":{"position":[[1328,10]]},"1247":{"position":[[922,8]]},"1255":{"position":[[298,8],[422,10]]},"1275":{"position":[[261,10]]},"1282":{"position":[[125,8]]},"1288":{"position":[[4,8]]},"1289":{"position":[[1004,10],[1129,10]]},"1303":{"position":[[483,10],[599,10],[715,10],[840,10]]},"1310":{"position":[[130,8]]},"1313":{"position":[[905,10],[933,10]]},"1322":{"position":[[1223,10],[1348,10]]},"1337":{"position":[[905,10],[933,10]]},"1348":{"position":[[905,10],[933,10]]},"1373":{"position":[[701,10],[817,10]]},"1374":{"position":[[701,10],[817,10]]},"1397":{"position":[[480,10],[596,10]]},"1398":{"position":[[479,10],[595,10]]},"1408":{"position":[[542,10],[657,10]]},"1409":{"position":[[463,10],[579,10]]},"1427":{"position":[[632,10],[660,10]]},"1451":{"position":[[671,10]]},"1471":{"position":[[1071,10]]},"1477":{"position":[[388,10],[541,10],[622,9]]}},"keywords":{}}],["addition",{"_index":3667,"title":{},"content":{"430":{"position":[[185,13]]},"1448":{"position":[[289,13]]}},"keywords":{}}],["additional_table_create_sql",{"_index":6421,"title":{},"content":{"1429":{"position":[[225,28],[792,28]]}},"keywords":{}}],["additionalproperti",{"_index":5163,"title":{},"content":{"1008":{"position":[[1670,21]]},"1467":{"position":[[820,21]]},"1477":{"position":[[1239,21],[1274,21],[3467,21]]}},"keywords":{}}],["addnewbind",{"_index":815,"title":{},"content":{"55":{"position":[[298,14]]},"56":{"position":[[509,15]]}},"keywords":{}}],["addnewbindings"break",{"_index":828,"title":{},"content":{"55":{"position":[[1047,28]]}},"keywords":{}}],["address",{"_index":112,"title":{"334":{"position":[[16,9]]},"335":{"position":[[3,9]]}},"content":{"3":{"position":[[288,9]]},"45":{"position":[[18,11]]},"81":{"position":[[471,7],[1362,8],[2655,8]]},"83":{"position":[[277,9],[606,7],[1019,8]]},"156":{"position":[[420,10]]},"203":{"position":[[526,9]]},"204":{"position":[[356,10],[461,8]]},"206":{"position":[[233,7],[468,8],[539,8]]},"221":{"position":[[1911,10]]},"223":{"position":[[723,7],[919,7],[985,8]]},"225":{"position":[[161,8]]},"238":{"position":[[500,7]]},"239":{"position":[[2349,9]]},"247":{"position":[[90,8],[132,8]]},"335":{"position":[[30,9]]},"370":{"position":[[95,7],[123,8],[157,7],[176,8],[286,7]]},"371":{"position":[[181,8],[371,7]]},"402":{"position":[[86,7]]},"430":{"position":[[305,10]]},"477":{"position":[[919,7]]},"517":{"position":[[3399,7],[3698,7]]},"540":{"position":[[173,7]]},"598":{"position":[[881,7]]},"617":{"position":[[909,8]]},"739":{"position":[[37,9]]},"753":{"position":[[180,8],[257,10],[1660,7]]},"757":{"position":[[76,7]]},"758":{"position":[[169,8]]},"767":{"position":[[60,8],[403,10],[2464,7]]},"770":{"position":[[76,7]]},"771":{"position":[[169,8]]},"780":{"position":[[267,8],[567,10]]},"782":{"position":[[69,7]]},"783":{"position":[[109,8]]},"792":{"position":[[716,10],[2445,7]]},"793":{"position":[[251,10],[1683,7]]},"797":{"position":[[76,7]]},"798":{"position":[[167,8]]},"808":{"position":[[240,9],[267,10],[1552,8],[1633,7]]},"812":{"position":[[76,7]]},"813":{"position":[[167,8]]},"824":{"position":[[508,10],[2576,7]]},"828":{"position":[[76,7]]},"829":{"position":[[167,8]]},"840":{"position":[[96,8]]},"857":{"position":[[230,8]]},"867":{"position":[[69,7]]},"868":{"position":[[108,8]]},"879":{"position":[[69,7]]},"880":{"position":[[118,8]]},"904":{"position":[[507,10],[2391,7]]},"907":{"position":[[69,7]]},"908":{"position":[[182,8]]},"918":{"position":[[716,10],[2683,7]]},"919":{"position":[[251,10],[2590,7]]},"922":{"position":[[1654,7]]},"923":{"position":[[69,7]]},"924":{"position":[[182,8]]},"931":{"position":[[244,9],[271,10],[2031,8],[2112,7]]},"934":{"position":[[69,7]]},"935":{"position":[[182,8]]},"946":{"position":[[58,9],[156,10]]},"947":{"position":[[745,8]]},"950":{"position":[[69,7]]},"951":{"position":[[182,8]]},"960":{"position":[[203,9]]},"963":{"position":[[87,7]]},"964":{"position":[[310,7],[342,7]]},"968":{"position":[[69,7]]},"969":{"position":[[182,8]]},"989":{"position":[[468,7]]},"1004":{"position":[[551,7]]},"1018":{"position":[[81,9]]},"1021":{"position":[[342,7]]},"1022":{"position":[[108,8]]},"1042":{"position":[[1442,9]]},"1043":{"position":[[251,10],[1925,7]]},"1045":{"position":[[76,7]]},"1046":{"position":[[123,8]]},"1051":{"position":[[507,10],[2107,7]]},"1053":{"position":[[76,7]]},"1054":{"position":[[123,8]]},"1059":{"position":[[244,9],[271,10],[1878,8],[1959,7]]},"1061":{"position":[[76,7]]},"1062":{"position":[[123,8]]},"1131":{"position":[[114,7]]},"1138":{"position":[[95,7],[123,8],[157,7],[176,8],[351,8],[360,7]]},"1139":{"position":[[137,8]]},"1151":{"position":[[69,7]]},"1152":{"position":[[131,8]]},"1154":{"position":[[168,10]]},"1188":{"position":[[69,7]]},"1189":{"position":[[72,8]]},"1198":{"position":[[130,10]]},"1239":{"position":[[58,7]]},"1241":{"position":[[171,8]]},"1251":{"position":[[329,10]]},"1253":{"position":[[69,7]]},"1254":{"position":[[122,8]]},"1267":{"position":[[58,7]]},"1270":{"position":[[140,8]]},"1283":{"position":[[287,9]]},"1285":{"position":[[143,8],[152,7]]},"1286":{"position":[[2082,7]]},"1287":{"position":[[131,8]]},"1289":{"position":[[577,9],[689,9],[716,10],[1239,7],[1569,8]]},"1297":{"position":[[63,9],[90,10]]},"1298":{"position":[[723,7],[919,7],[985,8],[1071,7]]},"1300":{"position":[[143,8],[152,7]]},"1301":{"position":[[1918,7]]},"1302":{"position":[[131,8]]},"1303":{"position":[[244,9],[271,10],[950,7],[1674,8],[1755,7]]},"1310":{"position":[[559,7],[890,8]]},"1311":{"position":[[123,10]]},"1313":{"position":[[134,8],[143,7]]},"1314":{"position":[[134,8]]},"1321":{"position":[[370,10]]},"1322":{"position":[[1458,7]]},"1324":{"position":[[143,8],[152,7]]},"1325":{"position":[[2082,7]]},"1326":{"position":[[131,8]]},"1334":{"position":[[458,10]]},"1335":{"position":[[1105,7]]},"1337":{"position":[[134,8],[143,7]]},"1338":{"position":[[134,8]]},"1345":{"position":[[63,9],[90,10]]},"1346":{"position":[[723,7],[919,7],[985,8],[1071,7],[1295,8]]},"1348":{"position":[[134,8],[143,7]]},"1349":{"position":[[134,8]]},"1373":{"position":[[489,10],[1356,7]]},"1374":{"position":[[489,10],[1360,7]]},"1376":{"position":[[143,8],[152,7]]},"1377":{"position":[[135,8]]},"1397":{"position":[[241,9],[268,10],[1113,8],[1194,7]]},"1398":{"position":[[240,9],[267,10],[1116,8],[1197,7]]},"1400":{"position":[[143,8],[152,7]]},"1401":{"position":[[135,8]]},"1408":{"position":[[715,9]]},"1409":{"position":[[251,10],[1198,7]]},"1411":{"position":[[143,8],[152,7]]},"1412":{"position":[[135,8]]},"1427":{"position":[[134,8],[143,7]]},"1428":{"position":[[137,8]]},"1455":{"position":[[605,9]]},"1472":{"position":[[730,8]]}},"keywords":{}}],["address>",{"_index":5518,"title":{},"content":{"1139":{"position":[[254,11]]}},"keywords":{}}],["address"",{"_index":6250,"title":{},"content":{"1303":{"position":[[1162,14]]}},"keywords":{}}],["address.flow",{"_index":3207,"title":{},"content":{"332":{"position":[[561,12]]}},"keywords":{}}],["address=(protocol=tcps)(host",{"_index":4904,"title":{},"content":{"879":{"position":[[201,38]]}},"keywords":{}}],["addresseschargescollectionscustomersdiscountsmetafieldsonetimesordersproductsshopsubscript",{"_index":5120,"title":{},"content":{"956":{"position":[[72,94]]}},"keywords":{}}],["addressfor",{"_index":5129,"title":{},"content":{"964":{"position":[[637,10]]}},"keywords":{}}],["addressin",{"_index":5130,"title":{},"content":{"964":{"position":[[775,9]]}},"keywords":{}}],["aderiv",{"_index":5760,"title":{},"content":{"1157":{"position":[[186,11]]}},"keywords":{}}],["adgroupadreport",{"_index":4122,"title":{},"content":{"556":{"position":[[1595,15]]}},"keywords":{}}],["adjust",{"_index":2252,"title":{},"content":{"208":{"position":[[1051,7]]},"209":{"position":[[1601,6]]},"240":{"position":[[447,9]]},"909":{"position":[[673,11]]},"925":{"position":[[673,11]]},"936":{"position":[[673,11]]},"952":{"position":[[673,11]]},"970":{"position":[[673,11]]},"1172":{"position":[[561,8],[650,8]]},"1222":{"position":[[561,8],[650,8]]}},"keywords":{}}],["admin",{"_index":1768,"title":{"154":{"position":[[0,5]]}},"content":{"137":{"position":[[204,6]]},"154":{"position":[[8,5],[1306,6]]},"206":{"position":[[603,5]]},"247":{"position":[[304,5]]},"249":{"position":[[23,5]]},"337":{"position":[[295,6],[338,5]]},"338":{"position":[[109,5],[395,5],[547,6]]},"339":{"position":[[280,5]]},"341":{"position":[[7,6],[303,5],[453,5]]},"611":{"position":[[533,5]]},"645":{"position":[[246,5]]},"652":{"position":[[246,5]]},"686":{"position":[[263,6]]},"723":{"position":[[75,5]]},"780":{"position":[[364,5]]},"880":{"position":[[298,5]]},"1118":{"position":[[204,5],[516,5]]},"1292":{"position":[[485,5]]},"1306":{"position":[[485,5]]},"1329":{"position":[[485,5]]},"1354":{"position":[[102,5]]},"1356":{"position":[[152,5]]},"1379":{"position":[[610,5]]},"1403":{"position":[[610,5]]},"1414":{"position":[[610,5]]},"1448":{"position":[[995,5]]},"1461":{"position":[[3850,5]]}},"keywords":{}}],["admin@yourdomain.com",{"_index":4311,"title":{},"content":{"612":{"position":[[269,20]]}},"keywords":{}}],["administr",{"_index":4035,"title":{},"content":{"531":{"position":[[445,13]]},"532":{"position":[[259,13]]},"611":{"position":[[580,14]]},"690":{"position":[[13,14]]},"842":{"position":[[286,13]]},"849":{"position":[[1672,14]]},"989":{"position":[[168,14]]},"1004":{"position":[[251,14]]}},"keywords":{}}],["adminscompaniescompani",{"_index":4427,"title":{},"content":{"682":{"position":[[71,22]]}},"keywords":{}}],["ads)ad",{"_index":4512,"title":{},"content":{"715":{"position":[[133,6]]}},"keywords":{}}],["ads.dev",{"_index":3319,"title":{},"content":{"364":{"position":[[646,7]]}},"keywords":{}}],["ads:dev",{"_index":3323,"title":{},"content":{"364":{"position":[[784,7],[1428,7],[2404,7]]},"388":{"position":[[166,7]]},"449":{"position":[[164,7]]},"557":{"position":[[166,7]]},"721":{"position":[[168,7]]}},"keywords":{}}],["ads_insight",{"_index":3983,"title":{},"content":{"518":{"position":[[641,12]]}},"keywords":{}}],["ads_insights_action_typ",{"_index":3995,"title":{},"content":{"518":{"position":[[1265,24]]}},"keywords":{}}],["ads_insights_age_and_gend",{"_index":3985,"title":{},"content":{"518":{"position":[[727,27]]}},"keywords":{}}],["ads_insights_countri",{"_index":3987,"title":{},"content":{"518":{"position":[[843,20]]}},"keywords":{}}],["ads_insights_dma",{"_index":3991,"title":{},"content":{"518":{"position":[[1045,16]]}},"keywords":{}}],["ads_insights_platform_and_devic",{"_index":3993,"title":{},"content":{"518":{"position":[[1139,32]]}},"keywords":{}}],["ads_insights_region",{"_index":3989,"title":{},"content":{"518":{"position":[[945,19]]}},"keywords":{}}],["ads_manag",{"_index":3936,"title":{},"content":{"515":{"position":[[662,16],[909,14]]}},"keywords":{}}],["ads_read",{"_index":3937,"title":{},"content":{"515":{"position":[[679,9],[885,8]]}},"keywords":{}}],["adsad",{"_index":3926,"title":{},"content":{"512":{"position":[[46,5]]}},"keywords":{}}],["adset",{"_index":3967,"title":{},"content":{"517":{"position":[[3079,6]]}},"keywords":{}}],["adssponsor",{"_index":3470,"title":{},"content":{"381":{"position":[[388,12]]}},"keywords":{}}],["advanc",{"_index":771,"title":{"47":{"position":[[0,8]]},"260":{"position":[[0,8]]},"419":{"position":[[0,9]]},"440":{"position":[[0,9]]},"504":{"position":[[0,9]]},"547":{"position":[[0,9]]},"548":{"position":[[0,9]]},"639":{"position":[[0,9]]},"640":{"position":[[0,9]]},"1023":{"position":[[0,9]]},"1268":{"position":[[0,9]]}},"content":{"47":{"position":[[24,8],[149,8]]},"89":{"position":[[430,8]]},"122":{"position":[[2168,8]]},"135":{"position":[[631,8]]},"169":{"position":[[168,8]]},"190":{"position":[[1502,8]]},"219":{"position":[[522,8]]},"239":{"position":[[1599,7]]},"240":{"position":[[2926,8]]},"259":{"position":[[336,8],[2025,8]]},"292":{"position":[[182,7]]},"301":{"position":[[1223,8]]},"303":{"position":[[173,7]]},"366":{"position":[[483,8]]},"370":{"position":[[634,9],[644,8],[673,8]]},"377":{"position":[[70,8],[99,8]]},"378":{"position":[[281,9]]},"417":{"position":[[82,8]]},"438":{"position":[[82,8]]},"502":{"position":[[511,9],[521,8],[542,8]]},"515":{"position":[[249,8],[738,8],[793,8]]},"545":{"position":[[82,8]]},"764":{"position":[[1076,8]]},"777":{"position":[[1076,8]]},"804":{"position":[[1074,8]]},"819":{"position":[[1074,8]]},"835":{"position":[[1074,8]]},"842":{"position":[[1250,8]]},"843":{"position":[[342,9]]},"868":{"position":[[256,9]]},"903":{"position":[[509,8]]},"907":{"position":[[417,9],[427,8],[456,8]]},"915":{"position":[[509,8]]},"922":{"position":[[1272,7],[1332,7],[1456,7],[1621,10]]},"923":{"position":[[417,9],[427,8],[456,8]]},"930":{"position":[[509,8]]},"934":{"position":[[417,9],[427,8],[456,8]]},"950":{"position":[[417,9],[427,8],[456,8]]},"963":{"position":[[663,8]]},"968":{"position":[[417,9],[427,8],[456,8]]},"1020":{"position":[[697,8]]},"1021":{"position":[[1082,9],[1104,8]]},"1031":{"position":[[370,8]]},"1034":{"position":[[644,9],[654,8],[683,8]]},"1045":{"position":[[402,9],[412,8],[441,8]]},"1053":{"position":[[402,9],[412,8],[441,8]]},"1061":{"position":[[402,9],[412,8],[441,8]]},"1136":{"position":[[209,7]]},"1149":{"position":[[338,7]]},"1200":{"position":[[519,8]]},"1201":{"position":[[588,9]]},"1277":{"position":[[690,9],[712,8]]},"1285":{"position":[[748,9],[758,8],[787,8]]},"1300":{"position":[[748,9],[758,8],[787,8]]},"1309":{"position":[[209,7]]},"1313":{"position":[[602,9],[612,8],[641,8]]},"1324":{"position":[[748,9],[758,8],[787,8]]},"1332":{"position":[[209,7]]},"1337":{"position":[[602,9],[612,8],[641,8]]},"1343":{"position":[[209,7]]},"1348":{"position":[[602,9],[612,8],[641,8]]},"1356":{"position":[[454,8],[955,8]]},"1359":{"position":[[469,8]]},"1426":{"position":[[353,7]]},"1473":{"position":[[276,8]]}},"keywords":{}}],["advanced.incremental_scn_rang",{"_index":4893,"title":{},"content":{"870":{"position":[[289,30]]}},"keywords":{}}],["advanced/ascendingkey",{"_index":3587,"title":{},"content":{"417":{"position":[[152,23]]},"438":{"position":[[152,23]]},"502":{"position":[[612,23]]},"545":{"position":[[152,23]]},"1021":{"position":[[1174,23]]}},"keywords":{}}],["advanced/backfill_chunk_s",{"_index":3406,"title":{},"content":{"370":{"position":[[743,29]]},"757":{"position":[[1510,29]]},"770":{"position":[[1510,29]]},"797":{"position":[[1510,29]]},"812":{"position":[[1510,29]]},"828":{"position":[[1510,29]]},"867":{"position":[[835,29]]},"879":{"position":[[992,29]]},"907":{"position":[[526,29]]},"923":{"position":[[526,29]]},"934":{"position":[[526,29]]},"950":{"position":[[526,29]]},"968":{"position":[[526,29]]},"1045":{"position":[[511,29]]},"1053":{"position":[[511,29]]},"1061":{"position":[[511,29]]}},"keywords":{}}],["advanced/backfillseg",{"_index":3529,"title":{},"content":{"397":{"position":[[373,25]]}},"keywords":{}}],["advanced/connection_limit",{"_index":4765,"title":{},"content":{"842":{"position":[[1668,26]]}},"keywords":{}}],["advanced/dbnam",{"_index":4611,"title":{},"content":{"757":{"position":[[933,16]]},"770":{"position":[[933,16]]},"797":{"position":[[933,16]]},"812":{"position":[[933,16]]},"828":{"position":[[933,16]]}},"keywords":{}}],["advanced/default_interv",{"_index":4918,"title":{},"content":{"879":{"position":[[1363,26]]}},"keywords":{}}],["advanced/dictionary_mod",{"_index":4871,"title":{},"content":{"867":{"position":[[1261,25]]}},"keywords":{}}],["advanced/disable_backfil",{"_index":3446,"title":{},"content":{"377":{"position":[[169,26]]}},"keywords":{}}],["advanced/disable_real_tim",{"_index":3447,"title":{},"content":{"377":{"position":[[343,27]]}},"keywords":{}}],["advanced/discover_schema",{"_index":4874,"title":{},"content":{"867":{"position":[[1654,26]]}},"keywords":{}}],["advanced/endpoint",{"_index":3531,"title":{},"content":{"397":{"position":[[540,17]]},"417":{"position":[[553,18]]},"1125":{"position":[[332,17]]}},"keywords":{}}],["advanced/flowschema",{"_index":5220,"title":{},"content":{"1034":{"position":[[753,20]]}},"keywords":{}}],["advanced/incremental_chunk_s",{"_index":4868,"title":{},"content":{"867":{"position":[[988,32]]}},"keywords":{}}],["advanced/incremental_scn_rang",{"_index":4869,"title":{},"content":{"867":{"position":[[1150,31]]}},"keywords":{}}],["advanced/is_free_plan",{"_index":3448,"title":{},"content":{"377":{"position":[[515,22]]}},"keywords":{}}],["advanced/max_backfill_interv",{"_index":3449,"title":{},"content":{"377":{"position":[[622,31]]}},"keywords":{}}],["advanced/min_backfill_interv",{"_index":3450,"title":{},"content":{"377":{"position":[[853,31]]}},"keywords":{}}],["advanced/node_id",{"_index":4613,"title":{},"content":{"757":{"position":[[1144,17]]},"770":{"position":[[1144,17]]},"797":{"position":[[1144,17]]},"812":{"position":[[1144,17]]},"828":{"position":[[1144,17]]},"867":{"position":[[1852,17]]}},"keywords":{}}],["advanced/number_of_replica",{"_index":5828,"title":{},"content":{"1196":{"position":[[704,27]]}},"keywords":{}}],["advanced/pol",{"_index":3847,"title":{},"content":{"482":{"position":[[355,14]]}},"keywords":{}}],["advanced/publicationnam",{"_index":3408,"title":{},"content":{"370":{"position":[[895,25]]},"907":{"position":[[678,25]]},"923":{"position":[[678,25]]},"934":{"position":[[678,25]]},"950":{"position":[[678,25]]},"968":{"position":[[678,25]]}},"keywords":{}}],["advanced/scanlimit",{"_index":3532,"title":{},"content":{"397":{"position":[[688,18]]}},"keywords":{}}],["advanced/skip_backfil",{"_index":3410,"title":{},"content":{"370":{"position":[[1032,24]]},"757":{"position":[[1377,24]]},"770":{"position":[[1377,24]]},"797":{"position":[[1377,24]]},"812":{"position":[[1377,24]]},"828":{"position":[[1377,24]]},"867":{"position":[[493,24]]},"907":{"position":[[815,24]]},"923":{"position":[[815,24]]},"934":{"position":[[815,24]]},"950":{"position":[[815,24]]},"968":{"position":[[815,24]]},"1045":{"position":[[663,24]]},"1053":{"position":[[663,24]]},"1061":{"position":[[663,24]]}},"keywords":{}}],["advanced/skip_binlog_retention_check",{"_index":4617,"title":{},"content":{"757":{"position":[[1664,37]]},"770":{"position":[[1664,37]]},"797":{"position":[[1664,37]]},"812":{"position":[[1664,37]]},"828":{"position":[[1664,37]]}},"keywords":{}}],["advanced/skip_flashback_retention_check",{"_index":4916,"title":{},"content":{"879":{"position":[[1145,41]]}},"keywords":{}}],["advanced/slotnam",{"_index":3413,"title":{},"content":{"370":{"position":[[1165,18]]},"907":{"position":[[948,18]]},"923":{"position":[[948,18]]},"934":{"position":[[948,18]]},"950":{"position":[[948,18]]},"968":{"position":[[948,18]]}},"keywords":{}}],["advanced/ssl_client_cert",{"_index":5973,"title":{},"content":{"1285":{"position":[[1088,25]]},"1300":{"position":[[1088,25]]},"1324":{"position":[[1088,25]]}},"keywords":{}}],["advanced/ssl_client_key",{"_index":5974,"title":{},"content":{"1285":{"position":[[1217,24]]},"1300":{"position":[[1217,24]]},"1324":{"position":[[1217,24]]}},"keywords":{}}],["advanced/ssl_server_ca",{"_index":5972,"title":{},"content":{"1285":{"position":[[961,23]]},"1300":{"position":[[961,23]]},"1324":{"position":[[961,23]]}},"keywords":{}}],["advanced/sslmod",{"_index":5001,"title":{},"content":{"907":{"position":[[1284,17]]},"923":{"position":[[1284,17]]},"934":{"position":[[1284,17]]},"950":{"position":[[1284,17]]},"968":{"position":[[1284,17]]},"1285":{"position":[[857,17]]},"1300":{"position":[[857,17]]},"1313":{"position":[[711,17]]},"1324":{"position":[[857,17]]},"1337":{"position":[[711,17]]},"1348":{"position":[[711,17]]}},"keywords":{}}],["advanced/start_d",{"_index":4766,"title":{},"content":{"842":{"position":[[1707,20]]}},"keywords":{}}],["advanced/stop_d",{"_index":3452,"title":{},"content":{"377":{"position":[[1058,19]]}},"keywords":{}}],["advanced/task_limit",{"_index":4763,"title":{},"content":{"842":{"position":[[1453,20]]}},"keywords":{}}],["advanced/watermarks_t",{"_index":4610,"title":{},"content":{"757":{"position":[[736,26]]},"770":{"position":[[736,26]]},"797":{"position":[[736,26]]},"812":{"position":[[736,26]]},"828":{"position":[[736,26]]}},"keywords":{}}],["advanced/watermarkst",{"_index":3415,"title":{},"content":{"370":{"position":[[1286,25]]},"867":{"position":[[626,25]]},"907":{"position":[[1069,25]]},"923":{"position":[[1069,25]]},"934":{"position":[[1069,25]]},"950":{"position":[[1069,25]]},"968":{"position":[[1069,25]]},"1045":{"position":[[796,25]]},"1053":{"position":[[796,25]]},"1061":{"position":[[796,25]]}},"keywords":{}}],["advancedcollectionsettings/clustering_key",{"_index":6267,"title":{},"content":{"1356":{"position":[[991,42],[1081,43]]}},"keywords":{}}],["advancedcollectionsettings/retention_sec",{"_index":6269,"title":{},"content":{"1356":{"position":[[1175,42]]}},"keywords":{}}],["advaned/openaiorg",{"_index":5957,"title":{},"content":{"1277":{"position":[[782,18]]}},"keywords":{}}],["advantag",{"_index":1461,"title":{},"content":{"102":{"position":[[200,9]]},"281":{"position":[[2411,11]]},"1391":{"position":[[370,9]]},"1461":{"position":[[2083,11]]}},"keywords":{}}],["advertis",{"_index":3740,"title":{},"content":{"448":{"position":[[425,11],[553,11],[1084,11]]},"1080":{"position":[[195,11],[224,11],[252,11],[459,11],[497,11],[534,11]]},"1083":{"position":[[281,10]]},"1085":{"position":[[519,10],[537,10]]}},"keywords":{}}],["advertiser_id",{"_index":5343,"title":{},"content":{"1086":{"position":[[268,14]]}},"keywords":{}}],["advisori",{"_index":1473,"title":{},"content":{"103":{"position":[[284,9]]}},"keywords":{}}],["adword",{"_index":4101,"title":{},"content":{"550":{"position":[[116,7]]}},"keywords":{}}],["affect",{"_index":398,"title":{},"content":{"13":{"position":[[820,8],[1746,8],[1890,9]]},"208":{"position":[[1063,8],[1960,8]]},"259":{"position":[[1497,7],[3051,7]]},"308":{"position":[[871,8],[1196,8]]},"309":{"position":[[1366,6]]},"1208":{"position":[[253,6]]},"1358":{"position":[[157,6]]},"1448":{"position":[[345,6]]}},"keywords":{}}],["afford",{"_index":1932,"title":{},"content":{"163":{"position":[[1132,7]]},"321":{"position":[[2328,7]]}},"keywords":{}}],["after_cursor",{"_index":5511,"title":{},"content":{"1134":{"position":[[2905,12],[3007,12]]}},"keywords":{}}],["again",{"_index":1187,"title":{},"content":{"82":{"position":[[3130,6]]},"105":{"position":[[1323,6]]},"110":{"position":[[1177,5]]},"115":{"position":[[389,5]]},"217":{"position":[[2102,6]]},"218":{"position":[[787,6],[2074,6]]},"239":{"position":[[2902,6]]},"271":{"position":[[475,5]]},"275":{"position":[[723,5]]},"290":{"position":[[1567,6]]},"291":{"position":[[788,6]]},"302":{"position":[[788,6]]},"322":{"position":[[1567,5]]},"840":{"position":[[1524,5]]},"849":{"position":[[1355,5],[2415,5]]},"1459":{"position":[[1007,5]]},"1461":{"position":[[4487,5]]},"1477":{"position":[[770,6]]}},"keywords":{}}],["again"",{"_index":1726,"title":{},"content":{"129":{"position":[[921,11],[1138,11]]}},"keywords":{}}],["again.go",{"_index":3702,"title":{},"content":{"436":{"position":[[819,8]]}},"keywords":{}}],["against",{"_index":174,"title":{},"content":{"4":{"position":[[517,7]]},"34":{"position":[[785,7]]},"69":{"position":[[261,7]]},"70":{"position":[[99,7]]},"82":{"position":[[563,7]]},"106":{"position":[[455,7]]},"128":{"position":[[79,7]]},"129":{"position":[[564,7]]},"160":{"position":[[368,7]]},"183":{"position":[[3437,7]]},"185":{"position":[[124,7]]},"267":{"position":[[645,7]]},"309":{"position":[[586,7],[3396,7]]},"483":{"position":[[78,7]]},"558":{"position":[[255,7]]},"595":{"position":[[555,7],[1090,7]]},"864":{"position":[[165,7]]},"876":{"position":[[165,7]]},"912":{"position":[[925,7]]},"1039":{"position":[[192,7]]},"1049":{"position":[[118,7]]},"1057":{"position":[[121,7]]},"1268":{"position":[[436,7]]},"1286":{"position":[[1947,7]]},"1292":{"position":[[557,7]]},"1301":{"position":[[1783,7]]},"1306":{"position":[[557,7]]},"1325":{"position":[[1947,7]]},"1329":{"position":[[557,7]]}},"keywords":{}}],["agent",{"_index":1190,"title":{},"content":{"82":{"position":[[3327,6]]},"510":{"position":[[201,6]]},"540":{"position":[[149,5],[161,5]]}},"keywords":{}}],["agent/network",{"_index":462,"title":{},"content":{"16":{"position":[[344,14]]}},"keywords":{}}],["agent/typ",{"_index":460,"title":{},"content":{"16":{"position":[[297,11]]}},"keywords":{}}],["agent_availabilityagent_statuscontactconversationcustomerpayment_requesttask",{"_index":4049,"title":{},"content":{"537":{"position":[[83,76]]}},"keywords":{}}],["agentavailabilityev",{"_index":4054,"title":{},"content":{"541":{"position":[[188,23]]}},"keywords":{}}],["agentemail",{"_index":4051,"title":{},"content":{"540":{"position":[[137,11]]},"541":{"position":[[123,11]]}},"keywords":{}}],["agentsbusi",{"_index":3904,"title":{},"content":{"506":{"position":[[46,14]]}},"keywords":{}}],["aggreg",{"_index":720,"title":{"1087":{"position":[[7,12]]}},"content":{"40":{"position":[[324,13]]},"42":{"position":[[707,11]]},"112":{"position":[[77,11]]},"113":{"position":[[575,10],[743,10]]},"164":{"position":[[1191,12],[1429,13]]},"281":{"position":[[273,10],[3168,13]]},"517":{"position":[[2176,9],[2377,10]]},"1085":{"position":[[1010,11],[1059,11]]},"1087":{"position":[[85,10]]},"1292":{"position":[[597,9]]},"1306":{"position":[[597,9]]},"1329":{"position":[[597,9]]},"1379":{"position":[[715,9]]},"1403":{"position":[[715,9]]},"1414":{"position":[[715,9]]}},"keywords":{}}],["agil",{"_index":2619,"title":{},"content":{"241":{"position":[[390,7]]}},"keywords":{}}],["ago",{"_index":1560,"title":{},"content":{"109":{"position":[[383,3]]},"110":{"position":[[279,4]]},"560":{"position":[[288,4]]},"747":{"position":[[855,3]]}},"keywords":{}}],["agre",{"_index":390,"title":{},"content":{"13":{"position":[[590,5]]}},"keywords":{}}],["ahead",{"_index":3396,"title":{},"content":{"366":{"position":[[192,5]]},"903":{"position":[[218,5]]},"909":{"position":[[359,5]]},"915":{"position":[[218,5]]},"925":{"position":[[359,5]]},"930":{"position":[[218,5]]},"936":{"position":[[359,5]]},"952":{"position":[[359,5]]},"963":{"position":[[372,5]]},"970":{"position":[[359,5]]}},"keywords":{}}],["ahold",{"_index":2228,"title":{},"content":{"204":{"position":[[826,5]]}},"keywords":{}}],["aid",{"_index":1733,"title":{},"content":{"131":{"position":[[24,3]]},"315":{"position":[[77,3]]}},"keywords":{}}],["airbyt",{"_index":795,"title":{"323":{"position":[[10,8]]}},"content":{"53":{"position":[[108,7]]},"84":{"position":[[890,8]]},"323":{"position":[[25,7],[1240,8],[1376,7],[1406,7],[1537,7],[1719,7]]},"364":{"position":[[431,8]]}},"keywords":{}}],["aircal",{"_index":3248,"title":{"346":{"position":[[0,7]]},"349":{"position":[[11,7]]}},"content":{"347":{"position":[[15,7],[215,8]]},"348":{"position":[[38,7],[68,7],[98,7]]},"349":{"position":[[177,7],[364,7]]},"350":{"position":[[250,7]]},"351":{"position":[[389,7]]},"353":{"position":[[5,7]]},"354":{"position":[[38,8]]},"355":{"position":[[5,7]]}},"keywords":{}}],["airtabl",{"_index":3271,"title":{"356":{"position":[[0,8]]}},"content":{"357":{"position":[[11,8]]},"358":{"position":[[250,8]]},"359":{"position":[[240,8],[366,8]]},"364":{"position":[[514,8]]}},"keywords":{}}],["airtable.dev",{"_index":3318,"title":{},"content":{"364":{"position":[[569,12]]}},"keywords":{}}],["airtable:dev",{"_index":3276,"title":{},"content":{"360":{"position":[[90,12]]}},"keywords":{}}],["ak",{"_index":3689,"title":{},"content":{"433":{"position":[[666,5]]}},"keywords":{}}],["akin",{"_index":629,"title":{},"content":{"27":{"position":[[341,4]]}},"keywords":{}}],["alarm",{"_index":2540,"title":{},"content":{"236":{"position":[[1548,7]]},"237":{"position":[[3477,8]]}},"keywords":{}}],["alert",{"_index":378,"title":{"1455":{"position":[[14,7]]},"1456":{"position":[[8,7]]}},"content":{"13":{"position":[[199,6]]},"41":{"position":[[602,8]]},"146":{"position":[[1031,5]]},"149":{"position":[[1025,5]]},"152":{"position":[[1015,5]]},"487":{"position":[[616,5]]},"1455":{"position":[[331,5]]},"1456":{"position":[[9,6],[122,6]]},"1457":{"position":[[117,5]]}},"keywords":{}}],["alex",{"_index":2950,"title":{},"content":{"295":{"position":[[408,4]]}},"keywords":{}}],["algorithm",{"_index":1493,"title":{},"content":{"105":{"position":[[849,11]]},"1292":{"position":[[643,9]]},"1306":{"position":[[643,9]]},"1329":{"position":[[643,9]]}},"keywords":{}}],["alia",{"_index":6306,"title":{},"content":{"1379":{"position":[[773,5]]},"1403":{"position":[[773,5]]},"1414":{"position":[[773,5]]}},"keywords":{}}],["alic",{"_index":1530,"title":{},"content":{"107":{"position":[[1031,5],[1093,5]]},"154":{"position":[[707,6]]},"590":{"position":[[372,5],[553,5]]}},"keywords":{}}],["alice'",{"_index":4245,"title":{},"content":{"590":{"position":[[1141,7]]}},"keywords":{}}],["align",{"_index":1541,"title":{},"content":{"107":{"position":[[1775,5],[3601,5]]},"296":{"position":[[3532,5]]}},"keywords":{}}],["aliv",{"_index":2580,"title":{},"content":{"238":{"position":[[663,6]]}},"keywords":{}}],["all"",{"_index":5219,"title":{},"content":{"1032":{"position":[[1987,9]]}},"keywords":{}}],["all."",{"_index":2602,"title":{},"content":{"240":{"position":[[2195,10]]}},"keywords":{}}],["alloc",{"_index":3536,"title":{},"content":{"397":{"position":[[954,10]]},"987":{"position":[[211,11]]},"1002":{"position":[[211,11]]},"1140":{"position":[[605,8]]},"1316":{"position":[[605,8]]},"1340":{"position":[[605,8]]},"1351":{"position":[[605,8]]},"1379":{"position":[[867,8]]},"1403":{"position":[[867,8]]},"1414":{"position":[[867,8]]},"1431":{"position":[[628,8]]}},"keywords":{}}],["allof",{"_index":1959,"title":{},"content":{"165":{"position":[[1089,6]]},"207":{"position":[[990,6]]}},"keywords":{}}],["allow",{"_index":115,"title":{"946":{"position":[[0,5]]}},"content":{"3":{"position":[[318,6]]},"17":{"position":[[1080,5]]},"36":{"position":[[401,7]]},"38":{"position":[[39,5]]},"41":{"position":[[635,8]]},"49":{"position":[[101,5]]},"60":{"position":[[207,6],[389,6],[665,6]]},"61":{"position":[[9,6]]},"66":{"position":[[671,6]]},"68":{"position":[[1006,6],[1102,6]]},"72":{"position":[[53,7],[521,7]]},"83":{"position":[[111,5]]},"107":{"position":[[2389,6]]},"111":{"position":[[380,5]]},"120":{"position":[[2628,6]]},"123":{"position":[[602,6]]},"124":{"position":[[948,6]]},"126":{"position":[[204,6]]},"133":{"position":[[544,6]]},"163":{"position":[[416,5]]},"165":{"position":[[2003,8]]},"179":{"position":[[484,5]]},"196":{"position":[[423,6]]},"203":{"position":[[555,5]]},"221":{"position":[[1462,5],[1532,5],[1604,5]]},"222":{"position":[[4,5],[761,5]]},"223":{"position":[[4,5]]},"224":{"position":[[4,5]]},"233":{"position":[[430,6]]},"234":{"position":[[150,5]]},"237":{"position":[[471,8]]},"240":{"position":[[95,5],[3551,8]]},"268":{"position":[[426,5]]},"299":{"position":[[316,6]]},"309":{"position":[[931,5],[2611,5]]},"310":{"position":[[89,7]]},"319":{"position":[[726,5],[951,8],[1023,6],[1292,6]]},"320":{"position":[[1158,5],[2147,5]]},"326":{"position":[[138,6]]},"337":{"position":[[219,6]]},"364":{"position":[[332,5]]},"413":{"position":[[168,8]]},"414":{"position":[[53,5]]},"417":{"position":[[843,6],[1034,6]]},"430":{"position":[[249,6]]},"452":{"position":[[207,5]]},"509":{"position":[[255,7]]},"515":{"position":[[271,6]]},"517":{"position":[[354,6]]},"552":{"position":[[612,6],[664,5]]},"578":{"position":[[255,6]]},"584":{"position":[[1226,7]]},"616":{"position":[[525,5]]},"753":{"position":[[121,5],[296,5]]},"767":{"position":[[1,5],[360,5],[442,5],[1288,5],[1641,5]]},"784":{"position":[[76,5]]},"792":{"position":[[187,5],[347,5],[673,5],[730,5],[1583,5]]},"793":{"position":[[1,5],[161,5],[265,5]]},"808":{"position":[[1,5],[161,5],[281,5]]},"824":{"position":[[1,5],[161,5],[465,5],[522,5],[1354,5],[1705,5]]},"840":{"position":[[1441,5]]},"849":{"position":[[2332,5]]},"866":{"position":[[281,5]]},"878":{"position":[[291,5]]},"897":{"position":[[176,7]]},"904":{"position":[[1,5],[161,5],[464,5],[521,5],[1206,5]]},"917":{"position":[[1904,5]]},"918":{"position":[[187,5],[347,5],[673,5],[730,5],[1498,5]]},"919":{"position":[[1,5],[161,5],[265,5]]},"931":{"position":[[1,5],[161,5],[285,5]]},"946":{"position":[[28,5],[111,5],[334,7],[372,6]]},"965":{"position":[[1904,5]]},"977":{"position":[[424,8]]},"1036":{"position":[[752,8]]},"1042":{"position":[[1096,5]]},"1043":{"position":[[1,5],[161,5],[265,5]]},"1047":{"position":[[828,7]]},"1051":{"position":[[1,5],[161,5],[464,5],[521,5]]},"1055":{"position":[[828,7]]},"1059":{"position":[[1,5],[161,5],[285,5]]},"1063":{"position":[[828,7]]},"1105":{"position":[[183,5]]},"1154":{"position":[[36,5],[457,8]]},"1156":{"position":[[839,8]]},"1198":{"position":[[50,5],[165,5]]},"1255":{"position":[[76,5]]},"1283":{"position":[[37,5]]},"1289":{"position":[[37,5],[547,5]]},"1298":{"position":[[4,5]]},"1303":{"position":[[1,5],[161,5],[285,5]]},"1320":{"position":[[37,5]]},"1321":{"position":[[327,5]]},"1322":{"position":[[4,5],[761,5]]},"1333":{"position":[[37,5]]},"1334":{"position":[[415,5]]},"1335":{"position":[[4,5],[761,5]]},"1344":{"position":[[37,5]]},"1346":{"position":[[4,5]]},"1373":{"position":[[1,5],[161,5],[446,5],[503,5]]},"1374":{"position":[[1,5],[161,5],[446,5],[503,5]]},"1392":{"position":[[10,6]]},"1397":{"position":[[1,5],[162,5],[282,5]]},"1398":{"position":[[1,5],[161,5],[281,5]]},"1408":{"position":[[369,5]]},"1409":{"position":[[1,5],[161,5],[265,5]]},"1439":{"position":[[277,6],[1021,6]]},"1459":{"position":[[1398,5]]},"1461":{"position":[[557,6],[2293,6],[4411,8]]},"1462":{"position":[[629,6]]},"1471":{"position":[[48,5],[132,6]]},"1474":{"position":[[248,6]]},"1477":{"position":[[225,8],[275,8],[442,8]]}},"keywords":{}}],["allowlist",{"_index":1214,"title":{"334":{"position":[[0,12]]},"335":{"position":[[16,10]]}},"content":{"83":{"position":[[252,9]]},"203":{"position":[[540,11]]},"204":{"position":[[323,12]]},"221":{"position":[[1886,9]]},"335":{"position":[[44,11]]},"366":{"position":[[1183,14]]},"739":{"position":[[12,9]]},"780":{"position":[[510,12]]},"946":{"position":[[243,11]]},"1042":{"position":[[1417,9]]},"1136":{"position":[[336,14]]},"1198":{"position":[[105,9]]},"1251":{"position":[[271,12],[304,9]]},"1408":{"position":[[690,9]]}},"keywords":{}}],["alloydb",{"_index":3281,"title":{"365":{"position":[[0,7]]},"1135":{"position":[[0,7]]}},"content":{"363":{"position":[[190,7]]},"366":{"position":[[15,7],[1155,8]]},"367":{"position":[[133,7]]},"368":{"position":[[12,7]]},"1120":{"position":[[1,7]]},"1136":{"position":[[41,7],[308,8]]},"1137":{"position":[[113,7]]}},"keywords":{}}],["alloydb.logical_decod",{"_index":3398,"title":{},"content":{"367":{"position":[[59,24]]}},"keywords":{}}],["alloydb:dev",{"_index":3283,"title":{},"content":{"363":{"position":[[244,11]]},"1120":{"position":[[60,11]]},"1139":{"position":[[98,11]]}},"keywords":{}}],["alloydb:dev"",{"_index":3426,"title":{},"content":{"371":{"position":[[155,17]]}},"keywords":{}}],["alloydbsuperus",{"_index":3399,"title":{},"content":{"367":{"position":[[397,16]]}},"keywords":{}}],["allstor",{"_index":6512,"title":{},"content":{"1444":{"position":[[864,8]]}},"keywords":{}}],["alog",{"_index":5778,"title":{},"content":{"1172":{"position":[[219,8]]},"1222":{"position":[[219,8]]}},"keywords":{}}],["along",{"_index":915,"title":{},"content":{"61":{"position":[[275,5]]},"199":{"position":[[11,5]]},"203":{"position":[[247,5]]},"206":{"position":[[307,5]]},"234":{"position":[[544,5]]},"254":{"position":[[130,6]]},"268":{"position":[[72,5]]},"269":{"position":[[79,5]]},"296":{"position":[[130,6],[4097,5]]},"314":{"position":[[130,6]]},"315":{"position":[[576,5]]},"1077":{"position":[[716,5]]},"1146":{"position":[[633,5]]},"1173":{"position":[[645,5]]},"1215":{"position":[[633,5]]},"1223":{"position":[[645,5]]}},"keywords":{}}],["alongsid",{"_index":1546,"title":{},"content":{"107":{"position":[[2101,9]]},"1429":{"position":[[93,9]]},"1437":{"position":[[1296,9]]}},"keywords":{}}],["alpaca",{"_index":3284,"title":{"372":{"position":[[0,6]]}},"content":{"363":{"position":[[256,6]]},"373":{"position":[[5,6],[238,6]]},"374":{"position":[[1,6],[139,6],[181,6]]},"375":{"position":[[41,6],[323,6]]},"376":{"position":[[250,6]]},"377":{"position":[[1154,6],[1177,6],[1228,6],[1255,6]]},"379":{"position":[[687,7]]}},"keywords":{}}],["alpaca:dev",{"_index":3285,"title":{},"content":{"363":{"position":[[309,10]]}},"keywords":{}}],["alpaca:dev"",{"_index":3458,"title":{},"content":{"378":{"position":[[95,16]]}},"keywords":{}}],["alphabet",{"_index":4316,"title":{},"content":{"616":{"position":[[283,8]]}},"keywords":{}}],["alreadi",{"_index":926,"title":{},"content":{"61":{"position":[[919,7]]},"84":{"position":[[687,7]]},"94":{"position":[[1793,7],[2159,7]]},"120":{"position":[[1345,7],[1711,7]]},"162":{"position":[[634,7]]},"171":{"position":[[112,8]]},"172":{"position":[[111,8]]},"173":{"position":[[212,8]]},"183":{"position":[[774,7]]},"203":{"position":[[16,8]]},"221":{"position":[[67,8]]},"230":{"position":[[380,7]]},"239":{"position":[[1353,7]]},"254":{"position":[[1126,7]]},"267":{"position":[[1138,7],[1827,7]]},"295":{"position":[[1403,7]]},"307":{"position":[[2838,7]]},"308":{"position":[[1070,7]]},"309":{"position":[[1392,7]]},"314":{"position":[[847,7]]},"419":{"position":[[2223,7]]},"429":{"position":[[712,7]]},"441":{"position":[[832,7]]},"477":{"position":[[414,7]]},"504":{"position":[[1852,7]]},"547":{"position":[[2225,7]]},"593":{"position":[[438,7]]},"598":{"position":[[378,7]]},"639":{"position":[[1850,7]]},"661":{"position":[[279,7]]},"917":{"position":[[1091,7]]},"919":{"position":[[1616,7]]},"964":{"position":[[679,7]]},"965":{"position":[[1091,7]]},"1023":{"position":[[2206,7]]},"1186":{"position":[[55,7]]},"1230":{"position":[[1044,7]]},"1243":{"position":[[793,7]]},"1277":{"position":[[128,7]]},"1455":{"position":[[281,7]]},"1480":{"position":[[1051,7],[1417,7]]}},"keywords":{}}],["alright",{"_index":3075,"title":{},"content":{"314":{"position":[[2945,8]]}},"keywords":{}}],["alter",{"_index":338,"title":{},"content":{"11":{"position":[[1431,5]]},"100":{"position":[[508,5]]},"208":{"position":[[187,11],[1782,11]]},"211":{"position":[[953,12]]},"236":{"position":[[3518,5],[3594,5]]},"237":{"position":[[1790,5],[1866,5]]},"367":{"position":[[500,5]]},"760":{"position":[[533,5],[572,11],[656,10],[922,10]]},"773":{"position":[[533,5],[572,11],[656,10],[922,10]]},"800":{"position":[[533,5],[572,11],[656,10],[922,10]]},"815":{"position":[[533,5],[572,11],[656,10],[922,10]]},"831":{"position":[[533,5],[572,11],[656,10],[922,10]]},"864":{"position":[[1462,5]]},"869":{"position":[[747,5]]},"871":{"position":[[152,5]]},"904":{"position":[[1600,5],[1880,5],[1956,5]]},"917":{"position":[[508,5],[1389,5],[1465,5],[1842,5]]},"918":{"position":[[1892,5],[2172,5],[2248,5]]},"919":{"position":[[1045,5],[1691,5],[2227,5],[2303,5]]},"931":{"position":[[1262,5],[1542,5],[1618,5]]},"944":{"position":[[251,5]]},"945":{"position":[[197,5]]},"965":{"position":[[508,5],[1389,5],[1465,5],[1842,5]]},"1140":{"position":[[649,5]]},"1183":{"position":[[226,5]]},"1209":{"position":[[232,5]]},"1292":{"position":[[726,5]]},"1306":{"position":[[726,5]]},"1316":{"position":[[649,5]]},"1329":{"position":[[726,5]]},"1340":{"position":[[649,5]]},"1351":{"position":[[649,5]]},"1370":{"position":[[414,5]]},"1379":{"position":[[906,5]]},"1384":{"position":[[633,5]]},"1388":{"position":[[661,5]]},"1394":{"position":[[517,5]]},"1403":{"position":[[906,5]]},"1414":{"position":[[906,5]]},"1431":{"position":[[672,5]]}},"keywords":{}}],["alter,drop,truncate,etc",{"_index":4630,"title":{},"content":{"760":{"position":[[64,25]]},"773":{"position":[[64,25]]},"800":{"position":[[64,25]]},"815":{"position":[[64,25]]},"831":{"position":[[64,25]]}},"keywords":{}}],["altern",{"_index":389,"title":{},"content":{"13":{"position":[[532,14]]},"58":{"position":[[669,14]]},"60":{"position":[[920,11]]},"90":{"position":[[427,11]]},"169":{"position":[[915,14]]},"179":{"position":[[226,14]]},"319":{"position":[[336,12]]},"753":{"position":[[273,14]]},"754":{"position":[[784,14]]},"767":{"position":[[419,14]]},"784":{"position":[[7,11]]},"794":{"position":[[990,14]]},"809":{"position":[[990,14]]},"825":{"position":[[826,14]]},"864":{"position":[[497,14]]},"876":{"position":[[497,14]]},"945":{"position":[[546,14]]},"1020":{"position":[[678,14]]},"1123":{"position":[[272,9]]},"1138":{"position":[[1588,11],[1607,11]]},"1151":{"position":[[1547,11],[1566,11]]},"1162":{"position":[[867,11],[889,11]]},"1179":{"position":[[1137,11]]},"1188":{"position":[[797,11],[816,11]]},"1198":{"position":[[142,14]]},"1255":{"position":[[7,11]]},"1260":{"position":[[1071,11],[1090,11]]},"1286":{"position":[[1047,14]]},"1301":{"position":[[883,14]]},"1313":{"position":[[1132,11],[1151,11]]},"1325":{"position":[[1047,14]]},"1337":{"position":[[1132,11],[1151,11]]},"1348":{"position":[[1132,11],[1151,11]]},"1386":{"position":[[1200,11],[1219,11]]},"1420":{"position":[[747,11],[766,11]]},"1427":{"position":[[892,11],[911,11]]},"1439":{"position":[[1088,11]]},"1480":{"position":[[1,14]]}},"keywords":{}}],["although",{"_index":2570,"title":{},"content":{"237":{"position":[[1249,8]]},"595":{"position":[[1759,8]]},"870":{"position":[[1001,8]]},"1019":{"position":[[286,8]]},"1147":{"position":[[403,8]]},"1174":{"position":[[403,8]]},"1216":{"position":[[403,8]]},"1224":{"position":[[403,8]]}},"keywords":{}}],["altogeth",{"_index":508,"title":{},"content":{"17":{"position":[[1094,10]]}},"keywords":{}}],["alway",{"_index":682,"title":{},"content":{"34":{"position":[[859,6]]},"67":{"position":[[121,6]]},"72":{"position":[[169,6]]},"87":{"position":[[84,6]]},"89":{"position":[[8,7]]},"107":{"position":[[2960,6]]},"113":{"position":[[376,6]]},"117":{"position":[[333,6]]},"126":{"position":[[54,6]]},"141":{"position":[[955,6]]},"161":{"position":[[1178,6]]},"162":{"position":[[1246,6]]},"165":{"position":[[1576,6]]},"198":{"position":[[668,6]]},"237":{"position":[[2493,6]]},"239":{"position":[[1126,6]]},"263":{"position":[[571,6],[995,6]]},"274":{"position":[[1843,6]]},"275":{"position":[[433,6],[743,6]]},"277":{"position":[[1338,6]]},"280":{"position":[[111,6]]},"319":{"position":[[1089,6]]},"320":{"position":[[1696,6]]},"321":{"position":[[2095,6]]},"322":{"position":[[694,6]]},"323":{"position":[[987,6]]},"326":{"position":[[1156,6],[1369,6],[1901,6]]},"337":{"position":[[197,6]]},"370":{"position":[[2198,6]]},"432":{"position":[[1319,6]]},"496":{"position":[[628,6],[713,6]]},"517":{"position":[[1651,6],[2812,6]]},"573":{"position":[[1430,6]]},"584":{"position":[[1493,6]]},"619":{"position":[[739,6]]},"735":{"position":[[545,6]]},"747":{"position":[[1004,6]]},"757":{"position":[[2149,6]]},"770":{"position":[[2149,6]]},"786":{"position":[[66,6]]},"797":{"position":[[2156,6]]},"808":{"position":[[1575,6]]},"812":{"position":[[2156,6]]},"828":{"position":[[2156,6]]},"869":{"position":[[1535,6]]},"907":{"position":[[1603,6]]},"923":{"position":[[1603,6]]},"931":{"position":[[2054,6]]},"934":{"position":[[1603,6]]},"950":{"position":[[1603,6]]},"968":{"position":[[1603,6]]},"1043":{"position":[[1870,6]]},"1059":{"position":[[1901,6]]},"1076":{"position":[[435,6]]},"1085":{"position":[[929,6]]},"1192":{"position":[[320,6]]},"1201":{"position":[[230,6],[494,6]]},"1203":{"position":[[351,6]]},"1289":{"position":[[1586,6]]},"1292":{"position":[[756,6]]},"1293":{"position":[[230,6]]},"1303":{"position":[[1190,6],[1697,6]]},"1306":{"position":[[756,6]]},"1307":{"position":[[230,6]]},"1310":{"position":[[907,6]]},"1317":{"position":[[230,6]]},"1329":{"position":[[756,6]]},"1330":{"position":[[230,6]]},"1341":{"position":[[230,6]]},"1346":{"position":[[1312,6]]},"1352":{"position":[[230,6]]},"1358":{"position":[[336,6]]},"1359":{"position":[[230,6]]},"1370":{"position":[[424,6]]},"1380":{"position":[[230,6]]},"1394":{"position":[[317,6]]},"1397":{"position":[[1136,6]]},"1398":{"position":[[1139,6]]},"1404":{"position":[[230,6]]},"1409":{"position":[[1143,6]]},"1415":{"position":[[230,6]]},"1423":{"position":[[327,6]]},"1432":{"position":[[230,6]]},"1434":{"position":[[148,6]]},"1435":{"position":[[272,6]]},"1440":{"position":[[160,6]]},"1442":{"position":[[34,6]]},"1451":{"position":[[819,6]]},"1452":{"position":[[2461,6],[2586,6],[3376,6]]},"1461":{"position":[[4669,6]]},"1463":{"position":[[48,6],[133,6]]},"1464":{"position":[[764,6]]},"1467":{"position":[[1934,6]]},"1471":{"position":[[964,6]]},"1477":{"position":[[218,6],[1030,6],[2838,6],[3000,6],[3252,6]]}},"keywords":{}}],["amazon",{"_index":1988,"title":{"172":{"position":[[0,6]]},"187":{"position":[[32,6]]},"298":{"position":[[0,6]]},"380":{"position":[[0,6]]},"383":{"position":[[34,6]]},"389":{"position":[[0,6]]},"394":{"position":[[0,6]]},"399":{"position":[[0,6]]},"404":{"position":[[0,6]]},"412":{"position":[[0,6]]},"765":{"position":[[0,6]]},"792":{"position":[[0,6]]},"822":{"position":[[0,6]]},"901":{"position":[[0,6]]},"918":{"position":[[0,6]]},"1048":{"position":[[0,6]]},"1121":{"position":[[0,6]]},"1141":{"position":[[13,6]]},"1148":{"position":[[0,6]]},"1159":{"position":[[25,6]]},"1167":{"position":[[24,6]]},"1318":{"position":[[0,6]]},"1321":{"position":[[25,6]]},"1331":{"position":[[0,6]]},"1334":{"position":[[22,6],[36,6]]},"1371":{"position":[[0,6]]},"1373":{"position":[[6,6]]}},"content":{"170":{"position":[[203,6]]},"179":{"position":[[513,6],[525,6]]},"189":{"position":[[256,6],[1132,6]]},"190":{"position":[[216,6]]},"193":{"position":[[82,6]]},"222":{"position":[[133,6]]},"300":{"position":[[150,6]]},"301":{"position":[[296,6]]},"363":{"position":[[320,6],[395,6],[468,6],[536,6],[557,6]]},"364":{"position":[[582,6],[639,6]]},"382":{"position":[[49,7]]},"383":{"position":[[16,6],[55,6]]},"384":{"position":[[233,6]]},"385":{"position":[[72,6],[316,6],[404,6],[467,6],[509,6]]},"386":{"position":[[250,6]]},"387":{"position":[[512,6],[629,6],[720,6],[1386,6]]},"388":{"position":[[159,6]]},"390":{"position":[[50,6],[521,6],[548,6]]},"391":{"position":[[250,6]]},"395":{"position":[[704,6],[727,6]]},"400":{"position":[[80,6]]},"401":{"position":[[305,6]]},"406":{"position":[[34,6]]},"408":{"position":[[596,6]]},"767":{"position":[[283,6]]},"772":{"position":[[12,6]]},"792":{"position":[[596,6]]},"794":{"position":[[616,6]]},"809":{"position":[[616,6]]},"824":{"position":[[388,6]]},"864":{"position":[[1524,6]]},"904":{"position":[[388,6]]},"918":{"position":[[596,6]]},"1051":{"position":[[388,6]]},"1120":{"position":[[72,6],[152,6],[232,6],[301,6]]},"1122":{"position":[[331,6],[353,6]]},"1150":{"position":[[42,6]]},"1204":{"position":[[651,6]]},"1282":{"position":[[70,6],[229,6]]},"1286":{"position":[[673,6]]},"1288":{"position":[[203,6]]},"1289":{"position":[[192,6],[206,6],[470,6],[1471,6],[1486,6]]},"1310":{"position":[[70,6],[244,6],[792,6],[807,6]]},"1321":{"position":[[250,6]]},"1322":{"position":[[133,6],[1690,6]]},"1325":{"position":[[673,6]]},"1334":{"position":[[338,6]]},"1335":{"position":[[133,6],[1338,6]]},"1373":{"position":[[370,6]]},"1374":{"position":[[370,6]]},"1417":{"position":[[150,6],[419,6]]}},"keywords":{}}],["amazonsq",{"_index":3563,"title":{},"content":{"407":{"position":[[250,9]]}},"keywords":{}}],["ambigu",{"_index":6427,"title":{},"content":{"1434":{"position":[[31,10]]},"1462":{"position":[[316,12]]}},"keywords":{}}],["ambiti",{"_index":2329,"title":{},"content":{"210":{"position":[[2328,9]]}},"keywords":{}}],["america",{"_index":497,"title":{},"content":{"17":{"position":[[611,8]]}},"keywords":{}}],["america)eu",{"_index":3476,"title":{},"content":{"385":{"position":[[222,10]]}},"keywords":{}}],["america/new_york",{"_index":4607,"title":{},"content":{"754":{"position":[[826,17]]},"794":{"position":[[1032,17]]},"809":{"position":[[1032,17]]},"825":{"position":[[868,17]]},"1286":{"position":[[1089,17]]},"1301":{"position":[[925,17]]},"1325":{"position":[[1089,17]]}},"keywords":{}}],["america/new_yorkfast",{"_index":6552,"title":{},"content":{"1452":{"position":[[3584,20]]}},"keywords":{}}],["amongst",{"_index":6681,"title":{},"content":{"1474":{"position":[[318,7]]}},"keywords":{}}],["amount",{"_index":1748,"title":{},"content":{"135":{"position":[[429,6]]},"138":{"position":[[1965,6]]},"141":{"position":[[1897,6]]},"142":{"position":[[2018,6]]},"146":{"position":[[97,6]]},"149":{"position":[[100,6]]},"152":{"position":[[110,6]]},"237":{"position":[[1453,6]]},"240":{"position":[[3236,6],[4944,6]]},"254":{"position":[[3650,6]]},"277":{"position":[[770,7],[784,7]]},"278":{"position":[[1333,8]]},"279":{"position":[[1357,6]]},"280":{"position":[[2119,8],[2174,8]]},"330":{"position":[[175,6]]},"331":{"position":[[535,6]]},"343":{"position":[[382,6],[872,6]]},"366":{"position":[[851,6]]},"534":{"position":[[948,6]]},"573":{"position":[[1083,6]]},"747":{"position":[[1260,6]]},"750":{"position":[[539,6]]},"764":{"position":[[300,6]]},"766":{"position":[[539,6]]},"777":{"position":[[300,6]]},"789":{"position":[[527,6]]},"804":{"position":[[298,6]]},"807":{"position":[[527,6]]},"819":{"position":[[298,6]]},"823":{"position":[[527,6]]},"835":{"position":[[298,6]]},"870":{"position":[[396,6]]},"903":{"position":[[877,6]]},"912":{"position":[[1595,6]]},"915":{"position":[[877,6]]},"922":{"position":[[1546,6],[2005,6]]},"930":{"position":[[877,6]]},"963":{"position":[[1031,6]]},"1004":{"position":[[180,6]]},"1040":{"position":[[593,6]]},"1050":{"position":[[593,6]]},"1058":{"position":[[593,6]]},"1157":{"position":[[292,7]]},"1356":{"position":[[759,6],[835,6]]},"1451":{"position":[[714,6]]},"1453":{"position":[[860,6]]},"1459":{"position":[[487,7]]},"1473":{"position":[[52,6]]},"1475":{"position":[[86,6],[230,6]]}},"keywords":{}}],["amp",{"_index":1905,"title":{},"content":{"161":{"position":[[877,5]]},"242":{"position":[[211,5]]},"436":{"position":[[571,5]]},"571":{"position":[[918,5]]},"739":{"position":[[163,5]]},"846":{"position":[[120,5]]},"879":{"position":[[351,5],[526,5]]},"880":{"position":[[273,5]]},"1118":{"position":[[20,5],[55,5]]},"1392":{"position":[[350,5]]},"1477":{"position":[[3383,5]]}},"keywords":{}}],["amp;&",{"_index":885,"title":{},"content":{"58":{"position":[[442,10],[621,10]]},"169":{"position":[[683,10],[865,10]]}},"keywords":{}}],["amp;lt;user&gt;.flow_watermark",{"_index":4866,"title":{},"content":{"867":{"position":[[798,36]]}},"keywords":{}}],["amp;mysetup",{"_index":1742,"title":{},"content":{"133":{"position":[[384,12]]}},"keywords":{}}],["amplitud",{"_index":3320,"title":{"420":{"position":[[0,9]]}},"content":{"364":{"position":[[654,9]]},"421":{"position":[[56,9]]},"422":{"position":[[4,9]]},"423":{"position":[[250,9]]},"424":{"position":[[77,9],[135,9],[420,9]]}},"keywords":{}}],["amplitude:dev",{"_index":3321,"title":{},"content":{"364":{"position":[[710,13]]},"425":{"position":[[90,13]]}},"keywords":{}}],["amzn1.appl",{"_index":3497,"title":{},"content":{"388":{"position":[[226,17]]}},"keywords":{}}],["analog",{"_index":1311,"title":{},"content":{"90":{"position":[[230,6]]},"320":{"position":[[239,6],[752,9]]},"321":{"position":[[1192,10],[1420,6]]},"429":{"position":[[879,9]]},"1178":{"position":[[379,9]]},"1449":{"position":[[319,9]]}},"keywords":{}}],["analys",{"_index":5539,"title":{},"content":{"1140":{"position":[[689,7]]},"1292":{"position":[[784,7]]},"1306":{"position":[[784,7]]},"1316":{"position":[[689,7]]},"1329":{"position":[[784,7]]},"1340":{"position":[[689,7]]},"1351":{"position":[[689,7]]},"1431":{"position":[[712,7]]}},"keywords":{}}],["analysi",{"_index":171,"title":{},"content":{"4":{"position":[[494,9]]},"325":{"position":[[751,8]]},"977":{"position":[[712,8]]}},"keywords":{}}],["analyst",{"_index":3163,"title":{},"content":{"324":{"position":[[33,8],[809,8]]}},"keywords":{}}],["analyt",{"_index":541,"title":{"567":{"position":[[7,9]]},"579":{"position":[[7,9]]},"1098":{"position":[[8,9]]}},"content":{"20":{"position":[[729,10]]},"189":{"position":[[574,9]]},"193":{"position":[[357,10],[407,10]]},"196":{"position":[[361,10]]},"232":{"position":[[684,10]]},"233":{"position":[[368,10]]},"322":{"position":[[304,9],[370,9]]},"324":{"position":[[517,9]]},"325":{"position":[[770,10]]},"326":{"position":[[306,9]]},"364":{"position":[[1443,9],[1508,9],[1548,9],[1611,9]]},"483":{"position":[[469,9]]},"558":{"position":[[46,9]]},"569":{"position":[[82,9]]},"570":{"position":[[29,9]]},"571":{"position":[[29,9],[111,9],[132,9],[269,9],[357,9],[378,9],[442,9],[841,9]]},"572":{"position":[[257,9]]},"573":{"position":[[864,9],[942,9],[1359,9]]},"574":{"position":[[143,9],[399,9]]},"575":{"position":[[152,9]]},"577":{"position":[[12,9],[286,9],[360,9]]},"578":{"position":[[16,9],[150,10],[418,9]]},"581":{"position":[[49,9],[115,9],[246,9]]},"582":{"position":[[128,9],[454,9]]},"583":{"position":[[247,9]]},"584":{"position":[[619,10],[864,9],[1081,9],[1427,10]]},"585":{"position":[[143,9]]},"586":{"position":[[152,9]]},"588":{"position":[[12,9],[281,9],[355,9]]},"605":{"position":[[53,10],[126,10],[236,9],[263,9],[287,9],[313,9],[337,9]]},"606":{"position":[[95,9],[436,10]]},"715":{"position":[[140,9],[164,9]]},"849":{"position":[[790,9]]},"899":{"position":[[73,9],[237,9],[292,9],[347,9],[390,9]]},"900":{"position":[[109,9]]},"1099":{"position":[[64,9]]},"1100":{"position":[[258,9]]},"1101":{"position":[[337,9]]}},"keywords":{}}],["analytics:dev",{"_index":5381,"title":{},"content":{"1102":{"position":[[98,13]]}},"keywords":{}}],["analyz",{"_index":4153,"title":{},"content":{"571":{"position":[[924,7]]},"577":{"position":[[184,8]]},"588":{"position":[[179,8]]},"1140":{"position":[[727,7]]},"1292":{"position":[[830,7]]},"1306":{"position":[[830,7]]},"1316":{"position":[[727,7]]},"1329":{"position":[[830,7]]},"1340":{"position":[[727,7]]},"1351":{"position":[[727,7]]},"1370":{"position":[[436,7]]},"1431":{"position":[[750,7]]}},"keywords":{}}],["anchor",{"_index":1738,"title":{},"content":{"133":{"position":[[114,7],[242,7]]},"1476":{"position":[[1313,8]]}},"keywords":{}}],["and/or",{"_index":2439,"title":{},"content":{"221":{"position":[[137,6]]},"321":{"position":[[2110,6]]},"529":{"position":[[78,6]]},"870":{"position":[[445,6]]},"1383":{"position":[[203,6]]},"1442":{"position":[[961,6]]}},"keywords":{}}],["andhow",{"_index":2484,"title":{},"content":{"228":{"position":[[1388,6]]}},"keywords":{}}],["andid",{"_index":1544,"title":{},"content":{"107":{"position":[[2042,5]]}},"keywords":{}}],["andmateri",{"_index":3159,"title":{},"content":{"323":{"position":[[473,19]]}},"keywords":{}}],["android",{"_index":502,"title":{},"content":{"17":{"position":[[697,8]]}},"keywords":{}}],["anew",{"_index":6495,"title":{},"content":{"1440":{"position":[[1025,5]]}},"keywords":{}}],["annot",{"_index":1603,"title":{"159":{"position":[[0,12]]},"164":{"position":[[7,12]]},"166":{"position":[[8,12]]}},"content":{"113":{"position":[[49,12],[426,12],[889,11]]},"115":{"position":[[228,11],[365,11]]},"132":{"position":[[11,11],[130,11]]},"159":{"position":[[202,8],[357,10],[639,11]]},"163":{"position":[[404,11]]},"164":{"position":[[101,11],[466,12],[888,11],[1395,11],[1670,11],[2225,11]]},"166":{"position":[[21,11],[116,10],[227,10],[501,11],[670,10]]},"183":{"position":[[2017,12]]},"281":{"position":[[67,12],[1919,12],[1972,11],[2822,11],[3074,12],[3279,11]]},"425":{"position":[[303,11]]},"748":{"position":[[425,11]]},"1358":{"position":[[681,11]]},"1438":{"position":[[448,11]]},"1463":{"position":[[89,9],[199,10]]},"1465":{"position":[[65,12]]},"1477":{"position":[[1397,10],[3563,10]]}},"keywords":{}}],["annotation,reduc",{"_index":1949,"title":{},"content":{"164":{"position":[[1652,17]]}},"keywords":{}}],["annotations.curr",{"_index":1609,"title":{},"content":{"113":{"position":[[801,19]]}},"keywords":{}}],["annotationswithin",{"_index":1935,"title":{},"content":{"164":{"position":[[54,17]]}},"keywords":{}}],["anonym",{"_index":3031,"title":{},"content":{"299":{"position":[[323,9]]},"413":{"position":[[177,9]]},"414":{"position":[[59,9],[169,9]]},"417":{"position":[[850,9],[1041,9]]}},"keywords":{}}],["anoth",{"_index":83,"title":{},"content":{"2":{"position":[[410,7]]},"43":{"position":[[377,7]]},"87":{"position":[[637,8]]},"90":{"position":[[331,7]]},"92":{"position":[[942,7]]},"107":{"position":[[1790,7],[1984,7],[3789,7]]},"111":{"position":[[317,7]]},"160":{"position":[[392,7]]},"183":{"position":[[2902,7]]},"192":{"position":[[1288,7]]},"217":{"position":[[162,7]]},"254":{"position":[[2588,7]]},"269":{"position":[[158,7]]},"296":{"position":[[3547,7]]},"314":{"position":[[2219,7]]},"320":{"position":[[1212,7]]},"321":{"position":[[474,8],[2196,8]]},"323":{"position":[[82,8]]},"324":{"position":[[978,7],[1004,7]]},"480":{"position":[[854,7]]},"548":{"position":[[99,7]]},"645":{"position":[[351,7]]},"652":{"position":[[351,7]]},"659":{"position":[[27,7]]},"909":{"position":[[1158,7]]},"925":{"position":[[1158,7]]},"936":{"position":[[1158,7]]},"952":{"position":[[1158,7]]},"970":{"position":[[1158,7]]},"1243":{"position":[[824,7]]},"1437":{"position":[[1067,7],[1486,7]]},"1452":{"position":[[1965,7]]},"1461":{"position":[[330,7],[469,7],[4334,7]]}},"keywords":{}}],["answer",{"_index":187,"title":{},"content":{"4":{"position":[[708,6]]},"114":{"position":[[661,7]]},"115":{"position":[[178,7]]},"1435":{"position":[[706,6]]}},"keywords":{}}],["anti",{"_index":5816,"title":{},"content":{"1192":{"position":[[484,4]]}},"keywords":{}}],["anvil",{"_index":2800,"title":{},"content":{"268":{"position":[[364,5],[661,5],[942,5],[991,6],[1051,5]]},"269":{"position":[[299,5],[565,5],[601,6]]},"307":{"position":[[1208,6],[1702,6],[2058,6],[2585,6]]},"309":{"position":[[2533,6],[3140,6]]},"344":{"position":[[327,6]]}},"keywords":{}}],["anvil_product",{"_index":1127,"title":{},"content":{"81":{"position":[[1816,14]]}},"keywords":{}}],["anvils.schema.yaml",{"_index":1037,"title":{},"content":{"69":{"position":[[454,18]]},"76":{"position":[[402,18]]}},"keywords":{}}],["anvils_drop",{"_index":1969,"title":{},"content":{"166":{"position":[[412,15]]}},"keywords":{}}],["anymor",{"_index":2626,"title":{},"content":{"242":{"position":[[157,8]]},"297":{"position":[[172,8]]}},"keywords":{}}],["anyon",{"_index":3882,"title":{},"content":{"489":{"position":[[780,6]]},"491":{"position":[[202,6]]},"617":{"position":[[822,6]]},"662":{"position":[[780,6]]},"664":{"position":[[223,6]]},"677":{"position":[[780,6]]},"679":{"position":[[202,6]]},"692":{"position":[[780,6]]},"694":{"position":[[202,6]]}},"keywords":{}}],["anyth",{"_index":1292,"title":{},"content":{"87":{"position":[[602,8]]},"96":{"position":[[779,8]]},"203":{"position":[[321,8]]},"236":{"position":[[1684,8]]},"240":{"position":[[2703,9]]},"560":{"position":[[293,8]]},"1232":{"position":[[403,8]]}},"keywords":{}}],["anywhere.when",{"_index":2465,"title":{},"content":{"222":{"position":[[787,13]]},"1322":{"position":[[787,13]]},"1335":{"position":[[787,13]]}},"keywords":{}}],["aogagooubp+byajdn8esv1dcpu6jsdf/tf//rbeyror6bdb/3fyw4zn+zgtgih5t",{"_index":1245,"title":{},"content":{"83":{"position":[[1702,64]]},"371":{"position":[[621,64]]},"1139":{"position":[[508,64]]}},"keywords":{}}],["apach",{"_index":156,"title":{"319":{"position":[[0,6]]},"426":{"position":[[0,6]]},"1159":{"position":[[0,6]]},"1167":{"position":[[0,6]]},"1217":{"position":[[0,6]]}},"content":{"4":{"position":[[189,6]]},"107":{"position":[[161,6]]},"319":{"position":[[34,6]]},"363":{"position":[[620,6]]},"430":{"position":[[36,6]]},"431":{"position":[[250,6]]},"1120":{"position":[[326,6],[420,6],[515,6]]},"1164":{"position":[[726,6]]}},"keywords":{}}],["apart",{"_index":2061,"title":{},"content":{"182":{"position":[[426,5]]},"238":{"position":[[1378,5]]}},"keywords":{}}],["api",{"_index":652,"title":{"354":{"position":[[0,3]]},"493":{"position":[[15,3]]},"845":{"position":[[35,4]]},"847":{"position":[[17,4]]},"1131":{"position":[[0,3]]}},"content":{"31":{"position":[[68,4]]},"45":{"position":[[339,3]]},"53":{"position":[[203,5]]},"66":{"position":[[411,3]]},"84":{"position":[[159,4]]},"154":{"position":[[1989,4],[2003,3]]},"169":{"position":[[1555,3]]},"252":{"position":[[186,4]]},"263":{"position":[[125,3]]},"267":{"position":[[1963,3]]},"270":{"position":[[225,3]]},"274":{"position":[[523,3]]},"284":{"position":[[34,3]]},"312":{"position":[[190,4]]},"340":{"position":[[415,3]]},"351":{"position":[[68,3],[127,3]]},"354":{"position":[[18,3]]},"355":{"position":[[13,3]]},"359":{"position":[[49,3],[138,3],[146,3]]},"364":{"position":[[1009,3]]},"373":{"position":[[24,3],[47,4],[96,3],[163,3],[257,3],[414,4],[492,3]]},"374":{"position":[[195,4]]},"375":{"position":[[330,3]]},"377":{"position":[[287,4],[446,4],[1161,3],[1184,3],[1235,3],[1262,3]]},"379":{"position":[[77,3]]},"384":{"position":[[244,3]]},"385":{"position":[[366,4]]},"392":{"position":[[500,3]]},"397":{"position":[[649,3]]},"417":{"position":[[666,3]]},"421":{"position":[[66,5]]},"422":{"position":[[30,3]]},"424":{"position":[[69,3],[87,3]]},"451":{"position":[[66,5]]},"457":{"position":[[66,5]]},"458":{"position":[[69,3]]},"460":{"position":[[74,3],[92,3],[473,4]]},"463":{"position":[[62,5]]},"464":{"position":[[76,3],[105,3],[181,3],[205,3]]},"466":{"position":[[80,3],[94,3],[215,3]]},"469":{"position":[[59,3]]},"471":{"position":[[11,3]]},"472":{"position":[[286,3],[348,3],[663,3]]},"494":{"position":[[4,3],[47,3],[84,3]]},"496":{"position":[[88,3]]},"507":{"position":[[79,3]]},"509":{"position":[[69,3],[87,3],[613,3]]},"515":{"position":[[145,3],[169,3],[556,4],[578,3],[614,3]]},"517":{"position":[[345,3],[374,3],[718,4],[3298,4],[3530,3]]},"532":{"position":[[208,3]]},"538":{"position":[[77,3]]},"540":{"position":[[233,3],[243,3]]},"550":{"position":[[124,4]]},"556":{"position":[[883,5]]},"560":{"position":[[19,3],[373,3]]},"571":{"position":[[152,4],[398,4]]},"577":{"position":[[32,3],[128,3]]},"578":{"position":[[438,4]]},"581":{"position":[[64,3]]},"584":{"position":[[1091,4]]},"588":{"position":[[27,3],[123,3]]},"609":{"position":[[120,4]]},"617":{"position":[[104,4],[323,4]]},"619":{"position":[[173,3],[238,4]]},"622":{"position":[[67,5]]},"623":{"position":[[68,3]]},"625":{"position":[[68,3],[104,3]]},"628":{"position":[[64,5]]},"629":{"position":[[80,3]]},"640":{"position":[[35,5],[269,3],[302,3]]},"642":{"position":[[285,4]]},"667":{"position":[[66,5],[119,3],[146,3]]},"668":{"position":[[92,3]]},"682":{"position":[[65,4]]},"697":{"position":[[65,5]]},"698":{"position":[[79,3]]},"700":{"position":[[68,3],[102,3]]},"704":{"position":[[73,3]]},"706":{"position":[[69,3],[102,3]]},"709":{"position":[[61,5]]},"710":{"position":[[1,3],[30,3]]},"712":{"position":[[71,3],[86,3],[381,3]]},"718":{"position":[[101,4]]},"723":{"position":[[35,3],[124,3],[178,4]]},"726":{"position":[[218,4],[266,3]]},"731":{"position":[[108,3],[207,3]]},"733":{"position":[[33,3]]},"735":{"position":[[49,3],[320,3],[343,3]]},"739":{"position":[[59,3],[104,3],[127,3]]},"744":{"position":[[65,5]]},"849":{"position":[[1453,3]]},"859":{"position":[[456,3]]},"882":{"position":[[63,5]]},"883":{"position":[[24,3]]},"888":{"position":[[62,4]]},"889":{"position":[[62,3]]},"891":{"position":[[86,3],[105,3]]},"897":{"position":[[192,3]]},"900":{"position":[[15,3],[383,3]]},"943":{"position":[[236,3],[821,3],[860,3],[913,3]]},"956":{"position":[[65,5]]},"959":{"position":[[229,4]]},"976":{"position":[[159,4],[291,4]]},"979":{"position":[[65,5]]},"980":{"position":[[10,3]]},"982":{"position":[[77,3],[111,3],[231,4]]},"987":{"position":[[199,3]]},"989":{"position":[[898,4],[903,6]]},"994":{"position":[[63,5]]},"1002":{"position":[[199,3]]},"1004":{"position":[[981,4],[986,6]]},"1012":{"position":[[62,5]]},"1013":{"position":[[24,3]]},"1068":{"position":[[18,3]]},"1073":{"position":[[63,4]]},"1074":{"position":[[61,4]]},"1076":{"position":[[239,3]]},"1077":{"position":[[133,3]]},"1089":{"position":[[228,3]]},"1091":{"position":[[21,3]]},"1094":{"position":[[104,3],[197,3]]},"1097":{"position":[[33,3]]},"1099":{"position":[[74,5]]},"1104":{"position":[[64,4]]},"1107":{"position":[[156,4]]},"1110":{"position":[[63,5]]},"1125":{"position":[[443,3]]},"1128":{"position":[[64,4]]},"1129":{"position":[[127,3]]},"1131":{"position":[[169,3]]},"1133":{"position":[[199,3],[226,3],[267,3],[378,3],[850,4]]},"1144":{"position":[[804,3]]},"1170":{"position":[[804,3]]},"1195":{"position":[[335,3]]},"1196":{"position":[[489,3],[497,3],[547,4],[574,3]]},"1226":{"position":[[85,3]]},"1245":{"position":[[46,4],[275,4]]},"1274":{"position":[[65,3],[118,3]]},"1277":{"position":[[360,3],[377,3],[447,3],[462,3],[960,3]]},"1354":{"position":[[48,3],[70,3]]},"1356":{"position":[[77,3],[129,4]]},"1362":{"position":[[259,3],[418,3]]},"1438":{"position":[[200,4]]},"1440":{"position":[[23,5]]}},"keywords":{}}],["api)data",{"_index":4812,"title":{},"content":{"847":{"position":[[258,8]]}},"keywords":{}}],["api.usw2a1.rockset.com",{"_index":6263,"title":{},"content":{"1356":{"position":[[279,22]]},"1357":{"position":[[88,22]]}},"keywords":{}}],["api:dev",{"_index":3340,"title":{},"content":{"364":{"position":[[1523,7]]},"586":{"position":[[167,7]]}},"keywords":{}}],["api_id",{"_index":3256,"title":{},"content":{"349":{"position":[[292,7]]}},"keywords":{}}],["api_key",{"_index":3278,"title":{},"content":{"360":{"position":[[140,8]]},"425":{"position":[[112,8]]},"467":{"position":[[108,8]]},"510":{"position":[[111,8]]},"707":{"position":[[110,8]]},"1196":{"position":[[666,7]]},"1357":{"position":[[111,8]]}},"keywords":{}}],["api_key_id",{"_index":3453,"title":{},"content":{"377":{"position":[[1142,11]]},"378":{"position":[[120,11]]}},"keywords":{}}],["api_secret_key",{"_index":3454,"title":{},"content":{"377":{"position":[[1212,15]]},"378":{"position":[[147,15]]}},"keywords":{}}],["api_token",{"_index":3261,"title":{},"content":{"351":{"position":[[116,10]]},"473":{"position":[[195,10]]},"713":{"position":[[107,10]]},"1133":{"position":[[137,9]]},"1134":{"position":[[130,10],[169,9]]}},"keywords":{}}],["apikey",{"_index":4337,"title":{},"content":{"626":{"position":[[113,7]]},"701":{"position":[[111,7]]},"735":{"position":[[276,7]]},"736":{"position":[[135,6],[142,7]]},"983":{"position":[[111,7]]}},"keywords":{}}],["apitoken",{"_index":4052,"title":{},"content":{"540":{"position":[[223,9]]},"541":{"position":[[135,9]]}},"keywords":{}}],["app",{"_index":355,"title":{"25":{"position":[[16,4]]},"135":{"position":[[20,4]]},"137":{"position":[[19,4]]},"258":{"position":[[27,3]]},"261":{"position":[[32,3]]},"339":{"position":[[31,4]]},"383":{"position":[[57,4]]},"445":{"position":[[60,4]]},"523":{"position":[[57,4]]},"531":{"position":[[57,4]]},"553":{"position":[[57,4]]},"570":{"position":[[57,4]]},"608":{"position":[[57,4]]},"615":{"position":[[57,4]]},"644":{"position":[[58,4]]},"651":{"position":[[58,4]]},"717":{"position":[[59,4]]},"732":{"position":[[60,4]]},"987":{"position":[[61,4]]},"1002":{"position":[[61,4]]},"1082":{"position":[[32,3]]},"1083":{"position":[[47,3]]},"1227":{"position":[[40,4]]},"1244":{"position":[[40,4]]},"1470":{"position":[[36,4]]}},"content":{"12":{"position":[[79,4]]},"13":{"position":[[59,3]]},"25":{"position":[[76,3]]},"30":{"position":[[145,3],[244,4],[291,4]]},"31":{"position":[[236,4]]},"33":{"position":[[271,4]]},"53":{"position":[[605,4]]},"55":{"position":[[771,4],[866,3]]},"58":{"position":[[912,4]]},"80":{"position":[[263,4]]},"81":{"position":[[1205,3]]},"83":{"position":[[786,4]]},"84":{"position":[[1309,3]]},"119":{"position":[[136,4]]},"135":{"position":[[9,3],[185,4],[726,4],[877,4]]},"137":{"position":[[27,4],[548,3]]},"138":{"position":[[1541,3],[1574,3],[1604,3]]},"140":{"position":[[555,4]]},"141":{"position":[[1546,3],[1579,3],[1609,3]]},"142":{"position":[[1558,3],[1591,3],[1621,3]]},"162":{"position":[[986,3]]},"165":{"position":[[918,4]]},"169":{"position":[[55,4],[1414,3],[1534,3]]},"176":{"position":[[147,4]]},"179":{"position":[[68,3]]},"182":{"position":[[46,4]]},"183":{"position":[[95,4]]},"184":{"position":[[170,4]]},"188":{"position":[[82,3]]},"189":{"position":[[676,5]]},"190":{"position":[[20,3]]},"191":{"position":[[111,3]]},"207":{"position":[[808,4]]},"225":{"position":[[607,4]]},"228":{"position":[[116,3]]},"240":{"position":[[246,3]]},"259":{"position":[[35,4],[1708,4]]},"263":{"position":[[49,4],[144,3],[538,4]]},"264":{"position":[[695,4]]},"266":{"position":[[38,4],[91,3]]},"267":{"position":[[103,4],[1982,3]]},"270":{"position":[[244,3]]},"274":{"position":[[542,3]]},"275":{"position":[[907,3]]},"284":{"position":[[53,3],[190,4],[298,3]]},"288":{"position":[[171,3]]},"299":{"position":[[171,3]]},"307":{"position":[[475,3],[523,4]]},"308":{"position":[[831,4]]},"309":{"position":[[1414,3],[1462,4]]},"340":{"position":[[274,3],[394,3]]},"350":{"position":[[49,4]]},"351":{"position":[[75,3],[137,3]]},"358":{"position":[[49,4]]},"369":{"position":[[49,4]]},"376":{"position":[[49,4]]},"382":{"position":[[89,4]]},"384":{"position":[[136,4]]},"386":{"position":[[49,4]]},"387":{"position":[[122,4]]},"391":{"position":[[49,4]]},"396":{"position":[[49,4]]},"401":{"position":[[77,3]]},"407":{"position":[[49,4]]},"416":{"position":[[49,4]]},"423":{"position":[[49,4]]},"431":{"position":[[49,4]]},"436":{"position":[[329,3],[471,3]]},"437":{"position":[[49,4]]},"444":{"position":[[92,4]]},"447":{"position":[[49,4]]},"448":{"position":[[122,4]]},"453":{"position":[[49,4]]},"459":{"position":[[49,4]]},"464":{"position":[[303,3]]},"465":{"position":[[49,4]]},"472":{"position":[[49,4]]},"481":{"position":[[49,4]]},"485":{"position":[[371,3]]},"486":{"position":[[363,3]]},"488":{"position":[[70,3]]},"495":{"position":[[49,4]]},"500":{"position":[[125,4]]},"501":{"position":[[60,4]]},"508":{"position":[[49,4]]},"509":{"position":[[323,3]]},"513":{"position":[[226,4]]},"514":{"position":[[31,4]]},"515":{"position":[[121,3],[460,3],[763,4]]},"516":{"position":[[49,4]]},"522":{"position":[[227,4]]},"525":{"position":[[49,4]]},"530":{"position":[[227,4]]},"531":{"position":[[276,4],[302,3],[331,3]]},"533":{"position":[[49,4]]},"534":{"position":[[122,4]]},"539":{"position":[[49,4]]},"544":{"position":[[49,4]]},"551":{"position":[[225,4]]},"555":{"position":[[49,4]]},"556":{"position":[[122,4]]},"563":{"position":[[78,3]]},"569":{"position":[[244,4]]},"572":{"position":[[49,4]]},"573":{"position":[[126,4],[435,4]]},"581":{"position":[[390,4]]},"583":{"position":[[49,4]]},"584":{"position":[[136,4]]},"592":{"position":[[49,4]]},"600":{"position":[[49,4]]},"607":{"position":[[243,4]]},"608":{"position":[[206,4]]},"610":{"position":[[49,4]]},"611":{"position":[[122,4]]},"614":{"position":[[227,4]]},"618":{"position":[[49,4]]},"624":{"position":[[49,4]]},"630":{"position":[[49,4]]},"636":{"position":[[49,4]]},"643":{"position":[[102,3],[201,4]]},"645":{"position":[[76,3],[133,3],[297,4],[311,3],[404,3]]},"646":{"position":[[49,4],[474,3],[686,3]]},"647":{"position":[[143,3]]},"650":{"position":[[101,3],[200,4]]},"652":{"position":[[76,3],[133,3],[297,4],[311,3],[404,3]]},"653":{"position":[[49,4]]},"654":{"position":[[195,3],[407,3]]},"655":{"position":[[149,3]]},"657":{"position":[[371,3]]},"658":{"position":[[363,3]]},"659":{"position":[[227,3]]},"669":{"position":[[49,4]]},"673":{"position":[[371,3]]},"674":{"position":[[363,3]]},"675":{"position":[[18,3]]},"676":{"position":[[70,3]]},"683":{"position":[[68,4]]},"684":{"position":[[49,4]]},"685":{"position":[[107,4]]},"688":{"position":[[371,3]]},"689":{"position":[[363,3]]},"691":{"position":[[70,3]]},"699":{"position":[[49,4]]},"705":{"position":[[49,4]]},"711":{"position":[[49,4]]},"716":{"position":[[227,4]]},"719":{"position":[[49,4]]},"720":{"position":[[122,4],[648,4]]},"724":{"position":[[309,3]]},"725":{"position":[[77,3]]},"726":{"position":[[25,4],[310,3],[495,3]]},"727":{"position":[[49,4]]},"731":{"position":[[198,4]]},"734":{"position":[[49,4]]},"740":{"position":[[49,4]]},"746":{"position":[[49,4]]},"756":{"position":[[49,4]]},"769":{"position":[[49,4]]},"781":{"position":[[49,4]]},"796":{"position":[[49,4]]},"811":{"position":[[49,4]]},"827":{"position":[[49,4]]},"841":{"position":[[49,4]]},"850":{"position":[[49,4]]},"855":{"position":[[247,4],[320,4]]},"858":{"position":[[49,4]]},"859":{"position":[[122,4]]},"866":{"position":[[49,4]]},"878":{"position":[[49,4]]},"884":{"position":[[49,4]]},"890":{"position":[[49,4]]},"894":{"position":[[95,3]]},"895":{"position":[[521,3]]},"896":{"position":[[49,4]]},"900":{"position":[[290,3]]},"906":{"position":[[49,4]]},"921":{"position":[[49,4]]},"933":{"position":[[49,4]]},"949":{"position":[[49,4]]},"958":{"position":[[49,4]]},"967":{"position":[[49,4]]},"981":{"position":[[49,4]]},"987":{"position":[[30,4]]},"989":{"position":[[865,4],[1026,3]]},"990":{"position":[[49,4]]},"991":{"position":[[122,4]]},"996":{"position":[[49,4]]},"1002":{"position":[[30,4]]},"1004":{"position":[[948,4],[1109,3]]},"1005":{"position":[[49,4]]},"1009":{"position":[[122,4]]},"1014":{"position":[[49,4]]},"1021":{"position":[[49,4]]},"1027":{"position":[[49,4]]},"1033":{"position":[[53,4]]},"1044":{"position":[[49,4]]},"1052":{"position":[[49,4]]},"1060":{"position":[[49,4]]},"1066":{"position":[[49,3]]},"1067":{"position":[[30,4],[142,4],[202,3],[244,3],[339,4],[424,4],[537,3],[653,3]]},"1069":{"position":[[49,4]]},"1070":{"position":[[122,4],[391,4],[497,4],[615,4]]},"1075":{"position":[[49,4]]},"1081":{"position":[[143,3]]},"1082":{"position":[[80,4]]},"1083":{"position":[[118,3]]},"1084":{"position":[[49,4]]},"1085":{"position":[[197,4]]},"1093":{"position":[[49,4]]},"1100":{"position":[[49,4]]},"1106":{"position":[[49,4]]},"1112":{"position":[[49,4]]},"1124":{"position":[[49,4]]},"1132":{"position":[[49,4]]},"1133":{"position":[[711,4]]},"1200":{"position":[[560,3]]},"1226":{"position":[[197,3]]},"1227":{"position":[[79,4]]},"1230":{"position":[[297,4]]},"1243":{"position":[[1147,4],[1268,4]]},"1247":{"position":[[113,4],[468,4]]},"1252":{"position":[[49,4]]},"1446":{"position":[[17,4]]},"1469":{"position":[[52,4]]},"1470":{"position":[[83,4],[282,4]]},"1479":{"position":[[17,4]]}},"keywords":{}}],["app'",{"_index":2811,"title":{},"content":{"270":{"position":[[423,5]]},"274":{"position":[[713,5]]},"515":{"position":[[498,5]]},"728":{"position":[[215,5],[288,5]]},"1133":{"position":[[452,5],[568,5]]}},"keywords":{}}],["app.edit",{"_index":2792,"title":{},"content":{"264":{"position":[[929,8]]}},"keywords":{}}],["app.set",{"_index":5268,"title":{},"content":{"1067":{"position":[[65,7]]}},"keywords":{}}],["app/schemas/products.sql",{"_index":2533,"title":{},"content":{"236":{"position":[[1367,25]]}},"keywords":{}}],["appboard",{"_index":4992,"title":{},"content":{"900":{"position":[[238,9]]}},"keywords":{}}],["appear",{"_index":530,"title":{},"content":{"20":{"position":[[127,6]]},"74":{"position":[[840,7]]},"80":{"position":[[373,6]]},"189":{"position":[[803,8]]},"190":{"position":[[190,6],[257,7]]},"192":{"position":[[228,7]]},"217":{"position":[[428,7],[540,7],[1235,8]]},"218":{"position":[[1718,8]]},"228":{"position":[[984,8]]},"259":{"position":[[1186,8],[2767,8]]},"267":{"position":[[233,8]]},"268":{"position":[[1852,7]]},"269":{"position":[[1309,7]]},"270":{"position":[[1924,7]]},"290":{"position":[[392,7]]},"291":{"position":[[178,7],[1651,8]]},"301":{"position":[[338,7]]},"302":{"position":[[178,7],[1560,8]]},"308":{"position":[[77,7]]},"363":{"position":[[160,7]]},"436":{"position":[[725,6]]},"578":{"position":[[81,8]]},"1000":{"position":[[480,6]]},"1443":{"position":[[103,6]]},"1455":{"position":[[420,6]]},"1470":{"position":[[164,7]]}},"keywords":{}}],["append",{"_index":443,"title":{"1464":{"position":[[0,6]]}},"content":{"14":{"position":[[1096,9]]},"100":{"position":[[221,6]]},"128":{"position":[[315,8]]},"164":{"position":[[1730,6],[1779,8],[1880,9],[1935,6]]},"183":{"position":[[408,6]]},"190":{"position":[[723,6]]},"192":{"position":[[361,6]]},"217":{"position":[[806,6]]},"267":{"position":[[783,6]]},"278":{"position":[[1595,9],[1691,8]]},"290":{"position":[[614,6]]},"301":{"position":[[554,6]]},"320":{"position":[[808,6]]},"321":{"position":[[860,6],[958,6]]},"322":{"position":[[701,6]]},"326":{"position":[[640,6]]},"480":{"position":[[738,6]]},"488":{"position":[[150,6]]},"659":{"position":[[307,6]]},"676":{"position":[[150,6]]},"691":{"position":[[150,6]]},"821":{"position":[[1445,6]]},"1166":{"position":[[80,8]]},"1464":{"position":[[0,6],[7,6],[241,6],[364,6],[428,6]]},"1467":{"position":[[2825,7]]}},"keywords":{}}],["appfacebook",{"_index":4416,"title":{},"content":{"668":{"position":[[113,11]]}},"keywords":{}}],["appli",{"_index":360,"title":{"1439":{"position":[[29,6]]}},"content":{"12":{"position":[[154,5]]},"32":{"position":[[470,5]]},"44":{"position":[[449,8]]},"94":{"position":[[462,5],[2607,7],[3032,7]]},"97":{"position":[[295,7]]},"100":{"position":[[723,7],[1346,5]]},"111":{"position":[[279,7]]},"114":{"position":[[690,7]]},"115":{"position":[[381,7],[1362,7]]},"120":{"position":[[2207,7]]},"121":{"position":[[507,7]]},"138":{"position":[[270,7]]},"141":{"position":[[580,7]]},"142":{"position":[[383,7]]},"162":{"position":[[1253,5]]},"192":{"position":[[1923,5]]},"208":{"position":[[851,5]]},"217":{"position":[[1968,5]]},"218":{"position":[[1251,5],[1878,5]]},"219":{"position":[[568,5]]},"259":{"position":[[1381,5],[2327,5],[2927,5]]},"271":{"position":[[17,7]]},"278":{"position":[[486,5],[1730,7]]},"279":{"position":[[49,7]]},"291":{"position":[[1254,5],[1424,5],[1811,5],[1848,5]]},"301":{"position":[[1000,5]]},"302":{"position":[[1179,5],[1339,5],[1720,5],[1757,5]]},"307":{"position":[[638,5]]},"309":{"position":[[224,5],[1679,5]]},"319":{"position":[[1096,7]]},"321":{"position":[[718,8]]},"322":{"position":[[1573,5]]},"324":{"position":[[646,7]]},"332":{"position":[[704,7]]},"415":{"position":[[128,5]]},"417":{"position":[[1160,7]]},"438":{"position":[[1676,7]]},"480":{"position":[[1374,6]]},"502":{"position":[[198,7]]},"517":{"position":[[263,5],[1027,5],[1254,5]]},"534":{"position":[[1638,5]]},"545":{"position":[[769,7]]},"554":{"position":[[233,8]]},"577":{"position":[[137,5]]},"578":{"position":[[190,7]]},"588":{"position":[[132,5]]},"605":{"position":[[204,7]]},"767":{"position":[[1373,7]]},"792":{"position":[[10,5]]},"824":{"position":[[1439,7]]},"869":{"position":[[166,7]]},"918":{"position":[[10,5]]},"989":{"position":[[400,8]]},"1000":{"position":[[779,5],[841,5]]},"1004":{"position":[[483,8]]},"1020":{"position":[[1814,7]]},"1021":{"position":[[869,7]]},"1155":{"position":[[91,5],[569,6]]},"1438":{"position":[[499,7]]},"1439":{"position":[[158,8],[232,7],[415,5],[810,8],[1558,6],[1634,7]]},"1442":{"position":[[1555,5],[1567,5]]},"1451":{"position":[[755,7]]},"1452":{"position":[[1630,7]]},"1453":{"position":[[876,7]]},"1459":{"position":[[715,7],[1767,7]]},"1477":{"position":[[306,8],[473,8],[1593,5],[2901,5],[3915,5]]}},"keywords":{}}],["applic",{"_index":206,"title":{"30":{"position":[[4,12]]},"80":{"position":[[9,12]]},"134":{"position":[[4,11]]},"168":{"position":[[30,12]]},"436":{"position":[[24,12]]}},"content":{"6":{"position":[[192,11]]},"29":{"position":[[74,11]]},"30":{"position":[[14,11]]},"31":{"position":[[170,12]]},"38":{"position":[[532,12]]},"54":{"position":[[100,12]]},"68":{"position":[[311,12],[348,11]]},"79":{"position":[[298,11]]},"80":{"position":[[14,11]]},"81":{"position":[[774,11]]},"82":{"position":[[1067,12],[1557,11],[1619,11]]},"154":{"position":[[1597,10],[1860,12]]},"168":{"position":[[45,12]]},"173":{"position":[[642,12],[675,11],[718,11],[1081,12],[1177,12]]},"191":{"position":[[2283,12]]},"217":{"position":[[198,11]]},"240":{"position":[[2393,11]]},"266":{"position":[[207,12]]},"268":{"position":[[2039,11]]},"269":{"position":[[1501,11]]},"270":{"position":[[2117,11]]},"288":{"position":[[94,11]]},"290":{"position":[[175,11]]},"299":{"position":[[94,11]]},"301":{"position":[[128,11]]},"306":{"position":[[667,11]]},"320":{"position":[[111,12]]},"321":{"position":[[1098,13],[1270,11],[1299,11],[1438,11]]},"323":{"position":[[1905,12]]},"329":{"position":[[485,11],[788,12],[1039,11]]},"339":{"position":[[60,12]]},"387":{"position":[[533,12],[650,12]]},"429":{"position":[[951,13]]},"432":{"position":[[757,10],[860,10]]},"436":{"position":[[522,11],[958,11],[1070,11]]},"446":{"position":[[37,11],[208,11]]},"448":{"position":[[447,12],[575,12],[1106,12]]},"529":{"position":[[827,10]]},"531":{"position":[[241,12],[501,11]]},"543":{"position":[[351,11]]},"545":{"position":[[701,11]]},"554":{"position":[[290,12],[457,12]]},"556":{"position":[[645,12],[762,12]]},"626":{"position":[[166,12]]},"646":{"position":[[434,11]]},"654":{"position":[[155,11]]},"670":{"position":[[123,12],[227,12]]},"709":{"position":[[68,11]]},"716":{"position":[[133,12],[246,11]]},"718":{"position":[[60,11],[165,11]]},"724":{"position":[[189,11]]},"726":{"position":[[95,11],[150,11]]},"741":{"position":[[121,12],[223,12]]},"757":{"position":[[2243,12]]},"770":{"position":[[2243,12]]},"797":{"position":[[2250,12]]},"812":{"position":[[2250,12]]},"828":{"position":[[2250,12]]},"840":{"position":[[2020,11]]},"849":{"position":[[3140,11]]},"885":{"position":[[120,12],[221,12]]},"964":{"position":[[137,13]]},"985":{"position":[[636,12]]},"988":{"position":[[224,11]]},"989":{"position":[[545,11],[696,12],[818,12]]},"991":{"position":[[387,12],[539,12],[655,12]]},"1000":{"position":[[950,12]]},"1003":{"position":[[224,11]]},"1004":{"position":[[628,11],[779,12],[901,12]]},"1009":{"position":[[450,12],[602,12],[718,12]]},"1083":{"position":[[230,12]]},"1085":{"position":[[589,12]]},"1237":{"position":[[61,12]]},"1362":{"position":[[58,12]]},"1434":{"position":[[651,12]]},"1444":{"position":[[691,12]]},"1452":{"position":[[604,10]]},"1465":{"position":[[93,13]]},"1474":{"position":[[372,10]]},"1475":{"position":[[314,10]]}},"keywords":{}}],["application"",{"_index":4973,"title":{},"content":{"898":{"position":[[750,18]]}},"keywords":{}}],["application."",{"_index":4975,"title":{},"content":{"898":{"position":[[977,19]]}},"keywords":{}}],["application/json",{"_index":5092,"title":{},"content":{"943":{"position":[[1047,17],[1138,17]]},"1241":{"position":[[243,16]]}},"keywords":{}}],["apply"",{"_index":6500,"title":{},"content":{"1442":{"position":[[1233,11]]}},"keywords":{}}],["approach",{"_index":981,"title":{},"content":{"66":{"position":[[740,8]]},"113":{"position":[[912,10]]},"197":{"position":[[485,8]]},"209":{"position":[[744,8]]},"211":{"position":[[306,8]]},"221":{"position":[[1788,8]]},"240":{"position":[[3179,8]]},"267":{"position":[[532,12]]},"977":{"position":[[380,8]]},"1388":{"position":[[361,9]]}},"keywords":{}}],["appropri",{"_index":873,"title":{},"content":{"58":{"position":[[194,11]]},"83":{"position":[[700,11]]},"99":{"position":[[839,11]]},"107":{"position":[[2978,11],[3238,11]]},"158":{"position":[[468,11],[572,11]]},"162":{"position":[[1953,11]]},"169":{"position":[[433,11]]},"202":{"position":[[190,11]]},"217":{"position":[[368,11]]},"264":{"position":[[663,11]]},"288":{"position":[[709,11]]},"299":{"position":[[624,11]]},"367":{"position":[[272,11]]},"368":{"position":[[341,11]]},"479":{"position":[[382,11]]},"645":{"position":[[43,13]]},"652":{"position":[[43,13]]},"750":{"position":[[754,11]]},"755":{"position":[[341,11]]},"766":{"position":[[754,11]]},"767":{"position":[[1775,11]]},"768":{"position":[[341,11]]},"789":{"position":[[1155,11]]},"792":{"position":[[1715,11]]},"795":{"position":[[339,11]]},"807":{"position":[[742,11]]},"810":{"position":[[339,11]]},"823":{"position":[[742,11]]},"824":{"position":[[1837,11]]},"826":{"position":[[339,11]]},"869":{"position":[[1133,11]]},"904":{"position":[[1376,11]]},"905":{"position":[[344,11]]},"917":{"position":[[387,11]]},"918":{"position":[[1668,11]]},"919":{"position":[[850,11]]},"920":{"position":[[344,11]]},"931":{"position":[[1033,11]]},"932":{"position":[[344,11]]},"948":{"position":[[344,11]]},"964":{"position":[[518,11]]},"965":{"position":[[387,11]]},"966":{"position":[[344,11]]},"1176":{"position":[[674,11]]},"1185":{"position":[[200,11],[474,11]]},"1194":{"position":[[684,11]]},"1203":{"position":[[845,11]]},"1226":{"position":[[485,11]]},"1243":{"position":[[262,11]]},"1264":{"position":[[102,11]]},"1277":{"position":[[151,11]]},"1286":{"position":[[277,11]]},"1301":{"position":[[277,11]]},"1325":{"position":[[277,11]]},"1354":{"position":[[509,11]]},"1361":{"position":[[87,11]]},"1382":{"position":[[265,11],[728,11]]}},"keywords":{}}],["approv",{"_index":322,"title":{"280":{"position":[[0,9]]}},"content":{"11":{"position":[[1047,7]]},"280":{"position":[[305,7],[638,8],[1355,9],[1405,9],[1805,9],[1887,8],[2002,9]]},"281":{"position":[[1090,9]]},"515":{"position":[[945,9]]},"554":{"position":[[376,9]]}},"keywords":{}}],["approxim",{"_index":1030,"title":{},"content":{"68":{"position":[[1031,11]]},"99":{"position":[[801,11]]},"115":{"position":[[1435,14]]},"284":{"position":[[612,13],[669,11]]},"789":{"position":[[1042,13]]},"1144":{"position":[[588,11]]},"1170":{"position":[[588,11],[1057,11]]},"1213":{"position":[[443,11]]},"1220":{"position":[[443,11],[734,11]]},"1471":{"position":[[908,13]]}},"keywords":{}}],["apt",{"_index":3098,"title":{},"content":{"319":{"position":[[13,3]]}},"keywords":{}}],["arbitrari",{"_index":630,"title":{},"content":{"27":{"position":[[371,9]]},"279":{"position":[[926,9]]},"331":{"position":[[142,9]]},"333":{"position":[[350,9]]}},"keywords":{}}],["architect",{"_index":3203,"title":{},"content":{"332":{"position":[[9,11]]}},"keywords":{}}],["architectur",{"_index":1255,"title":{"84":{"position":[[22,14]]},"330":{"position":[[10,13]]}},"content":{"84":{"position":[[385,12]]},"95":{"position":[[97,13]]},"125":{"position":[[654,13]]},"320":{"position":[[1486,13]]},"330":{"position":[[25,13]]}},"keywords":{}}],["area",{"_index":899,"title":{},"content":{"60":{"position":[[82,6]]}},"keywords":{}}],["aren't",{"_index":1621,"title":{},"content":{"114":{"position":[[819,6]]},"135":{"position":[[692,6]]},"228":{"position":[[655,6]]},"229":{"position":[[392,6]]},"263":{"position":[[8,6]]},"277":{"position":[[437,6]]},"285":{"position":[[14,6]]},"343":{"position":[[614,6]]},"387":{"position":[[174,6]]},"448":{"position":[[174,6]]},"534":{"position":[[174,6]]},"556":{"position":[[174,6]]},"573":{"position":[[178,6]]},"584":{"position":[[166,6]]},"611":{"position":[[174,6]]},"720":{"position":[[174,6]]},"859":{"position":[[174,6]]},"1070":{"position":[[174,6]]},"1085":{"position":[[230,6]]},"1247":{"position":[[165,6]]},"1391":{"position":[[1053,6]]},"1438":{"position":[[705,6]]}},"keywords":{}}],["aren’t",{"_index":510,"title":{},"content":{"17":{"position":[[1134,6]]},"110":{"position":[[587,6]]}},"keywords":{}}],["argument",{"_index":1491,"title":{},"content":{"105":{"position":[[379,10]]},"108":{"position":[[98,9]]}},"keywords":{}}],["around",{"_index":1366,"title":{},"content":{"95":{"position":[[67,6]]},"158":{"position":[[802,7]]},"180":{"position":[[294,6]]},"190":{"position":[[1122,6]]},"296":{"position":[[7997,6]]},"309":{"position":[[1931,6]]},"602":{"position":[[750,6]]},"1444":{"position":[[1030,6]]}},"keywords":{}}],["around<br/>to",{"_index":6467,"title":{},"content":{"1434":{"position":[[2231,19]]}},"keywords":{}}],["arr$0",{"_index":1434,"title":{},"content":{"99":{"position":[[711,7]]}},"keywords":{}}],["arrang",{"_index":471,"title":{},"content":{"16":{"position":[[753,8]]},"1391":{"position":[[204,7]]}},"keywords":{}}],["array",{"_index":846,"title":{},"content":{"56":{"position":[[1483,5]]},"69":{"position":[[733,5]]},"71":{"position":[[105,5]]},"73":{"position":[[136,7]]},"94":{"position":[[610,5],[1035,5]]},"98":{"position":[[671,6]]},"100":{"position":[[249,6]]},"107":{"position":[[1265,5],[1359,5]]},"122":{"position":[[1087,6],[1725,5]]},"164":{"position":[[1788,5],[1828,5],[1850,5],[1964,5],[1998,5]]},"254":{"position":[[2293,5]]},"278":{"position":[[1669,6]]},"279":{"position":[[1196,5]]},"296":{"position":[[530,5],[1501,5],[1923,6],[2092,7],[2245,6],[2492,5],[7756,6],[7928,5]]},"314":{"position":[[1834,5]]},"387":{"position":[[835,5]]},"482":{"position":[[700,5]]},"517":{"position":[[928,5],[1033,5],[1260,5],[1758,5]]},"556":{"position":[[1053,5]]},"573":{"position":[[632,5]]},"574":{"position":[[226,5]]},"584":{"position":[[554,5]]},"585":{"position":[[216,5]]},"611":{"position":[[690,5],[1026,5]]},"637":{"position":[[461,5]]},"720":{"position":[[412,5]]},"1009":{"position":[[1088,5],[1665,6]]},"1045":{"position":[[1216,5]]},"1053":{"position":[[1216,5]]},"1061":{"position":[[1216,5]]},"1070":{"position":[[957,5]]},"1140":{"position":[[892,5]]},"1172":{"position":[[288,5]]},"1209":{"position":[[266,5]]},"1222":{"position":[[288,5]]},"1230":{"position":[[134,6]]},"1247":{"position":[[305,6]]},"1275":{"position":[[272,5]]},"1292":{"position":[[951,5]]},"1306":{"position":[[951,5]]},"1316":{"position":[[892,5]]},"1329":{"position":[[951,5]]},"1340":{"position":[[892,5]]},"1351":{"position":[[892,5]]},"1356":{"position":[[1075,5]]},"1379":{"position":[[1097,5]]},"1403":{"position":[[1097,5]]},"1414":{"position":[[1097,5]]},"1431":{"position":[[915,5]]},"1464":{"position":[[25,7],[59,5],[338,5],[777,6]]},"1467":{"position":[[166,7],[271,7],[662,7],[942,6],[1745,6],[1861,6],[2053,6],[2218,5]]},"1476":{"position":[[1342,5]]},"1477":{"position":[[2619,7],[2763,6],[2954,5],[3145,5],[3436,5],[3495,5],[3761,5],[3942,5],[4046,5],[4402,5],[4581,5],[4843,5]]}},"keywords":{}}],["array[tableassoci",{"_index":4775,"title":{},"content":{"842":{"position":[[2948,23]]}},"keywords":{}}],["array_agg",{"_index":5549,"title":{},"content":{"1140":{"position":[[926,9]]},"1316":{"position":[[926,9]]},"1340":{"position":[[926,9]]},"1351":{"position":[[926,9]]},"1431":{"position":[[949,9]]}},"keywords":{}}],["array_max_cardin",{"_index":5553,"title":{},"content":{"1140":{"position":[[974,21]]},"1316":{"position":[[974,21]]},"1340":{"position":[[974,21]]},"1351":{"position":[[974,21]]},"1431":{"position":[[997,21]]}},"keywords":{}}],["arraynullobjectfract",{"_index":1065,"title":{},"content":{"72":{"position":[[112,25]]}},"keywords":{}}],["arrays"",{"_index":6647,"title":{},"content":{"1464":{"position":[[435,13]]},"1467":{"position":[[2374,13]]}},"keywords":{}}],["arriv",{"_index":1083,"title":{},"content":{"74":{"position":[[582,6]]},"109":{"position":[[480,6]]},"121":{"position":[[608,7],[1568,6]]},"210":{"position":[[52,8],[3983,8]]},"240":{"position":[[4430,8]]},"321":{"position":[[938,8]]},"325":{"position":[[693,7]]},"616":{"position":[[484,8]]},"1118":{"position":[[1173,6]]},"1440":{"position":[[629,6],[745,6],[1060,6]]}},"keywords":{}}],["arrow",{"_index":2159,"title":{},"content":{"191":{"position":[[2148,5]]},"217":{"position":[[768,5]]},"240":{"position":[[2142,5]]}},"keywords":{}}],["articl",{"_index":301,"title":{},"content":{"11":{"position":[[348,8]]},"196":{"position":[[652,8]]},"233":{"position":[[837,8]]}},"keywords":{}}],["articlessolut",{"_index":3917,"title":{},"content":{"506":{"position":[[331,16]]}},"keywords":{}}],["asc",{"_index":5558,"title":{},"content":{"1140":{"position":[[1078,3]]},"1292":{"position":[[1038,3]]},"1306":{"position":[[1038,3]]},"1316":{"position":[[1078,3]]},"1329":{"position":[[1038,3]]},"1340":{"position":[[1078,3]]},"1351":{"position":[[1078,3]]},"1370":{"position":[[467,3]]},"1379":{"position":[[1182,3]]},"1403":{"position":[[1182,3]]},"1414":{"position":[[1182,3]]},"1431":{"position":[[1101,3]]}},"keywords":{}}],["ascend",{"_index":2851,"title":{},"content":{"279":{"position":[[749,9]]},"402":{"position":[[819,9]]},"417":{"position":[[176,9],[345,9],[504,9]]},"438":{"position":[[176,9],[345,9],[504,9]]},"502":{"position":[[636,9],[805,9],[964,9]]},"545":{"position":[[176,9],[345,9],[504,9]]},"1020":{"position":[[713,9],[1155,10],[1367,9],[1969,9]]},"1021":{"position":[[1198,9],[1382,9]]}},"keywords":{}}],["ascii",{"_index":6005,"title":{},"content":{"1292":{"position":[[1073,5]]},"1306":{"position":[[1073,5]]},"1329":{"position":[[1073,5]]}},"keywords":{}}],["asensit",{"_index":5561,"title":{},"content":{"1140":{"position":[[1117,10]]},"1292":{"position":[[1117,10]]},"1306":{"position":[[1117,10]]},"1316":{"position":[[1117,10]]},"1329":{"position":[[1117,10]]},"1340":{"position":[[1117,10]]},"1351":{"position":[[1117,10]]},"1379":{"position":[[1223,10]]},"1403":{"position":[[1223,10]]},"1414":{"position":[[1223,10]]},"1431":{"position":[[1140,10]]}},"keywords":{}}],["asexpect",{"_index":1860,"title":{},"content":{"156":{"position":[[516,14]]}},"keywords":{}}],["asin",{"_index":5565,"title":{},"content":{"1140":{"position":[[1159,4]]},"1316":{"position":[[1159,4]]},"1340":{"position":[[1159,4]]},"1351":{"position":[[1159,4]]},"1431":{"position":[[1182,4]]}},"keywords":{}}],["ask",{"_index":1555,"title":{},"content":{"107":{"position":[[3868,3]]},"123":{"position":[[360,4]]},"232":{"position":[[1044,3]]},"281":{"position":[[1831,3]]},"912":{"position":[[1181,3]]},"1286":{"position":[[1770,4]]},"1301":{"position":[[1606,4]]},"1325":{"position":[[1770,4]]}},"keywords":{}}],["aspect",{"_index":5,"title":{},"content":{"1":{"position":[[35,7]]},"197":{"position":[[717,7]]},"410":{"position":[[36,8]]}},"keywords":{}}],["asselect",{"_index":1402,"title":{},"content":{"98":{"position":[[260,8]]}},"keywords":{}}],["assert",{"_index":753,"title":{},"content":{"43":{"position":[[349,6]]},"129":{"position":[[14,6],[1203,8]]},"1140":{"position":[[1203,9]]},"1316":{"position":[[1203,9]]},"1340":{"position":[[1203,9]]},"1351":{"position":[[1203,9]]},"1379":{"position":[[1275,9]]},"1403":{"position":[[1275,9]]},"1414":{"position":[[1275,9]]},"1431":{"position":[[1226,9]]}},"keywords":{}}],["assign",{"_index":1598,"title":{},"content":{"112":{"position":[[810,8],[826,9],[1056,8]]},"173":{"position":[[873,11]]},"246":{"position":[[140,8]]},"288":{"position":[[435,6],[684,8]]},"299":{"position":[[599,8]]},"331":{"position":[[515,9]]},"543":{"position":[[274,8]]},"591":{"position":[[122,6]]},"660":{"position":[[746,6]]},"723":{"position":[[62,8]]},"839":{"position":[[201,8]]},"840":{"position":[[2070,8],[2132,8]]},"848":{"position":[[238,8]]},"849":{"position":[[3210,8],[3272,8]]},"917":{"position":[[376,6]]},"965":{"position":[[376,6]]},"1185":{"position":[[175,8]]},"1382":{"position":[[240,8]]},"1384":{"position":[[559,6]]},"1386":{"position":[[607,8]]},"1417":{"position":[[347,8]]},"1437":{"position":[[666,10],[736,10],[884,11],[998,10],[1046,10]]},"1474":{"position":[[750,8],[883,8]]}},"keywords":{}}],["assigne",{"_index":4048,"title":{},"content":{"535":{"position":[[373,9]]}},"keywords":{}}],["assigneesbranchescollaboratorsissu",{"_index":4029,"title":{},"content":{"529":{"position":[[866,35]]}},"keywords":{}}],["assignmentsexpens",{"_index":4351,"title":{},"content":{"628":{"position":[[364,18]]}},"keywords":{}}],["assignmentsproject",{"_index":4347,"title":{},"content":{"628":{"position":[[269,18]]}},"keywords":{}}],["assignmentsprojectsrolesus",{"_index":4348,"title":{},"content":{"628":{"position":[[293,28]]}},"keywords":{}}],["assist",{"_index":1107,"title":{},"content":{"80":{"position":[[41,6]]},"910":{"position":[[413,11]]},"926":{"position":[[413,11]]},"937":{"position":[[413,11]]},"953":{"position":[[413,11]]},"971":{"position":[[413,11]]}},"keywords":{}}],["associ",{"_index":556,"title":{},"content":{"21":{"position":[[22,10]]},"48":{"position":[[240,10]]},"49":{"position":[[350,10]]},"54":{"position":[[695,10]]},"63":{"position":[[790,10]]},"80":{"position":[[549,10]]},"103":{"position":[[50,10]]},"120":{"position":[[2342,10]]},"138":{"position":[[2044,10],[2269,10]]},"141":{"position":[[1990,10]]},"142":{"position":[[2104,10],[2329,10]]},"146":{"position":[[750,10]]},"149":{"position":[[473,10],[723,10]]},"152":{"position":[[485,10],[726,10]]},"239":{"position":[[1141,10],[2296,10]]},"263":{"position":[[657,10]]},"296":{"position":[[7700,10]]},"319":{"position":[[790,10]]},"320":{"position":[[1731,10]]},"321":{"position":[[239,10]]},"323":{"position":[[1002,10]]},"326":{"position":[[562,10],[1695,10]]},"445":{"position":[[87,10]]},"448":{"position":[[759,10]]},"486":{"position":[[391,10]]},"512":{"position":[[154,10]]},"517":{"position":[[57,10]]},"548":{"position":[[921,10]]},"571":{"position":[[460,11]]},"581":{"position":[[137,11]]},"590":{"position":[[253,10],[664,10]]},"617":{"position":[[382,11]]},"649":{"position":[[27,10]]},"658":{"position":[[391,10]]},"674":{"position":[[391,10]]},"683":{"position":[[133,10]]},"689":{"position":[[391,10]]},"767":{"position":[[155,10],[225,9],[1175,9]]},"792":{"position":[[475,10],[545,9],[1431,9]]},"824":{"position":[[267,10],[337,9],[1241,9]]},"842":{"position":[[681,10],[795,10],[2854,13],[2868,12],[2889,10],[3086,10],[3149,11],[3579,10],[3719,10]]},"843":{"position":[[495,13]]},"851":{"position":[[294,10],[393,10]]},"879":{"position":[[705,10]]},"904":{"position":[[267,10],[337,9],[1134,9]]},"918":{"position":[[475,10],[545,9],[1425,9]]},"1040":{"position":[[242,10]]},"1050":{"position":[[242,10]]},"1051":{"position":[[267,10],[337,9]]},"1058":{"position":[[242,10]]},"1070":{"position":[[455,10],[573,10]]},"1131":{"position":[[122,10]]},"1138":{"position":[[667,10]]},"1151":{"position":[[652,10]]},"1179":{"position":[[479,10]]},"1245":{"position":[[334,11]]},"1260":{"position":[[366,10]]},"1276":{"position":[[35,10]]},"1289":{"position":[[249,10],[328,9]]},"1313":{"position":[[477,10]]},"1321":{"position":[[29,10],[108,9]]},"1334":{"position":[[29,10],[108,9]]},"1337":{"position":[[477,10]]},"1348":{"position":[[477,10]]},"1373":{"position":[[267,10],[337,9]]},"1374":{"position":[[267,10],[337,9]]},"1386":{"position":[[450,10]]},"1427":{"position":[[418,10]]},"1446":{"position":[[150,10],[201,10]]},"1459":{"position":[[1208,11],[1775,14]]},"1465":{"position":[[928,12]]},"1470":{"position":[[434,10],[1055,10],[1180,10],[1324,10]]},"1477":{"position":[[679,11],[1221,10],[1637,11],[3976,11]]}},"keywords":{}}],["associatedjson",{"_index":723,"title":{},"content":{"41":{"position":[[33,14]]}},"keywords":{}}],["associatedroles/storage.objectadminon",{"_index":5788,"title":{},"content":{"1176":{"position":[[347,37]]}},"keywords":{}}],["associations/[n]/child_join_column_nam",{"_index":4781,"title":{},"content":{"842":{"position":[[3336,40]]}},"keywords":{}}],["associations/[n]/child_table_nam",{"_index":4776,"title":{},"content":{"842":{"position":[[2975,34]]}},"keywords":{}}],["associations/[n]/load_during_backfil",{"_index":4782,"title":{},"content":{"842":{"position":[[3496,38]]}},"keywords":{}}],["associations/[n]/load_during_increment",{"_index":4783,"title":{},"content":{"842":{"position":[[3630,41]]}},"keywords":{}}],["associations/[n]/parent_join_column_nam",{"_index":4780,"title":{},"content":{"842":{"position":[[3177,41]]}},"keywords":{}}],["assum",{"_index":2422,"title":{},"content":{"213":{"position":[[185,6]]},"234":{"position":[[20,6]]},"419":{"position":[[2309,7],[2421,7]]},"441":{"position":[[918,7],[1030,7]]},"504":{"position":[[1938,7],[2050,7]]},"547":{"position":[[2311,7],[2423,7]]},"639":{"position":[[1936,7],[2048,7]]},"754":{"position":[[1162,6]]},"794":{"position":[[1366,6]]},"809":{"position":[[1366,6]]},"825":{"position":[[1202,6]]},"1023":{"position":[[2292,7],[2404,7]]},"1042":{"position":[[375,7]]},"1043":{"position":[[1039,7]]},"1051":{"position":[[1301,7]]},"1059":{"position":[[1094,7]]},"1286":{"position":[[1452,6]]},"1301":{"position":[[1288,6]]},"1325":{"position":[[1452,6]]},"1429":{"position":[[673,8]]},"1438":{"position":[[465,6]]}},"keywords":{}}],["assumpt",{"_index":6576,"title":{},"content":{"1453":{"position":[[1078,11]]}},"keywords":{}}],["asymmetr",{"_index":5571,"title":{},"content":{"1140":{"position":[[1246,10]]},"1316":{"position":[[1246,10]]},"1340":{"position":[[1246,10]]},"1351":{"position":[[1246,10]]},"1379":{"position":[[1325,10]]},"1403":{"position":[[1325,10]]},"1414":{"position":[[1325,10]]},"1431":{"position":[[1269,10]]}},"keywords":{}}],["async",{"_index":4251,"title":{},"content":{"593":{"position":[[506,7]]},"594":{"position":[[1152,5],[1267,5],[1356,5],[1427,5]]},"595":{"position":[[301,6],[1893,6]]},"1452":{"position":[[2435,5]]}},"keywords":{}}],["atan",{"_index":5577,"title":{},"content":{"1140":{"position":[[1351,4]]},"1316":{"position":[[1351,4]]},"1340":{"position":[[1351,4]]},"1351":{"position":[[1351,4]]},"1431":{"position":[[1374,4]]}},"keywords":{}}],["atla",{"_index":2210,"title":{},"content":{"199":{"position":[[217,5],[251,5]]},"202":{"position":[[242,6]]},"203":{"position":[[274,5]]},"204":{"position":[[314,5]]},"206":{"position":[[390,6]]},"210":{"position":[[1738,5]]},"780":{"position":[[469,6]]},"1251":{"position":[[230,6]]}},"keywords":{}}],["atlassian",{"_index":3784,"title":{},"content":{"471":{"position":[[1,9]]},"472":{"position":[[338,9],[653,9]]},"660":{"position":[[1144,9]]}},"keywords":{}}],["atom",{"_index":2194,"title":{},"content":{"197":{"position":[[1289,6]]},"922":{"position":[[365,6]]},"1140":{"position":[[1390,6]]},"1316":{"position":[[1390,6]]},"1340":{"position":[[1390,6]]},"1351":{"position":[[1390,6]]},"1379":{"position":[[1441,6]]},"1403":{"position":[[1441,6]]},"1414":{"position":[[1441,6]]},"1431":{"position":[[1413,6]]}},"keywords":{}}],["attach",{"_index":1874,"title":{},"content":{"159":{"position":[[88,6]]},"413":{"position":[[338,6]]},"415":{"position":[[980,6]]},"611":{"position":[[996,8]]},"1204":{"position":[[410,6],[448,6]]},"1370":{"position":[[477,6]]}},"keywords":{}}],["attempt",{"_index":353,"title":{},"content":{"12":{"position":[[10,7]]},"62":{"position":[[326,10]]},"82":{"position":[[2922,7]]},"105":{"position":[[1170,10]]},"125":{"position":[[771,7]]},"138":{"position":[[1291,10]]},"141":{"position":[[1380,10]]},"142":{"position":[[1284,10]]},"278":{"position":[[1370,8]]},"309":{"position":[[1310,7],[1340,8],[1471,7],[1771,7]]},"387":{"position":[[1019,7]]},"397":{"position":[[1002,7]]},"429":{"position":[[652,7]]},"602":{"position":[[175,7]]},"785":{"position":[[389,7]]},"842":{"position":[[1417,7],[1763,7]]},"1036":{"position":[[335,7]]},"1151":{"position":[[427,7]]},"1157":{"position":[[54,10]]},"1440":{"position":[[193,7]]},"1447":{"position":[[353,7]]}},"keywords":{}}],["attent",{"_index":3000,"title":{},"content":{"296":{"position":[[1758,9]]}},"keywords":{}}],["attenu",{"_index":1562,"title":{},"content":{"109":{"position":[[736,10]]}},"keywords":{}}],["attribut",{"_index":2559,"title":{},"content":{"236":{"position":[[2621,9]]},"517":{"position":[[3155,11]]},"747":{"position":[[201,11],[241,11],[363,11]]},"909":{"position":[[208,9]]},"925":{"position":[[208,9]]},"936":{"position":[[208,9]]},"952":{"position":[[208,9]]},"970":{"position":[[208,9]]},"1096":{"position":[[182,9]]},"1230":{"position":[[1233,9]]},"1292":{"position":[[1191,9]]},"1306":{"position":[[1191,9]]},"1329":{"position":[[1191,9]]}},"keywords":{}}],["attribute_definit",{"_index":5468,"title":{},"content":{"1134":{"position":[[387,21]]}},"keywords":{}}],["attributea",{"_index":3394,"title":{},"content":{"366":{"position":[[110,10]]},"903":{"position":[[136,10]]},"915":{"position":[[136,10]]},"930":{"position":[[136,10]]},"963":{"position":[[290,10]]}},"keywords":{}}],["attributesattribut",{"_index":5443,"title":{},"content":{"1128":{"position":[[78,19]]}},"keywords":{}}],["attributescompani",{"_index":4428,"title":{},"content":{"682":{"position":[[94,17]]}},"keywords":{}}],["attributesconversationsconvers",{"_index":4430,"title":{},"content":{"682":{"position":[[136,35]]}},"keywords":{}}],["attributesproduct",{"_index":5365,"title":{},"content":{"1096":{"position":[[205,17]]}},"keywords":{}}],["attribution_window",{"_index":4561,"title":{},"content":{"747":{"position":[[181,19]]},"748":{"position":[[213,19]]}},"keywords":{}}],["atzr|xxxxxxxxxxxx",{"_index":3502,"title":{},"content":{"388":{"position":[[310,17]]}},"keywords":{}}],["audienc",{"_index":5335,"title":{},"content":{"1080":{"position":[[471,8],[509,8],[546,8],[583,8],[620,8],[651,8],[683,8],[720,8],[769,8]]}},"keywords":{}}],["audit",{"_index":1157,"title":{},"content":{"82":{"position":[[905,8]]},"473":{"position":[[312,5]]},"477":{"position":[[388,9]]},"598":{"position":[[352,9]]},"864":{"position":[[107,9]]},"876":{"position":[[107,9]]}},"keywords":{}}],["audit_log",{"_index":5470,"title":{},"content":{"1134":{"position":[[491,10]]}},"keywords":{}}],["auditblog",{"_index":3782,"title":{},"content":{"470":{"position":[[1,9]]}},"keywords":{}}],["auditsticket",{"_index":5454,"title":{},"content":{"1128":{"position":[[301,12]]}},"keywords":{}}],["augment",{"_index":2852,"title":{},"content":{"279":{"position":[[784,7]]}},"keywords":{}}],["aurora",{"_index":2047,"title":{"792":{"position":[[7,7]]},"918":{"position":[[7,7]]},"1334":{"position":[[43,7]]}},"content":{"179":{"position":[[532,7]]},"792":{"position":[[51,6],[1136,6],[1260,6],[2276,6]]},"794":{"position":[[623,7]]},"809":{"position":[[623,7]]},"918":{"position":[[51,6],[1112,6],[1236,6],[1286,6]]},"1286":{"position":[[680,7]]},"1289":{"position":[[213,7],[1493,7]]},"1310":{"position":[[814,7]]},"1325":{"position":[[680,7]]}},"keywords":{}}],["auroragoogl",{"_index":4699,"title":{},"content":{"788":{"position":[[188,12]]},"790":{"position":[[104,12]]},"914":{"position":[[222,12]]},"916":{"position":[[109,12]]}},"keywords":{}}],["auth",{"_index":900,"title":{},"content":{"60":{"position":[[202,4]]},"82":{"position":[[1614,4]]},"169":{"position":[[1494,4]]},"263":{"position":[[188,4]]},"267":{"position":[[2026,4]]},"270":{"position":[[288,4]]},"274":{"position":[[586,4]]},"284":{"position":[[97,4]]},"340":{"position":[[354,4]]},"341":{"position":[[91,4],[126,4],[207,4],[334,4]]},"387":{"position":[[292,4]]},"489":{"position":[[215,4],[626,4]]},"662":{"position":[[215,4],[626,4]]},"677":{"position":[[215,4],[626,4]]},"692":{"position":[[215,4],[626,4]]},"726":{"position":[[383,4]]},"997":{"position":[[72,4],[83,4]]},"1111":{"position":[[8,4]]},"1113":{"position":[[131,4],[149,4]]}},"keywords":{}}],["auth_method",{"_index":4518,"title":{},"content":{"721":{"position":[[234,12]]}},"keywords":{}}],["auth_token",{"_index":5154,"title":{},"content":{"998":{"position":[[109,11]]},"1113":{"position":[[119,11]]},"1114":{"position":[[146,11]]}},"keywords":{}}],["auth_typ",{"_index":3495,"title":{},"content":{"388":{"position":[[195,10]]},"432":{"position":[[984,10],[1079,10],[1148,10]]},"433":{"position":[[221,10],[632,10]]},"449":{"position":[[193,10]]},"575":{"position":[[232,10]]},"586":{"position":[[196,10]]},"612":{"position":[[206,10]]},"620":{"position":[[128,10]]},"736":{"position":[[124,10]]},"748":{"position":[[124,10]]},"843":{"position":[[159,10]]},"860":{"position":[[191,10]]},"1010":{"position":[[195,10]]},"1016":{"position":[[121,10]]},"1086":{"position":[[213,10]]},"1102":{"position":[[133,10]]},"1189":{"position":[[220,10]]},"1231":{"position":[[154,10]]},"1248":{"position":[[154,10]]},"1363":{"position":[[141,10]]},"1387":{"position":[[243,10],[797,10]]}},"keywords":{}}],["authent",{"_index":895,"title":{"336":{"position":[[22,14]]},"339":{"position":[[0,14]]},"340":{"position":[[0,14]]},"383":{"position":[[16,12]]},"384":{"position":[[0,14]]},"429":{"position":[[0,14]]},"445":{"position":[[16,12]]},"446":{"position":[[0,14]]},"489":{"position":[[0,15]]},"523":{"position":[[16,12]]},"531":{"position":[[16,12]]},"553":{"position":[[16,12]]},"570":{"position":[[16,12]]},"571":{"position":[[0,14]]},"582":{"position":[[0,14]]},"608":{"position":[[16,12]]},"609":{"position":[[0,14]]},"615":{"position":[[16,12]]},"644":{"position":[[16,12]]},"651":{"position":[[16,12]]},"662":{"position":[[0,15]]},"677":{"position":[[0,15]]},"692":{"position":[[0,15]]},"717":{"position":[[16,12]]},"724":{"position":[[0,15]]},"725":{"position":[[13,15]]},"726":{"position":[[6,15]]},"732":{"position":[[16,12]]},"856":{"position":[[16,15]]},"857":{"position":[[17,15]]},"987":{"position":[[16,12]]},"1002":{"position":[[16,12]]},"1082":{"position":[[6,14]]},"1083":{"position":[[21,14]]},"1130":{"position":[[7,15]]},"1131":{"position":[[10,15]]},"1227":{"position":[[6,14]]},"1228":{"position":[[7,15]]},"1244":{"position":[[6,14]]},"1245":{"position":[[7,15]]},"1384":{"position":[[9,14]]}},"content":{"58":{"position":[[878,14]]},"60":{"position":[[221,12],[365,15]]},"68":{"position":[[698,13]]},"154":{"position":[[171,12],[2049,12]]},"169":{"position":[[1290,12],[1733,13]]},"201":{"position":[[118,14]]},"206":{"position":[[562,14]]},"259":{"position":[[395,12],[2084,12]]},"267":{"position":[[1764,14],[1835,13]]},"340":{"position":[[125,12],[593,13]]},"359":{"position":[[57,14]]},"370":{"position":[[498,12]]},"382":{"position":[[31,12]]},"387":{"position":[[65,14]]},"388":{"position":[[47,14]]},"428":{"position":[[112,14]]},"429":{"position":[[9,14],[192,14],[391,14],[537,14],[584,14],[725,14],[908,14]]},"430":{"position":[[72,14],[127,14]]},"432":{"position":[[419,12],[507,14],[571,14],[677,12],[776,14],[879,14]]},"433":{"position":[[19,14],[437,15]]},"435":{"position":[[39,12]]},"436":{"position":[[1138,14]]},"438":{"position":[[604,12],[828,12],[975,12],[1440,12],[1525,15]]},"444":{"position":[[31,12]]},"448":{"position":[[65,14],[306,14]]},"449":{"position":[[47,14]]},"473":{"position":[[47,14]]},"475":{"position":[[265,12]]},"478":{"position":[[34,12]]},"489":{"position":[[65,14],[145,15],[492,15],[759,15],[873,14]]},"491":{"position":[[130,12]]},"500":{"position":[[70,14]]},"513":{"position":[[23,12]]},"517":{"position":[[750,14]]},"518":{"position":[[47,14]]},"522":{"position":[[23,12],[315,14]]},"526":{"position":[[10,14]]},"527":{"position":[[47,14]]},"530":{"position":[[23,12],[315,14]]},"534":{"position":[[65,14],[473,14],[502,12],[567,14],[623,14],[732,15]]},"535":{"position":[[47,14]]},"540":{"position":[[192,14],[264,14]]},"543":{"position":[[406,15]]},"551":{"position":[[23,12]]},"554":{"position":[[614,15]]},"556":{"position":[[65,14]]},"557":{"position":[[47,14]]},"564":{"position":[[106,14]]},"569":{"position":[[23,12]]},"573":{"position":[[69,14],[327,14],[347,14]]},"575":{"position":[[33,14]]},"581":{"position":[[294,12]]},"584":{"position":[[56,14],[86,12],[315,14],[363,15]]},"586":{"position":[[33,14]]},"597":{"position":[[228,12]]},"599":{"position":[[34,12]]},"601":{"position":[[250,15]]},"607":{"position":[[23,12]]},"611":{"position":[[65,14],[253,14],[307,14],[353,14]]},"612":{"position":[[47,14]]},"614":{"position":[[23,12]]},"619":{"position":[[69,14],[282,14],[302,14]]},"643":{"position":[[23,12]]},"646":{"position":[[341,14],[446,12]]},"650":{"position":[[23,12]]},"654":{"position":[[62,14],[167,12]]},"662":{"position":[[65,14],[145,15],[492,15],[759,15],[873,14]]},"664":{"position":[[105,14],[151,12]]},"677":{"position":[[65,14],[145,15],[492,15],[759,15],[873,14]]},"679":{"position":[[130,12]]},"683":{"position":[[23,12],[243,14]]},"685":{"position":[[61,14],[269,13]]},"686":{"position":[[34,14]]},"692":{"position":[[65,14],[145,15],[492,15],[759,15],[873,14]]},"694":{"position":[[130,12]]},"716":{"position":[[23,12]]},"720":{"position":[[65,14],[434,14],[481,14],[526,12]]},"721":{"position":[[47,14]]},"724":{"position":[[18,14]]},"731":{"position":[[23,12]]},"735":{"position":[[57,14],[142,14],[157,14],[228,14],[248,14]]},"757":{"position":[[198,12]]},"770":{"position":[[198,12]]},"780":{"position":[[328,14]]},"797":{"position":[[198,12]]},"812":{"position":[[198,12]]},"828":{"position":[[198,12]]},"840":{"position":[[681,14],[727,14],[2593,12]]},"842":{"position":[[446,15],[462,14],[561,15],[1011,15]]},"843":{"position":[[143,15]]},"849":{"position":[[487,14],[550,15],[1156,14],[1202,14]]},"855":{"position":[[158,12]]},"859":{"position":[[65,14],[253,12],[280,14],[342,14],[386,14]]},"860":{"position":[[47,14]]},"867":{"position":[[189,12]]},"879":{"position":[[297,14],[366,14],[452,14]]},"898":{"position":[[1642,13]]},"907":{"position":[[281,12]]},"923":{"position":[[281,12]]},"934":{"position":[[281,12]]},"950":{"position":[[281,12]]},"957":{"position":[[27,15]]},"968":{"position":[[281,12]]},"980":{"position":[[22,15]]},"987":{"position":[[57,12]]},"989":{"position":[[492,12]]},"991":{"position":[[65,14]]},"995":{"position":[[77,14]]},"1002":{"position":[[57,12]]},"1004":{"position":[[575,12]]},"1009":{"position":[[65,14]]},"1010":{"position":[[47,14]]},"1013":{"position":[[38,15]]},"1018":{"position":[[106,15]]},"1021":{"position":[[457,15],[521,15],[621,15]]},"1045":{"position":[[266,12]]},"1053":{"position":[[266,12]]},"1061":{"position":[[266,12]]},"1067":{"position":[[281,12],[398,14],[562,14]]},"1070":{"position":[[65,14]]},"1071":{"position":[[47,14]]},"1083":{"position":[[68,12]]},"1085":{"position":[[65,14],[168,12],[309,14],[331,14],[392,14],[452,12]]},"1111":{"position":[[23,15]]},"1129":{"position":[[33,12],[165,14]]},"1133":{"position":[[277,14],[388,14],[496,14],[616,14],[743,14]]},"1188":{"position":[[475,14],[537,14]]},"1195":{"position":[[231,14],[255,12]]},"1196":{"position":[[334,14],[427,14],[509,14]]},"1227":{"position":[[23,14],[311,13]]},"1228":{"position":[[8,14]]},"1230":{"position":[[73,14],[108,12],[211,14],[257,15]]},"1231":{"position":[[33,14]]},"1243":{"position":[[1047,12],[1367,14]]},"1247":{"position":[[56,14],[244,14],[279,12],[382,14],[428,15],[616,14]]},"1248":{"position":[[33,14]]},"1260":{"position":[[110,14]]},"1267":{"position":[[280,15],[344,15]]},"1277":{"position":[[394,15],[479,15]]},"1356":{"position":[[101,12]]},"1362":{"position":[[280,15],[347,15]]},"1384":{"position":[[76,12],[104,15],[138,15],[188,15],[1198,14]]},"1386":{"position":[[733,14],[787,14],[972,14],[1061,14]]},"1387":{"position":[[19,15],[573,15]]},"1392":{"position":[[210,14],[284,14],[335,14]]},"1447":{"position":[[471,12]]}},"keywords":{}}],["authenticatio",{"_index":6011,"title":{},"content":{"1292":{"position":[[1247,13]]},"1306":{"position":[[1247,13]]},"1329":{"position":[[1247,13]]}},"keywords":{}}],["authentication.a",{"_index":5940,"title":{},"content":{"1274":{"position":[[130,16]]}},"keywords":{}}],["authentication.an",{"_index":5938,"title":{},"content":{"1274":{"position":[[77,17]]}},"keywords":{}}],["authentication.at",{"_index":6278,"title":{},"content":{"1361":{"position":[[150,17]]}},"keywords":{}}],["authentication/consumer_secret",{"_index":4755,"title":{},"content":{"842":{"position":[[731,31]]}},"keywords":{}}],["authentication/password",{"_index":4761,"title":{},"content":{"842":{"position":[[1165,24]]}},"keywords":{}}],["authentication/token_key",{"_index":4756,"title":{},"content":{"842":{"position":[[845,25]]}},"keywords":{}}],["authentication/token_secret",{"_index":4757,"title":{},"content":{"842":{"position":[[914,28]]}},"keywords":{}}],["authenticationa",{"_index":4731,"title":{},"content":{"839":{"position":[[108,15]]},"848":{"position":[[108,15]]}},"keywords":{}}],["author",{"_index":626,"title":{"336":{"position":[[0,11]]},"338":{"position":[[8,13]]}},"content":{"27":{"position":[[283,9],[698,13]]},"63":{"position":[[1046,7],[1198,6]]},"82":{"position":[[818,13]]},"88":{"position":[[661,9]]},"263":{"position":[[92,9]]},"264":{"position":[[371,6]]},"270":{"position":[[192,9]]},"274":{"position":[[490,9]]},"284":{"position":[[1,9]]},"446":{"position":[[334,13]]},"489":{"position":[[100,14],[548,13],[701,14]]},"531":{"position":[[259,10]]},"548":{"position":[[282,13]]},"611":{"position":[[490,14]]},"662":{"position":[[100,14],[548,13],[701,14]]},"677":{"position":[[100,14],[548,13],[701,14]]},"692":{"position":[[100,14],[548,13],[701,14]]},"712":{"position":[[108,13],[415,13]]},"757":{"position":[[1097,10]]},"770":{"position":[[1097,10]]},"797":{"position":[[1097,10]]},"808":{"position":[[253,10]]},"812":{"position":[[1097,10]]},"828":{"position":[[1097,10]]},"895":{"position":[[398,13]]},"931":{"position":[[257,10]]},"989":{"position":[[570,13],[1090,10]]},"1004":{"position":[[653,13],[1173,10]]},"1009":{"position":[[302,13]]},"1031":{"position":[[451,13]]},"1059":{"position":[[257,10]]},"1085":{"position":[[662,10]]},"1140":{"position":[[1433,13]]},"1179":{"position":[[266,14]]},"1213":{"position":[[222,14]]},"1220":{"position":[[222,14]]},"1230":{"position":[[407,14]]},"1241":{"position":[[260,14]]},"1247":{"position":[[578,14]]},"1285":{"position":[[1027,9]]},"1286":{"position":[[2461,9]]},"1289":{"position":[[702,10]]},"1297":{"position":[[76,10]]},"1300":{"position":[[1027,9]]},"1301":{"position":[[2297,9]]},"1303":{"position":[[257,10]]},"1316":{"position":[[1433,13]]},"1324":{"position":[[1027,9]]},"1325":{"position":[[2461,9]]},"1340":{"position":[[1433,13]]},"1345":{"position":[[76,10]]},"1351":{"position":[[1433,13]]},"1379":{"position":[[1495,13]]},"1397":{"position":[[254,10]]},"1398":{"position":[[253,10]]},"1403":{"position":[[1495,13]]},"1414":{"position":[[1495,13]]},"1431":{"position":[[1456,13]]}},"keywords":{}}],["authorit",{"_index":1303,"title":{"1437":{"position":[[16,14]]}},"content":{"88":{"position":[[395,13]]},"419":{"position":[[2367,14]]},"441":{"position":[[976,14]]},"504":{"position":[[1996,14]]},"547":{"position":[[2369,14]]},"639":{"position":[[1994,14]]},"1023":{"position":[[2350,14]]},"1435":{"position":[[733,14]]},"1437":{"position":[[1195,14]]},"1439":{"position":[[37,14]]}},"keywords":{}}],["authoritative"",{"_index":6509,"title":{},"content":{"1444":{"position":[[356,19]]}},"keywords":{}}],["authsource=admin",{"_index":2231,"title":{},"content":{"206":{"position":[[493,17]]}},"keywords":{}}],["auto",{"_index":615,"title":{},"content":{"26":{"position":[[448,4],[534,4]]},"307":{"position":[[3182,4]]},"309":{"position":[[3506,4]]},"349":{"position":[[304,4]]},"417":{"position":[[1543,7],[1695,7]]},"419":{"position":[[938,5]]},"440":{"position":[[954,5]]},"483":{"position":[[533,4]]},"502":{"position":[[1191,7],[1343,7]]},"545":{"position":[[1145,7],[1297,7]]},"547":{"position":[[939,5]]},"637":{"position":[[705,7],[857,7]]},"917":{"position":[[1053,4]]},"919":{"position":[[1578,4]]},"965":{"position":[[1053,4]]},"1021":{"position":[[1702,7],[1854,7]]},"1023":{"position":[[919,5]]},"1186":{"position":[[341,4]]},"1203":{"position":[[325,4]]},"1388":{"position":[[410,4]]}},"keywords":{}}],["auto_incremen",{"_index":6016,"title":{},"content":{"1292":{"position":[[1359,13]]},"1306":{"position":[[1359,13]]},"1329":{"position":[[1359,13]]}},"keywords":{}}],["auto_offset_reset",{"_index":2657,"title":{},"content":{"250":{"position":[[480,20]]}},"keywords":{}}],["auto_offset_reset=conf['auto_offset_reset",{"_index":2666,"title":{},"content":{"250":{"position":[[840,44]]}},"keywords":{}}],["auto_resum",{"_index":2156,"title":{},"content":{"191":{"position":[[1573,11]]},"240":{"position":[[1534,11]]},"1032":{"position":[[1175,11]]},"1383":{"position":[[1521,11]]}},"keywords":{}}],["auto_suspend",{"_index":2154,"title":{},"content":{"191":{"position":[[1555,12]]},"240":{"position":[[1516,12]]},"1032":{"position":[[1157,12]]},"1383":{"position":[[1503,12]]},"1388":{"position":[[692,12]]}},"keywords":{}}],["autocaptur",{"_index":819,"title":{},"content":{"55":{"position":[[444,11]]}},"keywords":{}}],["autodetect",{"_index":2927,"title":{},"content":{"290":{"position":[[787,10]]},"593":{"position":[[235,11]]}},"keywords":{}}],["autodiscov",{"_index":341,"title":{},"content":{"11":{"position":[[1527,12],[1707,12]]},"12":{"position":[[319,12]]},"55":{"position":[[74,12],[279,13]]},"56":{"position":[[379,13],[440,13]]},"165":{"position":[[2339,13]]},"306":{"position":[[589,13],[679,12]]},"307":{"position":[[3266,14]]},"309":{"position":[[3590,14]]},"483":{"position":[[694,14]]}},"keywords":{}}],["autodiscover"automat",{"_index":826,"title":{},"content":{"55":{"position":[[974,31]]}},"keywords":{}}],["autodiscoveri",{"_index":5023,"title":{},"content":{"912":{"position":[[1041,13]]}},"keywords":{}}],["autoextend_si",{"_index":6014,"title":{},"content":{"1292":{"position":[[1309,13]]},"1306":{"position":[[1309,13]]},"1329":{"position":[[1309,13]]}},"keywords":{}}],["autoincr",{"_index":6289,"title":{},"content":{"1370":{"position":[[497,13]]}},"keywords":{}}],["autom",{"_index":2233,"title":{"208":{"position":[[0,10]]}},"content":{"206":{"position":[[704,9]]},"208":{"position":[[485,8]]},"947":{"position":[[1343,9]]}},"keywords":{}}],["automat",{"_index":368,"title":{"55":{"position":[[0,13]]}},"content":{"12":{"position":[[402,9]]},"13":{"position":[[239,13]]},"20":{"position":[[557,13]]},"54":{"position":[[227,13]]},"56":{"position":[[214,13],[495,13]]},"64":{"position":[[67,9]]},"75":{"position":[[25,13]]},"76":{"position":[[200,13]]},"80":{"position":[[463,13]]},"81":{"position":[[1226,14]]},"82":{"position":[[1085,13]]},"90":{"position":[[153,13]]},"112":{"position":[[530,9]]},"120":{"position":[[2658,13],[2772,13]]},"126":{"position":[[336,13],[448,13],[576,14]]},"146":{"position":[[672,13]]},"149":{"position":[[645,13]]},"152":{"position":[[648,13]]},"158":{"position":[[380,13]]},"165":{"position":[[6,13],[95,13]]},"192":{"position":[[1776,13]]},"206":{"position":[[885,13]]},"208":{"position":[[837,13]]},"209":{"position":[[353,13]]},"230":{"position":[[600,13]]},"239":{"position":[[1361,13],[1745,13],[1783,13],[2274,13]]},"278":{"position":[[1716,13]]},"306":{"position":[[646,14]]},"307":{"position":[[3228,13],[3417,14]]},"308":{"position":[[118,13],[406,13]]},"309":{"position":[[3552,13],[3741,14]]},"319":{"position":[[683,9],[738,9]]},"320":{"position":[[1780,9]]},"323":{"position":[[918,13]]},"337":{"position":[[501,13]]},"338":{"position":[[373,13]]},"366":{"position":[[675,13],[1007,13]]},"384":{"position":[[96,13]]},"397":{"position":[[1063,13]]},"417":{"position":[[1589,14],[1736,13]]},"419":{"position":[[256,13],[410,9],[808,14],[1505,13]]},"440":{"position":[[272,13],[426,9],[824,14]]},"441":{"position":[[114,13]]},"479":{"position":[[463,13]]},"492":{"position":[[215,14]]},"499":{"position":[[16,13],[274,13]]},"502":{"position":[[458,13],[1237,14],[1384,13]]},"504":{"position":[[193,13],[354,9],[740,14],[937,13],[1134,13]]},"545":{"position":[[1191,14],[1338,13]]},"547":{"position":[[257,13],[411,9],[809,14],[1507,13]]},"578":{"position":[[176,13]]},"602":{"position":[[869,13]]},"634":{"position":[[16,13],[266,13]]},"637":{"position":[[751,14],[898,13]]},"639":{"position":[[192,13],[352,9],[738,14],[935,13],[1132,13]]},"642":{"position":[[15,13]]},"660":{"position":[[572,13],[732,13],[896,13]]},"665":{"position":[[215,14]]},"680":{"position":[[215,14]]},"695":{"position":[[215,14]]},"750":{"position":[[995,9]]},"752":{"position":[[559,9]]},"753":{"position":[[1215,9]]},"754":{"position":[[873,14]]},"757":{"position":[[2260,9]]},"766":{"position":[[995,9]]},"770":{"position":[[2260,9]]},"789":{"position":[[1396,9]]},"791":{"position":[[512,9]]},"793":{"position":[[1186,9]]},"794":{"position":[[1079,14]]},"797":{"position":[[2267,9]]},"807":{"position":[[983,9]]},"808":{"position":[[1132,9]]},"809":{"position":[[1079,14]]},"812":{"position":[[2267,9]]},"823":{"position":[[983,9]]},"825":{"position":[[915,14]]},"828":{"position":[[2267,9]]},"842":{"position":[[2199,14],[2401,14]]},"867":{"position":[[1765,13]]},"869":{"position":[[1102,13]]},"903":{"position":[[701,13],[1033,13]]},"915":{"position":[[701,13],[1033,13]]},"930":{"position":[[701,13],[1033,13]]},"945":{"position":[[672,13],[884,13]]},"963":{"position":[[855,13],[1187,13]]},"1008":{"position":[[700,13]]},"1021":{"position":[[1748,14],[1895,13]]},"1023":{"position":[[237,13],[391,9],[789,14],[1488,13]]},"1140":{"position":[[298,13]]},"1155":{"position":[[77,13]]},"1165":{"position":[[160,13],[187,9],[282,9]]},"1177":{"position":[[442,13]]},"1183":{"position":[[12,13]]},"1186":{"position":[[441,13]]},"1192":{"position":[[104,13]]},"1195":{"position":[[364,13]]},"1209":{"position":[[140,13]]},"1286":{"position":[[1136,14]]},"1291":{"position":[[105,13]]},"1292":{"position":[[227,13]]},"1301":{"position":[[972,14]]},"1305":{"position":[[105,13]]},"1306":{"position":[[227,13]]},"1316":{"position":[[298,13]]},"1325":{"position":[[1136,14]]},"1328":{"position":[[105,13]]},"1329":{"position":[[227,13]]},"1340":{"position":[[298,13]]},"1351":{"position":[[298,13]]},"1370":{"position":[[290,13]]},"1379":{"position":[[235,13]]},"1394":{"position":[[103,13]]},"1403":{"position":[[235,13]]},"1414":{"position":[[235,13]]},"1423":{"position":[[110,13]]},"1431":{"position":[[321,13]]},"1456":{"position":[[20,13]]}},"keywords":{}}],["automatically.avrocsvjsonprotobufw3c",{"_index":3613,"title":{},"content":{"419":{"position":[[1010,36]]},"440":{"position":[[1026,36]]},"547":{"position":[[1011,36]]},"1023":{"position":[[991,36]]}},"keywords":{}}],["automationssegmentssingl",{"_index":5135,"title":{},"content":{"979":{"position":[[100,25]]}},"keywords":{}}],["automationssettingsskillssla",{"_index":3915,"title":{},"content":{"506":{"position":[[285,28]]}},"keywords":{}}],["avail",{"_index":229,"title":{"85":{"position":[[0,9]]},"362":{"position":[[0,9]]},"1116":{"position":[[0,9]]},"1120":{"position":[[0,9]]},"1473":{"position":[[0,9]]}},"content":{"7":{"position":[[127,9]]},"13":{"position":[[33,9]]},"20":{"position":[[267,9],[331,10],[424,10]]},"34":{"position":[[649,9]]},"35":{"position":[[182,9]]},"36":{"position":[[265,9]]},"38":{"position":[[558,9]]},"44":{"position":[[218,10]]},"58":{"position":[[42,10]]},"67":{"position":[[1303,9]]},"68":{"position":[[932,9]]},"83":{"position":[[541,9]]},"85":{"position":[[13,9]]},"102":{"position":[[236,9]]},"107":{"position":[[2436,9],[2743,9]]},"111":{"position":[[512,9]]},"122":{"position":[[411,9],[2144,10]]},"135":{"position":[[705,9],[806,9]]},"140":{"position":[[96,9]]},"144":{"position":[[328,9]]},"154":{"position":[[1834,9]]},"162":{"position":[[965,9]]},"169":{"position":[[271,9],[1040,9]]},"175":{"position":[[21,9]]},"183":{"position":[[568,9]]},"190":{"position":[[118,9]]},"192":{"position":[[60,9]]},"205":{"position":[[150,9]]},"206":{"position":[[761,9],[940,9]]},"207":{"position":[[512,9]]},"217":{"position":[[788,9],[1265,9],[1358,9],[1572,9]]},"218":{"position":[[1590,11]]},"228":{"position":[[910,10],[1260,9]]},"238":{"position":[[59,9]]},"239":{"position":[[953,9]]},"240":{"position":[[3449,9],[3540,10]]},"254":{"position":[[1660,9],[3350,9]]},"259":{"position":[[862,9],[2417,9]]},"267":{"position":[[249,9],[936,9]]},"277":{"position":[[1047,10]]},"290":{"position":[[1208,9]]},"295":{"position":[[44,9]]},"313":{"position":[[3094,10]]},"314":{"position":[[1477,9],[2925,9]]},"331":{"position":[[545,9]]},"333":{"position":[[194,13]]},"343":{"position":[[1023,10]]},"364":{"position":[[395,9],[458,9]]},"373":{"position":[[219,9]]},"417":{"position":[[1795,10]]},"429":{"position":[[417,9]]},"479":{"position":[[491,9]]},"480":{"position":[[577,9]]},"497":{"position":[[388,9]]},"502":{"position":[[1443,10]]},"515":{"position":[[640,9]]},"521":{"position":[[202,9],[279,9]]},"545":{"position":[[1397,10]]},"637":{"position":[[957,10]]},"645":{"position":[[428,9]]},"652":{"position":[[428,9]]},"654":{"position":[[652,9]]},"782":{"position":[[440,9]]},"786":{"position":[[272,10]]},"821":{"position":[[1294,9]]},"974":{"position":[[278,10]]},"985":{"position":[[451,9]]},"1000":{"position":[[457,9],[629,9],[892,9]]},"1020":{"position":[[118,9]]},"1021":{"position":[[1954,10]]},"1186":{"position":[[399,10]]},"1237":{"position":[[27,9]]},"1362":{"position":[[24,9]]},"1425":{"position":[[183,9]]},"1448":{"position":[[360,9]]},"1452":{"position":[[198,9]]},"1473":{"position":[[1,9]]}},"keywords":{}}],["avatarsproject",{"_index":4481,"title":{},"content":{"709":{"position":[[487,14]]}},"keywords":{}}],["averag",{"_index":4280,"title":{},"content":{"595":{"position":[[1799,7]]}},"keywords":{}}],["average_session_length",{"_index":3649,"title":{},"content":{"425":{"position":[[547,22]]}},"keywords":{}}],["avg",{"_index":5583,"title":{},"content":{"1140":{"position":[[1497,3]]},"1292":{"position":[[1400,3]]},"1306":{"position":[[1400,3]]},"1316":{"position":[[1497,3]]},"1329":{"position":[[1400,3]]},"1340":{"position":[[1497,3]]},"1351":{"position":[[1497,3]]},"1379":{"position":[[1551,3]]},"1403":{"position":[[1551,3]]},"1414":{"position":[[1551,3]]},"1431":{"position":[[1520,3]]}},"keywords":{}}],["avg_row_lengt",{"_index":6018,"title":{},"content":{"1292":{"position":[[1429,13]]},"1306":{"position":[[1429,13]]},"1329":{"position":[[1429,13]]}},"keywords":{}}],["avoid",{"_index":509,"title":{},"content":{"17":{"position":[[1105,5]]},"102":{"position":[[600,5]]},"159":{"position":[[544,5]]},"253":{"position":[[771,5]]},"305":{"position":[[635,5]]},"313":{"position":[[771,5]]},"326":{"position":[[1680,5]]},"330":{"position":[[78,5]]},"411":{"position":[[252,5]]},"577":{"position":[[397,5]]},"588":{"position":[[392,5]]},"754":{"position":[[391,5]]},"794":{"position":[[264,5]]},"809":{"position":[[264,5]]},"825":{"position":[[264,5]]},"922":{"position":[[3147,5]]},"944":{"position":[[409,6]]},"1068":{"position":[[109,5]]},"1286":{"position":[[321,5]]},"1301":{"position":[[321,5]]},"1325":{"position":[[321,5]]},"1437":{"position":[[964,6]]},"1449":{"position":[[425,5]]},"1453":{"position":[[895,5]]},"1472":{"position":[[875,5]]}},"keywords":{}}],["avro",{"_index":2684,"title":{},"content":{"250":{"position":[[1541,4]]},"427":{"position":[[357,4]]},"1118":{"position":[[550,4]]}},"keywords":{}}],["avrocsvjsonprotobufw3c",{"_index":3899,"title":{},"content":{"499":{"position":[[157,22]]},"504":{"position":[[964,22]]},"634":{"position":[[149,22]]},"639":{"position":[[962,22]]}},"keywords":{}}],["aw",{"_index":2027,"title":{"222":{"position":[[10,4]]},"430":{"position":[[0,3]]}},"content":{"174":{"position":[[47,3]]},"190":{"position":[[847,3],[869,3],[951,3]]},"222":{"position":[[57,4],[680,4]]},"299":{"position":[[396,3],[455,3]]},"301":{"position":[[694,3],[716,3],[769,3]]},"329":{"position":[[412,3],[535,3]]},"344":{"position":[[151,3]]},"390":{"position":[[150,3],[565,3],[624,3]]},"392":{"position":[[76,3],[106,3],[194,3],[238,3],[272,3],[360,3],[398,3],[415,3],[527,4],[547,3],[574,3]]},"393":{"position":[[199,3],[257,3]]},"395":{"position":[[161,3],[744,3],[803,3]]},"397":{"position":[[90,3],[198,3],[280,3],[307,3],[558,3],[575,3],[676,4]]},"398":{"position":[[200,3],[258,3]]},"405":{"position":[[1,3]]},"406":{"position":[[64,3],[341,3],[471,3]]},"408":{"position":[[126,3],[137,3],[193,3],[240,3],[300,3],[341,3]]},"413":{"position":[[288,3]]},"415":{"position":[[57,3],[335,3],[975,4]]},"417":{"position":[[572,3],[589,3],[693,3],[720,3],[750,3],[907,3],[941,3],[1997,3],[2024,3]]},"430":{"position":[[10,3],[154,3]]},"432":{"position":[[559,3],[950,3],[995,3],[1041,3],[1090,3],[1121,3],[1159,3]]},"433":{"position":[[429,3],[643,3]]},"1122":{"position":[[370,3],[429,3]]},"1125":{"position":[[90,3],[193,3],[270,3],[350,3],[367,3],[470,4]]},"1126":{"position":[[161,3],[219,3]]},"1142":{"position":[[135,3],[280,3]]},"1144":{"position":[[145,3],[245,3],[831,4]]},"1149":{"position":[[590,3]]},"1151":{"position":[[752,3],[879,3]]},"1154":{"position":[[563,3]]},"1160":{"position":[[135,3],[171,3],[264,3],[443,3]]},"1162":{"position":[[79,3],[125,3],[178,3],[232,3],[420,3]]},"1165":{"position":[[249,3]]},"1168":{"position":[[135,3],[280,3]]},"1170":{"position":[[145,3],[245,3],[831,4]]},"1203":{"position":[[462,3]]},"1204":{"position":[[60,3]]},"1206":{"position":[[72,3],[83,3],[149,3],[160,3],[212,3],[234,3]]},"1258":{"position":[[184,3]]},"1260":{"position":[[551,3],[678,3]]},"1322":{"position":[[57,4],[680,4]]},"1335":{"position":[[57,4],[680,4]]},"1420":{"position":[[363,3],[417,3],[463,3],[484,3]]}},"keywords":{}}],["await",{"_index":1931,"title":{},"content":{"163":{"position":[[1060,6]]},"1443":{"position":[[325,5]]}},"keywords":{}}],["await<br/>acknowledg",{"_index":6445,"title":{},"content":{"1434":{"position":[[894,28]]}},"keywords":{}}],["awar",{"_index":2783,"title":{},"content":{"259":{"position":[[739,5]]},"821":{"position":[[727,5]]},"869":{"position":[[1462,5]]},"912":{"position":[[743,5]]},"1006":{"position":[[268,5]]}},"keywords":{}}],["awkward",{"_index":3214,"title":{},"content":{"333":{"position":[[432,7]]}},"keywords":{}}],["aws"",{"_index":2006,"title":{},"content":{"172":{"position":[[523,9],[831,9],[1081,9]]}},"keywords":{}}],["aws_access_key_id",{"_index":3688,"title":{},"content":{"433":{"position":[[647,18]]},"1163":{"position":[[133,18]]},"1421":{"position":[[182,17]]}},"keywords":{}}],["aws_region",{"_index":5857,"title":{},"content":{"1206":{"position":[[137,11]]}},"keywords":{}}],["aws_secret_access_key",{"_index":3690,"title":{},"content":{"433":{"position":[[672,22]]},"1162":{"position":[[155,22]]},"1163":{"position":[[174,22]]}},"keywords":{}}],["aws_secret_key",{"_index":5858,"title":{},"content":{"1206":{"position":[[196,15]]}},"keywords":{}}],["aws_secret_key_id",{"_index":6412,"title":{},"content":{"1421":{"position":[[220,17]]}},"keywords":{}}],["awsaccesskeyid",{"_index":3518,"title":{},"content":{"393":{"position":[[169,15]]},"398":{"position":[[170,15]]},"417":{"position":[[704,15]]},"1126":{"position":[[131,15]]},"1144":{"position":[[129,15]]},"1145":{"position":[[144,15]]},"1151":{"position":[[722,15]]},"1152":{"position":[[258,15]]},"1170":{"position":[[129,15]]},"1171":{"position":[[148,15]]},"1260":{"position":[[521,15]]},"1261":{"position":[[220,15]]},"1417":{"position":[[251,14]]},"1420":{"position":[[347,15]]},"1421":{"position":[[166,15]]}},"keywords":{}}],["awssecretaccesskey",{"_index":3514,"title":{},"content":{"392":{"position":[[218,19]]},"393":{"position":[[223,19]]},"397":{"position":[[160,19]]},"398":{"position":[[224,19]]},"417":{"position":[[887,19]]},"1125":{"position":[[155,19]]},"1126":{"position":[[185,19]]},"1144":{"position":[[225,19]]},"1145":{"position":[[182,19]]},"1151":{"position":[[841,19]]},"1152":{"position":[[288,19]]},"1170":{"position":[[225,19]]},"1171":{"position":[[186,19]]},"1260":{"position":[[640,19]]},"1261":{"position":[[258,19]]},"1417":{"position":[[270,18]]},"1420":{"position":[[397,19]]},"1421":{"position":[[200,19]]}},"keywords":{}}],["azur",{"_index":1151,"title":{"173":{"position":[[0,5]]},"224":{"position":[[10,6]]},"434":{"position":[[0,5]]},"753":{"position":[[0,5]]},"793":{"position":[[0,5]]},"919":{"position":[[0,5]]},"1043":{"position":[[0,5]]},"1283":{"position":[[0,5]]},"1311":{"position":[[0,5]]},"1409":{"position":[[0,5]]}},"content":{"82":{"position":[[636,5]]},"170":{"position":[[213,5]]},"173":{"position":[[150,5],[316,5],[361,5],[395,5],[479,5],[669,5],[1239,5]]},"174":{"position":[[334,6]]},"179":{"position":[[558,5]]},"224":{"position":[[57,6],[1097,5]]},"363":{"position":[[689,5],[770,5],[833,5]]},"435":{"position":[[55,5]]},"436":{"position":[[109,5],[293,5],[1110,5]]},"437":{"position":[[250,5]]},"438":{"position":[[578,5],[622,5],[718,5],[790,5],[846,5],[929,5],[993,5],[1072,5],[1102,5],[1125,5],[1229,5],[1265,5],[1302,5],[1458,5],[1587,5]]},"439":{"position":[[95,5]]},"440":{"position":[[30,5]]},"446":{"position":[[227,5]]},"753":{"position":[[53,5]]},"919":{"position":[[620,5]]},"1120":{"position":[[608,5]]},"1282":{"position":[[263,5]]},"1283":{"position":[[192,5],[385,5]]},"1288":{"position":[[237,5]]},"1310":{"position":[[278,5]]},"1311":{"position":[[23,5],[222,5]]}},"keywords":{}}],["azureclientid",{"_index":3713,"title":{},"content":{"439":{"position":[[168,14]]}},"keywords":{}}],["azureclientsecret",{"_index":3719,"title":{},"content":{"439":{"position":[[220,18]]}},"keywords":{}}],["azuresubscriptionid",{"_index":3720,"title":{},"content":{"439":{"position":[[253,20]]}},"keywords":{}}],["azuretenantid",{"_index":3723,"title":{},"content":{"439":{"position":[[311,14]]}},"keywords":{}}],["b",{"_index":941,"title":{},"content":{"62":{"position":[[723,2],[840,2]]},"98":{"position":[[1114,4]]},"210":{"position":[[2753,2]]},"250":{"position":[[1443,1]]}},"keywords":{}}],["b/data.csv",{"_index":5192,"title":{},"content":{"1020":{"position":[[1107,10]]}},"keywords":{}}],["b35e",{"_index":2730,"title":{},"content":{"253":{"position":[[1892,4]]},"313":{"position":[[1892,4]]}},"keywords":{}}],["b7ca247e401c"",{"_index":2723,"title":{},"content":{"253":{"position":[[1765,19]]},"313":{"position":[[1765,19]]}},"keywords":{}}],["b926c154ecc7",{"_index":3722,"title":{},"content":{"439":{"position":[[298,12]]}},"keywords":{}}],["back",{"_index":605,"title":{},"content":{"26":{"position":[[152,4]]},"30":{"position":[[152,6]]},"34":{"position":[[729,4]]},"48":{"position":[[117,6]]},"61":{"position":[[139,4]]},"110":{"position":[[59,4]]},"112":{"position":[[667,6]]},"121":{"position":[[404,4],[774,4]]},"124":{"position":[[411,4]]},"138":{"position":[[1175,5]]},"142":{"position":[[1144,5]]},"146":{"position":[[977,4]]},"149":{"position":[[968,4]]},"152":{"position":[[953,4]]},"154":{"position":[[1235,4],[1344,6]]},"163":{"position":[[1118,4]]},"183":{"position":[[104,4]]},"189":{"position":[[1218,6]]},"190":{"position":[[1830,4]]},"192":{"position":[[2192,4]]},"216":{"position":[[264,6]]},"239":{"position":[[841,6]]},"240":{"position":[[2448,4]]},"268":{"position":[[491,5]]},"279":{"position":[[118,5]]},"281":{"position":[[102,5]]},"289":{"position":[[380,6]]},"300":{"position":[[348,6]]},"320":{"position":[[1844,6]]},"321":{"position":[[828,6]]},"326":{"position":[[630,6]]},"331":{"position":[[255,4]]},"436":{"position":[[828,4]]},"1146":{"position":[[668,4]]},"1173":{"position":[[680,4]]},"1176":{"position":[[621,4]]},"1183":{"position":[[1240,4]]},"1185":{"position":[[421,4]]},"1194":{"position":[[631,4]]},"1203":{"position":[[792,4]]},"1215":{"position":[[668,4]]},"1223":{"position":[[680,4]]},"1226":{"position":[[432,4]]},"1243":{"position":[[209,4]]},"1354":{"position":[[456,4]]},"1382":{"position":[[675,4]]},"1435":{"position":[[362,7]]},"1444":{"position":[[1025,4]]},"1471":{"position":[[587,4]]}},"keywords":{}}],["backbon",{"_index":2574,"title":{},"content":{"237":{"position":[[2588,8]]}},"keywords":{}}],["backfil",{"_index":401,"title":{"368":{"position":[[0,9]]},"595":{"position":[[0,8]]},"755":{"position":[[0,9]]},"768":{"position":[[0,9]]},"785":{"position":[[0,8]]},"795":{"position":[[0,9]]},"810":{"position":[[0,9]]},"826":{"position":[[0,9]]},"905":{"position":[[0,9]]},"920":{"position":[[0,9]]},"932":{"position":[[0,9]]},"948":{"position":[[0,9]]},"966":{"position":[[0,9]]}},"content":{"13":{"position":[[873,8],[984,8],[1251,9],[1435,8],[1954,9]]},"34":{"position":[[705,9]]},"138":{"position":[[1380,9]]},"142":{"position":[[1381,9]]},"198":{"position":[[440,11]]},"208":{"position":[[943,11],[1116,8],[1231,8],[1509,11],[1686,8]]},"209":{"position":[[508,8],[684,9],[912,11],[1127,9],[1507,8]]},"210":{"position":[[178,9]]},"211":{"position":[[855,11]]},"237":{"position":[[1492,11]]},"239":{"position":[[2970,9]]},"271":{"position":[[439,8]]},"307":{"position":[[2078,9],[2556,9],[2794,8],[2820,8],[3025,8]]},"308":{"position":[[1172,8]]},"309":{"position":[[1605,8],[2504,9],[3111,9],[3214,8],[3277,9],[3301,9]]},"321":{"position":[[2345,9]]},"323":{"position":[[932,8]]},"329":{"position":[[761,9]]},"366":{"position":[[890,11]]},"368":{"position":[[74,10],[365,9],[445,11]]},"370":{"position":[[773,8],[866,8],[1062,9],[1146,11],[1384,10]]},"373":{"position":[[349,8],[520,8]]},"377":{"position":[[220,8],[254,8],[487,8],[662,8],[733,10],[893,8],[965,9],[993,8],[1093,11]]},"397":{"position":[[399,8],[453,8],[510,8],[771,8],[1038,9]]},"593":{"position":[[392,8]]},"595":{"position":[[88,8],[1199,8],[1590,8],[1864,8]]},"750":{"position":[[601,11]]},"755":{"position":[[74,10],[365,9],[445,11]]},"757":{"position":[[1407,9],[1491,11],[1540,8],[1633,8]]},"764":{"position":[[727,8]]},"766":{"position":[[601,11]]},"768":{"position":[[74,10],[365,9],[445,11]]},"770":{"position":[[1407,9],[1491,11],[1540,8],[1633,8]]},"777":{"position":[[727,8]]},"785":{"position":[[162,8],[695,8]]},"789":{"position":[[589,11],[882,8],[925,10],[1002,9]]},"795":{"position":[[72,10],[363,9],[443,11]]},"797":{"position":[[1407,9],[1491,11],[1540,8],[1633,8]]},"804":{"position":[[725,8]]},"807":{"position":[[589,11]]},"810":{"position":[[72,10],[363,9],[443,11]]},"812":{"position":[[1407,9],[1491,11],[1540,8],[1633,8]]},"819":{"position":[[725,8]]},"823":{"position":[[589,11]]},"826":{"position":[[72,10],[363,9],[443,11]]},"828":{"position":[[1407,9],[1491,11],[1540,8],[1633,8]]},"835":{"position":[[725,8]]},"842":{"position":[[1559,8],[1589,9],[1780,11],[1815,8],[2312,10],[2505,12],[3547,8],[3607,8]]},"867":{"position":[[523,9],[607,11],[724,10],[865,8],[958,8]]},"879":{"position":[[1022,8],[1115,8]]},"903":{"position":[[916,11]]},"905":{"position":[[77,10],[368,9],[448,11]]},"907":{"position":[[556,8],[649,8],[845,9],[929,11],[1167,10]]},"915":{"position":[[916,11]]},"920":{"position":[[77,10],[368,9],[448,11]]},"922":{"position":[[2721,8]]},"923":{"position":[[556,8],[649,8],[845,9],[929,11],[1167,10]]},"930":{"position":[[916,11]]},"932":{"position":[[77,10],[368,9],[448,11]]},"934":{"position":[[556,8],[649,8],[845,9],[929,11],[1167,10]]},"947":{"position":[[1353,8]]},"948":{"position":[[77,10],[368,9],[448,11]]},"950":{"position":[[556,8],[649,8],[845,9],[929,11],[1167,10]]},"963":{"position":[[1070,11]]},"966":{"position":[[77,10],[368,9],[448,11]]},"968":{"position":[[556,8],[649,8],[845,9],[929,11],[1167,10]]},"1006":{"position":[[447,8]]},"1040":{"position":[[632,11]]},"1045":{"position":[[541,8],[634,8],[693,9],[777,11],[894,10]]},"1050":{"position":[[632,11]]},"1053":{"position":[[541,8],[634,8],[693,9],[777,11],[894,10]]},"1058":{"position":[[632,11]]},"1061":{"position":[[541,8],[634,8],[693,9],[777,11],[894,10]]},"1146":{"position":[[550,8],[621,11]]},"1173":{"position":[[562,8],[633,11]]},"1215":{"position":[[550,8],[621,11]]},"1223":{"position":[[562,8],[633,11]]},"1449":{"position":[[636,10]]},"1451":{"position":[[409,11],[809,9]]}},"keywords":{}}],["backfillmod",{"_index":4257,"title":{},"content":{"594":{"position":[[1138,13],[1253,13],[1342,13],[1413,13]]}},"keywords":{}}],["background",{"_index":811,"title":{},"content":{"55":{"position":[[49,10]]},"237":{"position":[[3108,10]]},"1442":{"position":[[706,10],[1004,10]]},"1451":{"position":[[1079,10]]}},"keywords":{}}],["backlog",{"_index":1568,"title":{},"content":{"110":{"position":[[334,7]]}},"keywords":{}}],["backslash",{"_index":3627,"title":{},"content":{"419":{"position":[[2117,9]]},"441":{"position":[[726,9]]},"504":{"position":[[1746,9]]},"547":{"position":[[2119,9]]},"639":{"position":[[1744,9]]},"1023":{"position":[[2100,9]]}},"keywords":{}}],["backup",{"_index":1639,"title":{},"content":{"117":{"position":[[225,7]]},"767":{"position":[[1230,6]]},"792":{"position":[[1526,6]]},"824":{"position":[[1296,6]]},"1292":{"position":[[1481,6]]},"1306":{"position":[[1481,6]]},"1329":{"position":[[1481,6]]},"1379":{"position":[[1600,6]]},"1403":{"position":[[1600,6]]},"1414":{"position":[[1600,6]]}},"keywords":{}}],["backward",{"_index":2251,"title":{},"content":{"208":{"position":[[857,8]]},"1201":{"position":[[75,9]]},"1293":{"position":[[75,9]]},"1307":{"position":[[75,9]]},"1317":{"position":[[75,9]]},"1330":{"position":[[75,9]]},"1341":{"position":[[75,9]]},"1352":{"position":[[75,9]]},"1359":{"position":[[75,9]]},"1380":{"position":[[75,9]]},"1404":{"position":[[75,9]]},"1415":{"position":[[75,9]]},"1432":{"position":[[75,9]]}},"keywords":{}}],["bad",{"_index":725,"title":{},"content":{"41":{"position":[[242,3]]}},"keywords":{}}],["badli",{"_index":4651,"title":{},"content":{"763":{"position":[[86,5]]},"776":{"position":[[86,5]]},"803":{"position":[[86,5]]},"818":{"position":[[86,5]]},"834":{"position":[[86,5]]}},"keywords":{}}],["balanc",{"_index":537,"title":{"281":{"position":[[16,9]]}},"content":{"20":{"position":[[571,8]]},"103":{"position":[[819,8]]},"107":{"position":[[782,7]]},"113":{"position":[[673,8],[829,8]]},"280":{"position":[[350,7],[439,8],[467,7],[1235,8],[1569,7],[1699,8],[2090,8],[2154,7],[2164,7]]},"281":{"position":[[193,8],[297,8],[334,7],[1537,8],[1609,8],[1728,7],[1796,7],[1854,7],[1893,7],[1943,8],[2008,8],[2048,8],[2120,8]]},"532":{"position":[[183,7]]},"1036":{"position":[[355,7]]},"1073":{"position":[[69,7],[170,7]]}},"keywords":{}}],["balance_transact",{"_index":5298,"title":{},"content":{"1078":{"position":[[222,20]]}},"keywords":{}}],["balances.flow.yaml",{"_index":2877,"title":{},"content":{"281":{"position":[[640,19]]}},"keywords":{}}],["balances.flow.yamlmodul",{"_index":2879,"title":{},"content":{"281":{"position":[[825,24]]}},"keywords":{}}],["balances.schema.yaml",{"_index":2882,"title":{},"content":{"281":{"position":[[905,20]]}},"keywords":{}}],["balances.t",{"_index":2883,"title":{},"content":{"281":{"position":[[974,11]]}},"keywords":{}}],["balances.tsbal",{"_index":2886,"title":{},"content":{"281":{"position":[[1183,19]]}},"keywords":{}}],["bank",{"_index":2805,"title":{},"content":{"268":{"position":[[1578,4]]}},"keywords":{}}],["bank_account",{"_index":5300,"title":{},"content":{"1078":{"position":[[323,13]]}},"keywords":{}}],["bar",{"_index":436,"title":{},"content":{"14":{"position":[[795,4]]},"94":{"position":[[2593,5]]},"154":{"position":[[609,5]]},"349":{"position":[[59,4]]},"479":{"position":[[59,4]]},"487":{"position":[[147,4]]},"947":{"position":[[69,3]]},"1092":{"position":[[59,4]]}},"keywords":{}}],["bar.flow.yaml",{"_index":1317,"title":{},"content":{"92":{"position":[[69,14],[185,13],[489,13],[966,14]]}},"keywords":{}}],["base",{"_index":1267,"title":{},"content":{"84":{"position":[[757,5]]},"87":{"position":[[117,4]]},"109":{"position":[[243,5]]},"120":{"position":[[2672,5]]},"161":{"position":[[465,4],[577,4]]},"163":{"position":[[875,5]]},"183":{"position":[[4604,5]]},"202":{"position":[[122,5]]},"211":{"position":[[300,5]]},"221":{"position":[[1160,5]]},"222":{"position":[[405,5]]},"223":{"position":[[371,5]]},"224":{"position":[[424,5]]},"228":{"position":[[800,5]]},"229":{"position":[[494,5]]},"233":{"position":[[735,5]]},"236":{"position":[[494,4]]},"239":{"position":[[440,5]]},"240":{"position":[[2607,5],[4520,5],[4783,5]]},"241":{"position":[[171,5]]},"245":{"position":[[301,5]]},"280":{"position":[[329,5],[2202,5]]},"281":{"position":[[2227,5]]},"296":{"position":[[6720,5]]},"313":{"position":[[3502,4]]},"314":{"position":[[2125,4]]},"320":{"position":[[893,5]]},"395":{"position":[[684,5]]},"397":{"position":[[1087,5]]},"417":{"position":[[1750,5]]},"488":{"position":[[43,4]]},"494":{"position":[[204,4]]},"496":{"position":[[147,5],[153,4],[275,4]]},"497":{"position":[[116,5]]},"502":{"position":[[1398,5]]},"545":{"position":[[1352,5]]},"602":{"position":[[919,5]]},"637":{"position":[[912,5]]},"659":{"position":[[200,4]]},"676":{"position":[[43,4]]},"691":{"position":[[43,4]]},"739":{"position":[[190,4]]},"741":{"position":[[431,4]]},"780":{"position":[[130,5]]},"839":{"position":[[102,5]]},"840":{"position":[[721,5]]},"848":{"position":[[102,5]]},"849":{"position":[[544,5],[1196,5]]},"947":{"position":[[587,5]]},"1020":{"position":[[305,5],[805,5]]},"1021":{"position":[[1909,5]]},"1031":{"position":[[570,5]]},"1087":{"position":[[106,5]]},"1122":{"position":[[311,5]]},"1164":{"position":[[61,5]]},"1172":{"position":[[53,5]]},"1179":{"position":[[619,4]]},"1183":{"position":[[49,5]]},"1201":{"position":[[353,5]]},"1222":{"position":[[53,5]]},"1251":{"position":[[162,5]]},"1271":{"position":[[31,5]]},"1275":{"position":[[95,5]]},"1279":{"position":[[79,5],[132,5]]},"1282":{"position":[[183,5]]},"1288":{"position":[[62,5]]},"1298":{"position":[[371,5]]},"1310":{"position":[[193,5]]},"1322":{"position":[[405,5]]},"1335":{"position":[[405,5]]},"1346":{"position":[[371,5]]},"1356":{"position":[[209,4],[222,4],[1280,5]]},"1359":{"position":[[325,4]]},"1388":{"position":[[757,5]]},"1439":{"position":[[1412,4]]},"1453":{"position":[[1198,5]]},"1459":{"position":[[830,4],[1084,4]]},"1461":{"position":[[5278,5]]},"1477":{"position":[[502,4]]}},"keywords":{}}],["base64",{"_index":5769,"title":{},"content":{"1164":{"position":[[325,7]]},"1172":{"position":[[427,7]]},"1196":{"position":[[608,6]]},"1222":{"position":[[427,7]]},"1384":{"position":[[1081,6]]}},"keywords":{}}],["basi",{"_index":1684,"title":{},"content":{"122":{"position":[[1980,6]]},"271":{"position":[[41,5]]},"368":{"position":[[202,6],[472,6]]},"419":{"position":[[1217,6]]},"440":{"position":[[1233,6]]},"547":{"position":[[1219,6]]},"755":{"position":[[202,6],[472,6]]},"768":{"position":[[202,6],[472,6]]},"795":{"position":[[200,6],[470,6]]},"810":{"position":[[200,6],[470,6]]},"826":{"position":[[200,6],[470,6]]},"905":{"position":[[205,6],[475,6]]},"920":{"position":[[205,6],[475,6]]},"932":{"position":[[205,6],[475,6]]},"948":{"position":[[205,6],[475,6]]},"966":{"position":[[205,6],[475,6]]},"1020":{"position":[[189,5],[1299,5],[1837,6]]},"1023":{"position":[[1200,6]]},"1155":{"position":[[398,6],[504,5]]},"1182":{"position":[[577,6]]},"1191":{"position":[[581,6]]},"1234":{"position":[[243,6]]},"1262":{"position":[[581,6]]},"1389":{"position":[[579,6]]},"1429":{"position":[[196,5]]}},"keywords":{}}],["basic",{"_index":711,"title":{"214":{"position":[[9,5]]}},"content":{"39":{"position":[[71,5]]},"54":{"position":[[184,5]]},"61":{"position":[[228,5]]},"70":{"position":[[400,5]]},"107":{"position":[[2515,5]]},"119":{"position":[[269,5]]},"137":{"position":[[257,5]]},"156":{"position":[[186,5]]},"184":{"position":[[363,5]]},"185":{"position":[[110,5]]},"221":{"position":[[286,5]]},"288":{"position":[[50,5]]},"299":{"position":[[50,5]]},"616":{"position":[[57,5]]}},"keywords":{}}],["basicauth",{"_index":4501,"title":{},"content":{"712":{"position":[[141,10],[448,10]]}},"keywords":{}}],["basisdebug",{"_index":243,"title":{},"content":{"7":{"position":[[434,11]]}},"keywords":{}}],["bastion",{"_index":3418,"title":{},"content":{"370":{"position":[[1590,7]]},"1138":{"position":[[881,7]]}},"keywords":{}}],["batch",{"_index":791,"title":{"53":{"position":[[0,5]]},"474":{"position":[[9,5]]},"821":{"position":[[6,5]]},"912":{"position":[[11,5]]},"1008":{"position":[[22,5]]}},"content":{"53":{"position":[[64,5]]},"124":{"position":[[485,7]]},"163":{"position":[[781,5],[858,8]]},"180":{"position":[[232,5]]},"198":{"position":[[193,5],[615,6]]},"233":{"position":[[729,5]]},"319":{"position":[[857,5]]},"321":{"position":[[29,5],[159,5]]},"364":{"position":[[91,5]]},"410":{"position":[[50,5]]},"517":{"position":[[3217,7],[3242,5],[3271,5]]},"529":{"position":[[205,7]]},"821":{"position":[[6,5]]},"912":{"position":[[11,5]]},"975":{"position":[[111,5],[235,5]]},"977":{"position":[[653,5]]},"1005":{"position":[[247,5]]},"1006":{"position":[[158,5]]},"1008":{"position":[[36,5],[120,5],[212,5],[422,5]]},"1451":{"position":[[914,8]]}},"keywords":{}}],["batch.messag",{"_index":3576,"title":{},"content":{"410":{"position":[[218,13]]}},"keywords":{}}],["batch:dev",{"_index":3294,"title":{},"content":{"363":{"position":[[917,9]]}},"keywords":{}}],["batchgetitem",{"_index":5434,"title":{},"content":{"1122":{"position":[[81,12]]}},"keywords":{}}],["batman",{"_index":3686,"title":{},"content":{"433":{"position":[[317,6]]}},"keywords":{}}],["bbbb",{"_index":3716,"title":{},"content":{"439":{"position":[[197,4],[288,4],[340,4]]}},"keywords":{}}],["be",{"_index":504,"title":{},"content":{"17":{"position":[[818,5]]},"27":{"position":[[335,5]]},"74":{"position":[[96,5]]},"77":{"position":[[576,5]]},"94":{"position":[[2643,5]]},"110":{"position":[[493,5]]},"128":{"position":[[309,5]]},"135":{"position":[[444,5]]},"136":{"position":[[142,5]]},"146":{"position":[[193,5],[467,5]]},"149":{"position":[[202,5]]},"152":{"position":[[209,5]]},"162":{"position":[[77,5]]},"166":{"position":[[61,5]]},"197":{"position":[[1515,5],[1571,5]]},"207":{"position":[[394,5],[506,5]]},"208":{"position":[[290,5]]},"238":{"position":[[751,5],[1428,5]]},"239":{"position":[[835,5],[947,5]]},"254":{"position":[[2476,5]]},"309":{"position":[[258,5]]},"314":{"position":[[2017,5]]},"315":{"position":[[2389,5]]},"410":{"position":[[325,5]]},"411":{"position":[[89,5]]},"750":{"position":[[926,5]]},"757":{"position":[[588,5]]},"760":{"position":[[200,5]]},"766":{"position":[[926,5]]},"770":{"position":[[588,5]]},"773":{"position":[[200,5]]},"789":{"position":[[1327,5]]},"797":{"position":[[588,5]]},"800":{"position":[[200,5]]},"807":{"position":[[914,5]]},"812":{"position":[[588,5]]},"815":{"position":[[200,5]]},"821":{"position":[[973,5]]},"823":{"position":[[914,5]]},"828":{"position":[[588,5]]},"831":{"position":[[200,5]]},"870":{"position":[[746,5]]},"1155":{"position":[[313,5]]},"1234":{"position":[[174,5],[180,5]]},"1388":{"position":[[615,5]]},"1437":{"position":[[1097,6]]}},"keywords":{}}],["beam",{"_index":3097,"title":{"319":{"position":[[7,4]]}},"content":{"319":{"position":[[41,5],[110,4],[258,5],[322,4],[426,5],[525,4],[653,5],[767,5],[818,5],[1018,4],[1374,5]]}},"keywords":{}}],["beam'",{"_index":3110,"title":{},"content":{"319":{"position":[[1487,6]]}},"keywords":{}}],["bearer",{"_index":3249,"title":{},"content":{"347":{"position":[[114,6]]},"489":{"position":[[115,6],[716,6]]},"491":{"position":[[114,6]]},"662":{"position":[[115,6],[716,6]]},"664":{"position":[[135,6]]},"677":{"position":[[115,6],[716,6]]},"679":{"position":[[114,6]]},"692":{"position":[[115,6],[716,6]]},"694":{"position":[[114,6]]},"943":{"position":[[1091,6]]},"1241":{"position":[[275,6]]}},"keywords":{}}],["becam",{"_index":4657,"title":{},"content":{"764":{"position":[[264,6]]},"777":{"position":[[264,6]]},"804":{"position":[[262,6]]},"819":{"position":[[262,6]]},"835":{"position":[[262,6]]}},"keywords":{}}],["becom",{"_index":391,"title":{},"content":{"13":{"position":[[619,7]]},"35":{"position":[[175,6]]},"36":{"position":[[258,6]]},"42":{"position":[[209,7]]},"43":{"position":[[7,6]]},"44":{"position":[[211,6]]},"67":{"position":[[2040,7]]},"98":{"position":[[55,7],[1047,6]]},"106":{"position":[[598,6]]},"122":{"position":[[469,7]]},"124":{"position":[[742,7],[781,6]]},"163":{"position":[[641,6]]},"164":{"position":[[1214,7]]},"183":{"position":[[907,6]]},"240":{"position":[[3532,7]]},"267":{"position":[[1297,6]]},"270":{"position":[[926,6]]},"277":{"position":[[1040,6]]},"280":{"position":[[209,8]]},"291":{"position":[[896,7]]},"302":{"position":[[896,7]]}},"keywords":{}}],["becuas",{"_index":5197,"title":{},"content":{"1020":{"position":[[1579,7]]}},"keywords":{}}],["befor",{"_index":36,"title":{},"content":{"1":{"position":[[430,6],[639,6]]},"20":{"position":[[845,6]]},"24":{"position":[[193,6]]},"41":{"position":[[658,6]]},"54":{"position":[[503,6]]},"75":{"position":[[458,6]]},"82":{"position":[[5045,6]]},"94":{"position":[[1648,6],[2636,6]]},"111":{"position":[[103,6],[287,6],[589,6]]},"119":{"position":[[548,6]]},"120":{"position":[[1200,6],[2500,6]]},"125":{"position":[[114,6]]},"136":{"position":[[96,7],[135,6]]},"139":{"position":[[164,6]]},"143":{"position":[[188,6]]},"156":{"position":[[615,6],[759,6]]},"162":{"position":[[1064,6]]},"165":{"position":[[255,6],[385,6],[1996,6]]},"169":{"position":[[1418,7]]},"177":{"position":[[183,6]]},"191":{"position":[[1,6]]},"207":{"position":[[1,6]]},"215":{"position":[[199,6]]},"218":{"position":[[991,6]]},"227":{"position":[[373,6]]},"232":{"position":[[857,6]]},"236":{"position":[[1702,6]]},"238":{"position":[[671,6]]},"239":{"position":[[1588,6]]},"240":{"position":[[3272,6],[3420,6]]},"253":{"position":[[255,6]]},"255":{"position":[[55,6]]},"259":{"position":[[476,6],[1560,6],[2170,6],[3118,6]]},"278":{"position":[[385,7]]},"280":{"position":[[154,6]]},"281":{"position":[[2524,6]]},"313":{"position":[[255,6]]},"316":{"position":[[55,6]]},"329":{"position":[[924,6]]},"332":{"position":[[689,6]]},"340":{"position":[[278,7]]},"343":{"position":[[446,6],[937,6]]},"410":{"position":[[198,6]]},"411":{"position":[[221,6]]},"414":{"position":[[869,6]]},"424":{"position":[[271,6]]},"427":{"position":[[101,6]]},"448":{"position":[[908,6]]},"454":{"position":[[461,6]]},"460":{"position":[[275,6]]},"548":{"position":[[454,6]]},"554":{"position":[[436,6]]},"556":{"position":[[2118,6]]},"560":{"position":[[165,6],[302,6]]},"573":{"position":[[768,6]]},"602":{"position":[[525,6]]},"611":{"position":[[1108,6]]},"631":{"position":[[275,6],[414,6]]},"654":{"position":[[515,6]]},"670":{"position":[[571,6]]},"685":{"position":[[395,6]]},"700":{"position":[[223,6]]},"706":{"position":[[223,6]]},"720":{"position":[[727,6]]},"741":{"position":[[338,6]]},"747":{"position":[[733,6]]},"805":{"position":[[320,6]]},"820":{"position":[[320,6]]},"836":{"position":[[320,6]]},"855":{"position":[[104,6]]},"859":{"position":[[580,6],[674,6]]},"885":{"position":[[524,6]]},"891":{"position":[[292,6]]},"959":{"position":[[279,6]]},"982":{"position":[[281,6]]},"1008":{"position":[[831,6]]},"1015":{"position":[[337,6]]},"1020":{"position":[[1602,6]]},"1028":{"position":[[146,6],[284,6]]},"1070":{"position":[[722,6]]},"1085":{"position":[[1231,6]]},"1113":{"position":[[275,6]]},"1203":{"position":[[110,6]]},"1243":{"position":[[1003,6]]},"1292":{"position":[[1517,6]]},"1306":{"position":[[1517,6]]},"1329":{"position":[[1517,6]]},"1356":{"position":[[774,6]]},"1370":{"position":[[519,6]]},"1379":{"position":[[1652,6]]},"1403":{"position":[[1652,6]]},"1414":{"position":[[1652,6]]},"1439":{"position":[[1642,6]]},"1440":{"position":[[1208,6]]},"1442":{"position":[[393,6],[472,6]]},"1443":{"position":[[585,6]]},"1447":{"position":[[658,6]]},"1448":{"position":[[929,6]]},"1459":{"position":[[194,6]]},"1471":{"position":[[1036,6]]},"1475":{"position":[[495,6]]},"1479":{"position":[[288,6],[716,6]]},"1480":{"position":[[906,6]]},"1481":{"position":[[47,6],[72,6]]}},"keywords":{}}],["before<br/>proceed",{"_index":6446,"title":{},"content":{"1434":{"position":[[923,27]]}},"keywords":{}}],["begin",{"_index":136,"title":{},"content":{"3":{"position":[[822,9]]},"13":{"position":[[1005,10]]},"54":{"position":[[117,5]]},"83":{"position":[[1480,5]]},"97":{"position":[[837,5]]},"98":{"position":[[943,6]]},"105":{"position":[[1277,6]]},"119":{"position":[[205,5]]},"135":{"position":[[850,5]]},"144":{"position":[[25,5]]},"169":{"position":[[68,5],[1275,5]]},"192":{"position":[[693,10]]},"193":{"position":[[387,5]]},"215":{"position":[[210,6]]},"217":{"position":[[683,5]]},"221":{"position":[[1103,5],[1296,5]]},"222":{"position":[[146,5],[348,5],[541,5]]},"223":{"position":[[112,5],[314,5],[507,5]]},"224":{"position":[[165,5],[367,5],[560,5]]},"230":{"position":[[278,5]]},"240":{"position":[[3282,6]]},"250":{"position":[[1526,9]]},"254":{"position":[[3172,9]]},"290":{"position":[[508,5]]},"301":{"position":[[448,5]]},"307":{"position":[[3046,10],[3119,10]]},"308":{"position":[[1242,10]]},"314":{"position":[[2747,9]]},"339":{"position":[[21,5]]},"371":{"position":[[399,5]]},"379":{"position":[[565,9]]},"448":{"position":[[858,5]]},"485":{"position":[[352,6]]},"496":{"position":[[472,5]]},"517":{"position":[[3804,5]]},"546":{"position":[[321,5]]},"548":{"position":[[465,6]]},"573":{"position":[[1133,9]]},"594":{"position":[[309,5]]},"595":{"position":[[1311,10]]},"657":{"position":[[352,6]]},"673":{"position":[[352,6]]},"688":{"position":[[352,6]]},"842":{"position":[[1833,10]]},"864":{"position":[[1551,5]]},"868":{"position":[[367,5]]},"880":{"position":[[368,5]]},"1077":{"position":[[45,9],[588,5]]},"1137":{"position":[[24,5]]},"1139":{"position":[[286,5]]},"1140":{"position":[[1544,5]]},"1176":{"position":[[557,9]]},"1178":{"position":[[24,5]]},"1185":{"position":[[357,9]]},"1187":{"position":[[24,5]]},"1194":{"position":[[567,9]]},"1195":{"position":[[24,5]]},"1203":{"position":[[728,9]]},"1205":{"position":[[24,5]]},"1226":{"position":[[368,9]]},"1229":{"position":[[24,5]]},"1243":{"position":[[145,9]]},"1246":{"position":[[24,5]]},"1247":{"position":[[945,9]]},"1284":{"position":[[24,5]]},"1292":{"position":[[1547,5]]},"1298":{"position":[[112,5],[314,5],[507,5]]},"1299":{"position":[[24,5]]},"1306":{"position":[[1547,5]]},"1312":{"position":[[24,5]]},"1316":{"position":[[1544,5]]},"1322":{"position":[[146,5],[348,5],[541,5]]},"1323":{"position":[[24,5]]},"1329":{"position":[[1547,5]]},"1335":{"position":[[146,5],[348,5],[541,5]]},"1336":{"position":[[24,5]]},"1340":{"position":[[1544,5]]},"1346":{"position":[[112,5],[314,5],[507,5]]},"1347":{"position":[[24,5]]},"1351":{"position":[[1544,5]]},"1354":{"position":[[392,9]]},"1355":{"position":[[24,5]]},"1370":{"position":[[529,5]]},"1375":{"position":[[24,5]]},"1379":{"position":[[1708,5]]},"1382":{"position":[[611,9]]},"1384":{"position":[[495,5]]},"1385":{"position":[[24,5]]},"1387":{"position":[[852,5]]},"1399":{"position":[[24,5]]},"1403":{"position":[[1708,5]]},"1410":{"position":[[24,5]]},"1414":{"position":[[1708,5]]},"1419":{"position":[[24,5]]},"1426":{"position":[[24,5]]},"1431":{"position":[[1567,5]]},"1434":{"position":[[2136,6]]},"1443":{"position":[[493,5],[686,5]]},"1444":{"position":[[647,6],[976,6]]},"1448":{"position":[[597,5]]},"1452":{"position":[[784,5]]},"1453":{"position":[[303,6]]},"1474":{"position":[[18,6],[725,9],[858,9]]}},"keywords":{}}],["begin/committransact",{"_index":6471,"title":{},"content":{"1437":{"position":[[327,24]]}},"keywords":{}}],["begin_fram",{"_index":5589,"title":{},"content":{"1140":{"position":[[1594,11]]},"1316":{"position":[[1594,11]]},"1340":{"position":[[1594,11]]},"1351":{"position":[[1594,11]]},"1431":{"position":[[1617,11]]}},"keywords":{}}],["begin_partit",{"_index":5591,"title":{},"content":{"1140":{"position":[[1635,15]]},"1316":{"position":[[1635,15]]},"1340":{"position":[[1635,15]]},"1351":{"position":[[1635,15]]},"1431":{"position":[[1658,15]]}},"keywords":{}}],["behalf",{"_index":514,"title":{},"content":{"19":{"position":[[175,7]]},"64":{"position":[[277,7]]},"82":{"position":[[454,7],[1148,7],[2982,7]]},"108":{"position":[[365,7]]},"122":{"position":[[739,7]]},"157":{"position":[[102,7]]},"164":{"position":[[438,6]]},"239":{"position":[[1297,6]]},"338":{"position":[[330,6]]}},"keywords":{}}],["behav",{"_index":6717,"title":{},"content":{"1477":{"position":[[667,6]]}},"keywords":{}}],["behavior",{"_index":748,"title":{"74":{"position":[[4,10]]},"88":{"position":[[6,9]]}},"content":{"42":{"position":[[719,10]]},"43":{"position":[[101,9],[150,8]]},"55":{"position":[[267,8]]},"62":{"position":[[366,8]]},"122":{"position":[[1956,8]]},"132":{"position":[[334,8]]},"159":{"position":[[530,9]]},"163":{"position":[[362,8],[444,10]]},"164":{"position":[[11,9],[2250,10]]},"279":{"position":[[797,8]]},"306":{"position":[[692,8]]},"331":{"position":[[748,9]]},"332":{"position":[[785,8]]},"429":{"position":[[516,8]]},"479":{"position":[[755,8]]},"483":{"position":[[233,8]]},"821":{"position":[[910,9]]},"907":{"position":[[1336,8]]},"923":{"position":[[1336,8]]},"934":{"position":[[1336,8]]},"950":{"position":[[1336,8]]},"968":{"position":[[1336,8]]},"1156":{"position":[[677,8]]},"1285":{"position":[[909,8]]},"1300":{"position":[[909,8]]},"1313":{"position":[[763,8]]},"1324":{"position":[[909,8]]},"1337":{"position":[[763,8]]},"1348":{"position":[[763,8]]},"1437":{"position":[[1236,9]]},"1438":{"position":[[677,9]]},"1440":{"position":[[1473,9],[1639,8]]},"1463":{"position":[[235,9]]},"1465":{"position":[[369,10]]}},"keywords":{}}],["behind",{"_index":2179,"title":{},"content":{"196":{"position":[[689,6]]},"210":{"position":[[500,6]]},"233":{"position":[[874,6]]}},"keywords":{}}],["belong",{"_index":2967,"title":{},"content":{"295":{"position":[[783,6]]},"997":{"position":[[197,6]]},"1277":{"position":[[885,6]]}},"keywords":{}}],["below",{"_index":875,"title":{},"content":{"58":{"position":[[213,5]]},"60":{"position":[[194,6]]},"61":{"position":[[268,6]]},"66":{"position":[[840,6]]},"80":{"position":[[197,6],[380,5]]},"82":{"position":[[1255,5]]},"83":{"position":[[854,6]]},"137":{"position":[[625,6]]},"141":{"position":[[225,6]]},"169":{"position":[[452,5]]},"172":{"position":[[180,6]]},"236":{"position":[[268,5],[1856,5]]},"238":{"position":[[852,6]]},"250":{"position":[[106,5]]},"253":{"position":[[469,5]]},"307":{"position":[[622,6]]},"313":{"position":[[469,5]]},"325":{"position":[[849,5]]},"348":{"position":[[18,5]]},"350":{"position":[[198,5]]},"358":{"position":[[198,5]]},"369":{"position":[[198,5]]},"370":{"position":[[199,5]]},"376":{"position":[[198,5]]},"386":{"position":[[198,5]]},"387":{"position":[[40,5]]},"391":{"position":[[198,5]]},"396":{"position":[[198,5]]},"401":{"position":[[244,5]]},"407":{"position":[[198,5]]},"413":{"position":[[424,5]]},"414":{"position":[[161,6]]},"415":{"position":[[421,6]]},"416":{"position":[[198,5]]},"417":{"position":[[1441,6]]},"423":{"position":[[198,5]]},"431":{"position":[[198,5]]},"437":{"position":[[198,5]]},"447":{"position":[[198,5]]},"448":{"position":[[40,5]]},"453":{"position":[[198,5]]},"459":{"position":[[198,5]]},"465":{"position":[[198,5]]},"472":{"position":[[198,5]]},"476":{"position":[[18,5]]},"481":{"position":[[198,5]]},"495":{"position":[[198,5]]},"501":{"position":[[154,5]]},"502":{"position":[[1089,6]]},"508":{"position":[[198,5]]},"515":{"position":[[346,5]]},"516":{"position":[[198,5]]},"525":{"position":[[198,5]]},"533":{"position":[[198,5]]},"534":{"position":[[40,5]]},"539":{"position":[[198,5]]},"544":{"position":[[198,5]]},"555":{"position":[[195,5]]},"556":{"position":[[40,5]]},"563":{"position":[[262,5]]},"571":{"position":[[303,5]]},"572":{"position":[[198,5]]},"574":{"position":[[447,6]]},"583":{"position":[[188,5]]},"592":{"position":[[195,5]]},"593":{"position":[[469,5]]},"594":{"position":[[886,5]]},"609":{"position":[[143,5]]},"610":{"position":[[198,5]]},"611":{"position":[[40,5]]},"617":{"position":[[245,5]]},"618":{"position":[[198,5]]},"624":{"position":[[198,5]]},"630":{"position":[[198,5]]},"636":{"position":[[198,5]]},"646":{"position":[[198,5]]},"653":{"position":[[198,5]]},"669":{"position":[[198,5]]},"684":{"position":[[198,5]]},"685":{"position":[[40,5]]},"686":{"position":[[12,5]]},"690":{"position":[[249,5]]},"699":{"position":[[198,5]]},"705":{"position":[[198,5]]},"711":{"position":[[198,5]]},"719":{"position":[[193,5]]},"720":{"position":[[40,5]]},"727":{"position":[[198,5]]},"734":{"position":[[198,5]]},"740":{"position":[[198,5]]},"746":{"position":[[198,5]]},"750":{"position":[[288,5]]},"752":{"position":[[1035,5]]},"754":{"position":[[1228,7]]},"756":{"position":[[198,5]]},"766":{"position":[[288,5]]},"769":{"position":[[198,5]]},"781":{"position":[[195,5]]},"789":{"position":[[322,5]]},"791":{"position":[[1069,5]]},"794":{"position":[[1432,7]]},"796":{"position":[[199,5]]},"807":{"position":[[322,5]]},"809":{"position":[[1432,7]]},"811":{"position":[[198,5]]},"823":{"position":[[322,5]]},"825":{"position":[[1268,7]]},"827":{"position":[[198,5]]},"841":{"position":[[198,5]]},"850":{"position":[[198,5]]},"858":{"position":[[198,5]]},"859":{"position":[[40,5]]},"863":{"position":[[18,5]]},"866":{"position":[[198,5]]},"871":{"position":[[122,5]]},"875":{"position":[[18,5]]},"878":{"position":[[198,5]]},"884":{"position":[[198,5]]},"890":{"position":[[199,5]]},"895":{"position":[[18,5]]},"896":{"position":[[198,5]]},"906":{"position":[[198,5]]},"921":{"position":[[198,5]]},"922":{"position":[[2300,6]]},"933":{"position":[[198,5]]},"947":{"position":[[671,6]]},"949":{"position":[[198,5]]},"958":{"position":[[198,5]]},"967":{"position":[[198,5]]},"981":{"position":[[198,5]]},"990":{"position":[[198,5]]},"991":{"position":[[40,5]]},"996":{"position":[[198,5]]},"1005":{"position":[[195,5]]},"1008":{"position":[[1812,5]]},"1009":{"position":[[40,5]]},"1014":{"position":[[198,5]]},"1021":{"position":[[198,5],[1600,6]]},"1027":{"position":[[198,5]]},"1031":{"position":[[826,5]]},"1033":{"position":[[202,5]]},"1042":{"position":[[851,5]]},"1043":{"position":[[1515,5]]},"1044":{"position":[[198,5]]},"1051":{"position":[[1777,5]]},"1052":{"position":[[198,5]]},"1059":{"position":[[1570,5]]},"1060":{"position":[[198,5]]},"1069":{"position":[[198,5]]},"1070":{"position":[[40,5]]},"1075":{"position":[[198,5]]},"1084":{"position":[[198,5]]},"1085":{"position":[[40,5]]},"1090":{"position":[[18,5]]},"1093":{"position":[[198,5]]},"1100":{"position":[[198,5]]},"1106":{"position":[[199,5]]},"1112":{"position":[[198,5]]},"1124":{"position":[[198,5]]},"1129":{"position":[[199,6]]},"1132":{"position":[[199,5]]},"1137":{"position":[[81,5]]},"1138":{"position":[[199,5]]},"1140":{"position":[[286,6]]},"1143":{"position":[[9,5]]},"1150":{"position":[[9,5]]},"1161":{"position":[[9,5]]},"1169":{"position":[[9,5]]},"1178":{"position":[[81,5]]},"1186":{"position":[[558,7]]},"1187":{"position":[[81,5]]},"1192":{"position":[[244,6]]},"1195":{"position":[[81,5]]},"1200":{"position":[[769,6]]},"1203":{"position":[[610,6]]},"1205":{"position":[[81,5]]},"1212":{"position":[[9,5]]},"1219":{"position":[[9,5]]},"1229":{"position":[[81,5]]},"1245":{"position":[[197,5]]},"1246":{"position":[[81,5]]},"1252":{"position":[[195,5]]},"1259":{"position":[[9,5]]},"1265":{"position":[[105,5]]},"1284":{"position":[[81,5]]},"1289":{"position":[[748,5]]},"1292":{"position":[[215,6]]},"1299":{"position":[[81,5]]},"1306":{"position":[[215,6]]},"1312":{"position":[[81,5]]},"1316":{"position":[[286,6]]},"1323":{"position":[[81,5]]},"1329":{"position":[[215,6]]},"1334":{"position":[[250,5]]},"1336":{"position":[[81,5]]},"1340":{"position":[[286,6]]},"1347":{"position":[[81,5]]},"1351":{"position":[[286,6]]},"1355":{"position":[[81,5]]},"1370":{"position":[[278,6]]},"1375":{"position":[[81,5]]},"1379":{"position":[[223,6]]},"1382":{"position":[[326,5]]},"1385":{"position":[[81,5]]},"1388":{"position":[[608,6]]},"1394":{"position":[[242,6]]},"1399":{"position":[[81,5]]},"1403":{"position":[[223,6]]},"1410":{"position":[[81,5]]},"1414":{"position":[[223,6]]},"1419":{"position":[[81,5]]},"1423":{"position":[[245,6]]},"1426":{"position":[[81,5]]},"1431":{"position":[[309,6]]},"1452":{"position":[[497,6]]},"1461":{"position":[[1030,6]]}},"keywords":{}}],["benchmark",{"_index":2206,"title":{},"content":{"198":{"position":[[1029,10]]}},"keywords":{}}],["bend",{"_index":6492,"title":{},"content":{"1439":{"position":[[1286,7]]}},"keywords":{}}],["benefit",{"_index":543,"title":{},"content":{"20":{"position":[[755,7]]},"281":{"position":[[2849,8]]}},"keywords":{}}],["best",{"_index":1964,"title":{},"content":{"165":{"position":[[2269,4]]},"175":{"position":[[307,4]]},"198":{"position":[[16,4]]},"309":{"position":[[1219,4]]},"322":{"position":[[609,4]]},"326":{"position":[[1187,4]]},"480":{"position":[[562,4]]},"821":{"position":[[1279,4]]},"1149":{"position":[[442,4]]},"1156":{"position":[[5,4]]},"1461":{"position":[[704,4]]}},"keywords":{}}],["beta",{"_index":1031,"title":{},"content":{"68":{"position":[[1242,4],[1256,5]]},"175":{"position":[[138,4]]},"427":{"position":[[340,4]]},"429":{"position":[[1304,4]]},"1471":{"position":[[369,4]]}},"keywords":{}}],["beta.click",{"_index":5079,"title":{},"content":{"942":{"position":[[515,10]]}},"keywords":{}}],["better",{"_index":1580,"title":{},"content":{"110":{"position":[[1370,6]]},"219":{"position":[[117,6]]},"864":{"position":[[77,6]]},"876":{"position":[[77,6]]},"1391":{"position":[[474,6]]},"1462":{"position":[[563,6]]}},"keywords":{}}],["between",{"_index":97,"title":{},"content":{"2":{"position":[[734,7]]},"8":{"position":[[676,7]]},"11":{"position":[[688,7],[1945,7]]},"32":{"position":[[142,7]]},"41":{"position":[[516,8]]},"56":{"position":[[2170,7]]},"61":{"position":[[154,7]]},"62":{"position":[[122,7]]},"70":{"position":[[341,8]]},"81":{"position":[[1534,7]]},"84":{"position":[[876,7]]},"189":{"position":[[1684,7]]},"192":{"position":[[1858,7]]},"204":{"position":[[532,7]]},"208":{"position":[[619,7],[770,7]]},"211":{"position":[[519,7]]},"216":{"position":[[453,7]]},"238":{"position":[[633,7]]},"240":{"position":[[3616,7]]},"266":{"position":[[330,8]]},"305":{"position":[[88,7]]},"319":{"position":[[849,7]]},"332":{"position":[[494,7]]},"379":{"position":[[173,7]]},"480":{"position":[[1167,7]]},"517":{"position":[[1555,7],[2720,7]]},"534":{"position":[[1075,7]]},"540":{"position":[[432,7]]},"646":{"position":[[859,7]]},"792":{"position":[[205,7]]},"793":{"position":[[19,7]]},"808":{"position":[[19,7]]},"824":{"position":[[19,7]]},"842":{"position":[[2620,7]]},"879":{"position":[[1424,7],[1751,7]]},"904":{"position":[[19,7]]},"918":{"position":[[205,7]]},"919":{"position":[[19,7]]},"931":{"position":[[19,7]]},"974":{"position":[[67,7]]},"1006":{"position":[[233,7]]},"1036":{"position":[[363,7]]},"1043":{"position":[[19,7]]},"1051":{"position":[[19,7]]},"1059":{"position":[[19,7]]},"1085":{"position":[[837,7]]},"1140":{"position":[[1693,7]]},"1209":{"position":[[283,7]]},"1292":{"position":[[1597,7]]},"1303":{"position":[[19,7]]},"1306":{"position":[[1597,7]]},"1316":{"position":[[1693,7]]},"1329":{"position":[[1597,7]]},"1340":{"position":[[1693,7]]},"1351":{"position":[[1693,7]]},"1370":{"position":[[539,7]]},"1373":{"position":[[19,7]]},"1374":{"position":[[19,7]]},"1379":{"position":[[1772,7]]},"1394":{"position":[[586,7]]},"1397":{"position":[[19,7]]},"1398":{"position":[[19,7]]},"1403":{"position":[[1772,7]]},"1409":{"position":[[19,7]]},"1414":{"position":[[1772,7]]},"1431":{"position":[[1716,7]]},"1452":{"position":[[3462,7]]},"1461":{"position":[[649,7]]}},"keywords":{}}],["beyond",{"_index":1854,"title":{},"content":{"156":{"position":[[179,6]]},"574":{"position":[[22,6]]},"585":{"position":[[22,6]]}},"keywords":{}}],["big",{"_index":1979,"title":{},"content":{"169":{"position":[[342,4]]},"747":{"position":[[1297,3]]}},"keywords":{}}],["bigger",{"_index":737,"title":{},"content":{"41":{"position":[[678,6]]},"573":{"position":[[1160,6]]}},"keywords":{}}],["biggest",{"_index":3172,"title":{},"content":{"325":{"position":[[245,7]]}},"keywords":{}}],["bigint",{"_index":5595,"title":{},"content":{"1140":{"position":[[1749,6]]},"1209":{"position":[[306,6]]},"1292":{"position":[[1631,6]]},"1306":{"position":[[1631,6]]},"1316":{"position":[[1749,6]]},"1329":{"position":[[1631,6]]},"1340":{"position":[[1749,6]]},"1351":{"position":[[1749,6]]},"1431":{"position":[[1772,6]]}},"keywords":{}}],["bigqueri",{"_index":549,"title":{"326":{"position":[[11,9]]},"474":{"position":[[0,8]]},"479":{"position":[[11,8]]},"1175":{"position":[[7,8]]}},"content":{"20":{"position":[[911,9]]},"326":{"position":[[829,9]]},"363":{"position":[[853,8],[908,8]]},"475":{"position":[[96,8]]},"476":{"position":[[38,8]]},"477":{"position":[[19,9],[202,8]]},"481":{"position":[[250,8]]},"482":{"position":[[140,8],[194,8]]},"1120":{"position":[[1037,8]]},"1176":{"position":[[98,8],[315,8]]},"1178":{"position":[[113,8],[226,8],[247,8],[483,9],[501,8]]},"1179":{"position":[[138,8],[361,8],[804,9],[955,8],[1056,8]]},"1180":{"position":[[87,8]]},"1182":{"position":[[184,8],[497,8]]}},"keywords":{}}],["bigquery:dev",{"_index":5424,"title":{},"content":{"1120":{"position":[[1097,12]]},"1180":{"position":[[259,12]]}},"keywords":{}}],["bike",{"_index":1586,"title":{"190":{"position":[[13,4]]}},"content":{"110":{"position":[[1524,4]]},"189":{"position":[[59,4],[84,5],[95,4],[355,4],[398,4],[425,4],[455,6],[492,4],[784,4]]},"190":{"position":[[1093,4],[2052,4]]},"193":{"position":[[59,4],[162,4]]}},"keywords":{}}],["bikes"",{"_index":1588,"title":{},"content":{"110":{"position":[[1540,11]]}},"keywords":{}}],["bill",{"_index":1754,"title":{"1456":{"position":[[0,7]]}},"content":{"135":{"position":[[608,7]]},"595":{"position":[[1502,4]]},"1179":{"position":[[730,7],[794,6],[938,8]]},"1456":{"position":[[1,7]]}},"keywords":{}}],["billabl",{"_index":4349,"title":{},"content":{"628":{"position":[[322,8]]}},"keywords":{}}],["billing.optim",{"_index":280,"title":{},"content":{"8":{"position":[[837,16]]}},"keywords":{}}],["billing_project_id",{"_index":5794,"title":{},"content":{"1179":{"position":[[710,19]]}},"keywords":{}}],["binari",{"_index":572,"title":{},"content":{"21":{"position":[[562,6]]},"58":{"position":[[9,8]]},"117":{"position":[[261,6]]},"169":{"position":[[242,7]]},"752":{"position":[[878,6]]},"767":{"position":[[2234,6]]},"791":{"position":[[883,6]]},"792":{"position":[[2226,6]]},"824":{"position":[[2348,6]]},"1140":{"position":[[1791,6]]},"1164":{"position":[[333,6]]},"1292":{"position":[[1668,6]]},"1306":{"position":[[1668,6]]},"1316":{"position":[[1791,6]]},"1329":{"position":[[1668,6]]},"1340":{"position":[[1791,6]]},"1351":{"position":[[1791,6]]},"1379":{"position":[[1837,6]]},"1384":{"position":[[1059,6]]},"1403":{"position":[[1837,6]]},"1414":{"position":[[1837,6]]},"1431":{"position":[[1814,6]]}},"keywords":{}}],["bind",{"_index":399,"title":{"45":{"position":[[14,9]]},"126":{"position":[[63,9]]},"565":{"position":[[0,9]]},"1035":{"position":[[0,7]]},"1240":{"position":[[0,9]]},"1269":{"position":[[0,9]]}},"content":{"13":{"position":[[845,8],[1843,8],[1906,8]]},"45":{"position":[[444,8],[506,9]]},"54":{"position":[[377,8],[642,9],[720,9]]},"55":{"position":[[417,9],[507,9]]},"56":{"position":[[285,8],[486,8],[631,8],[1331,8],[1415,4],[1489,9]]},"81":{"position":[[1439,9],[1526,7],[1900,4],[2732,9]]},"83":{"position":[[2362,9]]},"99":{"position":[[191,4]]},"105":{"position":[[18,5]]},"119":{"position":[[479,9]]},"120":{"position":[[690,8],[883,8],[917,9],[962,8],[2246,8],[2266,8],[2392,7],[2490,7],[2532,8],[2635,8],[2687,8],[2725,8]]},"121":{"position":[[1161,9]]},"122":{"position":[[1167,9]]},"123":{"position":[[542,9]]},"126":{"position":[[296,8],[372,8],[400,8],[529,8],[591,8]]},"208":{"position":[[1088,8]]},"217":{"position":[[1618,8]]},"228":{"position":[[266,7]]},"230":{"position":[[864,7]]},"277":{"position":[[1228,9]]},"307":{"position":[[390,8],[1160,9],[1641,9],[2010,9],[2509,9]]},"308":{"position":[[244,8],[662,7],[880,8],[1205,7]]},"309":{"position":[[2460,9],[3067,9],[3248,7]]},"344":{"position":[[298,9]]},"351":{"position":[[298,9]]},"359":{"position":[[275,9]]},"360":{"position":[[164,9]]},"370":{"position":[[1983,9]]},"371":{"position":[[1281,9],[1485,8]]},"377":{"position":[[1663,9],[1754,8]]},"378":{"position":[[310,9]]},"381":{"position":[[616,8]]},"387":{"position":[[1312,9]]},"388":{"position":[[419,9]]},"392":{"position":[[662,9]]},"393":{"position":[[315,9],[468,8]]},"397":{"position":[[804,9]]},"398":{"position":[[316,9],[459,8]]},"402":{"position":[[628,9]]},"403":{"position":[[394,9]]},"408":{"position":[[505,9]]},"417":{"position":[[2198,9]]},"418":{"position":[[376,9],[526,8]]},"419":{"position":[[1209,7]]},"421":{"position":[[215,8]]},"424":{"position":[[329,9]]},"425":{"position":[[196,9]]},"432":{"position":[[1172,9]]},"433":{"position":[[324,9],[720,9],[894,8]]},"438":{"position":[[1883,9]]},"439":{"position":[[603,9]]},"440":{"position":[[1225,7]]},"443":{"position":[[574,8]]},"448":{"position":[[1199,9]]},"449":{"position":[[400,9]]},"451":{"position":[[224,8]]},"454":{"position":[[518,9]]},"455":{"position":[[243,9]]},"457":{"position":[[228,8]]},"460":{"position":[[535,9]]},"461":{"position":[[244,9]]},"463":{"position":[[334,8]]},"466":{"position":[[246,9]]},"467":{"position":[[179,9]]},"470":{"position":[[97,8]]},"473":{"position":[[282,9]]},"479":{"position":[[592,8],[615,7],[865,7]]},"480":{"position":[[1497,8]]},"482":{"position":[[402,8],[445,8],[478,9],[586,8],[877,8]]},"483":{"position":[[34,7],[406,7],[823,9]]},"488":{"position":[[505,8],[685,8],[783,7]]},"492":{"position":[[431,8],[517,8]]},"496":{"position":[[511,9]]},"497":{"position":[[198,9],[349,8]]},"502":{"position":[[1531,9]]},"503":{"position":[[172,9]]},"506":{"position":[[491,8]]},"509":{"position":[[511,9]]},"510":{"position":[[171,9]]},"512":{"position":[[251,8]]},"517":{"position":[[3934,9]]},"518":{"position":[[453,9]]},"521":{"position":[[404,8]]},"527":{"position":[[329,9]]},"529":{"position":[[783,8]]},"534":{"position":[[1679,9]]},"535":{"position":[[343,9]]},"537":{"position":[[240,8]]},"540":{"position":[[296,9]]},"541":{"position":[[160,9]]},"545":{"position":[[1593,9]]},"546":{"position":[[1083,9],[1233,8]]},"547":{"position":[[1211,7]]},"550":{"position":[[488,8]]},"556":{"position":[[2176,9]]},"557":{"position":[[595,9]]},"566":{"position":[[158,9]]},"568":{"position":[[298,8]]},"573":{"position":[[1255,9]]},"575":{"position":[[302,9]]},"580":{"position":[[240,8]]},"584":{"position":[[1327,9]]},"586":{"position":[[324,9]]},"593":{"position":[[319,9]]},"594":{"position":[[859,9]]},"595":{"position":[[31,7]]},"601":{"position":[[390,9]]},"605":{"position":[[446,8]]},"611":{"position":[[1166,9]]},"612":{"position":[[347,9]]},"619":{"position":[[568,9]]},"620":{"position":[[241,9]]},"622":{"position":[[452,8]]},"625":{"position":[[140,9]]},"626":{"position":[[136,9]]},"628":{"position":[[516,8]]},"631":{"position":[[471,9]]},"632":{"position":[[205,9]]},"637":{"position":[[1129,9]]},"638":{"position":[[375,9]]},"642":{"position":[[39,8]]},"646":{"position":[[709,9]]},"647":{"position":[[188,9]]},"649":{"position":[[114,8]]},"654":{"position":[[791,9]]},"655":{"position":[[194,9],[334,8]]},"659":{"position":[[662,8],[842,8],[940,7]]},"661":{"position":[[231,4]]},"665":{"position":[[431,8],[517,8]]},"667":{"position":[[301,8]]},"670":{"position":[[629,9]]},"671":{"position":[[238,9]]},"676":{"position":[[505,8],[685,8],[783,7]]},"680":{"position":[[431,8]]},"682":{"position":[[272,8]]},"685":{"position":[[453,9]]},"686":{"position":[[233,9]]},"691":{"position":[[505,8],[685,8],[783,7]]},"695":{"position":[[431,8],[517,8]]},"697":{"position":[[641,8]]},"700":{"position":[[281,9]]},"701":{"position":[[167,9]]},"703":{"position":[[206,8]]},"706":{"position":[[281,9]]},"707":{"position":[[167,9]]},"709":{"position":[[894,8]]},"712":{"position":[[476,9]]},"713":{"position":[[176,9]]},"715":{"position":[[263,8]]},"720":{"position":[[785,9]]},"721":{"position":[[306,9]]},"735":{"position":[[368,9]]},"736":{"position":[[165,9]]},"738":{"position":[[818,8]]},"741":{"position":[[458,9]]},"742":{"position":[[235,9]]},"744":{"position":[[208,8]]},"747":{"position":[[1340,9]]},"748":{"position":[[395,9]]},"757":{"position":[[1890,9],[2298,7],[2500,8]]},"758":{"position":[[265,9],[469,8]]},"760":{"position":[[376,8]]},"761":{"position":[[545,7]]},"763":{"position":[[363,8]]},"770":{"position":[[1890,9],[2298,7],[2500,8]]},"771":{"position":[[265,9],[469,8]]},"773":{"position":[[376,8]]},"774":{"position":[[545,7]]},"776":{"position":[[363,8]]},"782":{"position":[[486,9]]},"783":{"position":[[192,9]]},"797":{"position":[[1890,9],[2305,7],[2508,8]]},"798":{"position":[[263,9],[467,8]]},"800":{"position":[[376,8]]},"801":{"position":[[551,7]]},"803":{"position":[[369,8]]},"812":{"position":[[1890,9],[2305,7],[2508,8]]},"813":{"position":[[263,9],[467,8]]},"815":{"position":[[376,8]]},"816":{"position":[[551,7]]},"818":{"position":[[369,8]]},"821":{"position":[[1184,8]]},"828":{"position":[[1890,9],[2305,7],[2508,8]]},"829":{"position":[[263,9],[467,8]]},"831":{"position":[[376,8]]},"832":{"position":[[551,7]]},"834":{"position":[[369,8]]},"842":{"position":[[1863,9],[1960,7],[3125,7]]},"843":{"position":[[473,9]]},"851":{"position":[[561,9]]},"852":{"position":[[302,9]]},"854":{"position":[[157,8]]},"859":{"position":[[708,9]]},"860":{"position":[[257,9]]},"867":{"position":[[2087,9]]},"868":{"position":[[443,9]]},"879":{"position":[[1510,9]]},"880":{"position":[[444,9]]},"882":{"position":[[168,8]]},"885":{"position":[[582,9]]},"886":{"position":[[258,9]]},"888":{"position":[[223,8]]},"891":{"position":[[317,9]]},"892":{"position":[[149,9]]},"897":{"position":[[235,9]]},"907":{"position":[[1390,9]]},"908":{"position":[[309,9],[513,8]]},"912":{"position":[[1322,8]]},"923":{"position":[[1390,9]]},"924":{"position":[[309,9],[513,8]]},"934":{"position":[[1390,9]]},"935":{"position":[[309,9],[513,8]]},"950":{"position":[[1390,9]]},"951":{"position":[[309,9],[513,8]]},"956":{"position":[[244,8]]},"959":{"position":[[337,9]]},"960":{"position":[[173,9]]},"968":{"position":[[1390,9]]},"969":{"position":[[309,9],[513,8]]},"979":{"position":[[318,8]]},"982":{"position":[[339,9]]},"983":{"position":[[167,9]]},"985":{"position":[[660,8]]},"991":{"position":[[762,9]]},"992":{"position":[[226,9]]},"994":{"position":[[176,8]]},"997":{"position":[[307,9]]},"998":{"position":[[206,9]]},"1000":{"position":[[974,8]]},"1009":{"position":[[1501,9]]},"1010":{"position":[[410,9]]},"1012":{"position":[[303,8]]},"1015":{"position":[[395,9]]},"1016":{"position":[[285,9]]},"1021":{"position":[[2009,9]]},"1022":{"position":[[401,9]]},"1023":{"position":[[1192,7]]},"1025":{"position":[[450,8]]},"1028":{"position":[[342,9]]},"1029":{"position":[[175,9]]},"1037":{"position":[[237,9]]},"1045":{"position":[[1009,9]]},"1046":{"position":[[250,9],[447,8]]},"1053":{"position":[[1009,9]]},"1054":{"position":[[250,9],[447,8]]},"1061":{"position":[[1009,9]]},"1062":{"position":[[250,9],[447,8]]},"1065":{"position":[[175,8]]},"1070":{"position":[[965,9]]},"1071":{"position":[[305,9]]},"1073":{"position":[[427,8]]},"1076":{"position":[[748,9]]},"1078":{"position":[[192,9]]},"1080":{"position":[[884,8]]},"1085":{"position":[[1339,9]]},"1086":{"position":[[360,9]]},"1094":{"position":[[404,9]]},"1099":{"position":[[548,8]]},"1101":{"position":[[238,9]]},"1102":{"position":[[150,9]]},"1104":{"position":[[246,8]]},"1107":{"position":[[376,9]]},"1108":{"position":[[239,9]]},"1110":{"position":[[566,8]]},"1113":{"position":[[438,9]]},"1114":{"position":[[225,9]]},"1125":{"position":[[484,9]]},"1126":{"position":[[277,9]]},"1128":{"position":[[483,8]]},"1133":{"position":[[1172,9]]},"1134":{"position":[[259,9]]},"1138":{"position":[[624,7],[1273,9]]},"1139":{"position":[[1168,9]]},"1144":{"position":[[1236,9]]},"1145":{"position":[[265,9]]},"1146":{"position":[[492,7],[570,7],[607,7]]},"1151":{"position":[[609,7],[1307,9]]},"1152":{"position":[[362,9]]},"1155":{"position":[[352,8]]},"1156":{"position":[[161,8]]},"1162":{"position":[[537,7],[740,9]]},"1163":{"position":[[299,9]]},"1170":{"position":[[1161,9]]},"1171":{"position":[[269,9]]},"1173":{"position":[[504,7],[582,7],[619,7]]},"1179":{"position":[[436,7],[971,9]]},"1180":{"position":[[272,9]]},"1182":{"position":[[569,7],[586,9]]},"1188":{"position":[[690,9]]},"1189":{"position":[[381,7],[441,9]]},"1191":{"position":[[573,7],[590,9]]},"1195":{"position":[[417,7],[499,8],[699,8]]},"1196":{"position":[[848,9]]},"1197":{"position":[[387,7],[447,9]]},"1199":{"position":[[93,8]]},"1200":{"position":[[336,7],[701,7]]},"1206":{"position":[[812,9]]},"1207":{"position":[[470,7],[530,9]]},"1213":{"position":[[913,9]]},"1214":{"position":[[205,9]]},"1215":{"position":[[492,7],[570,7],[607,7]]},"1220":{"position":[[838,9]]},"1221":{"position":[[209,9]]},"1223":{"position":[[504,7],[582,7],[619,7]]},"1230":{"position":[[582,9],[1103,7],[1159,7]]},"1231":{"position":[[236,9]]},"1232":{"position":[[167,7],[250,8],[309,7],[360,7],[429,7],[474,9]]},"1241":{"position":[[1,9]]},"1247":{"position":[[790,9],[822,7]]},"1248":{"position":[[414,7],[474,9]]},"1253":{"position":[[401,9]]},"1254":{"position":[[232,9]]},"1260":{"position":[[323,7],[855,9]]},"1261":{"position":[[304,9]]},"1262":{"position":[[573,7],[590,9]]},"1270":{"position":[[192,9]]},"1277":{"position":[[587,9],[983,9]]},"1278":{"position":[[266,9]]},"1286":{"position":[[2484,9]]},"1287":{"position":[[181,9]]},"1301":{"position":[[2320,9]]},"1302":{"position":[[181,9]]},"1313":{"position":[[434,7],[817,9]]},"1314":{"position":[[184,9]]},"1325":{"position":[[2484,9]]},"1326":{"position":[[181,9]]},"1337":{"position":[[434,7],[817,9]]},"1338":{"position":[[184,9]]},"1348":{"position":[[434,7],[817,9]]},"1349":{"position":[[184,9]]},"1356":{"position":[[395,9],[410,7]]},"1357":{"position":[[319,7],[379,9]]},"1362":{"position":[[454,9]]},"1363":{"position":[[233,9]]},"1367":{"position":[[1,9]]},"1368":{"position":[[120,9]]},"1376":{"position":[[399,9]]},"1377":{"position":[[185,9]]},"1384":{"position":[[54,9],[1236,8]]},"1386":{"position":[[407,7],[1093,9]]},"1387":{"position":[[420,7],[480,9],[1046,7],[1106,9]]},"1389":{"position":[[571,7],[588,9]]},"1392":{"position":[[167,9]]},"1400":{"position":[[399,9]]},"1401":{"position":[[185,9]]},"1411":{"position":[[399,9]]},"1412":{"position":[[185,9]]},"1420":{"position":[[640,9]]},"1421":{"position":[[407,7],[467,9]]},"1427":{"position":[[375,7],[544,9]]},"1428":{"position":[[225,9]]},"1429":{"position":[[188,7],[268,7],[464,8],[730,7],[770,9]]},"1443":{"position":[[1072,8]]},"1461":{"position":[[4133,7]]},"1472":{"position":[[754,9]]},"1480":{"position":[[623,9],[668,8]]}},"keywords":{}}],["bindingname.schema.yaml",{"_index":5162,"title":{},"content":{"1008":{"position":[[1531,24]]}},"keywords":{}}],["bing",{"_index":3322,"title":{"442":{"position":[[0,4]]}},"content":{"364":{"position":[[724,4],[779,4]]},"445":{"position":[[51,4]]},"446":{"position":[[28,4],[199,4]]},"447":{"position":[[250,4]]},"448":{"position":[[1273,4]]},"449":{"position":[[159,4]]}},"keywords":{}}],["binlog",{"_index":4618,"title":{"764":{"position":[[13,6]]},"777":{"position":[[13,6]]},"804":{"position":[[13,6]]},"819":{"position":[[13,6]]},"835":{"position":[[13,6]]}},"content":{"757":{"position":[[1707,6],[1769,6]]},"761":{"position":[[170,7],[459,7]]},"762":{"position":[[104,6],[578,7]]},"763":{"position":[[238,6]]},"764":{"position":[[123,6],[349,6]]},"770":{"position":[[1707,6],[1769,6]]},"774":{"position":[[170,7],[459,7]]},"775":{"position":[[104,6],[578,7]]},"776":{"position":[[238,6]]},"777":{"position":[[123,6],[349,6]]},"797":{"position":[[1707,6],[1769,6]]},"801":{"position":[[176,7],[465,7]]},"802":{"position":[[104,6],[578,7]]},"803":{"position":[[244,6]]},"804":{"position":[[121,6],[347,6]]},"812":{"position":[[1707,6],[1769,6]]},"816":{"position":[[176,7],[465,7]]},"817":{"position":[[104,6],[578,7]]},"818":{"position":[[244,6]]},"819":{"position":[[121,6],[347,6]]},"828":{"position":[[1707,6],[1769,6]]},"832":{"position":[[176,7],[465,7]]},"833":{"position":[[104,6],[578,7]]},"834":{"position":[[244,6]]},"835":{"position":[[121,6],[347,6]]},"1292":{"position":[[1705,6]]},"1306":{"position":[[1705,6]]},"1329":{"position":[[1705,6]]}},"keywords":{}}],["binlog_expire_logs_second",{"_index":4594,"title":{},"content":{"752":{"position":[[955,26]]},"753":{"position":[[660,26]]},"764":{"position":[[854,26]]},"777":{"position":[[854,26]]},"791":{"position":[[989,26]]},"793":{"position":[[620,26]]},"804":{"position":[[852,26]]},"808":{"position":[[647,26]]},"819":{"position":[[852,26]]},"835":{"position":[[852,26]]}},"keywords":{}}],["binlog_format",{"_index":4640,"title":{},"content":{"761":{"position":[[214,13],[321,13]]},"767":{"position":[[1070,14]]},"774":{"position":[[214,13],[321,13]]},"792":{"position":[[1375,14]]},"801":{"position":[[220,13],[327,13]]},"816":{"position":[[220,13],[327,13]]},"824":{"position":[[1136,14]]},"832":{"position":[[220,13],[327,13]]}},"keywords":{}}],["binlog_formatsystem",{"_index":4573,"title":{},"content":{"750":{"position":[[82,19]]},"766":{"position":[[82,19]]},"789":{"position":[[80,19]]},"807":{"position":[[80,19]]},"823":{"position":[[80,19]]}},"keywords":{}}],["bit",{"_index":1633,"title":{},"content":{"115":{"position":[[1303,3]]},"160":{"position":[[152,3]]},"207":{"position":[[57,3]]},"237":{"position":[[3407,3]]},"254":{"position":[[995,3]]},"296":{"position":[[980,3]]},"314":{"position":[[716,3]]},"757":{"position":[[1252,3]]},"770":{"position":[[1252,3]]},"797":{"position":[[1252,3]]},"812":{"position":[[1252,3]]},"828":{"position":[[1252,3]]},"867":{"position":[[1960,3]]},"1140":{"position":[[1843,3]]},"1292":{"position":[[1739,3]]},"1306":{"position":[[1739,3]]},"1316":{"position":[[1843,3]]},"1329":{"position":[[1739,3]]},"1340":{"position":[[1843,3]]},"1351":{"position":[[1843,3]]},"1379":{"position":[[1903,3]]},"1403":{"position":[[1903,3]]},"1414":{"position":[[1903,3]]},"1431":{"position":[[1866,3]]}},"keywords":{}}],["bit_length",{"_index":5602,"title":{},"content":{"1140":{"position":[[1889,10]]},"1316":{"position":[[1889,10]]},"1340":{"position":[[1889,10]]},"1351":{"position":[[1889,10]]},"1379":{"position":[[1941,10]]},"1403":{"position":[[1941,10]]},"1414":{"position":[[1941,10]]},"1431":{"position":[[1912,10]]}},"keywords":{}}],["bitbucket",{"_index":2044,"title":{},"content":{"179":{"position":[[115,9]]},"266":{"position":[[525,9]]}},"keywords":{}}],["black",{"_index":1789,"title":{},"content":{"138":{"position":[[1529,6]]},"141":{"position":[[1121,6],[1534,6]]},"142":{"position":[[1546,6]]}},"keywords":{}}],["blank",{"_index":2121,"title":{},"content":{"190":{"position":[[944,6],[1060,6]]},"397":{"position":[[1054,5]]},"593":{"position":[[226,5]]},"757":{"position":[[432,5]]},"770":{"position":[[432,5]]},"797":{"position":[[432,5]]},"812":{"position":[[432,5]]},"828":{"position":[[432,5]]},"859":{"position":[[629,6]]},"1009":{"position":[[953,6]]},"1034":{"position":[[630,6]]},"1144":{"position":[[681,6],[860,6],[972,6],[1144,6]]},"1170":{"position":[[681,6],[860,6],[988,6],[1144,6]]},"1196":{"position":[[804,5],[1179,5]]},"1213":{"position":[[536,6],[649,6],[821,6]]},"1220":{"position":[[536,6],[665,6],[821,6]]},"1267":{"position":[[472,5]]},"1285":{"position":[[494,5]]},"1300":{"position":[[494,5]]},"1324":{"position":[[494,5]]}},"keywords":{}}],["bloat",{"_index":5104,"title":{},"content":{"945":{"position":[[872,6]]}},"keywords":{}}],["blob",{"_index":1989,"title":{"173":{"position":[[6,4]]},"434":{"position":[[6,4]]}},"content":{"170":{"position":[[219,4]]},"173":{"position":[[156,4],[401,4],[485,4],[776,4],[904,4]]},"363":{"position":[[695,4],[753,4]]},"437":{"position":[[256,4]]},"438":{"position":[[628,4],[724,4],[852,4],[999,4],[1131,4],[1308,4],[1464,4],[1593,4]]},"439":{"position":[[101,4]]},"440":{"position":[[36,4]]},"1140":{"position":[[1929,4]]},"1292":{"position":[[1777,4]]},"1306":{"position":[[1777,4]]},"1316":{"position":[[1929,4]]},"1329":{"position":[[1777,4]]},"1340":{"position":[[1929,4]]},"1351":{"position":[[1929,4]]},"1379":{"position":[[1986,4]]},"1403":{"position":[[1986,4]]},"1414":{"position":[[1986,4]]},"1431":{"position":[[1952,4]]}},"keywords":{}}],["block",{"_index":1234,"title":{},"content":{"83":{"position":[[1368,5]]},"94":{"position":[[2380,6]]},"97":{"position":[[13,6],[386,6]]},"100":{"position":[[268,5]]},"277":{"position":[[61,6]]},"278":{"position":[[1609,6]]},"414":{"position":[[901,5]]},"860":{"position":[[287,6]]},"983":{"position":[[197,6]]},"1292":{"position":[[1821,5]]},"1306":{"position":[[1821,5]]},"1329":{"position":[[1821,5]]},"1461":{"position":[[3280,5]]}},"keywords":{}}],["blockscommentsdatabasespagesus",{"_index":4831,"title":{},"content":{"854":{"position":[[46,33]]}},"keywords":{}}],["blog",{"_index":2095,"title":{},"content":{"185":{"position":[[170,4]]},"299":{"position":[[459,4]]},"322":{"position":[[219,4],[1095,4]]},"390":{"position":[[628,4]]},"395":{"position":[[807,4]]},"415":{"position":[[339,4]]},"1122":{"position":[[433,4]]},"1142":{"position":[[284,4]]},"1149":{"position":[[731,4]]},"1160":{"position":[[447,4]]},"1168":{"position":[[284,4]]},"1258":{"position":[[325,4]]}},"keywords":{}}],["blue",{"_index":1662,"title":{},"content":{"121":{"position":[[1038,5]]},"206":{"position":[[831,4]]},"943":{"position":[[1008,4]]}},"keywords":{}}],["blunt"",{"_index":2351,"title":{},"content":{"210":{"position":[[2726,12]]}},"keywords":{}}],["board",{"_index":4985,"title":{},"content":{"899":{"position":[[150,5],[184,5]]},"1070":{"position":[[905,6]]}},"keywords":{}}],["boardspipelinesjobsprojectsproject",{"_index":4003,"title":{},"content":{"521":{"position":[[34,34]]}},"keywords":{}}],["bob",{"_index":1532,"title":{},"content":{"107":{"position":[[1063,3],[1122,3]]},"154":{"position":[[714,4]]},"590":{"position":[[382,4],[594,3]]}},"keywords":{}}],["bob'",{"_index":4246,"title":{},"content":{"590":{"position":[[1164,6]]}},"keywords":{}}],["bodi",{"_index":2885,"title":{},"content":{"281":{"position":[[1133,4]]},"296":{"position":[[5779,4]]},"315":{"position":[[1783,4]]}},"keywords":{}}],["bodies.learn",{"_index":971,"title":{},"content":{"64":{"position":[[863,12]]}},"keywords":{}}],["bool",{"_index":5765,"title":{},"content":{"1162":{"position":[[1084,4]]},"1209":{"position":[[328,4]]},"1292":{"position":[[1865,4]]},"1306":{"position":[[1865,4]]},"1329":{"position":[[1865,4]]}},"keywords":{}}],["boolean",{"_index":1679,"title":{},"content":{"122":{"position":[[1594,7]]},"308":{"position":[[542,9]]},"343":{"position":[[90,7]]},"377":{"position":[[335,7],[507,7],[614,7]]},"408":{"position":[[487,7]]},"417":{"position":[[539,7]]},"438":{"position":[[539,7]]},"496":{"position":[[391,7]]},"502":{"position":[[999,7]]},"517":{"position":[[2986,7],[3086,7]]},"545":{"position":[[539,7]]},"747":{"position":[[650,7]]},"757":{"position":[[1880,7]]},"770":{"position":[[1880,7]]},"797":{"position":[[1880,7]]},"812":{"position":[[1880,7]]},"828":{"position":[[1880,7]]},"842":{"position":[[3616,7],[3765,7]]},"846":{"position":[[291,10]]},"867":{"position":[[479,7]]},"885":{"position":[[334,7]]},"991":{"position":[[747,7]]},"1009":{"position":[[810,7]]},"1015":{"position":[[118,7]]},"1021":{"position":[[1510,7]]},"1125":{"position":[[724,7]]},"1138":{"position":[[1566,7]]},"1140":{"position":[[1967,7]]},"1151":{"position":[[1525,7]]},"1164":{"position":[[252,7],[260,7]]},"1172":{"position":[[353,7],[361,7]]},"1179":{"position":[[1316,7]]},"1188":{"position":[[936,7]]},"1196":{"position":[[1077,7]]},"1209":{"position":[[350,7]]},"1222":{"position":[[353,7],[361,7]]},"1230":{"position":[[141,8],[1060,7]]},"1247":{"position":[[312,8]]},"1253":{"position":[[595,7]]},"1260":{"position":[[1055,7]]},"1275":{"position":[[235,9]]},"1286":{"position":[[2771,7]]},"1292":{"position":[[1902,7]]},"1301":{"position":[[2607,7]]},"1306":{"position":[[1902,7]]},"1313":{"position":[[1110,7]]},"1316":{"position":[[1967,7]]},"1325":{"position":[[2771,7]]},"1329":{"position":[[1902,7]]},"1337":{"position":[[1110,7]]},"1340":{"position":[[1967,7]]},"1348":{"position":[[1110,7]]},"1351":{"position":[[1967,7]]},"1376":{"position":[[686,7]]},"1379":{"position":[[2035,7]]},"1386":{"position":[[1330,7]]},"1400":{"position":[[686,7]]},"1403":{"position":[[2035,7]]},"1411":{"position":[[686,7]]},"1414":{"position":[[2035,7]]},"1427":{"position":[[870,7]]},"1431":{"position":[[1990,7]]}},"keywords":{}}],["booleanintegerstr",{"_index":1064,"title":{},"content":{"72":{"position":[[69,20]]}},"keywords":{}}],["boolfield",{"_index":5948,"title":{},"content":{"1275":{"position":[[494,10]]}},"keywords":{}}],["bootstrap",{"_index":3672,"title":{},"content":{"432":{"position":[[79,9]]},"1118":{"position":[[369,9]]}},"keywords":{}}],["bootstrap.serv",{"_index":3652,"title":{},"content":{"428":{"position":[[23,17]]}},"keywords":{}}],["bootstrap_serv",{"_index":2647,"title":{},"content":{"250":{"position":[[262,20]]},"433":{"position":[[149,18],[560,18]]}},"keywords":{}}],["bootstrap_servers=conf['bootstrap_serv",{"_index":2660,"title":{},"content":{"250":{"position":[[586,44]]}},"keywords":{}}],["bot",{"_index":2762,"title":{},"content":{"253":{"position":[[3133,3],[3196,3]]},"254":{"position":[[859,4],[2916,4],[3577,4],[3941,3]]}},"keywords":{}}],["both",{"_index":792,"title":{"977":{"position":[[8,4]]}},"content":{"53":{"position":[[23,4]]},"64":{"position":[[47,4]]},"88":{"position":[[344,4]]},"99":{"position":[[247,4]]},"108":{"position":[[244,5]]},"125":{"position":[[1365,5]]},"129":{"position":[[249,4]]},"135":{"position":[[102,5]]},"154":{"position":[[338,4],[1883,4]]},"162":{"position":[[832,4],[1797,4]]},"164":{"position":[[1566,4]]},"166":{"position":[[617,4]]},"169":{"position":[[362,4]]},"180":{"position":[[888,4]]},"185":{"position":[[132,4]]},"198":{"position":[[596,4]]},"237":{"position":[[3191,4],[3523,4]]},"242":{"position":[[266,4]]},"295":{"position":[[607,4]]},"296":{"position":[[2064,4],[2084,4],[2230,4],[3358,4]]},"319":{"position":[[988,4]]},"320":{"position":[[580,4]]},"323":{"position":[[1701,4],[1727,4]]},"324":{"position":[[1206,4]]},"329":{"position":[[1017,4]]},"335":{"position":[[59,4]]},"373":{"position":[[409,4]]},"379":{"position":[[1073,4]]},"406":{"position":[[395,4]]},"413":{"position":[[378,4]]},"429":{"position":[[98,4],[314,4]]},"590":{"position":[[1013,4]]},"757":{"position":[[715,4]]},"770":{"position":[[715,4]]},"797":{"position":[[715,4]]},"812":{"position":[[715,4]]},"828":{"position":[[715,4]]},"977":{"position":[[32,4],[225,4],[751,4]]},"1008":{"position":[[31,4],[115,4],[297,4],[582,4]]},"1039":{"position":[[29,4]]},"1083":{"position":[[105,4]]},"1129":{"position":[[160,4]]},"1140":{"position":[[1998,4]]},"1158":{"position":[[25,4]]},"1182":{"position":[[25,4]]},"1191":{"position":[[25,4]]},"1199":{"position":[[25,4]]},"1209":{"position":[[372,4]]},"1256":{"position":[[25,4]]},"1262":{"position":[[25,4]]},"1268":{"position":[[612,4]]},"1285":{"position":[[727,4]]},"1290":{"position":[[25,4]]},"1292":{"position":[[1934,4]]},"1300":{"position":[[727,4]]},"1304":{"position":[[25,4]]},"1306":{"position":[[1934,4]]},"1315":{"position":[[25,4]]},"1316":{"position":[[1998,4]]},"1324":{"position":[[727,4]]},"1327":{"position":[[25,4]]},"1329":{"position":[[1934,4]]},"1339":{"position":[[25,4]]},"1340":{"position":[[1998,4]]},"1350":{"position":[[25,4]]},"1351":{"position":[[1998,4]]},"1378":{"position":[[25,4]]},"1379":{"position":[[2094,4]]},"1389":{"position":[[25,4]]},"1402":{"position":[[25,4]]},"1403":{"position":[[2094,4]]},"1413":{"position":[[25,4]]},"1414":{"position":[[2094,4]]},"1430":{"position":[[25,4]]},"1431":{"position":[[2021,4]]},"1435":{"position":[[167,4],[446,4]]},"1439":{"position":[[1403,4]]},"1448":{"position":[[845,4]]},"1459":{"position":[[1638,4]]},"1461":{"position":[[5139,4]]},"1467":{"position":[[138,4],[158,4],[177,4],[266,4],[302,4],[1730,4]]},"1475":{"position":[[1519,4]]},"1477":{"position":[[3072,4]]},"1479":{"position":[[529,4],[603,4],[650,4]]},"1480":{"position":[[16,4]]}},"keywords":{}}],["bother",{"_index":2895,"title":{},"content":{"281":{"position":[[2271,7]]}},"keywords":{}}],["bottleneck",{"_index":1262,"title":{},"content":{"84":{"position":[[438,10]]}},"keywords":{}}],["bottom",{"_index":3030,"title":{},"content":{"296":{"position":[[6991,6]]},"1479":{"position":[[129,6]]}},"keywords":{}}],["bounceemail",{"_index":4450,"title":{},"content":{"697":{"position":[[111,11]]}},"keywords":{}}],["bound",{"_index":685,"title":{},"content":{"36":{"position":[[282,5]]},"81":{"position":[[1740,5]]},"94":{"position":[[1551,5],[1901,5]]},"120":{"position":[[1103,5],[1453,5]]},"279":{"position":[[556,5]]},"343":{"position":[[371,6],[861,6]]},"922":{"position":[[1987,5]]},"1151":{"position":[[555,5]]},"1162":{"position":[[483,5]]},"1179":{"position":[[382,5]]},"1243":{"position":[[389,5],[623,7]]},"1260":{"position":[[269,5]]},"1386":{"position":[[353,5]]},"1480":{"position":[[809,5],[1159,5]]}},"keywords":{}}],["boundari",{"_index":2913,"title":{},"content":{"284":{"position":[[715,9]]},"1471":{"position":[[999,9]]}},"keywords":{}}],["box",{"_index":1850,"title":{},"content":{"154":{"position":[[1046,5]]},"190":{"position":[[428,4]]},"192":{"position":[[316,4]]},"217":{"position":[[1627,4]]},"218":{"position":[[1118,3]]},"1118":{"position":[[585,4]]},"1383":{"position":[[477,4]]}},"keywords":{}}],["braintre",{"_index":3324,"title":{"450":{"position":[[0,9]]}},"content":{"364":{"position":[[792,9]]},"451":{"position":[[56,9]]},"452":{"position":[[15,9]]},"453":{"position":[[250,9]]},"454":{"position":[[275,9],[337,9],[609,9]]}},"keywords":{}}],["braintree'",{"_index":3755,"title":{},"content":{"452":{"position":[[55,12]]}},"keywords":{}}],["braintree:dev",{"_index":3325,"title":{},"content":{"364":{"position":[[848,13]]},"455":{"position":[[90,13]]}},"keywords":{}}],["branch",{"_index":4021,"title":{},"content":{"527":{"position":[[359,8]]},"529":{"position":[[285,8]]},"534":{"position":[[248,6],[308,8],[362,8],[377,8],[430,6]]},"943":{"position":[[447,6]]}},"keywords":{}}],["branchescommitsissuesgroup",{"_index":4002,"title":{},"content":{"521":{"position":[[1,26]]}},"keywords":{}}],["brand",{"_index":3463,"title":{},"content":{"381":{"position":[[64,6],[90,6],[116,6],[141,6],[171,6]]},"1134":{"position":[[598,6]]}},"keywords":{}}],["braze",{"_index":3326,"title":{"462":{"position":[[0,5]]}},"content":{"364":{"position":[[862,5]]},"463":{"position":[[56,5]]},"464":{"position":[[38,5],[131,5],[235,5]]},"465":{"position":[[250,5]]},"466":{"position":[[69,5],[88,5],[204,5],[337,5]]}},"keywords":{}}],["braze:dev",{"_index":3327,"title":{},"content":{"364":{"position":[[914,9]]},"467":{"position":[[90,9]]}},"keywords":{}}],["breadth",{"_index":6322,"title":{},"content":{"1379":{"position":[[2137,7]]},"1403":{"position":[[2137,7]]},"1414":{"position":[[2137,7]]}},"keywords":{}}],["break",{"_index":351,"title":{"14":{"position":[[12,8]]}},"content":{"11":{"position":[[1925,5]]},"12":{"position":[[31,8],[350,8],[458,8]]},"14":{"position":[[98,8],[221,8]]},"55":{"position":[[626,8]]},"56":{"position":[[546,8]]},"239":{"position":[[1824,8],[2359,8],[2488,8]]},"307":{"position":[[3294,8]]},"309":{"position":[[3618,8]]},"332":{"position":[[81,5]]},"616":{"position":[[425,5]]},"867":{"position":[[1429,5]]},"1201":{"position":[[34,8]]},"1293":{"position":[[34,8]]},"1307":{"position":[[34,8]]},"1317":{"position":[[34,8],[340,8]]},"1330":{"position":[[34,8]]},"1341":{"position":[[34,8],[340,8]]},"1352":{"position":[[34,8],[340,8]]},"1359":{"position":[[34,8]]},"1379":{"position":[[2186,5]]},"1380":{"position":[[34,8]]},"1403":{"position":[[2186,5]]},"1404":{"position":[[34,8]]},"1414":{"position":[[2186,5]]},"1415":{"position":[[34,8]]},"1432":{"position":[[34,8],[340,8]]}},"keywords":{}}],["breakdown",{"_index":3133,"title":{},"content":{"320":{"position":[[2500,9]]},"323":{"position":[[2071,10]]},"517":{"position":[[436,10],[896,10],[978,10],[1200,11],[1212,10],[1240,10],[1287,12]]},"518":{"position":[[357,11]]}},"keywords":{}}],["breakdownflow",{"_index":3131,"title":{},"content":{"320":{"position":[[2454,13]]}},"keywords":{}}],["breakdowns.breakdown",{"_index":3940,"title":{},"content":{"517":{"position":[[274,21]]}},"keywords":{}}],["breakdownsar",{"_index":3942,"title":{},"content":{"517":{"position":[[410,13]]}},"keywords":{}}],["breviti",{"_index":1176,"title":{},"content":{"82":{"position":[[2421,8],[4538,8]]}},"keywords":{}}],["brew",{"_index":891,"title":{},"content":{"58":{"position":[[721,4],[746,4]]},"169":{"position":[[968,4],[993,4]]}},"keywords":{}}],["briefli",{"_index":2424,"title":{},"content":{"215":{"position":[[47,7]]}},"keywords":{}}],["brilliant",{"_index":2333,"title":{},"content":{"210":{"position":[[2388,9]]}},"keywords":{}}],["bring",{"_index":1269,"title":{},"content":{"84":{"position":[[787,6]]},"205":{"position":[[245,5]]},"320":{"position":[[1173,5]]},"324":{"position":[[740,6]]},"326":{"position":[[1328,5]]},"690":{"position":[[55,5]]},"1461":{"position":[[305,8]]}},"keywords":{}}],["brittl",{"_index":1329,"title":{},"content":{"92":{"position":[[829,7]]}},"keywords":{}}],["broad",{"_index":1462,"title":{},"content":{"102":{"position":[[217,5]]}},"keywords":{}}],["broaden",{"_index":3061,"title":{},"content":{"309":{"position":[[2598,9],[3346,10]]}},"keywords":{}}],["broader",{"_index":3118,"title":{},"content":{"320":{"position":[[312,7]]}},"keywords":{}}],["broken",{"_index":3038,"title":{},"content":{"306":{"position":[[15,6]]},"385":{"position":[[435,6]]},"1447":{"position":[[63,6]]}},"keywords":{}}],["broker",{"_index":2635,"title":{},"content":{"247":{"position":[[83,6]]},"320":{"position":[[392,6]]},"325":{"position":[[113,8]]},"374":{"position":[[188,6]]}},"keywords":{}}],["broker.address.family=v4",{"_index":2678,"title":{},"content":{"250":{"position":[[1265,24]]}},"keywords":{}}],["brought",{"_index":3164,"title":{},"content":{"324":{"position":[[194,7]]}},"keywords":{}}],["brows",{"_index":2428,"title":{},"content":{"217":{"position":[[580,6]]},"263":{"position":[[846,6]]},"274":{"position":[[1624,6]]},"1379":{"position":[[2224,6]]},"1403":{"position":[[2224,6]]},"1414":{"position":[[2224,6]]}},"keywords":{}}],["browser",{"_index":1984,"title":{},"content":{"169":{"position":[[1510,7]]},"184":{"position":[[623,8]]},"217":{"position":[[620,8],[1227,7],[1754,8]]},"218":{"position":[[650,7]]},"259":{"position":[[547,7],[1076,8],[2241,7],[2657,8]]},"290":{"position":[[1361,7]]},"291":{"position":[[888,7],[1042,8],[1541,8]]},"302":{"position":[[888,7],[1461,8]]},"340":{"position":[[370,7]]},"615":{"position":[[64,8]]},"617":{"position":[[64,8]]},"635":{"position":[[415,8]]},"989":{"position":[[1001,8]]},"1004":{"position":[[1084,8]]}},"keywords":{}}],["bruce.wayn",{"_index":3685,"title":{},"content":{"433":{"position":[[280,11]]}},"keywords":{}}],["btree",{"_index":6029,"title":{},"content":{"1292":{"position":[[1972,5]]},"1306":{"position":[[1972,5]]},"1329":{"position":[[1972,5]]}},"keywords":{}}],["btv1b10405460g",{"_index":2710,"title":{},"content":{"253":{"position":[[1511,14],[2455,14],[2529,14]]},"313":{"position":[[1511,14],[2455,14],[2529,14]]}},"keywords":{}}],["bucket",{"_index":62,"title":{"170":{"position":[[31,6]]},"171":{"position":[[21,8]]},"172":{"position":[[10,8]]},"174":{"position":[[8,7]]},"414":{"position":[[14,8]]}},"content":{"1":{"position":[[928,7]]},"3":{"position":[[158,7]]},"21":{"position":[[765,7]]},"34":{"position":[[313,7],[514,6],[558,6]]},"46":{"position":[[36,7],[158,7]]},"67":{"position":[[513,7]]},"77":{"position":[[156,7],[233,7],[329,8]]},"154":{"position":[[1380,6],[1675,6]]},"168":{"position":[[190,6],[246,6],[361,6]]},"170":{"position":[[64,6],[119,7]]},"171":{"position":[[54,7],[72,6],[162,6]]},"172":{"position":[[53,7],[71,6],[146,6],[214,6],[250,7]]},"174":{"position":[[9,6],[276,6],[320,6],[404,6],[520,6]]},"189":{"position":[[266,6]]},"190":{"position":[[896,6],[973,7],[1010,6],[1106,6],[1735,7],[2066,6]]},"192":{"position":[[1406,7]]},"193":{"position":[[92,6]]},"299":{"position":[[203,6],[277,8],[344,7]]},"300":{"position":[[160,6]]},"301":{"position":[[53,7],[760,8],[784,7],[864,6],[1031,7],[1731,6]]},"303":{"position":[[100,6]]},"320":{"position":[[1203,8]]},"326":{"position":[[1351,7]]},"413":{"position":[[62,6],[94,7],[107,6],[400,8]]},"414":{"position":[[14,8],[27,6],[88,6],[127,6],[795,7],[936,6]]},"415":{"position":[[5,7],[195,6]]},"417":{"position":[[290,6],[822,6],[1013,6],[1078,7],[1086,6],[1108,6],[1914,6],[2048,6],[2295,7],[2316,6]]},"418":{"position":[[104,7],[577,7]]},"419":{"position":[[316,7],[682,6]]},"438":{"position":[[290,6]]},"440":{"position":[[332,7],[698,6]]},"502":{"position":[[750,6]]},"543":{"position":[[40,6],[129,8],[165,6],[198,7]]},"545":{"position":[[290,6],[553,7],[561,6],[601,6],[1516,6],[1690,7],[1711,6]]},"546":{"position":[[105,7],[116,6],[1285,7]]},"547":{"position":[[317,7],[683,6]]},"548":{"position":[[817,7]]},"1023":{"position":[[297,7],[663,6]]},"1142":{"position":[[44,6],[199,7]]},"1143":{"position":[[123,7]]},"1144":{"position":[[68,6],[75,6],[201,7],[309,7],[362,6]]},"1145":{"position":[[129,7],[137,6]]},"1146":{"position":[[408,6]]},"1149":{"position":[[402,6],[463,6],[647,7]]},"1151":{"position":[[817,7],[948,7],[972,7],[991,6],[1013,6],[1107,7],[1235,6]]},"1152":{"position":[[326,7],[337,6]]},"1154":{"position":[[232,6]]},"1160":{"position":[[44,6],[325,6]]},"1162":{"position":[[262,7],[270,6],[284,6]]},"1163":{"position":[[223,7],[231,6]]},"1168":{"position":[[44,6],[199,7]]},"1169":{"position":[[123,7]]},"1170":{"position":[[68,6],[75,6],[201,7],[309,7],[362,6]]},"1171":{"position":[[133,7],[141,6]]},"1173":{"position":[[420,6]]},"1176":{"position":[[65,6],[393,6]]},"1179":{"position":[[127,6],[539,7],[547,6],[570,7],[607,6],[644,7]]},"1180":{"position":[[142,7],[158,6],[178,6]]},"1203":{"position":[[368,6],[432,6],[509,6]]},"1204":{"position":[[16,8]]},"1206":{"position":[[122,7],[175,6],[270,7],[583,6],[601,6],[742,7]]},"1207":{"position":[[195,8],[213,6],[251,6]]},"1211":{"position":[[44,6],[207,6]]},"1212":{"position":[[123,7]]},"1213":{"position":[[68,6],[75,6]]},"1214":{"position":[[130,7],[138,6]]},"1215":{"position":[[408,6]]},"1218":{"position":[[44,6],[207,6]]},"1219":{"position":[[123,7]]},"1220":{"position":[[68,6],[75,6]]},"1221":{"position":[[134,7],[142,6]]},"1223":{"position":[[420,6]]},"1258":{"position":[[83,6],[241,7]]},"1260":{"position":[[426,7],[445,6],[467,6],[616,7],[747,7],[783,6]]},"1261":{"position":[[202,7]]},"1292":{"position":[[2001,7]]},"1306":{"position":[[2001,7]]},"1329":{"position":[[2001,7]]},"1420":{"position":[[512,7],[520,6],[560,6]]},"1421":{"position":[[253,7],[261,6]]}},"keywords":{}}],["bucket"",{"_index":2015,"title":{},"content":{"172":{"position":[[940,12],[1195,12]]},"418":{"position":[[121,12]]}},"keywords":{}}],["bucket.a",{"_index":5881,"title":{},"content":{"1211":{"position":[[126,8]]},"1218":{"position":[[126,8]]}},"keywords":{}}],["bucket.an",{"_index":5714,"title":{},"content":{"1142":{"position":[[125,9]]},"1149":{"position":[[580,9]]},"1160":{"position":[[125,9]]},"1168":{"position":[[125,9]]},"1258":{"position":[[174,9]]}},"keywords":{}}],["bucket/${prefix",{"_index":3610,"title":{},"content":{"418":{"position":[[409,16]]},"546":{"position":[[1116,16]]}},"keywords":{}}],["bucket/*"",{"_index":2013,"title":{},"content":{"172":{"position":[[688,14]]}},"keywords":{}}],["bucket/acmeco/orders/category=anvils/pivot=00",{"_index":131,"title":{},"content":{"3":{"position":[[706,46]]}},"keywords":{}}],["bucket/acmeco/orders/category=anvils/pivot=00/utc_date=2022",{"_index":122,"title":{},"content":{"3":{"position":[[442,59]]}},"keywords":{}}],["bucket/and",{"_index":850,"title":{},"content":{"56":{"position":[[1936,10]]}},"keywords":{}}],["bucket/anoth",{"_index":853,"title":{},"content":{"56":{"position":[[2107,14]]}},"keywords":{}}],["bucket/prefix/path/v0000000000/00000000000000000000.csv",{"_index":5732,"title":{},"content":{"1146":{"position":[[218,55]]},"1215":{"position":[[218,55]]}},"keywords":{}}],["bucket/prefix/path/v0000000000/00000000000000000000.parquet",{"_index":5783,"title":{},"content":{"1173":{"position":[[218,59]]},"1223":{"position":[[218,59]]}},"keywords":{}}],["bucket/prefix/path/v0000000000/00000000000000000001.csv",{"_index":5733,"title":{},"content":{"1146":{"position":[[274,55]]},"1215":{"position":[[274,55]]}},"keywords":{}}],["bucket/prefix/path/v0000000000/00000000000000000001.parquet",{"_index":5784,"title":{},"content":{"1173":{"position":[[278,59]]},"1223":{"position":[[278,59]]}},"keywords":{}}],["bucket/prefix/path/v0000000000/00000000000000000002.csv",{"_index":5734,"title":{},"content":{"1146":{"position":[[330,55]]},"1215":{"position":[[330,55]]}},"keywords":{}}],["bucket/prefix/path/v0000000000/00000000000000000002.parquet",{"_index":5785,"title":{},"content":{"1173":{"position":[[338,59]]},"1223":{"position":[[338,59]]}},"keywords":{}}],["bucket_path",{"_index":5792,"title":{},"content":{"1179":{"position":[[594,12]]},"1180":{"position":[[165,12]]},"1421":{"position":[[280,11]]}},"keywords":{}}],["bucketanonym",{"_index":3580,"title":{},"content":{"414":{"position":[[199,15]]}},"keywords":{}}],["bucketiam",{"_index":3585,"title":{},"content":{"415":{"position":[[459,9]]}},"keywords":{}}],["bucketpath",{"_index":5744,"title":{},"content":{"1151":{"position":[[1223,11]]},"1260":{"position":[[771,11]]},"1420":{"position":[[548,11]]},"1421":{"position":[[268,11]]}},"keywords":{}}],["budget",{"_index":4355,"title":{},"content":{"628":{"position":[[427,6]]}},"keywords":{}}],["buffer",{"_index":38,"title":{},"content":{"1":{"position":[[458,7]]}},"keywords":{}}],["bug",{"_index":1468,"title":{},"content":{"102":{"position":[[591,4]]},"281":{"position":[[2507,4]]},"332":{"position":[[684,4]]}},"keywords":{}}],["build",{"_index":788,"title":{},"content":{"50":{"position":[[294,5]]},"52":{"position":[[67,6]]},"64":{"position":[[77,5],[194,5],[351,5]]},"69":{"position":[[872,6]]},"87":{"position":[[676,5]]},"88":{"position":[[96,5],[559,5]]},"94":{"position":[[1065,5]]},"98":{"position":[[1214,5]]},"104":{"position":[[304,8]]},"128":{"position":[[124,5]]},"158":{"position":[[167,5]]},"164":{"position":[[985,8]]},"189":{"position":[[711,5]]},"198":{"position":[[1110,5]]},"232":{"position":[[172,8]]},"319":{"position":[[478,5]]},"329":{"position":[[20,6],[433,5]]},"331":{"position":[[20,5]]},"556":{"position":[[1128,8]]},"1461":{"position":[[5529,5]]},"1464":{"position":[[320,5]]},"1466":{"position":[[301,5]]},"1467":{"position":[[644,5]]},"1477":{"position":[[1631,5],[3970,5]]}},"keywords":{}}],["builder",{"_index":4119,"title":{},"content":{"556":{"position":[[1213,7]]},"558":{"position":[[202,7]]}},"keywords":{}}],["buildrich",{"_index":1954,"title":{},"content":{"164":{"position":[[2240,9]]}},"keywords":{}}],["built",{"_index":1365,"title":{},"content":{"95":{"position":[[61,5]]},"113":{"position":[[177,5]]},"202":{"position":[[260,5]]},"319":{"position":[[1133,5]]},"320":{"position":[[346,5]]},"323":{"position":[[45,5]]},"1465":{"position":[[259,5]]}},"keywords":{}}],["bulk",{"_index":1470,"title":{},"content":{"103":{"position":[[5,4]]},"1292":{"position":[[2046,4]]},"1306":{"position":[[2046,4]]},"1329":{"position":[[2046,4]]},"1379":{"position":[[2277,4]]},"1403":{"position":[[2277,4]]},"1414":{"position":[[2277,4]]},"1451":{"position":[[505,4]]}},"keywords":{}}],["bunch",{"_index":3062,"title":{},"content":{"313":{"position":[[3078,5]]},"315":{"position":[[228,5]]}},"keywords":{}}],["bundl",{"_index":3117,"title":{},"content":{"320":{"position":[[264,8]]},"849":{"position":[[2566,7]]}},"keywords":{}}],["busi",{"_index":1696,"title":{},"content":{"124":{"position":[[463,5]]},"164":{"position":[[1037,9]]},"175":{"position":[[41,8]]},"183":{"position":[[1492,8]]},"189":{"position":[[654,8]]},"331":{"position":[[682,8]]},"512":{"position":[[184,8]]},"514":{"position":[[59,8]]},"515":{"position":[[70,8],[476,9]]},"517":{"position":[[78,8]]},"668":{"position":[[38,8]]},"1081":{"position":[[86,8]]},"1082":{"position":[[159,8]]},"1083":{"position":[[43,8],[159,8]]}},"keywords":{}}],["busier",{"_index":1700,"title":{},"content":{"124":{"position":[[750,6]]}},"keywords":{}}],["business_manag",{"_index":3939,"title":{},"content":{"515":{"position":[[708,21]]}},"keywords":{}}],["bussi",{"_index":4534,"title":{},"content":{"728":{"position":[[138,10]]}},"keywords":{}}],["button",{"_index":361,"title":{},"content":{"12":{"position":[[160,6]]},"138":{"position":[[105,6],[239,8],[443,7],[471,7]]},"141":{"position":[[549,8]]},"142":{"position":[[129,6],[352,8]]},"183":{"position":[[166,7]]},"191":{"position":[[2170,6]]},"204":{"position":[[470,7],[661,6]]},"205":{"position":[[127,7],[233,6]]},"206":{"position":[[843,6]]},"209":{"position":[[87,7]]},"218":{"position":[[1232,7]]},"228":{"position":[[191,6],[948,7]]},"240":{"position":[[2164,6],[2868,7],[3931,7]]},"259":{"position":[[97,6],[724,7],[1778,6]]},"267":{"position":[[183,7]]},"296":{"position":[[7525,6]]},"479":{"position":[[427,6],[923,7]]},"488":{"position":[[587,6]]},"515":{"position":[[525,6]]},"659":{"position":[[744,6]]},"676":{"position":[[587,6]]},"691":{"position":[[587,6]]},"840":{"position":[[1779,7]]},"849":{"position":[[2820,7]]}},"keywords":{}}],["buy",{"_index":2114,"title":{},"content":{"189":{"position":[[441,3]]}},"keywords":{}}],["buz",{"_index":1845,"title":{},"content":{"154":{"position":[[897,5],[1024,5]]}},"keywords":{}}],["bxo2fe1srqbbf4cbnopjd9dnxwz0miqejwhuwrqo0inxeexnaxhykqccnjnuay1j",{"_index":1252,"title":{},"content":{"83":{"position":[[2157,64]]},"371":{"position":[[1076,64]]},"1139":{"position":[[963,64]]}},"keywords":{}}],["bypass",{"_index":4620,"title":{},"content":{"757":{"position":[[1737,8]]},"770":{"position":[[1737,8]]},"797":{"position":[[1737,8]]},"812":{"position":[[1737,8]]},"828":{"position":[[1737,8]]},"963":{"position":[[132,8]]}},"keywords":{}}],["byte",{"_index":1799,"title":{},"content":{"138":{"position":[[1984,5]]},"141":{"position":[[1916,5]]},"142":{"position":[[2037,5]]},"146":{"position":[[116,5]]},"149":{"position":[[119,5]]},"152":{"position":[[129,5]]},"1144":{"position":[[638,6],[1013,4]]},"1170":{"position":[[638,6],[1046,4],[1087,5]]},"1213":{"position":[[493,6],[690,4]]},"1220":{"position":[[493,6],[723,4],[764,5]]},"1292":{"position":[[2122,4]]},"1306":{"position":[[2122,4]]},"1329":{"position":[[2122,4]]},"1470":{"position":[[693,5],[963,5],[1095,5],[1235,5]]},"1475":{"position":[[1335,5]]}},"keywords":{}}],["byte_array",{"_index":5779,"title":{},"content":{"1172":{"position":[[308,11],[341,11],[435,10],[487,11],[945,11]]},"1222":{"position":[[308,11],[341,11],[435,10],[487,11],[945,11]]}},"keywords":{}}],["bytestot",{"_index":6663,"title":{},"content":{"1470":{"position":[[740,10]]}},"keywords":{}}],["c",{"_index":94,"title":{},"content":{"2":{"position":[[668,2]]},"61":{"position":[[1284,1]]},"62":{"position":[[788,2],[847,2]]},"105":{"position":[[1515,1]]},"183":{"position":[[4431,2]]},"210":{"position":[[1174,3]]},"223":{"position":[[771,1]]},"236":{"position":[[940,1]]},"250":{"position":[[1258,1]]},"255":{"position":[[792,2]]},"316":{"position":[[1117,2]]},"1020":{"position":[[1118,2]]},"1298":{"position":[[771,1]]},"1346":{"position":[[771,1]]}},"keywords":{}}],["c"",{"_index":2511,"title":{},"content":{"236":{"position":[[847,7]]}},"keywords":{}}],["c05a95ljhsl"",{"_index":6286,"title":{},"content":{"1363":{"position":[[304,17]]}},"keywords":{}}],["c[activ",{"_index":932,"title":{},"content":{"61":{"position":[[1188,8]]}},"keywords":{}}],["c[sourc",{"_index":1502,"title":{},"content":{"105":{"position":[[1405,9]]}},"keywords":{}}],["c^c",{"_index":2693,"title":{},"content":{"253":{"position":[[1060,4]]},"313":{"position":[[1060,4]]}},"keywords":{}}],["ca",{"_index":498,"title":{},"content":{"17":{"position":[[634,3]]},"1268":{"position":[[468,3],[525,2],[706,2]]},"1285":{"position":[[996,2]]},"1286":{"position":[[1976,3],[2170,2],[2364,2]]},"1300":{"position":[[996,2]]},"1301":{"position":[[1812,3],[2006,2],[2200,2]]},"1324":{"position":[[996,2]]},"1325":{"position":[[1976,3],[2170,2],[2364,2]]}},"keywords":{}}],["cach",{"_index":5273,"title":{},"content":{"1068":{"position":[[98,7]]},"1292":{"position":[[2164,5]]},"1306":{"position":[[2164,5]]},"1329":{"position":[[2164,5]]}},"keywords":{}}],["calcul",{"_index":2764,"title":{},"content":{"253":{"position":[[3159,9]]},"254":{"position":[[3636,9]]}},"keywords":{}}],["call",{"_index":1643,"title":{},"content":{"117":{"position":[[424,6]]},"125":{"position":[[917,6]]},"138":{"position":[[991,6]]},"141":{"position":[[201,6]]},"142":{"position":[[978,6]]},"154":{"position":[[432,6]]},"183":{"position":[[1028,6],[2944,6]]},"197":{"position":[[143,6]]},"206":{"position":[[182,6]]},"218":{"position":[[1791,6]]},"236":{"position":[[297,6],[1827,6],[1882,6]]},"254":{"position":[[947,6],[1096,6]]},"259":{"position":[[1259,6],[2840,6]]},"263":{"position":[[1022,6]]},"267":{"position":[[1452,6]]},"268":{"position":[[357,6],[654,6]]},"269":{"position":[[292,6]]},"270":{"position":[[1081,6]]},"274":{"position":[[1867,6]]},"289":{"position":[[558,6]]},"291":{"position":[[1724,6]]},"295":{"position":[[635,6]]},"296":{"position":[[3027,6]]},"300":{"position":[[505,6]]},"302":{"position":[[1633,6]]},"306":{"position":[[709,6]]},"314":{"position":[[625,6],[817,6]]},"319":{"position":[[503,7]]},"320":{"position":[[1015,6],[1570,6],[2130,5]]},"321":{"position":[[1730,5]]},"323":{"position":[[543,6]]},"330":{"position":[[372,5]]},"337":{"position":[[47,6],[114,6]]},"354":{"position":[[29,4]]},"590":{"position":[[328,6],[421,6]]},"767":{"position":[[2312,4]]},"792":{"position":[[2293,4]]},"824":{"position":[[2424,4]]},"900":{"position":[[132,5],[208,5],[260,5]]},"1007":{"position":[[98,6]]},"1068":{"position":[[30,4]]},"1140":{"position":[[2054,4],[2096,6]]},"1179":{"position":[[657,6]]},"1292":{"position":[[2194,4]]},"1306":{"position":[[2194,4]]},"1316":{"position":[[2054,4],[2096,6]]},"1329":{"position":[[2194,4]]},"1340":{"position":[[2054,4],[2096,6]]},"1351":{"position":[[2054,4],[2096,6]]},"1379":{"position":[[2359,4],[2405,6]]},"1403":{"position":[[2359,4],[2405,6]]},"1414":{"position":[[2359,4],[2405,6]]},"1429":{"position":[[648,6]]},"1431":{"position":[[2077,4],[2119,6]]},"1448":{"position":[[550,6],[754,6]]},"1461":{"position":[[3200,6]]}},"keywords":{}}],["caller",{"_index":5401,"title":{},"content":{"1110":{"position":[[421,6]]}},"keywords":{}}],["callscompanycontactsnumberstagsuser_availablityusersteamswebhook",{"_index":3268,"title":{},"content":{"353":{"position":[[56,65]]}},"keywords":{}}],["callsengag",{"_index":4386,"title":{},"content":{"649":{"position":[[315,16]]}},"keywords":{}}],["came",{"_index":1001,"title":{},"content":{"67":{"position":[[477,4]]},"150":{"position":[[239,4]]},"219":{"position":[[469,4]]},"229":{"position":[[32,4]]}},"keywords":{}}],["campaign",{"_index":3966,"title":{},"content":{"517":{"position":[[3059,10]]},"518":{"position":[[1375,9]]},"557":{"position":[[536,8],[625,8]]},"717":{"position":[[46,10]]},"721":{"position":[[336,9]]},"735":{"position":[[461,10]]},"736":{"position":[[280,9]]},"738":{"position":[[523,10]]},"900":{"position":[[174,11]]},"1080":{"position":[[111,9],[371,9],[400,9],[428,9],[710,9],[759,9]]},"1082":{"position":[[200,10]]},"1086":{"position":[[390,9]]}},"keywords":{}}],["campaign.id",{"_index":4128,"title":{},"content":{"557":{"position":[[487,12],[554,11]]}},"keywords":{}}],["campaign.nam",{"_index":4129,"title":{},"content":{"557":{"position":[[500,14]]}},"keywords":{}}],["campaign.statu",{"_index":4130,"title":{},"content":{"557":{"position":[[515,15]]}},"keywords":{}}],["campaignad",{"_index":4513,"title":{},"content":{"715":{"position":[[153,10]]}},"keywords":{}}],["campaigns_custom",{"_index":4131,"title":{},"content":{"557":{"position":[[578,16]]}},"keywords":{}}],["campaignscampaign",{"_index":4448,"title":{},"content":{"697":{"position":[[72,17]]}},"keywords":{}}],["campaignscampaigns_analyticscanvasescanvases_analyticseventsevents_analyticskpi_daily_new_userskpi_daily_active_userskpi_daily_app_uninstallscardscards_analyticssegmentssegments_analyt",{"_index":3778,"title":{},"content":{"463":{"position":[[69,187]]}},"keywords":{}}],["campaignscompaniescontact",{"_index":4381,"title":{},"content":{"649":{"position":[[197,25]]}},"keywords":{}}],["campaignseventsglobalexclusionslistsmetricsflowsprofil",{"_index":4462,"title":{},"content":{"703":{"position":[[72,56]]}},"keywords":{}}],["campaignslistscontactsstat",{"_index":5134,"title":{},"content":{"979":{"position":[[72,27]]}},"keywords":{}}],["campaignssponsor",{"_index":3465,"title":{},"content":{"381":{"position":[[97,18],[245,18],[409,18]]}},"keywords":{}}],["can't",{"_index":1958,"title":{},"content":{"165":{"position":[[776,5]]},"207":{"position":[[1479,5]]},"821":{"position":[[1470,5]]},"909":{"position":[[145,5]]},"925":{"position":[[145,5]]},"936":{"position":[[145,5]]},"952":{"position":[[145,5]]},"970":{"position":[[145,5]]},"1470":{"position":[[234,5]]}},"keywords":{}}],["cancel",{"_index":2692,"title":{},"content":{"253":{"position":[[1029,6]]},"313":{"position":[[1029,6]]}},"keywords":{}}],["canon",{"_index":1314,"title":{},"content":{"90":{"position":[[439,9],[510,9]]}},"keywords":{}}],["capabilitiesfrom",{"_index":4840,"title":{},"content":{"857":{"position":[[140,16]]}},"keywords":{}}],["capability=admin",{"_index":3223,"title":{},"content":{"341":{"position":[[248,16]]}},"keywords":{}}],["capability=read",{"_index":3226,"title":{},"content":{"341":{"position":[[394,15]]}},"keywords":{}}],["capabl",{"_index":1843,"title":{"337":{"position":[[33,13]]},"341":{"position":[[13,13]]}},"content":{"154":{"position":[[684,13],[1112,12]]},"211":{"position":[[628,12]]},"323":{"position":[[1633,13]]},"324":{"position":[[178,11]]},"325":{"position":[[407,12]]},"326":{"position":[[339,7]]},"329":{"position":[[334,12]]},"337":{"position":[[33,10],[253,13]]},"338":{"position":[[568,12]]},"339":{"position":[[157,12],[217,12]]},"341":{"position":[[32,12],[186,12]]},"975":{"position":[[252,13]]},"976":{"position":[[261,12]]},"977":{"position":[[16,12]]},"1007":{"position":[[12,7]]},"1435":{"position":[[407,7]]},"1436":{"position":[[119,12]]},"1437":{"position":[[819,12]]}},"keywords":{}}],["capac",{"_index":783,"title":{},"content":{"49":{"position":[[525,8]]},"397":{"position":[[970,8],[1112,8]]}},"keywords":{}}],["capit",{"_index":6257,"title":{},"content":{"1317":{"position":[[543,14]]},"1341":{"position":[[543,14]]},"1352":{"position":[[543,14]]},"1432":{"position":[[543,14]]}},"keywords":{}}],["captur",{"_index":222,"title":{"35":{"position":[[0,9]]},"51":{"position":[[0,8]]},"55":{"position":[[21,9]]},"126":{"position":[[35,7]]},"138":{"position":[[0,8]]},"139":{"position":[[8,8]]},"140":{"position":[[11,8]]},"145":{"position":[[0,7]]},"190":{"position":[[0,7]]},"206":{"position":[[8,7]]},"209":{"position":[[15,8]]},"217":{"position":[[9,8]]},"227":{"position":[[0,7]]},"228":{"position":[[0,8]]},"239":{"position":[[17,8]]},"259":{"position":[[7,8]]},"290":{"position":[[0,7]]},"301":{"position":[[0,7]]},"361":{"position":[[0,7]]},"362":{"position":[[10,7]]},"602":{"position":[[22,8]]},"759":{"position":[[16,7]]},"772":{"position":[[16,7]]},"799":{"position":[[16,7]]},"814":{"position":[[16,7]]},"830":{"position":[[16,7]]},"1020":{"position":[[5,9]]}},"content":{"6":{"position":[[591,7]]},"8":{"position":[[515,9],[730,7]]},"11":{"position":[[384,8],[464,7],[700,7],[959,7],[1458,8],[1645,8],[1953,8]]},"12":{"position":[[337,8]]},"13":{"position":[[1309,8]]},"14":{"position":[[185,9],[334,7]]},"21":{"position":[[80,7]]},"23":{"position":[[137,7]]},"25":{"position":[[202,8]]},"27":{"position":[[22,10]]},"32":{"position":[[185,8],[267,8],[372,7]]},"33":{"position":[[73,9]]},"34":{"position":[[49,8]]},"35":{"position":[[3,7],[284,8],[359,8]]},"36":{"position":[[230,9]]},"37":{"position":[[50,8]]},"38":{"position":[[102,8]]},"44":{"position":[[1,9],[343,7]]},"45":{"position":[[367,7],[461,7]]},"52":{"position":[[1,8],[175,7]]},"53":{"position":[[308,7]]},"54":{"position":[[32,9],[253,7],[525,8],[591,8]]},"55":{"position":[[103,8],[186,7],[406,7],[831,8]]},"56":{"position":[[1,8],[88,8],[149,9],[177,8],[977,8],[1128,7],[1403,7],[1528,7],[1763,7],[2275,7],[2514,7]]},"66":{"position":[[166,10]]},"67":{"position":[[194,7],[337,8],[787,8],[1093,8],[1786,7],[1886,8],[2008,7]]},"68":{"position":[[250,8]]},"71":{"position":[[291,8]]},"79":{"position":[[105,7]]},"80":{"position":[[220,7]]},"81":{"position":[[600,8],[2859,8]]},"83":{"position":[[743,7],[908,9],[934,7]]},"92":{"position":[[113,8]]},"95":{"position":[[9,8]]},"117":{"position":[[114,9]]},"120":{"position":[[2709,8],[2751,8],[2880,7]]},"126":{"position":[[388,8],[426,8],[556,7],[626,7]]},"129":{"position":[[270,8]]},"132":{"position":[[145,8]]},"135":{"position":[[273,9],[387,8],[930,8]]},"137":{"position":[[142,11],[287,7]]},"138":{"position":[[5,8],[54,8],[97,7],[163,9],[628,9],[668,7],[710,8],[743,7],[909,7],[983,7],[1186,8],[1280,7],[1364,7],[1424,7],[1501,7],[1703,7],[1810,8],[1823,7],[1886,8],[1905,7],[2017,7],[2353,7],[2378,8],[2701,7]]},"139":{"position":[[41,8],[75,7],[125,7],[175,7],[228,8]]},"140":{"position":[[23,8],[59,7],[106,7],[194,7],[224,7],[328,8],[386,8],[459,9]]},"141":{"position":[[140,8],[375,8],[2001,7]]},"142":{"position":[[248,8]]},"144":{"position":[[140,8],[158,8],[261,8],[701,8],[737,8]]},"145":{"position":[[33,7],[48,8],[87,7]]},"146":{"position":[[27,8],[40,7],[154,8],[397,8],[512,7],[813,7],[987,8]]},"147":{"position":[[58,7]]},"149":{"position":[[786,7]]},"150":{"position":[[223,7]]},"152":{"position":[[789,7]]},"154":{"position":[[1888,7]]},"157":{"position":[[6,9]]},"162":{"position":[[206,9],[394,7],[647,9],[1006,7],[1172,7],[1899,9]]},"165":{"position":[[51,8],[120,9],[280,8],[397,9],[558,9],[656,9],[878,7],[2059,8],[2166,9]]},"166":{"position":[[568,8]]},"180":{"position":[[508,8],[599,8]]},"181":{"position":[[53,8]]},"189":{"position":[[749,7],[1053,8],[1119,7],[1376,7],[1443,7],[1748,7],[1838,8]]},"190":{"position":[[99,7],[128,7],[241,8],[304,8],[397,8],[1922,8],[2082,8]]},"193":{"position":[[270,7]]},"196":{"position":[[21,8],[60,7],[129,7],[447,7],[625,8]]},"197":{"position":[[400,9]]},"199":{"position":[[156,7]]},"202":{"position":[[86,7],[370,7]]},"205":{"position":[[32,7],[118,8],[205,10]]},"206":{"position":[[25,7],[60,7]]},"207":{"position":[[453,9],[768,7]]},"208":{"position":[[46,8],[1574,8]]},"209":{"position":[[133,8],[394,8],[626,7],[782,7],[1053,7],[1201,9],[1571,8]]},"211":{"position":[[52,7],[165,9],[398,7],[572,7],[880,7]]},"212":{"position":[[93,9]]},"216":{"position":[[155,8],[348,7]]},"217":{"position":[[23,7],[348,8],[651,8],[665,7],[822,7],[1326,8],[1455,8],[2214,7]]},"218":{"position":[[17,8],[401,8],[705,8],[1369,8]]},"219":{"position":[[245,8],[352,7]]},"221":{"position":[[1640,7]]},"225":{"position":[[511,7]]},"228":{"position":[[36,8],[86,8],[135,7],[1278,7]]},"232":{"position":[[235,7]]},"233":{"position":[[21,8],[60,7],[129,7],[454,7],[657,7],[810,8]]},"237":{"position":[[131,7],[486,7],[824,9],[1166,7],[2403,8]]},"239":{"position":[[171,8],[182,7],[270,8],[388,7],[894,9],[1334,8]]},"240":{"position":[[3769,7],[3922,8],[3969,7]]},"245":{"position":[[57,8]]},"259":{"position":[[51,7],[162,7],[593,8],[1484,7],[1551,8],[2443,8]]},"263":{"position":[[640,7]]},"264":{"position":[[787,8]]},"266":{"position":[[183,7]]},"274":{"position":[[44,8],[196,8],[1015,9],[1144,8]]},"284":{"position":[[252,8]]},"285":{"position":[[311,7]]},"286":{"position":[[136,9]]},"289":{"position":[[312,8],[503,7]]},"290":{"position":[[23,7],[325,8],[375,8],[445,8],[476,8],[490,7],[630,7],[1624,9],[1694,7],[1782,9],[1825,8]]},"291":{"position":[[61,8],[325,8],[944,8]]},"295":{"position":[[1101,8]]},"300":{"position":[[291,8],[450,7]]},"301":{"position":[[23,7],[278,8],[321,8],[385,8],[416,8],[430,7],[570,7],[927,7],[1109,9],[1150,7],[1668,7],[1747,9],[1790,8]]},"302":{"position":[[61,8],[325,8],[943,8]]},"305":{"position":[[139,8]]},"307":{"position":[[406,8],[896,8],[1015,9],[1803,7],[1865,9],[2735,8],[3064,8],[3142,8],[3374,8]]},"309":{"position":[[3698,8]]},"320":{"position":[[2031,9]]},"321":{"position":[[1627,7]]},"322":{"position":[[1381,7]]},"323":{"position":[[600,8],[1311,8],[1346,9]]},"325":{"position":[[598,7]]},"326":{"position":[[1437,7],[1570,7]]},"329":{"position":[[72,8]]},"343":{"position":[[727,8]]},"345":{"position":[[114,7]]},"351":{"position":[[432,9]]},"359":{"position":[[410,9]]},"360":{"position":[[2,9]]},"363":{"position":[[127,7]]},"364":{"position":[[106,9]]},"366":{"position":[[330,8]]},"367":{"position":[[259,7]]},"368":{"position":[[20,7],[88,8],[164,9],[296,8]]},"370":{"position":[[414,7]]},"371":{"position":[[11,7],[61,9],[1421,7],[1551,7]]},"373":{"position":[[422,7],[792,7]]},"374":{"position":[[231,7],[306,7],[352,10],[375,8],[409,8]]},"377":{"position":[[1502,7]]},"378":{"position":[[1,9]]},"379":{"position":[[1,9],[53,7],[106,7],[185,9],[246,7],[418,8]]},"383":{"position":[[97,7]]},"385":{"position":[[100,7],[169,7],[660,7]]},"387":{"position":[[1433,9]]},"388":{"position":[[71,9]]},"390":{"position":[[86,8]]},"392":{"position":[[464,9]]},"393":{"position":[[11,7],[61,9],[404,7],[520,7]]},"397":{"position":[[112,9],[224,9],[621,9],[909,9],[989,7]]},"398":{"position":[[11,7],[61,9],[403,7],[511,7]]},"402":{"position":[[240,7],[726,8]]},"403":{"position":[[1,9]]},"408":{"position":[[642,9]]},"413":{"position":[[31,7]]},"417":{"position":[[635,9],[1338,7],[1924,7],[1973,8]]},"418":{"position":[[1,9],[470,7],[603,7]]},"419":{"position":[[386,9],[1101,8],[1332,7],[2076,8]]},"424":{"position":[[465,9]]},"425":{"position":[[2,9]]},"433":{"position":[[43,9],[454,9],[830,7],[943,7]]},"438":{"position":[[1854,7]]},"439":{"position":[[1,9]]},"440":{"position":[[402,9],[1117,8],[1348,7]]},"441":{"position":[[685,8]]},"448":{"position":[[1318,9]]},"449":{"position":[[71,9]]},"454":{"position":[[654,9]]},"455":{"position":[[2,9]]},"460":{"position":[[671,9]]},"461":{"position":[[2,9]]},"466":{"position":[[378,9]]},"467":{"position":[[2,9]]},"469":{"position":[[134,9]]},"472":{"position":[[594,7]]},"473":{"position":[[71,9]]},"478":{"position":[[231,8],[661,8]]},"479":{"position":[[247,7],[317,7],[575,7]]},"480":{"position":[[1096,7]]},"482":{"position":[[685,7]]},"483":{"position":[[560,8],[648,7]]},"485":{"position":[[43,7],[387,8]]},"486":{"position":[[22,8],[121,8],[412,8]]},"488":{"position":[[536,7],[917,8]]},"496":{"position":[[613,8]]},"497":{"position":[[1,9],[309,7],[429,7]]},"499":{"position":[[30,8]]},"502":{"position":[[364,7]]},"503":{"position":[[1,9]]},"504":{"position":[[330,9],[1705,8]]},"509":{"position":[[644,9]]},"510":{"position":[[1,9]]},"513":{"position":[[55,9]]},"517":{"position":[[39,8],[128,7],[251,7],[1750,7],[2651,7],[3810,9],[4079,9]]},"518":{"position":[[71,9],[1691,7]]},"520":{"position":[[93,7],[162,9]]},"522":{"position":[[53,9]]},"527":{"position":[[71,9]]},"529":{"position":[[112,7],[181,9]]},"530":{"position":[[53,9]]},"534":{"position":[[903,8],[1794,9]]},"535":{"position":[[71,9]]},"541":{"position":[[2,9]]},"545":{"position":[[962,7],[1526,7],[1575,8]]},"546":{"position":[[1,9],[1177,7],[1311,7]]},"547":{"position":[[387,9],[1103,8],[1334,7],[2078,8]]},"548":{"position":[[312,7]]},"551":{"position":[[53,9]]},"556":{"position":[[2296,9]]},"557":{"position":[[71,9]]},"566":{"position":[[1,9]]},"568":{"position":[[34,8]]},"569":{"position":[[53,9]]},"575":{"position":[[57,9],[1287,7]]},"577":{"position":[[593,7]]},"580":{"position":[[263,7]]},"586":{"position":[[57,9]]},"593":{"position":[[206,7],[583,7]]},"594":{"position":[[1,9],[904,7]]},"595":{"position":[[9,8],[197,7],[279,7],[327,7],[351,8],[1283,7]]},"599":{"position":[[231,8],[661,8]]},"602":{"position":[[381,8]]},"603":{"position":[[117,7]]},"607":{"position":[[53,9]]},"611":{"position":[[1297,9]]},"612":{"position":[[71,9]]},"614":{"position":[[53,9]]},"620":{"position":[[1,9],[357,7]]},"625":{"position":[[277,9]]},"626":{"position":[[2,9]]},"631":{"position":[[605,9]]},"632":{"position":[[2,9]]},"634":{"position":[[30,8]]},"638":{"position":[[1,9]]},"639":{"position":[[328,9],[1703,8]]},"640":{"position":[[362,8]]},"643":{"position":[[54,9]]},"647":{"position":[[1,9]]},"650":{"position":[[54,9]]},"655":{"position":[[1,9],[422,7]]},"657":{"position":[[43,7],[387,8],[624,7]]},"658":{"position":[[22,8],[121,8],[412,8]]},"659":{"position":[[693,7],[1074,8]]},"661":{"position":[[429,7]]},"670":{"position":[[765,9]]},"671":{"position":[[2,9]]},"673":{"position":[[43,7],[387,8]]},"674":{"position":[[22,8],[121,8],[412,8]]},"676":{"position":[[536,7],[917,8]]},"685":{"position":[[577,9]]},"686":{"position":[[62,9]]},"688":{"position":[[43,7],[387,8]]},"689":{"position":[[22,8],[121,8],[412,8]]},"690":{"position":[[203,7]]},"691":{"position":[[536,7],[917,8]]},"700":{"position":[[416,9]]},"701":{"position":[[2,9]]},"706":{"position":[[415,9]]},"707":{"position":[[2,9]]},"712":{"position":[[607,9]]},"713":{"position":[[2,9]]},"716":{"position":[[55,9]]},"717":{"position":[[127,7]]},"718":{"position":[[349,7],[386,7]]},"719":{"position":[[81,7]]},"720":{"position":[[332,7],[373,7],[906,9]]},"721":{"position":[[71,9]]},"724":{"position":[[418,7],[455,7]]},"731":{"position":[[56,9]]},"736":{"position":[[1,9],[462,7]]},"741":{"position":[[592,9]]},"742":{"position":[[2,9]]},"747":{"position":[[1475,9]]},"748":{"position":[[2,9]]},"750":{"position":[[1046,8],[1179,7],[1283,7]]},"752":{"position":[[545,9]]},"753":{"position":[[1201,9]]},"754":{"position":[[216,7],[993,7],[1091,7],[1133,7]]},"755":{"position":[[20,7],[88,8],[164,9],[296,8]]},"757":{"position":[[380,9],[594,9],[1065,7],[1186,8],[2066,8]]},"758":{"position":[[11,7],[61,9],[405,7],[535,7]]},"760":{"position":[[9,7],[206,9],[368,7],[424,7]]},"761":{"position":[[9,7],[407,7],[537,7]]},"762":{"position":[[9,7],[445,7],[524,7]]},"763":{"position":[[9,7],[355,7],[401,7],[489,8]]},"764":{"position":[[9,7],[191,7],[373,7],[496,7],[596,7],[676,8]]},"766":{"position":[[1046,8],[1179,7]]},"767":{"position":[[1762,7]]},"768":{"position":[[20,7],[88,8],[164,9],[296,8]]},"770":{"position":[[380,9],[594,9],[1065,7],[1186,8],[2066,8]]},"771":{"position":[[11,7],[61,9],[405,7],[535,7]]},"773":{"position":[[9,7],[206,9],[368,7],[424,7]]},"774":{"position":[[9,7],[407,7],[537,7]]},"775":{"position":[[9,7],[445,7],[524,7]]},"776":{"position":[[9,7],[355,7],[401,7],[489,8]]},"777":{"position":[[9,7],[191,7],[373,7],[496,7],[596,7],[676,8]]},"783":{"position":[[1,9]]},"785":{"position":[[104,7],[295,7],[407,9],[854,7]]},"786":{"position":[[1,8],[251,8],[310,9]]},"789":{"position":[[772,7],[1447,8],[1580,7],[1684,7]]},"791":{"position":[[498,9],[681,9]]},"792":{"position":[[1702,7],[2001,9]]},"793":{"position":[[1172,9],[1355,9]]},"794":{"position":[[89,7],[1197,7],[1295,7],[1337,7]]},"795":{"position":[[18,7],[86,8],[162,9],[294,8]]},"797":{"position":[[380,9],[594,9],[1065,7],[1186,8],[2073,8]]},"798":{"position":[[11,7],[61,9],[403,7],[533,7]]},"800":{"position":[[9,7],[206,9],[368,7],[424,7]]},"801":{"position":[[9,7],[413,7],[543,7]]},"802":{"position":[[9,7],[445,7],[524,7]]},"803":{"position":[[9,7],[361,7],[407,7],[495,8]]},"804":{"position":[[9,7],[189,7],[371,7],[494,7],[594,7],[674,8]]},"805":{"position":[[98,8]]},"807":{"position":[[1034,8],[1167,7]]},"808":{"position":[[1118,9],[1301,9]]},"809":{"position":[[89,7],[1197,7],[1295,7],[1337,7]]},"810":{"position":[[18,7],[86,8],[162,9],[294,8]]},"812":{"position":[[380,9],[594,9],[1065,7],[1186,8],[2073,8]]},"813":{"position":[[11,7],[61,9],[403,7],[533,7]]},"815":{"position":[[9,7],[206,9],[368,7],[424,7]]},"816":{"position":[[9,7],[413,7],[543,7]]},"817":{"position":[[9,7],[445,7],[524,7]]},"818":{"position":[[9,7],[361,7],[407,7],[495,8]]},"819":{"position":[[9,7],[189,7],[371,7],[494,7],[594,7],[674,8]]},"820":{"position":[[98,8]]},"821":{"position":[[43,8],[277,8],[460,7],[564,7]]},"823":{"position":[[1034,8],[1167,7]]},"824":{"position":[[1824,7],[2123,9]]},"825":{"position":[[89,7],[1033,7],[1131,7],[1173,7]]},"826":{"position":[[18,7],[86,8],[162,9],[294,8]]},"828":{"position":[[380,9],[594,9],[1065,7],[1186,8],[2073,8]]},"829":{"position":[[11,7],[61,9],[403,7],[533,7]]},"831":{"position":[[9,7],[206,9],[368,7],[424,7]]},"832":{"position":[[9,7],[413,7],[543,7]]},"833":{"position":[[9,7],[445,7],[524,7]]},"834":{"position":[[9,7],[361,7],[407,7],[495,8]]},"835":{"position":[[9,7],[189,7],[371,7],[494,7],[594,7],[674,8]]},"836":{"position":[[98,8]]},"839":{"position":[[171,8]]},"842":{"position":[[2157,7]]},"843":{"position":[[2,9]]},"848":{"position":[[171,7]]},"851":{"position":[[696,9]]},"852":{"position":[[2,9]]},"859":{"position":[[825,9]]},"860":{"position":[[71,9]]},"867":{"position":[[343,7],[417,7],[1218,8],[1439,7],[1894,8]]},"868":{"position":[[1,9]]},"869":{"position":[[623,9]]},"870":{"position":[[195,8],[256,8]]},"880":{"position":[[1,9]]},"885":{"position":[[727,9]]},"886":{"position":[[2,9]]},"891":{"position":[[441,9]]},"892":{"position":[[1,9]]},"897":{"position":[[371,9]]},"903":{"position":[[356,8]]},"904":{"position":[[1363,7],[2106,8],[2241,8]]},"905":{"position":[[23,7],[91,8],[167,9],[299,8]]},"907":{"position":[[197,7]]},"908":{"position":[[11,7],[61,9],[449,7],[579,7]]},"909":{"position":[[837,8],[1141,8]]},"911":{"position":[[52,7],[97,9],[454,8]]},"912":{"position":[[48,8],[288,8],[471,7],[580,7],[1314,7]]},"915":{"position":[[356,8],[1140,7]]},"917":{"position":[[816,8],[966,8],[1081,9],[1615,8],[1750,8]]},"918":{"position":[[1655,7],[2398,8],[2533,8]]},"919":{"position":[[837,7],[1341,8],[1491,8],[1606,9]]},"920":{"position":[[23,7],[91,8],[167,9],[299,8]]},"922":{"position":[[244,7],[1183,7],[1685,8],[2616,7],[2706,7]]},"923":{"position":[[197,7]]},"924":{"position":[[11,7],[61,9],[449,7],[579,7]]},"925":{"position":[[837,8],[1141,8]]},"927":{"position":[[52,7],[97,9],[454,8]]},"930":{"position":[[356,8]]},"931":{"position":[[1020,7],[1768,8],[1903,8]]},"932":{"position":[[23,7],[91,8],[167,9],[299,8]]},"934":{"position":[[197,7]]},"935":{"position":[[11,7],[61,9],[449,7],[579,7]]},"936":{"position":[[837,8],[1141,8]]},"938":{"position":[[52,7],[97,9],[454,8]]},"945":{"position":[[395,8]]},"947":{"position":[[87,8],[721,7]]},"948":{"position":[[23,7],[91,8],[167,9],[299,8]]},"950":{"position":[[197,7]]},"951":{"position":[[11,7],[61,9],[449,7],[579,7]]},"952":{"position":[[837,8],[1141,8]]},"954":{"position":[[52,7],[97,9],[454,8]]},"959":{"position":[[472,9]]},"960":{"position":[[2,9]]},"963":{"position":[[510,8],[1294,7]]},"964":{"position":[[263,7]]},"965":{"position":[[816,8],[966,8],[1081,9],[1615,8],[1750,8]]},"966":{"position":[[23,7],[91,8],[167,9],[299,8]]},"968":{"position":[[197,7]]},"969":{"position":[[11,7],[61,9],[449,7],[579,7]]},"970":{"position":[[837,8],[1141,8]]},"972":{"position":[[52,7],[97,9],[454,8]]},"975":{"position":[[46,7]]},"976":{"position":[[49,7]]},"977":{"position":[[79,9],[127,7],[198,7],[230,8]]},"982":{"position":[[474,9]]},"983":{"position":[[2,9]]},"985":{"position":[[20,7],[427,7],[592,8],[608,7],[699,8]]},"989":{"position":[[136,8],[362,7],[613,7]]},"991":{"position":[[881,9]]},"992":{"position":[[1,9]]},"997":{"position":[[440,9]]},"998":{"position":[[2,9]]},"1000":{"position":[[20,7],[386,7],[605,7],[770,8],[871,8],[922,7],[1013,8]]},"1004":{"position":[[136,8],[445,7],[696,7]]},"1006":{"position":[[20,7],[368,7]]},"1007":{"position":[[23,9]]},"1008":{"position":[[56,8],[145,7],[194,7],[218,7],[250,7],[278,7],[302,8],[496,7],[587,8],[800,8],[1416,7]]},"1009":{"position":[[926,9],[977,9],[1079,8],[1737,9]]},"1010":{"position":[[71,9]]},"1015":{"position":[[527,9]]},"1016":{"position":[[2,9]]},"1019":{"position":[[54,7],[104,7],[201,8],[276,9]]},"1020":{"position":[[56,7],[160,9],[238,8],[296,8],[447,9],[565,9],[840,8],[907,8],[1224,9],[1258,8],[1430,9],[1506,9],[1569,9],[1664,9],[1758,8],[1950,9]]},"1021":{"position":[[727,7],[1003,9],[1055,7],[2095,8]]},"1022":{"position":[[1,9]]},"1023":{"position":[[367,9],[1084,8],[1315,7],[2059,8]]},"1028":{"position":[[477,9]]},"1029":{"position":[[2,9]]},"1031":{"position":[[125,7]]},"1032":{"position":[[323,7],[464,7],[533,7],[599,7]]},"1034":{"position":[[330,7]]},"1035":{"position":[[87,7]]},"1036":{"position":[[211,7],[430,7],[618,7],[831,8]]},"1037":{"position":[[1,9]]},"1040":{"position":[[4,7],[103,9],[386,9]]},"1042":{"position":[[400,8],[520,8],[969,8]]},"1043":{"position":[[1064,8],[1184,8],[1633,8]]},"1045":{"position":[[204,7]]},"1046":{"position":[[1,9],[383,7],[513,7]]},"1047":{"position":[[222,7],[322,7],[1006,7]]},"1050":{"position":[[4,7],[103,9],[386,9]]},"1051":{"position":[[1326,8],[1446,8],[1895,8]]},"1053":{"position":[[204,7]]},"1054":{"position":[[1,9],[383,7],[513,7]]},"1055":{"position":[[222,7],[322,7],[1006,7]]},"1058":{"position":[[4,7],[103,9],[386,9]]},"1059":{"position":[[1119,8],[1239,8],[1688,8]]},"1061":{"position":[[204,7]]},"1062":{"position":[[1,9],[383,7],[513,7]]},"1063":{"position":[[222,7],[322,7],[1006,7]]},"1070":{"position":[[1088,9]]},"1071":{"position":[[71,9]]},"1076":{"position":[[870,9]]},"1077":{"position":[[32,7],[397,7],[597,7],[658,7],[831,7]]},"1078":{"position":[[1,9]]},"1085":{"position":[[1456,9]]},"1086":{"position":[[83,9]]},"1094":{"position":[[542,9]]},"1101":{"position":[[382,9]]},"1102":{"position":[[2,9]]},"1107":{"position":[[497,9]]},"1108":{"position":[[1,9]]},"1113":{"position":[[571,9]]},"1114":{"position":[[2,9]]},"1129":{"position":[[72,9]]},"1133":{"position":[[1293,9]]},"1134":{"position":[[1,9]]},"1176":{"position":[[499,8]]},"1185":{"position":[[299,8]]},"1194":{"position":[[509,8]]},"1203":{"position":[[670,8]]},"1226":{"position":[[310,8]]},"1243":{"position":[[87,8]]},"1253":{"position":[[237,7]]},"1354":{"position":[[334,8]]},"1382":{"position":[[553,8]]},"1446":{"position":[[35,8],[137,8],[252,9]]},"1447":{"position":[[27,7],[242,7],[373,7]]},"1448":{"position":[[107,7],[322,7],[514,7],[615,7],[836,8]]},"1449":{"position":[[41,7]]},"1455":{"position":[[39,7]]},"1459":{"position":[[885,7],[967,7]]},"1470":{"position":[[120,7],[525,7],[650,8],[953,9],[1191,7]]},"1473":{"position":[[201,9]]},"1475":{"position":[[639,8],[648,7],[694,7],[931,8]]}},"keywords":{}}],["capture"",{"_index":3791,"title":{},"content":{"472":{"position":[[526,13]]}},"keywords":{}}],["capture".loc",{"_index":3821,"title":{},"content":{"479":{"position":[[134,20]]}},"keywords":{}}],["capture'",{"_index":4084,"title":{},"content":{"548":{"position":[[622,9]]},"752":{"position":[[145,9]]},"763":{"position":[[107,9]]},"776":{"position":[[107,9]]},"791":{"position":[[98,9]]},"803":{"position":[[107,9]]},"818":{"position":[[107,9]]},"834":{"position":[[107,9]]},"1031":{"position":[[360,9]]},"1470":{"position":[[1045,9]]}},"keywords":{}}],["capture(",{"_index":1771,"title":{},"content":{"138":{"position":[[415,11],[568,10]]}},"keywords":{}}],["capture.pend",{"_index":1781,"title":{},"content":{"138":{"position":[[1250,15]]}},"keywords":{}}],["capture.se",{"_index":5237,"title":{},"content":{"1040":{"position":[[299,11]]},"1050":{"position":[[299,11]]},"1058":{"position":[[299,11]]}},"keywords":{}}],["capture/on",{"_index":582,"title":{},"content":{"23":{"position":[[309,11],[340,11]]}},"keywords":{}}],["capture/two",{"_index":580,"title":{},"content":{"23":{"position":[[278,11]]}},"keywords":{}}],["capture_nam",{"_index":5205,"title":{},"content":{"1022":{"position":[[11,16]]}},"keywords":{}}],["captured.access",{"_index":5239,"title":{},"content":{"1040":{"position":[[769,15]]},"1050":{"position":[[769,15]]},"1058":{"position":[[769,15]]}},"keywords":{}}],["captured.permiss",{"_index":4587,"title":{},"content":{"750":{"position":[[932,19]]},"766":{"position":[[932,19]]},"789":{"position":[[1333,19]]},"807":{"position":[[920,19]]},"823":{"position":[[920,19]]}},"keywords":{}}],["capturescollectionsmateri",{"_index":2791,"title":{},"content":{"264":{"position":[[262,35]]}},"keywords":{}}],["capturescollectionsmaterializationsderivationstest",{"_index":2821,"title":{},"content":{"275":{"position":[[282,51]]}},"keywords":{}}],["card",{"_index":4027,"title":{},"content":{"529":{"position":[[542,5]]},"940":{"position":[[48,4]]},"1455":{"position":[[167,5]]}},"keywords":{}}],["cardin",{"_index":1703,"title":{},"content":{"124":{"position":[[1060,11]]},"842":{"position":[[2372,12]]},"1140":{"position":[[2126,11]]},"1316":{"position":[[2126,11]]},"1340":{"position":[[2126,11]]},"1351":{"position":[[2126,11]]},"1379":{"position":[[2451,11]]},"1403":{"position":[[2451,11]]},"1414":{"position":[[2451,11]]},"1431":{"position":[[2149,11]]}},"keywords":{}}],["care",{"_index":3126,"title":{},"content":{"320":{"position":[[1454,4]]},"1438":{"position":[[388,4]]},"1442":{"position":[[1263,4]]},"1452":{"position":[[2733,4]]}},"keywords":{}}],["carefulli",{"_index":4112,"title":{},"content":{"554":{"position":[[397,9]]},"910":{"position":[[365,9]]},"926":{"position":[[365,9]]},"937":{"position":[[365,9]]},"953":{"position":[[365,9]]},"971":{"position":[[365,9]]}},"keywords":{}}],["carol",{"_index":1844,"title":{},"content":{"154":{"position":[[723,5]]}},"keywords":{}}],["carri",{"_index":3143,"title":{},"content":{"321":{"position":[[1892,5]]},"1444":{"position":[[269,7]]}},"keywords":{}}],["cart",{"_index":1575,"title":{},"content":{"110":{"position":[[689,5]]}},"keywords":{}}],["cascad",{"_index":5612,"title":{},"content":{"1140":{"position":[[2171,7],[2206,8]]},"1292":{"position":[[2223,7],[2267,8]]},"1306":{"position":[[2223,7],[2267,8]]},"1316":{"position":[[2171,7],[2206,8]]},"1329":{"position":[[2223,7],[2267,8]]},"1340":{"position":[[2171,7],[2206,8]]},"1351":{"position":[[2171,7],[2206,8]]},"1370":{"position":[[566,7]]},"1379":{"position":[[2507,7],[2563,8]]},"1403":{"position":[[2507,7],[2563,8]]},"1414":{"position":[[2507,7],[2563,8]]},"1431":{"position":[[2194,7],[2229,8]]}},"keywords":{}}],["case",{"_index":404,"title":{},"content":{"13":{"position":[[1074,6],[1607,5],[1819,5]]},"14":{"position":[[986,4],[1151,5]]},"20":{"position":[[651,5]]},"47":{"position":[[162,6]]},"50":{"position":[[146,5]]},"68":{"position":[[9,6]]},"75":{"position":[[223,5]]},"83":{"position":[[9,6]]},"89":{"position":[[443,6]]},"90":{"position":[[462,5]]},"91":{"position":[[9,6],[183,6]]},"98":{"position":[[9,6],[881,4]]},"101":{"position":[[78,5],[326,5]]},"107":{"position":[[3732,5]]},"115":{"position":[[1429,5]]},"124":{"position":[[131,4],[186,4]]},"126":{"position":[[9,6]]},"162":{"position":[[9,6]]},"168":{"position":[[310,6]]},"177":{"position":[[352,5]]},"179":{"position":[[319,5]]},"189":{"position":[[1106,5],[1307,5],[1533,5]]},"190":{"position":[[1381,5],[1692,5]]},"206":{"position":[[556,5]]},"209":{"position":[[1741,6]]},"221":{"position":[[918,5]]},"225":{"position":[[362,5]]},"230":{"position":[[588,6]]},"237":{"position":[[2034,5]]},"238":{"position":[[199,4]]},"239":{"position":[[1246,6]]},"254":{"position":[[3281,4]]},"281":{"position":[[377,6]]},"286":{"position":[[85,6]]},"289":{"position":[[126,5]]},"291":{"position":[[704,5]]},"296":{"position":[[2369,5]]},"300":{"position":[[126,5]]},"301":{"position":[[1304,7]]},"302":{"position":[[704,5]]},"309":{"position":[[1636,6],[1911,6],[3441,5]]},"314":{"position":[[2856,4]]},"322":{"position":[[599,5]]},"323":{"position":[[1561,5]]},"368":{"position":[[236,6],[423,5]]},"370":{"position":[[1774,5]]},"385":{"position":[[602,5]]},"413":{"position":[[240,5]]},"419":{"position":[[455,6],[1482,6]]},"440":{"position":[[471,6]]},"441":{"position":[[91,6]]},"480":{"position":[[163,5]]},"490":{"position":[[107,5]]},"496":{"position":[[115,4]]},"504":{"position":[[399,6],[1111,6]]},"517":{"position":[[3430,6],[3729,6]]},"547":{"position":[[456,6],[1484,6]]},"603":{"position":[[220,4]]},"616":{"position":[[278,4]]},"635":{"position":[[492,5]]},"639":{"position":[[397,6],[1109,6]]},"663":{"position":[[107,5]]},"678":{"position":[[107,5]]},"693":{"position":[[107,5]]},"755":{"position":[[236,6],[423,5]]},"760":{"position":[[224,4],[525,4]]},"761":{"position":[[477,4]]},"768":{"position":[[236,6],[423,5]]},"773":{"position":[[224,4],[525,4]]},"774":{"position":[[477,4]]},"785":{"position":[[741,5]]},"795":{"position":[[234,6],[421,5]]},"800":{"position":[[224,4],[525,4]]},"801":{"position":[[483,4]]},"810":{"position":[[234,6],[421,5]]},"815":{"position":[[224,4],[525,4]]},"816":{"position":[[483,4]]},"826":{"position":[[234,6],[421,5]]},"831":{"position":[[224,4],[525,4]]},"832":{"position":[[483,4]]},"865":{"position":[[130,4]]},"870":{"position":[[789,5]]},"877":{"position":[[130,4],[175,5]]},"905":{"position":[[239,6],[426,5]]},"909":{"position":[[917,5]]},"911":{"position":[[115,5]]},"912":{"position":[[1126,4]]},"920":{"position":[[239,6],[426,5]]},"922":{"position":[[3249,4]]},"925":{"position":[[917,5]]},"927":{"position":[[115,5]]},"932":{"position":[[239,6],[426,5]]},"936":{"position":[[917,5]]},"938":{"position":[[115,5]]},"948":{"position":[[239,6],[426,5]]},"952":{"position":[[917,5]]},"954":{"position":[[115,5]]},"966":{"position":[[239,6],[426,5]]},"970":{"position":[[917,5]]},"972":{"position":[[115,5]]},"1023":{"position":[[436,6],[1465,6]]},"1036":{"position":[[801,5]]},"1047":{"position":[[179,5]]},"1055":{"position":[[179,5]]},"1063":{"position":[[179,5]]},"1138":{"position":[[1065,5]]},"1140":{"position":[[2247,4]]},"1155":{"position":[[381,4],[487,4]]},"1156":{"position":[[754,4]]},"1166":{"position":[[9,6]]},"1203":{"position":[[256,5]]},"1208":{"position":[[236,6]]},"1209":{"position":[[392,4]]},"1289":{"position":[[1377,7]]},"1292":{"position":[[2316,4]]},"1298":{"position":[[1209,7]]},"1303":{"position":[[1088,7]]},"1306":{"position":[[2316,4]]},"1310":{"position":[[698,7]]},"1316":{"position":[[2247,4]]},"1322":{"position":[[1596,7]]},"1329":{"position":[[2316,4]]},"1335":{"position":[[1244,7]]},"1340":{"position":[[2247,4]]},"1346":{"position":[[1210,7]]},"1351":{"position":[[2247,4]]},"1358":{"position":[[140,6]]},"1370":{"position":[[579,4]]},"1379":{"position":[[2607,4]]},"1394":{"position":[[618,4]]},"1403":{"position":[[2607,4]]},"1414":{"position":[[2607,4]]},"1431":{"position":[[2270,4]]},"1440":{"position":[[1430,5],[1501,5]]},"1442":{"position":[[510,5]]},"1448":{"position":[[46,6]]},"1451":{"position":[[307,4]]},"1461":{"position":[[824,4]]},"1464":{"position":[[825,4]]},"1467":{"position":[[2872,4]]},"1477":{"position":[[832,4]]}},"keywords":{}}],["cast",{"_index":5619,"title":{},"content":{"1140":{"position":[[2287,4]]},"1209":{"position":[[406,4]]},"1316":{"position":[[2287,4]]},"1340":{"position":[[2287,4]]},"1351":{"position":[[2287,4]]},"1370":{"position":[[590,4]]},"1379":{"position":[[2657,4]]},"1394":{"position":[[640,4]]},"1403":{"position":[[2657,4]]},"1414":{"position":[[2657,4]]},"1431":{"position":[[2310,4]]}},"keywords":{}}],["cat",{"_index":6375,"title":{},"content":{"1384":{"position":[[474,3]]}},"keywords":{}}],["catalog",{"_index":227,"title":{"22":{"position":[[0,7]]},"33":{"position":[[0,8]]},"1460":{"position":[[18,7]]}},"content":{"7":{"position":[[36,7],[679,7]]},"17":{"position":[[38,7]]},"23":{"position":[[23,7]]},"24":{"position":[[1,7],[222,8]]},"25":{"position":[[242,7]]},"26":{"position":[[164,8]]},"27":{"position":[[5,7],[395,7]]},"32":{"position":[[593,8]]},"33":{"position":[[5,7],[158,7],[353,8],[385,7],[459,7]]},"41":{"position":[[538,7]]},"44":{"position":[[77,7],[325,7]]},"49":{"position":[[45,7],[300,7],[383,7]]},"56":{"position":[[115,8]]},"60":{"position":[[381,7],[448,7],[644,8],[991,8],[1230,7],[1266,8]]},"61":{"position":[[504,8],[639,7],[1142,7],[1197,9],[1222,7],[1259,7],[1299,7]]},"62":{"position":[[79,7],[221,7]]},"63":{"position":[[121,7],[594,7],[1013,7]]},"64":{"position":[[39,7]]},"69":{"position":[[121,8]]},"75":{"position":[[483,8]]},"82":{"position":[[3209,8]]},"88":{"position":[[88,7],[173,7],[219,7]]},"89":{"position":[[312,7]]},"90":{"position":[[9,7]]},"91":{"position":[[36,7]]},"92":{"position":[[8,7],[784,7]]},"107":{"position":[[219,7]]},"120":{"position":[[131,8]]},"128":{"position":[[116,7]]},"138":{"position":[[645,7]]},"141":{"position":[[779,7]]},"142":{"position":[[592,7]]},"154":{"position":[[353,7]]},"158":{"position":[[198,7]]},"161":{"position":[[1124,7]]},"183":{"position":[[389,7],[4467,7]]},"229":{"position":[[153,7]]},"255":{"position":[[1121,7]]},"263":{"position":[[1125,7]]},"264":{"position":[[712,7]]},"267":{"position":[[764,7]]},"268":{"position":[[1905,7]]},"269":{"position":[[1367,7]]},"270":{"position":[[534,7],[756,7],[1983,7]]},"274":{"position":[[138,8],[681,8],[857,7],[1104,7],[1288,7],[1370,7],[1500,7],[1754,7]]},"275":{"position":[[386,7],[687,7],[926,7]]},"296":{"position":[[6809,7]]},"316":{"position":[[1446,7]]},"340":{"position":[[62,8]]},"350":{"position":[[81,7]]},"358":{"position":[[81,7]]},"369":{"position":[[81,7]]},"376":{"position":[[81,7]]},"386":{"position":[[81,7]]},"391":{"position":[[81,7]]},"396":{"position":[[81,7]]},"407":{"position":[[81,7]]},"416":{"position":[[81,7]]},"423":{"position":[[81,7]]},"431":{"position":[[81,7]]},"437":{"position":[[81,7]]},"447":{"position":[[81,7]]},"453":{"position":[[81,7]]},"458":{"position":[[93,7]]},"459":{"position":[[81,7]]},"460":{"position":[[357,7],[373,7]]},"465":{"position":[[81,7]]},"472":{"position":[[81,7]]},"481":{"position":[[81,7]]},"495":{"position":[[81,7]]},"508":{"position":[[81,7]]},"516":{"position":[[81,7]]},"525":{"position":[[81,7]]},"533":{"position":[[81,7]]},"539":{"position":[[81,7]]},"544":{"position":[[81,7]]},"572":{"position":[[81,7]]},"600":{"position":[[81,7]]},"610":{"position":[[81,7]]},"618":{"position":[[81,7]]},"624":{"position":[[81,7]]},"630":{"position":[[81,7]]},"636":{"position":[[81,7]]},"646":{"position":[[81,7]]},"653":{"position":[[81,7]]},"669":{"position":[[81,7]]},"684":{"position":[[81,7]]},"699":{"position":[[81,7]]},"705":{"position":[[81,7]]},"711":{"position":[[81,7]]},"727":{"position":[[81,7]]},"734":{"position":[[81,7]]},"740":{"position":[[81,7]]},"746":{"position":[[81,7]]},"756":{"position":[[81,7]]},"769":{"position":[[81,7]]},"796":{"position":[[81,7]]},"805":{"position":[[345,7]]},"811":{"position":[[81,7]]},"820":{"position":[[345,7]]},"827":{"position":[[81,7]]},"836":{"position":[[345,7]]},"841":{"position":[[81,7]]},"850":{"position":[[81,7]]},"858":{"position":[[81,7]]},"866":{"position":[[81,7]]},"878":{"position":[[81,7]]},"884":{"position":[[81,7]]},"890":{"position":[[81,7]]},"896":{"position":[[81,7]]},"906":{"position":[[81,7]]},"909":{"position":[[656,7]]},"921":{"position":[[81,7]]},"925":{"position":[[656,7]]},"933":{"position":[[81,7]]},"936":{"position":[[656,7]]},"947":{"position":[[113,8]]},"949":{"position":[[81,7]]},"952":{"position":[[656,7]]},"958":{"position":[[81,7]]},"967":{"position":[[81,7]]},"970":{"position":[[656,7]]},"981":{"position":[[81,7]]},"990":{"position":[[81,7]]},"996":{"position":[[81,7]]},"1008":{"position":[[1128,7],[1912,7]]},"1014":{"position":[[81,7]]},"1021":{"position":[[81,7]]},"1027":{"position":[[81,7]]},"1033":{"position":[[85,7]]},"1044":{"position":[[81,7]]},"1052":{"position":[[81,7]]},"1060":{"position":[[81,7]]},"1069":{"position":[[81,7]]},"1075":{"position":[[81,7]]},"1084":{"position":[[81,7]]},"1093":{"position":[[81,7]]},"1100":{"position":[[81,7]]},"1106":{"position":[[81,7]]},"1112":{"position":[[81,7]]},"1124":{"position":[[81,7]]},"1132":{"position":[[81,7]]},"1140":{"position":[[2331,7]]},"1165":{"position":[[258,8]]},"1188":{"position":[[306,7],[338,7]]},"1316":{"position":[[2331,7]]},"1340":{"position":[[2331,7]]},"1351":{"position":[[2331,7]]},"1379":{"position":[[2700,7]]},"1403":{"position":[[2700,7]]},"1414":{"position":[[2700,7]]},"1417":{"position":[[429,7]]},"1420":{"position":[[105,8],[114,7],[134,7],[142,7]]},"1421":{"position":[[124,8]]},"1431":{"position":[[2354,7]]},"1461":{"position":[[94,8],[124,7],[271,7],[338,7],[412,8],[477,8],[530,7],[581,8],[890,7],[1733,8],[1800,7],[1855,8],[1907,7],[2447,7],[2714,7],[3127,7],[4467,7]]},"1462":{"position":[[225,8],[356,7],[458,7],[638,7]]},"1474":{"position":[[457,7],[593,7]]}},"keywords":{}}],["catalog>",{"_index":3776,"title":{},"content":{"461":{"position":[[232,11]]}},"keywords":{}}],["catalog_nam",{"_index":5810,"title":{},"content":{"1188":{"position":[[292,13]]},"1189":{"position":[[120,13]]},"1292":{"position":[[2361,12]]},"1306":{"position":[[2361,12]]},"1329":{"position":[[2361,12]]},"1421":{"position":[[133,12]]}},"keywords":{}}],["cataloga",{"_index":5805,"title":{},"content":{"1185":{"position":[[82,8],[149,8]]},"1417":{"position":[[160,8],[321,8]]}},"keywords":{}}],["catalogof",{"_index":914,"title":{},"content":{"61":{"position":[[193,9]]}},"keywords":{}}],["catch",{"_index":1467,"title":{},"content":{"102":{"position":[[557,5]]},"156":{"position":[[718,8]]},"158":{"position":[[228,5]]},"280":{"position":[[575,6]]},"281":{"position":[[2490,5]]},"329":{"position":[[907,7]]},"332":{"position":[[676,7]]},"379":{"position":[[513,7]]},"1451":{"position":[[533,5]]}},"keywords":{}}],["categor",{"_index":4647,"title":{},"content":{"762":{"position":[[293,10]]},"775":{"position":[[293,10]]},"802":{"position":[[293,10]]},"817":{"position":[[293,10]]},"833":{"position":[[293,10]]}},"keywords":{}}],["categori",{"_index":182,"title":{},"content":{"4":{"position":[[605,9]]},"204":{"position":[[104,8]]},"320":{"position":[[2019,11]]}},"keywords":{}}],["categoriesboard",{"_index":4494,"title":{},"content":{"709":{"position":[[749,15]]}},"keywords":{}}],["categoriesdiscuss",{"_index":3908,"title":{},"content":{"506":{"position":[[146,20]]}},"keywords":{}}],["categoriesestim",{"_index":4342,"title":{},"content":{"628":{"position":[[153,18]]}},"keywords":{}}],["categoriesexpensesexpens",{"_index":4344,"title":{},"content":{"628":{"position":[[203,25]]}},"keywords":{}}],["categoriesproduct",{"_index":5366,"title":{},"content":{"1096":{"position":[[223,17]]}},"keywords":{}}],["categoriesproject",{"_index":4482,"title":{},"content":{"709":{"position":[[502,17]]}},"keywords":{}}],["categoriessolut",{"_index":3918,"title":{},"content":{"506":{"position":[[348,18]]}},"keywords":{}}],["categoriestaskstim",{"_index":4345,"title":{},"content":{"628":{"position":[[229,19]]}},"keywords":{}}],["category"",{"_index":2712,"title":{},"content":{"253":{"position":[[1550,15],[2576,15]]},"313":{"position":[[1550,15],[2576,15]]}},"keywords":{}}],["cater",{"_index":2188,"title":{},"content":{"197":{"position":[[695,8]]}},"keywords":{}}],["caught",{"_index":1653,"title":{},"content":{"121":{"position":[[491,6]]},"158":{"position":[[889,7]]},"1451":{"position":[[190,6],[797,6]]},"1452":{"position":[[384,6]]}},"keywords":{}}],["caus",{"_index":377,"title":{"14":{"position":[[5,6]]}},"content":{"13":{"position":[[150,5],[897,6]]},"14":{"position":[[87,5]]},"55":{"position":[[618,5]]},"94":{"position":[[1746,5],[2114,5]]},"100":{"position":[[883,5]]},"105":{"position":[[61,7]]},"117":{"position":[[597,5]]},"120":{"position":[[1298,5],[1666,5]]},"183":{"position":[[1616,6]]},"239":{"position":[[2478,6]]},"296":{"position":[[2403,5]]},"307":{"position":[[3086,6]]},"417":{"position":[[525,5]]},"438":{"position":[[525,5]]},"502":{"position":[[985,5]]},"545":{"position":[[525,5]]},"595":{"position":[[1123,5]]},"603":{"position":[[95,5]]},"760":{"position":[[443,8]]},"763":{"position":[[464,5]]},"773":{"position":[[443,8]]},"776":{"position":[[464,5]]},"800":{"position":[[443,8]]},"803":{"position":[[470,5]]},"815":{"position":[[443,8]]},"818":{"position":[[470,5]]},"831":{"position":[[443,8]]},"834":{"position":[[470,5]]},"909":{"position":[[617,5]]},"922":{"position":[[2801,5],[2983,5]]},"925":{"position":[[617,5]]},"936":{"position":[[617,5]]},"952":{"position":[[617,5]]},"970":{"position":[[617,5]]},"1020":{"position":[[547,5]]},"1123":{"position":[[497,5]]},"1393":{"position":[[216,5]]},"1438":{"position":[[332,7]]},"1447":{"position":[[232,5],[329,5],[517,5]]},"1449":{"position":[[184,5]]},"1470":{"position":[[468,6]]},"1480":{"position":[[1004,5],[1372,5]]}},"keywords":{}}],["caution",{"_index":1442,"title":{},"content":{"100":{"position":[[612,7]]},"227":{"position":[[193,7],[323,7]]},"259":{"position":[[368,7],[2057,7]]},"411":{"position":[[213,7]]},"554":{"position":[[266,7]]},"606":{"position":[[368,7]]},"718":{"position":[[269,7]]},"869":{"position":[[1701,7]]},"911":{"position":[[342,7]]},"927":{"position":[[342,7]]},"938":{"position":[[342,7]]},"954":{"position":[[342,7]]},"972":{"position":[[342,7]]},"1192":{"position":[[252,7]]},"1201":{"position":[[134,7]]},"1230":{"position":[[593,7]]},"1243":{"position":[[282,7],[744,7]]},"1293":{"position":[[134,7]]},"1307":{"position":[[134,7]]},"1317":{"position":[[134,7]]},"1330":{"position":[[134,7]]},"1341":{"position":[[134,7]]},"1352":{"position":[[134,7]]},"1359":{"position":[[134,7]]},"1380":{"position":[[134,7]]},"1394":{"position":[[250,7]]},"1404":{"position":[[134,7]]},"1415":{"position":[[134,7]]},"1423":{"position":[[253,7]]},"1432":{"position":[[134,7]]},"1472":{"position":[[358,7]]}},"keywords":{}}],["cautious",{"_index":4917,"title":{},"content":{"879":{"position":[[1261,10]]}},"keywords":{}}],["caveat",{"_index":4723,"title":{},"content":{"821":{"position":[[705,6]]},"912":{"position":[[721,6]]}},"keywords":{}}],["cccc",{"_index":3717,"title":{},"content":{"439":{"position":[[202,4],[293,4],[345,4]]}},"keywords":{}}],["cdc",{"_index":790,"title":{"194":{"position":[[10,3]]},"196":{"position":[[8,5]]},"210":{"position":[[10,4]]},"231":{"position":[[11,3]]},"233":{"position":[[8,5]]},"237":{"position":[[27,4]]},"1030":{"position":[[10,3]]}},"content":{"52":{"position":[[183,5]]},"196":{"position":[[1,4],[419,3]]},"197":{"position":[[218,4],[332,3]]},"198":{"position":[[42,3],[140,3],[1044,4],[1128,3]]},"211":{"position":[[60,5]]},"232":{"position":[[44,3],[317,3]]},"233":{"position":[[1,4],[426,3],[563,3]]},"236":{"position":[[32,3],[2837,3],[3791,3]]},"237":{"position":[[11,3],[259,3],[370,3],[1285,4],[2609,3]]},"240":{"position":[[4337,3]]},"241":{"position":[[50,3],[177,3]]},"821":{"position":[[202,3],[245,3]]},"912":{"position":[[215,3],[256,3]]},"964":{"position":[[201,3]]},"1032":{"position":[[67,3]]},"1033":{"position":[[264,3]]},"1036":{"position":[[115,3]]},"1039":{"position":[[155,3]]},"1040":{"position":[[327,3],[716,3],[840,3]]},"1042":{"position":[[90,3],[333,3],[602,3],[832,3],[871,3]]},"1043":{"position":[[754,3],[997,3],[1266,3],[1496,3],[1535,3]]},"1049":{"position":[[81,3]]},"1050":{"position":[[327,3],[716,3],[840,3]]},"1051":{"position":[[1010,3],[1259,3],[1528,3],[1758,3],[1797,3]]},"1057":{"position":[[84,3]]},"1058":{"position":[[327,3],[716,3],[840,3]]},"1059":{"position":[[774,3],[1052,3],[1321,3],[1551,3],[1590,3]]}},"keywords":{}}],["cdc_role",{"_index":5097,"title":{},"content":{"944":{"position":[[184,9],[241,9],[319,9]]}},"keywords":{}}],["cdc_rolepassword",{"_index":5116,"title":{},"content":{"947":{"position":[[812,17]]}},"keywords":{}}],["ceil",{"_index":5624,"title":{},"content":{"1140":{"position":[[2369,4],[2403,7]]},"1316":{"position":[[2369,4],[2403,7]]},"1340":{"position":[[2369,4],[2403,7]]},"1351":{"position":[[2369,4],[2403,7]]},"1431":{"position":[[2392,4],[2426,7]]}},"keywords":{}}],["celebr",{"_index":2614,"title":{},"content":{"241":{"position":[[284,9]]}},"keywords":{}}],["cell",{"_index":4320,"title":{},"content":{"616":{"position":[[598,5]]},"943":{"position":[[984,4]]},"1243":{"position":[[354,5]]}},"keywords":{}}],["central",{"_index":1276,"title":{},"content":{"84":{"position":[[1184,11]]},"1435":{"position":[[5,7]]}},"keywords":{}}],["central1",{"_index":5951,"title":{},"content":{"1277":{"position":[[306,8]]},"1278":{"position":[[165,8]]}},"keywords":{}}],["central1.gcp.snowflakecomputing.com",{"_index":5217,"title":{},"content":{"1031":{"position":[[773,36]]},"1037":{"position":[[128,35]]}},"keywords":{}}],["central1.v1.estuari",{"_index":3863,"title":{},"content":{"488":{"position":[[110,19]]},"659":{"position":[[267,19]]},"676":{"position":[[110,19]]},"691":{"position":[[110,19]]}},"keywords":{}}],["central1/keyrings/your",{"_index":1168,"title":{},"content":{"82":{"position":[[1806,22],[2492,22],[4130,22],[4633,22]]}},"keywords":{}}],["certain",{"_index":1091,"title":{},"content":{"74":{"position":[[984,7]]},"90":{"position":[[1,7]]},"91":{"position":[[175,7]]},"209":{"position":[[1358,7]]},"275":{"position":[[820,7]]},"281":{"position":[[2403,7]]},"489":{"position":[[374,7]]},"517":{"position":[[233,7]]},"640":{"position":[[27,7]]},"654":{"position":[[665,7]]},"662":{"position":[[374,7]]},"677":{"position":[[374,7]]},"692":{"position":[[374,7]]},"785":{"position":[[550,7]]},"865":{"position":[[184,7]]},"900":{"position":[[27,7]]},"907":{"position":[[1658,7]]},"909":{"position":[[1013,7]]},"923":{"position":[[1658,7]]},"925":{"position":[[1013,7]]},"936":{"position":[[1013,7]]},"952":{"position":[[1013,7]]},"968":{"position":[[1658,7]]},"970":{"position":[[1013,7]]},"1182":{"position":[[265,7]]},"1191":{"position":[[267,7]]},"1262":{"position":[[267,7]]},"1313":{"position":[[1408,7]]},"1337":{"position":[[1408,7]]},"1389":{"position":[[266,7]]},"1447":{"position":[[292,7]]},"1448":{"position":[[303,7]]},"1452":{"position":[[114,7],[146,7],[441,7],[2694,7],[2792,7],[3689,7],[3733,7],[3996,7]]}},"keywords":{}}],["certainli",{"_index":1675,"title":{},"content":{"122":{"position":[[617,9]]}},"keywords":{}}],["certif",{"_index":3701,"title":{},"content":{"436":{"position":[[558,12]]},"1268":{"position":[[424,11],[630,11]]},"1285":{"position":[[1015,11],[1125,11],[1153,11]]},"1286":{"position":[[1935,11],[2260,11],[2409,11]]},"1300":{"position":[[1015,11],[1125,11],[1153,11]]},"1301":{"position":[[1771,11],[2096,11],[2245,11]]},"1324":{"position":[[1015,11],[1125,11],[1153,11]]},"1325":{"position":[[1935,11],[2260,11],[2409,11]]}},"keywords":{}}],["certificate.verify_ca",{"_index":5933,"title":{},"content":{"1268":{"position":[[347,22]]},"1286":{"position":[[1855,22]]},"1301":{"position":[[1691,22]]},"1325":{"position":[[1855,22]]}},"keywords":{}}],["cf22902",{"_index":5230,"title":{},"content":{"1037":{"position":[[173,7]]}},"keywords":{}}],["cf22902.u",{"_index":5229,"title":{},"content":{"1037":{"position":[[117,10]]}},"keywords":{}}],["chain",{"_index":6045,"title":{},"content":{"1292":{"position":[[2406,5]]},"1306":{"position":[[2406,5]]},"1329":{"position":[[2406,5]]}},"keywords":{}}],["challeng",{"_index":2337,"title":{},"content":{"210":{"position":[[2525,10]]},"211":{"position":[[353,10]]},"241":{"position":[[522,10]]},"909":{"position":[[303,9]]},"925":{"position":[[303,9]]},"936":{"position":[[303,9]]},"952":{"position":[[303,9]]},"970":{"position":[[303,9]]}},"keywords":{}}],["challenge_r",{"_index":6047,"title":{},"content":{"1292":{"position":[[2448,13]]},"1306":{"position":[[2448,13]]},"1329":{"position":[[2448,13]]}},"keywords":{}}],["chanc",{"_index":2435,"title":{},"content":{"218":{"position":[[949,6]]},"290":{"position":[[1418,6]]},"301":{"position":[[1514,6]]},"332":{"position":[[403,6]]}},"keywords":{}}],["chang",{"_index":251,"title":{"14":{"position":[[28,9]]},"197":{"position":[[14,6]]},"285":{"position":[[0,6]]},"309":{"position":[[24,8]]},"786":{"position":[[0,6]]},"1007":{"position":[[7,8]]},"1447":{"position":[[23,8]]},"1449":{"position":[[24,8]]}},"content":{"7":{"position":[[599,6]]},"8":{"position":[[758,6]]},"11":{"position":[[947,7],[1062,7],[1306,7],[1336,6],[1750,7],[1828,6],[1912,7]]},"12":{"position":[[40,6],[359,7],[467,6]]},"13":{"position":[[1034,7],[1481,7],[1587,8],[1874,7]]},"14":{"position":[[8,7],[107,6],[119,6],[237,8],[936,8],[1003,6]]},"42":{"position":[[570,8]]},"44":{"position":[[523,7]]},"52":{"position":[[163,6]]},"55":{"position":[[145,7],[211,8],[635,6],[1076,7]]},"56":{"position":[[555,7],[718,8],[800,7]]},"62":{"position":[[354,6]]},"64":{"position":[[1055,8]]},"68":{"position":[[291,7]]},"82":{"position":[[3019,7]]},"88":{"position":[[688,7]]},"100":{"position":[[631,6],[953,7],[1039,7],[1189,7]]},"103":{"position":[[360,7]]},"113":{"position":[[729,7]]},"115":{"position":[[157,7],[1389,8]]},"124":{"position":[[1014,7]]},"125":{"position":[[1093,7]]},"126":{"position":[[138,7]]},"146":{"position":[[229,7]]},"149":{"position":[[238,7]]},"152":{"position":[[245,7]]},"160":{"position":[[869,6]]},"162":{"position":[[1271,7]]},"164":{"position":[[900,6]]},"180":{"position":[[486,7],[614,6]]},"183":{"position":[[2044,7],[2226,7]]},"185":{"position":[[85,7]]},"190":{"position":[[1946,6]]},"191":{"position":[[474,8],[1899,6]]},"192":{"position":[[1226,6]]},"196":{"position":[[9,6],[68,7],[209,8],[473,7],[613,6]]},"197":{"position":[[1,6],[150,6],[167,6],[261,7],[355,6],[391,8],[675,6],[1159,6]]},"198":{"position":[[199,6],[364,7],[559,6],[795,6],[886,8]]},"203":{"position":[[82,6]]},"208":{"position":[[884,8],[1356,8]]},"209":{"position":[[403,6],[444,6],[608,6],[649,7],[835,6],[1017,6],[1211,6],[1450,6]]},"210":{"position":[[1675,6]]},"211":{"position":[[40,6],[198,7],[386,6],[676,7],[827,6],[888,7]]},"212":{"position":[[103,6]]},"217":{"position":[[1464,6],[2060,7]]},"218":{"position":[[964,7],[2037,7]]},"227":{"position":[[250,6]]},"228":{"position":[[592,6],[1066,6]]},"229":{"position":[[750,6]]},"230":{"position":[[521,7],[783,8]]},"232":{"position":[[368,6]]},"233":{"position":[[9,6],[68,7],[209,8],[234,6],[480,7],[671,6],[798,6]]},"237":{"position":[[163,7],[494,7],[834,8],[1147,7],[1998,7],[2207,7],[2804,6]]},"239":{"position":[[1833,7],[2249,7],[2368,7],[2497,7],[2657,8]]},"240":{"position":[[1860,6],[2695,7],[4690,7],[4975,7]]},"254":{"position":[[3665,8]]},"259":{"position":[[1428,8],[2974,8]]},"264":{"position":[[19,7],[156,8]]},"271":{"position":[[204,8]]},"275":{"position":[[178,8]]},"281":{"position":[[1710,6],[1862,7]]},"285":{"position":[[54,6]]},"290":{"position":[[1532,7]]},"291":{"position":[[1062,6],[1858,7]]},"302":{"position":[[1047,6],[1767,7]]},"305":{"position":[[483,7],[512,6],[571,7]]},"306":{"position":[[131,8],[273,7],[414,7],[466,7],[548,8],[571,8]]},"307":{"position":[[71,8],[120,7],[228,7],[285,6],[1732,6],[3303,6]]},"308":{"position":[[51,7]]},"309":{"position":[[51,7],[89,8],[403,6],[630,7],[888,8],[999,6],[1161,7],[1250,6],[1492,6],[1792,6],[1894,8],[3186,6],[3627,6]]},"310":{"position":[[51,7]]},"322":{"position":[[659,7]]},"331":{"position":[[408,7],[704,7]]},"332":{"position":[[67,7]]},"333":{"position":[[457,7]]},"366":{"position":[[213,6],[566,6]]},"368":{"position":[[174,6]]},"377":{"position":[[1484,7],[1773,7]]},"397":{"position":[[492,7]]},"419":{"position":[[345,6]]},"440":{"position":[[361,6]]},"480":{"position":[[628,7],[786,7]]},"504":{"position":[[289,6]]},"547":{"position":[[346,6]]},"578":{"position":[[301,7]]},"595":{"position":[[228,7],[625,7],[991,7]]},"616":{"position":[[444,7],[542,8]]},"639":{"position":[[287,6]]},"754":{"position":[[763,8],[853,7]]},"755":{"position":[[174,6]]},"764":{"position":[[436,6]]},"767":{"position":[[1298,7],[1651,7]]},"768":{"position":[[174,6]]},"777":{"position":[[436,6]]},"785":{"position":[[86,6],[112,6],[264,6],[307,7],[417,6],[643,6]]},"786":{"position":[[24,6],[110,6]]},"792":{"position":[[1593,7]]},"794":{"position":[[969,8],[1059,7]]},"795":{"position":[[172,6]]},"804":{"position":[[434,6]]},"809":{"position":[[969,8],[1059,7]]},"810":{"position":[[172,6]]},"819":{"position":[[434,6]]},"821":{"position":[[1343,7]]},"824":{"position":[[1364,7],[1715,7]]},"825":{"position":[[805,8],[895,7]]},"826":{"position":[[172,6]]},"835":{"position":[[434,6]]},"840":{"position":[[762,8],[1482,8],[1917,8],[2292,8]]},"842":{"position":[[2053,7]]},"849":{"position":[[704,8],[883,8],[1237,8],[2373,8],[3036,8],[3432,8]]},"856":{"position":[[99,6]]},"857":{"position":[[128,6]]},"867":{"position":[[425,6],[1404,7],[1509,7]]},"869":{"position":[[728,7],[1080,8],[1655,7],[1749,7]]},"870":{"position":[[43,7],[77,6]]},"903":{"position":[[239,6],[592,6]]},"904":{"position":[[2204,7]]},"905":{"position":[[177,6]]},"909":{"position":[[402,6]]},"915":{"position":[[239,6],[592,6]]},"917":{"position":[[56,6],[1713,7],[1924,6]]},"918":{"position":[[2496,7]]},"920":{"position":[[177,6]]},"922":{"position":[[47,6],[306,8],[652,7],[3210,6]]},"925":{"position":[[402,6]]},"930":{"position":[[239,6],[592,6]]},"931":{"position":[[1866,7]]},"932":{"position":[[177,6]]},"936":{"position":[[402,6]]},"942":{"position":[[87,8],[193,7]]},"945":{"position":[[358,7],[742,6]]},"947":{"position":[[1131,6]]},"948":{"position":[[177,6]]},"952":{"position":[[402,6]]},"963":{"position":[[393,6],[746,6]]},"965":{"position":[[56,6],[1713,7],[1924,6]]},"966":{"position":[[177,6]]},"970":{"position":[[402,6]]},"976":{"position":[[200,7]]},"1006":{"position":[[281,8]]},"1007":{"position":[[72,7]]},"1008":{"position":[[2011,7]]},"1023":{"position":[[326,6]]},"1036":{"position":[[153,7],[237,7]]},"1040":{"position":[[12,6],[410,6],[792,6]]},"1047":{"position":[[867,7]]},"1050":{"position":[[12,6],[410,6],[792,6]]},"1055":{"position":[[867,7]]},"1058":{"position":[[12,6],[410,6],[792,6]]},"1063":{"position":[[867,7]]},"1077":{"position":[[405,7],[843,7]]},"1155":{"position":[[651,6]]},"1200":{"position":[[483,7]]},"1201":{"position":[[43,7],[96,7]]},"1286":{"position":[[1026,8],[1116,7]]},"1292":{"position":[[2486,6],[2521,7]]},"1293":{"position":[[43,7],[96,7]]},"1301":{"position":[[862,8],[952,7]]},"1306":{"position":[[2486,6],[2521,7]]},"1307":{"position":[[43,7],[96,7]]},"1317":{"position":[[43,7],[96,7],[349,7]]},"1325":{"position":[[1026,8],[1116,7]]},"1329":{"position":[[2486,6],[2521,7]]},"1330":{"position":[[43,7],[96,7]]},"1341":{"position":[[43,7],[96,7],[349,7]]},"1352":{"position":[[43,7],[96,7],[349,7]]},"1359":{"position":[[43,7],[96,7]]},"1380":{"position":[[43,7],[96,7]]},"1383":{"position":[[1847,6]]},"1404":{"position":[[43,7],[96,7]]},"1415":{"position":[[43,7],[96,7]]},"1432":{"position":[[43,7],[96,7],[349,7]]},"1435":{"position":[[211,7]]},"1437":{"position":[[1458,8]]},"1442":{"position":[[1573,7]]},"1447":{"position":[[163,7],[311,7],[691,7]]},"1448":{"position":[[237,6]]},"1449":{"position":[[20,6],[120,6],[210,7],[266,6]]},"1451":{"position":[[556,8]]},"1452":{"position":[[408,8],[1576,7],[1836,6],[2074,7],[2155,7]]}},"keywords":{}}],["changeda",{"_index":3041,"title":{},"content":{"306":{"position":[[325,8]]}},"keywords":{}}],["changedth",{"_index":3039,"title":{},"content":{"306":{"position":[[163,10],[213,10]]}},"keywords":{}}],["changelog",{"_index":5848,"title":{"1201":{"position":[[0,10]]},"1293":{"position":[[0,10]]},"1307":{"position":[[0,10]]},"1317":{"position":[[0,10]]},"1330":{"position":[[0,10]]},"1341":{"position":[[0,10]]},"1352":{"position":[[0,10]]},"1359":{"position":[[0,10]]},"1380":{"position":[[0,10]]},"1404":{"position":[[0,10]]},"1415":{"position":[[0,10]]},"1432":{"position":[[0,10]]}},"content":{"1201":{"position":[[5,9]]},"1293":{"position":[[5,9]]},"1307":{"position":[[5,9]]},"1317":{"position":[[5,9]]},"1330":{"position":[[5,9]]},"1341":{"position":[[5,9]]},"1352":{"position":[[5,9]]},"1359":{"position":[[5,9]]},"1380":{"position":[[5,9]]},"1404":{"position":[[5,9]]},"1415":{"position":[[5,9]]},"1432":{"position":[[5,9]]},"1448":{"position":[[1164,9]]}},"keywords":{}}],["changes:flowctl",{"_index":2822,"title":{},"content":{"275":{"position":[[370,15]]}},"keywords":{}}],["changesticketsticket",{"_index":4394,"title":{},"content":{"649":{"position":[[472,20]]}},"keywords":{}}],["changestreampreandpostimag",{"_index":4694,"title":{},"content":{"786":{"position":[[360,28]]}},"keywords":{}}],["channel",{"_index":5177,"title":{},"content":{"1012":{"position":[[69,8]]},"1015":{"position":[[80,8],[109,8]]},"1292":{"position":[[2557,7]]},"1306":{"position":[[2557,7]]},"1329":{"position":[[2557,7]]},"1362":{"position":[[585,8],[594,7],[622,7]]},"1363":{"position":[[285,8]]}},"keywords":{}}],["channel_annotations_a1",{"_index":5382,"title":{},"content":{"1102":{"position":[[180,22]]}},"keywords":{}}],["channel_annotations_a1channel_basic_a2channel_cards_a1channel_combined_a2channel_demographics_a1channel_device_os_a2channel_end_screens_a1channel_playback_location_a2channel_province_a2channel_sharing_service_a1channel_subtitles_a2channel_traffic_source_a2playlist_basic_a1playlist_combined_a1playlist_device_os_a1playlist_playback_location_a1playlist_province_a1playlist_traffic_source_a1",{"_index":5380,"title":{},"content":{"1099":{"position":[[81,389]]}},"keywords":{}}],["channel_memb",{"_index":5186,"title":{},"content":{"1016":{"position":[[315,15]]}},"keywords":{}}],["char",{"_index":5629,"title":{},"content":{"1140":{"position":[[2444,4]]},"1209":{"position":[[421,4]]},"1292":{"position":[[2597,4]]},"1306":{"position":[[2597,4]]},"1316":{"position":[[2444,4]]},"1329":{"position":[[2597,4]]},"1340":{"position":[[2444,4]]},"1351":{"position":[[2444,4]]},"1379":{"position":[[2747,4]]},"1403":{"position":[[2747,4]]},"1414":{"position":[[2747,4]]},"1431":{"position":[[2467,4]]}},"keywords":{}}],["char_length",{"_index":5636,"title":{},"content":{"1140":{"position":[[2575,11]]},"1316":{"position":[[2575,11]]},"1340":{"position":[[2575,11]]},"1351":{"position":[[2575,11]]},"1379":{"position":[[2790,11]]},"1403":{"position":[[2790,11]]},"1414":{"position":[[2790,11]]},"1431":{"position":[[2598,11]]}},"keywords":{}}],["charact",{"_index":1731,"title":{},"content":{"130":{"position":[[224,11]]},"419":{"position":[[2092,11],[2661,9]]},"441":{"position":[[701,11],[1270,9]]},"489":{"position":[[390,11],[437,10]]},"504":{"position":[[1721,11],[2290,9]]},"547":{"position":[[2094,11],[2663,9]]},"639":{"position":[[1719,11],[2288,9]]},"662":{"position":[[390,11],[437,10]]},"677":{"position":[[390,11],[437,10]]},"692":{"position":[[390,11],[437,10]]},"872":{"position":[[39,10]]},"1023":{"position":[[2075,11],[2644,9]]},"1140":{"position":[[2483,9]]},"1144":{"position":[[905,9],[996,9]]},"1213":{"position":[[582,9],[673,9]]},"1292":{"position":[[2640,9]]},"1306":{"position":[[2640,9]]},"1316":{"position":[[2483,9]]},"1329":{"position":[[2640,9]]},"1340":{"position":[[2483,9]]},"1351":{"position":[[2483,9]]},"1379":{"position":[[2846,9]]},"1403":{"position":[[2846,9]]},"1414":{"position":[[2846,9]]},"1431":{"position":[[2506,9]]}},"keywords":{}}],["character_len",{"_index":6330,"title":{},"content":{"1379":{"position":[[2902,13]]},"1403":{"position":[[2902,13]]},"1414":{"position":[[2902,13]]}},"keywords":{}}],["character_length",{"_index":5633,"title":{},"content":{"1140":{"position":[[2523,16]]},"1316":{"position":[[2523,16]]},"1340":{"position":[[2523,16]]},"1351":{"position":[[2523,16]]},"1431":{"position":[[2546,16]]}},"keywords":{}}],["charg",{"_index":5302,"title":{},"content":{"1078":{"position":[[411,7]]},"1388":{"position":[[230,8],[508,7]]}},"keywords":{}}],["chargebe",{"_index":3328,"title":{"456":{"position":[[0,9]]}},"content":{"364":{"position":[[924,9]]},"457":{"position":[[56,9]]},"458":{"position":[[15,9],[59,9]]},"459":{"position":[[250,9]]},"460":{"position":[[82,9],[153,9],[397,9],[502,9],[626,9]]}},"keywords":{}}],["chargebee.dev",{"_index":3329,"title":{},"content":{"364":{"position":[[980,13]]}},"keywords":{}}],["chargebee:dev",{"_index":3772,"title":{},"content":{"461":{"position":[[90,13]]}},"keywords":{}}],["charset",{"_index":6054,"title":{},"content":{"1292":{"position":[[2678,7]]},"1306":{"position":[[2678,7]]},"1329":{"position":[[2678,7]]}},"keywords":{}}],["chart",{"_index":1833,"title":{},"content":{"146":{"position":[[216,5]]},"149":{"position":[[225,5]]},"152":{"position":[[232,5]]}},"keywords":{}}],["chat",{"_index":3389,"title":{"1103":{"position":[[8,4]]}},"content":{"364":{"position":[[3556,4]]},"1106":{"position":[[259,4]]}},"keywords":{}}],["chat:dev",{"_index":3390,"title":{},"content":{"364":{"position":[[3615,8]]},"1108":{"position":[[97,8]]}},"keywords":{}}],["cheaper",{"_index":6399,"title":{},"content":{"1392":{"position":[[99,7]]}},"keywords":{}}],["cheapli",{"_index":1510,"title":{},"content":{"106":{"position":[[366,7]]},"112":{"position":[[964,7]]},"207":{"position":[[580,7]]},"239":{"position":[[1021,7]]},"1391":{"position":[[1017,7]]}},"keywords":{}}],["check",{"_index":812,"title":{"182":{"position":[[0,5]]}},"content":{"55":{"position":[[135,5]]},"102":{"position":[[497,7]]},"158":{"position":[[696,6],[735,6]]},"177":{"position":[[358,5]]},"183":{"position":[[3420,5]]},"190":{"position":[[1839,5]]},"192":{"position":[[2201,5]]},"210":{"position":[[441,5],[3911,5]]},"213":{"position":[[506,5]]},"221":{"position":[[1072,5]]},"222":{"position":[[317,5]]},"223":{"position":[[283,5]]},"224":{"position":[[336,5]]},"237":{"position":[[1000,5]]},"239":{"position":[[2737,5]]},"240":{"position":[[4357,5]]},"253":{"position":[[200,5]]},"254":{"position":[[2048,5]]},"264":{"position":[[592,5]]},"267":{"position":[[682,9]]},"270":{"position":[[409,5]]},"274":{"position":[[699,5]]},"275":{"position":[[942,5]]},"280":{"position":[[118,5]]},"281":{"position":[[2477,6]]},"295":{"position":[[1629,5]]},"296":{"position":[[7620,5]]},"313":{"position":[[200,5]]},"332":{"position":[[667,8]]},"374":{"position":[[125,5]]},"560":{"position":[[354,5]]},"578":{"position":[[275,5]]},"757":{"position":[[1731,5],[1794,5]]},"770":{"position":[[1731,5],[1794,5]]},"797":{"position":[[1731,5],[1794,5]]},"812":{"position":[[1731,5],[1794,5]]},"828":{"position":[[1731,5],[1794,5]]},"840":{"position":[[705,5]]},"842":{"position":[[2031,5]]},"849":{"position":[[511,5],[648,5],[822,5],[1180,5]]},"879":{"position":[[1212,6],[1244,7]]},"907":{"position":[[1831,5]]},"923":{"position":[[1831,5]]},"947":{"position":[[1069,8]]},"968":{"position":[[1831,5]]},"1140":{"position":[[2625,5]]},"1292":{"position":[[2722,5]]},"1298":{"position":[[283,5]]},"1306":{"position":[[2722,5]]},"1313":{"position":[[1581,5]]},"1316":{"position":[[2625,5]]},"1322":{"position":[[317,5]]},"1329":{"position":[[2722,5]]},"1335":{"position":[[317,5]]},"1337":{"position":[[1581,5]]},"1340":{"position":[[2625,5]]},"1346":{"position":[[283,5]]},"1351":{"position":[[2625,5]]},"1370":{"position":[[598,5]]},"1379":{"position":[[2951,5]]},"1383":{"position":[[449,5],[471,5]]},"1394":{"position":[[658,5]]},"1403":{"position":[[2951,5]]},"1414":{"position":[[2951,5]]},"1431":{"position":[[2648,5]]},"1448":{"position":[[945,5]]}},"keywords":{}}],["checkbox",{"_index":4738,"title":{},"content":{"840":{"position":[[742,9]]},"849":{"position":[[521,8],[658,8],[832,8],[1217,9]]},"885":{"position":[[270,8]]},"947":{"position":[[1082,8]]},"964":{"position":[[485,8]]}},"keywords":{}}],["checkout_sess",{"_index":5304,"title":{},"content":{"1078":{"position":[[487,17]]}},"keywords":{}}],["checkout_sessions_line_item",{"_index":5306,"title":{},"content":{"1078":{"position":[[582,28]]}},"keywords":{}}],["checkpoint",{"_index":559,"title":{},"content":{"21":{"position":[[117,11],[243,11],[326,11],[384,11]]},"48":{"position":[[304,10]]},"49":{"position":[[370,12]]},"112":{"position":[[454,10]]},"1379":{"position":[[3000,10]]},"1403":{"position":[[3000,10]]},"1414":{"position":[[3000,10]]},"1434":{"position":[[368,11]]},"1435":{"position":[[86,11],[176,10],[234,10],[455,10]]},"1437":{"position":[[107,11],[166,12],[390,10],[1022,10],[1310,10]]},"1438":{"position":[[63,10]]},"1439":{"position":[[440,11],[575,11],[973,10],[1000,11],[1100,11],[1153,10],[1241,11]]},"1444":{"position":[[296,11],[409,10],[544,11],[781,11],[941,10]]}},"keywords":{}}],["checksum",{"_index":141,"title":{},"content":{"3":{"position":[[915,8]]},"1292":{"position":[[2768,8]]},"1306":{"position":[[2768,8]]},"1329":{"position":[[2768,8]]}},"keywords":{}}],["child",{"_index":6605,"title":{},"content":{"1461":{"position":[[1869,5]]}},"keywords":{}}],["child_join_column_nam",{"_index":4796,"title":{},"content":{"843":{"position":[[511,23]]}},"keywords":{}}],["child_table_nam",{"_index":4797,"title":{},"content":{"843":{"position":[[547,17]]}},"keywords":{}}],["children",{"_index":4254,"title":{},"content":{"593":{"position":[[626,8]]}},"keywords":{}}],["chip",{"_index":1805,"title":{},"content":{"138":{"position":[[2434,4]]},"142":{"position":[[2512,4]]},"169":{"position":[[380,5]]}},"keywords":{}}],["chmod",{"_index":886,"title":{},"content":{"58":{"position":[[458,5],[637,5]]},"169":{"position":[[699,5],[881,5]]}},"keywords":{}}],["choic",{"_index":2037,"title":{},"content":{"175":{"position":[[129,7]]},"185":{"position":[[28,7]]},"189":{"position":[[596,6]]},"428":{"position":[[140,6]]},"429":{"position":[[1068,7]]},"480":{"position":[[567,6]]},"784":{"position":[[207,7]]},"821":{"position":[[1284,6]]},"1198":{"position":[[296,7]]},"1255":{"position":[[207,7]]},"1289":{"position":[[913,7]]},"1322":{"position":[[1132,7]]},"1436":{"position":[[74,6]]}},"keywords":{}}],["choos",{"_index":810,"title":{"1077":{"position":[[0,8]]}},"content":{"55":{"position":[[9,6]]},"80":{"position":[[268,6]]},"81":{"position":[[1209,7]]},"92":{"position":[[254,7]]},"113":{"position":[[501,6]]},"137":{"position":[[360,6]]},"138":{"position":[[306,6]]},"141":{"position":[[616,6]]},"142":{"position":[[419,6]]},"170":{"position":[[127,6]]},"183":{"position":[[365,6]]},"190":{"position":[[88,6]]},"192":{"position":[[1309,9]]},"204":{"position":[[707,8]]},"206":{"position":[[1056,6]]},"217":{"position":[[337,6],[357,6]]},"218":{"position":[[325,6],[1602,6]]},"221":{"position":[[489,6]]},"222":{"position":[[823,6]]},"223":{"position":[[823,8]]},"228":{"position":[[202,6],[255,6]]},"230":{"position":[[87,6],[467,6],[956,6],[1067,6]]},"240":{"position":[[2545,6]]},"259":{"position":[[1085,6],[2666,6]]},"266":{"position":[[323,6]]},"267":{"position":[[389,6],[740,6]]},"290":{"position":[[314,6]]},"291":{"position":[[249,6],[1193,6],[1550,6]]},"301":{"position":[[267,6]]},"302":{"position":[[249,6],[1139,6]]},"324":{"position":[[1064,6]]},"375":{"position":[[258,6]]},"377":{"position":[[1340,6]]},"385":{"position":[[62,6]]},"429":{"position":[[250,6]]},"436":{"position":[[637,6]]},"522":{"position":[[341,6]]},"530":{"position":[[341,6]]},"534":{"position":[[488,6]]},"548":{"position":[[764,6]]},"595":{"position":[[62,6],[1886,6]]},"645":{"position":[[344,6]]},"652":{"position":[[344,6]]},"767":{"position":[[1504,6]]},"792":{"position":[[389,8]]},"824":{"position":[[1568,6]]},"855":{"position":[[140,6]]},"869":{"position":[[1317,6]]},"918":{"position":[[389,8]]},"947":{"position":[[122,6]]},"1077":{"position":[[89,7]]},"1085":{"position":[[1100,6]]},"1087":{"position":[[173,6],[240,6]]},"1199":{"position":[[67,6]]},"1204":{"position":[[220,6],[403,6]]},"1243":{"position":[[1393,7]]},"1289":{"position":[[390,8]]},"1298":{"position":[[823,8]]},"1321":{"position":[[170,8]]},"1322":{"position":[[823,6]]},"1334":{"position":[[170,8]]},"1335":{"position":[[823,6]]},"1346":{"position":[[823,8]]},"1366":{"position":[[75,6]]},"1391":{"position":[[73,6],[335,6]]}},"keywords":{}}],["chose",{"_index":1087,"title":{},"content":{"74":{"position":[[885,5]]},"140":{"position":[[289,6]]},"267":{"position":[[1187,6]]},"268":{"position":[[8,5]]},"269":{"position":[[8,5]]},"385":{"position":[[792,6]]}},"keywords":{}}],["chosen",{"_index":3678,"title":{},"content":{"432":{"position":[[801,7],[904,7]]},"517":{"position":[[999,6],[1233,6],[1733,6]]},"556":{"position":[[1350,6]]}},"keywords":{}}],["chronolog",{"_index":6397,"title":{},"content":{"1391":{"position":[[698,13]]}},"keywords":{}}],["chunk",{"_index":3124,"title":{},"content":{"320":{"position":[[1008,6]]},"370":{"position":[[782,5]]},"517":{"position":[[2215,7]]},"595":{"position":[[441,7]]},"757":{"position":[[1549,5]]},"770":{"position":[[1549,5]]},"797":{"position":[[1549,5]]},"812":{"position":[[1549,5]]},"828":{"position":[[1549,5]]},"842":{"position":[[1617,6]]},"867":{"position":[[874,5],[1033,5]]},"879":{"position":[[1031,5]]},"907":{"position":[[565,5]]},"923":{"position":[[565,5]]},"934":{"position":[[565,5]]},"950":{"position":[[565,5]]},"968":{"position":[[565,5]]},"1045":{"position":[[550,5]]},"1053":{"position":[[550,5]]},"1061":{"position":[[550,5]]}},"keywords":{}}],["cipher",{"_index":6060,"title":{},"content":{"1292":{"position":[[2812,6]]},"1306":{"position":[[2812,6]]},"1329":{"position":[[2812,6]]}},"keywords":{}}],["ciqaw8bc2au779cgdmfujwphnlectaj9rl949sbvpq6eyac3edessqcnysjkd3ewx8xrtrghqx327",{"_index":1208,"title":{},"content":{"82":{"position":[[4736,77]]}},"keywords":{}}],["ciqaw8bc2gdywrjtp3ikvgkti2xazc6f4p/d/pcblczcz8bziuissqcnysjkiptagfkil01uibqp056c",{"_index":1183,"title":{},"content":{"82":{"position":[[2595,80]]}},"keywords":{}}],["circl",{"_index":1787,"title":{},"content":{"138":{"position":[[1488,8]]},"141":{"position":[[1490,8]]},"142":{"position":[[1497,8]]}},"keywords":{}}],["circumst",{"_index":4687,"title":{},"content":{"785":{"position":[[558,14]]},"821":{"position":[[392,13]]},"912":{"position":[[403,13]]},"1147":{"position":[[9,14]]},"1174":{"position":[[9,14]]},"1216":{"position":[[9,14]]},"1224":{"position":[[9,14]]}},"keywords":{}}],["circumv",{"_index":5018,"title":{},"content":{"910":{"position":[[209,11]]},"926":{"position":[[209,11]]},"937":{"position":[[209,11]]},"953":{"position":[[209,11]]},"971":{"position":[[209,11]]}},"keywords":{}}],["citi",{"_index":1585,"title":{"190":{"position":[[8,4]]}},"content":{"110":{"position":[[1519,4]]},"189":{"position":[[21,4],[79,4],[90,4],[420,4],[487,4],[779,4]]},"190":{"position":[[1088,4],[2047,4]]},"193":{"position":[[54,4],[157,4]]}},"keywords":{}}],["citibikedata",{"_index":2166,"title":{},"content":{"192":{"position":[[1272,12]]}},"keywords":{}}],["class",{"_index":943,"title":{},"content":{"63":{"position":[[442,7]]},"102":{"position":[[110,5]]},"103":{"position":[[120,5]]},"104":{"position":[[26,5]]},"281":{"position":[[1364,5]]},"296":{"position":[[5444,5],[5845,5],[6096,5]]},"315":{"position":[[1540,5],[1835,5]]},"517":{"position":[[1141,5],[1355,5],[1844,5]]},"1379":{"position":[[3072,5]]},"1403":{"position":[[3072,5]]},"1414":{"position":[[3072,5]]}},"keywords":{}}],["class_origin",{"_index":6063,"title":{},"content":{"1292":{"position":[[2860,12]]},"1306":{"position":[[2860,12]]},"1329":{"position":[[2860,12]]}},"keywords":{}}],["classesproduct",{"_index":5369,"title":{},"content":{"1096":{"position":[[279,14]]}},"keywords":{}}],["classestax",{"_index":5377,"title":{},"content":{"1096":{"position":[[442,10]]}},"keywords":{}}],["classifi",{"_index":5639,"title":{},"content":{"1140":{"position":[[2659,10]]},"1316":{"position":[[2659,10]]},"1340":{"position":[[2659,10]]},"1351":{"position":[[2659,10]]},"1431":{"position":[[2682,10]]}},"keywords":{}}],["clean",{"_index":683,"title":{"242":{"position":[[0,5]]}},"content":{"34":{"position":[[866,5]]},"228":{"position":[[998,6]]},"242":{"position":[[38,5],[356,5]]},"254":{"position":[[3998,5]]},"332":{"position":[[252,6]]},"922":{"position":[[978,5]]}},"keywords":{}}],["clear",{"_index":1950,"title":{},"content":{"164":{"position":[[1812,8]]},"1243":{"position":[[939,5]]},"1461":{"position":[[1515,5]]}},"keywords":{}}],["clearli",{"_index":2864,"title":{},"content":{"280":{"position":[[448,7]]}},"keywords":{}}],["cleartext",{"_index":1199,"title":{},"content":{"82":{"position":[[3690,9]]}},"keywords":{}}],["cli",{"_index":1026,"title":{"169":{"position":[[26,4]]},"340":{"position":[[30,4]]},"384":{"position":[[34,4]]},"446":{"position":[[34,4]]},"1083":{"position":[[54,4]]}},"content":{"68":{"position":[[684,4]]},"79":{"position":[[325,4]]},"103":{"position":[[453,3]]},"154":{"position":[[1985,3],[1999,3]]},"169":{"position":[[1551,3]]},"238":{"position":[[147,3]]},"253":{"position":[[155,3]]},"257":{"position":[[88,4]]},"263":{"position":[[121,3]]},"267":{"position":[[1959,3]]},"270":{"position":[[221,3]]},"274":{"position":[[519,3]]},"284":{"position":[[30,3]]},"295":{"position":[[1584,3]]},"313":{"position":[[155,3]]},"329":{"position":[[1066,3]]},"338":{"position":[[591,4]]},"340":{"position":[[25,3],[176,4],[411,3]]},"341":{"position":[[55,3]]},"382":{"position":[[144,4]]},"444":{"position":[[147,4]]},"683":{"position":[[224,4]]},"685":{"position":[[86,4]]},"686":{"position":[[56,4]]},"855":{"position":[[379,4]]},"943":{"position":[[228,4],[654,3],[694,3],[739,3]]},"1067":{"position":[[386,4]]},"1081":{"position":[[162,4]]},"1083":{"position":[[126,4]]},"1231":{"position":[[65,4]]},"1243":{"position":[[1322,4]]},"1248":{"position":[[65,4]]},"1461":{"position":[[1679,4]]}},"keywords":{}}],["cli.creat",{"_index":5797,"title":{},"content":{"1183":{"position":[[743,10]]}},"keywords":{}}],["cli.manag",{"_index":1753,"title":{},"content":{"135":{"position":[[597,10]]}},"keywords":{}}],["click",{"_index":359,"title":{},"content":{"12":{"position":[[144,5]]},"68":{"position":[[364,5],[444,5],[602,5]]},"80":{"position":[[433,5]]},"138":{"position":[[460,5],[2104,5],[2480,8],[2743,5]]},"139":{"position":[[10,5]]},"140":{"position":[[10,5]]},"141":{"position":[[2060,5]]},"142":{"position":[[2164,5],[2558,8],[2828,5]]},"143":{"position":[[10,5]]},"144":{"position":[[60,8],[176,8]]},"145":{"position":[[10,5]]},"146":{"position":[[240,8],[842,7]]},"148":{"position":[[10,5]]},"149":{"position":[[249,8],[815,7],[1316,5]]},"151":{"position":[[10,5]]},"152":{"position":[[256,8],[818,7]]},"173":{"position":[[858,5],[1015,5]]},"181":{"position":[[36,5]]},"182":{"position":[[94,5],[145,5]]},"183":{"position":[[137,5],[480,5],[663,5]]},"184":{"position":[[175,5],[226,5],[923,5],[958,5]]},"190":{"position":[[62,5],[235,5],[406,5],[683,5],[1524,5],[1865,5],[2162,5]]},"191":{"position":[[2128,5],[2181,5]]},"192":{"position":[[194,5],[294,5],[321,5],[1693,5],[1725,5],[1917,5],[1946,5],[2227,5]]},"204":{"position":[[638,8]]},"207":{"position":[[706,5]]},"217":{"position":[[311,5],[748,5],[944,5],[1787,5],[2091,5],[2155,5],[2246,5]]},"218":{"position":[[155,5],[518,5],[1168,5],[1211,5],[1640,5],[1666,5],[1872,5],[2063,5],[2081,5]]},"228":{"position":[[173,5],[316,5],[731,5],[836,5],[921,5],[1220,5],[1481,5]]},"230":{"position":[[529,5],[792,5],[1179,5],[1255,5]]},"239":{"position":[[306,8],[373,5],[1511,5]]},"240":{"position":[[2119,8],[3893,8]]},"259":{"position":[[79,5],[127,5],[706,5],[1109,5],[1135,5],[1375,5],[1437,5],[1449,5],[1760,5],[1808,5],[2690,5],[2716,5],[2921,5],[2983,5],[2995,5]]},"267":{"position":[[151,5],[848,5],[1031,5]]},"290":{"position":[[288,5],[369,5],[1103,5],[1556,5],[1634,5],[1849,5]]},"291":{"position":[[147,5],[566,5],[770,5],[1574,5],[1600,5],[1805,5],[1834,5],[1891,5]]},"301":{"position":[[241,5],[315,5],[1312,5],[1608,5],[1814,5]]},"302":{"position":[[147,5],[566,5],[770,5],[1470,5],[1509,5],[1714,5],[1743,5],[1803,5]]},"307":{"position":[[632,5]]},"308":{"position":[[893,5]]},"309":{"position":[[1673,5]]},"349":{"position":[[64,5],[119,5]]},"436":{"position":[[589,5],[681,5]]},"472":{"position":[[479,5],[555,5]]},"479":{"position":[[64,5],[118,5],[884,5]]},"486":{"position":[[31,5],[153,5],[421,5]]},"487":{"position":[[80,5]]},"488":{"position":[[556,5]]},"515":{"position":[[515,5]]},"531":{"position":[[292,5]]},"556":{"position":[[374,5]]},"658":{"position":[[31,5],[153,5],[421,5]]},"659":{"position":[[713,5]]},"674":{"position":[[31,5],[153,5],[421,5]]},"675":{"position":[[323,5]]},"676":{"position":[[556,5]]},"689":{"position":[[31,5],[153,5],[421,5]]},"690":{"position":[[100,5]]},"691":{"position":[[556,5]]},"725":{"position":[[54,5]]},"726":{"position":[[472,5]]},"840":{"position":[[1054,5],[1158,5],[1257,5],[1354,5],[1735,5],[1764,5]]},"849":{"position":[[447,5],[1655,5],[2065,5],[2186,5],[2776,5],[2805,5]]},"895":{"position":[[615,5]]},"931":{"position":[[692,5],[764,5]]},"947":{"position":[[77,5],[149,5],[830,5],[936,5],[1244,8],[1276,5]]},"1047":{"position":[[397,5],[475,5],[581,5]]},"1055":{"position":[[397,5],[475,5],[581,5]]},"1063":{"position":[[397,5],[475,5],[581,5]]},"1092":{"position":[[64,5],[119,5]]},"1118":{"position":[[718,5],[878,5],[1046,5]]},"1177":{"position":[[390,5]]},"1383":{"position":[[486,5]]},"1455":{"position":[[468,8],[480,5]]},"1470":{"position":[[553,5]]},"1479":{"position":[[404,5]]}},"keywords":{}}],["clickemail",{"_index":4451,"title":{},"content":{"697":{"position":[[123,10]]}},"keywords":{}}],["clickview",{"_index":4132,"title":{"560":{"position":[[0,10]]}},"content":{"560":{"position":[[36,9],[253,9]]}},"keywords":{}}],["client",{"_index":2094,"title":{"250":{"position":[[21,7]]}},"content":{"185":{"position":[[18,6]]},"250":{"position":[[22,6],[83,6],[152,6]]},"320":{"position":[[1308,7]]},"367":{"position":[[164,7]]},"384":{"position":[[153,6],[282,6],[296,6]]},"387":{"position":[[480,6],[494,6],[589,6],[607,6]]},"428":{"position":[[60,7]]},"429":{"position":[[629,6]]},"432":{"position":[[184,6],[434,6],[690,6]]},"436":{"position":[[249,6],[261,6],[534,8],[599,6],[746,6],[970,8],[1012,6]]},"438":{"position":[[796,6],[810,6],[935,6],[953,6]]},"446":{"position":[[91,6],[101,6]]},"448":{"position":[[383,6],[397,6],[503,6],[521,6]]},"552":{"position":[[312,6],[488,6]]},"554":{"position":[[576,6],[590,6]]},"556":{"position":[[592,6],[606,6],[701,6],[719,6],[1423,8]]},"628":{"position":[[71,6]]},"632":{"position":[[235,7]]},"670":{"position":[[71,6],[85,6],[167,6],[185,6]]},"671":{"position":[[132,6]]},"728":{"position":[[194,6],[221,6],[263,6],[294,6]]},"739":{"position":[[153,6],[169,6]]},"741":{"position":[[71,6],[85,6],[165,6],[183,6]]},"750":{"position":[[791,6]]},"752":{"position":[[704,7]]},"753":{"position":[[744,7],[1360,7]]},"766":{"position":[[791,6]]},"767":{"position":[[1698,7],[2037,7]]},"789":{"position":[[1192,6]]},"791":{"position":[[709,7]]},"792":{"position":[[1638,7],[2029,7]]},"793":{"position":[[715,7],[1383,7]]},"807":{"position":[[779,6]]},"808":{"position":[[733,7],[1329,7]]},"823":{"position":[[779,6]]},"824":{"position":[[1760,7],[2151,7]]},"885":{"position":[[71,6],[85,6],[164,6],[182,6]]},"898":{"position":[[726,6],[949,6]]},"904":{"position":[[1270,7]]},"918":{"position":[[1562,7]]},"919":{"position":[[744,7]]},"922":{"position":[[157,6],[596,7],[740,6],[2885,6]]},"931":{"position":[[925,7]]},"988":{"position":[[253,6],[264,6]]},"989":{"position":[[749,6],[760,6],[1174,6],[1188,6]]},"991":{"position":[[302,6],[327,6],[443,6],[472,6]]},"1003":{"position":[[253,6],[264,6]]},"1004":{"position":[[832,6],[843,6],[1257,6],[1271,6]]},"1009":{"position":[[328,6],[365,6],[390,6],[506,6],[535,6]]},"1010":{"position":[[206,6]]},"1043":{"position":[[624,7]]},"1051":{"position":[[880,7]]},"1059":{"position":[[644,7]]},"1067":{"position":[[601,6]]},"1070":{"position":[[435,6],[445,6],[545,6],[559,6]]},"1101":{"position":[[71,6],[86,6],[143,6]]},"1133":{"position":[[432,6],[458,6],[544,6],[574,6]]},"1285":{"position":[[1118,6],[1146,6],[1246,6],[1266,6]]},"1286":{"position":[[2402,6],[2475,7]]},"1292":{"position":[[2916,6]]},"1300":{"position":[[1118,6],[1146,6],[1246,6],[1266,6]]},"1301":{"position":[[2238,6],[2311,7]]},"1306":{"position":[[2916,6]]},"1324":{"position":[[1118,6],[1146,6],[1246,6],[1266,6]]},"1325":{"position":[[2402,6],[2475,7]]},"1329":{"position":[[2916,6]]},"1362":{"position":[[323,6],[333,6],[394,6],[422,6]]},"1373":{"position":[[862,7]]},"1374":{"position":[[862,7]]},"1397":{"position":[[641,7]]},"1398":{"position":[[640,7]]},"1409":{"position":[[624,7]]},"1418":{"position":[[66,7],[83,8]]}},"keywords":{}}],["client.xxxxxxxxx",{"_index":3499,"title":{},"content":{"388":{"position":[[248,16]]}},"keywords":{}}],["client_email",{"_index":4092,"title":{},"content":{"548":{"position":[[1369,13]]}},"keywords":{}}],["client_id",{"_index":3496,"title":{},"content":{"388":{"position":[[215,10]]},"446":{"position":[[264,9]]},"449":{"position":[[213,10]]},"557":{"position":[[221,10]]},"671":{"position":[[112,10]]},"726":{"position":[[346,9]]},"728":{"position":[[183,10]]},"742":{"position":[[110,10]]},"886":{"position":[[121,10]]},"992":{"position":[[130,10]]},"1010":{"position":[[213,10]]},"1016":{"position":[[161,10]]},"1071":{"position":[[220,10]]},"1362":{"position":[[312,10]]},"1363":{"position":[[181,10]]}},"keywords":{}}],["client_secret",{"_index":3500,"title":{},"content":{"388":{"position":[[265,14]]},"446":{"position":[[278,14]]},"449":{"position":[[261,14]]},"557":{"position":[[251,14]]},"670":{"position":[[152,14]]},"671":{"position":[[146,14]]},"726":{"position":[[360,13]]},"728":{"position":[[248,14]]},"741":{"position":[[150,14]]},"742":{"position":[[136,14]]},"885":{"position":[[149,14]]},"886":{"position":[[147,14]]},"992":{"position":[[158,14]]},"1010":{"position":[[241,14]]},"1016":{"position":[[189,14]]},"1071":{"position":[[248,14]]},"1076":{"position":[[206,14]]},"1078":{"position":[[129,14]]},"1101":{"position":[[112,14]]},"1362":{"position":[[379,14]]},"1363":{"position":[[209,14]]}},"keywords":{}}],["clipboard",{"_index":6374,"title":{},"content":{"1384":{"position":[[464,9]]}},"keywords":{}}],["clob",{"_index":5641,"title":{},"content":{"1140":{"position":[[2708,4]]},"1316":{"position":[[2708,4]]},"1340":{"position":[[2708,4]]},"1351":{"position":[[2708,4]]},"1379":{"position":[[3120,4]]},"1403":{"position":[[3120,4]]},"1414":{"position":[[3120,4]]},"1431":{"position":[[2731,4]]}},"keywords":{}}],["clock",{"_index":2850,"title":{},"content":{"279":{"position":[[630,5]]}},"keywords":{}}],["clone",{"_index":1456,"title":{},"content":{"101":{"position":[[495,6]]},"112":{"position":[[972,6]]},"989":{"position":[[207,7]]},"1004":{"position":[[290,7]]},"1292":{"position":[[305,5]]},"1306":{"position":[[305,5]]},"1329":{"position":[[305,5]]}},"keywords":{}}],["close",{"_index":39,"title":{},"content":{"1":{"position":[[470,6]]},"20":{"position":[[358,7]]},"74":{"position":[[592,7]]},"126":{"position":[[91,7]]},"183":{"position":[[4682,5]]},"228":{"position":[[842,6]]},"230":{"position":[[1185,6]]},"238":{"position":[[541,5]]},"364":{"position":[[189,5]]},"922":{"position":[[937,6]]},"1140":{"position":[[2740,5]]},"1292":{"position":[[338,5]]},"1306":{"position":[[338,5]]},"1316":{"position":[[2740,5]]},"1329":{"position":[[338,5]]},"1340":{"position":[[2740,5]]},"1351":{"position":[[2740,5]]},"1379":{"position":[[3170,5]]},"1403":{"position":[[3170,5]]},"1414":{"position":[[3170,5]]},"1431":{"position":[[2763,5]]},"1443":{"position":[[502,6]]},"1470":{"position":[[212,5]]}},"keywords":{}}],["closer",{"_index":2558,"title":{},"content":{"236":{"position":[[2551,6]]},"321":{"position":[[1755,6]]}},"keywords":{}}],["closest",{"_index":3142,"title":{},"content":{"321":{"position":[[1412,7]]}},"keywords":{}}],["cloud",{"_index":61,"title":{"170":{"position":[[17,5]]},"171":{"position":[[7,5]]},"223":{"position":[[17,6]]},"287":{"position":[[7,5]]},"319":{"position":[[23,5]]},"419":{"position":[[18,5]]},"440":{"position":[[18,5]]},"542":{"position":[[7,5]]},"547":{"position":[[18,5]]},"596":{"position":[[7,5]]},"806":{"position":[[7,5]]},"928":{"position":[[7,5]]},"1056":{"position":[[7,5]]},"1225":{"position":[[7,5]]},"1271":{"position":[[25,5]]},"1288":{"position":[[17,5]]},"1294":{"position":[[7,5]]},"1297":{"position":[[31,5]]},"1342":{"position":[[7,5]]},"1345":{"position":[[31,5]]},"1395":{"position":[[7,5]]},"1397":{"position":[[13,5]]}},"content":{"1":{"position":[[914,5]]},"3":{"position":[[144,5],[188,5]]},"4":{"position":[[57,5]]},"16":{"position":[[769,5],[1017,5]]},"21":{"position":[[751,5]]},"30":{"position":[[170,5]]},"32":{"position":[[284,5]]},"34":{"position":[[299,5],[500,5]]},"37":{"position":[[254,5]]},"46":{"position":[[22,5]]},"67":{"position":[[351,5],[499,5]]},"77":{"position":[[142,5],[315,5]]},"82":{"position":[[616,5],[1536,5]]},"83":{"position":[[330,5]]},"154":{"position":[[75,5],[1206,5],[1366,5],[1661,5]]},"162":{"position":[[1454,5]]},"168":{"position":[[176,5],[232,5],[347,5]]},"170":{"position":[[50,5],[136,5],[189,5]]},"174":{"position":[[30,5],[187,5]]},"175":{"position":[[106,5]]},"179":{"position":[[174,5],[547,5]]},"183":{"position":[[38,5]]},"189":{"position":[[1212,5]]},"192":{"position":[[1392,5]]},"207":{"position":[[207,5]]},"216":{"position":[[258,5]]},"221":{"position":[[144,5]]},"223":{"position":[[64,6]]},"239":{"position":[[810,5]]},"259":{"position":[[944,5],[2525,5]]},"266":{"position":[[351,5]]},"267":{"position":[[46,5]]},"289":{"position":[[157,5],[374,5]]},"300":{"position":[[342,5]]},"319":{"position":[[159,5]]},"320":{"position":[[1057,5],[1189,5],[1332,5]]},"321":{"position":[[329,5],[637,5],[1332,5]]},"322":{"position":[[1756,5]]},"323":{"position":[[699,5]]},"326":{"position":[[1272,5]]},"329":{"position":[[670,5]]},"330":{"position":[[401,5],[447,5]]},"363":{"position":[[1000,5],[1152,5],[1237,5],[1307,5]]},"367":{"position":[[885,5]]},"370":{"position":[[1792,5]]},"419":{"position":[[1,5]]},"440":{"position":[[1,5]]},"475":{"position":[[77,5],[121,5]]},"477":{"position":[[559,5],[806,5]]},"478":{"position":[[417,5]]},"487":{"position":[[16,5],[513,5]]},"545":{"position":[[587,5]]},"547":{"position":[[1,5]]},"571":{"position":[[513,6]]},"581":{"position":[[190,6]]},"593":{"position":[[98,5]]},"597":{"position":[[77,5],[120,5]]},"598":{"position":[[523,5],[769,5]]},"599":{"position":[[417,5]]},"601":{"position":[[89,5],[200,5]]},"617":{"position":[[435,6]]},"764":{"position":[[964,5],[1034,5]]},"777":{"position":[[964,5],[1034,5]]},"784":{"position":[[184,5]]},"788":{"position":[[40,5],[201,5]]},"790":{"position":[[117,5]]},"804":{"position":[[962,5],[1032,5]]},"808":{"position":[[703,5],[1496,5]]},"819":{"position":[[962,5],[1032,5]]},"835":{"position":[[962,5],[1032,5]]},"902":{"position":[[69,5]]},"914":{"position":[[69,5],[235,5]]},"916":{"position":[[122,5]]},"931":{"position":[[642,6],[875,5],[1975,5]]},"1039":{"position":[[67,5],[359,5]]},"1041":{"position":[[143,5]]},"1050":{"position":[[1057,5]]},"1059":{"position":[[1822,5]]},"1120":{"position":[[1117,5],[1207,5],[1282,5]]},"1136":{"position":[[439,5]]},"1138":{"position":[[1083,5]]},"1176":{"position":[[51,5],[137,5]]},"1177":{"position":[[87,5]]},"1179":{"position":[[113,5]]},"1196":{"position":[[155,5]]},"1198":{"position":[[273,5]]},"1211":{"position":[[142,5]]},"1218":{"position":[[142,5]]},"1226":{"position":[[47,5]]},"1227":{"position":[[177,5]]},"1228":{"position":[[192,5]]},"1229":{"position":[[120,5]]},"1230":{"position":[[473,5]]},"1233":{"position":[[16,5]]},"1234":{"position":[[8,5]]},"1245":{"position":[[387,6]]},"1255":{"position":[[184,5]]},"1271":{"position":[[25,5],[79,5]]},"1277":{"position":[[254,5]]},"1282":{"position":[[87,5],[177,5],[213,5],[312,5]]},"1288":{"position":[[56,5],[187,5],[286,5]]},"1289":{"position":[[620,5],[890,5],[1539,5]]},"1298":{"position":[[64,6]]},"1303":{"position":[[1618,5]]},"1310":{"position":[[87,5],[187,5],[228,5],[327,5],[860,5]]},"1322":{"position":[[1109,5]]},"1346":{"position":[[64,6]]},"1397":{"position":[[1057,5]]},"1398":{"position":[[1060,5]]},"1407":{"position":[[142,5]]},"1425":{"position":[[156,6]]}},"keywords":{}}],["cloud_provid",{"_index":3240,"title":{},"content":{"344":{"position":[[135,15]]}},"keywords":{}}],["cloudsql",{"_index":2418,"title":{},"content":{"212":{"position":[[159,8]]}},"keywords":{}}],["cloudsql.logical_decod",{"_index":5072,"title":{},"content":{"931":{"position":[[800,25]]}},"keywords":{}}],["cloudsqlsuperus",{"_index":5073,"title":{},"content":{"931":{"position":[[1158,17]]}},"keywords":{}}],["cluster",{"_index":767,"title":{},"content":{"45":{"position":[[260,7]]},"199":{"position":[[223,8]]},"203":{"position":[[73,8],[388,7]]},"204":{"position":[[113,8],[157,7]]},"333":{"position":[[72,7]]},"402":{"position":[[111,8],[167,8]]},"428":{"position":[[9,7]]},"429":{"position":[[85,8],[436,9],[756,8],[1116,8]]},"432":{"position":[[130,7],[227,7]]},"757":{"position":[[1222,7]]},"770":{"position":[[1222,7]]},"792":{"position":[[61,8],[115,8],[1146,8],[1472,8],[1508,8],[1572,7]]},"794":{"position":[[655,7]]},"797":{"position":[[1222,7]]},"809":{"position":[[655,7]]},"812":{"position":[[1222,7]]},"828":{"position":[[1222,7]]},"867":{"position":[[1930,7]]},"918":{"position":[[61,8],[115,8],[1122,8],[1335,7],[1467,8],[1487,7]]},"1149":{"position":[[49,7],[516,8]]},"1151":{"position":[[127,7],[1198,8]]},"1154":{"position":[[25,7],[108,7],[328,7]]},"1155":{"position":[[305,7]]},"1194":{"position":[[49,7],[237,7]]},"1196":{"position":[[821,7],[1196,7]]},"1198":{"position":[[39,7]]},"1286":{"position":[[712,7]]},"1325":{"position":[[712,7]]},"1356":{"position":[[559,10],[594,10],[1034,10],[1057,10]]},"1379":{"position":[[3220,9]]},"1403":{"position":[[3220,9]]},"1414":{"position":[[3220,9]]},"1417":{"position":[[128,7]]},"1418":{"position":[[24,7]]}},"keywords":{}}],["cluster.account.u",{"_index":5747,"title":{},"content":{"1152":{"position":[[155,18]]}},"keywords":{}}],["cluster.properli",{"_index":3538,"title":{},"content":{"400":{"position":[[96,16]]}},"keywords":{}}],["cluster.typ",{"_index":5040,"title":{},"content":{"918":{"position":[[1318,13]]}},"keywords":{}}],["cluster.u",{"_index":3547,"title":{},"content":{"403":{"position":[[139,10]]}},"keywords":{}}],["clusterparamet",{"_index":4708,"title":{},"content":{"792":{"position":[[1284,16]]}},"keywords":{}}],["co",{"_index":202,"title":{},"content":{"6":{"position":[[111,3]]},"8":{"position":[[112,3]]},"105":{"position":[[198,2]]},"107":{"position":[[479,2]]},"112":{"position":[[725,2]]},"296":{"position":[[3283,2]]},"337":{"position":[[331,2]]},"1140":{"position":[[3440,3]]},"1316":{"position":[[3440,3]]},"1340":{"position":[[3440,3]]},"1351":{"position":[[3440,3]]},"1431":{"position":[[3463,3]]}},"keywords":{}}],["coalesc",{"_index":5643,"title":{},"content":{"1140":{"position":[[2776,8]]},"1292":{"position":[[375,8]]},"1306":{"position":[[375,8]]},"1316":{"position":[[2776,8]]},"1329":{"position":[[375,8]]},"1340":{"position":[[2776,8]]},"1351":{"position":[[2776,8]]},"1379":{"position":[[3274,8]]},"1403":{"position":[[3274,8]]},"1414":{"position":[[3274,8]]},"1431":{"position":[[2799,8]]}},"keywords":{}}],["coalesce($length$new",{"_index":2774,"title":{},"content":{"254":{"position":[[754,20],[2811,20],[3472,20]]}},"keywords":{}}],["code",{"_index":614,"title":{"64":{"position":[[11,4]]},"315":{"position":[[19,5]]}},"content":{"26":{"position":[[427,4],[487,4]]},"63":{"position":[[481,4]]},"80":{"position":[[118,4]]},"94":{"position":[[2394,5]]},"97":{"position":[[195,4]]},"99":{"position":[[179,5],[649,5]]},"102":{"position":[[313,4]]},"278":{"position":[[616,4]]},"281":{"position":[[2707,4]]},"296":{"position":[[2990,4],[5118,4],[6580,4]]},"314":{"position":[[2477,4]]},"315":{"position":[[113,5],[1202,4]]},"446":{"position":[[348,4]]},"1292":{"position":[[416,4]]},"1306":{"position":[[416,4]]},"1329":{"position":[[416,4]]}},"keywords":{}}],["codec",{"_index":21,"title":{},"content":{"1":{"position":[[274,5]]},"3":{"position":[[977,5]]}},"keywords":{}}],["codesrefundssubscript",{"_index":5284,"title":{},"content":{"1073":{"position":[[297,24]]}},"keywords":{}}],["cohort",{"_index":3643,"title":{},"content":{"425":{"position":[[226,7]]}},"keywords":{}}],["collabor",{"_index":1761,"title":{},"content":{"136":{"position":[[224,11]]},"529":{"position":[[319,13]]},"1461":{"position":[[635,13],[4236,14],[4396,14]]}},"keywords":{}}],["collaps",{"_index":2432,"title":{},"content":{"218":{"position":[[613,9]]},"291":{"position":[[851,9]]},"302":{"position":[[851,9]]}},"keywords":{}}],["collat",{"_index":5644,"title":{},"content":{"1140":{"position":[[2817,7],[2849,9]]},"1292":{"position":[[450,7],[491,9]]},"1306":{"position":[[450,7],[491,9]]},"1316":{"position":[[2817,7],[2849,9]]},"1329":{"position":[[450,7],[491,9]]},"1340":{"position":[[2817,7],[2849,9]]},"1351":{"position":[[2817,7],[2849,9]]},"1370":{"position":[[611,7]]},"1379":{"position":[[3332,7],[3392,9]]},"1403":{"position":[[3332,7],[3392,9]]},"1414":{"position":[[3332,7],[3392,9]]},"1431":{"position":[[2840,7],[2872,9]]}},"keywords":{}}],["collect",{"_index":3,"title":{"34":{"position":[[0,12]]},"65":{"position":[[0,11]]},"68":{"position":[[8,10]]},"139":{"position":[[21,12]]},"141":{"position":[[0,11]]},"148":{"position":[[0,10]]},"192":{"position":[[22,10]]},"207":{"position":[[14,12]]},"228":{"position":[[9,12]]},"229":{"position":[[8,12]]},"293":{"position":[[16,11]]},"307":{"position":[[14,11]]},"661":{"position":[[7,10]]},"805":{"position":[[6,10]]},"820":{"position":[[6,10]]},"836":{"position":[[6,10]]},"1047":{"position":[[16,10]]},"1055":{"position":[[16,10]]},"1063":{"position":[[16,10]]},"1123":{"position":[[0,10]]}},"content":{"1":{"position":[[6,11],[120,12],[763,10],[959,10]]},"2":{"position":[[35,10],[197,11],[306,10],[771,10]]},"4":{"position":[[16,10],[380,11]]},"6":{"position":[[45,10],[442,11],[518,9]]},"7":{"position":[[98,9],[412,7]]},"8":{"position":[[46,10],[248,11],[357,10]]},"11":{"position":[[41,12],[123,12],[172,12],[305,12],[489,10],[575,10],[616,10],[902,11],[1017,10],[1295,10],[1315,10],[1500,10],[1680,10]]},"12":{"position":[[52,10],[486,11]]},"13":{"position":[[1100,10],[1167,10],[1219,10],[1362,10],[1402,11],[1548,10]]},"14":{"position":[[23,10],[133,10],[270,10],[376,11],[400,10],[590,10],[746,10],[1041,10]]},"16":{"position":[[55,11],[131,12]]},"17":{"position":[[21,11],[211,11]]},"20":{"position":[[160,12]]},"21":{"position":[[266,10],[407,10]]},"23":{"position":[[162,10]]},"27":{"position":[[55,12]]},"32":{"position":[[397,10],[506,11],[537,11]]},"33":{"position":[[114,12]]},"34":{"position":[[1,11],[85,11],[144,11],[157,11],[255,10],[368,10],[456,11],[635,10],[755,10],[905,11]]},"35":{"position":[[90,12],[272,11]]},"36":{"position":[[68,11],[152,10],[288,12]]},"40":{"position":[[19,10],[88,12]]},"41":{"position":[[5,11],[277,11],[583,10]]},"42":{"position":[[12,10],[74,10],[138,10],[311,12],[428,11]]},"43":{"position":[[167,11],[314,11],[393,10]]},"44":{"position":[[49,12],[230,12],[371,10],[435,10],[536,10]]},"45":{"position":[[30,10],[409,10],[539,11]]},"46":{"position":[[6,11],[128,11]]},"48":{"position":[[49,12],[103,10]]},"54":{"position":[[424,10],[666,10]]},"55":{"position":[[477,10],[649,11]]},"56":{"position":[[346,10],[577,12],[697,10],[741,11],[1351,11],[1452,12],[1514,10],[2076,10]]},"60":{"position":[[653,11],[699,12],[743,10],[839,11],[876,11]]},"61":{"position":[[677,11],[700,11]]},"62":{"position":[[705,11],[770,11],[825,11]]},"66":{"position":[[115,11],[580,10],[788,10]]},"67":{"position":[[842,11],[1134,11],[1322,11],[1935,10]]},"68":{"position":[[48,10],[198,10],[374,11],[395,11],[492,10],[528,10],[559,10],[755,11],[774,10],[850,11],[869,10],[972,12],[1179,11],[1413,10],[1659,11],[1838,12]]},"69":{"position":[[1,11],[91,11],[155,12],[193,11],[249,11],[275,10],[490,11],[563,10],[804,11],[884,10]]},"70":{"position":[[12,10],[670,12]]},"71":{"position":[[12,10],[186,12],[555,10]]},"72":{"position":[[185,10],[245,10]]},"73":{"position":[[3,10],[48,12],[166,12]]},"74":{"position":[[3,10],[52,10],[350,10],[692,10],[935,11]]},"75":{"position":[[104,12],[290,10],[321,10],[446,11]]},"76":{"position":[[42,10],[148,11],[232,10],[357,12],[486,11],[917,11]]},"77":{"position":[[1,11],[67,10],[282,11],[408,10],[502,10],[647,11]]},"81":{"position":[[1553,10],[1787,11],[1916,11]]},"87":{"position":[[209,11],[572,10]]},"90":{"position":[[32,12]]},"92":{"position":[[55,10]]},"94":{"position":[[85,12],[235,10],[1084,11],[1267,10],[1365,10],[1469,11],[1617,10],[1967,10],[2868,10]]},"96":{"position":[[86,10]]},"97":{"position":[[614,11],[667,10]]},"99":{"position":[[64,10]]},"100":{"position":[[937,11],[1150,10]]},"102":{"position":[[433,11],[636,10]]},"105":{"position":[[33,10],[633,10],[737,11],[986,10],[1068,10],[1303,10],[1415,12],[1438,12]]},"106":{"position":[[37,11],[92,11],[528,10],[658,11]]},"108":{"position":[[229,11]]},"109":{"position":[[58,12],[105,10],[325,12]]},"110":{"position":[[881,10],[951,10],[1069,10],[1166,10]]},"111":{"position":[[56,10],[145,10],[232,10],[325,10]]},"113":{"position":[[12,10]]},"114":{"position":[[252,10],[550,10]]},"115":{"position":[[293,11],[322,10],[410,10],[473,10]]},"117":{"position":[[16,10]]},"120":{"position":[[722,11],[818,11],[938,10],[1028,10],[1169,10],[1519,10]]},"121":{"position":[[96,10],[253,10],[474,11],[519,10],[587,10],[854,10],[892,12],[1273,11],[1582,11],[1738,10]]},"122":{"position":[[72,11],[255,10],[1289,10]]},"123":{"position":[[60,10],[135,10],[204,12]]},"124":{"position":[[608,10],[920,10],[983,10]]},"125":{"position":[[514,10],[822,10]]},"128":{"position":[[39,11],[331,11],[478,11],[655,11]]},"129":{"position":[[52,10],[279,12],[723,11],[851,11],[988,11]]},"130":{"position":[[139,11]]},"132":{"position":[[154,11],[461,11],[621,11]]},"133":{"position":[[397,11]]},"137":{"position":[[154,12],[312,10]]},"138":{"position":[[540,11],[2055,11],[2280,12],[2328,11],[2410,12],[2456,11],[2618,11]]},"140":{"position":[[438,11]]},"141":{"position":[[5,11],[49,11],[355,10],[751,11],[802,10],[828,11],[892,10],[1175,10],[1708,10],[1818,11],[1834,10],[1970,10],[2291,10]]},"142":{"position":[[2115,11],[2340,12],[2389,11],[2488,12],[2534,11],[2696,11]]},"144":{"position":[[218,11],[541,11],[569,10],[601,11],[746,11]]},"146":{"position":[[487,11],[761,12],[788,11]]},"148":{"position":[[33,10],[51,11],[93,10]]},"149":{"position":[[27,11],[43,10],[160,11],[406,11],[484,11],[734,12],[761,11],[1183,10],[1249,11],[1294,10]]},"150":{"position":[[34,11],[202,11]]},"152":{"position":[[496,12],[737,12],[764,11]]},"154":{"position":[[1250,12]]},"156":{"position":[[595,10],[640,11]]},"158":{"position":[[365,10]]},"160":{"position":[[429,10],[560,10],[710,12],[952,12]]},"161":{"position":[[615,12]]},"162":{"position":[[106,10],[158,11],[684,11],[803,10],[1208,10],[1356,11],[1488,11],[1977,12]]},"163":{"position":[[6,11],[68,11],[610,10]]},"164":{"position":[[382,10],[860,10],[951,10],[1334,10],[1468,10]]},"165":{"position":[[60,11],[234,10],[927,10],[1415,10],[1791,10],[2075,11],[2240,10]]},"166":{"position":[[315,12],[602,10]]},"168":{"position":[[278,11]]},"170":{"position":[[80,10]]},"180":{"position":[[465,10]]},"181":{"position":[[126,11]]},"182":{"position":[[13,11],[120,10],[169,10],[414,11],[441,10],[510,11],[591,10]]},"183":{"position":[[116,11],[189,10],[1128,12],[1542,10],[2094,10],[2414,11],[3514,12]]},"184":{"position":[[611,11],[655,10],[779,10]]},"189":{"position":[[1155,12],[1401,10]]},"190":{"position":[[1634,11],[1715,10],[2101,11],[2180,12]]},"192":{"position":[[1202,11],[1330,10],[1666,10],[1703,10]]},"197":{"position":[[898,11],[1079,11]]},"198":{"position":[[400,10]]},"206":{"position":[[1090,11]]},"207":{"position":[[152,12],[274,11],[382,11],[719,12],[828,10],[1315,10],[1417,11],[1638,10]]},"208":{"position":[[30,11],[997,11],[1307,10],[1406,10],[1463,10],[1624,10],[1655,11]]},"209":{"position":[[488,10],[953,11]]},"210":{"position":[[24,11],[114,11],[221,10],[554,10],[591,11],[1627,11],[1789,11],[3925,10],[4030,11]]},"211":{"position":[[219,11]]},"213":{"position":[[363,10]]},"216":{"position":[[218,12]]},"217":{"position":[[107,11],[1191,11],[1215,11],[1275,12],[1368,12],[1425,11],[1471,10],[1582,11],[1656,11],[1742,11],[1772,10],[1797,10],[1835,10],[1901,10],[2031,12],[2078,12],[2264,11]]},"218":{"position":[[48,12],[638,11],[690,10],[979,11],[1044,11],[1074,12],[1106,11],[1132,11],[1156,11],[1283,10],[1611,10],[1650,10],[1755,10]]},"219":{"position":[[225,11],[310,10],[378,12],[452,11],[548,10]]},"221":{"position":[[362,7]]},"227":{"position":[[233,11]]},"228":{"position":[[8,10],[161,11],[242,12],[298,11],[326,10],[703,10],[1454,12]]},"229":{"position":[[8,10],[665,10],[919,10]]},"230":{"position":[[45,10],[328,11],[446,10],[478,10],[539,10],[1228,12]]},"232":{"position":[[534,11],[636,11]]},"239":{"position":[[612,12],[755,12],[1114,11],[1524,10],[1812,11],[1852,11],[2152,10],[2419,11],[2530,10]]},"240":{"position":[[121,11],[3816,11],[4635,10]]},"245":{"position":[[1,11],[93,11],[204,11]]},"246":{"position":[[44,11],[165,12]]},"250":{"position":[[1211,10]]},"253":{"position":[[424,11],[551,11],[576,10],[646,10],[860,11],[879,10],[1111,11]]},"254":{"position":[[236,12],[904,11],[1031,10],[2200,10],[2383,10],[2432,10],[2561,10],[2596,11],[3012,11],[3113,10],[3136,10]]},"255":{"position":[[133,12],[1222,11]]},"256":{"position":[[96,11]]},"259":{"position":[[535,11],[572,11],[693,12],[781,10],[1064,11],[1094,10],[1119,10],[1223,10],[2229,11],[2266,11],[2359,10],[2431,11],[2645,11],[2675,10],[2700,10],[2804,10]]},"263":{"position":[[668,12]]},"266":{"position":[[134,11]]},"267":{"position":[[125,11],[208,10],[259,11],[292,10],[424,11],[1550,10]]},"268":{"position":[[303,10],[767,12],[1193,10],[1406,12],[2121,11]]},"269":{"position":[[392,12],[764,10],[977,12],[1583,11]]},"270":{"position":[[377,10],[429,12],[549,12],[602,11],[697,10],[731,10],[906,10],[1003,10],[1176,10],[1244,10],[1352,10],[2199,11]]},"271":{"position":[[160,12],[464,10]]},"274":{"position":[[86,12],[250,12],[728,12],[1027,12],[1546,11]]},"277":{"position":[[288,10],[543,12],[1008,11],[1143,11],[1288,10]]},"278":{"position":[[877,12]]},"279":{"position":[[594,10],[1018,12]]},"280":{"position":[[682,10],[738,10],[1131,12]]},"281":{"position":[[865,12]]},"289":{"position":[[362,11],[407,11],[473,11]]},"290":{"position":[[96,10],[126,10],[1228,10],[1258,11],[1313,11],[1349,11],[1389,12],[1543,12],[1606,11],[1867,11]]},"291":{"position":[[876,11],[928,11],[1030,11],[1106,11],[1242,11],[1529,11],[1559,10],[1584,10],[1688,10],[1878,12]]},"295":{"position":[[1015,11],[1272,12],[1351,11],[1816,12],[1838,11],[1857,10]]},"296":{"position":[[232,12],[1024,10],[1191,10],[1723,12],[1886,10],[2426,7],[3171,11],[4463,10],[4743,10],[4942,10],[6928,11],[7452,11]]},"297":{"position":[[76,12]]},"300":{"position":[[328,11]]},"301":{"position":[[95,12],[1452,10],[1832,11]]},"302":{"position":[[876,11],[928,10],[1015,10],[1210,10],[1449,11],[1493,10],[1597,10],[1791,11]]},"305":{"position":[[6,11],[330,10],[401,10],[461,10]]},"306":{"position":[[110,10],[528,10]]},"307":{"position":[[99,10],[138,10],[246,10],[319,10],[364,10],[458,11],[587,10],[661,10],[716,10],[827,10],[1260,12],[1743,10],[1819,10],[2125,12],[2649,10],[3169,11],[3322,11]]},"308":{"position":[[92,10]]},"309":{"position":[[1660,11],[2094,12],[2691,12],[3493,11],[3646,11]]},"310":{"position":[[151,12]]},"313":{"position":[[424,11],[551,11],[576,10],[646,10],[860,11],[879,10],[1111,11]]},"314":{"position":[[236,12],[582,11],[752,10],[1613,10],[1741,10],[1924,10],[1973,10],[2130,11],[2192,10],[2227,11],[2688,10],[2711,10]]},"315":{"position":[[953,10],[2510,10]]},"316":{"position":[[133,12],[1547,11]]},"317":{"position":[[103,11]]},"319":{"position":[[462,11],[576,11],[773,11],[931,10]]},"320":{"position":[[1577,12],[1596,11],[1684,11],[1755,11],[1830,10]]},"321":{"position":[[199,10],[496,11],[688,10],[774,12],[812,11],[912,10],[986,11],[2133,12]]},"322":{"position":[[725,12],[1013,11],[1450,10],[1709,11],[1737,10]]},"323":{"position":[[519,13],[647,12],[665,11],[793,10],[967,11],[1074,10]]},"326":{"position":[[432,12],[451,11],[609,11],[733,11],[928,11],[1099,10],[1294,10]]},"351":{"position":[[416,11]]},"359":{"position":[[394,11]]},"374":{"position":[[282,11],[430,11]]},"377":{"position":[[310,9],[469,9]]},"381":{"position":[[586,10]]},"387":{"position":[[1211,10],[1419,10]]},"408":{"position":[[626,11]]},"419":{"position":[[177,11]]},"421":{"position":[[185,10]]},"424":{"position":[[449,11]]},"427":{"position":[[69,11]]},"440":{"position":[[193,11]]},"443":{"position":[[544,10]]},"448":{"position":[[1304,10]]},"451":{"position":[[194,10]]},"454":{"position":[[638,11]]},"457":{"position":[[198,10]]},"460":{"position":[[655,11]]},"463":{"position":[[304,10]]},"466":{"position":[[362,11]]},"470":{"position":[[67,10]]},"480":{"position":[[143,11],[1294,12]]},"486":{"position":[[330,11],[380,10]]},"488":{"position":[[666,11]]},"489":{"position":[[842,11]]},"491":{"position":[[279,12],[401,10]]},"492":{"position":[[468,11]]},"499":{"position":[[103,11]]},"504":{"position":[[114,11]]},"506":{"position":[[461,10]]},"509":{"position":[[630,10]]},"512":{"position":[[221,10]]},"517":{"position":[[4063,11]]},"521":{"position":[[374,10]]},"529":{"position":[[753,10]]},"534":{"position":[[1780,10]]},"537":{"position":[[210,10]]},"547":{"position":[[178,11]]},"550":{"position":[[458,10]]},"556":{"position":[[2282,10]]},"558":{"position":[[136,11]]},"568":{"position":[[51,11],[268,10]]},"580":{"position":[[210,10]]},"590":{"position":[[147,12],[161,11],[225,10],[317,10],[715,10],[827,11],[962,12]]},"593":{"position":[[453,11],[544,10],[602,11]]},"595":{"position":[[185,11],[490,11],[868,12],[930,11],[1006,10],[1693,12],[1828,11]]},"602":{"position":[[99,11],[403,10],[510,10],[632,10],[808,11]]},"605":{"position":[[174,11],[416,10]]},"606":{"position":[[355,11]]},"611":{"position":[[1283,10]]},"622":{"position":[[422,10]]},"625":{"position":[[261,11]]},"628":{"position":[[486,10]]},"631":{"position":[[589,11]]},"634":{"position":[[95,11]]},"639":{"position":[[113,11]]},"649":{"position":[[84,10]]},"658":{"position":[[330,11],[380,10]]},"659":{"position":[[823,11]]},"660":{"position":[[453,11],[504,10],[880,10]]},"661":{"position":[[216,11],[263,10]]},"662":{"position":[[842,11]]},"664":{"position":[[300,12],[422,10],[657,10]]},"665":{"position":[[468,11]]},"667":{"position":[[271,10]]},"670":{"position":[[749,11]]},"674":{"position":[[330,11],[380,10]]},"676":{"position":[[666,11]]},"677":{"position":[[842,11]]},"679":{"position":[[279,12],[401,10]]},"680":{"position":[[468,11]]},"682":{"position":[[242,10]]},"685":{"position":[[561,11]]},"689":{"position":[[330,11],[380,10]]},"691":{"position":[[666,11]]},"692":{"position":[[842,11]]},"694":{"position":[[279,12],[401,10]]},"695":{"position":[[468,11]]},"697":{"position":[[611,10]]},"700":{"position":[[400,11]]},"703":{"position":[[176,10]]},"706":{"position":[[399,11]]},"709":{"position":[[864,10]]},"712":{"position":[[591,11]]},"715":{"position":[[233,10]]},"720":{"position":[[892,10]]},"738":{"position":[[788,10]]},"741":{"position":[[576,11]]},"744":{"position":[[178,10]]},"747":{"position":[[1459,11]]},"763":{"position":[[431,11]]},"776":{"position":[[431,11]]},"779":{"position":[[232,11]]},"782":{"position":[[594,11],[613,10]]},"783":{"position":[[214,11]]},"785":{"position":[[142,10]]},"786":{"position":[[339,10]]},"803":{"position":[[437,11]]},"805":{"position":[[12,10],[144,10],[309,10]]},"818":{"position":[[437,11]]},"820":{"position":[[12,10],[144,10],[309,10]]},"821":{"position":[[78,11]]},"834":{"position":[[437,11]]},"836":{"position":[[12,10],[144,10],[309,10]]},"851":{"position":[[219,10],[680,11]]},"854":{"position":[[127,10]]},"859":{"position":[[811,10]]},"882":{"position":[[138,10]]},"885":{"position":[[711,11]]},"888":{"position":[[193,10]]},"891":{"position":[[425,11]]},"897":{"position":[[355,11]]},"912":{"position":[[86,11]]},"947":{"position":[[1260,10]]},"956":{"position":[[214,10]]},"959":{"position":[[456,11]]},"974":{"position":[[223,12]]},"975":{"position":[[93,11]]},"976":{"position":[[96,11],[429,12]]},"977":{"position":[[283,11]]},"979":{"position":[[288,10]]},"982":{"position":[[458,11]]},"991":{"position":[[867,10]]},"994":{"position":[[146,10]]},"997":{"position":[[424,11]]},"1008":{"position":[[90,11],[373,11],[625,11],[935,12],[1485,11],[1579,11],[1754,10]]},"1009":{"position":[[1723,10]]},"1012":{"position":[[273,10]]},"1015":{"position":[[511,11]]},"1023":{"position":[[158,11]]},"1025":{"position":[[420,10]]},"1028":{"position":[[461,11]]},"1036":{"position":[[943,11]]},"1040":{"position":[[258,10]]},"1047":{"position":[[12,10],[289,10],[462,12],[532,10],[882,10],[954,10]]},"1050":{"position":[[258,10]]},"1055":{"position":[[12,10],[289,10],[462,12],[532,10],[882,10],[954,10]]},"1058":{"position":[[258,10]]},"1063":{"position":[[12,10],[289,10],[462,12],[532,10],[882,10],[954,10]]},"1065":{"position":[[145,10]]},"1070":{"position":[[1074,10]]},"1073":{"position":[[397,10]]},"1076":{"position":[[854,11]]},"1080":{"position":[[854,10]]},"1085":{"position":[[1442,10]]},"1094":{"position":[[526,11]]},"1099":{"position":[[518,10]]},"1101":{"position":[[366,11]]},"1104":{"position":[[216,10]]},"1107":{"position":[[481,11]]},"1110":{"position":[[536,10]]},"1113":{"position":[[555,11]]},"1118":{"position":[[785,11],[829,10],[1157,10]]},"1123":{"position":[[14,11],[45,10],[116,10],[322,11],[460,10],[687,11],[813,10],[845,10]]},"1128":{"position":[[453,10]]},"1133":{"position":[[1277,11]]},"1137":{"position":[[60,12],[181,11]]},"1140":{"position":[[2891,7]]},"1143":{"position":[[103,11]]},"1146":{"position":[[205,11]]},"1147":{"position":[[344,10]]},"1150":{"position":[[118,11]]},"1151":{"position":[[561,10]]},"1155":{"position":[[186,10],[442,11],[623,10]]},"1156":{"position":[[111,11],[258,11],[318,10]]},"1157":{"position":[[80,11],[218,10]]},"1161":{"position":[[103,11]]},"1162":{"position":[[489,10]]},"1164":{"position":[[6,10],[159,10],[179,10],[549,10]]},"1166":{"position":[[63,10]]},"1169":{"position":[[103,11]]},"1172":{"position":[[6,10],[243,10]]},"1173":{"position":[[205,11]]},"1174":{"position":[[344,10]]},"1178":{"position":[[60,12],[182,11]]},"1179":{"position":[[388,10]]},"1183":{"position":[[67,10]]},"1185":{"position":[[264,10]]},"1187":{"position":[[60,12],[184,11]]},"1189":{"position":[[338,11]]},"1194":{"position":[[474,10]]},"1195":{"position":[[60,12],[190,11],[542,10]]},"1197":{"position":[[344,11]]},"1200":{"position":[[1,10],[111,10],[182,10],[216,10]]},"1203":{"position":[[635,10]]},"1205":{"position":[[60,12]]},"1207":{"position":[[427,11]]},"1208":{"position":[[194,10]]},"1209":{"position":[[77,11]]},"1212":{"position":[[103,11]]},"1215":{"position":[[205,11]]},"1216":{"position":[[344,10]]},"1219":{"position":[[103,11]]},"1222":{"position":[[6,10],[243,10]]},"1223":{"position":[[205,11]]},"1224":{"position":[[344,10]]},"1226":{"position":[[259,10]]},"1229":{"position":[[60,12],[194,11]]},"1232":{"position":[[35,11]]},"1234":{"position":[[143,10]]},"1236":{"position":[[159,11]]},"1243":{"position":[[56,11],[395,10],[503,10],[605,10]]},"1246":{"position":[[60,12]]},"1247":{"position":[[839,10]]},"1248":{"position":[[371,11]]},"1250":{"position":[[144,12],[232,11]]},"1251":{"position":[[140,12]]},"1253":{"position":[[479,10]]},"1254":{"position":[[254,11]]},"1259":{"position":[[110,11]]},"1260":{"position":[[275,10]]},"1264":{"position":[[149,11]]},"1265":{"position":[[33,11],[145,11]]},"1275":{"position":[[57,10],[108,10]]},"1277":{"position":[[1113,10]]},"1279":{"position":[[150,10],[171,11],[310,11]]},"1281":{"position":[[435,10]]},"1284":{"position":[[60,12],[179,11]]},"1286":{"position":[[101,11],[1368,11]]},"1291":{"position":[[39,12]]},"1295":{"position":[[435,10]]},"1299":{"position":[[60,12],[179,11]]},"1301":{"position":[[101,11],[1204,11]]},"1305":{"position":[[39,12]]},"1309":{"position":[[253,10]]},"1312":{"position":[[60,12],[182,11]]},"1316":{"position":[[2891,7]]},"1319":{"position":[[435,10]]},"1323":{"position":[[60,12],[179,11]]},"1325":{"position":[[101,11],[1368,11]]},"1328":{"position":[[39,12]]},"1332":{"position":[[253,10]]},"1336":{"position":[[60,12],[182,11]]},"1340":{"position":[[2891,7]]},"1343":{"position":[[253,10]]},"1347":{"position":[[60,12],[182,11]]},"1351":{"position":[[2891,7]]},"1354":{"position":[[207,10],[299,10]]},"1355":{"position":[[60,12],[181,11],[217,12]]},"1356":{"position":[[463,10],[545,12],[964,10],[1308,11],[1328,10],[1363,10]]},"1357":{"position":[[276,11],[430,11]]},"1358":{"position":[[313,10],[570,10],[767,10]]},"1359":{"position":[[478,10]]},"1361":{"position":[[183,11]]},"1365":{"position":[[56,10]]},"1366":{"position":[[84,10]]},"1372":{"position":[[298,10]]},"1375":{"position":[[60,12],[183,11]]},"1379":{"position":[[3445,7]]},"1382":{"position":[[518,10]]},"1385":{"position":[[60,12],[183,11]]},"1386":{"position":[[359,10]]},"1387":{"position":[[377,11],[1003,11]]},"1391":{"position":[[54,10],[344,10],[529,10]]},"1396":{"position":[[298,10]]},"1399":{"position":[[60,12],[183,11]]},"1403":{"position":[[3445,7]]},"1406":{"position":[[298,10]]},"1410":{"position":[[60,12],[183,11]]},"1414":{"position":[[3445,7]]},"1417":{"position":[[455,10]]},"1419":{"position":[[60,12],[183,11]]},"1421":{"position":[[364,11]]},"1425":{"position":[[257,11]]},"1426":{"position":[[60,12],[185,11]]},"1429":{"position":[[593,10]]},"1431":{"position":[[2914,7]]},"1438":{"position":[[687,11]]},"1440":{"position":[[338,10],[500,10],[835,10],[911,10]]},"1446":{"position":[[108,10],[212,11],[280,12]]},"1448":{"position":[[370,11],[453,10],[539,10],[743,10],[850,11],[916,11]]},"1449":{"position":[[140,12],[190,10],[357,11]]},"1451":{"position":[[214,12],[432,12]]},"1459":{"position":[[40,10],[595,11],[949,10]]},"1461":{"position":[[776,12],[864,11],[994,11],[1545,11],[1626,10],[2152,11],[2272,12],[2569,11],[3165,11],[4141,11],[4875,12],[4983,11],[5487,11],[5543,11],[5625,11]]},"1462":{"position":[[12,10],[99,11],[396,10],[525,11],[570,10]]},"1463":{"position":[[245,12],[576,11],[778,11]]},"1464":{"position":[[102,12],[459,11],[622,11]]},"1465":{"position":[[422,12],[1153,11],[1318,11],[1419,11],[1585,11]]},"1466":{"position":[[64,12],[440,11],[573,11]]},"1467":{"position":[[405,12],[975,11],[1120,11],[1276,11],[1482,11],[2072,12],[2398,11],[2644,11]]},"1470":{"position":[[352,10],[659,11],[862,11],[1082,12],[1160,10],[1335,12]]},"1472":{"position":[[40,11],[318,11],[579,8]]},"1473":{"position":[[356,10]]},"1475":{"position":[[676,10],[751,10]]},"1476":{"position":[[111,12],[409,11],[585,11],[1173,12],[1632,11],[2004,11]]},"1477":{"position":[[885,12],[1671,11],[2015,11],[2184,11],[2436,11],[3101,12],[4011,11],[4367,11],[4546,11],[4808,11]]},"1479":{"position":[[103,11],[179,11],[254,10]]},"1480":{"position":[[644,10],[734,10],[875,10],[1225,10]]}},"keywords":{}}],["collection'",{"_index":102,"title":{},"content":{"3":{"position":[[50,12]]},"11":{"position":[[842,12],[1762,12]]},"74":{"position":[[536,12]]},"99":{"position":[[347,12]]},"106":{"position":[[245,12],[474,12]]},"129":{"position":[[576,12],[663,12]]},"141":{"position":[[268,12]]},"146":{"position":[[871,12]]},"149":{"position":[[844,12]]},"150":{"position":[[10,12],[54,12]]},"152":{"position":[[847,12]]},"160":{"position":[[300,12],[478,12]]},"182":{"position":[[663,12]]},"183":{"position":[[1588,12]]},"227":{"position":[[70,12]]},"229":{"position":[[94,12],[228,12]]},"230":{"position":[[851,12]]},"268":{"position":[[1234,12]]},"269":{"position":[[805,12]]},"270":{"position":[[1389,12]]},"290":{"position":[[1444,12]]},"301":{"position":[[1540,12]]},"302":{"position":[[1480,12]]},"595":{"position":[[18,12]]},"910":{"position":[[102,12]]},"926":{"position":[[102,12]]},"937":{"position":[[102,12]]},"953":{"position":[[102,12]]},"971":{"position":[[102,12]]},"1047":{"position":[[145,12],[486,12]]},"1055":{"position":[[145,12],[486,12]]},"1063":{"position":[[145,12],[486,12]]},"1356":{"position":[[629,12]]},"1358":{"position":[[658,12]]},"1438":{"position":[[414,12],[595,12]]}},"keywords":{}}],["collection'sschema",{"_index":1712,"title":{},"content":{"128":{"position":[[91,19]]}},"keywords":{}}],["collection(",{"_index":715,"title":{},"content":{"40":{"position":[[155,14]]},"55":{"position":[[719,13]]},"119":{"position":[[315,13],[376,13]]},"141":{"position":[[725,14]]},"427":{"position":[[173,13]]}},"keywords":{}}],["collection.dekaf",{"_index":2629,"title":{},"content":{"245":{"position":[[152,16]]}},"keywords":{}}],["collection.doc",{"_index":6664,"title":{},"content":{"1470":{"position":[[773,15]]}},"keywords":{}}],["collection.if",{"_index":1016,"title":{},"content":{"67":{"position":[[1917,13]]}},"keywords":{}}],["collection/*/subcollect",{"_index":4240,"title":{},"content":{"590":{"position":[[867,27]]}},"keywords":{}}],["collection/a",{"_index":585,"title":{},"content":{"23":{"position":[[371,12]]}},"keywords":{}}],["collection/c",{"_index":589,"title":{},"content":{"23":{"position":[[435,12]]}},"keywords":{}}],["collection/d",{"_index":587,"title":{},"content":{"23":{"position":[[403,12],[499,12]]}},"keywords":{}}],["collection_nam",{"_index":5207,"title":{},"content":{"1022":{"position":[[445,18]]},"1145":{"position":[[293,18]]},"1163":{"position":[[328,18]]},"1171":{"position":[[297,18]]},"1214":{"position":[[233,18]]},"1221":{"position":[[237,18]]}},"keywords":{}}],["collectiona",{"_index":5408,"title":{},"content":{"1118":{"position":[[26,11]]}},"keywords":{}}],["collectionacmebank/last",{"_index":2833,"title":{},"content":{"277":{"position":[[846,23]]}},"keywords":{}}],["collectioneach",{"_index":5898,"title":{},"content":{"1232":{"position":[[345,14]]}},"keywords":{}}],["collections"",{"_index":827,"title":{},"content":{"55":{"position":[[1014,17],[1096,17]]},"483":{"position":[[780,17]]}},"keywords":{}}],["collections.a",{"_index":763,"title":{},"content":{"44":{"position":[[483,13]]}},"keywords":{}}],["collections.for",{"_index":6666,"title":{},"content":{"1470":{"position":[[1066,15]]}},"keywords":{}}],["collections.view",{"_index":1750,"title":{},"content":{"135":{"position":[[487,19]]}},"keywords":{}}],["collectionsedit",{"_index":6513,"title":{},"content":{"1446":{"position":[[161,18]]}},"keywords":{}}],["collectionwith",{"_index":1333,"title":{},"content":{"94":{"position":[[40,14]]}},"keywords":{}}],["collection’",{"_index":977,"title":{},"content":{"66":{"position":[[450,12],[495,12]]}},"keywords":{}}],["collis",{"_index":6635,"title":{},"content":{"1462":{"position":[[550,10]]}},"keywords":{}}],["coloc",{"_index":2776,"title":{},"content":{"254":{"position":[[3230,8]]},"314":{"position":[[2805,8]]}},"keywords":{}}],["colon",{"_index":5827,"title":{},"content":{"1196":{"position":[[686,5]]}},"keywords":{}}],["color",{"_index":1658,"title":{},"content":{"121":{"position":[[925,8],[965,7],[1018,6],[1214,6],[1548,6]]}},"keywords":{}}],["column",{"_index":440,"title":{"480":{"position":[[18,8]]},"1164":{"position":[[8,6]]}},"content":{"14":{"position":[[913,6]]},"69":{"position":[[706,8]]},"98":{"position":[[34,6],[360,6],[483,7],[917,6],[1035,6]]},"100":{"position":[[528,6]]},"107":{"position":[[3578,7]]},"122":{"position":[[168,7],[479,6]]},"138":{"position":[[1942,6],[2307,6],[2529,6]]},"141":{"position":[[1874,6]]},"142":{"position":[[1995,6],[2368,6],[2607,6]]},"150":{"position":[[116,7]]},"158":{"position":[[584,8]]},"192":{"position":[[1626,6]]},"208":{"position":[[911,7]]},"228":{"position":[[1188,6]]},"229":{"position":[[872,6]]},"230":{"position":[[188,6]]},"263":{"position":[[472,7],[500,7]]},"271":{"position":[[137,7]]},"309":{"position":[[897,6]]},"310":{"position":[[218,6],[358,7]]},"419":{"position":[[2200,6],[2501,6]]},"441":{"position":[[809,6],[1110,6]]},"479":{"position":[[676,7]]},"480":{"position":[[337,8],[368,6],[396,8],[1213,7],[1280,7]]},"482":{"position":[[630,6]]},"483":{"position":[[146,7],[272,8]]},"504":{"position":[[1829,6],[2130,6]]},"529":{"position":[[556,7]]},"547":{"position":[[2202,6],[2503,6]]},"616":{"position":[[169,7]]},"639":{"position":[[1827,6],[2128,6]]},"738":{"position":[[351,6]]},"750":{"position":[[1063,7]]},"754":{"position":[[241,7],[362,6],[1120,8]]},"757":{"position":[[399,8],[557,7]]},"760":{"position":[[599,7]]},"763":{"position":[[153,6]]},"766":{"position":[[1063,7]]},"770":{"position":[[399,8],[557,7]]},"773":{"position":[[599,7]]},"776":{"position":[[153,6]]},"789":{"position":[[1464,7]]},"794":{"position":[[114,7],[235,6],[1324,8]]},"797":{"position":[[399,8],[557,7]]},"800":{"position":[[599,7]]},"803":{"position":[[153,6]]},"807":{"position":[[1051,7]]},"809":{"position":[[114,7],[235,6],[1324,8]]},"812":{"position":[[399,8],[557,7]]},"815":{"position":[[599,7]]},"818":{"position":[[153,6]]},"823":{"position":[[1051,7]]},"825":{"position":[[114,7],[235,6],[1160,8]]},"828":{"position":[[399,8],[557,7]]},"831":{"position":[[599,7]]},"834":{"position":[[153,6]]},"840":{"position":[[1727,7]]},"842":{"position":[[2127,6],[2280,6],[3231,6],[3254,6],[3390,6],[3413,6]]},"847":{"position":[[283,7]]},"849":{"position":[[2768,7]]},"864":{"position":[[1509,8]]},"869":{"position":[[200,6],[556,6]]},"872":{"position":[[11,6]]},"912":{"position":[[1158,6]]},"1023":{"position":[[2183,6],[2484,6]]},"1045":{"position":[[1208,7],[1226,7]]},"1047":{"position":[[650,6]]},"1053":{"position":[[1208,7],[1226,7]]},"1055":{"position":[[650,6]]},"1061":{"position":[[1208,7],[1226,7]]},"1063":{"position":[[650,6]]},"1140":{"position":[[191,7],[2925,6]]},"1144":{"position":[[927,7]]},"1155":{"position":[[144,6]]},"1164":{"position":[[53,7],[124,7],[214,6],[661,7],[695,7]]},"1213":{"position":[[604,7]]},"1247":{"position":[[931,6]]},"1267":{"position":[[439,8]]},"1285":{"position":[[461,8]]},"1292":{"position":[[530,6],[565,7]]},"1300":{"position":[[461,8]]},"1306":{"position":[[530,6],[565,7]]},"1316":{"position":[[191,7],[2925,6]]},"1317":{"position":[[379,8],[418,6],[621,6]]},"1324":{"position":[[461,8]]},"1329":{"position":[[530,6],[565,7]]},"1340":{"position":[[191,7],[2925,6]]},"1341":{"position":[[379,8],[418,6],[621,6]]},"1351":{"position":[[191,7],[2925,6]]},"1352":{"position":[[379,8],[418,6],[621,6]]},"1370":{"position":[[187,7],[622,6]]},"1379":{"position":[[3506,6]]},"1391":{"position":[[320,7]]},"1393":{"position":[[79,7],[247,8],[275,7]]},"1394":{"position":[[675,6]]},"1403":{"position":[[3506,6]]},"1414":{"position":[[3506,6]]},"1429":{"position":[[521,6]]},"1431":{"position":[[214,7],[2948,6]]},"1432":{"position":[[379,8],[418,6],[635,6]]}},"keywords":{}}],["column_format",{"_index":5989,"title":{},"content":{"1292":{"position":[[607,13]]},"1306":{"position":[[607,13]]},"1329":{"position":[[607,13]]}},"keywords":{}}],["column_nam",{"_index":5990,"title":{},"content":{"1292":{"position":[[653,11]]},"1306":{"position":[[653,11]]},"1329":{"position":[[653,11]]}},"keywords":{}}],["columnar",{"_index":6264,"title":{},"content":{"1356":{"position":[[642,8]]}},"keywords":{}}],["columns.campaign",{"_index":4545,"title":{},"content":{"738":{"position":[[471,18]]}},"keywords":{}}],["columnsthi",{"_index":4809,"title":{},"content":{"846":{"position":[[213,11]]}},"keywords":{}}],["combin",{"_index":468,"title":{},"content":{"16":{"position":[[549,11]]},"23":{"position":[[225,9]]},"74":{"position":[[632,8]]},"113":{"position":[[81,8],[857,8]]},"115":{"position":[[243,7],[1221,8]]},"124":{"position":[[497,8],[643,7]]},"128":{"position":[[286,8],[446,8]]},"161":{"position":[[406,11]]},"163":{"position":[[790,7]]},"164":{"position":[[2192,7]]},"183":{"position":[[2133,11],[2695,12]]},"193":{"position":[[579,11]]},"319":{"position":[[1055,7],[1104,7]]},"483":{"position":[[513,8]]},"977":{"position":[[4,7],[635,8]]},"1232":{"position":[[271,7]]},"1440":{"position":[[318,8],[949,8],[1049,7],[1136,7]]},"1451":{"position":[[927,9]]},"1459":{"position":[[909,8],[1013,8],[1686,11]]},"1464":{"position":[[907,8]]},"1465":{"position":[[286,8]]},"1474":{"position":[[131,11]]},"1475":{"position":[[1760,8]]}},"keywords":{}}],["come",{"_index":1917,"title":{},"content":{"162":{"position":[[1157,5],[1373,4],[1545,4]]},"192":{"position":[[506,4]]},"252":{"position":[[144,6]]},"266":{"position":[[410,5]]},"312":{"position":[[148,6]]},"454":{"position":[[127,4]]},"485":{"position":[[337,4]]},"605":{"position":[[186,4]]},"657":{"position":[[337,4]]},"673":{"position":[[337,4]]},"688":{"position":[[337,4]]},"922":{"position":[[435,5]]},"1020":{"position":[[1596,5],[1691,5],[1779,5]]}},"keywords":{}}],["comma",{"_index":3411,"title":{},"content":{"370":{"position":[[1074,5]]},"377":{"position":[[1602,5]]},"419":{"position":[[1646,5]]},"432":{"position":[[166,7]]},"441":{"position":[[255,5]]},"504":{"position":[[1275,5]]},"534":{"position":[[792,5]]},"547":{"position":[[1648,5]]},"552":{"position":[[718,6]]},"556":{"position":[[1399,5]]},"639":{"position":[[1273,5]]},"757":{"position":[[1419,5]]},"770":{"position":[[1419,5]]},"782":{"position":[[355,5]]},"797":{"position":[[1419,5]]},"812":{"position":[[1419,5]]},"828":{"position":[[1419,5]]},"867":{"position":[[535,5]]},"907":{"position":[[857,5]]},"923":{"position":[[857,5]]},"934":{"position":[[857,5]]},"950":{"position":[[857,5]]},"968":{"position":[[857,5]]},"1023":{"position":[[1629,5]]},"1045":{"position":[[705,5]]},"1053":{"position":[[705,5]]},"1061":{"position":[[705,5]]},"1144":{"position":[[963,5]]},"1213":{"position":[[640,5]]}},"keywords":{}}],["command",{"_index":641,"title":{"1471":{"position":[[39,7]]}},"content":{"29":{"position":[[140,7]]},"31":{"position":[[14,7]]},"60":{"position":[[1109,7]]},"63":{"position":[[991,8]]},"68":{"position":[[739,7],[1267,7],[1797,8]]},"80":{"position":[[167,7]]},"103":{"position":[[457,7]]},"135":{"position":[[755,7]]},"169":{"position":[[112,7]]},"221":{"position":[[1219,8],[1348,8]]},"222":{"position":[[464,8],[593,8]]},"223":{"position":[[430,8],[559,8]]},"224":{"position":[[483,8],[612,8]]},"236":{"position":[[806,8]]},"237":{"position":[[2144,8]]},"238":{"position":[[113,8]]},"253":{"position":[[475,7]]},"255":{"position":[[93,7]]},"270":{"position":[[567,7]]},"274":{"position":[[876,7]]},"281":{"position":[[690,8]]},"295":{"position":[[1768,8]]},"296":{"position":[[3777,7]]},"313":{"position":[[475,7]]},"315":{"position":[[142,8]]},"316":{"position":[[93,7]]},"367":{"position":[[221,8]]},"486":{"position":[[256,8],[286,7]]},"513":{"position":[[288,7]]},"522":{"position":[[295,7]]},"530":{"position":[[295,7]]},"551":{"position":[[287,7]]},"569":{"position":[[319,7]]},"607":{"position":[[318,7]]},"614":{"position":[[302,7]]},"650":{"position":[[268,7]]},"658":{"position":[[256,8],[286,7]]},"674":{"position":[[256,8],[286,7]]},"689":{"position":[[256,8],[286,7]]},"716":{"position":[[304,7]]},"731":{"position":[[261,7]]},"767":{"position":[[1724,8],[2215,7]]},"792":{"position":[[1664,8],[2207,7]]},"824":{"position":[[1786,8],[2329,7]]},"864":{"position":[[156,8]]},"871":{"position":[[114,7]]},"876":{"position":[[156,8]]},"904":{"position":[[1325,8]]},"918":{"position":[[1617,8]]},"919":{"position":[[799,8]]},"931":{"position":[[982,8]]},"943":{"position":[[658,7],[721,8],[743,8]]},"944":{"position":[[125,8]]},"1008":{"position":[[1112,7],[1179,7],[1896,7]]},"1042":{"position":[[47,9]]},"1043":{"position":[[711,9]]},"1051":{"position":[[967,9]]},"1059":{"position":[[731,9]]},"1298":{"position":[[430,8],[559,8]]},"1322":{"position":[[464,8],[593,8]]},"1335":{"position":[[464,8],[593,8]]},"1346":{"position":[[430,8],[559,8]]},"1373":{"position":[[949,9]]},"1374":{"position":[[949,9]]},"1384":{"position":[[622,9]]},"1397":{"position":[[728,9]]},"1398":{"position":[[727,9]]},"1408":{"position":[[47,9]]},"1409":{"position":[[711,9]]},"1469":{"position":[[116,7]]},"1471":{"position":[[106,7],[1149,7]]}},"keywords":{}}],["comment",{"_index":2470,"title":{},"content":{"223":{"position":[[736,8]]},"236":{"position":[[2254,7],[2328,7],[2385,7],[2447,7],[2613,7],[3039,7],[3113,7],[3170,7],[3232,7]]},"529":{"position":[[276,8],[301,7],[340,8],[434,7],[586,7],[666,8]]},"723":{"position":[[306,9]]},"791":{"position":[[639,7]]},"792":{"position":[[1959,7]]},"793":{"position":[[1313,7]]},"808":{"position":[[1259,7]]},"824":{"position":[[2081,7]]},"1128":{"position":[[226,7]]},"1292":{"position":[[690,7]]},"1298":{"position":[[736,8]]},"1303":{"position":[[1483,7]]},"1306":{"position":[[690,7]]},"1329":{"position":[[690,7]]},"1346":{"position":[[736,8]]}},"keywords":{}}],["commentsdiscuss",{"_index":3909,"title":{},"content":{"506":{"position":[[167,18]]}},"keywords":{}}],["commentsissu",{"_index":4496,"title":{},"content":{"709":{"position":[[777,13]]}},"keywords":{}}],["commentspost",{"_index":5449,"title":{},"content":{"1128":{"position":[[213,12]]}},"keywords":{}}],["commentsticket",{"_index":5455,"title":{},"content":{"1128":{"position":[[314,14]]}},"keywords":{}}],["commit",{"_index":964,"title":{},"content":{"64":{"position":[[502,6]]},"68":{"position":[[1489,9],[1531,9]]},"97":{"position":[[846,6]]},"100":{"position":[[1113,7],[1178,10]]},"163":{"position":[[1071,6]]},"191":{"position":[[2118,7]]},"240":{"position":[[2079,7]]},"331":{"position":[[365,10]]},"343":{"position":[[472,7],[531,6],[962,7]]},"410":{"position":[[205,10]]},"411":{"position":[[168,9]]},"529":{"position":[[294,6],[333,6],[362,7],[383,7]]},"534":{"position":[[325,7]]},"602":{"position":[[76,9],[480,9],[593,10]]},"922":{"position":[[200,10],[3067,8]]},"1032":{"position":[[1925,7]]},"1140":{"position":[[2967,6]]},"1147":{"position":[[245,9]]},"1156":{"position":[[462,6],[893,10]]},"1174":{"position":[[245,9]]},"1216":{"position":[[245,9]]},"1224":{"position":[[245,9]]},"1292":{"position":[[732,6],[763,9]]},"1306":{"position":[[732,6],[763,9]]},"1316":{"position":[[2967,6]]},"1329":{"position":[[732,6],[763,9]]},"1340":{"position":[[2967,6]]},"1351":{"position":[[2967,6]]},"1370":{"position":[[632,6]]},"1379":{"position":[[3557,6]]},"1383":{"position":[[2066,7]]},"1403":{"position":[[3557,6]]},"1414":{"position":[[3557,6]]},"1431":{"position":[[2990,6]]},"1434":{"position":[[620,7],[2029,6],[2143,6]]},"1435":{"position":[[279,6],[426,7],[723,6]]},"1437":{"position":[[535,9],[926,10],[1059,7],[1397,6],[1594,10]]},"1439":{"position":[[262,8],[596,9],[712,8],[1143,9],[1253,6],[1352,7],[1714,9]]},"1442":{"position":[[203,9],[310,10],[601,6],[673,6],[834,9],[954,6],[1015,6],[1380,6],[1483,6],[1763,6]]},"1444":{"position":[[657,6],[986,7]]},"1452":{"position":[[2016,6]]},"1471":{"position":[[531,9],[623,9]]},"1475":{"position":[[514,6]]}},"keywords":{}}],["commits<br/>to",{"_index":6441,"title":{},"content":{"1434":{"position":[[553,20]]}},"keywords":{}}],["commitspul",{"_index":4031,"title":{},"content":{"529":{"position":[[934,11]]}},"keywords":{}}],["committed<br/>runtim",{"_index":6436,"title":{},"content":{"1434":{"position":[[340,27]]}},"keywords":{}}],["common",{"_index":421,"title":{"133":{"position":[[8,6]]},"1436":{"position":[[0,6]]}},"content":{"14":{"position":[[80,6]]},"59":{"position":[[17,6]]},"60":{"position":[[1004,6]]},"92":{"position":[[631,6]]},"95":{"position":[[235,6]]},"98":{"position":[[975,6]]},"107":{"position":[[2467,6]]},"110":{"position":[[809,6]]},"128":{"position":[[267,6]]},"133":{"position":[[172,6],[254,6]]},"135":{"position":[[211,6]]},"163":{"position":[[93,6]]},"164":{"position":[[400,6],[911,6]]},"213":{"position":[[88,6]]},"239":{"position":[[2471,6]]},"257":{"position":[[48,6]]},"280":{"position":[[218,7]]},"306":{"position":[[55,6]]},"321":{"position":[[232,6]]},"326":{"position":[[1537,6]]},"448":{"position":[[1131,6]]},"449":{"position":[[393,6]]},"480":{"position":[[477,6]]},"517":{"position":[[388,6]]},"660":{"position":[[88,6],[968,6]]},"821":{"position":[[1193,6]]},"1436":{"position":[[17,6]]},"1447":{"position":[[3,6]]},"1453":{"position":[[928,6]]},"1461":{"position":[[2620,6],[4284,6]]}},"keywords":{}}],["commonli",{"_index":809,"title":{},"content":{"54":{"position":[[608,8]]},"90":{"position":[[45,8]]},"122":{"position":[[2196,8]]},"163":{"position":[[833,9]]},"164":{"position":[[1063,8]]},"1286":{"position":[[2043,8]]},"1301":{"position":[[1879,8]]},"1325":{"position":[[2043,8]]}},"keywords":{}}],["commun",{"_index":1268,"title":{},"content":{"84":{"position":[[763,9]]},"204":{"position":[[518,13]]},"212":{"position":[[417,10]]},"232":{"position":[[1012,10]]},"243":{"position":[[412,10]]},"724":{"position":[[288,9]]},"726":{"position":[[245,9]]}},"keywords":{}}],["commut",{"_index":6591,"title":{},"content":{"1459":{"position":[[1272,11]]}},"keywords":{}}],["compact",{"_index":2049,"title":{},"content":{"180":{"position":[[90,7]]},"1165":{"position":[[302,10]]},"1292":{"position":[[792,7]]},"1306":{"position":[[792,7]]},"1329":{"position":[[792,7]]}},"keywords":{}}],["compani",{"_index":1257,"title":{},"content":{"84":{"position":[[169,9],[213,7],[423,7],[1216,8]]},"338":{"position":[[346,8]]},"647":{"position":[[216,9]]},"655":{"position":[[224,9]]},"686":{"position":[[338,9]]},"840":{"position":[[248,7],[261,7]]},"849":{"position":[[191,7],[204,7],[417,7],[777,7]]}},"keywords":{}}],["companiescontactscustom",{"_index":4369,"title":{},"content":{"642":{"position":[[86,23]]}},"keywords":{}}],["company_attribut",{"_index":4440,"title":{},"content":{"686":{"position":[[774,18]]}},"keywords":{}}],["company_seg",{"_index":4434,"title":{},"content":{"686":{"position":[[418,16]]}},"keywords":{}}],["compar",{"_index":273,"title":{},"content":{"8":{"position":[[708,7]]},"180":{"position":[[956,7]]},"184":{"position":[[104,7]]},"185":{"position":[[141,7]]},"228":{"position":[[511,7]]},"320":{"position":[[469,10],[2351,8]]},"329":{"position":[[323,10]]},"333":{"position":[[315,10]]},"1208":{"position":[[300,8]]},"1358":{"position":[[203,8]]},"1384":{"position":[[954,7]]},"1391":{"position":[[892,8]]},"1439":{"position":[[1115,8]]},"1440":{"position":[[880,7]]},"1459":{"position":[[1442,8]]}},"keywords":{}}],["comparison",{"_index":756,"title":{"318":{"position":[[0,11]]}},"content":{"44":{"position":[[253,11]]},"319":{"position":[[17,10]]},"322":{"position":[[119,11]]}},"keywords":{}}],["compat",{"_index":167,"title":{},"content":{"4":{"position":[[423,10]]},"53":{"position":[[419,13]]},"80":{"position":[[144,10]]},"208":{"position":[[866,10]]},"239":{"position":[[2330,14]]},"322":{"position":[[1787,10]]},"323":{"position":[[1517,10]]},"364":{"position":[[498,14]]},"392":{"position":[[489,10]]},"397":{"position":[[638,10]]},"417":{"position":[[655,10]]},"1125":{"position":[[432,10]]},"1144":{"position":[[793,10]]},"1164":{"position":[[707,13]]},"1170":{"position":[[793,10]]},"1201":{"position":[[85,10]]},"1293":{"position":[[85,10]]},"1307":{"position":[[85,10]]},"1317":{"position":[[85,10],[512,10]]},"1330":{"position":[[85,10]]},"1341":{"position":[[85,10],[512,10]]},"1352":{"position":[[85,10],[512,10]]},"1359":{"position":[[85,10]]},"1380":{"position":[[85,10]]},"1404":{"position":[[85,10]]},"1415":{"position":[[85,10]]},"1432":{"position":[[85,10],[512,10]]}},"keywords":{}}],["compil",{"_index":1464,"title":{},"content":{"102":{"position":[[318,8]]},"158":{"position":[[678,7]]},"281":{"position":[[2712,8]]}},"keywords":{}}],["complain",{"_index":4887,"title":{},"content":{"869":{"position":[[913,8]]}},"keywords":{}}],["complaintemail",{"_index":4452,"title":{},"content":{"697":{"position":[[134,14]]}},"keywords":{}}],["complementari",{"_index":3103,"title":{},"content":{"319":{"position":[[361,13]]}},"keywords":{}}],["complet",{"_index":296,"title":{},"content":{"11":{"position":[[225,8]]},"13":{"position":[[1152,10]]},"26":{"position":[[453,9],[539,9]]},"32":{"position":[[112,8]]},"56":{"position":[[2244,10],[2427,11]]},"80":{"position":[[104,10]]},"83":{"position":[[296,10]]},"110":{"position":[[712,8]]},"114":{"position":[[626,8]]},"135":{"position":[[60,8]]},"137":{"position":[[485,8]]},"154":{"position":[[106,8],[1783,8]]},"157":{"position":[[216,8]]},"165":{"position":[[204,8]]},"170":{"position":[[155,8]]},"173":{"position":[[295,8]]},"177":{"position":[[34,8]]},"179":{"position":[[249,8]]},"190":{"position":[[1761,10],[2011,9]]},"191":{"position":[[64,8]]},"192":{"position":[[2123,10]]},"193":{"position":[[18,8]]},"208":{"position":[[1391,10]]},"225":{"position":[[14,9]]},"240":{"position":[[2360,9]]},"255":{"position":[[1087,10]]},"262":{"position":[[4,8]]},"264":{"position":[[568,9]]},"270":{"position":[[585,8]]},"273":{"position":[[4,8]]},"274":{"position":[[894,8]]},"275":{"position":[[14,8]]},"283":{"position":[[4,8]]},"316":{"position":[[1412,10]]},"322":{"position":[[648,10]]},"324":{"position":[[1027,8]]},"343":{"position":[[541,8]]},"367":{"position":[[28,8]]},"368":{"position":[[264,8]]},"375":{"position":[[67,8]]},"377":{"position":[[1005,9]]},"384":{"position":[[220,8]]},"419":{"position":[[2354,8]]},"441":{"position":[[963,8]]},"446":{"position":[[154,8]]},"504":{"position":[[1983,8]]},"526":{"position":[[1,8]]},"547":{"position":[[2356,8]]},"595":{"position":[[1235,9],[1630,9]]},"639":{"position":[[1981,8]]},"726":{"position":[[318,8]]},"755":{"position":[[264,8]]},"764":{"position":[[718,8]]},"768":{"position":[[264,8]]},"777":{"position":[[718,8]]},"795":{"position":[[262,8]]},"804":{"position":[[716,8]]},"810":{"position":[[262,8]]},"819":{"position":[[716,8]]},"826":{"position":[[262,8]]},"835":{"position":[[716,8]]},"905":{"position":[[267,8]]},"920":{"position":[[267,8]]},"932":{"position":[[267,8]]},"948":{"position":[[267,8]]},"966":{"position":[[267,8]]},"1006":{"position":[[459,9]]},"1023":{"position":[[2337,8]]},"1077":{"position":[[185,9]]},"1118":{"position":[[1083,8]]},"1147":{"position":[[268,9]]},"1174":{"position":[[268,9]]},"1177":{"position":[[36,8]]},"1178":{"position":[[433,8]]},"1189":{"position":[[414,8]]},"1197":{"position":[[420,8]]},"1207":{"position":[[503,8]]},"1216":{"position":[[268,9]]},"1224":{"position":[[268,9]]},"1243":{"position":[[928,10]]},"1248":{"position":[[447,8]]},"1292":{"position":[[838,10]]},"1306":{"position":[[838,10]]},"1329":{"position":[[838,10]]},"1357":{"position":[[352,8]]},"1379":{"position":[[3607,10]]},"1387":{"position":[[453,8],[1079,8]]},"1388":{"position":[[482,10]]},"1403":{"position":[[3607,10]]},"1414":{"position":[[3607,10]]},"1421":{"position":[[440,8]]},"1434":{"position":[[1930,9]]},"1438":{"position":[[541,10]]},"1442":{"position":[[583,9],[1770,10]]},"1443":{"position":[[402,10]]},"1452":{"position":[[1673,9],[1931,8],[2026,8]]},"1453":{"position":[[230,8],[704,9]]},"1470":{"position":[[293,8]]}},"keywords":{}}],["complex",{"_index":578,"title":{},"content":{"23":{"position":[[216,8]]},"40":{"position":[[266,7]]},"42":{"position":[[699,7]]},"66":{"position":[[635,10]]},"101":{"position":[[131,10]]},"131":{"position":[[48,7]]},"156":{"position":[[258,8]]},"208":{"position":[[1018,7]]},"210":{"position":[[2205,12]]},"219":{"position":[[183,7]]},"241":{"position":[[509,7]]},"281":{"position":[[2782,7]]},"324":{"position":[[1098,7]]},"329":{"position":[[866,11]]},"371":{"position":[[1460,8]]},"393":{"position":[[443,8]]},"398":{"position":[[434,8]]},"418":{"position":[[501,8]]},"433":{"position":[[869,8]]},"483":{"position":[[461,7]]},"546":{"position":[[1208,8]]},"758":{"position":[[444,8]]},"771":{"position":[[444,8]]},"798":{"position":[[442,8]]},"813":{"position":[[442,8]]},"829":{"position":[[442,8]]},"908":{"position":[[488,8]]},"922":{"position":[[2270,7]]},"924":{"position":[[488,8]]},"935":{"position":[[488,8]]},"951":{"position":[[488,8]]},"969":{"position":[[488,8]]},"1046":{"position":[[422,8]]},"1054":{"position":[[422,8]]},"1062":{"position":[[422,8]]},"1476":{"position":[[866,7]]}},"keywords":{}}],["compli",{"_index":4530,"title":{},"content":{"726":{"position":[[162,8]]},"1448":{"position":[[178,6]]}},"keywords":{}}],["complianc",{"_index":2825,"title":{},"content":{"277":{"position":[[91,10],[1243,10]]}},"keywords":{}}],["complic",{"_index":412,"title":{},"content":{"13":{"position":[[1469,11]]},"847":{"position":[[430,11]]}},"keywords":{}}],["compon",{"_index":128,"title":{},"content":{"3":{"position":[[627,11],[640,9]]},"4":{"position":[[81,10]]},"11":{"position":[[207,10]]},"13":{"position":[[162,10],[279,10]]},"32":{"position":[[172,11]]},"38":{"position":[[23,10]]},"44":{"position":[[124,10]]},"81":{"position":[[722,10]]},"107":{"position":[[1879,10],[2189,11]]},"189":{"position":[[1658,10]]},"216":{"position":[[427,9]]},"239":{"position":[[2307,10]]},"289":{"position":[[547,10]]},"296":{"position":[[3636,10]]},"300":{"position":[[494,10]]},"429":{"position":[[1097,10]]},"1195":{"position":[[525,9]]},"1292":{"position":[[881,9]]},"1306":{"position":[[881,9]]},"1329":{"position":[[881,9]]}},"keywords":{}}],["component.avail",{"_index":1011,"title":{},"content":{"67":{"position":[[1248,23]]}},"keywords":{}}],["componentsproject",{"_index":4483,"title":{},"content":{"709":{"position":[[520,17]]}},"keywords":{}}],["compos",{"_index":1904,"title":{"1465":{"position":[[0,9]]}},"content":{"161":{"position":[[846,7]]},"164":{"position":[[1722,7]]},"234":{"position":[[120,7]]},"236":{"position":[[462,7]]},"237":{"position":[[3137,7]]},"313":{"position":[[3369,8]]},"321":{"position":[[2009,9],[2062,9]]},"1465":{"position":[[0,9]]}},"keywords":{}}],["compose.yml",{"_index":2499,"title":{},"content":{"236":{"position":[[311,12],[336,11],[573,11]]}},"keywords":{}}],["composit",{"_index":1039,"title":{"73":{"position":[[0,9]]}},"content":{"69":{"position":[[631,9]]},"73":{"position":[[68,9]]},"94":{"position":[[2903,9]]},"107":{"position":[[1375,9],[1895,9],[3701,9]]},"156":{"position":[[278,9]]},"164":{"position":[[1593,11]]},"296":{"position":[[3652,9]]},"321":{"position":[[1493,11]]},"324":{"position":[[331,12]]},"1476":{"position":[[910,9]]}},"keywords":{}}],["comprehens",{"_index":785,"title":{},"content":{"50":{"position":[[178,13]]},"129":{"position":[[342,14]]},"209":{"position":[[763,13]]},"975":{"position":[[344,13]]},"977":{"position":[[400,13]]}},"keywords":{}}],["compress",{"_index":23,"title":{},"content":{"1":{"position":[[288,8],[646,12]]},"3":{"position":[[84,10],[965,11]]},"417":{"position":[[1475,11],[1577,11]]},"418":{"position":[[142,12]]},"419":{"position":[[653,12],[702,11],[720,11],[791,11]]},"439":{"position":[[399,12]]},"440":{"position":[[669,12],[718,11],[736,11],[807,11]]},"499":{"position":[[208,11],[314,11],[387,12]]},"502":{"position":[[1123,11],[1225,11]]},"504":{"position":[[597,12],[634,11],[652,11],[723,11]]},"545":{"position":[[1077,11],[1179,11]]},"546":{"position":[[879,12]]},"547":{"position":[[654,12],[703,11],[721,11],[792,11]]},"634":{"position":[[200,11],[306,11],[379,12]]},"637":{"position":[[637,11],[739,11]]},"638":{"position":[[171,12]]},"639":{"position":[[595,12],[632,11],[650,11],[721,11]]},"1021":{"position":[[1634,11],[1736,11]]},"1022":{"position":[[208,12]]},"1023":{"position":[[634,12],[683,11],[701,11],[772,11]]},"1292":{"position":[[918,10],[957,11]]},"1306":{"position":[[918,10],[957,11]]},"1329":{"position":[[918,10],[957,11]]}},"keywords":{}}],["compressioncodec",{"_index":32,"title":{},"content":{"1":{"position":[[385,17]]}},"keywords":{}}],["compris",{"_index":667,"title":{},"content":{"33":{"position":[[48,8]]},"60":{"position":[[826,8]]},"66":{"position":[[131,9]]},"122":{"position":[[845,10]]},"149":{"position":[[1236,8]]},"189":{"position":[[1010,9]]},"216":{"position":[[112,9]]},"274":{"position":[[183,9]]},"289":{"position":[[298,10]]},"300":{"position":[[277,10]]},"373":{"position":[[28,9]]},"1178":{"position":[[313,9]]},"1474":{"position":[[687,9],[820,9]]}},"keywords":{}}],["comput",{"_index":1552,"title":{},"content":{"107":{"position":[[2857,8]]},"113":{"position":[[721,7]]},"222":{"position":[[94,9]]},"254":{"position":[[3360,8]]},"314":{"position":[[2935,8]]},"331":{"position":[[780,7]]},"577":{"position":[[45,7]]},"588":{"position":[[40,7]]},"942":{"position":[[283,8]]},"1036":{"position":[[21,7]]},"1322":{"position":[[94,9]]},"1335":{"position":[[94,9]]},"1379":{"position":[[3658,7]]},"1388":{"position":[[126,7],[534,8]]},"1403":{"position":[[3658,7]]},"1414":{"position":[[3658,7]]},"1453":{"position":[[144,8],[326,8],[826,8],[1211,7],[1315,7],[1516,7],[1570,7]]}},"keywords":{}}],["concat",{"_index":5871,"title":{},"content":{"1209":{"position":[[434,6]]}},"keywords":{}}],["concept",{"_index":639,"title":{"28":{"position":[[0,8]]},"32":{"position":[[10,9]]},"39":{"position":[[13,9]]},"47":{"position":[[9,9]]}},"content":{"32":{"position":[[64,9]]},"39":{"position":[[40,8]]},"47":{"position":[[38,9]]},"69":{"position":[[966,7]]},"107":{"position":[[189,7]]},"159":{"position":[[41,7]]},"176":{"position":[[182,9],[203,9]]},"177":{"position":[[255,8]]},"215":{"position":[[77,9],[160,8]]},"219":{"position":[[105,8]]},"253":{"position":[[759,8]]},"257":{"position":[[207,8]]},"288":{"position":[[61,9]]},"299":{"position":[[61,9]]},"313":{"position":[[759,8]]},"319":{"position":[[942,8],[1441,7]]},"1473":{"position":[[285,8]]}},"keywords":{}}],["conceptu",{"_index":80,"title":{},"content":{"2":{"position":[[328,13]]},"36":{"position":[[208,10]]},"319":{"position":[[281,10]]},"325":{"position":[[211,10]]},"326":{"position":[[467,12]]},"345":{"position":[[251,10]]},"1461":{"position":[[292,12]]}},"keywords":{}}],["concern",{"_index":1632,"title":{},"content":{"115":{"position":[[1285,7]]}},"keywords":{}}],["conclus",{"_index":2168,"title":{"193":{"position":[[0,11]]}},"content":{},"keywords":{}}],["concret",{"_index":1482,"title":{},"content":{"103":{"position":[[843,8]]},"322":{"position":[[1169,9]]}},"keywords":{}}],["concurr",{"_index":2264,"title":{},"content":{"209":{"position":[[465,12]]},"842":{"position":[[1390,10],[1507,10],[2428,12],[2441,11],[2471,10],[2647,12]]},"843":{"position":[[746,12]]},"1140":{"position":[[2999,12]]},"1292":{"position":[[995,10]]},"1306":{"position":[[995,10]]},"1316":{"position":[[2999,12]]},"1329":{"position":[[995,10]]},"1340":{"position":[[2999,12]]},"1351":{"position":[[2999,12]]},"1431":{"position":[[3022,12]]}},"keywords":{}}],["condit",{"_index":1565,"title":{"1465":{"position":[[15,12]]}},"content":{"110":{"position":[[124,9]]},"164":{"position":[[1610,13],[1700,13],[2207,12]]},"236":{"position":[[1450,10]]},"487":{"position":[[622,10]]},"1140":{"position":[[3034,9]]},"1292":{"position":[[1042,9]]},"1306":{"position":[[1042,9]]},"1316":{"position":[[3034,9]]},"1329":{"position":[[1042,9]]},"1340":{"position":[[3034,9]]},"1351":{"position":[[3034,9]]},"1379":{"position":[[3704,9]]},"1403":{"position":[[3704,9]]},"1414":{"position":[[3704,9]]},"1431":{"position":[[3057,9]]},"1464":{"position":[[928,12]]},"1465":{"position":[[15,12],[173,11],[307,12]]}},"keywords":{}}],["conduct",{"_index":5771,"title":{},"content":{"1165":{"position":[[49,7]]}},"keywords":{}}],["conenect",{"_index":6249,"title":{"1297":{"position":[[0,11]]},"1345":{"position":[[0,11]]}},"content":{},"keywords":{}}],["conf",{"_index":2646,"title":{},"content":{"250":{"position":[[253,4]]}},"keywords":{}}],["config",{"_index":842,"title":{},"content":{"56":{"position":[[1291,7]]},"81":{"position":[[1354,7],[2647,7]]},"83":{"position":[[1011,7]]},"120":{"position":[[650,7]]},"144":{"position":[[511,6]]},"184":{"position":[[369,6]]},"206":{"position":[[199,8]]},"218":{"position":[[602,6],[1996,6]]},"221":{"position":[[331,6]]},"259":{"position":[[286,6],[1975,6]]},"291":{"position":[[844,6]]},"302":{"position":[[844,6]]},"307":{"position":[[1122,7],[1596,7],[1972,7],[2464,7]]},"309":{"position":[[2415,7],[3022,7]]},"344":{"position":[[74,7]]},"360":{"position":[[103,7]]},"370":{"position":[[20,6],[220,7]]},"371":{"position":[[173,7]]},"378":{"position":[[112,7]]},"388":{"position":[[174,7]]},"393":{"position":[[161,7]]},"398":{"position":[[162,7]]},"403":{"position":[[102,7]]},"418":{"position":[[96,7],[177,7]]},"425":{"position":[[104,7]]},"433":{"position":[[141,7],[552,7]]},"439":{"position":[[124,7],[434,7]]},"449":{"position":[[172,7]]},"455":{"position":[[104,7]]},"461":{"position":[[104,7]]},"467":{"position":[[100,7]]},"473":{"position":[[174,7]]},"488":{"position":[[638,6]]},"497":{"position":[[108,7]]},"503":{"position":[[103,7]]},"510":{"position":[[103,7]]},"518":{"position":[[182,7]]},"527":{"position":[[170,7]]},"535":{"position":[[170,7]]},"541":{"position":[[101,7]]},"546":{"position":[[97,7],[914,7]]},"548":{"position":[[809,7]]},"557":{"position":[[174,7]]},"566":{"position":[[106,7]]},"575":{"position":[[169,7]]},"586":{"position":[[175,7]]},"594":{"position":[[103,7]]},"612":{"position":[[185,7]]},"620":{"position":[[107,7]]},"626":{"position":[[105,7]]},"632":{"position":[[102,7]]},"638":{"position":[[103,7],[206,7]]},"647":{"position":[[108,7]]},"655":{"position":[[101,7]]},"659":{"position":[[795,6]]},"671":{"position":[[104,7]]},"676":{"position":[[638,6]]},"686":{"position":[[163,7]]},"691":{"position":[[638,6]]},"701":{"position":[[103,7]]},"707":{"position":[[102,7]]},"713":{"position":[[99,7]]},"721":{"position":[[176,7]]},"736":{"position":[[103,7]]},"742":{"position":[[102,7]]},"748":{"position":[[103,7]]},"758":{"position":[[161,7]]},"771":{"position":[[161,7]]},"783":{"position":[[101,7]]},"798":{"position":[[159,7]]},"813":{"position":[[159,7]]},"829":{"position":[[159,7]]},"842":{"position":[[1259,6]]},"843":{"position":[[105,7]]},"852":{"position":[[103,7]]},"860":{"position":[[170,7]]},"868":{"position":[[100,7]]},"880":{"position":[[110,7]]},"886":{"position":[[113,7]]},"892":{"position":[[99,7]]},"908":{"position":[[174,7]]},"924":{"position":[[174,7]]},"935":{"position":[[174,7]]},"951":{"position":[[174,7]]},"960":{"position":[[103,7]]},"969":{"position":[[174,7]]},"983":{"position":[[103,7]]},"992":{"position":[[109,7]]},"998":{"position":[[101,7]]},"1010":{"position":[[174,7]]},"1016":{"position":[[100,7]]},"1022":{"position":[[100,7],[243,7]]},"1029":{"position":[[103,7]]},"1037":{"position":[[103,7]]},"1046":{"position":[[115,7]]},"1054":{"position":[[115,7]]},"1062":{"position":[[115,7]]},"1071":{"position":[[176,7]]},"1078":{"position":[[100,7]]},"1086":{"position":[[192,7]]},"1102":{"position":[[112,7]]},"1108":{"position":[[106,7]]},"1114":{"position":[[101,7]]},"1126":{"position":[[123,7]]},"1134":{"position":[[109,7]]},"1138":{"position":[[20,6],[220,7]]},"1139":{"position":[[110,7]]},"1145":{"position":[[121,7]]},"1152":{"position":[[123,7]]},"1163":{"position":[[125,7]]},"1171":{"position":[[125,7]]},"1180":{"position":[[63,7]]},"1189":{"position":[[64,7]]},"1197":{"position":[[184,7]]},"1207":{"position":[[63,7]]},"1214":{"position":[[122,7]]},"1221":{"position":[[126,7]]},"1231":{"position":[[133,7]]},"1241":{"position":[[163,7]]},"1248":{"position":[[133,7]]},"1254":{"position":[[114,7]]},"1261":{"position":[[125,7]]},"1270":{"position":[[117,7]]},"1278":{"position":[[123,7]]},"1287":{"position":[[108,7]]},"1302":{"position":[[108,7]]},"1314":{"position":[[111,7]]},"1326":{"position":[[108,7]]},"1338":{"position":[[111,7]]},"1349":{"position":[[111,7]]},"1357":{"position":[[63,7]]},"1363":{"position":[[120,7]]},"1368":{"position":[[109,7]]},"1377":{"position":[[112,7]]},"1387":{"position":[[98,7],[652,7]]},"1401":{"position":[[112,7]]},"1412":{"position":[[112,7]]},"1421":{"position":[[64,7]]},"1428":{"position":[[114,7]]},"1472":{"position":[[722,7]]},"1480":{"position":[[584,7]]}},"keywords":{}}],["config.json",{"_index":4583,"title":{},"content":{"750":{"position":[[720,12]]},"752":{"position":[[155,11]]},"766":{"position":[[720,12]]},"791":{"position":[[108,11]]},"807":{"position":[[708,12]]},"823":{"position":[[708,12]]}},"keywords":{}}],["config.json.th",{"_index":4703,"title":{},"content":{"789":{"position":[[708,15]]}},"keywords":{}}],["config.sops.yaml",{"_index":3045,"title":{},"content":{"307":{"position":[[1143,16],[1624,16],[1993,16],[2492,16]]},"309":{"position":[[2443,16],[3050,16]]}},"keywords":{}}],["config.yaml",{"_index":844,"title":{},"content":{"56":{"position":[[1317,11]]},"82":{"position":[[1374,11],[1859,11],[1980,11],[2758,11],[3069,12],[3804,11],[4183,11],[4316,11],[4896,11]]},"120":{"position":[[676,11]]},"1480":{"position":[[611,11]]}},"keywords":{}}],["configsemail",{"_index":3912,"title":{},"content":{"506":{"position":[[215,12]]}},"keywords":{}}],["configur",{"_index":16,"title":{"170":{"position":[[0,11]]},"203":{"position":[[0,13]]},"204":{"position":[[0,9]]},"206":{"position":[[16,14]]},"220":{"position":[[0,9]]},"225":{"position":[[0,14]]},"237":{"position":[[0,11]]},"342":{"position":[[0,11]]},"350":{"position":[[0,14]]},"358":{"position":[[0,14]]},"369":{"position":[[0,14]]},"376":{"position":[[0,14]]},"386":{"position":[[0,14]]},"391":{"position":[[0,14]]},"396":{"position":[[0,14]]},"401":{"position":[[0,14]]},"407":{"position":[[0,14]]},"416":{"position":[[0,14]]},"423":{"position":[[0,14]]},"431":{"position":[[0,14]]},"437":{"position":[[0,14]]},"441":{"position":[[4,14]]},"447":{"position":[[0,14]]},"453":{"position":[[0,14]]},"459":{"position":[[0,14]]},"465":{"position":[[0,14]]},"472":{"position":[[0,14]]},"481":{"position":[[0,14]]},"487":{"position":[[0,9]]},"491":{"position":[[9,14]]},"492":{"position":[[9,14]]},"495":{"position":[[0,14]]},"501":{"position":[[0,14]]},"508":{"position":[[0,14]]},"515":{"position":[[0,11]]},"516":{"position":[[0,14]]},"524":{"position":[[0,11]]},"525":{"position":[[0,14]]},"532":{"position":[[0,11]]},"533":{"position":[[0,14]]},"539":{"position":[[0,14]]},"544":{"position":[[0,14]]},"548":{"position":[[10,9]]},"554":{"position":[[0,11]]},"555":{"position":[[0,14]]},"563":{"position":[[0,14]]},"572":{"position":[[0,14]]},"583":{"position":[[0,14]]},"592":{"position":[[0,14]]},"600":{"position":[[0,14]]},"610":{"position":[[0,14]]},"617":{"position":[[0,11]]},"618":{"position":[[0,14]]},"624":{"position":[[0,14]]},"630":{"position":[[0,14]]},"636":{"position":[[0,14]]},"645":{"position":[[0,11]]},"646":{"position":[[0,14]]},"652":{"position":[[0,11]]},"653":{"position":[[0,14]]},"664":{"position":[[9,14]]},"665":{"position":[[9,14]]},"669":{"position":[[0,14]]},"675":{"position":[[0,9]]},"679":{"position":[[9,14]]},"680":{"position":[[9,14]]},"684":{"position":[[0,14]]},"690":{"position":[[0,9]]},"694":{"position":[[9,14]]},"695":{"position":[[9,14]]},"699":{"position":[[0,14]]},"705":{"position":[[0,14]]},"711":{"position":[[0,14]]},"718":{"position":[[0,11]]},"719":{"position":[[0,14]]},"727":{"position":[[0,14]]},"733":{"position":[[0,11]]},"734":{"position":[[0,14]]},"740":{"position":[[0,14]]},"746":{"position":[[0,14]]},"756":{"position":[[0,14]]},"769":{"position":[[0,14]]},"781":{"position":[[0,14]]},"796":{"position":[[0,14]]},"811":{"position":[[0,14]]},"827":{"position":[[0,14]]},"841":{"position":[[0,14]]},"850":{"position":[[0,14]]},"858":{"position":[[0,14]]},"866":{"position":[[0,14]]},"878":{"position":[[0,14]]},"884":{"position":[[0,14]]},"890":{"position":[[0,14]]},"896":{"position":[[0,14]]},"906":{"position":[[0,14]]},"921":{"position":[[0,14]]},"933":{"position":[[0,14]]},"949":{"position":[[0,14]]},"958":{"position":[[0,14]]},"967":{"position":[[0,14]]},"981":{"position":[[0,14]]},"988":{"position":[[0,11]]},"990":{"position":[[0,14]]},"996":{"position":[[0,14]]},"1003":{"position":[[0,11]]},"1005":{"position":[[0,14]]},"1014":{"position":[[0,14]]},"1021":{"position":[[0,14]]},"1027":{"position":[[0,14]]},"1033":{"position":[[0,14]]},"1037":{"position":[[7,14]]},"1044":{"position":[[0,14]]},"1052":{"position":[[0,14]]},"1060":{"position":[[0,14]]},"1069":{"position":[[0,14]]},"1075":{"position":[[0,14]]},"1084":{"position":[[0,14]]},"1093":{"position":[[0,14]]},"1100":{"position":[[0,14]]},"1106":{"position":[[0,14]]},"1112":{"position":[[0,14]]},"1124":{"position":[[0,14]]},"1132":{"position":[[0,14]]},"1137":{"position":[[0,14]]},"1143":{"position":[[0,14]]},"1150":{"position":[[0,14]]},"1161":{"position":[[0,14]]},"1169":{"position":[[0,14]]},"1178":{"position":[[0,14]]},"1187":{"position":[[0,14]]},"1195":{"position":[[0,14]]},"1205":{"position":[[0,14]]},"1212":{"position":[[0,14]]},"1219":{"position":[[0,14]]},"1229":{"position":[[0,14]]},"1237":{"position":[[0,14]]},"1246":{"position":[[0,14]]},"1252":{"position":[[0,14]]},"1259":{"position":[[0,14]]},"1265":{"position":[[0,14]]},"1284":{"position":[[0,14]]},"1299":{"position":[[0,14]]},"1312":{"position":[[0,14]]},"1323":{"position":[[0,14]]},"1336":{"position":[[0,14]]},"1347":{"position":[[0,14]]},"1355":{"position":[[0,14]]},"1362":{"position":[[0,14]]},"1366":{"position":[[0,14]]},"1375":{"position":[[0,14]]},"1385":{"position":[[0,14]]},"1399":{"position":[[0,14]]},"1410":{"position":[[0,14]]},"1419":{"position":[[0,14]]},"1426":{"position":[[0,14]]},"1447":{"position":[[9,13]]},"1452":{"position":[[0,11]]},"1479":{"position":[[7,9]]}},"content":{"1":{"position":[[198,13]]},"20":{"position":[[1124,14]]},"21":{"position":[[789,10]]},"24":{"position":[[101,13]]},"54":{"position":[[13,9],[261,13],[479,13]]},"56":{"position":[[1230,14],[1247,13],[1696,13],[1837,13]]},"76":{"position":[[606,9]]},"79":{"position":[[77,9]]},"80":{"position":[[67,13],[617,14]]},"81":{"position":[[438,13],[549,13],[1311,13],[1504,13],[1859,10],[2090,14],[2202,14],[2447,13],[2755,13],[2829,13]]},"82":{"position":[[358,13],[1309,14],[1358,14],[1674,13],[3035,14],[3433,14],[3458,14],[3582,13],[3925,13],[5026,13]]},"83":{"position":[[645,9]]},"107":{"position":[[1165,11]]},"119":{"position":[[156,9],[524,13]]},"120":{"position":[[589,14],[606,13],[1839,13],[1984,13]]},"138":{"position":[[2076,12]]},"141":{"position":[[2032,12]]},"142":{"position":[[2136,12]]},"144":{"position":[[428,13]]},"154":{"position":[[1485,11]]},"168":{"position":[[328,9]]},"190":{"position":[[362,10],[1550,13],[1850,14]]},"192":{"position":[[1972,13],[2212,14]]},"197":{"position":[[95,14]]},"203":{"position":[[311,9]]},"205":{"position":[[272,13]]},"206":{"position":[[159,13],[355,10],[1002,13]]},"207":{"position":[[566,10]]},"209":{"position":[[27,13]]},"210":{"position":[[1544,13]]},"211":{"position":[[452,13]]},"216":{"position":[[576,9]]},"217":{"position":[[2140,14]]},"218":{"position":[[503,14]]},"221":{"position":[[192,9],[292,13],[1434,13],[1569,9],[1739,9]]},"222":{"position":[[729,9]]},"230":{"position":[[904,11]]},"232":{"position":[[500,9]]},"236":{"position":[[1576,15]]},"237":{"position":[[90,11],[2153,9]]},"239":{"position":[[399,9],[547,9],[1007,10],[1656,13]]},"240":{"position":[[65,13],[2739,13],[2972,9],[4044,13],[4492,10],[4797,13],[4933,10]]},"241":{"position":[[157,9]]},"250":{"position":[[1,9],[90,14],[126,13],[231,13]]},"254":{"position":[[1342,14]]},"259":{"position":[[504,14],[1601,14],[2198,14],[3159,14]]},"289":{"position":[[603,9]]},"290":{"position":[[1139,13]]},"291":{"position":[[602,13],[718,13]]},"296":{"position":[[7273,9],[7384,13]]},"300":{"position":[[550,9]]},"301":{"position":[[1348,13]]},"302":{"position":[[602,13],[718,13]]},"306":{"position":[[195,13]]},"307":{"position":[[51,14]]},"314":{"position":[[2413,9],[2958,13]]},"320":{"position":[[1119,14]]},"323":{"position":[[719,12],[1822,10],[1972,14]]},"345":{"position":[[30,13]]},"349":{"position":[[276,15]]},"350":{"position":[[5,9],[212,13]]},"358":{"position":[[5,9],[212,13]]},"366":{"position":[[492,14]]},"369":{"position":[[5,9],[212,13]]},"373":{"position":[[305,13]]},"374":{"position":[[97,9]]},"375":{"position":[[291,11]]},"376":{"position":[[5,9],[212,13]]},"382":{"position":[[97,9]]},"384":{"position":[[10,9]]},"385":{"position":[[10,9]]},"386":{"position":[[5,9],[212,13]]},"391":{"position":[[5,9],[212,13]]},"396":{"position":[[5,9],[212,13]]},"400":{"position":[[113,10]]},"401":{"position":[[9,9],[258,13]]},"407":{"position":[[5,9],[212,13]]},"416":{"position":[[5,9],[212,13]]},"417":{"position":[[1380,13],[1394,10]]},"419":{"position":[[363,13],[537,14],[582,13],[628,13],[1189,10],[1291,13],[1376,14]]},"423":{"position":[[5,9],[212,13]]},"428":{"position":[[41,10]]},"430":{"position":[[235,13]]},"431":{"position":[[5,9],[212,13]]},"436":{"position":[[1053,11]]},"437":{"position":[[5,9],[212,13]]},"440":{"position":[[379,13],[553,14],[598,13],[644,13],[1205,10],[1307,13]]},"444":{"position":[[100,9]]},"447":{"position":[[5,9],[212,13]]},"453":{"position":[[5,9],[212,13]]},"459":{"position":[[5,9],[212,13]]},"465":{"position":[[5,9],[212,13]]},"469":{"position":[[10,9]]},"472":{"position":[[5,9],[212,13]]},"480":{"position":[[320,9]]},"481":{"position":[[5,9],[212,13]]},"483":{"position":[[128,10]]},"485":{"position":[[170,14]]},"487":{"position":[[234,14]]},"488":{"position":[[219,13]]},"495":{"position":[[5,9],[212,13]]},"499":{"position":[[458,14]]},"501":{"position":[[5,9],[168,13]]},"502":{"position":[[1028,13],[1042,10]]},"504":{"position":[[307,13],[481,14],[526,13],[572,13],[1005,14]]},"508":{"position":[[5,9],[212,13]]},"515":{"position":[[4,9]]},"516":{"position":[[5,9],[212,13]]},"517":{"position":[[195,14]]},"520":{"position":[[10,9]]},"525":{"position":[[5,9],[212,13]]},"529":{"position":[[10,9]]},"533":{"position":[[5,9],[212,13]]},"534":{"position":[[1537,14]]},"539":{"position":[[5,9],[212,13]]},"544":{"position":[[5,9],[212,13]]},"545":{"position":[[1004,13],[1018,10]]},"547":{"position":[[364,13],[538,14],[583,13],[629,13],[1191,10],[1293,13],[1378,14]]},"548":{"position":[[53,10],[267,9],[641,14],[793,14],[1170,10]]},"554":{"position":[[213,10]]},"555":{"position":[[5,9],[209,13]]},"562":{"position":[[123,10]]},"563":{"position":[[276,13]]},"568":{"position":[[321,9]]},"571":{"position":[[778,9]]},"572":{"position":[[5,9],[212,13]]},"573":{"position":[[396,14]]},"582":{"position":[[391,9]]},"583":{"position":[[5,9],[202,13]]},"592":{"position":[[5,9],[209,13]]},"593":{"position":[[406,10]]},"595":{"position":[[39,14]]},"600":{"position":[[5,9]]},"606":{"position":[[163,13]]},"609":{"position":[[335,9]]},"610":{"position":[[5,9],[212,13]]},"617":{"position":[[702,9]]},"618":{"position":[[5,9],[212,13]]},"624":{"position":[[5,9],[212,13]]},"630":{"position":[[5,9],[212,13]]},"634":{"position":[[450,14]]},"636":{"position":[[5,9],[212,13]]},"637":{"position":[[564,13],[578,10]]},"639":{"position":[[305,13],[479,14],[524,13],[570,13],[1003,14]]},"640":{"position":[[159,14],[180,13]]},"645":{"position":[[57,10],[493,14]]},"646":{"position":[[5,9],[212,13]]},"649":{"position":[[601,15]]},"652":{"position":[[57,10],[493,14]]},"653":{"position":[[5,9],[212,13]]},"655":{"position":[[300,13]]},"657":{"position":[[170,14]]},"659":{"position":[[4,9],[125,13],[376,13]]},"660":{"position":[[696,13]]},"669":{"position":[[5,9],[212,13]]},"673":{"position":[[170,14]]},"675":{"position":[[77,13],[246,9]]},"676":{"position":[[219,13]]},"683":{"position":[[233,9]]},"684":{"position":[[5,9],[212,13]]},"688":{"position":[[170,14]]},"690":{"position":[[338,11]]},"691":{"position":[[219,13]]},"699":{"position":[[5,9],[212,13]]},"705":{"position":[[5,9],[212,13]]},"711":{"position":[[5,9],[212,13]]},"718":{"position":[[4,9],[357,13]]},"719":{"position":[[5,9],[207,13]]},"724":{"position":[[40,10],[426,13]]},"727":{"position":[[5,9],[212,13]]},"734":{"position":[[5,9],[212,13]]},"740":{"position":[[5,9],[212,13]]},"746":{"position":[[5,9],[212,13]]},"750":{"position":[[1187,10],[1234,13],[1255,9],[1420,9]]},"752":{"position":[[864,9],[995,9]]},"753":{"position":[[370,9],[416,9],[461,13],[529,13],[1686,9]]},"754":{"position":[[1010,13],[1148,10],[1200,13],[1249,13]]},"756":{"position":[[5,9],[212,13]]},"757":{"position":[[2207,9]]},"764":{"position":[[1156,13]]},"766":{"position":[[1187,10]]},"767":{"position":[[516,9],[562,9],[607,13],[675,13],[2490,9]]},"769":{"position":[[5,9],[212,13]]},"770":{"position":[[2207,9]]},"777":{"position":[[1156,13]]},"780":{"position":[[174,13]]},"781":{"position":[[5,9],[209,13]]},"784":{"position":[[153,9],[215,9],[260,13]]},"786":{"position":[[127,10]]},"789":{"position":[[1588,10],[1635,13],[1656,9],[1821,9]]},"791":{"position":[[869,9],[1029,9]]},"792":{"position":[[794,9],[840,9],[885,13],[953,13],[2471,9]]},"793":{"position":[[329,9],[375,9],[420,13],[488,13],[1709,9]]},"794":{"position":[[1214,13],[1352,10],[1404,13],[1453,13]]},"796":{"position":[[5,9],[213,13]]},"797":{"position":[[2214,9]]},"804":{"position":[[1154,13]]},"807":{"position":[[1175,10]]},"808":{"position":[[345,9],[391,9],[436,13],[504,13],[1659,9]]},"809":{"position":[[1214,13],[1352,10],[1404,13],[1453,13]]},"811":{"position":[[5,9],[212,13]]},"812":{"position":[[2214,9]]},"819":{"position":[[1154,13]]},"823":{"position":[[1175,10]]},"824":{"position":[[586,9],[632,9],[677,13],[745,13],[2602,9]]},"825":{"position":[[1050,13],[1188,10],[1240,13],[1289,13]]},"827":{"position":[[5,9],[212,13]]},"828":{"position":[[2214,9]]},"835":{"position":[[1154,13]]},"840":{"position":[[2404,10]]},"841":{"position":[[5,9],[212,13]]},"849":{"position":[[3544,10]]},"850":{"position":[[5,9],[212,13]]},"855":{"position":[[337,13]]},"857":{"position":[[289,14]]},"858":{"position":[[5,9],[212,13]]},"865":{"position":[[16,14]]},"866":{"position":[[5,9],[212,13],[346,9],[392,9],[437,13],[505,13]]},"877":{"position":[[16,14],[236,10]]},"878":{"position":[[5,9],[212,13],[356,9],[402,9],[447,13],[515,13]]},"884":{"position":[[5,9],[212,13]]},"890":{"position":[[5,9],[213,13]]},"896":{"position":[[5,9],[212,13]]},"903":{"position":[[518,14]]},"904":{"position":[[585,9],[631,9],[676,13],[744,13],[2417,9]]},"906":{"position":[[5,9],[212,13]]},"907":{"position":[[1937,14]]},"915":{"position":[[518,14],[1091,13],[1112,9],[1277,9]]},"917":{"position":[[1099,10]]},"918":{"position":[[794,9],[840,9],[885,13],[953,13],[2709,9]]},"919":{"position":[[329,9],[375,9],[420,13],[488,13],[1624,10],[2435,14],[2616,9]]},"921":{"position":[[5,9],[212,13]]},"923":{"position":[[1937,14]]},"930":{"position":[[518,14]]},"931":{"position":[[349,9],[395,9],[440,13],[508,13],[2138,9]]},"933":{"position":[[5,9],[212,13]]},"942":{"position":[[62,13]]},"946":{"position":[[322,11],[359,9]]},"949":{"position":[[5,9],[212,13]]},"958":{"position":[[5,9],[212,13]]},"963":{"position":[[672,14],[1245,13],[1266,9],[1431,9]]},"964":{"position":[[610,9],[708,10]]},"965":{"position":[[1099,10]]},"967":{"position":[[5,9],[212,13]]},"968":{"position":[[1937,14]]},"977":{"position":[[246,10]]},"981":{"position":[[5,9],[212,13]]},"989":{"position":[[674,9]]},"990":{"position":[[5,9],[212,13]]},"996":{"position":[[5,9],[212,13]]},"1000":{"position":[[803,9]]},"1004":{"position":[[757,9]]},"1005":{"position":[[5,9],[209,13]]},"1006":{"position":[[91,10],[353,9]]},"1008":{"position":[[560,10]]},"1014":{"position":[[5,9],[212,13]]},"1019":{"position":[[23,10],[150,10],[299,10]]},"1021":{"position":[[5,9],[212,13],[1322,10],[1539,13],[1553,10]]},"1023":{"position":[[344,13],[518,14],[563,13],[609,13],[1172,10],[1274,13],[1359,14]]},"1027":{"position":[[5,9],[212,13]]},"1033":{"position":[[9,9],[216,13]]},"1036":{"position":[[166,12],[491,10]]},"1042":{"position":[[1242,14],[1294,13]]},"1043":{"position":[[329,9],[375,9],[420,13],[488,13],[1799,14],[1951,9]]},"1044":{"position":[[5,9],[212,13]]},"1047":{"position":[[379,13]]},"1051":{"position":[[585,9],[631,9],[676,13],[744,13],[2133,9]]},"1052":{"position":[[5,9],[212,13]]},"1055":{"position":[[379,13]]},"1059":{"position":[[349,9],[395,9],[440,13],[508,13],[1985,9]]},"1060":{"position":[[5,9],[212,13]]},"1063":{"position":[[379,13]]},"1066":{"position":[[16,9]]},"1067":{"position":[[704,14]]},"1069":{"position":[[5,9],[212,13]]},"1075":{"position":[[5,9],[212,13]]},"1084":{"position":[[5,9],[212,13]]},"1087":{"position":[[149,14]]},"1093":{"position":[[5,9],[212,13]]},"1100":{"position":[[5,9],[212,13]]},"1106":{"position":[[5,9],[213,13]]},"1112":{"position":[[5,9],[212,13]]},"1118":{"position":[[306,9],[891,9]]},"1120":{"position":[[625,13]]},"1123":{"position":[[296,10]]},"1124":{"position":[[5,9],[212,13]]},"1132":{"position":[[5,9],[213,13]]},"1137":{"position":[[101,9]]},"1138":{"position":[[641,14],[1686,14]]},"1143":{"position":[[29,9]]},"1146":{"position":[[449,14],[500,14]]},"1149":{"position":[[117,10],[215,10]]},"1150":{"position":[[29,9]]},"1151":{"position":[[626,14]]},"1153":{"position":[[25,11],[94,9]]},"1154":{"position":[[10,9],[527,9],[581,9],[626,13]]},"1156":{"position":[[415,10]]},"1161":{"position":[[29,9]]},"1162":{"position":[[554,15]]},"1169":{"position":[[29,9]]},"1173":{"position":[[461,14],[512,14]]},"1177":{"position":[[4,9],[485,9]]},"1178":{"position":[[101,9]]},"1179":{"position":[[453,14],[1223,14]]},"1181":{"position":[[25,11],[94,9]]},"1186":{"position":[[121,11],[506,10],[536,13]]},"1187":{"position":[[101,9]]},"1190":{"position":[[25,11],[94,9]]},"1195":{"position":[[101,9],[676,13]]},"1198":{"position":[[10,9],[242,9],[304,9],[349,13]]},"1200":{"position":[[298,9],[681,13]]},"1201":{"position":[[552,13],[623,14],[680,13]]},"1203":{"position":[[571,9]]},"1204":{"position":[[40,9],[353,9],[618,9]]},"1205":{"position":[[101,9]]},"1212":{"position":[[29,9]]},"1215":{"position":[[449,14],[500,14]]},"1219":{"position":[[29,9]]},"1223":{"position":[[461,14],[512,14]]},"1226":{"position":[[152,9],[220,11]]},"1229":{"position":[[101,9]]},"1230":{"position":[[425,11]]},"1232":{"position":[[175,14],[437,13]]},"1243":{"position":[[1156,11],[1285,13]]},"1245":{"position":[[647,9]]},"1246":{"position":[[101,9]]},"1247":{"position":[[801,9]]},"1252":{"position":[[5,9],[209,13]]},"1255":{"position":[[153,9],[215,9],[260,13]]},"1259":{"position":[[29,9]]},"1260":{"position":[[340,14]]},"1265":{"position":[[80,13]]},"1268":{"position":[[1,11]]},"1272":{"position":[[26,9]]},"1283":{"position":[[10,9]]},"1284":{"position":[[101,9]]},"1286":{"position":[[1275,13],[1438,10],[1490,13],[1539,13]]},"1289":{"position":[[10,9],[859,9],[921,9],[966,13],[1163,13],[1184,9],[1615,9]]},"1298":{"position":[[995,13],[1016,9]]},"1299":{"position":[[101,9]]},"1301":{"position":[[1111,13],[1274,10],[1326,13],[1375,13]]},"1303":{"position":[[349,9],[395,9],[440,13],[508,13],[632,9],[677,13],[874,13],[895,9],[1219,9],[1781,9]]},"1310":{"position":[[483,13],[504,9],[936,9]]},"1312":{"position":[[101,9]]},"1313":{"position":[[451,14],[1230,14],[1687,14]]},"1320":{"position":[[10,9]]},"1322":{"position":[[729,9],[1078,9],[1140,9],[1185,13],[1382,13],[1403,9]]},"1323":{"position":[[101,9]]},"1325":{"position":[[1275,13],[1438,10],[1490,13],[1539,13]]},"1333":{"position":[[10,9]]},"1335":{"position":[[729,9],[1029,13],[1050,9]]},"1336":{"position":[[101,9]]},"1337":{"position":[[451,14],[1230,14],[1687,14]]},"1344":{"position":[[10,9]]},"1346":{"position":[[995,13],[1016,9],[1341,9]]},"1347":{"position":[[101,9]]},"1348":{"position":[[451,14],[1230,14]]},"1355":{"position":[[101,9]]},"1356":{"position":[[418,13]]},"1366":{"position":[[34,14]]},"1373":{"position":[[567,9],[613,9],[658,13],[726,13],[1382,9]]},"1374":{"position":[[567,9],[613,9],[658,13],[726,13],[1386,9]]},"1375":{"position":[[101,9]]},"1384":{"position":[[1137,11]]},"1385":{"position":[[101,9]]},"1386":{"position":[[424,14]]},"1388":{"position":[[25,11],[94,9],[372,9],[711,9]]},"1392":{"position":[[193,11],[263,11]]},"1393":{"position":[[167,13]]},"1397":{"position":[[346,9],[392,9],[437,13],[505,13],[1220,9]]},"1398":{"position":[[345,9],[391,9],[436,13],[504,13],[1223,9]]},"1399":{"position":[[101,9]]},"1408":{"position":[[515,14],[567,13]]},"1409":{"position":[[329,9],[375,9],[420,13],[488,13],[1072,14],[1224,9]]},"1410":{"position":[[101,9]]},"1419":{"position":[[101,9]]},"1422":{"position":[[25,11],[94,9]]},"1426":{"position":[[101,9]]},"1427":{"position":[[392,14],[990,14]]},"1429":{"position":[[276,14],[738,13]]},"1447":{"position":[[79,14],[643,14]]},"1448":{"position":[[161,13]]},"1451":{"position":[[587,10]]},"1452":{"position":[[26,10],[212,11],[486,10],[807,10],[1025,10],[1220,10],[3412,13]]},"1453":{"position":[[1291,14],[1623,11]]},"1455":{"position":[[289,10]]},"1461":{"position":[[2763,13],[3355,13],[3449,13]]},"1479":{"position":[[150,13]]},"1480":{"position":[[523,14],[540,13]]}},"keywords":{}}],["configuration"",{"_index":5069,"title":{},"content":{"931":{"position":[[709,20]]}},"keywords":{}}],["configuration.a",{"_index":5213,"title":{},"content":{"1031":{"position":[[379,15]]}},"keywords":{}}],["configuration.ev",{"_index":6276,"title":{},"content":{"1359":{"position":[[388,19]]}},"keywords":{}}],["configurationpackag",{"_index":3282,"title":{},"content":{"363":{"position":[[198,20],[263,20],[336,20],[410,20],[490,20],[567,20],[633,20],[708,20],[787,20],[862,20],[935,20],[1014,20],[1085,20],[1166,20],[1254,20],[1340,20],[1422,20],[1504,20],[1577,20],[1656,20],[1724,20],[1788,20],[1850,20],[1917,20],[2008,20],[2079,20],[2144,20]]},"364":{"position":[[523,20],[593,20],[664,20],[733,20],[802,20],[868,20],[934,20],[1013,20],[1097,20],[1176,20],[1243,20],[1307,20],[1375,20],[1455,20],[1558,20],[1650,20],[1736,20],[1811,20],[1880,20],[1946,20],[2014,20],[2083,20],[2151,20],[2215,20],[2278,20],[2349,20],[2427,20],[2506,20],[2574,20],[2641,20],[2709,20],[2775,20],[2851,20],[2929,20],[3021,20],[3091,20],[3157,20],[3220,20],[3285,20],[3351,20],[3421,20],[3491,20],[3561,20],[3640,20]]},"1120":{"position":[[9,20],[88,20],[168,20],[250,20],[354,20],[448,20],[542,20],[656,20],[735,20],[808,20],[888,20],[966,20],[1046,20],[1131,20],[1224,20],[1314,20],[1388,20],[1460,20],[1530,20],[1605,20],[1677,20],[1750,20],[1822,20],[1895,20],[1972,20]]}},"keywords":{}}],["configurationsissu",{"_index":4468,"title":{},"content":{"709":{"position":[[159,19]]}},"keywords":{}}],["confirm",{"_index":1019,"title":{},"content":{"68":{"position":[[222,7]]},"414":{"position":[[884,7]]},"485":{"position":[[416,12]]},"486":{"position":[[64,12]]},"657":{"position":[[416,12]]},"658":{"position":[[64,12]]},"673":{"position":[[416,12]]},"674":{"position":[[64,12]]},"688":{"position":[[416,12]]},"689":{"position":[[64,12]]},"840":{"position":[[77,7]]},"922":{"position":[[579,9]]}},"keywords":{}}],["confirmed_flush_lsn",{"_index":5057,"title":{},"content":{"922":{"position":[[1284,19],[1476,19]]}},"keywords":{}}],["confirmed_flush_lsnproperti",{"_index":5054,"title":{},"content":{"922":{"position":[[463,27]]}},"keywords":{}}],["conflict",{"_index":935,"title":{},"content":{"62":{"position":[[112,9],[449,11],[539,11],[632,11]]},"278":{"position":[[1277,8]]},"280":{"position":[[2131,8]]},"1370":{"position":[[645,8]]},"1462":{"position":[[303,9]]}},"keywords":{}}],["confluenc",{"_index":3781,"title":{"468":{"position":[[0,10]]}},"content":{"471":{"position":[[25,10],[52,10]]},"472":{"position":[[415,10],[721,10],[786,10]]}},"keywords":{}}],["confluence:dev",{"_index":3803,"title":{},"content":{"473":{"position":[[159,14]]}},"keywords":{}}],["confluent",{"_index":3130,"title":{},"content":{"320":{"position":[[2424,9]]}},"keywords":{}}],["confluent'",{"_index":2634,"title":{},"content":{"246":{"position":[[188,11]]},"429":{"position":[[1264,11]]}},"keywords":{}}],["conform",{"_index":1395,"title":{},"content":{"97":{"position":[[651,7]]},"268":{"position":[[1166,7]]},"269":{"position":[[737,7]]},"270":{"position":[[1325,7]]}},"keywords":{}}],["congratul",{"_index":2613,"title":{},"content":{"241":{"position":[[1,16]]}},"keywords":{}}],["conjunct",{"_index":1965,"title":{},"content":{"165":{"position":[[2322,11]]}},"keywords":{}}],["connect",{"_index":693,"title":{"83":{"position":[[0,10]]},"220":{"position":[[10,11]]},"244":{"position":[[0,10]]},"247":{"position":[[0,10]]},"248":{"position":[[7,7]]},"429":{"position":[[19,10]]},"837":{"position":[[24,7]]},"846":{"position":[[15,8]]},"964":{"position":[[16,11]]},"1298":{"position":[[0,7]]},"1321":{"position":[[0,10]]},"1322":{"position":[[0,7]]},"1334":{"position":[[0,7]]},"1335":{"position":[[0,7]]},"1346":{"position":[[0,7]]},"1374":{"position":[[0,10]]},"1398":{"position":[[0,10]]}},"content":{"37":{"position":[[285,8]]},"45":{"position":[[398,8],[522,7]]},"56":{"position":[[948,7]]},"58":{"position":[[821,7]]},"83":{"position":[[618,11],[1284,7]]},"119":{"position":[[46,7]]},"120":{"position":[[275,7]]},"138":{"position":[[1308,8],[1681,10]]},"141":{"position":[[1686,10]]},"142":{"position":[[1301,8],[1698,10]]},"170":{"position":[[23,9]]},"173":{"position":[[613,10]]},"179":{"position":[[490,11]]},"184":{"position":[[946,11]]},"189":{"position":[[941,7]]},"190":{"position":[[1591,10]]},"192":{"position":[[2013,10]]},"198":{"position":[[965,10]]},"201":{"position":[[38,10]]},"204":{"position":[[245,7],[577,10],[651,9],[839,10],[885,10]]},"206":{"position":[[528,10],[917,10]]},"211":{"position":[[508,10]]},"213":{"position":[[412,10]]},"216":{"position":[[43,7],[503,7]]},"217":{"position":[[34,7],[1006,10]]},"218":{"position":[[548,10]]},"221":{"position":[[936,10],[1940,11]]},"222":{"position":[[771,10],[857,7]]},"223":{"position":[[931,7]]},"224":{"position":[[685,7]]},"225":{"position":[[380,10]]},"237":{"position":[[3350,11],[3601,7]]},"238":{"position":[[621,11],[779,10]]},"239":{"position":[[413,10]]},"240":{"position":[[2588,10],[3707,10]]},"247":{"position":[[4,7],[62,10]]},"250":{"position":[[39,10]]},"259":{"position":[[191,10],[630,10],[1880,10]]},"267":{"position":[[1794,7]]},"290":{"position":[[34,7],[1167,10]]},"291":{"position":[[49,7],[630,10],[805,10]]},"301":{"position":[[34,7],[1376,10]]},"302":{"position":[[49,7],[630,10],[805,10]]},"351":{"position":[[478,10]]},"359":{"position":[[456,10]]},"366":{"position":[[1103,7]]},"367":{"position":[[172,7]]},"370":{"position":[[1530,7],[1940,7],[2179,10]]},"387":{"position":[[1479,10]]},"392":{"position":[[143,7],[309,7],[435,7]]},"397":{"position":[[595,7]]},"400":{"position":[[61,10]]},"402":{"position":[[560,10]]},"408":{"position":[[688,10]]},"417":{"position":[[609,7],[787,7],[978,7]]},"424":{"position":[[511,10]]},"428":{"position":[[72,7]]},"429":{"position":[[28,10],[210,10],[636,10],[970,10],[1356,10],[1412,10]]},"432":{"position":[[141,7],[244,10],[307,10],[392,10],[441,10],[1300,10]]},"438":{"position":[[1392,10],[1414,10],[1507,10]]},"448":{"position":[[1364,10]]},"454":{"position":[[700,10]]},"460":{"position":[[717,10]]},"466":{"position":[[424,10]]},"496":{"position":[[694,10]]},"509":{"position":[[690,10]]},"517":{"position":[[4125,10]]},"534":{"position":[[1840,10]]},"556":{"position":[[2342,10]]},"573":{"position":[[1411,10]]},"584":{"position":[[1474,10]]},"611":{"position":[[1343,10]]},"619":{"position":[[193,10],[720,10]]},"625":{"position":[[323,10]]},"631":{"position":[[651,10]]},"654":{"position":[[935,10]]},"670":{"position":[[811,10]]},"685":{"position":[[623,10]]},"700":{"position":[[462,10]]},"706":{"position":[[461,10]]},"712":{"position":[[653,10]]},"720":{"position":[[952,10]]},"724":{"position":[[111,7]]},"735":{"position":[[526,10]]},"741":{"position":[[638,10]]},"747":{"position":[[1521,10]]},"750":{"position":[[1430,11]]},"753":{"position":[[127,11],[309,11],[573,10],[1583,10]]},"757":{"position":[[988,7],[2130,10]]},"767":{"position":[[7,11],[455,11],[719,10]]},"770":{"position":[[988,7],[2130,10]]},"780":{"position":[[31,10]]},"782":{"position":[[222,7]]},"784":{"position":[[22,10],[89,11],[375,10]]},"789":{"position":[[1831,11]]},"792":{"position":[[193,11],[425,12],[743,11],[997,10]]},"793":{"position":[[7,11],[278,11],[532,10],[1606,10]]},"797":{"position":[[988,7],[2137,10]]},"808":{"position":[[7,11],[294,11],[548,10]]},"812":{"position":[[988,7],[2137,10]]},"824":{"position":[[7,11],[535,11],[789,10]]},"828":{"position":[[988,7],[2137,10]]},"840":{"position":[[187,7],[2488,7]]},"842":{"position":[[1351,10],[1441,11],[2482,11],[2524,10],[2632,11]]},"845":{"position":[[21,10]]},"846":{"position":[[29,7],[239,7]]},"849":{"position":[[130,7],[595,11],[745,8],[805,12],[864,8],[1457,11],[2503,7],[3017,8],[3628,7]]},"851":{"position":[[742,10]]},"855":{"position":[[84,7]]},"862":{"position":[[26,11]]},"866":{"position":[[294,11],[549,10]]},"871":{"position":[[47,8]]},"874":{"position":[[26,11]]},"878":{"position":[[304,11],[559,10]]},"879":{"position":[[81,10],[103,10],[174,7]]},"885":{"position":[[773,10]]},"897":{"position":[[417,10]]},"904":{"position":[[7,11],[534,11],[788,10],[1278,7]]},"907":{"position":[[1325,10],[1584,10],[1751,7]]},"915":{"position":[[1287,11]]},"917":{"position":[[251,7]]},"918":{"position":[[193,11],[425,12],[743,11],[997,10],[1570,7]]},"919":{"position":[[7,11],[278,11],[532,10],[752,7],[2513,10]]},"922":{"position":[[923,10],[2463,11]]},"923":{"position":[[1325,10],[1584,10],[1751,7]]},"931":{"position":[[7,11],[298,11],[552,10],[933,7]]},"934":{"position":[[1325,10],[1584,10]]},"942":{"position":[[329,11]]},"946":{"position":[[77,7]]},"947":{"position":[[155,8],[174,10],[258,10],[302,10],[372,10],[535,10],[607,10]]},"950":{"position":[[1325,10],[1584,10]]},"959":{"position":[[518,10]]},"963":{"position":[[106,10],[154,10],[193,10],[1441,11]]},"964":{"position":[[40,10],[97,10],[299,10],[467,10],[530,10],[575,11]]},"965":{"position":[[251,7]]},"968":{"position":[[1325,10],[1584,10],[1751,7]]},"982":{"position":[[520,10]]},"997":{"position":[[486,10]]},"1000":{"position":[[493,10]]},"1009":{"position":[[1783,10]]},"1015":{"position":[[573,10]]},"1018":{"position":[[44,11]]},"1028":{"position":[[523,10]]},"1034":{"position":[[96,11]]},"1042":{"position":[[1,7],[1109,10],[1338,10]]},"1043":{"position":[[7,11],[278,11],[532,10],[632,7]]},"1051":{"position":[[7,11],[534,11],[788,10],[888,7]]},"1059":{"position":[[7,11],[298,11],[552,10],[652,7]]},"1070":{"position":[[1134,10]]},"1076":{"position":[[916,10]]},"1085":{"position":[[1502,10]]},"1094":{"position":[[588,10]]},"1101":{"position":[[428,10]]},"1107":{"position":[[543,10]]},"1113":{"position":[[617,10]]},"1118":{"position":[[72,10],[159,11],[320,10],[1096,10]]},"1125":{"position":[[387,7]]},"1133":{"position":[[1339,10]]},"1136":{"position":[[256,7]]},"1138":{"position":[[764,7],[821,7],[1230,7]]},"1140":{"position":[[3073,7],[3116,10]]},"1144":{"position":[[748,7]]},"1149":{"position":[[131,7]]},"1151":{"position":[[230,7],[438,7]]},"1154":{"position":[[42,11],[203,10],[275,8],[416,11],[473,11],[743,10]]},"1170":{"position":[[748,7]]},"1186":{"position":[[232,10],[259,10]]},"1194":{"position":[[95,7]]},"1198":{"position":[[56,11],[178,11],[464,10]]},"1251":{"position":[[31,10]]},"1253":{"position":[[295,7]]},"1255":{"position":[[22,10],[89,11],[375,10]]},"1268":{"position":[[177,10],[233,10],[304,10],[370,8],[387,10],[587,11]]},"1272":{"position":[[259,11]]},"1282":{"position":[[376,7]]},"1283":{"position":[[43,11],[170,7],[297,7],[371,10]]},"1285":{"position":[[370,7],[898,10],[1049,10],[1177,10],[1289,10]]},"1286":{"position":[[1680,10],[1745,10],[1791,7],[1812,11],[1878,7],[1899,11],[2062,10],[2207,7],[2228,11]]},"1288":{"position":[[88,7]]},"1289":{"position":[[43,11],[170,7],[426,12],[591,7],[810,7],[1083,10],[1701,10]]},"1292":{"position":[[1079,10]]},"1298":{"position":[[931,7]]},"1300":{"position":[[370,7],[898,10],[1049,10],[1177,10],[1289,10]]},"1301":{"position":[[1516,10],[1581,10],[1627,7],[1648,11],[1714,7],[1735,11],[1898,10],[2043,7],[2064,11]]},"1303":{"position":[[7,11],[298,11],[552,10],[794,10]]},"1306":{"position":[[1079,10]]},"1310":{"position":[[391,7],[1022,10]]},"1311":{"position":[[1,7],[134,7],[208,10]]},"1313":{"position":[[574,7],[752,10],[1501,7]]},"1316":{"position":[[3073,7],[3116,10]]},"1320":{"position":[[43,11]]},"1321":{"position":[[206,12]]},"1322":{"position":[[771,10],[857,7],[1029,7],[1302,10]]},"1324":{"position":[[370,7],[898,10],[1049,10],[1177,10],[1289,10]]},"1325":{"position":[[1680,10],[1745,10],[1791,7],[1812,11],[1878,7],[1899,11],[2062,10],[2207,7],[2228,11]]},"1329":{"position":[[1079,10]]},"1333":{"position":[[43,11]]},"1334":{"position":[[206,12]]},"1335":{"position":[[771,10],[857,7]]},"1337":{"position":[[574,7],[752,10],[1501,7]]},"1340":{"position":[[3073,7],[3116,10]]},"1344":{"position":[[43,11]]},"1346":{"position":[[931,7]]},"1348":{"position":[[574,7],[752,10]]},"1351":{"position":[[3073,7],[3116,10]]},"1356":{"position":[[234,7]]},"1373":{"position":[[7,11],[516,11],[770,10],[870,7]]},"1374":{"position":[[7,11],[516,11],[770,10],[870,7]]},"1376":{"position":[[370,7]]},"1379":{"position":[[418,7],[463,10]]},"1386":{"position":[[117,11]]},"1394":{"position":[[697,7],[716,10]]},"1397":{"position":[[7,11],[295,11],[549,10],[649,7]]},"1398":{"position":[[7,11],[294,11],[548,10],[648,7]]},"1400":{"position":[[370,7]]},"1403":{"position":[[418,7],[463,10]]},"1408":{"position":[[1,7],[382,10],[611,10]]},"1409":{"position":[[7,11],[278,11],[532,10],[632,7]]},"1411":{"position":[[370,7]]},"1414":{"position":[[418,7],[463,10]]},"1418":{"position":[[38,10],[74,8]]},"1425":{"position":[[217,10]]},"1427":{"position":[[515,7]]},"1431":{"position":[[3096,7],[3139,10]]},"1434":{"position":[[287,7]]},"1440":{"position":[[1657,8]]},"1480":{"position":[[212,7]]}},"keywords":{}}],["connect.fail",{"_index":1819,"title":{},"content":{"141":{"position":[[1397,14]]}},"keywords":{}}],["connection_limit",{"_index":4792,"title":{},"content":{"843":{"position":[[352,17]]}},"keywords":{}}],["connection_typ",{"_index":4791,"title":{},"content":{"843":{"position":[[257,16]]}},"keywords":{}}],["connector",{"_index":224,"title":{"38":{"position":[[0,11]]},"52":{"position":[[0,11]]},"78":{"position":[[0,10]]},"79":{"position":[[6,11]]},"84":{"position":[[12,9]]},"85":{"position":[[10,11]]},"345":{"position":[[0,10]]},"349":{"position":[[19,9]]},"361":{"position":[[8,10]]},"362":{"position":[[18,11]]},"363":{"position":[[8,11]]},"364":{"position":[[12,11]]},"474":{"position":[[21,9]]},"479":{"position":[[20,9]]},"524":{"position":[[16,9]]},"532":{"position":[[16,9]]},"554":{"position":[[16,9]]},"617":{"position":[[16,9]]},"645":{"position":[[16,9]]},"652":{"position":[[16,9]]},"718":{"position":[[16,9]]},"733":{"position":[[16,9]]},"821":{"position":[[18,9]]},"912":{"position":[[23,9]]},"947":{"position":[[25,9]]},"977":{"position":[[13,10]]},"988":{"position":[[16,9]]},"1003":{"position":[[16,9]]},"1030":{"position":[[14,9]]},"1092":{"position":[[23,9]]},"1097":{"position":[[0,9]]},"1119":{"position":[[16,10]]},"1120":{"position":[[26,11]]},"1448":{"position":[[9,9]]}},"content":{"6":{"position":[[619,10]]},"7":{"position":[[242,9]]},"21":{"position":[[356,11]]},"35":{"position":[[329,11]]},"36":{"position":[[460,11]]},"37":{"position":[[334,11]]},"38":{"position":[[1,10],[159,9],[181,10],[259,10],[488,10],[694,10]]},"45":{"position":[[150,10],[308,9]]},"52":{"position":[[48,10],[103,10],[189,11],[217,9]]},"53":{"position":[[50,10],[152,11],[170,10],[274,9],[355,10],[461,10],[518,11],[543,9]]},"54":{"position":[[152,9]]},"56":{"position":[[1044,9],[1082,10],[1136,10],[1737,9],[1880,10],[2010,10],[2207,11],[2226,9],[2307,9]]},"67":{"position":[[202,10],[365,11],[1794,10]]},"68":{"position":[[151,10]]},"72":{"position":[[591,11]]},"79":{"position":[[62,10],[87,10],[218,10],[261,10]]},"80":{"position":[[57,9],[308,9],[363,9]]},"81":{"position":[[1,10],[199,10],[529,10],[639,10],[666,9],[1076,10],[1140,10],[1334,9],[1596,9],[1887,10],[1954,9],[2114,10],[2322,9],[2588,10]]},"82":{"position":[[234,10],[432,9],[1348,9],[2964,9],[5072,10]]},"83":{"position":[[385,9],[562,10],[957,10]]},"84":{"position":[[375,9],[517,10],[578,10],[651,10],[831,11],[971,10],[1129,10],[1352,10],[1418,9]]},"85":{"position":[[23,10]]},"94":{"position":[[285,9],[398,10],[766,10],[2335,10]]},"95":{"position":[[86,10],[122,10]]},"96":{"position":[[15,9]]},"97":{"position":[[764,9]]},"98":{"position":[[602,9]]},"100":{"position":[[12,9],[1320,9]]},"101":{"position":[[253,9]]},"102":{"position":[[30,9]]},"104":{"position":[[183,10]]},"105":{"position":[[126,10]]},"119":{"position":[[32,10],[110,9],[240,9]]},"120":{"position":[[384,9],[422,10],[484,10],[1880,9],[2027,10],[2100,9]]},"122":{"position":[[516,10],[681,9],[800,9],[1387,9],[1505,10],[1946,9],[2021,9]]},"125":{"position":[[1407,10],[1432,9]]},"138":{"position":[[685,9]]},"140":{"position":[[114,10],[275,9]]},"142":{"position":[[640,9]]},"144":{"position":[[354,10],[389,9]]},"146":{"position":[[457,9]]},"154":{"position":[[123,11],[1742,11],[1759,10],[1804,10],[1916,11],[1933,9]]},"157":{"position":[[134,10]]},"158":{"position":[[527,9]]},"162":{"position":[[1180,9]]},"184":{"position":[[530,9]]},"189":{"position":[[1623,11],[1635,10],[1756,9],[1796,10]]},"190":{"position":[[136,10],[319,9]]},"192":{"position":[[86,10]]},"193":{"position":[[480,10],[604,10]]},"199":{"position":[[164,9]]},"205":{"position":[[160,11],[262,9]]},"207":{"position":[[26,10]]},"209":{"position":[[17,9],[237,10],[373,9],[577,9],[709,9],[1469,9]]},"212":{"position":[[323,10]]},"216":{"position":[[391,10],[404,9],[564,11]]},"217":{"position":[[380,9],[474,10],[530,9],[591,10],[1153,10],[1502,11]]},"218":{"position":[[236,10],[272,9],[302,10]]},"221":{"position":[[1542,9]]},"225":{"position":[[664,10]]},"232":{"position":[[243,9],[283,9]]},"237":{"position":[[1014,9],[1415,9]]},"239":{"position":[[2945,9]]},"240":{"position":[[2729,9],[4510,9]]},"243":{"position":[[317,10]]},"277":{"position":[[923,10]]},"286":{"position":[[364,9]]},"289":{"position":[[565,11],[641,10]]},"296":{"position":[[7289,10],[7590,10]]},"300":{"position":[[512,11],[581,10]]},"301":{"position":[[1180,9]]},"307":{"position":[[1069,10],[1537,10],[1919,10],[2405,10]]},"308":{"position":[[481,10]]},"309":{"position":[[157,9],[1282,9],[1526,10],[1826,10],[2356,10],[2963,10]]},"310":{"position":[[104,11]]},"323":{"position":[[1259,10],[1421,10],[1580,10]]},"344":{"position":[[63,10]]},"345":{"position":[[0,10],[66,10],[206,10]]},"347":{"position":[[23,10],[147,9]]},"348":{"position":[[46,10]]},"349":{"position":[[185,9]]},"350":{"position":[[15,10],[113,10],[150,11],[265,10]]},"353":{"position":[[13,9]]},"355":{"position":[[40,9]]},"358":{"position":[[15,10],[113,10],[150,11],[266,10]]},"360":{"position":[[49,10]]},"363":{"position":[[7,10],[116,10]]},"364":{"position":[[30,10],[67,10],[155,10],[254,9],[299,10],[384,10]]},"366":{"position":[[696,9],[813,9],[1028,9]]},"368":{"position":[[58,9]]},"369":{"position":[[15,10],[113,10],[150,11],[268,10]]},"370":{"position":[[56,10]]},"371":{"position":[[108,10]]},"373":{"position":[[295,9],[394,9],[634,9]]},"374":{"position":[[111,10],[218,9]]},"375":{"position":[[13,10],[307,10]]},"376":{"position":[[15,10],[113,10],[150,11],[264,10]]},"378":{"position":[[48,10]]},"379":{"position":[[408,9],[1008,10],[1054,9]]},"382":{"position":[[6,9]]},"384":{"position":[[25,9]]},"385":{"position":[[42,10]]},"386":{"position":[[15,10],[113,10],[150,11],[268,10]]},"387":{"position":[[1004,9]]},"388":{"position":[[118,10]]},"390":{"position":[[13,10]]},"391":{"position":[[15,10],[113,10],[150,11],[272,10]]},"393":{"position":[[108,10]]},"395":{"position":[[13,10]]},"396":{"position":[[15,10],[113,10],[150,11],[266,10]]},"398":{"position":[[108,10]]},"400":{"position":[[13,10]]},"401":{"position":[[39,9],[168,10],[196,11],[328,10]]},"403":{"position":[[48,10]]},"406":{"position":[[45,10]]},"407":{"position":[[15,10],[113,10],[150,11],[267,10]]},"413":{"position":[[18,9]]},"416":{"position":[[15,10],[113,10],[150,11],[260,10]]},"418":{"position":[[48,10]]},"419":{"position":[[605,10],[755,9],[975,9]]},"423":{"position":[[15,10],[113,10],[150,11],[267,10]]},"425":{"position":[[49,10]]},"427":{"position":[[6,9],[123,10],[276,9]]},"429":{"position":[[157,10],[1395,10]]},"430":{"position":[[96,10]]},"431":{"position":[[15,10],[113,10],[150,11],[270,10]]},"433":{"position":[[90,10],[501,10]]},"437":{"position":[[15,10],[113,10],[150,11],[276,10]]},"439":{"position":[[48,10]]},"440":{"position":[[621,10],[771,9],[991,9]]},"444":{"position":[[6,9]]},"447":{"position":[[15,10],[113,10],[150,11],[266,10]]},"449":{"position":[[118,10]]},"452":{"position":[[32,10]]},"453":{"position":[[15,10],[113,10],[150,11],[267,10]]},"455":{"position":[[49,10]]},"458":{"position":[[32,10]]},"459":{"position":[[15,10],[113,10],[150,11],[267,10]]},"461":{"position":[[49,10]]},"465":{"position":[[15,10],[113,10],[150,11],[263,10]]},"467":{"position":[[49,10]]},"469":{"position":[[24,10]]},"472":{"position":[[15,10],[113,10],[150,11],[264,10],[426,9]]},"473":{"position":[[118,10]]},"475":{"position":[[13,10]]},"476":{"position":[[47,10]]},"479":{"position":[[453,9]]},"480":{"position":[[6,9],[1104,9]]},"481":{"position":[[15,10],[113,10],[150,11],[266,10]]},"485":{"position":[[6,9],[51,10]]},"488":{"position":[[409,9]]},"489":{"position":[[5,9]]},"490":{"position":[[6,9]]},"491":{"position":[[234,9]]},"495":{"position":[[15,10],[113,10],[150,11],[272,10]]},"497":{"position":[[48,10]]},"499":{"position":[[6,9]]},"500":{"position":[[13,10],[142,9]]},"501":{"position":[[34,9],[69,10],[106,11],[221,10]]},"503":{"position":[[48,10]]},"504":{"position":[[549,10],[687,9],[891,9]]},"507":{"position":[[13,10]]},"508":{"position":[[15,10],[113,10],[150,11],[267,10]]},"510":{"position":[[48,10]]},"515":{"position":[[317,10],[1020,10]]},"516":{"position":[[15,10],[113,10],[150,11],[276,10]]},"517":{"position":[[29,9],[2491,9],[3386,9],[3685,9]]},"518":{"position":[[118,10]]},"520":{"position":[[24,10]]},"525":{"position":[[15,10],[113,10],[150,11],[264,10]]},"527":{"position":[[118,10]]},"529":{"position":[[24,10]]},"533":{"position":[[15,10],[113,10],[150,11],[264,10]]},"534":{"position":[[893,9]]},"535":{"position":[[118,10]]},"537":{"position":[[6,9]]},"538":{"position":[[29,10]]},"539":{"position":[[15,10],[113,10],[150,11],[264,10]]},"541":{"position":[[49,10]]},"543":{"position":[[13,10]]},"544":{"position":[[15,10],[113,10],[150,11],[261,10]]},"546":{"position":[[48,10]]},"547":{"position":[[606,10],[756,9],[976,9]]},"555":{"position":[[15,10],[110,10],[147,11],[265,10]]},"557":{"position":[[118,10]]},"562":{"position":[[13,10],[191,9]]},"563":{"position":[[40,9],[174,10],[213,11],[327,10]]},"566":{"position":[[48,10]]},"571":{"position":[[792,10]]},"572":{"position":[[15,10],[113,10],[150,11],[274,10]]},"575":{"position":[[104,10]]},"578":{"position":[[166,9]]},"581":{"position":[[13,10],[312,9]]},"582":{"position":[[405,10]]},"583":{"position":[[15,10],[103,10],[140,11],[266,10]]},"584":{"position":[[1034,9]]},"586":{"position":[[104,10]]},"590":{"position":[[623,9]]},"592":{"position":[[15,10],[110,10],[147,11],[264,10]]},"594":{"position":[[48,10]]},"595":{"position":[[585,9]]},"597":{"position":[[13,10]]},"600":{"position":[[15,10],[149,11]]},"602":{"position":[[301,9],[436,9]]},"603":{"position":[[125,10]]},"609":{"position":[[349,10]]},"610":{"position":[[15,10],[113,10],[150,11],[279,10]]},"612":{"position":[[118,10]]},"616":{"position":[[33,9],[406,9]]},"617":{"position":[[716,10]]},"618":{"position":[[15,10],[113,10],[150,11],[271,10]]},"620":{"position":[[48,10]]},"623":{"position":[[33,10]]},"624":{"position":[[15,10],[113,10],[150,11],[268,10]]},"626":{"position":[[49,10]]},"629":{"position":[[30,10]]},"630":{"position":[[15,10],[113,10],[150,11],[265,10]]},"632":{"position":[[49,10]]},"634":{"position":[[6,9]]},"635":{"position":[[13,10]]},"636":{"position":[[15,10],[113,10],[150,11],[267,10]]},"638":{"position":[[48,10]]},"639":{"position":[[547,10],[685,9],[889,9]]},"642":{"position":[[5,9]]},"645":{"position":[[483,9]]},"646":{"position":[[15,10],[113,10],[150,11],[268,10]]},"647":{"position":[[48,10]]},"652":{"position":[[483,9]]},"653":{"position":[[15,10],[113,10],[150,11],[265,10]]},"655":{"position":[[48,10]]},"657":{"position":[[6,9],[51,10]]},"659":{"position":[[566,9]]},"660":{"position":[[593,10],[722,9]]},"662":{"position":[[5,9]]},"663":{"position":[[6,9]]},"664":{"position":[[255,9]]},"669":{"position":[[15,10],[113,10],[150,11],[267,10]]},"671":{"position":[[49,10]]},"673":{"position":[[6,9],[51,10]]},"676":{"position":[[409,9]]},"677":{"position":[[5,9]]},"678":{"position":[[6,9]]},"679":{"position":[[234,9]]},"684":{"position":[[15,10],[113,10],[150,11],[266,10]]},"686":{"position":[[109,10]]},"688":{"position":[[6,9],[51,10]]},"691":{"position":[[409,9]]},"692":{"position":[[5,9]]},"693":{"position":[[6,9]]},"694":{"position":[[234,9]]},"698":{"position":[[31,10]]},"699":{"position":[[15,10],[113,10],[150,11],[266,10]]},"701":{"position":[[49,10]]},"703":{"position":[[6,9]]},"704":{"position":[[30,10]]},"705":{"position":[[15,10],[113,10],[150,11],[265,10]]},"707":{"position":[[49,10]]},"711":{"position":[[15,10],[113,10],[150,11],[262,10]]},"713":{"position":[[49,10]]},"719":{"position":[[15,10],[108,10],[145,11],[265,10]]},"721":{"position":[[118,10]]},"727":{"position":[[15,10],[113,10],[150,11],[272,10]]},"734":{"position":[[15,10],[113,10],[150,11],[267,10]]},"736":{"position":[[48,10]]},"738":{"position":[[6,9]]},"740":{"position":[[15,10],[113,10],[150,11],[265,10]]},"742":{"position":[[49,10]]},"745":{"position":[[31,10]]},"746":{"position":[[15,10],[113,10],[150,11],[266,10]]},"747":{"position":[[805,9]]},"748":{"position":[[49,10]]},"750":{"position":[[13,10],[501,9],[1270,9]]},"753":{"position":[[18,9],[431,9],[1700,10]]},"755":{"position":[[58,9]]},"756":{"position":[[15,10],[113,10],[150,11],[265,10]]},"757":{"position":[[1038,9],[1340,9],[2222,9]]},"758":{"position":[[108,10]]},"759":{"position":[[20,9]]},"762":{"position":[[121,9],[206,9]]},"766":{"position":[[13,10],[501,9]]},"767":{"position":[[577,9],[2504,10]]},"768":{"position":[[58,9]]},"769":{"position":[[15,10],[113,10],[150,11],[265,10]]},"770":{"position":[[1038,9],[1340,9],[2222,9]]},"771":{"position":[[108,10]]},"772":{"position":[[31,9]]},"775":{"position":[[121,9],[206,9]]},"781":{"position":[[15,10],[110,10],[147,11],[262,10]]},"783":{"position":[[48,10]]},"784":{"position":[[230,9]]},"785":{"position":[[52,9],[227,9],[662,9]]},"788":{"position":[[6,9]]},"789":{"position":[[13,10],[489,9],[1671,9]]},"792":{"position":[[855,9],[2485,10]]},"793":{"position":[[390,9],[1723,10]]},"795":{"position":[[56,9]]},"796":{"position":[[15,10],[114,10],[151,11],[264,10]]},"797":{"position":[[1038,9],[1340,9],[2229,9]]},"798":{"position":[[108,10]]},"799":{"position":[[18,9]]},"802":{"position":[[121,9],[206,9]]},"807":{"position":[[13,10],[489,9]]},"808":{"position":[[406,9],[1673,10]]},"810":{"position":[[56,9]]},"811":{"position":[[15,10],[113,10],[150,11],[263,10]]},"812":{"position":[[1038,9],[1340,9],[2229,9]]},"813":{"position":[[108,10]]},"814":{"position":[[18,9]]},"817":{"position":[[121,9],[206,9]]},"821":{"position":[[18,9],[33,9],[663,9],[752,9]]},"823":{"position":[[13,10],[489,9]]},"824":{"position":[[647,9],[2616,10]]},"826":{"position":[[56,9]]},"827":{"position":[[15,10],[113,10],[150,11],[263,10]]},"828":{"position":[[1038,9],[1340,9],[2229,9]]},"829":{"position":[[108,10]]},"830":{"position":[[18,9]]},"833":{"position":[[121,9],[206,9]]},"841":{"position":[[15,10],[113,10],[150,11],[266,10]]},"843":{"position":[[49,10]]},"847":{"position":[[400,10]]},"849":{"position":[[1761,9],[2641,10]]},"850":{"position":[[15,10],[113,10],[150,11],[266,10]]},"852":{"position":[[49,10]]},"855":{"position":[[13,10]]},"857":{"position":[[279,9]]},"858":{"position":[[15,10],[113,10],[150,11],[264,10]]},"860":{"position":[[118,10]]},"863":{"position":[[47,10]]},"866":{"position":[[15,10],[113,10],[150,11],[266,10],[407,9]]},"867":{"position":[[2048,9]]},"868":{"position":[[48,10]]},"869":{"position":[[1296,9]]},"870":{"position":[[25,9],[435,9],[858,9]]},"872":{"position":[[126,10]]},"875":{"position":[[47,10]]},"878":{"position":[[15,10],[113,10],[150,11],[276,10],[417,9]]},"880":{"position":[[48,10]]},"884":{"position":[[15,10],[113,10],[150,11],[276,10]]},"886":{"position":[[49,10]]},"890":{"position":[[15,10],[114,10],[151,11],[264,10]]},"892":{"position":[[48,10]]},"894":{"position":[[32,10]]},"895":{"position":[[55,10]]},"896":{"position":[[15,10],[113,10],[150,11],[267,10]]},"899":{"position":[[22,9]]},"900":{"position":[[55,10]]},"902":{"position":[[6,9]]},"903":{"position":[[722,9],[839,9],[1054,9]]},"904":{"position":[[646,9],[2431,10]]},"905":{"position":[[61,9]]},"906":{"position":[[15,10],[113,10],[150,11],[268,10]]},"908":{"position":[[108,10]]},"909":{"position":[[386,10],[550,9],[715,9],[1181,9]]},"912":{"position":[[23,9],[38,9],[219,9],[679,9],[768,9]]},"914":{"position":[[6,9]]},"915":{"position":[[722,9],[839,9],[1054,9],[1127,9]]},"917":{"position":[[90,9]]},"918":{"position":[[855,9],[2723,10]]},"919":{"position":[[390,9]]},"920":{"position":[[61,9]]},"921":{"position":[[15,10],[113,10],[150,11],[268,10]]},"924":{"position":[[108,10]]},"925":{"position":[[386,10],[550,9],[715,9],[1181,9]]},"929":{"position":[[6,9]]},"930":{"position":[[722,9],[839,9],[1054,9]]},"931":{"position":[[410,9],[2152,10]]},"932":{"position":[[61,9]]},"933":{"position":[[15,10],[113,10],[150,11],[268,10]]},"935":{"position":[[108,10]]},"936":{"position":[[386,10],[550,9],[715,9],[1181,9]]},"945":{"position":[[644,9]]},"947":{"position":[[103,9],[569,9],[1316,9]]},"948":{"position":[[61,9]]},"949":{"position":[[15,10],[113,10],[150,11],[268,10]]},"951":{"position":[[108,10]]},"952":{"position":[[386,10],[550,9],[715,9],[1181,9]]},"958":{"position":[[15,10],[113,10],[150,11],[266,10]]},"960":{"position":[[49,10]]},"962":{"position":[[6,9]]},"963":{"position":[[876,9],[993,9],[1208,9],[1281,9]]},"964":{"position":[[236,9],[271,9]]},"965":{"position":[[90,9]]},"966":{"position":[[61,9]]},"967":{"position":[[15,10],[113,10],[150,11],[268,10]]},"969":{"position":[[108,10]]},"970":{"position":[[386,10],[550,9],[715,9],[1181,9]]},"974":{"position":[[24,9],[137,10],[267,10],[302,9],[331,10]]},"975":{"position":[[21,9],[142,9]]},"976":{"position":[[15,9],[301,9]]},"977":{"position":[[37,11],[114,9],[185,9],[756,10]]},"981":{"position":[[15,10],[113,10],[150,11],[266,10]]},"983":{"position":[[49,10]]},"985":{"position":[[6,9]]},"990":{"position":[[15,10],[113,10],[150,11],[278,10]]},"992":{"position":[[48,10]]},"995":{"position":[[29,10]]},"996":{"position":[[15,10],[113,10],[150,11],[264,10]]},"998":{"position":[[49,10]]},"1000":{"position":[[6,9],[357,9],[817,10],[861,9]]},"1005":{"position":[[15,10],[110,10],[147,11],[271,10]]},"1006":{"position":[[183,10]]},"1008":{"position":[[16,10],[226,10],[286,10],[428,9]]},"1010":{"position":[[118,10]]},"1014":{"position":[[15,10],[113,10],[150,11],[263,10]]},"1016":{"position":[[49,10]]},"1019":{"position":[[5,9]]},"1020":{"position":[[40,9],[346,9],[770,9],[1274,9]]},"1021":{"position":[[15,10],[113,10],[150,11],[262,10]]},"1022":{"position":[[38,10]]},"1023":{"position":[[586,10],[736,9],[956,9]]},"1025":{"position":[[6,9]]},"1027":{"position":[[15,10],[113,10],[150,11],[266,10]]},"1029":{"position":[[49,10]]},"1031":{"position":[[13,10],[168,9],[272,10]]},"1032":{"position":[[71,10]]},"1033":{"position":[[19,10],[117,10],[154,11],[275,10]]},"1036":{"position":[[119,9]]},"1037":{"position":[[49,10]]},"1039":{"position":[[6,9]]},"1040":{"position":[[60,10],[456,9],[555,9]]},"1042":{"position":[[184,10]]},"1043":{"position":[[390,9],[848,10],[1965,10]]},"1044":{"position":[[15,10],[113,10],[150,11],[268,10]]},"1046":{"position":[[48,10]]},"1047":{"position":[[108,9]]},"1049":{"position":[[6,9]]},"1050":{"position":[[60,10],[456,9],[555,9]]},"1051":{"position":[[646,9],[1110,10],[2147,10]]},"1052":{"position":[[15,10],[113,10],[150,11],[268,10]]},"1054":{"position":[[48,10]]},"1055":{"position":[[108,9]]},"1057":{"position":[[6,9]]},"1058":{"position":[[60,10],[456,9],[555,9]]},"1059":{"position":[[410,9],[899,10],[1999,10]]},"1060":{"position":[[15,10],[113,10],[150,11],[268,10]]},"1062":{"position":[[48,10]]},"1063":{"position":[[108,9]]},"1067":{"position":[[694,9]]},"1068":{"position":[[83,9]]},"1069":{"position":[[15,10],[113,10],[150,11],[270,10]]},"1071":{"position":[[118,10]]},"1075":{"position":[[15,10],[113,10],[150,11],[264,10]]},"1076":{"position":[[420,9]]},"1077":{"position":[[5,9],[341,9],[476,9],[573,9],[766,9]]},"1078":{"position":[[48,10]]},"1084":{"position":[[15,10],[113,10],[150,11],[274,10]]},"1086":{"position":[[130,10]]},"1087":{"position":[[28,9]]},"1089":{"position":[[34,9]]},"1090":{"position":[[57,10]]},"1092":{"position":[[189,9]]},"1093":{"position":[[15,10],[113,10],[150,11],[269,10]]},"1096":{"position":[[24,9]]},"1100":{"position":[[15,10],[113,10],[150,11],[275,10]]},"1102":{"position":[[49,10]]},"1106":{"position":[[15,10],[114,10],[151,11],[271,10]]},"1108":{"position":[[48,10]]},"1112":{"position":[[15,10],[113,10],[150,11],[264,10]]},"1114":{"position":[[49,10]]},"1118":{"position":[[291,10]]},"1122":{"position":[[13,10]]},"1124":{"position":[[15,10],[113,10],[150,11],[275,10]]},"1126":{"position":[[64,10]]},"1132":{"position":[[15,10],[114,10],[151,11],[274,10]]},"1134":{"position":[[48,10]]},"1136":{"position":[[13,10],[109,9]]},"1137":{"position":[[13,10]]},"1138":{"position":[[56,10],[1777,10],[1799,9]]},"1139":{"position":[[52,10]]},"1142":{"position":[[13,10]]},"1145":{"position":[[52,10]]},"1149":{"position":[[13,10],[238,9]]},"1152":{"position":[[52,10]]},"1153":{"position":[[6,9]]},"1154":{"position":[[596,9]]},"1155":{"position":[[62,9]]},"1158":{"position":[[6,9]]},"1160":{"position":[[13,10],[346,9]]},"1162":{"position":[[1045,9]]},"1163":{"position":[[52,10]]},"1165":{"position":[[116,9]]},"1168":{"position":[[13,10]]},"1171":{"position":[[52,10]]},"1176":{"position":[[13,10],[634,9]]},"1177":{"position":[[499,10]]},"1178":{"position":[[13,10]]},"1180":{"position":[[52,10]]},"1181":{"position":[[6,9]]},"1182":{"position":[[6,9]]},"1183":{"position":[[448,9]]},"1185":{"position":[[13,10],[434,9]]},"1186":{"position":[[431,9],[671,10]]},"1187":{"position":[[13,10]]},"1189":{"position":[[53,10]]},"1190":{"position":[[6,9]]},"1191":{"position":[[6,9]]},"1194":{"position":[[13,10],[644,9]]},"1195":{"position":[[13,10],[349,9]]},"1197":{"position":[[46,10],[93,10]]},"1198":{"position":[[319,9]]},"1199":{"position":[[6,9]]},"1201":{"position":[[64,10],[211,10],[281,9]]},"1203":{"position":[[13,10],[805,9]]},"1204":{"position":[[367,10],[632,10]]},"1205":{"position":[[13,10]]},"1207":{"position":[[52,10],[318,10]]},"1208":{"position":[[105,9]]},"1211":{"position":[[13,10]]},"1214":{"position":[[52,10]]},"1218":{"position":[[13,10]]},"1221":{"position":[[52,10]]},"1226":{"position":[[13,10],[445,9]]},"1229":{"position":[[13,10]]},"1231":{"position":[[122,10]]},"1233":{"position":[[75,9]]},"1234":{"position":[[74,9]]},"1236":{"position":[[29,10]]},"1237":{"position":[[14,9],[94,10],[151,11]]},"1241":{"position":[[106,10]]},"1243":{"position":[[13,10],[222,9],[320,9],[1088,10]]},"1245":{"position":[[661,10]]},"1246":{"position":[[13,10]]},"1247":{"position":[[900,9]]},"1248":{"position":[[122,10]]},"1252":{"position":[[15,10],[110,10],[147,11],[264,10]]},"1254":{"position":[[56,10]]},"1255":{"position":[[230,9]]},"1256":{"position":[[6,9]]},"1258":{"position":[[13,10]]},"1261":{"position":[[52,10]]},"1262":{"position":[[6,9]]},"1264":{"position":[[29,10]]},"1265":{"position":[[65,10]]},"1270":{"position":[[52,10]]},"1271":{"position":[[6,9]]},"1274":{"position":[[13,10]]},"1278":{"position":[[52,10]]},"1279":{"position":[[6,9]]},"1281":{"position":[[13,10],[148,9]]},"1282":{"position":[[158,9]]},"1284":{"position":[[13,10]]},"1286":{"position":[[2612,10],[2634,9]]},"1287":{"position":[[52,10]]},"1288":{"position":[[37,9]]},"1289":{"position":[[936,9],[1198,10],[1307,9]]},"1290":{"position":[[6,9]]},"1293":{"position":[[64,10],[211,10],[281,9]]},"1295":{"position":[[13,10],[148,9]]},"1298":{"position":[[1030,10],[1139,9]]},"1299":{"position":[[13,10]]},"1301":{"position":[[2448,10],[2470,9]]},"1302":{"position":[[52,10]]},"1303":{"position":[[410,9],[647,9],[909,10],[1018,9],[1795,10]]},"1304":{"position":[[6,9]]},"1307":{"position":[[64,10],[211,10],[281,9]]},"1309":{"position":[[13,10],[109,9]]},"1310":{"position":[[168,9],[518,10],[628,9]]},"1312":{"position":[[13,10]]},"1313":{"position":[[1321,10],[1343,9]]},"1314":{"position":[[52,10]]},"1315":{"position":[[6,9]]},"1317":{"position":[[64,10],[211,10],[281,9],[491,9]]},"1319":{"position":[[13,10],[148,9]]},"1322":{"position":[[1155,9],[1417,10],[1526,9]]},"1323":{"position":[[13,10]]},"1325":{"position":[[2612,10],[2634,9]]},"1326":{"position":[[52,10]]},"1327":{"position":[[6,9]]},"1330":{"position":[[64,10],[211,10],[281,9]]},"1332":{"position":[[13,10],[109,9]]},"1335":{"position":[[1064,10],[1174,9]]},"1336":{"position":[[13,10]]},"1337":{"position":[[1321,10],[1343,9]]},"1338":{"position":[[52,10]]},"1339":{"position":[[6,9]]},"1341":{"position":[[64,10],[211,10],[281,9],[491,9]]},"1343":{"position":[[13,10],[109,9]]},"1346":{"position":[[1030,10],[1140,9]]},"1347":{"position":[[13,10]]},"1348":{"position":[[1321,10],[1343,9]]},"1349":{"position":[[52,10]]},"1350":{"position":[[6,9]]},"1352":{"position":[[64,10],[211,10],[281,9],[491,9]]},"1354":{"position":[[13,10],[186,10],[270,10],[469,9]]},"1355":{"position":[[13,10]]},"1357":{"position":[[52,10],[168,10]]},"1358":{"position":[[13,9]]},"1359":{"position":[[64,10],[211,10],[281,9]]},"1361":{"position":[[13,10]]},"1362":{"position":[[11,9],[91,10],[150,11]]},"1363":{"position":[[64,10]]},"1365":{"position":[[13,10]]},"1367":{"position":[[129,10],[151,9]]},"1368":{"position":[[52,10]]},"1369":{"position":[[6,9]]},"1372":{"position":[[13,10],[148,9]]},"1373":{"position":[[628,9],[1027,10],[1396,10]]},"1374":{"position":[[628,9],[1027,10],[1400,10]]},"1375":{"position":[[13,10]]},"1376":{"position":[[527,10],[549,9]]},"1377":{"position":[[52,10]]},"1378":{"position":[[6,9]]},"1380":{"position":[[64,10],[211,10],[281,9]]},"1382":{"position":[[13,10],[688,9]]},"1384":{"position":[[1164,10]]},"1385":{"position":[[13,10]]},"1387":{"position":[[87,10],[641,10]]},"1388":{"position":[[6,9]]},"1389":{"position":[[6,9]]},"1396":{"position":[[13,10],[148,9]]},"1397":{"position":[[407,9],[806,10],[1234,10]]},"1398":{"position":[[406,9],[805,10],[1237,10]]},"1399":{"position":[[13,10]]},"1400":{"position":[[527,10],[549,9]]},"1401":{"position":[[52,10]]},"1402":{"position":[[6,9]]},"1404":{"position":[[64,10],[211,10],[281,9]]},"1406":{"position":[[13,10],[148,9]]},"1408":{"position":[[125,10]]},"1409":{"position":[[390,9],[789,10],[1238,10]]},"1410":{"position":[[13,10]]},"1411":{"position":[[527,10],[549,9]]},"1412":{"position":[[52,10]]},"1413":{"position":[[6,9]]},"1415":{"position":[[64,10],[211,10],[281,9]]},"1417":{"position":[[13,10]]},"1419":{"position":[[13,10]]},"1421":{"position":[[53,10]]},"1422":{"position":[[6,9]]},"1425":{"position":[[13,10]]},"1426":{"position":[[13,10],[253,9]]},"1427":{"position":[[1081,10],[1103,9]]},"1428":{"position":[[52,10]]},"1430":{"position":[[6,9]]},"1432":{"position":[[64,10],[211,10],[281,9],[491,9]]},"1447":{"position":[[442,9]]},"1448":{"position":[[1,10],[202,9],[330,10],[412,9],[655,10],[670,9],[956,9],[1026,11]]},"1449":{"position":[[162,9],[687,9]]},"1451":{"position":[[61,10]]},"1453":{"position":[[74,9]]},"1472":{"position":[[527,9],[664,10]]},"1480":{"position":[[321,9],[359,10],[421,10]]}},"keywords":{}}],["connector'",{"_index":840,"title":{},"content":{"56":{"position":[[1209,11]]},"120":{"position":[[568,11]]},"122":{"position":[[2079,11]]},"209":{"position":[[1169,11],[1270,11]]},"724":{"position":[[6,11]]},"785":{"position":[[338,11],[467,11]]},"912":{"position":[[1029,11]]},"1448":{"position":[[1093,11]]},"1480":{"position":[[502,11]]}},"keywords":{}}],["connector.ent",{"_index":3823,"title":{},"content":{"479":{"position":[[191,15]]}},"keywords":{}}],["connector.format",{"_index":5048,"title":{},"content":{"919":{"position":[[2630,16]]}},"keywords":{}}],["connector.if",{"_index":3397,"title":{},"content":{"366":{"position":[[292,12]]},"903":{"position":[[318,12]]},"915":{"position":[[318,12]]},"930":{"position":[[318,12]]},"963":{"position":[[472,12]]}},"keywords":{}}],["connectorinstead",{"_index":4722,"title":{},"content":{"821":{"position":[[206,16]]}},"keywords":{}}],["connectors.deriv",{"_index":560,"title":{},"content":{"21":{"position":[[147,21]]}},"keywords":{}}],["connectorsdekaf",{"_index":3247,"title":{},"content":{"345":{"position":[[148,15]]}},"keywords":{}}],["connectorserv",{"_index":5113,"title":{},"content":{"947":{"position":[[729,15]]}},"keywords":{}}],["connectorsmateri",{"_index":3246,"title":{},"content":{"345":{"position":[[122,25]]}},"keywords":{}}],["consequ",{"_index":2480,"title":{},"content":{"227":{"position":[[360,12]]}},"keywords":{}}],["consid",{"_index":119,"title":{},"content":{"3":{"position":[[393,8]]},"14":{"position":[[389,8]]},"92":{"position":[[872,8]]},"99":{"position":[[480,8]]},"114":{"position":[[241,8]]},"121":{"position":[[843,8]]},"159":{"position":[[706,8]]},"164":{"position":[[1072,8]]},"308":{"position":[[556,10]]},"410":{"position":[[1,8]]},"602":{"position":[[646,10],[1001,8]]},"1020":{"position":[[939,9],[992,8]]},"1140":{"position":[[104,9]]},"1292":{"position":[[99,9]]},"1306":{"position":[[99,9]]},"1316":{"position":[[104,9]]},"1329":{"position":[[99,9]]},"1340":{"position":[[104,9]]},"1351":{"position":[[104,9]]},"1370":{"position":[[100,9]]},"1379":{"position":[[103,9]]},"1403":{"position":[[103,9]]},"1414":{"position":[[103,9]]},"1431":{"position":[[127,9]]},"1440":{"position":[[445,8]]},"1452":{"position":[[3317,10]]},"1459":{"position":[[322,10]]}},"keywords":{}}],["consider",{"_index":2215,"title":{"203":{"position":[[14,15]]},"355":{"position":[[12,15]]},"368":{"position":[[26,15]]},"410":{"position":[[12,15]]},"576":{"position":[[12,15]]},"587":{"position":[[12,15]]},"755":{"position":[[26,15]]},"768":{"position":[[26,15]]},"795":{"position":[[26,15]]},"810":{"position":[[26,15]]},"826":{"position":[[26,15]]},"900":{"position":[[12,15]]},"905":{"position":[[26,15]]},"920":{"position":[[26,15]]},"932":{"position":[[26,15]]},"948":{"position":[[26,15]]},"966":{"position":[[26,15]]},"1068":{"position":[[12,15]]},"1156":{"position":[[12,15]]},"1390":{"position":[[12,15]]},"1445":{"position":[[8,14]]},"1449":{"position":[[0,14]]}},"content":{"429":{"position":[[117,15]]},"1166":{"position":[[186,13]]},"1437":{"position":[[614,13]]}},"keywords":{}}],["consist",{"_index":974,"title":{"1147":{"position":[[9,12]]},"1174":{"position":[[9,12]]},"1216":{"position":[[9,12]]},"1224":{"position":[[9,12]]}},"content":{"66":{"position":[[71,7]]},"209":{"position":[[1533,12]]},"211":{"position":[[711,11]]},"237":{"position":[[2646,11]]},"254":{"position":[[883,8]]},"314":{"position":[[561,8]]},"326":{"position":[[1917,11]]},"332":{"position":[[259,10]]},"573":{"position":[[1122,7]]},"590":{"position":[[47,8]]},"642":{"position":[[258,11]]},"779":{"position":[[45,8]]},"785":{"position":[[719,12]]},"879":{"position":[[1295,11]]},"1292":{"position":[[1128,10]]},"1306":{"position":[[1128,10]]},"1317":{"position":[[407,10]]},"1329":{"position":[[1128,10]]},"1341":{"position":[[407,10]]},"1352":{"position":[[407,10]]},"1358":{"position":[[541,10]]},"1432":{"position":[[407,10]]},"1439":{"position":[[1321,10]]},"1477":{"position":[[3010,10]]}},"keywords":{}}],["consol",{"_index":2132,"title":{"604":{"position":[[14,7]]}},"content":{"191":{"position":[[166,8],[465,8]]},"192":{"position":[[2311,7]]},"240":{"position":[[309,8],[438,8]]},"301":{"position":[[820,8]]},"364":{"position":[[1642,7]]},"464":{"position":[[163,7]]},"574":{"position":[[157,8]]},"585":{"position":[[157,8]]},"606":{"position":[[112,7]]},"607":{"position":[[87,8]]},"608":{"position":[[73,7]]},"609":{"position":[[95,7]]},"610":{"position":[[264,7]]},"611":{"position":[[762,8],[1254,6]]},"690":{"position":[[28,7]]},"747":{"position":[[568,7]]},"767":{"position":[[2390,8]]},"792":{"position":[[2371,8]]},"808":{"position":[[1502,8]]},"824":{"position":[[2502,8]]},"904":{"position":[[2317,8]]},"918":{"position":[[2609,8]]},"931":{"position":[[1981,8]]},"943":{"position":[[219,8],[367,8]]},"1051":{"position":[[2033,8]]},"1059":{"position":[[1828,8]]},"1177":{"position":[[93,7]]},"1179":{"position":[[694,8]]},"1289":{"position":[[1462,8]]},"1298":{"position":[[1294,8]]},"1303":{"position":[[1134,7],[1624,8]]},"1310":{"position":[[783,8]]},"1322":{"position":[[1681,8]]},"1335":{"position":[[1329,8]]},"1373":{"position":[[1282,8]]},"1374":{"position":[[1286,8]]},"1397":{"position":[[1063,8]]},"1398":{"position":[[1066,8]]},"1425":{"position":[[201,8]]}},"keywords":{}}],["console.on",{"_index":5077,"title":{},"content":{"942":{"position":[[453,10]]}},"keywords":{}}],["console.select",{"_index":5081,"title":{},"content":{"943":{"position":[[398,14]]}},"keywords":{}}],["console:dev",{"_index":3343,"title":{},"content":{"364":{"position":[[1710,11]]},"612":{"position":[[173,11]]}},"keywords":{}}],["consolego",{"_index":3520,"title":{},"content":{"395":{"position":[[165,9]]}},"keywords":{}}],["consolid",{"_index":1698,"title":{},"content":{"124":{"position":[[519,11]]}},"keywords":{}}],["const",{"_index":1884,"title":{},"content":{"159":{"position":[[897,6]]},"281":{"position":[[1465,5]]},"1465":{"position":[[718,6],[963,6]]}},"keywords":{}}],["constantli",{"_index":702,"title":{},"content":{"38":{"position":[[442,10]]}},"keywords":{}}],["constraint",{"_index":730,"title":{},"content":{"41":{"position":[[418,11]]},"156":{"position":[[535,11]]},"161":{"position":[[553,11]]},"162":{"position":[[49,11]]},"239":{"position":[[1207,11]]},"309":{"position":[[955,12]]},"310":{"position":[[320,10]]},"331":{"position":[[197,11]]},"332":{"position":[[446,12]]},"1140":{"position":[[3163,10],[3205,11]]},"1292":{"position":[[1158,10]]},"1306":{"position":[[1158,10]]},"1316":{"position":[[3163,10],[3205,11]]},"1329":{"position":[[1158,10]]},"1340":{"position":[[3163,10],[3205,11]]},"1351":{"position":[[3163,10],[3205,11]]},"1370":{"position":[[661,10]]},"1379":{"position":[[512,10],[562,11]]},"1394":{"position":[[736,10]]},"1403":{"position":[[512,10],[562,11]]},"1414":{"position":[[512,10],[562,11]]},"1431":{"position":[[3186,10],[3228,11]]}},"keywords":{}}],["constraint_ca",{"_index":6009,"title":{},"content":{"1292":{"position":[[1201,13]]},"1306":{"position":[[1201,13]]},"1329":{"position":[[1201,13]]}},"keywords":{}}],["constraint_na",{"_index":6012,"title":{},"content":{"1292":{"position":[[1261,13]]},"1306":{"position":[[1261,13]]},"1329":{"position":[[1261,13]]}},"keywords":{}}],["constraint_sc",{"_index":6015,"title":{},"content":{"1292":{"position":[[1323,13]]},"1306":{"position":[[1323,13]]},"1329":{"position":[[1323,13]]}},"keywords":{}}],["constraints.flow",{"_index":1869,"title":{},"content":{"158":{"position":[[604,16]]}},"keywords":{}}],["construct",{"_index":2790,"title":{},"content":{"264":{"position":[[188,9]]},"275":{"position":[[210,9]]},"1465":{"position":[[323,9]]}},"keywords":{}}],["constructor",{"_index":6300,"title":{},"content":{"1379":{"position":[[618,11]]},"1403":{"position":[[618,11]]},"1414":{"position":[[618,11]]}},"keywords":{}}],["consult",{"_index":1487,"title":{},"content":{"104":{"position":[[195,7]]},"122":{"position":[[2066,7]]},"221":{"position":[[76,7]]}},"keywords":{}}],["consum",{"_index":392,"title":{},"content":{"13":{"position":[[632,9]]},"240":{"position":[[3686,9]]},"250":{"position":[[523,8],[541,8],[995,9]]},"305":{"position":[[119,7],[184,10]]},"320":{"position":[[517,8],[569,10],[625,8]]},"321":{"position":[[2117,7]]},"325":{"position":[[66,7]]},"397":{"position":[[1013,7]]},"410":{"position":[[100,7],[309,9]]},"840":{"position":[[463,8],[480,8],[776,8],[793,8]]},"842":{"position":[[655,8],[668,8],[763,8],[779,8]]},"849":{"position":[[934,8],[951,8],[1251,8],[1268,8]]},"851":{"position":[[268,8],[281,8],[361,8],[377,8]]},"869":{"position":[[1246,9]]},"989":{"position":[[1112,8],[1129,8]]},"991":{"position":[[354,8],[503,8]]},"1004":{"position":[[1195,8],[1212,8]]},"1009":{"position":[[417,8],[566,8]]},"1118":{"position":[[906,8]]}},"keywords":{}}],["consumer.clos",{"_index":2674,"title":{},"content":{"250":{"position":[[1095,16]]}},"keywords":{}}],["consumer/token",{"_index":4744,"title":{},"content":{"840":{"position":[[2642,14]]}},"keywords":{}}],["consumer_key",{"_index":4786,"title":{},"content":{"843":{"position":[[176,13]]},"851":{"position":[[254,13]]},"852":{"position":[[147,13]]}},"keywords":{}}],["consumer_secret",{"_index":4826,"title":{},"content":{"851":{"position":[[344,16]]},"852":{"position":[[173,16]]}},"keywords":{}}],["consumer_secret_sop",{"_index":4788,"title":{},"content":{"843":{"position":[[194,21]]}},"keywords":{}}],["consumpt",{"_index":6469,"title":{},"content":{"1435":{"position":[[74,11]]},"1437":{"position":[[95,11]]}},"keywords":{}}],["contact",{"_index":525,"title":{},"content":{"19":{"position":[[543,7]]},"53":{"position":[[610,7]]},"173":{"position":[[281,7]]},"427":{"position":[[419,7]]},"490":{"position":[[120,7]]},"663":{"position":[[120,7]]},"678":{"position":[[120,7]]},"686":{"position":[[696,8]]},"693":{"position":[[120,7]]},"977":{"position":[[780,7]]}},"keywords":{}}],["contact_attribut",{"_index":4442,"title":{},"content":{"686":{"position":[[872,18]]}},"keywords":{}}],["contactsclientscompanyinvoic",{"_index":4339,"title":{},"content":{"628":{"position":[[78,29]]}},"keywords":{}}],["contain",{"_index":343,"title":{},"content":{"11":{"position":[[1571,8]]},"24":{"position":[[89,7]]},"63":{"position":[[645,7]]},"67":{"position":[[56,8],[395,7],[1218,8]]},"75":{"position":[[273,7]]},"81":{"position":[[33,9],[113,9]]},"84":{"position":[[1235,9]]},"88":{"position":[[250,9]]},"90":{"position":[[318,9]]},"92":{"position":[[810,9]]},"94":{"position":[[1144,10]]},"107":{"position":[[2967,7],[3109,7]]},"117":{"position":[[281,7]]},"141":{"position":[[912,7],[1186,8]]},"173":{"position":[[70,10],[169,9],[498,9]]},"183":{"position":[[1998,8],[2918,7]]},"190":{"position":[[1203,7]]},"221":{"position":[[1042,8]]},"222":{"position":[[287,8]]},"223":{"position":[[253,8]]},"224":{"position":[[306,8]]},"236":{"position":[[353,8],[1913,8],[2771,8]]},"237":{"position":[[1124,7],[3077,10]]},"238":{"position":[[341,8]]},"242":{"position":[[200,10]]},"253":{"position":[[663,8]]},"254":{"position":[[1824,7]]},"263":{"position":[[578,7],[1157,7]]},"264":{"position":[[107,7]]},"267":{"position":[[1527,8]]},"270":{"position":[[1156,8]]},"274":{"position":[[1942,7]]},"275":{"position":[[129,7]]},"279":{"position":[[615,7]]},"281":{"position":[[161,8]]},"288":{"position":[[223,8]]},"295":{"position":[[619,7]]},"299":{"position":[[215,8]]},"313":{"position":[[663,8]]},"314":{"position":[[2465,7]]},"315":{"position":[[2347,7]]},"326":{"position":[[534,10]]},"390":{"position":[[113,7]]},"427":{"position":[[45,7]]},"438":{"position":[[1289,8],[1556,9],[1606,9],[1944,9],[1958,9]]},"482":{"position":[[118,10]]},"504":{"position":[[21,7]]},"517":{"position":[[816,8],[879,8]]},"548":{"position":[[875,10]]},"556":{"position":[[1160,7]]},"564":{"position":[[95,10]]},"574":{"position":[[537,7]]},"590":{"position":[[95,7],[348,8],[480,7],[991,7],[1068,8]]},"601":{"position":[[111,8]]},"605":{"position":[[89,8]]},"616":{"position":[[139,7],[220,7],[345,8],[566,7]]},"738":{"position":[[113,8],[206,8],[380,8],[490,8],[554,8],[614,8],[684,8]]},"779":{"position":[[92,7]]},"842":{"position":[[3133,10]]},"909":{"position":[[94,7],[436,8]]},"911":{"position":[[65,7]]},"925":{"position":[[94,7],[436,8]]},"927":{"position":[[65,7]]},"936":{"position":[[94,7],[436,8]]},"938":{"position":[[65,7]]},"952":{"position":[[94,7],[436,8]]},"954":{"position":[[65,7]]},"970":{"position":[[94,7],[436,8]]},"972":{"position":[[65,7]]},"985":{"position":[[375,7]]},"1000":{"position":[[553,7]]},"1008":{"position":[[1609,8]]},"1031":{"position":[[91,10]]},"1036":{"position":[[960,7]]},"1040":{"position":[[748,7]]},"1042":{"position":[[493,7]]},"1043":{"position":[[1157,7]]},"1050":{"position":[[748,7]]},"1051":{"position":[[1419,7]]},"1058":{"position":[[748,7]]},"1059":{"position":[[1212,7]]},"1087":{"position":[[282,7]]},"1140":{"position":[[3239,8]]},"1157":{"position":[[271,10]]},"1178":{"position":[[281,9]]},"1230":{"position":[[510,10]]},"1243":{"position":[[691,7],[801,8]]},"1250":{"position":[[92,7]]},"1292":{"position":[[1373,8]]},"1298":{"position":[[253,8]]},"1306":{"position":[[1373,8]]},"1316":{"position":[[3239,8]]},"1317":{"position":[[654,10]]},"1322":{"position":[[287,8]]},"1329":{"position":[[1373,8]]},"1335":{"position":[[287,8]]},"1340":{"position":[[3239,8]]},"1341":{"position":[[654,10]]},"1346":{"position":[[253,8]]},"1351":{"position":[[3239,8]]},"1352":{"position":[[654,10]]},"1379":{"position":[[668,8]]},"1386":{"position":[[562,8]]},"1403":{"position":[[668,8]]},"1414":{"position":[[668,8]]},"1417":{"position":[[136,10]]},"1429":{"position":[[528,10]]},"1431":{"position":[[3262,8]]},"1432":{"position":[[668,10]]},"1444":{"position":[[747,7]]},"1451":{"position":[[334,8],[980,8]]},"1461":{"position":[[1789,8]]},"1462":{"position":[[504,8]]},"1477":{"position":[[3717,9]]}},"keywords":{}}],["container_nam",{"_index":2504,"title":{},"content":{"236":{"position":[[628,15],[1155,15]]}},"keywords":{}}],["containernam",{"_index":3711,"title":{},"content":{"438":{"position":[[1541,14]]},"439":{"position":[[132,14]]}},"keywords":{}}],["contains"",{"_index":5170,"title":{},"content":{"1009":{"position":[[1317,15]]}},"keywords":{}}],["containst",{"_index":6304,"title":{},"content":{"1379":{"position":[[727,13]]},"1403":{"position":[[727,13]]},"1414":{"position":[[727,13]]}},"keywords":{}}],["content",{"_index":6,"title":{},"content":{"1":{"position":[[56,8],[593,7]]},"3":{"position":[[63,8],[280,7],[832,7],[871,7],[907,7]]},"34":{"position":[[622,7]]},"43":{"position":[[365,8]]},"63":{"position":[[614,8]]},"88":{"position":[[143,8]]},"89":{"position":[[211,7],[338,7]]},"90":{"position":[[590,7]]},"129":{"position":[[38,8],[237,8]]},"183":{"position":[[1103,8],[3004,8]]},"225":{"position":[[434,8]]},"237":{"position":[[1522,9]]},"254":{"position":[[221,9]]},"296":{"position":[[221,9],[5200,9]]},"314":{"position":[[221,9]]},"315":{"position":[[1293,9]]},"366":{"position":[[920,9]]},"417":{"position":[[1520,9],[1672,9]]},"419":{"position":[[689,8]]},"440":{"position":[[705,8]]},"477":{"position":[[266,8]]},"479":{"position":[[796,8]]},"482":{"position":[[292,8]]},"502":{"position":[[1168,9],[1320,9]]},"545":{"position":[[1122,9],[1274,9]]},"547":{"position":[[690,8]]},"571":{"position":[[686,8]]},"573":{"position":[[513,8]]},"582":{"position":[[299,8]]},"584":{"position":[[444,8]]},"609":{"position":[[243,8]]},"617":{"position":[[610,8]]},"619":{"position":[[418,8]]},"637":{"position":[[682,9],[834,9]]},"670":{"position":[[429,7]]},"750":{"position":[[631,9]]},"764":{"position":[[747,10]]},"766":{"position":[[631,9]]},"777":{"position":[[747,10]]},"789":{"position":[[619,9]]},"804":{"position":[[745,10]]},"807":{"position":[[619,9]]},"819":{"position":[[745,10]]},"821":{"position":[[576,8]]},"823":{"position":[[619,9]]},"835":{"position":[[745,10]]},"903":{"position":[[946,9]]},"912":{"position":[[592,8]]},"915":{"position":[[946,9]]},"930":{"position":[[946,9]]},"943":{"position":[[1123,8]]},"963":{"position":[[1100,9]]},"1021":{"position":[[1679,9],[1831,9]]},"1023":{"position":[[670,8]]},"1040":{"position":[[662,9]]},"1050":{"position":[[662,9]]},"1058":{"position":[[662,9]]},"1195":{"position":[[167,8]]},"1241":{"position":[[229,7]]},"1245":{"position":[[562,8]]},"1439":{"position":[[1373,8]]}},"keywords":{}}],["contentencod",{"_index":5768,"title":{},"content":{"1164":{"position":[[307,17]]},"1172":{"position":[[409,17]]},"1222":{"position":[[409,17]]}},"keywords":{}}],["contenttyp",{"_index":1306,"title":{},"content":{"89":{"position":[[299,12]]}},"keywords":{}}],["context",{"_index":1391,"title":{},"content":{"96":{"position":[[724,7]]},"97":{"position":[[279,7]]},"112":{"position":[[766,8],[797,8]]},"117":{"position":[[212,7]]},"137":{"position":[[474,7]]},"183":{"position":[[631,7]]},"237":{"position":[[248,7]]},"267":{"position":[[999,7]]},"270":{"position":[[160,7]]},"278":{"position":[[428,7]]},"319":{"position":[[877,9]]},"320":{"position":[[612,8]]},"977":{"position":[[538,8]]},"1292":{"position":[[1404,7]]},"1306":{"position":[[1404,7]]},"1329":{"position":[[1404,7]]},"1437":{"position":[[302,7]]}},"keywords":{}}],["contextsissu",{"_index":4469,"title":{},"content":{"709":{"position":[[192,13]]}},"keywords":{}}],["contigu",{"_index":3123,"title":{},"content":{"320":{"position":[[997,10]]}},"keywords":{}}],["continu",{"_index":290,"title":{"121":{"position":[[4,10]]},"165":{"position":[[0,10]]},"184":{"position":[[11,10]]}},"content":{"11":{"position":[[64,11]]},"13":{"position":[[510,8]]},"19":{"position":[[276,8]]},"20":{"position":[[226,8]]},"35":{"position":[[113,12]]},"36":{"position":[[118,12]]},"40":{"position":[[110,12]]},"44":{"position":[[164,12]]},"82":{"position":[[2869,8]]},"106":{"position":[[113,12]]},"121":{"position":[[27,10]]},"135":{"position":[[995,8]]},"157":{"position":[[434,10]]},"163":{"position":[[508,12]]},"165":{"position":[[568,10]]},"183":{"position":[[669,9],[4582,8]]},"185":{"position":[[230,9]]},"196":{"position":[[188,10]]},"204":{"position":[[951,8]]},"209":{"position":[[420,12],[991,10]]},"211":{"position":[[797,12]]},"217":{"position":[[2279,9]]},"233":{"position":[[188,10]]},"240":{"position":[[2408,8],[4011,9]]},"253":{"position":[[262,11]]},"264":{"position":[[858,8]]},"267":{"position":[[1037,9],[1719,8],[1738,8]]},"268":{"position":[[1536,10]]},"284":{"position":[[495,12]]},"290":{"position":[[1834,13],[1882,9]]},"292":{"position":[[48,12]]},"295":{"position":[[3936,9]]},"301":{"position":[[1799,13],[1847,9]]},"303":{"position":[[48,12]]},"309":{"position":[[1114,8],[1716,8]]},"313":{"position":[[262,11]]},"322":{"position":[[870,12],[1425,12]]},"324":{"position":[[603,10]]},"326":{"position":[[890,12],[1475,12]]},"329":{"position":[[59,12]]},"373":{"position":[[749,10]]},"578":{"position":[[38,8]]},"595":{"position":[[1365,13]]},"718":{"position":[[374,8]]},"724":{"position":[[443,8]]},"759":{"position":[[115,10]]},"772":{"position":[[126,10]]},"785":{"position":[[62,12],[237,9]]},"799":{"position":[[113,10]]},"814":{"position":[[113,10]]},"830":{"position":[[113,10]]},"1008":{"position":[[838,11]]},"1077":{"position":[[20,11],[781,8]]},"1140":{"position":[[3275,8]]},"1183":{"position":[[1702,8]]},"1243":{"position":[[1014,9]]},"1292":{"position":[[1443,8]]},"1306":{"position":[[1443,8]]},"1316":{"position":[[3275,8]]},"1329":{"position":[[1443,8]]},"1340":{"position":[[3275,8]]},"1351":{"position":[[3275,8]]},"1379":{"position":[[781,8]]},"1403":{"position":[[781,8]]},"1414":{"position":[[781,8]]},"1431":{"position":[[3298,8]]},"1447":{"position":[[424,13]]},"1448":{"position":[[805,8]]},"1449":{"position":[[585,8]]},"1451":{"position":[[905,8],[1037,10]]},"1461":{"position":[[4068,8]]},"1472":{"position":[[131,12]]},"1479":{"position":[[295,11]]}},"keywords":{}}],["contract",{"_index":315,"title":{},"content":{"11":{"position":[[679,8],[1936,8],[2013,9]]},"102":{"position":[[652,10]]},"208":{"position":[[474,10]]},"305":{"position":[[79,8],[236,8]]}},"keywords":{}}],["contrast",{"_index":6514,"title":{},"content":{"1447":{"position":[[282,9]]}},"keywords":{}}],["contribut",{"_index":1263,"title":{},"content":{"84":{"position":[[493,11]]},"329":{"position":[[1104,10]]}},"keywords":{}}],["control",{"_index":4,"title":{},"content":{"1":{"position":[[22,7]]},"7":{"position":[[52,7]]},"16":{"position":[[730,8]]},"20":{"position":[[660,7]]},"42":{"position":[[544,7]]},"55":{"position":[[251,11]]},"84":{"position":[[1196,7]]},"92":{"position":[[348,7]]},"162":{"position":[[355,7]]},"173":{"position":[[839,7]]},"202":{"position":[[135,7]]},"218":{"position":[[1925,7]]},"260":{"position":[[21,7]]},"324":{"position":[[279,8]]},"326":{"position":[[1379,8]]},"343":{"position":[[1110,8]]},"390":{"position":[[499,11]]},"430":{"position":[[175,8]]},"452":{"position":[[220,7]]},"548":{"position":[[173,7]]},"780":{"position":[[143,7]]},"864":{"position":[[95,7]]},"876":{"position":[[95,7]]},"985":{"position":[[496,7]]},"1000":{"position":[[674,7]]},"1020":{"position":[[2023,7]]},"1036":{"position":[[1063,8]]},"1105":{"position":[[196,7]]},"1251":{"position":[[175,7]]},"1373":{"position":[[1160,7],[1210,7]]},"1374":{"position":[[1164,7],[1214,7]]},"1397":{"position":[[939,7],[989,7]]},"1398":{"position":[[942,7],[992,7]]},"1408":{"position":[[258,7],[308,7]]},"1409":{"position":[[922,7],[972,7]]},"1453":{"position":[[40,10]]},"1465":{"position":[[143,10]]}},"keywords":{}}],["conveni",{"_index":1913,"title":{},"content":{"162":{"position":[[600,12]]},"197":{"position":[[199,10]]},"234":{"position":[[81,12]]},"237":{"position":[[873,12]]}},"keywords":{}}],["convent",{"_index":612,"title":{"1155":{"position":[[7,12]]}},"content":{"26":{"position":[[374,11]]},"269":{"position":[[228,10]]},"1008":{"position":[[1520,10]]},"1434":{"position":[[6,10]]}},"keywords":{}}],["convers",{"_index":4115,"title":{},"content":{"556":{"position":[[264,10],[295,10],[410,11]]},"686":{"position":[[511,13]]},"1012":{"position":[[109,13],[140,13],[175,13]]},"1183":{"position":[[553,11]]}},"keywords":{}}],["conversation_part",{"_index":4437,"title":{},"content":{"686":{"position":[[599,18]]}},"keywords":{}}],["conversations)channel",{"_index":5178,"title":{},"content":{"1012":{"position":[[78,22]]}},"keywords":{}}],["conversion_window_day",{"_index":4123,"title":{},"content":{"557":{"position":[[182,23]]}},"keywords":{}}],["convert",{"_index":2078,"title":{},"content":{"183":{"position":[[3194,8]]},"189":{"position":[[812,7]]},"221":{"position":[[1328,7]]},"222":{"position":[[573,7]]},"223":{"position":[[539,7]]},"224":{"position":[[592,7]]},"754":{"position":[[350,7]]},"794":{"position":[[223,7]]},"809":{"position":[[223,7]]},"825":{"position":[[223,7]]},"1140":{"position":[[3309,7]]},"1183":{"position":[[283,7],[569,7]]},"1286":{"position":[[252,7]]},"1291":{"position":[[119,9]]},"1292":{"position":[[1488,7]]},"1298":{"position":[[539,7]]},"1301":{"position":[[252,7]]},"1305":{"position":[[119,9]]},"1306":{"position":[[1488,7]]},"1316":{"position":[[3309,7]]},"1317":{"position":[[599,9],[688,9],[808,9],[890,10]]},"1322":{"position":[[573,7]]},"1325":{"position":[[252,7]]},"1328":{"position":[[119,9]]},"1329":{"position":[[1488,7]]},"1335":{"position":[[573,7]]},"1340":{"position":[[3309,7]]},"1341":{"position":[[599,9],[688,9],[808,9],[890,10]]},"1346":{"position":[[539,7]]},"1351":{"position":[[3309,7]]},"1352":{"position":[[599,9],[688,9],[808,9],[890,10]]},"1379":{"position":[[828,7]]},"1403":{"position":[[828,7]]},"1414":{"position":[[828,7]]},"1431":{"position":[[3332,7]]},"1432":{"position":[[599,9],[702,9],[822,9],[918,10]]}},"keywords":{}}],["convey",{"_index":1119,"title":{},"content":{"81":{"position":[[369,7]]}},"keywords":{}}],["cooki",{"_index":1841,"title":{},"content":{"154":{"position":[[213,6],[2077,6],[2110,6],[2152,6]]}},"keywords":{}}],["cool",{"_index":5110,"title":{},"content":{"947":{"position":[[440,4],[757,4]]}},"keywords":{}}],["coordin",{"_index":1901,"title":{},"content":{"161":{"position":[[719,12],[785,10],[812,12]]},"322":{"position":[[498,10],[982,13]]}},"keywords":{}}],["copi",{"_index":871,"title":{},"content":{"58":{"position":[[175,4]]},"109":{"position":[[397,4]]},"121":{"position":[[1728,6]]},"169":{"position":[[414,4],[1564,4]]},"204":{"position":[[876,4]]},"210":{"position":[[1885,4]]},"263":{"position":[[152,4],[682,4]]},"267":{"position":[[1990,4]]},"270":{"position":[[252,4]]},"274":{"position":[[550,4]]},"284":{"position":[[61,4]]},"289":{"position":[[387,6]]},"295":{"position":[[139,4],[1155,6]]},"296":{"position":[[7332,4]]},"300":{"position":[[355,4]]},"323":{"position":[[343,4]]},"340":{"position":[[424,4]]},"436":{"position":[[767,4],[854,4]]},"486":{"position":[[233,4]]},"548":{"position":[[1264,4]]},"571":{"position":[[677,4]]},"582":{"position":[[290,4]]},"595":{"position":[[907,4]]},"609":{"position":[[234,4]]},"615":{"position":[[40,4]]},"617":{"position":[[40,4],[601,4]]},"645":{"position":[[446,4]]},"652":{"position":[[446,4]]},"658":{"position":[[233,4]]},"674":{"position":[[233,4]]},"689":{"position":[[233,4]]},"840":{"position":[[282,4],[829,4],[2352,4]]},"849":{"position":[[225,4],[1304,4],[3492,4]]},"857":{"position":[[239,4]]},"1032":{"position":[[82,4]]},"1140":{"position":[[3344,4]]},"1183":{"position":[[362,7],[1270,7],[1416,4]]},"1209":{"position":[[454,4]]},"1245":{"position":[[553,4]]},"1316":{"position":[[3344,4]]},"1340":{"position":[[3344,4]]},"1351":{"position":[[3344,4]]},"1383":{"position":[[28,4]]},"1384":{"position":[[453,4]]},"1431":{"position":[[3367,4]]}},"keywords":{}}],["core",{"_index":1454,"title":{},"content":{"101":{"position":[[415,5]]}},"keywords":{}}],["corner",{"_index":2234,"title":{},"content":{"206":{"position":[[867,7]]},"240":{"position":[[4144,7]]},"296":{"position":[[7549,6]]},"349":{"position":[[111,7]]},"479":{"position":[[110,7]]},"552":{"position":[[171,6],[446,6]]},"1092":{"position":[[111,7]]}},"keywords":{}}],["corp",{"_index":6594,"title":{},"content":{"1461":{"position":[[927,4]]}},"keywords":{}}],["corr",{"_index":5661,"title":{},"content":{"1140":{"position":[[3370,4]]},"1316":{"position":[[3370,4]]},"1340":{"position":[[3370,4]]},"1351":{"position":[[3370,4]]},"1379":{"position":[[878,4]]},"1403":{"position":[[878,4]]},"1414":{"position":[[878,4]]},"1431":{"position":[[3393,4]]}},"keywords":{}}],["correct",{"_index":920,"title":{},"content":{"61":{"position":[[382,7]]},"68":{"position":[[129,7]]},"75":{"position":[[84,7]]},"106":{"position":[[748,7]]},"111":{"position":[[252,11]]},"183":{"position":[[1075,7]]},"218":{"position":[[1494,7]]},"228":{"position":[[783,7]]},"229":{"position":[[477,7]]},"239":{"position":[[1576,8]]},"267":{"position":[[1494,7]]},"270":{"position":[[1123,7]]},"326":{"position":[[1908,8]]},"419":{"position":[[1533,7]]},"441":{"position":[[142,7]]},"477":{"position":[[454,7]]},"499":{"position":[[368,7]]},"504":{"position":[[1162,7]]},"547":{"position":[[1535,7]]},"578":{"position":[[106,12],[285,7]]},"598":{"position":[[418,7]]},"634":{"position":[[360,7]]},"639":{"position":[[1160,7]]},"661":{"position":[[295,7]]},"794":{"position":[[749,7]]},"809":{"position":[[749,7]]},"840":{"position":[[2432,7]]},"849":{"position":[[3572,7]]},"1023":{"position":[[1516,7]]},"1286":{"position":[[806,7]]},"1289":{"position":[[1361,7]]},"1298":{"position":[[1193,7]]},"1303":{"position":[[1072,7]]},"1310":{"position":[[682,7]]},"1322":{"position":[[1580,7]]},"1325":{"position":[[806,7]]},"1335":{"position":[[1228,7]]},"1346":{"position":[[1194,7]]},"1439":{"position":[[1701,7]]}},"keywords":{}}],["correctli",{"_index":317,"title":{},"content":{"11":{"position":[[755,9]]},"114":{"position":[[680,9]]},"132":{"position":[[603,9]]},"183":{"position":[[4304,9]]},"228":{"position":[[433,9]]},"237":{"position":[[2393,9]]},"275":{"position":[[65,10]]},"417":{"position":[[487,10]]},"438":{"position":[[487,10]]},"502":{"position":[[947,10]]},"545":{"position":[[487,10]]},"1008":{"position":[[571,10]]}},"keywords":{}}],["correspond",{"_index":493,"title":{},"content":{"17":{"position":[[385,13],[749,13]]},"35":{"position":[[258,13]]},"55":{"position":[[870,10],[1032,11],[1114,11]]},"63":{"position":[[574,11]]},"66":{"position":[[265,11]]},"98":{"position":[[91,13],[158,13]]},"102":{"position":[[450,13]]},"115":{"position":[[986,13]]},"184":{"position":[[707,13],[870,13]]},"197":{"position":[[1145,13]]},"225":{"position":[[575,13]]},"228":{"position":[[279,11]]},"385":{"position":[[743,10]]},"488":{"position":[[480,10]]},"659":{"position":[[637,10]]},"676":{"position":[[480,10]]},"691":{"position":[[480,10]]},"976":{"position":[[402,13]]},"1047":{"position":[[131,13]]},"1055":{"position":[[131,13]]},"1063":{"position":[[131,13]]},"1140":{"position":[[3399,13]]},"1155":{"position":[[163,14]]},"1316":{"position":[[3399,13]]},"1317":{"position":[[829,13]]},"1340":{"position":[[3399,13]]},"1341":{"position":[[829,13]]},"1351":{"position":[[3399,13]]},"1352":{"position":[[829,13]]},"1379":{"position":[[914,13]]},"1403":{"position":[[914,13]]},"1414":{"position":[[914,13]]},"1417":{"position":[[302,10]]},"1431":{"position":[[3422,13]]},"1432":{"position":[[843,13]]},"1470":{"position":[[721,11],[811,11]]},"1475":{"position":[[348,13]]}},"keywords":{}}],["correspondingli",{"_index":4274,"title":{},"content":{"595":{"position":[[1480,15]]}},"keywords":{}}],["corrupt",{"_index":4653,"title":{},"content":{"763":{"position":[[255,7]]},"776":{"position":[[255,7]]},"803":{"position":[[261,7]]},"818":{"position":[[261,7]]},"834":{"position":[[261,7]]}},"keywords":{}}],["cosh",{"_index":5667,"title":{},"content":{"1140":{"position":[[3474,4]]},"1316":{"position":[[3474,4]]},"1340":{"position":[[3474,4]]},"1351":{"position":[[3474,4]]},"1431":{"position":[[3497,4]]}},"keywords":{}}],["cost",{"_index":545,"title":{},"content":{"20":{"position":[[806,4]]},"96":{"position":[[297,5]]},"163":{"position":[[556,4]]},"319":{"position":[[1233,4]]},"329":{"position":[[900,6]]},"330":{"position":[[116,6],[666,6]]},"628":{"position":[[341,4]]},"1036":{"position":[[371,4],[666,5],[743,5]]},"1182":{"position":[[229,5]]},"1186":{"position":[[304,6]]},"1191":{"position":[[231,5]]},"1262":{"position":[[231,5]]},"1388":{"position":[[247,5]]},"1389":{"position":[[230,5]]}},"keywords":{}}],["couldn't",{"_index":1542,"title":{},"content":{"107":{"position":[[1943,8]]}},"keywords":{}}],["count",{"_index":747,"title":{},"content":{"42":{"position":[[673,7]]},"66":{"position":[[825,5]]},"121":{"position":[[1681,6]]},"183":{"position":[[2662,6]]},"238":{"position":[[1208,8],[1232,5],[1277,8],[1301,5],[1345,8]]},"729":{"position":[[70,5]]},"747":{"position":[[346,8]]},"1140":{"position":[[3516,5]]},"1316":{"position":[[3516,5]]},"1340":{"position":[[3516,5]]},"1351":{"position":[[3516,5]]},"1379":{"position":[[967,5]]},"1403":{"position":[[967,5]]},"1414":{"position":[[967,5]]},"1431":{"position":[[3539,5]]}},"keywords":{}}],["counter",{"_index":402,"title":{},"content":{"13":{"position":[[882,8],[1444,9]]},"183":{"position":[[3177,7]]},"208":{"position":[[1125,8],[1695,8]]},"308":{"position":[[1181,7]]},"309":{"position":[[1614,9],[3223,8]]},"1440":{"position":[[481,9]]},"1465":{"position":[[413,8]]}},"keywords":{}}],["counterfor",{"_index":5736,"title":{},"content":{"1146":{"position":[[559,10]]},"1173":{"position":[[571,10]]},"1215":{"position":[[559,10]]},"1223":{"position":[[571,10]]}},"keywords":{}}],["counterintuit",{"_index":2193,"title":{},"content":{"197":{"position":[[1234,16]]},"483":{"position":[[594,16]]}},"keywords":{}}],["countri",{"_index":456,"title":{},"content":{"16":{"position":[[235,8],[254,8],[1168,8]]},"17":{"position":[[620,8]]},"385":{"position":[[450,8]]},"1080":{"position":[[740,7],[789,7]]}},"keywords":{}}],["countriesavail",{"_index":5390,"title":{},"content":{"1110":{"position":[[128,18]]}},"keywords":{}}],["countrysearch",{"_index":4297,"title":{},"content":{"605":{"position":[[249,13]]}},"keywords":{}}],["counts.flow.yaml",{"_index":1297,"title":{},"content":{"87":{"position":[[839,16]]}},"keywords":{}}],["countsannotationsaverag",{"_index":3638,"title":{},"content":{"421":{"position":[[85,24]]}},"keywords":{}}],["coupl",{"_index":1630,"title":{},"content":{"115":{"position":[[945,7]]}},"keywords":{}}],["coupon",{"_index":5308,"title":{},"content":{"1078":{"position":[[697,7]]},"1096":{"position":[[83,7]]}},"keywords":{}}],["cours",{"_index":1446,"title":{},"content":{"101":{"position":[[35,6]]}},"keywords":{}}],["covar_pop",{"_index":5673,"title":{},"content":{"1140":{"position":[[3555,9]]},"1316":{"position":[[3555,9]]},"1340":{"position":[[3555,9]]},"1351":{"position":[[3555,9]]},"1379":{"position":[[1013,9]]},"1403":{"position":[[1013,9]]},"1414":{"position":[[1013,9]]},"1431":{"position":[[3578,9]]}},"keywords":{}}],["covar_samp",{"_index":5677,"title":{},"content":{"1140":{"position":[[3599,10]]},"1316":{"position":[[3599,10]]},"1340":{"position":[[3599,10]]},"1351":{"position":[[3599,10]]},"1379":{"position":[[1053,10]]},"1403":{"position":[[1053,10]]},"1414":{"position":[[1053,10]]},"1431":{"position":[[3622,10]]}},"keywords":{}}],["cover",{"_index":76,"title":{},"content":{"2":{"position":[[268,8],[392,5],[418,6],[487,7],[625,8]]},"84":{"position":[[695,7]]},"175":{"position":[[173,7]]},"257":{"position":[[42,5]]},"286":{"position":[[54,5]]}},"keywords":{}}],["coyot",{"_index":1692,"title":{},"content":{"123":{"position":[[769,8]]}},"keywords":{}}],["coyote"",{"_index":1378,"title":{},"content":{"96":{"position":[[369,13],[593,13]]}},"keywords":{}}],["coyote_ord",{"_index":1693,"title":{},"content":{"123":{"position":[[797,13]]}},"keywords":{}}],["cpu",{"_index":4889,"title":{},"content":{"869":{"position":[[1222,3],[1512,5]]},"1292":{"position":[[1524,3]]},"1306":{"position":[[1524,3]]},"1329":{"position":[[1524,3]]}},"keywords":{}}],["cr268+dwwwcdxohu5dnrn8qv/awk7hwp18mlcnyo0skt84zvippe+juqmk4hdqni",{"_index":1246,"title":{},"content":{"83":{"position":[[1767,64]]},"371":{"position":[[686,64]]},"1139":{"position":[[573,64]]}},"keywords":{}}],["crash",{"_index":3200,"title":{},"content":{"331":{"position":[[425,5]]}},"keywords":{}}],["crawl",{"_index":2235,"title":{},"content":{"206":{"position":[[899,5]]}},"keywords":{}}],["crdt",{"_index":6593,"title":{},"content":{"1459":{"position":[[1467,6]]}},"keywords":{}}],["creat",{"_index":66,"title":{"140":{"position":[[0,8]]},"144":{"position":[[0,8]]},"178":{"position":[[0,6]]},"184":{"position":[[0,6]]},"187":{"position":[[0,6]]},"214":{"position":[[0,6]]},"217":{"position":[[0,6]]},"218":{"position":[[0,6]]},"261":{"position":[[13,7]]},"265":{"position":[[0,6]]},"270":{"position":[[0,6]]},"307":{"position":[[3,8]]},"864":{"position":[[0,6]]},"876":{"position":[[0,6]]},"943":{"position":[[3,6]]},"945":{"position":[[3,6]]},"947":{"position":[[0,6]]},"1429":{"position":[[0,8]]}},"content":{"2":{"position":[[49,7]]},"13":{"position":[[388,6],[930,6],[1084,6],[1142,7],[1735,6]]},"16":{"position":[[1348,8]]},"19":{"position":[[22,8]]},"23":{"position":[[43,6]]},"24":{"position":[[254,6]]},"25":{"position":[[195,6]]},"30":{"position":[[54,7],[250,6]]},"31":{"position":[[204,6]]},"33":{"position":[[280,6],[405,6]]},"41":{"position":[[668,7]]},"45":{"position":[[360,6]]},"49":{"position":[[202,7],[401,7]]},"50":{"position":[[112,6]]},"55":{"position":[[814,6]]},"56":{"position":[[651,7],[761,8]]},"63":{"position":[[254,7],[355,6]]},"81":{"position":[[1708,6]]},"82":{"position":[[857,7]]},"91":{"position":[[409,8]]},"94":{"position":[[641,6]]},"100":{"position":[[388,6],[431,6],[785,6]]},"101":{"position":[[472,8],[584,8]]},"105":{"position":[[1262,8]]},"122":{"position":[[219,6],[501,7]]},"135":{"position":[[241,8],[923,6]]},"136":{"position":[[312,6]]},"138":{"position":[[502,6]]},"139":{"position":[[118,6]]},"140":{"position":[[16,6],[52,6],[319,6]]},"143":{"position":[[134,6]]},"144":{"position":[[31,8],[812,6]]},"146":{"position":[[444,8]]},"149":{"position":[[456,8]]},"152":{"position":[[468,8]]},"158":{"position":[[461,6],[542,6]]},"162":{"position":[[1037,6]]},"171":{"position":[[63,6]]},"172":{"position":[[62,6]]},"173":{"position":[[140,6]]},"176":{"position":[[53,6],[103,6]]},"182":{"position":[[546,6]]},"183":{"position":[[507,6],[787,7],[2644,8],[2894,7],[3106,7]]},"189":{"position":[[920,6],[1824,8]]},"191":{"position":[[323,6],[764,6],[799,6],[910,6],[930,6],[1029,6],[1089,6],[1115,6],[1415,6],[1446,6],[1792,6],[2034,6]]},"193":{"position":[[8,7],[550,6],[731,6]]},"204":{"position":[[478,6]]},"205":{"position":[[19,6]]},"208":{"position":[[558,6],[979,8]]},"212":{"position":[[59,6]]},"213":{"position":[[396,6]]},"216":{"position":[[22,6]]},"217":{"position":[[14,6],[88,6],[850,6]]},"218":{"position":[[890,6]]},"219":{"position":[[171,6]]},"221":{"position":[[499,6]]},"222":{"position":[[77,6]]},"223":{"position":[[789,6]]},"224":{"position":[[79,6],[674,6],[769,6],[810,6],[996,6]]},"230":{"position":[[249,7]]},"236":{"position":[[105,6],[1811,6],[1987,6],[2142,6],[2739,6],[2857,6],[2958,6],[3320,6],[3481,6],[3708,6]]},"237":{"position":[[78,7],[277,6],[1031,6],[1291,6],[1753,6],[2540,8]]},"239":{"position":[[158,6]]},"240":{"position":[[322,6],[725,6],[760,6],[871,6],[891,6],[990,6],[1050,6],[1076,6],[1376,6],[1407,6],[1753,6],[1995,6],[2512,6],[3785,7]]},"243":{"position":[[59,6]]},"250":{"position":[[516,6]]},"254":{"position":[[93,6],[149,6]]},"257":{"position":[[145,6]]},"263":{"position":[[519,7]]},"266":{"position":[[161,6],[255,6]]},"267":{"position":[[875,6],[1151,7]]},"268":{"position":[[516,8],[1961,7]]},"269":{"position":[[1423,7]]},"270":{"position":[[1,8],[2039,7]]},"277":{"position":[[232,6]]},"278":{"position":[[517,6],[762,6],[989,6]]},"279":{"position":[[1252,6],[1381,6]]},"280":{"position":[[1502,6]]},"281":{"position":[[247,6]]},"286":{"position":[[273,6]]},"288":{"position":[[278,6],[461,6],[786,6]]},"289":{"position":[[22,6]]},"290":{"position":[[14,6],[658,6],[1072,7]]},"292":{"position":[[294,6]]},"295":{"position":[[1004,6],[1075,6]]},"296":{"position":[[93,6],[149,6],[3790,6],[7163,6],[7300,6],[7430,7],[7644,7]]},"299":{"position":[[701,6]]},"300":{"position":[[22,6]]},"301":{"position":[[14,6],[598,6]]},"303":{"position":[[285,6]]},"307":{"position":[[152,8],[260,8],[351,6],[576,6],[650,6],[816,6],[2982,8]]},"309":{"position":[[1649,6],[3476,6]]},"314":{"position":[[93,6],[149,6]]},"321":{"position":[[419,6],[679,6],[899,6]]},"322":{"position":[[750,8]]},"326":{"position":[[844,7]]},"363":{"position":[[22,7]]},"364":{"position":[[420,7]]},"366":{"position":[[277,7],[400,6],[638,7],[667,7],[970,7],[999,7]]},"367":{"position":[[233,6],[347,6],[582,6],[743,6],[824,6]]},"387":{"position":[[368,8]]},"406":{"position":[[57,6]]},"414":{"position":[[118,6]]},"415":{"position":[[214,6],[380,6]]},"427":{"position":[[194,8]]},"436":{"position":[[456,6],[932,8]]},"452":{"position":[[127,8]]},"472":{"position":[[276,6],[326,8]]},"475":{"position":[[359,6]]},"477":{"position":[[313,6],[593,8],[669,8],[976,8]]},"478":{"position":[[218,8],[287,6],[363,6],[451,8],[494,6]]},"483":{"position":[[393,6],[628,6]]},"485":{"position":[[378,6]]},"487":{"position":[[462,7]]},"509":{"position":[[399,7]]},"515":{"position":[[447,6]]},"558":{"position":[[9,6]]},"571":{"position":[[557,6]]},"582":{"position":[[168,6]]},"591":{"position":[[148,6]]},"597":{"position":[[322,6]]},"598":{"position":[[176,6],[277,6],[557,8],[633,8],[938,8]]},"599":{"position":[[218,8],[287,6],[363,6],[451,8],[494,6]]},"602":{"position":[[242,7],[328,7]]},"606":{"position":[[71,7]]},"609":{"position":[[179,6]]},"617":{"position":[[479,6]]},"645":{"position":[[116,6],[276,6]]},"652":{"position":[[116,6],[276,6]]},"657":{"position":[[378,6]]},"673":{"position":[[378,6]]},"688":{"position":[[378,6]]},"690":{"position":[[111,6]]},"710":{"position":[[20,6]]},"716":{"position":[[112,8]]},"718":{"position":[[50,6],[146,6]]},"725":{"position":[[60,6]]},"726":{"position":[[1,6],[31,6],[394,6],[478,6]]},"752":{"position":[[48,6],[198,6],[234,6],[323,6],[624,6]]},"753":{"position":[[189,6],[752,6],[854,6],[890,6],[979,6],[1280,6]]},"767":{"position":[[189,6],[305,6],[798,6],[861,6],[887,6],[1322,6],[1396,6],[1535,7],[1736,6],[1834,6],[1870,6],[1957,6]]},"791":{"position":[[1,6],[151,6],[187,6],[276,6],[577,6]]},"792":{"position":[[320,8],[509,6],[618,6],[1077,6],[1155,6],[1181,6],[1676,6],[1774,6],[1810,6],[1897,6]]},"793":{"position":[[134,8],[182,6],[723,6],[825,6],[861,6],[950,6],[1251,6]]},"794":{"position":[[631,6]]},"808":{"position":[[134,8],[741,6],[771,6],[807,6],[896,6],[1197,6]]},"809":{"position":[[631,6]]},"824":{"position":[[134,8],[301,6],[410,6],[869,6],[930,6],[956,6],[1388,6],[1462,6],[1599,7],[1798,6],[1896,6],[1932,6],[2019,6]]},"840":{"position":[[1,6],[28,6],[421,6],[1848,7],[2228,9]]},"842":{"position":[[239,8]]},"849":{"position":[[892,6],[2896,7],[3161,7],[3368,9]]},"855":{"position":[[73,7],[115,6]]},"856":{"position":[[34,6]]},"857":{"position":[[34,6]]},"864":{"position":[[1,8],[121,6],[189,6],[267,6],[788,6],[816,6]]},"876":{"position":[[1,8],[121,6],[189,6],[267,6]]},"903":{"position":[[303,7],[426,6],[664,7],[693,7],[996,7],[1025,7]]},"904":{"position":[[134,8],[301,6],[928,6],[954,6],[1337,6],[1451,6],[1682,6],[1843,6]]},"909":{"position":[[825,6]]},"911":{"position":[[144,6],[247,6],[366,8]]},"915":{"position":[[303,7],[426,6],[664,7],[693,7],[996,7],[1025,7]]},"917":{"position":[[161,6],[280,6],[313,6],[1119,6],[1170,6],[1191,6],[1352,6]]},"918":{"position":[[320,8],[509,6],[618,6],[1131,6],[1157,6],[1629,6],[1743,6],[1974,6],[2135,6]]},"919":{"position":[[134,8],[182,6],[811,6],[876,6],[2029,6],[2190,6]]},"925":{"position":[[825,6]]},"927":{"position":[[144,6],[247,6],[366,8]]},"930":{"position":[[303,7],[426,6],[664,7],[693,7],[996,7],[1025,7]]},"931":{"position":[[134,8],[994,6],[1108,6],[1344,6],[1505,6]]},"936":{"position":[[825,6]]},"938":{"position":[[144,6],[247,6],[366,8]]},"943":{"position":[[28,6],[155,7],[196,7],[341,6],[472,6],[558,7],[578,7],[666,7],[773,6],[832,7]]},"945":{"position":[[1,6],[125,6],[574,6],[686,6]]},"952":{"position":[[825,6]]},"954":{"position":[[144,6],[247,6],[366,8]]},"963":{"position":[[457,7],[580,6],[818,7],[847,7],[1150,7],[1179,7]]},"965":{"position":[[161,6],[280,6],[313,6],[1119,6],[1170,6],[1191,6],[1352,6]]},"970":{"position":[[825,6]]},"972":{"position":[[144,6],[247,6],[366,8]]},"977":{"position":[[59,6]]},"985":{"position":[[511,6]]},"987":{"position":[[265,8]]},"989":{"position":[[1,6],[38,8],[183,6],[381,6],[430,8],[526,6],[663,6],[795,6]]},"1000":{"position":[[689,6]]},"1002":{"position":[[265,8]]},"1004":{"position":[[1,6],[38,8],[266,6],[464,6],[513,8],[609,6],[746,6],[878,6]]},"1008":{"position":[[83,6],[181,6],[237,6],[1571,7]]},"1031":{"position":[[512,6]]},"1032":{"position":[[629,6],[664,6],[772,6],[994,6],[1048,6],[1381,6],[1411,6]]},"1034":{"position":[[816,6]]},"1040":{"position":[[286,8],[402,7],[806,7]]},"1042":{"position":[[142,6],[195,6],[247,6],[626,6],[677,6]]},"1043":{"position":[[134,8],[182,6],[806,6],[859,6],[911,6],[1290,6],[1341,6]]},"1050":{"position":[[286,8],[402,7],[806,7]]},"1051":{"position":[[134,8],[301,6],[1068,6],[1121,6],[1173,6],[1552,6],[1603,6]]},"1058":{"position":[[286,8],[402,7],[806,7]]},"1059":{"position":[[134,8],[857,6],[910,6],[966,6],[1345,6],[1396,6]]},"1067":{"position":[[44,6],[545,8],[661,8]]},"1077":{"position":[[223,8]]},"1083":{"position":[[195,7]]},"1105":{"position":[[111,8]]},"1118":{"position":[[109,6],[248,6],[1052,6]]},"1136":{"position":[[124,6],[189,7],[378,6]]},"1138":{"position":[[1378,6],[1456,7],[1762,7],[1824,7]]},"1140":{"position":[[3636,6]]},"1149":{"position":[[253,6],[318,7]]},"1156":{"position":[[213,8],[360,7]]},"1157":{"position":[[201,6]]},"1164":{"position":[[136,7]]},"1176":{"position":[[400,7],[583,6]]},"1177":{"position":[[105,6],[408,6]]},"1183":{"position":[[26,7],[107,7],[337,8],[835,6],[1343,6]]},"1185":{"position":[[383,6]]},"1186":{"position":[[19,6],[167,8],[741,6]]},"1192":{"position":[[283,7],[352,8]]},"1194":{"position":[[286,8],[352,8],[593,6]]},"1195":{"position":[[378,6]]},"1196":{"position":[[773,6],[1150,6]]},"1200":{"position":[[70,7],[400,7]]},"1201":{"position":[[172,7],[345,7],[452,8]]},"1203":{"position":[[117,8],[754,6]]},"1204":{"position":[[183,6],[470,7],[495,8]]},"1209":{"position":[[473,6]]},"1211":{"position":[[214,7]]},"1218":{"position":[[214,7]]},"1226":{"position":[[394,6]]},"1228":{"position":[[346,8]]},"1230":{"position":[[694,6],[879,6],[912,6],[947,8],[975,7],[1170,8]]},"1243":{"position":[[171,6]]},"1245":{"position":[[431,6]]},"1274":{"position":[[162,7]]},"1275":{"position":[[21,7]]},"1281":{"position":[[163,6],[261,6]]},"1283":{"position":[[145,8],[218,6]]},"1286":{"position":[[688,6],[2597,7],[2659,7]]},"1289":{"position":[[145,8],[292,6],[492,6]]},"1292":{"position":[[1553,6]]},"1293":{"position":[[172,7]]},"1295":{"position":[[163,6],[261,6]]},"1298":{"position":[[789,6]]},"1301":{"position":[[2433,7],[2495,7]]},"1303":{"position":[[134,8],[1259,6],[1365,6],[1417,6]]},"1306":{"position":[[1553,6]]},"1307":{"position":[[172,7]]},"1309":{"position":[[124,6],[189,7]]},"1311":{"position":[[54,6]]},"1313":{"position":[[922,6],[1000,7],[1306,7],[1368,7]]},"1316":{"position":[[3636,6]]},"1317":{"position":[[172,7],[453,7]]},"1319":{"position":[[163,6],[261,6]]},"1320":{"position":[[145,8]]},"1321":{"position":[[72,6],[272,6]]},"1322":{"position":[[77,6]]},"1325":{"position":[[688,6],[2597,7],[2659,7]]},"1329":{"position":[[1553,6]]},"1330":{"position":[[172,7]]},"1332":{"position":[[124,6],[189,7]]},"1333":{"position":[[145,8]]},"1334":{"position":[[72,6],[360,6]]},"1335":{"position":[[77,6]]},"1337":{"position":[[922,6],[1000,7],[1306,7],[1368,7]]},"1340":{"position":[[3636,6]]},"1341":{"position":[[172,7],[453,7]]},"1343":{"position":[[124,6],[189,7]]},"1344":{"position":[[145,8]]},"1346":{"position":[[789,6]]},"1348":{"position":[[922,6],[1000,7],[1306,7],[1368,7]]},"1351":{"position":[[3636,6]]},"1352":{"position":[[172,7],[453,7]]},"1354":{"position":[[171,7],[255,7],[418,6]]},"1356":{"position":[[1383,7],[1493,7]]},"1359":{"position":[[172,7]]},"1367":{"position":[[114,7],[176,7]]},"1370":{"position":[[678,6]]},"1372":{"position":[[163,6],[261,6]]},"1373":{"position":[[134,8],[301,6],[985,6],[1038,6],[1094,6]]},"1374":{"position":[[134,8],[301,6],[985,6],[1038,6],[1098,6]]},"1376":{"position":[[512,7],[574,7]]},"1379":{"position":[[1105,6]]},"1380":{"position":[[172,7]]},"1382":{"position":[[637,6]]},"1383":{"position":[[338,6],[712,6],[747,6],[858,6],[878,6],[977,6],[1037,6],[1063,6],[1363,6],[1394,6],[1740,6],[1982,6]]},"1393":{"position":[[267,7]]},"1394":{"position":[[280,7],[349,8],[765,6]]},"1396":{"position":[[163,6],[261,6]]},"1397":{"position":[[134,8],[764,6],[817,6],[873,6]]},"1398":{"position":[[134,8],[763,6],[816,6],[876,6]]},"1400":{"position":[[512,7],[574,7]]},"1403":{"position":[[1105,6]]},"1404":{"position":[[172,7]]},"1406":{"position":[[163,6],[261,6]]},"1408":{"position":[[83,6],[136,6],[192,6]]},"1409":{"position":[[134,8],[182,6],[747,6],[800,6],[856,6]]},"1411":{"position":[[512,7],[574,7]]},"1414":{"position":[[1105,6]]},"1415":{"position":[[172,7]]},"1417":{"position":[[69,6],[378,7]]},"1423":{"position":[[290,7],[359,8]]},"1426":{"position":[[268,6],[333,7]]},"1427":{"position":[[649,6],[727,7],[757,8],[1066,7],[1128,7]]},"1431":{"position":[[3659,6]]},"1432":{"position":[[172,7],[453,7]]},"1449":{"position":[[78,6],[551,7]]},"1461":{"position":[[2530,8]]},"1475":{"position":[[1996,7]]},"1479":{"position":[[72,6]]}},"keywords":{}}],["create/insert",{"_index":2295,"title":{},"content":{"210":{"position":[[1178,13]]}},"keywords":{}}],["create_default_subscript",{"_index":5895,"title":{},"content":{"1231":{"position":[[258,28]]}},"keywords":{}}],["create_hypertable('my_time_seri",{"_index":6426,"title":{},"content":{"1429":{"position":[[829,35]]}},"keywords":{}}],["create_hypertable('t",{"_index":6422,"title":{},"content":{"1429":{"position":[[353,26]]}},"keywords":{}}],["create_index",{"_index":5824,"title":{},"content":{"1194":{"position":[[333,13]]}},"keywords":{}}],["created_at",{"_index":1179,"title":{},"content":{"82":{"position":[[2545,11],[4686,11]]},"1134":{"position":[[539,10],[2111,10],[2226,10]]}},"keywords":{}}],["creation",{"_index":2545,"title":{},"content":{"236":{"position":[[2032,8]]},"296":{"position":[[7229,8]]},"595":{"position":[[1027,9]]},"724":{"position":[[531,8]]},"943":{"position":[[515,8]]},"985":{"position":[[616,8]]},"1000":{"position":[[930,8]]},"1047":{"position":[[330,8]]},"1055":{"position":[[330,8]]},"1063":{"position":[[330,8]]},"1076":{"position":[[566,9]]},"1177":{"position":[[146,9]]}},"keywords":{}}],["creativ",{"_index":3962,"title":{},"content":{"517":{"position":[[2909,9]]},"715":{"position":[[177,8]]}},"keywords":{}}],["creativesad",{"_index":3928,"title":{},"content":{"512":{"position":[[65,11]]}},"keywords":{}}],["credenti",{"_index":1133,"title":{"201":{"position":[[0,12]]}},"content":{"81":{"position":[[2285,11],[2920,11]]},"82":{"position":[[31,11],[100,11],[166,10],[318,12],[703,10],[1028,11],[1577,11],[3790,12]]},"201":{"position":[[22,11],[102,11]]},"217":{"position":[[257,11]]},"259":{"position":[[456,11],[2150,11]]},"290":{"position":[[234,11],[1030,12]]},"299":{"position":[[487,12]]},"301":{"position":[[187,11]]},"383":{"position":[[129,11]]},"384":{"position":[[66,11],[206,12]]},"387":{"position":[[386,11]]},"388":{"position":[[182,12]]},"390":{"position":[[656,12]]},"392":{"position":[[110,11],[276,11]]},"395":{"position":[[835,12]]},"400":{"position":[[45,11]]},"415":{"position":[[367,12]]},"417":{"position":[[754,11],[945,11]]},"432":{"position":[[367,12],[380,11]]},"433":{"position":[[208,12],[619,12]]},"438":{"position":[[553,12],[566,11],[584,11]]},"439":{"position":[[155,12]]},"445":{"position":[[20,11]]},"446":{"position":[[68,11]]},"448":{"position":[[253,11],[817,11],[1040,11]]},"449":{"position":[[180,12]]},"473":{"position":[[182,12],[210,11]]},"477":{"position":[[38,11]]},"482":{"position":[[271,11]]},"502":{"position":[[391,12],[404,11],[423,11]]},"527":{"position":[[178,12],[209,11]]},"534":{"position":[[460,12],[600,11]]},"535":{"position":[[178,12],[209,11]]},"543":{"position":[[371,11]]},"545":{"position":[[721,11]]},"548":{"position":[[440,12],[518,11],[598,11],[739,12],[1128,11]]},"551":{"position":[[131,12]]},"556":{"position":[[521,12],[541,11]]},"557":{"position":[[208,12]]},"564":{"position":[[73,11],[121,11]]},"566":{"position":[[114,12]]},"571":{"position":[[747,11]]},"573":{"position":[[257,11],[269,11],[501,11]]},"575":{"position":[[219,12]]},"582":{"position":[[360,11]]},"584":{"position":[[245,11],[257,11],[432,11]]},"586":{"position":[[183,12]]},"593":{"position":[[79,11],[125,12]]},"598":{"position":[[37,11]]},"601":{"position":[[227,11]]},"608":{"position":[[22,11],[158,11]]},"609":{"position":[[304,11]]},"612":{"position":[[193,12]]},"617":{"position":[[671,11]]},"619":{"position":[[154,11],[177,11],[406,11]]},"620":{"position":[[115,12]]},"635":{"position":[[453,11]]},"637":{"position":[[73,11],[90,12]]},"646":{"position":[[615,11],[639,11]]},"647":{"position":[[147,11]]},"654":{"position":[[336,11],[360,11]]},"655":{"position":[[109,12],[153,11]]},"720":{"position":[[421,12]]},"721":{"position":[[221,12]]},"736":{"position":[[111,12]]},"748":{"position":[[111,12]]},"780":{"position":[[15,11]]},"842":{"position":[[485,11]]},"860":{"position":[[178,12]]},"879":{"position":[[256,12],[269,11],[281,11],[434,11]]},"880":{"position":[[232,12]]},"892":{"position":[[107,12]]},"987":{"position":[[239,12]]},"988":{"position":[[132,12]]},"991":{"position":[[168,12]]},"992":{"position":[[117,12]]},"1002":{"position":[[239,12]]},"1003":{"position":[[132,12]]},"1009":{"position":[[168,12]]},"1010":{"position":[[182,12]]},"1016":{"position":[[108,12]]},"1070":{"position":[[253,11],[265,11]]},"1071":{"position":[[184,12]]},"1086":{"position":[[200,12]]},"1102":{"position":[[120,12]]},"1108":{"position":[[114,12],[156,12]]},"1122":{"position":[[461,12]]},"1133":{"position":[[85,11],[112,11]]},"1134":{"position":[[117,12],[156,12]]},"1136":{"position":[[92,12]]},"1142":{"position":[[312,12]]},"1149":{"position":[[759,12]]},"1160":{"position":[[475,12]]},"1168":{"position":[[312,12]]},"1179":{"position":[[220,11]]},"1188":{"position":[[450,12],[463,11],[490,11]]},"1189":{"position":[[207,12]]},"1196":{"position":[[254,12],[582,12]]},"1197":{"position":[[271,12]]},"1204":{"position":[[531,11],[680,12]]},"1213":{"position":[[176,11]]},"1220":{"position":[[176,11]]},"1230":{"position":[[88,11]]},"1231":{"position":[[141,12]]},"1247":{"position":[[259,11]]},"1248":{"position":[[141,12]]},"1251":{"position":[[15,11]]},"1258":{"position":[[353,12]]},"1281":{"position":[[89,12],[229,11]]},"1295":{"position":[[89,12],[229,11]]},"1309":{"position":[[92,12]]},"1319":{"position":[[89,12],[229,11]]},"1332":{"position":[[92,12]]},"1343":{"position":[[92,12]]},"1361":{"position":[[117,11]]},"1363":{"position":[[128,12]]},"1372":{"position":[[93,12],[229,11]]},"1386":{"position":[[692,12],[705,11],[717,11]]},"1387":{"position":[[230,12],[784,12]]},"1396":{"position":[[93,12],[229,11]]},"1406":{"position":[[93,12],[229,11]]},"1425":{"position":[[101,12]]},"1447":{"position":[[300,10],[500,10],[615,11],[699,12]]}},"keywords":{}}],["credentials"",{"_index":4379,"title":{},"content":{"646":{"position":[[690,17]]},"654":{"position":[[411,17]]}},"keywords":{}}],["credentials.at",{"_index":5927,"title":{},"content":{"1264":{"position":[[119,14]]}},"keywords":{}}],["credentials.properli",{"_index":4134,"title":{},"content":{"562":{"position":[[102,20]]}},"keywords":{}}],["credentials/access_token",{"_index":4376,"title":{},"content":{"646":{"position":[[507,25]]},"654":{"position":[[228,25]]},"720":{"position":[[556,25]]},"1070":{"position":[[309,25]]},"1085":{"position":[[609,25]]},"1133":{"position":[[631,25]]}},"keywords":{}}],["credentials/advertiser_id",{"_index":5339,"title":{},"content":{"1085":{"position":[[492,26]]}},"keywords":{}}],["credentials/api_token",{"_index":5465,"title":{},"content":{"1133":{"position":[[176,22]]}},"keywords":{}}],["credentials/apikey",{"_index":4538,"title":{},"content":{"735":{"position":[[300,19]]},"1196":{"position":[[469,19]]}},"keywords":{}}],["credentials/auth_method",{"_index":3739,"title":{},"content":{"448":{"position":[[281,24]]},"720":{"position":[[456,24]]}},"keywords":{}}],["credentials/auth_typ",{"_index":3482,"title":{},"content":{"387":{"position":[[269,22]]},"432":{"position":[[484,22]]},"573":{"position":[[304,22]]},"584":{"position":[[292,22]]},"611":{"position":[[284,22]]},"619":{"position":[[259,22]]},"735":{"position":[[205,22]]},"859":{"position":[[319,22]]},"1009":{"position":[[279,22]]},"1085":{"position":[[369,22]]},"1188":{"position":[[509,22]]},"1230":{"position":[[188,22]]},"1247":{"position":[[359,22]]},"1386":{"position":[[764,22]]}},"keywords":{}}],["credentials/aws_access_key_id",{"_index":3680,"title":{},"content":{"432":{"position":[[919,30]]}},"keywords":{}}],["credentials/aws_secret_access_key",{"_index":3681,"title":{},"content":{"432":{"position":[[1006,34]]}},"keywords":{}}],["credentials/azureclientid",{"_index":3706,"title":{},"content":{"438":{"position":[[763,26]]}},"keywords":{}}],["credentials/azureclientsecret",{"_index":3707,"title":{},"content":{"438":{"position":[[898,30]]}},"keywords":{}}],["credentials/azuresubscriptionid",{"_index":3709,"title":{},"content":{"438":{"position":[[1196,32]]}},"keywords":{}}],["credentials/azuretenantid",{"_index":3708,"title":{},"content":{"438":{"position":[[1045,26]]}},"keywords":{}}],["credentials/client_id",{"_index":3485,"title":{},"content":{"387":{"position":[[457,22]]},"448":{"position":[[360,22]]},"556":{"position":[[569,22]]},"991":{"position":[[279,22]]},"1009":{"position":[[342,22]]},"1070":{"position":[[412,22]]},"1133":{"position":[[403,22]]}},"keywords":{}}],["credentials/client_secret",{"_index":3486,"title":{},"content":{"387":{"position":[[562,26]]},"448":{"position":[[476,26]]},"556":{"position":[[674,26]]},"991":{"position":[[416,26]]},"1009":{"position":[[479,26]]},"1070":{"position":[[518,26]]},"1133":{"position":[[511,26]]}},"keywords":{}}],["credentials/connectionstr",{"_index":3710,"title":{},"content":{"438":{"position":[[1362,29]]}},"keywords":{}}],["credentials/credentials_json",{"_index":4154,"title":{},"content":{"573":{"position":[[456,28]]},"584":{"position":[[386,29]]},"1230":{"position":[[309,29]]},"1247":{"position":[[480,29]]}},"keywords":{}}],["credentials/credentials_titl",{"_index":4377,"title":{},"content":{"646":{"position":[[584,30]]},"654":{"position":[[305,30]]},"879":{"position":[[403,30]]}},"keywords":{}}],["credentials/developer_token",{"_index":4116,"title":{},"content":{"556":{"position":[[791,28]]}},"keywords":{}}],["credentials/email",{"_index":4307,"title":{},"content":{"611":{"position":[[514,18]]},"1133":{"position":[[292,18]]}},"keywords":{}}],["credentials/ewallet",{"_index":4912,"title":{},"content":{"879":{"position":[[828,20]]}},"keywords":{}}],["credentials/mechan",{"_index":3676,"title":{},"content":{"432":{"position":[[593,22]]}},"keywords":{}}],["credentials/option_titl",{"_index":4043,"title":{},"content":{"534":{"position":[[541,25]]}},"keywords":{}}],["credentials/password",{"_index":3677,"title":{},"content":{"432":{"position":[[713,21]]},"637":{"position":[[158,21]]},"879":{"position":[[661,21]]},"1196":{"position":[[376,21]]},"1386":{"position":[[909,21]]}},"keywords":{}}],["credentials/personal_access_token",{"_index":4044,"title":{},"content":{"534":{"position":[[645,34]]},"1188":{"position":[[611,34]]}},"keywords":{}}],["credentials/privatekey",{"_index":6390,"title":{},"content":{"1386":{"position":[[1003,23]]}},"keywords":{}}],["credentials/refresh_token",{"_index":3487,"title":{},"content":{"387":{"position":[[679,26]]},"448":{"position":[[604,26]]},"556":{"position":[[905,26]]},"991":{"position":[[568,26]]},"1009":{"position":[[631,26]]}},"keywords":{}}],["credentials/region",{"_index":3682,"title":{},"content":{"432":{"position":[[1101,19]]}},"keywords":{}}],["credentials/service_account_info",{"_index":4306,"title":{},"content":{"611":{"position":[[384,33]]},"619":{"position":[[357,32]]}},"keywords":{}}],["credentials/storageaccountnam",{"_index":3705,"title":{},"content":{"438":{"position":[[649,31]]}},"keywords":{}}],["credentials/tnsnam",{"_index":4909,"title":{},"content":{"879":{"position":[[751,21]]}},"keywords":{}}],["credentials/token",{"_index":4841,"title":{},"content":{"859":{"position":[[417,18]]}},"keywords":{}}],["credentials/us",{"_index":4363,"title":{},"content":{"637":{"position":[[247,17]]},"1386":{"position":[[851,17]]}},"keywords":{}}],["credentials/usernam",{"_index":3679,"title":{},"content":{"432":{"position":[[816,21]]},"879":{"position":[[563,21]]},"1196":{"position":[[283,21]]}},"keywords":{}}],["credentials/wallet_password",{"_index":4915,"title":{},"content":{"879":{"position":[[902,28]]}},"keywords":{}}],["credentials_json",{"_index":3846,"title":{},"content":{"482":{"position":[[253,17]]},"575":{"position":[[251,17]]},"586":{"position":[[215,17]]},"1179":{"position":[[172,17]]},"1180":{"position":[[191,17]]},"1231":{"position":[[173,17]]},"1248":{"position":[[173,17]]}},"keywords":{}}],["credentials_titl",{"_index":4380,"title":{},"content":{"647":{"position":[[116,18]]},"655":{"position":[[122,18]]},"880":{"position":[[245,18]]}},"keywords":{}}],["credentialsjson",{"_index":4288,"title":{},"content":{"601":{"position":[[155,16]]},"1213":{"position":[[129,16]]},"1214":{"position":[[145,16]]},"1220":{"position":[[129,16]]},"1221":{"position":[[149,16]]}},"keywords":{}}],["credit",{"_index":1521,"title":{},"content":{"107":{"position":[[695,6]]},"240":{"position":[[3678,7]]},"280":{"position":[[527,8],[605,8],[1860,6]]},"281":{"position":[[1564,6]]},"940":{"position":[[41,6]]}},"keywords":{}}],["creditrecipi",{"_index":2875,"title":{},"content":{"280":{"position":[[1768,15]]}},"keywords":{}}],["criteria",{"_index":3054,"title":{},"content":{"308":{"position":[[437,8]]},"1009":{"position":[[1113,9],[1130,8],[1148,8]]},"1010":{"position":[[352,9]]},"1479":{"position":[[655,8]]}},"keywords":{}}],["criterion",{"_index":5172,"title":{},"content":{"1009":{"position":[[1463,9]]}},"keywords":{}}],["critic",{"_index":234,"title":{},"content":{"7":{"position":[[261,8]]},"41":{"position":[[140,8]]}},"keywords":{}}],["crlf",{"_index":3630,"title":{},"content":{"419":{"position":[[2540,4]]},"441":{"position":[[1149,4]]},"504":{"position":[[2169,4]]},"547":{"position":[[2542,4]]},"639":{"position":[[2167,4]]},"1023":{"position":[[2523,4]]}},"keywords":{}}],["cross",{"_index":1270,"title":{},"content":{"84":{"position":[[844,5]]},"1140":{"position":[[3670,5]]},"1192":{"position":[[598,5]]},"1209":{"position":[[488,5]]},"1292":{"position":[[1605,5]]},"1306":{"position":[[1605,5]]},"1316":{"position":[[3670,5]]},"1329":{"position":[[1605,5]]},"1340":{"position":[[3670,5]]},"1351":{"position":[[3670,5]]},"1370":{"position":[[690,5]]},"1379":{"position":[[1150,5]]},"1394":{"position":[[782,5]]},"1403":{"position":[[1150,5]]},"1414":{"position":[[1150,5]]},"1431":{"position":[[3693,5]]},"1461":{"position":[[4225,5],[4385,5]]}},"keywords":{}}],["crucial",{"_index":3212,"title":{},"content":{"333":{"position":[[400,7]]},"1439":{"position":[[1211,7]]}},"keywords":{}}],["csv",{"_index":2105,"title":{"441":{"position":[[0,3]]},"1141":{"position":[[0,3]]},"1210":{"position":[[0,3]]}},"content":{"189":{"position":[[120,3],[285,3]]},"192":{"position":[[1607,3]]},"193":{"position":[[64,3]]},"418":{"position":[[173,3]]},"419":{"position":[[1372,3],[1392,3],[2264,3],[2404,3]]},"439":{"position":[[430,3]]},"441":{"position":[[1,3],[873,3],[1013,3]]},"499":{"position":[[421,4]]},"504":{"position":[[1001,3],[1021,3],[1893,3],[2033,3]]},"546":{"position":[[910,3]]},"547":{"position":[[1374,3],[1394,3],[2266,3],[2406,3]]},"562":{"position":[[230,4]]},"634":{"position":[[413,4]]},"638":{"position":[[202,3]]},"639":{"position":[[999,3],[1019,3],[1891,3],[2031,3]]},"1022":{"position":[[239,3]]},"1023":{"position":[[1355,3],[1375,3],[2247,3],[2387,3]]},"1120":{"position":[[639,3],[719,3]]}},"keywords":{}}],["csv:dev",{"_index":5417,"title":{},"content":{"1120":{"position":[[711,7],[789,7]]}},"keywords":{}}],["csv:dev"",{"_index":5726,"title":{},"content":{"1145":{"position":[[107,13]]},"1214":{"position":[[108,13]]}},"keywords":{}}],["csvconfig/delimit",{"_index":5722,"title":{},"content":{"1144":{"position":[[874,20]]},"1213":{"position":[[551,20]]}},"keywords":{}}],["csvconfig/nullstr",{"_index":5723,"title":{},"content":{"1144":{"position":[[1039,21]]},"1213":{"position":[[716,21]]}},"keywords":{}}],["csvconfig/skiphead",{"_index":5724,"title":{},"content":{"1144":{"position":[[1159,22]]},"1213":{"position":[[836,22]]}},"keywords":{}}],["ctrl",{"_index":2087,"title":{},"content":{"183":{"position":[[4426,4]]}},"keywords":{}}],["cube",{"_index":5683,"title":{},"content":{"1140":{"position":[[3708,4]]},"1292":{"position":[[1638,4]]},"1306":{"position":[[1638,4]]},"1316":{"position":[[3708,4]]},"1329":{"position":[[1638,4]]},"1340":{"position":[[3708,4]]},"1351":{"position":[[3708,4]]},"1379":{"position":[[1188,4]]},"1403":{"position":[[1188,4]]},"1414":{"position":[[1188,4]]},"1423":{"position":[[486,4]]},"1431":{"position":[[3731,4]]}},"keywords":{}}],["cumbersom",{"_index":1195,"title":{},"content":{"82":{"position":[[3542,10]]}},"keywords":{}}],["cume_dist",{"_index":5687,"title":{},"content":{"1140":{"position":[[3751,9]]},"1292":{"position":[[1675,9]]},"1306":{"position":[[1675,9]]},"1316":{"position":[[3751,9]]},"1329":{"position":[[1675,9]]},"1340":{"position":[[3751,9]]},"1351":{"position":[[3751,9]]},"1379":{"position":[[1236,9]]},"1403":{"position":[[1236,9]]},"1414":{"position":[[1236,9]]},"1431":{"position":[[3774,9]]}},"keywords":{}}],["cumul",{"_index":3112,"title":{},"content":{"319":{"position":[[1567,10]]}},"keywords":{}}],["curl",{"_index":879,"title":{},"content":{"58":{"position":[[328,4],[504,4]]},"169":{"position":[[569,4],[748,4]]},"486":{"position":[[251,4]]},"635":{"position":[[276,4]]},"658":{"position":[[251,4]]},"674":{"position":[[251,4]]},"689":{"position":[[251,4]]},"943":{"position":[[929,4]]}},"keywords":{}}],["currenc",{"_index":3892,"title":{},"content":{"494":{"position":[[209,9]]},"496":{"position":[[158,8],[181,9],[247,8],[280,8]]}},"keywords":{}}],["current",{"_index":704,"title":{"281":{"position":[[0,7]]}},"content":{"38":{"position":[[468,9]]},"60":{"position":[[433,7],[490,7]]},"63":{"position":[[1144,7]]},"68":{"position":[[1275,9]]},"82":{"position":[[810,7]]},"87":{"position":[[139,7]]},"103":{"position":[[803,7]]},"114":{"position":[[653,7]]},"115":{"position":[[170,7]]},"129":{"position":[[30,7]]},"154":{"position":[[1824,9]]},"161":{"position":[[130,7],[1218,7]]},"165":{"position":[[1382,7],[1497,7]]},"169":{"position":[[1030,9]]},"207":{"position":[[1282,7]]},"237":{"position":[[3036,7]]},"259":{"position":[[448,7],[2142,7]]},"263":{"position":[[15,9]]},"270":{"position":[[843,7]]},"274":{"position":[[1596,7]]},"280":{"position":[[423,7]]},"281":{"position":[[185,7],[326,7],[1788,7],[1877,7]]},"290":{"position":[[1736,9]]},"296":{"position":[[3821,7]]},"301":{"position":[[1710,9]]},"323":{"position":[[1732,9]]},"331":{"position":[[48,7]]},"339":{"position":[[230,9]]},"341":{"position":[[164,9]]},"343":{"position":[[133,9]]},"345":{"position":[[13,7]]},"355":{"position":[[17,9]]},"364":{"position":[[405,9]]},"368":{"position":[[126,7]]},"406":{"position":[[187,9]]},"429":{"position":[[1327,9]]},"603":{"position":[[1,9]]},"755":{"position":[[126,7]]},"760":{"position":[[190,9],[548,9],[685,9]]},"762":{"position":[[140,11]]},"764":{"position":[[739,7]]},"768":{"position":[[126,7]]},"773":{"position":[[190,9],[548,9],[685,9]]},"775":{"position":[[140,11]]},"777":{"position":[[739,7]]},"795":{"position":[[124,7]]},"800":{"position":[[190,9],[548,9],[685,9]]},"802":{"position":[[140,11]]},"804":{"position":[[737,7]]},"810":{"position":[[124,7]]},"815":{"position":[[190,9],[548,9],[685,9]]},"817":{"position":[[140,11]]},"819":{"position":[[737,7]]},"826":{"position":[[124,7]]},"831":{"position":[[190,9],[548,9],[685,9]]},"833":{"position":[[140,11]]},"835":{"position":[[737,7]]},"869":{"position":[[527,9]]},"891":{"position":[[303,7]]},"905":{"position":[[129,7]]},"920":{"position":[[129,7]]},"932":{"position":[[129,7]]},"948":{"position":[[129,7]]},"966":{"position":[[129,7]]},"1077":{"position":[[731,7]]},"1085":{"position":[[962,7]]},"1140":{"position":[[3795,7]]},"1146":{"position":[[542,7]]},"1162":{"position":[[1030,9]]},"1164":{"position":[[761,9]]},"1173":{"position":[[554,7]]},"1215":{"position":[[542,7]]},"1223":{"position":[[554,7]]},"1282":{"position":[[273,9]]},"1288":{"position":[[247,9]]},"1292":{"position":[[1712,7]]},"1306":{"position":[[1712,7]]},"1310":{"position":[[288,9]]},"1316":{"position":[[3795,7]]},"1329":{"position":[[1712,7]]},"1340":{"position":[[3795,7]]},"1351":{"position":[[3795,7]]},"1370":{"position":[[706,7]]},"1379":{"position":[[1287,7]]},"1394":{"position":[[799,7]]},"1403":{"position":[[1287,7]]},"1414":{"position":[[1287,7]]},"1431":{"position":[[3818,7]]},"1440":{"position":[[1171,7]]},"1443":{"position":[[469,7]]},"1444":{"position":[[427,7]]},"1447":{"position":[[607,7]]},"1448":{"position":[[194,7]]},"1471":{"position":[[400,9]]},"1476":{"position":[[985,7]]},"1477":{"position":[[1465,11],[3631,11]]}},"keywords":{}}],["current_bal",{"_index":2872,"title":{},"content":{"280":{"position":[[1515,16],[2063,16]]}},"keywords":{}}],["current_cat",{"_index":6308,"title":{},"content":{"1379":{"position":[[1338,13]]},"1403":{"position":[[1338,13]]},"1414":{"position":[[1338,13]]}},"keywords":{}}],["current_catalog",{"_index":5692,"title":{},"content":{"1140":{"position":[[3831,15]]},"1316":{"position":[[3831,15]]},"1340":{"position":[[3831,15]]},"1351":{"position":[[3831,15]]},"1423":{"position":[[504,15]]},"1431":{"position":[[3854,15]]}},"keywords":{}}],["current_d",{"_index":5694,"title":{},"content":{"1140":{"position":[[3880,12]]},"1209":{"position":[[507,12]]},"1292":{"position":[[1743,12]]},"1306":{"position":[[1743,12]]},"1316":{"position":[[3880,12]]},"1329":{"position":[[1743,12]]},"1340":{"position":[[3880,12]]},"1351":{"position":[[3880,12]]},"1370":{"position":[[719,12]]},"1379":{"position":[[1395,12]]},"1394":{"position":[[820,12]]},"1403":{"position":[[1395,12]]},"1414":{"position":[[1395,12]]},"1423":{"position":[[535,12]]},"1431":{"position":[[3903,12]]}},"keywords":{}}],["current_defau",{"_index":6309,"title":{},"content":{"1379":{"position":[[1450,13]]},"1403":{"position":[[1450,13]]},"1414":{"position":[[1450,13]]}},"keywords":{}}],["current_default_transform_group",{"_index":5697,"title":{},"content":{"1140":{"position":[[3922,31]]},"1316":{"position":[[3922,31]]},"1340":{"position":[[3922,31]]},"1351":{"position":[[3922,31]]},"1431":{"position":[[3945,31]]}},"keywords":{}}],["current_path",{"_index":5699,"title":{},"content":{"1140":{"position":[[3975,12]]},"1316":{"position":[[3975,12]]},"1340":{"position":[[3975,12]]},"1351":{"position":[[3975,12]]},"1379":{"position":[[1511,12]]},"1403":{"position":[[1511,12]]},"1414":{"position":[[1511,12]]},"1423":{"position":[[558,12]]},"1431":{"position":[[3998,12]]}},"keywords":{}}],["current_rol",{"_index":5701,"title":{},"content":{"1140":{"position":[[4011,12]]},"1316":{"position":[[4011,12]]},"1340":{"position":[[4011,12]]},"1351":{"position":[[4011,12]]},"1379":{"position":[[1557,12]]},"1403":{"position":[[1557,12]]},"1414":{"position":[[1557,12]]},"1423":{"position":[[579,12]]},"1431":{"position":[[4034,12]]}},"keywords":{}}],["current_row",{"_index":5703,"title":{},"content":{"1140":{"position":[[4059,11]]},"1316":{"position":[[4059,11]]},"1340":{"position":[[4059,11]]},"1351":{"position":[[4059,11]]},"1431":{"position":[[4082,11]]}},"keywords":{}}],["current_schem",{"_index":6312,"title":{},"content":{"1379":{"position":[[1609,13]]},"1403":{"position":[[1609,13]]},"1414":{"position":[[1609,13]]}},"keywords":{}}],["current_schema",{"_index":5707,"title":{},"content":{"1140":{"position":[[4104,14]]},"1316":{"position":[[4104,14]]},"1340":{"position":[[4104,14]]},"1351":{"position":[[4104,14]]},"1423":{"position":[[605,14]]},"1431":{"position":[[4127,14]]}},"keywords":{}}],["current_tim",{"_index":5709,"title":{},"content":{"1140":{"position":[[4146,12]]},"1292":{"position":[[1782,12],[1827,13]]},"1306":{"position":[[1782,12],[1827,13]]},"1316":{"position":[[4146,12]]},"1329":{"position":[[1782,12],[1827,13]]},"1340":{"position":[[4146,12]]},"1351":{"position":[[4146,12]]},"1370":{"position":[[739,12]]},"1379":{"position":[[1661,12],[1716,13]]},"1394":{"position":[[843,12]]},"1403":{"position":[[1661,12],[1716,13]]},"1414":{"position":[[1661,12],[1716,13]]},"1423":{"position":[[637,12]]},"1431":{"position":[[4169,12]]}},"keywords":{}}],["current_timestamp",{"_index":5712,"title":{},"content":{"1140":{"position":[[4193,17]]},"1209":{"position":[[535,17]]},"1316":{"position":[[4193,17]]},"1340":{"position":[[4193,17]]},"1351":{"position":[[4193,17]]},"1370":{"position":[[762,17]]},"1394":{"position":[[875,17]]},"1423":{"position":[[669,17]]},"1431":{"position":[[4216,17]]}},"keywords":{}}],["current_tran",{"_index":6314,"title":{},"content":{"1379":{"position":[[1782,13]]},"1403":{"position":[[1782,13]]},"1414":{"position":[[1782,13]]}},"keywords":{}}],["current_transform_group_for_typ",{"_index":5522,"title":{},"content":{"1140":{"position":[[369,32]]},"1316":{"position":[[369,32]]},"1340":{"position":[[369,32]]},"1351":{"position":[[369,32]]},"1431":{"position":[[392,32]]}},"keywords":{}}],["current_us",{"_index":5524,"title":{},"content":{"1140":{"position":[[440,12]]},"1292":{"position":[[1870,12]]},"1306":{"position":[[1870,12]]},"1316":{"position":[[440,12]]},"1329":{"position":[[1870,12]]},"1340":{"position":[[440,12]]},"1351":{"position":[[440,12]]},"1379":{"position":[[1846,12]]},"1394":{"position":[[914,12]]},"1403":{"position":[[1846,12]]},"1414":{"position":[[1846,12]]},"1423":{"position":[[705,12]]},"1431":{"position":[[463,12]]}},"keywords":{}}],["cursor",{"_index":3395,"title":{"480":{"position":[[11,6]]}},"content":{"366":{"position":[[157,8]]},"402":{"position":[[778,6]]},"403":{"position":[[443,6]]},"406":{"position":[[119,6]]},"479":{"position":[[669,6]]},"480":{"position":[[330,6],[351,6],[505,7],[950,6],[1154,6],[1206,6],[1316,7],[1417,6],[1591,6]]},"482":{"position":[[611,7],[619,6],[693,6]]},"483":{"position":[[139,6],[176,6],[265,6]]},"821":{"position":[[1056,6],[1161,6],[1221,7]]},"842":{"position":[[2108,6],[2244,6]]},"903":{"position":[[183,8]]},"912":{"position":[[1170,6]]},"915":{"position":[[183,8]]},"922":{"position":[[269,6]]},"930":{"position":[[183,8]]},"963":{"position":[[337,8]]},"1009":{"position":[[1573,6],[1602,6]]},"1133":{"position":[[1386,6],[1417,6]]},"1140":{"position":[[479,6]]},"1292":{"position":[[1910,6]]},"1306":{"position":[[1910,6]]},"1316":{"position":[[479,6]]},"1329":{"position":[[1910,6]]},"1340":{"position":[[479,6]]},"1351":{"position":[[479,6]]},"1379":{"position":[[1909,6]]},"1403":{"position":[[1909,6]]},"1414":{"position":[[1909,6]]},"1431":{"position":[[502,6]]}},"keywords":{}}],["cursor_field",{"_index":3544,"title":{},"content":{"402":{"position":[[751,13]]},"403":{"position":[[429,13]]},"843":{"position":[[373,14]]}},"keywords":{}}],["cursor_nam",{"_index":6028,"title":{},"content":{"1292":{"position":[[1939,11]]},"1306":{"position":[[1939,11]]},"1329":{"position":[[1939,11]]}},"keywords":{}}],["cursorfield",{"_index":5175,"title":{},"content":{"1010":{"position":[[432,12],[542,12]]},"1133":{"position":[[1374,11]]},"1134":{"position":[[524,12],[799,12],[909,12],[1009,12],[1116,12],[1241,12],[1357,12],[1737,12],[2096,12],[2211,12],[2326,12],[2438,12],[2551,12],[2672,12],[2784,12],[2890,12],[2992,12]]}},"keywords":{}}],["cursornam",{"_index":3836,"title":{},"content":{"480":{"position":[[1034,11]]}},"keywords":{}}],["cursornameand",{"_index":3838,"title":{},"content":{"480":{"position":[[1077,14]]}},"keywords":{}}],["custom",{"_index":632,"title":{"226":{"position":[[0,9]]},"552":{"position":[[0,8],[20,8]]},"558":{"position":[[0,6]]},"574":{"position":[[0,6]]},"585":{"position":[[0,6]]},"606":{"position":[[0,6]]},"661":{"position":[[0,6]]}},"content":{"27":{"position":[[460,9]]},"43":{"position":[[80,10]]},"63":{"position":[[829,9]]},"81":{"position":[[2078,9]]},"96":{"position":[[215,10]]},"107":{"position":[[1646,8]]},"122":{"position":[[1936,9],[2125,14]]},"123":{"position":[[192,10],[289,9],[351,8],[728,9],[759,9]]},"279":{"position":[[77,6]]},"294":{"position":[[151,9]]},"295":{"position":[[121,10],[236,9],[725,8],[797,9],[827,9],[888,9]]},"296":{"position":[[385,8],[1356,8],[2457,9],[4583,8],[7733,8],[7855,9],[7960,9],[8064,9]]},"319":{"position":[[1598,9]]},"455":{"position":[[273,9]]},"483":{"position":[[816,6]]},"517":{"position":[[179,6],[787,6]]},"518":{"position":[[308,6]]},"550":{"position":[[520,6]]},"552":{"position":[[11,8],[277,8],[585,8],[632,8]]},"553":{"position":[[54,8],[248,8]]},"554":{"position":[[54,8]]},"556":{"position":[[1022,6],[1083,6],[1098,6],[1384,8],[1432,8],[1451,8],[1816,8],[1882,8],[1975,8]]},"558":{"position":[[16,6]]},"568":{"position":[[331,6]]},"573":{"position":[[599,6],[653,6]]},"574":{"position":[[61,6],[114,6],[190,6],[457,6],[519,6]]},"580":{"position":[[271,6]]},"584":{"position":[[521,6],[575,6],[647,6]]},"585":{"position":[[61,6],[114,6],[180,6]]},"606":{"position":[[56,6],[376,6]]},"611":{"position":[[657,6],[711,6]]},"642":{"position":[[193,6]]},"657":{"position":[[596,9]]},"661":{"position":[[166,9]]},"709":{"position":[[179,6]]},"739":{"position":[[131,6]]},"839":{"position":[[124,6],[217,6],[259,6]]},"840":{"position":[[1452,6],[1549,9]]},"846":{"position":[[126,7]]},"847":{"position":[[1,6],[276,6]]},"848":{"position":[[124,6],[254,6],[296,6]]},"849":{"position":[[1953,6],[2343,6],[2440,9],[2528,6]]},"989":{"position":[[333,6]]},"1000":{"position":[[437,6]]},"1004":{"position":[[416,6]]},"1032":{"position":[[240,9]]},"1078":{"position":[[892,9]]},"1089":{"position":[[149,6],[272,8],[289,8]]},"1091":{"position":[[36,8],[53,8]]},"1094":{"position":[[74,8],[87,8],[161,8],[177,8]]},"1144":{"position":[[706,6]]},"1157":{"position":[[311,11]]},"1170":{"position":[[706,6]]},"1195":{"position":[[603,9]]},"1285":{"position":[[1065,6],[1193,6],[1305,6]]},"1300":{"position":[[1065,6],[1193,6],[1305,6]]},"1324":{"position":[[1065,6],[1193,6],[1305,6]]},"1461":{"position":[[1211,9],[4652,9],[4744,8]]},"1462":{"position":[[418,10],[515,9],[657,8]]},"1465":{"position":[[352,6]]}},"keywords":{}}],["custom_insight",{"_index":3945,"title":{},"content":{"517":{"position":[[770,16],[934,17],[1042,17],[1182,17],[1269,17],[1396,17],[1690,17],[1767,17],[1885,17],[1945,17],[2095,17]]},"518":{"position":[[280,16]]}},"keywords":{}}],["custom_queri",{"_index":4117,"title":{},"content":{"556":{"position":[[1006,15],[1059,16],[1250,16]]},"557":{"position":[[455,15]]}},"keywords":{}}],["custom_report",{"_index":4155,"title":{},"content":{"573":{"position":[[583,15]]},"584":{"position":[[505,15]]},"611":{"position":[[641,15]]}},"keywords":{}}],["custom_rol",{"_index":5473,"title":{},"content":{"1134":{"position":[[673,12]]}},"keywords":{}}],["customari",{"_index":2624,"title":{},"content":{"242":{"position":[[25,9]]}},"keywords":{}}],["customer1",{"_index":4108,"title":{},"content":{"552":{"position":[[736,9]]}},"keywords":{}}],["customer1@email.com",{"_index":2935,"title":{},"content":{"295":{"position":[[294,19]]}},"keywords":{}}],["customer2",{"_index":4109,"title":{},"content":{"552":{"position":[[759,9]]}},"keywords":{}}],["customer2@email.com",{"_index":2942,"title":{},"content":{"295":{"position":[[340,19]]}},"keywords":{}}],["customer3@email.com",{"_index":2949,"title":{},"content":{"295":{"position":[[388,19]]}},"keywords":{}}],["customer_balance_transact",{"_index":5310,"title":{},"content":{"1078":{"position":[[773,29]]}},"keywords":{}}],["customer_id",{"_index":1537,"title":{},"content":{"107":{"position":[[1516,13],[2775,13]]},"295":{"position":[[261,11],[462,11],[642,12]]},"296":{"position":[[431,12],[621,11],[664,12],[833,12],[934,12],[1402,12],[1592,11],[1635,12],[2834,12],[2935,12],[4609,12],[4795,13],[4997,13],[6204,12],[6358,12]]},"552":{"position":[[542,11],[692,11],[783,11]]},"556":{"position":[[1371,12]]},"557":{"position":[[345,12]]}},"keywords":{}}],["customer_secret",{"_index":5358,"title":{},"content":{"1094":{"position":[[144,16]]}},"keywords":{}}],["customers/flow.yaml",{"_index":6607,"title":{},"content":{"1461":{"position":[[1980,19],[3536,19],[3738,19]]}},"keywords":{}}],["customers/sheet1",{"_index":2998,"title":{},"content":{"296":{"position":[[901,16],[2902,16]]}},"keywords":{}}],["customers_with_ord",{"_index":3001,"title":{},"content":{"296":{"position":[[1864,21],[4474,22]]}},"keywords":{}}],["customers_with_orders.t",{"_index":3007,"title":{},"content":{"296":{"position":[[3970,24]]}},"keywords":{}}],["customersdiscountsdisputestransactionsmerch",{"_index":3753,"title":{},"content":{"451":{"position":[[73,46]]}},"keywords":{}}],["cycl",{"_index":5528,"title":{},"content":{"1140":{"position":[[520,5]]},"1316":{"position":[[520,5]]},"1340":{"position":[[520,5]]},"1351":{"position":[[520,5]]},"1379":{"position":[[1954,5]]},"1403":{"position":[[1954,5]]},"1414":{"position":[[1954,5]]},"1431":{"position":[[543,5]]}},"keywords":{}}],["cyclic",{"_index":1492,"title":{},"content":{"105":{"position":[[821,6]]}},"keywords":{}}],["d",{"_index":95,"title":{},"content":{"2":{"position":[[675,2]]},"61":{"position":[[1207,1],[1244,1]]},"105":{"position":[[1451,1],[1473,1],[1494,1]]},"210":{"position":[[1203,3]]},"236":{"position":[[971,1]]},"237":{"position":[[3063,1]]},"238":{"position":[[910,1],[1004,2]]},"943":{"position":[[1159,1]]}},"keywords":{}}],["d+(s|m|h",{"_index":1356,"title":{},"content":{"94":{"position":[[2715,13]]}},"keywords":{}}],["d494a2c6",{"_index":3724,"title":{},"content":{"439":{"position":[[326,8]]}},"keywords":{}}],["d[deriv",{"_index":1498,"title":{},"content":{"105":{"position":[[1341,14]]}},"keywords":{}}],["d[local",{"_index":931,"title":{},"content":{"61":{"position":[[1166,7]]}},"keywords":{}}],["daemon",{"_index":2575,"title":{},"content":{"237":{"position":[[3097,10]]}},"keywords":{}}],["dag",{"_index":2868,"title":{},"content":{"280":{"position":[[919,6]]}},"keywords":{}}],["daili",{"_index":3729,"title":{},"content":{"443":{"position":[[91,6],[181,6],[259,6],[371,6],[452,6]]},"580":{"position":[[46,5]]},"1080":{"position":[[160,5],[244,5],[330,5],[418,5],[526,5],[637,5],[700,5],[797,5]]},"1087":{"position":[[188,6],[247,5]]}},"keywords":{}}],["daily_active_us",{"_index":4201,"title":{},"content":{"575":{"position":[[332,18]]},"586":{"position":[[354,18]]}},"keywords":{}}],["dailychangesbyus",{"_index":2076,"title":{},"content":{"183":{"position":[[2459,18],[3876,18]]}},"keywords":{}}],["danger",{"_index":4621,"title":{},"content":{"757":{"position":[[1750,12],[1847,6]]},"764":{"position":[[159,11]]},"770":{"position":[[1750,12],[1847,6]]},"777":{"position":[[159,11]]},"797":{"position":[[1750,12],[1847,6]]},"804":{"position":[[157,11]]},"812":{"position":[[1750,12],[1847,6]]},"819":{"position":[[157,11]]},"828":{"position":[[1750,12],[1847,6]]},"835":{"position":[[157,11]]}},"keywords":{}}],["dani",{"_index":3006,"title":{},"content":{"296":{"position":[[3928,4]]},"315":{"position":[[385,4]]}},"keywords":{}}],["dani/deriv",{"_index":2768,"title":{},"content":{"254":{"position":[[249,15]]},"255":{"position":[[189,15]]},"314":{"position":[[249,15],[632,15]]},"315":{"position":[[964,15],[1474,15]]},"316":{"position":[[191,15]]}},"keywords":{}}],["dani/join",{"_index":2993,"title":{},"content":{"296":{"position":[[245,9],[781,9],[882,9],[1216,9],[2782,9],[2883,9],[5384,9],[6036,9]]}},"keywords":{}}],["dark",{"_index":1792,"title":{},"content":{"138":{"position":[[1584,4]]},"141":{"position":[[1155,4],[1589,4]]},"142":{"position":[[1601,4]]},"210":{"position":[[2260,4]]},"947":{"position":[[445,8],[762,8]]}},"keywords":{}}],["dash",{"_index":4121,"title":{},"content":{"556":{"position":[[1510,7],[2035,8]]}},"keywords":{}}],["dashboard",{"_index":2229,"title":{},"content":{"204":{"position":[[938,9]]},"205":{"position":[[8,10]]},"239":{"position":[[91,9]]},"253":{"position":[[302,10]]},"295":{"position":[[1061,9]]},"296":{"position":[[6903,9]]},"313":{"position":[[302,10]]},"464":{"position":[[137,9],[241,9]]},"515":{"position":[[504,10]]},"552":{"position":[[135,9],[411,9]]},"942":{"position":[[473,10]]},"947":{"position":[[335,9]]},"964":{"position":[[419,9],[798,10]]},"1118":{"position":[[522,10]]}},"keywords":{}}],["dashboard)schema",{"_index":2641,"title":{},"content":{"247":{"position":[[310,16]]}},"keywords":{}}],["dashboard.estuary.dev",{"_index":645,"title":{},"content":{"30":{"position":[[118,22]]},"190":{"position":[[27,21]]},"217":{"position":[[213,21]]},"290":{"position":[[190,21]]},"301":{"position":[[143,21]]}},"keywords":{}}],["dashboard.in",{"_index":5409,"title":{},"content":{"1118":{"position":[[210,12]]}},"keywords":{}}],["dashboard.navig",{"_index":2642,"title":{},"content":{"249":{"position":[[29,18]]}},"keywords":{}}],["data",{"_index":195,"title":{"23":{"position":[[0,4]]},"61":{"position":[[8,4]]},"182":{"position":[[21,5]]},"183":{"position":[[30,5]]},"190":{"position":[[18,4]]},"214":{"position":[[15,4]]},"251":{"position":[[17,4]]},"258":{"position":[[5,4]]},"286":{"position":[[16,4]]},"309":{"position":[[10,4]]},"311":{"position":[[17,4]]},"332":{"position":[[0,4]]},"373":{"position":[[31,5]]},"374":{"position":[[10,4]]},"381":{"position":[[10,4]]},"385":{"position":[[10,4]]},"411":{"position":[[0,4]]},"419":{"position":[[32,5]]},"421":{"position":[[10,4]]},"427":{"position":[[10,4]]},"440":{"position":[[32,5]]},"443":{"position":[[10,4]]},"451":{"position":[[10,4]]},"457":{"position":[[10,4]]},"463":{"position":[[10,4]]},"469":{"position":[[10,4]]},"486":{"position":[[12,4]]},"499":{"position":[[10,4]]},"506":{"position":[[10,4]]},"512":{"position":[[10,4]]},"520":{"position":[[10,4]]},"529":{"position":[[10,4]]},"537":{"position":[[10,4]]},"547":{"position":[[32,5]]},"550":{"position":[[10,4]]},"568":{"position":[[10,4]]},"577":{"position":[[0,4]]},"580":{"position":[[10,4]]},"588":{"position":[[0,4]]},"590":{"position":[[0,4]]},"605":{"position":[[10,4]]},"622":{"position":[[10,4]]},"628":{"position":[[10,4]]},"634":{"position":[[10,4]]},"639":{"position":[[30,5]]},"649":{"position":[[10,4]]},"658":{"position":[[12,4]]},"667":{"position":[[10,4]]},"674":{"position":[[12,4]]},"682":{"position":[[10,4]]},"689":{"position":[[12,4]]},"697":{"position":[[10,4]]},"703":{"position":[[10,4]]},"709":{"position":[[10,4]]},"715":{"position":[[10,4]]},"738":{"position":[[10,4]]},"744":{"position":[[10,4]]},"761":{"position":[[0,4]]},"774":{"position":[[0,4]]},"779":{"position":[[0,4]]},"801":{"position":[[0,4]]},"816":{"position":[[0,4]]},"832":{"position":[[0,4]]},"838":{"position":[[10,4]]},"854":{"position":[[10,4]]},"882":{"position":[[10,4]]},"888":{"position":[[10,4]]},"956":{"position":[[10,4]]},"975":{"position":[[22,5]]},"976":{"position":[[21,5]]},"979":{"position":[[10,4]]},"984":{"position":[[23,4]]},"985":{"position":[[10,4]]},"994":{"position":[[10,4]]},"999":{"position":[[24,4]]},"1000":{"position":[[10,4]]},"1008":{"position":[[28,5]]},"1012":{"position":[[10,4]]},"1025":{"position":[[10,4]]},"1065":{"position":[[10,4]]},"1073":{"position":[[10,4]]},"1080":{"position":[[10,4]]},"1099":{"position":[[10,4]]},"1104":{"position":[[10,4]]},"1110":{"position":[[10,4]]},"1128":{"position":[[10,4]]},"1172":{"position":[[8,4]]},"1222":{"position":[[8,4]]},"1250":{"position":[[0,4]]},"1393":{"position":[[10,4]]},"1451":{"position":[[34,4]]},"1455":{"position":[[0,4]]}},"content":{"4":{"position":[[806,4]]},"6":{"position":[[376,4],[635,4]]},"8":{"position":[[181,4],[461,4],[587,4],[650,4],[725,4]]},"11":{"position":[[115,4],[162,4],[234,4],[277,4],[297,4],[594,4],[747,4],[794,4],[1085,4],[1220,4],[1593,5],[1608,4]]},"12":{"position":[[243,4]]},"13":{"position":[[180,4],[484,4],[747,4]]},"20":{"position":[[830,4],[860,4]]},"21":{"position":[[569,4],[644,5]]},"23":{"position":[[63,4],[89,4]]},"26":{"position":[[182,4],[604,4]]},"30":{"position":[[87,4],[268,4]]},"31":{"position":[[136,4],[213,4]]},"32":{"position":[[132,4],[207,4],[276,4],[327,4],[496,4]]},"33":{"position":[[61,4],[425,4]]},"34":{"position":[[185,4],[215,4],[342,4],[411,4],[677,4],[851,4]]},"35":{"position":[[39,4]]},"36":{"position":[[46,4]]},"37":{"position":[[59,4],[119,5],[138,4]]},"38":{"position":[[77,4],[412,4]]},"41":{"position":[[191,5],[246,4],[317,4]]},"42":{"position":[[562,4]]},"43":{"position":[[40,4]]},"44":{"position":[[140,4],[289,4]]},"45":{"position":[[44,4]]},"46":{"position":[[71,5]]},"50":{"position":[[218,4]]},"52":{"position":[[18,4],[170,4]]},"54":{"position":[[329,4],[419,4]]},"56":{"position":[[1386,4]]},"60":{"position":[[498,4],[729,4]]},"61":{"position":[[80,4]]},"63":{"position":[[778,4]]},"64":{"position":[[184,4],[339,4]]},"66":{"position":[[27,4],[220,4],[299,4],[660,5]]},"67":{"position":[[1634,4]]},"68":{"position":[[59,4],[241,4],[962,4],[1073,5],[1126,4],[1816,4]]},"70":{"position":[[157,4]]},"74":{"position":[[260,4]]},"77":{"position":[[27,4],[360,4]]},"79":{"position":[[29,4]]},"80":{"position":[[287,4],[503,4]]},"84":{"position":[[15,4]]},"102":{"position":[[647,4]]},"105":{"position":[[828,4]]},"107":{"position":[[122,4]]},"111":{"position":[[309,4]]},"117":{"position":[[27,5],[294,5],[471,4],[544,4]]},"119":{"position":[[425,4]]},"121":{"position":[[2062,4]]},"125":{"position":[[103,4],[1088,4]]},"135":{"position":[[124,4],[261,4],[283,4],[439,4],[482,4],[669,4]]},"137":{"position":[[263,4],[494,4]]},"138":{"position":[[354,5],[1213,4],[1878,4],[1929,4],[1975,5],[2368,5]]},"140":{"position":[[202,4]]},"141":{"position":[[319,5],[366,4],[664,5],[1296,4],[1861,4],[1907,5]]},"142":{"position":[[467,5],[1190,4],[1924,4],[1985,4],[2028,5],[2438,5]]},"145":{"position":[[116,4]]},"146":{"position":[[107,5],[527,5],[617,4],[731,4],[828,4]]},"148":{"position":[[125,4],[170,5]]},"149":{"position":[[110,5],[590,4],[704,4],[801,4],[1144,4]]},"151":{"position":[[123,4]]},"152":{"position":[[120,5],[593,4],[707,4],[804,4]]},"154":{"position":[[1621,4]]},"156":{"position":[[324,4],[700,4],[727,4],[798,4]]},"157":{"position":[[16,4],[313,5]]},"162":{"position":[[64,4],[121,4],[216,4],[297,4],[406,4],[484,4],[625,4],[1430,4],[1577,4],[1965,4]]},"163":{"position":[[564,4],[1166,4]]},"165":{"position":[[112,4],[380,4],[448,4],[550,4],[2051,4]]},"168":{"position":[[211,5],[217,4]]},"169":{"position":[[92,4]]},"170":{"position":[[91,5]]},"173":{"position":[[781,4],[909,4]]},"174":{"position":[[291,4]]},"176":{"position":[[71,4],[121,4]]},"177":{"position":[[108,5],[215,4]]},"180":{"position":[[143,4],[460,4],[812,4]]},"182":{"position":[[735,4]]},"183":{"position":[[221,5],[2857,4],[3326,4]]},"189":{"position":[[5,5],[112,4],[234,4],[497,4],[520,4],[569,4],[618,5],[729,4],[769,4],[859,4],[927,4],[949,4],[1000,4],[1048,4],[1076,4],[1198,4],[1225,4],[1266,4],[1347,4]]},"190":{"position":[[175,4],[1211,4],[1447,4],[1666,4],[2033,4],[2143,4]]},"192":{"position":[[125,4],[1444,4],[1539,4],[1767,4]]},"193":{"position":[[27,4],[179,5],[299,4],[352,4],[559,4],[740,4]]},"196":{"position":[[16,4],[84,4],[234,4],[389,4],[468,4],[505,4],[620,4]]},"197":{"position":[[89,5],[256,4],[386,4],[512,4],[753,4]]},"198":{"position":[[206,4],[372,4],[541,4],[566,4],[802,4]]},"202":{"position":[[94,5],[222,5],[353,4]]},"203":{"position":[[208,4]]},"205":{"position":[[355,4]]},"206":{"position":[[793,4]]},"207":{"position":[[80,4],[175,4],[463,5],[594,4]]},"208":{"position":[[453,4],[469,4]]},"209":{"position":[[777,4],[879,4],[1048,4],[1528,4],[1566,4]]},"210":{"position":[[2049,5],[2231,4],[2466,4],[2906,4]]},"211":{"position":[[47,4],[193,4],[393,4],[567,4],[648,4],[706,4]]},"212":{"position":[[75,4]]},"213":{"position":[[155,4],[210,4],[304,4],[500,5]]},"216":{"position":[[29,4],[51,4],[102,4],[150,4],[178,4],[248,4],[271,4],[311,4],[479,4],[608,4]]},"217":{"position":[[50,4],[407,4],[1065,4],[1103,4]]},"218":{"position":[[26,4],[134,4],[815,4],[869,4],[1343,4],[1378,4],[1553,4],[1742,4],[1949,4],[2145,4]]},"219":{"position":[[37,4],[191,4],[574,4],[604,4]]},"228":{"position":[[820,4]]},"229":{"position":[[514,4]]},"232":{"position":[[381,4],[468,5],[526,4],[564,4],[772,4],[821,4]]},"233":{"position":[[16,4],[84,4],[241,4],[396,4],[475,4],[512,4],[619,5],[805,4]]},"234":{"position":[[193,4],[483,4]]},"236":{"position":[[427,4],[1945,5],[2107,4],[2706,4],[2841,5]]},"237":{"position":[[158,4],[447,4],[772,4],[1136,4],[1463,4],[2641,4],[2951,4]]},"238":{"position":[[746,4],[1412,4]]},"239":{"position":[[210,4],[246,4],[574,4],[679,4],[778,4],[904,5],[1035,4],[1459,5],[2107,4],[2685,4]]},"240":{"position":[[3191,4],[3314,5],[3459,5],[3489,4],[3843,4],[4392,4],[4422,4],[4601,4]]},"241":{"position":[[239,4],[423,4],[517,4]]},"243":{"position":[[75,4],[101,4]]},"253":{"position":[[841,5],[1138,4]]},"254":{"position":[[1085,4]]},"256":{"position":[[86,4]]},"259":{"position":[[1039,4],[1210,4],[1537,4],[2620,4],[2791,4],[3091,4]]},"266":{"position":[[264,4]]},"274":{"position":[[169,4]]},"280":{"position":[[82,4],[827,4],[881,4],[958,4]]},"286":{"position":[[16,4],[146,4],[282,4],[321,4]]},"288":{"position":[[236,4]]},"289":{"position":[[29,4],[52,4],[224,4],[283,4],[335,4]]},"290":{"position":[[1731,4]]},"291":{"position":[[70,4],[100,4],[1336,4],[1367,4],[1675,4],[1955,4]]},"292":{"position":[[6,4],[195,4],[255,4]]},"295":{"position":[[5,4],[1324,4],[1394,4]]},"296":{"position":[[3387,4],[7778,4]]},"299":{"position":[[228,4]]},"300":{"position":[[29,4],[52,4],[203,4],[262,4],[314,4],[368,4],[427,4]]},"301":{"position":[[1057,4],[1483,4],[1705,4]]},"302":{"position":[[70,4],[100,4],[1261,4],[1297,4],[1584,4],[1867,4]]},"303":{"position":[[6,4],[186,4],[246,4]]},"305":{"position":[[51,4],[133,5],[259,4],[287,4],[533,5]]},"306":{"position":[[311,4],[484,5]]},"307":{"position":[[972,4],[3151,4]]},"309":{"position":[[75,4],[388,4],[567,4],[713,4],[818,4],[2051,4]]},"313":{"position":[[841,5],[1138,4]]},"314":{"position":[[806,4]]},"317":{"position":[[93,4]]},"319":{"position":[[536,4],[693,4],[993,4],[1271,5]]},"320":{"position":[[203,5],[989,4],[1290,4]]},"321":{"position":[[601,4],[933,4],[1060,5],[1322,4],[1465,4],[1478,4],[2125,4],[2164,4],[2369,4]]},"322":{"position":[[314,5],[708,4],[1084,5],[1261,4],[1392,4],[1488,4],[1533,4],[1694,4],[1748,4]]},"323":{"position":[[59,4],[348,4],[381,4],[614,4],[691,4],[757,5],[961,5],[1085,5]]},"324":{"position":[[28,4],[69,4],[244,5],[568,4],[764,4],[856,5],[1247,4]]},"325":{"position":[[85,5],[557,4],[593,4],[684,4]]},"326":{"position":[[316,4],[549,4],[1305,5],[1395,4],[1445,4],[1578,4],[1641,4],[1746,4]]},"329":{"position":[[108,4],[553,4],[817,4],[967,4]]},"330":{"position":[[185,4],[516,4]]},"331":{"position":[[299,4]]},"332":{"position":[[41,4],[270,4],[797,4]]},"333":{"position":[[360,4]]},"337":{"position":[[459,4]]},"363":{"position":[[135,4],[2002,5]]},"364":{"position":[[116,4],[351,4],[1518,4],[3015,5]]},"366":{"position":[[861,4]]},"373":{"position":[[19,4],[121,4],[158,4],[187,5],[211,4],[252,4],[455,4],[709,4],[834,4],[942,5],[990,4],[1077,5]]},"374":{"position":[[239,4],[384,4]]},"375":{"position":[[82,4],[169,4]]},"377":{"position":[[215,4],[249,4],[282,4],[292,4],[451,4],[594,4],[1116,4],[1329,4]]},"379":{"position":[[11,4],[114,4],[322,4],[452,4],[501,4],[592,4]]},"381":{"position":[[15,4]]},"383":{"position":[[105,5]]},"385":{"position":[[108,5],[177,5],[668,4]]},"387":{"position":[[825,4],[873,4],[1047,5]]},"390":{"position":[[126,4],[536,4]]},"402":{"position":[[248,4]]},"413":{"position":[[39,4]]},"417":{"position":[[467,4],[1960,4]]},"419":{"position":[[86,4],[167,4],[303,4],[872,4],[1115,4],[1343,4],[2435,4]]},"421":{"position":[[15,4]]},"424":{"position":[[266,4]]},"427":{"position":[[58,5],[87,4],[309,4]]},"438":{"position":[[467,4]]},"440":{"position":[[102,4],[183,4],[319,4],[888,4],[1131,4],[1359,4]]},"441":{"position":[[1044,4]]},"443":{"position":[[15,4]]},"448":{"position":[[883,5],[893,4]]},"451":{"position":[[15,4]]},"454":{"position":[[117,4],[456,4]]},"457":{"position":[[15,4]]},"460":{"position":[[270,4]]},"463":{"position":[[15,4]]},"469":{"position":[[115,4]]},"475":{"position":[[197,4]]},"477":{"position":[[9,4],[126,4],[1062,4]]},"480":{"position":[[1562,4]]},"485":{"position":[[96,4],[327,4],[510,4]]},"486":{"position":[[273,4],[314,5],[447,4]]},"487":{"position":[[434,4],[492,4]]},"488":{"position":[[249,4],[356,5]]},"489":{"position":[[829,4]]},"491":{"position":[[266,4]]},"496":{"position":[[462,4],[585,4],[622,5]]},"497":{"position":[[398,4]]},"499":{"position":[[43,4]]},"502":{"position":[[927,4]]},"504":{"position":[[104,4],[240,4],[626,4],[804,4],[2064,4]]},"506":{"position":[[15,4]]},"509":{"position":[[394,4],[477,4]]},"512":{"position":[[15,4]]},"513":{"position":[[65,4]]},"517":{"position":[[52,4],[119,4],[269,4],[685,4],[1478,4],[1540,4],[1677,5],[2030,4],[2659,5],[2705,4],[2838,5],[3041,4],[3820,5],[3866,4]]},"520":{"position":[[101,5],[143,4]]},"522":{"position":[[63,4]]},"529":{"position":[[120,5],[162,4]]},"530":{"position":[[63,4]]},"534":{"position":[[958,5],[1448,4],[1557,4]]},"540":{"position":[[111,4]]},"545":{"position":[[467,4],[1562,4]]},"547":{"position":[[87,4],[168,4],[304,4],[873,4],[1117,4],[1345,4],[2437,4]]},"550":{"position":[[15,4]]},"551":{"position":[[63,4]]},"556":{"position":[[1739,4],[2113,4]]},"560":{"position":[[118,4],[263,4]]},"568":{"position":[[15,4]]},"569":{"position":[[63,4]]},"573":{"position":[[763,4],[897,4],[1329,4]]},"574":{"position":[[17,4],[41,4],[644,4]]},"578":{"position":[[1,4],[101,4],[342,4]]},"580":{"position":[[15,4]]},"581":{"position":[[59,4]]},"584":{"position":[[956,4],[1060,4],[1289,4],[1401,4]]},"585":{"position":[[17,4],[41,4]]},"586":{"position":[[162,4]]},"588":{"position":[[22,4]]},"590":{"position":[[36,4]]},"593":{"position":[[433,4]]},"594":{"position":[[1054,4]]},"595":{"position":[[108,5],[163,4],[335,5],[433,4],[563,4],[1109,5],[1222,4]]},"598":{"position":[[9,4]]},"603":{"position":[[30,4],[68,4],[245,4]]},"605":{"position":[[15,4],[102,4]]},"607":{"position":[[63,4]]},"611":{"position":[[836,4],[1103,4]]},"614":{"position":[[63,4]]},"616":{"position":[[479,4]]},"622":{"position":[[15,4]]},"628":{"position":[[15,4]]},"631":{"position":[[270,4],[409,4]]},"634":{"position":[[43,4]]},"635":{"position":[[75,4]]},"637":{"position":[[129,4]]},"639":{"position":[[103,4],[239,4],[624,4],[802,4],[2062,4]]},"640":{"position":[[5,4]]},"643":{"position":[[64,5]]},"646":{"position":[[774,4],[800,4],[867,4]]},"649":{"position":[[138,4],[518,4]]},"650":{"position":[[64,5]]},"654":{"position":[[510,4],[752,4],[858,4],[884,4]]},"657":{"position":[[96,4],[327,4],[578,5],[695,4]]},"658":{"position":[[273,4],[314,5],[447,4]]},"659":{"position":[[406,4],[513,5]]},"660":{"position":[[448,4],[499,4],[875,4]]},"661":{"position":[[211,4]]},"662":{"position":[[829,4]]},"664":{"position":[[287,4]]},"667":{"position":[[15,4]]},"670":{"position":[[566,4]]},"673":{"position":[[96,4],[327,4],[510,4]]},"674":{"position":[[273,4],[314,5],[447,4]]},"675":{"position":[[241,4],[401,4]]},"676":{"position":[[249,4],[356,5]]},"677":{"position":[[829,4]]},"679":{"position":[[266,4]]},"682":{"position":[[15,4]]},"685":{"position":[[390,4]]},"688":{"position":[[96,4],[327,4],[510,4]]},"689":{"position":[[273,4],[314,5],[447,4]]},"691":{"position":[[249,4],[356,5]]},"692":{"position":[[829,4]]},"694":{"position":[[266,4]]},"697":{"position":[[15,4]]},"700":{"position":[[218,4]]},"706":{"position":[[218,4]]},"709":{"position":[[15,4]]},"715":{"position":[[15,4]]},"716":{"position":[[65,4]]},"717":{"position":[[135,5]]},"718":{"position":[[394,4]]},"720":{"position":[[340,5],[381,4],[722,4]]},"723":{"position":[[413,5]]},"724":{"position":[[463,4]]},"731":{"position":[[66,5]]},"741":{"position":[[333,4]]},"744":{"position":[[15,4]]},"747":{"position":[[728,4],[830,4],[945,4],[1232,5],[1270,4]]},"750":{"position":[[549,4],[1291,4]]},"752":{"position":[[899,4]]},"759":{"position":[[166,5]]},"761":{"position":[[128,4]]},"764":{"position":[[581,5]]},"766":{"position":[[549,4]]},"772":{"position":[[177,5]]},"774":{"position":[[128,4]]},"777":{"position":[[581,5]]},"779":{"position":[[34,4]]},"785":{"position":[[714,4],[862,5]]},"789":{"position":[[537,4],[1692,4]]},"791":{"position":[[676,4],[904,4]]},"792":{"position":[[1996,4]]},"793":{"position":[[1350,4]]},"799":{"position":[[164,5]]},"801":{"position":[[128,4]]},"804":{"position":[[579,5]]},"807":{"position":[[537,4]]},"808":{"position":[[1296,4]]},"814":{"position":[[164,5]]},"816":{"position":[[128,4]]},"819":{"position":[[579,5]]},"821":{"position":[[52,4],[272,4],[968,4]]},"823":{"position":[[537,4]]},"824":{"position":[[2118,4]]},"830":{"position":[[164,5]]},"832":{"position":[[128,4]]},"835":{"position":[[579,5]]},"842":{"position":[[340,4],[367,4],[1401,4],[2925,4]]},"846":{"position":[[177,4]]},"849":{"position":[[2954,4]]},"851":{"position":[[230,4]]},"854":{"position":[[15,4]]},"859":{"position":[[565,4]]},"864":{"position":[[1498,4]]},"869":{"position":[[55,4],[227,4],[344,4],[644,5]]},"870":{"position":[[527,5]]},"882":{"position":[[15,4]]},"885":{"position":[[519,4]]},"888":{"position":[[15,4]]},"891":{"position":[[230,4],[382,4]]},"895":{"position":[[217,4]]},"903":{"position":[[887,4]]},"909":{"position":[[1090,4],[1150,4]]},"912":{"position":[[57,4],[283,4],[984,5],[1093,5],[1534,4],[1605,4]]},"915":{"position":[[887,4],[1148,4]]},"922":{"position":[[1560,4],[2019,4]]},"925":{"position":[[1090,4],[1150,4]]},"930":{"position":[[887,4]]},"936":{"position":[[1090,4],[1150,4]]},"943":{"position":[[77,5]]},"945":{"position":[[737,4]]},"952":{"position":[[1090,4],[1150,4]]},"956":{"position":[[15,4]]},"959":{"position":[[211,4],[274,4]]},"963":{"position":[[1041,4],[1302,4]]},"970":{"position":[[1090,4],[1150,4]]},"974":{"position":[[100,4],[176,4]]},"975":{"position":[[16,4],[54,4],[215,5],[329,5],[385,4]]},"976":{"position":[[57,4],[195,4]]},"977":{"position":[[146,5],[340,4],[500,4],[598,4],[707,4]]},"979":{"position":[[15,4]]},"982":{"position":[[213,4],[276,4]]},"985":{"position":[[400,5]]},"989":{"position":[[889,4],[988,4]]},"994":{"position":[[15,4]]},"1000":{"position":[[578,5]]},"1004":{"position":[[190,4],[972,4],[1071,4]]},"1006":{"position":[[310,4]]},"1007":{"position":[[61,4]]},"1008":{"position":[[140,4],[606,4]]},"1009":{"position":[[884,4],[964,4],[1618,4]]},"1012":{"position":[[15,4]]},"1015":{"position":[[332,4]]},"1020":{"position":[[1049,4]]},"1022":{"position":[[194,5],[431,5]]},"1023":{"position":[[67,4],[148,4],[284,4],[853,4],[1098,4],[1326,4],[2418,4]]},"1026":{"position":[[56,4]]},"1028":{"position":[[141,4],[279,4]]},"1036":{"position":[[840,4]]},"1040":{"position":[[603,4]]},"1042":{"position":[[361,5]]},"1043":{"position":[[1025,5]]},"1050":{"position":[[603,4]]},"1051":{"position":[[1287,5]]},"1058":{"position":[[603,4]]},"1059":{"position":[[1080,5]]},"1065":{"position":[[15,4]]},"1070":{"position":[[717,4],[870,5],[891,4]]},"1073":{"position":[[15,4]]},"1076":{"position":[[452,4],[533,4],[680,4]]},"1077":{"position":[[40,4],[112,4],[378,5],[421,4],[605,4],[801,4],[859,5]]},"1080":{"position":[[15,4]]},"1085":{"position":[[758,4],[822,4],[948,4],[1083,4],[1226,4],[1306,4]]},"1087":{"position":[[60,4]]},"1092":{"position":[[326,4],[521,4]]},"1094":{"position":[[357,4]]},"1099":{"position":[[15,4]]},"1104":{"position":[[15,4]]},"1105":{"position":[[45,4]]},"1107":{"position":[[131,4],[201,4]]},"1110":{"position":[[15,4]]},"1113":{"position":[[270,4]]},"1118":{"position":[[261,4],[972,4],[1059,4],[1130,4],[1197,4]]},"1128":{"position":[[15,4]]},"1129":{"position":[[82,4]]},"1133":{"position":[[825,4],[895,4]]},"1137":{"position":[[35,4]]},"1144":{"position":[[189,4],[297,4]]},"1147":{"position":[[355,4],[482,5]]},"1151":{"position":[[794,4],[925,4],[1039,4]]},"1157":{"position":[[169,4],[303,4]]},"1162":{"position":[[300,4]]},"1164":{"position":[[74,4],[196,4]]},"1165":{"position":[[292,4]]},"1170":{"position":[[189,4],[297,4]]},"1172":{"position":[[66,4],[113,4],[136,4],[260,4],[278,4]]},"1174":{"position":[[355,4],[482,5]]},"1176":{"position":[[513,4]]},"1178":{"position":[[35,4]]},"1180":{"position":[[126,4]]},"1183":{"position":[[374,4],[806,4],[1048,4],[1505,4],[1725,4]]},"1185":{"position":[[313,4]]},"1187":{"position":[[35,4]]},"1189":{"position":[[423,4]]},"1194":{"position":[[523,4]]},"1195":{"position":[[35,4]]},"1197":{"position":[[429,4]]},"1203":{"position":[[684,4]]},"1205":{"position":[[35,4],[162,4]]},"1207":{"position":[[512,4]]},"1216":{"position":[[355,4],[482,5]]},"1222":{"position":[[66,4],[113,4],[136,4],[260,4],[278,4]]},"1224":{"position":[[355,4],[482,5]]},"1226":{"position":[[324,4]]},"1229":{"position":[[35,4]]},"1239":{"position":[[98,4]]},"1240":{"position":[[115,4]]},"1243":{"position":[[101,4],[766,4]]},"1246":{"position":[[35,4]]},"1247":{"position":[[1013,5]]},"1248":{"position":[[456,4]]},"1250":{"position":[[34,4]]},"1260":{"position":[[493,4],[593,4],[724,4]]},"1267":{"position":[[231,4]]},"1268":{"position":[[65,4]]},"1269":{"position":[[92,4]]},"1284":{"position":[[35,4]]},"1292":{"position":[[1978,4]]},"1299":{"position":[[35,4]]},"1303":{"position":[[1520,4]]},"1306":{"position":[[1978,4]]},"1312":{"position":[[35,4]]},"1323":{"position":[[35,4]]},"1329":{"position":[[1978,4]]},"1336":{"position":[[35,4]]},"1347":{"position":[[35,4]]},"1354":{"position":[[348,4]]},"1355":{"position":[[35,4]]},"1356":{"position":[[781,4],[845,4],[1265,4]]},"1357":{"position":[[361,4]]},"1358":{"position":[[803,4]]},"1362":{"position":[[535,4]]},"1375":{"position":[[35,4]]},"1379":{"position":[[1993,4]]},"1382":{"position":[[567,4]]},"1384":{"position":[[1275,5]]},"1385":{"position":[[35,4]]},"1386":{"position":[[542,4]]},"1387":{"position":[[462,4],[1088,4]]},"1388":{"position":[[788,4]]},"1391":{"position":[[212,4],[743,4]]},"1392":{"position":[[29,4]]},"1393":{"position":[[29,4]]},"1399":{"position":[[35,4]]},"1403":{"position":[[1993,4]]},"1410":{"position":[[35,4]]},"1414":{"position":[[1993,4]]},"1417":{"position":[[241,4]]},"1419":{"position":[[35,4]]},"1421":{"position":[[449,4]]},"1426":{"position":[[35,4]]},"1429":{"position":[[76,5]]},"1448":{"position":[[432,4],[720,5],[884,4]]},"1449":{"position":[[329,4],[472,4],[615,4]]},"1451":{"position":[[24,4],[138,4],[354,4],[497,4],[1007,5]]},"1452":{"position":[[2262,4],[2326,4],[2606,4],[2675,4],[2771,4],[3426,4],[3437,4],[3669,4],[3807,4],[3977,4]]},"1455":{"position":[[117,4]]},"1461":{"position":[[4317,4],[5211,4],[5326,4]]},"1462":{"position":[[666,4]]},"1470":{"position":[[1014,4],[1140,4],[1280,4]]},"1473":{"position":[[62,4]]},"1474":{"position":[[30,4],[280,4],[362,4]]},"1475":{"position":[[96,4],[240,4],[304,4]]},"1479":{"position":[[637,4],[701,4]]},"1481":{"position":[[132,4]]}},"keywords":{}}],["data'",{"_index":4368,"title":{},"content":{"640":{"position":[[295,6]]}},"keywords":{}}],["data.appli",{"_index":4531,"title":{},"content":{"726":{"position":[[227,10]]}},"keywords":{}}],["data.csv.thi",{"_index":5201,"title":{},"content":{"1020":{"position":[[1791,13]]}},"keywords":{}}],["data.dev",{"_index":3864,"title":{},"content":{"488":{"position":[[130,10]]},"659":{"position":[[287,10]]},"676":{"position":[[130,10]]},"691":{"position":[[130,10]]}},"keywords":{}}],["data.fail",{"_index":1783,"title":{},"content":{"138":{"position":[[1401,11]]},"142":{"position":[[1402,11]]}},"keywords":{}}],["data.for",{"_index":5762,"title":{},"content":{"1160":{"position":[[365,8]]}},"keywords":{}}],["data?testkey=testvalu",{"_index":3874,"title":{},"content":{"488":{"position":[[1035,22]]},"659":{"position":[[1192,22]]},"676":{"position":[[1035,22]]},"691":{"position":[[1035,22]]}},"keywords":{}}],["dataa",{"_index":6358,"title":{},"content":{"1382":{"position":[[120,5]]}},"keywords":{}}],["databas",{"_index":335,"title":{"115":{"position":[[16,9]]},"235":{"position":[[22,9]]},"238":{"position":[[11,8]]},"325":{"position":[[50,10]]},"326":{"position":[[36,10]]},"753":{"position":[[6,8]]},"793":{"position":[[6,8]]},"919":{"position":[[6,8]]},"964":{"position":[[7,8]]},"1043":{"position":[[10,9]]},"1283":{"position":[[6,8]]},"1311":{"position":[[6,8]]},"1409":{"position":[[10,9]]}},"content":{"11":{"position":[[1402,9]]},"13":{"position":[[950,9]]},"14":{"position":[[619,8],[830,8]]},"27":{"position":[[238,8],[349,8]]},"37":{"position":[[179,10]]},"42":{"position":[[172,8]]},"45":{"position":[[190,8]]},"52":{"position":[[154,8]]},"55":{"position":[[382,8]]},"71":{"position":[[573,8]]},"72":{"position":[[695,9]]},"75":{"position":[[159,8]]},"76":{"position":[[127,9]]},"81":{"position":[[462,8],[582,8],[1405,9],[1630,8],[1661,8],[2256,8],[2698,9]]},"83":{"position":[[1043,9]]},"96":{"position":[[764,9]]},"97":{"position":[[303,8]]},"100":{"position":[[58,8],[173,8],[800,8],[1295,9]]},"101":{"position":[[509,8]]},"112":{"position":[[342,8],[848,9],[989,8],[1011,9]]},"115":{"position":[[59,9],[565,8],[930,9],[1000,8],[1237,8]]},"121":{"position":[[1494,8]]},"122":{"position":[[791,8]]},"124":{"position":[[449,8],[733,8],[1035,9]]},"125":{"position":[[257,9]]},"157":{"position":[[174,10]]},"162":{"position":[[1513,9]]},"164":{"position":[[1496,8]]},"165":{"position":[[165,10]]},"179":{"position":[[465,8],[564,8],[605,9]]},"184":{"position":[[438,8],[466,8]]},"191":{"position":[[937,8],[992,8],[1777,8],[1825,8]]},"192":{"position":[[1086,9]]},"193":{"position":[[141,9]]},"196":{"position":[[94,9],[328,9]]},"197":{"position":[[728,8]]},"198":{"position":[[262,8]]},"199":{"position":[[271,9]]},"201":{"position":[[78,9]]},"204":{"position":[[33,9],[260,9],[675,8]]},"206":{"position":[[249,8],[429,10],[609,9],[771,8],[1076,9]]},"208":{"position":[[145,8],[1211,8]]},"209":{"position":[[314,8]]},"212":{"position":[[168,8]]},"213":{"position":[[431,9]]},"218":{"position":[[1535,8]]},"222":{"position":[[29,8]]},"223":{"position":[[29,8]]},"224":{"position":[[29,8],[154,9],[744,8],[1031,8],[1103,8],[1179,8]]},"232":{"position":[[404,9]]},"233":{"position":[[94,9],[335,9]]},"234":{"position":[[173,8],[288,8]]},"236":{"position":[[78,9],[117,8],[201,9],[405,8],[1725,9],[2784,8],[3746,8]]},"237":{"position":[[50,8],[461,9],[800,9],[2896,9],[3315,8],[3580,8]]},"238":{"position":[[50,8],[524,9],[654,8],[797,8]]},"239":{"position":[[431,8]]},"240":{"position":[[898,8],[953,8],[1738,8],[1786,8],[2278,10]]},"242":{"position":[[275,8],[580,8],[800,8],[852,8]]},"243":{"position":[[162,8]]},"259":{"position":[[930,9],[2511,9]]},"268":{"position":[[477,8]]},"278":{"position":[[468,9],[492,8],[1632,8]]},"281":{"position":[[124,8]]},"288":{"position":[[209,8],[389,9],[620,9]]},"289":{"position":[[179,8]]},"290":{"position":[[60,9],[145,9],[768,9],[802,8],[948,8],[1764,8]]},"292":{"position":[[107,8]]},"299":{"position":[[535,9]]},"308":{"position":[[620,8]]},"309":{"position":[[805,8]]},"310":{"position":[[178,8]]},"321":{"position":[[348,9],[656,9],[1398,9]]},"322":{"position":[[1882,9]]},"325":{"position":[[18,9],[187,9],[347,9],[384,8],[654,9],[708,9],[863,10]]},"326":{"position":[[24,9],[60,9],[184,8],[250,9],[491,8],[873,8]]},"344":{"position":[[98,9]]},"366":{"position":[[23,8],[353,9]]},"370":{"position":[[86,8],[329,8],[370,9],[380,8],[397,8],[481,8],[603,8],[845,8]]},"371":{"position":[[217,9],[1523,9]]},"402":{"position":[[192,9],[202,8],[228,8],[286,8],[390,8],[578,8]]},"403":{"position":[[197,9]]},"483":{"position":[[90,9],[676,9]]},"556":{"position":[[1337,8]]},"590":{"position":[[22,9]]},"591":{"position":[[76,9]]},"593":{"position":[[154,9],[164,8],[194,8]]},"750":{"position":[[46,8],[735,8],[1301,9]]},"752":{"position":[[120,9],[205,8]]},"753":{"position":[[59,8],[146,8],[861,8]]},"754":{"position":[[188,9],[450,9],[920,8],[1070,8]]},"757":{"position":[[119,8],[181,8],[309,8],[950,8],[976,8],[1082,9],[1612,8],[1974,8],[2084,9],[2339,9],[2404,9]]},"758":{"position":[[507,9]]},"764":{"position":[[330,8]]},"766":{"position":[[46,8],[735,8]]},"767":{"position":[[26,8],[80,9],[176,9],[247,9],[1213,8],[1276,8],[1433,9],[1841,8]]},"770":{"position":[[119,8],[181,8],[309,8],[950,8],[976,8],[1082,9],[1612,8],[1974,8],[2084,9],[2339,9],[2404,9]]},"771":{"position":[[507,9]]},"777":{"position":[[330,8]]},"779":{"position":[[20,9]]},"780":{"position":[[71,8],[235,10],[370,9],[408,9]]},"782":{"position":[[98,9],[205,8],[296,8],[327,9],[337,8],[383,9],[450,9],[555,8],[564,8]]},"783":{"position":[[232,9]]},"785":{"position":[[29,8]]},"788":{"position":[[216,8]]},"789":{"position":[[44,8],[790,8],[1136,8],[1702,9]]},"790":{"position":[[132,8]]},"791":{"position":[[73,9],[158,8]]},"792":{"position":[[86,8],[217,8],[1781,8]]},"793":{"position":[[31,8],[832,8]]},"794":{"position":[[323,9],[1126,8],[1274,8]]},"797":{"position":[[119,8],[181,8],[309,8],[950,8],[976,8],[1082,9],[1612,8],[2091,9],[2346,9]]},"798":{"position":[[505,9]]},"804":{"position":[[328,8]]},"807":{"position":[[44,8],[723,8]]},"808":{"position":[[31,8],[207,8],[778,8]]},"809":{"position":[[323,9],[1126,8],[1274,8]]},"812":{"position":[[119,8],[181,8],[309,8],[950,8],[976,8],[1082,9],[1612,8],[2091,9],[2346,9]]},"813":{"position":[[505,9]]},"819":{"position":[[328,8]]},"821":{"position":[[359,9]]},"823":{"position":[[44,8],[723,8]]},"824":{"position":[[31,8],[193,9],[288,9],[359,8],[1279,8],[1342,8],[1497,9],[1903,8]]},"825":{"position":[[323,9],[962,8],[1110,8]]},"828":{"position":[[119,8],[181,8],[309,8],[950,8],[976,8],[1082,9],[1612,8],[2091,9],[2346,9]]},"829":{"position":[[505,9]]},"835":{"position":[[328,8]]},"862":{"position":[[71,8]]},"864":{"position":[[22,8],[178,9],[1005,8],[1468,8],[1662,8]]},"867":{"position":[[112,8],[172,8],[268,8],[299,9],[309,8],[326,8],[937,8],[1096,8],[1567,8]]},"868":{"position":[[117,8],[222,9]]},"869":{"position":[[127,9],[416,8],[584,8]]},"870":{"position":[[216,8],[369,8],[456,8],[672,8],[841,8],[903,8]]},"874":{"position":[[71,8]]},"876":{"position":[[22,8],[178,9],[856,9],[922,8]]},"879":{"position":[[121,9],[321,9],[635,9],[1094,8]]},"903":{"position":[[26,8],[379,9]]},"904":{"position":[[31,8],[193,9],[288,9],[359,8],[1173,9],[1194,8]]},"907":{"position":[[112,8],[153,9],[163,8],[180,8],[264,8],[386,8],[628,8]]},"908":{"position":[[218,9],[551,9]]},"910":{"position":[[344,8]]},"911":{"position":[[190,8]]},"912":{"position":[[370,9],[1189,8]]},"914":{"position":[[250,8]]},"915":{"position":[[26,8],[379,9],[1158,9]]},"916":{"position":[[137,8]]},"917":{"position":[[106,8]]},"918":{"position":[[86,8],[217,8]]},"919":{"position":[[31,8]]},"922":{"position":[[1932,8],[2063,8],[2155,9],[2353,10],[3230,8]]},"923":{"position":[[112,8],[153,9],[163,8],[180,8],[264,8],[386,8],[628,8]]},"924":{"position":[[218,9],[551,9]]},"926":{"position":[[344,8]]},"927":{"position":[[190,8]]},"930":{"position":[[26,8],[379,9]]},"931":{"position":[[31,8],[207,8]]},"934":{"position":[[112,8],[153,9],[163,8],[180,8],[264,8],[386,8],[628,8]]},"935":{"position":[[218,9],[551,9]]},"937":{"position":[[344,8]]},"938":{"position":[[190,8]]},"942":{"position":[[131,9]]},"947":{"position":[[207,9],[986,8]]},"950":{"position":[[112,8],[153,9],[163,8],[180,8],[264,8],[386,8],[628,8]]},"951":{"position":[[218,9],[551,9]]},"953":{"position":[[344,8]]},"954":{"position":[[190,8]]},"963":{"position":[[35,8],[184,8],[533,9],[1312,9]]},"964":{"position":[[60,8],[327,9],[394,8],[653,9]]},"965":{"position":[[106,8]]},"968":{"position":[[112,8],[153,9],[163,8],[180,8],[264,8],[386,8],[628,8]]},"969":{"position":[[218,9],[551,9]]},"971":{"position":[[344,8]]},"972":{"position":[[190,8]]},"1031":{"position":[[82,8]]},"1032":{"position":[[311,8],[1365,8],[1444,8],[1548,8],[1649,8],[1753,8],[1854,8]]},"1034":{"position":[[273,9],[283,8],[318,8]]},"1037":{"position":[[181,9]]},"1039":{"position":[[103,9]]},"1040":{"position":[[154,9],[345,8],[431,9]]},"1042":{"position":[[102,9]]},"1043":{"position":[[31,8],[766,9]]},"1045":{"position":[[119,8],[160,9],[170,8],[187,8],[249,8],[371,8],[613,8]]},"1046":{"position":[[162,9],[485,9]]},"1047":{"position":[[428,8]]},"1049":{"position":[[29,9]]},"1050":{"position":[[154,9],[345,8],[431,9]]},"1051":{"position":[[31,8],[193,9],[288,9],[359,8],[1022,9]]},"1053":{"position":[[119,8],[160,9],[170,8],[187,8],[249,8],[371,8],[613,8]]},"1054":{"position":[[162,9],[485,9]]},"1055":{"position":[[428,8]]},"1057":{"position":[[32,9]]},"1058":{"position":[[154,9],[345,8],[431,9]]},"1059":{"position":[[31,8],[207,8],[786,9]]},"1061":{"position":[[119,8],[160,9],[170,8],[187,8],[249,8],[371,8],[613,8]]},"1062":{"position":[[162,9],[485,9]]},"1063":{"position":[[428,8]]},"1136":{"position":[[49,8],[149,8]]},"1137":{"position":[[234,9]]},"1138":{"position":[[86,8],[287,8],[316,8],[492,8],[531,8],[547,8],[747,8]]},"1139":{"position":[[118,9]]},"1149":{"position":[[278,8]]},"1150":{"position":[[160,9]]},"1151":{"position":[[98,9],[213,8],[304,8],[335,9],[345,8],[374,8],[461,8],[519,8],[535,8],[1189,8],[1391,8]]},"1152":{"position":[[245,9]]},"1154":{"position":[[407,8]]},"1162":{"position":[[824,8]]},"1178":{"position":[[417,9]]},"1203":{"position":[[49,8]]},"1206":{"position":[[285,9],[295,8],[325,9],[401,9]]},"1207":{"position":[[71,9]]},"1209":{"position":[[567,8]]},"1250":{"position":[[20,9]]},"1251":{"position":[[71,9],[119,8]]},"1253":{"position":[[98,9],[194,9],[204,8],[225,8],[278,8],[369,8]]},"1254":{"position":[[155,9],[272,9]]},"1259":{"position":[[152,9]]},"1260":{"position":[[158,9],[168,8],[181,8],[233,8],[249,8],[939,8]]},"1261":{"position":[[173,9]]},"1264":{"position":[[85,8]]},"1267":{"position":[[87,9],[175,9],[185,8],[214,8]]},"1270":{"position":[[125,9]]},"1281":{"position":[[46,8],[188,8],[407,9]]},"1282":{"position":[[102,8]]},"1283":{"position":[[25,8],[198,8],[391,9]]},"1284":{"position":[[232,9]]},"1285":{"position":[[70,8],[99,8],[181,9],[311,8],[353,8]]},"1286":{"position":[[380,9],[1183,8],[1335,8]]},"1287":{"position":[[116,9]]},"1289":{"position":[[25,8],[270,8],[350,8],[656,8],[1230,8],[1659,9]]},"1292":{"position":[[2009,8],[2051,9]]},"1295":{"position":[[46,8],[188,8],[407,9]]},"1297":{"position":[[26,8]]},"1298":{"position":[[29,8],[1062,8]]},"1299":{"position":[[232,9]]},"1300":{"position":[[70,8],[99,8],[181,9],[311,8],[353,8]]},"1301":{"position":[[380,9],[1019,8],[1171,8]]},"1302":{"position":[[116,9]]},"1303":{"position":[[31,8],[207,8],[941,8],[1248,9],[1320,9]]},"1306":{"position":[[2009,8],[2051,9]]},"1309":{"position":[[49,8],[149,8]]},"1310":{"position":[[102,8],[550,8],[980,9]]},"1311":{"position":[[29,8],[228,9]]},"1312":{"position":[[235,9]]},"1313":{"position":[[70,8],[99,8],[172,9],[302,8],[341,8],[357,8],[557,8]]},"1314":{"position":[[119,9]]},"1319":{"position":[[46,8],[188,8],[407,9]]},"1320":{"position":[[25,8]]},"1321":{"position":[[50,8],[130,8]]},"1322":{"position":[[29,8],[1449,8]]},"1323":{"position":[[232,9]]},"1324":{"position":[[70,8],[99,8],[181,9],[311,8],[353,8]]},"1325":{"position":[[380,9],[1183,8],[1335,8]]},"1326":{"position":[[116,9]]},"1329":{"position":[[2009,8],[2051,9]]},"1332":{"position":[[49,8],[149,8]]},"1333":{"position":[[25,8]]},"1334":{"position":[[50,8],[130,8]]},"1335":{"position":[[29,8],[1096,8]]},"1336":{"position":[[235,9]]},"1337":{"position":[[70,8],[99,8],[172,9],[302,8],[341,8],[357,8],[557,8]]},"1338":{"position":[[119,9]]},"1343":{"position":[[49,8],[149,8]]},"1344":{"position":[[25,8]]},"1345":{"position":[[26,8]]},"1346":{"position":[[29,8],[1062,8],[1370,9]]},"1347":{"position":[[235,9]]},"1348":{"position":[[70,8],[99,8],[172,9],[302,8],[341,8],[357,8],[557,8]]},"1349":{"position":[[119,9]]},"1370":{"position":[[788,8]]},"1372":{"position":[[50,8],[188,8]]},"1373":{"position":[[31,8],[193,9],[288,9],[1175,8]]},"1374":{"position":[[31,8],[193,9],[288,9],[1179,8]]},"1375":{"position":[[236,9]]},"1376":{"position":[[70,8],[99,8],[181,9],[311,8],[353,8]]},"1377":{"position":[[120,9]]},"1379":{"position":[[2045,8]]},"1382":{"position":[[82,9],[157,8]]},"1383":{"position":[[182,9],[885,8],[940,8],[1725,8],[1773,8]]},"1386":{"position":[[228,9],[238,8],[269,8],[333,8],[575,8]]},"1387":{"position":[[106,9],[660,9]]},"1394":{"position":[[940,8]]},"1396":{"position":[[50,8],[188,8]]},"1397":{"position":[[31,8],[208,8],[954,8]]},"1398":{"position":[[31,8],[207,8],[957,8]]},"1399":{"position":[[236,9]]},"1400":{"position":[[70,8],[99,8],[181,9],[311,8],[353,8]]},"1401":{"position":[[120,9]]},"1403":{"position":[[2045,8]]},"1406":{"position":[[50,8],[188,8]]},"1408":{"position":[[273,8]]},"1409":{"position":[[31,8],[937,8]]},"1410":{"position":[[236,9]]},"1411":{"position":[[70,8],[99,8],[181,9],[311,8],[353,8]]},"1412":{"position":[[120,9]]},"1414":{"position":[[2045,8]]},"1425":{"position":[[52,8]]},"1426":{"position":[[238,9],[293,8]]},"1427":{"position":[[70,8],[99,8],[172,8],[243,8],[282,8],[298,8],[498,8]]},"1428":{"position":[[122,9]]},"1437":{"position":[[51,9]]},"1447":{"position":[[112,8]]}},"keywords":{}}],["database'",{"_index":2182,"title":{},"content":{"197":{"position":[[78,10]]},"752":{"position":[[1009,10]]},"757":{"position":[[449,10]]},"770":{"position":[[449,10]]},"791":{"position":[[1043,10]]},"797":{"position":[[449,10]]},"812":{"position":[[449,10]]},"828":{"position":[[449,10]]},"1267":{"position":[[489,10]]},"1285":{"position":[[511,10]]},"1300":{"position":[[511,10]]},"1324":{"position":[[511,10]]}},"keywords":{}}],["database(",{"_index":2212,"title":{},"content":{"202":{"position":[[49,11]]},"780":{"position":[[108,12]]}},"keywords":{}}],["database.azur",{"_index":5980,"title":{},"content":{"1289":{"position":[[1644,14]]},"1310":{"position":[[965,14]]}},"keywords":{}}],["database.set",{"_index":4718,"title":{},"content":{"794":{"position":[[705,12]]},"809":{"position":[[705,12]]},"1286":{"position":[[762,12]]},"1325":{"position":[[762,12]]}},"keywords":{}}],["database.th",{"_index":5854,"title":{},"content":{"1203":{"position":[[496,12]]}},"keywords":{}}],["database/schema",{"_index":4719,"title":{},"content":{"797":{"position":[[1974,15]]},"812":{"position":[[1974,15]]},"828":{"position":[[1974,15]]}},"keywords":{}}],["database::<database>",{"_index":6298,"title":{},"content":{"1373":{"position":[[1221,26]]},"1374":{"position":[[1225,26]]},"1397":{"position":[[1000,26]]},"1398":{"position":[[1003,26]]},"1408":{"position":[[319,26]]},"1409":{"position":[[983,26]]}},"keywords":{}}],["database_nam",{"_index":2136,"title":{},"content":{"191":{"position":[[554,13]]},"240":{"position":[[515,13]]},"1032":{"position":[[275,13]]},"1383":{"position":[[502,13]]}},"keywords":{}}],["databasea",{"_index":6359,"title":{},"content":{"1382":{"position":[[194,9]]}},"keywords":{}}],["databaseamazon",{"_index":5235,"title":{},"content":{"1039":{"position":[[319,14]]},"1041":{"position":[[102,14]]},"1050":{"position":[[1017,14]]},"1407":{"position":[[102,14]]}},"keywords":{}}],["databases.a",{"_index":4705,"title":{},"content":{"789":{"position":[[901,12]]}},"keywords":{}}],["databrick",{"_index":5418,"title":{"1184":{"position":[[0,10]]}},"content":{"1120":{"position":[[797,10]]},"1185":{"position":[[40,10]]},"1186":{"position":[[93,10],[135,10],[420,10],[720,10]]},"1187":{"position":[[113,10],[203,10]]},"1191":{"position":[[184,10],[499,10]]},"1192":{"position":[[1,10],[263,11],[451,10]]}},"keywords":{}}],["databricks'",{"_index":5815,"title":{},"content":{"1192":{"position":[[195,12]]}},"keywords":{}}],["databricks:dev",{"_index":5419,"title":{},"content":{"1120":{"position":[[859,14]]},"1189":{"position":[[300,14]]}},"keywords":{}}],["datadog",{"_index":3853,"title":{"484":{"position":[[0,7]]},"487":{"position":[[12,7]]}},"content":{"487":{"position":[[8,7],[382,7],[505,7]]}},"keywords":{}}],["datafil",{"_index":6033,"title":{},"content":{"1292":{"position":[[2090,8]]},"1306":{"position":[[2090,8]]},"1329":{"position":[[2090,8]]}},"keywords":{}}],["dataflow",{"_index":1120,"title":{"187":{"position":[[18,8]]},"319":{"position":[[29,9]]}},"content":{"81":{"position":[[686,9]]},"319":{"position":[[165,9]]},"1176":{"position":[[592,9]]},"1185":{"position":[[392,9]]},"1194":{"position":[[602,9]]},"1203":{"position":[[763,9]]},"1226":{"position":[[403,9]]},"1243":{"position":[[180,9]]},"1354":{"position":[[427,9]]},"1382":{"position":[[646,9]]}},"keywords":{}}],["dataflowcustom",{"_index":3185,"title":{},"content":{"329":{"position":[[676,14]]}},"keywords":{}}],["datagen",{"_index":2527,"title":{},"content":{"236":{"position":[[1119,8],[1171,7],[2099,7],[2677,7]]},"237":{"position":[[3374,7]]}},"keywords":{}}],["datalink",{"_index":5531,"title":{},"content":{"1140":{"position":[[548,8]]},"1316":{"position":[[548,8]]},"1340":{"position":[[548,8]]},"1351":{"position":[[548,8]]},"1431":{"position":[[571,8]]}},"keywords":{}}],["dataset",{"_index":288,"title":{},"content":{"11":{"position":[[29,8]]},"34":{"position":[[23,8]]},"158":{"position":[[47,7]]},"180":{"position":[[75,7],[572,7],[917,8]]},"183":{"position":[[2535,8],[4621,8]]},"184":{"position":[[93,7]]},"190":{"position":[[1160,8]]},"239":{"position":[[2079,7],[2190,8]]},"245":{"position":[[23,8]]},"254":{"position":[[4004,8]]},"321":{"position":[[554,8]]},"322":{"position":[[420,8]]},"329":{"position":[[733,9]]},"330":{"position":[[618,9]]},"331":{"position":[[736,8]]},"417":{"position":[[2280,7]]},"419":{"position":[[1589,9]]},"441":{"position":[[198,9]]},"477":{"position":[[244,8]]},"479":{"position":[[285,7]]},"480":{"position":[[750,8]]},"482":{"position":[[149,7],[173,8],[182,7],[203,7]]},"504":{"position":[[1218,9]]},"545":{"position":[[1675,7]]},"547":{"position":[[1591,9]]},"595":{"position":[[1146,9]]},"605":{"position":[[220,8]]},"637":{"position":[[1215,7]]},"639":{"position":[[1216,9]]},"821":{"position":[[1034,7],[1457,8]]},"1023":{"position":[[1572,9]]},"1036":{"position":[[863,7]]},"1176":{"position":[[119,8],[336,7]]},"1178":{"position":[[235,8],[256,7],[359,7]]},"1179":{"position":[[147,8],[344,8],[353,7],[370,7],[1065,7],[1122,8],[1149,7]]},"1180":{"position":[[104,8]]},"1182":{"position":[[245,9]]},"1191":{"position":[[247,9]]},"1262":{"position":[[247,9]]},"1389":{"position":[[246,9]]},"1391":{"position":[[41,8]]}},"keywords":{}}],["dataset.select",{"_index":3827,"title":{},"content":{"479":{"position":[[537,14]]}},"keywords":{}}],["datasetroles/bigquery.jobus",{"_index":5787,"title":{},"content":{"1176":{"position":[[255,29]]}},"keywords":{}}],["datatyp",{"_index":4652,"title":{},"content":{"763":{"position":[[169,10]]},"776":{"position":[[169,10]]},"803":{"position":[[169,10]]},"818":{"position":[[169,10]]},"834":{"position":[[169,10]]}},"keywords":{}}],["date",{"_index":428,"title":{"1077":{"position":[[20,4]]},"1291":{"position":[[0,4]]},"1305":{"position":[[0,4]]},"1328":{"position":[[0,4]]}},"content":{"14":{"position":[[525,4],[780,4]]},"36":{"position":[[349,4]]},"94":{"position":[[1557,4],[1660,4],[1907,4],[2009,4]]},"96":{"position":[[246,5]]},"107":{"position":[[3077,5],[3494,5]]},"115":{"position":[[506,4]]},"120":{"position":[[1109,4],[1212,4],[1459,4],[1561,4]]},"123":{"position":[[393,4]]},"156":{"position":[[395,6]]},"164":{"position":[[1586,5]]},"183":{"position":[[1831,5],[1845,4],[1925,4],[1975,5],[2084,5],[2160,5],[2202,5],[2260,5],[2690,4],[3071,4],[3235,4],[3637,5],[3651,4],[3731,4],[3781,5],[4324,5]]},"196":{"position":[[307,4]]},"209":{"position":[[985,5]]},"233":{"position":[[314,4]]},"239":{"position":[[1778,4]]},"254":{"position":[[345,5],[359,4],[513,4],[535,5],[730,5],[1413,5],[1427,4],[1581,4],[1805,4],[2170,5],[2787,5],[3448,5],[3627,4]]},"277":{"position":[[1351,4]]},"281":{"position":[[180,4]]},"307":{"position":[[3261,4]]},"309":{"position":[[3585,4]]},"322":{"position":[[910,4],[1467,4],[1917,4]]},"323":{"position":[[870,4]]},"325":{"position":[[151,4]]},"326":{"position":[[914,4],[1528,5],[1781,4]]},"349":{"position":[[393,4],[451,5]]},"351":{"position":[[199,4],[204,4],[259,4]]},"373":{"position":[[336,4],[553,4]]},"377":{"position":[[1083,4],[1129,5],[1428,4],[1461,5]]},"387":{"position":[[1176,4],[1202,4]]},"424":{"position":[[203,4],[212,4],[283,4]]},"448":{"position":[[839,4],[920,4],[974,4]]},"454":{"position":[[393,4],[402,4],[473,4]]},"460":{"position":[[207,4],[216,4],[287,4]]},"466":{"position":[[137,4],[158,4]]},"496":{"position":[[422,4],[431,4],[488,5]]},"509":{"position":[[366,4],[375,4],[418,4]]},"517":{"position":[[1428,4],[1437,4],[1573,4],[1587,4],[1981,4],[1990,4],[2442,5],[2611,4],[2620,4],[2748,4],[3765,4],[3774,4],[3892,4]]},"526":{"position":[[63,4]]},"534":{"position":[[1399,4],[1408,4],[1594,4]]},"556":{"position":[[1684,4],[1704,4],[1755,4],[2069,4],[2078,4],[2130,4]]},"573":{"position":[[719,4],[728,4],[780,4]]},"584":{"position":[[694,4],[711,4],[726,5]]},"611":{"position":[[792,4],[801,4],[852,4],[919,4],[1059,4],[1068,4],[1120,4]]},"631":{"position":[[207,4],[216,4],[287,4],[346,4],[355,4],[426,4]]},"654":{"position":[[447,4],[456,4],[527,4]]},"670":{"position":[[503,4],[512,4],[583,4]]},"685":{"position":[[327,4],[336,4],[407,4]]},"700":{"position":[[155,4],[164,4],[235,4]]},"706":{"position":[[155,4],[164,4],[235,4]]},"720":{"position":[[678,4],[687,4],[739,4]]},"724":{"position":[[540,5]]},"741":{"position":[[270,4],[279,4],[350,4]]},"747":{"position":[[471,4],[684,4],[693,4],[745,4],[901,4],[910,4],[961,4],[1031,5],[1156,4]]},"842":{"position":[[1734,4],[1743,4],[1844,4],[2117,4]]},"846":{"position":[[302,5]]},"847":{"position":[[187,5]]},"851":{"position":[[205,4],[240,4]]},"859":{"position":[[498,4],[507,4],[592,4],[646,4],[693,5]]},"885":{"position":[[456,4],[465,4],[536,4]]},"891":{"position":[[159,4],[168,4],[249,4]]},"895":{"position":[[190,4],[246,4]]},"897":{"position":[[78,4],[85,4],[138,5],[184,4]]},"959":{"position":[[162,4],[171,4],[291,4]]},"977":{"position":[[460,4]]},"982":{"position":[[164,4],[173,4],[293,4]]},"1006":{"position":[[127,4]]},"1009":{"position":[[842,4],[853,4],[913,4]]},"1015":{"position":[[269,4],[278,4],[349,4]]},"1028":{"position":[[78,4],[87,4],[158,4],[216,4],[225,4],[296,4]]},"1070":{"position":[[654,4],[663,4],[734,4]]},"1076":{"position":[[616,4],[625,4],[706,4]]},"1077":{"position":[[80,4],[206,4],[501,4]]},"1085":{"position":[[708,4],[717,4],[865,4],[970,5],[1156,4],[1179,4],[1194,4],[1243,4]]},"1092":{"position":[[490,4]]},"1094":{"position":[[315,4],[324,4]]},"1107":{"position":[[78,4],[87,4],[227,4]]},"1113":{"position":[[207,4],[216,4],[287,4]]},"1133":{"position":[[776,4],[785,4],[921,4]]},"1140":{"position":[[578,4]]},"1164":{"position":[[361,4],[434,5],[440,4]]},"1172":{"position":[[467,5],[473,4],[520,4],[708,5],[714,4]]},"1209":{"position":[[589,4]]},"1222":{"position":[[467,5],[473,4],[520,4],[708,5],[714,4]]},"1286":{"position":[[146,4],[1385,4]]},"1291":{"position":[[1,4],[76,4]]},"1292":{"position":[[2127,4]]},"1301":{"position":[[146,4],[1221,4]]},"1305":{"position":[[1,4],[76,4]]},"1306":{"position":[[2127,4]]},"1316":{"position":[[578,4]]},"1317":{"position":[[744,5],[876,4]]},"1325":{"position":[[146,4],[1385,4]]},"1328":{"position":[[1,4],[76,4]]},"1329":{"position":[[2127,4]]},"1340":{"position":[[578,4]]},"1341":{"position":[[744,5],[876,4]]},"1351":{"position":[[578,4]]},"1352":{"position":[[744,5],[876,4]]},"1379":{"position":[[2101,4]]},"1391":{"position":[[624,6],[783,5],[829,6]]},"1403":{"position":[[2101,4]]},"1414":{"position":[[2101,4]]},"1431":{"position":[[601,4]]},"1432":{"position":[[758,5],[904,4]]},"1448":{"position":[[1058,4]]},"1451":{"position":[[293,5]]},"1452":{"position":[[2766,4]]},"1461":{"position":[[4682,5],[4803,4]]},"1479":{"position":[[333,4],[736,4],[765,4]]},"1480":{"position":[[815,4],[918,4],[1165,4],[1267,4]]},"1481":{"position":[[67,4],[89,4],[153,4]]}},"keywords":{}}],["date"",{"_index":825,"title":{},"content":{"55":{"position":[[955,10]]}},"keywords":{}}],["date($meta$dt",{"_index":2077,"title":{},"content":{"183":{"position":[[3053,14]]}},"keywords":{}}],["date($order_timestamp",{"_index":1553,"title":{},"content":{"107":{"position":[[3354,23],[4072,23]]}},"keywords":{}}],["date($timestamp",{"_index":1371,"title":{},"content":{"96":{"position":[[226,16]]}},"keywords":{}}],["date,"",{"_index":4950,"title":{},"content":{"895":{"position":[[166,11]]}},"keywords":{}}],["date/tim",{"_index":6725,"title":{},"content":{"1479":{"position":[[436,9]]}},"keywords":{}}],["date_ranges_start_d",{"_index":4218,"title":{},"content":{"584":{"position":[[670,23]]},"586":{"position":[[248,23]]}},"keywords":{}}],["date_window_s",{"_index":4565,"title":{},"content":{"747":{"position":[[1138,17]]},"748":{"position":[[374,17]]}},"keywords":{}}],["datesearch",{"_index":4298,"title":{},"content":{"605":{"position":[[276,10]]}},"keywords":{}}],["datetim",{"_index":4590,"title":{},"content":{"750":{"position":[[1079,9]]},"754":{"position":[[261,9],[1111,8]]},"757":{"position":[[390,8],[575,8]]},"766":{"position":[[1079,9]]},"770":{"position":[[390,8],[575,8]]},"789":{"position":[[1480,9]]},"794":{"position":[[134,9],[1315,8]]},"797":{"position":[[390,8],[575,8]]},"807":{"position":[[1067,9]]},"809":{"position":[[134,9],[1315,8]]},"812":{"position":[[390,8],[575,8]]},"823":{"position":[[1067,9]]},"825":{"position":[[134,9],[1151,8]]},"828":{"position":[[390,8],[575,8]]},"846":{"position":[[312,10]]},"1209":{"position":[[605,8]]},"1267":{"position":[[430,8]]},"1285":{"position":[[452,8]]},"1286":{"position":[[260,9]]},"1291":{"position":[[157,8]]},"1292":{"position":[[2170,8]]},"1300":{"position":[[452,8]]},"1301":{"position":[[260,9]]},"1305":{"position":[[157,8]]},"1306":{"position":[[2170,8]]},"1324":{"position":[[452,8]]},"1325":{"position":[[260,9]]},"1328":{"position":[[157,8]]},"1329":{"position":[[2170,8]]}},"keywords":{}}],["dave@estuary.dev",{"_index":3807,"title":{},"content":{"473":{"position":[[265,16]]}},"keywords":{}}],["day",{"_index":1974,"title":{},"content":{"168":{"position":[[267,4]]},"188":{"position":[[194,5]]},"198":{"position":[[753,4]]},"253":{"position":[[3223,4]]},"279":{"position":[[203,4]]},"331":{"position":[[90,5]]},"387":{"position":[[1285,4]]},"480":{"position":[[196,3]]},"517":{"position":[[2159,4],[2230,3],[2270,4],[2373,3],[2575,4]]},"554":{"position":[[365,4]]},"560":{"position":[[107,4],[160,4]]},"573":{"position":[[1063,4],[1093,4],[1214,4]]},"578":{"position":[[221,4]]},"584":{"position":[[987,4]]},"718":{"position":[[313,5]]},"724":{"position":[[382,5],[515,4]]},"747":{"position":[[387,5],[1199,5]]},"750":{"position":[[170,4],[296,4]]},"752":{"position":[[911,5]]},"766":{"position":[[170,4],[296,4]]},"767":{"position":[[1259,5],[2260,5]]},"789":{"position":[[204,4],[330,4]]},"791":{"position":[[945,5]]},"792":{"position":[[1555,5],[2252,5]]},"807":{"position":[[204,4],[330,4]]},"823":{"position":[[204,4],[330,4]]},"824":{"position":[[1325,5],[2374,5]]},"897":{"position":[[200,4]]},"900":{"position":[[142,3]]},"1015":{"position":[[172,6]]},"1067":{"position":[[228,5]]},"1068":{"position":[[53,3]]},"1076":{"position":[[390,4],[473,5]]},"1085":{"position":[[1107,4]]},"1086":{"position":[[333,3]]},"1087":{"position":[[307,4]]},"1140":{"position":[[614,3]]},"1292":{"position":[[2199,3]]},"1306":{"position":[[2199,3]]},"1316":{"position":[[614,3]]},"1329":{"position":[[2199,3]]},"1340":{"position":[[614,3]]},"1351":{"position":[[614,3]]},"1379":{"position":[[2147,3]]},"1403":{"position":[[2147,3]]},"1414":{"position":[[2147,3]]},"1431":{"position":[[637,3]]},"1452":{"position":[[135,3],[154,4],[466,4],[647,5],[762,3],[981,3],[1189,4],[1194,4],[1260,4],[1344,4],[1533,4],[2715,4],[2813,4],[3697,4],[3741,4],[3801,5],[3843,4],[4017,4],[4069,5],[4094,4],[4113,5],[4129,4],[4304,5],[4508,4]]},"1456":{"position":[[262,4]]}},"keywords":{}}],["day.onc",{"_index":3832,"title":{},"content":{"479":{"position":[[828,8]]}},"keywords":{}}],["day_hour",{"_index":6037,"title":{},"content":{"1292":{"position":[[2231,8]]},"1306":{"position":[[2231,8]]},"1329":{"position":[[2231,8]]}},"keywords":{}}],["day_microseco",{"_index":6039,"title":{},"content":{"1292":{"position":[[2276,13]]},"1306":{"position":[[2276,13]]},"1329":{"position":[[2276,13]]}},"keywords":{}}],["day_minut",{"_index":6040,"title":{},"content":{"1292":{"position":[[2321,10]]},"1306":{"position":[[2321,10]]},"1329":{"position":[[2321,10]]}},"keywords":{}}],["day_second",{"_index":6043,"title":{},"content":{"1292":{"position":[[2374,10]]},"1306":{"position":[[2374,10]]},"1329":{"position":[[2374,10]]}},"keywords":{}}],["daylight",{"_index":4606,"title":{},"content":{"754":{"position":[[715,8]]},"794":{"position":[[921,8]]},"809":{"position":[[921,8]]},"825":{"position":[[757,8]]},"1286":{"position":[[978,8]]},"1301":{"position":[[814,8]]},"1325":{"position":[[978,8]]},"1452":{"position":[[3291,8]]}},"keywords":{}}],["dayspubl",{"_index":4674,"title":{},"content":{"767":{"position":[[1580,10]]},"824":{"position":[[1644,10]]}},"keywords":{}}],["db",{"_index":1628,"title":{},"content":{"115":{"position":[[776,2]]},"191":{"position":[[927,2]]},"240":{"position":[[888,2]]},"767":{"position":[[983,2],[1484,2]]},"792":{"position":[[58,2],[1143,2],[1281,2],[1469,2]]},"794":{"position":[[652,2]]},"809":{"position":[[652,2]]},"824":{"position":[[1049,2],[1548,2]]},"904":{"position":[[1049,2]]},"918":{"position":[[58,2],[1119,2],[1332,2],[1464,2]]},"1152":{"position":[[255,2]]},"1207":{"position":[[84,2],[102,2]]},"1286":{"position":[[709,2]]},"1325":{"position":[[709,2]]},"1383":{"position":[[875,2]]},"1434":{"position":[[1999,2]]},"1461":{"position":[[4173,2]]}},"keywords":{}}],["db<br/>(where",{"_index":6442,"title":{},"content":{"1434":{"position":[[631,19]]}},"keywords":{}}],["db<br/>now",{"_index":6463,"title":{},"content":{"1434":{"position":[[2039,16]]}},"keywords":{}}],["dbc",{"_index":5811,"title":{},"content":{"1189":{"position":[[81,3]]}},"keywords":{}}],["dbcc",{"_index":6323,"title":{},"content":{"1379":{"position":[[2194,4]]},"1403":{"position":[[2194,4]]},"1414":{"position":[[2194,4]]}},"keywords":{}}],["dbname",{"_index":5119,"title":{},"content":{"947":{"position":[[929,6]]}},"keywords":{}}],["dbo",{"_index":5245,"title":{},"content":{"1042":{"position":[[436,6],[555,3],[1024,6]]},"1043":{"position":[[1100,6],[1219,3],[1688,6]]},"1046":{"position":[[305,3]]},"1051":{"position":[[1362,6],[1481,3],[1950,6]]},"1054":{"position":[[305,3]]},"1059":{"position":[[1155,6],[1274,3],[1743,6]]},"1062":{"position":[[305,3]]}},"keywords":{}}],["dbo.flow_watermark",{"_index":5247,"title":{},"content":{"1042":{"position":[[785,19]]},"1043":{"position":[[1449,19]]},"1051":{"position":[[1711,19]]},"1059":{"position":[[1504,19]]}},"keywords":{}}],["dbo.flow_watermarks(slot",{"_index":5246,"title":{},"content":{"1042":{"position":[[690,24]]},"1043":{"position":[[1354,24]]},"1051":{"position":[[1616,24]]},"1059":{"position":[[1409,24]]}},"keywords":{}}],["dbt",{"_index":3162,"title":{"324":{"position":[[0,4]]}},"content":{"324":{"position":[[1,3],[190,3],[362,4],[442,3],[837,3],[1157,4],[1177,3]]}},"keywords":{}}],["dd",{"_index":3494,"title":{},"content":{"387":{"position":[[1242,2]]},"448":{"position":[[990,2]]},"496":{"position":[[458,3]]},"573":{"position":[[755,3]]},"584":{"position":[[810,3]]},"747":{"position":[[720,3],[937,3]]},"895":{"position":[[206,2]]},"897":{"position":[[112,3]]},"1009":{"position":[[880,3]]},"1085":{"position":[[814,3],[1218,3]]},"1094":{"position":[[384,2]]}},"keywords":{}}],["ddl",{"_index":2543,"title":{},"content":{"236":{"position":[[1866,3]]}},"keywords":{}}],["ddt00:00:00z",{"_index":3951,"title":{},"content":{"517":{"position":[[1522,13],[2074,13],[2687,13],[3848,13]]},"534":{"position":[[1487,13]]},"670":{"position":[[548,13]]},"959":{"position":[[256,13]]},"982":{"position":[[258,13]]},"1107":{"position":[[183,13]]},"1133":{"position":[[877,13]]}},"keywords":{}}],["ddthh:mm:ss.000z",{"_index":4842,"title":{},"content":{"859":{"position":[[543,17]]}},"keywords":{}}],["ddthh:mm:ssz"",{"_index":4930,"title":{},"content":{"891":{"position":[[210,19]]}},"keywords":{}}],["de",{"_index":2708,"title":{},"content":{"253":{"position":[[1497,3],[2441,3],[2515,3]]},"313":{"position":[[1497,3],[2441,3],[2515,3]]},"602":{"position":[[886,2]]},"1467":{"position":[[1891,2]]},"1477":{"position":[[2793,2]]}},"keywords":{}}],["deal",{"_index":1013,"title":{},"content":{"67":{"position":[[1668,7]]},"912":{"position":[[1628,4]]}},"keywords":{}}],["dealloc",{"_index":5536,"title":{},"content":{"1140":{"position":[[655,10]]},"1292":{"position":[[2412,10]]},"1306":{"position":[[2412,10]]},"1316":{"position":[[655,10]]},"1329":{"position":[[2412,10]]},"1340":{"position":[[655,10]]},"1351":{"position":[[655,10]]},"1379":{"position":[[2233,10]]},"1403":{"position":[[2233,10]]},"1414":{"position":[[2233,10]]},"1423":{"position":[[736,10]]},"1431":{"position":[[678,10]]}},"keywords":{}}],["debezium",{"_index":3132,"title":{},"content":{"320":{"position":[[2471,8]]}},"keywords":{}}],["debit",{"_index":1520,"title":{},"content":{"107":{"position":[[686,5]]},"280":{"position":[[478,7],[1687,5],[1821,7]]},"281":{"position":[[1499,5]]}},"keywords":{}}],["debitsend",{"_index":2873,"title":{},"content":{"280":{"position":[[1614,11]]}},"keywords":{}}],["debitsender.sql",{"_index":2874,"title":{},"content":{"280":{"position":[[1744,15]]}},"keywords":{}}],["debug",{"_index":245,"title":{},"content":{"7":{"position":[[469,5],[759,5]]},"285":{"position":[[394,5]]},"344":{"position":[[374,5]]},"1471":{"position":[[173,10]]}},"keywords":{}}],["dec",{"_index":5540,"title":{},"content":{"1140":{"position":[[697,3]]},"1292":{"position":[[2462,3]]},"1306":{"position":[[2462,3]]},"1316":{"position":[[697,3]]},"1329":{"position":[[2462,3]]},"1340":{"position":[[697,3]]},"1351":{"position":[[697,3]]},"1379":{"position":[[2284,3]]},"1403":{"position":[[2284,3]]},"1414":{"position":[[2284,3]]},"1431":{"position":[[720,3]]}},"keywords":{}}],["decfloat",{"_index":5542,"title":{},"content":{"1140":{"position":[[735,8]]},"1316":{"position":[[735,8]]},"1340":{"position":[[735,8]]},"1351":{"position":[[735,8]]},"1431":{"position":[[758,8]]}},"keywords":{}}],["decid",{"_index":2430,"title":{},"content":{"217":{"position":[[1296,6]]},"333":{"position":[[381,7]]}},"keywords":{}}],["decim",{"_index":5543,"title":{},"content":{"1140":{"position":[[771,7]]},"1209":{"position":[[628,7]]},"1292":{"position":[[2493,7]]},"1306":{"position":[[2493,7]]},"1316":{"position":[[771,7]]},"1329":{"position":[[2493,7]]},"1340":{"position":[[771,7]]},"1351":{"position":[[771,7]]},"1379":{"position":[[2318,7]]},"1403":{"position":[[2318,7]]},"1414":{"position":[[2318,7]]},"1431":{"position":[[794,7]]}},"keywords":{}}],["decis",{"_index":3201,"title":{},"content":{"331":{"position":[[591,9]]}},"keywords":{}}],["declar",{"_index":1043,"title":{},"content":{"70":{"position":[[28,7],[454,8]]},"71":{"position":[[28,7]]},"76":{"position":[[328,7]]},"122":{"position":[[153,11]]},"210":{"position":[[518,11]]},"254":{"position":[[2216,7]]},"314":{"position":[[1757,7]]},"319":{"position":[[1149,8]]},"323":{"position":[[1951,11]]},"324":{"position":[[379,11]]},"332":{"position":[[733,11]]},"805":{"position":[[28,7]]},"820":{"position":[[28,7]]},"836":{"position":[[28,7]]},"1032":{"position":[[169,12]]},"1140":{"position":[[813,7]]},"1292":{"position":[[2529,7]]},"1306":{"position":[[2529,7]]},"1316":{"position":[[813,7]]},"1329":{"position":[[2529,7]]},"1340":{"position":[[813,7]]},"1351":{"position":[[813,7]]},"1379":{"position":[[2366,7]]},"1403":{"position":[[2366,7]]},"1414":{"position":[[2366,7]]},"1431":{"position":[[836,7]]}},"keywords":{}}],["decod",{"_index":3392,"title":{},"content":{"366":{"position":[[67,8]]},"922":{"position":[[869,8]]},"1118":{"position":[[543,6]]}},"keywords":{}}],["decompress",{"_index":3596,"title":{},"content":{"417":{"position":[[1505,10]]},"502":{"position":[[1153,10]]},"545":{"position":[[1107,10]]},"637":{"position":[[667,10]]},"1021":{"position":[[1664,10]]}},"keywords":{}}],["decreas",{"_index":535,"title":{},"content":{"20":{"position":[[478,8]]}},"keywords":{}}],["decrypt",{"_index":1147,"title":{},"content":{"82":{"position":[[399,8],[687,10],[2932,10],[3274,7]]}},"keywords":{}}],["dedic",{"_index":2568,"title":{"864":{"position":[[9,9]]},"876":{"position":[[9,9]]}},"content":{"237":{"position":[[353,9]]},"239":{"position":[[2751,9]]},"324":{"position":[[1137,9]]},"477":{"position":[[322,9]]},"598":{"position":[[286,9]]},"862":{"position":[[121,9]]},"864":{"position":[[12,9]]},"874":{"position":[[121,9]]},"876":{"position":[[12,9]]},"943":{"position":[[37,9]]},"964":{"position":[[622,9],[760,9]]},"985":{"position":[[520,9]]},"987":{"position":[[276,9]]},"989":{"position":[[49,9]]},"1000":{"position":[[698,9]]},"1002":{"position":[[276,9]]},"1004":{"position":[[49,9]]}},"keywords":{}}],["dedupl",{"_index":4406,"title":{},"content":{"660":{"position":[[409,11],[611,13],[910,11]]},"661":{"position":[[28,13],[112,11]]}},"keywords":{}}],["deep",{"_index":3004,"title":{},"content":{"296":{"position":[[2287,4]]},"1467":{"position":[[218,4],[1787,4]]}},"keywords":{}}],["deeper",{"_index":2322,"title":{},"content":{"210":{"position":[[2189,6]]}},"keywords":{}}],["deepli",{"_index":745,"title":{},"content":{"42":{"position":[[632,6]]},"164":{"position":[[585,6]]},"1467":{"position":[[708,6]]},"1476":{"position":[[1046,6]]},"1477":{"position":[[636,6]]}},"keywords":{}}],["default",{"_index":31,"title":{"166":{"position":[[0,7]]},"338":{"position":[[0,7]]}},"content":{"1":{"position":[[368,7],[494,7],[661,7],[792,7]]},"7":{"position":[[564,7]]},"17":{"position":[[519,8],[905,8]]},"42":{"position":[[443,8],[583,7]]},"56":{"position":[[2639,8]]},"62":{"position":[[204,8]]},"68":{"position":[[1563,8]]},"82":{"position":[[1569,7],[1631,7]]},"89":{"position":[[96,7]]},"94":{"position":[[1493,7],[1824,7],[2190,7],[2687,8],[3133,8]]},"120":{"position":[[1376,7],[1742,7],[2570,8]]},"122":{"position":[[948,7],[1706,8],[2215,8]]},"159":{"position":[[491,7]]},"163":{"position":[[274,7]]},"166":{"position":[[13,7],[299,7],[469,8],[493,7]]},"184":{"position":[[502,8]]},"192":{"position":[[1237,7]]},"203":{"position":[[356,7]]},"217":{"position":[[1401,8]]},"221":{"position":[[774,7]]},"225":{"position":[[218,7]]},"236":{"position":[[2516,7],[3301,7]]},"239":{"position":[[1735,8],[2871,7]]},"240":{"position":[[3061,7],[4156,8]]},"268":{"position":[[1369,8]]},"269":{"position":[[940,8]]},"308":{"position":[[228,7]]},"315":{"position":[[1285,7]]},"343":{"position":[[700,8],[1038,7]]},"355":{"position":[[50,8]]},"366":{"position":[[468,7]]},"367":{"position":[[506,7]]},"368":{"position":[[45,8]]},"379":{"position":[[1093,7]]},"381":{"position":[[543,8]]},"402":{"position":[[184,7]]},"417":{"position":[[1534,8],[1686,8],[2102,7]]},"419":{"position":[[231,8]]},"421":{"position":[[142,8]]},"429":{"position":[[63,7]]},"440":{"position":[[247,8]]},"443":{"position":[[501,8]]},"451":{"position":[[151,8]]},"454":{"position":[[509,7]]},"457":{"position":[[155,8]]},"463":{"position":[[261,8]]},"479":{"position":[[747,7]]},"480":{"position":[[1510,7]]},"483":{"position":[[201,7]]},"488":{"position":[[257,9]]},"492":{"position":[[440,8]]},"494":{"position":[[196,7]]},"496":{"position":[[267,7]]},"499":{"position":[[260,8]]},"502":{"position":[[1182,8],[1334,8]]},"504":{"position":[[168,8]]},"506":{"position":[[418,8]]},"512":{"position":[[131,8]]},"515":{"position":[[237,8]]},"517":{"position":[[15,8]]},"534":{"position":[[422,7]]},"537":{"position":[[164,8]]},"543":{"position":[[363,7]]},"545":{"position":[[713,7],[1136,8],[1288,8]]},"547":{"position":[[232,8]]},"550":{"position":[[415,8]]},"568":{"position":[[66,8]]},"574":{"position":[[33,7],[384,7]]},"577":{"position":[[463,7]]},"585":{"position":[[33,7]]},"588":{"position":[[458,7]]},"605":{"position":[[373,8]]},"622":{"position":[[379,8]]},"628":{"position":[[443,8]]},"631":{"position":[[462,7]]},"634":{"position":[[252,8]]},"637":{"position":[[696,8],[848,8]]},"639":{"position":[[167,8]]},"649":{"position":[[4,8]]},"657":{"position":[[487,8]]},"659":{"position":[[414,9]]},"660":{"position":[[539,8]]},"665":{"position":[[440,8]]},"667":{"position":[[228,8]]},"676":{"position":[[257,9]]},"680":{"position":[[440,8]]},"682":{"position":[[199,8]]},"691":{"position":[[257,9]]},"695":{"position":[[440,8]]},"697":{"position":[[568,8]]},"703":{"position":[[133,8]]},"709":{"position":[[821,8]]},"715":{"position":[[190,8]]},"738":{"position":[[745,8]]},"744":{"position":[[135,8]]},"747":{"position":[[355,7],[401,7],[583,7],[642,7],[658,7],[862,8],[1044,7],[1130,7],[1331,7]]},"750":{"position":[[374,7],[645,7],[1224,8]]},"754":{"position":[[64,8]]},"755":{"position":[[45,8]]},"766":{"position":[[374,7],[645,7],[1224,8]]},"768":{"position":[[45,8]]},"789":{"position":[[125,7],[184,7],[633,7],[1625,8]]},"791":{"position":[[917,7]]},"794":{"position":[[62,8]]},"795":{"position":[[43,8]]},"807":{"position":[[125,7],[184,7],[633,7],[1212,8]]},"809":{"position":[[62,8]]},"810":{"position":[[43,8]]},"821":{"position":[[835,7]]},"823":{"position":[[125,7],[184,7],[633,7],[1212,8]]},"825":{"position":[[62,8]]},"826":{"position":[[43,8]]},"842":{"position":[[248,8],[2756,7]]},"854":{"position":[[84,8]]},"857":{"position":[[105,8],[182,8]]},"867":{"position":[[357,8],[1618,8]]},"869":{"position":[[1444,7]]},"870":{"position":[[229,8]]},"877":{"position":[[154,7]]},"879":{"position":[[1390,7],[1407,7]]},"882":{"position":[[95,8]]},"888":{"position":[[150,8]]},"895":{"position":[[434,8]]},"897":{"position":[[156,9]]},"903":{"position":[[494,7]]},"904":{"position":[[1606,7]]},"905":{"position":[[48,8]]},"912":{"position":[[854,7]]},"915":{"position":[[494,7]]},"917":{"position":[[514,7]]},"918":{"position":[[1898,7]]},"919":{"position":[[1051,7],[1697,7]]},"920":{"position":[[48,8]]},"922":{"position":[[1504,7],[2096,8]]},"930":{"position":[[494,7]]},"931":{"position":[[1268,7]]},"932":{"position":[[48,8]]},"943":{"position":[[133,7]]},"944":{"position":[[257,7]]},"948":{"position":[[48,8]]},"956":{"position":[[171,8]]},"963":{"position":[[648,7]]},"964":{"position":[[4,8]]},"965":{"position":[[514,7]]},"966":{"position":[[48,8]]},"979":{"position":[[245,8]]},"994":{"position":[[103,8]]},"1012":{"position":[[230,8]]},"1021":{"position":[[1693,8],[1845,8]]},"1023":{"position":[[212,8]]},"1025":{"position":[[377,8]]},"1028":{"position":[[194,7]]},"1031":{"position":[[287,7]]},"1034":{"position":[[575,7]]},"1036":{"position":[[320,8]]},"1042":{"position":[[420,7]]},"1043":{"position":[[664,7],[1084,7]]},"1051":{"position":[[920,7],[1346,7]]},"1059":{"position":[[684,7],[1139,7]]},"1065":{"position":[[102,8]]},"1073":{"position":[[354,8]]},"1080":{"position":[[811,8]]},"1099":{"position":[[475,8]]},"1104":{"position":[[173,8]]},"1110":{"position":[[493,8]]},"1113":{"position":[[429,7]]},"1123":{"position":[[66,8]]},"1125":{"position":[[706,7]]},"1128":{"position":[[410,8]]},"1140":{"position":[[862,7]]},"1144":{"position":[[645,8],[949,8],[1113,8]]},"1151":{"position":[[453,7],[1507,7]]},"1158":{"position":[[70,7]]},"1170":{"position":[[645,8],[965,8],[1109,8]]},"1179":{"position":[[873,9]]},"1182":{"position":[[70,7]]},"1186":{"position":[[573,7]]},"1188":{"position":[[166,7],[387,7],[427,7]]},"1189":{"position":[[199,7],[492,7]]},"1191":{"position":[[70,7],[641,7]]},"1192":{"position":[[579,7]]},"1195":{"position":[[586,8]]},"1196":{"position":[[829,8],[1204,8]]},"1213":{"position":[[500,8],[626,8],[790,8]]},"1220":{"position":[[500,8],[642,8],[786,8]]},"1230":{"position":[[622,7],[706,7],[738,8],[891,7],[921,7]]},"1239":{"position":[[190,8]]},"1256":{"position":[[70,7]]},"1262":{"position":[[70,7]]},"1267":{"position":[[142,7]]},"1275":{"position":[[131,8]]},"1276":{"position":[[347,8]]},"1277":{"position":[[601,7]]},"1279":{"position":[[300,9]]},"1285":{"position":[[232,7]]},"1286":{"position":[[62,8]]},"1289":{"position":[[1343,8]]},"1290":{"position":[[70,7]]},"1292":{"position":[[2565,7]]},"1298":{"position":[[1175,8]]},"1300":{"position":[[232,7]]},"1301":{"position":[[62,8]]},"1303":{"position":[[1054,8]]},"1304":{"position":[[70,7]]},"1306":{"position":[[2565,7]]},"1310":{"position":[[664,8]]},"1313":{"position":[[223,7]]},"1315":{"position":[[71,7]]},"1316":{"position":[[862,7]]},"1322":{"position":[[1562,8]]},"1324":{"position":[[232,7]]},"1325":{"position":[[62,8]]},"1327":{"position":[[70,7]]},"1329":{"position":[[2565,7]]},"1335":{"position":[[1210,8]]},"1337":{"position":[[223,7]]},"1339":{"position":[[70,7]]},"1340":{"position":[[862,7]]},"1346":{"position":[[1176,8]]},"1348":{"position":[[223,7]]},"1350":{"position":[[70,7]]},"1351":{"position":[[862,7]]},"1358":{"position":[[945,8]]},"1370":{"position":[[803,7]]},"1373":{"position":[[902,7]]},"1374":{"position":[[902,7]]},"1376":{"position":[[232,7]]},"1378":{"position":[[70,7]]},"1379":{"position":[[2414,7]]},"1389":{"position":[[70,7]]},"1397":{"position":[[681,7]]},"1398":{"position":[[680,7]]},"1400":{"position":[[232,7]]},"1402":{"position":[[70,7]]},"1403":{"position":[[2414,7]]},"1409":{"position":[[664,7]]},"1411":{"position":[[232,7]]},"1413":{"position":[[70,7]]},"1414":{"position":[[2414,7]]},"1420":{"position":[[186,7]]},"1421":{"position":[[518,7]]},"1430":{"position":[[70,7]]},"1431":{"position":[[885,7]]},"1452":{"position":[[536,8],[2526,7]]},"1463":{"position":[[210,7]]},"1471":{"position":[[651,8]]},"1480":{"position":[[1082,7],[1448,7]]}},"keywords":{}}],["default)debugtrac",{"_index":2917,"title":{},"content":{"285":{"position":[[164,19]]}},"keywords":{}}],["default_auth",{"_index":6051,"title":{},"content":{"1292":{"position":[[2602,12]]},"1306":{"position":[[2602,12]]},"1329":{"position":[[2602,12]]}},"keywords":{}}],["default_rol",{"_index":2148,"title":{},"content":{"191":{"position":[[1196,12]]},"240":{"position":[[1157,12]]},"1032":{"position":[[853,12]]},"1383":{"position":[[1144,12]]}},"keywords":{}}],["default_warehous",{"_index":2149,"title":{},"content":{"191":{"position":[[1225,17]]},"240":{"position":[[1186,17]]},"1032":{"position":[[882,17]]},"1383":{"position":[[1173,17]]}},"keywords":{}}],["defect",{"_index":2900,"title":{},"content":{"281":{"position":[[2516,7]]}},"keywords":{}}],["defer",{"_index":5550,"title":{},"content":{"1140":{"position":[[936,8]]},"1316":{"position":[[936,8]]},"1340":{"position":[[936,8]]},"1351":{"position":[[936,8]]},"1370":{"position":[[834,8]]},"1379":{"position":[[2517,8]]},"1403":{"position":[[2517,8]]},"1414":{"position":[[2517,8]]},"1431":{"position":[[959,8]]},"1434":{"position":[[1353,8]]},"1442":{"position":[[881,8]]},"1443":{"position":[[280,5],[825,8]]}},"keywords":{}}],["deferr",{"_index":5548,"title":{},"content":{"1140":{"position":[[898,10]]},"1316":{"position":[[898,10]]},"1340":{"position":[[898,10]]},"1351":{"position":[[898,10]]},"1370":{"position":[[817,10]]},"1379":{"position":[[2465,10]]},"1403":{"position":[[2465,10]]},"1414":{"position":[[2465,10]]},"1431":{"position":[[921,10]]}},"keywords":{}}],["defin",{"_index":312,"title":{},"content":{"11":{"position":[[603,7]]},"24":{"position":[[22,7]]},"33":{"position":[[179,7]]},"46":{"position":[[94,6]]},"56":{"position":[[14,7],[933,7],[1340,6],[1556,7],[1854,7]]},"61":{"position":[[68,6]]},"64":{"position":[[99,6],[590,6],[639,6]]},"69":{"position":[[17,7]]},"75":{"position":[[195,7]]},"76":{"position":[[690,6],[812,6]]},"81":{"position":[[705,6]]},"83":{"position":[[732,6]]},"90":{"position":[[417,6]]},"91":{"position":[[118,6]]},"97":{"position":[[63,7]]},"99":{"position":[[257,7]]},"100":{"position":[[157,7]]},"105":{"position":[[336,7]]},"107":{"position":[[1251,7],[3180,6]]},"108":{"position":[[18,7]]},"110":{"position":[[22,6]]},"115":{"position":[[73,6]]},"120":{"position":[[22,7],[260,7],[699,6],[861,7],[2001,7]]},"133":{"position":[[235,6]]},"156":{"position":[[47,8],[124,7],[312,6]]},"159":{"position":[[517,6]]},"162":{"position":[[821,7],[1422,7],[1569,7],[1688,6],[1782,6]]},"164":{"position":[[25,7],[1410,6]]},"165":{"position":[[1677,7]]},"182":{"position":[[609,7],[652,6]]},"192":{"position":[[1344,7]]},"236":{"position":[[1962,7],[2634,6]]},"237":{"position":[[1240,8],[1968,7]]},"239":{"position":[[1164,7],[2178,6]]},"254":{"position":[[934,6],[1134,7],[1172,6],[1305,7],[1899,7],[2128,7],[2937,6]]},"255":{"position":[[843,7]]},"279":{"position":[[451,6]]},"296":{"position":[[1013,6],[1838,7],[2135,6],[2512,7],[2635,7],[2998,7],[6597,6],[6744,7]]},"305":{"position":[[306,7]]},"306":{"position":[[249,7]]},"307":{"position":[[982,7]]},"309":{"position":[[2061,7]]},"314":{"position":[[612,6],[855,7],[893,6],[995,6],[1658,7]]},"315":{"position":[[2495,7]]},"316":{"position":[[1168,7]]},"319":{"position":[[1048,6]]},"322":{"position":[[1372,6]]},"324":{"position":[[460,8]]},"326":{"position":[[424,7]]},"402":{"position":[[770,7]]},"410":{"position":[[140,6]]},"413":{"position":[[314,6]]},"419":{"position":[[194,7]]},"440":{"position":[[210,7]]},"483":{"position":[[42,7]]},"487":{"position":[[605,6]]},"504":{"position":[[131,7]]},"517":{"position":[[1150,6],[1364,6],[1853,6]]},"547":{"position":[[195,7]]},"556":{"position":[[1105,7]]},"574":{"position":[[505,8]]},"639":{"position":[[130,7]]},"747":{"position":[[1176,7]]},"1023":{"position":[[175,7]]},"1140":{"position":[[996,6]]},"1194":{"position":[[196,8]]},"1292":{"position":[[2650,7]]},"1306":{"position":[[2650,7]]},"1316":{"position":[[996,6]]},"1329":{"position":[[2650,7]]},"1340":{"position":[[996,6]]},"1351":{"position":[[996,6]]},"1358":{"position":[[293,7],[508,7],[819,7]]},"1431":{"position":[[1019,6]]},"1435":{"position":[[503,7]]},"1461":{"position":[[1560,8],[3181,6]]},"1480":{"position":[[35,7],[197,7]]}},"keywords":{}}],["definit",{"_index":254,"title":{},"content":{"7":{"position":[[661,10]]},"16":{"position":[[118,11]]},"64":{"position":[[291,11],[741,11]]},"69":{"position":[[335,10]]},"122":{"position":[[232,11]]},"157":{"position":[[264,11]]},"158":{"position":[[555,11],[642,11]]},"225":{"position":[[538,11]]},"234":{"position":[[128,10]]},"236":{"position":[[374,11],[2577,11]]},"296":{"position":[[1117,11]]},"314":{"position":[[1426,10],[1629,11],[2107,10]]},"371":{"position":[[19,10],[1429,10],[1559,12]]},"393":{"position":[[19,10],[412,10],[528,13]]},"398":{"position":[[19,10],[411,10],[519,12]]},"418":{"position":[[478,10],[611,12]]},"433":{"position":[[302,10],[838,10],[951,13]]},"497":{"position":[[317,10],[437,12]]},"518":{"position":[[1699,12]]},"546":{"position":[[1185,10],[1319,12]]},"575":{"position":[[1295,12]]},"620":{"position":[[365,12]]},"655":{"position":[[430,12]]},"736":{"position":[[470,12]]},"758":{"position":[[19,10],[413,10],[543,12]]},"771":{"position":[[19,10],[413,10],[543,12]]},"798":{"position":[[19,10],[411,10],[541,12]]},"813":{"position":[[19,10],[411,10],[541,12]]},"829":{"position":[[19,10],[411,10],[541,12]]},"908":{"position":[[19,10],[457,10],[587,12]]},"924":{"position":[[19,10],[457,10],[587,12]]},"935":{"position":[[19,10],[457,10],[587,12]]},"951":{"position":[[19,10],[457,10],[587,12]]},"969":{"position":[[19,10],[457,10],[587,12]]},"1040":{"position":[[269,10]]},"1046":{"position":[[391,10],[521,12]]},"1047":{"position":[[300,10]]},"1050":{"position":[[269,10]]},"1054":{"position":[[391,10],[521,12]]},"1055":{"position":[[300,10]]},"1058":{"position":[[269,10]]},"1062":{"position":[[391,10],[521,12]]},"1063":{"position":[[300,10]]},"1204":{"position":[[171,11]]},"1292":{"position":[[2686,10]]},"1306":{"position":[[2686,10]]},"1329":{"position":[[2686,10]]}},"keywords":{}}],["definitionsaudit",{"_index":5444,"title":{},"content":{"1128":{"position":[[98,16]]}},"keywords":{}}],["degre",{"_index":3146,"title":{},"content":{"321":{"position":[[2278,6]]},"332":{"position":[[514,8]]}},"keywords":{}}],["dekaf",{"_index":2628,"title":{"244":{"position":[[44,5]]},"248":{"position":[[18,6]]},"1115":{"position":[[0,5]]},"1116":{"position":[[10,5]]}},"content":{"247":{"position":[[32,6]]}},"keywords":{}}],["dekaf.estuary.dev:9092",{"_index":2648,"title":{},"content":{"250":{"position":[[283,25],[1445,22]]}},"keywords":{}}],["dekaf.estuary.devsasl",{"_index":5410,"title":{},"content":{"1118":{"position":[[388,21]]}},"keywords":{}}],["dekaf.estuary.devschema",{"_index":2636,"title":{},"content":{"247":{"position":[[99,23]]}},"keywords":{}}],["delay",{"_index":35,"title":{"110":{"position":[[5,6]]}},"content":{"1":{"position":[[424,5]]},"94":{"position":[[2601,5],[2699,6]]},"110":{"position":[[36,6],[118,5],[162,5],[370,7],[419,5],[902,5],[974,5],[1195,6],[1255,7],[1334,6]]},"163":{"position":[[751,6]]},"240":{"position":[[3117,5],[3347,5],[3470,5]]},"279":{"position":[[30,7],[822,5]]},"375":{"position":[[191,6]]},"377":{"position":[[587,6]]},"642":{"position":[[215,7]]},"1186":{"position":[[455,6],[581,5]]},"1292":{"position":[[2728,7]]},"1306":{"position":[[2728,7]]},"1329":{"position":[[2728,7]]},"1451":{"position":[[698,7],[741,5],[878,8]]}},"keywords":{}}],["delay"",{"_index":2605,"title":{},"content":{"240":{"position":[[2999,11],[4831,11]]}},"keywords":{}}],["delay_key_wri",{"_index":6058,"title":{},"content":{"1292":{"position":[[2777,13]]},"1306":{"position":[[2777,13]]},"1329":{"position":[[2777,13]]}},"keywords":{}}],["delaylearn",{"_index":1584,"title":{},"content":{"110":{"position":[[1494,10]]}},"keywords":{}}],["delayor",{"_index":1563,"title":{},"content":{"109":{"position":[[762,7]]}},"keywords":{}}],["deleg",{"_index":4304,"title":{},"content":{"609":{"position":[[379,10]]}},"keywords":{}}],["delet",{"_index":906,"title":{},"content":{"60":{"position":[[619,6]]},"97":{"position":[[356,6]]},"117":{"position":[[535,8]]},"138":{"position":[[232,6],[382,6]]},"141":{"position":[[542,6],[692,6]]},"142":{"position":[[345,6],[495,6]]},"168":{"position":[[256,7]]},"185":{"position":[[265,6]]},"196":{"position":[[165,10]]},"197":{"position":[[462,9],[1021,6],[1111,6],[1401,7]]},"210":{"position":[[4021,8]]},"233":{"position":[[165,10],[689,8]]},"242":{"position":[[913,6]]},"255":{"position":[[1071,6]]},"271":{"position":[[380,8]]},"279":{"position":[[1670,6]]},"296":{"position":[[8036,8]]},"297":{"position":[[140,6]]},"316":{"position":[[1396,6]]},"406":{"position":[[240,6],[359,6]]},"408":{"position":[[406,6],[433,6]]},"411":{"position":[[15,6],[56,7]]},"517":{"position":[[3025,7],[3051,7]]},"750":{"position":[[865,6]]},"752":{"position":[[817,6]]},"753":{"position":[[1473,6]]},"761":{"position":[[112,6]]},"766":{"position":[[865,6]]},"767":{"position":[[2150,6]]},"774":{"position":[[112,6]]},"786":{"position":[[225,6]]},"789":{"position":[[1266,6]]},"791":{"position":[[822,6]]},"792":{"position":[[2142,6]]},"793":{"position":[[1496,6]]},"801":{"position":[[112,6]]},"807":{"position":[[853,6]]},"808":{"position":[[1442,6]]},"816":{"position":[[112,6]]},"821":{"position":[[286,6]]},"823":{"position":[[853,6]]},"824":{"position":[[2264,6]]},"832":{"position":[[112,6]]},"911":{"position":[[582,8]]},"912":{"position":[[297,6]]},"922":{"position":[[1194,8],[1674,8],[1751,8]]},"927":{"position":[[582,8]]},"938":{"position":[[582,8]]},"954":{"position":[[582,8]]},"972":{"position":[[582,8]]},"1067":{"position":[[214,7]]},"1140":{"position":[[1036,6]]},"1208":{"position":[[66,8]]},"1209":{"position":[[651,6]]},"1292":{"position":[[2819,6]]},"1306":{"position":[[2819,6]]},"1316":{"position":[[1036,6]]},"1329":{"position":[[2819,6]]},"1340":{"position":[[1036,6]]},"1351":{"position":[[1036,6]]},"1370":{"position":[[853,6]]},"1379":{"position":[[2574,6]]},"1394":{"position":[[964,6]]},"1403":{"position":[[2574,6]]},"1414":{"position":[[2574,6]]},"1423":{"position":[[763,6]]},"1431":{"position":[[1059,6]]}},"keywords":{}}],["delete."",{"_index":2297,"title":{},"content":{"210":{"position":[[1207,13]]}},"keywords":{}}],["delete_messag",{"_index":3567,"title":{},"content":{"408":{"position":[[389,16]]}},"keywords":{}}],["deletefrom",{"_index":2837,"title":{},"content":{"278":{"position":[[644,10]]}},"keywords":{}}],["delimit",{"_index":105,"title":{},"content":{"3":{"position":[[111,9]]},"183":{"position":[[862,9]]},"267":{"position":[[1252,9]]},"270":{"position":[[881,9]]},"418":{"position":[[185,10]]},"419":{"position":[[1622,10]]},"439":{"position":[[442,10]]},"441":{"position":[[231,10]]},"504":{"position":[[1251,10]]},"534":{"position":[[272,9],[1143,9]]},"546":{"position":[[922,10]]},"547":{"position":[[1624,10]]},"638":{"position":[[214,10]]},"639":{"position":[[1249,10]]},"1022":{"position":[[251,10]]},"1023":{"position":[[1605,10]]},"1144":{"position":[[895,9]]},"1213":{"position":[[572,9]]}},"keywords":{}}],["deliv",{"_index":2201,"title":{},"content":{"198":{"position":[[810,9]]},"324":{"position":[[557,10]]},"330":{"position":[[53,7]]},"602":{"position":[[189,7]]},"1230":{"position":[[655,9]]}},"keywords":{}}],["deliveri",{"_index":4404,"title":{},"content":{"660":{"position":[[9,8]]}},"keywords":{}}],["delivery"",{"_index":4294,"title":{},"content":{"602":{"position":[[274,15]]}},"keywords":{}}],["delta",{"_index":1014,"title":{"125":{"position":[[0,5]]},"1158":{"position":[[0,5]]},"1182":{"position":[[0,5]]},"1191":{"position":[[0,5]]},"1199":{"position":[[0,5]]},"1208":{"position":[[0,5]]},"1233":{"position":[[0,5]]},"1256":{"position":[[0,5]]},"1262":{"position":[[0,5]]},"1279":{"position":[[0,5]]},"1290":{"position":[[0,5]]},"1304":{"position":[[0,5]]},"1315":{"position":[[0,5]]},"1327":{"position":[[0,5]]},"1339":{"position":[[0,5]]},"1350":{"position":[[0,5]]},"1358":{"position":[[0,5]]},"1369":{"position":[[0,5]]},"1378":{"position":[[0,5]]},"1389":{"position":[[0,5]]},"1402":{"position":[[0,5]]},"1413":{"position":[[0,5]]},"1430":{"position":[[0,5]]},"1440":{"position":[[22,5]]}},"content":{"67":{"position":[[1711,5]]},"125":{"position":[[711,5],[742,5],[1035,5],[1347,5]]},"291":{"position":[[1218,5]]},"302":{"position":[[1164,5]]},"326":{"position":[[702,5]]},"379":{"position":[[837,6],[1174,5]]},"602":{"position":[[979,5]]},"909":{"position":[[1205,5]]},"925":{"position":[[1205,5]]},"936":{"position":[[1205,5]]},"952":{"position":[[1205,5]]},"970":{"position":[[1205,5]]},"1007":{"position":[[105,5],[143,5]]},"1125":{"position":[[637,5],[691,5]]},"1138":{"position":[[1497,5],[1551,5]]},"1151":{"position":[[1438,5],[1492,5]]},"1158":{"position":[[51,5]]},"1162":{"position":[[960,5],[1015,5],[1069,5]]},"1179":{"position":[[1260,5],[1302,5]]},"1182":{"position":[[51,5],[116,5],[321,5],[422,5],[546,5]]},"1188":{"position":[[881,5],[922,5]]},"1191":{"position":[[51,5],[116,5],[323,5],[424,5],[550,5]]},"1196":{"position":[[1021,5],[1062,5]]},"1199":{"position":[[43,5],[120,5]]},"1208":{"position":[[132,5],[172,6]]},"1233":{"position":[[95,5]]},"1253":{"position":[[526,5],[580,5]]},"1256":{"position":[[51,5]]},"1260":{"position":[[986,5],[1040,5]]},"1262":{"position":[[51,5],[116,5],[323,5],[424,5],[550,5]]},"1279":{"position":[[33,5]]},"1286":{"position":[[2702,5],[2756,5]]},"1290":{"position":[[51,5]]},"1301":{"position":[[2538,5],[2592,5]]},"1304":{"position":[[51,5]]},"1313":{"position":[[1041,5],[1095,5]]},"1315":{"position":[[51,5]]},"1325":{"position":[[2702,5],[2756,5]]},"1327":{"position":[[51,5]]},"1337":{"position":[[1041,5],[1095,5]]},"1339":{"position":[[51,5]]},"1348":{"position":[[1041,5],[1095,5]]},"1350":{"position":[[51,5]]},"1358":{"position":[[40,5]]},"1369":{"position":[[33,5]]},"1376":{"position":[[617,5],[671,5]]},"1378":{"position":[[51,5]]},"1384":{"position":[[40,5],[1222,5]]},"1386":{"position":[[1275,5],[1316,5]]},"1389":{"position":[[51,5],[116,5],[322,5],[423,5],[548,5]]},"1392":{"position":[[153,5]]},"1400":{"position":[[617,5],[671,5]]},"1402":{"position":[[51,5]]},"1411":{"position":[[617,5],[671,5]]},"1413":{"position":[[51,5]]},"1427":{"position":[[801,5],[855,5]]},"1430":{"position":[[51,5]]},"1440":{"position":[[286,5],[431,5],[563,5],[891,5],[969,5],[1072,5],[1107,5],[1260,5],[1353,5],[1507,5]]},"1443":{"position":[[1105,5]]}},"keywords":{}}],["delta_upd",{"_index":5441,"title":{},"content":{"1125":{"position":[[622,14]]},"1138":{"position":[[1482,14]]},"1151":{"position":[[1423,14]]},"1162":{"position":[[945,14]]},"1163":{"position":[[347,14]]},"1179":{"position":[[1245,14]]},"1182":{"position":[[629,14]]},"1188":{"position":[[866,14]]},"1191":{"position":[[649,14]]},"1196":{"position":[[1006,14]]},"1253":{"position":[[511,14]]},"1260":{"position":[[971,14]]},"1262":{"position":[[633,14]]},"1286":{"position":[[2687,14]]},"1301":{"position":[[2523,14]]},"1313":{"position":[[1026,14]]},"1325":{"position":[[2687,14]]},"1337":{"position":[[1026,14]]},"1348":{"position":[[1026,14]]},"1376":{"position":[[602,14]]},"1386":{"position":[[1260,14]]},"1389":{"position":[[631,14]]},"1400":{"position":[[602,14]]},"1411":{"position":[[602,14]]},"1427":{"position":[[786,14]]}},"keywords":{}}],["delv",{"_index":2321,"title":{},"content":{"210":{"position":[[2183,5]]}},"keywords":{}}],["demo",{"_index":2056,"title":{"181":{"position":[[22,5]]}},"content":{"181":{"position":[[22,4],[174,4]]},"184":{"position":[[344,5]]},"236":{"position":[[1940,4]]},"253":{"position":[[358,5],[419,4],[1106,4]]},"254":{"position":[[1149,5],[3131,4]]},"313":{"position":[[358,5],[419,4],[1106,4]]},"314":{"position":[[870,5],[2706,4]]}},"keywords":{}}],["demo/wikipedia/recentchang",{"_index":2058,"title":{},"content":{"182":{"position":[[62,27],[378,27]]},"183":{"position":[[249,28],[1383,27],[3903,27]]},"184":{"position":[[666,27]]},"253":{"position":[[515,27],[618,27],[890,27]]},"254":{"position":[[621,27],[2678,27],[3037,27]]},"313":{"position":[[515,27],[618,27],[890,27]]},"314":{"position":[[498,27],[2353,27],[2612,27]]}},"keywords":{}}],["demonstr",{"_index":2618,"title":{},"content":{"241":{"position":[[373,12]]},"253":{"position":[[736,11]]},"313":{"position":[[736,11]]}},"keywords":{}}],["deni",{"_index":2861,"title":{},"content":{"280":{"position":[[316,4],[1368,6],[1415,5]]},"1379":{"position":[[2614,4]]},"1403":{"position":[[2614,4]]},"1414":{"position":[[2614,4]]}},"keywords":{}}],["deno",{"_index":1480,"title":{},"content":{"103":{"position":[[778,4]]}},"keywords":{}}],["deno.json",{"_index":1478,"title":{},"content":{"103":{"position":[[672,9]]},"296":{"position":[[3862,9],[4112,9]]},"315":{"position":[[319,9],[591,9]]}},"keywords":{}}],["denoand",{"_index":1460,"title":{},"content":{"102":{"position":[[179,7]]}},"keywords":{}}],["dense_rank",{"_index":5559,"title":{},"content":{"1140":{"position":[[1082,10]]},"1292":{"position":[[2873,10]]},"1306":{"position":[[2873,10]]},"1316":{"position":[[1082,10]]},"1329":{"position":[[2873,10]]},"1340":{"position":[[1082,10]]},"1351":{"position":[[1082,10]]},"1431":{"position":[[1105,10]]}},"keywords":{}}],["depart",{"_index":2826,"title":{},"content":{"277":{"position":[[102,10],[1254,10]]}},"keywords":{}}],["depend",{"_index":515,"title":{},"content":{"19":{"position":[[183,9]]},"26":{"position":[[586,9]]},"63":{"position":[[756,12],[861,12]]},"66":{"position":[[620,7]]},"91":{"position":[[198,12]]},"94":{"position":[[2307,7]]},"101":{"position":[[42,6]]},"115":{"position":[[1293,7]]},"125":{"position":[[1376,7]]},"135":{"position":[[136,9]]},"159":{"position":[[983,7]]},"209":{"position":[[1309,7]]},"217":{"position":[[1136,9]]},"218":{"position":[[1326,9]]},"221":{"position":[[794,9]]},"225":{"position":[[238,9]]},"263":{"position":[[948,9]]},"306":{"position":[[73,9]]},"309":{"position":[[133,7]]},"320":{"position":[[1876,9]]},"339":{"position":[[140,9]]},"522":{"position":[[348,7]]},"530":{"position":[[348,7]]},"534":{"position":[[996,7]]},"595":{"position":[[1782,9]]},"754":{"position":[[655,9]]},"785":{"position":[[498,7]]},"794":{"position":[[861,9]]},"809":{"position":[[861,9]]},"821":{"position":[[989,9]]},"825":{"position":[[697,9]]},"870":{"position":[[152,9]]},"922":{"position":[[3187,7]]},"1081":{"position":[[22,9]]},"1172":{"position":[[90,9]]},"1222":{"position":[[90,9]]},"1243":{"position":[[1353,6]]},"1286":{"position":[[918,9]]},"1301":{"position":[[754,9]]},"1325":{"position":[[918,9]]},"1436":{"position":[[92,7]]},"1449":{"position":[[670,9]]},"1461":{"position":[[2541,10]]}},"keywords":{}}],["depends_on",{"_index":2537,"title":{},"content":{"236":{"position":[[1428,11]]}},"keywords":{}}],["deploy",{"_index":1105,"title":{},"content":{"79":{"position":[[200,9]]},"80":{"position":[[85,11]]},"82":{"position":[[3199,9]]},"190":{"position":[[1894,8]]},"199":{"position":[[325,11]]},"203":{"position":[[39,6],[173,11]]},"204":{"position":[[91,6]]},"216":{"position":[[596,6]]},"219":{"position":[[17,8]]},"239":{"position":[[2934,6]]},"240":{"position":[[4223,10]]},"241":{"position":[[223,6]]},"281":{"position":[[2539,9]]},"292":{"position":[[25,9]]},"303":{"position":[[25,9]]},"319":{"position":[[115,11]]},"333":{"position":[[107,12]]},"427":{"position":[[108,9]]},"529":{"position":[[391,11]]},"780":{"position":[[422,6]]},"1039":{"position":[[41,11]]},"1067":{"position":[[131,6]]},"1356":{"position":[[258,11]]}},"keywords":{}}],["deprec",{"_index":3662,"title":{},"content":{"429":{"position":[[1160,10]]},"606":{"position":[[465,9]]}},"keywords":{}}],["depth",{"_index":2806,"title":{},"content":{"268":{"position":[[1654,5]]},"269":{"position":[[1175,5]]},"322":{"position":[[1143,6]]},"1379":{"position":[[2664,5]]},"1403":{"position":[[2664,5]]},"1414":{"position":[[2664,5]]}},"keywords":{}}],["der",{"_index":6387,"title":{},"content":{"1384":{"position":[[1031,3]]}},"keywords":{}}],["deref",{"_index":5562,"title":{},"content":{"1140":{"position":[[1128,5]]},"1316":{"position":[[1128,5]]},"1340":{"position":[[1128,5]]},"1351":{"position":[[1128,5]]},"1379":{"position":[[2710,5]]},"1403":{"position":[[2710,5]]},"1414":{"position":[[2710,5]]},"1431":{"position":[[1151,5]]}},"keywords":{}}],["deriv",{"_index":268,"title":{"40":{"position":[[0,12]]},"91":{"position":[[10,10]]},"93":{"position":[[0,11]]},"183":{"position":[[6,10]]},"229":{"position":[[0,7]]},"254":{"position":[[12,11]]},"265":{"position":[[9,10]]},"268":{"position":[[10,10]]},"269":{"position":[[17,10]]},"270":{"position":[[9,10]]},"271":{"position":[[21,11]]},"276":{"position":[[13,11]]},"296":{"position":[[12,11]]},"314":{"position":[[12,11]]}},"content":{"8":{"position":[[545,12]]},"11":{"position":[[251,11]]},"17":{"position":[[60,12],[299,10]]},"21":{"position":[[667,11],[689,10]]},"32":{"position":[[453,12]]},"33":{"position":[[101,12]]},"40":{"position":[[3,10],[183,11],[399,11]]},"43":{"position":[[64,11],[183,12],[385,7]]},"44":{"position":[[11,12],[414,10]]},"64":{"position":[[128,12],[599,10]]},"66":{"position":[[199,12]]},"67":{"position":[[746,7],[1345,7]]},"69":{"position":[[856,10],[1019,7]]},"70":{"position":[[199,11]]},"74":{"position":[[664,10]]},"77":{"position":[[450,11]]},"91":{"position":[[16,11],[274,10],[380,10]]},"94":{"position":[[3,10],[69,6],[123,11],[208,8],[248,11],[275,7],[306,10],[367,10],[731,10],[852,11],[1076,7],[2324,10],[2357,10],[3119,11]]},"95":{"position":[[45,11],[111,10]]},"96":{"position":[[108,7],[505,10],[697,11],[841,11]]},"97":{"position":[[606,7],[693,10]]},"100":{"position":[[351,7],[851,11],[929,7],[1090,10],[1142,7]]},"102":{"position":[[19,10],[148,11],[348,11],[534,11]]},"103":{"position":[[26,10],[147,11],[165,10]]},"104":{"position":[[333,12]]},"105":{"position":[[49,11],[115,10],[467,10],[800,11],[912,10]]},"106":{"position":[[408,11],[695,10]]},"107":{"position":[[937,11],[1685,10],[3639,10],[3921,7]]},"108":{"position":[[221,7]]},"109":{"position":[[155,10],[356,10],[409,10],[507,11]]},"110":{"position":[[291,10]]},"112":{"position":[[1,10],[160,11],[280,7],[311,12],[397,11]]},"113":{"position":[[1,10],[478,11]]},"114":{"position":[[53,11],[125,11],[208,7],[307,7],[542,7]]},"115":{"position":[[82,10],[285,7],[624,10],[787,7],[1584,10]]},"117":{"position":[[124,12]]},"129":{"position":[[254,11]]},"131":{"position":[[56,12]]},"135":{"position":[[679,12]]},"141":{"position":[[922,11],[1197,11],[1366,10],[1423,10],[1503,10],[2012,10]]},"149":{"position":[[908,12],[978,11]]},"162":{"position":[[514,10]]},"166":{"position":[[581,12]]},"180":{"position":[[373,11],[851,11]]},"182":{"position":[[557,11],[571,10]]},"183":{"position":[[19,10],[327,10],[733,10],[887,10],[1273,7],[3388,10],[3787,7],[4017,10],[4410,10],[4446,11]]},"184":{"position":[[799,8]]},"186":{"position":[[7,11]]},"213":{"position":[[381,11]]},"219":{"position":[[616,10]]},"227":{"position":[[306,12]]},"229":{"position":[[44,11],[86,7]]},"253":{"position":[[47,12],[790,10],[1180,11]]},"254":{"position":[[81,11],[552,7],[2575,7],[2609,7]]},"255":{"position":[[44,10],[898,10],[971,10],[1193,11],[1286,10]]},"256":{"position":[[65,10]]},"257":{"position":[[152,12]]},"259":{"position":[[1336,12]]},"266":{"position":[[426,10]]},"267":{"position":[[19,10],[195,6],[577,12],[702,10],[1101,10],[1277,10],[1374,10],[1594,11]]},"268":{"position":[[273,10],[502,10],[588,10],[725,11],[905,7],[1152,10],[1497,11],[1601,11],[1680,11],[1775,10],[1885,11],[1946,10]]},"269":{"position":[[239,10],[350,11],[530,7],[723,10],[1076,11],[1122,11],[1201,11],[1232,10],[1347,11],[1408,10]]},"270":{"position":[[12,10],[397,11],[1221,10],[1311,10],[1512,6],[1844,10],[1962,11],[2024,10]]},"271":{"position":[[1,11],[105,10],[152,7]]},"277":{"position":[[37,12],[245,10],[359,10],[627,7],[804,7],[884,7],[912,10],[940,10],[1135,7]]},"278":{"position":[[401,11],[952,7],[1359,10],[1570,10]]},"279":{"position":[[695,10],[1215,7]]},"280":{"position":[[726,6],[1005,10],[1465,7]]},"281":{"position":[[41,11],[498,11],[612,10],[939,7],[1327,10],[1370,10],[2383,11],[2435,11],[2554,10],[2641,11]]},"292":{"position":[[217,11],[229,11],[303,11]]},"295":{"position":[[1476,12]]},"296":{"position":[[81,11],[677,7],[1048,10],[2612,10],[2678,7],[3442,10],[3707,10],[4455,7],[5373,10],[5450,10],[5834,10],[6025,10],[6102,10],[6774,10],[7415,10]]},"297":{"position":[[53,10]]},"303":{"position":[[208,11],[220,11],[294,11]]},"305":{"position":[[199,11]]},"313":{"position":[[47,12],[790,10],[1180,11],[3521,11]]},"314":{"position":[[81,11],[385,7],[2206,7],[2240,7],[2989,10]]},"315":{"position":[[396,10],[945,7],[1463,10],[1546,10],[1841,10]]},"316":{"position":[[44,10],[1223,10],[1296,10],[1518,11],[1611,10]]},"317":{"position":[[72,10]]},"320":{"position":[[2041,12]]},"321":{"position":[[707,7],[1645,6]]},"322":{"position":[[197,12],[1548,12]]},"343":{"position":[[740,12]]},"517":{"position":[[1124,6],[1338,6],[1827,6]]},"909":{"position":[[1237,10]]},"925":{"position":[[1237,10]]},"936":{"position":[[1237,10]]},"952":{"position":[[1237,10]]},"970":{"position":[[1237,10]]},"1123":{"position":[[786,10],[800,6]]},"1157":{"position":[[210,7]]},"1243":{"position":[[571,10]]},"1438":{"position":[[782,12]]},"1446":{"position":[[293,12]]},"1459":{"position":[[587,7]]},"1461":{"position":[[2365,10],[5535,7]]},"1473":{"position":[[231,12]]},"1475":{"position":[[785,7],[793,10],[822,10],[1468,11],[1531,10],[1648,10],[1791,10],[1901,10],[2012,10]]}},"keywords":{}}],["derivation'",{"_index":968,"title":{},"content":{"64":{"position":[[728,12]]},"94":{"position":[[2479,12]]},"111":{"position":[[439,12]]},"114":{"position":[[461,12]]},"141":{"position":[[1227,12]]},"268":{"position":[[87,12]]},"269":{"position":[[94,12]]}},"keywords":{}}],["derivation.compar",{"_index":271,"title":{},"content":{"8":{"position":[[629,18]]}},"keywords":{}}],["derivation.deriv",{"_index":2128,"title":{},"content":{"190":{"position":[[1468,22]]}},"keywords":{}}],["derivation.for",{"_index":6667,"title":{},"content":{"1470":{"position":[[1202,14]]}},"keywords":{}}],["derivation.pend",{"_index":1818,"title":{},"content":{"141":{"position":[[1333,18]]}},"keywords":{}}],["derivation.t",{"_index":1476,"title":{},"content":{"103":{"position":[[549,14]]}},"keywords":{}}],["derivation/",{"_index":592,"title":{},"content":{"23":{"position":[[538,12]]}},"keywords":{}}],["derivation/b",{"_index":590,"title":{},"content":{"23":{"position":[[467,12]]}},"keywords":{}}],["derivations/registers/createdtot",{"_index":6707,"title":{},"content":{"1475":{"position":[[1912,35]]}},"keywords":{}}],["derivations/transforms/transformstat",{"_index":6702,"title":{},"content":{"1475":{"position":[[1393,38]]}},"keywords":{}}],["derivations/transforms/transformstats/input",{"_index":6703,"title":{},"content":{"1475":{"position":[[1542,44]]}},"keywords":{}}],["derivations/transforms/transformstats/publish",{"_index":6706,"title":{},"content":{"1475":{"position":[[1802,46]]}},"keywords":{}}],["derivations/transforms/transformstats/upd",{"_index":6705,"title":{},"content":{"1475":{"position":[[1659,45]]}},"keywords":{}}],["des_key_fil",{"_index":5983,"title":{},"content":{"1292":{"position":[[384,12]]},"1306":{"position":[[384,12]]},"1329":{"position":[[384,12]]}},"keywords":{}}],["desc",{"_index":5566,"title":{},"content":{"1140":{"position":[[1164,4]]},"1292":{"position":[[2923,4]]},"1306":{"position":[[2923,4]]},"1316":{"position":[[1164,4]]},"1329":{"position":[[2923,4]]},"1340":{"position":[[1164,4]]},"1351":{"position":[[1164,4]]},"1370":{"position":[[871,4]]},"1379":{"position":[[2754,4]]},"1384":{"position":[[780,4]]},"1403":{"position":[[2754,4]]},"1414":{"position":[[2754,4]]},"1431":{"position":[[1187,4]]}},"keywords":{}}],["descend",{"_index":5188,"title":{},"content":{"1019":{"position":[[87,7]]}},"keywords":{}}],["describ",{"_index":594,"title":{},"content":{"24":{"position":[[34,9]]},"26":{"position":[[199,9]]},"32":{"position":[[576,9]]},"60":{"position":[[184,9]]},"61":{"position":[[875,9]]},"125":{"position":[[4,9]]},"137":{"position":[[615,9]]},"165":{"position":[[2153,8]]},"210":{"position":[[1825,11]]},"285":{"position":[[436,10]]},"321":{"position":[[14,9]]},"322":{"position":[[621,10]]},"432":{"position":[[646,10]]},"483":{"position":[[113,10],[242,9]]},"573":{"position":[[638,10]]},"584":{"position":[[560,10]]},"611":{"position":[[696,10]]},"753":{"position":[[444,9]]},"761":{"position":[[239,9]]},"764":{"position":[[894,9]]},"767":{"position":[[590,9]]},"774":{"position":[[239,9]]},"777":{"position":[[894,9]]},"784":{"position":[[243,9]]},"792":{"position":[[579,9],[868,9]]},"793":{"position":[[403,9]]},"801":{"position":[[245,9]]},"804":{"position":[[892,9]]},"808":{"position":[[419,9]]},"816":{"position":[[245,9]]},"819":{"position":[[892,9]]},"824":{"position":[[371,9],[660,9]]},"832":{"position":[[245,9]]},"835":{"position":[[892,9]]},"866":{"position":[[420,9]]},"878":{"position":[[430,9]]},"904":{"position":[[371,9],[659,9]]},"918":{"position":[[579,9],[868,9]]},"919":{"position":[[403,9]]},"931":{"position":[[423,9]]},"1036":{"position":[[548,9]]},"1043":{"position":[[403,9]]},"1051":{"position":[[371,9],[659,9]]},"1059":{"position":[[423,9]]},"1140":{"position":[[1213,8]]},"1154":{"position":[[609,9]]},"1198":{"position":[[332,9]]},"1209":{"position":[[671,8]]},"1255":{"position":[[243,9]]},"1289":{"position":[[949,9]]},"1292":{"position":[[311,8]]},"1303":{"position":[[423,9],[660,9]]},"1306":{"position":[[311,8]]},"1316":{"position":[[1213,8]]},"1322":{"position":[[1168,9]]},"1329":{"position":[[311,8]]},"1340":{"position":[[1213,8]]},"1351":{"position":[[1213,8]]},"1373":{"position":[[353,9],[641,9]]},"1374":{"position":[[353,9],[641,9]]},"1379":{"position":[[2804,8]]},"1397":{"position":[[420,9]]},"1398":{"position":[[419,9]]},"1403":{"position":[[2804,8]]},"1409":{"position":[[403,9]]},"1414":{"position":[[2804,8]]},"1423":{"position":[[787,8]]},"1431":{"position":[[1236,8]]}},"keywords":{}}],["descript",{"_index":1716,"title":{},"content":{"128":{"position":[[422,12],[615,12]]},"130":{"position":[[168,12]]},"132":{"position":[[417,12],[573,12]]},"159":{"position":[[175,11],[276,12],[291,11],[809,12],[863,12],[906,12],[947,11]]},"162":{"position":[[2057,12]]},"206":{"position":[[89,11]]},"280":{"position":[[1329,12]]},"296":{"position":[[306,12],[1277,12]]},"309":{"position":[[2227,12],[2582,11],[2824,12]]},"343":{"position":[[16,11]]},"351":{"position":[[27,11],[324,11]]},"359":{"position":[[96,11],[301,11]]},"370":{"position":[[244,11],[2009,11]]},"377":{"position":[[27,11],[1689,11]]},"387":{"position":[[207,11],[1338,11]]},"392":{"position":[[27,11],[688,11]]},"397":{"position":[[27,11],[830,11]]},"402":{"position":[[27,11],[654,11]]},"408":{"position":[[27,11],[531,11]]},"417":{"position":[[27,11],[2224,11]]},"424":{"position":[[27,11],[355,11]]},"432":{"position":[[27,11],[1198,11]]},"436":{"position":[[624,12]]},"438":{"position":[[27,11]]},"448":{"position":[[207,11],[1225,11]]},"454":{"position":[[27,11],[544,11]]},"460":{"position":[[27,11],[561,11]]},"466":{"position":[[27,11],[272,11]]},"479":{"position":[[227,11]]},"482":{"position":[[27,11],[504,11]]},"491":{"position":[[16,11]]},"492":{"position":[[16,11]]},"496":{"position":[[27,11],[537,11]]},"502":{"position":[[27,11],[1557,11]]},"509":{"position":[[27,11],[537,11]]},"517":{"position":[[498,11],[3960,11]]},"534":{"position":[[207,11],[1705,11]]},"540":{"position":[[27,11],[322,11]]},"545":{"position":[[27,11],[1619,11]]},"556":{"position":[[207,11],[2202,11]]},"564":{"position":[[27,11]]},"565":{"position":[[16,11]]},"573":{"position":[[211,11],[1281,11]]},"584":{"position":[[199,11],[1353,11]]},"593":{"position":[[27,11],[345,11]]},"601":{"position":[[27,11],[416,11]]},"611":{"position":[[207,11],[1192,11]]},"619":{"position":[[108,11],[594,11]]},"625":{"position":[[27,11],[166,11]]},"631":{"position":[[27,11],[497,11]]},"637":{"position":[[27,11],[1155,11]]},"646":{"position":[[380,11],[735,11]]},"654":{"position":[[101,11],[817,11]]},"664":{"position":[[16,11]]},"665":{"position":[[16,11]]},"670":{"position":[[27,11],[655,11]]},"679":{"position":[[16,11]]},"680":{"position":[[16,11]]},"685":{"position":[[185,11],[479,11]]},"694":{"position":[[16,11]]},"695":{"position":[[16,11]]},"700":{"position":[[27,11],[307,11]]},"706":{"position":[[27,11],[307,11]]},"712":{"position":[[27,11],[502,11]]},"720":{"position":[[207,11],[811,11]]},"728":{"position":[[16,11]]},"735":{"position":[[96,11],[394,11]]},"741":{"position":[[27,11],[484,11]]},"747":{"position":[[27,11],[1366,11]]},"757":{"position":[[27,11],[1916,11]]},"767":{"position":[[912,11]]},"770":{"position":[[27,11],[1916,11]]},"782":{"position":[[27,11],[512,11]]},"792":{"position":[[1206,11]]},"797":{"position":[[27,11],[1916,11]]},"812":{"position":[[27,11],[1916,11]]},"824":{"position":[[981,11]]},"828":{"position":[[27,11],[1916,11]]},"840":{"position":[[2190,11]]},"842":{"position":[[27,11],[593,11],[1043,11],[1291,11],[1889,11]]},"849":{"position":[[3330,11]]},"851":{"position":[[27,11],[587,11]]},"859":{"position":[[207,11],[734,11]]},"867":{"position":[[27,11],[2113,11]]},"879":{"position":[[27,11],[1536,11]]},"885":{"position":[[27,11],[608,11]]},"891":{"position":[[27,11],[343,11]]},"897":{"position":[[27,11],[261,11]]},"904":{"position":[[979,11]]},"907":{"position":[[27,11],[1416,11]]},"918":{"position":[[1182,11]]},"923":{"position":[[27,11],[1416,11]]},"934":{"position":[[27,11],[1416,11]]},"950":{"position":[[27,11],[1416,11]]},"959":{"position":[[27,11],[363,11]]},"968":{"position":[[27,11],[1416,11]]},"982":{"position":[[27,11],[365,11]]},"991":{"position":[[217,11],[788,11]]},"997":{"position":[[27,11],[333,11]]},"1009":{"position":[[217,11],[1527,11]]},"1015":{"position":[[27,11],[421,11]]},"1021":{"position":[[300,11],[2035,11]]},"1028":{"position":[[27,11],[368,11]]},"1034":{"position":[[16,11]]},"1035":{"position":[[16,11]]},"1045":{"position":[[27,11],[1035,11]]},"1053":{"position":[[27,11],[1035,11]]},"1061":{"position":[[27,11],[1035,11]]},"1070":{"position":[[207,11],[991,11]]},"1076":{"position":[[27,11],[774,11]]},"1085":{"position":[[263,11],[1365,11]]},"1094":{"position":[[27,11],[430,11]]},"1101":{"position":[[27,11],[264,11]]},"1107":{"position":[[27,11],[402,11]]},"1113":{"position":[[27,11],[464,11]]},"1125":{"position":[[27,11],[510,11]]},"1133":{"position":[[27,11],[1198,11]]},"1138":{"position":[[244,11],[1299,11]]},"1144":{"position":[[27,11],[1262,11]]},"1151":{"position":[[27,11],[1333,11]]},"1162":{"position":[[27,11],[766,11]]},"1170":{"position":[[27,11],[1187,11]]},"1179":{"position":[[27,11],[997,11]]},"1188":{"position":[[27,11],[716,11]]},"1196":{"position":[[27,11],[874,11]]},"1206":{"position":[[27,11],[838,11]]},"1213":{"position":[[27,11],[939,11]]},"1220":{"position":[[27,11],[864,11]]},"1230":{"position":[[27,11],[817,11]]},"1239":{"position":[[16,11]]},"1240":{"position":[[16,11]]},"1247":{"position":[[198,11],[1035,11]]},"1253":{"position":[[27,11],[427,11]]},"1260":{"position":[[27,11],[881,11]]},"1267":{"position":[[16,11]]},"1269":{"position":[[16,11]]},"1277":{"position":[[27,11],[1009,11]]},"1285":{"position":[[27,11]]},"1286":{"position":[[2510,11]]},"1292":{"position":[[344,11]]},"1300":{"position":[[27,11]]},"1301":{"position":[[2346,11]]},"1306":{"position":[[344,11]]},"1313":{"position":[[27,11],[843,11]]},"1324":{"position":[[27,11]]},"1325":{"position":[[2510,11]]},"1329":{"position":[[344,11]]},"1337":{"position":[[27,11],[843,11]]},"1348":{"position":[[27,11],[843,11]]},"1356":{"position":[[27,11],[894,11]]},"1362":{"position":[[189,11],[480,11]]},"1367":{"position":[[27,11]]},"1376":{"position":[[27,11],[425,11]]},"1386":{"position":[[27,11],[1119,11]]},"1400":{"position":[[27,11],[425,11]]},"1411":{"position":[[27,11],[425,11]]},"1420":{"position":[[27,11],[666,11]]},"1427":{"position":[[27,11],[570,11]]},"1452":{"position":[[259,11]]},"1457":{"position":[[16,11]]},"1474":{"position":[[350,11]]},"1475":{"position":[[292,11]]},"1481":{"position":[[16,11]]}},"keywords":{}}],["descriptionnam",{"_index":3857,"title":{},"content":{"487":{"position":[[321,15]]}},"keywords":{}}],["descriptor",{"_index":4903,"title":{},"content":{"879":{"position":[[182,10]]},"1140":{"position":[[1257,10]]},"1316":{"position":[[1257,10]]},"1340":{"position":[[1257,10]]},"1351":{"position":[[1257,10]]},"1379":{"position":[[2858,10]]},"1403":{"position":[[2858,10]]},"1414":{"position":[[2858,10]]},"1431":{"position":[[1280,10]]}},"keywords":{}}],["deselect",{"_index":1680,"title":{},"content":{"122":{"position":[[1660,11]]},"138":{"position":[[193,8]]},"141":{"position":[[503,8]]},"142":{"position":[[306,8]]}},"keywords":{}}],["design",{"_index":597,"title":{},"content":{"25":{"position":[[83,8]]},"80":{"position":[[29,8]]},"103":{"position":[[725,8]]},"122":{"position":[[1832,9]]},"125":{"position":[[643,6]]},"135":{"position":[[29,8]]},"193":{"position":[[334,8]]},"213":{"position":[[124,8]]},"319":{"position":[[714,8]]},"321":{"position":[[2316,6]]},"330":{"position":[[414,6]]},"485":{"position":[[79,8]]},"500":{"position":[[155,8]]},"562":{"position":[[204,8]]},"657":{"position":[[79,8]]},"673":{"position":[[79,8]]},"688":{"position":[[79,8]]},"759":{"position":[[33,8]]},"772":{"position":[[44,8]]},"799":{"position":[[31,8]]},"814":{"position":[[31,8]]},"830":{"position":[[31,8]]},"975":{"position":[[34,8]]},"1036":{"position":[[132,8]]},"1039":{"position":[[90,8]]},"1049":{"position":[[16,8]]},"1057":{"position":[[19,8]]},"1461":{"position":[[4372,8]]}},"keywords":{}}],["desir",{"_index":47,"title":{"227":{"position":[[8,7]]},"230":{"position":[[8,7]]}},"content":{"1":{"position":[[585,7]]},"3":{"position":[[245,7]]},"68":{"position":[[612,7]]},"74":{"position":[[653,8]]},"80":{"position":[[279,7]]},"100":{"position":[[736,7]]},"110":{"position":[[1006,7]]},"122":{"position":[[634,8]]},"144":{"position":[[467,7]]},"217":{"position":[[399,7]]},"218":{"position":[[126,7]]},"228":{"position":[[640,7]]},"229":{"position":[[377,7]]},"259":{"position":[[232,8],[605,8],[838,8],[1921,8],[2307,8]]},"349":{"position":[[437,7]]},"368":{"position":[[218,9]]},"428":{"position":[[88,7]]},"480":{"position":[[291,8]]},"755":{"position":[[218,9]]},"760":{"position":[[435,7]]},"768":{"position":[[218,9]]},"773":{"position":[[435,7]]},"795":{"position":[[216,9]]},"800":{"position":[[435,7]]},"810":{"position":[[216,9]]},"815":{"position":[[435,7]]},"826":{"position":[[216,9]]},"831":{"position":[[435,7]]},"905":{"position":[[221,9]]},"911":{"position":[[131,9]]},"917":{"position":[[885,8]]},"919":{"position":[[1410,8]]},"920":{"position":[[221,9]]},"927":{"position":[[131,9]]},"932":{"position":[[221,9]]},"938":{"position":[[131,9]]},"948":{"position":[[221,9]]},"954":{"position":[[131,9]]},"965":{"position":[[885,8]]},"966":{"position":[[221,9]]},"972":{"position":[[131,9]]},"1031":{"position":[[482,7]]},"1137":{"position":[[201,7]]},"1150":{"position":[[138,7]]},"1178":{"position":[[202,7]]},"1205":{"position":[[175,7]]},"1229":{"position":[[214,7]]},"1251":{"position":[[132,7]]},"1259":{"position":[[130,7]]},"1284":{"position":[[199,7]]},"1299":{"position":[[199,7]]},"1312":{"position":[[202,7]]},"1323":{"position":[[199,7]]},"1336":{"position":[[202,7]]},"1347":{"position":[[202,7]]},"1355":{"position":[[201,7]]},"1375":{"position":[[203,7]]},"1399":{"position":[[203,7]]},"1410":{"position":[[203,7]]},"1426":{"position":[[205,7]]},"1446":{"position":[[344,7]]},"1459":{"position":[[464,7]]},"1461":{"position":[[3253,7]]}},"keywords":{}}],["destin",{"_index":413,"title":{"124":{"position":[[0,11]]},"1451":{"position":[[44,12]]}},"content":{"13":{"position":[[1630,11]]},"32":{"position":[[346,12]]},"36":{"position":[[95,12],[170,12],[331,11],[441,12]]},"37":{"position":[[72,11]]},"38":{"position":[[656,11]]},"44":{"position":[[559,11]]},"45":{"position":[[68,11]]},"68":{"position":[[110,11]]},"83":{"position":[[31,11]]},"120":{"position":[[290,11]]},"124":{"position":[[59,11]]},"126":{"position":[[32,11]]},"137":{"position":[[167,12]]},"142":{"position":[[1905,11]]},"144":{"position":[[475,12],[633,11]]},"159":{"position":[[570,11]]},"181":{"position":[[142,12]]},"184":{"position":[[136,12]]},"189":{"position":[[965,11],[1286,12]]},"192":{"position":[[130,12]]},"198":{"position":[[762,13]]},"208":{"position":[[259,11],[584,11],[1844,11]]},"211":{"position":[[755,11]]},"213":{"position":[[253,11]]},"216":{"position":[[67,11],[331,11]]},"218":{"position":[[89,12],[139,11],[568,11],[774,12],[924,12],[1475,11]]},"219":{"position":[[333,13],[427,12],[509,12]]},"240":{"position":[[2479,12],[5001,12]]},"259":{"position":[[209,11],[1679,12],[1898,11],[2106,11]]},"268":{"position":[[2075,12]]},"269":{"position":[[1537,12]]},"270":{"position":[[2153,12]]},"274":{"position":[[745,12]]},"277":{"position":[[1318,12]]},"286":{"position":[[216,12],[425,11]]},"289":{"position":[[80,11],[197,11]]},"291":{"position":[[82,12]]},"300":{"position":[[80,11],[176,11]]},"302":{"position":[[82,12]]},"307":{"position":[[2931,11]]},"323":{"position":[[135,13],[224,12],[368,12],[504,14],[821,11]]},"324":{"position":[[986,12]]},"326":{"position":[[1124,11]]},"335":{"position":[[79,11]]},"411":{"position":[[152,11]]},"556":{"position":[[1279,11],[1325,11]]},"602":{"position":[[907,11]]},"947":{"position":[[1154,11]]},"977":{"position":[[361,12]]},"1176":{"position":[[107,11],[243,11],[324,11]]},"1186":{"position":[[477,11]]},"1244":{"position":[[85,11]]},"1245":{"position":[[154,11]]},"1449":{"position":[[286,11]]},"1451":{"position":[[150,12],[275,11],[517,11]]},"1452":{"position":[[2477,11]]},"1453":{"position":[[1236,11]]},"1475":{"position":[[1038,12]]},"1480":{"position":[[227,11]]}},"keywords":{}}],["destinations.cr",{"_index":1746,"title":{},"content":{"135":{"position":[[332,22]]}},"keywords":{}}],["destroy",{"_index":6331,"title":{},"content":{"1379":{"position":[[2918,7]]},"1403":{"position":[[2918,7]]},"1414":{"position":[[2918,7]]}},"keywords":{}}],["destruct",{"_index":4632,"title":{},"content":{"760":{"position":[[253,11]]},"773":{"position":[[253,11]]},"800":{"position":[[253,11]]},"815":{"position":[[253,11]]},"831":{"position":[[253,11]]}},"keywords":{}}],["destructor",{"_index":6333,"title":{},"content":{"1379":{"position":[[2959,10]]},"1403":{"position":[[2959,10]]},"1414":{"position":[[2959,10]]}},"keywords":{}}],["detach",{"_index":6292,"title":{},"content":{"1370":{"position":[[883,6]]}},"keywords":{}}],["detail",{"_index":228,"title":{"145":{"position":[[8,7]]},"148":{"position":[[11,7]]},"151":{"position":[[16,7]]},"247":{"position":[[11,8]]}},"content":{"7":{"position":[[73,6],[171,9],[446,7],[519,6]]},"8":{"position":[[898,8]]},"24":{"position":[[115,7]]},"38":{"position":[[609,7]]},"68":{"position":[[454,7]]},"83":{"position":[[1451,8]]},"95":{"position":[[149,7]]},"122":{"position":[[2109,7]]},"135":{"position":[[616,8]]},"138":{"position":[[1790,7],[2598,7]]},"139":{"position":[[203,8]]},"140":{"position":[[247,7],[301,8]]},"141":{"position":[[1798,7]]},"142":{"position":[[1815,7],[2676,7]]},"143":{"position":[[235,8]]},"144":{"position":[[794,8]]},"145":{"position":[[95,7],[162,8]]},"146":{"position":[[333,7],[537,8],[884,6]]},"148":{"position":[[104,7],[188,8]]},"149":{"position":[[342,7],[510,8],[857,6]]},"151":{"position":[[103,6],[169,8]]},"152":{"position":[[349,7],[513,8],[860,6]]},"157":{"position":[[421,8]]},"165":{"position":[[336,8]]},"182":{"position":[[131,7]]},"192":{"position":[[1488,8],[2073,7]]},"197":{"position":[[410,8]]},"206":{"position":[[33,7]]},"208":{"position":[[648,7]]},"209":{"position":[[259,8]]},"210":{"position":[[244,7]]},"215":{"position":[[192,6]]},"217":{"position":[[511,7]]},"218":{"position":[[252,7]]},"221":{"position":[[1448,7]]},"237":{"position":[[992,7]]},"240":{"position":[[2599,7],[3718,7],[4646,7]]},"247":{"position":[[73,8]]},"250":{"position":[[50,7],[245,7]]},"254":{"position":[[1004,7],[2353,6]]},"263":{"position":[[464,7]]},"285":{"position":[[38,7],[128,9]]},"288":{"position":[[824,7]]},"296":{"position":[[989,7],[2623,7],[3422,6],[8082,7]]},"299":{"position":[[739,7]]},"301":{"position":[[1432,7]]},"314":{"position":[[725,7],[1894,6]]},"341":{"position":[[549,8]]},"345":{"position":[[44,7]]},"350":{"position":[[226,7]]},"358":{"position":[[226,7]]},"368":{"position":[[498,8]]},"369":{"position":[[226,7]]},"376":{"position":[[226,7]]},"385":{"position":[[483,8]]},"386":{"position":[[226,7]]},"390":{"position":[[473,7]]},"391":{"position":[[226,7]]},"395":{"position":[[242,7],[643,7]]},"396":{"position":[[226,7]]},"401":{"position":[[272,7]]},"407":{"position":[[226,7]]},"416":{"position":[[226,7]]},"423":{"position":[[226,7]]},"429":{"position":[[599,7],[1294,8]]},"431":{"position":[[226,7]]},"432":{"position":[[403,7]]},"437":{"position":[[226,7]]},"447":{"position":[[226,7]]},"453":{"position":[[226,7]]},"459":{"position":[[226,7]]},"465":{"position":[[226,7]]},"472":{"position":[[226,7],[301,8]]},"481":{"position":[[226,7]]},"486":{"position":[[427,7]]},"495":{"position":[[226,7]]},"501":{"position":[[182,7]]},"508":{"position":[[226,7]]},"516":{"position":[[226,7]]},"525":{"position":[[226,7]]},"531":{"position":[[554,7]]},"533":{"position":[[226,7]]},"539":{"position":[[226,7]]},"544":{"position":[[226,7]]},"555":{"position":[[223,7]]},"563":{"position":[[290,7]]},"572":{"position":[[226,7]]},"583":{"position":[[216,7]]},"584":{"position":[[1307,8]]},"592":{"position":[[223,7]]},"593":{"position":[[479,7]]},"594":{"position":[[1083,8]]},"610":{"position":[[226,7]]},"618":{"position":[[226,7]]},"624":{"position":[[226,7]]},"630":{"position":[[226,7]]},"636":{"position":[[226,7]]},"646":{"position":[[226,7]]},"653":{"position":[[226,7]]},"658":{"position":[[427,7]]},"669":{"position":[[226,7]]},"674":{"position":[[427,7]]},"684":{"position":[[226,7]]},"689":{"position":[[427,7]]},"699":{"position":[[226,7]]},"705":{"position":[[226,7]]},"711":{"position":[[226,7]]},"719":{"position":[[221,7]]},"724":{"position":[[270,7],[695,7]]},"727":{"position":[[226,7]]},"734":{"position":[[226,7]]},"735":{"position":[[181,7]]},"738":{"position":[[317,8],[447,8]]},"740":{"position":[[226,7]]},"746":{"position":[[226,7]]},"753":{"position":[[630,7]]},"755":{"position":[[498,8]]},"756":{"position":[[226,7]]},"767":{"position":[[776,7]]},"768":{"position":[[498,8]]},"769":{"position":[[226,7]]},"781":{"position":[[223,7]]},"784":{"position":[[433,7]]},"792":{"position":[[1055,7]]},"793":{"position":[[590,7]]},"795":{"position":[[496,8]]},"796":{"position":[[227,7]]},"808":{"position":[[606,7]]},"810":{"position":[[496,8]]},"811":{"position":[[226,7]]},"824":{"position":[[847,7]]},"826":{"position":[[496,8]]},"827":{"position":[[226,7]]},"841":{"position":[[226,7]]},"842":{"position":[[477,7]]},"850":{"position":[[226,7]]},"858":{"position":[[226,7]]},"866":{"position":[[226,7],[607,7]]},"878":{"position":[[226,7],[617,7]]},"884":{"position":[[226,7]]},"890":{"position":[[227,7]]},"896":{"position":[[226,7]]},"904":{"position":[[846,7]]},"905":{"position":[[501,8]]},"906":{"position":[[226,7]]},"907":{"position":[[1881,7]]},"917":{"position":[[217,8]]},"918":{"position":[[1055,7]]},"919":{"position":[[590,7]]},"920":{"position":[[501,8]]},"921":{"position":[[226,7]]},"923":{"position":[[1881,7]]},"931":{"position":[[610,7]]},"932":{"position":[[501,8]]},"933":{"position":[[226,7]]},"947":{"position":[[185,7],[235,7],[313,7],[518,7]]},"948":{"position":[[501,8]]},"949":{"position":[[226,7]]},"958":{"position":[[226,7]]},"965":{"position":[[217,8]]},"966":{"position":[[501,8]]},"967":{"position":[[226,7]]},"968":{"position":[[1881,7]]},"981":{"position":[[226,7]]},"990":{"position":[[226,7]]},"996":{"position":[[226,7]]},"1005":{"position":[[223,7]]},"1014":{"position":[[226,7]]},"1021":{"position":[[226,7]]},"1027":{"position":[[226,7]]},"1031":{"position":[[836,8]]},"1033":{"position":[[230,7]]},"1040":{"position":[[311,8]]},"1042":{"position":[[1395,7]]},"1043":{"position":[[590,7]]},"1044":{"position":[[226,7]]},"1050":{"position":[[311,8]]},"1051":{"position":[[846,7]]},"1052":{"position":[[226,7]]},"1058":{"position":[[311,8]]},"1059":{"position":[[610,7]]},"1060":{"position":[[226,7]]},"1069":{"position":[[226,7]]},"1075":{"position":[[226,7]]},"1084":{"position":[[226,7]]},"1093":{"position":[[226,7]]},"1100":{"position":[[226,7]]},"1106":{"position":[[227,7]]},"1112":{"position":[[226,7]]},"1118":{"position":[[331,8]]},"1122":{"position":[[270,7]]},"1124":{"position":[[226,7]]},"1132":{"position":[[227,7]]},"1154":{"position":[[801,7]]},"1176":{"position":[[428,8]]},"1186":{"position":[[210,7],[270,7],[550,7]]},"1198":{"position":[[522,7]]},"1200":{"position":[[655,8]]},"1206":{"position":[[1152,8]]},"1252":{"position":[[223,7]]},"1255":{"position":[[433,7]]},"1289":{"position":[[1140,7]]},"1303":{"position":[[610,7],[851,7]]},"1313":{"position":[[1631,7]]},"1322":{"position":[[1359,7]]},"1337":{"position":[[1631,7]]},"1373":{"position":[[828,7]]},"1374":{"position":[[828,7]]},"1382":{"position":[[336,8]]},"1397":{"position":[[607,7]]},"1398":{"position":[[606,7]]},"1408":{"position":[[668,7]]},"1409":{"position":[[590,7]]},"1470":{"position":[[495,7]]}},"keywords":{}}],["details.log",{"_index":5125,"title":{},"content":{"963":{"position":[[208,15]]}},"keywords":{}}],["detect",{"_index":275,"title":{},"content":{"8":{"position":[[749,8]]},"62":{"position":[[257,7]]},"230":{"position":[[614,7]]},"306":{"position":[[456,9]]},"419":{"position":[[270,6],[420,9]]},"440":{"position":[[286,6],[436,9]]},"480":{"position":[[931,10]]},"499":{"position":[[288,7]]},"504":{"position":[[207,6],[364,9]]},"547":{"position":[[271,6],[421,9]]},"634":{"position":[[280,7]]},"639":{"position":[[206,6],[362,9]]},"754":{"position":[[93,6],[325,6]]},"794":{"position":[[198,6]]},"809":{"position":[[198,6]]},"825":{"position":[[198,6]]},"1023":{"position":[[251,6],[401,9]]},"1286":{"position":[[227,6]]},"1301":{"position":[[227,6]]},"1325":{"position":[[227,6]]},"1448":{"position":[[680,7]]}},"keywords":{}}],["determin",{"_index":60,"title":{},"content":{"1":{"position":[[890,9]]},"42":{"position":[[99,9]]},"55":{"position":[[320,10],[558,10]]},"66":{"position":[[476,10],[562,10]]},"110":{"position":[[984,9]]},"138":{"position":[[1621,9]]},"141":{"position":[[1626,9]]},"142":{"position":[[1638,9]]},"165":{"position":[[192,9]]},"274":{"position":[[630,9]]},"397":{"position":[[1077,9]]},"410":{"position":[[252,9]]},"417":{"position":[[1487,10],[1563,9],[1644,10],[1715,9]]},"419":{"position":[[777,9],[891,10],[997,9],[1519,9]]},"440":{"position":[[793,9],[907,10],[1013,9]]},"441":{"position":[[128,9]]},"488":{"position":[[4,9]]},"502":{"position":[[1135,10],[1211,9],[1292,10],[1363,9]]},"504":{"position":[[709,9],[823,10],[913,9],[1148,9]]},"545":{"position":[[1089,10],[1165,9],[1246,10],[1317,9]]},"547":{"position":[[778,9],[892,10],[998,9],[1521,9]]},"637":{"position":[[649,10],[725,9],[806,10],[877,9]]},"639":{"position":[[707,9],[821,10],[911,9],[1146,9]]},"659":{"position":[[161,9]]},"676":{"position":[[4,9]]},"691":{"position":[[4,9]]},"847":{"position":[[346,11]]},"849":{"position":[[1805,9]]},"1021":{"position":[[1646,10],[1722,9],[1803,10],[1874,9]]},"1023":{"position":[[758,9],[872,10],[978,9],[1502,9]]},"1474":{"position":[[262,9]]}},"keywords":{}}],["determinist",{"_index":5574,"title":{},"content":{"1140":{"position":[[1297,13]]},"1292":{"position":[[421,13]]},"1306":{"position":[[421,13]]},"1316":{"position":[[1297,13]]},"1329":{"position":[[421,13]]},"1340":{"position":[[1297,13]]},"1351":{"position":[[1297,13]]},"1379":{"position":[[3013,13]]},"1403":{"position":[[3013,13]]},"1414":{"position":[[3013,13]]},"1431":{"position":[[1320,13]]},"1453":{"position":[[1184,13]]}},"keywords":{}}],["detour",{"_index":2595,"title":{},"content":{"239":{"position":[[1954,6]]}},"keywords":{}}],["dev",{"_index":1123,"title":{},"content":{"81":{"position":[[1157,5]]},"573":{"position":[[981,3]]},"1461":{"position":[[3653,3]]}},"keywords":{}}],["dev.flow.yaml",{"_index":6615,"title":{},"content":{"1461":{"position":[[3031,13],[3512,13],[3625,13],[4002,14]]}},"keywords":{}}],["develop",{"_index":601,"title":{"63":{"position":[[0,11]]},"253":{"position":[[16,11]]},"295":{"position":[[16,11]]},"313":{"position":[[16,11]]}},"content":{"26":{"position":[[17,9],[496,11]]},"31":{"position":[[88,10]]},"58":{"position":[[149,11]]},"60":{"position":[[239,11],[273,11]]},"63":{"position":[[102,7],[302,12]]},"84":{"position":[[456,11]]},"102":{"position":[[512,7]]},"103":{"position":[[328,11],[747,9]]},"107":{"position":[[2889,11]]},"169":{"position":[[1151,11],[1456,11]]},"179":{"position":[[180,11],[286,11]]},"183":{"position":[[44,11],[519,11],[688,11]]},"210":{"position":[[2446,7]]},"253":{"position":[[87,11]]},"263":{"position":[[837,8]]},"266":{"position":[[277,11],[357,11],[565,11]]},"267":{"position":[[52,11],[887,11],[1056,11]]},"281":{"position":[[2612,9]]},"295":{"position":[[1516,11]]},"313":{"position":[[87,11]]},"324":{"position":[[303,12]]},"329":{"position":[[497,12]]},"340":{"position":[[96,11],[146,11],[316,11]]},"363":{"position":[[90,12]]},"387":{"position":[[523,9],[640,9]]},"429":{"position":[[280,11]]},"445":{"position":[[71,9]]},"448":{"position":[[437,9],[565,9],[727,9],[743,9],[1096,9]]},"455":{"position":[[125,11]]},"464":{"position":[[153,9]]},"515":{"position":[[435,11]]},"554":{"position":[[156,9],[248,9],[274,9],[508,9]]},"556":{"position":[[635,9],[752,9],[820,9],[836,9]]},"571":{"position":[[493,7]]},"581":{"position":[[170,7]]},"617":{"position":[[415,7]]},"668":{"position":[[10,10]]},"670":{"position":[[113,9],[217,9]]},"675":{"position":[[30,9]]},"716":{"position":[[123,9],[236,9]]},"718":{"position":[[222,9]]},"720":{"position":[[637,10]]},"725":{"position":[[20,11]]},"726":{"position":[[85,9],[121,9],[438,11]]},"728":{"position":[[399,10],[517,10]]},"741":{"position":[[111,9],[213,9]]},"885":{"position":[[110,9],[211,9]]},"988":{"position":[[70,11],[214,9]]},"989":{"position":[[535,9],[686,9],[808,9]]},"991":{"position":[[377,9],[529,9],[645,9]]},"1003":{"position":[[70,11],[214,9]]},"1004":{"position":[[618,9],[769,9],[891,9]]},"1009":{"position":[[440,9],[592,9],[708,9]]},"1228":{"position":[[74,7]]},"1245":{"position":[[367,7]]},"1461":{"position":[[2102,12],[2671,12],[2931,7],[3471,11],[4100,11]]}},"keywords":{}}],["developer'",{"_index":5340,"title":{},"content":{"1085":{"position":[[569,11]]}},"keywords":{}}],["developer_token",{"_index":3742,"title":{},"content":{"448":{"position":[[710,16]]},"449":{"position":[[320,16]]},"557":{"position":[[282,16]]}},"keywords":{}}],["developers.appli",{"_index":4514,"title":{},"content":{"718":{"position":[[189,16]]}},"keywords":{}}],["devic",{"_index":459,"title":{},"content":{"16":{"position":[[279,7],[1177,7]]},"17":{"position":[[654,6],[680,7]]},"575":{"position":[[430,7]]},"586":{"position":[[452,7]]}},"keywords":{}}],["device_platform",{"_index":3977,"title":{},"content":{"518":{"position":[[369,17]]}},"keywords":{}}],["devicesearch",{"_index":4299,"title":{},"content":{"605":{"position":[[300,12]]}},"keywords":{}}],["df98701.u",{"_index":5216,"title":{},"content":{"1031":{"position":[[762,10]]}},"keywords":{}}],["dgst",{"_index":6388,"title":{},"content":{"1384":{"position":[[1045,4]]}},"keywords":{}}],["diagnost",{"_index":5578,"title":{},"content":{"1140":{"position":[[1356,11]]},"1292":{"position":[[458,11]]},"1306":{"position":[[458,11]]},"1316":{"position":[[1356,11]]},"1329":{"position":[[458,11]]},"1340":{"position":[[1356,11]]},"1351":{"position":[[1356,11]]},"1379":{"position":[[3080,11]]},"1403":{"position":[[3080,11]]},"1414":{"position":[[3080,11]]},"1431":{"position":[[1379,11]]}},"keywords":{}}],["diagram",{"_index":916,"title":{"1434":{"position":[[9,8]]}},"content":{"61":{"position":[[288,7]]}},"keywords":{}}],["dialog",{"_index":3855,"title":{},"content":{"485":{"position":[[429,6]]},"486":{"position":[[77,6]]},"657":{"position":[[429,6]]},"658":{"position":[[77,6]]},"673":{"position":[[429,6]]},"674":{"position":[[77,6]]},"688":{"position":[[429,6]]},"689":{"position":[[77,6]]},"943":{"position":[[524,7]]}},"keywords":{}}],["dictat",{"_index":2459,"title":{},"content":{"221":{"position":[[1814,8]]}},"keywords":{}}],["dictionari",{"_index":4872,"title":{"869":{"position":[[0,10]]}},"content":{"867":{"position":[[1287,10],[1314,12]]},"869":{"position":[[444,11],[488,10],[813,10],[930,10],[1003,10],[1145,10],[1366,10],[1557,11]]},"1379":{"position":[[3127,10]]},"1403":{"position":[[3127,10]]},"1414":{"position":[[3127,10]]}},"keywords":{}}],["dictionary_mod",{"_index":4881,"title":{},"content":{"868":{"position":[[295,16]]}},"keywords":{}}],["didn't",{"_index":1082,"title":{},"content":{"74":{"position":[[575,6]]}},"keywords":{}}],["differ",{"_index":345,"title":{},"content":{"11":{"position":[[1620,9]]},"16":{"position":[[438,9]]},"45":{"position":[[554,9]]},"56":{"position":[[1442,9]]},"60":{"position":[[61,9]]},"66":{"position":[[280,9],[307,9]]},"81":{"position":[[2183,9]]},"83":{"position":[[320,9]]},"84":{"position":[[1145,9]]},"107":{"position":[[293,9],[2168,9]]},"109":{"position":[[619,9],[657,9]]},"113":{"position":[[978,9]]},"125":{"position":[[1230,9]]},"137":{"position":[[521,9]]},"140":{"position":[[529,9]]},"146":{"position":[[355,9]]},"149":{"position":[[364,9]]},"152":{"position":[[371,9]]},"162":{"position":[[39,9],[1613,9]]},"179":{"position":[[413,10]]},"190":{"position":[[338,9],[1219,9],[1414,9]]},"192":{"position":[[1846,11]]},"197":{"position":[[707,9]]},"219":{"position":[[417,9],[479,9]]},"223":{"position":[[642,7]]},"224":{"position":[[1203,10]]},"263":{"position":[[938,9]]},"275":{"position":[[872,9]]},"296":{"position":[[8009,9]]},"306":{"position":[[45,9],[431,9]]},"313":{"position":[[3434,9]]},"319":{"position":[[407,12]]},"320":{"position":[[17,9],[1671,12]]},"321":{"position":[[1536,9],[2047,9]]},"322":{"position":[[16,9],[1120,11]]},"323":{"position":[[256,12]]},"325":{"position":[[253,10]]},"326":{"position":[[6,7],[1597,9]]},"379":{"position":[[464,9],[699,9]]},"418":{"position":[[539,9]]},"448":{"position":[[1165,9]]},"513":{"position":[[165,7]]},"522":{"position":[[166,7]]},"530":{"position":[[166,7]]},"546":{"position":[[1246,9]]},"551":{"position":[[164,7]]},"569":{"position":[[183,7]]},"603":{"position":[[255,9]]},"607":{"position":[[181,7]]},"614":{"position":[[166,7]]},"643":{"position":[[140,7]]},"650":{"position":[[139,7]]},"716":{"position":[[166,7]]},"731":{"position":[[137,7]]},"845":{"position":[[11,9],[52,12]]},"849":{"position":[[1881,9]]},"864":{"position":[[576,9]]},"869":{"position":[[102,9]]},"876":{"position":[[576,9]]},"947":{"position":[[695,7]]},"1081":{"position":[[15,6]]},"1129":{"position":[[15,9]]},"1183":{"position":[[620,9]]},"1226":{"position":[[120,9]]},"1232":{"position":[[330,9]]},"1298":{"position":[[642,7]]},"1346":{"position":[[642,7]]},"1358":{"position":[[393,7]]},"1447":{"position":[[147,9]]},"1448":{"position":[[471,9]]},"1453":{"position":[[1358,9]]},"1459":{"position":[[269,9]]},"1461":{"position":[[3345,9]]},"1470":{"position":[[902,9]]}},"keywords":{}}],["differenti",{"_index":1564,"title":{},"content":{"109":{"position":[[770,14]]},"183":{"position":[[2369,13]]}},"keywords":{}}],["digit",{"_index":2340,"title":{},"content":{"210":{"position":[[2563,7]]},"556":{"position":[[1489,5],[2014,5]]}},"keywords":{}}],["dilemma",{"_index":2326,"title":{},"content":{"210":{"position":[[2288,8]]}},"keywords":{}}],["dimens",{"_index":1947,"title":{"1007":{"position":[[16,10]]}},"content":{"164":{"position":[[1368,11],[1534,11]]},"198":{"position":[[895,10]]},"574":{"position":[[409,10],[464,10],[560,10],[623,9],[669,10]]},"585":{"position":[[540,10],[670,9]]},"1274":{"position":[[300,10]]},"1277":{"position":[[163,10]]}},"keywords":{}}],["dir",{"_index":954,"title":{},"content":{"63":{"position":[[1079,3],[1214,3]]}},"keywords":{}}],["direct",{"_index":574,"title":{"964":{"position":[[0,6]]}},"content":{"21":{"position":[[599,6]]},"83":{"position":[[117,6]]},"92":{"position":[[399,7]]},"112":{"position":[[129,6]]},"138":{"position":[[486,8]]},"192":{"position":[[10,8]]},"224":{"position":[[867,9]]},"280":{"position":[[896,8]]},"323":{"position":[[400,8]]},"792":{"position":[[287,6],[353,6]]},"793":{"position":[[101,6],[167,6]]},"808":{"position":[[101,6],[167,6]]},"824":{"position":[[101,6],[167,6]]},"904":{"position":[[101,6],[167,6]]},"918":{"position":[[287,6],[353,6]]},"919":{"position":[[101,6],[167,6]]},"931":{"position":[[101,6],[167,6]]},"963":{"position":[[99,6],[177,6]]},"964":{"position":[[292,6],[568,6]]},"1043":{"position":[[101,6],[167,6]]},"1051":{"position":[[101,6],[167,6]]},"1059":{"position":[[101,6],[167,6]]},"1137":{"position":[[149,6]]},"1143":{"position":[[71,6]]},"1150":{"position":[[86,6]]},"1161":{"position":[[71,6]]},"1169":{"position":[[71,6]]},"1178":{"position":[[150,6]]},"1187":{"position":[[152,6]]},"1195":{"position":[[156,6]]},"1205":{"position":[[150,6]]},"1212":{"position":[[71,6]]},"1219":{"position":[[71,6]]},"1229":{"position":[[162,6]]},"1259":{"position":[[78,6]]},"1282":{"position":[[416,6]]},"1283":{"position":[[112,6]]},"1284":{"position":[[147,6]]},"1288":{"position":[[128,6]]},"1289":{"position":[[112,6]]},"1299":{"position":[[147,6]]},"1303":{"position":[[101,6],[167,6]]},"1310":{"position":[[431,6]]},"1312":{"position":[[150,6]]},"1320":{"position":[[112,6]]},"1323":{"position":[[147,6]]},"1333":{"position":[[112,6]]},"1336":{"position":[[150,6]]},"1344":{"position":[[112,6]]},"1347":{"position":[[150,6]]},"1355":{"position":[[149,6]]},"1373":{"position":[[101,6],[167,6]]},"1374":{"position":[[101,6],[167,6]]},"1375":{"position":[[151,6]]},"1385":{"position":[[151,6]]},"1397":{"position":[[101,6],[168,6]]},"1398":{"position":[[101,6],[167,6]]},"1399":{"position":[[151,6]]},"1409":{"position":[[101,6],[167,6]]},"1410":{"position":[[151,6]]},"1419":{"position":[[151,6]]},"1426":{"position":[[153,6]]},"1461":{"position":[[15,9],[5470,6]]}},"keywords":{}}],["directli",{"_index":163,"title":{"1297":{"position":[[12,8]]},"1321":{"position":[[11,8]]},"1334":{"position":[[8,8]]},"1345":{"position":[[12,8]]}},"content":{"4":{"position":[[292,8]]},"25":{"position":[[57,8]]},"26":{"position":[[80,8]]},"55":{"position":[[881,8]]},"61":{"position":[[781,9]]},"62":{"position":[[56,8]]},"68":{"position":[[96,8]]},"76":{"position":[[107,8]]},"77":{"position":[[200,8]]},"81":{"position":[[2370,8]]},"82":{"position":[[189,8]]},"83":{"position":[[823,8]]},"84":{"position":[[35,8]]},"87":{"position":[[667,8]]},"88":{"position":[[373,8]]},"98":{"position":[[125,8]]},"100":{"position":[[874,8]]},"122":{"position":[[53,8],[2005,8]]},"125":{"position":[[144,8]]},"197":{"position":[[287,8]]},"198":{"position":[[906,8]]},"225":{"position":[[640,9]]},"228":{"position":[[45,9]]},"260":{"position":[[72,8]]},"320":{"position":[[460,8]]},"321":{"position":[[2169,8]]},"322":{"position":[[1679,8]]},"323":{"position":[[208,8]]},"324":{"position":[[1196,9]]},"326":{"position":[[1428,8]]},"330":{"position":[[527,8]]},"350":{"position":[[60,8]]},"358":{"position":[[60,8]]},"369":{"position":[[60,8]]},"376":{"position":[[60,8]]},"386":{"position":[[60,8]]},"391":{"position":[[60,8]]},"396":{"position":[[60,8]]},"401":{"position":[[87,8]]},"407":{"position":[[60,8]]},"416":{"position":[[60,8]]},"423":{"position":[[60,8]]},"431":{"position":[[60,8]]},"437":{"position":[[60,8]]},"447":{"position":[[60,8]]},"453":{"position":[[60,8]]},"459":{"position":[[60,8]]},"465":{"position":[[60,8]]},"472":{"position":[[60,8]]},"481":{"position":[[60,8]]},"495":{"position":[[60,8]]},"508":{"position":[[60,8]]},"516":{"position":[[60,8]]},"525":{"position":[[60,8]]},"533":{"position":[[60,8]]},"539":{"position":[[60,8]]},"544":{"position":[[60,8]]},"555":{"position":[[60,8]]},"563":{"position":[[124,9]]},"572":{"position":[[60,8]]},"581":{"position":[[336,8]]},"583":{"position":[[60,8]]},"584":{"position":[[99,8]]},"592":{"position":[[60,8]]},"600":{"position":[[60,8]]},"610":{"position":[[60,8]]},"618":{"position":[[60,8]]},"624":{"position":[[60,8]]},"630":{"position":[[60,8]]},"636":{"position":[[60,8]]},"646":{"position":[[60,8]]},"653":{"position":[[60,8]]},"669":{"position":[[60,8]]},"683":{"position":[[85,9]]},"684":{"position":[[60,8]]},"685":{"position":[[127,8]]},"699":{"position":[[60,8]]},"705":{"position":[[60,8]]},"711":{"position":[[60,8]]},"719":{"position":[[60,8]]},"727":{"position":[[60,8]]},"734":{"position":[[60,8]]},"740":{"position":[[60,8]]},"746":{"position":[[60,8]]},"756":{"position":[[60,8]]},"769":{"position":[[60,8]]},"781":{"position":[[60,8]]},"784":{"position":[[58,9]]},"796":{"position":[[60,8]]},"811":{"position":[[60,8]]},"827":{"position":[[60,8]]},"841":{"position":[[60,8]]},"850":{"position":[[60,8]]},"855":{"position":[[227,8]]},"858":{"position":[[60,8]]},"866":{"position":[[60,8]]},"869":{"position":[[425,8]]},"878":{"position":[[60,8]]},"884":{"position":[[60,8]]},"890":{"position":[[60,8]]},"896":{"position":[[60,8]]},"906":{"position":[[60,8]]},"909":{"position":[[161,9]]},"921":{"position":[[60,8]]},"925":{"position":[[161,9]]},"933":{"position":[[60,8]]},"936":{"position":[[161,9]]},"949":{"position":[[60,8]]},"952":{"position":[[161,9]]},"958":{"position":[[60,8]]},"967":{"position":[[60,8]]},"970":{"position":[[161,9]]},"981":{"position":[[60,8]]},"990":{"position":[[60,8]]},"996":{"position":[[60,8]]},"1005":{"position":[[60,8]]},"1014":{"position":[[60,8]]},"1021":{"position":[[60,8]]},"1027":{"position":[[60,8]]},"1033":{"position":[[64,8]]},"1044":{"position":[[60,8]]},"1052":{"position":[[60,8]]},"1060":{"position":[[60,8]]},"1069":{"position":[[60,8]]},"1075":{"position":[[60,8]]},"1084":{"position":[[60,8]]},"1093":{"position":[[60,8]]},"1100":{"position":[[60,8]]},"1106":{"position":[[60,8]]},"1112":{"position":[[60,8]]},"1124":{"position":[[60,8]]},"1132":{"position":[[60,8]]},"1149":{"position":[[75,8]]},"1200":{"position":[[610,9]]},"1204":{"position":[[435,8]]},"1208":{"position":[[217,9]]},"1252":{"position":[[60,8]]},"1255":{"position":[[58,9]]},"1283":{"position":[[178,8]]},"1289":{"position":[[178,8],[599,8]]},"1311":{"position":[[9,8]]},"1438":{"position":[[150,8]]},"1439":{"position":[[149,8]]},"1459":{"position":[[814,8]]},"1461":{"position":[[5580,8]]}},"keywords":{}}],["directori",{"_index":625,"title":{"63":{"position":[[12,12]]}},"content":{"27":{"position":[[146,9]]},"61":{"position":[[949,10]]},"62":{"position":[[46,9],[157,9]]},"63":{"position":[[65,9],[391,9],[520,9],[1118,9],[1160,10]]},"64":{"position":[[357,9]]},"87":{"position":[[122,9]]},"103":{"position":[[584,9],[705,10]]},"173":{"position":[[374,9]]},"221":{"position":[[1004,10]]},"222":{"position":[[249,10]]},"223":{"position":[[215,10]]},"224":{"position":[[268,10]]},"254":{"position":[[110,9]]},"263":{"position":[[812,10],[899,9]]},"270":{"position":[[859,10]]},"274":{"position":[[1612,10]]},"275":{"position":[[557,10]]},"296":{"position":[[110,9],[3837,10],[4048,12]]},"301":{"position":[[903,9]]},"314":{"position":[[110,9]]},"315":{"position":[[294,10],[527,12]]},"436":{"position":[[306,10],[863,9],[983,9]]},"565":{"position":[[157,9]]},"1019":{"position":[[41,9],[161,10],[310,9]]},"1020":{"position":[[1003,9],[1076,9],[1538,9],[1640,9],[1732,9]]},"1021":{"position":[[693,10],[704,9],[714,9],[765,9],[902,10],[965,10],[1333,10],[2104,10]]},"1022":{"position":[[183,10]]},"1292":{"position":[[501,9]]},"1298":{"position":[[215,10]]},"1306":{"position":[[501,9]]},"1322":{"position":[[249,10]]},"1329":{"position":[[501,9]]},"1335":{"position":[[249,10]]},"1346":{"position":[[215,10]]},"1461":{"position":[[1010,9],[1579,9],[1779,9],[1875,12],[5098,10]]}},"keywords":{}}],["disabl",{"_index":833,"title":{},"content":{"56":{"position":[[371,7]]},"122":{"position":[[1891,9]]},"138":{"position":[[219,8],[313,7]]},"141":{"position":[[529,8],[623,7]]},"142":{"position":[[332,8],[426,7]]},"185":{"position":[[254,7]]},"193":{"position":[[257,7]]},"242":{"position":[[902,7]]},"308":{"position":[[319,7]]},"343":{"position":[[41,7],[49,7]]},"377":{"position":[[196,7],[229,8],[371,7],[399,8]]},"414":{"position":[[946,9]]},"483":{"position":[[798,8]]},"489":{"position":[[421,7]]},"662":{"position":[[421,7]]},"677":{"position":[[421,7]]},"692":{"position":[[421,7]]},"764":{"position":[[1180,7]]},"777":{"position":[[1180,7]]},"804":{"position":[[1178,7]]},"819":{"position":[[1178,7]]},"835":{"position":[[1178,7]]},"922":{"position":[[1203,9]]},"1183":{"position":[[528,8],[675,9]]},"1268":{"position":[[140,9]]},"1286":{"position":[[1650,9]]},"1292":{"position":[[537,7]]},"1301":{"position":[[1486,9]]},"1306":{"position":[[537,7]]},"1325":{"position":[[1650,9]]},"1329":{"position":[[537,7]]},"1452":{"position":[[2199,7]]}},"keywords":{}}],["disabled.unknown",{"_index":1788,"title":{},"content":{"138":{"position":[[1512,16]]},"141":{"position":[[1517,16]]},"142":{"position":[[1529,16]]}},"keywords":{}}],["discard",{"_index":3088,"title":{},"content":{"315":{"position":[[2420,10]]},"1292":{"position":[[573,7]]},"1306":{"position":[[573,7]]},"1329":{"position":[[573,7]]}},"keywords":{}}],["disconnect",{"_index":5580,"title":{},"content":{"1140":{"position":[[1397,10]]},"1316":{"position":[[1397,10]]},"1340":{"position":[[1397,10]]},"1351":{"position":[[1397,10]]},"1379":{"position":[[3178,10]]},"1403":{"position":[[3178,10]]},"1414":{"position":[[3178,10]]},"1431":{"position":[[1420,10]]}},"keywords":{}}],["discourag",{"_index":4577,"title":{},"content":{"750":{"position":[[271,10]]},"766":{"position":[[271,10]]},"789":{"position":[[305,10]]},"807":{"position":[[305,10]]},"823":{"position":[[305,10]]}},"keywords":{}}],["discov",{"_index":424,"title":{},"content":{"14":{"position":[[299,10]]},"54":{"position":[[540,9]]},"55":{"position":[[32,9],[352,10],[593,10]]},"56":{"position":[[246,8],[475,10],[566,10]]},"80":{"position":[[439,8]]},"206":{"position":[[931,8],[1112,10]]},"210":{"position":[[2505,8]]},"307":{"position":[[3187,10]]},"309":{"position":[[3511,10]]},"477":{"position":[[217,8]]},"479":{"position":[[477,9]]},"482":{"position":[[214,8]]},"492":{"position":[[566,10]]},"598":{"position":[[159,8]]},"642":{"position":[[29,9]]},"660":{"position":[[480,10]]},"665":{"position":[[566,10]]},"695":{"position":[[566,10]]},"757":{"position":[[1052,8],[2476,11]]},"770":{"position":[[1052,8],[2476,11]]},"782":{"position":[[396,9],[427,8]]},"797":{"position":[[1052,8],[2484,11]]},"812":{"position":[[1052,8],[2484,11]]},"828":{"position":[[1052,8],[2484,11]]},"838":{"position":[[6,9]]},"842":{"position":[[2214,11],[2416,11]]},"865":{"position":[[89,11],[235,11]]},"867":{"position":[[1681,8],[1779,11],[1811,8]]},"877":{"position":[[89,11],[274,11]]}},"keywords":{}}],["discoveri",{"_index":803,"title":{"54":{"position":[[0,10]]},"119":{"position":[[0,10]]},"865":{"position":[[20,10]]},"877":{"position":[[20,10]]}},"content":{"54":{"position":[[65,9],[123,10]]},"70":{"position":[[420,10]]},"119":{"position":[[181,9],[211,10]]},"206":{"position":[[714,9]]},"239":{"position":[[1315,9]]},"483":{"position":[[538,9]]},"491":{"position":[[368,9]]},"664":{"position":[[389,9],[624,9]]},"679":{"position":[[368,9]]},"694":{"position":[[368,9]]},"750":{"position":[[1005,9]]},"752":{"position":[[569,9]]},"753":{"position":[[1225,9]]},"757":{"position":[[2270,9]]},"766":{"position":[[1005,9]]},"770":{"position":[[2270,9]]},"789":{"position":[[1406,9]]},"791":{"position":[[522,9]]},"793":{"position":[[1196,9]]},"797":{"position":[[2277,9]]},"807":{"position":[[993,9]]},"808":{"position":[[1142,9]]},"812":{"position":[[2277,9]]},"823":{"position":[[993,9]]},"828":{"position":[[2277,9]]},"909":{"position":[[785,9]]},"917":{"position":[[1058,10]]},"919":{"position":[[1583,10]]},"925":{"position":[[785,9]]},"936":{"position":[[785,9]]},"952":{"position":[[785,9]]},"965":{"position":[[1058,10]]},"970":{"position":[[785,9]]}},"keywords":{}}],["discrep",{"_index":2250,"title":{},"content":{"208":{"position":[[756,13]]}},"keywords":{}}],["discuss",{"_index":772,"title":{},"content":{"47":{"position":[[14,9]]},"80":{"position":[[187,9]]},"379":{"position":[[387,9]]},"922":{"position":[[2290,9]]},"1449":{"position":[[221,9]]}},"keywords":{}}],["discussion]../../concepts/derivations.md(#wher",{"_index":2909,"title":{},"content":{"281":{"position":[[3365,47]]}},"keywords":{}}],["disk",{"_index":4873,"title":{},"content":{"867":{"position":[[1587,5]]},"869":{"position":[[1256,4]]},"922":{"position":[[1588,4],[3356,4]]},"1292":{"position":[[621,4]]},"1306":{"position":[[621,4]]},"1329":{"position":[[621,4]]},"1379":{"position":[[3232,4]]},"1403":{"position":[[3232,4]]},"1414":{"position":[[3232,4]]}},"keywords":{}}],["disk).to",{"_index":4891,"title":{},"content":{"869":{"position":[[1526,8]]}},"keywords":{}}],["disk.prop",{"_index":5062,"title":{},"content":{"922":{"position":[[2232,11]]}},"keywords":{}}],["display",{"_index":1024,"title":{},"content":{"68":{"position":[[584,9]]},"140":{"position":[[129,10]]},"144":{"position":[[369,10]]},"146":{"position":[[78,8],[199,9]]},"149":{"position":[[208,9]]},"150":{"position":[[74,9]]},"152":{"position":[[215,9]]},"253":{"position":[[486,7]]},"313":{"position":[[486,7]]},"381":{"position":[[207,7],[234,7],[264,7],[294,7],[325,7]]},"485":{"position":[[436,8]]},"657":{"position":[[436,8]]},"673":{"position":[[436,8]]},"688":{"position":[[436,8]]},"964":{"position":[[459,7]]},"1362":{"position":[[681,7],[698,7]]},"1470":{"position":[[177,8],[584,7]]}},"keywords":{}}],["display_nam",{"_index":6280,"title":{},"content":{"1362":{"position":[[667,13]]},"1363":{"position":[[337,13]]}},"keywords":{}}],["disput",{"_index":5312,"title":{},"content":{"1078":{"position":[[972,8]]}},"keywords":{}}],["disrupt",{"_index":2599,"title":{},"content":{"239":{"position":[[2458,12]]}},"keywords":{}}],["distinct",{"_index":211,"title":{},"content":{"6":{"position":[[277,8]]},"141":{"position":[[179,12]]},"485":{"position":[[19,8]]},"657":{"position":[[19,8]]},"673":{"position":[[19,8]]},"688":{"position":[[19,8]]},"922":{"position":[[400,8]]},"1140":{"position":[[1447,8]]},"1209":{"position":[[694,8]]},"1292":{"position":[[665,8]]},"1306":{"position":[[665,8]]},"1316":{"position":[[1447,8]]},"1329":{"position":[[665,8]]},"1340":{"position":[[1447,8]]},"1351":{"position":[[1447,8]]},"1370":{"position":[[898,8]]},"1379":{"position":[[3285,8]]},"1394":{"position":[[981,8]]},"1403":{"position":[[3285,8]]},"1414":{"position":[[3285,8]]},"1423":{"position":[[806,8]]},"1431":{"position":[[1470,8]]}},"keywords":{}}],["distinctrow",{"_index":5991,"title":{},"content":{"1292":{"position":[[698,11]]},"1306":{"position":[[698,11]]},"1329":{"position":[[698,11]]}},"keywords":{}}],["distinguish",{"_index":3104,"title":{},"content":{"319":{"position":[[837,11]]}},"keywords":{}}],["distribut",{"_index":1977,"title":{},"content":{"169":{"position":[[305,13]]},"1379":{"position":[[3342,11]]},"1403":{"position":[[3342,11]]},"1414":{"position":[[3342,11]]},"1437":{"position":[[577,11]]},"1474":{"position":[[306,11]]}},"keywords":{}}],["distributionth",{"_index":1275,"title":{},"content":{"84":{"position":[[1092,15]]}},"keywords":{}}],["div",{"_index":5993,"title":{},"content":{"1292":{"position":[[739,3]]},"1306":{"position":[[739,3]]},"1329":{"position":[[739,3]]}},"keywords":{}}],["dive",{"_index":2180,"title":{},"content":{"196":{"position":[[764,4]]},"233":{"position":[[949,4]]}},"keywords":{}}],["divers",{"_index":3316,"title":{},"content":{"364":{"position":[[343,7]]}},"keywords":{}}],["divid",{"_index":4772,"title":{},"content":{"842":{"position":[[2612,7]]}},"keywords":{}}],["divis",{"_index":635,"title":{},"content":{"27":{"position":[[552,8]]}},"keywords":{}}],["dlnewcopi",{"_index":5584,"title":{},"content":{"1140":{"position":[[1501,9]]},"1316":{"position":[[1501,9]]},"1340":{"position":[[1501,9]]},"1351":{"position":[[1501,9]]},"1431":{"position":[[1524,9]]}},"keywords":{}}],["dlpreviouscopi",{"_index":5587,"title":{},"content":{"1140":{"position":[[1550,14]]},"1316":{"position":[[1550,14]]},"1340":{"position":[[1550,14]]},"1351":{"position":[[1550,14]]},"1431":{"position":[[1573,14]]}},"keywords":{}}],["dlurlcomplet",{"_index":5590,"title":{},"content":{"1140":{"position":[[1606,13]]},"1316":{"position":[[1606,13]]},"1340":{"position":[[1606,13]]},"1351":{"position":[[1606,13]]},"1431":{"position":[[1629,13]]}},"keywords":{}}],["dlurlcompleteonli",{"_index":5592,"title":{},"content":{"1140":{"position":[[1651,17]]},"1316":{"position":[[1651,17]]},"1340":{"position":[[1651,17]]},"1351":{"position":[[1651,17]]},"1431":{"position":[[1674,17]]}},"keywords":{}}],["dlurlcompletewrit",{"_index":5594,"title":{},"content":{"1140":{"position":[[1701,18]]},"1316":{"position":[[1701,18]]},"1340":{"position":[[1701,18]]},"1351":{"position":[[1701,18]]},"1431":{"position":[[1724,18]]}},"keywords":{}}],["dlurlpath",{"_index":5596,"title":{},"content":{"1140":{"position":[[1756,9]]},"1316":{"position":[[1756,9]]},"1340":{"position":[[1756,9]]},"1351":{"position":[[1756,9]]},"1431":{"position":[[1779,9]]}},"keywords":{}}],["dlurlpathonli",{"_index":5597,"title":{},"content":{"1140":{"position":[[1798,13]]},"1316":{"position":[[1798,13]]},"1340":{"position":[[1798,13]]},"1351":{"position":[[1798,13]]},"1431":{"position":[[1821,13]]}},"keywords":{}}],["dlurlpathwrit",{"_index":5601,"title":{},"content":{"1140":{"position":[[1847,14]]},"1316":{"position":[[1847,14]]},"1340":{"position":[[1847,14]]},"1351":{"position":[[1847,14]]},"1431":{"position":[[1870,14]]}},"keywords":{}}],["dlurlschem",{"_index":5603,"title":{},"content":{"1140":{"position":[[1900,11]]},"1316":{"position":[[1900,11]]},"1340":{"position":[[1900,11]]},"1351":{"position":[[1900,11]]},"1431":{"position":[[1923,11]]}},"keywords":{}}],["dlurlserv",{"_index":5604,"title":{},"content":{"1140":{"position":[[1934,11]]},"1316":{"position":[[1934,11]]},"1340":{"position":[[1934,11]]},"1351":{"position":[[1934,11]]},"1431":{"position":[[1957,11]]}},"keywords":{}}],["dlvalu",{"_index":5606,"title":{},"content":{"1140":{"position":[[1975,7]]},"1316":{"position":[[1975,7]]},"1340":{"position":[[1975,7]]},"1351":{"position":[[1975,7]]},"1431":{"position":[[1998,7]]}},"keywords":{}}],["dml",{"_index":4638,"title":{},"content":{"761":{"position":[[54,3]]},"762":{"position":[[332,3]]},"774":{"position":[[54,3]]},"775":{"position":[[332,3]]},"801":{"position":[[54,3]]},"802":{"position":[[332,3]]},"816":{"position":[[54,3]]},"817":{"position":[[332,3]]},"832":{"position":[[54,3]]},"833":{"position":[[332,3]]}},"keywords":{}}],["dn",{"_index":2467,"title":{},"content":{"222":{"position":[[953,4]]},"1322":{"position":[[953,4]]},"1335":{"position":[[953,4]]}},"keywords":{}}],["do",{"_index":744,"title":{},"content":{"42":{"position":[[614,5]]},"387":{"position":[[431,5]]},"480":{"position":[[169,5]]},"492":{"position":[[560,5]]},"660":{"position":[[822,5]]},"665":{"position":[[560,5]]},"695":{"position":[[560,5]]},"1183":{"position":[[543,5]]},"1439":{"position":[[1012,5]]},"1449":{"position":[[431,5]]}},"keywords":{}}],["doc",{"_index":1837,"title":{},"content":{"146":{"position":[[740,5]]},"149":{"position":[[713,5]]},"152":{"position":[[716,5]]},"173":{"position":[[1245,5]]},"207":{"position":[[612,4]]},"208":{"position":[[693,5]]},"237":{"position":[[1024,5]]},"239":{"position":[[1053,4]]},"253":{"position":[[214,4]]},"281":{"position":[[1424,4],[1471,3]]},"295":{"position":[[1643,4]]},"296":{"position":[[5503,4],[5613,4],[6155,4],[6306,4]]},"308":{"position":[[277,4]]},"313":{"position":[[214,4]]},"315":{"position":[[1611,4],[1906,4]]},"385":{"position":[[474,4]]},"390":{"position":[[555,5]]},"395":{"position":[[734,5]]},"430":{"position":[[158,5]]},"460":{"position":[[512,5]]},"531":{"position":[[577,4]]},"556":{"position":[[504,5],[1568,5]]},"724":{"position":[[334,5],[726,5]]},"738":{"position":[[306,4],[436,4],[735,5]]},"747":{"position":[[115,4]]},"754":{"position":[[986,5]]},"794":{"position":[[1190,5]]},"809":{"position":[[1190,5]]},"825":{"position":[[1026,5]]},"945":{"position":[[482,4]]},"1007":{"position":[[173,5]]},"1097":{"position":[[37,5]]},"1122":{"position":[[360,5]]},"1131":{"position":[[196,4]]},"1178":{"position":[[510,5]]},"1179":{"position":[[964,5]]},"1192":{"position":[[462,5]]},"1204":{"position":[[658,4]]},"1206":{"position":[[1138,4]]},"1286":{"position":[[1247,5]]},"1301":{"position":[[1083,5]]},"1325":{"position":[[1247,5]]},"1356":{"position":[[715,4]]},"1394":{"position":[[458,5]]},"1418":{"position":[[320,3]]},"1423":{"position":[[464,5]]},"1470":{"position":[[981,4],[1113,4],[1250,4]]}},"keywords":{}}],["doc.amount",{"_index":2892,"title":{},"content":{"281":{"position":[[1547,10],[1618,10]]}},"keywords":{}}],["doc.recipi",{"_index":2893,"title":{},"content":{"281":{"position":[[1594,14]]}},"keywords":{}}],["doc.send",{"_index":2891,"title":{},"content":{"281":{"position":[[1525,11]]}},"keywords":{}}],["docker",{"_index":706,"title":{},"content":{"38":{"position":[[571,6]]},"56":{"position":[[1068,6],[1095,6]]},"81":{"position":[[43,8]]},"84":{"position":[[750,6]]},"120":{"position":[[408,6],[435,6]]},"234":{"position":[[69,7],[113,6]]},"236":{"position":[[304,6],[329,6],[499,6],[566,6],[1569,6]]},"237":{"position":[[3130,6]]},"242":{"position":[[193,6]]},"1197":{"position":[[118,6]]},"1207":{"position":[[343,6]]},"1357":{"position":[[193,6]]},"1480":{"position":[[345,6],[372,6]]}},"keywords":{}}],["docs.lead",{"_index":4546,"title":{},"content":{"738":{"position":[[542,11]]}},"keywords":{}}],["docs.list",{"_index":4547,"title":{},"content":{"738":{"position":[[602,11]]}},"keywords":{}}],["docs.program",{"_index":4548,"title":{},"content":{"738":{"position":[[669,14]]}},"keywords":{}}],["docstot",{"_index":6665,"title":{},"content":{"1470":{"position":[[830,9]]}},"keywords":{}}],["document",{"_index":79,"title":{"66":{"position":[[0,10]]},"68":{"position":[[19,10]]},"98":{"position":[[0,8]]},"207":{"position":[[0,9]]}},"content":{"2":{"position":[[317,10]]},"3":{"position":[[126,9]]},"8":{"position":[[322,8],[400,8],[949,10]]},"16":{"position":[[419,9],[522,9],[693,9],[800,8]]},"17":{"position":[[1119,9]]},"20":{"position":[[117,9]]},"26":{"position":[[570,14]]},"34":{"position":[[58,9],[118,9],[230,9],[443,9],[808,9]]},"35":{"position":[[103,9],[165,9]]},"36":{"position":[[108,9],[248,9]]},"40":{"position":[[223,10]]},"41":{"position":[[68,9],[217,9],[440,10],[557,9]]},"42":{"position":[[85,9],[298,9],[388,9],[468,8],[501,9],[645,10]]},"43":{"position":[[289,8]]},"44":{"position":[[193,9],[356,9]]},"52":{"position":[[237,14]]},"53":{"position":[[324,10],[472,13]]},"60":{"position":[[1059,13]]},"66":{"position":[[44,10],[144,10],[237,10],[256,8],[463,9],[549,9],[611,8],[678,9],[727,9],[773,8]]},"67":{"position":[[41,10],[106,8],[179,9],[261,8],[317,9],[468,8],[614,8],[815,8],[893,8],[1081,8],[1404,8],[1514,8],[1729,8],[2098,9]]},"68":{"position":[[209,9],[503,9],[570,9],[1210,13],[1424,9],[1541,9]]},"69":{"position":[[286,9],[574,10]]},"70":{"position":[[68,9],[614,9]]},"71":{"position":[[69,10],[131,8],[277,9]]},"72":{"position":[[7,8],[196,10],[310,8]]},"74":{"position":[[37,9],[197,9],[390,9],[1015,9]]},"76":{"position":[[53,8],[593,8],[733,8],[850,8]]},"77":{"position":[[50,9],[419,9],[537,9]]},"82":{"position":[[554,8],[1688,8],[2835,8],[3596,8]]},"83":{"position":[[363,13]]},"94":{"position":[[1571,9],[1628,9],[1773,9],[1850,10],[1921,9],[1978,9],[2139,9],[2216,10],[2626,9],[2778,9],[2968,10],[3043,9]]},"95":{"position":[[164,9]]},"96":{"position":[[97,9],[320,9],[539,8]]},"97":{"position":[[567,9],[636,9]]},"98":{"position":[[105,9],[295,8],[516,10],[1065,9],[1144,8],[1220,9]]},"99":{"position":[[48,8],[121,9],[225,9],[470,9],[515,9]]},"100":{"position":[[893,9],[1125,9]]},"101":{"position":[[157,9],[382,9]]},"102":{"position":[[63,9]]},"105":{"position":[[73,9],[150,9],[226,9],[300,9],[366,9],[397,9],[607,9]]},"106":{"position":[[52,9],[445,9],[634,9]]},"107":{"position":[[16,8],[368,10],[457,9],[516,9],[671,9],[1177,8],[1343,10],[1405,9],[2328,9],[2403,9],[2552,9],[2942,9],[3099,9],[3220,8]]},"108":{"position":[[85,9],[131,9],[202,9]]},"109":{"position":[[221,9],[275,9],[448,9]]},"110":{"position":[[93,9],[207,8],[352,10],[478,9]]},"111":{"position":[[34,9],[114,9],[529,9],[607,9]]},"112":{"position":[[259,9],[288,10]]},"114":{"position":[[216,10],[612,9]]},"115":{"position":[[255,9],[421,8],[1205,8]]},"120":{"position":[[1123,9],[1180,9],[1325,9],[1402,10],[1473,9],[1530,9],[1691,9],[1768,10],[2218,9],[2298,9],[2454,9],[2513,9]]},"121":{"position":[[264,9],[457,9],[530,9],[598,9],[653,9],[714,9],[764,9],[1233,9],[1558,9]]},"122":{"position":[[27,8],[92,10],[325,8],[964,8],[2091,13]]},"124":{"position":[[506,9],[591,9],[633,9],[931,10]]},"125":{"position":[[134,9],[525,9],[868,9],[979,8],[1190,9],[1503,14]]},"128":{"position":[[18,9],[55,9],[159,9],[250,9],[468,9],[504,10],[684,10]]},"129":{"position":[[82,8],[110,9],[148,8],[292,9],[390,8],[443,8],[486,8],[525,9],[749,10],[877,10],[1017,10]]},"130":{"position":[[62,9],[193,9],[236,10]]},"132":{"position":[[216,9],[437,9],[491,10],[651,10]]},"133":{"position":[[60,9],[179,9],[427,10],[590,9]]},"138":{"position":[[1997,10]]},"141":{"position":[[1929,10]]},"142":{"position":[[2050,10]]},"146":{"position":[[129,9]]},"149":{"position":[[132,9],[1194,10],[1261,9],[1354,9]]},"152":{"position":[[142,9]]},"156":{"position":[[84,10],[606,8]]},"159":{"position":[[142,9],[430,9]]},"160":{"position":[[184,9],[344,8],[411,8],[698,10]]},"161":{"position":[[240,9]]},"163":{"position":[[42,9],[167,9],[206,8],[318,8],[621,9],[803,10],[897,8]]},"164":{"position":[[77,8],[188,8],[361,9],[829,14]]},"165":{"position":[[688,9],[826,9],[1909,10],[2016,9]]},"175":{"position":[[189,14]]},"183":{"position":[[1663,9],[4132,9]]},"184":{"position":[[540,13]]},"191":{"position":[[307,14]]},"197":{"position":[[868,9],[965,10],[1050,9],[1131,9],[1348,9],[1416,9]]},"207":{"position":[[114,9],[194,9],[260,9],[649,10],[1349,9],[1529,9]]},"209":{"position":[[530,10]]},"210":{"position":[[61,10],[279,10],[394,9],[1764,8],[3901,9]]},"211":{"position":[[291,8]]},"212":{"position":[[262,14]]},"215":{"position":[[169,13]]},"217":{"position":[[487,13]]},"221":{"position":[[88,13],[268,13]]},"239":{"position":[[702,9],[717,9],[797,9],[825,9],[1100,9],[1227,10],[2761,13]]},"243":{"position":[[256,14]]},"245":{"position":[[66,9],[126,9]]},"253":{"position":[[498,9],[684,10],[970,9]]},"254":{"position":[[1197,9],[1686,10],[2062,13],[2151,10],[2257,10],[2319,8],[2417,9],[2988,9],[3239,9],[3316,9]]},"264":{"position":[[227,13]]},"275":{"position":[[249,13]]},"277":{"position":[[1030,9],[1199,9]]},"278":{"position":[[1466,9]]},"279":{"position":[[605,9],[736,9],[873,9]]},"281":{"position":[[1240,9],[1452,10],[2790,8]]},"295":{"position":[[1798,9]]},"296":{"position":[[327,8],[1167,9],[1298,8],[2016,8],[3261,9],[3320,9],[4442,9],[4509,8],[4525,8],[4722,9],[4921,9],[5233,9],[5529,10],[5642,10],[5885,9],[6181,10],[6335,10],[6559,9],[7037,9]]},"301":{"position":[[1190,13]]},"313":{"position":[[498,9],[684,10],[970,9]]},"314":{"position":[[918,9],[1017,9],[1503,10],[1681,10],[1798,10],[1860,8],[1958,9],[2814,9],[2891,9]]},"315":{"position":[[932,9],[1035,8],[1326,9],[1649,10],[1944,10],[2331,9]]},"324":{"position":[[316,14]]},"326":{"position":[[669,8]]},"332":{"position":[[334,8]]},"343":{"position":[[436,9],[638,9],[927,9],[1009,9]]},"345":{"position":[[262,14]]},"379":{"position":[[371,11],[634,10],[972,13]]},"390":{"position":[[454,9]]},"395":{"position":[[624,9]]},"429":{"position":[[1276,13]]},"472":{"position":[[388,14]]},"480":{"position":[[121,9]]},"486":{"position":[[196,9]]},"488":{"position":[[969,10],[1076,8]]},"492":{"position":[[413,9]]},"496":{"position":[[199,14]]},"558":{"position":[[210,14]]},"560":{"position":[[377,13]]},"590":{"position":[[59,9],[211,8],[361,10],[392,8],[493,9],[654,9],[747,9],[789,8],[1059,8]]},"594":{"position":[[926,9]]},"595":{"position":[[214,9],[248,9],[364,10],[645,8],[732,8],[1714,9],[1807,8]]},"602":{"position":[[494,8],[854,9],[942,10],[1042,8]]},"619":{"position":[[674,9]]},"640":{"position":[[306,13]]},"658":{"position":[[196,9]]},"659":{"position":[[1126,10],[1233,8]]},"660":{"position":[[329,8]]},"665":{"position":[[413,9]]},"667":{"position":[[150,14]]},"674":{"position":[[196,9]]},"676":{"position":[[969,10],[1076,8]]},"680":{"position":[[413,9]]},"689":{"position":[[196,9]]},"690":{"position":[[321,13]]},"691":{"position":[[969,10],[1076,8]]},"695":{"position":[[413,9]]},"767":{"position":[[290,14]]},"779":{"position":[[164,9]]},"785":{"position":[[184,10]]},"786":{"position":[[10,9]]},"792":{"position":[[603,14]]},"805":{"position":[[69,10],[356,10]]},"820":{"position":[[69,10],[356,10]]},"821":{"position":[[162,10]]},"824":{"position":[[395,14]]},"836":{"position":[[69,10],[356,10]]},"842":{"position":[[3590,9],[3730,9]]},"900":{"position":[[387,14]]},"907":{"position":[[1863,13]]},"912":{"position":[[170,10]]},"918":{"position":[[603,14]]},"923":{"position":[[1863,13]]},"943":{"position":[[698,13],[864,13]]},"946":{"position":[[193,13]]},"968":{"position":[[1863,13]]},"1008":{"position":[[725,10],[1000,13]]},"1122":{"position":[[251,9]]},"1123":{"position":[[189,9],[208,8],[482,9],[550,8],[621,8],[740,10]]},"1140":{"position":[[226,14]]},"1156":{"position":[[329,10]]},"1157":{"position":[[36,8],[97,9],[242,10]]},"1166":{"position":[[39,9]]},"1176":{"position":[[653,13]]},"1182":{"position":[[166,9]]},"1185":{"position":[[453,13]]},"1186":{"position":[[104,13],[701,13]]},"1191":{"position":[[166,9]]},"1192":{"position":[[208,13]]},"1194":{"position":[[179,13],[663,13]]},"1201":{"position":[[481,8]]},"1203":{"position":[[386,9],[824,13]]},"1204":{"position":[[90,13]]},"1208":{"position":[[205,9]]},"1226":{"position":[[464,13]]},"1227":{"position":[[211,13]]},"1228":{"position":[[226,13],[323,13]]},"1234":{"position":[[164,9]]},"1243":{"position":[[241,13]]},"1250":{"position":[[56,9],[165,9]]},"1262":{"position":[[166,9]]},"1275":{"position":[[68,9]]},"1276":{"position":[[165,8],[254,8]]},"1279":{"position":[[395,9]]},"1289":{"position":[[477,14]]},"1292":{"position":[[154,14]]},"1306":{"position":[[154,14]]},"1313":{"position":[[1613,13]]},"1316":{"position":[[226,14]]},"1321":{"position":[[257,14]]},"1329":{"position":[[154,14]]},"1334":{"position":[[345,14]]},"1337":{"position":[[1613,13]]},"1340":{"position":[[226,14]]},"1351":{"position":[[226,14]]},"1354":{"position":[[488,13]]},"1358":{"position":[[116,8],[272,9],[428,10]]},"1370":{"position":[[218,14]]},"1379":{"position":[[162,14]]},"1382":{"position":[[707,13]]},"1389":{"position":[[166,9]]},"1393":{"position":[[315,13]]},"1394":{"position":[[206,13]]},"1403":{"position":[[162,14]]},"1414":{"position":[[162,14]]},"1423":{"position":[[209,13]]},"1431":{"position":[[249,14]]},"1440":{"position":[[224,10],[349,9],[454,9],[596,9],[639,8],[690,8],[768,8],[785,9],[846,9],[922,9],[982,8],[1085,8],[1149,9],[1247,9],[1395,8],[1583,8]]},"1442":{"position":[[1112,9]]},"1443":{"position":[[57,9],[85,8],[958,9]]},"1444":{"position":[[85,10],[195,9]]},"1448":{"position":[[1105,14]]},"1451":{"position":[[941,9]]},"1455":{"position":[[531,9]]},"1459":{"position":[[10,9],[138,8],[232,9],[305,9],[417,10],[688,8],[771,9],[835,9],[858,9],[936,8],[991,8],[1089,8],[1483,14],[1557,8],[1720,9]]},"1463":{"position":[[615,10],[817,10]]},"1464":{"position":[[497,10],[660,10]]},"1465":{"position":[[118,8],[682,9],[1194,10],[1359,10],[1460,10],[1626,10]]},"1466":{"position":[[475,10],[608,10]]},"1467":{"position":[[90,8],[1012,10],[1157,10],[1313,10],[1519,10],[2439,10],[2685,10]]},"1473":{"position":[[367,9]]},"1474":{"position":[[9,8]]},"1475":{"position":[[7,9],[597,9],[889,9],[1011,9],[1174,9],[1264,9],[1371,9],[1597,9]]},"1476":{"position":[[448,10],[624,10],[961,8],[1032,9],[1675,10],[2047,10]]},"1477":{"position":[[23,8],[236,8],[401,8],[593,8],[1706,10],[2050,10],[2219,10],[2471,10],[4052,10],[4408,10],[4587,10],[4849,10]]},"1480":{"position":[[829,9],[886,9],[1031,9],[1108,10],[1179,9],[1236,9],[1397,9],[1474,10]]}},"keywords":{}}],["document:{"greeting"",{"_index":1414,"title":{},"content":{"98":{"position":[[721,31]]}},"keywords":{}}],["documentation.cr",{"_index":4995,"title":{},"content":{"904":{"position":[[395,20]]},"1051":{"position":[[395,20]]},"1373":{"position":[[377,20]]},"1374":{"position":[[377,20]]}},"keywords":{}}],["documentationfor",{"_index":4695,"title":{},"content":{"786":{"position":[[423,16]]}},"keywords":{}}],["documents.captur",{"_index":292,"title":{},"content":{"11":{"position":[[90,18]]}},"keywords":{}}],["documentswrit",{"_index":1656,"title":{},"content":{"121":{"position":[[740,15]]}},"keywords":{}}],["documentt0",{"_index":1612,"title":{},"content":{"114":{"position":[[315,10]]},"115":{"position":[[795,10]]}},"keywords":{}}],["document’",{"_index":3107,"title":{},"content":{"319":{"position":[[1175,10]]}},"keywords":{}}],["doe",{"_index":2937,"title":{},"content":{"295":{"position":[[319,3]]}},"keywords":{}}],["doesn't",{"_index":516,"title":{},"content":{"19":{"position":[[235,7]]},"41":{"position":[[251,7]]},"72":{"position":[[437,7]]},"75":{"position":[[168,7]]},"107":{"position":[[2232,7]]},"208":{"position":[[924,7]]},"306":{"position":[[505,7]]},"325":{"position":[[443,7]]},"366":{"position":[[1164,7]]},"496":{"position":[[224,7]]},"534":{"position":[[1630,7]]},"757":{"position":[[1279,7]]},"770":{"position":[[1279,7]]},"797":{"position":[[1279,7]]},"812":{"position":[[1279,7]]},"821":{"position":[[504,7]]},"828":{"position":[[1279,7]]},"867":{"position":[[1987,7]]},"912":{"position":[[520,7]]},"1040":{"position":[[175,7]]},"1047":{"position":[[230,7]]},"1050":{"position":[[175,7]]},"1055":{"position":[[230,7]]},"1058":{"position":[[175,7]]},"1063":{"position":[[230,7]]},"1136":{"position":[[317,7]]},"1208":{"position":[[39,7]]},"1282":{"position":[[341,7]]},"1288":{"position":[[315,7]]},"1310":{"position":[[356,7]]},"1447":{"position":[[452,7]]}},"keywords":{}}],["doesn’t",{"_index":1291,"title":{},"content":{"87":{"position":[[583,7]]},"110":{"position":[[704,7]]},"296":{"position":[[3065,7]]},"319":{"position":[[829,7]]},"1268":{"position":[[319,7]]}},"keywords":{}}],["domain",{"_index":3064,"title":{},"content":{"313":{"position":[[3403,7],[3664,6]]},"314":{"position":[[1239,7]]},"315":{"position":[[1118,8],[2378,6]]},"469":{"position":[[67,6]]},"471":{"position":[[36,6]]},"472":{"position":[[732,6]]},"509":{"position":[[112,7],[120,6],[137,6]]},"510":{"position":[[137,7]]},"609":{"position":[[367,6]]},"712":{"position":[[168,7],[176,6],[187,6]]},"713":{"position":[[132,7]]},"741":{"position":[[407,6]]},"742":{"position":[[220,6]]},"747":{"position":[[1090,6]]},"1140":{"position":[[2032,6]]},"1316":{"position":[[2032,6]]},"1340":{"position":[[2032,6]]},"1351":{"position":[[2032,6]]},"1379":{"position":[[3404,6]]},"1403":{"position":[[3404,6]]},"1414":{"position":[[3404,6]]},"1431":{"position":[[2055,6]]}},"keywords":{}}],["domain.com",{"_index":4505,"title":{},"content":{"712":{"position":[[273,10]]}},"keywords":{}}],["domain_nam",{"_index":3805,"title":{},"content":{"473":{"position":[[222,12]]}},"keywords":{}}],["domain_url",{"_index":4554,"title":{},"content":{"741":{"position":[[395,11]]},"742":{"position":[[199,11]]}},"keywords":{}}],["don't",{"_index":552,"title":{},"content":{"20":{"position":[[1020,5]]},"25":{"position":[[5,5]]},"41":{"position":[[567,5]]},"100":{"position":[[868,5]]},"106":{"position":[[400,6]]},"107":{"position":[[2572,5]]},"122":{"position":[[988,5]]},"162":{"position":[[335,5],[349,5],[1849,5]]},"165":{"position":[[1636,5]]},"179":{"position":[[33,5]]},"188":{"position":[[47,5]]},"191":{"position":[[357,5]]},"193":{"position":[[251,5]]},"217":{"position":[[1441,5]]},"221":{"position":[[52,5]]},"266":{"position":[[50,5]]},"280":{"position":[[105,5]]},"281":{"position":[[548,5]]},"286":{"position":[[300,5]]},"288":{"position":[[141,5]]},"299":{"position":[[141,5]]},"320":{"position":[[1432,5]]},"321":{"position":[[893,5],[1129,5]]},"325":{"position":[[664,5]]},"330":{"position":[[564,5]]},"332":{"position":[[75,5]]},"415":{"position":[[240,5]]},"429":{"position":[[706,5]]},"480":{"position":[[908,5]]},"489":{"position":[[746,5]]},"496":{"position":[[368,5]]},"661":{"position":[[15,5]]},"662":{"position":[[746,5]]},"677":{"position":[[746,5]]},"692":{"position":[[746,5]]},"726":{"position":[[61,5]]},"849":{"position":[[2515,5]]},"985":{"position":[[685,5]]},"1000":{"position":[[835,5],[999,5]]},"1186":{"position":[[49,5]]},"1388":{"position":[[218,5]]},"1434":{"position":[[1580,5]]}},"keywords":{}}],["done",{"_index":512,"title":{},"content":{"19":{"position":[[138,4]]},"54":{"position":[[617,4]]},"113":{"position":[[383,4]]},"158":{"position":[[90,4]]},"160":{"position":[[238,4]]},"170":{"position":[[245,5]]},"174":{"position":[[614,5]]},"242":{"position":[[78,4]]},"259":{"position":[[1416,4],[2962,4]]},"264":{"position":[[310,5]]},"275":{"position":[[346,5]]},"296":{"position":[[2332,5],[6649,4]]},"780":{"position":[[346,4]]},"964":{"position":[[687,4]]},"1125":{"position":[[682,4]]},"1138":{"position":[[1542,4]]},"1151":{"position":[[1483,4]]},"1162":{"position":[[1006,4]]},"1177":{"position":[[301,5]]},"1183":{"position":[[424,4]]},"1253":{"position":[[571,4]]},"1260":{"position":[[1031,4]]},"1286":{"position":[[2747,4]]},"1301":{"position":[[2583,4]]},"1313":{"position":[[1086,4]]},"1325":{"position":[[2747,4]]},"1337":{"position":[[1086,4]]},"1348":{"position":[[1086,4]]},"1376":{"position":[[662,4]]},"1400":{"position":[[662,4]]},"1411":{"position":[[662,4]]},"1427":{"position":[[846,4]]},"1442":{"position":[[1656,5]]},"1464":{"position":[[989,4]]},"1467":{"position":[[1832,5]]}},"keywords":{}}],["don’t",{"_index":2419,"title":{},"content":{"212":{"position":[[378,5]]},"232":{"position":[[1023,5]]},"236":{"position":[[1539,5],[1648,5]]},"237":{"position":[[3468,5]]},"238":{"position":[[535,5]]},"242":{"position":[[938,5]]},"243":{"position":[[373,5]]},"297":{"position":[[124,5],[161,5]]},"314":{"position":[[2512,6]]},"324":{"position":[[1181,5]]},"1463":{"position":[[169,5]]}},"keywords":{}}],["doubl",{"_index":2081,"title":{},"content":{"183":{"position":[[3413,6]]},"419":{"position":[[2671,6]]},"441":{"position":[[1280,6]]},"504":{"position":[[2300,6]]},"547":{"position":[[2673,6]]},"578":{"position":[[268,6]]},"639":{"position":[[2298,6]]},"1023":{"position":[[2654,6]]},"1140":{"position":[[2059,6]]},"1164":{"position":[[288,6],[509,6]]},"1172":{"position":[[390,6]]},"1209":{"position":[[714,6]]},"1222":{"position":[[390,6]]},"1292":{"position":[[800,6]]},"1306":{"position":[[800,6]]},"1316":{"position":[[2059,6]]},"1329":{"position":[[800,6]]},"1340":{"position":[[2059,6]]},"1351":{"position":[[2059,6]]},"1379":{"position":[[3455,6]]},"1403":{"position":[[3455,6]]},"1414":{"position":[[3455,6]]},"1431":{"position":[[2082,6]]}},"keywords":{}}],["doublecolon",{"_index":5874,"title":{},"content":{"1209":{"position":[[740,11]]}},"keywords":{}}],["doubt",{"_index":2090,"title":{},"content":{"184":{"position":[[487,6]]}},"keywords":{}}],["dow",{"_index":5876,"title":{},"content":{"1209":{"position":[[774,3]]}},"keywords":{}}],["down",{"_index":179,"title":{},"content":{"4":{"position":[[570,5],[654,4]]},"68":{"position":[[467,4],[1728,4]]},"80":{"position":[[323,4],[395,5]]},"146":{"position":[[1084,4]]},"149":{"position":[[1078,4]]},"152":{"position":[[1068,4]]},"180":{"position":[[63,4],[817,4]]},"191":{"position":[[2143,4]]},"192":{"position":[[1178,4]]},"206":{"position":[[140,4]]},"217":{"position":[[763,4],[1551,4]]},"240":{"position":[[2137,4],[2914,4]]},"249":{"position":[[134,4]]},"290":{"position":[[586,4]]},"301":{"position":[[526,4]]},"306":{"position":[[22,4]]},"385":{"position":[[442,4]]},"436":{"position":[[513,4]]},"477":{"position":[[625,4]]},"595":{"position":[[1611,4]]},"598":{"position":[[589,4]]},"761":{"position":[[376,4]]},"762":{"position":[[495,4]]},"764":{"position":[[626,4]]},"774":{"position":[[376,4]]},"775":{"position":[[495,4]]},"777":{"position":[[626,4]]},"801":{"position":[[382,4]]},"802":{"position":[[495,4]]},"804":{"position":[[624,4]]},"816":{"position":[[382,4]]},"817":{"position":[[495,4]]},"819":{"position":[[624,4]]},"832":{"position":[[382,4]]},"833":{"position":[[495,4]]},"835":{"position":[[624,4]]},"849":{"position":[[1727,4]]},"931":{"position":[[737,4]]},"1008":{"position":[[1042,4]]},"1388":{"position":[[253,5]]}},"keywords":{}}],["download",{"_index":877,"title":{},"content":{"58":{"position":[[249,8]]},"169":{"position":[[488,8]]},"236":{"position":[[534,8]]},"571":{"position":[[702,10]]},"582":{"position":[[315,10]]},"609":{"position":[[259,10]]},"617":{"position":[[626,10]]},"637":{"position":[[1083,11]]},"1177":{"position":[[456,11]]},"1204":{"position":[[514,8]]},"1245":{"position":[[578,10]]}},"keywords":{}}],["downsid",{"_index":3842,"title":{},"content":{"480":{"position":[[1631,8]]},"922":{"position":[[3293,8]]}},"keywords":{}}],["downstream",{"_index":672,"title":{},"content":{"34":{"position":[[393,10]]},"41":{"position":[[306,10]]},"196":{"position":[[265,10]]},"197":{"position":[[532,10]]},"227":{"position":[[274,10]]},"233":{"position":[[272,10]]},"237":{"position":[[174,10]]},"259":{"position":[[1014,10],[1293,10],[2595,10]]},"305":{"position":[[582,10]]},"333":{"position":[[592,10]]},"411":{"position":[[141,10]]},"909":{"position":[[645,10]]},"925":{"position":[[645,10]]},"936":{"position":[[645,10]]},"952":{"position":[[645,10]]},"970":{"position":[[645,10]]}},"keywords":{}}],["downtim",{"_index":517,"title":{},"content":{"19":{"position":[[251,9]]},"49":{"position":[[487,8]]},"101":{"position":[[460,8]]},"105":{"position":[[1097,9]]},"320":{"position":[[2276,8]]},"333":{"position":[[281,9]]}},"keywords":{}}],["doy",{"_index":5878,"title":{},"content":{"1209":{"position":[[813,3]]}},"keywords":{}}],["draft",{"_index":366,"title":{"62":{"position":[[36,7]]},"261":{"position":[[7,5]]},"263":{"position":[[13,5]]},"264":{"position":[[9,5]]}},"content":{"12":{"position":[[296,6]]},"13":{"position":[[352,5],[397,6],[426,5]]},"24":{"position":[[186,6]]},"33":{"position":[[309,7]]},"60":{"position":[[902,5]]},"63":{"position":[[96,5],[1040,5],[1192,5]]},"87":{"position":[[753,5]]},"263":{"position":[[1,6],[244,5],[291,6],[387,5],[419,5],[512,6],[559,6],[691,5],[712,6],[727,5],[777,5],[831,5],[965,6]]},"264":{"position":[[74,6],[350,6],[365,5],[486,5],[519,6],[534,5]]},"273":{"position":[[142,7]]},"340":{"position":[[75,6]]},"1077":{"position":[[164,5]]},"1461":{"position":[[3971,5]]}},"keywords":{}}],["dramat",{"_index":3188,"title":{},"content":{"329":{"position":[[828,12]]},"330":{"position":[[637,12]]},"1391":{"position":[[461,12]]}},"keywords":{}}],["dramaticallyexecut",{"_index":3193,"title":{},"content":{"330":{"position":[[242,21]]}},"keywords":{}}],["drive",{"_index":1449,"title":{"561":{"position":[[7,5]]}},"content":{"101":{"position":[[274,5]]},"241":{"position":[[537,5]]},"562":{"position":[[76,5],[162,5],[271,5]]},"563":{"position":[[27,5],[321,5]]},"564":{"position":[[144,6]]},"565":{"position":[[98,5],[177,6]]},"617":{"position":[[98,5],[317,5]]},"619":{"position":[[232,5]]},"1245":{"position":[[40,5],[269,5]]}},"keywords":{}}],["drive:dev",{"_index":4136,"title":{},"content":{"566":{"position":[[96,9]]}},"keywords":{}}],["driven",{"_index":1570,"title":{},"content":{"110":{"position":[[512,6]]},"210":{"position":[[2039,6]]},"909":{"position":[[996,6]]},"925":{"position":[[996,6]]},"936":{"position":[[996,6]]},"952":{"position":[[996,6]]},"970":{"position":[[996,6]]}},"keywords":{}}],["driver",{"_index":6429,"title":{},"content":{"1434":{"position":[[141,6],[279,7],[380,6],[441,7],[602,7],[792,7],[965,6],[1103,7],[1291,7],[1373,6],[1481,6],[1535,7],[1593,6],[1715,7],[1920,7],[2021,7],[2066,6],[2197,7]]},"1435":{"position":[[496,6],[526,6],[659,7]]},"1438":{"position":[[143,6]]},"1439":{"position":[[60,6],[433,6],[496,6],[950,6],[993,6],[1032,6],[1575,6]]},"1442":{"position":[[238,6],[520,6],[642,6],[926,7],[1149,6],[1176,7],[1349,6],[1524,6],[1599,6],[1663,7],[1782,7]]},"1443":{"position":[[189,7],[421,6],[761,7]]},"1444":{"position":[[60,7],[158,6],[309,7],[512,6],[584,6],[934,6]]}},"keywords":{}}],["driver'",{"_index":6510,"title":{},"content":{"1444":{"position":[[772,8]]}},"keywords":{}}],["drivercp",{"_index":6434,"title":{},"content":{"1434":{"position":[[255,9]]}},"keywords":{}}],["drop",{"_index":416,"title":{},"content":{"13":{"position":[[1723,4]]},"68":{"position":[[462,4]]},"80":{"position":[[318,4],[390,4]]},"105":{"position":[[1207,7]]},"146":{"position":[[1079,4]]},"149":{"position":[[1073,4]]},"152":{"position":[[1063,4]]},"191":{"position":[[2138,4]]},"208":{"position":[[1934,4]]},"217":{"position":[[758,4]]},"240":{"position":[[2132,4]]},"242":{"position":[[627,4],[646,4],[686,4],[709,4],[743,4],[780,4],[809,4],[847,4]]},"290":{"position":[[581,4]]},"301":{"position":[[521,4]]},"307":{"position":[[2967,7]]},"309":{"position":[[937,8]]},"310":{"position":[[237,8]]},"760":{"position":[[232,4],[594,4],[773,4]]},"773":{"position":[[232,4],[594,4],[773,4]]},"800":{"position":[[232,4],[594,4],[773,4]]},"815":{"position":[[232,4],[594,4],[773,4]]},"831":{"position":[[232,4],[594,4],[773,4]]},"922":{"position":[[1849,4]]},"942":{"position":[[349,7]]},"1140":{"position":[[2103,4]]},"1183":{"position":[[1097,4],[1123,4],[1549,4],[1590,4]]},"1209":{"position":[[829,4]]},"1292":{"position":[[849,4]]},"1306":{"position":[[849,4]]},"1316":{"position":[[2103,4]]},"1329":{"position":[[849,4]]},"1340":{"position":[[2103,4]]},"1351":{"position":[[2103,4]]},"1370":{"position":[[925,4]]},"1379":{"position":[[3515,4]]},"1394":{"position":[[1002,4]]},"1403":{"position":[[3515,4]]},"1414":{"position":[[3515,4]]},"1417":{"position":[[394,4]]},"1423":{"position":[[820,4]]},"1431":{"position":[[2126,4]]}},"keywords":{}}],["dropbox",{"_index":3295,"title":{"498":{"position":[[0,7]]},"504":{"position":[[18,7]]}},"content":{"363":{"position":[[927,7]]},"499":{"position":[[69,7]]},"500":{"position":[[53,7],[196,7]]},"501":{"position":[[19,7],[206,7]]},"502":{"position":[[87,7],[439,8],[1619,7]]},"504":{"position":[[1,7],[252,7]]}},"keywords":{}}],["dropbox:dev",{"_index":3296,"title":{},"content":{"363":{"position":[[981,11]]}},"keywords":{}}],["dropdown",{"_index":2062,"title":{},"content":{"183":{"position":[[355,9]]},"190":{"position":[[710,8]]},"192":{"position":[[348,8]]},"267":{"position":[[271,9],[730,9]]},"487":{"position":[[120,9],[690,9]]},"840":{"position":[[1089,8],[1188,8],[1285,8],[1381,8],[1817,8]]},"849":{"position":[[2100,8],[2858,8]]},"1455":{"position":[[205,8]]}},"keywords":{}}],["dropdown.fil",{"_index":3255,"title":{},"content":{"349":{"position":[[235,13]]},"1092":{"position":[[243,13]]}},"keywords":{}}],["dual",{"_index":5998,"title":{},"content":{"1292":{"position":[[891,4]]},"1306":{"position":[[891,4]]},"1329":{"position":[[891,4]]}},"keywords":{}}],["due",{"_index":1211,"title":{},"content":{"83":{"position":[[143,3]]},"97":{"position":[[719,3]]},"125":{"position":[[623,3]]},"138":{"position":[[1662,3]]},"141":{"position":[[1667,3]]},"142":{"position":[[1679,3]]},"254":{"position":[[3775,3]]},"305":{"position":[[503,3]]},"309":{"position":[[770,3]]},"331":{"position":[[416,3]]},"560":{"position":[[1,3]]},"642":{"position":[[242,3]]},"660":{"position":[[210,3]]},"869":{"position":[[736,4]]},"909":{"position":[[979,3]]},"910":{"position":[[47,3]]},"925":{"position":[[979,3]]},"926":{"position":[[47,3]]},"936":{"position":[[979,3]]},"937":{"position":[[47,3]]},"952":{"position":[[979,3]]},"953":{"position":[[47,3]]},"970":{"position":[[979,3]]},"971":{"position":[[47,3]]},"1438":{"position":[[522,3]]}},"keywords":{}}],["dump",{"_index":6339,"title":{},"content":{"1379":{"position":[[3566,4]]},"1403":{"position":[[3566,4]]},"1414":{"position":[[3566,4]]}},"keywords":{}}],["dumpfil",{"_index":6000,"title":{},"content":{"1292":{"position":[[929,8]]},"1306":{"position":[[929,8]]},"1329":{"position":[[929,8]]}},"keywords":{}}],["duplic",{"_index":1745,"title":{},"content":{"133":{"position":[[645,9]]},"379":{"position":[[355,9],[623,10],[889,10]]},"595":{"position":[[568,12],[1098,10]]},"602":{"position":[[844,9],[889,10]]},"660":{"position":[[217,9]]},"821":{"position":[[957,10]]},"912":{"position":[[1001,11]]},"1008":{"position":[[750,10]]},"1292":{"position":[[969,9]]},"1306":{"position":[[969,9]]},"1329":{"position":[[969,9]]},"1437":{"position":[[1138,11]]},"1467":{"position":[[1894,10]]},"1477":{"position":[[2796,10]]}},"keywords":{}}],["durabl",{"_index":770,"title":{},"content":{"46":{"position":[[52,7]]},"48":{"position":[[190,10]]},"100":{"position":[[1056,7]]},"117":{"position":[[181,7]]},"320":{"position":[[647,7]]},"331":{"position":[[307,7]]},"332":{"position":[[133,7]]},"602":{"position":[[68,7],[472,7]]},"1435":{"position":[[418,7]]}},"keywords":{}}],["durat",{"_index":44,"title":{},"content":{"1":{"position":[[554,9],[720,8],[840,9]]},"20":{"position":[[468,9],[521,9],[680,9],[994,9],[1096,8]]},"169":{"position":[[1697,9]]},"209":{"position":[[1392,8]]},"339":{"position":[[81,8]]},"340":{"position":[[557,9]]},"343":{"position":[[342,8],[356,8],[691,8],[832,8],[846,8]]},"377":{"position":[[829,8],[1034,8]]},"387":{"position":[[1114,8]]},"842":{"position":[[2069,8],[2826,8]]},"1162":{"position":[[686,8]]},"1172":{"position":[[756,9]]},"1222":{"position":[[756,9]]},"1317":{"position":[[750,9]]},"1341":{"position":[[750,9]]},"1352":{"position":[[750,9]]},"1432":{"position":[[764,9]]}},"keywords":{}}],["dure",{"_index":1049,"title":{},"content":{"70":{"position":[[413,6]]},"88":{"position":[[77,6]]},"124":{"position":[[698,6]]},"209":{"position":[[295,6],[1109,6]]},"222":{"position":[[715,6]]},"223":{"position":[[952,6]]},"239":{"position":[[1304,6]]},"254":{"position":[[3747,6]]},"296":{"position":[[4167,6],[6677,6],[7133,6]]},"315":{"position":[[646,6]]},"343":{"position":[[397,6],[887,6]]},"370":{"position":[[1377,6]]},"379":{"position":[[900,6]]},"397":{"position":[[1021,6]]},"446":{"position":[[241,6]]},"464":{"position":[[84,6]]},"556":{"position":[[395,6]]},"573":{"position":[[553,6]]},"582":{"position":[[218,6]]},"584":{"position":[[484,6]]},"609":{"position":[[415,6]]},"611":{"position":[[627,6]]},"617":{"position":[[529,6]]},"619":{"position":[[458,6]]},"747":{"position":[[318,6]]},"789":{"position":[[863,6]]},"838":{"position":[[60,6]]},"842":{"position":[[3540,6],[3600,6],[3677,6],[3740,6]]},"857":{"position":[[114,6]]},"867":{"position":[[717,6]]},"907":{"position":[[1160,6]]},"923":{"position":[[1160,6]]},"934":{"position":[[1160,6]]},"950":{"position":[[1160,6]]},"968":{"position":[[1160,6]]},"985":{"position":[[601,6]]},"1000":{"position":[[915,6]]},"1045":{"position":[[887,6]]},"1047":{"position":[[311,6]]},"1053":{"position":[[887,6]]},"1055":{"position":[[311,6]]},"1061":{"position":[[887,6]]},"1063":{"position":[[311,6]]},"1177":{"position":[[131,6]]},"1204":{"position":[[206,6]]},"1245":{"position":[[481,6]]},"1298":{"position":[[952,6]]},"1322":{"position":[[715,6]]},"1335":{"position":[[715,6]]},"1346":{"position":[[952,6]]},"1438":{"position":[[105,6]]},"1439":{"position":[[627,6]]},"1440":{"position":[[244,6]]},"1452":{"position":[[107,6],[2687,6],[2785,6],[2924,6],[3989,6]]},"1461":{"position":[[2095,6]]}},"keywords":{}}],["dynam",{"_index":528,"title":{"333":{"position":[[0,7]]}},"content":{"20":{"position":[[28,7]]},"98":{"position":[[1235,7]]},"331":{"position":[[527,7]]},"1140":{"position":[[2138,7]]},"1201":{"position":[[422,7]]},"1292":{"position":[[1006,7]]},"1306":{"position":[[1006,7]]},"1316":{"position":[[2138,7]]},"1329":{"position":[[1006,7]]},"1340":{"position":[[2138,7]]},"1351":{"position":[[2138,7]]},"1379":{"position":[[3620,7]]},"1403":{"position":[[3620,7]]},"1414":{"position":[[3620,7]]},"1431":{"position":[[2161,7]]}},"keywords":{}}],["dynamodb",{"_index":3286,"title":{"394":{"position":[[7,8]]},"1121":{"position":[[7,8]]}},"content":{"363":{"position":[[327,8]]},"395":{"position":[[50,8],[71,8],[107,8],[226,8],[590,9],[711,8]]},"396":{"position":[[250,8]]},"397":{"position":[[127,8],[239,8],[328,8]]},"398":{"position":[[477,8]]},"1120":{"position":[[79,8]]},"1122":{"position":[[217,9]]},"1123":{"position":[[139,8],[373,8],[580,8],[644,8]]},"1124":{"position":[[250,8]]},"1125":{"position":[[129,9],[236,9]]}},"keywords":{}}],["dynamodb:dev",{"_index":3287,"title":{},"content":{"363":{"position":[[382,12]]},"398":{"position":[[149,12]]},"1120":{"position":[[139,12]]},"1126":{"position":[[110,12]]}},"keywords":{}}],["dynamodbin",{"_index":5437,"title":{},"content":{"1122":{"position":[[338,10]]}},"keywords":{}}],["e",{"_index":1377,"title":{},"content":{"96":{"position":[[366,2],[590,2]]}},"keywords":{}}],["e.g",{"_index":2255,"title":{},"content":{"208":{"position":[[1441,6]]},"534":{"position":[[338,4],[1196,4]]},"712":{"position":[[217,4]]},"842":{"position":[[116,4]]},"849":{"position":[[2915,5]]},"851":{"position":[[93,4]]},"1089":{"position":[[181,4]]},"1239":{"position":[[162,6]]}},"keywords":{}}],["e2889d31",{"_index":3714,"title":{},"content":{"439":{"position":[[183,8]]}},"keywords":{}}],["each",{"_index":49,"title":{},"content":{"1":{"position":[[611,4]]},"2":{"position":[[210,4]]},"3":{"position":[[24,4],[348,4],[1073,4]]},"6":{"position":[[1,4]]},"7":{"position":[[31,4]]},"8":{"position":[[1,4],[372,4],[395,4]]},"11":{"position":[[570,4]]},"16":{"position":[[517,4]]},"20":{"position":[[611,4]]},"23":{"position":[[256,4]]},"24":{"position":[[128,4]]},"34":{"position":[[750,4]]},"36":{"position":[[142,4]]},"38":{"position":[[586,4]]},"44":{"position":[[151,4]]},"48":{"position":[[62,4],[222,4]]},"49":{"position":[[243,4]]},"54":{"position":[[394,4]]},"60":{"position":[[89,4]]},"67":{"position":[[174,4],[256,4],[609,4]]},"72":{"position":[[509,4]]},"74":{"position":[[268,4],[446,4]]},"81":{"position":[[2158,4]]},"82":{"position":[[1907,4]]},"96":{"position":[[74,4]]},"98":{"position":[[16,4]]},"103":{"position":[[160,4]]},"105":{"position":[[513,4],[567,4]]},"107":{"position":[[4,4],[265,4],[328,4]]},"109":{"position":[[583,4]]},"110":{"position":[[1131,4]]},"115":{"position":[[405,4],[468,4]]},"120":{"position":[[856,4]]},"121":{"position":[[1536,4]]},"122":{"position":[[458,4]]},"123":{"position":[[179,4]]},"124":{"position":[[833,4],[855,4]]},"125":{"position":[[810,4],[885,4]]},"129":{"position":[[161,4]]},"141":{"position":[[263,4],[1965,4]]},"154":{"position":[[459,4],[670,4],[729,4],[1314,4]]},"160":{"position":[[171,4]]},"165":{"position":[[229,4]]},"183":{"position":[[851,4],[2121,4],[2562,4]]},"185":{"position":[[53,4]]},"192":{"position":[[1580,4]]},"197":{"position":[[690,4]]},"216":{"position":[[376,4]]},"217":{"position":[[1174,4]]},"218":{"position":[[267,4],[685,4],[1278,4]]},"219":{"position":[[403,4]]},"237":{"position":[[208,4]]},"239":{"position":[[2185,4]]},"259":{"position":[[2354,4]]},"263":{"position":[[414,4]]},"267":{"position":[[1241,4]]},"270":{"position":[[870,4]]},"277":{"position":[[208,4],[1372,4]]},"279":{"position":[[232,4]]},"280":{"position":[[283,4]]},"281":{"position":[[284,4],[1740,4],[1808,4]]},"286":{"position":[[92,4]]},"290":{"position":[[111,4],[1203,4],[1308,4],[1439,4]]},"291":{"position":[[965,4],[1101,4],[1181,4],[1237,4]]},"295":{"position":[[147,4],[1311,4]]},"296":{"position":[[3159,4],[6554,4]]},"301":{"position":[[1535,4]]},"306":{"position":[[726,4]]},"308":{"position":[[239,4]]},"320":{"position":[[783,4],[1072,4],[1825,4]]},"321":{"position":[[923,4]]},"322":{"position":[[769,4]]},"323":{"position":[[788,4],[842,4]]},"326":{"position":[[625,4],[664,4]]},"333":{"position":[[209,4],[535,4]]},"366":{"position":[[363,4]]},"371":{"position":[[1498,4]]},"381":{"position":[[552,4]]},"385":{"position":[[371,4],[581,5]]},"393":{"position":[[481,4]]},"397":{"position":[[760,4]]},"398":{"position":[[472,4]]},"419":{"position":[[111,4],[1327,4]]},"421":{"position":[[151,4]]},"433":{"position":[[907,4]]},"440":{"position":[[127,4],[1343,4]]},"443":{"position":[[510,4]]},"451":{"position":[[160,4]]},"457":{"position":[[164,4]]},"463":{"position":[[270,4]]},"470":{"position":[[33,4]]},"479":{"position":[[610,4]]},"488":{"position":[[451,4],[465,4]]},"489":{"position":[[38,4],[513,4],[680,4]]},"491":{"position":[[416,4]]},"492":{"position":[[154,4],[243,4]]},"504":{"position":[[58,4]]},"506":{"position":[[427,4]]},"512":{"position":[[140,4]]},"517":{"position":[[843,4],[2901,4]]},"521":{"position":[[340,4]]},"529":{"position":[[719,4]]},"537":{"position":[[173,4]]},"547":{"position":[[112,4],[1329,4]]},"550":{"position":[[424,4]]},"553":{"position":[[39,4],[203,4]]},"554":{"position":[[39,4],[119,4]]},"556":{"position":[[1446,4]]},"558":{"position":[[87,4]]},"568":{"position":[[234,4]]},"573":{"position":[[1098,4]]},"574":{"position":[[514,4]]},"578":{"position":[[119,4]]},"580":{"position":[[161,4]]},"590":{"position":[[387,4],[1054,4]]},"595":{"position":[[4,4]]},"605":{"position":[[382,4]]},"606":{"position":[[311,4]]},"616":{"position":[[87,4],[164,4]]},"619":{"position":[[641,4]]},"622":{"position":[[388,4]]},"628":{"position":[[452,4]]},"639":{"position":[[57,4]]},"649":{"position":[[13,4]]},"659":{"position":[[608,4],[622,4]]},"660":{"position":[[324,4],[369,4]]},"662":{"position":[[38,4],[513,4],[680,4]]},"664":{"position":[[437,4],[672,4]]},"665":{"position":[[154,4],[243,4]]},"667":{"position":[[237,4]]},"676":{"position":[[451,4],[465,4]]},"677":{"position":[[38,4],[513,4],[680,4]]},"679":{"position":[[416,4]]},"680":{"position":[[154,4],[243,4]]},"682":{"position":[[208,4]]},"691":{"position":[[451,4],[465,4]]},"692":{"position":[[38,4],[513,4],[680,4]]},"694":{"position":[[416,4]]},"695":{"position":[[154,4],[243,4]]},"697":{"position":[[577,4]]},"703":{"position":[[142,4]]},"709":{"position":[[830,4]]},"715":{"position":[[199,4]]},"738":{"position":[[346,4],[754,4]]},"744":{"position":[[144,4]]},"747":{"position":[[1278,4]]},"757":{"position":[[1195,4]]},"758":{"position":[[482,4]]},"764":{"position":[[653,4]]},"770":{"position":[[1195,4]]},"771":{"position":[[482,4]]},"777":{"position":[[653,4]]},"789":{"position":[[852,4],[914,4]]},"792":{"position":[[128,4]]},"797":{"position":[[1195,4]]},"798":{"position":[[480,4]]},"804":{"position":[[651,4]]},"812":{"position":[[1195,4]]},"813":{"position":[[480,4]]},"819":{"position":[[651,4]]},"828":{"position":[[1195,4]]},"829":{"position":[[480,4]]},"835":{"position":[[651,4]]},"854":{"position":[[93,4]]},"867":{"position":[[1903,4]]},"870":{"position":[[268,4]]},"879":{"position":[[1481,4]]},"882":{"position":[[104,4]]},"888":{"position":[[159,4]]},"903":{"position":[[389,4]]},"908":{"position":[[526,4]]},"915":{"position":[[389,4]]},"918":{"position":[[128,4]]},"924":{"position":[[526,4]]},"930":{"position":[[389,4]]},"935":{"position":[[526,4]]},"944":{"position":[[138,4]]},"947":{"position":[[1175,4],[1229,4]]},"951":{"position":[[526,4]]},"956":{"position":[[180,4]]},"963":{"position":[[543,4]]},"969":{"position":[[526,4]]},"979":{"position":[[254,4]]},"994":{"position":[[112,4]]},"1008":{"position":[[1214,4],[1472,4],[1560,4]]},"1012":{"position":[[239,4]]},"1023":{"position":[[92,4],[1310,4]]},"1025":{"position":[[386,4]]},"1040":{"position":[[86,4]]},"1046":{"position":[[460,4]]},"1047":{"position":[[481,4]]},"1050":{"position":[[86,4]]},"1054":{"position":[[460,4]]},"1055":{"position":[[481,4]]},"1058":{"position":[[86,4]]},"1062":{"position":[[460,4]]},"1063":{"position":[[481,4]]},"1065":{"position":[[111,4]]},"1073":{"position":[[363,4]]},"1080":{"position":[[820,4]]},"1087":{"position":[[302,4]]},"1099":{"position":[[484,4]]},"1104":{"position":[[182,4]]},"1110":{"position":[[502,4]]},"1128":{"position":[[419,4]]},"1140":{"position":[[2179,4]]},"1156":{"position":[[253,4]]},"1189":{"position":[[393,4]]},"1194":{"position":[[269,4]]},"1195":{"position":[[412,4],[472,4],[694,4]]},"1197":{"position":[[399,4]]},"1199":{"position":[[88,4],[164,4]]},"1207":{"position":[[482,4]]},"1243":{"position":[[903,4]]},"1247":{"position":[[834,4],[958,4]]},"1248":{"position":[[426,4]]},"1275":{"position":[[52,4]]},"1289":{"position":[[1446,4]]},"1292":{"position":[[1052,4]]},"1298":{"position":[[1278,4]]},"1306":{"position":[[1052,4]]},"1310":{"position":[[767,4]]},"1316":{"position":[[2179,4]]},"1322":{"position":[[1665,4]]},"1329":{"position":[[1052,4]]},"1335":{"position":[[1313,4]]},"1340":{"position":[[2179,4]]},"1351":{"position":[[2179,4]]},"1357":{"position":[[331,4]]},"1370":{"position":[[938,4]]},"1379":{"position":[[3668,4]]},"1387":{"position":[[432,4],[1058,4]]},"1388":{"position":[[465,4]]},"1391":{"position":[[232,4],[315,4]]},"1403":{"position":[[3668,4]]},"1414":{"position":[[3668,4]]},"1421":{"position":[[419,4]]},"1429":{"position":[[263,4]]},"1431":{"position":[[2202,4]]},"1434":{"position":[[503,4]]},"1437":{"position":[[1324,4],[1365,4],[1392,4]]},"1440":{"position":[[1348,4],[1578,4]]},"1443":{"position":[[222,4]]},"1448":{"position":[[1038,4]]},"1453":{"position":[[554,4]]},"1461":{"position":[[119,4],[184,4],[1527,4],[1774,4],[3105,4],[3308,4],[3325,4],[4449,4]]},"1467":{"position":[[232,4],[288,4]]},"1470":{"position":[[645,4],[925,4]]},"1473":{"position":[[92,4]]},"1474":{"position":[[79,4]]},"1477":{"position":[[1191,5],[2721,4],[3421,5]]}},"keywords":{}}],["earli",{"_index":1862,"title":{},"content":{"156":{"position":[[752,6]]},"158":{"position":[[253,6]]}},"keywords":{}}],["earlier",{"_index":2074,"title":{},"content":{"183":{"position":[[1568,8],[3153,8]]},"296":{"position":[[6752,8],[7102,8]]},"313":{"position":[[3122,8]]},"377":{"position":[[1534,7]]},"849":{"position":[[3169,8]]},"917":{"position":[[491,7]]},"919":{"position":[[1028,7]]},"965":{"position":[[491,7]]}},"keywords":{}}],["earliest",{"_index":2658,"title":{},"content":{"250":{"position":[[501,10]]}},"keywords":{}}],["eas",{"_index":1200,"title":{},"content":{"82":{"position":[[3704,4]]}},"keywords":{}}],["easi",{"_index":441,"title":{},"content":{"14":{"position":[[964,4]]},"132":{"position":[[103,4]]},"324":{"position":[[1217,4]]},"330":{"position":[[488,4]]},"332":{"position":[[187,4]]},"1462":{"position":[[210,4]]}},"keywords":{}}],["easier",{"_index":1756,"title":{},"content":{"135":{"position":[[908,6]]},"190":{"position":[[1308,6]]},"281":{"position":[[2747,6]]},"323":{"position":[[1788,6]]}},"keywords":{}}],["easiest",{"_index":2227,"title":{},"content":{"204":{"position":[[807,7]]},"849":{"position":[[1624,7]]}},"keywords":{}}],["easili",{"_index":1840,"title":{},"content":{"150":{"position":[[146,6]]},"180":{"position":[[115,6]]},"236":{"position":[[160,7]]},"321":{"position":[[137,6],[1969,6]]},"326":{"position":[[752,6]]},"548":{"position":[[166,6]]},"552":{"position":[[81,6],[357,6]]},"635":{"position":[[394,6]]},"661":{"position":[[105,6]]},"1461":{"position":[[38,6],[2123,6]]}},"keywords":{}}],["east",{"_index":2123,"title":{},"content":{"190":{"position":[[966,4]]},"344":{"position":[[166,4]]},"385":{"position":[[257,5]]},"392":{"position":[[648,4]]},"393":{"position":[[302,4]]},"398":{"position":[[303,4]]},"403":{"position":[[150,4]]},"417":{"position":[[2076,4],[2184,4]]},"418":{"position":[[363,4]]},"433":{"position":[[713,4]]},"868":{"position":[[144,4]]},"880":{"position":[[160,4]]},"947":{"position":[[464,4],[781,4]]},"1126":{"position":[[264,4]]},"1145":{"position":[[239,4]]},"1151":{"position":[[151,4]]},"1152":{"position":[[174,4],[355,4]]},"1163":{"position":[[249,4]]},"1171":{"position":[[243,4]]},"1197":{"position":[[246,4]]},"1207":{"position":[[139,4]]}},"keywords":{}}],["eastern",{"_index":6549,"title":{},"content":{"1452":{"position":[[3508,7]]}},"keywords":{}}],["ec2",{"_index":2463,"title":{},"content":{"222":{"position":[[140,4],[710,4],[907,3],[987,3]]},"1154":{"position":[[567,3]]},"1322":{"position":[[140,4],[710,4],[907,3],[987,3]]},"1335":{"position":[[140,4],[710,4],[907,3],[987,3]]}},"keywords":{}}],["ecosystem",{"_index":157,"title":{},"content":{"4":{"position":[[201,10]]},"84":{"position":[[535,10],[710,10]]},"102":{"position":[[223,9]]},"320":{"position":[[326,10]]},"322":{"position":[[60,9]]}},"keywords":{}}],["edit",{"_index":372,"title":{"61":{"position":[[0,7]]},"139":{"position":[[0,7]]},"143":{"position":[[0,7]]},"258":{"position":[[0,4]]},"259":{"position":[[0,4]]},"260":{"position":[[9,8]]},"261":{"position":[[0,4]]},"264":{"position":[[0,4]]},"272":{"position":[[0,4]]},"275":{"position":[[0,4]]},"1445":{"position":[[0,7]]},"1446":{"position":[[7,4]]}},"content":{"13":{"position":[[75,7],[139,4],[378,5],[604,5]]},"14":{"position":[[345,6],[737,4]]},"25":{"position":[[28,4],[155,4]]},"31":{"position":[[112,5]]},"54":{"position":[[571,7]]},"55":{"position":[[824,4]]},"60":{"position":[[540,8],[599,6]]},"61":{"position":[[1060,5]]},"75":{"position":[[386,4]]},"82":{"position":[[3050,4]]},"135":{"position":[[368,7]]},"138":{"position":[[2769,4]]},"139":{"position":[[16,4],[70,4],[221,4]]},"142":{"position":[[2854,4]]},"143":{"position":[[16,4],[78,4],[253,4]]},"150":{"position":[[214,4]]},"162":{"position":[[675,4],[999,4]]},"182":{"position":[[236,6]]},"183":{"position":[[4344,6]]},"227":{"position":[[226,4]]},"228":{"position":[[209,4],[694,4],[737,5],[1367,7]]},"230":{"position":[[412,4],[798,5]]},"254":{"position":[[826,6],[954,5],[2883,6],[3544,6],[3884,5],[3928,4]]},"257":{"position":[[115,4]]},"259":{"position":[[73,5],[133,4],[157,4],[182,4],[483,7],[1474,7],[1567,7],[1617,4],[1644,4],[1754,5],[1814,4],[1838,4],[1871,4],[2177,7],[3020,7],[3125,7]]},"260":{"position":[[34,8]]},"263":{"position":[[1199,5]]},"264":{"position":[[145,5],[870,4],[913,4]]},"273":{"position":[[125,4]]},"274":{"position":[[480,8]]},"275":{"position":[[28,6],[167,5],[1118,6]]},"285":{"position":[[205,4]]},"295":{"position":[[206,7]]},"296":{"position":[[8074,7]]},"308":{"position":[[836,4]]},"350":{"position":[[69,7]]},"358":{"position":[[69,7]]},"369":{"position":[[69,7]]},"376":{"position":[[69,7]]},"386":{"position":[[69,7]]},"391":{"position":[[69,7]]},"396":{"position":[[69,7]]},"401":{"position":[[96,7]]},"407":{"position":[[69,7]]},"416":{"position":[[69,7]]},"423":{"position":[[69,7]]},"431":{"position":[[69,7]]},"437":{"position":[[69,7]]},"447":{"position":[[69,7]]},"453":{"position":[[69,7]]},"459":{"position":[[69,7]]},"465":{"position":[[69,7]]},"472":{"position":[[69,7]]},"481":{"position":[[69,7]]},"488":{"position":[[524,7],[600,7]]},"495":{"position":[[69,7]]},"508":{"position":[[69,7]]},"516":{"position":[[69,7]]},"525":{"position":[[69,7]]},"533":{"position":[[69,7]]},"539":{"position":[[69,7]]},"544":{"position":[[69,7]]},"555":{"position":[[69,7]]},"563":{"position":[[88,7]]},"572":{"position":[[69,7]]},"583":{"position":[[69,7]]},"592":{"position":[[69,7]]},"600":{"position":[[69,7]]},"610":{"position":[[69,7]]},"618":{"position":[[69,7]]},"624":{"position":[[69,7]]},"630":{"position":[[69,7]]},"636":{"position":[[69,7]]},"646":{"position":[[69,7]]},"653":{"position":[[69,7]]},"659":{"position":[[681,7],[757,7]]},"669":{"position":[[69,7]]},"676":{"position":[[524,7],[600,7]]},"684":{"position":[[69,7]]},"691":{"position":[[524,7],[600,7]]},"699":{"position":[[69,7]]},"705":{"position":[[69,7]]},"711":{"position":[[69,7]]},"719":{"position":[[69,7]]},"727":{"position":[[69,7]]},"734":{"position":[[69,7]]},"740":{"position":[[69,7]]},"746":{"position":[[69,7]]},"756":{"position":[[69,7]]},"767":{"position":[[127,4]]},"769":{"position":[[69,7]]},"781":{"position":[[69,7]]},"796":{"position":[[69,7]]},"805":{"position":[[251,4]]},"811":{"position":[[69,7]]},"820":{"position":[[251,4]]},"821":{"position":[[1149,7]]},"827":{"position":[[69,7]]},"836":{"position":[[251,4]]},"840":{"position":[[1502,4],[1774,4]]},"841":{"position":[[69,7]]},"849":{"position":[[2393,4],[2815,4]]},"850":{"position":[[69,7]]},"858":{"position":[[69,7]]},"866":{"position":[[69,7]]},"878":{"position":[[69,7]]},"884":{"position":[[69,7]]},"890":{"position":[[69,7]]},"896":{"position":[[69,7]]},"906":{"position":[[69,7]]},"912":{"position":[[1273,7]]},"921":{"position":[[69,7]]},"933":{"position":[[69,7]]},"949":{"position":[[69,7]]},"958":{"position":[[69,7]]},"967":{"position":[[69,7]]},"981":{"position":[[69,7]]},"989":{"position":[[252,4],[1017,4]]},"990":{"position":[[69,7]]},"996":{"position":[[69,7]]},"1004":{"position":[[335,4],[1100,4]]},"1005":{"position":[[69,7]]},"1014":{"position":[[69,7]]},"1021":{"position":[[69,7]]},"1027":{"position":[[69,7]]},"1033":{"position":[[73,7]]},"1036":{"position":[[505,7]]},"1044":{"position":[[69,7]]},"1052":{"position":[[69,7]]},"1060":{"position":[[69,7]]},"1069":{"position":[[69,7]]},"1075":{"position":[[69,7]]},"1084":{"position":[[69,7]]},"1093":{"position":[[69,7]]},"1100":{"position":[[69,7]]},"1106":{"position":[[69,7]]},"1112":{"position":[[69,7]]},"1124":{"position":[[69,7]]},"1132":{"position":[[69,7]]},"1183":{"position":[[703,7]]},"1200":{"position":[[587,4]]},"1201":{"position":[[147,7],[222,7]]},"1203":{"position":[[269,4]]},"1244":{"position":[[66,4]]},"1245":{"position":[[737,4]]},"1252":{"position":[[69,7]]},"1289":{"position":[[221,4]]},"1293":{"position":[[147,7],[222,7]]},"1307":{"position":[[147,7],[222,7]]},"1317":{"position":[[147,7],[222,7]]},"1321":{"position":[[1,4]]},"1330":{"position":[[147,7],[222,7]]},"1334":{"position":[[1,4]]},"1341":{"position":[[147,7],[222,7]]},"1352":{"position":[[147,7],[222,7]]},"1359":{"position":[[147,7],[222,7]]},"1380":{"position":[[147,7],[222,7]]},"1404":{"position":[[147,7],[222,7]]},"1415":{"position":[[147,7],[222,7]]},"1432":{"position":[[147,7],[222,7]]},"1446":{"position":[[30,4],[103,4],[129,7],[247,4],[375,8],[404,7]]},"1447":{"position":[[20,4],[364,4],[532,8],[665,8]]},"1448":{"position":[[100,4],[399,8],[606,4],[829,6],[936,8]]},"1449":{"position":[[387,7]]}},"keywords":{}}],["edit'",{"_index":2479,"title":{},"content":{"227":{"position":[[353,6]]}},"keywords":{}}],["editor",{"_index":598,"title":{},"content":{"25":{"position":[[250,7]]},"230":{"position":[[812,6]]},"253":{"position":[[131,6]]},"259":{"position":[[359,7],[2048,7]]},"295":{"position":[[1560,6]]},"313":{"position":[[131,6]]},"406":{"position":[[156,7]]},"488":{"position":[[694,7]]},"659":{"position":[[851,7]]},"676":{"position":[[694,7]]},"691":{"position":[[694,7]]},"942":{"position":[[665,7]]},"1032":{"position":[[141,7]]},"1047":{"position":[[621,6]]},"1055":{"position":[[621,6]]},"1063":{"position":[[621,6]]},"1200":{"position":[[542,6]]},"1245":{"position":[[517,6]]},"1383":{"position":[[87,7]]}},"keywords":{}}],["editor"",{"_index":4282,"title":{},"content":{"597":{"position":[[165,12]]},"598":{"position":[[94,12],[992,13]]}},"keywords":{}}],["edits_by_us",{"_index":2772,"title":{},"content":{"254":{"position":[[598,14],[2655,14]]}},"keywords":{}}],["edits_this_day",{"_index":2075,"title":{},"content":{"183":{"position":[[1779,15],[1932,14],[3037,15],[3118,14],[3585,15],[3738,14]]}},"keywords":{}}],["ef1e5eaa64a6",{"_index":3725,"title":{},"content":{"439":{"position":[[350,12]]}},"keywords":{}}],["effect",{"_index":348,"title":{},"content":{"11":{"position":[[1854,6]]},"56":{"position":[[862,11]]},"165":{"position":[[2189,9]]},"211":{"position":[[684,12]]},"291":{"position":[[1372,11]]},"302":{"position":[[1302,11]]},"309":{"position":[[102,6]]},"319":{"position":[[1238,9]]},"324":{"position":[[99,12]]},"343":{"position":[[258,9]]},"377":{"position":[[1474,6]]},"397":{"position":[[482,6]]},"602":{"position":[[775,8]]},"767":{"position":[[1314,7],[1667,7]]},"792":{"position":[[1609,7]]},"824":{"position":[[1380,7],[1731,7]]},"904":{"position":[[1244,7]]},"917":{"position":[[1939,7]]},"918":{"position":[[1536,7]]},"965":{"position":[[1939,7]]},"977":{"position":[[295,11]]},"1147":{"position":[[385,11]]},"1174":{"position":[[385,11]]},"1182":{"position":[[382,6]]},"1191":{"position":[[384,6]]},"1216":{"position":[[385,11]]},"1224":{"position":[[385,11]]},"1230":{"position":[[1024,6]]},"1262":{"position":[[384,6]]},"1389":{"position":[[383,6]]},"1437":{"position":[[244,11],[635,6],[1154,7]]},"1438":{"position":[[344,7],[660,11]]},"1439":{"position":[[109,7],[204,7],[823,7]]},"1452":{"position":[[520,9],[1872,7],[2171,6]]},"1455":{"position":[[350,7]]},"1473":{"position":[[310,11]]},"1479":{"position":[[565,7]]}},"keywords":{}}],["effect"",{"_index":4296,"title":{},"content":{"602":{"position":[[670,12]]}},"keywords":{}}],["effici",{"_index":191,"title":{"330":{"position":[[0,9]]}},"content":{"4":{"position":[[763,9]]},"8":{"position":[[879,11]]},"17":{"position":[[1062,9]]},"20":{"position":[[540,11]]},"42":{"position":[[365,10]]},"77":{"position":[[390,9]]},"101":{"position":[[286,11]]},"106":{"position":[[292,10]]},"110":{"position":[[1350,9]]},"121":{"position":[[1933,9]]},"197":{"position":[[502,9]]},"211":{"position":[[557,9]]},"232":{"position":[[762,9]]},"237":{"position":[[516,12]]},"241":{"position":[[402,10]]},"319":{"position":[[1219,9]]},"320":{"position":[[1396,12]]},"616":{"position":[[12,9]]},"869":{"position":[[1616,10]]},"975":{"position":[[269,11]]},"1391":{"position":[[145,11]]},"1451":{"position":[[476,11]]},"1459":{"position":[[1413,9]]},"1475":{"position":[[204,12]]}},"keywords":{}}],["efficient.certain",{"_index":2905,"title":{},"content":{"281":{"position":[[3150,17]]}},"keywords":{}}],["effort",{"_index":2268,"title":{},"content":{"209":{"position":[[924,6]]}},"keywords":{}}],["effortlessli",{"_index":5131,"title":{},"content":{"974":{"position":[[158,12]]}},"keywords":{}}],["eft",{"_index":3439,"title":{},"content":{"374":{"position":[[38,5]]}},"keywords":{}}],["either.when",{"_index":5058,"title":{},"content":{"922":{"position":[[1340,11]]}},"keywords":{}}],["ej6r5rtasvn++/+mpwull7sudoobzr6erlklhet7uxxusazojmxfkzpearmcjwhi",{"_index":1243,"title":{},"content":{"83":{"position":[[1572,64]]},"371":{"position":[[491,64]]},"1139":{"position":[[378,64]]}},"keywords":{}}],["elaps",{"_index":857,"title":{},"content":{"56":{"position":[[2349,8]]}},"keywords":{}}],["elast",{"_index":5819,"title":{},"content":{"1194":{"position":[[41,7]]},"1196":{"position":[[147,7]]}},"keywords":{}}],["elastic'",{"_index":5821,"title":{},"content":{"1194":{"position":[[169,9]]}},"keywords":{}}],["elasticsearch",{"_index":5420,"title":{"1193":{"position":[[0,13]]}},"content":{"1120":{"position":[[874,13]]},"1194":{"position":[[106,13]]},"1195":{"position":[[114,13],[207,13],[271,13],[388,13]]},"1196":{"position":[[354,14],[447,14],[533,13],[932,13]]},"1197":{"position":[[479,13]]},"1198":{"position":[[25,13]]},"1200":{"position":[[857,13]]}},"keywords":{}}],["elasticsearch:dev",{"_index":5421,"title":{},"content":{"1120":{"position":[[939,17]]},"1197":{"position":[[166,17]]}},"keywords":{}}],["elba"",{"_index":2355,"title":{},"content":{"210":{"position":[[2782,11]]}},"keywords":{}}],["element",{"_index":5614,"title":{},"content":{"1140":{"position":[[2215,7]]},"1316":{"position":[[2215,7]]},"1340":{"position":[[2215,7]]},"1351":{"position":[[2215,7]]},"1379":{"position":[[3716,7]]},"1403":{"position":[[3716,7]]},"1414":{"position":[[3716,7]]},"1431":{"position":[[2238,7]]}},"keywords":{}}],["elig",{"_index":3259,"title":{},"content":{"349":{"position":[[409,8]]}},"keywords":{}}],["elseif",{"_index":6007,"title":{},"content":{"1292":{"position":[[1139,6]]},"1306":{"position":[[1139,6]]},"1329":{"position":[[1139,6]]}},"keywords":{}}],["elsewher",{"_index":1891,"title":{},"content":{"161":{"position":[[75,10]]},"180":{"position":[[357,10]]},"320":{"position":[[132,10]]}},"keywords":{}}],["elt",{"_index":2196,"title":{"323":{"position":[[29,3]]}},"content":{"198":{"position":[[104,3],[470,3]]},"323":{"position":[[97,3]]},"324":{"position":[[1036,3]]}},"keywords":{}}],["email",{"_index":1859,"title":{},"content":{"156":{"position":[[414,5]]},"174":{"position":[[369,5]]},"191":{"position":[[245,6]]},"192":{"position":[[659,6]]},"223":{"position":[[717,5]]},"295":{"position":[[273,5]]},"296":{"position":[[457,6],[1428,6],[4630,7],[5019,7],[6410,6]]},"332":{"position":[[555,5]]},"469":{"position":[[52,6]]},"471":{"position":[[69,5]]},"473":{"position":[[258,6]]},"477":{"position":[[913,5]]},"540":{"position":[[155,5],[167,5]]},"598":{"position":[[875,5]]},"611":{"position":[[539,5],[549,5]]},"612":{"position":[[262,6]]},"617":{"position":[[903,5]]},"642":{"position":[[176,5]]},"712":{"position":[[300,6],[307,5],[322,5]]},"713":{"position":[[155,6]]},"840":{"position":[[90,5]]},"857":{"position":[[224,5]]},"989":{"position":[[462,5]]},"1004":{"position":[[545,5]]},"1133":{"position":[[311,5],[326,5]]},"1134":{"position":[[179,6]]},"1298":{"position":[[717,5]]},"1346":{"position":[[717,5]]},"1455":{"position":[[573,5],[599,5]]},"1456":{"position":[[73,5]]},"1457":{"position":[[104,6],[111,5],[137,5]]}},"keywords":{}}],["email"",{"_index":4072,"title":{},"content":{"546":{"position":[[441,12],[859,11]]},"594":{"position":[[429,12],[847,11]]}},"keywords":{}}],["email/usernam",{"_index":4760,"title":{},"content":{"842":{"position":[[1134,14]]}},"keywords":{}}],["email_act",{"_index":4539,"title":{},"content":{"735":{"position":[[475,14]]},"736":{"position":[[369,14]]}},"keywords":{}}],["emailclick",{"_index":3800,"title":{},"content":{"472":{"position":[[803,10]]}},"keywords":{}}],["emailproject",{"_index":4484,"title":{},"content":{"709":{"position":[[538,12]]}},"keywords":{}}],["emailsengag",{"_index":4387,"title":{},"content":{"649":{"position":[[332,17]]}},"keywords":{}}],["emailsspam",{"_index":5140,"title":{},"content":{"979":{"position":[[222,10]]}},"keywords":{}}],["emailsworkflow",{"_index":4398,"title":{},"content":{"649":{"position":[[648,15]]}},"keywords":{}}],["emb",{"_index":1413,"title":{},"content":{"98":{"position":[[693,6]]},"1439":{"position":[[960,5]]}},"keywords":{}}],["embark",{"_index":2334,"title":{},"content":{"210":{"position":[[2408,6]]}},"keywords":{}}],["embed",{"_index":1596,"title":{"1275":{"position":[[0,9]]}},"content":{"112":{"position":[[690,8]]},"1274":{"position":[[199,11],[226,9],[247,9]]},"1275":{"position":[[38,9],[192,10],[352,9]]},"1277":{"position":[[182,9],[527,9],[546,9],[614,9],[666,9]]}},"keywords":{}}],["embeddingmodel",{"_index":5954,"title":{},"content":{"1277":{"position":[[511,15]]}},"keywords":{}}],["emit",{"_index":1015,"title":{},"content":{"67":{"position":[[1773,7]]},"909":{"position":[[560,5]]},"925":{"position":[[560,5]]},"936":{"position":[[560,5]]},"952":{"position":[[560,5]]},"970":{"position":[[560,5]]}},"keywords":{}}],["emoji",{"_index":6283,"title":{},"content":{"1362":{"position":[[760,5],[770,5]]}},"keywords":{}}],["empow",{"_index":1264,"title":{},"content":{"84":{"position":[[622,9]]},"323":{"position":[[1858,10]]}},"keywords":{}}],["empti",{"_index":409,"title":{"75":{"position":[[0,5]]},"805":{"position":[[0,5]]},"820":{"position":[[0,5]]},"836":{"position":[[0,5]]}},"content":{"13":{"position":[[1241,5]]},"75":{"position":[[284,5],[348,5]]},"164":{"position":[[1863,6],[1973,6],[2010,6]]},"206":{"position":[[684,6]]},"208":{"position":[[1489,5]]},"491":{"position":[[181,5]]},"616":{"position":[[374,6],[395,6]]},"664":{"position":[[202,5]]},"679":{"position":[[181,5]]},"694":{"position":[[181,5]]},"720":{"position":[[352,5]]},"747":{"position":[[995,5]]},"805":{"position":[[169,6]]},"820":{"position":[[169,6]]},"836":{"position":[[169,6]]},"877":{"position":[[189,6]]},"1047":{"position":[[574,6],[598,5]]},"1055":{"position":[[574,6],[598,5]]},"1063":{"position":[[574,6],[598,5]]},"1070":{"position":[[884,6]]},"1140":{"position":[[2292,5]]},"1144":{"position":[[1128,5]]},"1213":{"position":[[805,5]]},"1292":{"position":[[1169,5]]},"1306":{"position":[[1169,5]]},"1316":{"position":[[2292,5]]},"1329":{"position":[[1169,5]]},"1340":{"position":[[2292,5]]},"1351":{"position":[[2292,5]]},"1431":{"position":[[2315,5]]},"1452":{"position":[[2401,6]]}},"keywords":{}}],["empty_identifi",{"_index":5879,"title":{},"content":{"1209":{"position":[[848,16]]}},"keywords":{}}],["emul",{"_index":2631,"title":{},"content":{"246":{"position":[[13,10],[101,10],[178,9]]},"301":{"position":[[893,7]]}},"keywords":{}}],["en.wikipedia.org",{"_index":3068,"title":{},"content":{"313":{"position":[[3671,17]]},"315":{"position":[[1987,19],[2359,18]]}},"keywords":{}}],["enabl",{"_index":367,"title":{"942":{"position":[[3,6]]}},"content":{"12":{"position":[[311,7]]},"55":{"position":[[966,7]]},"105":{"position":[[812,8]]},"138":{"position":[[211,7],[360,6],[1353,6]]},"141":{"position":[[521,7],[670,6]]},"142":{"position":[[324,7],[473,6],[1346,6]]},"169":{"position":[[155,7]]},"196":{"position":[[107,7]]},"197":{"position":[[223,8]]},"204":{"position":[[506,7]]},"211":{"position":[[641,6]]},"233":{"position":[[107,7]]},"236":{"position":[[2815,6]]},"237":{"position":[[4,6]]},"238":{"position":[[161,7]]},"245":{"position":[[169,7]]},"253":{"position":[[327,6]]},"291":{"position":[[1211,6]]},"302":{"position":[[1157,6]]},"307":{"position":[[3206,7]]},"308":{"position":[[217,7],[309,6],[376,8]]},"309":{"position":[[3530,7]]},"313":{"position":[[327,6]]},"320":{"position":[[1358,7],[2312,7]]},"324":{"position":[[20,7]]},"364":{"position":[[287,6]]},"367":{"position":[[98,6]]},"395":{"position":[[88,8],[100,6]]},"411":{"position":[[6,8],[228,8]]},"428":{"position":[[222,7]]},"429":{"position":[[52,7],[740,7],[1019,6],[1447,7]]},"489":{"position":[[138,6],[485,6],[752,6]]},"522":{"position":[[451,7]]},"530":{"position":[[451,7]]},"548":{"position":[[372,6]]},"571":{"position":[[157,7],[339,6]]},"581":{"position":[[68,7]]},"617":{"position":[[109,7],[281,6]]},"662":{"position":[[138,6],[485,6],[752,6]]},"677":{"position":[[138,6],[485,6],[752,6]]},"692":{"position":[[138,6],[485,6],[752,6]]},"753":{"position":[[546,6]]},"767":{"position":[[692,6],[830,6]]},"780":{"position":[[392,7]]},"784":{"position":[[338,6]]},"786":{"position":[[389,8],[467,6]]},"792":{"position":[[970,6],[1109,6]]},"793":{"position":[[505,6]]},"808":{"position":[[182,6],[521,6]]},"824":{"position":[[762,6],[901,6]]},"840":{"position":[[665,8]]},"849":{"position":[[364,6],[430,6],[1140,8]]},"864":{"position":[[1405,6]]},"866":{"position":[[522,6]]},"878":{"position":[[532,6]]},"903":{"position":[[82,7]]},"904":{"position":[[761,6],[868,6]]},"915":{"position":[[82,7]]},"918":{"position":[[970,6],[1077,6]]},"919":{"position":[[505,6],[698,6]]},"930":{"position":[[82,7]]},"931":{"position":[[182,6],[525,6],[840,6]]},"942":{"position":[[1,8],[236,8],[384,6],[526,6],[536,6],[608,7]]},"963":{"position":[[236,7]]},"976":{"position":[[170,7]]},"1042":{"position":[[83,6],[825,6],[863,7],[1311,6]]},"1043":{"position":[[505,6],[747,6],[1489,6],[1527,7]]},"1051":{"position":[[761,6],[1003,6],[1751,6],[1789,7]]},"1059":{"position":[[182,6],[525,6],[767,6],[1544,6],[1582,7]]},"1131":{"position":[[204,6]]},"1138":{"position":[[408,6]]},"1154":{"position":[[706,6]]},"1155":{"position":[[290,7]]},"1160":{"position":[[335,6]]},"1165":{"position":[[275,6]]},"1182":{"position":[[107,8],[312,8],[413,8],[539,6]]},"1183":{"position":[[1672,6]]},"1191":{"position":[[107,8],[314,8],[415,8],[543,6]]},"1198":{"position":[[427,6]]},"1245":{"position":[[51,7],[233,6]]},"1255":{"position":[[338,6]]},"1262":{"position":[[107,8],[314,8],[415,8],[543,6]]},"1276":{"position":[[230,6]]},"1281":{"position":[[320,8],[337,6]]},"1282":{"position":[[409,6]]},"1288":{"position":[[121,6]]},"1289":{"position":[[631,6],[786,8],[1046,6]]},"1292":{"position":[[1215,6]]},"1295":{"position":[[320,8],[337,6]]},"1297":{"position":[[1,6]]},"1303":{"position":[[182,6],[525,6],[757,6]]},"1306":{"position":[[1215,6]]},"1310":{"position":[[424,6]]},"1319":{"position":[[320,8],[337,6]]},"1322":{"position":[[1265,6]]},"1329":{"position":[[1215,6]]},"1334":{"position":[[288,8]]},"1345":{"position":[[1,6]]},"1373":{"position":[[743,6]]},"1374":{"position":[[743,6]]},"1384":{"position":[[13,6],[1213,8]]},"1389":{"position":[[107,8],[313,8],[414,8],[541,6]]},"1397":{"position":[[183,6],[522,6]]},"1398":{"position":[[182,6],[521,6]]},"1408":{"position":[[584,6]]},"1409":{"position":[[505,6]]},"1452":{"position":[[424,7],[1181,7],[1278,8],[1542,7],[2219,6],[3852,6],[4061,7],[4086,7],[4296,7],[4318,6],[4376,6],[4449,6]]}},"keywords":{}}],["enable_auto_commit=tru",{"_index":2667,"title":{},"content":{"250":{"position":[[885,24]]}},"keywords":{}}],["enable_auto_cursor",{"_index":4793,"title":{},"content":{"843":{"position":[[391,19]]}},"keywords":{}}],["enabled.a",{"_index":3933,"title":{},"content":{"515":{"position":[[149,9]]},"889":{"position":[[46,9]]}},"keywords":{}}],["enabled.access",{"_index":5886,"title":{},"content":{"1226":{"position":[[89,14]]}},"keywords":{}}],["enableda",{"_index":3809,"title":{},"content":{"475":{"position":[[105,8]]},"597":{"position":[[104,8]]}},"keywords":{}}],["enabledon",{"_index":5238,"title":{},"content":{"1040":{"position":[[331,9]]},"1050":{"position":[[331,9]]},"1058":{"position":[[331,9]]}},"keywords":{}}],["enabledus",{"_index":3393,"title":{},"content":{"366":{"position":[[76,11]]}},"keywords":{}}],["enc",{"_index":1182,"title":{},"content":{"82":{"position":[[2590,4],[4731,4]]},"1384":{"position":[[1076,3]]}},"keywords":{}}],["enc[aes256_gcm,data:dlfidmrhfdxn//nwqtpcsjog,iv:dhq5dxhyooski6zizcum67r6dd/2mse4lenrgot6gpy=,tag:fns2ptlzylagvz7vp/yciq==,type:str",{"_index":1205,"title":{},"content":{"82":{"position":[[4361,131]]}},"keywords":{}}],["enc[aes256_gcm,data:iddy+fl0/gacsh+6tjrdww+g,iv:ye8st7zj9wsmrms6boaywlajenc9qenjkkjo6bpp/te=,tag:eps9unkdg4eaficgujltfq==,type:str",{"_index":1173,"title":{},"content":{"82":{"position":[[2132,131]]}},"keywords":{}}],["enc[aes256_gcm,data:k/clly65pthtg2u=,iv:1bnmy8wjtjhfbcxlr1kfcsnmgvxrl5lgtdreuzigceu=,tag:5gkcguvpihxxdim7hhunna==,type:str",{"_index":1172,"title":{},"content":{"82":{"position":[[1998,123]]}},"keywords":{}}],["enc[aes256_gcm,data:w+f7mmwqhw==,iv:amhhncjwajnjagujzgjhzvzuzaeschepupbau7rvecg=,tag:62hguhnnsdqjdkdwynj7mq==,type:str",{"_index":1174,"title":{},"content":{"82":{"position":[[2270,119]]}},"keywords":{}}],["encapsul",{"_index":708,"title":{},"content":{"38":{"position":[[591,13]]},"95":{"position":[[133,11]]}},"keywords":{}}],["enclos",{"_index":1398,"title":{},"content":{"97":{"position":[[799,9]]},"1292":{"position":[[1275,8]]},"1306":{"position":[[1275,8]]},"1329":{"position":[[1275,8]]}},"keywords":{}}],["encod",{"_index":98,"title":{},"content":{"2":{"position":[[808,7]]},"67":{"position":[[1230,7]]},"332":{"position":[[439,6]]},"418":{"position":[[210,9]]},"419":{"position":[[1849,8]]},"439":{"position":[[467,9]]},"441":{"position":[[458,8]]},"491":{"position":[[476,9]]},"504":{"position":[[1478,8]]},"546":{"position":[[947,9]]},"547":{"position":[[1851,8]]},"638":{"position":[[239,9]]},"639":{"position":[[1476,8]]},"664":{"position":[[497,9],[732,9]]},"679":{"position":[[476,9]]},"694":{"position":[[476,9]]},"1022":{"position":[[276,9]]},"1023":{"position":[[1832,8]]},"1196":{"position":[[564,9],[615,8]]},"1475":{"position":[[1363,7]]}},"keywords":{}}],["encompass",{"_index":3479,"title":{},"content":{"385":{"position":[[383,11]]}},"keywords":{}}],["encount",{"_index":2847,"title":{},"content":{"279":{"position":[[344,11]]},"805":{"position":[[114,9]]},"820":{"position":[[114,9]]},"836":{"position":[[114,9]]},"907":{"position":[[1896,9]]},"910":{"position":[[8,9]]},"923":{"position":[[1896,9]]},"926":{"position":[[8,9]]},"937":{"position":[[8,9]]},"953":{"position":[[8,9]]},"968":{"position":[[1896,9]]},"971":{"position":[[8,9]]},"1313":{"position":[[1646,9]]},"1337":{"position":[[1646,9]]}},"keywords":{}}],["encourag",{"_index":3656,"title":{},"content":{"429":{"position":[[332,10]]}},"keywords":{}}],["encrypt",{"_index":1146,"title":{},"content":{"82":{"position":[[298,7],[379,9],[516,8],[673,10],[1739,7],[1924,9],[3734,9],[3972,7],[4026,7],[4047,9]]},"307":{"position":[[1130,9],[1604,9],[1980,9],[2472,9]]},"309":{"position":[[2423,9],[3030,9]]},"429":{"position":[[1030,10],[1175,11],[1248,11],[1313,10]]},"548":{"position":[[384,10],[510,7],[676,9],[712,7],[774,7]]},"640":{"position":[[205,9]]},"1292":{"position":[[1337,10]]},"1306":{"position":[[1337,10]]},"1329":{"position":[[1337,10]]}},"keywords":{}}],["encrypted_suffix",{"_index":1206,"title":{},"content":{"82":{"position":[[4547,17],[4975,17]]}},"keywords":{}}],["end",{"_index":139,"title":{},"content":{"3":{"position":[[864,6]]},"14":{"position":[[1163,3]]},"32":{"position":[[121,3],[128,3]]},"43":{"position":[[139,3],[146,3]]},"50":{"position":[[192,3],[199,3]]},"83":{"position":[[2337,3]]},"107":{"position":[[921,3],[1014,3]]},"115":{"position":[[1032,3],[1039,3]]},"124":{"position":[[337,3],[344,3]]},"135":{"position":[[250,3],[257,3]]},"156":{"position":[[689,3],[696,3]]},"163":{"position":[[948,3],[955,4]]},"189":{"position":[[175,6]]},"208":{"position":[[283,3]]},"232":{"position":[[113,4],[306,3],[313,3],[703,3]]},"240":{"position":[[4728,4]]},"323":{"position":[[1144,3],[1151,3]]},"324":{"position":[[431,3]]},"332":{"position":[[192,3],[199,3],[774,3],[781,3]]},"371":{"position":[[1256,3]]},"417":{"position":[[237,3]]},"419":{"position":[[2526,6]]},"438":{"position":[[237,3]]},"441":{"position":[[1135,6]]},"502":{"position":[[697,3]]},"504":{"position":[[2155,6]]},"517":{"position":[[1424,3],[2438,3],[2607,3]]},"545":{"position":[[237,3]]},"546":{"position":[[363,3]]},"547":{"position":[[2528,6]]},"550":{"position":[[55,6]]},"556":{"position":[[1680,3]]},"590":{"position":[[918,3]]},"594":{"position":[[351,3]]},"611":{"position":[[788,3]]},"631":{"position":[[342,3]]},"639":{"position":[[2153,6]]},"747":{"position":[[897,3]]},"864":{"position":[[1650,4]]},"1008":{"position":[[408,3],[1285,3]]},"1021":{"position":[[1263,3]]},"1023":{"position":[[2509,6]]},"1028":{"position":[[212,3]]},"1085":{"position":[[704,3]]},"1139":{"position":[[1143,3]]},"1140":{"position":[[2339,3],[2374,3]]},"1292":{"position":[[1382,3],[1412,4]]},"1306":{"position":[[1382,3],[1412,4]]},"1316":{"position":[[2339,3],[2374,3]]},"1329":{"position":[[1382,3],[1412,4]]},"1340":{"position":[[2339,3],[2374,3]]},"1351":{"position":[[2339,3],[2374,3]]},"1370":{"position":[[967,3]]},"1379":{"position":[[476,3],[525,3]]},"1384":{"position":[[532,3]]},"1387":{"position":[[910,3]]},"1403":{"position":[[476,3],[525,3]]},"1414":{"position":[[476,3],[525,3]]},"1423":{"position":[[848,3]]},"1431":{"position":[[2362,3],[2397,3]]},"1434":{"position":[[1111,3],[1723,3],[2205,3]]},"1456":{"position":[[249,7],[316,6]]}},"keywords":{}}],["end_dat",{"_index":3950,"title":{},"content":{"517":{"position":[[1414,9],[2597,9]]},"556":{"position":[[1670,9]]},"557":{"position":[[411,9]]},"611":{"position":[[778,9]]},"631":{"position":[[332,9]]},"632":{"position":[[174,9]]},"747":{"position":[[887,9]]},"748":{"position":[[332,9]]},"1028":{"position":[[202,9]]},"1029":{"position":[[144,9]]},"1085":{"position":[[694,9]]},"1086":{"position":[[292,9]]}},"keywords":{}}],["end_fram",{"_index":5627,"title":{},"content":{"1140":{"position":[[2411,9]]},"1316":{"position":[[2411,9]]},"1340":{"position":[[2411,9]]},"1351":{"position":[[2411,9]]},"1431":{"position":[[2434,9]]}},"keywords":{}}],["end_partit",{"_index":5630,"title":{},"content":{"1140":{"position":[[2449,13]]},"1316":{"position":[[2449,13]]},"1340":{"position":[[2449,13]]},"1351":{"position":[[2449,13]]},"1431":{"position":[[2472,13]]}},"keywords":{}}],["endedprovid",{"_index":6586,"title":{},"content":{"1456":{"position":[[349,13]]}},"keywords":{}}],["endpoint",{"_index":258,"title":{"37":{"position":[[0,10]]},"83":{"position":[[14,9]]},"491":{"position":[[0,8]]},"664":{"position":[[0,8]]},"679":{"position":[[0,8]]},"694":{"position":[[0,8]]},"1034":{"position":[[0,8]]},"1239":{"position":[[0,9]]},"1267":{"position":[[0,9]]},"1440":{"position":[[10,9]]},"1447":{"position":[[0,8]]}},"content":{"7":{"position":[[765,9]]},"13":{"position":[[777,8]]},"20":{"position":[[148,8],[888,8]]},"21":{"position":[[138,8],[347,8]]},"37":{"position":[[1,9],[158,10],[318,9]]},"38":{"position":[[68,8]]},"44":{"position":[[571,9]]},"45":{"position":[[133,8],[199,8]]},"52":{"position":[[31,8]]},"54":{"position":[[212,9]]},"56":{"position":[[924,8],[1011,9],[1028,8],[1726,8],[1782,8]]},"66":{"position":[[326,8]]},"72":{"position":[[668,9]]},"74":{"position":[[121,9]]},"80":{"position":[[448,9],[569,8]]},"81":{"position":[[429,8],[1066,9],[1131,8],[1302,8],[1572,8],[2193,8],[2578,9]]},"82":{"position":[[6,8],[3449,8]]},"83":{"position":[[43,8],[577,9],[947,9]]},"114":{"position":[[804,9]]},"115":{"position":[[39,9]]},"119":{"position":[[62,8],[297,9]]},"120":{"position":[[251,8],[351,9],[368,8],[754,8],[834,8],[1869,8],[1929,8]]},"121":{"position":[[118,8],[337,8],[419,8],[672,8],[788,8],[1147,9],[1800,8]]},"122":{"position":[[6,8],[1153,9],[1378,8],[1496,8]]},"123":{"position":[[528,9]]},"124":{"position":[[71,8],[221,8],[313,8],[434,9],[674,8],[860,8]]},"125":{"position":[[203,8],[332,10],[475,8],[686,10],[1003,9],[1149,8],[1308,8]]},"144":{"position":[[502,8]]},"158":{"position":[[504,8]]},"162":{"position":[[321,9]]},"163":{"position":[[723,10]]},"166":{"position":[[88,8]]},"206":{"position":[[189,9]]},"218":{"position":[[494,8],[593,8]]},"221":{"position":[[543,8],[1667,9]]},"224":{"position":[[145,8],[735,8],[1013,8]]},"225":{"position":[[90,8]]},"228":{"position":[[1169,8]]},"229":{"position":[[853,8]]},"230":{"position":[[216,8],[1332,8]]},"254":{"position":[[2501,9]]},"259":{"position":[[277,8],[495,8],[1966,8],[2189,8]]},"285":{"position":[[400,9]]},"291":{"position":[[835,8]]},"302":{"position":[[835,8]]},"307":{"position":[[1059,9],[1527,9],[1909,9],[2395,9]]},"309":{"position":[[2346,9],[2953,9]]},"314":{"position":[[2042,9]]},"323":{"position":[[1195,8]]},"344":{"position":[[53,9]]},"349":{"position":[[267,8]]},"351":{"position":[[1,9]]},"359":{"position":[[1,9]]},"360":{"position":[[39,9]]},"370":{"position":[[1,9],[1722,8],[1731,8]]},"371":{"position":[[98,9]]},"377":{"position":[[1,9]]},"378":{"position":[[38,9]]},"379":{"position":[[804,8],[1155,8],[1224,8]]},"385":{"position":[[24,8],[294,9]]},"387":{"position":[[1,9]]},"388":{"position":[[108,9]]},"392":{"position":[[1,9],[388,9],[402,8],[419,8]]},"393":{"position":[[98,9]]},"397":{"position":[[1,9],[562,8],[579,8]]},"398":{"position":[[98,9]]},"402":{"position":[[1,9]]},"403":{"position":[[38,9]]},"408":{"position":[[1,9]]},"417":{"position":[[1,9],[576,8],[593,8]]},"418":{"position":[[38,9]]},"419":{"position":[[573,8],[1282,8]]},"424":{"position":[[1,9]]},"425":{"position":[[39,9]]},"432":{"position":[[1,9]]},"433":{"position":[[80,9],[491,9]]},"438":{"position":[[1,9]]},"439":{"position":[[38,9]]},"440":{"position":[[589,8],[1298,8]]},"448":{"position":[[1,9]]},"449":{"position":[[108,9]]},"454":{"position":[[1,9]]},"455":{"position":[[39,9]]},"460":{"position":[[1,9]]},"461":{"position":[[39,9]]},"464":{"position":[[322,8]]},"466":{"position":[[1,9],[219,9]]},"467":{"position":[[39,9]]},"473":{"position":[[108,9]]},"482":{"position":[[1,9]]},"485":{"position":[[127,9],[152,8],[474,9]]},"486":{"position":[[41,8]]},"488":{"position":[[210,8],[629,8]]},"496":{"position":[[1,9]]},"497":{"position":[[38,9]]},"502":{"position":[[1,9]]},"503":{"position":[[38,9]]},"504":{"position":[[517,8]]},"509":{"position":[[1,9]]},"510":{"position":[[38,9]]},"517":{"position":[[1,9]]},"518":{"position":[[108,9]]},"527":{"position":[[108,9]]},"534":{"position":[[1,9]]},"535":{"position":[[108,9]]},"540":{"position":[[1,9]]},"541":{"position":[[39,9]]},"545":{"position":[[1,9]]},"546":{"position":[[38,9]]},"547":{"position":[[574,8],[1284,8]]},"548":{"position":[[632,8]]},"556":{"position":[[1,9]]},"557":{"position":[[108,9]]},"564":{"position":[[1,9]]},"566":{"position":[[38,9]]},"573":{"position":[[1,9]]},"575":{"position":[[94,9]]},"584":{"position":[[1,9]]},"586":{"position":[[94,9]]},"593":{"position":[[1,9]]},"594":{"position":[[38,9]]},"601":{"position":[[1,9]]},"606":{"position":[[154,8]]},"611":{"position":[[1,9]]},"612":{"position":[[108,9]]},"619":{"position":[[1,9]]},"620":{"position":[[38,9]]},"625":{"position":[[1,9]]},"626":{"position":[[39,9]]},"631":{"position":[[1,9]]},"632":{"position":[[39,9]]},"635":{"position":[[55,8],[120,8],[435,9]]},"637":{"position":[[1,9],[230,9],[311,9]]},"638":{"position":[[38,9]]},"639":{"position":[[6,9],[256,9],[515,8]]},"646":{"position":[[280,9]]},"647":{"position":[[38,9]]},"654":{"position":[[1,9]]},"655":{"position":[[38,9]]},"657":{"position":[[127,9],[152,8],[474,9]]},"658":{"position":[[41,8]]},"659":{"position":[[367,8],[786,8]]},"670":{"position":[[1,9]]},"671":{"position":[[39,9]]},"673":{"position":[[127,9],[152,8],[474,9]]},"674":{"position":[[41,8]]},"675":{"position":[[105,8],[177,8]]},"676":{"position":[[210,8],[629,8]]},"685":{"position":[[1,9]]},"686":{"position":[[99,9]]},"688":{"position":[[127,9],[152,8],[474,9]]},"689":{"position":[[41,8]]},"691":{"position":[[210,8],[629,8]]},"700":{"position":[[1,9]]},"701":{"position":[[39,9]]},"706":{"position":[[1,9]]},"707":{"position":[[39,9]]},"712":{"position":[[1,9]]},"713":{"position":[[39,9]]},"720":{"position":[[1,9]]},"721":{"position":[[108,9]]},"723":{"position":[[128,10],[139,9]]},"735":{"position":[[1,9]]},"736":{"position":[[38,9]]},"741":{"position":[[1,9]]},"742":{"position":[[39,9]]},"747":{"position":[[1,9]]},"748":{"position":[[39,9]]},"753":{"position":[[587,9]]},"757":{"position":[[1,9]]},"758":{"position":[[98,9]]},"767":{"position":[[733,9],[2419,8]]},"770":{"position":[[1,9]]},"771":{"position":[[98,9]]},"782":{"position":[[1,9]]},"783":{"position":[[38,9]]},"784":{"position":[[389,9]]},"792":{"position":[[1011,9],[2400,8]]},"793":{"position":[[546,9]]},"797":{"position":[[1,9]]},"798":{"position":[[98,9]]},"808":{"position":[[562,9]]},"812":{"position":[[1,9]]},"813":{"position":[[98,9]]},"824":{"position":[[803,9],[2531,8]]},"828":{"position":[[1,9]]},"829":{"position":[[98,9]]},"842":{"position":[[1,9]]},"843":{"position":[[39,9]]},"851":{"position":[[1,9]]},"852":{"position":[[39,9]]},"859":{"position":[[1,9]]},"860":{"position":[[108,9]]},"866":{"position":[[563,9]]},"867":{"position":[[1,9]]},"868":{"position":[[38,9]]},"878":{"position":[[573,9]]},"879":{"position":[[1,9]]},"880":{"position":[[38,9]]},"885":{"position":[[1,9]]},"886":{"position":[[39,9]]},"891":{"position":[[1,9]]},"892":{"position":[[38,9]]},"897":{"position":[[1,9]]},"904":{"position":[[802,9],[2346,8]]},"907":{"position":[[1,9]]},"908":{"position":[[98,9]]},"918":{"position":[[1011,9],[2638,8]]},"919":{"position":[[546,9]]},"923":{"position":[[1,9]]},"924":{"position":[[98,9]]},"931":{"position":[[566,9]]},"934":{"position":[[1,9]]},"935":{"position":[[98,9]]},"950":{"position":[[1,9]]},"951":{"position":[[98,9]]},"959":{"position":[[1,9]]},"960":{"position":[[39,9]]},"968":{"position":[[1,9]]},"969":{"position":[[98,9]]},"982":{"position":[[1,9]]},"983":{"position":[[39,9]]},"991":{"position":[[1,9]]},"992":{"position":[[38,9]]},"997":{"position":[[1,9]]},"998":{"position":[[39,9]]},"1009":{"position":[[1,9]]},"1010":{"position":[[108,9]]},"1015":{"position":[[1,9]]},"1016":{"position":[[39,9]]},"1021":{"position":[[274,9]]},"1022":{"position":[[28,9]]},"1023":{"position":[[554,8],[1265,8]]},"1028":{"position":[[1,9]]},"1029":{"position":[[39,9]]},"1037":{"position":[[39,9]]},"1042":{"position":[[1233,8],[1352,9]]},"1043":{"position":[[546,9]]},"1045":{"position":[[1,9]]},"1046":{"position":[[38,9]]},"1047":{"position":[[370,8]]},"1051":{"position":[[802,9],[2062,8]]},"1053":{"position":[[1,9]]},"1054":{"position":[[38,9]]},"1055":{"position":[[370,8]]},"1059":{"position":[[566,9]]},"1061":{"position":[[1,9]]},"1062":{"position":[[38,9]]},"1063":{"position":[[370,8]]},"1070":{"position":[[1,9]]},"1071":{"position":[[108,9]]},"1076":{"position":[[1,9]]},"1078":{"position":[[38,9]]},"1085":{"position":[[1,9]]},"1086":{"position":[[120,9]]},"1089":{"position":[[156,9]]},"1094":{"position":[[1,9]]},"1101":{"position":[[1,9]]},"1102":{"position":[[39,9]]},"1107":{"position":[[1,9]]},"1108":{"position":[[38,9]]},"1113":{"position":[[1,9]]},"1114":{"position":[[39,9]]},"1125":{"position":[[1,9],[354,8],[371,8]]},"1126":{"position":[[54,9]]},"1133":{"position":[[1,9]]},"1134":{"position":[[38,9]]},"1138":{"position":[[1,9],[1013,8],[1022,8],[1677,8]]},"1139":{"position":[[42,9]]},"1144":{"position":[[1,9],[696,9],[716,8],[732,8]]},"1145":{"position":[[42,9]]},"1146":{"position":[[440,8]]},"1151":{"position":[[1,9]]},"1152":{"position":[[42,9]]},"1154":{"position":[[757,9]]},"1156":{"position":[[433,8]]},"1162":{"position":[[1,9]]},"1163":{"position":[[42,9]]},"1170":{"position":[[1,9],[696,9],[716,8],[732,8]]},"1171":{"position":[[42,9]]},"1173":{"position":[[452,8]]},"1179":{"position":[[1,9],[1214,8]]},"1180":{"position":[[42,9]]},"1188":{"position":[[1,9]]},"1189":{"position":[[43,9]]},"1196":{"position":[[1,9],[70,8],[79,8]]},"1197":{"position":[[36,9],[192,9]]},"1198":{"position":[[478,9]]},"1201":{"position":[[608,8]]},"1206":{"position":[[1,9]]},"1207":{"position":[[42,9]]},"1213":{"position":[[1,9]]},"1214":{"position":[[42,9]]},"1215":{"position":[[440,8]]},"1220":{"position":[[1,9]]},"1221":{"position":[[42,9]]},"1223":{"position":[[452,8]]},"1230":{"position":[[1,9]]},"1231":{"position":[[112,9]]},"1239":{"position":[[81,8]]},"1241":{"position":[[96,9]]},"1247":{"position":[[1,9]]},"1248":{"position":[[112,9]]},"1253":{"position":[[1,9]]},"1254":{"position":[[46,9]]},"1255":{"position":[[389,9]]},"1260":{"position":[[1,9]]},"1261":{"position":[[42,9]]},"1270":{"position":[[42,9]]},"1272":{"position":[[83,9],[103,8]]},"1277":{"position":[[1,9]]},"1278":{"position":[[42,9]]},"1285":{"position":[[1,9]]},"1287":{"position":[[42,9]]},"1289":{"position":[[1097,9],[1509,9]]},"1300":{"position":[[1,9]]},"1302":{"position":[[42,9]]},"1303":{"position":[[566,9],[808,9]]},"1310":{"position":[[830,9]]},"1313":{"position":[[1,9],[1221,8]]},"1314":{"position":[[42,9]]},"1322":{"position":[[1316,9],[1710,9]]},"1324":{"position":[[1,9]]},"1326":{"position":[[42,9]]},"1335":{"position":[[1358,9]]},"1337":{"position":[[1,9],[1221,8]]},"1338":{"position":[[42,9]]},"1348":{"position":[[1,9],[1221,8]]},"1349":{"position":[[42,9]]},"1356":{"position":[[1,9]]},"1357":{"position":[[42,9]]},"1358":{"position":[[622,10]]},"1359":{"position":[[379,8]]},"1362":{"position":[[163,9]]},"1363":{"position":[[54,9]]},"1368":{"position":[[42,9]]},"1373":{"position":[[784,9],[1311,8]]},"1374":{"position":[[784,9],[1315,8]]},"1376":{"position":[[1,9]]},"1377":{"position":[[42,9]]},"1386":{"position":[[1,9]]},"1387":{"position":[[77,9],[631,9]]},"1397":{"position":[[563,9]]},"1398":{"position":[[562,9]]},"1400":{"position":[[1,9]]},"1401":{"position":[[42,9]]},"1408":{"position":[[506,8],[625,9]]},"1409":{"position":[[546,9]]},"1411":{"position":[[1,9]]},"1412":{"position":[[42,9]]},"1420":{"position":[[1,9]]},"1421":{"position":[[43,9]]},"1427":{"position":[[1,9],[981,8]]},"1428":{"position":[[42,9]]},"1435":{"position":[[565,8]]},"1436":{"position":[[146,9]]},"1442":{"position":[[285,8]]},"1447":{"position":[[70,8],[634,8]]},"1453":{"position":[[1282,8]]},"1461":{"position":[[2754,8],[3191,8],[3377,9],[3797,10]]},"1469":{"position":[[94,9]]},"1472":{"position":[[654,9]]},"1480":{"position":[[188,8],[288,9],[305,8]]}},"keywords":{}}],["endpoint>/webhook",{"_index":4402,"title":{},"content":{"657":{"position":[[557,20]]}},"keywords":{}}],["endpoint'",{"_index":1911,"title":{},"content":{"162":{"position":[[367,10]]}},"keywords":{}}],["endpoint.<br/>option",{"_index":6435,"title":{},"content":{"1434":{"position":[[298,30]]}},"keywords":{}}],["endpoint.a",{"_index":762,"title":{},"content":{"44":{"position":[[403,10]]}},"keywords":{}}],["endpoint.at",{"_index":5902,"title":{},"content":{"1236":{"position":[[132,11]]}},"keywords":{}}],["endpointconfig",{"_index":3885,"title":{},"content":{"491":{"position":[[54,14]]},"664":{"position":[[54,14]]},"679":{"position":[[54,14]]},"694":{"position":[[54,14]]}},"keywords":{}}],["endpointth",{"_index":5820,"title":{},"content":{"1194":{"position":[[70,11]]}},"keywords":{}}],["enforc",{"_index":4208,"title":{},"content":{"577":{"position":[[36,8]]},"588":{"position":[[31,8]]},"1292":{"position":[[1452,8]]},"1306":{"position":[[1452,8]]},"1329":{"position":[[1452,8]]}},"keywords":{}}],["engin",{"_index":2317,"title":{},"content":{"210":{"position":[[2074,9],[2398,9]]},"224":{"position":[[1188,7]]},"241":{"position":[[428,11]]},"319":{"position":[[92,8]]},"321":{"position":[[35,6]]},"324":{"position":[[46,9]]},"1203":{"position":[[76,6],[87,6],[170,6],[274,6],[289,7],[304,6],[335,6]]},"1206":{"position":[[363,6],[374,6]]},"1207":{"position":[[108,6]]},"1292":{"position":[[1496,6],[1528,7]]},"1306":{"position":[[1496,6],[1528,7]]},"1329":{"position":[[1496,6],[1528,7]]}},"keywords":{}}],["engine_attrib",{"_index":6021,"title":{},"content":{"1292":{"position":[[1560,13]]},"1306":{"position":[[1560,13]]},"1329":{"position":[[1560,13]]}},"keywords":{}}],["engine_url",{"_index":5859,"title":{},"content":{"1206":{"position":[[351,11]]},"1207":{"position":[[87,11]]}},"keywords":{}}],["english",{"_index":3067,"title":{},"content":{"313":{"position":[[3604,7]]}},"keywords":{}}],["enhanc",{"_index":1459,"title":{},"content":{"101":{"position":[[669,7]]},"977":{"position":[[698,8]]}},"keywords":{}}],["enorm",{"_index":2688,"title":{},"content":{"253":{"position":[[609,8]]},"313":{"position":[[609,8]]}},"keywords":{}}],["enough",{"_index":2271,"title":{},"content":{"209":{"position":[[1416,6]]},"237":{"position":[[3494,6]]},"277":{"position":[[450,7]]},"285":{"position":[[31,6]]},"326":{"position":[[347,6]]},"515":{"position":[[974,6]]},"785":{"position":[[602,6]]},"912":{"position":[[1518,6]]},"922":{"position":[[2337,6],[3137,6],[3344,6]]},"1461":{"position":[[617,6]]}},"keywords":{}}],["enough"",{"_index":5224,"title":{},"content":{"1036":{"position":[[417,12]]}},"keywords":{}}],["enrich",{"_index":2845,"title":{},"content":{"279":{"position":[[225,6],[1069,6]]},"280":{"position":[[273,9],[1182,6]]},"331":{"position":[[712,9]]}},"keywords":{}}],["enrichandaddtowindow",{"_index":2856,"title":{},"content":{"279":{"position":[[1458,20]]}},"keywords":{}}],["enrichandaddtowindow.sql",{"_index":2857,"title":{},"content":{"279":{"position":[[1542,24]]}},"keywords":{}}],["ensur",{"_index":316,"title":{},"content":{"11":{"position":[[733,8]]},"20":{"position":[[1004,6]]},"34":{"position":[[838,7]]},"41":{"position":[[161,7],[230,6]]},"70":{"position":[[130,6]]},"115":{"position":[[1023,8]]},"121":{"position":[[236,7]]},"156":{"position":[[680,8]]},"165":{"position":[[1931,6]]},"169":{"position":[[1340,6]]},"183":{"position":[[2549,7]]},"192":{"position":[[1568,6]]},"196":{"position":[[496,8]]},"197":{"position":[[494,7]]},"200":{"position":[[50,6]]},"202":{"position":[[1,6]]},"203":{"position":[[501,6]]},"206":{"position":[[440,6]]},"209":{"position":[[756,6],[1032,7],[1550,6]]},"211":{"position":[[548,8],[697,8]]},"221":{"position":[[927,6],[1927,7]]},"225":{"position":[[371,6]]},"233":{"position":[[503,8]]},"237":{"position":[[736,7],[1471,6],[2346,7],[2632,8]]},"239":{"position":[[2118,8]]},"240":{"position":[[3476,7]]},"264":{"position":[[453,7]]},"307":{"position":[[2915,6]]},"308":{"position":[[1112,6]]},"323":{"position":[[1047,6]]},"332":{"position":[[24,6],[235,6]]},"335":{"position":[[1,6]]},"340":{"position":[[200,6]]},"366":{"position":[[869,6]]},"368":{"position":[[249,7]]},"379":{"position":[[1208,6]]},"402":{"position":[[839,6]]},"543":{"position":[[244,6]]},"553":{"position":[[175,6]]},"578":{"position":[[94,6]]},"645":{"position":[[198,6]]},"652":{"position":[[198,6]]},"661":{"position":[[520,6]]},"750":{"position":[[580,6]]},"755":{"position":[[249,7]]},"766":{"position":[[580,6]]},"768":{"position":[[249,7]]},"785":{"position":[[707,6]]},"789":{"position":[[568,6]]},"795":{"position":[[247,7]]},"807":{"position":[[568,6]]},"810":{"position":[[247,7]]},"823":{"position":[[568,6]]},"826":{"position":[[247,7]]},"903":{"position":[[895,6]]},"905":{"position":[[252,7]]},"910":{"position":[[90,6]]},"915":{"position":[[895,6]]},"920":{"position":[[252,7]]},"926":{"position":[[90,6]]},"930":{"position":[[895,6]]},"932":{"position":[[252,7]]},"937":{"position":[[90,6]]},"948":{"position":[[252,7]]},"953":{"position":[[90,6]]},"963":{"position":[[1049,6]]},"966":{"position":[[252,7]]},"971":{"position":[[90,6]]},"975":{"position":[[335,8]]},"976":{"position":[[311,7]]},"989":{"position":[[1033,6]]},"1004":{"position":[[1116,6]]},"1006":{"position":[[114,6],[303,6]]},"1008":{"position":[[736,8]]},"1020":{"position":[[2064,6]]},"1040":{"position":[[611,6]]},"1050":{"position":[[611,6]]},"1058":{"position":[[611,6]]},"1165":{"position":[[4,6]]},"1189":{"position":[[407,6]]},"1197":{"position":[[413,6]]},"1203":{"position":[[237,6]]},"1204":{"position":[[266,7]]},"1207":{"position":[[496,6]]},"1232":{"position":[[232,6]]},"1248":{"position":[[440,6]]},"1268":{"position":[[572,7]]},"1357":{"position":[[345,6]]},"1358":{"position":[[750,6]]},"1361":{"position":[[24,6]]},"1387":{"position":[[446,6],[1072,6]]},"1388":{"position":[[446,7]]},"1421":{"position":[[433,6]]},"1439":{"position":[[1597,6]]},"1444":{"position":[[591,7]]},"1452":{"position":[[3265,6]]},"1453":{"position":[[999,6]]},"1475":{"position":[[164,6]]},"1479":{"position":[[620,6]]}},"keywords":{}}],["enter",{"_index":1830,"title":{},"content":{"144":{"position":[[671,7]]},"169":{"position":[[1645,6]]},"171":{"position":[[216,5]]},"174":{"position":[[211,5]]},"340":{"position":[[505,6]]},"349":{"position":[[427,5]]},"472":{"position":[[642,5],[710,5],[775,5]]},"487":{"position":[[272,5]]},"675":{"position":[[118,5]]},"895":{"position":[[500,5],[579,5]]},"947":{"position":[[164,5],[508,5]]},"1272":{"position":[[93,5]]}},"keywords":{}}],["enterpris",{"_index":5142,"title":{},"content":{"987":{"position":[[160,10]]},"1002":{"position":[[160,10]]}},"keywords":{}}],["entic",{"_index":2112,"title":{},"content":{"189":{"position":[[413,6]]}},"keywords":{}}],["entir",{"_index":1196,"title":{},"content":{"82":{"position":[[3575,6]]},"112":{"position":[[328,6]]},"324":{"position":[[205,8]]},"413":{"position":[[52,6]]},"417":{"position":[[283,6]]},"438":{"position":[[283,6]]},"454":{"position":[[210,6]]},"479":{"position":[[789,6]]},"480":{"position":[[203,8]]},"502":{"position":[[743,6]]},"545":{"position":[[283,6]]},"548":{"position":[[786,6]]},"761":{"position":[[400,6]]},"762":{"position":[[517,6]]},"774":{"position":[[400,6]]},"775":{"position":[[517,6]]},"792":{"position":[[44,6]]},"801":{"position":[[406,6]]},"802":{"position":[[517,6]]},"816":{"position":[[406,6]]},"817":{"position":[[517,6]]},"832":{"position":[[406,6]]},"833":{"position":[[517,6]]},"918":{"position":[[44,6]]},"922":{"position":[[1581,6],[2225,6]]},"1032":{"position":[[1954,6]]},"1201":{"position":[[469,6]]},"1452":{"position":[[1337,6]]}},"keywords":{}}],["entireti",{"_index":4634,"title":{},"content":{"760":{"position":[[506,10]]},"763":{"position":[[505,10]]},"764":{"position":[[692,9]]},"773":{"position":[[506,10]]},"776":{"position":[[505,10]]},"777":{"position":[[692,9]]},"800":{"position":[[506,10]]},"803":{"position":[[511,10]]},"804":{"position":[[690,9]]},"815":{"position":[[506,10]]},"818":{"position":[[511,10]]},"819":{"position":[[690,9]]},"831":{"position":[[506,10]]},"834":{"position":[[511,10]]},"835":{"position":[[690,9]]},"1461":{"position":[[318,8]]}},"keywords":{}}],["entiti",{"_index":375,"title":{"1446":{"position":[[17,9]]}},"content":{"13":{"position":[[101,9]]},"17":{"position":[[46,8],[279,7]]},"23":{"position":[[31,8],[114,9],[244,8]]},"24":{"position":[[9,8],[133,6]]},"27":{"position":[[13,8],[403,8]]},"32":{"position":[[563,8]]},"33":{"position":[[34,8],[166,8],[393,8]]},"60":{"position":[[456,9],[626,8]]},"61":{"position":[[213,9],[605,6],[860,6]]},"79":{"position":[[178,9]]},"88":{"position":[[227,8]]},"90":{"position":[[17,9]]},"137":{"position":[[430,8]]},"158":{"position":[[206,9]]},"189":{"position":[[1035,9]]},"190":{"position":[[443,8]]},"216":{"position":[[137,9]]},"257":{"position":[[135,9]]},"264":{"position":[[249,6],[470,8],[615,6],[625,8],[760,6],[840,9]]},"270":{"position":[[456,8]]},"273":{"position":[[111,9]]},"274":{"position":[[7,6],[646,8],[779,8],[911,8],[1000,6],[1712,6],[1954,9]]},"275":{"position":[[966,8]]},"296":{"position":[[8100,7]]},"337":{"position":[[5,6],[75,6]]},"524":{"position":[[42,8]]},"537":{"position":[[56,6],[178,6]]},"792":{"position":[[158,6]]},"840":{"position":[[1098,8],[1197,8],[1294,8],[1390,8]]},"849":{"position":[[2109,8],[2219,8]]},"918":{"position":[[158,6]]},"1470":{"position":[[935,6]]}},"keywords":{}}],["entra",{"_index":3693,"title":{"436":{"position":[[18,5]]}},"content":{},"keywords":{}}],["entri",{"_index":2223,"title":{},"content":{"204":{"position":[[494,5]]},"506":{"position":[[406,7]]},"517":{"position":[[834,8],[848,5]]},"867":{"position":[[1800,7]]}},"keywords":{}}],["entriesproject",{"_index":4346,"title":{},"content":{"628":{"position":[[249,14]]}},"keywords":{}}],["entrypoint",{"_index":2524,"title":{},"content":{"236":{"position":[[1059,10],[1338,11]]}},"keywords":{}}],["enum",{"_index":1660,"title":{},"content":{"121":{"position":[[1025,6]]},"280":{"position":[[1399,5]]},"1292":{"position":[[1611,4]]},"1306":{"position":[[1611,4]]},"1329":{"position":[[1611,4]]}},"keywords":{}}],["enumer",{"_index":3948,"title":{},"content":{"517":{"position":[[1111,12],[1161,13],[1325,12],[1375,13],[1814,12],[1864,13]]}},"keywords":{}}],["envelop",{"_index":1171,"title":{},"content":{"82":{"position":[[1934,8]]}},"keywords":{}}],["environ",{"_index":604,"title":{"253":{"position":[[28,12]]},"295":{"position":[[28,12]]},"313":{"position":[[28,12]]}},"content":{"26":{"position":[[103,11],[508,11]]},"29":{"position":[[20,12],[110,11]]},"58":{"position":[[161,12]]},"60":{"position":[[285,12]]},"61":{"position":[[173,11],[553,12],[1174,13]]},"67":{"position":[[771,12],[998,11],[1649,12]]},"81":{"position":[[902,12]]},"88":{"position":[[65,11]]},"169":{"position":[[1163,12],[1468,12]]},"179":{"position":[[192,11],[298,12]]},"183":{"position":[[56,11],[531,12],[700,11]]},"197":{"position":[[584,13]]},"208":{"position":[[154,11]]},"222":{"position":[[104,12]]},"236":{"position":[[719,12],[1203,12]]},"237":{"position":[[545,12]]},"253":{"position":[[99,12]]},"266":{"position":[[289,11],[369,11],[577,12]]},"267":{"position":[[64,11],[899,12],[1068,11]]},"270":{"position":[[346,12]]},"295":{"position":[[1528,12]]},"313":{"position":[[99,12]]},"340":{"position":[[108,12],[328,12]]},"428":{"position":[[274,13]]},"429":{"position":[[358,13]]},"454":{"position":[[73,11],[85,11]]},"455":{"position":[[112,12]]},"747":{"position":[[1310,12]]},"885":{"position":[[315,11]]},"988":{"position":[[82,12]]},"1003":{"position":[[82,12]]},"1008":{"position":[[1090,11]]},"1042":{"position":[[1154,12]]},"1277":{"position":[[220,12],[242,11]]},"1278":{"position":[[149,12]]},"1322":{"position":[[104,12]]},"1335":{"position":[[104,12]]},"1408":{"position":[[427,12]]},"1461":{"position":[[2600,13],[2643,12],[2868,11],[3483,11],[4112,11]]}},"keywords":{}}],["environment.view",{"_index":2784,"title":{},"content":{"260":{"position":[[118,16]]}},"keywords":{}}],["environments)connect",{"_index":3654,"title":{},"content":{"428":{"position":[[189,23]]}},"keywords":{}}],["ep",{"_index":5114,"title":{},"content":{"947":{"position":[[754,2]]}},"keywords":{}}],["epoch",{"_index":5880,"title":{},"content":{"1209":{"position":[[878,5]]}},"keywords":{}}],["equal",{"_index":1490,"title":{},"content":{"105":{"position":[[246,5]]},"111":{"position":[[501,6]]},"120":{"position":[[2282,5]]},"129":{"position":[[509,6]]},"611":{"position":[[900,5]]},"1140":{"position":[[2493,6]]},"1316":{"position":[[2493,6]]},"1340":{"position":[[2493,6]]},"1351":{"position":[[2493,6]]},"1379":{"position":[[576,6]]},"1403":{"position":[[576,6]]},"1414":{"position":[[576,6]]},"1431":{"position":[[2516,6]]},"1476":{"position":[[974,6],[2067,5]]}},"keywords":{}}],["equip",{"_index":2622,"title":{},"content":{"241":{"position":[[490,8]]}},"keywords":{}}],["equival",{"_index":807,"title":{},"content":{"54":{"position":[[350,10]]},"64":{"position":[[241,10]]},"69":{"position":[[646,10]]},"107":{"position":[[53,13]]},"113":{"position":[[935,10]]},"119":{"position":[[446,10]]},"122":{"position":[[337,10]]},"228":{"position":[[1208,11]]},"229":{"position":[[892,11]]},"230":{"position":[[198,10]]},"271":{"position":[[366,10]]},"379":{"position":[[1253,10]]},"870":{"position":[[115,10]]},"987":{"position":[[188,10]]},"989":{"position":[[1156,10]]},"1002":{"position":[[188,10]]},"1004":{"position":[[1239,10]]},"1227":{"position":[[151,10]]},"1228":{"position":[[166,10]]}},"keywords":{}}],["errlvl",{"_index":6301,"title":{},"content":{"1379":{"position":[[632,6]]},"1403":{"position":[[632,6]]},"1414":{"position":[[632,6]]}},"keywords":{}}],["error",{"_index":231,"title":{"759":{"position":[[24,7]]},"763":{"position":[[9,7]]},"772":{"position":[[24,7]]},"776":{"position":[[9,7]]},"799":{"position":[[24,7]]},"803":{"position":[[9,7]]},"814":{"position":[[24,7]]},"818":{"position":[[9,7]]},"830":{"position":[[24,7]]},"834":{"position":[[9,7]]}},"content":{"7":{"position":[[187,6],[210,6],[289,6]]},"11":{"position":[[812,6],[1113,6],[1268,5]]},"12":{"position":[[95,5]]},"13":{"position":[[682,6]]},"72":{"position":[[349,5]]},"88":{"position":[[699,7]]},"106":{"position":[[684,6]]},"128":{"position":[[130,5]]},"129":{"position":[[370,5]]},"138":{"position":[[1692,6]]},"141":{"position":[[1697,6]]},"142":{"position":[[1709,6]]},"146":{"position":[[1010,6]]},"149":{"position":[[1004,6]]},"152":{"position":[[994,6]]},"156":{"position":[[732,6]]},"190":{"position":[[1820,6]]},"192":{"position":[[2182,6]]},"197":{"position":[[609,5]]},"208":{"position":[[735,6]]},"209":{"position":[[268,5]]},"291":{"position":[[689,6]]},"302":{"position":[[689,6]]},"305":{"position":[[273,5],[641,7]]},"307":{"position":[[542,5]]},"309":{"position":[[797,6],[1551,5],[1851,5]]},"379":{"position":[[81,8]]},"414":{"position":[[850,6]]},"417":{"position":[[531,7]]},"419":{"position":[[1910,5],[1958,7]]},"438":{"position":[[531,7]]},"441":{"position":[[519,5],[567,7]]},"502":{"position":[[991,7]]},"504":{"position":[[1539,5],[1587,7]]},"545":{"position":[[531,7]]},"547":{"position":[[1912,5],[1960,7]]},"595":{"position":[[1129,6]]},"603":{"position":[[101,6]]},"639":{"position":[[1537,5],[1585,7]]},"724":{"position":[[590,6]]},"760":{"position":[[102,6],[626,5]]},"761":{"position":[[70,6],[295,5]]},"762":{"position":[[64,6],[182,5]]},"764":{"position":[[79,6],[812,5]]},"773":{"position":[[102,6],[626,5]]},"774":{"position":[[70,6],[295,5]]},"775":{"position":[[64,6],[182,5]]},"777":{"position":[[79,6],[812,5]]},"800":{"position":[[102,6],[626,5]]},"801":{"position":[[70,6],[301,5]]},"802":{"position":[[64,6],[182,5]]},"804":{"position":[[79,6],[810,5]]},"805":{"position":[[127,5]]},"815":{"position":[[102,6],[626,5]]},"816":{"position":[[70,6],[301,5]]},"817":{"position":[[64,6],[182,5]]},"819":{"position":[[79,6],[810,5]]},"820":{"position":[[127,5]]},"831":{"position":[[102,6],[626,5]]},"832":{"position":[[70,6],[301,5]]},"833":{"position":[[64,6],[182,5]]},"835":{"position":[[79,6],[810,5]]},"836":{"position":[[127,5]]},"870":{"position":[[561,5]]},"871":{"position":[[26,5]]},"907":{"position":[[1906,6]]},"923":{"position":[[1906,6]]},"968":{"position":[[1906,6]]},"1023":{"position":[[1893,5],[1941,7]]},"1123":{"position":[[503,6]]},"1156":{"position":[[740,6]]},"1157":{"position":[[142,6]]},"1192":{"position":[[435,7]]},"1243":{"position":[[870,6]]},"1292":{"position":[[1643,5],[1685,6]]},"1306":{"position":[[1643,5],[1685,6]]},"1313":{"position":[[1656,6]]},"1329":{"position":[[1643,5],[1685,6]]},"1337":{"position":[[1656,6]]},"1394":{"position":[[432,7]]},"1423":{"position":[[442,7]]},"1464":{"position":[[311,5]]},"1466":{"position":[[292,5]]},"1467":{"position":[[635,5]]}},"keywords":{}}],["error"",{"_index":4649,"title":{},"content":{"763":{"position":[[50,11]]},"776":{"position":[[50,11]]},"803":{"position":[[50,11]]},"818":{"position":[[50,11]]},"834":{"position":[[50,11]]}},"keywords":{}}],["error(",{"_index":6662,"title":{},"content":{"1470":{"position":[[454,8]]}},"keywords":{}}],["error("not",{"_index":3018,"title":{},"content":{"296":{"position":[[5552,15],[5665,15]]},"315":{"position":[[1672,15]]}},"keywords":{}}],["error.dis",{"_index":1785,"title":{},"content":{"138":{"position":[[1465,14]]},"141":{"position":[[1467,14]]},"142":{"position":[[1474,14]]}},"keywords":{}}],["error.schema",{"_index":3204,"title":{},"content":{"332":{"position":[[421,13]]}},"keywords":{}}],["errorthreshold",{"_index":3604,"title":{},"content":{"418":{"position":[[226,15]]},"439":{"position":[[483,15]]},"546":{"position":[[963,15]]},"638":{"position":[[255,15]]},"1022":{"position":[[292,15]]}},"keywords":{}}],["errorwarninfo",{"_index":2916,"title":{},"content":{"285":{"position":[[150,13]]}},"keywords":{}}],["escap",{"_index":3626,"title":{},"content":{"419":{"position":[[2085,6],[2151,7]]},"441":{"position":[[694,6],[760,7]]},"504":{"position":[[1714,6],[1780,7]]},"547":{"position":[[2087,6],[2153,7]]},"639":{"position":[[1712,6],[1778,7]]},"1023":{"position":[[2068,6],[2134,7]]},"1140":{"position":[[2540,6]]},"1292":{"position":[[1720,6],[1756,7]]},"1306":{"position":[[1720,6],[1756,7]]},"1316":{"position":[[2540,6]]},"1329":{"position":[[1720,6],[1756,7]]},"1340":{"position":[[2540,6]]},"1351":{"position":[[2540,6]]},"1370":{"position":[[977,6]]},"1379":{"position":[[679,6]]},"1403":{"position":[[679,6]]},"1414":{"position":[[679,6]]},"1423":{"position":[[867,6]]},"1431":{"position":[[2563,6]]}},"keywords":{}}],["esoter",{"_index":1265,"title":{},"content":{"84":{"position":[[666,8]]}},"keywords":{}}],["especi",{"_index":1629,"title":{},"content":{"115":{"position":[[874,10]]},"159":{"position":[[613,10]]},"368":{"position":[[375,10]]},"755":{"position":[[375,10]]},"768":{"position":[[375,10]]},"795":{"position":[[373,10]]},"810":{"position":[[373,10]]},"826":{"position":[[373,10]]},"905":{"position":[[378,10]]},"920":{"position":[[378,10]]},"932":{"position":[[378,10]]},"948":{"position":[[378,10]]},"966":{"position":[[378,10]]}},"keywords":{}}],["essenc",{"_index":2173,"title":{},"content":{"196":{"position":[[410,8]]},"233":{"position":[[417,8]]}},"keywords":{}}],["essenti",{"_index":657,"title":{"32":{"position":[[0,9]]}},"content":{"67":{"position":[[1146,12]]},"165":{"position":[[738,11]]},"176":{"position":[[167,9]]},"207":{"position":[[1441,11]]},"208":{"position":[[1772,9]]},"221":{"position":[[1726,9]]},"237":{"position":[[810,9]]},"296":{"position":[[997,12]]},"869":{"position":[[465,11]]},"922":{"position":[[255,11]]}},"keywords":{}}],["establish",{"_index":2260,"title":{},"content":{"208":{"position":[[1946,9]]},"211":{"position":[[487,9]]},"232":{"position":[[737,11]]},"1268":{"position":[[150,11],[285,11]]},"1286":{"position":[[1694,11]]},"1301":{"position":[[1530,11]]},"1325":{"position":[[1694,11]]}},"keywords":{}}],["estuari",{"_index":279,"title":{"198":{"position":[[16,7]]},"205":{"position":[[11,7]]},"244":{"position":[[14,7]]},"249":{"position":[[15,7]]},"334":{"position":[[30,7]]},"349":{"position":[[32,7]]},"363":{"position":[[0,7]]},"479":{"position":[[33,7]]},"947":{"position":[[38,7]]},"1092":{"position":[[36,7]]}},"content":{"8":{"position":[[825,7]]},"19":{"position":[[556,7]]},"30":{"position":[[203,7]]},"38":{"position":[[204,8]]},"52":{"position":[[59,7]]},"53":{"position":[[144,7]]},"56":{"position":[[2002,7]]},"67":{"position":[[630,7],[732,7],[1013,7],[1741,7]]},"83":{"position":[[266,7],[554,7]]},"84":{"position":[[406,7],[485,7],[823,7],[1397,7]]},"88":{"position":[[188,7]]},"112":{"position":[[476,7]]},"136":{"position":[[301,7]]},"169":{"position":[[1364,7]]},"171":{"position":[[22,7]]},"172":{"position":[[22,7]]},"173":{"position":[[22,7],[1122,7]]},"175":{"position":[[396,7]]},"179":{"position":[[4,7]]},"181":{"position":[[90,7]]},"188":{"position":[[18,7]]},"189":{"position":[[695,7],[884,7],[902,7]]},"191":{"position":[[791,7],[1107,7],[1438,7],[1629,7],[1759,7],[1962,7]]},"198":{"position":[[1,7],[117,7],[291,7],[579,7],[776,7],[834,7],[930,7]]},"199":{"position":[[67,7],[285,7]]},"200":{"position":[[24,7]]},"204":{"position":[[221,7],[340,7],[925,7]]},"208":{"position":[[337,7],[410,7]]},"211":{"position":[[84,7],[539,8]]},"212":{"position":[[254,7],[403,7]]},"216":{"position":[[4,7]]},"217":{"position":[[286,7]]},"221":{"position":[[1900,7]]},"232":{"position":[[92,7],[923,7],[998,7]]},"239":{"position":[[2009,7]]},"240":{"position":[[181,7],[752,7],[1068,7],[1399,7],[1590,7],[1720,7],[1923,7],[2324,7],[3136,7]]},"241":{"position":[[98,7]]},"242":{"position":[[471,7]]},"243":{"position":[[248,7],[398,7]]},"245":{"position":[[39,7]]},"246":{"position":[[31,7],[152,7]]},"247":{"position":[[15,7],[246,7],[296,7],[383,7]]},"249":{"position":[[15,7]]},"250":{"position":[[1198,7]]},"253":{"position":[[289,7]]},"257":{"position":[[75,7]]},"262":{"position":[[42,7]]},"273":{"position":[[42,7]]},"283":{"position":[[42,7]]},"286":{"position":[[68,7]]},"288":{"position":[[117,7]]},"289":{"position":[[4,7]]},"290":{"position":[[263,7]]},"295":{"position":[[1030,7]]},"299":{"position":[[117,7]]},"300":{"position":[[4,7]]},"301":{"position":[[216,7]]},"313":{"position":[[289,7]]},"335":{"position":[[118,7]]},"340":{"position":[[224,7]]},"349":{"position":[[15,7]]},"363":{"position":[[33,8],[108,7]]},"364":{"position":[[1,7]]},"427":{"position":[[431,7]]},"429":{"position":[[765,7],[991,7]]},"430":{"position":[[289,7]]},"452":{"position":[[181,7],[244,7]]},"472":{"position":[[439,7],[462,7]]},"479":{"position":[[15,7]]},"487":{"position":[[450,7]]},"534":{"position":[[1241,11]]},"623":{"position":[[110,7]]},"675":{"position":[[161,7],[429,8]]},"739":{"position":[[26,7],[88,7]]},"753":{"position":[[164,7],[241,7]]},"767":{"position":[[44,7],[387,7]]},"780":{"position":[[556,7]]},"792":{"position":[[230,7],[700,7]]},"793":{"position":[[44,7],[235,7]]},"808":{"position":[[44,7],[224,7]]},"824":{"position":[[44,7],[492,7]]},"840":{"position":[[609,7],[981,7],[1881,7],[2250,7]]},"846":{"position":[[349,7]]},"847":{"position":[[140,7]]},"849":{"position":[[1080,7],[1594,7],[2921,7],[3390,7]]},"862":{"position":[[43,7],[141,7]]},"864":{"position":[[1709,7]]},"874":{"position":[[43,7],[141,7]]},"876":{"position":[[969,7]]},"895":{"position":[[81,7]]},"904":{"position":[[44,7],[491,7]]},"910":{"position":[[393,7]]},"918":{"position":[[230,7],[700,7]]},"919":{"position":[[44,7],[235,7]]},"926":{"position":[[393,7]]},"931":{"position":[[44,7],[228,7]]},"937":{"position":[[393,7]]},"940":{"position":[[4,7]]},"945":{"position":[[110,7],[631,7]]},"946":{"position":[[138,7],[180,7],[263,7]]},"947":{"position":[[8,7],[948,7]]},"953":{"position":[[393,7]]},"971":{"position":[[393,7]]},"974":{"position":[[5,7],[210,7]]},"976":{"position":[[227,8],[416,7]]},"1006":{"position":[[1,7],[248,7],[523,8]]},"1007":{"position":[[1,7]]},"1008":{"position":[[1,7],[685,7]]},"1018":{"position":[[65,7]]},"1032":{"position":[[656,7],[1017,7],[1319,7]]},"1042":{"position":[[1123,7],[1431,7]]},"1043":{"position":[[44,7],[235,7]]},"1051":{"position":[[44,7],[491,7]]},"1059":{"position":[[44,7],[228,7]]},"1092":{"position":[[15,7]]},"1096":{"position":[[37,7]]},"1105":{"position":[[165,7],[220,7]]},"1118":{"position":[[4,7],[83,7],[196,7],[458,7],[508,7],[684,7],[809,8],[1144,7]]},"1154":{"position":[[59,8]]},"1198":{"position":[[73,8],[119,7]]},"1251":{"position":[[318,7]]},"1282":{"position":[[333,7]]},"1283":{"position":[[60,8],[271,7]]},"1288":{"position":[[307,7]]},"1289":{"position":[[60,8],[673,7]]},"1297":{"position":[[47,7]]},"1303":{"position":[[44,7],[228,7]]},"1310":{"position":[[348,7]]},"1311":{"position":[[107,7]]},"1320":{"position":[[60,8]]},"1321":{"position":[[354,7]]},"1333":{"position":[[60,8]]},"1334":{"position":[[442,7]]},"1344":{"position":[[60,8]]},"1345":{"position":[[47,7]]},"1373":{"position":[[44,7],[473,7]]},"1374":{"position":[[44,7],[473,7]]},"1383":{"position":[[739,7],[1055,7],[1386,7],[1577,7],[1707,7],[1910,7]]},"1397":{"position":[[44,7],[225,7]]},"1398":{"position":[[44,7],[224,7]]},"1408":{"position":[[396,7],[704,7]]},"1409":{"position":[[44,7],[235,7]]},"1451":{"position":[[1,7],[887,7]]}},"keywords":{}}],["estuary'",{"_index":801,"title":{},"content":{"53":{"position":[[444,9]]},"154":{"position":[[1651,9]]},"173":{"position":[[659,9]]},"180":{"position":[[443,9]]},"203":{"position":[[513,9]]},"211":{"position":[[601,9]]},"345":{"position":[[56,9]]},"869":{"position":[[1279,9]]},"974":{"position":[[90,9]]},"975":{"position":[[375,9]]},"977":{"position":[[788,9]]},"1186":{"position":[[410,9]]}},"keywords":{}}],["estuary'sazur",{"_index":2019,"title":{},"content":{"173":{"position":[[627,14]]}},"keywords":{}}],["estuary.atlassian.net",{"_index":4502,"title":{},"content":{"712":{"position":[[222,22]]}},"keywords":{}}],["estuary.dev",{"_index":4019,"title":{},"content":{"527":{"position":[[261,11]]}},"keywords":{}}],["estuary.jira.com",{"_index":4503,"title":{},"content":{"712":{"position":[[245,17]]}},"keywords":{}}],["estuary/anoth",{"_index":4047,"title":{},"content":{"534":{"position":[[1316,15]]}},"keywords":{}}],["estuary/flow",{"_index":4020,"title":{},"content":{"527":{"position":[[283,12]]},"534":{"position":[[1201,14],[1302,13]]},"535":{"position":[[297,12]]}},"keywords":{}}],["estuary/flow/your",{"_index":4042,"title":{},"content":{"534":{"position":[[343,18]]}},"keywords":{}}],["estuary/flowctl",{"_index":893,"title":{},"content":{"58":{"position":[[730,15]]},"169":{"position":[[977,15]]}},"keywords":{}}],["estuary1.atlassian.net",{"_index":3806,"title":{},"content":{"473":{"position":[[235,22]]}},"keywords":{}}],["estuary_",{"_index":5103,"title":{},"content":{"945":{"position":[[809,9]]}},"keywords":{}}],["estuary_db",{"_index":2137,"title":{},"content":{"191":{"position":[[570,13]]},"192":{"position":[[1096,10],[2330,10]]},"240":{"position":[[531,13]]},"242":{"position":[[589,10],[871,11]]},"1383":{"position":[[518,13]]}},"keywords":{}}],["estuary_flow_us",{"_index":4848,"title":{},"content":{"864":{"position":[[201,17],[285,18],[476,18],[672,18],[767,18],[1079,18],[1128,18],[1177,18],[1222,18],[1266,18],[1304,18],[1384,18]]},"871":{"position":[[163,17]]},"876":{"position":[[201,17],[285,18],[476,18],[672,18],[767,18],[896,18]]}},"keywords":{}}],["estuary_flow_user.flow_watermark",{"_index":4860,"title":{},"content":{"864":{"position":[[1347,33]]}},"keywords":{}}],["estuary_flow_user.flow_watermarks(slot",{"_index":4852,"title":{},"content":{"864":{"position":[[829,38]]}},"keywords":{}}],["estuary_password",{"_index":2134,"title":{},"content":{"191":{"position":[[497,16],[693,16],[1178,17]]},"240":{"position":[[471,16],[654,16],[1139,17]]},"1032":{"position":[[481,16],[835,17]]},"1383":{"position":[[407,16],[641,16],[1126,17]]}},"keywords":{}}],["estuary_publ",{"_index":5098,"title":{},"content":{"945":{"position":[[36,20]]}},"keywords":{}}],["estuary_rol",{"_index":2140,"title":{},"content":{"191":{"position":[[623,12],[638,15],[1211,13]]},"192":{"position":[[1158,12]]},"240":{"position":[[584,12],[599,15],[1172,13]]},"242":{"position":[[541,13],[610,13],[763,13]]},"1032":{"position":[[550,12],[565,15],[868,13]]},"1383":{"position":[[375,13],[571,12],[586,15],[1159,13]]}},"keywords":{}}],["estuary_schema",{"_index":2142,"title":{},"content":{"191":{"position":[[726,14],[743,17]]},"192":{"position":[[1115,14],[2345,15]]},"240":{"position":[[687,14],[704,17]]},"242":{"position":[[516,14],[831,15]]},"1383":{"position":[[267,14],[674,14],[691,17]]}},"keywords":{}}],["estuary_stag",{"_index":5212,"title":{},"content":{"1031":{"position":[[319,15]]},"1034":{"position":[[873,15]]}},"keywords":{}}],["estuary_us",{"_index":2141,"title":{},"content":{"191":{"position":[[658,12],[673,15]]},"192":{"position":[[1007,12]]},"240":{"position":[[619,12],[634,15]]},"242":{"position":[[729,13]]},"1032":{"position":[[414,12],[429,15]]},"1037":{"position":[[207,12]]},"1383":{"position":[[389,13],[606,12],[621,15]]},"1384":{"position":[[644,13],[790,14]]}},"keywords":{}}],["estuary_wh",{"_index":2139,"title":{},"content":{"191":{"position":[[605,13]]},"192":{"position":[[1141,10]]},"240":{"position":[[566,13]]},"242":{"position":[[671,11]]},"1032":{"position":[[357,13]]},"1383":{"position":[[553,13]]},"1388":{"position":[[677,10]]}},"keywords":{}}],["et",{"_index":6550,"title":{},"content":{"1452":{"position":[[3526,4]]}},"keywords":{}}],["etc",{"_index":4405,"title":{},"content":{"660":{"position":[[138,4]]}},"keywords":{}}],["etc.rw_organization_admin",{"_index":4521,"title":{},"content":{"723":{"position":[[327,26]]}},"keywords":{}}],["etl",{"_index":3183,"title":{},"content":{"329":{"position":[[481,3]]}},"keywords":{}}],["eu",{"_index":4560,"title":{},"content":{"745":{"position":[[154,4]]},"747":{"position":[[1119,3]]}},"keywords":{}}],["eu/na/f",{"_index":3488,"title":{},"content":{"387":{"position":[[883,11]]}},"keywords":{}}],["eur",{"_index":3893,"title":{},"content":{"494":{"position":[[219,4]]},"496":{"position":[[292,3],[303,3]]},"497":{"position":[[122,3]]}},"keywords":{}}],["european",{"_index":3477,"title":{},"content":{"385":{"position":[[233,9]]}},"keywords":{}}],["evalu",{"_index":269,"title":{},"content":{"8":{"position":[[574,8]]},"87":{"position":[[91,9]]},"96":{"position":[[59,9]]},"97":{"position":[[262,9]]},"107":{"position":[[2726,9]]},"156":{"position":[[556,9]]},"277":{"position":[[1066,9]]},"397":{"position":[[747,8]]},"1434":{"position":[[1303,8]]},"1442":{"position":[[767,8],[890,11]]},"1443":{"position":[[213,8],[292,11],[834,12]]}},"keywords":{}}],["evaluated.contact",{"_index":5019,"title":{},"content":{"910":{"position":[[375,17]]},"926":{"position":[[375,17]]},"937":{"position":[[375,17]]},"953":{"position":[[375,17]]},"971":{"position":[[375,17]]}},"keywords":{}}],["even",{"_index":175,"title":{},"content":{"4":{"position":[[542,4]]},"64":{"position":[[967,4]]},"87":{"position":[[662,4]]},"92":{"position":[[605,4]]},"109":{"position":[[74,4]]},"125":{"position":[[550,4]]},"126":{"position":[[112,4]]},"135":{"position":[[732,4]]},"165":{"position":[[262,4]]},"211":{"position":[[908,4]]},"218":{"position":[[1915,4]]},"279":{"position":[[429,4]]},"326":{"position":[[1314,4]]},"331":{"position":[[103,4]]},"478":{"position":[[313,4]]},"480":{"position":[[1720,4]]},"599":{"position":[[313,4]]},"657":{"position":[[619,4]]},"821":{"position":[[924,4]]},"869":{"position":[[700,4]]},"911":{"position":[[426,5]]},"917":{"position":[[842,4]]},"919":{"position":[[1367,4]]},"922":{"position":[[1464,4],[2873,4]]},"927":{"position":[[426,5]]},"938":{"position":[[426,5]]},"954":{"position":[[426,5]]},"965":{"position":[[842,4]]},"972":{"position":[[426,5]]},"1036":{"position":[[607,4]]},"1439":{"position":[[861,4]]},"1447":{"position":[[712,4]]},"1459":{"position":[[527,4]]},"1462":{"position":[[255,4]]}},"keywords":{}}],["evenli",{"_index":6680,"title":{},"content":{"1474":{"position":[[299,6]]}},"keywords":{}}],["event",{"_index":208,"title":{"197":{"position":[[21,6]]},"786":{"position":[[7,5]]},"870":{"position":[[26,6]]}},"content":{"6":{"position":[[239,6],[533,6]]},"7":{"position":[[371,7]]},"67":{"position":[[2075,5]]},"110":{"position":[[506,5],[561,6]]},"141":{"position":[[1029,5]]},"164":{"position":[[1022,6],[1090,5],[1141,6]]},"180":{"position":[[549,5]]},"183":{"position":[[1639,5]]},"197":{"position":[[8,6],[419,6],[682,7],[795,6],[841,7],[920,7],[1028,7],[1166,5],[1213,6],[1565,5]]},"209":{"position":[[410,6],[1145,5],[1218,6],[1457,7]]},"210":{"position":[[1682,6]]},"211":{"position":[[920,5]]},"212":{"position":[[110,6]]},"232":{"position":[[375,5]]},"237":{"position":[[2811,6]]},"252":{"position":[[137,6]]},"254":{"position":[[3621,5],[3933,7],[3954,6]]},"279":{"position":[[581,7]]},"312":{"position":[[141,6]]},"313":{"position":[[3573,6]]},"331":{"position":[[56,5],[70,5]]},"366":{"position":[[220,6],[573,6]]},"368":{"position":[[181,6]]},"425":{"position":[[388,6]]},"467":{"position":[[209,6]]},"529":{"position":[[408,6],[475,6]]},"537":{"position":[[50,5]]},"584":{"position":[[904,6]]},"642":{"position":[[182,6]]},"660":{"position":[[382,6],[425,6],[934,7],[1073,5]]},"661":{"position":[[128,7],[406,6]]},"675":{"position":[[312,6]]},"755":{"position":[[181,6]]},"764":{"position":[[443,6]]},"768":{"position":[[181,6]]},"777":{"position":[[443,6]]},"785":{"position":[[119,6],[424,6],[650,7]]},"786":{"position":[[31,6]]},"795":{"position":[[179,6]]},"804":{"position":[[441,6]]},"810":{"position":[[179,6]]},"819":{"position":[[441,6]]},"821":{"position":[[304,7]]},"826":{"position":[[179,6]]},"835":{"position":[[441,6]]},"867":{"position":[[432,6]]},"869":{"position":[[1179,5]]},"870":{"position":[[174,6],[406,6],[735,6],[931,6]]},"903":{"position":[[246,6],[599,6]]},"905":{"position":[[184,6]]},"909":{"position":[[409,5],[990,5]]},"912":{"position":[[315,7]]},"915":{"position":[[246,6],[599,6]]},"920":{"position":[[184,6]]},"922":{"position":[[54,6],[101,6],[353,6],[535,5],[2944,7]]},"925":{"position":[[409,5],[990,5]]},"930":{"position":[[246,6],[599,6]]},"932":{"position":[[184,6]]},"936":{"position":[[409,5],[990,5]]},"945":{"position":[[749,6]]},"948":{"position":[[184,6]]},"952":{"position":[[409,5],[990,5]]},"963":{"position":[[400,6],[753,6]]},"966":{"position":[[184,6]]},"970":{"position":[[409,5],[990,5]]},"998":{"position":[[236,6]]},"1040":{"position":[[19,6]]},"1050":{"position":[[19,6]]},"1058":{"position":[[19,6]]},"1078":{"position":[[1050,6]]},"1182":{"position":[[282,6]]},"1191":{"position":[[284,6]]},"1233":{"position":[[46,5]]},"1262":{"position":[[284,6]]},"1292":{"position":[[1795,5],[1841,6]]},"1306":{"position":[[1795,5],[1841,6]]},"1329":{"position":[[1795,5],[1841,6]]},"1356":{"position":[[1289,5]]},"1389":{"position":[[283,6]]},"1456":{"position":[[164,7]]},"1472":{"position":[[615,6]]},"1476":{"position":[[932,5]]}},"keywords":{}}],["eventsengagementsengag",{"_index":4385,"title":{},"content":{"649":{"position":[[286,28]]}},"keywords":{}}],["eventsissuesprojectsreleas",{"_index":5151,"title":{},"content":{"994":{"position":[[70,28]]}},"keywords":{}}],["eventspropertiesticket",{"_index":4371,"title":{},"content":{"642":{"position":[[139,23]]}},"keywords":{}}],["eventsticket",{"_index":5459,"title":{},"content":{"1128":{"position":[[375,12]]}},"keywords":{}}],["eventu",{"_index":2476,"title":{"1147":{"position":[[0,8]]},"1174":{"position":[[0,8]]},"1216":{"position":[[0,8]]},"1224":{"position":[[0,8]]}},"content":{"227":{"position":[[15,10]]},"642":{"position":[[249,8]]},"1147":{"position":[[329,10]]},"1174":{"position":[[329,10]]},"1216":{"position":[[329,10]]},"1224":{"position":[[329,10]]},"1439":{"position":[[1505,10]]}},"keywords":{}}],["everyon",{"_index":1848,"title":{},"content":{"154":{"position":[[963,8]]}},"keywords":{}}],["everyth",{"_index":2262,"title":{},"content":{"209":{"position":[[173,10]]},"212":{"position":[[28,10]]},"232":{"position":[[138,10]]},"239":{"position":[[2853,10]]},"243":{"position":[[28,10]]},"275":{"position":[[91,11]]},"296":{"position":[[7473,10]]},"315":{"position":[[193,10]]},"322":{"position":[[887,10]]},"323":{"position":[[1659,10]]},"326":{"position":[[1511,10]]},"1461":{"position":[[508,10],[4052,10]]}},"keywords":{}}],["everywher",{"_index":3165,"title":{},"content":{"324":{"position":[[654,10]]}},"keywords":{}}],["evict",{"_index":4688,"title":{},"content":{"785":{"position":[[631,7]]}},"keywords":{}}],["evolut",{"_index":285,"title":{"10":{"position":[[7,9]]},"12":{"position":[[6,11]]},"13":{"position":[[15,10]]},"208":{"position":[[18,10]]},"304":{"position":[[7,9]]},"306":{"position":[[7,9]]}},"content":{"11":{"position":[[1147,10]]},"12":{"position":[[181,9],[419,10]]},"13":{"position":[[12,9],[327,10],[404,10],[659,10],[798,9],[1050,10],[1132,9],[1282,9],[1493,10]]},"14":{"position":[[1074,10]]},"55":{"position":[[689,9]]},"208":{"position":[[123,10],[384,9],[683,9],[707,10],[1041,9],[1369,9],[1552,9]]},"211":{"position":[[618,9]]},"239":{"position":[[1921,10],[2031,9],[2264,9],[2610,9],[2791,10]]},"241":{"position":[[208,10]]},"307":{"position":[[3388,9]]},"309":{"position":[[3712,9]]}},"keywords":{}}],["evolv",{"_index":703,"title":{},"content":{"38":{"position":[[453,9]]},"106":{"position":[[551,6]]},"278":{"position":[[1528,6]]},"329":{"position":[[37,6]]},"331":{"position":[[656,6]]}},"keywords":{}}],["evolveincompatiblecollect",{"_index":820,"title":{},"content":{"55":{"position":[[521,29],[1129,29]]},"56":{"position":[[886,30]]},"307":{"position":[[3334,31]]},"309":{"position":[[3658,31]]}},"keywords":{}}],["ewallet",{"_index":4913,"title":{},"content":{"879":{"position":[[849,7]]}},"keywords":{}}],["ewallet.pem",{"_index":4914,"title":{},"content":{"879":{"position":[[861,11]]}},"keywords":{}}],["ex",{"_index":5755,"title":{},"content":{"1155":{"position":[[510,4]]}},"keywords":{}}],["exact",{"_index":733,"title":{},"content":{"41":{"position":[[490,9]]},"45":{"position":[[92,5]]},"67":{"position":[[800,5]]},"112":{"position":[[597,5]]},"138":{"position":[[2682,5]]},"141":{"position":[[2272,5]]},"142":{"position":[[2759,5]]},"173":{"position":[[1063,5]]},"286":{"position":[[315,5]]},"846":{"position":[[171,5]]},"1435":{"position":[[303,5]]}},"keywords":{}}],["exactingli",{"_index":1047,"title":{},"content":{"70":{"position":[[284,10]]}},"keywords":{}}],["exactli",{"_index":1554,"title":{"1435":{"position":[[0,7]]}},"content":{"107":{"position":[[3553,7]]},"115":{"position":[[1043,8]]},"124":{"position":[[348,8]]},"126":{"position":[[221,7]]},"198":{"position":[[313,7],[820,7]]},"236":{"position":[[1767,7]]},"320":{"position":[[686,7]]},"323":{"position":[[1155,7]]},"326":{"position":[[1836,7]]},"332":{"position":[[159,7]]},"602":{"position":[[757,7]]},"1156":{"position":[[291,7]]},"1192":{"position":[[341,7]]},"1394":{"position":[[338,7]]},"1423":{"position":[[348,7]]},"1439":{"position":[[359,7]]},"1459":{"position":[[557,7],[723,7],[1145,7]]}},"keywords":{}}],["exacts"",{"_index":5171,"title":{},"content":{"1009":{"position":[[1347,13]]}},"keywords":{}}],["examin",{"_index":2167,"title":{},"content":{"192":{"position":[[1754,8]]},"237":{"position":[[200,7]]},"253":{"position":[[1066,7]]},"313":{"position":[[1066,7]]}},"keywords":{}}],["exampl",{"_index":270,"title":{"354":{"position":[[11,8]]}},"content":{"8":{"position":[[618,8],[699,8]]},"13":{"position":[[971,8],[1678,8]]},"16":{"position":[[789,8]]},"20":{"position":[[694,8]]},"31":{"position":[[187,8]]},"42":{"position":[[192,8]]},"45":{"position":[[165,8]]},"56":{"position":[[2445,8]]},"60":{"position":[[1160,8]]},"61":{"position":[[622,8]]},"62":{"position":[[655,8]]},"63":{"position":[[1175,8]]},"66":{"position":[[348,8],[765,7]]},"67":{"position":[[381,8]]},"68":{"position":[[833,8],[989,8]]},"71":{"position":[[155,8]]},"72":{"position":[[561,8],[682,8]]},"74":{"position":[[437,8]]},"75":{"position":[[139,8]]},"82":{"position":[[1246,8],[1290,8],[3402,8]]},"87":{"position":[[164,8],[709,7]]},"92":{"position":[[88,7]]},"98":{"position":[[196,8],[1079,7]]},"103":{"position":[[852,7]]},"105":{"position":[[967,8]]},"107":{"position":[[558,8],[1915,8]]},"110":{"position":[[146,8],[1046,8],[1473,7],[1552,7]]},"111":{"position":[[221,8]]},"113":{"position":[[642,7],[844,7]]},"114":{"position":[[232,8]]},"115":{"position":[[761,8],[1482,7],[1603,8]]},"121":{"position":[[834,8]]},"122":{"position":[[449,8],[776,8]]},"123":{"position":[[103,8]]},"132":{"position":[[278,8]]},"133":{"position":[[339,8]]},"138":{"position":[[960,8]]},"142":{"position":[[939,8]]},"154":{"position":[[549,8]]},"158":{"position":[[814,8]]},"159":{"position":[[156,8]]},"160":{"position":[[537,8]]},"161":{"position":[[488,7]]},"162":{"position":[[175,8],[1828,7]]},"164":{"position":[[490,7]]},"165":{"position":[[636,8]]},"180":{"position":[[423,8]]},"183":{"position":[[434,7],[990,7],[2430,8]]},"184":{"position":[[296,8],[813,8]]},"190":{"position":[[758,8]]},"192":{"position":[[396,8],[708,8],[953,9]]},"217":{"position":[[876,7]]},"218":{"position":[[414,8]]},"219":{"position":[[280,8]]},"221":{"position":[[463,8]]},"237":{"position":[[619,8],[1115,8]]},"238":{"position":[[404,7]]},"240":{"position":[[3325,8]]},"250":{"position":[[69,7],[118,7]]},"264":{"position":[[777,7]]},"267":{"position":[[338,8],[809,7],[1414,7]]},"268":{"position":[[334,7],[631,7],[1526,9],[1583,8],[1638,8]]},"269":{"position":[[269,7],[1104,8],[1159,8]]},"270":{"position":[[1043,7],[1531,8]]},"271":{"position":[[121,8]]},"274":{"position":[[152,8],[1087,8],[1353,8],[1483,8]]},"280":{"position":[[786,7]]},"281":{"position":[[2233,9],[2323,8]]},"284":{"position":[[199,7],[406,8],[751,7]]},"288":{"position":[[959,8]]},"290":{"position":[[684,8]]},"291":{"position":[[338,8]]},"299":{"position":[[874,8]]},"301":{"position":[[624,8],[1123,8]]},"302":{"position":[[338,8]]},"307":{"position":[[614,7],[948,8]]},"308":{"position":[[496,8]]},"309":{"position":[[614,8],[2027,8]]},"319":{"position":[[1524,8]]},"322":{"position":[[1202,7]]},"337":{"position":[[307,8]]},"338":{"position":[[298,8]]},"341":{"position":[[108,8]]},"354":{"position":[[4,7]]},"390":{"position":[[485,9]]},"395":{"position":[[655,9]]},"417":{"position":[[1288,8]]},"438":{"position":[[1804,8]]},"439":{"position":[[147,7],[383,7],[633,7]]},"480":{"position":[[484,8]]},"486":{"position":[[183,7]]},"488":{"position":[[79,7],[271,8],[706,8],[984,8]]},"489":{"position":[[603,8]]},"502":{"position":[[120,8],[326,8]]},"517":{"position":[[2294,8]]},"545":{"position":[[912,8]]},"552":{"position":[[196,8],[221,8],[505,8],[530,8],[726,8]]},"590":{"position":[[291,8],[442,8],[508,8],[904,8]]},"658":{"position":[[183,7]]},"659":{"position":[[236,7],[428,8],[863,8],[1141,8]]},"661":{"position":[[417,8]]},"662":{"position":[[603,8]]},"674":{"position":[[183,7]]},"676":{"position":[[79,7],[271,8],[706,8],[984,8]]},"677":{"position":[[603,8]]},"689":{"position":[[183,7]]},"691":{"position":[[79,7],[271,8],[706,8],[984,8]]},"692":{"position":[[603,8]]},"738":{"position":[[175,8]]},"754":{"position":[[563,8]]},"794":{"position":[[769,8]]},"809":{"position":[[769,8]]},"821":{"position":[[1200,8]]},"825":{"position":[[605,8]]},"840":{"position":[[600,8],[972,8],[1872,8],[2242,7]]},"849":{"position":[[1071,8],[1585,8],[3382,7]]},"869":{"position":[[773,9]]},"870":{"position":[[537,7]]},"907":{"position":[[1774,7]]},"911":{"position":[[231,7]]},"919":{"position":[[2682,8]]},"923":{"position":[[1774,7]]},"927":{"position":[[231,7]]},"938":{"position":[[231,7]]},"954":{"position":[[231,7]]},"968":{"position":[[1774,7]]},"972":{"position":[[231,7]]},"1008":{"position":[[389,8],[1259,7]]},"1020":{"position":[[983,8]]},"1021":{"position":[[384,8],[1017,8]]},"1034":{"position":[[108,8]]},"1047":{"position":[[722,7]]},"1055":{"position":[[722,7]]},"1063":{"position":[[722,7]]},"1077":{"position":[[153,8],[450,8]]},"1087":{"position":[[224,8]]},"1092":{"position":[[392,8]]},"1122":{"position":[[282,9]]},"1133":{"position":[[1057,8]]},"1146":{"position":[[139,8]]},"1151":{"position":[[108,8]]},"1173":{"position":[[139,8]]},"1200":{"position":[[668,7]]},"1215":{"position":[[139,8]]},"1223":{"position":[[139,8]]},"1277":{"position":[[294,8]]},"1286":{"position":[[826,8]]},"1301":{"position":[[662,8]]},"1313":{"position":[[1524,7]]},"1325":{"position":[[826,8]]},"1337":{"position":[[1524,7]]},"1356":{"position":[[270,8]]},"1382":{"position":[[448,8]]},"1386":{"position":[[129,8]]},"1391":{"position":[[499,8]]},"1429":{"position":[[561,8]]},"1437":{"position":[[40,8]]},"1439":{"position":[[485,8]]},"1440":{"position":[[1670,8]]},"1442":{"position":[[1414,8]]},"1447":{"position":[[98,8]]},"1448":{"position":[[492,8]]},"1452":{"position":[[1349,9],[2248,8],[2412,8],[2661,8],[3404,7],[3655,8],[4257,8]]},"1453":{"position":[[404,8]]},"1459":{"position":[[849,8],[1459,7],[1743,8]]},"1461":{"position":[[745,9],[756,8],[2175,8],[2339,8],[2582,8],[2983,7],[4216,8],[4508,8]]},"1462":{"position":[[334,8]]},"1465":{"position":[[384,8]]},"1471":{"position":[[250,8],[802,8]]},"1476":{"position":[[1086,8]]}},"keywords":{}}],["example.com'.choos",{"_index":5356,"title":{},"content":{"1092":{"position":[[459,20]]}},"keywords":{}}],["example/reductions/append",{"_index":6645,"title":{},"content":{"1464":{"position":[[123,25],[471,25],[634,25]]}},"keywords":{}}],["example/reductions/fww",{"_index":6639,"title":{},"content":{"1463":{"position":[[266,22],[588,22],[790,22]]}},"keywords":{}}],["example/reductions/merg",{"_index":6657,"title":{},"content":{"1467":{"position":[[426,24],[987,24],[1132,24],[1288,24],[1494,24],[2093,24],[2410,24],[2656,24]]}},"keywords":{}}],["example/reductions/min",{"_index":6709,"title":{},"content":{"1476":{"position":[[132,22],[421,22],[597,22],[1194,22],[1644,22],[2016,22]]}},"keywords":{}}],["example/reductions/set",{"_index":6718,"title":{},"content":{"1477":{"position":[[906,22],[1683,22],[2027,22],[2196,22],[2448,22],[3122,22],[4023,22],[4379,22],[4558,22],[4820,22]]}},"keywords":{}}],["example/reductions/sum",{"_index":6650,"title":{},"content":{"1465":{"position":[[443,22],[1165,22],[1330,22],[1431,22],[1597,22]]},"1466":{"position":[[85,22],[452,22],[585,22]]}},"keywords":{}}],["example:curl",{"_index":4360,"title":{},"content":{"635":{"position":[[308,12]]}},"keywords":{}}],["example_t",{"_index":1647,"title":{},"content":{"120":{"position":[[2182,13]]},"122":{"position":[[1232,13]]}},"keywords":{}}],["exampleshuffl",{"_index":1517,"title":{},"content":{"107":{"position":[[604,14]]}},"keywords":{}}],["examplestorag",{"_index":129,"title":{},"content":{"3":{"position":[[650,14]]}},"keywords":{}}],["exce",{"_index":553,"title":{},"content":{"20":{"position":[[1026,6]]},"284":{"position":[[698,6]]},"577":{"position":[[521,6]]},"588":{"position":[[516,6]]},"870":{"position":[[599,7]]},"909":{"position":[[114,6]]},"925":{"position":[[114,6]]},"936":{"position":[[114,6]]},"952":{"position":[[114,6]]},"970":{"position":[[114,6]]},"1123":{"position":[[526,7]]}},"keywords":{}}],["exceed",{"_index":4209,"title":{},"content":{"577":{"position":[[114,9]]},"588":{"position":[[109,9]]},"922":{"position":[[2406,9]]},"1068":{"position":[[115,9]]}},"keywords":{}}],["excel",{"_index":3161,"title":{},"content":{"323":{"position":[[1999,11]]}},"keywords":{}}],["except",{"_index":1312,"title":{},"content":{"90":{"position":[[354,9]]},"142":{"position":[[274,11]]},"250":{"position":[[1055,6]]},"757":{"position":[[2363,11]]},"770":{"position":[[2363,11]]},"797":{"position":[[2370,11]]},"812":{"position":[[2370,11]]},"828":{"position":[[2370,11]]},"1140":{"position":[[2631,6],[2670,9]]},"1192":{"position":[[489,6]]},"1209":{"position":[[893,6]]},"1292":{"position":[[1917,6]]},"1306":{"position":[[1917,6]]},"1316":{"position":[[2631,6],[2670,9]]},"1329":{"position":[[1917,6]]},"1340":{"position":[[2631,6],[2670,9]]},"1351":{"position":[[2631,6],[2670,9]]},"1370":{"position":[[993,6]]},"1379":{"position":[[792,6],[838,9]]},"1403":{"position":[[792,6],[838,9]]},"1414":{"position":[[792,6],[838,9]]},"1423":{"position":[[882,6]]},"1431":{"position":[[2654,6],[2693,9]]}},"keywords":{}}],["excess",{"_index":5440,"title":{},"content":{"1123":{"position":[[722,11]]},"1157":{"position":[[282,9]]}},"keywords":{}}],["exchang",{"_index":3330,"title":{"493":{"position":[[0,8]]}},"content":{"364":{"position":[[994,8],[1059,8]]},"432":{"position":[[664,8]]},"494":{"position":[[33,8]]},"495":{"position":[[250,8]]},"496":{"position":[[357,10]]},"497":{"position":[[89,8]]},"1292":{"position":[[1951,8]]},"1306":{"position":[[1951,8]]},"1329":{"position":[[1951,8]]}},"keywords":{}}],["exchange_r",{"_index":3898,"title":{},"content":{"496":{"position":[[642,15]]},"497":{"position":[[228,14],[361,14]]}},"keywords":{}}],["exclud",{"_index":503,"title":{},"content":{"17":{"position":[[708,9],[791,7],[859,8],[880,7],[932,9],[955,8]]},"68":{"position":[[1700,7]]},"72":{"position":[[91,8]]},"122":{"position":[[956,7],[1261,8],[1632,8],[1731,8]]},"230":{"position":[[741,7],[1088,7],[1153,7]]},"309":{"position":[[292,8]]},"419":{"position":[[2058,8]]},"441":{"position":[[667,8]]},"504":{"position":[[1687,8]]},"547":{"position":[[2060,8]]},"639":{"position":[[1685,8]]},"1023":{"position":[[2041,8]]},"1157":{"position":[[256,7]]},"1276":{"position":[[428,7]]},"1292":{"position":[[1983,7]]},"1306":{"position":[[1983,7]]},"1329":{"position":[[1983,7]]},"1370":{"position":[[1004,7]]},"1472":{"position":[[405,7],[831,7],[911,8]]}},"keywords":{}}],["excluded_field",{"_index":3059,"title":{},"content":{"309":{"position":[[638,15]]}},"keywords":{}}],["exclus",{"_index":6294,"title":{},"content":{"1370":{"position":[[1017,9]]}},"keywords":{}}],["exclusivemaximum",{"_index":1883,"title":{},"content":{"159":{"position":[[843,17]]}},"keywords":{}}],["exclusiveminimum",{"_index":1882,"title":{},"content":{"159":{"position":[[789,17]]},"161":{"position":[[963,18],[988,18]]}},"keywords":{}}],["exec",{"_index":5243,"title":{},"content":{"1042":{"position":[[112,4],[978,4]]},"1043":{"position":[[776,4],[1642,4]]},"1051":{"position":[[1032,4],[1904,4]]},"1059":{"position":[[796,4],[1697,4]]},"1140":{"position":[[2378,4],[2713,4]]},"1316":{"position":[[2378,4],[2713,4]]},"1340":{"position":[[2378,4],[2713,4]]},"1351":{"position":[[2378,4],[2713,4]]},"1379":{"position":[[529,4],[885,4]]},"1403":{"position":[[529,4],[885,4]]},"1414":{"position":[[529,4],[885,4]]},"1431":{"position":[[2401,4],[2736,4]]}},"keywords":{}}],["execut",{"_index":192,"title":{},"content":{"4":{"position":[[779,9]]},"49":{"position":[[29,9]]},"58":{"position":[[275,11]]},"88":{"position":[[624,10]]},"99":{"position":[[22,7]]},"100":{"position":[[994,9]]},"102":{"position":[[76,9],[164,8]]},"108":{"position":[[304,9]]},"112":{"position":[[756,9]]},"169":{"position":[[514,11]]},"209":{"position":[[478,9]]},"211":{"position":[[846,8]]},"237":{"position":[[2997,7]]},"238":{"position":[[1333,9]]},"240":{"position":[[378,7],[2092,7],[2649,8]]},"253":{"position":[[457,7]]},"254":{"position":[[2972,8]]},"295":{"position":[[1754,7]]},"313":{"position":[[457,7]]},"315":{"position":[[120,7]]},"320":{"position":[[602,9]]},"324":{"position":[[496,8]]},"329":{"position":[[626,10]]},"480":{"position":[[41,9]]},"482":{"position":[[763,8]]},"483":{"position":[[69,8]]},"560":{"position":[[65,8]]},"785":{"position":[[132,9]]},"821":{"position":[[106,9],[791,7]]},"912":{"position":[[114,9],[807,7]]},"1031":{"position":[[189,7]]},"1032":{"position":[[391,7]]},"1034":{"position":[[554,7]]},"1036":{"position":[[264,10]]},"1140":{"position":[[2746,7]]},"1209":{"position":[[910,7]]},"1292":{"position":[[2018,7]]},"1306":{"position":[[2018,7]]},"1316":{"position":[[2746,7]]},"1329":{"position":[[2018,7]]},"1340":{"position":[[2746,7]]},"1351":{"position":[[2746,7]]},"1379":{"position":[[930,7]]},"1403":{"position":[[930,7]]},"1414":{"position":[[930,7]]},"1423":{"position":[[899,7]]},"1431":{"position":[[2769,7]]},"1452":{"position":[[341,8],[790,9],[874,8],[1008,9],[1089,8],[1308,8]]}},"keywords":{}}],["execute_catalog_rol",{"_index":4857,"title":{},"content":{"864":{"position":[[1104,20]]}},"keywords":{}}],["exercis",{"_index":3577,"title":{},"content":{"411":{"position":[[204,8]]}},"keywords":{}}],["exert",{"_index":742,"title":{},"content":{"42":{"position":[[533,5]]},"218":{"position":[[1909,5]]}},"keywords":{}}],["exhaust",{"_index":1089,"title":{},"content":{"74":{"position":[[962,10]]},"759":{"position":[[194,10]]},"772":{"position":[[205,10]]},"799":{"position":[[192,10]]},"814":{"position":[[192,10]]},"830":{"position":[[192,10]]}},"keywords":{}}],["exist",{"_index":374,"title":{"271":{"position":[[12,8]]}},"content":{"13":{"position":[[87,8]]},"27":{"position":[[412,5]]},"54":{"position":[[582,8],[711,8]]},"55":{"position":[[498,8]]},"56":{"position":[[604,8]]},"62":{"position":[[134,8],[268,8],[386,8],[670,8]]},"63":{"position":[[970,6]]},"64":{"position":[[926,7]]},"72":{"position":[[176,5],[277,9],[381,6],[397,5]]},"94":{"position":[[534,5],[949,5]]},"100":{"position":[[641,8]]},"105":{"position":[[1005,8]]},"136":{"position":[[359,8]]},"137":{"position":[[439,5]]},"138":{"position":[[40,8]]},"142":{"position":[[48,8]]},"160":{"position":[[331,5],[685,5]]},"165":{"position":[[809,5]]},"183":{"position":[[1707,8]]},"191":{"position":[[818,6],[953,6],[1050,6],[1134,6],[1470,6]]},"197":{"position":[[956,8]]},"207":{"position":[[1512,5]]},"209":{"position":[[521,8]]},"210":{"position":[[1841,8]]},"221":{"position":[[1188,7],[1267,7]]},"222":{"position":[[433,7],[512,7]]},"223":{"position":[[399,7],[478,7]]},"224":{"position":[[452,7],[531,7]]},"230":{"position":[[388,7]]},"236":{"position":[[3340,6]]},"237":{"position":[[1311,6]]},"240":{"position":[[779,6],[914,6],[1011,6],[1095,6],[1431,6]]},"242":{"position":[[664,6],[722,6],[756,6],[824,6],[864,6]]},"245":{"position":[[286,8]]},"259":{"position":[[772,8]]},"266":{"position":[[120,8]]},"271":{"position":[[96,8],[230,8]]},"288":{"position":[[505,8]]},"296":{"position":[[3073,5],[7937,8]]},"307":{"position":[[2616,8],[2846,7]]},"309":{"position":[[558,8],[704,8],[3360,8]]},"310":{"position":[[209,8]]},"314":{"position":[[2544,8]]},"321":{"position":[[972,8]]},"322":{"position":[[716,8]]},"366":{"position":[[258,6]]},"367":{"position":[[602,6]]},"414":{"position":[[818,8]]},"483":{"position":[[189,7]]},"591":{"position":[[192,8]]},"595":{"position":[[239,8]]},"661":{"position":[[254,8],[569,5]]},"723":{"position":[[4,8]]},"752":{"position":[[221,6],[254,6],[643,6]]},"753":{"position":[[877,6],[910,6],[1299,6]]},"767":{"position":[[1857,6],[1890,6],[1976,6]]},"785":{"position":[[175,8]]},"791":{"position":[[174,6],[207,6],[596,6]]},"792":{"position":[[1797,6],[1830,6],[1916,6]]},"793":{"position":[[848,6],[881,6],[1270,6]]},"808":{"position":[[794,6],[827,6],[1216,6]]},"824":{"position":[[1919,6],[1952,6],[2038,6]]},"846":{"position":[[134,5]]},"862":{"position":[[89,5]]},"869":{"position":[[537,8]]},"874":{"position":[[89,5]]},"903":{"position":[[284,6]]},"904":{"position":[[1702,6]]},"911":{"position":[[410,8]]},"915":{"position":[[284,6]]},"917":{"position":[[1211,6]]},"918":{"position":[[1994,6]]},"919":{"position":[[2049,6]]},"927":{"position":[[410,8]]},"930":{"position":[[284,6]]},"931":{"position":[[1364,6]]},"938":{"position":[[410,8]]},"954":{"position":[[410,8]]},"963":{"position":[[438,6]]},"965":{"position":[[1211,6]]},"972":{"position":[[410,8]]},"1032":{"position":[[683,6],[791,6],[1072,6]]},"1140":{"position":[[2785,6]]},"1183":{"position":[[152,8],[255,8],[294,8],[388,8],[580,8],[818,8]]},"1204":{"position":[[417,8]]},"1209":{"position":[[932,6]]},"1230":{"position":[[1052,7]]},"1277":{"position":[[136,5]]},"1292":{"position":[[2061,6]]},"1298":{"position":[[399,7],[478,7]]},"1303":{"position":[[1436,6]]},"1306":{"position":[[2061,6]]},"1316":{"position":[[2785,6]]},"1322":{"position":[[433,7],[512,7]]},"1329":{"position":[[2061,6]]},"1335":{"position":[[433,7],[512,7]]},"1340":{"position":[[2785,6]]},"1346":{"position":[[399,7],[478,7]]},"1351":{"position":[[2785,6]]},"1354":{"position":[[152,6],[236,6]]},"1356":{"position":[[1406,6],[1516,6]]},"1370":{"position":[[1037,6]]},"1379":{"position":[[975,6]]},"1383":{"position":[[173,8],[766,6],[901,6],[998,6],[1082,6],[1418,6]]},"1394":{"position":[[1028,6]]},"1403":{"position":[[975,6]]},"1414":{"position":[[975,6]]},"1423":{"position":[[911,6]]},"1429":{"position":[[87,5]]},"1431":{"position":[[2808,6]]},"1434":{"position":[[1226,5],[1586,6],[1651,8]]},"1449":{"position":[[597,6]]},"1462":{"position":[[135,8]]},"1479":{"position":[[44,8]]}},"keywords":{}}],["existing=keep",{"_index":939,"title":{},"content":{"62":{"position":[[499,13]]}},"keywords":{}}],["existing=merg",{"_index":940,"title":{},"content":{"62":{"position":[[560,14]]}},"keywords":{}}],["existing=overwrit",{"_index":937,"title":{},"content":{"62":{"position":[[404,18]]}},"keywords":{}}],["existingdevelop",{"_index":5337,"title":{},"content":{"1083":{"position":[[212,17]]}},"keywords":{}}],["exit",{"_index":855,"title":{},"content":{"56":{"position":[[2264,6]]},"140":{"position":[[519,4]]},"162":{"position":[[134,7]]},"1292":{"position":[[2099,4]]},"1306":{"position":[[2099,4]]},"1329":{"position":[[2099,4]]},"1379":{"position":[[1025,4]]},"1403":{"position":[[1025,4]]},"1414":{"position":[[1025,4]]}},"keywords":{}}],["exp",{"_index":5645,"title":{},"content":{"1140":{"position":[[2825,3]]},"1316":{"position":[[2825,3]]},"1340":{"position":[[2825,3]]},"1351":{"position":[[2825,3]]},"1431":{"position":[[2848,3]]}},"keywords":{}}],["expand",{"_index":973,"title":{},"content":{"64":{"position":[[989,6]]},"146":{"position":[[1100,8]]},"149":{"position":[[1094,8]]},"152":{"position":[[1084,8]]},"165":{"position":[[1367,7],[1482,7],[1852,7]]},"192":{"position":[[2323,6]]},"207":{"position":[[1267,7]]},"280":{"position":[[19,7]]},"486":{"position":[[130,6]]},"658":{"position":[[130,6]]},"674":{"position":[[130,6]]},"689":{"position":[[130,6]]},"849":{"position":[[1904,6]]},"1459":{"position":[[1336,6]]}},"keywords":{}}],["expans",{"_index":6035,"title":{},"content":{"1292":{"position":[[2132,9]]},"1306":{"position":[[2132,9]]},"1329":{"position":[[2132,9]]}},"keywords":{}}],["expect",{"_index":438,"title":{},"content":{"14":{"position":[[806,6]]},"43":{"position":[[417,12]]},"68":{"position":[[262,9]]},"110":{"position":[[773,9]]},"114":{"position":[[516,6]]},"120":{"position":[[2110,7]]},"125":{"position":[[1418,6]]},"141":{"position":[[387,8]]},"158":{"position":[[789,12]]},"236":{"position":[[1783,6]]},"240":{"position":[[4442,9]]},"254":{"position":[[1705,9]]},"268":{"position":[[1863,9]]},"269":{"position":[[1327,7]]},"270":{"position":[[1942,7]]},"296":{"position":[[3142,8]]},"314":{"position":[[1522,9]]},"480":{"position":[[414,8]]},"616":{"position":[[43,7]]},"1475":{"position":[[268,13]]}},"keywords":{}}],["expens",{"_index":2054,"title":{},"content":{"180":{"position":[[763,9]]},"326":{"position":[[1686,8]]},"333":{"position":[[444,9]]},"584":{"position":[[1193,7]]},"1036":{"position":[[72,9]]},"1156":{"position":[[828,7]]}},"keywords":{}}],["experi",{"_index":1108,"title":{},"content":{"80":{"position":[[123,11]]},"103":{"position":[[340,11]]},"162":{"position":[[560,10]]},"175":{"position":[[312,11]]},"177":{"position":[[52,11]]},"213":{"position":[[477,10]]},"870":{"position":[[469,10]]},"1461":{"position":[[4753,11]]}},"keywords":{}}],["experiment",{"_index":1485,"title":{},"content":{"104":{"position":[[92,12]]}},"keywords":{}}],["expir",{"_index":1986,"title":{},"content":{"169":{"position":[[1668,6]]},"340":{"position":[[528,6]]},"448":{"position":[[672,7]]},"554":{"position":[[555,8]]},"718":{"position":[[300,6]]},"724":{"position":[[369,6],[498,6],[632,7]]},"750":{"position":[[133,10],[397,12]]},"764":{"position":[[339,7]]},"766":{"position":[[133,10],[397,12]]},"777":{"position":[[339,7]]},"789":{"position":[[151,10]]},"804":{"position":[[337,7]]},"807":{"position":[[151,10]]},"819":{"position":[[337,7]]},"823":{"position":[[151,10]]},"835":{"position":[[337,7]]},"885":{"position":[[400,7]]},"1292":{"position":[[2179,6]]},"1306":{"position":[[2179,6]]},"1329":{"position":[[2179,6]]}},"keywords":{}}],["expired."",{"_index":4978,"title":{},"content":{"898":{"position":[[1229,15]]}},"keywords":{}}],["explain",{"_index":2177,"title":{},"content":{"196":{"position":[[670,7]]},"233":{"position":[[855,7]]},"239":{"position":[[1964,7]]},"270":{"position":[[116,9]]},"1209":{"position":[[951,7]]},"1292":{"position":[[2203,7]]},"1306":{"position":[[2203,7]]},"1329":{"position":[[2203,7]]},"1370":{"position":[[1051,7]]},"1461":{"position":[[716,10]]}},"keywords":{}}],["explan",{"_index":2807,"title":{},"content":{"268":{"position":[[1660,12]]},"269":{"position":[[1181,12]]},"325":{"position":[[819,12]]},"738":{"position":[[326,11],[456,11]]}},"keywords":{}}],["explicit",{"_index":1683,"title":{},"content":{"122":{"position":[[1842,8]]},"419":{"position":[[502,8]]},"440":{"position":[[518,8]]},"504":{"position":[[446,8]]},"547":{"position":[[503,8]]},"639":{"position":[[444,8]]},"1023":{"position":[[483,8]]},"1463":{"position":[[183,8]]}},"keywords":{}}],["explicitli",{"_index":1309,"title":{},"content":{"90":{"position":[[100,10],[534,10]]},"92":{"position":[[295,10]]},"107":{"position":[[3881,10]]},"122":{"position":[[551,10]]},"162":{"position":[[1558,10]]},"309":{"position":[[335,10]]},"617":{"position":[[865,10]]},"754":{"position":[[151,10],[412,10]]},"794":{"position":[[285,10]]},"809":{"position":[[285,10]]},"825":{"position":[[285,10]]},"907":{"position":[[1720,10]]},"923":{"position":[[1720,10]]},"968":{"position":[[1720,10]]},"1286":{"position":[[342,10]]},"1301":{"position":[[342,10]]},"1313":{"position":[[1470,10]]},"1325":{"position":[[342,10]]},"1337":{"position":[[1470,10]]}},"keywords":{}}],["explor",{"_index":2093,"title":{"185":{"position":[[0,7]]}},"content":{"189":{"position":[[606,7]]},"211":{"position":[[421,8]]},"219":{"position":[[56,7]]},"242":{"position":[[83,9]]},"322":{"position":[[1105,8]]},"324":{"position":[[844,7]]},"570":{"position":[[89,8]]},"571":{"position":[[89,8]]},"573":{"position":[[960,9],[1011,9]]}},"keywords":{}}],["export",{"_index":1471,"title":{},"content":{"103":{"position":[[108,7]]},"281":{"position":[[1357,6]]},"296":{"position":[[4497,6],[4762,6],[4961,6],[5437,6],[6089,6]]},"315":{"position":[[1023,6],[1533,6],[1828,6]]},"322":{"position":[[413,6],[1254,6]]},"323":{"position":[[185,6]]},"326":{"position":[[979,7],[1057,8]]},"395":{"position":[[182,7]]},"1076":{"position":[[445,6]]},"1292":{"position":[[2240,6]]},"1306":{"position":[[2240,6]]},"1329":{"position":[[2240,6]]}},"keywords":{}}],["exportengagefunnelsrevenueannotationscohortscohort",{"_index":4558,"title":{},"content":{"744":{"position":[[72,50]]}},"keywords":{}}],["expos",{"_index":1093,"title":{"238":{"position":[[0,6]]}},"content":{"76":{"position":[[116,7]]},"234":{"position":[[377,6]]},"237":{"position":[[3569,6]]},"238":{"position":[[220,6]]},"242":{"position":[[313,7]]}},"keywords":{}}],["express",{"_index":1589,"title":{},"content":{"111":{"position":[[393,7]]},"132":{"position":[[27,10]]},"156":{"position":[[18,10],[382,12]]},"160":{"position":[[935,9]]},"281":{"position":[[3253,7]]},"556":{"position":[[1182,11]]},"1439":{"position":[[1042,7]]},"1465":{"position":[[582,7]]}},"keywords":{}}],["expression>"",{"_index":4235,"title":{},"content":{"585":{"position":[[854,22]]}},"keywords":{}}],["extend",{"_index":1876,"title":{},"content":{"159":{"position":[[321,7]]},"281":{"position":[[1381,7]]},"296":{"position":[[5461,7],[6113,7]]},"315":{"position":[[1557,7],[1852,7]]},"419":{"position":[[1047,8]]},"440":{"position":[[1063,8]]},"499":{"position":[[180,8]]},"504":{"position":[[987,8]]},"547":{"position":[[1048,8]]},"595":{"position":[[1405,8]]},"634":{"position":[[172,8]]},"639":{"position":[[985,8]]},"1023":{"position":[[1028,8]]},"1172":{"position":[[207,8],[299,8],[332,8],[478,8],[541,8],[630,8],[719,8],[775,8],[858,8],[936,8]]},"1222":{"position":[[207,8],[299,8],[332,8],[478,8],[541,8],[630,8],[719,8],[775,8],[858,8],[936,8]]},"1292":{"position":[[2290,8]]},"1306":{"position":[[2290,8]]},"1329":{"position":[[2290,8]]},"1464":{"position":[[37,7]]},"1467":{"position":[[334,9]]}},"keywords":{}}],["extens",{"_index":609,"title":{},"content":{"26":{"position":[[319,9],[397,9]]},"103":{"position":[[783,10]]},"190":{"position":[[1189,10]]},"417":{"position":[[1768,9]]},"502":{"position":[[1416,9]]},"545":{"position":[[1370,9]]},"637":{"position":[[930,9]]},"1021":{"position":[[1927,9]]},"1439":{"position":[[913,9]]}},"keywords":{}}],["extent_s",{"_index":6041,"title":{},"content":{"1292":{"position":[[2332,11]]},"1306":{"position":[[2332,11]]},"1329":{"position":[[2332,11]]}},"keywords":{}}],["extern",{"_index":146,"title":{},"content":{"3":{"position":[[1128,8]]},"4":{"position":[[434,8]]},"35":{"position":[[52,8]]},"36":{"position":[[86,8]]},"81":{"position":[[2140,8]]},"84":{"position":[[72,8]]},"157":{"position":[[29,8]]},"189":{"position":[[1277,8]]},"216":{"position":[[191,8],[322,8]]},"221":{"position":[[1686,8]]},"223":{"position":[[907,8]]},"239":{"position":[[223,8]]},"321":{"position":[[306,8],[399,8],[616,8],[1701,8]]},"323":{"position":[[1291,8]]},"326":{"position":[[790,8]]},"332":{"position":[[311,8]]},"1140":{"position":[[2859,8]]},"1176":{"position":[[527,8]]},"1185":{"position":[[327,8]]},"1194":{"position":[[537,8]]},"1203":{"position":[[698,8]]},"1204":{"position":[[156,8]]},"1205":{"position":[[206,8]]},"1206":{"position":[[641,8],[949,8]]},"1226":{"position":[[338,8]]},"1243":{"position":[[115,8]]},"1298":{"position":[[907,8]]},"1316":{"position":[[2859,8]]},"1340":{"position":[[2859,8]]},"1346":{"position":[[907,8]]},"1351":{"position":[[2859,8]]},"1354":{"position":[[362,8]]},"1379":{"position":[[1066,8]]},"1382":{"position":[[581,8]]},"1403":{"position":[[1066,8]]},"1414":{"position":[[1066,8]]},"1431":{"position":[[2882,8]]},"1439":{"position":[[72,8]]},"1461":{"position":[[2781,8]]},"1469":{"position":[[85,8]]},"1472":{"position":[[58,8]]},"1475":{"position":[[1029,8]]}},"keywords":{}}],["extra",{"_index":2810,"title":{},"content":{"270":{"position":[[81,5],[100,5]]},"1451":{"position":[[735,5]]}},"keywords":{}}],["extract",{"_index":466,"title":{},"content":{"16":{"position":[[484,8]]},"52":{"position":[[10,7]]},"94":{"position":[[2944,9]]},"107":{"position":[[82,9],[1316,9],[1814,9]]},"198":{"position":[[211,11],[304,8],[500,7],[675,8]]},"206":{"position":[[798,11]]},"233":{"position":[[611,7],[741,11]]},"296":{"position":[[3571,9]]},"351":{"position":[[267,7]]},"867":{"position":[[1365,8],[1489,7],[1630,8],[1646,7]]},"868":{"position":[[312,7]]},"869":{"position":[[993,7],[1354,7],[1406,7]]},"1140":{"position":[[2899,7]]},"1209":{"position":[[962,7]]},"1316":{"position":[[2899,7]]},"1340":{"position":[[2899,7]]},"1351":{"position":[[2899,7]]},"1379":{"position":[[1114,7]]},"1403":{"position":[[1114,7]]},"1414":{"position":[[1114,7]]},"1431":{"position":[[2922,7]]},"1444":{"position":[[100,9]]},"1476":{"position":[[900,9]]}},"keywords":{}}],["extractor",{"_index":6724,"title":{},"content":{"1477":{"position":[[2665,10],[2880,9]]}},"keywords":{}}],["extractor"",{"_index":6714,"title":{},"content":{"1476":{"position":[[1605,16]]}},"keywords":{}}],["extrem",{"_index":538,"title":{},"content":{"20":{"position":[[590,8]]},"70":{"position":[[303,9]]},"115":{"position":[[713,9]]},"165":{"position":[[1234,9]]},"207":{"position":[[1134,9]]},"281":{"position":[[3140,9]]},"321":{"position":[[1033,9]]},"368":{"position":[[390,9]]},"755":{"position":[[390,9]]},"768":{"position":[[390,9]]},"795":{"position":[[388,9]]},"810":{"position":[[388,9]]},"826":{"position":[[388,9]]},"905":{"position":[[393,9]]},"920":{"position":[[393,9]]},"932":{"position":[[393,9]]},"948":{"position":[[393,9]]},"966":{"position":[[393,9]]}},"keywords":{}}],["ey",{"_index":4276,"title":{},"content":{"595":{"position":[[1579,3]]}},"keywords":{}}],["f",{"_index":82,"title":{},"content":{"2":{"position":[[401,2],[637,2],[678,3]]},"221":{"position":[[1395,1]]},"222":{"position":[[640,1]]},"223":{"position":[[606,1]]},"224":{"position":[[659,1]]},"236":{"position":[[1403,1]]},"1298":{"position":[[606,1]]},"1322":{"position":[[640,1]]},"1335":{"position":[[640,1]]},"1346":{"position":[[606,1]]},"1452":{"position":[[1362,2],[4313,1]]}},"keywords":{}}],["f1a5bc81",{"_index":3721,"title":{},"content":{"439":{"position":[[274,8]]}},"keywords":{}}],["f5bf",{"_index":2700,"title":{},"content":{"253":{"position":[[1384,4]]},"313":{"position":[[1384,4]]}},"keywords":{}}],["f5c0",{"_index":3090,"title":{},"content":{"316":{"position":[[368,4],[650,4],[940,4]]}},"keywords":{}}],["face",{"_index":2324,"title":{},"content":{"210":{"position":[[2277,4]]},"869":{"position":[[359,6]]}},"keywords":{}}],["facebook",{"_index":3332,"title":{"511":{"position":[[0,8]]}},"content":{"364":{"position":[[1078,8],[1143,8]]},"512":{"position":[[175,8]]},"513":{"position":[[41,8]]},"514":{"position":[[50,8]]},"515":{"position":[[61,8],[112,8],[399,8]]},"516":{"position":[[250,8]]},"517":{"position":[[141,8],[317,8],[642,8],[699,8],[3289,8],[3521,8],[4025,8]]},"518":{"position":[[159,8]]},"668":{"position":[[63,8],[104,8]]}},"keywords":{}}],["facilit",{"_index":144,"title":{},"content":{"3":{"position":[[1100,10]]},"64":{"position":[[756,10]]},"196":{"position":[[338,12]]},"233":{"position":[[345,12]]},"237":{"position":[[116,10]]},"477":{"position":[[351,10]]},"598":{"position":[[315,10]]},"974":{"position":[[34,11]]},"1439":{"position":[[456,10]]}},"keywords":{}}],["fact",{"_index":1942,"title":{},"content":{"164":{"position":[[1006,4],[1357,4]]},"180":{"position":[[833,4]]},"183":{"position":[[468,4],[1167,4],[1315,4],[1437,4],[2956,4],[3475,4],[3553,4],[3829,4],[3972,4]]},"184":{"position":[[34,4],[848,4]]},"238":{"position":[[1423,4]]},"296":{"position":[[3109,4]]},"322":{"position":[[796,5]]},"325":{"position":[[513,5]]},"1207":{"position":[[582,4]]},"1448":{"position":[[714,5],[791,6]]}},"keywords":{}}],["factor",{"_index":6044,"title":{},"content":{"1292":{"position":[[2385,6]]},"1306":{"position":[[2385,6]]},"1329":{"position":[[2385,6]]},"1452":{"position":[[3278,7]]}},"keywords":{}}],["fail",{"_index":324,"title":{},"content":{"11":{"position":[[1100,4]]},"13":{"position":[[193,5]]},"14":{"position":[[955,5]]},"56":{"position":[[830,6]]},"98":{"position":[[828,6]]},"110":{"position":[[1290,6]]},"117":{"position":[[628,4]]},"138":{"position":[[1436,6]]},"141":{"position":[[1438,6]]},"142":{"position":[[1445,6]]},"146":{"position":[[1053,7],[1121,6]]},"149":{"position":[[1047,7],[1115,6]]},"152":{"position":[[1037,7],[1105,6]]},"158":{"position":[[913,4]]},"284":{"position":[[166,7],[487,7]]},"309":{"position":[[765,4],[1333,6]]},"558":{"position":[[237,5]]},"760":{"position":[[20,7]]},"761":{"position":[[20,7]]},"762":{"position":[[20,7]]},"763":{"position":[[20,7]]},"764":{"position":[[17,5]]},"773":{"position":[[20,7]]},"774":{"position":[[20,7]]},"775":{"position":[[20,7]]},"776":{"position":[[20,7]]},"777":{"position":[[17,5]]},"800":{"position":[[20,7]]},"801":{"position":[[20,7]]},"802":{"position":[[20,7]]},"803":{"position":[[20,7]]},"804":{"position":[[17,5]]},"815":{"position":[[20,7]]},"816":{"position":[[20,7]]},"817":{"position":[[20,7]]},"818":{"position":[[20,7]]},"819":{"position":[[17,5]]},"831":{"position":[[20,7]]},"832":{"position":[[20,7]]},"833":{"position":[[20,7]]},"834":{"position":[[20,7]]},"835":{"position":[[17,5]]},"922":{"position":[[1227,7],[2645,4]]},"1155":{"position":[[561,4]]},"1243":{"position":[[468,5]]},"1370":{"position":[[1063,4]]},"1438":{"position":[[292,4],[567,6]]},"1442":{"position":[[1458,6]]},"1447":{"position":[[272,5]]},"1470":{"position":[[405,6]]}},"keywords":{}}],["failedlogin",{"_index":6046,"title":{},"content":{"1292":{"position":[[2423,11]]},"1306":{"position":[[2423,11]]},"1329":{"position":[[2423,11]]}},"keywords":{}}],["failur",{"_index":381,"title":{},"content":{"13":{"position":[[301,8]]},"55":{"position":[[744,9]]},"267":{"position":[[653,8]]},"331":{"position":[[442,8]]},"333":{"position":[[177,7]]},"750":{"position":[[354,9]]},"759":{"position":[[228,7]]},"764":{"position":[[224,7]]},"766":{"position":[[354,9]]},"772":{"position":[[239,7]]},"777":{"position":[[224,7]]},"789":{"position":[[388,9]]},"799":{"position":[[226,7]]},"804":{"position":[[222,7]]},"807":{"position":[[388,9]]},"814":{"position":[[226,7]]},"819":{"position":[[222,7]]},"823":{"position":[[388,9]]},"830":{"position":[[226,7]]},"835":{"position":[[222,7]]},"922":{"position":[[2818,8]]},"1437":{"position":[[973,7]]},"1447":{"position":[[523,8]]},"1470":{"position":[[479,8]]}},"keywords":{}}],["fair",{"_index":2896,"title":{},"content":{"281":{"position":[[2279,4]]}},"keywords":{}}],["fairli",{"_index":2436,"title":{},"content":{"218":{"position":[[1390,6]]}},"keywords":{}}],["fake",{"_index":2492,"title":{},"content":{"234":{"position":[[188,4]]},"236":{"position":[[2701,4]]},"237":{"position":[[2946,4]]}},"keywords":{}}],["faker.datatype.boolean",{"_index":2556,"title":{},"content":{"236":{"position":[[2455,27],[3240,27]]}},"keywords":{}}],["faker.datatype.numb",{"_index":2553,"title":{},"content":{"236":{"position":[[2336,26],[2393,26],[3121,26],[3178,26]]}},"keywords":{}}],["faker.internet.usernam",{"_index":2551,"title":{},"content":{"236":{"position":[[2262,28],[3047,28]]}},"keywords":{}}],["fall",{"_index":3128,"title":{},"content":{"320":{"position":[[1996,4]]},"419":{"position":[[2024,4]]},"441":{"position":[[633,4]]},"504":{"position":[[1653,4]]},"547":{"position":[[2026,4]]},"639":{"position":[[1651,4]]},"1023":{"position":[[2007,4]]},"1479":{"position":[[711,4]]}},"keywords":{}}],["fals",{"_index":818,"title":{},"content":{"55":{"position":[[437,6]]},"56":{"position":[[773,6]]},"122":{"position":[[1521,6]]},"230":{"position":[[1053,6]]},"253":{"position":[[1438,6]]},"308":{"position":[[693,6]]},"313":{"position":[[1438,6]]},"406":{"position":[[270,6]]},"417":{"position":[[547,5]]},"438":{"position":[[547,5]]},"502":{"position":[[1007,5]]},"517":{"position":[[2994,5],[3094,5]]},"545":{"position":[[547,5]]},"842":{"position":[[3624,5]]},"843":{"position":[[411,5],[435,5],[641,5]]},"867":{"position":[[487,5]]},"868":{"position":[[250,5]]},"879":{"position":[[1357,5]]},"885":{"position":[[342,5]]},"886":{"position":[[189,5]]},"991":{"position":[[755,5]]},"992":{"position":[[220,5]]},"1009":{"position":[[818,5]]},"1010":{"position":[[303,5]]},"1021":{"position":[[1518,5]]},"1125":{"position":[[717,6],[732,5]]},"1138":{"position":[[1574,5]]},"1140":{"position":[[2932,5]]},"1151":{"position":[[1518,6],[1533,5]]},"1179":{"position":[[1324,5]]},"1188":{"position":[[944,5]]},"1192":{"position":[[592,5]]},"1196":{"position":[[1085,5]]},"1209":{"position":[[223,5]]},"1253":{"position":[[603,5]]},"1275":{"position":[[505,5]]},"1286":{"position":[[2779,5]]},"1292":{"position":[[2466,5]]},"1301":{"position":[[2615,5]]},"1306":{"position":[[2466,5]]},"1313":{"position":[[1118,5]]},"1316":{"position":[[2932,5]]},"1325":{"position":[[2779,5]]},"1329":{"position":[[2466,5]]},"1337":{"position":[[1118,5]]},"1340":{"position":[[2932,5]]},"1348":{"position":[[1118,5]]},"1351":{"position":[[2932,5]]},"1376":{"position":[[694,5]]},"1379":{"position":[[1158,5]]},"1394":{"position":[[1047,5]]},"1400":{"position":[[694,5]]},"1403":{"position":[[1158,5]]},"1411":{"position":[[694,5]]},"1414":{"position":[[1158,5]]},"1427":{"position":[[878,5]]},"1431":{"position":[[2955,5]]}},"keywords":{}}],["famili",{"_index":4665,"title":{},"content":{"767":{"position":[[958,7]]},"792":{"position":[[1252,7]]},"824":{"position":[[1027,7]]},"904":{"position":[[1025,7]]},"918":{"position":[[1228,7]]}},"keywords":{}}],["familiar",{"_index":159,"title":{},"content":{"4":{"position":[[236,9]]},"107":{"position":[[108,8]]},"113":{"position":[[138,8]]},"164":{"position":[[219,8],[337,9]]},"213":{"position":[[223,8]]},"548":{"position":[[489,8]]}},"keywords":{}}],["far",{"_index":193,"title":{},"content":{"4":{"position":[[797,3]]},"163":{"position":[[426,3]]},"331":{"position":[[251,3]]},"385":{"position":[[252,4]]},"552":{"position":[[161,3],[437,3]]},"1015":{"position":[[183,3]]},"1113":{"position":[[369,3]]},"1391":{"position":[[588,3],[874,3]]},"1440":{"position":[[874,4]]}},"keywords":{}}],["fashion",{"_index":3315,"title":{},"content":{"364":{"position":[[97,8]]},"1434":{"position":[[100,7]]}},"keywords":{}}],["fast",{"_index":686,"title":{},"content":{"36":{"position":[[381,4]]},"124":{"position":[[141,4]]},"164":{"position":[[1280,4],[1571,4]]},"232":{"position":[[955,4]]},"1292":{"position":[[2501,4]]},"1306":{"position":[[2501,4]]},"1329":{"position":[[2501,4]]},"1451":{"position":[[833,4]]},"1452":{"position":[[733,4],[953,4],[1171,4],[2614,4],[3003,4],[3028,4],[3445,4],[3767,4],[3906,4],[3932,4],[4051,4],[4076,4],[4286,4],[4325,4],[4383,4],[4456,4]]}},"keywords":{}}],["faster",{"_index":190,"title":{},"content":{"4":{"position":[[747,6]]},"480":{"position":[[269,6]]},"573":{"position":[[1179,6]]},"584":{"position":[[1179,6]]},"870":{"position":[[982,6]]},"1452":{"position":[[86,6],[2680,6],[3674,6],[3982,6]]}},"keywords":{}}],["fastsyncenabledday",{"_index":6529,"title":{},"content":{"1452":{"position":[[1150,20]]}},"keywords":{}}],["fastsyncstarttim",{"_index":6525,"title":{},"content":{"1452":{"position":[[714,18]]}},"keywords":{}}],["fastsyncstoptim",{"_index":6527,"title":{},"content":{"1452":{"position":[[935,17]]}},"keywords":{}}],["fault",{"_index":775,"title":{},"content":{"48":{"position":[[205,5]]},"321":{"position":[[2295,5]]},"326":{"position":[[1933,5]]},"1292":{"position":[[2537,6]]},"1306":{"position":[[2537,6]]},"1329":{"position":[[2537,6]]}},"keywords":{}}],["feasibl",{"_index":1259,"title":{},"content":{"84":{"position":[[198,8]]},"821":{"position":[[430,9]]},"912":{"position":[[441,9]]}},"keywords":{}}],["featur",{"_index":326,"title":{"246":{"position":[[4,9]]},"1097":{"position":[[19,8]]}},"content":{"11":{"position":[[1158,7]]},"13":{"position":[[22,7]]},"82":{"position":[[3751,7]]},"122":{"position":[[2177,7]]},"141":{"position":[[124,8]]},"156":{"position":[[467,8]]},"239":{"position":[[2041,7]]},"268":{"position":[[454,8]]},"320":{"position":[[294,8],[1227,7],[2434,7],[2480,7]]},"323":{"position":[[2051,7]]},"328":{"position":[[19,8]]},"515":{"position":[[831,7]]},"517":{"position":[[302,7]]},"548":{"position":[[693,7]]},"846":{"position":[[37,7]]},"849":{"position":[[17,8],[384,9],[437,9]]},"889":{"position":[[38,7]]},"892":{"position":[[177,7]]},"946":{"position":[[34,7]]},"964":{"position":[[217,8]]},"1007":{"position":[[90,7]]},"1439":{"position":[[297,7]]}},"keywords":{}}],["featureev",{"_index":4937,"title":{},"content":{"892":{"position":[[431,13]]}},"keywords":{}}],["featureguidepagereportpageeventsfeatureeventstrackeventsguideeventspollev",{"_index":4926,"title":{},"content":{"888":{"position":[[68,77]]}},"keywords":{}}],["fed",{"_index":6704,"title":{},"content":{"1475":{"position":[[1617,3]]}},"keywords":{}}],["feed",{"_index":769,"title":{},"content":{"45":{"position":[[343,6]]},"325":{"position":[[552,4]]},"375":{"position":[[242,4]]},"377":{"position":[[1294,5],[1300,4],[1309,4]]},"378":{"position":[[178,5]]}},"keywords":{}}],["feedapplicationsappl",{"_index":4323,"title":{},"content":{"622":{"position":[[83,28]]}},"keywords":{}}],["feedback",{"_index":4396,"title":{},"content":{"649":{"position":[[618,8]]}},"keywords":{}}],["feel",{"_index":158,"title":{},"content":{"4":{"position":[[231,4]]},"104":{"position":[[236,4]]},"164":{"position":[[332,4]]},"206":{"position":[[662,4]]},"239":{"position":[[2834,4]]},"240":{"position":[[4080,4],[4584,4]]},"253":{"position":[[1016,4]]},"313":{"position":[[1016,4]]},"1118":{"position":[[992,4]]}},"keywords":{}}],["fenc",{"_index":6475,"title":{},"content":{"1437":{"position":[[767,7],[1228,7],[1530,6]]},"1438":{"position":[[86,7]]}},"keywords":{}}],["fetch",{"_index":654,"title":{"88":{"position":[[0,5]]}},"content":{"31":{"position":[[265,5]]},"88":{"position":[[16,8],[135,7],[527,7],[591,7]]},"370":{"position":[[828,7]]},"384":{"position":[[110,5]]},"387":{"position":[[819,5],[1031,8]]},"517":{"position":[[2875,5],[2919,5]]},"554":{"position":[[494,7]]},"573":{"position":[[891,5],[1190,6]]},"580":{"position":[[169,7]]},"757":{"position":[[1595,7]]},"770":{"position":[[1595,7]]},"797":{"position":[[1595,7]]},"812":{"position":[[1595,7]]},"828":{"position":[[1595,7]]},"842":{"position":[[2586,5]]},"867":{"position":[[920,7],[1079,7]]},"870":{"position":[[35,7]]},"879":{"position":[[1077,7]]},"907":{"position":[[611,7]]},"923":{"position":[[611,7]]},"934":{"position":[[611,7]]},"950":{"position":[[611,7]]},"968":{"position":[[611,7]]},"1045":{"position":[[596,7]]},"1053":{"position":[[596,7]]},"1061":{"position":[[596,7]]},"1140":{"position":[[2974,5]]},"1209":{"position":[[238,5]]},"1292":{"position":[[2573,5]]},"1306":{"position":[[2573,5]]},"1316":{"position":[[2974,5]]},"1329":{"position":[[2573,5]]},"1340":{"position":[[2974,5]]},"1351":{"position":[[2974,5]]},"1379":{"position":[[1195,5]]},"1403":{"position":[[1195,5]]},"1414":{"position":[[1195,5]]},"1431":{"position":[[2997,5]]},"1434":{"position":[[329,5]]},"1443":{"position":[[70,6]]}},"keywords":{}}],["fetch_thumbnail_imag",{"_index":3960,"title":{},"content":{"517":{"position":[[2851,23]]}},"keywords":{}}],["few",{"_index":1820,"title":{},"content":{"142":{"position":[[270,3]]},"160":{"position":[[75,3]]},"198":{"position":[[79,3]]},"237":{"position":[[3158,3]]},"238":{"position":[[1366,3]]},"240":{"position":[[4040,3]]},"241":{"position":[[122,3]]},"296":{"position":[[3799,3],[7873,3],[7977,3]]},"616":{"position":[[53,3]]},"1032":{"position":[[195,3]]},"1036":{"position":[[876,3]]},"1436":{"position":[[13,3]]}},"keywords":{}}],["fewer",{"_index":4279,"title":{},"content":{"595":{"position":[[1727,5]]},"1391":{"position":[[878,5]]}},"keywords":{}}],["fi"",{"_index":2345,"title":{},"content":{"210":{"position":[[2635,9]]}},"keywords":{}}],["field",{"_index":465,"title":{"67":{"position":[[7,6]]},"122":{"position":[[10,7]]},"226":{"position":[[23,6]]},"227":{"position":[[16,6]]},"230":{"position":[[16,6]]},"308":{"position":[[6,5]]},"310":{"position":[[2,5]]},"1006":{"position":[[8,7]]},"1200":{"position":[[8,7]]}},"content":{"16":{"position":[[471,7],[505,6],[576,6]]},"17":{"position":[[374,6],[493,6],[738,6],[868,6]]},"66":{"position":[[808,7]]},"67":{"position":[[550,5],[687,5],[964,5],[1043,5],[1196,6],[1294,5],[1384,6],[1463,5],[1827,5]]},"69":{"position":[[597,6]]},"72":{"position":[[152,6]]},"76":{"position":[[532,6],[699,5],[821,5]]},"80":{"position":[[348,6],[422,6]]},"82":{"position":[[1133,6]]},"98":{"position":[[172,5],[223,5],[237,5]]},"99":{"position":[[394,6],[773,6]]},"107":{"position":[[3141,6]]},"122":{"position":[[354,7],[431,6],[463,5],[715,5],[838,6],[1323,7],[1364,6],[1432,7],[1461,6],[1533,6],[1622,6],[1696,7],[1764,6],[1815,7],[1851,6],[1880,6],[1974,5]]},"129":{"position":[[635,6]]},"158":{"position":[[833,5]]},"159":{"position":[[270,5]]},"160":{"position":[[272,6],[464,6],[610,6]]},"162":{"position":[[785,5]]},"165":{"position":[[719,6],[798,6],[1661,6],[1722,6]]},"166":{"position":[[156,6],[186,5]]},"182":{"position":[[196,7]]},"183":{"position":[[2184,7],[3133,5]]},"190":{"position":[[937,6]]},"192":{"position":[[1263,5],[1585,5]]},"197":{"position":[[986,5],[1332,6],[1490,5]]},"207":{"position":[[1380,5],[1501,6],[1602,6]]},"217":{"position":[[741,6]]},"218":{"position":[[1974,5],[2055,7]]},"225":{"position":[[589,6]]},"227":{"position":[[5,5],[106,5]]},"228":{"position":[[357,7],[378,6],[523,5],[603,5],[648,6],[755,6],[899,7],[1049,7],[1096,7]]},"229":{"position":[[262,6],[385,6],[449,6],[583,7],[780,7]]},"230":{"position":[[19,6],[156,5],[502,6],[573,6],[626,6],[694,5],[755,7],[830,6],[916,6],[1004,7],[1018,7],[1096,6],[1171,7],[1300,6]]},"236":{"position":[[2721,7]]},"253":{"position":[[3149,6]]},"254":{"position":[[1640,6],[1810,6]]},"259":{"position":[[263,6],[1952,6]]},"290":{"position":[[566,6]]},"291":{"position":[[1091,5]]},"295":{"position":[[629,5]]},"296":{"position":[[6534,6]]},"301":{"position":[[506,6],[1232,6]]},"302":{"position":[[1076,6]]},"306":{"position":[[287,5],[334,5]]},"308":{"position":[[71,5],[186,7],[206,6],[339,7],[365,6],[389,6],[512,6],[591,6],[714,5],[807,6],[934,5],[1028,6],[1146,6]]},"309":{"position":[[233,6],[283,5],[448,5],[1034,5],[1881,5]]},"310":{"position":[[69,6]]},"313":{"position":[[3087,6],[3204,6],[3360,5]]},"314":{"position":[[1457,6]]},"315":{"position":[[2436,6]]},"332":{"position":[[533,5]]},"402":{"position":[[785,5]]},"406":{"position":[[126,5]]},"419":{"position":[[202,6],[2808,7]]},"436":{"position":[[393,6]]},"440":{"position":[[218,6]]},"441":{"position":[[1417,7]]},"472":{"position":[[635,6],[703,6],[768,6]]},"487":{"position":[[309,5]]},"488":{"position":[[233,5]]},"489":{"position":[[232,6]]},"504":{"position":[[139,6]]},"517":{"position":[[241,6],[888,7],[1708,7],[1716,6],[1740,6],[1785,8],[3338,5],[3637,5]]},"518":{"position":[[323,7]]},"529":{"position":[[814,5]]},"534":{"position":[[1624,5]]},"547":{"position":[[203,6],[2810,7]]},"548":{"position":[[1256,7],[1363,5]]},"556":{"position":[[1934,5]]},"584":{"position":[[1249,5]]},"590":{"position":[[115,6]]},"605":{"position":[[68,6]]},"611":{"position":[[924,6]]},"639":{"position":[[138,6],[2435,7]]},"659":{"position":[[390,5]]},"660":{"position":[[311,5]]},"662":{"position":[[232,6]]},"676":{"position":[[233,5]]},"677":{"position":[[232,6]]},"691":{"position":[[233,5]]},"692":{"position":[[232,6]]},"709":{"position":[[153,5],[186,5]]},"712":{"position":[[397,5]]},"779":{"position":[[112,6],[195,5]]},"846":{"position":[[284,6]]},"856":{"position":[[159,7]]},"947":{"position":[[579,7]]},"1006":{"position":[[47,7],[140,7],[205,5],[485,5]]},"1009":{"position":[[944,5],[1580,5],[1586,5],[1658,6]]},"1023":{"position":[[183,6],[2791,7]]},"1047":{"position":[[785,5]]},"1055":{"position":[[785,5]]},"1063":{"position":[[785,5]]},"1123":{"position":[[345,6],[448,6],[607,6],[767,5]]},"1133":{"position":[[1393,5],[1399,5]]},"1140":{"position":[[319,6]]},"1155":{"position":[[197,7],[416,5],[658,5]]},"1157":{"position":[[264,6],[340,7]]},"1164":{"position":[[17,6],[91,6],[170,7],[190,5],[560,6]]},"1172":{"position":[[17,6],[83,6],[107,5],[254,5]]},"1192":{"position":[[125,6]]},"1195":{"position":[[486,5]]},"1200":{"position":[[12,6],[227,5],[312,5],[362,6]]},"1201":{"position":[[375,6]]},"1209":{"position":[[94,5]]},"1222":{"position":[[17,6],[83,6],[107,5],[254,5]]},"1232":{"position":[[154,5]]},"1250":{"position":[[112,6],[195,5]]},"1275":{"position":[[119,7],[140,6],[293,6],[316,7],[387,5]]},"1276":{"position":[[28,6],[207,5],[337,6],[463,6]]},"1286":{"position":[[123,6],[1403,7]]},"1291":{"position":[[15,6],[94,6]]},"1292":{"position":[[248,6],[2615,6]]},"1301":{"position":[[123,6],[1239,7]]},"1305":{"position":[[15,6],[94,6]]},"1306":{"position":[[248,6],[2615,6]]},"1316":{"position":[[319,6]]},"1317":{"position":[[580,6],[647,6],[712,5]]},"1325":{"position":[[123,6],[1403,7]]},"1328":{"position":[[15,6],[94,6]]},"1329":{"position":[[248,6],[2615,6]]},"1340":{"position":[[319,6]]},"1341":{"position":[[580,6],[647,6],[712,5]]},"1351":{"position":[[319,6]]},"1352":{"position":[[580,6],[647,6],[712,5]]},"1356":{"position":[[570,7],[605,6],[1068,6],[1137,5],[1162,5]]},"1359":{"position":[[413,6]]},"1370":{"position":[[311,6]]},"1379":{"position":[[256,6]]},"1394":{"position":[[124,6]]},"1403":{"position":[[256,6]]},"1414":{"position":[[256,6]]},"1423":{"position":[[131,6]]},"1429":{"position":[[254,5],[443,5],[712,5]]},"1431":{"position":[[342,6]]},"1432":{"position":[[580,6],[661,6],[726,5]]},"1444":{"position":[[110,6]]},"1448":{"position":[[62,6],[281,6]]},"1470":{"position":[[881,6]]},"1479":{"position":[[343,6],[420,5],[534,6],[608,6]]},"1480":{"position":[[21,6]]}},"keywords":{}}],["field":"value"",{"_index":1405,"title":{},"content":{"98":{"position":[[319,31]]}},"keywords":{}}],["field'",{"_index":1967,"title":{"309":{"position":[[2,7]]}},"content":{"166":{"position":[[291,7]]},"306":{"position":[[303,7]]},"309":{"position":[[67,7]]}},"keywords":{}}],["field(",{"_index":4408,"title":{},"content":{"661":{"position":[[343,8]]}},"keywords":{}}],["field.click",{"_index":3825,"title":{},"content":{"479":{"position":[[394,11]]}},"keywords":{}}],["field_nam",{"_index":6268,"title":{},"content":{"1356":{"position":[[1125,11]]}},"keywords":{}}],["fields.includ",{"_index":3057,"title":{},"content":{"308":{"position":[[943,14]]}},"keywords":{}}],["fields.us",{"_index":3056,"title":{},"content":{"308":{"position":[[904,12]]}},"keywords":{}}],["fieldsdegreesdepartmentsdisciplineseeocemail",{"_index":4326,"title":{},"content":{"622":{"position":[[161,44]]}},"keywords":{}}],["fieldsissu",{"_index":4467,"title":{},"content":{"709":{"position":[[141,11]]}},"keywords":{}}],["fieldsscreen",{"_index":4489,"title":{},"content":{"709":{"position":[[627,12]]}},"keywords":{}}],["fieldsticket",{"_index":5456,"title":{},"content":{"1128":{"position":[[329,12]]}},"keywords":{}}],["fieldsticketstim",{"_index":3920,"title":{},"content":{"506":{"position":[[388,17]]}},"keywords":{}}],["file",{"_index":24,"title":{"3":{"position":[[9,6]]},"24":{"position":[[19,6]]},"275":{"position":[[12,5]]},"504":{"position":[[26,6]]},"633":{"position":[[5,4]]},"1020":{"position":[[0,4]]},"1023":{"position":[[23,6]]},"1141":{"position":[[4,5]]},"1146":{"position":[[0,4]]},"1167":{"position":[[15,5]]},"1173":{"position":[[0,4]]},"1210":{"position":[[4,5]]},"1215":{"position":[[0,4]]},"1217":{"position":[[15,5]]},"1223":{"position":[[0,4]]}},"content":{"1":{"position":[[306,6],[750,5],[979,6]]},"3":{"position":[[18,5],[95,4],[167,5],[353,4],[413,4],[1087,4]]},"4":{"position":[[36,5],[261,5],[681,5]]},"16":{"position":[[743,5],[1008,5]]},"24":{"position":[[83,5],[177,5],[289,6]]},"25":{"position":[[51,5]]},"26":{"position":[[74,5],[230,5],[271,4],[305,5]]},"31":{"position":[[279,5]]},"33":{"position":[[209,5]]},"56":{"position":[[44,5],[1186,4],[1602,5]]},"58":{"position":[[796,5]]},"61":{"position":[[57,5],[817,6],[927,5]]},"62":{"position":[[143,5],[277,4],[461,5],[551,6],[644,6],[689,4]]},"63":{"position":[[31,5],[201,4],[248,5],[414,6],[666,5],[728,5],[956,6]]},"64":{"position":[[12,5],[428,5]]},"66":{"position":[[60,5]]},"69":{"position":[[47,5]]},"70":{"position":[[503,5]]},"77":{"position":[[128,5],[217,5]]},"81":{"position":[[976,6],[2403,6],[2494,6],[2519,4],[2781,5]]},"82":{"position":[[1892,5],[4216,5]]},"87":{"position":[[154,5],[241,4]]},"89":{"position":[[77,6]]},"90":{"position":[[339,5]]},"91":{"position":[[347,5]]},"92":{"position":[[23,4]]},"94":{"position":[[485,4],[520,4],[901,4],[935,4],[2556,4]]},"97":{"position":[[145,4],[165,4]]},"100":{"position":[[326,4]]},"103":{"position":[[98,4],[641,5],[682,4]]},"120":{"position":[[52,5],[545,4]]},"149":{"position":[[1225,5]]},"161":{"position":[[138,5],[1092,6],[1132,5],[1226,5]]},"169":{"position":[[1196,5]]},"183":{"position":[[844,6],[970,5],[1093,5],[2910,4],[2939,4],[3431,5]]},"189":{"position":[[289,5]]},"190":{"position":[[529,4],[1184,4],[1263,5]]},"193":{"position":[[68,5]]},"221":{"position":[[338,5],[1032,4],[1166,5],[1183,4],[1262,4]]},"222":{"position":[[277,4],[411,5],[428,4],[507,4]]},"223":{"position":[[243,4],[377,5],[394,4],[473,4]]},"224":{"position":[[296,4],[430,5],[447,4],[526,4]]},"225":{"position":[[466,4]]},"236":{"position":[[292,4],[348,4],[1877,4],[1908,4],[1957,4],[2065,5],[2759,5],[3698,5]]},"254":{"position":[[168,5],[197,5],[1285,5],[2123,4]]},"260":{"position":[[98,5]]},"263":{"position":[[790,5],[864,6],[883,5],[1017,4],[1067,6]]},"264":{"position":[[96,5],[434,4]]},"266":{"position":[[463,5]]},"267":{"position":[[1234,6],[1360,4],[1512,5],[1522,4],[1675,5]]},"268":{"position":[[163,6],[180,5],[409,5],[711,4],[1433,5],[1732,4]]},"269":{"position":[[166,4],[336,4],[1008,5]]},"270":{"position":[[817,5],[989,4],[1141,5],[1151,4],[1272,5],[1638,5],[1721,5],[1776,4]]},"274":{"position":[[1570,5],[1642,6],[1798,5],[1862,4],[1919,6]]},"275":{"position":[[118,5],[468,4],[786,5],[882,5]]},"281":{"position":[[719,6],[763,4]]},"285":{"position":[[276,5]]},"296":{"position":[[168,5],[197,5],[2548,5],[3022,4],[3807,5],[4063,5],[4122,4],[4211,4],[5150,5]]},"301":{"position":[[1163,5]]},"307":{"position":[[865,5]]},"314":{"position":[[168,5],[197,5],[1140,5],[1212,4],[1391,5],[2450,4],[2535,4]]},"315":{"position":[[241,5],[542,5],[601,4],[690,4],[1070,5],[1234,5]]},"322":{"position":[[1043,5]]},"350":{"position":[[103,5]]},"358":{"position":[[103,5]]},"363":{"position":[[1335,4]]},"369":{"position":[[103,5]]},"376":{"position":[[103,5]]},"386":{"position":[[103,5]]},"391":{"position":[[103,5]]},"396":{"position":[[103,5]]},"401":{"position":[[127,5]]},"407":{"position":[[103,5]]},"416":{"position":[[103,5]]},"417":{"position":[[222,5],[1351,6],[1409,5],[1763,4]]},"419":{"position":[[64,4],[125,4],[1132,4],[1164,4],[1360,4],[1396,5],[2268,5],[2408,4],[2515,5]]},"423":{"position":[[103,5]]},"431":{"position":[[103,5]]},"437":{"position":[[103,5]]},"438":{"position":[[222,5],[1867,6]]},"440":{"position":[[80,4],[141,4],[1148,4],[1180,4],[1376,4]]},"441":{"position":[[5,5],[877,5],[1017,4],[1124,5]]},"447":{"position":[[103,5]]},"453":{"position":[[103,5]]},"459":{"position":[[103,5]]},"465":{"position":[[103,5]]},"472":{"position":[[103,5]]},"478":{"position":[[595,5]]},"481":{"position":[[103,5]]},"482":{"position":[[334,4]]},"495":{"position":[[103,5]]},"499":{"position":[[130,4],[300,4],[376,4]]},"500":{"position":[[168,5]]},"502":{"position":[[377,6],[682,5],[1057,5],[1411,4]]},"504":{"position":[[42,4],[63,4],[863,4],[927,4],[1025,5],[1897,5],[2037,4],[2144,5]]},"508":{"position":[[103,5]]},"516":{"position":[[103,5]]},"525":{"position":[[103,5]]},"533":{"position":[[103,5]]},"539":{"position":[[103,5]]},"543":{"position":[[397,4]]},"544":{"position":[[103,5]]},"545":{"position":[[222,5],[975,6],[1033,5],[1365,4]]},"547":{"position":[[65,4],[126,4],[1134,4],[1166,4],[1362,4],[1398,5],[2270,5],[2410,4],[2517,5]]},"548":{"position":[[1305,4]]},"555":{"position":[[100,5]]},"562":{"position":[[235,5]]},"563":{"position":[[119,4]]},"564":{"position":[[90,4],[151,4]]},"565":{"position":[[58,4],[104,5],[149,4]]},"571":{"position":[[717,4]]},"572":{"position":[[103,5]]},"573":{"position":[[538,4]]},"582":{"position":[[330,4]]},"583":{"position":[[93,5]]},"584":{"position":[[469,4]]},"592":{"position":[[100,5]]},"599":{"position":[[595,5]]},"600":{"position":[[103,5]]},"609":{"position":[[274,4]]},"610":{"position":[[103,5]]},"617":{"position":[[641,4]]},"618":{"position":[[103,5]]},"619":{"position":[[443,4]]},"624":{"position":[[103,5]]},"630":{"position":[[103,5]]},"634":{"position":[[122,4],[292,4],[368,4]]},"636":{"position":[[103,5],[255,4]]},"637":{"position":[[435,5],[593,5],[925,4],[1053,4],[1106,5]]},"639":{"position":[[41,4],[62,4],[861,4],[925,4],[1023,5],[1895,5],[2035,4],[2142,5]]},"646":{"position":[[103,5]]},"653":{"position":[[103,5]]},"669":{"position":[[103,5]]},"684":{"position":[[103,5]]},"699":{"position":[[103,5]]},"705":{"position":[[103,5]]},"711":{"position":[[103,5]]},"727":{"position":[[103,5]]},"734":{"position":[[103,5]]},"740":{"position":[[103,5]]},"746":{"position":[[103,5]]},"752":{"position":[[167,4]]},"756":{"position":[[103,5]]},"769":{"position":[[103,5]]},"781":{"position":[[100,5]]},"791":{"position":[[120,4]]},"796":{"position":[[103,5]]},"811":{"position":[[103,5]]},"827":{"position":[[103,5]]},"841":{"position":[[103,5]]},"850":{"position":[[103,5]]},"858":{"position":[[103,5]]},"866":{"position":[[103,5]]},"869":{"position":[[24,5],[250,5],[1032,5],[1395,6]]},"878":{"position":[[103,5]]},"879":{"position":[[799,4],[873,4]]},"884":{"position":[[103,5]]},"890":{"position":[[103,6]]},"896":{"position":[[103,5]]},"906":{"position":[[103,5]]},"921":{"position":[[103,5]]},"922":{"position":[[995,5]]},"933":{"position":[[103,5]]},"949":{"position":[[103,5]]},"958":{"position":[[103,5]]},"967":{"position":[[103,5]]},"981":{"position":[[103,5]]},"990":{"position":[[103,5]]},"996":{"position":[[103,5]]},"1005":{"position":[[100,5]]},"1008":{"position":[[1457,5]]},"1012":{"position":[[220,5]]},"1014":{"position":[[103,5]]},"1019":{"position":[[62,5],[112,5],[191,5],[228,6]]},"1020":{"position":[[64,5],[112,5],[199,5],[266,5],[364,4],[524,4],[597,5],[637,4],[790,5],[830,5],[916,5],[970,5],[1054,4],[1244,5],[1466,5],[1520,4],[1622,4],[1714,4],[1849,4],[1892,5],[1939,4],[2050,5]]},"1021":{"position":[[103,5],[735,5],[751,5],[850,5],[884,4],[931,5],[1068,6],[1248,5],[1309,5],[1373,5],[1568,5],[1922,4]]},"1023":{"position":[[45,4],[106,4],[1115,4],[1147,4],[1343,4],[1379,5],[2251,5],[2391,4],[2498,5]]},"1027":{"position":[[103,5]]},"1033":{"position":[[107,5]]},"1044":{"position":[[103,5]]},"1052":{"position":[[103,5]]},"1060":{"position":[[103,5]]},"1069":{"position":[[103,5]]},"1075":{"position":[[103,5]]},"1084":{"position":[[103,5]]},"1093":{"position":[[103,5]]},"1100":{"position":[[103,5]]},"1106":{"position":[[103,6]]},"1112":{"position":[[103,5]]},"1120":{"position":[[435,5],[530,5],[643,5],[723,5]]},"1124":{"position":[[103,5]]},"1132":{"position":[[103,6]]},"1142":{"position":[[60,5]]},"1144":{"position":[[449,5],[572,4],[629,5],[1219,6]]},"1146":{"position":[[14,5],[157,5],[648,4]]},"1147":{"position":[[46,5],[73,5],[229,5],[379,5]]},"1149":{"position":[[431,6]]},"1160":{"position":[[60,5]]},"1162":{"position":[[305,5],[638,5]]},"1165":{"position":[[297,4]]},"1168":{"position":[[60,5]]},"1170":{"position":[[449,5],[572,4],[629,5]]},"1172":{"position":[[47,5]]},"1173":{"position":[[14,5],[157,5],[660,4]]},"1174":{"position":[[46,5],[73,5],[229,5],[379,5]]},"1176":{"position":[[170,4]]},"1204":{"position":[[543,5]]},"1206":{"position":[[631,5],[722,5]]},"1211":{"position":[[60,5],[234,4]]},"1213":{"position":[[304,5],[427,4],[484,5],[896,6]]},"1215":{"position":[[14,5],[157,5],[648,4]]},"1216":{"position":[[46,5],[73,5],[229,5],[379,5]]},"1218":{"position":[[60,5],[234,4]]},"1220":{"position":[[304,5],[427,4],[484,5]]},"1222":{"position":[[47,5]]},"1223":{"position":[[14,5],[157,5],[660,4]]},"1224":{"position":[[46,5],[73,5],[229,5],[379,5]]},"1245":{"position":[[593,4]]},"1252":{"position":[[100,5]]},"1258":{"position":[[112,6]]},"1292":{"position":[[2658,4]]},"1298":{"position":[[243,4],[377,5],[394,4],[473,4]]},"1306":{"position":[[2658,4]]},"1322":{"position":[[277,4],[411,5],[428,4],[507,4]]},"1329":{"position":[[2658,4]]},"1335":{"position":[[277,4],[411,5],[428,4],[507,4]]},"1346":{"position":[[243,4],[377,5],[394,4],[473,4]]},"1379":{"position":[[1248,4]]},"1403":{"position":[[1248,4]]},"1414":{"position":[[1248,4]]},"1439":{"position":[[684,5],[751,4],[845,4],[881,4]]},"1461":{"position":[[137,4],[173,6],[386,5],[898,6],[3330,4],[5083,5]]},"1480":{"position":[[69,4],[479,4]]}},"keywords":{}}],["file:dev",{"_index":3301,"title":{},"content":{"363":{"position":[[1391,8]]},"503":{"position":[[94,8]]},"638":{"position":[[94,8]]}},"keywords":{}}],["file_block_si",{"_index":6055,"title":{},"content":{"1292":{"position":[[2697,13]]},"1306":{"position":[[2697,13]]},"1329":{"position":[[2697,13]]}},"keywords":{}}],["file_id",{"_index":4138,"title":{},"content":{"566":{"position":[[180,8]]}},"keywords":{}}],["filenam",{"_index":6486,"title":{},"content":{"1439":{"position":[[527,8]]}},"keywords":{}}],["files.thes",{"_index":595,"title":{},"content":{"24":{"position":[[66,11]]}},"keywords":{}}],["filesizelimit",{"_index":5719,"title":{},"content":{"1144":{"position":[[557,14]]},"1170":{"position":[[557,14]]},"1213":{"position":[[412,14]]},"1220":{"position":[[412,14]]}},"keywords":{}}],["fill",{"_index":1110,"title":{},"content":{"80":{"position":[[410,4]]},"121":{"position":[[409,5]]},"139":{"position":[[148,6]]},"143":{"position":[[172,6]]},"144":{"position":[[489,4]]},"157":{"position":[[409,4]]},"184":{"position":[[350,4]]},"190":{"position":[[806,4]]},"192":{"position":[[444,4]]},"217":{"position":[[907,4]]},"218":{"position":[[454,4]]},"225":{"position":[[560,7]]},"232":{"position":[[428,6]]},"240":{"position":[[2572,7]]},"281":{"position":[[752,4],[1120,4]]},"290":{"position":[[720,4]]},"291":{"position":[[382,4]]},"301":{"position":[[653,4]]},"302":{"position":[[382,4]]},"370":{"position":[[74,4]]},"436":{"position":[[371,4],[614,4]]},"574":{"position":[[177,4]]},"585":{"position":[[167,4]]},"856":{"position":[[138,4]]},"909":{"position":[[873,4]]},"922":{"position":[[1569,4],[2210,7]]},"925":{"position":[[873,4]]},"936":{"position":[[873,4]]},"952":{"position":[[873,4]]},"970":{"position":[[873,4]]},"1042":{"position":[[1220,4]]},"1138":{"position":[[74,4]]},"1408":{"position":[[493,4]]}},"keywords":{}}],["fillfactor",{"_index":6307,"title":{},"content":{"1379":{"position":[[1297,10]]},"1403":{"position":[[1297,10]]},"1414":{"position":[[1297,10]]}},"keywords":{}}],["filter",{"_index":717,"title":{"277":{"position":[[0,9]]}},"content":{"40":{"position":[[216,6]]},"61":{"position":[[574,6]]},"94":{"position":[[1674,9],[1710,7],[2023,9],[2076,7]]},"107":{"position":[[2521,9]]},"120":{"position":[[1226,9],[1262,7],[1575,9],[1628,7]]},"138":{"position":[[621,6],[1067,9]]},"141":{"position":[[744,6]]},"142":{"position":[[552,6],[1046,9]]},"154":{"position":[[1055,6]]},"183":{"position":[[3260,7]]},"254":{"position":[[3913,6]]},"256":{"position":[[79,6]]},"264":{"position":[[726,9]]},"274":{"position":[[990,6],[1471,7]]},"277":{"position":[[411,6]]},"296":{"position":[[5801,6]]},"301":{"position":[[989,7],[1094,6]]},"312":{"position":[[133,7]]},"313":{"position":[[3514,6]]},"314":{"position":[[287,8],[670,8]]},"315":{"position":[[435,8],[814,8],[1002,8],[1416,8],[1512,8],[1805,6]]},"316":{"position":[[229,8]]},"317":{"position":[[86,6]]},"349":{"position":[[398,6]]},"351":{"position":[[214,6],[237,7]]},"417":{"position":[[1153,6]]},"438":{"position":[[1669,6]]},"502":{"position":[[191,6]]},"545":{"position":[[762,6]]},"585":{"position":[[459,7]]},"1000":{"position":[[787,6],[849,7]]},"1009":{"position":[[1012,6],[1049,6],[1476,6]]},"1021":{"position":[[862,6]]},"1140":{"position":[[3012,6]]},"1292":{"position":[[2736,6]]},"1306":{"position":[[2736,6]]},"1316":{"position":[[3012,6]]},"1329":{"position":[[2736,6]]},"1340":{"position":[[3012,6]]},"1351":{"position":[[3012,6]]},"1370":{"position":[[1074,6]]},"1379":{"position":[[1354,6]]},"1403":{"position":[[1354,6]]},"1414":{"position":[[1354,6]]},"1431":{"position":[[3035,6]]},"1480":{"position":[[932,9],[968,7],[1281,9],[1334,7]]}},"keywords":{}}],["filter_values_typescript",{"_index":3072,"title":{},"content":{"314":{"position":[[465,24],[2320,24]]}},"keywords":{}}],["filtered.schema.yaml",{"_index":3070,"title":{},"content":{"314":{"position":[[329,20],[1347,20]]},"315":{"position":[[475,20]]}},"keywords":{}}],["filtered.t",{"_index":3071,"title":{},"content":{"314":{"position":[[433,11],[2288,11]]},"315":{"position":[[513,11],[1253,12]]}},"keywords":{}}],["filtertransf",{"_index":2831,"title":{},"content":{"277":{"position":[[673,15]]}},"keywords":{}}],["filtervaluestypescript(_read",{"_index":3080,"title":{},"content":{"315":{"position":[[1579,29],[1874,29]]}},"keywords":{}}],["final",{"_index":1623,"title":{},"content":{"115":{"position":[[437,6]]},"183":{"position":[[3248,8]]},"206":{"position":[[996,5]]},"209":{"position":[[4,8]]},"232":{"position":[[584,8]]},"236":{"position":[[2730,8]]},"250":{"position":[[1086,8]]},"254":{"position":[[2516,5]]},"296":{"position":[[7068,6]]},"314":{"position":[[1011,5],[2147,5]]},"319":{"position":[[1278,8]]},"321":{"position":[[434,8]]},"864":{"position":[[923,7]]},"867":{"position":[[466,5]]},"876":{"position":[[788,7]]},"989":{"position":[[1260,5]]},"1004":{"position":[[1343,5]]},"1118":{"position":[[933,8]]},"1443":{"position":[[695,8]]},"1459":{"position":[[1059,5]]}},"keywords":{}}],["finalize<br/>a",{"_index":6447,"title":{},"content":{"1434":{"position":[[1040,20]]}},"keywords":{}}],["find",{"_index":644,"title":{"278":{"position":[[0,7]]}},"content":{"30":{"position":[[107,4]]},"32":{"position":[[25,4]]},"39":{"position":[[25,4]]},"58":{"position":[[780,4]]},"82":{"position":[[3145,5]]},"138":{"position":[[1056,4]]},"142":{"position":[[1035,4]]},"150":{"position":[[153,4]]},"162":{"position":[[1919,4]]},"173":{"position":[[344,4],[434,4],[520,4]]},"177":{"position":[[121,4]]},"183":{"position":[[1066,4]]},"184":{"position":[[202,4],[571,7]]},"190":{"position":[[207,4]]},"192":{"position":[[166,4],[2368,4]]},"204":{"position":[[567,4]]},"212":{"position":[[285,4]]},"213":{"position":[[41,4]]},"215":{"position":[[121,4]]},"218":{"position":[[103,4],[1125,4]]},"222":{"position":[[155,7],[917,4]]},"223":{"position":[[121,7]]},"224":{"position":[[174,7]]},"243":{"position":[[279,4]]},"263":{"position":[[378,4],[1087,4]]},"267":{"position":[[1341,4],[1485,4],[1638,4]]},"270":{"position":[[143,4],[970,4],[1114,4]]},"290":{"position":[[334,4]]},"299":{"position":[[473,7]]},"301":{"position":[[287,4]]},"308":{"position":[[862,4]]},"309":{"position":[[1231,4]]},"341":{"position":[[544,4]]},"347":{"position":[[174,4]]},"368":{"position":[[333,4]]},"390":{"position":[[642,7]]},"395":{"position":[[821,7]]},"415":{"position":[[353,7]]},"460":{"position":[[436,4],[462,4]]},"486":{"position":[[371,4]]},"515":{"position":[[389,4]]},"548":{"position":[[132,4]]},"552":{"position":[[88,4],[364,4]]},"556":{"position":[[1545,4]]},"570":{"position":[[56,4]]},"571":{"position":[[56,4]]},"658":{"position":[[371,4]]},"674":{"position":[[371,4]]},"689":{"position":[[371,4]]},"755":{"position":[[333,4]]},"757":{"position":[[2325,5]]},"768":{"position":[[333,4]]},"770":{"position":[[2325,5]]},"795":{"position":[[331,4]]},"797":{"position":[[2332,5]]},"810":{"position":[[331,4]]},"812":{"position":[[2332,5]]},"826":{"position":[[331,4]]},"828":{"position":[[2332,5]]},"840":{"position":[[136,4],[1659,4],[1787,4]]},"849":{"position":[[52,4],[2157,4],[2700,4],[2828,4]]},"905":{"position":[[336,4]]},"919":{"position":[[2450,4]]},"920":{"position":[[336,4]]},"932":{"position":[[336,4]]},"947":{"position":[[290,4]]},"948":{"position":[[336,4]]},"966":{"position":[[336,4]]},"1008":{"position":[[1433,4]]},"1020":{"position":[[356,5]]},"1043":{"position":[[1814,4]]},"1076":{"position":[[128,4],[280,4]]},"1122":{"position":[[447,7]]},"1142":{"position":[[298,7]]},"1149":{"position":[[745,7]]},"1160":{"position":[[461,7]]},"1168":{"position":[[298,7]]},"1186":{"position":[[201,4]]},"1192":{"position":[[177,4]]},"1258":{"position":[[339,7]]},"1289":{"position":[[1393,4]]},"1298":{"position":[[121,7],[1225,4]]},"1303":{"position":[[1104,4]]},"1310":{"position":[[714,4]]},"1322":{"position":[[155,7],[917,4],[1612,4]]},"1335":{"position":[[155,7],[917,4],[1260,4]]},"1346":{"position":[[121,7],[1226,4]]},"1356":{"position":[[366,4]]},"1394":{"position":[[176,4]]},"1409":{"position":[[1087,4]]},"1423":{"position":[[183,4]]},"1447":{"position":[[194,7]]},"1479":{"position":[[315,4]]}},"keywords":{}}],["fine",{"_index":1581,"title":{},"content":{"110":{"position":[[1413,4]]},"122":{"position":[[760,4]]},"234":{"position":[[598,5]]},"240":{"position":[[4185,4]]},"260":{"position":[[10,4]]},"661":{"position":[[81,5]]},"1036":{"position":[[1089,4]]}},"keywords":{}}],["fingerprint",{"_index":6378,"title":{},"content":{"1384":{"position":[[720,11]]}},"keywords":{}}],["finish",{"_index":861,"title":{},"content":{"56":{"position":[[2522,8]]},"173":{"position":[[1190,6]]},"174":{"position":[[92,8]]},"204":{"position":[[169,8]]},"206":{"position":[[125,9]]},"285":{"position":[[413,6]]},"297":{"position":[[95,9]]},"1292":{"position":[[2791,6]]},"1306":{"position":[[2791,6]]},"1329":{"position":[[2791,6]]}},"keywords":{}}],["fire",{"_index":2189,"title":{},"content":{"197":{"position":[[928,5],[1182,5]]}},"keywords":{}}],["firebas",{"_index":2921,"title":{},"content":{"288":{"position":[[310,8]]},"290":{"position":[[924,8]]}},"keywords":{}}],["firebolt",{"_index":5422,"title":{"1202":{"position":[[0,8]]}},"content":{"1120":{"position":[[957,8]]},"1203":{"position":[[40,8],[487,8]]},"1204":{"position":[[81,8]]},"1205":{"position":[[113,8],[183,8]]},"1206":{"position":[[316,8],[392,8],[534,8],[776,8],[896,8],[1072,8],[1129,8]]},"1207":{"position":[[268,8]]},"1208":{"position":[[1,8],[96,8],[152,8],[291,8]]},"1209":{"position":[[1,8],[177,8]]}},"keywords":{}}],["firebolt:dev",{"_index":5423,"title":{},"content":{"1120":{"position":[[1017,12]]},"1207":{"position":[[391,12]]}},"keywords":{}}],["firehos",{"_index":3181,"title":{},"content":{"329":{"position":[[460,8]]}},"keywords":{}}],["firestor",{"_index":2920,"title":{"287":{"position":[[13,9]]},"290":{"position":[[13,10]]},"589":{"position":[[7,9]]}},"content":{"288":{"position":[[199,9],[379,9]]},"289":{"position":[[163,9],[397,9],[617,9]]},"290":{"position":[[50,9],[116,9],[350,9],[435,9],[757,10],[1183,10],[1218,9],[1754,9]]},"291":{"position":[[1315,9],[1389,9]]},"292":{"position":[[97,9]]},"363":{"position":[[1075,9]]},"590":{"position":[[1,9],[705,9]]},"591":{"position":[[66,9]]},"592":{"position":[[247,9]]},"594":{"position":[[916,9]]},"595":{"position":[[175,9],[480,9],[920,9],[970,9],[1156,9],[1512,10]]},"1252":{"position":[[247,9]]}},"keywords":{}}],["firestore:dev",{"_index":3298,"title":{},"content":{"363":{"position":[[1131,13]]},"594":{"position":[[89,13]]}},"keywords":{}}],["firestoresever",{"_index":2924,"title":{},"content":{"289":{"position":[[345,16]]}},"keywords":{}}],["firewal",{"_index":2461,"title":{},"content":{"221":{"position":[[2011,8]]},"753":{"position":[[202,8]]},"793":{"position":[[195,8]]},"919":{"position":[[195,8]]},"1042":{"position":[[1460,8]]},"1043":{"position":[[195,8]]},"1283":{"position":[[231,8]]},"1311":{"position":[[67,8]]},"1408":{"position":[[733,8]]},"1409":{"position":[[195,8]]}},"keywords":{}}],["first",{"_index":87,"title":{"187":{"position":[[12,5]]}},"content":{"2":{"position":[[470,5]]},"19":{"position":[[16,5]]},"30":{"position":[[262,5]]},"53":{"position":[[28,5]]},"105":{"position":[[164,5]]},"121":{"position":[[366,5]]},"133":{"position":[[281,5],[609,5]]},"140":{"position":[[80,5]]},"165":{"position":[[1775,5]]},"176":{"position":[[65,5],[115,5]]},"180":{"position":[[784,6]]},"182":{"position":[[638,6]]},"183":{"position":[[1477,5]]},"190":{"position":[[373,6]]},"196":{"position":[[777,6]]},"197":{"position":[[1254,6]]},"206":{"position":[[6,5]]},"217":{"position":[[8,5]]},"219":{"position":[[31,5]]},"232":{"position":[[347,6]]},"233":{"position":[[962,6]]},"236":{"position":[[126,6]]},"254":{"position":[[1013,5],[1781,6]]},"256":{"position":[[45,5]]},"267":{"position":[[1788,5]]},"268":{"position":[[218,5]]},"278":{"position":[[149,5],[831,5]]},"280":{"position":[[390,5]]},"281":{"position":[[592,5]]},"290":{"position":[[8,5]]},"301":{"position":[[8,5]]},"314":{"position":[[734,5],[1598,6]]},"317":{"position":[[45,5]]},"324":{"position":[[728,6]]},"329":{"position":[[219,5]]},"338":{"position":[[10,5]]},"368":{"position":[[68,5]]},"419":{"position":[[2247,5],[2386,5]]},"441":{"position":[[856,5],[995,5]]},"504":{"position":[[1876,5],[2015,5]]},"547":{"position":[[2249,5],[2388,5]]},"595":{"position":[[345,5]]},"616":{"position":[[110,5],[184,5]]},"639":{"position":[[1874,5],[2013,5]]},"755":{"position":[[68,5]]},"768":{"position":[[68,5]]},"795":{"position":[[66,5]]},"810":{"position":[[66,5]]},"826":{"position":[[66,5]]},"905":{"position":[[71,5]]},"920":{"position":[[71,5]]},"932":{"position":[[71,5]]},"948":{"position":[[71,5]]},"966":{"position":[[71,5]]},"1023":{"position":[[2230,5],[2369,5]]},"1032":{"position":[[189,5]]},"1140":{"position":[[3044,5]]},"1186":{"position":[[13,5]]},"1209":{"position":[[254,5]]},"1243":{"position":[[559,5]]},"1292":{"position":[[2826,5]]},"1293":{"position":[[318,5]]},"1306":{"position":[[2826,5]]},"1307":{"position":[[318,5]]},"1316":{"position":[[3044,5]]},"1329":{"position":[[2826,5]]},"1330":{"position":[[318,5]]},"1340":{"position":[[3044,5]]},"1351":{"position":[[3044,5]]},"1370":{"position":[[1086,5]]},"1379":{"position":[[1410,5]]},"1380":{"position":[[318,5]]},"1383":{"position":[[131,5]]},"1384":{"position":[[204,5]]},"1403":{"position":[[1410,5]]},"1404":{"position":[[318,5]]},"1414":{"position":[[1410,5]]},"1415":{"position":[[318,5]]},"1431":{"position":[[3067,5]]},"1435":{"position":[[671,5]]},"1442":{"position":[[45,5],[103,5],[1296,5]]},"1453":{"position":[[718,5]]},"1463":{"position":[[65,5],[528,5]]}},"keywords":{}}],["first_nam",{"_index":3605,"title":{},"content":{"418":{"position":[[268,11]]},"439":{"position":[[525,11]]},"546":{"position":[[1005,11]]},"638":{"position":[[297,11]]},"1022":{"position":[[334,11]]}},"keywords":{}}],["first_valu",{"_index":5652,"title":{},"content":{"1140":{"position":[[3081,11]]},"1292":{"position":[[2884,11]]},"1306":{"position":[[2884,11]]},"1316":{"position":[[3081,11]]},"1329":{"position":[[2884,11]]},"1340":{"position":[[3081,11]]},"1351":{"position":[[3081,11]]},"1431":{"position":[[3104,11]]}},"keywords":{}}],["firstwritewin",{"_index":6638,"title":{"1463":{"position":[[0,14]]}},"content":{"1463":{"position":[[0,14],[33,14],[403,14]]},"1465":{"position":[[994,14]]},"1467":{"position":[[2287,14]]}},"keywords":{}}],["fit",{"_index":1572,"title":{},"content":{"110":{"position":[[541,3]]},"183":{"position":[[2865,3]]},"870":{"position":[[345,3]]}},"keywords":{}}],["five",{"_index":859,"title":{},"content":{"56":{"position":[[2473,4],[2648,4]]},"605":{"position":[[169,4]]},"1456":{"position":[[257,4]]}},"keywords":{}}],["fivetran",{"_index":3155,"title":{"323":{"position":[[0,9]]}},"content":{"323":{"position":[[12,8],[1706,8],[2042,8]]}},"keywords":{}}],["fix",{"_index":736,"title":{},"content":{"41":{"position":[[651,3]]},"160":{"position":[[847,3]]},"183":{"position":[[1680,3]]},"280":{"position":[[261,3]]},"291":{"position":[[710,3]]},"302":{"position":[[710,3]]},"332":{"position":[[413,3]]},"419":{"position":[[465,3]]},"440":{"position":[[481,3]]},"504":{"position":[[409,3]]},"547":{"position":[[466,3]]},"639":{"position":[[407,3]]},"759":{"position":[[278,3]]},"761":{"position":[[310,6]]},"762":{"position":[[429,3]]},"764":{"position":[[837,5]]},"772":{"position":[[289,3]]},"774":{"position":[[310,6]]},"775":{"position":[[429,3]]},"777":{"position":[[837,5]]},"799":{"position":[[276,3]]},"801":{"position":[[316,6]]},"802":{"position":[[429,3]]},"804":{"position":[[835,5]]},"814":{"position":[[276,3]]},"816":{"position":[[316,6]]},"817":{"position":[[429,3]]},"819":{"position":[[835,5]]},"830":{"position":[[276,3]]},"832":{"position":[[316,6]]},"833":{"position":[[429,3]]},"835":{"position":[[835,5]]},"1023":{"position":[[446,3]]},"1292":{"position":[[2928,5]]},"1306":{"position":[[2928,5]]},"1329":{"position":[[2928,5]]},"1447":{"position":[[57,3]]},"1452":{"position":[[49,5],[2272,5]]}},"keywords":{}}],["fixed_len_byte_array",{"_index":5782,"title":{},"content":{"1172":{"position":[[784,20],[867,20]]},"1222":{"position":[[784,20],[867,20]]}},"keywords":{}}],["fixtur",{"_index":621,"title":{"133":{"position":[[15,9]]}},"content":{"26":{"position":[[675,9]]},"43":{"position":[[298,8]]},"129":{"position":[[91,9]]}},"keywords":{}}],["flag",{"_index":912,"title":{},"content":{"60":{"position":[[1150,5]]},"62":{"position":[[395,5]]},"63":{"position":[[1083,4]]},"68":{"position":[[1375,4],[1769,4]]},"237":{"position":[[3065,4]]},"341":{"position":[[606,5]]},"367":{"position":[[84,4]]},"578":{"position":[[399,4]]},"931":{"position":[[749,5],[826,4]]},"1471":{"position":[[392,4]]}},"keywords":{}}],["flag"",{"_index":5071,"title":{},"content":{"931":{"position":[[780,11]]}},"keywords":{}}],["flagto",{"_index":4721,"title":{},"content":{"808":{"position":[[674,6]]}},"keywords":{}}],["flashback",{"_index":4901,"title":{"873":{"position":[[9,11]]}},"content":{"878":{"position":[[259,9]]},"879":{"position":[[1192,9],[1224,9],[1310,9]]}},"keywords":{}}],["flashback:dev",{"_index":4920,"title":{},"content":{"880":{"position":[[96,13]]}},"keywords":{}}],["flat",{"_index":1919,"title":{},"content":{"162":{"position":[[1406,4]]},"291":{"position":[[1331,4]]},"302":{"position":[[1256,4]]}},"keywords":{}}],["flatten",{"_index":2478,"title":{},"content":{"227":{"position":[[152,7]]}},"keywords":{}}],["flavor",{"_index":1868,"title":{},"content":{"158":{"position":[[333,8]]},"332":{"position":[[609,8]]}},"keywords":{}}],["flexibl",{"_index":727,"title":{},"content":{"41":{"position":[[350,8]]},"70":{"position":[[259,9]]},"87":{"position":[[560,9]]},"210":{"position":[[1524,8]]},"211":{"position":[[326,11]]},"240":{"position":[[3170,8]]},"320":{"position":[[956,9]]},"1461":{"position":[[608,8]]},"1471":{"position":[[144,11]]}},"keywords":{}}],["flink",{"_index":1514,"title":{},"content":{"107":{"position":[[178,6]]},"329":{"position":[[525,6]]}},"keywords":{}}],["float",{"_index":5654,"title":{},"content":{"1140":{"position":[[3127,5]]},"1209":{"position":[[272,5]]},"1292":{"position":[[320,5]]},"1306":{"position":[[320,5]]},"1316":{"position":[[3127,5]]},"1329":{"position":[[320,5]]},"1340":{"position":[[3127,5]]},"1351":{"position":[[3127,5]]},"1379":{"position":[[1466,5]]},"1403":{"position":[[1466,5]]},"1414":{"position":[[1466,5]]},"1431":{"position":[[3150,5]]}},"keywords":{}}],["float4",{"_index":5981,"title":{},"content":{"1292":{"position":[[356,6]]},"1306":{"position":[[356,6]]},"1329":{"position":[[356,6]]}},"keywords":{}}],["float8",{"_index":5984,"title":{},"content":{"1292":{"position":[[397,6]]},"1306":{"position":[[397,6]]},"1329":{"position":[[397,6]]}},"keywords":{}}],["floor",{"_index":5657,"title":{},"content":{"1140":{"position":[[3174,5]]},"1316":{"position":[[3174,5]]},"1340":{"position":[[3174,5]]},"1351":{"position":[[3174,5]]},"1431":{"position":[[3197,5]]}},"keywords":{}}],["flow",{"_index":2,"title":{"23":{"position":[[5,6]]},"24":{"position":[[0,4]]},"25":{"position":[[7,4]]},"29":{"position":[[13,5]]},"61":{"position":[[13,5]]},"80":{"position":[[0,4]]},"168":{"position":[[21,4]]},"169":{"position":[[21,4]]},"170":{"position":[[51,5]]},"175":{"position":[[13,5]]},"177":{"position":[[0,4]]},"191":{"position":[[30,5]]},"192":{"position":[[17,4]]},"198":{"position":[[24,5]]},"205":{"position":[[19,5]]},"213":{"position":[[0,4]]},"214":{"position":[[20,4]]},"244":{"position":[[22,4]]},"258":{"position":[[10,5]]},"272":{"position":[[7,4]]},"286":{"position":[[21,5]]},"327":{"position":[[15,5]]},"328":{"position":[[4,4]]},"334":{"position":[[38,4]]},"336":{"position":[[42,4]]},"339":{"position":[[15,4]]},"340":{"position":[[15,4]]},"349":{"position":[[40,5]]},"383":{"position":[[48,4]]},"445":{"position":[[51,4]]},"479":{"position":[[41,5]]},"486":{"position":[[20,5]]},"523":{"position":[[48,4]]},"531":{"position":[[48,4]]},"553":{"position":[[48,4]]},"570":{"position":[[48,4]]},"608":{"position":[[48,4]]},"615":{"position":[[48,4]]},"644":{"position":[[49,4]]},"651":{"position":[[49,4]]},"658":{"position":[[20,5]]},"674":{"position":[[20,5]]},"689":{"position":[[20,5]]},"717":{"position":[[50,4]]},"732":{"position":[[51,4]]},"947":{"position":[[46,5]]},"987":{"position":[[52,4]]},"1002":{"position":[[52,4]]},"1047":{"position":[[11,4]]},"1055":{"position":[[11,4]]},"1063":{"position":[[11,4]]},"1092":{"position":[[44,5]]},"1227":{"position":[[31,4]]},"1244":{"position":[[31,4]]},"1446":{"position":[[12,4]]},"1460":{"position":[[13,4]]},"1470":{"position":[[27,4]]}},"content":{"1":{"position":[[1,4]]},"2":{"position":[[30,4]]},"3":{"position":[[325,4]]},"4":{"position":[[246,4]]},"6":{"position":[[29,4],[381,5],[562,4],[640,4]]},"7":{"position":[[226,4]]},"8":{"position":[[29,4],[186,5],[741,4]]},"11":{"position":[[1,4],[239,5],[799,4],[1090,4],[1225,4],[1874,4]]},"12":{"position":[[70,4],[248,4]]},"13":{"position":[[50,4],[96,4],[185,4],[489,5],[1095,4]]},"16":{"position":[[479,4]]},"17":{"position":[[33,4],[1086,4]]},"20":{"position":[[552,4]]},"23":{"position":[[68,6],[94,4]]},"24":{"position":[[47,4]]},"26":{"position":[[187,4],[463,4],[609,5]]},"27":{"position":[[192,4],[455,4]]},"29":{"position":[[60,5]]},"30":{"position":[[5,4],[92,6],[273,4]]},"31":{"position":[[141,5],[218,4]]},"32":{"position":[[49,4],[91,5],[137,4],[194,4],[248,4],[315,4]]},"33":{"position":[[66,6],[190,4],[262,4],[430,6]]},"34":{"position":[[39,5],[416,4]]},"35":{"position":[[16,4],[85,4],[152,5],[207,4]]},"36":{"position":[[24,4],[147,4]]},"37":{"position":[[45,4],[101,4],[280,4]]},"38":{"position":[[45,4],[134,4],[309,4],[523,4]]},"41":{"position":[[20,4],[156,4],[197,4],[526,4]]},"42":{"position":[[7,4],[265,4]]},"43":{"position":[[45,5]]},"44":{"position":[[145,5]]},"46":{"position":[[1,4],[105,4]]},"47":{"position":[[33,4],[115,4]]},"48":{"position":[[44,4]]},"49":{"position":[[229,4]]},"50":{"position":[[1,4],[223,5]]},"53":{"position":[[1,4],[260,4],[438,5],[596,4]]},"54":{"position":[[42,4],[91,4],[143,4],[222,4],[438,5]]},"55":{"position":[[112,4],[762,4]]},"56":{"position":[[25,4],[736,4]]},"58":{"position":[[837,4]]},"60":{"position":[[326,4],[503,6],[694,4]]},"61":{"position":[[85,6]]},"63":{"position":[[1,4],[229,4],[930,4]]},"64":{"position":[[34,4],[189,4],[209,4]]},"66":{"position":[[1,4],[155,4],[251,4],[666,4]]},"67":{"position":[[36,4],[83,5],[638,5],[740,5],[1749,4]]},"68":{"position":[[339,4]]},"69":{"position":[[28,4]]},"70":{"position":[[7,4],[373,4]]},"71":{"position":[[7,4]]},"72":{"position":[[207,4],[425,4]]},"74":{"position":[[28,4],[131,4],[644,5]]},"77":{"position":[[277,4]]},"79":{"position":[[34,5],[289,4]]},"80":{"position":[[5,4],[254,4],[458,4],[664,4]]},"81":{"position":[[214,4],[745,4],[823,4],[957,4],[1546,4],[2384,4]]},"82":{"position":[[215,4],[246,4],[780,4],[1058,4],[1080,4],[1214,4],[2782,4],[2806,4],[3235,4],[3306,4],[3344,4],[4920,4],[4940,4]]},"83":{"position":[[466,4],[777,4],[1053,4]]},"84":{"position":[[884,5],[1300,4],[1337,4]]},"87":{"position":[[79,4]]},"88":{"position":[[1,4]]},"89":{"position":[[58,4]]},"92":{"position":[[249,4]]},"94":{"position":[[1752,4],[2120,4]]},"95":{"position":[[40,4],[265,4]]},"97":{"position":[[87,4]]},"99":{"position":[[817,4]]},"100":{"position":[[1085,4],[1224,4]]},"101":{"position":[[422,4]]},"102":{"position":[[380,4]]},"103":{"position":[[264,4]]},"105":{"position":[[833,5]]},"106":{"position":[[357,4]]},"107":{"position":[[214,4],[393,4],[1137,4],[1532,4],[3380,4],[3668,4],[3858,4]]},"108":{"position":[[287,4]]},"110":{"position":[[856,4],[1324,4]]},"112":{"position":[[780,4],[917,4]]},"113":{"position":[[327,4],[395,4],[780,4]]},"115":{"position":[[190,4],[940,4],[1121,4]]},"117":{"position":[[33,4],[101,4],[459,4],[603,4]]},"119":{"position":[[127,4],[141,4],[231,4],[362,4]]},"120":{"position":[[33,4],[1304,4],[1672,4]]},"121":{"position":[[1,4],[399,4],[502,4],[616,5],[1691,4]]},"122":{"position":[[245,4],[652,4],[2058,5]]},"124":{"position":[[1,4],[253,4],[469,4],[565,4],[796,4]]},"125":{"position":[[403,4],[453,4],[697,4],[757,4],[847,4],[1059,4],[1211,5]]},"135":{"position":[[129,6],[176,4],[266,6]]},"136":{"position":[[61,5],[91,4],[191,4]]},"137":{"position":[[268,5],[425,4],[499,5]]},"138":{"position":[[49,4],[346,4],[1230,7],[1375,4]]},"141":{"position":[[656,4],[1313,7]]},"142":{"position":[[57,4],[459,4],[1207,7],[1376,4]]},"144":{"position":[[596,4]]},"154":{"position":[[1245,4],[1329,4],[1502,4]]},"156":{"position":[[95,4],[135,4]]},"157":{"position":[[46,4],[185,4],[319,4]]},"158":{"position":[[23,4],[101,4]]},"159":{"position":[[316,4],[392,4]]},"160":{"position":[[140,4]]},"161":{"position":[[86,4],[1119,4]]},"163":{"position":[[1,4],[124,4],[460,4],[740,4],[968,4]]},"164":{"position":[[121,4],[412,4],[1310,5]]},"165":{"position":[[1,4],[176,4],[909,4]]},"168":{"position":[[16,4],[134,5],[380,5]]},"169":{"position":[[97,5],[224,4],[1405,4]]},"170":{"position":[[5,4]]},"171":{"position":[[30,4],[91,5],[222,4]]},"172":{"position":[[30,4],[90,5]]},"173":{"position":[[30,4],[191,5],[572,4]]},"174":{"position":[[545,4]]},"175":{"position":[[5,4],[93,4],[294,4]]},"176":{"position":[[13,4],[76,5],[126,4],[138,4],[177,4],[254,4]]},"177":{"position":[[0,4],[15,4],[90,4],[220,6],[250,4]]},"179":{"position":[[12,4],[59,4],[220,5],[507,5]]},"180":{"position":[[368,4]]},"182":{"position":[[37,4],[505,4]]},"183":{"position":[[86,4],[2634,4],[2885,4]]},"184":{"position":[[161,4]]},"188":{"position":[[26,4],[73,4]]},"189":{"position":[[703,4],[734,4],[892,5],[910,5],[932,5],[1005,4],[1174,4],[1613,4],[1692,4]]},"190":{"position":[[11,4],[455,4],[651,4],[1511,4],[1536,4],[1678,5],[1889,4],[2096,4]]},"191":{"position":[[33,4],[102,4],[2253,5],[2274,4]]},"192":{"position":[[1325,4],[1508,4],[1749,4],[1958,4],[2251,4]]},"193":{"position":[[32,4],[564,4],[745,5]]},"199":{"position":[[75,4]]},"200":{"position":[[32,5]]},"202":{"position":[[307,4]]},"204":{"position":[[229,4],[348,4],[933,4]]},"205":{"position":[[360,5]]},"206":{"position":[[735,4],[875,4],[1126,5]]},"207":{"position":[[103,5],[132,5],[672,4],[799,4]]},"208":{"position":[[418,5],[458,4],[992,4]]},"209":{"position":[[95,4]]},"210":{"position":[[158,4],[252,4],[3951,4]]},"211":{"position":[[92,5],[792,4]]},"213":{"position":[[0,4],[95,4],[160,5],[321,4],[520,4]]},"215":{"position":[[32,4]]},"216":{"position":[[12,5],[34,5],[107,4],[461,4],[613,5]]},"217":{"position":[[122,5],[189,4],[957,4]]},"218":{"position":[[531,4],[874,5],[880,4],[1727,4],[2150,4]]},"219":{"position":[[42,5],[139,4],[196,5]]},"228":{"position":[[107,4],[993,4]]},"230":{"position":[[595,4]]},"232":{"position":[[100,5],[510,4],[931,4]]},"234":{"position":[[243,4],[506,4]]},"236":{"position":[[150,4],[2822,4],[3763,4]]},"237":{"position":[[3592,4]]},"238":{"position":[[641,4]]},"239":{"position":[[86,4],[197,4],[251,4],[604,4],[663,4],[735,5],[1095,4],[1253,4],[1477,4],[1901,4],[2112,5],[2690,4]]},"240":{"position":[[101,4],[189,4],[237,4],[2332,5],[2384,4],[2456,5],[3796,4],[4606,4],[4666,4]]},"241":{"position":[[106,5]]},"242":{"position":[[97,5],[885,4]]},"245":{"position":[[47,5]]},"246":{"position":[[39,4],[160,4]]},"247":{"position":[[23,4]]},"250":{"position":[[1206,4]]},"252":{"position":[[116,4]]},"253":{"position":[[168,4],[297,4]]},"254":{"position":[[878,4],[2195,4],[2408,4],[3087,4],[3218,4]]},"255":{"position":[[912,5]]},"257":{"position":[[83,4],[130,4]]},"259":{"position":[[959,4],[1044,5],[1195,4],[2540,4],[2625,5],[2776,4]]},"263":{"position":[[40,4]]},"264":{"position":[[198,4],[686,4]]},"266":{"position":[[3,4],[129,4],[198,4],[269,5],[397,5]]},"267":{"position":[[94,4],[145,5],[1849,5],[1931,5]]},"268":{"position":[[2116,4]]},"269":{"position":[[1578,4]]},"270":{"position":[[2194,4]]},"273":{"position":[[106,4]]},"274":{"position":[[133,4],[174,4]]},"275":{"position":[[220,4],[521,4]]},"277":{"position":[[836,4]]},"278":{"position":[[1741,5]]},"279":{"position":[[496,4]]},"280":{"position":[[87,5],[832,5],[886,4],[926,4],[963,5]]},"281":{"position":[[1835,4],[2931,5]]},"285":{"position":[[77,4]]},"286":{"position":[[21,5],[76,4],[287,5],[326,4]]},"288":{"position":[[56,4],[85,4],[855,5]]},"289":{"position":[[12,5],[34,5],[288,4],[426,4],[684,5]]},"290":{"position":[[91,4],[166,4],[778,4],[1116,4],[1253,4]]},"291":{"position":[[579,4],[1660,4],[1960,4]]},"292":{"position":[[11,4],[200,4]]},"294":{"position":[[123,4]]},"295":{"position":[[1038,5],[1421,5],[1597,4],[1721,4]]},"296":{"position":[[1795,4],[2961,4],[3197,4],[6707,4],[6898,4],[7783,5]]},"299":{"position":[[56,4],[85,4],[770,5]]},"300":{"position":[[12,5],[34,5],[267,4],[380,4],[624,5]]},"301":{"position":[[90,4],[119,4],[1325,4],[1447,4]]},"302":{"position":[[579,4],[1569,4],[1872,4]]},"303":{"position":[[11,4],[191,4]]},"305":{"position":[[1,4],[292,6]]},"307":{"position":[[94,4],[514,4],[977,4]]},"308":{"position":[[822,4]]},"309":{"position":[[1453,4],[2056,4]]},"312":{"position":[[123,4]]},"313":{"position":[[168,4],[297,4]]},"314":{"position":[[556,4],[1736,4],[1949,4],[2662,4],[2793,4]]},"316":{"position":[[1237,5]]},"319":{"position":[[305,5],[331,4],[541,4],[549,5],[824,4],[887,4],[1287,4]]},"320":{"position":[[1,4],[143,4],[228,4],[338,4],[492,4],[735,4],[1140,4],[1421,4],[1506,4],[1591,4],[1908,4],[2125,4],[2216,5],[2346,4],[2416,4]]},"321":{"position":[[80,4],[194,4],[491,4],[807,4],[1158,5],[1453,4],[1470,5],[1483,4],[1508,4],[1571,5],[1767,4],[1782,5],[1951,5],[2019,4],[2084,4],[2235,4]]},"322":{"position":[[134,5],[248,5],[632,4],[684,5],[802,4],[855,4],[1008,4],[1354,5],[1543,4],[1704,4]]},"323":{"position":[[237,4],[386,5],[567,4],[660,4],[982,4],[1249,4],[1356,4],[1449,5],[1477,4],[1647,4],[1833,5],[1939,4],[2034,4]]},"324":{"position":[[367,4],[538,4],[735,4],[866,4],[1017,4],[1168,4]]},"325":{"position":[[235,5],[272,4],[461,4],[544,4],[573,4],[801,5]]},"326":{"position":[[1,4],[70,4],[133,4],[226,4],[419,4],[604,4],[945,5],[1250,4],[1412,4],[1562,4],[1657,4]]},"328":{"position":[[14,4]]},"329":{"position":[[6,5],[350,4],[823,4]]},"330":{"position":[[1,4],[469,4]]},"331":{"position":[[6,5],[127,4],[283,4],[462,4]]},"332":{"position":[[1,4],[292,4],[364,4],[802,6]]},"333":{"position":[[5,4],[309,5],[474,4]]},"335":{"position":[[126,5]]},"338":{"position":[[31,5]]},"339":{"position":[[51,4]]},"340":{"position":[[265,4]]},"349":{"position":[[23,4]]},"350":{"position":[[40,4]]},"358":{"position":[[40,4]]},"364":{"position":[[169,5],[356,6],[471,4]]},"368":{"position":[[310,5]]},"369":{"position":[[40,4]]},"374":{"position":[[83,4],[277,4]]},"376":{"position":[[40,4]]},"379":{"position":[[723,5],[867,4]]},"381":{"position":[[581,4]]},"382":{"position":[[80,4]]},"386":{"position":[[40,4]]},"387":{"position":[[113,4]]},"391":{"position":[[40,4]]},"396":{"position":[[40,4]]},"401":{"position":[[68,4],[108,4]]},"407":{"position":[[40,4]]},"415":{"position":[[271,5]]},"416":{"position":[[40,4]]},"419":{"position":[[137,4],[1079,4],[1489,4]]},"421":{"position":[[180,4]]},"423":{"position":[[40,4]]},"427":{"position":[[64,4],[168,4]]},"429":{"position":[[446,4]]},"430":{"position":[[297,4]]},"431":{"position":[[40,4]]},"437":{"position":[[40,4]]},"440":{"position":[[153,4],[1095,4]]},"441":{"position":[[98,4]]},"443":{"position":[[539,4]]},"444":{"position":[[83,4]]},"447":{"position":[[40,4]]},"448":{"position":[[113,4]]},"451":{"position":[[189,4]]},"453":{"position":[[40,4]]},"457":{"position":[[193,4]]},"459":{"position":[[40,4]]},"463":{"position":[[299,4]]},"465":{"position":[[40,4]]},"470":{"position":[[62,4]]},"472":{"position":[[40,4],[447,4],[470,4]]},"478":{"position":[[308,4],[635,4]]},"479":{"position":[[23,4]]},"480":{"position":[[138,4]]},"481":{"position":[[40,4]]},"485":{"position":[[298,4],[518,5]]},"486":{"position":[[354,4]]},"488":{"position":[[61,4]]},"495":{"position":[[40,4]]},"496":{"position":[[608,4]]},"499":{"position":[[98,4],[269,4]]},"500":{"position":[[116,4]]},"501":{"position":[[51,4]]},"504":{"position":[[74,4],[1118,4]]},"506":{"position":[[456,4]]},"508":{"position":[[40,4]]},"512":{"position":[[216,4]]},"513":{"position":[[75,5],[217,4]]},"514":{"position":[[22,4]]},"516":{"position":[[40,4]]},"521":{"position":[[369,4]]},"522":{"position":[[73,5],[218,4]]},"525":{"position":[[40,4]]},"529":{"position":[[748,4]]},"530":{"position":[[73,5],[218,4]]},"533":{"position":[[40,4]]},"534":{"position":[[113,4]]},"537":{"position":[[205,4]]},"539":{"position":[[40,4]]},"544":{"position":[[40,4]]},"547":{"position":[[138,4],[1080,4],[1491,4]]},"548":{"position":[[323,4],[533,4]]},"550":{"position":[[453,4]]},"551":{"position":[[73,5],[216,4]]},"555":{"position":[[40,4],[81,4]]},"556":{"position":[[113,4]]},"558":{"position":[[131,4]]},"563":{"position":[[69,4],[100,4]]},"568":{"position":[[46,4],[263,4]]},"569":{"position":[[235,4]]},"572":{"position":[[40,4]]},"573":{"position":[[117,4]]},"574":{"position":[[649,5]]},"580":{"position":[[205,4]]},"581":{"position":[[381,4]]},"583":{"position":[[40,4]]},"584":{"position":[[127,4]]},"590":{"position":[[822,4],[957,4]]},"592":{"position":[[40,4],[81,4]]},"595":{"position":[[945,5]]},"599":{"position":[[308,4],[635,4]]},"600":{"position":[[40,4]]},"602":{"position":[[94,4],[398,4],[627,4]]},"605":{"position":[[411,4]]},"606":{"position":[[350,4]]},"607":{"position":[[234,4]]},"608":{"position":[[197,4]]},"610":{"position":[[40,4]]},"611":{"position":[[113,4]]},"614":{"position":[[218,4]]},"616":{"position":[[517,4]]},"618":{"position":[[40,4]]},"622":{"position":[[417,4]]},"623":{"position":[[118,4]]},"624":{"position":[[40,4]]},"628":{"position":[[481,4]]},"630":{"position":[[40,4]]},"634":{"position":[[90,4],[261,4]]},"636":{"position":[[40,4]]},"639":{"position":[[73,4],[1116,4]]},"643":{"position":[[192,4]]},"646":{"position":[[40,4]]},"649":{"position":[[79,4]]},"650":{"position":[[191,4]]},"653":{"position":[[40,4]]},"657":{"position":[[298,4],[703,5]]},"658":{"position":[[354,4]]},"659":{"position":[[218,4]]},"667":{"position":[[266,4]]},"669":{"position":[[40,4]]},"673":{"position":[[298,4],[518,5]]},"674":{"position":[[354,4]]},"676":{"position":[[61,4]]},"682":{"position":[[237,4]]},"683":{"position":[[59,4]]},"684":{"position":[[40,4]]},"685":{"position":[[98,4]]},"688":{"position":[[298,4],[518,5]]},"689":{"position":[[354,4]]},"690":{"position":[[214,5]]},"691":{"position":[[61,4]]},"697":{"position":[[606,4]]},"699":{"position":[[40,4]]},"703":{"position":[[171,4]]},"705":{"position":[[40,4]]},"709":{"position":[[859,4]]},"711":{"position":[[40,4]]},"715":{"position":[[228,4]]},"716":{"position":[[75,5],[218,4]]},"719":{"position":[[40,4]]},"720":{"position":[[113,4]]},"727":{"position":[[40,4]]},"731":{"position":[[189,4]]},"734":{"position":[[40,4]]},"738":{"position":[[783,4]]},"740":{"position":[[40,4]]},"744":{"position":[[173,4]]},"746":{"position":[[40,4]]},"752":{"position":[[228,5]]},"753":{"position":[[172,4],[249,4],[884,5]]},"754":{"position":[[73,4],[303,4]]},"755":{"position":[[310,5]]},"756":{"position":[[40,4]]},"767":{"position":[[52,4],[395,4],[1864,5]]},"768":{"position":[[310,5]]},"769":{"position":[[40,4]]},"781":{"position":[[40,4],[81,4]]},"791":{"position":[[181,5],[665,4]]},"792":{"position":[[238,5],[708,4],[1804,5],[1985,4]]},"793":{"position":[[52,5],[243,4],[855,5],[1339,4]]},"794":{"position":[[176,4]]},"795":{"position":[[308,5]]},"796":{"position":[[40,4]]},"805":{"position":[[7,4]]},"808":{"position":[[52,5],[232,4],[801,5],[1285,4]]},"809":{"position":[[176,4]]},"810":{"position":[[308,5]]},"811":{"position":[[40,4]]},"820":{"position":[[7,4]]},"821":{"position":[[73,4]]},"824":{"position":[[52,5],[500,4],[1926,5],[2107,4]]},"825":{"position":[[176,4]]},"826":{"position":[[308,5]]},"827":{"position":[[40,4]]},"836":{"position":[[7,4]]},"838":{"position":[[1,4]]},"840":{"position":[[200,5],[883,5],[1605,5],[1709,5],[2501,5]]},"841":{"position":[[40,4]]},"849":{"position":[[143,5],[1496,5],[2750,5],[3641,5]]},"850":{"position":[[40,4]]},"854":{"position":[[122,4]]},"855":{"position":[[97,5]]},"858":{"position":[[40,4]]},"859":{"position":[[113,4]]},"862":{"position":[[51,4],[149,4]]},"864":{"position":[[1717,5]]},"865":{"position":[[64,4]]},"866":{"position":[[40,4]]},"874":{"position":[[51,4],[149,4]]},"876":{"position":[[977,5]]},"877":{"position":[[64,4]]},"878":{"position":[[40,4]]},"882":{"position":[[133,4]]},"884":{"position":[[40,4]]},"888":{"position":[[188,4]]},"890":{"position":[[40,4]]},"895":{"position":[[89,4]]},"896":{"position":[[40,4]]},"904":{"position":[[52,5],[499,4]]},"905":{"position":[[313,5]]},"906":{"position":[[40,4]]},"907":{"position":[[1764,5]]},"909":{"position":[[814,4],[1030,5],[1095,5]]},"912":{"position":[[81,4]]},"918":{"position":[[238,5],[708,4]]},"919":{"position":[[52,5],[243,4]]},"920":{"position":[[313,5]]},"921":{"position":[[40,4]]},"922":{"position":[[2611,4]]},"923":{"position":[[1764,5]]},"925":{"position":[[814,4],[1030,5],[1095,5]]},"931":{"position":[[52,5],[236,4]]},"932":{"position":[[313,5]]},"933":{"position":[[40,4]]},"936":{"position":[[814,4],[1030,5],[1095,5]]},"940":{"position":[[12,4]]},"945":{"position":[[118,5],[639,4]]},"946":{"position":[[188,4],[271,4]]},"947":{"position":[[16,4],[956,4]]},"948":{"position":[[313,5]]},"949":{"position":[[40,4]]},"952":{"position":[[814,4],[1030,5],[1095,5]]},"956":{"position":[[209,4]]},"958":{"position":[[40,4]]},"966":{"position":[[313,5]]},"967":{"position":[[40,4]]},"968":{"position":[[1764,5]]},"970":{"position":[[814,4],[1030,5],[1095,5]]},"974":{"position":[[218,4]]},"975":{"position":[[88,4]]},"976":{"position":[[91,4],[424,4]]},"977":{"position":[[278,4]]},"979":{"position":[[283,4]]},"981":{"position":[[40,4]]},"987":{"position":[[21,4]]},"989":{"position":[[126,4],[375,5],[519,5],[1250,5]]},"990":{"position":[[40,4]]},"991":{"position":[[113,4]]},"994":{"position":[[141,4]]},"996":{"position":[[40,4]]},"1002":{"position":[[21,4]]},"1004":{"position":[[126,4],[458,5],[602,5],[1333,5]]},"1005":{"position":[[40,4],[81,4]]},"1008":{"position":[[2022,5]]},"1009":{"position":[[113,4]]},"1012":{"position":[[268,4]]},"1014":{"position":[[40,4]]},"1018":{"position":[[73,4]]},"1021":{"position":[[40,4]]},"1023":{"position":[[118,4],[1060,4],[1472,4]]},"1025":{"position":[[415,4]]},"1027":{"position":[[40,4]]},"1033":{"position":[[44,4]]},"1034":{"position":[[774,4],[806,4]]},"1036":{"position":[[224,4]]},"1040":{"position":[[253,4]]},"1042":{"position":[[1131,4]]},"1043":{"position":[[52,5],[243,4]]},"1044":{"position":[[40,4]]},"1047":{"position":[[7,4],[457,4]]},"1050":{"position":[[253,4]]},"1051":{"position":[[52,5],[499,4]]},"1052":{"position":[[40,4]]},"1055":{"position":[[7,4],[457,4]]},"1058":{"position":[[253,4]]},"1059":{"position":[[52,5],[236,4]]},"1060":{"position":[[40,4]]},"1063":{"position":[[7,4],[457,4]]},"1065":{"position":[[140,4]]},"1066":{"position":[[71,5]]},"1067":{"position":[[310,5]]},"1069":{"position":[[40,4]]},"1070":{"position":[[113,4]]},"1073":{"position":[[392,4]]},"1075":{"position":[[40,4]]},"1080":{"position":[[849,4]]},"1081":{"position":[[134,4]]},"1082":{"position":[[71,4]]},"1084":{"position":[[40,4]]},"1085":{"position":[[188,4]]},"1092":{"position":[[23,4]]},"1093":{"position":[[40,4]]},"1096":{"position":[[45,4]]},"1099":{"position":[[513,4]]},"1100":{"position":[[40,4]]},"1104":{"position":[[211,4]]},"1106":{"position":[[40,4]]},"1110":{"position":[[531,4]]},"1112":{"position":[[40,4]]},"1118":{"position":[[91,4],[1152,4]]},"1124":{"position":[[40,4]]},"1128":{"position":[[448,4]]},"1129":{"position":[[92,5]]},"1132":{"position":[[40,4]]},"1137":{"position":[[55,4],[176,4]]},"1139":{"position":[[171,4],[182,4]]},"1140":{"position":[[99,4],[293,4]]},"1143":{"position":[[98,4]]},"1147":{"position":[[172,4]]},"1150":{"position":[[113,4]]},"1154":{"position":[[160,4]]},"1155":{"position":[[181,4]]},"1161":{"position":[[98,4]]},"1164":{"position":[[1,4],[154,4],[544,4]]},"1169":{"position":[[98,4]]},"1172":{"position":[[1,4]]},"1174":{"position":[[172,4]]},"1178":{"position":[[55,4],[177,4]]},"1182":{"position":[[143,4]]},"1183":{"position":[[62,4]]},"1185":{"position":[[259,4]]},"1187":{"position":[[55,4],[179,4]]},"1189":{"position":[[428,4]]},"1191":{"position":[[143,4]]},"1192":{"position":[[99,4]]},"1194":{"position":[[469,4]]},"1195":{"position":[[55,4],[185,4]]},"1197":{"position":[[434,4]]},"1203":{"position":[[630,4]]},"1205":{"position":[[55,4],[157,4]]},"1207":{"position":[[517,4]]},"1212":{"position":[[98,4]]},"1216":{"position":[[172,4]]},"1219":{"position":[[98,4]]},"1222":{"position":[[1,4]]},"1224":{"position":[[172,4]]},"1226":{"position":[[188,4],[254,4]]},"1227":{"position":[[70,4]]},"1229":{"position":[[55,4],[189,4]]},"1232":{"position":[[30,4],[340,4]]},"1234":{"position":[[138,4]]},"1236":{"position":[[154,4]]},"1237":{"position":[[52,4]]},"1243":{"position":[[51,4],[721,4],[832,4]]},"1246":{"position":[[55,4]]},"1247":{"position":[[104,4]]},"1248":{"position":[[461,4]]},"1252":{"position":[[40,4],[81,4]]},"1259":{"position":[[105,4]]},"1262":{"position":[[143,4]]},"1264":{"position":[[144,4]]},"1265":{"position":[[28,4]]},"1270":{"position":[[135,4],[187,4]]},"1279":{"position":[[145,4],[390,4]]},"1281":{"position":[[430,4]]},"1283":{"position":[[279,4]]},"1284":{"position":[[55,4],[174,4]]},"1286":{"position":[[205,4]]},"1287":{"position":[[126,4],[165,4],[176,4]]},"1289":{"position":[[681,4]]},"1292":{"position":[[94,4],[222,4]]},"1295":{"position":[[430,4]]},"1297":{"position":[[55,4]]},"1299":{"position":[[55,4],[174,4]]},"1301":{"position":[[205,4]]},"1302":{"position":[[126,4],[165,4],[176,4]]},"1303":{"position":[[52,5],[236,4],[1509,4]]},"1306":{"position":[[94,4],[222,4]]},"1309":{"position":[[248,4]]},"1311":{"position":[[115,4]]},"1312":{"position":[[55,4],[177,4]]},"1313":{"position":[[1514,5]]},"1314":{"position":[[129,4],[168,4],[179,4]]},"1316":{"position":[[99,4],[293,4]]},"1317":{"position":[[590,4]]},"1319":{"position":[[430,4]]},"1321":{"position":[[362,4]]},"1323":{"position":[[55,4],[174,4]]},"1325":{"position":[[205,4]]},"1326":{"position":[[126,4],[165,4],[176,4]]},"1329":{"position":[[94,4],[222,4]]},"1332":{"position":[[248,4]]},"1334":{"position":[[450,4]]},"1336":{"position":[[55,4],[177,4]]},"1337":{"position":[[1514,5]]},"1338":{"position":[[129,4],[168,4],[179,4]]},"1340":{"position":[[99,4],[293,4]]},"1341":{"position":[[590,4]]},"1343":{"position":[[248,4]]},"1345":{"position":[[55,4]]},"1347":{"position":[[55,4],[177,4]]},"1349":{"position":[[129,4],[168,4],[179,4]]},"1351":{"position":[[99,4],[293,4]]},"1352":{"position":[[590,4]]},"1354":{"position":[[294,4]]},"1355":{"position":[[55,4],[176,4]]},"1357":{"position":[[366,4]]},"1358":{"position":[[97,5],[308,4],[410,4],[524,4],[696,4]]},"1361":{"position":[[178,4]]},"1362":{"position":[[49,4],[543,4]]},"1365":{"position":[[51,4]]},"1370":{"position":[[95,4],[285,4]]},"1372":{"position":[[293,4]]},"1373":{"position":[[52,5],[481,4]]},"1374":{"position":[[52,5],[481,4]]},"1375":{"position":[[55,4],[178,4]]},"1377":{"position":[[130,4],[169,4],[180,4]]},"1379":{"position":[[98,4],[230,4]]},"1382":{"position":[[513,4]]},"1385":{"position":[[55,4],[178,4]]},"1387":{"position":[[467,4],[1093,4]]},"1389":{"position":[[143,4]]},"1393":{"position":[[1,4],[222,4],[256,4]]},"1394":{"position":[[98,4]]},"1396":{"position":[[293,4]]},"1397":{"position":[[52,5],[233,4]]},"1398":{"position":[[52,5],[232,4]]},"1399":{"position":[[55,4],[178,4]]},"1401":{"position":[[130,4],[169,4],[180,4]]},"1403":{"position":[[98,4],[230,4]]},"1406":{"position":[[293,4]]},"1408":{"position":[[404,4]]},"1409":{"position":[[52,5],[243,4]]},"1410":{"position":[[55,4],[178,4]]},"1412":{"position":[[130,4],[169,4],[180,4]]},"1414":{"position":[[98,4],[230,4]]},"1417":{"position":[[450,4]]},"1419":{"position":[[55,4],[178,4]]},"1421":{"position":[[454,4]]},"1423":{"position":[[105,4]]},"1425":{"position":[[252,4]]},"1426":{"position":[[55,4],[180,4]]},"1428":{"position":[[132,4],[209,4],[220,4]]},"1429":{"position":[[588,4]]},"1431":{"position":[[122,4],[316,4]]},"1432":{"position":[[590,4]]},"1435":{"position":[[328,4]]},"1437":{"position":[[90,4],[223,4],[385,4],[567,4]]},"1438":{"position":[[58,4]]},"1439":{"position":[[968,4],[1750,4]]},"1440":{"position":[[77,4],[179,4],[578,4]]},"1442":{"position":[[1037,4]]},"1446":{"position":[[8,4]]},"1447":{"position":[[184,4],[409,4]]},"1451":{"position":[[9,4],[895,4]]},"1453":{"position":[[129,4]]},"1459":{"position":[[4,5],[351,4],[541,4],[742,4],[880,4]]},"1461":{"position":[[963,5],[2709,4],[4364,4]]},"1462":{"position":[[7,4],[81,4],[94,4],[747,4]]},"1469":{"position":[[43,4]]},"1470":{"position":[[74,4],[930,4]]},"1471":{"position":[[235,4]]},"1474":{"position":[[399,4]]},"1475":{"position":[[181,4]]},"1477":{"position":[[1337,4],[3503,4]]},"1479":{"position":[[8,4]]},"1480":{"position":[[50,4],[1010,4],[1378,4]]}},"keywords":{}}],["flow'",{"_index":325,"title":{},"content":{"11":{"position":[[1133,6]]},"26":{"position":[[417,6]]},"27":{"position":[[691,6]]},"31":{"position":[[54,6]]},"63":{"position":[[783,6]]},"64":{"position":[[344,6]]},"80":{"position":[[160,6]]},"95":{"position":[[210,6]]},"96":{"position":[[1,6]]},"101":{"position":[[239,6]]},"102":{"position":[[1,6]]},"115":{"position":[[1615,6]]},"125":{"position":[[21,6],[599,6]]},"162":{"position":[[892,6]]},"163":{"position":[[267,6]]},"168":{"position":[[162,6],[225,6]]},"170":{"position":[[36,6]]},"189":{"position":[[1738,6]]},"215":{"position":[[66,6]]},"230":{"position":[[985,6]]},"232":{"position":[[217,6]]},"239":{"position":[[2017,6]]},"271":{"position":[[338,6]]},"277":{"position":[[898,6]]},"291":{"position":[[1475,6]]},"302":{"position":[[1395,6]]},"322":{"position":[[169,6]]},"429":{"position":[[144,6]]},"792":{"position":[[304,6]]},"793":{"position":[[118,6]]},"808":{"position":[[118,6]]},"824":{"position":[[118,6]]},"904":{"position":[[118,6]]},"918":{"position":[[304,6]]},"919":{"position":[[118,6]]},"931":{"position":[[118,6]]},"946":{"position":[[146,6]]},"1043":{"position":[[118,6]]},"1051":{"position":[[118,6]]},"1059":{"position":[[118,6]]},"1283":{"position":[[129,6]]},"1289":{"position":[[129,6]]},"1303":{"position":[[118,6]]},"1320":{"position":[[129,6]]},"1333":{"position":[[129,6]]},"1344":{"position":[[129,6]]},"1373":{"position":[[118,6]]},"1374":{"position":[[118,6]]},"1397":{"position":[[118,6]]},"1398":{"position":[[118,6]]},"1409":{"position":[[118,6]]},"1435":{"position":[[748,6]]},"1461":{"position":[[1,6]]},"1473":{"position":[[269,6]]}},"keywords":{}}],["flow,"",{"_index":4374,"title":{},"content":{"645":{"position":[[329,11]]},"652":{"position":[[329,11]]}},"keywords":{}}],["flow.definit",{"_index":1009,"title":{},"content":{"67":{"position":[[1021,16]]}},"keywords":{}}],["flow.json",{"_index":1477,"title":{},"content":{"103":{"position":[[631,9]]}},"keywords":{}}],["flow.t",{"_index":6601,"title":{},"content":{"1461":{"position":[[1227,7],[1318,7],[1387,7],[1457,7]]}},"keywords":{}}],["flow.watermark",{"_index":4593,"title":{},"content":{"752":{"position":[[261,15],[827,15]]},"753":{"position":[[917,15],[1483,15]]},"767":{"position":[[1897,15],[2160,15]]},"791":{"position":[[214,15],[832,15]]},"792":{"position":[[1837,15],[2152,15]]},"793":{"position":[[888,15],[1506,15]]},"808":{"position":[[834,15],[1452,15]]},"824":{"position":[[1959,15],[2274,15]]}},"keywords":{}}],["flow.yaml",{"_index":610,"title":{},"content":{"26":{"position":[[329,11],[361,9]]},"62":{"position":[[679,9],[749,9]]},"63":{"position":[[167,10]]},"103":{"position":[[618,9]]},"183":{"position":[[960,9],[1083,9],[4086,9],[4492,9]]},"254":{"position":[[158,9],[187,9],[1275,9]]},"255":{"position":[[172,9],[1146,9]]},"263":{"position":[[1029,9]]},"264":{"position":[[387,10],[424,9]]},"267":{"position":[[1350,9],[1502,9]]},"268":{"position":[[100,9],[701,9],[1820,9],[1930,9]]},"269":{"position":[[107,9],[326,9],[1277,9],[1392,9]]},"270":{"position":[[979,9],[1131,9],[1262,9],[1690,9],[1766,9],[1890,9],[2008,9]]},"274":{"position":[[1874,9]]},"275":{"position":[[408,9],[458,9],[712,9],[776,9]]},"296":{"position":[[158,9],[187,9],[3760,9],[3876,9],[6834,9]]},"307":{"position":[[855,9]]},"314":{"position":[[158,9],[187,9],[1381,9]]},"315":{"position":[[178,9],[333,9]]},"316":{"position":[[174,9],[1471,9]]},"1008":{"position":[[1937,9]]},"1461":{"position":[[1197,9],[1241,9],[1289,9],[1334,9],[1401,9],[1469,9],[1813,12]]}},"keywords":{}}],["flow.yamlschema.yaml",{"_index":1054,"title":{},"content":{"71":{"position":[[165,20]]},"73":{"position":[[145,20]]}},"keywords":{}}],["flow.yamlschemas.yaml",{"_index":1897,"title":{},"content":{"161":{"position":[[593,21]]}},"keywords":{}}],["flow.yamlus",{"_index":2082,"title":{},"content":{"183":{"position":[[3461,13]]}},"keywords":{}}],["flow/acmebank/balances.t",{"_index":2888,"title":{},"content":{"281":{"position":[[1276,28]]}},"keywords":{}}],["flow/dani/deriv",{"_index":3079,"title":{},"content":{"315":{"position":[[1372,21]]}},"keywords":{}}],["flow/dani/join",{"_index":3014,"title":{},"content":{"296":{"position":[[5288,15],[5940,15]]}},"keywords":{}}],["flow://inf",{"_index":1961,"title":{},"content":{"165":{"position":[[1132,15],[1337,15],[1541,15],[1829,15]]},"207":{"position":[[1033,15],[1237,15]]}},"keywords":{}}],["flow://writ",{"_index":1960,"title":{},"content":{"165":{"position":[[1104,12],[1462,12],[1595,12]]},"207":{"position":[[1005,12]]}},"keywords":{}}],["flow_captur",{"_index":2518,"title":{},"content":{"236":{"position":[[957,12],[2869,12],[2944,13],[3467,13]]},"237":{"position":[[289,12],[655,13],[718,12],[1589,13],[1609,12]]},"367":{"position":[[359,12],[486,13],[568,13],[729,13]]},"752":{"position":[[334,12],[650,12],[740,15],[779,15],[846,15]]},"753":{"position":[[990,12],[1306,12],[1396,15],[1435,15],[1502,15]]},"767":{"position":[[1983,12],[2073,15],[2112,15],[2179,15]]},"791":{"position":[[287,12],[603,12],[745,15],[784,15],[851,15]]},"792":{"position":[[1923,12],[2065,15],[2104,15],[2171,15]]},"793":{"position":[[961,12],[1277,12],[1419,15],[1458,15],[1525,15]]},"808":{"position":[[907,12],[1223,12],[1365,15],[1404,15],[1471,15]]},"824":{"position":[[2045,12],[2187,15],[2226,15],[2293,15]]},"904":{"position":[[1463,12],[1525,13],[1586,13],[1668,13],[1829,13]]},"917":{"position":[[325,12],[465,13],[576,13],[659,13],[744,13],[1338,13]]},"918":{"position":[[1755,12],[1817,13],[1878,13],[1960,13],[2121,13]]},"919":{"position":[[888,12],[1000,13],[1113,13],[1190,13],[1275,13],[1759,13],[1836,13],[2015,13],[2176,13]]},"931":{"position":[[1120,12],[1248,13],[1330,13],[1491,13]]},"965":{"position":[[325,12],[465,13],[576,13],[659,13],[744,13],[1338,13]]},"1042":{"position":[[208,12],[259,12],[282,13],[562,13],[609,13],[808,13],[1078,15]]},"1043":{"position":[[872,12],[923,12],[946,13],[1226,13],[1273,13],[1472,13],[1742,15]]},"1051":{"position":[[1134,12],[1185,12],[1208,13],[1488,13],[1535,13],[1734,13],[2004,15]]},"1059":{"position":[[923,12],[978,12],[1001,13],[1281,13],[1328,13],[1527,13],[1797,15]]}},"keywords":{}}],["flow_capture@myazuredb",{"_index":5050,"title":{},"content":{"919":{"position":[[2691,23]]}},"keywords":{}}],["flow_docu",{"_index":5950,"title":{},"content":{"1276":{"position":[[213,13],[440,13]]}},"keywords":{}}],["flow_gener",{"_index":942,"title":{},"content":{"63":{"position":[[374,16]]},"64":{"position":[[315,15]]},"296":{"position":[[3890,14],[4082,14]]},"315":{"position":[[347,14],[561,14]]}},"keywords":{}}],["flow_generated/typescript/<your_working_directory>/<your_prefix>/customers_with_orders.t",{"_index":3008,"title":{},"content":{"296":{"position":[[4245,101]]}},"keywords":{}}],["flow_generated/typescript/<your_working_directory>/<your_prefix>/recentchang",{"_index":3077,"title":{},"content":{"315":{"position":[[724,89]]}},"keywords":{}}],["flow_materi",{"_index":6252,"title":{},"content":{"1303":{"position":[[1270,16],[1387,21],[1443,16],[1589,19]]},"1373":{"position":[[1051,16],[1106,16],[1133,17],[1187,16],[1251,17]]},"1374":{"position":[[1051,16],[1110,16],[1137,17],[1191,16],[1255,17]]},"1397":{"position":[[830,16],[885,16],[912,17],[966,16],[1030,17]]},"1398":{"position":[[829,16],[888,16],[915,17],[969,16],[1033,17]]},"1408":{"position":[[149,16],[204,16],[231,17],[285,16],[349,17]]},"1409":{"position":[[813,16],[868,16],[895,17],[949,16],[1013,17]]}},"keywords":{}}],["flow_publ",{"_index":2565,"title":{},"content":{"236":{"position":[[3500,17],[3536,16],[3612,16]]},"237":{"position":[[1772,17],[1808,16],[1884,16],[2044,16],[2167,16]]},"367":{"position":[[762,16]]},"904":{"position":[[1862,17],[1898,16],[1974,16]]},"911":{"position":[[266,16]]},"917":{"position":[[1371,17],[1407,16],[1483,16]]},"918":{"position":[[2154,17],[2190,16],[2266,16]]},"919":{"position":[[2209,17],[2245,16],[2321,16]]},"927":{"position":[[266,16]]},"931":{"position":[[1524,17],[1560,16],[1636,16]]},"938":{"position":[[266,16]]},"945":{"position":[[144,16],[215,16]]},"954":{"position":[[266,16]]},"965":{"position":[[1371,17],[1407,16],[1483,16]]},"972":{"position":[[266,16]]}},"keywords":{}}],["flow_published_at",{"_index":1003,"title":{},"content":{"67":{"position":[[645,18],[669,17],[946,17],[1276,17],[1445,17],[1809,17],[2022,17]]}},"keywords":{}}],["flow_us",{"_index":1225,"title":{},"content":{"83":{"position":[[1064,9]]},"1197":{"position":[[294,9]]}},"keywords":{}}],["flow_watermark",{"_index":2571,"title":{},"content":{"237":{"position":[[1353,15],[1656,15]]},"238":{"position":[[1109,15]]},"1042":{"position":[[1046,18]]},"1043":{"position":[[1710,18]]},"1051":{"position":[[1972,18]]},"1059":{"position":[[1765,18]]}},"keywords":{}}],["flowctl",{"_index":599,"title":{"26":{"position":[[5,8]]},"31":{"position":[[0,8]]},"57":{"position":[[0,7]]},"60":{"position":[[0,7]]},"61":{"position":[[24,8]]},"81":{"position":[[11,8]]},"257":{"position":[[0,7]]},"265":{"position":[[25,7]]},"282":{"position":[[25,7]]}},"content":{"26":{"position":[[121,8]]},"29":{"position":[[132,7]]},"31":{"position":[[1,7],[79,8],[254,7],[338,7]]},"58":{"position":[[1,7],[258,8],[759,7]]},"59":{"position":[[24,7]]},"60":{"position":[[1,7],[160,7],[893,8],[1080,7],[1170,7],[1201,7],[1222,7]]},"61":{"position":[[1,7],[407,8],[631,7],[960,7],[1214,7],[1251,7],[1291,7]]},"62":{"position":[[71,7],[213,7]]},"63":{"position":[[88,7],[113,7],[1005,7],[1032,7],[1184,7]]},"64":{"position":[[419,8],[817,7],[934,7]]},"68":{"position":[[676,7],[712,7],[747,7],[842,7],[1171,7]]},"79":{"position":[[317,7]]},"81":{"position":[[867,7]]},"87":{"position":[[650,7],[745,7]]},"94":{"position":[[572,8],[987,8]]},"103":{"position":[[395,7]]},"135":{"position":[[17,7],[589,7],[824,8],[984,7]]},"154":{"position":[[189,7],[2067,8]]},"169":{"position":[[250,8],[260,7],[497,8],[1006,7],[1016,7],[1181,7],[1250,7],[1486,7],[1771,8]]},"179":{"position":[[348,7]]},"183":{"position":[[4061,7],[4459,7]]},"228":{"position":[[1336,8],[1380,7]]},"229":{"position":[[135,8],[145,7],[592,7]]},"253":{"position":[[852,7]]},"255":{"position":[[13,7],[147,7],[946,8],[1113,7]]},"257":{"position":[[0,7],[93,8],[190,8]]},"260":{"position":[[55,7]]},"262":{"position":[[58,7]]},"263":{"position":[[82,8],[102,8],[180,7],[236,7],[256,7],[719,7],[823,7]]},"264":{"position":[[357,7],[526,7],[704,7],[943,8]]},"266":{"position":[[314,8],[473,7],[598,7]]},"267":{"position":[[2018,7]]},"268":{"position":[[1795,7],[1897,7]]},"269":{"position":[[1252,7],[1359,7]]},"270":{"position":[[202,8],[280,7],[526,7],[748,7],[1664,7],[1865,7],[1975,7]]},"273":{"position":[[58,7]]},"274":{"position":[[500,8],[578,7],[849,7],[1096,7],[1280,7],[1362,7],[1492,7],[1650,7]]},"275":{"position":[[679,7],[918,7]]},"281":{"position":[[673,7]]},"283":{"position":[[58,7]]},"284":{"position":[[11,8],[89,7],[316,7],[415,7],[541,7]]},"285":{"position":[[231,8]]},"295":{"position":[[1730,8],[1830,7]]},"296":{"position":[[3724,8],[3734,7],[5718,7],[6791,8],[6801,7]]},"307":{"position":[[747,7],[789,8]]},"308":{"position":[[917,8]]},"309":{"position":[[1738,7]]},"313":{"position":[[852,7]]},"315":{"position":[[25,7],[152,7],[252,7],[1725,7]]},"316":{"position":[[13,7],[149,7],[1271,8],[1438,7]]},"340":{"position":[[17,7],[346,7]]},"341":{"position":[[83,7],[118,7],[199,7],[326,7]]},"382":{"position":[[136,7]]},"444":{"position":[[139,7]]},"683":{"position":[[216,7]]},"988":{"position":[[24,7]]},"1003":{"position":[[24,7]]},"1008":{"position":[[974,8],[1120,7],[1904,7]]},"1067":{"position":[[378,7],[582,8]]},"1081":{"position":[[154,7]]},"1200":{"position":[[576,7]]},"1228":{"position":[[63,7]]},"1446":{"position":[[230,8],[417,7]]},"1461":{"position":[[2184,7]]},"1470":{"position":[[320,7]]},"1471":{"position":[[5,7],[22,7],[260,7],[306,7],[423,7],[812,7],[1094,7],[1111,7]]}},"keywords":{}}],["flows'",{"_index":5971,"title":{},"content":{"1282":{"position":[[434,7]]},"1288":{"position":[[146,7]]},"1310":{"position":[[449,7]]}},"keywords":{}}],["flowtcl",{"_index":2687,"title":{},"content":{"253":{"position":[[142,8],[370,8]]},"295":{"position":[[1571,8]]},"296":{"position":[[4221,7]]},"313":{"position":[[142,8],[370,8]]},"315":{"position":[[700,7]]}},"keywords":{}}],["flow’",{"_index":2277,"title":{},"content":{"210":{"position":[[493,6]]},"319":{"position":[[1,6],[432,6],[659,6],[1074,6],[1389,6]]},"326":{"position":[[1829,6]]},"1465":{"position":[[252,6]]}},"keywords":{}}],["flush",{"_index":34,"title":{},"content":{"1":{"position":[[418,5],[510,5]]},"3":{"position":[[177,7]]},"343":{"position":[[952,5]]},"1292":{"position":[[435,5]]},"1306":{"position":[[435,5]]},"1329":{"position":[[435,5]]},"1434":{"position":[[1475,5],[1617,7]]},"1443":{"position":[[550,5],[754,6],[902,7],[1178,5]]}},"keywords":{}}],["flushinterv",{"_index":45,"title":{},"content":{"1":{"position":[[564,14]]}},"keywords":{}}],["focu",{"_index":798,"title":{},"content":{"53":{"position":[[189,5]]}},"keywords":{}}],["focus",{"_index":2497,"title":{},"content":{"236":{"position":[[21,7]]},"323":{"position":[[1847,7]]},"330":{"position":[[508,7]]}},"keywords":{}}],["folder",{"_index":2067,"title":{},"content":{"183":{"position":[[916,7],[940,7],[1020,7]]},"236":{"position":[[1820,6]]},"254":{"position":[[13,6]]},"267":{"position":[[1306,7],[1330,7],[1444,7],[1618,7]]},"270":{"position":[[935,7],[959,7],[1073,7]]},"296":{"position":[[13,6],[4075,6]]},"314":{"position":[[13,6]]},"315":{"position":[[554,6]]},"499":{"position":[[77,6]]},"500":{"position":[[204,7]]},"502":{"position":[[95,6],[1627,7]]},"504":{"position":[[9,7],[260,7]]},"562":{"position":[[277,7]]},"1008":{"position":[[1203,6],[1309,6],[1349,6],[1389,6],[1979,6]]}},"keywords":{}}],["folderscan",{"_index":3906,"title":{},"content":{"506":{"position":[[82,13]]}},"keywords":{}}],["folderssurveysticket",{"_index":3919,"title":{},"content":{"506":{"position":[[367,20]]}},"keywords":{}}],["follow",{"_index":127,"title":{},"content":{"3":{"position":[[617,9]]},"14":{"position":[[211,9]]},"56":{"position":[[58,9]]},"68":{"position":[[1293,9]]},"69":{"position":[[61,9]]},"71":{"position":[[262,9]]},"92":{"position":[[650,9]]},"99":{"position":[[493,9]]},"120":{"position":[[66,9]]},"131":{"position":[[5,9]]},"132":{"position":[[291,9]]},"138":{"position":[[757,6]]},"142":{"position":[[728,6]]},"160":{"position":[[550,9]]},"162":{"position":[[1120,9]]},"171":{"position":[[121,6]]},"172":{"position":[[120,6]]},"173":{"position":[[232,9]]},"176":{"position":[[82,6]]},"183":{"position":[[976,9],[1748,10]]},"191":{"position":[[442,6]]},"193":{"position":[[653,8]]},"197":{"position":[[779,9]]},"199":{"position":[[4,6],[52,10]]},"200":{"position":[[61,9]]},"203":{"position":[[237,9]]},"209":{"position":[[541,9],[719,6]]},"221":{"position":[[374,9],[643,10]]},"225":{"position":[[63,9]]},"228":{"position":[[55,6]]},"229":{"position":[[56,6]]},"234":{"position":[[50,9],[537,6]]},"237":{"position":[[3009,9],[3267,9]]},"239":{"position":[[524,9]]},"240":{"position":[[207,9]]},"242":{"position":[[396,9]]},"247":{"position":[[52,9]]},"254":{"position":[[123,6],[211,9]]},"267":{"position":[[1400,9]]},"268":{"position":[[51,6],[253,7],[568,7]]},"269":{"position":[[58,6],[209,7]]},"270":{"position":[[1029,9]]},"284":{"position":[[459,6]]},"285":{"position":[[185,6]]},"289":{"position":[[247,9]]},"290":{"position":[[970,7]]},"296":{"position":[[123,6],[211,9],[5140,9]]},"300":{"position":[[226,9]]},"307":{"position":[[997,9]]},"309":{"position":[[2076,9],[2681,8]]},"314":{"position":[[123,6],[211,9]]},"315":{"position":[[132,9],[1224,9]]},"335":{"position":[[17,9]]},"340":{"position":[[188,10]]},"345":{"position":[[97,9]]},"347":{"position":[[47,9]]},"348":{"position":[[1,6]]},"349":{"position":[[257,9]]},"353":{"position":[[36,9]]},"359":{"position":[[16,9]]},"366":{"position":[[47,10]]},"367":{"position":[[211,9],[797,6]]},"371":{"position":[[49,10]]},"381":{"position":[[5,9]]},"390":{"position":[[182,9]]},"393":{"position":[[49,10]]},"395":{"position":[[342,9]]},"398":{"position":[[49,10]]},"406":{"position":[[1,6]]},"410":{"position":[[14,9]]},"421":{"position":[[5,9]]},"435":{"position":[[19,9]]},"443":{"position":[[5,9]]},"446":{"position":[[58,9],[167,9]]},"451":{"position":[[5,9]]},"457":{"position":[[5,9]]},"463":{"position":[[5,9]]},"469":{"position":[[105,9]]},"475":{"position":[[42,9]]},"476":{"position":[[1,6]]},"477":{"position":[[545,6],[708,6]]},"478":{"position":[[403,6],[564,8]]},"487":{"position":[[285,9]]},"499":{"position":[[120,9],[198,9]]},"506":{"position":[[5,9]]},"512":{"position":[[5,9]]},"515":{"position":[[329,6],[816,10]]},"520":{"position":[[133,9]]},"529":{"position":[[152,9],[845,9]]},"537":{"position":[[40,9]]},"548":{"position":[[559,9]]},"550":{"position":[[5,9]]},"552":{"position":[[704,8]]},"562":{"position":[[47,10]]},"568":{"position":[[5,9]]},"571":{"position":[[286,6]]},"573":{"position":[[16,9]]},"574":{"position":[[253,9]]},"580":{"position":[[5,9]]},"584":{"position":[[16,9]]},"585":{"position":[[243,9]]},"597":{"position":[[42,9]]},"598":{"position":[[509,6],[672,6]]},"599":{"position":[[403,6],[564,8]]},"605":{"position":[[5,9],[159,9]]},"609":{"position":[[126,6]]},"617":{"position":[[228,6]]},"619":{"position":[[16,9]]},"622":{"position":[[5,9]]},"628":{"position":[[5,9]]},"634":{"position":[[112,9],[190,9]]},"642":{"position":[[56,9]]},"645":{"position":[[186,10]]},"646":{"position":[[295,9]]},"649":{"position":[[128,9],[508,9]]},"652":{"position":[[186,10]]},"654":{"position":[[16,9]]},"667":{"position":[[5,9]]},"682":{"position":[[5,9]]},"697":{"position":[[5,9]]},"703":{"position":[[40,9]]},"709":{"position":[[5,9]]},"710":{"position":[[40,9]]},"715":{"position":[[5,9]]},"723":{"position":[[94,9],[183,8]]},"729":{"position":[[61,8]]},"735":{"position":[[16,9]]},"738":{"position":[[40,9]]},"744":{"position":[[5,9]]},"750":{"position":[[70,10]]},"752":{"position":[[36,10]]},"753":{"position":[[90,9],[350,6]]},"758":{"position":[[49,10]]},"759":{"position":[[177,7]]},"766":{"position":[[70,10]]},"767":{"position":[[496,6],[936,9],[1048,9],[1473,10],[1714,9],[2205,9]]},"771":{"position":[[49,10]]},"772":{"position":[[188,7]]},"788":{"position":[[132,9]]},"789":{"position":[[68,10]]},"790":{"position":[[29,6]]},"792":{"position":[[774,6],[1230,9],[1353,9],[1654,9],[2197,9]]},"793":{"position":[[309,6]]},"798":{"position":[[49,10]]},"799":{"position":[[175,7]]},"807":{"position":[[68,10]]},"808":{"position":[[325,6]]},"813":{"position":[[49,10]]},"814":{"position":[[175,7]]},"823":{"position":[[68,10]]},"824":{"position":[[566,6],[1005,9],[1114,9],[1537,10],[1776,9],[2319,9]]},"829":{"position":[[49,10]]},"830":{"position":[[175,7]]},"849":{"position":[[2209,9]]},"854":{"position":[[5,9]]},"863":{"position":[[1,6]]},"864":{"position":[[146,9],[440,8]]},"866":{"position":[[326,6]]},"871":{"position":[[16,9]]},"875":{"position":[[1,6]]},"876":{"position":[[146,9],[440,8]]},"878":{"position":[[336,6]]},"882":{"position":[[5,9]]},"888":{"position":[[5,9]]},"894":{"position":[[59,9]]},"895":{"position":[[1,6]]},"899":{"position":[[45,9]]},"900":{"position":[[90,9]]},"903":{"position":[[50,10]]},"904":{"position":[[565,6],[1003,9],[1315,9]]},"908":{"position":[[49,10]]},"909":{"position":[[765,6]]},"910":{"position":[[78,10]]},"914":{"position":[[161,9]]},"915":{"position":[[50,10]]},"916":{"position":[[29,6]]},"917":{"position":[[233,9]]},"918":{"position":[[774,6],[1206,9],[1607,9]]},"919":{"position":[[309,6],[789,9],[2405,9]]},"924":{"position":[[49,10]]},"925":{"position":[[765,6]]},"926":{"position":[[78,10]]},"930":{"position":[[50,10]]},"931":{"position":[[329,6],[972,9]]},"935":{"position":[[49,10]]},"936":{"position":[[765,6]]},"937":{"position":[[78,10]]},"942":{"position":[[631,9]]},"943":{"position":[[644,9],[806,9]]},"945":{"position":[[819,8]]},"951":{"position":[[49,10]]},"952":{"position":[[765,6]]},"953":{"position":[[78,10]]},"956":{"position":[[5,9]]},"963":{"position":[[59,10]]},"965":{"position":[[233,9]]},"969":{"position":[[49,10]]},"970":{"position":[[765,6]]},"971":{"position":[[78,10]]},"979":{"position":[[5,9]]},"985":{"position":[[32,9]]},"987":{"position":[[115,10]]},"989":{"position":[[1217,6]]},"994":{"position":[[5,9]]},"1000":{"position":[[32,9]]},"1002":{"position":[[115,10]]},"1004":{"position":[[1300,6]]},"1008":{"position":[[163,9],[1502,6],[1622,9]]},"1012":{"position":[[5,9]]},"1020":{"position":[[1032,9]]},"1025":{"position":[[40,9]]},"1032":{"position":[[101,9]]},"1039":{"position":[[265,9]]},"1041":{"position":[[29,6]]},"1042":{"position":[[37,9]]},"1043":{"position":[[309,6],[701,9],[1769,9]]},"1050":{"position":[[944,6]]},"1051":{"position":[[565,6],[957,9]]},"1059":{"position":[[329,6],[721,9]]},"1065":{"position":[[5,9]]},"1067":{"position":[[77,9]]},"1073":{"position":[[5,9]]},"1080":{"position":[[5,9]]},"1090":{"position":[[1,6]]},"1096":{"position":[[63,9]]},"1099":{"position":[[5,9]]},"1104":{"position":[[5,9]]},"1110":{"position":[[5,9]]},"1118":{"position":[[348,9],[602,9]]},"1128":{"position":[[5,9]]},"1136":{"position":[[351,6]]},"1176":{"position":[[193,9]]},"1177":{"position":[[49,9]]},"1194":{"position":[[143,9]]},"1196":{"position":[[166,7]]},"1204":{"position":[[70,6]]},"1236":{"position":[[56,10]]},"1245":{"position":[[180,6]]},"1247":{"position":[[16,9]]},"1264":{"position":[[56,10]]},"1272":{"position":[[67,10]]},"1282":{"position":[[29,6]]},"1283":{"position":[[325,6]]},"1289":{"position":[[1423,9]]},"1292":{"position":[[470,9],[511,7]]},"1298":{"position":[[1255,9]]},"1303":{"position":[[329,6]]},"1306":{"position":[[470,9],[511,7]]},"1310":{"position":[[29,6],[744,9]]},"1311":{"position":[[162,6]]},"1322":{"position":[[1642,9]]},"1329":{"position":[[470,9],[511,7]]},"1335":{"position":[[1290,9]]},"1346":{"position":[[1256,9]]},"1358":{"position":[[793,9]]},"1361":{"position":[[44,10]]},"1370":{"position":[[1102,9]]},"1373":{"position":[[547,6],[939,9]]},"1374":{"position":[[547,6],[939,9]]},"1383":{"position":[[47,9]]},"1394":{"position":[[1065,9]]},"1397":{"position":[[326,6],[718,9]]},"1398":{"position":[[325,6],[717,9]]},"1407":{"position":[[29,6]]},"1408":{"position":[[37,9]]},"1409":{"position":[[309,6],[701,9],[1042,9]]},"1429":{"position":[[327,9]]},"1442":{"position":[[1184,9]]},"1452":{"position":[[176,9]]},"1456":{"position":[[154,9]]},"1457":{"position":[[127,9]]},"1459":{"position":[[1605,9]]},"1473":{"position":[[389,9]]},"1477":{"position":[[359,8],[512,8]]},"1480":{"position":[[83,9]]}},"keywords":{}}],["followingpermiss",{"_index":5433,"title":{},"content":{"1122":{"position":[[59,21]]}},"keywords":{}}],["followingthi",{"_index":5772,"title":{},"content":{"1165":{"position":[[316,13]]}},"keywords":{}}],["foo",{"_index":425,"title":{},"content":{"14":{"position":[[496,4],[705,3],[888,3],[928,3],[1212,3]]},"94":{"position":[[2587,5]]},"98":{"position":[[394,5]]},"100":{"position":[[401,3],[458,3],[520,3]]},"154":{"position":[[584,4],[754,5],[866,4],[990,4]]},"912":{"position":[[915,3],[1221,3]]}},"keywords":{}}],["foo.flow.yaml",{"_index":1316,"title":{},"content":{"92":{"position":[[28,13],[418,13]]}},"keywords":{}}],["foo.flow.yamlimport",{"_index":1318,"title":{},"content":{"92":{"position":[[164,20]]}},"keywords":{}}],["foo.flow.yamlwer",{"_index":1332,"title":{},"content":{"92":{"position":[[912,17]]}},"keywords":{}}],["foo/a",{"_index":1070,"title":{},"content":{"73":{"position":[[225,8]]}},"keywords":{}}],["foo/b",{"_index":1071,"title":{},"content":{"73":{"position":[[234,7]]}},"keywords":{}}],["foo/c/0",{"_index":1072,"title":{},"content":{"73":{"position":[[242,9]]}},"keywords":{}}],["foo/c/1",{"_index":1073,"title":{},"content":{"73":{"position":[[252,9]]}},"keywords":{}}],["foobar",{"_index":1338,"title":{},"content":{"94":{"position":[[654,6]]}},"keywords":{}}],["forc",{"_index":1260,"title":{},"content":{"84":{"position":[[269,6]]},"595":{"position":[[1271,7]]},"910":{"position":[[236,7]]},"922":{"position":[[2053,5]]},"926":{"position":[[236,7]]},"937":{"position":[[236,7]]},"953":{"position":[[236,7]]},"971":{"position":[[236,7]]},"1292":{"position":[[581,5]]},"1306":{"position":[[581,5]]},"1329":{"position":[[581,5]]}},"keywords":{}}],["foreign",{"_index":4777,"title":{},"content":{"842":{"position":[[3010,7],[3377,7]]},"1140":{"position":[[3248,7]]},"1292":{"position":[[626,7]]},"1306":{"position":[[626,7]]},"1316":{"position":[[3248,7]]},"1329":{"position":[[626,7]]},"1340":{"position":[[3248,7]]},"1351":{"position":[[3248,7]]},"1370":{"position":[[1126,7]]},"1379":{"position":[[1572,7]]},"1403":{"position":[[1572,7]]},"1414":{"position":[[1572,7]]},"1431":{"position":[[3271,7]]}},"keywords":{}}],["forev",{"_index":56,"title":{},"content":{"1":{"position":[[803,8]]},"207":{"position":[[599,8]]},"239":{"position":[[1040,8]]}},"keywords":{}}],["forget",{"_index":2420,"title":{},"content":{"212":{"position":[[384,6]]},"243":{"position":[[379,6]]},"297":{"position":[[130,6]]}},"keywords":{}}],["forgotten",{"_index":3202,"title":{},"content":{"331":{"position":[[632,10]]}},"keywords":{}}],["form",{"_index":295,"title":{},"content":{"11":{"position":[[218,4]]},"16":{"position":[[89,4]]},"69":{"position":[[416,5],[440,5]]},"73":{"position":[[61,4]]},"76":{"position":[[684,5],[806,5]]},"82":{"position":[[389,5],[2907,5]]},"89":{"position":[[183,4]]},"107":{"position":[[1365,5]]},"140":{"position":[[232,5],[242,4]]},"144":{"position":[[418,4],[518,4]]},"190":{"position":[[252,4]]},"192":{"position":[[223,4]]},"217":{"position":[[423,4]]},"237":{"position":[[2579,4]]},"254":{"position":[[3859,4]]},"290":{"position":[[387,4]]},"291":{"position":[[173,4],[732,4]]},"296":{"position":[[7083,5]]},"301":{"position":[[333,4]]},"302":{"position":[[173,4],[732,4]]},"370":{"position":[[1453,5],[1834,4]]},"406":{"position":[[151,4]]},"480":{"position":[[1002,4],[1307,4]]},"757":{"position":[[892,5]]},"770":{"position":[[892,5]]},"797":{"position":[[892,5]]},"812":{"position":[[892,5]]},"828":{"position":[[892,5]]},"867":{"position":[[785,5]]},"907":{"position":[[1236,5]]},"923":{"position":[[1236,5]]},"934":{"position":[[1236,5]]},"950":{"position":[[1236,5]]},"968":{"position":[[1236,5]]},"1045":{"position":[[963,5],[1249,4]]},"1053":{"position":[[963,5],[1249,4]]},"1061":{"position":[[963,5],[1249,4]]},"1138":{"position":[[1125,4]]},"1188":{"position":[[120,4]]},"1452":{"position":[[911,4],[1126,4]]}},"keywords":{}}],["form.sav",{"_index":4532,"title":{},"content":{"726":{"position":[[331,9]]}},"keywords":{}}],["formal",{"_index":314,"title":{},"content":{"11":{"position":[[672,6]]}},"keywords":{}}],["format",{"_index":427,"title":{"603":{"position":[[8,7]]},"616":{"position":[[12,11]]}},"content":{"14":{"position":[[517,7],[772,7]]},"56":{"position":[[68,7]]},"68":{"position":[[657,7]]},"69":{"position":[[71,7]]},"83":{"position":[[1184,9],[1311,9]]},"120":{"position":[[76,7]]},"156":{"position":[[441,8]]},"162":{"position":[[1884,9],[2093,9]]},"183":{"position":[[1837,7],[3240,7],[3643,7],[4314,9]]},"189":{"position":[[124,6],[838,7]]},"190":{"position":[[1229,8],[1452,7]]},"221":{"position":[[572,9]]},"222":{"position":[[971,9]]},"225":{"position":[[170,9]]},"228":{"position":[[1398,6]]},"254":{"position":[[351,7],[1419,7]]},"255":{"position":[[824,6]]},"288":{"position":[[915,9]]},"290":{"position":[[982,6]]},"299":{"position":[[830,9]]},"316":{"position":[[1149,6]]},"387":{"position":[[1245,7]]},"402":{"position":[[587,9]]},"417":{"position":[[1637,6],[1729,6],[2303,9]]},"418":{"position":[[159,7]]},"419":{"position":[[852,7],[877,7],[950,6]]},"424":{"position":[[233,6]]},"439":{"position":[[416,7]]},"440":{"position":[[868,7],[893,7],[966,6]]},"448":{"position":[[993,7]]},"454":{"position":[[423,6]]},"460":{"position":[[237,6]]},"477":{"position":[[719,6]]},"478":{"position":[[517,7]]},"496":{"position":[[443,6]]},"502":{"position":[[1285,6],[1377,6]]},"504":{"position":[[784,7],[809,7]]},"517":{"position":[[1507,6],[2059,6],[2672,6],[3833,6]]},"526":{"position":[[75,6]]},"534":{"position":[[1472,6]]},"545":{"position":[[1239,6],[1331,6],[1698,9]]},"546":{"position":[[896,7]]},"547":{"position":[[853,7],[878,7],[951,6]]},"556":{"position":[[1716,6],[2090,6]]},"573":{"position":[[740,6]]},"584":{"position":[[795,6]]},"599":{"position":[[517,7]]},"603":{"position":[[43,6],[82,7],[154,7],[265,7]]},"606":{"position":[[184,6]]},"611":{"position":[[813,6],[1080,6]]},"616":{"position":[[63,10]]},"631":{"position":[[237,6],[376,6]]},"637":{"position":[[799,6],[891,6]]},"638":{"position":[[188,7]]},"639":{"position":[[782,7],[807,7]]},"654":{"position":[[477,6]]},"670":{"position":[[533,6]]},"675":{"position":[[193,6]]},"685":{"position":[[357,6]]},"700":{"position":[[185,6]]},"706":{"position":[[185,6]]},"720":{"position":[[699,6]]},"741":{"position":[[300,6]]},"747":{"position":[[705,6],[922,6]]},"753":{"position":[[825,6]]},"754":{"position":[[380,7],[550,7],[1322,7]]},"793":{"position":[[796,6]]},"794":{"position":[[253,7],[592,7],[1526,7]]},"809":{"position":[[253,7],[592,7],[1526,7]]},"825":{"position":[[253,7],[592,7],[1362,7]]},"846":{"position":[[336,9]]},"859":{"position":[[528,6]]},"879":{"position":[[145,6]]},"885":{"position":[[486,6]]},"891":{"position":[[189,6]]},"895":{"position":[[209,7]]},"897":{"position":[[97,6]]},"959":{"position":[[241,6]]},"982":{"position":[[243,6]]},"1009":{"position":[[865,6]]},"1015":{"position":[[299,6]]},"1021":{"position":[[1796,6],[1888,6]]},"1022":{"position":[[225,7]]},"1023":{"position":[[833,7],[858,7],[931,6]]},"1028":{"position":[[108,6],[246,6]]},"1031":{"position":[[647,9]]},"1047":{"position":[[689,9]]},"1055":{"position":[[689,9]]},"1063":{"position":[[689,9]]},"1070":{"position":[[684,6]]},"1076":{"position":[[646,6]]},"1085":{"position":[[799,6],[1202,7]]},"1094":{"position":[[368,7]]},"1107":{"position":[[168,6]]},"1113":{"position":[[237,6]]},"1133":{"position":[[862,6]]},"1164":{"position":[[352,8],[425,8],[457,8],[492,8],[587,7],[620,7]]},"1172":{"position":[[458,8],[511,8],[610,8],[699,8],[747,8],[838,8]]},"1196":{"position":[[178,6]]},"1206":{"position":[[418,7]]},"1222":{"position":[[458,8],[511,8],[610,8],[699,8],[747,8],[838,8]]},"1272":{"position":[[161,10]]},"1286":{"position":[[138,7],[159,7],[649,7],[1612,7]]},"1291":{"position":[[68,7]]},"1292":{"position":[[674,6]]},"1301":{"position":[[138,7],[159,7],[649,7],[1448,7]]},"1305":{"position":[[68,7]]},"1306":{"position":[[674,6]]},"1310":{"position":[[574,6]]},"1322":{"position":[[971,9]]},"1325":{"position":[[138,7],[159,7],[649,7],[1612,7]]},"1328":{"position":[[68,7]]},"1329":{"position":[[674,6]]},"1335":{"position":[[971,9],[1120,6]]},"1346":{"position":[[1086,6]]},"1382":{"position":[[393,9]]},"1429":{"position":[[337,7]]},"1448":{"position":[[257,10]]},"1480":{"position":[[93,7]]}},"keywords":{}}],["format<account",{"_index":4283,"title":{},"content":{"598":{"position":[[683,17]]}},"keywords":{}}],["formathost:port",{"_index":5978,"title":{},"content":{"1289":{"position":[[1254,16]]},"1298":{"position":[[1086,16]]},"1303":{"position":[[965,16]]},"1322":{"position":[[1473,16]]}},"keywords":{}}],["formerli",{"_index":2676,"title":{},"content":{"250":{"position":[[1136,9]]},"571":{"position":[[894,9]]}},"keywords":{}}],["formsticket",{"_index":5457,"title":{},"content":{"1128":{"position":[[342,11]]}},"keywords":{}}],["formula",{"_index":5157,"title":{"1006":{"position":[[0,7]]}},"content":{"1006":{"position":[[39,7],[132,7],[197,7],[477,7]]}},"keywords":{}}],["formulavalu",{"_index":4319,"title":{},"content":{"616":{"position":[[574,12]]}},"keywords":{}}],["forth",{"_index":913,"title":{},"content":{"61":{"position":[[148,5]]}},"keywords":{}}],["fortran",{"_index":6313,"title":{},"content":{"1379":{"position":[[1625,7]]},"1403":{"position":[[1625,7]]},"1414":{"position":[[1625,7]]}},"keywords":{}}],["forumsdiscuss",{"_index":3910,"title":{},"content":{"506":{"position":[[186,16]]}},"keywords":{}}],["forward",{"_index":1218,"title":{},"content":{"83":{"position":[[433,11]]},"174":{"position":[[302,8]]},"259":{"position":[[1528,8],[3082,8]]},"271":{"position":[[33,7]]},"310":{"position":[[300,8]]},"329":{"position":[[1027,7]]},"370":{"position":[[1660,10]]},"785":{"position":[[321,8]]},"1077":{"position":[[708,7]]},"1138":{"position":[[951,10]]}},"keywords":{}}],["found",{"_index":2248,"title":{},"content":{"208":{"position":[[663,5]]},"224":{"position":[[1134,5]]},"268":{"position":[[114,5]]},"269":{"position":[[121,5]]},"345":{"position":[[84,5]]},"351":{"position":[[82,5],[147,5]]},"464":{"position":[[122,5],[226,5]]},"494":{"position":[[99,5]]},"573":{"position":[[920,5]]},"577":{"position":[[247,5]]},"588":{"position":[[242,5]]},"595":{"position":[[654,5]]},"728":{"position":[[113,5]]},"747":{"position":[[522,5]]},"964":{"position":[[357,5]]},"1107":{"position":[[332,5]]},"1133":{"position":[[1026,5]]},"1140":{"position":[[3284,5]]},"1292":{"position":[[710,5]]},"1306":{"position":[[710,5]]},"1316":{"position":[[3284,5]]},"1329":{"position":[[710,5]]},"1340":{"position":[[3284,5]]},"1351":{"position":[[3284,5]]},"1379":{"position":[[1676,5]]},"1392":{"position":[[306,5]]},"1403":{"position":[[1676,5]]},"1414":{"position":[[1676,5]]},"1431":{"position":[[3307,5]]}},"keywords":{}}],["foundat",{"_index":637,"title":{},"content":{"27":{"position":[[676,10]]}},"keywords":{}}],["foundation'",{"_index":2052,"title":{},"content":{"180":{"position":[[536,12]]}},"keywords":{}}],["foundher",{"_index":5752,"title":{},"content":{"1154":{"position":[[372,10]]}},"keywords":{}}],["four",{"_index":1767,"title":{},"content":{"137":{"position":[[72,4]]},"443":{"position":[[118,5],[208,5],[286,5],[398,5],[479,5]]}},"keywords":{}}],["four_weekly_active_us",{"_index":4202,"title":{},"content":{"575":{"position":[[517,24]]},"586":{"position":[[539,24]]}},"keywords":{}}],["fow",{"_index":867,"title":{},"content":{"58":{"position":[[53,3]]}},"keywords":{}}],["fragment",{"_index":17,"title":{"3":{"position":[[0,8]]}},"content":{"1":{"position":[[224,10],[261,10],[297,8],[449,8],[616,9],[970,8]]},"3":{"position":[[9,8],[404,8],[1078,8]]},"4":{"position":[[27,8]]},"16":{"position":[[1335,8]]},"60":{"position":[[811,9]]},"70":{"position":[[560,8]]},"161":{"position":[[166,8]]},"320":{"position":[[1022,10]]},"491":{"position":[[533,9]]},"664":{"position":[[554,9],[789,9]]},"679":{"position":[[533,9]]},"694":{"position":[[533,9]]},"1471":{"position":[[990,8]]}},"keywords":{}}],["frame_row",{"_index":5660,"title":{},"content":{"1140":{"position":[[3317,9]]},"1316":{"position":[[3317,9]]},"1340":{"position":[[3317,9]]},"1351":{"position":[[3317,9]]},"1431":{"position":[[3340,9]]}},"keywords":{}}],["framework",{"_index":3116,"title":{},"content":{"320":{"position":[[166,9],[526,10]]},"974":{"position":[[116,10]]}},"keywords":{}}],["fraud",{"_index":2835,"title":{},"content":{"278":{"position":[[79,5]]},"279":{"position":[[104,5]]}},"keywords":{}}],["free",{"_index":1488,"title":{},"content":{"104":{"position":[[241,4]]},"168":{"position":[[25,5],[71,4]]},"179":{"position":[[88,5]]},"183":{"position":[[4674,4]]},"188":{"position":[[102,5],[120,4]]},"199":{"position":[[121,4]]},"203":{"position":[[364,4]]},"204":{"position":[[131,4]]},"206":{"position":[[667,4]]},"232":{"position":[[964,5]]},"237":{"position":[[3023,4]]},"238":{"position":[[142,4]]},"239":{"position":[[2839,4]]},"240":{"position":[[4085,4]]},"253":{"position":[[1021,4]]},"266":{"position":[[111,5]]},"288":{"position":[[191,5]]},"299":{"position":[[191,5]]},"313":{"position":[[1021,4]]},"375":{"position":[[212,4],[269,4]]},"377":{"position":[[538,4],[576,4],[1383,4]]},"483":{"position":[[303,4]]},"494":{"position":[[143,4]]},"496":{"position":[[214,4]]},"922":{"position":[[3351,4]]},"940":{"position":[[32,5]]},"1118":{"position":[[997,4]]},"1140":{"position":[[3349,4]]},"1316":{"position":[[3349,4]]},"1340":{"position":[[3349,4]]},"1351":{"position":[[3349,4]]},"1379":{"position":[[1732,4]]},"1403":{"position":[[1732,4]]},"1414":{"position":[[1732,4]]},"1431":{"position":[[3372,4]]},"1456":{"position":[[173,4],[228,4],[295,4],[334,4]]}},"keywords":{}}],["freecallsconfer",{"_index":5394,"title":{},"content":{"1110":{"position":[[225,19]]}},"keywords":{}}],["freetext",{"_index":6315,"title":{},"content":{"1379":{"position":[[1798,8]]},"1403":{"position":[[1798,8]]},"1414":{"position":[[1798,8]]}},"keywords":{}}],["freetextt",{"_index":6317,"title":{},"content":{"1379":{"position":[[1861,13]]},"1403":{"position":[[1861,13]]},"1414":{"position":[[1861,13]]}},"keywords":{}}],["freez",{"_index":5662,"title":{},"content":{"1140":{"position":[[3375,6]]},"1316":{"position":[[3375,6]]},"1340":{"position":[[3375,6]]},"1351":{"position":[[3375,6]]},"1431":{"position":[[3398,6]]}},"keywords":{}}],["frequenc",{"_index":5718,"title":{},"content":{"1144":{"position":[[430,9]]},"1153":{"position":[[57,10]]},"1162":{"position":[[619,9]]},"1170":{"position":[[430,9]]},"1181":{"position":[[57,10]]},"1190":{"position":[[57,10]]},"1213":{"position":[[285,9]]},"1220":{"position":[[285,9]]},"1388":{"position":[[57,10]]},"1422":{"position":[[57,10]]},"1452":{"position":[[295,9],[305,9],[823,10],[1041,10],[1236,9],[1793,10],[2359,9],[2441,9],[2643,9],[2901,9],[3561,10],[3885,10]]},"1453":{"position":[[436,9],[609,9],[964,9]]}},"keywords":{}}],["frequent",{"_index":960,"title":{},"content":{"64":{"position":[[377,10]]},"163":{"position":[[493,10]]},"208":{"position":[[203,8]]},"326":{"position":[[1723,10]]},"480":{"position":[[1643,8]]},"760":{"position":[[808,10]]},"773":{"position":[[808,10]]},"800":{"position":[[808,10]]},"815":{"position":[[808,10]]},"831":{"position":[[808,10]]},"842":{"position":[[2017,10]]},"1036":{"position":[[1076,8]]},"1076":{"position":[[541,10]]},"1451":{"position":[[235,8],[639,8]]}},"keywords":{}}],["fresh",{"_index":2217,"title":{},"content":{"203":{"position":[[260,5]]},"296":{"position":[[7309,5]]},"329":{"position":[[972,5]]},"1006":{"position":[[315,10]]},"1388":{"position":[[793,10]]}},"keywords":{}}],["fresh"",{"_index":3868,"title":{},"content":{"488":{"position":[[575,11]]},"659":{"position":[[732,11]]},"676":{"position":[[575,11]]},"691":{"position":[[575,11]]}},"keywords":{}}],["freshdesk",{"_index":3335,"title":{"505":{"position":[[0,9]]}},"content":{"364":{"position":[[1166,9]]},"507":{"position":[[43,9],[69,9]]},"508":{"position":[[250,9]]},"509":{"position":[[77,9],[127,9],[603,9]]}},"keywords":{}}],["freshdesk:dev",{"_index":3336,"title":{},"content":{"364":{"position":[[1222,13]]},"510":{"position":[[89,13]]}},"keywords":{}}],["friday",{"_index":6531,"title":{},"content":{"1452":{"position":[[1381,7],[1433,8]]}},"keywords":{}}],["friday.su",{"_index":6562,"title":{},"content":{"1452":{"position":[[4353,10]]}},"keywords":{}}],["from.a",{"_index":5210,"title":{},"content":{"1031":{"position":[[133,6]]}},"keywords":{}}],["fromcustom",{"_index":2997,"title":{},"content":{"296":{"position":[[854,13],[2855,13]]}},"keywords":{}}],["fromcustomers(_read",{"_index":3020,"title":{},"content":{"296":{"position":[[5590,20],[6283,20]]}},"keywords":{}}],["fromord",{"_index":1370,"title":{},"content":{"96":{"position":[[154,10]]},"107":{"position":[[1450,10],[2630,10],[3284,10],[4002,10]]},"296":{"position":[[756,10],[2757,10]]}},"keywords":{}}],["fromorders(_read",{"_index":3016,"title":{},"content":{"296":{"position":[[5483,17],[6135,17]]}},"keywords":{}}],["fromoutcom",{"_index":2884,"title":{},"content":{"281":{"position":[[1006,12]]}},"keywords":{}}],["fromoutcomes(read",{"_index":2889,"title":{},"content":{"281":{"position":[[1403,18]]}},"keywords":{}}],["fromtransf",{"_index":2841,"title":{},"content":{"278":{"position":[[1117,13]]}},"keywords":{}}],["front",{"_index":1672,"title":{},"content":{"122":{"position":[[147,5]]},"165":{"position":[[248,6]]}},"keywords":{}}],["frozen",{"_index":4315,"title":{},"content":{"616":{"position":[[128,6],[201,6]]}},"keywords":{}}],["full",{"_index":677,"title":{},"content":{"34":{"position":[[606,4]]},"60":{"position":[[1054,4]]},"125":{"position":[[791,4]]},"138":{"position":[[904,4],[1721,4],[2559,4]]},"140":{"position":[[219,4]]},"141":{"position":[[1729,4]]},"142":{"position":[[875,4],[1746,4],[2637,4]]},"144":{"position":[[413,4]]},"146":{"position":[[10,4],[940,4]]},"149":{"position":[[10,4],[931,4]]},"152":{"position":[[10,4],[916,4]]},"175":{"position":[[208,4]]},"188":{"position":[[145,4]]},"198":{"position":[[175,4]]},"217":{"position":[[861,4]]},"218":{"position":[[2140,4]]},"237":{"position":[[1633,4]]},"270":{"position":[[726,4]]},"290":{"position":[[669,4]]},"291":{"position":[[1950,4]]},"295":{"position":[[983,4]]},"296":{"position":[[712,4],[2713,4],[3034,4],[3999,4],[5156,4]]},"301":{"position":[[609,4]]},"302":{"position":[[1862,4]]},"414":{"position":[[194,4]]},"415":{"position":[[454,4]]},"488":{"position":[[18,4],[285,4],[765,4]]},"529":{"position":[[192,4]]},"590":{"position":[[1081,5]]},"659":{"position":[[175,4],[442,4],[922,4]]},"676":{"position":[[18,4],[285,4],[765,4]]},"683":{"position":[[161,4]]},"691":{"position":[[18,4],[285,4],[765,4]]},"786":{"position":[[83,4]]},"840":{"position":[[1119,4],[1218,4],[1315,4],[1411,4]]},"849":{"position":[[2130,4],[2240,4]]},"899":{"position":[[103,5],[130,5],[164,5],[190,5],[214,5]]},"907":{"position":[[1825,5]]},"910":{"position":[[184,4]]},"923":{"position":[[1825,5]]},"926":{"position":[[184,4]]},"937":{"position":[[184,4]]},"953":{"position":[[184,4]]},"968":{"position":[[1825,5]]},"971":{"position":[[184,4]]},"1006":{"position":[[72,4],[398,4]]},"1020":{"position":[[953,4]]},"1140":{"position":[[3444,4]]},"1192":{"position":[[496,4]]},"1209":{"position":[[313,4]]},"1272":{"position":[[230,4]]},"1292":{"position":[[776,4]]},"1306":{"position":[[776,4]]},"1313":{"position":[[1575,5]]},"1316":{"position":[[3444,4]]},"1329":{"position":[[776,4]]},"1337":{"position":[[1575,5]]},"1340":{"position":[[3444,4]]},"1351":{"position":[[3444,4]]},"1370":{"position":[[1154,4]]},"1379":{"position":[[1962,4]]},"1394":{"position":[[505,4]]},"1403":{"position":[[1962,4]]},"1414":{"position":[[1962,4]]},"1431":{"position":[[3467,4]]},"1440":{"position":[[813,4],[1225,4]]},"1461":{"position":[[4462,4]]},"1470":{"position":[[261,4]]}},"keywords":{}}],["full_refresh",{"_index":3279,"title":{},"content":{"360":{"position":[[210,12]]},"388":{"position":[[468,12]]},"425":{"position":[[244,12],[325,12]]},"449":{"position":[[449,12]]},"455":{"position":[[293,12]]},"461":{"position":[[290,12]]},"467":{"position":[[226,12]]},"473":{"position":[[328,12]]},"518":{"position":[[1628,12]]},"527":{"position":[[378,12]]},"535":{"position":[[393,12]]},"612":{"position":[[393,12]]},"619":{"position":[[753,13]]},"620":{"position":[[288,12]]},"626":{"position":[[189,12]]},"671":{"position":[[286,12]]},"686":{"position":[[280,12],[803,12],[901,12],[1063,12],[1135,12]]},"701":{"position":[[216,12]]},"707":{"position":[[213,12]]},"742":{"position":[[281,12]]},"748":{"position":[[447,12]]},"886":{"position":[[311,12]]},"960":{"position":[[223,12]]},"998":{"position":[[253,12]]},"1016":{"position":[[341,12]]},"1029":{"position":[[221,12]]},"1078":{"position":[[347,12],[813,12],[1241,12],[1900,12]]},"1108":{"position":[[288,12]]},"1114":{"position":[[274,12]]},"1134":{"position":[[318,12],[419,12],[615,12],[696,12],[1451,12],[1544,12],[1633,12],[1841,12],[1925,12],[2004,12]]}},"keywords":{}}],["fulldocu",{"_index":4692,"title":{},"content":{"786":{"position":[[149,13]]}},"keywords":{}}],["fulli",{"_index":1624,"title":{"329":{"position":[[0,5]]}},"content":{"115":{"position":[[444,5]]},"125":{"position":[[501,5]]},"129":{"position":[[124,5]]},"135":{"position":[[699,5]]},"199":{"position":[[134,5]]},"205":{"position":[[331,5]]},"210":{"position":[[136,5]]},"234":{"position":[[253,5]]},"319":{"position":[[732,5]]},"320":{"position":[[2199,5]]},"370":{"position":[[1098,5],[1403,5]]},"757":{"position":[[842,5],[1443,5]]},"770":{"position":[[842,5],[1443,5]]},"797":{"position":[[842,5],[1443,5]]},"812":{"position":[[842,5],[1443,5]]},"828":{"position":[[842,5],[1443,5]]},"859":{"position":[[908,5]]},"867":{"position":[[559,5],[743,5]]},"907":{"position":[[881,5],[1186,5]]},"923":{"position":[[881,5],[1186,5]]},"934":{"position":[[881,5],[1186,5]]},"950":{"position":[[881,5],[1186,5]]},"968":{"position":[[881,5],[1186,5]]},"1045":{"position":[[729,5],[913,5]]},"1053":{"position":[[729,5],[913,5]]},"1061":{"position":[[729,5],[913,5]]},"1182":{"position":[[515,5]]},"1191":{"position":[[519,5]]},"1262":{"position":[[519,5]]},"1389":{"position":[[517,5]]},"1435":{"position":[[591,5]]},"1438":{"position":[[371,5]]},"1439":{"position":[[1628,5]]},"1440":{"position":[[210,5],[1381,5]]},"1443":{"position":[[396,5]]},"1444":{"position":[[892,5]]},"1451":{"position":[[791,5]]},"1452":{"position":[[378,5]]}},"keywords":{}}],["fullread_onli",{"_index":4668,"title":{},"content":{"767":{"position":[[1109,14]]},"792":{"position":[[1414,14]]},"824":{"position":[[1175,14]]}},"keywords":{}}],["fulltext",{"_index":5995,"title":{},"content":{"1292":{"position":[[807,8]]},"1306":{"position":[[807,8]]},"1329":{"position":[[807,8]]}},"keywords":{}}],["fulltextt",{"_index":6319,"title":{},"content":{"1379":{"position":[[2000,13]]},"1403":{"position":[[2000,13]]},"1414":{"position":[[2000,13]]}},"keywords":{}}],["function",{"_index":364,"title":{},"content":{"12":{"position":[[253,12]]},"60":{"position":[[71,10]]},"64":{"position":[[114,9],[854,8]]},"81":{"position":[[2341,9]]},"91":{"position":[[136,9]]},"98":{"position":[[1014,10]]},"105":{"position":[[344,9]]},"107":{"position":[[2706,8],[2917,11],[3189,8]]},"108":{"position":[[26,9]]},"113":{"position":[[167,9],[284,10]]},"115":{"position":[[683,10]]},"158":{"position":[[718,10]]},"183":{"position":[[2806,8],[2821,8]]},"239":{"position":[[1270,11]]},"279":{"position":[[486,9]]},"296":{"position":[[5748,10],[5770,8],[5808,14]]},"315":{"position":[[1753,9],[1774,8],[1812,14]]},"574":{"position":[[97,13]]},"585":{"position":[[97,13]]},"1140":{"position":[[3479,8]]},"1292":{"position":[[854,8]]},"1306":{"position":[[854,8]]},"1316":{"position":[[3479,8]]},"1329":{"position":[[854,8]]},"1340":{"position":[[3479,8]]},"1351":{"position":[[3479,8]]},"1379":{"position":[[2056,8]]},"1403":{"position":[[2056,8]]},"1414":{"position":[[2056,8]]},"1431":{"position":[[3502,8]]}},"keywords":{}}],["fund",{"_index":2836,"title":{},"content":{"278":{"position":[[187,5]]},"280":{"position":[[148,5],[510,6],[553,6],[618,5],[1392,6]]}},"keywords":{}}],["fundament",{"_index":3134,"title":{},"content":{"321":{"position":[[88,13]]}},"keywords":{}}],["further",{"_index":531,"title":{},"content":{"20":{"position":[[246,7]]},"27":{"position":[[544,7]]},"72":{"position":[[623,7]]},"82":{"position":[[3011,7]]},"125":{"position":[[1113,7]]},"154":{"position":[[846,8]]},"159":{"position":[[402,7]]},"161":{"position":[[448,7],[533,7]]},"268":{"position":[[1995,7]]},"269":{"position":[[1457,7]]},"270":{"position":[[2073,7]]},"325":{"position":[[811,7]]},"1437":{"position":[[937,7],[1605,7]]},"1440":{"position":[[1328,7]]}},"keywords":{}}],["furthermor",{"_index":1266,"title":{},"content":{"84":{"position":[[722,12]]}},"keywords":{}}],["fusion",{"_index":5670,"title":{},"content":{"1140":{"position":[[3522,6]]},"1316":{"position":[[3522,6]]},"1340":{"position":[[3522,6]]},"1351":{"position":[[3522,6]]},"1379":{"position":[[2108,6]]},"1403":{"position":[[2108,6]]},"1414":{"position":[[2108,6]]},"1431":{"position":[[3545,6]]}},"keywords":{}}],["futur",{"_index":678,"title":{},"content":{"34":{"position":[[670,6]]},"68":{"position":[[1514,7]]},"112":{"position":[[584,7]]},"210":{"position":[[2026,6]]},"237":{"position":[[2761,7]]},"290":{"position":[[1796,6]]},"301":{"position":[[1761,6]]},"379":{"position":[[271,6]]},"419":{"position":[[1245,7]]},"429":{"position":[[1462,7]]},"440":{"position":[[1261,7]]},"547":{"position":[[1247,7]]},"840":{"position":[[1475,6]]},"849":{"position":[[2366,6]]},"922":{"position":[[897,6]]},"1023":{"position":[[1228,7]]},"1032":{"position":[[1530,6],[1736,6]]},"1437":{"position":[[1475,7]]},"1444":{"position":[[467,6]]},"1449":{"position":[[465,6]]},"1471":{"position":[[615,7]]}},"keywords":{}}],["fww",{"_index":6641,"title":{},"content":{"1463":{"position":[[376,4],[652,4],[723,4],[854,4]]}},"keywords":{}}],["g",{"_index":84,"title":{},"content":{"2":{"position":[[425,2]]}},"keywords":{}}],["ga",{"_index":4156,"title":{},"content":{"573":{"position":[[690,3]]},"574":{"position":[[666,2],[690,2]]}},"keywords":{}}],["ga4",{"_index":4221,"title":{},"content":{"584":{"position":[[874,3]]}},"keywords":{}}],["ga:14dayus",{"_index":4168,"title":{},"content":{"574":{"position":[[711,13]]}},"keywords":{}}],["ga:1dayus",{"_index":4170,"title":{},"content":{"574":{"position":[[733,12]]}},"keywords":{}}],["ga:28dayus",{"_index":4172,"title":{},"content":{"574":{"position":[[759,13]]}},"keywords":{}}],["ga:30dayus",{"_index":4174,"title":{},"content":{"574":{"position":[[784,13]]}},"keywords":{}}],["ga:7dayus",{"_index":4175,"title":{},"content":{"574":{"position":[[806,12]]}},"keywords":{}}],["ga:avgsessiondur",{"_index":4177,"title":{},"content":{"574":{"position":[[837,21]]}},"keywords":{}}],["ga:avgtimeonpag",{"_index":4179,"title":{},"content":{"574":{"position":[[871,16]]}},"keywords":{}}],["ga:bouncer",{"_index":4181,"title":{},"content":{"574":{"position":[[898,13]]}},"keywords":{}}],["ga:citi",{"_index":4169,"title":{},"content":{"574":{"position":[[725,7]]}},"keywords":{}}],["ga:contin",{"_index":4171,"title":{},"content":{"574":{"position":[[746,12]]}},"keywords":{}}],["ga:countri",{"_index":4173,"title":{},"content":{"574":{"position":[[773,10]]}},"keywords":{}}],["ga:dat",{"_index":4165,"title":{},"content":{"574":{"position":[[615,7],[798,7]]}},"keywords":{}}],["ga:devicecategori",{"_index":4176,"title":{},"content":{"574":{"position":[[819,17]]}},"keywords":{}}],["ga:entr",{"_index":4185,"title":{},"content":{"574":{"position":[[956,12]]}},"keywords":{}}],["ga:entrancer",{"_index":4183,"title":{},"content":{"574":{"position":[[921,15]]}},"keywords":{}}],["ga:exit",{"_index":4187,"title":{},"content":{"574":{"position":[[981,8]]}},"keywords":{}}],["ga:hostnam",{"_index":4178,"title":{},"content":{"574":{"position":[[859,11]]}},"keywords":{}}],["ga:medium",{"_index":4180,"title":{},"content":{"574":{"position":[[888,9]]}},"keywords":{}}],["ga:metro",{"_index":4182,"title":{},"content":{"574":{"position":[[912,8]]}},"keywords":{}}],["ga:newus",{"_index":4189,"title":{},"content":{"574":{"position":[[1000,11]]}},"keywords":{}}],["ga:operatingsystem",{"_index":4184,"title":{},"content":{"574":{"position":[[937,18]]}},"keywords":{}}],["ga:pagepath",{"_index":4186,"title":{},"content":{"574":{"position":[[969,11]]}},"keywords":{}}],["ga:pageview",{"_index":4191,"title":{},"content":{"574":{"position":[[1029,12]]}},"keywords":{}}],["ga:pageviewspersess",{"_index":4193,"title":{},"content":{"574":{"position":[[1052,22]]}},"keywords":{}}],["ga:region",{"_index":4188,"title":{},"content":{"574":{"position":[[990,9]]}},"keywords":{}}],["ga:seg",{"_index":4227,"title":{},"content":{"585":{"position":[[529,10]]}},"keywords":{}}],["ga:sess",{"_index":4195,"title":{},"content":{"574":{"position":[[1091,11]]}},"keywords":{}}],["ga:sessionsperus",{"_index":4196,"title":{},"content":{"574":{"position":[[1103,18]]}},"keywords":{}}],["ga:socialnetwork",{"_index":4190,"title":{},"content":{"574":{"position":[[1012,16]]}},"keywords":{}}],["ga:sourc",{"_index":4192,"title":{},"content":{"574":{"position":[[1042,9]]}},"keywords":{}}],["ga:subcontin",{"_index":4194,"title":{},"content":{"574":{"position":[[1075,15]]}},"keywords":{}}],["ga:uniquepageview",{"_index":4197,"title":{},"content":{"574":{"position":[[1122,18]]}},"keywords":{}}],["ga:us",{"_index":4198,"title":{},"content":{"574":{"position":[[1141,8]]}},"keywords":{}}],["gain",{"_index":2615,"title":{},"content":{"241":{"position":[[328,6]]},"322":{"position":[[144,4]]}},"keywords":{}}],["galaxi",{"_index":6408,"title":{},"content":{"1417":{"position":[[50,6],[90,6]]},"1420":{"position":[[127,6],[252,6],[307,6]]},"1423":{"position":[[11,6],[274,7]]}},"keywords":{}}],["gaql",{"_index":4103,"title":{},"content":{"550":{"position":[[543,4]]},"556":{"position":[[1029,4],[1113,4]]},"558":{"position":[[71,6]]}},"keywords":{}}],["gateway",{"_index":3761,"title":{},"content":{"454":{"position":[[217,7]]}},"keywords":{}}],["gatewaysproduct",{"_index":5363,"title":{},"content":{"1096":{"position":[[166,15]]}},"keywords":{}}],["gather",{"_index":2017,"title":{},"content":{"173":{"position":[[221,6]]},"174":{"position":[[441,8]]},"239":{"position":[[468,8]]}},"keywords":{}}],["gazett",{"_index":3119,"title":{},"content":{"320":{"position":[[355,8],[483,8],[723,7],[825,7],[966,7],[1238,7],[1470,7]]}},"keywords":{}}],["gazette’",{"_index":3120,"title":{},"content":{"320":{"position":[[507,9]]}},"keywords":{}}],["gc",{"_index":1991,"title":{"1210":{"position":[[20,3]]},"1217":{"position":[[31,3]]}},"content":{"171":{"position":[[50,3]]},"543":{"position":[[36,3]]},"544":{"position":[[250,3]]},"546":{"position":[[1256,3]]},"547":{"position":[[30,3],[1099,3]]},"548":{"position":[[308,3]]},"1120":{"position":[[444,3],[499,3],[652,3],[707,3]]},"1176":{"position":[[389,3]]},"1179":{"position":[[316,3],[566,3],[640,3],[690,3]]},"1180":{"position":[[154,3]]},"1211":{"position":[[40,3],[122,3],[203,3]]},"1214":{"position":[[104,3]]},"1218":{"position":[[40,3],[122,3],[203,3]]},"1221":{"position":[[104,3]]}},"keywords":{}}],["gcloud",{"_index":1164,"title":{},"content":{"82":{"position":[[1607,6]]}},"keywords":{}}],["gcp",{"_index":1165,"title":{},"content":{"82":{"position":[[1760,3],[3287,3],[4084,3]]},"191":{"position":[[2000,4]]},"223":{"position":[[818,4]]},"240":{"position":[[1961,4]]},"475":{"position":[[229,3]]},"482":{"position":[[87,3]]},"597":{"position":[[192,3]]},"1277":{"position":[[315,3]]},"1278":{"position":[[174,3]]},"1298":{"position":[[818,4]]},"1303":{"position":[[1130,3]]},"1346":{"position":[[818,4]]},"1383":{"position":[[1948,4]]}},"keywords":{}}],["gcp_km",{"_index":1177,"title":{},"content":{"82":{"position":[[2430,8],[4571,8]]}},"keywords":{}}],["gcs:dev",{"_index":3297,"title":{},"content":{"363":{"position":[[1060,7]]},"546":{"position":[[89,7]]}},"keywords":{}}],["gener",{"_index":422,"title":{"64":{"position":[[16,11]]},"157":{"position":[[0,11]]},"221":{"position":[[0,7]]},"227":{"position":[[27,8]]},"249":{"position":[[3,8]]},"849":{"position":[[0,7]]}},"content":{"14":{"position":[[153,9]]},"20":{"position":[[439,8]]},"25":{"position":[[95,8],[164,9]]},"33":{"position":[[245,9]]},"54":{"position":[[241,9],[367,9],[469,9]]},"63":{"position":[[404,9],[486,11]]},"64":{"position":[[781,8]]},"67":{"position":[[568,9],[705,9],[973,9]]},"70":{"position":[[389,8]]},"74":{"position":[[858,9]]},"75":{"position":[[39,10],[244,9],[395,9]]},"81":{"position":[[810,8]]},"94":{"position":[[556,9],[581,10],[971,9],[996,10]]},"101":{"position":[[189,9]]},"103":{"position":[[202,9],[302,9],[403,8],[470,8],[661,8]]},"104":{"position":[[32,9],[207,9]]},"119":{"position":[[514,9]]},"145":{"position":[[154,7]]},"148":{"position":[[180,7]]},"151":{"position":[[161,7]]},"157":{"position":[[63,8],[205,8],[339,8]]},"158":{"position":[[621,9]]},"183":{"position":[[1648,8]]},"190":{"position":[[1614,9]]},"192":{"position":[[1790,9],[2043,8]]},"193":{"position":[[691,11]]},"197":{"position":[[1577,9]]},"208":{"position":[[1379,9]]},"210":{"position":[[455,9]]},"221":{"position":[[1196,8]]},"222":{"position":[[441,8]]},"223":{"position":[[407,8],[676,8],[975,9]]},"224":{"position":[[460,8],[925,9]]},"228":{"position":[[849,8]]},"229":{"position":[[554,8]]},"232":{"position":[[440,9]]},"234":{"position":[[198,9]]},"236":{"position":[[432,9],[2112,9],[2692,8]]},"237":{"position":[[2956,9],[3453,10]]},"238":{"position":[[766,9]]},"239":{"position":[[1258,9]]},"247":{"position":[[268,9]]},"249":{"position":[[77,8]]},"270":{"position":[[1672,8],[1711,9]]},"279":{"position":[[711,9]]},"281":{"position":[[681,8],[705,9]]},"284":{"position":[[530,10]]},"288":{"position":[[533,9]]},"290":{"position":[[1278,9]]},"296":{"position":[[3674,8],[3742,8],[4229,9],[4418,9],[4703,9],[4902,9]]},"301":{"position":[[1398,9]]},"306":{"position":[[493,8]]},"310":{"position":[[79,9]]},"315":{"position":[[36,8],[160,8],[260,9],[708,9],[908,9]]},"320":{"position":[[1410,10]]},"323":{"position":[[1124,9]]},"349":{"position":[[309,9]]},"387":{"position":[[955,10]]},"448":{"position":[[898,9]]},"489":{"position":[[161,8],[280,8],[457,8]]},"492":{"position":[[205,9]]},"494":{"position":[[12,9]]},"515":{"position":[[593,8]]},"517":{"position":[[588,10],[1103,7],[1317,7],[1545,9],[1806,7],[2710,9],[3871,9]]},"522":{"position":[[110,10]]},"530":{"position":[[110,10]]},"534":{"position":[[1562,9]]},"550":{"position":[[511,8]]},"554":{"position":[[566,9]]},"558":{"position":[[92,9],[157,10]]},"569":{"position":[[129,10]]},"571":{"position":[[586,8]]},"573":{"position":[[543,9]]},"581":{"position":[[453,10]]},"582":{"position":[[96,10],[197,8]]},"584":{"position":[[474,9]]},"591":{"position":[[220,9]]},"595":{"position":[[1740,9]]},"607":{"position":[[127,10]]},"609":{"position":[[208,8]]},"614":{"position":[[112,10]]},"617":{"position":[[508,8]]},"619":{"position":[[448,9]]},"625":{"position":[[112,10]]},"645":{"position":[[152,8]]},"652":{"position":[[152,8]]},"660":{"position":[[562,9]]},"662":{"position":[[161,8],[280,8],[457,8]]},"665":{"position":[[205,9]]},"670":{"position":[[313,9]]},"675":{"position":[[142,9]]},"677":{"position":[[161,8],[280,8],[457,8]]},"680":{"position":[[205,9]]},"690":{"position":[[174,9]]},"692":{"position":[[161,8],[280,8],[457,8]]},"695":{"position":[[205,9]]},"700":{"position":[[110,10]]},"706":{"position":[[110,10]]},"712":{"position":[[368,8]]},"718":{"position":[[110,8]]},"720":{"position":[[608,9]]},"724":{"position":[[656,8]]},"728":{"position":[[370,9],[488,9]]},"757":{"position":[[1003,7]]},"761":{"position":[[190,9]]},"762":{"position":[[168,8]]},"763":{"position":[[409,10]]},"770":{"position":[[1003,7]]},"774":{"position":[[190,9]]},"775":{"position":[[168,8]]},"776":{"position":[[409,10]]},"797":{"position":[[1003,7]]},"801":{"position":[[196,9]]},"802":{"position":[[168,8]]},"803":{"position":[[415,10]]},"805":{"position":[[260,9]]},"812":{"position":[[1003,7]]},"816":{"position":[[196,9]]},"817":{"position":[[168,8]]},"818":{"position":[[415,10]]},"820":{"position":[[260,9]]},"828":{"position":[[1003,7]]},"832":{"position":[[196,9]]},"833":{"position":[[168,8]]},"834":{"position":[[415,10]]},"836":{"position":[[260,9]]},"839":{"position":[[241,9]]},"840":{"position":[[1926,8]]},"848":{"position":[[278,9]]},"849":{"position":[[3045,8]]},"857":{"position":[[248,9]]},"859":{"position":[[570,9]]},"959":{"position":[[117,10]]},"982":{"position":[[119,10]]},"988":{"position":[[243,9]]},"989":{"position":[[561,8]]},"991":{"position":[[627,9]]},"997":{"position":[[94,9]]},"1003":{"position":[[243,9]]},"1004":{"position":[[644,8]]},"1008":{"position":[[1192,8]]},"1009":{"position":[[690,9]]},"1076":{"position":[[685,9]]},"1083":{"position":[[243,8]]},"1085":{"position":[[551,9],[827,9]]},"1091":{"position":[[1,8]]},"1107":{"position":[[206,9]]},"1118":{"position":[[480,9]]},"1131":{"position":[[222,8]]},"1133":{"position":[[236,10],[900,9]]},"1176":{"position":[[175,9]]},"1204":{"position":[[322,10]]},"1209":{"position":[[333,8]]},"1228":{"position":[[381,10]]},"1245":{"position":[[460,8]]},"1275":{"position":[[334,9]]},"1277":{"position":[[569,10]]},"1292":{"position":[[896,7],[938,8],[979,9]]},"1298":{"position":[[407,8],[676,8],[975,9]]},"1306":{"position":[[896,7],[938,8],[979,9]]},"1322":{"position":[[441,8]]},"1329":{"position":[[896,7],[938,8],[979,9]]},"1335":{"position":[[441,8]]},"1346":{"position":[[407,8],[676,8],[975,9]]},"1354":{"position":[[56,9]]},"1370":{"position":[[1167,9]]},"1379":{"position":[[2153,7]]},"1384":{"position":[[210,8],[248,8],[353,8],[1110,9]]},"1403":{"position":[[2153,7]]},"1414":{"position":[[2153,7]]},"1439":{"position":[[509,8]]}},"keywords":{}}],["generateand",{"_index":970,"title":{},"content":{"64":{"position":[[825,11]]}},"keywords":{}}],["generated.access",{"_index":3934,"title":{},"content":{"515":{"position":[[186,16]]},"571":{"position":[[231,16]]},"609":{"position":[[57,16]]},"617":{"position":[[183,16]]}},"keywords":{}}],["generated.edit",{"_index":5911,"title":{},"content":{"1245":{"position":[[125,14]]}},"keywords":{}}],["genrsa",{"_index":6366,"title":{},"content":{"1384":{"position":[[279,6]]}},"keywords":{}}],["geomcollectio",{"_index":6002,"title":{},"content":{"1292":{"position":[[1014,13]]},"1306":{"position":[[1014,13]]},"1329":{"position":[[1014,13]]}},"keywords":{}}],["geometri",{"_index":6003,"title":{},"content":{"1292":{"position":[[1057,8]]},"1306":{"position":[[1057,8]]},"1329":{"position":[[1057,8]]}},"keywords":{}}],["geometrycol",{"_index":6006,"title":{},"content":{"1292":{"position":[[1095,13]]},"1306":{"position":[[1095,13]]},"1329":{"position":[[1095,13]]}},"keywords":{}}],["get",{"_index":1695,"title":{},"content":{"124":{"position":[[458,4]]},"197":{"position":[[1177,4]]},"254":{"position":[[2967,4]]},"307":{"position":[[2962,4]]}},"keywords":{}}],["get_format",{"_index":6008,"title":{},"content":{"1292":{"position":[[1175,10]]},"1306":{"position":[[1175,10]]},"1329":{"position":[[1175,10]]}},"keywords":{}}],["get_master_pu",{"_index":6010,"title":{},"content":{"1292":{"position":[[1222,13]]},"1306":{"position":[[1222,13]]},"1329":{"position":[[1222,13]]}},"keywords":{}}],["get_source_pu",{"_index":6013,"title":{},"content":{"1292":{"position":[[1284,13]]},"1306":{"position":[[1284,13]]},"1329":{"position":[[1284,13]]}},"keywords":{}}],["ghcr.io/estuary/azur",{"_index":3291,"title":{},"content":{"363":{"position":[[731,21]]}},"keywords":{}}],["ghcr.io/estuary/materi",{"_index":1124,"title":{},"content":{"81":{"position":[[1248,27],[2606,27]]},"120":{"position":[[502,27]]},"307":{"position":[[1555,27],[2423,27]]},"309":{"position":[[2374,27],[2981,27]]},"344":{"position":[[256,27]]},"1120":{"position":[[32,27],[111,27],[191,27],[273,27],[377,27],[471,27],[565,27],[679,27],[758,27],[831,27],[911,27],[989,27],[1069,27],[1154,27],[1247,27],[1337,27],[1411,27],[1483,27],[1553,27],[1628,27],[1700,27],[1773,27],[1845,27],[1918,27],[1995,27]]},"1126":{"position":[[82,27]]},"1139":{"position":[[70,27]]},"1180":{"position":[[231,27]]},"1189":{"position":[[272,27]]},"1197":{"position":[[138,27]]},"1207":{"position":[[363,27]]},"1241":{"position":[[124,27]]},"1248":{"position":[[302,27]]},"1254":{"position":[[74,27]]},"1270":{"position":[[70,27]]},"1287":{"position":[[70,27]]},"1302":{"position":[[70,27]]},"1314":{"position":[[70,27]]},"1326":{"position":[[70,27]]},"1338":{"position":[[70,27]]},"1349":{"position":[[70,27]]},"1357":{"position":[[213,27]]},"1363":{"position":[[82,27]]},"1368":{"position":[[70,27]]},"1377":{"position":[[70,27]]},"1387":{"position":[[312,27],[938,27]]},"1401":{"position":[[70,27]]},"1412":{"position":[[70,27]]},"1421":{"position":[[299,27]]},"1428":{"position":[[70,27]]},"1472":{"position":[[682,27]]},"1480":{"position":[[439,27]]}},"keywords":{}}],["ghcr.io/estuary/sourc",{"_index":838,"title":{},"content":{"56":{"position":[[1154,22]]},"81":{"position":[[300,22]]},"83":{"position":[[975,22]]},"307":{"position":[[1087,22],[1937,22]]},"360":{"position":[[67,22]]},"363":{"position":[[221,22],[286,22],[359,22],[433,22],[513,22],[590,22],[656,22],[810,22],[885,22],[958,22],[1037,22],[1108,22],[1189,22],[1277,22],[1363,22],[1445,22],[1527,22],[1600,22],[1679,22],[1747,22],[1811,22],[1873,22],[1940,22],[2031,22],[2102,22],[2167,22]]},"364":{"position":[[687,22],[756,22],[825,22],[891,22],[1036,22],[1120,22],[1199,22],[1266,22],[1398,22],[1478,22],[1581,22],[1673,22],[1759,22],[1903,22],[1969,22],[2037,22],[2106,22],[2372,22],[2450,22],[2529,22],[2732,22],[2798,22],[2952,22],[3044,22],[3114,22],[3180,22],[3243,22],[3308,22],[3374,22],[3444,22],[3514,22],[3584,22],[3663,22]]},"388":{"position":[[136,22]]},"393":{"position":[[126,22]]},"398":{"position":[[126,22]]},"403":{"position":[[66,22]]},"418":{"position":[[66,22]]},"425":{"position":[[67,22]]},"433":{"position":[[108,22],[519,22]]},"449":{"position":[[136,22]]},"455":{"position":[[67,22]]},"461":{"position":[[67,22]]},"467":{"position":[[67,22]]},"473":{"position":[[136,22]]},"497":{"position":[[66,22]]},"503":{"position":[[66,22]]},"510":{"position":[[66,22]]},"518":{"position":[[136,22]]},"527":{"position":[[136,22]]},"535":{"position":[[136,22]]},"541":{"position":[[67,22]]},"546":{"position":[[66,22]]},"557":{"position":[[136,22]]},"566":{"position":[[66,22]]},"575":{"position":[[122,22]]},"586":{"position":[[122,22]]},"594":{"position":[[66,22]]},"612":{"position":[[136,22]]},"620":{"position":[[66,22]]},"626":{"position":[[67,22]]},"632":{"position":[[67,22]]},"638":{"position":[[66,22]]},"647":{"position":[[66,22]]},"655":{"position":[[66,22]]},"671":{"position":[[67,22]]},"686":{"position":[[127,22]]},"701":{"position":[[67,22]]},"707":{"position":[[67,22]]},"713":{"position":[[67,22]]},"721":{"position":[[136,22]]},"736":{"position":[[66,22]]},"742":{"position":[[67,22]]},"748":{"position":[[67,22]]},"758":{"position":[[126,22]]},"771":{"position":[[126,22]]},"783":{"position":[[66,22]]},"798":{"position":[[126,22]]},"813":{"position":[[126,22]]},"829":{"position":[[126,22]]},"843":{"position":[[67,22]]},"852":{"position":[[67,22]]},"860":{"position":[[136,22]]},"868":{"position":[[66,22]]},"880":{"position":[[66,22]]},"886":{"position":[[67,22]]},"892":{"position":[[66,22]]},"960":{"position":[[67,22]]},"983":{"position":[[67,22]]},"992":{"position":[[66,22]]},"998":{"position":[[67,22]]},"1010":{"position":[[136,22]]},"1016":{"position":[[67,22]]},"1029":{"position":[[67,22]]},"1037":{"position":[[67,22]]},"1071":{"position":[[136,22]]},"1078":{"position":[[66,22]]},"1086":{"position":[[148,22]]},"1102":{"position":[[67,22]]},"1108":{"position":[[66,22]]},"1114":{"position":[[67,22]]},"1134":{"position":[[66,22]]}},"keywords":{}}],["ghrc.io/estuary/sourc",{"_index":3317,"title":{},"content":{"364":{"position":[[546,22],[616,22],[957,22],[1330,22],[1834,22],[2174,22],[2238,22],[2301,22],[2597,22],[2664,22],[2874,22]]}},"keywords":{}}],["gib",{"_index":5721,"title":{},"content":{"1144":{"position":[[673,4]]},"1170":{"position":[[673,4]]},"1213":{"position":[[528,4]]},"1220":{"position":[[528,4]]}},"keywords":{}}],["gib/day",{"_index":5022,"title":{},"content":{"912":{"position":[[964,7]]}},"keywords":{}}],["gigabyt",{"_index":249,"title":{},"content":{"7":{"position":[[541,9]]},"253":{"position":[[828,9]]},"313":{"position":[[828,9]]}},"keywords":{}}],["git",{"_index":655,"title":{},"content":{"31":{"position":[[310,3]]}},"keywords":{}}],["github",{"_index":894,"title":{"528":{"position":[[0,6]]},"531":{"position":[[34,6]]}},"content":{"58":{"position":[[805,6]]},"87":{"position":[[724,6]]},"136":{"position":[[33,6]]},"169":{"position":[[1214,6]]},"175":{"position":[[371,6]]},"179":{"position":[[104,7]]},"266":{"position":[[514,7]]},"364":{"position":[[1236,6]]},"472":{"position":[[250,6]]},"522":{"position":[[394,6]]},"525":{"position":[[250,6]]},"529":{"position":[[57,6]]},"530":{"position":[[41,6],[394,6]]},"531":{"position":[[3,6],[155,6],[284,7],[570,6]]},"532":{"position":[[3,6],[122,6]]},"533":{"position":[[250,6]]},"534":{"position":[[290,6],[518,6],[886,6],[1117,6],[1161,6],[1458,6],[1753,6]]},"659":{"position":[[52,7]]},"660":{"position":[[112,7],[1066,6]]}},"keywords":{}}],["github:dev",{"_index":3337,"title":{},"content":{"364":{"position":[[1289,10]]},"535":{"position":[[159,10]]}},"keywords":{}}],["gitlab",{"_index":2043,"title":{"519":{"position":[[0,6]]},"523":{"position":[[34,6]]}},"content":{"179":{"position":[[96,7]]},"266":{"position":[[506,7]]},"520":{"position":[[53,6]]},"521":{"position":[[216,6],[293,6]]},"522":{"position":[[41,6]]},"523":{"position":[[3,6]]},"524":{"position":[[3,6],[66,6]]}},"keywords":{}}],["gitlab.com",{"_index":4011,"title":{},"content":{"521":{"position":[[236,10],[313,10]]}},"keywords":{}}],["gitlab:dev",{"_index":4016,"title":{},"content":{"527":{"position":[[159,10]]}},"keywords":{}}],["gitop",{"_index":965,"title":{"81":{"position":[[0,6]]}},"content":{"64":{"position":[[527,6]]},"323":{"position":[[2016,6]]},"548":{"position":[[338,6]]}},"keywords":{}}],["gitpod",{"_index":2045,"title":{"267":{"position":[[17,7]]},"268":{"position":[[24,7]]},"269":{"position":[[31,7]]}},"content":{"179":{"position":[[162,7]]},"183":{"position":[[497,6],[681,6],[4693,7]]},"266":{"position":[[339,7],[403,6]]},"267":{"position":[[36,7],[865,6],[1049,6],[1805,7],[1872,6],[2077,6]]},"270":{"position":[[60,7]]}},"keywords":{}}],["give",{"_index":379,"title":{},"content":{"13":{"position":[[215,5]]},"106":{"position":[[721,4]]},"115":{"position":[[1539,4]]},"180":{"position":[[32,4]]},"183":{"position":[[318,4],[2331,4]]},"267":{"position":[[692,4]]},"268":{"position":[[1332,4]]},"269":{"position":[[903,4]]},"270":{"position":[[1570,4]]},"295":{"position":[[1110,4]]},"314":{"position":[[2563,4]]},"332":{"position":[[390,6]]},"840":{"position":[[567,4],[946,4],[1685,4],[2183,4]]},"849":{"position":[[1038,4],[1559,4],[2726,4],[3323,4]]}},"keywords":{}}],["given",{"_index":42,"title":{},"content":{"1":{"position":[[538,5],[824,5]]},"26":{"position":[[176,5]]},"42":{"position":[[403,5]]},"45":{"position":[[455,5]]},"66":{"position":[[444,5]]},"67":{"position":[[1398,5]]},"69":{"position":[[608,6]]},"74":{"position":[[405,5]]},"82":{"position":[[1340,5]]},"89":{"position":[[109,5]]},"96":{"position":[[305,5]]},"99":{"position":[[767,5]]},"107":{"position":[[795,5],[2315,5]]},"120":{"position":[[2703,5]]},"124":{"position":[[546,5]]},"125":{"position":[[1302,5]]},"129":{"position":[[302,5]]},"140":{"position":[[402,5]]},"154":{"position":[[499,5]]},"158":{"position":[[41,5]]},"163":{"position":[[332,5]]},"183":{"position":[[2062,5],[2078,5],[2675,5]]},"253":{"position":[[3186,5]]},"274":{"position":[[163,5]]},"296":{"position":[[2451,5]]},"309":{"position":[[1276,5]]},"326":{"position":[[721,5],[1093,5]]},"374":{"position":[[369,5]]},"390":{"position":[[80,5]]},"483":{"position":[[100,5]]},"491":{"position":[[421,5]]},"492":{"position":[[133,5]]},"558":{"position":[[265,5]]},"590":{"position":[[205,5]]},"660":{"position":[[770,5]]},"664":{"position":[[442,5],[677,5]]},"665":{"position":[[133,5]]},"679":{"position":[[421,5]]},"680":{"position":[[133,5]]},"694":{"position":[[421,5]]},"695":{"position":[[133,5]]},"849":{"position":[[1748,5]]},"1006":{"position":[[148,5]]},"1077":{"position":[[316,5]]},"1146":{"position":[[199,5]]},"1173":{"position":[[199,5]]},"1215":{"position":[[199,5]]},"1223":{"position":[[199,5]]},"1286":{"position":[[1959,5]]},"1301":{"position":[[1795,5]]},"1325":{"position":[[1959,5]]},"1358":{"position":[[564,5]]},"1443":{"position":[[79,5]]},"1461":{"position":[[1539,5],[5289,5]]},"1465":{"position":[[112,5]]},"1477":{"position":[[2685,5]]}},"keywords":{}}],["gladli",{"_index":3338,"title":{"536":{"position":[[0,6]]}},"content":{"364":{"position":[[1300,6]]},"537":{"position":[[74,7]]},"538":{"position":[[15,6],[54,6]]},"539":{"position":[[250,6]]}},"keywords":{}}],["gladly.dev",{"_index":3339,"title":{},"content":{"364":{"position":[[1353,10]]}},"keywords":{}}],["gladly:dev",{"_index":4053,"title":{},"content":{"541":{"position":[[90,10]]}},"keywords":{}}],["glob",{"_index":6296,"title":{},"content":{"1370":{"position":[[1187,4]]}},"keywords":{}}],["global",{"_index":199,"title":{"1462":{"position":[[0,6]]}},"content":{"6":{"position":[[66,6]]},"8":{"position":[[67,6]]},"27":{"position":[[200,8]]},"67":{"position":[[151,8],[578,8]]},"109":{"position":[[171,8]]},"264":{"position":[[343,6]]},"274":{"position":[[105,8]]},"338":{"position":[[262,6]]},"482":{"position":[[844,6]]},"1140":{"position":[[3610,6]]},"1281":{"position":[[296,6],[372,6]]},"1292":{"position":[[1348,6]]},"1295":{"position":[[296,6],[372,6]]},"1306":{"position":[[1348,6]]},"1316":{"position":[[3610,6]]},"1319":{"position":[[296,6],[372,6]]},"1329":{"position":[[1348,6]]},"1340":{"position":[[3610,6]]},"1351":{"position":[[3610,6]]},"1379":{"position":[[2246,6]]},"1403":{"position":[[2246,6]]},"1414":{"position":[[2246,6]]},"1431":{"position":[[3633,6]]},"1462":{"position":[[153,6],[185,8]]}},"keywords":{}}],["glue",{"_index":5761,"title":{},"content":{"1160":{"position":[[175,5],[268,5]]},"1165":{"position":[[253,4]]}},"keywords":{}}],["go",{"_index":679,"title":{},"content":{"34":{"position":[[723,5]]},"174":{"position":[[296,5]]},"183":{"position":[[101,2]]},"184":{"position":[[126,2]]},"190":{"position":[[1,2],[1827,2]]},"191":{"position":[[145,2]]},"192":{"position":[[2189,2]]},"204":{"position":[[748,5]]},"217":{"position":[[179,2]]},"228":{"position":[[76,2]]},"239":{"position":[[280,2]]},"240":{"position":[[3588,2]]},"254":{"position":[[977,2]]},"259":{"position":[[1,2],[1522,5],[1669,2],[3076,5]]},"263":{"position":[[111,2]]},"264":{"position":[[653,2]]},"266":{"position":[[77,2]]},"267":{"position":[[1949,2]]},"270":{"position":[[211,2]]},"271":{"position":[[30,2]]},"274":{"position":[[509,2]]},"284":{"position":[[20,2]]},"290":{"position":[[156,2]]},"295":{"position":[[674,5]]},"296":{"position":[[1666,5],[7617,2]]},"301":{"position":[[109,2]]},"310":{"position":[[294,5]]},"314":{"position":[[698,2],[2084,5]]},"377":{"position":[[826,2],[1031,2]]},"436":{"position":[[287,2]]},"486":{"position":[[320,2]]},"531":{"position":[[232,5]]},"658":{"position":[[320,2]]},"674":{"position":[[320,2]]},"689":{"position":[[320,2]]},"725":{"position":[[1,2]]},"726":{"position":[[419,2]]},"750":{"position":[[282,5]]},"766":{"position":[[282,5]]},"785":{"position":[[315,5]]},"789":{"position":[[316,5]]},"807":{"position":[[316,5]]},"823":{"position":[[316,5]]},"840":{"position":[[231,2],[889,2],[1611,2],[1952,2]]},"849":{"position":[[174,2],[1502,2],[2652,2],[3071,2]]},"856":{"position":[[1,2]]},"857":{"position":[[1,2]]},"895":{"position":[[276,2]]},"1020":{"position":[[183,5],[1293,5],[1831,5]]},"1067":{"position":[[1,2]]},"1140":{"position":[[3643,2]]},"1316":{"position":[[3643,2]]},"1340":{"position":[[3643,2]]},"1351":{"position":[[3643,2]]},"1379":{"position":[[2290,2]]},"1403":{"position":[[2290,2]]},"1414":{"position":[[2290,2]]},"1418":{"position":[[13,2]]},"1431":{"position":[[3666,2]]},"1448":{"position":[[985,2]]}},"keywords":{}}],["goal",{"_index":3066,"title":{},"content":{"313":{"position":[[3552,4]]}},"keywords":{}}],["goe",{"_index":1853,"title":{},"content":{"156":{"position":[[169,4]]},"1077":{"position":[[640,4]]}},"keywords":{}}],["gold",{"_index":4012,"title":{},"content":{"521":{"position":[[247,4],[324,4]]}},"keywords":{}}],["gone",{"_index":4650,"title":{},"content":{"763":{"position":[[81,4]]},"776":{"position":[[81,4]]},"803":{"position":[[81,4]]},"818":{"position":[[81,4]]},"834":{"position":[[81,4]]}},"keywords":{}}],["good",{"_index":1085,"title":{},"content":{"74":{"position":[[868,4]]},"110":{"position":[[603,4]]},"239":{"position":[[1,4]]},"253":{"position":[[1009,4]]},"295":{"position":[[3928,4]]},"296":{"position":[[7490,5]]},"313":{"position":[[1009,4]]},"478":{"position":[[248,4]]},"599":{"position":[[248,4]]},"1183":{"position":[[1086,5],[1538,5]]},"1461":{"position":[[4739,4]]}},"keywords":{}}],["goodfield",{"_index":1686,"title":{},"content":{"122":{"position":[[2250,11]]}},"keywords":{}}],["googl",{"_index":1150,"title":{"171":{"position":[[0,6]]},"223":{"position":[[10,6]]},"287":{"position":[[0,6]]},"319":{"position":[[16,6]]},"542":{"position":[[0,6]]},"548":{"position":[[20,6]]},"549":{"position":[[0,6]]},"553":{"position":[[34,6]]},"561":{"position":[[0,6]]},"567":{"position":[[0,6]]},"570":{"position":[[34,6]]},"579":{"position":[[0,6]]},"589":{"position":[[0,6]]},"596":{"position":[[0,6]]},"604":{"position":[[0,6]]},"608":{"position":[[34,6]]},"613":{"position":[[0,6]]},"615":{"position":[[34,6]]},"806":{"position":[[0,6]]},"928":{"position":[[0,6]]},"1056":{"position":[[0,6]]},"1175":{"position":[[0,6]]},"1210":{"position":[[13,6]]},"1217":{"position":[[24,6]]},"1225":{"position":[[0,6]]},"1242":{"position":[[0,6]]},"1294":{"position":[[0,6]]},"1297":{"position":[[24,6]]},"1342":{"position":[[0,6]]},"1345":{"position":[[24,6]]},"1395":{"position":[[0,6]]},"1397":{"position":[[6,6]]}},"content":{"82":{"position":[[609,6],[1488,6],[1529,6]]},"136":{"position":[[11,7]]},"170":{"position":[[182,6]]},"174":{"position":[[23,6]]},"179":{"position":[[540,6]]},"223":{"position":[[57,6],[629,6],[710,6]]},"288":{"position":[[303,6],[330,6]]},"289":{"position":[[150,6]]},"290":{"position":[[343,6]]},"295":{"position":[[61,6],[1088,6]]},"296":{"position":[[7255,6],[7315,6]]},"319":{"position":[[152,6]]},"329":{"position":[[663,6]]},"363":{"position":[[993,6],[1068,6],[1145,6],[1212,6],[1230,6],[1300,6]]},"364":{"position":[[1364,6],[1421,6],[1436,6],[1501,6],[1531,6],[1604,6],[1628,6],[1696,6],[1722,6],[1782,6]]},"367":{"position":[[878,6]]},"370":{"position":[[1785,6]]},"475":{"position":[[70,6],[114,6]]},"477":{"position":[[552,6],[799,6]]},"478":{"position":[[50,6],[410,6]]},"543":{"position":[[93,6],[220,6]]},"545":{"position":[[580,6],[643,6]]},"548":{"position":[[17,6]]},"550":{"position":[[109,6]]},"551":{"position":[[41,6]]},"552":{"position":[[50,6],[124,6],[400,6]]},"553":{"position":[[13,6],[68,6],[106,6],[208,6]]},"554":{"position":[[13,6],[68,6],[124,6],[145,6],[178,6],[333,6]]},"555":{"position":[[247,6]]},"556":{"position":[[457,6],[534,6],[624,6],[741,6],[863,6],[2250,6]]},"557":{"position":[[159,6]]},"558":{"position":[[39,6],[271,6]]},"560":{"position":[[8,6]]},"562":{"position":[[69,6],[155,6],[264,6]]},"563":{"position":[[20,6],[314,6]]},"564":{"position":[[137,6]]},"565":{"position":[[91,6],[170,6]]},"566":{"position":[[89,6]]},"569":{"position":[[41,6],[75,6]]},"570":{"position":[[22,6],[109,6]]},"571":{"position":[[22,6],[104,6],[125,6],[173,6],[191,6],[262,6],[350,6],[371,6],[411,6],[506,6],[834,6]]},"572":{"position":[[250,6]]},"573":{"position":[[857,6],[935,6],[1352,6]]},"574":{"position":[[136,6],[392,6]]},"575":{"position":[[145,6]]},"577":{"position":[[5,6]]},"578":{"position":[[9,6],[143,6],[411,6]]},"581":{"position":[[42,6],[84,6],[183,6],[239,6],[327,7],[350,6]]},"582":{"position":[[55,6],[121,6],[447,6]]},"583":{"position":[[240,6]]},"584":{"position":[[113,6],[612,6],[857,6],[1074,6],[1420,6]]},"585":{"position":[[136,6]]},"586":{"position":[[145,6]]},"588":{"position":[[5,6]]},"591":{"position":[[17,6]]},"593":{"position":[[91,6]]},"597":{"position":[[70,6],[113,6]]},"598":{"position":[[516,6],[762,6]]},"599":{"position":[[50,6],[410,6]]},"601":{"position":[[82,6],[193,6]]},"606":{"position":[[88,6],[419,6],[453,6]]},"607":{"position":[[41,6],[73,6]]},"608":{"position":[[15,6],[59,6],[183,6]]},"609":{"position":[[17,6],[81,6]]},"610":{"position":[[250,6]]},"611":{"position":[[563,6],[748,6],[1240,6]]},"612":{"position":[[159,6]]},"614":{"position":[[41,6]]},"615":{"position":[[13,6],[78,6]]},"617":{"position":[[13,6],[73,6],[91,6],[125,6],[143,6],[292,6],[310,6],[336,6],[428,6],[738,6]]},"618":{"position":[[250,6]]},"619":{"position":[[166,6],[207,6],[225,6],[660,6]]},"620":{"position":[[89,6]]},"808":{"position":[[696,6]]},"931":{"position":[[635,6]]},"1120":{"position":[[1030,6],[1110,6],[1182,6],[1200,6],[1275,6]]},"1136":{"position":[[432,6]]},"1138":{"position":[[1076,6]]},"1176":{"position":[[44,6],[130,6]]},"1177":{"position":[[80,6]]},"1179":{"position":[[106,6]]},"1211":{"position":[[135,6]]},"1218":{"position":[[135,6]]},"1226":{"position":[[40,6],[70,6]]},"1227":{"position":[[100,6],[170,6],[200,6]]},"1228":{"position":[[107,6],[185,6],[215,6],[316,6]]},"1229":{"position":[[113,6]]},"1230":{"position":[[126,7],[466,6]]},"1233":{"position":[[9,6]]},"1234":{"position":[[1,6]]},"1243":{"position":[[658,6],[1065,6],[1115,6],[1184,6]]},"1244":{"position":[[46,6]]},"1245":{"position":[[15,6],[33,6],[67,6],[85,6],[244,6],[262,6],[288,6],[380,6],[683,6]]},"1246":{"position":[[113,6]]},"1247":{"position":[[297,7]]},"1248":{"position":[[330,6]]},"1282":{"position":[[206,6]]},"1288":{"position":[[180,6]]},"1289":{"position":[[613,6]]},"1298":{"position":[[57,6],[629,6],[710,6]]},"1310":{"position":[[221,6]]},"1346":{"position":[[57,6],[629,6],[710,6]]}},"keywords":{}}],["google'",{"_index":4059,"title":{},"content":{"543":{"position":[[342,8]]},"554":{"position":[[414,8]]},"556":{"position":[[495,8],[1198,8]]},"558":{"position":[[187,8]]},"560":{"position":[[360,8]]},"570":{"position":[[72,8]]},"571":{"position":[[72,8]]}},"keywords":{}}],["googlecredenti",{"_index":4060,"title":{},"content":{"545":{"position":[[624,18]]},"546":{"position":[[123,18]]},"548":{"position":[[1343,19]]},"594":{"position":[[111,18]]}},"keywords":{}}],["googlecredentials_sop",{"_index":4086,"title":{},"content":{"548":{"position":[[845,23]]}},"keywords":{}}],["goto",{"_index":5681,"title":{},"content":{"1140":{"position":[[3676,4]]},"1316":{"position":[[3676,4]]},"1340":{"position":[[3676,4]]},"1351":{"position":[[3676,4]]},"1379":{"position":[[2328,4]]},"1403":{"position":[[2328,4]]},"1414":{"position":[[2328,4]]},"1431":{"position":[[3699,4]]}},"keywords":{}}],["govern",{"_index":2242,"title":{},"content":{"208":{"position":[[109,6]]}},"keywords":{}}],["grab",{"_index":2603,"title":{},"content":{"240":{"position":[[2782,4]]}},"keywords":{}}],["gracefulli",{"_index":1495,"title":{},"content":{"105":{"position":[[1033,10]]},"867":{"position":[[1529,10]]}},"keywords":{}}],["grain",{"_index":1582,"title":{},"content":{"110":{"position":[[1418,5]]},"260":{"position":[[15,5]]},"1036":{"position":[[1094,7]]}},"keywords":{}}],["grant",{"_index":1189,"title":{"944":{"position":[[3,5]]}},"content":{"82":{"position":[[3258,5]]},"154":{"position":[[47,7],[289,6],[389,7],[471,5],[818,7]]},"171":{"position":[[16,5]]},"172":{"position":[[16,5]]},"173":{"position":[[16,5],[566,5],[708,5],[1197,8]]},"191":{"position":[[852,5],[1262,5],[1334,5],[1623,5],[1662,5],[1753,5],[1786,5],[2028,5]]},"221":{"position":[[1680,5]]},"236":{"position":[[2918,5],[3411,5]]},"237":{"position":[[401,7],[629,5],[671,8],[941,5],[1533,5]]},"240":{"position":[[813,5],[1223,5],[1295,5],[1584,5],[1623,5],[1714,5],[1747,5],[1989,5]]},"288":{"position":[[698,6]]},"299":{"position":[[613,6]]},"337":{"position":[[25,5],[103,7],[287,7],[421,7]]},"338":{"position":[[101,7],[152,7],[387,7]]},"339":{"position":[[170,7]]},"341":{"position":[[218,5],[289,6]]},"367":{"position":[[439,5],[542,5],[673,5]]},"415":{"position":[[166,5]]},"477":{"position":[[163,5],[840,8],[999,7]]},"478":{"position":[[113,7]]},"531":{"position":[[463,5]]},"532":{"position":[[276,5]]},"556":{"position":[[852,7]]},"571":{"position":[[619,5],[857,5]]},"582":{"position":[[232,5],[474,5]]},"598":{"position":[[123,6],[803,8],[960,7]]},"599":{"position":[[113,7]]},"609":{"position":[[436,5]]},"617":{"position":[[543,5]]},"645":{"position":[[390,5]]},"652":{"position":[[390,5]]},"752":{"position":[[686,5],[756,5],[795,5]]},"753":{"position":[[220,6],[1342,5],[1412,5],[1451,5]]},"767":{"position":[[2019,5],[2089,5],[2128,5]]},"791":{"position":[[691,5],[761,5],[800,5]]},"792":{"position":[[278,8],[2011,5],[2081,5],[2120,5]]},"793":{"position":[[92,8],[214,6],[1365,5],[1435,5],[1474,5]]},"808":{"position":[[92,8],[1311,5],[1381,5],[1420,5]]},"824":{"position":[[92,8],[2133,5],[2203,5],[2242,5]]},"838":{"position":[[47,5]]},"847":{"position":[[390,5]]},"864":{"position":[[261,5],[312,5],[391,5],[450,5],[541,5],[596,5],[691,5],[943,5],[1050,5],[1098,5],[1147,5],[1196,5],[1241,5],[1285,5],[1323,5]]},"876":{"position":[[261,5],[312,5],[391,5],[450,5],[541,5],[596,5],[691,5],[808,5],[867,5]]},"904":{"position":[[92,8],[1500,5],[1539,5],[1642,5],[1773,5]]},"917":{"position":[[439,5],[550,5],[590,5],[673,5],[907,5],[1148,5],[1282,5]]},"918":{"position":[[278,8],[1792,5],[1831,5],[1934,5],[2065,5]]},"919":{"position":[[92,8],[214,6],[974,5],[1087,5],[1127,5],[1204,5],[1432,5],[1733,5],[1773,5],[1850,5],[2120,5]]},"931":{"position":[[92,8],[1201,5],[1304,5],[1435,5]]},"943":{"position":[[244,7]]},"944":{"position":[[101,5],[152,5],[194,5],[293,5],[331,8]]},"965":{"position":[[439,5],[550,5],[590,5],[673,5],[907,5],[1148,5],[1282,5]]},"989":{"position":[[288,5]]},"1004":{"position":[[371,5]]},"1031":{"position":[[412,6]]},"1032":{"position":[[717,5],[919,5],[1029,5],[1222,5],[1313,5],[1405,5],[1515,5],[1619,5],[1720,5],[1824,5]]},"1042":{"position":[[299,5],[529,5],[576,5],[658,5],[753,5]]},"1043":{"position":[[92,8],[214,6],[963,5],[1193,5],[1240,5],[1322,5],[1417,5]]},"1051":{"position":[[92,8],[1225,5],[1455,5],[1502,5],[1584,5],[1679,5]]},"1059":{"position":[[92,8],[1018,5],[1248,5],[1295,5],[1377,5],[1472,5]]},"1140":{"position":[[3713,5]]},"1177":{"position":[[156,5]]},"1185":{"position":[[189,6]]},"1194":{"position":[[419,5]]},"1227":{"position":[[240,8]]},"1228":{"position":[[255,8]]},"1245":{"position":[[495,5],[728,8]]},"1283":{"position":[[103,8],[250,6]]},"1289":{"position":[[103,8]]},"1292":{"position":[[1386,5],[1417,6]]},"1303":{"position":[[92,8],[1543,5]]},"1306":{"position":[[1386,5],[1417,6]]},"1311":{"position":[[86,6]]},"1316":{"position":[[3713,5]]},"1320":{"position":[[103,8]]},"1329":{"position":[[1386,5],[1417,6]]},"1333":{"position":[[103,8]]},"1340":{"position":[[3713,5]]},"1344":{"position":[[103,8]]},"1351":{"position":[[3713,5]]},"1373":{"position":[[92,8],[1154,5],[1204,5]]},"1374":{"position":[[92,8],[1158,5],[1208,5]]},"1379":{"position":[[2376,5]]},"1382":{"position":[[254,6]]},"1383":{"position":[[800,5],[1210,5],[1282,5],[1571,5],[1610,5],[1701,5],[1734,5],[1976,5]]},"1394":{"position":[[523,5]]},"1397":{"position":[[92,8],[933,5],[983,5]]},"1398":{"position":[[92,8],[936,5],[986,5]]},"1403":{"position":[[2376,5]]},"1408":{"position":[[252,5],[302,5]]},"1409":{"position":[[92,8],[214,6],[916,5],[966,5]]},"1414":{"position":[[2376,5]]},"1417":{"position":[[361,6]]},"1418":{"position":[[115,5]]},"1431":{"position":[[3736,5]]}},"keywords":{}}],["granular",{"_index":2214,"title":{},"content":{"202":{"position":[[405,9]]},"237":{"position":[[954,8]]},"864":{"position":[[528,8]]},"876":{"position":[[528,8]]},"1085":{"position":[[1022,11],[1038,11]]},"1087":{"position":[[119,11],[207,12],[253,12]]},"1388":{"position":[[564,12]]},"1461":{"position":[[2325,9]]}},"keywords":{}}],["graph",{"_index":304,"title":{},"content":{"11":{"position":[[418,5]]},"23":{"position":[[127,5],[268,5]]},"32":{"position":[[362,5]]},"61":{"position":[[1156,5]]},"92":{"position":[[408,5],[479,5],[677,5]]},"105":{"position":[[843,5],[1331,5]]},"107":{"position":[[811,5]]},"137":{"position":[[277,5]]},"146":{"position":[[591,5]]},"149":{"position":[[564,5]]},"152":{"position":[[567,5]]},"189":{"position":[[1366,5]]},"280":{"position":[[913,5]]},"319":{"position":[[497,5]]},"323":{"position":[[409,5]]},"667":{"position":[[113,5]]},"668":{"position":[[86,5]]}},"keywords":{}}],["graphic",{"_index":3160,"title":{},"content":{"323":{"position":[[1747,9]]}},"keywords":{}}],["great",{"_index":1571,"title":{},"content":{"110":{"position":[[535,5]]},"114":{"position":[[494,5]]},"180":{"position":[[391,5]]},"281":{"position":[[394,5]]}},"keywords":{}}],["greater",{"_index":3152,"title":{},"content":{"322":{"position":[[1135,7]]},"419":{"position":[[1985,7]]},"441":{"position":[[594,7]]},"504":{"position":[[1614,7]]},"547":{"position":[[1987,7]]},"611":{"position":[[889,7]]},"639":{"position":[[1612,7]]},"1020":{"position":[[879,7]]},"1023":{"position":[[1968,7]]},"1162":{"position":[[705,7]]}},"keywords":{}}],["greatest",{"_index":3145,"title":{},"content":{"321":{"position":[[2269,8]]}},"keywords":{}}],["greatfield",{"_index":1687,"title":{},"content":{"122":{"position":[[2266,11]]}},"keywords":{}}],["green",{"_index":1780,"title":{},"content":{"138":{"position":[[1204,8]]},"141":{"position":[[967,6],[1287,8]]},"142":{"position":[[1181,8]]}},"keywords":{}}],["greenhous",{"_index":3345,"title":{"621":{"position":[[0,10]]}},"content":{"364":{"position":[[1800,10]]},"622":{"position":[[56,10]]},"623":{"position":[[15,10]]},"624":{"position":[[250,10]]},"625":{"position":[[93,10],[231,10]]}},"keywords":{}}],["greenhouse.dev",{"_index":3346,"title":{},"content":{"364":{"position":[[1857,14]]}},"keywords":{}}],["greenhouse:dev",{"_index":4336,"title":{},"content":{"626":{"position":[[90,14]]}},"keywords":{}}],["greet",{"_index":1410,"title":{},"content":{"98":{"position":[[553,9]]},"128":{"position":[[646,8],[710,9]]},"129":{"position":[[1030,9],[1077,8],[1110,9],[1154,10],[1249,9]]},"130":{"position":[[209,5],[262,9],[313,9]]},"238":{"position":[[314,7]]}},"keywords":{}}],["groundbreak",{"_index":2335,"title":{},"content":{"210":{"position":[[2420,14]]}},"keywords":{}}],["group",{"_index":289,"title":{"279":{"position":[[0,7]]}},"content":{"11":{"position":[[54,6]]},"42":{"position":[[122,8]]},"61":{"position":[[750,5]]},"71":{"position":[[59,5]]},"110":{"position":[[1437,7]]},"173":{"position":[[969,6]]},"203":{"position":[[156,5]]},"222":{"position":[[752,5]]},"254":{"position":[[2247,5]]},"274":{"position":[[1429,5]]},"279":{"position":[[255,8],[562,8]]},"314":{"position":[[1788,5]]},"320":{"position":[[1550,6]]},"443":{"position":[[146,5]]},"517":{"position":[[368,5]]},"520":{"position":[[60,6]]},"526":{"position":[[119,6]]},"527":{"position":[[253,7]]},"590":{"position":[[798,9]]},"767":{"position":[[149,5],[215,5],[821,5],[880,6],[996,5],[1027,5],[1367,5],[1497,6],[1525,5]]},"792":{"position":[[469,5],[535,5],[1100,5],[1174,6],[1301,5],[1332,5]]},"805":{"position":[[59,5]]},"820":{"position":[[59,5]]},"824":{"position":[[261,5],[327,5],[892,5],[949,6],[1062,5],[1093,5],[1433,5],[1561,6],[1589,5]]},"836":{"position":[[59,5]]},"899":{"position":[[318,6],[341,5]]},"900":{"position":[[189,7]]},"904":{"position":[[261,5],[327,5],[947,6],[1062,5],[1093,5],[1158,5],[1230,5]]},"918":{"position":[[469,5],[535,5],[1150,6],[1353,5],[1384,5],[1449,5],[1522,5]]},"979":{"position":[[188,5]]},"997":{"position":[[190,6]]},"1051":{"position":[[261,5],[327,5]]},"1080":{"position":[[92,6],[286,6],[315,6],[343,6],[577,5],[614,5]]},"1118":{"position":[[915,5]]},"1134":{"position":[[880,6]]},"1140":{"position":[[3761,5],[3803,8],[3847,6]]},"1170":{"position":[[910,5],[958,6],[1040,5],[1102,6]]},"1185":{"position":[[125,8]]},"1209":{"position":[[358,5]]},"1220":{"position":[[587,5],[635,6],[717,5],[779,6]]},"1289":{"position":[[243,5],[318,5]]},"1292":{"position":[[1461,5],[1503,8],[1536,6]]},"1306":{"position":[[1461,5],[1503,8],[1536,6]]},"1316":{"position":[[3761,5],[3803,8],[3847,6]]},"1321":{"position":[[23,5],[98,5]]},"1322":{"position":[[752,5]]},"1329":{"position":[[1461,5],[1503,8],[1536,6]]},"1334":{"position":[[23,5],[98,5]]},"1335":{"position":[[752,5]]},"1340":{"position":[[3761,5],[3803,8],[3847,6]]},"1351":{"position":[[3761,5],[3803,8],[3847,6]]},"1370":{"position":[[1198,5],[1211,6]]},"1373":{"position":[[261,5],[327,5]]},"1374":{"position":[[261,5],[327,5]]},"1379":{"position":[[2424,5],[2478,8],[3936,5]]},"1382":{"position":[[145,8]]},"1394":{"position":[[540,5]]},"1403":{"position":[[2424,5],[2478,8],[3936,5]]},"1414":{"position":[[2424,5],[2478,8],[3936,5]]},"1417":{"position":[[195,8]]},"1431":{"position":[[3784,5],[3826,8],[3870,6]]}},"keywords":{}}],["group_id",{"_index":2655,"title":{},"content":{"250":{"position":[[451,11]]}},"keywords":{}}],["group_id=conf['group_id",{"_index":2665,"title":{},"content":{"250":{"position":[[813,26]]}},"keywords":{}}],["group_membership",{"_index":5475,"title":{},"content":{"1134":{"position":[[759,17]]}},"keywords":{}}],["group_replica",{"_index":6022,"title":{},"content":{"1292":{"position":[[1574,13]]},"1306":{"position":[[1574,13]]},"1329":{"position":[[1574,13]]}},"keywords":{}}],["groupassoci",{"_index":4717,"title":{},"content":{"794":{"position":[[673,15]]},"809":{"position":[[673,15]]},"1286":{"position":[[730,15]]},"1325":{"position":[[730,15]]}},"keywords":{}}],["grouped.flow.yamlenrichandaddtowindow.sqlgroup",{"_index":2853,"title":{},"content":{"279":{"position":[[954,48]]}},"keywords":{}}],["groupsad",{"_index":3732,"title":{},"content":{"443":{"position":[[137,8]]}},"keywords":{}}],["groupscampaignscreativesaddirectsponsoredcont",{"_index":4511,"title":{},"content":{"715":{"position":[[76,49]]}},"keywords":{}}],["groupsfilesremot",{"_index":5182,"title":{},"content":{"1012":{"position":[[202,17]]}},"keywords":{}}],["groupssponsor",{"_index":3464,"title":{},"content":{"381":{"position":[[74,15],[218,15],[364,15]]}},"keywords":{}}],["groupssuppress",{"_index":5138,"title":{},"content":{"979":{"position":[[170,17]]}},"keywords":{}}],["groupwith",{"_index":4669,"title":{},"content":{"767":{"position":[[1199,9]]},"792":{"position":[[1455,9]]},"824":{"position":[[1265,9]]}},"keywords":{}}],["grow",{"_index":2053,"title":{},"content":{"180":{"position":[[734,5]]},"281":{"position":[[2943,5]]}},"keywords":{}}],["gsc",{"_index":4309,"title":{},"content":{"611":{"position":[[1013,3]]}},"keywords":{}}],["gscluster",{"_index":6405,"title":{},"content":{"1394":{"position":[[556,9]]}},"keywords":{}}],["gt",{"_index":1364,"title":{},"content":{"94":{"position":[[3153,5]]},"107":{"position":[[2819,4]]},"120":{"position":[[2590,5]]},"164":{"position":[[572,5],[713,5],[2087,5],[2133,5],[2173,5]]},"277":{"position":[[792,4]]},"296":{"position":[[319,4],[1290,4]]},"464":{"position":[[148,4],[176,4],[195,4],[252,4],[274,4],[293,4],[313,4]]},"480":{"position":[[1046,4]]},"840":{"position":[[243,4],[256,4],[515,4],[532,4],[557,4],[901,4],[918,4],[936,4],[1623,4],[1640,4],[1964,4],[1981,4],[2000,4]]},"842":{"position":[[2660,4]]},"849":{"position":[[186,4],[199,4],[412,4],[425,4],[772,4],[785,4],[800,4],[986,4],[1003,4],[1028,4],[1514,4],[1531,4],[1549,4],[2664,4],[2681,4],[3083,4],[3100,4],[3119,4]]},"864":{"position":[[1616,5],[1636,5]]},"912":{"position":[[1250,4]]},"964":{"position":[[389,4],[742,4],[755,4]]},"1089":{"position":[[121,4]]},"1418":{"position":[[33,4],[55,4],[172,4],[199,4],[216,4],[236,4]]},"1476":{"position":[[2120,5]]}},"keywords":{}}],["gt80kty/d6091fbmkhxl5shej4ssryvftgul2ea7s5xjspyxkadrzr0wj3scqava",{"_index":1251,"title":{},"content":{"83":{"position":[[2092,64]]},"371":{"position":[[1011,64]]},"1139":{"position":[[898,64]]}},"keywords":{}}],["gt;",{"_index":1505,"title":{},"content":{"105":{"position":[[1487,6],[1574,6]]}},"keywords":{}}],["gt;>driver",{"_index":6432,"title":{},"content":{"1434":{"position":[[213,15],[672,15],[1145,15],[1247,15],[1421,15],[1459,15],[1750,15],[1789,15],[1828,15],[1867,15]]}},"keywords":{}}],["gt;>runtim",{"_index":6437,"title":{},"content":{"1434":{"position":[[387,16],[972,16],[1380,16],[1488,16],[1600,16],[2073,16]]}},"keywords":{}}],["gt;bar.flow.yaml",{"_index":1321,"title":{},"content":{"92":{"position":[[433,18],[742,18]]}},"keywords":{}}],["gt;c",{"_index":934,"title":{},"content":{"61":{"position":[[1277,6]]}},"keywords":{}}],["gt;captur",{"_index":308,"title":{},"content":{"11":{"position":[[451,12]]}},"keywords":{}}],["gt;collect",{"_index":309,"title":{},"content":{"11":{"position":[[473,15]]},"23":{"position":[[146,15]]},"32":{"position":[[381,15]]},"137":{"position":[[296,15]]},"189":{"position":[[1385,15]]}},"keywords":{}}],["gt;collection/a",{"_index":584,"title":{},"content":{"23":{"position":[[353,17]]}},"keywords":{}}],["gt;collection/c",{"_index":583,"title":{},"content":{"23":{"position":[[322,17]]}},"keywords":{}}],["gt;collection/d",{"_index":581,"title":{},"content":{"23":{"position":[[291,17]]}},"keywords":{}}],["gt;d",{"_index":933,"title":{},"content":{"61":{"position":[[1237,6],[1320,6]]}},"keywords":{}}],["gt;derivation/",{"_index":588,"title":{},"content":{"23":{"position":[[417,17],[449,17],[481,17]]}},"keywords":{}}],["gt;derivation/b",{"_index":586,"title":{},"content":{"23":{"position":[[385,17]]}},"keywords":{}}],["gt;dest[destin",{"_index":311,"title":{},"content":{"11":{"position":[[539,20]]}},"keywords":{}}],["gt;foo.flow.yaml",{"_index":1325,"title":{},"content":{"92":{"position":[[542,18],[705,18]]}},"keywords":{}}],["gt;l",{"_index":1508,"title":{},"content":{"105":{"position":[[1553,6],[1595,6]]}},"keywords":{}}],["gt;materi",{"_index":310,"title":{},"content":{"11":{"position":[[501,20]]},"23":{"position":[[174,20]]},"32":{"position":[[409,20]]},"137":{"position":[[324,20]]},"189":{"position":[[1413,20]]}},"keywords":{}}],["gt;materialization/on",{"_index":591,"title":{},"content":{"23":{"position":[[513,24]]}},"keywords":{}}],["gt;materialization/two",{"_index":593,"title":{},"content":{"23":{"position":[[552,24]]}},"keywords":{}}],["gt;o",{"_index":1506,"title":{},"content":{"105":{"position":[[1508,6],[1621,6]]}},"keywords":{}}],["gt;other.flow.yaml",{"_index":1323,"title":{},"content":{"92":{"position":[[504,20]]}},"keywords":{}}],["gt;t",{"_index":1504,"title":{},"content":{"105":{"position":[[1466,6],[1532,6]]}},"keywords":{}}],["gt;t1",{"_index":1531,"title":{},"content":{"107":{"position":[[1039,7],[1101,7]]}},"keywords":{}}],["gt;t2",{"_index":1533,"title":{},"content":{"107":{"position":[[1069,7],[1128,7]]}},"keywords":{}}],["gtid_onli",{"_index":6023,"title":{},"content":{"1292":{"position":[[1616,9]]},"1306":{"position":[[1616,9]]},"1329":{"position":[[1616,9]]}},"keywords":{}}],["guarante",{"_index":1538,"title":{"1459":{"position":[[10,11]]}},"content":{"107":{"position":[[1537,10],[3385,10]]},"160":{"position":[[516,9]]},"175":{"position":[[228,10]]},"198":{"position":[[784,10]]},"323":{"position":[[1134,9]]},"326":{"position":[[1860,11]]},"411":{"position":[[122,9]]},"429":{"position":[[567,11]]},"595":{"position":[[544,10],[1080,9]]},"602":{"position":[[739,10]]},"879":{"position":[[1285,9]]},"1282":{"position":[[349,9]]},"1288":{"position":[[323,9]]},"1310":{"position":[[364,9]]},"1439":{"position":[[326,9]]},"1459":{"position":[[546,10],[756,9],[1158,10]]}},"keywords":{}}],["guerr",{"_index":2709,"title":{},"content":{"253":{"position":[[1501,7],[2445,7],[2519,7]]},"313":{"position":[[1501,7],[2445,7],[2519,7]]}},"keywords":{}}],["guid",{"_index":804,"title":{"59":{"position":[[5,7]]},"213":{"position":[[10,6]]},"257":{"position":[[8,6]]}},"content":{"54":{"position":[[58,6]]},"59":{"position":[[6,6]]},"61":{"position":[[1350,6]]},"83":{"position":[[679,6]]},"139":{"position":[[245,6]]},"140":{"position":[[345,6]]},"143":{"position":[[285,6]]},"144":{"position":[[846,6]]},"176":{"position":[[94,5]]},"177":{"position":[[377,7]]},"179":{"position":[[438,5]]},"193":{"position":[[722,5]]},"213":{"position":[[10,6],[59,6],[113,6]]},"215":{"position":[[6,5]]},"228":{"position":[[1358,5]]},"253":{"position":[[449,6]]},"256":{"position":[[9,5]]},"257":{"position":[[8,6],[19,6]]},"264":{"position":[[895,6]]},"266":{"position":[[246,5]]},"273":{"position":[[159,7]]},"285":{"position":[[196,5]]},"286":{"position":[[31,6],[97,5],[264,5],[350,5]]},"289":{"position":[[262,6]]},"292":{"position":[[285,5]]},"297":{"position":[[9,5]]},"300":{"position":[[241,6]]},"303":{"position":[[276,5]]},"306":{"position":[[6,5]]},"313":{"position":[[449,6]]},"317":{"position":[[9,5]]},"401":{"position":[[187,5]]},"475":{"position":[[319,5]]},"548":{"position":[[581,5]]},"563":{"position":[[198,5]]},"597":{"position":[[282,5]]},"753":{"position":[[361,5]]},"767":{"position":[[507,5]]},"784":{"position":[[144,5]]},"792":{"position":[[785,5]]},"793":{"position":[[320,5]]},"808":{"position":[[336,5]]},"824":{"position":[[577,5]]},"866":{"position":[[337,5]]},"878":{"position":[[347,5]]},"892":{"position":[[229,5]]},"904":{"position":[[576,5]]},"918":{"position":[[785,5]]},"919":{"position":[[320,5]]},"931":{"position":[[340,5]]},"964":{"position":[[22,6]]},"1043":{"position":[[320,5]]},"1051":{"position":[[576,5]]},"1059":{"position":[[340,5]]},"1142":{"position":[[79,5]]},"1149":{"position":[[534,5]]},"1154":{"position":[[518,5]]},"1160":{"position":[[79,5],[190,5]]},"1165":{"position":[[330,6]]},"1168":{"position":[[79,5]]},"1176":{"position":[[574,5]]},"1185":{"position":[[374,5]]},"1194":{"position":[[584,5]]},"1198":{"position":[[233,5]]},"1203":{"position":[[745,5]]},"1211":{"position":[[79,5]]},"1218":{"position":[[79,5]]},"1226":{"position":[[385,5]]},"1237":{"position":[[136,5]]},"1243":{"position":[[162,5]]},"1255":{"position":[[144,5]]},"1258":{"position":[[128,5]]},"1289":{"position":[[850,5]]},"1303":{"position":[[340,5]]},"1322":{"position":[[1069,5]]},"1354":{"position":[[409,5]]},"1362":{"position":[[135,5]]},"1373":{"position":[[558,5]]},"1374":{"position":[[558,5]]},"1382":{"position":[[628,5]]},"1397":{"position":[[337,5]]},"1398":{"position":[[336,5]]},"1409":{"position":[[320,5]]}},"keywords":{}}],["guidanc",{"_index":2040,"title":{},"content":{"177":{"position":[[326,8]]},"264":{"position":[[169,8]]},"275":{"position":[[191,8]]}},"keywords":{}}],["guide.fil",{"_index":5352,"title":{},"content":{"1092":{"position":[[351,10]]}},"keywords":{}}],["guideev",{"_index":4941,"title":{},"content":{"892":{"position":[[555,11]]}},"keywords":{}}],["gz",{"_index":143,"title":{},"content":{"3":{"position":[[983,3]]}},"keywords":{}}],["gzip",{"_index":28,"title":{},"content":{"1":{"position":[[341,5],[379,5],[403,4]]}},"keywords":{}}],["h",{"_index":911,"title":{},"content":{"60":{"position":[[1148,1]]},"238":{"position":[[868,1]]},"341":{"position":[[604,1]]},"943":{"position":[[1036,1],[1068,1],[1121,1]]}},"keywords":{}}],["hadoop",{"_index":3148,"title":{"322":{"position":[[0,7]]}},"content":{"322":{"position":[[38,7],[847,7],[1231,6]]}},"keywords":{}}],["half",{"_index":3215,"title":{},"content":{"333":{"position":[[540,4]]},"595":{"position":[[1647,4]]}},"keywords":{}}],["halt",{"_index":4626,"title":{},"content":{"759":{"position":[[45,4]]},"772":{"position":[[56,4]]},"799":{"position":[[43,4]]},"814":{"position":[[43,4]]},"830":{"position":[[43,4]]}},"keywords":{}}],["hand",{"_index":1634,"title":{},"content":{"115":{"position":[[1322,5]]},"177":{"position":[[269,5]]},"204":{"position":[[421,4]]},"239":{"position":[[342,4]]},"259":{"position":[[471,4],[2165,4]]},"281":{"position":[[3100,5]]},"288":{"position":[[835,4]]},"296":{"position":[[1955,4],[1975,4]]},"299":{"position":[[750,4]]},"1459":{"position":[[1523,4],[1581,4]]},"1464":{"position":[[54,4],[91,4],[749,4],[793,4]]},"1467":{"position":[[29,4],[49,4]]},"1476":{"position":[[951,4],[998,4]]},"1477":{"position":[[344,4]]}},"keywords":{}}],["handi",{"_index":2930,"title":{},"content":{"291":{"position":[[460,5]]},"302":{"position":[[460,5]]}},"keywords":{}}],["handl",{"_index":836,"title":{},"content":{"56":{"position":[[539,6]]},"66":{"position":[[542,6]]},"124":{"position":[[84,6]]},"197":{"position":[[615,8]]},"239":{"position":[[1906,7],[2060,7]]},"241":{"position":[[194,6]]},"306":{"position":[[615,6]]},"326":{"position":[[357,6]]},"500":{"position":[[88,7]]},"502":{"position":[[472,7]]},"593":{"position":[[421,8]]},"867":{"position":[[1521,7]]},"869":{"position":[[1116,6],[1641,6]]},"870":{"position":[[880,6]]},"909":{"position":[[725,7]]},"925":{"position":[[725,7]]},"936":{"position":[[725,7]]},"952":{"position":[[725,7]]},"970":{"position":[[725,7]]},"1438":{"position":[[78,7]]},"1439":{"position":[[787,6]]},"1442":{"position":[[1280,6]]},"1461":{"position":[[45,6]]}},"keywords":{}}],["handler",{"_index":6024,"title":{},"content":{"1292":{"position":[[1649,7]]},"1306":{"position":[[1649,7]]},"1329":{"position":[[1649,7]]}},"keywords":{}}],["happen",{"_index":383,"title":{},"content":{"13":{"position":[[338,6]]},"14":{"position":[[63,7]]},"92":{"position":[[902,6]]},"110":{"position":[[647,9],[1025,8]]},"113":{"position":[[532,7]]},"163":{"position":[[115,8]]},"236":{"position":[[1793,7],[2041,7]]},"239":{"position":[[1375,8]]},"296":{"position":[[7125,7]]},"331":{"position":[[81,8]]},"595":{"position":[[1330,7]]},"759":{"position":[[95,8]]},"761":{"position":[[204,6]]},"763":{"position":[[199,7]]},"764":{"position":[[423,7]]},"772":{"position":[[106,8]]},"774":{"position":[[204,6]]},"776":{"position":[[199,7]]},"777":{"position":[[423,7]]},"799":{"position":[[93,8]]},"801":{"position":[[210,6]]},"803":{"position":[[199,7]]},"804":{"position":[[421,7]]},"814":{"position":[[93,8]]},"816":{"position":[[210,6]]},"818":{"position":[[199,7]]},"819":{"position":[[421,7]]},"830":{"position":[[93,8]]},"832":{"position":[[210,6]]},"834":{"position":[[199,7]]},"835":{"position":[[421,7]]},"870":{"position":[[181,6],[716,6]]},"922":{"position":[[3158,10]]}},"keywords":{}}],["hard",{"_index":2569,"title":{},"content":{"237":{"position":[[899,4],[1264,4]]},"239":{"position":[[16,4]]},"584":{"position":[[1145,4]]},"909":{"position":[[18,4]]},"925":{"position":[[18,4]]},"936":{"position":[[18,4]]},"952":{"position":[[18,4]]},"970":{"position":[[18,4]]}},"keywords":{}}],["harder",{"_index":2490,"title":{},"content":{"233":{"position":[[708,6]]}},"keywords":{}}],["harvest",{"_index":3347,"title":{"627":{"position":[[0,7]]}},"content":{"364":{"position":[[1872,7]]},"623":{"position":[[60,7]]},"628":{"position":[[56,7]]},"629":{"position":[[15,7],[57,7]]},"630":{"position":[[250,7]]},"631":{"position":[[83,7],[120,7],[562,7]]}},"keywords":{}}],["harvest:dev",{"_index":3348,"title":{},"content":{"364":{"position":[[1926,11]]},"632":{"position":[[90,11]]}},"keywords":{}}],["hash",{"_index":6025,"title":{},"content":{"1292":{"position":[[1692,4]]},"1306":{"position":[[1692,4]]},"1329":{"position":[[1692,4]]}},"keywords":{}}],["hashicorp",{"_index":1153,"title":{},"content":{"82":{"position":[[656,9]]}},"keywords":{}}],["haslog",{"_index":1688,"title":{},"content":{"123":{"position":[[76,10]]}},"keywords":{}}],["hasn't",{"_index":2911,"title":{},"content":{"284":{"position":[[480,6]]}},"keywords":{}}],["hasn’t",{"_index":1574,"title":{},"content":{"110":{"position":[[640,6]]}},"keywords":{}}],["have",{"_index":1204,"title":{},"content":{"82":{"position":[[4243,6]]},"98":{"position":[[924,6]]},"103":{"position":[[609,6]]},"133":{"position":[[635,6]]},"158":{"position":[[83,6]]},"197":{"position":[[277,6]]},"254":{"position":[[3782,6]]},"944":{"position":[[416,6]]},"945":{"position":[[1026,6]]},"1140":{"position":[[3893,6]]},"1200":{"position":[[376,6]]},"1209":{"position":[[377,6]]},"1292":{"position":[[1727,6]]},"1306":{"position":[[1727,6]]},"1316":{"position":[[3893,6]]},"1329":{"position":[[1727,6]]},"1340":{"position":[[3893,6]]},"1351":{"position":[[3893,6]]},"1370":{"position":[[1225,6]]},"1379":{"position":[[2528,6]]},"1394":{"position":[[575,6]]},"1403":{"position":[[2528,6]]},"1414":{"position":[[2528,6]]},"1431":{"position":[[3916,6]]},"1440":{"position":[[491,6]]},"1452":{"position":[[2744,6]]},"1462":{"position":[[289,6]]},"1477":{"position":[[95,6]]}},"keywords":{}}],["haven't",{"_index":1992,"title":{},"content":{"171":{"position":[[104,7]]},"172":{"position":[[103,7]]},"173":{"position":[[204,7]]},"203":{"position":[[8,7]]},"230":{"position":[[241,7]]},"1176":{"position":[[487,7]]},"1185":{"position":[[287,7]]},"1194":{"position":[[497,7]]},"1203":{"position":[[658,7]]},"1226":{"position":[[298,7]]},"1243":{"position":[[75,7]]},"1354":{"position":[[322,7]]},"1382":{"position":[[541,7]]}},"keywords":{}}],["haven’t",{"_index":2209,"title":{},"content":{"199":{"position":[[96,7]]},"239":{"position":[[109,7]]},"240":{"position":[[2687,7]]}},"keywords":{}}],["havereduct",{"_index":1602,"title":{},"content":{"113":{"position":[[35,13]]}},"keywords":{}}],["hdf",{"_index":3149,"title":{"322":{"position":[[8,5]]}},"content":{"322":{"position":[[46,5],[255,4],[459,5],[1052,4]]}},"keywords":{}}],["head",{"_index":2029,"title":{},"content":{"174":{"position":[[118,4]]},"196":{"position":[[634,4],[772,4]]},"204":{"position":[[907,4]]},"210":{"position":[[7,4],[1713,4]]},"233":{"position":[[819,4],[957,4]]},"239":{"position":[[68,4]]},"240":{"position":[[2462,4],[4618,4]]},"255":{"position":[[1205,4]]},"295":{"position":[[1044,4]]},"296":{"position":[[6881,4],[7196,4],[7789,4]]},"316":{"position":[[1530,4]]},"635":{"position":[[142,4],[257,4]]}},"keywords":{}}],["header",{"_index":1800,"title":{"640":{"position":[[21,8]]}},"content":{"138":{"position":[[2135,6]]},"141":{"position":[[2091,6]]},"142":{"position":[[2195,6]]},"146":{"position":[[274,6]]},"149":{"position":[[283,6]]},"152":{"position":[[290,6]]},"418":{"position":[[244,8]]},"419":{"position":[[2207,8],[2281,7],[2343,7],[2445,9],[2478,6]]},"439":{"position":[[501,8]]},"441":{"position":[[816,8],[890,7],[952,7],[1054,9],[1087,6]]},"489":{"position":[[127,7],[562,6],[670,6]]},"492":{"position":[[144,6],[285,7],[301,6]]},"504":{"position":[[1836,8],[1910,7],[1972,7],[2074,9],[2107,6]]},"546":{"position":[[981,8]]},"547":{"position":[[2209,8],[2283,7],[2345,7],[2447,9],[2480,6]]},"616":{"position":[[147,6],[228,6],[242,6]]},"635":{"position":[[224,7]]},"637":{"position":[[328,8],[337,7],[383,7],[407,7],[488,6],[529,6]]},"638":{"position":[[273,8]]},"639":{"position":[[1834,8],[1908,7],[1970,7],[2072,9],[2105,6]]},"640":{"position":[[62,7],[151,7],[324,7]]},"660":{"position":[[299,6],[781,6],[996,7]]},"661":{"position":[[65,8]]},"662":{"position":[[127,7],[562,6],[670,6]]},"665":{"position":[[144,6],[285,7],[301,6]]},"677":{"position":[[127,7],[562,6],[670,6]]},"680":{"position":[[144,6],[285,7],[301,6]]},"692":{"position":[[127,7],[562,6],[670,6]]},"695":{"position":[[144,6],[285,7],[301,6]]},"1022":{"position":[[310,8]]},"1023":{"position":[[2190,8],[2264,7],[2326,7],[2428,9],[2461,6]]},"1144":{"position":[[1187,7],[1208,7]]},"1213":{"position":[[864,7],[885,7]]},"1239":{"position":[[204,8],[213,7],[232,7]]},"1241":{"position":[[220,8]]}},"keywords":{}}],["headers/item",{"_index":4364,"title":{},"content":{"637":{"position":[[352,14],[467,15],[506,15]]}},"keywords":{}}],["healthcheck",{"_index":2513,"title":{},"content":{"236":{"position":[[887,12]]}},"keywords":{}}],["heatwav",{"_index":5926,"title":{"1263":{"position":[[6,8]]},"1271":{"position":[[6,8]]}},"content":{"1264":{"position":[[76,8]]},"1265":{"position":[[178,9]]},"1268":{"position":[[86,9]]},"1271":{"position":[[43,8]]}},"keywords":{}}],["heatwave:dev",{"_index":5935,"title":{},"content":{"1270":{"position":[[104,12]]}},"keywords":{}}],["heavi",{"_index":3028,"title":{},"content":{"296":{"position":[[6632,5]]}},"keywords":{}}],["hello",{"_index":1409,"title":{},"content":{"98":{"position":[[542,7]]}},"keywords":{}}],["help",{"_index":244,"title":{"328":{"position":[[13,5]]}},"content":{"7":{"position":[[464,4]]},"47":{"position":[[138,7]]},"54":{"position":[[4,4]]},"60":{"position":[[1139,4],[1180,4],[1240,4]]},"68":{"position":[[182,7],[1198,4]]},"70":{"position":[[124,5]]},"81":{"position":[[801,4]]},"83":{"position":[[291,4]]},"102":{"position":[[551,5]]},"119":{"position":[[146,5]]},"125":{"position":[[493,4]]},"141":{"position":[[334,4]]},"158":{"position":[[216,7],[756,7]]},"159":{"position":[[508,4]]},"173":{"position":[[1225,5]]},"177":{"position":[[69,4],[132,7]]},"179":{"position":[[448,5]]},"184":{"position":[[566,4]]},"191":{"position":[[267,4]]},"208":{"position":[[321,4]]},"213":{"position":[[136,4]]},"215":{"position":[[129,7]]},"238":{"position":[[987,5]]},"259":{"position":[[968,4],[2549,4]]},"264":{"position":[[906,5]]},"266":{"position":[[232,5]]},"268":{"position":[[1479,4]]},"269":{"position":[[1050,4]]},"277":{"position":[[259,4]]},"278":{"position":[[101,5]]},"290":{"position":[[865,7]]},"291":{"position":[[1508,5]]},"299":{"position":[[468,4]]},"302":{"position":[[1428,5]]},"305":{"position":[[245,5]]},"326":{"position":[[1671,4]]},"328":{"position":[[32,4]]},"341":{"position":[[558,4],[595,4]]},"390":{"position":[[637,4]]},"395":{"position":[[816,4]]},"415":{"position":[[348,4]]},"480":{"position":[[769,4],[914,4]]},"558":{"position":[[152,4]]},"870":{"position":[[972,4]]},"964":{"position":[[120,7]]},"977":{"position":[[740,4]]},"1122":{"position":[[442,4]]},"1142":{"position":[[293,4]]},"1149":{"position":[[740,4]]},"1160":{"position":[[456,4]]},"1168":{"position":[[293,4]]},"1228":{"position":[[341,4]]},"1258":{"position":[[334,4]]},"1265":{"position":[[116,4]]},"1292":{"position":[[1764,4]]},"1306":{"position":[[1764,4]]},"1329":{"position":[[1764,4]]},"1356":{"position":[[511,4],[660,4]]},"1391":{"position":[[400,4]]},"1461":{"position":[[29,4]]},"1471":{"position":[[1162,5]]}},"keywords":{}}],["helpfulli",{"_index":3021,"title":{},"content":{"296":{"position":[[5707,10]]},"315":{"position":[[1714,10]]}},"keywords":{}}],["here",{"_index":660,"title":{},"content":{"32":{"position":[[103,5]]},"47":{"position":[[64,4]]},"58":{"position":[[812,5]]},"81":{"position":[[1678,5],[2217,4]]},"129":{"position":[[1212,5]]},"159":{"position":[[927,5]]},"164":{"position":[[1714,4]]},"169":{"position":[[1221,5]]},"176":{"position":[[219,4]]},"183":{"position":[[1689,5]]},"193":{"position":[[373,5]]},"198":{"position":[[68,4]]},"199":{"position":[[126,5]]},"206":{"position":[[208,4]]},"212":{"position":[[334,5],[365,5]]},"213":{"position":[[287,4]]},"216":{"position":[[515,5]]},"224":{"position":[[1140,5]]},"232":{"position":[[936,5]]},"239":{"position":[[55,4],[147,6],[1686,5]]},"243":{"position":[[328,5],[359,5]]},"254":{"position":[[941,5],[2360,4],[2928,4]]},"270":{"position":[[126,5]]},"275":{"position":[[487,4]]},"286":{"position":[[331,5]]},"290":{"position":[[851,5]]},"296":{"position":[[1846,5],[6504,5]]},"301":{"position":[[971,5]]},"308":{"position":[[1004,5]]},"314":{"position":[[619,5],[1901,4],[2404,4]]},"417":{"position":[[2152,5]]},"577":{"position":[[253,5]]},"588":{"position":[[248,5]]},"805":{"position":[[367,5]]},"820":{"position":[[367,5]]},"836":{"position":[[367,5]]},"849":{"position":[[1644,4]]},"991":{"position":[[195,5]]},"1009":{"position":[[195,5]]},"1036":{"position":[[558,5]]},"1076":{"position":[[139,4],[291,4],[504,5]]},"1146":{"position":[[388,4]]},"1153":{"position":[[109,5]]},"1173":{"position":[[400,4]]},"1181":{"position":[[109,5]]},"1190":{"position":[[109,5]]},"1192":{"position":[[222,4]]},"1215":{"position":[[388,4]]},"1223":{"position":[[400,4]]},"1268":{"position":[[96,4]]},"1388":{"position":[[109,5]]},"1394":{"position":[[220,4]]},"1422":{"position":[[109,5]]},"1423":{"position":[[223,4]]},"1444":{"position":[[1000,5]]},"1452":{"position":[[4243,4]]},"1455":{"position":[[486,5]]},"1477":{"position":[[1480,5],[3646,5]]}},"keywords":{}}],["here>",{"_index":2786,"title":{},"content":{"263":{"position":[[223,8],[758,9]]},"267":{"position":[[2061,8]]},"270":{"position":[[323,8]]},"274":{"position":[[621,8]]},"284":{"position":[[132,8]]}},"keywords":{}}],["here'",{"_index":1895,"title":{},"content":{"161":{"position":[[478,6]]},"162":{"position":[[1812,6]]},"164":{"position":[[480,6]]},"281":{"position":[[1932,6]]},"436":{"position":[[47,6]]},"477":{"position":[[492,6]]},"598":{"position":[[456,6]]},"660":{"position":[[943,6]]}},"keywords":{}}],["here’",{"_index":2308,"title":{},"content":{"210":{"position":[[1804,6]]},"1465":{"position":[[393,6]]}},"keywords":{}}],["hh:mm",{"_index":4608,"title":{},"content":{"757":{"position":[[643,6]]},"770":{"position":[[643,6]]},"797":{"position":[[643,6]]},"812":{"position":[[643,6]]},"828":{"position":[[643,6]]},"1285":{"position":[[655,6]]},"1300":{"position":[[655,6]]},"1324":{"position":[[655,6]]},"1452":{"position":[[692,6]]}},"keywords":{}}],["hh:mmoffset",{"_index":6545,"title":{},"content":{"1452":{"position":[[3219,13]]}},"keywords":{}}],["hidden",{"_index":1806,"title":{},"content":{"138":{"position":[[2472,7]]},"142":{"position":[[2550,7]]},"410":{"position":[[291,6]]}},"keywords":{}}],["hierarch",{"_index":1673,"title":{},"content":{"122":{"position":[[307,12]]},"590":{"position":[[187,15]]}},"keywords":{}}],["hierarchi",{"_index":4239,"title":{},"content":{"590":{"position":[[772,10]]}},"keywords":{}}],["high",{"_index":634,"title":{},"content":{"27":{"position":[[501,4]]},"124":{"position":[[1001,4]]},"176":{"position":[[192,4]]},"197":{"position":[[568,4]]},"215":{"position":[[149,4]]},"219":{"position":[[94,4]]},"239":{"position":[[689,4],[1984,4]]},"330":{"position":[[61,4]]},"333":{"position":[[84,4],[189,4]]},"363":{"position":[[56,4]]},"515":{"position":[[969,4]]},"616":{"position":[[273,4]]},"842":{"position":[[2367,4]]},"912":{"position":[[1513,4]]},"922":{"position":[[3132,4]]}},"keywords":{}}],["high_prior",{"_index":6026,"title":{},"content":{"1292":{"position":[[1801,13]]},"1306":{"position":[[1801,13]]},"1329":{"position":[[1801,13]]}},"keywords":{}}],["higher",{"_index":1590,"title":{},"content":{"111":{"position":[[544,6]]},"120":{"position":[[2406,6]]},"263":{"position":[[614,6]]},"320":{"position":[[1522,6]]},"785":{"position":[[948,6]]},"794":{"position":[[409,7]]},"809":{"position":[[409,7]]},"825":{"position":[[409,7]]},"870":{"position":[[955,6]]},"1020":{"position":[[1477,6],[1905,6]]},"1036":{"position":[[659,6],[705,6]]},"1286":{"position":[[466,7]]},"1301":{"position":[[466,7]]},"1325":{"position":[[466,7]]}},"keywords":{}}],["highest",{"_index":3839,"title":{},"content":{"480":{"position":[[1137,7]]},"1268":{"position":[[668,7]]}},"keywords":{}}],["highli",{"_index":732,"title":{},"content":{"41":{"position":[[483,6]]},"121":{"position":[[2022,6]]},"320":{"position":[[366,6]]},"329":{"position":[[1149,6]]},"428":{"position":[[154,7],[239,7]]}},"keywords":{}}],["highlight",{"_index":5378,"title":{"1097":{"position":[[30,11]]}},"content":{},"keywords":{}}],["hint",{"_index":2448,"title":{},"content":{"221":{"position":[[761,4]]},"228":{"position":[[505,5]]}},"keywords":{}}],["histogram",{"_index":6027,"title":{},"content":{"1292":{"position":[[1848,9]]},"1306":{"position":[[1848,9]]},"1329":{"position":[[1848,9]]}},"keywords":{}}],["histor",{"_index":54,"title":{"373":{"position":[[14,10]]},"975":{"position":[[11,10]]},"999":{"position":[[13,10]]}},"content":{"1":{"position":[[739,10]]},"34":{"position":[[611,10]]},"77":{"position":[[39,10]]},"84":{"position":[[1,13]]},"106":{"position":[[623,10]]},"110":{"position":[[323,10],[467,10]]},"111":{"position":[[298,10]]},"121":{"position":[[446,10]]},"138":{"position":[[1390,10]]},"142":{"position":[[1391,10]]},"162":{"position":[[286,10]]},"320":{"position":[[1279,10]]},"321":{"position":[[2358,10]]},"323":{"position":[[746,10],[950,10]]},"329":{"position":[[190,12],[709,10],[806,10]]},"364":{"position":[[3004,10]]},"373":{"position":[[104,10],[194,10],[430,10],[509,10],[846,10],[1052,10]]},"377":{"position":[[204,10],[238,10],[271,10],[1105,10]]},"379":{"position":[[297,10],[427,10],[490,10]]},"595":{"position":[[97,10],[422,10],[1211,10]]},"869":{"position":[[633,10]]},"974":{"position":[[320,10]]},"975":{"position":[[5,10],[193,10],[318,10]]},"977":{"position":[[103,10],[135,10],[315,10],[527,10],[573,10]]},"1006":{"position":[[436,10]]},"1449":{"position":[[604,10]]}},"keywords":{}}],["histori",{"_index":1102,"title":{},"content":{"77":{"position":[[178,7]]},"867":{"position":[[404,7]]},"883":{"position":[[47,7]]},"1292":{"position":[[1889,7]]},"1306":{"position":[[1889,7]]},"1329":{"position":[[1889,7]]}},"keywords":{}}],["history)usersthread",{"_index":5180,"title":{},"content":{"1012":{"position":[[154,20]]}},"keywords":{}}],["historymod",{"_index":4864,"title":{},"content":{"867":{"position":[[391,12]]},"868":{"position":[[237,12]]}},"keywords":{}}],["historyquotessubscript",{"_index":4393,"title":{},"content":{"649":{"position":[[446,25]]}},"keywords":{}}],["hit",{"_index":3190,"title":{},"content":{"329":{"position":[[936,3]]},"870":{"position":[[694,3]]}},"keywords":{}}],["hive",{"_index":148,"title":{"4":{"position":[[0,4]]},"322":{"position":[[18,5]]}},"content":{"3":{"position":[[1159,4]]},"4":{"position":[[196,4],[333,4],[367,4],[418,4]]},"322":{"position":[[579,5],[1336,4],[1671,4]]}},"keywords":{}}],["hoc",{"_index":170,"title":{},"content":{"4":{"position":[[490,3]]},"577":{"position":[[71,3]]},"588":{"position":[[66,3]]},"821":{"position":[[618,3]]},"912":{"position":[[634,3],[1354,3]]}},"keywords":{}}],["hold",{"_index":100,"title":{},"content":{"3":{"position":[[29,4]]},"21":{"position":[[557,4],[629,4],[679,4]]},"110":{"position":[[54,4]]},"112":{"position":[[62,4]]},"156":{"position":[[575,4]]},"1031":{"position":[[225,4]]},"1140":{"position":[[3954,4]]},"1316":{"position":[[3954,4]]},"1340":{"position":[[3954,4]]},"1351":{"position":[[3954,4]]},"1379":{"position":[[2583,4]]},"1403":{"position":[[2583,4]]},"1414":{"position":[[2583,4]]},"1431":{"position":[[3977,4]]},"1461":{"position":[[2808,4]]}},"keywords":{}}],["holdlock",{"_index":6326,"title":{},"content":{"1379":{"position":[[2621,8]]},"1403":{"position":[[2621,8]]},"1414":{"position":[[2621,8]]}},"keywords":{}}],["hollow",{"_index":1786,"title":{},"content":{"138":{"position":[[1480,7]]},"141":{"position":[[1482,7]]},"142":{"position":[[1489,7]]}},"keywords":{}}],["home",{"_index":2449,"title":{},"content":{"221":{"position":[[999,4]]},"222":{"position":[[244,4]]},"223":{"position":[[210,4]]},"224":{"position":[[263,4]]},"1298":{"position":[[210,4]]},"1322":{"position":[[244,4]]},"1335":{"position":[[244,4]]},"1346":{"position":[[210,4]]}},"keywords":{}}],["homebrew",{"_index":890,"title":{},"content":{"58":{"position":[[711,9]]},"169":{"position":[[957,9]]}},"keywords":{}}],["homepag",{"_index":4835,"title":{},"content":{"856":{"position":[[218,9]]}},"keywords":{}}],["honor",{"_index":6273,"title":{},"content":{"1358":{"position":[[477,5]]}},"keywords":{}}],["hood",{"_index":1595,"title":{},"content":{"112":{"position":[[654,4]]},"326":{"position":[[598,5]]}},"keywords":{}}],["horizont",{"_index":2207,"title":{},"content":{"198":{"position":[[1064,12]]}},"keywords":{}}],["host",{"_index":647,"title":{"175":{"position":[[5,7]]},"639":{"position":[[23,6]]},"752":{"position":[[5,6]]},"791":{"position":[[5,6]]},"917":{"position":[[5,6]]},"1042":{"position":[[5,6]]},"1408":{"position":[[5,6]]}},"content":{"30":{"position":[[176,6]]},"82":{"position":[[1386,5],[1992,5],[3816,5],[4328,5]]},"83":{"position":[[336,7]]},"175":{"position":[[88,4],[158,7],[276,6],[352,5]]},"179":{"position":[[598,6]]},"184":{"position":[[447,4]]},"189":{"position":[[26,5]]},"192":{"position":[[542,4],[859,4],[924,4]]},"221":{"position":[[828,7]]},"222":{"position":[[47,6]]},"223":{"position":[[47,6]]},"224":{"position":[[47,6]]},"225":{"position":[[272,7]]},"240":{"position":[[2802,4]]},"288":{"position":[[888,4]]},"291":{"position":[[491,4]]},"299":{"position":[[803,4]]},"302":{"position":[[491,4]]},"329":{"position":[[652,7]]},"370":{"position":[[298,4],[1598,4]]},"402":{"position":[[66,4]]},"403":{"position":[[110,5]]},"428":{"position":[[96,4]]},"634":{"position":[[48,6]]},"635":{"position":[[69,5]]},"750":{"position":[[1311,6]]},"753":{"position":[[1540,4]]},"757":{"position":[[88,4]]},"770":{"position":[[88,4]]},"782":{"position":[[77,4]]},"788":{"position":[[73,6],[159,6]]},"789":{"position":[[1712,6]]},"790":{"position":[[55,7],[75,6]]},"793":{"position":[[1563,4]]},"797":{"position":[[88,4]]},"808":{"position":[[1531,4]]},"812":{"position":[[88,4]]},"828":{"position":[[88,4]]},"867":{"position":[[81,4]]},"907":{"position":[[81,4]]},"914":{"position":[[102,6],[188,6]]},"915":{"position":[[1168,6]]},"916":{"position":[[55,7],[75,6]]},"919":{"position":[[2470,4]]},"923":{"position":[[81,4]]},"931":{"position":[[2010,4]]},"934":{"position":[[81,4]]},"950":{"position":[[81,4]]},"963":{"position":[[1322,6]]},"968":{"position":[[81,4]]},"1021":{"position":[[350,4]]},"1031":{"position":[[602,4]]},"1034":{"position":[[55,4],[78,4]]},"1037":{"position":[[111,5]]},"1039":{"position":[[34,6],[292,6]]},"1041":{"position":[[55,7],[75,6]]},"1042":{"position":[[1146,7]]},"1043":{"position":[[1834,4]]},"1045":{"position":[[88,4]]},"1050":{"position":[[970,7],[990,6]]},"1053":{"position":[[88,4]]},"1059":{"position":[[1857,4]]},"1061":{"position":[[88,4]]},"1138":{"position":[[368,4],[889,4]]},"1151":{"position":[[77,4]]},"1188":{"position":[[77,4]]},"1196":{"position":[[88,4]]},"1253":{"position":[[77,4]]},"1267":{"position":[[66,4],[109,4]]},"1271":{"position":[[62,6]]},"1282":{"position":[[55,7]]},"1285":{"position":[[160,4],[203,4]]},"1289":{"position":[[1292,4],[1402,4],[1501,4],[1550,4],[1669,4]]},"1292":{"position":[[1924,4],[1960,5]]},"1298":{"position":[[47,6],[1124,4],[1234,4]]},"1300":{"position":[[160,4],[203,4]]},"1303":{"position":[[1003,4],[1113,4],[1118,4],[1653,4]]},"1306":{"position":[[1924,4],[1960,5]]},"1310":{"position":[[55,7],[613,4],[723,4],[822,4],[871,4],[990,4],[1069,4],[1077,5]]},"1313":{"position":[[151,4],[194,4]]},"1322":{"position":[[47,6],[1511,4],[1621,4],[1702,4]]},"1324":{"position":[[160,4],[203,4]]},"1329":{"position":[[1924,4],[1960,5]]},"1335":{"position":[[47,6],[1159,4],[1269,4],[1350,4]]},"1337":{"position":[[151,4],[194,4]]},"1346":{"position":[[47,6],[1125,4],[1235,4],[1276,4]]},"1348":{"position":[[151,4],[194,4]]},"1376":{"position":[[160,4],[203,4]]},"1379":{"position":[[2672,4]]},"1382":{"position":[[375,4]]},"1386":{"position":[[66,4],[99,4]]},"1387":{"position":[[126,5],[680,5]]},"1397":{"position":[[1092,4]]},"1398":{"position":[[1095,4]]},"1400":{"position":[[160,4],[203,4]]},"1403":{"position":[[2672,4]]},"1407":{"position":[[55,7],[75,6]]},"1408":{"position":[[419,7]]},"1409":{"position":[[1107,4]]},"1411":{"position":[[160,4],[203,4]]},"1414":{"position":[[2672,4]]},"1418":{"position":[[8,4]]},"1420":{"position":[[66,4]]},"1421":{"position":[[72,5]]},"1425":{"position":[[122,4]]},"1427":{"position":[[151,4]]}},"keywords":{}}],["host:port",{"_index":3404,"title":{},"content":{"370":{"position":[[306,9]]},"753":{"position":[[1643,9]]},"757":{"position":[[96,9]]},"770":{"position":[[96,9]]},"793":{"position":[[1666,9]]},"797":{"position":[[96,9]]},"808":{"position":[[1616,9]]},"812":{"position":[[96,9]]},"828":{"position":[[96,9]]},"867":{"position":[[89,9]]},"907":{"position":[[89,9]]},"919":{"position":[[2573,9]]},"923":{"position":[[89,9]]},"931":{"position":[[2095,9]]},"934":{"position":[[89,9]]},"950":{"position":[[89,9]]},"968":{"position":[[89,9]]},"1043":{"position":[[1908,9]]},"1045":{"position":[[96,9]]},"1053":{"position":[[96,9]]},"1059":{"position":[[1942,9]]},"1061":{"position":[[96,9]]},"1303":{"position":[[1738,9]]},"1310":{"position":[[581,10]]},"1335":{"position":[[1127,10]]},"1346":{"position":[[1093,10]]},"1397":{"position":[[1177,9]]},"1398":{"position":[[1180,9]]},"1409":{"position":[[1181,9]]},"1421":{"position":[[78,9]]}},"keywords":{}}],["host:port/sid",{"_index":4902,"title":{},"content":{"879":{"position":[[155,13]]}},"keywords":{}}],["host[:port",{"_index":5807,"title":{},"content":{"1188":{"position":[[128,13]]}},"keywords":{}}],["hostnam",{"_index":1132,"title":{},"content":{"81":{"position":[[2265,8]]},"225":{"position":[[138,9]]},"236":{"position":[[657,9]]},"402":{"position":[[71,8]]},"963":{"position":[[117,8]]},"1268":{"position":[[504,9],[646,9]]},"1286":{"position":[[2013,9],[2112,8],[2289,9]]},"1301":{"position":[[1849,9],[1948,8],[2125,9]]},"1325":{"position":[[2013,9],[2112,8],[2289,9]]}},"keywords":{}}],["hostname>/mi",{"_index":3870,"title":{},"content":{"488":{"position":[[824,15]]},"659":{"position":[[981,15]]},"676":{"position":[[824,15]]},"691":{"position":[[824,15]]}},"keywords":{}}],["hostname>/webhook",{"_index":3866,"title":{},"content":{"488":{"position":[[335,20]]},"659":{"position":[[492,20]]},"676":{"position":[[335,20]]},"691":{"position":[[335,20]]}},"keywords":{}}],["hour",{"_index":1832,"title":{},"content":{"146":{"position":[[167,5],[187,5],[298,6],[308,6],[318,6],[630,5],[656,5]]},"149":{"position":[[176,5],[196,5],[307,6],[317,6],[327,6],[603,5],[629,5]]},"152":{"position":[[183,5],[203,5],[314,6],[324,6],[334,6],[606,5],[632,5]]},"198":{"position":[[744,5]]},"209":{"position":[[1712,5]]},"240":{"position":[[3365,6],[3414,5]]},"279":{"position":[[323,6]]},"284":{"position":[[635,5]]},"578":{"position":[[66,5]]},"595":{"position":[[1655,4]]},"767":{"position":[[2363,7]]},"785":{"position":[[924,6]]},"792":{"position":[[2344,7]]},"821":{"position":[[873,5]]},"824":{"position":[[2475,7]]},"842":{"position":[[2086,5]]},"891":{"position":[[287,4]]},"1036":{"position":[[880,6]]},"1085":{"position":[[1125,5]]},"1140":{"position":[[3988,4]]},"1162":{"position":[[720,6]]},"1292":{"position":[[1991,4]]},"1306":{"position":[[1991,4]]},"1316":{"position":[[3988,4]]},"1329":{"position":[[1991,4]]},"1340":{"position":[[3988,4]]},"1351":{"position":[[3988,4]]},"1379":{"position":[[2718,4]]},"1403":{"position":[[2718,4]]},"1414":{"position":[[2718,4]]},"1431":{"position":[[4011,4]]},"1452":{"position":[[1783,4],[1824,5],[1882,5],[1975,5],[2991,6],[3073,4],[3474,5]]},"1453":{"position":[[635,5]]},"1471":{"position":[[931,5]]}},"keywords":{}}],["hour_microsec",{"_index":6030,"title":{},"content":{"1292":{"position":[[2026,13]]},"1306":{"position":[[2026,13]]},"1329":{"position":[[2026,13]]}},"keywords":{}}],["hour_minut",{"_index":6031,"title":{},"content":{"1292":{"position":[[2068,11]]},"1306":{"position":[[2068,11]]},"1329":{"position":[[2068,11]]}},"keywords":{}}],["hour_second",{"_index":6034,"title":{},"content":{"1292":{"position":[[2104,11]]},"1306":{"position":[[2104,11]]},"1329":{"position":[[2104,11]]}},"keywords":{}}],["hourli",{"_index":3728,"title":{},"content":{"443":{"position":[[83,7],[173,7],[251,7],[363,7],[444,7]]},"1080":{"position":[[137,6],[215,6],[301,6],[389,6],[488,6],[600,6],[668,6],[748,6]]},"1087":{"position":[[180,7]]}},"keywords":{}}],["hourscan",{"_index":3905,"title":{},"content":{"506":{"position":[[61,11]]}},"keywords":{}}],["hous",{"_index":3178,"title":{},"content":{"329":{"position":[[285,5]]}},"keywords":{}}],["hover",{"_index":1807,"title":{},"content":{"138":{"position":[[2513,5],[2649,5]]},"141":{"position":[[978,5],[2239,5]]},"142":{"position":[[2591,5],[2726,5]]},"146":{"position":[[563,5]]},"149":{"position":[[536,5]]},"152":{"position":[[539,5]]}},"keywords":{}}],["href=\\"/wiki/file:jeton._ordinaire_des_guerres_",{"_index":2744,"title":{},"content":{"253":{"position":[[2317,52]]},"313":{"position":[[2317,52]]}},"keywords":{}}],["http",{"_index":1910,"title":{"484":{"position":[[8,4]]},"633":{"position":[[0,4]]},"639":{"position":[[18,4]]},"640":{"position":[[16,4]]},"656":{"position":[[0,4]]},"672":{"position":[[9,4]]},"687":{"position":[[5,4]]},"1235":{"position":[[0,4]]}},"content":{"162":{"position":[[316,4]]},"363":{"position":[[1330,4],[1386,4],[1400,4],[1468,4]]},"489":{"position":[[122,4]]},"492":{"position":[[139,4]]},"503":{"position":[[89,4]]},"635":{"position":[[50,4],[115,4],[147,4],[430,4]]},"636":{"position":[[250,4]]},"637":{"position":[[141,4],[225,4],[306,4],[378,4],[402,4],[1048,4],[1070,4]]},"638":{"position":[[89,4]]},"639":{"position":[[1,4],[251,4]]},"640":{"position":[[86,4]]},"660":{"position":[[294,4],[776,4]]},"661":{"position":[[60,4]]},"662":{"position":[[122,4]]},"665":{"position":[[139,4]]},"677":{"position":[[122,4]]},"680":{"position":[[139,4]]},"692":{"position":[[122,4]]},"695":{"position":[[139,4]]},"1154":{"position":[[289,5]]},"1188":{"position":[[234,4],[244,4]]},"1196":{"position":[[117,7],[128,9]]},"1236":{"position":[[104,4]]},"1239":{"position":[[131,4],[143,4],[258,4]]}},"keywords":{}}],["http://192.168.1.100:3000",{"_index":5908,"title":{},"content":{"1241":{"position":[[180,26]]}},"keywords":{}}],["http://acme.com/teamuser#userprofile/#schema",{"_index":6634,"title":{},"content":{"1461":{"position":[[5656,44]]}},"keywords":{}}],["http://dashboard.estuary.devprivaci",{"_index":4836,"title":{},"content":{"856":{"position":[[228,35]]}},"keywords":{}}],["http://dashboard.estuary.devwebsit",{"_index":4834,"title":{},"content":{"856":{"position":[[182,35]]}},"keywords":{}}],["http://www.acme.com/teamuser#userprofile.flow.yaml",{"_index":6631,"title":{},"content":{"1461":{"position":[[5380,50]]}},"keywords":{}}],["http_path",{"_index":5809,"title":{},"content":{"1188":{"position":[[223,10]]},"1189":{"position":[[139,10]]}},"keywords":{}}],["https://<your",{"_index":3865,"title":{},"content":{"488":{"position":[[311,16],[800,16]]},"657":{"position":[[533,16]]},"659":{"position":[[468,16],[957,16]]},"675":{"position":[[200,16]]},"676":{"position":[[311,16],[800,16]]},"691":{"position":[[311,16],[800,16]]}},"keywords":{}}],["https://abc123",{"_index":3861,"title":{},"content":{"488":{"position":[[87,14]]},"659":{"position":[[244,14]]},"676":{"position":[[87,14]]},"691":{"position":[[87,14]]}},"keywords":{}}],["https://api.aircall.io/v1/numb",{"_index":3269,"title":{},"content":{"354":{"position":[[52,33]]}},"keywords":{}}],["https://cluster_id.region.cloud_platform.domain:port",{"_index":5826,"title":{},"content":{"1196":{"position":[[185,52]]}},"keywords":{}}],["https://console.neon.tech/api/v2/projects/hidden",{"_index":5088,"title":{},"content":{"943":{"position":[[934,49]]}},"keywords":{}}],["https://dashboard.stripe.com/apikey",{"_index":5290,"title":{},"content":{"1076":{"position":[[296,36]]}},"keywords":{}}],["https://dashboard.stripe.com/settings/account",{"_index":5288,"title":{},"content":{"1076":{"position":[[144,45]]}},"keywords":{}}],["https://dekaf.estuary.devsecur",{"_index":2637,"title":{},"content":{"247":{"position":[[141,33]]}},"keywords":{}}],["https://dekaf.estuary.devusernam",{"_index":5412,"title":{},"content":{"1118":{"position":[[628,34]]}},"keywords":{}}],["https://docs.google.com/spreadsheet",{"_index":4322,"title":{},"content":{"620":{"position":[[200,40]]}},"keywords":{}}],["https://docs.google.com/spreadsheets/d/<your_spreadsheet_id>/edit",{"_index":5914,"title":{},"content":{"1248":{"position":[[222,72]]}},"keywords":{}}],["https://ec47fc4d2c53414e1307e85726d4b9bb.u",{"_index":5832,"title":{},"content":{"1197":{"position":[[202,43]]}},"keywords":{}}],["https://example.com",{"_index":5355,"title":{},"content":{"1092":{"position":[[421,20]]}},"keywords":{}}],["https://example.com/yet/another/migration.sql",{"_index":1441,"title":{},"content":{"100":{"position":[[564,45]]}},"keywords":{}}],["https://example/path/flow.yaml",{"_index":1289,"title":{},"content":{"87":{"position":[[483,30]]}},"keywords":{}}],["https://ga",{"_index":4158,"title":{},"content":{"573":{"position":[[970,10]]}},"keywords":{}}],["https://github.com/estuary/flow/releases/latest/download/flowctl",{"_index":883,"title":{},"content":{"58":{"position":[[362,65],[538,65]]},"169":{"position":[[603,65],[782,65]]}},"keywords":{}}],["https://iamcredentials.googleapis.com/v1/project",{"_index":4088,"title":{},"content":{"548":{"position":[[975,50]]}},"keywords":{}}],["https://mi",{"_index":4361,"title":{},"content":{"635":{"position":[[324,10]]},"638":{"position":[[116,10]]}},"keywords":{}}],["https://my_subdomain.zendesk.com",{"_index":5461,"title":{},"content":{"1130":{"position":[[43,34]]},"1131":{"position":[[43,34]]},"1133":{"position":[[1069,34]]}},"keywords":{}}],["https://oauth2.googleapis.com/token",{"_index":4096,"title":{},"content":{"548":{"position":[[1464,35]]}},"keywords":{}}],["https://raw.githubusercontent.com/estuary/flow",{"_index":1295,"title":{},"content":{"87":{"position":[[773,46]]}},"keywords":{}}],["https://www.estuary.dev/privaci",{"_index":4837,"title":{},"content":{"856":{"position":[[272,31]]}},"keywords":{}}],["https://www.estuary.dev/term",{"_index":4839,"title":{},"content":{"856":{"position":[[325,30]]}},"keywords":{}}],["https://www.googleapis.com/auth/webmasters.readonli",{"_index":4305,"title":{},"content":{"609":{"position":[[446,51]]}},"keywords":{}}],["https://yaml",{"_index":1238,"title":{},"content":{"83":{"position":[[1418,12]]}},"keywords":{}}],["https://your",{"_index":3858,"title":{},"content":{"487":{"position":[[394,12]]}},"keywords":{}}],["https://yourdomain.com",{"_index":4312,"title":{},"content":{"612":{"position":[[301,22]]}},"keywords":{}}],["https://{}:{your_estuary_refresh_token}@dekaf.estuary.dev",{"_index":2686,"title":{},"content":{"250":{"position":[[1551,57]]}},"keywords":{}}],["hub",{"_index":4425,"title":{},"content":{"675":{"position":[[40,3]]}},"keywords":{}}],["hub,github",{"_index":1116,"title":{},"content":{"81":{"position":[[102,10]]}},"keywords":{}}],["hubspot",{"_index":3303,"title":{"641":{"position":[[0,7]]},"642":{"position":[[10,7]]},"644":{"position":[[34,7]]},"648":{"position":[[0,7]]},"651":{"position":[[34,7]]}},"content":{"363":{"position":[[1484,7],[1550,7]]},"364":{"position":[[1938,7]]},"642":{"position":[[66,7],[277,7]]},"643":{"position":[[41,7]]},"644":{"position":[[3,7]]},"645":{"position":[[3,7],[87,7],[140,7],[215,7],[267,8]]},"646":{"position":[[250,7],[546,7]]},"647":{"position":[[89,7]]},"649":{"position":[[48,7]]},"650":{"position":[[41,7]]},"651":{"position":[[3,7]]},"652":{"position":[[3,7],[87,7],[140,7],[215,7],[267,8]]},"653":{"position":[[250,7]]},"654":{"position":[[267,7],[596,7]]},"655":{"position":[[387,7]]}},"keywords":{}}],["hubspot:dev",{"_index":3349,"title":{},"content":{"364":{"position":[[1992,11]]},"655":{"position":[[89,11]]}},"keywords":{}}],["huge",{"_index":2048,"title":{},"content":{"180":{"position":[[70,4]]}},"keywords":{}}],["human",{"_index":961,"title":{},"content":{"64":{"position":[[459,5]]}},"keywords":{}}],["hundr",{"_index":2691,"title":{},"content":{"253":{"position":[[816,8]]},"313":{"position":[[816,8]]}},"keywords":{}}],["hypert",{"_index":6418,"title":{"1429":{"position":[[21,12]]}},"content":{"1427":{"position":[[766,12]]},"1429":{"position":[[1,11],[143,11]]}},"keywords":{}}],["hypothet",{"_index":3153,"title":{},"content":{"322":{"position":[[1189,12]]},"1453":{"position":[[391,12]]}},"keywords":{}}],["i.",{"_index":2195,"title":{},"content":{"197":{"position":[[1496,6]]}},"keywords":{}}],["iam",{"_index":2023,"title":{},"content":{"173":{"position":[[792,3],[847,5]]},"390":{"position":[[164,3],[443,3]]},"395":{"position":[[324,3],[613,3]]},"400":{"position":[[124,3]]},"405":{"position":[[5,3],[23,3]]},"406":{"position":[[68,3],[281,3],[345,3],[475,3]]},"408":{"position":[[197,3],[244,3],[304,3],[345,3]]},"413":{"position":[[219,3],[383,3]]},"415":{"position":[[224,3],[390,3],[429,3],[1005,3]]},"430":{"position":[[68,3],[123,3],[164,3]]},"432":{"position":[[567,3]]},"433":{"position":[[433,3]]},"477":{"position":[[849,3]]},"548":{"position":[[24,3]]},"598":{"position":[[812,3]]},"1122":{"position":[[41,3],[240,3]]},"1142":{"position":[[147,3]]},"1149":{"position":[[602,3]]},"1160":{"position":[[147,3],[227,3]]},"1168":{"position":[[147,3]]},"1203":{"position":[[558,3],[586,3]]},"1204":{"position":[[64,4],[117,3],[196,3],[527,3]]},"1227":{"position":[[207,3]]},"1228":{"position":[[222,3]]},"1258":{"position":[[196,3]]}},"keywords":{}}],["iana",{"_index":4592,"title":{},"content":{"750":{"position":[[1137,4]]},"754":{"position":[[536,4],[898,4],[1308,4]]},"757":{"position":[[620,4]]},"766":{"position":[[1137,4]]},"770":{"position":[[620,4]]},"789":{"position":[[1538,4]]},"794":{"position":[[578,4],[1104,4],[1512,4]]},"797":{"position":[[620,4]]},"807":{"position":[[1125,4]]},"809":{"position":[[578,4],[1104,4],[1512,4]]},"812":{"position":[[620,4]]},"823":{"position":[[1125,4]]},"825":{"position":[[578,4],[940,4],[1348,4]]},"828":{"position":[[620,4]]},"1285":{"position":[[632,4]]},"1286":{"position":[[635,4],[1161,4],[1598,4]]},"1300":{"position":[[632,4]]},"1301":{"position":[[635,4],[997,4],[1434,4]]},"1324":{"position":[[632,4]]},"1325":{"position":[[635,4],[1161,4],[1598,4]]},"1452":{"position":[[669,4],[3194,4]]}},"keywords":{}}],["iceberg",{"_index":5413,"title":{"1159":{"position":[[7,7]]},"1164":{"position":[[0,7]]}},"content":{"1120":{"position":[[333,7]]},"1164":{"position":[[39,7],[98,7],[206,7]]}},"keywords":{}}],["iceberg:dev",{"_index":5414,"title":{},"content":{"1120":{"position":[[408,11]]}},"keywords":{}}],["iceberg:dev"",{"_index":5766,"title":{},"content":{"1163":{"position":[[107,17]]}},"keywords":{}}],["icon",{"_index":1797,"title":{},"content":{"138":{"position":[[1841,4]]},"142":{"position":[[1882,4]]}},"keywords":{}}],["id",{"_index":14,"title":{"552":{"position":[[9,2],[29,3]]},"660":{"position":[[8,4]]},"661":{"position":[[18,4]]}},"content":{"1":{"position":[[180,5]]},"14":{"position":[[474,3],[547,4],[557,5],[680,3],[863,3],[1187,3]]},"67":{"position":[[167,2]]},"70":{"position":[[733,4],[750,3],[766,5]]},"90":{"position":[[388,3]]},"94":{"position":[[661,3]]},"107":{"position":[[1642,3],[1655,3],[3064,2],[3490,3]]},"123":{"position":[[243,5]]},"128":{"position":[[373,6]]},"132":{"position":[[504,4],[524,4],[544,4],[664,4]]},"133":{"position":[[440,4],[455,4]]},"160":{"position":[[607,2],[789,3],[836,5],[888,4]]},"161":{"position":[[653,5],[737,5],[830,5]]},"162":{"position":[[2138,3],[2253,3],[2301,5]]},"164":{"position":[[1096,2]]},"166":{"position":[[375,4],[392,3],[485,5]]},"173":{"position":[[332,3],[422,3],[508,3]]},"183":{"position":[[2153,2]]},"190":{"position":[[862,2]]},"263":{"position":[[432,3],[697,3],[742,2],[755,2]]},"277":{"position":[[324,4],[744,4]]},"278":{"position":[[946,5],[1307,4]]},"279":{"position":[[1209,5],[1277,2],[1698,2],[1703,4]]},"280":{"position":[[1459,5]]},"301":{"position":[[709,2]]},"351":{"position":[[72,2],[79,2]]},"375":{"position":[[338,2]]},"377":{"position":[[1169,2],[1192,3]]},"384":{"position":[[289,2]]},"385":{"position":[[700,4]]},"387":{"position":[[487,2],[501,2],[780,3],[803,3]]},"392":{"position":[[91,2]]},"397":{"position":[[87,2],[105,2]]},"408":{"position":[[212,2],[230,2]]},"417":{"position":[[735,2]]},"418":{"position":[[253,4]]},"432":{"position":[[965,2]]},"435":{"position":[[133,2]]},"436":{"position":[[90,2],[242,2],[256,2],[284,2],[543,2],[882,2],[979,3],[1002,3]]},"438":{"position":[[803,2],[817,2],[1085,2],[1092,2],[1248,2],[1255,2]]},"439":{"position":[[510,4]]},"446":{"position":[[98,2]]},"448":{"position":[[390,2],[404,2],[1063,2]]},"454":{"position":[[176,2]]},"477":{"position":[[634,2],[694,3],[941,2]]},"479":{"position":[[278,2]]},"480":{"position":[[839,4]]},"482":{"position":[[80,2],[99,2]]},"492":{"position":[[194,2]]},"514":{"position":[[95,3]]},"515":{"position":[[419,3]]},"517":{"position":[[635,2],[662,2]]},"546":{"position":[[990,4]]},"552":{"position":[[20,2],[69,3],[286,2],[594,4],[641,3]]},"553":{"position":[[63,2],[257,3]]},"554":{"position":[[63,2],[583,2]]},"556":{"position":[[599,2],[613,2],[1441,4],[1460,2],[1825,2],[1984,2]]},"565":{"position":[[63,2]]},"570":{"position":[[10,2]]},"571":{"position":[[10,2]]},"573":{"position":[[839,2],[846,2]]},"581":{"position":[[267,3]]},"584":{"position":[[852,2]]},"598":{"position":[[598,2],[658,3],[903,2]]},"601":{"position":[[79,2],[103,2]]},"602":{"position":[[932,2],[1065,3]]},"629":{"position":[[73,2]]},"631":{"position":[[80,2],[99,3]]},"638":{"position":[[282,4]]},"660":{"position":[[362,2],[1105,2],[1134,2]]},"661":{"position":[[42,2]]},"665":{"position":[[194,2]]},"668":{"position":[[160,2]]},"670":{"position":[[78,2],[92,2]]},"680":{"position":[[194,2]]},"695":{"position":[[194,2]]},"720":{"position":[[261,3],[314,3]]},"728":{"position":[[79,2],[109,3],[201,2],[228,3]]},"739":{"position":[[160,2]]},"741":{"position":[[78,2],[92,2]]},"745":{"position":[[98,3]]},"747":{"position":[[80,2],[96,2]]},"757":{"position":[[1167,2],[1175,2],[1256,3]]},"770":{"position":[[1167,2],[1175,2],[1256,3]]},"797":{"position":[[1167,2],[1175,2],[1256,3]]},"812":{"position":[[1167,2],[1175,2],[1256,3]]},"821":{"position":[[1524,3]]},"828":{"position":[[1167,2],[1175,2],[1256,3]]},"840":{"position":[[164,3],[300,3],[2312,2]]},"842":{"position":[[87,2],[113,2],[213,2],[220,2],[276,2]]},"843":{"position":[[616,2],[723,2]]},"849":{"position":[[70,2],[243,3],[3452,2],[3656,2]]},"867":{"position":[[1875,2],[1883,2],[1964,3]]},"869":{"position":[[51,3],[67,2]]},"885":{"position":[[78,2],[92,2]]},"894":{"position":[[99,2]]},"895":{"position":[[525,2]]},"898":{"position":[[733,2]]},"988":{"position":[[260,3]]},"989":{"position":[[756,3],[1181,2]]},"991":{"position":[[309,2],[334,3]]},"1003":{"position":[[260,3]]},"1004":{"position":[[839,3],[1264,2]]},"1008":{"position":[[1709,3],[1744,2]]},"1009":{"position":[[372,2],[397,3]]},"1022":{"position":[[319,4]]},"1067":{"position":[[608,3]]},"1070":{"position":[[442,2],[452,2],[812,3],[816,3]]},"1074":{"position":[[9,2]]},"1076":{"position":[[80,2],[103,2]]},"1083":{"position":[[292,2]]},"1085":{"position":[[530,2],[548,2]]},"1101":{"position":[[78,2],[93,2]]},"1113":{"position":[[81,2]]},"1125":{"position":[[87,2],[105,2]]},"1133":{"position":[[439,2],[465,3]]},"1144":{"position":[[160,2],[174,2]]},"1151":{"position":[[749,2],[767,2]]},"1162":{"position":[[94,2],[108,2]]},"1170":{"position":[[160,2],[174,2]]},"1179":{"position":[[80,2],[95,2],[746,2],[761,2]]},"1196":{"position":[[659,2]]},"1204":{"position":[[293,2],[577,2]]},"1206":{"position":[[80,2],[98,2]]},"1230":{"position":[[487,2]]},"1260":{"position":[[548,2],[566,2]]},"1277":{"position":[[543,2],[562,2]]},"1279":{"position":[[94,3]]},"1362":{"position":[[330,2],[340,2],[606,2]]},"1420":{"position":[[378,2]]},"1461":{"position":[[5054,5],[5706,5]]},"1474":{"position":[[707,3],[840,3]]}},"keywords":{}}],["id>",{"_index":4358,"title":{},"content":{"632":{"position":[[134,6]]},"671":{"position":[[139,6]]},"852":{"position":[[140,6]]},"1114":{"position":[[139,6]]}},"keywords":{}}],["id>"",{"_index":4232,"title":{},"content":{"585":{"position":[[803,13]]}},"keywords":{}}],["id"",{"_index":3513,"title":{},"content":{"392":{"position":[[209,8]]},"393":{"position":[[214,8]]},"398":{"position":[[215,8]]},"546":{"position":[[227,9],[275,9],[490,9]]},"594":{"position":[[215,9],[263,9],[478,9]]},"895":{"position":[[460,8]]},"898":{"position":[[801,9]]},"1126":{"position":[[176,8]]}},"keywords":{}}],["id(",{"_index":4120,"title":{},"content":{"556":{"position":[[1393,5]]}},"keywords":{}}],["id)consum",{"_index":4740,"title":{},"content":{"840":{"position":[[2523,11]]}},"keywords":{}}],["id.a",{"_index":3932,"title":{},"content":{"515":{"position":[[107,4]]}},"keywords":{}}],["id.api_token",{"_index":3257,"title":{},"content":{"349":{"position":[[319,13]]}},"keywords":{}}],["id/locations/u",{"_index":1167,"title":{},"content":{"82":{"position":[[1790,15],[2476,15],[4114,15],[4617,15]]}},"keywords":{}}],["id=userz",{"_index":3224,"title":{},"content":{"341":{"position":[[280,8]]}},"keywords":{}}],["id]whil",{"_index":1543,"title":{},"content":{"107":{"position":[[1973,10]]}},"keywords":{}}],["idclient",{"_index":3472,"title":{},"content":{"384":{"position":[[160,8]]},"435":{"position":[[102,8],[111,8]]}},"keywords":{}}],["idea",{"_index":2097,"title":{},"content":{"185":{"position":[[184,6]]},"255":{"position":[[111,4]]},"316":{"position":[[111,4]]}},"keywords":{}}],["ideal",{"_index":3167,"title":{},"content":{"324":{"position":[[888,7]]},"1471":{"position":[[163,5]]}},"keywords":{}}],["idempot",{"_index":6485,"title":{"1439":{"position":[[18,10]]}},"content":{"1439":{"position":[[219,12],[404,10],[794,12],[1446,10],[1547,10]]},"1442":{"position":[[1222,10],[1541,10]]},"1459":{"position":[[1305,10]]}},"keywords":{}}],["idempotent<br/>appli",{"_index":6444,"title":{},"content":{"1434":{"position":[[815,26]]}},"keywords":{}}],["ident",{"_index":1154,"title":{},"content":{"82":{"position":[[793,9]]},"142":{"position":[[218,9]]},"379":{"position":[[661,9]]},"395":{"position":[[675,8]]},"910":{"position":[[172,8]]},"926":{"position":[[172,8]]},"937":{"position":[[172,8]]},"953":{"position":[[172,8]]},"971":{"position":[[172,8]]},"1122":{"position":[[302,8]]},"1140":{"position":[[4024,8]]},"1316":{"position":[[4024,8]]},"1340":{"position":[[4024,8]]},"1351":{"position":[[4024,8]]},"1379":{"position":[[2761,8]]},"1403":{"position":[[2761,8]]},"1414":{"position":[[2761,8]]},"1431":{"position":[[4047,8]]}},"keywords":{}}],["identif",{"_index":4886,"title":{},"content":{"869":{"position":[[329,14]]}},"keywords":{}}],["identifi",{"_index":485,"title":{"263":{"position":[[0,8]]}},"content":{"16":{"position":[[1206,8],[1248,10]]},"17":{"position":[[141,10]]},"27":{"position":[[72,10]]},"42":{"position":[[65,8]]},"54":{"position":[[287,10]]},"56":{"position":[[1750,8]]},"67":{"position":[[594,10],[1413,10]]},"107":{"position":[[398,8]]},"120":{"position":[[1893,8]]},"146":{"position":[[945,10],[1037,11]]},"149":{"position":[[936,10],[1031,11]]},"152":{"position":[[921,10],[1021,11]]},"173":{"position":[[114,11]]},"192":{"position":[[843,11],[892,11]]},"208":{"position":[[1798,11]]},"217":{"position":[[1042,10]]},"240":{"position":[[2823,10]]},"274":{"position":[[430,8]]},"284":{"position":[[141,8]]},"288":{"position":[[873,10],[943,11],[995,10]]},"296":{"position":[[3202,8]]},"299":{"position":[[788,10],[858,11],[910,10]]},"454":{"position":[[190,10]]},"480":{"position":[[619,8],[709,8],[777,8],[869,11]]},"482":{"position":[[570,10]]},"565":{"position":[[73,10]]},"584":{"position":[[887,10]]},"590":{"position":[[642,11]]},"660":{"position":[[1162,10]]},"661":{"position":[[393,8]]},"752":{"position":[[663,10]]},"753":{"position":[[1319,10]]},"767":{"position":[[1996,10]]},"791":{"position":[[616,10]]},"792":{"position":[[1936,10]]},"793":{"position":[[1290,10]]},"808":{"position":[[1236,10]]},"821":{"position":[[1086,8],[1330,8],[1416,8],[1487,8],[1548,8]]},"824":{"position":[[2058,10]]},"864":{"position":[[219,10]]},"869":{"position":[[93,8],[711,11],[872,11]]},"876":{"position":[[219,10]]},"945":{"position":[[840,11]]},"1031":{"position":[[686,11]]},"1034":{"position":[[246,10]]},"1047":{"position":[[521,8]]},"1055":{"position":[[521,8]]},"1063":{"position":[[521,8]]},"1140":{"position":[[87,11]]},"1155":{"position":[[41,11],[128,11],[151,11]]},"1192":{"position":[[87,11],[303,11]]},"1209":{"position":[[64,12]]},"1230":{"position":[[1083,10],[1111,10],[1131,10]]},"1232":{"position":[[143,10],[381,11],[496,11],[587,11]]},"1292":{"position":[[82,11],[2142,10]]},"1303":{"position":[[1460,10]]},"1306":{"position":[[82,11],[2142,10]]},"1316":{"position":[[87,11]]},"1329":{"position":[[82,11],[2142,10]]},"1340":{"position":[[87,11]]},"1351":{"position":[[87,11]]},"1370":{"position":[[83,11]]},"1379":{"position":[[86,11]]},"1382":{"position":[[432,11]]},"1386":{"position":[[674,10]]},"1394":{"position":[[86,11],[300,11]]},"1403":{"position":[[86,11]]},"1414":{"position":[[86,11]]},"1423":{"position":[[93,11],[310,11]]},"1431":{"position":[[110,11]]},"1453":{"position":[[1335,10]]},"1474":{"position":[[113,10]]}},"keywords":{}}],["identifier($database_nam",{"_index":2145,"title":{},"content":{"191":{"position":[[960,27],[1001,27],[1834,26]]},"240":{"position":[[921,27],[962,27],[1795,26]]},"1032":{"position":[[1453,26],[1557,26],[1658,26],[1762,26],[1863,26]]},"1383":{"position":[[908,27],[949,27],[1782,26]]}},"keywords":{}}],["identifier($estuary_rol",{"_index":2143,"title":{},"content":{"191":{"position":[[825,26],[863,25],[1273,25],[1385,26],[1723,26],[1869,26],[2072,26]]},"240":{"position":[[786,26],[824,25],[1234,25],[1346,26],[1684,26],[1830,26],[2033,26]]},"1032":{"position":[[690,26],[728,25],[930,25],[1283,26],[1488,26],[1592,26],[1693,26],[1797,26],[1898,26]]},"1383":{"position":[[773,26],[811,25],[1221,25],[1333,26],[1671,26],[1817,26],[2020,26]]}},"keywords":{}}],["identifier($estuary_schema",{"_index":2146,"title":{},"content":{"191":{"position":[[1057,28],[1354,27]]},"240":{"position":[[1018,28],[1315,27]]},"1383":{"position":[[1005,28],[1302,27]]}},"keywords":{}}],["identifier($estuary_us",{"_index":2147,"title":{},"content":{"191":{"position":[[1141,25],[1307,26]]},"240":{"position":[[1102,25],[1268,26]]},"1032":{"position":[[798,25],[964,26]]},"1383":{"position":[[1089,25],[1255,26]]}},"keywords":{}}],["identifier($warehouse_nam",{"_index":2150,"title":{},"content":{"191":{"position":[[1477,27],[1687,27]]},"240":{"position":[[1438,27],[1648,27]]},"1032":{"position":[[1079,27],[1247,27]]},"1383":{"position":[[1425,27],[1635,27]]}},"keywords":{}}],["identifier/connector",{"_index":1773,"title":{},"content":{"138":{"position":[[790,20]]},"142":{"position":[[761,20]]}},"keywords":{}}],["identity_ins",{"_index":6328,"title":{},"content":{"1379":{"position":[[2815,13]]},"1403":{"position":[[2815,13]]},"1414":{"position":[[2815,13]]}},"keywords":{}}],["identitycol",{"_index":6329,"title":{},"content":{"1379":{"position":[[2871,11]]},"1403":{"position":[[2871,11]]},"1414":{"position":[[2871,11]]}},"keywords":{}}],["ideriv",{"_index":1484,"title":{},"content":{"104":{"position":[[14,11]]},"281":{"position":[[1227,12],[1389,11]]},"296":{"position":[[5220,12],[5469,11],[5872,12],[6121,11]]},"315":{"position":[[1313,12],[1565,11],[1860,11]]}},"keywords":{}}],["idfor",{"_index":5962,"title":{},"content":{"1279":{"position":[[102,5]]}},"keywords":{}}],["idfromhead",{"_index":3889,"title":{},"content":{"492":{"position":[[85,13]]},"660":{"position":[[660,12]]},"665":{"position":[[85,13]]},"680":{"position":[[85,13]]},"695":{"position":[[85,13]]}},"keywords":{}}],["idfromheadergithub",{"_index":4407,"title":{},"content":{"660":{"position":[[1045,18]]}},"keywords":{}}],["idl",{"_index":2609,"title":{},"content":{"240":{"position":[[3591,4]]},"1036":{"position":[[781,4]]}},"keywords":{}}],["idpriv",{"_index":3757,"title":{},"content":{"452":{"position":[[99,9]]}},"keywords":{}}],["idsqueuesrecordingstranscriptionsusag",{"_index":5402,"title":{},"content":{"1110":{"position":[[428,38]]}},"keywords":{}}],["idtoken",{"_index":4743,"title":{},"content":{"840":{"position":[[2559,7]]},"849":{"position":[[3699,7]]}},"keywords":{}}],["idx_foo_th",{"_index":1438,"title":{},"content":{"100":{"position":[[444,13]]}},"keywords":{}}],["idx_transfers_send",{"_index":2855,"title":{},"content":{"279":{"position":[[1394,20]]}},"keywords":{}}],["iex",{"_index":3444,"title":{},"content":{"375":{"position":[[250,3]]},"377":{"position":[[1352,3],[1368,3]]},"378":{"position":[[184,3]]}},"keywords":{}}],["if/then/els",{"_index":6649,"title":{},"content":{"1465":{"position":[[227,13]]}},"keywords":{}}],["ignor",{"_index":837,"title":{},"content":{"56":{"position":[[877,8]]},"103":{"position":[[381,8]]},"166":{"position":[[557,7]]},"310":{"position":[[263,7]]},"496":{"position":[[324,6],[340,6]]},"762":{"position":[[407,8]]},"775":{"position":[[407,8]]},"802":{"position":[[407,8]]},"817":{"position":[[407,8]]},"833":{"position":[[407,8]]},"1292":{"position":[[2211,6]]},"1306":{"position":[[2211,6]]},"1329":{"position":[[2211,6]]},"1370":{"position":[[1248,6]]},"1379":{"position":[[2972,6]]},"1403":{"position":[[2972,6]]},"1414":{"position":[[2972,6]]},"1437":{"position":[[256,8]]},"1444":{"position":[[532,6]]},"1477":{"position":[[1493,8],[3659,8]]}},"keywords":{}}],["ignore_serv",{"_index":6038,"title":{},"content":{"1292":{"position":[[2247,13]]},"1306":{"position":[[2247,13]]},"1329":{"position":[[2247,13]]}},"keywords":{}}],["ignore_weekend",{"_index":3896,"title":{},"content":{"496":{"position":[[307,16]]},"497":{"position":[[176,16]]}},"keywords":{}}],["ii",{"_index":2202,"title":{},"content":{"198":{"position":[[876,2]]}},"keywords":{}}],["ilik",{"_index":5704,"title":{},"content":{"1140":{"position":[[4071,5]]},"1209":{"position":[[411,5]]},"1316":{"position":[[4071,5]]},"1340":{"position":[[4071,5]]},"1351":{"position":[[4071,5]]},"1394":{"position":[[594,5]]},"1431":{"position":[[4094,5]]}},"keywords":{}}],["illustr",{"_index":2897,"title":{},"content":{"281":{"position":[[2310,12]]},"1440":{"position":[[403,10]]}},"keywords":{}}],["imag",{"_index":707,"title":{"786":{"position":[[27,7]]}},"content":{"38":{"position":[[578,7]]},"56":{"position":[[1075,6],[1102,5],[1147,6]]},"81":{"position":[[52,7],[153,5],[256,5],[281,5],[353,5],[390,5],[1104,5],[1241,6],[2599,6]]},"83":{"position":[[968,6]]},"84":{"position":[[1076,5],[1245,5]]},"120":{"position":[[415,6],[442,5],[495,6]]},"141":{"position":[[219,5]]},"223":{"position":[[835,5]]},"236":{"position":[[605,6],[1128,6]]},"307":{"position":[[1080,6],[1548,6],[1930,6],[2416,6]]},"309":{"position":[[2367,6],[2974,6]]},"344":{"position":[[249,6]]},"360":{"position":[[60,6]]},"371":{"position":[[119,6]]},"378":{"position":[[59,6]]},"388":{"position":[[129,6]]},"393":{"position":[[119,6]]},"395":{"position":[[276,6]]},"398":{"position":[[119,6]]},"403":{"position":[[59,6]]},"418":{"position":[[59,6]]},"425":{"position":[[60,6]]},"433":{"position":[[101,6],[512,6]]},"439":{"position":[[59,6]]},"449":{"position":[[129,6]]},"455":{"position":[[60,6]]},"461":{"position":[[60,6]]},"467":{"position":[[60,6]]},"473":{"position":[[129,6]]},"497":{"position":[[59,6]]},"503":{"position":[[59,6]]},"510":{"position":[[59,6]]},"517":{"position":[[2891,6]]},"518":{"position":[[129,6]]},"527":{"position":[[129,6]]},"531":{"position":[[313,5]]},"535":{"position":[[129,6]]},"541":{"position":[[60,6]]},"546":{"position":[[59,6]]},"557":{"position":[[129,6]]},"566":{"position":[[59,6]]},"575":{"position":[[115,6]]},"586":{"position":[[115,6]]},"594":{"position":[[59,6]]},"612":{"position":[[129,6]]},"616":{"position":[[330,5]]},"620":{"position":[[59,6]]},"626":{"position":[[60,6]]},"632":{"position":[[60,6]]},"638":{"position":[[59,6]]},"647":{"position":[[59,6]]},"655":{"position":[[59,6]]},"671":{"position":[[60,6]]},"686":{"position":[[120,6]]},"701":{"position":[[60,6]]},"707":{"position":[[60,6]]},"713":{"position":[[60,6]]},"721":{"position":[[129,6]]},"736":{"position":[[59,6]]},"742":{"position":[[60,6]]},"748":{"position":[[60,6]]},"758":{"position":[[119,6]]},"771":{"position":[[119,6]]},"783":{"position":[[59,6]]},"786":{"position":[[93,6],[193,6],[297,6]]},"798":{"position":[[119,6]]},"813":{"position":[[119,6]]},"829":{"position":[[119,6]]},"843":{"position":[[60,6]]},"852":{"position":[[60,6]]},"860":{"position":[[129,6]]},"868":{"position":[[59,6]]},"880":{"position":[[59,6]]},"886":{"position":[[60,6]]},"892":{"position":[[59,6]]},"908":{"position":[[119,6]]},"924":{"position":[[119,6]]},"935":{"position":[[119,6]]},"951":{"position":[[119,6]]},"960":{"position":[[60,6]]},"969":{"position":[[119,6]]},"983":{"position":[[60,6]]},"992":{"position":[[59,6]]},"998":{"position":[[60,6]]},"1010":{"position":[[129,6]]},"1016":{"position":[[60,6]]},"1022":{"position":[[49,6]]},"1029":{"position":[[60,6]]},"1037":{"position":[[60,6]]},"1046":{"position":[[59,6]]},"1054":{"position":[[59,6]]},"1062":{"position":[[59,6]]},"1071":{"position":[[129,6]]},"1078":{"position":[[59,6]]},"1086":{"position":[[141,6]]},"1102":{"position":[[60,6]]},"1108":{"position":[[59,6]]},"1114":{"position":[[60,6]]},"1126":{"position":[[75,6]]},"1134":{"position":[[59,6]]},"1139":{"position":[[63,6]]},"1145":{"position":[[63,6]]},"1152":{"position":[[63,6]]},"1163":{"position":[[63,6]]},"1171":{"position":[[63,6]]},"1180":{"position":[[224,6]]},"1189":{"position":[[265,6]]},"1197":{"position":[[125,5],[131,6]]},"1207":{"position":[[350,5],[356,6]]},"1214":{"position":[[63,6]]},"1221":{"position":[[63,6]]},"1241":{"position":[[117,6]]},"1248":{"position":[[295,6]]},"1254":{"position":[[67,6]]},"1261":{"position":[[63,6]]},"1270":{"position":[[63,6]]},"1278":{"position":[[63,6]]},"1287":{"position":[[63,6]]},"1298":{"position":[[835,5]]},"1302":{"position":[[63,6]]},"1314":{"position":[[63,6]]},"1326":{"position":[[63,6]]},"1338":{"position":[[63,6]]},"1346":{"position":[[835,5]]},"1349":{"position":[[63,6]]},"1357":{"position":[[200,5],[206,6]]},"1363":{"position":[[75,6]]},"1368":{"position":[[63,6]]},"1377":{"position":[[63,6]]},"1387":{"position":[[305,6],[931,6]]},"1401":{"position":[[63,6]]},"1412":{"position":[[63,6]]},"1421":{"position":[[292,6]]},"1428":{"position":[[63,6]]},"1472":{"position":[[675,6]]},"1480":{"position":[[352,6],[379,5],[432,6]]}},"keywords":{}}],["images.sheet",{"_index":4318,"title":{},"content":{"616":{"position":[[354,12]]}},"keywords":{}}],["imagin",{"_index":2110,"title":{},"content":{"189":{"position":[[320,7]]},"322":{"position":[[1179,7]]},"1461":{"position":[[4523,7]]},"1462":{"position":[[343,7]]}},"keywords":{}}],["immedi",{"_index":532,"title":{},"content":{"20":{"position":[[319,11]]},"82":{"position":[[968,11]]},"100":{"position":[[1008,11]]},"144":{"position":[[230,11]]},"165":{"position":[[2107,11]]},"238":{"position":[[299,11]]},"240":{"position":[[3511,11],[4698,12]]},"436":{"position":[[775,11]]},"759":{"position":[[50,11]]},"760":{"position":[[731,9]]},"772":{"position":[[61,11]]},"773":{"position":[[731,9]]},"799":{"position":[[48,11]]},"800":{"position":[[731,9]]},"814":{"position":[[48,11]]},"815":{"position":[[731,9]]},"830":{"position":[[48,11]]},"831":{"position":[[731,9]]},"1140":{"position":[[4119,9]]},"1316":{"position":[[4119,9]]},"1340":{"position":[[4119,9]]},"1351":{"position":[[4119,9]]},"1370":{"position":[[1262,9]]},"1379":{"position":[[3029,9]]},"1403":{"position":[[3029,9]]},"1414":{"position":[[3029,9]]},"1431":{"position":[[4142,9]]},"1442":{"position":[[1465,11],[1725,11],[1844,11]]},"1443":{"position":[[201,11]]},"1447":{"position":[[220,11]]},"1452":{"position":[[2178,12]]},"1461":{"position":[[1503,11]]}},"keywords":{}}],["immediately,<br/>or",{"_index":6451,"title":{},"content":{"1434":{"position":[[1317,25]]}},"keywords":{}}],["immens",{"_index":1870,"title":{},"content":{"158":{"position":[[746,9]]}},"keywords":{}}],["impact",{"_index":1863,"title":{},"content":{"156":{"position":[[775,6]]},"227":{"position":[[261,6]]},"333":{"position":[[578,9]]},"760":{"position":[[163,9]]},"773":{"position":[[163,9]]},"800":{"position":[[163,9]]},"815":{"position":[[163,9]]},"821":{"position":[[338,6],[895,6]]},"831":{"position":[[163,9]]},"910":{"position":[[328,7]]},"912":{"position":[[349,6]]},"926":{"position":[[328,7]]},"937":{"position":[[328,7]]},"953":{"position":[[328,7]]},"971":{"position":[[328,7]]},"1391":{"position":[[103,6]]}},"keywords":{}}],["imper",{"_index":6428,"title":{},"content":{"1434":{"position":[[89,10]]}},"keywords":{}}],["imperson",{"_index":4083,"title":{"548":{"position":[[43,14]]}},"content":{"548":{"position":[[87,11],[399,11],[901,11],[1184,11]]}},"keywords":{}}],["impersonated_service_account",{"_index":4098,"title":{},"content":{"548":{"position":[[1528,28]]}},"keywords":{}}],["implement",{"_index":569,"title":{"276":{"position":[[0,12]]},"1436":{"position":[[7,14]]}},"content":{"21":{"position":[[483,9]]},"56":{"position":[[1113,10]]},"81":{"position":[[1115,10]]},"82":{"position":[[1169,9]]},"84":{"position":[[44,11],[589,11],[735,12]]},"94":{"position":[[834,12],[2441,15]]},"102":{"position":[[126,10]]},"103":{"position":[[131,10]]},"104":{"position":[[217,14]]},"113":{"position":[[466,9]]},"115":{"position":[[121,9]]},"120":{"position":[[453,10]]},"133":{"position":[[152,9]]},"177":{"position":[[194,9]]},"221":{"position":[[17,14]]},"252":{"position":[[36,9],[104,9]]},"253":{"position":[[13,9]]},"279":{"position":[[65,9],[913,12]]},"281":{"position":[[598,9],[1308,14],[3294,12]]},"294":{"position":[[36,9],[111,9]]},"295":{"position":[[971,9],[1442,9]]},"296":{"position":[[1675,9],[5354,14],[5787,9],[6006,14]]},"312":{"position":[[36,9],[111,9]]},"313":{"position":[[13,9]]},"315":{"position":[[1444,14],[1791,9]]},"483":{"position":[[218,10],[335,9]]},"907":{"position":[[1685,15]]},"923":{"position":[[1685,15]]},"968":{"position":[[1685,15]]},"1008":{"position":[[914,11]]},"1313":{"position":[[1435,15]]},"1337":{"position":[[1435,15]]},"1435":{"position":[[628,12]]},"1436":{"position":[[24,14]]},"1437":{"position":[[1218,9]]},"1444":{"position":[[317,12]]},"1459":{"position":[[1381,12],[1423,15]]},"1479":{"position":[[354,12]]},"1480":{"position":[[390,10]]}},"keywords":{}}],["implemented"",{"_index":3019,"title":{},"content":{"296":{"position":[[5568,19],[5681,19]]},"315":{"position":[[1688,19]]}},"keywords":{}}],["implementor",{"_index":6470,"title":{},"content":{"1435":{"position":[[689,11]]}},"keywords":{}}],["impli",{"_index":2865,"title":{},"content":{"280":{"position":[[663,7]]}},"keywords":{}}],["implic",{"_index":5835,"title":{},"content":{"1199":{"position":[[142,12]]}},"keywords":{}}],["import",{"_index":607,"title":{"86":{"position":[[0,7]]},"89":{"position":[[0,6]]},"91":{"position":[[0,9]]},"92":{"position":[[0,6]]},"1461":{"position":[[0,7]]}},"content":{"26":{"position":[[276,7]]},"32":{"position":[[39,9]]},"38":{"position":[[381,10]]},"39":{"position":[[30,9]]},"43":{"position":[[17,9]]},"56":{"position":[[1579,8]]},"60":{"position":[[140,9]]},"63":{"position":[[211,7],[365,8]]},"74":{"position":[[295,9]]},"81":{"position":[[2798,9]]},"82":{"position":[[3184,9]]},"84":{"position":[[800,9]]},"87":{"position":[[5,6],[192,7],[278,7],[545,6],[625,8]]},"88":{"position":[[43,7]]},"89":{"position":[[20,6],[45,6],[131,7],[231,8],[251,7]]},"90":{"position":[[128,6],[194,7],[558,6]]},"91":{"position":[[57,6],[245,7],[311,6]]},"92":{"position":[[139,6],[233,6],[265,6],[318,6],[365,6],[379,6],[593,6],[930,8]]},"141":{"position":[[169,9]]},"176":{"position":[[244,9]]},"222":{"position":[[655,6],[847,9]]},"250":{"position":[[208,6]]},"254":{"position":[[2343,9],[3729,9]]},"263":{"position":[[1044,7]]},"264":{"position":[[496,9]]},"274":{"position":[[1889,7]]},"275":{"position":[[503,7]]},"281":{"position":[[1218,6]]},"296":{"position":[[1741,9],[3412,9],[5211,6],[5863,6]]},"314":{"position":[[1884,9]]},"315":{"position":[[1304,6]]},"320":{"position":[[284,9],[1661,9]]},"324":{"position":[[147,9],[920,9]]},"419":{"position":[[1449,9]]},"429":{"position":[[107,9]]},"441":{"position":[[58,9]]},"504":{"position":[[1078,9]]},"547":{"position":[[1451,9]]},"639":{"position":[[1076,9]]},"840":{"position":[[1042,11],[1146,11],[1245,11],[1342,11]]},"849":{"position":[[2053,11],[2174,11]]},"919":{"position":[[2415,9]]},"1008":{"position":[[856,9]]},"1023":{"position":[[1432,9]]},"1043":{"position":[[1779,9]]},"1140":{"position":[[4159,6]]},"1203":{"position":[[151,9]]},"1292":{"position":[[2299,6]]},"1306":{"position":[[2299,6]]},"1316":{"position":[[4159,6]]},"1322":{"position":[[655,6],[847,9]]},"1329":{"position":[[2299,6]]},"1335":{"position":[[655,6],[847,9]]},"1340":{"position":[[4159,6]]},"1351":{"position":[[4159,6]]},"1358":{"position":[[638,9]]},"1409":{"position":[[1052,9]]},"1431":{"position":[[4182,6]]},"1437":{"position":[[604,9]]},"1443":{"position":[[642,9]]},"1461":{"position":[[8,6],[146,6],[189,6],[259,6],[421,7],[462,6],[498,9],[542,9],[1837,6],[1970,7],[2306,7],[2486,6],[3147,6],[3273,6],[3526,7],[3728,7],[4908,7],[5150,6],[5371,7],[5589,6]]},"1462":{"position":[[218,6],[449,6]]},"1474":{"position":[[203,9]]}},"keywords":{}}],["importantadmin",{"_index":6622,"title":{},"content":{"1461":{"position":[[3893,14]]}},"keywords":{}}],["impos",{"_index":1068,"title":{},"content":{"72":{"position":[[616,6]]},"162":{"position":[[32,6],[447,6]]},"319":{"position":[[1363,7]]},"331":{"position":[[209,7]]},"900":{"position":[[19,7]]},"1068":{"position":[[22,7]]}},"keywords":{}}],["improv",{"_index":1076,"title":{},"content":{"74":{"position":[[210,7]]},"103":{"position":[[315,7]]},"417":{"position":[[191,7]]},"438":{"position":[[191,7]]},"502":{"position":[[651,7]]},"545":{"position":[[191,7]]},"785":{"position":[[965,7]]},"1021":{"position":[[1217,7]]},"1182":{"position":[[354,7]]},"1191":{"position":[[356,7]]},"1262":{"position":[[356,7]]},"1389":{"position":[[355,7]]}},"keywords":{}}],["inact",{"_index":5105,"title":{},"content":{"945":{"position":[[906,8]]},"1292":{"position":[[2392,8]]},"1306":{"position":[[2392,8]]},"1329":{"position":[[2392,8]]},"1388":{"position":[[198,8]]}},"keywords":{}}],["inadvert",{"_index":1511,"title":{},"content":{"106":{"position":[[584,13]]},"1437":{"position":[[1124,13]]}},"keywords":{}}],["inbound",{"_index":3669,"title":{"946":{"position":[[6,7]]}},"content":{"430":{"position":[[256,7]]},"767":{"position":[[318,7]]},"792":{"position":[[631,7]]},"824":{"position":[[423,7]]},"904":{"position":[[422,7]]},"918":{"position":[[631,7]]},"946":{"position":[[117,7]]},"1051":{"position":[[422,7]]},"1289":{"position":[[505,7]]},"1321":{"position":[[285,7]]},"1334":{"position":[[373,7]]},"1373":{"position":[[404,7]]},"1374":{"position":[[404,7]]}},"keywords":{}}],["includ",{"_index":263,"title":{"230":{"position":[[0,7]]},"865":{"position":[[0,7]]},"877":{"position":[[0,7]]}},"content":{"8":{"position":[[409,8],[931,8]]},"11":{"position":[[829,8]]},"17":{"position":[[250,8],[344,9],[484,8],[547,9],[570,8],[581,7]]},"32":{"position":[[443,8]]},"37":{"position":[[169,9]]},"40":{"position":[[304,9]]},"42":{"position":[[30,8]]},"49":{"position":[[314,9]]},"53":{"position":[[78,9],[486,8]]},"56":{"position":[[100,7]]},"60":{"position":[[9,8],[103,7]]},"63":{"position":[[157,8],[421,9]]},"68":{"position":[[1084,7],[1677,7]]},"69":{"position":[[106,7]]},"70":{"position":[[529,7]]},"73":{"position":[[92,7]]},"81":{"position":[[2433,9]]},"88":{"position":[[120,8]]},"89":{"position":[[352,7]]},"92":{"position":[[306,7]]},"97":{"position":[[204,7],[829,7]]},"98":{"position":[[495,8]]},"101":{"position":[[84,9]]},"104":{"position":[[71,8]]},"120":{"position":[[116,7],[805,7]]},"122":{"position":[[875,9],[926,9],[1453,7],[1565,10],[1774,8],[2241,8]]},"123":{"position":[[750,8]]},"129":{"position":[[623,7]]},"130":{"position":[[18,7],[363,8]]},"135":{"position":[[229,10]]},"138":{"position":[[1741,9]]},"141":{"position":[[1749,9]]},"142":{"position":[[1766,9]]},"154":{"position":[[1182,8],[1873,9]]},"160":{"position":[[445,7]]},"165":{"position":[[1583,7]]},"168":{"position":[[81,8]]},"180":{"position":[[665,8]]},"183":{"position":[[4291,8]]},"189":{"position":[[148,9]]},"190":{"position":[[1931,9]]},"197":{"position":[[976,9],[1358,9]]},"201":{"position":[[93,8]]},"223":{"position":[[696,8]]},"227":{"position":[[54,8]]},"229":{"position":[[285,9]]},"230":{"position":[[108,7],[147,8],[1114,7],[1291,8]]},"237":{"position":[[2073,8]]},"239":{"position":[[2199,9],[2505,7]]},"254":{"position":[[1626,8],[1734,7]]},"268":{"position":[[1618,8]]},"269":{"position":[[1139,8]]},"274":{"position":[[14,10]]},"280":{"position":[[1984,8]]},"281":{"position":[[1072,8]]},"305":{"position":[[371,9]]},"314":{"position":[[1437,8],[1551,7]]},"320":{"position":[[2227,8]]},"329":{"position":[[743,9]]},"330":{"position":[[129,8]]},"373":{"position":[[70,9]]},"402":{"position":[[457,8]]},"413":{"position":[[370,7]]},"419":{"position":[[642,9],[1402,7],[2231,8],[2793,8]]},"440":{"position":[[658,9]]},"441":{"position":[[11,7],[840,8],[1402,8]]},"480":{"position":[[513,8]]},"491":{"position":[[501,7]]},"504":{"position":[[586,9],[1031,7],[1860,8]]},"517":{"position":[[3017,7],[3033,7]]},"534":{"position":[[756,7]]},"547":{"position":[[643,9],[1404,7],[2233,8],[2795,8]]},"574":{"position":[[9,7],[603,7]]},"585":{"position":[[9,7],[517,7]]},"635":{"position":[[200,7]]},"639":{"position":[[584,9],[1029,7],[1858,8],[2420,8]]},"640":{"position":[[244,7]]},"664":{"position":[[522,7],[757,7]]},"679":{"position":[[501,7]]},"694":{"position":[[501,7]]},"750":{"position":[[1055,7]]},"753":{"position":[[490,9]]},"754":{"position":[[231,9],[934,7]]},"766":{"position":[[1055,7]]},"767":{"position":[[636,9]]},"786":{"position":[[73,7]]},"789":{"position":[[1456,7]]},"792":{"position":[[914,9]]},"793":{"position":[[449,9]]},"794":{"position":[[104,9],[1140,7]]},"807":{"position":[[1043,7]]},"808":{"position":[[465,9]]},"809":{"position":[[104,9],[1140,7]]},"821":{"position":[[1229,8]]},"823":{"position":[[1043,7]]},"824":{"position":[[706,9]]},"825":{"position":[[104,9],[976,7]]},"838":{"position":[[74,9]]},"866":{"position":[[466,9]]},"867":{"position":[[1576,10]]},"878":{"position":[[476,9]]},"904":{"position":[[705,9]]},"911":{"position":[[471,8]]},"918":{"position":[[914,9]]},"919":{"position":[[449,9]]},"927":{"position":[[471,8]]},"931":{"position":[[469,9]]},"938":{"position":[[471,8]]},"945":{"position":[[57,7]]},"954":{"position":[[471,8]]},"972":{"position":[[471,8]]},"989":{"position":[[1285,7]]},"1004":{"position":[[1368,7]]},"1008":{"position":[[1770,7]]},"1021":{"position":[[806,9]]},"1023":{"position":[[623,9],[1385,7],[2214,8],[2776,8]]},"1031":{"position":[[63,9]]},"1034":{"position":[[168,7]]},"1042":{"position":[[1257,7]]},"1043":{"position":[[449,9]]},"1051":{"position":[[705,9]]},"1059":{"position":[[469,9]]},"1123":{"position":[[104,7],[359,9]]},"1185":{"position":[[64,9]]},"1192":{"position":[[361,9]]},"1201":{"position":[[15,8]]},"1209":{"position":[[111,7]]},"1230":{"position":[[1198,8]]},"1239":{"position":[[243,7]]},"1275":{"position":[[175,9],[253,7]]},"1276":{"position":[[140,7]]},"1286":{"position":[[113,9],[1197,7]]},"1293":{"position":[[15,8]]},"1298":{"position":[[696,8]]},"1301":{"position":[[113,9],[1033,7]]},"1303":{"position":[[469,9]]},"1307":{"position":[[15,8]]},"1317":{"position":[[15,8],[331,8]]},"1325":{"position":[[113,9],[1197,7]]},"1330":{"position":[[15,8]]},"1341":{"position":[[15,8],[331,8]]},"1346":{"position":[[696,8]]},"1352":{"position":[[15,8],[331,8]]},"1356":{"position":[[310,7],[432,8]]},"1359":{"position":[[15,8]]},"1373":{"position":[[687,9]]},"1374":{"position":[[687,9]]},"1379":{"position":[[3140,7]]},"1380":{"position":[[15,8]]},"1382":{"position":[[63,9]]},"1386":{"position":[[189,7]]},"1391":{"position":[[253,8]]},"1394":{"position":[[358,9]]},"1397":{"position":[[466,9]]},"1398":{"position":[[465,9]]},"1403":{"position":[[3140,7]]},"1404":{"position":[[15,8]]},"1408":{"position":[[530,7]]},"1409":{"position":[[449,9]]},"1414":{"position":[[3140,7]]},"1415":{"position":[[15,8]]},"1417":{"position":[[108,9]]},"1423":{"position":[[368,9]]},"1432":{"position":[[15,8],[331,8]]},"1434":{"position":[[1978,7]]},"1439":{"position":[[1395,7]]},"1442":{"position":[[84,9]]},"1443":{"position":[[811,9]]},"1444":{"position":[[389,7]]},"1461":{"position":[[2746,7]]},"1462":{"position":[[649,7]]},"1473":{"position":[[22,7],[120,7],[377,7]]},"1475":{"position":[[17,7]]},"1479":{"position":[[776,8]]},"1481":{"position":[[59,7],[124,7]]}},"keywords":{}}],["include_delet",{"_index":3965,"title":{},"content":{"517":{"position":[[3000,16]]}},"keywords":{}}],["inclus",{"_index":4713,"title":{},"content":{"794":{"position":[[447,10],[525,10]]},"809":{"position":[[447,10],[525,10]]},"825":{"position":[[447,10],[525,10]]},"1286":{"position":[[504,10],[582,10]]},"1301":{"position":[[504,10],[582,10]]},"1325":{"position":[[504,10],[582,10]]},"1452":{"position":[[1389,11],[1479,10],[1517,11]]},"1474":{"position":[[715,9],[848,9]]}},"keywords":{}}],["incollect",{"_index":4678,"title":{},"content":{"779":{"position":[[141,14]]}},"keywords":{}}],["incom",{"_index":680,"title":{},"content":{"34":{"position":[[799,8]]},"124":{"position":[[582,8]]},"207":{"position":[[71,8],[688,8]]},"239":{"position":[[565,8],[1450,8],[1493,8]]},"254":{"position":[[1076,8],[1677,8]]},"314":{"position":[[797,8],[1494,8]]},"315":{"position":[[2452,8]]},"489":{"position":[[518,8]]},"662":{"position":[[518,8]]},"677":{"position":[[518,8]]},"692":{"position":[[518,8]]}},"keywords":{}}],["incompat",{"_index":418,"title":{},"content":{"13":{"position":[[1861,12]]},"55":{"position":[[706,12]]},"56":{"position":[[787,12]]},"106":{"position":[[605,12]]},"125":{"position":[[581,12]]},"1123":{"position":[[754,12]]}},"keywords":{}}],["inconsist",{"_index":5738,"title":{},"content":{"1147":{"position":[[412,15]]},"1174":{"position":[[412,15]]},"1216":{"position":[[412,15]]},"1224":{"position":[[412,15]]}},"keywords":{}}],["incorpor",{"_index":6488,"title":{},"content":{"1439":{"position":[[759,12]]}},"keywords":{}}],["incorrect",{"_index":1637,"title":{},"content":{"115":{"position":[[1547,9]]},"190":{"position":[[1174,9]]},"419":{"position":[[437,9]]},"440":{"position":[[453,9]]},"504":{"position":[[381,9]]},"547":{"position":[[438,9]]},"639":{"position":[[379,9]]},"759":{"position":[[156,9]]},"764":{"position":[[571,9]]},"772":{"position":[[167,9]]},"777":{"position":[[571,9]]},"799":{"position":[[154,9]]},"804":{"position":[[569,9]]},"814":{"position":[[154,9]]},"819":{"position":[[569,9]]},"830":{"position":[[154,9]]},"835":{"position":[[569,9]]},"1023":{"position":[[418,9]]}},"keywords":{}}],["incorrectli",{"_index":2483,"title":{},"content":{"228":{"position":[[881,11]]},"229":{"position":[[414,11]]}},"keywords":{}}],["increas",{"_index":72,"title":{},"content":{"2":{"position":[[160,8]]},"8":{"position":[[869,9]]},"20":{"position":[[531,8]]},"49":{"position":[[501,8]]},"124":{"position":[[899,10]]},"198":{"position":[[1080,8]]},"480":{"position":[[435,8],[828,10]]},"750":{"position":[[313,8]]},"766":{"position":[[313,8]]},"789":{"position":[[347,8]]},"807":{"position":[[347,8]]},"821":{"position":[[1513,10]]},"823":{"position":[[347,8]]},"1020":{"position":[[2089,10]]},"1146":{"position":[[49,10],[590,9]]},"1173":{"position":[[49,10],[602,9]]},"1215":{"position":[[49,10],[590,9]]},"1223":{"position":[[49,10],[602,9]]}},"keywords":{}}],["increasingli",{"_index":5194,"title":{},"content":{"1020":{"position":[[1318,12]]}},"keywords":{}}],["increment",{"_index":400,"title":{"870":{"position":[[0,11]]}},"content":{"13":{"position":[[857,9],[1418,10]]},"21":{"position":[[105,11],[314,11]]},"56":{"position":[[1982,11],[2031,11],[2139,11]]},"67":{"position":[[1581,11]]},"121":{"position":[[546,11]]},"198":{"position":[[148,11]]},"208":{"position":[[1100,9],[1667,12]]},"209":{"position":[[672,11]]},"307":{"position":[[2859,9]]},"308":{"position":[[1158,9]]},"309":{"position":[[1581,9],[3200,9]]},"322":{"position":[[1599,13]]},"325":{"position":[[311,13]]},"326":{"position":[[1492,13]]},"351":{"position":[[225,11]]},"364":{"position":[[124,11]]},"370":{"position":[[2212,12]]},"371":{"position":[[1365,11]]},"402":{"position":[[795,11]]},"425":{"position":[[405,11],[485,11],[580,11]]},"432":{"position":[[1333,11]]},"433":{"position":[[378,11],[774,11]]},"482":{"position":[[673,11]]},"496":{"position":[[727,12]]},"497":{"position":[[253,11]]},"510":{"position":[[218,11]]},"517":{"position":[[2134,9]]},"518":{"position":[[504,11],[583,11],[664,11],[765,11],[874,11],[975,11],[1072,11],[1182,11],[1300,11],[1395,11],[1476,11],[1551,11]]},"529":{"position":[[223,11]]},"557":{"position":[[644,11]]},"573":{"position":[[1444,12]]},"575":{"position":[[361,11],[448,11],[552,11],[641,11],[741,11],[826,11],[921,11],[1024,11],[1120,11],[1219,11]]},"584":{"position":[[974,9],[1012,9],[1507,12]]},"586":{"position":[[383,11],[470,11],[574,11],[663,11],[748,11],[843,11],[939,11],[1038,11]]},"632":{"position":[[253,11]]},"655":{"position":[[244,11]]},"686":{"position":[[358,11],[445,11],[535,11],[628,11],[715,11],[989,11]]},"713":{"position":[[223,11]]},"721":{"position":[[356,11]]},"735":{"position":[[559,12]]},"736":{"position":[[211,11],[300,11],[394,11]]},"757":{"position":[[2163,12]]},"758":{"position":[[349,11]]},"770":{"position":[[2163,12]]},"771":{"position":[[349,11]]},"797":{"position":[[2170,12]]},"798":{"position":[[347,11]]},"812":{"position":[[2170,12]]},"813":{"position":[[347,11]]},"828":{"position":[[2170,12]]},"829":{"position":[[347,11]]},"842":{"position":[[1571,11],[2041,11],[2145,11],[3684,11],[3747,11]]},"859":{"position":[[890,14]]},"860":{"position":[[304,11]]},"867":{"position":[[1021,11],[1117,11],[1182,11]]},"899":{"position":[[400,13]]},"907":{"position":[[1617,12]]},"908":{"position":[[393,11]]},"923":{"position":[[1617,12]]},"924":{"position":[[393,11]]},"934":{"position":[[1617,12]]},"935":{"position":[[393,11]]},"950":{"position":[[1617,12]]},"951":{"position":[[393,11]]},"968":{"position":[[1617,12]]},"969":{"position":[[393,11]]},"983":{"position":[[214,11]]},"1010":{"position":[[490,11],[608,11]]},"1020":{"position":[[247,14]]},"1071":{"position":[[353,11]]},"1078":{"position":[[253,11],[429,11],[515,11],[621,11],[715,11],[912,11],[991,11],[1067,11],[1148,11],[1328,11],[1413,11],[1496,11],[1570,11],[1645,11],[1730,11],[1813,11],[1993,11],[2077,11]]},"1085":{"position":[[771,11]]},"1086":{"position":[[410,11]]},"1102":{"position":[[213,11]]},"1133":{"position":[[1483,12]]},"1134":{"position":[[512,11],[787,11],[897,11],[997,11],[1104,11],[1229,11],[1345,11],[1725,11],[2084,11],[2199,11],[2314,11],[2426,11],[2539,11],[2660,11],[2772,11],[2878,11],[2980,11]]},"1394":{"position":[[623,9]]},"1477":{"position":[[1617,13],[3956,13]]}},"keywords":{}}],["incremental)ad",{"_index":4988,"title":{},"content":{"899":{"position":[[302,15],[325,15],[357,16],[374,15]]}},"keywords":{}}],["incremental)board",{"_index":4982,"title":{},"content":{"899":{"position":[[83,19]]}},"keywords":{}}],["incremental)campaign",{"_index":4987,"title":{},"content":{"899":{"position":[[247,22],[270,21]]}},"keywords":{}}],["incremental)custom",{"_index":5360,"title":{},"content":{"1096":{"position":[[91,22]]}},"keywords":{}}],["incremental)ord",{"_index":5361,"title":{},"content":{"1096":{"position":[[114,19],[134,18]]}},"keywords":{}}],["incremental)product",{"_index":5367,"title":{},"content":{"1096":{"position":[[249,20]]}},"keywords":{}}],["incremental)refundsship",{"_index":5372,"title":{},"content":{"1096":{"position":[[325,28]]}},"keywords":{}}],["incremental_scn_rang",{"_index":4880,"title":{},"content":{"868":{"position":[[266,22]]}},"keywords":{}}],["incur",{"_index":1496,"title":{},"content":{"105":{"position":[[1087,9]]},"1036":{"position":[[653,5]]},"1388":{"position":[[224,5]]}},"keywords":{}}],["inde",{"_index":2413,"title":{},"content":{"210":{"position":[[3976,6]]}},"keywords":{}}],["indefinit",{"_index":674,"title":{},"content":{"34":{"position":[[479,12]]},"84":{"position":[[284,12]]},"373":{"position":[[760,12]]},"785":{"position":[[279,12]]}},"keywords":{}}],["indent",{"_index":1236,"title":{},"content":{"83":{"position":[[1389,11]]}},"keywords":{}}],["independ",{"_index":799,"title":{},"content":{"53":{"position":[[370,13]]},"105":{"position":[[587,13]]},"323":{"position":[[311,11]]},"333":{"position":[[241,14]]},"554":{"position":[[307,13]]}},"keywords":{}}],["index",{"_index":563,"title":{},"content":{"21":{"position":[[207,5]]},"100":{"position":[[438,5]]},"110":{"position":[[1103,5]]},"121":{"position":[[174,7],[807,7]]},"277":{"position":[[1361,7]]},"279":{"position":[[1388,5]]},"842":{"position":[[2254,8]]},"1194":{"position":[[274,5],[361,5]]},"1195":{"position":[[402,5],[453,5],[577,5],[629,5],[645,5]]},"1196":{"position":[[732,5],[914,5],[946,5],[1161,5]]},"1197":{"position":[[469,6],[493,5]]},"1200":{"position":[[55,5]]},"1201":{"position":[[318,5]]},"1274":{"position":[[156,5],[284,5]]},"1276":{"position":[[316,7],[386,6],[416,8]]},"1277":{"position":[[76,5],[91,5]]},"1278":{"position":[[131,6],[143,5]]},"1279":{"position":[[439,5]]},"1292":{"position":[[2435,5],[2472,7]]},"1306":{"position":[[2435,5],[2472,7]]},"1329":{"position":[[2435,5],[2472,7]]},"1356":{"position":[[651,5],[850,7]]},"1370":{"position":[[1288,5],[1299,7]]},"1379":{"position":[[3191,5]]},"1403":{"position":[[3191,5]]},"1414":{"position":[[3191,5]]},"1467":{"position":[[293,5]]}},"keywords":{}}],["index"",{"_index":5842,"title":{},"content":{"1200":{"position":[[871,11]]},"1467":{"position":[[952,12]]}},"keywords":{}}],["indic",{"_index":1237,"title":{},"content":{"83":{"position":[[1401,10]]},"100":{"position":[[110,8]]},"138":{"position":[[1116,10]]},"141":{"position":[[874,10],[938,9],[1074,9],[1267,10]]},"142":{"position":[[1085,10]]},"221":{"position":[[1137,9]]},"222":{"position":[[382,9]]},"223":{"position":[[348,9]]},"224":{"position":[[401,9]]},"263":{"position":[[628,9]]},"268":{"position":[[533,8]]},"760":{"position":[[114,9],[632,9]]},"773":{"position":[[114,9],[632,9]]},"800":{"position":[[114,9],[632,9]]},"805":{"position":[[133,10]]},"815":{"position":[[114,9],[632,9]]},"820":{"position":[[133,10]]},"831":{"position":[[114,9],[632,9]]},"836":{"position":[[133,10]]},"870":{"position":[[633,9]]},"885":{"position":[[282,8]]},"1140":{"position":[[402,9]]},"1194":{"position":[[447,8]]},"1195":{"position":[[221,8]]},"1196":{"position":[[784,7]]},"1200":{"position":[[347,8]]},"1201":{"position":[[574,7]]},"1298":{"position":[[348,9]]},"1316":{"position":[[402,9]]},"1322":{"position":[[382,9]]},"1335":{"position":[[382,9]]},"1340":{"position":[[402,9]]},"1346":{"position":[[348,9]]},"1351":{"position":[[402,9]]},"1379":{"position":[[3239,9]]},"1403":{"position":[[3239,9]]},"1414":{"position":[[3239,9]]},"1431":{"position":[[425,9]]},"1442":{"position":[[164,8],[267,8]]},"1443":{"position":[[522,9]]},"1444":{"position":[[68,10]]}},"keywords":{}}],["indirect",{"_index":1322,"title":{},"content":{"92":{"position":[[468,9]]}},"keywords":{}}],["indirectli",{"_index":1219,"title":{},"content":{"83":{"position":[[490,10]]},"322":{"position":[[547,10]]},"323":{"position":[[581,10]]}},"keywords":{}}],["individu",{"_index":764,"title":{},"content":{"45":{"position":[[221,10]]},"109":{"position":[[588,10]]},"135":{"position":[[376,10]]},"137":{"position":[[445,13]]},"149":{"position":[[1209,10]]},"1040":{"position":[[362,10]]},"1050":{"position":[[362,10]]},"1058":{"position":[[362,10]]},"1123":{"position":[[411,10]]},"1470":{"position":[[50,10]]}},"keywords":{}}],["individualload",{"_index":6504,"title":{},"content":{"1443":{"position":[[335,14]]}},"keywords":{}}],["inert",{"_index":757,"title":{},"content":{"44":{"position":[[269,6]]}},"keywords":{}}],["inexpens",{"_index":3177,"title":{},"content":{"326":{"position":[[1260,11]]}},"keywords":{}}],["infer",{"_index":1066,"title":{"165":{"position":[[18,10]]}},"content":{"72":{"position":[[228,9]]},"76":{"position":[[214,8]]},"99":{"position":[[321,8]]},"107":{"position":[[3746,5]]},"158":{"position":[[123,9],[268,9],[394,8]]},"162":{"position":[[906,9],[924,5],[952,9]]},"165":{"position":[[20,6],[586,9],[1390,8],[1754,10],[1812,8],[1961,8],[2091,8],[2303,8]]},"192":{"position":[[1738,10],[1929,8]]},"207":{"position":[[1290,8]]},"210":{"position":[[1276,5]]},"218":{"position":[[1679,10],[1701,9],[1770,6],[1884,8]]},"228":{"position":[[938,9],[967,9],[1244,9]]},"229":{"position":[[541,9],[610,5]]},"239":{"position":[[1554,8]]},"259":{"position":[[819,9],[1148,9],[1169,9],[1238,6],[1387,8],[2729,9],[2750,9],[2819,6],[2933,8]]},"291":{"position":[[1489,9],[1613,9],[1634,9],[1703,6],[1817,8]]},"302":{"position":[[1409,9],[1522,9],[1543,9],[1612,6],[1726,8]]},"1446":{"position":[[85,9]]}},"keywords":{}}],["inferenec",{"_index":1867,"title":{},"content":{"157":{"position":[[452,10]]}},"keywords":{}}],["inferr",{"_index":1866,"title":{},"content":{"157":{"position":[[395,10]]}},"keywords":{}}],["infil",{"_index":6048,"title":{},"content":{"1292":{"position":[[2506,6]]},"1306":{"position":[[2506,6]]},"1329":{"position":[[2506,6]]}},"keywords":{}}],["infinit",{"_index":6671,"title":{},"content":{"1472":{"position":[[500,8],[884,8]]}},"keywords":{}}],["info",{"_index":250,"title":{},"content":{"7":{"position":[[585,5]]},"16":{"position":[[1163,4]]},"54":{"position":[[535,4]]},"84":{"position":[[1263,4]]},"163":{"position":[[735,4]]},"165":{"position":[[1441,4]]},"228":{"position":[[1232,4]]},"306":{"position":[[353,4]]},"308":{"position":[[291,4],[1011,4]]},"419":{"position":[[1060,4]]},"440":{"position":[[1076,4]]},"529":{"position":[[793,4]]},"547":{"position":[[1061,4]]},"724":{"position":[[341,4]]},"738":{"position":[[499,4],[563,4],[623,4],[693,4]]},"753":{"position":[[268,4]]},"757":{"position":[[2193,4]]},"767":{"position":[[414,4]]},"770":{"position":[[2193,4]]},"797":{"position":[[2200,4]]},"812":{"position":[[2200,4]]},"828":{"position":[[2200,4]]},"840":{"position":[[2575,4]]},"917":{"position":[[831,4]]},"919":{"position":[[1356,4]]},"965":{"position":[[831,4]]},"1023":{"position":[[1041,4]]},"1418":{"position":[[49,4]]},"1425":{"position":[[228,4]]},"1453":{"position":[[1159,4]]},"1461":{"position":[[1305,4],[2427,4]]}},"keywords":{}}],["inform",{"_index":207,"title":{"1474":{"position":[[6,12]]},"1475":{"position":[[12,12]]}},"content":{"6":{"position":[[221,11]]},"7":{"position":[[382,11]]},"8":{"position":[[418,11],[805,11]]},"47":{"position":[[52,11]]},"54":{"position":[[190,11]]},"81":{"position":[[2234,11]]},"91":{"position":[[363,12]]},"104":{"position":[[289,11]]},"119":{"position":[[275,11]]},"125":{"position":[[1070,11]]},"145":{"position":[[137,12]]},"146":{"position":[[375,11],[910,11]]},"148":{"position":[[146,12]]},"149":{"position":[[384,11],[883,11]]},"151":{"position":[[144,12]]},"152":{"position":[[391,11],[886,11]]},"156":{"position":[[197,11]]},"157":{"position":[[472,12]]},"165":{"position":[[358,11]]},"173":{"position":[[126,12],[242,12]]},"174":{"position":[[230,11],[425,11]]},"193":{"position":[[461,11]]},"207":{"position":[[631,11]]},"210":{"position":[[2133,11]]},"217":{"position":[[980,11]]},"221":{"position":[[384,12]]},"239":{"position":[[453,11],[1072,12],[2724,12]]},"296":{"position":[[394,11],[1365,11],[4592,11]]},"301":{"position":[[1208,11]]},"343":{"position":[[1086,11]]},"401":{"position":[[142,11]]},"419":{"position":[[511,11]]},"427":{"position":[[406,12]]},"432":{"position":[[199,8]]},"440":{"position":[[527,11]]},"475":{"position":[[334,11]]},"487":{"position":[[295,12]]},"504":{"position":[[455,11]]},"547":{"position":[[512,11]]},"556":{"position":[[478,12],[1230,12]]},"560":{"position":[[341,12]]},"563":{"position":[[143,11]]},"597":{"position":[[297,11]]},"639":{"position":[[453,11]]},"654":{"position":[[708,11]]},"667":{"position":[[82,12]]},"690":{"position":[[264,11],[369,12]]},"738":{"position":[[122,11],[215,11]]},"747":{"position":[[129,11]]},"752":{"position":[[1050,12]]},"764":{"position":[[92,9]]},"777":{"position":[[92,9]]},"780":{"position":[[160,12]]},"786":{"position":[[445,11]]},"791":{"position":[[1084,12]]},"804":{"position":[[92,9]]},"819":{"position":[[92,9]]},"835":{"position":[[92,9]]},"840":{"position":[[269,12],[2464,11]]},"849":{"position":[[212,12],[3604,11]]},"857":{"position":[[165,11],[204,11]]},"900":{"position":[[319,11]]},"946":{"position":[[304,11]]},"964":{"position":[[541,11]]},"1008":{"position":[[1023,12]]},"1023":{"position":[[492,11]]},"1251":{"position":[[192,12]]},"1384":{"position":[[315,6]]},"1393":{"position":[[364,12]]},"1425":{"position":[[168,11]]},"1451":{"position":[[1090,12]]},"1461":{"position":[[4808,11]]},"1473":{"position":[[30,11],[137,11]]},"1474":{"position":[[188,11],[410,11]]},"1475":{"position":[[25,11],[149,11]]}},"keywords":{}}],["information.an",{"_index":5739,"title":{},"content":{"1149":{"position":[[384,14]]}},"keywords":{}}],["information.retent",{"_index":6265,"title":{},"content":{"1356":{"position":[[729,21]]}},"keywords":{}}],["information_schema",{"_index":4588,"title":{},"content":{"750":{"position":[[965,18]]},"752":{"position":[[588,18]]},"753":{"position":[[1244,18]]},"757":{"position":[[2414,19]]},"766":{"position":[[965,18]]},"770":{"position":[[2414,19]]},"789":{"position":[[1366,18]]},"791":{"position":[[541,18]]},"793":{"position":[[1215,18]]},"797":{"position":[[2417,19]]},"807":{"position":[[953,18]]},"808":{"position":[[1161,18]]},"812":{"position":[[2417,19]]},"823":{"position":[[953,18]]},"828":{"position":[[2417,19]]},"917":{"position":[[710,19],[985,20]]},"919":{"position":[[1241,19],[1510,20]]},"965":{"position":[[710,19],[985,20]]}},"keywords":{}}],["information_schema.column",{"_index":5042,"title":{},"content":{"919":{"position":[[1866,27]]}},"keywords":{}}],["information_schema.t",{"_index":5043,"title":{},"content":{"919":{"position":[[1894,26]]}},"keywords":{}}],["infrastructur",{"_index":648,"title":{"1271":{"position":[[31,15]]}},"content":{"30":{"position":[[183,14]]},"320":{"position":[[72,14]]},"1271":{"position":[[85,14]]}},"keywords":{}}],["ingest",{"_index":661,"title":{"128":{"position":[[0,7]]},"484":{"position":[[13,6]]},"656":{"position":[[5,6]]},"672":{"position":[[14,6]]},"687":{"position":[[10,6]]}},"content":{"32":{"position":[[199,7]]},"35":{"position":[[31,7]]},"43":{"position":[[221,9],[254,9],[270,6]]},"128":{"position":[[1,6],[183,6],[414,7]]},"129":{"position":[[715,7],[843,7]]},"132":{"position":[[199,7],[409,7],[430,6]]},"133":{"position":[[261,6],[376,7],[506,7],[615,6]]},"189":{"position":[[1068,7]]},"192":{"position":[[1433,6]]},"193":{"position":[[42,7]]},"216":{"position":[[170,7]]},"232":{"position":[[361,6]]},"237":{"position":[[2794,9]]},"239":{"position":[[202,7]]},"240":{"position":[[3196,9]]},"289":{"position":[[327,7]]},"300":{"position":[[306,7]]},"321":{"position":[[1635,9]]},"330":{"position":[[203,9]]},"332":{"position":[[278,8]]},"363":{"position":[[1405,6]]},"487":{"position":[[474,9]]},"595":{"position":[[414,7]]},"675":{"position":[[415,8]]},"912":{"position":[[975,8]]},"945":{"position":[[98,6],[727,9]]},"1118":{"position":[[852,6]]},"1463":{"position":[[568,7]]},"1464":{"position":[[451,7]]},"1465":{"position":[[1145,7],[1411,7]]},"1466":{"position":[[432,7]]},"1467":{"position":[[967,7],[1268,7],[2390,7]]},"1476":{"position":[[401,7],[1624,7]]},"1477":{"position":[[1663,7],[2176,7],[4003,7],[4538,7]]}},"keywords":{}}],["ingest:dev",{"_index":3302,"title":{},"content":{"363":{"position":[[1473,10]]}},"keywords":{}}],["inhabit",{"_index":3114,"title":{},"content":{"320":{"position":[[6,8]]}},"keywords":{}}],["inher",{"_index":3189,"title":{},"content":{"329":{"position":[[857,8]]}},"keywords":{}}],["inherit",{"_index":1849,"title":{"337":{"position":[[23,9]]}},"content":{"154":{"position":[[1000,8]]},"337":{"position":[[238,7],[515,8]]}},"keywords":{}}],["init.sql",{"_index":2546,"title":{},"content":{"236":{"position":[[2056,8],[2750,8],[2848,8],[3689,8]]}},"keywords":{}}],["init.sql:/dock",{"_index":2523,"title":{},"content":{"236":{"position":[[1040,18]]}},"keywords":{}}],["initdb.d/init.sql",{"_index":2525,"title":{},"content":{"236":{"position":[[1070,17]]}},"keywords":{}}],["initi",{"_index":511,"title":{},"content":{"19":{"position":[[37,11]]},"20":{"position":[[194,10]]},"82":{"position":[[220,9],[1546,10]]},"144":{"position":[[280,8]]},"190":{"position":[[1580,8]]},"192":{"position":[[2002,8]]},"207":{"position":[[11,10],[1621,9]]},"208":{"position":[[1474,11]]},"209":{"position":[[306,7],[555,7],[812,10]]},"210":{"position":[[170,7]]},"217":{"position":[[995,8]]},"218":{"position":[[536,9]]},"237":{"position":[[2698,7],[2918,10]]},"240":{"position":[[57,7]]},"255":{"position":[[987,10]]},"279":{"position":[[281,9]]},"290":{"position":[[1156,8]]},"291":{"position":[[619,8]]},"301":{"position":[[1365,8]]},"302":{"position":[[619,8]]},"316":{"position":[[1312,10]]},"343":{"position":[[461,8],[562,10]]},"368":{"position":[[31,10]]},"373":{"position":[[672,8]]},"377":{"position":[[985,7]]},"432":{"position":[[101,7]]},"755":{"position":[[31,10]]},"768":{"position":[[31,10]]},"785":{"position":[[21,7],[205,7]]},"789":{"position":[[874,7],[994,7]]},"795":{"position":[[29,10]]},"810":{"position":[[29,10]]},"826":{"position":[[29,10]]},"905":{"position":[[34,10]]},"920":{"position":[[34,10]]},"932":{"position":[[34,10]]},"948":{"position":[[34,10]]},"966":{"position":[[34,10]]},"1006":{"position":[[389,8]]},"1020":{"position":[[147,9],[1059,9],[1211,9],[1417,9]]},"1140":{"position":[[453,7],[486,9]]},"1268":{"position":[[215,9]]},"1292":{"position":[[2544,7],[2622,8]]},"1306":{"position":[[2544,7],[2622,8]]},"1316":{"position":[[453,7],[486,9]]},"1329":{"position":[[2544,7],[2622,8]]},"1340":{"position":[[453,7],[486,9]]},"1351":{"position":[[453,7],[486,9]]},"1370":{"position":[[1313,9]]},"1379":{"position":[[3296,10],[3356,9]]},"1403":{"position":[[3296,10],[3356,9]]},"1414":{"position":[[3296,10],[3356,9]]},"1431":{"position":[[476,7],[509,9]]},"1434":{"position":[[458,14]]}},"keywords":{}}],["initial_s",{"_index":6050,"title":{},"content":{"1292":{"position":[[2579,12]]},"1306":{"position":[[2579,12]]},"1329":{"position":[[2579,12]]}},"keywords":{}}],["initially_suspend",{"_index":2157,"title":{},"content":{"191":{"position":[[1592,19]]},"240":{"position":[[1553,19]]},"1032":{"position":[[1194,19]]},"1383":{"position":[[1540,19]]}},"keywords":{}}],["inlin",{"_index":618,"title":{},"content":{"26":{"position":[[563,6]]},"56":{"position":[[1283,7]]},"69":{"position":[[328,6],[432,7]]},"70":{"position":[[463,7]]},"81":{"position":[[2461,6]]},"94":{"position":[[471,6],[869,6],[2535,6]]},"97":{"position":[[71,6]]},"100":{"position":[[277,6]]},"120":{"position":[[642,7]]},"1480":{"position":[[576,7]]}},"keywords":{}}],["inlinefil",{"_index":1051,"title":{},"content":{"70":{"position":[[627,10]]}},"keywords":{}}],["inlinereferenc",{"_index":1135,"title":{},"content":{"81":{"position":[[2502,16]]}},"keywords":{}}],["inner",{"_index":5529,"title":{},"content":{"1140":{"position":[[526,5]]},"1192":{"position":[[501,5]]},"1209":{"position":[[441,5]]},"1292":{"position":[[2663,5]]},"1306":{"position":[[2663,5]]},"1316":{"position":[[526,5]]},"1329":{"position":[[2663,5]]},"1340":{"position":[[526,5]]},"1351":{"position":[[526,5]]},"1370":{"position":[[1330,5]]},"1379":{"position":[[3413,5]]},"1394":{"position":[[645,5]]},"1403":{"position":[[3413,5]]},"1414":{"position":[[3413,5]]},"1431":{"position":[[549,5]]}},"keywords":{}}],["innov",{"_index":2623,"title":{},"content":{"241":{"position":[[543,10]]}},"keywords":{}}],["inout",{"_index":5532,"title":{},"content":{"1140":{"position":[[557,5]]},"1292":{"position":[[2711,5]]},"1306":{"position":[[2711,5]]},"1316":{"position":[[557,5]]},"1329":{"position":[[2711,5]]},"1340":{"position":[[557,5]]},"1351":{"position":[[557,5]]},"1379":{"position":[[3464,5]]},"1403":{"position":[[3464,5]]},"1414":{"position":[[3464,5]]},"1431":{"position":[[580,5]]}},"keywords":{}}],["input",{"_index":265,"title":{"1275":{"position":[[10,6]]}},"content":{"8":{"position":[[466,6]]},"64":{"position":[[161,6]]},"96":{"position":[[314,5]]},"163":{"position":[[604,5]]},"253":{"position":[[1166,5]]},"313":{"position":[[1166,5]]},"483":{"position":[[106,6]]},"690":{"position":[[151,5]]},"1047":{"position":[[360,5],[632,5]]},"1055":{"position":[[360,5],[632,5]]},"1063":{"position":[[360,5],[632,5]]},"1140":{"position":[[583,5]]},"1157":{"position":[[30,5]]},"1272":{"position":[[220,5]]},"1316":{"position":[[583,5]]},"1340":{"position":[[583,5]]},"1351":{"position":[[583,5]]},"1379":{"position":[[3522,5]]},"1403":{"position":[[3522,5]]},"1414":{"position":[[3522,5]]},"1431":{"position":[[606,5]]},"1452":{"position":[[2394,6],[4275,6]]},"1456":{"position":[[60,6]]},"1473":{"position":[[70,6]]},"1475":{"position":[[62,6],[883,5],[1005,5],[1591,5]]}},"keywords":{}}],["insecur",{"_index":3660,"title":{},"content":{"429":{"position":[[677,10]]}},"keywords":{}}],["insensit",{"_index":5533,"title":{},"content":{"1140":{"position":[[618,11]]},"1155":{"position":[[386,11],[492,11]]},"1292":{"position":[[2743,11]]},"1306":{"position":[[2743,11]]},"1316":{"position":[[618,11]]},"1329":{"position":[[2743,11]]},"1340":{"position":[[618,11]]},"1351":{"position":[[618,11]]},"1379":{"position":[[3573,11]]},"1403":{"position":[[3573,11]]},"1414":{"position":[[3573,11]]},"1431":{"position":[[641,11]]}},"keywords":{}}],["insert",{"_index":1008,"title":{},"content":{"67":{"position":[[923,9],[1899,8]]},"97":{"position":[[336,7],[529,6]]},"196":{"position":[[140,11]]},"197":{"position":[[438,11],[834,6],[882,8]]},"210":{"position":[[1751,6],[3890,6]]},"233":{"position":[[140,11]]},"237":{"position":[[1681,7]]},"278":{"position":[[625,7],[1202,6],[1382,6],[1509,9]]},"280":{"position":[[2051,6]]},"750":{"position":[[845,7]]},"752":{"position":[[801,7]]},"753":{"position":[[1457,7]]},"761":{"position":[[96,7]]},"766":{"position":[[845,7]]},"767":{"position":[[2134,7]]},"774":{"position":[[96,7]]},"789":{"position":[[1246,7]]},"791":{"position":[[806,7]]},"792":{"position":[[2126,7]]},"793":{"position":[[1480,7]]},"801":{"position":[[96,7]]},"807":{"position":[[833,7]]},"808":{"position":[[1426,7]]},"816":{"position":[[96,7]]},"823":{"position":[[833,7]]},"824":{"position":[[2248,7]]},"832":{"position":[[96,7]]},"864":{"position":[[1329,7]]},"1040":{"position":[[860,7]]},"1042":{"position":[[767,7]]},"1043":{"position":[[1431,7]]},"1050":{"position":[[860,7]]},"1051":{"position":[[1693,7]]},"1058":{"position":[[860,7]]},"1059":{"position":[[1486,7]]},"1140":{"position":[[666,6]]},"1208":{"position":[[16,6]]},"1209":{"position":[[459,6]]},"1292":{"position":[[2798,6]]},"1306":{"position":[[2798,6]]},"1316":{"position":[[666,6]]},"1329":{"position":[[2798,6]]},"1340":{"position":[[666,6]]},"1351":{"position":[[666,6]]},"1359":{"position":[[428,6]]},"1370":{"position":[[1341,6]]},"1379":{"position":[[3630,6]]},"1394":{"position":[[664,6]]},"1403":{"position":[[3630,6]]},"1414":{"position":[[3630,6]]},"1423":{"position":[[491,6]]},"1431":{"position":[[689,6]]}},"keywords":{}}],["insert/delet",{"_index":4642,"title":{},"content":{"761":{"position":[[488,13]]},"774":{"position":[[488,13]]},"801":{"position":[[494,13]]},"816":{"position":[[494,13]]},"832":{"position":[[494,13]]}},"keywords":{}}],["insert_method",{"_index":6061,"title":{},"content":{"1292":{"position":[[2832,13]]},"1306":{"position":[[2832,13]]},"1329":{"position":[[2832,13]]}},"keywords":{}}],["insertions.cr",{"_index":3834,"title":{},"content":{"480":{"position":[[656,19]]}},"keywords":{}}],["insid",{"_index":1983,"title":{},"content":{"169":{"position":[[1121,6]]},"173":{"position":[[530,6],[802,6]]},"189":{"position":[[1203,6]]},"190":{"position":[[412,6],[1671,6]]},"192":{"position":[[300,6]]},"240":{"position":[[2627,6]]},"254":{"position":[[141,7],[175,6]]},"296":{"position":[[141,7],[175,6]]},"313":{"position":[[3230,6]]},"314":{"position":[[141,7],[175,6]]},"616":{"position":[[80,6],[452,6],[587,6]]},"1047":{"position":[[587,6]]},"1055":{"position":[[587,6]]},"1063":{"position":[[587,6]]},"1462":{"position":[[372,6]]}},"keywords":{}}],["insight",{"_index":1625,"title":{},"content":{"115":{"position":[[545,7]]},"324":{"position":[[930,8]]},"517":{"position":[[186,8],[336,8],[794,8],[825,8],[1930,7],[3126,8]]},"518":{"position":[[315,7]]},"667":{"position":[[137,8],[215,8]]},"977":{"position":[[725,9]]}},"keywords":{}}],["insights_lookback_window",{"_index":3968,"title":{},"content":{"517":{"position":[[3100,25]]}},"keywords":{}}],["insightsbusi",{"_index":3929,"title":{},"content":{"512":{"position":[[77,16]]}},"keywords":{}}],["insightsmediamedia",{"_index":4412,"title":{},"content":{"667":{"position":[[175,18]]}},"keywords":{}}],["insightsstoriesstori",{"_index":4413,"title":{},"content":{"667":{"position":[[194,20]]}},"keywords":{}}],["inspecifi",{"_index":3851,"title":{},"content":{"483":{"position":[[252,12]]}},"keywords":{}}],["inspect",{"_index":653,"title":{},"content":{"31":{"position":[[103,8]]},"846":{"position":[[89,7],[159,7]]}},"keywords":{}}],["instagram",{"_index":3350,"title":{"666":{"position":[[0,9]]}},"content":{"364":{"position":[[2004,9]]},"667":{"position":[[56,9],[103,9],[127,9]]},"669":{"position":[[250,9]]},"670":{"position":[[103,9],[207,9],[412,9],[720,9]]}},"keywords":{}}],["instagram:dev",{"_index":3351,"title":{},"content":{"364":{"position":[[2060,13]]},"671":{"position":[[90,13]]}},"keywords":{}}],["instagram_bas",{"_index":4419,"title":{},"content":{"670":{"position":[[328,16]]}},"keywords":{}}],["instagram_manage_insight",{"_index":4420,"title":{},"content":{"670":{"position":[[345,26]]}},"keywords":{}}],["instal",{"_index":863,"title":{"58":{"position":[[0,12]]}},"content":{"58":{"position":[[66,7],[698,7],[751,7]]},"169":{"position":[[405,8],[944,7],[998,7],[1240,9]]},"179":{"position":[[340,7]]},"253":{"position":[[173,9],[227,12]]},"262":{"position":[[66,9]]},"266":{"position":[[481,10],[590,7]]},"273":{"position":[[66,9]]},"283":{"position":[[66,9]]},"295":{"position":[[1602,9],[1656,12]]},"313":{"position":[[173,9],[227,12]]},"487":{"position":[[191,7]]},"1292":{"position":[[2896,7]]},"1306":{"position":[[2896,7]]},"1329":{"position":[[2896,7]]}},"keywords":{}}],["instanc",{"_index":92,"title":{},"content":{"2":{"position":[[603,9]]},"81":{"position":[[1964,9]]},"107":{"position":[[1609,9],[2347,9],[3017,9],[3457,9]]},"112":{"position":[[707,8]]},"114":{"position":[[69,9]]},"180":{"position":[[943,8]]},"184":{"position":[[423,9]]},"201":{"position":[[65,8]]},"203":{"position":[[374,8]]},"208":{"position":[[1263,9],[1888,9]]},"222":{"position":[[38,8],[120,9],[698,8],[872,9]]},"223":{"position":[[38,8]]},"224":{"position":[[38,8]]},"250":{"position":[[532,8]]},"366":{"position":[[1127,8]]},"367":{"position":[[141,9],[188,8],[907,9]]},"460":{"position":[[163,9]]},"483":{"position":[[384,8]]},"747":{"position":[[1097,8]]},"753":{"position":[[40,9]]},"767":{"position":[[1147,8]]},"780":{"position":[[58,8]]},"782":{"position":[[467,9]]},"784":{"position":[[49,8]]},"788":{"position":[[80,10]]},"792":{"position":[[95,8],[379,9],[496,9],[567,8]]},"821":{"position":[[489,8]]},"824":{"position":[[1213,8]]},"849":{"position":[[1941,9]]},"864":{"position":[[1446,9],[1535,9]]},"869":{"position":[[792,9]]},"870":{"position":[[590,8],[681,8]]},"904":{"position":[[918,9],[1294,8]]},"912":{"position":[[505,8]]},"914":{"position":[[109,10]]},"917":{"position":[[267,8]]},"918":{"position":[[95,8],[379,9],[496,9],[567,8],[1586,8]]},"919":{"position":[[768,8]]},"931":{"position":[[896,9],[949,8]]},"962":{"position":[[49,10]]},"965":{"position":[[267,8]]},"1043":{"position":[[648,8]]},"1051":{"position":[[904,8]]},"1059":{"position":[[668,8]]},"1136":{"position":[[280,8],[461,9]]},"1154":{"position":[[571,9]]},"1251":{"position":[[58,8]]},"1255":{"position":[[49,8]]},"1271":{"position":[[52,9]]},"1282":{"position":[[195,10]]},"1288":{"position":[[74,10]]},"1289":{"position":[[279,9],[359,9],[380,9]]},"1292":{"position":[[2934,8]]},"1298":{"position":[[38,8]]},"1306":{"position":[[2934,8]]},"1310":{"position":[[210,10]]},"1321":{"position":[[59,9],[139,9],[160,9]]},"1322":{"position":[[38,8],[120,9],[698,8],[872,9]]},"1329":{"position":[[2934,8]]},"1334":{"position":[[59,9],[139,9],[160,9]]},"1335":{"position":[[38,8],[120,9],[698,8],[872,9]]},"1346":{"position":[[38,8]]},"1373":{"position":[[886,8]]},"1374":{"position":[[886,8]]},"1397":{"position":[[665,8]]},"1398":{"position":[[664,8]]},"1409":{"position":[[648,8]]},"1437":{"position":[[1546,8]]}},"keywords":{}}],["instance'",{"_index":2466,"title":{},"content":{"222":{"position":[[935,10]]},"753":{"position":[[1529,10]]},"767":{"position":[[2408,10]]},"792":{"position":[[2389,10]]},"793":{"position":[[1552,10]]},"808":{"position":[[636,10],[1520,10]]},"824":{"position":[[2520,10]]},"904":{"position":[[2335,10]]},"918":{"position":[[2627,10]]},"919":{"position":[[637,10],[2459,10]]},"931":{"position":[[666,10],[1999,10]]},"1043":{"position":[[1823,10]]},"1051":{"position":[[2051,10]]},"1059":{"position":[[1846,10]]},"1303":{"position":[[1642,10]]},"1322":{"position":[[935,10]]},"1335":{"position":[[935,10]]},"1373":{"position":[[1300,10]]},"1374":{"position":[[1304,10]]},"1397":{"position":[[1081,10]]},"1398":{"position":[[1084,10]]},"1409":{"position":[[1096,10]]}},"keywords":{}}],["instant",{"_index":6567,"title":{},"content":{"1453":{"position":[[368,8],[1116,8]]}},"keywords":{}}],["instead",{"_index":411,"title":{},"content":{"13":{"position":[[1376,7]]},"71":{"position":[[659,7]]},"98":{"position":[[858,8]]},"100":{"position":[[688,8]]},"112":{"position":[[172,8]]},"122":{"position":[[643,8]]},"125":{"position":[[838,8]]},"163":{"position":[[960,7]]},"164":{"position":[[1320,7]]},"209":{"position":[[283,8]]},"320":{"position":[[870,7]]},"321":{"position":[[2146,7]]},"322":{"position":[[1364,7]]},"323":{"position":[[269,7]]},"326":{"position":[[124,8],[388,7]]},"333":{"position":[[465,8]]},"483":{"position":[[620,7]]},"759":{"position":[[104,7]]},"772":{"position":[[115,7]]},"799":{"position":[[102,7]]},"814":{"position":[[102,7]]},"830":{"position":[[102,7]]},"849":{"position":[[2541,8]]},"911":{"position":[[199,7]]},"912":{"position":[[229,7]]},"927":{"position":[[199,7]]},"938":{"position":[[199,7]]},"944":{"position":[[371,7]]},"954":{"position":[[199,7]]},"972":{"position":[[199,7]]},"1123":{"position":[[856,8]]},"1200":{"position":[[272,7]]},"1289":{"position":[[775,7]]},"1334":{"position":[[277,7]]},"1370":{"position":[[1356,7]]},"1440":{"position":[[235,8]]},"1442":{"position":[[653,7]]},"1452":{"position":[[2511,7]]}},"keywords":{}}],["instruct",{"_index":1074,"title":{},"content":{"74":{"position":[[18,9]]},"159":{"position":[[410,11]]},"191":{"position":[[229,12]]},"212":{"position":[[290,12]]},"224":{"position":[[1080,12],[1156,12]]},"243":{"position":[[284,12]]},"253":{"position":[[240,13]]},"254":{"position":[[2398,9]]},"295":{"position":[[1669,13]]},"313":{"position":[[240,13]]},"314":{"position":[[1939,9]]},"367":{"position":[[808,12]]},"436":{"position":[[58,13]]},"460":{"position":[[413,12]]},"472":{"position":[[310,12]]},"477":{"position":[[576,12],[823,12]]},"478":{"position":[[434,12],[541,12]]},"556":{"position":[[1523,11]]},"598":{"position":[[540,12],[786,12]]},"599":{"position":[[434,12],[541,12]]},"750":{"position":[[1393,12]]},"753":{"position":[[106,13]]},"764":{"position":[[1046,12]]},"777":{"position":[[1046,12]]},"788":{"position":[[98,12]]},"789":{"position":[[1794,12]]},"804":{"position":[[1044,12]]},"819":{"position":[[1044,12]]},"835":{"position":[[1044,12]]},"914":{"position":[[127,12]]},"915":{"position":[[1250,12]]},"963":{"position":[[1404,12]]},"1039":{"position":[[231,12]]},"1136":{"position":[[362,12]]},"1142":{"position":[[89,12]]},"1149":{"position":[[544,12]]},"1154":{"position":[[302,12]]},"1160":{"position":[[89,12],[200,12]]},"1168":{"position":[[89,12]]},"1211":{"position":[[89,12]]},"1218":{"position":[[89,12]]},"1258":{"position":[[138,12]]},"1283":{"position":[[336,12]]},"1289":{"position":[[735,12]]},"1311":{"position":[[173,12]]},"1334":{"position":[[237,12]]},"1392":{"position":[[246,12]]}},"keywords":{}}],["insuffici",{"_index":2871,"title":{"764":{"position":[[0,12]]},"777":{"position":[[0,12]]},"804":{"position":[[0,12]]},"819":{"position":[[0,12]]},"835":{"position":[[0,12]]}},"content":{"280":{"position":[[1379,12]]},"869":{"position":[[832,12]]}},"keywords":{}}],["int",{"_index":2549,"title":{},"content":{"236":{"position":[[2212,3],[2315,3],[2381,3],[2997,3],[3100,3],[3166,3]]},"842":{"position":[[306,3],[1434,3],[1695,3],[2518,3],[2667,3]]},"1140":{"position":[[701,3]]},"1209":{"position":[[480,3]]},"1292":{"position":[[326,3]]},"1306":{"position":[[326,3]]},"1316":{"position":[[701,3]]},"1329":{"position":[[326,3]]},"1340":{"position":[[701,3]]},"1351":{"position":[[701,3]]},"1379":{"position":[[3675,3]]},"1403":{"position":[[3675,3]]},"1414":{"position":[[3675,3]]},"1431":{"position":[[724,3]]}},"keywords":{}}],["int1",{"_index":5982,"title":{},"content":{"1292":{"position":[[363,4]]},"1306":{"position":[[363,4]]},"1329":{"position":[[363,4]]}},"keywords":{}}],["int2",{"_index":5985,"title":{},"content":{"1292":{"position":[[404,4]]},"1306":{"position":[[404,4]]},"1329":{"position":[[404,4]]}},"keywords":{}}],["int3",{"_index":5986,"title":{},"content":{"1292":{"position":[[441,4]]},"1306":{"position":[[441,4]]},"1329":{"position":[[441,4]]}},"keywords":{}}],["int32",{"_index":5781,"title":{},"content":{"1172":{"position":[[728,6]]},"1222":{"position":[[728,6]]}},"keywords":{}}],["int4",{"_index":5987,"title":{},"content":{"1292":{"position":[[480,4]]},"1306":{"position":[[480,4]]},"1329":{"position":[[480,4]]}},"keywords":{}}],["int64",{"_index":5780,"title":{},"content":{"1172":{"position":[[377,5],[550,6],[639,6]]},"1222":{"position":[[377,5],[550,6],[639,6]]}},"keywords":{}}],["int8",{"_index":5988,"title":{},"content":{"1292":{"position":[[519,4]]},"1306":{"position":[[519,4]]},"1329":{"position":[[519,4]]}},"keywords":{}}],["integ",{"_index":52,"title":{},"content":{"1":{"position":[[697,8]]},"14":{"position":[[486,7],[684,7],[867,7],[1191,7]]},"72":{"position":[[539,7]]},"94":{"position":[[665,7],[3145,7]]},"100":{"position":[[412,7]]},"107":{"position":[[1845,8],[2051,8],[3964,9]]},"120":{"position":[[2582,7]]},"121":{"position":[[1066,7]]},"159":{"position":[[1006,7]]},"160":{"position":[[800,8]]},"162":{"position":[[2150,8],[2265,8]]},"164":{"position":[[511,8],[527,7]]},"166":{"position":[[403,8],[435,8]]},"183":{"position":[[1823,7],[3629,7]]},"254":{"position":[[1963,8]]},"279":{"position":[[1280,7]]},"296":{"position":[[3602,8]]},"307":{"position":[[1414,7],[2282,7]]},"309":{"position":[[680,7],[2217,7],[2814,7]]},"314":{"position":[[1173,7]]},"370":{"position":[[882,7]]},"387":{"position":[[1053,7],[1147,7]]},"397":{"position":[[532,7],[794,7],[1135,7]]},"402":{"position":[[176,7],[880,7]]},"509":{"position":[[340,7]]},"517":{"position":[[2587,7],[3174,7],[3437,7],[3736,7]]},"534":{"position":[[1094,7]]},"556":{"position":[[510,7]]},"573":{"position":[[1244,7]]},"584":{"position":[[1316,7]]},"747":{"position":[[164,7],[393,7],[463,7],[1323,7]]},"752":{"position":[[283,7]]},"753":{"position":[[939,7]]},"757":{"position":[[1369,7],[1649,7]]},"767":{"position":[[1919,7]]},"770":{"position":[[1369,7],[1649,7]]},"791":{"position":[[236,7]]},"792":{"position":[[1859,7]]},"793":{"position":[[910,7]]},"797":{"position":[[1369,7],[1649,7]]},"808":{"position":[[856,7]]},"812":{"position":[[1369,7],[1649,7]]},"824":{"position":[[1981,7]]},"828":{"position":[[1369,7],[1649,7]]},"842":{"position":[[2272,7]]},"867":{"position":[[974,7],[1136,7],[1247,7],[2077,7]]},"879":{"position":[[1131,7],[1349,7],[1496,7]]},"907":{"position":[[665,7]]},"923":{"position":[[665,7]]},"934":{"position":[[665,7]]},"950":{"position":[[665,7]]},"968":{"position":[[665,7]]},"1015":{"position":[[234,7]]},"1042":{"position":[[715,7]]},"1043":{"position":[[1379,7]]},"1045":{"position":[[650,7]]},"1051":{"position":[[1641,7]]},"1053":{"position":[[650,7]]},"1059":{"position":[[1434,7]]},"1061":{"position":[[650,7]]},"1076":{"position":[[576,7]]},"1113":{"position":[[421,7]]},"1140":{"position":[[744,7]]},"1144":{"position":[[688,7],[1031,7],[1151,7],[1226,7]]},"1146":{"position":[[60,7]]},"1164":{"position":[[268,7],[466,8]]},"1170":{"position":[[688,7],[995,7],[1151,7]]},"1172":{"position":[[369,7]]},"1173":{"position":[[60,7]]},"1196":{"position":[[838,7],[1213,7]]},"1209":{"position":[[494,7]]},"1213":{"position":[[543,7],[708,7],[828,7],[903,7]]},"1215":{"position":[[60,7]]},"1220":{"position":[[543,7],[672,7],[828,7]]},"1222":{"position":[[369,7]]},"1223":{"position":[[60,7]]},"1275":{"position":[[212,9]]},"1292":{"position":[[549,7]]},"1306":{"position":[[549,7]]},"1316":{"position":[[744,7]]},"1329":{"position":[[549,7]]},"1340":{"position":[[744,7]]},"1351":{"position":[[744,7]]},"1356":{"position":[[1300,7]]},"1379":{"position":[[3726,7]]},"1403":{"position":[[3726,7]]},"1414":{"position":[[3726,7]]},"1431":{"position":[[767,7]]},"1466":{"position":[[31,8]]},"1475":{"position":[[627,7],[1274,7],[1381,7],[2004,7]]}},"keywords":{}}],["integr",{"_index":145,"title":{"329":{"position":[[6,10]]},"332":{"position":[[5,10]]},"1115":{"position":[[6,12]]},"1116":{"position":[[16,13]]}},"content":{"3":{"position":[[1111,11]]},"4":{"position":[[404,10]]},"26":{"position":[[432,11],[468,10]]},"38":{"position":[[326,12]]},"41":{"position":[[173,9]]},"53":{"position":[[246,13]]},"81":{"position":[[654,9]]},"82":{"position":[[251,10]]},"84":{"position":[[56,12],[245,13],[348,11],[471,13],[1119,9]]},"95":{"position":[[195,9]]},"124":{"position":[[258,10],[326,10]]},"179":{"position":[[204,10]]},"183":{"position":[[68,10]]},"189":{"position":[[636,9],[1493,9]]},"191":{"position":[[1939,11],[2041,11]]},"196":{"position":[[394,12]]},"198":{"position":[[30,11]]},"209":{"position":[[884,10]]},"210":{"position":[[328,11]]},"211":{"position":[[66,11],[727,9]]},"232":{"position":[[569,10]]},"233":{"position":[[401,12]]},"236":{"position":[[473,10]]},"237":{"position":[[2662,9]]},"240":{"position":[[1900,11],[2002,11],[2426,11]]},"241":{"position":[[244,11]]},"245":{"position":[[269,11]]},"266":{"position":[[381,10]]},"267":{"position":[[76,10]]},"289":{"position":[[655,9]]},"300":{"position":[[595,9]]},"321":{"position":[[144,9]]},"323":{"position":[[1361,10]]},"324":{"position":[[1222,11]]},"329":{"position":[[255,9]]},"332":{"position":[[762,11]]},"345":{"position":[[164,12]]},"387":{"position":[[329,11]]},"487":{"position":[[59,12],[93,12],[175,11],[222,11]]},"606":{"position":[[120,12],[402,11]]},"839":{"position":[[79,11]]},"840":{"position":[[439,11],[520,11],[544,12],[576,11],[622,12],[989,11],[1889,11],[2263,11]]},"842":{"position":[[702,12],[816,12]]},"848":{"position":[[79,11]]},"849":{"position":[[910,11],[991,11],[1015,12],[1047,11],[1097,12],[1384,11],[1602,11],[2929,11],[2969,10],[3403,11]]},"851":{"position":[[315,12],[414,12]]},"855":{"position":[[61,11],[127,12]]},"856":{"position":[[12,12],[47,12],[110,11]]},"857":{"position":[[12,12],[56,12],[76,12]]},"889":{"position":[[26,11]]},"974":{"position":[[55,11]]},"975":{"position":[[358,11]]},"977":{"position":[[561,11]]},"1066":{"position":[[56,9]]},"1383":{"position":[[1887,11],[1989,11]]}},"keywords":{}}],["integration'",{"_index":4832,"title":{},"content":{"856":{"position":[[71,13]]}},"keywords":{}}],["integrator"",{"_index":4824,"title":{},"content":{"849":{"position":[[2595,16]]}},"keywords":{}}],["intel",{"_index":1981,"title":{},"content":{"169":{"position":[[367,5]]}},"keywords":{}}],["intellig",{"_index":2115,"title":{},"content":{"189":{"position":[[663,12]]}},"keywords":{}}],["intend",{"_index":573,"title":{},"content":{"21":{"position":[[586,8]]},"81":{"position":[[789,8]]},"112":{"position":[[484,7]]},"202":{"position":[[76,6]]},"215":{"position":[[15,8]]},"479":{"position":[[307,6]]},"754":{"position":[[206,6]]},"794":{"position":[[79,6]]},"809":{"position":[[79,6]]},"821":{"position":[[676,8]]},"825":{"position":[[79,6]]},"912":{"position":[[692,8]]},"945":{"position":[[1016,6]]},"1042":{"position":[[959,6]]},"1043":{"position":[[1623,6]]},"1051":{"position":[[1885,6]]},"1059":{"position":[[1678,6]]},"1286":{"position":[[79,6]]},"1301":{"position":[[79,6]]},"1325":{"position":[[79,6]]}},"keywords":{}}],["intent",{"_index":6490,"title":{},"content":{"1439":{"position":[[1053,9]]}},"keywords":{}}],["intention",{"_index":3154,"title":{},"content":{"322":{"position":[[1773,13]]}},"keywords":{}}],["intentspayoutsplansproductspromot",{"_index":5283,"title":{},"content":{"1073":{"position":[[260,36]]}},"keywords":{}}],["interact",{"_index":1106,"title":{},"content":{"79":{"position":[[247,8]]},"84":{"position":[[105,9]]},"197":{"position":[[296,8]]},"245":{"position":[[184,8]]},"323":{"position":[[1274,11]]},"324":{"position":[[1187,8]]},"335":{"position":[[104,8]]},"436":{"position":[[1096,8]]},"556":{"position":[[347,11]]},"869":{"position":[[395,11]]}},"keywords":{}}],["intercom",{"_index":3352,"title":{"672":{"position":[[0,8]]},"675":{"position":[[12,8]]},"681":{"position":[[0,8]]}},"content":{"364":{"position":[[2074,8]]},"682":{"position":[[56,8]]},"683":{"position":[[41,9],[186,8],[305,8]]},"684":{"position":[[250,8]]},"685":{"position":[[541,8]]}},"keywords":{}}],["intercom:dev",{"_index":3353,"title":{},"content":{"364":{"position":[[2129,12]]},"686":{"position":[[150,12]]}},"keywords":{}}],["interest",{"_index":1604,"title":{},"content":{"113":{"position":[[109,11]]},"189":{"position":[[335,10]]},"196":{"position":[[580,10]]},"229":{"position":[[272,8]]},"233":{"position":[[765,10]]},"281":{"position":[[420,8]]},"523":{"position":[[58,9],[110,9]]},"524":{"position":[[54,9]]},"531":{"position":[[58,9],[110,9]]},"532":{"position":[[58,9],[110,9]]},"1435":{"position":[[553,11]]}},"keywords":{}}],["interfac",{"_index":650,"title":{},"content":{"31":{"position":[[27,9]]},"35":{"position":[[293,9]]},"36":{"position":[[426,9]]},"38":{"position":[[53,9]]},"63":{"position":[[454,11]]},"64":{"position":[[1039,10]]},"81":{"position":[[182,9],[1606,10],[2125,9]]},"103":{"position":[[212,10],[231,9],[479,9]]},"104":{"position":[[53,10]]},"189":{"position":[[1674,9]]},"191":{"position":[[395,9]]},"208":{"position":[[60,9]]},"216":{"position":[[442,10]]},"281":{"position":[[782,10]]},"320":{"position":[[1535,9]]},"323":{"position":[[1757,10]]},"326":{"position":[[88,10],[166,10]]},"387":{"position":[[416,10]]}},"keywords":{}}],["intermedi",{"_index":710,"title":{"39":{"position":[[0,12]]}},"content":{"329":{"position":[[569,12]]},"1206":{"position":[[618,12]]}},"keywords":{}}],["intern",{"_index":777,"title":{"112":{"position":[[0,8]]},"114":{"position":[[14,8]]}},"content":{"48":{"position":[[295,8]]},"49":{"position":[[361,8]]},"97":{"position":[[412,8]]},"100":{"position":[[828,8]]},"104":{"position":[[161,8]]},"105":{"position":[[443,8]]},"108":{"position":[[173,8]]},"110":{"position":[[922,8]]},"112":{"position":[[35,8],[105,8],[221,8],[358,8],[540,8],[613,8]]},"113":{"position":[[596,8]]},"114":{"position":[[30,8],[91,8],[474,8]]},"121":{"position":[[1719,8]]},"124":{"position":[[273,8]]},"221":{"position":[[1584,8]]},"278":{"position":[[52,8],[801,8],[1539,8]]},"281":{"position":[[2897,8],[3117,8]]},"330":{"position":[[346,8]]},"750":{"position":[[1326,8]]},"789":{"position":[[1727,8]]},"857":{"position":[[47,8],[93,8]]},"915":{"position":[[1183,8]]},"963":{"position":[[1337,8]]},"1247":{"position":[[991,8]]}},"keywords":{}}],["internet",{"_index":2494,"title":{"238":{"position":[[27,8]]}},"content":{"234":{"position":[[394,9]]},"242":{"position":[[331,9]]},"1154":{"position":[[136,8],[356,8]]}},"keywords":{}}],["interoper",{"_index":1271,"title":{},"content":{"84":{"position":[[859,16]]}},"keywords":{}}],["interpret",{"_index":1685,"title":{},"content":{"122":{"position":[[2043,11]]},"197":{"position":[[1434,10]]},"1477":{"position":[[8,10],[291,11],[458,11]]}},"keywords":{}}],["interrupt",{"_index":2269,"title":{},"content":{"209":{"position":[[1243,13]]},"211":{"position":[[929,13]]},"1147":{"position":[[130,11]]},"1174":{"position":[[130,11]]},"1216":{"position":[[130,11]]},"1224":{"position":[[130,11]]}},"keywords":{}}],["intersect",{"_index":5544,"title":{},"content":{"1140":{"position":[[779,9],[821,12]]},"1192":{"position":[[507,9]]},"1209":{"position":[[520,9]]},"1292":{"position":[[587,9]]},"1306":{"position":[[587,9]]},"1316":{"position":[[779,9],[821,12]]},"1329":{"position":[[587,9]]},"1340":{"position":[[779,9],[821,12]]},"1351":{"position":[[779,9],[821,12]]},"1370":{"position":[[363,9]]},"1379":{"position":[[435,9],[482,12]]},"1394":{"position":[[682,9]]},"1403":{"position":[[435,9],[482,12]]},"1414":{"position":[[435,9],[482,12]]},"1423":{"position":[[520,9]]},"1431":{"position":[[802,9],[844,12]]},"1477":{"position":[[250,11],[319,12],[565,11],[3040,11]]}},"keywords":{}}],["intersect"",{"_index":6716,"title":{},"content":{"1477":{"position":[[119,17],[185,17]]}},"keywords":{}}],["interv",{"_index":41,"title":{"1036":{"position":[[8,9]]}},"content":{"1":{"position":[[516,9]]},"53":{"position":[[295,9]]},"56":{"position":[[2153,8],[2328,8],[2362,9],[2461,8],[2662,9]]},"138":{"position":[[2094,9],[2119,8],[2243,9]]},"141":{"position":[[2050,9],[2075,8],[2199,9]]},"142":{"position":[[2154,9],[2179,8],[2303,9]]},"146":{"position":[[258,8]]},"149":{"position":[[267,8]]},"152":{"position":[[274,8]]},"180":{"position":[[276,9]]},"236":{"position":[[990,9]]},"377":{"position":[[671,8],[697,8],[758,9],[902,8],[929,8]]},"480":{"position":[[1183,10],[1479,8],[1526,8],[1690,8]]},"482":{"position":[[375,8],[786,8],[822,8],[859,8]]},"517":{"position":[[2234,10]]},"540":{"position":[[404,9],[414,8],[423,8]]},"541":{"position":[[212,9]]},"646":{"position":[[831,9],[841,8],[850,8]]},"821":{"position":[[851,8]]},"842":{"position":[[1994,9],[2004,8]]},"843":{"position":[[677,9]]},"879":{"position":[[1398,8],[1415,8],[1723,9],[1733,8],[1742,8]]},"880":{"position":[[513,9]]},"912":{"position":[[870,8],[1500,8]]},"1036":{"position":[[179,9],[288,8],[475,8],[527,8],[586,8],[712,8],[923,8],[1047,8]]},"1037":{"position":[[337,9]]},"1140":{"position":[[870,8]]},"1144":{"position":[[421,8]]},"1162":{"position":[[610,8]]},"1170":{"position":[[421,8]]},"1172":{"position":[[766,8]]},"1209":{"position":[[553,8]]},"1213":{"position":[[276,8]]},"1220":{"position":[[276,8]]},"1222":{"position":[[766,8]]},"1292":{"position":[[634,8]]},"1306":{"position":[[634,8]]},"1316":{"position":[[870,8]]},"1329":{"position":[[634,8]]},"1340":{"position":[[870,8]]},"1351":{"position":[[870,8]]},"1379":{"position":[[536,8]]},"1403":{"position":[[536,8]]},"1414":{"position":[[536,8]]},"1431":{"position":[[893,8]]},"1453":{"position":[[935,10]]},"1455":{"position":[[90,8],[187,8],[222,9]]}},"keywords":{}}],["interval"",{"_index":3830,"title":{},"content":{"479":{"position":[[709,14]]}},"keywords":{}}],["intervent",{"_index":5064,"title":{},"content":{"922":{"position":[[2661,12]]}},"keywords":{}}],["interviewsapprovalscandidatesclos",{"_index":4324,"title":{},"content":{"622":{"position":[[112,34]]}},"keywords":{}}],["intfield",{"_index":5945,"title":{},"content":{"1275":{"position":[[465,9]]}},"keywords":{}}],["intransact",{"_index":6523,"title":{},"content":{"1451":{"position":[[29,15]]}},"keywords":{}}],["intric",{"_index":2258,"title":{},"content":{"208":{"position":[[1737,9]]}},"keywords":{}}],["intricaci",{"_index":2176,"title":{},"content":{"196":{"position":[[598,11]]},"233":{"position":[[783,11]]}},"keywords":{}}],["intrigu",{"_index":2309,"title":{},"content":{"210":{"position":[[1859,10]]}},"keywords":{}}],["introduc",{"_index":331,"title":{},"content":{"11":{"position":[[1283,9],[1838,11]]},"12":{"position":[[375,10]]},"159":{"position":[[26,10]]},"180":{"position":[[205,9]]},"208":{"position":[[345,10]]},"215":{"position":[[55,10]]},"277":{"position":[[19,10]]},"278":{"position":[[19,10]]},"279":{"position":[[19,10]]},"280":{"position":[[59,10]]},"281":{"position":[[19,10]]},"1461":{"position":[[951,11]]}},"keywords":{}}],["introduct",{"_index":286,"title":{"11":{"position":[[0,13]]},"180":{"position":[[0,13]]},"189":{"position":[[0,13]]},"198":{"position":[[0,12]]},"216":{"position":[[0,13]]},"232":{"position":[[0,13]]},"252":{"position":[[0,13]]},"289":{"position":[[0,13]]},"294":{"position":[[0,13]]},"300":{"position":[[0,13]]},"305":{"position":[[0,13]]},"312":{"position":[[0,13]]}},"content":{"203":{"position":[[465,12]]},"1178":{"position":[[442,12]]}},"keywords":{}}],["introspect",{"_index":1865,"title":{},"content":{"157":{"position":[[240,13]]}},"keywords":{}}],["invalid",{"_index":1889,"title":{},"content":{"160":{"position":[[587,7]]},"724":{"position":[[567,7]]},"922":{"position":[[2495,10],[2573,11]]}},"keywords":{}}],["invalu",{"_index":2172,"title":{},"content":{"196":{"position":[[242,10]]},"233":{"position":[[249,10]]}},"keywords":{}}],["invari",{"_index":729,"title":{},"content":{"41":{"position":[[396,11]]},"1467":{"position":[[1956,10]]},"1477":{"position":[[2859,10]]}},"keywords":{}}],["inventori",{"_index":3051,"title":{},"content":{"307":{"position":[[1717,9],[2600,9]]},"309":{"position":[[2548,9],[3155,9]]},"331":{"position":[[555,9]]},"1461":{"position":[[1371,9],[2559,9]]}},"keywords":{}}],["invers",{"_index":684,"title":{},"content":{"36":{"position":[[219,7]]}},"keywords":{}}],["investig",{"_index":904,"title":{},"content":{"60":{"position":[[474,11]]}},"keywords":{}}],["investigationinfo",{"_index":239,"title":{},"content":{"7":{"position":[[337,18]]}},"keywords":{}}],["invis",{"_index":5992,"title":{},"content":{"1292":{"position":[[716,9]]},"1306":{"position":[[716,9]]},"1329":{"position":[[716,9]]}},"keywords":{}}],["invoc",{"_index":854,"title":{},"content":{"56":{"position":[[2178,11],[2404,10],[2494,10],[2564,10]]},"64":{"position":[[404,11]]},"1442":{"position":[[1438,10],[1606,11]]},"1475":{"position":[[1736,12],[1881,12]]}},"keywords":{}}],["invoic",{"_index":5293,"title":{},"content":{"1077":{"position":[[170,7]]},"1078":{"position":[[1309,8]]}},"keywords":{}}],["invoice_item",{"_index":5314,"title":{},"content":{"1078":{"position":[[1124,13]]}},"keywords":{}}],["invoice_line_item",{"_index":5316,"title":{},"content":{"1078":{"position":[[1212,18]]}},"keywords":{}}],["invok",{"_index":1148,"title":{},"content":{"82":{"position":[[421,8],[2953,8]]},"105":{"position":[[313,8],[1543,7]]},"108":{"position":[[45,7]]},"208":{"position":[[1759,7]]},"1292":{"position":[[748,7]]},"1306":{"position":[[748,7]]},"1329":{"position":[[748,7]]}},"keywords":{}}],["involv",{"_index":1704,"title":{},"content":{"125":{"position":[[63,8]]},"240":{"position":[[194,8]]},"606":{"position":[[391,7]]},"1032":{"position":[[260,9]]}},"keywords":{}}],["io",{"_index":5994,"title":{},"content":{"1292":{"position":[[781,2]]},"1306":{"position":[[781,2]]},"1329":{"position":[[781,2]]}},"keywords":{}}],["io_after_gtid",{"_index":5996,"title":{},"content":{"1292":{"position":[[816,13]]},"1306":{"position":[[816,13]]},"1329":{"position":[[816,13]]}},"keywords":{}}],["io_before_gti",{"_index":5997,"title":{},"content":{"1292":{"position":[[863,13]]},"1306":{"position":[[863,13]]},"1329":{"position":[[863,13]]}},"keywords":{}}],["io_thread",{"_index":5999,"title":{},"content":{"1292":{"position":[[904,9]]},"1306":{"position":[[904,9]]},"1329":{"position":[[904,9]]}},"keywords":{}}],["ip",{"_index":1215,"title":{"334":{"position":[[13,2]]},"335":{"position":[[0,2]]}},"content":{"83":{"position":[[274,2]]},"203":{"position":[[523,2]]},"204":{"position":[[353,2],[458,2]]},"221":{"position":[[1908,2],[1971,2]]},"223":{"position":[[916,2]]},"224":{"position":[[968,3]]},"225":{"position":[[158,2]]},"335":{"position":[[27,2]]},"366":{"position":[[1180,2]]},"370":{"position":[[120,2],[154,2]]},"371":{"position":[[368,2]]},"402":{"position":[[83,2]]},"430":{"position":[[302,2]]},"739":{"position":[[34,2]]},"753":{"position":[[177,2],[254,2]]},"767":{"position":[[57,2],[400,2]]},"780":{"position":[[526,4],[564,2]]},"792":{"position":[[311,2],[713,2]]},"793":{"position":[[125,2],[248,2]]},"808":{"position":[[125,2],[196,2],[237,2],[264,2],[1549,2]]},"824":{"position":[[125,2],[505,2]]},"904":{"position":[[125,2],[504,2]]},"918":{"position":[[311,2],[713,2]]},"919":{"position":[[125,2],[248,2]]},"931":{"position":[[125,2],[196,2],[241,2],[268,2],[2028,2]]},"946":{"position":[[25,2],[55,2],[153,2],[223,3],[342,3],[369,2]]},"1018":{"position":[[78,2]]},"1042":{"position":[[1439,2]]},"1043":{"position":[[125,2],[248,2]]},"1051":{"position":[[125,2],[504,2]]},"1059":{"position":[[125,2],[196,2],[241,2],[268,2],[1875,2]]},"1136":{"position":[[333,2]]},"1138":{"position":[[120,2],[154,2]]},"1139":{"position":[[251,2]]},"1154":{"position":[[165,2]]},"1198":{"position":[[127,2]]},"1251":{"position":[[287,4],[326,2]]},"1282":{"position":[[442,2]]},"1283":{"position":[[136,2],[284,2]]},"1286":{"position":[[2079,2]]},"1288":{"position":[[154,2]]},"1289":{"position":[[136,2],[574,2],[645,2],[686,2],[713,2],[1566,2],[1633,2]]},"1297":{"position":[[15,2],[60,2],[87,2]]},"1298":{"position":[[916,2]]},"1301":{"position":[[1915,2]]},"1303":{"position":[[125,2],[196,2],[241,2],[268,2],[1159,2],[1237,2],[1671,2]]},"1310":{"position":[[457,2],[887,2],[954,2]]},"1311":{"position":[[120,2]]},"1320":{"position":[[136,2]]},"1321":{"position":[[367,2]]},"1325":{"position":[[2079,2]]},"1333":{"position":[[136,2]]},"1334":{"position":[[455,2]]},"1344":{"position":[[136,2]]},"1345":{"position":[[15,2],[60,2],[87,2]]},"1346":{"position":[[916,2],[1292,2],[1359,2]]},"1373":{"position":[[125,2],[486,2]]},"1374":{"position":[[125,2],[486,2]]},"1397":{"position":[[125,2],[197,2],[238,2],[265,2],[1110,2]]},"1398":{"position":[[125,2],[196,2],[237,2],[264,2],[1113,2]]},"1408":{"position":[[712,2]]},"1409":{"position":[[125,2],[248,2]]}},"keywords":{}}],["ipc",{"_index":6001,"title":{},"content":{"1292":{"position":[[947,3]]},"1306":{"position":[[947,3]]},"1329":{"position":[[947,3]]}},"keywords":{}}],["iphon",{"_index":501,"title":{},"content":{"17":{"position":[[688,8]]}},"keywords":{}}],["ipv4",{"_index":5123,"title":{},"content":{"963":{"position":[[82,4]]},"964":{"position":[[632,4],[770,4]]},"1317":{"position":[[760,5]]},"1341":{"position":[[760,5]]},"1352":{"position":[[760,5]]},"1432":{"position":[[774,5]]}},"keywords":{}}],["ipv6",{"_index":6259,"title":{},"content":{"1317":{"position":[[766,5]]},"1341":{"position":[[766,5]]},"1352":{"position":[[766,5]]},"1432":{"position":[[780,5]]}},"keywords":{}}],["irrelev",{"_index":6396,"title":{},"content":{"1391":{"position":[[421,10]]}},"keywords":{}}],["is_free_plan",{"_index":3460,"title":{},"content":{"378":{"position":[[291,13]]}},"keywords":{}}],["is_sandbox",{"_index":4924,"title":{},"content":{"885":{"position":[[250,11]]},"886":{"position":[[177,11]]},"991":{"position":[[684,11]]},"992":{"position":[[208,11]]},"1009":{"position":[[747,11]]},"1010":{"position":[[291,11]]}},"keywords":{}}],["isaac"",{"_index":2358,"title":{},"content":{"210":{"position":[[2827,11]]}},"keywords":{}}],["isdatagolden",{"_index":4213,"title":{},"content":{"578":{"position":[[386,12]]}},"keywords":{}}],["isn't",{"_index":966,"title":{},"content":{"64":{"position":[[560,5]]},"81":{"position":[[992,5]]},"110":{"position":[[1228,5]]},"154":{"position":[[1591,5]]},"169":{"position":[[1024,5]]},"190":{"position":[[1017,5]]},"218":{"position":[[1515,5]]},"228":{"position":[[1254,5]]},"392":{"position":[[509,5]]},"397":{"position":[[658,5]]},"417":{"position":[[675,5]]},"1125":{"position":[[452,5]]},"1144":{"position":[[813,5]]},"1170":{"position":[[813,5]]},"1183":{"position":[[208,5]]},"1459":{"position":[[218,5]]}},"keywords":{}}],["isnul",{"_index":5554,"title":{},"content":{"1140":{"position":[[1003,6]]},"1209":{"position":[[594,6]]},"1316":{"position":[[1003,6]]},"1340":{"position":[[1003,6]]},"1351":{"position":[[1003,6]]},"1370":{"position":[[398,6]]},"1431":{"position":[[1026,6]]}},"keywords":{}}],["iso",{"_index":3895,"title":{},"content":{"496":{"position":[[167,3]]}},"keywords":{}}],["iso8601",{"_index":4767,"title":{},"content":{"842":{"position":[[2061,7],[2818,7]]},"1162":{"position":[[678,7]]}},"keywords":{}}],["isol",{"_index":463,"title":{},"content":{"16":{"position":[[396,7]]},"1140":{"position":[[1043,9]]},"1156":{"position":[[714,9]]},"1292":{"position":[[1028,9]]},"1306":{"position":[[1028,9]]},"1316":{"position":[[1043,9]]},"1329":{"position":[[1028,9]]},"1340":{"position":[[1043,9]]},"1351":{"position":[[1043,9]]},"1379":{"position":[[688,9]]},"1403":{"position":[[688,9]]},"1414":{"position":[[688,9]]},"1431":{"position":[[1066,9]]},"1437":{"position":[[545,9]]}},"keywords":{}}],["issu",{"_index":246,"title":{},"content":{"7":{"position":[[478,5]]},"68":{"position":[[729,5]]},"136":{"position":[[148,6]]},"209":{"position":[[215,6]]},"309":{"position":[[1942,5]]},"367":{"position":[[201,5]]},"517":{"position":[[3416,6],[3715,6]]},"521":{"position":[[28,5],[266,6]]},"529":{"position":[[349,5],[428,5],[469,5],[488,5],[511,5],[527,6]]},"713":{"position":[[206,6]]},"869":{"position":[[968,6]]},"871":{"position":[[144,6]]},"910":{"position":[[21,5]]},"926":{"position":[[21,5]]},"931":{"position":[[962,5]]},"937":{"position":[[21,5]]},"953":{"position":[[21,5]]},"971":{"position":[[21,5]]},"1042":{"position":[[27,5]]},"1043":{"position":[[691,5]]},"1051":{"position":[[947,5]]},"1059":{"position":[[711,5]]},"1123":{"position":[[675,6]]},"1373":{"position":[[929,5]]},"1374":{"position":[[929,5]]},"1394":{"position":[[747,5]]},"1397":{"position":[[708,5]]},"1398":{"position":[[707,5]]},"1408":{"position":[[27,5]]},"1409":{"position":[[691,5]]},"1447":{"position":[[335,6]]}},"keywords":{}}],["issuer",{"_index":6004,"title":{},"content":{"1292":{"position":[[1066,6]]},"1306":{"position":[[1066,6]]},"1329":{"position":[[1066,6]]}},"keywords":{}}],["issuesbi",{"_index":4498,"title":{},"content":{"709":{"position":[[812,8]]}},"keywords":{}}],["issuesissu",{"_index":4495,"title":{},"content":{"709":{"position":[[765,11]]}},"keywords":{}}],["isuncheck",{"_index":5128,"title":{},"content":{"964":{"position":[[494,11]]}},"keywords":{}}],["it'",{"_index":901,"title":{},"content":{"60":{"position":[[298,4]]},"66":{"position":[[713,4]]},"68":{"position":[[16,4]]},"77":{"position":[[380,4]]},"80":{"position":[[97,4],[139,4]]},"81":{"position":[[915,4]]},"82":{"position":[[914,4],[3082,4]]},"88":{"position":[[339,4]]},"90":{"position":[[78,4]]},"107":{"position":[[34,4]]},"111":{"position":[[11,4]]},"121":{"position":[[169,4]]},"137":{"position":[[401,4]]},"142":{"position":[[206,4]]},"161":{"position":[[300,4]]},"165":{"position":[[392,4]]},"174":{"position":[[609,4]]},"175":{"position":[[66,4]]},"215":{"position":[[94,4]]},"221":{"position":[[1721,4]]},"227":{"position":[[91,4]]},"268":{"position":[[1378,4]]},"269":{"position":[[949,4]]},"280":{"position":[[491,4],[517,4]]},"292":{"position":[[67,4]]},"303":{"position":[[67,4]]},"305":{"position":[[498,4]]},"309":{"position":[[357,4]]},"326":{"position":[[49,4],[329,4]]},"485":{"position":[[70,4]]},"657":{"position":[[70,4]]},"673":{"position":[[70,4]]},"688":{"position":[[70,4]]},"745":{"position":[[85,4]]},"754":{"position":[[120,4]]},"757":{"position":[[1092,4]]},"770":{"position":[[1092,4]]},"797":{"position":[[1092,4]]},"812":{"position":[[1092,4]]},"828":{"position":[[1092,4]]},"898":{"position":[[1224,4]]},"909":{"position":[[1036,4]]},"925":{"position":[[1036,4]]},"936":{"position":[[1036,4]]},"952":{"position":[[1036,4]]},"970":{"position":[[1036,4]]},"1036":{"position":[[813,4]]},"1077":{"position":[[253,4]]},"1358":{"position":[[633,4]]},"1437":{"position":[[906,4]]},"1439":{"position":[[1206,4]]},"1461":{"position":[[1498,4],[2615,4],[4279,4]]},"1479":{"position":[[489,4]]}},"keywords":{}}],["it'd",{"_index":1846,"title":{},"content":{"154":{"position":[[945,4]]},"268":{"position":[[349,4],[646,4]]},"269":{"position":[[284,4]]}},"keywords":{}}],["it'll",{"_index":2169,"title":{},"content":{"193":{"position":[[185,5]]},"218":{"position":[[1449,5]]},"840":{"position":[[392,5]]},"849":{"position":[[335,5]]}},"keywords":{}}],["item",{"_index":1175,"title":{},"content":{"82":{"position":[[2403,5],[4520,5]]},"98":{"position":[[590,7]]},"137":{"position":[[579,5]]},"164":{"position":[[1894,6]]},"288":{"position":[[806,6]]},"296":{"position":[[536,6],[1507,6],[2323,5],[2472,5]]},"299":{"position":[[721,6]]},"397":{"position":[[738,5]]},"446":{"position":[[147,6]]},"457":{"position":[[145,5]]},"461":{"position":[[274,5]]},"628":{"position":[[148,4],[198,4]]},"919":{"position":[[2425,5]]},"988":{"position":[[163,5]]},"1003":{"position":[[163,5]]},"1043":{"position":[[1789,5]]},"1226":{"position":[[130,5]]},"1383":{"position":[[349,4]]},"1409":{"position":[[1062,5]]},"1464":{"position":[[70,5]]},"1467":{"position":[[279,5],[383,5],[735,6],[774,6],[1823,5],[2015,4],[2258,6]]},"1476":{"position":[[1348,6]]},"1477":{"position":[[875,4],[2742,5],[3748,6],[3767,6]]}},"keywords":{}}],["item/product_id",{"_index":1536,"title":{},"content":{"107":{"position":[[1497,18]]}},"keywords":{}}],["item_pric",{"_index":1373,"title":{},"content":{"96":{"position":[[268,11]]},"107":{"position":[[2789,11],[2807,11]]}},"keywords":{}}],["itemscouponscustom",{"_index":5279,"title":{},"content":{"1073":{"position":[[149,20]]}},"keywords":{}}],["itemsinvoic",{"_index":5281,"title":{},"content":{"1073":{"position":[[221,12]]}},"keywords":{}}],["itemsinvoicespay",{"_index":5282,"title":{},"content":{"1073":{"position":[[239,20]]}},"keywords":{}}],["itemsownersproductsproperti",{"_index":4392,"title":{},"content":{"649":{"position":[[418,27]]}},"keywords":{}}],["itemssubscriptionstransf",{"_index":5285,"title":{},"content":{"1073":{"position":[[322,27]]}},"keywords":{}}],["iter",{"_index":2823,"title":{"696":{"position":[[0,8]]}},"content":{"275":{"position":[[1144,11]]},"364":{"position":[[2142,8]]},"697":{"position":[[56,8]]},"698":{"position":[[15,8],[58,8]]},"699":{"position":[[250,8]]},"700":{"position":[[93,8],[372,8]]},"867":{"position":[[1236,10]]},"870":{"position":[[10,10],[273,11],[769,10]]},"1292":{"position":[[1109,7]]},"1306":{"position":[[1109,7]]},"1329":{"position":[[1109,7]]},"1379":{"position":[[751,7]]},"1403":{"position":[[751,7]]},"1414":{"position":[[751,7]]}},"keywords":{}}],["iterable.dev",{"_index":3354,"title":{},"content":{"364":{"position":[[2197,12]]}},"keywords":{}}],["iterable:dev",{"_index":4460,"title":{},"content":{"701":{"position":[[90,12]]}},"keywords":{}}],["itrequir",{"_index":5976,"title":{},"content":{"1286":{"position":[[1779,11]]},"1301":{"position":[[1615,11]]},"1325":{"position":[[1779,11]]}},"keywords":{}}],["itself",{"_index":166,"title":{},"content":{"4":{"position":[[372,7]]},"38":{"position":[[314,7]]},"72":{"position":[[430,6]]},"88":{"position":[[675,6]]},"115":{"position":[[635,6]]},"147":{"position":[[66,7]]},"153":{"position":[[74,7]]},"280":{"position":[[1032,7]]},"320":{"position":[[52,7]]},"338":{"position":[[176,6]]},"364":{"position":[[264,7]]},"763":{"position":[[245,6]]},"776":{"position":[[245,6]]},"803":{"position":[[251,6]]},"818":{"position":[[251,6]]},"834":{"position":[[251,6]]},"909":{"position":[[484,6]]},"925":{"position":[[484,6]]},"936":{"position":[[484,6]]},"952":{"position":[[484,6]]},"970":{"position":[[484,6]]},"1019":{"position":[[324,6]]},"1467":{"position":[[1927,6]]},"1472":{"position":[[460,7]]}},"keywords":{}}],["it’",{"_index":1258,"title":{},"content":{"84":{"position":[[189,4]]},"115":{"position":[[1184,4]]},"156":{"position":[[622,4]]},"232":{"position":[[942,4]]},"233":{"position":[[625,4]]},"242":{"position":[[20,4]]},"296":{"position":[[1041,4],[1736,4],[6852,4]]},"1476":{"position":[[1157,4]]}},"keywords":{}}],["jane",{"_index":2943,"title":{},"content":{"295":{"position":[[360,4]]}},"keywords":{}}],["javascript",{"_index":951,"title":{},"content":{"63":{"position":[[801,10]]},"102":{"position":[[258,10]]},"164":{"position":[[282,11]]}},"keywords":{}}],["jdbc",{"_index":3541,"title":{},"content":{"402":{"position":[[486,4],[539,4]]}},"keywords":{}}],["jdbc_param",{"_index":3540,"title":{},"content":{"402":{"position":[[473,12]]},"403":{"position":[[325,12]]}},"keywords":{}}],["jersey",{"_index":4603,"title":{},"content":{"754":{"position":[[597,7]]},"794":{"position":[[803,7]]},"809":{"position":[[803,7]]},"825":{"position":[[639,7]]},"1286":{"position":[[860,7]]},"1301":{"position":[[696,7]]},"1325":{"position":[[860,7]]}},"keywords":{}}],["jira",{"_index":3355,"title":{"687":{"position":[[0,4]]},"690":{"position":[[12,4]]},"708":{"position":[[0,4]]}},"content":{"364":{"position":[[2210,4]]},"660":{"position":[[1137,4]]},"690":{"position":[[8,4]]},"709":{"position":[[56,4]]},"711":{"position":[[250,4]]},"712":{"position":[[81,4],[203,4],[337,4],[567,4]]}},"keywords":{}}],["jira'",{"_index":4447,"title":{},"content":{"690":{"position":[[64,6],[314,6]]}},"keywords":{}}],["jira.dev",{"_index":3356,"title":{},"content":{"364":{"position":[[2261,8]]}},"keywords":{}}],["jira.your",{"_index":4504,"title":{},"content":{"712":{"position":[[263,9]]}},"keywords":{}}],["jira:dev",{"_index":4506,"title":{},"content":{"713":{"position":[[90,8]]}},"keywords":{}}],["jiradomainemail",{"_index":4499,"title":{},"content":{"710":{"position":[[67,15]]}},"keywords":{}}],["jitter",{"_index":6577,"title":{},"content":{"1453":{"position":[[1168,6]]}},"keywords":{}}],["job",{"_index":3140,"title":{},"content":{"321":{"position":[[1112,5],[2078,5]]},"322":{"position":[[380,5],[535,5],[781,3],[826,3]]},"323":{"position":[[177,4],[333,4]]},"329":{"position":[[607,3]]},"477":{"position":[[211,5]]}},"keywords":{}}],["john",{"_index":2936,"title":{},"content":{"295":{"position":[[314,4]]}},"keywords":{}}],["join",{"_index":719,"title":{"293":{"position":[[7,4]]}},"content":{"40":{"position":[[314,5]]},"105":{"position":[[1024,5]]},"107":{"position":[[2590,6]]},"112":{"position":[[92,4]]},"136":{"position":[[351,4]]},"212":{"position":[[394,4]]},"232":{"position":[[989,4]]},"243":{"position":[[389,4]]},"295":{"position":[[705,4],[994,5]]},"296":{"position":[[356,6],[1327,6],[1697,4],[3939,4],[4554,6],[6615,6]]},"297":{"position":[[67,4]]},"319":{"position":[[1325,5]]},"331":{"position":[[41,4],[169,5],[276,5]]},"842":{"position":[[3226,4],[3311,4],[3385,4],[3471,4]]},"1015":{"position":[[75,4],[100,4]]},"1140":{"position":[[1093,4]]},"1192":{"position":[[517,4]]},"1196":{"position":[[674,6]]},"1209":{"position":[[614,4]]},"1292":{"position":[[1150,4]]},"1306":{"position":[[1150,4]]},"1316":{"position":[[1093,4]]},"1329":{"position":[[1150,4]]},"1340":{"position":[[1093,4]]},"1351":{"position":[[1093,4]]},"1370":{"position":[[409,4]]},"1379":{"position":[[801,4]]},"1394":{"position":[[772,4]]},"1403":{"position":[[801,4]]},"1414":{"position":[[801,4]]},"1423":{"position":[[592,4]]},"1431":{"position":[[1116,4]]}},"keywords":{}}],["join.flow.t",{"_index":2995,"title":{},"content":{"296":{"position":[[723,12],[2724,12],[3045,12],[4010,12],[5167,13]]}},"keywords":{}}],["join_channel",{"_index":5185,"title":{},"content":{"1016":{"position":[[213,14]]}},"keywords":{}}],["join_typ",{"_index":5872,"title":{},"content":{"1209":{"position":[[636,9]]}},"keywords":{}}],["jordan"",{"_index":2353,"title":{},"content":{"210":{"position":[[2756,13]]}},"keywords":{}}],["journal",{"_index":0,"title":{"0":{"position":[[0,8]]},"48":{"position":[[0,9]]}},"content":{"1":{"position":[[81,8],[102,8],[186,9],[216,7]]},"2":{"position":[[707,9],[746,7],[826,7]]},"3":{"position":[[1,7],[384,8]]},"16":{"position":[[1327,7]]},"21":{"position":[[418,9],[543,9]]},"48":{"position":[[1,8],[129,8],[160,8],[276,7],[353,8]]},"60":{"position":[[791,8],[803,7]]},"77":{"position":[[611,9]]},"320":{"position":[[711,8],[788,7],[923,9],[974,8],[1077,7],[1560,9],[1866,9]]}},"keywords":{}}],["journals.materi",{"_index":565,"title":{},"content":{"21":{"position":[[277,24]]}},"keywords":{}}],["jq",{"_index":5096,"title":{},"content":{"943":{"position":[[1230,2]]}},"keywords":{}}],["json",{"_index":106,"title":{"90":{"position":[[0,4]]},"156":{"position":[[0,4]]}},"content":{"3":{"position":[[121,4]]},"11":{"position":[[85,4]]},"26":{"position":[[653,4]]},"34":{"position":[[286,4]]},"41":{"position":[[333,4]]},"50":{"position":[[21,4]]},"66":{"position":[[55,4]]},"67":{"position":[[1761,4],[1870,4]]},"68":{"position":[[652,4],[1811,4]]},"69":{"position":[[515,4]]},"70":{"position":[[537,4]]},"71":{"position":[[114,4],[272,4]]},"76":{"position":[[558,4]]},"77":{"position":[[123,4]]},"82":{"position":[[541,4]]},"88":{"position":[[453,4]]},"90":{"position":[[64,4],[244,4]]},"94":{"position":[[2920,4]]},"98":{"position":[[511,4],[666,4],[955,4],[963,5],[1009,4]]},"102":{"position":[[394,4]]},"107":{"position":[[1274,4]]},"122":{"position":[[87,4],[320,4],[1069,4]]},"149":{"position":[[1220,4]]},"156":{"position":[[1,4],[157,4]]},"157":{"position":[[81,4],[225,4]]},"158":{"position":[[70,4]]},"159":{"position":[[5,4],[137,4],[329,4]]},"161":{"position":[[1,4],[1035,4],[1066,4]]},"164":{"position":[[1640,4]]},"165":{"position":[[29,4],[213,4]]},"183":{"position":[[4127,4]]},"207":{"position":[[189,4]]},"210":{"position":[[1820,4]]},"227":{"position":[[129,4]]},"239":{"position":[[792,4]]},"253":{"position":[[965,4],[1083,4]]},"254":{"position":[[2302,4]]},"259":{"position":[[324,4],[2013,4]]},"288":{"position":[[543,4]]},"290":{"position":[[1047,4],[1457,4]]},"296":{"position":[[2170,4]]},"301":{"position":[[1132,7],[1158,4],[1553,4]]},"305":{"position":[[386,4]]},"313":{"position":[[965,4],[1083,4]]},"314":{"position":[[1843,4]]},"320":{"position":[[1709,4],[1742,4]]},"323":{"position":[[1013,4]]},"332":{"position":[[222,4],[586,4]]},"390":{"position":[[121,4]]},"413":{"position":[[296,4]]},"417":{"position":[[1346,4]]},"419":{"position":[[213,4]]},"427":{"position":[[53,4],[95,5],[236,4]]},"438":{"position":[[1862,4]]},"440":{"position":[[229,4]]},"478":{"position":[[512,4]]},"480":{"position":[[116,4]]},"482":{"position":[[283,4],[329,4]]},"485":{"position":[[218,4]]},"486":{"position":[[191,4]]},"502":{"position":[[347,8],[372,4]]},"504":{"position":[[150,4]]},"543":{"position":[[316,4]]},"545":{"position":[[682,4],[970,4]]},"547":{"position":[[214,4]]},"548":{"position":[[435,4],[610,4],[1296,4]]},"564":{"position":[[85,4]]},"571":{"position":[[222,4],[597,4]]},"573":{"position":[[529,4],[627,4]]},"574":{"position":[[221,4]]},"582":{"position":[[87,4],[208,4]]},"584":{"position":[[460,4],[549,4]]},"585":{"position":[[211,4]]},"591":{"position":[[230,4]]},"593":{"position":[[120,4]]},"599":{"position":[[512,4]]},"601":{"position":[[188,4],[222,4]]},"603":{"position":[[38,4]]},"609":{"position":[[48,4],[219,4]]},"611":{"position":[[434,4],[447,4],[685,4]]},"617":{"position":[[174,4],[519,4]]},"619":{"position":[[434,4]]},"639":{"position":[[149,4]]},"657":{"position":[[218,4]]},"658":{"position":[[191,4]]},"673":{"position":[[218,4]]},"674":{"position":[[191,4]]},"688":{"position":[[218,4]]},"689":{"position":[[191,4]]},"821":{"position":[[157,4]]},"912":{"position":[[165,4]]},"1021":{"position":[[1038,8],[1063,4]]},"1023":{"position":[[194,4]]},"1047":{"position":[[704,4]]},"1055":{"position":[[704,4]]},"1063":{"position":[[704,4]]},"1172":{"position":[[294,4],[327,4]]},"1177":{"position":[[421,4]]},"1179":{"position":[[206,4],[215,4]]},"1200":{"position":[[507,4],[676,4]]},"1203":{"position":[[381,4]]},"1213":{"position":[[162,4],[171,4]]},"1220":{"position":[[162,4],[171,4]]},"1222":{"position":[[294,4],[327,4]]},"1228":{"position":[[273,4]]},"1230":{"position":[[355,4],[364,4]]},"1245":{"position":[[116,4],[471,4],[623,4]]},"1247":{"position":[[526,4],[535,4]]},"1276":{"position":[[179,4]]},"1292":{"position":[[1186,4]]},"1306":{"position":[[1186,4]]},"1329":{"position":[[1186,4]]},"1358":{"position":[[376,4]]},"1465":{"position":[[53,4]]},"1467":{"position":[[1670,4]]},"1475":{"position":[[1358,4]]},"1476":{"position":[[757,4]]},"1477":{"position":[[2706,4]]}},"keywords":{}}],["json('tru",{"_index":1421,"title":{},"content":{"98":{"position":[[1119,14]]}},"keywords":{}}],["json_array",{"_index":5563,"title":{},"content":{"1140":{"position":[[1134,10]]},"1316":{"position":[[1134,10]]},"1340":{"position":[[1134,10]]},"1351":{"position":[[1134,10]]},"1423":{"position":[[620,10]]},"1431":{"position":[[1157,10]]}},"keywords":{}}],["json_array(1",{"_index":1411,"title":{},"content":{"98":{"position":[[563,13]]}},"keywords":{}}],["json_arrayagg",{"_index":5567,"title":{},"content":{"1140":{"position":[[1169,13]]},"1316":{"position":[[1169,13]]},"1340":{"position":[[1169,13]]},"1351":{"position":[[1169,13]]},"1431":{"position":[[1192,13]]}},"keywords":{}}],["json_exist",{"_index":5569,"title":{},"content":{"1140":{"position":[[1222,11]]},"1316":{"position":[[1222,11]]},"1340":{"position":[[1222,11]]},"1351":{"position":[[1222,11]]},"1423":{"position":[[650,11]]},"1431":{"position":[[1245,11]]}},"keywords":{}}],["json_object",{"_index":5572,"title":{},"content":{"1140":{"position":[[1268,11]]},"1316":{"position":[[1268,11]]},"1340":{"position":[[1268,11]]},"1351":{"position":[[1268,11]]},"1423":{"position":[[687,11]]},"1431":{"position":[[1291,11]]}},"keywords":{}}],["json_object('a",{"_index":1420,"title":{},"content":{"98":{"position":[[1094,16]]}},"keywords":{}}],["json_objectagg",{"_index":5575,"title":{},"content":{"1140":{"position":[[1311,14]]},"1316":{"position":[[1311,14]]},"1340":{"position":[[1311,14]]},"1351":{"position":[[1311,14]]},"1431":{"position":[[1334,14]]}},"keywords":{}}],["json_queri",{"_index":5579,"title":{},"content":{"1140":{"position":[[1368,10]]},"1316":{"position":[[1368,10]]},"1340":{"position":[[1368,10]]},"1351":{"position":[[1368,10]]},"1423":{"position":[[718,10]]},"1431":{"position":[[1391,10]]}},"keywords":{}}],["json_schema",{"_index":1307,"title":{},"content":{"89":{"position":[[360,12]]},"90":{"position":[[578,11]]}},"keywords":{}}],["json_tabl",{"_index":5581,"title":{},"content":{"1140":{"position":[[1408,10]]},"1292":{"position":[[1236,10]]},"1306":{"position":[[1236,10]]},"1316":{"position":[[1408,10]]},"1329":{"position":[[1236,10]]},"1340":{"position":[[1408,10]]},"1351":{"position":[[1408,10]]},"1423":{"position":[[747,10]]},"1431":{"position":[[1431,10]]}},"keywords":{}}],["json_table_primit",{"_index":5582,"title":{},"content":{"1140":{"position":[[1456,20]]},"1316":{"position":[[1456,20]]},"1340":{"position":[[1456,20]]},"1351":{"position":[[1456,20]]},"1431":{"position":[[1479,20]]}},"keywords":{}}],["json_valu",{"_index":5585,"title":{},"content":{"1140":{"position":[[1511,10]]},"1292":{"position":[[1298,10]]},"1306":{"position":[[1298,10]]},"1316":{"position":[[1511,10]]},"1329":{"position":[[1298,10]]},"1340":{"position":[[1511,10]]},"1351":{"position":[[1511,10]]},"1423":{"position":[[770,10]]},"1431":{"position":[[1534,10]]}},"keywords":{}}],["juli",{"_index":4302,"title":{},"content":{"606":{"position":[[478,4]]}},"keywords":{}}],["jump",{"_index":2581,"title":{},"content":{"238":{"position":[[681,4]]}},"keywords":{}}],["june",{"_index":5295,"title":{},"content":{"1077":{"position":[[530,5],[624,4],[753,4],[820,4]]}},"keywords":{}}],["jwt",{"_index":6364,"title":{},"content":{"1384":{"position":[[134,3]]},"1386":{"position":[[831,3],[1057,3]]},"1387":{"position":[[808,3]]}},"keywords":{}}],["k",{"_index":6659,"title":{},"content":{"1467":{"position":[[2253,4],[2486,2],[2514,2],[2578,2],[2606,2],[2732,2],[2760,2],[2788,2]]}},"keywords":{}}],["kafka",{"_index":766,"title":{"244":{"position":[[32,5]]},"250":{"position":[[15,5]]},"320":{"position":[[0,6]]},"426":{"position":[[7,5]]},"430":{"position":[[22,5]]}},"content":{"45":{"position":[[254,5]]},"245":{"position":[[236,5],[295,5]]},"246":{"position":[[1,5],[72,5]]},"250":{"position":[[16,5],[77,5],[146,5],[174,5],[202,5],[1238,5]]},"320":{"position":[[38,5],[60,5],[320,5],[446,5],[563,5],[765,5],[1632,5],[1939,5],[2408,6]]},"325":{"position":[[107,5]]},"363":{"position":[[627,5]]},"427":{"position":[[25,5],[241,5],[323,5],[362,5]]},"428":{"position":[[3,5]]},"429":{"position":[[79,5],[151,5],[430,5],[1187,5]]},"430":{"position":[[43,5]]},"431":{"position":[[257,5]]},"432":{"position":[[124,5],[178,5],[455,5],[1246,5]]},"433":{"position":[[912,5]]},"1118":{"position":[[285,5]]},"1440":{"position":[[1651,5]]}},"keywords":{}}],["kafka:dev",{"_index":3290,"title":{},"content":{"363":{"position":[[679,9]]},"433":{"position":[[131,9],[542,9]]}},"keywords":{}}],["kafkacat",{"_index":2677,"title":{},"content":{"250":{"position":[[1155,9]]}},"keywords":{}}],["kafkaconsum",{"_index":2645,"title":{},"content":{"250":{"position":[[215,13],[552,14]]}},"keywords":{}}],["kb",{"_index":5009,"title":{},"content":{"909":{"position":[[50,3]]},"925":{"position":[[50,3]]},"936":{"position":[[50,3]]},"952":{"position":[[50,3]]},"970":{"position":[[50,3]]}},"keywords":{}}],["kcat",{"_index":2675,"title":{},"content":{"250":{"position":[[1131,4],[1252,4]]}},"keywords":{}}],["keep",{"_index":298,"title":{},"content":{"11":{"position":[[321,4]]},"12":{"position":[[233,4]]},"36":{"position":[[321,5]]},"55":{"position":[[936,4]]},"61":{"position":[[345,4]]},"62":{"position":[[513,5]]},"121":{"position":[[1705,4]]},"183":{"position":[[622,4]]},"196":{"position":[[257,7],[784,4]]},"207":{"position":[[223,4]]},"217":{"position":[[1680,4]]},"233":{"position":[[264,7],[969,4]]},"238":{"position":[[612,4]]},"239":{"position":[[1759,4]]},"240":{"position":[[228,4]]},"242":{"position":[[952,5]]},"267":{"position":[[990,4]]},"268":{"position":[[1209,4]]},"269":{"position":[[780,4]]},"270":{"position":[[1414,4]]},"307":{"position":[[3242,4]]},"309":{"position":[[3566,4]]},"313":{"position":[[3568,4]]},"315":{"position":[[2478,7]]},"322":{"position":[[1442,5]]},"325":{"position":[[130,4]]},"326":{"position":[[1506,4],[1764,7]]},"329":{"position":[[956,5]]},"480":{"position":[[1119,4],[1557,4]]},"489":{"position":[[307,4]]},"577":{"position":[[415,7]]},"588":{"position":[[410,7]]},"595":{"position":[[1571,4]]},"662":{"position":[[307,4]]},"677":{"position":[[307,4]]},"692":{"position":[[307,4]]},"1036":{"position":[[1,7]]},"1356":{"position":[[826,4]]},"1388":{"position":[[242,4]]},"1451":{"position":[[266,4]]},"1459":{"position":[[1620,4]]},"1461":{"position":[[81,7],[571,4]]},"1462":{"position":[[171,7]]},"1465":{"position":[[829,4]]}},"keywords":{}}],["kept",{"_index":55,"title":{},"content":{"1":{"position":[[784,5]]},"38":{"position":[[290,4]]},"115":{"position":[[495,4]]},"126":{"position":[[350,4]]},"129":{"position":[[1089,5]]},"322":{"position":[[1906,4]]},"323":{"position":[[859,4]]},"326":{"position":[[903,4]]}},"keywords":{}}],["key",{"_index":13,"title":{"71":{"position":[[0,5]]},"73":{"position":[[10,5]]},"74":{"position":[[0,3]]},"75":{"position":[[6,5]]},"246":{"position":[[0,3]]},"478":{"position":[[16,4]]},"571":{"position":[[47,4]]},"582":{"position":[[47,4]]},"599":{"position":[[16,4]]},"609":{"position":[[47,4]]},"805":{"position":[[17,4]]},"820":{"position":[[17,4]]},"836":{"position":[[17,4]]},"1047":{"position":[[27,5]]},"1055":{"position":[[27,5]]},"1063":{"position":[[27,5]]},"1384":{"position":[[0,3]]}},"content":{"1":{"position":[[175,4]]},"2":{"position":[[288,4],[345,4],[476,3],[584,3]]},"11":{"position":[[855,4]]},"13":{"position":[[1559,3]]},"14":{"position":[[34,3],[552,4],[700,4],[883,4],[1207,4]]},"16":{"position":[[194,4]]},"34":{"position":[[772,5]]},"42":{"position":[[41,4],[50,3],[205,3],[233,3],[284,3],[409,3],[519,4]]},"56":{"position":[[708,4]]},"66":{"position":[[91,3],[591,4]]},"67":{"position":[[1436,4]]},"68":{"position":[[597,4],[620,3]]},"69":{"position":[[479,3],[641,4],[680,3],[739,4]]},"70":{"position":[[761,4]]},"71":{"position":[[38,3],[80,4],[233,4],[512,3],[650,3]]},"72":{"position":[[1,5],[146,5],[304,5],[455,5],[749,4]]},"73":{"position":[[78,4],[195,4],[220,4]]},"74":{"position":[[14,3],[411,4],[684,3],[798,4],[893,3],[973,3]]},"75":{"position":[[92,3],[191,3],[301,4],[354,4],[431,4]]},"76":{"position":[[421,4],[500,4]]},"82":{"position":[[573,3],[642,3],[1499,3],[1850,3],[2536,3],[3119,3],[3295,3],[4174,3],[4677,3],[5040,4]]},"83":{"position":[[1277,3],[1498,3],[2353,3]]},"94":{"position":[[180,4],[185,6],[681,3],[2758,3],[2879,3],[2913,3],[2979,4]]},"105":{"position":[[260,5]]},"107":{"position":[[92,4],[1196,4],[1228,4],[1242,4],[1385,3],[1492,4],[1742,4],[1824,3],[1905,4],[2158,4],[3258,4],[3719,4],[3782,3],[3837,3]]},"109":{"position":[[607,4],[637,4]]},"115":{"position":[[484,3],[541,3]]},"120":{"position":[[2128,3]]},"121":{"position":[[199,4],[824,4],[920,4]]},"122":{"position":[[868,3]]},"123":{"position":[[238,4]]},"124":{"position":[[619,4]]},"125":{"position":[[544,5],[833,4],[992,3],[1104,4]]},"128":{"position":[[274,3],[369,3]]},"129":{"position":[[173,4],[676,4],[1044,5]]},"132":{"position":[[240,3]]},"149":{"position":[[1305,3],[1324,3]]},"150":{"position":[[23,3]]},"160":{"position":[[313,3],[491,4],[638,4],[831,4]]},"161":{"position":[[648,4],[732,4],[825,4]]},"162":{"position":[[814,3],[2296,4]]},"163":{"position":[[23,5],[100,4],[224,3],[338,4]]},"164":{"position":[[407,4],[871,5],[962,5],[1117,4],[1345,3],[1520,5]]},"165":{"position":[[985,4]]},"166":{"position":[[480,4]]},"183":{"position":[[1256,4],[1553,4],[1612,3],[1727,3],[1960,4],[2112,5],[2497,4],[2746,4],[3766,4],[3942,4]]},"190":{"position":[[858,3],[887,4],[1073,5]]},"197":{"position":[[1120,3],[1377,5],[1394,3],[1507,4]]},"207":{"position":[[886,4],[1406,3]]},"208":{"position":[[1318,3]]},"211":{"position":[[246,3]]},"215":{"position":[[73,3]]},"217":{"position":[[1846,4]]},"221":{"position":[[1067,4],[1121,3],[1318,3]]},"222":{"position":[[179,3],[312,4],[366,3],[563,3],[671,3],[813,3],[834,3]]},"223":{"position":[[145,3],[278,4],[332,3],[529,3],[687,3],[881,3]]},"224":{"position":[[198,3],[331,4],[385,3],[582,3],[892,3],[917,3]]},"225":{"position":[[412,3],[462,3]]},"236":{"position":[[2224,4],[3009,4],[3389,4]]},"237":{"position":[[1236,3]]},"239":{"position":[[2209,4]]},"254":{"position":[[528,4],[2140,3],[2163,4],[2226,3],[2268,4],[2394,3]]},"268":{"position":[[888,4],[1114,4],[1204,4]]},"269":{"position":[[513,4],[685,4],[775,4]]},"270":{"position":[[1363,4]]},"277":{"position":[[302,5],[350,3],[612,4]]},"278":{"position":[[941,4],[1070,3],[1167,4]]},"279":{"position":[[1204,4],[1296,3],[1517,4],[1630,4]]},"280":{"position":[[1454,4],[1555,3],[1719,4],[2023,4]]},"281":{"position":[[139,5],[926,4]]},"288":{"position":[[564,3]]},"290":{"position":[[1068,3]]},"295":{"position":[[694,3]]},"296":{"position":[[592,4],[657,4],[826,4],[927,4],[1563,4],[1628,4],[2144,4],[2264,3],[2356,4],[2827,4],[2928,4],[3404,4],[3499,4],[3581,3],[3662,4]]},"299":{"position":[[407,3],[429,3]]},"301":{"position":[[705,3],[734,4],[983,5]]},"306":{"position":[[145,3]]},"307":{"position":[[15,3],[85,3],[1298,4],[1754,4],[2166,4]]},"309":{"position":[[2132,4],[2729,4]]},"314":{"position":[[350,4],[1670,3],[1693,4],[1767,3],[1809,4],[1935,3],[2103,3]]},"319":{"position":[[403,3],[1428,3],[1498,3]]},"326":{"position":[[583,4],[727,4]]},"359":{"position":[[53,3],[142,3],[150,3]]},"367":{"position":[[651,4]]},"370":{"position":[[1921,3],[1933,3]]},"371":{"position":[[417,3],[1272,3]]},"375":{"position":[[334,3],[352,4]]},"377":{"position":[[1165,3],[1188,3],[1246,3],[1273,4]]},"390":{"position":[[576,3],[598,3]]},"392":{"position":[[87,3],[205,3],[256,3]]},"393":{"position":[[210,3]]},"395":{"position":[[755,3],[777,3]]},"397":{"position":[[83,3],[101,3],[194,3],[216,3]]},"398":{"position":[[211,3]]},"406":{"position":[[111,3]]},"408":{"position":[[208,3],[226,3],[315,3],[330,3]]},"415":{"position":[[68,3],[90,3],[300,3],[322,4]]},"417":{"position":[[186,4],[415,3],[514,4],[731,3],[925,3],[1148,4],[1182,4]]},"422":{"position":[[34,3],[49,3]]},"424":{"position":[[73,3],[91,4],[131,3],[152,4]]},"432":{"position":[[961,3],[1059,3]]},"436":{"position":[[1026,4]]},"438":{"position":[[186,4],[415,3],[514,4],[1664,4],[1698,4]]},"452":{"position":[[109,3],[160,3]]},"454":{"position":[[271,3],[293,4],[333,3],[354,4]]},"458":{"position":[[73,3]]},"460":{"position":[[78,3],[96,4]]},"464":{"position":[[80,3],[109,3]]},"466":{"position":[[84,3],[98,4]]},"475":{"position":[[258,3]]},"478":{"position":[[17,4],[209,3],[300,3],[376,3],[478,4],[505,3],[591,3]]},"479":{"position":[[371,3]]},"482":{"position":[[325,3]]},"492":{"position":[[551,3]]},"494":{"position":[[8,3],[88,3]]},"496":{"position":[[79,3],[99,4],[108,3]]},"502":{"position":[[186,4],[220,4],[646,4],[875,3],[974,4]]},"507":{"position":[[83,3]]},"509":{"position":[[73,3],[91,4]]},"543":{"position":[[337,4]]},"545":{"position":[[186,4],[415,3],[514,4],[687,3],[757,4],[791,4],[846,3]]},"546":{"position":[[335,3],[375,3]]},"548":{"position":[[238,5],[1301,3]]},"569":{"position":[[158,4],[269,3]]},"571":{"position":[[227,3],[713,3]]},"573":{"position":[[65,3],[534,3]]},"581":{"position":[[482,4]]},"582":{"position":[[92,3],[213,4],[326,3]]},"584":{"position":[[465,3]]},"591":{"position":[[251,3]]},"594":{"position":[[323,3],[363,3]]},"597":{"position":[[221,3]]},"599":{"position":[[17,4],[209,3],[300,3],[376,3],[478,4],[505,3],[591,3]]},"607":{"position":[[156,4],[268,3]]},"609":{"position":[[53,3],[270,3]]},"611":{"position":[[439,3],[452,3]]},"614":{"position":[[141,4],[252,3]]},"617":{"position":[[179,3],[524,4],[637,3]]},"619":{"position":[[65,3],[439,3]]},"623":{"position":[[72,3]]},"625":{"position":[[72,3],[108,3]]},"629":{"position":[[84,4]]},"637":{"position":[[483,4],[495,3]]},"640":{"position":[[273,5]]},"660":{"position":[[469,3]]},"661":{"position":[[191,3],[314,4],[332,3],[483,3]]},"665":{"position":[[551,3]]},"690":{"position":[[48,3]]},"695":{"position":[[551,3]]},"698":{"position":[[83,3]]},"700":{"position":[[72,3],[106,3]]},"704":{"position":[[77,4]]},"706":{"position":[[73,3],[106,3]]},"731":{"position":[[112,4],[211,3]]},"733":{"position":[[37,3]]},"735":{"position":[[53,3],[324,3],[347,3]]},"752":{"position":[[299,4]]},"753":{"position":[[955,4]]},"767":{"position":[[1935,4]]},"779":{"position":[[221,3]]},"791":{"position":[[252,4]]},"792":{"position":[[1875,4]]},"793":{"position":[[926,4]]},"805":{"position":[[38,3],[155,3],[206,3],[296,4]]},"808":{"position":[[872,4]]},"820":{"position":[[38,3],[155,3],[206,3],[296,4]]},"824":{"position":[[1997,4]]},"836":{"position":[[38,3],[155,3],[206,3],[296,4]]},"840":{"position":[[472,3],[785,3]]},"842":{"position":[[664,3],[677,3],[877,3],[894,3],[3316,3],[3476,3]]},"845":{"position":[[48,3]]},"849":{"position":[[943,3],[1260,3],[1373,3]]},"851":{"position":[[277,3],[290,3],[460,3],[477,3]]},"864":{"position":[[890,4]]},"868":{"position":[[385,3]]},"880":{"position":[[386,3]]},"885":{"position":[[381,3]]},"889":{"position":[[66,3]]},"891":{"position":[[90,3],[109,4]]},"895":{"position":[[539,4]]},"904":{"position":[[1751,4]]},"911":{"position":[[528,3]]},"917":{"position":[[1260,4]]},"918":{"position":[[2043,4]]},"919":{"position":[[2098,4]]},"927":{"position":[[528,3]]},"931":{"position":[[1413,4]]},"938":{"position":[[528,3]]},"954":{"position":[[528,3]]},"965":{"position":[[1260,4]]},"972":{"position":[[528,3]]},"980":{"position":[[14,3]]},"982":{"position":[[81,3],[115,3]]},"989":{"position":[[1121,3]]},"991":{"position":[[363,4]]},"1004":{"position":[[1204,3]]},"1009":{"position":[[426,4]]},"1020":{"position":[[723,4],[1166,4],[1377,4],[1979,4]]},"1021":{"position":[[605,3],[613,3],[1208,4]]},"1040":{"position":[[123,3],[198,4],[231,3]]},"1042":{"position":[[731,4]]},"1043":{"position":[[1395,4]]},"1045":{"position":[[1204,3],[1266,3]]},"1047":{"position":[[35,4],[89,3],[158,3],[253,4],[604,3],[684,4],[781,3],[965,5]]},"1050":{"position":[[123,3],[198,4],[231,3]]},"1051":{"position":[[1657,4]]},"1053":{"position":[[1204,3],[1266,3]]},"1055":{"position":[[35,4],[89,3],[158,3],[253,4],[604,3],[684,4],[781,3],[965,5]]},"1058":{"position":[[123,3],[198,4],[231,3]]},"1059":{"position":[[1450,4]]},"1061":{"position":[[1204,3],[1266,3]]},"1063":{"position":[[35,4],[89,3],[158,3],[253,4],[604,3],[684,4],[781,3],[965,5]]},"1074":{"position":[[42,3]]},"1076":{"position":[[228,3],[243,3]]},"1089":{"position":[[232,3],[281,3]]},"1091":{"position":[[45,3]]},"1094":{"position":[[83,3],[96,3]]},"1101":{"position":[[134,3]]},"1105":{"position":[[144,3]]},"1122":{"position":[[381,3],[403,3]]},"1123":{"position":[[56,5],[127,4],[158,3],[171,4],[657,5],[716,5]]},"1125":{"position":[[83,3],[101,3],[189,3],[211,3]]},"1126":{"position":[[172,3]]},"1138":{"position":[[1211,3],[1223,3]]},"1139":{"position":[[304,3],[1159,3]]},"1140":{"position":[[1565,3]]},"1142":{"position":[[245,3],[267,4]]},"1144":{"position":[[156,3],[170,3],[263,3],[281,3]]},"1149":{"position":[[693,3],[715,4]]},"1151":{"position":[[745,3],[763,3],[875,3],[897,3]]},"1160":{"position":[[408,3],[430,4]]},"1162":{"position":[[90,3],[104,3],[196,3],[214,3]]},"1168":{"position":[[245,3],[267,4]]},"1170":{"position":[[156,3],[170,3],[263,3],[281,3]]},"1176":{"position":[[166,3]]},"1177":{"position":[[380,4],[400,3],[426,4],[435,3]]},"1182":{"position":[[306,5]]},"1183":{"position":[[86,5]]},"1191":{"position":[[308,5]]},"1195":{"position":[[339,4]]},"1196":{"position":[[493,3],[501,3],[578,3]]},"1200":{"position":[[122,4],[193,4],[427,3]]},"1204":{"position":[[248,4],[289,3],[314,3],[573,3],[598,3]]},"1206":{"position":[[76,3],[94,3],[230,3],[245,3]]},"1211":{"position":[[230,3]]},"1218":{"position":[[230,3]]},"1228":{"position":[[278,3],[396,4]]},"1230":{"position":[[369,3]]},"1234":{"position":[[62,5],[102,3],[239,3]]},"1243":{"position":[[437,5],[542,5],[638,5],[1207,4]]},"1245":{"position":[[121,3],[476,4],[589,3]]},"1247":{"position":[[540,3]]},"1250":{"position":[[221,3]]},"1258":{"position":[[287,3],[309,4]]},"1260":{"position":[[544,3],[562,3],[674,3],[696,3]]},"1262":{"position":[[308,5]]},"1272":{"position":[[215,4],[247,3]]},"1274":{"position":[[69,3],[122,3]]},"1277":{"position":[[364,3],[381,3],[451,3],[466,3]]},"1279":{"position":[[161,4],[467,4]]},"1285":{"position":[[1253,3],[1273,3]]},"1286":{"position":[[2425,3]]},"1292":{"position":[[1355,3],[1424,4]]},"1298":{"position":[[145,3],[278,4],[332,3],[529,3],[687,3],[881,3]]},"1300":{"position":[[1253,3],[1273,3]]},"1301":{"position":[[2261,3]]},"1306":{"position":[[1355,3],[1424,4]]},"1316":{"position":[[1565,3]]},"1322":{"position":[[179,3],[312,4],[366,3],[563,3],[671,3],[813,3],[834,3]]},"1324":{"position":[[1253,3],[1273,3]]},"1325":{"position":[[2425,3]]},"1329":{"position":[[1355,3],[1424,4]]},"1335":{"position":[[179,3],[312,4],[366,3],[563,3],[671,3],[813,3],[834,3]]},"1340":{"position":[[1565,3]]},"1346":{"position":[[145,3],[278,4],[332,3],[529,3],[687,3],[881,3]]},"1351":{"position":[[1565,3]]},"1354":{"position":[[52,3],[74,3]]},"1356":{"position":[[81,3],[89,3],[1045,3]]},"1358":{"position":[[289,3]]},"1370":{"position":[[420,3]]},"1379":{"position":[[850,3]]},"1384":{"position":[[95,3],[179,3],[221,3],[267,3],[371,3],[445,3],[508,3],[543,3],[577,3],[716,3],[1128,3],[1189,3]]},"1386":{"position":[[1035,3]]},"1387":{"position":[[564,3],[866,3],[922,3]]},"1389":{"position":[[307,5]]},"1391":{"position":[[65,3],[355,3],[547,3],[824,4],[906,3]]},"1392":{"position":[[241,4],[275,3],[326,3]]},"1403":{"position":[[850,3]]},"1414":{"position":[[850,3]]},"1420":{"position":[[374,3],[435,3]]},"1431":{"position":[[1588,3]]},"1434":{"position":[[1202,4]]},"1443":{"position":[[94,3],[263,4]]},"1444":{"position":[[79,5]]},"1459":{"position":[[51,3],[254,3],[960,3]]},"1461":{"position":[[5049,4],[5701,4]]},"1463":{"position":[[354,4],[477,5],[483,4],[488,6],[630,4],[701,4],[832,4]]},"1464":{"position":[[210,4],[383,5],[389,4],[394,6],[512,4],[554,4],[675,4]]},"1465":{"position":[[505,4],[561,5],[1076,4],[1081,6],[1209,4],[1259,4],[1374,4],[1475,4],[1527,4],[1641,4]]},"1466":{"position":[[169,4],[362,5],[368,4],[373,6],[490,4],[527,4],[623,4]]},"1467":{"position":[[512,4],[891,5],[897,4],[902,6],[1027,4],[1069,4],[1172,4],[1328,4],[1402,4],[1534,4],[1644,4],[1764,3],[1856,4],[1912,4],[1991,3],[2118,3],[2183,4],[2248,4],[2316,5],[2322,4],[2327,6],[2435,3],[2454,4],[2546,4],[2681,3],[2700,4]]},"1474":{"position":[[759,3]]},"1475":{"position":[[1981,4]]},"1476":{"position":[[220,4],[332,5],[338,4],[343,6],[463,4],[521,4],[639,4],[731,4],[814,4],[920,4],[970,3],[1221,3],[1286,4],[1438,4],[1513,4],[1533,5],[1539,4],[1544,6],[1601,3],[1671,3],[1690,4],[1767,4],[1844,4],[1921,4],[2043,3],[2073,4],[2150,4]]},"1477":{"position":[[880,4],[990,4],[1206,4],[1548,5],[1554,4],[1559,6],[1721,4],[1834,4],[1914,4],[2065,4],[2234,4],[2335,4],[2486,4],[2661,3],[2676,4],[2814,4],[2876,3],[3212,4],[3320,4],[3445,5],[3727,5],[3868,5],[3874,4],[3879,6],[4067,4],[4184,4],[4264,4],[4423,4],[4602,4],[4705,4],[4864,4]]}},"keywords":{}}],["key"",{"_index":3515,"title":{},"content":{"392":{"position":[[378,9]]},"393":{"position":[[275,9]]},"398":{"position":[[276,9]]},"1092":{"position":[[275,9]]},"1126":{"position":[[237,9]]}},"keywords":{}}],["key'",{"_index":1722,"title":{},"content":{"129":{"position":[[196,5]]}},"keywords":{}}],["key.obtain",{"_index":5349,"title":{},"content":{"1091":{"position":[[25,10]]}},"keywords":{}}],["key/valu",{"_index":688,"title":{},"content":{"37":{"position":[[190,9]]},"124":{"position":[[146,9]]},"1438":{"position":[[215,9]]}},"keywords":{}}],["key=valu",{"_index":3543,"title":{},"content":{"402":{"position":[[600,11]]}},"keywords":{}}],["key\\n",{"_index":4068,"title":{},"content":{"546":{"position":[[353,5]]},"594":{"position":[[341,5]]}},"keywords":{}}],["key_block_siz",{"_index":6019,"title":{},"content":{"1292":{"position":[[1467,13]]},"1306":{"position":[[1467,13]]},"1329":{"position":[[1467,13]]}},"keywords":{}}],["keyaw",{"_index":3556,"title":{},"content":{"405":{"position":[[16,6],[34,6]]}},"keywords":{}}],["keybegin",{"_index":6678,"title":{},"content":{"1474":{"position":[[156,9],[805,9]]}},"keywords":{}}],["keyboardinterrupt",{"_index":2673,"title":{},"content":{"250":{"position":[[1062,18]]}},"keywords":{}}],["keyconsum",{"_index":4741,"title":{},"content":{"840":{"position":[[2535,11]]},"849":{"position":[[3675,11]]}},"keywords":{}}],["keydur",{"_index":4151,"title":{},"content":{"571":{"position":[[602,9]]}},"keywords":{}}],["keyenvironmentmerch",{"_index":3756,"title":{},"content":{"452":{"position":[[76,22]]}},"keywords":{}}],["keygen",{"_index":2451,"title":{},"content":{"221":{"position":[[1232,6],[1361,6]]},"222":{"position":[[477,6],[606,6]]},"223":{"position":[[443,6],[572,6],[749,6]]},"224":{"position":[[496,6],[625,6]]},"1298":{"position":[[443,6],[572,6],[749,6]]},"1322":{"position":[[477,6],[606,6]]},"1335":{"position":[[477,6],[606,6]]},"1346":{"position":[[443,6],[572,6],[749,6]]}},"keywords":{}}],["keyof",{"_index":5901,"title":{},"content":{"1234":{"position":[[154,5]]}},"keywords":{}}],["keyproject",{"_index":3037,"title":{},"content":{"305":{"position":[[412,15]]}},"keywords":{}}],["keyr",{"_index":6017,"title":{},"content":{"1292":{"position":[[1392,7]]},"1306":{"position":[[1392,7]]},"1329":{"position":[[1392,7]]}},"keywords":{}}],["keyrefresh",{"_index":4946,"title":{},"content":{"894":{"position":[[113,10]]}},"keywords":{}}],["keys<br/>hav",{"_index":6456,"title":{},"content":{"1434":{"position":[[1660,19]]}},"keywords":{}}],["keys<br/>that",{"_index":6455,"title":{},"content":{"1434":{"position":[[1560,19]]}},"keywords":{}}],["keyscreat",{"_index":3558,"title":{},"content":{"406":{"position":[[72,10]]}},"keywords":{}}],["keysreduc",{"_index":1655,"title":{},"content":{"121":{"position":[[698,11]]}},"keywords":{}}],["keysurl",{"_index":3779,"title":{},"content":{"464":{"position":[[209,7]]}},"keywords":{}}],["keyto",{"_index":1489,"title":{},"content":{"105":{"position":[[192,5]]}},"keywords":{}}],["keyword",{"_index":253,"title":{"1200":{"position":[[0,7]]}},"content":{"7":{"position":[[646,7]]},"90":{"position":[[261,8],[392,7]]},"159":{"position":[[74,8],[368,9],[499,8]]},"161":{"position":[[24,7],[436,8]]},"1200":{"position":[[47,7],[256,7],[383,7],[744,7]]},"1465":{"position":[[185,8]]}},"keywords":{}}],["keywordssponsor",{"_index":3466,"title":{},"content":{"381":{"position":[[123,17],[436,17],[471,17]]}},"keywords":{}}],["keyyou'l",{"_index":4303,"title":{},"content":{"609":{"position":[[224,9]]}},"keywords":{}}],["kick",{"_index":2261,"title":{},"content":{"209":{"position":[[45,4]]},"239":{"position":[[2959,4]]},"947":{"position":[[1330,4]]}},"keywords":{}}],["kill",{"_index":6020,"title":{},"content":{"1292":{"position":[[1512,4]]},"1306":{"position":[[1512,4]]},"1329":{"position":[[1512,4]]},"1379":{"position":[[892,4]]},"1403":{"position":[[892,4]]},"1414":{"position":[[892,4]]}},"keywords":{}}],["kind",{"_index":687,"title":{},"content":{"37":{"position":[[129,5]]},"82":{"position":[[51,5]]}},"keywords":{}}],["kinesi",{"_index":3180,"title":{"389":{"position":[[7,7]]}},"content":{"329":{"position":[[452,7]]},"363":{"position":[[402,7]]},"390":{"position":[[57,7],[421,8],[528,7]]},"391":{"position":[[257,7]]},"392":{"position":[[154,8],[320,8],[481,7],[595,7]]},"393":{"position":[[486,7]]}},"keywords":{}}],["kinesis:dev",{"_index":3288,"title":{},"content":{"363":{"position":[[456,11]]},"393":{"position":[[149,11]]}},"keywords":{}}],["kinesisdata",{"_index":3179,"title":{},"content":{"329":{"position":[[416,11]]}},"keywords":{}}],["kingdom",{"_index":1192,"title":{},"content":{"82":{"position":[[3361,7]]},"171":{"position":[[239,7]]}},"keywords":{}}],["kingdom"",{"_index":2394,"title":{},"content":{"210":{"position":[[3473,15]]}},"keywords":{}}],["klaviyo",{"_index":3357,"title":{"702":{"position":[[0,7]]}},"content":{"364":{"position":[[2270,7]]},"703":{"position":[[62,8]]},"704":{"position":[[15,7],[57,7]]},"705":{"position":[[250,7]]},"706":{"position":[[94,7],[372,7]]}},"keywords":{}}],["klaviyo.dev",{"_index":3358,"title":{},"content":{"364":{"position":[[2324,11]]}},"keywords":{}}],["klaviyo:dev",{"_index":4463,"title":{},"content":{"707":{"position":[[90,11]]}},"keywords":{}}],["km",{"_index":1149,"title":{},"content":{"82":{"position":[[595,5],[631,4],[848,4],[957,4],[1495,3],[1764,3],[3115,3],[3291,3],[4088,3]]}},"keywords":{}}],["knob",{"_index":3213,"title":{},"content":{"333":{"position":[[420,4]]}},"keywords":{}}],["know",{"_index":235,"title":{},"content":{"7":{"position":[[273,4]]},"81":{"position":[[236,5]]},"82":{"position":[[2819,5]]},"107":{"position":[[541,4],[3678,4]]},"160":{"position":[[89,5]]},"162":{"position":[[341,4],[613,7],[1855,4]]},"165":{"position":[[782,4]]},"174":{"position":[[478,4]]},"177":{"position":[[85,4]]},"207":{"position":[[1485,4]]},"212":{"position":[[51,4]]},"232":{"position":[[161,4]]},"243":{"position":[[51,4]]},"254":{"position":[[2371,4],[3092,4]]},"257":{"position":[[185,4]]},"278":{"position":[[345,4]]},"279":{"position":[[141,4]]},"281":{"position":[[554,4]]},"296":{"position":[[3345,4]]},"314":{"position":[[1912,4],[2667,4]]},"320":{"position":[[1446,4]]},"448":{"position":[[1149,4]]},"489":{"position":[[791,5]]},"490":{"position":[[159,5]]},"491":{"position":[[213,5]]},"590":{"position":[[1116,4]]},"662":{"position":[[791,5]]},"663":{"position":[[159,5]]},"664":{"position":[[234,5]]},"677":{"position":[[791,5]]},"678":{"position":[[159,5]]},"679":{"position":[[213,5]]},"692":{"position":[[791,5]]},"693":{"position":[[159,5]]},"694":{"position":[[213,5]]},"849":{"position":[[79,4]]},"869":{"position":[[504,5]]},"1382":{"position":[[345,4]]},"1425":{"position":[[86,4]]},"1439":{"position":[[1488,4]]},"1442":{"position":[[1363,4]]},"1444":{"position":[[853,5]]}},"keywords":{}}],["knowledg",{"_index":2617,"title":{},"content":{"241":{"position":[[354,9]]},"1473":{"position":[[256,9]]}},"keywords":{}}],["known",{"_index":1112,"title":{"872":{"position":[[0,5]]}},"content":{"80":{"position":[[528,5]]},"163":{"position":[[246,5],[843,5]]},"165":{"position":[[534,5]]},"250":{"position":[[1146,5]]},"571":{"position":[[904,5]]},"869":{"position":[[1736,5]]},"909":{"position":[[894,5]]},"925":{"position":[[894,5]]},"936":{"position":[[894,5]]},"952":{"position":[[894,5]]},"970":{"position":[[894,5]]},"991":{"position":[[343,5],[492,5]]},"1009":{"position":[[406,5],[555,5]]},"1194":{"position":[[64,5]]},"1232":{"position":[[82,5]]},"1384":{"position":[[125,5]]}},"keywords":{}}],["ksqldb",{"_index":3170,"title":{"325":{"position":[[22,7]]}},"content":{"325":{"position":[[59,6]]}},"keywords":{}}],["kubernet",{"_index":3209,"title":{},"content":{"333":{"position":[[61,10]]}},"keywords":{}}],["l",{"_index":882,"title":{},"content":{"58":{"position":[[360,1],[536,1]]},"105":{"position":[[1560,1],[1602,1]]},"169":{"position":[[601,1],[780,1]]}},"keywords":{}}],["l[lambda",{"_index":1501,"title":{},"content":{"105":{"position":[[1394,10]]}},"keywords":{}}],["label",{"_index":3122,"title":{},"content":{"320":{"position":[[887,5]]},"419":{"position":[[1888,6]]},"441":{"position":[[497,6]]},"504":{"position":[[1517,6]]},"529":{"position":[[355,6]]},"547":{"position":[[1890,6]]},"639":{"position":[[1515,6]]},"849":{"position":[[530,7],[667,7],[841,7]]},"1023":{"position":[[1871,6]]},"1455":{"position":[[214,7]]}},"keywords":{}}],["labelsepics(onli",{"_index":4009,"title":{},"content":{"521":{"position":[[185,16]]}},"keywords":{}}],["labelsorganizationspul",{"_index":4030,"title":{},"content":{"529":{"position":[[902,23]]}},"keywords":{}}],["labelsproject",{"_index":4008,"title":{},"content":{"521":{"position":[[171,13]]}},"keywords":{}}],["lag",{"_index":5226,"title":{},"content":{"1036":{"position":[[848,3]]},"1140":{"position":[[1620,3]]},"1292":{"position":[[1543,3]]},"1306":{"position":[[1543,3]]},"1316":{"position":[[1620,3]]},"1329":{"position":[[1543,3]]},"1340":{"position":[[1620,3]]},"1351":{"position":[[1620,3]]},"1431":{"position":[[1643,3]]}},"keywords":{}}],["lake",{"_index":668,"title":{},"content":{"34":{"position":[[190,5],[220,5],[347,5]]},"77":{"position":[[32,6],[365,5]]},"189":{"position":[[1230,4]]},"207":{"position":[[180,5]]},"239":{"position":[[783,5]]},"329":{"position":[[428,4]]}},"keywords":{}}],["lakea",{"_index":2426,"title":{},"content":{"216":{"position":[[276,5]]}},"keywords":{}}],["lambda",{"_index":956,"title":{"97":{"position":[[4,8]]},"108":{"position":[[0,8]]}},"content":{"64":{"position":[[106,7],[622,7],[650,6]]},"91":{"position":[[129,6]]},"94":{"position":[[2260,6],[2368,7],[2428,9],[2513,7],[2572,7]]},"96":{"position":[[200,7]]},"97":{"position":[[1,7],[188,6],[785,7],[872,8]]},"99":{"position":[[10,6]]},"100":{"position":[[987,6]]},"105":{"position":[[322,8]]},"107":{"position":[[1210,7],[1592,6],[1666,7],[2225,6],[2493,7],[2689,6],[2760,7],[2840,7],[3170,6],[3326,7],[3440,6],[3507,7],[3534,6],[4044,7],[4096,7]]},"108":{"position":[[1,7],[154,7],[251,7],[349,7]]},"112":{"position":[[196,7]]},"113":{"position":[[66,7],[302,7],[546,7],[709,7],[868,6]]},"114":{"position":[[152,7],[299,7]]},"115":{"position":[[131,7],[661,7],[779,7]]},"158":{"position":[[711,6]]},"183":{"position":[[1424,7],[2799,6],[3959,7]]},"254":{"position":[[670,7],[2727,7]]},"268":{"position":[[173,6],[1043,7],[1426,6]]},"271":{"position":[[299,6]]},"277":{"position":[[54,6],[729,7]]},"278":{"position":[[609,6],[1194,7]]},"279":{"position":[[1534,7],[1662,7]]},"280":{"position":[[1736,7],[2043,7]]},"319":{"position":[[636,8]]},"1475":{"position":[[1729,6],[1874,6]]}},"keywords":{}}],["lambdaand",{"_index":2834,"title":{},"content":{"277":{"position":[[1087,9]]}},"keywords":{}}],["land",{"_index":548,"title":{},"content":{"20":{"position":[[852,7]]},"137":{"position":[[36,4]]},"189":{"position":[[850,4]]},"295":{"position":[[1411,6]]}},"keywords":{}}],["landscap",{"_index":701,"title":{},"content":{"38":{"position":[[399,9]]}},"keywords":{}}],["languag",{"_index":1273,"title":{"95":{"position":[[10,10]]}},"content":{"84":{"position":[[989,8]]},"113":{"position":[[188,9]]},"164":{"position":[[309,10]]},"183":{"position":[[301,8]]},"267":{"position":[[459,8],[1174,8]]},"268":{"position":[[41,9]]},"269":{"position":[[48,9]]},"313":{"position":[[3612,8]]},"558":{"position":[[62,8]]},"1140":{"position":[[1669,8]]},"1292":{"position":[[1588,8]]},"1306":{"position":[[1588,8]]},"1316":{"position":[[1669,8]]},"1329":{"position":[[1588,8]]},"1340":{"position":[[1669,8]]},"1351":{"position":[[1669,8]]},"1379":{"position":[[940,8]]},"1403":{"position":[[940,8]]},"1414":{"position":[[940,8]]},"1431":{"position":[[1692,8]]}},"keywords":{}}],["larg",{"_index":540,"title":{"277":{"position":[[10,5]]}},"content":{"20":{"position":[[723,5]]},"21":{"position":[[201,5]]},"110":{"position":[[1396,5]]},"121":{"position":[[1999,5]]},"123":{"position":[[129,5],[345,5]]},"131":{"position":[[39,5]]},"138":{"position":[[2394,5]]},"142":{"position":[[2472,5]]},"180":{"position":[[589,6]]},"182":{"position":[[262,6]]},"183":{"position":[[2529,5]]},"217":{"position":[[1558,5]]},"270":{"position":[[34,7]]},"277":{"position":[[176,5],[444,5],[492,5],[517,5],[570,5],[870,5]]},"281":{"position":[[2955,5]]},"321":{"position":[[1043,5]]},"333":{"position":[[55,5]]},"368":{"position":[[400,5]]},"534":{"position":[[857,5],[942,5]]},"595":{"position":[[1140,5],[1496,5]]},"605":{"position":[[148,6]]},"755":{"position":[[400,5]]},"768":{"position":[[400,5]]},"795":{"position":[[398,5]]},"810":{"position":[[398,5]]},"826":{"position":[[398,5]]},"870":{"position":[[390,5]]},"905":{"position":[[403,5]]},"920":{"position":[[403,5]]},"932":{"position":[[403,5]]},"948":{"position":[[403,5]]},"966":{"position":[[403,5]]},"975":{"position":[[301,5]]},"985":{"position":[[383,5]]},"1000":{"position":[[561,5]]},"1004":{"position":[[174,5]]},"1123":{"position":[[476,5],[734,5]]},"1140":{"position":[[1720,5]]},"1182":{"position":[[239,5]]},"1191":{"position":[[241,5]]},"1262":{"position":[[241,5]]},"1316":{"position":[[1720,5]]},"1340":{"position":[[1720,5]]},"1351":{"position":[[1720,5]]},"1379":{"position":[[984,5]]},"1389":{"position":[[240,5]]},"1391":{"position":[[35,5]]},"1403":{"position":[[984,5]]},"1414":{"position":[[984,5]]},"1431":{"position":[[1743,5]]},"1459":{"position":[[443,7]]}},"keywords":{}}],["larger",{"_index":492,"title":{},"content":{"17":{"position":[[272,6]]},"70":{"position":[[600,6]]},"124":{"position":[[788,7]]},"161":{"position":[[226,6]]},"330":{"position":[[604,6]]},"379":{"position":[[209,6]]},"480":{"position":[[246,6]]},"922":{"position":[[3313,6]]},"1157":{"position":[[107,6]]},"1451":{"position":[[453,6]]}},"keywords":{}}],["largest",{"_index":2102,"title":{},"content":{"189":{"position":[[51,7]]},"377":{"position":[[684,7]]},"1476":{"position":[[77,7]]}},"keywords":{}}],["last",{"_index":1007,"title":{},"content":{"67":{"position":[[906,4],[1500,4],[2070,4]]},"110":{"position":[[1113,4]]},"138":{"position":[[2186,4],[2212,4],[2713,4]]},"141":{"position":[[2142,4],[2168,4],[2306,4]]},"142":{"position":[[2246,4],[2272,4],[2798,4]]},"146":{"position":[[418,4]]},"149":{"position":[[430,4]]},"152":{"position":[[442,4]]},"255":{"position":[[863,4]]},"277":{"position":[[171,4],[487,4]]},"279":{"position":[[198,4]]},"284":{"position":[[630,4]]},"316":{"position":[[1188,4]]},"417":{"position":[[248,4]]},"438":{"position":[[248,4]]},"502":{"position":[[708,4]]},"545":{"position":[[248,4]]},"578":{"position":[[239,4]]},"635":{"position":[[210,4]]},"912":{"position":[[1458,4]]},"1021":{"position":[[1274,4]]},"1140":{"position":[[1766,4]]},"1195":{"position":[[520,4]]},"1292":{"position":[[1626,4]]},"1306":{"position":[[1626,4]]},"1316":{"position":[[1766,4]]},"1329":{"position":[[1626,4]]},"1340":{"position":[[1766,4]]},"1351":{"position":[[1766,4]]},"1370":{"position":[[431,4]]},"1379":{"position":[[1032,4]]},"1403":{"position":[[1032,4]]},"1414":{"position":[[1032,4]]},"1431":{"position":[[1789,4]]},"1434":{"position":[[335,4],[845,4]]},"1438":{"position":[[618,4],[712,4],[747,4]]},"1442":{"position":[[182,4],[1375,4]]},"1448":{"position":[[1070,4]]},"1463":{"position":[[150,5]]},"1471":{"position":[[926,4]]}},"keywords":{}}],["last_nam",{"_index":3606,"title":{},"content":{"418":{"position":[[280,10]]},"439":{"position":[[537,10]]},"546":{"position":[[1017,10]]},"638":{"position":[[309,10]]},"1022":{"position":[[346,10]]}},"keywords":{}}],["last_valu",{"_index":5598,"title":{},"content":{"1140":{"position":[[1812,10]]},"1292":{"position":[[1657,10]]},"1306":{"position":[[1657,10]]},"1316":{"position":[[1812,10]]},"1329":{"position":[[1657,10]]},"1340":{"position":[[1812,10]]},"1351":{"position":[[1812,10]]},"1431":{"position":[[1835,10]]}},"keywords":{}}],["lastcursorvalu",{"_index":3837,"title":{},"content":{"480":{"position":[[1051,16]]}},"keywords":{}}],["lastmodifi",{"_index":1184,"title":{},"content":{"82":{"position":[[2676,13],[4814,13]]}},"keywords":{}}],["lastmodifiedd",{"_index":4804,"title":{},"content":{"843":{"position":[[794,16]]}},"keywords":{}}],["lastwritewin",{"_index":1017,"title":{"1463":{"position":[[19,13]]}},"content":{"67":{"position":[[1978,13]]},"164":{"position":[[1741,13],[2051,13]]},"379":{"position":[[1267,13]]},"1358":{"position":[[896,13]]},"1440":{"position":[[1449,13]]},"1463":{"position":[[19,13],[119,13],[221,13],[449,13]]},"1465":{"position":[[755,13]]},"1477":{"position":[[1522,13],[3688,13]]}},"keywords":{}}],["latenc",{"_index":536,"title":{"578":{"position":[[11,8]]}},"content":{"20":{"position":[[487,8]]},"121":{"position":[[566,7]]},"163":{"position":[[1199,8]]},"180":{"position":[[215,8]]},"198":{"position":[[282,8],[636,7],[718,7]]},"209":{"position":[[803,8]]},"233":{"position":[[584,8]]},"329":{"position":[[378,7]]},"330":{"position":[[84,8]]},"373":{"position":[[904,7]]},"821":{"position":[[264,7]]},"912":{"position":[[275,7]]},"1036":{"position":[[438,7],[626,9]]},"1182":{"position":[[217,7]]},"1191":{"position":[[219,7]]},"1262":{"position":[[219,7]]},"1389":{"position":[[218,7]]}},"keywords":{}}],["latent",{"_index":4212,"title":{},"content":{"578":{"position":[[335,6]]}},"keywords":{}}],["later",{"_index":68,"title":{},"content":{"2":{"position":[[91,5]]},"19":{"position":[[70,5]]},"68":{"position":[[1342,5]]},"88":{"position":[[682,5]]},"115":{"position":[[306,6]]},"162":{"position":[[1928,5]]},"169":{"position":[[355,6]]},"198":{"position":[[415,5]]},"217":{"position":[[1999,6]]},"224":{"position":[[989,6]]},"230":{"position":[[1103,6]]},"290":{"position":[[1469,6]]},"301":{"position":[[1565,6]]},"761":{"position":[[440,5]]},"762":{"position":[[559,5]]},"774":{"position":[[440,5]]},"775":{"position":[[559,5]]},"801":{"position":[[446,5]]},"802":{"position":[[559,5]]},"816":{"position":[[446,5]]},"817":{"position":[[559,5]]},"832":{"position":[[446,5]]},"833":{"position":[[559,5]]},"902":{"position":[[54,5]]},"914":{"position":[[54,5]]},"917":{"position":[[432,6]]},"919":{"position":[[966,6]]},"922":{"position":[[750,5]]},"929":{"position":[[54,6]]},"944":{"position":[[441,5]]},"965":{"position":[[432,6]]},"1077":{"position":[[200,5]]},"1140":{"position":[[1862,7]]},"1192":{"position":[[522,7]]},"1281":{"position":[[125,5]]},"1292":{"position":[[1697,7]]},"1295":{"position":[[125,5]]},"1306":{"position":[[1697,7]]},"1316":{"position":[[1862,7]]},"1319":{"position":[[125,5]]},"1329":{"position":[[1697,7]]},"1340":{"position":[[1862,7]]},"1351":{"position":[[1862,7]]},"1372":{"position":[[125,5]]},"1379":{"position":[[1077,7]]},"1394":{"position":[[788,7]]},"1396":{"position":[[125,5]]},"1403":{"position":[[1077,7]]},"1406":{"position":[[125,5]]},"1414":{"position":[[1077,7]]},"1431":{"position":[[1885,7]]},"1435":{"position":[[540,6]]},"1462":{"position":[[436,5]]}},"keywords":{}}],["latest",{"_index":2608,"title":{},"content":{"240":{"position":[[3307,6],[3442,6]]},"322":{"position":[[1481,6]]},"517":{"position":[[1670,6],[2831,6]]},"760":{"position":[[456,6]]},"773":{"position":[[456,6]]},"800":{"position":[[456,6]]},"815":{"position":[[456,6]]},"831":{"position":[[456,6]]},"869":{"position":[[481,6]]},"897":{"position":[[169,6]]},"922":{"position":[[528,6]]},"1197":{"position":[[71,6]]},"1201":{"position":[[274,6]]},"1207":{"position":[[296,6]]},"1293":{"position":[[274,6]]},"1307":{"position":[[274,6]]},"1317":{"position":[[274,6]]},"1330":{"position":[[274,6]]},"1341":{"position":[[274,6]]},"1352":{"position":[[274,6]]},"1357":{"position":[[146,6]]},"1359":{"position":[[274,6]]},"1380":{"position":[[274,6]]},"1404":{"position":[[274,6]]},"1415":{"position":[[274,6]]},"1432":{"position":[[274,6]]},"1448":{"position":[[633,6]]},"1451":{"position":[[347,6],[549,6],[1000,6]]}},"keywords":{}}],["latitud",{"_index":3205,"title":{},"content":{"332":{"position":[[471,8]]}},"keywords":{}}],["latter",{"_index":4243,"title":{},"content":{"590":{"position":[[984,6]]}},"keywords":{}}],["launch",{"_index":2464,"title":{},"content":{"222":{"position":[[685,6]]},"1322":{"position":[[685,6]]},"1335":{"position":[[685,6]]}},"keywords":{}}],["layer",{"_index":1774,"title":{},"content":{"138":{"position":[[849,6]]},"142":{"position":[[820,6]]}},"keywords":{}}],["layout",{"_index":149,"title":{"4":{"position":[[5,8]]}},"content":{"3":{"position":[[1164,8]]},"4":{"position":[[217,6]]},"77":{"position":[[105,6]]},"322":{"position":[[1727,6]]},"1461":{"position":[[2054,6]]}},"keywords":{}}],["lead",{"_index":4541,"title":{},"content":{"738":{"position":[[140,4],[233,4],[587,6]]},"742":{"position":[[265,5]]},"869":{"position":[[1483,5]]},"1140":{"position":[[1912,4],[1946,7]]},"1146":{"position":[[88,7]]},"1173":{"position":[[88,7]]},"1209":{"position":[[658,7]]},"1215":{"position":[[88,7]]},"1223":{"position":[[88,7]]},"1292":{"position":[[1734,4],[1769,7]]},"1306":{"position":[[1734,4],[1769,7]]},"1316":{"position":[[1912,4],[1946,7]]},"1329":{"position":[[1734,4],[1769,7]]},"1340":{"position":[[1912,4],[1946,7]]},"1351":{"position":[[1912,4],[1946,7]]},"1379":{"position":[[1124,7]]},"1403":{"position":[[1124,7]]},"1414":{"position":[[1124,7]]},"1431":{"position":[[1935,4],[1969,7]]}},"keywords":{}}],["learn",{"_index":284,"title":{},"content":{"9":{"position":[[1,5]]},"16":{"position":[[1358,5]]},"31":{"position":[[321,5]]},"33":{"position":[[438,5]]},"34":{"position":[[888,5]]},"35":{"position":[[342,5]]},"36":{"position":[[473,5]]},"38":{"position":[[677,5]]},"40":{"position":[[382,5]]},"41":{"position":[[695,5]]},"42":{"position":[[731,5]]},"43":{"position":[[431,5]]},"46":{"position":[[181,5]]},"48":{"position":[[336,5]]},"49":{"position":[[548,5]]},"50":{"position":[[307,5]]},"60":{"position":[[348,5],[851,5]]},"69":{"position":[[982,5]]},"70":{"position":[[774,5]]},"76":{"position":[[988,5]]},"77":{"position":[[594,5]]},"85":{"position":[[1,5]]},"115":{"position":[[1566,5]]},"123":{"position":[[815,5]]},"130":{"position":[[395,5]]},"154":{"position":[[1095,5],[1706,5]]},"157":{"position":[[111,5]]},"160":{"position":[[902,5]]},"164":{"position":[[782,5]]},"169":{"position":[[1748,5]]},"176":{"position":[[158,8],[227,5]]},"177":{"position":[[43,8],[240,5]]},"182":{"position":[[488,5]]},"183":{"position":[[2708,5]]},"192":{"position":[[818,5]]},"193":{"position":[[438,5]]},"203":{"position":[[414,5]]},"211":{"position":[[126,7],[780,7]]},"212":{"position":[[211,5]]},"213":{"position":[[468,8]]},"230":{"position":[[887,5]]},"232":{"position":[[130,7],[487,5]]},"236":{"position":[[144,5]]},"241":{"position":[[142,7]]},"243":{"position":[[205,5]]},"252":{"position":[[91,5]]},"254":{"position":[[2000,5]]},"256":{"position":[[19,7]]},"257":{"position":[[102,5]]},"285":{"position":[[472,5]]},"294":{"position":[[98,5]]},"297":{"position":[[19,7]]},"312":{"position":[[98,5]]},"317":{"position":[[19,7]]},"345":{"position":[[185,5]]},"350":{"position":[[127,5]]},"358":{"position":[[127,5]]},"369":{"position":[[127,5]]},"371":{"position":[[1534,5]]},"373":{"position":[[1023,5]]},"376":{"position":[[127,5]]},"386":{"position":[[127,5]]},"391":{"position":[[127,5]]},"393":{"position":[[503,5]]},"396":{"position":[[127,5]]},"398":{"position":[[494,5]]},"407":{"position":[[127,5]]},"416":{"position":[[127,5]]},"418":{"position":[[586,5]]},"423":{"position":[[127,5]]},"431":{"position":[[127,5]]},"433":{"position":[[926,5]]},"437":{"position":[[127,5]]},"447":{"position":[[127,5]]},"453":{"position":[[127,5]]},"459":{"position":[[127,5]]},"465":{"position":[[127,5]]},"472":{"position":[[127,5]]},"481":{"position":[[127,5]]},"495":{"position":[[127,5]]},"497":{"position":[[412,5]]},"501":{"position":[[83,5]]},"508":{"position":[[127,5]]},"516":{"position":[[127,5]]},"518":{"position":[[1674,5]]},"525":{"position":[[127,5]]},"533":{"position":[[127,5]]},"539":{"position":[[127,5]]},"544":{"position":[[127,5]]},"546":{"position":[[1294,5]]},"555":{"position":[[124,5]]},"572":{"position":[[127,5]]},"575":{"position":[[1270,5]]},"583":{"position":[[117,5]]},"584":{"position":[[630,5]]},"592":{"position":[[124,5]]},"600":{"position":[[126,5]]},"610":{"position":[[127,5]]},"618":{"position":[[127,5]]},"620":{"position":[[340,5]]},"624":{"position":[[127,5]]},"630":{"position":[[127,5]]},"636":{"position":[[127,5]]},"646":{"position":[[127,5]]},"653":{"position":[[127,5]]},"655":{"position":[[405,5]]},"669":{"position":[[127,5]]},"684":{"position":[[127,5]]},"699":{"position":[[127,5]]},"705":{"position":[[127,5]]},"711":{"position":[[127,5]]},"719":{"position":[[122,5]]},"727":{"position":[[127,5]]},"734":{"position":[[127,5]]},"736":{"position":[[445,5]]},"740":{"position":[[127,5]]},"746":{"position":[[127,5]]},"754":{"position":[[960,5]]},"756":{"position":[[127,5]]},"758":{"position":[[518,5]]},"769":{"position":[[127,5]]},"771":{"position":[[518,5]]},"781":{"position":[[124,5]]},"794":{"position":[[1166,5]]},"796":{"position":[[128,5]]},"798":{"position":[[516,5]]},"809":{"position":[[1166,5]]},"811":{"position":[[127,5]]},"813":{"position":[[516,5]]},"825":{"position":[[1002,5]]},"827":{"position":[[127,5]]},"829":{"position":[[516,5]]},"841":{"position":[[127,5]]},"850":{"position":[[127,5]]},"858":{"position":[[127,5]]},"866":{"position":[[127,5]]},"878":{"position":[[127,5]]},"884":{"position":[[127,5]]},"890":{"position":[[128,5]]},"896":{"position":[[127,5]]},"906":{"position":[[127,5]]},"908":{"position":[[562,5]]},"921":{"position":[[127,5]]},"924":{"position":[[562,5]]},"933":{"position":[[127,5]]},"935":{"position":[[562,5]]},"945":{"position":[[1104,5]]},"949":{"position":[[127,5]]},"951":{"position":[[562,5]]},"958":{"position":[[127,5]]},"967":{"position":[[127,5]]},"969":{"position":[[562,5]]},"981":{"position":[[127,5]]},"990":{"position":[[127,5]]},"996":{"position":[[127,5]]},"1005":{"position":[[124,5]]},"1014":{"position":[[127,5]]},"1021":{"position":[[127,5]]},"1027":{"position":[[127,5]]},"1033":{"position":[[131,5]]},"1044":{"position":[[127,5]]},"1046":{"position":[[496,5]]},"1052":{"position":[[127,5]]},"1054":{"position":[[496,5]]},"1060":{"position":[[127,5]]},"1062":{"position":[[496,5]]},"1069":{"position":[[127,5]]},"1075":{"position":[[127,5]]},"1084":{"position":[[127,5]]},"1093":{"position":[[127,5]]},"1100":{"position":[[127,5]]},"1106":{"position":[[128,5]]},"1112":{"position":[[127,5]]},"1124":{"position":[[127,5]]},"1132":{"position":[[128,5]]},"1179":{"position":[[913,5]]},"1199":{"position":[[103,5]]},"1227":{"position":[[228,5]]},"1228":{"position":[[243,5]]},"1237":{"position":[[77,5]]},"1252":{"position":[[124,5]]},"1286":{"position":[[1223,5]]},"1301":{"position":[[1059,5]]},"1325":{"position":[[1223,5]]},"1362":{"position":[[74,5]]},"1462":{"position":[[726,5]]}},"keywords":{}}],["leav",{"_index":2120,"title":{},"content":{"190":{"position":[[925,5],[1049,5]]},"191":{"position":[[92,5]]},"206":{"position":[[675,5]]},"239":{"position":[[2847,5]]},"240":{"position":[[3029,5]]},"267":{"position":[[1866,5]]},"295":{"position":[[1255,5]]},"397":{"position":[[1048,5]]},"593":{"position":[[220,5]]},"720":{"position":[[346,5]]},"1196":{"position":[[798,5],[1173,5]]},"1230":{"position":[[688,5]]},"1292":{"position":[[1815,5],[1858,6]]},"1306":{"position":[[1815,5],[1858,6]]},"1329":{"position":[[1815,5],[1858,6]]},"1452":{"position":[[2378,5]]}},"keywords":{}}],["lee",{"_index":2951,"title":{},"content":{"295":{"position":[[413,3]]}},"keywords":{}}],["left",{"_index":1708,"title":{},"content":{"125":{"position":[[1134,4]]},"204":{"position":[[416,4]]},"239":{"position":[[337,4]]},"296":{"position":[[1950,4]]},"310":{"position":[[391,4]]},"314":{"position":[[3024,4]]},"349":{"position":[[43,4],[106,4]]},"436":{"position":[[151,4]]},"479":{"position":[[43,4],[105,4]]},"552":{"position":[[441,4]]},"595":{"position":[[1382,4]]},"747":{"position":[[990,4]]},"757":{"position":[[427,4]]},"770":{"position":[[427,4]]},"785":{"position":[[445,4]]},"797":{"position":[[427,4]]},"812":{"position":[[427,4]]},"828":{"position":[[427,4]]},"842":{"position":[[2744,4]]},"859":{"position":[[624,4]]},"947":{"position":[[53,4]]},"1070":{"position":[[879,4]]},"1092":{"position":[[43,4],[106,4]]},"1140":{"position":[[1983,4]]},"1144":{"position":[[855,4]]},"1170":{"position":[[855,4]]},"1192":{"position":[[530,4]]},"1209":{"position":[[680,4]]},"1267":{"position":[[467,4]]},"1285":{"position":[[489,4]]},"1292":{"position":[[1897,4]]},"1300":{"position":[[489,4]]},"1306":{"position":[[1897,4]]},"1316":{"position":[[1983,4]]},"1324":{"position":[[489,4]]},"1329":{"position":[[1897,4]]},"1340":{"position":[[1983,4]]},"1351":{"position":[[1983,4]]},"1370":{"position":[[444,4]]},"1379":{"position":[[1166,4]]},"1394":{"position":[[807,4]]},"1403":{"position":[[1166,4]]},"1414":{"position":[[1166,4]]},"1423":{"position":[[796,4]]},"1431":{"position":[[2006,4]]},"1434":{"position":[[526,4],[860,4],[1007,4],[1180,4],[1630,4],[2119,4]]},"1459":{"position":[[1517,5]]},"1464":{"position":[[49,4],[788,4]]},"1467":{"position":[[24,4]]},"1476":{"position":[[993,4]]},"1477":{"position":[[339,4]]}},"keywords":{}}],["legaci",{"_index":4100,"title":{},"content":{"550":{"position":[[83,6]]}},"keywords":{}}],["length",{"_index":48,"title":{},"content":{"1":{"position":[[601,6],[706,7]]},"253":{"position":[[3125,7]]},"436":{"position":[[668,7]]},"1144":{"position":[[1018,6]]},"1172":{"position":[[812,6],[895,6]]},"1213":{"position":[[695,6]]},"1222":{"position":[[812,6],[895,6]]}},"keywords":{}}],["length$old",{"_index":2775,"title":{},"content":{"254":{"position":[[777,12],[2834,12],[3495,12]]}},"keywords":{}}],["lengthcohortsev",{"_index":3639,"title":{},"content":{"421":{"position":[[118,19]]}},"keywords":{}}],["less",{"_index":194,"title":{},"content":{"4":{"position":[[801,4]]},"74":{"position":[[803,4]]},"92":{"position":[[824,4]]},"198":{"position":[[233,4]]},"254":{"position":[[1635,4]]},"314":{"position":[[1452,4]]},"343":{"position":[[595,4]]},"577":{"position":[[313,4],[495,4]]},"588":{"position":[[308,4],[490,4]]},"1292":{"position":[[1929,4]]},"1306":{"position":[[1929,4]]},"1329":{"position":[[1929,4]]},"1379":{"position":[[1203,4]]},"1403":{"position":[[1203,4]]},"1414":{"position":[[1203,4]]},"1451":{"position":[[634,4]]}},"keywords":{}}],["let",{"_index":1369,"title":{},"content":{"96":{"position":[[25,4]]},"254":{"position":[[3082,4]]},"280":{"position":[[1046,4]]},"314":{"position":[[2657,4]]},"326":{"position":[[1319,4]]}},"keywords":{}}],["let'",{"_index":2109,"title":{},"content":{"189":{"position":[[314,5]]},"237":{"position":[[194,5]]},"296":{"position":[[7157,5]]},"309":{"position":[[2560,5]]},"313":{"position":[[3533,5]]},"1461":{"position":[[790,5],[2833,5],[4517,5],[4849,5]]}},"keywords":{}}],["letter",{"_index":1342,"title":{},"content":{"94":{"position":[[1170,8]]},"616":{"position":[[292,7]]},"1317":{"position":[[675,7]]},"1341":{"position":[[675,7]]},"1352":{"position":[[675,7]]},"1432":{"position":[[689,7]]}},"keywords":{}}],["let’",{"_index":2220,"title":{},"content":{"204":{"position":[[1,5]]},"207":{"position":[[37,5]]},"210":{"position":[[1,5],[189,5]]},"236":{"position":[[211,5],[1735,5]]},"237":{"position":[[3548,5]]},"239":{"position":[[647,5],[1625,5],[1935,5]]},"240":{"position":[[4351,5]]},"254":{"position":[[971,5]]},"295":{"position":[[858,5]]},"296":{"position":[[949,5],[3668,5]]},"314":{"position":[[692,5],[989,5]]}},"keywords":{}}],["level",{"_index":225,"title":{"7":{"position":[[4,6]]},"285":{"position":[[11,6]]}},"content":{"7":{"position":[[21,5],[64,5],[137,7],[510,5],[576,5],[619,5]]},"26":{"position":[[265,5]]},"27":{"position":[[506,5]]},"48":{"position":[[26,5]]},"60":{"position":[[30,5],[154,5],[1195,5]]},"98":{"position":[[69,5],[1247,5]]},"99":{"position":[[414,5]]},"103":{"position":[[578,5],[699,5]]},"154":{"position":[[1323,5]]},"160":{"position":[[113,5],[254,5]]},"171":{"position":[[169,5]]},"176":{"position":[[197,5]]},"215":{"position":[[154,5]]},"219":{"position":[[99,5]]},"236":{"position":[[2793,5]]},"239":{"position":[[694,6],[1989,5]]},"263":{"position":[[1011,5]]},"264":{"position":[[418,5]]},"274":{"position":[[1856,5]]},"275":{"position":[[452,5],[770,5]]},"285":{"position":[[69,6],[101,7]]},"288":{"position":[[728,6]]},"299":{"position":[[643,6]]},"320":{"position":[[1529,5]]},"343":{"position":[[112,5],[122,6],[272,5],[1178,5]]},"649":{"position":[[188,7]]},"840":{"position":[[1139,6],[1238,6],[1335,6],[1431,6]]},"849":{"position":[[2150,6],[2260,6]]},"917":{"position":[[71,5],[1823,5],[1918,5]]},"965":{"position":[[71,5],[1823,5],[1918,5]]},"1008":{"position":[[1303,5],[1959,5]]},"1140":{"position":[[2006,5]]},"1156":{"position":[[492,5]]},"1178":{"position":[[275,5]]},"1185":{"position":[[219,6]]},"1201":{"position":[[617,5]]},"1268":{"position":[[676,5]]},"1279":{"position":[[196,5]]},"1292":{"position":[[1966,5]]},"1306":{"position":[[1966,5]]},"1316":{"position":[[2006,5]]},"1329":{"position":[[1966,5]]},"1340":{"position":[[2006,5]]},"1351":{"position":[[2006,5]]},"1358":{"position":[[849,5]]},"1379":{"position":[[1255,5]]},"1382":{"position":[[284,6]]},"1403":{"position":[[1255,5]]},"1414":{"position":[[1255,5]]},"1431":{"position":[[2029,5]]},"1461":{"position":[[1901,5],[3121,5]]}},"keywords":{}}],["level"",{"_index":1427,"title":{},"content":{"99":{"position":[[537,12]]}},"keywords":{}}],["leverag",{"_index":784,"title":{},"content":{"50":{"position":[[6,9]]},"84":{"position":[[569,8]]},"158":{"position":[[106,9]]},"197":{"position":[[346,8]]},"216":{"position":[[547,8]]},"268":{"position":[[439,8]]},"320":{"position":[[1145,9]]},"330":{"position":[[139,10]]},"975":{"position":[[224,10]]},"976":{"position":[[236,10]]},"977":{"position":[[622,8]]},"1473":{"position":[[322,8]]}},"keywords":{}}],["lexic",{"_index":5190,"title":{},"content":{"1020":{"position":[[869,9],[922,7],[1484,7],[1912,7],[2100,7]]},"1021":{"position":[[1452,7]]},"1146":{"position":[[115,9]]},"1173":{"position":[[115,9]]},"1215":{"position":[[115,9]]},"1223":{"position":[[115,9]]}},"keywords":{}}],["lexicograph",{"_index":3589,"title":{},"content":{"417":{"position":[[355,13]]},"438":{"position":[[355,13]]},"480":{"position":[[1340,13]]},"502":{"position":[[815,13]]},"545":{"position":[[355,13]]},"1021":{"position":[[1392,13]]}},"keywords":{}}],["lh",{"_index":3002,"title":{},"content":{"296":{"position":[[2040,3]]},"1459":{"position":[[1534,5],[1647,3]]},"1465":{"position":[[838,3],[877,3]]},"1467":{"position":[[114,3],[250,3],[2837,3]]}},"keywords":{}}],["librari",{"_index":1463,"title":{},"content":{"102":{"position":[[284,10]]},"250":{"position":[[187,8]]},"281":{"position":[[2673,10]]}},"keywords":{}}],["licens",{"_index":2036,"title":{},"content":{"175":{"position":[[57,8]]}},"keywords":{}}],["lifecycl",{"_index":240,"title":{},"content":{"7":{"position":[[361,9]]},"34":{"position":[[565,9]]}},"keywords":{}}],["lifetim",{"_index":3113,"title":{},"content":{"319":{"position":[[1578,8]]},"1080":{"position":[[182,8],[272,8],[358,8],[446,8],[563,8]]},"1085":{"position":[[1112,9]]},"1087":{"position":[[198,8]]},"1203":{"position":[[201,8]]}},"keywords":{}}],["lift",{"_index":3029,"title":{},"content":{"296":{"position":[[6638,7]]}},"keywords":{}}],["light",{"_index":1790,"title":{},"content":{"138":{"position":[[1551,5]]},"141":{"position":[[1131,5],[1556,5]]},"142":{"position":[[1568,5]]}},"keywords":{}}],["lightweight",{"_index":2495,"title":{},"content":{"234":{"position":[[415,11]]},"590":{"position":[[69,12]]},"779":{"position":[[66,12]]},"1250":{"position":[[66,12]]}},"keywords":{}}],["like/category=anvils/pivot=00/utc_date=2022",{"_index":153,"title":{},"content":{"4":{"position":[[92,43]]}},"keywords":{}}],["like_regex",{"_index":5609,"title":{},"content":{"1140":{"position":[[2066,10]]},"1316":{"position":[[2066,10]]},"1340":{"position":[[2066,10]]},"1351":{"position":[[2066,10]]},"1379":{"position":[[1363,10]]},"1403":{"position":[[1363,10]]},"1414":{"position":[[1363,10]]},"1431":{"position":[[2089,10]]}},"keywords":{}}],["likeflow_generated/typescript/acmeco/mi",{"_index":1475,"title":{},"content":{"103":{"position":[[509,39]]}},"keywords":{}}],["likelihood",{"_index":4578,"title":{},"content":{"750":{"position":[[326,10]]},"766":{"position":[[326,10]]},"789":{"position":[[360,10]]},"807":{"position":[[360,10]]},"823":{"position":[[360,10]]}},"keywords":{}}],["likepython,javascript",{"_index":1605,"title":{},"content":{"113":{"position":[[198,22]]}},"keywords":{}}],["likeschemastore.org",{"_index":1907,"title":{},"content":{"161":{"position":[[1291,20]]}},"keywords":{}}],["likesnowflakeandbigqueryfor",{"_index":169,"title":{},"content":{"4":{"position":[[459,27]]}},"keywords":{}}],["likevscode'",{"_index":1479,"title":{},"content":{"103":{"position":[[765,12]]}},"keywords":{}}],["likewis",{"_index":3136,"title":{},"content":{"321":{"position":[[358,9]]},"1463":{"position":[[109,9]]}},"keywords":{}}],["limit",{"_index":550,"title":{"379":{"position":[[0,12]]},"559":{"position":[[7,12]]},"872":{"position":[[6,12]]}},"content":{"20":{"position":[[921,5],[1039,7]]},"40":{"position":[[368,12]]},"66":{"position":[[754,6]]},"68":{"position":[[1303,12]]},"72":{"position":[[38,7]]},"313":{"position":[[3184,7]]},"331":{"position":[[241,5]]},"364":{"position":[[231,11]]},"373":{"position":[[1008,11]]},"397":{"position":[[712,5],[718,5]]},"417":{"position":[[1950,5]]},"419":{"position":[[1308,5]]},"440":{"position":[[1324,5]]},"494":{"position":[[181,7]]},"509":{"position":[[287,5]]},"515":{"position":[[296,5],[986,5]]},"545":{"position":[[1552,5]]},"547":{"position":[[1310,5]]},"560":{"position":[[23,12],[92,7],[268,7]]},"577":{"position":[[155,5],[343,12]]},"588":{"position":[[150,5],[338,12]]},"842":{"position":[[1362,5],[1479,5],[2554,5]]},"847":{"position":[[235,10]]},"867":{"position":[[1469,8]]},"870":{"position":[[700,6]]},"900":{"position":[[40,6],[100,7]]},"909":{"position":[[33,6],[125,6]]},"922":{"position":[[2397,5],[2764,5]]},"925":{"position":[[33,6],[125,6]]},"936":{"position":[[33,6],[125,6]]},"946":{"position":[[45,5]]},"952":{"position":[[33,6],[125,6]]},"970":{"position":[[33,6],[125,6]]},"1023":{"position":[[1291,5]]},"1068":{"position":[[35,6],[131,7]]},"1123":{"position":[[399,5]]},"1140":{"position":[[2108,5]]},"1144":{"position":[[582,5]]},"1170":{"position":[[582,5],[920,5],[1051,5]]},"1209":{"position":[[721,5]]},"1213":{"position":[[437,5]]},"1220":{"position":[[437,5],[597,5],[728,5]]},"1243":{"position":[[333,7]]},"1292":{"position":[[2040,5]]},"1306":{"position":[[2040,5]]},"1316":{"position":[[2108,5]]},"1329":{"position":[[2040,5]]},"1340":{"position":[[2108,5]]},"1351":{"position":[[2108,5]]},"1370":{"position":[[461,5]]},"1379":{"position":[[1418,5]]},"1403":{"position":[[1418,5]]},"1414":{"position":[[1418,5]]},"1431":{"position":[[2131,5]]},"1471":{"position":[[711,5]]}},"keywords":{}}],["limit_distinct",{"_index":5875,"title":{},"content":{"1209":{"position":[[752,14]]}},"keywords":{}}],["line",{"_index":642,"title":{"1471":{"position":[[47,5]]}},"content":{"29":{"position":[[148,4]]},"31":{"position":[[22,4]]},"60":{"position":[[1117,4]]},"80":{"position":[[175,4]]},"135":{"position":[[763,4]]},"169":{"position":[[120,5]]},"253":{"position":[[3178,5]]},"254":{"position":[[1316,4],[3660,4]]},"419":{"position":[[2521,4]]},"441":{"position":[[1130,4]]},"486":{"position":[[294,5]]},"504":{"position":[[2150,4]]},"513":{"position":[[296,5]]},"522":{"position":[[303,5]]},"530":{"position":[[303,5]]},"547":{"position":[[2523,4]]},"551":{"position":[[295,5]]},"569":{"position":[[327,5]]},"607":{"position":[[326,5]]},"614":{"position":[[310,5]]},"639":{"position":[[2148,4]]},"650":{"position":[[276,5]]},"658":{"position":[[294,5]]},"674":{"position":[[294,5]]},"689":{"position":[[294,5]]},"716":{"position":[[312,5]]},"731":{"position":[[269,5]]},"1008":{"position":[[1783,5],[1857,4]]},"1023":{"position":[[2504,4]]},"1032":{"position":[[199,5]]},"1073":{"position":[[144,4],[234,4]]},"1292":{"position":[[2116,5]]},"1306":{"position":[[2116,5]]},"1329":{"position":[[2116,5]]},"1383":{"position":[[141,6]]},"1469":{"position":[[124,5]]},"1471":{"position":[[114,5],[1157,4]]}},"keywords":{}}],["linear",{"_index":6032,"title":{},"content":{"1292":{"position":[[2080,6]]},"1306":{"position":[[2080,6]]},"1329":{"position":[[2080,6]]}},"keywords":{}}],["lineend",{"_index":3607,"title":{},"content":{"418":{"position":[[291,11]]},"439":{"position":[[548,11]]},"546":{"position":[[1028,11]]},"638":{"position":[[320,11]]},"1022":{"position":[[357,11]]}},"keywords":{}}],["lineno",{"_index":6310,"title":{},"content":{"1379":{"position":[[1474,6]]},"1403":{"position":[[1474,6]]},"1414":{"position":[[1474,6]]}},"keywords":{}}],["linestr",{"_index":6036,"title":{},"content":{"1292":{"position":[[2153,10]]},"1306":{"position":[[2153,10]]},"1329":{"position":[[2153,10]]}},"keywords":{}}],["link",{"_index":1795,"title":{"1019":{"position":[[28,6]]}},"content":{"138":{"position":[[1778,4],[2585,5]]},"141":{"position":[[1786,4]]},"142":{"position":[[1803,4],[2663,5]]},"240":{"position":[[3760,4]]},"295":{"position":[[1194,6]]},"296":{"position":[[7364,5]]},"323":{"position":[[592,7]]},"478":{"position":[[534,6]]},"486":{"position":[[50,4]]},"553":{"position":[[193,6]]},"554":{"position":[[109,6]]},"599":{"position":[[534,6]]},"615":{"position":[[3,4],[49,4]]},"617":{"position":[[3,4],[49,4],[838,4]]},"619":{"position":[[516,4],[525,4]]},"658":{"position":[[50,4]]},"674":{"position":[[50,4]]},"689":{"position":[[50,4]]},"709":{"position":[[206,4]]},"720":{"position":[[395,6]]},"1019":{"position":[[182,5],[244,5],[345,5]]},"1020":{"position":[[588,5],[671,5]]},"1097":{"position":[[8,6]]},"1479":{"position":[[247,4]]}},"keywords":{}}],["link"",{"_index":1728,"title":{},"content":{"129":{"position":[[1180,11]]}},"keywords":{}}],["linkedin",{"_index":3359,"title":{"714":{"position":[[0,8]]},"717":{"position":[[34,8]]},"722":{"position":[[0,8]]}},"content":{"364":{"position":[[2336,8],[2395,8],[2412,8],[2473,8]]},"716":{"position":[[41,8]]},"717":{"position":[[13,8],[59,8]]},"718":{"position":[[82,8],[180,8],[213,8],[277,8],[404,9]]},"719":{"position":[[245,8]]},"720":{"position":[[628,8],[859,8]]},"721":{"position":[[159,8]]},"723":{"position":[[13,8]]},"724":{"position":[[71,8],[206,8],[346,8],[473,9]]},"725":{"position":[[11,8]]},"726":{"position":[[10,8],[40,8],[199,8],[301,8],[429,8]]},"727":{"position":[[250,8]]},"728":{"position":[[390,8],[508,8]]}},"keywords":{}}],["linkedin'",{"_index":4522,"title":{},"content":{"724":{"position":[[323,10],[715,10]]},"726":{"position":[[110,10]]}},"keywords":{}}],["linksissu",{"_index":4475,"title":{},"content":{"709":{"position":[[311,10]]}},"keywords":{}}],["linux",{"_index":866,"title":{},"content":{"58":{"position":[[32,5],[96,5],[115,5],[316,6],[435,6]]},"169":{"position":[[287,5],[556,6],[676,6],[1107,5]]},"224":{"position":[[819,5]]}},"keywords":{}}],["list",{"_index":230,"title":{},"content":{"7":{"position":[[145,6]]},"60":{"position":[[782,4],[1185,5],[1245,5]]},"61":{"position":[[261,6],[462,4],[647,4],[694,5]]},"68":{"position":[[436,7]]},"84":{"position":[[360,5]]},"87":{"position":[[39,4]]},"122":{"position":[[562,4]]},"138":{"position":[[2564,5]]},"142":{"position":[[2642,5]]},"149":{"position":[[1337,4]]},"154":{"position":[[115,4]]},"190":{"position":[[1626,4]]},"204":{"position":[[489,4]]},"205":{"position":[[142,4]]},"217":{"position":[[1257,4],[1350,4],[1564,4]]},"218":{"position":[[1631,4]]},"228":{"position":[[349,4]]},"230":{"position":[[566,6]]},"238":{"position":[[1007,4]]},"259":{"position":[[676,4]]},"263":{"position":[[72,4],[250,4]]},"264":{"position":[[720,5]]},"270":{"position":[[494,6],[542,4],[594,4]]},"274":{"position":[[817,6],[865,5],[903,4],[1112,4]]},"275":{"position":[[934,4]]},"278":{"position":[[1707,4]]},"301":{"position":[[802,6]]},"328":{"position":[[60,6]]},"341":{"position":[[137,4],[152,4]]},"345":{"position":[[21,4]]},"370":{"position":[[1090,4]]},"374":{"position":[[64,4]]},"377":{"position":[[1618,4]]},"402":{"position":[[438,4]]},"417":{"position":[[214,7],[271,7],[860,8],[1051,8]]},"419":{"position":[[2192,4],[2335,4]]},"429":{"position":[[794,6]]},"438":{"position":[[214,7],[271,7]]},"441":{"position":[[801,4],[944,4]]},"491":{"position":[[327,4]]},"502":{"position":[[674,7],[731,7]]},"504":{"position":[[1821,4],[1964,4]]},"517":{"position":[[805,4],[991,4],[1225,4],[1725,4]]},"520":{"position":[[45,4]]},"529":{"position":[[49,4]]},"534":{"position":[[282,4],[808,5],[1153,4]]},"545":{"position":[[214,7],[271,7]]},"547":{"position":[[2194,4],[2337,4]]},"548":{"position":[[1249,6]]},"556":{"position":[[1415,4]]},"606":{"position":[[30,6]]},"639":{"position":[[1819,4],[1962,4]]},"649":{"position":[[245,4]]},"664":{"position":[[348,4],[583,4]]},"679":{"position":[[327,4]]},"694":{"position":[[327,4]]},"707":{"position":[[197,5]]},"720":{"position":[[294,4]]},"735":{"position":[[454,6]]},"736":{"position":[[195,5]]},"738":{"position":[[654,6]]},"757":{"position":[[1435,4]]},"759":{"position":[[205,4]]},"760":{"position":[[385,5]]},"763":{"position":[[372,4]]},"770":{"position":[[1435,4]]},"772":{"position":[[216,4]]},"773":{"position":[[385,5]]},"776":{"position":[[372,4]]},"782":{"position":[[371,4]]},"797":{"position":[[1435,4]]},"799":{"position":[[203,4]]},"800":{"position":[[385,5]]},"803":{"position":[[378,4]]},"812":{"position":[[1435,4]]},"814":{"position":[[203,4]]},"815":{"position":[[385,5]]},"818":{"position":[[378,4]]},"828":{"position":[[1435,4]]},"830":{"position":[[203,4]]},"831":{"position":[[385,5]]},"834":{"position":[[378,4]]},"838":{"position":[[107,6]]},"840":{"position":[[1263,5],[1826,5]]},"842":{"position":[[2881,4]]},"849":{"position":[[2867,5]]},"867":{"position":[[551,4]]},"904":{"position":[[2076,5]]},"907":{"position":[[873,4]]},"917":{"position":[[785,5],[1585,5]]},"918":{"position":[[2368,5]]},"919":{"position":[[1310,5]]},"922":{"position":[[1768,4]]},"923":{"position":[[873,4]]},"931":{"position":[[1738,5]]},"934":{"position":[[873,4]]},"946":{"position":[[215,4]]},"950":{"position":[[873,4]]},"965":{"position":[[785,5],[1585,5]]},"968":{"position":[[873,4]]},"991":{"position":[[188,6]]},"1009":{"position":[[188,6]]},"1021":{"position":[[1240,7],[1297,7]]},"1023":{"position":[[2175,4],[2318,4]]},"1029":{"position":[[205,5]]},"1045":{"position":[[721,4]]},"1053":{"position":[[721,4]]},"1061":{"position":[[721,4]]},"1118":{"position":[[748,4]]},"1129":{"position":[[192,6]]},"1140":{"position":[[18,4],[266,6],[343,5]]},"1177":{"position":[[347,4]]},"1192":{"position":[[18,4],[163,5],[187,4]]},"1201":{"position":[[26,4],[112,7]]},"1209":{"position":[[16,4]]},"1292":{"position":[[13,4],[195,6],[272,5],[2189,4]]},"1293":{"position":[[26,4],[112,7]]},"1306":{"position":[[13,4],[195,6],[272,5],[2189,4]]},"1307":{"position":[[26,4],[112,7]]},"1316":{"position":[[18,4],[266,6],[343,5]]},"1317":{"position":[[26,4],[112,7]]},"1329":{"position":[[13,4],[195,6],[272,5],[2189,4]]},"1330":{"position":[[26,4],[112,7]]},"1340":{"position":[[18,4],[266,6],[343,5]]},"1341":{"position":[[26,4],[112,7]]},"1351":{"position":[[18,4],[266,6],[343,5]]},"1352":{"position":[[26,4],[112,7]]},"1356":{"position":[[1049,4]]},"1359":{"position":[[26,4],[112,7]]},"1370":{"position":[[14,4],[258,6],[335,5]]},"1379":{"position":[[17,4],[203,6],[280,5]]},"1380":{"position":[[26,4],[112,7]]},"1394":{"position":[[17,4],[162,5],[186,4]]},"1403":{"position":[[17,4],[203,6],[280,5]]},"1404":{"position":[[26,4],[112,7]]},"1414":{"position":[[17,4],[203,6],[280,5]]},"1415":{"position":[[26,4],[112,7]]},"1423":{"position":[[24,4],[169,5],[193,4]]},"1431":{"position":[[41,4],[289,6],[366,5]]},"1432":{"position":[[26,4],[112,7]]},"1448":{"position":[[1018,4]]},"1452":{"position":[[4533,6]]},"1463":{"position":[[539,4]]}},"keywords":{}}],["list.for",{"_index":3828,"title":{},"content":{"479":{"position":[[601,8]]}},"keywords":{}}],["listagg",{"_index":5611,"title":{},"content":{"1140":{"position":[[2146,7]]},"1316":{"position":[[2146,7]]},"1340":{"position":[[2146,7]]},"1351":{"position":[[2146,7]]},"1423":{"position":[[825,7]]},"1431":{"position":[[2169,7]]}},"keywords":{}}],["listscontactscontact",{"_index":4382,"title":{},"content":{"649":{"position":[[223,21]]}},"keywords":{}}],["listshard",{"_index":3506,"title":{},"content":{"390":{"position":[[205,10]]}},"keywords":{}}],["listtabl",{"_index":3524,"title":{},"content":{"395":{"position":[[365,10]]}},"keywords":{}}],["liter",{"_index":1233,"title":{},"content":{"83":{"position":[[1360,7]]}},"keywords":{}}],["littl",{"_index":2237,"title":{},"content":{"207":{"position":[[50,6]]},"237":{"position":[[3400,6]]},"240":{"position":[[2861,6]]},"321":{"position":[[2040,6]]}},"keywords":{}}],["live",{"_index":959,"title":{},"content":{"64":{"position":[[303,4]]},"103":{"position":[[37,5]]},"105":{"position":[[544,5]]},"162":{"position":[[280,5]]},"181":{"position":[[17,4]]},"252":{"position":[[160,5]]},"253":{"position":[[1093,5]]},"255":{"position":[[1024,5]]},"264":{"position":[[638,5]]},"268":{"position":[[1976,4]]},"269":{"position":[[1438,4]]},"270":{"position":[[2054,4]]},"296":{"position":[[5128,4]]},"312":{"position":[[164,5]]},"313":{"position":[[1093,5],[3217,5]]},"315":{"position":[[1212,4]]},"316":{"position":[[1349,5]]},"320":{"position":[[1049,4]]},"1391":{"position":[[957,4]]}},"keywords":{}}],["ln",{"_index":5613,"title":{},"content":{"1140":{"position":[[2184,2]]},"1316":{"position":[[2184,2]]},"1340":{"position":[[2184,2]]},"1351":{"position":[[2184,2]]},"1379":{"position":[[1532,2]]},"1403":{"position":[[1532,2]]},"1414":{"position":[[1532,2]]},"1431":{"position":[[2207,2]]}},"keywords":{}}],["load",{"_index":1943,"title":{"181":{"position":[[0,7]]},"1443":{"position":[[0,5]]}},"content":{"164":{"position":[[1132,4]]},"198":{"position":[[243,4]]},"233":{"position":[[599,4]]},"240":{"position":[[3835,7]]},"243":{"position":[[93,7]]},"321":{"position":[[376,4]]},"532":{"position":[[195,4]]},"842":{"position":[[1583,5],[1603,4],[2940,7],[3535,4],[3574,4],[3672,4],[3714,4],[3759,5]]},"1151":{"position":[[1044,6]]},"1203":{"position":[[420,7]]},"1260":{"position":[[498,6]]},"1292":{"position":[[2218,4]]},"1306":{"position":[[2218,4]]},"1329":{"position":[[2218,4]]},"1379":{"position":[[1582,4]]},"1384":{"position":[[1267,7]]},"1392":{"position":[[21,7]]},"1403":{"position":[[1582,4]]},"1414":{"position":[[1582,4]]},"1434":{"position":[[108,7],[178,9],[959,5],[1197,4],[1312,4],[1549,6],[1730,4]]},"1438":{"position":[[116,4]]},"1439":{"position":[[1659,6]]},"1440":{"position":[[150,5],[704,6]]},"1442":{"position":[[487,4],[556,4],[740,4],[776,5]]},"1443":{"position":[[14,4],[173,4],[227,4],[271,4],[796,4],[860,6],[981,6],[998,7],[1145,4]]},"1451":{"position":[[488,4]]}},"keywords":{}}],["load<a>",{"_index":6448,"title":{},"content":{"1434":{"position":[[1161,13]]}},"keywords":{}}],["load<b>",{"_index":6450,"title":{},"content":{"1434":{"position":[[1263,13]]}},"keywords":{}}],["load<c>",{"_index":6453,"title":{},"content":{"1434":{"position":[[1437,13]]}},"keywords":{}}],["load.if",{"_index":4897,"title":{},"content":{"870":{"position":[[891,7]]}},"keywords":{}}],["load_during_backfil",{"_index":4800,"title":{},"content":{"843":{"position":[[619,21]]}},"keywords":{}}],["load_during_increment",{"_index":4801,"title":{},"content":{"843":{"position":[[647,24]]}},"keywords":{}}],["loaded<a>",{"_index":6452,"title":{},"content":{"1434":{"position":[[1397,15]]}},"keywords":{}}],["loaded<c>",{"_index":6454,"title":{},"content":{"1434":{"position":[[1505,15]]}},"keywords":{}}],["local",{"_index":603,"title":{"62":{"position":[[30,5]]},"263":{"position":[[31,8]]},"270":{"position":[[20,8]]},"272":{"position":[[26,7]]},"274":{"position":[[20,8]]}},"content":{"26":{"position":[[97,5]]},"29":{"position":[[104,5]]},"60":{"position":[[267,5],[534,5],[606,8]]},"61":{"position":[[28,7],[167,5],[547,5],[804,5],[1066,8],[1080,5],[1114,5]]},"63":{"position":[[296,5]]},"74":{"position":[[164,5],[624,7]]},"81":{"position":[[896,5]]},"82":{"position":[[1233,8]]},"88":{"position":[[59,5],[548,7]]},"125":{"position":[[852,7]]},"169":{"position":[[1450,5]]},"179":{"position":[[280,5],[356,8]]},"183":{"position":[[4028,7],[4404,5]]},"221":{"position":[[1509,5]]},"222":{"position":[[191,5]]},"223":{"position":[[157,5],[660,5]]},"224":{"position":[[210,5]]},"229":{"position":[[121,7]]},"260":{"position":[[112,5]]},"262":{"position":[[76,7]]},"264":{"position":[[325,5]]},"266":{"position":[[559,5],[606,7]]},"268":{"position":[[1786,8]]},"269":{"position":[[1243,8]]},"270":{"position":[[23,7],[340,5],[708,7],[1855,8]]},"273":{"position":[[76,7]]},"283":{"position":[[76,7]]},"285":{"position":[[256,5]]},"320":{"position":[[655,5]]},"324":{"position":[[297,5]]},"340":{"position":[[90,5],[140,5],[310,5]]},"429":{"position":[[274,5]]},"988":{"position":[[64,5]]},"1003":{"position":[[64,5]]},"1008":{"position":[[1084,5],[1973,5]]},"1140":{"position":[[2223,5]]},"1228":{"position":[[82,8]]},"1292":{"position":[[2261,5]]},"1298":{"position":[[157,5],[660,5]]},"1306":{"position":[[2261,5]]},"1316":{"position":[[2223,5]]},"1322":{"position":[[191,5]]},"1329":{"position":[[2261,5]]},"1335":{"position":[[191,5]]},"1340":{"position":[[2223,5]]},"1346":{"position":[[157,5],[660,5]]},"1351":{"position":[[2223,5]]},"1379":{"position":[[1635,5]]},"1384":{"position":[[770,8],[971,5]]},"1403":{"position":[[1635,5]]},"1414":{"position":[[1635,5]]},"1431":{"position":[[2246,5]]},"1446":{"position":[[366,8]]},"1452":{"position":[[3272,5]]},"1461":{"position":[[2939,7],[3977,8],[4160,5]]}},"keywords":{}}],["local_infil",{"_index":5969,"title":{},"content":{"1281":{"position":[[283,12],[379,12]]},"1295":{"position":[[283,12],[379,12]]},"1319":{"position":[[283,12],[379,12]]}},"keywords":{}}],["localavail",{"_index":5391,"title":{},"content":{"1110":{"position":[[161,14]]}},"keywords":{}}],["localhost",{"_index":3402,"title":{},"content":{"370":{"position":[[110,9]]},"1138":{"position":[[110,9]]}},"keywords":{}}],["localhost:5432",{"_index":1125,"title":{},"content":{"81":{"position":[[1371,14],[2664,14]]},"238":{"position":[[471,15]]},"1270":{"position":[[149,14]]},"1287":{"position":[[140,14]]},"1302":{"position":[[140,14]]},"1314":{"position":[[143,14]]},"1326":{"position":[[140,14]]},"1338":{"position":[[143,14]]},"1349":{"position":[[143,14]]},"1377":{"position":[[144,14]]},"1401":{"position":[[144,14]]},"1412":{"position":[[144,14]]}},"keywords":{}}],["localhost:9093",{"_index":3683,"title":{},"content":{"433":{"position":[[168,14],[579,14]]}},"keywords":{}}],["localtim",{"_index":5616,"title":{},"content":{"1140":{"position":[[2257,9]]},"1292":{"position":[[2306,9]]},"1306":{"position":[[2306,9]]},"1316":{"position":[[2257,9]]},"1329":{"position":[[2306,9]]},"1340":{"position":[[2257,9]]},"1351":{"position":[[2257,9]]},"1379":{"position":[[1684,9]]},"1394":{"position":[[856,9]]},"1403":{"position":[[1684,9]]},"1414":{"position":[[1684,9]]},"1423":{"position":[[838,9]]},"1431":{"position":[[2280,9]]}},"keywords":{}}],["localtimestam",{"_index":6042,"title":{},"content":{"1292":{"position":[[2347,13]]},"1306":{"position":[[2347,13]]},"1329":{"position":[[2347,13]]},"1379":{"position":[[1739,13]]},"1403":{"position":[[1739,13]]},"1414":{"position":[[1739,13]]}},"keywords":{}}],["localtimestamp",{"_index":5620,"title":{},"content":{"1140":{"position":[[2298,14]]},"1209":{"position":[[778,14]]},"1316":{"position":[[2298,14]]},"1340":{"position":[[2298,14]]},"1351":{"position":[[2298,14]]},"1394":{"position":[[893,14]]},"1423":{"position":[[852,14]]},"1431":{"position":[[2321,14]]}},"keywords":{}}],["locat",{"_index":457,"title":{},"content":{"16":{"position":[[244,9],[287,9],[334,9]]},"37":{"position":[[268,10]]},"69":{"position":[[546,9]]},"71":{"position":[[140,10]]},"72":{"position":[[16,9],[319,10],[362,8],[461,8]]},"73":{"position":[[32,9],[100,9]]},"76":{"position":[[23,9],[573,8],[936,9]]},"83":{"position":[[1123,8]]},"99":{"position":[[100,9]]},"105":{"position":[[201,6]]},"107":{"position":[[482,6],[1291,9]]},"112":{"position":[[728,7]]},"122":{"position":[[288,9],[973,9],[1035,9]]},"123":{"position":[[299,9]]},"129":{"position":[[414,9],[495,9]]},"154":{"position":[[89,10],[1220,9]]},"159":{"position":[[109,8],[974,8]]},"164":{"position":[[197,10]]},"183":{"position":[[817,6],[951,6]]},"189":{"position":[[192,9]]},"228":{"position":[[124,6],[791,8]]},"229":{"position":[[485,8]]},"254":{"position":[[2328,10]]},"259":{"position":[[40,6],[1713,6]]},"267":{"position":[[1207,6]]},"270":{"position":[[359,6],[1700,6]]},"277":{"position":[[1179,9]]},"280":{"position":[[2255,9]]},"291":{"position":[[117,6]]},"296":{"position":[[2025,10],[2217,9],[3286,6]]},"302":{"position":[[117,6]]},"314":{"position":[[1869,10]]},"392":{"position":[[613,8]]},"397":{"position":[[348,8]]},"417":{"position":[[2058,8]]},"438":{"position":[[1155,8]]},"500":{"position":[[174,7]]},"562":{"position":[[241,7]]},"575":{"position":[[621,9]]},"586":{"position":[[643,9]]},"754":{"position":[[582,7]]},"794":{"position":[[788,7]]},"809":{"position":[[788,7]]},"825":{"position":[[624,7]]},"989":{"position":[[1101,6]]},"1004":{"position":[[1184,6]]},"1156":{"position":[[393,7]]},"1179":{"position":[[1181,7]]},"1286":{"position":[[845,7]]},"1289":{"position":[[1433,9]]},"1298":{"position":[[1265,9]]},"1301":{"position":[[681,7]]},"1310":{"position":[[754,9]]},"1322":{"position":[[1652,9]]},"1325":{"position":[[845,7]]},"1335":{"position":[[1300,9]]},"1346":{"position":[[1266,9]]},"1379":{"position":[[1809,7]]},"1403":{"position":[[1809,7]]},"1414":{"position":[[1809,7]]},"1418":{"position":[[241,10]]},"1449":{"position":[[486,9]]},"1463":{"position":[[99,9]]},"1465":{"position":[[127,8]]},"1467":{"position":[[99,10],[725,9],[1717,9]]},"1476":{"position":[[804,9]]},"1477":{"position":[[32,8],[68,8],[1371,9],[3537,9]]}},"keywords":{}}],["location"",{"_index":6411,"title":{},"content":{"1418":{"position":[[285,14]]}},"keywords":{}}],["locations/materi",{"_index":1823,"title":{},"content":{"142":{"position":[[998,21]]}},"keywords":{}}],["locations/sourc",{"_index":1778,"title":{},"content":{"138":{"position":[[1021,16]]}},"keywords":{}}],["locationsship",{"_index":5374,"title":{},"content":{"1096":{"position":[[375,17]]}},"keywords":{}}],["lock",{"_index":5756,"title":{},"content":{"1156":{"position":[[498,4],[657,6],[669,7]]},"1292":{"position":[[2401,4],[2441,6],[2480,5]]},"1306":{"position":[[2401,4],[2441,6],[2480,5]]},"1329":{"position":[[2401,4],[2441,6],[2480,5]]}},"keywords":{}}],["lock.json",{"_index":949,"title":{},"content":{"63":{"position":[[717,10]]}},"keywords":{}}],["lockstep",{"_index":1444,"title":{},"content":{"100":{"position":[[1164,8]]}},"keywords":{}}],["log",{"_index":196,"title":{"5":{"position":[[0,4]]},"6":{"position":[[0,5]]},"7":{"position":[[0,3]]},"9":{"position":[[13,4]]},"21":{"position":[[9,5]]},"117":{"position":[[9,5]]},"284":{"position":[[11,5]]},"285":{"position":[[7,3]]},"1438":{"position":[[9,3]]},"1439":{"position":[[9,3]]},"1468":{"position":[[13,4]]},"1469":{"position":[[10,4]]},"1470":{"position":[[0,4]]},"1471":{"position":[[10,4]]},"1472":{"position":[[10,4]]}},"content":{"6":{"position":[[40,4],[204,5],[300,5],[414,4],[509,4]]},"7":{"position":[[17,3],[89,4],[554,4],[572,3],[615,3]]},"9":{"position":[[31,4]]},"21":{"position":[[526,4],[659,4],[727,4]]},"48":{"position":[[260,4]]},"82":{"position":[[894,6]]},"117":{"position":[[94,5],[173,4],[242,4],[268,4],[314,4],[420,3],[490,4],[563,4]]},"137":{"position":[[10,3]]},"146":{"position":[[1136,5]]},"149":{"position":[[1130,5]]},"152":{"position":[[1120,5]]},"179":{"position":[[153,3]]},"192":{"position":[[579,3]]},"221":{"position":[[434,3],[1475,3]]},"237":{"position":[[3310,4]]},"241":{"position":[[167,3]]},"249":{"position":[[1,3]]},"266":{"position":[[546,3]]},"284":{"position":[[324,4],[423,4],[514,4],[549,4],[602,4]]},"285":{"position":[[9,4],[65,3],[97,3],[502,4]]},"320":{"position":[[410,3],[820,4]]},"321":{"position":[[872,5]]},"322":{"position":[[1029,3]]},"326":{"position":[[652,5],[685,3]]},"338":{"position":[[206,5]]},"343":{"position":[[108,3],[118,3],[268,3]]},"349":{"position":[[1,3]]},"366":{"position":[[198,3]]},"419":{"position":[[1056,3]]},"440":{"position":[[1072,3]]},"472":{"position":[[453,3]]},"479":{"position":[[1,3]]},"499":{"position":[[189,3]]},"504":{"position":[[996,3]]},"547":{"position":[[1057,3]]},"577":{"position":[[601,4]]},"608":{"position":[[173,3]]},"634":{"position":[[181,3]]},"639":{"position":[[994,3]]},"750":{"position":[[129,3]]},"752":{"position":[[885,3]]},"766":{"position":[[129,3]]},"767":{"position":[[2241,3]]},"789":{"position":[[147,3]]},"791":{"position":[[890,3]]},"792":{"position":[[2233,3]]},"807":{"position":[[147,3]]},"823":{"position":[[147,3]]},"824":{"position":[[2355,3]]},"842":{"position":[[2104,3]]},"849":{"position":[[2267,3]]},"864":{"position":[[1425,8],[1494,3]]},"869":{"position":[[20,3],[246,3],[1028,3],[1391,3]]},"895":{"position":[[67,3]]},"903":{"position":[[224,3]]},"909":{"position":[[365,3]]},"915":{"position":[[224,3]]},"922":{"position":[[81,4]]},"925":{"position":[[365,3]]},"930":{"position":[[224,3]]},"936":{"position":[[365,3]]},"952":{"position":[[365,3]]},"963":{"position":[[378,3]]},"970":{"position":[[365,3]]},"1023":{"position":[[1037,3]]},"1082":{"position":[[111,3]]},"1092":{"position":[[1,3]]},"1140":{"position":[[2343,3]]},"1177":{"position":[[67,3]]},"1292":{"position":[[2552,4]]},"1306":{"position":[[2552,4]]},"1316":{"position":[[2343,3]]},"1329":{"position":[[2552,4]]},"1340":{"position":[[2343,3]]},"1351":{"position":[[2343,3]]},"1431":{"position":[[2366,3]]},"1434":{"position":[[583,4],[2173,4]]},"1435":{"position":[[393,4],[764,4]]},"1437":{"position":[[237,3]]},"1438":{"position":[[41,3]]},"1439":{"position":[[30,3],[622,4],[1180,4]]},"1442":{"position":[[229,4],[1213,3]]},"1444":{"position":[[968,3]]},"1469":{"position":[[16,4]]},"1470":{"position":[[26,4],[89,5],[197,5],[266,4],[310,5],[347,4],[429,4],[596,5]]},"1471":{"position":[[13,4],[67,4],[202,4],[268,4],[670,4],[742,4],[1102,4]]},"1472":{"position":[[26,4],[165,4],[209,4],[303,4],[417,4],[558,4],[588,4],[843,4]]}},"keywords":{}}],["log/wordcount",{"_index":6675,"title":{},"content":{"1472":{"position":[[790,14]]}},"keywords":{}}],["log10",{"_index":5625,"title":{},"content":{"1140":{"position":[[2383,5]]},"1316":{"position":[[2383,5]]},"1340":{"position":[[2383,5]]},"1351":{"position":[[2383,5]]},"1431":{"position":[[2406,5]]}},"keywords":{}}],["log_cursor",{"_index":4769,"title":{},"content":{"842":{"position":[[2092,11]]},"843":{"position":[[782,11]]}},"keywords":{}}],["logfil",{"_index":6049,"title":{},"content":{"1292":{"position":[[2513,7]]},"1306":{"position":[[2513,7]]},"1329":{"position":[[2513,7]]}},"keywords":{}}],["logic",{"_index":65,"title":{"16":{"position":[[0,7]]},"942":{"position":[[10,7]]}},"content":{"2":{"position":[[7,7],[786,7]]},"3":{"position":[[1036,7]]},"6":{"position":[[477,9]]},"8":{"position":[[283,9]]},"11":{"position":[[876,7],[1775,7]]},"13":{"position":[[1566,7]]},"14":{"position":[[41,7]]},"16":{"position":[[33,9],[377,7],[597,7],[623,7],[1217,7]]},"48":{"position":[[67,7]]},"68":{"position":[[1148,7]]},"69":{"position":[[776,7]]},"76":{"position":[[83,7],[336,7],[458,7],[616,7],[892,7]]},"106":{"position":[[258,7]]},"123":{"position":[[154,9]]},"162":{"position":[[1753,7]]},"208":{"position":[[1325,7]]},"306":{"position":[[174,7]]},"307":{"position":[[30,7],[185,7]]},"320":{"position":[[1790,7]]},"321":{"position":[[546,7],[1589,7],[1800,7]]},"366":{"position":[[59,7]]},"367":{"position":[[105,7]]},"370":{"position":[[389,7]]},"821":{"position":[[520,7]]},"867":{"position":[[318,7]]},"903":{"position":[[62,7]]},"904":{"position":[[875,7]]},"907":{"position":[[172,7]]},"912":{"position":[[536,7],[1055,5]]},"915":{"position":[[62,7]]},"917":{"position":[[1832,8],[1871,8]]},"918":{"position":[[1084,7]]},"919":{"position":[[687,7],[705,7]]},"922":{"position":[[10,7],[286,7],[861,7]]},"923":{"position":[[172,7]]},"930":{"position":[[62,7]]},"931":{"position":[[847,7]]},"934":{"position":[[172,7]]},"942":{"position":[[10,7],[115,7],[204,8],[245,7],[391,7],[543,7],[585,7],[712,7]]},"950":{"position":[[172,7]]},"965":{"position":[[1832,8],[1871,8]]},"968":{"position":[[172,7]]},"1045":{"position":[[179,7]]},"1053":{"position":[[179,7]]},"1061":{"position":[[179,7]]},"1138":{"position":[[308,7]]},"1151":{"position":[[366,7]]},"1185":{"position":[[117,7]]},"1267":{"position":[[206,7]]},"1285":{"position":[[91,7]]},"1300":{"position":[[91,7]]},"1313":{"position":[[91,7]]},"1324":{"position":[[91,7]]},"1337":{"position":[[91,7]]},"1348":{"position":[[91,7]]},"1376":{"position":[[91,7]]},"1382":{"position":[[137,7]]},"1400":{"position":[[91,7]]},"1411":{"position":[[91,7]]},"1417":{"position":[[187,7]]},"1427":{"position":[[91,7]]},"1459":{"position":[[83,7],[279,7]]}},"keywords":{}}],["login",{"_index":1163,"title":{"552":{"position":[[14,5]]}},"content":{"82":{"position":[[1520,5],[1639,5]]},"169":{"position":[[1499,5]]},"223":{"position":[[636,5],[858,6]]},"340":{"position":[[359,5]]},"367":{"position":[[414,5]]},"436":{"position":[[93,5]]},"471":{"position":[[63,5]]},"472":{"position":[[797,5]]},"552":{"position":[[5,5]]},"556":{"position":[[1810,5]]},"757":{"position":[[166,5],[267,5]]},"770":{"position":[[166,5],[267,5]]},"797":{"position":[[166,5],[267,5]]},"812":{"position":[[166,5],[267,5]]},"828":{"position":[[166,5],[267,5]]},"931":{"position":[[1176,5]]},"1034":{"position":[[389,5],[466,5]]},"1042":{"position":[[202,5],[276,5]]},"1043":{"position":[[866,5],[940,5]]},"1051":{"position":[[1128,5],[1202,5]]},"1059":{"position":[[917,5],[995,5]]},"1298":{"position":[[636,5],[858,6]]},"1346":{"position":[[636,5],[858,6]]},"1373":{"position":[[1045,5],[1127,5]]},"1374":{"position":[[1045,5],[1131,5]]},"1397":{"position":[[824,5],[906,5]]},"1398":{"position":[[823,5],[909,5]]},"1408":{"position":[[143,5],[225,5]]},"1409":{"position":[[807,5],[889,5]]}},"keywords":{}}],["login_customer_id",{"_index":4105,"title":{},"content":{"552":{"position":[[233,17]]},"556":{"position":[[1791,18]]},"557":{"position":[[381,18]]}},"keywords":{}}],["loglevel",{"_index":257,"title":{},"content":{"7":{"position":[[749,9]]},"285":{"position":[[384,9]]},"343":{"position":[[98,9]]},"344":{"position":[[364,9]]}},"keywords":{}}],["logmin",{"_index":4855,"title":{},"content":{"864":{"position":[[972,9],[1291,9]]},"867":{"position":[[1338,9]]},"869":{"position":[[262,9],[600,9],[899,8],[1089,8]]},"872":{"position":[[71,9]]}},"keywords":{}}],["logo",{"_index":6282,"title":{},"content":{"1362":{"position":[[755,4]]}},"keywords":{}}],["logo_emoji",{"_index":6281,"title":{},"content":{"1362":{"position":[[743,11]]},"1363":{"position":[[364,11]]}},"keywords":{}}],["logsbrandscustom",{"_index":5445,"title":{},"content":{"1128":{"position":[[115,16]]}},"keywords":{}}],["logsto",{"_index":567,"title":{},"content":{"21":{"position":[[454,6]]}},"keywords":{}}],["long",{"_index":369,"title":{},"content":{"12":{"position":[[433,4]]},"20":{"position":[[238,4]]},"26":{"position":[[251,4]]},"72":{"position":[[493,4]]},"74":{"position":[[562,4]]},"76":{"position":[[801,4]]},"89":{"position":[[178,4]]},"105":{"position":[[539,4]]},"124":{"position":[[1048,4]]},"129":{"position":[[466,4]]},"193":{"position":[[239,4]]},"267":{"position":[[1894,5]]},"323":{"position":[[1183,4]]},"337":{"position":[[270,4]]},"410":{"position":[[266,4]]},"752":{"position":[[133,4]]},"757":{"position":[[1297,4]]},"770":{"position":[[1297,4]]},"785":{"position":[[597,4]]},"791":{"position":[[86,4]]},"797":{"position":[[1297,4]]},"812":{"position":[[1297,4]]},"828":{"position":[[1297,4]]},"842":{"position":[[2796,4]]},"867":{"position":[[2005,4]]},"922":{"position":[[1004,4],[1354,4],[2846,4],[2954,4]]},"1047":{"position":[[43,4]]},"1055":{"position":[[43,4]]},"1063":{"position":[[43,4]]},"1085":{"position":[[652,4]]},"1164":{"position":[[276,4],[475,4]]},"1183":{"position":[[482,4]]},"1209":{"position":[[817,4]]},"1292":{"position":[[2592,4]]},"1306":{"position":[[2592,4]]},"1329":{"position":[[2592,4]]},"1439":{"position":[[380,4]]},"1442":{"position":[[949,4]]},"1459":{"position":[[632,4]]}},"keywords":{}}],["longblob",{"_index":6052,"title":{},"content":{"1292":{"position":[[2631,8]]},"1306":{"position":[[2631,8]]},"1329":{"position":[[2631,8]]}},"keywords":{}}],["longer",{"_index":449,"title":{},"content":{"16":{"position":[[82,6]]},"20":{"position":[[502,6],[768,6],[975,6]]},"117":{"position":[[509,6]]},"872":{"position":[[24,6]]},"911":{"position":[[545,6]]},"922":{"position":[[2545,6]]},"927":{"position":[[545,6]]},"938":{"position":[[545,6]]},"954":{"position":[[545,6]]},"972":{"position":[[545,6]]},"1036":{"position":[[790,7]]},"1467":{"position":[[397,7]]}},"keywords":{}}],["longtext",{"_index":6053,"title":{},"content":{"1292":{"position":[[2669,8]]},"1306":{"position":[[2669,8]]},"1329":{"position":[[2669,8]]}},"keywords":{}}],["look",{"_index":357,"title":{},"content":{"12":{"position":[[114,5]]},"14":{"position":[[423,5],[651,4],[853,4]]},"82":{"position":[[4945,5]]},"98":{"position":[[612,5]]},"165":{"position":[[958,4]]},"177":{"position":[[162,7],[297,7]]},"183":{"position":[[1112,4],[4147,4],[4275,5]]},"207":{"position":[[859,4]]},"210":{"position":[[75,5],[202,4],[375,4],[619,5]]},"217":{"position":[[1336,4],[1704,4]]},"221":{"position":[[622,4],[1015,4]]},"222":{"position":[[260,4]]},"223":{"position":[[226,4]]},"224":{"position":[[279,4]]},"228":{"position":[[365,4]]},"236":{"position":[[224,4],[1754,4],[2558,4]]},"239":{"position":[[1570,5],[1638,4]]},"240":{"position":[[2760,4],[4239,4],[4397,6],[4407,5]]},"263":{"position":[[400,7],[924,4]]},"268":{"position":[[740,5]]},"269":{"position":[[365,5]]},"295":{"position":[[960,7],[1301,4]]},"296":{"position":[[962,4],[4203,4],[5188,4],[6957,4],[7484,5]]},"314":{"position":[[1032,4]]},"315":{"position":[[682,4],[1273,4]]},"371":{"position":[[35,4]]},"393":{"position":[[35,4]]},"398":{"position":[[35,4]]},"552":{"position":[[149,4],[425,4]]},"758":{"position":[[35,4]]},"771":{"position":[[35,4]]},"798":{"position":[[35,4]]},"813":{"position":[[35,4]]},"829":{"position":[[35,4]]},"840":{"position":[[346,4],[398,4]]},"849":{"position":[[289,4],[341,4]]},"865":{"position":[[76,4]]},"877":{"position":[[76,4]]},"908":{"position":[[35,4]]},"924":{"position":[[35,4]]},"935":{"position":[[35,4]]},"947":{"position":[[395,4],[1207,4]]},"951":{"position":[[35,4]]},"969":{"position":[[35,4]]},"1015":{"position":[[204,4]]},"1031":{"position":[[708,4]]},"1077":{"position":[[365,4]]},"1113":{"position":[[390,4]]},"1183":{"position":[[1080,5],[1532,5]]},"1208":{"position":[[283,4]]},"1232":{"position":[[456,4]]},"1298":{"position":[[226,4]]},"1322":{"position":[[260,4]]},"1335":{"position":[[260,4]]},"1346":{"position":[[226,4]]},"1358":{"position":[[187,4]]},"1429":{"position":[[758,4]]},"1461":{"position":[[796,4],[1943,4],[3500,4],[3701,4],[4855,4]]}},"keywords":{}}],["lookback",{"_index":3969,"title":{"1077":{"position":[[29,8]]}},"content":{"517":{"position":[[3135,8]]},"578":{"position":[[200,8]]},"747":{"position":[[276,8]]},"1015":{"position":[[156,8]]},"1076":{"position":[[371,8]]},"1077":{"position":[[276,8],[547,8],[686,8]]},"1113":{"position":[[349,8]]}},"keywords":{}}],["lookback_window",{"_index":5184,"title":{},"content":{"1015":{"position":[[131,16]]},"1016":{"position":[[233,16]]},"1113":{"position":[[332,16]]},"1114":{"position":[[206,16]]}},"keywords":{}}],["lookback_window_day",{"_index":5291,"title":{},"content":{"1076":{"position":[[349,21]]}},"keywords":{}}],["lookup",{"_index":4519,"title":{},"content":{"723":{"position":[[171,6]]}},"keywords":{}}],["lookupfollow",{"_index":4535,"title":{},"content":{"729":{"position":[[14,14]]}},"keywords":{}}],["loop",{"_index":6056,"title":{},"content":{"1292":{"position":[[2717,4]]},"1306":{"position":[[2717,4]]},"1329":{"position":[[2717,4]]},"1434":{"position":[[2225,5]]},"1444":{"position":[[1019,5]]},"1472":{"position":[[509,4],[893,5]]}},"keywords":{}}],["loos",{"_index":1920,"title":{},"content":{"162":{"position":[[1414,7]]},"165":{"position":[[472,7]]}},"keywords":{}}],["lose",{"_index":1197,"title":{},"content":{"82":{"position":[[3612,4]]},"1204":{"position":[[670,4]]}},"keywords":{}}],["loss",{"_index":3035,"title":{"411":{"position":[[5,4]]}},"content":{"305":{"position":[[264,4]]},"411":{"position":[[276,5]]}},"keywords":{}}],["lossi",{"_index":1084,"title":{},"content":{"74":{"position":[[808,5]]}},"keywords":{}}],["lost",{"_index":4660,"title":{},"content":{"764":{"position":[[471,4]]},"777":{"position":[[471,4]]},"804":{"position":[[469,4]]},"819":{"position":[[469,4]]},"835":{"position":[[469,4]]},"1230":{"position":[[682,5]]}},"keywords":{}}],["lot",{"_index":1737,"title":{},"content":{"133":{"position":[[18,3]]},"182":{"position":[[229,3]]},"208":{"position":[[298,3]]},"281":{"position":[[2978,3]]},"314":{"position":[[1448,3]]},"319":{"position":[[274,3]]},"324":{"position":[[697,4]]},"325":{"position":[[204,3]]},"821":{"position":[[950,3]]}},"keywords":{}}],["low",{"_index":774,"title":{},"content":{"48":{"position":[[22,3]]},"121":{"position":[[562,3]]},"329":{"position":[[374,3]]},"480":{"position":[[1575,4]]},"764":{"position":[[171,3]]},"777":{"position":[[171,3]]},"804":{"position":[[169,3]]},"819":{"position":[[169,3]]},"835":{"position":[[169,3]]},"922":{"position":[[2755,3]]},"1356":{"position":[[811,3]]}},"keywords":{}}],["low_prior",{"_index":6057,"title":{},"content":{"1292":{"position":[[2755,12]]},"1306":{"position":[[2755,12]]},"1329":{"position":[[2755,12]]}},"keywords":{}}],["lower",{"_index":1348,"title":{},"content":{"94":{"position":[[1545,5]]},"111":{"position":[[622,5]]},"120":{"position":[[1097,5]]},"198":{"position":[[275,6]]},"233":{"position":[[578,5],[593,5]]},"330":{"position":[[650,5]]},"343":{"position":[[855,5]]},"480":{"position":[[1461,5],[1680,5]]},"750":{"position":[[235,5]]},"752":{"position":[[935,6]]},"766":{"position":[[235,5]]},"789":{"position":[[269,5]]},"791":{"position":[[969,6]]},"807":{"position":[[269,5]]},"821":{"position":[[258,5]]},"823":{"position":[[269,5]]},"870":{"position":[[808,8]]},"912":{"position":[[269,5]]},"1036":{"position":[[612,5]]},"1140":{"position":[[2421,5]]},"1316":{"position":[[2421,5]]},"1340":{"position":[[2421,5]]},"1351":{"position":[[2421,5]]},"1379":{"position":[[1877,5]]},"1403":{"position":[[1877,5]]},"1414":{"position":[[1877,5]]},"1431":{"position":[[2444,5]]},"1480":{"position":[[803,5]]}},"keywords":{}}],["lowercas",{"_index":5753,"title":{},"content":{"1155":{"position":[[220,10]]},"1317":{"position":[[701,10]]},"1341":{"position":[[701,10]]},"1352":{"position":[[701,10]]},"1432":{"position":[[715,10]]}},"keywords":{}}],["lowest",{"_index":3437,"title":{},"content":{"373":{"position":[[897,6]]}},"keywords":{}}],["lr",{"_index":305,"title":{},"content":{"11":{"position":[[424,3]]},"23":{"position":[[133,3],[274,3]]},"32":{"position":[[368,3]]},"61":{"position":[[1162,3]]},"92":{"position":[[414,3],[485,3],[683,3]]},"105":{"position":[[1337,3]]},"107":{"position":[[817,3]]},"137":{"position":[[283,3]]},"189":{"position":[[1372,3]]}},"keywords":{}}],["lsn",{"_index":5053,"title":{},"content":{"922":{"position":[[409,4]]}},"keywords":{}}],["lt",{"_index":4764,"title":{},"content":{"842":{"position":[[1662,5]]}},"keywords":{}}],["lt;=>",{"_index":6468,"title":{},"content":{"1434":{"position":[[2263,9]]}},"keywords":{}}],["lt;access_key_id>",{"_index":5727,"title":{},"content":{"1145":{"position":[[160,21]]},"1163":{"position":[[152,21]]},"1171":{"position":[[164,21]]},"1261":{"position":[[236,21]]}},"keywords":{}}],["lt;account",{"_index":3816,"title":{},"content":{"477":{"position":[[726,11]]},"632":{"position":[[122,11]]}},"keywords":{}}],["lt;br/>",{"_index":6439,"title":{},"content":{"1434":{"position":[[473,14]]}},"keywords":{}}],["lt;bucket",{"_index":4085,"title":{},"content":{"548":{"position":[[825,10]]}},"keywords":{}}],["lt;credentialsjson>",{"_index":5885,"title":{},"content":{"1214":{"position":[[162,23]]},"1221":{"position":[[166,23]]}},"keywords":{}}],["lt;database>",{"_index":5242,"title":{},"content":{"1042":{"position":[[62,17]]},"1043":{"position":[[726,17]]},"1051":{"position":[[982,17]]},"1059":{"position":[[746,17],[834,19]]},"1303":{"position":[[1567,18]]},"1373":{"position":[[964,17]]},"1374":{"position":[[964,17]]},"1397":{"position":[[743,17]]},"1398":{"position":[[742,17]]},"1408":{"position":[[62,17]]},"1409":{"position":[[726,17]]}},"keywords":{}}],["lt;domain>",{"_index":4507,"title":{},"content":{"713":{"position":[[140,14]]}},"keywords":{}}],["lt;email>",{"_index":4508,"title":{},"content":{"713":{"position":[[162,13]]}},"keywords":{}}],["lt;engin",{"_index":5860,"title":{},"content":{"1206":{"position":[[426,10]]}},"keywords":{}}],["lt;full/collect",{"_index":1027,"title":{},"content":{"68":{"position":[[785,19]]}},"keywords":{}}],["lt;full\\path\\to\\flow.yaml>",{"_index":2486,"title":{},"content":{"229":{"position":[[632,30]]}},"keywords":{}}],["lt;id>",{"_index":3764,"title":{},"content":{"455":{"position":[[150,10]]}},"keywords":{}}],["lt;key>",{"_index":3765,"title":{},"content":{"455":{"position":[[174,11],[198,11]]},"467":{"position":[[117,11]]},"852":{"position":[[161,11],[216,11]]}},"keywords":{}}],["lt;motherduck_service_token>",{"_index":5923,"title":{},"content":{"1261":{"position":[[140,32]]}},"keywords":{}}],["lt;n>daysago",{"_index":4219,"title":{},"content":{"584":{"position":[[750,17]]}},"keywords":{}}],["lt;origin",{"_index":4093,"title":{},"content":{"548":{"position":[[1383,10]]}},"keywords":{}}],["lt;other_schema>",{"_index":5036,"title":{},"content":{"917":{"position":[[635,20],[764,20]]},"965":{"position":[[635,20],[764,20]]}},"keywords":{}}],["lt;other_tables>",{"_index":4999,"title":{},"content":{"904":{"position":[[2025,21],[2055,20]]},"917":{"position":[[1534,21],[1564,20]]},"918":{"position":[[2317,21],[2347,20]]},"919":{"position":[[2372,21]]},"931":{"position":[[1687,21],[1717,20]]},"965":{"position":[[1534,21],[1564,20]]}},"keywords":{}}],["lt;others>",{"_index":5041,"title":{},"content":{"919":{"position":[[1172,14],[1295,14],[1818,14]]}},"keywords":{}}],["lt;past",{"_index":2785,"title":{},"content":{"263":{"position":[[207,9],[745,9]]},"267":{"position":[[2045,9]]},"270":{"position":[[307,9]]},"274":{"position":[[605,9]]},"284":{"position":[[116,9]]}},"keywords":{}}],["lt;pollinginterval>",{"_index":5030,"title":{},"content":{"912":{"position":[[1565,23]]}},"keywords":{}}],["lt;prefix",{"_index":944,"title":{},"content":{"63":{"position":[[498,10]]}},"keywords":{}}],["lt;role>",{"_index":5087,"title":{},"content":{"943":{"position":[[787,12]]}},"keywords":{}}],["lt;schema>.<table>",{"_index":3416,"title":{},"content":{"370":{"position":[[1422,30]]},"757":{"position":[[861,30]]},"770":{"position":[[861,30]]},"797":{"position":[[861,30]]},"812":{"position":[[861,30]]},"828":{"position":[[861,30]]},"907":{"position":[[1205,30]]},"923":{"position":[[1205,30]]},"934":{"position":[[1205,30]]},"950":{"position":[[1205,30]]},"968":{"position":[[1205,30]]},"1045":{"position":[[932,30]]},"1053":{"position":[[932,30]]},"1061":{"position":[[932,30]]}},"keywords":{}}],["lt;schema>.t",{"_index":4865,"title":{},"content":{"867":{"position":[[762,22]]}},"keywords":{}}],["lt;secret>",{"_index":3277,"title":{},"content":{"360":{"position":[[125,14],[149,14]]},"378":{"position":[[132,14],[163,14]]},"388":{"position":[[280,14]]},"425":{"position":[[121,14],[148,14]]},"449":{"position":[[276,14]]},"461":{"position":[[126,14]]},"497":{"position":[[138,14]]},"518":{"position":[[204,14]]},"541":{"position":[[145,14]]},"575":{"position":[[269,14]]},"586":{"position":[[233,14]]},"612":{"position":[[247,14]]},"620":{"position":[[169,14]]},"626":{"position":[[121,14]]},"647":{"position":[[173,14]]},"655":{"position":[[179,14]]},"671":{"position":[[161,14],[190,14]]},"686":{"position":[[185,14]]},"701":{"position":[[119,14]]},"707":{"position":[[119,14]]},"736":{"position":[[150,14]]},"742":{"position":[[121,14],[151,14]]},"852":{"position":[[190,14],[242,14]]},"886":{"position":[[132,14],[162,14],[210,14]]},"892":{"position":[[134,14]]},"960":{"position":[[125,14]]},"983":{"position":[[119,14]]},"998":{"position":[[121,14]]},"1022":{"position":[[143,14],[168,14]]},"1078":{"position":[[144,14]]},"1108":{"position":[[141,14]]},"1114":{"position":[[158,14]]},"1134":{"position":[[141,14]]},"1180":{"position":[[209,14]]},"1248":{"position":[[191,14]]}},"keywords":{}}],["lt;secret_access_key>",{"_index":5728,"title":{},"content":{"1145":{"position":[[202,25]]},"1163":{"position":[[197,25]]},"1171":{"position":[[206,25]]},"1261":{"position":[[278,25]]}},"keywords":{}}],["lt;task",{"_index":2910,"title":{},"content":{"284":{"position":[[336,8]]},"1475":{"position":[[833,9],[956,9],[1119,9],[1216,9],[1286,9]]}},"keywords":{}}],["lt;tbl1",{"_index":5099,"title":{},"content":{"945":{"position":[[171,9]]}},"keywords":{}}],["lt;token>",{"_index":3751,"title":{},"content":{"449":{"position":[[306,13],[337,13]]},"713":{"position":[[118,13]]}},"keywords":{}}],["lt;url>",{"_index":3780,"title":{},"content":{"467":{"position":[[167,11]]}},"keywords":{}}],["lt;your",{"_index":3774,"title":{},"content":{"461":{"position":[[147,8],[215,8]]},"671":{"position":[[123,8]]},"742":{"position":[[211,8]]},"852":{"position":[[123,8]]},"998":{"position":[[150,8],[185,8]]},"1114":{"position":[[122,8]]}},"keywords":{}}],["lt;your_collection_id>",{"_index":2971,"title":{},"content":{"295":{"position":[[1868,26]]}},"keywords":{}}],["lt;your_dataset>.<your_schema>.<your_table>",{"_index":5800,"title":{},"content":{"1183":{"position":[[969,60],[1134,60],[1356,59]]}},"keywords":{}}],["lt;your_dataset>.<your_schema>.<your_table>_copi",{"_index":5798,"title":{},"content":{"1183":{"position":[[848,64],[1421,65],[1601,65]]}},"keywords":{}}],["lt;your_openai_api_key>",{"_index":5960,"title":{},"content":{"1278":{"position":[[238,27]]}},"keywords":{}}],["lt;your_partitioning>",{"_index":5799,"title":{},"content":{"1183":{"position":[[926,25]]}},"keywords":{}}],["lt;your_password_here>",{"_index":4849,"title":{},"content":{"864":{"position":[[233,27]]},"876":{"position":[[233,27]]}},"keywords":{}}],["lt;your_pinecone_api_key>",{"_index":5959,"title":{},"content":{"1278":{"position":[[194,29]]}},"keywords":{}}],["lt;your_table>",{"_index":5803,"title":{},"content":{"1183":{"position":[[1248,18],[1322,19],[1513,18]]}},"keywords":{}}],["lt;your_table>_copi",{"_index":5801,"title":{},"content":{"1183":{"position":[[1056,23],[1216,23],[1558,23]]}},"keywords":{}}],["lt;your_token>",{"_index":5909,"title":{},"content":{"1241":{"position":[[282,18]]}},"keywords":{}}],["lt;yourorg/full/collectionname>",{"_index":2485,"title":{},"content":{"229":{"position":[[179,35],[676,35]]}},"keywords":{}}],["lurk",{"_index":2339,"title":{},"content":{"210":{"position":[[2548,7]]}},"keywords":{}}],["lww",{"_index":6640,"title":{},"content":{"1463":{"position":[[289,3],[422,4],[611,3],[674,4],[745,4],[813,3],[876,4]]}},"keywords":{}}],["ly",{"_index":6501,"title":{},"content":{"1442":{"position":[[1552,2]]}},"keywords":{}}],["m",{"_index":2452,"title":{},"content":{"221":{"position":[[1240,1],[1388,1]]},"222":{"position":[[485,1],[633,1]]},"223":{"position":[[451,1],[599,1],[757,1]]},"224":{"position":[[504,1],[652,1]]},"1298":{"position":[[451,1],[599,1],[757,1]]},"1322":{"position":[[485,1],[633,1]]},"1335":{"position":[[485,1],[633,1]]},"1346":{"position":[[451,1],[599,1],[757,1]]},"1452":{"position":[[1359,2],[4311,1],[4556,1]]}},"keywords":{}}],["m)onday",{"_index":6557,"title":{},"content":{"1452":{"position":[[4175,9]]}},"keywords":{}}],["m,th",{"_index":6565,"title":{},"content":{"1452":{"position":[[4439,4]]}},"keywords":{}}],["m,w,f",{"_index":6532,"title":{},"content":{"1452":{"position":[[1401,7]]}},"keywords":{}}],["m0",{"_index":2221,"title":{},"content":{"204":{"position":[[101,2]]}},"keywords":{}}],["m1",{"_index":1982,"title":{},"content":{"169":{"position":[[377,2]]}},"keywords":{}}],["mac",{"_index":888,"title":{},"content":{"58":{"position":[[494,4],[684,3]]},"169":{"position":[[737,4],[930,3]]}},"keywords":{}}],["macaddr",{"_index":6260,"title":{},"content":{"1317":{"position":[[772,8]]},"1341":{"position":[[772,8]]},"1352":{"position":[[772,8]]},"1432":{"position":[[786,8]]}},"keywords":{}}],["macaddr8",{"_index":6261,"title":{},"content":{"1317":{"position":[[781,9]]},"1341":{"position":[[781,9]]},"1352":{"position":[[781,9]]},"1432":{"position":[[795,9]]}},"keywords":{}}],["machin",{"_index":779,"title":{},"content":{"49":{"position":[[137,8]]},"101":{"position":[[657,8]]},"107":{"position":[[312,9]]},"112":{"position":[[1074,9]]},"221":{"position":[[1515,8]]},"222":{"position":[[197,8]]},"223":{"position":[[97,7],[163,8]]},"224":{"position":[[96,7],[216,8]]},"234":{"position":[[343,8]]},"236":{"position":[[1632,8]]},"253":{"position":[[191,8]]},"295":{"position":[[1620,8]]},"313":{"position":[[191,8]]},"331":{"position":[[434,7]]},"333":{"position":[[169,7]]},"366":{"position":[[1092,7]]},"367":{"position":[[841,7]]},"1136":{"position":[[245,7],[395,7]]},"1298":{"position":[[97,7],[163,8]]},"1322":{"position":[[197,8]]},"1335":{"position":[[197,8]]},"1346":{"position":[[97,7],[163,8]]}},"keywords":{}}],["machinebuilt",{"_index":1274,"title":{},"content":{"84":{"position":[[1018,12]]}},"keywords":{}}],["maco",{"_index":865,"title":{},"content":{"58":{"position":[[22,5],[614,6]]},"169":{"position":[[858,6]]}},"keywords":{}}],["macro",{"_index":5479,"title":{},"content":{"1134":{"position":[[980,6]]}},"keywords":{}}],["made",{"_index":698,"title":{},"content":{"38":{"position":[[196,4],[228,4]]},"100":{"position":[[961,4],[1197,4]]},"183":{"position":[[2052,4],[2234,4]]},"196":{"position":[[76,4]]},"217":{"position":[[2051,4]]},"218":{"position":[[2028,4]]},"221":{"position":[[954,5]]},"225":{"position":[[398,5]]},"233":{"position":[[76,4]]},"236":{"position":[[1601,4]]},"277":{"position":[[200,4]]},"279":{"position":[[186,4]]},"291":{"position":[[1870,4]]},"302":{"position":[[1779,4]]},"331":{"position":[[612,5]]},"364":{"position":[[453,4]]},"531":{"position":[[410,4]]},"762":{"position":[[436,4]]},"775":{"position":[[436,4]]},"802":{"position":[[436,4]]},"817":{"position":[[436,4]]},"833":{"position":[[436,4]]},"909":{"position":[[693,5]]},"925":{"position":[[693,5]]},"936":{"position":[[693,5]]},"952":{"position":[[693,5]]},"970":{"position":[[693,5]]},"1077":{"position":[[413,4]]},"1154":{"position":[[432,4]]},"1201":{"position":[[51,4]]},"1293":{"position":[[51,4]]},"1307":{"position":[[51,4]]},"1317":{"position":[[51,4]]},"1330":{"position":[[51,4]]},"1341":{"position":[[51,4]]},"1352":{"position":[[51,4]]},"1359":{"position":[[51,4]]},"1380":{"position":[[51,4]]},"1404":{"position":[[51,4]]},"1415":{"position":[[51,4]]},"1432":{"position":[[51,4]]}},"keywords":{}}],["mailboxesgroupsproductsrolessatisfact",{"_index":3913,"title":{},"content":{"506":{"position":[[228,40]]}},"keywords":{}}],["mailchimp",{"_index":3361,"title":{"730":{"position":[[0,9]]},"732":{"position":[[34,9]]}},"content":{"364":{"position":[[2496,9]]},"731":{"position":[[41,9]]},"732":{"position":[[3,9]]},"733":{"position":[[3,9],[23,9]]},"734":{"position":[[250,9]]},"735":{"position":[[333,9],[444,9]]}},"keywords":{}}],["mailchimp:dev",{"_index":3362,"title":{},"content":{"364":{"position":[[2552,13]]},"736":{"position":[[89,13]]}},"keywords":{}}],["main",{"_index":640,"title":{},"content":{"29":{"position":[[15,4]]},"63":{"position":[[182,4]]},"268":{"position":[[1596,4]]},"269":{"position":[[1117,4]]},"286":{"position":[[259,4],[345,4]]},"1189":{"position":[[134,4]]},"1261":{"position":[[197,4]]},"1455":{"position":[[24,4]]}},"keywords":{}}],["mainli",{"_index":3174,"title":{},"content":{"326":{"position":[[34,6]]}},"keywords":{}}],["maintain",{"_index":664,"title":{},"content":{"32":{"position":[[253,9]]},"42":{"position":[[656,8]]},"52":{"position":[[78,9]]},"107":{"position":[[766,11]]},"113":{"position":[[655,9]]},"121":{"position":[[63,8],[1985,8]]},"125":{"position":[[782,8]]},"164":{"position":[[1484,9]]},"198":{"position":[[851,8]]},"203":{"position":[[190,8]]},"208":{"position":[[599,8]]},"209":{"position":[[870,8],[1519,8]]},"232":{"position":[[552,11]]},"239":{"position":[[2321,8],[2666,11]]},"977":{"position":[[442,8]]},"1437":{"position":[[1273,8]]},"1461":{"position":[[1760,13]]},"1467":{"position":[[1941,9]]},"1477":{"position":[[2845,8]]}},"keywords":{}}],["mainten",{"_index":2245,"title":{"1165":{"position":[[6,12]]}},"content":{"208":{"position":[[305,12]]},"1165":{"position":[[65,11],[148,11],[203,11]]}},"keywords":{}}],["major",{"_index":4696,"title":{},"content":{"788":{"position":[[34,5]]},"902":{"position":[[63,5]]},"914":{"position":[[63,5]]},"1039":{"position":[[61,5]]}},"keywords":{}}],["make",{"_index":162,"title":{},"content":{"4":{"position":[[282,4]]},"34":{"position":[[245,4]]},"41":{"position":[[259,4]]},"42":{"position":[[324,6]]},"58":{"position":[[267,4]]},"61":{"position":[[1055,4]]},"74":{"position":[[792,5]]},"82":{"position":[[3006,4]]},"92":{"position":[[774,4]]},"94":{"position":[[224,5]]},"103":{"position":[[372,4]]},"105":{"position":[[941,5]]},"121":{"position":[[1905,5]]},"162":{"position":[[766,4]]},"166":{"position":[[647,4]]},"169":{"position":[[506,4]]},"173":{"position":[[953,4]]},"190":{"position":[[1296,4]]},"202":{"position":[[154,4]]},"203":{"position":[[25,4]]},"204":{"position":[[206,4]]},"206":{"position":[[745,4]]},"212":{"position":[[223,4]]},"218":{"position":[[959,4]]},"230":{"position":[[778,4]]},"232":{"position":[[664,4],[881,4],[970,4]]},"237":{"position":[[558,4]]},"238":{"position":[[41,4]]},"240":{"position":[[4986,4]]},"242":{"position":[[103,4]]},"243":{"position":[[217,4]]},"253":{"position":[[313,4],[3109,4]]},"255":{"position":[[1058,4]]},"259":{"position":[[1421,6],[2967,6]]},"264":{"position":[[14,4],[151,4]]},"271":{"position":[[75,4]]},"275":{"position":[[173,4]]},"290":{"position":[[1523,4]]},"295":{"position":[[132,4]]},"305":{"position":[[566,4]]},"309":{"position":[[548,4],[1018,4]]},"313":{"position":[[313,4]]},"316":{"position":[[1383,4]]},"319":{"position":[[316,5],[1200,5]]},"321":{"position":[[1175,4]]},"322":{"position":[[1154,4]]},"323":{"position":[[1773,4]]},"324":{"position":[[692,4]]},"330":{"position":[[479,5]]},"331":{"position":[[456,5]]},"375":{"position":[[223,6]]},"429":{"position":[[869,6]]},"430":{"position":[[211,4]]},"500":{"position":[[24,4]]},"548":{"position":[[472,4]]},"553":{"position":[[231,4]]},"562":{"position":[[24,4]]},"577":{"position":[[486,5]]},"584":{"position":[[1165,4]]},"588":{"position":[[481,5]]},"685":{"position":[[262,6]]},"764":{"position":[[527,4]]},"777":{"position":[[527,4]]},"804":{"position":[[525,4]]},"819":{"position":[[525,4]]},"835":{"position":[[525,4]]},"840":{"position":[[635,4]]},"849":{"position":[[1110,4]]},"898":{"position":[[1637,4]]},"922":{"position":[[1694,4]]},"944":{"position":[[88,4]]},"964":{"position":[[438,6]]},"1008":{"position":[[869,4],[1591,4]]},"1047":{"position":[[767,4],[842,4]]},"1055":{"position":[[767,4],[842,4]]},"1063":{"position":[[767,4],[842,4]]},"1118":{"position":[[1005,4]]},"1154":{"position":[[96,6],[319,6]]},"1160":{"position":[[274,4]]},"1452":{"position":[[2067,6]]},"1453":{"position":[[1069,5]]},"1461":{"position":[[1722,5]]},"1462":{"position":[[201,5]]},"1476":{"position":[[819,4]]},"1477":{"position":[[656,5]]}},"keywords":{}}],["malform",{"_index":3625,"title":{},"content":{"419":{"position":[[2004,9]]},"441":{"position":[[613,9]]},"504":{"position":[[1633,9]]},"547":{"position":[[2006,9]]},"639":{"position":[[1631,9]]},"1023":{"position":[[1987,9]]}},"keywords":{}}],["manag",{"_index":557,"title":{"430":{"position":[[4,7]]},"1288":{"position":[[9,7]]},"1448":{"position":[[0,8]]}},"content":{"21":{"position":[[49,7],[175,6]]},"30":{"position":[[211,8]]},"31":{"position":[[294,6]]},"34":{"position":[[532,7]]},"49":{"position":[[214,7]]},"63":{"position":[[749,6]]},"64":{"position":[[534,7]]},"82":{"position":[[577,10],[3227,7]]},"84":{"position":[[1056,10],[1329,7]]},"96":{"position":[[749,7]]},"100":{"position":[[31,8]]},"103":{"position":[[253,7]]},"108":{"position":[[292,7]]},"110":{"position":[[1382,8]]},"112":{"position":[[785,8]]},"120":{"position":[[2650,7]]},"121":{"position":[[329,7]]},"137":{"position":[[567,6]]},"190":{"position":[[1318,6]]},"199":{"position":[[140,7]]},"205":{"position":[[337,7]]},"211":{"position":[[662,6]]},"217":{"position":[[302,8]]},"234":{"position":[[259,7]]},"246":{"position":[[112,6]]},"278":{"position":[[453,7]]},"281":{"position":[[2920,7]]},"290":{"position":[[279,8]]},"301":{"position":[[232,8]]},"320":{"position":[[585,6],[2205,7],[2256,10]]},"324":{"position":[[1086,6]]},"329":{"position":[[611,10]]},"430":{"position":[[14,7]]},"464":{"position":[[257,6]]},"477":{"position":[[373,10]]},"489":{"position":[[269,7]]},"515":{"position":[[843,10]]},"548":{"position":[[28,11]]},"553":{"position":[[151,7]]},"554":{"position":[[79,7],[189,7]]},"556":{"position":[[1637,7],[1832,7],[1912,7],[1994,7]]},"598":{"position":[[337,10]]},"662":{"position":[[269,7]]},"677":{"position":[[269,7]]},"692":{"position":[[269,7]]},"724":{"position":[[298,10]]},"726":{"position":[[255,10]]},"764":{"position":[[956,7],[1026,7]]},"777":{"position":[[956,7],[1026,7]]},"804":{"position":[[954,7],[1024,7]]},"819":{"position":[[954,7],[1024,7]]},"821":{"position":[[475,7]]},"835":{"position":[[954,7],[1024,7]]},"840":{"position":[[537,6],[923,6],[1645,6]]},"849":{"position":[[480,6],[1008,6],[1536,6],[2686,6]]},"907":{"position":[[1666,7],[1842,7]]},"912":{"position":[[486,7]]},"923":{"position":[[1666,7],[1842,7]]},"968":{"position":[[1666,7],[1842,7]]},"989":{"position":[[877,6],[976,6]]},"1004":{"position":[[960,6],[1059,6]]},"1031":{"position":[[257,7]]},"1034":{"position":[[827,6]]},"1234":{"position":[[22,7]]},"1276":{"position":[[359,6]]},"1313":{"position":[[1416,7],[1592,7]]},"1337":{"position":[[1416,7],[1592,7]]},"1461":{"position":[[5129,6]]}},"keywords":{}}],["mandatori",{"_index":2241,"title":{},"content":{"207":{"position":[[1366,9]]},"779":{"position":[[181,9]]},"1268":{"position":[[531,9]]},"1479":{"position":[[498,9]]}},"keywords":{}}],["mandatory_id",{"_index":5917,"title":{},"content":{"1250":{"position":[[182,12]]}},"keywords":{}}],["mani",{"_index":219,"title":{},"content":{"6":{"position":[[371,4]]},"8":{"position":[[176,4]]},"26":{"position":[[242,5]]},"38":{"position":[[176,4]]},"49":{"position":[[82,4],[132,4]]},"50":{"position":[[141,4]]},"52":{"position":[[88,4]]},"60":{"position":[[943,4]]},"68":{"position":[[4,4]]},"70":{"position":[[354,4]]},"74":{"position":[[385,4]]},"76":{"position":[[179,4]]},"84":{"position":[[142,4]]},"91":{"position":[[4,4]]},"101":{"position":[[356,4]]},"105":{"position":[[487,4],[1459,4]]},"109":{"position":[[46,4]]},"113":{"position":[[225,4]]},"119":{"position":[[57,4]]},"120":{"position":[[813,4]]},"122":{"position":[[1,4]]},"124":{"position":[[166,4]]},"138":{"position":[[2451,4]]},"142":{"position":[[2529,4]]},"158":{"position":[[162,4]]},"164":{"position":[[298,4]]},"165":{"position":[[293,4]]},"182":{"position":[[191,4]]},"189":{"position":[[1561,4]]},"217":{"position":[[1857,4]]},"253":{"position":[[3173,4]]},"268":{"position":[[1627,4]]},"269":{"position":[[1148,4]]},"296":{"position":[[1692,4]]},"305":{"position":[[446,4]]},"320":{"position":[[1378,4]]},"322":{"position":[[11,4]]},"325":{"position":[[639,4]]},"377":{"position":[[796,4]]},"387":{"position":[[149,4]]},"448":{"position":[[149,4]]},"556":{"position":[[149,4]]},"611":{"position":[[149,4]]},"655":{"position":[[324,4]]},"849":{"position":[[1876,4]]},"859":{"position":[[149,4]]},"870":{"position":[[169,4],[730,4],[926,4]]},"922":{"position":[[2348,4]]},"964":{"position":[[132,4]]},"1036":{"position":[[86,4]]},"1070":{"position":[[149,4]]},"1085":{"position":[[205,4]]},"1087":{"position":[[1,4]]},"1123":{"position":[[443,4]]},"1289":{"position":[[1372,4]]},"1298":{"position":[[1204,4]]},"1303":{"position":[[1083,4]]},"1310":{"position":[[693,4]]},"1322":{"position":[[1591,4]]},"1335":{"position":[[1239,4]]},"1346":{"position":[[1205,4]]},"1435":{"position":[[548,4]]},"1437":{"position":[[156,4]]},"1440":{"position":[[1421,4]]},"1443":{"position":[[258,4]]}},"keywords":{}}],["manipul",{"_index":1392,"title":{"761":{"position":[[5,12]]},"774":{"position":[[5,12]]},"801":{"position":[[5,12]]},"816":{"position":[[5,12]]},"832":{"position":[[5,12]]}},"content":{"97":{"position":[[396,10]]},"761":{"position":[[133,12]]},"774":{"position":[[133,12]]},"801":{"position":[[133,12]]},"816":{"position":[[133,12]]},"832":{"position":[[133,12]]},"1438":{"position":[[159,11]]}},"keywords":{}}],["manner",{"_index":3137,"title":{},"content":{"321":{"position":[[521,7]]}},"keywords":{}}],["manual",{"_index":347,"title":{"384":{"position":[[15,8]]},"446":{"position":[[15,8]]},"515":{"position":[[12,8]]},"524":{"position":[[40,8]]},"532":{"position":[[40,8]]},"554":{"position":[[40,9]]},"571":{"position":[[15,8]]},"582":{"position":[[15,8]]},"609":{"position":[[15,8]]},"617":{"position":[[40,9]]},"645":{"position":[[40,9]]},"652":{"position":[[40,9]]},"718":{"position":[[40,9]]},"733":{"position":[[40,9]]},"857":{"position":[[10,6]]},"988":{"position":[[40,9]]},"1003":{"position":[[40,9]]},"1228":{"position":[[0,6]]},"1245":{"position":[[0,6]]}},"content":{"11":{"position":[[1741,8]]},"13":{"position":[[557,8]]},"33":{"position":[[224,9]]},"75":{"position":[[377,8]]},"81":{"position":[[937,8]]},"82":{"position":[[1184,8]]},"126":{"position":[[564,8]]},"162":{"position":[[875,9]]},"203":{"position":[[330,8],[493,7]]},"208":{"position":[[225,8]]},"228":{"position":[[721,9],[1057,8],[1322,8]]},"229":{"position":[[741,8]]},"259":{"position":[[304,8],[1993,8]]},"307":{"position":[[838,8]]},"308":{"position":[[748,8],[792,8]]},"309":{"position":[[1951,8]]},"366":{"position":[[646,9],[978,9]]},"382":{"position":[[107,8]]},"384":{"position":[[35,9]]},"387":{"position":[[58,6],[322,6],[440,9]]},"388":{"position":[[40,6]]},"444":{"position":[[110,8]]},"448":{"position":[[58,6]]},"449":{"position":[[40,6]]},"473":{"position":[[40,6]]},"480":{"position":[[311,8]]},"513":{"position":[[109,8],[235,6]]},"515":{"position":[[14,8]]},"517":{"position":[[743,6]]},"518":{"position":[[40,6]]},"522":{"position":[[97,9]]},"527":{"position":[[40,6]]},"530":{"position":[[97,9]]},"534":{"position":[[58,6],[616,6],[725,6]]},"535":{"position":[[40,6]]},"551":{"position":[[97,9],[234,6]]},"556":{"position":[[58,6]]},"557":{"position":[[40,6]]},"569":{"position":[[116,9]]},"573":{"position":[[389,6]]},"575":{"position":[[26,6]]},"581":{"position":[[440,9]]},"584":{"position":[[49,6],[356,6]]},"586":{"position":[[26,6]]},"607":{"position":[[114,9]]},"611":{"position":[[58,6],[346,6]]},"612":{"position":[[40,6]]},"683":{"position":[[258,9]]},"685":{"position":[[54,6]]},"686":{"position":[[27,6]]},"716":{"position":[[99,9]]},"718":{"position":[[328,8]]},"720":{"position":[[58,6],[539,9]]},"721":{"position":[[40,6]]},"724":{"position":[[397,8]]},"731":{"position":[[90,9]]},"757":{"position":[[2525,9]]},"770":{"position":[[2525,9]]},"797":{"position":[[2533,9]]},"805":{"position":[[242,8]]},"812":{"position":[[2533,9]]},"820":{"position":[[242,8]]},"828":{"position":[[2533,9]]},"836":{"position":[[242,8]]},"847":{"position":[[41,6]]},"855":{"position":[[255,9],[330,6]]},"859":{"position":[[58,6],[379,6]]},"860":{"position":[[40,6]]},"903":{"position":[[672,9],[1004,9]]},"912":{"position":[[1298,8]]},"915":{"position":[[672,9],[1004,9]]},"922":{"position":[[1875,8],[2654,6]]},"930":{"position":[[672,9],[1004,9]]},"963":{"position":[[826,9],[1158,9]]},"988":{"position":[[110,8]]},"989":{"position":[[596,8]]},"991":{"position":[[58,6]]},"1003":{"position":[[110,8]]},"1004":{"position":[[679,8]]},"1009":{"position":[[58,6]]},"1010":{"position":[[40,6]]},"1040":{"position":[[212,8]]},"1047":{"position":[[266,8]]},"1050":{"position":[[212,8]]},"1055":{"position":[[266,8]]},"1058":{"position":[[212,8]]},"1063":{"position":[[266,8]]},"1067":{"position":[[555,6]]},"1070":{"position":[[58,6]]},"1071":{"position":[[40,6]]},"1085":{"position":[[58,6],[443,8]]},"1136":{"position":[[197,8]]},"1149":{"position":[[326,8]]},"1228":{"position":[[1,6]]},"1230":{"position":[[250,6],[437,9]]},"1231":{"position":[[26,6]]},"1243":{"position":[[1168,8],[1278,6]]},"1247":{"position":[[49,6],[421,6]]},"1248":{"position":[[26,6]]},"1309":{"position":[[197,8]]},"1332":{"position":[[197,8]]},"1343":{"position":[[197,8]]},"1426":{"position":[[341,8]]},"1449":{"position":[[111,8],[257,8]]}},"keywords":{}}],["manually).someon",{"_index":346,"title":{},"content":{"11":{"position":[[1723,17]]}},"keywords":{}}],["manually).th",{"_index":342,"title":{},"content":{"11":{"position":[[1543,13]]}},"keywords":{}}],["manually,bi",{"_index":4314,"title":{},"content":{"614":{"position":[[100,11]]}},"keywords":{}}],["manually.at",{"_index":5887,"title":{},"content":{"1226":{"position":[[232,11]]}},"keywords":{}}],["map",{"_index":7,"title":{"46":{"position":[[8,9]]},"98":{"position":[[9,8]]},"116":{"position":[[8,8]]},"1393":{"position":[[20,8]]}},"content":{"1":{"position":[[69,6],[881,8]]},"21":{"position":[[808,8]]},"40":{"position":[[198,4]]},"46":{"position":[[85,8],[110,4],[206,8]]},"54":{"position":[[407,6]]},"66":{"position":[[366,3]]},"77":{"position":[[298,6]]},"97":{"position":[[555,6]]},"98":{"position":[[284,3],[400,4],[714,6],[1134,4]]},"102":{"position":[[385,4]]},"107":{"position":[[67,6],[2534,7],[3203,4]]},"113":{"position":[[152,3]]},"117":{"position":[[56,7]]},"119":{"position":[[367,4]]},"120":{"position":[[734,3]]},"122":{"position":[[1097,5],[1920,3]]},"144":{"position":[[592,3]]},"154":{"position":[[1146,9],[1169,8],[1731,9]]},"164":{"position":[[237,3],[371,3],[601,4]]},"173":{"position":[[1138,8]]},"192":{"position":[[1614,6]]},"217":{"position":[[1179,6]]},"218":{"position":[[746,6]]},"230":{"position":[[170,6]]},"238":{"position":[[461,6]]},"290":{"position":[[1198,4]]},"291":{"position":[[986,6]]},"302":{"position":[[978,6]]},"381":{"position":[[569,6]]},"421":{"position":[[168,6]]},"443":{"position":[[527,6]]},"451":{"position":[[177,6]]},"457":{"position":[[181,6]]},"463":{"position":[[287,6]]},"470":{"position":[[50,6]]},"506":{"position":[[444,6]]},"512":{"position":[[204,6]]},"521":{"position":[[357,6]]},"529":{"position":[[736,6]]},"537":{"position":[[193,6]]},"550":{"position":[[441,6]]},"558":{"position":[[119,6]]},"568":{"position":[[251,6]]},"580":{"position":[[193,6]]},"590":{"position":[[103,8],[812,6]]},"605":{"position":[[399,6]]},"606":{"position":[[326,6]]},"622":{"position":[[405,6]]},"628":{"position":[[469,6]]},"649":{"position":[[67,6]]},"667":{"position":[[254,6]]},"682":{"position":[[225,6]]},"697":{"position":[[594,6]]},"703":{"position":[[159,6]]},"709":{"position":[[847,6]]},"715":{"position":[[216,6]]},"738":{"position":[[771,6]]},"744":{"position":[[161,6]]},"779":{"position":[[100,8]]},"854":{"position":[[110,6]]},"882":{"position":[[121,6]]},"888":{"position":[[176,6]]},"956":{"position":[[197,6]]},"979":{"position":[[271,6]]},"994":{"position":[[129,6]]},"1012":{"position":[[256,6]]},"1025":{"position":[[403,6]]},"1047":{"position":[[447,6]]},"1055":{"position":[[447,6]]},"1063":{"position":[[447,6]]},"1065":{"position":[[128,6]]},"1073":{"position":[[380,6]]},"1080":{"position":[[837,6]]},"1099":{"position":[[501,6]]},"1104":{"position":[[199,6]]},"1110":{"position":[[519,6]]},"1123":{"position":[[589,3],[653,3]]},"1128":{"position":[[436,6]]},"1195":{"position":[[459,8]]},"1200":{"position":[[61,8],[136,8],[264,7],[391,8],[752,7]]},"1201":{"position":[[324,8],[438,8]]},"1250":{"position":[[100,8]]},"1379":{"position":[[1925,3]]},"1403":{"position":[[1925,3]]},"1414":{"position":[[1925,3]]},"1448":{"position":[[426,3],[730,4]]},"1477":{"position":[[691,5],[1199,3]]}},"keywords":{}}],["mappingsdetermin",{"_index":1103,"title":{},"content":{"77":{"position":[[255,17]]}},"keywords":{}}],["mapreduc",{"_index":1513,"title":{},"content":{"107":{"position":[[150,10]]},"113":{"position":[[261,9]]},"322":{"position":[[235,9],[525,9]]}},"keywords":{}}],["maps"",{"_index":6722,"title":{},"content":{"1477":{"position":[[1649,11],[3988,10]]}},"keywords":{}}],["mariadb",{"_index":3305,"title":{"749":{"position":[[0,7]]},"752":{"position":[[12,8]]},"753":{"position":[[19,8]]},"754":{"position":[[12,7]]},"765":{"position":[[15,7]]}},"content":{"363":{"position":[[1569,7]]},"750":{"position":[[38,7]]},"753":{"position":[[32,7],[72,7],[736,7]]},"754":{"position":[[978,7]]},"755":{"position":[[12,7]]},"756":{"position":[[250,7]]},"757":{"position":[[2389,7]]},"759":{"position":[[12,7]]},"764":{"position":[[115,7]]},"766":{"position":[[38,7]]},"767":{"position":[[852,8],[1425,7],[1690,7],[2294,7]]},"768":{"position":[[12,7]]},"769":{"position":[[250,7]]},"770":{"position":[[2389,7]]},"772":{"position":[[23,7]]},"777":{"position":[[115,7]]}},"keywords":{}}],["mariadb'",{"_index":4579,"title":{},"content":{"750":{"position":[[364,9]]},"754":{"position":[[1,9]]},"766":{"position":[[364,9]]}},"keywords":{}}],["mariadb10.6typ",{"_index":4666,"title":{},"content":{"767":{"position":[[966,16]]}},"keywords":{}}],["mariadb:dev",{"_index":3306,"title":{},"content":{"363":{"position":[[1623,11]]},"758":{"position":[[149,11]]},"771":{"position":[[149,11]]}},"keywords":{}}],["mark",{"_index":5519,"title":{},"content":{"1140":{"position":[[146,6]]},"1316":{"position":[[146,6]]},"1340":{"position":[[146,6]]},"1351":{"position":[[146,6]]},"1370":{"position":[[142,6]]},"1431":{"position":[[169,6]]}},"keywords":{}}],["market",{"_index":3333,"title":{"511":{"position":[[9,9]]},"1024":{"position":[[9,9]]},"1079":{"position":[[7,9]]}},"content":{"364":{"position":[[1087,9]]},"373":{"position":[[12,6],[245,6]]},"377":{"position":[[1322,6]]},"385":{"position":[[356,9]]},"515":{"position":[[135,9],[159,9],[546,9],[568,9],[604,9]]},"516":{"position":[[259,9]]},"517":{"position":[[150,9],[326,9],[708,9],[4034,9]]},"718":{"position":[[91,9],[155,9]]},"726":{"position":[[208,9]]},"1026":{"position":[[12,9]]},"1082":{"position":[[22,9]]},"1084":{"position":[[257,9]]}},"keywords":{}}],["marketing:dev",{"_index":3334,"title":{},"content":{"364":{"position":[[1152,13]]},"518":{"position":[[168,13]]},"1086":{"position":[[178,13]]}},"keywords":{}}],["marketo",{"_index":3363,"title":{"737":{"position":[[0,7]]}},"content":{"364":{"position":[[2566,7]]},"738":{"position":[[62,8],[298,7],[428,7],[515,7],[534,7],[579,7],[594,7],[639,7],[661,7],[709,7],[727,7]]},"739":{"position":[[68,7],[96,7],[119,7]]},"740":{"position":[[250,7]]},"741":{"position":[[103,7],[205,7],[423,7],[549,7]]}},"keywords":{}}],["marketo.dev",{"_index":3364,"title":{},"content":{"364":{"position":[[2620,11]]}},"keywords":{}}],["marketo:dev",{"_index":4555,"title":{},"content":{"742":{"position":[[90,11]]}},"keywords":{}}],["marketplac",{"_index":3480,"title":{},"content":{"385":{"position":[[411,13],[532,13],[757,12]]}},"keywords":{}}],["massiv",{"_index":4273,"title":{},"content":{"595":{"position":[[1440,7]]}},"keywords":{}}],["master",{"_index":6059,"title":{},"content":{"1292":{"position":[[2805,6]]},"1306":{"position":[[2805,6]]},"1329":{"position":[[2805,6]]}},"keywords":{}}],["master_auto_p",{"_index":6062,"title":{},"content":{"1292":{"position":[[2846,13]]},"1306":{"position":[[2846,13]]},"1329":{"position":[[2846,13]]}},"keywords":{}}],["master_bind",{"_index":6064,"title":{},"content":{"1292":{"position":[[2904,11]]},"1306":{"position":[[2904,11]]},"1329":{"position":[[2904,11]]}},"keywords":{}}],["master_compr",{"_index":6065,"title":{},"content":{"1292":{"position":[[2943,13]]},"1306":{"position":[[2943,13]]},"1329":{"position":[[2943,13]]}},"keywords":{}}],["master_connec",{"_index":6066,"title":{},"content":{"1292":{"position":[[2957,13]]},"1306":{"position":[[2957,13]]},"1329":{"position":[[2957,13]]}},"keywords":{}}],["master_delay",{"_index":6068,"title":{},"content":{"1292":{"position":[[3007,12]]},"1306":{"position":[[3007,12]]},"1329":{"position":[[3007,12]]}},"keywords":{}}],["master_heartb",{"_index":6071,"title":{},"content":{"1292":{"position":[[3050,13]]},"1306":{"position":[[3050,13]]},"1329":{"position":[[3050,13]]}},"keywords":{}}],["master_host",{"_index":6073,"title":{},"content":{"1292":{"position":[[3098,11]]},"1306":{"position":[[3098,11]]},"1329":{"position":[[3098,11]]}},"keywords":{}}],["master_log_fi",{"_index":6075,"title":{},"content":{"1292":{"position":[[3145,13]]},"1306":{"position":[[3145,13]]},"1329":{"position":[[3145,13]]}},"keywords":{}}],["master_log_po",{"_index":6080,"title":{},"content":{"1292":{"position":[[3209,13]]},"1306":{"position":[[3209,13]]},"1329":{"position":[[3209,13]]}},"keywords":{}}],["master_passwo",{"_index":6082,"title":{},"content":{"1292":{"position":[[3262,13]]},"1306":{"position":[[3262,13]]},"1329":{"position":[[3262,13]]}},"keywords":{}}],["master_port",{"_index":6084,"title":{},"content":{"1292":{"position":[[3308,11]]},"1306":{"position":[[3308,11]]},"1329":{"position":[[3308,11]]}},"keywords":{}}],["master_publ",{"_index":6088,"title":{},"content":{"1292":{"position":[[3356,13]]},"1306":{"position":[[3356,13]]},"1329":{"position":[[3356,13]]}},"keywords":{}}],["master_serv",{"_index":6094,"title":{},"content":{"1292":{"position":[[3464,13]]},"1306":{"position":[[3464,13]]},"1329":{"position":[[3464,13]]}},"keywords":{}}],["master_ssl",{"_index":6096,"title":{},"content":{"1292":{"position":[[3514,10]]},"1306":{"position":[[3514,10]]},"1329":{"position":[[3514,10]]}},"keywords":{}}],["master_ssl_c",{"_index":6101,"title":{},"content":{"1292":{"position":[[3652,13]]},"1306":{"position":[[3652,13]]},"1329":{"position":[[3652,13]]}},"keywords":{}}],["master_ssl_ca",{"_index":6099,"title":{},"content":{"1292":{"position":[[3557,13],[3603,13]]},"1306":{"position":[[3557,13],[3603,13]]},"1329":{"position":[[3557,13],[3603,13]]}},"keywords":{}}],["master_ssl_ci",{"_index":6103,"title":{},"content":{"1292":{"position":[[3700,13]]},"1306":{"position":[[3700,13]]},"1329":{"position":[[3700,13]]}},"keywords":{}}],["master_ssl_cr",{"_index":6106,"title":{},"content":{"1292":{"position":[[3750,13],[3801,13]]},"1306":{"position":[[3750,13],[3801,13]]},"1329":{"position":[[3750,13],[3801,13]]}},"keywords":{}}],["master_ssl_k",{"_index":6111,"title":{},"content":{"1292":{"position":[[3841,13]]},"1306":{"position":[[3841,13]]},"1329":{"position":[[3841,13]]}},"keywords":{}}],["master_ssl_v",{"_index":6113,"title":{},"content":{"1292":{"position":[[3881,13]]},"1306":{"position":[[3881,13]]},"1329":{"position":[[3881,13]]}},"keywords":{}}],["master_tls_ci",{"_index":6116,"title":{},"content":{"1292":{"position":[[3932,13]]},"1306":{"position":[[3932,13]]},"1329":{"position":[[3932,13]]}},"keywords":{}}],["master_tls_v",{"_index":6121,"title":{},"content":{"1292":{"position":[[3978,13]]},"1306":{"position":[[3978,13]]},"1329":{"position":[[3978,13]]}},"keywords":{}}],["master_us",{"_index":6123,"title":{},"content":{"1292":{"position":[[4027,11]]},"1306":{"position":[[4027,11]]},"1329":{"position":[[4027,11]]}},"keywords":{}}],["master_zstd_c",{"_index":6125,"title":{},"content":{"1292":{"position":[[4057,13]]},"1306":{"position":[[4057,13]]},"1329":{"position":[[4057,13]]}},"keywords":{}}],["masterretri",{"_index":6092,"title":{},"content":{"1292":{"position":[[3408,11]]},"1306":{"position":[[3408,11]]},"1329":{"position":[[3408,11]]}},"keywords":{}}],["match",{"_index":494,"title":{},"content":{"17":{"position":[[421,7],[508,8],[782,8],[839,5]]},"23":{"position":[[17,5]]},"33":{"position":[[379,5]]},"41":{"position":[[573,5]]},"43":{"position":[[404,5]]},"106":{"position":[[324,5]]},"129":{"position":[[63,5],[478,7]]},"138":{"position":[[724,5]]},"141":{"position":[[845,5]]},"142":{"position":[[687,5]]},"190":{"position":[[1067,5]]},"219":{"position":[[216,8]]},"255":{"position":[[831,7]]},"286":{"position":[[394,5]]},"294":{"position":[[133,7]]},"301":{"position":[[977,5],[1082,7]]},"316":{"position":[[1156,7]]},"417":{"position":[[428,7],[1142,5],[1251,7]]},"438":{"position":[[428,7],[1658,5],[1767,7]]},"502":{"position":[[180,5],[289,7],[888,7]]},"545":{"position":[[428,7],[751,5],[875,7]]},"594":{"position":[[941,5]]},"1021":{"position":[[844,5],[976,7],[1474,7]]},"1140":{"position":[[2463,5],[2500,7]]},"1203":{"position":[[473,8]]},"1292":{"position":[[4106,5]]},"1306":{"position":[[4106,5]]},"1316":{"position":[[2463,5],[2500,7]]},"1329":{"position":[[4106,5]]},"1340":{"position":[[2463,5],[2500,7]]},"1351":{"position":[[2463,5],[2500,7]]},"1370":{"position":[[471,5]]},"1379":{"position":[[1969,5]]},"1384":{"position":[[745,7]]},"1403":{"position":[[1969,5]]},"1414":{"position":[[1969,5]]},"1429":{"position":[[417,7]]},"1431":{"position":[[2486,5],[2523,7]]},"1440":{"position":[[1627,7]]},"1461":{"position":[[1595,5]]},"1475":{"position":[[255,7]]}},"keywords":{}}],["match_numb",{"_index":5634,"title":{},"content":{"1140":{"position":[[2547,12]]},"1316":{"position":[[2547,12]]},"1340":{"position":[[2547,12]]},"1351":{"position":[[2547,12]]},"1431":{"position":[[2570,12]]}},"keywords":{}}],["match_recogn",{"_index":5637,"title":{},"content":{"1140":{"position":[[2593,15]]},"1316":{"position":[[2593,15]]},"1340":{"position":[[2593,15]]},"1351":{"position":[[2593,15]]},"1431":{"position":[[2616,15]]}},"keywords":{}}],["matchfil",{"_index":5204,"title":{},"content":{"1021":{"position":[[832,11]]}},"keywords":{}}],["matchkey",{"_index":3592,"title":{},"content":{"417":{"position":[[1131,10]]},"438":{"position":[[1647,10]]},"502":{"position":[[169,10]]},"503":{"position":[[140,10]]},"545":{"position":[[740,10]]}},"keywords":{}}],["materi",{"_index":223,"title":{"36":{"position":[[0,17]]},"118":{"position":[[0,16]]},"121":{"position":[[15,15]]},"126":{"position":[[47,15]]},"142":{"position":[[0,16]]},"143":{"position":[[8,17]]},"144":{"position":[[11,16]]},"151":{"position":[[0,15]]},"178":{"position":[[19,12]]},"184":{"position":[[22,12]]},"192":{"position":[[0,11]]},"218":{"position":[[9,16]]},"226":{"position":[[10,12]]},"230":{"position":[[31,16]]},"240":{"position":[[17,16]]},"291":{"position":[[0,11]]},"302":{"position":[[0,11]]},"325":{"position":[[0,12]]},"1119":{"position":[[0,15]]},"1120":{"position":[[10,15]]},"1433":{"position":[[0,15]]},"1450":{"position":[[0,15]]},"1472":{"position":[[27,16]]}},"content":{"6":{"position":[[603,15]]},"7":{"position":[[694,17]]},"8":{"position":[[525,16]]},"11":{"position":[[140,16],[397,17],[522,15],[716,16],[970,15],[1966,17]]},"13":{"position":[[735,11],[829,15],[908,15],[1322,16],[1689,15]]},"14":{"position":[[163,17],[572,12],[817,12],[1055,12]]},"17":{"position":[[73,17],[313,16]]},"20":{"position":[[703,16]]},"25":{"position":[[215,16]]},"27":{"position":[[33,17]]},"33":{"position":[[83,17]]},"34":{"position":[[105,12]]},"36":{"position":[[3,15],[183,16],[305,15],[409,16],[490,16]]},"37":{"position":[[106,12]]},"38":{"position":[[115,17]]},"42":{"position":[[152,12],[244,12],[343,16]]},"44":{"position":[[28,16],[497,15]]},"45":{"position":[[378,16],[472,15]]},"56":{"position":[[615,15]]},"66":{"position":[[177,17]]},"67":{"position":[[1681,16]]},"68":{"position":[[81,11]]},"70":{"position":[[215,17]]},"71":{"position":[[532,15]]},"72":{"position":[[575,15]]},"74":{"position":[[102,12],[726,11]]},"76":{"position":[[164,13]]},"77":{"position":[[466,16]]},"79":{"position":[[116,15]]},"80":{"position":[[231,15]]},"81":{"position":[[1025,17],[1719,11],[2537,17]]},"83":{"position":[[754,15]]},"95":{"position":[[22,17]]},"114":{"position":[[526,11],[782,16]]},"115":{"position":[[23,15],[336,13],[518,12],[895,13],[1075,13]]},"117":{"position":[[141,16]]},"119":{"position":[[1,16],[94,15],[343,11],[570,16]]},"120":{"position":[[1,16],[96,16],[165,17],[201,16],[309,16],[468,15],[741,12],[785,15],[1906,11],[2079,11],[2157,11],[2802,16]]},"121":{"position":[[6,16],[38,12],[211,15],[382,16],[640,12],[873,16],[1098,17],[1471,15],[1630,12],[1883,16],[1911,16]]},"122":{"position":[[364,15],[589,16],[665,15],[1104,17],[1304,15]]},"123":{"position":[[29,11],[479,17]]},"124":{"position":[[379,15],[969,11],[1079,15]]},"125":{"position":[[37,15],[957,12],[1391,15]]},"126":{"position":[[188,15],[270,16],[312,15],[475,16],[659,16]]},"135":{"position":[[312,13],[943,17]]},"137":{"position":[[180,19]]},"138":{"position":[[431,11],[509,16],[600,16]]},"140":{"position":[[422,11],[492,16]]},"141":{"position":[[423,11]]},"142":{"position":[[5,16],[62,16],[113,15],[188,17],[559,16],[615,15],[665,16],[706,15],[880,15],[962,15],[1155,16],[1265,15],[1357,15],[1425,15],[1510,15],[1720,15],[1835,16],[1856,15],[1932,12],[1953,15],[2070,15],[2416,15],[2448,16],[2778,15]]},"143":{"position":[[41,16],[83,15],[141,15],[199,15],[260,16]]},"144":{"position":[[42,16],[73,15],[96,16],[206,11],[338,15],[821,16]]},"151":{"position":[[33,15],[56,16]]},"152":{"position":[[27,16],[48,15],[162,16],[413,16],[963,16]]},"153":{"position":[[58,15]]},"154":{"position":[[1900,15]]},"158":{"position":[[420,16]]},"162":{"position":[[528,16],[1017,15],[1046,16]]},"163":{"position":[[700,12]]},"164":{"position":[[1257,12],[1445,15]]},"165":{"position":[[2032,13]]},"166":{"position":[[67,12],[196,12],[269,12],[531,17]]},"180":{"position":[[1,12],[186,12],[876,11]]},"184":{"position":[[13,11],[70,11],[185,16],[232,16],[275,16],[325,12]]},"185":{"position":[[277,15]]},"189":{"position":[[1237,16],[1320,11],[1455,15],[1780,15]]},"190":{"position":[[2126,11],[2168,11]]},"191":{"position":[[16,11]]},"192":{"position":[[26,16],[70,15],[200,16],[268,11],[1523,11],[2088,16],[2270,16],[2377,12]]},"193":{"position":[[103,12],[281,16]]},"208":{"position":[[815,16],[1072,15],[1148,15],[1587,16],[1900,15]]},"216":{"position":[[282,16],[360,15]]},"217":{"position":[[147,11],[2015,11],[2252,11]]},"218":{"position":[[69,11],[161,16],[355,15],[1002,11],[1309,16],[1455,11],[1829,16]]},"219":{"position":[[258,17],[289,11],[391,11],[440,11]]},"221":{"position":[[1651,15]]},"225":{"position":[[522,15]]},"227":{"position":[[34,11],[285,16]]},"228":{"position":[[397,12],[487,16],[1136,15]]},"229":{"position":[[352,16],[820,15]]},"230":{"position":[[123,16],[261,16],[343,12],[364,15],[417,15],[636,12]]},"232":{"position":[[267,15],[618,11]]},"239":{"position":[[2388,16],[2575,17]]},"240":{"position":[[109,11],[2525,16],[3144,16],[3289,13],[3376,15],[4746,12],[4883,16]]},"245":{"position":[[113,12]]},"254":{"position":[[2482,12]]},"259":{"position":[[1315,16],[1624,15],[1651,16],[1724,15],[1843,15],[2287,16],[2385,16],[2878,16],[3030,15],[3105,12]]},"263":{"position":[[543,15]]},"268":{"position":[[1547,12],[2055,11]]},"269":{"position":[[1517,11]]},"270":{"position":[[2133,11]]},"274":{"position":[[57,17],[332,12],[360,16],[1042,17],[1155,16]]},"277":{"position":[[1270,12]]},"284":{"position":[[264,16]]},"285":{"position":[[322,15]]},"286":{"position":[[185,13]]},"289":{"position":[[439,16],[515,15]]},"290":{"position":[[1485,11],[1855,11]]},"291":{"position":[[30,15],[153,16],[231,16],[279,15],[1297,16],[1355,11],[1762,16]]},"296":{"position":[[6684,15],[7140,16],[7213,15],[7574,15]]},"300":{"position":[[393,16],[462,15]]},"301":{"position":[[1581,11],[1820,11]]},"302":{"position":[[30,15],[153,16],[231,16],[279,15],[1229,16],[1280,11],[1671,16]]},"305":{"position":[[163,16],[613,16]]},"307":{"position":[[418,16],[908,16],[1464,17],[1840,15],[2332,17],[2888,16],[3004,15]]},"308":{"position":[[148,16],[261,15],[465,15],[603,13],[646,15],[771,16],[845,16],[965,15],[1083,13]]},"309":{"position":[[117,15],[264,13],[311,16],[457,12],[743,15],[833,16],[1093,15],[1182,13],[1973,15],[1992,11],[2283,17],[2890,17]]},"310":{"position":[[187,17],[278,15]]},"314":{"position":[[2023,12]]},"320":{"position":[[2058,17]]},"321":{"position":[[577,11],[1668,11],[2418,17]]},"322":{"position":[[1825,11]]},"323":{"position":[[776,11],[897,16],[1324,17],[1459,17]]},"324":{"position":[[942,12]]},"325":{"position":[[33,12],[281,11],[610,15]]},"326":{"position":[[196,13],[759,12],[1079,11],[1619,11],[1878,12]]},"329":{"position":[[96,11]]},"330":{"position":[[496,11]]},"343":{"position":[[771,17]]},"344":{"position":[[1,17],[36,16]]},"379":{"position":[[786,11],[911,15],[992,15],[1137,11]]},"602":{"position":[[792,11],[953,16]]},"660":{"position":[[844,15]]},"909":{"position":[[1125,11]]},"925":{"position":[[1125,11]]},"936":{"position":[[1125,11]]},"952":{"position":[[1125,11]]},"970":{"position":[[1125,11]]},"1123":{"position":[[1,12],[79,12],[220,12],[562,12],[828,11]]},"1124":{"position":[[259,15]]},"1125":{"position":[[112,13],[219,13],[295,12],[413,13],[589,12]]},"1126":{"position":[[1,17]]},"1136":{"position":[[70,12]]},"1137":{"position":[[121,16]]},"1138":{"position":[[328,11],[574,12],[678,15],[1735,11]]},"1139":{"position":[[1,17]]},"1143":{"position":[[43,16]]},"1144":{"position":[[91,12],[616,12],[774,13],[1336,12]]},"1145":{"position":[[1,17]]},"1146":{"position":[[1,12],[170,12]]},"1147":{"position":[[33,12],[105,15]]},"1150":{"position":[[58,16]]},"1151":{"position":[[386,11],[406,15],[663,15]]},"1152":{"position":[[1,17]]},"1155":{"position":[[319,12],[540,15]]},"1156":{"position":[[56,15],[129,12],[185,15],[233,15],[344,15],[563,16],[771,16],[862,15]]},"1157":{"position":[[68,11],[152,11],[327,12]]},"1161":{"position":[[43,16]]},"1163":{"position":[[1,17]]},"1164":{"position":[[638,12]]},"1165":{"position":[[86,12]]},"1166":{"position":[[132,12]]},"1169":{"position":[[43,16]]},"1170":{"position":[[91,12],[616,12],[774,13],[1261,12]]},"1171":{"position":[[1,17]]},"1173":{"position":[[1,12],[170,12]]},"1174":{"position":[[33,12],[105,15]]},"1178":{"position":[[122,16]]},"1179":{"position":[[490,15],[1082,12]]},"1180":{"position":[[1,17],[113,12]]},"1183":{"position":[[187,12],[461,13],[494,13],[589,12],[656,15],[1683,15],[1711,13]]},"1187":{"position":[[124,16]]},"1188":{"position":[[405,11]]},"1189":{"position":[[2,17],[362,12]]},"1195":{"position":[[128,16],[432,15]]},"1196":{"position":[[965,15]]},"1197":{"position":[[1,17],[368,12]]},"1200":{"position":[[202,11],[630,15],[714,12]]},"1201":{"position":[[155,16],[251,15],[389,16],[501,13]]},"1203":{"position":[[217,16]]},"1205":{"position":[[122,16]]},"1206":{"position":[[920,12],[1096,12]]},"1207":{"position":[[1,17],[451,12]]},"1208":{"position":[[264,12]]},"1209":{"position":[[186,16]]},"1212":{"position":[[43,16]]},"1213":{"position":[[91,12],[471,12],[1013,12]]},"1214":{"position":[[1,17]]},"1215":{"position":[[1,12],[170,12]]},"1216":{"position":[[33,12],[105,15]]},"1219":{"position":[[43,16]]},"1220":{"position":[[91,12],[471,12],[938,12]]},"1221":{"position":[[1,17]]},"1223":{"position":[[1,12],[170,12]]},"1224":{"position":[[33,12],[105,15]]},"1226":{"position":[[273,12]]},"1229":{"position":[[134,16]]},"1230":{"position":[[548,16],[1333,12]]},"1231":{"position":[[71,17]]},"1232":{"position":[[9,11],[196,13]]},"1236":{"position":[[13,15]]},"1243":{"position":[[364,12],[447,15],[489,11],[726,16],[752,13],[837,15],[908,16],[965,16]]},"1246":{"position":[[127,16]]},"1247":{"position":[[713,11],[862,11],[1119,11]]},"1248":{"position":[[71,17],[395,12]]},"1254":{"position":[[1,17]]},"1259":{"position":[[50,16]]},"1260":{"position":[[193,11],[377,15]]},"1261":{"position":[[1,17]]},"1264":{"position":[[13,15]]},"1265":{"position":[[128,11]]},"1267":{"position":[[416,13]]},"1270":{"position":[[1,17]]},"1274":{"position":[[179,12]]},"1275":{"position":[[5,15]]},"1276":{"position":[[119,15],[152,12]]},"1277":{"position":[[106,16],[1129,11]]},"1278":{"position":[[1,17]]},"1279":{"position":[[108,12],[330,12]]},"1281":{"position":[[67,12]]},"1284":{"position":[[119,16]]},"1285":{"position":[[111,11],[438,13]]},"1286":{"position":[[89,11],[303,14],[1254,11],[1356,11],[1415,15],[2570,11]]},"1287":{"position":[[1,17]]},"1293":{"position":[[155,16],[251,15]]},"1295":{"position":[[67,12]]},"1299":{"position":[[119,16]]},"1300":{"position":[[111,11],[438,13]]},"1301":{"position":[[89,11],[303,14],[1090,11],[1192,11],[1251,15],[2406,11]]},"1302":{"position":[[1,17]]},"1303":{"position":[[1525,17]]},"1307":{"position":[[155,16],[251,15]]},"1309":{"position":[[70,12]]},"1312":{"position":[[122,16]]},"1313":{"position":[[111,11],[384,12],[488,15],[1279,11]]},"1314":{"position":[[1,17]]},"1317":{"position":[[155,16],[251,15],[360,12],[921,12]]},"1319":{"position":[[67,12]]},"1323":{"position":[[119,16]]},"1324":{"position":[[111,11],[438,13]]},"1325":{"position":[[89,11],[303,14],[1254,11],[1356,11],[1415,15],[2570,11]]},"1326":{"position":[[1,17]]},"1330":{"position":[[155,16],[251,15]]},"1332":{"position":[[70,12]]},"1336":{"position":[[122,16]]},"1337":{"position":[[111,11],[384,12],[488,15],[1279,11]]},"1338":{"position":[[1,17]]},"1341":{"position":[[155,16],[251,15],[360,12],[921,12]]},"1343":{"position":[[70,12]]},"1347":{"position":[[122,16]]},"1348":{"position":[[111,11],[384,12],[488,15],[1279,11]]},"1349":{"position":[[1,17]]},"1352":{"position":[[155,16],[251,15],[360,12],[921,12]]},"1355":{"position":[[121,16]]},"1357":{"position":[[1,17],[300,12]]},"1358":{"position":[[168,12],[606,15]]},"1359":{"position":[[155,16],[251,15]]},"1363":{"position":[[1,17]]},"1366":{"position":[[6,15],[98,12]]},"1367":{"position":[[87,11]]},"1368":{"position":[[1,17]]},"1370":{"position":[[484,12]]},"1372":{"position":[[71,12]]},"1375":{"position":[[123,16]]},"1376":{"position":[[111,11],[485,11]]},"1377":{"position":[[1,17]]},"1380":{"position":[[155,16],[251,15]]},"1382":{"position":[[108,11]]},"1385":{"position":[[123,16]]},"1386":{"position":[[290,11],[461,15]]},"1387":{"position":[[36,17],[401,12],[590,17],[1027,12]]},"1391":{"position":[[113,15],[515,11],[605,15],[662,16]]},"1393":{"position":[[6,12]]},"1396":{"position":[[71,12]]},"1399":{"position":[[123,16]]},"1400":{"position":[[111,11],[485,11]]},"1401":{"position":[[1,17]]},"1404":{"position":[[155,16],[251,15]]},"1406":{"position":[[71,12]]},"1410":{"position":[[123,16]]},"1411":{"position":[[111,11],[485,11]]},"1412":{"position":[[1,17]]},"1415":{"position":[[155,16],[251,15]]},"1419":{"position":[[123,16]]},"1420":{"position":[[204,11]]},"1421":{"position":[[2,17],[388,12]]},"1425":{"position":[[73,12]]},"1426":{"position":[[125,16]]},"1427":{"position":[[111,11],[325,12],[429,15],[1039,11]]},"1428":{"position":[[1,17]]},"1429":{"position":[[163,15],[570,13]]},"1432":{"position":[[155,16],[251,15],[360,12],[949,12]]},"1435":{"position":[[37,16],[139,15],[333,15],[643,15],[776,12]]},"1436":{"position":[[52,17]]},"1437":{"position":[[491,15],[682,15]]},"1440":{"position":[[82,16],[856,12]]},"1443":{"position":[[1056,15]]},"1446":{"position":[[48,17],[180,16],[262,17]]},"1447":{"position":[[38,15],[253,15],[384,16]]},"1448":{"position":[[118,16]]},"1449":{"position":[[52,15],[397,16]]},"1451":{"position":[[45,15],[80,15],[171,15],[390,15],[772,15],[1048,15]]},"1452":{"position":[[3,15],[359,15],[1648,15],[2087,15],[2230,16],[2567,15]]},"1453":{"position":[[58,15],[664,15],[1487,15]]},"1455":{"position":[[52,16]]},"1459":{"position":[[611,16]]},"1461":{"position":[[2813,12],[2883,11],[3408,16]]},"1469":{"position":[[60,13]]},"1470":{"position":[[131,16],[331,11],[536,16],[675,16],[1217,17]]},"1472":{"position":[[9,11],[193,11],[444,15],[537,12],[856,15]]},"1473":{"position":[[211,16]]},"1475":{"position":[[702,12],[715,15],[769,15],[940,15],[1079,16],[1103,15]]},"1479":{"position":[[53,15],[221,16],[272,15],[667,13],[792,16]]},"1480":{"position":[[102,17],[138,16],[246,16],[405,15]]}},"keywords":{}}],["materialization'",{"_index":6395,"title":{},"content":{"1388":{"position":[[725,17]]},"1452":{"position":[[1589,17]]},"1453":{"position":[[1264,17]]},"1470":{"position":[[1306,17]]}},"keywords":{}}],["materialization(",{"_index":1821,"title":{},"content":{"142":{"position":[[528,19]]}},"keywords":{}}],["materialization.it'",{"_index":5853,"title":{},"content":{"1203":{"position":[[130,20]]}},"keywords":{}}],["materialization.pend",{"_index":1826,"title":{},"content":{"142":{"position":[[1227,23]]}},"keywords":{}}],["materializations.db",{"_index":6619,"title":{},"content":{"1461":{"position":[[3657,19]]}},"keywords":{}}],["materializations.monitor",{"_index":1747,"title":{},"content":{"135":{"position":[[400,24]]}},"keywords":{}}],["materializationsth",{"_index":1138,"title":{},"content":{"81":{"position":[[2871,19]]}},"keywords":{}}],["materialize.click",{"_index":1828,"title":{},"content":{"144":{"position":[[185,20]]}},"keywords":{}}],["materialize/datagen",{"_index":2528,"title":{},"content":{"236":{"position":[[1135,19]]}},"keywords":{}}],["matter",{"_index":1550,"title":{},"content":{"107":{"position":[[2279,6]]},"197":{"position":[[825,7]]},"306":{"position":[[513,6]]},"757":{"position":[[1026,7],[1287,6]]},"770":{"position":[[1026,7],[1287,6]]},"797":{"position":[[1026,7],[1287,6]]},"812":{"position":[[1026,7],[1287,6]]},"828":{"position":[[1026,7],[1287,6]]},"867":{"position":[[1995,6]]},"922":{"position":[[420,6]]}},"keywords":{}}],["maverick",{"_index":2316,"title":{},"content":{"210":{"position":[[2065,8]]}},"keywords":{}}],["max",{"_index":3574,"title":{},"content":{"410":{"position":[[46,3]]},"1140":{"position":[[2638,3]]},"1316":{"position":[[2638,3]]},"1340":{"position":[[2638,3]]},"1351":{"position":[[2638,3]]},"1379":{"position":[[2016,3]]},"1403":{"position":[[2016,3]]},"1414":{"position":[[2016,3]]},"1431":{"position":[[2661,3]]},"1476":{"position":[[155,3],[282,4],[444,3],[494,4],[552,4],[620,3],[670,4],[1217,3],[1326,3],[1448,4],[1470,3],[1667,3],[1737,4],[1814,4],[1891,4],[1968,4],[2039,3],[2197,4]]}},"keywords":{}}],["max=364",{"_index":4162,"title":{},"content":{"573":{"position":[[1219,8]]}},"keywords":{}}],["max_batch_s",{"_index":3970,"title":{},"content":{"517":{"position":[[3185,15]]}},"keywords":{}}],["max_connectio",{"_index":6128,"title":{},"content":{"1292":{"position":[[4185,13]]},"1306":{"position":[[4185,13]]},"1329":{"position":[[4185,13]]}},"keywords":{}}],["max_queries_p",{"_index":6131,"title":{},"content":{"1292":{"position":[[4239,13]]},"1306":{"position":[[4239,13]]},"1329":{"position":[[4239,13]]}},"keywords":{}}],["max_row",{"_index":6135,"title":{},"content":{"1292":{"position":[[4307,8]]},"1306":{"position":[[4307,8]]},"1329":{"position":[[4307,8]]}},"keywords":{}}],["max_siz",{"_index":6138,"title":{},"content":{"1292":{"position":[[4354,8]]},"1306":{"position":[[4354,8]]},"1329":{"position":[[4354,8]]}},"keywords":{}}],["max_slot_wal_keep_s",{"_index":5061,"title":{},"content":{"922":{"position":[[1949,22],[2374,22],[2774,22]]}},"keywords":{}}],["max_updates_p",{"_index":6141,"title":{},"content":{"1292":{"position":[[4406,13]]},"1306":{"position":[[4406,13]]},"1329":{"position":[[4406,13]]}},"keywords":{}}],["max_user_conn",{"_index":6144,"title":{},"content":{"1292":{"position":[[4470,13]]},"1306":{"position":[[4470,13]]},"1329":{"position":[[4470,13]]}},"keywords":{}}],["maxim",{"_index":6708,"title":{"1476":{"position":[[13,8]]}},"content":{"1476":{"position":[[13,8],[35,8],[309,8],[706,8],[852,8],[1504,8]]}},"keywords":{}}],["maximum",{"_index":33,"title":{"1157":{"position":[[0,7]]}},"content":{"1":{"position":[[410,7]]},"7":{"position":[[502,7]]},"20":{"position":[[1076,7]]},"156":{"position":[[358,7]]},"343":{"position":[[322,7],[683,7]]},"377":{"position":[[654,7]]},"387":{"position":[[966,7],[984,7]]},"410":{"position":[[70,7],[151,7]]},"517":{"position":[[3201,7],[3234,7]]},"584":{"position":[[1269,7]]},"767":{"position":[[2270,7]]},"792":{"position":[[2262,7]]},"824":{"position":[[2384,7]]},"842":{"position":[[1372,7],[1489,7],[2453,7],[2560,7]]},"922":{"position":[[1997,7]]},"1144":{"position":[[600,7]]},"1157":{"position":[[5,7]]},"1170":{"position":[[600,7],[926,7],[1069,7]]},"1213":{"position":[[455,7]]},"1220":{"position":[[455,7],[603,7],[746,7]]},"1391":{"position":[[296,7]]},"1476":{"position":[[1019,8]]}},"keywords":{}}],["maxitem",{"_index":1953,"title":{},"content":{"164":{"position":[[2019,9]]}},"keywords":{}}],["maxtxndur",{"_index":3235,"title":{},"content":{"343":{"position":[[306,15]]},"344":{"position":[[400,15]]}},"keywords":{}}],["maxvalu",{"_index":6127,"title":{},"content":{"1292":{"position":[[4143,8]]},"1306":{"position":[[4143,8]]},"1329":{"position":[[4143,8]]}},"keywords":{}}],["may<br/>",{"_index":6449,"title":{},"content":{"1434":{"position":[[1207,14]]}},"keywords":{}}],["mb",{"_index":979,"title":{},"content":{"66":{"position":[[697,2]]},"1157":{"position":[[50,3],[121,2]]}},"keywords":{}}],["mcc",{"_index":4104,"title":{},"content":{"552":{"position":[[46,3],[336,3]]}},"keywords":{}}],["mean",{"_index":676,"title":{},"content":{"34":{"position":[[591,5]]},"45":{"position":[[98,7]]},"56":{"position":[[1821,7]]},"68":{"position":[[1398,5]]},"81":{"position":[[497,7]]},"83":{"position":[[456,5]]},"88":{"position":[[333,5]]},"94":{"position":[[2293,7]]},"109":{"position":[[343,5]]},"110":{"position":[[188,4]]},"113":{"position":[[445,5]]},"120":{"position":[[1968,7]]},"128":{"position":[[230,5]]},"159":{"position":[[229,8]]},"183":{"position":[[4535,5]]},"207":{"position":[[428,4]]},"209":{"position":[[1065,5]]},"239":{"position":[[869,4]]},"254":{"position":[[3301,7]]},"295":{"position":[[943,6]]},"309":{"position":[[973,5]]},"314":{"position":[[2876,7]]},"325":{"position":[[451,4]]},"331":{"position":[[335,7]]},"560":{"position":[[222,5]]},"660":{"position":[[63,5],[831,5]]},"724":{"position":[[600,5]]},"761":{"position":[[82,5]]},"763":{"position":[[223,5]]},"774":{"position":[[82,5]]},"776":{"position":[[223,5]]},"801":{"position":[[82,5]]},"803":{"position":[[223,5]]},"816":{"position":[[82,5]]},"818":{"position":[[223,5]]},"821":{"position":[[943,4]]},"832":{"position":[[82,5]]},"834":{"position":[[223,5]]},"846":{"position":[[225,5]]},"942":{"position":[[314,7]]},"1020":{"position":[[462,5]]},"1358":{"position":[[65,5]]},"1391":{"position":[[732,5],[802,5]]},"1440":{"position":[[418,7]]},"1452":{"position":[[1742,5]]},"1453":{"position":[[177,5],[646,5],[1467,5]]},"1459":{"position":[[121,7],[1169,4]]},"1465":{"position":[[246,5]]},"1470":{"position":[[912,8]]},"1471":{"position":[[443,5]]}},"keywords":{}}],["meaning",{"_index":2899,"title":{},"content":{"281":{"position":[[2496,10]]}},"keywords":{}}],["means.activity_typ",{"_index":4544,"title":{},"content":{"738":{"position":[[358,21]]}},"keywords":{}}],["measur",{"_index":1579,"title":{},"content":{"110":{"position":[[792,13],[1310,12]]},"221":{"position":[[2032,9]]},"1140":{"position":[[2680,8]]},"1316":{"position":[[2680,8]]},"1340":{"position":[[2680,8]]},"1351":{"position":[[2680,8]]},"1431":{"position":[[2703,8]]}},"keywords":{}}],["mechan",{"_index":1593,"title":{},"content":{"112":{"position":[[465,10],[515,10]]},"125":{"position":[[53,9],[1240,10]]},"197":{"position":[[133,9]]},"247":{"position":[[198,10]]},"306":{"position":[[441,10]]},"377":{"position":[[496,10]]},"428":{"position":[[127,9]]},"429":{"position":[[230,11],[923,10],[1055,9],[1376,9]]},"432":{"position":[[621,9],[636,9],[791,9],[894,9]]},"433":{"position":[[245,10]]},"578":{"position":[[362,9]]},"976":{"position":[[36,9]]},"1118":{"position":[[410,10]]}},"keywords":{}}],["mediamessagesoutgo",{"_index":5400,"title":{},"content":{"1110":{"position":[[399,21]]}},"keywords":{}}],["medium",{"_index":6147,"title":{},"content":{"1292":{"position":[[4523,6]]},"1306":{"position":[[4523,6]]},"1329":{"position":[[4523,6]]}},"keywords":{}}],["mediumblob",{"_index":6150,"title":{},"content":{"1292":{"position":[[4574,10]]},"1306":{"position":[[4574,10]]},"1329":{"position":[[4574,10]]}},"keywords":{}}],["mediumint",{"_index":6154,"title":{},"content":{"1292":{"position":[[4624,9]]},"1306":{"position":[[4624,9]]},"1329":{"position":[[4624,9]]}},"keywords":{}}],["mediumtext",{"_index":6159,"title":{},"content":{"1292":{"position":[[4682,10]]},"1306":{"position":[[4682,10]]},"1329":{"position":[[4682,10]]}},"keywords":{}}],["meet",{"_index":3053,"title":{},"content":{"308":{"position":[[428,4]]},"329":{"position":[[294,4]]},"367":{"position":[[4,4]]},"515":{"position":[[355,4]]},"571":{"position":[[312,4]]},"609":{"position":[[152,4]]},"617":{"position":[[254,4]]},"752":{"position":[[4,4]]},"790":{"position":[[4,4]]},"916":{"position":[[4,4]]},"917":{"position":[[21,4]]},"965":{"position":[[21,4]]},"1041":{"position":[[4,4]]},"1050":{"position":[[919,4]]},"1245":{"position":[[206,4]]},"1282":{"position":[[4,4]]},"1310":{"position":[[4,4]]},"1383":{"position":[[4,4]]},"1407":{"position":[[4,4]]},"1479":{"position":[[642,7]]}},"keywords":{}}],["meetingsengag",{"_index":4388,"title":{},"content":{"649":{"position":[[350,19]]}},"keywords":{}}],["megabyt",{"_index":50,"title":{},"content":{"1":{"position":[[629,9]]}},"keywords":{}}],["meltano",{"_index":794,"title":{},"content":{"53":{"position":[[96,7]]}},"keywords":{}}],["member",{"_index":1762,"title":{},"content":{"136":{"position":[[246,8]]},"173":{"position":[[1030,8]]},"523":{"position":[[83,6],[133,7]]},"529":{"position":[[420,7]]},"531":{"position":[[83,6]]},"532":{"position":[[83,6]]},"744":{"position":[[123,7]]},"1012":{"position":[[101,7]]},"1140":{"position":[[2718,6]]},"1292":{"position":[[4740,6]]},"1306":{"position":[[4740,6]]},"1316":{"position":[[2718,6]]},"1329":{"position":[[4740,6]]},"1340":{"position":[[2718,6]]},"1351":{"position":[[2718,6]]},"1354":{"position":[[92,6]]},"1356":{"position":[[161,7]]},"1379":{"position":[[2067,6]]},"1403":{"position":[[2067,6]]},"1414":{"position":[[2067,6]]},"1431":{"position":[[2741,6]]},"1477":{"position":[[724,6]]}},"keywords":{}}],["members)messag",{"_index":5179,"title":{},"content":{"1012":{"position":[[123,16]]}},"keywords":{}}],["membersblocksbouncesinvalid",{"_index":5139,"title":{},"content":{"979":{"position":[[194,27]]}},"keywords":{}}],["membership",{"_index":4025,"title":{},"content":{"529":{"position":[[457,11]]},"943":{"position":[[252,10]]}},"keywords":{}}],["membershipsd",{"_index":4383,"title":{},"content":{"649":{"position":[[250,15]]}},"keywords":{}}],["membershipsgroupsmacrosorganizationsorgan",{"_index":5447,"title":{},"content":{"1128":{"position":[[143,48]]}},"keywords":{}}],["membershipspostspost",{"_index":5448,"title":{},"content":{"1128":{"position":[[192,20]]}},"keywords":{}}],["memberstagsreleasesgroup",{"_index":4007,"title":{},"content":{"521":{"position":[[146,24]]}},"keywords":{}}],["memor",{"_index":4375,"title":{},"content":{"645":{"position":[[372,9]]},"652":{"position":[[372,9]]}},"keywords":{}}],["memori",{"_index":1592,"title":{},"content":{"112":{"position":[[420,6]]},"870":{"position":[[571,6],[652,6]]},"922":{"position":[[111,6]]},"1276":{"position":[[366,6]]},"1292":{"position":[[4787,6]]},"1306":{"position":[[4787,6]]},"1329":{"position":[[4787,6]]}},"keywords":{}}],["memoryoptimist",{"_index":3195,"title":{},"content":{"330":{"position":[[297,16]]}},"keywords":{}}],["mention",{"_index":2307,"title":{},"content":{"210":{"position":[[1571,9]]},"238":{"position":[[4,9]]},"254":{"position":[[3152,9]]},"296":{"position":[[7092,9]]},"313":{"position":[[3112,9]]},"314":{"position":[[2727,9]]},"1439":{"position":[[1189,9]]}},"keywords":{}}],["menu",{"_index":1109,"title":{},"content":{"80":{"position":[[328,5]]},"138":{"position":[[2761,4]]},"142":{"position":[[2846,4]]},"205":{"position":[[71,4]]}},"keywords":{}}],["merchant",{"_index":3760,"title":{},"content":{"454":{"position":[[167,8]]}},"keywords":{}}],["merchant_id",{"_index":3759,"title":{},"content":{"454":{"position":[[154,12]]},"455":{"position":[[137,12]]}},"keywords":{}}],["mere",{"_index":5227,"title":{},"content":{"1036":{"position":[[1056,6]]}},"keywords":{}}],["merg",{"_index":746,"title":{"1008":{"position":[[0,7]]},"1467":{"position":[[0,5]]}},"content":{"42":{"position":[[639,5]]},"62":{"position":[[599,5],[795,6]]},"67":{"position":[[1995,5]]},"115":{"position":[[1349,5]]},"121":{"position":[[999,6]]},"159":{"position":[[524,5]]},"163":{"position":[[152,5]]},"164":{"position":[[592,6],[640,5]]},"183":{"position":[[1900,5],[3706,5]]},"254":{"position":[[495,5],[1563,5]]},"281":{"position":[[2077,5],[3200,7]]},"296":{"position":[[586,5],[651,5],[1557,5],[1622,5],[1821,5],[1932,5],[2116,6],[2258,5],[2299,5]]},"492":{"position":[[545,5]]},"521":{"position":[[87,5]]},"665":{"position":[[545,5]]},"695":{"position":[[545,5]]},"909":{"position":[[854,5]]},"910":{"position":[[135,5]]},"925":{"position":[[854,5]]},"926":{"position":[[135,5]]},"936":{"position":[[854,5]]},"937":{"position":[[135,5]]},"952":{"position":[[854,5]]},"953":{"position":[[135,5]]},"970":{"position":[[854,5]]},"971":{"position":[[135,5]]},"977":{"position":[[307,7]]},"1008":{"position":[[714,5],[1836,5]]},"1140":{"position":[[2754,5]]},"1158":{"position":[[39,7]]},"1182":{"position":[[39,7]]},"1191":{"position":[[39,7]]},"1256":{"position":[[39,7]]},"1262":{"position":[[39,7]]},"1290":{"position":[[39,7]]},"1292":{"position":[[4834,5]]},"1304":{"position":[[39,7]]},"1306":{"position":[[4834,5]]},"1315":{"position":[[39,7]]},"1316":{"position":[[2754,5]]},"1327":{"position":[[39,7]]},"1329":{"position":[[4834,5]]},"1339":{"position":[[39,7]]},"1340":{"position":[[2754,5]]},"1350":{"position":[[39,7]]},"1351":{"position":[[2754,5]]},"1358":{"position":[[125,6],[265,6],[381,6]]},"1378":{"position":[[39,7]]},"1379":{"position":[[2117,5]]},"1389":{"position":[[39,7]]},"1402":{"position":[[39,7]]},"1403":{"position":[[2117,5]]},"1413":{"position":[[39,7]]},"1414":{"position":[[2117,5]]},"1430":{"position":[[39,7]]},"1431":{"position":[[2777,5]]},"1463":{"position":[[334,5]]},"1464":{"position":[[190,5]]},"1465":{"position":[[1068,5]]},"1466":{"position":[[149,5]]},"1467":{"position":[[0,5],[6,5],[201,5],[223,5],[317,6],[492,5],[543,5],[698,5],[715,5],[936,5],[1233,5],[1622,5],[1758,5],[1799,5],[1921,5],[2038,7],[2163,5],[2242,5],[2361,5],[2844,5]]},"1476":{"position":[[200,5],[1053,7],[1266,5]]},"1477":{"position":[[643,7],[970,5],[2756,6],[3192,5],[3850,5]]}},"keywords":{}}],["mergea",{"_index":6275,"title":{},"content":{"1358":{"position":[[877,6]]}},"keywords":{}}],["messag",{"_index":356,"title":{"602":{"position":[[14,7]]},"603":{"position":[[0,7]]},"1234":{"position":[[0,7]]}},"content":{"12":{"position":[[101,7]]},"20":{"position":[[16,8],[62,7],[254,8],[306,8],[413,7]]},"66":{"position":[[396,8]]},"183":{"position":[[4508,7]]},"209":{"position":[[274,8]]},"250":{"position":[[970,8],[1027,8],[1181,8]]},"307":{"position":[[548,7]]},"309":{"position":[[1557,7],[1857,7]]},"406":{"position":[[247,8],[366,8]]},"408":{"position":[[272,8],[373,8],[413,8],[440,8]]},"410":{"position":[[88,8],[189,8],[273,7]]},"411":{"position":[[22,8],[43,8],[195,8],[268,7]]},"427":{"position":[[31,8],[247,9],[329,9],[368,8]]},"590":{"position":[[428,8],[565,8],[602,8],[999,8],[1127,8]]},"598":{"position":[[223,8]]},"602":{"position":[[10,8],[153,9],[197,8],[364,8],[556,7],[611,7],[701,8]]},"603":{"position":[[16,8]]},"1015":{"position":[[213,8]]},"1118":{"position":[[555,8]]},"1230":{"position":[[665,8],[1256,8]]},"1234":{"position":[[30,7],[119,8],[197,8]]},"1362":{"position":[[638,8]]},"1434":{"position":[[42,7]]},"1442":{"position":[[51,8],[492,9],[561,8],[745,9]]},"1443":{"position":[[19,8],[178,9],[556,8],[801,9],[1150,8]]},"1444":{"position":[[20,8],[175,9],[255,7],[614,8],[873,8]]}},"keywords":{}}],["message_text",{"_index":6167,"title":{},"content":{"1292":{"position":[[4878,12]]},"1306":{"position":[[4878,12]]},"1329":{"position":[[4878,12]]}},"keywords":{}}],["messagesconvers",{"_index":5396,"title":{},"content":{"1110":{"position":[[294,20]]}},"keywords":{}}],["messagesestimatesestim",{"_index":4343,"title":{},"content":{"628":{"position":[[172,25]]}},"keywords":{}}],["messagesinvoic",{"_index":4340,"title":{},"content":{"628":{"position":[[108,15]]}},"keywords":{}}],["met",{"_index":1566,"title":{},"content":{"110":{"position":[[137,4]]},"200":{"position":[[89,4]]},"240":{"position":[[4029,3]]}},"keywords":{}}],["meta",{"_index":3063,"title":{},"content":{"313":{"position":[[3241,4]]},"515":{"position":[[426,4]]},"668":{"position":[[1,4]]}},"keywords":{}}],["metadata",{"_index":993,"title":{"67":{"position":[[18,9]]},"763":{"position":[[0,8]]},"776":{"position":[[0,8]]},"803":{"position":[[0,8]]},"818":{"position":[[0,8]]},"834":{"position":[[0,8]]},"1276":{"position":[[16,9]]}},"content":{"67":{"position":[[65,8]]},"82":{"position":[[1961,8],[3165,8],[4297,8]]},"159":{"position":[[95,8]]},"160":{"position":[[159,8]]},"237":{"position":[[1707,8]]},"321":{"position":[[250,9]]},"379":{"position":[[709,8]]},"595":{"position":[[741,8]]},"738":{"position":[[389,8]]},"763":{"position":[[135,9]]},"776":{"position":[[135,9]]},"803":{"position":[[135,9]]},"818":{"position":[[135,9]]},"834":{"position":[[135,9]]},"864":{"position":[[987,8]]},"876":{"position":[[838,8]]},"1138":{"position":[[694,8]]},"1151":{"position":[[679,8]]},"1156":{"position":[[377,8],[524,8],[595,8],[805,8]]},"1179":{"position":[[506,8]]},"1260":{"position":[[393,8]]},"1276":{"position":[[19,8],[198,8],[328,8],[407,8],[454,8]]},"1313":{"position":[[504,8]]},"1337":{"position":[[504,8]]},"1348":{"position":[[504,8]]},"1386":{"position":[[477,8]]},"1391":{"position":[[262,9],[388,8]]},"1427":{"position":[[445,8]]}},"keywords":{}}],["metal",{"_index":1100,"title":{},"content":{"76":{"position":[[929,6]]}},"keywords":{}}],["metal_typ",{"_index":1099,"title":{},"content":{"76":{"position":[[867,11]]}},"keywords":{}}],["method",{"_index":908,"title":{"354":{"position":[[4,6]]}},"content":{"60":{"position":[[932,6]]},"61":{"position":[[438,6]]},"102":{"position":[[86,7]]},"104":{"position":[[105,7]]},"196":{"position":[[35,6]]},"208":{"position":[[1722,6]]},"233":{"position":[[35,6]]},"351":{"position":[[489,7]]},"354":{"position":[[22,6]]},"359":{"position":[[72,7],[467,7]]},"370":{"position":[[2190,7]]},"387":{"position":[[80,7],[350,7],[1490,7]]},"388":{"position":[[62,7]]},"408":{"position":[[699,7]]},"424":{"position":[[522,7]]},"429":{"position":[[406,7],[552,7],[812,8],[1432,7]]},"432":{"position":[[1311,7]]},"448":{"position":[[80,7],[321,6],[1375,7]]},"449":{"position":[[62,7]]},"454":{"position":[[711,7]]},"460":{"position":[[728,7]]},"466":{"position":[[435,7]]},"473":{"position":[[62,7]]},"496":{"position":[[705,7]]},"499":{"position":[[220,7],[326,7]]},"509":{"position":[[701,7]]},"513":{"position":[[242,6],[271,6]]},"517":{"position":[[4136,7]]},"518":{"position":[[62,7]]},"522":{"position":[[249,6],[278,6],[330,6]]},"527":{"position":[[62,7]]},"530":{"position":[[249,6],[278,6],[330,6]]},"534":{"position":[[80,7],[582,6],[1851,7]]},"535":{"position":[[62,7]]},"551":{"position":[[241,6],[270,6]]},"556":{"position":[[80,7],[2353,7]]},"557":{"position":[[62,7]]},"569":{"position":[[273,6],[302,6]]},"573":{"position":[[84,7],[362,7],[1422,7]]},"575":{"position":[[48,7]]},"581":{"position":[[498,7]]},"584":{"position":[[71,7],[330,6],[1485,7]]},"586":{"position":[[48,7]]},"607":{"position":[[272,6],[301,6]]},"611":{"position":[[80,7],[1354,7]]},"612":{"position":[[62,7]]},"614":{"position":[[256,6],[285,6]]},"619":{"position":[[84,7],[317,7],[731,7]]},"625":{"position":[[334,7]]},"631":{"position":[[662,7]]},"634":{"position":[[212,7],[318,7]]},"646":{"position":[[356,7]]},"650":{"position":[[222,6],[251,6]]},"654":{"position":[[77,7],[946,6]]},"670":{"position":[[822,7]]},"685":{"position":[[634,7]]},"700":{"position":[[473,7]]},"706":{"position":[[472,7]]},"712":{"position":[[664,7]]},"716":{"position":[[258,6],[287,6]]},"720":{"position":[[80,7],[496,6],[963,7]]},"721":{"position":[[62,7]]},"731":{"position":[[215,6],[244,6]]},"735":{"position":[[72,7],[537,7]]},"741":{"position":[[649,7]]},"747":{"position":[[1532,7]]},"757":{"position":[[2141,7]]},"770":{"position":[[2141,7]]},"797":{"position":[[2148,7]]},"812":{"position":[[2148,7]]},"828":{"position":[[2148,7]]},"851":{"position":[[753,7]]},"859":{"position":[[80,7],[295,7]]},"860":{"position":[[62,7]]},"879":{"position":[[467,6]]},"885":{"position":[[784,7]]},"895":{"position":[[412,6]]},"897":{"position":[[428,7]]},"907":{"position":[[1595,7]]},"923":{"position":[[1595,7]]},"934":{"position":[[1595,7]]},"943":{"position":[[825,6],[887,7]]},"950":{"position":[[1595,7]]},"959":{"position":[[529,7]]},"968":{"position":[[1595,7]]},"975":{"position":[[128,8]]},"982":{"position":[[531,7]]},"991":{"position":[[80,7]]},"997":{"position":[[497,7]]},"1009":{"position":[[80,7],[1794,7]]},"1010":{"position":[[62,7]]},"1015":{"position":[[584,7]]},"1028":{"position":[[534,7]]},"1070":{"position":[[80,7],[1145,7]]},"1071":{"position":[[62,7]]},"1076":{"position":[[927,7]]},"1085":{"position":[[80,6],[324,6],[346,6],[1513,7]]},"1086":{"position":[[53,6]]},"1094":{"position":[[599,7]]},"1101":{"position":[[439,7]]},"1107":{"position":[[554,7]]},"1113":{"position":[[628,7]]},"1129":{"position":[[180,7]]},"1133":{"position":[[97,6],[1350,7]]},"1140":{"position":[[2792,6]]},"1227":{"position":[[38,7]]},"1228":{"position":[[35,6]]},"1231":{"position":[[48,6]]},"1239":{"position":[[123,7],[136,6],[148,6]]},"1241":{"position":[[207,7]]},"1243":{"position":[[1382,6]]},"1247":{"position":[[71,7],[631,7]]},"1248":{"position":[[48,6]]},"1316":{"position":[[2792,6]]},"1340":{"position":[[2792,6]]},"1351":{"position":[[2792,6]]},"1379":{"position":[[2163,6]]},"1403":{"position":[[2163,6]]},"1414":{"position":[[2163,6]]},"1431":{"position":[[2815,6]]},"1456":{"position":[[371,7],[395,6]]},"1471":{"position":[[125,6]]},"1472":{"position":[[107,6]]}},"keywords":{}}],["method"authent",{"_index":4953,"title":{},"content":{"895":{"position":[[302,24]]}},"keywords":{}}],["methodsship",{"_index":5373,"title":{},"content":{"1096":{"position":[[354,15],[398,15]]}},"keywords":{}}],["metric",{"_index":1948,"title":{},"content":{"164":{"position":[[1422,6]]},"487":{"position":[[584,6]]},"556":{"position":[[1574,7]]},"574":{"position":[[424,7],[479,7],[585,8]]},"1128":{"position":[[368,6]]}},"keywords":{}}],["metrics.act",{"_index":3941,"title":{},"content":{"517":{"position":[[395,14]]}},"keywords":{}}],["metricschannelsemail",{"_index":4449,"title":{},"content":{"697":{"position":[[90,20]]}},"keywords":{}}],["metricsga:brows",{"_index":4167,"title":{},"content":{"574":{"position":[[693,17]]}},"keywords":{}}],["metricsticket",{"_index":5458,"title":{},"content":{"1128":{"position":[[354,13]]}},"keywords":{}}],["mib",{"_index":5021,"title":{},"content":{"912":{"position":[[939,3]]},"1170":{"position":[[1136,4]]},"1220":{"position":[[813,4]]}},"keywords":{}}],["micro",{"_index":1927,"title":{},"content":{"163":{"position":[[852,5]]},"331":{"position":[[315,5]]},"1391":{"position":[[173,5],[237,5],[432,5],[974,5],[1031,5]]}},"keywords":{}}],["microsecond",{"_index":5770,"title":{},"content":{"1164":{"position":[[390,11]]},"1172":{"position":[[575,11],[664,11]]},"1222":{"position":[[575,11],[664,11]]},"1292":{"position":[[4927,11]]},"1306":{"position":[[4927,11]]},"1329":{"position":[[4927,11]]}},"keywords":{}}],["microsoft",{"_index":1758,"title":{"436":{"position":[[8,9]]},"445":{"position":[[34,9]]},"1038":{"position":[[0,9]]},"1405":{"position":[[0,9]]}},"content":{"136":{"position":[[19,10]]},"363":{"position":[[1635,9]]},"444":{"position":[[49,10]]},"448":{"position":[[415,9],[543,9],[1074,9]]},"1282":{"position":[[253,9]]},"1288":{"position":[[227,9]]},"1310":{"position":[[268,9]]}},"keywords":{}}],["middl",{"_index":5737,"title":{},"content":{"1147":{"position":[[149,6]]},"1174":{"position":[[149,6]]},"1216":{"position":[[149,6]]},"1224":{"position":[[149,6]]}},"keywords":{}}],["middleint",{"_index":6173,"title":{},"content":{"1292":{"position":[[4978,9]]},"1306":{"position":[[4978,9]]},"1329":{"position":[[4978,9]]}},"keywords":{}}],["migrat",{"_index":1337,"title":{"100":{"position":[[0,11]]}},"content":{"94":{"position":[[448,10],[627,11]]},"97":{"position":[[312,11]]},"100":{"position":[[182,11],[203,10],[238,10],[374,11],[650,9],[707,9],[809,10],[1357,10]]},"105":{"position":[[1044,7]]},"183":{"position":[[1296,11],[3810,11]]},"268":{"position":[[398,10],[415,10],[928,11],[1722,9],[1752,10]]},"278":{"position":[[37,10],[501,10],[782,10],[975,11],[1641,9],[1658,10],[1680,10]]},"279":{"position":[[1238,11]]},"280":{"position":[[1488,11]]},"760":{"position":[[834,10]]},"773":{"position":[[834,10]]},"800":{"position":[[834,10]]},"815":{"position":[[834,10]]},"831":{"position":[[834,10]]},"1292":{"position":[[5022,7]]},"1306":{"position":[[5022,7]]},"1329":{"position":[[5022,7]]}},"keywords":{}}],["miibij",{"_index":6376,"title":{},"content":{"1384":{"position":[[517,9]]}},"keywords":{}}],["miicxaibaakbgqcjo7g6r+kv2mms8suw21sk2twhg8vog0fjimewjewyaffm/toi",{"_index":1242,"title":{},"content":{"83":{"position":[[1507,64]]},"371":{"position":[[426,64]]},"1139":{"position":[[313,64]]}},"keywords":{}}],["miiev",{"_index":6392,"title":{},"content":{"1387":{"position":[[875,9]]}},"keywords":{}}],["mileston",{"_index":4026,"title":{},"content":{"529":{"position":[[494,10]]}},"keywords":{}}],["milestonesgroup",{"_index":4006,"title":{},"content":{"521":{"position":[[118,15]]}},"keywords":{}}],["milestonesproject",{"_index":4004,"title":{},"content":{"521":{"position":[[69,17]]}},"keywords":{}}],["million",{"_index":2689,"title":{},"content":{"253":{"position":[[672,8]]},"313":{"position":[[672,8]]},"1243":{"position":[[346,7],[422,7]]}},"keywords":{}}],["millisecond",{"_index":673,"title":{},"content":{"34":{"position":[[428,13]]},"36":{"position":[[361,13]]},"77":{"position":[[554,12]]},"124":{"position":[[111,12]]}},"keywords":{}}],["mime",{"_index":3598,"title":{},"content":{"417":{"position":[[1781,4]]},"502":{"position":[[1429,4]]},"545":{"position":[[1383,4]]},"637":{"position":[[943,4]]},"1021":{"position":[[1940,4]]}},"keywords":{}}],["min",{"_index":5646,"title":{},"content":{"1140":{"position":[[2829,3]]},"1316":{"position":[[2829,3]]},"1340":{"position":[[2829,3]]},"1351":{"position":[[2829,3]]},"1379":{"position":[[2207,3]]},"1403":{"position":[[2207,3]]},"1414":{"position":[[2207,3]]},"1431":{"position":[[2852,3]]},"1476":{"position":[[242,4],[485,4],[543,4],[661,4],[1308,4],[1322,3],[1712,4],[1789,4],[1866,4],[1943,4],[2060,3],[2172,4]]}},"keywords":{}}],["min/max",{"_index":6710,"title":{},"content":{"1476":{"position":[[377,7],[1578,7]]}},"keywords":{}}],["min=1",{"_index":4161,"title":{},"content":{"573":{"position":[[1197,7]]}},"keywords":{}}],["min_row",{"_index":6182,"title":{},"content":{"1292":{"position":[[5185,8]]},"1306":{"position":[[5185,8]]},"1329":{"position":[[5185,8]]}},"keywords":{}}],["mind",{"_index":918,"title":{},"content":{"61":{"position":[[353,4]]},"72":{"position":[[445,4]]},"162":{"position":[[1133,5]]},"207":{"position":[[231,5]]},"227":{"position":[[338,7]]},"268":{"position":[[1217,5]]},"269":{"position":[[788,5]]},"270":{"position":[[1422,4]]},"489":{"position":[[315,4]]},"662":{"position":[[315,4]]},"677":{"position":[[315,4]]},"692":{"position":[[315,4]]},"1459":{"position":[[1628,4]]}},"keywords":{}}],["minim",{"_index":995,"title":{"1476":{"position":[[0,8]]}},"content":{"67":{"position":[[89,10]]},"157":{"position":[[355,7]]},"163":{"position":[[1188,10]]},"165":{"position":[[2143,9]]},"209":{"position":[[795,7]]},"290":{"position":[[1288,7]]},"330":{"position":[[97,8]]},"371":{"position":[[3,7]]},"393":{"position":[[3,7]]},"398":{"position":[[3,7]]},"758":{"position":[[3,7]]},"771":{"position":[[3,7]]},"798":{"position":[[3,7]]},"813":{"position":[[3,7]]},"821":{"position":[[882,8]]},"829":{"position":[[3,7]]},"908":{"position":[[3,7]]},"924":{"position":[[3,7]]},"935":{"position":[[3,7]]},"951":{"position":[[3,7]]},"969":{"position":[[3,7]]},"1388":{"position":[[274,8]]},"1476":{"position":[[0,8],[22,8],[269,8],[693,8],[839,8],[1429,8]]}},"keywords":{}}],["minimum",{"_index":554,"title":{},"content":{"20":{"position":[[1064,7]]},"156":{"position":[[346,7]]},"209":{"position":[[1632,7],[1672,7]]},"343":{"position":[[812,7]]},"377":{"position":[[885,7]]},"584":{"position":[[1218,7]]},"785":{"position":[[792,7],[884,7]]},"989":{"position":[[228,7]]},"1004":{"position":[[311,7]]},"1186":{"position":[[391,7]]},"1388":{"position":[[175,7]]},"1391":{"position":[[284,7]]},"1476":{"position":[[1008,7],[1114,7]]}},"keywords":{}}],["minitem",{"_index":1951,"title":{},"content":{"164":{"position":[[1903,9]]}},"keywords":{}}],["mintxndur",{"_index":3236,"title":{},"content":{"343":{"position":[[796,15]]},"344":{"position":[[380,15]]}},"keywords":{}}],["minu",{"_index":5817,"title":{},"content":{"1192":{"position":[[535,5]]},"1394":{"position":[[927,5]]}},"keywords":{}}],["minut",{"_index":860,"title":{},"content":{"56":{"position":[[2478,8],[2541,8],[2616,8],[2653,8]]},"110":{"position":[[174,7],[271,7]]},"124":{"position":[[171,7]]},"240":{"position":[[3081,7]]},"241":{"position":[[126,8]]},"296":{"position":[[7981,7]]},"343":{"position":[[759,7]]},"375":{"position":[[184,6]]},"377":{"position":[[605,8]]},"387":{"position":[[1126,7]]},"509":{"position":[[194,6],[228,6],[312,6]]},"595":{"position":[[1262,8]]},"642":{"position":[[234,7]]},"789":{"position":[[1065,7]]},"842":{"position":[[2845,8]]},"900":{"position":[[218,6]]},"912":{"position":[[884,8]]},"1036":{"position":[[309,7]]},"1068":{"position":[[69,7]]},"1113":{"position":[[412,8]]},"1140":{"position":[[2868,6]]},"1186":{"position":[[599,8]]},"1292":{"position":[[5068,6]]},"1306":{"position":[[5068,6]]},"1316":{"position":[[2868,6]]},"1329":{"position":[[5068,6]]},"1340":{"position":[[2868,6]]},"1351":{"position":[[2868,6]]},"1379":{"position":[[2255,6]]},"1388":{"position":[[524,6]]},"1403":{"position":[[2255,6]]},"1414":{"position":[[2255,6]]},"1431":{"position":[[2891,6]]},"1452":{"position":[[551,7],[2503,7],[2537,8]]},"1475":{"position":[[418,6]]}},"keywords":{}}],["minute_micro",{"_index":6178,"title":{},"content":{"1292":{"position":[[5108,13]]},"1306":{"position":[[5108,13]]},"1329":{"position":[[5108,13]]}},"keywords":{}}],["minute_second",{"_index":6181,"title":{},"content":{"1292":{"position":[[5147,13]]},"1306":{"position":[[5147,13]]},"1329":{"position":[[5147,13]]}},"keywords":{}}],["mirror",{"_index":1769,"title":{},"content":{"137":{"position":[[234,7]]},"1358":{"position":[[701,6]]}},"keywords":{}}],["mismatch",{"_index":395,"title":{},"content":{"13":{"position":[[704,10]]},"41":{"position":[[622,8]]},"158":{"position":[[778,10]]},"869":{"position":[[941,9]]}},"keywords":{}}],["miss",{"_index":1851,"title":{},"content":{"154":{"position":[[1955,8]]},"166":{"position":[[163,7],[250,7]]},"228":{"position":[[747,7]]},"229":{"position":[[441,7]]},"230":{"position":[[713,8],[1129,7]]},"281":{"position":[[1660,8]]},"1008":{"position":[[1792,8],[1866,7]]},"1047":{"position":[[946,7]]},"1055":{"position":[[946,7]]},"1063":{"position":[[946,7]]}},"keywords":{}}],["misspelt",{"_index":1872,"title":{},"content":{"158":{"position":[[864,8]]}},"keywords":{}}],["mistak",{"_index":1861,"title":{},"content":{"156":{"position":[[743,8]]},"329":{"position":[[915,8]]}},"keywords":{}}],["mix",{"_index":576,"title":{},"content":{"23":{"position":[[9,3]]},"33":{"position":[[371,3]]},"82":{"position":[[3489,3]]},"107":{"position":[[2071,6]]},"219":{"position":[[205,6]]},"286":{"position":[[386,3]]},"330":{"position":[[6,5]]}},"keywords":{}}],["mixpanel",{"_index":3365,"title":{"743":{"position":[[0,8]]}},"content":{"364":{"position":[[2632,8]]},"744":{"position":[[56,8]]},"745":{"position":[[15,8],[56,8]]},"746":{"position":[[250,8]]},"747":{"position":[[559,8],[1081,8],[1431,8]]}},"keywords":{}}],["mixpanel.dev",{"_index":3366,"title":{},"content":{"364":{"position":[[2687,12]]}},"keywords":{}}],["mixpanel:dev",{"_index":4566,"title":{},"content":{"748":{"position":[[90,12]]}},"keywords":{}}],["mm",{"_index":3493,"title":{},"content":{"387":{"position":[[1239,2]]},"448":{"position":[[987,2]]},"496":{"position":[[455,2]]},"517":{"position":[[1519,2],[2071,2],[2684,2],[3845,2]]},"534":{"position":[[1484,2]]},"573":{"position":[[752,2]]},"584":{"position":[[807,2]]},"670":{"position":[[545,2]]},"747":{"position":[[717,2],[934,2]]},"859":{"position":[[540,2]]},"891":{"position":[[207,2]]},"895":{"position":[[203,2]]},"897":{"position":[[109,2]]},"959":{"position":[[253,2]]},"982":{"position":[[255,2]]},"1009":{"position":[[877,2]]},"1085":{"position":[[811,2],[1215,2]]},"1094":{"position":[[381,2]]},"1107":{"position":[[180,2]]},"1133":{"position":[[874,2]]}},"keywords":{}}],["mobil",{"_index":499,"title":{},"content":{"17":{"position":[[666,6]]}},"keywords":{}}],["mobileavail",{"_index":5392,"title":{},"content":{"1110":{"position":[[190,15]]}},"keywords":{}}],["mock",{"_index":2500,"title":{},"content":{"236":{"position":[[422,4]]}},"keywords":{}}],["mod",{"_index":5649,"title":{},"content":{"1140":{"position":[[2907,3]]},"1292":{"position":[[5232,3]]},"1306":{"position":[[5232,3]]},"1316":{"position":[[2907,3]]},"1329":{"position":[[5232,3]]},"1340":{"position":[[2907,3]]},"1351":{"position":[[2907,3]]},"1379":{"position":[[2295,3]]},"1403":{"position":[[2295,3]]},"1414":{"position":[[2295,3]]},"1431":{"position":[[2930,3]]}},"keywords":{}}],["modal",{"_index":2310,"title":{},"content":{"210":{"position":[[1912,5]]}},"keywords":{}}],["mode",{"_index":1535,"title":{"595":{"position":[[9,5]]},"869":{"position":[[11,6]]},"1268":{"position":[[14,5]]}},"content":{"107":{"position":[[1155,5]]},"125":{"position":[[725,5]]},"138":{"position":[[1557,5],[1589,6]]},"141":{"position":[[1137,4],[1160,6],[1562,5],[1594,6]]},"142":{"position":[[1574,5],[1606,6]]},"307":{"position":[[1215,5],[2065,5]]},"351":{"position":[[473,4]]},"359":{"position":[[451,4]]},"370":{"position":[[2174,4]]},"379":{"position":[[1043,5],[1078,6]]},"387":{"position":[[1474,4]]},"408":{"position":[[683,4]]},"424":{"position":[[506,4]]},"432":{"position":[[1295,4]]},"448":{"position":[[1359,4]]},"454":{"position":[[695,4]]},"460":{"position":[[712,4]]},"466":{"position":[[419,4]]},"496":{"position":[[689,4]]},"509":{"position":[[685,4]]},"517":{"position":[[4120,4]]},"534":{"position":[[1835,4]]},"556":{"position":[[2337,4]]},"573":{"position":[[1406,4]]},"584":{"position":[[1469,4]]},"593":{"position":[[401,4]]},"595":{"position":[[454,4],[1052,4],[1528,4],[1873,4]]},"611":{"position":[[1338,4]]},"619":{"position":[[715,4]]},"625":{"position":[[318,4]]},"631":{"position":[[646,4]]},"654":{"position":[[930,4]]},"670":{"position":[[806,4]]},"685":{"position":[[618,4]]},"700":{"position":[[457,4]]},"706":{"position":[[456,4]]},"712":{"position":[[648,4]]},"720":{"position":[[947,4]]},"735":{"position":[[521,4]]},"741":{"position":[[633,4]]},"747":{"position":[[1516,4]]},"757":{"position":[[2125,4]]},"759":{"position":[[236,6]]},"770":{"position":[[2125,4]]},"772":{"position":[[247,6]]},"797":{"position":[[2132,4]]},"799":{"position":[[234,6]]},"812":{"position":[[2132,4]]},"814":{"position":[[234,6]]},"828":{"position":[[2132,4]]},"830":{"position":[[234,6]]},"845":{"position":[[32,5]]},"851":{"position":[[737,4]]},"859":{"position":[[866,4]]},"867":{"position":[[412,4],[1298,4],[1392,4],[1497,4]]},"869":{"position":[[1330,4],[1414,4],[1452,6],[1478,4],[1580,4],[1603,4],[1691,4]]},"885":{"position":[[768,4]]},"897":{"position":[[412,4]]},"907":{"position":[[1306,4],[1579,4],[1651,5],[1743,4],[1932,4]]},"923":{"position":[[1306,4],[1579,4],[1651,5],[1743,4],[1932,4]]},"934":{"position":[[1306,4],[1579,4]]},"950":{"position":[[1306,4],[1579,4]]},"959":{"position":[[513,4]]},"968":{"position":[[1306,4],[1579,4],[1651,5],[1743,4],[1932,4]]},"982":{"position":[[515,4]]},"997":{"position":[[481,4]]},"1009":{"position":[[1778,4]]},"1015":{"position":[[568,4]]},"1020":{"position":[[14,4],[748,4],[1137,4]]},"1028":{"position":[[518,4]]},"1070":{"position":[[1129,4]]},"1076":{"position":[[911,4]]},"1085":{"position":[[1497,4]]},"1094":{"position":[[583,4]]},"1101":{"position":[[423,4]]},"1107":{"position":[[538,4]]},"1113":{"position":[[612,4]]},"1133":{"position":[[1334,4]]},"1208":{"position":[[146,5]]},"1268":{"position":[[21,4],[133,5],[730,5]]},"1279":{"position":[[47,5]]},"1285":{"position":[[879,4],[1076,4],[1204,5],[1316,5]]},"1286":{"position":[[1625,5],[2153,5],[2347,5]]},"1292":{"position":[[5270,4]]},"1300":{"position":[[879,4],[1076,4],[1204,5],[1316,5]]},"1301":{"position":[[1461,5],[1989,5],[2183,5]]},"1306":{"position":[[5270,4]]},"1313":{"position":[[733,4],[1401,5],[1493,4],[1682,4]]},"1324":{"position":[[879,4],[1076,4],[1204,5],[1316,5]]},"1325":{"position":[[1625,5],[2153,5],[2347,5]]},"1329":{"position":[[5270,4]]},"1337":{"position":[[733,4],[1401,5],[1493,4],[1682,4]]},"1348":{"position":[[733,4]]},"1358":{"position":[[54,5]]},"1437":{"position":[[981,4]]},"1438":{"position":[[640,4]]},"1440":{"position":[[138,5],[905,5]]},"1443":{"position":[[1119,4]]}},"keywords":{}}],["mode.verify_ident",{"_index":5934,"title":{},"content":{"1268":{"position":[[550,21]]}},"keywords":{}}],["model",{"_index":638,"title":{"590":{"position":[[5,6]]},"779":{"position":[[5,6]]},"1250":{"position":[[5,6]]}},"content":{"27":{"position":[[712,6]]},"38":{"position":[[169,6]]},"158":{"position":[[30,5]]},"319":{"position":[[1396,8],[1513,6],[1557,5]]},"322":{"position":[[187,5]]},"323":{"position":[[117,5],[242,6],[280,8],[392,5]]},"324":{"position":[[391,5]]},"330":{"position":[[461,6]]},"331":{"position":[[136,5]]},"548":{"position":[[296,5]]},"590":{"position":[[41,5]]},"594":{"position":[[1059,5]]},"779":{"position":[[39,5]]},"1274":{"position":[[236,5]]},"1277":{"position":[[192,5],[537,5],[556,5]]}},"keywords":{}}],["modelconsist",{"_index":5916,"title":{},"content":{"1250":{"position":[[39,13]]}},"keywords":{}}],["modeltag",{"_index":1855,"title":{},"content":{"156":{"position":[[217,11]]}},"keywords":{}}],["modern",{"_index":2620,"title":{},"content":{"241":{"position":[[416,6]]},"325":{"position":[[1,6]]}},"keywords":{}}],["modif",{"_index":2181,"title":{},"content":{"197":{"position":[[57,13],[939,13]]},"239":{"position":[[2513,13]]},"254":{"position":[[1836,14]]},"417":{"position":[[436,12]]},"438":{"position":[[436,12]]},"502":{"position":[[896,12]]},"545":{"position":[[436,12]]},"842":{"position":[[2168,14]]},"976":{"position":[[336,13]]},"1020":{"position":[[89,12],[320,12],[388,12],[501,12],[607,12],[1343,12]]},"1021":{"position":[[1482,12]]},"1118":{"position":[[1014,13]]}},"keywords":{}}],["modifi",{"_index":808,"title":{},"content":{"54":{"position":[[458,6]]},"67":{"position":[[911,8],[1527,9]]},"119":{"position":[[503,6]]},"150":{"position":[[193,6]]},"154":{"position":[[2145,6]]},"162":{"position":[[1236,9]]},"197":{"position":[[1316,6]]},"217":{"position":[[1514,6]]},"219":{"position":[[541,6]]},"236":{"position":[[1674,9]]},"253":{"position":[[3209,8]]},"290":{"position":[[1382,6]]},"296":{"position":[[4160,6],[5823,6]]},"307":{"position":[[2672,8]]},"315":{"position":[[639,6]]},"370":{"position":[[722,6]]},"377":{"position":[[148,6]]},"417":{"position":[[131,6]]},"427":{"position":[[145,6]]},"438":{"position":[[131,6]]},"483":{"position":[[311,6]]},"502":{"position":[[591,6]]},"545":{"position":[[131,6]]},"635":{"position":[[215,8]]},"752":{"position":[[175,8]]},"762":{"position":[[226,8]]},"767":{"position":[[69,6],[1002,6],[1443,6]]},"775":{"position":[[226,8]]},"791":{"position":[[128,8]]},"792":{"position":[[368,6],[1307,6],[1494,9]]},"794":{"position":[[641,6]]},"802":{"position":[[226,8]]},"809":{"position":[[641,6]]},"817":{"position":[[226,8]]},"824":{"position":[[182,6],[1068,6],[1507,6]]},"833":{"position":[[226,8]]},"904":{"position":[[182,6],[1068,6]]},"907":{"position":[[505,6]]},"918":{"position":[[368,6],[1359,6]]},"923":{"position":[[505,6]]},"934":{"position":[[505,6]]},"942":{"position":[[30,8]]},"950":{"position":[[505,6]]},"968":{"position":[[505,6]]},"1021":{"position":[[1153,6]]},"1032":{"position":[[149,6]]},"1034":{"position":[[732,6]]},"1045":{"position":[[490,6]]},"1051":{"position":[[182,6]]},"1053":{"position":[[490,6]]},"1061":{"position":[[490,6]]},"1140":{"position":[[2938,8]]},"1277":{"position":[[761,6]]},"1285":{"position":[[836,6]]},"1286":{"position":[[698,6]]},"1289":{"position":[[369,6]]},"1292":{"position":[[5310,8],[5351,6]]},"1300":{"position":[[836,6]]},"1306":{"position":[[5310,8],[5351,6]]},"1313":{"position":[[690,6]]},"1316":{"position":[[2938,8]]},"1321":{"position":[[149,6]]},"1324":{"position":[[836,6]]},"1325":{"position":[[698,6]]},"1329":{"position":[[5310,8],[5351,6]]},"1334":{"position":[[149,6]]},"1337":{"position":[[690,6]]},"1340":{"position":[[2938,8]]},"1348":{"position":[[690,6]]},"1351":{"position":[[2938,8]]},"1373":{"position":[[182,6]]},"1374":{"position":[[182,6]]},"1379":{"position":[[2335,8],[2384,6]]},"1403":{"position":[[2335,8],[2384,6]]},"1414":{"position":[[2335,8],[2384,6]]},"1417":{"position":[[386,7]]},"1431":{"position":[[2961,8]]},"1461":{"position":[[2967,6]]}},"keywords":{}}],["modul",{"_index":620,"title":{"103":{"position":[[0,8]]}},"content":{"26":{"position":[[644,8]]},"64":{"position":[[687,7],[714,6],[804,6],[919,6]]},"91":{"position":[[105,7],[230,7],[429,8]]},"94":{"position":[[827,6],[1007,7],[2503,7]]},"103":{"position":[[61,7],[223,7],[241,7],[489,7],[863,8]]},"104":{"position":[[64,6]]},"269":{"position":[[557,7]]},"271":{"position":[[320,7]]},"281":{"position":[[520,6],[577,6],[729,6],[816,7],[966,7],[1157,6],[1685,6],[2565,7]]},"296":{"position":[[704,7],[2705,7]]},"314":{"position":[[412,7],[2267,7]]},"848":{"position":[[209,7]]},"1140":{"position":[[2980,6]]},"1316":{"position":[[2980,6]]},"1340":{"position":[[2980,6]]},"1351":{"position":[[2980,6]]},"1379":{"position":[[2432,6]]},"1403":{"position":[[2432,6]]},"1414":{"position":[[2432,6]]},"1431":{"position":[[3003,6]]}},"keywords":{}}],["moment",{"_index":1004,"title":{},"content":{"67":{"position":[[806,6]]},"241":{"position":[[274,6]]},"373":{"position":[[738,6]]},"1036":{"position":[[1027,6]]},"1369":{"position":[[54,7]]}},"keywords":{}}],["monday",{"_index":6530,"title":{},"content":{"1452":{"position":[[1365,7],[1409,8],[4338,6],[4486,7]]}},"keywords":{}}],["mongodb",{"_index":1956,"title":{"194":{"position":[[19,7]]},"197":{"position":[[31,8]]},"200":{"position":[[11,8]]},"204":{"position":[[10,8]]},"206":{"position":[[0,7]]},"778":{"position":[[0,7]]},"1249":{"position":[[0,7]]}},"content":{"165":{"position":[[671,8],[680,7],[818,7],[891,7]]},"197":{"position":[[18,7],[185,7],[641,7],[1095,8],[1268,8],[1426,7]]},"198":{"position":[[59,8]]},"199":{"position":[[148,7],[209,7],[317,7]]},"200":{"position":[[12,7]]},"201":{"position":[[57,7]]},"202":{"position":[[41,7],[100,7],[234,7]]},"203":{"position":[[65,7],[165,7],[266,7],[485,7]]},"204":{"position":[[306,7]]},"205":{"position":[[183,10]]},"206":{"position":[[284,7],[382,7],[460,7]]},"207":{"position":[[301,8],[781,7],[1341,7],[1521,7]]},"208":{"position":[[171,8],[539,7]]},"209":{"position":[[701,7],[945,7]]},"210":{"position":[[106,7],[1704,8],[1730,7],[4045,7]]},"211":{"position":[[32,7],[211,7],[527,7],[819,7]]},"212":{"position":[[122,8]]},"363":{"position":[[1716,7]]},"779":{"position":[[1,7],[156,7]]},"780":{"position":[[50,7],[100,7],[259,7],[461,7],[484,7]]},"781":{"position":[[247,7]]},"784":{"position":[[41,7]]},"786":{"position":[[331,7],[415,7]]},"1120":{"position":[[1306,7]]},"1250":{"position":[[1,7],[157,7]]},"1251":{"position":[[50,7],[111,7],[222,7],[245,7]]},"1255":{"position":[[41,7]]}},"keywords":{}}],["mongodb'",{"_index":2416,"title":{},"content":{"211":{"position":[[281,9]]}},"keywords":{}}],["mongodb+srv://host",{"_index":4682,"title":{},"content":{"782":{"position":[[158,19]]},"1253":{"position":[[158,19]]}},"keywords":{}}],["mongodb:dev",{"_index":3307,"title":{},"content":{"363":{"position":[[1770,11]]},"783":{"position":[[89,11]]},"1120":{"position":[[1365,11]]},"1254":{"position":[[102,11]]}},"keywords":{}}],["mongosh",{"_index":2224,"title":{},"content":{"204":{"position":[[616,7],[764,7]]}},"keywords":{}}],["monitor",{"_index":643,"title":{},"content":{"30":{"position":[[62,8]]},"137":{"position":[[555,7]]},"138":{"position":[[150,7]]},"142":{"position":[[175,7]]},"180":{"position":[[122,8]]},"191":{"position":[[1807,8]]},"197":{"position":[[242,10]]},"209":{"position":[[433,10],[599,8],[1002,10]]},"211":{"position":[[810,8]]},"240":{"position":[[1768,8]]},"377":{"position":[[1637,8]]},"487":{"position":[[22,10],[519,10],[565,7]]},"1032":{"position":[[1426,8]]},"1077":{"position":[[793,7]]},"1363":{"position":[[356,7]]},"1383":{"position":[[1755,8]]},"1472":{"position":[[157,7]]}},"keywords":{}}],["monitorfor",{"_index":5822,"title":{},"content":{"1194":{"position":[[258,10]]}},"keywords":{}}],["monitors/new",{"_index":3860,"title":{},"content":{"487":{"position":[[552,12]]}},"keywords":{}}],["monkey",{"_index":5264,"title":{"1064":{"position":[[7,6]]}},"content":{"1070":{"position":[[798,6]]}},"keywords":{}}],["monoton",{"_index":5729,"title":{},"content":{"1146":{"position":[[35,13]]},"1173":{"position":[[35,13]]},"1215":{"position":[[35,13]]},"1223":{"position":[[35,13]]}},"keywords":{}}],["month",{"_index":1559,"title":{},"content":{"109":{"position":[[377,5]]},"138":{"position":[[2202,6],[2217,6]]},"141":{"position":[[2158,6],[2173,6]]},"142":{"position":[[2262,6],[2277,6]]},"560":{"position":[[281,6]]},"1140":{"position":[[3019,5]]},"1292":{"position":[[5403,5]]},"1306":{"position":[[5403,5]]},"1316":{"position":[[3019,5]]},"1329":{"position":[[5403,5]]},"1340":{"position":[[3019,5]]},"1351":{"position":[[3019,5]]},"1379":{"position":[[2489,5]]},"1403":{"position":[[2489,5]]},"1414":{"position":[[2489,5]]},"1431":{"position":[[3042,5]]}},"keywords":{}}],["monthli",{"_index":2107,"title":{},"content":{"189":{"position":[[239,7]]},"443":{"position":[[110,7],[200,7],[278,7],[390,7],[471,7]]}},"keywords":{}}],["monthly_active_us",{"_index":4203,"title":{},"content":{"575":{"position":[[710,20]]}},"keywords":{}}],["moral",{"_index":2325,"title":{},"content":{"210":{"position":[[2282,5]]}},"keywords":{}}],["more",{"_index":89,"title":{},"content":{"2":{"position":[[540,4]]},"4":{"position":[[758,4]]},"9":{"position":[[7,4]]},"13":{"position":[[1464,4]]},"16":{"position":[[652,4],[1364,4]]},"20":{"position":[[301,4],[825,4]]},"23":{"position":[[211,4]]},"27":{"position":[[496,4]]},"31":{"position":[[327,4]]},"33":{"position":[[147,5],[444,4]]},"34":{"position":[[894,4]]},"35":{"position":[[80,4],[348,4]]},"36":{"position":[[63,4],[479,4]]},"38":{"position":[[683,4]]},"39":{"position":[[104,4]]},"40":{"position":[[77,4],[388,4]]},"41":{"position":[[701,4]]},"42":{"position":[[360,4],[539,4],[737,4]]},"43":{"position":[[284,4],[437,4]]},"46":{"position":[[187,4]]},"47":{"position":[[79,4]]},"48":{"position":[[342,4]]},"49":{"position":[[157,4],[554,4]]},"50":{"position":[[313,4]]},"60":{"position":[[354,4],[857,4],[1026,4]]},"61":{"position":[[1030,4]]},"64":{"position":[[876,4]]},"69":{"position":[[539,4],[988,5]]},"70":{"position":[[780,4]]},"76":{"position":[[994,4]]},"77":{"position":[[600,4]]},"91":{"position":[[358,4]]},"92":{"position":[[343,4],[800,4]]},"97":{"position":[[30,4]]},"104":{"position":[[284,4]]},"105":{"position":[[678,4]]},"107":{"position":[[1700,4]]},"109":{"position":[[536,4],[677,4]]},"110":{"position":[[1234,4],[1505,4]]},"115":{"position":[[1252,4],[1572,4]]},"119":{"position":[[400,4],[474,4]]},"120":{"position":[[717,4]]},"123":{"position":[[821,4]]},"124":{"position":[[806,4]]},"130":{"position":[[401,4]]},"144":{"position":[[135,4]]},"150":{"position":[[141,4]]},"154":{"position":[[776,4],[1101,4],[1361,4],[1712,4]]},"157":{"position":[[117,4],[467,4]]},"160":{"position":[[908,4]]},"163":{"position":[[430,4],[798,4]]},"164":{"position":[[788,4]]},"169":{"position":[[163,4],[1754,4]]},"173":{"position":[[1220,4]]},"176":{"position":[[233,4]]},"177":{"position":[[309,4]]},"182":{"position":[[494,4]]},"183":{"position":[[2714,4]]},"189":{"position":[[1150,4]]},"190":{"position":[[561,4],[1497,4]]},"192":{"position":[[824,4],[1362,4],[1483,4]]},"193":{"position":[[444,6],[456,4],[686,4]]},"202":{"position":[[400,4]]},"203":{"position":[[420,4]]},"207":{"position":[[626,4]]},"208":{"position":[[358,4],[1013,4],[1732,4]]},"212":{"position":[[217,5],[350,4]]},"215":{"position":[[187,4]]},"216":{"position":[[213,4]]},"217":{"position":[[102,4],[1060,4],[1974,4]]},"218":{"position":[[43,4],[247,4],[1920,4]]},"219":{"position":[[64,4],[178,4]]},"230":{"position":[[893,4]]},"236":{"position":[[155,4]]},"237":{"position":[[578,4],[949,4],[987,4],[3411,4]]},"239":{"position":[[1067,4],[2719,4]]},"243":{"position":[[211,5],[344,4]]},"254":{"position":[[999,4],[1742,5],[2006,4]]},"257":{"position":[[169,5]]},"260":{"position":[[5,4]]},"267":{"position":[[527,4],[629,4]]},"268":{"position":[[553,5]]},"270":{"position":[[148,4]]},"273":{"position":[[91,4]]},"274":{"position":[[1320,4]]},"281":{"position":[[2187,4],[2358,4],[3360,4]]},"284":{"position":[[387,4]]},"285":{"position":[[478,4]]},"296":{"position":[[984,4],[2165,4],[3457,4]]},"301":{"position":[[85,4]]},"308":{"position":[[286,4]]},"314":{"position":[[720,4],[1559,5]]},"319":{"position":[[180,4],[1214,4],[1468,4]]},"320":{"position":[[455,4],[951,4],[1861,4],[1972,4],[2096,4]]},"321":{"position":[[762,4],[845,4]]},"322":{"position":[[1164,4]]},"323":{"position":[[1695,5]]},"324":{"position":[[94,4],[142,4],[1093,4]]},"329":{"position":[[1072,4]]},"338":{"position":[[512,4]]},"343":{"position":[[985,4],[1081,4]]},"345":{"position":[[191,4]]},"350":{"position":[[133,4]]},"358":{"position":[[133,4]]},"364":{"position":[[338,4]]},"366":{"position":[[601,4],[933,4]]},"369":{"position":[[133,4]]},"371":{"position":[[1455,4],[1540,4]]},"373":{"position":[[1029,4]]},"374":{"position":[[322,4]]},"376":{"position":[[133,4]]},"379":{"position":[[20,4],[123,4]]},"386":{"position":[[133,4]]},"387":{"position":[[1272,4]]},"390":{"position":[[45,4],[468,4]]},"391":{"position":[[133,4]]},"393":{"position":[[438,4],[509,4]]},"395":{"position":[[45,4],[638,4]]},"396":{"position":[[133,4]]},"398":{"position":[[429,4],[500,4]]},"401":{"position":[[137,4]]},"407":{"position":[[133,4]]},"416":{"position":[[133,4]]},"418":{"position":[[496,4],[592,4]]},"423":{"position":[[133,4]]},"427":{"position":[[401,4]]},"430":{"position":[[112,4]]},"431":{"position":[[133,4]]},"433":{"position":[[864,4],[932,4]]},"437":{"position":[[133,4]]},"447":{"position":[[133,4]]},"453":{"position":[[133,4]]},"459":{"position":[[133,4]]},"465":{"position":[[133,4]]},"472":{"position":[[133,4]]},"475":{"position":[[329,4]]},"481":{"position":[[133,4]]},"483":{"position":[[456,4]]},"495":{"position":[[133,4]]},"497":{"position":[[418,4]]},"501":{"position":[[89,4]]},"508":{"position":[[133,4]]},"516":{"position":[[133,4]]},"518":{"position":[[1680,4]]},"525":{"position":[[133,4]]},"533":{"position":[[133,4]]},"539":{"position":[[133,4]]},"544":{"position":[[133,4]]},"546":{"position":[[1203,4],[1300,4]]},"553":{"position":[[8,4]]},"554":{"position":[[8,4],[360,4]]},"555":{"position":[[130,4]]},"556":{"position":[[473,4],[1225,4],[1518,4]]},"560":{"position":[[336,4]]},"563":{"position":[[138,4]]},"572":{"position":[[133,4]]},"575":{"position":[[1276,4]]},"581":{"position":[[516,4]]},"583":{"position":[[123,4]]},"584":{"position":[[636,4]]},"590":{"position":[[488,4]]},"592":{"position":[[130,4]]},"597":{"position":[[292,4]]},"600":{"position":[[132,4]]},"602":{"position":[[414,4],[1028,4]]},"610":{"position":[[133,4]]},"616":{"position":[[7,4]]},"618":{"position":[[133,4]]},"620":{"position":[[346,4]]},"624":{"position":[[133,4]]},"630":{"position":[[133,4]]},"636":{"position":[[133,4]]},"646":{"position":[[133,4]]},"653":{"position":[[133,4]]},"655":{"position":[[329,4],[411,4]]},"667":{"position":[[77,4]]},"669":{"position":[[133,4]]},"684":{"position":[[133,4]]},"690":{"position":[[259,4],[364,4]]},"699":{"position":[[133,4]]},"705":{"position":[[133,4]]},"711":{"position":[[133,4]]},"717":{"position":[[8,4]]},"719":{"position":[[128,4]]},"724":{"position":[[265,4],[690,4]]},"727":{"position":[[133,4]]},"734":{"position":[[133,4]]},"736":{"position":[[451,4]]},"740":{"position":[[133,4]]},"746":{"position":[[133,4]]},"747":{"position":[[124,4]]},"750":{"position":[[1379,4]]},"752":{"position":[[1045,4]]},"754":{"position":[[966,4]]},"756":{"position":[[133,4]]},"758":{"position":[[439,4],[524,4]]},"769":{"position":[[133,4]]},"771":{"position":[[439,4],[524,4]]},"780":{"position":[[155,4]]},"781":{"position":[[130,4]]},"786":{"position":[[440,4]]},"789":{"position":[[1112,4],[1780,4]]},"791":{"position":[[1079,4]]},"794":{"position":[[1172,4]]},"796":{"position":[[134,4]]},"798":{"position":[[437,4],[522,4]]},"809":{"position":[[1172,4]]},"811":{"position":[[133,4]]},"813":{"position":[[437,4],[522,4]]},"825":{"position":[[1008,4]]},"827":{"position":[[133,4]]},"829":{"position":[[437,4],[522,4]]},"841":{"position":[[133,4]]},"850":{"position":[[133,4]]},"858":{"position":[[133,4]]},"864":{"position":[[523,4]]},"866":{"position":[[133,4]]},"867":{"position":[[1544,4]]},"869":{"position":[[1492,4],[1611,4]]},"876":{"position":[[523,4]]},"878":{"position":[[133,4]]},"884":{"position":[[133,4]]},"890":{"position":[[134,4]]},"896":{"position":[[133,4]]},"903":{"position":[[627,4],[959,4]]},"906":{"position":[[133,4]]},"908":{"position":[[483,4],[568,4]]},"915":{"position":[[627,4],[959,4],[1236,4]]},"917":{"position":[[138,4],[847,4]]},"919":{"position":[[1372,4]]},"921":{"position":[[133,4]]},"924":{"position":[[483,4],[568,4]]},"930":{"position":[[627,4],[959,4]]},"933":{"position":[[133,4]]},"935":{"position":[[483,4],[568,4]]},"945":{"position":[[1033,4],[1110,5]]},"947":{"position":[[1052,4]]},"949":{"position":[[133,4]]},"951":{"position":[[483,4],[568,4]]},"958":{"position":[[133,4]]},"963":{"position":[[781,4],[1113,4],[1390,4]]},"965":{"position":[[138,4],[847,4]]},"967":{"position":[[133,4]]},"969":{"position":[[483,4],[568,4]]},"981":{"position":[[133,4]]},"990":{"position":[[133,4]]},"996":{"position":[[133,4]]},"1005":{"position":[[130,4]]},"1007":{"position":[[128,4]]},"1008":{"position":[[1018,4]]},"1014":{"position":[[133,4]]},"1020":{"position":[[376,4],[1331,4]]},"1021":{"position":[[133,4]]},"1027":{"position":[[133,4]]},"1033":{"position":[[137,4]]},"1044":{"position":[[133,4]]},"1046":{"position":[[417,4],[502,4]]},"1052":{"position":[[133,4]]},"1054":{"position":[[417,4],[502,4]]},"1060":{"position":[[133,4]]},"1062":{"position":[[417,4],[502,4]]},"1069":{"position":[[133,4]]},"1075":{"position":[[133,4]]},"1082":{"position":[[188,4]]},"1084":{"position":[[133,4]]},"1093":{"position":[[133,4]]},"1100":{"position":[[133,4]]},"1106":{"position":[[134,4]]},"1112":{"position":[[133,4]]},"1122":{"position":[[265,4]]},"1123":{"position":[[704,4]]},"1124":{"position":[[133,4]]},"1132":{"position":[[134,4]]},"1137":{"position":[[50,4],[163,4]]},"1143":{"position":[[85,4]]},"1149":{"position":[[379,4]]},"1150":{"position":[[100,4]]},"1161":{"position":[[85,4]]},"1166":{"position":[[107,4]]},"1169":{"position":[[85,4]]},"1178":{"position":[[50,4],[164,4]]},"1179":{"position":[[919,4]]},"1187":{"position":[[50,4],[166,4]]},"1195":{"position":[[50,4]]},"1199":{"position":[[109,4]]},"1200":{"position":[[650,4]]},"1205":{"position":[[50,4]]},"1206":{"position":[[1147,4]]},"1212":{"position":[[85,4]]},"1219":{"position":[[85,4]]},"1229":{"position":[[50,4],[176,4]]},"1237":{"position":[[83,4]]},"1243":{"position":[[410,4]]},"1246":{"position":[[50,4]]},"1251":{"position":[[187,4]]},"1252":{"position":[[130,4]]},"1259":{"position":[[92,4]]},"1265":{"position":[[15,4]]},"1284":{"position":[[50,4],[161,4]]},"1286":{"position":[[1229,4]]},"1299":{"position":[[50,4],[161,4]]},"1301":{"position":[[1065,4]]},"1312":{"position":[[50,4],[164,4]]},"1317":{"position":[[402,4]]},"1323":{"position":[[50,4],[161,4]]},"1325":{"position":[[1229,4]]},"1336":{"position":[[50,4],[164,4]]},"1341":{"position":[[402,4]]},"1347":{"position":[[50,4],[164,4]]},"1352":{"position":[[402,4]]},"1355":{"position":[[50,4],[163,4]]},"1356":{"position":[[724,4]]},"1362":{"position":[[80,4]]},"1375":{"position":[[50,4],[165,4]]},"1385":{"position":[[50,4],[165,4]]},"1392":{"position":[[111,4]]},"1393":{"position":[[359,4]]},"1399":{"position":[[50,4],[165,4]]},"1410":{"position":[[50,4],[165,4]]},"1419":{"position":[[50,4],[165,4]]},"1426":{"position":[[50,4],[167,4]]},"1432":{"position":[[402,4]]},"1435":{"position":[[518,4]]},"1438":{"position":[[507,4]]},"1443":{"position":[[9,4]]},"1444":{"position":[[9,4]]},"1451":{"position":[[1074,4]]},"1452":{"position":[[883,4],[1098,4],[1317,4],[3827,4]]},"1459":{"position":[[1408,4],[1707,4]]},"1461":{"position":[[1742,4],[2320,4]]},"1462":{"position":[[732,4]]},"1467":{"position":[[1665,4]]},"1471":{"position":[[139,4]]},"1476":{"position":[[752,4]]},"1477":{"position":[[2701,4]]}},"keywords":{}}],["moreov",{"_index":2256,"title":{},"content":{"208":{"position":[[1538,9]]}},"keywords":{}}],["moreresourc",{"_index":806,"title":{},"content":{"54":{"position":[[305,13]]}},"keywords":{}}],["mostli",{"_index":6590,"title":{},"content":{"1459":{"position":[[333,8]]}},"keywords":{}}],["motherduck",{"_index":5425,"title":{"1257":{"position":[[0,10]]}},"content":{"1120":{"position":[[1377,10]]},"1258":{"position":[[40,10]]},"1259":{"position":[[39,10]]},"1260":{"position":[[67,10],[130,11]]},"1262":{"position":[[184,10],[499,10]]}},"keywords":{}}],["motherduck:dev",{"_index":5426,"title":{},"content":{"1120":{"position":[[1439,14]]}},"keywords":{}}],["motherduck:dev"",{"_index":5922,"title":{},"content":{"1261":{"position":[[104,20]]}},"keywords":{}}],["move",{"_index":319,"title":{},"content":{"11":{"position":[[776,5]]},"35":{"position":[[126,4]]},"36":{"position":[[131,5]]},"61":{"position":[[113,4]]},"190":{"position":[[1780,4]]},"192":{"position":[[2142,4]]},"213":{"position":[[309,6]]},"254":{"position":[[2083,6]]},"281":{"position":[[2192,6]]},"288":{"position":[[255,4]]},"299":{"position":[[247,4]]},"323":{"position":[[54,4]]},"1201":{"position":[[515,5]]}},"keywords":{}}],["movement",{"_index":1924,"title":{"1455":{"position":[[5,8]]}},"content":{"163":{"position":[[543,8]]},"1455":{"position":[[122,9]]}},"keywords":{}}],["movi",{"_index":2276,"title":{},"content":{"210":{"position":[[214,6],[584,6],[1782,6],[1870,6]]}},"keywords":{}}],["mozilla’",{"_index":1144,"title":{},"content":{"82":{"position":[[267,9]]}},"keywords":{}}],["msdb.dbo.gcloudsql_cdc_enable_db",{"_index":5261,"title":{},"content":{"1059":{"position":[[801,32]]}},"keywords":{}}],["msdb.dbo.rds_cdc_enable_db",{"_index":5260,"title":{},"content":{"1051":{"position":[[1037,27]]}},"keywords":{}}],["msg",{"_index":2670,"title":{},"content":{"250":{"position":[[988,3]]}},"keywords":{}}],["msg.value}"",{"_index":2672,"title":{},"content":{"250":{"position":[[1036,18]]}},"keywords":{}}],["msk",{"_index":3666,"title":{"430":{"position":[[28,6]]}},"content":{"430":{"position":[[49,6],[147,3]]}},"keywords":{}}],["much",{"_index":189,"title":{},"content":{"4":{"position":[[742,4]]},"163":{"position":[[1021,4]]},"240":{"position":[[4286,4]]},"281":{"position":[[3237,4]]},"319":{"position":[[1209,4]]},"320":{"position":[[1459,4]]},"323":{"position":[[1783,4]]},"330":{"position":[[599,4]]}},"keywords":{}}],["multi",{"_index":1494,"title":{},"content":{"105":{"position":[[1014,5]]}},"keywords":{}}],["multiarch",{"_index":889,"title":{},"content":{"58":{"position":[[604,9]]},"169":{"position":[[848,9]]}},"keywords":{}}],["multilin",{"_index":1231,"title":{},"content":{"83":{"position":[[1324,9]]}},"keywords":{}}],["multiline.info",{"_index":1239,"title":{},"content":{"83":{"position":[[1431,15]]}},"keywords":{}}],["multilinestri",{"_index":6188,"title":{},"content":{"1292":{"position":[[5446,13]]},"1306":{"position":[[5446,13]]},"1329":{"position":[[5446,13]]}},"keywords":{}}],["multipl",{"_index":579,"title":{},"content":{"23":{"position":[[235,8]]},"42":{"position":[[379,8]]},"45":{"position":[[497,8],[530,8]]},"56":{"position":[[1420,8]]},"60":{"position":[[111,8]]},"66":{"position":[[82,8]]},"69":{"position":[[588,8],[691,8]]},"72":{"position":[[474,8],[720,8]]},"73":{"position":[[23,8]]},"81":{"position":[[1833,8],[2850,8]]},"101":{"position":[[639,8]]},"107":{"position":[[248,8]]},"109":{"position":[[116,8]]},"122":{"position":[[1060,8]]},"124":{"position":[[624,8]]},"128":{"position":[[241,8]]},"132":{"position":[[207,8]]},"133":{"position":[[84,8]]},"138":{"position":[[840,8]]},"142":{"position":[[811,8]]},"154":{"position":[[529,8]]},"163":{"position":[[33,8]]},"164":{"position":[[352,8]]},"183":{"position":[[2653,8]]},"219":{"position":[[324,8],[369,8]]},"290":{"position":[[915,8]]},"295":{"position":[[743,8]]},"319":{"position":[[567,8]]},"326":{"position":[[1115,8],[1588,8]]},"366":{"position":[[321,8]]},"373":{"position":[[38,8]]},"374":{"position":[[343,8]]},"385":{"position":[[395,8],[523,8]]},"419":{"position":[[1155,8]]},"440":{"position":[[1171,8]]},"480":{"position":[[1197,8]]},"532":{"position":[[164,8]]},"534":{"position":[[764,8],[1342,8]]},"547":{"position":[[1157,8]]},"548":{"position":[[191,8]]},"552":{"position":[[576,8],[623,8]]},"657":{"position":[[637,8]]},"660":{"position":[[165,8]]},"842":{"position":[[1608,8]]},"903":{"position":[[347,8]]},"915":{"position":[[347,8]]},"930":{"position":[[347,8]]},"963":{"position":[[501,8]]},"1023":{"position":[[1138,8]]},"1156":{"position":[[554,8],[762,8]]},"1178":{"position":[[323,8]]},"1189":{"position":[[329,8]]},"1197":{"position":[[335,8]]},"1207":{"position":[[418,8]]},"1232":{"position":[[21,8]]},"1248":{"position":[[362,8]]},"1277":{"position":[[895,8]]},"1357":{"position":[[267,8]]},"1387":{"position":[[368,8],[994,8]]},"1421":{"position":[[355,8]]},"1439":{"position":[[886,8]]},"1453":{"position":[[588,8]]},"1461":{"position":[[881,8]]},"1474":{"position":[[228,8]]}},"keywords":{}}],["multiplex",{"_index":5892,"title":{"1232":{"position":[[0,9]]}},"content":{"1230":{"position":[[1181,9]]},"1232":{"position":[[93,9],[215,9],[519,9],[610,9]]}},"keywords":{}}],["multipoint",{"_index":6191,"title":{},"content":{"1292":{"position":[[5504,10]]},"1306":{"position":[[5504,10]]},"1329":{"position":[[5504,10]]}},"keywords":{}}],["multipolygon",{"_index":6192,"title":{},"content":{"1292":{"position":[[5553,12]]},"1306":{"position":[[5553,12]]},"1329":{"position":[[5553,12]]}},"keywords":{}}],["multiset",{"_index":5651,"title":{},"content":{"1140":{"position":[[3050,8]]},"1316":{"position":[[3050,8]]},"1340":{"position":[[3050,8]]},"1351":{"position":[[3050,8]]},"1379":{"position":[[2537,8]]},"1403":{"position":[[2537,8]]},"1414":{"position":[[2537,8]]},"1431":{"position":[[3073,8]]}},"keywords":{}}],["mutabl",{"_index":5292,"title":{},"content":{"1077":{"position":[[140,8]]}},"keywords":{}}],["mutex",{"_index":6195,"title":{},"content":{"1292":{"position":[[5607,5]]},"1306":{"position":[[5607,5]]},"1329":{"position":[[5607,5]]}},"keywords":{}}],["my.flow.yaml",{"_index":1136,"title":{},"content":{"81":{"position":[[2524,12]]}},"keywords":{}}],["my.hostnam",{"_index":1160,"title":{},"content":{"82":{"position":[[1392,11],[3822,11],[4334,11]]}},"keywords":{}}],["my.webhook.com",{"_index":6674,"title":{},"content":{"1472":{"position":[[739,14]]}},"keywords":{}}],["my/widget.schema.yaml#/path/to/schema",{"_index":1894,"title":{},"content":{"161":{"position":[[258,41]]}},"keywords":{}}],["my_bucket",{"_index":5925,"title":{},"content":{"1261":{"position":[[210,9]]}},"keywords":{}}],["my_db",{"_index":5924,"title":{},"content":{"1261":{"position":[[183,5]]}},"keywords":{}}],["my_field",{"_index":1403,"title":{},"content":{"98":{"position":[[269,10]]}},"keywords":{}}],["my_fold",{"_index":3903,"title":{},"content":{"503":{"position":[[202,10]]}},"keywords":{}}],["my_google_cloud_project",{"_index":5894,"title":{},"content":{"1231":{"position":[[212,23]]}},"keywords":{}}],["my_hosted_dataset.json.zip",{"_index":4367,"title":{},"content":{"638":{"position":[[405,26]]}},"keywords":{}}],["my_new_top",{"_index":5896,"title":{},"content":{"1231":{"position":[[299,12]]}},"keywords":{}}],["my_sheet",{"_index":5915,"title":{},"content":{"1248":{"position":[[503,8]]}},"keywords":{}}],["my_subdomain",{"_index":5388,"title":{},"content":{"1108":{"position":[[226,12]]},"1130":{"position":[[78,12]]},"1131":{"position":[[78,12]]},"1133":{"position":[[1110,12]]},"1134":{"position":[[246,12]]}},"keywords":{}}],["my_tabl",{"_index":431,"title":{},"content":{"14":{"position":[[671,8]]}},"keywords":{}}],["my_table_v2",{"_index":446,"title":{},"content":{"14":{"position":[[1175,11]]}},"keywords":{}}],["my_time_seri",{"_index":6425,"title":{},"content":{"1429":{"position":[[655,17],[882,14]]}},"keywords":{}}],["myfield",{"_index":1681,"title":{},"content":{"122":{"position":[[1740,9]]},"159":{"position":[[251,8],[306,7]]},"1155":{"position":[[515,7],[527,8]]}},"keywords":{}}],["myorg/market",{"_index":2819,"title":{},"content":{"274":{"position":[[1126,15],[1528,15]]}},"keywords":{}}],["myorg/marketing/contact",{"_index":2818,"title":{},"content":{"274":{"position":[[377,25],[1210,25]]}},"keywords":{}}],["myorg/marketing/emaillist",{"_index":2815,"title":{},"content":{"274":{"position":[[263,25],[1396,25]]}},"keywords":{}}],["myorg/marketing/lead",{"_index":2813,"title":{},"content":{"274":{"position":[[205,22]]},"284":{"position":[[207,22],[435,21],[561,21]]},"285":{"position":[[353,22]]}},"keywords":{}}],["myorg/marketing/socialmedia",{"_index":2816,"title":{},"content":{"274":{"position":[[293,28]]}},"keywords":{}}],["myorg/yourname/citibiketutori",{"_index":2119,"title":{},"content":{"190":{"position":[[767,32]]},"192":{"position":[[405,32]]}},"keywords":{}}],["mysecrettoken",{"_index":3881,"title":{},"content":{"489":{"position":[[646,14],[723,14]]},"662":{"position":[[646,14],[723,14]]},"677":{"position":[[646,14],[723,14]]},"692":{"position":[[646,14],[723,14]]}},"keywords":{}}],["myserver.com:22",{"_index":5202,"title":{},"content":{"1021":{"position":[[393,15]]},"1022":{"position":[[117,15]]}},"keywords":{}}],["mysetup",{"_index":1744,"title":{},"content":{"133":{"position":[[514,8]]}},"keywords":{}}],["mysql",{"_index":1824,"title":{"787":{"position":[[0,5]]},"791":{"position":[[12,6]]},"793":{"position":[[19,6]]},"794":{"position":[[12,5]]},"806":{"position":[[21,5]]},"809":{"position":[[12,5]]},"821":{"position":[[0,5]]},"822":{"position":[[15,5]]},"825":{"position":[[12,5]]},"1263":{"position":[[0,5]]},"1271":{"position":[[0,5]]},"1280":{"position":[[0,5]]},"1283":{"position":[[19,6]]},"1286":{"position":[[12,5]]},"1288":{"position":[[0,5]]},"1294":{"position":[[21,5]]},"1301":{"position":[[12,5]]},"1318":{"position":[[15,5]]},"1325":{"position":[[12,5]]}},"content":{"142":{"position":[[1020,6]]},"363":{"position":[[1782,5]]},"757":{"position":[[2434,6]]},"770":{"position":[[2434,6]]},"788":{"position":[[25,5],[229,5]]},"789":{"position":[[38,5],[895,5]]},"790":{"position":[[145,5]]},"791":{"position":[[670,5],[925,5]]},"792":{"position":[[1632,5],[1990,5]]},"793":{"position":[[681,5],[1344,5]]},"794":{"position":[[385,5],[481,5],[699,5],[1184,5]]},"795":{"position":[[12,5]]},"796":{"position":[[251,5]]},"797":{"position":[[2396,5],[2437,6]]},"799":{"position":[[12,5]]},"801":{"position":[[170,5]]},"803":{"position":[[238,5]]},"804":{"position":[[115,5]]},"807":{"position":[[38,5]]},"808":{"position":[[1290,5]]},"809":{"position":[[385,5],[481,5],[699,5],[1184,5]]},"810":{"position":[[12,5]]},"811":{"position":[[250,5]]},"812":{"position":[[2396,5],[2437,6]]},"814":{"position":[[12,5]]},"816":{"position":[[170,5]]},"818":{"position":[[238,5]]},"819":{"position":[[115,5]]},"821":{"position":[[0,5],[62,5],[196,5],[483,5]]},"823":{"position":[[38,5]]},"824":{"position":[[923,6],[1491,5],[1754,5],[2112,5],[2408,5]]},"825":{"position":[[385,5],[481,5],[1020,5]]},"826":{"position":[[12,5]]},"827":{"position":[[250,5]]},"828":{"position":[[2396,5],[2437,6]]},"830":{"position":[[12,5]]},"832":{"position":[[170,5]]},"834":{"position":[[238,5]]},"835":{"position":[[115,5]]},"1120":{"position":[[1454,5]]},"1264":{"position":[[70,5]]},"1265":{"position":[[172,5]]},"1268":{"position":[[80,5]]},"1270":{"position":[[98,5]]},"1271":{"position":[[37,5]]},"1281":{"position":[[40,5],[102,5]]},"1282":{"position":[[115,5],[146,6],[189,5]]},"1283":{"position":[[211,6]]},"1284":{"position":[[113,5]]},"1286":{"position":[[442,5],[538,5],[756,5],[1241,5]]},"1288":{"position":[[25,6],[68,5]]},"1291":{"position":[[169,6]]},"1292":{"position":[[1,5],[148,5]]},"1295":{"position":[[40,5],[102,5]]},"1299":{"position":[[113,5]]},"1301":{"position":[[442,5],[538,5],[1077,5]]},"1303":{"position":[[1514,5]]},"1305":{"position":[[169,6]]},"1306":{"position":[[1,5],[148,5]]},"1319":{"position":[[40,5],[102,5]]},"1323":{"position":[[113,5]]},"1325":{"position":[[442,5],[538,5],[756,5],[1241,5]]},"1328":{"position":[[169,6]]},"1329":{"position":[[1,5],[148,5]]}},"keywords":{}}],["mysql'",{"_index":4702,"title":{},"content":{"789":{"position":[[176,7]]},"794":{"position":[[1,7]]},"807":{"position":[[176,7]]},"809":{"position":[[1,7]]},"823":{"position":[[176,7]]},"825":{"position":[[1,7]]},"1286":{"position":[[1,7]]},"1301":{"position":[[1,7]]},"1325":{"position":[[1,7]]}},"keywords":{}}],["mysql.rds_set_configuration('binlog",{"_index":4675,"title":{},"content":{"767":{"position":[[2317,35]]},"792":{"position":[[2298,35]]},"824":{"position":[[2429,35]]}},"keywords":{}}],["mysql8.0typ",{"_index":4707,"title":{},"content":{"792":{"position":[[1267,13]]},"824":{"position":[[1035,13]]}},"keywords":{}}],["mysql:dev",{"_index":3308,"title":{},"content":{"363":{"position":[[1834,9]]},"798":{"position":[[149,9]]},"813":{"position":[[149,9]]},"829":{"position":[[149,9]]},"1120":{"position":[[1511,9]]},"1287":{"position":[[98,9]]},"1302":{"position":[[98,9]]},"1326":{"position":[[98,9]]},"1480":{"position":[[467,9]]}},"keywords":{}}],["mysql_errno",{"_index":6198,"title":{},"content":{"1292":{"position":[[5648,11]]},"1306":{"position":[[5648,11]]},"1329":{"position":[[5648,11]]}},"keywords":{}}],["mysqlamazon",{"_index":4697,"title":{},"content":{"788":{"position":[[166,11]]},"790":{"position":[[82,11]]}},"keywords":{}}],["mytransformnam",{"_index":1346,"title":{},"content":{"94":{"position":[[1242,15]]}},"keywords":{}}],["n",{"_index":2455,"title":{},"content":{"221":{"position":[[1372,1]]},"222":{"position":[[617,1]]},"223":{"position":[[583,1]]},"224":{"position":[[636,1]]},"236":{"position":[[1394,1]]},"517":{"position":[[2228,1],[2251,1]]},"868":{"position":[[393,5]]},"880":{"position":[[394,5]]},"1076":{"position":[[471,1],[485,1]]},"1298":{"position":[[583,1]]},"1322":{"position":[[617,1]]},"1335":{"position":[[617,1]]},"1346":{"position":[[583,1]]},"1437":{"position":[[1009,1]]}},"keywords":{}}],["n"",{"_index":4069,"title":{},"content":{"546":{"position":[[383,9]]},"594":{"position":[[371,9]]}},"keywords":{}}],["na",{"_index":3475,"title":{},"content":{"385":{"position":[[212,2]]},"388":{"position":[[336,2]]}},"keywords":{}}],["naiv",{"_index":5020,"title":{},"content":{"912":{"position":[[895,5]]}},"keywords":{}}],["name",{"_index":113,"title":{"1146":{"position":[[5,6]]},"1155":{"position":[[0,6]]},"1173":{"position":[[5,6]]},"1215":{"position":[[5,6]]},"1223":{"position":[[5,6]]},"1449":{"position":[[19,4]]}},"content":{"3":{"position":[[298,6]]},"6":{"position":[[133,4]]},"8":{"position":[[134,4]]},"13":{"position":[[1122,5],[1617,5],[1776,5]]},"14":{"position":[[1014,4],[1137,5]]},"26":{"position":[[355,5]]},"27":{"position":[[135,5],[180,4],[318,4]]},"56":{"position":[[165,4],[668,6]]},"62":{"position":[[296,4]]},"63":{"position":[[569,4]]},"66":{"position":[[816,4]]},"69":{"position":[[181,4]]},"70":{"position":[[572,4]]},"71":{"position":[[627,4],[667,8],[724,4]]},"74":{"position":[[716,6],[750,6]]},"76":{"position":[[17,5],[505,4]]},"81":{"position":[[287,4],[359,4]]},"82":{"position":[[1854,4],[2540,4],[4178,4],[4681,4]]},"94":{"position":[[111,4],[1116,4],[1236,5],[1353,4],[1400,5]]},"96":{"position":[[148,5]]},"98":{"position":[[21,5],[178,4],[229,4],[354,5],[438,5],[933,4]]},"105":{"position":[[561,5],[1254,4]]},"107":{"position":[[1444,5],[2624,5],[3278,5],[3996,5]]},"117":{"position":[[373,5]]},"120":{"position":[[189,4],[1016,4],[1063,5],[2140,5]]},"122":{"position":[[348,5]]},"123":{"position":[[649,5]]},"128":{"position":[[33,5],[530,5],[575,5]]},"129":{"position":[[775,5],[816,5],[903,5],[950,5]]},"138":{"position":[[676,5],[695,4],[751,5],[811,5],[917,5],[1711,5],[1726,4]]},"141":{"position":[[766,5],[813,4],[1719,5],[1734,4]]},"142":{"position":[[579,5],[631,5],[650,4],[722,5],[782,5],[896,5],[1736,5],[1751,4]]},"145":{"position":[[23,4]]},"146":{"position":[[15,4]]},"148":{"position":[[23,4]]},"149":{"position":[[15,4]]},"151":{"position":[[23,4]]},"152":{"position":[[15,4]]},"154":{"position":[[1455,5]]},"162":{"position":[[699,6]]},"172":{"position":[[237,4]]},"173":{"position":[[1069,4]]},"174":{"position":[[384,4]]},"182":{"position":[[107,5],[452,5]]},"183":{"position":[[340,5],[376,4],[424,5],[898,4],[1356,5],[2361,4],[2395,4],[2453,5],[3870,5]]},"184":{"position":[[262,4],[475,4],[698,4],[861,4]]},"190":{"position":[[387,4],[423,4],[434,5],[739,4]]},"192":{"position":[[311,4],[377,4],[1245,4],[1296,4]]},"206":{"position":[[50,4]]},"207":{"position":[[319,5]]},"208":{"position":[[1835,5],[1996,6]]},"217":{"position":[[637,4],[673,4],[736,4],[830,4],[866,5],[1482,6]]},"218":{"position":[[341,4],[389,6]]},"222":{"position":[[899,4]]},"228":{"position":[[443,6],[529,4],[609,4],[687,6],[893,5],[1077,5],[1110,5],[1195,5]]},"229":{"position":[[174,4],[426,6],[761,5],[794,5],[879,5]]},"230":{"position":[[1284,6]]},"238":{"position":[[1034,4]]},"239":{"position":[[2440,6]]},"240":{"position":[[3957,4]]},"254":{"position":[[592,5],[2649,5]]},"255":{"position":[[184,4]]},"263":{"position":[[356,4],[452,4],[1110,5]]},"264":{"position":[[741,5]]},"267":{"position":[[715,5],[751,4],[799,5],[1288,4]]},"268":{"position":[[248,4],[563,4],[985,5],[1360,4],[1387,4]]},"269":{"position":[[221,6],[595,5],[931,4],[958,4]]},"270":{"position":[[742,5],[777,4],[917,4],[1601,5]]},"271":{"position":[[217,4],[258,5]]},"274":{"position":[[121,4],[416,6],[1343,5],[1391,4],[1719,5]]},"277":{"position":[[667,5]]},"278":{"position":[[1111,5]]},"279":{"position":[[1452,5],[1569,5]]},"280":{"position":[[1608,5],[1762,5],[1939,5]]},"281":{"position":[[1000,5],[1027,5]]},"284":{"position":[[154,4]]},"290":{"position":[[462,4],[498,4],[561,4],[638,4],[674,5],[811,5],[957,4]]},"291":{"position":[[265,4],[313,6],[1073,4],[1136,5]]},"295":{"position":[[279,4],[1120,4]]},"296":{"position":[[477,5],[750,5],[775,5],[848,5],[876,5],[1448,5],[2751,5],[2776,5],[2849,5],[2877,5],[4646,6],[5035,6],[6434,5]]},"301":{"position":[[402,4],[438,4],[501,4],[578,4],[614,5]]},"302":{"position":[[265,4],[313,6],[1058,4],[1100,4]]},"307":{"position":[[740,5],[1830,5]]},"314":{"position":[[459,5],[2314,5],[2427,4],[2570,4]]},"316":{"position":[[186,4]]},"349":{"position":[[164,4]]},"366":{"position":[[448,4]]},"370":{"position":[[406,4],[933,4],[942,4],[1120,5],[1189,4],[1198,4],[1333,4],[2137,5]]},"377":{"position":[[1728,4],[1740,4]]},"378":{"position":[[332,5]]},"392":{"position":[[562,4],[743,5]]},"397":{"position":[[295,4],[876,4],[885,4]]},"402":{"position":[[211,4],[216,4],[700,4],[705,4]]},"417":{"position":[[1093,4],[2012,4],[2335,5]]},"432":{"position":[[1258,5]]},"436":{"position":[[405,4]]},"438":{"position":[[697,4],[706,4],[1566,4],[1575,4],[1968,4]]},"464":{"position":[[307,4]]},"469":{"position":[[74,4]]},"479":{"position":[[209,4],[293,4]]},"482":{"position":[[543,4],[550,4]]},"487":{"position":[[354,4]]},"492":{"position":[[456,4],[505,4]]},"517":{"position":[[866,4],[1903,5],[1909,4],[1918,4]]},"518":{"position":[[299,5]]},"540":{"position":[[361,4],[366,4]]},"541":{"position":[[182,5]]},"545":{"position":[[568,4],[1730,4]]},"556":{"position":[[1297,4],[1312,4]]},"590":{"position":[[726,6]]},"593":{"position":[[182,4]]},"601":{"position":[[374,6],[462,4]]},"616":{"position":[[154,5],[235,6],[249,5]]},"637":{"position":[[1203,4]]},"645":{"position":[[302,4],[359,4]]},"646":{"position":[[627,4],[788,4]]},"647":{"position":[[210,5]]},"652":{"position":[[302,4],[359,4]]},"654":{"position":[[348,4],[872,4]]},"665":{"position":[[456,4],[505,4]]},"680":{"position":[[456,4]]},"695":{"position":[[456,4],[505,4]]},"750":{"position":[[653,4],[1147,4]]},"752":{"position":[[101,4]]},"753":{"position":[[1558,5]]},"754":{"position":[[518,5]]},"757":{"position":[[635,4],[780,4],[789,4],[959,4],[968,4],[1465,5],[2042,4]]},"763":{"position":[[160,5]]},"766":{"position":[[653,4],[1147,4]]},"767":{"position":[[903,4]]},"770":{"position":[[635,4],[780,4],[789,4],[959,4],[968,4],[1465,5],[2042,4]]},"776":{"position":[[160,5]]},"782":{"position":[[573,4],[624,4]]},"789":{"position":[[641,4],[1548,4]]},"791":{"position":[[54,4]]},"792":{"position":[[1197,4]]},"793":{"position":[[1581,5]]},"794":{"position":[[560,5]]},"797":{"position":[[635,4],[780,4],[789,4],[959,4],[968,4],[1465,5],[2049,4]]},"803":{"position":[[160,5]]},"807":{"position":[[641,4],[1135,4]]},"809":{"position":[[560,5]]},"812":{"position":[[635,4],[780,4],[789,4],[959,4],[968,4],[1465,5],[2049,4]]},"818":{"position":[[160,5]]},"823":{"position":[[641,4],[1135,4]]},"824":{"position":[[972,4]]},"825":{"position":[[560,5]]},"828":{"position":[[635,4],[780,4],[789,4],[959,4],[968,4],[1465,5],[2049,4]]},"834":{"position":[[160,5]]},"840":{"position":[[590,5],[962,5],[1722,4],[1752,5],[2032,5],[2177,5],[2202,4]]},"842":{"position":[[1928,4],[1937,4],[3024,4],[3033,4],[3242,4],[3401,4]]},"843":{"position":[[692,5]]},"849":{"position":[[1061,5],[1575,5],[2763,4],[2793,5],[3152,4],[3317,5],[3342,4]]},"865":{"position":[[120,5]]},"867":{"position":[[335,4],[581,5],[673,4],[2235,5]]},"869":{"position":[[155,5],[183,5],[207,6],[366,5],[563,5],[674,5],[889,5]]},"872":{"position":[[18,5]]},"877":{"position":[[120,5]]},"879":{"position":[[1575,4],[1590,4]]},"880":{"position":[[466,5]]},"892":{"position":[[171,5],[223,5],[271,5],[317,5],[367,5],[425,5],[489,5],[549,5],[609,5]]},"903":{"position":[[474,4]]},"904":{"position":[[970,4],[2260,4]]},"907":{"position":[[189,4],[716,4],[725,4],[903,5],[972,4],[981,4],[1116,4],[1542,5]]},"915":{"position":[[474,4]]},"917":{"position":[[1769,4]]},"918":{"position":[[1173,4],[2552,4]]},"919":{"position":[[2488,5]]},"923":{"position":[[189,4],[716,4],[725,4],[903,5],[972,4],[981,4],[1116,4],[1542,5]]},"930":{"position":[[474,4]]},"931":{"position":[[1922,4]]},"934":{"position":[[189,4],[716,4],[725,4],[903,5],[972,4],[981,4],[1116,4],[1542,5]]},"943":{"position":[[782,4]]},"944":{"position":[[382,6]]},"945":{"position":[[31,4],[414,4],[782,4]]},"947":{"position":[[703,5],[709,4],[872,4],[1105,5],[1142,4],[1166,4]]},"950":{"position":[[189,4],[716,4],[725,4],[903,5],[972,4],[981,4],[1116,4],[1542,5]]},"963":{"position":[[628,4]]},"965":{"position":[[1769,4]]},"968":{"position":[[189,4],[716,4],[725,4],[903,5],[972,4],[981,4],[1116,4],[1542,5]]},"995":{"position":[[71,5]]},"997":{"position":[[245,4]]},"1008":{"position":[[438,5],[504,5],[1326,5],[1356,5],[1513,6]]},"1020":{"position":[[1774,4],[2040,6]]},"1021":{"position":[[889,5]]},"1031":{"position":[[295,4]]},"1032":{"position":[[254,5],[452,4]]},"1034":{"position":[[296,4],[395,4]]},"1035":{"position":[[66,4]]},"1043":{"position":[[1852,5]]},"1045":{"position":[[196,4],[751,5],[843,4],[1161,5]]},"1047":{"position":[[642,4]]},"1053":{"position":[[196,4],[751,5],[843,4],[1161,5]]},"1055":{"position":[[642,4]]},"1061":{"position":[[196,4],[751,5],[843,4],[1161,5]]},"1063":{"position":[[642,4]]},"1092":{"position":[[164,4],[451,4]]},"1094":{"position":[[253,4],[262,4]]},"1123":{"position":[[773,6]]},"1125":{"position":[[556,4],[565,4]]},"1138":{"position":[[296,4],[1727,4]]},"1140":{"position":[[3093,5]]},"1146":{"position":[[24,5],[653,5]]},"1147":{"position":[[93,4]]},"1151":{"position":[[354,4],[998,4],[1379,4]]},"1155":{"position":[[31,5],[342,5],[422,5],[461,5],[664,6]]},"1162":{"position":[[812,4]]},"1173":{"position":[[24,5],[665,5]]},"1174":{"position":[[93,4]]},"1179":{"position":[[554,4]]},"1183":{"position":[[1314,4]]},"1188":{"position":[[314,4],[319,4],[382,4],[768,4]]},"1195":{"position":[[553,4],[565,4],[617,4]]},"1196":{"position":[[920,4]]},"1206":{"position":[[304,4],[590,4],[884,4],[972,5]]},"1207":{"position":[[220,4],[565,4]]},"1209":{"position":[[100,5]]},"1215":{"position":[[24,5],[653,5]]},"1216":{"position":[[93,4]]},"1223":{"position":[[24,5],[665,5]]},"1224":{"position":[[93,4]]},"1230":{"position":[[490,4],[1299,4],[1304,4]]},"1247":{"position":[[1081,4],[1086,4]]},"1253":{"position":[[213,4],[490,4]]},"1260":{"position":[[452,4],[927,4]]},"1267":{"position":[[194,4]]},"1269":{"position":[[66,4]]},"1275":{"position":[[393,5]]},"1277":{"position":[[843,4],[1072,4]]},"1285":{"position":[[79,4],[647,4]]},"1286":{"position":[[617,5],[2562,4]]},"1289":{"position":[[1684,5]]},"1292":{"position":[[5693,4],[5739,5]]},"1300":{"position":[[79,4],[647,4]]},"1301":{"position":[[617,5],[2398,4]]},"1306":{"position":[[5693,4],[5739,5]]},"1310":{"position":[[1005,5]]},"1313":{"position":[[79,4],[1271,4]]},"1316":{"position":[[3093,5]]},"1317":{"position":[[425,5],[628,6],[718,5]]},"1322":{"position":[[899,4]]},"1324":{"position":[[79,4],[647,4]]},"1325":{"position":[[617,5],[2562,4]]},"1329":{"position":[[5693,4],[5739,5]]},"1335":{"position":[[899,4]]},"1337":{"position":[[79,4],[1271,4]]},"1340":{"position":[[3093,5]]},"1341":{"position":[[425,5],[628,6],[718,5]]},"1348":{"position":[[79,4],[1271,4]]},"1351":{"position":[[3093,5]]},"1352":{"position":[[425,5],[628,6],[718,5]]},"1356":{"position":[[1143,4],[1152,4],[1343,4],[1454,4]]},"1362":{"position":[[689,4],[706,4]]},"1367":{"position":[[79,4]]},"1376":{"position":[[79,4],[477,4]]},"1379":{"position":[[2590,5]]},"1383":{"position":[[118,5],[316,5]]},"1386":{"position":[[247,4],[530,4],[1171,4]]},"1388":{"position":[[655,5]]},"1400":{"position":[[79,4],[477,4]]},"1403":{"position":[[2590,5]]},"1409":{"position":[[1125,5]]},"1411":{"position":[[79,4],[477,4]]},"1414":{"position":[[2590,5]]},"1420":{"position":[[122,4],[181,4],[267,4],[527,4],[718,4]]},"1427":{"position":[[79,4],[1031,4]]},"1429":{"position":[[503,4]]},"1431":{"position":[[3116,5]]},"1432":{"position":[[425,5],[642,6],[732,5]]},"1434":{"position":[[77,5],[173,4]]},"1448":{"position":[[386,6],[481,5]]},"1449":{"position":[[31,4],[131,5],[201,5],[277,5],[538,4]]},"1452":{"position":[[684,4],[3209,4],[3255,4]]},"1461":{"position":[[1589,5],[1637,6],[5520,5]]},"1462":{"position":[[29,5],[44,4],[179,5],[296,6],[412,5],[581,4]]},"1463":{"position":[[260,5]]},"1464":{"position":[[117,5]]},"1465":{"position":[[437,5]]},"1466":{"position":[[79,5]]},"1467":{"position":[[420,5],[2087,5]]},"1470":{"position":[[563,4]]},"1472":{"position":[[920,5]]},"1474":{"position":[[150,5],[581,4]]},"1476":{"position":[[126,5],[1188,5]]},"1477":{"position":[[900,5],[3116,5]]},"1480":{"position":[[126,4],[722,4],[769,5]]}},"keywords":{}}],["name>",{"_index":945,"title":{},"content":{"63":{"position":[[509,10]]},"68":{"position":[[805,8]]},"284":{"position":[[345,9]]},"548":{"position":[[836,8]]}},"keywords":{}}],["name>"",{"_index":4224,"title":{},"content":{"585":{"position":[[299,15],[360,15],[421,15],[589,15],[680,15],[741,15]]},"606":{"position":[[227,15],[288,15]]}},"keywords":{}}],["name>.<organization>.<region>.app.firebolt.io",{"_index":5861,"title":{},"content":{"1206":{"position":[[437,61]]}},"keywords":{}}],["name>.iam.gserviceaccount.com.follow",{"_index":3818,"title":{},"content":{"477":{"position":[[759,39]]},"598":{"position":[[722,39]]}},"keywords":{}}],["name>/left",{"_index":6698,"title":{},"content":{"1475":{"position":[[990,14]]}},"keywords":{}}],["name>/out",{"_index":6699,"title":{},"content":{"1475":{"position":[[1153,13]]}},"keywords":{}}],["name>/right",{"_index":6697,"title":{},"content":{"1475":{"position":[[867,15]]}},"keywords":{}}],["name>@<project",{"_index":3817,"title":{},"content":{"477":{"position":[[738,20]]},"598":{"position":[[701,20]]}},"keywords":{}}],["name"",{"_index":3798,"title":{},"content":{"472":{"position":[[692,10]]},"1092":{"position":[[376,11]]}},"keywords":{}}],["name(",{"_index":3849,"title":{},"content":{"482":{"position":[[637,7]]}},"keywords":{}}],["name.account.u",{"_index":5742,"title":{},"content":{"1151":{"position":[[135,15]]}},"keywords":{}}],["name.click",{"_index":5086,"title":{},"content":{"943":{"position":[[547,10]]}},"keywords":{}}],["name.each",{"_index":5897,"title":{},"content":{"1232":{"position":[[299,9]]}},"keywords":{}}],["name.lambda.sourc",{"_index":2798,"title":{},"content":{"268":{"position":[[284,18]]}},"keywords":{}}],["name.mi",{"_index":5866,"title":{},"content":{"1207":{"position":[[115,7]]}},"keywords":{}}],["name.migration.0.sql",{"_index":2802,"title":{},"content":{"268":{"position":[[599,21]]}},"keywords":{}}],["name.sql",{"_index":2799,"title":{},"content":{"268":{"position":[[314,9]]}},"keywords":{}}],["name.t",{"_index":2808,"title":{},"content":{"269":{"position":[[250,8]]}},"keywords":{}}],["name/prefix",{"_index":3601,"title":{},"content":{"417":{"position":[[2323,11]]},"545":{"position":[[1718,11]]}},"keywords":{}}],["namein",{"_index":3793,"title":{},"content":{"472":{"position":[[602,6],[739,6]]}},"keywords":{}}],["namespac",{"_index":622,"title":{"27":{"position":[[0,10]]},"1462":{"position":[[7,10]]}},"content":{"27":{"position":[[439,10],[568,9],[623,10]]},"190":{"position":[[637,10]]},"307":{"position":[[1182,10],[2032,10]]},"370":{"position":[[2053,9]]},"371":{"position":[[1325,10]]},"757":{"position":[[1960,9]]},"758":{"position":[[287,10]]},"770":{"position":[[1960,9]]},"771":{"position":[[287,10]]},"797":{"position":[[1960,9]]},"798":{"position":[[285,10]]},"812":{"position":[[1960,9]]},"813":{"position":[[285,10]]},"828":{"position":[[1960,9]]},"829":{"position":[[285,10]]},"867":{"position":[[2157,9]]},"868":{"position":[[465,10]]},"907":{"position":[[1460,9]]},"908":{"position":[[353,10]]},"923":{"position":[[1460,9]]},"924":{"position":[[353,10]]},"934":{"position":[[1460,9]]},"935":{"position":[[353,10]]},"950":{"position":[[1460,9]]},"951":{"position":[[353,10]]},"968":{"position":[[1460,9]]},"969":{"position":[[353,10]]},"1008":{"position":[[333,9]]},"1045":{"position":[[1079,9]]},"1046":{"position":[[294,10]]},"1053":{"position":[[1079,9]]},"1054":{"position":[[294,10]]},"1061":{"position":[[1079,9]]},"1062":{"position":[[294,10]]},"1162":{"position":[[448,10],[459,9],[469,9],[856,10],[879,9],[901,9]]},"1163":{"position":[[256,10],[267,9]]},"1277":{"position":[[1062,9],[1093,9]]},"1278":{"position":[[288,10],[304,9]]},"1462":{"position":[[160,10],[752,10]]}},"keywords":{}}],["namespace/inst",{"_index":3424,"title":{},"content":{"370":{"position":[[2067,18]]}},"keywords":{}}],["namespace/schema",{"_index":5003,"title":{},"content":{"907":{"position":[[1474,16]]},"923":{"position":[[1474,16]]},"934":{"position":[[1474,16]]},"950":{"position":[[1474,16]]},"968":{"position":[[1474,16]]},"1045":{"position":[[1093,16]]},"1053":{"position":[[1093,16]]},"1061":{"position":[[1093,16]]}},"keywords":{}}],["namespace_nam",{"_index":6271,"title":{},"content":{"1357":{"position":[[412,17]]}},"keywords":{}}],["namesuch",{"_index":623,"title":{},"content":{"27":{"position":[[88,8]]}},"keywords":{}}],["nameyour",{"_index":3786,"title":{},"content":{"471":{"position":[[43,8]]}},"keywords":{}}],["narrow",{"_index":1034,"title":{},"content":{"68":{"position":[[1721,6]]},"180":{"position":[[56,6]]},"217":{"position":[[1544,6]]}},"keywords":{}}],["nation",{"_index":5655,"title":{},"content":{"1140":{"position":[[3133,8]]},"1292":{"position":[[5778,8]]},"1306":{"position":[[5778,8]]},"1316":{"position":[[3133,8]]},"1329":{"position":[[5778,8]]},"1340":{"position":[[3133,8]]},"1351":{"position":[[3133,8]]},"1379":{"position":[[2632,8]]},"1403":{"position":[[2632,8]]},"1414":{"position":[[2632,8]]},"1431":{"position":[[3156,8]]}},"keywords":{}}],["nativ",{"_index":796,"title":{},"content":{"53":{"position":[[127,8]]},"68":{"position":[[645,6]]},"102":{"position":[[306,6]]},"122":{"position":[[999,6]]},"281":{"position":[[2700,6]]},"320":{"position":[[840,6]]},"325":{"position":[[791,6]]},"330":{"position":[[407,6]]}},"keywords":{}}],["native:dev",{"_index":3304,"title":{},"content":{"363":{"position":[[1558,10]]},"647":{"position":[[97,10]]}},"keywords":{}}],["natur",{"_index":1594,"title":{},"content":{"112":{"position":[[603,6]]},"125":{"position":[[442,7]]},"129":{"position":[[202,7]]},"163":{"position":[[1110,7]]},"164":{"position":[[1109,7]]},"821":{"position":[[1048,7]]},"909":{"position":[[1003,6]]},"925":{"position":[[1003,6]]},"936":{"position":[[1003,6]]},"952":{"position":[[1003,6]]},"970":{"position":[[1003,6]]},"1140":{"position":[[3180,7]]},"1192":{"position":[[541,7]]},"1209":{"position":[[834,7]]},"1292":{"position":[[5821,7]]},"1306":{"position":[[5821,7]]},"1316":{"position":[[3180,7]]},"1329":{"position":[[5821,7]]},"1340":{"position":[[3180,7]]},"1351":{"position":[[3180,7]]},"1370":{"position":[[511,7]]},"1379":{"position":[[2679,7]]},"1394":{"position":[[949,7]]},"1403":{"position":[[2679,7]]},"1414":{"position":[[2679,7]]},"1423":{"position":[[874,7]]},"1431":{"position":[[3203,7]]},"1435":{"position":[[614,7]]},"1440":{"position":[[69,7]]},"1467":{"position":[[2007,7]]},"1477":{"position":[[2911,7]]}},"keywords":{}}],["navig",{"_index":1765,"title":{"137":{"position":[[0,10]]}},"content":{"137":{"position":[[122,11]]},"181":{"position":[[1,8]]},"204":{"position":[[368,8],[598,10]]},"205":{"position":[[43,10]]},"230":{"position":[[396,8]]},"240":{"position":[[2837,10]]},"267":{"position":[[109,8]]},"349":{"position":[[48,10]]},"479":{"position":[[48,10]]},"487":{"position":[[43,8],[540,8]]},"675":{"position":[[1,8]]},"709":{"position":[[222,9]]},"840":{"position":[[497,8]]},"849":{"position":[[394,8],[754,8],[968,8]]},"931":{"position":[[649,8]]},"943":{"position":[[377,8]]},"947":{"position":[[58,10]]},"964":{"position":[[366,10]]},"1092":{"position":[[48,10]]},"1455":{"position":[[6,10]]},"1479":{"position":[[29,8]]}},"keywords":{}}],["nchar",{"_index":5658,"title":{},"content":{"1140":{"position":[[3221,5]]},"1292":{"position":[[5871,5]]},"1306":{"position":[[5871,5]]},"1316":{"position":[[3221,5]]},"1329":{"position":[[5871,5]]},"1340":{"position":[[3221,5]]},"1351":{"position":[[3221,5]]},"1379":{"position":[[2725,5]]},"1403":{"position":[[2725,5]]},"1414":{"position":[[2725,5]]},"1431":{"position":[[3244,5]]}},"keywords":{}}],["nclob",{"_index":5659,"title":{},"content":{"1140":{"position":[[3256,5]]},"1316":{"position":[[3256,5]]},"1340":{"position":[[3256,5]]},"1351":{"position":[[3256,5]]},"1379":{"position":[[2772,5]]},"1403":{"position":[[2772,5]]},"1414":{"position":[[2772,5]]},"1431":{"position":[[3279,5]]}},"keywords":{}}],["ndb",{"_index":6209,"title":{},"content":{"1292":{"position":[[5911,3]]},"1306":{"position":[[5911,3]]},"1329":{"position":[[5911,3]]}},"keywords":{}}],["ndbcluster",{"_index":6212,"title":{},"content":{"1292":{"position":[[5960,10]]},"1306":{"position":[[5960,10]]},"1329":{"position":[[5960,10]]}},"keywords":{}}],["near",{"_index":1651,"title":{},"content":{"121":{"position":[[153,4]]},"193":{"position":[[220,4]]},"210":{"position":[[2021,4]]},"232":{"position":[[791,4]]}},"keywords":{}}],["nearest",{"_index":6693,"title":{},"content":{"1475":{"position":[[410,7]]}},"keywords":{}}],["nearli",{"_index":1814,"title":{},"content":{"141":{"position":[[101,6]]},"142":{"position":[[211,6]]}},"keywords":{}}],["necessari",{"_index":363,"title":{},"content":{"12":{"position":[[206,9]]},"13":{"position":[[1528,10]]},"56":{"position":[[678,10]]},"68":{"position":[[25,9]]},"90":{"position":[[87,9]]},"111":{"position":[[16,9]]},"137":{"position":[[410,10]]},"141":{"position":[[472,10]]},"201":{"position":[[12,9]]},"208":{"position":[[1279,10]]},"218":{"position":[[1521,9]]},"228":{"position":[[1470,10]]},"230":{"position":[[1244,10]]},"237":{"position":[[413,9]]},"240":{"position":[[2261,9]]},"268":{"position":[[1702,10]]},"309":{"position":[[1595,9]]},"400":{"position":[[142,9]]},"402":{"position":[[305,9]]},"477":{"position":[[173,9]]},"499":{"position":[[337,10]]},"548":{"position":[[248,10]]},"598":{"position":[[134,9]]},"634":{"position":[[329,10]]},"750":{"position":[[244,10]]},"766":{"position":[[244,10]]},"785":{"position":[[753,9]]},"789":{"position":[[278,10]]},"807":{"position":[[278,10]]},"823":{"position":[[278,10]]},"849":{"position":[[1837,10]]},"870":{"position":[[1030,10]]},"1047":{"position":[[857,9],[974,10]]},"1055":{"position":[[857,9],[974,10]]},"1063":{"position":[[857,9],[974,10]]},"1155":{"position":[[580,10]]},"1186":{"position":[[218,9]]},"1198":{"position":[[92,9]]},"1286":{"position":[[2448,9]]},"1301":{"position":[[2284,9]]},"1325":{"position":[[2448,9]]},"1473":{"position":[[297,9]]}},"keywords":{}}],["necessarili",{"_index":6614,"title":{},"content":{"1461":{"position":[[2734,11]]}},"keywords":{}}],["necessit",{"_index":2273,"title":{},"content":{"209":{"position":[[1483,11]]}},"keywords":{}}],["need",{"_index":340,"title":{},"content":{"11":{"position":[[1481,4],[1661,4],[1994,4]]},"17":{"position":[[1141,7]]},"19":{"position":[[427,6]]},"25":{"position":[[11,4]]},"50":{"position":[[71,7]]},"54":{"position":[[496,6]]},"61":{"position":[[105,4]]},"68":{"position":[[1627,4]]},"75":{"position":[[369,4]]},"81":{"position":[[227,5],[2332,5]]},"82":{"position":[[177,5],[2998,4]]},"89":{"position":[[414,6]]},"91":{"position":[[49,4]]},"100":{"position":[[1371,7]]},"107":{"position":[[533,4]]},"112":{"position":[[893,5]]},"119":{"position":[[541,6]]},"129":{"position":[[331,4],[547,4],[615,4]]},"136":{"position":[[262,4]]},"150":{"position":[[167,5],[185,4]]},"154":{"position":[[1947,4]]},"162":{"position":[[192,4],[496,4],[1606,4]]},"165":{"position":[[1642,4]]},"171":{"position":[[8,4]]},"172":{"position":[[8,4]]},"173":{"position":[[8,4],[93,4],[262,4]]},"179":{"position":[[332,4],[392,4]]},"180":{"position":[[314,4]]},"183":{"position":[[2782,5]]},"184":{"position":[[561,4]]},"188":{"position":[[8,5]]},"189":{"position":[[1485,4]]},"191":{"position":[[56,4],[1976,6]]},"199":{"position":[[43,4]]},"200":{"position":[[42,4]]},"202":{"position":[[312,5]]},"203":{"position":[[303,4]]},"204":{"position":[[198,4]]},"209":{"position":[[1083,4]]},"212":{"position":[[43,4]]},"216":{"position":[[495,4]]},"222":{"position":[[69,4]]},"224":{"position":[[71,4],[979,4]]},"228":{"position":[[673,4]]},"232":{"position":[[153,4]]},"234":{"position":[[359,4]]},"236":{"position":[[71,4],[526,4]]},"237":{"position":[[67,4],[1627,5]]},"240":{"position":[[37,4],[1937,6]]},"243":{"position":[[43,4]]},"247":{"position":[[43,4]]},"253":{"position":[[67,4],[119,4]]},"254":{"position":[[1042,5]]},"262":{"position":[[32,5]]},"266":{"position":[[227,4],[499,4]]},"267":{"position":[[1688,4]]},"273":{"position":[[32,5]]},"274":{"position":[[659,4],[1264,4]]},"277":{"position":[[339,4],[403,4]]},"278":{"position":[[90,5],[337,4],[570,5],[1584,7]]},"279":{"position":[[132,5]]},"280":{"position":[[396,4],[675,4],[1850,4]]},"283":{"position":[[32,5]]},"288":{"position":[[8,5]]},"291":{"position":[[759,6]]},"295":{"position":[[1496,4],[1548,4]]},"296":{"position":[[3337,4],[6544,4]]},"297":{"position":[[167,4]]},"299":{"position":[[8,5],[387,4]]},"301":{"position":[[1280,4]]},"302":{"position":[[759,6]]},"305":{"position":[[558,4]]},"307":{"position":[[277,4],[343,4],[805,4]]},"309":{"position":[[3465,4]]},"313":{"position":[[67,4],[119,4]]},"314":{"position":[[763,5]]},"320":{"position":[[1438,4]]},"322":{"position":[[948,4]]},"326":{"position":[[962,4],[1017,4]]},"329":{"position":[[304,6],[365,5]]},"330":{"position":[[570,4]]},"331":{"position":[[766,7]]},"343":{"position":[[1138,4]]},"347":{"position":[[38,4]]},"366":{"position":[[8,4],[1077,4]]},"370":{"position":[[714,4]]},"375":{"position":[[31,5],[108,4]]},"377":{"position":[[140,4]]},"379":{"position":[[98,4]]},"383":{"position":[[8,4]]},"390":{"position":[[31,5]]},"395":{"position":[[31,5]]},"400":{"position":[[31,5]]},"406":{"position":[[457,6]]},"413":{"position":[[253,4]]},"415":{"position":[[48,4],[120,4]]},"417":{"position":[[123,4]]},"419":{"position":[[337,4],[1561,4]]},"435":{"position":[[10,4]]},"438":{"position":[[123,4]]},"440":{"position":[[353,4]]},"441":{"position":[[170,4]]},"445":{"position":[[8,5]]},"446":{"position":[[8,5]]},"448":{"position":[[1158,4]]},"452":{"position":[[50,4]]},"458":{"position":[[50,4]]},"475":{"position":[[33,4]]},"477":{"position":[[33,4]]},"478":{"position":[[173,4],[612,4]]},"483":{"position":[[364,5]]},"502":{"position":[[583,4]]},"504":{"position":[[281,4],[1190,4]]},"507":{"position":[[31,5]]},"514":{"position":[[43,4]]},"515":{"position":[[52,5]]},"517":{"position":[[3321,4],[3369,4],[3620,4],[3668,4]]},"522":{"position":[[440,4]]},"530":{"position":[[440,4]]},"531":{"position":[[129,4]]},"532":{"position":[[228,4]]},"538":{"position":[[47,4]]},"545":{"position":[[123,4]]},"547":{"position":[[338,4],[1563,4]]},"581":{"position":[[31,5],[407,4]]},"582":{"position":[[48,4]]},"591":{"position":[[8,5]]},"597":{"position":[[33,4]]},"598":{"position":[[32,4]]},"599":{"position":[[173,4],[612,4]]},"602":{"position":[[993,4]]},"608":{"position":[[8,5]]},"609":{"position":[[8,5]]},"623":{"position":[[51,4]]},"629":{"position":[[48,4]]},"635":{"position":[[31,4]]},"639":{"position":[[279,4],[1188,4]]},"640":{"position":[[49,4]]},"659":{"position":[[88,4]]},"661":{"position":[[158,4]]},"683":{"position":[[102,4],[275,4]]},"685":{"position":[[146,4]]},"698":{"position":[[49,4]]},"704":{"position":[[48,4]]},"718":{"position":[[42,4]]},"724":{"position":[[648,4]]},"725":{"position":[[86,4]]},"726":{"position":[[504,4]]},"745":{"position":[[49,4]]},"750":{"position":[[31,4]]},"752":{"position":[[534,4]]},"753":{"position":[[1190,4]]},"754":{"position":[[1083,4]]},"757":{"position":[[1874,5]]},"762":{"position":[[482,4]]},"764":{"position":[[610,4]]},"766":{"position":[[31,4]]},"767":{"position":[[2445,4]]},"770":{"position":[[1874,5]]},"775":{"position":[[482,4]]},"777":{"position":[[610,4]]},"780":{"position":[[8,5],[535,4]]},"785":{"position":[[677,4]]},"789":{"position":[[31,4]]},"791":{"position":[[487,4]]},"792":{"position":[[2426,4]]},"793":{"position":[[1161,4]]},"794":{"position":[[1287,4]]},"797":{"position":[[1874,5]]},"802":{"position":[[482,4]]},"804":{"position":[[608,4]]},"805":{"position":[[185,4]]},"807":{"position":[[31,4]]},"808":{"position":[[1107,4]]},"809":{"position":[[1287,4]]},"812":{"position":[[1874,5]]},"817":{"position":[[482,4]]},"819":{"position":[[608,4]]},"820":{"position":[[185,4]]},"821":{"position":[[452,4],[556,4],[716,4]]},"823":{"position":[[31,4]]},"824":{"position":[[2557,4]]},"825":{"position":[[1123,4]]},"828":{"position":[[1874,5]]},"833":{"position":[[482,4]]},"835":{"position":[[608,4]]},"836":{"position":[[185,4]]},"840":{"position":[[2480,4]]},"842":{"position":[[2332,4]]},"849":{"position":[[2521,4],[3620,4]]},"855":{"position":[[31,4]]},"862":{"position":[[185,6]]},"864":{"position":[[935,4]]},"870":{"position":[[354,6]]},"874":{"position":[[185,6]]},"876":{"position":[[800,4]]},"894":{"position":[[50,4]]},"903":{"position":[[8,4]]},"904":{"position":[[2372,4]]},"907":{"position":[[497,4]]},"912":{"position":[[463,4],[572,4],[732,4],[1371,4]]},"915":{"position":[[8,4]]},"918":{"position":[[2664,4]]},"922":{"position":[[3116,5]]},"923":{"position":[[497,4]]},"930":{"position":[[8,4]]},"934":{"position":[[497,4]]},"945":{"position":[[494,4]]},"946":{"position":[[103,4],[232,4]]},"950":{"position":[[497,4]]},"963":{"position":[[8,4]]},"964":{"position":[[602,4]]},"968":{"position":[[497,4]]},"987":{"position":[[106,4]]},"988":{"position":[[102,4],[152,5]]},"989":{"position":[[655,4]]},"991":{"position":[[159,4]]},"995":{"position":[[47,4]]},"1002":{"position":[[106,4]]},"1003":{"position":[[102,4],[152,5]]},"1004":{"position":[[738,4]]},"1009":{"position":[[159,4]]},"1018":{"position":[[8,4]]},"1021":{"position":[[1145,4]]},"1023":{"position":[[318,4],[1544,4]]},"1031":{"position":[[31,5]]},"1034":{"position":[[724,4]]},"1040":{"position":[[75,5]]},"1045":{"position":[[482,4]]},"1050":{"position":[[75,5]]},"1051":{"position":[[2088,4]]},"1053":{"position":[[482,4]]},"1058":{"position":[[75,5]]},"1061":{"position":[[482,4]]},"1066":{"position":[[8,4]]},"1067":{"position":[[437,4]]},"1082":{"position":[[139,5]]},"1083":{"position":[[139,5]]},"1089":{"position":[[54,5]]},"1118":{"position":[[924,7]]},"1122":{"position":[[31,5]]},"1136":{"position":[[31,5]]},"1142":{"position":[[31,5],[229,4]]},"1149":{"position":[[31,5],[677,4]]},"1155":{"position":[[110,7]]},"1156":{"position":[[622,4]]},"1160":{"position":[[31,5],[392,4]]},"1168":{"position":[[31,5],[229,4]]},"1176":{"position":[[31,5]]},"1185":{"position":[[31,5]]},"1186":{"position":[[5,4],[618,4]]},"1189":{"position":[[354,4]]},"1194":{"position":[[31,5]]},"1197":{"position":[[360,4]]},"1203":{"position":[[31,5]]},"1204":{"position":[[32,4]]},"1207":{"position":[[443,4]]},"1211":{"position":[[31,5]]},"1218":{"position":[[31,5]]},"1226":{"position":[[31,5]]},"1227":{"position":[[91,5]]},"1228":{"position":[[98,5]]},"1230":{"position":[[615,4]]},"1236":{"position":[[47,4]]},"1243":{"position":[[31,5]]},"1244":{"position":[[8,5]]},"1245":{"position":[[8,5]]},"1248":{"position":[[387,4]]},"1251":{"position":[[8,5],[296,4]]},"1258":{"position":[[31,5],[271,4]]},"1264":{"position":[[47,4]]},"1274":{"position":[[31,5]]},"1277":{"position":[[753,4]]},"1281":{"position":[[31,5]]},"1285":{"position":[[828,4]]},"1286":{"position":[[1348,4]]},"1289":{"position":[[1607,4]]},"1295":{"position":[[31,5]]},"1300":{"position":[[828,4]]},"1301":{"position":[[1184,4]]},"1303":{"position":[[1211,4],[1345,4]]},"1309":{"position":[[31,5]]},"1310":{"position":[[928,4]]},"1313":{"position":[[682,4]]},"1319":{"position":[[31,5]]},"1322":{"position":[[69,4]]},"1324":{"position":[[828,4]]},"1325":{"position":[[1348,4]]},"1332":{"position":[[31,5]]},"1335":{"position":[[69,4]]},"1337":{"position":[[682,4]]},"1343":{"position":[[31,5]]},"1346":{"position":[[1333,4]]},"1348":{"position":[[682,4]]},"1354":{"position":[[31,5]]},"1357":{"position":[[292,4]]},"1365":{"position":[[31,5]]},"1366":{"position":[[61,4]]},"1372":{"position":[[31,5]]},"1373":{"position":[[1337,4]]},"1374":{"position":[[1341,4]]},"1382":{"position":[[31,5]]},"1383":{"position":[[1924,6]]},"1384":{"position":[[68,4]]},"1387":{"position":[[393,4],[1019,4]]},"1391":{"position":[[850,4]]},"1396":{"position":[[31,5]]},"1406":{"position":[[31,5]]},"1417":{"position":[[31,5]]},"1418":{"position":[[107,4]]},"1421":{"position":[[380,4]]},"1425":{"position":[[31,5]]},"1437":{"position":[[427,4]]},"1447":{"position":[[591,4]]},"1448":{"position":[[142,4],[229,4]]},"1451":{"position":[[364,5]]},"1455":{"position":[[244,4]]},"1459":{"position":[[1260,4]]},"1461":{"position":[[4774,5]]}},"keywords":{}}],["neededan",{"_index":4549,"title":{},"content":{"739":{"position":[[50,8]]}},"keywords":{}}],["neededclick",{"_index":3695,"title":{},"content":{"436":{"position":[[197,11]]}},"keywords":{}}],["neg",{"_index":1880,"title":{},"content":{"159":{"position":[[749,8],[878,8],[1027,9]]},"381":{"position":[[462,8]]}},"keywords":{}}],["negoti",{"_index":1676,"title":{},"content":{"122":{"position":[[691,9]]}},"keywords":{}}],["neon",{"_index":5004,"title":{"939":{"position":[[0,4]]},"942":{"position":[[33,5]]}},"content":{"907":{"position":[[1785,5]]},"923":{"position":[[1785,5]]},"940":{"position":[[64,4]]},"942":{"position":[[149,4],[300,4],[414,5],[448,4],[468,4],[656,4]]},"943":{"position":[[173,4],[214,4],[362,4],[393,4],[734,4],[762,4],[816,4],[908,4]]},"945":{"position":[[879,4]]},"946":{"position":[[88,5],[349,5]]},"947":{"position":[[129,4],[202,4],[253,4],[353,4]]},"968":{"position":[[1785,5]]},"1313":{"position":[[1535,5]]},"1337":{"position":[[1535,5]]}},"keywords":{}}],["neon'",{"_index":5107,"title":{},"content":{"946":{"position":[[18,6]]}},"keywords":{}}],["neon_api_key"",{"_index":5093,"title":{},"content":{"943":{"position":[[1098,19]]}},"keywords":{}}],["neon_superus",{"_index":5080,"title":{},"content":{"943":{"position":[[270,14]]}},"keywords":{}}],["nest",{"_index":631,"title":{},"content":{"27":{"position":[[381,8]]},"60":{"position":[[120,6]]},"73":{"position":[[117,6]]},"98":{"position":[[504,6]]},"99":{"position":[[447,6]]},"138":{"position":[[859,8]]},"142":{"position":[[830,8]]},"183":{"position":[[933,6]]},"227":{"position":[[115,6]]},"228":{"position":[[551,6]]},"267":{"position":[[1323,6]]},"270":{"position":[[952,6]]},"274":{"position":[[1907,6]]},"281":{"position":[[2772,6]]},"296":{"position":[[1909,6],[2109,6],[2485,6],[7749,6]]},"313":{"position":[[3223,6]]},"337":{"position":[[246,6]]},"593":{"position":[[595,6]]},"1164":{"position":[[740,6]]},"1279":{"position":[[268,6]]},"1292":{"position":[[6017,6]]},"1306":{"position":[[6017,6]]},"1329":{"position":[[6017,6]]},"1358":{"position":[[918,6]]}},"keywords":{}}],["netsuit",{"_index":3367,"title":{"837":{"position":[[0,8]]},"844":{"position":[[0,8]]}},"content":{"364":{"position":[[2700,8]]},"839":{"position":[[8,8]]},"840":{"position":[[10,8],[60,8],[118,8],[214,8],[430,8],[1563,8]]},"841":{"position":[[250,8]]},"842":{"position":[[70,8],[90,8],[358,8],[512,8],[1115,8],[1204,8]]},"843":{"position":[[90,8]]},"846":{"position":[[69,8]]},"848":{"position":[[8,8]]},"849":{"position":[[34,8],[157,8],[901,8],[1088,8],[2454,8]]},"850":{"position":[[250,8]]},"851":{"position":[[78,8],[652,8]]}},"keywords":{}}],["netsuite.com",{"_index":4751,"title":{},"content":{"842":{"position":[[399,13]]}},"keywords":{}}],["netsuite2.com",{"_index":4752,"title":{},"content":{"842":{"position":[[416,13]]},"843":{"position":[[328,13]]}},"keywords":{}}],["netsuite:dev",{"_index":3368,"title":{},"content":{"364":{"position":[[2755,12]]},"852":{"position":[[90,12]]}},"keywords":{}}],["network",{"_index":461,"title":{"83":{"position":[[34,9]]}},"content":{"16":{"position":[[325,8],[1189,7]]},"17":{"position":[[1001,8],[1010,8]]},"83":{"position":[[75,8],[598,7]]},"88":{"position":[[507,8]]},"204":{"position":[[384,8]]},"221":{"position":[[1593,7],[1754,7]]},"224":{"position":[[129,7],[714,8],[760,8],[790,7],[858,8],[1060,7]]},"370":{"position":[[1515,7],[1612,8]]},"750":{"position":[[1335,8]]},"784":{"position":[[409,8]]},"789":{"position":[[1736,8]]},"792":{"position":[[1031,8]]},"793":{"position":[[566,8]]},"808":{"position":[[582,8]]},"824":{"position":[[823,8]]},"866":{"position":[[583,8]]},"878":{"position":[[593,8]]},"904":{"position":[[822,8]]},"915":{"position":[[1192,8]]},"918":{"position":[[1031,8]]},"919":{"position":[[566,8]]},"931":{"position":[[586,8]]},"963":{"position":[[1346,8]]},"1043":{"position":[[566,8]]},"1051":{"position":[[822,8]]},"1059":{"position":[[586,8]]},"1138":{"position":[[806,7],[903,8]]},"1154":{"position":[[256,7],[777,8]]},"1198":{"position":[[498,8]]},"1255":{"position":[[409,8]]},"1303":{"position":[[586,8]]},"1373":{"position":[[804,8]]},"1374":{"position":[[804,8]]},"1397":{"position":[[583,8]]},"1398":{"position":[[582,8]]},"1409":{"position":[[566,8]]}},"keywords":{}}],["network'",{"_index":2460,"title":{},"content":{"221":{"position":[[2001,9]]}},"keywords":{}}],["network_nam",{"_index":6215,"title":{},"content":{"1292":{"position":[[6061,13]]},"1306":{"position":[[6061,13]]},"1329":{"position":[[6061,13]]}},"keywords":{}}],["networksfor",{"_index":4598,"title":{},"content":{"753":{"position":[[607,11]]},"767":{"position":[[753,11]]},"1042":{"position":[[1372,11]]},"1289":{"position":[[1117,11]]},"1303":{"position":[[828,11]]},"1322":{"position":[[1336,11]]},"1408":{"position":[[645,11]]}},"keywords":{}}],["networktunnel",{"_index":1222,"title":{},"content":{"83":{"position":[[802,13],[1091,14]]},"370":{"position":[[1501,13]]},"371":{"position":[[308,14]]},"753":{"position":[[515,13]]},"767":{"position":[[661,13]]},"784":{"position":[[314,13]]},"792":{"position":[[939,13]]},"793":{"position":[[474,13]]},"808":{"position":[[490,13]]},"824":{"position":[[731,13]]},"866":{"position":[[491,13]]},"868":{"position":[[320,14]]},"878":{"position":[[501,13]]},"880":{"position":[[321,14]]},"904":{"position":[[730,13]]},"918":{"position":[[939,13]]},"919":{"position":[[474,13]]},"931":{"position":[[494,13]]},"1042":{"position":[[1280,13]]},"1043":{"position":[[474,13]]},"1051":{"position":[[730,13]]},"1059":{"position":[[494,13]]},"1138":{"position":[[792,13]]},"1139":{"position":[[187,14]]},"1154":{"position":[[682,13]]},"1198":{"position":[[403,13]]},"1255":{"position":[[314,13]]},"1289":{"position":[[1022,13]]},"1303":{"position":[[494,13],[733,13]]},"1322":{"position":[[1241,13]]},"1373":{"position":[[712,13]]},"1374":{"position":[[712,13]]},"1397":{"position":[[491,13]]},"1398":{"position":[[490,13]]},"1408":{"position":[[553,13]]},"1409":{"position":[[474,13]]}},"keywords":{}}],["networktunnel/sshforward",{"_index":3419,"title":{},"content":{"370":{"position":[[1628,27]]},"1138":{"position":[[919,27]]}},"keywords":{}}],["networktunnel/sshforwarding/privatekey",{"_index":3422,"title":{},"content":{"370":{"position":[[1870,38]]},"1138":{"position":[[1160,38]]}},"keywords":{}}],["networktunnel/sshforwarding/sshendpoint",{"_index":3420,"title":{},"content":{"370":{"position":[[1678,39]]},"1138":{"position":[[969,39]]}},"keywords":{}}],["never",{"_index":349,"title":{},"content":{"11":{"position":[[1884,5]]},"64":{"position":[[947,5]]},"70":{"position":[[55,5]]},"136":{"position":[[80,5]]},"163":{"position":[[745,5]]},"322":{"position":[[940,5]]},"763":{"position":[[193,5]]},"764":{"position":[[510,5]]},"776":{"position":[[193,5]]},"777":{"position":[[510,5]]},"803":{"position":[[193,5]]},"804":{"position":[[508,5]]},"818":{"position":[[193,5]]},"819":{"position":[[508,5]]},"834":{"position":[[193,5]]},"835":{"position":[[508,5]]},"849":{"position":[[1341,5]]},"1147":{"position":[[295,5]]},"1174":{"position":[[295,5]]},"1216":{"position":[[295,5]]},"1224":{"position":[[295,5]]},"1292":{"position":[[2971,5]]},"1306":{"position":[[2971,5]]},"1329":{"position":[[2971,5]]},"1393":{"position":[[261,5]]},"1443":{"position":[[574,5],[1129,5]]}},"keywords":{}}],["new",{"_index":69,"title":{"278":{"position":[[8,3]]},"308":{"position":[[2,3]]}},"content":{"2":{"position":[[114,3],[257,3]]},"8":{"position":[[318,3]]},"13":{"position":[[757,3],[1118,3],[1163,3],[1398,3]]},"14":{"position":[[266,3]]},"19":{"position":[[375,4]]},"20":{"position":[[113,3],[175,3],[368,3]]},"32":{"position":[[84,3],[533,3]]},"35":{"position":[[161,3]]},"36":{"position":[[244,3]]},"38":{"position":[[322,3]]},"54":{"position":[[23,3],[638,3]]},"55":{"position":[[1010,3]]},"56":{"position":[[664,3],[732,3]]},"62":{"position":[[433,3],[608,3],[734,3]]},"63":{"position":[[327,3]]},"77":{"position":[[533,3]]},"100":{"position":[[703,3],[1121,3]]},"105":{"position":[[982,3],[1057,3],[1221,3],[1250,3]]},"109":{"position":[[393,3]]},"112":{"position":[[1007,3]]},"120":{"position":[[2721,3]]},"121":{"position":[[515,3],[710,3]]},"125":{"position":[[130,3]]},"136":{"position":[[321,3]]},"138":{"position":[[93,3]]},"142":{"position":[[109,3]]},"144":{"position":[[69,3]]},"170":{"position":[[1,3]]},"177":{"position":[[153,3]]},"182":{"position":[[587,3]]},"183":{"position":[[147,3],[600,3],[1659,3],[1987,3],[2357,3],[2873,3]]},"184":{"position":[[30,3],[181,3]]},"189":{"position":[[12,3],[230,3],[765,3]]},"190":{"position":[[95,3]]},"191":{"position":[[126,3],[188,3],[332,3]]},"192":{"position":[[219,3],[1802,3]]},"193":{"position":[[175,3]]},"197":{"position":[[864,3]]},"204":{"position":[[454,3]]},"205":{"position":[[28,3],[113,4]]},"208":{"position":[[535,3],[567,3],[635,3],[907,3],[1402,3],[1459,3],[1651,3]]},"210":{"position":[[1760,3]]},"215":{"position":[[28,3]]},"217":{"position":[[344,3]]},"218":{"position":[[903,3],[1779,3],[1857,3]]},"221":{"position":[[508,3]]},"222":{"position":[[694,3]]},"223":{"position":[[808,3]]},"224":{"position":[[778,3]]},"228":{"position":[[874,3],[1045,3]]},"237":{"position":[[2825,3]]},"239":{"position":[[6,5],[167,3],[384,3],[1801,3],[2436,3]]},"240":{"position":[[266,3],[331,3],[2521,3]]},"249":{"position":[[104,3]]},"259":{"position":[[1247,3],[1360,3],[2828,3],[2906,3]]},"267":{"position":[[164,3],[204,3],[570,3],[968,3]]},"268":{"position":[[1320,3]]},"269":{"position":[[891,3]]},"270":{"position":[[1492,3]]},"271":{"position":[[187,3],[254,3],[420,3]]},"278":{"position":[[119,3],[277,3]]},"290":{"position":[[321,3]]},"291":{"position":[[1712,3],[1790,3]]},"295":{"position":[[1084,3]]},"296":{"position":[[3803,3],[5548,3],[5661,3],[6924,3],[7285,3],[7839,3],[7905,3]]},"301":{"position":[[274,3]]},"302":{"position":[[1621,3],[1699,3]]},"306":{"position":[[283,3]]},"307":{"position":[[360,3],[736,3],[3165,3]]},"308":{"position":[[67,3],[385,3],[710,3],[1142,3]]},"309":{"position":[[598,3],[1203,3],[2011,3],[3408,3]]},"310":{"position":[[137,3]]},"315":{"position":[[237,3],[1668,3]]},"316":{"position":[[1057,3]]},"321":{"position":[[908,3],[2395,3]]},"322":{"position":[[761,3]]},"323":{"position":[[893,3]]},"324":{"position":[[214,3]]},"329":{"position":[[774,3]]},"331":{"position":[[732,3]]},"333":{"position":[[524,3]]},"339":{"position":[[29,3]]},"367":{"position":[[242,3]]},"373":{"position":[[932,3]]},"395":{"position":[[264,3]]},"436":{"position":[[353,3],[467,3],[595,3],[742,3]]},"477":{"position":[[866,3]]},"478":{"position":[[296,3],[372,3]]},"480":{"position":[[652,3]]},"483":{"position":[[402,3],[776,3]]},"487":{"position":[[256,3]]},"515":{"position":[[456,3],[494,3]]},"517":{"position":[[1157,3],[1371,3],[1860,3]]},"554":{"position":[[504,3]]},"556":{"position":[[972,3]]},"595":{"position":[[210,3],[360,3]]},"598":{"position":[[828,3]]},"599":{"position":[[296,3],[372,3]]},"616":{"position":[[475,3]]},"645":{"position":[[285,3],[400,3]]},"652":{"position":[[285,3],[400,3]]},"724":{"position":[[667,3]]},"753":{"position":[[198,3]]},"754":{"position":[[593,3]]},"763":{"position":[[427,3]]},"767":{"position":[[198,3],[314,3],[337,3],[1013,3],[1353,3],[1745,3]]},"776":{"position":[[427,3]]},"792":{"position":[[518,3],[627,3],[650,3],[1318,3],[1685,3]]},"793":{"position":[[191,3]]},"794":{"position":[[799,3]]},"803":{"position":[[433,3]]},"809":{"position":[[799,3]]},"818":{"position":[[433,3]]},"821":{"position":[[1100,3]]},"824":{"position":[[310,3],[419,3],[442,3],[1079,3],[1419,3],[1807,3]]},"825":{"position":[[635,3]]},"834":{"position":[[433,3]]},"839":{"position":[[75,3],[192,3]]},"840":{"position":[[562,4],[941,4],[2005,4]]},"848":{"position":[[75,3],[229,3]]},"849":{"position":[[1033,4],[1554,4],[3124,4]]},"856":{"position":[[43,3],[67,3]]},"857":{"position":[[43,3]]},"898":{"position":[[1201,3]]},"904":{"position":[[310,3],[418,3],[441,3],[1079,3],[1216,3],[1346,3]]},"912":{"position":[[1443,3]]},"917":{"position":[[170,3],[289,3]]},"918":{"position":[[518,3],[627,3],[650,3],[1370,3],[1508,3],[1638,3]]},"919":{"position":[[191,3],[820,3]]},"931":{"position":[[1003,3]]},"943":{"position":[[494,3]]},"947":{"position":[[83,3],[842,3]]},"965":{"position":[[170,3],[289,3]]},"989":{"position":[[192,3],[261,3],[390,3],[804,3]]},"1004":{"position":[[275,3],[344,3],[473,3],[887,3]]},"1008":{"position":[[190,3],[246,3]]},"1020":{"position":[[195,3],[262,3],[826,3]]},"1036":{"position":[[233,3]]},"1043":{"position":[[191,3]]},"1051":{"position":[[310,3],[418,3],[441,3]]},"1067":{"position":[[53,3]]},"1077":{"position":[[374,3]]},"1089":{"position":[[224,3]]},"1091":{"position":[[12,3]]},"1118":{"position":[[118,3],[257,3],[1126,3]]},"1123":{"position":[[809,3]]},"1131":{"position":[[233,3]]},"1136":{"position":[[131,3]]},"1140":{"position":[[3290,3]]},"1142":{"position":[[118,3]]},"1149":{"position":[[260,3],[573,3]]},"1160":{"position":[[118,3]]},"1168":{"position":[[118,3]]},"1176":{"position":[[40,3]]},"1177":{"position":[[318,3],[417,3]]},"1183":{"position":[[348,3],[756,3],[1286,3]]},"1187":{"position":[[199,3]]},"1196":{"position":[[780,3]]},"1201":{"position":[[570,3]]},"1204":{"position":[[192,3]]},"1211":{"position":[[118,3]]},"1218":{"position":[[118,3]]},"1228":{"position":[[357,3]]},"1243":{"position":[[883,3]]},"1258":{"position":[[167,3]]},"1281":{"position":[[170,3],[268,3]]},"1283":{"position":[[227,3]]},"1286":{"position":[[856,3]]},"1289":{"position":[[301,3],[501,3],[524,3]]},"1292":{"position":[[3020,3]]},"1295":{"position":[[170,3],[268,3]]},"1298":{"position":[[808,3]]},"1301":{"position":[[692,3]]},"1306":{"position":[[3020,3]]},"1309":{"position":[[131,3]]},"1311":{"position":[[63,3]]},"1316":{"position":[[3290,3]]},"1319":{"position":[[170,3],[268,3]]},"1321":{"position":[[81,3],[281,3],[304,3]]},"1322":{"position":[[694,3]]},"1325":{"position":[[856,3]]},"1329":{"position":[[3020,3]]},"1332":{"position":[[131,3]]},"1334":{"position":[[81,3],[369,3],[392,3]]},"1335":{"position":[[694,3]]},"1340":{"position":[[3290,3]]},"1343":{"position":[[131,3]]},"1346":{"position":[[808,3]]},"1351":{"position":[[3290,3]]},"1372":{"position":[[170,3],[268,3]]},"1373":{"position":[[310,3],[400,3],[423,3]]},"1374":{"position":[[310,3],[400,3],[423,3]]},"1379":{"position":[[2831,3]]},"1383":{"position":[[312,3]]},"1385":{"position":[[198,3]]},"1396":{"position":[[170,3],[268,3]]},"1403":{"position":[[2831,3]]},"1406":{"position":[[170,3],[268,3]]},"1409":{"position":[[191,3]]},"1414":{"position":[[2831,3]]},"1419":{"position":[[198,3]]},"1426":{"position":[[275,3]]},"1431":{"position":[[3313,3]]},"1437":{"position":[[994,3]]},"1439":{"position":[[747,3]]},"1440":{"position":[[757,3]]},"1444":{"position":[[484,3]]},"1448":{"position":[[277,3],[449,3],[880,3],[912,3]]},"1449":{"position":[[482,3],[515,3],[656,3]]},"1451":{"position":[[318,3],[937,3]]},"1455":{"position":[[527,3]]},"1470":{"position":[[116,3]]},"1475":{"position":[[1968,3]]},"1479":{"position":[[81,3],[217,3],[697,3]]}},"keywords":{}}],["newest",{"_index":2788,"title":{},"content":{"263":{"position":[[339,7]]}},"keywords":{}}],["newfound",{"_index":2621,"title":{},"content":{"241":{"position":[[461,8]]}},"keywords":{}}],["newli",{"_index":817,"title":{},"content":{"55":{"position":[[346,5]]},"56":{"position":[[469,5]]},"61":{"position":[[997,5]]},"308":{"position":[[1016,5]]},"480":{"position":[[448,5],[718,5],[881,5]]},"821":{"position":[[1425,5],[1557,5]]},"1008":{"position":[[1565,5]]},"1437":{"position":[[721,5]]}},"keywords":{}}],["newlin",{"_index":104,"title":{},"content":{"3":{"position":[[103,7]]},"1275":{"position":[[429,9]]}},"keywords":{}}],["next",{"_index":533,"title":{"176":{"position":[[7,6]]},"212":{"position":[[0,4]]},"219":{"position":[[7,6]]},"243":{"position":[[0,4]]},"292":{"position":[[7,6]]},"303":{"position":[[7,6]]}},"content":{"20":{"position":[[408,4]]},"56":{"position":[[2559,4]]},"82":{"position":[[3966,5]]},"173":{"position":[[942,4]]},"183":{"position":[[804,5],[2267,5]]},"184":{"position":[[929,4]]},"190":{"position":[[800,5],[1530,5],[1795,4]]},"191":{"position":[[2154,4]]},"192":{"position":[[438,5],[1952,5],[2157,4]]},"203":{"position":[[606,4]]},"204":{"position":[[561,5]]},"206":{"position":[[836,6],[961,4]]},"217":{"position":[[950,5],[2097,4]]},"218":{"position":[[524,5],[2069,4]]},"228":{"position":[[1226,5]]},"236":{"position":[[1802,4]]},"238":{"position":[[25,4]]},"239":{"position":[[508,5],[1614,4],[2897,4]]},"240":{"position":[[2148,4],[3744,4],[4099,5],[4769,4]]},"254":{"position":[[2098,4]]},"259":{"position":[[1443,5],[2989,5]]},"264":{"position":[[1,5]]},"267":{"position":[[1194,5]]},"275":{"position":[[1,5]]},"281":{"position":[[660,4],[1115,4]]},"290":{"position":[[1109,5],[1562,4]]},"291":{"position":[[1,5],[572,5],[776,4],[1840,4]]},"296":{"position":[[2650,4]]},"301":{"position":[[1318,5]]},"302":{"position":[[1,5],[572,5],[776,4],[1749,4]]},"314":{"position":[[1368,4],[1645,4]]},"315":{"position":[[5,4]]},"531":{"position":[[319,4]]},"864":{"position":[[306,5]]},"876":{"position":[[306,5]]},"947":{"position":[[942,5],[1091,4]]},"1047":{"position":[[403,5]]},"1055":{"position":[[403,5]]},"1063":{"position":[[403,5]]},"1118":{"position":[[724,4],[884,5]]},"1140":{"position":[[3327,4]]},"1209":{"position":[[865,4]]},"1292":{"position":[[3064,4]]},"1306":{"position":[[3064,4]]},"1316":{"position":[[3327,4]]},"1329":{"position":[[3064,4]]},"1340":{"position":[[3327,4]]},"1351":{"position":[[3327,4]]},"1379":{"position":[[2885,4]]},"1403":{"position":[[2885,4]]},"1414":{"position":[[2885,4]]},"1431":{"position":[[3350,4]]},"1440":{"position":[[672,4],[1001,4]]},"1442":{"position":[[1083,4]]},"1451":{"position":[[963,4]]},"1452":{"position":[[1989,4]]},"1453":{"position":[[281,4],[762,4]]}},"keywords":{}}],["next:dev",{"_index":3312,"title":{},"content":{"363":{"position":[[2065,8]]},"992":{"position":[[100,8]]}},"keywords":{}}],["ngrok",{"_index":2493,"title":{"238":{"position":[[40,6]]}},"content":{"234":{"position":[[236,6],[404,5]]},"238":{"position":[[133,6],[269,5]]},"242":{"position":[[231,5]]}},"keywords":{}}],["nice",{"_index":1740,"title":{},"content":{"133":{"position":[[216,4]]},"281":{"position":[[2583,6]]}},"keywords":{}}],["nintendo",{"_index":1730,"title":{},"content":{"130":{"position":[[215,8],[382,10]]}},"keywords":{}}],["no_wait",{"_index":6089,"title":{},"content":{"1292":{"position":[[3370,7]]},"1306":{"position":[[3370,7]]},"1329":{"position":[[3370,7]]}},"keywords":{}}],["no_write_to_b",{"_index":6093,"title":{},"content":{"1292":{"position":[[3420,13]]},"1306":{"position":[[3420,13]]},"1329":{"position":[[3420,13]]}},"keywords":{}}],["nocheck",{"_index":6334,"title":{},"content":{"1379":{"position":[[2981,7]]},"1403":{"position":[[2981,7]]},"1414":{"position":[[2981,7]]}},"keywords":{}}],["nocrypt",{"_index":6371,"title":{},"content":{"1384":{"position":[[343,7]]}},"keywords":{}}],["node",{"_index":3673,"title":{},"content":{"432":{"position":[[235,5],[271,6]]},"757":{"position":[[1162,4],[1170,4],[1200,4]]},"770":{"position":[[1162,4],[1170,4],[1200,4]]},"797":{"position":[[1162,4],[1170,4],[1200,4]]},"812":{"position":[[1162,4],[1170,4],[1200,4]]},"828":{"position":[[1162,4],[1170,4],[1200,4]]},"867":{"position":[[1870,4],[1878,4],[1908,4]]}},"keywords":{}}],["nodegroup",{"_index":6076,"title":{},"content":{"1292":{"position":[[3159,9]]},"1306":{"position":[[3159,9]]},"1329":{"position":[[3159,9]]}},"keywords":{}}],["nofitif",{"_index":6580,"title":{},"content":{"1455":{"position":[[142,14]]}},"keywords":{}}],["nolan"",{"_index":2368,"title":{},"content":{"210":{"position":[[3057,13]]}},"keywords":{}}],["nominations"",{"_index":2378,"title":{},"content":{"210":{"position":[[3214,17]]}},"keywords":{}}],["non",{"_index":232,"title":{"1438":{"position":[[18,3]]}},"content":{"7":{"position":[[194,3]]},"56":{"position":[[2193,3]]},"75":{"position":[[344,3]]},"82":{"position":[[3510,3],[3633,3]]},"114":{"position":[[568,3]]},"115":{"position":[[1096,3]]},"164":{"position":[[1859,3]]},"165":{"position":[[1945,3]]},"166":{"position":[[143,3]]},"210":{"position":[[1837,3]]},"253":{"position":[[3192,3]]},"254":{"position":[[3924,3]]},"323":{"position":[[1799,3],[1869,3]]},"379":{"position":[[832,4]]},"759":{"position":[[190,3]]},"772":{"position":[[201,3]]},"799":{"position":[[188,3]]},"814":{"position":[[188,3]]},"830":{"position":[[188,3]]},"842":{"position":[[2263,3]]},"1204":{"position":[[5,3]]},"1438":{"position":[[173,3]]}},"keywords":{}}],["nonc",{"_index":6483,"title":{},"content":{"1437":{"position":[[1284,5],[1345,5],[1439,5],[1520,6]]}},"keywords":{}}],["nonclust",{"_index":6335,"title":{},"content":{"1379":{"position":[[3041,12]]},"1403":{"position":[[3041,12]]},"1414":{"position":[[3041,12]]}},"keywords":{}}],["none",{"_index":29,"title":{},"content":{"1":{"position":[[350,5]]},"125":{"position":[[343,4]]},"366":{"position":[[253,4]]},"595":{"position":[[140,5],[383,5]]},"903":{"position":[[279,4]]},"915":{"position":[[279,4]]},"930":{"position":[[279,4]]},"963":{"position":[[433,4]]},"1140":{"position":[[3382,4]]},"1292":{"position":[[3223,4]]},"1306":{"position":[[3223,4]]},"1316":{"position":[[3382,4]]},"1329":{"position":[[3223,4]]},"1340":{"position":[[3382,4]]},"1351":{"position":[[3382,4]]},"1354":{"position":[[147,4],[231,4]]},"1379":{"position":[[3099,4]]},"1403":{"position":[[3099,4]]},"1414":{"position":[[3099,4]]},"1431":{"position":[[3405,4]]}},"keywords":{}}],["nontrivi",{"_index":4659,"title":{},"content":{"764":{"position":[[289,10]]},"777":{"position":[[289,10]]},"804":{"position":[[287,10]]},"819":{"position":[[287,10]]},"835":{"position":[[287,10]]}},"keywords":{}}],["normal",{"_index":519,"title":{},"content":{"19":{"position":[[295,6]]},"60":{"position":[[969,8]]},"307":{"position":[[1221,6],[2071,6]]},"309":{"position":[[1131,9]]},"548":{"position":[[1318,8]]},"757":{"position":[[415,8]]},"764":{"position":[[825,8]]},"770":{"position":[[415,8]]},"777":{"position":[[825,8]]},"797":{"position":[[415,8]]},"804":{"position":[[823,8]]},"812":{"position":[[415,8]]},"819":{"position":[[823,8]]},"828":{"position":[[415,8]]},"835":{"position":[[823,8]]},"864":{"position":[[1439,6]]},"1019":{"position":[[121,6]]},"1020":{"position":[[1130,6]]},"1140":{"position":[[3418,9]]},"1144":{"position":[[843,8]]},"1170":{"position":[[843,8]]},"1267":{"position":[[455,8]]},"1285":{"position":[[477,8]]},"1300":{"position":[[477,8]]},"1316":{"position":[[3418,9]]},"1324":{"position":[[477,8]]},"1340":{"position":[[3418,9]]},"1351":{"position":[[3418,9]]},"1379":{"position":[[3150,9]]},"1403":{"position":[[3150,9]]},"1414":{"position":[[3150,9]]},"1423":{"position":[[889,9]]},"1431":{"position":[[3441,9]]}},"keywords":{}}],["north",{"_index":496,"title":{},"content":{"17":{"position":[[605,5]]},"385":{"position":[[215,6]]}},"keywords":{}}],["nosql",{"_index":2243,"title":{},"content":{"208":{"position":[[139,5]]},"259":{"position":[[924,5],[2505,5]]},"289":{"position":[[173,5]]},"590":{"position":[[16,5]]},"779":{"position":[[14,5]]},"1250":{"position":[[14,5]]}},"keywords":{}}],["notabl",{"_index":3108,"title":{},"content":{"319":{"position":[[1380,8]]},"1358":{"position":[[444,7]]}},"keywords":{}}],["notaft",{"_index":1353,"title":{},"content":{"94":{"position":[[2053,10],[2227,9]]},"120":{"position":[[1605,10],[1779,9]]},"1479":{"position":[[394,9],[727,8]]},"1480":{"position":[[1311,10],[1485,9]]},"1481":{"position":[[99,9]]}},"keywords":{}}],["notbefor",{"_index":1349,"title":{},"content":{"94":{"position":[[1686,11],[1861,10],[2040,12]]},"120":{"position":[[1238,11],[1413,10],[1592,12]]},"1479":{"position":[[380,9],[755,9]]},"1480":{"position":[[944,11],[1119,10],[1298,12]]}},"keywords":{}}],["note",{"_index":297,"title":{},"content":{"11":{"position":[[246,4]]},"61":{"position":[[896,4]]},"125":{"position":[[1490,5]]},"138":{"position":[[2224,4]]},"141":{"position":[[2180,4]]},"142":{"position":[[2284,4]]},"144":{"position":[[654,4]]},"165":{"position":[[1157,4],[1446,4]]},"179":{"position":[[365,4]]},"185":{"position":[[36,4]]},"192":{"position":[[1837,4]]},"206":{"position":[[269,4]]},"222":{"position":[[926,4]]},"223":{"position":[[966,4]]},"224":{"position":[[947,4],[1146,4]]},"249":{"position":[[126,4]]},"253":{"position":[[564,6]]},"263":{"position":[[480,4]]},"268":{"position":[[1082,4]]},"269":{"position":[[653,4]]},"277":{"position":[[1,4]]},"278":{"position":[[1,4]]},"279":{"position":[[1,4]]},"280":{"position":[[1,4]]},"281":{"position":[[1,4]]},"288":{"position":[[897,6]]},"299":{"position":[[812,6]]},"307":{"position":[[1794,4],[2769,4]]},"309":{"position":[[190,4],[3167,4]]},"310":{"position":[[164,4]]},"313":{"position":[[564,6]]},"343":{"position":[[480,4]]},"406":{"position":[[164,4],[232,4]]},"415":{"position":[[277,4]]},"429":{"position":[[1125,4]]},"436":{"position":[[508,4]]},"446":{"position":[[255,4],[375,4]]},"494":{"position":[[161,4]]},"500":{"position":[[131,5]]},"553":{"position":[[34,4],[236,4]]},"554":{"position":[[34,4]]},"562":{"position":[[180,5]]},"753":{"position":[[1520,4]]},"767":{"position":[[2399,4]]},"792":{"position":[[144,4],[2380,4]]},"793":{"position":[[1543,4]]},"808":{"position":[[1511,4]]},"824":{"position":[[2511,4]]},"900":{"position":[[78,4],[295,4]]},"904":{"position":[[2326,4]]},"918":{"position":[[144,4],[2618,4]]},"919":{"position":[[2396,4]]},"931":{"position":[[1990,4]]},"1036":{"position":[[887,4]]},"1043":{"position":[[1760,4]]},"1051":{"position":[[2042,4]]},"1059":{"position":[[1837,4]]},"1067":{"position":[[592,4]]},"1082":{"position":[[211,4]]},"1083":{"position":[[272,4]]},"1204":{"position":[[554,4]]},"1247":{"position":[[886,4]]},"1298":{"position":[[966,4]]},"1303":{"position":[[1633,4]]},"1322":{"position":[[926,4]]},"1335":{"position":[[926,4]]},"1346":{"position":[[966,4]]},"1373":{"position":[[1291,4]]},"1374":{"position":[[1295,4]]},"1397":{"position":[[1072,4]]},"1398":{"position":[[1075,4]]},"1409":{"position":[[1033,4]]},"1434":{"position":[[265,4],[422,4],[521,4],[588,4],[700,4],[778,4],[855,4],[1002,4],[1084,4],[1175,4],[1277,4],[1521,4],[1625,4],[1696,4],[1906,4],[2007,4],[2114,4],[2178,4]]},"1438":{"position":[[233,4]]},"1439":{"position":[[1566,4]]},"1440":{"position":[[1299,4],[1411,4]]},"1447":{"position":[[679,4]]},"1448":{"position":[[1151,5]]},"1452":{"position":[[4494,4]]},"1467":{"position":[[1967,4]]}},"keywords":{}}],["notesengag",{"_index":4389,"title":{},"content":{"649":{"position":[[370,16]]}},"keywords":{}}],["notespay",{"_index":5362,"title":{},"content":{"1096":{"position":[[153,12]]}},"keywords":{}}],["noth",{"_index":2842,"title":{},"content":{"278":{"position":[[1289,7]]},"1370":{"position":[[547,7]]}},"keywords":{}}],["notic",{"_index":376,"title":{},"content":{"13":{"position":[[114,7]]},"81":{"position":[[337,6]]},"82":{"position":[[3896,6]]},"217":{"position":[[1885,6]]},"296":{"position":[[7021,6]]}},"keywords":{}}],["notif",{"_index":2130,"title":{"1454":{"position":[[0,13]]}},"content":{"190":{"position":[[1981,12]]},"197":{"position":[[30,13]]},"217":{"position":[[2192,12]]},"218":{"position":[[2118,12]]},"290":{"position":[[1672,12]]},"291":{"position":[[1928,12]]},"301":{"position":[[1646,12]]},"302":{"position":[[1840,12]]},"709":{"position":[[246,12]]},"1455":{"position":[[300,13],[391,14]]},"1456":{"position":[[101,13]]},"1457":{"position":[[67,13],[152,13]]}},"keywords":{}}],["notifi",{"_index":1104,"title":{},"content":{"77":{"position":[[517,8]]},"291":{"position":[[666,8]]},"302":{"position":[[666,8]]},"487":{"position":[[643,6]]}},"keywords":{}}],["notion",{"_index":3121,"title":{"853":{"position":[[0,6]]}},"content":{"320":{"position":[[847,6]]},"322":{"position":[[814,6]]},"364":{"position":[[2768,6]]},"855":{"position":[[38,6],[176,7]]},"857":{"position":[[69,6]]},"858":{"position":[[250,6]]},"859":{"position":[[449,6],[782,6]]}},"keywords":{}}],["notion:dev",{"_index":3369,"title":{},"content":{"364":{"position":[[2821,10]]},"860":{"position":[[159,10]]}},"keywords":{}}],["notnul",{"_index":5668,"title":{},"content":{"1140":{"position":[[3488,7]]},"1316":{"position":[[3488,7]]},"1340":{"position":[[3488,7]]},"1351":{"position":[[3488,7]]},"1370":{"position":[[558,7]]},"1431":{"position":[[3511,7]]}},"keywords":{}}],["now",{"_index":434,"title":{},"content":{"14":{"position":[[724,4]]},"162":{"position":[[221,3]]},"182":{"position":[[535,3]]},"183":{"position":[[2108,3],[2763,4]]},"184":{"position":[[1,4]]},"190":{"position":[[2113,4]]},"212":{"position":[[132,3]]},"218":{"position":[[1,3],[661,3]]},"219":{"position":[[1,3]]},"230":{"position":[[1,3]]},"236":{"position":[[2524,7],[3309,7]]},"240":{"position":[[4075,4]]},"243":{"position":[[124,3]]},"268":{"position":[[1972,3]]},"269":{"position":[[1434,3]]},"270":{"position":[[2050,3]]},"279":{"position":[[128,3]]},"296":{"position":[[5087,4]]},"315":{"position":[[1171,4]]},"419":{"position":[[1257,4]]},"429":{"position":[[1156,3]]},"436":{"position":[[928,3]]},"440":{"position":[[1273,4]]},"485":{"position":[[492,3]]},"547":{"position":[[1259,4]]},"657":{"position":[[677,3]]},"673":{"position":[[492,3]]},"688":{"position":[[492,3]]},"840":{"position":[[2384,3]]},"849":{"position":[[3524,3]]},"864":{"position":[[1683,3]]},"876":{"position":[[943,3]]},"947":{"position":[[966,3]]},"1023":{"position":[[1240,4]]},"1183":{"position":[[1737,3]]},"1201":{"position":[[338,3],[697,3]]},"1317":{"position":[[561,3],[804,3]]},"1341":{"position":[[561,3],[804,3]]},"1352":{"position":[[561,3],[804,3]]},"1359":{"position":[[351,3]]},"1384":{"position":[[1090,3]]},"1432":{"position":[[561,3],[818,3]]},"1434":{"position":[[1036,3]]},"1444":{"position":[[849,3]]},"1447":{"position":[[124,3]]},"1461":{"position":[[5453,3]]}},"keywords":{}}],["now'",{"_index":2434,"title":{},"content":{"218":{"position":[[938,5]]}},"keywords":{}}],["nowait",{"_index":6085,"title":{},"content":{"1292":{"position":[[3320,6]]},"1306":{"position":[[3320,6]]},"1329":{"position":[[3320,6]]}},"keywords":{}}],["npm",{"_index":950,"title":{},"content":{"63":{"position":[[742,3]]},"91":{"position":[[194,3]]}},"keywords":{}}],["nprivat",{"_index":4067,"title":{},"content":{"546":{"position":[[343,9]]},"594":{"position":[[331,9]]}},"keywords":{}}],["nth_valu",{"_index":5671,"title":{},"content":{"1140":{"position":[[3529,9]]},"1292":{"position":[[3478,9]]},"1306":{"position":[[3478,9]]},"1316":{"position":[[3529,9]]},"1329":{"position":[[3478,9]]},"1340":{"position":[[3529,9]]},"1351":{"position":[[3529,9]]},"1431":{"position":[[3552,9]]}},"keywords":{}}],["ntile",{"_index":5674,"title":{},"content":{"1140":{"position":[[3569,5]]},"1292":{"position":[[3525,5]]},"1306":{"position":[[3525,5]]},"1316":{"position":[[3569,5]]},"1329":{"position":[[3525,5]]},"1340":{"position":[[3569,5]]},"1351":{"position":[[3569,5]]},"1431":{"position":[[3592,5]]}},"keywords":{}}],["nuanc",{"_index":2414,"title":{},"content":{"211":{"position":[[154,7]]}},"keywords":{}}],["null",{"_index":835,"title":{},"content":{"56":{"position":[[432,7]]},"94":{"position":[[689,6]]},"100":{"position":[[424,6],[556,5]]},"158":{"position":[[853,4]]},"159":{"position":[[550,4]]},"166":{"position":[[44,4],[212,5]]},"183":{"position":[[3095,5],[3272,4]]},"236":{"position":[[2323,4],[3108,4]]},"254":{"position":[[850,4],[2907,4],[3568,4]]},"278":{"position":[[1031,5],[1056,5]]},"279":{"position":[[1304,5],[1326,5],[1351,5],[1373,4]]},"280":{"position":[[1563,5],[1586,4]]},"309":{"position":[[950,4],[1060,4]]},"310":{"position":[[315,4]]},"352":{"position":[[134,4]]},"417":{"position":[[1604,5],[1617,4]]},"432":{"position":[[471,5]]},"491":{"position":[[292,5],[305,4],[543,5],[556,4]]},"492":{"position":[[363,5],[480,5],[577,5]]},"502":{"position":[[1252,5],[1265,4]]},"545":{"position":[[1206,5],[1219,4]]},"637":{"position":[[766,5],[779,4]]},"664":{"position":[[313,5],[326,4],[564,5],[577,4]]},"665":{"position":[[363,5],[480,5],[577,5]]},"679":{"position":[[292,5],[305,4],[543,5],[556,4]]},"680":{"position":[[363,5],[480,5]]},"694":{"position":[[292,5],[305,4],[543,5],[556,4]]},"695":{"position":[[363,5],[480,5],[577,5]]},"842":{"position":[[2267,4]]},"843":{"position":[[453,4]]},"898":{"position":[[160,4]]},"1009":{"position":[[1672,4]]},"1021":{"position":[[1763,5],[1776,4]]},"1140":{"position":[[3617,4]]},"1144":{"position":[[1061,4],[1100,4]]},"1192":{"position":[[574,4]]},"1209":{"position":[[900,4]]},"1213":{"position":[[738,4],[777,4]]},"1230":{"position":[[150,5]]},"1247":{"position":[[321,5]]},"1292":{"position":[[3571,4],[3617,5]]},"1306":{"position":[[3571,4],[3617,5]]},"1316":{"position":[[3617,4]]},"1329":{"position":[[3571,4],[3617,5]]},"1340":{"position":[[3617,4]]},"1351":{"position":[[3617,4]]},"1370":{"position":[[574,4],[584,5]]},"1379":{"position":[[3251,4]]},"1394":{"position":[[990,4]]},"1403":{"position":[[3251,4]]},"1414":{"position":[[3251,4]]},"1423":{"position":[[918,4]]},"1431":{"position":[[3640,4]]},"1464":{"position":[[587,5],[714,5],[810,5],[889,5]]},"1467":{"position":[[2857,5],[2936,5]]}},"keywords":{}}],["nullabl",{"_index":5259,"title":{},"content":{"1047":{"position":[[808,9]]},"1055":{"position":[[808,9]]},"1063":{"position":[[808,9]]}},"keywords":{}}],["nullif",{"_index":5679,"title":{},"content":{"1140":{"position":[[3646,6]]},"1316":{"position":[[3646,6]]},"1340":{"position":[[3646,6]]},"1351":{"position":[[3646,6]]},"1379":{"position":[[3309,6]]},"1403":{"position":[[3309,6]]},"1414":{"position":[[3309,6]]},"1431":{"position":[[3669,6]]}},"keywords":{}}],["number",{"_index":551,"title":{},"content":{"20":{"position":[[931,6]]},"72":{"position":[[138,6]]},"94":{"position":[[1179,8]]},"97":{"position":[[216,6]]},"100":{"position":[[92,6]]},"107":{"position":[[1869,6],[2178,7]]},"110":{"position":[[1402,7]]},"137":{"position":[[590,6]]},"138":{"position":[[2400,6]]},"142":{"position":[[2478,6]]},"146":{"position":[[177,6]]},"149":{"position":[[186,6]]},"152":{"position":[[193,6]]},"159":{"position":[[758,7],[773,6],[833,7],[887,7]]},"161":{"position":[[1082,6]]},"162":{"position":[[1939,6],[2106,7],[2182,8],[2233,7],[2288,7]]},"183":{"position":[[2216,6],[4334,6]]},"193":{"position":[[397,6]]},"208":{"position":[[798,6]]},"240":{"position":[[3668,6]]},"254":{"position":[[418,6],[470,6],[1486,6],[1538,6],[1952,7],[3874,6]]},"263":{"position":[[607,6]]},"280":{"position":[[1445,6]]},"281":{"position":[[2135,6]]},"296":{"position":[[3626,6],[4865,7],[5074,7]]},"308":{"position":[[529,8]]},"315":{"position":[[1092,7]]},"323":{"position":[[811,6]]},"370":{"position":[[797,6]]},"379":{"position":[[216,6]]},"397":{"position":[[423,6],[728,6]]},"402":{"position":[[152,6]]},"410":{"position":[[78,6]]},"419":{"position":[[1978,6]]},"441":{"position":[[587,6]]},"504":{"position":[[1607,6]]},"509":{"position":[[205,6]]},"517":{"position":[[2260,6],[3545,6]]},"547":{"position":[[1980,6]]},"552":{"position":[[98,6],[374,6]]},"556":{"position":[[1495,6],[2020,6]]},"577":{"position":[[165,6]]},"588":{"position":[[160,6]]},"595":{"position":[[1448,6]]},"639":{"position":[[1605,6]]},"668":{"position":[[163,6]]},"747":{"position":[[99,7]]},"757":{"position":[[1564,6]]},"770":{"position":[[1564,6]]},"797":{"position":[[1564,6]]},"812":{"position":[[1564,6]]},"821":{"position":[[694,6]]},"828":{"position":[[1564,6]]},"842":{"position":[[1380,6],[1497,6],[2461,6],[2568,6]]},"867":{"position":[[889,6],[1048,6]]},"870":{"position":[[84,7]]},"879":{"position":[[1046,6]]},"907":{"position":[[580,6]]},"912":{"position":[[710,6]]},"922":{"position":[[630,6]]},"923":{"position":[[580,6]]},"934":{"position":[[580,6]]},"950":{"position":[[580,6]]},"968":{"position":[[580,6]]},"1023":{"position":[[1961,6]]},"1045":{"position":[[565,6]]},"1053":{"position":[[565,6]]},"1061":{"position":[[565,6]]},"1110":{"position":[[121,6],[153,7],[182,7],[212,7]]},"1164":{"position":[[281,6],[501,7]]},"1170":{"position":[[934,6],[1077,6]]},"1172":{"position":[[383,6]]},"1196":{"position":[[751,6],[1109,6],[1130,6]]},"1220":{"position":[[611,6],[754,6]]},"1222":{"position":[[383,6]]},"1230":{"position":[[156,7]]},"1243":{"position":[[532,6]]},"1247":{"position":[[327,7]]},"1275":{"position":[[222,8]]},"1292":{"position":[[3666,6]]},"1306":{"position":[[3666,6]]},"1329":{"position":[[3666,6]]},"1356":{"position":[[1235,6]]},"1461":{"position":[[157,6],[2067,6]]},"1465":{"position":[[542,6]]},"1466":{"position":[[20,7],[319,6]]},"1467":{"position":[[787,6],[848,6]]},"1475":{"position":[[521,6],[548,6],[1254,6],[1325,6],[1958,6]]},"1476":{"position":[[1141,6],[1378,6]]},"1477":{"position":[[1302,6],[3797,6]]}},"keywords":{}}],["number_of_shard",{"_index":5830,"title":{},"content":{"1196":{"position":[[1091,17]]}},"keywords":{}}],["numberfield",{"_index":5946,"title":{},"content":{"1275":{"position":[[477,12]]}},"keywords":{}}],["numbers"",{"_index":6652,"title":{},"content":{"1465":{"position":[[1128,14]]},"1466":{"position":[[415,14]]}},"keywords":{}}],["numbersexecutionsincom",{"_index":5398,"title":{},"content":{"1110":{"position":[[343,25]]}},"keywords":{}}],["numbersflowskeysmessag",{"_index":5399,"title":{},"content":{"1110":{"position":[[375,23]]}},"keywords":{}}],["numer",{"_index":405,"title":{},"content":{"13":{"position":[[1183,9]]},"208":{"position":[[1424,9]]},"321":{"position":[[1859,8]]},"750":{"position":[[1155,9]]},"754":{"position":[[481,9],[1288,9]]},"766":{"position":[[1155,9]]},"789":{"position":[[1556,9]]},"794":{"position":[[354,9],[1492,9]]},"807":{"position":[[1143,9]]},"809":{"position":[[354,9],[1492,9]]},"823":{"position":[[1143,9]]},"825":{"position":[[354,9],[1328,9]]},"1140":{"position":[[3681,7]]},"1209":{"position":[[918,7]]},"1286":{"position":[[411,9],[1578,9]]},"1292":{"position":[[3714,7]]},"1301":{"position":[[411,9],[1414,9]]},"1306":{"position":[[3714,7]]},"1316":{"position":[[3681,7]]},"1325":{"position":[[411,9],[1578,9]]},"1329":{"position":[[3714,7]]},"1340":{"position":[[3681,7]]},"1351":{"position":[[3681,7]]},"1379":{"position":[[3368,7]]},"1403":{"position":[[3368,7]]},"1414":{"position":[[3368,7]]},"1431":{"position":[[3704,7]]}},"keywords":{}}],["nutrit",{"_index":6518,"title":{},"content":{"1448":{"position":[[704,9]]}},"keywords":{}}],["nvarchar",{"_index":6107,"title":{},"content":{"1292":{"position":[[3764,8]]},"1306":{"position":[[3764,8]]},"1329":{"position":[[3764,8]]}},"keywords":{}}],["o",{"_index":880,"title":{},"content":{"58":{"position":[[334,1],[510,1]]},"169":{"position":[[575,1],[754,1]]},"250":{"position":[[1524,1]]}},"keywords":{}}],["o[deriv",{"_index":1503,"title":{},"content":{"105":{"position":[[1428,9]]}},"keywords":{}}],["oa2",{"_index":3498,"title":{},"content":{"388":{"position":[[244,3]]}},"keywords":{}}],["oauth",{"_index":3484,"title":{"726":{"position":[[0,5]]},"856":{"position":[[10,5]]},"1082":{"position":[[0,5]]},"1227":{"position":[[0,5]]},"1244":{"position":[[0,5]]}},"content":{"387":{"position":[[405,5]]},"446":{"position":[[357,5]]},"513":{"position":[[174,5]]},"522":{"position":[[175,5]]},"526":{"position":[[31,5]]},"530":{"position":[[175,5]]},"531":{"position":[[270,5]]},"551":{"position":[[173,5]]},"569":{"position":[[192,5]]},"573":{"position":[[418,5]]},"581":{"position":[[363,5]]},"609":{"position":[[498,5]]},"614":{"position":[[175,5]]},"643":{"position":[[149,5]]},"650":{"position":[[148,5]]},"668":{"position":[[125,5]]},"716":{"position":[[175,5]]},"718":{"position":[[28,6]]},"724":{"position":[[102,5],[135,5]]},"725":{"position":[[32,5]]},"726":{"position":[[19,5],[450,5]]},"728":{"position":[[209,5],[282,5],[410,5],[528,5]]},"731":{"position":[[146,5]]},"855":{"position":[[210,5],[288,5]]},"898":{"position":[[744,5],[971,5]]},"987":{"position":[[92,6]]},"988":{"position":[[126,5]]},"1002":{"position":[[92,6]]},"1003":{"position":[[126,5]]},"1016":{"position":[[132,5]]},"1067":{"position":[[322,5],[392,5]]},"1082":{"position":[[124,6]]},"1102":{"position":[[144,5]]},"1133":{"position":[[426,5],[446,5],[538,5],[562,5],[705,5]]},"1226":{"position":[[175,5]]},"1227":{"position":[[1,5]]},"1230":{"position":[[280,5]]},"1243":{"position":[[1130,5],[1212,5]]},"1247":{"position":[[130,6],[451,5]]},"1363":{"position":[[152,5]]}},"keywords":{}}],["oauth2",{"_index":3471,"title":{"383":{"position":[[6,6]]},"445":{"position":[[6,6]]},"514":{"position":[[16,7]]},"523":{"position":[[6,6]]},"531":{"position":[[6,6]]},"553":{"position":[[6,6]]},"570":{"position":[[6,6]]},"608":{"position":[[6,6]]},"615":{"position":[[6,6]]},"644":{"position":[[6,6]]},"651":{"position":[[6,6]]},"717":{"position":[[6,6]]},"732":{"position":[[6,6]]},"987":{"position":[[6,6]]},"1002":{"position":[[6,6]]},"1130":{"position":[[0,6]]}},"content":{"382":{"position":[[21,6]]},"384":{"position":[[83,6]]},"387":{"position":[[138,7]]},"438":{"position":[[891,6],[1038,6],[1189,6],[1355,6]]},"444":{"position":[[21,6]]},"448":{"position":[[138,7]]},"500":{"position":[[102,6]]},"502":{"position":[[416,6]]},"513":{"position":[[97,7]]},"514":{"position":[[8,6]]},"522":{"position":[[85,7]]},"530":{"position":[[85,7]]},"534":{"position":[[138,7]]},"551":{"position":[[85,7]]},"556":{"position":[[138,7]]},"569":{"position":[[104,7]]},"573":{"position":[[142,7]]},"607":{"position":[[102,7],[190,6]]},"611":{"position":[[138,7]]},"614":{"position":[[88,7]]},"643":{"position":[[76,7]]},"650":{"position":[[76,6]]},"716":{"position":[[87,7]]},"720":{"position":[[138,7]]},"731":{"position":[[78,7]]},"859":{"position":[[138,7]]},"898":{"position":[[387,6]]},"988":{"position":[[193,7]]},"991":{"position":[[138,7]]},"1003":{"position":[[193,7]]},"1009":{"position":[[138,7]]},"1070":{"position":[[138,7]]},"1085":{"position":[[158,6]]},"1129":{"position":[[104,6]]},"1133":{"position":[[489,6],[609,6],[736,6]]}},"keywords":{}}],["oauth2.0",{"_index":3483,"title":{},"content":{"387":{"position":[[309,8]]},"388":{"position":[[206,8]]},"448":{"position":[[335,8],[351,8]]},"449":{"position":[[204,8]]},"895":{"position":[[356,8],[389,8]]},"1133":{"position":[[150,9]]}},"keywords":{}}],["object",{"_index":20,"title":{"337":{"position":[[10,8]]}},"content":{"1":{"position":[[253,7]]},"14":{"position":[[455,6]]},"17":{"position":[[563,6],[948,6]]},"56":{"position":[[142,6],[1004,6],[1909,6]]},"66":{"position":[[106,8]]},"67":{"position":[[11,6],[1766,6],[1875,6]]},"69":{"position":[[148,6],[425,6],[834,6],[1012,6]]},"70":{"position":[[716,6]]},"73":{"position":[[124,7]]},"76":{"position":[[656,6]]},"94":{"position":[[268,6],[427,6],[795,6],[1325,6],[2835,7]]},"98":{"position":[[681,7]]},"120":{"position":[[158,6],[344,6],[910,6],[989,6],[2056,6]]},"121":{"position":[[948,6]]},"122":{"position":[[1425,6],[2234,6]]},"123":{"position":[[588,7]]},"154":{"position":[[299,7],[1086,7]]},"160":{"position":[[132,7],[260,7],[752,6]]},"162":{"position":[[2020,6],[2209,6]]},"164":{"position":[[613,6]]},"165":{"position":[[1018,6]]},"166":{"position":[[358,6]]},"183":{"position":[[1249,6],[1953,6],[3759,6]]},"207":{"position":[[413,6],[534,6],[919,6]]},"236":{"position":[[3755,7]]},"237":{"position":[[59,7],[108,7],[213,6],[2571,7],[2746,7]]},"239":{"position":[[854,6],[975,6]]},"254":{"position":[[304,6],[1372,6]]},"268":{"position":[[881,6]]},"269":{"position":[[506,6]]},"281":{"position":[[2024,6]]},"296":{"position":[[412,6],[1383,6],[2072,8]]},"301":{"position":[[1013,7]]},"307":{"position":[[1324,6],[2192,6]]},"309":{"position":[[2158,6],[2617,6],[2755,6],[2854,7]]},"313":{"position":[[3246,7]]},"314":{"position":[[1232,6],[1305,6]]},"337":{"position":[[125,7],[187,6]]},"341":{"position":[[226,6],[354,6]]},"370":{"position":[[736,6],[1621,6],[1671,6]]},"377":{"position":[[162,6]]},"387":{"position":[[253,6]]},"413":{"position":[[301,7]]},"417":{"position":[[145,6],[334,7],[1175,6],[1223,7],[1448,6],[1806,6]]},"432":{"position":[[477,6]]},"438":{"position":[[145,6],[334,7],[642,6],[1691,6],[1739,7]]},"448":{"position":[[265,6]]},"485":{"position":[[223,7]]},"491":{"position":[[69,6]]},"492":{"position":[[69,6]]},"502":{"position":[[213,6],[261,7],[384,6],[495,6],[605,6],[794,7],[1096,6],[1454,6]]},"534":{"position":[[525,6]]},"543":{"position":[[150,7]]},"545":{"position":[[145,6],[334,7],[784,6],[832,7],[1050,6],[1408,6]]},"556":{"position":[[553,6]]},"573":{"position":[[297,6]]},"584":{"position":[[285,6]]},"611":{"position":[[268,6]]},"619":{"position":[[243,6]]},"637":{"position":[[151,6],[345,6],[610,6],[968,6]]},"642":{"position":[[200,7]]},"646":{"position":[[491,6]]},"654":{"position":[[212,6]]},"657":{"position":[[223,7]]},"664":{"position":[[69,6]]},"665":{"position":[[69,6]]},"673":{"position":[[223,7]]},"679":{"position":[[69,6]]},"680":{"position":[[69,6]]},"688":{"position":[[223,7]]},"694":{"position":[[69,6]]},"695":{"position":[[69,6]]},"720":{"position":[[449,6]]},"735":{"position":[[189,6]]},"839":{"position":[[151,7]]},"840":{"position":[[1572,7]]},"842":{"position":[[529,6]]},"848":{"position":[[151,7]]},"849":{"position":[[2463,7]]},"859":{"position":[[303,6]]},"869":{"position":[[44,6],[60,6],[74,6],[112,7],[322,6],[381,8],[689,7],[865,6]]},"879":{"position":[[396,6]]},"907":{"position":[[519,6]]},"923":{"position":[[519,6]]},"934":{"position":[[519,6]]},"950":{"position":[[519,6]]},"968":{"position":[[519,6]]},"974":{"position":[[197,7]]},"975":{"position":[[75,7]]},"976":{"position":[[78,7],[364,7]]},"985":{"position":[[62,8],[461,8],[570,7],[673,7]]},"989":{"position":[[118,7],[340,7]]},"991":{"position":[[263,6],[847,6]]},"1000":{"position":[[62,8],[418,7],[444,8],[467,7],[639,8],[748,7],[884,7],[987,7]]},"1004":{"position":[[118,7],[423,7]]},"1008":{"position":[[1663,6]]},"1009":{"position":[[263,6],[1030,7],[1067,7],[1483,8],[1703,6]]},"1021":{"position":[[1167,6],[1607,6],[1965,6]]},"1034":{"position":[[746,6]]},"1045":{"position":[[504,6]]},"1053":{"position":[[504,6]]},"1061":{"position":[[504,6]]},"1070":{"position":[[293,6]]},"1085":{"position":[[353,6]]},"1138":{"position":[[912,6],[962,6]]},"1144":{"position":[[104,8],[541,8],[1320,7]]},"1151":{"position":[[1283,7]]},"1162":{"position":[[389,8]]},"1164":{"position":[[238,6]]},"1170":{"position":[[104,8],[541,8],[1245,7]]},"1172":{"position":[[320,6]]},"1188":{"position":[[502,6]]},"1192":{"position":[[275,7]]},"1196":{"position":[[267,6]]},"1213":{"position":[[104,8],[396,8],[997,7]]},"1220":{"position":[[104,8],[396,8],[922,7]]},"1222":{"position":[[320,6]]},"1230":{"position":[[164,7]]},"1239":{"position":[[272,6]]},"1247":{"position":[[335,7]]},"1260":{"position":[[831,7]]},"1275":{"position":[[281,6]]},"1277":{"position":[[775,6]]},"1285":{"position":[[850,6]]},"1300":{"position":[[850,6]]},"1313":{"position":[[704,6]]},"1324":{"position":[[850,6]]},"1337":{"position":[[704,6]]},"1348":{"position":[[704,6]]},"1356":{"position":[[984,6]]},"1379":{"position":[[3421,6]]},"1382":{"position":[[166,7]]},"1386":{"position":[[748,6]]},"1394":{"position":[[272,7]]},"1403":{"position":[[3421,6]]},"1414":{"position":[[3421,6]]},"1420":{"position":[[608,7]]},"1423":{"position":[[282,7]]},"1463":{"position":[[307,6]]},"1464":{"position":[[163,6]]},"1465":{"position":[[486,6]]},"1466":{"position":[[122,6]]},"1467":{"position":[[146,8],[192,8],[465,6],[670,7],[1239,7],[2136,6]]},"1474":{"position":[[422,6]]},"1475":{"position":[[687,6],[762,6],[815,6],[924,6],[1096,6],[1205,6],[1524,6],[1641,6],[1784,6],[1894,6]]},"1476":{"position":[[173,6],[1239,6]]},"1477":{"position":[[88,6],[814,8],[841,6],[943,6],[1055,7],[1069,6],[1267,6],[2963,6],[3165,6],[3277,7],[3291,6]]},"1480":{"position":[[281,6],[695,6]]}},"keywords":{}}],["object$foo",{"_index":1433,"title":{},"content":{"99":{"position":[[695,12]]}},"keywords":{}}],["objectsdealsengagementsemail",{"_index":4370,"title":{},"content":{"642":{"position":[[110,28]]}},"keywords":{}}],["observ",{"_index":1445,"title":{},"content":{"101":{"position":[[6,8],[336,8]]},"165":{"position":[[1735,8]]},"480":{"position":[[1145,8]]},"754":{"position":[[706,8]]},"794":{"position":[[912,8]]},"809":{"position":[[912,8]]},"825":{"position":[[748,8]]},"1020":{"position":[[426,9]]},"1286":{"position":[[969,8]]},"1301":{"position":[[805,8]]},"1325":{"position":[[969,8]]}},"keywords":{}}],["obtain",{"_index":2211,"title":{},"content":{"201":{"position":[[1,6]]},"348":{"position":[[58,6]]},"349":{"position":[[350,8]]},"384":{"position":[[193,6]]},"436":{"position":[[21,8]]},"556":{"position":[[960,9]]},"747":{"position":[[151,6]]},"840":{"position":[[454,6]]},"849":{"position":[[925,6]]},"898":{"position":[[1194,6]]},"989":{"position":[[738,6]]},"1004":{"position":[[821,6]]}},"keywords":{}}],["obviou",{"_index":3840,"title":{},"content":{"480":{"position":[[1332,7]]}},"keywords":{}}],["occasion",{"_index":2080,"title":{},"content":{"183":{"position":[[3290,12]]},"237":{"position":[[1425,12]]},"366":{"position":[[823,12]]},"602":{"position":[[351,12]]},"750":{"position":[[511,12]]},"766":{"position":[[511,12]]},"789":{"position":[[499,12]]},"807":{"position":[[499,12]]},"823":{"position":[[499,12]]},"903":{"position":[[849,12]]},"915":{"position":[[849,12]]},"930":{"position":[[849,12]]},"963":{"position":[[1003,12]]},"1040":{"position":[[565,12]]},"1050":{"position":[[565,12]]},"1058":{"position":[[565,12]]}},"keywords":{}}],["occur",{"_index":78,"title":{},"content":{"2":{"position":[[293,9]]},"6":{"position":[[251,5],[545,5]]},"19":{"position":[[335,6]]},"75":{"position":[[128,6]]},"110":{"position":[[576,6]]},"183":{"position":[[3303,5]]},"196":{"position":[[489,6]]},"197":{"position":[[472,6]]},"209":{"position":[[931,6]]},"233":{"position":[[496,6]]},"292":{"position":[[166,6]]},"303":{"position":[[157,6]]},"577":{"position":[[557,7]]},"595":{"position":[[263,5]]},"747":{"position":[[312,5]]},"754":{"position":[[867,5]]},"763":{"position":[[284,7]]},"776":{"position":[[284,7]]},"794":{"position":[[1073,5]]},"803":{"position":[[290,7]]},"809":{"position":[[1073,5]]},"818":{"position":[[290,7]]},"825":{"position":[[909,5]]},"834":{"position":[[290,7]]},"909":{"position":[[415,6]]},"925":{"position":[[415,6]]},"936":{"position":[[415,6]]},"952":{"position":[[415,6]]},"970":{"position":[[415,6]]},"1286":{"position":[[1130,5]]},"1301":{"position":[[966,5]]},"1325":{"position":[[1130,5]]},"1453":{"position":[[346,6],[1151,6]]},"1459":{"position":[[1098,7]]}},"keywords":{}}],["occurr",{"_index":2244,"title":{},"content":{"208":{"position":[[212,12]]}},"keywords":{}}],["occurrences_r",{"_index":6337,"title":{},"content":{"1379":{"position":[[3472,13]]},"1403":{"position":[[3472,13]]},"1414":{"position":[[3472,13]]}},"keywords":{}}],["occurrences_regex",{"_index":5684,"title":{},"content":{"1140":{"position":[[3719,17]]},"1316":{"position":[[3719,17]]},"1340":{"position":[[3719,17]]},"1351":{"position":[[3719,17]]},"1431":{"position":[[3742,17]]}},"keywords":{}}],["oci",{"_index":5936,"title":{},"content":{"1271":{"position":[[100,6]]}},"keywords":{}}],["octet_length",{"_index":5688,"title":{},"content":{"1140":{"position":[[3767,12]]},"1316":{"position":[[3767,12]]},"1340":{"position":[[3767,12]]},"1351":{"position":[[3767,12]]},"1379":{"position":[[3530,12]]},"1403":{"position":[[3530,12]]},"1414":{"position":[[3530,12]]},"1431":{"position":[[3790,12]]}},"keywords":{}}],["octob",{"_index":3954,"title":{},"content":{"517":{"position":[[2452,7],[2468,7]]}},"keywords":{}}],["of...a",{"_index":2817,"title":{},"content":{"274":{"position":[[353,6]]}},"keywords":{}}],["ofannot",{"_index":1873,"title":{},"content":{"159":{"position":[[49,14]]}},"keywords":{}}],["ofcaptur",{"_index":3157,"title":{},"content":{"323":{"position":[[415,10]]}},"keywords":{}}],["ofdocu",{"_index":4677,"title":{},"content":{"779":{"position":[[54,11]]}},"keywords":{}}],["off"",{"_index":6477,"title":{},"content":{"1437":{"position":[[858,9]]}},"keywords":{}}],["offend",{"_index":4633,"title":{},"content":{"760":{"position":[[340,9]]},"761":{"position":[[561,9]]},"763":{"position":[[327,9]]},"773":{"position":[[340,9]]},"774":{"position":[[561,9]]},"776":{"position":[[327,9]]},"800":{"position":[[340,9]]},"801":{"position":[[567,9]]},"803":{"position":[[333,9]]},"815":{"position":[[340,9]]},"816":{"position":[[567,9]]},"818":{"position":[[333,9]]},"831":{"position":[[340,9]]},"832":{"position":[[567,9]]},"834":{"position":[[333,9]]}},"keywords":{}}],["offer",{"_index":188,"title":{},"content":{"4":{"position":[[733,8]]},"53":{"position":[[220,5]]},"54":{"position":[[47,6]]},"67":{"position":[[854,8]]},"100":{"position":[[22,6]]},"107":{"position":[[1142,6]]},"112":{"position":[[495,5]]},"125":{"position":[[702,6]]},"154":{"position":[[1774,6]]},"240":{"position":[[3161,6]]},"285":{"position":[[82,6]]},"309":{"position":[[1572,5]]},"320":{"position":[[641,5]]},"323":{"position":[[1944,6]]},"324":{"position":[[1211,5]]},"1008":{"position":[[9,6]]}},"keywords":{}}],["offici",{"_index":3788,"title":{},"content":{"472":{"position":[[379,8]]},"786":{"position":[[406,8]]},"900":{"position":[[364,8]]},"1140":{"position":[[206,8]]},"1292":{"position":[[139,8]]},"1306":{"position":[[139,8]]},"1316":{"position":[[206,8]]},"1329":{"position":[[139,8]]},"1340":{"position":[[206,8]]},"1351":{"position":[[206,8]]},"1370":{"position":[[202,8]]},"1379":{"position":[[143,8]]},"1403":{"position":[[143,8]]},"1414":{"position":[[143,8]]},"1431":{"position":[[229,8]]}},"keywords":{}}],["offline_access",{"_index":5144,"title":{},"content":{"989":{"position":[[955,16]]},"1004":{"position":[[1038,16]]}},"keywords":{}}],["offset",{"_index":137,"title":{},"content":{"3":{"position":[[840,6],[879,6]]},"208":{"position":[[1252,7]]},"314":{"position":[[1159,7],[1219,6]]},"315":{"position":[[1084,7]]},"750":{"position":[[1165,6]]},"754":{"position":[[491,6],[776,7],[1298,6]]},"757":{"position":[[650,7]]},"766":{"position":[[1165,6]]},"770":{"position":[[650,7]]},"789":{"position":[[1566,6]]},"794":{"position":[[364,6],[982,7],[1502,6]]},"797":{"position":[[650,7]]},"807":{"position":[[1153,6]]},"809":{"position":[[364,6],[982,7],[1502,6]]},"812":{"position":[[650,7]]},"823":{"position":[[1153,6]]},"825":{"position":[[364,6],[818,7],[1338,6]]},"828":{"position":[[650,7]]},"1140":{"position":[[3854,6]]},"1209":{"position":[[939,6]]},"1285":{"position":[[662,7]]},"1286":{"position":[[421,6],[1039,7],[1588,6]]},"1292":{"position":[[3895,6]]},"1300":{"position":[[662,7]]},"1301":{"position":[[421,6],[875,7],[1424,6]]},"1306":{"position":[[3895,6]]},"1316":{"position":[[3854,6]]},"1324":{"position":[[662,7]]},"1325":{"position":[[421,6],[1039,7],[1588,6]]},"1329":{"position":[[3895,6]]},"1340":{"position":[[3854,6]]},"1351":{"position":[[3854,6]]},"1370":{"position":[[604,6]]},"1379":{"position":[[3681,7]]},"1403":{"position":[[3681,7]]},"1414":{"position":[[3681,7]]},"1431":{"position":[[3877,6]]},"1452":{"position":[[699,7],[3357,6]]}},"keywords":{}}],["ofjitt",{"_index":6574,"title":{},"content":{"1453":{"position":[[867,8]]}},"keywords":{}}],["oflastwritewin",{"_index":5964,"title":{},"content":{"1279":{"position":[[244,15]]}},"keywords":{}}],["ofmax_slot_wal_keep_s",{"_index":5066,"title":{},"content":{"922":{"position":[[3091,24]]}},"keywords":{}}],["ofmerg",{"_index":5963,"title":{},"content":{"1279":{"position":[[221,7]]}},"keywords":{}}],["oftentim",{"_index":3171,"title":{},"content":{"325":{"position":[[91,10]]}},"keywords":{}}],["oj",{"_index":6117,"title":{},"content":{"1292":{"position":[[3946,2]]},"1306":{"position":[[3946,2]]},"1329":{"position":[[3946,2]]}},"keywords":{}}],["ok",{"_index":2477,"title":{},"content":{"227":{"position":[[96,2]]}},"keywords":{}}],["okay",{"_index":5225,"title":{},"content":{"1036":{"position":[[818,4]]}},"keywords":{}}],["olap",{"_index":1670,"title":{"326":{"position":[[31,4]]}},"content":{"121":{"position":[[2057,4]]},"124":{"position":[[197,4]]},"325":{"position":[[858,4]]},"326":{"position":[[19,4],[245,4],[868,4]]}},"keywords":{}}],["old",{"_index":410,"title":{},"content":{"13":{"position":[[1358,3]]},"19":{"position":[[309,3]]},"62":{"position":[[483,3],[523,3],[616,3]]},"105":{"position":[[1185,3]]},"208":{"position":[[627,3],[1620,3]]},"209":{"position":[[1446,3]]},"271":{"position":[[393,3]]},"307":{"position":[[454,3],[712,3]]},"395":{"position":[[272,3]]},"785":{"position":[[639,3]]},"922":{"position":[[987,3]]},"1140":{"position":[[3900,3]]},"1292":{"position":[[3992,3]]},"1306":{"position":[[3992,3]]},"1316":{"position":[[3900,3]]},"1329":{"position":[[3992,3]]},"1340":{"position":[[3900,3]]},"1351":{"position":[[3900,3]]},"1379":{"position":[[3736,3]]},"1403":{"position":[[3736,3]]},"1414":{"position":[[3736,3]]},"1431":{"position":[[3923,3]]},"1449":{"position":[[567,3]]}},"keywords":{}}],["older",{"_index":2126,"title":{},"content":{"190":{"position":[[1154,5]]},"1437":{"position":[[871,5]]},"1439":{"position":[[1082,5]]}},"keywords":{}}],["oldest",{"_index":2787,"title":{},"content":{"263":{"position":[[329,6]]}},"keywords":{}}],["omit",{"_index":834,"title":{},"content":{"56":{"position":[[400,4]]},"82":{"position":[[2409,7],[4526,7]]},"92":{"position":[[224,4]]},"192":{"position":[[666,4]]},"228":{"position":[[617,4]]},"429":{"position":[[260,4]]},"867":{"position":[[1791,4]]},"909":{"position":[[511,7],[596,8],[942,7]]},"925":{"position":[[511,7],[596,8],[942,7]]},"936":{"position":[[511,7],[596,8],[942,7]]},"952":{"position":[[511,7],[596,8],[942,7]]},"970":{"position":[[511,7],[596,8],[942,7]]},"1140":{"position":[[3959,4]]},"1151":{"position":[[495,8]]},"1316":{"position":[[3959,4]]},"1340":{"position":[[3959,4]]},"1351":{"position":[[3959,4]]},"1431":{"position":[[3982,4]]},"1434":{"position":[[1543,5]]}},"keywords":{}}],["on",{"_index":25,"title":{},"content":{"1":{"position":[[315,3]]},"2":{"position":[[372,3],[502,3]]},"12":{"position":[[136,4]]},"13":{"position":[[127,3]]},"16":{"position":[[645,3]]},"26":{"position":[[212,3]]},"27":{"position":[[489,3]]},"35":{"position":[[73,3]]},"36":{"position":[[56,3]]},"40":{"position":[[70,3]]},"43":{"position":[[277,3]]},"54":{"position":[[298,3]]},"69":{"position":[[532,3]]},"79":{"position":[[58,3],[165,3]]},"90":{"position":[[350,3]]},"94":{"position":[[325,3]]},"97":{"position":[[23,3]]},"100":{"position":[[979,3]]},"105":{"position":[[688,3],[1481,3],[1502,3]]},"107":{"position":[[1710,3],[1786,3],[1924,3],[3561,3]]},"109":{"position":[[687,3]]},"119":{"position":[[393,3],[467,3]]},"120":{"position":[[710,3],[2388,3]]},"121":{"position":[[1825,3]]},"128":{"position":[[208,3],[458,3],[633,3]]},"129":{"position":[[144,3]]},"133":{"position":[[212,3]]},"144":{"position":[[128,3]]},"154":{"position":[[1354,3],[1425,3]]},"158":{"position":[[55,3]]},"179":{"position":[[44,4]]},"180":{"position":[[98,3]]},"183":{"position":[[557,3]]},"188":{"position":[[58,4]]},"189":{"position":[[1143,3]]},"190":{"position":[[554,3],[1711,3]]},"191":{"position":[[368,3]]},"192":{"position":[[1355,3]]},"193":{"position":[[645,3]]},"197":{"position":[[815,4]]},"207":{"position":[[293,4]]},"217":{"position":[[95,3],[1053,3],[1309,4]]},"218":{"position":[[36,3]]},"219":{"position":[[408,3]]},"221":{"position":[[63,3],[1205,3],[1859,3]]},"222":{"position":[[450,3]]},"223":{"position":[[416,3]]},"224":{"position":[[469,3]]},"230":{"position":[[100,4]]},"238":{"position":[[103,3]]},"254":{"position":[[900,3]]},"263":{"position":[[586,3]]},"267":{"position":[[925,3]]},"271":{"position":[[424,4]]},"273":{"position":[[84,3]]},"274":{"position":[[1313,3]]},"277":{"position":[[960,3]]},"281":{"position":[[1641,3]]},"288":{"position":[[152,4]]},"290":{"position":[[87,3]]},"295":{"position":[[81,3],[109,3],[721,3],[764,3],[793,3],[1133,3]]},"296":{"position":[[1020,3],[1852,3],[2158,3],[3151,3],[3467,3],[3543,3],[7170,3]]},"299":{"position":[[152,4]]},"301":{"position":[[78,3]]},"308":{"position":[[19,3]]},"309":{"position":[[19,3]]},"310":{"position":[[19,3]]},"313":{"position":[[3200,3]]},"314":{"position":[[578,3]]},"315":{"position":[[2490,4]]},"319":{"position":[[127,3]]},"320":{"position":[[1854,3],[2006,3],[2106,3]]},"321":{"position":[[69,4],[461,3],[755,3],[838,3],[981,4],[1620,3],[2183,3]]},"322":{"position":[[765,3]]},"323":{"position":[[69,3],[847,3]]},"324":{"position":[[250,3]]},"326":{"position":[[119,4]]},"329":{"position":[[146,3]]},"343":{"position":[[712,3]]},"366":{"position":[[265,3]]},"385":{"position":[[203,3]]},"390":{"position":[[38,3]]},"395":{"position":[[38,3]]},"415":{"position":[[255,3]]},"432":{"position":[[258,3],[527,3]]},"483":{"position":[[686,3],[731,3]]},"497":{"position":[[345,3]]},"548":{"position":[[64,3],[227,3]]},"552":{"position":[[73,3],[349,3]]},"553":{"position":[[1,3]]},"554":{"position":[[1,3],[353,3]]},"560":{"position":[[103,3]]},"571":{"position":[[544,3]]},"581":{"position":[[221,3]]},"584":{"position":[[732,3]]},"602":{"position":[[1038,3]]},"617":{"position":[[466,3]]},"635":{"position":[[83,3]]},"717":{"position":[[1,3]]},"747":{"position":[[846,3]]},"789":{"position":[[760,3],[1122,3]]},"821":{"position":[[701,3]]},"867":{"position":[[1348,3]]},"870":{"position":[[765,3]]},"879":{"position":[[482,3]]},"903":{"position":[[291,3]]},"907":{"position":[[1770,3]]},"912":{"position":[[717,3]]},"915":{"position":[[291,3]]},"923":{"position":[[1770,3]]},"930":{"position":[[291,3]]},"945":{"position":[[1043,3]]},"947":{"position":[[1045,3]]},"963":{"position":[[445,3]]},"964":{"position":[[751,3]]},"968":{"position":[[1770,3]]},"977":{"position":[[89,3]]},"1021":{"position":[[542,3],[642,3]]},"1082":{"position":[[181,3]]},"1087":{"position":[[290,3]]},"1137":{"position":[[43,3],[156,3]]},"1140":{"position":[[4033,3]]},"1143":{"position":[[78,3]]},"1150":{"position":[[93,3]]},"1156":{"position":[[43,3]]},"1161":{"position":[[78,3]]},"1169":{"position":[[78,3]]},"1178":{"position":[[43,3],[157,3]]},"1183":{"position":[[312,3],[611,3]]},"1185":{"position":[[255,3]]},"1186":{"position":[[68,3]]},"1187":{"position":[[43,3],[159,3]]},"1189":{"position":[[398,3]]},"1194":{"position":[[465,3]]},"1195":{"position":[[43,3]]},"1197":{"position":[[404,3]]},"1203":{"position":[[72,3],[626,3]]},"1205":{"position":[[43,3]]},"1207":{"position":[[487,3]]},"1212":{"position":[[78,3]]},"1219":{"position":[[78,3]]},"1226":{"position":[[250,3]]},"1229":{"position":[[43,3],[169,3]]},"1232":{"position":[[508,3]]},"1236":{"position":[[150,3]]},"1243":{"position":[[47,3]]},"1245":{"position":[[418,3]]},"1246":{"position":[[43,3]]},"1248":{"position":[[431,3]]},"1259":{"position":[[85,3]]},"1264":{"position":[[140,3]]},"1265":{"position":[[8,3]]},"1281":{"position":[[426,3]]},"1284":{"position":[[43,3],[154,3]]},"1292":{"position":[[4071,3]]},"1295":{"position":[[426,3]]},"1298":{"position":[[416,3]]},"1299":{"position":[[43,3],[154,3]]},"1306":{"position":[[4071,3]]},"1309":{"position":[[244,3]]},"1312":{"position":[[43,3],[157,3]]},"1313":{"position":[[1520,3]]},"1316":{"position":[[4033,3]]},"1319":{"position":[[426,3]]},"1322":{"position":[[450,3]]},"1323":{"position":[[43,3],[154,3]]},"1329":{"position":[[4071,3]]},"1332":{"position":[[244,3]]},"1335":{"position":[[450,3]]},"1336":{"position":[[43,3],[157,3]]},"1337":{"position":[[1520,3]]},"1340":{"position":[[4033,3]]},"1343":{"position":[[244,3]]},"1346":{"position":[[416,3]]},"1347":{"position":[[43,3],[157,3]]},"1351":{"position":[[4033,3]]},"1354":{"position":[[159,3],[243,3],[290,3]]},"1355":{"position":[[43,3],[156,3]]},"1357":{"position":[[336,3]]},"1361":{"position":[[174,3]]},"1365":{"position":[[47,3]]},"1372":{"position":[[289,3]]},"1375":{"position":[[43,3],[158,3]]},"1382":{"position":[[509,3]]},"1384":{"position":[[757,3]]},"1385":{"position":[[43,3],[158,3]]},"1386":{"position":[[807,3]]},"1387":{"position":[[437,3],[1063,3]]},"1388":{"position":[[520,3],[598,3]]},"1396":{"position":[[289,3]]},"1399":{"position":[[43,3],[158,3]]},"1406":{"position":[[289,3]]},"1410":{"position":[[43,3],[158,3]]},"1417":{"position":[[76,4],[446,3]]},"1419":{"position":[[43,3],[158,3]]},"1421":{"position":[[424,3]]},"1425":{"position":[[248,3]]},"1426":{"position":[[43,3],[160,3]]},"1431":{"position":[[4056,3]]},"1434":{"position":[[449,3]]},"1437":{"position":[[179,3]]},"1459":{"position":[[134,3],[731,3],[932,3],[1615,4]]},"1461":{"position":[[4295,3]]},"1467":{"position":[[1658,3]]},"1471":{"position":[[302,3],[349,3],[863,3]]},"1474":{"position":[[471,3]]},"1476":{"position":[[745,3]]},"1477":{"position":[[1418,3],[2694,3],[3584,3]]},"1479":{"position":[[85,4]]}},"keywords":{}}],["onboard",{"_index":3474,"title":{},"content":{"384":{"position":[[248,10]]}},"keywords":{}}],["onc",{"_index":1443,"title":{"602":{"position":[[9,4]]},"1166":{"position":[[9,4]]},"1435":{"position":[[8,4]]}},"content":{"100":{"position":[[660,4]]},"101":{"position":[[579,4]]},"114":{"position":[[736,4]]},"115":{"position":[[1052,5],[1167,5],[1262,5]]},"117":{"position":[[495,4]]},"121":{"position":[[486,4]]},"124":{"position":[[357,5]]},"165":{"position":[[2046,4]]},"169":{"position":[[1228,4]]},"170":{"position":[[233,4]]},"173":{"position":[[1152,4]]},"174":{"position":[[80,4]]},"185":{"position":[[192,4]]},"190":{"position":[[1743,4]]},"192":{"position":[[2105,4]]},"198":{"position":[[330,5],[828,5]]},"206":{"position":[[112,4]]},"207":{"position":[[438,4]]},"217":{"position":[[2109,4]]},"230":{"position":[[303,4]]},"239":{"position":[[879,4]]},"240":{"position":[[2342,4]]},"264":{"position":[[548,4]]},"275":{"position":[[569,4]]},"290":{"position":[[1575,4]]},"291":{"position":[[796,4]]},"302":{"position":[[796,4]]},"320":{"position":[[694,4]]},"323":{"position":[[1163,4]]},"325":{"position":[[679,4]]},"326":{"position":[[1844,4]]},"331":{"position":[[360,4],[607,4]]},"332":{"position":[[167,4]]},"377":{"position":[[1781,4]]},"478":{"position":[[525,4]]},"479":{"position":[[819,4]]},"480":{"position":[[180,4],[1382,4],[1584,4]]},"485":{"position":[[396,4]]},"515":{"position":[[924,4]]},"595":{"position":[[1338,4]]},"599":{"position":[[525,4]]},"602":{"position":[[269,4],[424,4],[765,4]]},"657":{"position":[[396,4]]},"673":{"position":[[396,4]]},"688":{"position":[[396,4]]},"789":{"position":[[823,4],[1056,4]]},"840":{"position":[[823,5],[2346,5]]},"842":{"position":[[1428,5],[1534,5]]},"849":{"position":[[1298,5],[3486,5]]},"942":{"position":[[163,4]]},"1006":{"position":[[429,4]]},"1067":{"position":[[235,4]]},"1147":{"position":[[397,5]]},"1156":{"position":[[299,4]]},"1166":{"position":[[117,5]]},"1174":{"position":[[397,5]]},"1216":{"position":[[397,5]]},"1224":{"position":[[397,5]]},"1384":{"position":[[1175,4]]},"1438":{"position":[[268,5],[517,4],[672,4]]},"1439":{"position":[[367,4],[855,5]]},"1442":{"position":[[1651,4],[1804,4]]},"1443":{"position":[[118,4]]},"1444":{"position":[[186,4]]},"1459":{"position":[[565,4],[1153,4]]},"1470":{"position":[[203,4]]}},"keywords":{}}],["once"",{"_index":1636,"title":{},"content":{"115":{"position":[[1512,10]]},"660":{"position":[[46,11]]},"1279":{"position":[[361,11]]}},"keywords":{}}],["one"",{"_index":1719,"title":{},"content":{"128":{"position":[[548,9]]}},"keywords":{}}],["one.cr",{"_index":4528,"title":{},"content":{"726":{"position":[[72,10]]}},"keywords":{}}],["onedelta",{"_index":1706,"title":{},"content":{"125":{"position":[[970,8]]}},"keywords":{}}],["oneof",{"_index":1881,"title":{},"content":{"159":{"position":[[780,6]]},"164":{"position":[[1834,6]]},"1465":{"position":[[218,5],[573,5],[630,6]]}},"keywords":{}}],["oner",{"_index":3187,"title":{},"content":{"329":{"position":[[753,7]]}},"keywords":{}}],["ongo",{"_index":242,"title":{},"content":{"7":{"position":[[426,7]]},"209":{"position":[[1040,7],[1119,7]]},"368":{"position":[[194,7]]},"755":{"position":[[194,7]]},"768":{"position":[[194,7]]},"795":{"position":[[192,7]]},"810":{"position":[[192,7]]},"826":{"position":[[192,7]]},"905":{"position":[[197,7]]},"920":{"position":[[197,7]]},"932":{"position":[[197,7]]},"948":{"position":[[197,7]]},"966":{"position":[[197,7]]}},"keywords":{}}],["onlin",{"_index":1600,"title":{},"content":{"112":{"position":[[944,6]]},"635":{"position":[[379,6]]},"867":{"position":[[1355,6],[1385,6]]},"869":{"position":[[437,6],[806,6],[1550,6],[1573,6]]}},"keywords":{}}],["onlyb",{"_index":3505,"title":{},"content":{"390":{"position":[[131,6]]}},"keywords":{}}],["onto",{"_index":1188,"title":{},"content":{"82":{"position":[[3218,4]]}},"keywords":{}}],["op",{"_index":200,"title":{},"content":{"6":{"position":[[73,3]]},"8":{"position":[[74,3]]},"338":{"position":[[269,4]]},"1464":{"position":[[863,2]]},"1467":{"position":[[2910,2]]}},"keywords":{}}],["opaqu",{"_index":1640,"title":{},"content":{"117":{"position":[[254,6]]},"1444":{"position":[[281,6]]}},"keywords":{}}],["open",{"_index":697,"title":{"84":{"position":[[7,4]]}},"content":{"38":{"position":[[147,4],[274,4]]},"81":{"position":[[28,4]]},"84":{"position":[[370,4],[505,4]]},"138":{"position":[[2752,4]]},"142":{"position":[[2837,4]]},"146":{"position":[[1092,4]]},"149":{"position":[[1086,4]]},"152":{"position":[[1076,4]]},"156":{"position":[[29,4]]},"169":{"position":[[1538,5]]},"183":{"position":[[712,6],[828,4],[924,4],[1011,4],[2930,4]]},"189":{"position":[[391,4]]},"191":{"position":[[115,5],[372,5]]},"240":{"position":[[250,4],[259,4]]},"259":{"position":[[175,6],[1864,6]]},"264":{"position":[[82,4]]},"267":{"position":[[1080,6],[1218,4],[1314,4],[1435,4],[1879,6]]},"268":{"position":[[692,4],[1713,4]]},"269":{"position":[[317,4]]},"270":{"position":[[943,4],[1064,4]]},"275":{"position":[[104,4]]},"340":{"position":[[398,5]]},"364":{"position":[[18,4]]},"486":{"position":[[87,4]]},"658":{"position":[[87,4]]},"674":{"position":[[87,4]]},"689":{"position":[[87,4]]},"922":{"position":[[1382,4],[3266,4]]},"1140":{"position":[[4129,4]]},"1292":{"position":[[4152,4]]},"1306":{"position":[[4152,4]]},"1316":{"position":[[4129,4]]},"1329":{"position":[[4152,4]]},"1340":{"position":[[4129,4]]},"1351":{"position":[[4129,4]]},"1379":{"position":[[547,4]]},"1403":{"position":[[547,4]]},"1414":{"position":[[547,4]]},"1431":{"position":[[4152,4]]},"1437":{"position":[[1370,4],[1498,5]]},"1444":{"position":[[474,4]]},"1475":{"position":[[490,4]]},"1479":{"position":[[429,4]]}},"keywords":{}}],["openai",{"_index":5939,"title":{},"content":{"1274":{"position":[[95,6]]},"1277":{"position":[[440,6],[455,6],[580,6],[801,6],[852,6]]}},"keywords":{}}],["openaiapikey",{"_index":5953,"title":{},"content":{"1277":{"position":[[426,13]]},"1278":{"position":[[224,13]]}},"keywords":{}}],["opendatasourc",{"_index":6299,"title":{},"content":{"1379":{"position":[[592,13]]},"1403":{"position":[[592,13]]},"1414":{"position":[[592,13]]}},"keywords":{}}],["opened{runtimecp",{"_index":6438,"title":{},"content":{"1434":{"position":[[404,17]]}},"keywords":{}}],["openemail",{"_index":4453,"title":{},"content":{"697":{"position":[[149,9]]}},"keywords":{}}],["openingsjob",{"_index":4330,"title":{},"content":{"622":{"position":[[252,12]]}},"keywords":{}}],["openqueri",{"_index":6302,"title":{},"content":{"1379":{"position":[[646,9]]},"1403":{"position":[[646,9]]},"1414":{"position":[[646,9]]}},"keywords":{}}],["openrowset",{"_index":6303,"title":{},"content":{"1379":{"position":[[700,10]]},"1403":{"position":[[700,10]]},"1414":{"position":[[700,10]]}},"keywords":{}}],["opensecondstot",{"_index":6694,"title":{},"content":{"1475":{"position":[[436,17]]}},"keywords":{}}],["openssh",{"_index":2453,"title":{},"content":{"221":{"position":[[1302,7]]},"222":{"position":[[547,7]]},"223":{"position":[[513,7]]},"224":{"position":[[566,7]]},"1298":{"position":[[513,7]]},"1322":{"position":[[547,7]]},"1335":{"position":[[547,7]]},"1346":{"position":[[513,7]]}},"keywords":{}}],["openssl",{"_index":6365,"title":{},"content":{"1384":{"position":[[271,7],[293,7],[375,7],[987,7],[1037,7],[1068,7]]}},"keywords":{}}],["openxml",{"_index":6305,"title":{},"content":{"1379":{"position":[[761,7]]},"1403":{"position":[[761,7]]},"1414":{"position":[[761,7]]}},"keywords":{}}],["open{materializationspec",{"_index":6433,"title":{},"content":{"1434":{"position":[[229,25]]}},"keywords":{}}],["oper",{"_index":387,"title":{"760":{"position":[[12,11]]},"773":{"position":[[12,11]]},"800":{"position":[[12,11]]},"815":{"position":[[12,11]]},"831":{"position":[[12,11]]}},"content":{"13":{"position":[[495,10]]},"19":{"position":[[158,8]]},"20":{"position":[[947,10]]},"34":{"position":[[682,10]]},"56":{"position":[[255,11]]},"63":{"position":[[274,10]]},"82":{"position":[[488,12]]},"121":{"position":[[1959,8]]},"197":{"position":[[628,11],[737,11],[1296,10],[1461,9]]},"210":{"position":[[1158,9]]},"221":{"position":[[120,9]]},"239":{"position":[[2141,10]]},"264":{"position":[[558,9]]},"278":{"position":[[699,9]]},"295":{"position":[[710,10]]},"319":{"position":[[1063,10],[1112,10]]},"324":{"position":[[614,11]]},"326":{"position":[[364,11]]},"329":{"position":[[269,7]]},"330":{"position":[[106,9]]},"331":{"position":[[487,11]]},"364":{"position":[[78,7]]},"480":{"position":[[16,8]]},"595":{"position":[[1463,10]]},"760":{"position":[[54,9],[137,9],[265,10]]},"762":{"position":[[364,10]]},"773":{"position":[[54,9],[137,9],[265,10]]},"775":{"position":[[364,10]]},"786":{"position":[[50,10],[232,10]]},"800":{"position":[[54,9],[137,9],[265,10]]},"802":{"position":[[364,10]]},"815":{"position":[[54,9],[137,9],[265,10]]},"817":{"position":[[364,10]]},"831":{"position":[[54,9],[137,9],[265,10]]},"833":{"position":[[364,10]]},"869":{"position":[[1199,9],[1338,7]]},"1020":{"position":[[22,9],[756,9],[1145,9]]},"1179":{"position":[[779,10]]},"1208":{"position":[[115,8]]},"1279":{"position":[[16,8]]},"1358":{"position":[[23,8]]},"1379":{"position":[[808,9]]},"1403":{"position":[[808,9]]},"1414":{"position":[[808,9]]},"1439":{"position":[[421,10]]},"1442":{"position":[[984,11]]},"1477":{"position":[[1603,10],[3921,10]]}},"keywords":{}}],["operation"",{"_index":2293,"title":{},"content":{"210":{"position":[[1103,16]]}},"keywords":{}}],["operationsa",{"_index":3198,"title":{},"content":{"330":{"position":[[389,11]]}},"keywords":{}}],["opinion",{"_index":3115,"title":{},"content":{"320":{"position":[[154,11],[252,11],[1977,12]]},"321":{"position":[[1244,11]]}},"keywords":{}}],["oplog",{"_index":2183,"title":{},"content":{"197":{"position":[[325,6],[1594,6]]},"209":{"position":[[1348,6],[1431,5],[1612,5]]},"785":{"position":[[536,6],[617,5],[825,5]]}},"keywords":{}}],["oplogor",{"_index":4690,"title":{},"content":{"785":{"position":[[778,7]]}},"keywords":{}}],["opportun",{"_index":1512,"title":{},"content":{"106":{"position":[[733,11]]},"163":{"position":[[1150,11]]},"211":{"position":[[368,13]]}},"keywords":{}}],["opportunist",{"_index":1075,"title":{},"content":{"74":{"position":[[150,13]]},"163":{"position":[[134,17]]}},"keywords":{}}],["ops/acmeco",{"_index":3220,"title":{},"content":{"338":{"position":[[495,12]]}},"keywords":{}}],["ops/acmeco/log",{"_index":203,"title":{},"content":{"6":{"position":[[138,16]]},"1472":{"position":[[813,15]]}},"keywords":{}}],["ops/acmeco/stat",{"_index":260,"title":{},"content":{"8":{"position":[[139,17]]}},"keywords":{}}],["opt",{"_index":1813,"title":{},"content":{"140":{"position":[[512,3]]},"208":{"position":[[434,3]]}},"keywords":{}}],["optim",{"_index":539,"title":{"1391":{"position":[[0,10]]}},"content":{"20":{"position":[[602,8]]},"325":{"position":[[529,7]]},"330":{"position":[[426,9]]},"1151":{"position":[[1119,7]]},"1165":{"position":[[11,7]]},"1292":{"position":[[4199,8]]},"1306":{"position":[[4199,8]]},"1329":{"position":[[4199,8]]},"1356":{"position":[[516,8],[665,8]]},"1429":{"position":[[50,9]]}},"keywords":{}}],["optimist",{"_index":1929,"title":{},"content":{"163":{"position":[[978,10]]},"1442":{"position":[[1055,14]]},"1443":{"position":[[707,11]]}},"keywords":{}}],["optimizer_co",{"_index":6132,"title":{},"content":{"1292":{"position":[[4253,13]]},"1306":{"position":[[4253,13]]},"1329":{"position":[[4253,13]]}},"keywords":{}}],["option",{"_index":30,"title":{},"content":{"1":{"position":[[358,9],[528,9],[681,9],[814,9]]},"13":{"position":[[229,6]]},"25":{"position":[[134,6]]},"39":{"position":[[58,8]]},"55":{"position":[[239,7],[313,6],[551,6]]},"56":{"position":[[126,9],[2629,9]]},"61":{"position":[[1046,8]]},"68":{"position":[[920,7],[1232,8]]},"69":{"position":[[132,9],[818,9],[996,9]]},"76":{"position":[[640,9]]},"81":{"position":[[2423,6]]},"94":{"position":[[411,9],[594,9],[779,9],[1483,9],[1814,9],[2180,9],[2819,9]]},"120":{"position":[[142,9],[1366,9],[1732,9],[2560,9],[2838,9]]},"122":{"position":[[1409,9]]},"138":{"position":[[2734,8]]},"140":{"position":[[412,6]]},"142":{"position":[[2819,8]]},"144":{"position":[[442,7]]},"165":{"position":[[2274,6]]},"183":{"position":[[643,6]]},"196":{"position":[[557,11]]},"204":{"position":[[728,7]]},"206":{"position":[[72,10],[654,7]]},"217":{"position":[[1958,6]]},"218":{"position":[[1021,10],[1240,10],[1574,6]]},"221":{"position":[[306,8]]},"228":{"position":[[183,7]]},"239":{"position":[[1670,7]]},"240":{"position":[[2935,7],[4058,8]]},"259":{"position":[[89,7],[852,6],[1770,7],[2316,10],[2407,6]]},"267":{"position":[[1011,6]]},"284":{"position":[[372,7]]},"290":{"position":[[829,10]]},"291":{"position":[[557,8],[1051,10]]},"302":{"position":[[557,8],[1036,10]]},"307":{"position":[[563,6],[3218,6]]},"309":{"position":[[1040,9],[3542,6]]},"319":{"position":[[1038,6]]},"325":{"position":[[626,7]]},"366":{"position":[[240,9]]},"370":{"position":[[653,7],[661,7]]},"375":{"position":[[279,6]]},"377":{"position":[[79,7],[87,7]]},"379":{"position":[[1200,7]]},"385":{"position":[[114,11]]},"387":{"position":[[784,10],[1181,10]]},"411":{"position":[[242,6]]},"417":{"position":[[70,7],[1426,10]]},"419":{"position":[[823,7],[925,7],[1633,7],[1895,11],[2104,7],[2178,11]]},"438":{"position":[[70,7]]},"440":{"position":[[839,7],[941,7]]},"441":{"position":[[242,7],[504,11],[713,7],[787,11]]},"479":{"position":[[218,8]]},"487":{"position":[[106,6]]},"489":{"position":[[19,10]]},"491":{"position":[[105,8]]},"499":{"position":[[442,8]]},"502":{"position":[[530,7],[1074,10]]},"504":{"position":[[755,7],[951,7],[1262,7],[1524,11],[1733,7],[1807,11]]},"517":{"position":[[170,8],[1629,6],[2790,6]]},"534":{"position":[[255,10],[871,10]]},"545":{"position":[[70,7]]},"547":{"position":[[824,7],[926,7],[1635,7],[1897,11],[2106,7],[2180,11]]},"556":{"position":[[282,10],[1042,10],[1689,10],[1849,10]]},"571":{"position":[[548,8]]},"573":{"position":[[614,10],[1068,10]]},"581":{"position":[[225,8]]},"584":{"position":[[536,10],[992,10]]},"593":{"position":[[173,8]]},"595":{"position":[[130,8]]},"611":{"position":[[672,10]]},"617":{"position":[[470,8]]},"634":{"position":[[434,8]]},"639":{"position":[[753,7],[949,7],[1260,7],[1522,11],[1731,7],[1805,11]]},"640":{"position":[[142,8]]},"660":{"position":[[673,6]]},"662":{"position":[[19,10]]},"664":{"position":[[126,8]]},"675":{"position":[[91,7],[335,11]]},"677":{"position":[[19,10]]},"679":{"position":[[105,8]]},"692":{"position":[[19,10]]},"694":{"position":[[105,8]]},"720":{"position":[[265,10]]},"739":{"position":[[1,10]]},"747":{"position":[[782,6]]},"764":{"position":[[1170,6]]},"777":{"position":[[1170,6]]},"782":{"position":[[108,10],[346,8]]},"804":{"position":[[1168,6]]},"819":{"position":[[1168,6]]},"835":{"position":[[1168,6]]},"840":{"position":[[655,6]]},"842":{"position":[[387,7],[1266,8]]},"849":{"position":[[1130,6]]},"870":{"position":[[320,6]]},"903":{"position":[[266,9]]},"907":{"position":[[436,7],[444,7]]},"915":{"position":[[266,9]]},"923":{"position":[[436,7],[444,7]]},"930":{"position":[[266,9]]},"934":{"position":[[436,7],[444,7]]},"947":{"position":[[1111,11]]},"950":{"position":[[436,7],[444,7]]},"963":{"position":[[420,9]]},"968":{"position":[[436,7],[444,7]]},"1009":{"position":[[1038,10]]},"1020":{"position":[[706,6]]},"1021":{"position":[[1092,7],[1585,10]]},"1023":{"position":[[804,7],[906,7],[1616,7],[1878,11],[2087,7],[2161,11]]},"1032":{"position":[[229,10],[1997,7]]},"1034":{"position":[[663,7],[671,7]]},"1045":{"position":[[421,7],[429,7]]},"1053":{"position":[[421,7],[429,7]]},"1061":{"position":[[421,7],[429,7]]},"1076":{"position":[[395,10]]},"1085":{"position":[[907,6]]},"1138":{"position":[[1641,11]]},"1140":{"position":[[4166,6]]},"1144":{"position":[[498,8]]},"1151":{"position":[[1600,11]]},"1154":{"position":[[399,7]]},"1162":{"position":[[346,8],[926,11]]},"1170":{"position":[[498,8]]},"1199":{"position":[[77,6]]},"1201":{"position":[[598,9],[701,9]]},"1213":{"position":[[353,8]]},"1220":{"position":[[353,8]]},"1230":{"position":[[1122,8]]},"1232":{"position":[[134,8]]},"1245":{"position":[[422,8]]},"1253":{"position":[[108,10]]},"1260":{"position":[[1124,11]]},"1277":{"position":[[700,7],[821,8]]},"1285":{"position":[[767,7],[775,7],[999,8],[1137,8],[1257,8]]},"1286":{"position":[[2028,6],[2323,7],[2386,11]]},"1292":{"position":[[4316,6],[4363,8],[4420,10],[4484,7]]},"1300":{"position":[[767,7],[775,7],[999,8],[1137,8],[1257,8]]},"1301":{"position":[[1864,6],[2159,7],[2222,11]]},"1306":{"position":[[4316,6],[4363,8],[4420,10],[4484,7]]},"1313":{"position":[[621,7],[629,7],[1185,11]]},"1316":{"position":[[4166,6]]},"1324":{"position":[[767,7],[775,7],[999,8],[1137,8],[1257,8]]},"1325":{"position":[[2028,6],[2323,7],[2386,11]]},"1329":{"position":[[4316,6],[4363,8],[4420,10],[4484,7]]},"1337":{"position":[[621,7],[629,7],[1185,11]]},"1340":{"position":[[4166,6]]},"1348":{"position":[[621,7],[629,7],[1185,11]]},"1351":{"position":[[4166,6]]},"1354":{"position":[[134,9],[218,9]]},"1356":{"position":[[347,7],[445,8]]},"1359":{"position":[[440,6]]},"1379":{"position":[[856,6]]},"1403":{"position":[[856,6]]},"1414":{"position":[[856,6]]},"1420":{"position":[[75,8]]},"1427":{"position":[[945,11]]},"1429":{"position":[[216,8]]},"1431":{"position":[[4189,6]]},"1452":{"position":[[186,7]]},"1471":{"position":[[1082,7]]},"1479":{"position":[[324,8]]},"1480":{"position":[[1072,9],[1438,9]]}},"keywords":{}}],["option(evolveincompatiblecollect",{"_index":371,"title":{},"content":{"12":{"position":[[498,38]]}},"keywords":{}}],["option_titl",{"_index":4017,"title":{},"content":{"527":{"position":[[191,13]]},"535":{"position":[[191,13]]}},"keywords":{}}],["optionalrol",{"_index":2932,"title":{},"content":{"291":{"position":[[543,13]]},"302":{"position":[[543,13]]}},"keywords":{}}],["optionsa",{"_index":4730,"title":{},"content":{"839":{"position":[[66,8]]},"848":{"position":[[66,8]]}},"keywords":{}}],["ora",{"_index":4898,"title":{},"content":{"871":{"position":[[57,3]]}},"keywords":{}}],["oracl",{"_index":4728,"title":{"1271":{"position":[[18,6]]}},"content":{"839":{"position":[[1,6]]},"840":{"position":[[53,6]]},"848":{"position":[[1,6]]},"862":{"position":[[1,6],[64,6]]},"865":{"position":[[9,6]]},"869":{"position":[[1,6],[1289,6]]},"874":{"position":[[1,6],[64,6]]},"877":{"position":[[9,6]]},"879":{"position":[[1629,6]]},"880":{"position":[[89,6]]},"1268":{"position":[[73,6]]},"1271":{"position":[[72,6]]}},"keywords":{}}],["oracle:dev",{"_index":4877,"title":{},"content":{"868":{"position":[[89,10]]}},"keywords":{}}],["oracledb",{"_index":4844,"title":{"861":{"position":[[0,8]]},"873":{"position":[[0,8]]}},"content":{"863":{"position":[[38,8]]},"866":{"position":[[250,8]]},"875":{"position":[[38,8]]},"878":{"position":[[250,8]]}},"keywords":{}}],["orchestr",{"_index":3150,"title":{},"content":{"322":{"position":[[345,13],[965,13]]},"326":{"position":[[1025,11]]}},"keywords":{}}],["orcl",{"_index":4863,"title":{},"content":{"867":{"position":[[369,5]]},"868":{"position":[[232,4]]}},"keywords":{}}],["order",{"_index":71,"title":{"109":{"position":[[11,6]]},"1020":{"position":[[15,6]]},"1234":{"position":[[8,9]]}},"content":{"2":{"position":[[151,5]]},"17":{"position":[[432,5]]},"54":{"position":[[625,5]]},"84":{"position":[[1271,5]]},"107":{"position":[[470,5],[654,5],[3071,5],[3125,5]]},"109":{"position":[[249,5],[470,5],[563,5],[667,6],[723,5]]},"110":{"position":[[410,8]]},"120":{"position":[[2327,5]]},"123":{"position":[[418,7]]},"129":{"position":[[178,7],[210,6]]},"137":{"position":[[216,5],[246,5]]},"161":{"position":[[338,5]]},"163":{"position":[[772,5]]},"183":{"position":[[1483,5]]},"203":{"position":[[122,5]]},"234":{"position":[[528,5]]},"237":{"position":[[2909,5]]},"253":{"position":[[4,5]]},"279":{"position":[[477,5],[769,6],[851,5]]},"280":{"position":[[717,5]]},"294":{"position":[[141,6]]},"295":{"position":[[93,6],[431,6],[752,7],[768,5],[849,7],[915,6],[1433,5]]},"296":{"position":[[373,6],[516,7],[1344,6],[1487,7],[1916,6],[2341,7],[2438,6],[2501,6],[3274,5],[4571,6],[4661,8],[6256,7],[7693,6],[7813,8],[7843,5],[7909,5],[7946,6],[8048,6]]},"313":{"position":[[4,5]]},"331":{"position":[[397,7]]},"417":{"position":[[369,6],[419,8],[454,9],[479,7]]},"438":{"position":[[369,6],[419,8],[454,9],[479,7]]},"480":{"position":[[379,7],[1068,5],[1263,7],[1360,8]]},"502":{"position":[[829,6],[879,8],[914,9],[939,7]]},"522":{"position":[[462,5]]},"530":{"position":[[462,5]]},"545":{"position":[[369,6],[419,8],[454,9],[479,7]]},"557":{"position":[[545,5]]},"595":{"position":[[1040,6]]},"660":{"position":[[184,5]]},"724":{"position":[[218,5]]},"842":{"position":[[2298,7]]},"922":{"position":[[171,5]]},"1006":{"position":[[105,5],[294,5]]},"1008":{"position":[[346,5]]},"1020":{"position":[[930,8],[1492,5],[1805,8],[1920,8],[2108,9]]},"1021":{"position":[[1406,6],[1465,8],[1500,9]]},"1140":{"position":[[64,5],[412,5]]},"1156":{"position":[[274,5]]},"1186":{"position":[[287,5]]},"1192":{"position":[[64,5]]},"1209":{"position":[[244,5]]},"1234":{"position":[[38,8],[53,8],[93,8],[223,6]]},"1292":{"position":[[59,5],[4585,5]]},"1306":{"position":[[59,5],[4585,5]]},"1316":{"position":[[64,5],[412,5]]},"1329":{"position":[[59,5],[4585,5]]},"1340":{"position":[[64,5],[412,5]]},"1351":{"position":[[64,5],[412,5]]},"1370":{"position":[[60,5],[639,5]]},"1379":{"position":[[63,5],[951,5]]},"1384":{"position":[[4,5]]},"1391":{"position":[[789,6]]},"1394":{"position":[[63,5],[1053,5]]},"1403":{"position":[[63,5],[951,5]]},"1414":{"position":[[63,5],[951,5]]},"1423":{"position":[[70,5]]},"1431":{"position":[[87,5],[435,5]]},"1439":{"position":[[1680,5]]},"1442":{"position":[[359,8]]},"1452":{"position":[[4543,6]]},"1455":{"position":[[317,5]]},"1459":{"position":[[114,6],[342,8],[399,8],[501,8],[807,6],[1135,5],[1712,7]]},"1467":{"position":[[1841,7],[2020,9]]},"1476":{"position":[[883,8]]},"1477":{"position":[[2637,7],[2919,8]]}},"keywords":{}}],["order/custom",{"_index":1690,"title":{},"content":{"123":{"position":[[309,15]]}},"keywords":{}}],["order_d",{"_index":2955,"title":{},"content":{"295":{"position":[[474,10]]},"296":{"position":[[4817,12]]}},"keywords":{}}],["order_id",{"_index":2954,"title":{},"content":{"295":{"position":[[453,8]]},"296":{"position":[[599,9],[1570,9],[2389,8],[4838,10]]}},"keywords":{}}],["orders.schema.yaml",{"_index":12,"title":{},"content":{"1":{"position":[[156,18]]},"123":{"position":[[257,18]]},"296":{"position":[[549,18],[1520,18],[2587,19],[4027,18]]}},"keywords":{}}],["orders/sheet1_v2",{"_index":2996,"title":{},"content":{"296":{"position":[[800,16],[2801,16]]}},"keywords":{}}],["ordin",{"_index":6155,"title":{},"content":{"1292":{"position":[[4634,10]]},"1306":{"position":[[4634,10]]},"1329":{"position":[[4634,10]]},"1379":{"position":[[992,10]]},"1403":{"position":[[992,10]]},"1414":{"position":[[992,10]]}},"keywords":{}}],["ordinair",{"_index":2707,"title":{},"content":{"253":{"position":[[1487,9],[2431,9],[2505,9]]},"313":{"position":[[1487,9],[2431,9],[2505,9]]}},"keywords":{}}],["ordinari",{"_index":5024,"title":{},"content":{"912":{"position":[[1074,8]]}},"keywords":{}}],["org",{"_index":4263,"title":{},"content":{"594":{"position":[[1408,4]]}},"keywords":{}}],["org/acmeco",{"_index":3218,"title":{},"content":{"337":{"position":[[475,10],[547,10]]},"341":{"position":[[374,10],[516,10]]}},"keywords":{}}],["organ",{"_index":160,"title":{"161":{"position":[[0,13]]},"1460":{"position":[[0,10]]}},"content":{"4":{"position":[[251,9]]},"6":{"position":[[6,12],[93,12],[392,12]]},"8":{"position":[[6,12],[94,12],[197,12]]},"27":{"position":[[258,8],[530,13]]},"34":{"position":[[876,10]]},"77":{"position":[[95,9]]},"83":{"position":[[213,13]]},"136":{"position":[[368,13]]},"149":{"position":[[1275,9]]},"154":{"position":[[1442,12]]},"161":{"position":[[347,8],[520,8]]},"190":{"position":[[484,9],[594,13],[1023,9]]},"196":{"position":[[430,13]]},"233":{"position":[[437,13]]},"241":{"position":[[562,13]]},"254":{"position":[[41,8]]},"267":{"position":[[355,12]]},"274":{"position":[[1699,9]]},"296":{"position":[[41,8]]},"301":{"position":[[847,8]]},"313":{"position":[[3457,13]]},"314":{"position":[[41,8]]},"338":{"position":[[42,12]]},"339":{"position":[[260,12]]},"522":{"position":[[380,13],[413,12],[525,13]]},"523":{"position":[[93,13]]},"529":{"position":[[64,13]]},"530":{"position":[[380,13],[413,12],[525,13]]},"531":{"position":[[93,13],[206,12],[432,12]]},"532":{"position":[[93,13]]},"534":{"position":[[1285,12]]},"540":{"position":[[74,12],[87,12]]},"541":{"position":[[109,13]]},"590":{"position":[[134,9],[177,9]]},"723":{"position":[[158,12]]},"728":{"position":[[66,12],[149,12]]},"729":{"position":[[1,12]]},"779":{"position":[[131,9]]},"987":{"position":[[140,12]]},"995":{"position":[[103,13]]},"997":{"position":[[130,13],[144,12],[173,12]]},"998":{"position":[[136,13]]},"1002":{"position":[[140,12]]},"1004":{"position":[[214,13]]},"1134":{"position":[[1080,13]]},"1178":{"position":[[467,12]]},"1250":{"position":[[131,9]]},"1277":{"position":[[808,12],[830,12],[904,13],[935,12]]},"1292":{"position":[[4693,12]]},"1306":{"position":[[4693,12]]},"1329":{"position":[[4693,12]]},"1394":{"position":[[1075,12]]},"1456":{"position":[[88,12]]},"1461":{"position":[[108,10],[590,10],[676,14],[765,10],[850,8]]},"1462":{"position":[[266,14],[710,14]]},"1475":{"position":[[663,9],[738,9]]}},"keywords":{}}],["organiz",{"_index":1763,"title":{},"content":{"136":{"position":[[270,14],[325,14]]},"154":{"position":[[1507,14]]}},"keywords":{}}],["organization>",{"_index":5155,"title":{},"content":{"998":{"position":[[159,16]]}},"keywords":{}}],["organization'",{"_index":903,"title":{},"content":{"60":{"position":[[418,14]]},"83":{"position":[[155,14]]},"154":{"position":[[60,14]]},"221":{"position":[[221,14],[1831,14]]},"340":{"position":[[47,14]]},"532":{"position":[[244,14]]},"723":{"position":[[284,14],[373,14]]},"728":{"position":[[94,14]]}},"keywords":{}}],["organization.u",{"_index":5867,"title":{},"content":{"1207":{"position":[[123,15]]}},"keywords":{}}],["organization_membership",{"_index":5482,"title":{},"content":{"1134":{"position":[[1194,24]]}},"keywords":{}}],["organizations/repositori",{"_index":4046,"title":{},"content":{"534":{"position":[[1168,27]]}},"keywords":{}}],["orgnam",{"_index":2161,"title":{},"content":{"192":{"position":[[774,7]]},"288":{"position":[[1006,7]]},"299":{"position":[[921,7]]},"1034":{"position":[[117,7]]},"1382":{"position":[[457,7]]},"1386":{"position":[[138,7]]},"1387":{"position":[[132,7],[686,7]]}},"keywords":{}}],["orgs/<orgid>/runs/<runid>/runresults/<runresultid>/queryresult",{"_index":4255,"title":{},"content":{"594":{"position":[[959,85]]}},"keywords":{}}],["orgs/*/run",{"_index":4261,"title":{},"content":{"594":{"position":[[1330,11]]}},"keywords":{}}],["orgs/*/runs/*/runresult",{"_index":4259,"title":{},"content":{"594":{"position":[[1228,24]]}},"keywords":{}}],["orgs/*/runs/*/runresults/*/queryresult",{"_index":4256,"title":{},"content":{"594":{"position":[[1098,39]]}},"keywords":{}}],["orgto",{"_index":3227,"title":{},"content":{"341":{"position":[[470,5]]}},"keywords":{}}],["orient",{"_index":1671,"title":{},"content":{"122":{"position":[[36,8],[120,8]]},"320":{"position":[[414,8]]}},"keywords":{}}],["origin",{"_index":444,"title":{},"content":{"14":{"position":[[1122,8]]},"109":{"position":[[290,10]]},"192":{"position":[[1879,8]]},"208":{"position":[[1987,8]]},"240":{"position":[[4546,8]]},"259":{"position":[[1592,8],[3150,8]]},"313":{"position":[[3585,9]]},"590":{"position":[[1087,8]]},"1183":{"position":[[1106,8],[1305,8]]}},"keywords":{}}],["ortimestamp_tz",{"_index":6401,"title":{},"content":{"1393":{"position":[[64,14]]}},"keywords":{}}],["os",{"_index":2472,"title":{},"content":{"223":{"position":[[855,2]]},"1298":{"position":[[855,2]]},"1346":{"position":[[855,2]]}},"keywords":{}}],["other",{"_index":608,"title":{},"content":{"26":{"position":[[292,7]]},"38":{"position":[[217,6]]},"69":{"position":[[900,6]]},"84":{"position":[[604,7]]},"100":{"position":[[1031,7]]},"113":{"position":[[230,6]]},"120":{"position":[[2427,7]]},"122":{"position":[[103,6]]},"125":{"position":[[1217,6],[1257,6]]},"792":{"position":[[74,6]]},"918":{"position":[[74,6]]},"1164":{"position":[[528,7]]},"1172":{"position":[[921,7]]},"1222":{"position":[[921,7]]},"1292":{"position":[[4747,6]]},"1306":{"position":[[4747,6]]},"1317":{"position":[[909,6]]},"1329":{"position":[[4747,6]]},"1341":{"position":[[909,6]]},"1352":{"position":[[909,6]]},"1370":{"position":[[654,6]]},"1432":{"position":[[937,6]]},"1459":{"position":[[1033,7]]},"1464":{"position":[[290,6]]},"1466":{"position":[[271,6]]},"1467":{"position":[[614,6]]}},"keywords":{}}],["other'",{"_index":6624,"title":{},"content":{"1461":{"position":[[4454,7]]}},"keywords":{}}],["other.flow.yaml",{"_index":1324,"title":{},"content":{"92":{"position":[[525,15]]}},"keywords":{}}],["other_th",{"_index":1440,"title":{},"content":{"100":{"position":[[535,11]]}},"keywords":{}}],["otherfield",{"_index":1682,"title":{},"content":{"122":{"position":[[1750,11]]}},"keywords":{}}],["othertransf",{"_index":2844,"title":{},"content":{"279":{"position":[[150,14]]}},"keywords":{}}],["otherwis",{"_index":323,"title":{},"content":{"11":{"position":[[1070,10]]},"74":{"position":[[830,9]]},"92":{"position":[[892,9]]},"125":{"position":[[1480,9]]},"158":{"position":[[903,9]]},"164":{"position":[[1946,10]]},"173":{"position":[[1094,9]]},"230":{"position":[[662,10]]},"310":{"position":[[378,9]]},"329":{"position":[[1129,9]]},"379":{"position":[[943,9]]},"479":{"position":[[733,9]]},"1067":{"position":[[187,10]]},"1192":{"position":[[383,10]]},"1230":{"position":[[644,10]]},"1394":{"position":[[380,10]]},"1423":{"position":[[390,10]]},"1442":{"position":[[801,9]]},"1452":{"position":[[504,9],[2949,9]]},"1472":{"position":[[468,10]]}},"keywords":{}}],["ourmaterializationendpoint",{"_index":6618,"title":{},"content":{"1461":{"position":[[3207,26],[3595,27]]}},"keywords":{}}],["ourselv",{"_index":2625,"title":{},"content":{"242":{"position":[[53,10]]},"280":{"position":[[1911,9]]}},"keywords":{}}],["out",{"_index":408,"title":{"182":{"position":[[6,3]]}},"content":{"13":{"position":[[1237,3]]},"104":{"position":[[255,3]]},"107":{"position":[[239,3]]},"112":{"position":[[912,4]]},"139":{"position":[[155,3]]},"141":{"position":[[208,3]]},"143":{"position":[[179,3]]},"144":{"position":[[494,3]]},"162":{"position":[[1924,3]]},"177":{"position":[[364,3]]},"183":{"position":[[729,3],[3268,3]]},"184":{"position":[[355,3]]},"190":{"position":[[811,3]]},"192":{"position":[[449,3]]},"210":{"position":[[447,3],[2104,3],[3917,3]]},"212":{"position":[[143,3]]},"213":{"position":[[512,3]]},"217":{"position":[[912,3]]},"218":{"position":[[459,3]]},"237":{"position":[[1006,3],[2847,3]]},"239":{"position":[[63,4],[2743,3]]},"240":{"position":[[2580,3],[4363,3]]},"243":{"position":[[135,3]]},"253":{"position":[[206,3]]},"254":{"position":[[2054,3],[3920,3]]},"266":{"position":[[459,3]]},"267":{"position":[[1097,3]]},"268":{"position":[[1099,3]]},"269":{"position":[[670,3]]},"270":{"position":[[1612,3]]},"277":{"position":[[125,4],[269,4],[418,3]]},"281":{"position":[[1125,3]]},"290":{"position":[[725,3]]},"291":{"position":[[387,3]]},"295":{"position":[[178,3],[1635,3]]},"296":{"position":[[7626,3]]},"301":{"position":[[658,3]]},"302":{"position":[[387,3]]},"306":{"position":[[716,3]]},"309":{"position":[[1236,3]]},"313":{"position":[[206,3]]},"320":{"position":[[598,3]]},"321":{"position":[[1389,3],[1898,3]]},"329":{"position":[[439,4]]},"349":{"position":[[249,3]]},"436":{"position":[[376,3]]},"485":{"position":[[294,3]]},"486":{"position":[[166,3]]},"574":{"position":[[182,3]]},"585":{"position":[[172,3]]},"603":{"position":[[181,3]]},"657":{"position":[[294,3]]},"658":{"position":[[166,3]]},"673":{"position":[[294,3]]},"674":{"position":[[166,3]]},"688":{"position":[[294,3]]},"689":{"position":[[166,3]]},"760":{"position":[[870,3]]},"773":{"position":[[870,3]]},"800":{"position":[[870,3]]},"815":{"position":[[870,3]]},"831":{"position":[[870,3]]},"1042":{"position":[[1225,3]]},"1140":{"position":[[461,3]]},"1292":{"position":[[4794,3]]},"1306":{"position":[[4794,3]]},"1316":{"position":[[461,3]]},"1329":{"position":[[4794,3]]},"1340":{"position":[[461,3]]},"1351":{"position":[[461,3]]},"1379":{"position":[[1039,3]]},"1384":{"position":[[327,3],[411,3]]},"1403":{"position":[[1039,3]]},"1408":{"position":[[498,3]]},"1414":{"position":[[1039,3]]},"1431":{"position":[[484,3]]},"1456":{"position":[[142,3]]}},"keywords":{}}],["out.a",{"_index":2878,"title":{},"content":{"281":{"position":[[757,5]]}},"keywords":{}}],["outbound",{"_index":3670,"title":{},"content":{"430":{"position":[[268,8]]},"767":{"position":[[341,8]]},"792":{"position":[[654,8]]},"824":{"position":[[446,8]]},"904":{"position":[[445,8]]},"918":{"position":[[654,8]]},"1051":{"position":[[445,8]]},"1289":{"position":[[528,8]]},"1321":{"position":[[308,8]]},"1334":{"position":[[396,8]]},"1373":{"position":[[427,8]]},"1374":{"position":[[427,8]]}},"keywords":{}}],["outcom",{"_index":2862,"title":{},"content":{"280":{"position":[[321,7],[705,8],[761,8],[1162,9],[1210,7],[1282,9],[1320,8],[1963,8],[1993,8],[2224,8],[2246,8],[2265,8]]},"281":{"position":[[1051,8],[1081,8]]},"331":{"position":[[351,8]]},"1459":{"position":[[472,8]]}},"keywords":{}}],["outcomes.flow.yamldebitsender.sqloutcom",{"_index":2869,"title":{},"content":{"280":{"position":[[1074,41]]}},"keywords":{}}],["outdat",{"_index":6515,"title":{},"content":{"1447":{"position":[[491,8]]}},"keywords":{}}],["outer",{"_index":2968,"title":{},"content":{"295":{"position":[[988,5]]},"296":{"position":[[717,5],[2718,5],[3039,5],[4004,5],[5161,5]]},"1140":{"position":[[496,5]]},"1209":{"position":[[260,5]]},"1292":{"position":[[4840,5]]},"1306":{"position":[[4840,5]]},"1316":{"position":[[496,5]]},"1329":{"position":[[4840,5]]},"1340":{"position":[[496,5]]},"1351":{"position":[[496,5]]},"1370":{"position":[[672,5]]},"1379":{"position":[[1087,5]]},"1403":{"position":[[1087,5]]},"1414":{"position":[[1087,5]]},"1431":{"position":[[519,5]]}},"keywords":{}}],["outfil",{"_index":6168,"title":{},"content":{"1292":{"position":[[4891,7]]},"1306":{"position":[[4891,7]]},"1329":{"position":[[4891,7]]}},"keywords":{}}],["outform",{"_index":6386,"title":{},"content":{"1384":{"position":[[1023,7]]}},"keywords":{}}],["output",{"_index":266,"title":{},"content":{"8":{"position":[[477,8]]},"60":{"position":[[758,6]]},"61":{"position":[[585,6]]},"68":{"position":[[1762,6]]},"96":{"position":[[532,6]]},"98":{"position":[[27,6],[1058,6]]},"102":{"position":[[426,6]]},"112":{"position":[[148,6]]},"183":{"position":[[4052,7]]},"217":{"position":[[1208,6],[1735,6],[2071,6]]},"218":{"position":[[1942,6]]},"221":{"position":[[354,7]]},"228":{"position":[[235,6]]},"230":{"position":[[495,6]]},"254":{"position":[[1231,7]]},"255":{"position":[[817,6]]},"259":{"position":[[528,6],[1057,6]]},"263":{"position":[[264,7]]},"268":{"position":[[1845,6]]},"269":{"position":[[1302,6]]},"270":{"position":[[1917,6]]},"277":{"position":[[1108,6]]},"280":{"position":[[2195,6]]},"284":{"position":[[652,6]]},"291":{"position":[[1149,6]]},"302":{"position":[[1112,6]]},"314":{"position":[[952,7]]},"316":{"position":[[1142,6]]},"323":{"position":[[637,6]]},"480":{"position":[[83,10]]},"517":{"position":[[378,6],[2506,6]]},"759":{"position":[[145,10]]},"772":{"position":[[156,10]]},"799":{"position":[[143,10]]},"814":{"position":[[143,10]]},"830":{"position":[[143,10]]},"1036":{"position":[[936,6]]},"1140":{"position":[[532,6]]},"1182":{"position":[[396,7]]},"1191":{"position":[[398,7]]},"1243":{"position":[[703,6],[814,6],[949,6]]},"1262":{"position":[[398,7]]},"1316":{"position":[[532,6]]},"1340":{"position":[[532,6]]},"1351":{"position":[[532,6]]},"1356":{"position":[[530,6]]},"1358":{"position":[[552,6]]},"1379":{"position":[[1134,6]]},"1389":{"position":[[397,7]]},"1403":{"position":[[1134,6]]},"1414":{"position":[[1134,6]]},"1431":{"position":[[555,6]]},"1471":{"position":[[717,7]]},"1473":{"position":[[81,7]]},"1475":{"position":[[73,8],[1167,6],[1709,7],[1853,7]]}},"keywords":{}}],["outsid",{"_index":662,"title":{},"content":{"32":{"position":[[220,7],[338,7]]},"137":{"position":[[459,7]]},"189":{"position":[[1508,7],[1704,7]]},"322":{"position":[[957,7]]},"337":{"position":[[467,7],[539,7]]},"341":{"position":[[462,7],[508,7]]},"1462":{"position":[[475,7]]},"1470":{"position":[[369,7]]}},"keywords":{}}],["outstand",{"_index":6540,"title":{},"content":{"1452":{"position":[[1711,11]]}},"keywords":{}}],["over",{"_index":181,"title":{},"content":{"4":{"position":[[600,4]]},"17":{"position":[[991,4]]},"41":{"position":[[430,4]]},"42":{"position":[[552,4]]},"64":{"position":[[388,4]]},"74":{"position":[[181,4]]},"92":{"position":[[356,4]]},"105":{"position":[[1318,4]]},"106":{"position":[[379,4],[558,4]]},"107":{"position":[[1389,4]]},"126":{"position":[[146,4]]},"138":{"position":[[2519,4],[2655,4]]},"141":{"position":[[2245,4]]},"142":{"position":[[2597,4],[2732,4]]},"146":{"position":[[569,4]]},"149":{"position":[[542,4]]},"152":{"position":[[545,4]]},"158":{"position":[[133,4]]},"164":{"position":[[1017,4]]},"196":{"position":[[639,4]]},"202":{"position":[[344,4]]},"204":{"position":[[912,4]]},"210":{"position":[[12,4],[1718,4]]},"217":{"position":[[1341,4]]},"218":{"position":[[1933,4]]},"233":{"position":[[824,4]]},"239":{"position":[[29,5],[73,4]]},"240":{"position":[[2467,4],[4623,4]]},"254":{"position":[[980,4]]},"255":{"position":[[1210,4]]},"260":{"position":[[29,4]]},"271":{"position":[[448,4]]},"281":{"position":[[2858,4]]},"295":{"position":[[1049,4]]},"296":{"position":[[6886,4],[7201,4],[7794,4]]},"307":{"position":[[3105,4]]},"314":{"position":[[701,4]]},"316":{"position":[[1535,4]]},"320":{"position":[[1545,4]]},"337":{"position":[[82,4]]},"374":{"position":[[17,4]]},"414":{"position":[[809,4]]},"485":{"position":[[342,5]]},"657":{"position":[[342,5]]},"673":{"position":[[342,5]]},"688":{"position":[[342,5]]},"757":{"position":[[675,4]]},"770":{"position":[[675,4]]},"797":{"position":[[675,4]]},"812":{"position":[[675,4]]},"821":{"position":[[816,4],[825,5]]},"828":{"position":[[675,4]]},"849":{"position":[[1443,4]]},"869":{"position":[[1261,4]]},"912":{"position":[[832,4],[841,5]]},"1020":{"position":[[2031,4]]},"1140":{"position":[[563,4]]},"1146":{"position":[[673,4]]},"1154":{"position":[[127,4],[284,4],[347,4],[437,4]]},"1173":{"position":[[685,4]]},"1209":{"position":[[278,4]]},"1215":{"position":[[673,4]]},"1223":{"position":[[685,4]]},"1285":{"position":[[687,4]]},"1292":{"position":[[4939,4]]},"1300":{"position":[[687,4]]},"1306":{"position":[[4939,4]]},"1316":{"position":[[563,4]]},"1324":{"position":[[687,4]]},"1329":{"position":[[4939,4]]},"1340":{"position":[[563,4]]},"1351":{"position":[[563,4]]},"1370":{"position":[[685,4]]},"1379":{"position":[[1173,4]]},"1391":{"position":[[712,4]]},"1403":{"position":[[1173,4]]},"1414":{"position":[[1173,4]]},"1431":{"position":[[586,4]]},"1434":{"position":[[427,4],[1089,4],[1701,4],[2183,4]]},"1440":{"position":[[1144,4],[1343,4]]},"1465":{"position":[[605,4]]},"1476":{"position":[[861,4],[892,4]]}},"keywords":{}}],["overal",{"_index":118,"title":{},"content":{"3":{"position":[[376,7]]},"49":{"position":[[280,7]]},"101":{"position":[[537,7]]},"121":{"position":[[1673,7]]},"163":{"position":[[535,7]]},"239":{"position":[[2594,8]]},"922":{"position":[[3202,7]]}},"keywords":{}}],["overdraft",{"_index":2860,"title":{},"content":{"280":{"position":[[194,10]]}},"keywords":{}}],["overlap",{"_index":3102,"title":{},"content":{"319":{"position":[[292,7]]},"325":{"position":[[222,7]]},"373":{"position":[[971,7]]},"379":{"position":[[548,7]]},"1140":{"position":[[589,8]]},"1316":{"position":[[589,8]]},"1340":{"position":[[589,8]]},"1351":{"position":[[589,8]]},"1379":{"position":[[1210,8]]},"1403":{"position":[[1210,8]]},"1414":{"position":[[1210,8]]},"1431":{"position":[[612,8]]}},"keywords":{}}],["overlay",{"_index":5534,"title":{},"content":{"1140":{"position":[[630,7]]},"1316":{"position":[[630,7]]},"1340":{"position":[[630,7]]},"1351":{"position":[[630,7]]},"1379":{"position":[[1263,7]]},"1403":{"position":[[1263,7]]},"1414":{"position":[[1263,7]]},"1431":{"position":[[653,7]]}},"keywords":{}}],["overrid",{"_index":3850,"title":{},"content":{"482":{"position":[[831,8]]},"907":{"position":[[1311,9]]},"923":{"position":[[1311,9]]},"934":{"position":[[1311,9]]},"950":{"position":[[1311,9]]},"968":{"position":[[1311,9]]},"1138":{"position":[[1653,9]]},"1285":{"position":[[884,9]]},"1300":{"position":[[884,9]]},"1313":{"position":[[738,9],[1197,9]]},"1324":{"position":[[884,9]]},"1337":{"position":[[738,9],[1197,9]]},"1348":{"position":[[738,9],[1197,9]]},"1427":{"position":[[957,9]]}},"keywords":{}}],["overridden",{"_index":3848,"title":{},"content":{"482":{"position":[[419,10]]},"750":{"position":[[706,10]]},"766":{"position":[[706,10]]},"789":{"position":[[694,10]]},"807":{"position":[[694,10]]},"823":{"position":[[694,10]]},"1031":{"position":[[342,10]]},"1138":{"position":[[602,10]]},"1151":{"position":[[587,10]]},"1162":{"position":[[515,10]]},"1179":{"position":[[414,10]]},"1260":{"position":[[301,10]]},"1313":{"position":[[412,10]]},"1337":{"position":[[412,10]]},"1348":{"position":[[412,10]]},"1386":{"position":[[385,10]]},"1427":{"position":[[353,10]]}},"keywords":{}}],["overs",{"_index":5010,"title":{},"content":{"909":{"position":[[198,9]]},"925":{"position":[[198,9]]},"936":{"position":[[198,9]]},"952":{"position":[[198,9]]},"970":{"position":[[198,9]]}},"keywords":{}}],["overview",{"_index":1831,"title":{"146":{"position":[[0,8]]},"149":{"position":[[0,8]]},"152":{"position":[[0,8]]},"245":{"position":[[0,9]]},"974":{"position":[[0,9]]}},"content":{"204":{"position":[[684,8]]},"210":{"position":[[1639,10]]},"436":{"position":[[836,8]]},"931":{"position":[[677,8]]}},"keywords":{}}],["overviewcopi",{"_index":3696,"title":{},"content":{"436":{"position":[[212,12]]}},"keywords":{}}],["overviewtraff",{"_index":4144,"title":{},"content":{"568":{"position":[[84,15]]}},"keywords":{}}],["overviewweekli",{"_index":4217,"title":{},"content":{"580":{"position":[[132,14]]}},"keywords":{}}],["overwhelm",{"_index":6575,"title":{},"content":{"1453":{"position":[[901,12]]}},"keywords":{}}],["overwrit",{"_index":972,"title":{},"content":{"64":{"position":[[953,9]]},"259":{"position":[[758,9]]}},"keywords":{}}],["overwritten",{"_index":952,"title":{},"content":{"63":{"position":[[889,11]]},"879":{"position":[[1466,11]]}},"keywords":{}}],["own",{"_index":4919,"title":{},"content":{"879":{"position":[[1691,4]]}},"keywords":{}}],["owner",{"_index":2022,"title":{},"content":{"173":{"position":[[786,5],[914,5]]},"238":{"position":[[1048,5]]},"608":{"position":[[39,5]]},"1292":{"position":[[4988,5]]},"1306":{"position":[[4988,5]]},"1329":{"position":[[4988,5]]}},"keywords":{}}],["owner/schema",{"_index":4876,"title":{},"content":{"867":{"position":[[2171,12]]}},"keywords":{}}],["ownership",{"_index":91,"title":{},"content":{"2":{"position":[[588,10]]}},"keywords":{}}],["p",{"_index":2454,"title":{},"content":{"221":{"position":[[1369,1]]},"222":{"position":[[614,1]]},"223":{"position":[[580,1]]},"224":{"position":[[633,1]]},"238":{"position":[[889,1]]},"250":{"position":[[1517,1]]},"1298":{"position":[[580,1]]},"1322":{"position":[[614,1]]},"1335":{"position":[[614,1]]},"1346":{"position":[[580,1]]}},"keywords":{}}],["p1",{"_index":1529,"title":{},"content":{"107":{"position":[[1018,2],[1047,2]]}},"keywords":{}}],["p1>acmebank/transfers/part",{"_index":1524,"title":{},"content":{"107":{"position":[[853,29]]}},"keywords":{}}],["p2",{"_index":1534,"title":{},"content":{"107":{"position":[[1077,2],[1109,2]]}},"keywords":{}}],["p2>acmebank/transfers/part",{"_index":1525,"title":{},"content":{"107":{"position":[[887,29]]}},"keywords":{}}],["p_type",{"_index":4862,"title":{},"content":{"864":{"position":[[1629,6]]}},"keywords":{}}],["pack_key",{"_index":6175,"title":{},"content":{"1292":{"position":[[5030,9]]},"1306":{"position":[[5030,9]]},"1329":{"position":[[5030,9]]}},"keywords":{}}],["packag",{"_index":948,"title":{},"content":{"63":{"position":[[709,7]]},"81":{"position":[[16,8]]},"236":{"position":[[506,8]]},"654":{"position":[[686,9]]}},"keywords":{}}],["package.json",{"_index":947,"title":{},"content":{"63":{"position":[[692,12],[839,13]]}},"keywords":{}}],["pad",{"_index":5537,"title":{},"content":{"1140":{"position":[[673,3]]},"1146":{"position":[[76,6]]},"1173":{"position":[[76,6]]},"1215":{"position":[[76,6]]},"1223":{"position":[[76,6]]},"1316":{"position":[[673,3]]},"1340":{"position":[[673,3]]},"1351":{"position":[[673,3]]},"1379":{"position":[[1317,3]]},"1403":{"position":[[1317,3]]},"1414":{"position":[[1317,3]]},"1431":{"position":[[696,3]]}},"keywords":{}}],["page",{"_index":1042,"title":{"138":{"position":[[9,5]]},"141":{"position":[[12,5]]},"142":{"position":[[17,5]]},"145":{"position":[[16,5]]},"148":{"position":[[19,5]]},"151":{"position":[[24,5]]},"154":{"position":[[6,5]]},"722":{"position":[[9,5]]}},"content":{"69":{"position":[[974,4]]},"137":{"position":[[56,5],[88,5],[531,5]]},"138":{"position":[[14,4],[526,5],[1798,4],[2606,4]]},"139":{"position":[[83,5],[95,4],[133,4]]},"140":{"position":[[67,5],[539,4]]},"141":{"position":[[17,4],[1806,4]]},"142":{"position":[[22,4],[257,5],[1823,4],[2684,4]]},"143":{"position":[[99,5],[111,4],[157,4]]},"144":{"position":[[167,4],[710,4]]},"145":{"position":[[57,4],[103,4]]},"146":{"position":[[891,4]]},"148":{"position":[[63,4],[112,4]]},"149":{"position":[[864,4]]},"151":{"position":[[73,4],[110,4]]},"152":{"position":[[867,4]]},"154":{"position":[[14,5]]},"168":{"position":[[105,5]]},"173":{"position":[[384,5],[468,5],[947,5]]},"181":{"position":[[27,4]]},"182":{"position":[[25,4],[139,5]]},"183":{"position":[[128,4]]},"184":{"position":[[149,4]]},"185":{"position":[[314,5]]},"192":{"position":[[43,5]]},"193":{"position":[[515,5]]},"204":{"position":[[401,4],[630,4]]},"205":{"position":[[286,5]]},"207":{"position":[[617,4]]},"210":{"position":[[36,4],[1650,4]]},"217":{"position":[[501,4]]},"218":{"position":[[183,4]]},"225":{"position":[[675,4]]},"228":{"position":[[95,4]]},"230":{"position":[[433,5]]},"239":{"position":[[298,4],[534,5],[1058,4],[2775,4]]},"240":{"position":[[2492,5],[4654,4]]},"253":{"position":[[219,4]]},"254":{"position":[[2076,5]]},"255":{"position":[[1234,4]]},"257":{"position":[[216,5]]},"259":{"position":[[19,4],[170,4],[1692,4],[1859,4]]},"267":{"position":[[137,4]]},"268":{"position":[[1613,4]]},"269":{"position":[[1134,4]]},"274":{"position":[[758,6]]},"284":{"position":[[281,5]]},"295":{"position":[[1363,4],[1648,4]]},"296":{"position":[[7005,5],[7238,5]]},"313":{"position":[[219,4],[3631,5]]},"316":{"position":[[1559,4]]},"345":{"position":[[107,6]]},"364":{"position":[[2421,5]]},"379":{"position":[[986,5]]},"436":{"position":[[845,4]]},"486":{"position":[[107,4],[342,4]]},"494":{"position":[[121,5]]},"517":{"position":[[3459,4],[3481,4],[3567,4]]},"531":{"position":[[533,5]]},"534":{"position":[[843,4],[968,4]]},"575":{"position":[[810,5]]},"586":{"position":[[732,5]]},"658":{"position":[[107,4],[342,4]]},"674":{"position":[[107,4],[342,4]]},"689":{"position":[[107,4],[342,4]]},"723":{"position":[[388,5]]},"726":{"position":[[49,4]]},"727":{"position":[[259,5]]},"728":{"position":[[162,4]]},"842":{"position":[[2239,4]]},"856":{"position":[[25,4],[93,5]]},"857":{"position":[[25,4]]},"892":{"position":[[277,4]]},"909":{"position":[[23,4]]},"925":{"position":[[23,4]]},"931":{"position":[[686,5]]},"936":{"position":[[23,4]]},"952":{"position":[[23,4]]},"970":{"position":[[23,4]]},"1067":{"position":[[35,4]]},"1204":{"position":[[397,5]]},"1292":{"position":[[5075,4]]},"1306":{"position":[[5075,4]]},"1329":{"position":[[5075,4]]},"1392":{"position":[[320,5]]}},"keywords":{}}],["page.select",{"_index":1827,"title":{},"content":{"144":{"position":[[113,14]]}},"keywords":{}}],["page_cursor",{"_index":4770,"title":{},"content":{"842":{"position":[[2226,12]]},"843":{"position":[[710,12]]}},"keywords":{}}],["page_s",{"_index":3971,"title":{},"content":{"517":{"position":[[3448,10]]}},"keywords":{}}],["page_size_for_large_stream",{"_index":4045,"title":{},"content":{"534":{"position":[[814,28]]},"535":{"position":[[253,28]]}},"keywords":{}}],["pageev",{"_index":4935,"title":{},"content":{"892":{"position":[[373,10]]}},"keywords":{}}],["pageinstagram",{"_index":4415,"title":{},"content":{"668":{"position":[[72,13]]}},"keywords":{}}],["pages:4985746",{"_index":3360,"title":{},"content":{"364":{"position":[[2482,13]]}},"keywords":{}}],["pages_read_engag",{"_index":4422,"title":{},"content":{"670":{"position":[[389,22]]}},"keywords":{}}],["pages_show_list",{"_index":4421,"title":{},"content":{"670":{"position":[[372,16]]}},"keywords":{}}],["pagesearch",{"_index":4300,"title":{},"content":{"605":{"position":[[326,10]]}},"keywords":{}}],["pagessurvey",{"_index":5266,"title":{},"content":{"1065":{"position":[[60,11]]}},"keywords":{}}],["pagin",{"_index":3972,"title":{},"content":{"517":{"position":[[3590,11]]},"1133":{"position":[[1429,10]]}},"keywords":{}}],["paid",{"_index":5270,"title":{},"content":{"1067":{"position":[[163,4]]}},"keywords":{}}],["painless",{"_index":3147,"title":{},"content":{"321":{"position":[[2336,8]]}},"keywords":{}}],["pair",{"_index":975,"title":{"278":{"position":[[20,6]]},"1384":{"position":[[4,4]]}},"content":{"66":{"position":[[101,4]]},"112":{"position":[[1027,6]]},"222":{"position":[[817,5]]},"278":{"position":[[289,4],[364,5]]},"322":{"position":[[330,6]]},"402":{"position":[[612,6]]},"631":{"position":[[140,4]]},"1322":{"position":[[817,5]]},"1335":{"position":[[817,5]]},"1384":{"position":[[99,4],[183,4],[225,4],[1193,4]]},"1387":{"position":[[568,4]]},"1392":{"position":[[279,4],[330,4]]}},"keywords":{}}],["palett",{"_index":6592,"title":{},"content":{"1459":{"position":[[1347,7]]}},"keywords":{}}],["pane",{"_index":6417,"title":{},"content":{"1425":{"position":[[233,5]]}},"keywords":{}}],["panel",{"_index":2427,"title":{},"content":{"217":{"position":[[560,6]]}},"keywords":{}}],["paradigm",{"_index":3106,"title":{},"content":{"319":{"position":[[906,9]]},"322":{"position":[[671,9]]}},"keywords":{}}],["parallel",{"_index":780,"title":{"977":{"position":[[27,9]]}},"content":{"49":{"position":[[177,12]]},"101":{"position":[[623,8]]},"107":{"position":[[281,8]]},"320":{"position":[[2157,8]]},"321":{"position":[[1936,11]]},"373":{"position":[[463,9]]},"595":{"position":[[667,8]]},"842":{"position":[[1627,9]]},"977":{"position":[[770,9]]}},"keywords":{}}],["param",{"_index":3542,"title":{},"content":{"402":{"position":[[495,6]]}},"keywords":{}}],["paramet",{"_index":1401,"title":{"99":{"position":[[0,11]]},"922":{"position":[[25,11]]}},"content":{"98":{"position":[[143,10]]},"99":{"position":[[143,10],[667,10],[744,9],[851,11]]},"206":{"position":[[511,9]]},"225":{"position":[[73,11]]},"240":{"position":[[3011,10],[3040,9],[3123,9],[4843,9]]},"277":{"position":[[72,12],[1217,10]]},"488":{"position":[[869,10]]},"491":{"position":[[519,10]]},"509":{"position":[[451,9]]},"571":{"position":[[759,9]]},"577":{"position":[[442,9]]},"582":{"position":[[372,9]]},"588":{"position":[[437,9]]},"609":{"position":[[316,9]]},"617":{"position":[[683,9]]},"635":{"position":[[293,10]]},"659":{"position":[[1026,10]]},"664":{"position":[[540,10],[775,10]]},"676":{"position":[[869,10]]},"679":{"position":[[519,10]]},"691":{"position":[[869,10]]},"694":{"position":[[519,10]]},"767":{"position":[[811,9],[870,9],[986,9],[1017,9],[1058,11],[1189,9],[1357,9],[1487,9],[1515,9]]},"780":{"position":[[310,9]]},"792":{"position":[[1090,9],[1164,9],[1322,9],[1363,11],[1445,9]]},"794":{"position":[[663,9],[732,9]]},"809":{"position":[[663,9],[732,9]]},"824":{"position":[[882,9],[939,9],[1052,9],[1083,9],[1124,11],[1255,9],[1423,9],[1551,9],[1579,9]]},"840":{"position":[[1513,10]]},"849":{"position":[[2404,10]]},"904":{"position":[[937,9],[1052,9],[1083,9],[1148,9],[1220,9]]},"907":{"position":[[1370,10]]},"918":{"position":[[1140,9],[1343,9],[1374,9],[1439,9],[1512,9]]},"919":{"position":[[656,11]]},"923":{"position":[[1370,10]]},"934":{"position":[[1370,10]]},"942":{"position":[[76,10]]},"950":{"position":[[1370,10]]},"968":{"position":[[1370,10]]},"1085":{"position":[[1280,9]]},"1140":{"position":[[705,9]]},"1186":{"position":[[351,9]]},"1245":{"position":[[628,9]]},"1285":{"position":[[943,10]]},"1286":{"position":[[720,9],[789,9]]},"1300":{"position":[[943,10]]},"1313":{"position":[[797,10]]},"1316":{"position":[[705,9]]},"1324":{"position":[[943,10]]},"1325":{"position":[[720,9],[789,9]]},"1337":{"position":[[797,10]]},"1340":{"position":[[705,9]]},"1348":{"position":[[797,10]]},"1351":{"position":[[705,9]]},"1379":{"position":[[1376,9],[1426,10]]},"1403":{"position":[[1376,9],[1426,10]]},"1414":{"position":[[1376,9],[1426,10]]},"1431":{"position":[[728,9]]}},"keywords":{}}],["parent",{"_index":1327,"title":{},"content":{"92":{"position":[[638,7]]},"842":{"position":[[3219,6]]},"1477":{"position":[[1360,7],[3526,7]]}},"keywords":{}}],["parent'",{"_index":4253,"title":{},"content":{"593":{"position":[[617,8]]}},"keywords":{}}],["parent.flow.yaml",{"_index":1328,"title":{},"content":{"92":{"position":[[687,16],[724,16]]}},"keywords":{}}],["parent/*/nest",{"_index":4252,"title":{},"content":{"593":{"position":[[564,15]]}},"keywords":{}}],["parent_join_column_nam",{"_index":4799,"title":{},"content":{"843":{"position":[[591,24]]}},"keywords":{}}],["parquet",{"_index":5415,"title":{"1167":{"position":[[7,7]]},"1172":{"position":[[0,7]]},"1217":{"position":[[7,7]]},"1222":{"position":[[0,7]]}},"content":{"1120":{"position":[[427,7],[522,7]]},"1172":{"position":[[39,7],[128,7],[165,7],[194,7],[228,7],[270,7]]},"1222":{"position":[[39,7],[128,7],[165,7],[194,7],[228,7],[270,7]]}},"keywords":{}}],["parquet:dev",{"_index":5416,"title":{},"content":{"1120":{"position":[[503,11],[596,11]]}},"keywords":{}}],["parquet:dev"",{"_index":5777,"title":{},"content":{"1171":{"position":[[107,17]]},"1221":{"position":[[108,17]]}},"keywords":{}}],["parquetconfig/rowgroupbytelimit",{"_index":5775,"title":{},"content":{"1170":{"position":[[1003,32]]},"1220":{"position":[[680,32]]}},"keywords":{}}],["parquetconfig/rowgrouprowlimit",{"_index":5773,"title":{},"content":{"1170":{"position":[[874,31]]},"1220":{"position":[[551,31]]}},"keywords":{}}],["pars",{"_index":1412,"title":{"419":{"position":[[10,7]]},"440":{"position":[[10,7]]},"504":{"position":[[10,7]]},"547":{"position":[[10,7]]},"639":{"position":[[10,7]]},"1023":{"position":[[10,7]]}},"content":{"98":{"position":[[654,6],[820,7]]},"207":{"position":[[677,6]]},"239":{"position":[[1482,6]]},"254":{"position":[[3611,5]]},"417":{"position":[[1419,6],[1662,5]]},"419":{"position":[[147,5],[917,7]]},"440":{"position":[[163,5],[933,7]]},"502":{"position":[[1067,6],[1310,5]]},"504":{"position":[[84,5],[849,7]]},"545":{"position":[[1043,6],[1264,5]]},"547":{"position":[[148,5],[918,7]]},"637":{"position":[[603,6],[824,5]]},"639":{"position":[[83,5],[847,7]]},"1021":{"position":[[1578,6],[1821,5]]},"1023":{"position":[[128,5],[898,7]]}},"keywords":{}}],["parser",{"_index":3034,"title":{},"content":{"301":{"position":[[1243,6]]},"417":{"position":[[1365,7],[1373,6]]},"418":{"position":[[134,7]]},"419":{"position":[[244,6],[356,6],[530,6],[621,6],[1466,7]]},"439":{"position":[[391,7]]},"440":{"position":[[260,6],[372,6],[546,6],[637,6]]},"441":{"position":[[75,7]]},"499":{"position":[[451,6]]},"502":{"position":[[1013,7],[1021,6]]},"504":{"position":[[181,6],[300,6],[474,6],[565,6],[1095,7]]},"545":{"position":[[989,7],[997,6]]},"546":{"position":[[871,7]]},"547":{"position":[[245,6],[357,6],[531,6],[622,6],[1468,7]]},"634":{"position":[[443,6]]},"637":{"position":[[549,7],[557,6]]},"638":{"position":[[163,7]]},"639":{"position":[[180,6],[298,6],[472,6],[563,6],[1093,7]]},"1021":{"position":[[1524,7],[1532,6]]},"1022":{"position":[[200,7]]},"1023":{"position":[[225,6],[337,6],[511,6],[602,6],[1449,7]]},"1292":{"position":[[5122,6]]},"1306":{"position":[[5122,6]]},"1329":{"position":[[5122,6]]}},"keywords":{}}],["parser/compress",{"_index":3595,"title":{},"content":{"417":{"position":[[1455,19]]},"502":{"position":[[1103,19]]},"545":{"position":[[1057,19]]},"637":{"position":[[617,19]]},"1021":{"position":[[1614,19]]}},"keywords":{}}],["parser/format",{"_index":3597,"title":{},"content":{"417":{"position":[[1622,14]]},"502":{"position":[[1270,14]]},"545":{"position":[[1224,14]]},"637":{"position":[[784,14]]},"1021":{"position":[[1781,14]]}},"keywords":{}}],["parser/format/typ",{"_index":3600,"title":{},"content":{"417":{"position":[[1849,19]]},"502":{"position":[[1497,19]]},"545":{"position":[[1451,19]]},"637":{"position":[[1011,19]]}},"keywords":{}}],["part",{"_index":321,"title":{},"content":{"11":{"position":[[941,5],[1209,5]]},"17":{"position":[[262,4]]},"43":{"position":[[27,4]]},"63":{"position":[[288,4]]},"64":{"position":[[55,4],[172,4],[517,4]]},"81":{"position":[[1941,4]]},"112":{"position":[[136,4]]},"129":{"position":[[651,4]]},"138":{"position":[[891,4]]},"142":{"position":[[862,4]]},"160":{"position":[[288,4]]},"192":{"position":[[912,4]]},"239":{"position":[[21,4]]},"274":{"position":[[348,4]]},"281":{"position":[[2199,5]]},"288":{"position":[[293,4]]},"307":{"position":[[308,5]]},"392":{"position":[[94,4],[260,4]]},"417":{"position":[[738,4],[929,4]]},"419":{"position":[[561,4]]},"440":{"position":[[577,4]]},"489":{"position":[[89,4]]},"504":{"position":[[505,4]]},"522":{"position":[[514,4]]},"530":{"position":[[514,4]]},"547":{"position":[[562,4]]},"548":{"position":[[4,4]]},"639":{"position":[[503,4]]},"640":{"position":[[73,4]]},"661":{"position":[[48,4]]},"662":{"position":[[89,4]]},"677":{"position":[[89,4]]},"692":{"position":[[89,4]]},"911":{"position":[[442,4]]},"927":{"position":[[442,4]]},"938":{"position":[[442,4]]},"954":{"position":[[442,4]]},"972":{"position":[[442,4]]},"1023":{"position":[[542,4]]},"1040":{"position":[[817,4]]},"1050":{"position":[[817,4]]},"1058":{"position":[[817,4]]},"1067":{"position":[[499,4]]},"1147":{"position":[[258,4]]},"1174":{"position":[[258,4]]},"1200":{"position":[[99,4],[170,4]]},"1209":{"position":[[167,4]]},"1216":{"position":[[258,4]]},"1224":{"position":[[258,4]]},"1291":{"position":[[31,4]]},"1305":{"position":[[31,4]]},"1328":{"position":[[31,4]]},"1359":{"position":[[367,4]]},"1438":{"position":[[297,4]]}},"keywords":{}}],["parti",{"_index":700,"title":{"241":{"position":[[0,5]]},"364":{"position":[[6,5]]}},"content":{"38":{"position":[[242,8]]},"53":{"position":[[44,5],[342,5]]},"88":{"position":[[447,5]]},"102":{"position":[[252,5]]},"161":{"position":[[1278,5]]},"242":{"position":[[13,6]]},"281":{"position":[[2667,5]]},"337":{"position":[[411,5]]},"364":{"position":[[52,8],[321,7],[378,5]]},"531":{"position":[[495,5]]},"532":{"position":[[307,5]]}},"keywords":{}}],["partial",{"_index":1280,"title":{},"content":{"87":{"position":[[47,7]]},"112":{"position":[[69,7]]},"1140":{"position":[[752,7]]},"1292":{"position":[[5161,7]]},"1306":{"position":[[5161,7]]},"1316":{"position":[[752,7]]},"1329":{"position":[[5161,7]]},"1340":{"position":[[752,7]]},"1351":{"position":[[752,7]]},"1379":{"position":[[1483,7]]},"1403":{"position":[[1483,7]]},"1414":{"position":[[1483,7]]},"1431":{"position":[[775,7]]},"1438":{"position":[[358,9],[531,9]]}},"keywords":{}}],["participantsconferencesconversationsconvers",{"_index":5395,"title":{},"content":{"1110":{"position":[[245,48]]}},"keywords":{}}],["participantsdepend",{"_index":5397,"title":{},"content":{"1110":{"position":[[315,21]]}},"keywords":{}}],["particular",{"_index":709,"title":{},"content":{"38":{"position":[[635,10]]},"107":{"position":[[439,10]]},"159":{"position":[[464,11]]},"296":{"position":[[3243,10]]},"308":{"position":[[454,10]]},"590":{"position":[[682,10]]},"764":{"position":[[485,10]]},"777":{"position":[[485,10]]},"804":{"position":[[483,10]]},"819":{"position":[[483,10]]},"835":{"position":[[483,10]]},"912":{"position":[[1115,10]]},"922":{"position":[[1146,10]]}},"keywords":{}}],["particularli",{"_index":1012,"title":{},"content":{"67":{"position":[[1545,12]]},"975":{"position":[[155,12]]}},"keywords":{}}],["partit",{"_index":64,"title":{"2":{"position":[[9,11]]},"16":{"position":[[8,11]]},"17":{"position":[[0,9]]},"123":{"position":[[0,9]]},"130":{"position":[[0,9]]},"1183":{"position":[[6,13]]}},"content":{"2":{"position":[[15,9],[80,10],[127,10],[224,9],[376,9],[447,9],[515,9],[545,10],[615,9],[654,10],[692,10],[794,9]]},"3":{"position":[[684,9],[778,10],[1017,10],[1044,11]]},"4":{"position":[[338,13]]},"6":{"position":[[487,11]]},"8":{"position":[[293,11]]},"11":{"position":[[884,10],[1783,11]]},"13":{"position":[[1574,12]]},"14":{"position":[[49,9]]},"16":{"position":[[43,9],[263,10],[309,10],[359,10],[385,10],[459,11],[493,11],[564,11],[605,10],[631,9],[1225,10],[1384,11]]},"17":{"position":[[115,9],[166,10],[226,9],[330,11],[362,11],[444,9],[532,10],[589,10],[726,11],[803,9],[892,10],[917,10],[1038,9]]},"48":{"position":[[88,9]]},"68":{"position":[[1092,9],[1156,10],[1595,9],[1647,11],[1685,9],[1708,9],[1745,10]]},"69":{"position":[[784,10]]},"76":{"position":[[91,12],[344,11],[466,10],[624,13],[900,9],[970,10]]},"94":{"position":[[1436,9],[1516,11],[1528,11]]},"106":{"position":[[171,9],[266,11],[308,10],[384,10]]},"107":{"position":[[841,11]]},"123":{"position":[[1,9],[87,11],[164,11],[325,10],[458,9],[619,9],[685,10],[738,11],[832,9]]},"130":{"position":[[28,9],[86,10],[351,11],[412,9]]},"162":{"position":[[1761,11]]},"208":{"position":[[1333,12]]},"237":{"position":[[2219,9],[2370,11],[2463,12]]},"239":{"position":[[2226,11]]},"280":{"position":[[1972,11],[2185,9],[2274,10]]},"281":{"position":[[1060,11]]},"306":{"position":[[182,12]]},"307":{"position":[[38,12],[193,13]]},"320":{"position":[[771,11],[1811,13],[1893,13]]},"321":{"position":[[1005,11]]},"333":{"position":[[365,12]]},"904":{"position":[[2217,11]]},"917":{"position":[[1726,11]]},"918":{"position":[[2509,11]]},"931":{"position":[[1879,11]]},"945":{"position":[[371,11]]},"965":{"position":[[1726,11]]},"1123":{"position":[[148,9]]},"1140":{"position":[[789,9]]},"1183":{"position":[[130,13],[161,11],[236,12],[321,12],[630,13],[775,12],[913,9],[1741,11]]},"1209":{"position":[[296,9]]},"1292":{"position":[[5194,9],[5236,12],[5275,10]]},"1306":{"position":[[5194,9],[5236,12],[5275,10]]},"1316":{"position":[[789,9]]},"1329":{"position":[[5194,9],[5236,12],[5275,10]]},"1340":{"position":[[789,9]]},"1351":{"position":[[789,9]]},"1370":{"position":[[696,9]]},"1379":{"position":[[1537,9]]},"1391":{"position":[[179,10],[243,9],[438,11],[980,11],[1037,10]]},"1403":{"position":[[1537,9]]},"1414":{"position":[[1537,9]]},"1431":{"position":[[812,9]]},"1459":{"position":[[91,9],[287,11]]},"1472":{"position":[[279,9],[334,11],[383,9],[899,11]]}},"keywords":{}}],["partition.utc_d",{"_index":486,"title":{},"content":{"16":{"position":[[1270,18]]}},"keywords":{}}],["partitionsinto",{"_index":470,"title":{},"content":{"16":{"position":[[666,14]]}},"keywords":{}}],["partli",{"_index":3141,"title":{},"content":{"321":{"position":[[1211,6]]}},"keywords":{}}],["partssegmentstagsteam",{"_index":4431,"title":{},"content":{"682":{"position":[[172,22]]}},"keywords":{}}],["pascal",{"_index":6311,"title":{},"content":{"1379":{"position":[[1589,6]]},"1403":{"position":[[1589,6]]},"1414":{"position":[[1589,6]]}},"keywords":{}}],["pass",{"_index":910,"title":{},"content":{"60":{"position":[[1125,7]]},"82":{"position":[[5052,7]]},"122":{"position":[[1998,6]]},"149":{"position":[[142,7]]},"240":{"position":[[4959,6]]},"250":{"position":[[1081,4]]},"275":{"position":[[587,7]]},"309":{"position":[[492,4]]},"402":{"position":[[527,4]]},"661":{"position":[[21,4]]},"724":{"position":[[61,7]]}},"keywords":{}}],["password",{"_index":1126,"title":{},"content":{"81":{"position":[[1386,9],[1396,8],[2679,9],[2689,8]]},"82":{"position":[[79,9],[1404,9],[2122,9],[3908,8]]},"83":{"position":[[1074,9]]},"184":{"position":[[397,8]]},"191":{"position":[[538,10],[1167,8]]},"192":{"position":[[1020,9],[1053,8]]},"201":{"position":[[168,9]]},"206":{"position":[[336,8]]},"236":{"position":[[2887,8]]},"237":{"position":[[307,8],[590,8]]},"238":{"position":[[921,8]]},"240":{"position":[[500,9],[1128,8]]},"247":{"position":[[236,9],[364,9]]},"344":{"position":[[118,9]]},"367":{"position":[[420,8]]},"370":{"position":[[557,9],[567,8],[576,8]]},"371":{"position":[[279,9]]},"402":{"position":[[344,9],[354,8],[363,8]]},"403":{"position":[[259,9]]},"429":{"position":[[859,9]]},"432":{"position":[[735,8],[744,9]]},"433":{"position":[[10,8],[292,9]]},"489":{"position":[[260,8]]},"570":{"position":[[137,9]]},"581":{"position":[[430,9]]},"615":{"position":[[106,9]]},"635":{"position":[[521,8]]},"637":{"position":[[180,8],[189,9]]},"662":{"position":[[260,8]]},"677":{"position":[[260,8]]},"683":{"position":[[124,8]]},"692":{"position":[[260,8]]},"757":{"position":[[257,9],[273,8],[282,8]]},"758":{"position":[[236,9]]},"770":{"position":[[257,9],[273,8],[282,8]]},"771":{"position":[[236,9]]},"782":{"position":[[250,9],[260,8],[269,8]]},"783":{"position":[[142,9]]},"797":{"position":[[257,9],[273,8],[282,8]]},"798":{"position":[[234,9]]},"812":{"position":[[257,9],[273,8],[282,8]]},"813":{"position":[[234,9]]},"828":{"position":[[257,9],[273,8],[282,8]]},"829":{"position":[[234,9]]},"840":{"position":[[2626,9]]},"842":{"position":[[1190,8],[1223,9]]},"867":{"position":[[222,9],[232,8],[241,8]]},"868":{"position":[[205,9]]},"879":{"position":[[357,8],[683,8],[696,8],[938,8],[947,8]]},"880":{"position":[[279,8],[304,9]]},"904":{"position":[[1481,8]]},"907":{"position":[[340,9],[350,8],[359,8]]},"908":{"position":[[280,9]]},"917":{"position":[[302,9],[343,8]]},"918":{"position":[[1773,8]]},"919":{"position":[[906,8]]},"923":{"position":[[340,9],[350,8],[359,8]]},"924":{"position":[[280,9]]},"931":{"position":[[1182,8]]},"934":{"position":[[340,9],[350,8],[359,8]]},"935":{"position":[[280,9]]},"943":{"position":[[616,8]]},"950":{"position":[[340,9],[350,8],[359,8]]},"951":{"position":[[280,9]]},"965":{"position":[[302,9],[343,8]]},"968":{"position":[[340,9],[350,8],[359,8]]},"969":{"position":[[280,9]]},"989":{"position":[[480,8]]},"1004":{"position":[[563,8]]},"1018":{"position":[[97,8]]},"1021":{"position":[[489,9],[499,8],[508,8],[549,8],[649,8]]},"1022":{"position":[[158,9]]},"1032":{"position":[[216,8],[517,8],[824,8]]},"1034":{"position":[[416,9],[426,8],[439,8]]},"1037":{"position":[[220,9]]},"1042":{"position":[[158,8],[226,8]]},"1043":{"position":[[822,8],[890,8]]},"1045":{"position":[[325,9],[335,8],[344,8]]},"1046":{"position":[[221,9]]},"1051":{"position":[[1084,8],[1152,8]]},"1053":{"position":[[325,9],[335,8],[344,8]]},"1054":{"position":[[221,9]]},"1059":{"position":[[873,8],[941,8]]},"1061":{"position":[[325,9],[335,8],[344,8]]},"1062":{"position":[[221,9]]},"1067":{"position":[[459,8]]},"1082":{"position":[[233,8]]},"1118":{"position":[[448,9],[663,11]]},"1138":{"position":[[446,9],[456,8],[465,8]]},"1139":{"position":[[161,9]]},"1151":{"position":[[258,9],[268,8],[277,8]]},"1152":{"position":[[226,9],[236,8]]},"1195":{"position":[[313,9]]},"1196":{"position":[[398,8],[407,8]]},"1197":{"position":[[304,9]]},"1206":{"position":[[515,9],[525,8],[543,9]]},"1207":{"position":[[162,9]]},"1227":{"position":[[299,8]]},"1244":{"position":[[32,8]]},"1253":{"position":[[323,9],[333,8],[342,8]]},"1254":{"position":[[182,9]]},"1267":{"position":[[312,9],[322,8],[331,8]]},"1270":{"position":[[164,9]]},"1285":{"position":[[265,9],[275,8],[284,8]]},"1287":{"position":[[155,9]]},"1292":{"position":[[5319,8]]},"1300":{"position":[[265,9],[275,8],[284,8]]},"1302":{"position":[[155,9]]},"1306":{"position":[[5319,8]]},"1313":{"position":[[256,9],[266,8],[275,8]]},"1314":{"position":[[158,9]]},"1324":{"position":[[265,9],[275,8],[284,8]]},"1326":{"position":[[155,9]]},"1329":{"position":[[5319,8]]},"1337":{"position":[[256,9],[266,8],[275,8]]},"1338":{"position":[[158,9]]},"1348":{"position":[[256,9],[266,8],[275,8]]},"1349":{"position":[[158,9]]},"1373":{"position":[[1001,8],[1073,8]]},"1374":{"position":[[1001,8],[1073,8]]},"1376":{"position":[[265,9],[275,8],[284,8]]},"1377":{"position":[[159,9]]},"1383":{"position":[[1115,8]]},"1386":{"position":[[931,8]]},"1387":{"position":[[10,8],[288,9]]},"1397":{"position":[[780,8],[852,8]]},"1398":{"position":[[779,8],[851,8]]},"1400":{"position":[[265,9],[275,8],[284,8]]},"1401":{"position":[[159,9]]},"1408":{"position":[[99,8],[171,8]]},"1409":{"position":[[763,8],[835,8]]},"1411":{"position":[[265,9],[275,8],[284,8]]},"1412":{"position":[[159,9]]},"1420":{"position":[[288,9],[298,8],[322,8]]},"1421":{"position":[[105,9],[115,8]]},"1427":{"position":[[197,9],[207,8],[216,8]]},"1428":{"position":[[199,9]]},"1461":{"position":[[3908,9]]}},"keywords":{}}],["password"",{"_index":4908,"title":{},"content":{"879":{"position":[[532,14]]}},"keywords":{}}],["password_lock",{"_index":6184,"title":{},"content":{"1292":{"position":[[5358,13]]},"1306":{"position":[[5358,13]]},"1329":{"position":[[5358,13]]}},"keywords":{}}],["password_sop",{"_index":1201,"title":{},"content":{"82":{"position":[[3834,14],[4346,14]]}},"keywords":{}}],["past",{"_index":872,"title":{},"content":{"58":{"position":[[184,5]]},"169":{"position":[[423,5],[1611,5]]},"172":{"position":[[161,7]]},"191":{"position":[[432,5]]},"210":{"position":[[1890,5]]},"236":{"position":[[1846,5]]},"240":{"position":[[399,5]]},"331":{"position":[[121,5]]},"340":{"position":[[471,5]]},"387":{"position":[[1297,5]]},"414":{"position":[[803,5]]},"479":{"position":[[335,5]]},"489":{"position":[[183,5]]},"548":{"position":[[1273,5]]},"659":{"position":[[96,5]]},"662":{"position":[[183,5]]},"677":{"position":[[183,5]]},"692":{"position":[[183,5]]},"1015":{"position":[[196,4]]},"1032":{"position":[[91,5]]},"1076":{"position":[[466,4]]},"1113":{"position":[[382,4]]},"1383":{"position":[[37,5]]},"1434":{"position":[[162,4]]},"1471":{"position":[[792,5]]}},"keywords":{}}],["pat",{"_index":3804,"title":{},"content":{"473":{"position":[[206,3]]},"527":{"position":[[205,3]]},"534":{"position":[[596,3]]},"535":{"position":[[205,3]]},"1188":{"position":[[565,3]]},"1189":{"position":[[231,3]]}},"keywords":{}}],["path",{"_index":120,"title":{"92":{"position":[[7,6]]}},"content":{"3":{"position":[[418,4],[604,4],[1092,4]]},"4":{"position":[[76,4]]},"58":{"position":[[306,5]]},"89":{"position":[[124,5]]},"92":{"position":[[146,4],[272,4],[372,5],[386,5],[600,4]]},"100":{"position":[[316,4]]},"103":{"position":[[503,5]]},"135":{"position":[[915,4]]},"169":{"position":[[545,5]]},"190":{"position":[[518,5]]},"275":{"position":[[862,4]]},"301":{"position":[[1077,4]]},"417":{"position":[[1246,4],[2272,4]]},"438":{"position":[[1762,4]]},"488":{"position":[[161,5],[172,4],[204,5],[385,5],[394,6],[470,4],[616,5],[730,4]]},"491":{"position":[[310,6],[321,5],[339,5],[427,5],[433,5]]},"492":{"position":[[376,5],[390,4]]},"502":{"position":[[66,4],[75,4],[284,4],[1598,4],[1607,4]]},"503":{"position":[[111,5]]},"545":{"position":[[1667,4]]},"565":{"position":[[126,5],[132,4],[137,4]]},"566":{"position":[[227,5]]},"590":{"position":[[847,4],[1096,5]]},"593":{"position":[[530,5],[536,4]]},"594":{"position":[[892,6],[1092,5],[1222,5],[1324,5],[1402,5]]},"657":{"position":[[610,5],[650,5]]},"659":{"position":[[318,5],[329,4],[361,5],[542,5],[551,6],[627,4],[773,5],[887,4]]},"664":{"position":[[331,6],[342,5],[360,5],[448,5],[454,5],[595,5],[683,5],[689,5]]},"665":{"position":[[376,5],[390,4]]},"676":{"position":[[161,5],[172,4],[204,5],[385,5],[394,6],[470,4],[616,5],[730,4]]},"679":{"position":[[310,6],[321,5],[339,5],[427,5],[433,5]]},"680":{"position":[[376,5],[390,4]]},"691":{"position":[[161,5],[172,4],[204,5],[385,5],[394,6],[470,4],[616,5],[730,4]]},"694":{"position":[[310,6],[321,5],[339,5],[427,5],[433,5]]},"695":{"position":[[376,5],[390,4]]},"1020":{"position":[[820,5],[864,4],[958,4],[1184,4],[1390,4]]},"1021":{"position":[[943,4],[1460,4],[2083,4]]},"1144":{"position":[[1301,4],[1310,4]]},"1145":{"position":[[287,5]]},"1146":{"position":[[468,4]]},"1151":{"position":[[1242,4]]},"1170":{"position":[[1226,4],[1235,4]]},"1171":{"position":[[291,5]]},"1173":{"position":[[480,4]]},"1179":{"position":[[614,4],[624,4]]},"1180":{"position":[[185,5]]},"1188":{"position":[[239,4],[249,4]]},"1197":{"position":[[59,4]]},"1207":{"position":[[284,4]]},"1213":{"position":[[978,4],[987,4]]},"1214":{"position":[[227,5]]},"1215":{"position":[[468,4]]},"1220":{"position":[[903,4],[912,4]]},"1221":{"position":[[231,5]]},"1223":{"position":[[480,4]]},"1240":{"position":[[72,4],[90,4]]},"1260":{"position":[[790,4]]},"1292":{"position":[[5409,4]]},"1306":{"position":[[5409,4]]},"1329":{"position":[[5409,4]]},"1357":{"position":[[134,4]]},"1379":{"position":[[1643,4]]},"1403":{"position":[[1643,4]]},"1414":{"position":[[1643,4]]},"1420":{"position":[[567,4]]},"1461":{"position":[[1605,4],[3647,5],[5264,4],[5284,4]]}},"keywords":{}}],["path/to//connector",{"_index":6727,"title":{},"content":{"1480":{"position":[[592,18]]}},"keywords":{}}],["path/to/another/migration.sql",{"_index":1439,"title":{},"content":{"100":{"position":[[473,32]]}},"keywords":{}}],["path/to/connector",{"_index":843,"title":{},"content":{"56":{"position":[[1299,17]]},"120":{"position":[[658,17]]}},"keywords":{}}],["path/to/key",{"_index":2457,"title":{},"content":{"221":{"position":[[1397,12]]},"222":{"position":[[642,12]]},"223":{"position":[[608,12]]},"224":{"position":[[661,12]]},"1298":{"position":[[608,12]]},"1322":{"position":[[642,12]]},"1335":{"position":[[642,12]]},"1346":{"position":[[608,12]]}},"keywords":{}}],["path/to/my/derivation.flow.yaml",{"_index":1474,"title":{},"content":{"103":{"position":[[421,31]]}},"keywords":{}}],["path/to/other/migration.sql",{"_index":1339,"title":{},"content":{"94":{"position":[[698,30]]}},"keywords":{}}],["path/to/source/catalog.flow.yaml",{"_index":1305,"title":{},"content":{"89":{"position":[[141,32],[266,32]]}},"keywords":{}}],["path/to/your/credentials.json",{"_index":4137,"title":{},"content":{"566":{"position":[[127,30]]}},"keywords":{}}],["patselect",{"_index":4014,"title":{},"content":{"526":{"position":[[42,9]]}},"keywords":{}}],["pattern",{"_index":1355,"title":{"1436":{"position":[[22,9]]}},"content":{"94":{"position":[[2706,8]]},"110":{"position":[[816,7]]},"115":{"position":[[1595,7]]},"133":{"position":[[221,7]]},"138":{"position":[[768,7]]},"142":{"position":[[739,7]]},"164":{"position":[[918,8]]},"268":{"position":[[265,7],[580,7]]},"326":{"position":[[1544,7]]},"590":{"position":[[859,7]]},"594":{"position":[[951,7]]},"1140":{"position":[[834,7]]},"1316":{"position":[[834,7]]},"1340":{"position":[[834,7]]},"1351":{"position":[[834,7]]},"1356":{"position":[[689,9]]},"1431":{"position":[[857,7]]},"1436":{"position":[[39,8],[84,7]]},"1437":{"position":[[9,8],[211,7]]},"1438":{"position":[[9,8],[248,7]]},"1439":{"position":[[9,7],[472,8],[931,7],[1310,7]]},"1442":{"position":[[1245,7]]},"1444":{"position":[[376,7],[519,8]]}},"keywords":{}}],["paus",{"_index":735,"title":{},"content":{"41":{"position":[[531,6]]},"106":{"position":[[711,5]]},"138":{"position":[[336,5]]},"141":{"position":[[646,5]]},"142":{"position":[[449,5]]},"209":{"position":[[1091,5],[1156,5],[1386,5]]},"230":{"position":[[297,5]]},"240":{"position":[[3402,5]]},"332":{"position":[[369,6]]},"764":{"position":[[243,6]]},"777":{"position":[[243,6]]},"785":{"position":[[361,6],[582,5]]},"804":{"position":[[241,6]]},"819":{"position":[[241,6]]},"835":{"position":[[241,6]]},"1183":{"position":[[645,5]]}},"keywords":{}}],["pay",{"_index":2999,"title":{},"content":{"296":{"position":[[1754,3]]},"480":{"position":[[303,4]]}},"keywords":{}}],["payload",{"_index":4409,"title":{},"content":{"661":{"position":[[371,7]]}},"keywords":{}}],["payment",{"_index":6587,"title":{},"content":{"1456":{"position":[[363,7],[387,7]]}},"keywords":{}}],["payment_int",{"_index":5319,"title":{},"content":{"1078":{"position":[[1387,15]]}},"keywords":{}}],["paymentsinvoicesinvoic",{"_index":4341,"title":{},"content":{"628":{"position":[[124,23]]}},"keywords":{}}],["payout",{"_index":5321,"title":{},"content":{"1078":{"position":[[1478,7]]}},"keywords":{}}],["paypal",{"_index":3370,"title":{"881":{"position":[[0,6]]}},"content":{"364":{"position":[[2832,6],[2897,6]]},"882":{"position":[[56,6]]},"883":{"position":[[5,6],[77,6]]},"884":{"position":[[250,6]]},"885":{"position":[[103,6],[204,6],[673,6]]},"886":{"position":[[90,6]]}},"keywords":{}}],["peek",{"_index":2583,"title":{},"content":{"238":{"position":[[810,7]]},"239":{"position":[[1419,4]]}},"keywords":{}}],["pem",{"_index":2450,"title":{},"content":{"221":{"position":[[1028,3],[1242,3],[1258,3],[1390,3]]},"222":{"position":[[273,3],[487,3],[503,3],[635,3]]},"223":{"position":[[239,3],[453,3],[469,3],[601,3],[759,3]]},"224":{"position":[[292,3],[506,3],[522,3],[654,3]]},"1298":{"position":[[239,3],[453,3],[469,3],[601,3],[759,3]]},"1322":{"position":[[273,3],[487,3],[503,3],[635,3]]},"1335":{"position":[[273,3],[487,3],[503,3],[635,3]]},"1346":{"position":[[239,3],[453,3],[469,3],[601,3],[759,3]]},"1384":{"position":[[322,3]]}},"keywords":{}}],["pendo",{"_index":3309,"title":{"887":{"position":[[0,5]]}},"content":{"363":{"position":[[1844,5]]},"888":{"position":[[56,5]]},"889":{"position":[[3,5],[56,5]]},"890":{"position":[[251,5]]},"891":{"position":[[99,5],[408,5]]}},"keywords":{}}],["pendo:dev",{"_index":3310,"title":{},"content":{"363":{"position":[[1896,9]]},"892":{"position":[[89,9]]}},"keywords":{}}],["per",{"_index":829,"title":{},"content":{"56":{"position":[[50,3]]},"69":{"position":[[53,3]]},"101":{"position":[[392,3]]},"120":{"position":[[58,3]]},"122":{"position":[[1970,3]]},"125":{"position":[[988,3]]},"146":{"position":[[163,3]]},"149":{"position":[[172,3]]},"152":{"position":[[179,3]]},"174":{"position":[[450,3]]},"180":{"position":[[648,3]]},"198":{"position":[[961,3],[976,3]]},"290":{"position":[[1080,3]]},"319":{"position":[[1424,3],[1494,3]]},"368":{"position":[[462,3]]},"419":{"position":[[1205,3]]},"440":{"position":[[1221,3]]},"479":{"position":[[824,3]]},"509":{"position":[[190,3],[224,3],[308,3],[319,3],[327,3]]},"517":{"position":[[3563,3]]},"547":{"position":[[1207,3]]},"755":{"position":[[462,3]]},"768":{"position":[[462,3]]},"789":{"position":[[768,3],[828,3],[1061,3]]},"795":{"position":[[460,3]]},"810":{"position":[[460,3]]},"826":{"position":[[460,3]]},"870":{"position":[[413,3],[938,3]]},"900":{"position":[[138,3],[146,3],[214,3],[225,3],[234,3],[266,3],[277,3],[286,3]]},"905":{"position":[[465,3]]},"920":{"position":[[465,3]]},"932":{"position":[[465,3]]},"948":{"position":[[465,3]]},"966":{"position":[[465,3]]},"1023":{"position":[[1188,3]]},"1068":{"position":[[49,3],[65,3]]},"1136":{"position":[[158,3]]},"1140":{"position":[[879,3]]},"1149":{"position":[[287,3]]},"1156":{"position":[[79,3]]},"1182":{"position":[[565,3]]},"1191":{"position":[[569,3]]},"1234":{"position":[[235,3]]},"1243":{"position":[[360,3]]},"1262":{"position":[[569,3]]},"1281":{"position":[[197,3]]},"1289":{"position":[[449,3]]},"1295":{"position":[[197,3]]},"1309":{"position":[[158,3]]},"1316":{"position":[[879,3]]},"1319":{"position":[[197,3]]},"1321":{"position":[[229,3]]},"1332":{"position":[[158,3]]},"1340":{"position":[[879,3]]},"1343":{"position":[[158,3]]},"1351":{"position":[[879,3]]},"1372":{"position":[[197,3]]},"1388":{"position":[[144,3]]},"1389":{"position":[[567,3]]},"1396":{"position":[[197,3]]},"1406":{"position":[[197,3]]},"1426":{"position":[[302,3]]},"1429":{"position":[[184,3]]},"1431":{"position":[[902,3]]},"1437":{"position":[[183,3]]},"1459":{"position":[[945,3]]}},"keywords":{}}],["perameterto",{"_index":4599,"title":{},"content":{"753":{"position":[[694,11]]},"793":{"position":[[654,11]]}},"keywords":{}}],["percent",{"_index":3887,"title":{},"content":{"491":{"position":[[468,7]]},"664":{"position":[[489,7],[724,7]]},"679":{"position":[[468,7]]},"694":{"position":[[468,7]]},"1140":{"position":[[914,7]]},"1316":{"position":[[914,7]]},"1340":{"position":[[914,7]]},"1351":{"position":[[914,7]]},"1379":{"position":[[1696,7]]},"1403":{"position":[[1696,7]]},"1414":{"position":[[1696,7]]},"1431":{"position":[[937,7]]}},"keywords":{}}],["percent_rank",{"_index":5556,"title":{},"content":{"1140":{"position":[[1053,12]]},"1292":{"position":[[5460,12]]},"1306":{"position":[[5460,12]]},"1316":{"position":[[1053,12]]},"1329":{"position":[[5460,12]]},"1340":{"position":[[1053,12]]},"1351":{"position":[[1053,12]]},"1379":{"position":[[1755,12]]},"1403":{"position":[[1755,12]]},"1414":{"position":[[1755,12]]},"1431":{"position":[[1076,12]]}},"keywords":{}}],["percentag",{"_index":3624,"title":{},"content":{"419":{"position":[[1944,10]]},"441":{"position":[[553,10]]},"504":{"position":[[1573,10]]},"547":{"position":[[1946,10]]},"639":{"position":[[1571,10]]},"1023":{"position":[[1927,10]]}},"keywords":{}}],["percentile_co",{"_index":6316,"title":{},"content":{"1379":{"position":[[1819,13]]},"1403":{"position":[[1819,13]]},"1414":{"position":[[1819,13]]}},"keywords":{}}],["percentile_cont",{"_index":5551,"title":{},"content":{"1140":{"position":[[948,15]]},"1316":{"position":[[948,15]]},"1340":{"position":[[948,15]]},"1351":{"position":[[948,15]]},"1431":{"position":[[971,15]]}},"keywords":{}}],["percentile_di",{"_index":6318,"title":{},"content":{"1379":{"position":[[1885,13]]},"1403":{"position":[[1885,13]]},"1414":{"position":[[1885,13]]}},"keywords":{}}],["percentile_disc",{"_index":5555,"title":{},"content":{"1140":{"position":[[1010,15]]},"1316":{"position":[[1010,15]]},"1340":{"position":[[1010,15]]},"1351":{"position":[[1010,15]]},"1431":{"position":[[1033,15]]}},"keywords":{}}],["perfectli",{"_index":2496,"title":{},"content":{"234":{"position":[[588,9]]},"240":{"position":[[4175,9]]},"321":{"position":[[1145,9]]}},"keywords":{}}],["perform",{"_index":546,"title":{"101":{"position":[[0,12]]},"124":{"position":[[21,12]]},"355":{"position":[[0,11]]},"368":{"position":[[14,11]]},"410":{"position":[[0,11]]},"576":{"position":[[0,11]]},"587":{"position":[[0,11]]},"755":{"position":[[14,11]]},"768":{"position":[[14,11]]},"795":{"position":[[14,11]]},"810":{"position":[[14,11]]},"826":{"position":[[14,11]]},"900":{"position":[[0,11]]},"905":{"position":[[14,11]]},"920":{"position":[[14,11]]},"932":{"position":[[14,11]]},"948":{"position":[[14,11]]},"966":{"position":[[14,11]]},"1068":{"position":[[0,11]]},"1156":{"position":[[0,11]]},"1390":{"position":[[0,11]]},"1391":{"position":[[11,11]]}},"content":{"20":{"position":[[814,10],[966,8]]},"34":{"position":[[697,7]]},"56":{"position":[[228,8]]},"60":{"position":[[978,7]]},"62":{"position":[[581,8]]},"67":{"position":[[1570,10]]},"72":{"position":[[212,8]]},"74":{"position":[[141,8],[222,11]]},"101":{"position":[[15,11],[224,10],[677,12]]},"107":{"position":[[2507,7]]},"112":{"position":[[933,7]]},"115":{"position":[[723,11]]},"125":{"position":[[1272,7]]},"135":{"position":[[198,7],[779,7]]},"158":{"position":[[154,7]]},"162":{"position":[[504,7],[862,7]]},"163":{"position":[[473,8]]},"164":{"position":[[1172,7]]},"180":{"position":[[322,7],[964,12]]},"182":{"position":[[312,12],[338,7]]},"184":{"position":[[112,12]]},"185":{"position":[[149,12]]},"206":{"position":[[580,9]]},"275":{"position":[[55,9]]},"278":{"position":[[1622,7]]},"281":{"position":[[3044,11]]},"307":{"position":[[3407,9]]},"309":{"position":[[3731,9]]},"319":{"position":[[674,8]]},"322":{"position":[[1288,7]]},"324":{"position":[[1074,7]]},"333":{"position":[[408,11]]},"339":{"position":[[124,7]]},"373":{"position":[[499,7]]},"410":{"position":[[24,11]]},"443":{"position":[[62,11],[152,11],[230,11],[342,11],[423,11]]},"483":{"position":[[445,8]]},"660":{"position":[[633,10]]},"760":{"position":[[819,7]]},"773":{"position":[[819,7]]},"785":{"position":[[6,10]]},"800":{"position":[[819,7]]},"815":{"position":[[819,7]]},"831":{"position":[[819,7]]},"909":{"position":[[58,11],[1227,7]]},"910":{"position":[[316,11]]},"925":{"position":[[58,11],[1227,7]]},"926":{"position":[[316,11]]},"936":{"position":[[58,11],[1227,7]]},"937":{"position":[[316,11]]},"952":{"position":[[58,11],[1227,7]]},"953":{"position":[[316,11]]},"970":{"position":[[58,11],[1227,7]]},"971":{"position":[[316,11]]},"989":{"position":[[910,7]]},"1004":{"position":[[993,7]]},"1085":{"position":[[1071,11]]},"1149":{"position":[[447,11]]},"1151":{"position":[[1127,11]]},"1156":{"position":[[10,11]]},"1165":{"position":[[25,12],[135,7]]},"1182":{"position":[[362,11]]},"1191":{"position":[[364,11]]},"1243":{"position":[[294,11]]},"1262":{"position":[[364,11]]},"1282":{"position":[[359,12]]},"1288":{"position":[[333,12]]},"1310":{"position":[[374,12]]},"1358":{"position":[[103,8]]},"1389":{"position":[[363,11]]},"1391":{"position":[[129,11],[481,12],[580,7]]},"1392":{"position":[[116,11]]},"1434":{"position":[[804,7]]},"1452":{"position":[[2973,9]]},"1467":{"position":[[207,8]]}},"keywords":{}}],["performance_schema",{"_index":4624,"title":{},"content":{"757":{"position":[[2445,18]]},"770":{"position":[[2445,18]]},"797":{"position":[[2444,19]]},"812":{"position":[[2444,19]]},"828":{"position":[[2444,19]]}},"keywords":{}}],["performingvector",{"_index":5949,"title":{},"content":{"1276":{"position":[[88,16]]}},"keywords":{}}],["perhap",{"_index":1591,"title":{},"content":{"112":{"position":[[51,7]]},"189":{"position":[[371,7],[628,7]]},"324":{"position":[[134,7]]},"821":{"position":[[440,7],[544,7]]},"912":{"position":[[451,7],[560,7]]},"1461":{"position":[[692,7]]}},"keywords":{}}],["period",{"_index":107,"title":{},"content":{"3":{"position":[[202,13]]},"55":{"position":[[23,8],[122,12]]},"56":{"position":[[237,8]]},"110":{"position":[[783,8]]},"121":{"position":[[1247,12]]},"154":{"position":[[1697,7]]},"164":{"position":[[1236,12]]},"209":{"position":[[1650,7],[1690,6]]},"373":{"position":[[862,6]]},"480":{"position":[[28,12]]},"556":{"position":[[320,6]]},"560":{"position":[[149,7]]},"747":{"position":[[222,6],[285,6]]},"750":{"position":[[144,6]]},"764":{"position":[[53,6],[140,6],[786,6]]},"766":{"position":[[144,6]]},"767":{"position":[[1247,6],[1570,7]]},"777":{"position":[[53,6],[140,6],[786,6]]},"785":{"position":[[902,6]]},"789":{"position":[[162,6]]},"792":{"position":[[1543,6]]},"804":{"position":[[53,6],[138,6],[784,6]]},"807":{"position":[[162,6]]},"819":{"position":[[53,6],[138,6],[784,6]]},"821":{"position":[[93,12],[778,12]]},"823":{"position":[[162,6]]},"824":{"position":[[1313,6],[1634,7]]},"835":{"position":[[53,6],[138,6],[784,6]]},"869":{"position":[[1169,6]]},"912":{"position":[[101,12],[794,12]]},"945":{"position":[[941,6]]},"1140":{"position":[[1098,6]]},"1316":{"position":[[1098,6]]},"1340":{"position":[[1098,6]]},"1351":{"position":[[1098,6]]},"1356":{"position":[[751,7],[1228,6]]},"1431":{"position":[[1121,6]]},"1448":{"position":[[24,13]]},"1452":{"position":[[454,7],[2866,7],[2941,7]]},"1471":{"position":[[1062,7]]}},"keywords":{}}],["periodfor",{"_index":4691,"title":{},"content":{"785":{"position":[[810,9]]}},"keywords":{}}],["permalink",{"_index":5347,"title":{},"content":{"1089":{"position":[[98,10],[126,10]]}},"keywords":{}}],["perman",{"_index":1159,"title":{},"content":{"82":{"position":[[984,11]]},"117":{"position":[[633,12]]},"138":{"position":[[392,11]]},"141":{"position":[[702,11]]},"142":{"position":[[505,11]]},"411":{"position":[[258,9]]},"764":{"position":[[459,11]]},"777":{"position":[[459,11]]},"804":{"position":[[457,11]]},"819":{"position":[[457,11]]},"835":{"position":[[457,11]]}},"keywords":{}}],["permiss",{"_index":731,"title":{},"content":{"41":{"position":[[471,11]]},"70":{"position":[[313,11]]},"135":{"position":[[538,11]]},"160":{"position":[[26,10]]},"162":{"position":[[418,10]]},"165":{"position":[[1244,11]]},"192":{"position":[[1458,11]]},"202":{"position":[[202,11],[332,11],[426,12]]},"207":{"position":[[1144,11]]},"217":{"position":[[1930,11]]},"218":{"position":[[1397,10]]},"237":{"position":[[423,11],[970,12]]},"259":{"position":[[896,10],[2477,10]]},"301":{"position":[[1410,10]]},"366":{"position":[[719,12],[1051,12]]},"367":{"position":[[284,12]]},"390":{"position":[[192,12],[380,11]]},"395":{"position":[[352,12],[549,11]]},"400":{"position":[[152,12]]},"402":{"position":[[315,12]]},"406":{"position":[[323,10],[441,11]]},"413":{"position":[[321,12]]},"477":{"position":[[183,11],[362,10],[462,12]]},"478":{"position":[[101,11]]},"515":{"position":[[650,11],[874,10],[898,10]]},"562":{"position":[[134,11]]},"571":{"position":[[882,11],[932,13]]},"582":{"position":[[499,12]]},"598":{"position":[[144,11],[326,10],[426,12]]},"599":{"position":[[101,11]]},"623":{"position":[[81,11]]},"670":{"position":[[444,12]]},"683":{"position":[[166,11]]},"698":{"position":[[101,12]]},"709":{"position":[[551,10]]},"723":{"position":[[104,11],[238,12]]},"750":{"position":[[766,12]]},"752":{"position":[[369,11],[481,10]]},"753":{"position":[[1025,11],[1137,10]]},"766":{"position":[[766,12]]},"767":{"position":[[1787,12]]},"789":{"position":[[1167,12]]},"791":{"position":[[322,11],[434,10]]},"792":{"position":[[1727,12]]},"793":{"position":[[996,11],[1108,10]]},"807":{"position":[[754,12]]},"808":{"position":[[942,11],[1054,10]]},"823":{"position":[[754,12]]},"824":{"position":[[1849,12]]},"839":{"position":[[54,11]]},"840":{"position":[[1021,11],[2440,11]]},"847":{"position":[[375,11]]},"848":{"position":[[54,11]]},"849":{"position":[[1736,11],[1821,11],[1924,11],[2004,13],[2032,11],[3580,11]]},"864":{"position":[[84,10]]},"876":{"position":[[84,10]]},"903":{"position":[[745,12],[1077,12]]},"904":{"position":[[1388,12]]},"915":{"position":[[745,12],[1077,12]]},"917":{"position":[[202,11],[870,11]]},"918":{"position":[[1680,12]]},"919":{"position":[[862,12],[1395,11]]},"930":{"position":[[745,12],[1077,12]]},"931":{"position":[[1045,12]]},"963":{"position":[[899,12],[1231,12]]},"965":{"position":[[202,11],[870,11]]},"989":{"position":[[275,12]]},"1004":{"position":[[358,12]]},"1026":{"position":[[35,10]]},"1032":{"position":[[614,11]]},"1040":{"position":[[697,11],[879,11]]},"1042":{"position":[[314,11],[664,12]]},"1043":{"position":[[978,11],[1328,12]]},"1050":{"position":[[697,11],[879,11]]},"1051":{"position":[[1240,11],[1590,12]]},"1058":{"position":[[697,11],[879,11]]},"1059":{"position":[[1033,11],[1383,12]]},"1089":{"position":[[246,11]]},"1105":{"position":[[24,10]]},"1122":{"position":[[176,11]]},"1142":{"position":[[177,10]]},"1149":{"position":[[195,11]]},"1160":{"position":[[231,11]]},"1168":{"position":[[177,10]]},"1204":{"position":[[385,11]]}},"keywords":{}}],["permissions"",{"_index":4819,"title":{},"content":{"849":{"position":[[1687,18]]}},"keywords":{}}],["permissions.gr",{"_index":1751,"title":{},"content":{"135":{"position":[[517,20]]}},"keywords":{}}],["permissions.slack",{"_index":6277,"title":{},"content":{"1361":{"position":[[99,17]]}},"keywords":{}}],["permissionsus",{"_index":4334,"title":{},"content":{"622":{"position":[[353,15]]}},"keywords":{}}],["permit",{"_index":350,"title":{},"content":{"11":{"position":[[1890,6]]},"83":{"position":[[195,9]]},"89":{"position":[[328,9]]},"221":{"position":[[1978,9]]},"767":{"position":[[2302,8]]},"792":{"position":[[2283,8]]},"794":{"position":[[540,9]]},"809":{"position":[[540,9]]},"824":{"position":[[2414,8]]},"825":{"position":[[540,9]]},"989":{"position":[[1045,9]]},"1004":{"position":[[1128,9]]},"1286":{"position":[[597,9]]},"1301":{"position":[[597,9]]},"1325":{"position":[[597,9]]}},"keywords":{}}],["permitted.prior",{"_index":4714,"title":{},"content":{"794":{"position":[[462,15]]},"809":{"position":[[462,15]]},"825":{"position":[[462,15]]},"1286":{"position":[[519,15]]},"1301":{"position":[[519,15]]},"1325":{"position":[[519,15]]}},"keywords":{}}],["permut",{"_index":5564,"title":{},"content":{"1140":{"position":[[1145,7]]},"1316":{"position":[[1145,7]]},"1340":{"position":[[1145,7]]},"1351":{"position":[[1145,7]]},"1431":{"position":[[1168,7]]}},"keywords":{}}],["perpetu",{"_index":2266,"title":{},"content":{"209":{"position":[[587,11]]}},"keywords":{}}],["persist",{"_index":40,"title":{},"content":{"1":{"position":[[483,10]]},"96":{"position":[[737,11]]},"100":{"position":[[40,10],[1252,11]]},"104":{"position":[[135,10]]},"232":{"position":[[518,7]]},"278":{"position":[[441,11]]},"411":{"position":[[181,9]]},"752":{"position":[[947,7],[1068,7]]},"791":{"position":[[981,7],[1102,7]]},"1291":{"position":[[140,9]]},"1292":{"position":[[5515,7]]},"1305":{"position":[[140,9]]},"1306":{"position":[[5515,7]]},"1328":{"position":[[140,9]]},"1329":{"position":[[5515,7]]},"1437":{"position":[[61,8]]},"1438":{"position":[[45,8]]},"1448":{"position":[[867,8]]}},"keywords":{}}],["persist_onli",{"_index":6193,"title":{},"content":{"1292":{"position":[[5566,12]]},"1306":{"position":[[5566,12]]},"1329":{"position":[[5566,12]]}},"keywords":{}}],["person",{"_index":3274,"title":{"524":{"position":[[55,8]]},"532":{"position":[[55,8]]}},"content":{"359":{"position":[[184,8],[210,8]]},"522":{"position":[[123,8]]},"524":{"position":[[73,8]]},"530":{"position":[[123,8]]},"531":{"position":[[179,8]]},"532":{"position":[[129,8]]},"534":{"position":[[693,8]]},"631":{"position":[[150,8]]},"1188":{"position":[[573,8],[651,8]]}},"keywords":{}}],["personal_access_token",{"_index":4018,"title":{},"content":{"527":{"position":[[221,22]]},"535":{"position":[[221,22]]},"1189":{"position":[[235,22]]}},"keywords":{}}],["perspect",{"_index":2596,"title":{},"content":{"239":{"position":[[1995,12]]},"271":{"position":[[345,12]]}},"keywords":{}}],["pertain",{"_index":2118,"title":{},"content":{"190":{"position":[[575,10]]}},"keywords":{}}],["pertin",{"_index":6521,"title":{},"content":{"1448":{"position":[[1120,9]]}},"keywords":{}}],["pg",{"_index":3044,"title":{},"content":{"307":{"position":[[1140,2],[1990,2]]}},"keywords":{}}],["pg_catalog",{"_index":5037,"title":{},"content":{"917":{"position":[[730,10],[1010,12]]},"919":{"position":[[1261,10],[1535,12]]},"965":{"position":[[730,10],[1010,12]]}},"keywords":{}}],["pg_catalog.pg_attribut",{"_index":5044,"title":{},"content":{"919":{"position":[[1921,24]]}},"keywords":{}}],["pg_catalog.pg_class",{"_index":5045,"title":{},"content":{"919":{"position":[[1946,20]]}},"keywords":{}}],["pg_catalog.pg_index",{"_index":5046,"title":{},"content":{"919":{"position":[[1967,20]]}},"keywords":{}}],["pg_catalog.pg_namespac",{"_index":5047,"title":{},"content":{"919":{"position":[[1988,23]]}},"keywords":{}}],["pg_drop_replication_slot('flow_slot",{"_index":5060,"title":{},"content":{"922":{"position":[[1889,38]]}},"keywords":{}}],["pg_isreadi",{"_index":2517,"title":{},"content":{"236":{"position":[[942,11]]}},"keywords":{}}],["pg_read_all_data",{"_index":2560,"title":{},"content":{"236":{"position":[[2924,16]]},"237":{"position":[[635,16],[684,16],[844,16]]},"917":{"position":[[445,16]]},"919":{"position":[[980,16]]},"965":{"position":[[445,16]]}},"keywords":{}}],["pg_replication_slot",{"_index":5059,"title":{},"content":{"922":{"position":[[1820,20]]}},"keywords":{}}],["pga",{"_index":4895,"title":{},"content":{"870":{"position":[[567,3]]}},"keywords":{}}],["pga_aggregate_limit",{"_index":4896,"title":{},"content":{"870":{"position":[[607,19]]}},"keywords":{}}],["phase",{"_index":2594,"title":{"1441":{"position":[[9,7]]}},"content":{"239":{"position":[[1325,5]]},"254":{"position":[[3768,6]]},"296":{"position":[[6671,5]]},"1292":{"position":[[5613,5]]},"1306":{"position":[[5613,5]]},"1329":{"position":[[5613,5]]},"1434":{"position":[[1130,6],[1735,6],[2218,6]]},"1437":{"position":[[460,5]]},"1438":{"position":[[131,7]]},"1439":{"position":[[656,6]]},"1440":{"position":[[261,6]]},"1442":{"position":[[1318,5]]},"1443":{"position":[[1048,6]]},"1444":{"position":[[1056,6]]}},"keywords":{}}],["phone",{"_index":500,"title":{},"content":{"17":{"position":[[673,6]]},"295":{"position":[[284,5]]},"296":{"position":[[496,6],[1467,6],[4681,7],[5050,7],[6456,6]]},"1110":{"position":[[115,5],[147,5],[176,5],[206,5],[337,5],[369,5]]}},"keywords":{}}],["physic",{"_index":63,"title":{"2":{"position":[[0,8]]}},"content":{"2":{"position":[[71,8],[118,8],[215,8],[506,8],[683,8]]},"3":{"position":[[675,8]]},"16":{"position":[[657,8],[1261,8],[1375,8]]},"48":{"position":[[79,8]]},"101":{"position":[[648,8]]},"107":{"position":[[303,8]]},"320":{"position":[[1802,8]]},"1391":{"position":[[193,10],[858,10]]}},"keywords":{}}],["pick",{"_index":4615,"title":{},"content":{"757":{"position":[[1355,4]]},"770":{"position":[[1355,4]]},"797":{"position":[[1355,4]]},"812":{"position":[[1355,4]]},"828":{"position":[[1355,4]]},"859":{"position":[[272,4]]},"867":{"position":[[2063,4]]}},"keywords":{}}],["picker",{"_index":6726,"title":{},"content":{"1479":{"position":[[446,6]]}},"keywords":{}}],["piec",{"_index":1836,"title":{},"content":{"146":{"position":[[365,6]]},"149":{"position":[[374,6]]},"152":{"position":[[381,6]]},"183":{"position":[[3374,6]]},"281":{"position":[[1645,5]]},"329":{"position":[[225,5]]}},"keywords":{}}],["pikachu"",{"_index":1729,"title":{},"content":{"129":{"position":[[1271,13]]},"130":{"position":[[335,13]]}},"keywords":{}}],["pinecon",{"_index":5427,"title":{"1273":{"position":[[0,8]]},"1276":{"position":[[0,8]]}},"content":{"1120":{"position":[[1521,8]]},"1274":{"position":[[40,8],[147,8]]},"1276":{"position":[[1,8],[288,8],[307,8]]},"1277":{"position":[[67,8],[82,8],[233,8],[276,8],[351,8],[368,8],[1053,8],[1084,8]]},"1279":{"position":[[54,8],[430,8]]}},"keywords":{}}],["pinecone:dev",{"_index":5428,"title":{},"content":{"1120":{"position":[[1581,12]]}},"keywords":{}}],["pinecone:dev"",{"_index":5958,"title":{},"content":{"1278":{"position":[[104,18]]}},"keywords":{}}],["pineconeapikey",{"_index":5952,"title":{},"content":{"1277":{"position":[[335,15]]},"1278":{"position":[[178,15]]}},"keywords":{}}],["pinterest",{"_index":4945,"title":{"893":{"position":[[0,9]]}},"content":{"894":{"position":[[15,9],[85,9]]},"895":{"position":[[38,9],[332,9],[511,9],[590,9]]},"896":{"position":[[250,9]]},"897":{"position":[[326,9]]},"899":{"position":[[5,9]]},"900":{"position":[[5,9],[373,9]]}},"keywords":{}}],["pipe",{"_index":3144,"title":{},"content":{"321":{"position":[[2157,6]]}},"keywords":{}}],["pipelin",{"_index":1930,"title":{"329":{"position":[[17,10]]}},"content":{"163":{"position":[[1001,10]]},"198":{"position":[[1132,9]]},"212":{"position":[[80,8]]},"232":{"position":[[48,8],[183,8],[321,8],[777,8]]},"240":{"position":[[4341,9]]},"241":{"position":[[54,8]]},"243":{"position":[[80,8]]},"295":{"position":[[186,8]]},"319":{"position":[[513,8]]},"324":{"position":[[871,8]]},"329":{"position":[[44,9]]},"330":{"position":[[314,10]]},"331":{"position":[[26,9]]},"332":{"position":[[87,10],[380,9]]},"649":{"position":[[493,9]]},"1434":{"position":[[1061,9]]},"1442":{"position":[[1070,8]]},"1443":{"position":[[719,9]]}},"keywords":{}}],["pipelinesdealsemail",{"_index":4384,"title":{},"content":{"649":{"position":[[266,19]]}},"keywords":{}}],["pivot",{"_index":85,"title":{},"content":{"2":{"position":[[436,5]]},"16":{"position":[[1242,5]]},"1379":{"position":[[1931,5]]},"1403":{"position":[[1931,5]]},"1414":{"position":[[1931,5]]}},"keywords":{}}],["pkcs8",{"_index":6368,"title":{},"content":{"1384":{"position":[[301,5]]}},"keywords":{}}],["place",{"_index":938,"title":{},"content":{"62":{"position":[[470,5]]},"82":{"position":[[1700,6],[1752,5],[4039,5]]},"121":{"position":[[1838,5]]},"183":{"position":[[3406,6]]},"240":{"position":[[3733,6]]},"267":{"position":[[545,5]]},"281":{"position":[[400,5]]},"307":{"position":[[2700,6]]},"310":{"position":[[399,6]]},"314":{"position":[[3006,6]]},"323":{"position":[[73,5]]},"329":{"position":[[993,6]]},"760":{"position":[[157,5],[672,5]]},"773":{"position":[[157,5],[672,5]]},"800":{"position":[[157,5],[672,5]]},"815":{"position":[[157,5],[672,5]]},"831":{"position":[[157,5],[672,5]]},"840":{"position":[[849,6],[2372,6]]},"849":{"position":[[1324,6],[3512,6]]},"1140":{"position":[[1183,7]]},"1316":{"position":[[1183,7]]},"1340":{"position":[[1183,7]]},"1351":{"position":[[1183,7]]},"1431":{"position":[[1206,7]]}},"keywords":{}}],["placehold",{"_index":1424,"title":{},"content":{"99":{"position":[[154,12]]},"165":{"position":[[1873,11],[1949,11]]},"183":{"position":[[1519,11]]},"267":{"position":[[1538,11]]}},"keywords":{}}],["plain",{"_index":670,"title":{},"content":{"34":{"position":[[280,5]]},"96":{"position":[[40,5]]},"250":{"position":[[360,8]]},"1286":{"position":[[1662,5]]},"1301":{"position":[[1498,5]]},"1325":{"position":[[1662,5]]}},"keywords":{}}],["plainsasl",{"_index":2639,"title":{},"content":{"247":{"position":[[209,9]]},"1118":{"position":[[421,9]]}},"keywords":{}}],["plaintext",{"_index":1232,"title":{},"content":{"83":{"position":[[1334,10]]},"429":{"position":[[667,9]]}},"keywords":{}}],["plan",{"_index":1755,"title":{},"content":{"135":{"position":[[771,4]]},"189":{"position":[[383,4],[552,4]]},"326":{"position":[[106,5]]},"375":{"position":[[127,5],[217,5],[274,4]]},"377":{"position":[[543,4],[581,5],[1388,5]]},"379":{"position":[[257,7],[778,4],[1129,4]]},"496":{"position":[[219,4]]},"603":{"position":[[165,7]]},"1067":{"position":[[181,5]]},"1078":{"position":[[1554,5]]},"1165":{"position":[[218,9]]},"1243":{"position":[[481,4]]},"1370":{"position":[[714,4]]},"1379":{"position":[[1977,4]]},"1403":{"position":[[1977,4]]},"1414":{"position":[[1977,4]]}},"keywords":{}}],["platform",{"_index":272,"title":{"788":{"position":[[10,10]]},"902":{"position":[[23,10]]},"914":{"position":[[23,10]]},"929":{"position":[[23,10]]},"962":{"position":[[23,10]]},"1039":{"position":[[23,10]]},"1049":{"position":[[23,10]]},"1057":{"position":[[23,10]]},"1288":{"position":[[23,10]]}},"content":{"8":{"position":[[684,10]]},"38":{"position":[[429,9]]},"82":{"position":[[622,8]]},"83":{"position":[[344,10]]},"84":{"position":[[20,9],[307,8],[850,8],[913,8],[1342,9]]},"130":{"position":[[372,9]]},"135":{"position":[[69,9]]},"180":{"position":[[628,8]]},"189":{"position":[[584,8]]},"210":{"position":[[2481,9]]},"240":{"position":[[366,8]]},"320":{"position":[[2389,9]]},"324":{"position":[[1040,9]]},"419":{"position":[[15,9]]},"440":{"position":[[15,9]]},"487":{"position":[[33,9],[530,9]]},"547":{"position":[[15,9]]},"764":{"position":[[970,8]]},"777":{"position":[[970,8]]},"784":{"position":[[190,8]]},"788":{"position":[[142,10]]},"804":{"position":[[968,8]]},"819":{"position":[[968,8]]},"835":{"position":[[968,8]]},"902":{"position":[[75,10]]},"914":{"position":[[75,10],[171,10]]},"1039":{"position":[[275,10]]},"1198":{"position":[[279,8]]},"1255":{"position":[[190,8]]},"1282":{"position":[[219,9],[318,10]]},"1288":{"position":[[193,9],[292,10]]},"1289":{"position":[[896,8]]},"1310":{"position":[[234,9],[333,10]]},"1322":{"position":[[1115,8]]}},"keywords":{}}],["platform'",{"_index":3814,"title":{},"content":{"477":{"position":[[565,10],[812,10]]},"478":{"position":[[423,10]]},"598":{"position":[[529,10],[775,10]]},"599":{"position":[[423,10]]},"1289":{"position":[[1451,10]]},"1298":{"position":[[1283,10]]},"1310":{"position":[[772,10]]},"1322":{"position":[[1670,10]]},"1335":{"position":[[1318,10]]}},"keywords":{}}],["play",{"_index":2901,"title":{},"content":{"281":{"position":[[2578,4]]},"296":{"position":[[7992,4]]}},"keywords":{}}],["pleas",{"_index":3787,"title":{},"content":{"472":{"position":[[359,6]]},"490":{"position":[[113,6]]},"663":{"position":[[113,6]]},"678":{"position":[[113,6]]},"693":{"position":[[113,6]]},"900":{"position":[[66,6]]},"945":{"position":[[1065,6]]},"1008":{"position":[[983,6],[1801,6]]}},"keywords":{}}],["plenti",{"_index":1933,"title":{},"content":{"163":{"position":[[1140,6]]}},"keywords":{}}],["plug",{"_index":1367,"title":{},"content":{"95":{"position":[[76,4]]},"189":{"position":[[1650,4]]},"216":{"position":[[419,4]]},"289":{"position":[[539,4]]},"300":{"position":[[486,4]]}},"keywords":{}}],["plugin",{"_index":695,"title":{},"content":{"38":{"position":[[16,6]]},"1292":{"position":[[5660,6],[5698,7]]},"1306":{"position":[[5660,6],[5698,7]]},"1329":{"position":[[5660,6],[5698,7]]}},"keywords":{}}],["plugin_dir",{"_index":6201,"title":{},"content":{"1292":{"position":[[5745,10]]},"1306":{"position":[[5745,10]]},"1329":{"position":[[5745,10]]}},"keywords":{}}],["point",{"_index":1455,"title":{},"content":{"101":{"position":[[481,5]]},"208":{"position":[[1638,5]]},"209":{"position":[[1234,5]]},"309":{"position":[[1865,8]]},"761":{"position":[[446,5]]},"762":{"position":[[565,5]]},"774":{"position":[[446,5]]},"775":{"position":[[565,5]]},"801":{"position":[[452,5]]},"802":{"position":[[565,5]]},"816":{"position":[[452,5]]},"817":{"position":[[565,5]]},"832":{"position":[[452,5]]},"833":{"position":[[565,5]]},"879":{"position":[[1667,6]]},"922":{"position":[[674,5],[833,5],[1157,5]]},"977":{"position":[[260,5]]},"1077":{"position":[[322,5]]},"1292":{"position":[[5787,5]]},"1306":{"position":[[5787,5]]},"1329":{"position":[[5787,5]]},"1453":{"position":[[835,6]]},"1461":{"position":[[3239,6],[4842,6]]}},"keywords":{}}],["pointer",{"_index":1038,"title":{},"content":{"69":{"position":[[520,8]]},"70":{"position":[[542,8],[662,7]]},"71":{"position":[[119,8]]},"76":{"position":[[563,7],[742,7],[859,7]]},"94":{"position":[[2925,8]]},"107":{"position":[[1279,8]]},"228":{"position":[[538,8],[558,9]]},"254":{"position":[[2307,8]]},"296":{"position":[[2175,8]]},"306":{"position":[[149,8]]},"307":{"position":[[19,7]]},"314":{"position":[[1848,8]]},"1047":{"position":[[709,8]]},"1055":{"position":[[709,8]]},"1063":{"position":[[709,8]]},"1467":{"position":[[1675,8]]},"1476":{"position":[[762,8]]},"1477":{"position":[[2711,9]]}},"keywords":{}}],["pointersfor",{"_index":1893,"title":{},"content":{"161":{"position":[[175,11]]}},"keywords":{}}],["polici",{"_index":675,"title":{},"content":{"34":{"position":[[575,10]]},"83":{"position":[[179,7]]},"171":{"position":[[175,7]]},"172":{"position":[[153,7],[173,6]]},"221":{"position":[[1849,9]]},"279":{"position":[[91,7],[467,6],[943,9]]},"299":{"position":[[309,6]]},"390":{"position":[[447,6]]},"395":{"position":[[617,6],[690,8]]},"406":{"position":[[479,7]]},"413":{"position":[[268,7],[276,8]]},"414":{"position":[[41,6],[134,6],[185,6],[221,6],[780,6],[827,6]]},"415":{"position":[[144,6],[394,6],[445,6],[481,6],[965,6],[991,6]]},"522":{"position":[[363,8]]},"530":{"position":[[363,8]]},"856":{"position":[[264,7]]},"1122":{"position":[[244,6],[317,8]]},"1204":{"position":[[121,6],[426,8],[459,6]]}},"keywords":{}}],["policiessolut",{"_index":3916,"title":{},"content":{"506":{"position":[[314,16]]}},"keywords":{}}],["policiestagsticket",{"_index":5453,"title":{},"content":{"1128":{"position":[[282,18]]}},"keywords":{}}],["policy"",{"_index":4037,"title":{},"content":{"531":{"position":[[520,12]]}},"keywords":{}}],["policy.if",{"_index":3561,"title":{},"content":{"406":{"position":[[349,9]]}},"keywords":{}}],["policy/term",{"_index":4838,"title":{},"content":{"856":{"position":[[304,12]]}},"keywords":{}}],["poll",{"_index":1928,"title":{"1036":{"position":[[0,7]]}},"content":{"163":{"position":[[881,9]]},"250":{"position":[[961,4]]},"410":{"position":[[180,4]]},"480":{"position":[[1175,7],[1471,7],[1518,7],[1652,8]]},"482":{"position":[[370,4],[397,4],[778,7],[811,5],[817,4],[851,7]]},"821":{"position":[[843,7]]},"912":{"position":[[862,7],[1492,7]]},"1036":{"position":[[144,4],[280,7],[915,7]]}},"keywords":{}}],["poll.max",{"_index":3575,"title":{},"content":{"410":{"position":[[120,8]]}},"keywords":{}}],["pollev",{"_index":4943,"title":{},"content":{"892":{"position":[[615,10]]}},"keywords":{}}],["polygon",{"_index":6204,"title":{},"content":{"1292":{"position":[[5829,7]]},"1306":{"position":[[5829,7]]},"1329":{"position":[[5829,7]]}},"keywords":{}}],["pooler",{"_index":5124,"title":{},"content":{"963":{"position":[[165,7]]},"964":{"position":[[89,7],[108,7],[173,6],[478,6]]}},"keywords":{}}],["poolsreject",{"_index":4332,"title":{},"content":{"622":{"position":[[293,14]]}},"keywords":{}}],["pop",{"_index":2057,"title":{},"content":{"181":{"position":[[82,3]]},"210":{"position":[[1905,3]]},"267":{"position":[[219,3]]},"436":{"position":[[713,3]]},"1455":{"position":[[408,3]]},"1470":{"position":[[150,3]]}},"keywords":{}}],["popul",{"_index":845,"title":{},"content":{"56":{"position":[[1367,9]]},"144":{"position":[[770,9]]},"181":{"position":[[103,8]]},"218":{"position":[[188,9]]}},"keywords":{}}],["popular",{"_index":2918,"title":{},"content":{"286":{"position":[[60,7]]},"319":{"position":[[143,8]]},"320":{"position":[[2363,7]]},"417":{"position":[[2094,7]]}},"keywords":{}}],["port",{"_index":1210,"title":{},"content":{"83":{"position":[[138,4],[428,4],[485,4]]},"184":{"position":[[456,5]]},"221":{"position":[[782,4],[873,5]]},"225":{"position":[[226,4],[317,5]]},"236":{"position":[[1088,6]]},"238":{"position":[[231,4]]},"402":{"position":[[136,5],[142,4],[147,4]]},"403":{"position":[[186,5]]},"753":{"position":[[1572,4]]},"767":{"position":[[2432,5]]},"782":{"position":[[86,4]]},"792":{"position":[[2413,5]]},"793":{"position":[[1595,4]]},"808":{"position":[[1565,4]]},"824":{"position":[[2544,5]]},"904":{"position":[[2359,5]]},"918":{"position":[[2651,5]]},"919":{"position":[[2502,4]]},"931":{"position":[[2044,4]]},"1021":{"position":[[359,4]]},"1043":{"position":[[1862,4]]},"1051":{"position":[[2075,5]]},"1059":{"position":[[1891,4]]},"1138":{"position":[[377,5]]},"1151":{"position":[[86,4]]},"1188":{"position":[[86,4],[142,4],[189,4]]},"1253":{"position":[[86,4]]},"1267":{"position":[[75,4],[132,4]]},"1285":{"position":[[169,4],[222,4]]},"1289":{"position":[[1330,4],[1411,4],[1519,4],[1578,4],[1690,4]]},"1292":{"position":[[5877,4]]},"1298":{"position":[[1162,4],[1243,4]]},"1300":{"position":[[169,4],[222,4]]},"1303":{"position":[[1041,4],[1687,4]]},"1306":{"position":[[5877,4]]},"1310":{"position":[[651,4],[732,4],[840,4],[899,4],[1011,4],[1083,4],[1091,5]]},"1313":{"position":[[160,4],[213,4]]},"1322":{"position":[[1549,4],[1630,4],[1720,4],[1728,5]]},"1324":{"position":[[169,4],[222,4]]},"1329":{"position":[[5877,4]]},"1335":{"position":[[1197,4],[1278,4],[1368,4],[1376,5]]},"1337":{"position":[[160,4],[213,4]]},"1346":{"position":[[1163,4],[1244,4],[1304,4]]},"1348":{"position":[[160,4],[213,4]]},"1373":{"position":[[1324,5]]},"1374":{"position":[[1328,5]]},"1376":{"position":[[169,4],[222,4]]},"1397":{"position":[[1126,4]]},"1398":{"position":[[1129,4]]},"1400":{"position":[[169,4],[222,4]]},"1409":{"position":[[1135,4]]},"1411":{"position":[[169,4],[222,4]]},"1420":{"position":[[84,4]]},"1425":{"position":[[131,5]]},"1427":{"position":[[160,4]]},"1447":{"position":[[157,5]]}},"keywords":{}}],["port.googl",{"_index":5979,"title":{},"content":{"1289":{"position":[[1527,11]]},"1310":{"position":[[848,11]]}},"keywords":{}}],["portal",{"_index":3694,"title":{},"content":{"436":{"position":[[39,7]]},"446":{"position":[[233,7]]},"840":{"position":[[69,7],[223,7]]},"849":{"position":[[166,7]]}},"keywords":{}}],["portal.ensur",{"_index":4529,"title":{},"content":{"726":{"position":[[131,13]]}},"keywords":{}}],["portan",{"_index":3653,"title":{},"content":{"428":{"position":[[105,6]]}},"keywords":{}}],["portion",{"_index":1194,"title":{},"content":{"82":{"position":[[3419,8]]},"1140":{"position":[[1234,7]]},"1316":{"position":[[1234,7]]},"1340":{"position":[[1234,7]]},"1351":{"position":[[1234,7]]},"1431":{"position":[[1257,7]]}},"keywords":{}}],["posit",{"_index":1879,"title":{},"content":{"159":{"position":[[737,8],[824,8],[1017,9]]},"161":{"position":[[895,9]]},"922":{"position":[[1065,8]]},"1140":{"position":[[1280,8]]},"1316":{"position":[[1280,8]]},"1340":{"position":[[1280,8]]},"1351":{"position":[[1280,8]]},"1379":{"position":[[2022,8]]},"1403":{"position":[[2022,8]]},"1414":{"position":[[2022,8]]},"1431":{"position":[[1303,8]]}},"keywords":{}}],["position_reg",{"_index":6320,"title":{},"content":{"1379":{"position":[[2076,13]]},"1403":{"position":[[2076,13]]},"1414":{"position":[[2076,13]]}},"keywords":{}}],["position_regex",{"_index":5576,"title":{},"content":{"1140":{"position":[[1326,14]]},"1316":{"position":[[1326,14]]},"1340":{"position":[[1326,14]]},"1351":{"position":[[1326,14]]},"1431":{"position":[[1349,14]]}},"keywords":{}}],["possibl",{"_index":1121,"title":{},"content":{"81":{"position":[[925,8]]},"82":{"position":[[924,8]]},"84":{"position":[[236,8]]},"87":{"position":[[183,8]]},"101":{"position":[[301,9]]},"105":{"position":[[950,8],[1157,9]]},"115":{"position":[[1189,8]]},"126":{"position":[[102,9]]},"163":{"position":[[933,9],[1041,9]]},"175":{"position":[[71,8]]},"190":{"position":[[166,8]]},"192":{"position":[[116,8]]},"213":{"position":[[340,9]]},"219":{"position":[[69,14],[161,9]]},"237":{"position":[[929,8]]},"259":{"position":[[684,8]]},"290":{"position":[[1244,8]]},"309":{"position":[[1070,8]]},"321":{"position":[[2285,9]]},"364":{"position":[[211,8]]},"373":{"position":[[912,8]]},"489":{"position":[[897,9]]},"662":{"position":[[897,9]]},"677":{"position":[[897,9]]},"692":{"position":[[897,9]]},"750":{"position":[[203,9]]},"766":{"position":[[203,9]]},"789":{"position":[[237,9]]},"807":{"position":[[237,9]]},"821":{"position":[[229,9]]},"823":{"position":[[237,9]]},"869":{"position":[[656,8],[981,8]]},"909":{"position":[[1047,8]]},"912":{"position":[[240,9]]},"925":{"position":[[1047,8]]},"936":{"position":[[1047,8]]},"952":{"position":[[1047,8]]},"970":{"position":[[1047,8]]},"1008":{"position":[[71,8]]},"1009":{"position":[[1139,8]]},"1147":{"position":[[432,8]]},"1166":{"position":[[26,8],[169,11]]},"1174":{"position":[[432,8]]},"1183":{"position":[[214,8]]},"1216":{"position":[[432,8]]},"1224":{"position":[[432,8]]},"1268":{"position":[[109,8]]},"1286":{"position":[[1632,8]]},"1301":{"position":[[1468,8]]},"1325":{"position":[[1632,8]]},"1449":{"position":[[245,8]]},"1451":{"position":[[841,9]]},"1452":{"position":[[2622,9],[2776,8],[3453,8]]},"1459":{"position":[[514,8]]},"1476":{"position":[[827,8]]}},"keywords":{}}],["post",{"_index":2096,"title":{"786":{"position":[[22,4]]}},"content":{"185":{"position":[[175,4]]},"322":{"position":[[224,4],[1100,4]]},"486":{"position":[[137,4]]},"658":{"position":[[137,4]]},"674":{"position":[[137,4]]},"689":{"position":[[137,4]]},"723":{"position":[[299,6]]},"786":{"position":[[88,4]]},"989":{"position":[[1266,4]]},"1004":{"position":[[1349,4]]},"1134":{"position":[[1329,5]]},"1239":{"position":[[169,4],[199,4]]},"1241":{"position":[[215,4]]}},"keywords":{}}],["post/fruity_pebbles/nutrit",{"_index":6519,"title":{},"content":{"1448":{"position":[[761,29]]}},"keywords":{}}],["post/fruity_pebbles/nutritionfact",{"_index":6517,"title":{},"content":{"1448":{"position":[[557,35]]}},"keywords":{}}],["post_com",{"_index":5485,"title":{},"content":{"1134":{"position":[[1427,13]]}},"keywords":{}}],["post_comment_vot",{"_index":5487,"title":{},"content":{"1134":{"position":[[1515,18]]}},"keywords":{}}],["post_vot",{"_index":5489,"title":{},"content":{"1134":{"position":[[1612,10]]}},"keywords":{}}],["postfix",{"_index":6321,"title":{},"content":{"1379":{"position":[[2125,7]]},"1403":{"position":[[2125,7]]},"1414":{"position":[[2125,7]]}},"keywords":{}}],["postgr",{"_index":415,"title":{"943":{"position":[[12,8]]},"944":{"position":[[31,8]]},"947":{"position":[[9,8]]}},"content":{"13":{"position":[[1708,8]]},"81":{"position":[[1415,8],[1430,8],[2708,8],[2723,8]]},"83":{"position":[[878,8]]},"120":{"position":[[2091,8]]},"138":{"position":[[1038,9],[1095,9]]},"179":{"position":[[456,8]]},"180":{"position":[[23,8],[707,8],[934,8]]},"182":{"position":[[287,9]]},"184":{"position":[[48,9],[414,8],[511,10],[721,8],[884,8]]},"185":{"position":[[9,8]]},"208":{"position":[[1919,8]]},"236":{"position":[[595,9],[710,8],[747,8],[769,8],[797,8],[1277,8],[1301,8],[1329,8],[1405,8],[1440,9]]},"237":{"position":[[2929,8]]},"238":{"position":[[515,8],[900,8],[912,8],[939,9],[993,10],[1135,8],[1172,8],[1190,10],[1259,10]]},"240":{"position":[[3858,9],[4564,9]]},"242":{"position":[[167,8]]},"307":{"position":[[1049,9],[1899,9]]},"912":{"position":[[67,8]]},"922":{"position":[[1,8],[331,8],[1512,8],[2416,8],[2564,8]]},"942":{"position":[[43,8]]},"943":{"position":[[47,8],[141,8]]},"945":{"position":[[473,8],[658,8],[761,9]]},"1139":{"position":[[128,8]]},"1309":{"position":[[40,8]]},"1312":{"position":[[113,8]]},"1317":{"position":[[612,8],[843,8]]},"1332":{"position":[[40,8]]},"1336":{"position":[[113,8]]},"1341":{"position":[[612,8],[843,8]]},"1343":{"position":[[40,8]]},"1347":{"position":[[113,8]]},"1352":{"position":[[612,8],[843,8]]},"1432":{"position":[[612,8],[857,8]]}},"keywords":{}}],["postgres'"",{"_index":2519,"title":{},"content":{"236":{"position":[[973,16]]}},"keywords":{}}],["postgres13typ",{"_index":4996,"title":{},"content":{"904":{"position":[[1033,15]]}},"keywords":{}}],["postgres://alex:abc123def@ep",{"_index":5109,"title":{},"content":{"947":{"position":[[411,28]]}},"keywords":{}}],["postgres:dev",{"_index":1118,"title":{},"content":{"81":{"position":[[323,13],[1276,12],[2634,12]]},"83":{"position":[[998,12]]},"120":{"position":[[530,12]]},"363":{"position":[[1963,12]]},"1120":{"position":[[1656,12]]},"1314":{"position":[[98,12]]},"1338":{"position":[[98,12]]},"1349":{"position":[[98,12]]}},"keywords":{}}],["postgres:dev"",{"_index":5006,"title":{},"content":{"908":{"position":[[155,18]]},"924":{"position":[[155,18]]},"935":{"position":[[155,18]]},"951":{"position":[[155,18]]},"969":{"position":[[155,18]]}},"keywords":{}}],["postgres:latest",{"_index":2503,"title":{},"content":{"236":{"position":[[612,15]]}},"keywords":{}}],["postgres:v1",{"_index":3043,"title":{},"content":{"307":{"position":[[1110,11],[1960,11]]}},"keywords":{}}],["postgres_cdc",{"_index":2505,"title":{},"content":{"236":{"position":[[644,12],[667,12],[1231,12]]},"237":{"position":[[3229,12],[3295,12]]}},"keywords":{}}],["postgres_db",{"_index":2507,"title":{},"content":{"236":{"position":[[756,12],[1264,12]]}},"keywords":{}}],["postgres_host",{"_index":2529,"title":{},"content":{"236":{"position":[[1216,14]]}},"keywords":{}}],["postgres_password",{"_index":2508,"title":{},"content":{"236":{"position":[[778,18],[1310,18]]}},"keywords":{}}],["postgres_port",{"_index":2530,"title":{},"content":{"236":{"position":[[1244,14]]}},"keywords":{}}],["postgres_us",{"_index":2506,"title":{},"content":{"236":{"position":[[732,14],[1286,14]]}},"keywords":{}}],["postgresql",{"_index":2041,"title":{"178":{"position":[[40,10]]},"231":{"position":[[0,10]]},"236":{"position":[[0,10]]},"237":{"position":[[12,10]]},"901":{"position":[[15,10]]},"912":{"position":[[0,10]]},"913":{"position":[[0,10]]},"917":{"position":[[12,11]]},"919":{"position":[[19,11]]},"928":{"position":[[21,10]]},"939":{"position":[[5,10]]},"1308":{"position":[[0,10]]},"1311":{"position":[[19,11]]},"1331":{"position":[[15,10]]},"1342":{"position":[[21,10]]}},"content":{"179":{"position":[[577,11]]},"184":{"position":[[211,10]]},"224":{"position":[[1116,10]]},"232":{"position":[[62,10],[224,10],[393,10],[831,10]]},"236":{"position":[[53,11],[394,10]]},"237":{"position":[[30,11]]},"241":{"position":[[68,10]]},"243":{"position":[[151,10]]},"363":{"position":[[1906,10]]},"366":{"position":[[175,10]]},"369":{"position":[[250,10]]},"370":{"position":[[954,10],[1210,10]]},"902":{"position":[[25,10]]},"903":{"position":[[15,10],[201,10]]},"904":{"position":[[907,10],[1259,10]]},"905":{"position":[[12,10]]},"906":{"position":[[250,10]]},"907":{"position":[[737,10],[993,10],[1674,10]]},"909":{"position":[[1,10],[171,10],[342,10],[704,10]]},"912":{"position":[[0,10],[204,10],[494,10]]},"914":{"position":[[25,10],[263,10]]},"915":{"position":[[15,10],[201,10]]},"917":{"position":[[414,10],[1890,10]]},"918":{"position":[[1293,10],[1551,10]]},"919":{"position":[[626,10],[733,10],[948,10]]},"920":{"position":[[12,10]]},"921":{"position":[[250,10]]},"923":{"position":[[737,10],[993,10],[1674,10]]},"925":{"position":[[1,10],[171,10],[342,10],[704,10]]},"929":{"position":[[25,10]]},"930":{"position":[[15,10],[201,10]]},"931":{"position":[[885,10],[914,10]]},"932":{"position":[[12,10]]},"933":{"position":[[250,10]]},"934":{"position":[[737,10],[993,10]]},"936":{"position":[[1,10],[171,10],[342,10],[704,10]]},"947":{"position":[[134,10]]},"948":{"position":[[12,10]]},"949":{"position":[[250,10]]},"950":{"position":[[737,10],[993,10]]},"952":{"position":[[1,10],[171,10],[342,10],[704,10]]},"962":{"position":[[38,10]]},"963":{"position":[[24,10],[355,10]]},"965":{"position":[[414,10],[1890,10]]},"966":{"position":[[12,10]]},"967":{"position":[[250,10]]},"968":{"position":[[737,10],[993,10],[1674,10]]},"970":{"position":[[1,10],[171,10],[342,10],[704,10]]},"1120":{"position":[[1594,10]]},"1140":{"position":[[1,10],[215,10]]},"1310":{"position":[[115,10],[151,11],[199,10]]},"1311":{"position":[[42,11]]},"1313":{"position":[[1424,10]]},"1316":{"position":[[1,10],[215,10]]},"1337":{"position":[[1424,10]]},"1340":{"position":[[1,10],[215,10]]},"1351":{"position":[[1,10],[215,10]]},"1429":{"position":[[17,10],[111,10]]},"1431":{"position":[[1,10],[238,10]]}},"keywords":{}}],["postgresql'",{"_index":5005,"title":{},"content":{"907":{"position":[[1850,12]]},"923":{"position":[[1850,12]]},"968":{"position":[[1850,12]]},"1313":{"position":[[1600,12]]},"1337":{"position":[[1600,12]]}},"keywords":{}}],["postgresql13",{"_index":5039,"title":{},"content":{"918":{"position":[[1243,13]]}},"keywords":{}}],["postgresqlamazon",{"_index":5032,"title":{},"content":{"914":{"position":[[195,16]]},"916":{"position":[[82,16]]}},"keywords":{}}],["postgresqlsupabas",{"_index":5033,"title":{},"content":{"916":{"position":[[150,18]]}},"keywords":{}}],["postsgrouppagesspac",{"_index":3783,"title":{},"content":{"470":{"position":[[11,20]]}},"keywords":{}}],["postsjob",{"_index":4328,"title":{},"content":{"622":{"position":[[229,8]]}},"keywords":{}}],["potenti",{"_index":561,"title":{},"content":{"21":{"position":[[184,11]]},"74":{"position":[[366,11]]},"102":{"position":[[581,9]]},"105":{"position":[[424,11]]},"158":{"position":[[234,9]]},"321":{"position":[[1847,11]]},"602":{"position":[[1014,9]]},"759":{"position":[[133,11],[218,9]]},"764":{"position":[[549,11]]},"772":{"position":[[144,11],[229,9]]},"777":{"position":[[549,11]]},"799":{"position":[[131,11],[216,9]]},"804":{"position":[[547,11]]},"814":{"position":[[131,11],[216,9]]},"819":{"position":[[547,11]]},"830":{"position":[[131,11],[216,9]]},"835":{"position":[[547,11]]}},"keywords":{}}],["power",{"_index":696,"title":{"331":{"position":[[0,8]]}},"content":{"38":{"position":[[96,5]]},"39":{"position":[[109,8]]},"132":{"position":[[42,9]]},"156":{"position":[[662,8]]},"159":{"position":[[624,8]]},"163":{"position":[[435,8]]},"180":{"position":[[43,8]]},"193":{"position":[[346,5]]},"319":{"position":[[1473,8]]},"329":{"position":[[164,5],[1057,8]]},"977":{"position":[[644,5]]},"1140":{"position":[[1379,5]]},"1316":{"position":[[1379,5]]},"1340":{"position":[[1379,5]]},"1351":{"position":[[1379,5]]},"1431":{"position":[[1402,5]]}},"keywords":{}}],["pport",{"_index":6251,"title":{},"content":{"1303":{"position":[[1181,5]]}},"keywords":{}}],["practic",{"_index":1086,"title":{},"content":{"74":{"position":[[873,8]]},"177":{"position":[[174,8]]},"241":{"position":[[440,10]]},"478":{"position":[[253,9]]},"599":{"position":[[253,9]]},"760":{"position":[[706,11]]},"773":{"position":[[706,11]]},"800":{"position":[[706,11]]},"815":{"position":[[706,11]]},"831":{"position":[[706,11]]},"1453":{"position":[[160,11]]}},"keywords":{}}],["pragma",{"_index":6290,"title":{},"content":{"1370":{"position":[[732,6]]}},"keywords":{}}],["pratic",{"_index":4133,"title":{},"content":{"560":{"position":[[201,8]]}},"keywords":{}}],["pre",{"_index":373,"title":{"786":{"position":[[13,3]]}},"content":{"13":{"position":[[83,3]]},"144":{"position":[[766,3]]},"209":{"position":[[517,3]]},"320":{"position":[[1321,3]]},"785":{"position":[[171,3]]},"786":{"position":[[189,3],[293,3]]},"1183":{"position":[[148,3]]},"1467":{"position":[[1876,3]]},"1477":{"position":[[2778,3]]}},"keywords":{}}],["preced",{"_index":4609,"title":{},"content":{"757":{"position":[[664,10]]},"770":{"position":[[664,10]]},"797":{"position":[[664,10]]},"812":{"position":[[664,10]]},"828":{"position":[[664,10]]},"1140":{"position":[[1419,8]]},"1285":{"position":[[676,10]]},"1292":{"position":[[5915,8],[5971,9]]},"1300":{"position":[[676,10]]},"1306":{"position":[[5915,8],[5971,9]]},"1316":{"position":[[1419,8]]},"1324":{"position":[[676,10]]},"1329":{"position":[[5915,8],[5971,9]]},"1340":{"position":[[1419,8]]},"1351":{"position":[[1419,8]]},"1370":{"position":[[752,9]]},"1431":{"position":[[1442,8]]},"1459":{"position":[[1547,9]]}},"keywords":{}}],["precis",{"_index":1561,"title":{},"content":{"109":{"position":[[541,10]]},"922":{"position":[[3173,7]]},"1140":{"position":[[1477,9]]},"1164":{"position":[[402,10]]},"1172":{"position":[[587,10],[676,10]]},"1209":{"position":[[318,9]]},"1222":{"position":[[587,10],[676,10]]},"1292":{"position":[[6024,9]]},"1306":{"position":[[6024,9]]},"1316":{"position":[[1477,9]]},"1329":{"position":[[6024,9]]},"1340":{"position":[[1477,9]]},"1351":{"position":[[1477,9]]},"1379":{"position":[[2172,9]]},"1403":{"position":[[2172,9]]},"1414":{"position":[[2172,9]]},"1431":{"position":[[1500,9]]},"1453":{"position":[[1096,9]]}},"keywords":{}}],["predetermin",{"_index":1987,"title":{},"content":{"169":{"position":[[1683,13]]},"340":{"position":[[543,13]]}},"keywords":{}}],["predic",{"_index":177,"title":{},"content":{"4":{"position":[[555,9],[589,10]]}},"keywords":{}}],["predict",{"_index":6566,"title":{},"content":{"1453":{"position":[[356,11],[1028,11]]}},"keywords":{}}],["predominantli",{"_index":3194,"title":{},"content":{"330":{"position":[[280,13]]}},"keywords":{}}],["preexist",{"_index":2573,"title":{},"content":{"237":{"position":[[1504,11]]},"366":{"position":[[902,11]]},"478":{"position":[[338,11]]},"480":{"position":[[797,11]]},"595":{"position":[[151,11]]},"599":{"position":[[338,11]]},"750":{"position":[[613,11]]},"766":{"position":[[613,11]]},"789":{"position":[[601,11]]},"807":{"position":[[601,11]]},"823":{"position":[[601,11]]},"903":{"position":[[928,11]]},"915":{"position":[[928,11]]},"930":{"position":[[928,11]]},"963":{"position":[[1082,11]]},"1040":{"position":[[644,11]]},"1050":{"position":[[644,11]]},"1058":{"position":[[644,11]]}},"keywords":{}}],["prefer",{"_index":600,"title":{},"content":{"26":{"position":[[8,6]]},"29":{"position":[[94,9]]},"82":{"position":[[3671,6]]},"135":{"position":[[154,11],[744,6]]},"154":{"position":[[220,12],[2084,12],[2117,11]]},"169":{"position":[[211,11]]},"213":{"position":[[450,6]]},"277":{"position":[[1308,9]]},"675":{"position":[[294,9]]},"753":{"position":[[726,9]]},"793":{"position":[[705,9]]},"808":{"position":[[723,9]]},"1472":{"position":[[97,9]]}},"keywords":{}}],["prefix",{"_index":130,"title":{},"content":{"3":{"position":[[665,6]]},"6":{"position":[[77,7]]},"8":{"position":[[78,7]]},"27":{"position":[[161,8],[323,8],[512,8],[583,8],[607,8]]},"46":{"position":[[170,9]]},"56":{"position":[[1947,6],[2122,6]]},"61":{"position":[[595,6],[654,6],[735,7],[850,6]]},"63":{"position":[[602,7]]},"117":{"position":[[340,8]]},"138":{"position":[[653,7],[822,6],[1755,9]]},"141":{"position":[[787,7],[1763,9]]},"142":{"position":[[600,7],[793,6],[1780,9]]},"154":{"position":[[361,8],[449,9],[513,6],[859,6],[925,8],[1075,7],[1334,6],[1429,7],[1560,6]]},"174":{"position":[[578,7]]},"183":{"position":[[397,6],[872,6]]},"190":{"position":[[497,9],[566,8],[614,8],[694,6],[990,7],[1036,9]]},"192":{"position":[[332,6]]},"217":{"position":[[696,6],[798,7]]},"263":{"position":[[1133,7]]},"264":{"position":[[749,7]]},"267":{"position":[[772,6],[1262,6]]},"270":{"position":[[673,7],[891,6]]},"274":{"position":[[979,6],[1119,6],[1456,6],[1521,6],[1762,6]]},"290":{"position":[[521,6],[606,7]]},"301":{"position":[[461,6],[546,7],[829,7],[877,9],[956,7]]},"337":{"position":[[171,7],[206,7],[366,7]]},"338":{"position":[[72,7],[129,7],[142,6],[248,6],[274,7],[527,8]]},"390":{"position":[[430,6]]},"395":{"position":[[600,6]]},"413":{"position":[[78,6],[117,6]]},"414":{"position":[[109,7],[239,6]]},"415":{"position":[[205,7],[499,6]]},"417":{"position":[[297,7],[1197,7],[1881,7],[1889,6],[1896,6],[2265,6]]},"418":{"position":[[552,8]]},"419":{"position":[[1268,6]]},"438":{"position":[[297,7],[1713,7]]},"440":{"position":[[1284,6]]},"460":{"position":[[137,6]]},"502":{"position":[[235,7],[757,7]]},"545":{"position":[[297,7],[806,7],[867,7],[1483,7],[1491,6],[1498,6],[1660,6]]},"546":{"position":[[1260,8]]},"547":{"position":[[1270,6]]},"601":{"position":[[315,6],[322,6]]},"945":{"position":[[795,8]]},"1008":{"position":[[1149,6]]},"1021":{"position":[[2076,6]]},"1023":{"position":[[1251,6]]},"1122":{"position":[[227,6]]},"1144":{"position":[[483,7],[491,6],[507,6]]},"1146":{"position":[[419,6]]},"1151":{"position":[[1249,6]]},"1162":{"position":[[331,7],[339,6],[355,6]]},"1170":{"position":[[483,7],[491,6],[507,6]]},"1173":{"position":[[431,6]]},"1206":{"position":[[702,6],[711,6]]},"1213":{"position":[[338,7],[346,6],[362,6]]},"1215":{"position":[[419,6]]},"1220":{"position":[[338,7],[346,6],[362,6]]},"1223":{"position":[[431,6]]},"1260":{"position":[[797,6]]},"1379":{"position":[[2213,6]]},"1403":{"position":[[2213,6]]},"1414":{"position":[[2213,6]]},"1420":{"position":[[574,6]]},"1457":{"position":[[47,6]]},"1474":{"position":[[629,7]]}},"keywords":{}}],["prefix.acmeco",{"_index":3219,"title":{},"content":{"338":{"position":[[423,15]]}},"keywords":{}}],["prefix/mat_nam",{"_index":5831,"title":{},"content":{"1197":{"position":[[19,16]]}},"keywords":{}}],["prefix/source_collect",{"_index":5834,"title":{},"content":{"1197":{"position":[[507,24]]}},"keywords":{}}],["prefix/uniqu",{"_index":1772,"title":{},"content":{"138":{"position":[[776,13]]},"142":{"position":[[747,13]]}},"keywords":{}}],["prefix}/${capture_nam",{"_index":3275,"title":{},"content":{"360":{"position":[[12,26]]},"371":{"position":[[71,26]]},"378":{"position":[[11,26]]},"388":{"position":[[81,26]]},"393":{"position":[[71,26]]},"398":{"position":[[71,26]]},"403":{"position":[[11,26]]},"418":{"position":[[11,26]]},"425":{"position":[[12,26]]},"433":{"position":[[53,26],[464,26]]},"439":{"position":[[11,26]]},"449":{"position":[[81,26]]},"455":{"position":[[12,26]]},"461":{"position":[[12,26]]},"467":{"position":[[12,26]]},"473":{"position":[[81,26]]},"497":{"position":[[11,26]]},"503":{"position":[[11,26]]},"510":{"position":[[11,26]]},"518":{"position":[[81,26]]},"527":{"position":[[81,26]]},"535":{"position":[[81,26]]},"541":{"position":[[12,26]]},"546":{"position":[[11,26]]},"557":{"position":[[81,26]]},"566":{"position":[[11,26]]},"575":{"position":[[67,26]]},"586":{"position":[[67,26]]},"594":{"position":[[11,26]]},"612":{"position":[[81,26]]},"620":{"position":[[11,26]]},"626":{"position":[[12,26]]},"632":{"position":[[12,26]]},"638":{"position":[[11,26]]},"647":{"position":[[11,26]]},"655":{"position":[[11,26]]},"671":{"position":[[12,26]]},"686":{"position":[[72,26]]},"701":{"position":[[12,26]]},"707":{"position":[[12,26]]},"713":{"position":[[12,26]]},"721":{"position":[[81,26]]},"736":{"position":[[11,26]]},"742":{"position":[[12,26]]},"748":{"position":[[12,26]]},"758":{"position":[[71,26]]},"771":{"position":[[71,26]]},"783":{"position":[[11,26]]},"798":{"position":[[71,26]]},"813":{"position":[[71,26]]},"829":{"position":[[71,26]]},"843":{"position":[[12,26]]},"852":{"position":[[12,26]]},"860":{"position":[[81,26]]},"868":{"position":[[11,26]]},"880":{"position":[[11,26]]},"886":{"position":[[12,26]]},"892":{"position":[[11,26]]},"908":{"position":[[71,26]]},"924":{"position":[[71,26]]},"935":{"position":[[71,26]]},"951":{"position":[[71,26]]},"960":{"position":[[12,26]]},"969":{"position":[[71,26]]},"983":{"position":[[12,26]]},"992":{"position":[[11,26]]},"998":{"position":[[12,26]]},"1010":{"position":[[81,26]]},"1016":{"position":[[12,26]]},"1029":{"position":[[12,26]]},"1046":{"position":[[11,26]]},"1054":{"position":[[11,26]]},"1062":{"position":[[11,26]]},"1071":{"position":[[81,26]]},"1078":{"position":[[11,26]]},"1086":{"position":[[93,26]]},"1102":{"position":[[12,26]]},"1108":{"position":[[11,26]]},"1114":{"position":[[12,26]]},"1134":{"position":[[11,26]]},"1254":{"position":[[19,26]]}},"keywords":{}}],["prefix}/${capture_name}/trad",{"_index":3461,"title":{},"content":{"378":{"position":[[353,32]]}},"keywords":{}}],["prefix}/${capture_name}/transact",{"_index":4805,"title":{},"content":{"843":{"position":[[819,37]]}},"keywords":{}}],["prefix}/${collection_nam",{"_index":3432,"title":{},"content":{"371":{"position":[[1385,28]]},"393":{"position":[[368,28]]},"398":{"position":[[367,28]]},"418":{"position":[[434,28]]},"433":{"position":[[398,28],[794,28]]},"439":{"position":[[649,28]]},"497":{"position":[[273,28]]},"503":{"position":[[221,28]]},"546":{"position":[[1141,28]]},"575":{"position":[[381,28],[468,28],[572,28],[661,28],[761,28],[846,28],[941,28],[1044,28],[1140,28],[1239,28]]},"586":{"position":[[403,28],[490,28],[594,28],[683,28],[768,28],[863,28],[959,28],[1058,28]]},"620":{"position":[[309,28]]},"638":{"position":[[440,28]]},"647":{"position":[[234,28]]},"655":{"position":[[264,28]]},"736":{"position":[[231,28],[320,28],[414,28]]},"758":{"position":[[369,28]]},"771":{"position":[[369,28]]},"798":{"position":[[367,28]]},"813":{"position":[[367,28]]},"829":{"position":[[367,28]]},"868":{"position":[[525,28]]},"880":{"position":[[536,28]]},"908":{"position":[[413,28]]},"924":{"position":[[413,28]]},"935":{"position":[[413,28]]},"951":{"position":[[413,28]]},"969":{"position":[[413,28]]},"1046":{"position":[[347,28]]},"1054":{"position":[[347,28]]},"1062":{"position":[[347,28]]},"1126":{"position":[[328,28]]},"1139":{"position":[[1219,28]]},"1145":{"position":[[320,28]]},"1152":{"position":[[413,28]]},"1163":{"position":[[375,28]]},"1171":{"position":[[324,28]]},"1214":{"position":[[260,28]]},"1221":{"position":[[264,28]]},"1261":{"position":[[355,28]]},"1262":{"position":[[661,28]]},"1270":{"position":[[243,28]]},"1278":{"position":[[322,28]]},"1287":{"position":[[232,28]]},"1302":{"position":[[232,28]]},"1314":{"position":[[235,28]]},"1326":{"position":[[232,28]]},"1338":{"position":[[235,28]]},"1349":{"position":[[235,28]]},"1368":{"position":[[171,28]]},"1377":{"position":[[236,28]]},"1401":{"position":[[236,28]]},"1412":{"position":[[236,28]]},"1428":{"position":[[276,28]]}},"keywords":{}}],["prefix}/${mat_nam",{"_index":5516,"title":{},"content":{"1139":{"position":[[19,22]]},"1145":{"position":[[19,22]]},"1152":{"position":[[19,22]]},"1163":{"position":[[19,22]]},"1171":{"position":[[19,22]]},"1180":{"position":[[19,22]]},"1189":{"position":[[20,22]]},"1207":{"position":[[19,22]]},"1214":{"position":[[19,22]]},"1221":{"position":[[19,22]]},"1231":{"position":[[89,22]]},"1248":{"position":[[89,22]]},"1261":{"position":[[19,22]]},"1270":{"position":[[19,22]]},"1278":{"position":[[19,22]]},"1287":{"position":[[19,22]]},"1302":{"position":[[19,22]]},"1314":{"position":[[19,22]]},"1326":{"position":[[19,22]]},"1338":{"position":[[19,22]]},"1349":{"position":[[19,22]]},"1357":{"position":[[19,22]]},"1368":{"position":[[19,22]]},"1377":{"position":[[19,22]]},"1387":{"position":[[54,22],[608,22]]},"1401":{"position":[[19,22]]},"1412":{"position":[[19,22]]},"1421":{"position":[[20,22]]},"1428":{"position":[[19,22]]}},"keywords":{}}],["prefix}/${materialization_nam",{"_index":5442,"title":{},"content":{"1126":{"position":[[19,34]]},"1363":{"position":[[19,34]]}},"keywords":{}}],["prefix}/${source_collect",{"_index":5795,"title":{},"content":{"1180":{"position":[[323,30]]},"1182":{"position":[[657,30]]},"1189":{"position":[[508,30]]},"1191":{"position":[[677,30]]},"1207":{"position":[[595,30]]},"1231":{"position":[[320,30]]},"1248":{"position":[[520,30]]},"1357":{"position":[[464,30]]},"1387":{"position":[[531,30],[1157,30]]},"1389":{"position":[[659,30]]},"1421":{"position":[[534,30]]}},"keywords":{}}],["prefix}/account",{"_index":3752,"title":{},"content":{"449":{"position":[[470,18]]},"1108":{"position":[[309,18]]},"1114":{"position":[[295,18]]}},"keywords":{}}],["prefix}/accountattribut",{"_index":5467,"title":{},"content":{"1134":{"position":[[339,27]]}},"keywords":{}}],["prefix}/act",{"_index":3998,"title":{},"content":{"518":{"position":[[1496,20]]}},"keywords":{}}],["prefix}/activeus",{"_index":3648,"title":{},"content":{"425":{"position":[[505,21]]}},"keywords":{}}],["prefix}/ad",{"_index":3999,"title":{},"content":{"518":{"position":[[1571,13]]}},"keywords":{}}],["prefix}/ad_account",{"_index":3980,"title":{},"content":{"518":{"position":[[524,20]]}},"keywords":{}}],["prefix}/ad_cr",{"_index":4001,"title":{},"content":{"518":{"position":[[1649,22]]}},"keywords":{}}],["prefix}/ad_set",{"_index":3982,"title":{},"content":{"518":{"position":[[603,17]]}},"keywords":{}}],["prefix}/address",{"_index":5121,"title":{},"content":{"960":{"position":[[244,19]]}},"keywords":{}}],["prefix}/admin",{"_index":4432,"title":{},"content":{"686":{"position":[[301,16]]}},"keywords":{}}],["prefix}/ads_insight",{"_index":3984,"title":{},"content":{"518":{"position":[[684,22]]}},"keywords":{}}],["prefix}/ads_insights_action_typ",{"_index":3996,"title":{},"content":{"518":{"position":[[1320,34]]}},"keywords":{}}],["prefix}/ads_insights_age_and_gend",{"_index":3986,"title":{},"content":{"518":{"position":[[785,37]]}},"keywords":{}}],["prefix}/ads_insights_countri",{"_index":3988,"title":{},"content":{"518":{"position":[[894,30]]}},"keywords":{}}],["prefix}/ads_insights_dma",{"_index":3992,"title":{},"content":{"518":{"position":[[1092,26]]}},"keywords":{}}],["prefix}/ads_insights_platform_and_devic",{"_index":3994,"title":{},"content":{"518":{"position":[[1202,42]]}},"keywords":{}}],["prefix}/ads_insights_region",{"_index":3990,"title":{},"content":{"518":{"position":[[995,29]]}},"keywords":{}}],["prefix}/ag",{"_index":3925,"title":{},"content":{"510":{"position":[[238,16]]}},"keywords":{}}],["prefix}/agentavailabilityev",{"_index":4056,"title":{},"content":{"541":{"position":[[236,33]]}},"keywords":{}}],["prefix}/annot",{"_index":3645,"title":{},"content":{"425":{"position":[[346,21]]},"748":{"position":[[468,21]]}},"keywords":{}}],["prefix}/appl",{"_index":4338,"title":{},"content":{"626":{"position":[[210,22]]}},"keywords":{}}],["prefix}/assigne",{"_index":4022,"title":{},"content":{"527":{"position":[[399,19]]},"535":{"position":[[414,19]]}},"keywords":{}}],["prefix}/attributedefinit",{"_index":5469,"title":{},"content":{"1134":{"position":[[440,30]]}},"keywords":{}}],["prefix}/audit",{"_index":3808,"title":{},"content":{"473":{"position":[[349,15]]}},"keywords":{}}],["prefix}/auditlog",{"_index":5471,"title":{},"content":{"1134":{"position":[[558,19]]}},"keywords":{}}],["prefix}/averagesessionlength",{"_index":3650,"title":{},"content":{"425":{"position":[[600,30]]}},"keywords":{}}],["prefix}/balancetransact",{"_index":5299,"title":{},"content":{"1078":{"position":[[273,29]]}},"keywords":{}}],["prefix}/bankaccount",{"_index":5301,"title":{},"content":{"1078":{"position":[[368,22]]}},"keywords":{}}],["prefix}/block",{"_index":4843,"title":{},"content":{"860":{"position":[[324,16]]},"983":{"position":[[234,16]]}},"keywords":{}}],["prefix}/brand",{"_index":5472,"title":{},"content":{"1134":{"position":[[636,16]]}},"keywords":{}}],["prefix}/campaign",{"_index":3997,"title":{},"content":{"518":{"position":[[1415,19]]},"557":{"position":[[664,18]]},"721":{"position":[[376,18]]},"1086":{"position":[[430,19]]}},"keywords":{}}],["prefix}/channel_annotations_a1",{"_index":5383,"title":{},"content":{"1102":{"position":[[233,32]]}},"keywords":{}}],["prefix}/channel_memb",{"_index":5187,"title":{},"content":{"1016":{"position":[[362,25]]}},"keywords":{}}],["prefix}/charg",{"_index":5303,"title":{},"content":{"1078":{"position":[[449,17]]}},"keywords":{}}],["prefix}/checkoutsess",{"_index":5305,"title":{},"content":{"1078":{"position":[[535,26]]}},"keywords":{}}],["prefix}/checkoutsessionslineitem",{"_index":5307,"title":{},"content":{"1078":{"position":[[641,35]]}},"keywords":{}}],["prefix}/cli",{"_index":4359,"title":{},"content":{"632":{"position":[[273,17]]}},"keywords":{}}],["prefix}/cohort",{"_index":3644,"title":{},"content":{"425":{"position":[[265,17]]}},"keywords":{}}],["prefix}/collection_nam",{"_index":5232,"title":{},"content":{"1037":{"position":[[311,25]]}},"keywords":{}}],["prefix}/compani",{"_index":4433,"title":{},"content":{"686":{"position":[[378,19]]}},"keywords":{}}],["prefix}/companyattribut",{"_index":4441,"title":{},"content":{"686":{"position":[[824,27]]}},"keywords":{}}],["prefix}/companyseg",{"_index":4435,"title":{},"content":{"686":{"position":[[465,25]]}},"keywords":{}}],["prefix}/contact",{"_index":4439,"title":{},"content":{"686":{"position":[[735,18]]}},"keywords":{}}],["prefix}/contactattribut",{"_index":4443,"title":{},"content":{"686":{"position":[[922,27]]}},"keywords":{}}],["prefix}/convers",{"_index":4436,"title":{},"content":{"686":{"position":[[555,23]]}},"keywords":{}}],["prefix}/conversationpart",{"_index":4438,"title":{},"content":{"686":{"position":[[648,27]]}},"keywords":{}}],["prefix}/coupon",{"_index":5309,"title":{},"content":{"1078":{"position":[[735,17]]}},"keywords":{}}],["prefix}/custom",{"_index":3767,"title":{},"content":{"455":{"position":[[314,19]]},"1078":{"position":[[932,19]]}},"keywords":{}}],["prefix}/customerbalancetransact",{"_index":5311,"title":{},"content":{"1078":{"position":[[834,37]]}},"keywords":{}}],["prefix}/customrol",{"_index":5474,"title":{},"content":{"1134":{"position":[[717,21]]}},"keywords":{}}],["prefix}/disput",{"_index":5313,"title":{},"content":{"1078":{"position":[[1011,18]]}},"keywords":{}}],["prefix}/ev",{"_index":3646,"title":{},"content":{"425":{"position":[[425,16]]},"467":{"position":[[247,16]]},"998":{"position":[[274,16]]},"1078":{"position":[[1087,16]]}},"keywords":{}}],["prefix}/featur",{"_index":4931,"title":{},"content":{"892":{"position":[[193,17]]}},"keywords":{}}],["prefix}/featureev",{"_index":4938,"title":{},"content":{"892":{"position":[[453,23]]}},"keywords":{}}],["prefix}/group",{"_index":5478,"title":{},"content":{"1134":{"position":[[943,16]]}},"keywords":{}}],["prefix}/groupmembership",{"_index":5477,"title":{},"content":{"1134":{"position":[[833,26]]}},"keywords":{}}],["prefix}/guid",{"_index":4932,"title":{},"content":{"892":{"position":[[243,15]]}},"keywords":{}}],["prefix}/guideev",{"_index":4942,"title":{},"content":{"892":{"position":[[575,21]]}},"keywords":{}}],["prefix}/invoic",{"_index":5318,"title":{},"content":{"1078":{"position":[[1348,18]]}},"keywords":{}}],["prefix}/invoice_item",{"_index":5315,"title":{},"content":{"1078":{"position":[[1168,23]]}},"keywords":{}}],["prefix}/invoicelineitem",{"_index":5317,"title":{},"content":{"1078":{"position":[[1262,26]]}},"keywords":{}}],["prefix}/issu",{"_index":4509,"title":{},"content":{"713":{"position":[[243,16]]}},"keywords":{}}],["prefix}/item",{"_index":3777,"title":{},"content":{"461":{"position":[[311,15]]}},"keywords":{}}],["prefix}/lead",{"_index":4557,"title":{},"content":{"742":{"position":[[302,15]]}},"keywords":{}}],["prefix}/list",{"_index":4464,"title":{},"content":{"707":{"position":[[234,15]]},"1029":{"position":[[242,15]]}},"keywords":{}}],["prefix}/macro",{"_index":5480,"title":{},"content":{"1134":{"position":[[1043,16]]}},"keywords":{}}],["prefix}/org",{"_index":4264,"title":{},"content":{"594":{"position":[[1441,14]]}},"keywords":{}}],["prefix}/organ",{"_index":5481,"title":{},"content":{"1134":{"position":[[1150,23]]}},"keywords":{}}],["prefix}/organizationmembership",{"_index":5483,"title":{},"content":{"1134":{"position":[[1275,33]]}},"keywords":{}}],["prefix}/orgs_run",{"_index":4262,"title":{},"content":{"594":{"position":[[1370,19]]}},"keywords":{}}],["prefix}/orgs_runs_runresult",{"_index":4260,"title":{},"content":{"594":{"position":[[1281,30]]}},"keywords":{}}],["prefix}/orgs_runs_runresults_queryresult",{"_index":4258,"title":{},"content":{"594":{"position":[[1166,43]]}},"keywords":{}}],["prefix}/pag",{"_index":4933,"title":{},"content":{"892":{"position":[[290,14]]}},"keywords":{}}],["prefix}/pageev",{"_index":4936,"title":{},"content":{"892":{"position":[[392,20]]}},"keywords":{}}],["prefix}/paymentint",{"_index":5320,"title":{},"content":{"1078":{"position":[[1433,24]]}},"keywords":{}}],["prefix}/payout",{"_index":5322,"title":{},"content":{"1078":{"position":[[1516,17]]}},"keywords":{}}],["prefix}/plan",{"_index":5323,"title":{},"content":{"1078":{"position":[[1590,15]]}},"keywords":{}}],["prefix}/pollev",{"_index":4944,"title":{},"content":{"892":{"position":[[634,20]]}},"keywords":{}}],["prefix}/post",{"_index":5484,"title":{},"content":{"1134":{"position":[[1391,15]]}},"keywords":{}}],["prefix}/postcom",{"_index":5486,"title":{},"content":{"1134":{"position":[[1472,22]]}},"keywords":{}}],["prefix}/postcommentvot",{"_index":5488,"title":{},"content":{"1134":{"position":[[1565,26]]}},"keywords":{}}],["prefix}/postvot",{"_index":5490,"title":{},"content":{"1134":{"position":[[1654,19]]}},"keywords":{}}],["prefix}/product",{"_index":5324,"title":{},"content":{"1078":{"position":[[1665,18]]}},"keywords":{}}],["prefix}/profil",{"_index":3504,"title":{},"content":{"388":{"position":[[489,18]]}},"keywords":{}}],["prefix}/promotioncod",{"_index":5326,"title":{},"content":{"1078":{"position":[[1750,24]]}},"keywords":{}}],["prefix}/purchas",{"_index":4461,"title":{},"content":{"701":{"position":[[237,18]]}},"keywords":{}}],["prefix}/refund",{"_index":5328,"title":{},"content":{"1078":{"position":[[1833,17]]}},"keywords":{}}],["prefix}/report",{"_index":4934,"title":{},"content":{"892":{"position":[[338,16]]}},"keywords":{}}],["prefix}/satisfactionr",{"_index":5492,"title":{},"content":{"1134":{"position":[[1771,29]]}},"keywords":{}}],["prefix}/schedul",{"_index":5493,"title":{},"content":{"1134":{"position":[[1862,19]]}},"keywords":{}}],["prefix}/seg",{"_index":4444,"title":{},"content":{"686":{"position":[[1009,18]]}},"keywords":{}}],["prefix}/sit",{"_index":4313,"title":{},"content":{"612":{"position":[[414,15]]}},"keywords":{}}],["prefix}/slapolicii",{"_index":5495,"title":{},"content":{"1134":{"position":[[1946,22]]}},"keywords":{}}],["prefix}/sourc",{"_index":5228,"title":{},"content":{"1037":{"position":[[11,16]]}},"keywords":{}}],["prefix}/source_collection_on",{"_index":5899,"title":{},"content":{"1232":{"position":[[543,31]]}},"keywords":{}}],["prefix}/source_collection_two",{"_index":5900,"title":{},"content":{"1232":{"position":[[634,31]]}},"keywords":{}}],["prefix}/source_nam",{"_index":6284,"title":{},"content":{"1363":{"position":[[253,21]]}},"keywords":{}}],["prefix}/stori",{"_index":4424,"title":{},"content":{"671":{"position":[[307,17]]}},"keywords":{}}],["prefix}/subscript",{"_index":5331,"title":{},"content":{"1078":{"position":[[2013,23]]}},"keywords":{}}],["prefix}/subscriptionitem",{"_index":5330,"title":{},"content":{"1078":{"position":[[1921,27]]}},"keywords":{}}],["prefix}/survey",{"_index":5275,"title":{},"content":{"1071":{"position":[[373,17]]}},"keywords":{}}],["prefix}/tag",{"_index":4445,"title":{},"content":{"686":{"position":[[1084,14]]},"1134":{"position":[[2025,14]]}},"keywords":{}}],["prefix}/target_nam",{"_index":4141,"title":{},"content":{"566":{"position":[[275,21]]}},"keywords":{}}],["prefix}/team",{"_index":4446,"title":{},"content":{"686":{"position":[[1156,15]]}},"keywords":{}}],["prefix}/ticket",{"_index":5512,"title":{},"content":{"1134":{"position":[[2926,17]]}},"keywords":{}}],["prefix}/ticketaudit",{"_index":5497,"title":{},"content":{"1134":{"position":[[2130,22]]}},"keywords":{}}],["prefix}/ticketcom",{"_index":5499,"title":{},"content":{"1134":{"position":[[2245,24]]}},"keywords":{}}],["prefix}/ticketfield",{"_index":5501,"title":{},"content":{"1134":{"position":[[2360,22]]}},"keywords":{}}],["prefix}/ticketform",{"_index":5503,"title":{},"content":{"1134":{"position":[[2472,21]]}},"keywords":{}}],["prefix}/ticketmetr",{"_index":5505,"title":{},"content":{"1134":{"position":[[2585,23]]}},"keywords":{}}],["prefix}/ticketmetricev",{"_index":5507,"title":{},"content":{"1134":{"position":[[2700,28]]}},"keywords":{}}],["prefix}/ticketskip",{"_index":5509,"title":{},"content":{"1134":{"position":[[2818,21]]}},"keywords":{}}],["prefix}/trackev",{"_index":4940,"title":{},"content":{"892":{"position":[[515,21]]}},"keywords":{}}],["prefix}/transact",{"_index":4830,"title":{},"content":{"852":{"position":[[352,21]]},"886":{"position":[[332,22]]}},"keywords":{}}],["prefix}/transf",{"_index":5332,"title":{},"content":{"1078":{"position":[[2097,19]]}},"keywords":{}}],["prefix}/us",{"_index":3280,"title":{},"content":{"360":{"position":[[231,15]]},"403":{"position":[[458,15]]},"783":{"position":[[255,15]]},"1134":{"position":[[3028,15]]},"1254":{"position":[[295,15]]}},"keywords":{}}],["prefix}/workord",{"_index":5148,"title":{},"content":{"992":{"position":[[274,19]]},"1010":{"position":[[510,19]]}},"keywords":{}}],["prefix}/workorderlineitem",{"_index":5150,"title":{},"content":{"992":{"position":[[340,27]]},"1010":{"position":[[628,27]]}},"keywords":{}}],["preorder",{"_index":6324,"title":{},"content":{"1379":{"position":[[2264,8]]},"1403":{"position":[[2264,8]]},"1414":{"position":[[2264,8]]}},"keywords":{}}],["prepar",{"_index":2131,"title":{"191":{"position":[[0,7]]}},"content":{"200":{"position":[[4,7]]},"240":{"position":[[148,9]]},"1140":{"position":[[1522,7]]},"1209":{"position":[[342,7]]},"1292":{"position":[[6075,7]]},"1306":{"position":[[6075,7]]},"1316":{"position":[[1522,7]]},"1329":{"position":[[6075,7]]},"1340":{"position":[[1522,7]]},"1351":{"position":[[1522,7]]},"1379":{"position":[[2301,7]]},"1403":{"position":[[2301,7]]},"1414":{"position":[[2301,7]]},"1431":{"position":[[1545,7]]},"1439":{"position":[[566,8]]},"1442":{"position":[[1126,9]]}},"keywords":{}}],["prepend",{"_index":4290,"title":{},"content":{"601":{"position":[[332,7]]}},"keywords":{}}],["prerequisit",{"_index":2042,"title":{"179":{"position":[[0,14]]},"188":{"position":[[0,14]]},"199":{"position":[[0,14]]},"215":{"position":[[0,14]]},"234":{"position":[[0,14]]},"262":{"position":[[0,14]]},"266":{"position":[[0,14]]},"273":{"position":[[0,14]]},"283":{"position":[[0,14]]},"288":{"position":[[0,14]]},"299":{"position":[[0,14]]},"347":{"position":[[0,14]]},"357":{"position":[[0,14]]},"366":{"position":[[0,14]]},"375":{"position":[[0,14]]},"382":{"position":[[0,14]]},"390":{"position":[[0,14]]},"395":{"position":[[0,14]]},"400":{"position":[[0,14]]},"405":{"position":[[0,14]]},"413":{"position":[[0,14]]},"422":{"position":[[0,14]]},"428":{"position":[[0,14]]},"435":{"position":[[0,14]]},"444":{"position":[[0,14]]},"452":{"position":[[0,14]]},"458":{"position":[[0,14]]},"464":{"position":[[0,14]]},"471":{"position":[[0,14]]},"475":{"position":[[0,14]]},"494":{"position":[[0,14]]},"500":{"position":[[0,14]]},"507":{"position":[[0,14]]},"513":{"position":[[0,14]]},"522":{"position":[[0,14]]},"530":{"position":[[0,14]]},"538":{"position":[[0,14]]},"543":{"position":[[0,14]]},"551":{"position":[[0,14]]},"562":{"position":[[0,14]]},"569":{"position":[[0,14]]},"581":{"position":[[0,14]]},"591":{"position":[[0,14]]},"597":{"position":[[0,14]]},"607":{"position":[[0,14]]},"614":{"position":[[0,14]]},"623":{"position":[[0,14]]},"629":{"position":[[0,14]]},"635":{"position":[[0,14]]},"643":{"position":[[0,14]]},"650":{"position":[[0,14]]},"668":{"position":[[0,14]]},"683":{"position":[[0,14]]},"698":{"position":[[0,14]]},"704":{"position":[[0,14]]},"710":{"position":[[0,14]]},"716":{"position":[[0,14]]},"723":{"position":[[0,14]]},"731":{"position":[[0,14]]},"739":{"position":[[0,14]]},"745":{"position":[[0,14]]},"750":{"position":[[0,14]]},"766":{"position":[[0,14]]},"780":{"position":[[0,14]]},"789":{"position":[[0,14]]},"807":{"position":[[0,14]]},"823":{"position":[[0,14]]},"839":{"position":[[0,14]]},"848":{"position":[[0,14]]},"855":{"position":[[0,14]]},"862":{"position":[[0,14]]},"874":{"position":[[0,14]]},"883":{"position":[[0,14]]},"889":{"position":[[0,14]]},"894":{"position":[[0,14]]},"903":{"position":[[0,14]]},"915":{"position":[[0,14]]},"930":{"position":[[0,14]]},"940":{"position":[[0,14]]},"957":{"position":[[0,14]]},"963":{"position":[[0,14]]},"980":{"position":[[0,14]]},"986":{"position":[[0,14]]},"995":{"position":[[0,14]]},"1001":{"position":[[0,14]]},"1013":{"position":[[0,14]]},"1018":{"position":[[0,14]]},"1026":{"position":[[0,14]]},"1031":{"position":[[0,14]]},"1040":{"position":[[0,14]]},"1050":{"position":[[0,14]]},"1058":{"position":[[0,14]]},"1066":{"position":[[0,14]]},"1074":{"position":[[0,14]]},"1081":{"position":[[0,14]]},"1089":{"position":[[0,14]]},"1105":{"position":[[0,14]]},"1111":{"position":[[0,14]]},"1118":{"position":[[0,14]]},"1122":{"position":[[0,14]]},"1129":{"position":[[0,14]]},"1136":{"position":[[0,14]]},"1142":{"position":[[0,14]]},"1149":{"position":[[0,14]]},"1160":{"position":[[0,14]]},"1168":{"position":[[0,14]]},"1176":{"position":[[0,14]]},"1185":{"position":[[0,14]]},"1194":{"position":[[0,14]]},"1203":{"position":[[0,14]]},"1211":{"position":[[0,14]]},"1218":{"position":[[0,14]]},"1226":{"position":[[0,14]]},"1236":{"position":[[0,14]]},"1243":{"position":[[0,14]]},"1251":{"position":[[0,14]]},"1258":{"position":[[0,14]]},"1264":{"position":[[0,14]]},"1274":{"position":[[0,14]]},"1281":{"position":[[0,14]]},"1295":{"position":[[0,14]]},"1309":{"position":[[0,14]]},"1319":{"position":[[0,14]]},"1332":{"position":[[0,14]]},"1343":{"position":[[0,14]]},"1354":{"position":[[0,14]]},"1361":{"position":[[0,14]]},"1365":{"position":[[0,14]]},"1372":{"position":[[0,14]]},"1382":{"position":[[0,14]]},"1396":{"position":[[0,14]]},"1406":{"position":[[0,14]]},"1417":{"position":[[0,14]]},"1425":{"position":[[0,14]]}},"content":{"200":{"position":[[71,13]]},"211":{"position":[[434,13]]},"225":{"position":[[28,14]]},"290":{"position":[[1088,14]]},"291":{"position":[[475,15]]},"302":{"position":[[475,15]]},"347":{"position":[[57,13]]},"367":{"position":[[13,14]]},"475":{"position":[[52,14]]},"513":{"position":[[151,13]]},"522":{"position":[[152,13]]},"530":{"position":[[152,13]]},"551":{"position":[[150,13]]},"569":{"position":[[169,13]]},"571":{"position":[[323,14]]},"581":{"position":[[521,14]]},"582":{"position":[[26,14]]},"597":{"position":[[52,14]]},"607":{"position":[[167,13]]},"609":{"position":[[163,14]]},"614":{"position":[[152,13]]},"617":{"position":[[265,14]]},"643":{"position":[[126,13]]},"650":{"position":[[125,13]]},"716":{"position":[[152,13]]},"731":{"position":[[123,13]]},"761":{"position":[[256,13]]},"764":{"position":[[911,13]]},"774":{"position":[[256,13]]},"777":{"position":[[911,13]]},"801":{"position":[[262,13]]},"804":{"position":[[909,13]]},"816":{"position":[[262,13]]},"819":{"position":[[909,13]]},"832":{"position":[[262,13]]},"835":{"position":[[909,13]]},"894":{"position":[[69,14]]},"917":{"position":[[36,13]]},"965":{"position":[[36,13]]},"1081":{"position":[[1,13]]},"1129":{"position":[[142,13]]},"1243":{"position":[[1339,13]]},"1245":{"position":[[217,14]]},"1383":{"position":[[13,14]]}},"keywords":{}}],["presenc",{"_index":1335,"title":{},"content":{"94":{"position":[[194,8]]},"922":{"position":[[2834,8]]}},"keywords":{}}],["present",{"_index":841,"title":{},"content":{"56":{"position":[[1273,9]]},"67":{"position":[[21,7]]},"95":{"position":[[256,8]]},"120":{"position":[[632,9]]},"129":{"position":[[428,7]]},"164":{"position":[[263,7]]},"166":{"position":[[241,8]]},"211":{"position":[[338,7]]},"228":{"position":[[421,7],[662,7]]},"229":{"position":[[306,8],[399,7]]},"230":{"position":[[30,7]]},"296":{"position":[[2271,8]]},"373":{"position":[[603,8],[730,7]]},"379":{"position":[[531,8]]},"489":{"position":[[54,7]]},"662":{"position":[[54,7]]},"677":{"position":[[54,7]]},"692":{"position":[[54,7]]},"761":{"position":[[155,7]]},"762":{"position":[[89,7]]},"774":{"position":[[155,7]]},"775":{"position":[[89,7]]},"801":{"position":[[155,7]]},"802":{"position":[[89,7]]},"816":{"position":[[155,7]]},"817":{"position":[[89,7]]},"832":{"position":[[155,7]]},"833":{"position":[[89,7]]},"859":{"position":[[685,7]]},"909":{"position":[[293,7]]},"925":{"position":[[293,7]]},"936":{"position":[[293,7]]},"952":{"position":[[293,7]]},"970":{"position":[[293,7]]},"985":{"position":[[74,7]]},"1000":{"position":[[74,7]]},"1467":{"position":[[1771,8]]},"1480":{"position":[[566,9]]}},"keywords":{}}],["preserv",{"_index":4266,"title":{},"content":{"595":{"position":[[758,9]]},"977":{"position":[[516,10]]},"1140":{"position":[[1569,8]]},"1292":{"position":[[2977,8]]},"1306":{"position":[[2977,8]]},"1316":{"position":[[1569,8]]},"1317":{"position":[[565,9]]},"1329":{"position":[[2977,8]]},"1340":{"position":[[1569,8]]},"1341":{"position":[[565,9]]},"1351":{"position":[[1569,8]]},"1352":{"position":[[565,9]]},"1379":{"position":[[2346,8]]},"1403":{"position":[[2346,8]]},"1414":{"position":[[2346,8]]},"1431":{"position":[[1592,8]]},"1432":{"position":[[565,9]]},"1444":{"position":[[912,9]]},"1465":{"position":[[864,10]]}},"keywords":{}}],["press",{"_index":1985,"title":{},"content":{"169":{"position":[[1639,5]]},"205":{"position":[[100,8],[199,5],[219,8]]},"206":{"position":[[821,5]]},"209":{"position":[[58,5]]},"239":{"position":[[502,5],[2891,5]]},"240":{"position":[[4002,8],[4093,5]]},"253":{"position":[[1051,8]]},"296":{"position":[[7496,5]]},"313":{"position":[[1051,8]]},"340":{"position":[[499,5]]},"690":{"position":[[36,5]]}},"keywords":{}}],["pressur",{"_index":1694,"title":{},"content":{"124":{"position":[[416,8]]},"163":{"position":[[1123,8]]}},"keywords":{}}],["pretti",{"_index":2611,"title":{},"content":{"240":{"position":[[4279,6]]},"323":{"position":[[1594,6]]}},"keywords":{}}],["prev",{"_index":6069,"title":{},"content":{"1292":{"position":[[3024,4]]},"1306":{"position":[[3024,4]]},"1329":{"position":[[3024,4]]}},"keywords":{}}],["prevent",{"_index":380,"title":{},"content":{"13":{"position":[[293,7],[674,7]]},"55":{"position":[[736,7]]},"166":{"position":[[36,7]]},"183":{"position":[[2626,7]]},"185":{"position":[[222,7]]},"208":{"position":[[727,7]]},"239":{"position":[[2447,10]]},"305":{"position":[[251,7]]},"419":{"position":[[472,7]]},"440":{"position":[[488,7]]},"504":{"position":[[416,7]]},"547":{"position":[[473,7]]},"639":{"position":[[414,7]]},"660":{"position":[[193,7]]},"945":{"position":[[856,7]]},"1023":{"position":[[453,7]]},"1156":{"position":[[686,8]]},"1182":{"position":[[135,7]]},"1191":{"position":[[135,7]]},"1262":{"position":[[135,7]]},"1389":{"position":[[135,7]]},"1437":{"position":[[911,9],[1577,8]]},"1447":{"position":[[176,7]]}},"keywords":{}}],["preview",{"_index":1025,"title":{},"content":{"68":{"position":[[627,7]]},"148":{"position":[[159,7]]},"149":{"position":[[1149,7]]},"183":{"position":[[4040,7],[4069,7]]},"210":{"position":[[409,7],[1605,7],[3936,7]]},"229":{"position":[[600,7]]},"255":{"position":[[85,7],[155,7]]},"268":{"position":[[1763,7],[1803,7],[1837,7]]},"269":{"position":[[1220,7],[1260,7],[1294,7]]},"270":{"position":[[1832,7],[1873,7],[1909,7]]},"295":{"position":[[1329,7]]},"296":{"position":[[6969,7]]},"316":{"position":[[85,7],[157,7]]},"486":{"position":[[452,8]]},"658":{"position":[[452,8]]},"674":{"position":[[452,8]]},"675":{"position":[[385,7]]},"689":{"position":[[452,8]]},"1118":{"position":[[957,7]]}},"keywords":{}}],["previou",{"_index":741,"title":{},"content":{"42":{"position":[[492,8]]},"163":{"position":[[1083,8]]},"192":{"position":[[944,8]]},"239":{"position":[[484,8]]},"240":{"position":[[2665,8]]},"268":{"position":[[127,8]]},"269":{"position":[[134,8]]},"281":{"position":[[219,8],[2214,8]]},"309":{"position":[[3239,8]]},"478":{"position":[[151,8]]},"554":{"position":[[540,8]]},"599":{"position":[[151,8]]},"789":{"position":[[940,8]]},"909":{"position":[[885,8]]},"925":{"position":[[885,8]]},"936":{"position":[[885,8]]},"952":{"position":[[885,8]]},"970":{"position":[[885,8]]},"1036":{"position":[[255,8]]},"1201":{"position":[[185,8]]},"1293":{"position":[[185,8]]},"1307":{"position":[[185,8]]},"1317":{"position":[[185,8],[466,8]]},"1330":{"position":[[185,8]]},"1341":{"position":[[185,8],[466,8]]},"1352":{"position":[[185,8],[466,8]]},"1359":{"position":[[185,8]]},"1380":{"position":[[185,8]]},"1404":{"position":[[185,8]]},"1415":{"position":[[185,8]]},"1432":{"position":[[185,8],[466,8]]},"1442":{"position":[[1425,8],[1745,9]]},"1443":{"position":[[371,8]]},"1471":{"position":[[981,8]]}},"keywords":{}}],["previous",{"_index":417,"title":{},"content":{"13":{"position":[[1791,11]]},"121":{"position":[[629,10]]},"218":{"position":[[714,11]]},"224":{"position":[[935,11]]},"291":{"position":[[953,11]]},"295":{"position":[[1144,10]]},"302":{"position":[[952,11]]},"574":{"position":[[494,10]]},"752":{"position":[[920,10]]},"791":{"position":[[954,10]]},"840":{"position":[[1856,11],[2088,11],[2153,11]]},"849":{"position":[[2904,10],[3228,11],[3293,11]]},"1020":{"position":[[415,10],[896,10]]},"1138":{"position":[[1813,10]]},"1201":{"position":[[406,10]]},"1286":{"position":[[2648,10]]},"1301":{"position":[[2484,10]]},"1313":{"position":[[1357,10]]},"1317":{"position":[[635,11],[859,11]]},"1325":{"position":[[2648,10]]},"1337":{"position":[[1357,10]]},"1341":{"position":[[635,11],[859,11]]},"1348":{"position":[[1357,10]]},"1352":{"position":[[635,11],[859,11]]},"1367":{"position":[[165,10]]},"1376":{"position":[[563,10]]},"1400":{"position":[[563,10]]},"1411":{"position":[[563,10]]},"1427":{"position":[[1117,10]]},"1432":{"position":[[649,11],[887,11]]}},"keywords":{}}],["previouslybackup",{"_index":4673,"title":{},"content":{"767":{"position":[[1543,16]]},"824":{"position":[[1607,16]]}},"keywords":{}}],["price",{"_index":1922,"title":{},"content":{"162":{"position":[[1873,6],[2040,5],[2082,6],[2159,6],[2223,6],[2274,6]]},"168":{"position":[[97,7]]},"320":{"position":[[2446,7],[2492,7]]},"323":{"position":[[2063,7]]},"330":{"position":[[453,7]]},"1388":{"position":[[137,6]]}},"keywords":{}}],["pricesattach",{"_index":3769,"title":{},"content":{"457":{"position":[[130,14]]}},"keywords":{}}],["primari",{"_index":432,"title":{},"content":{"14":{"position":[[692,7],[875,7],[1199,7]]},"42":{"position":[[225,7]]},"69":{"position":[[672,7]]},"72":{"position":[[741,7]]},"75":{"position":[[183,7]]},"94":{"position":[[673,7]]},"122":{"position":[[860,7]]},"138":{"position":[[1151,7],[1196,7]]},"141":{"position":[[1240,7],[1279,7]]},"142":{"position":[[1120,7],[1173,7]]},"236":{"position":[[2216,7],[3001,7],[3381,7]]},"237":{"position":[[1228,7]]},"278":{"position":[[1062,7]]},"279":{"position":[[1288,7]]},"280":{"position":[[1547,7]]},"319":{"position":[[439,7]]},"326":{"position":[[573,9]]},"367":{"position":[[643,7]]},"406":{"position":[[103,7]]},"752":{"position":[[291,7]]},"753":{"position":[[947,7]]},"767":{"position":[[1139,7],[1927,7]]},"791":{"position":[[244,7]]},"792":{"position":[[1867,7]]},"793":{"position":[[918,7]]},"808":{"position":[[864,7]]},"824":{"position":[[1205,7],[1989,7]]},"864":{"position":[[882,7]]},"904":{"position":[[1743,7]]},"911":{"position":[[520,7]]},"917":{"position":[[1252,7]]},"918":{"position":[[2035,7]]},"919":{"position":[[2090,7]]},"927":{"position":[[520,7]]},"931":{"position":[[1405,7]]},"938":{"position":[[520,7]]},"954":{"position":[[520,7]]},"965":{"position":[[1252,7]]},"972":{"position":[[520,7]]},"974":{"position":[[250,7]]},"1040":{"position":[[115,7],[190,7]]},"1042":{"position":[[723,7]]},"1043":{"position":[[1387,7]]},"1045":{"position":[[1196,7],[1258,7]]},"1047":{"position":[[81,7],[245,7]]},"1050":{"position":[[115,7],[190,7]]},"1051":{"position":[[1649,7]]},"1053":{"position":[[1196,7],[1258,7]]},"1055":{"position":[[81,7],[245,7]]},"1058":{"position":[[115,7],[190,7]]},"1059":{"position":[[1442,7]]},"1061":{"position":[[1196,7],[1258,7]]},"1063":{"position":[[81,7],[245,7]]},"1140":{"position":[[1624,7]]},"1183":{"position":[[78,7]]},"1209":{"position":[[364,7]]},"1292":{"position":[[3069,7]]},"1306":{"position":[[3069,7]]},"1316":{"position":[[1624,7]]},"1329":{"position":[[3069,7]]},"1340":{"position":[[1624,7]]},"1351":{"position":[[1624,7]]},"1370":{"position":[[780,7]]},"1379":{"position":[[2393,7]]},"1403":{"position":[[2393,7]]},"1414":{"position":[[2393,7]]},"1431":{"position":[[1647,7]]}},"keywords":{}}],["primarili",{"_index":3854,"title":{},"content":{"485":{"position":[[264,9]]},"657":{"position":[[264,9]]},"673":{"position":[[264,9]]},"688":{"position":[[264,9]]}},"keywords":{}}],["primary_key",{"_index":5254,"title":{},"content":{"1045":{"position":[[1183,12]]},"1046":{"position":[[309,12]]},"1053":{"position":[[1183,12]]},"1054":{"position":[[309,12]]},"1061":{"position":[[1183,12]]},"1062":{"position":[[309,12]]}},"keywords":{}}],["primit",{"_index":1936,"title":{},"content":{"164":{"position":[[252,10]]},"319":{"position":[[447,9]]},"321":{"position":[[1086,11]]},"1164":{"position":[[109,9]]},"1172":{"position":[[155,9],[184,9]]},"1222":{"position":[[155,9],[184,9]]}},"keywords":{}}],["princip",{"_index":1993,"title":{},"content":{"171":{"position":[[147,9],[205,10]]},"173":{"position":[[987,9]]},"436":{"position":[[915,9]]}},"keywords":{}}],["principl",{"_index":3852,"title":{},"content":{"483":{"position":[[285,9]]}},"keywords":{}}],["print",{"_index":2576,"title":{"284":{"position":[[0,5]]}},"content":{"237":{"position":[[3257,5],[3430,6]]},"284":{"position":[[508,5],[596,5]]},"1379":{"position":[[2441,5]]},"1403":{"position":[[2441,5]]},"1414":{"position":[[2441,5]]},"1471":{"position":[[61,5],[661,8]]}},"keywords":{}}],["print(f"receiv",{"_index":2671,"title":{},"content":{"250":{"position":[[1005,21]]}},"keywords":{}}],["printf('$%.2f",{"_index":1372,"title":{},"content":{"96":{"position":[[252,15]]}},"keywords":{}}],["prior",{"_index":2846,"title":{},"content":{"279":{"position":[[314,5]]},"483":{"position":[[170,5]]},"554":{"position":[[224,5]]},"578":{"position":[[226,5]]},"891":{"position":[[235,5]]},"922":{"position":[[660,5]]},"1140":{"position":[[1678,5]]},"1203":{"position":[[411,5]]},"1243":{"position":[[715,5],[959,5]]},"1316":{"position":[[1678,5]]},"1340":{"position":[[1678,5]]},"1351":{"position":[[1678,5]]},"1379":{"position":[[2497,5]]},"1403":{"position":[[2497,5]]},"1414":{"position":[[2497,5]]},"1431":{"position":[[1701,5]]},"1434":{"position":[[543,5],[610,5]]},"1442":{"position":[[1494,5],[1593,5]]},"1443":{"position":[[877,5]]},"1452":{"position":[[834,5]]},"1453":{"position":[[207,5]]}},"keywords":{}}],["priorit",{"_index":802,"title":{},"content":{"53":{"position":[[567,10]]},"84":{"position":[[336,11]]},"324":{"position":[[259,11]]},"363":{"position":[[45,10]]}},"keywords":{}}],["prioriti",{"_index":1362,"title":{"111":{"position":[[5,9]]}},"content":{"94":{"position":[[3023,8],[3161,9]]},"109":{"position":[[790,9]]},"111":{"position":[[369,10],[425,8],[482,10],[551,8],[628,8]]},"120":{"position":[[2198,8],[2288,9],[2413,8],[2598,9]]}},"keywords":{}}],["prioritiesissu",{"_index":4473,"title":{},"content":{"709":{"position":[[272,15]]}},"keywords":{}}],["priorto",{"_index":1713,"title":{},"content":{"128":{"position":[[295,7]]}},"keywords":{}}],["privat",{"_index":1230,"title":{},"content":{"83":{"position":[[1269,7],[1490,7],[2345,7]]},"88":{"position":[[499,7]]},"221":{"position":[[1055,7],[1113,7],[1310,7]]},"222":{"position":[[300,7],[358,7],[555,7]]},"223":{"position":[[266,7],[324,7],[521,7]]},"224":{"position":[[319,7],[377,7],[574,7]]},"225":{"position":[[404,7],[454,7]]},"301":{"position":[[752,7]]},"370":{"position":[[1913,7],[1925,7]]},"371":{"position":[[409,7],[1264,7]]},"454":{"position":[[263,7],[285,7]]},"546":{"position":[[327,7],[367,7]]},"594":{"position":[[315,7],[355,7]]},"643":{"position":[[94,7]]},"645":{"position":[[68,7],[125,7],[289,7]]},"646":{"position":[[426,7],[466,7]]},"647":{"position":[[135,7]]},"650":{"position":[[93,7]]},"652":{"position":[[68,7],[125,7],[289,7]]},"654":{"position":[[147,7],[187,7]]},"655":{"position":[[141,7]]},"704":{"position":[[65,7]]},"868":{"position":[[377,7]]},"880":{"position":[[378,7]]},"1066":{"position":[[41,7]]},"1067":{"position":[[57,7],[529,7],[645,7]]},"1070":{"position":[[383,7],[489,7],[607,7]]},"1138":{"position":[[1203,7],[1215,7]]},"1139":{"position":[[296,7],[1151,7]]},"1272":{"position":[[207,7],[239,7]]},"1289":{"position":[[1558,7],[1625,7]]},"1298":{"position":[[266,7],[324,7],[521,7]]},"1303":{"position":[[1229,7]]},"1310":{"position":[[879,7],[946,7]]},"1322":{"position":[[300,7],[358,7],[555,7]]},"1335":{"position":[[300,7],[358,7],[555,7]]},"1346":{"position":[[266,7],[324,7],[521,7],[1284,7],[1351,7]]},"1384":{"position":[[259,7],[1120,7]]},"1386":{"position":[[1027,7]]},"1387":{"position":[[858,7],[914,7]]},"1392":{"position":[[233,7]]}},"keywords":{}}],["private_key",{"_index":3762,"title":{},"content":{"454":{"position":[[250,12]]},"455":{"position":[[161,12]]}},"keywords":{}}],["privatekey",{"_index":1240,"title":{},"content":{"83":{"position":[[1460,11]]},"225":{"position":[[418,11]]},"371":{"position":[[379,11]]},"868":{"position":[[350,11]]},"880":{"position":[[351,11]]},"1139":{"position":[[266,11]]},"1387":{"position":[[833,11]]}},"keywords":{}}],["priveleg",{"_index":6253,"title":{},"content":{"1303":{"position":[[1553,10]]}},"keywords":{}}],["privileg",{"_index":2564,"title":{},"content":{"236":{"position":[[3421,10]]},"237":{"position":[[701,9],[1543,10],[1638,10]]},"242":{"position":[[455,10],[495,10],[566,10]]},"367":{"position":[[514,10],[683,10]]},"645":{"position":[[252,11]]},"652":{"position":[[252,11]]},"871":{"position":[[71,10]]},"904":{"position":[[1614,10],[1783,10]]},"917":{"position":[[522,10],[1154,11],[1292,10]]},"918":{"position":[[1906,10],[2075,10]]},"919":{"position":[[1059,10],[1705,10],[2130,10]]},"931":{"position":[[1276,10],[1445,10]]},"943":{"position":[[118,10],[326,10]]},"944":{"position":[[265,10],[430,10]]},"965":{"position":[[522,10],[1154,11],[1292,10]]},"1140":{"position":[[1726,10]]},"1194":{"position":[[153,10],[224,12],[245,9],[367,11],[429,10]]},"1292":{"position":[[3113,10]]},"1303":{"position":[[1301,10]]},"1306":{"position":[[3113,10]]},"1316":{"position":[[1726,10]]},"1329":{"position":[[3113,10]]},"1340":{"position":[[1726,10]]},"1351":{"position":[[1726,10]]},"1379":{"position":[[2548,10]]},"1403":{"position":[[2548,10]]},"1414":{"position":[[2548,10]]},"1418":{"position":[[160,10],[204,10],[225,9]]},"1431":{"position":[[1749,10]]}},"keywords":{}}],["privilege_ch",{"_index":6077,"title":{},"content":{"1292":{"position":[[3169,13]]},"1306":{"position":[[3169,13]]},"1329":{"position":[[3169,13]]}},"keywords":{}}],["privileges.permiss",{"_index":4585,"title":{},"content":{"750":{"position":[[820,21]]},"766":{"position":[[820,21]]},"789":{"position":[[1221,21]]},"807":{"position":[[808,21]]},"823":{"position":[[808,21]]}},"keywords":{}}],["pro",{"_index":4395,"title":{},"content":{"649":{"position":[[551,3],[590,3]]}},"keywords":{}}],["probabl",{"_index":2482,"title":{},"content":{"228":{"position":[[575,8]]}},"keywords":{}}],["problem",{"_index":738,"title":{},"content":{"41":{"position":[[685,8]]},"106":{"position":[[760,8]]},"158":{"position":[[244,8]]},"281":{"position":[[460,7]]},"328":{"position":[[51,8]]},"660":{"position":[[201,8]]},"910":{"position":[[225,7]]},"926":{"position":[[225,7]]},"937":{"position":[[225,7]]},"953":{"position":[[225,7]]},"971":{"position":[[225,7]]}},"keywords":{}}],["proc",{"_index":6325,"title":{},"content":{"1379":{"position":[[2598,4]]},"1403":{"position":[[2598,4]]},"1414":{"position":[[2598,4]]}},"keywords":{}}],["proce",{"_index":1812,"title":{},"content":{"140":{"position":[[477,7]]},"183":{"position":[[486,7]]},"267":{"position":[[854,7]]},"515":{"position":[[995,7]]},"762":{"position":[[460,8]]},"775":{"position":[[460,8]]},"802":{"position":[[460,8]]},"817":{"position":[[460,8]]},"833":{"position":[[460,8]]},"1201":{"position":[[121,7]]},"1293":{"position":[[121,7]]},"1307":{"position":[[121,7]]},"1317":{"position":[[121,7]]},"1330":{"position":[[121,7]]},"1341":{"position":[[121,7]]},"1352":{"position":[[121,7]]},"1359":{"position":[[121,7]]},"1380":{"position":[[121,7]]},"1404":{"position":[[121,7]]},"1415":{"position":[[121,7]]},"1432":{"position":[[121,7]]},"1443":{"position":[[1026,8]]}},"keywords":{}}],["procedur",{"_index":2170,"title":{},"content":{"193":{"position":[[703,10]]},"319":{"position":[[605,10]]},"330":{"position":[[362,9]]},"1140":{"position":[[1771,9]]},"1292":{"position":[[3228,9]]},"1306":{"position":[[3228,9]]},"1316":{"position":[[1771,9]]},"1329":{"position":[[3228,9]]},"1340":{"position":[[1771,9]]},"1351":{"position":[[1771,9]]},"1379":{"position":[[2643,9]]},"1403":{"position":[[2643,9]]},"1414":{"position":[[2643,9]]},"1431":{"position":[[1794,9]]}},"keywords":{}}],["process",{"_index":495,"title":{"109":{"position":[[0,10]]},"578":{"position":[[0,10]]}},"content":{"17":{"position":[[460,10],[824,10]]},"19":{"position":[[400,7]]},"20":{"position":[[8,7],[85,9],[281,11]]},"49":{"position":[[328,10],[514,10]]},"64":{"position":[[83,8],[200,8]]},"66":{"position":[[6,9],[212,7]]},"74":{"position":[[273,10]]},"82":{"position":[[737,8]]},"88":{"position":[[102,8]]},"94":{"position":[[1597,10],[1765,7],[1838,7],[1947,10],[2131,7],[2204,7],[2649,9]]},"101":{"position":[[348,7],[612,7]]},"105":{"position":[[98,9],[212,10],[290,9]]},"106":{"position":[[135,9],[209,7]]},"107":{"position":[[339,9],[429,7],[494,10],[663,7],[1573,7],[2303,9],[2419,9],[3421,7]]},"109":{"position":[[180,7],[440,7],[552,10],[646,7],[712,10]]},"110":{"position":[[68,10],[226,9]]},"111":{"position":[[73,9],[160,10],[342,10],[414,10],[579,9]]},"112":{"position":[[244,7]]},"115":{"position":[[957,10]]},"117":{"position":[[201,10],[608,10]]},"120":{"position":[[1149,10],[1317,7],[1390,7],[1499,10],[1683,7],[1756,7],[2228,9],[2312,9],[2468,9],[2545,10]]},"123":{"position":[[677,7]]},"124":{"position":[[6,9]]},"135":{"position":[[450,9]]},"159":{"position":[[450,10]]},"163":{"position":[[238,7],[758,10],[909,9]]},"169":{"position":[[1719,7]]},"183":{"position":[[2575,9]]},"190":{"position":[[1753,7]]},"192":{"position":[[2115,7]]},"193":{"position":[[630,7]]},"197":{"position":[[336,9]]},"206":{"position":[[724,7]]},"208":{"position":[[1164,7]]},"209":{"position":[[1181,8]]},"210":{"position":[[2148,9],[3996,7]]},"211":{"position":[[113,8],[867,9]]},"217":{"position":[[75,7]]},"230":{"position":[[288,8]]},"237":{"position":[[386,8],[1743,8],[3119,9]]},"240":{"position":[[2225,7],[2438,8],[3427,10]]},"242":{"position":[[237,8],[284,7]]},"253":{"position":[[806,9],[1040,7]]},"254":{"position":[[3255,11],[3333,9]]},"275":{"position":[[1136,7]]},"278":{"position":[[123,7]]},"279":{"position":[[404,11],[721,7]]},"286":{"position":[[125,7]]},"295":{"position":[[1213,7]]},"296":{"position":[[3233,7],[3298,10]]},"313":{"position":[[806,9],[1040,7]]},"314":{"position":[[2830,11],[2908,9]]},"319":{"position":[[80,11],[486,10]]},"320":{"position":[[2110,8],[2166,11],[2378,10]]},"321":{"position":[[54,10],[1075,10],[1868,9]]},"322":{"position":[[176,10]]},"323":{"position":[[1168,10]]},"326":{"position":[[1849,10]]},"330":{"position":[[225,10]]},"333":{"position":[[39,7],[120,10],[214,7]]},"340":{"position":[[579,7]]},"343":{"position":[[57,10],[428,7],[658,8],[919,7]]},"373":{"position":[[800,8]]},"379":{"position":[[927,8]]},"384":{"position":[[259,8]]},"595":{"position":[[1184,7]]},"602":{"position":[[686,10]]},"603":{"position":[[57,10],[234,10]]},"609":{"position":[[427,8]]},"660":{"position":[[227,10]]},"757":{"position":[[2280,7]]},"763":{"position":[[451,7]]},"770":{"position":[[2280,7]]},"776":{"position":[[451,7]]},"785":{"position":[[350,7]]},"797":{"position":[[2287,7]]},"803":{"position":[[457,7]]},"812":{"position":[[2287,7]]},"818":{"position":[[457,7]]},"821":{"position":[[979,9]]},"828":{"position":[[2287,7]]},"834":{"position":[[457,7]]},"867":{"position":[[1609,8]]},"870":{"position":[[378,9],[515,7],[752,9],[989,11]]},"911":{"position":[[563,7]]},"927":{"position":[[563,7]]},"938":{"position":[[563,7]]},"947":{"position":[[1362,8]]},"954":{"position":[[563,7]]},"972":{"position":[[563,7]]},"974":{"position":[[105,10]]},"975":{"position":[[117,10],[241,10],[390,10]]},"977":{"position":[[659,10]]},"989":{"position":[[722,8]]},"1004":{"position":[[805,8]]},"1006":{"position":[[164,10]]},"1020":{"position":[[780,9]]},"1147":{"position":[[159,10]]},"1156":{"position":[[304,10]]},"1174":{"position":[[159,10]]},"1216":{"position":[[159,10]]},"1224":{"position":[[159,10]]},"1292":{"position":[[3280,7]]},"1306":{"position":[[3280,7]]},"1329":{"position":[[3280,7]]},"1437":{"position":[[1104,10]]},"1440":{"position":[[359,9]]},"1442":{"position":[[661,7],[1101,10]]},"1443":{"position":[[774,7],[1091,10]]},"1444":{"position":[[633,10],[898,10]]},"1451":{"position":[[14,9],[108,7],[657,10]]},"1474":{"position":[[51,10],[84,10]]},"1475":{"position":[[101,10],[245,9]]},"1480":{"position":[[855,10],[1023,7],[1096,7],[1205,10],[1389,7],[1462,7]]}},"keywords":{}}],["process.select",{"_index":5240,"title":{},"content":{"1040":{"position":[[844,15]]},"1050":{"position":[[844,15]]},"1058":{"position":[[844,15]]}},"keywords":{}}],["processing.<br/>",{"_index":6461,"title":{},"content":{"1434":{"position":[[1950,23]]}},"keywords":{}}],["processlist",{"_index":6086,"title":{},"content":{"1292":{"position":[[3327,11]]},"1306":{"position":[[3327,11]]},"1329":{"position":[[3327,11]]}},"keywords":{}}],["processor",{"_index":3127,"title":{},"content":{"320":{"position":[[1952,11]]}},"keywords":{}}],["prod",{"_index":2026,"title":{},"content":{"173":{"position":[[1147,4]]}},"keywords":{}}],["prod.flow.yaml",{"_index":6616,"title":{},"content":{"1461":{"position":[[3049,14],[3713,14],[4035,15]]}},"keywords":{}}],["produc",{"_index":481,"title":{},"content":{"16":{"position":[[1000,7]]},"50":{"position":[[37,7]]},"96":{"position":[[521,7]]},"110":{"position":[[759,9],[1300,7]]},"113":{"position":[[927,7]]},"162":{"position":[[1195,8]]},"219":{"position":[[360,8]]},"228":{"position":[[148,8]]},"305":{"position":[[107,7],[152,10]]},"321":{"position":[[2102,7]]},"483":{"position":[[581,7]]},"595":{"position":[[886,8]]},"764":{"position":[[561,9]]},"777":{"position":[[561,9]]},"804":{"position":[[559,9]]},"819":{"position":[[559,9]]},"835":{"position":[[559,9]]},"912":{"position":[[953,7]]},"1008":{"position":[[769,8]]},"1429":{"position":[[632,7]]},"1459":{"position":[[451,8]]}},"keywords":{}}],["product",{"_index":692,"title":{"1082":{"position":[[36,11]]}},"content":{"37":{"position":[[240,9]]},"41":{"position":[[322,9]]},"70":{"position":[[162,8]]},"107":{"position":[[1633,8],[3056,7],[3481,8]]},"110":{"position":[[672,7]]},"136":{"position":[[200,10]]},"156":{"position":[[787,10],[803,9]]},"168":{"position":[[295,10]]},"177":{"position":[[204,10]]},"213":{"position":[[169,10]]},"232":{"position":[[460,7]]},"236":{"position":[[2971,8],[3719,8]]},"237":{"position":[[534,10],[1044,8],[1092,8]]},"238":{"position":[[827,8],[1153,8],[1222,9],[1291,9]]},"280":{"position":[[230,7]]},"281":{"position":[[86,7]]},"329":{"position":[[940,11]]},"333":{"position":[[96,10]]},"381":{"position":[[272,7],[353,7],[380,7],[401,7],[428,7],[454,7],[489,7],[517,7]]},"428":{"position":[[178,10],[263,10]]},"429":{"position":[[347,10]]},"458":{"position":[[85,7]]},"460":{"position":[[349,7],[365,7]]},"461":{"position":[[224,7]]},"726":{"position":[[280,8]]},"840":{"position":[[318,10]]},"842":{"position":[[137,10]]},"849":{"position":[[261,10]]},"851":{"position":[[114,10]]},"922":{"position":[[2144,10]]},"1078":{"position":[[1626,8]]},"1080":{"position":[[55,10]]},"1081":{"position":[[54,10]]},"1082":{"position":[[43,10]]},"1085":{"position":[[127,10]]},"1461":{"position":[[1274,8],[2256,7],[2697,11],[2857,10],[3685,10],[4183,10],[4322,7]]}},"keywords":{}}],["product/id",{"_index":1040,"title":{},"content":{"69":{"position":[[744,13]]},"76":{"position":[[426,13],[750,12]]}},"keywords":{}}],["product_catalog",{"_index":3771,"title":{},"content":{"460":{"position":[[332,16]]},"461":{"position":[[198,16]]}},"keywords":{}}],["product_id",{"_index":1096,"title":{},"content":{"76":{"position":[[763,11]]},"107":{"position":[[3341,12],[4059,12]]}},"keywords":{}}],["production",{"_index":3168,"title":{},"content":{"324":{"position":[[906,13]]}},"keywords":{}}],["production.flow'",{"_index":3208,"title":{},"content":{"332":{"position":[[715,17]]}},"keywords":{}}],["productiondata/orders/orderdetail",{"_index":5904,"title":{},"content":{"1241":{"position":[[21,34]]}},"keywords":{}}],["products.sql",{"_index":2544,"title":{},"content":{"236":{"position":[[1889,13],[2129,12]]}},"keywords":{}}],["products/flow.yaml",{"_index":6608,"title":{},"content":{"1461":{"position":[[2002,18],[3558,18],[3760,18]]}},"keywords":{}}],["profession",{"_index":3191,"title":{},"content":{"329":{"position":[[1086,13]]}},"keywords":{}}],["profil",{"_index":3221,"title":{"385":{"position":[[26,9]]}},"content":{"339":{"position":[[190,8]]},"385":{"position":[[146,8],[568,8],[628,8],[692,7],[729,8]]},"387":{"position":[[762,9],[772,7],[795,7]]},"388":{"position":[[449,8]]},"989":{"position":[[196,7],[243,8],[413,7]]},"1004":{"position":[[279,7],[326,8],[496,7]]},"1292":{"position":[[3378,7],[3434,8]]},"1306":{"position":[[3378,7],[3434,8]]},"1329":{"position":[[3378,7],[3434,8]]}},"keywords":{}}],["profile'",{"_index":5143,"title":{},"content":{"989":{"position":[[265,9]]},"1004":{"position":[[348,9]]}},"keywords":{}}],["profilessponsor",{"_index":3462,"title":{},"content":{"381":{"position":[[46,17]]}},"keywords":{}}],["program",{"_index":2103,"title":{},"content":{"189":{"position":[[70,8]]},"738":{"position":[[717,9]]}},"keywords":{}}],["program.gener",{"_index":4515,"title":{},"content":{"718":{"position":[[232,16]]}},"keywords":{}}],["programm",{"_index":2318,"title":{},"content":{"210":{"position":[[2088,11]]}},"keywords":{}}],["programmat",{"_index":5855,"title":{},"content":{"1204":{"position":[[227,12]]}},"keywords":{}}],["progress",{"_index":37,"title":{},"content":{"1":{"position":[[440,8]]},"105":{"position":[[668,9]]},"595":{"position":[[400,13]]},"764":{"position":[[532,8]]},"777":{"position":[[532,8]]},"804":{"position":[[530,8]]},"819":{"position":[[530,8]]},"835":{"position":[[530,8]]},"1435":{"position":[[155,11]]},"1442":{"position":[[1022,10]]}},"keywords":{}}],["prohibit",{"_index":1548,"title":{},"content":{"107":{"position":[[2135,10]]},"1036":{"position":[[58,13]]},"1477":{"position":[[606,11]]}},"keywords":{}}],["project",{"_index":447,"title":{"15":{"position":[[0,11]]},"50":{"position":[[0,12]]},"76":{"position":[[0,12]]},"122":{"position":[[0,9]]},"227":{"position":[[36,12]]}},"content":{"16":{"position":[[1,11],[107,10],[222,12]]},"50":{"position":[[158,11],[324,11]]},"63":{"position":[[812,8]]},"64":{"position":[[542,8]]},"67":{"position":[[1167,10],[1353,10]]},"69":{"position":[[760,11],[841,12]]},"76":{"position":[[1,11],[184,11],[255,11],[308,12],[442,11],[521,10],[663,12],[1005,12]]},"82":{"position":[[1782,7],[2468,7],[4106,7],[4609,7]]},"92":{"position":[[950,7]]},"98":{"position":[[207,10]]},"99":{"position":[[199,11],[265,11],[288,11],[384,9]]},"122":{"position":[[266,11],[421,9],[567,11],[1270,11]]},"123":{"position":[[276,12]]},"158":{"position":[[348,11],[446,11]]},"162":{"position":[[1661,12],[1737,11]]},"203":{"position":[[280,8]]},"210":{"position":[[2435,7]]},"227":{"position":[[179,12]]},"228":{"position":[[858,11],[1029,11],[1086,9],[1310,11],[1405,12]]},"229":{"position":[[563,11],[770,9]]},"230":{"position":[[66,12],[649,9],[684,9],[1137,12]]},"280":{"position":[[2233,12]]},"288":{"position":[[319,8]]},"290":{"position":[[933,9]]},"322":{"position":[[81,9]]},"332":{"position":[[578,7]]},"351":{"position":[[397,7]]},"359":{"position":[[375,7]]},"367":{"position":[[891,7]]},"408":{"position":[[607,7]]},"422":{"position":[[14,7]]},"424":{"position":[[430,7]]},"454":{"position":[[619,7]]},"460":{"position":[[636,7]]},"466":{"position":[[343,7]]},"475":{"position":[[83,7]]},"479":{"position":[[270,7],[525,7]]},"482":{"position":[[72,7],[91,7],[110,7]]},"520":{"position":[[70,8]]},"521":{"position":[[138,7]]},"526":{"position":[[130,8]]},"527":{"position":[[273,9]]},"529":{"position":[[534,7],[548,7],[564,8]]},"548":{"position":[[932,7]]},"571":{"position":[[418,7],[661,8]]},"581":{"position":[[91,7]]},"582":{"position":[[274,8]]},"597":{"position":[[83,7]]},"601":{"position":[[71,7],[95,7]]},"617":{"position":[[343,7],[585,8]]},"625":{"position":[[242,7]]},"628":{"position":[[356,7]]},"631":{"position":[[570,7]]},"670":{"position":[[730,7]]},"700":{"position":[[381,7]]},"706":{"position":[[380,7]]},"712":{"position":[[572,7]]},"741":{"position":[[557,7]]},"745":{"position":[[90,7],[106,7],[132,7]]},"747":{"position":[[72,7],[88,7],[427,7],[498,7],[535,7],[1440,7]]},"851":{"position":[[661,7]]},"885":{"position":[[692,7]]},"897":{"position":[[336,7]]},"942":{"position":[[154,8],[305,8],[433,7],[491,7]]},"943":{"position":[[178,7]]},"947":{"position":[[358,8]]},"959":{"position":[[437,7]]},"964":{"position":[[725,7]]},"982":{"position":[[439,7]]},"995":{"position":[[63,7]]},"997":{"position":[[224,8],[233,7],[264,7],[405,7]]},"998":{"position":[[176,8]]},"1015":{"position":[[492,7]]},"1028":{"position":[[442,7]]},"1094":{"position":[[507,7]]},"1101":{"position":[[347,7]]},"1113":{"position":[[536,7]]},"1123":{"position":[[282,10]]},"1136":{"position":[[445,7]]},"1155":{"position":[[603,11]]},"1176":{"position":[[292,7]]},"1178":{"position":[[300,8]]},"1179":{"position":[[72,7],[87,7],[738,7],[753,7],[930,7]]},"1180":{"position":[[96,7]]},"1226":{"position":[[53,7],[111,8]]},"1227":{"position":[[183,8]]},"1228":{"position":[[198,8]]},"1230":{"position":[[479,7],[502,7]]},"1245":{"position":[[295,7],[537,8]]},"1275":{"position":[[306,9]]},"1277":{"position":[[285,8]]}},"keywords":{}}],["project>",{"_index":5156,"title":{},"content":{"998":{"position":[[194,11]]}},"keywords":{}}],["project."",{"_index":2330,"title":{},"content":{"210":{"position":[[2338,15]]}},"keywords":{}}],["project.gr",{"_index":5789,"title":{},"content":{"1177":{"position":[[185,13]]}},"keywords":{}}],["project.select",{"_index":5082,"title":{},"content":{"943":{"position":[[415,14]]}},"keywords":{}}],["project_id",{"_index":4569,"title":{},"content":{"748":{"position":[[193,11]]},"1179":{"position":[[857,10],[898,10]]},"1180":{"position":[[71,11]]},"1230":{"position":[[454,11]]},"1231":{"position":[[200,11]]}},"keywords":{}}],["project_timezon",{"_index":4562,"title":{},"content":{"747":{"position":[[409,17]]},"748":{"position":[[235,17]]}},"keywords":{}}],["projecta",{"_index":3813,"title":{},"content":{"475":{"position":[[233,8]]},"597":{"position":[[196,8]]}},"keywords":{}}],["projects/$projectid/databases/(default",{"_index":2928,"title":{},"content":{"290":{"position":[[989,40]]}},"keywords":{}}],["projects/your",{"_index":1166,"title":{},"content":{"82":{"position":[[1768,13],[2454,13],[4092,13],[4595,13]]}},"keywords":{}}],["promin",{"_index":2433,"title":{},"content":{"218":{"position":[[665,10]]},"291":{"position":[[904,10]]},"302":{"position":[[904,10]]}},"keywords":{}}],["promot",{"_index":6474,"title":{},"content":{"1437":{"position":[[727,8]]}},"keywords":{}}],["promotion_cod",{"_index":5325,"title":{},"content":{"1078":{"position":[[1704,15]]}},"keywords":{}}],["prompt",{"_index":1759,"title":{},"content":{"136":{"position":[[114,8]]},"208":{"position":[[1134,9]]},"616":{"position":[[505,8]]},"987":{"position":[[45,8]]},"1002":{"position":[[45,8]]},"1268":{"position":[[252,8]]},"1455":{"position":[[427,9]]}},"keywords":{}}],["promptli",{"_index":2185,"title":{},"content":{"197":{"position":[[426,8]]},"976":{"position":[[376,8]]}},"keywords":{}}],["prong",{"_index":6394,"title":{},"content":{"1388":{"position":[[353,7]]}},"keywords":{}}],["proof",{"_index":2690,"title":{},"content":{"253":{"position":[[750,5]]},"313":{"position":[[750,5]]}},"keywords":{}}],["propag",{"_index":2186,"title":{},"content":{"197":{"position":[[517,11]]},"210":{"position":[[1689,9]]},"237":{"position":[[143,11]]}},"keywords":{}}],["proper",{"_index":4166,"title":{},"content":{"574":{"position":[[637,6]]}},"keywords":{}}],["properli",{"_index":2582,"title":{},"content":{"238":{"position":[[757,8]]},"240":{"position":[[4483,8]]},"840":{"position":[[2395,8]]},"846":{"position":[[327,8]]},"847":{"position":[[302,8]]},"849":{"position":[[1404,9],[3535,8]]},"1442":{"position":[[1271,8]]},"1465":{"position":[[919,8]]}},"keywords":{}}],["properti",{"_index":282,"title":{"343":{"position":[[0,11]]},"351":{"position":[[0,11]]},"359":{"position":[[0,11]]},"370":{"position":[[0,11]]},"377":{"position":[[0,11]]},"387":{"position":[[0,11]]},"392":{"position":[[0,11]]},"397":{"position":[[0,11]]},"402":{"position":[[0,11]]},"408":{"position":[[0,11]]},"417":{"position":[[0,11]]},"424":{"position":[[0,11]]},"432":{"position":[[0,11]]},"438":{"position":[[0,11]]},"448":{"position":[[0,11]]},"454":{"position":[[0,11]]},"460":{"position":[[0,11]]},"466":{"position":[[0,11]]},"482":{"position":[[0,11]]},"496":{"position":[[0,11]]},"502":{"position":[[0,11]]},"509":{"position":[[0,11]]},"517":{"position":[[0,11]]},"534":{"position":[[0,11]]},"540":{"position":[[0,11]]},"545":{"position":[[0,11]]},"556":{"position":[[0,11]]},"564":{"position":[[0,11]]},"573":{"position":[[0,11]]},"584":{"position":[[0,11]]},"593":{"position":[[0,11]]},"601":{"position":[[0,11]]},"611":{"position":[[0,11]]},"619":{"position":[[0,11]]},"625":{"position":[[0,11]]},"631":{"position":[[0,11]]},"637":{"position":[[0,11]]},"654":{"position":[[0,11]]},"670":{"position":[[0,11]]},"685":{"position":[[0,11]]},"700":{"position":[[0,11]]},"706":{"position":[[0,11]]},"712":{"position":[[0,11]]},"720":{"position":[[0,11]]},"728":{"position":[[0,11]]},"735":{"position":[[0,11]]},"741":{"position":[[0,11]]},"747":{"position":[[0,11]]},"757":{"position":[[0,11]]},"770":{"position":[[0,11]]},"782":{"position":[[0,11]]},"797":{"position":[[0,11]]},"812":{"position":[[0,11]]},"828":{"position":[[0,11]]},"842":{"position":[[0,11]]},"851":{"position":[[0,11]]},"859":{"position":[[0,11]]},"867":{"position":[[0,11]]},"879":{"position":[[0,11]]},"885":{"position":[[0,11]]},"891":{"position":[[0,11]]},"897":{"position":[[0,11]]},"907":{"position":[[0,11]]},"923":{"position":[[0,11]]},"934":{"position":[[0,11]]},"950":{"position":[[0,11]]},"959":{"position":[[0,11]]},"968":{"position":[[0,11]]},"982":{"position":[[0,11]]},"991":{"position":[[0,11]]},"997":{"position":[[0,11]]},"1009":{"position":[[0,11]]},"1015":{"position":[[0,11]]},"1028":{"position":[[0,11]]},"1034":{"position":[[9,11]]},"1035":{"position":[[8,11]]},"1045":{"position":[[0,11]]},"1053":{"position":[[0,11]]},"1061":{"position":[[0,11]]},"1070":{"position":[[0,11]]},"1076":{"position":[[0,11]]},"1085":{"position":[[0,11]]},"1094":{"position":[[0,11]]},"1101":{"position":[[0,11]]},"1107":{"position":[[0,11]]},"1113":{"position":[[0,11]]},"1125":{"position":[[0,11]]},"1133":{"position":[[0,11]]},"1138":{"position":[[0,11]]},"1144":{"position":[[0,11]]},"1151":{"position":[[0,11]]},"1162":{"position":[[0,11]]},"1170":{"position":[[0,11]]},"1179":{"position":[[0,11]]},"1188":{"position":[[0,11]]},"1196":{"position":[[0,11]]},"1206":{"position":[[0,11]]},"1213":{"position":[[0,11]]},"1220":{"position":[[0,11]]},"1230":{"position":[[0,11]]},"1238":{"position":[[0,11]]},"1247":{"position":[[0,11]]},"1253":{"position":[[0,11]]},"1260":{"position":[[0,11]]},"1266":{"position":[[0,11]]},"1277":{"position":[[0,11]]},"1285":{"position":[[0,11]]},"1300":{"position":[[0,11]]},"1313":{"position":[[0,11]]},"1324":{"position":[[0,11]]},"1337":{"position":[[0,11]]},"1348":{"position":[[0,11]]},"1356":{"position":[[0,11]]},"1367":{"position":[[0,11]]},"1376":{"position":[[0,11]]},"1386":{"position":[[0,11]]},"1400":{"position":[[0,11]]},"1411":{"position":[[0,11]]},"1420":{"position":[[0,11]]},"1427":{"position":[[0,11]]},"1457":{"position":[[0,11]]},"1481":{"position":[[0,11]]}},"content":{"8":{"position":[[920,10]]},"14":{"position":[[462,11]]},"55":{"position":[[87,8],[794,10],[897,10]]},"56":{"position":[[410,8]]},"67":{"position":[[238,10],[433,10]]},"70":{"position":[[738,11]]},"74":{"position":[[783,8]]},"83":{"position":[[712,10]]},"98":{"position":[[75,8],[410,8],[1253,11]]},"120":{"position":[[2824,8]]},"121":{"position":[[1006,11]]},"126":{"position":[[174,8]]},"159":{"position":[[239,11]]},"160":{"position":[[210,9],[777,11]]},"161":{"position":[[948,11]]},"162":{"position":[[2126,11],[2241,11]]},"165":{"position":[[1025,11],[1281,8]]},"166":{"position":[[380,11]]},"180":{"position":[[682,11]]},"183":{"position":[[1187,11],[1767,11],[3573,11]]},"184":{"position":[[585,11]]},"190":{"position":[[274,10],[348,10],[828,10]]},"192":{"position":[[245,10],[466,10]]},"207":{"position":[[926,11],[1181,8]]},"217":{"position":[[445,10],[929,10],[1527,11]]},"218":{"position":[[207,10],[476,10]]},"254":{"position":[[311,11],[1379,11],[3073,8]]},"268":{"position":[[819,11]]},"269":{"position":[[444,11]]},"279":{"position":[[1168,11]]},"280":{"position":[[1308,11]]},"281":{"position":[[2085,11]]},"290":{"position":[[409,10],[742,10]]},"291":{"position":[[195,10],[404,10]]},"296":{"position":[[419,11],[1390,11]]},"301":{"position":[[355,10],[675,10]]},"302":{"position":[[195,10],[404,10]]},"306":{"position":[[92,10],[399,10]]},"307":{"position":[[1331,11],[2199,11],[2803,9],[2829,8]]},"309":{"position":[[2165,11],[2762,11]]},"314":{"position":[[1109,11],[1128,11],[2648,8]]},"343":{"position":[[1,8]]},"351":{"position":[[12,8],[309,8]]},"359":{"position":[[26,10],[81,8],[286,8]]},"368":{"position":[[483,10]]},"370":{"position":[[229,8],[1994,8]]},"377":{"position":[[12,8],[1674,8]]},"379":{"position":[[671,10]]},"387":{"position":[[16,10],[163,10],[192,8],[1323,8]]},"392":{"position":[[12,8],[673,8]]},"397":{"position":[[12,8],[815,8]]},"402":{"position":[[12,8],[513,10],[639,8]]},"408":{"position":[[12,8],[516,8]]},"417":{"position":[[12,8],[2209,8]]},"419":{"position":[[1429,10],[1605,10]]},"424":{"position":[[12,8],[340,8]]},"432":{"position":[[12,8],[1183,8]]},"438":{"position":[[12,8],[1894,8]]},"441":{"position":[[38,10],[214,10]]},"448":{"position":[[16,10],[163,10],[192,8],[1210,8]]},"454":{"position":[[12,8],[529,8]]},"460":{"position":[[12,8],[546,8]]},"466":{"position":[[12,8],[257,8]]},"482":{"position":[[12,8],[489,8]]},"483":{"position":[[20,8]]},"491":{"position":[[1,8]]},"492":{"position":[[1,8]]},"496":{"position":[[12,8],[522,8]]},"499":{"position":[[410,10]]},"502":{"position":[[12,8],[1542,8]]},"504":{"position":[[1058,10],[1234,10]]},"509":{"position":[[12,8],[522,8]]},"517":{"position":[[483,8],[3945,8]]},"534":{"position":[[16,10],[163,10],[192,8],[1690,8]]},"540":{"position":[[12,8],[307,8]]},"545":{"position":[[12,8],[1604,8]]},"547":{"position":[[1431,10],[1607,10]]},"556":{"position":[[16,10],[163,10],[192,8],[2187,8]]},"564":{"position":[[12,8]]},"565":{"position":[[1,8]]},"573":{"position":[[26,10],[167,10],[196,8],[1266,8]]},"574":{"position":[[205,8]]},"581":{"position":[[125,8],[258,8]]},"582":{"position":[[140,9],[464,9]]},"584":{"position":[[26,10],[155,10],[184,8],[843,8],[878,8],[1338,8]]},"585":{"position":[[195,8]]},"590":{"position":[[1041,8]]},"593":{"position":[[12,8],[330,8]]},"601":{"position":[[12,8],[401,8]]},"608":{"position":[[81,9]]},"611":{"position":[[16,10],[163,10],[192,8],[985,10],[1177,8]]},"619":{"position":[[26,10],[93,8],[579,8]]},"625":{"position":[[12,8],[151,8]]},"631":{"position":[[12,8],[482,8]]},"634":{"position":[[402,10]]},"637":{"position":[[12,8],[1140,8]]},"639":{"position":[[1056,10],[1232,10]]},"646":{"position":[[305,10],[365,8],[720,8]]},"654":{"position":[[26,10],[86,8],[802,8]]},"660":{"position":[[812,9]]},"661":{"position":[[557,8]]},"664":{"position":[[1,8]]},"665":{"position":[[1,8]]},"670":{"position":[[12,8],[640,8]]},"679":{"position":[[1,8]]},"680":{"position":[[1,8]]},"685":{"position":[[16,10],[170,8],[464,8]]},"694":{"position":[[1,8]]},"695":{"position":[[1,8]]},"700":{"position":[[12,8],[292,8]]},"706":{"position":[[12,8],[292,8]]},"712":{"position":[[12,8],[487,8]]},"720":{"position":[[16,10],[163,10],[192,8],[796,8]]},"728":{"position":[[1,8]]},"735":{"position":[[26,10],[81,8],[379,8]]},"741":{"position":[[12,8],[469,8]]},"747":{"position":[[12,8],[628,10],[1351,8]]},"753":{"position":[[1668,8]]},"754":{"position":[[1214,8],[1263,8]]},"755":{"position":[[483,10]]},"757":{"position":[[12,8],[1901,8]]},"767":{"position":[[946,11],[2472,8]]},"768":{"position":[[483,10]]},"770":{"position":[[12,8],[1901,8]]},"782":{"position":[[12,8],[497,8]]},"792":{"position":[[1240,11],[2453,8]]},"793":{"position":[[1691,8]]},"794":{"position":[[1418,8],[1467,8]]},"795":{"position":[[481,10]]},"797":{"position":[[12,8],[1901,8]]},"808":{"position":[[1641,8]]},"809":{"position":[[1418,8],[1467,8]]},"810":{"position":[[481,10]]},"812":{"position":[[12,8],[1901,8]]},"821":{"position":[[1168,8]]},"824":{"position":[[1015,11],[2584,8]]},"825":{"position":[[1254,8],[1303,8]]},"826":{"position":[[481,10]]},"828":{"position":[[12,8],[1901,8]]},"842":{"position":[[12,8],[578,8],[1028,8],[1276,8],[1874,8]]},"851":{"position":[[12,8],[572,8]]},"859":{"position":[[16,10],[163,10],[192,8],[719,8]]},"867":{"position":[[12,8],[2098,8]]},"879":{"position":[[12,8],[1521,8]]},"885":{"position":[[12,8],[593,8]]},"891":{"position":[[12,8],[328,8]]},"897":{"position":[[12,8],[246,8]]},"904":{"position":[[1013,11],[2399,8]]},"905":{"position":[[486,10]]},"907":{"position":[[12,8],[1401,8]]},"918":{"position":[[1216,11],[2691,8]]},"919":{"position":[[2598,8]]},"920":{"position":[[486,10]]},"922":{"position":[[803,8]]},"923":{"position":[[12,8],[1401,8]]},"931":{"position":[[2120,8]]},"932":{"position":[[486,10]]},"934":{"position":[[12,8],[1401,8]]},"948":{"position":[[486,10]]},"950":{"position":[[12,8],[1401,8]]},"959":{"position":[[12,8],[348,8]]},"966":{"position":[[486,10]]},"968":{"position":[[12,8],[1401,8]]},"982":{"position":[[12,8],[350,8]]},"991":{"position":[[16,10],[202,8],[773,8]]},"997":{"position":[[12,8],[318,8]]},"1008":{"position":[[1697,11]]},"1009":{"position":[[16,10],[202,8],[1512,8]]},"1015":{"position":[[12,8],[406,8]]},"1021":{"position":[[285,8],[2020,8]]},"1023":{"position":[[1412,10],[1588,10]]},"1028":{"position":[[12,8],[353,8]]},"1034":{"position":[[1,8]]},"1035":{"position":[[1,8]]},"1036":{"position":[[536,8]]},"1043":{"position":[[1933,8]]},"1045":{"position":[[12,8],[1020,8]]},"1051":{"position":[[2115,8]]},"1053":{"position":[[12,8],[1020,8]]},"1059":{"position":[[1967,8]]},"1061":{"position":[[12,8],[1020,8]]},"1070":{"position":[[16,10],[163,10],[192,8],[976,8]]},"1076":{"position":[[12,8],[759,8]]},"1085":{"position":[[16,10],[219,10],[248,8],[1350,8]]},"1094":{"position":[[12,8],[415,8]]},"1101":{"position":[[12,8],[249,8]]},"1107":{"position":[[12,8],[387,8]]},"1113":{"position":[[12,8],[449,8]]},"1125":{"position":[[12,8],[495,8]]},"1133":{"position":[[12,8],[1183,8]]},"1137":{"position":[[87,10]]},"1138":{"position":[[229,8],[1284,8]]},"1143":{"position":[[15,10]]},"1144":{"position":[[12,8],[1247,8]]},"1150":{"position":[[15,10]]},"1151":{"position":[[12,8],[1318,8]]},"1156":{"position":[[449,9]]},"1161":{"position":[[15,10]]},"1162":{"position":[[12,8],[751,8]]},"1169":{"position":[[15,10]]},"1170":{"position":[[12,8],[1172,8]]},"1178":{"position":[[87,10]]},"1179":{"position":[[12,8],[982,8]]},"1187":{"position":[[87,10]]},"1188":{"position":[[12,8],[701,8]]},"1195":{"position":[[87,10],[651,8]]},"1196":{"position":[[12,8],[859,8]]},"1205":{"position":[[87,10]]},"1206":{"position":[[12,8],[823,8]]},"1212":{"position":[[15,10]]},"1213":{"position":[[12,8],[924,8]]},"1219":{"position":[[15,10]]},"1220":{"position":[[12,8],[849,8]]},"1229":{"position":[[87,10]]},"1230":{"position":[[12,8],[802,8]]},"1239":{"position":[[1,8]]},"1240":{"position":[[1,8]]},"1246":{"position":[[87,10]]},"1247":{"position":[[26,10],[154,10],[183,8],[1020,8]]},"1253":{"position":[[12,8],[412,8]]},"1259":{"position":[[15,10]]},"1260":{"position":[[12,8],[866,8]]},"1265":{"position":[[94,10]]},"1267":{"position":[[1,8]]},"1269":{"position":[[1,8]]},"1277":{"position":[[12,8],[994,8]]},"1284":{"position":[[87,10]]},"1285":{"position":[[12,8]]},"1286":{"position":[[1504,8],[1553,8],[2495,8]]},"1299":{"position":[[87,10]]},"1300":{"position":[[12,8]]},"1301":{"position":[[1340,8],[1389,8],[2331,8]]},"1303":{"position":[[1763,8]]},"1312":{"position":[[87,10]]},"1313":{"position":[[12,8],[828,8]]},"1323":{"position":[[87,10]]},"1324":{"position":[[12,8]]},"1325":{"position":[[1504,8],[1553,8],[2495,8]]},"1336":{"position":[[87,10]]},"1337":{"position":[[12,8],[828,8]]},"1347":{"position":[[87,10]]},"1348":{"position":[[12,8],[828,8]]},"1355":{"position":[[87,10]]},"1356":{"position":[[12,8],[879,8]]},"1362":{"position":[[174,8],[465,8]]},"1367":{"position":[[12,8]]},"1373":{"position":[[1364,8]]},"1374":{"position":[[1368,8]]},"1375":{"position":[[87,10]]},"1376":{"position":[[12,8],[410,8]]},"1385":{"position":[[87,10]]},"1386":{"position":[[12,8],[1104,8]]},"1397":{"position":[[1202,8]]},"1398":{"position":[[1205,8]]},"1399":{"position":[[87,10]]},"1400":{"position":[[12,8],[410,8]]},"1409":{"position":[[1206,8]]},"1410":{"position":[[87,10]]},"1411":{"position":[[12,8],[410,8]]},"1419":{"position":[[87,10]]},"1420":{"position":[[12,8],[651,8]]},"1426":{"position":[[87,10]]},"1427":{"position":[[12,8],[555,8]]},"1452":{"position":[[244,8]]},"1457":{"position":[[1,8]]},"1463":{"position":[[342,11]]},"1464":{"position":[[198,11]]},"1465":{"position":[[493,11],[694,11],[943,11]]},"1466":{"position":[[157,11]]},"1467":{"position":[[237,9],[500,11],[745,11],[2171,11]]},"1470":{"position":[[751,8],[840,8]]},"1473":{"position":[[399,11]]},"1474":{"position":[[341,8]]},"1475":{"position":[[283,8]]},"1476":{"position":[[208,11],[1274,11]]},"1477":{"position":[[150,11],[848,8],[978,11],[1178,10],[3200,11],[3408,10]]},"1481":{"position":[[1,8]]}},"keywords":{}}],["properties.your",{"_index":3703,"title":{},"content":{"436":{"position":[[891,15]]}},"keywords":{}}],["propertiesissu",{"_index":4474,"title":{},"content":{"709":{"position":[[288,15]]}},"keywords":{}}],["property"",{"_index":6658,"title":{},"content":{"1467":{"position":[[1250,15]]}},"keywords":{}}],["property'",{"_index":6516,"title":{},"content":{"1448":{"position":[[246,10]]}},"keywords":{}}],["property_id",{"_index":4220,"title":{},"content":{"584":{"position":[[830,12]]},"586":{"position":[[283,12]]}},"keywords":{}}],["protect",{"_index":1140,"title":{"82":{"position":[[0,10]]}},"content":{"81":{"position":[[2902,7]]},"82":{"position":[[122,9],[310,7],[348,9],[1018,9],[1109,10],[1299,7],[1469,7],[1707,10],[2847,9],[2897,9],[3411,7],[3563,8],[3782,7]]},"879":{"position":[[974,10]]},"922":{"position":[[2168,7]]}},"keywords":{}}],["protocol",{"_index":1368,"title":{"1433":{"position":[[16,8]]},"1441":{"position":[[0,8]]}},"content":{"95":{"position":[[242,9]]},"192":{"position":[[675,8]]},"238":{"position":[[258,9]]},"247":{"position":[[175,9]]},"323":{"position":[[1495,8]]},"429":{"position":[[688,9]]},"1034":{"position":[[180,10]]},"1356":{"position":[[322,10]]},"1386":{"position":[[201,10]]},"1435":{"position":[[802,8]]},"1437":{"position":[[507,8]]},"1444":{"position":[[1010,8]]},"1451":{"position":[[96,8]]}},"keywords":{}}],["protocolth",{"_index":1272,"title":{},"content":{"84":{"position":[[940,11]]}},"keywords":{}}],["provabl",{"_index":1887,"title":{},"content":{"160":{"position":[[322,8]]}},"keywords":{}}],["provid",{"_index":490,"title":{},"content":{"17":{"position":[[105,7]]},"48":{"position":[[10,7],[172,7]]},"50":{"position":[[170,7]]},"56":{"position":[[1054,8],[1196,8]]},"60":{"position":[[908,8]]},"67":{"position":[[1833,8]]},"70":{"position":[[474,8]]},"76":{"position":[[289,7]]},"77":{"position":[[627,7]]},"81":{"position":[[168,9],[1092,7],[1294,7],[1487,7],[1689,7]]},"82":{"position":[[1261,7],[3103,7]]},"83":{"position":[[445,8]]},"84":{"position":[[224,7]]},"94":{"position":[[2463,8]]},"97":{"position":[[122,8]]},"98":{"position":[[429,8]]},"106":{"position":[[197,8]]},"115":{"position":[[1142,7]]},"120":{"position":[[394,8],[555,8]]},"122":{"position":[[1340,9]]},"123":{"position":[[376,7]]},"125":{"position":[[367,7]]},"129":{"position":[[73,8]]},"135":{"position":[[885,8]]},"154":{"position":[[1471,8],[2011,8]]},"158":{"position":[[15,7],[294,7],[670,7]]},"159":{"position":[[384,7]]},"164":{"position":[[113,7]]},"165":{"position":[[328,7]]},"170":{"position":[[142,8]]},"173":{"position":[[101,7]]},"175":{"position":[[112,8]]},"190":{"position":[[1568,8]]},"191":{"position":[[383,8]]},"192":{"position":[[1990,8]]},"196":{"position":[[176,9]]},"208":{"position":[[70,8]]},"217":{"position":[[269,8],[971,8]]},"218":{"position":[[286,8]]},"221":{"position":[[158,9]]},"233":{"position":[[176,9],[567,8]]},"234":{"position":[[101,9]]},"240":{"position":[[355,8],[409,8]]},"245":{"position":[[250,9]]},"250":{"position":[[58,9]]},"267":{"position":[[621,7]]},"275":{"position":[[852,7]]},"285":{"position":[[21,9]]},"290":{"position":[[246,8],[1130,8]]},"291":{"position":[[593,8]]},"296":{"position":[[5726,8]]},"301":{"position":[[199,8],[1042,9],[1339,8]]},"302":{"position":[[593,8]]},"315":{"position":[[1733,8]]},"320":{"position":[[678,7],[1298,9],[1511,8]]},"350":{"position":[[204,7]]},"358":{"position":[[204,7]]},"369":{"position":[[204,7]]},"376":{"position":[[204,7]]},"384":{"position":[[49,7]]},"385":{"position":[[304,8]]},"386":{"position":[[204,7]]},"391":{"position":[[204,7]]},"392":{"position":[[515,8]]},"396":{"position":[[204,7]]},"397":{"position":[[664,8]]},"401":{"position":[[250,7]]},"407":{"position":[[204,7]]},"416":{"position":[[204,7]]},"417":{"position":[[681,8],[1208,9]]},"419":{"position":[[494,7],[2293,9],[2326,8],[2468,7]]},"423":{"position":[[204,7]]},"429":{"position":[[615,9]]},"431":{"position":[[204,7]]},"437":{"position":[[204,7]]},"438":{"position":[[1724,9]]},"440":{"position":[[510,7]]},"441":{"position":[[902,9],[935,8],[1077,7]]},"447":{"position":[[204,7]]},"453":{"position":[[204,7]]},"459":{"position":[[204,7]]},"464":{"position":[[47,7]]},"465":{"position":[[204,7]]},"472":{"position":[[204,7]]},"478":{"position":[[181,7]]},"481":{"position":[[204,7]]},"486":{"position":[[242,8]]},"491":{"position":[[447,8]]},"495":{"position":[[204,7]]},"501":{"position":[[160,7]]},"502":{"position":[[246,9]]},"504":{"position":[[438,7],[1922,9],[1955,8],[2097,7]]},"508":{"position":[[204,7]]},"516":{"position":[[204,7]]},"525":{"position":[[204,7]]},"533":{"position":[[204,7]]},"539":{"position":[[204,7]]},"544":{"position":[[204,7]]},"545":{"position":[[817,9]]},"547":{"position":[[495,7],[2295,9],[2328,8],[2470,7]]},"555":{"position":[[201,7]]},"563":{"position":[[268,7]]},"572":{"position":[[204,7]]},"583":{"position":[[194,7]]},"592":{"position":[[201,7]]},"595":{"position":[[519,8],[1057,8]]},"599":{"position":[[181,7]]},"602":{"position":[[731,7]]},"610":{"position":[[204,7]]},"618":{"position":[[204,7]]},"624":{"position":[[204,7]]},"630":{"position":[[204,7]]},"636":{"position":[[204,7]]},"639":{"position":[[436,7],[1920,9],[1953,8],[2095,7]]},"646":{"position":[[204,7]]},"653":{"position":[[204,7]]},"658":{"position":[[242,8]]},"660":{"position":[[276,7]]},"664":{"position":[[468,8],[703,8]]},"669":{"position":[[204,7]]},"674":{"position":[[242,8]]},"679":{"position":[[447,8]]},"684":{"position":[[204,7]]},"689":{"position":[[242,8]]},"694":{"position":[[447,8]]},"699":{"position":[[204,7]]},"705":{"position":[[204,7]]},"711":{"position":[[204,7]]},"719":{"position":[[199,7]]},"727":{"position":[[204,7]]},"734":{"position":[[204,7]]},"740":{"position":[[204,7]]},"746":{"position":[[204,7]]},"756":{"position":[[204,7]]},"769":{"position":[[204,7]]},"780":{"position":[[492,8]]},"781":{"position":[[201,7]]},"782":{"position":[[413,8]]},"788":{"position":[[46,10],[115,8]]},"796":{"position":[[205,7]]},"811":{"position":[[204,7]]},"821":{"position":[[249,8]]},"827":{"position":[[204,7]]},"841":{"position":[[204,7]]},"842":{"position":[[1805,9]]},"850":{"position":[[204,7]]},"858":{"position":[[204,7]]},"866":{"position":[[204,7]]},"878":{"position":[[204,7]]},"884":{"position":[[204,7]]},"890":{"position":[[205,7]]},"895":{"position":[[178,7]]},"896":{"position":[[204,7]]},"906":{"position":[[204,7]]},"912":{"position":[[260,8]]},"914":{"position":[[144,8]]},"921":{"position":[[204,7]]},"922":{"position":[[3326,8]]},"933":{"position":[[204,7]]},"943":{"position":[[598,8]]},"949":{"position":[[204,7]]},"958":{"position":[[204,7]]},"967":{"position":[[204,7]]},"976":{"position":[[25,8]]},"977":{"position":[[389,8]]},"981":{"position":[[204,7]]},"990":{"position":[[204,7]]},"996":{"position":[[204,7]]},"1005":{"position":[[201,7]]},"1014":{"position":[[204,7]]},"1021":{"position":[[204,7],[576,9],[676,9],[916,9]]},"1023":{"position":[[475,7],[2276,9],[2309,8],[2451,7]]},"1027":{"position":[[204,7]]},"1033":{"position":[[208,7]]},"1036":{"position":[[396,9],[599,7]]},"1039":{"position":[[73,10],[248,8]]},"1044":{"position":[[204,7]]},"1052":{"position":[[204,7]]},"1060":{"position":[[204,7]]},"1069":{"position":[[204,7]]},"1075":{"position":[[204,7]]},"1084":{"position":[[204,7]]},"1093":{"position":[[204,7]]},"1100":{"position":[[204,7]]},"1106":{"position":[[205,7]]},"1112":{"position":[[204,7]]},"1124":{"position":[[204,7]]},"1125":{"position":[[458,8]]},"1129":{"position":[[114,9]]},"1132":{"position":[[205,7]]},"1144":{"position":[[819,8]]},"1151":{"position":[[478,8]]},"1170":{"position":[[819,8]]},"1188":{"position":[[197,9]]},"1197":{"position":[[104,8]]},"1207":{"position":[[329,8]]},"1251":{"position":[[253,8]]},"1252":{"position":[[201,7]]},"1268":{"position":[[448,8]]},"1272":{"position":[[53,9]]},"1286":{"position":[[2375,9],[2436,8]]},"1301":{"position":[[2211,9],[2272,8]]},"1317":{"position":[[394,7]]},"1325":{"position":[[2375,9],[2436,8]]},"1341":{"position":[[394,7]]},"1352":{"position":[[394,7]]},"1357":{"position":[[179,8]]},"1432":{"position":[[394,7]]},"1438":{"position":[[651,8]]},"1439":{"position":[[1689,7]]},"1447":{"position":[[599,7]]},"1452":{"position":[[3098,7],[3233,9],[4031,7]]},"1456":{"position":[[411,8]]},"1461":{"position":[[4307,7],[4627,9],[4728,8]]},"1477":{"position":[[2653,7]]},"1480":{"position":[[331,8],[489,8]]}},"keywords":{}}],["provided.verify_ident",{"_index":5977,"title":{},"content":{"1286":{"position":[[2181,25]]},"1301":{"position":[[2017,25]]},"1325":{"position":[[2181,25]]}},"keywords":{}}],["provider"",{"_index":4968,"title":{},"content":{"898":{"position":[[394,15]]}},"keywords":{}}],["provis",{"_index":633,"title":{"341":{"position":[[0,12]]}},"content":{"27":{"position":[[477,11]]},"60":{"position":[[316,9]]},"154":{"position":[[270,11]]},"204":{"position":[[16,12],[178,13]]},"205":{"position":[[316,9]]},"296":{"position":[[7559,9]]},"338":{"position":[[58,11],[558,9]]},"339":{"position":[[240,11]]},"341":{"position":[[22,9],[174,11]]},"397":{"position":[[1100,11]]},"477":{"position":[[506,9]]},"598":{"position":[[470,9]]},"947":{"position":[[1302,9]]}},"keywords":{}}],["proxi",{"_index":1006,"title":{},"content":{"67":{"position":[[874,5],[1486,5]]},"1292":{"position":[[3488,5]]},"1306":{"position":[[3488,5]]},"1329":{"position":[[3488,5]]}},"keywords":{}}],["prune",{"_index":1645,"title":{},"content":{"117":{"position":[[464,6]]},"1391":{"position":[[415,5],[1025,5]]}},"keywords":{}}],["pseudo",{"_index":133,"title":{},"content":{"3":{"position":[[771,6],[1010,6]]}},"keywords":{}}],["psql",{"_index":2584,"title":{},"content":{"238":{"position":[[862,4],[949,4]]},"367":{"position":[[159,4]]}},"keywords":{}}],["pt10m",{"_index":4774,"title":{},"content":{"842":{"position":[[2835,5]]},"843":{"position":[[776,5]]}},"keywords":{}}],["pt1h",{"_index":4768,"title":{},"content":{"842":{"position":[[2078,4]]}},"keywords":{}}],["pt30",{"_index":4055,"title":{},"content":{"541":{"position":[[222,5]]}},"keywords":{}}],["pt5m",{"_index":4802,"title":{},"content":{"843":{"position":[[687,4]]},"879":{"position":[[1504,4],[1792,4]]},"880":{"position":[[523,4]]},"1162":{"position":[[734,4]]},"1163":{"position":[[294,4]]}},"keywords":{}}],["ptf",{"_index":5599,"title":{},"content":{"1140":{"position":[[1823,3]]},"1316":{"position":[[1823,3]]},"1340":{"position":[[1823,3]]},"1351":{"position":[[1823,3]]},"1431":{"position":[[1846,3]]}},"keywords":{}}],["pub",{"_index":1908,"title":{},"content":{"162":{"position":[[254,3],[1471,3]]}},"keywords":{}}],["pub/sub",{"_index":690,"title":{"596":{"position":[[13,7]]},"1225":{"position":[[13,7]]}},"content":{"37":{"position":[[218,7]]},"66":{"position":[[388,7]]},"114":{"position":[[844,7]]},"125":{"position":[[310,7]]},"320":{"position":[[423,7]]},"363":{"position":[[1158,7]]},"597":{"position":[[96,7]]},"598":{"position":[[19,8]]},"602":{"position":[[39,7],[117,7],[567,8],[714,7]]},"1120":{"position":[[1123,7]]},"1226":{"position":[[77,7]]},"1229":{"position":[[126,7],[222,7]]},"1232":{"position":[[59,7]]},"1233":{"position":[[22,7]]},"1234":{"position":[[14,7]]},"1440":{"position":[[43,8],[1290,8]]}},"keywords":{}}],["pubin",{"_index":6385,"title":{},"content":{"1384":{"position":[[1000,5]]}},"keywords":{}}],["public",{"_index":651,"title":{"414":{"position":[[7,6]]},"911":{"position":[[0,13]]},"927":{"position":[[0,13]]},"938":{"position":[[0,13]]},"945":{"position":[[12,12]]},"954":{"position":[[0,13]]},"972":{"position":[[0,13]]}},"content":{"31":{"position":[[61,6]]},"56":{"position":[[837,13]]},"81":{"position":[[146,6]]},"88":{"position":[[314,12]]},"180":{"position":[[453,6]]},"189":{"position":[[140,7]]},"190":{"position":[[906,7]]},"222":{"position":[[168,6],[946,6]]},"223":{"position":[[134,6],[874,6]]},"224":{"position":[[187,6],[885,6],[910,6],[961,6]]},"225":{"position":[[151,6]]},"236":{"position":[[3488,11],[3524,11],[3600,11]]},"237":{"position":[[1760,11],[1796,11],[1872,11],[1956,11],[2061,11],[2184,11],[2270,12],[2334,11],[2551,12]]},"238":{"position":[[354,6],[423,6],[1100,6],[1144,6]]},"275":{"position":[[1001,11]]},"299":{"position":[[270,6]]},"307":{"position":[[1193,6],[2043,6]]},"330":{"position":[[440,6]]},"366":{"position":[[509,12]]},"367":{"position":[[333,12],[476,6],[535,6],[750,11]]},"370":{"position":[[921,11],[965,11]]},"414":{"position":[[7,6],[907,6]]},"417":{"position":[[832,6],[1023,6]]},"452":{"position":[[69,6]]},"454":{"position":[[326,6],[347,6]]},"485":{"position":[[467,6]]},"543":{"position":[[55,7],[122,6]]},"657":{"position":[[467,6],[550,6]]},"670":{"position":[[422,6]]},"673":{"position":[[467,6]]},"688":{"position":[[467,6]]},"767":{"position":[[98,6]]},"808":{"position":[[189,6],[1542,6]]},"824":{"position":[[211,6]]},"856":{"position":[[130,7]]},"903":{"position":[[535,12]]},"904":{"position":[[211,6],[1437,12],[1576,6],[1635,6],[1850,11],[1886,11],[1962,11]]},"907":{"position":[[704,11],[748,11]]},"911":{"position":[[28,11],[156,11],[254,11],[379,11]]},"915":{"position":[[535,12]]},"917":{"position":[[543,6],[627,7],[1177,12],[1359,11],[1395,11],[1471,11]]},"918":{"position":[[1729,12],[1868,6],[1927,6],[2142,11],[2178,11],[2254,11]]},"919":{"position":[[1080,6],[1164,7],[1677,12],[1726,6],[1810,7],[2197,11],[2233,11],[2309,11]]},"923":{"position":[[704,11],[748,11]]},"927":{"position":[[28,11],[156,11],[254,11],[379,11]]},"930":{"position":[[535,12]]},"931":{"position":[[189,6],[1094,12],[1238,6],[1297,6],[1512,11],[1548,11],[1624,11],[2021,6]]},"934":{"position":[[704,11],[748,11]]},"938":{"position":[[28,11],[156,11],[254,11],[379,11]]},"944":{"position":[[174,6],[231,6],[286,6],[473,12]]},"945":{"position":[[10,11],[132,11],[203,11],[533,12],[583,11]]},"950":{"position":[[704,11],[748,11]]},"954":{"position":[[28,11],[156,11],[254,11],[379,11]]},"963":{"position":[[689,12]]},"965":{"position":[[543,6],[627,7],[1177,12],[1359,11],[1395,11],[1471,11]]},"968":{"position":[[704,11],[748,11]]},"972":{"position":[[28,11],[156,11],[254,11],[379,11]]},"1051":{"position":[[211,6]]},"1059":{"position":[[189,6],[1868,6]]},"1140":{"position":[[1870,6]]},"1203":{"position":[[523,7]]},"1204":{"position":[[9,6]]},"1207":{"position":[[185,6]]},"1289":{"position":[[638,6],[795,6]]},"1297":{"position":[[8,6]]},"1298":{"position":[[134,6],[874,6]]},"1303":{"position":[[189,6],[1664,6]]},"1316":{"position":[[1870,6]]},"1322":{"position":[[168,6],[946,6]]},"1334":{"position":[[297,6]]},"1335":{"position":[[168,6],[946,6]]},"1340":{"position":[[1870,6]]},"1345":{"position":[[8,6]]},"1346":{"position":[[134,6],[874,6]]},"1351":{"position":[[1870,6]]},"1373":{"position":[[211,6]]},"1374":{"position":[[211,6]]},"1379":{"position":[[2689,6]]},"1384":{"position":[[364,6],[438,6],[501,6],[536,6],[570,6],[709,6]]},"1397":{"position":[[190,6],[1103,6]]},"1398":{"position":[[189,6],[1106,6]]},"1403":{"position":[[2689,6]]},"1414":{"position":[[2689,6]]},"1431":{"position":[[1893,6]]}},"keywords":{}}],["public.flow_watermark",{"_index":2561,"title":{},"content":{"236":{"position":[[3347,22],[3441,22],[3639,23]]},"237":{"position":[[1318,22],[1563,22],[1911,23],[2086,22]]},"367":{"position":[[609,22],[703,22]]},"904":{"position":[[1709,22],[1803,22],[2001,23]]},"917":{"position":[[1218,22],[1312,22],[1510,23]]},"918":{"position":[[2001,22],[2095,22],[2293,23]]},"919":{"position":[[2056,22],[2150,22],[2348,23]]},"931":{"position":[[1371,22],[1465,22],[1663,23]]},"965":{"position":[[1218,22],[1312,22],[1510,23]]}},"keywords":{}}],["public.product",{"_index":2567,"title":{},"content":{"236":{"position":[[3663,16]]},"237":{"position":[[1935,16],[2113,15]]}},"keywords":{}}],["public_key",{"_index":3763,"title":{},"content":{"454":{"position":[[314,11]]},"455":{"position":[[186,11]]}},"keywords":{}}],["publicli",{"_index":3578,"title":{},"content":{"413":{"position":[[144,8]]},"543":{"position":[[176,8]]},"767":{"position":[[1599,8]]},"792":{"position":[[398,8]]},"824":{"position":[[1663,8]]},"918":{"position":[[398,8]]},"1289":{"position":[[399,8]]},"1321":{"position":[[179,8]]},"1334":{"position":[[179,8]]}},"keywords":{}}],["publish",{"_index":261,"title":{"209":{"position":[[0,10]]},"264":{"position":[[19,8]]},"275":{"position":[[25,7]]}},"content":{"8":{"position":[[334,9]]},"11":{"position":[[1904,7]]},"12":{"position":[[21,7],[283,7]]},"13":{"position":[[451,9]]},"24":{"position":[[204,7]]},"26":{"position":[[139,7]]},"31":{"position":[[128,7]]},"33":{"position":[[321,7]]},"54":{"position":[[510,10]]},"55":{"position":[[174,7]]},"60":{"position":[[558,7]]},"61":{"position":[[203,9],[1106,7],[1267,7]]},"63":{"position":[[1021,7]]},"67":{"position":[[827,9],[1119,9]]},"75":{"position":[[465,10]]},"77":{"position":[[582,10]]},"79":{"position":[[157,7]]},"80":{"position":[[642,7]]},"88":{"position":[[163,9]]},"94":{"position":[[1638,9],[1988,9]]},"97":{"position":[[586,9],[626,9]]},"100":{"position":[[677,10],[909,9]]},"105":{"position":[[1606,9]]},"106":{"position":[[66,9]]},"108":{"position":[[194,7]]},"110":{"position":[[249,9],[441,10]]},"111":{"position":[[200,10]]},"114":{"position":[[200,7]]},"115":{"position":[[145,7],[265,9]]},"119":{"position":[[555,10]]},"120":{"position":[[1190,9],[1540,9],[2353,10]]},"121":{"position":[[372,7]]},"138":{"position":[[2635,7],[2718,10]]},"139":{"position":[[187,10]]},"140":{"position":[[376,7]]},"141":{"position":[[2225,7],[2311,10]]},"142":{"position":[[2712,7],[2803,10]]},"143":{"position":[[219,10]]},"144":{"position":[[248,10],[724,10]]},"165":{"position":[[1429,10],[1781,7],[1986,9],[2254,10]]},"183":{"position":[[4385,8],[4434,7],[4475,7],[4516,7]]},"184":{"position":[[973,8]]},"190":{"position":[[1880,8],[1906,10]]},"192":{"position":[[2242,8],[2256,9]]},"207":{"position":[[1329,10]]},"209":{"position":[[78,8],[120,7]]},"217":{"position":[[2170,8],[2222,9]]},"218":{"position":[[857,7],[2096,8],[2155,9]]},"227":{"position":[[380,11]]},"228":{"position":[[1496,8]]},"229":{"position":[[907,7]]},"230":{"position":[[1270,8]]},"237":{"position":[[2199,7]]},"239":{"position":[[2923,7]]},"240":{"position":[[4119,7],[4315,9]]},"253":{"position":[[777,10]]},"255":{"position":[[62,10],[885,7],[956,10],[1129,7],[1177,10]]},"257":{"position":[[120,9]]},"259":{"position":[[1464,8],[3010,8]]},"264":{"position":[[62,7],[507,7],[540,7],[830,9]]},"268":{"position":[[1873,7],[1913,7]]},"269":{"position":[[1335,7],[1375,7]]},"270":{"position":[[446,9],[1950,7],[1991,7]]},"273":{"position":[[96,9]]},"274":{"position":[[769,9]]},"275":{"position":[[83,7],[603,7],[636,7],[695,7],[807,7],[984,10]]},"277":{"position":[[1118,9]]},"278":{"position":[[1458,7]]},"279":{"position":[[664,10]]},"281":{"position":[[1695,10]]},"285":{"position":[[450,10]]},"290":{"position":[[1649,8],[1702,9]]},"291":{"position":[[1906,8],[1965,9]]},"296":{"position":[[4432,9],[6762,7],[6817,7],[6870,10],[7516,8]]},"301":{"position":[[1623,8],[1676,9]]},"302":{"position":[[1818,8],[1877,9]]},"309":{"position":[[1324,8],[1352,7],[1482,7],[1728,8],[1782,7]]},"313":{"position":[[777,10]]},"315":{"position":[[922,9]]},"316":{"position":[[62,10],[1210,7],[1281,10],[1454,7],[1502,10]]},"485":{"position":[[401,10]]},"486":{"position":[[7,10]]},"489":{"position":[[821,7]]},"595":{"position":[[290,10]]},"657":{"position":[[401,10]]},"658":{"position":[[7,10]]},"662":{"position":[[821,7]]},"673":{"position":[[401,10]]},"674":{"position":[[7,10]]},"677":{"position":[[821,7]]},"688":{"position":[[401,10]]},"689":{"position":[[7,10]]},"690":{"position":[[190,10]]},"692":{"position":[[821,7]]},"805":{"position":[[327,10]]},"820":{"position":[[327,10]]},"836":{"position":[[327,10]]},"947":{"position":[[1291,7]]},"1008":{"position":[[1920,7],[1999,7]]},"1047":{"position":[[994,7]]},"1055":{"position":[[994,7]]},"1063":{"position":[[994,7]]},"1230":{"position":[[1246,9],[1325,7]]},"1234":{"position":[[109,9],[186,10],[210,9]]},"1446":{"position":[[391,11]]},"1448":{"position":[[817,7]]},"1461":{"position":[[4027,7],[5310,9]]},"1470":{"position":[[106,7],[515,9]]},"1471":{"position":[[225,9]]},"1475":{"position":[[1507,8],[1866,7]]},"1480":{"position":[[896,9],[1246,9]]}},"keywords":{}}],["publish"",{"_index":3802,"title":{},"content":{"472":{"position":[[829,13]]},"479":{"position":[[909,13]]}},"keywords":{}}],["publish_via_partition_root",{"_index":2566,"title":{},"content":{"236":{"position":[[3557,27]]},"237":{"position":[[1829,27],[2294,26],[2508,26]]},"904":{"position":[[1919,27]]},"911":{"position":[[303,27]]},"917":{"position":[[1428,27]]},"918":{"position":[[2211,27]]},"919":{"position":[[2266,27]]},"927":{"position":[[303,27]]},"931":{"position":[[1581,27]]},"938":{"position":[[303,27]]},"945":{"position":[[236,27]]},"954":{"position":[[303,27]]},"965":{"position":[[1428,27]]},"972":{"position":[[303,27]]}},"keywords":{}}],["publish_via_partition_rootset",{"_index":5000,"title":{},"content":{"904":{"position":[[2125,33]]},"917":{"position":[[1634,33]]},"918":{"position":[[2417,33]]},"931":{"position":[[1787,33]]},"945":{"position":[[279,33]]},"965":{"position":[[1634,33]]}},"keywords":{}}],["pubout",{"_index":6372,"title":{},"content":{"1384":{"position":[[403,6]]}},"keywords":{}}],["pubsub",{"_index":4287,"title":{},"content":{"601":{"position":[[124,6],[347,6],[474,6]]},"1230":{"position":[[525,6],[601,6]]}},"keywords":{}}],["pubsub:dev",{"_index":3299,"title":{},"content":{"363":{"position":[[1219,10]]},"1120":{"position":[[1189,10]]}},"keywords":{}}],["pull",{"_index":761,"title":{"263":{"position":[[23,4]]},"274":{"position":[[0,4]]}},"content":{"44":{"position":[[382,6]]},"54":{"position":[[27,4]]},"60":{"position":[[510,4]]},"61":{"position":[[532,4],[743,4],[1003,6],[1307,4]]},"62":{"position":[[10,4],[87,4],[194,5],[229,4],[340,5],[423,5]]},"63":{"position":[[129,4],[557,7]]},"81":{"position":[[83,6]]},"229":{"position":[[77,4],[161,4]]},"240":{"position":[[3501,6]]},"263":{"position":[[768,4]]},"270":{"position":[[681,4],[764,4]]},"274":{"position":[[443,4],[667,4],[1236,4],[1296,4],[1308,4],[1378,4],[1422,4],[1508,4],[1658,5],[1828,5]]},"275":{"position":[[671,7]]},"326":{"position":[[1734,4]]},"377":{"position":[[1317,4]]},"387":{"position":[[868,4]]},"408":{"position":[[264,7],[365,7]]},"485":{"position":[[91,4]]},"517":{"position":[[677,7]]},"529":{"position":[[370,4],[573,4],[604,4],[623,4]]},"534":{"position":[[320,4],[445,7]]},"654":{"position":[[747,4]]},"657":{"position":[[91,4]]},"673":{"position":[[91,4]]},"688":{"position":[[91,4]]},"1008":{"position":[[783,7],[1037,4],[1136,4]]},"1232":{"position":[[317,5]]},"1446":{"position":[[332,7]]},"1461":{"position":[[4783,4]]}},"keywords":{}}],["punctuat",{"_index":1345,"title":{},"content":{"94":{"position":[[1220,13]]}},"keywords":{}}],["purchas",{"_index":1921,"title":{},"content":{"162":{"position":[[1864,8],[1990,10]]},"556":{"position":[[432,9]]},"701":{"position":[[197,8]]},"846":{"position":[[51,9]]},"848":{"position":[[184,9]]}},"keywords":{}}],["purchase.a",{"_index":1576,"title":{},"content":{"110":{"position":[[723,10]]}},"keywords":{}}],["pure",{"_index":1472,"title":{},"content":{"103":{"position":[[277,6]]},"107":{"position":[[2701,4]]},"115":{"position":[[678,4]]}},"keywords":{}}],["purg",{"_index":2272,"title":{},"content":{"209":{"position":[[1440,5]]},"1292":{"position":[[3531,5]]},"1306":{"position":[[3531,5]]},"1329":{"position":[[3531,5]]},"1356":{"position":[[789,7],[1273,6]]}},"keywords":{}}],["purpl",{"_index":1663,"title":{},"content":{"121":{"position":[[1044,8]]}},"keywords":{}}],["purpos",{"_index":1137,"title":{},"content":{"81":{"position":[[2808,9]]},"190":{"position":[[1333,8]]},"201":{"position":[[133,9]]},"253":{"position":[[705,7]]},"313":{"position":[[705,7]]},"323":{"position":[[37,7]]}},"keywords":{}}],["push",{"_index":178,"title":{"1440":{"position":[[0,4]]}},"content":{"4":{"position":[[565,4],[641,7]]},"32":{"position":[[320,6]]},"36":{"position":[[39,6]]},"63":{"position":[[1091,4]]},"189":{"position":[[1257,4]]},"216":{"position":[[302,4]]},"289":{"position":[[462,6]]},"300":{"position":[[416,6]]},"321":{"position":[[592,4]]},"324":{"position":[[967,7]]},"1440":{"position":[[56,4]]},"1452":{"position":[[2593,4]]}},"keywords":{}}],["pushtop",{"_index":5133,"title":{},"content":{"976":{"position":[[149,9],[281,9]]}},"keywords":{}}],["put",{"_index":1888,"title":{},"content":{"160":{"position":[[388,3]]},"198":{"position":[[228,4]]},"277":{"position":[[459,7]]},"322":{"position":[[996,3]]},"324":{"position":[[1000,3]]},"417":{"position":[[2148,3]]},"486":{"position":[[145,3]]},"658":{"position":[[145,3]]},"674":{"position":[[145,3]]},"689":{"position":[[145,3]]},"1239":{"position":[[177,5]]}},"keywords":{}}],["python",{"_index":1937,"title":{},"content":{"164":{"position":[[274,7]]},"236":{"position":[[2641,6]]},"250":{"position":[[180,6]]}},"keywords":{}}],["python’",{"_index":2644,"title":{},"content":{"250":{"position":[[165,8]]}},"keywords":{}}],["qexrpbp3akealgx6wme1l9utaalkgcfybuxm+erd4gg5qlyfpknsoinxtnlfdry5",{"_index":1249,"title":{},"content":{"83":{"position":[[1962,64]]},"371":{"position":[[881,64]]},"1139":{"position":[[768,64]]}},"keywords":{}}],["qualifi",{"_index":3412,"title":{},"content":{"370":{"position":[[1104,9],[1409,9]]},"757":{"position":[[848,9],[1449,9]]},"770":{"position":[[848,9],[1449,9]]},"797":{"position":[[848,9],[1449,9]]},"812":{"position":[[848,9],[1449,9]]},"828":{"position":[[848,9],[1449,9]]},"867":{"position":[[565,9],[749,9]]},"907":{"position":[[887,9],[1192,9]]},"923":{"position":[[887,9],[1192,9]]},"934":{"position":[[887,9],[1192,9]]},"950":{"position":[[887,9],[1192,9]]},"968":{"position":[[887,9],[1192,9]]},"1045":{"position":[[735,9],[919,9]]},"1053":{"position":[[735,9],[919,9]]},"1061":{"position":[[735,9],[919,9]]},"1394":{"position":[[493,7]]}},"keywords":{}}],["qualiti",{"_index":1045,"title":{},"content":{"70":{"position":[[141,7]]},"84":{"position":[[810,9]]},"156":{"position":[[705,8]]}},"keywords":{}}],["quantiti",{"_index":264,"title":{},"content":{"8":{"position":[[449,8]]},"307":{"position":[[1396,9],[1454,9],[2264,9],[2322,9]]},"309":{"position":[[2199,9],[2273,9],[2796,9],[2880,9]]}},"keywords":{}}],["quarter",{"_index":5870,"title":{},"content":{"1209":{"position":[[384,7]]},"1292":{"position":[[3576,7]]},"1306":{"position":[[3576,7]]},"1329":{"position":[[3576,7]]}},"keywords":{}}],["queri",{"_index":173,"title":{"474":{"position":[[15,5]]},"483":{"position":[[0,5]]},"558":{"position":[[7,8]]},"761":{"position":[[18,8]]},"762":{"position":[[10,8]]},"774":{"position":[[18,8]]},"775":{"position":[[10,8]]},"801":{"position":[[18,8]]},"802":{"position":[[10,8]]},"816":{"position":[[18,8]]},"817":{"position":[[10,8]]},"821":{"position":[[12,5]]},"832":{"position":[[18,8]]},"833":{"position":[[10,8]]},"912":{"position":[[17,5]]}},"content":{"4":{"position":[[509,7],[583,5],[719,5],[773,5]]},"74":{"position":[[927,5]]},"98":{"position":[[49,5],[252,7],[894,5]]},"105":{"position":[[1585,7]]},"112":{"position":[[204,5]]},"113":{"position":[[569,5]]},"114":{"position":[[188,5]]},"125":{"position":[[72,8],[412,6]]},"138":{"position":[[735,6]]},"141":{"position":[[856,6]]},"142":{"position":[[698,6]]},"164":{"position":[[1180,5],[1295,8],[1554,7]]},"180":{"position":[[254,5],[776,6]]},"185":{"position":[[116,7]]},"191":{"position":[[423,8],[2220,7]]},"237":{"position":[[1701,5]]},"240":{"position":[[386,8],[2108,7],[2237,8]]},"277":{"position":[[1164,7]]},"278":{"position":[[669,5]]},"322":{"position":[[1341,8],[1688,5]]},"326":{"position":[[82,5],[160,5],[1208,7],[1711,7]]},"330":{"position":[[589,5]]},"370":{"position":[[875,6]]},"402":{"position":[[846,7]]},"480":{"position":[[73,5],[982,5]]},"482":{"position":[[732,5]]},"483":{"position":[[5,5],[55,5],[354,5],[420,7],[479,6]]},"488":{"position":[[863,5]]},"491":{"position":[[513,5]]},"550":{"position":[[548,8]]},"556":{"position":[[1034,7],[1076,6],[1090,5],[1118,5],[1207,5],[1357,6]]},"557":{"position":[[473,6]]},"558":{"position":[[56,5],[78,8],[176,6],[196,5],[231,5]]},"560":{"position":[[53,7]]},"577":{"position":[[75,7]]},"588":{"position":[[70,7]]},"605":{"position":[[196,7]]},"659":{"position":[[1020,5]]},"664":{"position":[[534,5],[769,5]]},"676":{"position":[[863,5]]},"679":{"position":[[513,5]]},"691":{"position":[[863,5]]},"694":{"position":[[513,5]]},"757":{"position":[[1642,6]]},"761":{"position":[[146,5],[502,5]]},"762":{"position":[[80,5],[270,6],[336,6]]},"770":{"position":[[1642,6]]},"774":{"position":[[146,5],[502,5]]},"775":{"position":[[80,5],[270,6],[336,6]]},"797":{"position":[[1642,6]]},"801":{"position":[[146,5],[508,5]]},"802":{"position":[[80,5],[270,6],[336,6]]},"812":{"position":[[1642,6]]},"816":{"position":[[146,5],[508,5]]},"817":{"position":[[80,5],[270,6],[336,6]]},"821":{"position":[[12,5],[116,7],[622,6],[810,5]]},"828":{"position":[[1642,6]]},"832":{"position":[[146,5],[508,5]]},"833":{"position":[[80,5],[270,6],[336,6]]},"842":{"position":[[2548,5],[2597,6],[2699,5],[2725,8]]},"867":{"position":[[967,6],[1129,6]]},"879":{"position":[[1124,6]]},"907":{"position":[[658,6]]},"912":{"position":[[17,5],[124,7],[638,6],[826,5],[919,5],[1287,7],[1358,8],[1419,5]]},"922":{"position":[[1800,5]]},"923":{"position":[[658,6]]},"934":{"position":[[658,6]]},"942":{"position":[[641,5]]},"950":{"position":[[658,6]]},"968":{"position":[[658,6]]},"1032":{"position":[[399,7]]},"1034":{"position":[[562,8]]},"1042":{"position":[[458,7],[857,5],[928,5]]},"1043":{"position":[[1122,7],[1521,5],[1592,5]]},"1045":{"position":[[643,6]]},"1051":{"position":[[1384,7],[1783,5],[1854,5]]},"1053":{"position":[[643,6]]},"1059":{"position":[[1177,7],[1576,5],[1647,5]]},"1061":{"position":[[643,6]]},"1165":{"position":[[19,5]]},"1166":{"position":[[205,8]]},"1182":{"position":[[153,8]]},"1191":{"position":[[153,8]]},"1192":{"position":[[413,7]]},"1262":{"position":[[153,8]]},"1276":{"position":[[105,8],[297,8]]},"1292":{"position":[[3623,5]]},"1306":{"position":[[3623,5]]},"1329":{"position":[[3623,5]]},"1356":{"position":[[683,5]]},"1370":{"position":[[797,5]]},"1383":{"position":[[463,7]]},"1388":{"position":[[583,5]]},"1389":{"position":[[153,8]]},"1394":{"position":[[410,7]]},"1423":{"position":[[420,7]]}},"keywords":{}}],["queries.a",{"_index":5211,"title":{},"content":{"1031":{"position":[[197,9]]}},"keywords":{}}],["query"",{"_index":4639,"title":{},"content":{"761":{"position":[[58,11]]},"762":{"position":[[52,11]]},"774":{"position":[[58,11]]},"775":{"position":[[52,11]]},"801":{"position":[[58,11]]},"802":{"position":[[52,11]]},"816":{"position":[[58,11]]},"817":{"position":[[52,11]]},"832":{"position":[[58,11]]},"833":{"position":[[52,11]]}},"keywords":{}}],["query_limit",{"_index":4771,"title":{},"content":{"842":{"position":[[2535,12]]},"843":{"position":[[726,12]]}},"keywords":{}}],["query_timeout",{"_index":4773,"title":{},"content":{"842":{"position":[[2684,14]]},"843":{"position":[[761,14]]}},"keywords":{}}],["querysitemapssit",{"_index":4301,"title":{},"content":{"605":{"position":[[350,18]]}},"keywords":{}}],["question",{"_index":524,"title":{},"content":{"19":{"position":[[490,9]]},"232":{"position":[[1050,9]]},"281":{"position":[[2284,9]]},"1435":{"position":[[677,8]]}},"keywords":{}}],["questionssurvey",{"_index":5267,"title":{},"content":{"1065":{"position":[[72,15]]}},"keywords":{}}],["queue",{"_index":3557,"title":{},"content":{"405":{"position":[[45,5]]},"408":{"position":[[71,5],[96,5],[159,5],[462,5]]},"411":{"position":[[77,5]]},"1443":{"position":[[252,5]]}},"keywords":{}}],["queueenter",{"_index":3559,"title":{},"content":{"406":{"position":[[90,10]]}},"keywords":{}}],["quick",{"_index":2542,"title":{},"content":{"236":{"position":[[1748,5]]},"238":{"position":[[107,5]]},"239":{"position":[[630,5],[1948,5]]},"1292":{"position":[[3673,5]]},"1306":{"position":[[3673,5]]},"1329":{"position":[[3673,5]]}},"keywords":{}}],["quicker",{"_index":1213,"title":{},"content":{"83":{"position":[[229,7]]},"135":{"position":[[896,7]]}},"keywords":{}}],["quickli",{"_index":327,"title":{},"content":{"11":{"position":[[1169,7]]},"38":{"position":[[364,8]]},"124":{"position":[[44,7]]},"163":{"position":[[922,7]]},"180":{"position":[[726,7]]},"185":{"position":[[77,7]]},"210":{"position":[[1658,7]]},"213":{"position":[[329,7]]},"238":{"position":[[727,7]]},"253":{"position":[[379,7]]},"255":{"position":[[24,7]]},"288":{"position":[[778,7]]},"299":{"position":[[693,7]]},"313":{"position":[[379,7]]},"316":{"position":[[24,7]]},"333":{"position":[[141,7]]},"1082":{"position":[[103,7]]}},"keywords":{}}],["quirk",{"_index":2547,"title":{},"content":{"236":{"position":[[2086,5]]}},"keywords":{}}],["quit",{"_index":1886,"title":{},"content":{"160":{"position":[[20,5]]},"180":{"position":[[583,5]]},"192":{"position":[[1452,5]]},"217":{"position":[[1924,5]]},"321":{"position":[[1530,5]]}},"keywords":{}}],["quot",{"_index":2510,"title":{},"content":{"236":{"position":[[840,6]]},"418":{"position":[[319,6]]},"419":{"position":[[2655,5],[2678,5],[2712,5],[2734,7]]},"439":{"position":[[576,6]]},"441":{"position":[[1264,5],[1287,5],[1321,5],[1343,7]]},"504":{"position":[[2284,5],[2307,5],[2341,5],[2363,7]]},"546":{"position":[[310,6],[1056,6]]},"547":{"position":[[2657,5],[2680,5],[2714,5],[2736,7]]},"594":{"position":[[298,6]]},"638":{"position":[[348,6]]},"639":{"position":[[2282,5],[2305,5],[2339,5],[2361,7]]},"1022":{"position":[[385,6],[392,8]]},"1023":{"position":[[2638,5],[2661,5],[2695,5],[2717,7]]},"1140":{"position":[[54,6],[312,6]]},"1155":{"position":[[97,7]]},"1192":{"position":[[54,6],[118,6],[296,6],[375,7]]},"1209":{"position":[[157,6]]},"1292":{"position":[[49,6],[241,6]]},"1306":{"position":[[49,6],[241,6]]},"1316":{"position":[[54,6],[312,6]]},"1329":{"position":[[49,6],[241,6]]},"1340":{"position":[[54,6],[312,6]]},"1351":{"position":[[54,6],[312,6]]},"1370":{"position":[[50,6],[304,6]]},"1379":{"position":[[53,6],[249,6]]},"1394":{"position":[[53,6],[117,6],[293,6],[372,7]]},"1403":{"position":[[53,6],[249,6]]},"1414":{"position":[[53,6],[249,6]]},"1423":{"position":[[60,6],[124,6],[303,6],[382,7]]},"1431":{"position":[[77,6],[335,6]]}},"keywords":{}}],["quot;#min",{"_index":6712,"title":{},"content":{"1476":{"position":[[1459,10]]}},"keywords":{}}],["quot;$12.30"",{"_index":1390,"title":{},"content":{"96":{"position":[[667,18]]}},"keywords":{}}],["quot;$ref"",{"_index":2302,"title":{},"content":{"210":{"position":[[1353,17],[1408,17]]}},"keywords":{}}],["quot;$schema"",{"_index":2284,"title":{},"content":{"210":{"position":[[846,20]]},"253":{"position":[[1195,20]]},"313":{"position":[[1195,20]]}},"keywords":{}}],["quot;<a",{"_index":2743,"title":{},"content":{"253":{"position":[[2305,11]]},"313":{"position":[[2305,11]]}},"keywords":{}}],["quot;<dimens",{"_index":4225,"title":{},"content":{"585":{"position":[[339,20]]},"606":{"position":[[267,20]]}},"keywords":{}}],["quot;<filt",{"_index":4234,"title":{},"content":{"585":{"position":[[837,16]]}},"keywords":{}}],["quot;<host>:1433"",{"_index":5256,"title":{},"content":{"1046":{"position":[[132,29]]},"1054":{"position":[[132,29]]},"1062":{"position":[[132,29]]}},"keywords":{}}],["quot;<metr",{"_index":4226,"title":{},"content":{"585":{"position":[[403,17],[723,17]]}},"keywords":{}}],["quot;<oth",{"_index":4229,"title":{},"content":{"585":{"position":[[654,15]]}},"keywords":{}}],["quot;<report",{"_index":4223,"title":{},"content":{"585":{"position":[[282,16],[572,16]]},"606":{"position":[[210,16]]}},"keywords":{}}],["quot;<schema_a>"."<table_1>"",{"_index":4850,"title":{},"content":{"864":{"position":[[612,56]]},"876":{"position":[[612,56]]}},"keywords":{}}],["quot;<schema_b>"."<table_2>"",{"_index":4851,"title":{},"content":{"864":{"position":[[707,56]]},"876":{"position":[[707,56]]}},"keywords":{}}],["quot;<seg",{"_index":4231,"title":{},"content":{"585":{"position":[[785,17]]}},"keywords":{}}],["quot;<topic>",{"_index":5890,"title":{},"content":{"1230":{"position":[[986,19]]}},"keywords":{}}],["quot;"",{"_index":2456,"title":{},"content":{"221":{"position":[[1374,12]]},"222":{"position":[[619,12]]},"223":{"position":[[585,12]]},"224":{"position":[[638,12]]},"296":{"position":[[6242,13],[6396,13]]},"482":{"position":[[893,12]]},"1298":{"position":[[585,12]]},"1322":{"position":[[619,12]]},"1335":{"position":[[619,12]]},"1346":{"position":[[585,12]]}},"keywords":{}}],["quot;")auto",{"_index":3629,"title":{},"content":{"419":{"position":[[2159,18],[2742,18]]},"441":{"position":[[768,18],[1351,18]]},"504":{"position":[[1788,18],[2371,18]]},"547":{"position":[[2161,18],[2744,18]]},"639":{"position":[[1786,18],[2369,18]]},"1023":{"position":[[2142,18],[2725,18]]}},"keywords":{}}],["quot;)dis",{"_index":3637,"title":{},"content":{"419":{"position":[[2718,15]]},"441":{"position":[[1327,15]]},"504":{"position":[[2347,15]]},"547":{"position":[[2720,15]]},"639":{"position":[[2345,15]]},"1023":{"position":[[2701,15]]}},"keywords":{}}],["quot;*"",{"_index":3582,"title":{},"content":{"414":{"position":[[432,14],[631,14]]},"1194":{"position":[[402,13]]}},"keywords":{}}],["quot;,"",{"_index":3602,"title":{},"content":{"418":{"position":[[196,13]]},"439":{"position":[[453,13]]},"546":{"position":[[933,13]]},"638":{"position":[[225,13]]},"1022":{"position":[[262,13]]}},"keywords":{}}],["quot;,")pip",{"_index":3615,"title":{},"content":{"419":{"position":[[1652,19]]},"441":{"position":[[261,19]]},"504":{"position":[[1281,19]]},"547":{"position":[[1654,19]]},"639":{"position":[[1279,19]]},"1023":{"position":[[1635,19]]}},"keywords":{}}],["quot;.*\\.json"",{"_index":3594,"title":{},"content":{"417":{"position":[[1309,20]]},"438":{"position":[[1825,20]]},"503":{"position":[[151,20]]},"545":{"position":[[933,20]]}},"keywords":{}}],["quot;..."",{"_index":3876,"title":{},"content":{"488":{"position":[[1138,16]]},"659":{"position":[[1295,16]]},"676":{"position":[[1138,16]]},"691":{"position":[[1138,16]]}},"keywords":{}}],["quot;/_id"",{"_index":2306,"title":{},"content":{"210":{"position":[[1485,18]]}},"keywords":{}}],["quot;/_meta/mtime"",{"_index":4269,"title":{},"content":{"595":{"position":[[831,27]]}},"keywords":{}}],["quot;/foo"",{"_index":5258,"title":{},"content":{"1047":{"position":[[747,19]]},"1055":{"position":[[747,19]]},"1063":{"position":[[747,19]]}},"keywords":{}}],["quot;/mediawiki/recentchange/1.0.0"",{"_index":2694,"title":{},"content":{"253":{"position":[[1216,42]]},"313":{"position":[[1216,42]]}},"keywords":{}}],["quot;/messageid"",{"_index":4410,"title":{},"content":{"661":{"position":[[490,25]]}},"keywords":{}}],["quot;/metal_type"",{"_index":1101,"title":{},"content":{"76":{"position":[[946,23]]}},"keywords":{}}],["quot;/my_folder"",{"_index":3902,"title":{},"content":{"502":{"position":[[129,23]]},"503":{"position":[[117,22]]}},"keywords":{}}],["quot;/path/dir/flow.yaml"",{"_index":1283,"title":{},"content":{"87":{"position":[[246,31]]}},"keywords":{}}],["quot;/path/in/google/drive"",{"_index":4140,"title":{},"content":{"566":{"position":[[233,33]]}},"keywords":{}}],["quot;/product/id"",{"_index":1097,"title":{},"content":{"76":{"position":[[775,23]]}},"keywords":{}}],["quot;/userprofile/schema"",{"_index":6629,"title":{},"content":{"1461":{"position":[[5017,31]]}},"keywords":{}}],["quot;/w"",{"_index":2751,"title":{},"content":{"253":{"position":[[2684,15]]},"313":{"position":[[2684,15]]}},"keywords":{}}],["quot;0x01")auto",{"_index":3622,"title":{},"content":{"419":{"position":[[1826,22]]},"441":{"position":[[435,22]]},"504":{"position":[[1455,22]]},"547":{"position":[[1828,22]]},"639":{"position":[[1453,22]]},"1023":{"position":[[1809,22]]}},"keywords":{}}],["quot;0x09")vert",{"_index":3619,"title":{},"content":{"419":{"position":[[1740,26]]},"441":{"position":[[349,26]]},"504":{"position":[[1369,26]]},"547":{"position":[[1742,26]]},"639":{"position":[[1367,26]]},"1023":{"position":[[1723,26]]}},"keywords":{}}],["quot;0x0b")unit",{"_index":3620,"title":{},"content":{"419":{"position":[[1771,22]]},"441":{"position":[[380,22]]},"504":{"position":[[1400,22]]},"547":{"position":[[1773,22]]},"639":{"position":[[1398,22]]},"1023":{"position":[[1754,22]]}},"keywords":{}}],["quot;0x1e")auto",{"_index":3635,"title":{},"content":{"419":{"position":[[2632,22]]},"441":{"position":[[1241,22]]},"504":{"position":[[2261,22]]},"547":{"position":[[2634,22]]},"639":{"position":[[2259,22]]},"1023":{"position":[[2615,22]]}},"keywords":{}}],["quot;0x1f")soh",{"_index":3621,"title":{},"content":{"419":{"position":[[1804,21]]},"441":{"position":[[413,21]]},"504":{"position":[[1433,21]]},"547":{"position":[[1806,21]]},"639":{"position":[[1431,21]]},"1023":{"position":[[1787,21]]}},"keywords":{}}],["quot;0x20")semicolon",{"_index":3617,"title":{},"content":{"419":{"position":[[1693,27]]},"441":{"position":[[302,27]]},"504":{"position":[[1322,27]]},"547":{"position":[[1695,27]]},"639":{"position":[[1320,27]]},"1023":{"position":[[1676,27]]}},"keywords":{}}],["quot;12345678"",{"_index":4785,"title":{},"content":{"843":{"position":[[122,20]]}},"keywords":{}}],["quot;127.0.0.1:3306"",{"_index":4625,"title":{},"content":{"758":{"position":[[178,26]]},"771":{"position":[[178,26]]},"798":{"position":[[176,26]]},"813":{"position":[[176,26]]},"829":{"position":[[176,26]]}},"keywords":{}}],["quot;127.0.0.1:5432"",{"_index":3427,"title":{},"content":{"371":{"position":[[190,26]]}},"keywords":{}}],["quot;2012",{"_index":1997,"title":{},"content":{"172":{"position":[[282,10]]},"414":{"position":[[269,10]]},"415":{"position":[[529,10]]}},"keywords":{}}],["quot;2022",{"_index":1180,"title":{},"content":{"82":{"position":[[2557,10],[2690,10],[4698,10],[4828,10]]}},"keywords":{}}],["quot;2023",{"_index":1380,"title":{},"content":{"96":{"position":[[406,10],[625,10]]},"352":{"position":[[76,10]]},"852":{"position":[[269,10]]}},"keywords":{}}],["quot;2024",{"_index":2380,"title":{},"content":{"210":{"position":[[3260,10]]},"253":{"position":[[1685,10]]},"313":{"position":[[1685,10]]}},"keywords":{}}],["quot;24h"",{"_index":3841,"title":{},"content":{"480":{"position":[[1538,15]]},"482":{"position":[[461,15]]}},"keywords":{}}],["quot;3",{"_index":2376,"title":{},"content":{"210":{"position":[[3198,7]]}},"keywords":{}}],["quot;3g"",{"_index":507,"title":{},"content":{"17":{"position":[[1019,16]]}},"keywords":{}}],["quot;48h"",{"_index":1358,"title":{},"content":{"94":{"position":[[2740,15]]}},"keywords":{}}],["quot;5432:5432"",{"_index":2526,"title":{},"content":{"236":{"position":[[1097,21]]}},"keywords":{}}],["quot;5m"",{"_index":3843,"title":{},"content":{"480":{"position":[[1702,14]]}},"keywords":{}}],["quot;5s"",{"_index":3844,"title":{},"content":{"480":{"position":[[1725,14]]}},"keywords":{}}],["quot;:eyes:"",{"_index":6288,"title":{},"content":{"1363":{"position":[[376,18]]}},"keywords":{}}],["quot;;")tab",{"_index":3618,"title":{},"content":{"419":{"position":[[1721,18]]},"441":{"position":[[330,18]]},"504":{"position":[[1350,18]]},"547":{"position":[[1723,18]]},"639":{"position":[[1348,18]]},"1023":{"position":[[1704,18]]}},"keywords":{}}],["quot;[[:file:jeton",{"_index":2706,"title":{},"content":{"253":{"position":[[1466,20]]},"313":{"position":[[1466,20]]}},"keywords":{}}],["quot;\\""",{"_index":3609,"title":{},"content":{"418":{"position":[[326,19]]},"439":{"position":[[583,19]]},"546":{"position":[[1063,19]]},"638":{"position":[[355,19]]}},"keywords":{}}],["quot;\\"")singl",{"_index":3636,"title":{},"content":{"419":{"position":[[2684,27]]},"441":{"position":[[1293,27]]},"504":{"position":[[2313,27]]},"547":{"position":[[2686,27]]},"639":{"position":[[2311,27]]},"1023":{"position":[[2667,27]]}},"keywords":{}}],["quot;\\\\")dis",{"_index":3628,"title":{},"content":{"419":{"position":[[2127,23]]},"441":{"position":[[736,23]]},"504":{"position":[[1756,23]]},"547":{"position":[[2129,23]]},"639":{"position":[[1754,23]]},"1023":{"position":[[2110,23]]}},"keywords":{}}],["quot;\\\\n")record",{"_index":3634,"title":{},"content":{"419":{"position":[[2598,23]]},"441":{"position":[[1207,23]]},"504":{"position":[[2227,23]]},"547":{"position":[[2600,23]]},"639":{"position":[[2225,23]]},"1023":{"position":[[2581,23]]}},"keywords":{}}],["quot;\\\\r"",{"_index":3608,"title":{},"content":{"418":{"position":[[303,15]]},"439":{"position":[[560,15]]},"546":{"position":[[1040,15]]},"638":{"position":[[332,15]]},"1022":{"position":[[369,15]]}},"keywords":{}}],["quot;\\\\r")lf",{"_index":3633,"title":{},"content":{"419":{"position":[[2578,19]]},"441":{"position":[[1187,19]]},"504":{"position":[[2207,19]]},"547":{"position":[[2580,19]]},"639":{"position":[[2205,19]]},"1023":{"position":[[2561,19]]}},"keywords":{}}],["quot;\\\\r\\\\n"",{"_index":3631,"title":{},"content":{"419":{"position":[[2545,20]]},"441":{"position":[[1154,20]]},"504":{"position":[[2174,20]]},"547":{"position":[[2547,20]]},"639":{"position":[[2172,20]]},"1023":{"position":[[2528,20]]}},"keywords":{}}],["quot;_id"",{"_index":2281,"title":{},"content":{"210":{"position":[[721,18],[766,16]]}},"keywords":{}}],["quot;_meta"",{"_index":983,"title":{},"content":{"66":{"position":[[850,18]]},"210":{"position":[[825,18]]},"253":{"position":[[1259,18]]},"313":{"position":[[1259,18]]},"315":{"position":[[1048,19],[2019,18]]},"488":{"position":[[1094,18]]},"659":{"position":[[1251,18]]},"676":{"position":[[1094,18]]},"691":{"position":[[1094,18]]}},"keywords":{}}],["quot;_meta":{"file":"recentchange","offset":13757,"uuid":"079296f",{"_index":3089,"title":{},"content":{"316":{"position":[[249,118]]}},"keywords":{}}],["quot;_meta":{"file":"recentchange","offset":13772,"uuid":"082ae4fc",{"_index":3092,"title":{},"content":{"316":{"position":[[531,118]]}},"keywords":{}}],["quot;_meta":{"file":"recentchange","offset":13774,"uuid":"082ae4fc",{"_index":3094,"title":{},"content":{"316":{"position":[[821,118]]}},"keywords":{}}],["quot;_meta":{"uuid":"9790e50",{"_index":2972,"title":{},"content":{"295":{"position":[[1909,51],[2189,51],[2472,51],[2757,51],[3041,51],[3324,51],[3607,51]]}},"keywords":{}}],["quot;_sops"",{"_index":1203,"title":{},"content":{"82":{"position":[[4064,17],[4252,17]]}},"keywords":{}}],["quot;a",{"_index":2332,"title":{},"content":{"210":{"position":[[2372,7]]}},"keywords":{}}],["quot;a"",{"_index":1422,"title":{},"content":{"98":{"position":[[1153,15]]},"164":{"position":[[650,15],[719,15]]},"1467":{"position":[[1359,14],[1433,14],[1565,14],[2489,14],[2581,14],[2735,14]]},"1476":{"position":[[1717,15],[1742,15],[1948,15],[1973,15],[2078,15],[2101,15],[2126,15],[2177,15]]},"1477":{"position":[[1771,14],[1964,14],[2115,14],[2290,14],[2385,14],[2536,14],[4115,16],[4312,16],[4471,16],[4656,16],[4753,16],[4912,16]]}},"keywords":{}}],["quot;abc"",{"_index":6648,"title":{},"content":{"1464":{"position":[[593,16],[720,16]]},"1476":{"position":[[499,15]]}},"keywords":{}}],["quot;access",{"_index":4979,"title":{},"content":{"898":{"position":[[1434,12],[1692,12]]}},"keywords":{}}],["quot;access_key"",{"_index":3571,"title":{},"content":{"409":{"position":[[124,23]]}},"keywords":{}}],["quot;access_token"",{"_index":4980,"title":{},"content":{"898":{"position":[[1524,25],[1804,25],[1911,24],[1990,24]]}},"keywords":{}}],["quot;account_name"",{"_index":6578,"title":{},"content":{"1453":{"position":[[1407,24]]}},"keywords":{}}],["quot;acmeco/us",{"_index":472,"title":{},"content":{"16":{"position":[[812,17]]}},"keywords":{}}],["quot;action"",{"_index":2007,"title":{},"content":{"172":{"position":[[536,19],[844,19],[1094,19]]},"414":{"position":[[447,19],[646,19]]},"415":{"position":[[670,19],[831,19]]},"1465":{"position":[[610,19],[842,19]]}},"keywords":{}}],["quot;active"",{"_index":754,"title":{},"content":{"44":{"position":[[105,18]]}},"keywords":{}}],["quot;add",{"_index":5070,"title":{},"content":{"931":{"position":[[770,9]]}},"keywords":{}}],["quot;add"",{"_index":6719,"title":{},"content":{"1477":{"position":[[1115,16],[1752,16],[1945,16],[2096,16],[2366,16],[2517,16],[3343,16],[4098,16],[4295,16],[4454,16],[4736,16],[4895,16]]}},"keywords":{}}],["quot;admin"",{"_index":2030,"title":{},"content":{"174":{"position":[[126,18]]}},"keywords":{}}],["quot;agent"",{"_index":476,"title":{},"content":{"16":{"position":[[890,18]]}},"keywords":{}}],["quot;airbyte_secret"",{"_index":4971,"title":{},"content":{"898":{"position":[[657,27],[880,27],[1112,27],[1552,27]]}},"keywords":{}}],["quot;aircall"",{"_index":3254,"title":{},"content":{"349":{"position":[[206,19]]}},"keywords":{}}],["quot;allof"",{"_index":2301,"title":{},"content":{"210":{"position":[[1330,18]]}},"keywords":{}}],["quot;allow"",{"_index":2002,"title":{},"content":{"172":{"position":[[420,18],[728,18],[978,18]]},"414":{"position":[[390,18],[589,18]]},"415":{"position":[[651,18],[812,18]]}},"keywords":{}}],["quot;allowuserstoaccessobjectsunderprefix"",{"_index":2000,"title":{},"content":{"172":{"position":[[350,49]]}},"keywords":{}}],["quot;api",{"_index":3794,"title":{},"content":{"472":{"position":[[613,9]]}},"keywords":{}}],["quot;arn:aws:iam::789740162118:user/flow",{"_index":2005,"title":{},"content":{"172":{"position":[[481,41],[789,41],[1039,41]]}},"keywords":{}}],["quot;arn:aws:s3:::example_bucket"",{"_index":3583,"title":{},"content":{"414":{"position":[[522,39]]},"415":{"position":[[745,39]]}},"keywords":{}}],["quot;arn:aws:s3:::example_bucket/*"",{"_index":3584,"title":{},"content":{"414":{"position":[[720,41]]},"415":{"position":[[905,41]]}},"keywords":{}}],["quot;arn:aws:s3:::your",{"_index":2012,"title":{},"content":{"172":{"position":[[661,23],[913,23],[1168,23]]}},"keywords":{}}],["quot;arr"",{"_index":1430,"title":{},"content":{"99":{"position":[[599,16]]}},"keywords":{}}],["quot;array"",{"_index":6646,"title":{},"content":{"1464":{"position":[[269,18]]},"1467":{"position":[[571,17]]}},"keywords":{}}],["quot;at",{"_index":1635,"title":{},"content":{"115":{"position":[[1497,8]]},"660":{"position":[[31,8]]}},"keywords":{}}],["quot;auth_method"",{"_index":4965,"title":{},"content":{"898":{"position":[[250,23],[459,24],[1357,24],[1758,24],[1965,24]]}},"keywords":{}}],["quot;auth_provider_x509_cert_url"",{"_index":4079,"title":{},"content":{"546":{"position":[[656,40]]},"594":{"position":[[644,40]]}},"keywords":{}}],["quot;auth_uri"",{"_index":4075,"title":{},"content":{"546":{"position":[[500,21]]},"594":{"position":[[488,21]]}},"keywords":{}}],["quot;author",{"_index":4952,"title":{},"content":{"895":{"position":[[282,19]]},"943":{"position":[[1070,20]]}},"keywords":{}}],["quot;automat",{"_index":824,"title":{},"content":{"55":{"position":[[916,19]]},"483":{"position":[[752,19]]}},"keywords":{}}],["quot;awards"",{"_index":2372,"title":{},"content":{"210":{"position":[[3109,19]]}},"keywords":{}}],["quot;aws"",{"_index":2004,"title":{},"content":{"172":{"position":[[464,16],[772,16],[1022,16]]}},"keywords":{}}],["quot;b"",{"_index":1423,"title":{},"content":{"98":{"position":[[1172,14]]},"164":{"position":[[666,15],[735,14]]},"1467":{"position":[[1377,14],[1583,14],[2517,14],[2763,14]]},"1476":{"position":[[1871,15],[1896,15]]},"1477":{"position":[[1789,14],[1887,14],[4136,15],[4235,16]]}},"keywords":{}}],["quot;b5372124",{"_index":2727,"title":{},"content":{"253":{"position":[[1867,14]]},"313":{"position":[[1867,14]]}},"keywords":{}}],["quot;bar"",{"_index":1431,"title":{},"content":{"99":{"position":[[616,18]]}},"keywords":{}}],["quot;bigqueri",{"_index":3810,"title":{},"content":{"475":{"position":[[152,14],[182,14]]},"477":{"position":[[81,14],[111,14],[1017,14],[1047,14]]}},"keywords":{}}],["quot;bigquery"",{"_index":3822,"title":{},"content":{"479":{"position":[[170,20]]}},"keywords":{}}],["quot;bindings"",{"_index":5840,"title":{},"content":{"1200":{"position":[[779,21]]}},"keywords":{}}],["quot;binlog",{"_index":4654,"title":{},"content":{"764":{"position":[[30,12],[763,12]]},"777":{"position":[[30,12],[763,12]]},"804":{"position":[[30,12],[761,12]]},"819":{"position":[[30,12],[761,12]]},"835":{"position":[[30,12],[761,12]]}},"keywords":{}}],["quot;blue"",{"_index":1667,"title":{},"content":{"121":{"position":[[1365,17],[1425,17]]}},"keywords":{}}],["quot;bot"",{"_index":2704,"title":{},"content":{"253":{"position":[[1421,16],[3273,16]]},"313":{"position":[[1421,16]]}},"keywords":{}}],["quot;bucketanonymousread"",{"_index":3581,"title":{},"content":{"414":{"position":[[337,32]]}},"keywords":{}}],["quot;c"",{"_index":1938,"title":{},"content":{"164":{"position":[[682,15],[750,14]]},"210":{"position":[[1024,15]]},"1467":{"position":[[1451,14],[1601,14],[2609,14],[2791,14]]},"1476":{"position":[[1794,15],[1819,15],[2202,15]]},"1477":{"position":[[1807,14],[2133,14],[4156,15],[4492,15]]}},"keywords":{}}],["quot;ca"",{"_index":475,"title":{},"content":{"16":{"position":[[874,15]]}},"keywords":{}}],["quot;capture"",{"_index":6684,"title":{},"content":{"1474":{"position":[[478,20]]}},"keywords":{}}],["quot;captures"",{"_index":3251,"title":{},"content":{"349":{"position":[[73,21]]},"895":{"position":[[118,20]]},"1092":{"position":[[73,21]]}},"keywords":{}}],["quot;captures".select",{"_index":3789,"title":{},"content":{"472":{"position":[[485,27]]}},"keywords":{}}],["quot;cast"",{"_index":2349,"title":{},"content":{"210":{"position":[[2694,17]]}},"keywords":{}}],["quot;categorize"",{"_index":2757,"title":{},"content":{"253":{"position":[[2955,23]]},"313":{"position":[[2955,23]]}},"keywords":{}}],["quot;category:jetons"",{"_index":2755,"title":{},"content":{"253":{"position":[[2821,28]]},"313":{"position":[[2821,28]]}},"keywords":{}}],["quot;cdc_role"",{"_index":5095,"title":{},"content":{"943":{"position":[[1202,20]]}},"keywords":{}}],["quot;chang",{"_index":2292,"title":{},"content":{"210":{"position":[[1090,12],[1145,12]]}},"keywords":{}}],["quot;christoph",{"_index":2367,"title":{},"content":{"210":{"position":[[3038,18]]}},"keywords":{}}],["quot;client",{"_index":4074,"title":{},"content":{"546":{"position":[[477,12]]},"594":{"position":[[465,12]]},"895":{"position":[[447,12],[473,12]]},"898":{"position":[[788,12],[1016,12]]}},"keywords":{}}],["quot;client_email"",{"_index":4070,"title":{},"content":{"546":{"position":[[393,25]]},"594":{"position":[[381,25]]}},"keywords":{}}],["quot;client_id"",{"_index":4073,"title":{},"content":{"546":{"position":[[454,22]]},"594":{"position":[[442,22]]},"898":{"position":[[632,22]]}},"keywords":{}}],["quot;client_secret"",{"_index":4974,"title":{},"content":{"898":{"position":[[851,26]]}},"keywords":{}}],["quot;client_x509_cert_url"",{"_index":4081,"title":{},"content":{"546":{"position":[[753,33]]},"594":{"position":[[741,33]]}},"keywords":{}}],["quot;cmd",{"_index":2514,"title":{},"content":{"236":{"position":[[906,10]]}},"keywords":{}}],["quot;collection."",{"_index":1816,"title":{},"content":{"141":{"position":[[998,23]]}},"keywords":{}}],["quot;color"",{"_index":1664,"title":{},"content":{"121":{"position":[[1286,19],[1345,19],[1405,19]]}},"keywords":{}}],["quot;combine"",{"_index":1705,"title":{},"content":{"125":{"position":[[926,21]]}},"keywords":{}}],["quot;comment"",{"_index":2705,"title":{},"content":{"253":{"position":[[1445,20]]},"313":{"position":[[1445,20]]}},"keywords":{}}],["quot;commons.wikimedia.org"",{"_index":2716,"title":{},"content":{"253":{"position":[[1634,34],[2617,34]]},"313":{"position":[[1634,34],[2617,34],[3305,34]]}},"keywords":{}}],["quot;commonswiki"",{"_index":2761,"title":{},"content":{"253":{"position":[[3040,23]]},"313":{"position":[[3040,23]]}},"keywords":{}}],["quot;configur",{"_index":2032,"title":{},"content":{"174":{"position":[[171,15]]}},"keywords":{}}],["quot;confluence"ent",{"_index":3792,"title":{},"content":{"472":{"position":[[564,27]]}},"keywords":{}}],["quot;connector",{"_index":3252,"title":{},"content":{"349":{"position":[[125,15]]},"1092":{"position":[[125,15]]}},"keywords":{}}],["quot;const"",{"_index":4970,"title":{},"content":{"898":{"position":[[486,18],[1785,18]]}},"keywords":{}}],["quot;contains"",{"_index":5167,"title":{},"content":{"1009":{"position":[[1209,21],[1368,20]]}},"keywords":{}}],["quot;cor",{"_index":4818,"title":{},"content":{"849":{"position":[[1661,10]]}},"keywords":{}}],["quot;cost"",{"_index":1389,"title":{},"content":{"96":{"position":[[649,17]]}},"keywords":{}}],["quot;count"",{"_index":988,"title":{},"content":{"66":{"position":[[941,18]]}},"keywords":{}}],["quot;countries"",{"_index":2391,"title":{},"content":{"210":{"position":[[3419,22]]}},"keywords":{}}],["quot;country"",{"_index":474,"title":{},"content":{"16":{"position":[[852,21]]}},"keywords":{}}],["quot;coyote"",{"_index":1691,"title":{},"content":{"123":{"position":[[702,18]]}},"keywords":{}}],["quot;creat",{"_index":3790,"title":{},"content":{"472":{"position":[[513,12]]},"1149":{"position":[[170,12]]},"1418":{"position":[[252,12]]}},"keywords":{}}],["quot;created_at"",{"_index":2557,"title":{},"content":{"236":{"position":[[2483,22],[3268,22]]}},"keywords":{}}],["quot;credentials"",{"_index":4961,"title":{},"content":{"898":{"position":[[50,25],[168,24]]}},"keywords":{}}],["quot;critic"",{"_index":2405,"title":{},"content":{"210":{"position":[[3675,19]]}},"keywords":{}}],["quot;current"",{"_index":6541,"title":{},"content":{"1452":{"position":[[1896,19]]}},"keywords":{}}],["quot;custom",{"_index":5351,"title":{},"content":{"1092":{"position":[[260,14],[289,14]]}},"keywords":{}}],["quot;customer"",{"_index":1375,"title":{},"content":{"96":{"position":[[333,21],[557,21]]}},"keywords":{}}],["quot;d"",{"_index":1939,"title":{},"content":{"164":{"position":[[698,14],[765,14]]},"210":{"position":[[1055,15]]},"1477":{"position":[[1982,14],[2151,14],[2308,14],[2554,14],[4333,15],[4512,15],[4677,15],[4933,15]]}},"keywords":{}}],["quot;d9e8698f",{"_index":2719,"title":{},"content":{"253":{"position":[[1735,14]]},"313":{"position":[[1735,14]]}},"keywords":{}}],["quot;data",{"_index":4823,"title":{},"content":{"849":{"position":[[2574,10]]}},"keywords":{}}],["quot;databas",{"_index":4921,"title":{},"content":{"880":{"position":[[127,14]]}},"keywords":{}}],["quot;database"",{"_index":2232,"title":{},"content":{"206":{"position":[[633,20]]}},"keywords":{}}],["quot;dataflow"",{"_index":2313,"title":{},"content":{"210":{"position":[[1966,21]]}},"keywords":{}}],["quot;datagen",{"_index":2532,"title":{},"content":{"236":{"position":[[1350,13]]}},"keywords":{}}],["quot;date"",{"_index":1387,"title":{},"content":{"96":{"position":[[607,17]]}},"keywords":{}}],["quot;date":"2023",{"_index":2083,"title":{},"content":{"183":{"position":[[4159,28]]}},"keywords":{}}],["quot;date":"2024",{"_index":2778,"title":{},"content":{"255":{"position":[[229,28],[370,28],[515,28],[654,28]]}},"keywords":{}}],["quot;dbo.flow_watermarks"",{"_index":5253,"title":{},"content":{"1045":{"position":[[976,31]]},"1053":{"position":[[976,31]]},"1061":{"position":[[976,31]]}},"keywords":{}}],["quot;debug"",{"_index":3233,"title":{},"content":{"343":{"position":[[201,18]]}},"keywords":{}}],["quot;def"",{"_index":6711,"title":{},"content":{"1476":{"position":[[557,15],[675,15]]}},"keywords":{}}],["quot;default"",{"_index":3265,"title":{},"content":{"352":{"position":[[55,20]]},"898":{"position":[[587,20],[1890,20]]}},"keywords":{}}],["quot;delete_messages"",{"_index":3573,"title":{},"content":{"409":{"position":[[224,28]]}},"keywords":{}}],["quot;delta",{"_index":6493,"title":{},"content":{"1440":{"position":[[112,11]]}},"keywords":{}}],["quot;denghiùcomm"",{"_index":2759,"title":{},"content":{"253":{"position":[[2997,24]]},"313":{"position":[[2997,24]]}},"keywords":{}}],["quot;derivation"",{"_index":6685,"title":{},"content":{"1474":{"position":[[499,23]]}},"keywords":{}}],["quot;derivations"",{"_index":1041,"title":{},"content":{"69":{"position":[[942,23]]}},"keywords":{}}],["quot;description"",{"_index":2294,"title":{},"content":{"210":{"position":[[1120,24]]},"898":{"position":[[691,24],[914,24],[1146,24],[1586,24]]}},"keywords":{}}],["quot;dictionary"",{"_index":4885,"title":{},"content":{"869":{"position":[[274,22]]}},"keywords":{}}],["quot;dimensions"",{"_index":4163,"title":{},"content":{"574":{"position":[[300,23]]},"585":{"position":[[315,23],[605,23]]},"606":{"position":[[243,23]]}},"keywords":{}}],["quot;directors"",{"_index":2366,"title":{},"content":{"210":{"position":[[3015,22]]}},"keywords":{}}],["quot;discovers"",{"_index":1111,"title":{},"content":{"80":{"position":[[477,21]]}},"keywords":{}}],["quot;discriminator"",{"_index":4963,"title":{},"content":{"898":{"position":[[195,26]]}},"keywords":{}}],["quot;domain",{"_index":3797,"title":{},"content":{"472":{"position":[[679,12]]}},"keywords":{}}],["quot;domain"",{"_index":2715,"title":{},"content":{"253":{"position":[[1614,19]]},"313":{"position":[[1614,19],[3285,19]]},"315":{"position":[[2167,19]]}},"keywords":{}}],["quot;drama"",{"_index":2343,"title":{},"content":{"210":{"position":[[2605,19]]}},"keywords":{}}],["quot;dt"",{"_index":2717,"title":{},"content":{"253":{"position":[[1669,15]]},"313":{"position":[[1669,15]]}},"keywords":{}}],["quot;e"",{"_index":6723,"title":{},"content":{"1477":{"position":[[2403,14],[2572,14],[4774,15],[4953,15]]}},"keywords":{}}],["quot;edit",{"_index":5068,"title":{},"content":{"931":{"position":[[698,10]]}},"keywords":{}}],["quot;effect",{"_index":5965,"title":{},"content":{"1279":{"position":[[343,17]]}},"keywords":{}}],["quot;effect"",{"_index":2001,"title":{},"content":{"172":{"position":[[400,19],[708,19],[958,19]]},"414":{"position":[[370,19],[569,19]]},"415":{"position":[[631,19],[792,19]]}},"keywords":{}}],["quot;email"",{"_index":3799,"title":{},"content":{"472":{"position":[[750,17]]}},"keywords":{}}],["quot;emili",{"_index":2350,"title":{},"content":{"210":{"position":[[2714,11]]}},"keywords":{}}],["quot;end",{"_index":5166,"title":{},"content":{"1009":{"position":[[1186,10],[1280,10]]}},"keywords":{}}],["quot;english"",{"_index":2363,"title":{},"content":{"210":{"position":[[2955,22]]}},"keywords":{}}],["quot;enum"",{"_index":2289,"title":{},"content":{"210":{"position":[[1006,17]]}},"keywords":{}}],["quot;eqiad.mediawiki.recentchange"",{"_index":2735,"title":{},"content":{"253":{"position":[[1992,41]]},"313":{"position":[[1992,41]]}},"keywords":{}}],["quot;error"",{"_index":3230,"title":{},"content":{"343":{"position":[[146,18]]}},"keywords":{}}],["quot;estuari",{"_index":4373,"title":{},"content":{"645":{"position":[[315,13]]},"652":{"position":[[315,13]]}},"keywords":{}}],["quot;exactli",{"_index":4293,"title":{},"content":{"602":{"position":[[255,13]]}},"keywords":{}}],["quot;exacts"",{"_index":5168,"title":{},"content":{"1009":{"position":[[1231,19]]}},"keywords":{}}],["quot;exampl",{"_index":3512,"title":{},"content":{"392":{"position":[[180,13],[346,13]]},"393":{"position":[[185,13],[243,13]]},"398":{"position":[[186,13],[244,13]]},"403":{"position":[[116,13]]},"1126":{"position":[[147,13],[205,13]]}},"keywords":{}}],["quot;expect",{"_index":6642,"title":{},"content":{"1463":{"position":[[502,12]]},"1464":{"position":[[408,12]]},"1465":{"position":[[1095,12]]},"1466":{"position":[[387,12]]},"1467":{"position":[[916,12],[1213,12],[2341,12]]},"1476":{"position":[[357,12],[1558,12]]},"1477":{"position":[[1573,12],[3895,12]]}},"keywords":{}}],["quot;f8f07d87",{"_index":2699,"title":{},"content":{"253":{"position":[[1369,14]]},"313":{"position":[[1369,14]]}},"keywords":{}}],["quot;fenc",{"_index":6476,"title":{},"content":{"1437":{"position":[[846,11]]}},"keywords":{}}],["quot;fields"",{"_index":5845,"title":{},"content":{"1200":{"position":[[944,19]]}},"keywords":{}}],["quot;file"",{"_index":2695,"title":{},"content":{"253":{"position":[[1280,17]]},"313":{"position":[[1280,17]]},"315":{"position":[[2040,17]]}},"keywords":{}}],["quot;file:///path/dir/sub/directory/flow.yaml"",{"_index":1286,"title":{},"content":{"87":{"position":[[326,53]]}},"keywords":{}}],["quot;file:///path/sibling/directory/flow.yaml"",{"_index":1288,"title":{},"content":{"87":{"position":[[427,53]]}},"keywords":{}}],["quot;filter"",{"_index":4233,"title":{},"content":{"585":{"position":[[817,19]]}},"keywords":{}}],["quot;flow"",{"_index":4685,"title":{},"content":{"783":{"position":[[152,16],[175,16]]},"1254":{"position":[[192,16],[215,16]]}},"keywords":{}}],["quot;flow.watermarks"",{"_index":4582,"title":{},"content":{"750":{"position":[[661,28]]},"757":{"position":[[905,27]]},"766":{"position":[[661,28]]},"770":{"position":[[905,27]]},"789":{"position":[[649,28]]},"797":{"position":[[905,27]]},"807":{"position":[[649,28]]},"812":{"position":[[905,27]]},"823":{"position":[[649,28]]},"828":{"position":[[905,27]]}},"keywords":{}}],["quot;flow://inf",{"_index":2304,"title":{},"content":{"210":{"position":[[1426,21]]}},"keywords":{}}],["quot;flow://writ",{"_index":2303,"title":{},"content":{"210":{"position":[[1371,18]]}},"keywords":{}}],["quot;flow_capture"",{"_index":3405,"title":{},"content":{"370":{"position":[[532,24]]},"371":{"position":[[254,24]]},"757":{"position":[[232,24]]},"758":{"position":[[211,24]]},"770":{"position":[[232,24]]},"771":{"position":[[211,24]]},"797":{"position":[[232,24]]},"798":{"position":[[209,24]]},"812":{"position":[[232,24]]},"813":{"position":[[209,24]]},"828":{"position":[[232,24]]},"829":{"position":[[209,24]]},"868":{"position":[[180,24]]},"880":{"position":[[207,24]]},"907":{"position":[[315,24]]},"908":{"position":[[255,24]]},"923":{"position":[[315,24]]},"924":{"position":[[255,24]]},"934":{"position":[[315,24]]},"935":{"position":[[255,24]]},"950":{"position":[[315,24]]},"951":{"position":[[255,24]]},"968":{"position":[[315,24]]},"969":{"position":[[255,24]]},"1045":{"position":[[300,24]]},"1046":{"position":[[196,24]]},"1053":{"position":[[300,24]]},"1054":{"position":[[196,24]]},"1061":{"position":[[300,24]]},"1062":{"position":[[196,24]]}},"keywords":{}}],["quot;flow_document"",{"_index":5438,"title":{},"content":{"1123":{"position":[[236,25]]}},"keywords":{}}],["quot;flow_publication"",{"_index":3409,"title":{},"content":{"370":{"position":[[1003,28]]},"907":{"position":[[786,28]]},"923":{"position":[[786,28]]},"934":{"position":[[786,28]]},"950":{"position":[[786,28]]},"968":{"position":[[786,28]]}},"keywords":{}}],["quot;flow_slot"",{"_index":3414,"title":{},"content":{"370":{"position":[[1264,21]]},"907":{"position":[[1047,21]]},"923":{"position":[[1047,21]]},"934":{"position":[[1047,21]]},"950":{"position":[[1047,21]]},"968":{"position":[[1047,21]]}},"keywords":{}}],["quot;folder"",{"_index":5793,"title":{},"content":{"1179":{"position":[[664,18]]}},"keywords":{}}],["quot;foo"",{"_index":1407,"title":{},"content":{"98":{"position":[[444,17]]},"99":{"position":[[576,17]]}},"keywords":{}}],["quot;foreign"",{"_index":4778,"title":{},"content":{"842":{"position":[[3045,19],[3427,19]]}},"keywords":{}}],["quot;format"",{"_index":3267,"title":{},"content":{"352":{"position":[[114,19]]}},"keywords":{}}],["quot;fresh"",{"_index":2403,"title":{},"content":{"210":{"position":[[3652,18]]}},"keywords":{}}],["quot;full/nameof/estuarycolletion"",{"_index":2683,"title":{},"content":{"250":{"position":[[1473,40]]}},"keywords":{}}],["quot;fullplot"",{"_index":2314,"title":{},"content":{"210":{"position":[[1988,21]]}},"keywords":{}}],["quot;ga:segment"",{"_index":4228,"title":{},"content":{"585":{"position":[[629,24]]}},"keywords":{}}],["quot;genres"",{"_index":2342,"title":{},"content":{"210":{"position":[[2585,19]]}},"keywords":{}}],["quot;ghcr.io/estuary/materi",{"_index":5725,"title":{},"content":{"1145":{"position":[[70,33]]},"1152":{"position":[[70,33]]},"1163":{"position":[[70,33]]},"1171":{"position":[[70,33]]},"1214":{"position":[[70,33]]},"1221":{"position":[[70,33]]},"1261":{"position":[[70,33]]},"1278":{"position":[[70,33]]}},"keywords":{}}],["quot;ghcr.io/estuary/sourc",{"_index":3425,"title":{},"content":{"371":{"position":[[126,28]]},"378":{"position":[[66,28]]},"439":{"position":[[66,28]]},"908":{"position":[[126,28]]},"924":{"position":[[126,28]]},"935":{"position":[[126,28]]},"951":{"position":[[126,28]]},"969":{"position":[[126,28]]},"1022":{"position":[[56,28]]},"1046":{"position":[[66,28]]},"1054":{"position":[[66,28]]},"1062":{"position":[[66,28]]}},"keywords":{}}],["quot;good",{"_index":5223,"title":{},"content":{"1036":{"position":[[406,10]]}},"keywords":{}}],["quot;hello",{"_index":991,"title":{},"content":{"66":{"position":[[987,11]]},"128":{"position":[[720,11]]},"129":{"position":[[1120,11],[1168,11],[1259,11]]},"130":{"position":[[272,11],[323,11]]}},"keywords":{}}],["quot;hello"",{"_index":1415,"title":{},"content":{"98":{"position":[[753,18]]}},"keywords":{}}],["quot;help"",{"_index":2588,"title":{},"content":{"238":{"position":[[966,16]]}},"keywords":{}}],["quot;http://json",{"_index":2285,"title":{},"content":{"210":{"position":[[867,17]]},"314":{"position":[[1057,17]]}},"keywords":{}}],["quot;https://accounts.google.com/o/oauth2/auth"",{"_index":4076,"title":{},"content":{"546":{"position":[[522,54]]},"594":{"position":[[510,54]]}},"keywords":{}}],["quot;https://accounts.google.com/o/oauth2/token"",{"_index":4078,"title":{},"content":{"546":{"position":[[600,55]]},"594":{"position":[[588,55]]}},"keywords":{}}],["quot;https://commons.wikimedia.org"",{"_index":2753,"title":{},"content":{"253":{"position":[[2724,42]]},"313":{"position":[[2724,42]]}},"keywords":{}}],["quot;https://commons.wikimedia.org/w/index.php?diff=866807860&oldid=861559382&rcid=2468434138"",{"_index":2741,"title":{},"content":{"253":{"position":[[2168,109]]},"313":{"position":[[2168,109]]}},"keywords":{}}],["quot;https://commons.wikimedia.org/wiki/category:jetons"",{"_index":2737,"title":{},"content":{"253":{"position":[[2051,62],[2873,63]]},"313":{"position":[[2051,62],[2873,63]]}},"keywords":{}}],["quot;https://example.com/posters/r",{"_index":2360,"title":{},"content":{"210":{"position":[[2862,38]]}},"keywords":{}}],["quot;https://www.googleapis.com/oauth2/v1/certs"",{"_index":4080,"title":{},"content":{"546":{"position":[[697,55]]},"594":{"position":[[685,55]]}},"keywords":{}}],["quot;https://www.googleapis.com/robot/v1/metadata/x509/servic",{"_index":4082,"title":{},"content":{"546":{"position":[[787,63]]},"594":{"position":[[775,63]]}},"keywords":{}}],["quot;id",{"_index":6285,"title":{},"content":{"1363":{"position":[[294,9]]}},"keywords":{}}],["quot;id"",{"_index":2389,"title":{},"content":{"210":{"position":[[3395,15]]},"236":{"position":[[2197,14],[2982,14]]},"253":{"position":[[1566,15],[1719,15]]},"313":{"position":[[1566,15],[1719,15]]},"1046":{"position":[[322,16]]},"1054":{"position":[[322,16]]},"1062":{"position":[[322,16]]}},"keywords":{}}],["quot;identifier"",{"_index":5893,"title":{},"content":{"1230":{"position":[[1210,22]]}},"keywords":{}}],["quot;idl",{"_index":1587,"title":{},"content":{"110":{"position":[[1529,10]]}},"keywords":{}}],["quot;idri",{"_index":2354,"title":{},"content":{"210":{"position":[[2770,11]]}},"keywords":{}}],["quot;imdb"",{"_index":2384,"title":{},"content":{"210":{"position":[[3324,17]]}},"keywords":{}}],["quot;in",{"_index":2315,"title":{},"content":{"210":{"position":[[2010,8]]}},"keywords":{}}],["quot;include"",{"_index":5846,"title":{},"content":{"1200":{"position":[[966,20]]}},"keywords":{}}],["quot;index"",{"_index":5841,"title":{},"content":{"1200":{"position":[[829,18]]}},"keywords":{}}],["quot;info"",{"_index":3232,"title":{},"content":{"343":{"position":[[183,17],[281,17]]}},"keywords":{}}],["quot;integer"",{"_index":6656,"title":{},"content":{"1466":{"position":[[248,20]]}},"keywords":{}}],["quot;intersect"",{"_index":6720,"title":{},"content":{"1477":{"position":[[1132,22],[2265,22],[3360,22],[4633,22]]}},"keywords":{}}],["quot;iphone"",{"_index":478,"title":{},"content":{"16":{"position":[[928,19]]}},"keywords":{}}],["quot;item_price"",{"_index":1383,"title":{},"content":{"96":{"position":[[440,23]]}},"keywords":{}}],["quot;items"",{"_index":1416,"title":{},"content":{"98":{"position":[[772,18]]}},"keywords":{}}],["quot;just",{"_index":5027,"title":{},"content":{"912":{"position":[[1428,10]]}},"keywords":{}}],["quot;key",{"_index":4065,"title":{},"content":{"546":{"position":[[265,9]]},"594":{"position":[[253,9]]}},"keywords":{}}],["quot;key"",{"_index":2305,"title":{},"content":{"210":{"position":[[1468,16]]},"595":{"position":[[814,16]]},"1047":{"position":[[549,16],[730,16]]},"1055":{"position":[[549,16],[730,16]]},"1063":{"position":[[549,16],[730,16]]},"1463":{"position":[[635,16],[706,16],[837,16]]},"1464":{"position":[[517,16],[559,16],[680,16]]},"1465":{"position":[[1214,16],[1264,16],[1379,16],[1480,16],[1532,16],[1646,16]]},"1466":{"position":[[495,16],[532,16],[628,16]]},"1467":{"position":[[1032,16],[1074,16],[1177,16],[1333,16],[1407,16],[1539,16],[2459,16],[2551,16],[2705,16]]},"1476":{"position":[[468,16],[526,16],[644,16],[1695,16],[1772,16],[1849,16],[1926,16],[2155,16]]},"1477":{"position":[[1726,16],[1839,16],[1919,16],[2070,16],[2239,16],[2340,16],[2491,16],[4072,16],[4189,16],[4269,16],[4428,16],[4607,16],[4710,16],[4869,16]]}},"keywords":{}}],["quot;key1=value1&key2=value2&key3=value3"",{"_index":3554,"title":{},"content":{"403":{"position":[[338,55]]}},"keywords":{}}],["quot;keyword"",{"_index":5837,"title":{},"content":{"1200":{"position":[[444,20],[1016,20]]}},"keywords":{}}],["quot;languages"",{"_index":2362,"title":{},"content":{"210":{"position":[[2932,22]]}},"keywords":{}}],["quot;lastupdated"",{"_index":2379,"title":{},"content":{"210":{"position":[[3235,24],[3798,24]]}},"keywords":{}}],["quot;length"",{"_index":2766,"title":{},"content":{"253":{"position":[[3292,19]]}},"keywords":{}}],["quot;link"",{"_index":1725,"title":{},"content":{"129":{"position":[[822,16]]}},"keywords":{}}],["quot;lives"",{"_index":1668,"title":{},"content":{"121":{"position":[[1856,17]]}},"keywords":{}}],["quot;localhost:5432"",{"_index":5007,"title":{},"content":{"908":{"position":[[191,26]]},"924":{"position":[[191,26]]},"935":{"position":[[191,26]]},"951":{"position":[[191,26]]},"969":{"position":[[191,26]]}},"keywords":{}}],["quot;lte"",{"_index":480,"title":{},"content":{"16":{"position":[[969,17]]}},"keywords":{}}],["quot;mappers,"",{"_index":1606,"title":{},"content":{"113":{"position":[[336,20]]}},"keywords":{}}],["quot;materialization"",{"_index":6686,"title":{},"content":{"1474":{"position":[[526,27]]}},"keywords":{}}],["quot;maximize"",{"_index":4268,"title":{},"content":{"595":{"position":[[792,21]]}},"keywords":{}}],["quot;mediawiki.recentchange"",{"_index":2733,"title":{},"content":{"253":{"position":[[1937,35]]},"313":{"position":[[1937,35]]}},"keywords":{}}],["quot;merchant_id"",{"_index":2552,"title":{},"content":{"236":{"position":[[2291,23],[3076,23]]}},"keywords":{}}],["quot;message"",{"_index":990,"title":{},"content":{"66":{"position":[[966,20]]}},"keywords":{}}],["quot;meta"",{"_index":2714,"title":{},"content":{"253":{"position":[[1594,17]]},"313":{"position":[[1594,17],[3261,17]]}},"keywords":{}}],["quot;metadata",{"_index":4648,"title":{},"content":{"763":{"position":[[35,14]]},"776":{"position":[[35,14]]},"803":{"position":[[35,14]]},"818":{"position":[[35,14]]},"834":{"position":[[35,14]]}},"keywords":{}}],["quot;metal"",{"_index":1098,"title":{},"content":{"76":{"position":[[827,17]]}},"keywords":{}}],["quot;meter"",{"_index":2401,"title":{},"content":{"210":{"position":[[3627,18],[3750,18]]}},"keywords":{}}],["quot;metrics"",{"_index":4164,"title":{},"content":{"574":{"position":[[334,20]]},"585":{"position":[[382,20],[702,20]]}},"keywords":{}}],["quot;mi",{"_index":1404,"title":{},"content":{"98":{"position":[[309,9]]},"418":{"position":[[112,8]]},"1200":{"position":[[848,8]]}},"keywords":{}}],["quot;michael",{"_index":2352,"title":{},"content":{"210":{"position":[[2739,13]]}},"keywords":{}}],["quot;mongo:27017"",{"_index":4684,"title":{},"content":{"783":{"position":[[118,23]]},"1254":{"position":[[131,23]]}},"keywords":{}}],["quot;movie"",{"_index":2395,"title":{},"content":{"210":{"position":[[3507,18]]}},"keywords":{}}],["quot;my_db"",{"_index":5257,"title":{},"content":{"1046":{"position":[[172,17]]},"1054":{"position":[[172,17]]},"1062":{"position":[[172,17]]}},"keywords":{}}],["quot;mysql"",{"_index":4612,"title":{},"content":{"757":{"position":[[1126,17]]},"770":{"position":[[1126,17]]},"797":{"position":[[1126,17]]},"812":{"position":[[1126,17]]},"828":{"position":[[1126,17]]}},"keywords":{}}],["quot;na"",{"_index":3489,"title":{},"content":{"387":{"position":[[902,14]]}},"keywords":{}}],["quot;name"",{"_index":1059,"title":{},"content":{"71":{"position":[[344,17],[404,17],[467,17]]},"236":{"position":[[2229,16],[3014,16]]},"574":{"position":[[272,19]]},"585":{"position":[[262,19],[552,19]]},"606":{"position":[[191,18]]},"943":{"position":[[1184,17]]}},"keywords":{}}],["quot;namespace"",{"_index":2738,"title":{},"content":{"253":{"position":[[2117,22]]},"313":{"position":[[2117,22]]}},"keywords":{}}],["quot;network"",{"_index":479,"title":{},"content":{"16":{"position":[[948,20]]}},"keywords":{}}],["quot;new",{"_index":3820,"title":{},"content":{"479":{"position":[[124,9]]}},"keywords":{}}],["quot;next"",{"_index":3826,"title":{},"content":{"479":{"position":[[410,16]]}},"keywords":{}}],["quot;nominations"",{"_index":2374,"title":{},"content":{"210":{"position":[[3152,24]]}},"keywords":{}}],["quot;not",{"_index":5169,"title":{},"content":{"1009":{"position":[[1307,9],[1337,9]]}},"keywords":{}}],["quot;notify_url"",{"_index":2740,"title":{},"content":{"253":{"position":[[2144,23]]},"313":{"position":[[2144,23]]}},"keywords":{}}],["quot;num_mflix_comments"",{"_index":2411,"title":{},"content":{"210":{"position":[[3840,31]]}},"keywords":{}}],["quot;numb",{"_index":5850,"title":{},"content":{"1201":{"position":[[521,12],[642,12]]}},"keywords":{}}],["quot;number"",{"_index":6655,"title":{},"content":{"1466":{"position":[[226,18]]}},"keywords":{}}],["quot;numreviews"",{"_index":2399,"title":{},"content":{"210":{"position":[[3597,23],[3722,23]]}},"keywords":{}}],["quot;oauth2.0"",{"_index":4967,"title":{},"content":{"898":{"position":[[319,21],[505,21],[608,20]]}},"keywords":{}}],["quot;object"",{"_index":1428,"title":{},"content":{"99":{"position":[[556,19]]},"210":{"position":[[679,19],[1244,18]]},"898":{"position":[[359,19],[1478,19]]},"1467":{"position":[[592,19]]}},"keywords":{}}],["quot;offset"",{"_index":2697,"title":{},"content":{"253":{"position":[[1324,19],[1785,19]]},"313":{"position":[[1324,19],[1785,19]]},"315":{"position":[[2080,19]]}},"keywords":{}}],["quot;one"",{"_index":6644,"title":{},"content":{"1463":{"position":[[657,16],[679,15],[859,16]]}},"keywords":{}}],["quot;oneof"",{"_index":4966,"title":{},"content":{"898":{"position":[[277,18]]}},"keywords":{}}],["quot;op"",{"_index":2288,"title":{},"content":{"210":{"position":[[950,15]]}},"keywords":{}}],["quot;order"",{"_index":3569,"title":{},"content":{"409":{"position":[[54,18],[100,18],[150,18],[200,18],[255,18]]},"898":{"position":[[527,18],[1830,18]]}},"keywords":{}}],["quot;organ",{"_index":4033,"title":{},"content":{"531":{"position":[[360,18]]}},"keywords":{}}],["quot;oscar",{"_index":2357,"title":{},"content":{"210":{"position":[[2815,11]]}},"keywords":{}}],["quot;parent"",{"_index":4779,"title":{},"content":{"842":{"position":[[3106,18],[3268,18]]}},"keywords":{}}],["quot;parsedcomment"",{"_index":2742,"title":{},"content":{"253":{"position":[[2278,26]]},"313":{"position":[[2278,26]]}},"keywords":{}}],["quot;partition"",{"_index":2725,"title":{},"content":{"253":{"position":[[1817,22]]},"313":{"position":[[1817,22]]}},"keywords":{}}],["quot;pattern_descriptor"",{"_index":4962,"title":{},"content":{"898":{"position":[[128,31]]}},"keywords":{}}],["quot;person",{"_index":4039,"title":{},"content":{"532":{"position":[[331,14]]}},"keywords":{}}],["quot;pg",{"_index":2370,"title":{},"content":{"210":{"position":[[3090,8]]}},"keywords":{}}],["quot;pikachu"",{"_index":1727,"title":{},"content":{"129":{"position":[[956,19]]}},"keywords":{}}],["quot;pinterest"",{"_index":4969,"title":{},"content":{"898":{"position":[[410,22]]}},"keywords":{}}],["quot;pipelined"",{"_index":6542,"title":{},"content":{"1452":{"position":[[1994,21]]}},"keywords":{}}],["quot;plot"",{"_index":2331,"title":{},"content":{"210":{"position":[[2354,17]]}},"keywords":{}}],["quot;pol",{"_index":3829,"title":{},"content":{"479":{"position":[[698,10]]}},"keywords":{}}],["quot;poster"",{"_index":2359,"title":{},"content":{"210":{"position":[[2842,19]]}},"keywords":{}}],["quot;postgres"",{"_index":2509,"title":{},"content":{"236":{"position":[[817,20]]},"370":{"position":[[445,20]]},"371":{"position":[[227,20]]},"907":{"position":[[228,20]]},"908":{"position":[[228,20]]},"923":{"position":[[228,20]]},"924":{"position":[[228,20]]},"934":{"position":[[228,20]]},"935":{"position":[[228,20]]},"950":{"position":[[228,20]]},"951":{"position":[[228,20]]},"968":{"position":[[228,20]]},"969":{"position":[[228,20]]}},"keywords":{}}],["quot;prefix/source_collection"",{"_index":5844,"title":{},"content":{"1200":{"position":[[906,37]]}},"keywords":{}}],["quot;price"",{"_index":2554,"title":{},"content":{"236":{"position":[[2363,17],[3148,17]]}},"keywords":{}}],["quot;principal"",{"_index":2003,"title":{},"content":{"172":{"position":[[439,22],[747,22],[997,22]]},"414":{"position":[[409,22],[608,22]]},"477":{"position":[[891,21]]},"598":{"position":[[853,21]]}},"keywords":{}}],["quot;priv",{"_index":4378,"title":{},"content":{"646":{"position":[[672,13]]},"654":{"position":[[393,13]]},"1303":{"position":[[1145,13]]}},"keywords":{}}],["quot;private_key"",{"_index":4066,"title":{},"content":{"546":{"position":[[285,24]]},"594":{"position":[[273,24]]}},"keywords":{}}],["quot;private_key_id"",{"_index":4064,"title":{},"content":{"546":{"position":[[237,27]]},"594":{"position":[[225,27]]}},"keywords":{}}],["quot;product_id"",{"_index":1095,"title":{},"content":{"76":{"position":[[705,22]]}},"keywords":{}}],["quot;project",{"_index":4063,"title":{},"content":{"546":{"position":[[213,13]]},"594":{"position":[[201,13]]}},"keywords":{}}],["quot;project_id"",{"_index":4062,"title":{},"content":{"546":{"position":[[189,23]]},"594":{"position":[[177,23]]}},"keywords":{}}],["quot;projects/$projectid/databases/(default)"",{"_index":4248,"title":{},"content":{"593":{"position":[[257,52]]}},"keywords":{}}],["quot;properties"",{"_index":2282,"title":{},"content":{"210":{"position":[[740,23],[924,23]]},"352":{"position":[[3,23]]},"409":{"position":[[3,23]]},"898":{"position":[[76,23],[433,23],[1498,23]]},"1095":{"position":[[3,23]]}},"keywords":{}}],["quot;property"",{"_index":6382,"title":{},"content":{"1384":{"position":[[890,20]]}},"keywords":{}}],["quot;propertyname"",{"_index":4964,"title":{},"content":{"898":{"position":[[224,25]]}},"keywords":{}}],["quot;pub/sub",{"_index":4281,"title":{},"content":{"597":{"position":[[151,13]]},"598":{"position":[[80,13],[978,13]]}},"keywords":{}}],["quot;public"",{"_index":3553,"title":{},"content":{"403":{"position":[[306,18]]},"1138":{"position":[[717,18]]},"1151":{"position":[[703,18]]},"1313":{"position":[[527,18]]},"1337":{"position":[[527,18]]},"1348":{"position":[[527,18]]},"1427":{"position":[[468,18]]}},"keywords":{}}],["quot;public"."products"",{"_index":2548,"title":{},"content":{"236":{"position":[[2155,39]]}},"keywords":{}}],["quot;public.flow_watermarks"",{"_index":3417,"title":{},"content":{"370":{"position":[[1466,34]]},"907":{"position":[[1249,34]]},"923":{"position":[[1249,34]]},"934":{"position":[[1249,34]]},"950":{"position":[[1249,34]]},"968":{"position":[[1249,34]]}},"keywords":{}}],["quot;query"",{"_index":3877,"title":{},"content":{"488":{"position":[[1155,18]]},"659":{"position":[[1312,18]]},"676":{"position":[[1155,18]]},"691":{"position":[[1155,18]]}},"keywords":{}}],["quot;queue_url"",{"_index":3568,"title":{},"content":{"409":{"position":[[29,22]]}},"keywords":{}}],["quot;r",{"_index":3867,"title":{},"content":{"488":{"position":[[566,8]]},"659":{"position":[[723,8]]},"676":{"position":[[566,8]]},"691":{"position":[[566,8]]}},"keywords":{}}],["quot;rated"",{"_index":2369,"title":{},"content":{"210":{"position":[[3071,18]]}},"keywords":{}}],["quot;rating"",{"_index":2385,"title":{},"content":{"210":{"position":[[3344,19],[3572,19],[3697,19]]}},"keywords":{}}],["quot;readschema"",{"_index":2300,"title":{},"content":{"210":{"position":[[1304,23]]}},"keywords":{}}],["quot;realm"",{"_index":4816,"title":{},"content":{"849":{"position":[[91,19]]}},"keywords":{}}],["quot;recentchange"",{"_index":2696,"title":{},"content":{"253":{"position":[[1298,25]]},"313":{"position":[[1298,25]]}},"keywords":{}}],["quot;recommended"",{"_index":3055,"title":{},"content":{"308":{"position":[[567,23]]},"1200":{"position":[[1047,24]]}},"keywords":{}}],["quot;recoveri",{"_index":6499,"title":{},"content":{"1442":{"position":[[1198,14]]}},"keywords":{}}],["quot;red"",{"_index":1665,"title":{},"content":{"121":{"position":[[1306,16]]}},"keywords":{}}],["quot;redshift",{"_index":5746,"title":{},"content":{"1152":{"position":[[140,14]]}},"keywords":{}}],["quot;refresh",{"_index":4955,"title":{},"content":{"895":{"position":[[552,13]]},"898":{"position":[[1171,13],[1264,13]]}},"keywords":{}}],["quot;refresh_token"",{"_index":4977,"title":{},"content":{"898":{"position":[[1083,26],[1382,25]]}},"keywords":{}}],["quot;region"",{"_index":3570,"title":{},"content":{"409":{"position":[[78,19]]}},"keywords":{}}],["quot;released"",{"_index":2364,"title":{},"content":{"210":{"position":[[2978,21]]}},"keywords":{}}],["quot;remot",{"_index":6508,"title":{},"content":{"1444":{"position":[[334,12]]}},"keywords":{}}],["quot;remove"",{"_index":6721,"title":{},"content":{"1477":{"position":[[1159,18],[1865,19],[3389,18],[4215,19]]}},"keywords":{}}],["quot;rename"",{"_index":5802,"title":{},"content":{"1183":{"position":[[1197,18]]}},"keywords":{}}],["quot;request",{"_index":4527,"title":{},"content":{"725":{"position":[[156,13]]},"726":{"position":[[574,13]]}},"keywords":{}}],["quot;request_id"",{"_index":2726,"title":{},"content":{"253":{"position":[[1843,23]]},"313":{"position":[[1843,23]]}},"keywords":{}}],["quot;requir",{"_index":3880,"title":{},"content":{"489":{"position":[[201,13]]},"662":{"position":[[201,13]]},"677":{"position":[[201,13]]},"692":{"position":[[201,13]]}},"keywords":{}}],["quot;required"",{"_index":2280,"title":{},"content":{"210":{"position":[[699,21]]},"898":{"position":[[3,21],[1333,21],[1941,21]]}},"keywords":{}}],["quot;reserved"",{"_index":5520,"title":{},"content":{"1140":{"position":[[156,20]]},"1316":{"position":[[156,20]]},"1340":{"position":[[156,20]]},"1351":{"position":[[156,20]]},"1370":{"position":[[152,20]]},"1431":{"position":[[179,20]]}},"keywords":{}}],["quot;reset"",{"_index":6651,"title":{},"content":{"1465":{"position":[[881,18]]}},"keywords":{}}],["quot;resource"",{"_index":2011,"title":{},"content":{"172":{"position":[[639,21],[891,21],[1146,21]]},"414":{"position":[[498,21],[696,21]]},"415":{"position":[[721,21],[881,21]]},"1200":{"position":[[805,21]]}},"keywords":{}}],["quot;right",{"_index":6496,"title":{},"content":{"1440":{"position":[[1530,11]]}},"keywords":{}}],["quot;role"",{"_index":5094,"title":{},"content":{"943":{"position":[[1164,17]]}},"keywords":{}}],["quot;rotten"",{"_index":2409,"title":{},"content":{"210":{"position":[[3775,19]]}},"keywords":{}}],["quot;run",{"_index":2601,"title":{},"content":{"240":{"position":[[2185,9]]},"1032":{"position":[[1977,9]]}},"keywords":{}}],["quot;runtime"",{"_index":2347,"title":{},"content":{"210":{"position":[[2668,20]]}},"keywords":{}}],["quot;s3:deleteobject"",{"_index":2010,"title":{},"content":{"172":{"position":[[609,29]]}},"keywords":{}}],["quot;s3:getbucketpolicy"",{"_index":2016,"title":{},"content":{"172":{"position":[[1114,31]]}},"keywords":{}}],["quot;s3:getobject"",{"_index":2008,"title":{},"content":{"172":{"position":[[556,26]]},"414":{"position":[[668,24]]},"415":{"position":[[853,24]]}},"keywords":{}}],["quot;s3:listbucket"",{"_index":2014,"title":{},"content":{"172":{"position":[[864,26]]},"414":{"position":[[469,25]]},"415":{"position":[[692,25]]}},"keywords":{}}],["quot;s3:putobject"",{"_index":2009,"title":{},"content":{"172":{"position":[[583,25]]}},"keywords":{}}],["quot;sales_tax"",{"_index":1385,"title":{},"content":{"96":{"position":[[470,22]]}},"keywords":{}}],["quot;sample_db"",{"_index":3550,"title":{},"content":{"403":{"position":[[207,21]]}},"keywords":{}}],["quot;sample_password"",{"_index":3552,"title":{},"content":{"403":{"position":[[269,27]]}},"keywords":{}}],["quot;sample_user"",{"_index":3551,"title":{},"content":{"403":{"position":[[235,23]]}},"keywords":{}}],["quot;sav",{"_index":3801,"title":{},"content":{"472":{"position":[[814,10]]},"479":{"position":[[894,10]]}},"keywords":{}}],["quot;sci",{"_index":2344,"title":{},"content":{"210":{"position":[[2625,9]]}},"keywords":{}}],["quot;scratch",{"_index":4580,"title":{},"content":{"750":{"position":[[462,13]]},"766":{"position":[[462,13]]},"789":{"position":[[450,13]]},"807":{"position":[[450,13]]},"823":{"position":[[450,13]]}},"keywords":{}}],["quot;secret"",{"_index":3428,"title":{},"content":{"371":{"position":[[289,18]]},"758":{"position":[[246,18]]},"771":{"position":[[246,18]]},"798":{"position":[[244,18]]},"813":{"position":[[244,18]]},"829":{"position":[[244,18]]},"908":{"position":[[290,18]]},"924":{"position":[[290,18]]},"935":{"position":[[290,18]]},"951":{"position":[[290,18]]},"969":{"position":[[290,18]]},"1046":{"position":[[231,18]]},"1054":{"position":[[231,18]]},"1062":{"position":[[231,18]]}},"keywords":{}}],["quot;secret_key"",{"_index":3572,"title":{},"content":{"409":{"position":[[174,23]]}},"keywords":{}}],["quot;segments"",{"_index":4230,"title":{},"content":{"585":{"position":[[763,21]]}},"keywords":{}}],["quot;serializ",{"_index":5758,"title":{},"content":{"1156":{"position":[[695,18]]}},"keywords":{}}],["quot;server_name"",{"_index":2749,"title":{},"content":{"253":{"position":[[2592,24]]},"313":{"position":[[2592,24]]}},"keywords":{}}],["quot;server_script_path"",{"_index":2750,"title":{},"content":{"253":{"position":[[2652,31]]},"313":{"position":[[2652,31]]}},"keywords":{}}],["quot;server_url"",{"_index":2752,"title":{},"content":{"253":{"position":[[2700,23]]},"313":{"position":[[2700,23]]}},"keywords":{}}],["quot;serverless"",{"_index":1557,"title":{},"content":{"108":{"position":[[263,23]]}},"keywords":{}}],["quot;servic",{"_index":4071,"title":{},"content":{"546":{"position":[[419,13]]},"594":{"position":[[407,13]]}},"keywords":{}}],["quot;service_account"",{"_index":4061,"title":{},"content":{"546":{"position":[[160,28]]},"594":{"position":[[148,28]]}},"keywords":{}}],["quot;set",{"_index":4957,"title":{},"content":{"895":{"position":[[621,9]]}},"keywords":{}}],["quot;settings"",{"_index":2031,"title":{},"content":{"174":{"position":[[145,20]]}},"keywords":{}}],["quot;sh",{"_index":2516,"title":{},"content":{"236":{"position":[[930,8]]}},"keywords":{}}],["quot;shop",{"_index":5353,"title":{},"content":{"1092":{"position":[[365,10]]}},"keywords":{}}],["quot;sid",{"_index":4295,"title":{},"content":{"602":{"position":[[659,10]]}},"keywords":{}}],["quot;sid"",{"_index":1999,"title":{},"content":{"172":{"position":[[333,16]]},"414":{"position":[[320,16]]},"415":{"position":[[580,16]]}},"keywords":{}}],["quot;source"",{"_index":5843,"title":{},"content":{"1200":{"position":[[886,19]]}},"keywords":{}}],["quot;sources"",{"_index":3819,"title":{},"content":{"479":{"position":[[73,20]]}},"keywords":{}}],["quot;ssl"",{"_index":3665,"title":{},"content":{"429":{"position":[[1216,15]]}},"keywords":{}}],["quot;start",{"_index":4949,"title":{},"content":{"895":{"position":[[154,11]]},"1009":{"position":[[1161,12],[1251,12]]},"1010":{"position":[[362,12]]}},"keywords":{}}],["quot;start_date"",{"_index":3264,"title":{},"content":{"352":{"position":[[29,23]]},"898":{"position":[[25,24],[102,23]]}},"keywords":{}}],["quot;starter"",{"_index":4400,"title":{},"content":{"654":{"position":[[770,19]]}},"keywords":{}}],["quot;statement"",{"_index":1998,"title":{},"content":{"172":{"position":[[306,22]]},"414":{"position":[[293,22]]},"415":{"position":[[553,22]]}},"keywords":{}}],["quot;status"",{"_index":2555,"title":{},"content":{"236":{"position":[[2420,18],[3205,18]]}},"keywords":{}}],["quot;store"",{"_index":6487,"title":{},"content":{"1439":{"position":[[638,17]]}},"keywords":{}}],["quot;strategy"",{"_index":4267,"title":{},"content":{"595":{"position":[[768,23]]}},"keywords":{}}],["quot;stream"",{"_index":2732,"title":{},"content":{"253":{"position":[[1917,19]]},"313":{"position":[[1917,19]]}},"keywords":{}}],["quot;string"",{"_index":2283,"title":{},"content":{"210":{"position":[[803,18],[986,19]]},"898":{"position":[[567,19],[829,18],[1061,18],[1309,18],[1736,18],[1870,19]]}},"keywords":{}}],["quot;stringfield"",{"_index":5847,"title":{},"content":{"1200":{"position":[[989,24]]}},"keywords":{}}],["quot;system_certificates"",{"_index":3674,"title":{},"content":{"432":{"position":[[335,31]]}},"keywords":{}}],["quot;test"",{"_index":5919,"title":{},"content":{"1254":{"position":[[165,16]]}},"keywords":{}}],["quot;testkey"",{"_index":3878,"title":{},"content":{"488":{"position":[[1176,20]]},"659":{"position":[[1333,20]]},"676":{"position":[[1176,20]]},"691":{"position":[[1176,20]]}},"keywords":{}}],["quot;testvalue"",{"_index":3879,"title":{},"content":{"488":{"position":[[1197,21]]},"659":{"position":[[1354,21]]},"676":{"position":[[1197,21]]},"691":{"position":[[1197,21]]}},"keywords":{}}],["quot;text",{"_index":5955,"title":{},"content":{"1277":{"position":[[655,10]]}},"keywords":{}}],["quot;text"",{"_index":2375,"title":{},"content":{"210":{"position":[[3180,17]]}},"keywords":{}}],["quot;th",{"_index":4972,"title":{},"content":{"898":{"position":[[716,9],[939,9],[1611,9]]}},"keywords":{}}],["quot;thi",{"_index":1161,"title":{},"content":{"82":{"position":[[1414,10],[3849,10]]}},"keywords":{}}],["quot;third",{"_index":4036,"title":{},"content":{"531":{"position":[[483,11]]},"532":{"position":[[295,11]]}},"keywords":{}}],["quot;thriller"",{"_index":2346,"title":{},"content":{"210":{"position":[[2645,22]]}},"keywords":{}}],["quot;timestamp"",{"_index":1379,"title":{},"content":{"96":{"position":[[383,22]]},"253":{"position":[[2767,22]]},"313":{"position":[[2767,22]]}},"keywords":{}}],["quot;title"",{"_index":2291,"title":{},"content":{"210":{"position":[[1071,18],[1947,18]]},"253":{"position":[[2802,18]]},"313":{"position":[[2802,18]]},"315":{"position":[[2210,18]]},"898":{"position":[[300,18],[769,18],[997,18],[1245,18],[1415,18],[1673,18]]}},"keywords":{}}],["quot;title_url"",{"_index":2756,"title":{},"content":{"253":{"position":[[2850,22]]},"313":{"position":[[2850,22]]}},"keywords":{}}],["quot;token_uri"",{"_index":4077,"title":{},"content":{"546":{"position":[[577,22]]},"594":{"position":[[565,22]]}},"keywords":{}}],["quot;tomatoes"",{"_index":2396,"title":{},"content":{"210":{"position":[[3526,21]]}},"keywords":{}}],["quot;top",{"_index":1426,"title":{},"content":{"99":{"position":[[526,10]]}},"keywords":{}}],["quot;topic"",{"_index":2734,"title":{},"content":{"253":{"position":[[1973,18]]},"313":{"position":[[1973,18]]}},"keywords":{}}],["quot;total"",{"_index":1666,"title":{},"content":{"121":{"position":[[1323,18],[1383,18],[1443,18]]}},"keywords":{}}],["quot;trace"",{"_index":3234,"title":{},"content":{"343":{"position":[[223,18]]}},"keywords":{}}],["quot;two"",{"_index":1417,"title":{},"content":{"98":{"position":[[795,16]]},"1463":{"position":[[728,16],[750,15],[881,15]]}},"keywords":{}}],["quot;type"",{"_index":477,"title":{},"content":{"16":{"position":[[909,18]]},"210":{"position":[[661,17],[785,17],[968,17],[1226,17],[3489,17]]},"253":{"position":[[2937,17]]},"313":{"position":[[2937,17]]},"546":{"position":[[142,17]]},"594":{"position":[[130,17]]},"898":{"position":[[341,17],[549,17],[811,17],[1043,17],[1291,17],[1460,17],[1718,17],[1852,17]]}},"keywords":{}}],["quot;type":"auto"",{"_index":3599,"title":{},"content":{"417":{"position":[[1813,35]]},"502":{"position":[[1461,35]]},"545":{"position":[[1415,35]]},"637":{"position":[[975,35]]},"1021":{"position":[[1972,35]]}},"keywords":{}}],["quot;u",{"_index":3516,"title":{},"content":{"392":{"position":[[639,8]]},"393":{"position":[[293,8]]},"398":{"position":[[294,8]]},"417":{"position":[[2067,8],[2175,8]]},"418":{"position":[[354,8]]},"1126":{"position":[[255,8]]}},"keywords":{}}],["quot;u"",{"_index":2290,"title":{},"content":{"210":{"position":[[1040,14]]}},"keywords":{}}],["quot;unhandl",{"_index":4645,"title":{},"content":{"762":{"position":[[36,15]]},"775":{"position":[[36,15]]},"802":{"position":[[36,15]]},"817":{"position":[[36,15]]},"833":{"position":[[36,15]]}},"keywords":{}}],["quot;unit",{"_index":2393,"title":{},"content":{"210":{"position":[[3460,12]]}},"keywords":{}}],["quot;unknown"",{"_index":1817,"title":{},"content":{"141":{"position":[[1094,19]]}},"keywords":{}}],["quot;unsupport",{"_index":4629,"title":{},"content":{"760":{"position":[[36,17]]},"761":{"position":[[36,17]]},"773":{"position":[[36,17]]},"774":{"position":[[36,17]]},"800":{"position":[[36,17]]},"801":{"position":[[36,17]]},"815":{"position":[[36,17]]},"816":{"position":[[36,17]]},"831":{"position":[[36,17]]},"832":{"position":[[36,17]]}},"keywords":{}}],["quot;upd",{"_index":2604,"title":{},"content":{"240":{"position":[[2986,12],[4818,12]]}},"keywords":{}}],["quot;update"",{"_index":2191,"title":{},"content":{"197":{"position":[[1194,18],[1546,18]]}},"keywords":{}}],["quot;uri"",{"_index":2736,"title":{},"content":{"253":{"position":[[2034,16]]},"313":{"position":[[2034,16]]}},"keywords":{}}],["quot;usa"",{"_index":2392,"title":{},"content":{"210":{"position":[[3442,17]]}},"keywords":{}}],["quot;user"",{"_index":2758,"title":{},"content":{"253":{"position":[[2979,17],[3256,16]]},"313":{"position":[[2979,17]]},"315":{"position":[[2246,17]]}},"keywords":{}}],["quot;user_id"",{"_index":2765,"title":{},"content":{"253":{"position":[[3235,20]]}},"keywords":{}}],["quot;useraccessfullbucket"",{"_index":3586,"title":{},"content":{"415":{"position":[[597,33]]}},"keywords":{}}],["quot;userid"",{"_index":1058,"title":{},"content":{"71":{"position":[[320,20],[380,20],[443,20]]}},"keywords":{}}],["quot;usernam",{"_index":4907,"title":{},"content":{"879":{"position":[[511,14]]}},"keywords":{}}],["quot;uuid"",{"_index":984,"title":{},"content":{"66":{"position":[[871,17]]},"253":{"position":[[1351,17]]},"313":{"position":[[1351,17]]},"315":{"position":[[2124,17]]}},"keywords":{}}],["quot;value"",{"_index":6380,"title":{},"content":{"1384":{"position":[[825,17]]},"1465":{"position":[[810,18]]}},"keywords":{}}],["quot;version"",{"_index":1996,"title":{},"content":{"172":{"position":[[261,20]]},"414":{"position":[[248,20]]},"415":{"position":[[508,20]]}},"keywords":{}}],["quot;viewer"",{"_index":2397,"title":{},"content":{"210":{"position":[[3550,19]]}},"keywords":{}}],["quot;votes"",{"_index":2387,"title":{},"content":{"210":{"position":[[3369,18]]}},"keywords":{}}],["quot;wal_level=logical"",{"_index":2512,"title":{},"content":{"236":{"position":[[857,29]]}},"keywords":{}}],["quot;wallet"",{"_index":4906,"title":{},"content":{"879":{"position":[[489,18]]}},"keywords":{}}],["quot;warehouse_name"",{"_index":6579,"title":{},"content":{"1453":{"position":[[1434,27]]}},"keywords":{}}],["quot;warn"",{"_index":3231,"title":{},"content":{"343":{"position":[[165,17]]}},"keywords":{}}],["quot;webhookid"",{"_index":3875,"title":{},"content":{"488":{"position":[[1115,22]]},"659":{"position":[[1272,22]]},"676":{"position":[[1115,22]]},"691":{"position":[[1115,22]]}},"keywords":{}}],["quot;wher",{"_index":2907,"title":{},"content":{"281":{"position":[[3323,11]]}},"keywords":{}}],["quot;wiki"",{"_index":2760,"title":{},"content":{"253":{"position":[[3022,17]]},"313":{"position":[[3022,17]]}},"keywords":{}}],["quot;wil",{"_index":1376,"title":{},"content":{"96":{"position":[[355,10],[579,10]]}},"keywords":{}}],["quot;will"",{"_index":1060,"title":{},"content":{"71":{"position":[[362,17],[485,17]]},"74":{"position":[[458,16]]}},"keywords":{}}],["quot;william"",{"_index":1061,"title":{},"content":{"71":{"position":[[422,20]]},"74":{"position":[[478,19]]}},"keywords":{}}],["quot;windowing"",{"_index":2848,"title":{},"content":{"279":{"position":[[356,21]]}},"keywords":{}}],["quot;wins"",{"_index":2373,"title":{},"content":{"210":{"position":[[3131,17]]}},"keywords":{}}],["quot;woocommerce"",{"_index":5350,"title":{},"content":{"1092":{"position":[[210,23]]}},"keywords":{}}],["quot;work"",{"_index":5174,"title":{},"content":{"1010":{"position":[[393,16]]}},"keywords":{}}],["quot;writeschema"",{"_index":2279,"title":{},"content":{"210":{"position":[[634,24]]}},"keywords":{}}],["quot;x",{"_index":2298,"title":{},"content":{"210":{"position":[[1268,7]]},"898":{"position":[[379,7]]}},"keywords":{}}],["quot;xxxxxxxx",{"_index":985,"title":{},"content":{"66":{"position":[[889,14]]}},"keywords":{}}],["quot;year"",{"_index":2382,"title":{},"content":{"210":{"position":[[3300,17]]}},"keywords":{}}],["quot;your_google_drive_file_id"",{"_index":4139,"title":{},"content":{"566":{"position":[[189,37]]}},"keywords":{}}],["quot;yyyi",{"_index":4929,"title":{},"content":{"891":{"position":[[196,10]]}},"keywords":{}}],["quot;zelda",{"_index":1718,"title":{},"content":{"128":{"position":[[536,11],[581,11]]},"129":{"position":[[909,11]]}},"keywords":{}}],["quot;zelda"",{"_index":1724,"title":{},"content":{"129":{"position":[[781,17]]}},"keywords":{}}],["quot;zendaya"",{"_index":2356,"title":{},"content":{"210":{"position":[[2794,20]]}},"keywords":{}}],["quot;zombie"",{"_index":6472,"title":{},"content":{"1437":{"position":[[647,18]]}},"keywords":{}}],["quot;|")spac",{"_index":3616,"title":{},"content":{"419":{"position":[[1672,20]]},"441":{"position":[[281,20]]},"504":{"position":[[1301,20]]},"547":{"position":[[1674,20]]},"639":{"position":[[1299,20]]},"1023":{"position":[[1655,20]]}},"keywords":{}}],["quota",{"_index":4038,"title":{},"content":{"532":{"position":[[212,6]]},"871":{"position":[[181,5]]}},"keywords":{}}],["r",{"_index":2685,"title":{},"content":{"250":{"position":[[1549,1]]}},"keywords":{}}],["r_organization_soci",{"_index":4520,"title":{},"content":{"723":{"position":[[252,22]]},"725":{"position":[[95,21]]},"726":{"position":[[513,21]]}},"keywords":{}}],["race",{"_index":6473,"title":{},"content":{"1437":{"position":[[714,4]]}},"keywords":{}}],["rais",{"_index":6291,"title":{},"content":{"1370":{"position":[[811,5]]}},"keywords":{}}],["raiserror",{"_index":6327,"title":{},"content":{"1379":{"position":[[2733,9]]},"1403":{"position":[[2733,9]]},"1414":{"position":[[2733,9]]}},"keywords":{}}],["ram",{"_index":4890,"title":{},"content":{"869":{"position":[[1230,4],[1518,3]]}},"keywords":{}}],["ran",{"_index":337,"title":{},"content":{"11":{"position":[[1424,3]]},"192":{"position":[[536,5]]}},"keywords":{}}],["random",{"_index":3891,"title":{},"content":{"492":{"position":[[187,6]]},"665":{"position":[[187,6]]},"680":{"position":[[187,6]]},"695":{"position":[[187,6]]},"1292":{"position":[[3722,6]]},"1306":{"position":[[3722,6]]},"1329":{"position":[[3722,6]]}},"keywords":{}}],["rang",{"_index":77,"title":{"870":{"position":[[16,5]]}},"content":{"2":{"position":[[279,5],[350,5],[495,6],[575,5]]},"560":{"position":[[86,5]]},"577":{"position":[[216,6]]},"584":{"position":[[699,5]]},"588":{"position":[[211,6]]},"867":{"position":[[1198,5],[1212,5]]},"870":{"position":[[92,6],[145,6],[247,5],[825,5]]},"1140":{"position":[[1917,5]]},"1292":{"position":[[3773,5]]},"1306":{"position":[[3773,5]]},"1316":{"position":[[1917,5]]},"1329":{"position":[[3773,5]]},"1340":{"position":[[1917,5]]},"1351":{"position":[[1917,5]]},"1370":{"position":[[828,5]]},"1379":{"position":[[2780,5]]},"1403":{"position":[[2780,5]]},"1414":{"position":[[2780,5]]},"1431":{"position":[[1940,5]]},"1452":{"position":[[4104,5]]},"1474":{"position":[[763,6],[899,6]]}},"keywords":{}}],["rank",{"_index":5605,"title":{},"content":{"1140":{"position":[[1954,4]]},"1292":{"position":[[3818,4]]},"1306":{"position":[[3818,4]]},"1316":{"position":[[1954,4]]},"1329":{"position":[[3818,4]]},"1340":{"position":[[1954,4]]},"1351":{"position":[[1954,4]]},"1431":{"position":[[1977,4]]}},"keywords":{}}],["rare",{"_index":980,"title":{},"content":{"66":{"position":[[718,4]]},"309":{"position":[[1631,4]]},"1147":{"position":[[4,4]]},"1166":{"position":[[4,4]]},"1174":{"position":[[4,4]]},"1216":{"position":[[4,4]]},"1224":{"position":[[4,4]]}},"keywords":{}}],["rate",{"_index":276,"title":{"493":{"position":[[9,5]]},"870":{"position":[[33,5]]}},"content":{"8":{"position":[[765,4]]},"124":{"position":[[1006,4]]},"198":{"position":[[997,6]]},"364":{"position":[[1003,5]]},"480":{"position":[[283,4]]},"494":{"position":[[42,4]]},"495":{"position":[[259,5]]},"509":{"position":[[282,4]]},"515":{"position":[[291,4],[981,4]]},"900":{"position":[[35,4]]},"922":{"position":[[3217,4]]},"1096":{"position":[[453,5]]}},"keywords":{}}],["rate<datasetsize>",{"_index":5029,"title":{},"content":{"912":{"position":[[1539,23]]}},"keywords":{}}],["rates:dev",{"_index":3331,"title":{},"content":{"364":{"position":[[1068,9]]},"497":{"position":[[98,9]]}},"keywords":{}}],["ratesus",{"_index":4350,"title":{},"content":{"628":{"position":[[331,9],[346,9]]}},"keywords":{}}],["ratingsscenario",{"_index":3914,"title":{},"content":{"506":{"position":[[269,15]]}},"keywords":{}}],["ratingsschedulessla",{"_index":5452,"title":{},"content":{"1128":{"position":[[262,19]]}},"keywords":{}}],["raw",{"_index":1418,"title":{},"content":{"98":{"position":[[839,3]]},"180":{"position":[[568,3],[808,3],[897,3]]},"183":{"position":[[207,3],[4617,3]]}},"keywords":{}}],["rbac",{"_index":2213,"title":{},"content":{"202":{"position":[[143,7]]}},"keywords":{}}],["rclock",{"_index":6690,"title":{},"content":{"1474":{"position":[[892,6]]}},"keywords":{}}],["rclockbegin",{"_index":6679,"title":{},"content":{"1474":{"position":[[170,12],[669,12]]}},"keywords":{}}],["rcu",{"_index":3535,"title":{},"content":{"397":{"position":[[950,3]]}},"keywords":{}}],["rcualloc",{"_index":3534,"title":{},"content":{"397":{"position":[[935,14]]}},"keywords":{}}],["rd",{"_index":2046,"title":{"765":{"position":[[7,3]]},"822":{"position":[[7,3]]},"901":{"position":[[7,3]]},"1048":{"position":[[7,3]]},"1318":{"position":[[7,3]]},"1321":{"position":[[32,4]]},"1331":{"position":[[7,3]]},"1334":{"position":[[29,3]]},"1371":{"position":[[7,3]]},"1373":{"position":[[13,3]]}},"content":{"179":{"position":[[520,4]]},"363":{"position":[[475,3],[543,3]]},"767":{"position":[[807,3],[2290,3],[2386,3]]},"772":{"position":[[19,3]]},"792":{"position":[[1086,3],[2367,3]]},"824":{"position":[[878,3],[2404,3],[2498,3]]},"864":{"position":[[1531,3]]},"904":{"position":[[903,3],[2313,3]]},"918":{"position":[[2605,3]]},"1039":{"position":[[334,3]]},"1041":{"position":[[117,3]]},"1050":{"position":[[1032,3]]},"1051":{"position":[[2029,3]]},"1120":{"position":[[308,3]]},"1289":{"position":[[199,3],[1478,3]]},"1310":{"position":[[799,3]]},"1322":{"position":[[1697,4]]},"1335":{"position":[[1345,4]]},"1373":{"position":[[1278,3]]},"1374":{"position":[[1282,3]]},"1407":{"position":[[117,3]]}},"keywords":{}}],["rdd",{"_index":3135,"title":{},"content":{"321":{"position":[[222,4],[286,3],[429,4],[465,3],[801,5]]}},"keywords":{}}],["rds.logical_replication=1",{"_index":4997,"title":{},"content":{"904":{"position":[[1107,26]]},"918":{"position":[[1398,26]]}},"keywords":{}}],["rds_replic",{"_index":4998,"title":{},"content":{"904":{"position":[[1506,15]]},"918":{"position":[[1798,15]]}},"keywords":{}}],["rdsadmin.rdsadmin_util.alter_supplemental_logging(p_act",{"_index":4861,"title":{},"content":{"864":{"position":[[1557,58]]}},"keywords":{}}],["rdsamazon",{"_index":4698,"title":{},"content":{"788":{"position":[[178,9]]},"790":{"position":[[94,9]]},"914":{"position":[[212,9]]},"916":{"position":[[99,9]]}},"keywords":{}}],["rdsgoogl",{"_index":5970,"title":{},"content":{"1282":{"position":[[77,9]]},"1310":{"position":[[77,9]]}},"keywords":{}}],["re",{"_index":237,"title":{"275":{"position":[[22,2]]},"307":{"position":[[0,2]]}},"content":{"7":{"position":[[308,2]]},"11":{"position":[[1248,2]]},"12":{"position":[[474,2]]},"13":{"position":[[927,2],[1081,2],[1732,2],[1951,2]]},"55":{"position":[[171,2],[1084,2]]},"56":{"position":[[648,2]]},"74":{"position":[[681,2]]},"81":{"position":[[2819,2]]},"82":{"position":[[1661,2],[1878,2],[4202,2]]},"94":{"position":[[1762,2],[2128,2]]},"106":{"position":[[420,2]]},"111":{"position":[[339,2]]},"112":{"position":[[823,2],[1053,2]]},"120":{"position":[[1314,2],[1680,2]]},"133":{"position":[[165,2],[306,2],[579,2]]},"138":{"position":[[1305,2],[1350,2]]},"141":{"position":[[1394,2]]},"142":{"position":[[1298,2],[1343,2]]},"162":{"position":[[696,2]]},"169":{"position":[[1730,2]]},"198":{"position":[[497,2]]},"208":{"position":[[940,2],[976,2],[1943,2]]},"228":{"position":[[684,2]]},"229":{"position":[[904,2]]},"239":{"position":[[1841,2]]},"259":{"position":[[392,2],[2081,2]]},"275":{"position":[[80,2],[633,2]]},"277":{"position":[[347,2]]},"285":{"position":[[447,2]]},"307":{"position":[[573,2],[647,2],[813,2],[2979,2],[3310,2]]},"308":{"position":[[1224,2]]},"309":{"position":[[1321,2],[1646,2],[3473,2],[3634,2]]},"324":{"position":[[348,2]]},"331":{"position":[[394,2],[777,2]]},"340":{"position":[[590,2]]},"387":{"position":[[365,2]]},"602":{"position":[[186,2]]},"761":{"position":[[586,2]]},"763":{"position":[[486,2]]},"764":{"position":[[673,2]]},"774":{"position":[[586,2]]},"776":{"position":[[486,2]]},"777":{"position":[[673,2]]},"785":{"position":[[685,2]]},"801":{"position":[[592,2]]},"803":{"position":[[492,2]]},"804":{"position":[[671,2]]},"816":{"position":[[592,2]]},"818":{"position":[[492,2]]},"819":{"position":[[671,2]]},"832":{"position":[[592,2]]},"834":{"position":[[492,2]]},"835":{"position":[[671,2]]},"922":{"position":[[2718,2]]},"1020":{"position":[[562,2]]},"1076":{"position":[[442,2]]},"1146":{"position":[[618,2]]},"1147":{"position":[[59,2],[217,2],[304,2]]},"1173":{"position":[[630,2]]},"1174":{"position":[[59,2],[217,2],[304,2]]},"1183":{"position":[[1669,2]]},"1215":{"position":[[618,2]]},"1216":{"position":[[59,2],[217,2],[304,2]]},"1223":{"position":[[630,2]]},"1224":{"position":[[59,2],[217,2],[304,2]]},"1440":{"position":[[1567,2]]},"1442":{"position":[[1564,2]]},"1446":{"position":[[388,2]]},"1447":{"position":[[468,2],[571,2]]},"1452":{"position":[[2216,2]]},"1459":{"position":[[498,2]]},"1480":{"position":[[1020,2],[1386,2]]}},"keywords":{}}],["reach",{"_index":109,"title":{},"content":{"3":{"position":[[237,5]]},"104":{"position":[[249,5]]},"141":{"position":[[1061,8]]},"277":{"position":[[117,7]]},"370":{"position":[[345,8]]},"373":{"position":[[591,7]]},"603":{"position":[[175,5]]},"757":{"position":[[135,8]]},"760":{"position":[[861,8]]},"770":{"position":[[135,8]]},"773":{"position":[[861,8]]},"797":{"position":[[135,8]]},"800":{"position":[[861,8]]},"812":{"position":[[135,8]]},"815":{"position":[[861,8]]},"828":{"position":[[135,8]]},"831":{"position":[[861,8]]},"867":{"position":[[128,8]]},"907":{"position":[[128,8]]},"923":{"position":[[128,8]]},"934":{"position":[[128,8]]},"950":{"position":[[128,8]]},"968":{"position":[[128,8]]},"1045":{"position":[[135,8]]},"1053":{"position":[[135,8]]},"1061":{"position":[[135,8]]}},"keywords":{}}],["react",{"_index":755,"title":{},"content":{"44":{"position":[[181,8],[513,6]]},"110":{"position":[[549,8]]},"196":{"position":[[459,5]]},"233":{"position":[[466,5]]}},"keywords":{}}],["reaction",{"_index":4024,"title":{},"content":{"529":{"position":[[309,9],[442,9],[517,9],[594,9]]},"723":{"position":[[316,10]]}},"keywords":{}}],["read",{"_index":186,"title":{"110":{"position":[[0,4]]},"111":{"position":[[0,4]]},"162":{"position":[[10,4]]},"202":{"position":[[0,4]]}},"content":{"4":{"position":[[700,4],[819,5]]},"6":{"position":[[463,4]]},"8":{"position":[[269,4]]},"11":{"position":[[157,4],[272,4],[1000,7]]},"17":{"position":[[6,7],[192,4],[1111,7]]},"21":{"position":[[238,4],[379,4]]},"34":{"position":[[132,4]]},"39":{"position":[[84,4]]},"41":{"position":[[122,5]]},"60":{"position":[[720,4],[868,7]]},"68":{"position":[[767,4],[862,4],[945,4],[1068,4],[1116,4],[1191,4],[1438,5],[1522,5],[1577,5],[1635,4],[1828,4]]},"77":{"position":[[164,5],[209,7],[403,4]]},"94":{"position":[[1278,4],[1382,5],[1507,4],[1806,5],[2172,5]]},"105":{"position":[[89,4],[138,4],[601,5],[663,4],[711,4],[1284,7],[1519,5]]},"106":{"position":[[126,4],[347,5],[506,5]]},"107":{"position":[[28,5]]},"109":{"position":[[36,4],[79,4],[757,4],[785,4]]},"110":{"position":[[31,4],[157,4],[499,5],[867,4],[944,4],[969,4],[1090,8],[1190,4],[1270,8],[1329,4],[1489,4]]},"120":{"position":[[949,4],[1045,5],[1358,5],[1724,5]]},"121":{"position":[[623,5],[735,4]]},"124":{"position":[[683,4],[869,4]]},"141":{"position":[[30,4]]},"142":{"position":[[1990,4],[2090,4],[2357,5],[2432,5]]},"150":{"position":[[89,4]]},"152":{"position":[[152,4]]},"154":{"position":[[569,4],[882,4],[1009,4]]},"162":{"position":[[142,5],[465,4],[580,4],[932,4],[1097,4],[1286,4],[1308,4],[1623,4],[1707,4]]},"165":{"position":[[849,4],[1191,4]]},"166":{"position":[[634,4],[688,4]]},"196":{"position":[[792,8]]},"202":{"position":[[22,4],[217,4],[327,4]]},"207":{"position":[[1091,4],[1552,4]]},"212":{"position":[[237,4]]},"215":{"position":[[140,4]]},"219":{"position":[[85,4]]},"233":{"position":[[977,8]]},"237":{"position":[[438,4],[767,4]]},"243":{"position":[[231,4]]},"245":{"position":[[140,4]]},"250":{"position":[[1173,7]]},"253":{"position":[[872,4]]},"254":{"position":[[1252,6]]},"279":{"position":[[38,6],[817,4],[887,5]]},"280":{"position":[[1021,5],[1882,4]]},"288":{"position":[[359,4]]},"295":{"position":[[1850,4]]},"296":{"position":[[4717,4],[4916,4]]},"299":{"position":[[333,6]]},"313":{"position":[[872,4]]},"314":{"position":[[973,6]]},"320":{"position":[[1270,5]]},"321":{"position":[[1317,4]]},"323":{"position":[[426,6],[609,4]]},"325":{"position":[[832,4]]},"337":{"position":[[437,4],[524,4]]},"338":{"position":[[187,4],[480,4]]},"341":{"position":[[493,4]]},"366":{"position":[[234,5]]},"397":{"position":[[965,4]]},"406":{"position":[[262,4],[381,4]]},"408":{"position":[[428,4],[474,7]]},"410":{"position":[[331,5]]},"411":{"position":[[37,5],[95,5]]},"413":{"position":[[187,6]]},"414":{"position":[[69,5],[179,5],[215,5]]},"417":{"position":[[873,6],[1064,6],[1278,5]]},"430":{"position":[[107,4]]},"438":{"position":[[1619,4],[1794,5]]},"452":{"position":[[150,4]]},"477":{"position":[[257,4]]},"502":{"position":[[105,4],[316,5]]},"543":{"position":[[295,4]]},"545":{"position":[[902,5]]},"571":{"position":[[913,4]]},"578":{"position":[[132,5],[244,5]]},"591":{"position":[[46,4]]},"595":{"position":[[1458,4]]},"598":{"position":[[218,4]]},"645":{"position":[[408,4]]},"652":{"position":[[408,4]]},"723":{"position":[[275,4],[364,4],[398,4]]},"750":{"position":[[910,4],[955,4]]},"752":{"position":[[396,4],[432,4]]},"753":{"position":[[1052,4],[1088,4]]},"757":{"position":[[548,4]]},"764":{"position":[[391,7]]},"766":{"position":[[910,4],[955,4]]},"767":{"position":[[1331,4],[1405,4]]},"770":{"position":[[548,4]]},"777":{"position":[[391,7]]},"780":{"position":[[80,4]]},"785":{"position":[[75,5],[250,4]]},"789":{"position":[[1311,4],[1356,4]]},"791":{"position":[[349,4],[385,4]]},"793":{"position":[[1023,4],[1059,4]]},"797":{"position":[[548,4]]},"804":{"position":[[389,7]]},"807":{"position":[[898,4],[943,4]]},"808":{"position":[[969,4],[1005,4]]},"812":{"position":[[548,4]]},"819":{"position":[[389,7]]},"823":{"position":[[898,4],[943,4]]},"824":{"position":[[1397,4],[1471,4]]},"828":{"position":[[548,4]]},"835":{"position":[[389,7]]},"857":{"position":[[194,4]]},"862":{"position":[[131,4]]},"864":{"position":[[41,4],[327,4],[397,4],[982,4]]},"869":{"position":[[219,7]]},"874":{"position":[[131,4]]},"876":{"position":[[41,4],[327,4],[397,4],[833,4]]},"903":{"position":[[260,5]]},"915":{"position":[[260,5]]},"922":{"position":[[39,7]]},"930":{"position":[[260,5]]},"963":{"position":[[414,5]]},"987":{"position":[[286,4]]},"989":{"position":[[10,4],[59,4],[297,4]]},"1002":{"position":[[286,4]]},"1004":{"position":[[10,4],[59,4],[380,4]]},"1007":{"position":[[123,4]]},"1008":{"position":[[601,4]]},"1031":{"position":[[468,4]]},"1032":{"position":[[1337,4]]},"1040":{"position":[[466,7]]},"1050":{"position":[[466,7]]},"1058":{"position":[[466,7]]},"1089":{"position":[[241,4]]},"1105":{"position":[[134,4]]},"1140":{"position":[[1988,4],[2012,5]]},"1149":{"position":[[616,4]]},"1151":{"position":[[774,7],[905,7]]},"1153":{"position":[[76,4]]},"1160":{"position":[[294,4]]},"1181":{"position":[[76,4]]},"1190":{"position":[[76,4]]},"1194":{"position":[[295,5]]},"1251":{"position":[[81,4]]},"1258":{"position":[[210,4]]},"1260":{"position":[[573,7],[704,7]]},"1267":{"position":[[588,5]]},"1285":{"position":[[610,5]]},"1292":{"position":[[3859,4],[3902,5]]},"1300":{"position":[[610,5]]},"1306":{"position":[[3859,4],[3902,5]]},"1316":{"position":[[1988,4],[2012,5]]},"1324":{"position":[[610,5]]},"1329":{"position":[[3859,4],[3902,5]]},"1340":{"position":[[1988,4],[2012,5]]},"1351":{"position":[[1988,4],[2012,5]]},"1362":{"position":[[126,4]]},"1379":{"position":[[2837,4],[2892,5]]},"1384":{"position":[[429,4]]},"1388":{"position":[[76,4]]},"1391":{"position":[[869,4]]},"1403":{"position":[[2837,4],[2892,5]]},"1414":{"position":[[2837,4],[2892,5]]},"1422":{"position":[[76,4]]},"1431":{"position":[[2011,4],[2035,5]]},"1437":{"position":[[530,4]]},"1439":{"position":[[1709,4]]},"1442":{"position":[[545,4],[732,7],[829,4]]},"1443":{"position":[[746,7]]},"1444":{"position":[[560,7]]},"1451":{"position":[[1022,4]]},"1461":{"position":[[2391,4]]},"1470":{"position":[[710,5],[800,5],[1241,4],[1255,4],[1285,4]]},"1471":{"position":[[473,5],[633,5]]},"1480":{"position":[[655,4],[751,5],[1064,5],[1430,5]]}},"keywords":{}}],["read.doc",{"_index":2890,"title":{},"content":{"281":{"position":[[1477,9]]}},"keywords":{}}],["read_insight",{"_index":3938,"title":{},"content":{"515":{"position":[[689,14]]}},"keywords":{}}],["read_onli",{"_index":6118,"title":{},"content":{"1292":{"position":[[3949,9]]},"1306":{"position":[[3949,9]]},"1329":{"position":[[3949,9]]}},"keywords":{}}],["read_writ",{"_index":6122,"title":{},"content":{"1292":{"position":[[3996,10]]},"1306":{"position":[[3996,10]]},"1329":{"position":[[3996,10]]}},"keywords":{}}],["readabl",{"_index":962,"title":{},"content":{"64":{"position":[[465,8]]},"1461":{"position":[[1747,8]]}},"keywords":{}}],["readable.for",{"_index":4057,"title":{},"content":{"543":{"position":[[185,12]]}},"keywords":{}}],["readdelay",{"_index":1357,"title":{},"content":{"94":{"position":[[2729,10]]},"279":{"position":[[1647,10]]}},"keywords":{}}],["reader",{"_index":3125,"title":{},"content":{"320":{"position":[[1383,7]]}},"keywords":{}}],["readi",{"_index":529,"title":{},"content":{"20":{"position":[[73,5]]},"38":{"position":[[503,5]]},"120":{"position":[[2448,5]]},"169":{"position":[[1266,5]]},"183":{"position":[[4376,5]]},"191":{"position":[[2235,5]]},"199":{"position":[[177,5]]},"206":{"position":[[783,5]]},"232":{"position":[[674,5]]},"237":{"position":[[2870,5],[3334,5]]},"266":{"position":[[416,5]]},"268":{"position":[[1985,5]]},"269":{"position":[[1447,5]]},"270":{"position":[[2063,5]]},"343":{"position":[[632,5]]},"485":{"position":[[496,5]]},"635":{"position":[[530,6]]},"657":{"position":[[681,5]]},"673":{"position":[[496,5]]},"688":{"position":[[496,5]]},"864":{"position":[[1690,5]]},"876":{"position":[[950,5]]}},"keywords":{}}],["readschema",{"_index":1915,"title":{},"content":{"162":{"position":[[754,11],[2191,11]]},"165":{"position":[[1077,11],[1315,10],[2199,10]]},"192":{"position":[[1806,11]]},"207":{"position":[[978,11],[1215,10]]},"210":{"position":[[1533,10]]},"218":{"position":[[1802,11]]},"259":{"position":[[1270,11],[2851,11]]},"291":{"position":[[1735,11]]},"302":{"position":[[1644,11]]},"306":{"position":[[235,10]]}},"keywords":{}}],["readtext",{"_index":6332,"title":{},"content":{"1379":{"position":[[2938,8]]},"1403":{"position":[[2938,8]]},"1414":{"position":[[2938,8]]}},"keywords":{}}],["real",{"_index":287,"title":{"178":{"position":[[9,4]]},"194":{"position":[[0,4]]},"210":{"position":[[0,4]]},"325":{"position":[[40,4]]},"373":{"position":[[0,4]]},"641":{"position":[[10,4]]},"785":{"position":[[13,4]]},"976":{"position":[[11,4]]},"984":{"position":[[13,4]]},"1008":{"position":[[8,4]]}},"content":{"11":{"position":[[18,4]]},"34":{"position":[[175,4]]},"52":{"position":[[93,4]]},"53":{"position":[[226,4]]},"77":{"position":[[17,4]]},"101":{"position":[[311,4]]},"119":{"position":[[22,4]]},"121":{"position":[[158,4]]},"156":{"position":[[267,4]]},"180":{"position":[[163,4],[332,4]]},"183":{"position":[[4594,4],[4656,4]]},"189":{"position":[[719,4]]},"190":{"position":[[1366,4]]},"193":{"position":[[225,4]]},"196":{"position":[[119,4],[351,4]]},"197":{"position":[[232,4]]},"198":{"position":[[601,4],[687,4],[731,4],[1118,4]]},"205":{"position":[[345,4]]},"207":{"position":[[165,4]]},"209":{"position":[[660,4]]},"210":{"position":[[2221,4],[2456,4]]},"211":{"position":[[234,4]]},"232":{"position":[[796,4]]},"233":{"position":[[119,4],[358,4]]},"236":{"position":[[3781,4]]},"239":{"position":[[768,4]]},"240":{"position":[[4327,4]]},"252":{"position":[[166,4]]},"255":{"position":[[1030,4]]},"279":{"position":[[1364,4]]},"280":{"position":[[1577,4]]},"289":{"position":[[103,4]]},"292":{"position":[[245,4]]},"294":{"position":[[164,4]]},"300":{"position":[[103,4]]},"303":{"position":[[236,4]]},"305":{"position":[[41,4]]},"312":{"position":[[170,4]]},"316":{"position":[[1355,4]]},"320":{"position":[[193,4]]},"322":{"position":[[918,4],[1620,4],[1925,4]]},"323":{"position":[[878,4]]},"325":{"position":[[8,4],[159,4],[177,4],[397,4],[583,4],[644,4],[737,4]]},"363":{"position":[[143,4],[1492,5],[1992,4]]},"364":{"position":[[198,4]]},"373":{"position":[[171,4],[445,4],[683,4],[1067,4]]},"375":{"position":[[90,4]]},"377":{"position":[[379,4],[408,4]]},"379":{"position":[[312,4],[442,4],[582,4]]},"529":{"position":[[235,5]]},"646":{"position":[[258,4]]},"976":{"position":[[5,4],[111,4],[251,4]]},"977":{"position":[[206,4],[330,4],[588,4],[674,4]]},"990":{"position":[[250,4]]},"1008":{"position":[[46,4],[130,4],[268,4],[486,4],[546,4]]},"1118":{"position":[[1212,4]]},"1140":{"position":[[2044,4]]},"1292":{"position":[[4042,4]]},"1306":{"position":[[4042,4]]},"1316":{"position":[[2044,4]]},"1329":{"position":[[4042,4]]},"1340":{"position":[[2044,4]]},"1351":{"position":[[2044,4]]},"1379":{"position":[[2991,4]]},"1403":{"position":[[2991,4]]},"1414":{"position":[[2991,4]]},"1431":{"position":[[2067,4]]}},"keywords":{}}],["realist",{"_index":2488,"title":{},"content":{"232":{"position":[[450,9]]}},"keywords":{}}],["realm",{"_index":4734,"title":{},"content":{"840":{"position":[[146,6],[2508,5]]},"851":{"position":[[72,5],[87,5]]}},"keywords":{}}],["realm)consum",{"_index":4825,"title":{},"content":{"849":{"position":[[3659,15]]}},"keywords":{}}],["realm."",{"_index":2341,"title":{},"content":{"210":{"position":[[2571,13]]}},"keywords":{}}],["realm/account",{"_index":4746,"title":{},"content":{"842":{"position":[[99,13]]}},"keywords":{}}],["realtim",{"_index":5132,"title":{},"content":{"974":{"position":[[293,8]]},"977":{"position":[[176,8]]}},"keywords":{}}],["reason",{"_index":333,"title":{},"content":{"11":{"position":[[1360,8]]},"124":{"position":[[1101,10]]},"198":{"position":[[83,7]]},"207":{"position":[[1583,7]]},"305":{"position":[[451,7]]},"306":{"position":[[381,7]]},"909":{"position":[[70,8]]},"922":{"position":[[1245,8],[2282,7]]},"925":{"position":[[70,8]]},"936":{"position":[[70,8]]},"952":{"position":[[70,8]]},"970":{"position":[[70,8]]},"1230":{"position":[[780,6]]},"1243":{"position":[[306,8]]},"1435":{"position":[[477,11]]},"1447":{"position":[[10,6]]}},"keywords":{}}],["reasonscustom",{"_index":4325,"title":{},"content":{"622":{"position":[[147,13]]}},"keywords":{}}],["reasonsschoolsscorecardssourcestagsusersus",{"_index":4333,"title":{},"content":{"622":{"position":[[308,44]]}},"keywords":{}}],["reassign",{"_index":3210,"title":{},"content":{"333":{"position":[[149,10]]}},"keywords":{}}],["reauthent",{"_index":2797,"title":{},"content":{"267":{"position":[[1916,14]]}},"keywords":{}}],["reboot",{"_index":4670,"title":{},"content":{"767":{"position":[[1265,6],[1619,6]]},"792":{"position":[[1561,6]]},"824":{"position":[[1331,6],[1683,6]]},"904":{"position":[[1183,6]]},"918":{"position":[[1476,6]]}},"keywords":{}}],["rebuild",{"_index":6126,"title":{},"content":{"1292":{"position":[[4075,7]]},"1306":{"position":[[4075,7]]},"1329":{"position":[[4075,7]]}},"keywords":{}}],["recap",{"_index":2593,"title":{},"content":{"239":{"position":[[653,5]]}},"keywords":{}}],["recaptur",{"_index":3831,"title":{},"content":{"479":{"position":[[775,9]]},"760":{"position":[[488,10]]},"773":{"position":[[488,10]]},"800":{"position":[[488,10]]},"815":{"position":[[488,10]]},"831":{"position":[[488,10]]}},"keywords":{}}],["receipt",{"_index":6511,"title":{},"content":{"1444":{"position":[[811,7]]}},"keywords":{}}],["receiv",{"_index":1842,"title":{},"content":{"154":{"position":[[374,7]]},"191":{"position":[[220,8]]},"278":{"position":[[198,9]]},"280":{"position":[[544,8],[624,8]]},"602":{"position":[[1,8],[125,8]]},"724":{"position":[[553,7]]},"922":{"position":[[2904,9]]},"1133":{"position":[[687,8]]},"1443":{"position":[[608,9],[1135,7],[1168,7]]},"1455":{"position":[[515,7]]}},"keywords":{}}],["recent",{"_index":739,"title":{},"content":{"42":{"position":[[461,6]]},"81":{"position":[[1181,6]]},"110":{"position":[[1239,6]]},"146":{"position":[[649,6],[724,6]]},"149":{"position":[[622,6],[697,6]]},"152":{"position":[[625,6],[700,6]]},"163":{"position":[[311,6]]},"180":{"position":[[479,6]]},"192":{"position":[[606,8]]},"279":{"position":[[574,6]]},"595":{"position":[[711,6]]},"747":{"position":[[1024,6]]},"1020":{"position":[[381,6],[1336,6]]},"1147":{"position":[[24,8],[465,8]]},"1174":{"position":[[24,8],[465,8]]},"1216":{"position":[[24,8],[465,8]]},"1224":{"position":[[24,8],[465,8]]},"1439":{"position":[[1136,6]]},"1440":{"position":[[1606,6]]}},"keywords":{}}],["recentchang",{"_index":2071,"title":{},"content":{"183":{"position":[[1362,12]]},"314":{"position":[[316,12],[420,12],[1334,12],[2275,12]]},"315":{"position":[[422,12],[462,12],[500,12],[1240,12]]}},"keywords":{}}],["recharg",{"_index":3372,"title":{"955":{"position":[[0,8]]}},"content":{"364":{"position":[[2920,8]]},"956":{"position":[[56,8]]},"957":{"position":[[1,8]]},"958":{"position":[[250,8]]},"959":{"position":[[220,8],[428,8]]}},"keywords":{}}],["recharge:dev",{"_index":3373,"title":{},"content":{"364":{"position":[[2975,12]]},"960":{"position":[[90,12]]}},"keywords":{}}],["recipi",{"_index":1519,"title":{},"content":{"107":{"position":[[640,10],[1052,10],[1082,10]]},"277":{"position":[[758,11]]},"278":{"position":[[306,11],[1037,9],[1083,10],[1182,11],[1234,10],[1262,11],[1321,11]]},"279":{"position":[[1332,9]]},"280":{"position":[[1871,10],[2028,12],[2106,12]]},"281":{"position":[[1575,10]]}},"keywords":{}}],["recipient]i",{"_index":1547,"title":{},"content":{"107":{"position":[[2121,13]]}},"keywords":{}}],["recogn",{"_index":4646,"title":{},"content":{"762":{"position":[[247,9]]},"775":{"position":[[247,9]]},"802":{"position":[[247,9]]},"817":{"position":[[247,9]]},"833":{"position":[[247,9]]}},"keywords":{}}],["recommend",{"_index":921,"title":{},"content":{"61":{"position":[[423,9]]},"81":{"position":[[1002,11]]},"88":{"position":[[358,11]]},"122":{"position":[[703,11],[894,9],[1354,9],[1477,11],[1602,12],[1684,11],[1803,11],[1868,11]]},"135":{"position":[[836,9]]},"161":{"position":[[305,11]]},"169":{"position":[[1085,9]]},"175":{"position":[[256,9]]},"176":{"position":[[29,11]]},"209":{"position":[[1586,11],[1660,11]]},"221":{"position":[[886,9],[1863,11]]},"225":{"position":[[330,9]]},"230":{"position":[[992,11],[1030,11]]},"236":{"position":[[91,9]]},"237":{"position":[[1195,11],[2483,9]]},"288":{"position":[[15,13]]},"299":{"position":[[15,13]]},"308":{"position":[[174,11],[194,11],[327,11],[353,11],[680,12],[727,12]]},"309":{"position":[[366,12]]},"379":{"position":[[148,9]]},"428":{"position":[[162,11],[247,11]]},"429":{"position":[[773,10],[999,10]]},"452":{"position":[[117,9]]},"477":{"position":[[298,11]]},"489":{"position":[[242,9],[857,9]]},"513":{"position":[[183,11]]},"522":{"position":[[184,11]]},"530":{"position":[[184,11]]},"534":{"position":[[1039,11]]},"551":{"position":[[182,11]]},"569":{"position":[[201,11]]},"584":{"position":[[1099,9]]},"598":{"position":[[262,11]]},"607":{"position":[[200,11]]},"614":{"position":[[184,11]]},"643":{"position":[[158,11]]},"650":{"position":[[157,11]]},"662":{"position":[[242,9],[857,9]]},"677":{"position":[[242,9],[857,9]]},"692":{"position":[[242,9],[857,9]]},"716":{"position":[[184,11]]},"731":{"position":[[155,11]]},"767":{"position":[[1161,13],[1381,14]]},"785":{"position":[[872,11],[938,9]]},"821":{"position":[[176,9]]},"824":{"position":[[1227,13],[1447,14]]},"840":{"position":[[2660,11]]},"855":{"position":[[297,11]]},"864":{"position":[[61,11]]},"870":{"position":[[798,9]]},"876":{"position":[[61,11]]},"904":{"position":[[2162,11]]},"911":{"position":[[7,11]]},"912":{"position":[[184,9]]},"917":{"position":[[1671,11]]},"918":{"position":[[2454,11]]},"927":{"position":[[7,11]]},"931":{"position":[[1824,11]]},"938":{"position":[[7,11]]},"943":{"position":[[7,11]]},"945":{"position":[[316,11]]},"954":{"position":[[7,11]]},"965":{"position":[[1671,11]]},"972":{"position":[[7,11]]},"987":{"position":[[255,9]]},"1002":{"position":[[255,9]]},"1006":{"position":[[332,11]]},"1020":{"position":[[1992,11]]},"1105":{"position":[[101,9]]},"1186":{"position":[[314,9]]},"1226":{"position":[[201,14]]},"1243":{"position":[[1237,11]]},"1274":{"position":[[265,14]]},"1277":{"position":[[635,12]]},"1388":{"position":[[337,9]]},"1442":{"position":[[910,11]]},"1461":{"position":[[1700,12]]}},"keywords":{}}],["reconcil",{"_index":927,"title":{"62":{"position":[[0,11]]}},"content":{"61":{"position":[[973,9]]},"190":{"position":[[1400,9]]},"373":{"position":[[1040,11]]},"595":{"position":[[615,9]]}},"keywords":{}}],["reconcili",{"_index":3186,"title":{},"content":{"329":{"position":[[691,14]]}},"keywords":{}}],["reconfigur",{"_index":6336,"title":{},"content":{"1379":{"position":[[3056,11]]},"1403":{"position":[[3056,11]]},"1414":{"position":[[3056,11]]}},"keywords":{}}],["reconnect",{"_index":5076,"title":{},"content":{"942":{"position":[[369,10]]}},"keywords":{}}],["reconstruct",{"_index":2253,"title":{},"content":{"208":{"position":[[1175,11]]}},"keywords":{}}],["record",{"_index":998,"title":{"1157":{"position":[[8,6]]},"1276":{"position":[[9,6]]}},"content":{"67":{"position":[[284,6]]},"207":{"position":[[697,8]]},"237":{"position":[[3443,6]]},"239":{"position":[[1502,8]]},"295":{"position":[[226,8]]},"315":{"position":[[2461,7]]},"322":{"position":[[293,6]]},"517":{"position":[[2515,8],[3555,7]]},"556":{"position":[[445,8]]},"590":{"position":[[82,7]]},"779":{"position":[[79,7]]},"789":{"position":[[959,6],[1022,7],[1126,7]]},"849":{"position":[[1972,6]]},"910":{"position":[[255,6]]},"926":{"position":[[255,6]]},"937":{"position":[[255,6]]},"953":{"position":[[255,6]]},"971":{"position":[[255,6]]},"1113":{"position":[[399,8]]},"1250":{"position":[[79,7]]},"1453":{"position":[[263,9]]}},"keywords":{}}],["recordsusag",{"_index":5403,"title":{},"content":{"1110":{"position":[[467,12]]}},"keywords":{}}],["recov",{"_index":1486,"title":{},"content":{"104":{"position":[[150,10]]},"1292":{"position":[[4117,7]]},"1306":{"position":[[4117,7]]},"1329":{"position":[[4117,7]]},"1437":{"position":[[1011,8]]},"1440":{"position":[[1369,7]]}},"keywords":{}}],["recover",{"_index":233,"title":{},"content":{"7":{"position":[[198,11]]}},"keywords":{}}],["recoveri",{"_index":212,"title":{"21":{"position":[[0,8]]},"117":{"position":[[0,8]]},"1438":{"position":[[0,8]]},"1439":{"position":[[0,8]]}},"content":{"6":{"position":[[291,8]]},"21":{"position":[[517,8],[650,8],[718,8]]},"48":{"position":[[251,8]]},"112":{"position":[[441,8],[568,8]]},"117":{"position":[[85,8],[164,8],[233,8],[305,8],[352,10],[411,8],[481,8],[554,8]]},"1434":{"position":[[574,8],[2164,8]]},"1435":{"position":[[384,8],[755,8]]},"1437":{"position":[[228,8]]},"1438":{"position":[[32,8]]},"1439":{"position":[[21,8],[613,8],[1171,8]]},"1442":{"position":[[220,8]]},"1444":{"position":[[959,8]]}},"keywords":{}}],["recovery/acmeco/roduc",{"_index":1644,"title":{},"content":{"117":{"position":[[431,22]]}},"keywords":{}}],["recreat",{"_index":2598,"title":{},"content":{"239":{"position":[[2408,10]]},"760":{"position":[[411,8]]},"761":{"position":[[385,10]]},"762":{"position":[[504,8]]},"763":{"position":[[386,10]]},"764":{"position":[[635,9]]},"773":{"position":[[411,8]]},"774":{"position":[[385,10]]},"775":{"position":[[504,8]]},"776":{"position":[[386,10]]},"777":{"position":[[635,9]]},"800":{"position":[[411,8]]},"801":{"position":[[391,10]]},"802":{"position":[[504,8]]},"803":{"position":[[392,10]]},"804":{"position":[[633,9]]},"815":{"position":[[411,8]]},"816":{"position":[[391,10]]},"817":{"position":[[504,8]]},"818":{"position":[[392,10]]},"819":{"position":[[633,9]]},"831":{"position":[[411,8]]},"832":{"position":[[391,10]]},"833":{"position":[[504,8]]},"834":{"position":[[392,10]]},"835":{"position":[[633,9]]}},"keywords":{}}],["recur",{"_index":4271,"title":{},"content":{"595":{"position":[[1359,5]]}},"keywords":{}}],["recurs",{"_index":1857,"title":{},"content":{"156":{"position":[[237,10]]},"280":{"position":[[72,9],[817,9]]},"281":{"position":[[3190,9]]},"296":{"position":[[1988,11]]},"1140":{"position":[[2077,9]]},"1292":{"position":[[4157,9]]},"1306":{"position":[[4157,9]]},"1316":{"position":[[2077,9]]},"1329":{"position":[[4157,9]]},"1340":{"position":[[2077,9]]},"1351":{"position":[[2077,9]]},"1370":{"position":[[843,9]]},"1379":{"position":[[3106,9]]},"1403":{"position":[[3106,9]]},"1414":{"position":[[3106,9]]},"1431":{"position":[[2100,9]]},"1467":{"position":[[62,11]]}},"keywords":{}}],["red",{"_index":1661,"title":{},"content":{"121":{"position":[[1032,5]]},"138":{"position":[[1413,6]]},"141":{"position":[[1412,6]]},"142":{"position":[[1414,6]]},"1151":{"position":[[117,3]]}},"keywords":{}}],["redeem",{"_index":3738,"title":{},"content":{"446":{"position":[[318,6]]}},"keywords":{}}],["redirect",{"_index":4833,"title":{},"content":{"856":{"position":[[167,8]]}},"keywords":{}}],["redistribut",{"_index":3100,"title":{},"content":{"319":{"position":[[192,14]]}},"keywords":{}}],["redo",{"_index":2274,"title":{},"content":{"209":{"position":[[1495,7]]},"869":{"position":[[15,4],[241,4],[1023,4],[1386,4]]}},"keywords":{}}],["redo_buffer_",{"_index":6133,"title":{},"content":{"1292":{"position":[[4267,13]]},"1306":{"position":[[4267,13]]},"1329":{"position":[[4267,13]]}},"keywords":{}}],["redofil",{"_index":6129,"title":{},"content":{"1292":{"position":[[4208,8]]},"1306":{"position":[[4208,8]]},"1329":{"position":[[4208,8]]}},"keywords":{}}],["redshift",{"_index":3537,"title":{"399":{"position":[[7,8]]},"1148":{"position":[[7,8]]}},"content":{"400":{"position":[[87,8]]},"401":{"position":[[23,8],[312,8]]},"402":{"position":[[102,8]]},"403":{"position":[[130,8]]},"1120":{"position":[[159,8]]},"1149":{"position":[[40,8],[142,8],[507,8]]},"1150":{"position":[[49,8]]},"1151":{"position":[[1180,8]]},"1155":{"position":[[1,8]]},"1156":{"position":[[47,8],[83,8]]}},"keywords":{}}],["redshift:dev",{"_index":3546,"title":{},"content":{"403":{"position":[[89,12]]},"1120":{"position":[[219,12]]}},"keywords":{}}],["redshift:dev"",{"_index":5745,"title":{},"content":{"1152":{"position":[[104,18]]}},"keywords":{}}],["reduc",{"_index":544,"title":{"164":{"position":[[0,6]]}},"content":{"20":{"position":[[799,6]]},"42":{"position":[[291,6]]},"67":{"position":[[1949,7]]},"71":{"position":[[593,6]]},"74":{"position":[[73,8],[238,6]]},"113":{"position":[[160,6],[769,7],[882,6]]},"115":{"position":[[100,9],[398,6],[450,7]]},"121":{"position":[[980,7],[1074,7]]},"124":{"position":[[570,7]]},"125":{"position":[[121,8],[507,6],[860,7],[1183,6]]},"129":{"position":[[130,8]]},"159":{"position":[[480,6]]},"163":{"position":[[397,6],[524,6],[661,7]]},"164":{"position":[[245,6],[417,7],[459,6],[535,7],[620,7],[1388,6],[1769,6],[1870,6],[1915,7],[1990,7],[2031,7]]},"166":{"position":[[444,7]]},"183":{"position":[[1795,7],[1882,7],[3601,7],[3688,7]]},"240":{"position":[[3657,6]]},"254":{"position":[[390,7],[442,7],[477,7],[1458,7],[1510,7],[1545,7],[1940,7],[2453,8]]},"281":{"position":[[1965,6],[2057,7],[2142,7]]},"296":{"position":[[568,7],[633,7],[1539,7],[1604,7],[1938,7],[2000,8],[2209,7],[7075,7]]},"314":{"position":[[1994,8]]},"330":{"position":[[164,6]]},"747":{"position":[[1246,6]]},"867":{"position":[[447,8]]},"1008":{"position":[[1818,7]]},"1036":{"position":[[726,6]]},"1182":{"position":[[210,6],[521,8]]},"1191":{"position":[[212,6],[525,8]]},"1262":{"position":[[212,6],[525,8]]},"1358":{"position":[[421,6]]},"1389":{"position":[[211,6],[523,8]]},"1434":{"position":[[24,6]]},"1440":{"position":[[216,7],[589,6],[715,7],[1336,6],[1387,7]]},"1459":{"position":[[785,7]]},"1463":{"position":[[192,6],[314,7],[383,7],[429,7]]},"1464":{"position":[[170,7],[344,7]]},"1465":{"position":[[660,6],[735,7],[792,6],[974,7],[1020,7],[1048,7]]},"1466":{"position":[[8,7],[129,7],[326,7]]},"1467":{"position":[[12,7],[74,8],[472,7],[678,7],[794,7],[855,7],[1709,7],[2143,7],[2224,7],[2267,7]]},"1475":{"position":[[1060,7]]},"1476":{"position":[[44,6],[180,7],[249,7],[289,7],[796,7],[1246,7],[1385,7],[1411,7],[1486,7]]},"1477":{"position":[[784,9],[950,7],[1076,7],[1309,7],[1388,6],[1502,7],[3172,7],[3298,7],[3554,6],[3668,7],[3804,7],[3830,7]]}},"keywords":{}}],["reducejson",{"_index":1934,"title":{},"content":{"164":{"position":[[36,10]]}},"keywords":{}}],["reduct",{"_index":547,"title":{"42":{"position":[[0,11]]},"132":{"position":[[8,11]]},"163":{"position":[[0,11]]},"1358":{"position":[[18,9]]},"1458":{"position":[[0,9]]},"1459":{"position":[[0,9]]}},"content":{"20":{"position":[[835,9]]},"42":{"position":[[591,9],[748,10]]},"43":{"position":[[91,9]]},"74":{"position":[[170,10]]},"113":{"position":[[95,10],[361,10],[791,9]]},"115":{"position":[[218,9],[355,9],[1333,10]]},"121":{"position":[[296,10],[1752,9]]},"124":{"position":[[811,9]]},"125":{"position":[[796,10],[1121,9],[1280,10]]},"132":{"position":[[1,9],[120,9],[359,10],[395,11]]},"163":{"position":[[255,10],[482,10],[1171,10]]},"164":{"position":[[1,9],[144,9],[845,10],[878,9]]},"183":{"position":[[2007,9]]},"219":{"position":[[579,11]]},"254":{"position":[[1880,9],[2021,9],[3758,9]]},"281":{"position":[[57,9],[1909,9],[2812,9],[3064,9],[3269,9]]},"296":{"position":[[1776,9],[2413,9],[6661,9],[7115,9]]},"330":{"position":[[150,10]]},"379":{"position":[[1281,11]]},"595":{"position":[[602,9]]},"910":{"position":[[141,9]]},"926":{"position":[[141,9]]},"937":{"position":[[141,9]]},"953":{"position":[[141,9]]},"971":{"position":[[141,9]]},"1008":{"position":[[886,9],[1632,9]]},"1279":{"position":[[202,9]]},"1358":{"position":[[487,9],[671,9],[808,10],[855,9]]},"1438":{"position":[[438,9],[481,10]]},"1440":{"position":[[534,9],[818,9],[1230,9],[1463,9]]},"1459":{"position":[[697,9],[1065,9],[1179,9],[1752,10]]},"1464":{"position":[[834,9],[959,9],[969,9]]},"1465":{"position":[[28,9],[359,9]]},"1467":{"position":[[2881,9]]},"1475":{"position":[[616,10]]},"1477":{"position":[[2827,10],[3090,10]]}},"keywords":{}}],["reductionsto",{"_index":5014,"title":{},"content":{"909":{"position":[[860,12]]},"925":{"position":[[860,12]]},"936":{"position":[[860,12]]},"952":{"position":[[860,12]]},"970":{"position":[[860,12]]}},"keywords":{}}],["redund",{"_index":6136,"title":{},"content":{"1292":{"position":[[4323,9]]},"1306":{"position":[[4323,9]]},"1329":{"position":[[4323,9]]}},"keywords":{}}],["ref",{"_index":1308,"title":{"90":{"position":[[12,5]]}},"content":{"90":{"position":[[256,4]]},"161":{"position":[[19,4],[100,4],[381,4],[905,5]]},"165":{"position":[[1098,5],[1126,5],[1456,5],[1535,5]]},"207":{"position":[[999,5],[1027,5]]},"279":{"position":[[1121,5]]},"280":{"position":[[1244,5]]},"296":{"position":[[543,5],[1514,5],[2581,5]]},"1140":{"position":[[2114,3]]},"1316":{"position":[[2114,3]]},"1340":{"position":[[2114,3]]},"1351":{"position":[[2114,3]]},"1379":{"position":[[3162,3]]},"1403":{"position":[[3162,3]]},"1414":{"position":[[3162,3]]},"1431":{"position":[[2137,3]]},"1476":{"position":[[1453,5]]}},"keywords":{}}],["refactor",{"_index":1330,"title":{},"content":{"92":{"position":[[840,11]]}},"keywords":{}}],["refer",{"_index":303,"title":{},"content":{"11":{"position":[[366,9]]},"13":{"position":[[1344,9],[1384,9]]},"44":{"position":[[62,8]]},"52":{"position":[[227,9]]},"62":{"position":[[694,10],[759,10],[815,9]]},"64":{"position":[[699,9]]},"69":{"position":[[366,10]]},"70":{"position":[[488,9],[509,10]]},"82":{"position":[[1278,10]]},"85":{"position":[[41,9]]},"88":{"position":[[382,9]]},"90":{"position":[[54,9],[287,9]]},"92":{"position":[[42,10]]},"94":{"position":[[490,11],[906,10],[2561,10]]},"97":{"position":[[150,9]]},"133":{"position":[[126,11]]},"161":{"position":[[49,9],[324,10],[506,10],[1163,10]]},"165":{"position":[[1326,10]]},"175":{"position":[[358,5]]},"179":{"position":[[424,5]]},"207":{"position":[[1226,10]]},"217":{"position":[[602,9]]},"218":{"position":[[313,10]]},"221":{"position":[[250,9]]},"225":{"position":[[650,9]]},"228":{"position":[[1345,5]]},"270":{"position":[[1368,9]]},"296":{"position":[[2566,5]]},"307":{"position":[[440,9],[698,9],[930,9]]},"429":{"position":[[1235,5]]},"472":{"position":[[366,5]]},"496":{"position":[[171,9]]},"552":{"position":[[31,6],[297,6]]},"563":{"position":[[185,5]]},"764":{"position":[[1013,5]]},"767":{"position":[[257,5]]},"777":{"position":[[1013,5]]},"784":{"position":[[131,5]]},"804":{"position":[[1011,5]]},"819":{"position":[[1011,5]]},"835":{"position":[[1011,5]]},"842":{"position":[[1968,6]]},"900":{"position":[[351,5]]},"943":{"position":[[895,5],[917,10]]},"945":{"position":[[460,5]]},"946":{"position":[[167,5]]},"1019":{"position":[[219,8]]},"1020":{"position":[[628,8]]},"1140":{"position":[[2154,10]]},"1154":{"position":[[505,5]]},"1176":{"position":[[612,8]]},"1185":{"position":[[412,8]]},"1194":{"position":[[622,8]]},"1198":{"position":[[220,5]]},"1203":{"position":[[783,8]]},"1226":{"position":[[423,8]]},"1243":{"position":[[200,8]]},"1255":{"position":[[131,5]]},"1289":{"position":[[837,5]]},"1292":{"position":[[4372,9],[4431,10]]},"1306":{"position":[[4372,9],[4431,10]]},"1316":{"position":[[2154,10]]},"1322":{"position":[[1056,5]]},"1329":{"position":[[4372,9],[4431,10]]},"1334":{"position":[[312,5]]},"1340":{"position":[[2154,10]]},"1351":{"position":[[2154,10]]},"1354":{"position":[[447,8]]},"1370":{"position":[[860,10]]},"1379":{"position":[[3205,10]]},"1382":{"position":[[666,8]]},"1403":{"position":[[3205,10]]},"1414":{"position":[[3205,10]]},"1431":{"position":[[2177,10]]},"1439":{"position":[[546,9]]},"1459":{"position":[[1504,5]]},"1461":{"position":[[200,5],[3430,9],[4345,9],[4439,9],[4948,11],[5072,10]]}},"keywords":{}}],["referenc",{"_index":1315,"title":{},"content":{"90":{"position":[[487,10]]},"92":{"position":[[613,10]]},"94":{"position":[[509,10],[924,10]]},"161":{"position":[[187,11],[1103,10]]},"183":{"position":[[3142,10]]},"208":{"position":[[1604,11]]},"221":{"position":[[315,11]]},"1140":{"position":[[2187,11]]},"1192":{"position":[[330,10]]},"1316":{"position":[[2187,11]]},"1340":{"position":[[2187,11]]},"1351":{"position":[[2187,11]]},"1379":{"position":[[3258,11]]},"1394":{"position":[[327,10]]},"1403":{"position":[[3258,11]]},"1414":{"position":[[3258,11]]},"1423":{"position":[[337,10]]},"1431":{"position":[[2210,11]]},"1461":{"position":[[5499,11]]}},"keywords":{}}],["referencefacebook",{"_index":4417,"title":{},"content":{"668":{"position":[[131,17]]}},"keywords":{}}],["referencerefer",{"_index":1052,"title":{},"content":{"70":{"position":[[638,18]]}},"keywords":{}}],["referenceto",{"_index":2919,"title":{},"content":{"286":{"position":[[374,11]]}},"keywords":{}}],["referenti",{"_index":2866,"title":{},"content":{"280":{"position":[[804,12]]}},"keywords":{}}],["refin",{"_index":924,"title":{},"content":{"61":{"position":[[832,6]]},"80":{"position":[[606,6]]},"81":{"position":[[878,6]]},"161":{"position":[[456,6]]},"270":{"position":[[648,6]]},"274":{"position":[[954,6]]},"279":{"position":[[831,6]]},"517":{"position":[[108,6]]}},"keywords":{}}],["reflect",{"_index":86,"title":{},"content":{"2":{"position":[[457,8]]},"34":{"position":[[383,9]]},"44":{"position":[[281,7]]},"55":{"position":[[197,7]]},"56":{"position":[[299,7]]},"74":{"position":[[902,8]]},"84":{"position":[[1283,9]]},"121":{"position":[[311,9],[1660,8]]},"126":{"position":[[61,8]]},"193":{"position":[[194,9]]},"230":{"position":[[1315,9]]},"259":{"position":[[1580,7],[3138,7]]},"275":{"position":[[1037,7]]},"278":{"position":[[267,7]]},"292":{"position":[[124,9]]},"303":{"position":[[115,9]]},"359":{"position":[[37,7]]},"387":{"position":[[46,7]]},"388":{"position":[[27,8]]},"427":{"position":[[206,7]]},"448":{"position":[[46,7]]},"449":{"position":[[27,8]]},"473":{"position":[[27,8]]},"518":{"position":[[27,8]]},"527":{"position":[[27,8]]},"534":{"position":[[46,7]]},"535":{"position":[[27,8]]},"556":{"position":[[46,7]]},"557":{"position":[[27,8]]},"573":{"position":[[37,7]]},"575":{"position":[[13,8]]},"584":{"position":[[37,7]]},"586":{"position":[[13,8]]},"611":{"position":[[46,7]]},"612":{"position":[[27,8]]},"619":{"position":[[37,7]]},"646":{"position":[[316,7]]},"654":{"position":[[37,7]]},"685":{"position":[[46,7]]},"686":{"position":[[18,8]]},"720":{"position":[[46,7]]},"721":{"position":[[27,8]]},"735":{"position":[[37,7]]},"840":{"position":[[1467,7]]},"849":{"position":[[2358,7]]},"859":{"position":[[46,7]]},"860":{"position":[[27,8]]},"976":{"position":[[385,9]]},"991":{"position":[[46,7]]},"1006":{"position":[[506,9]]},"1008":{"position":[[107,7]]},"1009":{"position":[[46,7]]},"1010":{"position":[[27,8]]},"1070":{"position":[[46,7]]},"1071":{"position":[[27,8]]},"1085":{"position":[[46,7]]},"1086":{"position":[[27,8]]},"1231":{"position":[[13,8]]},"1247":{"position":[[37,7]]},"1248":{"position":[[13,8]]},"1437":{"position":[[137,8]]},"1440":{"position":[[306,7]]}},"keywords":{}}],["refresh",{"_index":1945,"title":{"249":{"position":[[23,7]]}},"content":{"164":{"position":[[1249,7]]},"239":{"position":[[636,10]]},"247":{"position":[[254,7],[391,7]]},"249":{"position":[[108,7]]},"259":{"position":[[617,7],[716,7]]},"384":{"position":[[322,7]]},"387":{"position":[[706,7],[731,7]]},"446":{"position":[[115,7]]},"448":{"position":[[631,7],[645,7]]},"529":{"position":[[197,7]]},"554":{"position":[[473,7]]},"556":{"position":[[932,7]]},"724":{"position":[[483,7]]},"726":{"position":[[403,7]]},"728":{"position":[[340,7]]},"859":{"position":[[914,7]]},"885":{"position":[[363,7],[388,7]]},"895":{"position":[[600,7]]},"988":{"position":[[283,7]]},"989":{"position":[[779,7],[1298,7]]},"991":{"position":[[595,7],[613,7]]},"1003":{"position":[[283,7]]},"1004":{"position":[[862,7],[1381,7]]},"1006":{"position":[[403,9]]},"1009":{"position":[[658,7],[676,7]]},"1101":{"position":[[188,7],[207,7]]},"1118":{"position":[[466,7],[692,7]]}},"keywords":{}}],["refresh_token",{"_index":3501,"title":{},"content":{"388":{"position":[[295,14]]},"446":{"position":[[384,14]]},"449":{"position":[[291,14]]},"557":{"position":[[314,14],[329,15]]},"728":{"position":[[325,14]]},"885":{"position":[[348,14]]},"886":{"position":[[195,14]]},"989":{"position":[[939,15]]},"992":{"position":[[182,14]]},"1004":{"position":[[1022,15]]},"1010":{"position":[[265,14]]},"1101":{"position":[[173,14]]}},"keywords":{}}],["refund",{"_index":5327,"title":{},"content":{"1078":{"position":[[1795,7]]}},"keywords":{}}],["regain",{"_index":6661,"title":{},"content":{"1470":{"position":[[240,6]]}},"keywords":{}}],["regardless",{"_index":218,"title":{},"content":{"6":{"position":[[353,10]]},"8":{"position":[[158,10]]},"11":{"position":[[1796,10]]},"68":{"position":[[1444,10]]},"88":{"position":[[635,10]]},"111":{"position":[[171,10]]},"126":{"position":[[503,10]]},"263":{"position":[[972,11]]},"274":{"position":[[1805,10]]},"305":{"position":[[539,11]]},"309":{"position":[[422,10]]},"319":{"position":[[232,10]]},"325":{"position":[[357,10]]},"590":{"position":[[733,10]]},"910":{"position":[[273,10]]},"926":{"position":[[273,10]]},"937":{"position":[[273,10]]},"953":{"position":[[273,10]]},"971":{"position":[[273,10]]},"1036":{"position":[[897,10]]},"1471":{"position":[[479,10]]}},"keywords":{}}],["regex",{"_index":3593,"title":{},"content":{"417":{"position":[[1264,5]]},"438":{"position":[[1780,5]]},"502":{"position":[[302,5]]},"545":{"position":[[888,5]]},"1021":{"position":[[856,5],[989,5]]}},"keywords":{}}],["regexp",{"_index":6145,"title":{},"content":{"1292":{"position":[[4492,6]]},"1306":{"position":[[4492,6]]},"1329":{"position":[[4492,6]]},"1370":{"position":[[876,6]]},"1394":{"position":[[510,6]]}},"keywords":{}}],["region",{"_index":2122,"title":{"385":{"position":[[15,6]]}},"content":{"190":{"position":[[955,7]]},"301":{"position":[[773,6]]},"344":{"position":[[155,7]]},"385":{"position":[[79,6],[188,6],[376,6],[781,6]]},"387":{"position":[[841,7],[849,6],[858,6]]},"388":{"position":[[328,7]]},"390":{"position":[[154,6]]},"392":{"position":[[539,7],[551,6],[578,6]]},"393":{"position":[[285,7]]},"397":{"position":[[272,7],[284,6],[311,6]]},"398":{"position":[[286,7]]},"408":{"position":[[118,7],[130,6],[141,6]]},"417":{"position":[[1989,7],[2001,6],[2028,6]]},"418":{"position":[[346,7]]},"432":{"position":[[1125,6]]},"433":{"position":[[702,7]]},"745":{"position":[[140,6]]},"747":{"position":[[1052,7],[1060,6],[1071,6]]},"748":{"position":[[363,7]]},"754":{"position":[[699,6]]},"794":{"position":[[905,6]]},"809":{"position":[[905,6]]},"825":{"position":[[741,6]]},"946":{"position":[[276,6]]},"1125":{"position":[[262,7],[274,6],[281,6]]},"1126":{"position":[[247,7]]},"1144":{"position":[[333,7],[341,6],[348,6]]},"1145":{"position":[[228,7]]},"1149":{"position":[[492,6]]},"1151":{"position":[[1067,7],[1075,6],[1082,6],[1166,6]]},"1152":{"position":[[344,7]]},"1162":{"position":[[405,7],[413,6],[424,7]]},"1163":{"position":[[238,7]]},"1170":{"position":[[333,7],[341,6],[348,6]]},"1171":{"position":[[232,7]]},"1176":{"position":[[84,6]]},"1179":{"position":[[297,7],[305,6],[320,7],[1196,6]]},"1180":{"position":[[131,7]]},"1203":{"position":[[466,6]]},"1206":{"position":[[153,6],[164,6]]},"1277":{"position":[[260,6]]},"1286":{"position":[[962,6]]},"1301":{"position":[[798,6]]},"1325":{"position":[[962,6]]},"1356":{"position":[[202,6]]},"1359":{"position":[[318,6]]},"1420":{"position":[[455,7],[467,6],[474,6]]},"1421":{"position":[[238,7],[246,6]]}},"keywords":{}}],["region_base_url",{"_index":6262,"title":{},"content":{"1356":{"position":[[185,16]]},"1357":{"position":[[71,16]]}},"keywords":{}}],["regist",{"_index":564,"title":{},"content":{"21":{"position":[[216,10],[700,8]]},"110":{"position":[[1209,8]]},"136":{"position":[[126,8]]},"168":{"position":[[121,8]]},"179":{"position":[[75,8]]},"188":{"position":[[89,8]]},"239":{"position":[[117,10]]},"266":{"position":[[98,8]]},"288":{"position":[[178,8]]},"299":{"position":[[178,8]]},"319":{"position":[[1432,8],[1533,9]]},"436":{"position":[[444,8]]},"446":{"position":[[17,10],[185,8]]},"1118":{"position":[[576,8]]},"1475":{"position":[[1774,9],[1972,8]]}},"keywords":{}}],["registr",{"_index":1970,"title":{"167":{"position":[[0,12]]}},"content":{"436":{"position":[[357,13],[494,13]]},"1292":{"position":[[4533,12]]},"1306":{"position":[[4533,12]]},"1329":{"position":[[4533,12]]}},"keywords":{}}],["registration.aft",{"_index":3699,"title":{},"content":{"436":{"position":[[475,18]]}},"keywords":{}}],["registrations.click",{"_index":3697,"title":{},"content":{"436":{"position":[[333,19]]}},"keywords":{}}],["registri",{"_index":1117,"title":{},"content":{"81":{"position":[[123,9],[159,8],[396,8]]},"84":{"position":[[1251,10]]},"246":{"position":[[92,8],[207,9]]},"247":{"position":[[123,8],[327,8],[355,8]]}},"keywords":{}}],["regr_avgi",{"_index":5617,"title":{},"content":{"1140":{"position":[[2267,9]]},"1316":{"position":[[2267,9]]},"1340":{"position":[[2267,9]]},"1351":{"position":[[2267,9]]},"1379":{"position":[[3378,9]]},"1403":{"position":[[3378,9]]},"1414":{"position":[[3378,9]]},"1431":{"position":[[2290,9]]}},"keywords":{}}],["regr_avgx",{"_index":5615,"title":{},"content":{"1140":{"position":[[2229,9]]},"1316":{"position":[[2229,9]]},"1340":{"position":[[2229,9]]},"1351":{"position":[[2229,9]]},"1379":{"position":[[3318,9]]},"1403":{"position":[[3318,9]]},"1414":{"position":[[3318,9]]},"1431":{"position":[[2252,9]]}},"keywords":{}}],["regr_count",{"_index":5621,"title":{},"content":{"1140":{"position":[[2313,10]]},"1316":{"position":[[2313,10]]},"1340":{"position":[[2313,10]]},"1351":{"position":[[2313,10]]},"1379":{"position":[[3430,10]]},"1403":{"position":[[3430,10]]},"1414":{"position":[[3430,10]]},"1431":{"position":[[2336,10]]}},"keywords":{}}],["regr_intercep",{"_index":6338,"title":{},"content":{"1379":{"position":[[3488,13]]},"1403":{"position":[[3488,13]]},"1414":{"position":[[3488,13]]}},"keywords":{}}],["regr_intercept",{"_index":5623,"title":{},"content":{"1140":{"position":[[2347,14]]},"1316":{"position":[[2347,14]]},"1340":{"position":[[2347,14]]},"1351":{"position":[[2347,14]]},"1431":{"position":[[2370,14]]}},"keywords":{}}],["regr_r2",{"_index":5626,"title":{},"content":{"1140":{"position":[[2389,7]]},"1316":{"position":[[2389,7]]},"1340":{"position":[[2389,7]]},"1351":{"position":[[2389,7]]},"1379":{"position":[[3545,7]]},"1403":{"position":[[3545,7]]},"1414":{"position":[[3545,7]]},"1431":{"position":[[2412,7]]}},"keywords":{}}],["regr_slop",{"_index":5628,"title":{},"content":{"1140":{"position":[[2427,10]]},"1316":{"position":[[2427,10]]},"1340":{"position":[[2427,10]]},"1351":{"position":[[2427,10]]},"1379":{"position":[[3592,10]]},"1403":{"position":[[3592,10]]},"1414":{"position":[[3592,10]]},"1431":{"position":[[2450,10]]}},"keywords":{}}],["regr_sxi",{"_index":5632,"title":{},"content":{"1140":{"position":[[2508,8]]},"1316":{"position":[[2508,8]]},"1340":{"position":[[2508,8]]},"1351":{"position":[[2508,8]]},"1379":{"position":[[3691,8]]},"1403":{"position":[[3691,8]]},"1414":{"position":[[3691,8]]},"1431":{"position":[[2531,8]]}},"keywords":{}}],["regr_sxx",{"_index":5631,"title":{},"content":{"1140":{"position":[[2469,8]]},"1316":{"position":[[2469,8]]},"1340":{"position":[[2469,8]]},"1351":{"position":[[2469,8]]},"1379":{"position":[[3645,8]]},"1403":{"position":[[3645,8]]},"1414":{"position":[[3645,8]]},"1431":{"position":[[2492,8]]}},"keywords":{}}],["regr_syi",{"_index":5635,"title":{},"content":{"1140":{"position":[[2560,8]]},"1316":{"position":[[2560,8]]},"1340":{"position":[[2560,8]]},"1351":{"position":[[2560,8]]},"1379":{"position":[[3742,8]]},"1403":{"position":[[3742,8]]},"1414":{"position":[[3742,8]]},"1431":{"position":[[2583,8]]}},"keywords":{}}],["regular",{"_index":571,"title":{},"content":{"21":{"position":[[535,7]]},"34":{"position":[[550,7]]},"53":{"position":[[287,7]]},"77":{"position":[[115,7]]},"94":{"position":[[32,7]]},"97":{"position":[[328,7]]},"156":{"position":[[374,7]]},"1006":{"position":[[64,7]]},"1165":{"position":[[57,7]]},"1429":{"position":[[103,7]]}},"keywords":{}}],["regularli",{"_index":3156,"title":{},"content":{"323":{"position":[[157,9]]},"1006":{"position":[[379,9]]},"1039":{"position":[[175,9]]},"1049":{"position":[[101,9]]},"1057":{"position":[[104,9]]}},"keywords":{}}],["reindex",{"_index":6293,"title":{},"content":{"1370":{"position":[[890,7]]}},"keywords":{}}],["reject",{"_index":1962,"title":{},"content":{"165":{"position":[[1897,7]]}},"keywords":{}}],["rel",{"_index":858,"title":{},"content":{"56":{"position":[[2376,8]]},"69":{"position":[[351,8],[402,9]]},"87":{"position":[[101,8]]},"94":{"position":[[892,8],[2547,8],[3078,8]]},"97":{"position":[[136,8]]},"100":{"position":[[307,8]]},"110":{"position":[[425,8]]},"111":{"position":[[191,8],[405,8]]},"161":{"position":[[110,8],[1202,8]]},"279":{"position":[[842,8]]},"296":{"position":[[2193,8]]},"545":{"position":[[850,9]]},"595":{"position":[[1676,10]]},"1021":{"position":[[948,9]]},"1140":{"position":[[2609,8]]},"1240":{"position":[[63,8],[81,8]]},"1316":{"position":[[2609,8]]},"1340":{"position":[[2609,8]]},"1351":{"position":[[2609,8]]},"1379":{"position":[[3755,8]]},"1403":{"position":[[3755,8]]},"1414":{"position":[[3755,8]]},"1431":{"position":[[2632,8]]},"1452":{"position":[[3383,8]]},"1453":{"position":[[619,8]]},"1459":{"position":[[390,8]]},"1461":{"position":[[216,8],[806,10],[5255,8]]},"1467":{"position":[[1693,8]]},"1476":{"position":[[780,8]]},"1477":{"position":[[2726,8]]}},"keywords":{}}],["relat",{"_index":429,"title":{},"content":{"14":{"position":[[608,10]]},"122":{"position":[[281,6]]},"125":{"position":[[246,10]]},"157":{"position":[[163,10]]},"165":{"position":[[154,10]]},"237":{"position":[[1716,7]]},"238":{"position":[[1015,9]]},"239":{"position":[[1887,6]]},"319":{"position":[[558,8]]},"322":{"position":[[73,7]]},"738":{"position":[[249,7]]},"842":{"position":[[2917,7]]},"907":{"position":[[1913,7]]},"923":{"position":[[1913,7]]},"968":{"position":[[1913,7]]},"1178":{"position":[[406,10]]},"1313":{"position":[[1663,7]]},"1337":{"position":[[1663,7]]},"1439":{"position":[[905,7]]},"1461":{"position":[[2264,7]]}},"keywords":{}}],["relationship",{"_index":96,"title":{},"content":{"2":{"position":[[721,12]]}},"keywords":{}}],["relativepath",{"_index":5905,"title":{},"content":{"1241":{"position":[[66,13]]},"1472":{"position":[[776,13]]}},"keywords":{}}],["relay",{"_index":6151,"title":{},"content":{"1292":{"position":[[4591,5]]},"1306":{"position":[[4591,5]]},"1329":{"position":[[4591,5]]}},"keywords":{}}],["relay_log_fil",{"_index":6160,"title":{},"content":{"1292":{"position":[[4706,13]]},"1306":{"position":[[4706,13]]},"1329":{"position":[[4706,13]]}},"keywords":{}}],["relay_log_po",{"_index":6162,"title":{},"content":{"1292":{"position":[[4754,13]]},"1306":{"position":[[4754,13]]},"1329":{"position":[[4754,13]]}},"keywords":{}}],["relay_thread",{"_index":6164,"title":{},"content":{"1292":{"position":[[4798,12]]},"1306":{"position":[[4798,12]]},"1329":{"position":[[4798,12]]}},"keywords":{}}],["relaylog",{"_index":6156,"title":{},"content":{"1292":{"position":[[4645,8]]},"1306":{"position":[[4645,8]]},"1329":{"position":[[4645,8]]}},"keywords":{}}],["releas",{"_index":1032,"title":{},"content":{"68":{"position":[[1348,8]]},"379":{"position":[[278,8]]},"529":{"position":[[637,8]]},"1140":{"position":[[2642,7]]},"1292":{"position":[[4846,7]]},"1306":{"position":[[4846,7]]},"1316":{"position":[[2642,7]]},"1329":{"position":[[4846,7]]},"1340":{"position":[[2642,7]]},"1351":{"position":[[2642,7]]},"1370":{"position":[[907,7]]},"1379":{"position":[[3816,7]]},"1403":{"position":[[3816,7]]},"1414":{"position":[[3816,7]]},"1431":{"position":[[2665,7]]}},"keywords":{}}],["relev",{"_index":1654,"title":{},"content":{"121":{"position":[[689,8]]},"174":{"position":[[221,8]]},"274":{"position":[[452,8]]},"864":{"position":[[351,8]]},"876":{"position":[[351,8]]},"922":{"position":[[707,8]]},"1391":{"position":[[1060,8]]}},"keywords":{}}],["reli",{"_index":1549,"title":{},"content":{"107":{"position":[[2240,4]]},"157":{"position":[[380,4]]},"216":{"position":[[381,4]]},"289":{"position":[[531,4]]},"300":{"position":[[478,4]]},"578":{"position":[[372,6]]},"909":{"position":[[330,4]]},"925":{"position":[[330,4]]},"936":{"position":[[330,4]]},"952":{"position":[[330,4]]},"964":{"position":[[246,6]]},"970":{"position":[[330,4]]}},"keywords":{}}],["reliabl",{"_index":1005,"title":{},"content":{"67":{"position":[[865,8]]},"70":{"position":[[179,11]]},"209":{"position":[[1557,8]]},"595":{"position":[[467,8]]},"785":{"position":[[845,8],[973,12]]}},"keywords":{}}],["reload",{"_index":6169,"title":{},"content":{"1292":{"position":[[4899,6]]},"1306":{"position":[[4899,6]]},"1329":{"position":[[4899,6]]}},"keywords":{}}],["remain",{"_index":414,"title":{},"content":{"13":{"position":[[1657,6],[1920,6]]},"208":{"position":[[1866,6]]},"307":{"position":[[2690,6]]},"309":{"position":[[572,7]]},"922":{"position":[[3031,6]]},"1077":{"position":[[666,7]]},"1146":{"position":[[108,6]]},"1173":{"position":[[108,6]]},"1215":{"position":[[108,6]]},"1223":{"position":[[108,6]]},"1443":{"position":[[786,9]]},"1456":{"position":[[271,9]]},"1464":{"position":[[881,7]]},"1467":{"position":[[2928,7]]}},"keywords":{}}],["remaind",{"_index":6617,"title":{},"content":{"1461":{"position":[[3072,9]]}},"keywords":{}}],["remot",{"_index":870,"title":{"1437":{"position":[[0,6]]}},"content":{"58":{"position":[[142,6]]},"83":{"position":[[1139,6]]},"87":{"position":[[682,6]]},"169":{"position":[[1144,6]]},"225":{"position":[[118,6]]},"330":{"position":[[355,6]]},"370":{"position":[[1747,6],[1955,6]]},"709":{"position":[[304,6]]},"1138":{"position":[[1038,6],[1245,6]]},"1272":{"position":[[119,6]]},"1292":{"position":[[4944,6]]},"1306":{"position":[[4944,6]]},"1329":{"position":[[4944,6]]},"1436":{"position":[[139,6]]},"1437":{"position":[[22,6],[1179,6]]}},"keywords":{}}],["remov",{"_index":435,"title":{"310":{"position":[[12,8]]}},"content":{"14":{"position":[[765,6]]},"68":{"position":[[1329,7]]},"82":{"position":[[996,7],[5002,6]]},"84":{"position":[[398,7]]},"105":{"position":[[897,7]]},"126":{"position":[[609,7],[642,7]]},"138":{"position":[[404,6]]},"141":{"position":[[714,6]]},"142":{"position":[[517,6]]},"197":{"position":[[1064,7],[1368,8],[1521,8]]},"217":{"position":[[1418,6],[1688,7]]},"218":{"position":[[1032,6],[1147,6],[1221,6]]},"230":{"position":[[1164,6]]},"242":{"position":[[116,6]]},"259":{"position":[[565,6],[2259,6]]},"290":{"position":[[1372,6]]},"295":{"position":[[217,8]]},"306":{"position":[[344,7]]},"310":{"position":[[60,8],[340,7]]},"760":{"position":[[327,8]]},"761":{"position":[[526,6]]},"763":{"position":[[314,8]]},"773":{"position":[[327,8]]},"774":{"position":[[526,6]]},"776":{"position":[[314,8]]},"800":{"position":[[327,8]]},"801":{"position":[[532,6]]},"803":{"position":[[320,8]]},"815":{"position":[[327,8]]},"816":{"position":[[532,6]]},"818":{"position":[[320,8]]},"831":{"position":[[327,8]]},"832":{"position":[[532,6]]},"834":{"position":[[320,8]]},"945":{"position":[[509,6],[898,7]]},"985":{"position":[[649,6]]},"1000":{"position":[[963,6]]},"1292":{"position":[[4994,6]]},"1306":{"position":[[4994,6]]},"1329":{"position":[[4994,6]]},"1359":{"position":[[452,7]]},"1448":{"position":[[82,8]]},"1477":{"position":[[141,8],[206,8],[415,8],[486,8],[552,8],[3054,8]]}},"keywords":{}}],["removefromwindow",{"_index":2858,"title":{},"content":{"279":{"position":[[1575,16]]}},"keywords":{}}],["renam",{"_index":1497,"title":{},"content":{"105":{"position":[[1116,8]]},"192":{"position":[[1896,7]]},"840":{"position":[[1539,6]]},"849":{"position":[[2430,6]]},"1292":{"position":[[5040,6]]},"1306":{"position":[[5040,6]]},"1329":{"position":[[5040,6]]},"1370":{"position":[[918,6]]}},"keywords":{}}],["renew",{"_index":3741,"title":{},"content":{"448":{"position":[[662,5]]}},"keywords":{}}],["renter",{"_index":2113,"title":{},"content":{"189":{"position":[[430,7]]}},"keywords":{}}],["reorder",{"_index":5052,"title":{},"content":{"922":{"position":[[86,10],[340,8]]}},"keywords":{}}],["reorgan",{"_index":1331,"title":{},"content":{"92":{"position":[[856,15]]},"1292":{"position":[[5080,10]]},"1306":{"position":[[5080,10]]},"1329":{"position":[[5080,10]]}},"keywords":{}}],["repair",{"_index":6179,"title":{},"content":{"1292":{"position":[[5129,6]]},"1306":{"position":[[5129,6]]},"1329":{"position":[[5129,6]]}},"keywords":{}}],["repeat",{"_index":522,"title":{},"content":{"19":{"position":[[415,8]]},"109":{"position":[[523,11]]},"133":{"position":[[53,6]]},"165":{"position":[[1650,6]]},"169":{"position":[[1707,6]]},"228":{"position":[[1418,6]]},"230":{"position":[[1192,6]]},"275":{"position":[[1125,6]]},"295":{"position":[[1201,6]]},"340":{"position":[[567,6]]},"1047":{"position":[[928,6]]},"1055":{"position":[[928,6]]},"1063":{"position":[[928,6]]},"1292":{"position":[[5169,6],[5204,10]]},"1306":{"position":[[5169,6],[5204,10]]},"1329":{"position":[[5169,6],[5204,10]]},"1434":{"position":[[491,7]]},"1443":{"position":[[157,8]]}},"keywords":{}}],["repeatedli",{"_index":782,"title":{},"content":{"49":{"position":[[443,10]]},"115":{"position":[[1370,10]]},"330":{"position":[[578,10]]},"333":{"position":[[483,10]]},"922":{"position":[[1216,10]]}},"keywords":{}}],["repetit",{"_index":393,"title":{},"content":{"13":{"position":[[646,11]]}},"keywords":{}}],["replac",{"_index":1995,"title":{},"content":{"172":{"position":[[198,7]]},"183":{"position":[[1507,7],[1695,7],[2992,7]]},"197":{"position":[[1004,13]]},"325":{"position":[[473,7]]},"429":{"position":[[1147,8]]},"786":{"position":[[212,8]]},"789":{"position":[[974,9]]},"1279":{"position":[[405,9]]},"1292":{"position":[[5249,7]]},"1306":{"position":[[5249,7]]},"1329":{"position":[[5249,7]]},"1370":{"position":[[930,7]]},"1383":{"position":[[95,9]]}},"keywords":{}}],["replay",{"_index":2198,"title":{},"content":{"198":{"position":[[462,7]]},"207":{"position":[[525,6]]},"239":{"position":[[966,6]]},"1438":{"position":[[377,9]]}},"keywords":{}}],["repli",{"_index":6502,"title":{},"content":{"1442":{"position":[[1622,5]]}},"keywords":{}}],["replic",{"_index":568,"title":{"942":{"position":[[18,11]]},"943":{"position":[[30,12]]}},"content":{"21":{"position":[[461,9]]},"100":{"position":[[1268,11]]},"112":{"position":[[679,10]]},"196":{"position":[[372,12]]},"203":{"position":[[453,11]]},"209":{"position":[[1097,11]]},"210":{"position":[[142,10]]},"232":{"position":[[806,11]]},"233":{"position":[[379,12]]},"236":{"position":[[36,11],[2905,12]]},"237":{"position":[[15,11],[263,12],[325,12],[374,11],[1178,10],[1731,11],[2014,11],[2416,11],[2613,11]]},"238":{"position":[[706,12]]},"241":{"position":[[181,12]]},"366":{"position":[[98,11],[121,11]]},"367":{"position":[[113,11],[377,11]]},"370":{"position":[[980,9],[1221,11],[1241,9]]},"424":{"position":[[185,11],[300,11]]},"448":{"position":[[864,11],[937,10]]},"454":{"position":[[490,11]]},"460":{"position":[[304,11]]},"509":{"position":[[431,11],[490,11]]},"517":{"position":[[1468,9],[1600,11],[2020,9],[2761,11],[3905,11]]},"534":{"position":[[1438,9],[1607,11]]},"556":{"position":[[1772,11],[2147,11]]},"573":{"position":[[797,11]]},"574":{"position":[[83,9]]},"585":{"position":[[83,9]]},"611":{"position":[[869,11],[1137,11]]},"631":{"position":[[304,11],[443,11]]},"654":{"position":[[544,11]]},"670":{"position":[[485,11],[600,11]]},"685":{"position":[[424,11]]},"700":{"position":[[252,11]]},"706":{"position":[[252,11]]},"720":{"position":[[756,11]]},"741":{"position":[[367,11]]},"747":{"position":[[762,11],[820,9],[978,11]]},"750":{"position":[[779,11],[802,11]]},"752":{"position":[[357,11],[692,11],[712,11]]},"753":{"position":[[1013,11],[1348,11],[1368,11]]},"757":{"position":[[1210,11]]},"766":{"position":[[779,11],[802,11]]},"767":{"position":[[837,11],[2025,11],[2045,11]]},"770":{"position":[[1210,11]]},"789":{"position":[[1180,11],[1203,11]]},"791":{"position":[[310,11],[697,11],[717,11]]},"792":{"position":[[1116,11],[2017,11],[2037,11]]},"793":{"position":[[984,11],[1371,11],[1391,11]]},"797":{"position":[[1210,11]]},"807":{"position":[[767,11],[790,11]]},"808":{"position":[[930,11],[1317,11],[1337,11]]},"812":{"position":[[1210,11]]},"821":{"position":[[528,12]]},"823":{"position":[[767,11],[790,11]]},"824":{"position":[[908,11],[2139,11],[2159,11]]},"828":{"position":[[1210,11]]},"859":{"position":[[609,11]]},"862":{"position":[[196,11]]},"867":{"position":[[1918,11]]},"874":{"position":[[196,11]]},"885":{"position":[[553,11]]},"891":{"position":[[141,11],[266,11]]},"903":{"position":[[70,11],[124,11],[147,11]]},"904":{"position":[[883,11]]},"907":{"position":[[763,9],[1004,11],[1024,9]]},"912":{"position":[[544,12]]},"915":{"position":[[70,11],[124,11],[147,11]]},"917":{"position":[[361,12]]},"918":{"position":[[1092,11]]},"919":{"position":[[672,11],[713,12],[924,12]]},"922":{"position":[[18,11],[215,11],[496,11],[911,11],[1029,11],[1422,11],[1598,11],[1713,11],[1773,11],[1858,11],[2032,11],[2451,11],[2510,11],[2589,11],[2932,11],[3011,11]]},"923":{"position":[[763,9],[1004,11],[1024,9]]},"930":{"position":[[70,11],[124,11],[147,11]]},"931":{"position":[[855,11],[1138,11]]},"934":{"position":[[763,9],[1004,11],[1024,9]]},"942":{"position":[[18,11],[253,11],[399,11],[551,12],[593,11]]},"943":{"position":[[65,11],[106,11],[314,11]]},"944":{"position":[[9,11],[70,11]]},"945":{"position":[[697,11],[915,11],[982,11],[1047,11],[1083,11]]},"947":{"position":[[1026,11]]},"950":{"position":[[763,9],[1004,11],[1024,9]]},"959":{"position":[[201,9],[308,11]]},"963":{"position":[[224,11],[278,11],[301,11]]},"964":{"position":[[205,11]]},"965":{"position":[[361,12]]},"968":{"position":[[763,9],[1004,11],[1024,9]]},"982":{"position":[[203,9],[310,11]]},"1009":{"position":[[1623,12]]},"1015":{"position":[[366,11]]},"1028":{"position":[[175,11],[313,11]]},"1070":{"position":[[751,11],[860,9],[945,11]]},"1076":{"position":[[598,11],[719,11]]},"1077":{"position":[[62,11]]},"1085":{"position":[[748,9],[878,11],[1161,11],[1260,11],[1319,11]]},"1094":{"position":[[347,9]]},"1107":{"position":[[121,9],[240,11]]},"1113":{"position":[[189,11],[304,11]]},"1133":{"position":[[815,9],[934,11]]},"1292":{"position":[[5706,11]]},"1306":{"position":[[5706,11]]},"1329":{"position":[[5706,11]]},"1379":{"position":[[3879,11]]},"1403":{"position":[[3879,11]]},"1414":{"position":[[3879,11]]}},"keywords":{}}],["replica",{"_index":2216,"title":{},"content":{"203":{"position":[[48,7],[107,7],[139,7],[401,9],[431,7]]},"209":{"position":[[1336,7]]},"767":{"position":[[1336,7],[1630,7]]},"780":{"position":[[431,7]]},"824":{"position":[[1402,7],[1694,7]]},"910":{"position":[[164,7]]},"926":{"position":[[164,7]]},"937":{"position":[[164,7]]},"942":{"position":[[104,7]]},"953":{"position":[[164,7]]},"971":{"position":[[164,7]]},"1196":{"position":[[738,8],[761,8]]},"1292":{"position":[[5286,7],[5328,8]]},"1306":{"position":[[5286,7],[5328,8]]},"1329":{"position":[[5286,7],[5328,8]]}},"keywords":{}}],["replicaand",{"_index":4672,"title":{},"content":{"767":{"position":[[1454,10]]},"824":{"position":[[1518,10]]}},"keywords":{}}],["replicaof",{"_index":4671,"title":{},"content":{"767":{"position":[[1410,9]]},"824":{"position":[[1476,9]]}},"keywords":{}}],["replicas"",{"_index":5851,"title":{},"content":{"1201":{"position":[[537,14]]}},"keywords":{}}],["replicaset",{"_index":4680,"title":{},"content":{"780":{"position":[[381,10]]}},"keywords":{}}],["replicate_ign",{"_index":6189,"title":{},"content":{"1292":{"position":[[5473,13],[5523,13]]},"1306":{"position":[[5473,13],[5523,13]]},"1329":{"position":[[5473,13],[5523,13]]}},"keywords":{}}],["replicate_rew",{"_index":6194,"title":{},"content":{"1292":{"position":[[5579,13]]},"1306":{"position":[[5579,13]]},"1329":{"position":[[5579,13]]}},"keywords":{}}],["replicate_wil",{"_index":6196,"title":{},"content":{"1292":{"position":[[5619,13],[5667,13]]},"1306":{"position":[[5619,13],[5667,13]]},"1329":{"position":[[5619,13],[5667,13]]}},"keywords":{}}],["replicated.next",{"_index":4951,"title":{},"content":{"895":{"position":[[259,16]]}},"keywords":{}}],["replicatedo",{"_index":6185,"title":{},"content":{"1292":{"position":[[5372,11],[5414,11]]},"1306":{"position":[[5372,11],[5414,11]]},"1329":{"position":[[5372,11],[5414,11]]}},"keywords":{}}],["replies)us",{"_index":5181,"title":{},"content":{"1012":{"position":[[189,12]]}},"keywords":{}}],["repo",{"_index":656,"title":{},"content":{"31":{"position":[[314,5]]},"522":{"position":[[499,5]]},"530":{"position":[[499,5]]},"534":{"position":[[1332,5]]}},"keywords":{}}],["report",{"_index":274,"title":{"574":{"position":[[7,8]]},"585":{"position":[[7,8]]},"606":{"position":[[7,8]]},"1087":{"position":[[0,6]]}},"content":{"8":{"position":[[716,8]]},"72":{"position":[[339,6]]},"128":{"position":[[144,9]]},"164":{"position":[[996,9]]},"366":{"position":[[588,9]]},"381":{"position":[[148,6],[184,6],[302,6],[525,6]]},"387":{"position":[[948,6],[1040,6],[1084,6],[1138,8],[1222,8]]},"443":{"position":[[74,8],[164,8],[242,8],[354,8],[435,8]]},"448":{"position":[[876,6],[951,8]]},"517":{"position":[[2359,8]]},"556":{"position":[[1141,7]]},"568":{"position":[[338,8]]},"571":{"position":[[142,9],[388,9]]},"573":{"position":[[606,7],[660,7]]},"574":{"position":[[68,8],[121,7],[197,7],[526,6]]},"577":{"position":[[22,9],[87,8]]},"578":{"position":[[26,7],[312,7],[428,9]]},"580":{"position":[[182,6],[278,8]]},"584":{"position":[[528,7],[582,7],[654,8]]},"585":{"position":[[68,8],[121,7],[187,7]]},"588":{"position":[[82,8]]},"606":{"position":[[63,7],[316,6],[383,7]]},"611":{"position":[[664,7],[718,7]]},"723":{"position":[[403,9]]},"838":{"position":[[98,8]]},"840":{"position":[[1164,7]]},"892":{"position":[[323,6]]},"903":{"position":[[614,9]]},"915":{"position":[[614,9]]},"930":{"position":[[614,9]]},"963":{"position":[[768,9]]},"979":{"position":[[233,7]]},"1080":{"position":[[129,7],[152,7],[174,7],[207,7],[236,7],[264,7],[293,7],[322,7],[350,7],[381,7],[410,7],[438,7],[480,7],[518,7],[555,7],[592,7],[629,7],[660,7],[692,7],[729,7],[778,7]]},"1085":{"position":[[1003,6],[1091,8]]},"1087":{"position":[[51,8],[74,7],[270,6]]}},"keywords":{}}],["report_generation_max_retri",{"_index":3490,"title":{},"content":{"387":{"position":[[917,30]]},"388":{"position":[[339,30]]}},"keywords":{}}],["report_granular",{"_index":5342,"title":{},"content":{"1085":{"position":[[983,19]]},"1086":{"position":[[313,19]]}},"keywords":{}}],["report_wait_timeout",{"_index":3491,"title":{},"content":{"387":{"position":[[1063,20]]},"388":{"position":[[372,20]]}},"keywords":{}}],["reportbi",{"_index":4356,"title":{},"content":{"628":{"position":[[434,8]]}},"keywords":{}}],["reportcampaignscampaign",{"_index":3736,"title":{},"content":{"443":{"position":[[318,23]]}},"keywords":{}}],["reports_start_d",{"_index":3743,"title":{},"content":{"448":{"position":[[797,19]]},"449":{"position":[[351,19]]}},"keywords":{}}],["reportsproject",{"_index":4354,"title":{},"content":{"628":{"position":[[412,14]]}},"keywords":{}}],["reportsuninvo",{"_index":4352,"title":{},"content":{"628":{"position":[[383,17]]}},"keywords":{}}],["reporttim",{"_index":4353,"title":{},"content":{"628":{"position":[[401,10]]}},"keywords":{}}],["repositori",{"_index":1294,"title":{},"content":{"87":{"position":[[731,11]]},"115":{"position":[[1622,10]]},"175":{"position":[[378,10]]},"523":{"position":[[42,12]]},"529":{"position":[[85,12],[646,12]]},"531":{"position":[[42,12]]},"532":{"position":[[42,12]]},"534":{"position":[[297,10],[406,11],[1024,11],[1105,11],[1124,12],[1229,11],[1264,12],[1351,13]]},"535":{"position":[[285,11]]}},"keywords":{}}],["repres",{"_index":527,"title":{},"content":{"19":{"position":[[572,15]]},"34":{"position":[[13,9]]},"41":{"position":[[372,12]]},"49":{"position":[[254,10]]},"60":{"position":[[48,12]]},"67":{"position":[[1049,10]]},"74":{"position":[[517,11]]},"154":{"position":[[792,12]]},"156":{"position":[[488,9]]},"163":{"position":[[191,14]]},"190":{"position":[[149,12],[623,9]]},"192":{"position":[[99,12]]},"207":{"position":[[88,11]]},"210":{"position":[[537,12]]},"239":{"position":[[589,11],[668,10]]},"240":{"position":[[3221,10]]},"245":{"position":[[13,9]]},"296":{"position":[[341,10],[1312,10],[4539,10]]},"321":{"position":[[534,9],[1833,9]]},"326":{"position":[[689,10]]},"366":{"position":[[144,10],[527,10]]},"385":{"position":[[270,9]]},"550":{"position":[[73,9]]},"655":{"position":[[343,12]]},"847":{"position":[[172,11]]},"903":{"position":[[170,10],[553,10]]},"915":{"position":[[170,10],[553,10]]},"922":{"position":[[513,10],[818,10]]},"930":{"position":[[170,10],[553,10]]},"963":{"position":[[324,10],[707,10]]},"1144":{"position":[[1090,9]]},"1146":{"position":[[527,10]]},"1173":{"position":[[539,10]]},"1213":{"position":[[767,9]]},"1215":{"position":[[527,10]]},"1223":{"position":[[539,10]]},"1440":{"position":[[798,10]]},"1459":{"position":[[1674,9]]},"1470":{"position":[[994,9],[1126,9],[1260,9]]},"1475":{"position":[[571,11],[1341,12]]},"1477":{"position":[[1037,11],[3259,11]]}},"keywords":{}}],["represent",{"_index":1650,"title":{},"content":{"121":{"position":[[74,14]]},"122":{"position":[[1010,16]]},"125":{"position":[[383,14]]},"158":{"position":[[480,15]]},"239":{"position":[[1187,15]]},"977":{"position":[[465,14]]},"1036":{"position":[[980,14]]},"1196":{"position":[[637,14]]}},"keywords":{}}],["representedy",{"_index":4813,"title":{},"content":{"847":{"position":[[311,14]]}},"keywords":{}}],["reproduc",{"_index":2541,"title":{},"content":{"236":{"position":[[1612,12]]}},"keywords":{}}],["repsons",{"_index":4814,"title":{},"content":{"847":{"position":[[330,11]]}},"keywords":{}}],["request",{"_index":1155,"title":{},"content":{"82":{"position":[[867,7]]},"154":{"position":[[1972,7]]},"331":{"position":[[580,8]]},"377":{"position":[[719,9],[951,9]]},"397":{"position":[[785,8]]},"430":{"position":[[277,8]]},"488":{"position":[[439,8],[901,7],[1003,7]]},"489":{"position":[[43,7],[527,7],[685,7]]},"491":{"position":[[151,9],[355,8]]},"492":{"position":[[159,8],[248,7]]},"509":{"position":[[181,8],[215,8],[299,8]]},"515":{"position":[[730,7],[781,7],[934,7]]},"517":{"position":[[3225,8],[3277,8],[3472,8],[3509,8]]},"529":{"position":[[375,7],[578,7],[609,7],[628,8],[926,7],[946,7]]},"531":{"position":[[137,7],[339,7],[419,8]]},"540":{"position":[[103,7]]},"556":{"position":[[1621,9]]},"560":{"position":[[135,9],[188,8]]},"584":{"position":[[961,7],[1049,10]]},"595":{"position":[[957,7]]},"631":{"position":[[128,8]]},"635":{"position":[[152,9],[187,7],[262,7]]},"637":{"position":[[420,10]]},"640":{"position":[[91,8]]},"657":{"position":[[521,8]]},"659":{"position":[[596,8],[1058,7],[1160,7]]},"662":{"position":[[43,7],[527,7],[685,7]]},"664":{"position":[[172,9],[376,8],[611,8]]},"665":{"position":[[159,8],[248,7]]},"675":{"position":[[374,7]]},"676":{"position":[[439,8],[901,7],[1003,7]]},"677":{"position":[[43,7],[527,7],[685,7]]},"679":{"position":[[151,9],[355,8]]},"680":{"position":[[159,8],[248,7]]},"685":{"position":[[283,9]]},"691":{"position":[[439,8],[901,7],[1003,7]]},"692":{"position":[[43,7],[527,7],[685,7]]},"694":{"position":[[151,9],[355,8]]},"695":{"position":[[159,8],[248,7]]},"987":{"position":[[203,7]]},"989":{"position":[[918,8]]},"1002":{"position":[[203,7]]},"1004":{"position":[[1001,8]]},"1236":{"position":[[109,8]]},"1239":{"position":[[263,8]]},"1277":{"position":[[859,9],[964,9]]},"1443":{"position":[[350,9]]},"1471":{"position":[[1047,9]]}},"keywords":{}}],["requests."",{"_index":4981,"title":{},"content":{"898":{"position":[[1656,16]]}},"keywords":{}}],["requests_per_minut",{"_index":3922,"title":{},"content":{"509":{"position":[[160,20]]}},"keywords":{}}],["requestsusersgroupsgroup",{"_index":4005,"title":{},"content":{"521":{"position":[[93,24]]}},"keywords":{}}],["requir",{"_index":18,"title":{"1123":{"position":[[11,13]]},"1272":{"position":[[14,11]]}},"content":{"1":{"position":[[237,9]]},"2":{"position":[[104,9]]},"7":{"position":[[329,7]]},"14":{"position":[[195,7],[537,9]]},"19":{"position":[[83,9],[243,7],[445,8]]},"24":{"position":[[140,9]]},"56":{"position":[[988,9],[1221,8],[1467,9],[1610,9],[1710,8],[1893,9]]},"64":{"position":[[147,8],[566,9],[1030,8]]},"68":{"position":[[1383,9]]},"69":{"position":[[379,9],[717,9]]},"70":{"position":[[723,9]]},"72":{"position":[[652,8]]},"80":{"position":[[339,8]]},"81":{"position":[[1344,9],[2163,8]]},"82":{"position":[[23,7],[749,8],[839,8],[3091,8]]},"94":{"position":[[1309,9],[1390,9]]},"97":{"position":[[431,9]]},"107":{"position":[[2578,7]]},"112":{"position":[[24,7]]},"117":{"position":[[516,9]]},"120":{"position":[[328,9],[580,8],[894,9],[973,9],[1053,9],[1853,8],[2040,9]]},"121":{"position":[[955,9]]},"122":{"position":[[133,7],[825,7],[1578,9]]},"154":{"position":[[2037,8]]},"160":{"position":[[650,9],[759,9],[876,8]]},"165":{"position":[[759,12],[1059,9],[1265,8]]},"166":{"position":[[147,8],[365,9]]},"169":{"position":[[138,9]]},"183":{"position":[[1222,9],[1906,9],[3712,9]]},"190":{"position":[[285,8],[329,8],[819,8]]},"192":{"position":[[256,8],[457,8]]},"196":{"position":[[715,11]]},"198":{"position":[[482,7]]},"203":{"position":[[97,7]]},"204":{"position":[[289,11]]},"207":{"position":[[960,9],[1165,8],[1462,12]]},"208":{"position":[[932,7]]},"211":{"position":[[475,8]]},"215":{"position":[[103,9]]},"217":{"position":[[456,8],[920,8]]},"218":{"position":[[218,8],[467,8]]},"221":{"position":[[851,8]]},"225":{"position":[[295,8]]},"233":{"position":[[900,11]]},"236":{"position":[[2799,12],[3768,8]]},"237":{"position":[[904,12],[1269,11]]},"238":{"position":[[600,8]]},"239":{"position":[[2556,7]]},"254":{"position":[[64,8],[501,9],[1569,9]]},"268":{"position":[[854,9],[1274,8]]},"269":{"position":[[479,9],[845,8]]},"270":{"position":[[1446,8]]},"277":{"position":[[139,7]]},"279":{"position":[[434,7],[1149,9]]},"280":{"position":[[868,7],[940,7],[1272,9]]},"281":{"position":[[510,7],[2031,9],[3036,7],[3106,7]]},"286":{"position":[[405,8]]},"290":{"position":[[420,8],[733,8]]},"291":{"position":[[206,8],[395,8]]},"296":{"position":[[64,8],[609,9],[1580,9],[6585,8]]},"301":{"position":[[366,8],[666,8],[739,8]]},"302":{"position":[[206,8],[395,8]]},"307":{"position":[[1424,9],[2292,9]]},"309":{"position":[[1025,8],[1174,7],[2257,9],[2864,9]]},"310":{"position":[[129,7]]},"314":{"position":[[64,8],[1200,9],[2972,8]]},"329":{"position":[[203,8],[1139,7]]},"331":{"position":[[691,12]]},"332":{"position":[[213,8]]},"333":{"position":[[334,7]]},"347":{"position":[[130,8]]},"351":{"position":[[107,8],[172,8],[288,8],[449,8],[504,8]]},"359":{"position":[[161,8],[265,8],[427,8],[482,8]]},"370":{"position":[[38,8],[361,8],[435,9],[522,9],[625,8],[2107,8],[2150,8],[2232,8]]},"373":{"position":[[319,8]]},"377":{"position":[[1203,8],[1285,8],[1401,8],[1576,8],[1653,8],[1798,8]]},"387":{"position":[[181,9],[260,8],[553,8],[670,8],[753,8],[1450,8],[1505,8]]},"392":{"position":[[170,9],[336,9],[629,9],[756,8]]},"397":{"position":[[151,8],[263,8],[364,8],[926,8]]},"402":{"position":[[127,8],[266,8],[335,8],[412,8],[742,8],[888,8]]},"406":{"position":[[295,8]]},"408":{"position":[[109,8],[172,8],[495,8],[659,8],[714,8]]},"417":{"position":[[310,8],[802,8],[993,8],[1122,8],[2165,9],[2348,8]]},"424":{"position":[[103,8],[164,8],[319,8],[482,8],[537,8]]},"429":{"position":[[184,7]]},"432":{"position":[[285,8],[1271,8],[1352,8]]},"436":{"position":[[384,8],[1130,7]]},"438":{"position":[[310,8],[753,9],[873,8],[1020,8],[1171,8],[1337,8],[1485,8],[1637,9],[1980,8]]},"448":{"position":[[181,9],[272,8],[467,8],[595,8],[701,8],[788,8],[1008,9],[1189,8],[1335,8],[1390,8]]},"454":{"position":[[145,8],[241,8],[305,8],[366,8],[671,8],[726,8]]},"460":{"position":[[108,8],[180,8],[323,8],[525,8],[688,8],[743,8]]},"464":{"position":[[7,8]]},"466":{"position":[[110,8],[186,8],[236,8],[395,8],[450,8]]},"475":{"position":[[370,8]]},"478":{"position":[[274,9]]},"482":{"position":[[164,8],[244,8],[346,8],[602,8],[802,8]]},"485":{"position":[[140,8]]},"489":{"position":[[30,7]]},"490":{"position":[[82,11]]},"491":{"position":[[76,8]]},"492":{"position":[[76,8],[264,8]]},"496":{"position":[[138,8],[501,8],[665,8],[747,8]]},"502":{"position":[[160,8],[502,8],[770,8],[1642,8]]},"509":{"position":[[103,8],[151,8],[661,8],[716,8]]},"515":{"position":[[366,13]]},"517":{"position":[[606,8],[730,8],[3924,8],[4096,8],[4151,8]]},"534":{"position":[[181,9],[532,8],[1372,8],[1669,8],[1811,8],[1866,8]]},"540":{"position":[[128,8],[214,8],[286,8],[395,8]]},"545":{"position":[[310,8],[615,8],[1742,8]]},"554":{"position":[[423,12]]},"556":{"position":[[181,9],[560,8],[665,8],[782,8],[896,8],[997,8],[1661,8],[1943,8],[2166,8],[2313,8],[2368,8]]},"564":{"position":[[156,8]]},"565":{"position":[[117,8],[191,8]]},"573":{"position":[[185,9],[447,8],[574,8],[816,8],[1028,8],[1382,8],[1464,8]]},"584":{"position":[[173,9],[821,8],[931,8],[1150,11],[1445,8],[1527,8]]},"593":{"position":[[145,8],[521,8],[642,8]]},"597":{"position":[[333,8]]},"599":{"position":[[274,9]]},"601":{"position":[[146,8],[273,8],[511,8]]},"603":{"position":[[225,8]]},"611":{"position":[[181,9],[275,8],[375,8],[505,8],[1032,8],[1156,8],[1314,8],[1369,8]]},"619":{"position":[[250,8],[348,8],[479,8],[558,8],[691,8],[774,8]]},"625":{"position":[[130,8],[294,8],[349,8]]},"631":{"position":[[103,8],[180,8],[323,8],[622,8],[677,8]]},"635":{"position":[[445,7]]},"637":{"position":[[106,8],[202,8],[283,8],[1119,8],[1230,8]]},"640":{"position":[[344,8]]},"646":{"position":[[498,8],[575,8],[662,9],[822,8]]},"654":{"position":[[219,8],[296,8],[383,9],[563,8],[906,8],[960,8]]},"657":{"position":[[140,8]]},"661":{"position":[[543,8]]},"662":{"position":[[30,7]]},"663":{"position":[[82,11]]},"664":{"position":[[76,8]]},"665":{"position":[[76,8],[264,8]]},"670":{"position":[[143,8],[247,8],[464,8],[619,8],[782,8],[837,8]]},"673":{"position":[[140,8]]},"677":{"position":[[30,7]]},"678":{"position":[[82,11]]},"679":{"position":[[76,8]]},"680":{"position":[[76,8],[264,8]]},"685":{"position":[[300,8],[443,8],[594,8],[649,8]]},"688":{"position":[[140,8]]},"692":{"position":[[30,7]]},"693":{"position":[[82,11]]},"694":{"position":[[76,8]]},"695":{"position":[[76,8],[264,8]]},"700":{"position":[[128,8],[271,8],[433,8],[488,8]]},"706":{"position":[[128,8],[271,8],[432,8],[487,8]]},"712":{"position":[[159,8],[291,8],[466,8],[624,8],[679,8]]},"720":{"position":[[181,9],[775,8],[923,8],[978,8]]},"723":{"position":[[224,7]]},"724":{"position":[[141,8],[235,8]]},"728":{"position":[[174,8],[239,8],[316,8],[436,8],[554,8]]},"735":{"position":[[196,8],[291,8],[358,8],[497,8],[579,8]]},"741":{"position":[[141,8],[243,8],[386,8],[448,8],[609,8],[664,8]]},"747":{"position":[[172,8],[878,8],[1492,8],[1547,8]]},"752":{"position":[[15,13],[579,8]]},"753":{"position":[[1235,8]]},"757":{"position":[[151,8],[222,9],[331,8],[494,8],[2018,8],[2101,8],[2183,8]]},"761":{"position":[[301,8]]},"764":{"position":[[1003,9]]},"770":{"position":[[151,8],[222,9],[331,8],[494,8],[2018,8],[2101,8],[2183,8]]},"774":{"position":[[301,8]]},"777":{"position":[[1003,9]]},"780":{"position":[[501,8]]},"782":{"position":[[185,8],[241,8],[318,8],[585,8],[636,8]]},"790":{"position":[[15,13]]},"791":{"position":[[532,8]]},"793":{"position":[[1206,8]]},"797":{"position":[[151,8],[222,9],[331,8],[494,8],[2025,8],[2108,8],[2190,8]]},"801":{"position":[[307,8]]},"804":{"position":[[1001,9]]},"808":{"position":[[1152,8]]},"812":{"position":[[151,8],[222,9],[331,8],[494,8],[2025,8],[2108,8],[2190,8]]},"816":{"position":[[307,8]]},"819":{"position":[[1001,9]]},"828":{"position":[[151,8],[222,9],[331,8],[494,8],[2025,8],[2108,8],[2190,8]]},"832":{"position":[[307,8]]},"835":{"position":[[1001,9]]},"842":{"position":[[190,8],[437,8],[536,8],[722,8],[836,8],[905,8],[983,8],[1156,8],[1240,8],[1853,8],[1985,8],[2190,8],[2392,8],[3168,8],[3327,8],[3487,8]]},"846":{"position":[[1,8]]},"847":{"position":[[107,7]]},"849":{"position":[[8,8],[375,8],[1915,8],[1985,7]]},"851":{"position":[[167,8],[245,8],[335,8],[434,8],[488,8],[551,8],[713,8],[768,8]]},"856":{"position":[[150,8]]},"859":{"position":[[181,9],[310,8],[408,8],[842,8],[942,8]]},"867":{"position":[[144,8],[213,8],[290,8],[382,8],[2205,8],[2248,8]]},"879":{"position":[[247,8],[554,8],[652,8],[742,8],[1602,8],[1714,8]]},"885":{"position":[[140,8],[241,8],[429,8],[572,8],[744,8],[799,8]]},"891":{"position":[[121,8],[458,8]]},"897":{"position":[[225,8],[388,8],[443,8]]},"904":{"position":[[2295,9]]},"907":{"position":[[144,8],[218,9],[305,9],[408,8],[1512,8],[1555,8],[1637,8],[1705,7],[1797,8]]},"909":{"position":[[1196,8]]},"916":{"position":[[15,13]]},"917":{"position":[[193,8],[1033,8],[1804,9]]},"918":{"position":[[2587,9]]},"919":{"position":[[1558,8]]},"922":{"position":[[1074,8],[2682,8]]},"923":{"position":[[144,8],[218,9],[305,9],[408,8],[1512,8],[1555,8],[1637,8],[1705,7],[1797,8]]},"925":{"position":[[1196,8]]},"931":{"position":[[1957,9]]},"934":{"position":[[144,8],[218,9],[305,9],[408,8],[1512,8],[1555,8],[1637,8]]},"936":{"position":[[1196,8]]},"943":{"position":[[305,8]]},"945":{"position":[[449,9],[714,8]]},"950":{"position":[[144,8],[218,9],[305,9],[408,8],[1512,8],[1555,8],[1637,8]]},"952":{"position":[[1196,8]]},"959":{"position":[[135,8],[327,8],[489,8],[544,8]]},"964":{"position":[[281,8]]},"965":{"position":[[193,8],[1033,8],[1804,9]]},"968":{"position":[[144,8],[218,9],[305,9],[408,8],[1512,8],[1555,8],[1637,8],[1705,7],[1797,8]]},"970":{"position":[[1196,8]]},"982":{"position":[[137,8],[329,8],[491,8],[546,8]]},"988":{"position":[[169,8]]},"991":{"position":[[270,8],[407,8],[559,8],[675,8],[898,8]]},"997":{"position":[[121,8],[215,8],[297,8],[457,8],[512,8]]},"1003":{"position":[[169,8]]},"1008":{"position":[[959,8],[1732,9]]},"1009":{"position":[[270,8],[470,8],[622,8],[738,8],[1754,8],[1809,8]]},"1015":{"position":[[242,8],[385,8],[544,8],[599,8]]},"1021":{"position":[[416,8],[480,8],[823,8],[1349,8],[2122,8]]},"1028":{"position":[[332,8],[494,8],[549,8]]},"1034":{"position":[[198,8],[264,8],[350,8],[407,8],[484,8]]},"1035":{"position":[[102,8],[171,8]]},"1041":{"position":[[15,13]]},"1045":{"position":[[151,8],[225,8],[290,9],[393,8],[1131,8],[1174,8]]},"1047":{"position":[[794,9]]},"1050":{"position":[[930,13]]},"1053":{"position":[[151,8],[225,8],[290,9],[393,8],[1131,8],[1174,8]]},"1055":{"position":[[794,9]]},"1061":{"position":[[151,8],[225,8],[290,9],[393,8],[1131,8],[1174,8]]},"1063":{"position":[[794,9]]},"1067":{"position":[[87,8],[152,8]]},"1070":{"position":[[181,9],[300,8],[403,8],[509,8],[627,8],[770,8],[1105,8],[1160,8]]},"1076":{"position":[[197,8],[340,8],[738,8],[887,8],[942,8]]},"1085":{"position":[[237,9],[360,8],[483,8],[1473,8],[1528,8]]},"1094":{"position":[[135,8],[228,8],[288,8],[394,8],[559,8],[614,8]]},"1101":{"position":[[103,8],[164,8],[228,8],[399,8],[454,8]]},"1107":{"position":[[259,8],[366,8],[514,8],[569,8]]},"1113":{"position":[[110,8],[168,8],[323,8],[588,8],[643,8]]},"1118":{"position":[[1031,9]]},"1125":{"position":[[146,8],[253,8],[323,8],[613,8]]},"1133":{"position":[[167,8],[254,8],[365,8],[476,8],[596,8],[723,8],[953,8],[1162,8],[1310,8],[1365,8],[1457,8]]},"1138":{"position":[[38,8],[437,8],[514,8],[783,8],[1843,8]]},"1144":{"position":[[120,8],[216,8],[324,8],[389,8],[1360,8]]},"1151":{"position":[[193,8],[249,8],[326,8],[832,8],[963,8],[1058,8],[1214,8],[1414,8]]},"1155":{"position":[[14,12]]},"1162":{"position":[[146,8],[253,8],[322,8],[439,8],[577,8],[847,8]]},"1170":{"position":[[120,8],[216,8],[324,8],[389,8],[1285,8]]},"1179":{"position":[[163,8],[288,8],[335,8],[530,8],[585,8],[1113,8]]},"1188":{"position":[[214,8],[283,8],[353,8],[602,8],[680,8],[780,8],[857,8]]},"1196":{"position":[[245,8],[274,8],[997,8]]},"1206":{"position":[[342,8],[506,8],[560,8],[679,8],[802,8],[1028,8],[1168,8]]},"1207":{"position":[[228,8]]},"1213":{"position":[[120,8],[244,8],[1037,8]]},"1220":{"position":[[120,8],[244,8],[962,8]]},"1226":{"position":[[140,8]]},"1230":{"position":[[179,8],[572,8],[1068,9],[1365,8]]},"1239":{"position":[[114,8]]},"1240":{"position":[[141,8]]},"1247":{"position":[[172,9],[350,8],[646,8],[780,8],[1143,8]]},"1251":{"position":[[262,8]]},"1253":{"position":[[185,8],[258,8],[314,8],[391,8],[502,8]]},"1260":{"position":[[149,8],[216,8],[417,8],[512,8],[631,8],[762,8],[962,8]]},"1267":{"position":[[166,8],[247,8],[303,8],[367,8],[534,8]]},"1268":{"position":[[712,8]]},"1269":{"position":[[108,8]]},"1272":{"position":[[14,8]]},"1277":{"position":[[211,8],[326,8],[417,8],[502,8],[1162,8]]},"1282":{"position":[[15,13]]},"1285":{"position":[[134,8],[256,8],[333,8],[389,8],[556,8]]},"1286":{"position":[[2678,8]]},"1292":{"position":[[5756,7]]},"1300":{"position":[[134,8],[256,8],[333,8],[389,8],[556,8]]},"1301":{"position":[[2514,8]]},"1306":{"position":[[5756,7]]},"1310":{"position":[[15,13]]},"1313":{"position":[[247,8],[324,8],[593,8],[1387,8],[1455,7],[1547,8]]},"1324":{"position":[[134,8],[256,8],[333,8],[389,8],[556,8]]},"1325":{"position":[[2678,8]]},"1329":{"position":[[5756,7]]},"1337":{"position":[[247,8],[324,8],[593,8],[1387,8],[1455,7],[1547,8]]},"1348":{"position":[[247,8],[324,8],[593,8],[1387,8]]},"1356":{"position":[[176,8],[385,8],[1420,8],[1530,8]]},"1359":{"position":[[355,8]]},"1362":{"position":[[303,8],[370,8],[444,8],[576,8],[658,8]]},"1366":{"position":[[22,8]]},"1367":{"position":[[195,8]]},"1376":{"position":[[134,8],[256,8],[333,8],[389,8],[593,8]]},"1386":{"position":[[219,8],[309,8],[500,8],[755,8],[842,8],[900,8],[940,8],[994,8],[1039,8],[1083,8],[1183,8]]},"1388":{"position":[[771,12]]},"1392":{"position":[[184,8]]},"1400":{"position":[[134,8],[256,8],[333,8],[389,8],[593,8]]},"1407":{"position":[[15,13]]},"1411":{"position":[[134,8],[256,8],[333,8],[389,8],[593,8]]},"1420":{"position":[[96,8],[157,8],[226,8],[279,8],[338,8],[388,8],[446,8],[503,8],[539,8],[630,8],[730,8]]},"1427":{"position":[[188,8],[265,8],[534,8],[1147,8]]},"1437":{"position":[[516,8]]},"1439":{"position":[[1734,8]]},"1440":{"position":[[1436,7]]},"1444":{"position":[[142,8]]},"1447":{"position":[[550,8]]},"1448":{"position":[[53,8]]},"1461":{"position":[[1656,8]]},"1463":{"position":[[467,9]]},"1464":{"position":[[373,9]]},"1465":{"position":[[551,9]]},"1466":{"position":[[352,9]]},"1467":{"position":[[881,9],[2306,9]]},"1471":{"position":[[410,8]]},"1476":{"position":[[322,9],[1523,9]]},"1477":{"position":[[1342,8],[1538,9],[3508,8],[3858,9]]},"1480":{"position":[[265,9],[514,8],[679,9],[759,9]]}},"keywords":{}}],["require_auth_token",{"_index":3886,"title":{},"content":{"491":{"position":[[85,19]]},"664":{"position":[[85,19]]},"679":{"position":[[85,19]]},"694":{"position":[[85,19]]}},"keywords":{}}],["require_row_f",{"_index":6203,"title":{},"content":{"1292":{"position":[[5793,13]]},"1306":{"position":[[5793,13]]},"1329":{"position":[[5793,13]]}},"keywords":{}}],["required)a",{"_index":5074,"title":{},"content":{"940":{"position":[[53,10]]}},"keywords":{}}],["required/default",{"_index":3884,"title":{},"content":{"491":{"position":[[33,20]]},"492":{"position":[[33,20]]},"664":{"position":[[33,20]]},"665":{"position":[[33,20]]},"679":{"position":[[33,20]]},"680":{"position":[[33,20]]},"694":{"position":[[33,20]]},"695":{"position":[[33,20]]}},"keywords":{}}],["required/default/access_key",{"_index":3894,"title":{},"content":{"496":{"position":[[44,27]]}},"keywords":{}}],["required/default/access_token",{"_index":3943,"title":{},"content":{"517":{"position":[[515,29]]},"685":{"position":[[202,29]]},"959":{"position":[[44,29]]},"1362":{"position":[[206,29]]}},"keywords":{}}],["required/default/account_id",{"_index":4357,"title":{},"content":{"631":{"position":[[44,27]]},"720":{"position":[[224,28]]},"851":{"position":[[44,27]]},"1076":{"position":[[44,27]]}},"keywords":{}}],["required/default/account_sid",{"_index":5404,"title":{},"content":{"1113":{"position":[[44,28]]}},"keywords":{}}],["required/default/additional_table_create_sql",{"_index":5514,"title":{},"content":{"1138":{"position":[[1316,44]]},"1313":{"position":[[860,44]]},"1337":{"position":[[860,44]]},"1348":{"position":[[860,44]]},"1427":{"position":[[587,44]]}},"keywords":{}}],["required/default/address",{"_index":3403,"title":{},"content":{"370":{"position":[[261,24]]},"757":{"position":[[44,24]]},"770":{"position":[[44,24]]},"782":{"position":[[44,24]]},"797":{"position":[[44,24]]},"812":{"position":[[44,24]]},"828":{"position":[[44,24]]},"867":{"position":[[44,24]]},"879":{"position":[[44,24]]},"907":{"position":[[44,24]]},"923":{"position":[[44,24]]},"934":{"position":[[44,24]]},"950":{"position":[[44,24]]},"968":{"position":[[44,24]]},"1021":{"position":[[317,24]]},"1045":{"position":[[44,24]]},"1053":{"position":[[44,24]]},"1061":{"position":[[44,24]]},"1151":{"position":[[44,24]]},"1188":{"position":[[44,24]]},"1239":{"position":[[33,24]]},"1253":{"position":[[44,24]]},"1267":{"position":[[33,24]]}},"keywords":{}}],["required/default/advanc",{"_index":3445,"title":{},"content":{"377":{"position":[[44,25]]},"417":{"position":[[44,25]]},"438":{"position":[[44,25]]},"545":{"position":[[44,25]]}},"keywords":{}}],["required/default/advanced/connection_limit",{"_index":4762,"title":{},"content":{"842":{"position":[[1308,42]]}},"keywords":{}}],["required/default/advancedcollectionset",{"_index":6266,"title":{},"content":{"1356":{"position":[[911,43]]}},"keywords":{}}],["required/default/api_id",{"_index":3260,"title":{},"content":{"351":{"position":[[44,23]]}},"keywords":{}}],["required/default/api_key",{"_index":3272,"title":{},"content":{"359":{"position":[[113,24]]},"424":{"position":[[44,24]]},"466":{"position":[[44,24]]},"509":{"position":[[44,24]]},"706":{"position":[[44,24]]},"1356":{"position":[[44,24]]}},"keywords":{}}],["required/default/api_token",{"_index":4500,"title":{},"content":{"712":{"position":[[44,26]]}},"keywords":{}}],["required/default/apikey",{"_index":4335,"title":{},"content":{"625":{"position":[[44,23]]},"700":{"position":[[44,23]]},"982":{"position":[[44,23]]}},"keywords":{}}],["required/default/auth_token",{"_index":5152,"title":{},"content":{"997":{"position":[[44,27]]}},"keywords":{}}],["required/default/authentication/consumer_key",{"_index":4754,"title":{},"content":{"842":{"position":[[610,44]]}},"keywords":{}}],["required/default/authentication/usernam",{"_index":4759,"title":{},"content":{"842":{"position":[[1060,40]]}},"keywords":{}}],["required/default/aws_access_key_id",{"_index":5763,"title":{},"content":{"1162":{"position":[[44,34]]}},"keywords":{}}],["required/default/aws_key_id",{"_index":5856,"title":{},"content":{"1206":{"position":[[44,27]]}},"keywords":{}}],["required/default/awsaccesskeyid",{"_index":3511,"title":{},"content":{"392":{"position":[[44,31]]},"397":{"position":[[44,31]]},"1125":{"position":[[44,31]]}},"keywords":{}}],["required/default/backfillmod",{"_index":4249,"title":{},"content":{"593":{"position":[[362,29]]}},"keywords":{}}],["required/default/bootstrap_serv",{"_index":3671,"title":{},"content":{"432":{"position":[[44,34]]}},"keywords":{}}],["required/default/branch",{"_index":4041,"title":{},"content":{"534":{"position":[[224,23]]}},"keywords":{}}],["required/default/bucket",{"_index":5716,"title":{},"content":{"1144":{"position":[[44,23]]},"1170":{"position":[[44,23]]},"1213":{"position":[[44,23]]},"1220":{"position":[[44,23]]}},"keywords":{}}],["required/default/client_id",{"_index":4418,"title":{},"content":{"670":{"position":[[44,26]]},"741":{"position":[[44,26]]},"885":{"position":[[44,26]]},"1101":{"position":[[44,26]]}},"keywords":{}}],["required/default/collect",{"_index":5918,"title":{},"content":{"1253":{"position":[[444,27]]}},"keywords":{}}],["required/default/conversion_window_day",{"_index":4114,"title":{},"content":{"556":{"position":[[224,39]]}},"keywords":{}}],["required/default/create_default_subscript",{"_index":5889,"title":{},"content":{"1230":{"position":[[834,44]]}},"keywords":{}}],["required/default/credenti",{"_index":3481,"title":{},"content":{"387":{"position":[[224,28]]},"448":{"position":[[224,28]]},"564":{"position":[[44,28]]},"573":{"position":[[228,28]]},"584":{"position":[[216,28]]},"611":{"position":[[224,28]]},"619":{"position":[[125,28]]},"637":{"position":[[44,28]]},"646":{"position":[[397,28]]},"654":{"position":[[118,28]]},"735":{"position":[[113,28]]},"859":{"position":[[224,28]]},"991":{"position":[[234,28]]},"1009":{"position":[[234,28]]},"1070":{"position":[[224,28]]},"1085":{"position":[[280,28]]},"1230":{"position":[[44,28]]},"1247":{"position":[[215,28]]}},"keywords":{}}],["required/default/credentials/access_token",{"_index":4927,"title":{},"content":{"891":{"position":[[44,41]]}},"keywords":{}}],["required/default/credentials/credenti",{"_index":5464,"title":{},"content":{"1133":{"position":[[44,40]]}},"keywords":{}}],["required/default/cursorfield",{"_index":5173,"title":{},"content":{"1009":{"position":[[1544,28]]}},"keywords":{}}],["required/default/customer_key",{"_index":5357,"title":{},"content":{"1094":{"position":[[44,29]]}},"keywords":{}}],["required/default/databas",{"_index":4683,"title":{},"content":{"782":{"position":[[529,25]]},"1138":{"position":[[261,25]]},"1285":{"position":[[44,25]]},"1300":{"position":[[44,25]]},"1313":{"position":[[44,25]]},"1324":{"position":[[44,25]]},"1337":{"position":[[44,25]]},"1348":{"position":[[44,25]]},"1376":{"position":[[44,25]]},"1400":{"position":[[44,25]]},"1411":{"position":[[44,25]]},"1427":{"position":[[44,25]]}},"keywords":{}}],["required/default/endpoint",{"_index":5825,"title":{},"content":{"1196":{"position":[[44,25]]}},"keywords":{}}],["required/default/environ",{"_index":3758,"title":{},"content":{"454":{"position":[[44,28]]}},"keywords":{}}],["required/default/file_id",{"_index":4135,"title":{},"content":{"565":{"position":[[33,24]]}},"keywords":{}}],["required/default/googlecredenti",{"_index":4247,"title":{},"content":{"593":{"position":[[44,34]]}},"keywords":{}}],["required/default/host",{"_index":3539,"title":{},"content":{"402":{"position":[[44,21]]},"1034":{"position":[[33,21]]},"1386":{"position":[[44,21]]},"1420":{"position":[[44,21]]}},"keywords":{}}],["required/default/index",{"_index":5829,"title":{},"content":{"1196":{"position":[[891,22]]},"1277":{"position":[[44,22]]}},"keywords":{}}],["required/default/join_channel",{"_index":5183,"title":{},"content":{"1015":{"position":[[44,30]]}},"keywords":{}}],["required/default/nam",{"_index":3457,"title":{},"content":{"377":{"position":[[1706,21]]},"482":{"position":[[521,21]]},"540":{"position":[[339,21]]},"646":{"position":[[752,21]]},"842":{"position":[[1906,21]]},"879":{"position":[[1553,21]]},"891":{"position":[[360,21]]}},"keywords":{}}],["required/default/namespac",{"_index":3423,"title":{},"content":{"370":{"position":[[2026,26]]},"757":{"position":[[1933,26]]},"770":{"position":[[1933,26]]},"797":{"position":[[1933,26]]},"812":{"position":[[1933,26]]},"828":{"position":[[1933,26]]},"867":{"position":[[2130,26]]},"907":{"position":[[1433,26]]},"923":{"position":[[1433,26]]},"934":{"position":[[1433,26]]},"950":{"position":[[1433,26]]},"968":{"position":[[1433,26]]},"1045":{"position":[[1052,26]]},"1053":{"position":[[1052,26]]},"1061":{"position":[[1052,26]]},"1277":{"position":[[1026,26]]}},"keywords":{}}],["required/default/organ",{"_index":4050,"title":{},"content":{"540":{"position":[[44,29]]}},"keywords":{}}],["required/default/organization_id",{"_index":4533,"title":{},"content":{"728":{"position":[[33,32]]}},"keywords":{}}],["required/default/path",{"_index":3901,"title":{},"content":{"502":{"position":[[44,21]]},"1144":{"position":[[1279,21]]},"1170":{"position":[[1204,21]]},"1213":{"position":[[956,21]]},"1220":{"position":[[881,21]]}},"keywords":{}}],["required/default/project_id",{"_index":3845,"title":{},"content":{"482":{"position":[[44,27]]},"747":{"position":[[44,27]]},"1179":{"position":[[44,27]]}},"keywords":{}}],["required/default/projectid",{"_index":4286,"title":{},"content":{"601":{"position":[[44,26]]}},"keywords":{}}],["required/default/queue_url",{"_index":3564,"title":{},"content":{"408":{"position":[[44,26]]}},"keywords":{}}],["required/default/relativepath",{"_index":5903,"title":{},"content":{"1240":{"position":[[33,29]]}},"keywords":{}}],["required/default/sheet",{"_index":5913,"title":{},"content":{"1247":{"position":[[1052,22]]}},"keywords":{}}],["required/default/site_api_key",{"_index":3770,"title":{},"content":{"460":{"position":[[44,29]]}},"keywords":{}}],["required/default/sourc",{"_index":6279,"title":{},"content":{"1362":{"position":[[497,23]]}},"keywords":{}}],["required/default/start_d",{"_index":4959,"title":{},"content":{"897":{"position":[[44,27]]},"1028":{"position":[[44,27]]},"1107":{"position":[[44,27]]}},"keywords":{}}],["required/default/stream",{"_index":3263,"title":{},"content":{"351":{"position":[[341,23]]},"359":{"position":[[318,23]]},"387":{"position":[[1355,23]]},"392":{"position":[[705,23]]},"408":{"position":[[548,23]]},"417":{"position":[[2241,23]]},"424":{"position":[[372,23]]},"432":{"position":[[1215,23]]},"438":{"position":[[1920,23]]},"448":{"position":[[1242,23]]},"454":{"position":[[561,23]]},"460":{"position":[[578,23]]},"466":{"position":[[289,23]]},"496":{"position":[[554,23]]},"502":{"position":[[1574,23]]},"509":{"position":[[554,23]]},"517":{"position":[[3977,23]]},"534":{"position":[[1722,23]]},"545":{"position":[[1636,23]]},"556":{"position":[[2219,23]]},"573":{"position":[[1298,23]]},"584":{"position":[[1370,23]]},"611":{"position":[[1209,23]]},"619":{"position":[[611,23]]},"625":{"position":[[183,23]]},"631":{"position":[[514,23]]},"637":{"position":[[1172,23]]},"654":{"position":[[834,23]]},"670":{"position":[[672,23]]},"685":{"position":[[496,23]]},"700":{"position":[[324,23]]},"706":{"position":[[324,23]]},"712":{"position":[[519,23]]},"720":{"position":[[828,23]]},"735":{"position":[[411,23]]},"741":{"position":[[501,23]]},"747":{"position":[[1383,23]]},"851":{"position":[[604,23]]},"859":{"position":[[751,23]]},"885":{"position":[[625,23]]},"897":{"position":[[278,23]]},"959":{"position":[[380,23]]},"982":{"position":[[382,23]]},"991":{"position":[[805,23]]},"997":{"position":[[350,23]]},"1015":{"position":[[438,23]]},"1021":{"position":[[2052,23]]},"1028":{"position":[[385,23]]},"1070":{"position":[[1008,23]]},"1076":{"position":[[791,23]]},"1085":{"position":[[1382,23]]},"1094":{"position":[[447,23]]},"1101":{"position":[[281,23]]},"1107":{"position":[[419,23]]},"1113":{"position":[[481,23]]},"1133":{"position":[[1215,23]]}},"keywords":{}}],["required/default/t",{"_index":3533,"title":{},"content":{"397":{"position":[[847,22]]},"402":{"position":[[671,22]]},"1035":{"position":[[33,22]]},"1125":{"position":[[527,22]]},"1151":{"position":[[1350,22]]},"1162":{"position":[[783,22]]},"1179":{"position":[[1014,22]]},"1188":{"position":[[733,22]]},"1206":{"position":[[855,22]]},"1260":{"position":[[898,22]]},"1269":{"position":[[33,22]]},"1286":{"position":[[2527,22]]},"1301":{"position":[[2363,22]]},"1325":{"position":[[2527,22]]},"1367":{"position":[[44,22]]},"1376":{"position":[[442,22]]},"1386":{"position":[[1136,22]]},"1400":{"position":[[442,22]]},"1411":{"position":[[442,22]]},"1420":{"position":[[683,22]]}},"keywords":{}}],["required/default/token",{"_index":5921,"title":{},"content":{"1260":{"position":[[44,22]]}},"keywords":{}}],["required/default/top",{"_index":4291,"title":{},"content":{"601":{"position":[[433,22]]}},"keywords":{}}],["required/default`/account",{"_index":4745,"title":{},"content":{"842":{"position":[[44,25]]}},"keywords":{}}],["resend",{"_index":2199,"title":{},"content":{"198":{"position":[[530,6]]}},"keywords":{}}],["reserv",{"_index":2473,"title":{"1140":{"position":[[0,8]]},"1192":{"position":[[0,8]]},"1209":{"position":[[0,8]]},"1292":{"position":[[0,8]]},"1306":{"position":[[0,8]]},"1316":{"position":[[0,8]]},"1329":{"position":[[0,8]]},"1340":{"position":[[0,8]]},"1351":{"position":[[0,8]]},"1370":{"position":[[0,8]]},"1379":{"position":[[0,8]]},"1394":{"position":[[0,8]]},"1403":{"position":[[0,8]]},"1414":{"position":[[0,8]]},"1423":{"position":[[0,8]]},"1431":{"position":[[0,8]]}},"content":{"223":{"position":[[896,7]]},"1140":{"position":[[26,8],[122,8],[248,7],[350,8]]},"1192":{"position":[[26,8],[148,8],[469,8]]},"1209":{"position":[[24,8],[121,8],[204,8]]},"1292":{"position":[[21,8],[117,8],[176,8],[279,8]]},"1298":{"position":[[896,7]]},"1306":{"position":[[21,8],[117,8],[176,8],[279,8]]},"1316":{"position":[[26,8],[122,8],[248,7],[350,8]]},"1329":{"position":[[21,8],[117,8],[176,8],[279,8]]},"1340":{"position":[[26,8],[122,8],[248,7],[350,8]]},"1346":{"position":[[896,7]]},"1351":{"position":[[26,8],[122,8],[248,7],[350,8]]},"1370":{"position":[[22,8],[118,8],[240,7],[342,8]]},"1379":{"position":[[25,8],[121,8],[184,8],[289,8]]},"1394":{"position":[[25,8],[147,8],[465,8]]},"1403":{"position":[[25,8],[121,8],[184,8],[289,8]]},"1414":{"position":[[25,8],[121,8],[184,8],[289,8]]},"1423":{"position":[[32,8],[154,8],[471,8]]},"1431":{"position":[[49,8],[145,8],[271,7],[373,8]]}},"keywords":{}}],["reset",{"_index":1952,"title":{},"content":{"164":{"position":[[1980,5]]},"1292":{"position":[[5837,5]]},"1306":{"position":[[5837,5]]},"1329":{"position":[[5837,5]]},"1465":{"position":[[402,5],[466,5],[653,6],[725,5],[908,6],[1122,5],[1188,5],[1353,5],[1454,5],[1505,6],[1620,5]]}},"keywords":{}}],["reshap",{"_index":716,"title":{},"content":{"40":{"position":[[203,8]]},"213":{"position":[[350,7]]}},"keywords":{}}],["resid",{"_index":4623,"title":{},"content":{"757":{"position":[[2002,8]]},"770":{"position":[[2002,8]]},"797":{"position":[[2009,8]]},"812":{"position":[[2009,8]]},"828":{"position":[[2009,8]]},"879":{"position":[[1643,6]]},"1035":{"position":[[156,7]]}},"keywords":{}}],["resign",{"_index":6207,"title":{},"content":{"1292":{"position":[[5882,8]]},"1306":{"position":[[5882,8]]},"1329":{"position":[[5882,8]]}},"keywords":{}}],["resili",{"_index":2795,"title":{},"content":{"267":{"position":[[634,10]]}},"keywords":{}}],["resiz",{"_index":4689,"title":{},"content":{"785":{"position":[[766,6]]}},"keywords":{}}],["resolut",{"_index":4635,"title":{},"content":{"760":{"position":[[741,10]]},"773":{"position":[[741,10]]},"800":{"position":[[741,10]]},"815":{"position":[[741,10]]},"831":{"position":[[741,10]]}},"keywords":{}}],["resolutionsissu",{"_index":4476,"title":{},"content":{"709":{"position":[[322,16]]}},"keywords":{}}],["resolv",{"_index":1285,"title":{},"content":{"87":{"position":[[314,8],[415,8]]},"88":{"position":[[6,9]]},"90":{"position":[[167,8]]},"161":{"position":[[91,8],[1185,8]]},"379":{"position":[[756,7],[877,7]]},"414":{"position":[[838,7]]},"760":{"position":[[315,8]]},"761":{"position":[[280,9]]},"763":{"position":[[302,8]]},"773":{"position":[[315,8]]},"774":{"position":[[280,9]]},"776":{"position":[[302,8]]},"800":{"position":[[315,8]]},"801":{"position":[[286,9]]},"803":{"position":[[308,8]]},"815":{"position":[[315,8]]},"816":{"position":[[286,9]]},"818":{"position":[[308,8]]},"831":{"position":[[315,8]]},"832":{"position":[[286,9]]},"834":{"position":[[308,8]]},"869":{"position":[[955,7]]},"871":{"position":[[132,7]]},"1123":{"position":[[667,7]]}},"keywords":{}}],["resourc",{"_index":397,"title":{"45":{"position":[[0,9]]},"91":{"position":[[21,10]]},"186":{"position":[[0,10]]},"374":{"position":[[15,10]]},"381":{"position":[[15,10]]},"421":{"position":[[15,10]]},"443":{"position":[[15,10]]},"451":{"position":[[15,10]]},"457":{"position":[[15,10]]},"463":{"position":[[15,10]]},"469":{"position":[[15,10]]},"470":{"position":[[0,10]]},"492":{"position":[[0,8]]},"506":{"position":[[15,10]]},"512":{"position":[[15,10]]},"520":{"position":[[15,10]]},"521":{"position":[[0,10]]},"529":{"position":[[15,10]]},"537":{"position":[[15,10]]},"550":{"position":[[15,10]]},"568":{"position":[[15,10]]},"580":{"position":[[15,10]]},"605":{"position":[[15,10]]},"622":{"position":[[15,10]]},"628":{"position":[[15,10]]},"642":{"position":[[18,10]]},"649":{"position":[[15,10]]},"665":{"position":[[0,8]]},"667":{"position":[[15,10]]},"680":{"position":[[0,8]]},"682":{"position":[[15,10]]},"695":{"position":[[0,8]]},"697":{"position":[[15,10]]},"703":{"position":[[15,10]]},"709":{"position":[[15,10]]},"715":{"position":[[15,10]]},"738":{"position":[[15,10]]},"744":{"position":[[15,10]]},"838":{"position":[[15,10]]},"854":{"position":[[15,10]]},"882":{"position":[[15,10]]},"888":{"position":[[15,10]]},"956":{"position":[[15,10]]},"979":{"position":[[15,10]]},"985":{"position":[[15,10]]},"994":{"position":[[15,10]]},"1000":{"position":[[15,10]]},"1012":{"position":[[15,10]]},"1025":{"position":[[15,10]]},"1065":{"position":[[15,10]]},"1073":{"position":[[15,10]]},"1080":{"position":[[15,10]]},"1099":{"position":[[15,10]]},"1104":{"position":[[15,10]]},"1110":{"position":[[15,10]]},"1128":{"position":[[15,10]]}},"content":{"13":{"position":[[761,8],[941,8],[1642,9]]},"45":{"position":[[3,8],[111,8],[175,9],[425,8],[564,10]]},"55":{"position":[[363,10]]},"56":{"position":[[1429,9],[1673,8],[1791,9],[1916,9],[2087,9]]},"80":{"position":[[537,9]]},"81":{"position":[[540,8],[1495,8],[1581,9],[1647,9],[1799,9],[1842,9],[2004,9],[2061,9]]},"88":{"position":[[421,9],[477,9]]},"89":{"position":[[240,9]]},"91":{"position":[[64,10]]},"119":{"position":[[405,9]]},"120":{"position":[[763,10],[843,10],[1816,8],[1938,9],[2063,9]]},"121":{"position":[[346,9],[428,8],[797,9],[1195,9],[1809,8]]},"122":{"position":[[1213,9]]},"123":{"position":[[778,9]]},"144":{"position":[[616,9]]},"173":{"position":[[600,9]]},"176":{"position":[[41,10]]},"185":{"position":[[240,8]]},"206":{"position":[[950,10]]},"208":{"position":[[1191,8],[1856,9]]},"210":{"position":[[565,9]]},"217":{"position":[[1070,9]]},"218":{"position":[[758,8],[907,9]]},"242":{"position":[[127,9],[365,9],[924,9]]},"254":{"position":[[54,9]]},"267":{"position":[[1472,9]]},"270":{"position":[[1101,9]]},"296":{"position":[[54,9]]},"297":{"position":[[147,9]]},"307":{"position":[[1172,9],[1685,9],[2022,9],[2568,9]]},"309":{"position":[[2516,9],[3123,9]]},"314":{"position":[[54,9]]},"344":{"position":[[310,9]]},"351":{"position":[[372,8]]},"359":{"position":[[349,8]]},"360":{"position":[[176,9]]},"371":{"position":[[1293,9]]},"378":{"position":[[322,9]]},"381":{"position":[[20,9],[557,8]]},"387":{"position":[[1397,8]]},"388":{"position":[[431,9]]},"393":{"position":[[327,9]]},"398":{"position":[[328,9]]},"403":{"position":[[406,9]]},"408":{"position":[[579,8]]},"413":{"position":[[353,10]]},"418":{"position":[[388,9]]},"421":{"position":[[20,9],[156,8]]},"424":{"position":[[403,8]]},"425":{"position":[[208,9],[285,9],[370,9],[444,9],[529,9]]},"433":{"position":[[336,9],[732,9]]},"439":{"position":[[615,9]]},"443":{"position":[[20,9],[485,11],[515,8]]},"448":{"position":[[1282,8]]},"449":{"position":[[412,9]]},"451":{"position":[[20,9],[165,8]]},"452":{"position":[[234,9]]},"454":{"position":[[592,8]]},"455":{"position":[[255,9]]},"457":{"position":[[20,9],[169,8]]},"460":{"position":[[609,8]]},"461":{"position":[[256,9]]},"463":{"position":[[20,9],[275,8]]},"466":{"position":[[320,8]]},"467":{"position":[[191,9]]},"469":{"position":[[120,9]]},"470":{"position":[[38,8]]},"473":{"position":[[294,9]]},"475":{"position":[[379,10]]},"497":{"position":[[210,9]]},"503":{"position":[[184,9]]},"506":{"position":[[20,9],[432,8]]},"509":{"position":[[585,8]]},"510":{"position":[[183,9]]},"512":{"position":[[20,9],[145,8]]},"517":{"position":[[4008,8]]},"518":{"position":[[465,9],[547,9],[623,9],[709,9],[825,9],[927,9],[1027,9],[1121,9],[1247,9],[1357,9],[1437,9],[1519,9],[1587,9]]},"520":{"position":[[148,9]]},"521":{"position":[[345,8]]},"527":{"position":[[341,9]]},"529":{"position":[[167,9],[213,9],[724,8],[855,10]]},"534":{"position":[[925,9],[986,9],[1509,9],[1651,10],[1760,8]]},"535":{"position":[[355,9]]},"540":{"position":[[379,8],[457,8]]},"541":{"position":[[172,9]]},"546":{"position":[[1095,9]]},"550":{"position":[[20,9],[45,9],[90,9],[429,8],[527,9]]},"556":{"position":[[2260,8]]},"557":{"position":[[607,9]]},"558":{"position":[[23,9],[102,8]]},"562":{"position":[[168,10]]},"566":{"position":[[170,9]]},"568":{"position":[[20,9],[239,8]]},"573":{"position":[[1334,8]]},"574":{"position":[[46,9]]},"575":{"position":[[314,9],[412,9],[499,9],[603,9],[692,9],[792,9],[877,9],[972,9],[1075,9],[1171,9]]},"580":{"position":[[20,9]]},"584":{"position":[[1406,8]]},"585":{"position":[[46,9]]},"586":{"position":[[336,9],[434,9],[521,9],[625,9],[714,9],[799,9],[894,9],[990,9]]},"594":{"position":[[871,9],[1212,9],[1314,9],[1392,9]]},"597":{"position":[[342,10]]},"605":{"position":[[20,9],[80,8],[387,8]]},"606":{"position":[[20,9]]},"611":{"position":[[1261,8]]},"612":{"position":[[359,9]]},"620":{"position":[[253,9]]},"622":{"position":[[20,9],[393,8]]},"623":{"position":[[100,9]]},"625":{"position":[[214,8]]},"626":{"position":[[148,9]]},"628":{"position":[[20,9],[457,8]]},"631":{"position":[[545,8]]},"632":{"position":[[217,9]]},"638":{"position":[[387,9]]},"642":{"position":[[74,10]]},"646":{"position":[[779,8],[805,9]]},"647":{"position":[[200,9]]},"649":{"position":[[18,8],[143,9],[523,9]]},"654":{"position":[[863,8],[889,9]]},"655":{"position":[[206,9]]},"660":{"position":[[687,8]]},"667":{"position":[[20,9],[242,8]]},"670":{"position":[[703,8]]},"671":{"position":[[250,9]]},"682":{"position":[[20,9],[213,8]]},"685":{"position":[[527,8]]},"686":{"position":[[245,9],[320,9],[400,9],[493,9],[581,9],[678,9],[756,9],[854,9],[952,9],[1030,9],[1101,9]]},"697":{"position":[[20,9],[582,8]]},"700":{"position":[[355,8]]},"701":{"position":[[179,9]]},"703":{"position":[[147,8]]},"706":{"position":[[355,8]]},"707":{"position":[[179,9]]},"709":{"position":[[20,9],[835,8]]},"712":{"position":[[550,8]]},"713":{"position":[[188,9]]},"715":{"position":[[20,9],[204,8]]},"721":{"position":[[318,9]]},"735":{"position":[[435,8]]},"736":{"position":[[177,9],[262,9],[351,9]]},"738":{"position":[[759,8]]},"741":{"position":[[532,8]]},"742":{"position":[[247,9]]},"744":{"position":[[20,9],[149,8]]},"747":{"position":[[1414,8]]},"748":{"position":[[407,9]]},"758":{"position":[[277,9]]},"771":{"position":[[277,9]]},"783":{"position":[[204,9]]},"798":{"position":[[275,9]]},"813":{"position":[[275,9]]},"829":{"position":[[275,9]]},"843":{"position":[[485,9]]},"851":{"position":[[635,8]]},"852":{"position":[[314,9]]},"854":{"position":[[20,9],[98,8]]},"859":{"position":[[789,8],[881,8]]},"860":{"position":[[269,9]]},"867":{"position":[[1451,8],[1549,9]]},"868":{"position":[[455,9]]},"869":{"position":[[1497,8]]},"870":{"position":[[480,8]]},"879":{"position":[[1448,10],[1486,9],[1776,8]]},"880":{"position":[[456,9]]},"882":{"position":[[20,9],[109,8]]},"885":{"position":[[656,8]]},"886":{"position":[[270,9]]},"888":{"position":[[20,9],[164,8]]},"891":{"position":[[387,8],[396,8]]},"892":{"position":[[161,9],[213,9],[261,9],[307,9],[357,9],[415,9],[479,9],[539,9],[599,9]]},"897":{"position":[[309,8]]},"908":{"position":[[321,9]]},"924":{"position":[[321,9]]},"935":{"position":[[321,9]]},"951":{"position":[[321,9]]},"956":{"position":[[20,9],[185,8]]},"959":{"position":[[411,8]]},"960":{"position":[[185,9]]},"969":{"position":[[321,9]]},"979":{"position":[[20,9],[259,8]]},"982":{"position":[[413,8]]},"983":{"position":[[179,9]]},"992":{"position":[[238,9],[296,9]]},"994":{"position":[[20,9],[117,8]]},"997":{"position":[[381,8]]},"998":{"position":[[218,9]]},"1010":{"position":[[422,9],[532,9]]},"1012":{"position":[[20,9],[244,8]]},"1015":{"position":[[469,8]]},"1016":{"position":[[297,9]]},"1022":{"position":[[413,9]]},"1025":{"position":[[391,8]]},"1028":{"position":[[416,8]]},"1029":{"position":[[187,9]]},"1031":{"position":[[429,10]]},"1037":{"position":[[249,9]]},"1046":{"position":[[262,9]]},"1054":{"position":[[262,9]]},"1062":{"position":[[262,9]]},"1065":{"position":[[20,9],[116,8]]},"1070":{"position":[[1052,8]]},"1071":{"position":[[317,9]]},"1073":{"position":[[20,9],[368,8]]},"1076":{"position":[[822,8]]},"1078":{"position":[[204,9],[305,9],[393,9],[469,9],[564,9],[679,9],[755,9],[874,9],[954,9],[1032,9],[1106,9],[1194,9],[1291,9],[1369,9],[1460,9],[1536,9],[1608,9],[1686,9],[1777,9],[1853,9],[1951,9],[2039,9]]},"1080":{"position":[[20,9],[46,8],[825,8]]},"1085":{"position":[[1420,8]]},"1086":{"position":[[372,9]]},"1087":{"position":[[13,9]]},"1094":{"position":[[478,8]]},"1099":{"position":[[20,9],[489,8]]},"1101":{"position":[[312,8]]},"1102":{"position":[[162,9]]},"1104":{"position":[[20,9],[187,8]]},"1105":{"position":[[210,9]]},"1107":{"position":[[450,8]]},"1108":{"position":[[251,9]]},"1110":{"position":[[20,9],[507,8]]},"1113":{"position":[[512,8]]},"1114":{"position":[[237,9]]},"1122":{"position":[[160,9]]},"1126":{"position":[[289,9]]},"1128":{"position":[[20,9],[424,8]]},"1133":{"position":[[1246,8]]},"1134":{"position":[[271,9],[369,9],[473,9],[580,9],[655,9],[741,9],[862,9],[962,9],[1062,9],[1176,9],[1311,9],[1409,9],[1497,9],[1594,9],[1676,9],[1803,9],[1884,9],[1971,9],[2042,9],[2155,9],[2272,9],[2385,9],[2496,9],[2611,9],[2731,9],[2842,9],[2946,9]]},"1138":{"position":[[632,8]]},"1139":{"position":[[1180,9]]},"1145":{"position":[[277,9]]},"1151":{"position":[[617,8]]},"1152":{"position":[[374,9]]},"1162":{"position":[[545,8]]},"1163":{"position":[[311,9]]},"1171":{"position":[[281,9]]},"1178":{"position":[[458,8]]},"1179":{"position":[[444,8]]},"1180":{"position":[[284,9]]},"1182":{"position":[[598,9]]},"1185":{"position":[[235,10]]},"1189":{"position":[[453,9]]},"1191":{"position":[[602,9]]},"1195":{"position":[[667,8]]},"1197":{"position":[[459,9]]},"1201":{"position":[[671,8]]},"1207":{"position":[[542,9]]},"1214":{"position":[[217,9]]},"1221":{"position":[[221,9]]},"1230":{"position":[[1094,8],[1150,8]]},"1231":{"position":[[248,9]]},"1232":{"position":[[486,9],[577,9]]},"1241":{"position":[[56,9]]},"1248":{"position":[[486,9]]},"1254":{"position":[[244,9]]},"1260":{"position":[[331,8]]},"1261":{"position":[[316,9]]},"1262":{"position":[[602,9]]},"1270":{"position":[[204,9]]},"1278":{"position":[[278,9]]},"1287":{"position":[[193,9]]},"1292":{"position":[[5924,8]]},"1302":{"position":[[193,9]]},"1306":{"position":[[5924,8]]},"1313":{"position":[[442,8]]},"1314":{"position":[[196,9]]},"1326":{"position":[[193,9]]},"1329":{"position":[[5924,8]]},"1337":{"position":[[442,8]]},"1338":{"position":[[196,9]]},"1348":{"position":[[442,8]]},"1349":{"position":[[196,9]]},"1357":{"position":[[391,9]]},"1363":{"position":[[275,9]]},"1368":{"position":[[132,9]]},"1377":{"position":[[197,9]]},"1382":{"position":[[300,10]]},"1386":{"position":[[415,8]]},"1387":{"position":[[492,9],[1118,9]]},"1389":{"position":[[600,9]]},"1401":{"position":[[197,9]]},"1412":{"position":[[197,9]]},"1421":{"position":[[479,9]]},"1427":{"position":[[383,8]]},"1428":{"position":[[237,9]]},"1429":{"position":[[782,9]]},"1448":{"position":[[437,8]]},"1449":{"position":[[298,9],[519,8],[571,8],[660,9]]},"1453":{"position":[[1219,8],[1323,8],[1524,8],[1578,8]]},"1472":{"position":[[766,9]]},"1479":{"position":[[141,8]]}},"keywords":{}}],["resource_id",{"_index":1178,"title":{},"content":{"82":{"position":[[2441,12],[4582,12]]}},"keywords":{}}],["resource_trac",{"_index":4794,"title":{},"content":{"843":{"position":[[417,17]]}},"keywords":{}}],["resourceconfig",{"_index":3888,"title":{},"content":{"492":{"position":[[54,14]]},"665":{"position":[[54,14]]},"680":{"position":[[54,14]]},"695":{"position":[[54,14]]}},"keywords":{}}],["resources).budget",{"_index":3734,"title":{},"content":{"443":{"position":[[292,17]]}},"keywords":{}}],["resources).keyword",{"_index":3737,"title":{},"content":{"443":{"position":[[404,18]]}},"keywords":{}}],["resources)ad",{"_index":3731,"title":{},"content":{"443":{"position":[[124,12]]}},"keywords":{}}],["resources)adsad",{"_index":3733,"title":{},"content":{"443":{"position":[[214,15]]}},"keywords":{}}],["resources.y",{"_index":2923,"title":{},"content":{"288":{"position":[[744,13]]},"299":{"position":[[659,13]]}},"keywords":{}}],["resourcesa",{"_index":1301,"title":{},"content":{"88":{"position":[[277,11]]}},"keywords":{}}],["resourcesassigne",{"_index":4023,"title":{},"content":{"529":{"position":[[257,18]]}},"keywords":{}}],["resourcesbatchwriteitem",{"_index":5435,"title":{},"content":{"1122":{"position":[[101,23]]}},"keywords":{}}],["resourcescreatet",{"_index":5436,"title":{},"content":{"1122":{"position":[[132,20]]}},"keywords":{}}],["resourcesdescribestream",{"_index":3526,"title":{},"content":{"395":{"position":[[413,23]]}},"keywords":{}}],["resourcesdescribet",{"_index":3525,"title":{},"content":{"395":{"position":[[383,22]]}},"keywords":{}}],["resourcesgetrecord",{"_index":3507,"title":{},"content":{"390":{"position":[[223,19]]}},"keywords":{}}],["resourcesin",{"_index":4401,"title":{},"content":{"655":{"position":[[370,11]]}},"keywords":{}}],["resourcesscan",{"_index":3527,"title":{},"content":{"395":{"position":[[444,13]]}},"keywords":{}}],["respect",{"_index":1569,"title":{},"content":{"110":{"position":[[398,7]]},"159":{"position":[[591,13]]},"296":{"position":[[2312,10],[7722,10]]},"989":{"position":[[1203,13]]},"1004":{"position":[[1286,13]]},"1186":{"position":[[690,10]]},"1292":{"position":[[5981,7]]},"1306":{"position":[[5981,7]]},"1329":{"position":[[5981,7]]},"1467":{"position":[[1812,10]]},"1471":{"position":[[83,13]]},"1476":{"position":[[97,13]]}},"keywords":{}}],["respond",{"_index":821,"title":{},"content":{"55":{"position":[[576,7]]},"159":{"position":[[664,7]]},"164":{"position":[[1682,7]]},"842":{"position":[[2809,8]]},"1443":{"position":[[236,8],[1199,7]]},"1444":{"position":[[713,8]]}},"keywords":{}}],["respons",{"_index":75,"title":{},"content":{"2":{"position":[[237,11]]},"66":{"position":[[415,9]]},"100":{"position":[[1232,11]]},"105":{"position":[[410,9]]},"107":{"position":[[750,11]]},"108":{"position":[[144,9]]},"506":{"position":[[73,8]]},"517":{"position":[[3577,8]]},"635":{"position":[[170,8]]},"724":{"position":[[581,8]]},"754":{"position":[[747,11]]},"794":{"position":[[953,11]]},"809":{"position":[[953,11]]},"825":{"position":[[789,11]]},"989":{"position":[[1271,8]]},"1004":{"position":[[1354,8]]},"1065":{"position":[[88,9]]},"1067":{"position":[[121,9]]},"1286":{"position":[[1010,11]]},"1301":{"position":[[846,11]]},"1325":{"position":[[1010,11]]},"1434":{"position":[[122,9]]},"1439":{"position":[[1666,10]]},"1443":{"position":[[867,9],[910,9]]},"1444":{"position":[[130,8]]},"1461":{"position":[[4562,11],[4611,11],[4707,10]]}},"keywords":{}}],["responsescompaniescontactsconversationsdiscuss",{"_index":3907,"title":{},"content":{"506":{"position":[[96,49]]}},"keywords":{}}],["rest",{"_index":758,"title":{"844":{"position":[[19,4]]},"845":{"position":[[30,4]]},"847":{"position":[[12,4]]}},"content":{"44":{"position":[[297,5]]},"254":{"position":[[1330,4]]},"373":{"position":[[91,4]]},"432":{"position":[[215,4]]},"464":{"position":[[71,4],[100,4],[200,4]]},"466":{"position":[[75,4],[210,4]]},"548":{"position":[[1283,4]]},"840":{"position":[[617,4],[2258,4]]},"847":{"position":[[253,4]]},"849":{"position":[[675,4],[1448,4],[3398,4]]},"1091":{"position":[[16,4]]},"1097":{"position":[[28,4]]}},"keywords":{}}],["restart",{"_index":856,"title":{},"content":{"56":{"position":[[2295,7]]},"198":{"position":[[549,7]]},"236":{"position":[[680,8],[1179,8]]},"595":{"position":[[1294,7]]},"602":{"position":[[449,9]]},"761":{"position":[[426,8]]},"762":{"position":[[543,8]]},"774":{"position":[[426,8]]},"775":{"position":[[543,8]]},"801":{"position":[[432,8]]},"802":{"position":[[543,8]]},"816":{"position":[[432,8]]},"817":{"position":[[543,8]]},"832":{"position":[[432,8]]},"833":{"position":[[543,8]]},"917":{"position":[[1882,7]]},"922":{"position":[[948,10],[2694,7]]},"942":{"position":[[270,8]]},"965":{"position":[[1882,7]]},"1292":{"position":[[6034,7]]},"1306":{"position":[[6034,7]]},"1329":{"position":[[6034,7]]},"1438":{"position":[[321,10]]},"1439":{"position":[[1066,7]]},"1453":{"position":[[691,8]]}},"keywords":{}}],["restart_lsn",{"_index":5055,"title":{},"content":{"922":{"position":[[791,11],[1053,11],[1113,11],[1313,11],[1405,11]]}},"keywords":{}}],["restart_lsnof",{"_index":5065,"title":{},"content":{"922":{"position":[[2993,13]]}},"keywords":{}}],["restor",{"_index":6216,"title":{},"content":{"1292":{"position":[[6083,7]]},"1306":{"position":[[6083,7]]},"1329":{"position":[[6083,7]]},"1379":{"position":[[3946,7]]},"1403":{"position":[[3946,7]]},"1414":{"position":[[3946,7]]}},"keywords":{}}],["restrict",{"_index":1063,"title":{"72":{"position":[[7,13]]}},"content":{"72":{"position":[[636,12]]},"161":{"position":[[856,11]]},"202":{"position":[[415,10]]},"217":{"position":[[1979,11]]},"309":{"position":[[206,12],[870,11]]},"366":{"position":[[606,10],[938,10]]},"452":{"position":[[138,11]]},"726":{"position":[[180,10]]},"752":{"position":[[499,10]]},"753":{"position":[[1155,10]]},"791":{"position":[[452,10]]},"793":{"position":[[1126,10]]},"808":{"position":[[1072,10]]},"903":{"position":[[632,10],[964,10]]},"912":{"position":[[1403,11]]},"915":{"position":[[632,10],[964,10]]},"917":{"position":[[143,10],[852,10]]},"919":{"position":[[1377,10]]},"930":{"position":[[632,10],[964,10]]},"963":{"position":[[786,10],[1118,10]]},"965":{"position":[[143,10],[852,10]]},"1105":{"position":[[122,11]]},"1140":{"position":[[2689,8]]},"1292":{"position":[[2986,8]]},"1306":{"position":[[2986,8]]},"1316":{"position":[[2689,8]]},"1329":{"position":[[2986,8]]},"1340":{"position":[[2689,8]]},"1351":{"position":[[2689,8]]},"1370":{"position":[[943,8]]},"1379":{"position":[[4004,8]]},"1403":{"position":[[4004,8]]},"1414":{"position":[[4004,8]]},"1431":{"position":[[2712,8]]}},"keywords":{}}],["result",{"_index":394,"title":{"185":{"position":[[12,8]]}},"content":{"13":{"position":[[689,9]]},"32":{"position":[[518,9]]},"40":{"position":[[35,7]]},"56":{"position":[[820,6]]},"61":{"position":[[791,9],[839,7]]},"80":{"position":[[654,9]]},"88":{"position":[[209,9]]},"109":{"position":[[499,7]]},"112":{"position":[[97,7]]},"113":{"position":[[946,8]]},"115":{"position":[[1402,7],[1557,7]]},"124":{"position":[[655,6]]},"132":{"position":[[266,7]]},"197":{"position":[[1530,9]]},"254":{"position":[[3897,7]]},"255":{"position":[[123,9]]},"275":{"position":[[1102,7]]},"295":{"position":[[929,8]]},"296":{"position":[[363,6],[1071,6],[1184,6],[1334,6],[4561,6],[7186,8],[7665,8]]},"316":{"position":[[123,9]]},"321":{"position":[[1381,7],[1687,7]]},"322":{"position":[[1867,7]]},"373":{"position":[[815,7]]},"379":{"position":[[67,6],[340,6],[605,9]]},"480":{"position":[[98,9]]},"483":{"position":[[611,8]]},"488":{"position":[[656,9],[1064,6]]},"517":{"position":[[1641,6],[2802,6],[2957,6]]},"578":{"position":[[320,9]]},"595":{"position":[[1428,6]]},"659":{"position":[[813,9],[1221,6]]},"676":{"position":[[656,9],[1064,6]]},"691":{"position":[[656,9],[1064,6]]},"747":{"position":[[253,7],[334,7]]},"821":{"position":[[144,7],[602,6]]},"909":{"position":[[538,7],[634,7],[1074,7]]},"912":{"position":[[152,7],[618,6]]},"925":{"position":[[538,7],[634,7],[1074,7]]},"936":{"position":[[538,7],[634,7],[1074,7]]},"952":{"position":[[538,7],[634,7],[1074,7]]},"970":{"position":[[538,7],[634,7],[1074,7]]},"1085":{"position":[[919,6]]},"1133":{"position":[[1448,8]]},"1140":{"position":[[2725,6]]},"1157":{"position":[[129,6]]},"1179":{"position":[[1095,6]]},"1182":{"position":[[478,9]]},"1191":{"position":[[480,9]]},"1192":{"position":[[425,6]]},"1196":{"position":[[981,8]]},"1206":{"position":[[933,7],[1109,7]]},"1230":{"position":[[1346,7]]},"1243":{"position":[[857,6]]},"1262":{"position":[[480,9]]},"1316":{"position":[[2725,6]]},"1340":{"position":[[2725,6]]},"1351":{"position":[[2725,6]]},"1379":{"position":[[4051,6]]},"1389":{"position":[[479,9]]},"1394":{"position":[[422,6]]},"1403":{"position":[[4051,6]]},"1414":{"position":[[4051,6]]},"1423":{"position":[[432,6]]},"1431":{"position":[[2748,6]]},"1464":{"position":[[874,6]]},"1467":{"position":[[2921,6]]}},"keywords":{}}],["resum",{"_index":1770,"title":{},"content":{"138":{"position":[[370,7]]},"141":{"position":[[680,7]]},"142":{"position":[[483,7]]},"209":{"position":[[1193,7]]},"785":{"position":[[400,6]]},"922":{"position":[[883,6]]},"1292":{"position":[[3029,6]]},"1306":{"position":[[3029,6]]},"1329":{"position":[[3029,6]]}},"keywords":{}}],["retain",{"_index":1081,"title":{},"content":{"74":{"position":[[378,6]]},"163":{"position":[[295,6]]},"752":{"position":[[892,6]]},"791":{"position":[[897,6]]},"922":{"position":[[1526,6],[2075,7]]},"1292":{"position":[[3077,6]]},"1306":{"position":[[3077,6]]},"1329":{"position":[[3077,6]]}},"keywords":{}}],["retent",{"_index":57,"title":{"764":{"position":[[20,10]]},"777":{"position":[[20,10]]},"804":{"position":[[20,10]]},"819":{"position":[[20,10]]},"835":{"position":[[20,10]]},"922":{"position":[[4,9]]}},"content":{"1":{"position":[[850,10]]},"209":{"position":[[1640,9],[1680,9]]},"323":{"position":[[732,9]]},"757":{"position":[[1714,9],[1776,10]]},"764":{"position":[[43,9],[130,9],[776,9]]},"767":{"position":[[1237,9],[1560,9],[2245,9],[2353,9]]},"770":{"position":[[1714,9],[1776,10]]},"777":{"position":[[43,9],[130,9],[776,9]]},"785":{"position":[[800,9],[892,9]]},"792":{"position":[[1533,9],[2237,9],[2334,9]]},"797":{"position":[[1714,9],[1776,10]]},"804":{"position":[[43,9],[128,9],[774,9]]},"812":{"position":[[1714,9],[1776,10]]},"819":{"position":[[43,9],[128,9],[774,9]]},"824":{"position":[[1303,9],[1624,9],[2359,9],[2465,9]]},"828":{"position":[[1714,9],[1776,10]]},"835":{"position":[[43,9],[128,9],[774,9]]},"879":{"position":[[1202,9],[1234,9],[1320,9]]},"922":{"position":[[448,10],[2200,9]]},"1356":{"position":[[1218,9]]}},"keywords":{}}],["retri",{"_index":2522,"title":{},"content":{"236":{"position":[[1016,8]]},"387":{"position":[[974,7],[992,7]]},"1439":{"position":[[1539,7]]}},"keywords":{}}],["retriev",{"_index":2633,"title":{},"content":{"246":{"position":[[123,8]]},"384":{"position":[[268,8],[311,8]]},"446":{"position":[[80,10]]},"975":{"position":[[281,9]]},"1276":{"position":[[237,9]]},"1434":{"position":[[1362,10],[1685,10]]},"1444":{"position":[[452,9]]},"1471":{"position":[[193,8],[733,8],[888,8]]}},"keywords":{}}],["return",{"_index":1393,"title":{},"content":{"97":{"position":[[461,8],[540,10]]},"105":{"position":[[390,6]]},"107":{"position":[[3546,6]]},"108":{"position":[[112,6]]},"112":{"position":[[273,6]]},"115":{"position":[[736,9]]},"138":{"position":[[703,6]]},"141":{"position":[[821,6]]},"142":{"position":[[658,6]]},"169":{"position":[[1587,6]]},"191":{"position":[[2260,6]]},"192":{"position":[[2287,6]]},"240":{"position":[[2370,6]]},"270":{"position":[[575,7]]},"274":{"position":[[884,7]]},"275":{"position":[[889,6]]},"278":{"position":[[1297,9]]},"281":{"position":[[1487,6]]},"296":{"position":[[6194,6],[6348,6],[6523,6]]},"315":{"position":[[2009,6],[2292,6],[2395,9]]},"340":{"position":[[447,6]]},"341":{"position":[[142,7]]},"491":{"position":[[383,6]]},"560":{"position":[[321,9]]},"664":{"position":[[404,6],[639,6]]},"679":{"position":[[383,6]]},"694":{"position":[[383,6]]},"912":{"position":[[1066,7]]},"1140":{"position":[[2760,6],[2799,9],[2833,7]]},"1276":{"position":[[276,8]]},"1292":{"position":[[3124,6],[3238,9],[3288,7]]},"1306":{"position":[[3124,6],[3238,9],[3288,7]]},"1316":{"position":[[2760,6],[2799,9],[2833,7]]},"1329":{"position":[[3124,6],[3238,9],[3288,7]]},"1340":{"position":[[2760,6],[2799,9],[2833,7]]},"1351":{"position":[[2760,6],[2799,9],[2833,7]]},"1370":{"position":[[957,9]]},"1379":{"position":[[4104,6],[4147,7]]},"1403":{"position":[[4104,6],[4147,7]]},"1414":{"position":[[4104,6],[4147,7]]},"1431":{"position":[[2783,6],[2822,9],[2856,7]]},"1439":{"position":[[1649,9]]}},"keywords":{}}],["returned_sql",{"_index":6078,"title":{},"content":{"1292":{"position":[[3183,13]]},"1306":{"position":[[3183,13]]},"1329":{"position":[[3183,13]]}},"keywords":{}}],["returningsyntax",{"_index":2843,"title":{},"content":{"278":{"position":[[1434,15]]}},"keywords":{}}],["returnmyorg/marketing/lead",{"_index":2820,"title":{},"content":{"274":{"position":[[1178,27]]}},"keywords":{}}],["reus",{"_index":1736,"title":{"133":{"position":[[0,7]]}},"content":{"161":{"position":[[373,6],[570,6]]},"198":{"position":[[421,6]]},"314":{"position":[[2093,5]]},"478":{"position":[[328,7]]},"599":{"position":[[328,7]]},"1292":{"position":[[3339,5]]},"1306":{"position":[[3339,5]]},"1329":{"position":[[3339,5]]}},"keywords":{}}],["reveal",{"_index":1829,"title":{},"content":{"144":{"position":[[402,6]]}},"keywords":{}}],["revers",{"_index":6090,"title":{},"content":{"1292":{"position":[[3386,7]]},"1306":{"position":[[3386,7]]},"1329":{"position":[[3386,7]]}},"keywords":{}}],["revert",{"_index":5075,"title":{},"content":{"942":{"position":[[226,9]]},"1379":{"position":[[4202,6]]},"1403":{"position":[[4202,6]]},"1414":{"position":[[4202,6]]}},"keywords":{}}],["review",{"_index":365,"title":{},"content":{"12":{"position":[[272,6]]},"25":{"position":[[144,6]]},"53":{"position":[[384,8]]},"84":{"position":[[1371,8]]},"218":{"position":[[1846,6]]},"229":{"position":[[217,6],[714,6]]},"230":{"position":[[555,6]]},"259":{"position":[[1349,6],[2895,6]]},"291":{"position":[[1779,6]]},"302":{"position":[[1688,6]]},"529":{"position":[[659,6],[675,7]]},"554":{"position":[[321,8],[407,6]]},"690":{"position":[[307,6]]},"724":{"position":[[313,6]]},"1096":{"position":[[241,7]]}},"keywords":{}}],["revok",{"_index":1158,"title":{},"content":{"82":{"position":[[936,6]]},"242":{"position":[[444,6],[484,6],[555,6]]},"341":{"position":[[345,6],[476,6]]},"1140":{"position":[[2875,6]]},"1292":{"position":[[3443,6]]},"1306":{"position":[[3443,6]]},"1316":{"position":[[2875,6]]},"1329":{"position":[[3443,6]]},"1340":{"position":[[2875,6]]},"1351":{"position":[[2875,6]]},"1379":{"position":[[4249,6]]},"1394":{"position":[[529,6]]},"1403":{"position":[[4249,6]]},"1414":{"position":[[4249,6]]},"1431":{"position":[[2898,6]]}},"keywords":{}}],["revolution",{"_index":2319,"title":{},"content":{"210":{"position":[[2111,13]]}},"keywords":{}}],["rfc",{"_index":3590,"title":{},"content":{"417":{"position":[[387,3]]},"438":{"position":[[387,3]]},"502":{"position":[[847,3]]},"545":{"position":[[387,3]]},"1021":{"position":[[1424,3]]},"1358":{"position":[[365,3]]}},"keywords":{}}],["rfc3339",{"_index":4602,"title":{},"content":{"754":{"position":[[372,7]]},"794":{"position":[[245,7]]},"809":{"position":[[245,7]]},"825":{"position":[[245,7]]}},"keywords":{}}],["rh",{"_index":3003,"title":{},"content":{"296":{"position":[[2048,3]]},"1459":{"position":[[1592,5],[1655,3]]},"1467":{"position":[[122,3],[258,3]]}},"keywords":{}}],["rich",{"_index":1858,"title":{},"content":{"156":{"position":[[319,4]]}},"keywords":{}}],["ride",{"_index":2104,"title":{},"content":{"189":{"position":[[107,4],[212,5]]}},"keywords":{}}],["right",{"_index":2086,"title":{},"content":{"183":{"position":[[4281,6]]},"206":{"position":[[861,5]]},"240":{"position":[[4138,5]]},"296":{"position":[[1969,5],[7543,5]]},"552":{"position":[[165,5]]},"847":{"position":[[362,5]]},"1140":{"position":[[2911,5]]},"1192":{"position":[[552,5]]},"1209":{"position":[[400,5]]},"1292":{"position":[[3494,5]]},"1306":{"position":[[3494,5]]},"1316":{"position":[[2911,5]]},"1329":{"position":[[3494,5]]},"1340":{"position":[[2911,5]]},"1351":{"position":[[2911,5]]},"1370":{"position":[[971,5]]},"1379":{"position":[[4311,5]]},"1394":{"position":[[546,5]]},"1403":{"position":[[4311,5]]},"1414":{"position":[[4311,5]]},"1431":{"position":[[2934,5]]},"1434":{"position":[[270,5],[593,5],[705,5],[783,5],[1282,5],[1526,5],[1911,5],[2012,5]]},"1459":{"position":[[1574,6]]},"1464":{"position":[[85,5],[743,5]]},"1467":{"position":[[43,5]]},"1476":{"position":[[945,5]]}},"keywords":{}}],["ring/cryptokeys/your",{"_index":1169,"title":{},"content":{"82":{"position":[[1829,20],[2515,20],[4153,20],[4656,20]]}},"keywords":{}}],["risk",{"_index":4656,"title":{},"content":{"764":{"position":[[205,4],[1110,5]]},"777":{"position":[[205,4],[1110,5]]},"804":{"position":[[203,4],[1108,5]]},"819":{"position":[[203,4],[1108,5]]},"835":{"position":[[203,4],[1108,5]]}},"keywords":{}}],["rlike",{"_index":6097,"title":{},"content":{"1292":{"position":[[3537,5]]},"1306":{"position":[[3537,5]]},"1329":{"position":[[3537,5]]},"1394":{"position":[[566,5]]}},"keywords":{}}],["robust",{"_index":2187,"title":{},"content":{"197":{"position":[[602,6]]},"232":{"position":[[751,6]]},"237":{"position":[[2602,6]]},"241":{"position":[[232,6]]},"319":{"position":[[185,6]]}},"keywords":{}}],["rocksdb",{"_index":1597,"title":{},"content":{"112":{"position":[[699,7]]}},"keywords":{}}],["rockset",{"_index":3169,"title":{"325":{"position":[[13,8]]},"1353":{"position":[[0,7]]}},"content":{"325":{"position":[[46,8]]},"1120":{"position":[[1669,7]]},"1354":{"position":[[40,7],[116,7],[199,7]]},"1355":{"position":[[113,7],[209,7]]},"1356":{"position":[[69,7],[121,7],[250,7],[537,7],[621,7],[707,7],[861,7],[1320,7],[1355,7],[1466,7]]},"1358":{"position":[[5,7],[76,8],[195,7],[257,7],[460,7],[588,7]]}},"keywords":{}}],["rockset'",{"_index":6274,"title":{},"content":{"1358":{"position":[[708,9]]}},"keywords":{}}],["rockset:dev",{"_index":5429,"title":{},"content":{"1120":{"position":[[1728,11]]},"1357":{"position":[[241,11]]}},"keywords":{}}],["role",{"_index":902,"title":{"943":{"position":[[21,4]]},"944":{"position":[[40,5]]}},"content":{"60":{"position":[[331,5]]},"171":{"position":[[309,5]]},"173":{"position":[[796,5],[868,4],[1210,5]]},"191":{"position":[[771,4],[806,4],[858,4],[892,4],[1268,4],[1637,4],[1718,4],[1864,4],[1906,4],[2009,4],[2067,4],[2103,4]]},"192":{"position":[[1152,5]]},"202":{"position":[[117,4],[269,5]]},"240":{"position":[[732,4],[767,4],[819,4],[853,4],[1229,4],[1598,4],[1679,4],[1825,4],[1867,4],[1970,4],[2028,4],[2064,4],[2271,6]]},"242":{"position":[[479,4],[536,4],[605,4],[695,4],[748,4]]},"288":{"position":[[447,4],[679,4]]},"299":{"position":[[594,4]]},"341":{"position":[[96,6],[131,5],[212,5],[339,5]]},"366":{"position":[[88,4]]},"367":{"position":[[392,4]]},"400":{"position":[[128,5]]},"408":{"position":[[248,4],[349,4]]},"475":{"position":[[215,5]]},"477":{"position":[[144,6],[157,5],[853,5],[993,5]]},"543":{"position":[[285,4]]},"571":{"position":[[648,4]]},"582":{"position":[[261,4]]},"591":{"position":[[134,4]]},"597":{"position":[[178,5]]},"598":{"position":[[107,5],[118,4],[955,4]]},"617":{"position":[[572,4]]},"622":{"position":[[369,5]]},"723":{"position":[[81,4]]},"780":{"position":[[125,4]]},"839":{"position":[[131,4],[266,4]]},"840":{"position":[[865,4],[930,5],[955,4],[1001,5],[1459,4],[1839,4],[1901,5],[2083,4],[2106,5],[2123,4]]},"842":{"position":[[208,4],[230,4],[300,5]]},"848":{"position":[[131,4],[303,4]]},"849":{"position":[[1478,4],[1543,5],[1568,4],[1614,5],[2350,4],[2535,5],[2887,4],[2941,5],[2980,4],[3223,4],[3246,5],[3263,4]]},"903":{"position":[[114,4]]},"915":{"position":[[114,4]]},"917":{"position":[[125,5],[399,5]]},"930":{"position":[[114,4]]},"931":{"position":[[1153,4]]},"943":{"position":[[56,4],[87,4],[150,4],[190,5],[285,5],[350,4],[510,4],[542,4],[570,4],[633,5],[676,5],[754,6],[767,5],[842,5]]},"944":{"position":[[21,4]]},"963":{"position":[[268,4]]},"965":{"position":[[125,5],[399,5]]},"1032":{"position":[[586,4],[638,4],[671,4],[723,4],[757,4],[925,4],[1278,4],[1483,4],[1587,4],[1688,4],[1792,4],[1893,4]]},"1040":{"position":[[679,4]]},"1050":{"position":[[679,4]]},"1058":{"position":[[679,4]]},"1176":{"position":[[203,6]]},"1177":{"position":[[208,5]]},"1185":{"position":[[170,4]]},"1188":{"position":[[532,4],[646,4]]},"1194":{"position":[[82,4],[205,5]]},"1204":{"position":[[132,5]]},"1227":{"position":[[124,4],[249,6]]},"1228":{"position":[[139,4],[264,6]]},"1245":{"position":[[524,4]]},"1251":{"position":[[157,4]]},"1292":{"position":[[3584,4]]},"1306":{"position":[[3584,4]]},"1329":{"position":[[3584,4]]},"1354":{"position":[[108,5]]},"1356":{"position":[[144,4]]},"1379":{"position":[[4364,4]]},"1382":{"position":[[235,4]]},"1383":{"position":[[719,4],[754,4],[806,4],[840,4],[1216,4],[1585,4],[1666,4],[1812,4],[1854,4],[1957,4],[2015,4],[2051,4]]},"1386":{"position":[[591,5],[597,4],[602,4]]},"1403":{"position":[[4364,4]]},"1414":{"position":[[4364,4]]},"1417":{"position":[[342,4]]},"1418":{"position":[[149,6],[193,4]]},"1461":{"position":[[3844,5]]}},"keywords":{}}],["role.click",{"_index":5084,"title":{},"content":{"943":{"position":[[483,10]]}},"keywords":{}}],["role.in",{"_index":5085,"title":{},"content":{"943":{"position":[[498,7]]}},"keywords":{}}],["role=acmeco",{"_index":3222,"title":{},"content":{"341":{"position":[[233,12],[420,12]]}},"keywords":{}}],["role=outsid",{"_index":3225,"title":{},"content":{"341":{"position":[[361,12]]}},"keywords":{}}],["role_id",{"_index":4749,"title":{},"content":{"842":{"position":[[199,8]]},"843":{"position":[[289,8]]}},"keywords":{}}],["role_nam",{"_index":5251,"title":{},"content":{"1042":{"position":[[1065,10]]},"1043":{"position":[[1729,10]]},"1051":{"position":[[1991,10]]},"1059":{"position":[[1784,10]]}},"keywords":{}}],["roleaccess",{"_index":4733,"title":{},"content":{"839":{"position":[[224,10]]},"848":{"position":[[261,10]]}},"keywords":{}}],["rolean",{"_index":4550,"title":{},"content":{"739":{"position":[[81,6]]}},"keywords":{}}],["roles.select",{"_index":5083,"title":{},"content":{"943":{"position":[[430,12]]}},"keywords":{}}],["roles/bigquery.dataeditor",{"_index":5786,"title":{},"content":{"1176":{"position":[[210,25]]},"1177":{"position":[[214,26]]}},"keywords":{}}],["roles/bigquery.jobus",{"_index":5790,"title":{},"content":{"1177":{"position":[[241,23]]}},"keywords":{}}],["roles/datastore.view",{"_index":2922,"title":{},"content":{"288":{"position":[[403,23]]},"591":{"position":[[90,23]]}},"keywords":{}}],["roles/pubsub.editoror",{"_index":5888,"title":{},"content":{"1227":{"position":[[129,21]]},"1228":{"position":[[144,21]]}},"keywords":{}}],["roles/storage.admin",{"_index":1994,"title":{},"content":{"171":{"position":[[289,19]]}},"keywords":{}}],["roles/storage.objectadmin.click",{"_index":5791,"title":{},"content":{"1177":{"position":[[269,31]]}},"keywords":{}}],["roles/storage.objectcreatorfor",{"_index":5883,"title":{},"content":{"1211":{"position":[[168,30]]},"1218":{"position":[[168,30]]}},"keywords":{}}],["rolesavatarsboardsdashboardsfiltersfilt",{"_index":4465,"title":{},"content":{"709":{"position":[[80,41]]}},"keywords":{}}],["rolesgroup",{"_index":5446,"title":{},"content":{"1128":{"position":[[132,10]]}},"keywords":{}}],["rolesto",{"_index":4284,"title":{},"content":{"598":{"position":[[816,7]]}},"keywords":{}}],["roll",{"_index":5296,"title":{},"content":{"1077":{"position":[[702,5]]},"1440":{"position":[[327,4]]},"1471":{"position":[[580,6]]}},"keywords":{}}],["rollback",{"_index":1400,"title":{},"content":{"97":{"position":[[908,8]]},"1140":{"position":[[2947,8]]},"1292":{"position":[[3629,8]]},"1306":{"position":[[3629,8]]},"1316":{"position":[[2947,8]]},"1329":{"position":[[3629,8]]},"1340":{"position":[[2947,8]]},"1351":{"position":[[2947,8]]},"1370":{"position":[[984,8]]},"1379":{"position":[[4415,8]]},"1403":{"position":[[4415,8]]},"1414":{"position":[[4415,8]]},"1431":{"position":[[2970,8]]}},"keywords":{}}],["rollup",{"_index":5650,"title":{},"content":{"1140":{"position":[[2987,6]]},"1292":{"position":[[3679,6]]},"1306":{"position":[[3679,6]]},"1316":{"position":[[2987,6]]},"1329":{"position":[[3679,6]]},"1340":{"position":[[2987,6]]},"1351":{"position":[[2987,6]]},"1379":{"position":[[4471,6]]},"1403":{"position":[[4471,6]]},"1414":{"position":[[4471,6]]},"1431":{"position":[[3010,6]]}},"keywords":{}}],["root",{"_index":1313,"title":{},"content":{"90":{"position":[[409,4]]},"237":{"position":[[2229,4]]},"413":{"position":[[211,4]]},"904":{"position":[[2272,4]]},"917":{"position":[[1781,4]]},"918":{"position":[[2564,4]]},"931":{"position":[[1934,4]]},"945":{"position":[[426,4]]},"965":{"position":[[1781,4]]},"1008":{"position":[[1954,4]]},"1020":{"position":[[1097,6]]},"1123":{"position":[[184,4],[203,4],[545,4]]},"1142":{"position":[[139,4]]},"1149":{"position":[[594,4]]},"1160":{"position":[[139,4]]},"1168":{"position":[[139,4]]},"1201":{"position":[[476,4]]},"1258":{"position":[[188,4]]}},"keywords":{}}],["root/a",{"_index":5196,"title":{},"content":{"1020":{"position":[[1548,8],[1587,8]]}},"keywords":{}}],["root/b",{"_index":5191,"title":{},"content":{"1020":{"position":[[1086,9],[1742,8]]}},"keywords":{}}],["root/b/.a",{"_index":5200,"title":{},"content":{"1020":{"position":[[1703,10]]}},"keywords":{}}],["root/b/.ani",{"_index":5198,"title":{},"content":{"1020":{"position":[[1609,12]]}},"keywords":{}}],["root/b/data.csv",{"_index":5193,"title":{},"content":{"1020":{"position":[[1189,16],[1395,16]]}},"keywords":{}}],["root/c",{"_index":5199,"title":{},"content":{"1020":{"position":[[1650,8],[1682,8],[1866,9]]}},"keywords":{}}],["rotat",{"_index":6104,"title":{},"content":{"1292":{"position":[[3729,6]]},"1306":{"position":[[3729,6]]},"1329":{"position":[[3729,6]]}},"keywords":{}}],["roughli",{"_index":1558,"title":{},"content":{"109":{"position":[[133,7]]},"320":{"position":[[744,7]]},"870":{"position":[[107,7]]},"1391":{"position":[[690,7],[775,7]]}},"keywords":{}}],["round",{"_index":6692,"title":{},"content":{"1475":{"position":[[395,7]]}},"keywords":{}}],["rout",{"_index":6522,"title":{},"content":{"1449":{"position":[[459,5]]}},"keywords":{}}],["routin",{"_index":6108,"title":{},"content":{"1292":{"position":[[3779,7]]},"1306":{"position":[[3779,7]]},"1329":{"position":[[3779,7]]},"1379":{"position":[[4516,7]]},"1403":{"position":[[4516,7]]},"1414":{"position":[[4516,7]]}},"keywords":{}}],["row",{"_index":976,"title":{},"content":{"66":{"position":[[381,4]]},"71":{"position":[[612,4],[695,4]]},"97":{"position":[[446,4]]},"107":{"position":[[3565,4]]},"121":{"position":[[1528,3],[1598,3]]},"138":{"position":[[300,5]]},"141":{"position":[[610,5]]},"142":{"position":[[413,5]]},"154":{"position":[[489,4],[538,5],[643,3],[787,4]]},"218":{"position":[[1193,4]]},"238":{"position":[[1184,5],[1254,4],[1323,4]]},"259":{"position":[[117,4],[1798,4]]},"278":{"position":[[1480,4]]},"308":{"position":[[1055,4],[1128,4]]},"370":{"position":[[807,4]]},"419":{"position":[[2014,4],[2253,3],[2392,3]]},"441":{"position":[[623,4],[862,3],[1001,3]]},"466":{"position":[[142,4]]},"480":{"position":[[108,4],[471,5],[636,4],[730,4],[893,4]]},"504":{"position":[[1643,4],[1882,3],[2021,3]]},"547":{"position":[[2016,4],[2255,3],[2394,3]]},"616":{"position":[[116,3],[190,3]]},"639":{"position":[[1641,4],[1880,3],[2019,3]]},"757":{"position":[[1574,4]]},"761":{"position":[[230,5]]},"770":{"position":[[1574,4]]},"774":{"position":[[230,5]]},"789":{"position":[[116,3],[764,3],[808,3],[836,4]]},"797":{"position":[[1574,4]]},"801":{"position":[[236,5]]},"807":{"position":[[116,3]]},"812":{"position":[[1574,4]]},"816":{"position":[[236,5]]},"821":{"position":[[1115,5],[1351,5],[1437,4],[1569,5]]},"823":{"position":[[116,3]]},"828":{"position":[[1574,4]]},"832":{"position":[[236,5]]},"842":{"position":[[2578,4],[2679,4]]},"867":{"position":[[899,4],[1058,4]]},"879":{"position":[[1056,4]]},"907":{"position":[[590,4]]},"909":{"position":[[427,3],[568,3],[957,3]]},"912":{"position":[[1447,4]]},"923":{"position":[[590,4]]},"925":{"position":[[427,3],[568,3],[957,3]]},"934":{"position":[[590,4]]},"936":{"position":[[427,3],[568,3],[957,3]]},"950":{"position":[[590,4]]},"952":{"position":[[427,3],[568,3],[957,3]]},"968":{"position":[[590,4]]},"970":{"position":[[427,3],[568,3],[957,3]]},"1023":{"position":[[1997,4],[2236,3],[2375,3]]},"1045":{"position":[[575,4]]},"1053":{"position":[[575,4]]},"1061":{"position":[[575,4]]},"1087":{"position":[[101,4],[294,3]]},"1123":{"position":[[422,3],[517,3]]},"1140":{"position":[[3025,3],[3059,4]]},"1144":{"position":[[944,4]]},"1170":{"position":[[906,3],[916,3],[944,4],[954,3],[1036,3],[1098,3]]},"1209":{"position":[[417,3],[429,4]]},"1213":{"position":[[621,4]]},"1220":{"position":[[583,3],[593,3],[621,4],[631,3],[713,3],[775,3]]},"1292":{"position":[[3823,3],[3864,4]]},"1306":{"position":[[3823,3],[3864,4]]},"1316":{"position":[[3025,3],[3059,4]]},"1329":{"position":[[3823,3],[3864,4]]},"1340":{"position":[[3025,3],[3059,4]]},"1351":{"position":[[3025,3],[3059,4]]},"1370":{"position":[[1000,3],[1012,4]]},"1379":{"position":[[4563,3],[4726,4]]},"1391":{"position":[[884,4],[939,4]]},"1394":{"position":[[582,3],[600,4]]},"1403":{"position":[[4563,3],[4726,4]]},"1414":{"position":[[4563,3],[4726,4]]},"1431":{"position":[[3048,3],[3082,4]]}},"keywords":{}}],["row.binari",{"_index":4575,"title":{},"content":{"750":{"position":[[118,10]]},"766":{"position":[[118,10]]}},"keywords":{}}],["row_count",{"_index":6114,"title":{},"content":{"1292":{"position":[[3908,9]]},"1306":{"position":[[3908,9]]},"1329":{"position":[[3908,9]]}},"keywords":{}}],["row_format",{"_index":6119,"title":{},"content":{"1292":{"position":[[3959,10]]},"1306":{"position":[[3959,10]]},"1329":{"position":[[3959,10]]}},"keywords":{}}],["row_id",{"_index":3012,"title":{},"content":{"296":{"position":[[4857,7],[5066,7]]}},"keywords":{}}],["row_numb",{"_index":5653,"title":{},"content":{"1140":{"position":[[3099,10]]},"1292":{"position":[[4007,10]]},"1306":{"position":[[4007,10]]},"1316":{"position":[[3099,10]]},"1329":{"position":[[4007,10]]},"1340":{"position":[[3099,10]]},"1351":{"position":[[3099,10]]},"1431":{"position":[[3122,10]]}},"keywords":{}}],["rowbinlog_row_metadata",{"_index":4667,"title":{},"content":{"767":{"position":[[1085,23]]},"792":{"position":[[1390,23]]},"824":{"position":[[1151,23]]}},"keywords":{}}],["rowcount",{"_index":6349,"title":{},"content":{"1379":{"position":[[4609,8]]},"1403":{"position":[[4609,8]]},"1414":{"position":[[4609,8]]}},"keywords":{}}],["rowguidcol",{"_index":6350,"title":{},"content":{"1379":{"position":[[4669,10]]},"1403":{"position":[[4669,10]]},"1414":{"position":[[4669,10]]}},"keywords":{}}],["rows.monoton",{"_index":3835,"title":{},"content":{"480":{"position":[[809,18]]}},"keywords":{}}],["rpc",{"_index":3197,"title":{},"content":{"330":{"position":[[378,6]]},"1437":{"position":[[1383,4],[1494,3]]},"1442":{"position":[[127,4],[1330,4],[1434,3]]},"1444":{"position":[[501,4]]}},"keywords":{}}],["rsa",{"_index":1241,"title":{},"content":{"83":{"position":[[1486,3],[2341,3]]},"221":{"position":[[1109,3],[1156,3],[1249,3]]},"222":{"position":[[354,3],[401,3],[494,3]]},"223":{"position":[[320,3],[367,3],[460,3],[766,3]]},"224":{"position":[[373,3],[420,3],[513,3]]},"371":{"position":[[405,3],[1260,3]]},"868":{"position":[[373,3]]},"880":{"position":[[374,3]]},"1139":{"position":[[292,3],[1147,3]]},"1272":{"position":[[235,3]]},"1298":{"position":[[320,3],[367,3],[460,3],[766,3]]},"1322":{"position":[[354,3],[401,3],[494,3]]},"1335":{"position":[[354,3],[401,3],[494,3]]},"1346":{"position":[[320,3],[367,3],[460,3],[766,3]]},"1384":{"position":[[383,3],[995,3]]}},"keywords":{}}],["rsa_key.p8",{"_index":6370,"title":{},"content":{"1384":{"position":[[331,10],[391,10]]}},"keywords":{}}],["rsa_key.pub",{"_index":6373,"title":{},"content":{"1384":{"position":[[415,11],[478,11],[1010,11]]}},"keywords":{}}],["rsa_public_key='miibijanbgkqh",{"_index":6377,"title":{},"content":{"1384":{"position":[[662,33]]}},"keywords":{}}],["rsa_public_key_fp",{"_index":6383,"title":{},"content":{"1384":{"position":[[913,21]]}},"keywords":{}}],["rtree",{"_index":6124,"title":{},"content":{"1292":{"position":[[4047,5]]},"1306":{"position":[[4047,5]]},"1329":{"position":[[4047,5]]}},"keywords":{}}],["rule",{"_index":1290,"title":{},"content":{"87":{"position":[[552,4]]},"92":{"position":[[768,5]]},"616":{"position":[[74,5]]},"767":{"position":[[326,4],[350,4]]},"792":{"position":[[639,4],[663,4]]},"793":{"position":[[204,4]]},"824":{"position":[[431,4],[455,4]]},"904":{"position":[[430,4],[454,4]]},"918":{"position":[[639,4],[663,4]]},"919":{"position":[[204,4]]},"1042":{"position":[[1469,6]]},"1043":{"position":[[204,4]]},"1051":{"position":[[430,4],[454,4]]},"1283":{"position":[[240,4]]},"1289":{"position":[[513,4],[537,4]]},"1311":{"position":[[76,4]]},"1321":{"position":[[293,4],[317,4]]},"1334":{"position":[[381,4],[405,4]]},"1373":{"position":[[412,4],[436,4]]},"1374":{"position":[[412,4],[436,4]]},"1379":{"position":[[4781,4]]},"1403":{"position":[[4781,4]]},"1408":{"position":[[742,6]]},"1409":{"position":[[204,4]]},"1414":{"position":[[4781,4]]},"1439":{"position":[[1299,5]]}},"keywords":{}}],["rulethat",{"_index":4596,"title":{},"content":{"753":{"position":[[211,8]]}},"keywords":{}}],["run",{"_index":518,"title":{"977":{"position":[[0,7]]}},"content":{"19":{"position":[[288,3]]},"42":{"position":[[665,7]]},"44":{"position":[[156,7]]},"53":{"position":[[15,7],[265,4]]},"54":{"position":[[562,3]]},"55":{"position":[[19,3]]},"56":{"position":[[2236,4]]},"58":{"position":[[111,3]]},"63":{"position":[[84,3],[987,3]]},"84":{"position":[[1002,3]]},"96":{"position":[[709,3]]},"105":{"position":[[1127,7]]},"107":{"position":[[270,7]]},"121":{"position":[[227,5]]},"169":{"position":[[1095,7],[1481,4]]},"180":{"position":[[263,3]]},"183":{"position":[[4009,3]]},"185":{"position":[[97,7]]},"191":{"position":[[419,3],[2166,3],[2187,3],[2207,4]]},"234":{"position":[[327,7]]},"237":{"position":[[3088,3],[3216,8],[3539,8]]},"240":{"position":[[2160,3]]},"263":{"position":[[176,3],[232,3]]},"264":{"position":[[700,3]]},"267":{"position":[[2014,3]]},"270":{"position":[[276,3],[522,3]]},"274":{"position":[[574,3],[845,3],[1272,7]]},"278":{"position":[[141,3],[413,3]]},"281":{"position":[[665,3]]},"284":{"position":[[85,3],[312,3]]},"292":{"position":[[44,3]]},"303":{"position":[[44,3]]},"309":{"position":[[1298,3],[1400,8]]},"313":{"position":[[3646,7]]},"320":{"position":[[124,7]]},"322":{"position":[[509,7],[788,4],[866,3],[1327,3],[1420,4]]},"323":{"position":[[153,3]]},"326":{"position":[[1228,4]]},"333":{"position":[[502,7]]},"340":{"position":[[341,4]]},"343":{"position":[[587,3],[977,3]]},"364":{"position":[[145,3]]},"366":{"position":[[317,3]]},"379":{"position":[[1019,3]]},"385":{"position":[[500,3]]},"477":{"position":[[198,3]]},"496":{"position":[[374,3]]},"515":{"position":[[1008,7]]},"529":{"position":[[703,4]]},"577":{"position":[[328,3]]},"588":{"position":[[323,3]]},"764":{"position":[[943,7]]},"767":{"position":[[1706,3],[2197,3]]},"777":{"position":[[943,7]]},"792":{"position":[[1646,3],[2189,3]]},"804":{"position":[[941,7]]},"819":{"position":[[941,7]]},"824":{"position":[[1768,3],[2311,3]]},"835":{"position":[[941,7]]},"842":{"position":[[1527,3]]},"859":{"position":[[931,3]]},"864":{"position":[[138,3]]},"876":{"position":[[138,3]]},"903":{"position":[[343,3]]},"904":{"position":[[1307,3]]},"912":{"position":[[1347,3]]},"915":{"position":[[343,3]]},"918":{"position":[[1599,3]]},"919":{"position":[[781,3]]},"922":{"position":[[1359,7],[2851,7],[2959,7]]},"930":{"position":[[343,3]]},"942":{"position":[[619,7]]},"944":{"position":[[115,3]]},"963":{"position":[[497,3]]},"1008":{"position":[[1888,3]]},"1032":{"position":[[1946,3]]},"1138":{"position":[[1423,3]]},"1140":{"position":[[3142,7]]},"1281":{"position":[[360,7]]},"1295":{"position":[[360,7]]},"1313":{"position":[[967,3]]},"1316":{"position":[[3142,7]]},"1319":{"position":[[360,7]]},"1337":{"position":[[967,3]]},"1340":{"position":[[3142,7]]},"1348":{"position":[[967,3]]},"1351":{"position":[[3142,7]]},"1383":{"position":[[492,4]]},"1417":{"position":[[120,7]]},"1427":{"position":[[694,3]]},"1431":{"position":[[3165,7]]},"1437":{"position":[[290,4]]},"1440":{"position":[[103,3]]},"1447":{"position":[[420,3],[738,7]]},"1451":{"position":[[230,4],[448,4],[826,3]]},"1452":{"position":[[40,3],[1766,7]]},"1453":{"position":[[754,3]]},"1461":{"position":[[2233,3]]},"1462":{"position":[[73,7]]},"1475":{"position":[[196,7]]}},"keywords":{}}],["runner",{"_index":3099,"title":{},"content":{"319":{"position":[[72,7]]}},"keywords":{}}],["runtim",{"_index":209,"title":{},"content":{"6":{"position":[[260,8],[567,8]]},"7":{"position":[[231,7]]},"49":{"position":[[234,8]]},"67":{"position":[[763,7],[990,7]]},"81":{"position":[[219,7]]},"82":{"position":[[785,7],[2811,7],[3240,8],[3311,7]]},"95":{"position":[[217,7]]},"113":{"position":[[400,7]]},"115":{"position":[[195,7]]},"158":{"position":[[921,8]]},"163":{"position":[[465,7]]},"175":{"position":[[10,7]]},"296":{"position":[[6712,7]]},"319":{"position":[[666,7],[1081,7]]},"333":{"position":[[10,7]]},"1201":{"position":[[430,7]]},"1434":{"position":[[65,7],[205,7],[432,8],[534,8],[664,7],[714,8],[868,8],[877,7],[1015,8],[1024,7],[1094,8],[1137,7],[1188,8],[1239,7],[1413,7],[1451,7],[1638,8],[1706,8],[1742,7],[1781,7],[1820,7],[1859,7],[2127,8],[2188,8]]},"1439":{"position":[[1755,8]]},"1440":{"position":[[272,7]]},"1442":{"position":[[136,7],[433,7],[1042,7]]},"1443":{"position":[[44,7],[308,7],[456,8],[514,7],[674,7],[941,7]]},"1444":{"position":[[45,7],[227,7],[288,7],[401,7],[841,7]]},"1453":{"position":[[134,7]]}},"keywords":{}}],["runtime'",{"_index":6484,"title":{},"content":{"1438":{"position":[[22,9]]},"1444":{"position":[[801,9]]}},"keywords":{}}],["runtimecp",{"_index":6462,"title":{},"content":{"1434":{"position":[[1986,9]]}},"keywords":{}}],["rw_organization_admin",{"_index":4525,"title":{},"content":{"725":{"position":[[121,21]]},"726":{"position":[[539,21]]}},"keywords":{}}],["s",{"_index":1509,"title":{},"content":{"105":{"position":[[1581,1]]},"236":{"position":[[1365,1]]},"250":{"position":[[1539,1]]},"1452":{"position":[[1451,2],[4371,1],[4444,1]]},"1459":{"position":[[1318,1],[1322,1],[1326,1]]}},"keywords":{}}],["s)aturday",{"_index":6561,"title":{},"content":{"1452":{"position":[[4230,11]]}},"keywords":{}}],["s1",{"_index":1523,"title":{},"content":{"107":{"position":[[830,2]]}},"keywords":{}}],["s2",{"_index":1526,"title":{},"content":{"107":{"position":[[934,2]]}},"keywords":{}}],["s3",{"_index":831,"title":{"172":{"position":[[7,2]]},"187":{"position":[[39,2]]},"190":{"position":[[28,3]]},"298":{"position":[[7,2]]},"301":{"position":[[13,3]]},"412":{"position":[[7,2]]},"1141":{"position":[[20,2]]},"1159":{"position":[[32,2]]},"1167":{"position":[[31,2]]}},"content":{"56":{"position":[[208,3]]},"170":{"position":[[210,2]]},"172":{"position":[[50,2],[211,2],[685,2],[937,2],[1192,2]]},"174":{"position":[[51,3]]},"189":{"position":[[263,2],[1139,3],[1539,2],[1745,2]]},"190":{"position":[[223,2],[301,2],[843,3],[1607,3]]},"192":{"position":[[1384,2]]},"193":{"position":[[89,2],[524,2]]},"207":{"position":[[556,2]]},"239":{"position":[[997,2]]},"299":{"position":[[200,2]]},"300":{"position":[[157,2],[564,2]]},"301":{"position":[[50,2],[303,2],[382,2],[690,3],[817,2],[861,2],[1028,2],[1177,2],[1390,3],[1493,3],[1728,2]]},"302":{"position":[[1247,2]]},"303":{"position":[[97,2]]},"363":{"position":[[564,2]]},"413":{"position":[[59,2],[397,2]]},"416":{"position":[[250,2]]},"417":{"position":[[652,2],[798,3],[989,3],[1105,2],[2045,2]]},"418":{"position":[[549,2]]},"419":{"position":[[30,2],[1098,2]]},"440":{"position":[[1114,2]]},"1120":{"position":[[351,2],[405,2],[539,2],[593,2],[732,2],[786,2]]},"1142":{"position":[[41,2],[122,2],[196,2]]},"1144":{"position":[[713,2],[729,2]]},"1145":{"position":[[104,2]]},"1149":{"position":[[399,2],[577,2],[644,2]]},"1151":{"position":[[806,2],[937,2],[980,2],[1010,2],[1096,2],[1294,3]]},"1154":{"position":[[221,2]]},"1160":{"position":[[41,2],[122,2]]},"1162":{"position":[[281,2]]},"1163":{"position":[[104,2]]},"1168":{"position":[[41,2],[122,2],[196,2]]},"1170":{"position":[[713,2],[729,2]]},"1171":{"position":[[104,2]]},"1203":{"position":[[365,2]]},"1206":{"position":[[119,2],[267,2],[580,2],[598,2],[699,2]]},"1207":{"position":[[192,2]]},"1258":{"position":[[80,2],[171,2],[238,2]]},"1260":{"position":[[434,2],[464,2],[605,2],[736,2],[842,3]]},"1417":{"position":[[157,2],[224,2],[426,2]]},"1420":{"position":[[619,3]]},"1439":{"position":[[539,2],[681,2]]}},"keywords":{}}],["s3://acmeco",{"_index":121,"title":{},"content":{"3":{"position":[[430,11],[694,11]]}},"keywords":{}}],["s3://bucket/example/sessions/country=ca/device=iphone/network=lte/pivot=00/utc_date=2020",{"_index":482,"title":{},"content":{"16":{"position":[[1038,88]]}},"keywords":{}}],["s3:dev",{"_index":839,"title":{},"content":{"56":{"position":[[1177,6]]},"363":{"position":[[613,6]]},"418":{"position":[[89,6]]}},"keywords":{}}],["s3_bucket",{"_index":5862,"title":{},"content":{"1206":{"position":[[569,10]]},"1207":{"position":[[237,10]]}},"keywords":{}}],["s3_prefix",{"_index":5863,"title":{},"content":{"1206":{"position":[[688,10]]}},"keywords":{}}],["s3a",{"_index":3032,"title":{},"content":{"300":{"position":[[324,3]]}},"keywords":{}}],["s3custom",{"_index":3182,"title":{},"content":{"329":{"position":[[472,8]]}},"keywords":{}}],["s[intern",{"_index":1500,"title":{},"content":{"105":{"position":[[1375,10]]}},"keywords":{}}],["saa",{"_index":691,"title":{},"content":{"37":{"position":[[235,4]]},"45":{"position":[[303,4]]},"53":{"position":[[198,4]]},"162":{"position":[[1532,4]]},"218":{"position":[[1548,4]]},"364":{"position":[[294,4]]}},"keywords":{}}],["safe",{"_index":1302,"title":{},"content":{"88":{"position":[[349,4]]},"124":{"position":[[962,6]]},"162":{"position":[[553,6]]},"309":{"position":[[992,6]]},"595":{"position":[[1753,5]]},"640":{"position":[[237,6]]},"762":{"position":[[397,6]]},"775":{"position":[[397,6]]},"802":{"position":[[397,6]]},"817":{"position":[[397,6]]},"833":{"position":[[397,6]]},"840":{"position":[[844,4],[2367,4]]},"849":{"position":[[1319,4],[3507,4]]}},"keywords":{}}],["safeti",{"_index":786,"title":{},"content":{"50":{"position":[[208,6]]},"189":{"position":[[360,7]]},"764":{"position":[[1193,7]]},"777":{"position":[[1193,7]]},"804":{"position":[[1191,7]]},"819":{"position":[[1191,7]]},"835":{"position":[[1191,7]]}},"keywords":{}}],["sail",{"_index":2592,"title":{},"content":{"239":{"position":[[42,7]]}},"keywords":{}}],["sake",{"_index":2600,"title":{},"content":{"239":{"position":[[2811,4]]}},"keywords":{}}],["sale",{"_index":6603,"title":{},"content":{"1461":{"position":[[1447,5],[2382,5]]},"1462":{"position":[[379,5],[483,5]]}},"keywords":{}}],["sales/custom",{"_index":6637,"title":{},"content":{"1462":{"position":[[607,16]]}},"keywords":{}}],["sales/flow.yaml",{"_index":6609,"title":{},"content":{"1461":{"position":[[2023,15],[3579,15],[3781,15]]}},"keywords":{}}],["sales_tax",{"_index":1374,"title":{},"content":{"96":{"position":[[282,11]]}},"keywords":{}}],["salesforc",{"_index":3311,"title":{"973":{"position":[[0,10]]},"975":{"position":[[0,10]]},"976":{"position":[[0,10]]},"984":{"position":[[0,10]]},"987":{"position":[[34,10]]},"999":{"position":[[0,10]]},"1002":{"position":[[34,10]]}},"content":{"363":{"position":[[1976,10],[2054,10]]},"364":{"position":[[2988,10]]},"974":{"position":[[13,10],[75,10],[186,10]]},"975":{"position":[[64,10],[204,10]]},"976":{"position":[[67,10],[138,10],[213,10],[353,10]]},"977":{"position":[[489,10]]},"985":{"position":[[42,10],[355,10],[530,10]]},"987":{"position":[[75,10],[129,10],[223,10],[296,10]]},"988":{"position":[[203,10]]},"989":{"position":[[20,10],[69,10],[505,10],[639,11],[1228,10]]},"990":{"position":[[260,10]]},"991":{"position":[[316,10],[461,10],[727,10],[836,10]]},"992":{"position":[[89,10]]},"1000":{"position":[[42,10],[346,10],[407,10],[507,11],[533,10],[708,10]]},"1002":{"position":[[75,10],[129,10],[223,10],[296,10]]},"1003":{"position":[[203,10]]},"1004":{"position":[[20,10],[69,10],[203,10],[588,10],[722,11],[1311,10]]},"1005":{"position":[[253,10]]},"1006":{"position":[[28,10]]},"1007":{"position":[[50,10]]},"1008":{"position":[[469,10],[535,10],[1362,11],[1405,10]]},"1009":{"position":[[379,10],[524,10],[790,10],[1019,10],[1056,10],[1692,10]]}},"keywords":{}}],["salesforce:dev",{"_index":3374,"title":{},"content":{"364":{"position":[[3067,14]]},"1010":{"position":[[159,14]]}},"keywords":{}}],["same",{"_index":220,"title":{},"content":{"6":{"position":[[437,4]]},"8":{"position":[[243,4],[800,4]]},"11":{"position":[[1868,5]]},"13":{"position":[[1668,5],[1771,4]]},"14":{"position":[[359,4]]},"62":{"position":[[291,4]]},"105":{"position":[[725,4]]},"107":{"position":[[1557,4],[3405,4]]},"109":{"position":[[93,4],[465,4],[494,4]]},"110":{"position":[[1161,4]]},"132":{"position":[[235,4]]},"141":{"position":[[119,4]]},"182":{"position":[[482,5]]},"183":{"position":[[2592,4]]},"203":{"position":[[203,4]]},"207":{"position":[[255,4]]},"219":{"position":[[305,4],[504,4]]},"221":{"position":[[1562,5]]},"224":{"position":[[116,4],[1047,4]]},"247":{"position":[[378,4]]},"267":{"position":[[1613,4]]},"270":{"position":[[46,4],[1741,4]]},"271":{"position":[[275,4]]},"274":{"position":[[1788,4]]},"281":{"position":[[1770,4]]},"296":{"position":[[3399,4]]},"307":{"position":[[165,4]]},"323":{"position":[[1925,4]]},"325":{"position":[[298,4]]},"338":{"position":[[293,4]]},"366":{"position":[[348,4]]},"367":{"position":[[873,4]]},"373":{"position":[[619,4]]},"384":{"position":[[61,4]]},"387":{"position":[[381,4]]},"390":{"position":[[145,4]]},"418":{"position":[[572,4]]},"483":{"position":[[671,4]]},"546":{"position":[[1280,4]]},"595":{"position":[[640,4]]},"602":{"position":[[1060,4]]},"760":{"position":[[759,4]]},"773":{"position":[[759,4]]},"800":{"position":[[759,4]]},"815":{"position":[[759,4]]},"831":{"position":[[759,4]]},"903":{"position":[[374,4]]},"915":{"position":[[374,4]]},"930":{"position":[[374,4]]},"963":{"position":[[528,4]]},"977":{"position":[[273,4],[356,4]]},"1008":{"position":[[328,4],[368,4],[620,4],[818,4]]},"1118":{"position":[[679,4]]},"1136":{"position":[[427,4]]},"1138":{"position":[[1434,4]]},"1147":{"position":[[88,4]]},"1149":{"position":[[487,4]]},"1151":{"position":[[1161,4]]},"1156":{"position":[[590,4],[800,4]]},"1174":{"position":[[88,4]]},"1176":{"position":[[79,4]]},"1179":{"position":[[849,4],[890,4]]},"1216":{"position":[[88,4]]},"1224":{"position":[[88,4]]},"1232":{"position":[[54,4],[288,4]]},"1279":{"position":[[462,4]]},"1313":{"position":[[978,4]]},"1337":{"position":[[978,4]]},"1348":{"position":[[978,4]]},"1391":{"position":[[969,4]]},"1427":{"position":[[705,4]]},"1435":{"position":[[309,4]]},"1437":{"position":[[755,4]]},"1448":{"position":[[692,4]]},"1452":{"position":[[2300,4]]},"1453":{"position":[[1511,4],[1604,4]]},"1459":{"position":[[35,4],[78,4],[249,4]]},"1461":{"position":[[3089,4],[3299,4]]},"1477":{"position":[[588,4]]}},"keywords":{}}],["sampl",{"_index":1023,"title":{"344":{"position":[[0,7]]},"352":{"position":[[0,7]]},"360":{"position":[[0,7]]},"371":{"position":[[0,7]]},"378":{"position":[[0,7]]},"388":{"position":[[0,7]]},"393":{"position":[[0,7]]},"398":{"position":[[0,7]]},"403":{"position":[[0,7]]},"409":{"position":[[0,7]]},"418":{"position":[[0,7]]},"425":{"position":[[0,7]]},"433":{"position":[[0,7]]},"439":{"position":[[0,7]]},"449":{"position":[[0,7]]},"455":{"position":[[0,7]]},"461":{"position":[[0,7]]},"467":{"position":[[0,7]]},"473":{"position":[[0,7]]},"486":{"position":[[5,6]]},"497":{"position":[[0,7]]},"503":{"position":[[0,7]]},"510":{"position":[[0,7]]},"518":{"position":[[0,7]]},"527":{"position":[[0,7]]},"535":{"position":[[0,7]]},"541":{"position":[[0,7]]},"546":{"position":[[0,7]]},"557":{"position":[[0,7]]},"566":{"position":[[0,7]]},"575":{"position":[[0,7]]},"577":{"position":[[5,9]]},"586":{"position":[[0,7]]},"588":{"position":[[5,9]]},"594":{"position":[[0,7]]},"612":{"position":[[0,7]]},"620":{"position":[[0,7]]},"626":{"position":[[0,7]]},"632":{"position":[[0,7]]},"638":{"position":[[0,7]]},"647":{"position":[[0,7]]},"655":{"position":[[0,7]]},"658":{"position":[[5,6]]},"671":{"position":[[0,7]]},"674":{"position":[[5,6]]},"686":{"position":[[0,7]]},"689":{"position":[[5,6]]},"701":{"position":[[0,7]]},"707":{"position":[[0,7]]},"713":{"position":[[0,7]]},"721":{"position":[[0,7]]},"736":{"position":[[0,7]]},"742":{"position":[[0,7]]},"748":{"position":[[0,7]]},"758":{"position":[[0,7]]},"771":{"position":[[0,7]]},"783":{"position":[[0,7]]},"798":{"position":[[0,7]]},"813":{"position":[[0,7]]},"829":{"position":[[0,7]]},"843":{"position":[[0,7]]},"852":{"position":[[0,7]]},"860":{"position":[[0,7]]},"868":{"position":[[0,7]]},"880":{"position":[[0,7]]},"886":{"position":[[0,7]]},"892":{"position":[[0,7]]},"898":{"position":[[0,7]]},"908":{"position":[[0,7]]},"924":{"position":[[0,7]]},"935":{"position":[[0,7]]},"951":{"position":[[0,7]]},"960":{"position":[[0,7]]},"969":{"position":[[0,7]]},"983":{"position":[[0,7]]},"992":{"position":[[0,7]]},"998":{"position":[[0,7]]},"1010":{"position":[[0,7]]},"1016":{"position":[[0,7]]},"1022":{"position":[[0,7]]},"1029":{"position":[[0,7]]},"1037":{"position":[[0,6]]},"1046":{"position":[[0,7]]},"1054":{"position":[[0,7]]},"1062":{"position":[[0,7]]},"1071":{"position":[[0,7]]},"1078":{"position":[[0,7]]},"1086":{"position":[[0,7]]},"1095":{"position":[[0,7]]},"1102":{"position":[[0,7]]},"1108":{"position":[[0,7]]},"1114":{"position":[[0,7]]},"1126":{"position":[[0,7]]},"1134":{"position":[[0,7]]},"1139":{"position":[[0,7]]},"1145":{"position":[[0,7]]},"1152":{"position":[[0,7]]},"1163":{"position":[[0,7]]},"1171":{"position":[[0,7]]},"1180":{"position":[[0,7]]},"1189":{"position":[[0,7]]},"1197":{"position":[[0,7]]},"1207":{"position":[[0,7]]},"1214":{"position":[[0,7]]},"1221":{"position":[[0,7]]},"1231":{"position":[[0,7]]},"1241":{"position":[[0,7]]},"1248":{"position":[[0,7]]},"1254":{"position":[[0,7]]},"1261":{"position":[[0,7]]},"1270":{"position":[[0,7]]},"1278":{"position":[[0,7]]},"1287":{"position":[[0,7]]},"1302":{"position":[[0,7]]},"1314":{"position":[[0,7]]},"1326":{"position":[[0,7]]},"1338":{"position":[[0,7]]},"1349":{"position":[[0,7]]},"1357":{"position":[[0,7]]},"1363":{"position":[[0,7]]},"1368":{"position":[[0,7]]},"1377":{"position":[[0,7]]},"1387":{"position":[[0,7]]},"1401":{"position":[[0,7]]},"1412":{"position":[[0,7]]},"1421":{"position":[[0,7]]},"1428":{"position":[[0,7]]}},"content":{"68":{"position":[[482,6]]},"83":{"position":[[862,7]]},"141":{"position":[[305,6]]},"149":{"position":[[1173,6]]},"177":{"position":[[101,6]]},"182":{"position":[[406,7]]},"183":{"position":[[3451,8]]},"210":{"position":[[1813,6]]},"213":{"position":[[493,6]]},"225":{"position":[[691,7]]},"230":{"position":[[934,6]]},"253":{"position":[[543,7],[595,6],[918,7],[1076,6]]},"254":{"position":[[649,7],[2706,7],[3065,7]]},"295":{"position":[[252,6],[444,6],[1387,6]]},"313":{"position":[[543,7],[595,6],[918,7],[1076,6]]},"314":{"position":[[526,7],[2381,7],[2640,7]]},"350":{"position":[[191,6]]},"358":{"position":[[191,6]]},"369":{"position":[[191,6]]},"370":{"position":[[213,6]]},"375":{"position":[[153,6]]},"376":{"position":[[191,6]]},"386":{"position":[[191,6]]},"388":{"position":[[6,6]]},"391":{"position":[[191,6]]},"396":{"position":[[191,6]]},"401":{"position":[[237,6]]},"407":{"position":[[191,6]]},"416":{"position":[[191,6]]},"419":{"position":[[2766,6]]},"423":{"position":[[191,6]]},"431":{"position":[[191,6]]},"437":{"position":[[191,6]]},"441":{"position":[[1375,6]]},"447":{"position":[[191,6]]},"449":{"position":[[6,6]]},"453":{"position":[[191,6]]},"459":{"position":[[191,6]]},"465":{"position":[[191,6]]},"472":{"position":[[191,6]]},"473":{"position":[[6,6]]},"481":{"position":[[191,6]]},"495":{"position":[[191,6]]},"501":{"position":[[147,6]]},"508":{"position":[[191,6]]},"516":{"position":[[191,6]]},"518":{"position":[[6,6]]},"525":{"position":[[191,6]]},"527":{"position":[[6,6]]},"533":{"position":[[191,6]]},"535":{"position":[[6,6]]},"539":{"position":[[191,6]]},"544":{"position":[[191,6]]},"547":{"position":[[2768,6]]},"548":{"position":[[569,6],[660,6]]},"555":{"position":[[188,6]]},"557":{"position":[[6,6]]},"563":{"position":[[255,6]]},"572":{"position":[[191,6]]},"575":{"position":[[6,6]]},"577":{"position":[[143,8],[403,8],[548,8]]},"583":{"position":[[181,6]]},"584":{"position":[[1294,8]]},"586":{"position":[[6,6]]},"588":{"position":[[138,8],[398,8]]},"592":{"position":[[188,6]]},"610":{"position":[[191,6]]},"612":{"position":[[6,6]]},"618":{"position":[[191,6]]},"624":{"position":[[191,6]]},"630":{"position":[[191,6]]},"636":{"position":[[191,6]]},"639":{"position":[[2393,6]]},"646":{"position":[[191,6]]},"653":{"position":[[191,6]]},"669":{"position":[[191,6]]},"684":{"position":[[191,6]]},"686":{"position":[[5,6]]},"699":{"position":[[191,6]]},"705":{"position":[[191,6]]},"711":{"position":[[191,6]]},"719":{"position":[[186,6]]},"721":{"position":[[6,6]]},"727":{"position":[[191,6]]},"734":{"position":[[191,6]]},"740":{"position":[[191,6]]},"746":{"position":[[191,6]]},"753":{"position":[[644,7]]},"756":{"position":[[191,6]]},"767":{"position":[[790,7]]},"769":{"position":[[191,6]]},"781":{"position":[[188,6]]},"784":{"position":[[447,7]]},"792":{"position":[[1069,7]]},"793":{"position":[[604,7]]},"796":{"position":[[192,6]]},"808":{"position":[[620,7]]},"811":{"position":[[191,6]]},"824":{"position":[[861,7]]},"827":{"position":[[191,6]]},"841":{"position":[[191,6]]},"850":{"position":[[191,6]]},"858":{"position":[[191,6]]},"860":{"position":[[6,6]]},"866":{"position":[[191,6],[621,7]]},"878":{"position":[[191,6],[631,7]]},"884":{"position":[[191,6]]},"890":{"position":[[192,6]]},"896":{"position":[[191,6]]},"904":{"position":[[860,7]]},"906":{"position":[[191,6]]},"918":{"position":[[1069,7]]},"919":{"position":[[604,7]]},"921":{"position":[[191,6]]},"931":{"position":[[624,7]]},"933":{"position":[[191,6]]},"947":{"position":[[600,6]]},"949":{"position":[[191,6]]},"958":{"position":[[191,6]]},"967":{"position":[[191,6]]},"981":{"position":[[191,6]]},"990":{"position":[[191,6]]},"996":{"position":[[191,6]]},"1005":{"position":[[188,6]]},"1010":{"position":[[6,6]]},"1014":{"position":[[191,6]]},"1021":{"position":[[191,6]]},"1023":{"position":[[2749,6]]},"1027":{"position":[[191,6]]},"1033":{"position":[[195,6]]},"1042":{"position":[[1409,7]]},"1043":{"position":[[604,7]]},"1044":{"position":[[191,6]]},"1051":{"position":[[860,7]]},"1052":{"position":[[191,6]]},"1059":{"position":[[624,7]]},"1060":{"position":[[191,6]]},"1069":{"position":[[191,6]]},"1071":{"position":[[6,6]]},"1075":{"position":[[191,6]]},"1084":{"position":[[191,6]]},"1086":{"position":[[6,6]]},"1093":{"position":[[191,6]]},"1100":{"position":[[191,6]]},"1106":{"position":[[192,6]]},"1112":{"position":[[191,6]]},"1124":{"position":[[191,6]]},"1132":{"position":[[192,6]]},"1138":{"position":[[213,6]]},"1154":{"position":[[815,7]]},"1198":{"position":[[536,7]]},"1209":{"position":[[447,6]]},"1231":{"position":[[6,6]]},"1248":{"position":[[6,6]]},"1252":{"position":[[188,6]]},"1255":{"position":[[447,7]]},"1289":{"position":[[1154,7]]},"1303":{"position":[[624,7],[865,7]]},"1322":{"position":[[1373,7]]},"1373":{"position":[[842,7]]},"1374":{"position":[[842,7]]},"1394":{"position":[[611,6]]},"1397":{"position":[[621,7]]},"1398":{"position":[[620,7]]},"1408":{"position":[[682,7]]},"1409":{"position":[[604,7]]}},"keywords":{}}],["sandbox",{"_index":4736,"title":{"1083":{"position":[[0,7]]}},"content":{"840":{"position":[[383,8]]},"842":{"position":[[175,7]]},"849":{"position":[[326,8]]},"851":{"position":[[152,7]]},"885":{"position":[[262,7],[307,7]]},"991":{"position":[[696,7],[738,8]]},"1009":{"position":[[759,7],[801,8]]},"1083":{"position":[[24,7],[179,7],[303,8]]},"1085":{"position":[[91,7],[467,8],[581,7]]},"1086":{"position":[[64,7]]}},"keywords":{}}],["sandbox_access_token",{"_index":5338,"title":{},"content":{"1085":{"position":[[419,20]]},"1086":{"position":[[224,20]]}},"keywords":{}}],["sandboxadvertis",{"_index":5334,"title":{},"content":{"1080":{"position":[[66,18]]}},"keywords":{}}],["sandboxtiktok",{"_index":5336,"title":{},"content":{"1081":{"position":[[68,13]]}},"keywords":{}}],["saniti",{"_index":4619,"title":{},"content":{"757":{"position":[[1724,6],[1787,6]]},"770":{"position":[[1724,6],[1787,6]]},"797":{"position":[[1724,6],[1787,6]]},"812":{"position":[[1724,6],[1787,6]]},"828":{"position":[[1724,6],[1787,6]]}},"keywords":{}}],["sasl",{"_index":2640,"title":{},"content":{"247":{"position":[[229,6]]},"429":{"position":[[1050,4]]},"432":{"position":[[465,5],[551,4],[616,4],[631,4]]},"433":{"position":[[34,7]]},"1118":{"position":[[441,6]]}},"keywords":{}}],["sasl.mechanism=plain",{"_index":2680,"title":{},"content":{"250":{"position":[[1327,20]]}},"keywords":{}}],["sasl.password="your_estuary_refresh_token"",{"_index":2682,"title":{},"content":{"250":{"position":[[1387,52]]}},"keywords":{}}],["sasl.username="{}"",{"_index":2681,"title":{},"content":{"250":{"position":[[1353,28]]}},"keywords":{}}],["sasl/plain",{"_index":3659,"title":{},"content":{"429":{"position":[[504,11]]}},"keywords":{}}],["sasl/scram",{"_index":3657,"title":{},"content":{"429":{"position":[[460,10],[480,10],[801,10]]}},"keywords":{}}],["sasl_mechan",{"_index":2651,"title":{},"content":{"250":{"position":[[342,17]]}},"keywords":{}}],["sasl_mechanism=conf['sasl_mechan",{"_index":2662,"title":{},"content":{"250":{"position":[[676,38]]}},"keywords":{}}],["sasl_plain_password",{"_index":2653,"title":{},"content":{"250":{"position":[[398,22]]}},"keywords":{}}],["sasl_plain_password=conf['sasl_plain_password",{"_index":2664,"title":{},"content":{"250":{"position":[[764,48]]}},"keywords":{}}],["sasl_plain_usernam",{"_index":2652,"title":{},"content":{"250":{"position":[[369,22]]}},"keywords":{}}],["sasl_plain_username=conf['sasl_plain_usernam",{"_index":2663,"title":{},"content":{"250":{"position":[[715,48]]}},"keywords":{}}],["sasl_ssl",{"_index":2650,"title":{},"content":{"250":{"position":[[330,11]]}},"keywords":{}}],["sasl_sslsasl",{"_index":2638,"title":{},"content":{"247":{"position":[[185,12]]}},"keywords":{}}],["satisfaction_r",{"_index":5491,"title":{},"content":{"1134":{"position":[[1694,20]]}},"keywords":{}}],["satisfi",{"_index":2098,"title":{},"content":{"185":{"position":[[204,10]]},"217":{"position":[[2121,9]]},"264":{"position":[[811,9]]},"275":{"position":[[1083,9]]},"290":{"position":[[1587,9]]},"479":{"position":[[845,9]]}},"keywords":{}}],["saturday",{"_index":6539,"title":{},"content":{"1452":{"position":[[1507,9]]}},"keywords":{}}],["saturday.su",{"_index":6564,"title":{},"content":{"1452":{"position":[[4427,11]]}},"keywords":{}}],["save",{"_index":1113,"title":{},"content":{"80":{"position":[[632,5]]},"182":{"position":[[304,4]]},"184":{"position":[[964,4]]},"190":{"position":[[1871,4]]},"192":{"position":[[2233,4]]},"209":{"position":[[68,5],[111,4]]},"217":{"position":[[2161,4]]},"218":{"position":[[2087,4]]},"228":{"position":[[1487,4]]},"230":{"position":[[1261,4]]},"236":{"position":[[259,4]]},"239":{"position":[[2914,4]]},"240":{"position":[[4110,4]]},"259":{"position":[[1455,4],[3001,4]]},"290":{"position":[[1640,4]]},"291":{"position":[[1897,4]]},"296":{"position":[[7506,5]]},"301":{"position":[[1614,4]]},"302":{"position":[[1809,4]]},"314":{"position":[[1314,4]]},"321":{"position":[[278,4]]},"329":{"position":[[881,5]]},"414":{"position":[[876,7]]},"436":{"position":[[694,4]]},"675":{"position":[[329,5]]},"725":{"position":[[193,4]]},"726":{"position":[[611,4]]},"754":{"position":[[724,7]]},"794":{"position":[[930,7]]},"809":{"position":[[930,7]]},"825":{"position":[[766,7]]},"840":{"position":[[752,4],[1907,4],[2282,4]]},"849":{"position":[[694,4],[873,4],[1227,4],[3026,4],[3422,4]]},"947":{"position":[[1282,4]]},"1036":{"position":[[376,7]]},"1047":{"position":[[985,4]]},"1055":{"position":[[985,4]]},"1063":{"position":[[985,4]]},"1186":{"position":[[296,4]]},"1286":{"position":[[987,7]]},"1301":{"position":[[823,7]]},"1325":{"position":[[987,7]]},"1379":{"position":[[4831,4]]},"1403":{"position":[[4831,4]]},"1414":{"position":[[4831,4]]},"1452":{"position":[[3300,7]]},"1455":{"position":[[252,5]]}},"keywords":{}}],["savepoint",{"_index":1399,"title":{},"content":{"97":{"position":[[895,9]]},"1140":{"position":[[3188,9]]},"1292":{"position":[[4083,9]]},"1306":{"position":[[4083,9]]},"1316":{"position":[[3188,9]]},"1329":{"position":[[4083,9]]},"1340":{"position":[[3188,9]]},"1351":{"position":[[3188,9]]},"1370":{"position":[[1027,9]]},"1379":{"position":[[4879,9]]},"1403":{"position":[[4879,9]]},"1414":{"position":[[4879,9]]},"1431":{"position":[[3211,9]]}},"keywords":{}}],["saw",{"_index":2073,"title":{},"content":{"183":{"position":[[1564,3]]}},"keywords":{}}],["scaffold",{"_index":3005,"title":{},"content":{"296":{"position":[[3687,11]]}},"keywords":{}}],["scalabl",{"_index":1669,"title":{},"content":{"121":{"position":[[1947,8]]},"197":{"position":[[552,11]]},"320":{"position":[[373,8]]}},"keywords":{}}],["scalar",{"_index":1678,"title":{},"content":{"122":{"position":[[909,6]]},"308":{"position":[[505,6]]},"1275":{"position":[[159,6]]},"1467":{"position":[[2063,8]]},"1477":{"position":[[2931,6]]}},"keywords":{}}],["scale",{"_index":722,"title":{"333":{"position":[[8,8]]}},"content":{"40":{"position":[[360,7]]},"49":{"position":[[119,5]]},"101":{"position":[[436,5]]},"107":{"position":[[233,5]]},"108":{"position":[[318,7]]},"110":{"position":[[1364,5]]},"112":{"position":[[905,6]]},"121":{"position":[[2029,6]]},"198":{"position":[[1057,6]]},"281":{"position":[[3019,6]]},"319":{"position":[[748,8]]},"320":{"position":[[592,5],[2328,8]]},"321":{"position":[[1999,8]]},"333":{"position":[[18,6],[234,6]]},"363":{"position":[[61,5]]}},"keywords":{}}],["scan",{"_index":2265,"title":{},"content":{"209":{"position":[[499,5]]},"218":{"position":[[1732,5]]},"259":{"position":[[1200,5],[2781,5]]},"291":{"position":[[1665,5]]},"302":{"position":[[1574,5]]},"397":{"position":[[468,6],[707,4],[780,4]]},"785":{"position":[[153,5]]},"789":{"position":[[841,7]]},"947":{"position":[[970,4]]}},"keywords":{}}],["scenario",{"_index":1626,"title":{"306":{"position":[[17,10]]}},"content":{"115":{"position":[[610,9]]},"165":{"position":[[620,10]]},"189":{"position":[[304,9]]},"208":{"position":[[1026,10],[1820,10]]},"209":{"position":[[1366,9]]},"306":{"position":[[62,10],[636,9]]},"307":{"position":[[1,9]]},"308":{"position":[[1,9]]},"309":{"position":[[1,9]]},"310":{"position":[[1,9]]},"1461":{"position":[[65,9]]}},"keywords":{}}],["scene",{"_index":2278,"title":{},"content":{"210":{"position":[[511,6]]}},"keywords":{}}],["schedul",{"_index":2607,"title":{"1153":{"position":[[5,9]]},"1181":{"position":[[5,9]]},"1190":{"position":[[5,9]]},"1388":{"position":[[5,9]]},"1422":{"position":[[5,9]]},"1450":{"position":[[21,8]]},"1452":{"position":[[19,9]]}},"content":{"240":{"position":[[3206,11]]},"323":{"position":[[167,9],[323,9]]},"326":{"position":[[970,8]]},"1134":{"position":[[1821,9]]},"1153":{"position":[[39,8]]},"1181":{"position":[[39,8]]},"1186":{"position":[[522,8]]},"1190":{"position":[[39,8]]},"1292":{"position":[[4125,8]]},"1306":{"position":[[4125,8]]},"1329":{"position":[[4125,8]]},"1388":{"position":[[39,8],[748,8]]},"1422":{"position":[[39,8]]},"1451":{"position":[[575,8]]},"1452":{"position":[[55,8],[98,8],[233,9],[2278,9],[2305,8],[3336,9]]},"1453":{"position":[[1614,8]]}},"keywords":{}}],["scheduleconfigur",{"_index":6543,"title":{},"content":{"1452":{"position":[[2115,18]]}},"keywords":{}}],["schema",{"_index":11,"title":{"10":{"position":[[0,6]]},"13":{"position":[[8,6]]},"14":{"position":[[21,6]]},"41":{"position":[[0,8]]},"70":{"position":[[0,8]]},"72":{"position":[[0,6]]},"90":{"position":[[5,6]]},"155":{"position":[[0,7]]},"156":{"position":[[5,7]]},"160":{"position":[[8,8]]},"162":{"position":[[15,8]]},"165":{"position":[[11,6]]},"208":{"position":[[11,6]]},"304":{"position":[[0,6]]},"306":{"position":[[0,6]]},"865":{"position":[[8,7]]},"877":{"position":[[8,7]]},"944":{"position":[[9,6]]}},"content":{"1":{"position":[[148,7]]},"11":{"position":[[864,7],[1140,6],[1511,6],[1691,6]]},"12":{"position":[[412,6]]},"13":{"position":[[5,6]]},"14":{"position":[[144,7],[230,6],[411,6],[441,7]]},"16":{"position":[[166,7]]},"26":{"position":[[658,8]]},"27":{"position":[[247,7],[358,7]]},"33":{"position":[[127,8]]},"34":{"position":[[778,6]]},"35":{"position":[[228,6]]},"41":{"position":[[128,7],[338,6],[451,7],[594,7],[712,7]]},"42":{"position":[[23,6]]},"50":{"position":[[26,7],[60,7]]},"54":{"position":[[687,7]]},"55":{"position":[[941,7]]},"56":{"position":[[357,8]]},"66":{"position":[[508,6]]},"68":{"position":[[284,6]]},"69":{"position":[[235,6],[446,7]]},"70":{"position":[[38,7],[111,7],[233,6],[406,6],[432,7],[588,6],[607,6],[702,7],[791,7]]},"71":{"position":[[213,7]]},"72":{"position":[[256,6]]},"73":{"position":[[200,7]]},"76":{"position":[[243,7],[394,7]]},"88":{"position":[[458,7]]},"90":{"position":[[69,8],[249,6],[299,6],[367,7],[472,6]]},"94":{"position":[[157,7]]},"97":{"position":[[678,6],[730,6]]},"99":{"position":[[360,7]]},"100":{"position":[[146,7],[744,7],[774,6]]},"102":{"position":[[399,7]]},"106":{"position":[[487,6],[539,7],[677,6]]},"113":{"position":[[23,7],[419,6]]},"115":{"position":[[110,6]]},"121":{"position":[[934,7]]},"123":{"position":[[249,7]]},"129":{"position":[[589,7]]},"150":{"position":[[67,6]]},"156":{"position":[[60,6],[116,7],[162,6],[295,7],[480,7]]},"157":{"position":[[86,7],[230,6],[363,7],[388,6],[445,6]]},"158":{"position":[[75,7],[143,7],[261,6],[326,6],[412,7],[659,7]]},"159":{"position":[[10,6],[213,6],[334,6],[698,7],[717,6],[967,6]]},"160":{"position":[[6,6],[380,7],[504,6],[571,6],[738,7],[861,7],[920,7]]},"161":{"position":[[6,6],[61,6],[210,6],[233,6],[361,7],[429,6],[470,7],[582,7],[659,7],[743,7],[836,7],[1040,7],[1147,8],[1156,6],[1284,6]]},"162":{"position":[[378,7],[435,7],[470,6],[585,6],[719,6],[837,8],[899,6],[937,7],[945,6],[1102,8],[1150,6],[1264,6],[1291,7],[1323,7],[1628,7],[1712,7],[1802,8]]},"163":{"position":[[390,6]]},"164":{"position":[[47,6],[86,8],[1645,6],[1693,6],[2200,6]]},"165":{"position":[[34,6],[77,6],[218,6],[515,6],[579,6],[1117,6],[1148,6],[1206,8],[1353,7],[1399,6],[1475,6],[1557,7],[1608,6],[1747,6],[1821,7],[1845,6],[1885,6],[1970,6],[2100,6],[2312,6]]},"166":{"position":[[344,7],[639,7],[693,7]]},"182":{"position":[[180,6],[526,8],[676,7],[748,7]]},"183":{"position":[[1179,7],[1531,6],[1601,6],[1716,6],[1759,7],[1991,6],[2877,7],[3361,8],[3565,7]]},"190":{"position":[[1424,7],[1960,7]]},"191":{"position":[[780,6],[1036,6],[1347,6],[1799,7]]},"192":{"position":[[1107,7],[1367,8],[1418,6],[1497,6],[1731,6],[1888,7],[1938,7]]},"207":{"position":[[1018,6],[1049,6],[1106,8],[1253,7],[1299,6],[1649,6]]},"208":{"position":[[116,6],[180,6],[271,7],[377,6],[519,6],[547,7],[639,8],[676,6],[700,6],[877,6]]},"211":{"position":[[319,6],[611,6],[669,6],[946,6]]},"217":{"position":[[1718,8],[1824,6],[1912,7],[1991,7]]},"218":{"position":[[1268,6],[1408,7],[1439,6],[1672,6],[1694,6],[1783,7],[1861,6],[1893,7]]},"219":{"position":[[559,8]]},"227":{"position":[[83,7]]},"228":{"position":[[714,6],[769,6],[931,6],[960,6],[1013,6],[1237,6]]},"229":{"position":[[241,6],[463,6],[534,6],[616,6],[733,7]]},"230":{"position":[[56,6]]},"236":{"position":[[1834,7],[1926,6],[1974,6],[2570,6]]},"238":{"position":[[1025,6]]},"239":{"position":[[1086,7],[1152,6],[1282,6],[1563,6],[1764,7],[1914,6],[2024,6],[2214,7],[2257,6],[2541,8],[2603,6],[2784,6]]},"240":{"position":[[741,6],[997,6],[1308,6],[1760,7],[2289,8],[4460,6]]},"241":{"position":[[201,6]]},"242":{"position":[[509,6],[789,6],[814,6]]},"246":{"position":[[132,7],[200,6]]},"247":{"position":[[346,8]]},"254":{"position":[[290,7],[1050,7],[1062,6],[1115,7],[1183,6],[1259,7],[1295,6],[1358,7],[1619,6]]},"255":{"position":[[851,7]]},"259":{"position":[[812,6],[907,8],[992,6],[1141,6],[1162,6],[1251,7],[1364,6],[1396,7],[2344,6],[2488,8],[2573,6],[2722,6],[2743,6],[2832,7],[2910,6],[2942,7]]},"267":{"position":[[1579,6]]},"268":{"position":[[811,7],[1103,6],[1129,6],[1247,7],[1306,6],[1324,7]]},"269":{"position":[[436,7],[674,6],[700,6],[818,7],[877,6],[895,7]]},"270":{"position":[[1205,7],[1288,6],[1402,7],[1478,6],[1496,7]]},"277":{"position":[[582,7]]},"278":{"position":[[751,6],[911,7]]},"279":{"position":[[1059,7]]},"280":{"position":[[1172,7],[1198,6]]},"281":{"position":[[897,7],[1952,7]]},"288":{"position":[[630,7]]},"290":{"position":[[1296,7],[1462,6]]},"291":{"position":[[1271,6],[1432,6],[1482,6],[1606,6],[1627,6],[1716,7],[1794,6],[1826,7]]},"296":{"position":[[298,7],[1110,6],[1269,7],[2527,6],[6733,6]]},"299":{"position":[[545,7]]},"301":{"position":[[1421,6],[1558,6]]},"302":{"position":[[1196,6],[1347,6],[1402,6],[1515,6],[1536,6],[1625,7],[1703,6],[1735,7]]},"306":{"position":[[224,6]]},"307":{"position":[[1310,7],[1709,7],[2178,7],[2592,7],[3247,7]]},"308":{"position":[[40,6],[103,7]]},"309":{"position":[[40,6],[497,6],[602,7],[779,6],[1008,6],[2144,7],[2540,7],[2741,7],[3147,7],[3412,7],[3571,7]]},"310":{"position":[[40,6]]},"314":{"position":[[308,7],[771,7],[783,6],[836,7],[904,6],[980,7],[1048,8],[1324,6],[1419,6]]},"315":{"position":[[2521,7]]},"316":{"position":[[1176,7]]},"319":{"position":[[801,8],[1186,7]]},"320":{"position":[[1747,7]]},"323":{"position":[[1018,7]]},"326":{"position":[[399,7]]},"332":{"position":[[227,7],[356,7],[591,6]]},"344":{"position":[[173,7]]},"367":{"position":[[469,6],[528,6]]},"402":{"position":[[421,8],[430,7],[446,7]]},"403":{"position":[[297,8]]},"419":{"position":[[218,8]]},"440":{"position":[[234,8]]},"504":{"position":[[155,8]]},"547":{"position":[[219,8]]},"574":{"position":[[263,7]]},"585":{"position":[[253,7]]},"616":{"position":[[535,6]]},"639":{"position":[[154,8]]},"661":{"position":[[180,6],[303,6],[536,6]]},"760":{"position":[[827,6]]},"773":{"position":[[827,6]]},"797":{"position":[[2409,7]]},"800":{"position":[[827,6]]},"812":{"position":[[2409,7]]},"815":{"position":[[827,6]]},"828":{"position":[[2409,7]]},"831":{"position":[[827,6]]},"864":{"position":[[430,6],[586,8]]},"865":{"position":[[51,7],[113,6],[192,7],[220,6]]},"867":{"position":[[1397,6],[1502,6],[1690,7],[1836,8]]},"869":{"position":[[1073,6],[1648,6],[1724,7]]},"876":{"position":[[430,6],[586,8]]},"877":{"position":[[51,7],[113,6],[247,8]]},"879":{"position":[[1611,7],[1619,6],[1655,6]]},"880":{"position":[[486,7]]},"904":{"position":[[1569,6],[1628,6]]},"910":{"position":[[115,6]]},"917":{"position":[[536,6],[620,6],[703,6],[795,7]]},"918":{"position":[[1861,6],[1920,6]]},"919":{"position":[[1073,6],[1157,6],[1234,6],[1320,7],[1719,6],[1803,6]]},"926":{"position":[[115,6]]},"931":{"position":[[1231,6],[1290,6]]},"937":{"position":[[115,6]]},"944":{"position":[[43,7],[143,7],[167,6],[224,6],[279,6],[364,6]]},"947":{"position":[[1219,6]]},"953":{"position":[[115,6]]},"965":{"position":[[536,6],[620,6],[703,6],[795,7]]},"971":{"position":[[115,6]]},"1023":{"position":[[199,8]]},"1031":{"position":[[207,6],[309,6],[563,6]]},"1032":{"position":[[1398,6],[1418,7],[1537,7],[1638,7]]},"1034":{"position":[[779,6],[790,6]]},"1035":{"position":[[111,7],[119,6],[130,6]]},"1037":{"position":[[259,7]]},"1040":{"position":[[720,6],[735,7]]},"1042":{"position":[[337,6],[348,7],[428,7],[480,7],[545,6],[592,6]]},"1043":{"position":[[1001,6],[1012,7],[1092,7],[1144,7],[1209,6],[1256,6]]},"1050":{"position":[[720,6],[735,7]]},"1051":{"position":[[1263,6],[1274,7],[1354,7],[1406,7],[1471,6],[1518,6]]},"1058":{"position":[[720,6],[735,7]]},"1059":{"position":[[1056,6],[1067,7],[1147,7],[1199,7],[1264,6],[1311,6]]},"1118":{"position":[[569,6],[984,7]]},"1138":{"position":[[523,7],[540,6],[556,6],[1580,7],[1600,6],[1619,6],[1663,6]]},"1140":{"position":[[3227,6]]},"1149":{"position":[[226,7]]},"1151":{"position":[[511,7],[528,6],[544,6],[1539,7],[1559,6],[1578,6]]},"1156":{"position":[[92,7],[408,6],[442,6]]},"1178":{"position":[[394,6]]},"1185":{"position":[[106,6]]},"1188":{"position":[[375,6],[395,6],[435,6],[789,7],[809,6],[828,6]]},"1189":{"position":[[484,7]]},"1191":{"position":[[633,7]]},"1260":{"position":[[225,7],[242,6],[258,6],[1063,7],[1083,6],[1102,6]]},"1261":{"position":[[189,7]]},"1292":{"position":[[4167,6],[4217,7]]},"1306":{"position":[[4167,6],[4217,7]]},"1313":{"position":[[333,7],[350,6],[366,6],[1124,7],[1144,6],[1163,6],[1207,6]]},"1316":{"position":[[3227,6]]},"1329":{"position":[[4167,6],[4217,7]]},"1337":{"position":[[333,7],[350,6],[366,6],[1124,7],[1144,6],[1163,6],[1207,6]]},"1340":{"position":[[3227,6]]},"1348":{"position":[[333,7],[350,6],[366,6],[1124,7],[1144,6],[1163,6],[1207,6]]},"1351":{"position":[[3227,6]]},"1358":{"position":[[324,7],[529,7],[778,6],[834,7]]},"1379":{"position":[[4937,6]]},"1382":{"position":[[126,6]]},"1383":{"position":[[210,7],[728,6],[984,6],[1295,6],[1747,7]]},"1386":{"position":[[318,7],[326,6],[342,6],[1192,7],[1212,6],[1231,6]]},"1387":{"position":[[175,7],[729,7]]},"1394":{"position":[[633,6]]},"1403":{"position":[[4937,6]]},"1414":{"position":[[4937,6]]},"1417":{"position":[[169,6]]},"1418":{"position":[[265,6]]},"1420":{"position":[[166,7],[174,6],[194,6],[739,7],[759,6],[778,6]]},"1421":{"position":[[146,7],[510,7]]},"1427":{"position":[[274,7],[291,6],[307,6],[884,7],[904,6],[923,6],[967,6]]},"1431":{"position":[[3250,6]]},"1438":{"position":[[427,6],[608,6]]},"1440":{"position":[[511,6]]},"1446":{"position":[[78,6],[119,8]]},"1461":{"position":[[363,7],[3856,7],[4478,7],[5008,7],[5161,6],[5596,8],[5647,7]]},"1463":{"position":[[156,7],[293,7]]},"1464":{"position":[[149,7],[921,6]]},"1465":{"position":[[58,6],[205,7],[300,6],[472,7]]},"1466":{"position":[[108,7]]},"1467":{"position":[[451,7],[2122,7]]},"1476":{"position":[[159,7],[1225,7]]},"1477":{"position":[[929,7],[1104,6],[3151,7],[3332,6],[3706,6]]}},"keywords":{}}],["schema"",{"_index":2299,"title":{},"content":{"210":{"position":[[1282,13],[1390,12],[1448,12]]}},"keywords":{}}],["schema(",{"_index":4875,"title":{},"content":{"867":{"position":[[1747,9]]}},"keywords":{}}],["schema(s)of",{"_index":3651,"title":{},"content":{"427":{"position":[[152,11]]}},"keywords":{}}],["schema.org/draft",{"_index":3073,"title":{},"content":{"314":{"position":[[1075,16]]}},"keywords":{}}],["schema.org/draft/2020",{"_index":2286,"title":{},"content":{"210":{"position":[[885,21]]}},"keywords":{}}],["schema.yaml",{"_index":1055,"title":{},"content":{"71":{"position":[[221,11]]},"73":{"position":[[208,11]]},"94":{"position":[[168,11]]}},"keywords":{}}],["schema_nam",{"_index":5231,"title":{},"content":{"1037":{"position":[[267,14]]},"1188":{"position":[[362,12]]},"1189":{"position":[[186,12]]},"1292":{"position":[[4281,11]]},"1306":{"position":[[4281,11]]},"1329":{"position":[[4281,11]]},"1421":{"position":[[154,11]]}},"keywords":{}}],["schemaagainst",{"_index":724,"title":{},"content":{"41":{"position":[[48,13]]}},"keywords":{}}],["schemai",{"_index":1852,"title":{},"content":{"156":{"position":[[6,8]]}},"keywords":{}}],["schemas.yaml",{"_index":6602,"title":{},"content":{"1461":{"position":[[1257,12],[1352,12],[1417,12],[1430,12],[1483,12]]}},"keywords":{}}],["schemas.yaml#/definitions/coordin",{"_index":1899,"title":{},"content":{"161":{"position":[[667,36],[911,36]]}},"keywords":{}}],["schemas.yaml#/definitions/integ",{"_index":1902,"title":{},"content":{"161":{"position":[[751,33]]}},"keywords":{}}],["schemas/products.sql:/app/schemas/products.sql",{"_index":2539,"title":{},"content":{"236":{"position":[[1488,48]]}},"keywords":{}}],["schemat",{"_index":1425,"title":{},"content":{"99":{"position":[[503,11]]},"332":{"position":[[117,15]]}},"keywords":{}}],["schemath",{"_index":3036,"title":{},"content":{"305":{"position":[[391,9]]}},"keywords":{}}],["scheme",{"_index":114,"title":{},"content":{"3":{"position":[[305,6]]},"782":{"position":[[131,6]]},"1253":{"position":[[131,6]]}},"keywords":{}}],["schemesissu",{"_index":4472,"title":{},"content":{"709":{"position":[[259,12],[348,12],[366,12],[391,12]]}},"keywords":{}}],["schemesproject",{"_index":4485,"title":{},"content":{"709":{"position":[[562,14]]}},"keywords":{}}],["schemesprojectsproject",{"_index":4480,"title":{},"content":{"709":{"position":[[464,22]]}},"keywords":{}}],["schemessprintstim",{"_index":4490,"title":{},"content":{"709":{"position":[[640,18]]}},"keywords":{}}],["schemesworkflow",{"_index":4492,"title":{},"content":{"709":{"position":[[709,15]]}},"keywords":{}}],["scn",{"_index":4870,"title":{"870":{"position":[[12,3]]}},"content":{"867":{"position":[[1194,3],[1208,3]]},"870":{"position":[[65,3],[821,3]]}},"keywords":{}}],["scope",{"_index":2055,"title":{},"content":{"180":{"position":[[798,5]]},"313":{"position":[[3135,5]]},"419":{"position":[[1318,5]]},"440":{"position":[[1334,5]]},"547":{"position":[[1320,5]]},"609":{"position":[[504,6]]},"645":{"position":[[438,7]]},"652":{"position":[[438,7]]},"724":{"position":[[244,7]]},"849":{"position":[[1721,5]]},"989":{"position":[[849,6]]},"1004":{"position":[[932,6]]},"1023":{"position":[[1301,5]]},"1067":{"position":[[96,7]]},"1140":{"position":[[3262,5]]},"1316":{"position":[[3262,5]]},"1340":{"position":[[3262,5]]},"1351":{"position":[[3262,5]]},"1379":{"position":[[4988,5]]},"1403":{"position":[[4988,5]]},"1414":{"position":[[4988,5]]},"1431":{"position":[[3285,5]]},"1437":{"position":[[435,6]]}},"keywords":{}}],["scopes:click",{"_index":4526,"title":{},"content":{"725":{"position":[[143,12]]},"726":{"position":[[561,12]]}},"keywords":{}}],["scram",{"_index":3661,"title":{},"content":{"429":{"position":[[826,6]]},"433":{"position":[[256,5]]}},"keywords":{}}],["scratch",{"_index":2572,"title":{},"content":{"237":{"position":[[1386,8]]},"331":{"position":[[793,8]]},"366":{"position":[[784,8]]},"903":{"position":[[810,8]]},"915":{"position":[[810,8]]},"930":{"position":[[810,8]]},"963":{"position":[[964,8]]},"1040":{"position":[[526,8]]},"1050":{"position":[[526,8]]},"1058":{"position":[[526,8]]}},"keywords":{}}],["screen",{"_index":2065,"title":{},"content":{"183":{"position":[[614,7]]},"209":{"position":[[163,6]]},"238":{"position":[[329,6]]},"239":{"position":[[360,7]]},"267":{"position":[[982,7]]},"552":{"position":[[187,7],[462,7]]},"709":{"position":[[384,6]]}},"keywords":{}}],["script",{"_index":874,"title":{},"content":{"58":{"position":[[206,6]]},"169":{"position":[[445,6]]},"191":{"position":[[449,6]]},"192":{"position":[[520,6],[1077,8]]},"240":{"position":[[418,6],[2638,6]]},"242":{"position":[[410,7]]},"288":{"position":[[768,6]]},"299":{"position":[[683,6]]},"849":{"position":[[1960,6]]},"1031":{"position":[[819,6]]},"1032":{"position":[[111,6],[1961,6]]},"1382":{"position":[[319,6]]},"1383":{"position":[[57,6],[326,6]]}},"keywords":{}}],["scroll",{"_index":1808,"title":{},"content":{"138":{"position":[[2540,6]]},"142":{"position":[[2618,6]]},"192":{"position":[[1171,6],[1818,6]]},"240":{"position":[[2907,6]]},"840":{"position":[[1007,6]]},"849":{"position":[[2018,6]]},"931":{"position":[[730,6]]},"1140":{"position":[[3294,6]]},"1316":{"position":[[3294,6]]},"1340":{"position":[[3294,6]]},"1351":{"position":[[3294,6]]},"1379":{"position":[[5050,6]]},"1403":{"position":[[5050,6]]},"1414":{"position":[[5050,6]]},"1431":{"position":[[3317,6]]},"1479":{"position":[[115,6]]}},"keywords":{}}],["sdk",{"_index":3101,"title":{},"content":{"319":{"position":[[227,4]]},"464":{"position":[[318,3]]}},"keywords":{}}],["seamless",{"_index":2417,"title":{},"content":{"211":{"position":[[499,8]]},"245":{"position":[[260,8]]},"974":{"position":[[46,8]]}},"keywords":{}}],["seamlessli",{"_index":388,"title":{},"content":{"13":{"position":[[519,11]]},"19":{"position":[[357,10]]},"209":{"position":[[383,10]]},"239":{"position":[[2049,10]]},"319":{"position":[[967,10]]},"977":{"position":[[550,10]]}},"keywords":{}}],["search",{"_index":1775,"title":{"604":{"position":[[7,6]]}},"content":{"138":{"position":[[876,6]]},"142":{"position":[[847,6]]},"154":{"position":[[1039,6]]},"173":{"position":[[885,6],[1048,6]]},"182":{"position":[[51,6]]},"183":{"position":[[227,6]]},"184":{"position":[[632,6],[756,6]]},"205":{"position":[[172,6]]},"217":{"position":[[1611,6]]},"218":{"position":[[1099,6]]},"270":{"position":[[512,9]]},"274":{"position":[[835,9]]},"296":{"position":[[7244,6]]},"364":{"position":[[1635,6],[1703,6]]},"472":{"position":[[540,6]]},"487":{"position":[[140,6],[152,6]]},"560":{"position":[[246,6]]},"605":{"position":[[46,6],[119,6],[229,6]]},"606":{"position":[[105,6]]},"607":{"position":[[80,6]]},"608":{"position":[[66,6]]},"609":{"position":[[88,6]]},"610":{"position":[[257,6]]},"611":{"position":[[755,6],[1247,6]]},"612":{"position":[[166,6]]},"690":{"position":[[71,7],[79,6]]},"1009":{"position":[[1123,6],[1415,6],[1428,6]]},"1140":{"position":[[3332,6]]},"1316":{"position":[[3332,6]]},"1340":{"position":[[3332,6]]},"1351":{"position":[[3332,6]]},"1379":{"position":[[5099,6]]},"1403":{"position":[[5099,6]]},"1414":{"position":[[5099,6]]},"1431":{"position":[[3355,6]]}},"keywords":{}}],["search".ent",{"_index":3253,"title":{},"content":{"349":{"position":[[141,18]]},"1092":{"position":[[141,18]]}},"keywords":{}}],["second",{"_index":1453,"title":{},"content":{"101":{"position":[[396,6]]},"129":{"position":[[1070,6]]},"146":{"position":[[702,7]]},"149":{"position":[[675,7]]},"152":{"position":[[678,7]]},"180":{"position":[[652,6]]},"206":{"position":[[152,6]]},"234":{"position":[[227,8]]},"237":{"position":[[3162,8]]},"238":{"position":[[1370,7]]},"270":{"position":[[1237,6]]},"296":{"position":[[7877,8]]},"343":{"position":[[716,6],[1060,8]]},"410":{"position":[[168,8]]},"595":{"position":[[393,6]]},"750":{"position":[[184,8]]},"766":{"position":[[184,8]]},"789":{"position":[[218,8]]},"807":{"position":[[218,8]]},"823":{"position":[[218,8]]},"900":{"position":[[270,6]]},"1140":{"position":[[3357,6]]},"1292":{"position":[[4333,6]]},"1306":{"position":[[4333,6]]},"1316":{"position":[[3357,6]]},"1329":{"position":[[4333,6]]},"1340":{"position":[[3357,6]]},"1351":{"position":[[3357,6]]},"1356":{"position":[[800,8],[1245,7]]},"1379":{"position":[[5154,6]]},"1388":{"position":[[148,6],[189,8],[432,8]]},"1403":{"position":[[5154,6]]},"1414":{"position":[[5154,6]]},"1431":{"position":[[3380,6]]}},"keywords":{}}],["second_micro",{"_index":6157,"title":{},"content":{"1292":{"position":[[4654,13]]},"1306":{"position":[[4654,13]]},"1329":{"position":[[4654,13]]}},"keywords":{}}],["secondari",{"_index":6139,"title":{},"content":{"1292":{"position":[[4382,9]]},"1306":{"position":[[4382,9]]},"1329":{"position":[[4382,9]]}},"keywords":{}}],["secondary_eng",{"_index":6142,"title":{},"content":{"1292":{"position":[[4442,13],[4499,13]]},"1306":{"position":[[4442,13],[4499,13]]},"1329":{"position":[[4442,13],[4499,13]]}},"keywords":{}}],["secondary_loa",{"_index":6148,"title":{},"content":{"1292":{"position":[[4546,13]]},"1306":{"position":[[4546,13]]},"1329":{"position":[[4546,13]]}},"keywords":{}}],["secondary_unl",{"_index":6152,"title":{},"content":{"1292":{"position":[[4597,13]]},"1306":{"position":[[4597,13]]},"1329":{"position":[[4597,13]]}},"keywords":{}}],["secret",{"_index":1142,"title":{"82":{"position":[[11,8]]}},"content":{"82":{"position":[[479,8]]},"83":{"position":[[1084,6]]},"190":{"position":[[873,6]]},"191":{"position":[[519,6],[712,9]]},"192":{"position":[[1030,6]]},"210":{"position":[[2265,7]]},"236":{"position":[[2896,8]]},"237":{"position":[[316,8]]},"240":{"position":[[673,9]]},"299":{"position":[[415,6]]},"301":{"position":[[720,6]]},"344":{"position":[[128,6]]},"367":{"position":[[429,9]]},"375":{"position":[[345,6]]},"377":{"position":[[1239,6],[1266,6]]},"384":{"position":[[303,7]]},"387":{"position":[[596,6],[614,6]]},"390":{"position":[[584,6]]},"392":{"position":[[242,6],[364,6]]},"393":{"position":[[261,6]]},"395":{"position":[[763,6]]},"397":{"position":[[180,6],[202,6]]},"398":{"position":[[262,6]]},"405":{"position":[[27,6]]},"408":{"position":[[308,6],[323,6]]},"415":{"position":[[76,6],[308,6]]},"417":{"position":[[911,6]]},"422":{"position":[[42,6]]},"424":{"position":[[124,6],[145,6]]},"432":{"position":[[1045,6]]},"433":{"position":[[695,6]]},"436":{"position":[[268,6],[577,7],[606,7],[646,6],[703,7],[753,6],[1019,6]]},"438":{"position":[[942,6],[960,6]]},"439":{"position":[[246,6]]},"446":{"position":[[108,6]]},"448":{"position":[[510,6],[528,6]]},"489":{"position":[[172,6],[470,7]]},"527":{"position":[[244,8]]},"535":{"position":[[244,8]]},"551":{"position":[[124,6]]},"554":{"position":[[597,7]]},"556":{"position":[[708,6],[726,6]]},"640":{"position":[[252,8]]},"662":{"position":[[172,6],[470,7]]},"670":{"position":[[174,6],[192,6]]},"677":{"position":[[172,6],[470,7]]},"692":{"position":[[172,6],[470,7]]},"721":{"position":[[274,8]]},"728":{"position":[[270,6],[301,7]]},"741":{"position":[[172,6],[190,6]]},"748":{"position":[[150,7],[158,8]]},"752":{"position":[[677,8]]},"753":{"position":[[1333,8]]},"767":{"position":[[2010,8]]},"791":{"position":[[630,8]]},"792":{"position":[[1950,8]]},"793":{"position":[[1304,8]]},"808":{"position":[[1250,8]]},"824":{"position":[[2072,8]]},"840":{"position":[[489,7],[802,6],[2325,6],[2567,6]]},"842":{"position":[[772,6],[788,6],[949,6],[969,6]]},"849":{"position":[[960,7],[1277,6],[3465,6],[3707,6]]},"851":{"position":[[194,6],[370,6],[386,6],[517,6],[537,6]]},"856":{"position":[[85,7]]},"860":{"position":[[215,8]]},"868":{"position":[[215,6]]},"880":{"position":[[314,6]]},"885":{"position":[[171,6],[189,6]]},"894":{"position":[[106,6]]},"895":{"position":[[532,6]]},"898":{"position":[[956,6]]},"904":{"position":[[1490,9]]},"917":{"position":[[352,8]]},"918":{"position":[[1782,9]]},"919":{"position":[[915,8]]},"931":{"position":[[1191,9]]},"947":{"position":[[846,10],[886,6]]},"965":{"position":[[352,8]]},"988":{"position":[[271,7]]},"989":{"position":[[767,7],[1138,7],[1195,7]]},"991":{"position":[[450,6],[479,7],[512,7]]},"992":{"position":[[173,8]]},"1003":{"position":[[271,7]]},"1004":{"position":[[850,7],[1221,7],[1278,7]]},"1009":{"position":[[513,6],[542,7],[575,7]]},"1010":{"position":[[256,8]]},"1016":{"position":[[152,8],[204,8]]},"1032":{"position":[[500,9]]},"1037":{"position":[[230,6]]},"1042":{"position":[[237,9]]},"1043":{"position":[[901,9]]},"1051":{"position":[[1163,9]]},"1067":{"position":[[612,7]]},"1070":{"position":[[552,6],[566,6]]},"1071":{"position":[[211,8],[263,8]]},"1076":{"position":[[221,6]]},"1086":{"position":[[259,8],[283,8]]},"1089":{"position":[[298,7]]},"1091":{"position":[[62,7]]},"1094":{"position":[[170,6],[186,6]]},"1101":{"position":[[127,6],[150,6]]},"1122":{"position":[[389,6]]},"1125":{"position":[[175,6],[197,6]]},"1126":{"position":[[223,6]]},"1133":{"position":[[551,6],[581,7]]},"1142":{"position":[[253,6]]},"1144":{"position":[[249,6],[267,6]]},"1149":{"position":[[701,6]]},"1151":{"position":[[861,6],[883,6]]},"1160":{"position":[[416,6]]},"1162":{"position":[[182,6],[200,6]]},"1168":{"position":[[253,6]]},"1170":{"position":[[249,6],[267,6]]},"1189":{"position":[[258,6]]},"1197":{"position":[[314,6]]},"1204":{"position":[[300,6],[584,6]]},"1206":{"position":[[216,6],[238,6]]},"1207":{"position":[[172,6]]},"1231":{"position":[[191,8]]},"1258":{"position":[[295,6]]},"1260":{"position":[[660,6],[682,6]]},"1270":{"position":[[174,6]]},"1303":{"position":[[1474,8]]},"1362":{"position":[[401,6],[429,7]]},"1363":{"position":[[172,8],[224,8]]},"1373":{"position":[[1084,9]]},"1383":{"position":[[660,9]]},"1387":{"position":[[298,6]]},"1397":{"position":[[863,9]]},"1408":{"position":[[182,9]]},"1409":{"position":[[846,9]]},"1420":{"position":[[421,6]]}},"keywords":{}}],["secret"",{"_index":4976,"title":{},"content":{"898":{"position":[[1029,13]]},"1092":{"position":[[304,12]]}},"keywords":{}}],["secret,"",{"_index":4954,"title":{},"content":{"895":{"position":[[486,13]]}},"keywords":{}}],["secret123",{"_index":5262,"title":{},"content":{"1059":{"position":[[952,13]]},"1374":{"position":[[1084,13]]},"1398":{"position":[[862,13]]}},"keywords":{}}],["secret_access_key",{"_index":5750,"title":{},"content":{"1152":{"position":[[308,17]]}},"keywords":{}}],["secret_client_id",{"_index":4124,"title":{},"content":{"557":{"position":[[232,18]]}},"keywords":{}}],["secret_key",{"_index":3566,"title":{},"content":{"408":{"position":[[288,11]]},"424":{"position":[[112,11]]},"425":{"position":[[136,11]]}},"keywords":{}}],["secret_secret",{"_index":4125,"title":{},"content":{"557":{"position":[[266,15]]}},"keywords":{}}],["secretmarketo",{"_index":4553,"title":{},"content":{"739":{"position":[[176,13]]}},"keywords":{}}],["secretrefresh",{"_index":3473,"title":{},"content":{"384":{"position":[[169,13]]}},"keywords":{}}],["secretten",{"_index":3692,"title":{},"content":{"435":{"position":[[120,12]]}},"keywords":{}}],["secrettoken",{"_index":4742,"title":{},"content":{"840":{"position":[[2547,11]]},"849":{"position":[[3687,11]]}},"keywords":{}}],["section",{"_index":658,"title":{},"content":{"32":{"position":[[9,8]]},"39":{"position":[[9,8]]},"47":{"position":[[6,7]]},"82":{"position":[[1970,8],[3174,8],[4306,8]]},"85":{"position":[[51,7]]},"87":{"position":[[12,7]]},"90":{"position":[[135,8],[565,7]]},"91":{"position":[[318,7]]},"92":{"position":[[240,8],[325,8]]},"144":{"position":[[553,7]]},"146":{"position":[[70,7],[341,7],[576,7],[922,7]]},"149":{"position":[[76,7],[350,7],[549,7],[895,7],[1157,7]]},"152":{"position":[[86,7],[357,7],[552,7],[898,7]]},"191":{"position":[[280,8]]},"192":{"position":[[1214,7]]},"203":{"position":[[611,8]]},"204":{"position":[[693,8]]},"206":{"position":[[41,8],[173,8],[298,8],[1016,8]]},"213":{"position":[[25,8]]},"240":{"position":[[2943,8]]},"249":{"position":[[55,7]]},"254":{"position":[[2103,7],[2522,7]]},"257":{"position":[[34,7]]},"259":{"position":[[293,7],[1982,7]]},"270":{"position":[[175,8]]},"277":{"position":[[11,7]]},"278":{"position":[[11,7]]},"279":{"position":[[11,7]]},"280":{"position":[[11,7]]},"281":{"position":[[11,7],[228,8],[2175,7]]},"286":{"position":[[46,7]]},"296":{"position":[[2655,7]]},"306":{"position":[[32,8],[731,8]]},"314":{"position":[[1650,7],[2153,7]]},"325":{"position":[[841,7]]},"370":{"position":[[27,7]]},"460":{"position":[[487,7]]},"594":{"position":[[1065,7]]},"640":{"position":[[194,7]]},"675":{"position":[[267,7]]},"690":{"position":[[143,7],[241,7]]},"753":{"position":[[475,7]]},"761":{"position":[[270,8]]},"764":{"position":[[925,7]]},"767":{"position":[[621,7]]},"774":{"position":[[270,8]]},"777":{"position":[[925,7]]},"784":{"position":[[274,7]]},"792":{"position":[[899,7]]},"793":{"position":[[434,7]]},"801":{"position":[[276,8]]},"804":{"position":[[923,7]]},"808":{"position":[[450,7]]},"816":{"position":[[276,8]]},"819":{"position":[[923,7]]},"824":{"position":[[691,7]]},"832":{"position":[[276,8]]},"835":{"position":[[923,7]]},"840":{"position":[[696,8],[1033,8]]},"849":{"position":[[502,8],[639,8],[1171,8],[2044,8]]},"866":{"position":[[451,7]]},"878":{"position":[[461,7]]},"899":{"position":[[121,8],[156,7]]},"904":{"position":[[690,7]]},"918":{"position":[[899,7]]},"919":{"position":[[434,7]]},"931":{"position":[[454,7],[755,8]]},"1043":{"position":[[434,7]]},"1051":{"position":[[690,7]]},"1059":{"position":[[454,7]]},"1138":{"position":[[27,7]]},"1140":{"position":[[3387,7]]},"1154":{"position":[[640,7]]},"1198":{"position":[[363,7]]},"1255":{"position":[[274,7]]},"1289":{"position":[[980,7]]},"1303":{"position":[[454,7],[691,7]]},"1316":{"position":[[3387,7]]},"1322":{"position":[[1199,7]]},"1340":{"position":[[3387,7]]},"1351":{"position":[[3387,7]]},"1356":{"position":[[483,8]]},"1373":{"position":[[672,7]]},"1374":{"position":[[672,7]]},"1379":{"position":[[5212,7]]},"1397":{"position":[[451,7]]},"1398":{"position":[[450,7]]},"1403":{"position":[[5212,7]]},"1409":{"position":[[434,7]]},"1414":{"position":[[5212,7]]},"1431":{"position":[[3410,7]]},"1448":{"position":[[1174,8]]},"1461":{"position":[[5168,9]]}},"keywords":{}}],["sectionfor",{"_index":4948,"title":{},"content":{"895":{"position":[[139,10]]}},"keywords":{}}],["sectionselect",{"_index":3522,"title":{},"content":{"395":{"position":[[250,13]]}},"keywords":{}}],["secur",{"_index":646,"title":{"83":{"position":[[27,6]]},"429":{"position":[[30,9]]}},"content":{"30":{"position":[[162,7]]},"83":{"position":[[68,6],[170,8]]},"168":{"position":[[169,6]]},"170":{"position":[[43,6]]},"213":{"position":[[405,6]]},"221":{"position":[[2023,8]]},"222":{"position":[[743,8]]},"237":{"position":[[583,6]]},"249":{"position":[[139,9]]},"366":{"position":[[1111,8]]},"428":{"position":[[213,8]]},"429":{"position":[[39,8],[221,8],[981,9],[1367,8],[1423,8]]},"709":{"position":[[339,8]]},"753":{"position":[[302,6],[600,6]]},"767":{"position":[[140,8],[206,8],[448,6],[746,6]]},"784":{"position":[[82,6],[402,6]]},"792":{"position":[[460,8],[526,8],[736,6],[1024,6]]},"793":{"position":[[271,6],[559,6]]},"808":{"position":[[287,6],[575,6]]},"824":{"position":[[252,8],[318,8],[528,6],[816,6]]},"840":{"position":[[2676,9]]},"866":{"position":[[287,6],[576,6]]},"878":{"position":[[297,6],[586,6]]},"904":{"position":[[252,8],[318,8],[527,6],[815,6]]},"918":{"position":[[460,8],[526,8],[736,6],[1024,6]]},"919":{"position":[[271,6],[559,6]]},"931":{"position":[[291,6],[579,6]]},"1042":{"position":[[1102,6],[1365,6]]},"1043":{"position":[[271,6],[559,6]]},"1051":{"position":[[252,8],[318,8],[527,6],[815,6]]},"1059":{"position":[[291,6],[579,6]]},"1136":{"position":[[264,8]]},"1154":{"position":[[466,6],[770,6]]},"1194":{"position":[[215,8]]},"1198":{"position":[[171,6],[491,6]]},"1255":{"position":[[82,6],[402,6]]},"1268":{"position":[[38,8],[685,9]]},"1282":{"position":[[384,9]]},"1286":{"position":[[2316,6]]},"1288":{"position":[[96,9]]},"1289":{"position":[[234,8],[309,8],[1110,6]]},"1292":{"position":[[4720,8]]},"1301":{"position":[[2152,6]]},"1303":{"position":[[291,6],[579,6],[821,6]]},"1306":{"position":[[4720,8]]},"1310":{"position":[[399,9]]},"1321":{"position":[[14,8],[89,8]]},"1322":{"position":[[743,8],[1329,6]]},"1325":{"position":[[2316,6]]},"1329":{"position":[[4720,8]]},"1334":{"position":[[14,8],[89,8]]},"1335":{"position":[[743,8]]},"1373":{"position":[[252,8],[318,8],[509,6],[797,6]]},"1374":{"position":[[252,8],[318,8],[509,6],[797,6]]},"1397":{"position":[[288,6],[576,6]]},"1398":{"position":[[287,6],[575,6]]},"1408":{"position":[[375,6],[638,6]]},"1409":{"position":[[271,6],[559,6]]}},"keywords":{}}],["security.protocol=sasl_ssl",{"_index":2679,"title":{},"content":{"250":{"position":[[1295,26]]}},"keywords":{}}],["security_protocol",{"_index":2649,"title":{},"content":{"250":{"position":[[309,20]]}},"keywords":{}}],["security_protocol=conf['security_protocol",{"_index":2661,"title":{},"content":{"250":{"position":[[631,44]]}},"keywords":{}}],["securityaudit",{"_index":6356,"title":{},"content":{"1379":{"position":[[5259,13]]},"1403":{"position":[[5259,13]]},"1414":{"position":[[5259,13]]}},"keywords":{}}],["see",{"_index":281,"title":{},"content":{"8":{"position":[[892,3]]},"52":{"position":[[202,3]]},"53":{"position":[[537,3]]},"63":{"position":[[466,3]]},"68":{"position":[[1206,3]]},"69":{"position":[[934,3]]},"83":{"position":[[355,3],[671,3],[1414,3]]},"91":{"position":[[376,3]]},"103":{"position":[[795,3]]},"110":{"position":[[1433,3]]},"138":{"position":[[1331,3],[2674,3]]},"139":{"position":[[237,3]]},"140":{"position":[[337,3]]},"141":{"position":[[299,3],[2264,3]]},"142":{"position":[[1324,3],[2751,3]]},"143":{"position":[[277,3]]},"144":{"position":[[838,3]]},"146":{"position":[[600,3],[1024,3]]},"149":{"position":[[573,3],[1018,3]]},"152":{"position":[[576,3],[1008,3]]},"154":{"position":[[766,3],[909,3]]},"157":{"position":[[430,3]]},"168":{"position":[[58,3]]},"173":{"position":[[1231,3]]},"181":{"position":[[45,3]]},"182":{"position":[[222,4]]},"183":{"position":[[4123,3]]},"184":{"position":[[522,3]]},"185":{"position":[[162,3]]},"190":{"position":[[550,3],[1975,3]]},"191":{"position":[[289,3]]},"193":{"position":[[507,3],[714,3]]},"203":{"position":[[445,3]]},"204":{"position":[[54,4]]},"206":{"position":[[977,3]]},"207":{"position":[[608,3],[664,3]]},"209":{"position":[[149,3],[255,3]]},"210":{"position":[[44,3],[235,3],[298,3],[1516,3]]},"217":{"position":[[2186,3]]},"218":{"position":[[2112,3]]},"229":{"position":[[251,3]]},"232":{"position":[[602,3]]},"236":{"position":[[2597,3]]},"237":{"position":[[3182,3],[3554,3]]},"239":{"position":[[1049,3],[1469,3],[1699,3]]},"240":{"position":[[3812,3],[4380,3],[4681,3]]},"253":{"position":[[949,3]]},"254":{"position":[[1609,4]]},"255":{"position":[[808,4],[1277,3]]},"257":{"position":[[199,3]]},"259":{"position":[[661,3]]},"264":{"position":[[219,3],[881,3]]},"266":{"position":[[238,3]]},"270":{"position":[[1527,3]]},"275":{"position":[[241,3]]},"278":{"position":[[236,3]]},"281":{"position":[[3318,4]]},"286":{"position":[[306,3]]},"290":{"position":[[1666,3]]},"291":{"position":[[1922,3]]},"292":{"position":[[277,3]]},"295":{"position":[[602,4],[880,3],[1739,3],[3898,3]]},"296":{"position":[[4355,3],[6500,3],[6916,3],[7685,3],[7897,3]]},"299":{"position":[[447,3]]},"301":{"position":[[1169,3],[1640,3]]},"302":{"position":[[1834,3]]},"303":{"position":[[268,3]]},"307":{"position":[[535,3]]},"308":{"position":[[253,3]]},"309":{"position":[[1544,3],[1844,3]]},"313":{"position":[[949,3]]},"314":{"position":[[1409,4]]},"315":{"position":[[222,3],[845,3],[2321,4]]},"316":{"position":[[1133,4],[1602,3]]},"320":{"position":[[2338,3]]},"322":{"position":[[210,3]]},"343":{"position":[[1156,4]]},"350":{"position":[[109,3]]},"358":{"position":[[109,3]]},"368":{"position":[[479,3]]},"369":{"position":[[109,3]]},"370":{"position":[[185,3]]},"373":{"position":[[1004,3]]},"376":{"position":[[109,3]]},"385":{"position":[[459,3]]},"386":{"position":[[109,3]]},"390":{"position":[[495,3],[616,3]]},"391":{"position":[[109,3]]},"395":{"position":[[665,3],[795,3]]},"396":{"position":[[109,3]]},"401":{"position":[[179,3]]},"407":{"position":[[109,3]]},"413":{"position":[[410,3]]},"415":{"position":[[327,3]]},"416":{"position":[[109,3]]},"417":{"position":[[1437,3]]},"423":{"position":[[109,3]]},"429":{"position":[[1260,3]]},"431":{"position":[[109,3]]},"437":{"position":[[109,3]]},"447":{"position":[[109,3]]},"453":{"position":[[109,3]]},"459":{"position":[[109,3]]},"465":{"position":[[109,3]]},"472":{"position":[[109,3]]},"475":{"position":[[305,3]]},"481":{"position":[[109,3]]},"485":{"position":[[306,3]]},"488":{"position":[[648,3]]},"495":{"position":[[109,3]]},"496":{"position":[[191,3]]},"501":{"position":[[65,3]]},"502":{"position":[[1085,3]]},"508":{"position":[[109,3]]},"516":{"position":[[109,3]]},"525":{"position":[[109,3]]},"531":{"position":[[539,3]]},"533":{"position":[[109,3]]},"539":{"position":[[109,3]]},"544":{"position":[[109,3]]},"555":{"position":[[106,3]]},"556":{"position":[[491,3],[1194,3]]},"558":{"position":[[183,3]]},"572":{"position":[[109,3]]},"583":{"position":[[99,3]]},"584":{"position":[[1285,3]]},"592":{"position":[[106,3]]},"593":{"position":[[465,3]]},"594":{"position":[[1045,4]]},"597":{"position":[[268,3]]},"610":{"position":[[109,3]]},"618":{"position":[[109,3]]},"624":{"position":[[109,3]]},"630":{"position":[[109,3]]},"636":{"position":[[109,3]]},"640":{"position":[[280,3]]},"646":{"position":[[109,3]]},"653":{"position":[[109,3]]},"657":{"position":[[306,3]]},"659":{"position":[[805,3]]},"667":{"position":[[95,3]]},"669":{"position":[[109,3]]},"673":{"position":[[306,3]]},"676":{"position":[[648,3]]},"684":{"position":[[109,3]]},"688":{"position":[[306,3]]},"690":{"position":[[220,3]]},"691":{"position":[[648,3]]},"699":{"position":[[109,3]]},"705":{"position":[[109,3]]},"711":{"position":[[109,3]]},"719":{"position":[[104,3]]},"724":{"position":[[261,3],[686,3]]},"727":{"position":[[109,3]]},"734":{"position":[[109,3]]},"738":{"position":[[290,3],[420,3]]},"740":{"position":[[109,3]]},"746":{"position":[[109,3]]},"747":{"position":[[107,3]]},"750":{"position":[[1416,3]]},"752":{"position":[[1031,3]]},"753":{"position":[[569,3]]},"754":{"position":[[1223,4]]},"755":{"position":[[479,3]]},"756":{"position":[[109,3]]},"760":{"position":[[877,3]]},"767":{"position":[[715,3]]},"768":{"position":[[479,3]]},"769":{"position":[[109,3]]},"773":{"position":[[877,3]]},"780":{"position":[[121,3],[418,3]]},"781":{"position":[[106,3]]},"784":{"position":[[371,3]]},"786":{"position":[[398,3]]},"789":{"position":[[1817,3]]},"791":{"position":[[1065,3]]},"792":{"position":[[993,3]]},"793":{"position":[[528,3]]},"794":{"position":[[1427,4]]},"795":{"position":[[477,3]]},"796":{"position":[[110,3]]},"800":{"position":[[877,3]]},"808":{"position":[[544,3]]},"809":{"position":[[1427,4]]},"810":{"position":[[477,3]]},"811":{"position":[[109,3]]},"815":{"position":[[877,3]]},"824":{"position":[[785,3]]},"825":{"position":[[1263,4]]},"826":{"position":[[477,3]]},"827":{"position":[[109,3]]},"831":{"position":[[877,3]]},"839":{"position":[[180,3]]},"841":{"position":[[109,3]]},"848":{"position":[[217,3]]},"850":{"position":[[109,3]]},"858":{"position":[[109,3]]},"866":{"position":[[109,3],[545,3]]},"870":{"position":[[553,3]]},"871":{"position":[[8,3]]},"878":{"position":[[109,3],[555,3]]},"884":{"position":[[109,3]]},"890":{"position":[[110,3]]},"896":{"position":[[109,3]]},"904":{"position":[[784,3]]},"905":{"position":[[482,3]]},"906":{"position":[[109,3]]},"909":{"position":[[1059,3]]},"915":{"position":[[1273,3]]},"918":{"position":[[993,3]]},"919":{"position":[[528,3]]},"920":{"position":[[482,3]]},"921":{"position":[[109,3]]},"925":{"position":[[1059,3]]},"931":{"position":[[548,3]]},"932":{"position":[[482,3]]},"933":{"position":[[109,3]]},"936":{"position":[[1059,3]]},"943":{"position":[[730,3]]},"945":{"position":[[1072,3]]},"946":{"position":[[355,3]]},"948":{"position":[[482,3]]},"949":{"position":[[109,3]]},"952":{"position":[[1059,3]]},"958":{"position":[[109,3]]},"963":{"position":[[173,3],[1427,3]]},"966":{"position":[[482,3]]},"967":{"position":[[109,3]]},"970":{"position":[[1059,3]]},"981":{"position":[[109,3]]},"988":{"position":[[298,3]]},"990":{"position":[[109,3]]},"996":{"position":[[109,3]]},"1003":{"position":[[298,3]]},"1005":{"position":[[106,3]]},"1014":{"position":[[109,3]]},"1021":{"position":[[109,3],[1596,3]]},"1027":{"position":[[109,3]]},"1031":{"position":[[811,3]]},"1033":{"position":[[113,3]]},"1042":{"position":[[1334,3]]},"1043":{"position":[[528,3]]},"1044":{"position":[[109,3]]},"1051":{"position":[[784,3]]},"1052":{"position":[[109,3]]},"1059":{"position":[[548,3]]},"1060":{"position":[[109,3]]},"1069":{"position":[[109,3]]},"1075":{"position":[[109,3]]},"1084":{"position":[[109,3]]},"1093":{"position":[[109,3]]},"1100":{"position":[[109,3]]},"1106":{"position":[[110,3]]},"1112":{"position":[[109,3]]},"1118":{"position":[[742,3],[951,3]]},"1122":{"position":[[292,3],[421,3]]},"1124":{"position":[[109,3]]},"1131":{"position":[[180,3]]},"1132":{"position":[[110,3]]},"1138":{"position":[[185,3]]},"1142":{"position":[[70,3],[272,3]]},"1149":{"position":[[365,3],[525,3],[720,3]]},"1154":{"position":[[739,3]]},"1160":{"position":[[70,3],[181,3],[435,3]]},"1168":{"position":[[70,3],[272,3]]},"1176":{"position":[[414,3]]},"1178":{"position":[[493,3]]},"1179":{"position":[[947,3]]},"1186":{"position":[[89,3],[531,4],[682,3]]},"1192":{"position":[[443,3]]},"1194":{"position":[[164,4]]},"1198":{"position":[[460,3]]},"1203":{"position":[[596,3]]},"1204":{"position":[[643,3]]},"1206":{"position":[[1121,3]]},"1211":{"position":[[70,3]]},"1218":{"position":[[70,3]]},"1227":{"position":[[192,3]]},"1228":{"position":[[207,3],[308,3]]},"1251":{"position":[[153,3]]},"1252":{"position":[[106,3]]},"1255":{"position":[[371,3]]},"1258":{"position":[[119,3],[314,3]]},"1286":{"position":[[1513,4]]},"1289":{"position":[[727,3],[1079,3]]},"1301":{"position":[[1349,4]]},"1303":{"position":[[548,3],[790,3]]},"1322":{"position":[[1298,3]]},"1325":{"position":[[1513,4]]},"1334":{"position":[[229,3]]},"1356":{"position":[[333,3],[699,3]]},"1373":{"position":[[766,3]]},"1374":{"position":[[766,3]]},"1382":{"position":[[311,3]]},"1391":{"position":[[457,3]]},"1393":{"position":[[301,3]]},"1394":{"position":[[440,3]]},"1397":{"position":[[545,3]]},"1398":{"position":[[544,3]]},"1408":{"position":[[607,3]]},"1409":{"position":[[528,3]]},"1423":{"position":[[450,3]]}},"keywords":{}}],["seeconnector",{"_index":4285,"title":{},"content":{"600":{"position":[[109,13]]}},"keywords":{}}],["seeedit",{"_index":5838,"title":{},"content":{"1200":{"position":[[620,7]]}},"keywords":{}}],["seek",{"_index":5664,"title":{},"content":{"1140":{"position":[[3428,4]]},"1316":{"position":[[3428,4]]},"1340":{"position":[[3428,4]]},"1351":{"position":[[3428,4]]},"1431":{"position":[[3451,4]]}},"keywords":{}}],["seem",{"_index":2192,"title":{},"content":{"197":{"position":[[1229,4]]}},"keywords":{}}],["seemingli",{"_index":6491,"title":{},"content":{"1439":{"position":[[1276,9]]}},"keywords":{}}],["seen",{"_index":151,"title":{},"content":{"4":{"position":[[10,5]]},"74":{"position":[[757,4]]},"278":{"position":[[380,4]]},"1440":{"position":[[1159,4]]},"1463":{"position":[[77,4]]},"1476":{"position":[[85,4],[1167,5]]}},"keywords":{}}],["seen_pair",{"_index":2840,"title":{},"content":{"278":{"position":[[1002,10],[1214,10],[1398,10]]}},"keywords":{}}],["segment",{"_index":3530,"title":{},"content":{"397":{"position":[[414,8],[433,8]]},"585":{"position":[[446,8],[498,9]]},"659":{"position":[[72,8]]},"660":{"position":[[120,8]]},"661":{"position":[[451,8]]},"686":{"position":[[970,8]]},"764":{"position":[[356,7]]},"777":{"position":[[356,7]]},"804":{"position":[[354,7]]},"819":{"position":[[354,7]]},"835":{"position":[[354,7]]},"1461":{"position":[[1610,8]]}},"keywords":{}}],["segments.d",{"_index":4118,"title":{},"content":{"556":{"position":[[1168,13]]}},"keywords":{}}],["segmentscontactscontact",{"_index":4429,"title":{},"content":{"682":{"position":[[112,23]]}},"keywords":{}}],["select",{"_index":185,"title":{"385":{"position":[[0,9]]}},"content":{"4":{"position":[[668,9]]},"12":{"position":[[445,8]]},"17":{"position":[[354,7],[718,7]]},"82":{"position":[[3770,11]]},"94":{"position":[[2580,6]]},"96":{"position":[[208,6]]},"97":{"position":[[497,6]]},"98":{"position":[[134,6],[375,6],[474,8],[535,6],[900,7],[1087,6]]},"107":{"position":[[2768,6],[3334,6],[4052,6]]},"114":{"position":[[350,6],[391,6],[432,6]]},"115":{"position":[[808,6],[825,6],[844,6]]},"122":{"position":[[392,6],[721,9],[1250,6]]},"138":{"position":[[179,6],[285,8],[559,8],[2145,6]]},"140":{"position":[[141,6]]},"141":{"position":[[489,6],[595,8],[2101,6]]},"142":{"position":[[292,6],[398,8],[2205,6]]},"144":{"position":[[380,6]]},"146":{"position":[[284,6]]},"149":{"position":[[293,6]]},"152":{"position":[[300,6]]},"171":{"position":[[278,6]]},"173":{"position":[[924,6],[1000,9],[1023,6],[1164,8]]},"183":{"position":[[242,6],[650,8],[3018,6]]},"190":{"position":[[1241,9]]},"192":{"position":[[1683,9]]},"208":{"position":[[16,9]]},"210":{"position":[[97,8]]},"217":{"position":[[778,6],[1389,8],[1763,6]]},"222":{"position":[[801,9]]},"230":{"position":[[315,8]]},"238":{"position":[[1201,6],[1270,6]]},"240":{"position":[[2175,9],[3943,9]]},"254":{"position":[[680,6],[2737,6],[3398,6],[3591,6],[3682,6],[3789,8]]},"259":{"position":[[792,11]]},"263":{"position":[[701,6],[733,6]]},"267":{"position":[[281,6],[1018,8]]},"277":{"position":[[737,6],[1101,6]]},"281":{"position":[[315,6]]},"290":{"position":[[594,6]]},"296":{"position":[[7404,6]]},"301":{"position":[[534,6]]},"307":{"position":[[3285,8]]},"309":{"position":[[3609,8]]},"320":{"position":[[899,9]]},"349":{"position":[[199,6]]},"367":{"position":[[445,6],[548,6]]},"385":{"position":[[139,6]]},"395":{"position":[[137,6]]},"436":{"position":[[123,6],[164,6],[322,6]]},"469":{"position":[[90,10]]},"479":{"position":[[159,6],[627,9],[873,10]]},"480":{"position":[[53,6],[1007,6]]},"487":{"position":[[249,6],[577,6],[660,6]]},"520":{"position":[[118,10]]},"526":{"position":[[112,6]]},"529":{"position":[[137,10]]},"552":{"position":[[476,9],[651,9]]},"557":{"position":[[480,6]]},"654":{"position":[[723,6]]},"675":{"position":[[48,6],[355,6]]},"747":{"position":[[621,6]]},"752":{"position":[[474,6],[762,6]]},"753":{"position":[[1130,6],[1418,6]]},"767":{"position":[[2095,6]]},"791":{"position":[[427,6],[767,6]]},"792":{"position":[[2087,6]]},"793":{"position":[[1101,6],[1441,6]]},"808":{"position":[[1047,6],[1387,6]]},"824":{"position":[[2209,6]]},"840":{"position":[[1832,6],[2010,6],[2050,6],[2112,6]]},"849":{"position":[[2873,6],[3129,6],[3190,6],[3252,6]]},"864":{"position":[[456,6],[602,6],[697,6],[1153,6],[1202,6],[1247,6]]},"867":{"position":[[1738,8]]},"876":{"position":[[456,6],[602,6],[697,6]]},"895":{"position":[[422,8]]},"904":{"position":[[1545,6],[1648,6]]},"912":{"position":[[901,6],[1201,6]]},"917":{"position":[[556,6],[596,6],[679,6],[913,6]]},"918":{"position":[[1837,6],[1940,6]]},"919":{"position":[[1093,6],[1133,6],[1210,6],[1438,6],[1739,6],[1779,6],[1856,6]]},"922":{"position":[[1806,6]]},"931":{"position":[[1207,6],[1310,6]]},"942":{"position":[[421,6],[484,6]]},"944":{"position":[[200,6],[299,6],[340,6]]},"947":{"position":[[29,6],[1038,6]]},"965":{"position":[[556,6],[596,6],[679,6],[913,6]]},"989":{"position":[[839,9],[870,6]]},"1004":{"position":[[922,9],[953,6]]},"1009":{"position":[[1454,8]]},"1032":{"position":[[1726,6],[1830,6]]},"1040":{"position":[[690,6]]},"1042":{"position":[[535,6],[582,6],[759,7]]},"1043":{"position":[[1199,6],[1246,6],[1423,7]]},"1050":{"position":[[690,6]]},"1051":{"position":[[1461,6],[1508,6],[1685,7]]},"1058":{"position":[[690,6]]},"1059":{"position":[[1254,6],[1301,6],[1478,7]]},"1087":{"position":[[135,6]]},"1092":{"position":[[203,6]]},"1118":{"position":[[818,6]]},"1123":{"position":[[429,9]]},"1140":{"position":[[3453,6]]},"1160":{"position":[[287,6]]},"1177":{"position":[[307,6]]},"1183":{"position":[[955,6]]},"1195":{"position":[[477,8]]},"1200":{"position":[[318,9]]},"1201":{"position":[[366,8]]},"1203":{"position":[[262,6]]},"1209":{"position":[[466,6]]},"1265":{"position":[[1,6]]},"1276":{"position":[[397,9]]},"1292":{"position":[[4768,6]]},"1306":{"position":[[4768,6]]},"1316":{"position":[[3453,6]]},"1322":{"position":[[801,9]]},"1329":{"position":[[4768,6]]},"1335":{"position":[[801,9]]},"1340":{"position":[[3453,6]]},"1351":{"position":[[3453,6]]},"1370":{"position":[[1044,6]]},"1379":{"position":[[5315,6]]},"1384":{"position":[[805,6]]},"1394":{"position":[[651,6]]},"1403":{"position":[[5315,6]]},"1414":{"position":[[5315,6]]},"1418":{"position":[[177,6],[310,9]]},"1429":{"position":[[346,6],[821,7]]},"1431":{"position":[[3476,6]]},"1455":{"position":[[80,6],[173,6],[550,8]]},"1472":{"position":[[246,6]]},"1479":{"position":[[511,6],[582,9]]}},"keywords":{}}],["select_catalog_rol",{"_index":4856,"title":{},"content":{"864":{"position":[[1056,19]]},"876":{"position":[[873,19]]}},"keywords":{}}],["select_properties_by_default",{"_index":4564,"title":{},"content":{"747":{"position":[[591,29]]},"748":{"position":[[264,29]]}},"keywords":{}}],["selector",{"_index":488,"title":{"17":{"position":[[10,10]]},"123":{"position":[[10,10]]},"130":{"position":[[10,10]]}},"content":{"17":{"position":[[125,9],[236,9],[1048,9]]},"94":{"position":[[1446,8]]},"106":{"position":[[181,8],[278,9],[334,8]]},"123":{"position":[[11,9],[468,9],[629,9],[842,10]]},"130":{"position":[[38,8],[422,10]]},"144":{"position":[[580,8]]},"218":{"position":[[1980,8]]},"230":{"position":[[457,9]]},"302":{"position":[[1026,9]]},"1472":{"position":[[289,8],[393,8]]}},"keywords":{}}],["self",{"_index":1299,"title":{"175":{"position":[[0,4]]},"752":{"position":[[0,4]]},"791":{"position":[[0,4]]},"917":{"position":[[0,4]]},"1042":{"position":[[0,4]]},"1408":{"position":[[0,4]]}},"content":{"88":{"position":[[245,4]]},"92":{"position":[[805,4]]},"175":{"position":[[83,4],[153,4],[347,4]]},"179":{"position":[[593,4]]},"280":{"position":[[799,4]]},"329":{"position":[[647,4]]},"788":{"position":[[68,4],[154,4]]},"790":{"position":[[70,4]]},"914":{"position":[[97,4],[183,4]]},"916":{"position":[[70,4]]},"989":{"position":[[1085,4]]},"1004":{"position":[[1168,4]]},"1039":{"position":[[287,4]]},"1041":{"position":[[70,4]]},"1050":{"position":[[985,4]]},"1407":{"position":[[70,4]]}},"keywords":{}}],["semant",{"_index":570,"title":{"1166":{"position":[[14,10]]},"1435":{"position":[[13,10]]}},"content":{"21":{"position":[[505,10]]},"114":{"position":[[741,10]]},"115":{"position":[[1058,10],[1173,10],[1523,9]]},"124":{"position":[[363,10]]},"319":{"position":[[1158,9],[1353,9]]},"320":{"position":[[699,10]]},"332":{"position":[[172,10]]},"1358":{"position":[[352,9],[718,10]]},"1437":{"position":[[555,10]]},"1438":{"position":[[94,10]]},"1439":{"position":[[1364,8],[1724,9]]},"1442":{"position":[[844,10],[1690,9],[1809,9]]},"1459":{"position":[[570,9]]}},"keywords":{}}],["semantickeyph",{"_index":6357,"title":{},"content":{"1379":{"position":[[5354,13]]},"1403":{"position":[[5354,13]]},"1414":{"position":[[5354,13]]}},"keywords":{}}],["semanticsimil",{"_index":6340,"title":{},"content":{"1379":{"position":[[3766,13],[3826,13]]},"1403":{"position":[[3766,13],[3826,13]]},"1414":{"position":[[3766,13],[3826,13]]}},"keywords":{}}],["semi",{"_index":5818,"title":{},"content":{"1192":{"position":[[558,4],[563,4]]}},"keywords":{}}],["send",{"_index":1707,"title":{"486":{"position":[[0,4]]},"658":{"position":[[0,4]]},"674":{"position":[[0,4]]},"689":{"position":[[0,4]]}},"content":{"125":{"position":[[1064,5]]},"174":{"position":[[341,4]]},"277":{"position":[[523,4],[576,5],[876,4]]},"278":{"position":[[165,7],[181,5],[857,4],[905,5]]},"280":{"position":[[504,5]]},"485":{"position":[[505,4]]},"486":{"position":[[173,4],[268,4],[306,7]]},"489":{"position":[[357,4]]},"517":{"position":[[3263,7],[3501,7]]},"635":{"position":[[245,4]]},"640":{"position":[[57,4]]},"657":{"position":[[690,4]]},"658":{"position":[[173,4],[268,4],[306,7]]},"662":{"position":[[357,4]]},"673":{"position":[[505,4]]},"674":{"position":[[173,4],[268,4],[306,7]]},"675":{"position":[[362,4]]},"677":{"position":[[357,4]]},"688":{"position":[[505,4]]},"689":{"position":[[173,4],[268,4],[306,7]]},"692":{"position":[[357,4]]},"697":{"position":[[169,4]]},"922":{"position":[[137,7]]},"1239":{"position":[[93,4]]},"1267":{"position":[[226,4]]},"1269":{"position":[[87,4]]},"1362":{"position":[[633,4]]},"1434":{"position":[[954,4]]},"1440":{"position":[[280,5]]},"1442":{"position":[[245,5],[479,7],[1707,4],[1826,4],[1862,7]]},"1443":{"position":[[540,7],[851,4],[886,7]]},"1444":{"position":[[235,5]]},"1453":{"position":[[84,7]]}},"keywords":{}}],["send.flow.yamlfirst",{"_index":2838,"title":{},"content":{"278":{"position":[[837,19]]}},"keywords":{}}],["send.flow.yamllast",{"_index":2827,"title":{},"content":{"277":{"position":[[498,18]]}},"keywords":{}}],["send_email",{"_index":4543,"title":{},"content":{"738":{"position":[[278,11]]}},"keywords":{}}],["sendemail",{"_index":4454,"title":{},"content":{"697":{"position":[[159,9]]}},"keywords":{}}],["sender",{"_index":1518,"title":{},"content":{"107":{"position":[[629,7],[1023,7],[1114,7],[2004,10],[2023,6],[2091,9],[2111,9]]},"277":{"position":[[377,7],[617,9],[749,8]]},"278":{"position":[[297,8],[1015,6],[1074,8],[1172,9],[1225,8],[1252,9],[1312,8]]},"279":{"position":[[1310,6],[1428,9],[1522,9],[1635,9]]},"280":{"position":[[365,7],[1670,7],[1724,9],[1833,6]]},"281":{"position":[[1509,7]]},"1362":{"position":[[719,6]]}},"keywords":{}}],["sender'",{"_index":2863,"title":{},"content":{"280":{"position":[[414,8],[1226,8]]}},"keywords":{}}],["sender_bal",{"_index":2870,"title":{},"content":{"280":{"position":[[1292,15],[1421,15]]}},"keywords":{}}],["sender_config",{"_index":6287,"title":{},"content":{"1363":{"position":[[322,14]]}},"keywords":{}}],["sendgrid",{"_index":3375,"title":{"978":{"position":[[0,8]]}},"content":{"364":{"position":[[3082,8]]},"979":{"position":[[56,8]]},"980":{"position":[[1,8]]},"981":{"position":[[250,8]]},"982":{"position":[[68,8],[102,8],[222,8],[430,8]]}},"keywords":{}}],["sendgrid:dev",{"_index":3376,"title":{},"content":{"364":{"position":[[3137,12]]},"983":{"position":[[90,12]]}},"keywords":{}}],["sendsacknowledg",{"_index":6498,"title":{},"content":{"1442":{"position":[[144,16],[1156,18]]}},"keywords":{}}],["sendstemplatesglob",{"_index":5136,"title":{},"content":{"979":{"position":[[126,20]]}},"keywords":{}}],["sens",{"_index":3166,"title":{},"content":{"324":{"position":[[705,5]]},"326":{"position":[[514,5]]}},"keywords":{}}],["sensit",{"_index":1141,"title":{},"content":{"81":{"position":[[2910,9]]},"82":{"position":[[90,9],[1123,9],[3496,9],[3514,9],[3637,9]]},"124":{"position":[[398,9]]},"496":{"position":[[120,10]]},"548":{"position":[[729,9]]},"865":{"position":[[135,10]]},"877":{"position":[[135,9]]},"1140":{"position":[[3496,9]]},"1292":{"position":[[4811,9]]},"1306":{"position":[[4811,9]]},"1316":{"position":[[3496,9]]},"1329":{"position":[[4811,9]]},"1340":{"position":[[3496,9]]},"1351":{"position":[[3496,9]]},"1379":{"position":[[3893,9]]},"1403":{"position":[[3893,9]]},"1414":{"position":[[3893,9]]},"1431":{"position":[[3519,9]]}},"keywords":{}}],["sensitive!"",{"_index":1162,"title":{},"content":{"82":{"position":[[1428,16],[3863,16]]}},"keywords":{}}],["sensor",{"_index":1578,"title":{},"content":{"110":{"position":[[746,6],[1083,6],[1136,7],[1283,6]]}},"keywords":{}}],["sent",{"_index":3871,"title":{},"content":{"488":{"position":[[889,4],[1018,4]]},"659":{"position":[[1046,4],[1175,4]]},"660":{"position":[[160,4]]},"676":{"position":[[889,4],[1018,4]]},"691":{"position":[[889,4],[1018,4]]},"922":{"position":[[567,4],[728,4]]},"1240":{"position":[[128,5]]},"1362":{"position":[[554,4]]},"1442":{"position":[[60,4],[388,4],[612,4]]},"1443":{"position":[[32,4],[580,4]]},"1444":{"position":[[33,4]]},"1453":{"position":[[492,4],[578,4]]},"1455":{"position":[[587,4]]},"1456":{"position":[[137,4]]}},"keywords":{}}],["sent<br/>befor",{"_index":6443,"title":{},"content":{"1434":{"position":[[743,21]]}},"keywords":{}}],["sentacknowledg",{"_index":6505,"title":{},"content":{"1443":{"position":[[432,16]]}},"keywords":{}}],["sentri",{"_index":3377,"title":{"993":{"position":[[0,6]]}},"content":{"364":{"position":[[3150,6]]},"994":{"position":[[56,6]]},"995":{"position":[[15,6],[56,6]]},"996":{"position":[[250,6]]},"997":{"position":[[107,6],[398,6]]}},"keywords":{}}],["sentry:dev",{"_index":3378,"title":{},"content":{"364":{"position":[[3203,10]]},"998":{"position":[[90,10]]}},"keywords":{}}],["separ",{"_index":469,"title":{},"content":{"16":{"position":[[588,8]]},"38":{"position":[[295,8]]},"56":{"position":[[1569,9]]},"81":{"position":[[2485,8],[2772,8]]},"120":{"position":[[874,8]]},"121":{"position":[[1710,8]]},"154":{"position":[[628,8]]},"162":{"position":[[1071,10],[1299,8]]},"165":{"position":[[1182,8]]},"207":{"position":[[363,8],[1082,8]]},"208":{"position":[[608,10]]},"236":{"position":[[547,8]]},"296":{"position":[[2539,8]]},"306":{"position":[[257,11]]},"320":{"position":[[1102,8]]},"324":{"position":[[1127,9]]},"370":{"position":[[1080,9]]},"377":{"position":[[1608,9]]},"379":{"position":[[288,8]]},"381":{"position":[[607,8]]},"385":{"position":[[559,8]]},"419":{"position":[[1794,9],[2622,9]]},"421":{"position":[[206,8]]},"432":{"position":[[153,9]]},"441":{"position":[[403,9],[1231,9]]},"443":{"position":[[565,8]]},"451":{"position":[[215,8]]},"457":{"position":[[219,8]]},"463":{"position":[[325,8]]},"470":{"position":[[88,8]]},"483":{"position":[[639,8],[722,8]]},"488":{"position":[[496,8]]},"491":{"position":[[392,8]]},"504":{"position":[[1423,9],[2251,9]]},"506":{"position":[[482,8]]},"512":{"position":[[242,8]]},"517":{"position":[[470,11]]},"521":{"position":[[395,8]]},"529":{"position":[[774,8]]},"534":{"position":[[798,9]]},"537":{"position":[[231,8]]},"547":{"position":[[1796,9],[2624,9]]},"550":{"position":[[479,8]]},"556":{"position":[[1405,9]]},"568":{"position":[[289,8]]},"580":{"position":[[231,8]]},"605":{"position":[[437,8]]},"622":{"position":[[443,8]]},"628":{"position":[[507,8]]},"639":{"position":[[1421,9],[2249,9]]},"649":{"position":[[105,8]]},"659":{"position":[[653,8]]},"664":{"position":[[413,8],[648,8]]},"667":{"position":[[292,8]]},"676":{"position":[[496,8]]},"679":{"position":[[392,8]]},"682":{"position":[[263,8]]},"691":{"position":[[496,8]]},"694":{"position":[[392,8]]},"697":{"position":[[632,8]]},"703":{"position":[[197,8]]},"709":{"position":[[885,8]]},"715":{"position":[[254,8]]},"720":{"position":[[284,9]]},"738":{"position":[[809,8]]},"744":{"position":[[199,8]]},"757":{"position":[[1425,9]]},"770":{"position":[[1425,9]]},"782":{"position":[[361,9]]},"797":{"position":[[1425,9]]},"812":{"position":[[1425,9]]},"828":{"position":[[1425,9]]},"854":{"position":[[148,8]]},"862":{"position":[[98,8]]},"867":{"position":[[541,9]]},"874":{"position":[[98,8]]},"882":{"position":[[159,8]]},"888":{"position":[[214,8]]},"907":{"position":[[863,9]]},"909":{"position":[[251,11]]},"923":{"position":[[863,9]]},"925":{"position":[[251,11]]},"934":{"position":[[863,9]]},"936":{"position":[[251,11]]},"950":{"position":[[863,9]]},"952":{"position":[[251,11]]},"956":{"position":[[235,8]]},"968":{"position":[[863,9]]},"970":{"position":[[251,11]]},"977":{"position":[[70,8]]},"979":{"position":[[309,8]]},"994":{"position":[[167,8]]},"1012":{"position":[[294,8]]},"1023":{"position":[[1777,9],[2605,9]]},"1025":{"position":[[441,8]]},"1045":{"position":[[711,9]]},"1053":{"position":[[711,9]]},"1061":{"position":[[711,9]]},"1065":{"position":[[166,8]]},"1073":{"position":[[418,8]]},"1080":{"position":[[875,8]]},"1099":{"position":[[539,8]]},"1104":{"position":[[237,8]]},"1110":{"position":[[557,8]]},"1128":{"position":[[474,8]]},"1144":{"position":[[918,8]]},"1156":{"position":[[224,8]]},"1213":{"position":[[595,8]]},"1247":{"position":[[813,8]]},"1275":{"position":[[416,9]]},"1292":{"position":[[4854,9]]},"1306":{"position":[[4854,9]]},"1329":{"position":[[4854,9]]},"1453":{"position":[[1478,8]]},"1461":{"position":[[657,8],[2438,8],[2591,8],[2634,8]]},"1462":{"position":[[676,8],[701,8]]}},"keywords":{}}],["sequenc",{"_index":750,"title":{"1434":{"position":[[0,8]]}},"content":{"43":{"position":[[209,8]]},"137":{"position":[[391,9]]},"590":{"position":[[693,8]]},"922":{"position":[[294,8]]},"1379":{"position":[[3956,8]]},"1403":{"position":[[3956,8]]},"1414":{"position":[[3956,8]]}},"keywords":{}}],["sequencediagram",{"_index":6431,"title":{},"content":{"1434":{"position":[[189,15]]}},"keywords":{}}],["sequenti",{"_index":3545,"title":{},"content":{"402":{"position":[[858,11]]},"1459":{"position":[[796,10]]}},"keywords":{}}],["seri",{"_index":6420,"title":{},"content":{"1429":{"position":[[69,6]]}},"keywords":{}}],["serial",{"_index":3872,"title":{},"content":{"488":{"position":[[930,10]]},"659":{"position":[[1087,10]]},"676":{"position":[[930,10]]},"691":{"position":[[930,10]]},"1292":{"position":[[4906,6]]},"1306":{"position":[[4906,6]]},"1329":{"position":[[4906,6]]}},"keywords":{}}],["serializ",{"_index":6171,"title":{},"content":{"1292":{"position":[[4951,12]]},"1306":{"position":[[4951,12]]},"1329":{"position":[[4951,12]]}},"keywords":{}}],["serv",{"_index":313,"title":{},"content":{"11":{"position":[[660,6]]},"77":{"position":[[190,6]]},"81":{"position":[[2787,6]]},"208":{"position":[[718,5]]},"305":{"position":[[18,5]]},"313":{"position":[[3428,5]]},"320":{"position":[[1264,5],[1372,5]]},"660":{"position":[[343,6]]},"1477":{"position":[[857,6]]}},"keywords":{}}],["server",{"_index":1221,"title":{"1038":{"position":[[14,6]]},"1042":{"position":[[16,7]]},"1048":{"position":[[19,6]]},"1056":{"position":[[25,6]]},"1371":{"position":[[19,6]]},"1373":{"position":[[25,7]]},"1397":{"position":[[31,7]]},"1408":{"position":[[16,7]]}},"content":{"83":{"position":[[516,7],[663,7],[1150,6],[1303,7]]},"88":{"position":[[196,8]]},"141":{"position":[[1044,6]]},"221":{"position":[[37,7],[206,6],[451,7],[564,7],[818,6],[1492,6],[1618,6],[1713,7]]},"225":{"position":[[262,6]]},"363":{"position":[[483,6],[780,6],[1247,6],[1649,6]]},"370":{"position":[[1568,6],[1758,6],[1966,7]]},"432":{"position":[[89,7],[109,7],[697,8]]},"698":{"position":[[67,6]]},"753":{"position":[[387,6],[687,6],[1551,6]]},"754":{"position":[[21,6]]},"757":{"position":[[69,6]]},"764":{"position":[[257,6]]},"767":{"position":[[533,6]]},"770":{"position":[[69,6]]},"777":{"position":[[257,6]]},"784":{"position":[[170,6]]},"792":{"position":[[811,6]]},"793":{"position":[[346,6],[647,6],[1574,6]]},"794":{"position":[[19,6]]},"797":{"position":[[69,6]]},"804":{"position":[[255,6]]},"808":{"position":[[362,6]]},"809":{"position":[[19,6]]},"812":{"position":[[69,6]]},"819":{"position":[[255,6]]},"824":{"position":[[603,6]]},"825":{"position":[[19,6]]},"828":{"position":[[69,6]]},"835":{"position":[[255,6]]},"866":{"position":[[363,6]]},"878":{"position":[[373,6]]},"904":{"position":[[602,6]]},"918":{"position":[[811,6]]},"919":{"position":[[346,6],[2481,6]]},"922":{"position":[[125,7],[964,6],[1394,6]]},"931":{"position":[[366,6]]},"989":{"position":[[1243,6]]},"1004":{"position":[[1326,6]]},"1018":{"position":[[21,6]]},"1020":{"position":[[135,6],[227,6],[285,6],[536,6]]},"1021":{"position":[[376,7]]},"1023":{"position":[[6,7]]},"1039":{"position":[[138,6],[204,6],[377,6]]},"1040":{"position":[[35,6],[833,6]]},"1041":{"position":[[161,6]]},"1042":{"position":[[16,6],[1189,6]]},"1043":{"position":[[346,6],[1845,6]]},"1044":{"position":[[254,6]]},"1045":{"position":[[69,6]]},"1047":{"position":[[60,6],[197,6]]},"1049":{"position":[[64,6],[130,6]]},"1050":{"position":[[35,6],[833,6],[1075,6]]},"1051":{"position":[[602,6]]},"1052":{"position":[[254,6]]},"1053":{"position":[[69,6]]},"1055":{"position":[[60,6],[197,6]]},"1057":{"position":[[67,6],[133,6]]},"1058":{"position":[[35,6],[833,6]]},"1059":{"position":[[366,6]]},"1060":{"position":[[254,6]]},"1061":{"position":[[69,6]]},"1063":{"position":[[60,6],[197,6]]},"1118":{"position":[[379,8]]},"1120":{"position":[[243,6],[618,6],[1217,6],[1888,6]]},"1138":{"position":[[859,6],[1049,6],[1256,7]]},"1154":{"position":[[544,6]]},"1198":{"position":[[259,6]]},"1236":{"position":[[70,6]]},"1240":{"position":[[102,6]]},"1255":{"position":[[170,6]]},"1268":{"position":[[461,6],[518,6],[699,6]]},"1272":{"position":[[130,6]]},"1285":{"position":[[989,6],[1008,6]]},"1286":{"position":[[19,6],[1763,6],[1969,6],[2163,6],[2357,6]]},"1289":{"position":[[876,6],[1677,6]]},"1292":{"position":[[5001,6]]},"1300":{"position":[[989,6],[1008,6]]},"1301":{"position":[[19,6],[1599,6],[1805,6],[1999,6],[2193,6]]},"1303":{"position":[[366,6]]},"1306":{"position":[[5001,6]]},"1310":{"position":[[998,6]]},"1322":{"position":[[1095,6]]},"1324":{"position":[[989,6],[1008,6]]},"1325":{"position":[[19,6],[1763,6],[1969,6],[2163,6],[2357,6]]},"1329":{"position":[[5001,6]]},"1373":{"position":[[584,6]]},"1374":{"position":[[584,6]]},"1397":{"position":[[363,6]]},"1398":{"position":[[362,6]]},"1407":{"position":[[160,6]]},"1408":{"position":[[16,6],[462,6]]},"1409":{"position":[[346,6],[1118,6]]}},"keywords":{}}],["server'",{"_index":2438,"title":{},"content":{"221":{"position":[[111,8]]},"225":{"position":[[129,8]]},"1268":{"position":[[495,8],[621,8]]},"1286":{"position":[[1846,8],[1926,8],[2004,8],[2251,8],[2280,8]]},"1301":{"position":[[1682,8],[1762,8],[1840,8],[2087,8],[2116,8]]},"1325":{"position":[[1846,8],[1926,8],[2004,8],[2251,8],[2280,8]]}},"keywords":{}}],["server)googl",{"_index":5241,"title":{},"content":{"1041":{"position":[[129,13]]}},"keywords":{}}],["server.pref",{"_index":5930,"title":{},"content":{"1268":{"position":[[197,17]]}},"keywords":{}}],["server.requir",{"_index":5931,"title":{},"content":{"1268":{"position":[[268,16]]}},"keywords":{}}],["serverazur",{"_index":5234,"title":{},"content":{"1039":{"position":[[303,11]]},"1041":{"position":[[86,11]]},"1050":{"position":[[1001,11]]},"1407":{"position":[[86,11]]}},"keywords":{}}],["servergoogl",{"_index":5236,"title":{},"content":{"1039":{"position":[[346,12]]},"1050":{"position":[[1044,12]]},"1407":{"position":[[129,12]]}},"keywords":{}}],["serverpref",{"_index":5975,"title":{},"content":{"1286":{"position":[[1715,16]]},"1301":{"position":[[1551,16]]},"1325":{"position":[[1715,16]]}},"keywords":{}}],["server’",{"_index":5932,"title":{},"content":{"1268":{"position":[[338,8],[415,8]]}},"keywords":{}}],["servic",{"_index":513,"title":{"477":{"position":[[0,7]]},"478":{"position":[[0,7]]},"548":{"position":[[27,7]]},"571":{"position":[[31,7]]},"582":{"position":[[31,7]]},"598":{"position":[[0,7]]},"599":{"position":[[0,7]]},"609":{"position":[[31,7]]}},"content":{"19":{"position":[[150,7]]},"82":{"position":[[3319,7]]},"173":{"position":[[979,7]]},"204":{"position":[[548,9]]},"221":{"position":[[150,7]]},"224":{"position":[[1005,7]]},"234":{"position":[[208,7],[267,8]]},"236":{"position":[[366,7],[442,8],[585,9]]},"237":{"position":[[2966,8],[3196,8],[3242,7],[3382,7]]},"238":{"position":[[79,9],[182,9]]},"288":{"position":[[337,7],[472,7],[514,7],[548,7]]},"290":{"position":[[880,7],[1052,7]]},"329":{"position":[[240,9]]},"436":{"position":[[907,7],[1085,7],[1116,8]]},"475":{"position":[[127,7],[242,7],[288,7]]},"477":{"position":[[56,7],[332,7],[429,7],[527,7],[604,7],[644,7],[678,7],[870,7],[951,7]]},"478":{"position":[[1,7],[57,7],[128,7],[193,7],[386,7],[462,7]]},"479":{"position":[[355,7]]},"482":{"position":[[309,7]]},"543":{"position":[[100,7],[227,7],[321,7]]},"545":{"position":[[650,7],[666,7]]},"548":{"position":[[68,7],[107,7],[200,7]]},"569":{"position":[[142,7],[253,7]]},"571":{"position":[[198,7],[566,7],[731,7],[811,7]]},"573":{"position":[[49,7],[289,7],[377,7],[485,7]]},"575":{"position":[[243,7]]},"581":{"position":[[466,7]]},"582":{"position":[[62,7],[177,7],[344,7],[424,7]]},"584":{"position":[[277,7],[344,7],[416,7]]},"586":{"position":[[207,7]]},"591":{"position":[[24,7],[159,7],[201,7],[235,7]]},"593":{"position":[[104,7]]},"597":{"position":[[126,7],[205,7],[251,7]]},"598":{"position":[[55,7],[296,7],[393,7],[491,7],[568,7],[608,7],[642,7],[832,7],[913,7]]},"599":{"position":[[1,7],[57,7],[128,7],[193,7],[386,7],[462,7]]},"601":{"position":[[172,7],[206,7]]},"607":{"position":[[140,7],[252,7]]},"608":{"position":[[123,7]]},"609":{"position":[[24,7],[188,7],[288,7],[398,7]]},"611":{"position":[[334,7],[418,7],[463,7]]},"612":{"position":[[217,7]]},"614":{"position":[[125,7],[236,7]]},"617":{"position":[[150,7],[488,7],[655,7],[766,7],[885,7]]},"619":{"position":[[49,7],[332,8],[390,7]]},"620":{"position":[[139,7]]},"659":{"position":[[35,8],[148,8]]},"660":{"position":[[95,8],[257,8],[983,8],[1020,7]]},"745":{"position":[[65,7]]},"849":{"position":[[629,9],[684,9]]},"1070":{"position":[[285,7]]},"1162":{"position":[[129,9],[236,9]]},"1176":{"position":[[143,7],[458,7]]},"1177":{"position":[[19,7],[114,7],[322,7],[355,7]]},"1179":{"position":[[190,7],[239,7]]},"1211":{"position":[[148,7],[247,7]]},"1213":{"position":[[146,7],[195,7]]},"1218":{"position":[[148,7],[247,7]]},"1220":{"position":[[146,7],[195,7]]},"1228":{"position":[[114,7],[290,7],[361,7]]},"1230":{"position":[[238,7],[339,7],[380,7]]},"1231":{"position":[[165,7]]},"1236":{"position":[[80,7]]},"1243":{"position":[[1191,7]]},"1245":{"position":[[92,7],[440,7],[607,7],[711,7]]},"1247":{"position":[[409,7],[510,7],[551,7],[608,7],[756,7]]},"1248":{"position":[[165,7]]},"1258":{"position":[[63,7]]},"1260":{"position":[[78,7],[92,7]]},"1282":{"position":[[240,8]]},"1288":{"position":[[214,8]]},"1310":{"position":[[255,8]]}},"keywords":{}}],["service_account",{"_index":4097,"title":{},"content":{"548":{"position":[[1506,15]]}},"keywords":{}}],["service_account_impersonation_url",{"_index":4087,"title":{},"content":{"548":{"position":[[940,34]]}},"keywords":{}}],["service_account_info",{"_index":4310,"title":{},"content":{"612":{"position":[[225,21]]},"620":{"position":[[147,21]]}},"keywords":{}}],["service_healthi",{"_index":2538,"title":{},"content":{"236":{"position":[[1461,15]]}},"keywords":{}}],["serviceaccount",{"_index":4567,"title":{},"content":{"748":{"position":[[135,14]]}},"keywords":{}}],["serviceaccounts/<target",{"_index":4089,"title":{},"content":{"548":{"position":[[1026,27]]}},"keywords":{}}],["servicemarketo",{"_index":4552,"title":{},"content":{"739":{"position":[[138,14]]}},"keywords":{}}],["servicesus",{"_index":4822,"title":{},"content":{"849":{"position":[[2302,12]]}},"keywords":{}}],["session",{"_index":452,"title":{},"content":{"16":{"position":[[156,9]]},"17":{"position":[[971,8]]},"58":{"position":[[862,8]]},"60":{"position":[[251,7]]},"68":{"position":[[720,8]]},"169":{"position":[[1308,7]]},"339":{"position":[[33,7],[97,8]]},"340":{"position":[[158,7]]},"421":{"position":[[110,7]]},"577":{"position":[[175,8]]},"588":{"position":[[170,8]]},"864":{"position":[[274,7]]},"876":{"position":[[274,7]]},"1073":{"position":[[135,8]]},"1140":{"position":[[3539,7]]},"1292":{"position":[[5047,7]]},"1306":{"position":[[5047,7]]},"1316":{"position":[[3539,7]]},"1329":{"position":[[5047,7]]},"1340":{"position":[[3539,7]]},"1351":{"position":[[3539,7]]},"1379":{"position":[[4015,7]]},"1403":{"position":[[4015,7]]},"1414":{"position":[[4015,7]]},"1431":{"position":[[3562,7]]}},"keywords":{}}],["session.schema.yaml",{"_index":453,"title":{},"content":{"16":{"position":[[174,19]]}},"keywords":{}}],["session_us",{"_index":5675,"title":{},"content":{"1140":{"position":[[3575,12]]},"1316":{"position":[[3575,12]]},"1340":{"position":[[3575,12]]},"1351":{"position":[[3575,12]]},"1379":{"position":[[4060,12]]},"1403":{"position":[[4060,12]]},"1414":{"position":[[4060,12]]},"1431":{"position":[[3598,12]]}},"keywords":{}}],["sessions"",{"_index":473,"title":{},"content":{"16":{"position":[[830,14]]}},"keywords":{}}],["sessionscheckout",{"_index":5278,"title":{},"content":{"1073":{"position":[[118,16]]}},"keywords":{}}],["set",{"_index":226,"title":{"200":{"position":[[0,7]]},"205":{"position":[[0,7]]},"235":{"position":[[8,3]]},"239":{"position":[[8,3]]},"240":{"position":[[8,3]]},"250":{"position":[[3,3]]},"253":{"position":[[0,7]]},"295":{"position":[[0,7]]},"313":{"position":[[0,7]]},"338":{"position":[[22,9]]},"349":{"position":[[0,3]]},"479":{"position":[[0,3]]},"754":{"position":[[0,7]]},"794":{"position":[[0,7]]},"809":{"position":[[0,7]]},"825":{"position":[[0,7]]},"1091":{"position":[[0,3]]},"1092":{"position":[[0,3]]},"1286":{"position":[[0,7]]},"1301":{"position":[[0,7]]},"1325":{"position":[[0,7]]},"1477":{"position":[[0,3]]}},"content":{"7":{"position":[[9,3]]},"20":{"position":[[1056,3]]},"33":{"position":[[20,3]]},"55":{"position":[[430,3],[784,3]]},"56":{"position":[[81,3],[422,3],[1975,3]]},"69":{"position":[[84,3]]},"72":{"position":[[46,3]]},"83":{"position":[[634,3]]},"94":{"position":[[2852,4]]},"120":{"position":[[89,3]]},"123":{"position":[[609,7]]},"126":{"position":[[242,3]]},"154":{"position":[[2159,9]]},"165":{"position":[[869,3]]},"177":{"position":[[278,8]]},"179":{"position":[[474,3]]},"180":{"position":[[272,3]]},"183":{"position":[[174,3],[278,3],[4552,4]]},"191":{"position":[[550,3],[584,3],[619,3],[654,3],[689,3],[722,3]]},"192":{"position":[[1066,3]]},"202":{"position":[[393,3]]},"203":{"position":[[56,3],[115,3],[147,3],[213,4],[439,5]]},"204":{"position":[[757,3]]},"206":{"position":[[371,7]]},"207":{"position":[[759,3]]},"208":{"position":[[95,8]]},"209":{"position":[[222,7],[1344,3],[1626,3]]},"210":{"position":[[2100,3]]},"211":{"position":[[23,3],[466,8]]},"221":{"position":[[1762,8]]},"222":{"position":[[882,7]]},"223":{"position":[[80,3]]},"230":{"position":[[1026,3]]},"232":{"position":[[25,3],[296,3]]},"236":{"position":[[3553,3]]},"237":{"position":[[963,3],[1825,3],[1978,3],[2286,7],[2500,7]]},"238":{"position":[[691,7]]},"239":{"position":[[1878,8],[2879,7]]},"240":{"position":[[45,3],[511,3],[545,3],[580,3],[615,3],[650,3],[683,3],[2246,7],[3356,3],[4858,7]]},"241":{"position":[[41,3]]},"253":{"position":[[75,3]]},"254":{"position":[[1,3],[3289,3]]},"267":{"position":[[436,3]]},"280":{"position":[[2150,3]]},"295":{"position":[[1504,3]]},"296":{"position":[[1,3],[2375,7]]},"301":{"position":[[1250,9]]},"308":{"position":[[673,3],[1047,3]]},"313":{"position":[[75,3]]},"314":{"position":[[1,3],[2864,3]]},"321":{"position":[[215,3]]},"329":{"position":[[1168,3]]},"343":{"position":[[249,4],[674,4]]},"347":{"position":[[4,3],[203,8]]},"348":{"position":[[27,3],[106,9]]},"351":{"position":[[91,8],[156,8]]},"364":{"position":[[243,3]]},"366":{"position":[[542,3]]},"367":{"position":[[51,3],[301,3]]},"370":{"position":[[2205,3]]},"374":{"position":[[336,3]]},"375":{"position":[[238,3]]},"377":{"position":[[548,3],[1364,3],[1786,4]]},"387":{"position":[[302,3]]},"406":{"position":[[23,3]]},"410":{"position":[[62,3]]},"413":{"position":[[433,3]]},"414":{"position":[[921,7]]},"419":{"position":[[1969,3]]},"428":{"position":[[147,3]]},"429":{"position":[[837,3]]},"432":{"position":[[318,9],[1326,3]]},"441":{"position":[[578,3]]},"446":{"position":[[133,3]]},"448":{"position":[[328,3],[1119,3]]},"452":{"position":[[4,3]]},"458":{"position":[[4,3]]},"464":{"position":[[91,3],[185,8],[264,8],[279,8]]},"472":{"position":[[404,3]]},"476":{"position":[[27,3]]},"478":{"position":[[645,7]]},"479":{"position":[[724,8]]},"483":{"position":[[744,7]]},"488":{"position":[[722,3]]},"492":{"position":[[99,3],[175,4],[233,4]]},"496":{"position":[[635,3],[720,3]]},"504":{"position":[[1598,3]]},"509":{"position":[[468,4]]},"515":{"position":[[535,3]]},"517":{"position":[[1616,7],[2310,3],[2777,7],[3329,3],[3628,3]]},"522":{"position":[[426,8]]},"530":{"position":[[426,8]]},"531":{"position":[[188,8],[219,9]]},"534":{"position":[[589,3]]},"538":{"position":[[4,3]]},"547":{"position":[[1971,3]]},"548":{"position":[[231,3]]},"552":{"position":[[23,7],[289,7]]},"556":{"position":[[1964,3]]},"563":{"position":[[9,3],[158,7]]},"573":{"position":[[370,3],[1437,3]]},"577":{"position":[[452,3]]},"582":{"position":[[154,3]]},"584":{"position":[[337,3],[1109,7],[1500,3]]},"588":{"position":[[447,3]]},"599":{"position":[[645,7]]},"602":{"position":[[316,3]]},"609":{"position":[[360,3]]},"611":{"position":[[327,3]]},"616":{"position":[[263,3]]},"619":{"position":[[325,3],[746,3]]},"623":{"position":[[4,3]]},"629":{"position":[[4,3]]},"639":{"position":[[1596,3]]},"646":{"position":[[651,3]]},"649":{"position":[[564,4]]},"654":{"position":[[372,3]]},"659":{"position":[[879,3]]},"660":{"position":[[652,3]]},"661":{"position":[[324,3],[475,3]]},"665":{"position":[[99,3],[175,4],[233,4]]},"676":{"position":[[722,3]]},"680":{"position":[[99,3],[175,4],[233,4]]},"691":{"position":[[722,3]]},"695":{"position":[[99,3],[175,4],[233,4]]},"698":{"position":[[4,3]]},"704":{"position":[[4,3]]},"720":{"position":[[503,3]]},"735":{"position":[[269,3],[552,3]]},"745":{"position":[[4,3]]},"747":{"position":[[543,8],[796,4]]},"750":{"position":[[111,3],[151,3],[231,3],[1127,3],[1353,3]]},"752":{"position":[[931,3],[943,3],[1064,3]]},"753":{"position":[[652,3]]},"754":{"position":[[47,3],[125,3],[162,3],[288,3],[423,3],[620,3],[809,3],[1045,3],[1279,3]]},"757":{"position":[[724,4],[2156,3],[2288,4]]},"764":{"position":[[150,3],[846,7]]},"766":{"position":[[111,3],[151,3],[231,3],[1127,3]]},"767":{"position":[[90,7],[928,3],[1226,3],[1465,3],[1804,3],[2226,3]]},"770":{"position":[[724,4],[2156,3],[2288,4]]},"777":{"position":[[150,3],[846,7]]},"780":{"position":[[439,4]]},"785":{"position":[[532,3],[786,3]]},"786":{"position":[[178,9],[479,8]]},"789":{"position":[[109,3],[169,3],[265,3],[1528,3],[1754,3]]},"791":{"position":[[931,7],[965,3],[977,3],[1098,3]]},"792":{"position":[[28,8],[1222,3],[1522,3],[1744,3],[2218,3]]},"793":{"position":[[612,3]]},"794":{"position":[[45,3],[161,3],[296,3],[826,3],[1015,3],[1249,3],[1483,3]]},"797":{"position":[[724,4],[2163,3],[2295,4]]},"804":{"position":[[148,3],[844,7]]},"807":{"position":[[109,3],[169,3],[265,3],[1115,3]]},"808":{"position":[[628,3]]},"809":{"position":[[45,3],[161,3],[296,3],[826,3],[1015,3],[1249,3],[1483,3]]},"812":{"position":[[724,4],[2163,3],[2295,4]]},"819":{"position":[[148,3],[844,7]]},"821":{"position":[[863,3]]},"823":{"position":[[109,3],[169,3],[265,3],[1115,3]]},"824":{"position":[[203,7],[997,3],[1292,3],[1529,3],[1866,3],[2340,3]]},"825":{"position":[[45,3],[161,3],[296,3],[662,3],[851,3],[1085,3],[1319,3]]},"828":{"position":[[724,4],[2163,3],[2295,4]]},"835":{"position":[[148,3],[844,7]]},"840":{"position":[[106,3],[856,3],[1580,3]]},"847":{"position":[[368,3]]},"849":{"position":[[1,3],[1469,3],[1891,8],[2612,3]]},"859":{"position":[[362,3],[659,3]]},"863":{"position":[[27,3]]},"875":{"position":[[27,3]]},"894":{"position":[[4,3]]},"895":{"position":[[27,3]]},"897":{"position":[[132,3]]},"903":{"position":[[568,3]]},"904":{"position":[[203,7],[995,3],[1103,3],[1405,3],[1915,3]]},"907":{"position":[[1348,7],[1610,3],[1731,3],[1810,7]]},"912":{"position":[[1509,3]]},"915":{"position":[[568,3],[1210,3]]},"917":{"position":[[863,3],[1424,3],[1815,3],[1855,3]]},"918":{"position":[[28,8],[1198,3],[1394,3],[1697,3],[2207,3]]},"919":{"position":[[668,3],[1388,3],[1645,3],[2262,3]]},"922":{"position":[[1941,7],[2088,7],[2137,3],[2259,7],[2743,7],[3128,3]]},"923":{"position":[[1348,7],[1610,3],[1731,3],[1810,7]]},"930":{"position":[[568,3]]},"931":{"position":[[792,3],[1062,3],[1577,3]]},"934":{"position":[[1348,7],[1610,3]]},"942":{"position":[[182,7]]},"945":{"position":[[232,3]]},"950":{"position":[[1348,7],[1610,3]]},"963":{"position":[[722,3],[1364,3]]},"964":{"position":[[380,8],[733,8]]},"965":{"position":[[863,3],[1424,3],[1815,3],[1855,3]]},"968":{"position":[[1348,7],[1610,3],[1731,3],[1810,7]]},"988":{"position":[[181,3]]},"989":{"position":[[1064,3]]},"995":{"position":[[4,3]]},"1003":{"position":[[181,3]]},"1004":{"position":[[1147,3]]},"1009":{"position":[[321,3]]},"1020":{"position":[[735,4],[1175,4],[1382,3],[1961,7]]},"1023":{"position":[[1952,3]]},"1032":{"position":[[4,3],[208,3],[271,3],[336,3],[410,3],[477,3],[546,3]]},"1036":{"position":[[300,3]]},"1042":{"position":[[1175,3]]},"1047":{"position":[[123,3]]},"1051":{"position":[[203,7]]},"1055":{"position":[[123,3]]},"1063":{"position":[[123,3]]},"1067":{"position":[[251,3]]},"1076":{"position":[[411,4],[500,3]]},"1077":{"position":[[268,3],[306,4]]},"1085":{"position":[[412,3],[894,7],[1297,4]]},"1089":{"position":[[4,3],[112,8]]},"1090":{"position":[[27,3]]},"1104":{"position":[[160,8]]},"1118":{"position":[[358,9],[612,9]]},"1133":{"position":[[130,3]]},"1138":{"position":[[383,3],[1670,3]]},"1140":{"position":[[3622,3]]},"1142":{"position":[[105,7]]},"1146":{"position":[[150,3]]},"1149":{"position":[[560,7]]},"1160":{"position":[[105,7],[216,7]]},"1168":{"position":[[105,7]]},"1173":{"position":[[150,3]]},"1176":{"position":[[446,3]]},"1179":{"position":[[1203,3]]},"1186":{"position":[[333,3]]},"1188":{"position":[[558,3]]},"1203":{"position":[[311,9],[321,3]]},"1204":{"position":[[107,3]]},"1209":{"position":[[484,3]]},"1211":{"position":[[105,7]]},"1215":{"position":[[150,3]]},"1218":{"position":[[105,7]]},"1223":{"position":[[150,3]]},"1230":{"position":[[231,3],[727,3]]},"1234":{"position":[[84,4]]},"1237":{"position":[[109,7]]},"1243":{"position":[[631,3]]},"1247":{"position":[[402,3]]},"1258":{"position":[[154,7]]},"1274":{"position":[[311,3]]},"1281":{"position":[[349,7],[368,3]]},"1283":{"position":[[353,7]]},"1285":{"position":[[736,4],[921,7]]},"1286":{"position":[[45,3],[190,3],[353,3],[883,3],[1072,3],[1310,3],[1569,3]]},"1289":{"position":[[439,9]]},"1292":{"position":[[5091,3]]},"1295":{"position":[[349,7],[368,3]]},"1298":{"position":[[80,3]]},"1300":{"position":[[736,4],[921,7]]},"1301":{"position":[[45,3],[190,3],[353,3],[719,3],[908,3],[1146,3],[1405,3]]},"1306":{"position":[[5091,3]]},"1311":{"position":[[190,7]]},"1313":{"position":[[775,7],[1214,3],[1481,3],[1560,7]]},"1316":{"position":[[3622,3]]},"1319":{"position":[[349,7],[368,3]]},"1321":{"position":[[219,9]]},"1322":{"position":[[882,7]]},"1324":{"position":[[736,4],[921,7]]},"1325":{"position":[[45,3],[190,3],[353,3],[883,3],[1072,3],[1310,3],[1569,3]]},"1329":{"position":[[5091,3]]},"1334":{"position":[[219,9]]},"1335":{"position":[[882,7]]},"1337":{"position":[[775,7],[1214,3],[1481,3],[1560,7]]},"1340":{"position":[[3622,3]]},"1346":{"position":[[80,3]]},"1348":{"position":[[775,7],[1214,3]]},"1351":{"position":[[3622,3]]},"1356":{"position":[[474,8],[498,8],[975,8]]},"1359":{"position":[[489,9]]},"1362":{"position":[[113,3]]},"1370":{"position":[[1059,3]]},"1373":{"position":[[203,7]]},"1374":{"position":[[203,7]]},"1379":{"position":[[4113,3],[4157,4]]},"1383":{"position":[[371,3],[498,3],[532,3],[567,3],[602,3],[637,3],[670,3]]},"1384":{"position":[[158,3],[658,3]]},"1388":{"position":[[688,3]]},"1393":{"position":[[184,3]]},"1394":{"position":[[671,3]]},"1403":{"position":[[4113,3],[4157,4]]},"1408":{"position":[[448,3]]},"1414":{"position":[[4113,3],[4157,4]]},"1427":{"position":[[974,3]]},"1431":{"position":[[3645,3]]},"1448":{"position":[[697,3]]},"1452":{"position":[[2337,3],[2431,3],[2826,3],[2888,3],[3063,3],[3729,3],[3865,3]]},"1453":{"position":[[425,3],[949,7]]},"1455":{"position":[[444,3]]},"1477":{"position":[[0,3],[4,3],[59,4],[354,4],[507,4],[618,3],[662,4],[720,3],[766,3],[802,4],[871,3],[1021,4],[1096,3],[1599,3],[2595,4],[2823,3],[3243,4],[3316,3],[3948,4]]},"1479":{"position":[[473,3]]}},"keywords":{}}],["setdatabase_nam",{"_index":6362,"title":{},"content":{"1383":{"position":[[229,17]]}},"keywords":{}}],["setti",{"_index":6581,"title":{},"content":{"1455":{"position":[[157,9]]}},"keywords":{}}],["settings.edit",{"_index":4706,"title":{},"content":{"792":{"position":[[438,13]]},"918":{"position":[[438,13]]}},"keywords":{}}],["settings.select",{"_index":5078,"title":{},"content":{"942":{"position":[[499,15]]}},"keywords":{}}],["settings.start_d",{"_index":3258,"title":{},"content":{"349":{"position":[[372,20]]}},"keywords":{}}],["settingsissu",{"_index":4471,"title":{},"content":{"709":{"position":[[232,13]]}},"keywords":{}}],["settingslabelspermissionspermiss",{"_index":4479,"title":{},"content":{"709":{"position":[[428,35]]}},"keywords":{}}],["setup",{"_index":864,"title":{"58":{"position":[[17,6]]},"167":{"position":[[17,5]]},"221":{"position":[[8,6]]},"222":{"position":[[0,5]]},"223":{"position":[[0,5]]},"224":{"position":[[0,5]]},"236":{"position":[[11,6]]},"348":{"position":[[0,6]]},"367":{"position":[[0,6]]},"406":{"position":[[0,6]]},"414":{"position":[[0,6]]},"415":{"position":[[0,6]]},"436":{"position":[[0,5]]},"476":{"position":[[0,6]]},"526":{"position":[[0,6]]},"751":{"position":[[0,6]]},"767":{"position":[[0,6]]},"790":{"position":[[0,6]]},"808":{"position":[[0,6]]},"824":{"position":[[0,6]]},"840":{"position":[[0,6]]},"849":{"position":[[8,6]]},"856":{"position":[[0,5]]},"857":{"position":[[0,5]]},"863":{"position":[[0,6]]},"875":{"position":[[0,6]]},"895":{"position":[[0,6]]},"904":{"position":[[0,6]]},"916":{"position":[[0,6]]},"931":{"position":[[0,6]]},"941":{"position":[[0,6]]},"965":{"position":[[0,6]]},"989":{"position":[[0,6]]},"1004":{"position":[[0,6]]},"1032":{"position":[[0,6]]},"1041":{"position":[[0,6]]},"1051":{"position":[[0,6]]},"1059":{"position":[[0,6]]},"1067":{"position":[[0,6]]},"1090":{"position":[[0,6]]},"1154":{"position":[[0,6]]},"1177":{"position":[[0,6]]},"1186":{"position":[[0,6]]},"1198":{"position":[[0,6]]},"1204":{"position":[[0,6]]},"1282":{"position":[[0,6]]},"1289":{"position":[[0,6]]},"1296":{"position":[[0,6]]},"1303":{"position":[[0,6]]},"1310":{"position":[[0,6]]},"1320":{"position":[[0,6]]},"1333":{"position":[[0,6]]},"1344":{"position":[[0,6]]},"1373":{"position":[[0,5]]},"1383":{"position":[[0,6]]},"1397":{"position":[[0,5]]},"1407":{"position":[[0,6]]},"1418":{"position":[[0,6]]}},"content":{"170":{"position":[[168,5]]},"173":{"position":[[304,6]]},"175":{"position":[[143,5]]},"191":{"position":[[78,5]]},"204":{"position":[[624,5]]},"206":{"position":[[292,5]]},"222":{"position":[[722,6]]},"223":{"position":[[959,6]]},"237":{"position":[[2625,6],[2706,6]]},"240":{"position":[[2351,5]]},"288":{"position":[[844,5]]},"291":{"position":[[750,5]]},"299":{"position":[[759,5]]},"302":{"position":[[750,5]]},"366":{"position":[[32,5],[617,7],[949,7]]},"446":{"position":[[248,6]]},"475":{"position":[[313,5]]},"515":{"position":[[381,6]]},"571":{"position":[[612,6]]},"573":{"position":[[560,6]]},"582":{"position":[[225,6]]},"584":{"position":[[491,6]]},"597":{"position":[[276,5]]},"611":{"position":[[634,6]]},"617":{"position":[[536,6]]},"619":{"position":[[465,6]]},"645":{"position":[[105,6]]},"652":{"position":[[105,6]]},"718":{"position":[[138,6]]},"724":{"position":[[165,5]]},"750":{"position":[[55,5],[1409,6]]},"753":{"position":[[100,5]]},"764":{"position":[[1040,5]]},"766":{"position":[[55,5]]},"777":{"position":[[1040,5]]},"788":{"position":[[92,5]]},"789":{"position":[[53,5],[1810,6]]},"804":{"position":[[1038,5]]},"807":{"position":[[53,5]]},"819":{"position":[[1038,5]]},"823":{"position":[[53,5]]},"835":{"position":[[1038,5]]},"838":{"position":[[67,6],[118,6]]},"840":{"position":[[237,5],[509,5],[895,5],[1360,5],[1617,5],[1958,5]]},"849":{"position":[[180,5],[406,5],[766,5],[980,5],[1508,5],[2192,5],[2658,5],[3077,5]]},"857":{"position":[[121,6]]},"903":{"position":[[35,5],[643,7],[975,7]]},"914":{"position":[[121,5]]},"915":{"position":[[35,5],[643,7],[975,7],[1266,6]]},"917":{"position":[[154,6]]},"930":{"position":[[35,5],[643,7],[975,7]]},"963":{"position":[[44,5],[797,7],[1129,7],[1420,6]]},"965":{"position":[[154,6]]},"988":{"position":[[302,5]]},"1003":{"position":[[302,5]]},"1039":{"position":[[225,5]]},"1149":{"position":[[369,5]]},"1176":{"position":[[418,5]]},"1204":{"position":[[213,6]]},"1245":{"position":[[488,6]]},"1298":{"position":[[959,6]]},"1322":{"position":[[722,6]]},"1335":{"position":[[722,6]]},"1346":{"position":[[959,6]]}},"keywords":{}}],["setup.a",{"_index":4732,"title":{},"content":{"839":{"position":[[184,7]]},"848":{"position":[[221,7]]}},"keywords":{}}],["setus",{"_index":6345,"title":{},"content":{"1379":{"position":[[4211,7]]},"1403":{"position":[[4211,7]]},"1414":{"position":[[4211,7]]}},"keywords":{}}],["sever",{"_index":814,"title":{},"content":{"55":{"position":[[231,7]]},"60":{"position":[[18,7]]},"141":{"position":[[161,7]]},"237":{"position":[[42,7]]},"284":{"position":[[364,7]]},"285":{"position":[[89,7]]},"320":{"position":[[276,7]]},"322":{"position":[[91,7]]},"379":{"position":[[740,7]]},"419":{"position":[[1410,7]]},"441":{"position":[[19,7]]},"504":{"position":[[1039,7]]},"534":{"position":[[917,7]]},"547":{"position":[[1412,7]]},"639":{"position":[[1037,7]]},"985":{"position":[[480,7]]},"1000":{"position":[[658,7]]},"1023":{"position":[[1393,7]]}},"keywords":{}}],["sftp",{"_index":3313,"title":{"1017":{"position":[[0,4]]},"1023":{"position":[[18,4]]}},"content":{"363":{"position":[[2074,4]]},"1018":{"position":[[16,4]]},"1021":{"position":[[250,4],[371,4]]},"1023":{"position":[[1,4],[1079,4]]}},"keywords":{}}],["sftp:dev",{"_index":3314,"title":{},"content":{"363":{"position":[[2125,8]]}},"keywords":{}}],["sftp:dev"",{"_index":5206,"title":{},"content":{"1022":{"position":[[85,14]]}},"keywords":{}}],["sg31386.snowflakecomputing.com",{"_index":5215,"title":{},"content":{"1031":{"position":[[728,30]]}},"keywords":{}}],["sha",{"_index":140,"title":{},"content":{"3":{"position":[[903,3]]},"429":{"position":[[471,3],[491,3]]},"433":{"position":[[262,3]]}},"keywords":{}}],["sha256",{"_index":6384,"title":{},"content":{"1384":{"position":[[935,11],[1051,6]]}},"keywords":{}}],["shape",{"_index":318,"title":{},"content":{"11":{"position":[[765,6],[1630,5]]},"68":{"position":[[137,5]]},"182":{"position":[[725,5]]},"183":{"position":[[2840,5]]},"218":{"position":[[1502,6]]},"419":{"position":[[290,5]]},"440":{"position":[[306,5]]},"504":{"position":[[227,5]]},"547":{"position":[[291,5]]},"639":{"position":[[226,5]]},"1023":{"position":[[271,5]]}},"keywords":{}}],["shard",{"_index":217,"title":{"18":{"position":[[5,6]]},"19":{"position":[[0,5]]},"49":{"position":[[5,7]]},"342":{"position":[[17,6]]},"1474":{"position":[[0,5]]}},"content":{"6":{"position":[[344,7]]},"7":{"position":[[639,6],[741,7]]},"19":{"position":[[63,6],[93,6],[122,7],[219,5],[313,5],[386,7],[510,6]]},"20":{"position":[[1,6],[1117,6]]},"21":{"position":[[10,6],[429,5]]},"48":{"position":[[144,6],[227,5]]},"49":{"position":[[6,6],[87,7],[191,6],[248,5],[423,6],[565,6]]},"94":{"position":[[2809,7]]},"107":{"position":[[257,7],[333,5],[411,5],[727,5],[954,7],[1562,5],[2297,5],[2451,6],[2753,6],[3410,5]]},"109":{"position":[[696,5]]},"112":{"position":[[750,5],[887,5],[1034,6]]},"138":{"position":[[1164,5],[1631,5]]},"141":{"position":[[1253,5],[1636,5]]},"142":{"position":[[1133,5],[1648,5]]},"145":{"position":[[128,8]]},"146":{"position":[[904,5]]},"148":{"position":[[137,8]]},"149":{"position":[[877,5]]},"151":{"position":[[135,8]]},"152":{"position":[[880,5]]},"183":{"position":[[2602,6]]},"285":{"position":[[290,6],[376,7]]},"296":{"position":[[3215,5]]},"320":{"position":[[2136,7],[2188,6],[2298,7]]},"321":{"position":[[1772,6],[1826,6],[1913,6],[2187,5]]},"343":{"position":[[82,7],[577,5]]},"344":{"position":[[356,7]]},"1147":{"position":[[121,5]]},"1174":{"position":[[121,5]]},"1196":{"position":[[1119,6],[1140,6]]},"1216":{"position":[[121,5]]},"1224":{"position":[[121,5]]},"1453":{"position":[[685,5]]},"1470":{"position":[[575,5]]},"1474":{"position":[[45,5],[95,5],[237,7],[332,7],[404,5],[701,5],[834,5]]}},"keywords":{}}],["shard'",{"_index":558,"title":{},"content":{"21":{"position":[[64,7]]},"146":{"position":[[1128,7]]},"149":{"position":[[1122,7]]},"152":{"position":[[1112,7]]},"1474":{"position":[[742,7],[875,7]]}},"keywords":{}}],["shard(",{"_index":1838,"title":{},"content":{"146":{"position":[[963,8],[1061,9]]},"149":{"position":[[954,8],[1055,9]]},"152":{"position":[[939,8],[1045,9]]}},"keywords":{}}],["shard/keybegin",{"_index":6688,"title":{},"content":{"1474":{"position":[[648,15]]}},"keywords":{}}],["shard/kind",{"_index":6683,"title":{},"content":{"1474":{"position":[[433,11]]}},"keywords":{}}],["shard/nam",{"_index":6687,"title":{},"content":{"1474":{"position":[[565,11]]}},"keywords":{}}],["shard/rclockbegin",{"_index":6689,"title":{},"content":{"1474":{"position":[[781,18]]}},"keywords":{}}],["shards"",{"_index":5852,"title":{},"content":{"1201":{"position":[[658,12]]}},"keywords":{}}],["share",{"_index":1923,"title":{},"content":{"163":{"position":[[85,5]]},"189":{"position":[[64,5],[100,6]]},"274":{"position":[[1744,7]]},"296":{"position":[[2009,6]]},"337":{"position":[[452,6],[486,7],[558,7]]},"341":{"position":[[385,6],[527,7]]},"617":{"position":[[727,5],[798,5],[859,5]]},"723":{"position":[[207,5]]},"1008":{"position":[[318,5]]},"1156":{"position":[[788,7]]},"1245":{"position":[[672,5]]},"1247":{"position":[[740,6]]},"1292":{"position":[[5136,5]]},"1306":{"position":[[5136,5]]},"1329":{"position":[[5136,5]]},"1459":{"position":[[25,5]]},"1467":{"position":[[83,6]]}},"keywords":{}}],["sharinggroupsissu",{"_index":4466,"title":{},"content":{"709":{"position":[[122,18]]}},"keywords":{}}],["sheet",{"_index":2933,"title":{"613":{"position":[[7,6]]},"1242":{"position":[[7,6]]}},"content":{"295":{"position":[[68,7],[1095,5],[1235,6]]},"296":{"position":[[7262,6],[7322,5],[7634,5],[7822,6]]},"364":{"position":[[1729,6]]},"614":{"position":[[75,6]]},"616":{"position":[[315,5],[336,5],[386,5],[463,6],[551,5]]},"617":{"position":[[80,6],[299,6],[808,5]]},"618":{"position":[[257,6]]},"619":{"position":[[214,6],[635,5],[646,5],[667,6]]},"1243":{"position":[[377,6]]},"1245":{"position":[[22,6],[251,6]]},"1246":{"position":[[120,6]]},"1247":{"position":[[879,6],[963,6],[1075,5],[1110,5]]},"1248":{"position":[[496,6]]}},"keywords":{}}],["sheet1",{"_index":3010,"title":{},"content":{"296":{"position":[[4754,7],[4953,7]]},"620":{"position":[[271,6]]}},"keywords":{}}],["sheets:dev",{"_index":3344,"title":{},"content":{"364":{"position":[[1789,10]]},"620":{"position":[[96,10]]},"1248":{"position":[[337,10]]}},"keywords":{}}],["sheet’",{"_index":2969,"title":{},"content":{"295":{"position":[[1162,7]]}},"keywords":{}}],["shell",{"_index":2225,"title":{},"content":{"204":{"position":[[720,7]]},"221":{"position":[[348,5]]},"808":{"position":[[709,5]]},"1384":{"position":[[238,6]]}},"keywords":{}}],["shell"",{"_index":2515,"title":{},"content":{"236":{"position":[[917,12]]}},"keywords":{}}],["shh",{"_index":1216,"title":{},"content":{"83":{"position":[[410,3]]}},"keywords":{}}],["shift",{"_index":521,"title":{},"content":{"19":{"position":[[351,5]]},"1151":{"position":[[121,5]]}},"keywords":{}}],["ship",{"_index":5368,"title":{},"content":{"1096":{"position":[[270,8]]}},"keywords":{}}],["shop",{"_index":5354,"title":{},"content":{"1092":{"position":[[409,4],[446,4]]},"1094":{"position":[[123,4],[216,4],[248,4]]}},"keywords":{}}],["shop_nam",{"_index":5359,"title":{},"content":{"1094":{"position":[[237,10]]}},"keywords":{}}],["shopifi",{"_index":4403,"title":{},"content":{"659":{"position":[[60,8]]},"660":{"position":[[129,8],[1079,7],[1089,7]]}},"keywords":{}}],["short",{"_index":1094,"title":{},"content":{"76":{"position":[[678,5]]},"82":{"position":[[469,5]]},"162":{"position":[[274,5]]},"757":{"position":[[1763,5]]},"770":{"position":[[1763,5]]},"797":{"position":[[1763,5]]},"812":{"position":[[1763,5]]},"828":{"position":[[1763,5]]}},"keywords":{}}],["short"",{"_index":4655,"title":{},"content":{"764":{"position":[[67,11],[800,11]]},"777":{"position":[[67,11],[800,11]]},"804":{"position":[[67,11],[798,11]]},"819":{"position":[[67,11],[798,11]]},"835":{"position":[[67,11],[798,11]]}},"keywords":{}}],["shortag",{"_index":4894,"title":{},"content":{"870":{"position":[[489,9]]}},"keywords":{}}],["shorter",{"_index":534,"title":{},"content":{"20":{"position":[[448,7]]},"479":{"position":[[690,7]]},"1467":{"position":[[348,7]]}},"keywords":{}}],["shouldn't",{"_index":1918,"title":{},"content":{"162":{"position":[[1223,9],[1596,9]]},"757":{"position":[[1016,9]]},"770":{"position":[[1016,9]]},"797":{"position":[[1016,9]]},"812":{"position":[[1016,9]]},"828":{"position":[[1016,9]]}},"keywords":{}}],["shouldn’t",{"_index":2218,"title":{},"content":{"203":{"position":[[293,9]]}},"keywords":{}}],["show",{"_index":1022,"title":{},"content":{"68":{"position":[[475,4]]},"138":{"position":[[19,5],[1127,5],[1846,5],[1949,5],[2314,5]]},"140":{"position":[[210,4]]},"141":{"position":[[22,5],[962,4],[1089,4],[1881,5]]},"142":{"position":[[27,5],[1096,5],[1887,5],[2002,5],[2375,5]]},"146":{"position":[[349,5],[774,5],[930,5]]},"149":{"position":[[84,5],[358,5],[747,5],[921,5],[1165,5]]},"152":{"position":[[94,5],[365,5],[750,5],[906,5]]},"154":{"position":[[256,5]]},"173":{"position":[[1113,4]]},"203":{"position":[[575,4]]},"217":{"position":[[1244,7]]},"218":{"position":[[679,5]]},"252":{"position":[[20,4]]},"291":{"position":[[918,5]]},"294":{"position":[[20,4]]},"296":{"position":[[7177,4]]},"302":{"position":[[918,5]]},"308":{"position":[[899,4]]},"312":{"position":[[20,4]]},"849":{"position":[[1347,4]]},"942":{"position":[[674,4]]},"1140":{"position":[[3653,4]]},"1209":{"position":[[502,4]]},"1292":{"position":[[5176,4]]},"1306":{"position":[[5176,4]]},"1316":{"position":[[3653,4]]},"1329":{"position":[[5176,4]]},"1340":{"position":[[3653,4]]},"1351":{"position":[[3653,4]]},"1431":{"position":[[3676,4]]},"1448":{"position":[[1048,5]]}},"keywords":{}}],["shown",{"_index":982,"title":{},"content":{"66":{"position":[[834,5]]},"83":{"position":[[848,5]]},"138":{"position":[[1734,6]]},"141":{"position":[[1742,6]]},"142":{"position":[[1759,6]]},"192":{"position":[[149,5]]},"228":{"position":[[1156,5]]},"229":{"position":[[840,5]]},"238":{"position":[[846,5]]},"281":{"position":[[206,5]]},"307":{"position":[[601,5]]},"308":{"position":[[998,5]]},"840":{"position":[[817,5],[2340,5]]},"849":{"position":[[1292,5],[3480,5]]},"947":{"position":[[665,5]]},"964":{"position":[[556,5]]},"1200":{"position":[[763,5]]},"1388":{"position":[[602,5]]},"1470":{"position":[[635,5]]}},"keywords":{}}],["shuffl",{"_index":1359,"title":{"107":{"position":[[0,9]]}},"content":{"94":{"position":[[2792,8],[2892,8]]},"96":{"position":[[187,8]]},"105":{"position":[[170,8],[184,7],[252,7]]},"107":{"position":[[39,8],[127,8],[380,8],[1186,9],[1219,8],[1234,7],[1419,9],[1483,8],[1734,7],[1952,7],[1992,8],[2080,7],[2202,8],[2369,8],[2663,8],[2831,8],[2866,8],[2999,7],[3045,7],[3161,8],[3250,7],[3317,8],[3526,7],[3622,8],[3711,7],[3773,8],[3828,8],[3905,7],[4035,8]]},"109":{"position":[[599,7],[629,7]]},"183":{"position":[[1411,8],[2489,7],[2725,9],[2735,8],[3931,8]]},"254":{"position":[[657,8],[2714,8],[3204,7]]},"268":{"position":[[1030,8]]},"269":{"position":[[640,8]]},"277":{"position":[[716,8]]},"278":{"position":[[1158,8]]},"279":{"position":[[1506,8],[1619,8]]},"280":{"position":[[1655,7],[1708,8],[2012,8]]},"281":{"position":[[1100,8]]},"296":{"position":[[817,8],[918,8],[2818,8],[2919,8],[3184,8],[3379,7],[3491,7]]},"314":{"position":[[534,8],[2389,8],[2779,7]]},"319":{"position":[[698,8]]}},"keywords":{}}],["shuffle/key/on",{"_index":1360,"title":{},"content":{"94":{"position":[[2984,18]]}},"keywords":{}}],["shuffle/key/two",{"_index":1361,"title":{},"content":{"94":{"position":[[3003,17]]}},"keywords":{}}],["shufflekeytyp",{"_index":1556,"title":{},"content":{"107":{"position":[[3947,16]]}},"keywords":{}}],["shut",{"_index":4277,"title":{},"content":{"595":{"position":[[1603,4]]}},"keywords":{}}],["shutdown",{"_index":6183,"title":{},"content":{"1292":{"position":[[5215,8]]},"1306":{"position":[[5215,8]]},"1329":{"position":[[5215,8]]},"1379":{"position":[[4258,8]]},"1403":{"position":[[4258,8]]},"1414":{"position":[[4258,8]]}},"keywords":{}}],["sibling/directory/flow.yaml",{"_index":1287,"title":{},"content":{"87":{"position":[[382,30]]}},"keywords":{}}],["sid",{"_index":5405,"title":{},"content":{"1113":{"position":[[99,3]]}},"keywords":{}}],["side",{"_index":1018,"title":{},"content":{"67":{"position":[[2016,5]]},"137":{"position":[[117,4]]},"217":{"position":[[555,4]]},"239":{"position":[[347,4]]},"240":{"position":[[25,5]]},"296":{"position":[[1960,4],[1980,4],[2235,5]]},"602":{"position":[[770,4]]},"698":{"position":[[74,4]]},"1459":{"position":[[1528,5],[1586,5]]},"1464":{"position":[[96,5],[754,4],[798,4]]},"1467":{"position":[[34,4],[54,4],[182,5],[307,5],[367,5],[1735,5]]},"1476":{"position":[[956,4],[1003,4]]},"1477":{"position":[[349,4],[3077,5]]}},"keywords":{}}],["sidebar",{"_index":2222,"title":{},"content":{"204":{"position":[[426,8]]},"205":{"position":[[86,8]]},"436":{"position":[[156,7]]}},"keywords":{}}],["sign",{"_index":1020,"title":{"136":{"position":[[0,7]]},"514":{"position":[[0,7]]}},"content":{"68":{"position":[[325,4]]},"136":{"position":[[51,4]]},"169":{"position":[[1389,6]]},"183":{"position":[[544,4]]},"190":{"position":[[53,4]]},"192":{"position":[[615,6]]},"199":{"position":[[109,4]]},"217":{"position":[[239,4]]},"232":{"position":[[911,4]]},"253":{"position":[[274,4]]},"267":{"position":[[912,4]]},"290":{"position":[[216,4]]},"301":{"position":[[169,4]]},"313":{"position":[[274,4]]},"320":{"position":[[1325,6]]},"338":{"position":[[16,4],[318,5]]},"339":{"position":[[10,4]]},"340":{"position":[[249,6]]},"383":{"position":[[144,4]]},"494":{"position":[[70,4]]},"513":{"position":[[81,7]]},"683":{"position":[[77,4]]},"685":{"position":[[119,4]]},"855":{"position":[[219,4]]},"989":{"position":[[152,6]]},"1004":{"position":[[235,6]]},"1082":{"position":[[250,4]]},"1243":{"position":[[1099,7]]},"1292":{"position":[[5294,6]]},"1306":{"position":[[5294,6]]},"1329":{"position":[[5294,6]]}},"keywords":{}}],["signal",{"_index":2190,"title":{},"content":{"197":{"position":[[1036,8]]},"1292":{"position":[[5257,6]]},"1306":{"position":[[5257,6]]},"1329":{"position":[[5257,6]]},"1443":{"position":[[652,6],[926,7]]}},"keywords":{}}],["signatur",{"_index":3883,"title":{"490":{"position":[[8,9]]},"663":{"position":[[8,9]]},"678":{"position":[[8,9]]},"693":{"position":[[8,9]]}},"content":{"490":{"position":[[45,9]]},"663":{"position":[[45,9]]},"678":{"position":[[45,9]]},"693":{"position":[[45,9]]}},"keywords":{}}],["signifi",{"_index":1847,"title":{},"content":{"154":{"position":[[950,7]]}},"keywords":{}}],["signific",{"_index":2270,"title":{},"content":{"209":{"position":[[1404,11]]},"237":{"position":[[228,12]]},"1391":{"position":[[91,11]]}},"keywords":{}}],["significantli",{"_index":2610,"title":{},"content":{"240":{"position":[[3643,13]]},"1471":{"position":[[1022,13]]}},"keywords":{}}],["silent",{"_index":3199,"title":{},"content":{"331":{"position":[[385,8]]}},"keywords":{}}],["similar",{"_index":358,"title":{},"content":{"12":{"position":[[120,7]]},"107":{"position":[[205,8]]},"125":{"position":[[1200,7]]},"139":{"position":[[103,7]]},"143":{"position":[[119,7]]},"190":{"position":[[507,7]]},"193":{"position":[[622,7]]},"207":{"position":[[329,8]]},"209":{"position":[[155,7]]},"295":{"position":[[3912,8]]},"320":{"position":[[399,7],[547,12],[1621,7],[1928,7]]},"321":{"position":[[513,7]]},"323":{"position":[[1601,8]]},"324":{"position":[[418,12]]},"326":{"position":[[234,7],[480,7]]},"1042":{"position":[[450,7],[920,7]]},"1043":{"position":[[1114,7],[1584,7]]},"1051":{"position":[[1376,7],[1846,7]]},"1059":{"position":[[1169,7],[1639,7]]},"1140":{"position":[[3689,7]]},"1232":{"position":[[461,7]]},"1316":{"position":[[3689,7]]},"1340":{"position":[[3689,7]]},"1351":{"position":[[3689,7]]},"1379":{"position":[[4319,7]]},"1403":{"position":[[4319,7]]},"1414":{"position":[[4319,7]]},"1431":{"position":[[3712,7]]}},"keywords":{}}],["similarli",{"_index":1545,"title":{},"content":{"107":{"position":[[2061,9]]},"210":{"position":[[4059,10]]},"240":{"position":[[1,9]]},"307":{"position":[[3076,9]]},"429":{"position":[[133,10]]}},"keywords":{}}],["simpl",{"_index":300,"title":{},"content":{"11":{"position":[[333,6]]},"62":{"position":[[592,6]]},"132":{"position":[[348,6]]},"162":{"position":[[1821,6]]},"232":{"position":[[947,7]]},"989":{"position":[[90,6]]},"1004":{"position":[[90,6]]},"1182":{"position":[[340,6]]},"1191":{"position":[[342,6]]},"1262":{"position":[[342,6]]},"1292":{"position":[[5337,6]]},"1306":{"position":[[5337,6]]},"1329":{"position":[[5337,6]]},"1389":{"position":[[341,6]]},"1440":{"position":[[474,6]]},"1461":{"position":[[817,6]]}},"keywords":{}}],["simpler",{"_index":403,"title":{},"content":{"13":{"position":[[1026,7]]},"281":{"position":[[3242,7]]},"1243":{"position":[[1221,8]]}},"keywords":{}}],["simplest",{"_index":577,"title":{},"content":{"23":{"position":[[80,8]]},"189":{"position":[[991,8]]},"216":{"position":[[93,8]]},"864":{"position":[[372,8]]},"876":{"position":[[372,8]]},"917":{"position":[[5,8]]},"965":{"position":[[5,8]]},"1227":{"position":[[14,8]]}},"keywords":{}}],["simpli",{"_index":611,"title":{},"content":{"26":{"position":[[348,6]]},"56":{"position":[[813,6]]},"64":{"position":[[837,6]]},"84":{"position":[[132,6]]},"100":{"position":[[214,6]]},"163":{"position":[[285,6]]},"169":{"position":[[196,6]]},"242":{"position":[[177,6]]},"321":{"position":[[951,6]]},"322":{"position":[[1000,7]]},"374":{"position":[[48,6]]},"552":{"position":[[676,6]]},"615":{"position":[[33,6]]},"617":{"position":[[33,6]]},"1442":{"position":[[534,6]]}},"keywords":{}}],["simplic",{"_index":3931,"title":{},"content":{"513":{"position":[[199,10]]},"522":{"position":[[200,10]]},"530":{"position":[[200,10]]},"551":{"position":[[198,10]]},"569":{"position":[[217,10]]},"607":{"position":[[216,10]]},"614":{"position":[[200,10]]},"643":{"position":[[174,10]]},"650":{"position":[[173,10]]},"716":{"position":[[200,10]]},"731":{"position":[[171,10]]}},"keywords":{}}],["simplifi",{"_index":2079,"title":{},"content":{"183":{"position":[[3224,10]]},"329":{"position":[[841,10]]}},"keywords":{}}],["simultan",{"_index":328,"title":{},"content":{"11":{"position":[[1181,14]]},"109":{"position":[[21,14]]}},"keywords":{}}],["sin",{"_index":5685,"title":{},"content":{"1140":{"position":[[3737,3]]},"1316":{"position":[[3737,3]]},"1340":{"position":[[3737,3]]},"1351":{"position":[[3737,3]]},"1431":{"position":[[3760,3]]}},"keywords":{}}],["singer",{"_index":793,"title":{},"content":{"53":{"position":[[88,7]]}},"keywords":{}}],["singl",{"_index":67,"title":{},"content":{"2":{"position":[[64,6]]},"19":{"position":[[56,6]]},"27":{"position":[[432,6]]},"49":{"position":[[61,6],[416,6]]},"61":{"position":[[374,7]]},"63":{"position":[[267,6]]},"68":{"position":[[1588,6],[1738,6]]},"71":{"position":[[605,6]]},"81":{"position":[[1880,6]]},"84":{"position":[[1209,6]]},"98":{"position":[[910,6]]},"101":{"position":[[408,6]]},"120":{"position":[[778,6]]},"121":{"position":[[1521,6]]},"124":{"position":[[667,6]]},"128":{"position":[[176,6]]},"163":{"position":[[184,6]]},"169":{"position":[[235,6]]},"319":{"position":[[924,6]]},"320":{"position":[[801,6]]},"333":{"position":[[32,6]]},"370":{"position":[[859,6]]},"374":{"position":[[299,6],[423,6]]},"379":{"position":[[46,6],[239,6]]},"410":{"position":[[113,6]]},"419":{"position":[[1125,6],[1353,6]]},"440":{"position":[[1141,6],[1369,6]]},"483":{"position":[[553,6]]},"499":{"position":[[91,6]]},"534":{"position":[[1222,6]]},"547":{"position":[[1127,6],[1355,6]]},"634":{"position":[[83,6]]},"757":{"position":[[1626,6]]},"770":{"position":[[1626,6]]},"797":{"position":[[1626,6]]},"812":{"position":[[1626,6]]},"828":{"position":[[1626,6]]},"867":{"position":[[951,6],[1110,6]]},"879":{"position":[[1108,6]]},"907":{"position":[[642,6]]},"923":{"position":[[642,6]]},"934":{"position":[[642,6]]},"950":{"position":[[642,6]]},"968":{"position":[[642,6]]},"1023":{"position":[[1108,6],[1336,6]]},"1045":{"position":[[627,6]]},"1053":{"position":[[627,6]]},"1061":{"position":[[627,6]]},"1144":{"position":[[989,6]]},"1156":{"position":[[178,6],[855,6]]},"1157":{"position":[[23,6]]},"1213":{"position":[[666,6]]},"1275":{"position":[[152,6]]},"1459":{"position":[[873,6]]},"1477":{"position":[[166,6]]}},"keywords":{}}],["sinh",{"_index":5689,"title":{},"content":{"1140":{"position":[[3780,4]]},"1316":{"position":[[3780,4]]},"1340":{"position":[[3780,4]]},"1351":{"position":[[3780,4]]},"1431":{"position":[[3803,4]]}},"keywords":{}}],["sip",{"_index":3455,"title":{},"content":{"377":{"position":[[1359,4]]}},"keywords":{}}],["site",{"_index":3065,"title":{},"content":{"313":{"position":[[3444,5]]},"460":{"position":[[117,5],[123,4],[132,4],[407,5]]},"461":{"position":[[141,5]]},"612":{"position":[[377,5]]},"1461":{"position":[[4718,4]]}},"keywords":{}}],["site>",{"_index":3775,"title":{},"content":{"461":{"position":[[156,8]]}},"keywords":{}}],["site.com/my_hosted_dataset.json.zip",{"_index":4366,"title":{},"content":{"638":{"position":[[127,35]]}},"keywords":{}}],["site.com/my_hosted_dataset.json.zipus",{"_index":4362,"title":{},"content":{"635":{"position":[[335,38]]}},"keywords":{}}],["site_api_key",{"_index":3773,"title":{},"content":{"461":{"position":[[112,13]]}},"keywords":{}}],["site_url",{"_index":4308,"title":{},"content":{"611":{"position":[[938,10]]},"612":{"position":[[290,10]]}},"keywords":{}}],["situat",{"_index":4627,"title":{},"content":{"759":{"position":[[288,11]]},"772":{"position":[[299,11]]},"799":{"position":[[286,11]]},"814":{"position":[[286,11]]},"821":{"position":[[648,9]]},"830":{"position":[[286,11]]},"912":{"position":[[664,9]]}},"keywords":{}}],["six",{"_index":6361,"title":{},"content":{"1383":{"position":[[137,3]]}},"keywords":{}}],["size",{"_index":110,"title":{"1157":{"position":[[15,5]]}},"content":{"3":{"position":[[253,4]]},"19":{"position":[[200,4]]},"66":{"position":[[601,4],[703,5]]},"101":{"position":[[98,4]]},"124":{"position":[[1112,5]]},"180":{"position":[[746,4]]},"185":{"position":[[45,4]]},"209":{"position":[[1324,4],[1618,4]]},"333":{"position":[[549,5]]},"370":{"position":[[788,4]]},"410":{"position":[[56,5]]},"517":{"position":[[3209,4],[3248,4],[3464,4],[3486,4]]},"534":{"position":[[848,4],[973,4],[1011,4]]},"595":{"position":[[509,5],[1816,4]]},"747":{"position":[[1191,4]]},"757":{"position":[[1555,4]]},"770":{"position":[[1555,4]]},"785":{"position":[[513,4]]},"797":{"position":[[1555,4]]},"812":{"position":[[1555,4]]},"821":{"position":[[1006,4]]},"828":{"position":[[1555,4]]},"867":{"position":[[880,4],[1039,4]]},"879":{"position":[[1037,4]]},"907":{"position":[[571,4]]},"909":{"position":[[28,4]]},"910":{"position":[[287,5]]},"922":{"position":[[2244,6]]},"923":{"position":[[571,4]]},"925":{"position":[[28,4]]},"926":{"position":[[287,5]]},"934":{"position":[[571,4]]},"936":{"position":[[28,4]]},"937":{"position":[[287,5]]},"950":{"position":[[571,4]]},"952":{"position":[[28,4]]},"953":{"position":[[287,5]]},"968":{"position":[[571,4]]},"970":{"position":[[28,4]]},"971":{"position":[[287,5]]},"1045":{"position":[[556,4]]},"1053":{"position":[[556,4]]},"1061":{"position":[[556,4]]},"1123":{"position":[[394,4],[521,4]]},"1140":{"position":[[3815,4]]},"1144":{"position":[[577,4],[608,4]]},"1157":{"position":[[13,4]]},"1170":{"position":[[577,4],[608,4]]},"1213":{"position":[[432,4],[463,4]]},"1220":{"position":[[432,4],[463,4]]},"1316":{"position":[[3815,4]]},"1340":{"position":[[3815,4]]},"1351":{"position":[[3815,4]]},"1379":{"position":[[4371,4]]},"1403":{"position":[[4371,4]]},"1414":{"position":[[4371,4]]},"1431":{"position":[[3838,4]]}},"keywords":{}}],["sk_live_",{"_index":5289,"title":{},"content":{"1076":{"position":[[268,11]]}},"keywords":{}}],["skeleton",{"_index":3022,"title":{},"content":{"296":{"position":[[5739,8]]},"315":{"position":[[1744,8]]}},"keywords":{}}],["sketch",{"_index":6482,"title":{},"content":{"1437":{"position":[[1251,7]]}},"keywords":{}}],["skill",{"_index":2129,"title":{},"content":{"190":{"position":[[1516,7]]},"241":{"position":[[470,7]]},"329":{"position":[[1185,7]]}},"keywords":{}}],["skip",{"_index":505,"title":{},"content":{"17":{"position":[[966,4]]},"106":{"position":[[374,4]]},"228":{"position":[[458,4]]},"229":{"position":[[323,4]]},"368":{"position":[[356,4]]},"370":{"position":[[1057,4]]},"558":{"position":[[302,8]]},"595":{"position":[[146,4]]},"755":{"position":[[356,4]]},"757":{"position":[[1402,4],[1702,4]]},"768":{"position":[[356,4]]},"770":{"position":[[1402,4],[1702,4]]},"795":{"position":[[354,4]]},"797":{"position":[[1402,4],[1702,4]]},"810":{"position":[[354,4]]},"812":{"position":[[1402,4],[1702,4]]},"826":{"position":[[354,4]]},"828":{"position":[[1402,4],[1702,4]]},"867":{"position":[[518,4]]},"879":{"position":[[1187,4],[1219,4]]},"905":{"position":[[359,4]]},"907":{"position":[[840,4]]},"920":{"position":[[359,4]]},"923":{"position":[[840,4]]},"932":{"position":[[359,4]]},"934":{"position":[[840,4]]},"948":{"position":[[359,4]]},"950":{"position":[[840,4]]},"966":{"position":[[359,4]]},"968":{"position":[[840,4]]},"1045":{"position":[[688,4]]},"1053":{"position":[[688,4]]},"1061":{"position":[[688,4]]},"1140":{"position":[[3861,4]]},"1144":{"position":[[1182,4]]},"1213":{"position":[[859,4]]},"1292":{"position":[[5384,4]]},"1306":{"position":[[5384,4]]},"1316":{"position":[[3861,4]]},"1329":{"position":[[5384,4]]},"1340":{"position":[[3861,4]]},"1351":{"position":[[3861,4]]},"1431":{"position":[[3884,4]]},"1440":{"position":[[167,7]]}},"keywords":{}}],["skip_binlog_retention_check",{"_index":4662,"title":{},"content":{"764":{"position":[[1128,27]]},"777":{"position":[[1128,27]]},"804":{"position":[[1126,27]]},"819":{"position":[[1126,27]]},"835":{"position":[[1126,27]]}},"keywords":{}}],["skipemail",{"_index":4455,"title":{},"content":{"697":{"position":[[174,9]]}},"keywords":{}}],["skipsticketsus",{"_index":5460,"title":{},"content":{"1128":{"position":[[388,17]]}},"keywords":{}}],["sku",{"_index":3046,"title":{},"content":{"307":{"position":[[1303,6],[1343,4],[1434,5],[2171,6],[2211,4],[2302,5]]},"309":{"position":[[2137,6],[2177,4],[2267,5],[2734,6],[2774,4],[2874,5]]}},"keywords":{}}],["sla_polici",{"_index":5494,"title":{},"content":{"1134":{"position":[[1902,12]]}},"keywords":{}}],["slack",{"_index":2038,"title":{"1011":{"position":[[0,5]]},"1360":{"position":[[0,5]]}},"content":{"175":{"position":[[404,6]]},"212":{"position":[[411,5]]},"232":{"position":[[1006,5]]},"243":{"position":[[406,5]]},"364":{"position":[[3214,5]]},"1012":{"position":[[56,5]]},"1013":{"position":[[1,5]]},"1014":{"position":[[250,5]]},"1015":{"position":[[486,5]]},"1361":{"position":[[66,5]]},"1362":{"position":[[5,5],[253,5],[412,5],[562,6],[616,5],[729,6]]}},"keywords":{}}],["slack:dev",{"_index":3379,"title":{},"content":{"364":{"position":[[3266,9]]},"1016":{"position":[[90,9]]},"1363":{"position":[[110,9]]}},"keywords":{}}],["slash",{"_index":2066,"title":{},"content":{"183":{"position":[[856,5]]},"228":{"position":[[622,8]]},"267":{"position":[[1246,5]]},"270":{"position":[[875,5]]}},"keywords":{}}],["slave",{"_index":4584,"title":{},"content":{"750":{"position":[[814,5]]},"752":{"position":[[724,5]]},"753":{"position":[[1380,5]]},"766":{"position":[[814,5]]},"767":{"position":[[2057,5]]},"789":{"position":[[1215,5]]},"791":{"position":[[729,5]]},"792":{"position":[[2049,5]]},"793":{"position":[[1403,5]]},"807":{"position":[[802,5]]},"808":{"position":[[1349,5]]},"823":{"position":[[802,5]]},"824":{"position":[[2171,5]]},"1292":{"position":[[5426,5]]},"1306":{"position":[[5426,5]]},"1329":{"position":[[5426,5]]}},"keywords":{}}],["slice",{"_index":101,"title":{},"content":{"3":{"position":[[36,5]]},"49":{"position":[[267,5]]},"573":{"position":[[1110,5]]},"747":{"position":[[1161,7],[1218,5]]}},"keywords":{}}],["slightli",{"_index":1131,"title":{},"content":{"81":{"position":[[2174,8]]},"263":{"position":[[929,8]]},"595":{"position":[[528,8]]},"1461":{"position":[[2991,8]]},"1470":{"position":[[893,8]]}},"keywords":{}}],["slot",{"_index":2562,"title":{},"content":{"236":{"position":[[3370,5]]},"366":{"position":[[133,5],[386,5],[413,5]]},"367":{"position":[[632,5]]},"370":{"position":[[1184,4],[1233,4]]},"752":{"position":[[277,5]]},"753":{"position":[[933,5]]},"767":{"position":[[1913,5]]},"791":{"position":[[230,5]]},"792":{"position":[[1853,5]]},"793":{"position":[[904,5]]},"808":{"position":[[850,5]]},"824":{"position":[[1975,5]]},"903":{"position":[[159,5],[412,5],[439,5]]},"904":{"position":[[1732,5]]},"907":{"position":[[967,4],[1016,4]]},"915":{"position":[[159,5],[412,5],[439,5]]},"917":{"position":[[1241,5]]},"918":{"position":[[2024,5]]},"919":{"position":[[2079,5]]},"922":{"position":[[227,4],[508,4],[1041,5],[1434,4],[1610,4],[1725,4],[1785,5],[1870,4],[2044,4],[2486,4],[2522,4],[2601,5],[2635,4],[3023,4]]},"923":{"position":[[967,4],[1016,4]]},"930":{"position":[[159,5],[412,5],[439,5]]},"931":{"position":[[1394,5]]},"934":{"position":[[967,4],[1016,4]]},"945":{"position":[[709,4],[927,5],[994,6],[1059,5],[1095,5]]},"950":{"position":[[967,4],[1016,4]]},"963":{"position":[[313,5],[566,5],[593,5]]},"965":{"position":[[1241,5]]},"968":{"position":[[967,4],[1016,4]]}},"keywords":{}}],["slot'",{"_index":5102,"title":{},"content":{"945":{"position":[[775,6]]}},"keywords":{}}],["slow",{"_index":1944,"title":{},"content":{"164":{"position":[[1226,5]]},"1292":{"position":[[5487,4]]},"1306":{"position":[[5487,4]]},"1329":{"position":[[5487,4]]}},"keywords":{}}],["slower",{"_index":1701,"title":{},"content":{"124":{"position":[[760,7]]}},"keywords":{}}],["slowli",{"_index":2203,"title":{"1007":{"position":[[0,6]]}},"content":{"198":{"position":[[879,6]]},"1452":{"position":[[888,7],[1103,7],[1322,6],[3832,6]]}},"keywords":{}}],["slug",{"_index":5153,"title":{},"content":{"997":{"position":[[161,4],[250,6]]}},"keywords":{}}],["small",{"_index":1702,"title":{},"content":{"124":{"position":[[1029,5]]},"180":{"position":[[827,5]]},"237":{"position":[[1380,5],[1447,5]]},"366":{"position":[[778,5],[845,5]]},"595":{"position":[[1687,5]]},"750":{"position":[[456,5],[533,5]]},"766":{"position":[[456,5],[533,5]]},"789":{"position":[[444,5],[521,5]]},"807":{"position":[[444,5],[521,5]]},"823":{"position":[[444,5],[521,5]]},"903":{"position":[[804,5],[871,5]]},"915":{"position":[[804,5],[871,5]]},"930":{"position":[[804,5],[871,5]]},"963":{"position":[[958,5],[1025,5]]},"1040":{"position":[[520,5],[587,5]]},"1050":{"position":[[520,5],[587,5]]},"1058":{"position":[[520,5],[587,5]]},"1435":{"position":[[489,6]]},"1451":{"position":[[244,5]]},"1459":{"position":[[481,5]]}},"keywords":{}}],["smaller",{"_index":2060,"title":{},"content":{"182":{"position":[[370,7]]},"375":{"position":[[145,7]]},"377":{"position":[[750,7]]},"821":{"position":[[330,7]]},"912":{"position":[[341,7]]},"1036":{"position":[[578,7]]},"1157":{"position":[[234,7]]},"1356":{"position":[[869,8]]}},"keywords":{}}],["smallest",{"_index":3451,"title":{},"content":{"377":{"position":[[915,8]]},"1388":{"position":[[555,8]]},"1476":{"position":[[65,8]]}},"keywords":{}}],["smallint",{"_index":5695,"title":{},"content":{"1140":{"position":[[3904,8]]},"1292":{"position":[[5537,8]]},"1306":{"position":[[5537,8]]},"1316":{"position":[[3904,8]]},"1329":{"position":[[5537,8]]},"1340":{"position":[[3904,8]]},"1351":{"position":[[3904,8]]},"1379":{"position":[[4426,8]]},"1403":{"position":[[4426,8]]},"1414":{"position":[[4426,8]]},"1431":{"position":[[3927,8]]}},"keywords":{}}],["smith",{"_index":2944,"title":{},"content":{"295":{"position":[[365,5]]}},"keywords":{}}],["smooth",{"_index":2591,"title":{},"content":{"239":{"position":[[35,6],[2678,6]]}},"keywords":{}}],["snapchat",{"_index":3380,"title":{"1024":{"position":[[0,8]]}},"content":{"364":{"position":[[3276,8]]},"1025":{"position":[[62,9]]},"1026":{"position":[[3,8]]},"1027":{"position":[[250,8]]},"1028":{"position":[[433,8]]}},"keywords":{}}],["snapchat:dev",{"_index":3381,"title":{},"content":{"364":{"position":[[3331,12]]},"1029":{"position":[[90,12]]}},"keywords":{}}],["snappi",{"_index":27,"title":{},"content":{"1":{"position":[[333,7]]}},"keywords":{}}],["snapshot",{"_index":1300,"title":{},"content":{"88":{"position":[[260,9]]},"112":{"position":[[555,8]]},"198":{"position":[[160,10],[180,9],[350,9]]},"209":{"position":[[323,8],[563,9]]},"785":{"position":[[38,9],[213,9]]},"1292":{"position":[[5593,8]]},"1306":{"position":[[5593,8]]},"1329":{"position":[[5593,8]]}},"keywords":{}}],["snippet",{"_index":2498,"title":{},"content":{"236":{"position":[[279,7],[2648,8]]}},"keywords":{}}],["snowflak",{"_index":2100,"title":{"187":{"position":[[46,9]]},"191":{"position":[[8,9]]},"192":{"position":[[36,10]]},"231":{"position":[[28,9]]},"287":{"position":[[26,9]]},"291":{"position":[[15,10]]},"298":{"position":[[13,9]]},"302":{"position":[[15,10]]},"326":{"position":[[0,10]]},"1030":{"position":[[0,9]]},"1381":{"position":[[0,9]]}},"content":{"188":{"position":[[110,9],[160,9]]},"189":{"position":[[510,9],[1337,9],[1546,10],[1770,9]]},"190":{"position":[[2151,10]]},"191":{"position":[[41,10],[156,9],[297,9],[917,9],[1987,9],[2197,9]]},"192":{"position":[[175,9],[283,10],[481,9],[588,10],[1547,10],[1640,9],[2029,9],[2301,9]]},"193":{"position":[[131,9],[207,9],[320,9],[531,10]]},"232":{"position":[[76,9],[257,9],[651,9],[845,10]]},"234":{"position":[[453,9],[514,10]]},"240":{"position":[[82,9],[158,9],[299,9],[878,9],[1948,9],[2210,9],[2552,9],[2792,9],[2883,9],[3565,9],[4367,9],[4718,9],[4873,9]]},"241":{"position":[[82,9]]},"242":{"position":[[342,9],[378,9]]},"243":{"position":[[111,10]]},"288":{"position":[[263,10],[587,9]]},"289":{"position":[[214,9],[488,9],[631,9]]},"290":{"position":[[1500,10]]},"291":{"position":[[20,9],[128,9],[221,9],[419,9],[644,10],[740,9],[998,9],[1166,10],[1402,10]]},"292":{"position":[[142,9]]},"299":{"position":[[255,10],[502,9]]},"300":{"position":[[193,9],[435,9],[571,9]]},"301":{"position":[[1596,10]]},"302":{"position":[[20,9],[128,9],[221,9],[419,9],[644,10],[740,9],[990,9],[1128,10],[1317,10]]},"303":{"position":[[133,9]]},"307":{"position":[[1516,10],[1614,9],[2384,10],[2482,9],[2952,9]]},"309":{"position":[[2335,10],[2433,9],[2942,10],[3040,9]]},"326":{"position":[[816,9],[1239,10]]},"363":{"position":[[2134,9]]},"1031":{"position":[[40,9],[620,9],[668,9]]},"1032":{"position":[[57,9],[127,9]]},"1033":{"position":[[254,9]]},"1034":{"position":[[68,9],[228,9],[308,9],[374,9],[518,9]]},"1036":{"position":[[11,9],[105,9],[676,9],[733,9]]},"1037":{"position":[[28,10]]},"1120":{"position":[[1740,9]]},"1382":{"position":[[40,9],[355,9],[414,9]]},"1383":{"position":[[73,9],[865,9],[1935,9]]},"1384":{"position":[[591,9],[735,9],[1154,9]]},"1385":{"position":[[113,9],[202,9]]},"1386":{"position":[[89,9],[259,9],[656,9],[874,9]]},"1388":{"position":[[116,9],[387,9]]},"1389":{"position":[[184,9],[498,9]]},"1391":{"position":[[158,9],[405,9],[762,9],[996,9]]},"1393":{"position":[[90,10],[134,9],[305,9]]},"1394":{"position":[[1,9],[261,10],[448,9]]},"1461":{"position":[[2904,10],[3808,10],[4204,10]]}},"keywords":{}}],["snowflake'",{"_index":2117,"title":{},"content":{"189":{"position":[[826,11]]},"1388":{"position":[[543,11]]},"1394":{"position":[[194,11]]}},"keywords":{}}],["snowflake.com/acmeprod",{"_index":6621,"title":{},"content":{"1461":{"position":[[3864,22]]}},"keywords":{}}],["snowflake:dev",{"_index":3244,"title":{},"content":{"344":{"position":[[284,13]]},"363":{"position":[[2190,13]]},"1120":{"position":[[1801,13]]},"1387":{"position":[[340,13],[966,13]]}},"keywords":{}}],["snowflake:v1",{"_index":3050,"title":{},"content":{"307":{"position":[[1583,12],[2451,12]]},"309":{"position":[[2402,12],[3009,12]]},"1037":{"position":[[90,12]]}},"keywords":{}}],["snowflake_cleanup.sql",{"_index":2627,"title":{},"content":{"242":{"position":[[419,21]]}},"keywords":{}}],["snowflake_us",{"_index":3242,"title":{},"content":{"344":{"position":[[206,14]]},"1387":{"position":[[273,14],[818,14]]}},"keywords":{}}],["snowpip",{"_index":6363,"title":{"1384":{"position":[[26,9]]},"1392":{"position":[[0,9]]}},"content":{"1384":{"position":[[27,8],[1254,8]]},"1392":{"position":[[1,8],[128,8],[356,8]]}},"keywords":{}}],["socket",{"_index":6197,"title":{},"content":{"1292":{"position":[[5633,6]]},"1306":{"position":[[5633,6]]},"1329":{"position":[[5633,6]]}},"keywords":{}}],["solut",{"_index":442,"title":{"323":{"position":[[33,10]]}},"content":{"14":{"position":[[969,8]]},"83":{"position":[[237,8]]},"84":{"position":[[1034,9]]},"114":{"position":[[500,8]]},"241":{"position":[[256,9]]},"309":{"position":[[1703,8]]},"977":{"position":[[414,9]]}},"keywords":{}}],["solv",{"_index":2876,"title":{},"content":{"281":{"position":[[449,5]]},"328":{"position":[[41,5]]}},"keywords":{}}],["somebodi",{"_index":4275,"title":{},"content":{"595":{"position":[[1558,8]]}},"keywords":{}}],["someon",{"_index":336,"title":{},"content":{"11":{"position":[[1416,7]]}},"keywords":{}}],["someth",{"_index":430,"title":{},"content":{"14":{"position":[[656,9]]},"99":{"position":[[791,9]]},"110":{"position":[[630,9]]},"165":{"position":[[963,9]]},"207":{"position":[[864,9]]},"217":{"position":[[1120,9]]},"218":{"position":[[832,9]]},"234":{"position":[[364,9]]},"240":{"position":[[4244,9]]},"268":{"position":[[746,9]]},"269":{"position":[[371,9]]},"295":{"position":[[3902,9]]},"759":{"position":[[65,9]]},"762":{"position":[[378,9]]},"763":{"position":[[67,9]]},"772":{"position":[[76,9]]},"775":{"position":[[378,9]]},"776":{"position":[[67,9]]},"799":{"position":[[63,9]]},"802":{"position":[[378,9]]},"803":{"position":[[67,9]]},"814":{"position":[[63,9]]},"817":{"position":[[378,9]]},"818":{"position":[[67,9]]},"830":{"position":[[63,9]]},"833":{"position":[[378,9]]},"834":{"position":[[67,9]]},"1031":{"position":[[713,9]]},"1453":{"position":[[1392,9]]},"1461":{"position":[[1948,9]]}},"keywords":{}}],["sometim",{"_index":800,"title":{},"content":{"53":{"position":[[397,9]]},"111":{"position":[[1,9]]},"279":{"position":[[527,9]]},"322":{"position":[[263,9]]},"660":{"position":[[147,9]]},"909":{"position":[[283,9]]},"925":{"position":[[283,9]]},"936":{"position":[[283,9]]},"952":{"position":[[283,9]]},"970":{"position":[[283,9]]}},"keywords":{}}],["somewhat",{"_index":2777,"title":{},"content":{"254":{"position":[[3989,8]]},"284":{"position":[[689,8]]},"309":{"position":[[861,8]]},"320":{"position":[[1612,8]]},"1178":{"position":[[370,8]]}},"keywords":{}}],["somewher",{"_index":734,"title":{},"content":{"41":{"position":[[503,9]]},"70":{"position":[[328,9]]}},"keywords":{}}],["sonam",{"_index":6199,"title":{},"content":{"1292":{"position":[[5718,6]]},"1306":{"position":[[5718,6]]},"1329":{"position":[[5718,6]]}},"keywords":{}}],["soon",{"_index":2116,"title":{},"content":{"189":{"position":[[792,4]]},"210":{"position":[[2500,4]]},"427":{"position":[[391,5]]}},"keywords":{}}],["sop",{"_index":1145,"title":{},"content":{"82":{"position":[[277,4],[343,4],[463,5],[719,4],[1104,4],[1179,4],[1597,7],[1651,6],[1732,4],[1873,4],[1956,4],[2390,5],[3064,4],[3140,4],[3558,4],[3762,4],[4019,4],[4197,4],[4292,4],[4507,5]]},"548":{"position":[[379,4],[544,5],[704,4]]},"640":{"position":[[220,5]]}},"keywords":{}}],["sophist",{"_index":2246,"title":{},"content":{"208":{"position":[[363,13]]}},"keywords":{}}],["sopswil",{"_index":1186,"title":{},"content":{"82":{"position":[[2860,8]]}},"keywords":{}}],["sort",{"_index":1839,"title":{},"content":{"150":{"position":[[131,6]]},"296":{"position":[[2292,6]]},"821":{"position":[[640,4]]},"912":{"position":[[656,4]]},"1123":{"position":[[166,4]]},"1467":{"position":[[1792,6],[1880,6],[2046,6],[2367,6]]},"1477":{"position":[[2612,6],[2782,6],[3429,6],[3935,6]]}},"keywords":{}}],["sortabl",{"_index":5731,"title":{},"content":{"1146":{"position":[[125,9]]},"1173":{"position":[[125,9]]},"1215":{"position":[[125,9]]},"1223":{"position":[[125,9]]}},"keywords":{}}],["sound",{"_index":6202,"title":{},"content":{"1292":{"position":[[5764,6]]},"1306":{"position":[[5764,6]]},"1329":{"position":[[5764,6]]}},"keywords":{}}],["sourc",{"_index":277,"title":{"53":{"position":[[6,8]]},"106":{"position":[[0,8]]},"182":{"position":[[14,6]]},"235":{"position":[[15,6]]},"275":{"position":[[5,6]]},"947":{"position":[[18,6]]}},"content":{"8":{"position":[[775,6]]},"11":{"position":[[1383,6],[1557,6]]},"13":{"position":[[1270,7]]},"14":{"position":[[319,7]]},"17":{"position":[[204,6]]},"20":{"position":[[141,6]]},"21":{"position":[[258,7],[399,7]]},"34":{"position":[[741,7]]},"35":{"position":[[61,6],[140,6],[199,7],[308,6]]},"37":{"position":[[19,6]]},"38":{"position":[[152,6],[279,6],[646,6]]},"40":{"position":[[148,6]]},"44":{"position":[[396,6]]},"45":{"position":[[58,6]]},"52":{"position":[[210,6]]},"53":{"position":[[70,7],[348,6],[454,6]]},"55":{"position":[[160,6]]},"56":{"position":[[321,7],[963,6],[1391,7]]},"58":{"position":[[789,6]]},"61":{"position":[[810,6]]},"63":{"position":[[949,6],[1072,6],[1207,6]]},"66":{"position":[[653,6]]},"67":{"position":[[302,6],[934,7]]},"68":{"position":[[234,6]]},"70":{"position":[[359,6]]},"77":{"position":[[488,6]]},"81":{"position":[[1451,7],[1780,6],[1976,7],[2036,7]]},"83":{"position":[[21,6],[871,6]]},"84":{"position":[[510,6],[1155,7]]},"87":{"position":[[147,6],[689,8],[766,6]]},"88":{"position":[[409,6]]},"92":{"position":[[16,6],[566,7],[792,7]]},"94":{"position":[[1260,6],[1343,7],[1462,6],[1610,6],[1960,6],[2618,7],[2771,6],[2861,6],[2961,6]]},"96":{"position":[[79,6],[165,7]]},"99":{"position":[[41,6],[218,6],[340,6],[463,6]]},"101":{"position":[[150,6]]},"102":{"position":[[56,6],[415,6]]},"103":{"position":[[91,6],[414,6],[602,6]]},"105":{"position":[[26,6],[143,6],[626,6],[730,6],[778,6],[1061,6],[1296,6]]},"106":{"position":[[5,6],[85,6],[238,6],[438,6],[467,6],[651,6]]},"107":{"position":[[9,6],[361,6],[450,6],[833,7],[1336,6],[1461,7],[2321,6],[2396,6],[2545,6],[2641,7],[2935,6],[3092,6],[3213,6],[3295,7],[4013,7]]},"109":{"position":[[51,6],[98,6],[214,6],[268,6],[318,6]]},"110":{"position":[[86,6],[200,6],[345,6],[874,6],[1055,6],[1150,6],[1263,6]]},"111":{"position":[[49,6],[138,6],[522,6],[600,6]]},"112":{"position":[[252,6]]},"120":{"position":[[931,6],[1006,7],[1162,6],[1512,6]]},"121":{"position":[[1173,7]]},"122":{"position":[[1179,7]]},"123":{"position":[[558,6],[641,7]]},"126":{"position":[[74,6],[124,6]]},"135":{"position":[[293,6]]},"137":{"position":[[134,7]]},"138":{"position":[[1864,6]]},"144":{"position":[[534,6]]},"162":{"position":[[232,6],[1385,6],[1500,7]]},"165":{"position":[[434,6]]},"169":{"position":[[1189,6]]},"175":{"position":[[50,6]]},"181":{"position":[[117,8]]},"183":{"position":[[182,6],[837,6],[1375,7],[1581,6],[2407,6],[2850,6],[3895,7],[4079,6],[4485,6]]},"184":{"position":[[86,6],[604,6]]},"189":{"position":[[954,6],[1090,7]]},"190":{"position":[[72,7],[180,7]]},"192":{"position":[[1195,6],[1600,6]]},"196":{"position":[[321,6]]},"198":{"position":[[255,6]]},"199":{"position":[[264,6]]},"205":{"position":[[61,9]]},"208":{"position":[[248,6],[1530,7]]},"211":{"position":[[744,6]]},"212":{"position":[[186,8]]},"213":{"position":[[242,6]]},"216":{"position":[[56,6]]},"217":{"position":[[55,6],[321,7],[412,7],[1024,6],[1862,6]]},"218":{"position":[[631,6],[1348,7],[1558,8],[2048,6]]},"219":{"position":[[489,7]]},"224":{"position":[[896,6]]},"228":{"position":[[813,6]]},"229":{"position":[[507,6],[625,6]]},"233":{"position":[[328,6]]},"237":{"position":[[1065,6],[2889,6]]},"239":{"position":[[232,7],[290,7],[322,7],[1805,6]]},"240":{"position":[[18,6],[3909,7]]},"243":{"position":[[180,8]]},"254":{"position":[[613,7],[2670,7],[3005,6],[3029,7],[3106,6],[3309,6]]},"255":{"position":[[165,6],[1139,6]]},"259":{"position":[[11,7],[417,6],[650,6],[876,6],[2222,6],[2457,6],[2638,6]]},"263":{"position":[[783,6],[857,6],[876,6]]},"264":{"position":[[380,6],[446,6]]},"267":{"position":[[326,7],[1227,6]]},"268":{"position":[[998,7],[1227,6],[1299,6],[1399,6],[1813,6],[1923,6]]},"269":{"position":[[608,7],[798,6],[870,6],[970,6],[1270,6],[1385,6]]},"270":{"position":[[370,6],[690,6],[810,6],[1169,6],[1382,6],[1471,6],[1683,6],[1883,6],[2001,6]]},"271":{"position":[[457,6]]},"274":{"position":[[719,8],[1563,6],[1635,6]]},"275":{"position":[[401,6],[480,6],[705,6]]},"277":{"position":[[689,7],[981,7],[1023,6],[1192,6]]},"278":{"position":[[1131,7]]},"279":{"position":[[729,6],[866,6],[1479,7],[1592,7]]},"280":{"position":[[1626,7],[1931,7]]},"281":{"position":[[1019,7]]},"286":{"position":[[167,6],[414,6]]},"289":{"position":[[62,6],[137,6]]},"290":{"position":[[298,7],[1342,6]]},"291":{"position":[[869,6],[1023,6],[1522,6]]},"295":{"position":[[10,7]]},"296":{"position":[[767,7],[868,7],[1716,6],[2768,7],[2869,7],[3164,6],[3254,6],[3753,6],[4735,7],[4934,7],[6827,6],[7445,6],[7806,6]]},"300":{"position":[[62,6],[137,6]]},"301":{"position":[[251,7]]},"302":{"position":[[869,6],[1442,6]]},"305":{"position":[[526,6]]},"306":{"position":[[477,6]]},"307":{"position":[[1653,7],[1856,7],[2521,7]]},"309":{"position":[[2472,7],[3079,7]]},"314":{"position":[[490,7],[2345,7],[2604,7],[2681,6],[2884,6]]},"315":{"position":[[171,6]]},"316":{"position":[[167,6],[1464,6]]},"321":{"position":[[767,6]]},"322":{"position":[[439,6],[1273,6],[1406,7],[1502,7]]},"323":{"position":[[123,7],[201,6],[358,6],[626,6],[1414,6]]},"326":{"position":[[282,6],[1455,6],[1607,7]]},"330":{"position":[[611,6]]},"335":{"position":[[68,6]]},"344":{"position":[[334,7]]},"350":{"position":[[258,6]]},"358":{"position":[[259,6]]},"363":{"position":[[175,6]]},"364":{"position":[[23,6]]},"369":{"position":[[261,6]]},"371":{"position":[[1516,6]]},"376":{"position":[[257,6]]},"386":{"position":[[261,6]]},"391":{"position":[[265,6]]},"396":{"position":[[259,6]]},"401":{"position":[[32,6],[321,6]]},"407":{"position":[[260,6]]},"416":{"position":[[253,6]]},"419":{"position":[[91,6]]},"423":{"position":[[260,6]]},"431":{"position":[[263,6]]},"437":{"position":[[269,6]]},"440":{"position":[[107,6]]},"447":{"position":[[259,6]]},"452":{"position":[[25,6]]},"453":{"position":[[260,6]]},"458":{"position":[[25,6]]},"459":{"position":[[260,6]]},"465":{"position":[[256,6]]},"472":{"position":[[257,6]]},"481":{"position":[[259,6]]},"482":{"position":[[133,6]]},"485":{"position":[[240,7]]},"495":{"position":[[265,6]]},"496":{"position":[[240,6]]},"501":{"position":[[27,6],[214,6]]},"508":{"position":[[260,6]]},"509":{"position":[[245,6]]},"516":{"position":[[269,6]]},"525":{"position":[[257,6]]},"533":{"position":[[257,6]]},"538":{"position":[[22,6]]},"539":{"position":[[257,6]]},"544":{"position":[[254,6]]},"547":{"position":[[92,6]]},"552":{"position":[[605,6]]},"555":{"position":[[258,6]]},"563":{"position":[[33,6]]},"571":{"position":[[255,6]]},"572":{"position":[[267,6]]},"583":{"position":[[259,6]]},"592":{"position":[[257,6]]},"610":{"position":[[272,6]]},"617":{"position":[[207,6]]},"618":{"position":[[264,6]]},"623":{"position":[[26,6]]},"624":{"position":[[261,6]]},"629":{"position":[[23,6]]},"630":{"position":[[258,6]]},"636":{"position":[[260,6]]},"637":{"position":[[1099,6]]},"640":{"position":[[288,6]]},"653":{"position":[[258,6]]},"657":{"position":[[240,7]]},"669":{"position":[[260,6]]},"673":{"position":[[240,7]]},"684":{"position":[[259,6]]},"688":{"position":[[240,7]]},"698":{"position":[[24,6]]},"699":{"position":[[259,6]]},"704":{"position":[[23,6]]},"705":{"position":[[258,6]]},"711":{"position":[[255,6]]},"719":{"position":[[258,6]]},"724":{"position":[[127,7]]},"727":{"position":[[265,6]]},"734":{"position":[[260,6]]},"740":{"position":[[258,6]]},"745":{"position":[[24,6]]},"746":{"position":[[259,6]]},"756":{"position":[[258,6]]},"758":{"position":[[500,6]]},"759":{"position":[[5,6]]},"769":{"position":[[258,6]]},"771":{"position":[[500,6]]},"772":{"position":[[5,6]]},"781":{"position":[[255,6]]},"786":{"position":[[324,6]]},"796":{"position":[[257,6]]},"798":{"position":[[498,6]]},"799":{"position":[[5,6]]},"805":{"position":[[231,7]]},"811":{"position":[[256,6]]},"813":{"position":[[498,6]]},"814":{"position":[[5,6]]},"820":{"position":[[231,7]]},"821":{"position":[[352,6]]},"827":{"position":[[256,6]]},"829":{"position":[[498,6]]},"830":{"position":[[5,6]]},"836":{"position":[[231,7]]},"841":{"position":[[259,6]]},"842":{"position":[[345,6],[372,6]]},"850":{"position":[[259,6]]},"858":{"position":[[257,6]]},"866":{"position":[[259,6]]},"878":{"position":[[269,6]]},"884":{"position":[[269,6]]},"890":{"position":[[257,6]]},"894":{"position":[[25,6]]},"895":{"position":[[48,6]]},"896":{"position":[[260,6]]},"899":{"position":[[15,6]]},"906":{"position":[[261,6]]},"908":{"position":[[544,6]]},"912":{"position":[[363,6]]},"921":{"position":[[261,6]]},"924":{"position":[[544,6]]},"933":{"position":[[261,6]]},"935":{"position":[[544,6]]},"947":{"position":[[36,7],[562,6],[979,6]]},"949":{"position":[[261,6]]},"951":{"position":[[544,6]]},"958":{"position":[[259,6]]},"967":{"position":[[261,6]]},"969":{"position":[[544,6]]},"981":{"position":[[259,6]]},"990":{"position":[[271,6]]},"995":{"position":[[22,6]]},"996":{"position":[[257,6]]},"1005":{"position":[[264,6]]},"1006":{"position":[[421,7]]},"1008":{"position":[[823,7],[1930,6]]},"1014":{"position":[[256,6]]},"1021":{"position":[[255,6]]},"1023":{"position":[[72,6]]},"1027":{"position":[[259,6]]},"1031":{"position":[[490,6],[583,6]]},"1033":{"position":[[268,6]]},"1036":{"position":[[856,6],[1002,6]]},"1044":{"position":[[261,6]]},"1046":{"position":[[478,6]]},"1052":{"position":[[261,6]]},"1054":{"position":[[478,6]]},"1060":{"position":[[261,6]]},"1062":{"position":[[478,6]]},"1069":{"position":[[263,6]]},"1075":{"position":[[257,6]]},"1084":{"position":[[267,6]]},"1089":{"position":[[27,6]]},"1090":{"position":[[50,6]]},"1093":{"position":[[262,6]]},"1096":{"position":[[17,6]]},"1100":{"position":[[268,6]]},"1106":{"position":[[264,6]]},"1112":{"position":[[257,6]]},"1118":{"position":[[266,6],[977,6],[1064,7],[1202,6]]},"1123":{"position":[[315,6]]},"1126":{"position":[[320,7]]},"1132":{"position":[[267,6]]},"1139":{"position":[[1211,7]]},"1145":{"position":[[312,7]]},"1152":{"position":[[405,7]]},"1155":{"position":[[435,6]]},"1163":{"position":[[367,7]]},"1166":{"position":[[56,6]]},"1171":{"position":[[316,7]]},"1176":{"position":[[536,7]]},"1180":{"position":[[315,7]]},"1182":{"position":[[649,7]]},"1185":{"position":[[336,7]]},"1189":{"position":[[500,7]]},"1191":{"position":[[669,7]]},"1194":{"position":[[546,7]]},"1197":{"position":[[499,7]]},"1203":{"position":[[707,7]]},"1207":{"position":[[587,7]]},"1214":{"position":[[252,7]]},"1221":{"position":[[256,7]]},"1226":{"position":[[347,7]]},"1231":{"position":[[312,7]]},"1232":{"position":[[535,7],[626,7]]},"1241":{"position":[[13,7]]},"1243":{"position":[[124,7]]},"1248":{"position":[[512,7]]},"1252":{"position":[[257,6]]},"1254":{"position":[[287,7]]},"1261":{"position":[[347,7]]},"1262":{"position":[[653,7]]},"1270":{"position":[[235,7]]},"1278":{"position":[[314,7]]},"1287":{"position":[[224,7]]},"1292":{"position":[[5807,6]]},"1302":{"position":[[224,7]]},"1306":{"position":[[5807,6]]},"1314":{"position":[[227,7]]},"1326":{"position":[[224,7]]},"1329":{"position":[[5807,6]]},"1338":{"position":[[227,7]]},"1349":{"position":[[227,7]]},"1354":{"position":[[371,7]]},"1357":{"position":[[456,7]]},"1362":{"position":[[521,6],[528,6]]},"1363":{"position":[[245,7]]},"1368":{"position":[[163,7]]},"1377":{"position":[[228,7]]},"1382":{"position":[[590,7]]},"1387":{"position":[[523,7],[1149,7]]},"1389":{"position":[[651,7]]},"1401":{"position":[[228,7]]},"1412":{"position":[[228,7]]},"1421":{"position":[[526,7]]},"1428":{"position":[[268,7]]},"1429":{"position":[[897,7]]},"1447":{"position":[[206,6]]},"1451":{"position":[[207,6],[425,6]]},"1461":{"position":[[2199,6]]},"1472":{"position":[[805,7]]},"1475":{"position":[[917,6]]},"1479":{"position":[[96,6]]},"1480":{"position":[[637,6],[712,7],[868,6],[1218,6]]}},"keywords":{}}],["source."",{"_index":4958,"title":{},"content":{"895":{"position":[[634,13]]}},"keywords":{}}],["source.collect",{"_index":663,"title":{},"content":{"32":{"position":[[228,19]]}},"keywords":{}}],["source[sourc",{"_index":306,"title":{},"content":{"11":{"position":[[428,13]]}},"keywords":{}}],["source_auto_p",{"_index":6205,"title":{},"content":{"1292":{"position":[[5843,13]]},"1306":{"position":[[5843,13]]},"1329":{"position":[[5843,13]]}},"keywords":{}}],["source_bind",{"_index":6208,"title":{},"content":{"1292":{"position":[[5891,11]]},"1306":{"position":[[5891,11]]},"1329":{"position":[[5891,11]]}},"keywords":{}}],["source_compr",{"_index":6210,"title":{},"content":{"1292":{"position":[[5933,13]]},"1306":{"position":[[5933,13]]},"1329":{"position":[[5933,13]]}},"keywords":{}}],["source_connec",{"_index":6213,"title":{},"content":{"1292":{"position":[[5989,13]]},"1306":{"position":[[5989,13]]},"1329":{"position":[[5989,13]]}},"keywords":{}}],["source_credenti",{"_index":4091,"title":{},"content":{"548":{"position":[[1208,19]]}},"keywords":{}}],["source_db",{"_index":5218,"title":{},"content":{"1032":{"position":[[291,12]]},"1037":{"position":[[191,9]]}},"keywords":{}}],["source_delay",{"_index":6214,"title":{},"content":{"1292":{"position":[[6042,12]]},"1306":{"position":[[6042,12]]},"1329":{"position":[[6042,12]]}},"keywords":{}}],["source_heartb",{"_index":6217,"title":{},"content":{"1292":{"position":[[6091,13]]},"1306":{"position":[[6091,13]]},"1329":{"position":[[6091,13]]}},"keywords":{}}],["source_host",{"_index":6067,"title":{},"content":{"1292":{"position":[[2995,11]]},"1306":{"position":[[2995,11]]},"1329":{"position":[[2995,11]]}},"keywords":{}}],["source_log_fi",{"_index":6070,"title":{},"content":{"1292":{"position":[[3036,13]]},"1306":{"position":[[3036,13]]},"1329":{"position":[[3036,13]]}},"keywords":{}}],["source_log_po",{"_index":6072,"title":{},"content":{"1292":{"position":[[3084,13]]},"1306":{"position":[[3084,13]]},"1329":{"position":[[3084,13]]}},"keywords":{}}],["source_nam",{"_index":5250,"title":{},"content":{"1042":{"position":[[1031,12]]},"1043":{"position":[[1695,12]]},"1051":{"position":[[1957,12]]},"1059":{"position":[[1750,12]]}},"keywords":{}}],["source_passwo",{"_index":6074,"title":{},"content":{"1292":{"position":[[3131,13]]},"1306":{"position":[[3131,13]]},"1329":{"position":[[3131,13]]}},"keywords":{}}],["source_port",{"_index":6079,"title":{},"content":{"1292":{"position":[[3197,11]]},"1306":{"position":[[3197,11]]},"1329":{"position":[[3197,11]]}},"keywords":{}}],["source_publ",{"_index":6081,"title":{},"content":{"1292":{"position":[[3248,13]]},"1306":{"position":[[3248,13]]},"1329":{"position":[[3248,13]]}},"keywords":{}}],["source_schema",{"_index":5249,"title":{},"content":{"1042":{"position":[[1007,14]]},"1043":{"position":[[1671,14]]},"1051":{"position":[[1933,14]]},"1059":{"position":[[1726,14]]}},"keywords":{}}],["source_ssl",{"_index":6087,"title":{},"content":{"1292":{"position":[[3345,10]]},"1306":{"position":[[3345,10]]},"1329":{"position":[[3345,10]]}},"keywords":{}}],["source_ssl_c",{"_index":6095,"title":{},"content":{"1292":{"position":[[3500,13]]},"1306":{"position":[[3500,13]]},"1329":{"position":[[3500,13]]}},"keywords":{}}],["source_ssl_ca",{"_index":6091,"title":{},"content":{"1292":{"position":[[3394,13],[3450,13]]},"1306":{"position":[[3394,13],[3450,13]]},"1329":{"position":[[3394,13],[3450,13]]}},"keywords":{}}],["source_ssl_ci",{"_index":6098,"title":{},"content":{"1292":{"position":[[3543,13]]},"1306":{"position":[[3543,13]]},"1329":{"position":[[3543,13]]}},"keywords":{}}],["source_ssl_cr",{"_index":6100,"title":{},"content":{"1292":{"position":[[3589,13],[3638,13]]},"1306":{"position":[[3589,13],[3638,13]]},"1329":{"position":[[3589,13],[3638,13]]}},"keywords":{}}],["source_ssl_k",{"_index":6102,"title":{},"content":{"1292":{"position":[[3686,13]]},"1306":{"position":[[3686,13]]},"1329":{"position":[[3686,13]]}},"keywords":{}}],["source_ssl_v",{"_index":6105,"title":{},"content":{"1292":{"position":[[3736,13]]},"1306":{"position":[[3736,13]]},"1329":{"position":[[3736,13]]}},"keywords":{}}],["source_tls_ci",{"_index":6109,"title":{},"content":{"1292":{"position":[[3787,13]]},"1306":{"position":[[3787,13]]},"1329":{"position":[[3787,13]]}},"keywords":{}}],["source_tls_v",{"_index":6110,"title":{},"content":{"1292":{"position":[[3827,13]]},"1306":{"position":[[3827,13]]},"1329":{"position":[[3827,13]]}},"keywords":{}}],["source_us",{"_index":6112,"title":{},"content":{"1292":{"position":[[3869,11]]},"1306":{"position":[[3869,11]]},"1329":{"position":[[3869,11]]}},"keywords":{}}],["source_zstd_c",{"_index":6115,"title":{},"content":{"1292":{"position":[[3918,13]]},"1306":{"position":[[3918,13]]},"1329":{"position":[[3918,13]]}},"keywords":{}}],["sourcecaptur",{"_index":1648,"title":{"126":{"position":[[6,13]]}},"content":{"120":{"position":[[2614,13],[2848,14]]},"126":{"position":[[248,13]]}},"keywords":{}}],["sourcefiltervaluestypescript",{"_index":3078,"title":{},"content":{"315":{"position":[[1336,28],[1616,28],[1911,28]]}},"keywords":{}}],["sourcefromcustom",{"_index":3013,"title":{},"content":{"296":{"position":[[4973,19],[5261,19],[5618,19],[5913,19],[6311,19]]}},"keywords":{}}],["sourcefromord",{"_index":3011,"title":{},"content":{"296":{"position":[[4774,16],[5243,17],[5508,16],[5895,17],[6160,16]]}},"keywords":{}}],["sourcefromoutcom",{"_index":2887,"title":{},"content":{"281":{"position":[[1250,18],[1429,18]]}},"keywords":{}}],["sourceon",{"_index":2425,"title":{},"content":{"216":{"position":[[200,9]]}},"keywords":{}}],["sourceretri",{"_index":6083,"title":{},"content":{"1292":{"position":[[3296,11]]},"1306":{"position":[[3296,11]]},"1329":{"position":[[3296,11]]}},"keywords":{}}],["sources),deriv",{"_index":3158,"title":{},"content":{"323":{"position":[[438,20]]}},"keywords":{}}],["sourcespageslocationsmonthli",{"_index":4145,"title":{},"content":{"568":{"position":[[100,28]]}},"keywords":{}}],["sourceswebsit",{"_index":4216,"title":{},"content":{"580":{"position":[[117,14]]}},"keywords":{}}],["space",{"_index":1344,"title":{},"content":{"94":{"position":[[1204,6]]},"237":{"position":[[1395,6]]},"320":{"position":[[27,5]]},"366":{"position":[[793,6]]},"534":{"position":[[266,5],[1137,5]]},"720":{"position":[[278,5]]},"903":{"position":[[819,6]]},"915":{"position":[[819,6]]},"922":{"position":[[3361,6]]},"930":{"position":[[819,6]]},"963":{"position":[[973,6]]},"1040":{"position":[[535,6]]},"1050":{"position":[[535,6]]},"1058":{"position":[[535,6]]},"1140":{"position":[[3996,5]]},"1316":{"position":[[3996,5]]},"1340":{"position":[[3996,5]]},"1351":{"position":[[3996,5]]},"1379":{"position":[[4526,5]]},"1403":{"position":[[4526,5]]},"1414":{"position":[[4526,5]]},"1431":{"position":[[4019,5]]}},"keywords":{}}],["space"",{"_index":4581,"title":{},"content":{"750":{"position":[[476,11]]},"766":{"position":[[476,11]]},"789":{"position":[[464,11]]},"807":{"position":[[464,11]]},"823":{"position":[[464,11]]}},"keywords":{}}],["spammi",{"_index":2577,"title":{},"content":{"237":{"position":[[3416,7]]}},"keywords":{}}],["spare",{"_index":2311,"title":{},"content":{"210":{"position":[[1921,5]]}},"keywords":{}}],["spark",{"_index":165,"title":{"321":{"position":[[0,6]]}},"content":{"4":{"position":[[357,5]]},"107":{"position":[[168,6]]},"113":{"position":[[274,6]]},"321":{"position":[[1,5],[263,6],[795,5],[1226,5],[1293,5],[1432,5],[1560,6],[1724,5],[2072,5]]},"329":{"position":[[518,6]]},"1164":{"position":[[733,6]]}},"keywords":{}}],["spark'",{"_index":3139,"title":{},"content":{"321":{"position":[[1067,7]]}},"keywords":{}}],["spatial",{"_index":6120,"title":{},"content":{"1292":{"position":[[3970,7]]},"1306":{"position":[[3970,7]]},"1329":{"position":[[3970,7]]}},"keywords":{}}],["speak",{"_index":1447,"title":{},"content":{"101":{"position":[[199,9]]},"109":{"position":[[141,9]]},"760":{"position":[[718,8]]},"773":{"position":[[718,8]]},"800":{"position":[[718,8]]},"815":{"position":[[718,8]]},"831":{"position":[[718,8]]}},"keywords":{}}],["spec",{"_index":255,"title":{"147":{"position":[[0,4]]},"150":{"position":[[0,4]]},"153":{"position":[[0,4]]}},"content":{"7":{"position":[[687,5]]},"11":{"position":[[645,5],[655,4],[824,4],[1326,5],[1823,4]]},"13":{"position":[[264,5],[581,5],[715,5]]},"14":{"position":[[281,5],[757,4]]},"54":{"position":[[677,5]]},"55":{"position":[[488,5]]},"61":{"position":[[1312,5]]},"62":{"position":[[92,6],[234,5],[575,5]]},"63":{"position":[[134,6]]},"147":{"position":[[10,4]]},"153":{"position":[[10,4]]},"165":{"position":[[1172,4]]},"182":{"position":[[155,4]]},"229":{"position":[[166,5]]},"239":{"position":[[2243,5]]},"263":{"position":[[494,5]]},"270":{"position":[[769,5]]},"274":{"position":[[1301,6],[1383,5],[1513,5]]},"305":{"position":[[359,5],[472,4]]},"306":{"position":[[121,4],[539,4]]},"307":{"position":[[330,5],[1007,6]]},"309":{"position":[[2086,6],[2672,5],[3256,4]]},"323":{"position":[[1545,5]]},"1008":{"position":[[1141,5]]},"1036":{"position":[[522,4]]},"1461":{"position":[[132,4],[279,5],[1808,4],[1915,5],[2455,5],[2722,5],[3135,5]]}},"keywords":{}}],["special",{"_index":1293,"title":{},"content":{"87":{"position":[[611,7]]},"98":{"position":[[873,7]]},"165":{"position":[[1865,7]]},"329":{"position":[[1156,11]]},"489":{"position":[[382,7],[429,7]]},"522":{"position":[[405,7]]},"530":{"position":[[405,7]]},"662":{"position":[[382,7],[429,7]]},"677":{"position":[[382,7],[429,7]]},"692":{"position":[[382,7],[429,7]]}},"keywords":{}}],["specif",{"_index":1,"title":{"1":{"position":[[0,14]]},"24":{"position":[[5,13]]},"56":{"position":[[0,14]]},"62":{"position":[[12,14]]},"69":{"position":[[0,14]]},"87":{"position":[[0,14]]},"94":{"position":[[0,14]]},"120":{"position":[[0,14]]},"124":{"position":[[12,8]]},"272":{"position":[[12,13]]},"274":{"position":[[5,14]]},"275":{"position":[[33,15]]},"286":{"position":[[7,8]]},"524":{"position":[[26,13]]},"532":{"position":[[26,13]]},"554":{"position":[[26,13]]},"617":{"position":[[26,13]]},"645":{"position":[[26,13]]},"652":{"position":[[26,13]]},"718":{"position":[[26,13]]},"733":{"position":[[26,13]]},"988":{"position":[[26,13]]},"1003":{"position":[[26,13]]},"1097":{"position":[[10,8]]},"1480":{"position":[[0,14]]}},"content":{"2":{"position":[[762,8],[834,14]]},"11":{"position":[[627,14]]},"12":{"position":[[216,13]]},"13":{"position":[[1834,8]]},"24":{"position":[[52,13],[163,13],[275,13]]},"25":{"position":[[37,13],[174,13]]},"26":{"position":[[60,13],[216,13]]},"33":{"position":[[195,13],[291,14]]},"56":{"position":[[30,13],[1588,13],[1773,8],[1871,8]]},"60":{"position":[[515,14],[566,14]]},"61":{"position":[[43,13],[124,14],[482,14],[766,14],[1086,14],[1120,14]]},"62":{"position":[[15,14],[175,14],[306,13]]},"63":{"position":[[6,14],[187,13],[234,13],[331,14],[533,14],[935,13],[1096,14]]},"64":{"position":[[1001,14]]},"67":{"position":[[275,8]]},"68":{"position":[[539,14]]},"69":{"position":[[33,13]]},"70":{"position":[[240,14],[579,8]]},"75":{"position":[[8,13],[254,13],[405,13]]},"79":{"position":[[132,15]]},"80":{"position":[[669,14]]},"81":{"position":[[247,8],[381,8],[513,8],[573,8],[623,8],[750,14],[828,14],[962,13],[2313,8],[2389,13]]},"82":{"position":[[1219,13],[2787,14],[4925,14]]},"84":{"position":[[773,13]]},"89":{"position":[[63,13]]},"91":{"position":[[285,14],[333,13],[391,13]]},"97":{"position":[[92,14]]},"101":{"position":[[56,9]]},"107":{"position":[[718,8],[1624,8],[3472,8]]},"120":{"position":[[38,13],[1920,8],[2018,8]]},"130":{"position":[[77,8]]},"138":{"position":[[2774,14]]},"139":{"position":[[21,13]]},"140":{"position":[[259,8]]},"141":{"position":[[281,13]]},"142":{"position":[[2859,14]]},"143":{"position":[[21,13]]},"144":{"position":[[450,8]]},"146":{"position":[[608,8]]},"147":{"position":[[37,13]]},"149":{"position":[[581,8]]},"152":{"position":[[584,8]]},"153":{"position":[[37,13]]},"156":{"position":[[140,15]]},"161":{"position":[[201,8]]},"164":{"position":[[135,8]]},"165":{"position":[[938,14]]},"174":{"position":[[569,8]]},"192":{"position":[[2054,13]]},"197":{"position":[[1323,8],[1481,8]]},"207":{"position":[[839,14],[1063,13]]},"208":{"position":[[778,14]]},"210":{"position":[[465,14]]},"221":{"position":[[1962,8]]},"228":{"position":[[214,14]]},"229":{"position":[[107,13],[930,14]]},"230":{"position":[[872,14],[941,14]]},"239":{"position":[[2163,14]]},"259":{"position":[[138,14],[345,13],[1819,14],[2034,13]]},"260":{"position":[[84,13]]},"263":{"position":[[590,14],[1169,14]]},"264":{"position":[[119,13],[203,15]]},"267":{"position":[[1385,14],[1561,13]]},"270":{"position":[[1014,14],[1187,13]]},"274":{"position":[[461,14],[1245,14],[1325,14],[1438,14],[1664,14],[1729,14],[1964,15]]},"275":{"position":[[141,13],[225,15],[526,14],[616,15],[652,14],[828,15]]},"281":{"position":[[623,13]]},"284":{"position":[[392,9]]},"285":{"position":[[212,13],[262,13],[338,14]]},"286":{"position":[[7,8],[158,8],[207,8]]},"301":{"position":[[947,8]]},"305":{"position":[[341,14]]},"308":{"position":[[981,13]]},"309":{"position":[[148,8]]},"323":{"position":[[1384,14]]},"350":{"position":[[89,13],[177,13],[234,8]]},"358":{"position":[[89,13],[177,13],[234,8]]},"369":{"position":[[89,13],[177,13],[234,8]]},"376":{"position":[[89,13],[177,13],[234,8]]},"386":{"position":[[89,13],[177,13],[234,8]]},"388":{"position":[[13,13]]},"391":{"position":[[89,13],[177,13],[234,8]]},"396":{"position":[[89,13],[177,13],[234,8]]},"401":{"position":[[113,13],[223,13],[289,8]]},"407":{"position":[[89,13],[177,13],[234,8]]},"414":{"position":[[100,8],[230,8]]},"415":{"position":[[186,8],[490,8]]},"416":{"position":[[89,13],[177,13],[234,8]]},"419":{"position":[[2773,13]]},"423":{"position":[[89,13],[177,13],[234,8]]},"431":{"position":[[89,13],[177,13],[234,8]]},"437":{"position":[[89,13],[177,13],[234,8]]},"441":{"position":[[1382,13]]},"447":{"position":[[89,13],[177,13],[234,8]]},"449":{"position":[[13,13]]},"452":{"position":[[164,12]]},"453":{"position":[[89,13],[177,13],[234,8]]},"459":{"position":[[89,13],[177,13],[234,8]]},"465":{"position":[[89,13],[177,13],[234,8]]},"472":{"position":[[89,13],[177,13],[234,8]]},"473":{"position":[[13,13]]},"481":{"position":[[89,13],[177,13],[234,8]]},"482":{"position":[[436,8]]},"485":{"position":[[108,8],[161,8]]},"495":{"position":[[89,13],[177,13],[234,8]]},"500":{"position":[[187,8]]},"501":{"position":[[133,13],[190,8]]},"508":{"position":[[89,13],[177,13],[234,8]]},"515":{"position":[[768,12]]},"516":{"position":[[89,13],[177,13],[234,8]]},"517":{"position":[[3356,12],[3407,8],[3655,12],[3706,8]]},"518":{"position":[[13,13]]},"525":{"position":[[89,13],[177,13],[234,8]]},"527":{"position":[[13,13]]},"533":{"position":[[89,13],[177,13],[234,8]]},"535":{"position":[[13,13]]},"539":{"position":[[89,13],[177,13],[234,8]]},"544":{"position":[[89,13],[177,13],[234,8]]},"547":{"position":[[2775,13]]},"555":{"position":[[86,13],[174,13],[231,8]]},"557":{"position":[[13,13]]},"562":{"position":[[213,12]]},"563":{"position":[[105,13],[241,13],[298,8]]},"572":{"position":[[89,13],[177,13],[234,8]]},"583":{"position":[[79,13],[167,13],[224,8]]},"592":{"position":[[86,13],[174,13],[231,8]]},"600":{"position":[[89,13]]},"610":{"position":[[89,13],[177,13],[234,8]]},"612":{"position":[[13,13]]},"618":{"position":[[89,13],[177,13],[234,8]]},"624":{"position":[[89,13],[177,13],[234,8]]},"630":{"position":[[89,13],[177,13],[234,8]]},"636":{"position":[[89,13],[177,13],[234,8]]},"639":{"position":[[2400,13]]},"646":{"position":[[89,13],[177,13],[234,8]]},"653":{"position":[[89,13],[177,13],[234,8]]},"657":{"position":[[108,8],[161,8]]},"669":{"position":[[89,13],[177,13],[234,8]]},"673":{"position":[[108,8],[161,8]]},"684":{"position":[[89,13],[177,13],[234,8]]},"688":{"position":[[108,8],[161,8]]},"699":{"position":[[89,13],[177,13],[234,8]]},"705":{"position":[[89,13],[177,13],[234,8]]},"711":{"position":[[89,13],[177,13],[234,8]]},"719":{"position":[[89,14],[172,13],[229,8]]},"721":{"position":[[13,13]]},"727":{"position":[[89,13],[177,13],[234,8]]},"734":{"position":[[89,13],[177,13],[234,8]]},"740":{"position":[[89,13],[177,13],[234,8]]},"746":{"position":[[89,13],[177,13],[234,8]]},"750":{"position":[[563,13],[1384,8]]},"756":{"position":[[89,13],[177,13],[234,8]]},"757":{"position":[[1264,8],[1865,8]]},"766":{"position":[[563,13]]},"769":{"position":[[89,13],[177,13],[234,8]]},"770":{"position":[[1264,8],[1865,8]]},"781":{"position":[[86,13],[174,13],[231,8]]},"789":{"position":[[551,13],[1785,8]]},"796":{"position":[[89,13],[178,13],[235,8]]},"797":{"position":[[1264,8],[1865,8]]},"805":{"position":[[270,13]]},"807":{"position":[[551,13]]},"811":{"position":[[89,13],[177,13],[234,8]]},"812":{"position":[[1264,8],[1865,8]]},"820":{"position":[[270,13]]},"823":{"position":[[551,13]]},"827":{"position":[[89,13],[177,13],[234,8]]},"828":{"position":[[1264,8],[1865,8]]},"836":{"position":[[270,13]]},"841":{"position":[[89,13],[177,13],[234,8]]},"847":{"position":[[210,13]]},"850":{"position":[[89,13],[177,13],[234,8]]},"858":{"position":[[89,13],[177,13],[234,8]]},"860":{"position":[[13,13]]},"864":{"position":[[557,8]]},"866":{"position":[[89,13],[177,13],[234,8]]},"867":{"position":[[1972,8]]},"870":{"position":[[56,8],[131,8]]},"876":{"position":[[557,8]]},"878":{"position":[[89,13],[177,13],[234,8]]},"884":{"position":[[89,13],[177,13],[234,8]]},"890":{"position":[[89,13],[178,13],[235,8]]},"896":{"position":[[89,13],[177,13],[234,8]]},"906":{"position":[[89,13],[177,13],[234,8]]},"909":{"position":[[1101,13]]},"911":{"position":[[210,8]]},"915":{"position":[[1241,8]]},"917":{"position":[[932,8]]},"919":{"position":[[1457,8]]},"921":{"position":[[89,13],[177,13],[234,8]]},"925":{"position":[[1101,13]]},"927":{"position":[[210,8]]},"933":{"position":[[89,13],[177,13],[234,8]]},"936":{"position":[[1101,13]]},"938":{"position":[[210,8]]},"944":{"position":[[393,8]]},"949":{"position":[[89,13],[177,13],[234,8]]},"952":{"position":[[1101,13]]},"954":{"position":[[210,8]]},"958":{"position":[[89,13],[177,13],[234,8]]},"963":{"position":[[1395,8]]},"965":{"position":[[932,8]]},"967":{"position":[[89,13],[177,13],[234,8]]},"970":{"position":[[1101,13]]},"972":{"position":[[210,8]]},"981":{"position":[[89,13],[177,13],[234,8]]},"988":{"position":[[44,14]]},"989":{"position":[[621,13]]},"990":{"position":[[89,13],[177,13],[234,8]]},"996":{"position":[[89,13],[177,13],[234,8]]},"1003":{"position":[[44,14]]},"1004":{"position":[[704,13]]},"1005":{"position":[[86,13],[174,13],[231,8]]},"1008":{"position":[[1059,14],[1443,13]]},"1010":{"position":[[13,13]]},"1014":{"position":[[89,13],[177,13],[234,8]]},"1021":{"position":[[89,13],[177,13],[234,8]]},"1023":{"position":[[2756,13]]},"1027":{"position":[[89,13],[177,13],[234,8]]},"1033":{"position":[[93,13],[181,13],[238,8]]},"1044":{"position":[[89,13],[177,13],[234,8]]},"1047":{"position":[[499,13],[893,13]]},"1052":{"position":[[89,13],[177,13],[234,8]]},"1055":{"position":[[499,13],[893,13]]},"1060":{"position":[[89,13],[177,13],[234,8]]},"1063":{"position":[[499,13],[893,13]]},"1069":{"position":[[89,13],[177,13],[234,8]]},"1071":{"position":[[13,13]]},"1075":{"position":[[89,13],[177,13],[234,8]]},"1084":{"position":[[89,13],[177,13],[234,8]]},"1086":{"position":[[13,13]]},"1093":{"position":[[89,13],[177,13],[234,8]]},"1100":{"position":[[89,13],[177,13],[234,8]]},"1105":{"position":[[148,12]]},"1106":{"position":[[89,13],[178,13],[235,8]]},"1112":{"position":[[89,13],[177,13],[234,8]]},"1124":{"position":[[89,13],[177,13],[234,8]]},"1132":{"position":[[89,13],[178,13],[235,8]]},"1136":{"position":[[167,14]]},"1140":{"position":[[4037,8]]},"1146":{"position":[[476,8]]},"1149":{"position":[[296,14]]},"1155":{"position":[[634,13]]},"1173":{"position":[[488,8]]},"1176":{"position":[[644,8]]},"1183":{"position":[[720,13]]},"1185":{"position":[[444,8]]},"1188":{"position":[[180,8]]},"1194":{"position":[[654,8]]},"1200":{"position":[[528,13],[596,13]]},"1203":{"position":[[815,8]]},"1215":{"position":[[476,8]]},"1223":{"position":[[488,8]]},"1226":{"position":[[455,8]]},"1230":{"position":[[771,8]]},"1243":{"position":[[232,8]]},"1252":{"position":[[86,13],[174,13],[231,8]]},"1281":{"position":[[206,14]]},"1292":{"position":[[4018,8]]},"1295":{"position":[[206,14]]},"1306":{"position":[[4018,8]]},"1309":{"position":[[167,14]]},"1316":{"position":[[4037,8]]},"1319":{"position":[[206,14]]},"1329":{"position":[[4018,8]]},"1332":{"position":[[167,14]]},"1340":{"position":[[4037,8]]},"1343":{"position":[[167,14]]},"1351":{"position":[[4037,8]]},"1354":{"position":[[479,8]]},"1356":{"position":[[674,8]]},"1372":{"position":[[206,14]]},"1379":{"position":[[4569,8]]},"1382":{"position":[[698,8]]},"1396":{"position":[[206,14]]},"1403":{"position":[[4569,8]]},"1406":{"position":[[206,14]]},"1414":{"position":[[4569,8]]},"1418":{"position":[[184,8]]},"1426":{"position":[[311,14]]},"1431":{"position":[[4060,8]]},"1446":{"position":[[352,13]]},"1452":{"position":[[1607,13],[1850,13]]},"1453":{"position":[[979,8]]},"1471":{"position":[[692,8],[771,8]]},"1475":{"position":[[1444,8]]},"1479":{"position":[[170,8]]},"1480":{"position":[[55,13]]}},"keywords":{}}],["specifi",{"_index":448,"title":{"480":{"position":[[0,10]]},"1047":{"position":[[0,10]]},"1055":{"position":[[0,10]]},"1063":{"position":[[0,10]]}},"content":{"16":{"position":[[67,9]]},"68":{"position":[[1020,7],[1138,9]]},"69":{"position":[[502,9]]},"71":{"position":[[89,9]]},"75":{"position":[[423,7]]},"81":{"position":[[2226,7]]},"91":{"position":[[257,9]]},"94":{"position":[[17,9]]},"123":{"position":[[572,9]]},"206":{"position":[[481,7]]},"221":{"position":[[863,7],[896,10]]},"225":{"position":[[307,7],[340,10]]},"237":{"position":[[2246,9]]},"254":{"position":[[2277,9],[2543,7]]},"264":{"position":[[399,10]]},"268":{"position":[[1181,7]]},"269":{"position":[[752,7]]},"270":{"position":[[658,10],[1340,7]]},"274":{"position":[[964,10]]},"290":{"position":[[840,7]]},"296":{"position":[[1132,7]]},"309":{"position":[[3269,7]]},"314":{"position":[[1818,9],[2174,7]]},"351":{"position":[[245,7]]},"366":{"position":[[435,10]]},"370":{"position":[[136,7],[593,9]]},"373":{"position":[[562,7],[873,8]]},"379":{"position":[[953,9]]},"385":{"position":[[616,7],[716,7]]},"390":{"position":[[402,9]]},"395":{"position":[[571,9]]},"402":{"position":[[380,9]]},"419":{"position":[[666,7],[740,10],[860,7],[960,10],[1569,7],[1864,9]]},"440":{"position":[[682,7],[756,10],[876,7],[976,10]]},"441":{"position":[[178,7],[473,9]]},"454":{"position":[[97,9]]},"469":{"position":[[39,7]]},"479":{"position":[[515,9],[661,7]]},"480":{"position":[[960,10],[1225,10],[1396,9],[1601,9]]},"499":{"position":[[59,9],[356,7]]},"504":{"position":[[610,7],[672,10],[792,7],[876,10],[1198,7],[1493,9]]},"517":{"position":[[225,7],[460,9],[2279,10],[3537,7]]},"529":{"position":[[39,7]]},"534":{"position":[[390,9],[1060,7]]},"547":{"position":[[667,7],[741,10],[861,7],[961,10],[1571,7],[1866,9]]},"556":{"position":[[1471,9]]},"562":{"position":[[254,9]]},"574":{"position":[[376,7]]},"577":{"position":[[201,9]]},"588":{"position":[[196,9]]},"634":{"position":[[62,9],[348,7]]},"639":{"position":[[608,7],[670,10],[790,7],[874,10],[1196,7],[1491,9]]},"753":{"position":[[808,9]]},"754":{"position":[[471,7],[508,7]]},"757":{"position":[[299,9]]},"770":{"position":[[299,9]]},"782":{"position":[[123,7],[286,9]]},"793":{"position":[[779,9]]},"794":{"position":[[344,7],[550,7]]},"797":{"position":[[299,9]]},"805":{"position":[[288,7]]},"809":{"position":[[344,7],[550,7]]},"812":{"position":[[299,9]]},"820":{"position":[[288,7]]},"821":{"position":[[1136,9]]},"825":{"position":[[344,7],[550,7]]},"828":{"position":[[299,9]]},"836":{"position":[[288,7]]},"846":{"position":[[188,9]]},"865":{"position":[[39,7]]},"867":{"position":[[258,9],[1709,9]]},"877":{"position":[[39,7]]},"903":{"position":[[461,10]]},"907":{"position":[[376,9]]},"915":{"position":[[461,10]]},"923":{"position":[[376,9]]},"930":{"position":[[461,10]]},"934":{"position":[[376,9]]},"943":{"position":[[532,7]]},"947":{"position":[[652,9],[862,7]]},"950":{"position":[[376,9]]},"963":{"position":[[615,10]]},"968":{"position":[[376,9]]},"989":{"position":[[104,7]]},"1004":{"position":[[104,7]]},"1023":{"position":[[647,7],[721,10],[841,7],[941,10],[1552,7],[1847,9]]},"1034":{"position":[[456,9]]},"1036":{"position":[[565,10]]},"1040":{"position":[[137,9],[221,7]]},"1045":{"position":[[361,9]]},"1047":{"position":[[93,10]]},"1050":{"position":[[137,9],[221,7]]},"1053":{"position":[[361,9]]},"1055":{"position":[[93,10]]},"1058":{"position":[[137,9],[221,7]]},"1061":{"position":[[361,9]]},"1063":{"position":[[93,10]]},"1122":{"position":[[198,9]]},"1138":{"position":[[136,7],[482,9]]},"1151":{"position":[[294,9]]},"1230":{"position":[[1268,10]]},"1253":{"position":[[123,7],[359,9]]},"1267":{"position":[[117,10]]},"1277":{"position":[[921,7]]},"1285":{"position":[[211,10],[301,9]]},"1286":{"position":[[401,7],[607,7]]},"1289":{"position":[[1218,7]]},"1291":{"position":[[58,7]]},"1298":{"position":[[1050,7]]},"1300":{"position":[[211,10],[301,9]]},"1301":{"position":[[401,7],[607,7]]},"1303":{"position":[[929,7]]},"1305":{"position":[[58,7]]},"1310":{"position":[[538,7]]},"1313":{"position":[[202,10],[292,9]]},"1322":{"position":[[1437,7]]},"1324":{"position":[[211,10],[301,9]]},"1325":{"position":[[401,7],[607,7]]},"1328":{"position":[[58,7]]},"1335":{"position":[[1084,7]]},"1337":{"position":[[202,10],[292,9]]},"1346":{"position":[[1050,7]]},"1348":{"position":[[202,10],[292,9]]},"1356":{"position":[[586,7]]},"1376":{"position":[[211,10],[301,9]]},"1383":{"position":[[302,7]]},"1400":{"position":[[211,10],[301,9]]},"1411":{"position":[[211,10],[301,9]]},"1417":{"position":[[409,9]]},"1427":{"position":[[233,9]]}},"keywords":{}}],["specification(",{"_index":2789,"title":{},"content":{"264":{"position":[[34,17]]}},"keywords":{}}],["specification.learn",{"_index":928,"title":{},"content":{"61":{"position":[[1010,19]]}},"keywords":{}}],["specifictyp",{"_index":5705,"title":{},"content":{"1140":{"position":[[4082,12]]},"1316":{"position":[[4082,12]]},"1340":{"position":[[4082,12]]},"1351":{"position":[[4082,12]]},"1379":{"position":[[4620,12]]},"1403":{"position":[[4620,12]]},"1414":{"position":[[4620,12]]},"1431":{"position":[[4105,12]]}},"keywords":{}}],["specify?authsource=admin",{"_index":4679,"title":{},"content":{"780":{"position":[[285,24]]}},"keywords":{}}],["speed",{"_index":3588,"title":{},"content":{"417":{"position":[[204,6]]},"438":{"position":[[204,6]]},"502":{"position":[[664,6]]},"545":{"position":[[204,6]]},"1021":{"position":[[1230,6]]}},"keywords":{}}],["spin",{"_index":2491,"title":{},"content":{"234":{"position":[[163,4]]},"236":{"position":[[1713,4]]}},"keywords":{}}],["split",{"_index":93,"title":{"19":{"position":[[6,7]]}},"content":{"2":{"position":[[643,5]]},"19":{"position":[[107,5],[225,9],[329,5],[380,5],[521,5]]},"112":{"position":[[951,6]]},"154":{"position":[[407,5]]},"320":{"position":[[2285,9]]},"321":{"position":[[1976,5]]},"333":{"position":[[494,5]]},"379":{"position":[[158,9]]},"590":{"position":[[762,5]]},"1437":{"position":[[192,6],[1334,6],[1567,5]]}},"keywords":{}}],["sponsor",{"_index":3468,"title":{},"content":{"381":{"position":[[284,9]]}},"keywords":{}}],["spreadsheet",{"_index":2970,"title":{"616":{"position":[[0,11]]}},"content":{"295":{"position":[[1181,12]]},"296":{"position":[[7352,11]]},"615":{"position":[[20,12]]},"616":{"position":[[92,12]]},"617":{"position":[[20,12],[214,12],[367,11],[745,11]]},"619":{"position":[[504,11],[538,12]]},"1243":{"position":[[665,11],[776,11],[887,11],[991,11]]},"1244":{"position":[[97,12]]},"1245":{"position":[[166,12],[319,11],[690,11]]},"1247":{"position":[[671,11],[698,11],[1098,11]]}},"keywords":{}}],["spreadsheet_id",{"_index":4321,"title":{},"content":{"619":{"position":[[488,15]]},"620":{"position":[[184,15]]}},"keywords":{}}],["spreadsheeturl",{"_index":5912,"title":{},"content":{"1247":{"position":[[655,15]]},"1248":{"position":[[206,15]]}},"keywords":{}}],["sq",{"_index":3555,"title":{"404":{"position":[[7,3]]}},"content":{"405":{"position":[[41,3]]},"406":{"position":[[41,3],[86,3]]},"408":{"position":[[92,3],[155,3],[458,3],[603,3]]},"411":{"position":[[73,3]]}},"keywords":{}}],["sql",{"_index":172,"title":{"97":{"position":[[0,3]]},"251":{"position":[[28,3]]},"268":{"position":[[6,3]]},"806":{"position":[[13,3]]},"928":{"position":[[13,3]]},"1038":{"position":[[10,3]]},"1042":{"position":[[12,3]]},"1043":{"position":[[6,3]]},"1048":{"position":[[15,3]]},"1056":{"position":[[13,3],[21,3]]},"1294":{"position":[[13,3]]},"1297":{"position":[[37,4]]},"1342":{"position":[[13,3]]},"1345":{"position":[[37,4]]},"1371":{"position":[[15,3]]},"1373":{"position":[[21,3]]},"1395":{"position":[[13,3]]},"1397":{"position":[[19,3],[27,3]]},"1408":{"position":[[12,3]]},"1409":{"position":[[6,3]]}},"content":{"4":{"position":[[505,3]]},"42":{"position":[[221,3]]},"50":{"position":[[108,3]]},"69":{"position":[[662,3]]},"72":{"position":[[691,3]]},"75":{"position":[[155,3]]},"81":{"position":[[1626,3]]},"94":{"position":[[444,3],[478,3],[2390,3]]},"95":{"position":[[298,3]]},"96":{"position":[[46,3]]},"97":{"position":[[35,3],[173,4],[184,3],[382,3],[473,3]]},"99":{"position":[[6,3],[175,3],[645,3]]},"100":{"position":[[284,3],[334,3],[983,3]]},"122":{"position":[[215,3],[491,3],[787,3],[1006,3]]},"158":{"position":[[523,3]]},"179":{"position":[[553,4]]},"183":{"position":[[313,4],[751,3],[2795,3]]},"191":{"position":[[336,3]]},"236":{"position":[[1862,3]]},"240":{"position":[[335,3],[434,3]]},"242":{"position":[[406,3]]},"252":{"position":[[79,4]]},"254":{"position":[[2948,3],[3374,3]]},"256":{"position":[[61,3]]},"267":{"position":[[478,3],[498,3],[1671,3],[1733,3]]},"268":{"position":[[14,3],[224,3],[1450,3]]},"270":{"position":[[1544,3],[1620,3]]},"271":{"position":[[498,3]]},"277":{"position":[[50,3],[241,3],[1083,3],[1160,3]]},"278":{"position":[[605,3],[1605,3]]},"281":{"position":[[2223,3]]},"325":{"position":[[135,3],[747,3]]},"332":{"position":[[643,3]]},"363":{"position":[[479,3],[776,3],[1243,3],[1313,3],[1645,3]]},"762":{"position":[[76,3]]},"775":{"position":[[76,3]]},"802":{"position":[[76,3]]},"817":{"position":[[76,3]]},"833":{"position":[[76,3]]},"871":{"position":[[110,3]]},"931":{"position":[[881,3]]},"942":{"position":[[661,3]]},"1032":{"position":[[137,3]]},"1039":{"position":[[134,3],[200,3],[299,3],[315,3],[342,3],[365,3],[373,3]]},"1040":{"position":[[31,3],[829,3]]},"1041":{"position":[[82,3],[98,3],[125,3],[149,3],[157,3]]},"1043":{"position":[[620,3]]},"1044":{"position":[[250,3]]},"1047":{"position":[[56,3],[193,3]]},"1049":{"position":[[60,3],[126,3]]},"1050":{"position":[[31,3],[829,3],[997,3],[1013,3],[1040,3],[1063,3],[1071,3]]},"1051":{"position":[[876,3]]},"1052":{"position":[[250,3]]},"1055":{"position":[[56,3],[193,3]]},"1057":{"position":[[63,3],[129,3]]},"1058":{"position":[[31,3],[829,3]]},"1059":{"position":[[640,3]]},"1060":{"position":[[250,3]]},"1063":{"position":[[56,3],[193,3]]},"1120":{"position":[[239,3],[614,3],[1213,3],[1288,3],[1884,3]]},"1138":{"position":[[1385,3],[1400,3]]},"1140":{"position":[[4134,3]]},"1185":{"position":[[91,3]]},"1186":{"position":[[28,3],[146,3],[178,3],[370,3]]},"1188":{"position":[[98,3],[262,3]]},"1192":{"position":[[394,3]]},"1289":{"position":[[626,4],[1545,4]]},"1292":{"position":[[4053,3]]},"1306":{"position":[[4053,3]]},"1310":{"position":[[866,4]]},"1313":{"position":[[929,3],[944,3]]},"1316":{"position":[[4134,3]]},"1329":{"position":[[4053,3]]},"1337":{"position":[[929,3],[944,3]]},"1340":{"position":[[4134,3]]},"1348":{"position":[[929,3],[944,3]]},"1351":{"position":[[4134,3]]},"1373":{"position":[[858,3]]},"1374":{"position":[[858,3]]},"1379":{"position":[[4682,3]]},"1383":{"position":[[83,3]]},"1384":{"position":[[618,3]]},"1394":{"position":[[391,3]]},"1397":{"position":[[637,3]]},"1398":{"position":[[636,3]]},"1403":{"position":[[4682,3]]},"1407":{"position":[[82,3],[98,3],[125,3],[148,3],[156,3]]},"1409":{"position":[[620,3]]},"1414":{"position":[[4682,3]]},"1423":{"position":[[401,3]]},"1427":{"position":[[656,3],[671,3]]},"1429":{"position":[[297,3]]},"1431":{"position":[[4157,3]]}},"keywords":{}}],["sql/1.0/warehouses/abcd123efgh4567",{"_index":5814,"title":{},"content":{"1189":{"position":[[150,35]]}},"keywords":{}}],["sql_after_gti",{"_index":6130,"title":{},"content":{"1292":{"position":[[4225,13]]},"1306":{"position":[[4225,13]]},"1329":{"position":[[4225,13]]}},"keywords":{}}],["sql_after_mt",{"_index":6134,"title":{},"content":{"1292":{"position":[[4293,13]]},"1306":{"position":[[4293,13]]},"1329":{"position":[[4293,13]]}},"keywords":{}}],["sql_before_gt",{"_index":6137,"title":{},"content":{"1292":{"position":[[4340,13]]},"1306":{"position":[[4340,13]]},"1329":{"position":[[4340,13]]}},"keywords":{}}],["sql_big_resul",{"_index":6140,"title":{},"content":{"1292":{"position":[[4392,13]]},"1306":{"position":[[4392,13]]},"1329":{"position":[[4392,13]]}},"keywords":{}}],["sql_buffer_r",{"_index":6143,"title":{},"content":{"1292":{"position":[[4456,13]]},"1306":{"position":[[4456,13]]},"1329":{"position":[[4456,13]]}},"keywords":{}}],["sql_cach",{"_index":6146,"title":{},"content":{"1292":{"position":[[4513,9]]},"1306":{"position":[[4513,9]]},"1329":{"position":[[4513,9]]}},"keywords":{}}],["sql_calc_foun",{"_index":6149,"title":{},"content":{"1292":{"position":[[4560,13]]},"1306":{"position":[[4560,13]]},"1329":{"position":[[4560,13]]}},"keywords":{}}],["sql_no_cach",{"_index":6153,"title":{},"content":{"1292":{"position":[[4611,12]]},"1306":{"position":[[4611,12]]},"1329":{"position":[[4611,12]]}},"keywords":{}}],["sql_small_r",{"_index":6158,"title":{},"content":{"1292":{"position":[[4668,13]]},"1306":{"position":[[4668,13]]},"1329":{"position":[[4668,13]]}},"keywords":{}}],["sql_thread",{"_index":6161,"title":{},"content":{"1292":{"position":[[4729,10]]},"1306":{"position":[[4729,10]]},"1329":{"position":[[4729,10]]}},"keywords":{}}],["sql_tsi_day",{"_index":6163,"title":{},"content":{"1292":{"position":[[4775,11]]},"1306":{"position":[[4775,11]]},"1329":{"position":[[4775,11]]}},"keywords":{}}],["sql_tsi_hour",{"_index":6165,"title":{},"content":{"1292":{"position":[[4821,12]]},"1306":{"position":[[4821,12]]},"1329":{"position":[[4821,12]]}},"keywords":{}}],["sql_tsi_minut",{"_index":6166,"title":{},"content":{"1292":{"position":[[4864,13]]},"1306":{"position":[[4864,13]]},"1329":{"position":[[4864,13]]}},"keywords":{}}],["sql_tsi_month",{"_index":6170,"title":{},"content":{"1292":{"position":[[4913,13]]},"1306":{"position":[[4913,13]]},"1329":{"position":[[4913,13]]}},"keywords":{}}],["sql_tsi_quart",{"_index":6172,"title":{},"content":{"1292":{"position":[[4964,13]]},"1306":{"position":[[4964,13]]},"1329":{"position":[[4964,13]]}},"keywords":{}}],["sql_tsi_secon",{"_index":6174,"title":{},"content":{"1292":{"position":[[5008,13]]},"1306":{"position":[[5008,13]]},"1329":{"position":[[5008,13]]}},"keywords":{}}],["sql_tsi_week",{"_index":6176,"title":{},"content":{"1292":{"position":[[5055,12]]},"1306":{"position":[[5055,12]]},"1329":{"position":[[5055,12]]}},"keywords":{}}],["sql_tsi_year",{"_index":6177,"title":{},"content":{"1292":{"position":[[5095,12]]},"1306":{"position":[[5095,12]]},"1329":{"position":[[5095,12]]}},"keywords":{}}],["sqlazur",{"_index":4700,"title":{},"content":{"788":{"position":[[207,8]]},"790":{"position":[[123,8]]},"914":{"position":[[241,8]]},"916":{"position":[[128,8]]},"1282":{"position":[[93,8]]},"1310":{"position":[[93,8]]}},"keywords":{}}],["sqlca",{"_index":6351,"title":{},"content":{"1379":{"position":[[4733,5]]},"1403":{"position":[[4733,5]]},"1414":{"position":[[4733,5]]}},"keywords":{}}],["sqlcode",{"_index":5710,"title":{},"content":{"1140":{"position":[[4173,7]]},"1316":{"position":[[4173,7]]},"1340":{"position":[[4173,7]]},"1351":{"position":[[4173,7]]},"1379":{"position":[[4788,7]]},"1403":{"position":[[4788,7]]},"1414":{"position":[[4788,7]]},"1431":{"position":[[4196,7]]}},"keywords":{}}],["sqlerror",{"_index":5713,"title":{},"content":{"1140":{"position":[[4217,8]]},"1316":{"position":[[4217,8]]},"1340":{"position":[[4217,8]]},"1351":{"position":[[4217,8]]},"1379":{"position":[[4838,8]]},"1403":{"position":[[4838,8]]},"1414":{"position":[[4838,8]]},"1431":{"position":[[4240,8]]}},"keywords":{}}],["sqlexcept",{"_index":5523,"title":{},"content":{"1140":{"position":[[418,12]]},"1292":{"position":[[4093,12]]},"1306":{"position":[[4093,12]]},"1316":{"position":[[418,12]]},"1329":{"position":[[4093,12]]},"1340":{"position":[[418,12]]},"1351":{"position":[[418,12]]},"1379":{"position":[[4891,12]]},"1403":{"position":[[4891,12]]},"1414":{"position":[[4891,12]]},"1431":{"position":[[441,12]]}},"keywords":{}}],["sqlite",{"_index":1336,"title":{"96":{"position":[[0,7]]},"1364":{"position":[[0,6]]}},"content":{"94":{"position":[[348,9],[391,6],[434,7],[2350,6]]},"95":{"position":[[308,7]]},"96":{"position":[[8,6],[123,7],[690,6],[757,6],[806,7],[834,6]]},"97":{"position":[[757,6]]},"98":{"position":[[622,6]]},"100":{"position":[[5,6],[51,6],[366,7],[1288,6],[1313,6]]},"101":{"position":[[209,6],[246,6]]},"107":{"position":[[3936,7]]},"112":{"position":[[304,6],[335,6]]},"113":{"position":[[687,6]]},"114":{"position":[[118,6]]},"183":{"position":[[1288,7],[3802,7]]},"254":{"position":[[567,7],[2624,7]]},"268":{"position":[[470,6],[920,7]]},"277":{"position":[[30,6],[642,7],[819,7],[905,6]]},"278":{"position":[[30,6],[394,6],[461,6],[722,7],[967,7],[1548,6]]},"279":{"position":[[1230,7]]},"280":{"position":[[36,6],[1480,7]]},"281":{"position":[[2880,6]]},"1120":{"position":[[1815,6]]},"1370":{"position":[[1,6],[211,6]]},"1461":{"position":[[2950,7],[3639,7],[4166,6]]}},"keywords":{}}],["sqlite'",{"_index":1419,"title":{},"content":{"98":{"position":[[1000,8]]},"278":{"position":[[1425,8]]}},"keywords":{}}],["sqlite:dev",{"_index":5430,"title":{},"content":{"1120":{"position":[[1873,10]]},"1368":{"position":[[98,10]]}},"keywords":{}}],["sqlserver",{"_index":3289,"title":{"1374":{"position":[[14,10]]},"1395":{"position":[[21,9]]},"1398":{"position":[[14,10]]},"1405":{"position":[[10,9]]}},"content":{"363":{"position":[[547,9]]},"1043":{"position":[[672,9]]},"1051":{"position":[[928,9]]},"1059":{"position":[[692,9]]},"1372":{"position":[[40,9],[106,9]]},"1373":{"position":[[910,9]]},"1374":{"position":[[910,9]]},"1375":{"position":[[113,9]]},"1379":{"position":[[1,9],[152,9]]},"1396":{"position":[[40,9],[106,9]]},"1397":{"position":[[689,9]]},"1398":{"position":[[688,9]]},"1399":{"position":[[113,9]]},"1403":{"position":[[1,9],[152,9]]},"1406":{"position":[[40,9],[106,9]]},"1409":{"position":[[672,9]]},"1410":{"position":[[113,9]]},"1414":{"position":[[1,9],[152,9]]}},"keywords":{}}],["sqlserver:dev",{"_index":3293,"title":{},"content":{"363":{"position":[[839,13],[1702,13]]},"1120":{"position":[[312,13],[1292,13],[1946,13]]},"1377":{"position":[[98,13]]},"1401":{"position":[[98,13]]},"1412":{"position":[[98,13]]}},"keywords":{}}],["sqlserver:dev"",{"_index":5255,"title":{},"content":{"1046":{"position":[[95,19]]},"1054":{"position":[[95,19]]},"1062":{"position":[[95,19]]}},"keywords":{}}],["sqlserver:md",{"_index":3300,"title":{},"content":{"363":{"position":[[1317,12]]}},"keywords":{}}],["sqlstate",{"_index":5525,"title":{},"content":{"1140":{"position":[[465,8]]},"1292":{"position":[[4134,8]]},"1306":{"position":[[4134,8]]},"1316":{"position":[[465,8]]},"1329":{"position":[[4134,8]]},"1340":{"position":[[465,8]]},"1351":{"position":[[465,8]]},"1379":{"position":[[4946,8]]},"1403":{"position":[[4946,8]]},"1414":{"position":[[4946,8]]},"1431":{"position":[[488,8]]}},"keywords":{}}],["sqlwarn",{"_index":5527,"title":{},"content":{"1140":{"position":[[502,10]]},"1292":{"position":[[4174,10]]},"1306":{"position":[[4174,10]]},"1316":{"position":[[502,10]]},"1329":{"position":[[4174,10]]},"1340":{"position":[[502,10]]},"1351":{"position":[[502,10]]},"1379":{"position":[[4996,10]]},"1403":{"position":[[4996,10]]},"1414":{"position":[[4996,10]]},"1431":{"position":[[525,10]]}},"keywords":{}}],["sqrt",{"_index":5530,"title":{},"content":{"1140":{"position":[[539,4]]},"1316":{"position":[[539,4]]},"1340":{"position":[[539,4]]},"1351":{"position":[[539,4]]},"1431":{"position":[[562,4]]}},"keywords":{}}],["sqs:deletemessag",{"_index":3562,"title":{},"content":{"406":{"position":[[423,17]]}},"keywords":{}}],["sqs:receivemessag",{"_index":3560,"title":{},"content":{"406":{"position":[[304,18],[400,18]]}},"keywords":{}}],["srid",{"_index":6180,"title":{},"content":{"1292":{"position":[[5142,4]]},"1306":{"position":[[5142,4]]},"1329":{"position":[[5142,4]]}},"keywords":{}}],["ssh",{"_index":1220,"title":{"220":{"position":[[27,3]]},"784":{"position":[[0,3]]},"1255":{"position":[[0,3]]},"1272":{"position":[[0,3]]},"1298":{"position":[[13,3]]},"1322":{"position":[[13,3]]},"1335":{"position":[[13,3]]},"1346":{"position":[[13,3]]}},"content":{"83":{"position":[[512,3],[524,3],[659,3],[887,3],[942,4],[1146,3],[1299,3]]},"221":{"position":[[13,3],[264,3],[402,3],[447,3],[539,3],[560,3],[770,3],[968,4],[1063,3],[1228,3],[1357,3],[1488,3],[1614,3],[1709,3]]},"222":{"position":[[10,3],[175,3],[213,4],[308,3],[473,3],[602,3],[667,3],[767,3]]},"223":{"position":[[10,3],[141,3],[179,4],[274,3],[439,3],[568,3],[745,3]]},"224":{"position":[[10,3],[194,3],[232,4],[327,3],[492,3],[621,3],[881,3]]},"225":{"position":[[86,3],[125,3],[214,3],[450,3],[489,3]]},"366":{"position":[[1140,3]]},"367":{"position":[[853,3]]},"370":{"position":[[16,3],[172,3],[1564,3],[1656,3],[1718,3],[1754,3],[1909,3],[1962,3]]},"750":{"position":[[1360,3],[1447,3]]},"753":{"position":[[325,3],[383,3],[557,3]]},"767":{"position":[[471,3],[529,3],[703,3]]},"784":{"position":[[105,3],[166,3],[349,3]]},"789":{"position":[[1761,3],[1848,3]]},"792":{"position":[[332,3],[759,3],[807,3],[981,3]]},"793":{"position":[[146,3],[294,3],[342,3],[516,3]]},"808":{"position":[[146,3],[310,3],[358,3],[532,3]]},"824":{"position":[[146,3],[551,3],[599,3],[773,3]]},"866":{"position":[[310,3],[359,3],[533,3]]},"878":{"position":[[320,3],[369,3],[543,3]]},"904":{"position":[[146,3],[550,3],[598,3],[772,3]]},"915":{"position":[[1217,3],[1304,3]]},"918":{"position":[[332,3],[759,3],[807,3],[981,3]]},"919":{"position":[[146,3],[294,3],[342,3],[516,3]]},"931":{"position":[[146,3],[314,3],[362,3],[536,3]]},"963":{"position":[[1371,3],[1458,3]]},"1021":{"position":[[601,3],[609,3]]},"1042":{"position":[[1185,3],[1322,3]]},"1043":{"position":[[146,3],[294,3],[342,3],[516,3]]},"1051":{"position":[[146,3],[550,3],[598,3],[772,3]]},"1059":{"position":[[146,3],[314,3],[362,3],[536,3]]},"1136":{"position":[[293,3],[407,3]]},"1138":{"position":[[16,3],[172,3],[415,3],[855,3],[947,3],[1009,3],[1045,3],[1199,3],[1252,3]]},"1149":{"position":[[96,3]]},"1154":{"position":[[191,3],[489,3],[540,3],[717,3]]},"1198":{"position":[[194,3],[255,3],[438,3]]},"1255":{"position":[[105,3],[166,3],[349,3]]},"1272":{"position":[[36,3],[79,3],[126,3],[255,3]]},"1282":{"position":[[455,3]]},"1283":{"position":[[157,3],[310,3],[367,3]]},"1288":{"position":[[167,3]]},"1289":{"position":[[157,3],[761,3],[823,3],[872,3],[1057,3]]},"1298":{"position":[[10,3],[141,3],[179,4],[274,3],[439,3],[568,3],[745,3]]},"1303":{"position":[[146,3],[314,3],[362,3],[536,3],[768,3]]},"1310":{"position":[[470,3]]},"1311":{"position":[[147,3],[204,3]]},"1320":{"position":[[157,3]]},"1322":{"position":[[10,3],[175,3],[213,4],[308,3],[473,3],[602,3],[667,3],[767,3],[1042,3],[1091,3],[1276,3]]},"1333":{"position":[[157,3]]},"1334":{"position":[[263,3]]},"1335":{"position":[[10,3],[175,3],[213,4],[308,3],[473,3],[602,3],[667,3],[767,3]]},"1344":{"position":[[157,3]]},"1346":{"position":[[10,3],[141,3],[179,4],[274,3],[439,3],[568,3],[745,3]]},"1373":{"position":[[146,3],[532,3],[580,3],[754,3]]},"1374":{"position":[[146,3],[532,3],[580,3],[754,3]]},"1397":{"position":[[146,3],[311,3],[359,3],[533,3]]},"1398":{"position":[[146,3],[310,3],[358,3],[532,3]]},"1408":{"position":[[458,3],[595,3]]},"1409":{"position":[[146,3],[294,3],[342,3],[516,3]]}},"keywords":{}}],["ssh://ec2",{"_index":4882,"title":{},"content":{"868":{"position":[[412,9]]},"880":{"position":[[413,9]]}},"keywords":{}}],["ssh://sshuser@<vm",{"_index":5517,"title":{},"content":{"1139":{"position":[[230,20]]}},"keywords":{}}],["ssh://sshuser@198.21.98.1:22",{"_index":1229,"title":{},"content":{"83":{"position":[[1238,28]]}},"keywords":{}}],["ssh://sshuser@ec2",{"_index":2442,"title":{},"content":{"221":{"position":[[654,17]]}},"keywords":{}}],["ssh://sshuser@vm",{"_index":3429,"title":{},"content":{"371":{"position":[[351,16]]}},"keywords":{}}],["ssh://user@address",{"_index":3421,"title":{},"content":{"370":{"position":[[1842,20]]},"1138":{"position":[[1133,19]]}},"keywords":{}}],["ssh://user@hostname[:port",{"_index":1227,"title":{},"content":{"83":{"position":[[1197,27]]},"221":{"position":[[585,27]]},"225":{"position":[[183,26]]}},"keywords":{}}],["ssh://user@hostname[:port]).ssh",{"_index":5937,"title":{},"content":{"1272":{"position":[[175,31]]}},"keywords":{}}],["sshendpoint",{"_index":1228,"title":{},"content":{"83":{"position":[[1225,12]]},"225":{"position":[[101,12]]},"371":{"position":[[338,12]]},"868":{"position":[[399,12]]},"880":{"position":[[400,12]]},"1139":{"position":[[217,12]]}},"keywords":{}}],["sshforward",{"_index":1226,"title":{},"content":{"83":{"position":[[1106,14]]},"371":{"position":[[323,14]]},"868":{"position":[[335,14]]},"880":{"position":[[336,14]]},"1139":{"position":[[202,14]]}},"keywords":{}}],["sshkey",{"_index":5203,"title":{},"content":{"1021":{"position":[[561,6],[593,7],[661,6]]}},"keywords":{}}],["sshuser",{"_index":2440,"title":{},"content":{"221":{"position":[[472,8]]}},"keywords":{}}],["ssl",{"_index":3663,"title":{"1268":{"position":[[10,3]]}},"content":{"429":{"position":[[1171,3]]},"907":{"position":[[1302,3],[1321,3],[1647,3],[1739,3],[1928,3]]},"923":{"position":[[1302,3],[1321,3],[1647,3],[1739,3],[1928,3]]},"934":{"position":[[1302,3],[1321,3]]},"950":{"position":[[1302,3],[1321,3]]},"968":{"position":[[1302,3],[1321,3],[1647,3],[1739,3],[1928,3]]},"1154":{"position":[[442,3]]},"1268":{"position":[[17,3],[129,3],[229,3],[300,3],[383,3],[457,3],[514,3],[583,3],[695,3]]},"1285":{"position":[[875,3],[894,3],[985,3],[1072,3],[1114,3],[1200,3],[1242,3],[1312,3]]},"1286":{"position":[[1621,3],[1741,3],[1808,3],[1895,3],[1965,3],[2159,3],[2224,3],[2353,3],[2398,3]]},"1292":{"position":[[5181,3]]},"1300":{"position":[[875,3],[894,3],[985,3],[1072,3],[1114,3],[1200,3],[1242,3],[1312,3]]},"1301":{"position":[[1457,3],[1577,3],[1644,3],[1731,3],[1801,3],[1995,3],[2060,3],[2189,3],[2234,3]]},"1306":{"position":[[5181,3]]},"1313":{"position":[[729,3],[748,3],[1397,3],[1489,3],[1678,3]]},"1324":{"position":[[875,3],[894,3],[985,3],[1072,3],[1114,3],[1200,3],[1242,3],[1312,3]]},"1325":{"position":[[1621,3],[1741,3],[1808,3],[1895,3],[1965,3],[2159,3],[2224,3],[2353,3],[2398,3]]},"1329":{"position":[[5181,3]]},"1337":{"position":[[729,3],[748,3],[1397,3],[1489,3],[1678,3]]},"1348":{"position":[[729,3],[748,3]]}},"keywords":{}}],["sslmode",{"_index":5002,"title":{},"content":{"907":{"position":[[1360,9]]},"923":{"position":[[1360,9]]},"934":{"position":[[1360,9]]},"950":{"position":[[1360,9]]},"968":{"position":[[1360,9]]},"1285":{"position":[[933,9]]},"1300":{"position":[[933,9]]},"1313":{"position":[[787,9]]},"1324":{"position":[[933,9]]},"1337":{"position":[[787,9]]},"1348":{"position":[[787,9]]}},"keywords":{}}],["stabl",{"_index":963,"title":{},"content":{"64":{"position":[[478,7]]},"105":{"position":[[554,6]]},"109":{"position":[[572,6]]},"1439":{"position":[[81,6]]}},"keywords":{}}],["staburst",{"_index":6409,"title":{},"content":{"1417":{"position":[[81,8]]}},"keywords":{}}],["stack",{"_index":3173,"title":{},"content":{"325":{"position":[[503,6]]},"1292":{"position":[[5224,7]]},"1306":{"position":[[5224,7]]},"1329":{"position":[[5224,7]]}},"keywords":{}}],["stage",{"_index":1078,"title":{},"content":{"74":{"position":[[284,6]]},"1031":{"position":[[242,7],[555,7]]},"1032":{"position":[[1390,7]]},"1034":{"position":[[850,7]]},"1149":{"position":[[413,7]]},"1151":{"position":[[809,7],[940,7],[983,7],[1031,7],[1099,7]]},"1154":{"position":[[224,7]]},"1258":{"position":[[94,7]]},"1260":{"position":[[437,7],[485,7],[608,7],[739,7]]},"1434":{"position":[[1343,5]]},"1439":{"position":[[99,5],[1439,6],[1609,6]]},"1442":{"position":[[866,5],[1581,6]]},"1461":{"position":[[2684,8]]}},"keywords":{}}],["stagesjobsjob",{"_index":4329,"title":{},"content":{"622":{"position":[[238,13]]}},"keywords":{}}],["stagesoffersofficesprospect",{"_index":4331,"title":{},"content":{"622":{"position":[[265,27]]}},"keywords":{}}],["stale",{"_index":1946,"title":{},"content":{"164":{"position":[[1289,5]]}},"keywords":{}}],["standard",{"_index":205,"title":{"1391":{"position":[[27,8]]}},"content":{"6":{"position":[[183,8]]},"41":{"position":[[359,8]]},"125":{"position":[[28,8],[173,8],[606,8],[1329,8],[1451,8]]},"156":{"position":[[34,8]]},"159":{"position":[[17,8]]},"162":{"position":[[710,8],[1652,8]]},"191":{"position":[[1546,8]]},"221":{"position":[[236,10]]},"240":{"position":[[1507,8]]},"379":{"position":[[823,8],[1026,8],[1104,8]]},"406":{"position":[[142,8]]},"515":{"position":[[216,8],[854,8]]},"577":{"position":[[370,8]]},"588":{"position":[[365,8]]},"602":{"position":[[826,8]]},"698":{"position":[[92,8]]},"846":{"position":[[110,9]]},"847":{"position":[[57,8]]},"909":{"position":[[776,8]]},"925":{"position":[[776,8]]},"936":{"position":[[776,8]]},"952":{"position":[[776,8]]},"970":{"position":[[776,8]]},"985":{"position":[[53,8]]},"989":{"position":[[219,8],[320,8]]},"1000":{"position":[[53,8],[398,8]]},"1004":{"position":[[302,8],[403,8]]},"1020":{"position":[[5,8]]},"1032":{"position":[[1148,8]]},"1158":{"position":[[30,8],[88,8]]},"1179":{"position":[[1290,8]]},"1182":{"position":[[30,8],[88,8]]},"1188":{"position":[[910,8]]},"1191":{"position":[[30,8],[88,8]]},"1196":{"position":[[1050,8]]},"1199":{"position":[[30,8]]},"1208":{"position":[[335,8]]},"1256":{"position":[[30,8],[88,8]]},"1262":{"position":[[30,8],[88,8]]},"1282":{"position":[[137,8]]},"1288":{"position":[[16,8]]},"1290":{"position":[[30,8],[88,8]]},"1304":{"position":[[30,8],[88,8]]},"1310":{"position":[[142,8]]},"1315":{"position":[[30,8],[89,8]]},"1327":{"position":[[30,8],[88,8]]},"1339":{"position":[[30,8],[88,8]]},"1350":{"position":[[30,8],[88,8]]},"1358":{"position":[[238,8]]},"1378":{"position":[[30,8],[88,8]]},"1383":{"position":[[1494,8]]},"1386":{"position":[[1304,8]]},"1389":{"position":[[30,8],[88,8]]},"1391":{"position":[[12,8]]},"1402":{"position":[[30,8],[88,8]]},"1413":{"position":[[30,8],[88,8]]},"1430":{"position":[[30,8],[88,8]]}},"keywords":{}}],["stanza",{"_index":9,"title":{},"content":{"1":{"position":[[111,7]]},"63":{"position":[[874,6]]},"76":{"position":[[267,6]]},"83":{"position":[[816,6]]},"89":{"position":[[27,6]]},"94":{"position":[[76,7],[217,6]]},"183":{"position":[[1731,7],[2323,7]]},"230":{"position":[[837,6]]},"270":{"position":[[1519,7]]},"285":{"position":[[297,6]]},"784":{"position":[[328,6]]},"1154":{"position":[[696,6]]},"1198":{"position":[[417,6]]},"1255":{"position":[[328,6]]},"1289":{"position":[[1036,6]]},"1303":{"position":[[747,6]]},"1322":{"position":[[1255,6]]}},"keywords":{}}],["starburst",{"_index":6407,"title":{"1416":{"position":[[0,9]]}},"content":{"1417":{"position":[[40,9]]},"1419":{"position":[[113,9],[202,9]]},"1423":{"position":[[1,9],[264,9]]}},"keywords":{}}],["starburst:dev",{"_index":6413,"title":{},"content":{"1421":{"position":[[327,13]]}},"keywords":{}}],["stargaz",{"_index":4028,"title":{},"content":{"529":{"position":[[683,10]]}},"keywords":{}}],["start",{"_index":330,"title":{"168":{"position":[[4,7]]},"169":{"position":[[4,7]]},"267":{"position":[[4,7]]},"1077":{"position":[[14,5]]}},"content":{"11":{"position":[[1251,5]]},"13":{"position":[[1230,6]]},"20":{"position":[[387,7]]},"32":{"position":[[97,5]]},"56":{"position":[[2392,5],[2583,7]]},"58":{"position":[[854,5]]},"61":{"position":[[452,8]]},"68":{"position":[[1043,5]]},"109":{"position":[[367,7],[420,7]]},"162":{"position":[[200,5]]},"165":{"position":[[267,8]]},"168":{"position":[[4,5]]},"174":{"position":[[258,5]]},"176":{"position":[[1,5],[213,5]]},"183":{"position":[[3166,6]]},"189":{"position":[[162,8],[1815,5]]},"199":{"position":[[198,8]]},"204":{"position":[[7,5]]},"207":{"position":[[447,5]]},"221":{"position":[[1086,6],[1279,6]]},"222":{"position":[[331,6],[524,6]]},"223":{"position":[[297,6],[490,6],[800,5]]},"224":{"position":[[350,6],[543,6]]},"230":{"position":[[974,5]]},"232":{"position":[[872,8]]},"237":{"position":[[2788,5],[2879,5]]},"238":{"position":[[388,8]]},"239":{"position":[[256,6],[888,5]]},"240":{"position":[[2566,5]]},"267":{"position":[[554,5]]},"268":{"position":[[1509,5]]},"269":{"position":[[1088,5]]},"280":{"position":[[161,8]]},"281":{"position":[[409,6]]},"307":{"position":[[3099,5]]},"308":{"position":[[1227,5]]},"349":{"position":[[445,5]]},"351":{"position":[[193,5]]},"373":{"position":[[261,8],[330,5],[529,8],[547,5],[714,8]]},"377":{"position":[[1422,5],[1444,8],[1514,8]]},"387":{"position":[[1170,5],[1196,5]]},"397":{"position":[[523,8]]},"424":{"position":[[197,5]]},"448":{"position":[[833,5]]},"454":{"position":[[387,5]]},"460":{"position":[[201,5]]},"466":{"position":[[131,5]]},"488":{"position":[[28,5]]},"496":{"position":[[416,5]]},"509":{"position":[[360,5]]},"517":{"position":[[1567,5],[1975,5],[2391,8],[2428,5],[3759,5]]},"526":{"position":[[57,5]]},"534":{"position":[[1393,5],[1588,5]]},"556":{"position":[[2063,5]]},"573":{"position":[[713,5]]},"584":{"position":[[705,5],[720,5]]},"611":{"position":[[913,5],[1053,5]]},"631":{"position":[[201,5]]},"654":{"position":[[441,5]]},"659":{"position":[[185,5]]},"670":{"position":[[497,5]]},"676":{"position":[[28,5]]},"685":{"position":[[321,5]]},"691":{"position":[[28,5]]},"700":{"position":[[149,5]]},"706":{"position":[[149,5]]},"720":{"position":[[672,5]]},"741":{"position":[[264,5]]},"747":{"position":[[678,5]]},"764":{"position":[[702,8]]},"777":{"position":[[702,8]]},"804":{"position":[[700,8]]},"819":{"position":[[700,8]]},"835":{"position":[[700,8]]},"842":{"position":[[1728,5],[1774,5]]},"851":{"position":[[213,5]]},"859":{"position":[[492,5],[640,5]]},"885":{"position":[[450,5]]},"891":{"position":[[153,5]]},"897":{"position":[[72,5]]},"912":{"position":[[1267,5]]},"940":{"position":[[25,6]]},"945":{"position":[[617,5]]},"959":{"position":[[156,5]]},"982":{"position":[[158,5]]},"1009":{"position":[[836,5],[847,5]]},"1015":{"position":[[263,5]]},"1028":{"position":[[72,5]]},"1070":{"position":[[648,5]]},"1076":{"position":[[106,7],[256,6],[610,5]]},"1077":{"position":[[74,5],[466,5],[495,5],[610,8],[806,8]]},"1085":{"position":[[1150,5],[1173,5],[1188,5]]},"1092":{"position":[[484,5],[507,5]]},"1094":{"position":[[309,5]]},"1107":{"position":[[72,5]]},"1113":{"position":[[201,5]]},"1133":{"position":[[770,5]]},"1140":{"position":[[568,5]]},"1146":{"position":[[659,8]]},"1147":{"position":[[220,8]]},"1173":{"position":[[671,8]]},"1174":{"position":[[220,8]]},"1176":{"position":[[544,5]]},"1185":{"position":[[344,5]]},"1194":{"position":[[554,5]]},"1196":{"position":[[106,5]]},"1203":{"position":[[102,7],[715,5]]},"1215":{"position":[[659,8]]},"1216":{"position":[[220,8]]},"1223":{"position":[[671,8]]},"1224":{"position":[[220,8]]},"1226":{"position":[[355,5]]},"1243":{"position":[[132,5]]},"1265":{"position":[[48,5]]},"1292":{"position":[[5264,5],[5301,8],[5344,6]]},"1298":{"position":[[297,6],[490,6],[800,5]]},"1306":{"position":[[5264,5],[5301,8],[5344,6]]},"1316":{"position":[[568,5]]},"1322":{"position":[[331,6],[524,6]]},"1329":{"position":[[5264,5],[5301,8],[5344,6]]},"1335":{"position":[[331,6],[524,6]]},"1340":{"position":[[568,5]]},"1346":{"position":[[297,6],[490,6],[800,5]]},"1351":{"position":[[568,5]]},"1354":{"position":[[379,5]]},"1379":{"position":[[5059,5]]},"1382":{"position":[[598,5]]},"1394":{"position":[[710,5]]},"1403":{"position":[[5059,5]]},"1414":{"position":[[5059,5]]},"1417":{"position":[[97,5]]},"1431":{"position":[[591,5]]},"1440":{"position":[[1018,6]]},"1442":{"position":[[1755,7]]},"1447":{"position":[[574,6]]},"1452":{"position":[[743,5],[2832,5],[3013,5],[3610,5],[3916,5]]},"1456":{"position":[[183,8]]},"1461":{"position":[[979,5]]},"1471":{"position":[[757,8],[948,5]]},"1475":{"position":[[369,5],[502,8]]}},"keywords":{}}],["start_dat",{"_index":3262,"title":{},"content":{"351":{"position":[[181,11]]},"377":{"position":[[1410,11]]},"378":{"position":[[188,11]]},"387":{"position":[[1158,11]]},"388":{"position":[[396,11]]},"424":{"position":[[173,11]]},"425":{"position":[[163,11]]},"454":{"position":[[375,11]]},"455":{"position":[[210,11]]},"460":{"position":[[189,11]]},"461":{"position":[[165,11]]},"466":{"position":[[119,11]]},"467":{"position":[[129,11]]},"496":{"position":[[404,11]]},"497":{"position":[[153,11]]},"509":{"position":[[348,11]]},"517":{"position":[[1963,11],[2409,11],[2728,10],[3747,11]]},"518":{"position":[[247,11],[420,11]]},"527":{"position":[[296,11]]},"529":{"position":[[802,11]]},"534":{"position":[[1381,11]]},"535":{"position":[[310,11]]},"556":{"position":[[2051,11]]},"557":{"position":[[432,11]]},"573":{"position":[[701,11],[1148,11]]},"575":{"position":[[196,11]]},"611":{"position":[[1041,11]]},"612":{"position":[[324,11]]},"631":{"position":[[189,11]]},"632":{"position":[[141,11]]},"654":{"position":[[429,11]]},"670":{"position":[[473,11]]},"671":{"position":[[205,11]]},"685":{"position":[[309,11]]},"686":{"position":[[200,11]]},"700":{"position":[[137,11]]},"701":{"position":[[134,11]]},"706":{"position":[[137,11]]},"707":{"position":[[134,11]]},"720":{"position":[[660,11]]},"721":{"position":[[283,11]]},"741":{"position":[[252,11]]},"742":{"position":[[166,11]]},"747":{"position":[[666,11]]},"748":{"position":[[299,11]]},"843":{"position":[[441,11]]},"851":{"position":[[176,11]]},"852":{"position":[[257,11]]},"859":{"position":[[480,11]]},"860":{"position":[[224,11]]},"885":{"position":[[438,11]]},"886":{"position":[[225,11]]},"959":{"position":[[144,11]]},"960":{"position":[[140,11]]},"982":{"position":[[146,11]]},"983":{"position":[[134,11]]},"1009":{"position":[[824,11]]},"1010":{"position":[[309,11]]},"1015":{"position":[[251,11]]},"1016":{"position":[[252,11]]},"1029":{"position":[[111,11]]},"1070":{"position":[[636,11]]},"1071":{"position":[[272,11]]},"1076":{"position":[[586,11]]},"1078":{"position":[[159,11]]},"1085":{"position":[[845,10],[1138,11]]},"1086":{"position":[[337,11]]},"1094":{"position":[[297,11]]},"1108":{"position":[[182,11]]},"1113":{"position":[[177,11]]},"1114":{"position":[[173,11]]},"1133":{"position":[[758,11]]},"1134":{"position":[[202,11]]}},"keywords":{}}],["startcommit",{"_index":6507,"title":{},"content":{"1444":{"position":[[243,11],[568,11]]}},"keywords":{}}],["startcommit{runtimecp",{"_index":6460,"title":{},"content":{"1434":{"position":[[1883,22]]}},"keywords":{}}],["startdat",{"_index":4928,"title":{},"content":{"891":{"position":[[130,10]]}},"keywords":{}}],["startedcommit",{"_index":6503,"title":{},"content":{"1442":{"position":[[1870,14]]},"1444":{"position":[[727,13],[822,14]]}},"keywords":{}}],["startedcommit{drivercp",{"_index":6465,"title":{},"content":{"1434":{"position":[[2090,23]]}},"keywords":{}}],["startup",{"_index":4622,"title":{},"content":{"757":{"position":[[1803,8]]},"770":{"position":[[1803,8]]},"797":{"position":[[1803,8]]},"812":{"position":[[1803,8]]},"828":{"position":[[1803,8]]},"1442":{"position":[[1338,8]]}},"keywords":{}}],["stat",{"_index":259,"title":{"1472":{"position":[[18,5]]}},"content":{"8":{"position":[[40,5],[219,5],[351,5],[563,5],[943,5]]},"145":{"position":[[121,6]]},"148":{"position":[[130,6]]},"151":{"position":[[128,6]]},"529":{"position":[[617,5]]},"1470":{"position":[[767,5],[856,5]]},"1471":{"position":[[30,5],[76,6],[211,5],[314,5],[431,6],[678,5],[751,5],[820,5],[897,5],[1119,5]]},"1472":{"position":[[34,5],[312,5]]},"1473":{"position":[[350,5]]},"1474":{"position":[[3,5]]},"1475":{"position":[[1,5],[591,5],[656,6],[731,6],[1432,5]]}},"keywords":{}}],["state",{"_index":214,"title":{"104":{"position":[[0,6]]},"112":{"position":[[9,6]]},"114":{"position":[[28,6]]}},"content":{"6":{"position":[[322,5]]},"13":{"position":[[358,6]]},"21":{"position":[[33,6]]},"40":{"position":[[274,8]]},"48":{"position":[[315,6]]},"100":{"position":[[837,5]]},"101":{"position":[[116,6]]},"104":{"position":[[170,5],[313,8]]},"105":{"position":[[457,6],[1386,7]]},"107":{"position":[[2257,5],[2602,6]]},"108":{"position":[[187,6]]},"110":{"position":[[931,6]]},"112":{"position":[[44,6],[114,5],[230,5],[367,5],[427,6],[549,5],[627,6],[842,5],[983,5]]},"114":{"position":[[39,5],[178,6],[293,5],[483,5],[826,9]]},"115":{"position":[[586,8]]},"121":{"position":[[1762,7],[1850,5]]},"125":{"position":[[108,5],[222,8],[377,5],[484,5],[560,8]]},"138":{"position":[[2439,7]]},"142":{"position":[[2517,7]]},"189":{"position":[[43,7]]},"278":{"position":[[810,5]]},"281":{"position":[[2868,5],[2911,5],[3126,5]]},"319":{"position":[[1299,8],[1408,5]]},"320":{"position":[[2250,5]]},"321":{"position":[[727,8]]},"368":{"position":[[134,6]]},"483":{"position":[[183,5]]},"755":{"position":[[134,6]]},"760":{"position":[[463,5]]},"768":{"position":[[134,6]]},"773":{"position":[[463,5]]},"795":{"position":[[132,6]]},"800":{"position":[[463,5]]},"810":{"position":[[132,6]]},"815":{"position":[[463,5]]},"826":{"position":[[132,6]]},"831":{"position":[[463,5]]},"840":{"position":[[649,5]]},"849":{"position":[[1124,5]]},"867":{"position":[[472,6]]},"905":{"position":[[137,6]]},"920":{"position":[[137,6]]},"932":{"position":[[137,6]]},"948":{"position":[[137,6]]},"966":{"position":[[137,6]]},"1247":{"position":[[1000,5]]},"1379":{"position":[[5108,5]]},"1403":{"position":[[5108,5]]},"1414":{"position":[[5108,5]]},"1435":{"position":[[113,5],[200,5],[261,5],[511,6],[533,6]]},"1437":{"position":[[75,6],[372,6]]},"1439":{"position":[[1230,6],[1417,6]]}},"keywords":{}}],["state.approv",{"_index":1607,"title":{},"content":{"113":{"position":[[610,15]]}},"keywords":{}}],["stateless",{"_index":1627,"title":{},"content":{"115":{"position":[[645,10]]},"252":{"position":[[48,9]]},"256":{"position":[[51,9]]},"294":{"position":[[48,9]]},"312":{"position":[[48,9]]},"317":{"position":[[51,9]]}},"keywords":{}}],["statement",{"_index":339,"title":{},"content":{"11":{"position":[[1443,9]]},"50":{"position":[[125,11]]},"97":{"position":[[39,11],[226,11],[247,10],[363,10],[477,11],[853,10]]},"100":{"position":[[288,10],[338,11]]},"114":{"position":[[635,10]]},"236":{"position":[[2000,10]]},"238":{"position":[[1354,9]]},"254":{"position":[[2952,9]]},"271":{"position":[[502,10]]},"278":{"position":[[586,10]]},"869":{"position":[[759,9]]},"1192":{"position":[[398,10]]},"1379":{"position":[[5163,9]]},"1394":{"position":[[395,10]]},"1403":{"position":[[5163,9]]},"1414":{"position":[[5163,9]]},"1423":{"position":[[405,10]]},"1429":{"position":[[301,9]]}},"keywords":{}}],["statement(",{"_index":5515,"title":{},"content":{"1138":{"position":[[1404,12]]},"1313":{"position":[[948,12]]},"1337":{"position":[[948,12]]},"1348":{"position":[[948,12]]},"1427":{"position":[[675,12]]}},"keywords":{}}],["statesetl",{"_index":3184,"title":{},"content":{"329":{"position":[[597,9]]}},"keywords":{}}],["static",{"_index":787,"title":{},"content":{"50":{"position":[[271,10]]},"72":{"position":[[221,6]]},"99":{"position":[[310,10]]},"158":{"position":[[116,6]]},"267":{"position":[[670,6]]},"274":{"position":[[79,6]]},"738":{"position":[[647,6]]},"1140":{"position":[[598,6]]},"1316":{"position":[[598,6]]},"1340":{"position":[[598,6]]},"1351":{"position":[[598,6]]},"1379":{"position":[[5222,6]]},"1403":{"position":[[5222,6]]},"1414":{"position":[[5222,6]]},"1431":{"position":[[621,6]]}},"keywords":{}}],["statist",{"_index":197,"title":{"5":{"position":[[9,10]]},"8":{"position":[[0,11]]},"9":{"position":[[22,11]]},"1468":{"position":[[22,10]]},"1469":{"position":[[19,11]]},"1470":{"position":[[9,10]]},"1471":{"position":[[19,10]]},"1473":{"position":[[10,11]]}},"content":{"8":{"position":[[486,10]]},"9":{"position":[[40,10]]},"138":{"position":[[1913,11]]},"141":{"position":[[1845,11]]},"142":{"position":[[1969,11]]},"146":{"position":[[48,11]]},"149":{"position":[[54,11]]},"152":{"position":[[64,11]]},"210":{"position":[[307,10]]},"517":{"position":[[2186,11],[2340,10]]},"723":{"position":[[192,10],[213,10]]},"1379":{"position":[[5275,10]]},"1403":{"position":[[5275,10]]},"1414":{"position":[[5275,10]]},"1453":{"position":[[252,10]]},"1469":{"position":[[25,10]]},"1470":{"position":[[35,10],[603,11],[620,10]]},"1471":{"position":[[458,10]]},"1472":{"position":[[173,11],[217,10],[426,10],[567,11],[597,9]]},"1473":{"position":[[11,10],[172,10],[337,11]]},"1475":{"position":[[804,10]]}},"keywords":{}}],["statisticsshar",{"_index":4536,"title":{},"content":{"729":{"position":[[29,15]]}},"keywords":{}}],["statisticstot",{"_index":4537,"title":{},"content":{"729":{"position":[[45,15]]}},"keywords":{}}],["stats_auto_r",{"_index":6186,"title":{},"content":{"1292":{"position":[[5389,13]]},"1306":{"position":[[5389,13]]},"1329":{"position":[[5389,13]]}},"keywords":{}}],["stats_persist",{"_index":6187,"title":{},"content":{"1292":{"position":[[5432,13]]},"1306":{"position":[[5432,13]]},"1329":{"position":[[5432,13]]}},"keywords":{}}],["statsrepositoriestagsteamsus",{"_index":4032,"title":{},"content":{"529":{"position":[[954,31]]}},"keywords":{}}],["statssampl",{"_index":6190,"title":{},"content":{"1292":{"position":[[5492,11]]},"1306":{"position":[[5492,11]]},"1329":{"position":[[5492,11]]}},"keywords":{}}],["statu",{"_index":781,"title":{},"content":{"49":{"position":[[339,6]]},"138":{"position":[[1109,6],[1137,6],[1637,7]]},"141":{"position":[[867,6],[1114,6],[1213,6],[1642,7]]},"142":{"position":[[1078,6],[1106,6],[1654,7]]},"267":{"position":[[840,7]]},"268":{"position":[[803,7]]},"269":{"position":[[428,7]]},"275":{"position":[[952,6]]},"709":{"position":[[742,6]]},"1096":{"position":[[426,6]]},"1292":{"position":[[5546,6]]},"1306":{"position":[[5546,6]]},"1329":{"position":[[5546,6]]}},"keywords":{}}],["status.lambda.anvils.sql",{"_index":2801,"title":{},"content":{"268":{"position":[[370,25],[1057,24]]}},"keywords":{}}],["status.migration.0.sql",{"_index":2803,"title":{},"content":{"268":{"position":[[667,23],[948,22]]}},"keywords":{}}],["status.t",{"_index":2809,"title":{},"content":{"269":{"position":[[305,10],[571,9]]}},"keywords":{}}],["statusesworkflow",{"_index":4493,"title":{},"content":{"709":{"position":[[725,16]]}},"keywords":{}}],["stay",{"_index":3151,"title":{},"content":{"322":{"position":[[898,5]]},"1203":{"position":[[177,5]]}},"keywords":{}}],["stddev_pop",{"_index":5535,"title":{},"content":{"1140":{"position":[[638,10]]},"1316":{"position":[[638,10]]},"1340":{"position":[[638,10]]},"1351":{"position":[[638,10]]},"1379":{"position":[[5324,10]]},"1403":{"position":[[5324,10]]},"1414":{"position":[[5324,10]]},"1431":{"position":[[661,10]]}},"keywords":{}}],["stddev_samp",{"_index":5538,"title":{},"content":{"1140":{"position":[[677,11]]},"1316":{"position":[[677,11]]},"1340":{"position":[[677,11]]},"1351":{"position":[[677,11]]},"1379":{"position":[[5370,11]]},"1403":{"position":[[5370,11]]},"1414":{"position":[[5370,11]]},"1431":{"position":[[700,11]]}},"keywords":{}}],["stdout",{"_index":907,"title":{},"content":{"60":{"position":[[771,7]]}},"keywords":{}}],["stem",{"_index":2249,"title":{},"content":{"208":{"position":[[742,8]]}},"keywords":{}}],["step",{"_index":752,"title":{"212":{"position":[[5,6]]},"235":{"position":[[0,4]]},"239":{"position":[[0,4]]},"240":{"position":[[0,4]]},"243":{"position":[[5,6]]}},"content":{"43":{"position":[[247,6],[264,5],[343,5]]},"60":{"position":[[1031,6]]},"61":{"position":[[234,5],[1337,4],[1345,4]]},"128":{"position":[[8,5],[190,4]]},"129":{"position":[[8,5],[318,5]]},"130":{"position":[[8,5]]},"132":{"position":[[184,4]]},"133":{"position":[[268,5],[622,4]]},"139":{"position":[[212,5]]},"140":{"position":[[310,5]]},"143":{"position":[[244,5]]},"144":{"position":[[803,5]]},"154":{"position":[[841,4]]},"170":{"position":[[174,6]]},"171":{"position":[[132,5]]},"172":{"position":[[131,5]]},"174":{"position":[[111,6],[458,5]]},"179":{"position":[[379,5]]},"182":{"position":[[468,5]]},"190":{"position":[[1800,5]]},"191":{"position":[[84,6]]},"192":{"position":[[2162,5]]},"206":{"position":[[12,5],[135,4]]},"213":{"position":[[46,4],[54,4]]},"221":{"position":[[175,5],[1875,4]]},"228":{"position":[[68,6],[1425,5]]},"229":{"position":[[69,6]]},"230":{"position":[[1199,5]]},"232":{"position":[[339,6]]},"236":{"position":[[183,5]]},"238":{"position":[[30,4]]},"239":{"position":[[493,4],[1619,5]]},"240":{"position":[[217,6],[2674,5],[3749,4]]},"255":{"position":[[868,4]]},"268":{"position":[[64,6],[136,6]]},"269":{"position":[[71,6],[143,6]]},"270":{"position":[[87,6],[106,5]]},"296":{"position":[[7398,5]]},"315":{"position":[[10,4]]},"316":{"position":[[1193,4]]},"348":{"position":[[12,5]]},"367":{"position":[[43,6]]},"406":{"position":[[14,5]]},"413":{"position":[[418,5]]},"446":{"position":[[177,6]]},"476":{"position":[[12,5]]},"478":{"position":[[160,5]]},"515":{"position":[[340,5]]},"571":{"position":[[297,5]]},"599":{"position":[[160,5]]},"609":{"position":[[137,5]]},"617":{"position":[[239,5]]},"710":{"position":[[56,5]]},"764":{"position":[[990,5]]},"767":{"position":[[270,5]]},"777":{"position":[[990,5]]},"790":{"position":[[40,5]]},"792":{"position":[[133,5]]},"804":{"position":[[988,5]]},"819":{"position":[[988,5]]},"835":{"position":[[988,5]]},"863":{"position":[[12,5]]},"875":{"position":[[12,5]]},"895":{"position":[[12,5]]},"916":{"position":[[40,5]]},"917":{"position":[[243,6]]},"918":{"position":[[133,5]]},"965":{"position":[[243,6]]},"988":{"position":[[308,6]]},"1003":{"position":[[308,6]]},"1008":{"position":[[173,6],[954,4]]},"1040":{"position":[[320,6]]},"1041":{"position":[[40,5]]},"1050":{"position":[[320,6],[955,5]]},"1058":{"position":[[320,6]]},"1090":{"position":[[12,5]]},"1092":{"position":[[336,4]]},"1176":{"position":[[437,5],[686,6]]},"1177":{"position":[[59,6]]},"1185":{"position":[[486,6]]},"1194":{"position":[[696,6]]},"1203":{"position":[[604,5],[857,6]]},"1204":{"position":[[481,4]]},"1226":{"position":[[497,6]]},"1243":{"position":[[274,6]]},"1245":{"position":[[191,5]]},"1282":{"position":[[40,5]]},"1289":{"position":[[457,5]]},"1310":{"position":[[40,5]]},"1321":{"position":[[237,5]]},"1334":{"position":[[325,5]]},"1354":{"position":[[521,6]]},"1382":{"position":[[740,6]]},"1407":{"position":[[40,5]]}},"keywords":{}}],["stick",{"_index":4250,"title":{},"content":{"593":{"position":[[495,5]]}},"keywords":{}}],["still",{"_index":1326,"title":{},"content":{"92":{"position":[[579,5]]},"117":{"position":[[580,5]]},"122":{"position":[[1544,5]]},"125":{"position":[[1251,5]]},"175":{"position":[[333,5]]},"192":{"position":[[1677,5]]},"230":{"position":[[704,5]]},"280":{"position":[[1844,5]]},"281":{"position":[[1654,5]]},"309":{"position":[[486,5],[542,5],[3381,5]]},"429":{"position":[[1193,5]]},"590":{"position":[[1110,5]]},"661":{"position":[[99,5]]},"764":{"position":[[385,5]]},"777":{"position":[[385,5]]},"804":{"position":[[383,5]]},"819":{"position":[[383,5]]},"835":{"position":[[383,5]]},"909":{"position":[[1041,5]]},"922":{"position":[[701,5]]},"925":{"position":[[1041,5]]},"936":{"position":[[1041,5]]},"952":{"position":[[1041,5]]},"970":{"position":[[1041,5]]},"1036":{"position":[[390,5]]},"1438":{"position":[[645,5]]},"1439":{"position":[[339,5]]},"1443":{"position":[[1193,5]]},"1447":{"position":[[732,5]]},"1459":{"position":[[1027,5],[1701,5]]}},"keywords":{}}],["stitch",{"_index":117,"title":{},"content":{"3":{"position":[[358,8]]}},"keywords":{}}],["stock",{"_index":3434,"title":{},"content":{"373":{"position":[[56,5]]},"374":{"position":[[27,6],[258,5]]},"375":{"position":[[76,5]]}},"keywords":{}}],["stop",{"_index":1396,"title":{},"content":{"97":{"position":[[714,4]]},"110":{"position":[[753,5]]},"183":{"position":[[4395,4]]},"236":{"position":[[696,7],[1195,7]]},"242":{"position":[[184,4]]},"292":{"position":[[72,8]]},"303":{"position":[[72,8]]},"333":{"position":[[563,8]]},"373":{"position":[[574,8],[783,4]]},"377":{"position":[[1078,4],[1088,4]]},"922":{"position":[[1615,5]]},"1186":{"position":[[346,4]]},"1203":{"position":[[330,4]]},"1292":{"position":[[5602,4]]},"1306":{"position":[[5602,4]]},"1329":{"position":[[5602,4]]},"1452":{"position":[[963,4],[1003,4],[2842,4],[3038,4],[3637,4],[3942,4]]}},"keywords":{}}],["storag",{"_index":59,"title":{"46":{"position":[[0,7]]},"77":{"position":[[0,8]]},"116":{"position":[[0,7]]},"170":{"position":[[23,7]]},"171":{"position":[[13,7]]},"173":{"position":[[11,8]]},"419":{"position":[[24,7]]},"434":{"position":[[11,7]]},"440":{"position":[[24,7]]},"542":{"position":[[13,7]]},"547":{"position":[[24,7]]}},"content":{"1":{"position":[[873,7],[920,7],[948,7]]},"3":{"position":[[150,7],[194,7]]},"4":{"position":[[63,7]]},"16":{"position":[[408,7],[775,8],[1023,7]]},"21":{"position":[[757,7],[800,7]]},"34":{"position":[[305,7],[506,7]]},"37":{"position":[[260,7]]},"42":{"position":[[331,7]]},"46":{"position":[[28,7],[60,7],[77,7],[150,7],[198,7]]},"48":{"position":[[32,7]]},"67":{"position":[[357,7],[505,7]]},"74":{"position":[[337,7],[549,7]]},"77":{"position":[[148,7],[247,7],[321,7],[635,7]]},"101":{"position":[[558,7]]},"117":{"position":[[48,7]]},"121":{"position":[[2036,7]]},"154":{"position":[[81,7],[1138,7],[1161,7],[1212,7],[1372,7],[1667,7],[1723,7]]},"162":{"position":[[1460,7]]},"163":{"position":[[582,8]]},"168":{"position":[[182,7],[238,7],[353,7]]},"170":{"position":[[56,7],[195,7],[224,7]]},"173":{"position":[[50,7],[161,7],[406,7],[451,7],[490,7],[542,7],[592,7],[745,7],[814,7],[896,7],[1130,7]]},"174":{"position":[[36,7],[396,7],[512,7]]},"190":{"position":[[1002,7],[1098,7]]},"191":{"position":[[1931,7]]},"192":{"position":[[1398,7]]},"207":{"position":[[213,8],[420,7]]},"239":{"position":[[816,8],[861,7]]},"240":{"position":[[1892,7]]},"259":{"position":[[950,8],[2531,8]]},"305":{"position":[[56,8]]},"320":{"position":[[1063,8],[1111,7],[1195,7],[1338,7]]},"321":{"position":[[335,7],[643,7],[1338,8]]},"322":{"position":[[1762,7]]},"323":{"position":[[705,8]]},"326":{"position":[[1278,7],[1343,7]]},"363":{"position":[[700,7],[1006,7]]},"419":{"position":[[7,7]]},"437":{"position":[[261,7]]},"438":{"position":[[633,8],[681,7],[729,7],[857,8],[1004,8],[1136,7],[1313,7],[1469,8],[1598,7]]},"440":{"position":[[7,7],[41,7]]},"545":{"position":[[593,7]]},"547":{"position":[[7,7]]},"909":{"position":[[218,7]]},"925":{"position":[[218,7]]},"936":{"position":[[218,7]]},"945":{"position":[[864,7]]},"952":{"position":[[218,7]]},"970":{"position":[[218,7]]},"1176":{"position":[[57,7]]},"1179":{"position":[[119,7]]},"1292":{"position":[[5640,7]]},"1306":{"position":[[5640,7]]},"1329":{"position":[[5640,7]]},"1383":{"position":[[1879,7]]},"1418":{"position":[[141,7]]},"1420":{"position":[[488,7]]},"1439":{"position":[[88,7]]},"1449":{"position":[[334,7]]}},"keywords":{}}],["storage"",{"_index":2033,"title":{},"content":{"174":{"position":[[193,13]]}},"keywords":{}}],["storage.materi",{"_index":665,"title":{},"content":{"32":{"position":[[290,24]]}},"keywords":{}}],["storage:dev",{"_index":3292,"title":{},"content":{"363":{"position":[[758,11]]}},"keywords":{}}],["storage:dev"",{"_index":3712,"title":{},"content":{"439":{"position":[[106,17]]}},"keywords":{}}],["storageaccountnam",{"_index":3726,"title":{},"content":{"439":{"position":[[363,19]]}},"keywords":{}}],["store",{"_index":103,"title":{"1437":{"position":[[7,5]]},"1438":{"position":[[36,6]]},"1444":{"position":[[0,6]]}},"content":{"3":{"position":[[72,6]]},"6":{"position":[[215,5],[423,6]]},"8":{"position":[[229,6]]},"11":{"position":[[6,6]]},"21":{"position":[[72,6],[435,6],[736,6]]},"34":{"position":[[270,6],[472,6]]},"37":{"position":[[200,7]]},"66":{"position":[[20,6]]},"77":{"position":[[82,6]]},"81":{"position":[[2471,7],[2747,7]]},"82":{"position":[[334,6],[2881,5],[3681,5]]},"113":{"position":[[586,6]]},"114":{"position":[[586,6]]},"115":{"position":[[1114,6]]},"117":{"position":[[79,5],[189,5]]},"121":{"position":[[2012,6]]},"124":{"position":[[156,6]]},"154":{"position":[[1629,6]]},"157":{"position":[[294,5]]},"161":{"position":[[68,6]]},"162":{"position":[[2034,5]]},"163":{"position":[[690,6]]},"168":{"position":[[200,5]]},"170":{"position":[[74,5]]},"189":{"position":[[403,5],[1187,5]]},"190":{"position":[[1656,5]]},"198":{"position":[[385,6]]},"207":{"position":[[142,6],[400,6],[541,6],[588,5]]},"216":{"position":[[237,5]]},"239":{"position":[[745,6],[982,6],[1029,5]]},"296":{"position":[[7655,5]]},"301":{"position":[[1473,5]]},"320":{"position":[[666,7],[983,5],[1703,5]]},"322":{"position":[[1067,5]]},"323":{"position":[[677,5]]},"329":{"position":[[558,6]]},"330":{"position":[[213,7]]},"338":{"position":[[222,6]]},"427":{"position":[[81,5]]},"517":{"position":[[2947,5]]},"747":{"position":[[486,7]]},"909":{"position":[[154,6],[240,5]]},"925":{"position":[[154,6],[240,5]]},"936":{"position":[[154,6],[240,5]]},"952":{"position":[[154,6],[240,5]]},"970":{"position":[[154,6],[240,5]]},"1094":{"position":[[274,6]]},"1144":{"position":[[85,5],[535,5]]},"1151":{"position":[[1277,5]]},"1162":{"position":[[383,5]]},"1170":{"position":[[85,5],[535,5]]},"1179":{"position":[[1076,5]]},"1196":{"position":[[955,5]]},"1203":{"position":[[404,6]]},"1206":{"position":[[664,7],[728,6],[914,5],[1090,5]]},"1208":{"position":[[161,6]]},"1213":{"position":[[85,5],[390,5]]},"1220":{"position":[[85,5],[390,5]]},"1260":{"position":[[825,5]]},"1274":{"position":[[173,5]]},"1276":{"position":[[51,6]]},"1292":{"position":[[5686,6]]},"1306":{"position":[[5686,6]]},"1329":{"position":[[5686,6]]},"1420":{"position":[[602,5]]},"1434":{"position":[[1944,5],[2212,5]]},"1437":{"position":[[29,5],[454,5],[837,5],[1186,5],[1263,5]]},"1438":{"position":[[125,5],[191,5],[225,6]]},"1439":{"position":[[179,5],[284,6],[734,5],[776,5],[1224,5],[1389,5],[1469,5]]},"1440":{"position":[[204,5],[255,5],[660,7],[761,6],[961,5]]},"1443":{"position":[[1042,5]]},"1444":{"position":[[14,5],[120,6],[215,7],[347,5],[608,5]]}},"keywords":{}}],["store<x>",{"_index":6457,"title":{},"content":{"1434":{"position":[[1766,14]]}},"keywords":{}}],["store<y>",{"_index":6458,"title":{},"content":{"1434":{"position":[[1805,14]]}},"keywords":{}}],["store<z>",{"_index":6459,"title":{},"content":{"1434":{"position":[[1844,14]]}},"keywords":{}}],["stori",{"_index":4423,"title":{},"content":{"671":{"position":[[268,7]]}},"keywords":{}}],["straight_join",{"_index":6200,"title":{},"content":{"1292":{"position":[[5725,13]]},"1306":{"position":[[5725,13]]},"1329":{"position":[[5725,13]]}},"keywords":{}}],["straightforward",{"_index":2267,"title":{},"content":{"209":{"position":[[728,15]]},"254":{"position":[[3381,15]]}},"keywords":{}}],["strategi",{"_index":743,"title":{"1358":{"position":[[28,11]]},"1458":{"position":[[10,10]]}},"content":{"42":{"position":[[601,9]]},"67":{"position":[[1964,8]]},"121":{"position":[[988,10],[1082,10]]},"164":{"position":[[154,10],[545,9],[630,9],[1755,10],[1925,9],[2041,9]]},"166":{"position":[[452,10]]},"183":{"position":[[1803,9],[1890,9],[3609,9],[3696,9]]},"208":{"position":[[394,9]]},"254":{"position":[[398,9],[450,9],[485,9],[1466,9],[1518,9],[1553,9],[1890,8],[1931,8],[2031,10],[3809,9]]},"281":{"position":[[2067,9],[2152,9]]},"296":{"position":[[576,9],[641,9],[1547,9],[1612,9],[1786,8],[1827,10]]},"1008":{"position":[[896,8],[1642,9],[1826,9]]},"1279":{"position":[[212,8],[235,8]]},"1358":{"position":[[497,10],[865,8],[884,8]]},"1440":{"position":[[544,9]]},"1459":{"position":[[1189,10],[1358,10]]},"1463":{"position":[[324,9],[393,9],[439,9]]},"1464":{"position":[[180,9],[354,9]]},"1465":{"position":[[38,10],[268,10],[745,9],[984,9],[1030,9],[1058,9]]},"1466":{"position":[[139,9],[336,9]]},"1467":{"position":[[482,9],[688,9],[804,9],[865,9],[2153,9],[2232,9],[2277,9]]},"1476":{"position":[[190,9],[259,9],[299,9],[1256,9],[1395,9],[1419,9],[1494,9]]},"1477":{"position":[[960,9],[1086,9],[1319,9],[1441,8],[1512,9],[3182,9],[3306,9],[3607,8],[3678,9],[3814,9],[3840,9]]}},"keywords":{}}],["strategiesrefer",{"_index":1941,"title":{},"content":{"164":{"position":[[809,19]]}},"keywords":{}}],["strategy.set",{"_index":5017,"title":{},"content":{"910":{"position":[[151,12]]},"926":{"position":[[151,12]]},"937":{"position":[[151,12]]},"953":{"position":[[151,12]]},"971":{"position":[[151,12]]}},"keywords":{}}],["stream",{"_index":689,"title":{"231":{"position":[[15,9]]},"353":{"position":[[10,8]]},"430":{"position":[[12,9]]},"559":{"position":[[0,6]]},"729":{"position":[[10,8]]},"899":{"position":[[10,8]]},"1096":{"position":[[10,8]]}},"content":{"37":{"position":[[208,9]]},"40":{"position":[[283,9]]},"53":{"position":[[236,9]]},"54":{"position":[[334,8]]},"56":{"position":[[1926,7],[2097,7],[2197,9]]},"80":{"position":[[508,7]]},"119":{"position":[[430,8]]},"180":{"position":[[555,7]]},"183":{"position":[[3331,6]]},"196":{"position":[[199,6],[224,6]]},"197":{"position":[[157,8],[174,7],[362,7]]},"198":{"position":[[46,7],[130,9],[342,7],[455,6],[571,7],[626,9],[938,9]]},"203":{"position":[[89,7]]},"209":{"position":[[451,7],[615,7],[842,7],[1024,7]]},"210":{"position":[[2236,10],[2471,9]]},"211":{"position":[[834,7]]},"217":{"position":[[1108,8]]},"218":{"position":[[820,8]]},"232":{"position":[[34,9]]},"233":{"position":[[199,6],[224,6]]},"236":{"position":[[2830,6],[3795,10]]},"253":{"position":[[955,6]]},"255":{"position":[[1050,7]]},"279":{"position":[[397,6]]},"307":{"position":[[1200,7],[2050,7]]},"313":{"position":[[955,6]]},"316":{"position":[[1375,7]]},"319":{"position":[[867,9],[1261,9],[1308,6],[1318,6]]},"320":{"position":[[101,9],[382,9],[1638,8],[1945,6],[2371,6]]},"321":{"position":[[47,6],[104,9]]},"325":{"position":[[74,7]]},"329":{"position":[[386,9],[723,9],[778,9]]},"331":{"position":[[152,6],[162,6],[570,6]]},"349":{"position":[[418,8]]},"351":{"position":[[365,6]]},"353":{"position":[[46,8]]},"359":{"position":[[342,6]]},"360":{"position":[[186,7]]},"370":{"position":[[2116,7],[2124,6]]},"371":{"position":[[1303,7]]},"373":{"position":[[140,9],[659,9],[693,6],[995,8]]},"377":{"position":[[324,10],[389,9],[418,9]]},"379":{"position":[[327,7],[474,8],[506,6],[597,7]]},"381":{"position":[[532,6]]},"387":{"position":[[1379,6]]},"388":{"position":[[441,7]]},"390":{"position":[[65,8],[99,7],[250,7],[286,7],[320,7],[361,7]]},"392":{"position":[[603,6],[729,6],[736,6]]},"393":{"position":[[337,7],[494,7]]},"395":{"position":[[80,7],[116,7],[194,7],[235,6],[314,6],[494,7],[530,7]]},"408":{"position":[[572,6]]},"418":{"position":[[398,7]]},"424":{"position":[[396,6]]},"425":{"position":[[218,7],[295,7],[380,7],[454,7],[539,7]]},"430":{"position":[[22,9]]},"432":{"position":[[1239,6]]},"433":{"position":[[346,7],[742,7]]},"439":{"position":[[625,7]]},"448":{"position":[[1266,6]]},"449":{"position":[[422,7]]},"454":{"position":[[585,6]]},"455":{"position":[[265,7]]},"460":{"position":[[602,6]]},"461":{"position":[[266,7]]},"466":{"position":[[313,6]]},"467":{"position":[[201,7]]},"473":{"position":[[304,7]]},"492":{"position":[[493,7]]},"496":{"position":[[578,6],[590,6]]},"497":{"position":[[220,7],[403,7]]},"503":{"position":[[194,7]]},"509":{"position":[[578,6]]},"510":{"position":[[193,7]]},"517":{"position":[[1492,7],[2044,7],[4001,6]]},"518":{"position":[[475,7],[557,7],[633,7],[719,7],[835,7],[937,7],[1037,7],[1131,7],[1257,7],[1367,7],[1447,7],[1529,7],[1597,7]]},"527":{"position":[[351,7]]},"534":{"position":[[863,7],[1746,6]]},"535":{"position":[[365,7]]},"546":{"position":[[1105,7]]},"556":{"position":[[1582,7],[2243,6]]},"557":{"position":[[617,7]]},"560":{"position":[[46,6]]},"573":{"position":[[1103,6],[1322,6]]},"575":{"position":[[324,7],[422,7],[509,7],[613,7],[702,7],[802,7],[887,7],[982,7],[1085,7],[1181,7]]},"584":{"position":[[1394,6]]},"586":{"position":[[346,7],[444,7],[531,7],[635,7],[724,7],[809,7],[904,7],[1000,7]]},"595":{"position":[[980,6]]},"611":{"position":[[1233,6]]},"612":{"position":[[369,7]]},"620":{"position":[[263,7]]},"625":{"position":[[207,6]]},"626":{"position":[[158,7]]},"631":{"position":[[538,6]]},"632":{"position":[[227,7]]},"637":{"position":[[1196,6]]},"638":{"position":[[397,7]]},"654":{"position":[[635,7],[736,7]]},"655":{"position":[[216,7]]},"665":{"position":[[493,7]]},"670":{"position":[[696,6]]},"671":{"position":[[260,7]]},"685":{"position":[[520,6]]},"686":{"position":[[255,7],[330,7],[410,7],[503,7],[591,7],[688,7],[766,7],[864,7],[962,7],[1040,7],[1111,7]]},"695":{"position":[[493,7]]},"700":{"position":[[348,6]]},"701":{"position":[[189,7]]},"706":{"position":[[348,6]]},"707":{"position":[[189,7]]},"712":{"position":[[543,6]]},"713":{"position":[[198,7]]},"720":{"position":[[852,6],[872,6]]},"721":{"position":[[328,7]]},"736":{"position":[[187,7],[272,7],[361,7]]},"741":{"position":[[525,6]]},"742":{"position":[[257,7]]},"747":{"position":[[1407,6]]},"748":{"position":[[417,7]]},"757":{"position":[[2027,7],[2035,6]]},"758":{"position":[[317,7]]},"770":{"position":[[2027,7],[2035,6]]},"771":{"position":[[317,7]]},"782":{"position":[[606,6]]},"785":{"position":[[93,7],[271,7]]},"786":{"position":[[117,6]]},"797":{"position":[[2034,7],[2042,6]]},"798":{"position":[[315,7]]},"812":{"position":[[2034,7],[2042,6]]},"813":{"position":[[315,7]]},"828":{"position":[[2034,7],[2042,6]]},"829":{"position":[[315,7]]},"842":{"position":[[1406,7]]},"851":{"position":[[628,6]]},"852":{"position":[[324,7]]},"859":{"position":[[775,6]]},"860":{"position":[[279,7]]},"867":{"position":[[2214,7],[2222,6]]},"868":{"position":[[495,7]]},"885":{"position":[[649,6]]},"886":{"position":[[280,7]]},"897":{"position":[[302,6]]},"899":{"position":[[55,8]]},"900":{"position":[[119,8],[166,7],[248,8]]},"907":{"position":[[1521,7],[1529,6]]},"908":{"position":[[331,7]]},"917":{"position":[[1046,6],[1110,8]]},"919":{"position":[[1571,6],[1635,8]]},"923":{"position":[[1521,7],[1529,6]]},"924":{"position":[[331,7]]},"934":{"position":[[1521,7],[1529,6]]},"935":{"position":[[331,7]]},"947":{"position":[[1234,6]]},"950":{"position":[[1521,7],[1529,6]]},"951":{"position":[[331,7]]},"959":{"position":[[404,6]]},"960":{"position":[[195,7]]},"965":{"position":[[1046,6],[1110,8]]},"968":{"position":[[1521,7],[1529,6]]},"969":{"position":[[331,7]]},"976":{"position":[[182,9]]},"977":{"position":[[684,9]]},"982":{"position":[[406,6]]},"983":{"position":[[189,7]]},"991":{"position":[[829,6]]},"992":{"position":[[248,7],[306,7]]},"997":{"position":[[374,6]]},"998":{"position":[[228,7]]},"1007":{"position":[[35,6]]},"1008":{"position":[[676,7]]},"1009":{"position":[[1677,7],[1685,6]]},"1010":{"position":[[462,7],[572,7]]},"1015":{"position":[[462,6]]},"1016":{"position":[[307,7]]},"1022":{"position":[[423,7]]},"1028":{"position":[[409,6]]},"1029":{"position":[[197,7]]},"1031":{"position":[[230,7],[519,7]]},"1034":{"position":[[838,7]]},"1036":{"position":[[455,9]]},"1045":{"position":[[1140,7],[1148,6]]},"1046":{"position":[[272,7]]},"1053":{"position":[[1140,7],[1148,6]]},"1054":{"position":[[272,7]]},"1061":{"position":[[1140,7],[1148,6]]},"1062":{"position":[[272,7]]},"1070":{"position":[[1032,6]]},"1071":{"position":[[327,7]]},"1076":{"position":[[815,6]]},"1078":{"position":[[214,7],[315,7],[403,7],[479,7],[574,7],[689,7],[765,7],[884,7],[964,7],[1042,7],[1116,7],[1204,7],[1301,7],[1379,7],[1470,7],[1546,7],[1618,7],[1696,7],[1787,7],[1863,7],[1961,7],[2049,7]]},"1085":{"position":[[783,8],[1406,6]]},"1086":{"position":[[382,7]]},"1094":{"position":[[471,6]]},"1096":{"position":[[73,8]]},"1101":{"position":[[305,6]]},"1102":{"position":[[172,7]]},"1107":{"position":[[443,6]]},"1108":{"position":[[261,7]]},"1113":{"position":[[505,6]]},"1114":{"position":[[247,7]]},"1133":{"position":[[1239,6]]},"1134":{"position":[[281,7],[379,7],[483,7],[590,7],[665,7],[751,7],[872,7],[972,7],[1072,7],[1186,7],[1321,7],[1419,7],[1507,7],[1604,7],[1686,7],[1813,7],[1894,7],[1981,7],[2052,7],[2165,7],[2282,7],[2395,7],[2506,7],[2621,7],[2741,7],[2852,7],[2956,7]]},"1233":{"position":[[52,9]]},"1253":{"position":[[472,6]]},"1292":{"position":[[5771,6]]},"1306":{"position":[[5771,6]]},"1329":{"position":[[5771,6]]},"1452":{"position":[[398,9]]}},"keywords":{}}],["stream_nam",{"_index":3519,"title":{},"content":{"393":{"position":[[345,14]]}},"keywords":{}}],["streaming.jpg"",{"_index":2361,"title":{},"content":{"210":{"position":[[2911,20]]}},"keywords":{}}],["streamlin",{"_index":2039,"title":{},"content":{"177":{"position":[[314,11]]},"239":{"position":[[2620,11]]}},"keywords":{}}],["streams_criteria",{"_index":5164,"title":{},"content":{"1009":{"position":[[994,17],[1094,18],[1389,18]]},"1010":{"position":[[332,17]]}},"keywords":{}}],["streamsponsor",{"_index":3467,"title":{},"content":{"381":{"position":[[155,15],[191,15],[309,15]]}},"keywords":{}}],["strengthen",{"_index":5928,"title":{},"content":{"1268":{"position":[[26,11]]}},"keywords":{}}],["strict",{"_index":1048,"title":{},"content":{"70":{"position":[[295,7]]},"160":{"position":[[43,6]]},"1020":{"position":[[2016,6]]}},"keywords":{}}],["stricter",{"_index":1912,"title":{},"content":{"162":{"position":[[456,8]]},"218":{"position":[[1259,8]]},"259":{"position":[[2335,8]]},"291":{"position":[[1262,8]]},"302":{"position":[[1187,8]]}},"keywords":{}}],["strictli",{"_index":1963,"title":{},"content":{"165":{"position":[[2130,8]]},"429":{"position":[[175,8]]},"480":{"position":[[426,8]]},"842":{"position":[[1653,8]]},"1020":{"position":[[796,8]]}},"keywords":{}}],["strike",{"_index":5222,"title":{},"content":{"1036":{"position":[[346,6]]}},"keywords":{}}],["string",{"_index":426,"title":{},"content":{"14":{"position":[[509,7]]},"56":{"position":[[1626,6]]},"69":{"position":[[395,6]]},"70":{"position":[[754,6]]},"72":{"position":[[550,6]]},"89":{"position":[[117,6]]},"94":{"position":[[619,7],[1335,7]]},"98":{"position":[[843,6]]},"107":{"position":[[1834,7],[2035,6],[3974,7]]},"120":{"position":[[999,6]]},"160":{"position":[[823,7]]},"162":{"position":[[2049,7],[2117,8],[2173,8]]},"165":{"position":[[1050,6],[1297,6]]},"183":{"position":[[1215,6],[1856,6],[1875,6],[3662,6],[3681,6]]},"204":{"position":[[588,6],[850,6],[896,6]]},"207":{"position":[[951,6],[1197,6]]},"254":{"position":[[338,6],[370,6],[1406,6],[1438,6]]},"268":{"position":[[847,6]]},"269":{"position":[[472,6]]},"281":{"position":[[2111,6]]},"296":{"position":[[450,6],[470,6],[489,6],[509,6],[1421,6],[1441,6],[1460,6],[1480,6],[3591,7],[4622,7],[4638,7],[4653,7],[4689,7],[4809,7],[4830,7],[4849,7],[4888,7],[5011,7],[5027,7],[5042,7],[5058,7]]},"307":{"position":[[1356,6],[1387,6],[2224,6],[2255,6]]},"308":{"position":[[519,9]]},"309":{"position":[[662,6],[723,6],[2190,6],[2248,6],[2646,7],[2787,6],[2845,8]]},"314":{"position":[[1152,6],[1193,6],[1253,6],[1273,6],[1292,6]]},"315":{"position":[[1076,7],[1107,7],[1127,7],[1143,7],[1158,7]]},"343":{"position":[[299,6],[789,6],[1069,6]]},"351":{"position":[[100,6],[165,6],[281,6],[442,6],[497,6]]},"359":{"position":[[154,6],[258,6],[420,6],[475,6]]},"370":{"position":[[354,6],[428,6],[515,6],[618,6],[996,6],[1158,6],[1257,6],[1459,6],[1863,6],[1974,6],[2100,6],[2143,6],[2225,6]]},"377":{"position":[[838,7],[846,6],[1043,7],[1051,6],[1135,6],[1196,6],[1278,6],[1394,6],[1569,6],[1646,6],[1791,6]]},"387":{"position":[[450,6],[546,6],[663,6],[746,6],[895,6],[1303,6],[1443,6],[1498,6]]},"392":{"position":[[163,6],[329,6],[532,6],[622,6],[749,6]]},"397":{"position":[[144,6],[256,6],[357,6],[681,6],[919,6]]},"402":{"position":[[120,6],[259,6],[328,6],[405,6],[466,6],[548,6],[619,6],[735,6],[870,6]]},"406":{"position":[[210,6]]},"408":{"position":[[102,6],[165,6],[281,6],[382,6],[652,6],[707,6]]},"417":{"position":[[697,6],[880,6],[1071,6],[1115,6],[1358,6],[1610,6],[1874,6],[1982,6],[2158,6],[2341,6]]},"424":{"position":[[96,6],[157,6],[312,6],[475,6],[530,6]]},"432":{"position":[[278,6],[328,6],[586,6],[706,6],[809,6],[912,6],[999,6],[1094,6],[1163,6],[1264,6],[1345,6]]},"438":{"position":[[746,6],[866,6],[1013,6],[1164,6],[1330,6],[1403,6],[1425,6],[1478,6],[1518,6],[1630,6],[1874,6],[1973,6]]},"448":{"position":[[344,6],[460,6],[588,6],[694,6],[781,6],[1001,6],[1182,6],[1328,6],[1383,6]]},"454":{"position":[[138,6],[234,6],[298,6],[359,6],[502,6],[664,6],[719,6]]},"460":{"position":[[101,6],[173,6],[316,6],[518,6],[681,6],[736,6]]},"466":{"position":[[103,6],[179,6],[229,6],[388,6],[443,6]]},"482":{"position":[[157,6],[237,6],[339,6],[454,6],[595,6],[795,6],[886,6]]},"491":{"position":[[298,6],[549,6]]},"492":{"position":[[369,6],[486,6],[583,6]]},"496":{"position":[[131,6],[296,6],[494,6],[658,6],[740,6]]},"502":{"position":[[153,6],[1258,6],[1522,6],[1635,6]]},"509":{"position":[[96,6],[144,6],[502,6],[654,6],[709,6]]},"517":{"position":[[599,6],[723,6],[1175,6],[1389,6],[1683,6],[1878,6],[1938,6],[2088,6],[2844,6],[3917,6],[4089,6],[4144,6]]},"534":{"position":[[453,6],[638,6],[1365,6],[1662,6],[1804,6],[1859,6]]},"540":{"position":[[121,6],[207,6],[279,6],[388,6],[466,6]]},"545":{"position":[[608,6],[733,6],[982,6],[1212,6],[1476,6],[1584,6],[1735,6]]},"556":{"position":[[658,6],[775,6],[889,6],[990,6],[1243,6],[1364,6],[1654,6],[1784,6],[2044,6],[2159,6],[2306,6],[2361,6]]},"565":{"position":[[110,6],[184,6]]},"573":{"position":[[440,6],[567,6],[694,6],[809,6],[1021,6],[1375,6],[1457,6]]},"574":{"position":[[237,6],[292,7],[324,9],[355,10]]},"584":{"position":[[379,6],[498,6],[663,6],[814,6],[924,6],[1438,6],[1520,6]]},"585":{"position":[[227,6]]},"593":{"position":[[138,6],[310,6],[514,6],[635,6]]},"601":{"position":[[139,6],[266,6],[381,6],[504,6]]},"611":{"position":[[368,6],[771,6],[931,6],[1149,6],[1307,6],[1362,6]]},"619":{"position":[[341,6],[472,6],[551,6],[684,6],[767,6]]},"625":{"position":[[123,6],[287,6],[342,6]]},"631":{"position":[[173,6],[316,6],[455,6],[615,6],[670,6]]},"637":{"position":[[240,6],[321,6],[499,6],[542,6],[772,6],[1036,6],[1112,6],[1223,6]]},"646":{"position":[[568,6],[655,6],[815,6],[878,6]]},"654":{"position":[[289,6],[376,6],[556,6],[763,6],[899,6],[953,6]]},"661":{"position":[[584,7]]},"664":{"position":[[319,6],[570,6]]},"665":{"position":[[369,6],[486,6],[583,6]]},"670":{"position":[[136,6],[240,6],[457,6],[612,6],[775,6],[830,6]]},"679":{"position":[[298,6],[549,6]]},"680":{"position":[[369,6],[486,6]]},"685":{"position":[[293,6],[436,6],[587,6],[642,6]]},"694":{"position":[[298,6],[549,6]]},"695":{"position":[[369,6],[486,6],[583,6]]},"700":{"position":[[121,6],[264,6],[426,6],[481,6]]},"706":{"position":[[121,6],[264,6],[425,6],[480,6]]},"712":{"position":[[152,6],[284,6],[459,6],[617,6],[672,6]]},"720":{"position":[[549,6],[653,6],[768,6],[916,6],[971,6]]},"728":{"position":[[167,6],[232,6],[309,6],[429,6],[547,6]]},"735":{"position":[[284,6],[351,6],[490,6],[572,6]]},"741":{"position":[[134,6],[236,6],[379,6],[441,6],[602,6],[657,6]]},"747":{"position":[[576,6],[871,6],[1037,6],[1123,6],[1485,6],[1540,6]]},"753":{"position":[[1594,7]]},"757":{"position":[[144,6],[215,6],[324,6],[729,6],[898,6],[1119,6],[1503,6],[2011,6],[2094,6],[2176,6]]},"770":{"position":[[144,6],[215,6],[324,6],[729,6],[898,6],[1119,6],[1503,6],[2011,6],[2094,6],[2176,6]]},"782":{"position":[[178,6],[234,6],[311,6],[477,6],[578,6],[629,6]]},"793":{"position":[[1617,7]]},"797":{"position":[[144,6],[215,6],[324,6],[729,6],[898,6],[1119,6],[1503,6],[2018,6],[2101,6],[2183,6]]},"812":{"position":[[144,6],[215,6],[324,6],[729,6],[898,6],[1119,6],[1503,6],[2018,6],[2101,6],[2183,6]]},"828":{"position":[[144,6],[215,6],[324,6],[729,6],[898,6],[1119,6],[1503,6],[2018,6],[2101,6],[2183,6]]},"842":{"position":[[183,6],[430,6],[715,6],[829,6],[898,6],[976,6],[1149,6],[1233,6],[1978,6],[2183,6],[2385,6],[3161,6],[3320,6],[3480,6]]},"851":{"position":[[160,6],[328,6],[427,6],[481,6],[544,6],[706,6],[761,6]]},"859":{"position":[[401,6],[473,6],[699,6],[835,6],[935,6]]},"867":{"position":[[137,6],[206,6],[283,6],[375,6],[619,6],[791,6],[1639,6],[1845,6],[2198,6],[2241,6]]},"879":{"position":[[92,6],[240,6],[547,6],[645,6],[735,6],[821,6],[895,6],[985,6],[1595,6],[1707,6],[1785,6]]},"885":{"position":[[133,6],[234,6],[422,6],[565,6],[737,6],[792,6]]},"891":{"position":[[114,6],[278,6],[451,6]]},"897":{"position":[[218,6],[381,6],[436,6]]},"907":{"position":[[137,6],[211,6],[298,6],[401,6],[779,6],[941,6],[1040,6],[1242,6],[1381,6],[1505,6],[1548,6],[1630,6]]},"919":{"position":[[2524,7]]},"923":{"position":[[137,6],[211,6],[298,6],[401,6],[779,6],[941,6],[1040,6],[1242,6],[1381,6],[1505,6],[1548,6],[1630,6]]},"934":{"position":[[137,6],[211,6],[298,6],[401,6],[779,6],[941,6],[1040,6],[1242,6],[1381,6],[1505,6],[1548,6],[1630,6]]},"947":{"position":[[269,7],[383,6],[546,6],[618,6]]},"950":{"position":[[137,6],[211,6],[298,6],[401,6],[779,6],[941,6],[1040,6],[1242,6],[1381,6],[1505,6],[1548,6],[1630,6]]},"959":{"position":[[128,6],[320,6],[482,6],[537,6]]},"968":{"position":[[137,6],[211,6],[298,6],[401,6],[779,6],[941,6],[1040,6],[1242,6],[1381,6],[1505,6],[1548,6],[1630,6]]},"982":{"position":[[130,6],[322,6],[484,6],[539,6]]},"991":{"position":[[400,6],[552,6],[668,6],[891,6]]},"997":{"position":[[114,6],[208,6],[290,6],[450,6],[505,6]]},"1008":{"position":[[1721,6]]},"1009":{"position":[[335,6],[463,6],[615,6],[731,6],[987,6],[1361,6],[1492,6],[1747,6],[1802,6]]},"1015":{"position":[[378,6],[537,6],[592,6]]},"1021":{"position":[[409,6],[473,6],[586,6],[686,6],[816,6],[1075,6],[1769,6],[2115,6]]},"1028":{"position":[[187,6],[325,6],[487,6],[542,6]]},"1034":{"position":[[191,6],[257,6],[343,6],[400,6],[477,6],[637,6],[866,6]]},"1035":{"position":[[95,6],[164,6]]},"1045":{"position":[[144,6],[218,6],[283,6],[386,6],[789,6],[969,6],[1124,6],[1167,6]]},"1053":{"position":[[144,6],[218,6],[283,6],[386,6],[789,6],[969,6],[1124,6],[1167,6]]},"1061":{"position":[[144,6],[218,6],[283,6],[386,6],[789,6],[969,6],[1124,6],[1167,6]]},"1070":{"position":[[396,6],[502,6],[620,6],[763,6],[1098,6],[1153,6]]},"1076":{"position":[[190,6],[333,6],[731,6],[880,6],[935,6]]},"1085":{"position":[[476,6],[602,6],[687,6],[976,6],[1131,6],[1331,6],[1466,6],[1521,6]]},"1094":{"position":[[128,6],[221,6],[281,6],[387,6],[552,6],[607,6]]},"1101":{"position":[[96,6],[157,6],[221,6],[392,6],[447,6]]},"1107":{"position":[[252,6],[359,6],[507,6],[562,6]]},"1113":{"position":[[103,6],[161,6],[316,6],[581,6],[636,6]]},"1125":{"position":[[139,6],[246,6],[316,6],[475,6],[606,6]]},"1133":{"position":[[160,6],[247,6],[358,6],[469,6],[589,6],[716,6],[946,6],[1155,6],[1303,6],[1358,6],[1496,6]]},"1138":{"position":[[344,6],[430,6],[507,6],[710,6],[776,6],[1153,6],[1264,6],[1475,6],[1701,6],[1836,6]]},"1144":{"position":[[113,6],[209,6],[317,6],[382,6],[473,6],[550,6],[867,6],[1066,6],[1073,6],[1134,6],[1353,6]]},"1151":{"position":[[186,6],[242,6],[319,6],[504,6],[696,6],[825,6],[956,6],[1051,6],[1207,6],[1298,6],[1407,6],[1612,6]]},"1162":{"position":[[139,6],[246,6],[315,6],[398,6],[432,6],[570,6],[695,6],[727,6],[840,6],[938,6]]},"1164":{"position":[[231,6],[245,6],[295,6],[340,6],[413,6],[445,6],[480,6],[516,6],[536,6],[579,7],[612,7],[654,6]]},"1170":{"position":[[113,6],[209,6],[317,6],[382,6],[473,6],[550,6],[867,6],[1278,6]]},"1172":{"position":[[397,6],[446,6],[499,6],[598,6],[687,6],[735,6],[826,6],[909,6],[929,6]]},"1179":{"position":[[156,6],[281,6],[328,6],[523,6],[578,6],[703,6],[883,6],[1106,6],[1238,6]]},"1188":{"position":[[207,6],[276,6],[346,6],[420,6],[595,6],[673,6],[773,6],[850,6]]},"1196":{"position":[[238,6],[369,6],[462,6],[697,6],[990,6]]},"1200":{"position":[[30,6],[244,6]]},"1206":{"position":[[130,6],[189,6],[278,6],[335,6],[499,6],[553,6],[672,6],[750,6],[795,6],[1021,6],[1161,6]]},"1213":{"position":[[113,6],[237,6],[328,6],[405,6],[743,6],[750,6],[811,6],[1030,6]]},"1220":{"position":[[113,6],[237,6],[328,6],[405,6],[955,6]]},"1222":{"position":[[397,6],[446,6],[499,6],[598,6],[687,6],[735,6],[826,6],[909,6],[929,6]]},"1230":{"position":[[172,6],[302,6],[447,6],[565,6],[1279,6],[1358,6]]},"1239":{"position":[[107,6],[183,6]]},"1240":{"position":[[134,6]]},"1247":{"position":[[343,6],[473,6],[639,6],[773,6],[1136,6]]},"1253":{"position":[[178,6],[251,6],[307,6],[384,6],[495,6]]},"1260":{"position":[[142,6],[209,6],[410,6],[505,6],[624,6],[755,6],[846,6],[955,6],[1136,6]]},"1267":{"position":[[159,6],[240,6],[296,6],[360,6],[594,6]]},"1269":{"position":[[101,6]]},"1275":{"position":[[203,8]]},"1276":{"position":[[184,6]]},"1277":{"position":[[204,6],[319,6],[410,6],[495,6],[648,6],[974,6],[1155,6]]},"1285":{"position":[[127,6],[249,6],[326,6],[382,6],[741,6],[954,6],[1081,6],[1210,6],[1322,6]]},"1286":{"position":[[2671,6]]},"1289":{"position":[[1712,7]]},"1292":{"position":[[5814,6]]},"1300":{"position":[[127,6],[249,6],[326,6],[382,6],[741,6],[954,6],[1081,6],[1210,6],[1322,6]]},"1301":{"position":[[2507,6]]},"1306":{"position":[[5814,6]]},"1310":{"position":[[1033,7]]},"1313":{"position":[[127,6],[240,6],[317,6],[520,6],[586,6],[808,6],[1019,6],[1245,6],[1380,6]]},"1317":{"position":[[937,8]]},"1324":{"position":[[127,6],[249,6],[326,6],[382,6],[741,6],[954,6],[1081,6],[1210,6],[1322,6]]},"1325":{"position":[[2671,6]]},"1329":{"position":[[5814,6]]},"1337":{"position":[[127,6],[240,6],[317,6],[520,6],[586,6],[808,6],[1019,6],[1245,6],[1380,6]]},"1341":{"position":[[937,8]]},"1348":{"position":[[127,6],[240,6],[317,6],[520,6],[586,6],[808,6],[1019,6],[1245,6],[1380,6]]},"1352":{"position":[[937,8]]},"1356":{"position":[[169,6],[378,6],[1168,6],[1413,6],[1523,6]]},"1362":{"position":[[296,6],[363,6],[437,6],[569,6],[651,6],[736,6],[788,6]]},"1367":{"position":[[188,6]]},"1376":{"position":[[127,6],[249,6],[326,6],[382,6],[586,6]]},"1386":{"position":[[212,6],[302,6],[493,6],[584,6],[628,6],[685,6],[835,6],[893,6],[987,6],[1076,6],[1176,6],[1253,6]]},"1400":{"position":[[127,6],[249,6],[326,6],[382,6],[586,6]]},"1411":{"position":[[127,6],[249,6],[326,6],[382,6],[586,6]]},"1420":{"position":[[89,6],[150,6],[219,6],[272,6],[331,6],[381,6],[439,6],[496,6],[532,6],[623,6],[723,6],[800,6]]},"1427":{"position":[[127,6],[181,6],[258,6],[461,6],[527,6],[779,6],[1005,6],[1140,6]]},"1432":{"position":[[965,8]]},"1452":{"position":[[569,6],[707,6],[928,6],[1143,6],[1560,6]]},"1457":{"position":[[97,6],[166,6]]},"1463":{"position":[[367,6]]},"1464":{"position":[[223,6]]},"1465":{"position":[[518,6]]},"1466":{"position":[[182,6]]},"1467":{"position":[[525,6],[2196,6]]},"1474":{"position":[[554,6],[637,6],[770,6],[906,6]]},"1475":{"position":[[425,6]]},"1476":{"position":[[233,6],[1299,6],[1363,6]]},"1477":{"position":[[1003,6],[3225,6],[3782,6]]},"1480":{"position":[[705,6]]}},"keywords":{}}],["stringfield",{"_index":5839,"title":{},"content":{"1200":{"position":[[727,11]]},"1275":{"position":[[440,12]]}},"keywords":{}}],["stringvalu",{"_index":5944,"title":{},"content":{"1275":{"position":[[453,11]]}},"keywords":{}}],["stripe",{"_index":3382,"title":{"1072":{"position":[[0,6]]}},"content":{"364":{"position":[[3344,6]]},"1073":{"position":[[56,6]]},"1074":{"position":[[20,6],[54,6]]},"1075":{"position":[[250,6]]},"1076":{"position":[[88,6],[232,6],[836,6]]},"1077":{"position":[[126,6]]}},"keywords":{}}],["stripe:dev",{"_index":3383,"title":{},"content":{"364":{"position":[[3397,10]]},"1078":{"position":[[89,10]]}},"keywords":{}}],["strive",{"_index":1448,"title":{},"content":{"101":{"position":[[263,7]]}},"keywords":{}}],["strong",{"_index":2135,"title":{},"content":{"191":{"position":[[531,6]]},"240":{"position":[[493,6]]},"332":{"position":[[110,6],[655,6]]}},"keywords":{}}],["strongest",{"_index":4270,"title":{},"content":{"595":{"position":[[1070,9]]}},"keywords":{}}],["strongli",{"_index":1466,"title":{},"content":{"102":{"position":[[364,8]]},"281":{"position":[[2451,8]]},"429":{"position":[[323,8]]},"750":{"position":[[262,8]]},"766":{"position":[[262,8]]},"789":{"position":[[296,8]]},"807":{"position":[[296,8]]},"823":{"position":[[296,8]]},"1461":{"position":[[1691,8]]}},"keywords":{}}],["structur",{"_index":728,"title":{},"content":{"41":{"position":[[385,10]]},"56":{"position":[[1807,9]]},"66":{"position":[[429,9]]},"87":{"position":[[23,10]]},"120":{"position":[[1954,9]]},"156":{"position":[[71,9],[498,9]]},"162":{"position":[[1435,10],[1582,9]]},"165":{"position":[[480,11]]},"197":{"position":[[113,9]]},"218":{"position":[[1954,9]]},"227":{"position":[[134,10],[164,9]]},"228":{"position":[[825,10]]},"229":{"position":[[519,10]]},"239":{"position":[[1176,10],[1433,9],[2087,10],[2646,10]]},"254":{"position":[[20,9]]},"263":{"position":[[909,9]]},"281":{"position":[[2799,11],[3221,11]]},"291":{"position":[[1341,10],[1464,10]]},"296":{"position":[[20,9],[1145,9]]},"301":{"position":[[913,10]]},"302":{"position":[[1266,10],[1384,10]]},"314":{"position":[[20,9]]},"427":{"position":[[218,9]]},"690":{"position":[[283,9]]},"1008":{"position":[[1316,9],[1986,9]]},"1020":{"position":[[1013,9]]},"1275":{"position":[[82,9],[371,10]]},"1379":{"position":[[3782,9]]},"1403":{"position":[[3782,9]]},"1414":{"position":[[3782,9]]},"1461":{"position":[[1020,9]]}},"keywords":{}}],["struggl",{"_index":2489,"title":{},"content":{"232":{"position":[[1029,9]]}},"keywords":{}}],["stub",{"_index":969,"title":{},"content":{"64":{"position":[[792,4]]},"94":{"position":[[544,4],[959,4]]},"183":{"position":[[721,7]]},"266":{"position":[[451,7]]},"267":{"position":[[1089,7]]},"268":{"position":[[1091,7]]},"269":{"position":[[662,7]]},"270":{"position":[[1607,4]]},"281":{"position":[[736,4]]},"315":{"position":[[56,5]]}},"keywords":{}}],["stubinterfac",{"_index":2880,"title":{},"content":{"281":{"position":[[850,14]]}},"keywords":{}}],["stuck",{"_index":5056,"title":{},"content":{"922":{"position":[[1135,5],[3038,5]]}},"keywords":{}}],["style",{"_index":1235,"title":{},"content":{"83":{"position":[[1374,5]]}},"keywords":{}}],["su",{"_index":6534,"title":{},"content":{"1452":{"position":[[1442,3]]}},"keywords":{}}],["su)nday",{"_index":6556,"title":{},"content":{"1452":{"position":[[4165,9]]}},"keywords":{}}],["sub",{"_index":1909,"title":{},"content":{"162":{"position":[[258,3],[1475,3]]},"338":{"position":[[244,3]]},"1008":{"position":[[1345,3],[1385,3]]},"1467":{"position":[[721,3]]}},"keywords":{}}],["sub"",{"_index":5891,"title":{},"content":{"1230":{"position":[[1006,10]]}},"keywords":{}}],["sub/directory/flow.yaml",{"_index":1284,"title":{},"content":{"87":{"position":[[288,23]]}},"keywords":{}}],["subclass_orig",{"_index":6206,"title":{},"content":{"1292":{"position":[[5857,13]]},"1306":{"position":[[5857,13]]},"1329":{"position":[[5857,13]]}},"keywords":{}}],["subcollect",{"_index":4236,"title":{},"content":{"590":{"position":[[271,14],[407,13]]}},"keywords":{}}],["subcommand",{"_index":898,"title":{"60":{"position":[[8,12]]}},"content":{"60":{"position":[[36,11],[127,12],[168,11],[1088,11],[1209,12],[1251,11]]},"61":{"position":[[303,11]]},"341":{"position":[[68,11],[571,11]]},"1471":{"position":[[36,11]]}},"keywords":{}}],["subdirectori",{"_index":946,"title":{"1019":{"position":[[0,14]]}},"content":{"63":{"position":[[676,15]]},"64":{"position":[[442,12]]},"221":{"position":[[973,12]]},"222":{"position":[[218,12]]},"223":{"position":[[184,12]]},"224":{"position":[[237,12]]},"263":{"position":[[1097,12]]},"270":{"position":[[1746,12]]},"274":{"position":[[1684,14]]},"1019":{"position":[[128,14],[253,14]]},"1021":{"position":[[783,14]]},"1298":{"position":[[184,12]]},"1322":{"position":[[218,12]]},"1335":{"position":[[218,12]]},"1346":{"position":[[184,12]]}},"keywords":{}}],["subdivid",{"_index":90,"title":{},"content":{"2":{"position":[[559,11]]},"49":{"position":[[454,10]]},"101":{"position":[[523,9]]}},"keywords":{}}],["subdivis",{"_index":1458,"title":{},"content":{"101":{"position":[[599,12]]}},"keywords":{}}],["subdomain",{"_index":5387,"title":{},"content":{"1107":{"position":[[268,10],[279,9],[310,9]]},"1108":{"position":[[215,10]]},"1130":{"position":[[1,9],[98,10]]},"1131":{"position":[[1,9]]},"1133":{"position":[[962,10],[973,9],[1004,9],[1144,10]]},"1134":{"position":[[235,10]]}},"keywords":{}}],["subdomain.email",{"_index":5462,"title":{},"content":{"1131":{"position":[[98,15]]}},"keywords":{}}],["subgraph",{"_index":1522,"title":{},"content":{"107":{"position":[[821,8],[925,8]]}},"keywords":{}}],["subject",{"_index":3217,"title":{"337":{"position":[[0,9]]}},"content":{"337":{"position":[[58,8],[137,7],[226,8]]},"341":{"position":[[267,7],[412,7]]},"1292":{"position":[[5903,7]]},"1306":{"position":[[5903,7]]},"1329":{"position":[[5903,7]]}},"keywords":{}}],["submissionslin",{"_index":4391,"title":{},"content":{"649":{"position":[[402,15]]}},"keywords":{}}],["submissionsmarket",{"_index":4397,"title":{},"content":{"649":{"position":[[627,20]]}},"keywords":{}}],["submit",{"_index":4113,"title":{},"content":{"554":{"position":[[443,10]]}},"keywords":{}}],["submultiset",{"_index":5541,"title":{},"content":{"1140":{"position":[[715,11]]},"1316":{"position":[[715,11]]},"1340":{"position":[[715,11]]},"1351":{"position":[[715,11]]},"1379":{"position":[[3842,11]]},"1403":{"position":[[3842,11]]},"1414":{"position":[[3842,11]]},"1431":{"position":[[738,11]]}},"keywords":{}}],["subnet",{"_index":2474,"title":{},"content":{"224":{"position":[[802,7]]}},"keywords":{}}],["subpartit",{"_index":6211,"title":{},"content":{"1292":{"position":[[5947,12],[6003,13]]},"1306":{"position":[[5947,12],[6003,13]]},"1329":{"position":[[5947,12],[6003,13]]}},"keywords":{}}],["subscrib",{"_index":2184,"title":{},"content":{"197":{"position":[[373,9]]},"601":{"position":[[490,9]]},"602":{"position":[[209,11]]},"1440":{"position":[[1311,10]]},"1455":{"position":[[377,10],[453,11],[624,10]]},"1456":{"position":[[34,10]]},"1457":{"position":[[54,9]]}},"keywords":{}}],["subscribeemail",{"_index":4456,"title":{},"content":{"697":{"position":[[184,14]]}},"keywords":{}}],["subscript",{"_index":3691,"title":{},"content":{"435":{"position":[[75,12],[89,12]]},"436":{"position":[[77,12],[130,13],[181,12],[229,12]]},"438":{"position":[[1235,12],[1271,12]]},"598":{"position":[[183,13],[241,14]]},"601":{"position":[[302,12],[361,12]]},"602":{"position":[[224,13],[336,14]]},"649":{"position":[[175,12],[569,12]]},"654":{"position":[[612,12],[673,12]]},"1078":{"position":[[1969,13]]},"1230":{"position":[[630,13],[714,12],[899,12],[929,12]]}},"keywords":{}}],["subscription_item",{"_index":5329,"title":{},"content":{"1078":{"position":[[1871,18]]}},"keywords":{}}],["subscription_typ",{"_index":4399,"title":{},"content":{"654":{"position":[[572,18]]}},"keywords":{}}],["subscriptionprefix",{"_index":4289,"title":{},"content":{"601":{"position":[[282,19]]}},"keywords":{}}],["subscriptionscustomersinvoicesordersplansaddonsitemsitem",{"_index":3768,"title":{},"content":{"457":{"position":[[73,56]]}},"keywords":{}}],["subsequ",{"_index":1010,"title":{},"content":{"67":{"position":[[1106,12]]},"133":{"position":[[317,10],[559,10]]},"209":{"position":[[638,10]]}},"keywords":{}}],["subset",{"_index":491,"title":{},"content":{"17":{"position":[[156,6]]},"68":{"position":[[952,6]]},"106":{"position":[[224,6]]},"107":{"position":[[351,6]]},"122":{"position":[[401,6],[1674,6]]},"123":{"position":[[48,6]]},"190":{"position":[[1253,6],[2023,6]]},"320":{"position":[[912,7]]},"517":{"position":[[426,6]]},"985":{"position":[[437,6]]},"1000":{"position":[[615,6]]},"1140":{"position":[[760,6]]},"1316":{"position":[[760,6]]},"1340":{"position":[[760,6]]},"1351":{"position":[[760,6]]},"1431":{"position":[[783,6]]},"1461":{"position":[[2142,6]]},"1470":{"position":[[16,6]]},"1472":{"position":[[255,6]]}},"keywords":{}}],["substanti",{"_index":3109,"title":{},"content":{"319":{"position":[[1454,13]]}},"keywords":{}}],["substitut",{"_index":2165,"title":{},"content":{"192":{"position":[[1037,11]]},"918":{"position":[[1260,10]]},"1388":{"position":[[629,10]]}},"keywords":{}}],["substr",{"_index":5545,"title":{},"content":{"1140":{"position":[[799,9]]},"1316":{"position":[[799,9]]},"1340":{"position":[[799,9]]},"1351":{"position":[[799,9]]},"1379":{"position":[[3905,9]]},"1403":{"position":[[3905,9]]},"1414":{"position":[[3905,9]]},"1431":{"position":[[822,9]]}},"keywords":{}}],["substr($meta$dt,1,10",{"_index":2773,"title":{},"content":{"254":{"position":[[705,21],[2762,21],[3423,21]]}},"keywords":{}}],["substring_reg",{"_index":6343,"title":{},"content":{"1379":{"position":[[3967,13]]},"1403":{"position":[[3967,13]]},"1414":{"position":[[3967,13]]}},"keywords":{}}],["substring_regex",{"_index":5546,"title":{},"content":{"1140":{"position":[[842,15]]},"1316":{"position":[[842,15]]},"1340":{"position":[[842,15]]},"1351":{"position":[[842,15]]},"1431":{"position":[[865,15]]}},"keywords":{}}],["subsystem",{"_index":868,"title":{},"content":{"58":{"position":[[82,9]]}},"keywords":{}}],["subtleti",{"_index":1079,"title":{},"content":{"74":{"position":[[305,8]]}},"keywords":{}}],["subtre",{"_index":5161,"title":{},"content":{"1008":{"position":[[1219,7]]}},"keywords":{}}],["succe",{"_index":5547,"title":{},"content":{"1140":{"position":[[883,8]]},"1316":{"position":[[883,8]]},"1340":{"position":[[883,8]]},"1351":{"position":[[883,8]]},"1431":{"position":[[906,8]]}},"keywords":{}}],["success",{"_index":2088,"title":{},"content":{"183":{"position":[[4524,10]]},"240":{"position":[[4212,10]]},"291":{"position":[[819,11]]},"302":{"position":[[819,11]]}},"keywords":{}}],["successfulli",{"_index":1033,"title":{},"content":{"68":{"position":[[1476,12]]},"140":{"position":[[363,12]]},"217":{"position":[[2232,13]]},"218":{"position":[[2165,13]]},"240":{"position":[[4302,12]]},"241":{"position":[[28,12]]},"255":{"position":[[1164,12]]},"264":{"position":[[578,13]]},"278":{"position":[[1496,12]]},"290":{"position":[[1712,13]]},"291":{"position":[[1975,13]]},"295":{"position":[[1777,12]]},"296":{"position":[[6857,12]]},"301":{"position":[[1686,13]]},"302":{"position":[[1887,13]]},"316":{"position":[[1489,12]]},"922":{"position":[[1738,12]]},"1447":{"position":[[746,13]]},"1471":{"position":[[518,12]]}},"keywords":{}}],["such",{"_index":334,"title":{},"content":{"11":{"position":[[1369,4]]},"13":{"position":[[1201,4]]},"17":{"position":[[289,4]]},"50":{"position":[[79,4]]},"52":{"position":[[146,4]]},"55":{"position":[[374,4]]},"64":{"position":[[1016,4]]},"67":{"position":[[1621,4]]},"74":{"position":[[82,4]]},"81":{"position":[[292,4],[452,4],[563,4],[2246,4]]},"82":{"position":[[57,4],[601,4]]},"88":{"position":[[431,4]]},"97":{"position":[[489,4]]},"98":{"position":[[367,4],[527,4]]},"114":{"position":[[836,4]]},"115":{"position":[[49,4]]},"122":{"position":[[205,4],[1027,4]]},"161":{"position":[[250,4]]},"162":{"position":[[1446,4]]},"163":{"position":[[162,4]]},"198":{"position":[[428,4]]},"207":{"position":[[548,4]]},"208":{"position":[[1200,5],[1290,4]]},"221":{"position":[[1178,4]]},"222":{"position":[[423,4]]},"223":{"position":[[389,4]]},"224":{"position":[[442,4]]},"237":{"position":[[1080,4]]},"239":{"position":[[989,4]]},"254":{"position":[[2462,4]]},"259":{"position":[[916,4],[2497,4]]},"281":{"position":[[3182,4]]},"314":{"position":[[2003,4]]},"326":{"position":[[808,4]]},"329":{"position":[[404,4],[444,4],[510,4],[637,4]]},"373":{"position":[[285,5]]},"417":{"position":[[376,4]]},"438":{"position":[[376,4]]},"502":{"position":[[836,4]]},"534":{"position":[[981,4]]},"545":{"position":[[376,4]]},"556":{"position":[[359,5],[422,4]]},"640":{"position":[[261,4]]},"659":{"position":[[44,4]]},"660":{"position":[[104,4]]},"723":{"position":[[149,4]]},"757":{"position":[[2513,4]]},"760":{"position":[[129,4]]},"762":{"position":[[422,4]]},"763":{"position":[[145,4]]},"764":{"position":[[316,4]]},"770":{"position":[[2513,4]]},"773":{"position":[[129,4]]},"775":{"position":[[422,4]]},"776":{"position":[[145,4]]},"777":{"position":[[316,4]]},"782":{"position":[[150,4]]},"797":{"position":[[2521,4]]},"800":{"position":[[129,4]]},"802":{"position":[[422,4]]},"803":{"position":[[145,4]]},"804":{"position":[[314,4]]},"812":{"position":[[2521,4]]},"815":{"position":[[129,4]]},"817":{"position":[[422,4]]},"818":{"position":[[145,4]]},"819":{"position":[[314,4]]},"828":{"position":[[2521,4]]},"831":{"position":[[129,4]]},"833":{"position":[[422,4]]},"834":{"position":[[145,4]]},"835":{"position":[[314,4]]},"879":{"position":[[193,4]]},"1021":{"position":[[1413,4]]},"1253":{"position":[[150,4]]},"1298":{"position":[[389,4]]},"1322":{"position":[[423,4]]},"1335":{"position":[[423,4]]},"1346":{"position":[[389,4]]},"1391":{"position":[[272,4]]},"1437":{"position":[[161,4],[896,4]]},"1438":{"position":[[205,4],[460,4]]},"1439":{"position":[[188,4]]},"1440":{"position":[[15,4]]},"1465":{"position":[[81,5]]},"1467":{"position":[[2030,4]]}},"keywords":{}}],["sudo",{"_index":878,"title":{},"content":{"58":{"position":[[323,4],[453,4],[499,4],[632,4]]},"169":{"position":[[564,4],[694,4],[743,4],[876,4]]}},"keywords":{}}],["suffic",{"_index":4643,"title":{},"content":{"761":{"position":[[515,7]]},"774":{"position":[[515,7]]},"801":{"position":[[521,7]]},"816":{"position":[[521,7]]},"832":{"position":[[521,7]]}},"keywords":{}}],["suffici",{"_index":2275,"title":{},"content":{"209":{"position":[[1721,10]]},"280":{"position":[[137,10]]},"480":{"position":[[212,11]]},"515":{"position":[[280,10]]},"879":{"position":[[1337,11]]}},"keywords":{}}],["suffix",{"_index":406,"title":{},"content":{"13":{"position":[[1193,7]]},"14":{"position":[[1108,6]]},"82":{"position":[[3744,6],[3958,7],[4008,7],[4057,6],[4270,6],[5014,6]]},"208":{"position":[[1434,6]]},"548":{"position":[[686,6]]},"1206":{"position":[[1013,7]]}},"keywords":{}}],["suggest",{"_index":1436,"title":{},"content":{"99":{"position":[[827,7]]},"762":{"position":[[188,8]]},"775":{"position":[[188,8]]},"802":{"position":[[188,8]]},"817":{"position":[[188,8]]},"833":{"position":[[188,8]]}},"keywords":{}}],["suit",{"_index":1620,"title":{},"content":{"114":{"position":[[771,6]]},"324":{"position":[[896,6]]},"331":{"position":[[476,6]]},"975":{"position":[[168,6]]}},"keywords":{}}],["suitabl",{"_index":1864,"title":{},"content":{"157":{"position":[[72,8]]},"366":{"position":[[710,8],[1042,8]]},"477":{"position":[[518,8]]},"480":{"position":[[496,8],[1408,8]]},"598":{"position":[[482,8]]},"821":{"position":[[1212,8]]},"903":{"position":[[736,8],[1068,8]]},"915":{"position":[[736,8],[1068,8]]},"930":{"position":[[736,8],[1068,8]]},"963":{"position":[[890,8],[1222,8]]},"1182":{"position":[[443,8]]},"1191":{"position":[[445,8]]},"1262":{"position":[[445,8]]},"1389":{"position":[[444,8]]}},"keywords":{}}],["suiteanalyt",{"_index":4727,"title":{"837":{"position":[[9,14]]},"845":{"position":[[0,14]]},"846":{"position":[[0,14]]}},"content":{"843":{"position":[[274,14]]},"846":{"position":[[14,14]]},"848":{"position":[[194,14]]},"849":{"position":[[730,14],[849,14],[2488,14],[3002,14]]}},"keywords":{}}],["suiteanalytics_data_sourc",{"_index":4750,"title":{},"content":{"842":{"position":[[312,27]]},"843":{"position":[[300,27]]}},"keywords":{}}],["suitecloud",{"_index":4817,"title":{},"content":{"849":{"position":[[457,10]]}},"keywords":{}}],["suiteql",{"_index":4807,"title":{"845":{"position":[[18,7]]},"847":{"position":[[0,7]]}},"content":{"849":{"position":[[587,7],[1435,7]]}},"keywords":{}}],["suitetalk",{"_index":4806,"title":{"844":{"position":[[9,9]]}},"content":{"849":{"position":[[614,9]]}},"keywords":{}}],["sum",{"_index":1611,"title":{"1466":{"position":[[0,3]]}},"content":{"114":{"position":[[270,7]]},"115":{"position":[[753,7],[1474,7]]},"121":{"position":[[1093,4]]},"132":{"position":[[355,3],[453,7],[613,7]]},"164":{"position":[[503,4],[555,3]]},"166":{"position":[[463,3]]},"183":{"position":[[1813,3],[2036,3],[3619,3]]},"254":{"position":[[408,3],[460,3],[1476,3],[1528,3],[1921,4],[3798,3]]},"281":{"position":[[1843,3],[1988,7],[2162,3]]},"1140":{"position":[[922,3]]},"1316":{"position":[[922,3]]},"1340":{"position":[[922,3]]},"1351":{"position":[[922,3]]},"1379":{"position":[[4025,3]]},"1403":{"position":[[4025,3]]},"1414":{"position":[[4025,3]]},"1431":{"position":[[945,3]]},"1440":{"position":[[530,3],[622,3]]},"1465":{"position":[[787,4],[802,7],[970,3],[1040,3],[1115,3],[1239,4],[1289,4],[1557,4]]},"1466":{"position":[[0,3],[4,3],[200,3],[346,3],[407,3]]},"1467":{"position":[[760,7],[814,3],[875,3]]},"1476":{"position":[[1405,3]]},"1477":{"position":[[1232,6],[1329,3],[3451,4],[3733,4],[3824,3]]}},"keywords":{}}],["summar",{"_index":5910,"title":{},"content":{"1243":{"position":[[585,9]]}},"keywords":{}}],["summari",{"_index":3735,"title":{},"content":{"443":{"position":[[310,7]]}},"keywords":{}}],["sunday",{"_index":6536,"title":{},"content":{"1452":{"position":[[1454,7],[4396,7]]}},"keywords":{}}],["supabas",{"_index":5122,"title":{"961":{"position":[[0,8]]}},"content":{"962":{"position":[[29,8]]},"963":{"position":[[15,8],[73,8],[145,8]]},"964":{"position":[[13,8],[410,8],[789,8]]}},"keywords":{}}],["super",{"_index":4372,"title":{},"content":{"645":{"position":[[240,5]]},"652":{"position":[[240,5]]},"1292":{"position":[[6055,5]]},"1306":{"position":[[6055,5]]},"1329":{"position":[[6055,5]]}},"keywords":{}}],["supersecret",{"_index":6270,"title":{},"content":{"1357":{"position":[[120,11]]}},"keywords":{}}],["supersed",{"_index":740,"title":{},"content":{"42":{"position":[[477,10]]}},"keywords":{}}],["superus",{"_index":5034,"title":{},"content":{"917":{"position":[[115,9]]},"965":{"position":[[115,9]]}},"keywords":{}}],["supplement",{"_index":132,"title":{},"content":{"3":{"position":[[753,12],[992,12]]},"122":{"position":[[1792,10]]},"286":{"position":[[239,12]]},"329":{"position":[[539,13]]},"864":{"position":[[1412,12],[1481,12]]}},"keywords":{}}],["supplementari",{"_index":2796,"title":{},"content":{"267":{"position":[[1643,13]]}},"keywords":{}}],["suppli",{"_index":3440,"title":{},"content":{"374":{"position":[[55,6]]},"385":{"position":[[676,9]]},"432":{"position":[[968,6],[1063,6],[1132,6]]},"513":{"position":[[118,9]]},"988":{"position":[[119,6]]},"1003":{"position":[[119,6]]},"1227":{"position":[[264,6]]},"1289":{"position":[[1285,6]]},"1298":{"position":[[1117,6]]},"1303":{"position":[[996,6]]},"1310":{"position":[[606,6]]},"1322":{"position":[[1504,6]]},"1335":{"position":[[1152,6]]},"1346":{"position":[[1118,6]]}},"keywords":{}}],["support",{"_index":616,"title":{"95":{"position":[[0,9]]},"353":{"position":[[0,9]]},"374":{"position":[[0,9]]},"381":{"position":[[0,9]]},"421":{"position":[[0,9]]},"427":{"position":[[0,9]]},"443":{"position":[[0,9]]},"451":{"position":[[0,9]]},"457":{"position":[[0,9]]},"463":{"position":[[0,9]]},"469":{"position":[[0,9]]},"499":{"position":[[0,9]]},"506":{"position":[[0,9]]},"512":{"position":[[0,9]]},"520":{"position":[[0,9]]},"529":{"position":[[0,9]]},"537":{"position":[[0,9]]},"550":{"position":[[0,9]]},"568":{"position":[[0,9]]},"580":{"position":[[0,9]]},"605":{"position":[[0,9]]},"622":{"position":[[0,9]]},"628":{"position":[[0,9]]},"634":{"position":[[0,9]]},"642":{"position":[[0,9]]},"649":{"position":[[0,9]]},"667":{"position":[[0,9]]},"682":{"position":[[0,9]]},"697":{"position":[[0,9]]},"703":{"position":[[0,9]]},"709":{"position":[[0,9]]},"715":{"position":[[0,9]]},"729":{"position":[[0,9]]},"738":{"position":[[0,9]]},"744":{"position":[[0,9]]},"788":{"position":[[0,9]]},"838":{"position":[[0,9]]},"854":{"position":[[0,9]]},"882":{"position":[[0,9]]},"888":{"position":[[0,9]]},"899":{"position":[[0,9]]},"902":{"position":[[0,9]]},"914":{"position":[[0,9]]},"929":{"position":[[0,9]]},"956":{"position":[[0,9]]},"962":{"position":[[0,9]]},"979":{"position":[[0,9]]},"985":{"position":[[0,9]]},"994":{"position":[[0,9]]},"1000":{"position":[[0,9]]},"1012":{"position":[[0,9]]},"1025":{"position":[[0,9]]},"1039":{"position":[[0,9]]},"1049":{"position":[[0,9]]},"1057":{"position":[[0,9]]},"1065":{"position":[[0,9]]},"1073":{"position":[[0,9]]},"1080":{"position":[[0,9]]},"1096":{"position":[[0,9]]},"1099":{"position":[[0,9]]},"1104":{"position":[[0,9]]},"1110":{"position":[[0,9]]},"1127":{"position":[[8,7]]},"1128":{"position":[[0,9]]}},"content":{"26":{"position":[[520,8]]},"34":{"position":[[662,7]]},"38":{"position":[[478,9]]},"53":{"position":[[6,8],[508,9]]},"68":{"position":[[1609,10]]},"72":{"position":[[712,7]]},"83":{"position":[[1162,8]]},"84":{"position":[[927,8]]},"95":{"position":[[270,8]]},"104":{"position":[[262,7]]},"114":{"position":[[714,7]]},"125":{"position":[[1321,7]]},"133":{"position":[[105,8]]},"138":{"position":[[829,10]]},"142":{"position":[[800,10]]},"162":{"position":[[302,7]]},"169":{"position":[[390,10]]},"175":{"position":[[213,7]]},"179":{"position":[[619,10]]},"191":{"position":[[1951,7]]},"193":{"position":[[594,9]]},"197":{"position":[[649,8]]},"198":{"position":[[587,8],[705,8]]},"199":{"position":[[293,8]]},"223":{"position":[[846,8]]},"240":{"position":[[1912,7]]},"278":{"position":[[709,9]]},"280":{"position":[[994,8]]},"320":{"position":[[92,8],[878,8],[1772,7]]},"321":{"position":[[1025,7]]},"325":{"position":[[670,8]]},"332":{"position":[[101,8]]},"353":{"position":[[23,8]]},"364":{"position":[[9,8],[3632,7]]},"366":{"position":[[1172,7]]},"370":{"position":[[1807,8]]},"374":{"position":[[8,8],[146,8]]},"379":{"position":[[195,7],[856,10],[1064,8],[1240,8]]},"381":{"position":[[34,10]]},"419":{"position":[[37,7],[1089,8],[1143,7]]},"421":{"position":[[34,9]]},"427":{"position":[[16,8],[295,7],[345,7]]},"429":{"position":[[451,8],[1346,9]]},"436":{"position":[[414,9]]},"440":{"position":[[53,7],[1105,8],[1159,7]]},"443":{"position":[[34,10]]},"451":{"position":[[34,9]]},"457":{"position":[[34,9]]},"463":{"position":[[34,9]]},"490":{"position":[[29,7]]},"496":{"position":[[232,7]]},"499":{"position":[[145,10],[232,10]]},"506":{"position":[[34,10]]},"512":{"position":[[34,10]]},"513":{"position":[[261,9]]},"515":{"position":[[305,7]]},"522":{"position":[[268,9]]},"529":{"position":[[246,10]]},"530":{"position":[[268,9]]},"534":{"position":[[1524,7]]},"547":{"position":[[38,7],[1090,8],[1145,7]]},"550":{"position":[[34,10]]},"551":{"position":[[260,9]]},"569":{"position":[[292,9]]},"574":{"position":[[656,9],[680,9]]},"580":{"position":[[34,10]]},"585":{"position":[[476,10]]},"593":{"position":[[555,8]]},"603":{"position":[[136,7]]},"605":{"position":[[34,10]]},"607":{"position":[[291,9]]},"614":{"position":[[275,9]]},"622":{"position":[[34,9]]},"628":{"position":[[34,9]]},"634":{"position":[[137,10],[224,10]]},"635":{"position":[[94,9],[134,7]]},"639":{"position":[[20,7]]},"640":{"position":[[125,9]]},"649":{"position":[[157,9],[537,9]]},"650":{"position":[[241,9]]},"655":{"position":[[360,9]]},"663":{"position":[[29,7]]},"667":{"position":[[34,9]]},"678":{"position":[[29,7]]},"682":{"position":[[34,9]]},"693":{"position":[[29,7]]},"697":{"position":[[34,9]]},"709":{"position":[[34,9]]},"715":{"position":[[34,10]]},"716":{"position":[[277,9]]},"731":{"position":[[234,9]]},"744":{"position":[[34,9]]},"760":{"position":[[288,10],[558,7],[695,10],[895,7]]},"773":{"position":[[288,10],[558,7],[695,10],[895,7]]},"788":{"position":[[16,8]]},"800":{"position":[[288,10],[558,7],[695,10],[895,7]]},"815":{"position":[[288,10],[558,7],[695,10],[895,7]]},"821":{"position":[[512,7]]},"831":{"position":[[288,10],[558,7],[695,10],[895,7]]},"847":{"position":[[23,9],[88,9]]},"854":{"position":[[34,10]]},"855":{"position":[[354,9]]},"872":{"position":[[58,9],[108,9]]},"879":{"position":[[385,10]]},"882":{"position":[[34,9]]},"888":{"position":[[34,9]]},"899":{"position":[[32,8]]},"902":{"position":[[16,8]]},"910":{"position":[[401,7]]},"912":{"position":[[528,7]]},"914":{"position":[[16,8]]},"919":{"position":[[648,7]]},"926":{"position":[[401,7]]},"929":{"position":[[16,8]]},"937":{"position":[[401,7]]},"953":{"position":[[401,7]]},"956":{"position":[[34,9]]},"962":{"position":[[16,8]]},"964":{"position":[[189,7]]},"971":{"position":[[401,7]]},"977":{"position":[[798,7]]},"979":{"position":[[34,9]]},"994":{"position":[[34,9]]},"1012":{"position":[[34,9]]},"1023":{"position":[[18,7],[1070,8],[1126,7]]},"1039":{"position":[[159,8]]},"1049":{"position":[[85,8]]},"1057":{"position":[[88,8]]},"1065":{"position":[[34,10]]},"1073":{"position":[[34,9]]},"1080":{"position":[[34,10]]},"1087":{"position":[[38,8]]},"1089":{"position":[[170,10]]},"1096":{"position":[[50,8]]},"1099":{"position":[[34,9]]},"1104":{"position":[[34,9]]},"1107":{"position":[[148,7]]},"1110":{"position":[[34,9]]},"1128":{"position":[[34,9]]},"1129":{"position":[[59,7]]},"1132":{"position":[[259,7]]},"1133":{"position":[[842,7]]},"1136":{"position":[[325,7]]},"1138":{"position":[[1098,8]]},"1149":{"position":[[354,10]]},"1153":{"position":[[16,8]]},"1158":{"position":[[16,8]]},"1162":{"position":[[1060,8]]},"1164":{"position":[[771,10]]},"1165":{"position":[[174,8]]},"1181":{"position":[[16,8]]},"1182":{"position":[[16,8]]},"1190":{"position":[[16,8]]},"1191":{"position":[[16,8]]},"1199":{"position":[[16,8]]},"1203":{"position":[[452,9]]},"1208":{"position":[[47,7]]},"1227":{"position":[[53,9]]},"1228":{"position":[[42,9]]},"1243":{"position":[[1302,9]]},"1256":{"position":[[16,8]]},"1262":{"position":[[16,8]]},"1271":{"position":[[16,8]]},"1272":{"position":[[142,8]]},"1276":{"position":[[10,8]]},"1282":{"position":[[168,8],[283,10]]},"1288":{"position":[[47,8],[257,10]]},"1290":{"position":[[16,8]]},"1298":{"position":[[846,8]]},"1304":{"position":[[16,8]]},"1310":{"position":[[178,8],[298,10]]},"1315":{"position":[[16,8]]},"1327":{"position":[[16,8]]},"1339":{"position":[[16,8]]},"1346":{"position":[[846,8]]},"1350":{"position":[[16,8]]},"1356":{"position":[[337,9]]},"1369":{"position":[[25,7]]},"1378":{"position":[[16,8]]},"1383":{"position":[[1899,7]]},"1388":{"position":[[16,8]]},"1389":{"position":[[16,8]]},"1402":{"position":[[16,8]]},"1413":{"position":[[16,8]]},"1422":{"position":[[16,8]]},"1426":{"position":[[369,10]]},"1430":{"position":[[16,8]]},"1435":{"position":[[811,8]]},"1439":{"position":[[393,7]]},"1459":{"position":[[658,8]]},"1461":{"position":[[627,7]]}},"keywords":{}}],["support:dev",{"_index":3391,"title":{},"content":{"364":{"position":[[3694,11]]},"1134":{"position":[[97,11]]}},"keywords":{}}],["support@estuary.dev",{"_index":2034,"title":{},"content":{"174":{"position":[[346,19]]},"490":{"position":[[128,19]]},"603":{"position":[[188,19]]},"663":{"position":[[128,19]]},"678":{"position":[[128,19]]},"693":{"position":[[128,19]]}},"keywords":{}}],["supported.a",{"_index":5513,"title":{},"content":{"1136":{"position":[[225,11]]}},"keywords":{}}],["supported.at",{"_index":6254,"title":{},"content":{"1309":{"position":[[225,12]]},"1332":{"position":[[225,12]]},"1343":{"position":[[225,12]]}},"keywords":{}}],["supported.maco",{"_index":1978,"title":{},"content":{"169":{"position":[[323,15]]}},"keywords":{}}],["supportedth",{"_index":5967,"title":{},"content":{"1281":{"position":[[135,12]]},"1295":{"position":[[135,12]]},"1319":{"position":[[135,12]]},"1372":{"position":[[135,12]]},"1396":{"position":[[135,12]]},"1406":{"position":[[135,12]]}},"keywords":{}}],["supportsjson",{"_index":1892,"title":{},"content":{"161":{"position":[[153,12]]}},"keywords":{}}],["suppos",{"_index":1057,"title":{},"content":{"71":{"position":[[250,7]]},"82":{"position":[[1325,7]]},"87":{"position":[[224,7]]},"121":{"position":[[1225,7]]},"128":{"position":[[343,7]]},"164":{"position":[[969,7]]}},"keywords":{}}],["suppressionsuppress",{"_index":5137,"title":{},"content":{"979":{"position":[[147,22]]}},"keywords":{}}],["sur",{"_index":1980,"title":{},"content":{"169":{"position":[[347,4]]}},"keywords":{}}],["sure",{"_index":1916,"title":{},"content":{"162":{"position":[[771,4],[2074,4]]},"166":{"position":[[652,4]]},"172":{"position":[[190,4]]},"173":{"position":[[958,4]]},"202":{"position":[[159,4]]},"203":{"position":[[30,4]]},"204":{"position":[[211,4]]},"206":{"position":[[750,4]]},"212":{"position":[[228,4]]},"232":{"position":[[886,4],[975,4]]},"237":{"position":[[563,4]]},"242":{"position":[[108,4]]},"243":{"position":[[222,4]]},"253":{"position":[[318,4]]},"255":{"position":[[1063,4]]},"259":{"position":[[435,4],[2129,4]]},"309":{"position":[[553,4]]},"313":{"position":[[318,4]]},"316":{"position":[[1388,4]]},"375":{"position":[[230,4]]},"385":{"position":[[708,4]]},"430":{"position":[[216,4]]},"478":{"position":[[486,4]]},"500":{"position":[[29,4]]},"548":{"position":[[477,4]]},"554":{"position":[[389,4]]},"562":{"position":[[29,4]]},"599":{"position":[[486,4]]},"840":{"position":[[640,4],[1494,4]]},"849":{"position":[[1115,4],[2385,4]]},"922":{"position":[[1699,4]]},"944":{"position":[[93,4]]},"964":{"position":[[445,4]]},"1008":{"position":[[874,4],[1596,4]]},"1032":{"position":[[1938,4]]},"1047":{"position":[[772,4]]},"1055":{"position":[[772,4]]},"1063":{"position":[[772,4]]},"1160":{"position":[[279,4]]},"1383":{"position":[[221,4]]},"1388":{"position":[[621,4]]},"1472":{"position":[[369,4]]}},"keywords":{}}],["surfac",{"_index":1871,"title":{},"content":{"158":{"position":[[768,9]]}},"keywords":{}}],["survey",{"_index":5263,"title":{"1064":{"position":[[0,6]]}},"content":{"1070":{"position":[[791,6],[805,6],[827,7]]},"1071":{"position":[[335,7]]}},"keywords":{}}],["survey_id",{"_index":5274,"title":{},"content":{"1070":{"position":[[779,11]]}},"keywords":{}}],["surveymonkey",{"_index":3384,"title":{},"content":{"364":{"position":[[3408,12]]},"1066":{"position":[[28,12]]},"1067":{"position":[[17,12],[168,12],[294,12],[473,12]]},"1068":{"position":[[5,12]]},"1069":{"position":[[250,12]]},"1070":{"position":[[370,12],[476,12],[594,12],[1039,12]]}},"keywords":{}}],["surveymonkey:dev",{"_index":3385,"title":{},"content":{"364":{"position":[[3467,16]]},"1071":{"position":[[159,16]]}},"keywords":{}}],["surveyssurvey",{"_index":5265,"title":{},"content":{"1065":{"position":[[46,13]]}},"keywords":{}}],["surveysview",{"_index":5269,"title":{},"content":{"1067":{"position":[[109,11]]}},"keywords":{}}],["suspect",{"_index":5016,"title":{},"content":{"910":{"position":[[36,7]]},"926":{"position":[[36,7]]},"937":{"position":[[36,7]]},"953":{"position":[[36,7]]},"971":{"position":[[36,7]]}},"keywords":{}}],["suspend",{"_index":2247,"title":{},"content":{"208":{"position":[[441,7]]},"240":{"position":[[3603,9]]},"1292":{"position":[[6105,7]]},"1306":{"position":[[6105,7]]},"1329":{"position":[[6105,7]]},"1388":{"position":[[415,7]]}},"keywords":{}}],["swagger",{"_index":3856,"title":{},"content":{"486":{"position":[[96,7]]},"658":{"position":[[96,7]]},"674":{"position":[[96,7]]},"689":{"position":[[96,7]]}},"keywords":{}}],["swap",{"_index":6218,"title":{},"content":{"1292":{"position":[[6113,5]]},"1306":{"position":[[6113,5]]},"1329":{"position":[[6113,5]]}},"keywords":{}}],["switch",{"_index":1757,"title":{},"content":{"135":{"position":[[974,6]]},"170":{"position":[[100,6]]},"496":{"position":[[256,10]]},"767":{"position":[[1675,6]]},"792":{"position":[[1617,6]]},"824":{"position":[[1739,6]]},"1292":{"position":[[6161,8]]},"1306":{"position":[[6161,8]]},"1329":{"position":[[6161,8]]}},"keywords":{}}],["sy",{"_index":4720,"title":{},"content":{"797":{"position":[[2468,3]]},"812":{"position":[[2468,3]]},"828":{"position":[[2468,3]]}},"keywords":{}}],["symbol",{"_index":3441,"title":{"1019":{"position":[[19,8]]}},"content":{"374":{"position":[[72,7],[157,7],[264,7],[398,7]]},"377":{"position":[[801,8],[1585,8],[1594,7],[1626,7]]},"378":{"position":[[221,8]]},"379":{"position":[[33,7],[136,8],[226,7]]},"1019":{"position":[[173,8],[235,8],[336,8]]},"1020":{"position":[[579,8],[662,8]]}},"keywords":{}}],["symmetr",{"_index":5552,"title":{},"content":{"1140":{"position":[[964,9]]},"1316":{"position":[[964,9]]},"1340":{"position":[[964,9]]},"1351":{"position":[[964,9]]},"1379":{"position":[[4075,9]]},"1403":{"position":[[4075,9]]},"1414":{"position":[[4075,9]]},"1431":{"position":[[987,9]]}},"keywords":{}}],["sync",{"_index":714,"title":{"1153":{"position":[[0,4]]},"1181":{"position":[[0,4]]},"1190":{"position":[[0,4]]},"1388":{"position":[[0,4]]},"1422":{"position":[[0,4]]},"1450":{"position":[[16,4]]},"1451":{"position":[[29,4]]},"1452":{"position":[[14,4]]},"1453":{"position":[[10,6]]}},"content":{"40":{"position":[[134,4]]},"126":{"position":[[358,4]]},"264":{"position":[[316,4]]},"351":{"position":[[468,4]]},"359":{"position":[[446,4]]},"370":{"position":[[2169,4]]},"387":{"position":[[1469,4]]},"402":{"position":[[807,6]]},"408":{"position":[[678,4]]},"417":{"position":[[199,4],[253,5]]},"424":{"position":[[501,4]]},"432":{"position":[[1290,4]]},"438":{"position":[[199,4],[253,5]]},"448":{"position":[[1354,4]]},"454":{"position":[[690,4]]},"460":{"position":[[707,4]]},"466":{"position":[[171,7],[414,4]]},"477":{"position":[[4,4]]},"496":{"position":[[684,4]]},"502":{"position":[[659,4],[713,5]]},"509":{"position":[[680,4]]},"517":{"position":[[1658,7],[2202,4],[2819,7],[4115,4]]},"534":{"position":[[1830,4]]},"537":{"position":[[31,4]]},"545":{"position":[[199,4],[253,5]]},"556":{"position":[[2332,4]]},"573":{"position":[[680,4],[1401,4]]},"584":{"position":[[602,4],[1174,4],[1464,4]]},"595":{"position":[[951,5]]},"598":{"position":[[4,4]]},"611":{"position":[[738,4],[1333,4]]},"619":{"position":[[710,4]]},"625":{"position":[[313,4]]},"631":{"position":[[641,4]]},"646":{"position":[[872,5]]},"654":{"position":[[925,4]]},"670":{"position":[[801,4]]},"685":{"position":[[613,4]]},"700":{"position":[[452,4]]},"703":{"position":[[31,4]]},"706":{"position":[[451,4]]},"712":{"position":[[643,4]]},"720":{"position":[[942,4]]},"735":{"position":[[516,4]]},"738":{"position":[[31,4]]},"741":{"position":[[628,4]]},"747":{"position":[[1011,4],[1511,4]]},"757":{"position":[[2120,4]]},"770":{"position":[[2120,4]]},"797":{"position":[[2127,4]]},"812":{"position":[[2127,4]]},"828":{"position":[[2127,4]]},"851":{"position":[[732,4]]},"859":{"position":[[861,4],[871,4]]},"885":{"position":[[763,4]]},"897":{"position":[[407,4]]},"907":{"position":[[1574,4]]},"923":{"position":[[1574,4]]},"934":{"position":[[1574,4]]},"950":{"position":[[1574,4]]},"959":{"position":[[508,4]]},"968":{"position":[[1574,4]]},"974":{"position":[[171,4]]},"975":{"position":[[295,5]]},"982":{"position":[[510,4]]},"997":{"position":[[284,5],[476,4]]},"1006":{"position":[[77,5],[241,6]]},"1009":{"position":[[1773,4]]},"1015":{"position":[[563,4]]},"1021":{"position":[[1225,4],[1279,5]]},"1025":{"position":[[31,4]]},"1026":{"position":[[87,5]]},"1028":{"position":[[513,4]]},"1070":{"position":[[1124,4]]},"1076":{"position":[[906,4]]},"1085":{"position":[[936,7],[1492,4]]},"1092":{"position":[[513,7]]},"1094":{"position":[[578,4]]},"1101":{"position":[[418,4]]},"1107":{"position":[[533,4]]},"1113":{"position":[[607,4]]},"1133":{"position":[[1329,4]]},"1153":{"position":[[52,4]]},"1181":{"position":[[52,4]]},"1186":{"position":[[517,4]]},"1190":{"position":[[52,4]]},"1388":{"position":[[52,4],[743,4]]},"1422":{"position":[[52,4]]},"1451":{"position":[[133,4],[570,4]]},"1452":{"position":[[93,4],[228,4],[290,4],[618,4],[738,4],[818,4],[958,4],[1036,4],[1176,4],[1231,4],[1788,4],[2110,4],[2257,4],[2318,7],[2354,4],[2489,4],[2638,4],[2670,4],[2896,4],[2959,5],[3008,4],[3033,4],[3431,5],[3556,4],[3605,4],[3632,4],[3664,4],[3772,4],[3880,4],[3911,4],[3937,4],[3969,7],[4056,4],[4081,4],[4291,4],[4330,4],[4388,4],[4461,4]]},"1453":{"position":[[31,5],[431,4],[604,4],[959,4],[1609,4]]}},"keywords":{}}],["sync'd",{"_index":6554,"title":{},"content":{"1452":{"position":[[3820,6]]}},"keywords":{}}],["sync.an",{"_index":5386,"title":{},"content":{"1105":{"position":[[76,7]]}},"keywords":{}}],["synchron",{"_index":1710,"title":{"126":{"position":[[23,11]]}},"content":{"196":{"position":[[284,12]]},"197":{"position":[[758,16]]},"208":{"position":[[234,13]]},"209":{"position":[[854,12]]},"211":{"position":[[179,13],[584,16]]},"233":{"position":[[291,12]]},"975":{"position":[[179,13]]},"1437":{"position":[[315,11]]},"1453":{"position":[[1538,11]]}},"keywords":{}}],["syncmod",{"_index":851,"title":{},"content":{"56":{"position":[[1956,8],[2021,9],[2129,9]]},"351":{"position":[[458,9]]},"359":{"position":[[436,9]]},"360":{"position":[[200,9]]},"370":{"position":[[2159,9]]},"371":{"position":[[1355,9]]},"387":{"position":[[1459,9]]},"388":{"position":[[458,9]]},"408":{"position":[[668,9]]},"424":{"position":[[491,9]]},"425":{"position":[[234,9],[315,9],[395,9],[475,9],[570,9]]},"432":{"position":[[1280,9]]},"433":{"position":[[368,9],[764,9]]},"448":{"position":[[1344,9]]},"449":{"position":[[439,9]]},"454":{"position":[[680,9]]},"455":{"position":[[283,9]]},"460":{"position":[[697,9]]},"461":{"position":[[280,9]]},"466":{"position":[[404,9]]},"467":{"position":[[216,9]]},"473":{"position":[[318,9]]},"496":{"position":[[674,9]]},"497":{"position":[[243,9]]},"509":{"position":[[670,9]]},"510":{"position":[[208,9]]},"517":{"position":[[4105,9]]},"518":{"position":[[494,9],[573,9],[654,9],[755,9],[864,9],[965,9],[1062,9],[1172,9],[1290,9],[1385,9],[1466,9],[1541,9],[1618,9]]},"527":{"position":[[368,9]]},"534":{"position":[[1820,9]]},"535":{"position":[[383,9]]},"556":{"position":[[2322,9]]},"557":{"position":[[634,9]]},"573":{"position":[[1391,9]]},"575":{"position":[[351,9],[438,9],[542,9],[631,9],[731,9],[816,9],[911,9],[1014,9],[1110,9],[1209,9]]},"584":{"position":[[1454,9]]},"586":{"position":[[373,9],[460,9],[564,9],[653,9],[738,9],[833,9],[929,9],[1028,9]]},"611":{"position":[[1323,9]]},"612":{"position":[[383,9]]},"619":{"position":[[700,9]]},"620":{"position":[[278,9]]},"625":{"position":[[303,9]]},"626":{"position":[[179,9]]},"631":{"position":[[631,9]]},"632":{"position":[[243,9]]},"654":{"position":[[915,9]]},"655":{"position":[[234,9]]},"670":{"position":[[791,9]]},"671":{"position":[[276,9]]},"685":{"position":[[603,9]]},"686":{"position":[[270,9],[348,9],[435,9],[525,9],[618,9],[705,9],[793,9],[891,9],[979,9],[1053,9],[1125,9]]},"700":{"position":[[442,9]]},"701":{"position":[[206,9]]},"706":{"position":[[441,9]]},"707":{"position":[[203,9]]},"712":{"position":[[633,9]]},"713":{"position":[[213,9]]},"720":{"position":[[932,9]]},"721":{"position":[[346,9]]},"735":{"position":[[506,9]]},"736":{"position":[[201,9],[290,9],[384,9]]},"741":{"position":[[618,9]]},"742":{"position":[[271,9]]},"747":{"position":[[1501,9]]},"748":{"position":[[437,9]]},"757":{"position":[[2110,9]]},"758":{"position":[[339,9]]},"770":{"position":[[2110,9]]},"771":{"position":[[339,9]]},"797":{"position":[[2117,9]]},"798":{"position":[[337,9]]},"812":{"position":[[2117,9]]},"813":{"position":[[337,9]]},"828":{"position":[[2117,9]]},"829":{"position":[[337,9]]},"851":{"position":[[722,9]]},"859":{"position":[[851,9]]},"860":{"position":[[294,9]]},"885":{"position":[[753,9]]},"886":{"position":[[301,9]]},"897":{"position":[[397,9]]},"907":{"position":[[1564,9]]},"908":{"position":[[383,9]]},"923":{"position":[[1564,9]]},"924":{"position":[[383,9]]},"934":{"position":[[1564,9]]},"935":{"position":[[383,9]]},"950":{"position":[[1564,9]]},"951":{"position":[[383,9]]},"959":{"position":[[498,9]]},"960":{"position":[[213,9]]},"968":{"position":[[1564,9]]},"969":{"position":[[383,9]]},"982":{"position":[[500,9]]},"983":{"position":[[204,9]]},"997":{"position":[[466,9]]},"998":{"position":[[243,9]]},"1009":{"position":[[1763,9]]},"1010":{"position":[[480,9],[598,9]]},"1015":{"position":[[553,9]]},"1016":{"position":[[331,9]]},"1028":{"position":[[503,9]]},"1029":{"position":[[211,9]]},"1070":{"position":[[1114,9]]},"1071":{"position":[[343,9]]},"1076":{"position":[[896,9]]},"1078":{"position":[[243,9],[337,9],[419,9],[505,9],[611,9],[705,9],[803,9],[902,9],[981,9],[1057,9],[1138,9],[1231,9],[1318,9],[1403,9],[1486,9],[1560,9],[1635,9],[1720,9],[1803,9],[1890,9],[1983,9],[2067,9]]},"1085":{"position":[[1482,9]]},"1086":{"position":[[400,9]]},"1094":{"position":[[568,9]]},"1101":{"position":[[408,9]]},"1102":{"position":[[203,9]]},"1107":{"position":[[523,9]]},"1108":{"position":[[278,9]]},"1113":{"position":[[597,9]]},"1114":{"position":[[264,9]]},"1133":{"position":[[1319,9],[1471,8]]},"1134":{"position":[[308,9],[409,9],[502,9],[605,9],[686,9],[777,9],[887,9],[987,9],[1094,9],[1219,9],[1335,9],[1441,9],[1534,9],[1623,9],[1715,9],[1831,9],[1915,9],[1994,9],[2074,9],[2189,9],[2304,9],[2416,9],[2529,9],[2650,9],[2762,9],[2868,9],[2970,9]]}},"keywords":{}}],["sys.sp_cdc_enable_db",{"_index":5244,"title":{},"content":{"1042":{"position":[[117,21]]},"1043":{"position":[[781,21]]}},"keywords":{}}],["sys.sp_cdc_enable_t",{"_index":5248,"title":{},"content":{"1042":{"position":[[983,23]]},"1043":{"position":[[1647,23]]},"1051":{"position":[[1909,23]]},"1059":{"position":[[1702,23]]}},"keywords":{}}],["sysadmin",{"_index":2144,"title":{},"content":{"191":{"position":[[897,9],[2108,9]]},"240":{"position":[[858,9],[2069,9]]},"1032":{"position":[[762,9]]},"1383":{"position":[[845,9],[2056,9]]}},"keywords":{}}],["system",{"_index":307,"title":{"67":{"position":[[0,6]]},"286":{"position":[[0,6]]}},"content":{"11":{"position":[[442,7],[560,8],[1390,6],[1564,6]]},"13":{"position":[[786,7]]},"20":{"position":[[897,8]]},"32":{"position":[[154,7]]},"35":{"position":[[315,7]]},"36":{"position":[[394,6]]},"37":{"position":[[26,7],[84,7],[143,7],[226,8]]},"38":{"position":[[82,8],[417,7],[668,7]]},"45":{"position":[[80,7]]},"52":{"position":[[137,8]]},"66":{"position":[[335,8]]},"67":{"position":[[309,7],[561,6],[698,6]]},"80":{"position":[[292,6],[578,7]]},"81":{"position":[[2149,8]]},"82":{"position":[[15,7],[588,6]]},"84":{"position":[[81,7],[147,7],[675,7]]},"114":{"position":[[701,7],[852,7]]},"115":{"position":[[595,6]]},"121":{"position":[[127,6],[1784,7],[2044,7]]},"122":{"position":[[15,7]]},"125":{"position":[[92,6],[231,7],[282,7],[569,7],[1158,7],[1171,7]]},"126":{"position":[[44,6],[81,6],[131,6]]},"135":{"position":[[300,7]]},"138":{"position":[[1871,6]]},"140":{"position":[[164,6]]},"142":{"position":[[1917,6]]},"144":{"position":[[645,7]]},"157":{"position":[[38,7],[150,7],[281,7]]},"158":{"position":[[513,7]]},"159":{"position":[[582,8]]},"162":{"position":[[239,7],[262,6],[1392,6],[1479,8],[1537,7]]},"163":{"position":[[822,7]]},"165":{"position":[[140,8],[304,7],[441,6],[502,8]]},"166":{"position":[[97,7]]},"189":{"position":[[977,8],[1516,8],[1572,7],[1712,7]]},"190":{"position":[[534,7]]},"196":{"position":[[276,7],[547,8]]},"197":{"position":[[543,8]]},"207":{"position":[[372,8]]},"211":{"position":[[767,8]]},"213":{"position":[[265,8]]},"216":{"position":[[79,8],[484,6]]},"217":{"position":[[62,7],[170,7],[1031,7],[1869,8]]},"218":{"position":[[580,7]]},"221":{"position":[[130,6]]},"228":{"position":[[1178,6]]},"229":{"position":[[862,6]]},"230":{"position":[[225,7],[1341,7]]},"233":{"position":[[283,7],[554,8]]},"237":{"position":[[185,8],[2679,8],[3324,6]]},"239":{"position":[[2706,7]]},"240":{"position":[[3255,6]]},"259":{"position":[[221,7],[424,7],[883,7],[1910,7],[2118,7],[2464,7]]},"279":{"position":[[421,7]]},"286":{"position":[[0,6],[174,6],[437,8]]},"289":{"position":[[69,7],[92,7],[671,7]]},"300":{"position":[[69,7],[92,7],[611,7]]},"320":{"position":[[431,8]]},"321":{"position":[[114,6],[165,8],[315,8],[408,7],[625,6],[1710,8]]},"322":{"position":[[283,6],[359,6],[446,7],[566,7],[1280,7]]},"323":{"position":[[833,8],[1204,6],[1300,7]]},"325":{"position":[[487,7]]},"326":{"position":[[799,8],[996,8],[1136,8],[1177,6],[1462,8]]},"329":{"position":[[132,8],[396,7]]},"331":{"position":[[226,8]]},"332":{"position":[[320,8]]},"333":{"position":[[326,7]]},"335":{"position":[[91,7]]},"363":{"position":[[78,7],[182,6]]},"370":{"position":[[1546,6]]},"379":{"position":[[1233,6]]},"419":{"position":[[98,8]]},"440":{"position":[[114,8]]},"485":{"position":[[117,6]]},"489":{"position":[[333,7]]},"547":{"position":[[99,8]]},"657":{"position":[[117,6]]},"662":{"position":[[333,7]]},"673":{"position":[[117,6]]},"677":{"position":[[333,7]]},"688":{"position":[[117,6]]},"692":{"position":[[333,7]]},"750":{"position":[[1103,6]]},"754":{"position":[[28,6],[54,6],[295,7]]},"757":{"position":[[472,6],[522,6],[696,6],[2397,6]]},"761":{"position":[[335,6]]},"766":{"position":[[1103,6]]},"770":{"position":[[472,6],[522,6],[696,6],[2397,6]]},"774":{"position":[[335,6]]},"789":{"position":[[1504,6]]},"794":{"position":[[26,6],[52,6],[168,7]]},"797":{"position":[[472,6],[522,6],[696,6],[2402,6]]},"801":{"position":[[341,6]]},"807":{"position":[[1091,6]]},"809":{"position":[[26,6],[52,6],[168,7]]},"812":{"position":[[472,6],[522,6],[696,6],[2402,6]]},"816":{"position":[[341,6]]},"823":{"position":[[1091,6]]},"825":{"position":[[26,6],[52,6],[168,7]]},"828":{"position":[[472,6],[522,6],[696,6],[2402,6]]},"832":{"position":[[341,6]]},"870":{"position":[[69,7]]},"909":{"position":[[317,7],[1166,6]]},"912":{"position":[[1151,6]]},"917":{"position":[[1848,6]]},"925":{"position":[[317,7],[1166,6]]},"936":{"position":[[317,7],[1166,6]]},"952":{"position":[[317,7],[1166,6]]},"965":{"position":[[1848,6]]},"970":{"position":[[317,7],[1166,6]]},"1023":{"position":[[79,8]]},"1138":{"position":[[837,6]]},"1140":{"position":[[1026,6]]},"1208":{"position":[[28,7],[318,7]]},"1233":{"position":[[62,7]]},"1267":{"position":[[512,6],[562,6]]},"1285":{"position":[[534,6],[584,6],[708,6]]},"1286":{"position":[[26,6],[52,6],[197,7]]},"1292":{"position":[[6202,6]]},"1300":{"position":[[534,6],[584,6],[708,6]]},"1301":{"position":[[26,6],[52,6],[197,7]]},"1306":{"position":[[6202,6]]},"1316":{"position":[[1026,6]]},"1324":{"position":[[534,6],[584,6],[708,6]]},"1325":{"position":[[26,6],[52,6],[197,7]]},"1329":{"position":[[6202,6]]},"1340":{"position":[[1026,6]]},"1351":{"position":[[1026,6]]},"1358":{"position":[[221,7]]},"1379":{"position":[[4119,6]]},"1403":{"position":[[4119,6]]},"1414":{"position":[[4119,6]]},"1431":{"position":[[1049,6]]},"1435":{"position":[[574,7],[789,7]]},"1437":{"position":[[589,7]]},"1440":{"position":[[6,8]]},"1447":{"position":[[213,6]]},"1453":{"position":[[918,6],[1248,6],[1368,8]]},"1459":{"position":[[651,6]]},"1461":{"position":[[2790,7],[3261,7],[3313,7]]},"1462":{"position":[[86,7]]},"1470":{"position":[[377,7]]},"1472":{"position":[[67,7]]}},"keywords":{}}],["system.access",{"_index":278,"title":{},"content":{"8":{"position":[[782,13]]}},"keywords":{}}],["system.view",{"_index":1749,"title":{},"content":{"135":{"position":[[467,14]]}},"keywords":{}}],["system_certif",{"_index":3684,"title":{},"content":{"433":{"position":[[188,19],[599,19]]}},"keywords":{}}],["system_tim",{"_index":5557,"title":{},"content":{"1140":{"position":[[1066,11]]},"1316":{"position":[[1066,11]]},"1340":{"position":[[1066,11]]},"1351":{"position":[[1066,11]]},"1431":{"position":[[1089,11]]}},"keywords":{}}],["system_us",{"_index":5560,"title":{},"content":{"1140":{"position":[[1105,11]]},"1316":{"position":[[1105,11]]},"1340":{"position":[[1105,11]]},"1351":{"position":[[1105,11]]},"1379":{"position":[[4164,11]]},"1403":{"position":[[4164,11]]},"1414":{"position":[[4164,11]]},"1431":{"position":[[1128,11]]}},"keywords":{}}],["systema",{"_index":2925,"title":{},"content":{"289":{"position":[[431,7]]},"300":{"position":[[385,7]]}},"keywords":{}}],["systemmodstamp",{"_index":5176,"title":{},"content":{"1010":{"position":[[445,16],[555,16]]}},"keywords":{}}],["t",{"_index":1507,"title":{},"content":{"105":{"position":[[1539,1]]},"221":{"position":[[1247,1]]},"222":{"position":[[492,1]]},"223":{"position":[[458,1],[764,1]]},"224":{"position":[[511,1]]},"250":{"position":[[1471,1]]},"1298":{"position":[[458,1],[764,1]]},"1322":{"position":[[492,1]]},"1335":{"position":[[492,1]]},"1346":{"position":[[458,1],[764,1]]},"1452":{"position":[[4364,2]]}},"keywords":{}}],["t)uesday",{"_index":6558,"title":{},"content":{"1452":{"position":[[4185,10]]}},"keywords":{}}],["t,th",{"_index":6535,"title":{},"content":{"1452":{"position":[[1446,4]]}},"keywords":{}}],["t1",{"_index":1615,"title":{},"content":{"114":{"position":[[364,2]]},"115":{"position":[[820,2]]}},"keywords":{}}],["t1([derivation/shard",{"_index":1527,"title":{},"content":{"107":{"position":[[962,20]]}},"keywords":{}}],["t2",{"_index":1617,"title":{},"content":{"114":{"position":[[405,2]]},"115":{"position":[[839,2]]}},"keywords":{}}],["t2([derivation/shard",{"_index":1528,"title":{},"content":{"107":{"position":[[988,20]]}},"keywords":{}}],["t3",{"_index":1619,"title":{},"content":{"114":{"position":[[446,2]]},"115":{"position":[[856,2]]}},"keywords":{}}],["t[transform",{"_index":1499,"title":{},"content":{"105":{"position":[[1356,18]]}},"keywords":{}}],["tab",{"_index":1021,"title":{"146":{"position":[[9,4]]},"147":{"position":[[5,4]]},"149":{"position":[[9,4]]},"150":{"position":[[5,4]]},"152":{"position":[[9,4]]},"153":{"position":[[5,4]]}},"content":{"68":{"position":[[386,4]]},"137":{"position":[[105,4],[229,4],[378,4]]},"147":{"position":[[15,4]]},"153":{"position":[[15,4]]},"154":{"position":[[252,3],[1178,3],[1587,3],[1770,3],[2007,3],[2129,3]]},"169":{"position":[[1559,4]]},"173":{"position":[[853,4]]},"182":{"position":[[160,4]]},"190":{"position":[[80,3]]},"191":{"position":[[140,4]]},"192":{"position":[[1714,4]]},"207":{"position":[[732,3],[1656,4]]},"217":{"position":[[329,3],[1808,3]]},"218":{"position":[[1661,4]]},"228":{"position":[[337,4]]},"230":{"position":[[550,4]]},"239":{"position":[[1535,3]]},"240":{"position":[[270,3]]},"259":{"position":[[1130,4],[2711,4]]},"263":{"position":[[129,3]]},"264":{"position":[[675,3]]},"267":{"position":[[1967,3]]},"270":{"position":[[229,3]]},"274":{"position":[[527,3]]},"284":{"position":[[38,3]]},"290":{"position":[[306,3]]},"291":{"position":[[1595,4]]},"301":{"position":[[259,3]]},"302":{"position":[[1504,4]]},"339":{"position":[[286,4]]},"340":{"position":[[419,4]]},"419":{"position":[[1767,3]]},"441":{"position":[[376,3]]},"464":{"position":[[171,3],[288,3]]},"487":{"position":[[72,3]]},"504":{"position":[[1396,3]]},"515":{"position":[[588,4]]},"547":{"position":[[1769,3]]},"639":{"position":[[1394,3]]},"709":{"position":[[623,3]]},"726":{"position":[[289,3],[388,4]]},"840":{"position":[[1803,4]]},"849":{"position":[[468,4],[2844,4]]},"947":{"position":[[1271,4]]},"1023":{"position":[[1750,3]]},"1047":{"position":[[513,3]]},"1055":{"position":[[513,3]]},"1063":{"position":[[513,3]]},"1177":{"position":[[385,4]]},"1186":{"position":[[278,4]]},"1448":{"position":[[1001,3]]}},"keywords":{}}],["tab.learn",{"_index":2437,"title":{},"content":{"218":{"position":[[2003,9]]}},"keywords":{}}],["tabclick",{"_index":3521,"title":{},"content":{"395":{"position":[[202,8]]}},"keywords":{}}],["tabl",{"_index":168,"title":{"1159":{"position":[[15,6]]},"1165":{"position":[[0,5]]},"1183":{"position":[[0,5]]}},"content":{"4":{"position":[[443,6],[531,6]]},"8":{"position":[[907,5]]},"11":{"position":[[1437,5],[1467,6]]},"13":{"position":[[960,6],[1755,6]]},"14":{"position":[[628,6],[639,5],[839,5],[1026,5],[1131,5]]},"20":{"position":[[941,5]]},"27":{"position":[[272,6]]},"42":{"position":[[181,6],[257,6]]},"50":{"position":[[119,5]]},"54":{"position":[[321,7]]},"55":{"position":[[391,7]]},"66":{"position":[[375,5]]},"69":{"position":[[666,5],[700,5]]},"71":{"position":[[582,5],[707,6]]},"75":{"position":[[212,6]]},"80":{"position":[[519,6]]},"81":{"position":[[591,5],[1670,7],[1699,5],[1809,6],[1931,6],[2014,6],[2071,6]]},"94":{"position":[[648,5]]},"97":{"position":[[421,6]]},"100":{"position":[[102,7],[395,5],[514,5],[757,6],[969,6],[1215,7]]},"114":{"position":[[100,5]]},"115":{"position":[[531,6]]},"119":{"position":[[417,7]]},"120":{"position":[[2120,7],[2148,5],[2175,6]]},"121":{"position":[[1207,6],[1503,5],[1643,5],[2005,6]]},"122":{"position":[[114,5],[226,5],[495,5],[1225,6]]},"123":{"position":[[790,6]]},"138":{"position":[[31,5],[141,5],[294,5]]},"141":{"position":[[40,5],[91,5],[149,6],[249,5],[604,5]]},"142":{"position":[[39,5],[166,5],[235,5],[407,5]]},"150":{"position":[[99,6],[110,5]]},"154":{"position":[[425,6],[637,5],[660,5],[781,5],[934,6],[1193,5],[1287,5]]},"157":{"position":[[258,5]]},"158":{"position":[[549,5]]},"164":{"position":[[1011,5],[1362,5],[1505,5]]},"180":{"position":[[716,6],[838,5]]},"182":{"position":[[278,5]]},"183":{"position":[[473,6],[1172,6],[3558,6]]},"184":{"position":[[39,5],[730,5],[853,7],[893,5]]},"185":{"position":[[58,5]]},"192":{"position":[[1257,5],[1650,6],[2390,5]]},"198":{"position":[[980,5]]},"208":{"position":[[571,5],[966,6],[1220,6],[1969,6]]},"217":{"position":[[1095,7]]},"218":{"position":[[807,7],[1187,5]]},"230":{"position":[[182,5]]},"232":{"position":[[422,5]]},"236":{"position":[[1994,5],[2026,5],[2149,5],[2965,5],[3327,5],[3435,5],[3633,5],[3728,5]]},"237":{"position":[[509,6],[786,6],[1038,5],[1072,7],[1101,5],[1211,6],[1298,5],[1369,5],[1516,5],[1557,5],[1672,5],[1905,5],[1985,6],[2129,7],[2256,6],[2382,6],[2433,5],[2829,6]]},"238":{"position":[[836,6],[1127,5],[1164,5],[1451,6]]},"240":{"position":[[140,6],[3986,6],[4474,5],[4555,5]]},"259":{"position":[[111,5],[1792,5]]},"263":{"position":[[274,5]]},"268":{"position":[[525,7]]},"278":{"position":[[66,7],[533,7],[661,7],[734,6],[996,5],[1409,6],[1555,6]]},"279":{"position":[[1259,5]]},"280":{"position":[[48,6],[1509,5]]},"281":{"position":[[133,5],[261,5],[2887,8]]},"284":{"position":[[238,6]]},"291":{"position":[[1008,6],[1085,5],[1156,6],[1186,6],[1458,5]]},"292":{"position":[[152,5]]},"295":{"position":[[246,5],[438,5],[612,6]]},"302":{"position":[[1000,6],[1070,5],[1119,5],[1378,5]]},"303":{"position":[[143,5]]},"307":{"position":[[1695,6],[2578,6],[2943,5]]},"308":{"position":[[629,7]]},"309":{"position":[[1207,6],[2015,6],[2526,6],[3133,6]]},"310":{"position":[[141,6]]},"322":{"position":[[1073,5]]},"326":{"position":[[411,7],[500,6],[854,5]]},"332":{"position":[[647,7]]},"344":{"position":[[320,6]]},"366":{"position":[[549,6],[745,6],[767,5],[914,5]]},"367":{"position":[[323,5],[459,6],[558,6],[589,5],[697,5],[787,7]]},"368":{"position":[[110,6],[286,6],[406,7],[466,5]]},"370":{"position":[[193,5],[1114,5],[1323,5],[1345,5],[2093,6],[2131,5]]},"371":{"position":[[1503,5]]},"387":{"position":[[34,5]]},"395":{"position":[[59,6],[130,6],[148,5],[465,6]]},"397":{"position":[[136,7],[248,7],[337,6],[408,5],[462,5],[765,5],[870,5],[897,5],[1032,5],[1128,6]]},"398":{"position":[[338,6],[486,6]]},"402":{"position":[[694,5],[717,5]]},"403":{"position":[[416,6]]},"448":{"position":[[34,5]]},"477":{"position":[[226,6],[284,7]]},"479":{"position":[[501,6],[556,6],[812,6]]},"480":{"position":[[67,5],[253,6],[1021,6],[1430,6],[1749,6]]},"482":{"position":[[223,6]]},"483":{"position":[[527,5],[709,6]]},"534":{"position":[[34,5]]},"556":{"position":[[34,5],[1291,5],[1306,5]]},"574":{"position":[[441,5]]},"611":{"position":[[34,5]]},"660":{"position":[[952,5]]},"685":{"position":[[34,5]]},"703":{"position":[[50,6]]},"720":{"position":[[34,5]]},"738":{"position":[[50,6]]},"750":{"position":[[423,6],[445,5],[625,5],[919,6],[984,7]]},"752":{"position":[[70,6],[82,5],[241,5],[405,7],[462,6],[522,6]]},"753":{"position":[[774,6],[897,5],[1061,7],[1118,6],[1178,6]]},"754":{"position":[[224,6],[952,7],[1099,6]]},"755":{"position":[[110,6],[286,6],[406,7],[466,5]]},"757":{"position":[[774,5],[801,5],[1459,5],[1996,5],[2054,5],[2315,6],[2375,6],[2518,6]]},"758":{"position":[[487,5]]},"760":{"position":[[175,5],[237,5],[476,5],[539,5],[566,5],[614,6],[790,6],[916,5]]},"761":{"position":[[571,5]]},"762":{"position":[[358,5]]},"763":{"position":[[129,5],[474,5]]},"764":{"position":[[658,5]]},"766":{"position":[[423,6],[445,5],[625,5],[919,6],[984,7]]},"767":{"position":[[1826,6],[1877,5]]},"768":{"position":[[110,6],[286,6],[406,7],[466,5]]},"770":{"position":[[774,5],[801,5],[1459,5],[1996,5],[2054,5],[2315,6],[2375,6],[2518,6]]},"771":{"position":[[487,5]]},"773":{"position":[[175,5],[237,5],[476,5],[539,5],[566,5],[614,6],[790,6],[916,5]]},"774":{"position":[[571,5]]},"775":{"position":[[358,5]]},"776":{"position":[[129,5],[474,5]]},"777":{"position":[[658,5]]},"789":{"position":[[411,6],[433,5],[613,5],[734,5],[857,5],[919,5],[1101,5],[1320,6],[1385,7]]},"791":{"position":[[23,6],[35,5],[194,5],[358,7],[415,6],[475,6]]},"792":{"position":[[1766,6],[1817,5]]},"793":{"position":[[745,6],[868,5],[1032,7],[1089,6],[1149,6]]},"794":{"position":[[97,6],[1158,7],[1303,6]]},"795":{"position":[[108,6],[284,6],[404,7],[464,5]]},"797":{"position":[[774,5],[801,5],[1459,5],[2003,5],[2061,5],[2322,6],[2382,6],[2526,6]]},"798":{"position":[[485,5]]},"800":{"position":[[175,5],[237,5],[476,5],[539,5],[566,5],[614,6],[790,6],[916,5]]},"801":{"position":[[577,5]]},"802":{"position":[[358,5]]},"803":{"position":[[129,5],[480,5]]},"804":{"position":[[656,5]]},"805":{"position":[[217,5]]},"807":{"position":[[411,6],[433,5],[613,5],[907,6],[972,7]]},"808":{"position":[[763,6],[814,5],[978,7],[1035,6],[1095,6]]},"809":{"position":[[97,6],[1158,7],[1303,6]]},"810":{"position":[[108,6],[284,6],[404,7],[464,5]]},"812":{"position":[[774,5],[801,5],[1459,5],[2003,5],[2061,5],[2322,6],[2382,6],[2526,6]]},"813":{"position":[[485,5]]},"815":{"position":[[175,5],[237,5],[476,5],[539,5],[566,5],[614,6],[790,6],[916,5]]},"816":{"position":[[577,5]]},"817":{"position":[[358,5]]},"818":{"position":[[129,5],[480,5]]},"819":{"position":[[656,5]]},"820":{"position":[[217,5]]},"821":{"position":[[1019,7]]},"823":{"position":[[411,6],[433,5],[613,5],[907,6],[972,7]]},"824":{"position":[[1888,6],[1939,5]]},"825":{"position":[[97,6],[994,7],[1139,6]]},"826":{"position":[[108,6],[284,6],[404,7],[464,5]]},"828":{"position":[[774,5],[801,5],[1459,5],[2003,5],[2061,5],[2322,6],[2382,6],[2526,6]]},"829":{"position":[[485,5]]},"831":{"position":[[175,5],[237,5],[476,5],[539,5],[566,5],[614,6],[790,6],[916,5]]},"832":{"position":[[577,5]]},"833":{"position":[[358,5]]},"834":{"position":[[129,5],[480,5]]},"835":{"position":[[656,5]]},"836":{"position":[[217,5]]},"838":{"position":[[27,6]]},"842":{"position":[[1949,5],[2306,5],[2772,6],[2900,6],[3018,5],[3065,5],[3287,5],[3447,5]]},"846":{"position":[[103,6],[207,5],[254,5]]},"847":{"position":[[8,6],[66,6]]},"859":{"position":[[34,5]]},"862":{"position":[[178,6]]},"864":{"position":[[360,7],[416,6],[467,5],[566,6],[808,6],[823,5],[1042,6],[1213,5]]},"865":{"position":[[101,7],[203,6]]},"867":{"position":[[575,5],[663,5],[685,5],[1419,5],[1724,6],[1820,6],[2191,6],[2229,5]]},"869":{"position":[[177,5],[546,5],[753,5],[1666,7],[1718,5]]},"870":{"position":[[204,6]]},"872":{"position":[[1,5]]},"874":{"position":[[178,6]]},"876":{"position":[[360,7],[416,6],[467,5],[566,6]]},"877":{"position":[[101,7],[259,6]]},"879":{"position":[[1584,5],[1636,6],[1700,6]]},"903":{"position":[[575,6],[771,6],[793,5],[940,5]]},"904":{"position":[[1427,5],[1559,6],[1658,6],[1689,5],[1797,5],[1995,5],[2086,6],[2229,5],[2277,6]]},"905":{"position":[[113,6],[289,6],[409,7],[469,5]]},"907":{"position":[[897,5],[1106,5],[1128,5],[1498,6],[1536,5]]},"908":{"position":[[531,5]]},"909":{"position":[[87,6]]},"910":{"position":[[197,6]]},"911":{"position":[[77,6],[176,6],[219,7],[291,6],[419,6]]},"912":{"position":[[1083,6]]},"915":{"position":[[575,6],[771,6],[793,5],[940,5]]},"917":{"position":[[566,6],[610,6],[693,6],[1141,6],[1198,5],[1306,5],[1504,5],[1595,6],[1738,5],[1786,6]]},"918":{"position":[[1719,5],[1851,6],[1950,6],[1981,5],[2089,5],[2287,5],[2378,6],[2521,5],[2569,6]]},"919":{"position":[[1103,6],[1147,6],[1224,6],[1667,5],[1749,6],[1793,6],[2036,5],[2144,5],[2342,5]]},"920":{"position":[[113,6],[289,6],[409,7],[469,5]]},"922":{"position":[[2734,7]]},"923":{"position":[[897,5],[1106,5],[1128,5],[1498,6],[1536,5]]},"924":{"position":[[531,5]]},"925":{"position":[[87,6]]},"926":{"position":[[197,6]]},"927":{"position":[[77,6],[176,6],[219,7],[291,6],[419,6]]},"930":{"position":[[575,6],[771,6],[793,5],[940,5]]},"931":{"position":[[1084,5],[1221,6],[1320,6],[1351,5],[1459,5],[1657,5],[1748,6],[1891,5],[1939,6]]},"932":{"position":[[113,6],[289,6],[409,7],[469,5]]},"934":{"position":[[897,5],[1106,5],[1128,5],[1498,6],[1536,5]]},"935":{"position":[[531,5]]},"936":{"position":[[87,6]]},"937":{"position":[[197,6]]},"938":{"position":[[77,6],[176,6],[219,7],[291,6],[419,6]]},"944":{"position":[[55,6],[214,6],[309,6],[354,6],[402,6],[458,6]]},"945":{"position":[[73,6],[165,5],[383,5],[431,6],[516,6],[603,7]]},"947":{"position":[[1007,6],[1180,6]]},"948":{"position":[[113,6],[289,6],[409,7],[469,5]]},"950":{"position":[[897,5],[1106,5],[1128,5],[1498,6],[1536,5]]},"951":{"position":[[531,5]]},"952":{"position":[[87,6]]},"953":{"position":[[197,6]]},"954":{"position":[[77,6],[176,6],[219,7],[291,6],[419,6]]},"963":{"position":[[729,6],[925,6],[947,5],[1094,5]]},"965":{"position":[[566,6],[610,6],[693,6],[1141,6],[1198,5],[1306,5],[1504,5],[1595,6],[1738,5],[1786,6]]},"966":{"position":[[113,6],[289,6],[409,7],[469,5]]},"968":{"position":[[897,5],[1106,5],[1128,5],[1498,6],[1536,5]]},"969":{"position":[[531,5]]},"970":{"position":[[87,6]]},"971":{"position":[[197,6]]},"972":{"position":[[77,6],[176,6],[219,7],[291,6],[419,6]]},"991":{"position":[[34,5]]},"1009":{"position":[[34,5]]},"1025":{"position":[[50,6]]},"1031":{"position":[[106,6],[250,6],[497,7],[541,6],[590,7]]},"1032":{"position":[[1351,6],[1743,6],[1844,6]]},"1034":{"position":[[858,7]]},"1035":{"position":[[56,5],[78,5],[150,5]]},"1036":{"position":[[1009,6]]},"1037":{"position":[[282,6]]},"1040":{"position":[[42,6],[91,5],[169,5],[373,6],[417,6],[487,6],[509,5],[656,5],[756,6],[799,6],[909,5]]},"1042":{"position":[[387,6],[501,6],[648,5],[684,5],[839,7],[890,5],[948,6]]},"1043":{"position":[[1051,6],[1165,6],[1312,5],[1348,5],[1503,7],[1554,5],[1612,6]]},"1045":{"position":[[745,5],[833,5],[855,5],[1117,6],[1155,5],[1277,6]]},"1046":{"position":[[465,5]]},"1047":{"position":[[67,6],[204,5],[413,6],[664,5]]},"1050":{"position":[[42,6],[91,5],[169,5],[373,6],[417,6],[487,6],[509,5],[656,5],[756,6],[799,6],[909,5]]},"1051":{"position":[[1313,6],[1427,6],[1574,5],[1610,5],[1765,7],[1816,5],[1874,6]]},"1053":{"position":[[745,5],[833,5],[855,5],[1117,6],[1155,5],[1277,6]]},"1054":{"position":[[465,5]]},"1055":{"position":[[67,6],[204,5],[413,6],[664,5]]},"1058":{"position":[[42,6],[91,5],[169,5],[373,6],[417,6],[487,6],[509,5],[656,5],[756,6],[799,6],[909,5]]},"1059":{"position":[[1106,6],[1220,6],[1367,5],[1403,5],[1558,7],[1609,5],[1667,6]]},"1061":{"position":[[745,5],[833,5],[855,5],[1117,6],[1155,5],[1277,6]]},"1062":{"position":[[465,5]]},"1063":{"position":[[67,6],[204,5],[413,6],[664,5]]},"1070":{"position":[[34,5]]},"1085":{"position":[[34,5]]},"1120":{"position":[[341,6]]},"1123":{"position":[[92,6]]},"1125":{"position":[[308,7],[550,5],[577,5],[673,5]]},"1126":{"position":[[299,6]]},"1136":{"position":[[135,6],[182,6]]},"1137":{"position":[[209,7]]},"1138":{"position":[[193,5],[587,6],[703,6],[1372,5],[1468,6],[1533,5],[1635,5],[1708,6],[1715,5],[1721,5]]},"1139":{"position":[[1190,6]]},"1140":{"position":[[280,5],[1153,5]]},"1149":{"position":[[264,6],[311,6]]},"1150":{"position":[[146,6]]},"1151":{"position":[[572,6],[688,7],[1373,5],[1400,6],[1474,5],[1594,5]]},"1152":{"position":[[384,6]]},"1155":{"position":[[122,5],[336,5]]},"1156":{"position":[[386,6],[486,5],[533,7],[604,7],[814,6]]},"1161":{"position":[[123,7]]},"1162":{"position":[[500,6],[806,5],[833,6],[920,5],[997,5]]},"1163":{"position":[[321,6]]},"1164":{"position":[[47,5]]},"1165":{"position":[[99,6],[197,5]]},"1166":{"position":[[101,5],[145,6],[220,7]]},"1178":{"position":[[210,6],[332,7]]},"1179":{"position":[[399,6],[515,7],[1037,5],[1043,5],[1131,5],[1166,6]]},"1180":{"position":[[294,6]]},"1182":{"position":[[193,6],[488,5],[608,6]]},"1183":{"position":[[1,6],[92,6],[173,6],[264,6],[303,5],[352,5],[397,5],[432,6],[602,5],[760,5],[827,6],[842,5],[1115,6],[1128,5],[1290,5],[1350,5],[1582,6],[1595,5],[1753,6]]},"1185":{"position":[[137,6]]},"1187":{"position":[[214,7]]},"1188":{"position":[[756,5],[762,5],[844,5]]},"1189":{"position":[[463,6]]},"1191":{"position":[[195,6],[490,5],[612,6]]},"1192":{"position":[[238,5]]},"1204":{"position":[[165,5]]},"1205":{"position":[[192,6],[215,6]]},"1206":{"position":[[650,5],[878,5],[905,5],[958,5],[989,5],[1049,5],[1081,5]]},"1207":{"position":[[552,6],[559,5]]},"1253":{"position":[[562,5]]},"1259":{"position":[[138,6]]},"1260":{"position":[[286,6],[402,7],[921,5],[948,6],[1022,5],[1118,5]]},"1261":{"position":[[326,6]]},"1262":{"position":[[195,6],[490,5],[612,6]]},"1265":{"position":[[162,6]]},"1269":{"position":[[56,5],[78,5]]},"1270":{"position":[[214,6]]},"1281":{"position":[[174,6]]},"1284":{"position":[[207,7]]},"1286":{"position":[[1215,7],[2550,5],[2556,5],[2738,5]]},"1287":{"position":[[203,6]]},"1292":{"position":[[209,5],[6247,5],[6286,6]]},"1295":{"position":[[174,6]]},"1299":{"position":[[207,7]]},"1301":{"position":[[1051,7],[2386,5],[2392,5],[2574,5]]},"1302":{"position":[[203,6]]},"1303":{"position":[[1409,6]]},"1306":{"position":[[209,5],[6247,5],[6286,6]]},"1309":{"position":[[135,6],[182,6]]},"1312":{"position":[[210,7]]},"1313":{"position":[[397,6],[513,6],[916,5],[1012,6],[1077,5],[1179,5],[1252,6],[1259,5],[1265,5]]},"1314":{"position":[[206,6]]},"1316":{"position":[[280,5],[1153,5]]},"1317":{"position":[[373,5],[446,6]]},"1319":{"position":[[174,6]]},"1323":{"position":[[207,7]]},"1325":{"position":[[1215,7],[2550,5],[2556,5],[2738,5]]},"1326":{"position":[[203,6]]},"1329":{"position":[[209,5],[6247,5],[6286,6]]},"1332":{"position":[[135,6],[182,6]]},"1336":{"position":[[210,7]]},"1337":{"position":[[397,6],[513,6],[916,5],[1012,6],[1077,5],[1179,5],[1252,6],[1259,5],[1265,5]]},"1338":{"position":[[206,6]]},"1340":{"position":[[280,5],[1153,5]]},"1341":{"position":[[373,5],[446,6]]},"1343":{"position":[[135,6],[182,6]]},"1347":{"position":[[210,7]]},"1348":{"position":[[397,6],[513,6],[916,5],[1012,6],[1077,5],[1179,5],[1252,6],[1259,5],[1265,5]]},"1349":{"position":[[206,6]]},"1351":{"position":[[280,5],[1153,5]]},"1352":{"position":[[373,5],[446,6]]},"1367":{"position":[[67,5],[73,5]]},"1368":{"position":[[142,6]]},"1370":{"position":[[272,5],[1068,5]]},"1372":{"position":[[174,6],[272,7]]},"1375":{"position":[[211,7]]},"1376":{"position":[[465,5],[471,5],[653,5]]},"1377":{"position":[[207,6]]},"1379":{"position":[[217,5],[4221,5]]},"1385":{"position":[[212,7]]},"1386":{"position":[[370,6],[486,6],[1159,5],[1165,5],[1247,5]]},"1387":{"position":[[502,6],[1128,6]]},"1389":{"position":[[194,6],[489,5],[610,6]]},"1391":{"position":[[224,7]]},"1392":{"position":[[46,6]]},"1394":{"position":[[236,5],[730,5]]},"1396":{"position":[[174,6],[272,7]]},"1399":{"position":[[211,7]]},"1400":{"position":[[465,5],[471,5],[653,5]]},"1401":{"position":[[207,6]]},"1403":{"position":[[217,5],[4221,5]]},"1406":{"position":[[174,6],[272,7]]},"1410":{"position":[[211,7]]},"1411":{"position":[[465,5],[471,5],[653,5]]},"1412":{"position":[[207,6]]},"1414":{"position":[[217,5],[4221,5]]},"1417":{"position":[[399,6]]},"1418":{"position":[[276,5]]},"1419":{"position":[[212,7]]},"1420":{"position":[[706,5],[712,5],[794,5]]},"1421":{"position":[[489,6]]},"1423":{"position":[[239,5],[498,5]]},"1426":{"position":[[213,7],[279,6],[326,6]]},"1427":{"position":[[338,6],[454,6],[643,5],[739,6],[837,5],[939,5],[1012,6],[1019,5],[1025,5]]},"1428":{"position":[[247,6]]},"1429":{"position":[[28,6],[122,7],[409,7],[449,6],[515,5],[642,5],[875,6]]},"1431":{"position":[[303,5],[1176,5]]},"1432":{"position":[[373,5],[446,6]]},"1437":{"position":[[366,5]]},"1449":{"position":[[308,7]]},"1456":{"position":[[115,6]]}},"keywords":{}}],["table"",{"_index":4631,"title":{},"content":{"760":{"position":[[90,11]]},"773":{"position":[[90,11]]},"800":{"position":[[90,11]]},"815":{"position":[[90,11]]},"831":{"position":[[90,11]]},"1149":{"position":[[183,11]]}},"keywords":{}}],["table(",{"_index":4589,"title":{},"content":{"750":{"position":[[1031,8]]},"760":{"position":[[350,8]]},"763":{"position":[[337,8]]},"766":{"position":[[1031,8]]},"773":{"position":[[350,8]]},"776":{"position":[[337,8]]},"789":{"position":[[1432,8]]},"800":{"position":[[350,8]]},"803":{"position":[[343,8]]},"807":{"position":[[1019,8]]},"815":{"position":[[350,8]]},"818":{"position":[[343,8]]},"823":{"position":[[1019,8]]},"831":{"position":[[350,8]]},"834":{"position":[[343,8]]},"917":{"position":[[941,8]]},"919":{"position":[[1466,8]]},"947":{"position":[[1057,8]]},"965":{"position":[[941,8]]}},"keywords":{}}],["table(result_scan(last_query_id",{"_index":6381,"title":{},"content":{"1384":{"position":[[848,35]]}},"keywords":{}}],["table)ad",{"_index":4986,"title":{},"content":{"899":{"position":[[196,8],[220,8]]}},"keywords":{}}],["table)board",{"_index":4983,"title":{},"content":{"899":{"position":[[109,11]]}},"keywords":{}}],["table)pin",{"_index":4984,"title":{},"content":{"899":{"position":[[136,10],[170,10]]}},"keywords":{}}],["table.lambda.recentchange.sql",{"_index":2072,"title":{},"content":{"183":{"position":[[1442,29],[2961,30],[3480,29],[3977,29]]}},"keywords":{}}],["table.migration.0.sql",{"_index":2070,"title":{},"content":{"183":{"position":[[1320,21],[3834,21]]}},"keywords":{}}],["table.or",{"_index":1608,"title":{},"content":{"113":{"position":[[694,9]]}},"keywords":{}}],["table.permiss",{"_index":4586,"title":{},"content":{"750":{"position":[[890,16]]},"766":{"position":[[890,16]]},"789":{"position":[[1291,16]]},"807":{"position":[[878,16]]},"823":{"position":[[878,16]]}},"keywords":{}}],["table_checksu",{"_index":6227,"title":{},"content":{"1292":{"position":[[6352,13]]},"1306":{"position":[[6352,13]]},"1329":{"position":[[6352,13]]}},"keywords":{}}],["table_nam",{"_index":3430,"title":{},"content":{"371":{"position":[[1311,13]]},"398":{"position":[[345,13]]},"556":{"position":[[1267,11]]},"557":{"position":[[566,11]]},"758":{"position":[[325,13]]},"771":{"position":[[325,13]]},"798":{"position":[[323,13]]},"813":{"position":[[323,13]]},"829":{"position":[[323,13]]},"868":{"position":[[503,13]]},"880":{"position":[[472,13]]},"908":{"position":[[339,13]]},"924":{"position":[[339,13]]},"935":{"position":[[339,13]]},"951":{"position":[[339,13]]},"969":{"position":[[339,13]]},"1037":{"position":[[289,13]]},"1046":{"position":[[280,13]]},"1054":{"position":[[280,13]]},"1062":{"position":[[280,13]]},"1126":{"position":[[306,13]]},"1139":{"position":[[1197,13]]},"1152":{"position":[[391,13]]},"1180":{"position":[[301,13]]},"1182":{"position":[[615,13]]},"1189":{"position":[[470,13]]},"1191":{"position":[[619,13]]},"1261":{"position":[[333,13]]},"1262":{"position":[[619,13]]},"1270":{"position":[[221,13]]},"1287":{"position":[[210,13]]},"1292":{"position":[[6397,10]]},"1302":{"position":[[210,13]]},"1306":{"position":[[6397,10]]},"1314":{"position":[[213,13]]},"1326":{"position":[[210,13]]},"1329":{"position":[[6397,10]]},"1338":{"position":[[213,13]]},"1349":{"position":[[213,13]]},"1357":{"position":[[442,13]]},"1368":{"position":[[149,13]]},"1377":{"position":[[214,13]]},"1387":{"position":[[509,13],[1135,13]]},"1389":{"position":[[617,13]]},"1401":{"position":[[214,13]]},"1412":{"position":[[214,13]]},"1421":{"position":[[496,13]]},"1428":{"position":[[254,13]]}},"keywords":{}}],["table_namespac",{"_index":3431,"title":{},"content":{"371":{"position":[[1336,18]]},"758":{"position":[[298,18]]},"771":{"position":[[298,18]]},"798":{"position":[[296,18]]},"813":{"position":[[296,18]]},"829":{"position":[[296,18]]},"868":{"position":[[476,18]]},"880":{"position":[[494,18]]},"908":{"position":[[364,18]]},"924":{"position":[[364,18]]},"935":{"position":[[364,18]]},"951":{"position":[[364,18]]},"969":{"position":[[364,18]]}},"keywords":{}}],["table_typ",{"_index":5865,"title":{},"content":{"1206":{"position":[[1037,11]]},"1207":{"position":[[570,11]]}},"keywords":{}}],["tables.resourc",{"_index":765,"title":{},"content":{"45":{"position":[[232,16]]}},"keywords":{}}],["tables.th",{"_index":5968,"title":{},"content":{"1281":{"position":[[272,10]]},"1295":{"position":[[272,10]]},"1319":{"position":[[272,10]]}},"keywords":{}}],["tablesampl",{"_index":5568,"title":{},"content":{"1140":{"position":[[1191,11]]},"1316":{"position":[[1191,11]]},"1340":{"position":[[1191,11]]},"1351":{"position":[[1191,11]]},"1379":{"position":[[4269,11]]},"1394":{"position":[[753,11]]},"1403":{"position":[[4269,11]]},"1414":{"position":[[4269,11]]},"1431":{"position":[[1214,11]]}},"keywords":{}}],["tablespac",{"_index":4900,"title":{},"content":{"871":{"position":[[85,10]]},"1292":{"position":[[6315,10]]},"1306":{"position":[[6315,10]]},"1329":{"position":[[6315,10]]}},"keywords":{}}],["tablesstorag",{"_index":6410,"title":{},"content":{"1417":{"position":[[207,13]]}},"keywords":{}}],["tabsscreen",{"_index":4488,"title":{},"content":{"709":{"position":[[612,10]]}},"keywords":{}}],["tackl",{"_index":718,"title":{},"content":{"40":{"position":[[259,6]]},"110":{"position":[[828,8]]},"241":{"position":[[502,6]]},"278":{"position":[[321,6]]},"280":{"position":[[1055,6]]}},"keywords":{}}],["tag",{"_index":1114,"title":{},"content":{"81":{"position":[[71,7],[417,3],[1163,3],[1222,3]]},"84":{"position":[[1082,5]]},"529":{"position":[[403,4]]},"686":{"position":[[1048,4]]},"1134":{"position":[[1989,4]]},"1465":{"position":[[592,6]]}},"keywords":{}}],["tagsproduct",{"_index":5370,"title":{},"content":{"1096":{"position":[[294,11]]}},"keywords":{}}],["tailor",{"_index":2423,"title":{},"content":{"213":{"position":[[459,8]]}},"keywords":{}}],["take",{"_index":180,"title":{},"content":{"4":{"position":[[576,6]]},"30":{"position":[[221,4]]},"102":{"position":[[195,4]]},"110":{"position":[[611,6]]},"146":{"position":[[855,4]]},"149":{"position":[[828,4]]},"152":{"position":[[831,4]]},"154":{"position":[[827,6]]},"179":{"position":[[400,4]]},"210":{"position":[[195,4],[368,4]]},"221":{"position":[[1801,4]]},"236":{"position":[[217,4],[1741,4],[2544,4]]},"239":{"position":[[1412,4],[1631,4],[1941,4]]},"241":{"position":[[267,4]]},"295":{"position":[[1294,4]]},"296":{"position":[[955,4],[1205,4],[4196,4],[5181,4],[6950,4],[7970,4]]},"315":{"position":[[675,4],[1266,4]]},"343":{"position":[[497,4]]},"480":{"position":[[993,4]]},"554":{"position":[[348,4]]},"757":{"position":[[658,5]]},"767":{"position":[[1309,4],[1662,4]]},"770":{"position":[[658,5]]},"792":{"position":[[139,4],[1604,4]]},"797":{"position":[[658,5]]},"812":{"position":[[658,5]]},"824":{"position":[[1375,4],[1726,4]]},"828":{"position":[[658,5]]},"842":{"position":[[2784,4]]},"900":{"position":[[73,4]]},"904":{"position":[[1239,4]]},"917":{"position":[[1934,4]]},"918":{"position":[[139,4],[1531,4]]},"947":{"position":[[1200,4]]},"965":{"position":[[1934,4]]},"1156":{"position":[[630,4]]},"1166":{"position":[[159,4]]},"1204":{"position":[[549,4]]},"1285":{"position":[[670,5]]},"1300":{"position":[[670,5]]},"1324":{"position":[[670,5]]},"1391":{"position":[[364,5]]},"1429":{"position":[[318,4]]},"1442":{"position":[[1258,4]]},"1447":{"position":[[674,4]]},"1452":{"position":[[1811,4],[1867,4],[2166,4]]},"1455":{"position":[[340,4]]},"1463":{"position":[[55,5],[140,5]]},"1465":{"position":[[670,6]]},"1467":{"position":[[376,6],[1637,4]]},"1476":{"position":[[54,6],[724,4]]},"1479":{"position":[[560,4]]}},"keywords":{}}],["takeaway",{"_index":2415,"title":{},"content":{"211":{"position":[[250,9]]}},"keywords":{}}],["taken",{"_index":1810,"title":{},"content":{"139":{"position":[[57,5]]},"140":{"position":[[39,5]]},"143":{"position":[[65,5]]},"145":{"position":[[74,5]]},"148":{"position":[[80,5]]},"151":{"position":[[90,5]]},"221":{"position":[[1412,5]]},"759":{"position":[[269,5]]},"760":{"position":[[151,5]]},"772":{"position":[[280,5]]},"773":{"position":[[151,5]]},"799":{"position":[[267,5]]},"800":{"position":[[151,5]]},"814":{"position":[[267,5]]},"815":{"position":[[151,5]]},"830":{"position":[[267,5]]},"831":{"position":[[151,5]]},"1438":{"position":[[401,5]]},"1459":{"position":[[1107,5]]},"1475":{"position":[[125,6]]}},"keywords":{}}],["talk",{"_index":2236,"title":{},"content":{"207":{"position":[[43,4],[349,7]]}},"keywords":{}}],["tan",{"_index":5570,"title":{},"content":{"1140":{"position":[[1242,3]]},"1316":{"position":[[1242,3]]},"1340":{"position":[[1242,3]]},"1351":{"position":[[1242,3]]},"1431":{"position":[[1265,3]]}},"keywords":{}}],["tanh",{"_index":5573,"title":{},"content":{"1140":{"position":[[1289,4]]},"1316":{"position":[[1289,4]]},"1340":{"position":[[1289,4]]},"1351":{"position":[[1289,4]]},"1431":{"position":[[1312,4]]}},"keywords":{}}],["tap",{"_index":892,"title":{},"content":{"58":{"position":[[726,3]]},"169":{"position":[[973,3]]},"280":{"position":[[247,6]]}},"keywords":{}}],["target",{"_index":847,"title":{},"content":{"56":{"position":[[1507,6],[1633,7],[2045,7]]},"92":{"position":[[101,6]]},"124":{"position":[[726,6]]},"125":{"position":[[85,6]]},"198":{"position":[[922,7]]},"208":{"position":[[512,6],[959,6]]},"209":{"position":[[903,8]]},"234":{"position":[[476,6]]},"288":{"position":[[613,6]]},"299":{"position":[[528,6]]},"307":{"position":[[1228,7],[1811,7],[2090,7]]},"360":{"position":[[223,7]]},"368":{"position":[[101,8]]},"371":{"position":[[1377,7]]},"378":{"position":[[345,7]]},"388":{"position":[[481,7]]},"393":{"position":[[360,7]]},"398":{"position":[[359,7]]},"403":{"position":[[450,7]]},"418":{"position":[[426,7]]},"425":{"position":[[257,7],[338,7],[417,7],[497,7],[592,7]]},"433":{"position":[[390,7],[786,7]]},"439":{"position":[[641,7]]},"449":{"position":[[462,7]]},"455":{"position":[[306,7]]},"461":{"position":[[303,7]]},"467":{"position":[[239,7]]},"473":{"position":[[341,7]]},"497":{"position":[[265,7]]},"503":{"position":[[213,7]]},"510":{"position":[[230,7]]},"518":{"position":[[516,7],[595,7],[676,7],[777,7],[886,7],[987,7],[1084,7],[1194,7],[1312,7],[1407,7],[1488,7],[1563,7],[1641,7]]},"527":{"position":[[391,7]]},"535":{"position":[[406,7]]},"541":{"position":[[228,7]]},"546":{"position":[[1133,7]]},"548":{"position":[[415,6],[1200,7]]},"557":{"position":[[656,7]]},"566":{"position":[[267,7]]},"575":{"position":[[373,7],[460,7],[564,7],[653,7],[753,7],[838,7],[933,7],[1036,7],[1132,7],[1231,7]]},"586":{"position":[[395,7],[482,7],[586,7],[675,7],[760,7],[855,7],[951,7],[1050,7]]},"594":{"position":[[1158,7],[1273,7],[1362,7],[1433,7]]},"612":{"position":[[406,7]]},"620":{"position":[[301,7]]},"626":{"position":[[202,7]]},"632":{"position":[[265,7]]},"638":{"position":[[432,7]]},"647":{"position":[[226,7]]},"655":{"position":[[256,7]]},"671":{"position":[[299,7]]},"686":{"position":[[293,7],[370,7],[457,7],[547,7],[640,7],[727,7],[816,7],[914,7],[1001,7],[1076,7],[1148,7]]},"701":{"position":[[229,7]]},"707":{"position":[[226,7]]},"713":{"position":[[235,7]]},"721":{"position":[[368,7]]},"736":{"position":[[223,7],[312,7],[406,7]]},"742":{"position":[[294,7]]},"748":{"position":[[460,7]]},"755":{"position":[[101,8]]},"758":{"position":[[361,7]]},"768":{"position":[[101,8]]},"771":{"position":[[361,7]]},"783":{"position":[[247,7]]},"795":{"position":[[99,8]]},"798":{"position":[[359,7]]},"810":{"position":[[99,8]]},"813":{"position":[[359,7]]},"826":{"position":[[99,8]]},"829":{"position":[[359,7]]},"843":{"position":[[811,7]]},"852":{"position":[[344,7]]},"860":{"position":[[316,7]]},"868":{"position":[[517,7]]},"880":{"position":[[528,7]]},"886":{"position":[[324,7]]},"892":{"position":[[185,7],[235,7],[282,7],[330,7],[384,7],[445,7],[507,7],[567,7],[626,7]]},"905":{"position":[[104,8]]},"908":{"position":[[405,7]]},"920":{"position":[[104,8]]},"924":{"position":[[405,7]]},"932":{"position":[[104,8]]},"935":{"position":[[405,7]]},"948":{"position":[[104,8]]},"951":{"position":[[405,7]]},"960":{"position":[[236,7]]},"966":{"position":[[104,8]]},"969":{"position":[[405,7]]},"983":{"position":[[226,7]]},"992":{"position":[[266,7],[332,7]]},"998":{"position":[[266,7]]},"1010":{"position":[[502,7],[620,7]]},"1016":{"position":[[354,7]]},"1022":{"position":[[437,7]]},"1029":{"position":[[234,7]]},"1031":{"position":[[75,6]]},"1037":{"position":[[303,7]]},"1046":{"position":[[339,7]]},"1054":{"position":[[339,7]]},"1062":{"position":[[339,7]]},"1071":{"position":[[365,7]]},"1078":{"position":[[265,7],[360,7],[441,7],[527,7],[633,7],[727,7],[826,7],[924,7],[1003,7],[1079,7],[1160,7],[1254,7],[1340,7],[1425,7],[1508,7],[1582,7],[1657,7],[1742,7],[1825,7],[1913,7],[2005,7],[2089,7]]},"1086":{"position":[[422,7]]},"1102":{"position":[[225,7]]},"1108":{"position":[[301,7]]},"1114":{"position":[[287,7]]},"1134":{"position":[[331,7],[432,7],[550,7],[628,7],[709,7],[825,7],[935,7],[1035,7],[1142,7],[1267,7],[1383,7],[1464,7],[1557,7],[1646,7],[1763,7],[1854,7],[1938,7],[2017,7],[2122,7],[2237,7],[2352,7],[2464,7],[2577,7],[2692,7],[2810,7],[2918,7],[3020,7]]},"1166":{"position":[[94,6]]},"1236":{"position":[[125,6]]},"1382":{"position":[[75,6],[187,6]]},"1392":{"position":[[39,6]]},"1459":{"position":[[644,6]]}},"keywords":{}}],["targetingssponsor",{"_index":3469,"title":{},"content":{"381":{"position":[[333,19],[497,19]]}},"keywords":{}}],["task",{"_index":216,"title":{"18":{"position":[[0,4]]},"44":{"position":[[0,6]]},"49":{"position":[[0,4]]},"114":{"position":[[23,4]]},"282":{"position":[[15,4]]},"284":{"position":[[6,4]]},"342":{"position":[[12,4]]}},"content":{"6":{"position":[[339,4],[502,6]]},"7":{"position":[[44,4],[117,5],[356,4]]},"8":{"position":[[308,6],[377,4],[505,4],[608,5],[671,4],[859,5]]},"19":{"position":[[8,4],[213,5],[266,4],[536,6]]},"20":{"position":[[102,4],[616,5]]},"21":{"position":[[5,4],[88,5],[169,5],[302,5]]},"35":{"position":[[21,4]]},"36":{"position":[[29,4]]},"41":{"position":[[546,5]]},"44":{"position":[[85,6],[333,6]]},"48":{"position":[[139,4]]},"49":{"position":[[1,4],[53,5],[68,4],[111,4],[308,5],[391,5],[541,5]]},"56":{"position":[[2283,4]]},"66":{"position":[[160,5],[536,5]]},"83":{"position":[[312,4]]},"94":{"position":[[2804,4]]},"97":{"position":[[704,4]]},"100":{"position":[[1210,4]]},"101":{"position":[[111,4],[447,4],[573,5]]},"105":{"position":[[452,4]]},"107":{"position":[[227,5],[949,4],[2252,4],[2292,4],[2446,4],[2597,4]]},"108":{"position":[[182,4]]},"109":{"position":[[691,4]]},"112":{"position":[[12,5],[380,5],[622,4],[745,4],[882,4]]},"113":{"position":[[605,4]]},"115":{"position":[[1314,4]]},"117":{"position":[[106,5],[324,4],[368,4],[619,5]]},"135":{"position":[[789,4]]},"138":{"position":[[1159,4]]},"141":{"position":[[1248,4]]},"142":{"position":[[1128,4]]},"181":{"position":[[179,6]]},"183":{"position":[[2597,4]]},"213":{"position":[[100,6]]},"240":{"position":[[3392,4]]},"259":{"position":[[1025,5],[1304,5],[2606,5]]},"274":{"position":[[32,6]]},"275":{"position":[[271,4]]},"278":{"position":[[61,4],[824,5]]},"280":{"position":[[43,4],[1067,5]]},"281":{"position":[[256,4],[2863,4],[2906,4],[3006,4]]},"284":{"position":[[174,4],[331,4],[430,4],[475,4],[556,4]]},"285":{"position":[[465,5]]},"305":{"position":[[96,5],[593,5]]},"307":{"position":[[687,5]]},"309":{"position":[[1377,5]]},"320":{"position":[[634,6],[661,4],[1913,5],[1990,5],[2076,5],[2178,5]]},"321":{"position":[[1122,6],[1513,6],[1551,5],[1579,4],[1738,4],[1790,4],[2024,5],[2089,5],[2227,4]]},"322":{"position":[[860,5]]},"323":{"position":[[550,6],[558,5],[1091,5]]},"333":{"position":[[131,5],[510,4],[528,6]]},"483":{"position":[[656,5]]},"628":{"position":[[288,4]]},"842":{"position":[[1474,4],[1518,5],[1542,4],[1701,5]]},"909":{"position":[[664,5],[1021,5]]},"925":{"position":[[664,5],[1021,5]]},"936":{"position":[[664,5],[1021,5]]},"952":{"position":[[664,5],[1021,5]]},"970":{"position":[[664,5],[1021,5]]},"1036":{"position":[[517,4]]},"1183":{"position":[[508,4],[715,4]]},"1363":{"position":[[351,4]]},"1435":{"position":[[349,5]]},"1437":{"position":[[187,4],[698,5],[760,5],[1329,4],[1562,4]]},"1447":{"position":[[414,5],[563,4],[724,4]]},"1452":{"position":[[1664,4],[1758,4]]},"1453":{"position":[[680,4]]},"1455":{"position":[[501,4]]},"1470":{"position":[[61,5],[400,4]]},"1471":{"position":[[240,5],[275,4],[322,4],[828,4]]},"1472":{"position":[[236,6],[265,5],[349,7]]},"1473":{"position":[[191,4]]},"1474":{"position":[[217,5],[383,4],[465,5],[601,4],[619,4]]},"1475":{"position":[[186,5],[325,4]]}},"keywords":{}}],["task'",{"_index":555,"title":{},"content":{"20":{"position":[[1110,6]]},"343":{"position":[[75,6]]},"1470":{"position":[[190,6]]},"1475":{"position":[[910,6]]}},"keywords":{}}],["task.ent",{"_index":3824,"title":{},"content":{"479":{"position":[[255,10]]}},"keywords":{}}],["task_limit",{"_index":4795,"title":{},"content":{"843":{"position":[[458,11]]}},"keywords":{}}],["tasksformsform",{"_index":4390,"title":{},"content":{"649":{"position":[[387,14]]}},"keywords":{}}],["tasktrac",{"_index":247,"title":{},"content":{"7":{"position":[[491,10]]}},"keywords":{}}],["task’",{"_index":252,"title":{},"content":{"7":{"position":[[608,6]]}},"keywords":{}}],["tbl2",{"_index":5100,"title":{},"content":{"945":{"position":[[181,5]]}},"keywords":{}}],["tbl3>",{"_index":5101,"title":{},"content":{"945":{"position":[[187,9]]}},"keywords":{}}],["tcp",{"_index":2578,"title":{},"content":{"238":{"position":[[254,3],[275,3]]}},"keywords":{}}],["team",{"_index":1278,"title":{},"content":{"84":{"position":[[1405,5]]},"136":{"position":[[241,4]]},"208":{"position":[[424,5]]},"210":{"position":[[2057,4],[2380,4]]},"211":{"position":[[653,5]]},"278":{"position":[[85,4]]},"279":{"position":[[110,4]]},"280":{"position":[[238,4]]},"281":{"position":[[94,4]]},"427":{"position":[[439,5]]},"487":{"position":[[655,4]]},"529":{"position":[[415,4],[452,4],[482,5]]},"686":{"position":[[1119,5]]},"977":{"position":[[806,5]]},"1461":{"position":[[666,5],[939,4],[4231,4],[4272,6],[4299,4],[4391,4],[4420,5],[4543,6],[4550,4],[4598,4],[4765,4],[4825,4],[4863,4],[5062,4],[5181,4],[5300,4],[5457,4]]},"1462":{"position":[[245,6],[385,4],[489,4],[685,6]]}},"keywords":{}}],["teamdatetim",{"_index":4811,"title":{},"content":{"847":{"position":[[148,12]]}},"keywords":{}}],["teamfor",{"_index":5271,"title":{},"content":{"1067":{"position":[[511,7]]}},"keywords":{}}],["teamuser.flow.yaml",{"_index":6626,"title":{},"content":{"1461":{"position":[[4889,18]]}},"keywords":{}}],["teamweb.flow.yaml",{"_index":6630,"title":{},"content":{"1461":{"position":[[5353,17]]}},"keywords":{}}],["tear",{"_index":4641,"title":{},"content":{"761":{"position":[[368,7]]},"762":{"position":[[490,4]]},"774":{"position":[[368,7]]},"775":{"position":[[490,4]]},"801":{"position":[[374,7]]},"802":{"position":[[490,4]]},"816":{"position":[[374,7]]},"817":{"position":[[490,4]]},"832":{"position":[[374,7]]},"833":{"position":[[490,4]]}},"keywords":{}}],["technic",{"_index":773,"title":{},"content":{"47":{"position":[[84,9]]},"211":{"position":[[144,9]]},"241":{"position":[[344,9]]},"323":{"position":[[1623,9],[1803,9],[1873,9]]},"329":{"position":[[1175,9]]},"1453":{"position":[[4,9]]}},"keywords":{}}],["techniqu",{"_index":3192,"title":{},"content":{"330":{"position":[[39,10]]},"909":{"position":[[226,10]]},"925":{"position":[[226,10]]},"936":{"position":[[226,10]]},"952":{"position":[[226,10]]},"970":{"position":[[226,10]]},"1437":{"position":[[780,9]]}},"keywords":{}}],["technolog",{"_index":789,"title":{},"content":{"52":{"position":[[126,10]]},"319":{"position":[[375,13]]},"363":{"position":[[67,10]]}},"keywords":{}}],["tediou",{"_index":1674,"title":{},"content":{"122":{"position":[[540,7]]},"133":{"position":[[42,7]]}},"keywords":{}}],["tell",{"_index":805,"title":{},"content":{"54":{"position":[[138,4]]},"67":{"position":[[449,4]]},"107":{"position":[[3892,4]]},"119":{"position":[[226,4]]},"210":{"position":[[261,4]]},"236":{"position":[[2672,4]]},"254":{"position":[[3212,5]]},"277":{"position":[[830,5]]},"296":{"position":[[2955,5]]},"314":{"position":[[2787,5]]},"1439":{"position":[[724,5]]}},"keywords":{}}],["temp",{"_index":6295,"title":{},"content":{"1370":{"position":[[1081,4]]}},"keywords":{}}],["temperatur",{"_index":1577,"title":{},"content":{"110":{"position":[[734,11]]}},"keywords":{}}],["templat",{"_index":3579,"title":{"483":{"position":[[6,10]]}},"content":{"414":{"position":[[151,9]]},"415":{"position":[[411,9]]},"482":{"position":[[709,9],[719,8],[738,10]]},"483":{"position":[[11,8],[209,8],[323,8]]}},"keywords":{}}],["template/main/word",{"_index":1296,"title":{},"content":{"87":{"position":[[820,18]]}},"keywords":{}}],["templatesinterviewsjob",{"_index":4327,"title":{},"content":{"622":{"position":[[206,22]]}},"keywords":{}}],["tempor",{"_index":6676,"title":{},"content":{"1473":{"position":[[128,8]]}},"keywords":{}}],["temporari",{"_index":1794,"title":{},"content":{"138":{"position":[[1671,9]]},"141":{"position":[[1676,9]]},"142":{"position":[[1688,9]]},"1140":{"position":[[1341,9]]},"1149":{"position":[[421,9]]},"1258":{"position":[[102,9]]},"1292":{"position":[[6447,9]]},"1306":{"position":[[6447,9]]},"1316":{"position":[[1341,9]]},"1329":{"position":[[6447,9]]},"1340":{"position":[[1341,9]]},"1351":{"position":[[1341,9]]},"1370":{"position":[[1092,9]]},"1379":{"position":[[4329,9]]},"1403":{"position":[[4329,9]]},"1414":{"position":[[4329,9]]},"1417":{"position":[[231,9]]},"1418":{"position":[[131,9]]},"1431":{"position":[[1364,9]]}},"keywords":{}}],["temporarili",{"_index":1638,"title":{},"content":{"117":{"position":[[67,11]]},"138":{"position":[[324,11]]},"141":{"position":[[634,11]]},"142":{"position":[[437,11]]},"154":{"position":[[1636,11]]},"1183":{"position":[[516,11]]}},"keywords":{}}],["temptabl",{"_index":6232,"title":{},"content":{"1292":{"position":[[6493,9]]},"1306":{"position":[[6493,9]]},"1329":{"position":[[6493,9]]}},"keywords":{}}],["ten",{"_index":1451,"title":{},"content":{"101":{"position":[[361,4]]},"595":{"position":[[1258,3]]}},"keywords":{}}],["tenant",{"_index":2018,"title":{},"content":{"173":{"position":[[325,6],[695,7]]},"436":{"position":[[277,6],[873,8],[993,8]]},"438":{"position":[[1078,6],[1108,6]]},"448":{"position":[[1056,6]]},"1008":{"position":[[1235,7],[1267,7],[1332,6]]},"1435":{"position":[[13,6]]},"1455":{"position":[[643,7]]},"1456":{"position":[[426,6]]},"1457":{"position":[[90,6]]}},"keywords":{}}],["tenant'",{"_index":6585,"title":{},"content":{"1456":{"position":[[286,8],[325,8]]}},"keywords":{}}],["tenant/salesforc",{"_index":5160,"title":{},"content":{"1008":{"position":[[1156,17]]}},"keywords":{}}],["tenant/salesforce/sourc",{"_index":5158,"title":{},"content":{"1008":{"position":[[444,24],[510,24]]}},"keywords":{}}],["tenant/salesforce/your",{"_index":5159,"title":{},"content":{"1008":{"position":[[653,22]]}},"keywords":{}}],["tenant_id",{"_index":3745,"title":{},"content":{"448":{"position":[[1029,10]]},"449":{"position":[[382,10]]}},"keywords":{}}],["tend",{"_index":797,"title":{},"content":{"53":{"position":[[181,4]]},"309":{"position":[[850,4]]},"320":{"position":[[939,5]]},"1391":{"position":[[572,4],[679,4],[949,4]]}},"keywords":{}}],["tenenat",{"_index":6583,"title":{},"content":{"1456":{"position":[[194,7]]}},"keywords":{}}],["tens",{"_index":6430,"title":{},"content":{"1434":{"position":[[167,5]]}},"keywords":{}}],["term",{"_index":659,"title":{},"content":{"32":{"position":[[54,5]]},"66":{"position":[[35,5],[228,5]]},"107":{"position":[[1801,5]]},"113":{"position":[[295,6]]},"176":{"position":[[259,6]]},"296":{"position":[[3558,5]]},"305":{"position":[[317,5]]},"323":{"position":[[302,5],[1614,5]]},"560":{"position":[[210,6]]},"1009":{"position":[[1435,4]]},"1085":{"position":[[657,4]]},"1451":{"position":[[601,5]]},"1453":{"position":[[14,6]]},"1477":{"position":[[3063,5]]}},"keywords":{}}],["termin",{"_index":876,"title":{},"content":{"58":{"position":[[229,9]]},"169":{"position":[[468,9],[1433,8],[1601,9]]},"183":{"position":[[4106,9]]},"237":{"position":[[3044,9],[3284,9]]},"242":{"position":[[217,9],[256,9]]},"253":{"position":[[988,9]]},"267":{"position":[[2084,9]]},"313":{"position":[[988,9]]},"340":{"position":[[293,8],[461,9]]},"595":{"position":[[1170,9]]},"922":{"position":[[2430,9]]},"1292":{"position":[[6533,10]]},"1306":{"position":[[6533,10]]},"1329":{"position":[[6533,10]]},"1379":{"position":[[4378,9]]},"1403":{"position":[[4378,9]]},"1414":{"position":[[4378,9]]}},"keywords":{}}],["termsproduct",{"_index":5364,"title":{},"content":{"1096":{"position":[[192,12]]}},"keywords":{}}],["terribl",{"_index":1573,"title":{},"content":{"110":{"position":[[594,8]]}},"keywords":{}}],["test",{"_index":489,"title":{"43":{"position":[[0,6]]},"127":{"position":[[0,5]]},"132":{"position":[[0,7]]}},"content":{"17":{"position":[[95,5]]},"26":{"position":[[670,4]]},"31":{"position":[[118,5]]},"33":{"position":[[136,6]]},"43":{"position":[[1,5],[119,5],[199,4],[412,4],[448,5]]},"60":{"position":[[549,4]]},"61":{"position":[[1075,4],[1230,4]]},"87":{"position":[[701,4],[759,4]]},"102":{"position":[[524,4]]},"128":{"position":[[381,6]]},"129":{"position":[[682,6]]},"130":{"position":[[98,6]]},"131":{"position":[[31,7]]},"132":{"position":[[81,6],[115,4],[189,4],[301,4],[371,6]]},"133":{"position":[[25,6],[205,6],[287,5],[328,6],[349,6],[570,5]]},"184":{"position":[[937,4]]},"209":{"position":[[105,5]]},"210":{"position":[[1666,4]]},"236":{"position":[[900,5]]},"250":{"position":[[1168,4]]},"264":{"position":[[52,5]]},"274":{"position":[[1065,6]]},"275":{"position":[[35,4],[360,4],[394,4],[578,4]]},"281":{"position":[[1176,5]]},"295":{"position":[[173,4]]},"296":{"position":[[7769,4]]},"309":{"position":[[515,6],[1302,4],[1763,4]]},"324":{"position":[[288,8]]},"329":{"position":[[27,5]]},"332":{"position":[[203,8],[745,5]]},"429":{"position":[[296,8]]},"485":{"position":[[289,4]]},"635":{"position":[[252,4]]},"657":{"position":[[289,4]]},"673":{"position":[[289,4]]},"675":{"position":[[369,4]]},"688":{"position":[[289,4]]},"783":{"position":[[242,4]]},"805":{"position":[[85,7]]},"820":{"position":[[85,7]]},"836":{"position":[[85,7]]},"1039":{"position":[[185,6]]},"1049":{"position":[[111,6]]},"1057":{"position":[[114,6]]},"1254":{"position":[[282,4]]},"1446":{"position":[[310,6]]},"1461":{"position":[[2192,4],[2246,5],[3962,4]]},"1463":{"position":[[495,6]]},"1464":{"position":[[401,6]]},"1465":{"position":[[1088,6]]},"1466":{"position":[[380,6]]},"1467":{"position":[[909,6],[2334,6]]},"1476":{"position":[[350,6],[1551,6]]},"1477":{"position":[[1566,6],[3886,6]]}},"keywords":{}}],["test.flow.yaml",{"_index":2828,"title":{},"content":{"277":{"position":[[528,14]]},"278":{"position":[[862,14]]},"279":{"position":[[1003,14]]},"280":{"position":[[1116,14]]},"281":{"position":[[1203,14]]}},"keywords":{}}],["text",{"_index":439,"title":{},"content":{"14":{"position":[[892,6],[1216,6]]},"98":{"position":[[629,4]]},"100":{"position":[[547,4]]},"141":{"position":[[984,4]]},"236":{"position":[[3376,4],[3404,6]]},"253":{"position":[[126,4]]},"278":{"position":[[1022,4],[1047,4]]},"279":{"position":[[1317,4],[1342,4]]},"280":{"position":[[1542,4]]},"295":{"position":[[1555,4]]},"313":{"position":[[126,4]]},"367":{"position":[[638,4],[666,6]]},"752":{"position":[[314,6]]},"753":{"position":[[970,6]]},"767":{"position":[[1950,6]]},"791":{"position":[[267,6]]},"792":{"position":[[1890,6]]},"793":{"position":[[941,6]]},"808":{"position":[[887,6]]},"824":{"position":[[2012,6]]},"904":{"position":[[1738,4],[1766,6]]},"917":{"position":[[1247,4],[1275,6]]},"918":{"position":[[2030,4],[2058,6]]},"919":{"position":[[2085,4],[2113,6]]},"931":{"position":[[1400,4],[1428,6]]},"965":{"position":[[1247,4],[1275,6]]},"1042":{"position":[[746,6]]},"1043":{"position":[[1410,6]]},"1051":{"position":[[1672,6]]},"1059":{"position":[[1465,6]]},"1200":{"position":[[131,4]]},"1209":{"position":[[530,4]]},"1274":{"position":[[242,4]]},"1275":{"position":[[329,4]]},"1277":{"position":[[609,4]]},"1292":{"position":[[6567,4]]},"1306":{"position":[[6567,4]]},"1329":{"position":[[6567,4]]}},"keywords":{}}],["textmap",{"_index":5836,"title":{},"content":{"1200":{"position":[[285,12]]}},"keywords":{}}],["textsiz",{"_index":6348,"title":{},"content":{"1379":{"position":[[4437,8]]},"1403":{"position":[[4437,8]]},"1414":{"position":[[4437,8]]}},"keywords":{}}],["th",{"_index":6563,"title":{},"content":{"1452":{"position":[[4367,3],[4553,2]]}},"keywords":{}}],["th)ursday,(f)riday",{"_index":6560,"title":{},"content":{"1452":{"position":[[4209,20]]}},"keywords":{}}],["than00:28",{"_index":6573,"title":{},"content":{"1453":{"position":[[795,10]]}},"keywords":{}}],["thank",{"_index":1277,"title":{},"content":{"84":{"position":[[1225,6]]}},"keywords":{}}],["that'",{"_index":1090,"title":{},"content":{"74":{"position":[[977,6]]},"114":{"position":[[593,6]]},"115":{"position":[[488,6]]},"135":{"position":[[794,6]]},"180":{"position":[[751,6]]},"182":{"position":[[602,6]]},"281":{"position":[[1755,6]]},"309":{"position":[[1499,6],[1799,6],[1887,6]]},"333":{"position":[[425,6]]},"488":{"position":[[1011,6]]},"659":{"position":[[1168,6]]},"661":{"position":[[74,6]]},"676":{"position":[[1011,6]]},"691":{"position":[[1011,6]]},"821":{"position":[[629,6]]},"912":{"position":[[645,6]]},"1461":{"position":[[944,6],[4662,6]]}},"keywords":{}}],["that’",{"_index":1610,"title":{},"content":{"114":{"position":[[263,6]]},"115":{"position":[[1276,6]]},"212":{"position":[[1,6]]},"239":{"position":[[1386,6]]},"240":{"position":[[4272,6]]},"243":{"position":[[1,6]]},"296":{"position":[[7606,6]]},"314":{"position":[[3017,6]]}},"keywords":{}}],["theacmeco/sal",{"_index":923,"title":{},"content":{"61":{"position":[[718,16]]}},"keywords":{}}],["theapprov",{"_index":1515,"title":{},"content":{"107":{"position":[[581,12]]}},"keywords":{}}],["theaw",{"_index":5741,"title":{},"content":{"1149":{"position":[[724,6]]},"1258":{"position":[[318,6]]}},"keywords":{}}],["thecollect",{"_index":1652,"title":{},"content":{"121":{"position":[[185,13]]}},"keywords":{}}],["thedestin",{"_index":2099,"title":{},"content":{"185":{"position":[[298,15]]}},"keywords":{}}],["theenable_case_sensitive_identifierconfigur",{"_index":5754,"title":{},"content":{"1155":{"position":[[238,48]]}},"keywords":{}}],["theestuari",{"_index":5751,"title":{},"content":{"1154":{"position":[[149,10]]}},"keywords":{}}],["theflowctl",{"_index":6604,"title":{},"content":{"1461":{"position":[[1668,10]]}},"keywords":{}}],["themselv",{"_index":4888,"title":{},"content":{"869":{"position":[[1038,11]]},"1459":{"position":[[1663,10]]},"1477":{"position":[[1422,11],[3588,11]]}},"keywords":{}}],["thenpmdependenciesof",{"_index":953,"title":{},"content":{"63":{"position":[[904,20]]}},"keywords":{}}],["theori",{"_index":2178,"title":{},"content":{"196":{"position":[[682,6]]},"233":{"position":[[867,6]]}},"keywords":{}}],["there'",{"_index":919,"title":{},"content":{"61":{"position":[[363,7]]},"146":{"position":[[999,7]]},"149":{"position":[[993,7]]},"152":{"position":[[983,7]]},"190":{"position":[[1698,7],[1809,7]]},"192":{"position":[[2171,7]]},"269":{"position":[[150,7]]},"280":{"position":[[565,7]]},"291":{"position":[[678,7]]},"302":{"position":[[678,7]]},"322":{"position":[[932,7]]},"326":{"position":[[951,7]]},"1462":{"position":[[540,7]]}},"keywords":{}}],["thereaft",{"_index":1304,"title":{},"content":{"88":{"position":[[575,10]]}},"keywords":{}}],["thereduct",{"_index":1940,"title":{},"content":{"164":{"position":[[796,12]]}},"keywords":{}}],["therefor",{"_index":3058,"title":{},"content":{"309":{"position":[[522,10]]},"321":{"position":[[878,10]]},"1439":{"position":[[1587,9]]},"1477":{"position":[[1450,9],[3616,9]]}},"keywords":{}}],["thereplica",{"_index":4686,"title":{},"content":{"785":{"position":[[521,10]]}},"keywords":{}}],["there’",{"_index":2502,"title":{},"content":{"236":{"position":[[515,7]]},"296":{"position":[[6569,7]]},"313":{"position":[[3068,7]]},"319":{"position":[[264,7]]}},"keywords":{}}],["thes3:putobject",{"_index":5715,"title":{},"content":{"1142":{"position":[[161,15]]},"1168":{"position":[[161,15]]}},"keywords":{}}],["thesourcecaptur",{"_index":1711,"title":{},"content":{"126":{"position":[[157,16]]}},"keywords":{}}],["thestorag",{"_index":2021,"title":{},"content":{"173":{"position":[[765,10]]}},"keywords":{}}],["they'll",{"_index":2458,"title":{},"content":{"221":{"position":[[1524,7]]}},"keywords":{}}],["they'r",{"_index":705,"title":{},"content":{"38":{"position":[[545,7]]},"41":{"position":[[103,7]]},"72":{"position":[[501,7]]},"103":{"position":[[294,7]]},"112":{"position":[[659,7]]},"166":{"position":[[549,7]]},"180":{"position":[[224,7]]},"190":{"position":[[476,7]]},"228":{"position":[[413,7]]},"229":{"position":[[298,7]]},"277":{"position":[[1058,7]]},"281":{"position":[[2350,7],[2531,7]]},"284":{"position":[[522,7]]},"332":{"position":[[696,7]]}},"keywords":{}}],["they’r",{"_index":210,"title":{},"content":{"6":{"position":[[269,7]]},"114":{"position":[[753,7]]},"156":{"position":[[652,7]]}},"keywords":{}}],["thing",{"_index":299,"title":{},"content":{"11":{"position":[[326,6]]},"100":{"position":[[405,6],[462,8]]},"160":{"position":[[79,6]]},"190":{"position":[[1301,6]]},"232":{"position":[[902,7]]},"234":{"position":[[60,7]]},"281":{"position":[[1775,5]]},"296":{"position":[[4135,6]]},"315":{"position":[[614,6]]},"323":{"position":[[249,6]]},"849":{"position":[[1632,5]]}},"keywords":{}}],["thing"",{"_index":6497,"title":{},"content":{"1440":{"position":[[1542,11]]}},"keywords":{}}],["think",{"_index":628,"title":{},"content":{"27":{"position":[[309,5]]},"90":{"position":[[210,5]]},"164":{"position":[[939,5]]},"320":{"position":[[219,5]]},"321":{"position":[[183,5]]},"1178":{"position":[[348,5]]}},"keywords":{}}],["third",{"_index":699,"title":{"364":{"position":[[0,5]]}},"content":{"38":{"position":[[236,5]]},"53":{"position":[[38,5],[336,5]]},"88":{"position":[[441,5]]},"102":{"position":[[246,5]]},"161":{"position":[[1272,5]]},"206":{"position":[[985,6]]},"281":{"position":[[2661,5]]},"296":{"position":[[7378,5]]},"337":{"position":[[405,5]]},"364":{"position":[[46,5],[315,5],[372,5]]}},"keywords":{}}],["thorough",{"_index":6677,"title":{},"content":{"1473":{"position":[[247,8]]}},"keywords":{}}],["thoroughli",{"_index":1734,"title":{},"content":{"132":{"position":[[88,11]]}},"keywords":{}}],["those",{"_index":813,"title":{},"content":{"55":{"position":[[205,5]]},"75":{"position":[[440,5]]},"99":{"position":[[431,5]]},"124":{"position":[[300,5]]},"165":{"position":[[1716,5]]},"236":{"position":[[2715,5]]},"270":{"position":[[94,5]]},"278":{"position":[[245,5],[655,5]]},"281":{"position":[[2471,5]]},"307":{"position":[[302,5]]},"322":{"position":[[1114,5]]},"326":{"position":[[1051,5]]},"477":{"position":[[278,5]]},"598":{"position":[[200,5]]},"747":{"position":[[298,5]]},"869":{"position":[[375,5]]},"909":{"position":[[132,5]]},"911":{"position":[[432,5]]},"925":{"position":[[132,5]]},"927":{"position":[[432,5]]},"936":{"position":[[132,5]]},"938":{"position":[[432,5]]},"952":{"position":[[132,5]]},"954":{"position":[[432,5]]},"970":{"position":[[132,5]]},"972":{"position":[[432,5]]},"1391":{"position":[[933,5]]},"1437":{"position":[[125,5]]},"1438":{"position":[[475,5]]},"1439":{"position":[[198,5]]},"1452":{"position":[[2149,5]]},"1474":{"position":[[326,5]]}},"keywords":{}}],["though",{"_index":420,"title":{},"content":{"14":{"position":[[1,6]]},"109":{"position":[[612,6]]},"122":{"position":[[606,6]]},"215":{"position":[[87,6]]},"245":{"position":[[219,6]]},"326":{"position":[[321,7]]},"478":{"position":[[263,6]]},"599":{"position":[[263,6]]},"922":{"position":[[1469,6]]}},"keywords":{}}],["thought",{"_index":204,"title":{},"content":{"6":{"position":[[169,7]]},"1462":{"position":[[121,7]]}},"keywords":{}}],["thousand",{"_index":1452,"title":{},"content":{"101":{"position":[[369,9]]}},"keywords":{}}],["thread",{"_index":4265,"title":{},"content":{"595":{"position":[[316,7],[676,8]]},"1015":{"position":[[148,7],[225,8]]}},"keywords":{}}],["thread_priori",{"_index":6238,"title":{},"content":{"1292":{"position":[[6650,13]]},"1306":{"position":[[6650,13]]},"1329":{"position":[[6650,13]]}},"keywords":{}}],["threat",{"_index":2338,"title":{},"content":{"210":{"position":[[2540,7]]}},"keywords":{}}],["threaten",{"_index":2327,"title":{},"content":{"210":{"position":[[2302,8]]}},"keywords":{}}],["three",{"_index":294,"title":{},"content":{"11":{"position":[[201,5]]},"23":{"position":[[108,5]]},"32":{"position":[[166,5]]},"56":{"position":[[2599,5]]},"81":{"position":[[716,5]]},"107":{"position":[[1149,5]]},"144":{"position":[[11,5]]},"154":{"position":[[770,5]]},"183":{"position":[[2178,5]]},"189":{"position":[[1020,5]]},"197":{"position":[[789,5]]},"207":{"position":[[1596,5]]},"208":{"position":[[89,5]]},"216":{"position":[[122,5]]},"232":{"position":[[333,5]]},"239":{"position":[[1703,5]]},"320":{"position":[[2013,5]]},"385":{"position":[[284,5]]},"595":{"position":[[124,5]]}},"keywords":{}}],["threshold",{"_index":111,"title":{},"content":{"3":{"position":[[258,10]]},"419":{"position":[[1916,10],[2040,9]]},"441":{"position":[[525,10],[649,9]]},"504":{"position":[[1545,10],[1669,9]]},"547":{"position":[[1918,10],[2042,9]]},"577":{"position":[[53,10],[101,9],[229,10],[532,10]]},"588":{"position":[[48,10],[96,9],[224,10],[527,10]]},"639":{"position":[[1543,10],[1667,9]]},"1023":{"position":[[1899,10],[2023,9]]}},"keywords":{}}],["through",{"_index":8,"title":{},"content":{"1":{"position":[[90,7]]},"11":{"position":[[782,7],[1518,8],[1698,8]]},"45":{"position":[[434,7]]},"69":{"position":[[907,7]]},"81":{"position":[[270,7],[1870,7]]},"83":{"position":[[501,7]]},"84":{"position":[[322,7],[1067,8]]},"90":{"position":[[498,7]]},"95":{"position":[[225,7]]},"100":{"position":[[792,7]]},"109":{"position":[[747,7]]},"110":{"position":[[313,7]]},"119":{"position":[[169,7],[459,7]]},"120":{"position":[[2478,7]]},"135":{"position":[[816,7]]},"138":{"position":[[1238,7]]},"141":{"position":[[1321,7]]},"142":{"position":[[1215,7]]},"149":{"position":[[150,7]]},"154":{"position":[[1844,7]]},"163":{"position":[[228,7]]},"169":{"position":[[39,7]]},"192":{"position":[[1825,7]]},"197":{"position":[[123,7]]},"206":{"position":[[590,7],[905,7]]},"212":{"position":[[242,7]]},"213":{"position":[[80,7]]},"216":{"position":[[532,7]]},"221":{"position":[[1988,7]]},"228":{"position":[[1433,7]]},"230":{"position":[[1207,7]]},"243":{"position":[[236,7]]},"253":{"position":[[39,7]]},"266":{"position":[[173,7]]},"267":{"position":[[662,7]]},"277":{"position":[[1209,7]]},"278":{"position":[[769,7]]},"281":{"position":[[1901,7],[3261,7]]},"286":{"position":[[113,7]]},"288":{"position":[[106,7]]},"289":{"position":[[588,7]]},"295":{"position":[[1468,7]]},"299":{"position":[[106,7]]},"300":{"position":[[535,7]]},"313":{"position":[[39,7]]},"319":{"position":[[597,7]]},"322":{"position":[[558,7]]},"323":{"position":[[1889,7]]},"324":{"position":[[1234,7]]},"370":{"position":[[1553,7]]},"381":{"position":[[597,7]]},"385":{"position":[[323,7]]},"401":{"position":[[56,7]]},"421":{"position":[[44,7],[196,7]]},"436":{"position":[[1153,7]]},"443":{"position":[[555,7]]},"451":{"position":[[44,7],[205,7]]},"457":{"position":[[44,7],[209,7]]},"463":{"position":[[44,7],[315,7]]},"470":{"position":[[78,7]]},"494":{"position":[[22,7]]},"506":{"position":[[472,7]]},"512":{"position":[[232,7]]},"521":{"position":[[385,7]]},"529":{"position":[[764,7]]},"537":{"position":[[221,7]]},"550":{"position":[[469,7]]},"556":{"position":[[1902,7]]},"563":{"position":[[57,7]]},"568":{"position":[[279,7]]},"580":{"position":[[221,7]]},"581":{"position":[[369,7]]},"605":{"position":[[427,7]]},"609":{"position":[[108,7]]},"622":{"position":[[44,7],[433,7]]},"628":{"position":[[44,7],[497,7]]},"640":{"position":[[19,7]]},"649":{"position":[[95,7]]},"667":{"position":[[44,7],[282,7]]},"682":{"position":[[44,7],[253,7]]},"697":{"position":[[44,7],[622,7]]},"703":{"position":[[187,7]]},"709":{"position":[[44,7],[875,7]]},"715":{"position":[[244,7]]},"738":{"position":[[799,7]]},"744":{"position":[[44,7],[189,7]]},"747":{"position":[[1224,7]]},"780":{"position":[[351,7]]},"854":{"position":[[138,7]]},"882":{"position":[[44,7],[149,7]]},"888":{"position":[[44,7],[204,7]]},"956":{"position":[[44,7],[225,7]]},"964":{"position":[[69,7]]},"979":{"position":[[44,7],[299,7]]},"989":{"position":[[709,7]]},"994":{"position":[[44,7],[157,7]]},"1004":{"position":[[792,7]]},"1007":{"position":[[80,7]]},"1012":{"position":[[44,7],[284,7]]},"1025":{"position":[[431,7]]},"1065":{"position":[[156,7]]},"1073":{"position":[[44,7],[408,7]]},"1080":{"position":[[865,7]]},"1099":{"position":[[44,7],[529,7]]},"1104":{"position":[[44,7],[227,7]]},"1110":{"position":[[44,7],[547,7]]},"1128":{"position":[[44,7],[464,7]]},"1133":{"position":[[1440,7]]},"1138":{"position":[[844,7]]},"1189":{"position":[[433,7]]},"1197":{"position":[[439,7]]},"1207":{"position":[[522,7]]},"1243":{"position":[[1122,7]]},"1248":{"position":[[466,7]]},"1357":{"position":[[371,7]]},"1387":{"position":[[472,7],[1098,7]]},"1421":{"position":[[459,7]]},"1438":{"position":[[306,7],[763,7]]},"1447":{"position":[[137,7]]},"1452":{"position":[[1373,7],[1462,7],[1499,7],[4345,7],[4478,7]]},"1465":{"position":[[154,7]]},"1471":{"position":[[1141,7]]}},"keywords":{}}],["throughout",{"_index":1739,"title":{},"content":{"133":{"position":[[189,10]]},"211":{"position":[[98,10]]},"1203":{"position":[[186,10]]}},"keywords":{}}],["throughput",{"_index":74,"title":{},"content":{"2":{"position":[[179,10]]},"8":{"position":[[592,10],[655,10]]},"19":{"position":[[454,10]]},"49":{"position":[[162,10]]},"197":{"position":[[573,10]]},"198":{"position":[[986,10],[1089,11]]},"210":{"position":[[340,10]]},"330":{"position":[[66,11]]},"1474":{"position":[[285,10]]}},"keywords":{}}],["throw",{"_index":3017,"title":{},"content":{"296":{"position":[[5542,5],[5655,5]]},"315":{"position":[[1662,5]]},"1464":{"position":[[302,5]]},"1466":{"position":[[283,5]]},"1467":{"position":[[626,5]]}},"keywords":{}}],["thu",{"_index":1298,"title":{},"content":{"88":{"position":[[240,4]]},"132":{"position":[[73,4]]},"320":{"position":[[440,5]]},"326":{"position":[[1009,4]]},"764":{"position":[[587,4]]},"777":{"position":[[587,4]]},"804":{"position":[[585,4]]},"819":{"position":[[585,4]]},"835":{"position":[[585,4]]},"872":{"position":[[85,4]]},"922":{"position":[[770,4],[1308,4],[3076,4]]},"1431":{"position":[[17,4]]},"1440":{"position":[[869,4]]},"1442":{"position":[[1536,4]]},"1443":{"position":[[634,4]]}},"keywords":{}}],["thumbnail",{"_index":3961,"title":{},"content":{"517":{"position":[[2881,9]]}},"keywords":{}}],["thumbnail_data_url",{"_index":3964,"title":{},"content":{"517":{"position":[[2967,18]]}},"keywords":{}}],["thumbnail_url",{"_index":3963,"title":{},"content":{"517":{"position":[[2929,13]]}},"keywords":{}}],["thursday",{"_index":6538,"title":{},"content":{"1452":{"position":[[1490,8],[4413,9],[4469,8]]}},"keywords":{}}],["ti",{"_index":6239,"title":{},"content":{"1292":{"position":[[6691,4]]},"1306":{"position":[[6691,4]]},"1329":{"position":[[6691,4]]},"1370":{"position":[[1121,4]]},"1437":{"position":[[1120,3]]}},"keywords":{}}],["ti+1",{"_index":6481,"title":{},"content":{"1437":{"position":[[1165,5]]}},"keywords":{}}],["ti+1.n",{"_index":6480,"title":{},"content":{"1437":{"position":[[1090,6]]}},"keywords":{}}],["ti.zombi",{"_index":6479,"title":{},"content":{"1437":{"position":[[1036,9]]}},"keywords":{}}],["tick",{"_index":5411,"title":{},"content":{"1118":{"position":[[534,4]]}},"keywords":{}}],["ticket",{"_index":5510,"title":{},"content":{"1134":{"position":[[2860,7]]}},"keywords":{}}],["ticket_audit",{"_index":5496,"title":{},"content":{"1134":{"position":[[2060,13]]}},"keywords":{}}],["ticket_com",{"_index":5498,"title":{},"content":{"1134":{"position":[[2173,15]]}},"keywords":{}}],["ticket_field",{"_index":5500,"title":{},"content":{"1134":{"position":[[2290,13]]}},"keywords":{}}],["ticket_form",{"_index":5502,"title":{},"content":{"1134":{"position":[[2403,12]]}},"keywords":{}}],["ticket_metr",{"_index":5504,"title":{},"content":{"1134":{"position":[[2514,14]]}},"keywords":{}}],["ticket_metric_ev",{"_index":5506,"title":{},"content":{"1134":{"position":[[2629,20]]}},"keywords":{}}],["ticket_skip",{"_index":5508,"title":{},"content":{"1134":{"position":[[2749,12]]}},"keywords":{}}],["tie",{"_index":997,"title":{},"content":{"67":{"position":[[252,3]]}},"keywords":{}}],["tier",{"_index":1972,"title":{},"content":{"168":{"position":[[76,4]]},"203":{"position":[[369,4]]},"577":{"position":[[300,5]]},"588":{"position":[[295,5]]},"987":{"position":[[171,5]]},"1002":{"position":[[171,5]]},"1456":{"position":[[178,4]]},"1461":{"position":[[2660,5]]}},"keywords":{}}],["tighten",{"_index":1896,"title":{},"content":{"161":{"position":[[541,7]]},"218":{"position":[[1424,7]]},"259":{"position":[[977,7],[2558,7]]},"290":{"position":[[1428,7]]},"301":{"position":[[1524,7]]}},"keywords":{}}],["tiktok",{"_index":5333,"title":{"1079":{"position":[[0,6]]}},"content":{"1082":{"position":[[15,6],[148,6]]},"1083":{"position":[[32,6],[148,6]]},"1084":{"position":[[250,6]]},"1085":{"position":[[1413,6]]},"1086":{"position":[[171,6]]}},"keywords":{}}],["tile",{"_index":1811,"title":{},"content":{"140":{"position":[[152,4]]},"190":{"position":[[200,6],[226,4]]},"192":{"position":[[158,6],[185,4]]},"218":{"position":[[112,4]]},"290":{"position":[[360,4]]},"291":{"position":[[138,4]]},"301":{"position":[[306,4]]},"302":{"position":[[138,4]]},"1448":{"position":[[1043,4]]}},"keywords":{}}],["till",{"_index":5341,"title":{},"content":{"1085":{"position":[[953,4]]}},"keywords":{}}],["time",{"_index":43,"title":{"178":{"position":[[14,4]]},"194":{"position":[[5,4]]},"210":{"position":[[5,4]]},"241":{"position":[[6,6]]},"325":{"position":[[45,4]]},"373":{"position":[[5,4]]},"641":{"position":[[15,4]]},"754":{"position":[[20,4]]},"785":{"position":[[18,4]]},"794":{"position":[[18,4]]},"809":{"position":[[18,4]]},"825":{"position":[[18,4]]},"976":{"position":[[16,4]]},"984":{"position":[[18,4]]},"1008":{"position":[[13,4]]},"1286":{"position":[[18,4]]},"1291":{"position":[[7,6]]},"1301":{"position":[[18,4]]},"1305":{"position":[[7,6]]},"1325":{"position":[[18,4]]},"1328":{"position":[[7,6]]},"1453":{"position":[[0,6]]},"1478":{"position":[[0,4]]},"1479":{"position":[[17,4]]}},"content":{"1":{"position":[[549,4],[835,4]]},"3":{"position":[[766,4],[1005,4]]},"8":{"position":[[440,4]]},"11":{"position":[[23,5]]},"13":{"position":[[627,4]]},"14":{"position":[[364,4],[530,4],[785,4]]},"16":{"position":[[1309,4]]},"34":{"position":[[180,4]]},"41":{"position":[[98,4]]},"49":{"position":[[472,4]]},"50":{"position":[[300,5]]},"52":{"position":[[98,4]]},"53":{"position":[[231,4]]},"56":{"position":[[2165,4],[2340,4]]},"67":{"position":[[1505,4]]},"68":{"position":[[1049,4]]},"77":{"position":[[22,4]]},"82":{"position":[[159,4]]},"88":{"position":[[306,4],[565,5]]},"94":{"position":[[1562,4],[1665,4],[1912,4],[2014,4]]},"101":{"position":[[490,4]]},"105":{"position":[[930,5]]},"106":{"position":[[563,5]]},"109":{"position":[[125,6],[238,4]]},"110":{"position":[[113,4],[452,5]]},"111":{"position":[[211,5]]},"114":{"position":[[288,4]]},"115":{"position":[[771,4]]},"119":{"position":[[27,4]]},"120":{"position":[[1114,4],[1217,4],[1464,4],[1566,4],[2364,5]]},"121":{"position":[[163,5]]},"126":{"position":[[151,5]]},"133":{"position":[[93,6]]},"138":{"position":[[2089,4],[2114,4],[2238,4],[2643,5],[2692,4]]},"141":{"position":[[2045,4],[2070,4],[2194,4],[2233,5],[2282,4]]},"142":{"position":[[2149,4],[2174,4],[2298,4],[2720,5],[2769,4]]},"146":{"position":[[253,4]]},"149":{"position":[[262,4]]},"152":{"position":[[269,4]]},"158":{"position":[[59,5],[173,4],[686,4]]},"163":{"position":[[870,4]]},"164":{"position":[[1186,4]]},"175":{"position":[[247,5]]},"180":{"position":[[168,5],[337,4]]},"183":{"position":[[4599,4],[4661,5]]},"189":{"position":[[182,5],[724,4]]},"193":{"position":[[230,5]]},"196":{"position":[[124,4],[356,4]]},"197":{"position":[[237,4]]},"198":{"position":[[514,4],[606,4],[692,5],[736,4],[1102,4],[1123,4]]},"205":{"position":[[350,4]]},"207":{"position":[[170,4]]},"209":{"position":[[665,5]]},"210":{"position":[[2226,4],[2461,4],[2901,4]]},"211":{"position":[[239,5]]},"232":{"position":[[801,4]]},"233":{"position":[[124,4],[363,4]]},"236":{"position":[[3786,4]]},"239":{"position":[[773,4]]},"240":{"position":[[3246,4],[4332,4],[4954,4]]},"252":{"position":[[171,4]]},"255":{"position":[[1035,4]]},"271":{"position":[[280,4]]},"275":{"position":[[1013,4]]},"278":{"position":[[155,4],[1349,5]]},"279":{"position":[[551,4],[764,4]]},"284":{"position":[[710,4],[741,5]]},"289":{"position":[[108,5]]},"292":{"position":[[250,4]]},"294":{"position":[[169,5]]},"300":{"position":[[108,5]]},"303":{"position":[[241,4]]},"305":{"position":[[46,4]]},"312":{"position":[[175,4]]},"316":{"position":[[1360,4]]},"320":{"position":[[198,4]]},"321":{"position":[[928,4]]},"322":{"position":[[774,4],[923,5],[1625,5],[1930,5]]},"323":{"position":[[883,5],[1930,5]]},"324":{"position":[[747,7]]},"325":{"position":[[13,4],[164,5],[182,4],[402,4],[588,4],[649,4],[742,4]]},"326":{"position":[[1041,6]]},"329":{"position":[[891,4]]},"331":{"position":[[263,4]]},"333":{"position":[[263,5]]},"343":{"position":[[392,4],[518,4],[600,4],[882,4],[990,4]]},"351":{"position":[[209,4]]},"363":{"position":[[148,5],[1498,5],[1997,4]]},"364":{"position":[[203,4]]},"373":{"position":[[176,4],[450,4],[624,5],[688,4],[857,4],[1072,4]]},"375":{"position":[[95,5]]},"377":{"position":[[384,4],[413,4],[692,4],[924,4]]},"379":{"position":[[317,4],[447,4],[587,4]]},"410":{"position":[[134,5],[159,4]]},"417":{"position":[[449,4]]},"419":{"position":[[1073,5]]},"424":{"position":[[221,4]]},"427":{"position":[[266,5]]},"438":{"position":[[449,4]]},"440":{"position":[[1089,5]]},"454":{"position":[[411,4]]},"460":{"position":[[225,4]]},"502":{"position":[[909,4]]},"509":{"position":[[384,5]]},"517":{"position":[[2129,4],[2144,4]]},"529":{"position":[[241,4]]},"545":{"position":[[449,4]]},"547":{"position":[[1074,5]]},"556":{"position":[[330,4]]},"560":{"position":[[81,4],[176,4]]},"577":{"position":[[211,4]]},"578":{"position":[[124,4]]},"584":{"position":[[969,4],[1007,4]]},"588":{"position":[[206,4]]},"595":{"position":[[1414,4]]},"631":{"position":[[225,4],[364,4]]},"646":{"position":[[263,4]]},"654":{"position":[[465,4]]},"660":{"position":[[174,6]]},"670":{"position":[[521,4]]},"685":{"position":[[345,4]]},"700":{"position":[[173,4]]},"706":{"position":[[173,4]]},"741":{"position":[[288,4]]},"747":{"position":[[232,4],[444,4],[476,5]]},"752":{"position":[[1020,4]]},"754":{"position":[[105,4],[336,4],[431,4],[672,4],[732,5],[848,4],[903,4],[942,4],[1171,4]]},"757":{"position":[[625,4]]},"764":{"position":[[310,5]]},"770":{"position":[[625,4]]},"777":{"position":[[310,5]]},"789":{"position":[[1079,4]]},"791":{"position":[[1054,4]]},"794":{"position":[[209,4],[304,4],[878,4],[938,5],[1054,4],[1109,4],[1148,4],[1375,4]]},"797":{"position":[[625,4]]},"804":{"position":[[308,5]]},"809":{"position":[[209,4],[304,4],[878,4],[938,5],[1054,4],[1109,4],[1148,4],[1375,4]]},"812":{"position":[[625,4]]},"819":{"position":[[308,5]]},"825":{"position":[[209,4],[304,4],[714,4],[774,5],[890,4],[945,4],[984,4],[1211,4]]},"828":{"position":[[625,4]]},"835":{"position":[[308,5]]},"842":{"position":[[2122,4],[2801,4]]},"847":{"position":[[205,4]]},"859":{"position":[[516,4]]},"869":{"position":[[1164,4],[1266,5]]},"870":{"position":[[140,4],[425,5],[942,4]]},"885":{"position":[[474,4]]},"891":{"position":[[177,4],[311,4]]},"922":{"position":[[3271,5]]},"945":{"position":[[951,4]]},"976":{"position":[[10,4],[116,5],[256,4]]},"977":{"position":[[211,4],[335,4],[593,4],[679,4]]},"989":{"position":[[934,4]]},"990":{"position":[[255,4]]},"1004":{"position":[[1017,4]]},"1008":{"position":[[51,4],[135,4],[273,4],[491,4],[551,5]]},"1015":{"position":[[287,4]]},"1020":{"position":[[102,5],[333,5],[401,4],[514,4],[620,4]]},"1021":{"position":[[1495,4]]},"1023":{"position":[[1054,5]]},"1028":{"position":[[96,4],[234,4]]},"1036":{"position":[[198,4],[1037,5]]},"1070":{"position":[[672,4]]},"1076":{"position":[[634,4]]},"1077":{"position":[[331,5],[635,4]]},"1113":{"position":[[225,4]]},"1118":{"position":[[1217,5]]},"1134":{"position":[[2687,4]]},"1140":{"position":[[1428,4]]},"1164":{"position":[[366,5],[595,5],[681,4]]},"1172":{"position":[[525,5],[619,5],[625,4]]},"1209":{"position":[[562,4]]},"1222":{"position":[[525,5],[619,5],[625,4]]},"1285":{"position":[[637,4]]},"1286":{"position":[[151,4],[167,5],[238,4],[361,4],[935,4],[995,5],[1111,4],[1166,4],[1205,4],[1390,4],[1398,4],[1461,4]]},"1291":{"position":[[10,4],[81,4]]},"1292":{"position":[[6729,4]]},"1300":{"position":[[637,4]]},"1301":{"position":[[151,4],[167,5],[238,4],[361,4],[771,4],[831,5],[947,4],[1002,4],[1041,4],[1226,4],[1234,4],[1297,4]]},"1305":{"position":[[10,4],[81,4]]},"1306":{"position":[[6729,4]]},"1316":{"position":[[1428,4]]},"1317":{"position":[[795,4],[881,4]]},"1324":{"position":[[637,4]]},"1325":{"position":[[151,4],[167,5],[238,4],[361,4],[935,4],[995,5],[1111,4],[1166,4],[1205,4],[1390,4],[1398,4],[1461,4]]},"1328":{"position":[[10,4],[81,4]]},"1329":{"position":[[6729,4]]},"1340":{"position":[[1428,4]]},"1341":{"position":[[795,4],[881,4]]},"1351":{"position":[[1428,4]]},"1352":{"position":[[795,4],[881,4]]},"1356":{"position":[[769,4],[1295,4]]},"1359":{"position":[[408,4]]},"1379":{"position":[[4580,4]]},"1388":{"position":[[307,5]]},"1391":{"position":[[717,5]]},"1403":{"position":[[4580,4]]},"1414":{"position":[[4580,4]]},"1429":{"position":[[64,4],[543,4],[718,7],[865,9]]},"1431":{"position":[[1451,4]]},"1432":{"position":[[809,4],[909,4]]},"1434":{"position":[[453,4]]},"1439":{"position":[[895,6]]},"1451":{"position":[[724,5]]},"1452":{"position":[[122,5],[449,4],[623,4],[674,4],[749,4],[754,4],[848,4],[968,4],[973,4],[1063,4],[2702,5],[2800,5],[2847,4],[2861,4],[2936,4],[3019,4],[3043,4],[3078,6],[3137,4],[3199,4],[3245,4],[3308,4],[3516,4],[3616,5],[3642,5],[3922,5],[3947,4],[4004,5]]},"1453":{"position":[[21,6],[153,6],[197,5],[316,6],[380,5],[500,5],[845,4],[1111,4]]},"1455":{"position":[[182,4]]},"1459":{"position":[[735,5],[975,4]]},"1464":{"position":[[326,5]]},"1466":{"position":[[307,5]]},"1467":{"position":[[650,5]]},"1471":{"position":[[701,5],[780,4],[954,4],[1057,4]]},"1475":{"position":[[120,4],[460,4]]},"1476":{"position":[[1151,5]]},"1479":{"position":[[338,4],[367,4],[545,4]]},"1480":{"position":[[820,4],[923,4],[1170,4],[1272,4]]},"1481":{"position":[[84,4],[94,4],[148,4],[158,4]]}},"keywords":{}}],["time"",{"_index":5028,"title":{},"content":{"912":{"position":[[1463,10]]}},"keywords":{}}],["time_incr",{"_index":3953,"title":{},"content":{"517":{"position":[[2113,15]]}},"keywords":{}}],["time_zon",{"_index":4591,"title":{},"content":{"750":{"position":[[1093,9]]},"752":{"position":[[1076,9]]},"754":{"position":[[11,9],[275,9],[624,9],[813,9],[1053,9]]},"757":{"position":[[460,11],[510,11],[684,11]]},"766":{"position":[[1093,9]]},"770":{"position":[[460,11],[510,11],[684,11]]},"789":{"position":[[1494,9]]},"791":{"position":[[1110,9]]},"794":{"position":[[9,9],[148,9],[722,9],[830,9],[1019,9],[1257,9]]},"797":{"position":[[460,11],[510,11],[684,11]]},"807":{"position":[[1081,9]]},"809":{"position":[[9,9],[148,9],[722,9],[830,9],[1019,9],[1257,9]]},"812":{"position":[[460,11],[510,11],[684,11]]},"823":{"position":[[1081,9]]},"825":{"position":[[9,9],[148,9],[666,9],[855,9],[1093,9]]},"828":{"position":[[460,11],[510,11],[684,11]]},"1267":{"position":[[500,11],[550,11]]},"1285":{"position":[[522,11],[572,11],[696,11]]},"1286":{"position":[[9,9],[177,9],[779,9],[887,9],[1076,9],[1318,9]]},"1300":{"position":[[522,11],[572,11],[696,11]]},"1301":{"position":[[9,9],[177,9],[723,9],[912,9],[1154,9]]},"1324":{"position":[[522,11],[572,11],[696,11]]},"1325":{"position":[[9,9],[177,9],[779,9],[887,9],[1076,9],[1318,9]]}},"keywords":{}}],["timefram",{"_index":6582,"title":{},"content":{"1455":{"position":[[559,10]]}},"keywords":{}}],["timeli",{"_index":2175,"title":{},"content":{"196":{"position":[[523,10]]},"233":{"position":[[530,10]]}},"keywords":{}}],["timelineschatsshortcutstriggersbansdepartmentsgoalsskillsrolesrout",{"_index":5385,"title":{},"content":{"1104":{"position":[[90,69]]}},"keywords":{}}],["timeout",{"_index":2521,"title":{},"content":{"236":{"position":[[1003,8]]},"387":{"position":[[1096,7],[1106,7]]},"410":{"position":[[243,8]]},"842":{"position":[[2705,7],[2713,7]]}},"keywords":{}}],["timer",{"_index":1583,"title":{},"content":{"110":{"position":[[1424,7]]}},"keywords":{}}],["times.with",{"_index":5195,"title":{},"content":{"1020":{"position":[[1356,10]]}},"keywords":{}}],["timescal",{"_index":6416,"title":{},"content":{"1425":{"position":[[146,9]]}},"keywords":{}}],["timescaledb",{"_index":5431,"title":{"1424":{"position":[[0,11]]},"1429":{"position":[[9,11]]}},"content":{"1120":{"position":[[1960,11]]},"1425":{"position":[[40,11]]},"1426":{"position":[[113,11]]},"1429":{"position":[[38,11]]},"1431":{"position":[[22,12]]},"1432":{"position":[[621,13],[866,13]]}},"keywords":{}}],["timescaledb:dev",{"_index":5432,"title":{},"content":{"1120":{"position":[[2023,15]]},"1428":{"position":[[98,15]]}},"keywords":{}}],["timestamp",{"_index":455,"title":{"1393":{"position":[[0,9]]}},"content":{"16":{"position":[[210,11]]},"67":{"position":[[715,9],[1064,9],[1238,9],[1846,9],[2052,9]]},"107":{"position":[[3131,9]]},"110":{"position":[[1118,9],[1218,9]]},"156":{"position":[[402,11]]},"183":{"position":[[3207,9]]},"236":{"position":[[2506,9],[3291,9]]},"263":{"position":[[365,9]]},"279":{"position":[[636,9]]},"406":{"position":[[220,10]]},"417":{"position":[[396,10]]},"438":{"position":[[396,10]]},"480":{"position":[[530,11],[676,11]]},"502":{"position":[[856,10]]},"545":{"position":[[396,10]]},"595":{"position":[[718,9]]},"821":{"position":[[1245,11],[1383,11]]},"1009":{"position":[[1648,9]]},"1021":{"position":[[1433,10]]},"1077":{"position":[[739,10]]},"1140":{"position":[[1487,9]]},"1172":{"position":[[531,9]]},"1209":{"position":[[579,9]]},"1222":{"position":[[531,9]]},"1292":{"position":[[6776,9]]},"1306":{"position":[[6776,9]]},"1316":{"position":[[1487,9]]},"1329":{"position":[[6776,9]]},"1340":{"position":[[1487,9]]},"1351":{"position":[[1487,9]]},"1379":{"position":[[4635,9]]},"1393":{"position":[[19,9]]},"1403":{"position":[[4635,9]]},"1414":{"position":[[4635,9]]},"1429":{"position":[[686,9]]},"1431":{"position":[[1510,9]]},"1459":{"position":[[361,10]]},"1475":{"position":[[338,9]]}},"keywords":{}}],["timestamp_column",{"_index":6423,"title":{},"content":{"1429":{"position":[[380,20],[477,18]]}},"keywords":{}}],["timestamp_ltz",{"_index":6400,"title":{},"content":{"1393":{"position":[[50,13],[101,13]]}},"keywords":{}}],["timestamp_ntz",{"_index":6404,"title":{},"content":{"1393":{"position":[[286,14]]}},"keywords":{}}],["timestamp_type_map",{"_index":6402,"title":{},"content":{"1393":{"position":[[144,22],[332,22]]}},"keywords":{}}],["timestamp_tz",{"_index":6403,"title":{},"content":{"1393":{"position":[[191,13],[234,12]]}},"keywords":{}}],["timestampadd",{"_index":6246,"title":{},"content":{"1292":{"position":[[6809,12]]},"1306":{"position":[[6809,12]]},"1329":{"position":[[6809,12]]}},"keywords":{}}],["timestampdiff",{"_index":6219,"title":{},"content":{"1292":{"position":[[6119,13]]},"1306":{"position":[[6119,13]]},"1329":{"position":[[6119,13]]}},"keywords":{}}],["timestamptz",{"_index":433,"title":{},"content":{"14":{"position":[[709,13]]},"1164":{"position":[[372,11]]}},"keywords":{}}],["timezon",{"_index":4559,"title":{},"content":{"745":{"position":[[114,9]]},"747":{"position":[[435,8],[506,8]]},"750":{"position":[[1205,8]]},"754":{"position":[[524,8],[541,8],[1001,8],[1191,8],[1240,8],[1313,8]]},"757":{"position":[[340,9],[350,8],[359,8]]},"766":{"position":[[1205,8]]},"770":{"position":[[340,9],[350,8],[359,8]]},"789":{"position":[[1606,8]]},"794":{"position":[[566,8],[583,8],[1205,8],[1395,8],[1444,8],[1517,8]]},"797":{"position":[[340,9],[350,8],[359,8]]},"807":{"position":[[1193,8]]},"809":{"position":[[566,8],[583,8],[1205,8],[1395,8],[1444,8],[1517,8]]},"812":{"position":[[340,9],[350,8],[359,8]]},"823":{"position":[[1193,8]]},"825":{"position":[[566,8],[583,8],[1041,8],[1231,8],[1280,8],[1353,8]]},"828":{"position":[[340,9],[350,8],[359,8]]},"1267":{"position":[[376,9],[386,8],[395,8]]},"1285":{"position":[[398,9],[408,8],[417,8]]},"1286":{"position":[[289,8],[623,8],[640,8],[1266,8],[1481,8],[1530,8],[1603,8]]},"1300":{"position":[[398,9],[408,8],[417,8]]},"1301":{"position":[[289,8],[623,8],[640,8],[1102,8],[1317,8],[1366,8],[1439,8]]},"1324":{"position":[[398,9],[408,8],[417,8]]},"1325":{"position":[[289,8],[623,8],[640,8],[1266,8],[1481,8],[1530,8],[1603,8]]},"1452":{"position":[[576,9],[586,8],[595,8],[3118,8],[3161,9],[3364,8],[3896,9]]}},"keywords":{}}],["timezone_hour",{"_index":5586,"title":{},"content":{"1140":{"position":[[1530,13]]},"1316":{"position":[[1530,13]]},"1340":{"position":[[1530,13]]},"1351":{"position":[[1530,13]]},"1379":{"position":[[4688,13]]},"1403":{"position":[[4688,13]]},"1414":{"position":[[4688,13]]},"1431":{"position":[[1553,13]]}},"keywords":{}}],["timezone_minu",{"_index":6352,"title":{},"content":{"1379":{"position":[[4741,13]]},"1403":{"position":[[4741,13]]},"1414":{"position":[[4741,13]]}},"keywords":{}}],["timezone_minut",{"_index":5588,"title":{},"content":{"1140":{"position":[[1578,15]]},"1316":{"position":[[1578,15]]},"1340":{"position":[[1578,15]]},"1351":{"position":[[1578,15]]},"1431":{"position":[[1601,15]]}},"keywords":{}}],["tinybird",{"_index":5407,"title":{"1117":{"position":[[0,8]]}},"content":{"1116":{"position":[[1,8]]},"1118":{"position":[[38,8],[99,8],[150,8],[228,8],[864,9],[1112,9],[1188,8]]}},"keywords":{}}],["tinyblob",{"_index":6221,"title":{},"content":{"1292":{"position":[[6170,8]]},"1306":{"position":[[6170,8]]},"1329":{"position":[[6170,8]]}},"keywords":{}}],["tinyint",{"_index":6223,"title":{},"content":{"1292":{"position":[[6209,7]]},"1306":{"position":[[6209,7]]},"1329":{"position":[[6209,7]]}},"keywords":{}}],["tinytext",{"_index":6226,"title":{},"content":{"1292":{"position":[[6253,8]]},"1306":{"position":[[6253,8]]},"1329":{"position":[[6253,8]]}},"keywords":{}}],["tip",{"_index":1212,"title":{"131":{"position":[[0,5]]}},"content":{"83":{"position":[[188,3]]},"97":{"position":[[749,3]]},"131":{"position":[[15,4]]},"150":{"position":[[174,3]]},"161":{"position":[[1012,3]]},"182":{"position":[[297,3]]},"217":{"position":[[1540,3]]},"268":{"position":[[1471,3]]},"269":{"position":[[1042,3]]},"290":{"position":[[1512,3]]},"635":{"position":[[233,3]]},"750":{"position":[[1248,3]]},"753":{"position":[[782,3]]},"780":{"position":[[188,3]]},"789":{"position":[[1649,3]]},"793":{"position":[[753,3]]},"915":{"position":[[1105,3]]},"963":{"position":[[1259,3]]},"1176":{"position":[[476,3]]},"1185":{"position":[[276,3]]},"1194":{"position":[[486,3]]},"1203":{"position":[[647,3]]},"1226":{"position":[[287,3]]},"1289":{"position":[[1177,3]]},"1298":{"position":[[1009,3]]},"1303":{"position":[[888,3]]},"1310":{"position":[[497,3]]},"1322":{"position":[[1396,3]]},"1335":{"position":[[1043,3]]},"1346":{"position":[[1009,3]]},"1354":{"position":[[311,3]]},"1382":{"position":[[530,3]]},"1452":{"position":[[2547,3]]}},"keywords":{}}],["titl",{"_index":1875,"title":{},"content":{"159":{"position":[[165,5],[260,6]]},"162":{"position":[[2027,6],[2216,6]]},"314":{"position":[[1260,6]]},"315":{"position":[[1135,7]]},"343":{"position":[[10,5]]},"351":{"position":[[21,5],[318,5]]},"359":{"position":[[90,5],[295,5]]},"370":{"position":[[238,5],[2003,5]]},"377":{"position":[[21,5],[1683,5]]},"387":{"position":[[201,5],[1332,5]]},"392":{"position":[[21,5],[682,5]]},"397":{"position":[[21,5],[824,5]]},"402":{"position":[[21,5],[648,5]]},"408":{"position":[[21,5],[525,5]]},"417":{"position":[[21,5],[2218,5]]},"424":{"position":[[21,5],[349,5]]},"432":{"position":[[21,5],[1192,5]]},"438":{"position":[[21,5],[1903,5],[1909,5]]},"448":{"position":[[201,5],[1219,5]]},"454":{"position":[[21,5],[538,5]]},"460":{"position":[[21,5],[555,5]]},"466":{"position":[[21,5],[266,5]]},"482":{"position":[[21,5],[498,5]]},"491":{"position":[[10,5]]},"492":{"position":[[10,5]]},"496":{"position":[[21,5],[531,5]]},"502":{"position":[[21,5],[1551,5]]},"509":{"position":[[21,5],[531,5]]},"517":{"position":[[492,5],[3954,5]]},"534":{"position":[[201,5],[1699,5]]},"540":{"position":[[21,5],[316,5]]},"545":{"position":[[21,5],[1613,5]]},"556":{"position":[[201,5],[2196,5]]},"564":{"position":[[21,5]]},"565":{"position":[[10,5]]},"573":{"position":[[205,5],[1275,5]]},"584":{"position":[[193,5],[1347,5]]},"593":{"position":[[21,5],[339,5]]},"601":{"position":[[21,5],[410,5]]},"611":{"position":[[201,5],[1186,5]]},"619":{"position":[[102,5],[588,5]]},"625":{"position":[[21,5],[160,5]]},"631":{"position":[[21,5],[491,5]]},"637":{"position":[[21,5],[1149,5]]},"646":{"position":[[374,5],[729,5]]},"654":{"position":[[95,5],[811,5]]},"664":{"position":[[10,5]]},"665":{"position":[[10,5]]},"670":{"position":[[21,5],[649,5]]},"679":{"position":[[10,5]]},"680":{"position":[[10,5]]},"685":{"position":[[179,5],[473,5]]},"694":{"position":[[10,5]]},"695":{"position":[[10,5]]},"700":{"position":[[21,5],[301,5]]},"706":{"position":[[21,5],[301,5]]},"712":{"position":[[21,5],[496,5]]},"720":{"position":[[201,5],[805,5]]},"728":{"position":[[10,5]]},"735":{"position":[[90,5],[388,5]]},"741":{"position":[[21,5],[478,5]]},"747":{"position":[[21,5],[1360,5]]},"757":{"position":[[21,5],[1910,5]]},"770":{"position":[[21,5],[1910,5]]},"782":{"position":[[21,5],[506,5]]},"797":{"position":[[21,5],[1910,5]]},"812":{"position":[[21,5],[1910,5]]},"828":{"position":[[21,5],[1910,5]]},"842":{"position":[[21,5],[587,5],[1037,5],[1285,5],[1883,5]]},"851":{"position":[[21,5],[581,5]]},"859":{"position":[[201,5],[728,5]]},"867":{"position":[[21,5],[2107,5]]},"879":{"position":[[21,5],[446,5],[1530,5]]},"885":{"position":[[21,5],[602,5]]},"891":{"position":[[21,5],[337,5]]},"897":{"position":[[21,5],[255,5]]},"907":{"position":[[21,5],[1410,5]]},"923":{"position":[[21,5],[1410,5]]},"934":{"position":[[21,5],[1410,5]]},"950":{"position":[[21,5],[1410,5]]},"959":{"position":[[21,5],[357,5]]},"968":{"position":[[21,5],[1410,5]]},"982":{"position":[[21,5],[359,5]]},"991":{"position":[[211,5],[782,5]]},"997":{"position":[[21,5],[327,5]]},"1008":{"position":[[646,6]]},"1009":{"position":[[211,5],[1521,5]]},"1015":{"position":[[21,5],[415,5]]},"1021":{"position":[[294,5],[2029,5]]},"1028":{"position":[[21,5],[362,5]]},"1034":{"position":[[10,5]]},"1035":{"position":[[10,5]]},"1045":{"position":[[21,5],[1029,5]]},"1053":{"position":[[21,5],[1029,5]]},"1061":{"position":[[21,5],[1029,5]]},"1070":{"position":[[201,5],[985,5]]},"1076":{"position":[[21,5],[768,5]]},"1085":{"position":[[257,5],[1359,5]]},"1094":{"position":[[21,5],[424,5]]},"1101":{"position":[[21,5],[258,5]]},"1107":{"position":[[21,5],[396,5]]},"1113":{"position":[[21,5],[458,5]]},"1125":{"position":[[21,5],[504,5]]},"1133":{"position":[[21,5],[1192,5]]},"1138":{"position":[[238,5],[1293,5]]},"1144":{"position":[[21,5],[1256,5]]},"1151":{"position":[[21,5],[1327,5]]},"1162":{"position":[[21,5],[760,5]]},"1170":{"position":[[21,5],[1181,5]]},"1179":{"position":[[21,5],[991,5]]},"1188":{"position":[[21,5],[710,5]]},"1196":{"position":[[21,5],[868,5]]},"1206":{"position":[[21,5],[832,5]]},"1213":{"position":[[21,5],[933,5]]},"1220":{"position":[[21,5],[858,5]]},"1230":{"position":[[21,5],[811,5]]},"1239":{"position":[[10,5]]},"1240":{"position":[[10,5]]},"1247":{"position":[[192,5],[1029,5]]},"1253":{"position":[[21,5],[421,5]]},"1260":{"position":[[21,5],[875,5]]},"1267":{"position":[[10,5]]},"1269":{"position":[[10,5]]},"1277":{"position":[[21,5],[1003,5]]},"1285":{"position":[[21,5]]},"1286":{"position":[[2504,5]]},"1300":{"position":[[21,5]]},"1301":{"position":[[2340,5]]},"1313":{"position":[[21,5],[837,5]]},"1324":{"position":[[21,5]]},"1325":{"position":[[2504,5]]},"1337":{"position":[[21,5],[837,5]]},"1348":{"position":[[21,5],[837,5]]},"1356":{"position":[[21,5],[888,5]]},"1362":{"position":[[183,5],[474,5]]},"1367":{"position":[[21,5]]},"1376":{"position":[[21,5],[419,5]]},"1386":{"position":[[21,5],[1113,5]]},"1400":{"position":[[21,5],[419,5]]},"1411":{"position":[[21,5],[419,5]]},"1420":{"position":[[21,5],[660,5]]},"1427":{"position":[[21,5],[564,5]]},"1452":{"position":[[253,5]]},"1457":{"position":[[10,5]]},"1481":{"position":[[10,5]]}},"keywords":{}}],["title=\\"file:jeton",{"_index":2746,"title":{},"content":{"253":{"position":[[2406,24]]},"313":{"position":[[2406,24]]}},"keywords":{}}],["tl",{"_index":3655,"title":{},"content":{"428":{"position":[[235,3]]},"429":{"position":[[1026,3],[1143,3],[1244,3],[1309,3]]},"432":{"position":[[294,4],[299,3],[303,3]]},"433":{"position":[[183,4],[594,4]]},"1292":{"position":[[6293,3]]},"1306":{"position":[[6293,3]]},"1329":{"position":[[6293,3]]}},"keywords":{}}],["tnsname",{"_index":4910,"title":{},"content":{"879":{"position":[[773,8]]}},"keywords":{}}],["tnsnames.ora",{"_index":4911,"title":{},"content":{"879":{"position":[[786,12]]}},"keywords":{}}],["tnt",{"_index":1642,"title":{},"content":{"117":{"position":[[394,3],[454,3]]}},"keywords":{}}],["tnt_product",{"_index":1129,"title":{},"content":{"81":{"position":[[2021,12]]}},"keywords":{}}],["to<br/>",{"_index":6466,"title":{},"content":{"1434":{"position":[[2150,13]]}},"keywords":{}}],["to...two",{"_index":2814,"title":{},"content":{"274":{"position":[[241,8]]}},"keywords":{}}],["toallowlist",{"_index":4681,"title":{},"content":{"780":{"position":[[540,11]]}},"keywords":{}}],["toast",{"_index":5008,"title":{"909":{"position":[[0,7]]},"925":{"position":[[0,7]]},"936":{"position":[[0,7]]},"952":{"position":[[0,7]]},"970":{"position":[[0,7]]}},"content":{"909":{"position":[[187,5],[264,7],[447,7],[470,7],[733,7],[900,7],[1258,7]]},"910":{"position":[[54,7]]},"925":{"position":[[187,5],[264,7],[447,7],[470,7],[733,7],[900,7],[1258,7]]},"926":{"position":[[54,7]]},"936":{"position":[[187,5],[264,7],[447,7],[470,7],[733,7],[900,7],[1258,7]]},"937":{"position":[[54,7]]},"952":{"position":[[187,5],[264,7],[447,7],[470,7],[733,7],[900,7],[1258,7]]},"953":{"position":[[54,7]]},"970":{"position":[[187,5],[264,7],[447,7],[470,7],[733,7],[900,7],[1258,7]]},"971":{"position":[[54,7]]}},"keywords":{}}],["tocondit",{"_index":1878,"title":{},"content":{"159":{"position":[[672,14]]}},"keywords":{}}],["today",{"_index":1256,"title":{},"content":{"84":{"position":[[115,6]]},"109":{"position":[[428,6]]},"138":{"position":[[2157,6]]},"141":{"position":[[2113,6]]},"142":{"position":[[2217,6]]},"164":{"position":[[1047,5]]},"189":{"position":[[1720,6]]},"193":{"position":[[500,6]]},"584":{"position":[[779,5]]},"897":{"position":[[210,7]]}},"keywords":{}}],["togeth",{"_index":293,"title":{},"content":{"11":{"position":[[185,9]]},"16":{"position":[[1197,8]]},"27":{"position":[[418,8]]},"74":{"position":[[600,8]]},"135":{"position":[[46,8]]},"156":{"position":[[451,9]]},"221":{"position":[[1418,9]]},"254":{"position":[[3847,8]]},"277":{"position":[[476,9]]},"319":{"position":[[588,8]]},"324":{"position":[[718,9]]},"329":{"position":[[231,8]]},"753":{"position":[[1618,9]]},"793":{"position":[[1641,9]]},"808":{"position":[[1591,9]]},"919":{"position":[[2548,9]]},"931":{"position":[[2070,9]]},"1043":{"position":[[1883,9]]},"1045":{"position":[[1240,8]]},"1053":{"position":[[1240,8]]},"1059":{"position":[[1917,9]]},"1061":{"position":[[1240,8]]},"1303":{"position":[[1713,9]]},"1397":{"position":[[1152,9]]},"1398":{"position":[[1155,9]]},"1409":{"position":[[1156,9]]},"1435":{"position":[[286,9]]},"1437":{"position":[[401,9]]},"1439":{"position":[[1260,9]]},"1459":{"position":[[918,8],[1113,9]]},"1467":{"position":[[324,9]]}},"keywords":{}}],["toggl",{"_index":822,"title":{},"content":{"55":{"position":[[847,7]]},"239":{"position":[[1709,8]]},"1464":{"position":[[944,6]]}},"keywords":{}}],["toinclud",{"_index":2481,"title":{},"content":{"228":{"position":[[463,11]]},"229":{"position":[[328,11]]}},"keywords":{}}],["token",{"_index":896,"title":{"249":{"position":[[31,7]]},"515":{"position":[[36,6]]},"524":{"position":[[71,6]]},"532":{"position":[[71,6]]},"725":{"position":[[7,5]]},"1083":{"position":[[15,5]]},"1131":{"position":[[4,5]]}},"content":{"58":{"position":[[893,5]]},"154":{"position":[[162,5],[2031,5]]},"169":{"position":[[1332,6],[1580,6],[1628,6],[1657,5]]},"247":{"position":[[262,5],[283,5],[399,5]]},"249":{"position":[[116,5]]},"263":{"position":[[169,6],[193,5],[201,5],[217,5]]},"267":{"position":[[2007,6],[2031,5],[2039,5],[2055,5]]},"270":{"position":[[269,6],[293,5],[301,5],[317,5]]},"274":{"position":[[567,6],[591,5],[599,5],[615,5]]},"284":{"position":[[78,6],[102,5],[110,5],[126,5]]},"340":{"position":[[440,6],[488,6],[517,5]]},"347":{"position":[[79,6],[96,5],[121,5],[190,5]]},"348":{"position":[[83,5]]},"349":{"position":[[344,5]]},"351":{"position":[[131,5],[141,5]]},"359":{"position":[[200,5],[226,5]]},"384":{"position":[[183,5],[330,6]]},"387":{"position":[[714,5],[739,6]]},"445":{"position":[[81,5]]},"446":{"position":[[123,5],[311,6],[363,7]]},"448":{"position":[[639,5],[653,5],[687,6],[737,5],[753,5]]},"472":{"position":[[290,5],[352,6]]},"489":{"position":[[80,5],[592,6],[631,5]]},"491":{"position":[[121,5]]},"513":{"position":[[138,6]]},"515":{"position":[[38,6],[180,5],[625,5]]},"517":{"position":[[552,5],[582,5]]},"522":{"position":[[139,6],[243,5]]},"524":{"position":[[89,7]]},"530":{"position":[[139,6],[243,5]]},"532":{"position":[[145,6],[173,6]]},"534":{"position":[[687,5],[709,6],[780,6]]},"538":{"position":[[81,6]]},"540":{"position":[[237,5],[247,5]]},"551":{"position":[[113,6]]},"554":{"position":[[166,6],[258,6],[284,5],[481,6],[518,6],[549,5]]},"556":{"position":[[830,5],[846,5],[940,5],[950,5],[983,6]]},"631":{"position":[[166,6]]},"643":{"position":[[113,6]]},"645":{"position":[[30,5],[172,6],[462,5]]},"646":{"position":[[335,5],[485,5],[540,5],[561,6]]},"650":{"position":[[112,6],[216,5]]},"652":{"position":[[30,5],[172,6],[462,5]]},"654":{"position":[[56,5],[206,5],[261,5],[282,6]]},"662":{"position":[[80,5],[592,6],[631,5]]},"664":{"position":[[120,5],[142,5]]},"670":{"position":[[277,5],[307,5]]},"677":{"position":[[80,5],[592,6],[631,5]]},"679":{"position":[[121,5]]},"683":{"position":[[291,5]]},"685":{"position":[[162,6],[239,5],[252,5]]},"692":{"position":[[80,5],[592,6],[631,5]]},"694":{"position":[[121,5]]},"710":{"position":[[5,6],[34,5]]},"712":{"position":[[75,5],[90,5],[385,6]]},"718":{"position":[[130,6],[261,6],[293,6]]},"720":{"position":[[589,5],[602,5]]},"724":{"position":[[87,5],[362,6],[491,6],[575,5],[622,5],[671,6]]},"725":{"position":[[38,5],[202,6]]},"726":{"position":[[411,6],[456,5],[620,6]]},"728":{"position":[[348,5],[358,5],[416,5],[466,5],[476,5],[534,5]]},"839":{"position":[[96,5],[235,5]]},"840":{"position":[[715,5],[1945,6],[1993,6],[2171,5],[2214,5],[2275,6],[2306,5],[2319,5]]},"842":{"position":[[871,5],[888,5],[943,5],[963,5]]},"843":{"position":[[170,5]]},"848":{"position":[[96,5],[272,5]]},"849":{"position":[[538,5],[1190,5],[2322,6],[3064,6],[3112,6],[3311,5],[3354,5],[3415,6],[3446,5],[3459,5]]},"851":{"position":[[188,5],[454,5],[471,5],[511,5],[531,5]]},"855":{"position":[[281,6]]},"857":{"position":[[258,5]]},"859":{"position":[[369,5],[443,5],[467,5]]},"860":{"position":[[202,5],[208,6]]},"885":{"position":[[371,5],[415,6]]},"894":{"position":[[124,5]]},"895":{"position":[[378,6],[608,6]]},"898":{"position":[[1185,5],[1212,6],[1628,5]]},"957":{"position":[[17,5]]},"959":{"position":[[81,5],[111,5]]},"988":{"position":[[291,6]]},"989":{"position":[[584,7],[787,6],[1306,6]]},"991":{"position":[[603,5],[621,5]]},"995":{"position":[[92,6]]},"997":{"position":[[77,5],[88,5]]},"1003":{"position":[[291,6]]},"1004":{"position":[[667,7],[870,6],[1389,6]]},"1009":{"position":[[666,5],[684,5]]},"1013":{"position":[[28,5]]},"1067":{"position":[[363,5],[631,5]]},"1070":{"position":[[342,5],[355,5]]},"1083":{"position":[[96,5],[262,5]]},"1085":{"position":[[642,5],[680,6]]},"1086":{"position":[[47,5]]},"1101":{"position":[[196,5],[215,5]]},"1105":{"position":[[91,6]]},"1111":{"position":[[13,5]]},"1113":{"position":[[136,5],[154,6]]},"1118":{"position":[[129,5],[474,5],[495,5],[700,5]]},"1129":{"position":[[131,6]]},"1131":{"position":[[173,6],[211,6],[237,6]]},"1133":{"position":[[203,5],[230,5],[271,5],[382,5],[664,5],[681,5]]},"1186":{"position":[[633,5],[758,6]]},"1188":{"position":[[589,5],[667,5]]},"1260":{"position":[[86,5],[100,5]]},"1261":{"position":[[133,6]]},"1361":{"position":[[140,5]]},"1362":{"position":[[243,5],[270,5]]}},"keywords":{}}],["token"",{"_index":3795,"title":{},"content":{"472":{"position":[[623,11]]},"489":{"position":[[220,11]]},"662":{"position":[[220,11]]},"677":{"position":[[220,11]]},"692":{"position":[[220,11]]},"725":{"position":[[177,11]]},"726":{"position":[[595,11]]},"898":{"position":[[1278,12],[1447,12],[1705,12]]}},"keywords":{}}],["token,"",{"_index":4956,"title":{},"content":{"895":{"position":[[566,12]]}},"keywords":{}}],["token.an",{"_index":5920,"title":{},"content":{"1258":{"position":[[71,8]]}},"keywords":{}}],["token/consum",{"_index":4753,"title":{},"content":{"842":{"position":[[546,14]]}},"keywords":{}}],["token_id",{"_index":4789,"title":{},"content":{"843":{"position":[[220,9]]}},"keywords":{}}],["token_key",{"_index":4827,"title":{},"content":{"851":{"position":[[443,10]]},"852":{"position":[[205,10]]}},"keywords":{}}],["token_secret",{"_index":4828,"title":{},"content":{"851":{"position":[[497,13]]},"852":{"position":[[228,13]]}},"keywords":{}}],["token_secret_sop",{"_index":4790,"title":{},"content":{"843":{"position":[[234,18]]}},"keywords":{}}],["token_uri",{"_index":4095,"title":{},"content":{"548":{"position":[[1453,10]]}},"keywords":{}}],["tokenin",{"_index":3796,"title":{},"content":{"472":{"position":[[667,7]]}},"keywords":{}}],["tokens"",{"_index":4040,"title":{},"content":{"532":{"position":[[353,13]]}},"keywords":{}}],["tokens.gener",{"_index":2643,"title":{},"content":{"249":{"position":[[86,15]]}},"keywords":{}}],["tokensrest",{"_index":4821,"title":{},"content":{"849":{"position":[[2287,10]]}},"keywords":{}}],["tokenyour",{"_index":3785,"title":{},"content":{"471":{"position":[[15,9]]},"725":{"position":[[67,9]]},"726":{"position":[[485,9]]}},"keywords":{}}],["told",{"_index":6489,"title":{},"content":{"1439":{"position":[[869,4]]}},"keywords":{}}],["toler",{"_index":776,"title":{},"content":{"48":{"position":[[211,10]]},"321":{"position":[[2301,9]]},"326":{"position":[[1939,9]]}},"keywords":{}}],["toll",{"_index":5393,"title":{},"content":{"1110":{"position":[[220,4]]}},"keywords":{}}],["took",{"_index":2230,"title":{},"content":{"206":{"position":[[262,4]]},"760":{"position":[[667,4]]},"773":{"position":[[667,4]]},"800":{"position":[[667,4]]},"815":{"position":[[667,4]]},"831":{"position":[[667,4]]}},"keywords":{}}],["tool",{"_index":147,"title":{},"content":{"3":{"position":[[1137,5]]},"4":{"position":[[172,5],[311,5],[453,5]]},"29":{"position":[[153,5]]},"80":{"position":[[180,6]]},"82":{"position":[[282,5],[506,4]]},"103":{"position":[[757,7]]},"107":{"position":[[139,5]]},"113":{"position":[[250,5]]},"156":{"position":[[671,4]]},"162":{"position":[[916,4]]},"198":{"position":[[21,4]]},"234":{"position":[[427,4]]},"236":{"position":[[556,8],[2122,5]]},"238":{"position":[[151,4]]},"245":{"position":[[307,5]]},"253":{"position":[[159,4]]},"259":{"position":[[829,5]]},"279":{"position":[[387,5]]},"280":{"position":[[856,5]]},"291":{"position":[[1499,4]]},"295":{"position":[[1588,4]]},"302":{"position":[[1419,4]]},"313":{"position":[[159,4]]},"322":{"position":[[490,4],[1660,5]]},"323":{"position":[[1,5],[101,5],[1681,5]]},"324":{"position":[[10,4],[401,8],[451,4],[548,4],[682,5],[826,5],[1147,4]]},"325":{"position":[[781,5]]},"329":{"position":[[150,5]]},"515":{"position":[[582,5]]},"570":{"position":[[98,5]]},"571":{"position":[[98,5]]},"635":{"position":[[386,4]]},"725":{"position":[[44,5]]},"726":{"position":[[462,5]]},"728":{"position":[[422,6],[540,6]]},"1446":{"position":[[95,4]]}},"keywords":{}}],["tooling.typescript",{"_index":2903,"title":{},"content":{"281":{"position":[[2622,18]]}},"keywords":{}}],["tools.appspot.com/account",{"_index":4159,"title":{},"content":{"573":{"position":[[985,25]]}},"keywords":{}}],["toolstax",{"_index":5376,"title":{},"content":{"1096":{"position":[[433,8]]}},"keywords":{}}],["tooltip",{"_index":617,"title":{},"content":{"26":{"position":[[549,9]]},"146":{"position":[[546,8]]},"149":{"position":[[519,8]]},"152":{"position":[[522,8]]}},"keywords":{}}],["tooth",{"_index":5090,"title":{},"content":{"943":{"position":[[1013,5]]}},"keywords":{}}],["top",{"_index":606,"title":{},"content":{"26":{"position":[[261,3]]},"60":{"position":[[26,3],[150,3],[1191,3]]},"98":{"position":[[65,3],[1243,3]]},"99":{"position":[[410,3]]},"103":{"position":[[574,3],[695,3]]},"154":{"position":[[1319,3]]},"160":{"position":[[109,3],[250,3]]},"206":{"position":[[857,3]]},"240":{"position":[[4134,3]]},"263":{"position":[[1007,3]]},"264":{"position":[[414,3]]},"274":{"position":[[1852,3]]},"275":{"position":[[448,3],[766,3]]},"296":{"position":[[7539,3]]},"349":{"position":[[102,3]]},"479":{"position":[[101,3]]},"1008":{"position":[[1299,3]]},"1092":{"position":[[102,3]]},"1178":{"position":[[271,3]]},"1209":{"position":[[601,3]]},"1279":{"position":[[192,3]]},"1358":{"position":[[845,3]]},"1379":{"position":[[4849,3]]},"1403":{"position":[[4849,3]]},"1414":{"position":[[4849,3]]},"1461":{"position":[[1897,3],[3117,3],[5558,3]]}},"keywords":{}}],["top_level",{"_index":1432,"title":{},"content":{"99":{"position":[[683,11]]}},"keywords":{}}],["topic",{"_index":2630,"title":{"1232":{"position":[[10,7]]}},"content":{"245":{"position":[[242,7]]},"246":{"position":[[7,5]]},"250":{"position":[[1244,6]]},"320":{"position":[[859,6]]},"432":{"position":[[1252,5]]},"433":{"position":[[918,6]]},"598":{"position":[[168,7],[206,7]]},"601":{"position":[[131,7],[354,6],[456,5],[481,5]]},"675":{"position":[[260,6]]},"1118":{"position":[[756,7],[770,6]]},"1229":{"position":[[230,7]]},"1230":{"position":[[532,6],[608,6],[960,6],[1038,5],[1191,6],[1286,6],[1293,5],[1316,5]]},"1231":{"position":[[292,6]]},"1232":{"position":[[67,6],[103,6],[225,6],[293,5],[512,6],[529,5],[603,6],[620,5]]}},"keywords":{}}],["topic_nam",{"_index":3687,"title":{},"content":{"433":{"position":[[354,13],[750,13]]}},"keywords":{}}],["topics.resourc",{"_index":768,"title":{},"content":{"45":{"position":[[281,16]]}},"keywords":{}}],["topics.schema",{"_index":2632,"title":{},"content":{"246":{"position":[[78,13]]}},"keywords":{}}],["topicsemail",{"_index":3911,"title":{},"content":{"506":{"position":[[203,11]]}},"keywords":{}}],["topk8",{"_index":6369,"title":{},"content":{"1384":{"position":[[308,5]]}},"keywords":{}}],["torn",{"_index":4661,"title":{},"content":{"764":{"position":[[621,4]]},"777":{"position":[[621,4]]},"804":{"position":[[619,4]]},"819":{"position":[[619,4]]},"835":{"position":[[619,4]]}},"keywords":{}}],["torrent",{"_index":1925,"title":{},"content":{"163":{"position":[[593,7]]}},"keywords":{}}],["total",{"_index":1659,"title":{},"content":{"121":{"position":[[973,6],[1053,6],[1602,5]]},"138":{"position":[[1959,5]]},"141":{"position":[[1891,5]]},"142":{"position":[[2012,5]]},"146":{"position":[[91,5]]},"149":{"position":[[94,5]]},"152":{"position":[[104,5]]},"254":{"position":[[3868,5]]},"1459":{"position":[[108,5],[1129,5]]},"1470":{"position":[[1008,5],[1274,5]]},"1475":{"position":[[454,5],[542,5],[1248,5],[1319,5],[1952,5]]}},"keywords":{}}],["total_amount",{"_index":2956,"title":{},"content":{"295":{"position":[[485,12]]},"296":{"position":[[4873,14]]}},"keywords":{}}],["total_edit",{"_index":2770,"title":{},"content":{"254":{"position":[[377,12],[741,12],[1445,12],[2798,12],[3459,12],[3708,12]]}},"keywords":{}}],["total_new_lin",{"_index":2771,"title":{},"content":{"254":{"position":[[425,16],[796,15],[1493,16],[2853,15],[3514,15]]}},"keywords":{}}],["touch",{"_index":1990,"title":{},"content":{"170":{"position":[[258,6]]},"174":{"position":[[598,5]]},"237":{"position":[[2734,5]]}},"keywords":{}}],["tour",{"_index":649,"title":{},"content":{"30":{"position":[[228,4]]}},"keywords":{}}],["trace",{"_index":1156,"title":{},"content":{"82":{"position":[[875,5]]}},"keywords":{}}],["track",{"_index":213,"title":{},"content":{"6":{"position":[[312,5]]},"21":{"position":[[99,5],[308,5]]},"100":{"position":[[1330,6]]},"105":{"position":[[648,6]]},"196":{"position":[[50,5]]},"209":{"position":[[827,7]]},"233":{"position":[[50,5],[718,5]]},"280":{"position":[[404,5]]},"377":{"position":[[787,8]]},"480":{"position":[[1124,5]]},"584":{"position":[[915,8]]},"763":{"position":[[117,8]]},"776":{"position":[[117,8]]},"803":{"position":[[117,8]]},"818":{"position":[[117,8]]},"834":{"position":[[117,8]]},"1009":{"position":[[1612,5]]},"1247":{"position":[[981,5]]},"1455":{"position":[[103,8]]},"1463":{"position":[[522,5]]},"1476":{"position":[[1095,5]]}},"keywords":{}}],["trackev",{"_index":4939,"title":{},"content":{"892":{"position":[[495,11]]}},"keywords":{}}],["trackingusersusersgroupsdetailedworkflowsworkflow",{"_index":4491,"title":{},"content":{"709":{"position":[[659,49]]}},"keywords":{}}],["trade",{"_index":3433,"title":{"373":{"position":[[25,5]]}},"content":{"373":{"position":[[62,7],[84,6],[115,5],[181,5],[205,5],[485,6],[703,5],[936,5]]},"375":{"position":[[163,5]]},"377":{"position":[[1437,6]]},"378":{"position":[[338,6]]},"379":{"position":[[365,5]]}},"keywords":{}}],["tradit",{"_index":669,"title":{},"content":{"34":{"position":[[203,11],[330,11]]},"77":{"position":[[348,11]]},"180":{"position":[[174,11]]},"429":{"position":[[896,11]]}},"keywords":{}}],["traffic",{"_index":4664,"title":{"946":{"position":[[14,8]]}},"content":{"767":{"position":[[370,7]]},"792":{"position":[[683,7]]},"824":{"position":[[475,7]]},"904":{"position":[[474,7]]},"918":{"position":[[683,7]]},"946":{"position":[[125,7]]},"1051":{"position":[[474,7]]},"1289":{"position":[[557,7]]},"1321":{"position":[[337,7]]},"1334":{"position":[[425,7]]},"1373":{"position":[[456,7]]},"1374":{"position":[[456,7]]}},"keywords":{}}],["traffic_sourc",{"_index":4204,"title":{},"content":{"575":{"position":[[895,15]]},"586":{"position":[[817,15]]}},"keywords":{}}],["trail",{"_index":5593,"title":{},"content":{"1140":{"position":[[1684,8]]},"1209":{"position":[[619,8]]},"1292":{"position":[[6366,8]]},"1306":{"position":[[6366,8]]},"1316":{"position":[[1684,8]]},"1329":{"position":[[6366,8]]},"1340":{"position":[[1684,8]]},"1351":{"position":[[1684,8]]},"1379":{"position":[[4906,8]]},"1403":{"position":[[4906,8]]},"1414":{"position":[[4906,8]]},"1431":{"position":[[1707,8]]}},"keywords":{}}],["tran",{"_index":6353,"title":{},"content":{"1379":{"position":[[4957,4]]},"1403":{"position":[[4957,4]]},"1414":{"position":[[4957,4]]}},"keywords":{}}],["transact",{"_index":262,"title":{"20":{"position":[[0,13]]},"881":{"position":[[7,11]]},"1438":{"position":[[22,13]]},"1451":{"position":[[4,12]]},"1475":{"position":[[0,11]]}},"content":{"8":{"position":[[382,12]]},"20":{"position":[[36,13],[179,11],[209,11],[346,11],[372,11],[456,11],[509,11],[668,11],[775,13],[982,11],[1084,11]]},"21":{"position":[[493,11]]},"97":{"position":[[809,12]]},"100":{"position":[[1068,14],[1101,11]]},"114":{"position":[[572,13]]},"115":{"position":[[916,13],[968,12],[1009,13],[1100,13]]},"124":{"position":[[27,13],[238,14],[282,12],[552,12],[768,12],[838,12]]},"125":{"position":[[890,11]]},"128":{"position":[[212,12]]},"163":{"position":[[989,11],[1092,12]]},"320":{"position":[[2236,13]]},"321":{"position":[[2243,13]]},"323":{"position":[[1106,13]]},"331":{"position":[[321,13]]},"332":{"position":[[141,12]]},"343":{"position":[[330,11],[412,11],[820,11],[902,11]]},"364":{"position":[[2839,11]]},"838":{"position":[[84,13]]},"840":{"position":[[1060,12]]},"843":{"position":[[535,11],[698,11]]},"849":{"position":[[2071,12],[2162,11]]},"852":{"position":[[332,11]]},"883":{"position":[[12,11],[58,12]]},"884":{"position":[[257,11]]},"885":{"position":[[680,11]]},"886":{"position":[[288,12]]},"922":{"position":[[182,12],[372,13],[756,13],[1367,11],[2859,13],[2967,11],[3055,11],[3254,11]]},"1138":{"position":[[1439,11]]},"1140":{"position":[[1737,11]]},"1147":{"position":[[177,11],[197,11],[278,11]]},"1156":{"position":[[471,12],[906,12]]},"1174":{"position":[[177,11],[197,11],[278,11]]},"1216":{"position":[[177,11],[197,11],[278,11]]},"1224":{"position":[[177,11],[197,11],[278,11]]},"1292":{"position":[[6408,11]]},"1306":{"position":[[6408,11]]},"1313":{"position":[[983,11]]},"1316":{"position":[[1737,11]]},"1329":{"position":[[6408,11]]},"1337":{"position":[[983,11]]},"1340":{"position":[[1737,11]]},"1348":{"position":[[983,11]]},"1351":{"position":[[1737,11]]},"1370":{"position":[[1142,11]]},"1379":{"position":[[5009,11]]},"1388":{"position":[[470,11]]},"1391":{"position":[[1076,12]]},"1403":{"position":[[5009,11]]},"1414":{"position":[[5009,11]]},"1427":{"position":[[710,11]]},"1431":{"position":[[1760,11]]},"1434":{"position":[[508,12],[1071,12]]},"1435":{"position":[[23,13],[314,12],[370,13],[597,13]]},"1436":{"position":[[107,11]]},"1437":{"position":[[415,11],[805,13],[945,13],[1075,11],[1404,11],[1613,13]]},"1438":{"position":[[177,13],[276,11],[574,12]]},"1439":{"position":[[122,11],[250,11],[314,11],[700,11]]},"1440":{"position":[[386,12],[677,12],[1006,11],[1179,11]]},"1442":{"position":[[71,12],[109,11],[187,11],[294,11],[1088,12],[1676,13]]},"1443":{"position":[[128,12],[380,11],[477,11],[729,12],[1014,11]]},"1444":{"position":[[435,12],[488,12],[672,11]]},"1451":{"position":[[116,12],[250,12],[322,11],[460,12],[616,13],[682,12],[863,11],[968,11]]},"1452":{"position":[[324,12],[771,12],[853,12],[990,12],[1068,12],[1287,12],[1723,13],[1916,11]]},"1453":{"position":[[94,11],[213,11],[286,11],[454,11],[724,11],[767,11],[1011,12]]},"1459":{"position":[[667,14],[893,11]]},"1471":{"position":[[541,12],[559,11]]},"1473":{"position":[[97,12],[159,12]]},"1474":{"position":[[66,12]]},"1475":{"position":[[45,12],[382,12],[474,11],[558,12],[1193,11]]}},"keywords":{}}],["transaction.a",{"_index":1699,"title":{},"content":{"124":{"position":[[709,14]]}},"keywords":{}}],["transaction.dev",{"_index":3371,"title":{},"content":{"364":{"position":[[2904,15]]}},"keywords":{}}],["transaction:dev",{"_index":4925,"title":{},"content":{"886":{"position":[[97,15]]}},"keywords":{}}],["transactionaccountinglin",{"_index":4798,"title":{},"content":{"843":{"position":[[565,25]]}},"keywords":{}}],["transactionsbal",{"_index":4923,"title":{},"content":{"882":{"position":[[70,20]]}},"keywords":{}}],["transactionsbank",{"_index":5276,"title":{},"content":{"1073":{"position":[[77,16]]}},"keywords":{}}],["transactionscustomersdisputeseventsinvoic",{"_index":5280,"title":{},"content":{"1073":{"position":[[178,42]]}},"keywords":{}}],["transactionslog",{"_index":3237,"title":{},"content":{"343":{"position":[[1162,15]]}},"keywords":{}}],["transfer",{"_index":1516,"title":{"277":{"position":[[16,10]]},"279":{"position":[[19,10]]},"280":{"position":[[10,10]]}},"content":{"107":{"position":[[594,9],[1960,9]]},"110":{"position":[[1456,9]]},"113":{"position":[[626,9]]},"163":{"position":[[569,8]]},"277":{"position":[[182,8],[278,9],[315,8],[422,9],[998,9]]},"278":{"position":[[251,9]]},"279":{"position":[[237,8],[271,9],[1048,10],[1076,8],[1110,10],[1265,9],[1418,9],[1682,9]]},"280":{"position":[[172,9],[288,8],[647,10],[696,8],[752,8],[1189,8],[1342,8],[1793,8],[1896,9],[2215,8]]},"281":{"position":[[354,9],[1745,9]]},"289":{"position":[[43,8]]},"300":{"position":[[43,8]]},"1078":{"position":[[2057,9]]},"1268":{"position":[[52,12]]}},"keywords":{}}],["transfers.schema.yaml",{"_index":2830,"title":{},"content":{"277":{"position":[[590,21]]},"278":{"position":[[919,21]]},"279":{"position":[[1127,21]]},"280":{"position":[[1250,21]]}},"keywords":{}}],["transform",{"_index":666,"title":{"105":{"position":[[0,16]]},"183":{"position":[[20,9]]},"251":{"position":[[7,9]]},"311":{"position":[[7,9]]},"315":{"position":[[4,14]]},"331":{"position":[[9,16]]}},"content":{"32":{"position":[[478,14]]},"40":{"position":[[52,14]]},"44":{"position":[[458,15]]},"50":{"position":[[250,16]]},"67":{"position":[[1604,16]]},"69":{"position":[[915,16]]},"91":{"position":[[151,15]]},"94":{"position":[[1044,15],[1096,10],[1128,15],[1291,15],[2275,10],[2669,15],[3061,14],[3096,15]]},"95":{"position":[[178,12],[279,15]]},"96":{"position":[[134,11]]},"99":{"position":[[78,11]]},"101":{"position":[[171,16]]},"102":{"position":[[40,10]]},"105":{"position":[[3,14],[270,14],[492,16],[518,14],[572,14],[692,14],[753,15],[862,15],[1135,14],[1189,14],[1225,14]]},"106":{"position":[[17,14],[152,15]]},"107":{"position":[[567,10],[1430,11],[1714,15],[1754,15],[1928,14],[2478,14],[2610,11],[3264,11],[3650,16],[3797,15],[3841,16],[3982,11]]},"108":{"position":[[56,16],[119,11],[334,14]]},"109":{"position":[[1,15],[188,15]]},"110":{"position":[[3,14],[378,14]]},"111":{"position":[[88,14],[354,14],[460,16],[560,14],[637,15]]},"112":{"position":[[181,14]]},"135":{"position":[[656,12]]},"180":{"position":[[342,14],[905,11]]},"182":{"position":[[622,15],[707,14]]},"183":{"position":[[151,14],[286,14],[755,14],[1342,11],[2288,15],[2312,10],[2340,14],[2439,11],[2772,9],[3856,11],[4562,14]]},"219":{"position":[[594,9]]},"252":{"position":[[58,14],[126,10]]},"253":{"position":[[23,15],[3072,14]]},"254":{"position":[[578,11],[1211,14],[2635,11]]},"255":{"position":[[1002,14]]},"267":{"position":[[168,14],[444,14],[502,15],[601,15],[1119,14],[1702,15]]},"268":{"position":[[26,14],[228,15],[971,11],[1259,14],[1341,9],[1454,15]]},"269":{"position":[[33,14],[190,15],[581,11],[830,14],[912,9],[1025,15]]},"270":{"position":[[1431,14],[1580,9],[1653,10],[1816,15]]},"271":{"position":[[191,9],[239,9],[397,9]]},"277":{"position":[[653,11],[964,10]]},"278":{"position":[[1097,11]]},"279":{"position":[[679,10],[1438,11]]},"280":{"position":[[1594,11]]},"281":{"position":[[986,11]]},"292":{"position":[[260,16]]},"294":{"position":[[58,14]]},"295":{"position":[[1452,15]]},"296":{"position":[[736,11],[1085,16],[2737,11],[2975,14],[3118,15],[3363,15],[3471,15],[3511,15],[4397,16],[5103,14]]},"303":{"position":[[251,16]]},"312":{"position":[[58,14]]},"313":{"position":[[23,15],[3148,14]]},"314":{"position":[[445,11],[932,14],[2300,11],[2497,14],[2582,15]]},"315":{"position":[[98,14],[887,16],[1187,14]]},"316":{"position":[[1327,14]]},"319":{"position":[[616,16]]},"321":{"position":[[451,9],[736,15],[1352,9],[1652,12],[2399,15]]},"322":{"position":[[1301,16],[1519,9],[1583,15],[1852,14]]},"323":{"position":[[459,13]]},"324":{"position":[[59,9],[168,9],[469,16],[626,10],[1106,15]]},"329":{"position":[[81,10],[582,14]]},"330":{"position":[[264,15]]},"331":{"position":[[288,10],[663,15]]},"1475":{"position":[[1453,9],[1631,9]]}},"keywords":{}}],["transient",{"_index":5214,"title":{},"content":{"1031":{"position":[[531,9]]}},"keywords":{}}],["transit",{"_index":3401,"title":{},"content":{"368":{"position":[[149,11]]},"755":{"position":[[149,11]]},"768":{"position":[[149,11]]},"795":{"position":[[147,11]]},"810":{"position":[[147,11]]},"826":{"position":[[147,11]]},"905":{"position":[[152,11]]},"920":{"position":[[152,11]]},"932":{"position":[[152,11]]},"948":{"position":[[152,11]]},"966":{"position":[[152,11]]},"1456":{"position":[[206,12]]},"1461":{"position":[[438,11]]}},"keywords":{}}],["translat",{"_index":957,"title":{"158":{"position":[[0,13]]}},"content":{"64":{"position":[[214,10]]},"158":{"position":[[302,12]]},"291":{"position":[[1443,9]]},"302":{"position":[[1363,9]]},"321":{"position":[[1135,9]]},"419":{"position":[[157,9]]},"440":{"position":[[173,9]]},"504":{"position":[[94,9]]},"547":{"position":[[158,9]]},"639":{"position":[[93,9]]},"821":{"position":[[128,11]]},"869":{"position":[[308,9],[517,9],[849,11]]},"912":{"position":[[136,11]]},"1023":{"position":[[138,9]]},"1140":{"position":[[1781,9],[1877,11]]},"1316":{"position":[[1781,9],[1877,11]]},"1340":{"position":[[1781,9],[1877,11]]},"1351":{"position":[[1781,9],[1877,11]]},"1379":{"position":[[5067,9],[5175,11]]},"1403":{"position":[[5067,9],[5175,11]]},"1414":{"position":[[5067,9],[5175,11]]},"1431":{"position":[[1804,9],[1900,11]]}},"keywords":{}}],["translate_reg",{"_index":6354,"title":{},"content":{"1379":{"position":[[5116,13]]},"1403":{"position":[[5116,13]]},"1414":{"position":[[5116,13]]}},"keywords":{}}],["translate_regex",{"_index":5600,"title":{},"content":{"1140":{"position":[[1827,15]]},"1316":{"position":[[1827,15]]},"1340":{"position":[[1827,15]]},"1351":{"position":[[1827,15]]},"1431":{"position":[[1850,15]]}},"keywords":{}}],["transmit",{"_index":2320,"title":{},"content":{"210":{"position":[[2162,12]]}},"keywords":{}}],["travel",{"_index":1599,"title":{"1478":{"position":[[5,6]]},"1479":{"position":[[22,7]]}},"content":{"112":{"position":[[858,6]]},"1479":{"position":[[372,7],[550,6]]}},"keywords":{}}],["treat",{"_index":1310,"title":{},"content":{"90":{"position":[[180,7]]},"480":{"position":[[1249,7]]},"1140":{"position":[[1923,5]]},"1155":{"position":[[209,7]]},"1316":{"position":[[1923,5]]},"1340":{"position":[[1923,5]]},"1351":{"position":[[1923,5]]},"1379":{"position":[[5231,5]]},"1403":{"position":[[5231,5]]},"1414":{"position":[[5231,5]]},"1431":{"position":[[1946,5]]},"1464":{"position":[[847,7]]},"1467":{"position":[[2894,7]]}},"keywords":{}}],["tree",{"_index":2906,"title":{},"content":{"281":{"position":[[3211,4]]},"296":{"position":[[3851,4]]},"315":{"position":[[308,4]]}},"keywords":{}}],["tri",{"_index":238,"title":{},"content":{"7":{"position":[[311,6]]},"99":{"position":[[780,3]]},"185":{"position":[[93,3]]},"212":{"position":[[136,3]]},"236":{"position":[[173,3]]},"243":{"position":[[128,3]]},"250":{"position":[[979,4]]},"291":{"position":[[784,3]]},"302":{"position":[[784,3]]},"417":{"position":[[1556,3],[1708,3],[2118,4]]},"419":{"position":[[770,3],[990,3]]},"440":{"position":[[786,3],[1006,3]]},"486":{"position":[[159,3]]},"502":{"position":[[1204,3],[1356,3]]},"504":{"position":[[702,3],[906,3]]},"545":{"position":[[1158,3],[1310,3]]},"547":{"position":[[771,3],[991,3]]},"637":{"position":[[718,3],[870,3]]},"639":{"position":[[700,3],[904,3]]},"658":{"position":[[159,3]]},"674":{"position":[[159,3]]},"689":{"position":[[159,3]]},"870":{"position":[[505,6]]},"871":{"position":[[37,6]]},"910":{"position":[[70,3]]},"926":{"position":[[70,3]]},"937":{"position":[[70,3]]},"953":{"position":[[70,3]]},"971":{"position":[[70,3]]},"1021":{"position":[[1715,3],[1867,3]]},"1023":{"position":[[751,3],[971,3]]},"1462":{"position":[[442,3]]}},"keywords":{}}],["trial",{"_index":1760,"title":{},"content":{"136":{"position":[[157,5]]},"154":{"position":[[1543,5],[1570,7],[1691,5]]},"188":{"position":[[125,5],[170,6]]},"191":{"position":[[192,5]]},"192":{"position":[[631,6]]},"234":{"position":[[571,5]]},"1456":{"position":[[243,5],[310,5],[339,5]]}},"keywords":{}}],["trialfre",{"_index":6584,"title":{},"content":{"1456":{"position":[[233,9],[300,9]]}},"keywords":{}}],["tricki",{"_index":4820,"title":{},"content":{"849":{"position":[[1861,6]]}},"keywords":{}}],["trickl",{"_index":1926,"title":{},"content":{"163":{"position":[[650,7]]}},"keywords":{}}],["trigger",{"_index":362,"title":{},"content":{"12":{"position":[[170,7],[391,7]]},"55":{"position":[[678,7]]},"100":{"position":[[126,9]]},"197":{"position":[[44,9],[849,9]]},"209":{"position":[[343,9]]},"278":{"position":[[541,9]]},"675":{"position":[[278,7]]},"1110":{"position":[[480,8]]},"1140":{"position":[[1959,7]]},"1292":{"position":[[6457,7],[6503,8]]},"1306":{"position":[[6457,7],[6503,8]]},"1316":{"position":[[1959,7]]},"1329":{"position":[[6457,7],[6503,8]]},"1340":{"position":[[1959,7]]},"1351":{"position":[[1959,7]]},"1370":{"position":[[1159,7]]},"1379":{"position":[[5288,7]]},"1394":{"position":[[812,7]]},"1403":{"position":[[5288,7]]},"1414":{"position":[[5288,7]]},"1431":{"position":[[1982,7]]},"1472":{"position":[[489,7]]}},"keywords":{}}],["trim",{"_index":5607,"title":{},"content":{"1140":{"position":[[1993,4]]},"1209":{"position":[[646,4]]},"1316":{"position":[[1993,4]]},"1340":{"position":[[1993,4]]},"1351":{"position":[[1993,4]]},"1379":{"position":[[5337,4]]},"1403":{"position":[[5337,4]]},"1414":{"position":[[5337,4]]},"1423":{"position":[[553,4]]},"1431":{"position":[[2016,4]]}},"keywords":{}}],["trim((select",{"_index":6379,"title":{},"content":{"1384":{"position":[[812,12]]}},"keywords":{}}],["trim_array",{"_index":5608,"title":{},"content":{"1140":{"position":[[2018,10]]},"1316":{"position":[[2018,10]]},"1340":{"position":[[2018,10]]},"1351":{"position":[[2018,10]]},"1431":{"position":[[2041,10]]}},"keywords":{}}],["trino",{"_index":6415,"title":{},"content":{"1423":{"position":[[458,5]]}},"keywords":{}}],["trino'",{"_index":6414,"title":{},"content":{"1423":{"position":[[201,7]]}},"keywords":{}}],["tripdata",{"_index":2124,"title":{},"content":{"190":{"position":[[981,8],[2057,8]]}},"keywords":{}}],["triplet",{"_index":4884,"title":{},"content":{"869":{"position":[[36,7]]}},"keywords":{}}],["trivial",{"_index":3111,"title":{},"content":{"319":{"position":[[1547,9]]},"1440":{"position":[[1557,9]]}},"keywords":{}}],["troubl",{"_index":2312,"title":{},"content":{"210":{"position":[[1935,8]]}},"keywords":{}}],["troubleshoot",{"_index":1815,"title":{"282":{"position":[[0,12]]},"759":{"position":[[0,15]]},"772":{"position":[[0,15]]},"799":{"position":[[0,15]]},"814":{"position":[[0,15]]},"830":{"position":[[0,15]]},"871":{"position":[[0,16]]},"910":{"position":[[0,16]]},"926":{"position":[[0,16]]},"937":{"position":[[0,16]]},"953":{"position":[[0,16]]},"971":{"position":[[0,16]]}},"content":{"141":{"position":[[456,12]]},"900":{"position":[[334,16]]}},"keywords":{}}],["true",{"_index":458,"title":{},"content":{"16":{"position":[[274,4],[320,4],[370,4]]},"55":{"position":[[664,5]]},"56":{"position":[[525,4],[593,5],[917,4]]},"76":{"position":[[981,4]]},"98":{"position":[[1187,6]]},"99":{"position":[[550,5]]},"122":{"position":[[1615,4]]},"123":{"position":[[336,4]]},"156":{"position":[[580,4]]},"191":{"position":[[1587,4],[1614,5]]},"210":{"position":[[1296,4]]},"230":{"position":[[1045,4],[1074,5]]},"236":{"position":[[3587,6]]},"237":{"position":[[1859,6],[2324,5]]},"240":{"position":[[1548,4],[1575,5]]},"280":{"position":[[2285,4]]},"307":{"position":[[173,4]]},"378":{"position":[[305,4]]},"406":{"position":[[389,5]]},"496":{"position":[[399,4]]},"497":{"position":[[193,4]]},"748":{"position":[[294,4]]},"842":{"position":[[3773,4]]},"843":{"position":[[672,4]]},"898":{"position":[[685,5],[908,5],[1140,5],[1580,5]]},"904":{"position":[[1949,6]]},"911":{"position":[[333,6]]},"917":{"position":[[1458,6]]},"918":{"position":[[2241,6]]},"919":{"position":[[2296,6]]},"927":{"position":[[333,6]]},"931":{"position":[[1611,6]]},"938":{"position":[[333,6]]},"945":{"position":[[266,6]]},"954":{"position":[[333,6]]},"965":{"position":[[1458,6]]},"972":{"position":[[333,6]]},"1008":{"position":[[1692,4]]},"1015":{"position":[[126,4]]},"1016":{"position":[[228,4]]},"1032":{"position":[[1189,4],[1216,5]]},"1140":{"position":[[2049,4]]},"1162":{"position":[[1089,4]]},"1163":{"position":[[362,4]]},"1182":{"position":[[644,4]]},"1191":{"position":[[664,4]]},"1192":{"position":[[587,4]]},"1200":{"position":[[465,5],[1037,4],[1072,4]]},"1209":{"position":[[666,4]]},"1230":{"position":[[747,5],[1078,4]]},"1231":{"position":[[287,4]]},"1262":{"position":[[648,4]]},"1281":{"position":[[394,4]]},"1292":{"position":[[6544,4]]},"1295":{"position":[[394,4]]},"1306":{"position":[[6544,4]]},"1316":{"position":[[2049,4]]},"1319":{"position":[[394,4]]},"1329":{"position":[[6544,4]]},"1340":{"position":[[2049,4]]},"1351":{"position":[[2049,4]]},"1379":{"position":[[5384,4]]},"1383":{"position":[[1535,4],[1562,5]]},"1389":{"position":[[646,4]]},"1394":{"position":[[838,4]]},"1403":{"position":[[5384,4]]},"1414":{"position":[[5384,4]]},"1423":{"position":[[574,4]]},"1431":{"position":[[2072,4]]},"1459":{"position":[[224,4]]}},"keywords":{}}],["truncat",{"_index":4636,"title":{},"content":{"760":{"position":[[781,8]]},"773":{"position":[[781,8]]},"800":{"position":[[781,8]]},"815":{"position":[[781,8]]},"831":{"position":[[781,8]]},"1140":{"position":[[2087,8]]},"1209":{"position":[[685,8]]},"1292":{"position":[[6572,8]]},"1306":{"position":[[6572,8]]},"1316":{"position":[[2087,8]]},"1329":{"position":[[6572,8]]},"1340":{"position":[[2087,8]]},"1351":{"position":[[2087,8]]},"1379":{"position":[[3794,8]]},"1403":{"position":[[3794,8]]},"1414":{"position":[[3794,8]]},"1431":{"position":[[2110,8]]}},"keywords":{}}],["truth",{"_index":3175,"title":{},"content":{"326":{"position":[[292,5]]}},"keywords":{}}],["try_cast",{"_index":6406,"title":{},"content":{"1394":{"position":[[866,8]]}},"keywords":{}}],["try_convert",{"_index":6341,"title":{},"content":{"1379":{"position":[[3856,11]]},"1403":{"position":[[3856,11]]},"1414":{"position":[[3856,11]]}},"keywords":{}}],["tsequal",{"_index":6342,"title":{},"content":{"1379":{"position":[[3917,7]]},"1403":{"position":[[3917,7]]},"1414":{"position":[[3917,7]]}},"keywords":{}}],["tuesday",{"_index":6537,"title":{},"content":{"1452":{"position":[[1470,8],[4404,8]]}},"keywords":{}}],["tune",{"_index":1677,"title":{"922":{"position":[[18,6]]}},"content":{"122":{"position":[[765,6]]},"281":{"position":[[3056,7]]},"517":{"position":[[3377,4],[3676,4]]}},"keywords":{}}],["tunnel",{"_index":1217,"title":{"220":{"position":[[31,9]]},"784":{"position":[[4,10]]},"1255":{"position":[[4,10]]},"1272":{"position":[[4,9]]},"1298":{"position":[[17,10]]},"1322":{"position":[[17,10]]},"1335":{"position":[[17,10]]},"1346":{"position":[[17,10]]}},"content":{"83":{"position":[[414,10],[528,9],[1171,10]]},"222":{"position":[[14,9]]},"223":{"position":[[14,9]]},"224":{"position":[[14,9]]},"225":{"position":[[493,9]]},"238":{"position":[[169,9],[373,6]]},"242":{"position":[[300,6]]},"366":{"position":[[1144,10]]},"370":{"position":[[1523,6],[1816,9]]},"750":{"position":[[1364,10],[1451,10]]},"753":{"position":[[329,10],[561,7]]},"767":{"position":[[475,10],[707,7]]},"784":{"position":[[109,10],[353,7]]},"789":{"position":[[1765,10],[1852,10]]},"792":{"position":[[336,7],[763,10],[985,7]]},"793":{"position":[[150,7],[298,10],[520,7]]},"808":{"position":[[150,7],[314,10],[536,7]]},"824":{"position":[[150,7],[555,10],[777,7]]},"866":{"position":[[314,10],[537,7]]},"878":{"position":[[324,10],[547,7]]},"904":{"position":[[150,7],[554,10],[776,7]]},"915":{"position":[[1221,10],[1308,10]]},"918":{"position":[[336,7],[763,10],[985,7]]},"919":{"position":[[150,7],[298,10],[520,7]]},"931":{"position":[[150,7],[318,10],[540,7]]},"963":{"position":[[1375,10],[1462,10]]},"1042":{"position":[[1200,10],[1326,7]]},"1043":{"position":[[150,7],[298,10],[520,7]]},"1051":{"position":[[150,7],[554,10],[776,7]]},"1059":{"position":[[150,7],[318,10],[540,7]]},"1136":{"position":[[297,10]]},"1138":{"position":[[419,10],[814,6],[1107,9]]},"1149":{"position":[[100,7]]},"1154":{"position":[[195,7],[264,6],[493,10],[721,7]]},"1198":{"position":[[198,10],[442,7]]},"1255":{"position":[[109,10],[353,7]]},"1272":{"position":[[40,9],[151,9]]},"1282":{"position":[[459,7]]},"1283":{"position":[[161,7],[314,10]]},"1288":{"position":[[171,7]]},"1289":{"position":[[161,7],[765,9],[827,9],[1061,7]]},"1298":{"position":[[14,9]]},"1303":{"position":[[150,7],[318,10],[540,7],[772,7]]},"1310":{"position":[[474,7]]},"1311":{"position":[[151,10]]},"1320":{"position":[[161,7]]},"1322":{"position":[[14,9],[1046,9],[1280,7]]},"1333":{"position":[[161,7]]},"1334":{"position":[[267,9]]},"1335":{"position":[[14,9]]},"1344":{"position":[[161,7]]},"1346":{"position":[[14,9]]},"1373":{"position":[[150,7],[536,10],[758,7]]},"1374":{"position":[[150,7],[536,10],[758,7]]},"1397":{"position":[[150,7],[315,10],[537,7]]},"1398":{"position":[[150,7],[314,10],[536,7]]},"1408":{"position":[[473,10],[599,7]]},"1409":{"position":[[150,7],[298,10],[520,7]]}},"keywords":{}}],["tunnel.flow.yaml",{"_index":1223,"title":{},"content":{"83":{"position":[[891,16]]}},"keywords":{}}],["tunnelingin",{"_index":3400,"title":{},"content":{"367":{"position":[[857,11]]},"1136":{"position":[[411,11]]}},"keywords":{}}],["tunnelingwhen",{"_index":4597,"title":{},"content":{"753":{"position":[[398,13]]},"767":{"position":[[544,13]]},"792":{"position":[[822,13]]},"793":{"position":[[357,13]]},"808":{"position":[[373,13]]},"824":{"position":[[614,13]]},"866":{"position":[[374,13]]},"878":{"position":[[384,13]]},"904":{"position":[[613,13]]},"918":{"position":[[822,13]]},"919":{"position":[[357,13]]},"931":{"position":[[377,13]]},"1043":{"position":[[357,13]]},"1051":{"position":[[613,13]]},"1059":{"position":[[377,13]]},"1303":{"position":[[377,13]]},"1373":{"position":[[595,13]]},"1374":{"position":[[595,13]]},"1397":{"position":[[374,13]]},"1398":{"position":[[373,13]]},"1409":{"position":[[357,13]]}},"keywords":{}}],["tupl",{"_index":1540,"title":{},"content":{"107":{"position":[[1659,6],[3500,6]]},"480":{"position":[[387,5],[1271,5],[1354,5]]},"1477":{"position":[[3458,8],[3740,7]]}},"keywords":{}}],["turn",{"_index":88,"title":{},"content":{"2":{"position":[[528,6]]},"16":{"position":[[725,4]]},"84":{"position":[[553,4]]},"122":{"position":[[387,4]]},"239":{"position":[[1722,6]]},"263":{"position":[[1151,5]]},"274":{"position":[[1936,5]]},"338":{"position":[[442,5]]},"368":{"position":[[437,4]]},"395":{"position":[[211,4],[306,4]]},"590":{"position":[[244,5]]},"755":{"position":[[437,4]]},"768":{"position":[[437,4]]},"795":{"position":[[435,4]]},"810":{"position":[[435,4]]},"826":{"position":[[435,4]]},"905":{"position":[[440,4]]},"920":{"position":[[440,4]]},"932":{"position":[[440,4]]},"948":{"position":[[440,4]]},"966":{"position":[[440,4]]},"1156":{"position":[[635,5]]},"1438":{"position":[[735,6]]}},"keywords":{}}],["turnkey",{"_index":3129,"title":{},"content":{"320":{"position":[[2320,7]]},"321":{"position":[[1991,7]]}},"keywords":{}}],["tutori",{"_index":1481,"title":{"177":{"position":[[5,9]]},"195":{"position":[[6,9]]}},"content":{"103":{"position":[[828,8]]},"177":{"position":[[5,9],[20,9]]},"179":{"position":[[263,8]]},"182":{"position":[[351,8]]},"190":{"position":[[1350,9]]},"193":{"position":[[670,9]]},"196":{"position":[[736,9]]},"199":{"position":[[26,9],[237,8]]},"202":{"position":[[293,9]]},"204":{"position":[[68,9],[781,9],[964,9]]},"211":{"position":[[9,9],[270,9]]},"212":{"position":[[355,9]]},"213":{"position":[[525,10]]},"232":{"position":[[9,9],[715,9]]},"233":{"position":[[921,9]]},"234":{"position":[[6,8],[310,8],[559,9]]},"236":{"position":[[9,8]]},"237":{"position":[[2447,8]]},"238":{"position":[[580,8]]},"239":{"position":[[2824,9]]},"240":{"position":[[4199,9]]},"243":{"position":[[349,9]]},"252":{"position":[[6,8]]},"253":{"position":[[721,8],[3095,8]]},"254":{"position":[[3189,8]]},"255":{"position":[[1102,9]]},"260":{"position":[[139,9]]},"294":{"position":[[6,8]]},"295":{"position":[[31,8]]},"296":{"position":[[255,8],[791,8],[892,8],[1226,8],[2792,8],[2893,8],[3944,8],[4179,9],[5304,8],[5394,8],[5956,8],[6046,8]]},"297":{"position":[[114,9]]},"312":{"position":[[6,8]]},"313":{"position":[[721,8],[3172,8]]},"314":{"position":[[2061,9],[2764,8]]},"315":{"position":[[407,8],[658,9]]},"316":{"position":[[1427,9]]}},"keywords":{}}],["tutorial/edit",{"_index":2769,"title":{},"content":{"254":{"position":[[265,14]]},"255":{"position":[[205,14]]}},"keywords":{}}],["tutorial/recentchang",{"_index":3069,"title":{},"content":{"314":{"position":[[265,21],[648,21]]},"315":{"position":[[980,21],[1394,21],[1490,21]]},"316":{"position":[[207,21]]}},"keywords":{}}],["tutorialacm",{"_index":2804,"title":{},"content":{"268":{"position":[[1565,12]]}},"keywords":{}}],["twice",{"_index":3833,"title":{},"content":{"480":{"position":[[188,5]]}},"keywords":{}}],["twilio",{"_index":3386,"title":{"1109":{"position":[[0,6]]}},"content":{"364":{"position":[[3484,6]]},"1110":{"position":[[56,6]]},"1111":{"position":[[1,6]]},"1112":{"position":[[250,6]]},"1113":{"position":[[84,6],[142,6],[529,6]]}},"keywords":{}}],["twilio:dev",{"_index":3387,"title":{},"content":{"364":{"position":[[3537,10]]},"1114":{"position":[[90,10]]}},"keywords":{}}],["two",{"_index":396,"title":{"293":{"position":[[12,3]]}},"content":{"13":{"position":[[724,3]]},"19":{"position":[[118,3]]},"20":{"position":[[586,3]]},"24":{"position":[[242,3]]},"29":{"position":[[11,3]]},"32":{"position":[[150,3]]},"56":{"position":[[2537,3]]},"66":{"position":[[804,3]]},"71":{"position":[[691,3]]},"81":{"position":[[2794,3]]},"98":{"position":[[577,6]]},"112":{"position":[[1003,3]]},"113":{"position":[[908,3]]},"132":{"position":[[180,3]]},"154":{"position":[[421,3]]},"204":{"position":[[544,3]]},"232":{"position":[[898,3]]},"240":{"position":[[2857,3]]},"254":{"position":[[1865,3],[1948,3]]},"268":{"position":[[153,3]]},"281":{"position":[[715,3]]},"295":{"position":[[57,3]]},"296":{"position":[[1081,3],[1712,3],[1817,3],[3114,3],[4131,3],[5735,3]]},"297":{"position":[[72,3]]},"315":{"position":[[610,3]]},"324":{"position":[[678,3]]},"333":{"position":[[520,3]]},"373":{"position":[[986,3]]},"379":{"position":[[181,3],[460,3]]},"483":{"position":[[635,3]]},"513":{"position":[[11,3]]},"522":{"position":[[11,3]]},"530":{"position":[[11,3]]},"551":{"position":[[11,3]]},"569":{"position":[[11,3]]},"581":{"position":[[282,3]]},"590":{"position":[[357,3]]},"595":{"position":[[312,3]]},"607":{"position":[[11,3]]},"614":{"position":[[11,3]]},"643":{"position":[[11,3]]},"650":{"position":[[11,3]]},"683":{"position":[[11,3]]},"716":{"position":[[11,3]]},"731":{"position":[[11,3]]},"792":{"position":[[254,3]]},"793":{"position":[[68,3]]},"808":{"position":[[68,3]]},"824":{"position":[[68,3]]},"845":{"position":[[7,3]]},"855":{"position":[[194,3]]},"904":{"position":[[68,3]]},"918":{"position":[[254,3]]},"919":{"position":[[68,3]]},"922":{"position":[[396,3],[1099,3],[1642,3]]},"931":{"position":[[68,3]]},"974":{"position":[[246,3]]},"977":{"position":[[66,3]]},"1008":{"position":[[796,3]]},"1043":{"position":[[68,3]]},"1051":{"position":[[68,3]]},"1059":{"position":[[68,3]]},"1067":{"position":[[269,3]]},"1129":{"position":[[11,3]]},"1232":{"position":[[599,3]]},"1243":{"position":[[1035,3]]},"1283":{"position":[[79,3]]},"1289":{"position":[[79,3]]},"1303":{"position":[[68,3]]},"1320":{"position":[[79,3]]},"1333":{"position":[[79,3]]},"1344":{"position":[[79,3]]},"1373":{"position":[[68,3]]},"1374":{"position":[[68,3]]},"1388":{"position":[[349,3]]},"1397":{"position":[[68,3]]},"1398":{"position":[[68,3]]},"1409":{"position":[[68,3]]},"1461":{"position":[[4539,3]]},"1466":{"position":[[16,3],[411,3]]},"1467":{"position":[[363,3]]},"1470":{"position":[[616,3]]},"1479":{"position":[[320,3]]}},"keywords":{}}],["two"",{"_index":1720,"title":{},"content":{"128":{"position":[[593,9],[738,9]]}},"keywords":{}}],["two_weekly_active_us",{"_index":4205,"title":{},"content":{"575":{"position":[[990,23]]}},"keywords":{}}],["txn",{"_index":6440,"title":{},"content":{"1434":{"position":[[549,3],[616,3],[850,4],[2002,4]]}},"keywords":{}}],["txncount",{"_index":6695,"title":{},"content":{"1475":{"position":[[532,9]]}},"keywords":{}}],["type",{"_index":19,"title":{"89":{"position":[[7,6]]},"309":{"position":[[15,4]]},"427":{"position":[[15,6]]},"499":{"position":[[15,6]]},"634":{"position":[[15,6]]},"1007":{"position":[[27,4]]},"1164":{"position":[[15,6]]},"1172":{"position":[[13,6]]},"1222":{"position":[[13,6]]},"1393":{"position":[[15,4]]}},"content":{"1":{"position":[[247,5],[691,5]]},"8":{"position":[[510,4]]},"14":{"position":[[449,5],[480,5],[503,5],[920,4]]},"17":{"position":[[557,5],[942,5]]},"23":{"position":[[261,5]]},"50":{"position":[[51,5],[98,5],[203,4]]},"56":{"position":[[136,5],[998,5],[1477,5],[1620,5],[1903,5]]},"61":{"position":[[612,5],[867,4]]},"64":{"position":[[263,5]]},"66":{"position":[[317,5]]},"69":{"position":[[142,5],[389,5],[727,5],[828,5],[1006,5]]},"70":{"position":[[366,6],[710,5]]},"72":{"position":[[61,6],[100,5],[291,5],[418,5],[483,6],[529,6],[631,4],[729,5]]},"76":{"position":[[650,5]]},"89":{"position":[[219,4],[346,5]]},"90":{"position":[[598,5]]},"94":{"position":[[262,5],[421,5],[604,5],[789,5],[1319,5],[2829,5]]},"99":{"position":[[784,6]]},"102":{"position":[[373,6],[475,6],[492,4]]},"107":{"position":[[1828,5],[3590,5],[3687,5],[3758,5],[3913,6]]},"119":{"position":[[71,6]]},"120":{"position":[[152,5],[338,5],[904,5],[983,5],[2050,5]]},"121":{"position":[[942,5],[1060,5]]},"122":{"position":[[180,5],[1074,5],[1419,5],[1588,5],[1719,5],[2228,5]]},"138":{"position":[[638,4],[1831,5],[1856,4]]},"141":{"position":[[772,4]]},"142":{"position":[[585,4],[1872,5],[1897,4]]},"156":{"position":[[192,4],[288,6]]},"158":{"position":[[593,6],[691,4]]},"159":{"position":[[767,5]]},"160":{"position":[[119,4],[746,5],[793,6],[816,6]]},"162":{"position":[[1970,5],[2014,5],[2144,5],[2166,6],[2203,5],[2259,5],[2281,6]]},"164":{"position":[[521,5],[607,5],[1822,5]]},"165":{"position":[[1012,5],[1044,5]]},"166":{"position":[[352,5],[396,6],[428,6]]},"183":{"position":[[586,6],[1209,5],[1243,5],[1817,5],[1850,5],[1869,5],[1947,5],[3623,5],[3656,5],[3675,5],[3753,5]]},"189":{"position":[[1026,5]]},"197":{"position":[[666,5]]},"198":{"position":[[860,4],[871,4]]},"199":{"position":[[308,5]]},"203":{"position":[[60,4]]},"207":{"position":[[913,5],[945,5]]},"210":{"position":[[1168,5]]},"216":{"position":[[128,5]]},"217":{"position":[[630,4],[1597,6]]},"218":{"position":[[1087,4]]},"228":{"position":[[1286,6]]},"238":{"position":[[961,4],[1041,4]]},"240":{"position":[[4533,5]]},"254":{"position":[[298,5],[332,5],[364,5],[412,5],[464,5],[818,5],[1366,5],[1400,5],[1432,5],[1480,5],[1532,5],[2875,5],[3536,5]]},"264":{"position":[[256,5],[767,5]]},"267":{"position":[[677,4],[954,6]]},"268":{"position":[[841,5],[875,5]]},"269":{"position":[[466,5],[500,5]]},"274":{"position":[[1007,5],[1466,4]]},"275":{"position":[[276,5]]},"279":{"position":[[1190,5]]},"280":{"position":[[1439,5]]},"281":{"position":[[2018,5],[2105,5],[2129,5],[2460,6]]},"290":{"position":[[455,4]]},"296":{"position":[[406,5],[444,5],[464,5],[483,5],[503,5],[524,5],[1377,5],[1415,5],[1435,5],[1454,5],[1474,5],[1495,5],[3585,5],[4363,5],[4504,4],[4769,4],[4968,4]]},"301":{"position":[[395,4]]},"306":{"position":[[316,4]]},"307":{"position":[[1318,5],[1350,5],[1381,5],[1408,5],[2186,5],[2218,5],[2249,5],[2276,5]]},"309":{"position":[[80,4],[393,5],[656,5],[674,5],[904,6],[1079,5],[1152,5],[2152,5],[2184,5],[2211,5],[2242,5],[2574,4],[2749,5],[2781,5],[2808,5],[2839,5],[3338,4]]},"314":{"position":[[1146,5],[1167,5],[1187,5],[1226,5],[1247,5],[1267,5],[1286,5],[1299,5]]},"315":{"position":[[853,5],[1030,4]]},"319":{"position":[[998,6]]},"325":{"position":[[303,4]]},"326":{"position":[[1200,4]]},"329":{"position":[[1077,5]]},"332":{"position":[[634,5],[662,4]]},"351":{"position":[[39,4],[336,4]]},"359":{"position":[[108,4],[313,4]]},"370":{"position":[[256,4],[2021,4]]},"377":{"position":[[39,4],[1701,4]]},"387":{"position":[[219,4],[297,4],[1350,4]]},"392":{"position":[[39,4],[700,4]]},"397":{"position":[[39,4],[842,4]]},"402":{"position":[[39,4],[666,4]]},"408":{"position":[[39,4],[543,4]]},"417":{"position":[[39,4],[1786,5],[1869,4],[2236,4]]},"418":{"position":[[167,5]]},"419":{"position":[[69,5],[130,6],[281,4],[732,4],[803,4],[1137,5],[1169,6],[1365,5],[1858,5]]},"424":{"position":[[39,4],[367,4]]},"427":{"position":[[314,5]]},"432":{"position":[[39,4],[522,4],[1210,4]]},"436":{"position":[[659,4]]},"438":{"position":[[39,4],[1915,4]]},"439":{"position":[[424,5]]},"440":{"position":[[85,5],[146,6],[297,4],[748,4],[819,4],[1153,5],[1185,6],[1381,5]]},"441":{"position":[[467,5]]},"448":{"position":[[219,4],[1237,4]]},"454":{"position":[[39,4],[556,4]]},"460":{"position":[[39,4],[573,4]]},"466":{"position":[[39,4],[284,4]]},"482":{"position":[[39,4],[516,4]]},"487":{"position":[[599,5]]},"491":{"position":[[28,4]]},"492":{"position":[[28,4]]},"496":{"position":[[39,4],[549,4]]},"499":{"position":[[135,5],[305,4],[381,5]]},"502":{"position":[[39,4],[1434,5],[1517,4],[1569,4]]},"504":{"position":[[47,6],[68,5],[218,4],[664,4],[735,4],[868,4],[932,4],[1487,5]]},"509":{"position":[[39,4],[549,4]]},"515":{"position":[[471,4]]},"517":{"position":[[510,4],[3972,4]]},"534":{"position":[[219,4],[1717,4]]},"537":{"position":[[63,5],[185,4]]},"540":{"position":[[39,4],[334,4]]},"545":{"position":[[39,4],[1388,5],[1471,4],[1631,4]]},"546":{"position":[[904,5]]},"547":{"position":[[70,5],[131,6],[282,4],[733,4],[804,4],[1139,5],[1171,6],[1367,5],[1860,5]]},"548":{"position":[[1500,5],[1522,5]]},"556":{"position":[[219,4],[2214,4]]},"564":{"position":[[39,4]]},"565":{"position":[[28,4]]},"573":{"position":[[223,4],[342,4],[1293,4]]},"584":{"position":[[211,4],[1365,4]]},"593":{"position":[[39,4],[357,4]]},"601":{"position":[[39,4],[428,4]]},"611":{"position":[[219,4],[322,4],[1204,4]]},"619":{"position":[[120,4],[297,4],[606,4]]},"625":{"position":[[39,4],[178,4]]},"631":{"position":[[39,4],[509,4]]},"634":{"position":[[127,5],[297,4],[373,5]]},"635":{"position":[[104,6]]},"637":{"position":[[39,4],[948,5],[1031,4],[1167,4]]},"638":{"position":[[196,5]]},"639":{"position":[[46,6],[67,5],[217,4],[662,4],[733,4],[866,4],[930,4],[1485,5]]},"646":{"position":[[392,4],[747,4]]},"649":{"position":[[582,4]]},"654":{"position":[[113,4],[625,4],[829,4]]},"664":{"position":[[28,4]]},"665":{"position":[[28,4]]},"670":{"position":[[39,4],[667,4]]},"679":{"position":[[28,4]]},"680":{"position":[[28,4]]},"685":{"position":[[197,4],[491,4]]},"694":{"position":[[28,4]]},"695":{"position":[[28,4]]},"700":{"position":[[39,4],[319,4]]},"706":{"position":[[39,4],[319,4]]},"709":{"position":[[361,4],[379,4]]},"712":{"position":[[39,4],[514,4]]},"720":{"position":[[219,4],[823,4]]},"728":{"position":[[28,4]]},"735":{"position":[[108,4],[172,4],[243,4],[263,5],[406,4]]},"738":{"position":[[108,4],[163,4],[273,4],[413,6]]},"741":{"position":[[39,4],[496,4]]},"747":{"position":[[39,4],[1378,4]]},"750":{"position":[[1074,4]]},"754":{"position":[[256,4]]},"757":{"position":[[39,4],[570,4],[1928,4]]},"762":{"position":[[262,4]]},"766":{"position":[[1074,4]]},"770":{"position":[[39,4],[570,4],[1928,4]]},"775":{"position":[[262,4]]},"782":{"position":[[39,4],[524,4]]},"789":{"position":[[1475,4]]},"790":{"position":[[63,5]]},"794":{"position":[[129,4]]},"797":{"position":[[39,4],[570,4],[1928,4]]},"802":{"position":[[262,4]]},"807":{"position":[[1062,4]]},"809":{"position":[[129,4]]},"812":{"position":[[39,4],[570,4],[1928,4]]},"817":{"position":[[262,4]]},"823":{"position":[[1062,4]]},"825":{"position":[[129,4]]},"828":{"position":[[39,4],[570,4],[1928,4]]},"833":{"position":[[262,4]]},"842":{"position":[[39,4],[605,4],[1055,4],[1303,4],[1901,4]]},"846":{"position":[[182,5]]},"847":{"position":[[267,5]]},"851":{"position":[[39,4],[599,4]]},"856":{"position":[[122,4]]},"859":{"position":[[219,4],[357,4],[746,4]]},"867":{"position":[[39,4],[2125,4]]},"879":{"position":[[39,4],[1548,4]]},"885":{"position":[[39,4],[620,4]]},"891":{"position":[[39,4],[355,4]]},"897":{"position":[[39,4],[273,4]]},"907":{"position":[[39,4],[1428,4]]},"916":{"position":[[63,5]]},"923":{"position":[[39,4],[1428,4]]},"934":{"position":[[39,4],[1428,4]]},"943":{"position":[[1132,5]]},"950":{"position":[[39,4],[1428,4]]},"959":{"position":[[39,4],[375,4]]},"968":{"position":[[39,4],[1428,4]]},"974":{"position":[[258,5]]},"982":{"position":[[39,4],[377,4]]},"991":{"position":[[229,4],[800,4]]},"997":{"position":[[39,4],[345,4]]},"1008":{"position":[[1657,5],[1713,5]]},"1009":{"position":[[229,4],[316,4],[1539,4]]},"1015":{"position":[[39,4],[433,4]]},"1021":{"position":[[312,4],[1945,5],[2047,4]]},"1022":{"position":[[233,5]]},"1023":{"position":[[50,5],[111,6],[262,4],[713,4],[784,4],[1120,5],[1152,6],[1348,5],[1841,5]]},"1028":{"position":[[39,4],[380,4]]},"1034":{"position":[[28,4]]},"1035":{"position":[[28,4]]},"1041":{"position":[[63,5]]},"1045":{"position":[[39,4],[1047,4]]},"1047":{"position":[[836,5]]},"1050":{"position":[[978,5]]},"1053":{"position":[[39,4],[1047,4]]},"1055":{"position":[[836,5]]},"1061":{"position":[[39,4],[1047,4]]},"1063":{"position":[[836,5]]},"1070":{"position":[[219,4],[1003,4]]},"1076":{"position":[[39,4],[786,4]]},"1085":{"position":[[275,4],[407,4],[1377,4]]},"1094":{"position":[[39,4],[442,4]]},"1101":{"position":[[39,4],[276,4]]},"1107":{"position":[[39,4],[414,4]]},"1113":{"position":[[39,4],[476,4]]},"1123":{"position":[[593,5]]},"1125":{"position":[[39,4],[522,4]]},"1133":{"position":[[39,4],[104,4],[1210,4]]},"1138":{"position":[[256,4],[1311,4]]},"1144":{"position":[[39,4],[1274,4]]},"1151":{"position":[[39,4],[1345,4]]},"1162":{"position":[[39,4],[778,4]]},"1164":{"position":[[79,4],[119,4],[201,4],[572,6],[605,6],[747,5]]},"1170":{"position":[[39,4],[1199,4]]},"1172":{"position":[[71,4],[118,5],[141,4],[173,5],[202,4],[236,5],[265,4],[283,4]]},"1179":{"position":[[39,4],[1009,4]]},"1188":{"position":[[39,4],[552,5],[728,4]]},"1196":{"position":[[39,4],[886,4]]},"1199":{"position":[[176,5]]},"1200":{"position":[[24,5],[238,5]]},"1206":{"position":[[39,4],[850,4],[1055,4],[1060,4]]},"1213":{"position":[[39,4],[951,4]]},"1220":{"position":[[39,4],[876,4]]},"1222":{"position":[[71,4],[118,5],[141,4],[173,5],[202,4],[236,5],[265,4],[283,4]]},"1230":{"position":[[39,4],[226,4],[829,4]]},"1239":{"position":[[28,4]]},"1240":{"position":[[28,4]]},"1241":{"position":[[237,5]]},"1247":{"position":[[210,4],[397,4],[1047,4]]},"1253":{"position":[[39,4],[439,4]]},"1260":{"position":[[39,4],[893,4]]},"1267":{"position":[[28,4]]},"1269":{"position":[[28,4]]},"1275":{"position":[[166,4],[288,4]]},"1277":{"position":[[39,4],[1021,4]]},"1282":{"position":[[63,5]]},"1285":{"position":[[39,4]]},"1286":{"position":[[2522,4]]},"1292":{"position":[[6603,4],[6626,5]]},"1300":{"position":[[39,4]]},"1301":{"position":[[2358,4]]},"1306":{"position":[[6603,4],[6626,5]]},"1310":{"position":[[63,5]]},"1313":{"position":[[39,4],[855,4]]},"1317":{"position":[[435,6],[738,5],[852,6]]},"1324":{"position":[[39,4]]},"1325":{"position":[[2522,4]]},"1329":{"position":[[6603,4],[6626,5]]},"1337":{"position":[[39,4],[855,4]]},"1341":{"position":[[435,6],[738,5],[852,6]]},"1348":{"position":[[39,4],[855,4]]},"1352":{"position":[[435,6],[738,5],[852,6]]},"1356":{"position":[[39,4],[906,4]]},"1362":{"position":[[201,4],[492,4]]},"1367":{"position":[[39,4]]},"1376":{"position":[[39,4],[437,4]]},"1386":{"position":[[39,4],[802,4],[1131,4]]},"1393":{"position":[[34,5]]},"1400":{"position":[[39,4],[437,4]]},"1407":{"position":[[63,5]]},"1411":{"position":[[39,4],[437,4]]},"1420":{"position":[[39,4],[678,4]]},"1427":{"position":[[39,4],[582,4]]},"1432":{"position":[[435,6],[752,5],[880,6]]},"1434":{"position":[[50,5]]},"1461":{"position":[[2046,4]]},"1463":{"position":[[301,5],[361,5]]},"1464":{"position":[[157,5],[217,5],[264,4],[332,5]]},"1465":{"position":[[480,5],[512,5],[536,5]]},"1466":{"position":[[116,5],[176,5],[220,5],[313,5]]},"1467":{"position":[[459,5],[519,5],[565,5],[656,5],[781,5],[842,5],[2130,5],[2190,5],[2212,5]]},"1470":{"position":[[942,5]]},"1473":{"position":[[196,4]]},"1474":{"position":[[367,4],[449,4],[624,4]]},"1475":{"position":[[309,4]]},"1476":{"position":[[167,5],[227,5],[874,5],[1233,5],[1293,5],[1336,5],[1357,5],[1372,5]]},"1477":{"position":[[937,5],[997,5],[1063,5],[1261,5],[1296,5],[2970,5],[2990,4],[3159,5],[3219,5],[3285,5],[3489,5],[3755,5],[3776,5],[3791,5]]},"1480":{"position":[[275,5],[689,5]]}},"keywords":{}}],["type>/<collect",{"_index":6696,"title":{},"content":{"1475":{"position":[[843,23],[966,23],[1129,23]]}},"keywords":{}}],["type>/{}/bytestot",{"_index":6701,"title":{},"content":{"1475":{"position":[[1296,22]]}},"keywords":{}}],["type>/{}/docstot",{"_index":6700,"title":{},"content":{"1475":{"position":[[1226,21]]}},"keywords":{}}],["type/catalogprefix",{"_index":6588,"title":{},"content":{"1457":{"position":[[28,18]]}},"keywords":{}}],["type/dis",{"_index":3229,"title":{},"content":{"343":{"position":[[28,12]]}},"keywords":{}}],["type/notbefor",{"_index":6728,"title":{},"content":{"1481":{"position":[[28,14]]}},"keywords":{}}],["type/shard",{"_index":6682,"title":{},"content":{"1474":{"position":[[388,10]]}},"keywords":{}}],["type/syncfrequ",{"_index":6524,"title":{},"content":{"1452":{"position":[[271,18]]}},"keywords":{}}],["type/t",{"_index":6691,"title":{},"content":{"1475":{"position":[[330,7]]}},"keywords":{}}],["typearray",{"_index":5767,"title":{},"content":{"1164":{"position":[[221,9]]}},"keywords":{}}],["typeclick",{"_index":3523,"title":{},"content":{"395":{"position":[[296,9]]}},"keywords":{}}],["types.click",{"_index":3698,"title":{},"content":{"436":{"position":[[432,11]]}},"keywords":{}}],["typescript",{"_index":619,"title":{"64":{"position":[[0,10]]},"102":{"position":[[0,11]]},"269":{"position":[[6,10]]},"293":{"position":[[28,12]]},"311":{"position":[[28,10]]}},"content":{"26":{"position":[[633,10]]},"50":{"position":[[87,10],[239,10]]},"63":{"position":[[431,10],[470,10]]},"64":{"position":[[1,10],[252,10],[676,10],[908,10]]},"91":{"position":[[94,10],[219,10],[418,10]]},"94":{"position":[[332,12],[755,10],[802,11],[816,10],[876,10],[2404,10],[2492,10]]},"95":{"position":[[320,11]]},"102":{"position":[[8,10],[99,10],[137,10],[273,10],[337,10],[464,10]]},"103":{"position":[[15,10],[80,10]]},"104":{"position":[[322,10]]},"112":{"position":[[386,10]]},"158":{"position":[[631,10]]},"267":{"position":[[486,11],[590,10],[1657,10],[1752,10]]},"269":{"position":[[14,10],[179,10],[545,11],[997,10],[1065,10]]},"270":{"position":[[1552,10],[1627,10]]},"271":{"position":[[309,10]]},"281":{"position":[[30,10],[474,11],[487,10],[771,10],[954,11],[1146,10],[1674,10],[2372,10],[2424,10]]},"294":{"position":[[79,11]]},"296":{"position":[[692,11],[2693,11],[3011,10],[3911,10],[3953,10]]},"297":{"position":[[42,10]]},"312":{"position":[[79,11]]},"314":{"position":[[296,11],[400,11],[679,11],[2255,11],[2439,10],[3046,11]]},"315":{"position":[[45,10],[368,10],[1011,11],[1521,11]]},"316":{"position":[[238,10]]},"317":{"position":[[61,10]]},"332":{"position":[[623,10]]},"1461":{"position":[[375,10]]}},"keywords":{}}],["typescript.t",{"_index":3076,"title":{},"content":{"315":{"position":[[444,13],[823,13],[1425,15]]}},"keywords":{}}],["typescript/customers_with_ord",{"_index":2994,"title":{},"content":{"296":{"position":[[264,33],[1235,33],[5403,33],[6055,33]]}},"keywords":{}}],["typescript/customers_with_orders.t",{"_index":3015,"title":{},"content":{"296":{"position":[[5313,37],[5965,37]]}},"keywords":{}}],["typesissu",{"_index":4470,"title":{},"content":{"709":{"position":[[211,10]]}},"keywords":{}}],["typesmetadatatemplatesuserspushsendpushsendskippushopenpushuninstallpushbouncewebpushsendwebpushclickwebpushsendskipinappsendinappopeninappclickinappcloseinappdeleteinappdeliveryinappsendskipinboxsessioninboxmessageimpressionsmssendsmsbouncesmsclicksmsreceivedsmssendskipsmsusageinfopurchasecustomeventhostedunsubscribeclick",{"_index":4459,"title":{},"content":{"697":{"position":[[239,324]]}},"keywords":{}}],["typesproject",{"_index":4486,"title":{},"content":{"709":{"position":[[577,12]]}},"keywords":{}}],["typic",{"_index":108,"title":{},"content":{"3":{"position":[[216,9]]},"63":{"position":[[147,9]]},"82":{"position":[[3477,9]]},"89":{"position":[[391,9]]},"115":{"position":[[703,9]]},"122":{"position":[[815,9]]},"125":{"position":[[357,9]]},"154":{"position":[[1405,9]]},"157":{"position":[[195,9],[329,9]]},"162":{"position":[[1335,9]]},"201":{"position":[[143,9]]},"266":{"position":[[146,10]]},"309":{"position":[[916,9]]},"320":{"position":[[1039,9]]},"322":{"position":[[320,9],[1057,9]]},"323":{"position":[[107,9]]},"364":{"position":[[273,10]]},"370":{"position":[[704,9]]},"377":{"position":[[130,9]]},"417":{"position":[[113,9]]},"438":{"position":[[113,9]]},"477":{"position":[[698,9]]},"502":{"position":[[573,9]]},"545":{"position":[[113,9]]},"593":{"position":[[247,9]]},"598":{"position":[[662,9]]},"660":{"position":[[21,9],[266,9]]},"842":{"position":[[2734,9]]},"907":{"position":[[487,9]]},"923":{"position":[[487,9]]},"934":{"position":[[487,9]]},"950":{"position":[[487,9]]},"968":{"position":[[487,9]]},"1009":{"position":[[1636,9]]},"1021":{"position":[[1135,9]]},"1034":{"position":[[714,9]]},"1045":{"position":[[472,9]]},"1053":{"position":[[472,9]]},"1061":{"position":[[472,9]]},"1179":{"position":[[814,10]]},"1277":{"position":[[743,9]]},"1285":{"position":[[818,9]]},"1300":{"position":[[818,9]]},"1313":{"position":[[672,9]]},"1324":{"position":[[818,9]]},"1337":{"position":[[672,9]]},"1348":{"position":[[672,9]]},"1437":{"position":[[266,9]]},"1472":{"position":[[83,9]]}},"keywords":{}}],["u",{"_index":2296,"title":{},"content":{"210":{"position":[[1192,3]]},"236":{"position":[[955,1]]},"238":{"position":[[898,1]]},"1459":{"position":[[1320,1]]}},"keywords":{}}],["ua",{"_index":4142,"title":{"567":{"position":[[17,2]]}},"content":{},"keywords":{}}],["ua:dev",{"_index":3342,"title":{},"content":{"364":{"position":[[1621,6]]}},"keywords":{}}],["uescap",{"_index":5610,"title":{},"content":{"1140":{"position":[[2118,7]]},"1316":{"position":[[2118,7]]},"1340":{"position":[[2118,7]]},"1351":{"position":[[2118,7]]},"1379":{"position":[[3983,7]]},"1403":{"position":[[3983,7]]},"1414":{"position":[[3983,7]]},"1423":{"position":[[597,7]]},"1431":{"position":[[2141,7]]}},"keywords":{}}],["ui",{"_index":2240,"title":{},"content":{"207":{"position":[[743,3],[1570,3]]},"210":{"position":[[1744,2],[3956,2]]},"240":{"position":[[2893,3],[4675,2]]},"242":{"position":[[898,3]]},"255":{"position":[[1250,2]]},"316":{"position":[[1575,2]]},"329":{"position":[[1024,2]]},"486":{"position":[[104,2],[216,3]]},"488":{"position":[[552,3]]},"502":{"position":[[491,3]]},"658":{"position":[[104,2],[216,3]]},"659":{"position":[[709,3]]},"674":{"position":[[104,2],[216,3]]},"676":{"position":[[552,3]]},"689":{"position":[[104,2],[216,3]]},"691":{"position":[[552,3]]},"909":{"position":[[819,2]]},"925":{"position":[[819,2]]},"936":{"position":[[819,2]]},"947":{"position":[[25,3]]},"952":{"position":[[819,2]]},"970":{"position":[[819,2]]},"1183":{"position":[[697,2]]}},"keywords":{}}],["ultim",{"_index":4010,"title":{},"content":{"521":{"position":[[223,8],[300,8]]},"1438":{"position":[[556,10]]}},"keywords":{}}],["unabl",{"_index":1793,"title":{},"content":{"138":{"position":[[1611,6]]},"141":{"position":[[1616,6]]},"142":{"position":[[1628,6]]},"754":{"position":[[1035,6]]},"794":{"position":[[1239,6]]},"809":{"position":[[1239,6]]},"825":{"position":[[1075,6]]},"922":{"position":[[1446,6]]},"1286":{"position":[[1300,6]]},"1301":{"position":[[1136,6]]},"1325":{"position":[[1300,6]]},"1449":{"position":[[101,6]]}},"keywords":{}}],["unaccept",{"_index":3060,"title":{},"content":{"309":{"position":[[1506,12],[1806,12]]}},"keywords":{}}],["unalt",{"_index":2259,"title":{},"content":{"208":{"position":[[1873,10]]}},"keywords":{}}],["unambigu",{"_index":1092,"title":{},"content":{"75":{"position":[[70,13]]}},"keywords":{}}],["unattend",{"_index":4272,"title":{},"content":{"595":{"position":[[1387,10]]}},"keywords":{}}],["unbound",{"_index":3138,"title":{},"content":{"321":{"position":[[850,9]]},"922":{"position":[[1536,9],[2186,9]]},"1243":{"position":[[522,9]]},"1292":{"position":[[6664,9]]},"1306":{"position":[[6664,9]]},"1329":{"position":[[6664,9]]},"1370":{"position":[[1177,9]]}},"keywords":{}}],["unchang",{"_index":5012,"title":{},"content":{"909":{"position":[[494,10]]},"925":{"position":[[494,10]]},"936":{"position":[[494,10]]},"952":{"position":[[494,10]]},"970":{"position":[[494,10]]}},"keywords":{}}],["uncommit",{"_index":1028,"title":{},"content":{"68":{"position":[[816,12],[906,12],[1363,11]]},"253":{"position":[[928,11]]},"295":{"position":[[1897,11]]},"313":{"position":[[928,11]]},"922":{"position":[[640,11]]},"1292":{"position":[[6696,11]]},"1306":{"position":[[6696,11]]},"1329":{"position":[[6696,11]]},"1471":{"position":[[355,11],[380,11],[595,12]]}},"keywords":{}}],["uncommon",{"_index":4365,"title":{},"content":{"637":{"position":[[451,9]]},"640":{"position":[[108,9]]}},"keywords":{}}],["uncov",{"_index":2323,"title":{},"content":{"210":{"position":[[2252,7]]}},"keywords":{}}],["undefin",{"_index":6241,"title":{},"content":{"1292":{"position":[[6734,9]]},"1306":{"position":[[6734,9]]},"1329":{"position":[[6734,9]]}},"keywords":{}}],["under",{"_index":198,"title":{},"content":{"6":{"position":[[56,5]]},"8":{"position":[[57,5]]},"61":{"position":[[712,5]]},"103":{"position":[[497,5],[564,5],[594,5]]},"105":{"position":[[1240,5]]},"112":{"position":[[644,5]]},"129":{"position":[[186,5]]},"160":{"position":[[194,5]]},"175":{"position":[[31,5]]},"228":{"position":[[229,5]]},"230":{"position":[[1012,5]]},"296":{"position":[[4239,5]]},"306":{"position":[[720,5]]},"313":{"position":[[3654,5]]},"315":{"position":[[718,5]]},"319":{"position":[[207,5],[916,5]]},"326":{"position":[[588,5]]},"338":{"position":[[229,5]]},"417":{"position":[[1187,5]]},"436":{"position":[[885,5]]},"438":{"position":[[1703,5]]},"460":{"position":[[467,5]]},"487":{"position":[[637,5]]},"488":{"position":[[941,5]]},"502":{"position":[[225,5]]},"531":{"position":[[162,5],[354,5]]},"532":{"position":[[289,5]]},"545":{"position":[[796,5]]},"552":{"position":[[328,5]]},"659":{"position":[[1098,5]]},"675":{"position":[[99,5]]},"676":{"position":[[941,5]]},"691":{"position":[[941,5]]},"726":{"position":[[270,5]]},"753":{"position":[[1545,5],[1577,5]]},"793":{"position":[[1568,5],[1600,5]]},"808":{"position":[[1536,5]]},"840":{"position":[[2038,5],[2100,5],[2165,5]]},"849":{"position":[[3178,5],[3240,5],[3305,5]]},"904":{"position":[[2250,5]]},"917":{"position":[[1759,5]]},"918":{"position":[[2542,5]]},"919":{"position":[[2475,5],[2507,5]]},"931":{"position":[[1912,5],[2015,5]]},"945":{"position":[[404,5]]},"964":{"position":[[719,5]]},"965":{"position":[[1759,5]]},"1043":{"position":[[1839,5]]},"1059":{"position":[[1862,5]]},"1083":{"position":[[203,5]]},"1186":{"position":[[249,5]]},"1289":{"position":[[1695,5]]},"1303":{"position":[[1658,5]]},"1310":{"position":[[1016,5]]},"1379":{"position":[[4031,5]]},"1397":{"position":[[1097,5]]},"1398":{"position":[[1100,5]]},"1403":{"position":[[4031,5]]},"1409":{"position":[[1112,5]]},"1414":{"position":[[4031,5]]},"1455":{"position":[[132,5]]},"1461":{"position":[[2376,5]]},"1479":{"position":[[90,5]]}},"keywords":{}}],["undergo",{"_index":2254,"title":{},"content":{"208":{"position":[[1346,9],[1499,9]]}},"keywords":{}}],["underli",{"_index":1080,"title":{},"content":{"74":{"position":[[326,10]]},"197":{"position":[[314,10]]},"207":{"position":[[817,10]]}},"keywords":{}}],["understand",{"_index":116,"title":{"197":{"position":[[0,13]]}},"content":{"3":{"position":[[333,10],[1148,10]]},"4":{"position":[[322,10]]},"47":{"position":[[94,13]]},"82":{"position":[[4959,11]]},"219":{"position":[[124,10]]},"277":{"position":[[150,13]]},"288":{"position":[[29,13]]},"299":{"position":[[29,13]]},"322":{"position":[[152,13]]},"757":{"position":[[1832,10]]},"762":{"position":[[152,11]]},"764":{"position":[[1095,10]]},"770":{"position":[[1832,10]]},"775":{"position":[[152,11]]},"777":{"position":[[1095,10]]},"797":{"position":[[1832,10]]},"802":{"position":[[152,11]]},"804":{"position":[[1093,10]]},"812":{"position":[[1832,10]]},"817":{"position":[[152,11]]},"819":{"position":[[1093,10]]},"828":{"position":[[1832,10]]},"833":{"position":[[152,11]]},"835":{"position":[[1093,10]]},"1459":{"position":[[375,10]]}},"keywords":{}}],["understood",{"_index":6589,"title":{},"content":{"1459":{"position":[[162,10]]}},"keywords":{}}],["underway",{"_index":6464,"title":{},"content":{"1434":{"position":[[2056,9]]}},"keywords":{}}],["undo",{"_index":6244,"title":{},"content":{"1292":{"position":[[6786,4]]},"1306":{"position":[[6786,4]]},"1329":{"position":[[6786,4]]}},"keywords":{}}],["undo_buffer_",{"_index":6220,"title":{},"content":{"1292":{"position":[[6133,13]]},"1306":{"position":[[6133,13]]},"1329":{"position":[[6133,13]]}},"keywords":{}}],["undofil",{"_index":6247,"title":{},"content":{"1292":{"position":[[6822,8]]},"1306":{"position":[[6822,8]]},"1329":{"position":[[6822,8]]}},"keywords":{}}],["unencrypt",{"_index":5929,"title":{},"content":{"1268":{"position":[[165,11]]},"1286":{"position":[[1668,11]]},"1301":{"position":[[1504,11]]},"1325":{"position":[[1668,11]]}},"keywords":{}}],["unexpect",{"_index":2336,"title":{},"content":{"210":{"position":[[2514,10]]},"759":{"position":[[84,10]]},"772":{"position":[[95,10]]},"799":{"position":[[82,10]]},"814":{"position":[[82,10]]},"830":{"position":[[82,10]]},"909":{"position":[[623,10],[1063,10]]},"925":{"position":[[623,10],[1063,10]]},"936":{"position":[[623,10],[1063,10]]},"952":{"position":[[623,10],[1063,10]]},"970":{"position":[[623,10],[1063,10]]}},"keywords":{}}],["unfortun",{"_index":5127,"title":{},"content":{"964":{"position":[[155,13]]}},"keywords":{}}],["unhandl",{"_index":4644,"title":{"762":{"position":[[0,9]]},"775":{"position":[[0,9]]},"802":{"position":[[0,9]]},"817":{"position":[[0,9]]},"833":{"position":[[0,9]]}},"content":{},"keywords":{}}],["unicod",{"_index":1341,"title":{},"content":{"94":{"position":[[1160,7]]},"1292":{"position":[[6179,7]]},"1306":{"position":[[6179,7]]},"1329":{"position":[[6179,7]]}},"keywords":{}}],["unifi",{"_index":3105,"title":{},"content":{"319":{"position":[[892,7]]}},"keywords":{}}],["uninstal",{"_index":6224,"title":{},"content":{"1292":{"position":[[6217,9]]},"1306":{"position":[[6217,9]]},"1329":{"position":[[6217,9]]}},"keywords":{}}],["uninterrupt",{"_index":2597,"title":{},"content":{"239":{"position":[[2127,13]]}},"keywords":{}}],["unintuit",{"_index":4815,"title":{},"content":{"847":{"position":[[446,11]]}},"keywords":{}}],["union",{"_index":1856,"title":{},"content":{"156":{"position":[[229,7]]},"1140":{"position":[[2165,5]]},"1209":{"position":[[708,5]]},"1292":{"position":[[6262,5]]},"1306":{"position":[[6262,5]]},"1316":{"position":[[2165,5]]},"1329":{"position":[[6262,5]]},"1340":{"position":[[2165,5]]},"1351":{"position":[[2165,5]]},"1370":{"position":[[1192,5]]},"1379":{"position":[[4087,5]]},"1394":{"position":[[908,5]]},"1403":{"position":[[4087,5]]},"1414":{"position":[[4087,5]]},"1423":{"position":[[631,5]]},"1431":{"position":[[2188,5]]},"1465":{"position":[[599,5]]},"1477":{"position":[[373,5],[526,5]]}},"keywords":{}}],["union)f",{"_index":3478,"title":{},"content":{"385":{"position":[[243,8]]}},"keywords":{}}],["uniqu",{"_index":467,"title":{},"content":{"16":{"position":[[542,6]]},"27":{"position":[[209,7]]},"67":{"position":[[160,6],[587,6],[1429,6]]},"69":{"position":[[174,6]]},"74":{"position":[[998,6]]},"76":{"position":[[514,6]]},"94":{"position":[[104,6],[1109,6]]},"107":{"position":[[741,8]]},"121":{"position":[[1541,6]]},"125":{"position":[[636,6],[815,6]]},"129":{"position":[[166,6]]},"138":{"position":[[661,6]]},"141":{"position":[[795,6]]},"142":{"position":[[608,6]]},"164":{"position":[[1083,6]]},"183":{"position":[[417,6],[2126,6]]},"184":{"position":[[255,6]]},"190":{"position":[[468,7],[732,6]]},"192":{"position":[[370,6]]},"211":{"position":[[346,6]]},"217":{"position":[[815,6]]},"218":{"position":[[334,6]]},"267":{"position":[[792,6]]},"268":{"position":[[1353,6]]},"269":{"position":[[924,6]]},"270":{"position":[[1594,6]]},"274":{"position":[[114,6]]},"290":{"position":[[623,6]]},"291":{"position":[[258,6]]},"301":{"position":[[563,6]]},"302":{"position":[[258,6]]},"320":{"position":[[1220,6]]},"328":{"position":[[7,6]]},"331":{"position":[[467,8]]},"333":{"position":[[299,6]]},"338":{"position":[[237,6]]},"377":{"position":[[1733,6]]},"454":{"position":[[183,6]]},"482":{"position":[[561,8]]},"485":{"position":[[447,6]]},"487":{"position":[[407,6],[443,6]]},"488":{"position":[[328,6],[817,6]]},"565":{"position":[[66,6]]},"574":{"position":[[553,6],[578,6]]},"657":{"position":[[447,6]]},"659":{"position":[[485,6],[974,6]]},"660":{"position":[[355,6]]},"661":{"position":[[384,8]]},"673":{"position":[[447,6]]},"675":{"position":[[131,6]]},"676":{"position":[[328,6],[817,6]]},"688":{"position":[[447,6]]},"691":{"position":[[328,6],[817,6]]},"728":{"position":[[87,6]]},"757":{"position":[[1242,6],[1311,7]]},"767":{"position":[[896,6]]},"770":{"position":[[1242,6],[1311,7]]},"792":{"position":[[1190,6]]},"797":{"position":[[1242,6],[1311,7]]},"812":{"position":[[1242,6],[1311,7]]},"824":{"position":[[965,6]]},"828":{"position":[[1242,6],[1311,7]]},"842":{"position":[[2343,7]]},"867":{"position":[[1950,6],[2019,7]]},"904":{"position":[[963,6]]},"918":{"position":[[1166,6]]},"945":{"position":[[833,6]]},"1140":{"position":[[2199,6]]},"1155":{"position":[[369,6],[475,6]]},"1182":{"position":[[299,6]]},"1191":{"position":[[301,6]]},"1232":{"position":[[374,6]]},"1243":{"position":[[430,6]]},"1262":{"position":[[301,6]]},"1292":{"position":[[6297,6]]},"1306":{"position":[[6297,6]]},"1316":{"position":[[2199,6]]},"1329":{"position":[[6297,6]]},"1340":{"position":[[2199,6]]},"1351":{"position":[[2199,6]]},"1370":{"position":[[1204,6]]},"1379":{"position":[[4128,6]]},"1389":{"position":[[300,6]]},"1394":{"position":[[933,6]]},"1403":{"position":[[4128,6]]},"1414":{"position":[[4128,6]]},"1431":{"position":[[2222,6]]},"1439":{"position":[[520,6],[838,6]]},"1462":{"position":[[57,6],[194,6]]},"1474":{"position":[[104,8]]}},"keywords":{}}],["unit",{"_index":778,"title":{},"content":{"49":{"position":[[21,4]]},"66":{"position":[[290,5]]},"189":{"position":[[36,6]]},"321":{"position":[[1597,4],[1808,4],[1928,4]]},"397":{"position":[[979,5]]},"870":{"position":[[417,4],[947,5]]},"1449":{"position":[[342,5]]}},"keywords":{}}],["uniti",{"_index":5804,"title":{},"content":{"1185":{"position":[[76,5]]},"1188":{"position":[[332,5]]}},"keywords":{}}],["univers",{"_index":3341,"title":{},"content":{"364":{"position":[[1538,9]]},"606":{"position":[[426,9]]},"1459":{"position":[[150,11]]}},"keywords":{}}],["unknown",{"_index":3009,"title":{},"content":{"296":{"position":[[4670,10]]},"1140":{"position":[[2239,7]]},"1292":{"position":[[6329,7]]},"1306":{"position":[[6329,7]]},"1316":{"position":[[2239,7]]},"1329":{"position":[[6329,7]]},"1340":{"position":[[2239,7]]},"1351":{"position":[[2239,7]]},"1379":{"position":[[4178,7]]},"1403":{"position":[[4178,7]]},"1414":{"position":[[4178,7]]},"1431":{"position":[[2262,7]]}},"keywords":{}}],["unknown_char",{"_index":5873,"title":{},"content":{"1209":{"position":[[727,12]]}},"keywords":{}}],["unless",{"_index":1709,"title":{},"content":{"125":{"position":[[1473,6]]},"236":{"position":[[689,6],[1188,6]]},"237":{"position":[[2769,6]]},"379":{"position":[[936,6]]},"417":{"position":[[811,6],[1002,6]]},"448":{"position":[[1138,6]]},"517":{"position":[[3344,6],[3643,6]]},"571":{"position":[[472,7]]},"581":{"position":[[149,7]]},"584":{"position":[[1127,6]]},"617":{"position":[[394,7]]},"1031":{"position":[[335,6]]},"1123":{"position":[[262,6]]},"1138":{"position":[[594,7],[1788,6]]},"1151":{"position":[[579,7]]},"1155":{"position":[[231,6]]},"1162":{"position":[[507,7]]},"1179":{"position":[[406,7]]},"1230":{"position":[[753,6]]},"1245":{"position":[[346,7]]},"1260":{"position":[[293,7]]},"1286":{"position":[[2623,6]]},"1301":{"position":[[2459,6]]},"1313":{"position":[[404,7],[1332,6]]},"1325":{"position":[[2623,6]]},"1337":{"position":[[404,7],[1332,6]]},"1348":{"position":[[404,7],[1332,6]]},"1367":{"position":[[140,6]]},"1376":{"position":[[538,6]]},"1386":{"position":[[377,7]]},"1393":{"position":[[123,6]]},"1400":{"position":[[538,6]]},"1411":{"position":[[538,6]]},"1427":{"position":[[345,7],[1092,6]]},"1447":{"position":[[342,6]]},"1449":{"position":[[440,6]]}},"keywords":{}}],["unlik",{"_index":671,"title":{},"content":{"34":{"position":[[321,6]]},"77":{"position":[[339,6]]},"198":{"position":[[97,6]]},"301":{"position":[[1268,8]]},"319":{"position":[[811,6]]},"321":{"position":[[788,6]]},"326":{"position":[[1388,6]]},"1440":{"position":[[1201,6]]}},"keywords":{}}],["unlimit",{"_index":3443,"title":{},"content":{"375":{"position":[[117,9]]},"871":{"position":[[187,9]]},"922":{"position":[[2111,11]]}},"keywords":{}}],["unlock",{"_index":713,"title":{},"content":{"39":{"position":[[97,6]]},"47":{"position":[[69,7]]},"1292":{"position":[[6375,6]]},"1306":{"position":[[6375,6]]},"1329":{"position":[[6375,6]]}},"keywords":{}}],["unmatch",{"_index":5618,"title":{},"content":{"1140":{"position":[[2277,9]]},"1316":{"position":[[2277,9]]},"1340":{"position":[[2277,9]]},"1351":{"position":[[2277,9]]},"1431":{"position":[[2300,9]]}},"keywords":{}}],["unmerg",{"_index":5869,"title":{},"content":{"1208":{"position":[[185,8]]}},"keywords":{}}],["unnest",{"_index":5622,"title":{},"content":{"1140":{"position":[[2324,6]]},"1209":{"position":[[767,6]]},"1316":{"position":[[2324,6]]},"1340":{"position":[[2324,6]]},"1351":{"position":[[2324,6]]},"1379":{"position":[[4229,6]]},"1403":{"position":[[4229,6]]},"1414":{"position":[[4229,6]]},"1423":{"position":[[662,6]]},"1431":{"position":[[2347,6]]}},"keywords":{}}],["unpivot",{"_index":6346,"title":{},"content":{"1379":{"position":[[4283,7]]},"1403":{"position":[[4283,7]]},"1414":{"position":[[4283,7]]}},"keywords":{}}],["unpublish",{"_index":2812,"title":{},"content":{"273":{"position":[[130,11]]}},"keywords":{}}],["unravel",{"_index":2328,"title":{},"content":{"210":{"position":[[2314,7]]}},"keywords":{}}],["unreach",{"_index":4658,"title":{},"content":{"764":{"position":[[271,11]]},"777":{"position":[[271,11]]},"804":{"position":[[269,11]]},"819":{"position":[[269,11]]},"835":{"position":[[269,11]]}},"keywords":{}}],["unrecover",{"_index":1784,"title":{},"content":{"138":{"position":[[1451,13]]},"141":{"position":[[1453,13]]},"142":{"position":[[1460,13]]},"750":{"position":[[340,13]]},"764":{"position":[[210,13]]},"766":{"position":[[340,13]]},"777":{"position":[[210,13]]},"789":{"position":[[374,13]]},"804":{"position":[[208,13]]},"807":{"position":[[374,13]]},"819":{"position":[[208,13]]},"823":{"position":[[374,13]]},"835":{"position":[[208,13]]}},"keywords":{}}],["unregist",{"_index":6228,"title":{},"content":{"1292":{"position":[[6420,10]]},"1306":{"position":[[6420,10]]},"1329":{"position":[[6420,10]]}},"keywords":{}}],["unset",{"_index":2606,"title":{},"content":{"240":{"position":[[3050,6]]},"491":{"position":[[190,6]]},"664":{"position":[[211,6]]},"679":{"position":[[190,6]]},"694":{"position":[[190,6]]},"757":{"position":[[1322,5]]},"770":{"position":[[1322,5]]},"797":{"position":[[1322,5]]},"812":{"position":[[1322,5]]},"828":{"position":[[1322,5]]},"867":{"position":[[2030,5]]},"1452":{"position":[[562,6],[1553,6]]}},"keywords":{}}],["unsign",{"_index":6230,"title":{},"content":{"1292":{"position":[[6465,8]]},"1306":{"position":[[6465,8]]},"1329":{"position":[[6465,8]]}},"keywords":{}}],["unstructur",{"_index":344,"title":{},"content":{"11":{"position":[[1580,12]]},"157":{"position":[[300,12]]},"165":{"position":[[456,12]]}},"keywords":{}}],["unsubscribeeventslistslist",{"_index":4457,"title":{},"content":{"697":{"position":[[199,26]]}},"keywords":{}}],["unsupport",{"_index":4628,"title":{"760":{"position":[[0,11]]},"773":{"position":[[0,11]]},"800":{"position":[[0,11]]},"815":{"position":[[0,11]]},"831":{"position":[[0,11]]}},"content":{"762":{"position":[[320,11],[346,11]]},"775":{"position":[[320,11],[346,11]]},"802":{"position":[[320,11],[346,11]]},"817":{"position":[[320,11],[346,11]]},"833":{"position":[[320,11],[346,11]]}},"keywords":{}}],["unsur",{"_index":1435,"title":{},"content":{"99":{"position":[[729,6]]},"217":{"position":[[1643,6]]},"417":{"position":[[2133,6]]},"595":{"position":[[1851,6]]}},"keywords":{}}],["unterminated_str",{"_index":5877,"title":{},"content":{"1209":{"position":[[793,19]]}},"keywords":{}}],["until",{"_index":520,"title":{},"content":{"19":{"position":[[319,5],[434,5]]},"110":{"position":[[103,5],[236,5]]},"165":{"position":[[836,5]]},"207":{"position":[[1539,5]]},"209":{"position":[[965,5]]},"240":{"position":[[4923,5]]},"275":{"position":[[1156,5]]},"292":{"position":[[61,5]]},"303":{"position":[[61,5]]},"373":{"position":[[773,5]]},"517":{"position":[[1442,5],[2625,5]]},"762":{"position":[[416,5]]},"775":{"position":[[416,5]]},"802":{"position":[[416,5]]},"817":{"position":[[416,5]]},"833":{"position":[[416,5]]},"870":{"position":[[831,5]]},"922":{"position":[[3044,5]]},"1085":{"position":[[722,5]]},"1292":{"position":[[6512,5]]},"1306":{"position":[[6512,5]]},"1329":{"position":[[6512,5]]},"1442":{"position":[[570,5]]},"1459":{"position":[[1051,5]]}},"keywords":{}}],["untouch",{"_index":419,"title":{},"content":{"13":{"position":[[1927,10]]}},"keywords":{}}],["unus",{"_index":5106,"title":{},"content":{"945":{"position":[[1076,6]]}},"keywords":{}}],["unusu",{"_index":3614,"title":{},"content":{"419":{"position":[[1581,7]]},"441":{"position":[[190,7]]},"504":{"position":[[1210,7]]},"547":{"position":[[1583,7]]},"639":{"position":[[1208,7]]},"1023":{"position":[[1564,7]]}},"keywords":{}}],["unwieldi",{"_index":2059,"title":{},"content":{"182":{"position":[[269,8]]}},"keywords":{}}],["up",{"_index":445,"title":{"200":{"position":[[8,2]]},"205":{"position":[[8,2]]},"211":{"position":[[9,3]]},"235":{"position":[[12,2]]},"239":{"position":[[12,2]]},"240":{"position":[[12,2]]},"242":{"position":[[6,3]]},"250":{"position":[[7,2]]},"253":{"position":[[8,2]]},"256":{"position":[[9,3]]},"295":{"position":[[8,2]]},"297":{"position":[[9,3]]},"313":{"position":[[8,2]]},"317":{"position":[[9,3]]},"349":{"position":[[4,2]]},"479":{"position":[[4,2]]},"1091":{"position":[[4,2]]},"1092":{"position":[[4,2]]}},"content":{"14":{"position":[[1167,2]]},"27":{"position":[[595,2]]},"34":{"position":[[250,2]]},"36":{"position":[[343,2]]},"45":{"position":[[123,2]]},"55":{"position":[[949,2]]},"66":{"position":[[688,2]]},"83":{"position":[[638,2]]},"115":{"position":[[500,2]]},"121":{"position":[[498,3]]},"122":{"position":[[144,2]]},"123":{"position":[[387,2]]},"125":{"position":[[1139,2]]},"154":{"position":[[413,2]]},"164":{"position":[[1580,2]]},"165":{"position":[[245,2],[873,2]]},"173":{"position":[[1118,3]]},"179":{"position":[[478,2]]},"181":{"position":[[86,3]]},"192":{"position":[[622,2]]},"196":{"position":[[301,2]]},"199":{"position":[[114,2]]},"202":{"position":[[397,2]]},"204":{"position":[[761,2]]},"206":{"position":[[379,2],[966,3]]},"207":{"position":[[763,2]]},"208":{"position":[[287,2]]},"209":{"position":[[230,2],[979,2]]},"210":{"position":[[1909,2]]},"211":{"position":[[27,2]]},"218":{"position":[[1432,2]]},"223":{"position":[[84,2]]},"228":{"position":[[1005,2]]},"232":{"position":[[29,2],[300,2],[916,2]]},"233":{"position":[[308,2]]},"234":{"position":[[168,2]]},"236":{"position":[[1718,2],[1807,3]]},"237":{"position":[[3028,2],[3145,2],[3209,2],[3532,2]]},"238":{"position":[[699,2]]},"239":{"position":[[1772,2]]},"240":{"position":[[49,2],[2254,2],[4866,2]]},"241":{"position":[[45,2]]},"242":{"position":[[44,2],[362,2]]},"253":{"position":[[79,2]]},"254":{"position":[[5,2]]},"259":{"position":[[985,2],[2566,2]]},"267":{"position":[[223,2]]},"277":{"position":[[1345,2]]},"281":{"position":[[174,2],[1847,2]]},"290":{"position":[[1436,2]]},"295":{"position":[[1508,2]]},"296":{"position":[[5,2]]},"301":{"position":[[1532,2]]},"307":{"position":[[3255,2]]},"309":{"position":[[3579,2]]},"313":{"position":[[79,2]]},"314":{"position":[[5,2]]},"322":{"position":[[904,2],[1461,2],[1911,2]]},"323":{"position":[[864,2]]},"325":{"position":[[145,2]]},"326":{"position":[[908,2],[1522,2],[1775,2]]},"333":{"position":[[47,2]]},"338":{"position":[[21,2],[324,2]]},"347":{"position":[[8,2]]},"348":{"position":[[31,2]]},"367":{"position":[[305,2]]},"374":{"position":[[249,2],[340,2]]},"379":{"position":[[521,2]]},"406":{"position":[[27,2]]},"413":{"position":[[437,2]]},"428":{"position":[[151,2]]},"429":{"position":[[841,2]]},"436":{"position":[[717,2]]},"452":{"position":[[8,2]]},"458":{"position":[[8,2]]},"464":{"position":[[95,3]]},"472":{"position":[[408,2]]},"476":{"position":[[31,2]]},"478":{"position":[[653,2]]},"494":{"position":[[75,3]]},"515":{"position":[[539,2]]},"538":{"position":[[8,2]]},"563":{"position":[[13,2],[166,2]]},"574":{"position":[[545,2]]},"578":{"position":[[57,2]]},"582":{"position":[[163,3]]},"590":{"position":[[922,2]]},"599":{"position":[[653,2]]},"609":{"position":[[364,2]]},"623":{"position":[[8,2]]},"629":{"position":[[8,2]]},"642":{"position":[[226,2]]},"690":{"position":[[61,2]]},"698":{"position":[[8,2]]},"704":{"position":[[8,2]]},"745":{"position":[[8,2]]},"747":{"position":[[840,2]]},"750":{"position":[[1357,2]]},"757":{"position":[[2293,2]]},"767":{"position":[[1808,2]]},"770":{"position":[[2293,2]]},"789":{"position":[[1758,2]]},"792":{"position":[[1748,2]]},"797":{"position":[[2300,2]]},"812":{"position":[[2300,2]]},"824":{"position":[[1870,2]]},"828":{"position":[[2300,2]]},"840":{"position":[[110,2],[860,2],[1584,2]]},"849":{"position":[[5,2],[1352,2],[1473,2],[2616,2]]},"863":{"position":[[31,2]]},"875":{"position":[[31,2]]},"894":{"position":[[8,2]]},"895":{"position":[[31,2],[631,2]]},"904":{"position":[[1409,2]]},"915":{"position":[[1214,2]]},"918":{"position":[[1701,2]]},"919":{"position":[[1649,2]]},"922":{"position":[[984,2],[1574,2],[2218,2]]},"931":{"position":[[1066,2]]},"945":{"position":[[623,3]]},"963":{"position":[[1368,2]]},"977":{"position":[[454,2]]},"988":{"position":[[185,2]]},"995":{"position":[[8,2]]},"1003":{"position":[[185,2]]},"1006":{"position":[[121,2]]},"1008":{"position":[[412,2],[1289,2]]},"1032":{"position":[[8,2]]},"1036":{"position":[[1016,2]]},"1039":{"position":[[220,3]]},"1042":{"position":[[1179,2]]},"1049":{"position":[[146,3]]},"1057":{"position":[[149,3]]},"1067":{"position":[[255,3]]},"1089":{"position":[[8,2]]},"1090":{"position":[[31,2]]},"1142":{"position":[[113,2]]},"1149":{"position":[[568,2]]},"1160":{"position":[[113,2],[224,2]]},"1168":{"position":[[113,2]]},"1176":{"position":[[450,2]]},"1203":{"position":[[183,2]]},"1204":{"position":[[111,2]]},"1211":{"position":[[113,2]]},"1218":{"position":[[113,2]]},"1237":{"position":[[122,3]]},"1258":{"position":[[162,2]]},"1283":{"position":[[361,2]]},"1298":{"position":[[84,2]]},"1311":{"position":[[198,2]]},"1346":{"position":[[84,2]]},"1362":{"position":[[122,3]]},"1384":{"position":[[162,2]]},"1392":{"position":[[68,2]]},"1408":{"position":[[452,2]]},"1440":{"position":[[332,2]]},"1451":{"position":[[197,2],[287,2],[539,2],[804,2]]},"1452":{"position":[[391,2],[1816,2],[2760,2]]},"1455":{"position":[[412,2],[448,2]]},"1461":{"position":[[4676,2],[4797,2]]},"1470":{"position":[[154,2]]}},"keywords":{}}],["updat",{"_index":291,"title":{"55":{"position":[[14,6]]},"125":{"position":[[6,8]]},"271":{"position":[[0,8]]},"785":{"position":[[23,8]]},"1158":{"position":[[6,8]]},"1182":{"position":[[6,8]]},"1191":{"position":[[6,8]]},"1199":{"position":[[6,8]]},"1208":{"position":[[6,8]]},"1233":{"position":[[6,8]]},"1256":{"position":[[6,8]]},"1262":{"position":[[6,8]]},"1279":{"position":[[6,8]]},"1290":{"position":[[6,8]]},"1304":{"position":[[6,8]]},"1315":{"position":[[6,8]]},"1327":{"position":[[6,8]]},"1339":{"position":[[6,8]]},"1350":{"position":[[6,8]]},"1358":{"position":[[6,7]]},"1369":{"position":[[6,8]]},"1378":{"position":[[6,8]]},"1389":{"position":[[6,8]]},"1391":{"position":[[36,8]]},"1402":{"position":[[6,8]]},"1413":{"position":[[6,8]]},"1430":{"position":[[6,8]]},"1440":{"position":[[28,8]]},"1448":{"position":[[19,8]]}},"content":{"11":{"position":[[76,8],[1036,7],[1196,6],[1489,6],[1669,6],[2002,6]]},"12":{"position":[[195,6]]},"13":{"position":[[253,6],[465,7],[566,6],[808,7],[1297,7]]},"14":{"position":[[203,7]]},"21":{"position":[[471,7]]},"30":{"position":[[75,6]]},"34":{"position":[[353,7]]},"38":{"position":[[356,7]]},"40":{"position":[[123,7]]},"44":{"position":[[425,7],[550,6]]},"53":{"position":[[316,7],[407,7]]},"54":{"position":[[655,6]]},"55":{"position":[[466,6],[604,7]]},"56":{"position":[[273,7],[338,7]]},"64":{"position":[[979,6]]},"67":{"position":[[1593,7],[1717,8],[2086,7]]},"94":{"position":[[1718,8],[2084,8]]},"97":{"position":[[344,7]]},"105":{"position":[[436,6],[1564,7]]},"108":{"position":[[166,6]]},"110":{"position":[[912,6]]},"112":{"position":[[214,6]]},"113":{"position":[[558,6]]},"114":{"position":[[166,6],[328,6],[369,6],[410,6]]},"120":{"position":[[1270,8],[1636,8]]},"121":{"position":[[142,7],[574,8],[756,7],[1611,7]]},"124":{"position":[[16,7],[531,8]]},"125":{"position":[[182,7],[615,7],[717,7],[748,8],[1041,7],[1338,8],[1353,8],[1460,7]]},"146":{"position":[[423,8],[686,6]]},"149":{"position":[[435,8],[659,6]]},"152":{"position":[[447,8],[662,6]]},"154":{"position":[[201,6]]},"163":{"position":[[669,7]]},"165":{"position":[[87,7],[2119,7],[2223,7]]},"180":{"position":[[151,8]]},"183":{"position":[[2478,6],[4644,8]]},"196":{"position":[[152,8]]},"197":{"position":[[450,8],[913,6],[992,7],[1277,7],[1454,6]]},"208":{"position":[[498,6],[1562,7]]},"210":{"position":[[1196,6],[4008,8]]},"229":{"position":[[725,7]]},"233":{"position":[[152,8]]},"237":{"position":[[1689,7],[2359,7]]},"239":{"position":[[2068,7],[2288,7],[2379,8],[2564,7]]},"240":{"position":[[3110,6],[3340,6],[3624,8],[4774,7]]},"259":{"position":[[256,6],[313,6],[668,7],[1945,6],[2002,6]]},"271":{"position":[[83,6],[285,8],[490,7]]},"275":{"position":[[1026,7]]},"278":{"position":[[633,7]]},"280":{"position":[[2143,6]]},"290":{"position":[[1803,7]]},"291":{"position":[[1224,8]]},"292":{"position":[[81,7]]},"296":{"position":[[5759,6]]},"301":{"position":[[1768,7]]},"302":{"position":[[1170,8]]},"303":{"position":[[81,7]]},"307":{"position":[[379,6],[676,6],[885,6],[1769,6],[2717,6]]},"309":{"position":[[1960,8],[2660,6]]},"315":{"position":[[1763,6]]},"325":{"position":[[325,7]]},"326":{"position":[[708,6]]},"373":{"position":[[921,7]]},"379":{"position":[[844,7],[1035,7],[1113,8],[1180,7]]},"480":{"position":[[276,6],[463,7],[523,6],[924,6],[975,6]]},"540":{"position":[[440,7]]},"578":{"position":[[50,6],[347,8]]},"602":{"position":[[835,8],[985,7]]},"642":{"position":[[164,7]]},"718":{"position":[[337,6]]},"724":{"position":[[406,6]]},"750":{"position":[[853,7]]},"752":{"position":[[809,7]]},"753":{"position":[[1465,7]]},"761":{"position":[[104,7]]},"766":{"position":[[853,7]]},"767":{"position":[[1037,6],[2142,7]]},"774":{"position":[[104,7]]},"786":{"position":[[43,6],[204,7]]},"789":{"position":[[815,7],[1034,7],[1254,7]]},"791":{"position":[[814,7]]},"792":{"position":[[1342,6],[2134,7]]},"793":{"position":[[1488,7]]},"801":{"position":[[104,7]]},"807":{"position":[[841,7]]},"808":{"position":[[1434,7]]},"816":{"position":[[104,7]]},"821":{"position":[[297,6],[803,6],[1107,7],[1238,6]]},"823":{"position":[[841,7]]},"824":{"position":[[1103,6],[2256,7]]},"832":{"position":[[104,7]]},"864":{"position":[[1337,6]]},"870":{"position":[[334,7]]},"879":{"position":[[1432,7],[1759,7]]},"909":{"position":[[572,6],[961,7]]},"911":{"position":[[571,7]]},"912":{"position":[[308,6],[819,6]]},"925":{"position":[[572,6],[961,7]]},"927":{"position":[[571,7]]},"936":{"position":[[572,6],[961,7]]},"938":{"position":[[571,7]]},"952":{"position":[[572,6],[961,7]]},"954":{"position":[[571,7]]},"970":{"position":[[572,6],[961,7]]},"972":{"position":[[571,7]]},"976":{"position":[[324,7]]},"977":{"position":[[216,8],[603,8]]},"1006":{"position":[[222,7],[469,7]]},"1007":{"position":[[111,8],[149,7]]},"1020":{"position":[[490,6]]},"1036":{"position":[[1106,7]]},"1040":{"position":[[872,6]]},"1042":{"position":[[775,6]]},"1043":{"position":[[1439,6]]},"1050":{"position":[[872,6]]},"1051":{"position":[[1701,6]]},"1058":{"position":[[872,6]]},"1059":{"position":[[1494,6]]},"1076":{"position":[[552,7]]},"1125":{"position":[[643,6],[657,7],[697,8]]},"1138":{"position":[[1503,6],[1517,7],[1557,8]]},"1140":{"position":[[2362,6]]},"1151":{"position":[[1444,6],[1458,7],[1498,8]]},"1158":{"position":[[57,8],[97,8]]},"1162":{"position":[[966,7],[981,7],[1021,8],[1075,8]]},"1179":{"position":[[1266,8],[1308,7]]},"1182":{"position":[[57,8],[97,8],[122,7],[327,7],[428,7],[552,7]]},"1186":{"position":[[462,7]]},"1188":{"position":[[887,7],[928,7]]},"1191":{"position":[[57,8],[97,8],[122,7],[329,7],[430,7],[556,7]]},"1196":{"position":[[1027,7],[1068,8]]},"1199":{"position":[[49,8],[126,7],[169,6]]},"1200":{"position":[[494,8]]},"1208":{"position":[[55,7],[138,7],[344,8]]},"1209":{"position":[[822,6]]},"1233":{"position":[[101,8]]},"1253":{"position":[[532,6],[546,7],[586,8]]},"1256":{"position":[[57,8],[97,8]]},"1260":{"position":[[992,6],[1006,7],[1046,8]]},"1262":{"position":[[57,8],[97,8],[122,7],[329,7],[430,7],[556,7]]},"1279":{"position":[[39,7],[382,7]]},"1286":{"position":[[2708,6],[2722,7],[2762,8]]},"1290":{"position":[[57,8],[97,8]]},"1292":{"position":[[6549,6]]},"1301":{"position":[[2544,6],[2558,7],[2598,8]]},"1303":{"position":[[1376,6]]},"1304":{"position":[[57,8],[97,8]]},"1306":{"position":[[6549,6]]},"1313":{"position":[[1047,6],[1061,7],[1101,8]]},"1315":{"position":[[57,8],[98,8]]},"1316":{"position":[[2362,6]]},"1325":{"position":[[2708,6],[2722,7],[2762,8]]},"1327":{"position":[[57,8],[97,8]]},"1329":{"position":[[6549,6]]},"1337":{"position":[[1047,6],[1061,7],[1101,8]]},"1339":{"position":[[57,8],[97,8]]},"1340":{"position":[[2362,6]]},"1348":{"position":[[1047,6],[1061,7],[1101,8]]},"1350":{"position":[[57,8],[97,8]]},"1351":{"position":[[2362,6]]},"1358":{"position":[[46,7],[247,8]]},"1369":{"position":[[39,7]]},"1370":{"position":[[1218,6]]},"1376":{"position":[[623,6],[637,7],[677,8]]},"1378":{"position":[[57,8],[97,8]]},"1379":{"position":[[4341,6]]},"1384":{"position":[[46,7],[1228,7]]},"1386":{"position":[[1281,7],[1322,7]]},"1389":{"position":[[57,8],[97,8],[122,7],[328,7],[429,7],[554,7]]},"1391":{"position":[[21,7],[813,7]]},"1392":{"position":[[159,7]]},"1394":{"position":[[957,6]]},"1400":{"position":[[623,6],[637,7],[677,8]]},"1402":{"position":[[57,8],[97,8]]},"1403":{"position":[[4341,6]]},"1411":{"position":[[623,6],[637,7],[677,8]]},"1413":{"position":[[57,8],[97,8]]},"1414":{"position":[[4341,6]]},"1427":{"position":[[807,6],[821,7],[861,8]]},"1430":{"position":[[57,8],[97,8]]},"1431":{"position":[[2385,6]]},"1435":{"position":[[219,7],[439,6]]},"1437":{"position":[[358,7],[1354,7],[1508,7]]},"1439":{"position":[[1457,7],[1616,7]]},"1440":{"position":[[292,7],[437,7],[569,8],[897,7],[975,6],[1078,6],[1113,7],[1266,7],[1359,6],[1513,7]]},"1443":{"position":[[1111,7]]},"1444":{"position":[[758,6],[926,7]]},"1448":{"position":[[16,7],[150,6],[311,7],[975,8],[1130,8]]},"1449":{"position":[[172,7]]},"1451":{"position":[[370,8],[648,8]]},"1452":{"position":[[2598,7]]},"1475":{"position":[[1068,7],[1499,7],[1722,6]]},"1477":{"position":[[47,6],[738,7],[794,7]]},"1480":{"position":[[976,8],[1342,8]]}},"keywords":{}}],["updated.check",{"_index":6520,"title":{},"content":{"1448":{"position":[[1075,13]]}},"keywords":{}}],["updated_at",{"_index":5476,"title":{},"content":{"1134":{"position":[[814,10],[924,10],[1024,10],[1131,10],[1256,10],[1372,10],[1752,10],[2341,10],[2453,10],[2566,10],[2799,10]]}},"keywords":{}}],["updatelookup",{"_index":4693,"title":{},"content":{"786":{"position":[[163,14]]}},"keywords":{}}],["updates"",{"_index":6494,"title":{},"content":{"1440":{"position":[[124,13]]}},"keywords":{}}],["updates.cr",{"_index":4724,"title":{},"content":{"821":{"position":[[1366,16]]}},"keywords":{}}],["updates.seri",{"_index":4725,"title":{},"content":{"821":{"position":[[1496,16]]}},"keywords":{}}],["updateswhen",{"_index":5015,"title":{},"content":{"909":{"position":[[1211,11]]},"925":{"position":[[1211,11]]},"936":{"position":[[1211,11]]},"952":{"position":[[1211,11]]},"970":{"position":[[1211,11]]}},"keywords":{}}],["updatetext",{"_index":6347,"title":{},"content":{"1379":{"position":[[4390,10]]},"1403":{"position":[[4390,10]]},"1414":{"position":[[4390,10]]}},"keywords":{}}],["upfront",{"_index":3211,"title":{},"content":{"333":{"position":[[389,8]]}},"keywords":{}}],["upgrad",{"_index":3935,"title":{},"content":{"515":{"position":[[203,7]]},"1201":{"position":[[237,8]]},"1292":{"position":[[6581,7]]},"1293":{"position":[[237,8]]},"1306":{"position":[[6581,7]]},"1307":{"position":[[237,8]]},"1317":{"position":[[237,8]]},"1329":{"position":[[6581,7]]},"1330":{"position":[[237,8]]},"1341":{"position":[[237,8]]},"1352":{"position":[[237,8]]},"1359":{"position":[[237,8]]},"1380":{"position":[[237,8]]},"1404":{"position":[[237,8]]},"1415":{"position":[[237,8]]},"1432":{"position":[[237,8]]}},"keywords":{}}],["upload",{"_index":2106,"title":{},"content":{"189":{"position":[[223,6]]},"193":{"position":[[167,7]]},"478":{"position":[[623,8]]},"479":{"position":[[344,6]]},"599":{"position":[[623,8]]},"1144":{"position":[[414,6],[463,9]]},"1162":{"position":[[603,6],[652,9]]},"1170":{"position":[[414,6],[463,9]]},"1213":{"position":[[269,6],[318,9]]},"1220":{"position":[[269,6],[318,9]]}},"keywords":{}}],["upload_interv",{"_index":5764,"title":{},"content":{"1162":{"position":[[586,16]]},"1163":{"position":[[277,16]]}},"keywords":{}}],["uploadinterv",{"_index":5717,"title":{},"content":{"1144":{"position":[[398,15]]},"1145":{"position":[[246,15]]},"1170":{"position":[[398,15]]},"1171":{"position":[[250,15]]},"1213":{"position":[[253,15]]},"1214":{"position":[[186,15]]},"1220":{"position":[[253,15]]},"1221":{"position":[[190,15]]}},"keywords":{}}],["upon",{"_index":760,"title":{},"content":{"44":{"position":[[317,4]]},"106":{"position":[[670,4]]},"107":{"position":[[3007,5]]},"197":{"position":[[934,4]]},"333":{"position":[[160,4]]},"945":{"position":[[612,4]]}},"keywords":{}}],["upper",{"_index":1352,"title":{},"content":{"94":{"position":[[1895,5]]},"120":{"position":[[1447,5]]},"343":{"position":[[365,5]]},"877":{"position":[[169,5]]},"1140":{"position":[[2397,5]]},"1316":{"position":[[2397,5]]},"1340":{"position":[[2397,5]]},"1351":{"position":[[2397,5]]},"1379":{"position":[[4448,5]]},"1403":{"position":[[4448,5]]},"1414":{"position":[[4448,5]]},"1431":{"position":[[2420,5]]},"1480":{"position":[[1153,5]]}},"keywords":{}}],["uppercas",{"_index":6258,"title":{},"content":{"1317":{"position":[[665,9]]},"1341":{"position":[[665,9]]},"1352":{"position":[[665,9]]},"1432":{"position":[[679,9]]}},"keywords":{}}],["upsert",{"_index":5961,"title":{},"content":{"1279":{"position":[[63,7]]}},"keywords":{}}],["urban",{"_index":2111,"title":{},"content":{"189":{"position":[[349,5]]}},"keywords":{}}],["uri",{"_index":1036,"title":{},"content":{"69":{"position":[[360,3],[412,3]]},"87":{"position":[[67,5]]},"392":{"position":[[428,3]]},"397":{"position":[[588,3]]},"417":{"position":[[602,3]]},"856":{"position":[[176,5]]},"1125":{"position":[[380,3]]},"1144":{"position":[[741,3]]},"1170":{"position":[[741,3]]}},"keywords":{}}],["url",{"_index":1050,"title":{"488":{"position":[[8,5]]},"659":{"position":[[8,5]]},"676":{"position":[[8,5]]},"691":{"position":[[8,5]]}},"content":{"70":{"position":[[556,3]]},"87":{"position":[[534,4]]},"88":{"position":[[671,3]]},"89":{"position":[[261,4]]},"90":{"position":[[449,4],[520,4]]},"161":{"position":[[119,3],[1197,4],[1262,4]]},"183":{"position":[[639,3]]},"192":{"position":[[547,4],[564,3],[864,5],[929,4]]},"238":{"position":[[361,3],[430,3]]},"240":{"position":[[2807,3]]},"267":{"position":[[1007,3]]},"288":{"position":[[893,3],[908,3]]},"295":{"position":[[1170,3]]},"296":{"position":[[7341,3]]},"299":{"position":[[808,3],[823,3]]},"320":{"position":[[1346,5]]},"385":{"position":[[290,3]]},"402":{"position":[[491,3],[544,3]]},"408":{"position":[[77,3],[81,3]]},"464":{"position":[[63,3]]},"466":{"position":[[195,4],[200,3]]},"467":{"position":[[162,4]]},"485":{"position":[[454,3]]},"487":{"position":[[390,3],[458,3]]},"488":{"position":[[23,4],[48,3],[298,3],[612,3],[770,3],[859,3]]},"489":{"position":[[801,3]]},"491":{"position":[[223,3],[317,3],[335,3]]},"492":{"position":[[386,3]]},"548":{"position":[[871,3]]},"611":{"position":[[957,3],[965,4]]},"634":{"position":[[72,3]]},"635":{"position":[[40,3]]},"637":{"position":[[146,4],[1043,4],[1058,3],[1075,3]]},"638":{"position":[[111,4]]},"657":{"position":[[454,3],[646,3]]},"659":{"position":[[112,3],[180,4],[205,3],[455,3],[769,3],[927,3],[1016,3]]},"662":{"position":[[801,3]]},"664":{"position":[[244,3],[338,3],[356,3],[591,3]]},"665":{"position":[[386,3]]},"673":{"position":[[454,3]]},"675":{"position":[[114,3],[138,3]]},"676":{"position":[[23,4],[48,3],[298,3],[612,3],[770,3],[859,3]]},"677":{"position":[[801,3]]},"679":{"position":[[223,3],[317,3],[335,3]]},"680":{"position":[[386,3]]},"688":{"position":[[454,3]]},"690":{"position":[[139,3],[161,3],[236,4],[301,4]]},"691":{"position":[[23,4],[48,3],[298,3],[612,3],[770,3],[859,3]]},"692":{"position":[[801,3]]},"694":{"position":[[223,3],[317,3],[335,3]]},"695":{"position":[[386,3]]},"728":{"position":[[126,3]]},"739":{"position":[[195,3]]},"741":{"position":[[414,3],[436,4]]},"782":{"position":[[146,3]]},"1013":{"position":[[17,3]]},"1031":{"position":[[607,3]]},"1034":{"position":[[60,3]]},"1092":{"position":[[414,3]]},"1107":{"position":[[354,4]]},"1118":{"position":[[623,4]]},"1130":{"position":[[27,4],[39,3]]},"1131":{"position":[[27,4],[39,3]]},"1133":{"position":[[1048,4]]},"1196":{"position":[[96,4]]},"1206":{"position":[[370,3],[381,3]]},"1239":{"position":[[70,3]]},"1243":{"position":[[649,3]]},"1247":{"position":[[683,3],[687,3]]},"1253":{"position":[[146,3]]},"1292":{"position":[[6608,3]]},"1306":{"position":[[6608,3]]},"1329":{"position":[[6608,3]]},"1356":{"position":[[214,3],[227,3]]},"1359":{"position":[[330,3]]},"1382":{"position":[[380,4]]},"1386":{"position":[[80,4]]},"1461":{"position":[[240,4],[5274,3],[5336,3]]}},"keywords":{}}],["url>",{"_index":4556,"title":{},"content":{"742":{"position":[[227,7]]}},"keywords":{}}],["url>/webhook",{"_index":4426,"title":{},"content":{"675":{"position":[[225,15]]}},"keywords":{}}],["url/webhook",{"_index":3859,"title":{},"content":{"487":{"position":[[422,11]]}},"keywords":{}}],["urlaccountuserpassworddatabaseschemawarehous",{"_index":2931,"title":{},"content":{"291":{"position":[[496,46]]},"302":{"position":[[496,46]]}},"keywords":{}}],["urlyour",{"_index":3921,"title":{},"content":{"507":{"position":[[61,7]]}},"keywords":{}}],["us",{"_index":22,"title":{"12":{"position":[[0,5]]},"79":{"position":[[0,5]]},"126":{"position":[[0,5]]},"135":{"position":[[8,3]]},"170":{"position":[[42,3]]},"191":{"position":[[21,3]]},"244":{"position":[[38,5]]},"251":{"position":[[22,5]]},"311":{"position":[[22,5]]},"327":{"position":[[11,3]]},"340":{"position":[[20,5]]},"383":{"position":[[0,5]]},"384":{"position":[[24,5]]},"445":{"position":[[0,5]]},"446":{"position":[[24,5]]},"523":{"position":[[0,5]]},"524":{"position":[[49,5]]},"531":{"position":[[0,5]]},"532":{"position":[[49,5]]},"553":{"position":[[0,5]]},"570":{"position":[[0,5]]},"608":{"position":[[0,5]]},"615":{"position":[[0,5]]},"640":{"position":[[10,5]]},"644":{"position":[[0,5]]},"651":{"position":[[0,5]]},"717":{"position":[[0,5]]},"732":{"position":[[0,5]]},"987":{"position":[[0,5]]},"1002":{"position":[[0,5]]},"1227":{"position":[[21,5]]},"1244":{"position":[[21,5]]},"1451":{"position":[[21,4]]}},"content":{"1":{"position":[[280,4],[502,4],[939,4]]},"3":{"position":[[274,3]]},"4":{"position":[[167,4]]},"6":{"position":[[24,4],[648,6]]},"8":{"position":[[24,4],[559,3],[817,4]]},"11":{"position":[[1129,3]]},"16":{"position":[[25,4]]},"20":{"position":[[636,6]]},"21":{"position":[[606,4]]},"25":{"position":[[232,5]]},"26":{"position":[[115,5],[311,3],[386,5]]},"27":{"position":[[233,4]]},"29":{"position":[[122,5]]},"31":{"position":[[73,5],[250,3]]},"35":{"position":[[323,5]]},"36":{"position":[[454,5]]},"37":{"position":[[328,5]]},"38":{"position":[[139,4],[512,3]]},"40":{"position":[[179,3],[251,4]]},"42":{"position":[[57,4],[275,4]]},"43":{"position":[[115,3]]},"46":{"position":[[18,3]]},"47":{"position":[[158,3]]},"48":{"position":[[156,3]]},"52":{"position":[[40,5]]},"54":{"position":[[176,3]]},"56":{"position":[[1037,4]]},"58":{"position":[[136,3],[871,3]]},"61":{"position":[[321,3]]},"62":{"position":[[65,5]]},"63":{"position":[[734,4],[1062,3]]},"64":{"position":[[22,4],[615,4],[811,5]]},"67":{"position":[[1476,4],[1558,6]]},"68":{"position":[[143,5],[666,5],[1167,3],[1671,3]]},"71":{"position":[[51,4]]},"76":{"position":[[74,4],[281,4]]},"79":{"position":[[45,3],[232,5],[272,5]]},"81":{"position":[[265,4],[424,4],[863,3],[1167,4],[2822,3]]},"82":{"position":[[145,4],[1050,3],[1271,6],[1480,5],[1589,4],[1647,3],[2749,3],[3058,5],[3126,3],[3712,4],[3726,3],[4887,3]]},"83":{"position":[[402,6],[592,3],[1347,3]]},"84":{"position":[[179,4],[1317,4]]},"87":{"position":[[516,4]]},"88":{"position":[[615,4]]},"89":{"position":[[37,4],[401,4],[439,3]]},"90":{"position":[[279,4],[380,3]]},"94":{"position":[[317,5],[358,6],[381,5],[566,5],[745,5],[981,5],[2424,3],[2886,5]]},"95":{"position":[[302,5]]},"96":{"position":[[116,6]]},"97":{"position":[[324,3],[889,3]]},"98":{"position":[[186,5],[419,5],[853,4],[1206,4]]},"99":{"position":[[243,3],[663,3],[757,3]]},"100":{"position":[[359,6]]},"101":{"position":[[74,3],[322,3]]},"102":{"position":[[173,5]]},"104":{"position":[[126,4]]},"107":{"position":[[2365,3],[3157,3],[3929,6]]},"109":{"position":[[705,5]]},"110":{"position":[[1481,5]]},"112":{"position":[[413,3]]},"113":{"position":[[245,4],[408,5],[785,5]]},"114":{"position":[[20,5],[82,5],[453,5]]},"115":{"position":[[208,4],[1425,3]]},"117":{"position":[[38,4],[160,3],[589,3]]},"119":{"position":[[18,3],[88,3],[264,4]]},"120":{"position":[[377,4]]},"121":{"position":[[540,5]]},"122":{"position":[[197,7],[250,4],[1401,5],[1559,5],[1649,6],[1861,3],[1928,4],[2205,5]]},"125":{"position":[[465,3],[736,5],[1053,5],[1224,3],[1447,3]]},"132":{"position":[[62,3],[315,4]]},"133":{"position":[[79,4],[168,3],[309,4],[582,3]]},"135":{"position":[[87,3]]},"136":{"position":[[5,3],[86,4],[187,3]]},"137":{"position":[[370,3],[513,3]]},"138":{"position":[[133,3],[936,3]]},"141":{"position":[[241,3]]},"142":{"position":[[158,3],[915,3]]},"144":{"position":[[561,3]]},"146":{"position":[[473,5],[1071,3]]},"149":{"position":[[1065,3]]},"152":{"position":[[1055,3]]},"154":{"position":[[1031,3],[2102,3]]},"156":{"position":[[100,4]]},"157":{"position":[[128,5]]},"158":{"position":[[286,4],[437,3]]},"159":{"position":[[194,4]]},"160":{"position":[[626,4]]},"161":{"position":[[41,4],[320,3],[398,4],[501,4],[1249,3]]},"162":{"position":[[791,4],[888,3],[1345,6],[1646,5]]},"163":{"position":[[973,4],[1026,6]]},"164":{"position":[[168,3],[448,5],[1328,3],[1384,3]]},"165":{"position":[[604,6],[899,5],[1177,4],[1531,3],[1802,5],[2295,3]]},"166":{"position":[[9,3],[522,4]]},"168":{"position":[[10,5],[158,3],[306,3],[371,3]]},"169":{"position":[[1136,5],[1316,5],[1765,5]]},"171":{"position":[[82,3]]},"172":{"position":[[81,3]]},"173":{"position":[[182,3]]},"174":{"position":[[267,3],[503,3]]},"175":{"position":[[98,5],[266,5]]},"176":{"position":[[7,5]]},"177":{"position":[[95,5],[348,3]]},"179":{"position":[[141,3],[272,5]]},"180":{"position":[[439,3]]},"182":{"position":[[360,5]]},"183":{"position":[[30,5],[1281,6],[3795,6]]},"184":{"position":[[494,3]]},"185":{"position":[[249,4]]},"189":{"position":[[560,3],[691,3],[1179,4],[1587,5],[1618,4],[1734,3]]},"190":{"position":[[1377,3],[1460,5],[1541,4]]},"191":{"position":[[988,3],[2005,3],[2099,3],[2244,3]]},"192":{"position":[[572,3],[934,5],[1425,4],[1516,3],[1963,4]]},"193":{"position":[[495,4],[569,5]]},"196":{"position":[[42,4]]},"199":{"position":[[246,4]]},"204":{"position":[[139,4],[406,5],[439,5],[866,6]]},"205":{"position":[[76,5]]},"206":{"position":[[225,3]]},"207":{"position":[[789,5],[1077,4],[1394,4]]},"208":{"position":[[463,5]]},"210":{"position":[[1597,3]]},"211":{"position":[[78,5]]},"212":{"position":[[313,3]]},"217":{"position":[[247,5],[962,4]]},"218":{"position":[[1297,3],[1817,3],[1964,5]]},"221":{"position":[[426,4],[1209,5]]},"222":{"position":[[454,5]]},"223":{"position":[[420,5]]},"224":{"position":[[473,5]]},"225":{"position":[[472,3]]},"227":{"position":[[319,3]]},"228":{"position":[[26,5],[1124,4]]},"229":{"position":[[26,5],[129,5],[530,3],[808,4]]},"230":{"position":[[804,3],[1110,3]]},"232":{"position":[[86,5],[213,3],[414,5]]},"233":{"position":[[42,4]]},"234":{"position":[[297,4]]},"237":{"position":[[572,3],[864,4],[3054,3]]},"238":{"position":[[129,3]]},"240":{"position":[[172,3],[949,3],[1966,3],[2060,3],[3097,5]]},"241":{"position":[[92,5]]},"242":{"position":[[153,3],[388,3]]},"243":{"position":[[307,3]]},"250":{"position":[[29,5],[159,5],[1127,3]]},"252":{"position":[[73,5]]},"253":{"position":[[364,5],[436,4],[1153,5],[3114,3]]},"254":{"position":[[560,6],[2239,4],[2617,6]]},"255":{"position":[[9,3],[77,3],[940,5]]},"257":{"position":[[65,5]]},"259":{"position":[[520,3],[804,3],[1005,4],[1285,3],[2214,3],[2373,3],[2586,4],[2866,3]]},"260":{"position":[[51,3]]},"263":{"position":[[348,3]]},"267":{"position":[[30,5],[315,3]]},"268":{"position":[[324,5],[621,5],[913,6],[2003,4]]},"269":{"position":[[259,5],[538,6],[1465,4]]},"270":{"position":[[54,5],[153,6],[716,5],[2081,4]]},"273":{"position":[[150,3]]},"274":{"position":[[404,5]]},"275":{"position":[[440,3],[758,3],[914,3]]},"277":{"position":[[635,6],[812,6],[892,5]]},"278":{"position":[[960,6],[1420,4]]},"279":{"position":[[510,3],[809,5],[902,6],[1223,6]]},"280":{"position":[[496,4],[851,4],[1473,6]]},"281":{"position":[[373,3],[468,5],[803,4],[947,6],[2657,3]]},"284":{"position":[[230,3],[733,3]]},"286":{"position":[[81,3],[337,3]]},"288":{"position":[[762,3],[925,5]]},"289":{"position":[[122,3]]},"290":{"position":[[224,5],[573,3],[896,4],[1121,4],[1334,3]]},"291":{"position":[[584,4],[1284,4],[1750,3]]},"294":{"position":[[73,5]]},"295":{"position":[[18,4],[683,3]]},"296":{"position":[[685,6],[1702,5],[1800,5],[2575,5],[2686,6],[3718,5],[4385,3],[6785,5]]},"299":{"position":[[677,3],[840,5]]},"300":{"position":[[122,3]]},"301":{"position":[[177,5],[513,3],[871,5],[1300,3],[1330,4]]},"302":{"position":[[584,4],[1659,3]]},"308":{"position":[[170,3]]},"309":{"position":[[174,6]]},"312":{"position":[[73,5]]},"313":{"position":[[364,5],[436,4],[1153,5],[3420,4],[3491,3]]},"314":{"position":[[393,6],[1780,4],[2248,6]]},"315":{"position":[[21,3],[70,3],[875,3]]},"316":{"position":[[9,3],[77,3],[1265,5]]},"319":{"position":[[55,3],[254,3],[1139,5]]},"320":{"position":[[502,4],[2404,3]]},"321":{"position":[[487,3],[1185,6]]},"322":{"position":[[34,3],[112,6],[273,4],[475,3],[595,3],[1656,3]]},"323":{"position":[[1035,3],[1254,4],[1439,4],[1482,4]]},"324":{"position":[[351,4],[372,4],[714,3],[822,3]]},"325":{"position":[[540,3]]},"326":{"position":[[152,3],[1163,3],[1255,4],[1558,3]]},"329":{"position":[[1004,3]]},"333":{"position":[[603,5]]},"338":{"position":[[27,3],[283,5],[581,5]]},"339":{"position":[[41,5]]},"340":{"position":[[9,3],[166,5]]},"341":{"position":[[45,5],[442,4],[583,5]]},"343":{"position":[[1146,3]]},"345":{"position":[[233,3]]},"350":{"position":[[144,5]]},"355":{"position":[[27,4],[62,5]]},"358":{"position":[[144,5]]},"369":{"position":[[144,5]]},"370":{"position":[[1351,4]]},"373":{"position":[[404,4],[476,4],[644,4]]},"374":{"position":[[173,3],[209,3]]},"375":{"position":[[4,3],[206,3]]},"376":{"position":[[144,5]]},"377":{"position":[[568,5],[744,5],[775,6],[1375,5]]},"382":{"position":[[16,4],[126,5]]},"383":{"position":[[119,3]]},"384":{"position":[[123,4]]},"386":{"position":[[144,5]]},"387":{"position":[[134,3]]},"390":{"position":[[4,3],[369,4]]},"391":{"position":[[144,5]]},"392":{"position":[[135,4],[301,4],[447,6]]},"395":{"position":[[4,3],[538,4],[669,5]]},"396":{"position":[[144,5]]},"397":{"position":[[445,3],[607,3]]},"400":{"position":[[4,3]]},"401":{"position":[[157,5]]},"402":{"position":[[814,4]]},"406":{"position":[[132,5]]},"407":{"position":[[144,5]]},"408":{"position":[[256,3],[357,3]]},"413":{"position":[[9,3]]},"414":{"position":[[141,5]]},"415":{"position":[[262,3],[401,5]]},"416":{"position":[[144,5]]},"417":{"position":[[498,5],[621,3],[779,4],[970,4],[1305,3],[1938,3]]},"419":{"position":[[1262,3]]},"423":{"position":[[144,5]]},"429":{"position":[[525,5],[663,3],[938,3],[1199,4]]},"430":{"position":[[4,5],[64,3]]},"431":{"position":[[144,5]]},"432":{"position":[[411,4],[978,5],[1073,5],[1142,5]]},"436":{"position":[[1031,3]]},"437":{"position":[[144,5]]},"438":{"position":[[498,5],[596,4],[820,4],[885,5],[967,4],[1032,5],[1183,5],[1349,5],[1432,4],[1497,5],[1821,3]]},"440":{"position":[[1278,3]]},"444":{"position":[[16,4],[129,5]]},"447":{"position":[[144,5]]},"448":{"position":[[134,3]]},"453":{"position":[[144,5]]},"459":{"position":[[144,5]]},"465":{"position":[[144,5]]},"472":{"position":[[144,5]]},"475":{"position":[[4,3]]},"477":{"position":[[483,3]]},"478":{"position":[[26,4]]},"480":{"position":[[611,4],[701,4]]},"481":{"position":[[144,5]]},"482":{"position":[[661,4]]},"485":{"position":[[257,6],[359,3]]},"486":{"position":[[206,5]]},"487":{"position":[[130,5]]},"489":{"position":[[252,5],[619,3],[867,5]]},"490":{"position":[[103,3]]},"492":{"position":[[322,4],[398,3],[535,4]]},"494":{"position":[[135,3]]},"495":{"position":[[144,5]]},"499":{"position":[[432,5]]},"500":{"position":[[4,3],[96,5]]},"501":{"position":[[100,5]]},"502":{"position":[[343,3],[958,5]]},"507":{"position":[[4,3]]},"508":{"position":[[144,5]]},"509":{"position":[[266,4]]},"513":{"position":[[278,5]]},"514":{"position":[[4,3]]},"516":{"position":[[144,5]]},"517":{"position":[[160,5],[668,3],[3253,4],[3426,3],[3491,4],[3725,3]]},"522":{"position":[[79,5],[285,5]]},"525":{"position":[[144,5]]},"526":{"position":[[25,5]]},"530":{"position":[[79,5],[285,5]]},"532":{"position":[[160,3]]},"533":{"position":[[144,5]]},"534":{"position":[[134,3],[716,4]]},"537":{"position":[[23,4]]},"539":{"position":[[144,5]]},"540":{"position":[[184,3],[256,3]]},"543":{"position":[[4,3],[388,3]]},"544":{"position":[[144,5]]},"545":{"position":[[498,5],[694,3],[929,3],[1540,3]]},"547":{"position":[[1264,3]]},"548":{"position":[[142,6],[328,5],[538,5],[551,3],[667,4]]},"550":{"position":[[537,5]]},"551":{"position":[[79,5],[107,5],[277,5]]},"554":{"position":[[605,4]]},"555":{"position":[[141,5]]},"556":{"position":[[134,3],[873,3]]},"558":{"position":[[33,5]]},"562":{"position":[[4,3]]},"563":{"position":[[207,5]]},"569":{"position":[[98,5],[309,5]]},"570":{"position":[[66,5]]},"571":{"position":[[66,5]]},"572":{"position":[[144,5]]},"573":{"position":[[138,3],[414,3]]},"581":{"position":[[4,3],[357,5],[487,5]]},"583":{"position":[[134,5]]},"584":{"position":[[1022,4]]},"585":{"position":[[492,5]]},"590":{"position":[[839,5]]},"592":{"position":[[141,5]]},"595":{"position":[[308,3],[595,4],[1548,4],[1881,4]]},"597":{"position":[[4,3]]},"598":{"position":[[447,3]]},"599":{"position":[[26,4]]},"600":{"position":[[143,5]]},"601":{"position":[[242,3]]},"602":{"position":[[820,5],[975,3]]},"603":{"position":[[216,3]]},"607":{"position":[[96,5],[308,5]]},"608":{"position":[[148,3]]},"610":{"position":[[144,5]]},"611":{"position":[[134,3],[482,3],[622,4]]},"614":{"position":[[82,5],[292,5]]},"616":{"position":[[267,5]]},"618":{"position":[[144,5]]},"624":{"position":[[144,5]]},"630":{"position":[[144,5]]},"634":{"position":[[424,5]]},"635":{"position":[[4,3],[270,5]]},"636":{"position":[[144,5]]},"643":{"position":[[70,5]]},"645":{"position":[[472,3]]},"646":{"position":[[144,5]]},"650":{"position":[[70,5],[258,5]]},"652":{"position":[[472,3]]},"653":{"position":[[144,5]]},"654":{"position":[[699,3]]},"657":{"position":[[257,6],[359,3]]},"658":{"position":[[206,5]]},"660":{"position":[[401,4],[1014,4],[1037,3]]},"662":{"position":[[252,5],[619,3],[867,5]]},"663":{"position":[[103,3]]},"665":{"position":[[322,4],[398,3],[535,4]]},"669":{"position":[[144,5]]},"673":{"position":[[257,6],[359,3]]},"674":{"position":[[206,5]]},"677":{"position":[[252,5],[619,3],[867,5]]},"678":{"position":[[103,3]]},"680":{"position":[[322,4],[398,3]]},"683":{"position":[[206,5]]},"684":{"position":[[144,5]]},"685":{"position":[[76,5]]},"688":{"position":[[257,6],[359,3]]},"689":{"position":[[206,5]]},"692":{"position":[[252,5],[619,3],[867,5]]},"693":{"position":[[103,3]]},"695":{"position":[[322,4],[398,3],[535,4]]},"699":{"position":[[144,5]]},"703":{"position":[[23,4]]},"705":{"position":[[144,5]]},"711":{"position":[[144,5]]},"712":{"position":[[99,4],[360,4],[406,4]]},"716":{"position":[[81,5],[294,5]]},"718":{"position":[[22,5],[72,5]]},"719":{"position":[[139,5]]},"720":{"position":[[134,3]]},"724":{"position":[[96,5],[227,3]]},"726":{"position":[[191,4]]},"727":{"position":[[144,5]]},"728":{"position":[[380,5],[498,5]]},"731":{"position":[[72,5],[251,5]]},"734":{"position":[[144,5]]},"738":{"position":[[23,4]]},"740":{"position":[[144,5]]},"746":{"position":[[144,5]]},"747":{"position":[[1210,4]]},"750":{"position":[[4,3],[1018,5],[1217,3]]},"753":{"position":[[9,3],[80,5],[715,5],[1635,3]]},"754":{"position":[[892,5],[1181,5]]},"756":{"position":[[144,5]]},"757":{"position":[[371,3],[441,3],[807,4]]},"764":{"position":[[1120,3]]},"766":{"position":[[4,3],[1018,5],[1217,3]]},"767":{"position":[[1129,5]]},"769":{"position":[[144,5]]},"770":{"position":[[371,3],[441,3],[807,4]]},"777":{"position":[[1120,3]]},"779":{"position":[[209,4]]},"780":{"position":[[203,5],[455,5]]},"781":{"position":[[141,5]]},"784":{"position":[[364,6]]},"789":{"position":[[4,3],[1419,5],[1618,3]]},"793":{"position":[[675,5],[1658,3]]},"794":{"position":[[610,5],[1098,5],[1385,5]]},"796":{"position":[[145,5]]},"797":{"position":[[371,3],[441,3],[807,4]]},"804":{"position":[[1118,3]]},"805":{"position":[[51,4]]},"807":{"position":[[4,3],[1006,5],[1205,3]]},"808":{"position":[[690,5],[1608,3]]},"809":{"position":[[610,5],[1098,5],[1385,5]]},"811":{"position":[[144,5]]},"812":{"position":[[371,3],[441,3],[807,4]]},"819":{"position":[[1118,3]]},"820":{"position":[[51,4]]},"821":{"position":[[186,5],[239,5],[741,5],[1078,4],[1322,4],[1408,4],[1479,4],[1540,4]]},"823":{"position":[[4,3],[1006,5],[1205,3]]},"824":{"position":[[1195,5]]},"825":{"position":[[934,5],[1221,5]]},"827":{"position":[[144,5]]},"828":{"position":[[371,3],[441,3],[807,4]]},"835":{"position":[[1118,3]]},"836":{"position":[[51,4]]},"840":{"position":[[175,3],[375,5],[874,3],[1596,3],[1700,3]]},"841":{"position":[[144,5]]},"842":{"position":[[382,4],[2137,3],[2290,3],[2497,3],[3299,4],[3459,4]]},"849":{"position":[[118,3],[318,5],[577,5],[724,5],[1425,5],[1487,3],[2274,5],[2482,5],[2558,3],[2628,3],[2741,3],[2996,5]]},"850":{"position":[[144,5]]},"855":{"position":[[4,3],[204,5],[265,5],[369,5]]},"856":{"position":[[320,4]]},"857":{"position":[[268,3]]},"858":{"position":[[144,5]]},"859":{"position":[[134,3],[266,5]]},"864":{"position":[[968,3],[1456,4],[1545,4],[1700,3]]},"866":{"position":[[144,5]]},"867":{"position":[[691,4],[1330,4],[1379,5],[1483,5],[1597,4]]},"869":{"position":[[30,5],[256,5],[300,4],[572,4],[1123,5],[1217,4],[1273,5],[1426,4],[1542,3],[1592,5],[1682,3]]},"870":{"position":[[578,4]]},"876":{"position":[[960,3]]},"878":{"position":[[144,5]]},"879":{"position":[[477,4],[616,4],[1252,3]]},"883":{"position":[[31,4]]},"884":{"position":[[144,5]]},"890":{"position":[[145,5]]},"895":{"position":[[350,5]]},"896":{"position":[[144,5]]},"906":{"position":[[144,5]]},"907":{"position":[[1134,4]]},"909":{"position":[[182,4],[806,3],[849,4],[1173,5],[1253,4]]},"910":{"position":[[125,5]]},"911":{"position":[[40,4],[239,6],[358,4]]},"912":{"position":[[194,5],[250,5],[757,5],[1138,3]]},"917":{"position":[[100,3],[408,5],[482,5]]},"918":{"position":[[1304,4]]},"919":{"position":[[942,5],[1019,5],[2565,3]]},"921":{"position":[[144,5]]},"922":{"position":[[232,4],[1979,4],[2475,5],[2555,5],[2624,5],[3305,5]]},"923":{"position":[[1134,4]]},"925":{"position":[[182,4],[806,3],[849,4],[1173,5],[1253,4]]},"926":{"position":[[125,5]]},"927":{"position":[[40,4],[239,6],[358,4]]},"931":{"position":[[2087,3]]},"933":{"position":[[144,5]]},"934":{"position":[[1134,4]]},"936":{"position":[[182,4],[806,3],[849,4],[1173,5],[1253,4]]},"937":{"position":[[125,5]]},"938":{"position":[[40,4],[239,6],[358,4]]},"943":{"position":[[204,5]]},"946":{"position":[[12,5]]},"949":{"position":[[144,5]]},"950":{"position":[[1134,4]]},"952":{"position":[[182,4],[806,3],[849,4],[1173,5],[1253,4]]},"953":{"position":[[125,5]]},"954":{"position":[[40,4],[239,6],[358,4]]},"958":{"position":[[144,5]]},"965":{"position":[[100,3],[408,5],[482,5]]},"967":{"position":[[144,5]]},"968":{"position":[[1134,4]]},"970":{"position":[[182,4],[806,3],[849,4],[1173,5],[1253,4]]},"971":{"position":[[125,5]]},"972":{"position":[[40,4],[239,6],[358,4]]},"975":{"position":[[105,5]]},"977":{"position":[[93,5],[166,5],[745,5]]},"981":{"position":[[144,5]]},"987":{"position":[[11,5],[86,5]]},"989":{"position":[[446,3]]},"990":{"position":[[144,5]]},"991":{"position":[[134,3],[719,5]]},"996":{"position":[[144,5]]},"1002":{"position":[[11,5],[86,5]]},"1004":{"position":[[153,6],[529,3]]},"1005":{"position":[[141,5]]},"1008":{"position":[[153,5],[202,5],[258,5],[968,5],[1102,5],[1243,5]]},"1009":{"position":[[134,3],[782,5],[1440,4],[1592,4]]},"1014":{"position":[[144,5]]},"1018":{"position":[[91,5]]},"1020":{"position":[[645,5]]},"1021":{"position":[[144,5],[1034,3]]},"1023":{"position":[[1245,3]]},"1025":{"position":[[23,4]]},"1027":{"position":[[144,5]]},"1031":{"position":[[4,3],[182,3],[657,5]]},"1032":{"position":[[44,3]]},"1033":{"position":[[148,5]]},"1034":{"position":[[83,4],[546,4],[614,4]]},"1036":{"position":[[465,5]]},"1039":{"position":[[113,5]]},"1040":{"position":[[49,5]]},"1042":{"position":[[58,3],[171,3]]},"1043":{"position":[[722,3],[835,3],[1900,3]]},"1044":{"position":[[144,5]]},"1045":{"position":[[861,4]]},"1047":{"position":[[673,3]]},"1049":{"position":[[39,5]]},"1050":{"position":[[49,5]]},"1051":{"position":[[978,3],[1097,3]]},"1052":{"position":[[144,5]]},"1053":{"position":[[861,4]]},"1055":{"position":[[673,3]]},"1057":{"position":[[42,5]]},"1058":{"position":[[49,5]]},"1059":{"position":[[742,3],[886,3],[1934,3]]},"1060":{"position":[[144,5]]},"1061":{"position":[[861,4]]},"1063":{"position":[[673,3]]},"1067":{"position":[[316,5],[347,5],[677,3]]},"1068":{"position":[[93,4]]},"1069":{"position":[[144,5]]},"1070":{"position":[[134,3]]},"1075":{"position":[[144,5]]},"1076":{"position":[[518,6]]},"1077":{"position":[[258,6]]},"1081":{"position":[[126,3]]},"1082":{"position":[[63,3],[118,5],[242,4]]},"1084":{"position":[[144,5]]},"1085":{"position":[[119,5],[154,3],[1050,4]]},"1093":{"position":[[144,5]]},"1097":{"position":[[1,6]]},"1100":{"position":[[144,5]]},"1106":{"position":[[145,5]]},"1112":{"position":[[144,5]]},"1118":{"position":[[138,3],[277,3],[340,3],[594,3]]},"1122":{"position":[[4,3],[296,5]]},"1123":{"position":[[780,3]]},"1124":{"position":[[144,5]]},"1125":{"position":[[399,3]]},"1129":{"position":[[98,5]]},"1132":{"position":[[145,5]]},"1133":{"position":[[124,5],[1408,3]]},"1136":{"position":[[4,3]]},"1137":{"position":[[4,3],[73,3]]},"1138":{"position":[[566,3]]},"1140":{"position":[[76,4],[2517,5]]},"1142":{"position":[[4,3]]},"1143":{"position":[[1,3]]},"1144":{"position":[[527,4],[760,3],[1083,3]]},"1149":{"position":[[4,3],[87,5]]},"1150":{"position":[[1,3]]},"1151":{"position":[[1023,3],[1269,4]]},"1154":{"position":[[182,5],[248,3],[388,5],[554,5],[732,6]]},"1156":{"position":[[372,4],[580,5]]},"1157":{"position":[[182,3]]},"1158":{"position":[[84,3]]},"1160":{"position":[[4,3]]},"1161":{"position":[[1,3]]},"1162":{"position":[[375,4]]},"1165":{"position":[[239,5]]},"1168":{"position":[[4,3]]},"1169":{"position":[[1,3]]},"1170":{"position":[[527,4],[760,3]]},"1176":{"position":[[4,3]]},"1177":{"position":[[475,3]]},"1178":{"position":[[4,3],[73,3]]},"1179":{"position":[[258,3],[1286,3]]},"1182":{"position":[[84,3]]},"1185":{"position":[[4,3]]},"1186":{"position":[[659,4]]},"1187":{"position":[[4,3],[73,3]]},"1188":{"position":[[154,4],[445,4],[906,3]]},"1191":{"position":[[84,3]]},"1192":{"position":[[76,4],[568,5]]},"1194":{"position":[[4,3],[87,4],[387,3]]},"1195":{"position":[[4,3],[73,3],[285,5],[326,5],[511,4],[635,5]]},"1196":{"position":[[141,5],[326,3],[419,3],[813,3],[1046,3],[1188,3]]},"1198":{"position":[[453,6]]},"1199":{"position":[[158,5]]},"1200":{"position":[[417,5],[570,5]]},"1203":{"position":[[4,3]]},"1204":{"position":[[340,3],[606,3]]},"1205":{"position":[[4,3],[73,3]]},"1208":{"position":[[331,3]]},"1209":{"position":[[56,4],[842,5]]},"1211":{"position":[[4,3]]},"1212":{"position":[[1,3]]},"1213":{"position":[[214,3],[382,4],[760,3]]},"1218":{"position":[[4,3]]},"1219":{"position":[[1,3]]},"1220":{"position":[[214,3],[382,4]]},"1226":{"position":[[4,3],[169,5]]},"1228":{"position":[[57,5]]},"1229":{"position":[[4,3],[73,3]]},"1230":{"position":[[100,4],[276,3],[399,3]]},"1231":{"position":[[55,5]]},"1233":{"position":[[85,4]]},"1234":{"position":[[47,5],[128,5]]},"1236":{"position":[[4,3]]},"1237":{"position":[[41,3],[145,5]]},"1239":{"position":[[158,3]]},"1243":{"position":[[4,3],[565,3],[877,3],[1077,5],[1254,5],[1312,5]]},"1246":{"position":[[4,3],[73,3]]},"1247":{"position":[[126,3],[271,4],[447,3],[570,3],[598,5]]},"1248":{"position":[[55,5]]},"1250":{"position":[[209,4]]},"1251":{"position":[[216,5]]},"1252":{"position":[[141,5]]},"1255":{"position":[[364,6]]},"1256":{"position":[[84,3]]},"1258":{"position":[[4,3]]},"1259":{"position":[[1,3]]},"1260":{"position":[[477,3],[817,4]]},"1262":{"position":[[84,3]]},"1264":{"position":[[4,3]]},"1265":{"position":[[54,5]]},"1267":{"position":[[407,3],[481,3]]},"1274":{"position":[[4,3],[216,5]]},"1275":{"position":[[300,5]]},"1276":{"position":[[78,4],[393,3]]},"1277":{"position":[[198,5],[385,4],[470,4],[869,3],[951,4]]},"1281":{"position":[[4,3]]},"1282":{"position":[[302,3],[448,3]]},"1284":{"position":[[4,3],[73,3]]},"1285":{"position":[[429,3],[503,3],[1040,3],[1168,3],[1280,3]]},"1286":{"position":[[667,5],[1155,5],[1471,5],[1737,3],[1799,5],[1886,5],[2052,4],[2142,5],[2215,5],[2336,5]]},"1288":{"position":[[160,3],[276,3]]},"1289":{"position":[[757,3],[1072,6],[1322,3]]},"1290":{"position":[[84,3]]},"1292":{"position":[[71,4],[6674,3],[6831,5]]},"1295":{"position":[[4,3]]},"1298":{"position":[[420,5],[1154,3]]},"1299":{"position":[[4,3],[73,3]]},"1300":{"position":[[429,3],[503,3],[1040,3],[1168,3],[1280,3]]},"1301":{"position":[[991,5],[1307,5],[1573,3],[1635,5],[1722,5],[1888,4],[1978,5],[2051,5],[2172,5]]},"1303":{"position":[[783,6],[1033,3],[1730,3]]},"1304":{"position":[[84,3]]},"1306":{"position":[[71,4],[6674,3],[6831,5]]},"1309":{"position":[[4,3]]},"1310":{"position":[[317,3],[463,3],[643,3]]},"1312":{"position":[[4,3],[73,3]]},"1313":{"position":[[376,3]]},"1315":{"position":[[85,3]]},"1316":{"position":[[76,4],[2517,5]]},"1319":{"position":[[4,3]]},"1322":{"position":[[454,5],[1291,6],[1541,3]]},"1323":{"position":[[4,3],[73,3]]},"1324":{"position":[[429,3],[503,3],[1040,3],[1168,3],[1280,3]]},"1325":{"position":[[667,5],[1155,5],[1471,5],[1737,3],[1799,5],[1886,5],[2052,4],[2142,5],[2215,5],[2336,5]]},"1327":{"position":[[84,3]]},"1329":{"position":[[71,4],[6674,3],[6831,5]]},"1332":{"position":[[4,3]]},"1334":{"position":[[259,3]]},"1335":{"position":[[454,5],[1189,3]]},"1336":{"position":[[4,3],[73,3]]},"1337":{"position":[[376,3]]},"1339":{"position":[[84,3]]},"1340":{"position":[[76,4],[2517,5]]},"1343":{"position":[[4,3]]},"1346":{"position":[[420,5],[1155,3]]},"1347":{"position":[[4,3],[73,3]]},"1348":{"position":[[376,3]]},"1350":{"position":[[84,3]]},"1351":{"position":[[76,4],[2517,5]]},"1354":{"position":[[4,3]]},"1355":{"position":[[4,3],[73,3]]},"1356":{"position":[[93,4]]},"1358":{"position":[[234,3],[343,4]]},"1361":{"position":[[4,3]]},"1362":{"position":[[38,3],[144,5],[782,5]]},"1365":{"position":[[4,3]]},"1370":{"position":[[72,4],[1232,5]]},"1372":{"position":[[4,3]]},"1373":{"position":[[960,3],[1014,3]]},"1374":{"position":[[960,3],[1014,3]]},"1375":{"position":[[4,3],[73,3]]},"1378":{"position":[[84,3]]},"1379":{"position":[[75,4],[4541,3],[4647,5]]},"1382":{"position":[[4,3],[403,5]]},"1383":{"position":[[166,3],[936,3],[1953,3],[2047,3]]},"1384":{"position":[[20,3],[89,5],[606,5],[1102,3],[1250,3]]},"1385":{"position":[[4,3],[73,3]]},"1386":{"position":[[104,4],[952,5],[1051,5],[1300,3]]},"1388":{"position":[[577,3]]},"1389":{"position":[[84,3]]},"1391":{"position":[[6,5],[168,4]]},"1392":{"position":[[144,4],[225,5]]},"1393":{"position":[[118,4],[230,3]]},"1394":{"position":[[75,4],[975,5]]},"1396":{"position":[[4,3]]},"1397":{"position":[[739,3],[793,3],[1169,3]]},"1398":{"position":[[738,3],[792,3],[1172,3]]},"1399":{"position":[[4,3],[73,3]]},"1402":{"position":[[84,3]]},"1403":{"position":[[75,4],[4541,3],[4647,5]]},"1406":{"position":[[4,3]]},"1408":{"position":[[58,3],[112,3]]},"1409":{"position":[[722,3],[776,3],[1173,3]]},"1410":{"position":[[4,3],[73,3]]},"1413":{"position":[[84,3]]},"1414":{"position":[[75,4],[4541,3],[4647,5]]},"1417":{"position":[[4,3],[316,4]]},"1419":{"position":[[4,3],[73,3]]},"1420":{"position":[[594,4]]},"1423":{"position":[[82,4],[699,5]]},"1425":{"position":[[4,3],[140,5]]},"1426":{"position":[[4,3],[73,3]]},"1427":{"position":[[317,3],[746,6]]},"1430":{"position":[[84,3]]},"1431":{"position":[[99,4],[2540,5]]},"1437":{"position":[[796,4]]},"1438":{"position":[[775,3]]},"1439":{"position":[[67,4],[348,4]]},"1440":{"position":[[523,4],[1426,3],[1497,3]]},"1446":{"position":[[70,3]]},"1448":{"position":[[623,5]]},"1449":{"position":[[697,5]]},"1451":{"position":[[72,3]]},"1452":{"position":[[2292,3],[2632,3],[2919,4],[3156,4],[3537,3]]},"1453":{"position":[[1503,3]]},"1459":{"position":[[356,4]]},"1461":{"position":[[255,3],[395,4],[2164,6],[2630,3],[3339,3],[3396,4],[4200,3],[4359,4],[4493,5],[5249,3]]},"1465":{"position":[[166,3],[569,3]]},"1467":{"position":[[1985,3]]},"1470":{"position":[[316,3]]},"1472":{"position":[[271,5]]},"1475":{"position":[[140,3],[607,4],[1051,4]]},"1476":{"position":[[1073,4],[1593,5]]},"1477":{"position":[[2645,5],[2870,3],[2980,5]]},"1479":{"position":[[466,3]]},"1480":{"position":[[314,4]]}},"keywords":{}}],["us/pacif",{"_index":4571,"title":{},"content":{"748":{"position":[[253,10]]}},"keywords":{}}],["usa",{"_index":4604,"title":{},"content":{"754":{"position":[[605,4]]},"794":{"position":[[811,4]]},"809":{"position":[[811,4]]},"825":{"position":[[647,4]]},"1286":{"position":[[868,4]]},"1301":{"position":[[704,4]]},"1325":{"position":[[868,4]]}},"keywords":{}}],["usabl",{"_index":164,"title":{},"content":{"4":{"position":[[301,6]]},"68":{"position":[[1781,6]]}},"keywords":{}}],["usag",{"_index":712,"title":{"485":{"position":[[0,6]]},"657":{"position":[[0,6]]},"673":{"position":[[0,6]]},"688":{"position":[[0,6]]}},"content":{"39":{"position":[[77,6]]},"146":{"position":[[64,5]]},"149":{"position":[[70,5]]},"152":{"position":[[80,5]]},"191":{"position":[[1668,5],[1816,5]]},"240":{"position":[[1629,5],[1777,5]]},"280":{"position":[[27,5]]},"323":{"position":[[1571,5]]},"616":{"position":[[22,6]]},"867":{"position":[[1460,5]]},"869":{"position":[[1506,5]]},"870":{"position":[[659,5]]},"944":{"position":[[158,5]]},"1032":{"position":[[1228,5],[1435,5],[1521,5],[1625,5]]},"1036":{"position":[[696,6]]},"1140":{"position":[[2438,5]]},"1276":{"position":[[373,5]]},"1292":{"position":[[6632,5]]},"1306":{"position":[[6632,5]]},"1316":{"position":[[2438,5]]},"1329":{"position":[[6632,5]]},"1340":{"position":[[2438,5]]},"1351":{"position":[[2438,5]]},"1379":{"position":[[4494,5]]},"1383":{"position":[[1616,5],[1764,5]]},"1403":{"position":[[4494,5]]},"1414":{"position":[[4494,5]]},"1431":{"position":[[2461,5]]},"1453":{"position":[[1556,5]]}},"keywords":{}}],["use_frm",{"_index":6245,"title":{},"content":{"1292":{"position":[[6791,7]]},"1306":{"position":[[6791,7]]},"1329":{"position":[[6791,7]]}},"keywords":{}}],["useddescribestream",{"_index":3509,"title":{},"content":{"390":{"position":[[294,18]]}},"keywords":{}}],["useddescribestreamsummari",{"_index":3510,"title":{},"content":{"390":{"position":[[328,25]]}},"keywords":{}}],["usedgetrecord",{"_index":3528,"title":{},"content":{"395":{"position":[[472,14]]}},"keywords":{}}],["usedgetsharditer",{"_index":3508,"title":{},"content":{"390":{"position":[[258,20]]},"395":{"position":[[502,20]]}},"keywords":{}}],["user",{"_index":575,"title":{"59":{"position":[[0,4]]},"213":{"position":[[5,4]]},"336":{"position":[[12,5]]},"415":{"position":[[24,4]]},"864":{"position":[[19,5]]},"876":{"position":[[19,5]]}},"content":{"21":{"position":[[639,4]]},"58":{"position":[[688,5]]},"60":{"position":[[341,6]]},"81":{"position":[[1424,5],[2717,5]]},"82":{"position":[[767,4],[1445,5],[1454,4],[2264,5],[3880,5],[3889,4],[4493,5],[4502,4]]},"83":{"position":[[1058,5]]},"84":{"position":[[259,5],[612,5]]},"105":{"position":[[331,4]]},"108":{"position":[[13,4]]},"110":{"position":[[660,4]]},"117":{"position":[[289,4]]},"135":{"position":[[507,5]]},"154":{"position":[[33,6],[234,6],[246,5],[343,5],[439,5],[505,4],[654,5],[701,5],[1549,5]]},"158":{"position":[[706,4]]},"169":{"position":[[934,5],[1075,6]]},"173":{"position":[[963,5]]},"177":{"position":[[157,4],[372,4]]},"183":{"position":[[1310,4],[1432,4],[1863,5],[1918,4],[1967,5],[2068,4],[2148,4],[2196,5],[2247,4],[2567,4],[2681,4],[2753,5],[2951,4],[3025,6],[3082,5],[3277,5],[3669,5],[3724,4],[3773,5],[3824,4],[3949,5],[3967,4]]},"191":{"position":[[198,5],[1098,4],[1122,4],[1302,4]]},"192":{"position":[[1001,5]]},"202":{"position":[[169,4]]},"206":{"position":[[406,4]]},"213":{"position":[[5,4]]},"215":{"position":[[37,5]]},"219":{"position":[[531,5]]},"221":{"position":[[406,5],[512,4],[994,4]]},"222":{"position":[[239,4],[894,4],[911,5]]},"223":{"position":[[205,4]]},"224":{"position":[[258,4]]},"236":{"position":[[704,5],[2864,4]]},"237":{"position":[[284,4],[345,4],[731,4],[1622,4]]},"238":{"position":[[934,4]]},"240":{"position":[[1059,4],[1083,4],[1263,4],[2298,6]]},"242":{"position":[[704,4],[714,4]]},"253":{"position":[[3200,4]]},"254":{"position":[[283,6],[687,5],[837,5],[963,6],[2744,5],[2894,5],[3405,5],[3555,5],[3945,5]]},"255":{"position":[[223,5]]},"277":{"position":[[213,4]]},"280":{"position":[[99,5]]},"281":{"position":[[931,7],[1519,5],[1588,5],[2041,6],[2097,5]]},"288":{"position":[[667,4]]},"299":{"position":[[366,4],[441,5],[582,4]]},"314":{"position":[[1280,5]]},"315":{"position":[[1151,6]]},"320":{"position":[[1164,5],[1426,5]]},"323":{"position":[[1813,5],[1883,5]]},"337":{"position":[[161,4],[316,4],[378,4],[494,4],[570,4]]},"338":{"position":[[311,4],[363,4],[517,5]]},"339":{"position":[[185,4]]},"341":{"position":[[275,4],[296,4]]},"344":{"position":[[200,5]]},"360":{"position":[[194,5]]},"367":{"position":[[246,4],[354,4]]},"370":{"position":[[466,5],[472,4],[490,4],[612,5],[682,6]]},"371":{"position":[[248,5]]},"377":{"position":[[108,6]]},"383":{"position":[[23,4]]},"387":{"position":[[411,4]]},"390":{"position":[[168,4],[610,5]]},"395":{"position":[[328,4],[789,5]]},"402":{"position":[[275,5],[281,4],[295,4],[399,5],[765,4]]},"403":{"position":[[229,5],[423,5]]},"406":{"position":[[285,4]]},"413":{"position":[[223,5],[387,5]]},"415":{"position":[[27,4],[102,5],[158,4],[228,4],[433,4],[469,4],[1009,5]]},"417":{"position":[[91,6]]},"421":{"position":[[80,4]]},"433":{"position":[[1,4]]},"438":{"position":[[91,6]]},"445":{"position":[[15,4],[107,5]]},"446":{"position":[[299,4],[329,4]]},"448":{"position":[[775,5]]},"502":{"position":[[551,6]]},"517":{"position":[[3308,5],[3607,5]]},"522":{"position":[[472,5]]},"523":{"position":[[10,4]]},"524":{"position":[[10,4]]},"529":{"position":[[505,5]]},"530":{"position":[[472,5]]},"531":{"position":[[10,4],[120,4],[401,4]]},"532":{"position":[[10,4],[219,4]]},"543":{"position":[[260,4]]},"545":{"position":[[91,6]]},"580":{"position":[[154,5]]},"590":{"position":[[335,6],[543,5],[930,5],[1018,6]]},"608":{"position":[[105,4]]},"628":{"position":[[264,4]]},"637":{"position":[[85,4],[265,4]]},"645":{"position":[[223,4]]},"652":{"position":[[223,4]]},"683":{"position":[[151,4]]},"712":{"position":[[317,4]]},"717":{"position":[[68,4]]},"723":{"position":[[39,4]]},"739":{"position":[[76,4]]},"750":{"position":[[744,4]]},"752":{"position":[[347,4],[631,4]]},"753":{"position":[[1003,4],[1287,4]]},"757":{"position":[[160,5],[172,4],[190,4],[318,5]]},"758":{"position":[[205,5]]},"764":{"position":[[1085,5]]},"766":{"position":[[744,4]]},"767":{"position":[[1749,4],[1964,4]]},"770":{"position":[[160,5],[172,4],[190,4],[318,5]]},"771":{"position":[[205,5]]},"777":{"position":[[1085,5]]},"780":{"position":[[211,4]]},"782":{"position":[[194,5],[200,4],[214,4],[305,5]]},"783":{"position":[[169,5],[226,5]]},"789":{"position":[[1145,4]]},"791":{"position":[[300,4],[584,4],[647,5]]},"792":{"position":[[1689,4],[1904,4],[1967,5]]},"793":{"position":[[974,4],[1258,4],[1321,5]]},"797":{"position":[[160,5],[172,4],[190,4],[318,5]]},"798":{"position":[[203,5]]},"804":{"position":[[1083,5]]},"807":{"position":[[732,4]]},"808":{"position":[[920,4],[1204,4],[1267,5]]},"812":{"position":[[160,5],[172,4],[190,4],[318,5]]},"813":{"position":[[203,5]]},"819":{"position":[[1083,5]]},"823":{"position":[[732,4]]},"824":{"position":[[1811,4],[2026,4],[2089,5]]},"828":{"position":[[160,5],[172,4],[190,4],[318,5]]},"829":{"position":[[203,5]]},"835":{"position":[[1083,5]]},"839":{"position":[[196,4]]},"840":{"position":[[1587,4],[1652,6],[1668,4],[2044,5],[2061,4],[2148,4]]},"848":{"position":[[233,4]]},"849":{"position":[[2619,4],[2693,6],[2709,4],[3184,5],[3201,4],[3288,4]]},"857":{"position":[[135,4],[160,4],[199,4]]},"862":{"position":[[154,4]]},"864":{"position":[[31,4],[132,5],[196,4],[322,4],[953,4],[1671,4]]},"865":{"position":[[153,4]]},"867":{"position":[[153,5],[181,4],[277,5]]},"868":{"position":[[174,5]]},"869":{"position":[[354,4]]},"871":{"position":[[96,7],[158,4],[200,6]]},"874":{"position":[[154,4]]},"876":{"position":[[31,4],[132,5],[196,4],[322,4],[818,4],[931,4]]},"877":{"position":[[181,4],[203,4]]},"879":{"position":[[1681,4]]},"880":{"position":[[201,5]]},"900":{"position":[[229,4],[281,4]]},"904":{"position":[[1350,4],[1458,4],[2188,5]]},"907":{"position":[[249,5],[255,4],[273,4],[395,5],[465,6]]},"908":{"position":[[249,5]]},"917":{"position":[[174,4],[293,4],[320,4],[1697,5]]},"918":{"position":[[1642,4],[1750,4],[2480,5]]},"919":{"position":[[824,4],[883,4],[2647,4]]},"923":{"position":[[249,5],[255,4],[273,4],[395,5],[465,6]]},"924":{"position":[[249,5]]},"931":{"position":[[1007,4],[1115,4],[1850,5]]},"934":{"position":[[249,5],[255,4],[273,4],[395,5],[465,6]]},"935":{"position":[[249,5]]},"945":{"position":[[342,5]]},"950":{"position":[[249,5],[255,4],[273,4],[395,5],[465,6]]},"951":{"position":[[249,5]]},"964":{"position":[[29,5]]},"965":{"position":[[174,4],[293,4],[320,4],[1697,5]]},"968":{"position":[[249,5],[255,4],[273,4],[395,5],[465,6]]},"969":{"position":[[249,5]]},"974":{"position":[[148,5]]},"977":{"position":[[49,5],[433,5],[612,5]]},"985":{"position":[[541,4]]},"987":{"position":[[234,4],[307,5]]},"989":{"position":[[31,5],[80,4],[394,5],[884,4],[983,4],[1055,5],[1075,5]]},"1000":{"position":[[719,4],[909,5]]},"1002":{"position":[[234,4],[307,5]]},"1004":{"position":[[31,5],[80,4],[477,5],[967,4],[1066,4],[1138,5],[1158,5]]},"1021":{"position":[[1113,6]]},"1031":{"position":[[395,4]]},"1032":{"position":[[13,4],[472,4],[541,4],[647,4],[779,4],[959,4]]},"1034":{"position":[[359,5],[365,4],[384,4],[472,4],[601,4],[692,6]]},"1036":{"position":[[91,6]]},"1037":{"position":[[201,5]]},"1040":{"position":[[674,4]]},"1042":{"position":[[149,4],[254,4],[309,4]]},"1043":{"position":[[682,4],[813,4],[918,4],[973,4]]},"1045":{"position":[[234,5],[240,4],[258,4],[380,5],[450,6]]},"1046":{"position":[[190,5]]},"1050":{"position":[[674,4]]},"1051":{"position":[[938,4],[1075,4],[1180,4],[1235,4]]},"1053":{"position":[[234,5],[240,4],[258,4],[380,5],[450,6]]},"1054":{"position":[[190,5]]},"1058":{"position":[[674,4]]},"1059":{"position":[[702,4],[864,4],[973,4],[1028,4]]},"1061":{"position":[[234,5],[240,4],[258,4],[380,5],[450,6]]},"1062":{"position":[[190,5]]},"1067":{"position":[[486,4]]},"1122":{"position":[[45,4],[415,5]]},"1133":{"position":[[321,4]]},"1134":{"position":[[2964,5]]},"1136":{"position":[[87,4]]},"1138":{"position":[[501,5],[736,5],[742,4],[756,4]]},"1139":{"position":[[176,5]]},"1140":{"position":[[2478,4]]},"1142":{"position":[[151,4],[216,5]]},"1149":{"position":[[112,4],[606,4],[664,5]]},"1151":{"position":[[202,5],[208,4],[222,4],[313,5],[487,4]]},"1152":{"position":[[215,5],[221,4]]},"1160":{"position":[[151,4],[249,4],[379,5]]},"1166":{"position":[[123,5]]},"1168":{"position":[[151,4],[216,5]]},"1177":{"position":[[166,4],[203,4]]},"1185":{"position":[[158,4]]},"1186":{"position":[[648,4]]},"1203":{"position":[[562,5],[590,5]]},"1204":{"position":[[200,5],[508,5]]},"1207":{"position":[[277,4]]},"1253":{"position":[[267,5],[273,4],[287,4],[378,5]]},"1254":{"position":[[209,5],[266,5]]},"1258":{"position":[[200,4],[258,5]]},"1264":{"position":[[114,4]]},"1267":{"position":[[256,5],[262,4]]},"1270":{"position":[[181,5]]},"1277":{"position":[[721,6]]},"1281":{"position":[[84,4],[224,4]]},"1285":{"position":[[320,5],[342,5],[348,4],[362,4],[796,6]]},"1287":{"position":[[170,5]]},"1292":{"position":[[6708,4]]},"1295":{"position":[[84,4],[224,4]]},"1298":{"position":[[205,4]]},"1300":{"position":[[320,5],[342,5],[348,4],[362,4],[796,6]]},"1302":{"position":[[170,5]]},"1303":{"position":[[1287,4],[1335,4],[1424,4],[1491,5]]},"1306":{"position":[[6708,4]]},"1309":{"position":[[87,4]]},"1313":{"position":[[311,5],[546,5],[552,4],[566,4],[650,6]]},"1314":{"position":[[173,5]]},"1316":{"position":[[2478,4]]},"1319":{"position":[[84,4],[224,4]]},"1322":{"position":[[239,4],[894,4],[911,5]]},"1324":{"position":[[320,5],[342,5],[348,4],[362,4],[796,6]]},"1326":{"position":[[170,5]]},"1329":{"position":[[6708,4]]},"1332":{"position":[[87,4]]},"1335":{"position":[[239,4],[894,4],[911,5]]},"1337":{"position":[[311,5],[546,5],[552,4],[566,4],[650,6]]},"1338":{"position":[[173,5]]},"1340":{"position":[[2478,4]]},"1343":{"position":[[87,4]]},"1346":{"position":[[205,4]]},"1348":{"position":[[311,5],[546,5],[552,4],[566,4],[650,6]]},"1349":{"position":[[173,5]]},"1351":{"position":[[2478,4]]},"1372":{"position":[[88,4],[224,4]]},"1373":{"position":[[920,4],[992,4],[1101,4]]},"1374":{"position":[[920,4],[992,4],[1105,4]]},"1376":{"position":[[320,5],[342,5],[348,4],[362,4]]},"1377":{"position":[[174,5]]},"1379":{"position":[[4587,4]]},"1382":{"position":[[223,4]]},"1383":{"position":[[1046,4],[1070,4],[1250,4]]},"1384":{"position":[[170,4],[601,4],[639,4],[785,4]]},"1386":{"position":[[623,4],[869,4]]},"1387":{"position":[[1,4],[267,5],[812,5]]},"1396":{"position":[[88,4],[224,4]]},"1397":{"position":[[699,4],[771,4],[880,4]]},"1398":{"position":[[698,4],[770,4],[883,4]]},"1400":{"position":[[320,5],[342,5],[348,4],[362,4]]},"1401":{"position":[[174,5]]},"1403":{"position":[[4587,4]]},"1406":{"position":[[88,4],[224,4]]},"1408":{"position":[[90,4],[199,4]]},"1409":{"position":[[682,4],[754,4],[863,4]]},"1411":{"position":[[320,5],[342,5],[348,4],[362,4]]},"1412":{"position":[[174,5]]},"1414":{"position":[[4587,4]]},"1417":{"position":[[330,4]]},"1425":{"position":[[96,4]]},"1427":{"position":[[252,5],[487,5],[493,4],[507,4]]},"1428":{"position":[[214,5]]},"1431":{"position":[[2501,4]]},"1455":{"position":[[71,4]]},"1456":{"position":[[55,4]]},"1461":{"position":[[3887,5],[4430,5],[4603,4],[4830,4],[5067,4],[5206,4],[5305,4]]}},"keywords":{}}],["user"",{"_index":3811,"title":{},"content":{"475":{"position":[[167,10]]},"477":{"position":[[96,10],[1032,10]]}},"keywords":{}}],["user'",{"_index":1539,"title":{},"content":{"107":{"position":[[1585,6],[2682,6],[3433,6]]},"415":{"position":[[286,6]]},"531":{"position":[[172,6]]},"840":{"position":[[1745,6]]},"849":{"position":[[2786,6]]},"989":{"position":[[455,6]]},"1004":{"position":[[538,6]]},"1032":{"position":[[607,6]]},"1461":{"position":[[4868,6]]}},"keywords":{}}],["user/id",{"_index":454,"title":{},"content":{"16":{"position":[[199,10]]}},"keywords":{}}],["user@19.220.21.33:22",{"_index":4883,"title":{},"content":{"868":{"position":[[422,20]]},"880":{"position":[[423,20]]}},"keywords":{}}],["user@domain.com",{"_index":2471,"title":{},"content":{"223":{"position":[[773,15]]},"1134":{"position":[[186,15]]},"1298":{"position":[[773,15]]},"1346":{"position":[[773,15]]}},"keywords":{}}],["user_id",{"_index":2763,"title":{},"content":{"253":{"position":[[3141,7]]},"254":{"position":[[323,8],[520,7],[543,8],[696,8],[1391,8],[1588,7],[1793,7],[2178,8],[2753,8],[3414,8],[3602,8],[3971,7]]},"1391":{"position":[[554,9],[631,9],[836,8],[915,9]]}},"keywords":{}}],["user_password",{"_index":6389,"title":{},"content":{"1386":{"position":[[814,13],[958,13]]}},"keywords":{}}],["user_pasword",{"_index":6391,"title":{},"content":{"1387":{"position":[[254,12]]}},"keywords":{}}],["user_resourc",{"_index":6242,"title":{},"content":{"1292":{"position":[[6744,13]]},"1306":{"position":[[6744,13]]},"1329":{"position":[[6744,13]]}},"keywords":{}}],["usera",{"_index":4551,"title":{},"content":{"739":{"position":[[113,5]]}},"keywords":{}}],["userad",{"_index":4990,"title":{},"content":{"900":{"position":[[150,6]]}},"keywords":{}}],["userecoveri",{"_index":566,"title":{},"content":{"21":{"position":[[442,11]]}},"keywords":{}}],["userid",{"_index":1056,"title":{},"content":{"71":{"position":[[238,9],[519,10],[618,6],[715,6]]},"74":{"position":[[706,9],[768,8]]},"128":{"position":[[519,7],[564,7],[699,7]]},"129":{"position":[[764,7],[805,7],[892,7],[939,7],[1053,8],[1099,7],[1222,7],[1238,7]]},"130":{"position":[[251,7],[302,7]]}},"keywords":{}}],["usernam",{"_index":1143,"title":{},"content":{"82":{"position":[[67,8]]},"154":{"position":[[1065,9]]},"183":{"position":[[4359,9]]},"184":{"position":[[384,8]]},"201":{"position":[[155,8]]},"206":{"position":[[323,8]]},"223":{"position":[[666,9]]},"247":{"position":[[219,9],[336,9]]},"338":{"position":[[89,8]]},"418":{"position":[[258,9]]},"429":{"position":[[846,8]]},"432":{"position":[[838,8],[847,9]]},"433":{"position":[[270,9]]},"439":{"position":[[515,9]]},"546":{"position":[[995,9]]},"570":{"position":[[124,8]]},"581":{"position":[[417,8]]},"615":{"position":[[93,8]]},"635":{"position":[[508,8]]},"637":{"position":[[270,9]]},"638":{"position":[[287,9]]},"683":{"position":[[111,8]]},"748":{"position":[[167,9]]},"753":{"position":[[791,8]]},"793":{"position":[[762,8]]},"840":{"position":[[2613,8]]},"842":{"position":[[1101,8]]},"867":{"position":[[159,8]]},"879":{"position":[[342,8],[585,8],[598,8],[725,9]]},"880":{"position":[[264,8],[288,9]]},"1021":{"position":[[425,9],[435,8],[444,8]]},"1022":{"position":[[133,9],[324,9]]},"1067":{"position":[[446,8]]},"1082":{"position":[[220,8]]},"1118":{"position":[[431,9]]},"1195":{"position":[[300,8]]},"1196":{"position":[[305,8],[314,8]]},"1197":{"position":[[284,9]]},"1206":{"position":[[757,9],[767,8],[785,9]]},"1207":{"position":[[258,9]]},"1227":{"position":[[286,8]]},"1244":{"position":[[19,8]]},"1267":{"position":[[267,8]]},"1298":{"position":[[666,9]]},"1346":{"position":[[666,9]]},"1386":{"position":[[884,8]]}},"keywords":{}}],["username/password",{"_index":4758,"title":{},"content":{"842":{"position":[[993,17]]}},"keywords":{}}],["username@databasenam",{"_index":5049,"title":{},"content":{"919":{"position":[[2655,22]]}},"keywords":{}}],["username@servernam",{"_index":4600,"title":{},"content":{"753":{"position":[[832,20]]},"793":{"position":[[803,20]]}},"keywords":{}}],["userpassword",{"_index":3675,"title":{},"content":{"432":{"position":[[534,12]]},"433":{"position":[[232,12]]}},"keywords":{}}],["userprofil",{"_index":6628,"title":{},"content":{"1461":{"position":[[4995,12]]}},"keywords":{}}],["userprofile.flow.yaml",{"_index":6627,"title":{},"content":{"1461":{"position":[[4918,21],[4961,21]]}},"keywords":{}}],["users.authent",{"_index":1752,"title":{},"content":{"135":{"position":[[559,20]]}},"keywords":{}}],["users/*/messag",{"_index":4242,"title":{},"content":{"590":{"position":[[940,16]]}},"keywords":{}}],["users/alice/messag",{"_index":4237,"title":{},"content":{"590":{"position":[[451,22]]}},"keywords":{}}],["users/alice/messages/1",{"_index":4238,"title":{},"content":{"590":{"position":[[517,24]]}},"keywords":{}}],["users/rol",{"_index":4739,"title":{},"content":{"840":{"position":[[906,11],[1628,11],[1969,11]]},"849":{"position":[[1519,11],[2669,11],[3088,11]]}},"keywords":{}}],["userscampaign",{"_index":4510,"title":{},"content":{"715":{"position":[[62,13]]}},"keywords":{}}],["usersdaili",{"_index":4149,"title":{},"content":{"568":{"position":[[202,10]]}},"keywords":{}}],["usersdevic",{"_index":4150,"title":{},"content":{"568":{"position":[[220,12]]}},"keywords":{}}],["usersdevicesfour",{"_index":4214,"title":{},"content":{"580":{"position":[[59,16]]}},"keywords":{}}],["usersfour",{"_index":4146,"title":{},"content":{"568":{"position":[[136,9]]}},"keywords":{}}],["userslocationspagestraff",{"_index":4215,"title":{},"content":{"580":{"position":[[90,26]]}},"keywords":{}}],["usersmessag",{"_index":4458,"title":{},"content":{"697":{"position":[[226,12]]}},"keywords":{}}],["userstwo",{"_index":4147,"title":{},"content":{"568":{"position":[[160,8]]}},"keywords":{}}],["usersweekli",{"_index":4148,"title":{},"content":{"568":{"position":[[183,11]]}},"keywords":{}}],["userus",{"_index":4411,"title":{},"content":{"667":{"position":[[166,8]]}},"keywords":{}}],["usingdock",{"_index":1115,"title":{},"content":{"81":{"position":[[90,11]]}},"keywords":{}}],["usr/local/bin/flowctl",{"_index":881,"title":{},"content":{"58":{"position":[[336,22],[467,22],[512,22],[646,22]]},"169":{"position":[[577,22],[708,22],[756,22],[890,22]]}},"keywords":{}}],["usual",{"_index":423,"title":{},"content":{"14":{"position":[[291,7]]},"91":{"position":[[75,8]]},"138":{"position":[[1645,8]]},"141":{"position":[[1650,8]]},"142":{"position":[[1662,8]]},"157":{"position":[[55,7]]},"165":{"position":[[2284,7]]},"290":{"position":[[962,7]]},"480":{"position":[[1620,7]]},"753":{"position":[[1602,8]]},"793":{"position":[[1625,8]]},"821":{"position":[[316,7],[1267,7]]},"870":{"position":[[1018,7]]},"909":{"position":[[40,7]]},"912":{"position":[[327,7]]},"919":{"position":[[2532,8]]},"925":{"position":[[40,7]]},"936":{"position":[[40,7]]},"952":{"position":[[40,7]]},"970":{"position":[[40,7]]},"1047":{"position":[[1017,6]]},"1055":{"position":[[1017,6]]},"1063":{"position":[[1017,6]]},"1076":{"position":[[247,8]]},"1289":{"position":[[1720,8]]},"1310":{"position":[[1041,8]]},"1453":{"position":[[1384,7]]}},"keywords":{}}],["utc",{"_index":1803,"title":{},"content":{"138":{"position":[[2260,4],[2688,3]]},"141":{"position":[[2216,4],[2278,3]]},"142":{"position":[[2320,4],[2765,3]]},"424":{"position":[[208,3]]},"448":{"position":[[970,3]]},"454":{"position":[[398,3]]},"460":{"position":[[212,3]]},"509":{"position":[[371,3]]},"556":{"position":[[1700,3],[2074,3]]},"611":{"position":[[797,3],[1064,3]]},"631":{"position":[[212,3],[351,3]]},"654":{"position":[[452,3]]},"670":{"position":[[508,3]]},"685":{"position":[[332,3]]},"700":{"position":[[160,3]]},"706":{"position":[[160,3]]},"720":{"position":[[683,3]]},"741":{"position":[[275,3]]},"754":{"position":[[503,4]]},"794":{"position":[[376,4]]},"809":{"position":[[376,4]]},"825":{"position":[[376,4]]},"859":{"position":[[503,3]]},"885":{"position":[[461,3]]},"891":{"position":[[164,3]]},"1015":{"position":[[274,3]]},"1028":{"position":[[83,3],[221,3]]},"1070":{"position":[[659,3]]},"1076":{"position":[[621,3]]},"1113":{"position":[[212,3]]},"1172":{"position":[[557,3],[646,3]]},"1222":{"position":[[557,3],[646,3]]},"1286":{"position":[[433,4]]},"1291":{"position":[[132,3],[153,3]]},"1301":{"position":[[433,4]]},"1305":{"position":[[132,3],[153,3]]},"1325":{"position":[[433,4]]},"1328":{"position":[[132,3],[153,3]]},"1452":{"position":[[3395,4]]}},"keywords":{}}],["utc_dat",{"_index":183,"title":{},"content":{"4":{"position":[[615,9]]},"1292":{"position":[[6147,8]]},"1306":{"position":[[6147,8]]},"1329":{"position":[[6147,8]]}},"keywords":{}}],["utc_date=2022",{"_index":134,"title":{},"content":{"3":{"position":[[789,13]]}},"keywords":{}}],["utc_hour",{"_index":487,"title":{},"content":{"16":{"position":[[1293,8]]}},"keywords":{}}],["utc_hourand",{"_index":184,"title":{},"content":{"4":{"position":[[629,11]]}},"keywords":{}}],["utc_tim",{"_index":6222,"title":{},"content":{"1292":{"position":[[6187,8]]},"1306":{"position":[[6187,8]]},"1329":{"position":[[6187,8]]}},"keywords":{}}],["utc_timestamp",{"_index":6225,"title":{},"content":{"1292":{"position":[[6227,13]]},"1306":{"position":[[6227,13]]},"1329":{"position":[[6227,13]]}},"keywords":{}}],["utf",{"_index":3603,"title":{},"content":{"418":{"position":[[220,3]]},"439":{"position":[[477,3]]},"546":{"position":[[957,3]]},"638":{"position":[[249,3]]},"1022":{"position":[[286,3]]},"1196":{"position":[[631,3]]}},"keywords":{}}],["util",{"_index":176,"title":{},"content":{"4":{"position":[[547,7]]},"99":{"position":[[135,7]]},"202":{"position":[[108,8]]},"478":{"position":[[89,7]]},"599":{"position":[[89,7]]},"976":{"position":[[125,8]]}},"keywords":{}}],["uuid",{"_index":996,"title":{},"content":{"67":{"position":[[134,5],[1213,4]]},"314":{"position":[[1181,5]]},"315":{"position":[[1100,6]]},"750":{"position":[[557,5]]},"766":{"position":[[557,5]]},"789":{"position":[[545,5]]},"807":{"position":[[545,5]]},"823":{"position":[[545,5]]},"1164":{"position":[[628,5],[690,4]]},"1172":{"position":[[847,5],[853,4]]},"1222":{"position":[[847,5],[853,4]]}},"keywords":{}}],["v",{"_index":6660,"title":{},"content":{"1467":{"position":[[2504,2],[2532,2],[2596,2],[2624,2],[2750,2],[2778,2],[2806,2]]}},"keywords":{}}],["v$databas",{"_index":4858,"title":{},"content":{"864":{"position":[[1163,10]]}},"keywords":{}}],["v$log",{"_index":4859,"title":{},"content":{"864":{"position":[[1257,5]]}},"keywords":{}}],["v/tn1a2oyu0qay1dowknee0i+/bvf8lms7vdjhmwrabtred/+iaqhf128qidaqab",{"_index":1244,"title":{},"content":{"83":{"position":[[1637,64]]},"371":{"position":[[556,64]]},"1139":{"position":[[443,64]]}},"keywords":{}}],["v0000000000",{"_index":5735,"title":{},"content":{"1146":{"position":[[515,11]]},"1173":{"position":[[527,11]]},"1215":{"position":[[515,11]]},"1223":{"position":[[527,11]]}},"keywords":{}}],["v1",{"_index":3270,"title":{},"content":{"355":{"position":[[32,3],[68,3]]},"1293":{"position":[[301,3]]},"1307":{"position":[[301,3]]},"1330":{"position":[[301,3]]},"1380":{"position":[[301,3]]},"1404":{"position":[[301,3]]},"1415":{"position":[[301,3]]}},"keywords":{}}],["v14",{"_index":5035,"title":{},"content":{"917":{"position":[[425,3]]},"919":{"position":[[959,3]]},"965":{"position":[[425,3]]}},"keywords":{}}],["v2",{"_index":2501,"title":{},"content":{"236":{"position":[[458,3]]},"1164":{"position":[[106,2]]},"1359":{"position":[[301,3]]}},"keywords":{}}],["v2:v3",{"_index":4784,"title":{},"content":{"843":{"position":[[99,5]]}},"keywords":{}}],["v3",{"_index":5849,"title":{},"content":{"1201":{"position":[[301,3]]}},"keywords":{}}],["v4",{"_index":6256,"title":{},"content":{"1317":{"position":[[301,3]]},"1341":{"position":[[301,3]]},"1352":{"position":[[301,3]]},"1432":{"position":[[301,3]]}},"keywords":{}}],["v4:dev",{"_index":4199,"title":{},"content":{"575":{"position":[[162,6]]}},"keywords":{}}],["vacuum",{"_index":6297,"title":{},"content":{"1370":{"position":[[1241,6]]}},"keywords":{}}],["val",{"_index":1613,"title":{},"content":{"114":{"position":[[335,3],[341,3],[357,4],[376,3],[382,3],[398,4],[417,3],[423,3],[439,4]]}},"keywords":{}}],["valid",{"_index":681,"title":{},"content":{"34":{"position":[[822,10]]},"35":{"position":[[212,9]]},"41":{"position":[[82,9],[202,9]]},"69":{"position":[[302,10]]},"70":{"position":[[90,8]]},"88":{"position":[[29,9]]},"106":{"position":[[423,8]]},"128":{"position":[[70,8]]},"129":{"position":[[555,8]]},"156":{"position":[[329,11]]},"158":{"position":[[178,11]]},"159":{"position":[[127,9],[724,10]]},"160":{"position":[[358,9]]},"188":{"position":[[181,5]]},"309":{"position":[[504,10],[580,5],[786,10],[3387,8]]},"323":{"position":[[1058,8]]},"332":{"position":[[549,5]]},"377":{"position":[[820,5],[1025,5]]},"485":{"position":[[212,5]]},"558":{"position":[[170,5],[246,8]]},"637":{"position":[[1064,5]]},"657":{"position":[[212,5]]},"673":{"position":[[212,5]]},"688":{"position":[[212,5]]},"757":{"position":[[614,5]]},"770":{"position":[[614,5]]},"797":{"position":[[614,5]]},"812":{"position":[[614,5]]},"828":{"position":[[614,5]]},"1123":{"position":[[638,5]]},"1162":{"position":[[672,5]]},"1268":{"position":[[480,10]]},"1285":{"position":[[626,5]]},"1292":{"position":[[6268,10]]},"1300":{"position":[[626,5]]},"1306":{"position":[[6268,10]]},"1324":{"position":[[626,5]]},"1329":{"position":[[6268,10]]},"1452":{"position":[[663,5],[3188,5],[4269,5]]},"1456":{"position":[[381,5]]}},"keywords":{}}],["validactionbreakdown",{"_index":3947,"title":{},"content":{"517":{"position":[[1081,21]]}},"keywords":{}}],["validbreakdown",{"_index":3949,"title":{},"content":{"517":{"position":[[1301,15]]}},"keywords":{}}],["validenum",{"_index":3952,"title":{},"content":{"517":{"position":[[1795,10]]}},"keywords":{}}],["valu",{"_index":464,"title":{"909":{"position":[[8,7]]},"925":{"position":[[8,7]]},"936":{"position":[[8,7]]},"952":{"position":[[8,7]]},"970":{"position":[[8,7]]}},"content":{"16":{"position":[[448,6]]},"17":{"position":[[399,6],[763,6]]},"21":{"position":[[709,7]]},"66":{"position":[[95,5]]},"76":{"position":[[543,6]]},"82":{"position":[[529,6],[1722,7],[1912,5],[3524,7],[3647,7],[3985,6],[4236,6]]},"94":{"position":[[1731,5],[2097,5]]},"98":{"position":[[634,6]]},"107":{"position":[[2990,5]]},"114":{"position":[[280,6]]},"115":{"position":[[458,5],[1246,5]]},"120":{"position":[[1283,5],[1649,5]]},"122":{"position":[[916,6],[1905,6]]},"132":{"position":[[512,6],[532,6],[552,6],[593,5],[672,6]]},"138":{"position":[[2665,5]]},"141":{"position":[[2255,5]]},"142":{"position":[[2742,5]]},"149":{"position":[[1309,6]]},"156":{"position":[[366,7]]},"159":{"position":[[555,6]]},"160":{"position":[[769,7],[809,6],[893,7]]},"165":{"position":[[1304,6]]},"166":{"position":[[49,6],[171,6],[258,6],[307,6]]},"191":{"position":[[487,5]]},"207":{"position":[[1204,6]]},"240":{"position":[[461,5],[2620,6],[3069,5]]},"254":{"position":[[1988,7],[3699,5],[3825,6]]},"278":{"position":[[1245,6]]},"280":{"position":[[2099,6]]},"307":{"position":[[2873,6]]},"309":{"position":[[730,7],[2624,6],[3369,6]]},"319":{"position":[[1587,5]]},"332":{"position":[[480,5]]},"343":{"position":[[1046,5]]},"350":{"position":[[166,6]]},"358":{"position":[[166,6]]},"369":{"position":[[166,6]]},"376":{"position":[[166,6]]},"386":{"position":[[166,6]]},"391":{"position":[[166,6]]},"396":{"position":[[166,6]]},"401":{"position":[[212,6]]},"402":{"position":[[829,6]]},"406":{"position":[[180,6]]},"407":{"position":[[166,6]]},"416":{"position":[[166,6]]},"419":{"position":[[1541,7],[2485,5],[2533,6]]},"423":{"position":[[166,6]]},"431":{"position":[[166,6]]},"435":{"position":[[29,6]]},"436":{"position":[[7,6],[653,5],[760,6],[1041,6]]},"437":{"position":[[166,6]]},"441":{"position":[[150,7],[1094,5],[1142,6]]},"447":{"position":[[166,6]]},"448":{"position":[[1175,6]]},"453":{"position":[[166,6]]},"459":{"position":[[166,6]]},"465":{"position":[[166,6]]},"472":{"position":[[166,6]]},"480":{"position":[[1161,5]]},"481":{"position":[[166,6]]},"487":{"position":[[315,5]]},"489":{"position":[[295,7],[362,6],[578,5],[637,5]]},"492":{"position":[[308,5],[334,5]]},"495":{"position":[[166,6]]},"501":{"position":[[122,6]]},"504":{"position":[[1170,7],[2114,5],[2162,6]]},"508":{"position":[[166,6]]},"516":{"position":[[166,6]]},"517":{"position":[[562,5],[2319,5]]},"525":{"position":[[166,6]]},"533":{"position":[[166,6]]},"534":{"position":[[1068,6]]},"539":{"position":[[166,6]]},"544":{"position":[[166,6]]},"547":{"position":[[1543,7],[2487,5],[2535,6]]},"555":{"position":[[163,6]]},"556":{"position":[[1555,5]]},"563":{"position":[[230,6]]},"572":{"position":[[166,6]]},"573":{"position":[[1171,5]]},"577":{"position":[[471,6]]},"583":{"position":[[156,6]]},"584":{"position":[[743,6],[1234,5]]},"588":{"position":[[466,6]]},"590":{"position":[[126,7]]},"592":{"position":[[163,6]]},"610":{"position":[[166,6]]},"618":{"position":[[166,6]]},"624":{"position":[[166,6]]},"625":{"position":[[80,5]]},"630":{"position":[[166,6]]},"636":{"position":[[166,6]]},"637":{"position":[[522,6],[536,5]]},"639":{"position":[[1168,7],[2112,5],[2160,6]]},"646":{"position":[[166,6]]},"653":{"position":[[166,6]]},"660":{"position":[[553,5],[757,5],[1028,5]]},"662":{"position":[[295,7],[362,6],[578,5],[637,5]]},"665":{"position":[[308,5],[334,5]]},"669":{"position":[[166,6]]},"670":{"position":[[287,5]]},"677":{"position":[[295,7],[362,6],[578,5],[637,5]]},"680":{"position":[[308,5],[334,5]]},"684":{"position":[[166,6]]},"692":{"position":[[295,7],[362,6],[578,5],[637,5]]},"695":{"position":[[308,5],[334,5]]},"699":{"position":[[166,6]]},"700":{"position":[[80,5]]},"705":{"position":[[166,6]]},"706":{"position":[[81,5]]},"711":{"position":[[166,6]]},"719":{"position":[[161,6]]},"727":{"position":[[166,6]]},"728":{"position":[[364,5],[482,5]]},"734":{"position":[[166,6]]},"740":{"position":[[166,6]]},"746":{"position":[[166,6]]},"750":{"position":[[218,5],[382,5]]},"756":{"position":[[166,6]]},"757":{"position":[[1273,5],[1362,6]]},"764":{"position":[[175,6]]},"766":{"position":[[218,5],[382,5]]},"767":{"position":[[2278,5]]},"769":{"position":[[166,6]]},"770":{"position":[[1273,5],[1362,6]]},"777":{"position":[[175,6]]},"779":{"position":[[123,7]]},"781":{"position":[[163,6]]},"785":{"position":[[955,6]]},"789":{"position":[[192,5],[252,5]]},"792":{"position":[[2270,5]]},"794":{"position":[[417,6],[495,6],[757,6]]},"796":{"position":[[167,6]]},"797":{"position":[[1273,5],[1362,6]]},"804":{"position":[[173,6]]},"807":{"position":[[192,5],[252,5]]},"809":{"position":[[417,6],[495,6],[757,6]]},"811":{"position":[[166,6]]},"812":{"position":[[1273,5],[1362,6]]},"819":{"position":[[173,6]]},"823":{"position":[[192,5],[252,5]]},"824":{"position":[[2392,5]]},"825":{"position":[[417,6],[495,6]]},"827":{"position":[[166,6]]},"828":{"position":[[1273,5],[1362,6]]},"835":{"position":[[173,6]]},"841":{"position":[[166,6]]},"847":{"position":[[161,6]]},"850":{"position":[[166,6]]},"858":{"position":[[166,6]]},"866":{"position":[[166,6]]},"867":{"position":[[1981,5],[2070,6]]},"870":{"position":[[962,5]]},"878":{"position":[[166,6]]},"884":{"position":[[166,6]]},"890":{"position":[[167,6]]},"896":{"position":[[166,6]]},"906":{"position":[[166,6]]},"909":{"position":[[102,6],[138,6],[272,6],[455,6],[478,5],[590,5],[741,6],[908,5],[933,5],[1266,6]]},"910":{"position":[[62,7],[266,6]]},"921":{"position":[[166,6]]},"922":{"position":[[2313,5],[3085,5],[3181,5],[3320,5]]},"925":{"position":[[102,6],[138,6],[272,6],[455,6],[478,5],[590,5],[741,6],[908,5],[933,5],[1266,6]]},"926":{"position":[[62,7],[266,6]]},"933":{"position":[[166,6]]},"936":{"position":[[102,6],[138,6],[272,6],[455,6],[478,5],[590,5],[741,6],[908,5],[933,5],[1266,6]]},"937":{"position":[[62,7],[266,6]]},"947":{"position":[[636,6],[683,6]]},"949":{"position":[[166,6]]},"952":{"position":[[102,6],[138,6],[272,6],[455,6],[478,5],[590,5],[741,6],[908,5],[933,5],[1266,6]]},"953":{"position":[[62,7],[266,6]]},"958":{"position":[[166,6]]},"959":{"position":[[91,5]]},"967":{"position":[[166,6]]},"970":{"position":[[102,6],[138,6],[272,6],[455,6],[478,5],[590,5],[741,6],[908,5],[933,5],[1266,6]]},"971":{"position":[[62,7],[266,6]]},"981":{"position":[[166,6]]},"982":{"position":[[89,5]]},"990":{"position":[[166,6]]},"991":{"position":[[181,6]]},"996":{"position":[[166,6]]},"1005":{"position":[[163,6]]},"1006":{"position":[[211,6],[491,6]]},"1009":{"position":[[181,6],[1408,6],[1422,5]]},"1010":{"position":[[386,6]]},"1014":{"position":[[166,6]]},"1021":{"position":[[166,6]]},"1023":{"position":[[1524,7],[2468,5],[2516,6]]},"1027":{"position":[[166,6]]},"1033":{"position":[[170,6]]},"1044":{"position":[[166,6]]},"1047":{"position":[[608,5]]},"1052":{"position":[[166,6]]},"1055":{"position":[[608,5]]},"1060":{"position":[[166,6]]},"1063":{"position":[[608,5]]},"1069":{"position":[[166,6]]},"1075":{"position":[[166,6]]},"1076":{"position":[[494,5]]},"1084":{"position":[[166,6]]},"1093":{"position":[[166,6]]},"1100":{"position":[[166,6]]},"1106":{"position":[[167,6]]},"1112":{"position":[[166,6]]},"1124":{"position":[[166,6]]},"1132":{"position":[[167,6]]},"1133":{"position":[[213,5],[1130,5]]},"1140":{"position":[[2569,5],[2618,6]]},"1144":{"position":[[1105,7]]},"1146":{"position":[[68,7],[397,6]]},"1173":{"position":[[68,7],[409,6]]},"1186":{"position":[[587,5]]},"1200":{"position":[[435,5]]},"1213":{"position":[[782,7]]},"1215":{"position":[[68,7],[397,6]]},"1223":{"position":[[68,7],[409,6]]},"1250":{"position":[[123,7]]},"1252":{"position":[[163,6]]},"1268":{"position":[[118,6]]},"1275":{"position":[[409,6]]},"1279":{"position":[[275,6]]},"1286":{"position":[[474,6],[552,6],[814,6],[1641,7]]},"1292":{"position":[[6304,5],[6337,6]]},"1301":{"position":[[474,6],[552,6],[1477,7]]},"1306":{"position":[[6304,5],[6337,6]]},"1316":{"position":[[2569,5],[2618,6]]},"1317":{"position":[[728,6]]},"1325":{"position":[[474,6],[552,6],[814,6],[1641,7]]},"1329":{"position":[[6304,5],[6337,6]]},"1340":{"position":[[2569,5],[2618,6]]},"1341":{"position":[[728,6]]},"1351":{"position":[[2569,5],[2618,6]]},"1352":{"position":[[728,6]]},"1356":{"position":[[815,5]]},"1358":{"position":[[925,6]]},"1370":{"position":[[1255,6]]},"1379":{"position":[[4704,5],[4757,6]]},"1391":{"position":[[304,6]]},"1394":{"position":[[995,6]]},"1403":{"position":[[4704,5],[4757,6]]},"1414":{"position":[[4704,5],[4757,6]]},"1423":{"position":[[729,6]]},"1429":{"position":[[429,5],[548,7],[696,5]]},"1431":{"position":[[2592,5],[2641,6]]},"1432":{"position":[[742,6]]},"1437":{"position":[[1290,5]]},"1452":{"position":[[2345,5],[2878,5],[3048,6],[3108,5],[3547,7],[3869,6],[4041,5]]},"1453":{"position":[[988,5],[1175,5]]},"1463":{"position":[[71,5]]},"1464":{"position":[[232,6],[534,6],[576,6],[697,6]]},"1465":{"position":[[527,6],[1011,6],[1244,6],[1294,6],[1396,6],[1512,6],[1562,6],[1663,6]]},"1466":{"position":[[56,7],[191,6],[512,6],[549,6],[645,6]]},"1467":{"position":[[534,6],[1049,6],[1091,6],[1194,6],[1350,6],[1424,6],[1556,6],[2205,6],[2476,6],[2568,6],[2722,6]]},"1476":{"position":[[90,6],[1122,5],[1330,5],[1586,6]]},"1477":{"position":[[707,7],[1012,6],[1743,6],[1856,6],[1936,6],[2087,6],[2256,6],[2357,6],[2508,6],[2938,7],[3234,6],[4089,6],[4206,6],[4286,6],[4445,6],[4624,6],[4727,6],[4886,6]]},"1479":{"position":[[481,7],[518,6],[592,6]]},"1480":{"position":[[989,5],[1355,5]]}},"keywords":{}}],["valuabl",{"_index":2616,"title":{},"content":{"241":{"position":[[335,8]]}},"keywords":{}}],["value"",{"_index":6713,"title":{},"content":{"1476":{"position":[[1474,11]]}},"keywords":{}}],["value).binari",{"_index":4701,"title":{},"content":{"789":{"position":[[133,13]]},"807":{"position":[[133,13]]},"823":{"position":[[133,13]]}},"keywords":{}}],["value.go",{"_index":3700,"title":{},"content":{"436":{"position":[[546,8]]}},"keywords":{}}],["value_deserializer=lambda",{"_index":2668,"title":{},"content":{"250":{"position":[[910,25]]}},"keywords":{}}],["value_of",{"_index":5638,"title":{},"content":{"1140":{"position":[[2650,8]]},"1316":{"position":[[2650,8]]},"1340":{"position":[[2650,8]]},"1351":{"position":[[2650,8]]},"1431":{"position":[[2673,8]]}},"keywords":{}}],["valuedatabas",{"_index":5118,"title":{},"content":{"947":{"position":[[914,14]]}},"keywords":{}}],["values"",{"_index":6643,"title":{},"content":{"1463":{"position":[[552,13]]},"1476":{"position":[[385,13]]}},"keywords":{}}],["var_pop",{"_index":5647,"title":{},"content":{"1140":{"position":[[2841,7]]},"1316":{"position":[[2841,7]]},"1340":{"position":[[2841,7]]},"1351":{"position":[[2841,7]]},"1379":{"position":[[4803,7]]},"1403":{"position":[[4803,7]]},"1414":{"position":[[4803,7]]},"1431":{"position":[[2864,7]]}},"keywords":{}}],["var_samp",{"_index":5648,"title":{},"content":{"1140":{"position":[[2882,8]]},"1316":{"position":[[2882,8]]},"1340":{"position":[[2882,8]]},"1351":{"position":[[2882,8]]},"1379":{"position":[[4855,8]]},"1403":{"position":[[4855,8]]},"1414":{"position":[[4855,8]]},"1431":{"position":[[2905,8]]}},"keywords":{}}],["varbinari",{"_index":5640,"title":{},"content":{"1140":{"position":[[2698,9]]},"1292":{"position":[[6382,9]]},"1306":{"position":[[6382,9]]},"1316":{"position":[[2698,9]]},"1329":{"position":[[6382,9]]},"1340":{"position":[[2698,9]]},"1351":{"position":[[2698,9]]},"1431":{"position":[[2721,9]]}},"keywords":{}}],["varchar",{"_index":2550,"title":{},"content":{"236":{"position":[[2246,7],[2439,7],[3031,7],[3224,7]]},"1140":{"position":[[2732,7]]},"1209":{"position":[[870,7]]},"1292":{"position":[[6431,7]]},"1306":{"position":[[6431,7]]},"1316":{"position":[[2732,7]]},"1329":{"position":[[6431,7]]},"1340":{"position":[[2732,7]]},"1351":{"position":[[2732,7]]},"1379":{"position":[[4917,7]]},"1403":{"position":[[4917,7]]},"1414":{"position":[[4917,7]]},"1431":{"position":[[2755,7]]}},"keywords":{}}],["varchar(1000",{"_index":4853,"title":{},"content":{"864":{"position":[[868,13]]}},"keywords":{}}],["varchar(4000",{"_index":4854,"title":{},"content":{"864":{"position":[[905,15]]}},"keywords":{}}],["varcharact",{"_index":6231,"title":{},"content":{"1292":{"position":[[6474,12]]},"1306":{"position":[[6474,12]]},"1329":{"position":[[6474,12]]}},"keywords":{}}],["vari",{"_index":267,"title":{},"content":{"8":{"position":[[497,4]]},"63":{"position":[[628,5]]},"112":{"position":[[634,5]]},"221":{"position":[[186,5]]},"595":{"position":[[1777,4]]},"1140":{"position":[[2809,7]]},"1292":{"position":[[6556,7]]},"1306":{"position":[[6556,7]]},"1316":{"position":[[2809,7]]},"1329":{"position":[[6556,7]]},"1340":{"position":[[2809,7]]},"1351":{"position":[[2809,7]]},"1379":{"position":[[5023,7]]},"1403":{"position":[[5023,7]]},"1414":{"position":[[5023,7]]},"1431":{"position":[[2832,7]]},"1473":{"position":[[183,4]]}},"keywords":{}}],["variabl",{"_index":4574,"title":{},"content":{"750":{"position":[[102,8],[1110,8]]},"754":{"position":[[35,8],[170,8]]},"757":{"position":[[479,9],[529,8],[703,8]]},"761":{"position":[[342,9]]},"766":{"position":[[102,8],[1110,8]]},"770":{"position":[[479,9],[529,8],[703,8]]},"774":{"position":[[342,9]]},"789":{"position":[[100,8],[1511,8]]},"794":{"position":[[33,8]]},"797":{"position":[[479,9],[529,8],[703,8]]},"801":{"position":[[348,9]]},"807":{"position":[[100,8],[1098,8]]},"809":{"position":[[33,8]]},"812":{"position":[[479,9],[529,8],[703,8]]},"816":{"position":[[348,9]]},"823":{"position":[[100,8],[1098,8]]},"825":{"position":[[33,8]]},"828":{"position":[[479,9],[529,8],[703,8]]},"832":{"position":[[348,9]]},"1032":{"position":[[160,8]]},"1267":{"position":[[519,9],[569,8]]},"1281":{"position":[[303,8]]},"1285":{"position":[[541,9],[591,8],[715,8]]},"1286":{"position":[[33,8]]},"1292":{"position":[[6518,9]]},"1295":{"position":[[303,8]]},"1300":{"position":[[541,9],[591,8],[715,8]]},"1301":{"position":[[33,8]]},"1306":{"position":[[6518,9]]},"1319":{"position":[[303,8]]},"1324":{"position":[[541,9],[591,8],[715,8]]},"1325":{"position":[[33,8]]},"1329":{"position":[[6518,9]]},"1379":{"position":[[4964,8]]},"1383":{"position":[[109,8]]},"1403":{"position":[[4964,8]]},"1414":{"position":[[4964,8]]}},"keywords":{}}],["variad",{"_index":5642,"title":{},"content":{"1140":{"position":[[2767,8]]},"1316":{"position":[[2767,8]]},"1340":{"position":[[2767,8]]},"1351":{"position":[[2767,8]]},"1431":{"position":[[2790,8]]}},"keywords":{}}],["variant",{"_index":450,"title":{},"content":{"16":{"position":[[94,7]]},"74":{"position":[[498,8]]},"89":{"position":[[188,7]]}},"keywords":{}}],["variat",{"_index":1394,"title":{},"content":{"97":{"position":[[513,10]]}},"keywords":{}}],["variationsproduct",{"_index":5371,"title":{},"content":{"1096":{"position":[[306,18]]}},"keywords":{}}],["varieti",{"_index":332,"title":{},"content":{"11":{"position":[[1349,7]]},"23":{"position":[[52,7]]},"33":{"position":[[414,7]]},"37":{"position":[[307,7]]},"102":{"position":[[570,7]]},"281":{"position":[[433,8]]},"306":{"position":[[370,7]]},"319":{"position":[[61,7]]},"321":{"position":[[295,7],[388,7]]},"326":{"position":[[779,7]]},"330":{"position":[[14,7]]},"419":{"position":[[53,7]]},"429":{"position":[[380,7]]},"440":{"position":[[69,7]]},"504":{"position":[[31,7]]},"547":{"position":[[54,7]]},"639":{"position":[[30,7]]},"1023":{"position":[[34,7]]},"1465":{"position":[[341,7]]}},"keywords":{}}],["variou",{"_index":215,"title":{},"content":{"6":{"position":[[331,7]]},"45":{"position":[[331,7]]},"46":{"position":[[120,7]]},"52":{"position":[[118,7]]},"63":{"position":[[653,7]]},"74":{"position":[[742,7]]},"111":{"position":[[452,7]]},"164":{"position":[[180,7]]},"180":{"position":[[674,7]]},"190":{"position":[[1439,7]]},"197":{"position":[[658,7]]},"216":{"position":[[556,7]]},"313":{"position":[[3385,7]]},"322":{"position":[[517,7]]},"1453":{"position":[[1346,7]]}},"keywords":{}}],["vault",{"_index":1152,"title":{},"content":{"82":{"position":[[646,6],[666,6]]}},"keywords":{}}],["vcpu",{"_index":6235,"title":{},"content":{"1292":{"position":[[6589,4]]},"1306":{"position":[[6589,4]]},"1329":{"position":[[6589,4]]}},"keywords":{}}],["vector",{"_index":3196,"title":{},"content":{"330":{"position":[[329,13]]},"1274":{"position":[[192,6]]},"1275":{"position":[[31,6]]},"1276":{"position":[[58,7],[268,7]]},"1277":{"position":[[1141,7]]},"1279":{"position":[[71,7],[121,7],[415,7]]}},"keywords":{}}],["vendor",{"_index":2197,"title":{},"content":{"198":{"position":[[108,8],[474,7]]}},"keywords":{}}],["verbos",{"_index":2898,"title":{},"content":{"281":{"position":[[2363,8]]},"1140":{"position":[[2917,7]]},"1316":{"position":[[2917,7]]},"1340":{"position":[[2917,7]]},"1351":{"position":[[2917,7]]},"1431":{"position":[[2940,7]]}},"keywords":{}}],["veri",{"_index":562,"title":{},"content":{"21":{"position":[[196,4]]},"41":{"position":[[466,4]]},"77":{"position":[[385,4]]},"101":{"position":[[219,4]]},"107":{"position":[[200,4]]},"110":{"position":[[1345,4],[1391,4]]},"113":{"position":[[973,4]]},"121":{"position":[[1928,4],[1994,4]]},"157":{"position":[[350,4]]},"180":{"position":[[758,4]]},"210":{"position":[[1854,4]]},"320":{"position":[[1391,4]]},"321":{"position":[[1239,4]]},"842":{"position":[[2791,4]]},"1442":{"position":[[98,4],[944,4],[1291,4]]}},"keywords":{}}],["verif",{"_index":751,"title":{"490":{"position":[[18,13]]},"663":{"position":[[18,13]]},"678":{"position":[[18,13]]},"693":{"position":[[18,13]]}},"content":{"43":{"position":[[234,12],[330,12]]},"490":{"position":[[55,13]]},"663":{"position":[[55,13]]},"678":{"position":[[55,13]]},"693":{"position":[[55,13]]}},"keywords":{}}],["verifi",{"_index":749,"title":{"129":{"position":[[0,7]]},"255":{"position":[[0,7]]},"316":{"position":[[0,7]]}},"content":{"43":{"position":[[128,6]]},"50":{"position":[[282,8]]},"68":{"position":[[275,6]]},"72":{"position":[[266,6]]},"88":{"position":[[539,8]]},"128":{"position":[[607,7]]},"129":{"position":[[1,6],[101,8],[226,6],[311,6],[455,7],[516,8],[980,7]]},"130":{"position":[[1,6],[50,6],[131,7],[181,6]]},"132":{"position":[[253,8],[323,6],[565,7],[586,6]]},"133":{"position":[[474,7],[525,7]]},"141":{"position":[[343,6]]},"210":{"position":[[3962,6]]},"237":{"position":[[3511,6]]},"238":{"position":[[735,6],[1400,6]]},"239":{"position":[[1543,6]]},"253":{"position":[[387,6]]},"255":{"position":[[32,6]]},"264":{"position":[[601,6]]},"295":{"position":[[1371,6],[1687,6]]},"299":{"position":[[286,6]]},"313":{"position":[[387,6]]},"316":{"position":[[32,6]]},"332":{"position":[[751,6]]},"543":{"position":[[138,6]]},"724":{"position":[[174,9]]},"907":{"position":[[1818,6]]},"923":{"position":[[1818,6]]},"942":{"position":[[573,6]]},"968":{"position":[[1818,6]]},"1183":{"position":[[1032,6],[1489,6]]},"1268":{"position":[[327,6],[402,8],[603,8]]},"1286":{"position":[[1835,6],[1915,6],[1993,6],[2127,9],[2240,6]]},"1301":{"position":[[1671,6],[1751,6],[1829,6],[1963,9],[2076,6]]},"1313":{"position":[[1568,6]]},"1325":{"position":[[1835,6],[1915,6],[1993,6],[2127,9],[2240,6]]},"1337":{"position":[[1568,6]]},"1384":{"position":[[698,6]]},"1437":{"position":[[1421,8]]},"1463":{"position":[[770,7]]},"1464":{"position":[[614,7]]},"1465":{"position":[[1310,7],[1577,7]]},"1466":{"position":[[565,7]]},"1467":{"position":[[1112,7],[1474,7],[2636,7]]},"1476":{"position":[[577,7],[1996,7]]},"1477":{"position":[[2007,7],[2428,7],[4359,7],[4800,7]]}},"keywords":{}}],["versa",{"_index":1320,"title":{},"content":{"92":{"position":[[207,6]]},"1442":{"position":[[421,6]]}},"keywords":{}}],["version",{"_index":370,"title":{"902":{"position":[[10,8]]},"914":{"position":[[10,8]]},"929":{"position":[[10,8]]},"962":{"position":[[10,8]]},"1039":{"position":[[10,8]]},"1049":{"position":[[10,8]]},"1057":{"position":[[10,8]]}},"content":{"12":{"position":[[477,8]]},"55":{"position":[[1087,8]]},"62":{"position":[[437,8],[487,9],[527,8],[620,8],[738,7],[802,7]]},"81":{"position":[[409,7],[1188,7]]},"82":{"position":[[2723,8],[4861,8]]},"84":{"position":[[1048,7]]},"88":{"position":[[599,7]]},"169":{"position":[[1113,7]]},"175":{"position":[[283,7]]},"239":{"position":[[1844,7]]},"307":{"position":[[3313,8]]},"309":{"position":[[3637,8]]},"324":{"position":[[271,7]]},"364":{"position":[[444,8]]},"458":{"position":[[101,8]]},"460":{"position":[[381,7],[446,7],[478,8]]},"595":{"position":[[689,7]]},"794":{"position":[[391,7]]},"809":{"position":[[391,7]]},"825":{"position":[[391,7]]},"869":{"position":[[81,8]]},"902":{"position":[[36,8]]},"914":{"position":[[36,8]]},"917":{"position":[[499,8]]},"918":{"position":[[1275,7]]},"919":{"position":[[1036,8]]},"929":{"position":[[36,8]]},"965":{"position":[[499,8]]},"1039":{"position":[[123,7]]},"1049":{"position":[[49,7]]},"1057":{"position":[[52,7]]},"1140":{"position":[[2956,10]]},"1197":{"position":[[78,7]]},"1201":{"position":[[194,8],[291,8]]},"1207":{"position":[[303,7]]},"1281":{"position":[[108,8]]},"1286":{"position":[[448,7]]},"1293":{"position":[[194,8],[291,8],[324,7]]},"1295":{"position":[[108,8]]},"1301":{"position":[[448,7]]},"1307":{"position":[[194,8],[291,8],[324,7]]},"1316":{"position":[[2956,10]]},"1317":{"position":[[194,8],[291,8],[323,7],[475,8],[533,8]]},"1319":{"position":[[108,8]]},"1325":{"position":[[448,7]]},"1330":{"position":[[194,8],[291,8],[324,7]]},"1340":{"position":[[2956,10]]},"1341":{"position":[[194,8],[291,8],[323,7],[475,8],[533,8]]},"1351":{"position":[[2956,10]]},"1352":{"position":[[194,8],[291,8],[323,7],[475,8],[533,8]]},"1357":{"position":[[153,7]]},"1359":{"position":[[194,8],[291,8]]},"1380":{"position":[[194,8],[291,8],[324,7]]},"1384":{"position":[[977,8]]},"1404":{"position":[[194,8],[291,8],[324,7]]},"1415":{"position":[[194,8],[291,8],[324,7]]},"1431":{"position":[[2979,10]]},"1432":{"position":[[194,8],[291,8],[323,7],[475,8],[533,8]]},"1440":{"position":[[1613,8]]},"1448":{"position":[[212,8],[640,7]]}},"keywords":{}}],["versionsscreensscreen",{"_index":4487,"title":{},"content":{"709":{"position":[[590,21]]}},"keywords":{}}],["via",{"_index":2020,"title":{"238":{"position":[[36,3]]},"845":{"position":[[26,3]]},"847":{"position":[[8,3]]}},"content":{"173":{"position":[[761,3]]},"209":{"position":[[1013,3]]},"236":{"position":[[1981,3]]},"237":{"position":[[2215,3]]},"247":{"position":[[28,3]]},"288":{"position":[[399,3]]},"295":{"position":[[1316,3],[1726,3]]},"319":{"position":[[1416,3]]},"366":{"position":[[1136,3]]},"373":{"position":[[150,3]]},"377":{"position":[[263,3],[320,3],[428,3],[479,3]]},"413":{"position":[[205,3]]},"428":{"position":[[80,3]]},"432":{"position":[[461,3]]},"486":{"position":[[278,3]]},"488":{"position":[[544,3]]},"543":{"position":[[87,3]]},"591":{"position":[[86,3]]},"658":{"position":[[278,3]]},"659":{"position":[[701,3]]},"674":{"position":[[278,3]]},"676":{"position":[[544,3]]},"689":{"position":[[278,3]]},"691":{"position":[[544,3]]},"753":{"position":[[321,3]]},"767":{"position":[[467,3]]},"784":{"position":[[101,3]]},"792":{"position":[[755,3]]},"793":{"position":[[290,3]]},"808":{"position":[[306,3]]},"824":{"position":[[547,3]]},"866":{"position":[[306,3]]},"878":{"position":[[316,3]]},"904":{"position":[[546,3]]},"918":{"position":[[755,3]]},"919":{"position":[[290,3]]},"931":{"position":[[310,3]]},"989":{"position":[[894,3],[993,3]]},"1004":{"position":[[977,3],[1076,3]]},"1043":{"position":[[290,3]]},"1051":{"position":[[546,3]]},"1059":{"position":[[310,3]]},"1125":{"position":[[687,3]]},"1136":{"position":[[289,3]]},"1138":{"position":[[1547,3]]},"1151":{"position":[[1488,3]]},"1154":{"position":[[485,3]]},"1162":{"position":[[1011,3]]},"1198":{"position":[[190,3]]},"1205":{"position":[[199,3]]},"1253":{"position":[[576,3]]},"1255":{"position":[[101,3]]},"1260":{"position":[[1036,3]]},"1268":{"position":[[379,3]]},"1286":{"position":[[2752,3]]},"1301":{"position":[[2588,3]]},"1303":{"position":[[310,3]]},"1313":{"position":[[1091,3]]},"1325":{"position":[[2752,3]]},"1337":{"position":[[1091,3]]},"1348":{"position":[[1091,3]]},"1373":{"position":[[528,3]]},"1374":{"position":[[528,3]]},"1376":{"position":[[667,3]]},"1397":{"position":[[307,3]]},"1398":{"position":[[306,3]]},"1400":{"position":[[667,3]]},"1409":{"position":[[290,3]]},"1411":{"position":[[667,3]]},"1427":{"position":[[851,3]]}},"keywords":{}}],["vice",{"_index":1319,"title":{},"content":{"92":{"position":[[202,4]]},"1442":{"position":[[416,4]]}},"keywords":{}}],["video",{"_index":2171,"title":{"195":{"position":[[0,5]]}},"content":{"381":{"position":[[178,5]]},"556":{"position":[[383,5]]},"715":{"position":[[126,6]]}},"keywords":{}}],["view",{"_index":897,"title":{"68":{"position":[[0,7]]},"178":{"position":[[32,4]]},"184":{"position":[[35,5]]}},"content":{"59":{"position":[[1,4]]},"61":{"position":[[1328,4]]},"68":{"position":[[38,4],[193,4]]},"81":{"position":[[1059,6],[2571,6]]},"100":{"position":[[119,6]]},"120":{"position":[[242,6]]},"121":{"position":[[51,6],[1140,6]]},"122":{"position":[[1146,6]]},"123":{"position":[[521,6]]},"135":{"position":[[355,8]]},"138":{"position":[[2550,4]]},"140":{"position":[[86,5]]},"141":{"position":[[258,4]]},"142":{"position":[[2628,4]]},"145":{"position":[[111,4]]},"146":{"position":[[1109,4]]},"147":{"position":[[28,4]]},"148":{"position":[[120,4]]},"149":{"position":[[1103,4],[1345,4]]},"151":{"position":[[118,4]]},"152":{"position":[[1093,4]]},"153":{"position":[[28,4]]},"154":{"position":[[28,4],[1278,4],[1792,4],[2136,4]]},"164":{"position":[[1270,5]]},"180":{"position":[[14,5],[199,5]]},"184":{"position":[[338,5]]},"192":{"position":[[1186,4]]},"206":{"position":[[1047,4]]},"217":{"position":[[1815,4]]},"230":{"position":[[927,4]]},"253":{"position":[[410,4]]},"268":{"position":[[542,6],[1560,4]]},"277":{"position":[[1356,4]]},"278":{"position":[[554,5]]},"295":{"position":[[1793,4]]},"313":{"position":[[410,4]]},"322":{"position":[[1839,4]]},"324":{"position":[[955,5]]},"325":{"position":[[139,5],[333,4]]},"326":{"position":[[210,5],[1786,4],[1891,5]]},"330":{"position":[[521,5]]},"339":{"position":[[208,4]]},"368":{"position":[[273,4]]},"395":{"position":[[291,4]]},"436":{"position":[[811,4]]},"483":{"position":[[430,5]]},"486":{"position":[[438,4]]},"556":{"position":[[389,5]]},"569":{"position":[[92,5]]},"570":{"position":[[5,4]]},"571":{"position":[[5,4],[279,5],[452,4],[851,5]]},"573":{"position":[[834,4],[874,4],[1369,5]]},"609":{"position":[[103,4]]},"617":{"position":[[847,4]]},"658":{"position":[[438,4]]},"674":{"position":[[438,4]]},"689":{"position":[[438,4]]},"755":{"position":[[273,4]]},"768":{"position":[[273,4]]},"795":{"position":[[271,4]]},"810":{"position":[[271,4]]},"821":{"position":[[590,4]]},"826":{"position":[[271,4]]},"840":{"position":[[1127,4],[1226,4],[1323,4],[1419,4]]},"849":{"position":[[2138,4],[2248,4]]},"905":{"position":[[276,4]]},"912":{"position":[[606,4],[943,4],[1335,5]]},"920":{"position":[[276,4]]},"932":{"position":[[276,4]]},"943":{"position":[[685,4],[851,4]]},"948":{"position":[[276,4]]},"966":{"position":[[276,4]]},"1067":{"position":[[104,4]]},"1137":{"position":[[220,6]]},"1140":{"position":[[2994,4]]},"1208":{"position":[[277,5]]},"1284":{"position":[[218,6]]},"1292":{"position":[[6612,4]]},"1299":{"position":[[218,6]]},"1306":{"position":[[6612,4]]},"1312":{"position":[[221,6]]},"1316":{"position":[[2994,4]]},"1323":{"position":[[218,6]]},"1329":{"position":[[6612,4]]},"1336":{"position":[[221,6]]},"1340":{"position":[[2994,4]]},"1347":{"position":[[221,6]]},"1351":{"position":[[2994,4]]},"1358":{"position":[[181,5]]},"1370":{"position":[[1272,4]]},"1375":{"position":[[222,6]]},"1379":{"position":[[5079,4]]},"1394":{"position":[[1010,4]]},"1399":{"position":[[222,6]]},"1403":{"position":[[5079,4]]},"1410":{"position":[[222,6]]},"1414":{"position":[[5079,4]]},"1426":{"position":[[224,6]]},"1431":{"position":[[3017,4]]},"1435":{"position":[[126,5],[195,4],[256,4]]},"1437":{"position":[[70,4],[131,5]]},"1448":{"position":[[1009,4]]},"1455":{"position":[[29,4]]},"1461":{"position":[[2826,6],[2895,5],[4639,4]]},"1470":{"position":[[9,4],[302,4],[420,4],[503,4]]},"1480":{"position":[[179,6]]}},"keywords":{}}],["view_id",{"_index":4157,"title":{},"content":{"573":{"position":[[825,8]]},"575":{"position":[[177,8]]}},"keywords":{}}],["view_index_metadata",{"_index":5823,"title":{},"content":{"1194":{"position":[[308,20]]}},"keywords":{}}],["viewer",{"_index":4152,"title":{},"content":{"571":{"position":[[641,6],[875,6]]},"582":{"position":[[254,6],[492,6]]},"617":{"position":[[565,6]]}},"keywords":{}}],["viewer"",{"_index":3812,"title":{},"content":{"475":{"position":[[202,12]]},"477":{"position":[[131,12],[1067,13]]}},"keywords":{}}],["violat",{"_index":1397,"title":{},"content":{"97":{"position":[[737,10]]},"102":{"position":[[617,10]]},"183":{"position":[[3348,7]]},"332":{"position":[[343,8]]},"1442":{"position":[[816,9]]}},"keywords":{}}],["violation"",{"_index":5759,"title":{},"content":{"1156":{"position":[[724,15]]}},"keywords":{}}],["virtual",{"_index":2462,"title":{},"content":{"222":{"position":[[86,7]]},"223":{"position":[[89,7]]},"224":{"position":[[88,7],[121,7],[706,7],[782,7],[850,7],[1052,7]]},"288":{"position":[[642,7]]},"299":{"position":[[557,7]]},"366":{"position":[[1084,7]]},"367":{"position":[[833,7]]},"1031":{"position":[[140,7]]},"1034":{"position":[[528,7]]},"1136":{"position":[[237,7],[387,7]]},"1292":{"position":[[6638,7]]},"1298":{"position":[[89,7]]},"1306":{"position":[[6638,7]]},"1322":{"position":[[86,7]]},"1329":{"position":[[6638,7]]},"1335":{"position":[[86,7]]},"1346":{"position":[[89,7]]},"1370":{"position":[[1280,7]]},"1382":{"position":[[204,7]]}},"keywords":{}}],["visibl",{"_index":1198,"title":{},"content":{"82":{"position":[[3617,10]]},"100":{"position":[[1020,7]]},"137":{"position":[[94,7]]},"138":{"position":[[120,8]]},"142":{"position":[[144,8]]},"207":{"position":[[1613,7]]},"263":{"position":[[25,7]]},"410":{"position":[[232,10]]},"1292":{"position":[[6678,7]]},"1306":{"position":[[6678,7]]},"1329":{"position":[[6678,7]]}},"keywords":{}}],["visit",{"_index":1971,"title":{},"content":{"168":{"position":[[31,5]]},"179":{"position":[[49,5]]},"188":{"position":[[63,5]]},"288":{"position":[[157,5]]},"299":{"position":[[157,5]]},"1007":{"position":[[163,5]]},"1008":{"position":[[990,5]]},"1237":{"position":[[126,5]]}},"keywords":{}}],["vm",{"_index":2469,"title":{},"content":{"223":{"position":[[105,5],[812,2],[892,3],[949,2]]},"224":{"position":[[104,4],[698,2],[836,2],[1076,3]]},"370":{"position":[[1798,3]]},"1138":{"position":[[1089,3]]},"1298":{"position":[[105,5],[812,2],[892,3],[949,2]]},"1346":{"position":[[105,5],[812,2],[892,3],[949,2]]}},"keywords":{}}],["vm'",{"_index":2475,"title":{},"content":{"224":{"position":[[956,4]]},"370":{"position":[[149,4]]},"1138":{"position":[[149,4]]}},"keywords":{}}],["volum",{"_index":1077,"title":{},"content":{"74":{"position":[[249,7]]},"124":{"position":[[910,6]]},"236":{"position":[[1029,8],[1477,8]]},"321":{"position":[[1049,7]]},"333":{"position":[[89,6]]},"480":{"position":[[1567,7]]},"975":{"position":[[307,7]]},"985":{"position":[[389,7]]},"1000":{"position":[[567,7]]}},"keywords":{}}],["votesissu",{"_index":4477,"title":{},"content":{"709":{"position":[[404,10]]}},"keywords":{}}],["votespost",{"_index":5450,"title":{},"content":{"1128":{"position":[[234,9]]}},"keywords":{}}],["votessatisfact",{"_index":5451,"title":{},"content":{"1128":{"position":[[244,17]]}},"keywords":{}}],["vpc",{"_index":3668,"title":{},"content":{"430":{"position":[[231,3]]},"767":{"position":[[136,3],[202,3]]},"792":{"position":[[456,3],[522,3]]},"824":{"position":[[248,3],[314,3]]},"904":{"position":[[248,3],[314,3]]},"918":{"position":[[456,3],[522,3]]},"1051":{"position":[[248,3],[314,3]]},"1289":{"position":[[230,3],[305,3]]},"1321":{"position":[[10,3],[85,3]]},"1334":{"position":[[10,3],[85,3]]},"1373":{"position":[[248,3],[314,3]]},"1374":{"position":[[248,3],[314,3]]}},"keywords":{}}],["vpcs)creat",{"_index":4847,"title":{},"content":{"862":{"position":[[107,11]]},"874":{"position":[[107,11]]}},"keywords":{}}],["vs",{"_index":613,"title":{"845":{"position":[[15,2]]}},"content":{"26":{"position":[[424,2],[484,2]]},"107":{"position":[[1842,2]]},"281":{"position":[[3291,2]]},"296":{"position":[[3599,2]]},"320":{"position":[[2421,2],[2468,2]]},"323":{"position":[[2039,2]]},"329":{"position":[[720,2]]},"1155":{"position":[[523,3]]}},"keywords":{}}],["vscode",{"_index":2902,"title":{},"content":{"281":{"position":[[2595,6]]}},"keywords":{}}],["w",{"_index":2535,"title":{},"content":{"236":{"position":[[1415,1]]}},"keywords":{}}],["w)ednesday",{"_index":6559,"title":{},"content":{"1452":{"position":[[4196,12]]}},"keywords":{}}],["wait",{"_index":1261,"title":{},"content":{"84":{"position":[[279,4]]},"165":{"position":[[1707,4]]},"240":{"position":[[3267,4],[4918,4]]},"387":{"position":[[1091,4]]},"410":{"position":[[129,4]]},"479":{"position":[[438,4]]},"616":{"position":[[435,4]]},"1292":{"position":[[6713,4]]},"1306":{"position":[[6713,4]]},"1329":{"position":[[6713,4]]},"1442":{"position":[[450,4]]}},"keywords":{}}],["waitfor",{"_index":6355,"title":{},"content":{"1379":{"position":[[5132,7]]},"1403":{"position":[[5132,7]]},"1414":{"position":[[5132,7]]}},"keywords":{}}],["wake",{"_index":6398,"title":{},"content":{"1392":{"position":[[61,6]]}},"keywords":{}}],["wal",{"_index":5011,"title":{"922":{"position":[[0,3]]}},"content":{"909":{"position":[[369,6],[528,4]]},"910":{"position":[[248,3]]},"917":{"position":[[67,3],[1819,3],[1914,3]]},"922":{"position":[[97,3],[349,3],[444,3],[548,3],[687,3],[846,3],[991,3],[1170,4],[1556,3],[2015,3],[2196,3]]},"925":{"position":[[369,6],[528,4]]},"926":{"position":[[248,3]]},"936":{"position":[[369,6],[528,4]]},"937":{"position":[[248,3]]},"952":{"position":[[369,6],[528,4]]},"953":{"position":[[248,3]]},"965":{"position":[[67,3],[1819,3],[1914,3]]},"970":{"position":[[369,6],[528,4]]},"971":{"position":[[248,3]]}},"keywords":{}}],["wal_level",{"_index":5038,"title":{},"content":{"917":{"position":[[1859,9]]},"942":{"position":[[52,9],[172,9],[679,10],[690,9]]},"965":{"position":[[1859,9]]}},"keywords":{}}],["wal_level=logicalus",{"_index":4994,"title":{},"content":{"903":{"position":[[92,21]]},"915":{"position":[[92,21]]},"930":{"position":[[92,21]]},"963":{"position":[[246,21]]}},"keywords":{}}],["walk",{"_index":2421,"title":{},"content":{"213":{"position":[[71,4]]},"216":{"position":[[527,4]]},"286":{"position":[[103,5]]},"289":{"position":[[583,4]]},"300":{"position":[[530,4]]}},"keywords":{}}],["wall",{"_index":2849,"title":{},"content":{"279":{"position":[[625,4],[759,4]]}},"keywords":{}}],["wallet",{"_index":4905,"title":{},"content":{"879":{"position":[[331,6],[813,7],[887,7],[931,6],[963,7]]}},"keywords":{}}],["want",{"_index":241,"title":{},"content":{"7":{"position":[[404,4]]},"64":{"position":[[494,4]]},"107":{"position":[[3037,4]]},"126":{"position":[[25,4]]},"136":{"position":[[179,4]]},"140":{"position":[[186,4]]},"141":{"position":[[446,5]]},"162":{"position":[[24,4]]},"174":{"position":[[495,4]]},"193":{"position":[[430,4]]},"196":{"position":[[756,4]]},"198":{"position":[[522,4]]},"212":{"position":[[203,4]]},"217":{"position":[[1318,4],[1447,4],[1672,4]]},"227":{"position":[[26,4]]},"228":{"position":[[389,4],[584,4]]},"230":{"position":[[513,4],[733,4],[770,4]]},"233":{"position":[[941,4]]},"237":{"position":[[1158,4]]},"238":{"position":[[212,4]]},"243":{"position":[[197,4]]},"263":{"position":[[1191,4]]},"264":{"position":[[137,4]]},"267":{"position":[[307,4]]},"275":{"position":[[159,4],[750,4],[799,4]]},"279":{"position":[[213,4],[544,4]]},"281":{"position":[[117,4]]},"295":{"position":[[872,4]]},"296":{"position":[[1158,4]]},"308":{"position":[[1104,4]]},"321":{"position":[[2383,4]]},"326":{"position":[[1220,4],[1809,4]]},"387":{"position":[[811,4]]},"430":{"position":[[203,4]]},"480":{"position":[[1453,4]]},"485":{"position":[[281,4]]},"489":{"position":[[413,4]]},"548":{"position":[[158,4]]},"573":{"position":[[672,4],[883,4]]},"584":{"position":[[594,4]]},"611":{"position":[[730,4]]},"657":{"position":[[281,4]]},"661":{"position":[[467,4]]},"662":{"position":[[413,4]]},"673":{"position":[[281,4]]},"677":{"position":[[413,4]]},"688":{"position":[[281,4]]},"692":{"position":[[413,4]]},"717":{"position":[[119,4]]},"720":{"position":[[365,4]]},"839":{"position":[[163,4]]},"840":{"position":[[1677,4]]},"848":{"position":[[163,4]]},"849":{"position":[[1713,4],[2718,4]]},"904":{"position":[[2199,4]]},"917":{"position":[[1708,4]]},"918":{"position":[[2491,4]]},"931":{"position":[[1861,4]]},"943":{"position":[[464,4]]},"945":{"position":[[353,4]]},"965":{"position":[[1708,4]]},"985":{"position":[[419,4],[691,4]]},"997":{"position":[[276,4]]},"1000":{"position":[[597,4],[1005,4]]},"1026":{"position":[[79,4]]},"1031":{"position":[[117,4]]},"1042":{"position":[[512,4]]},"1043":{"position":[[1176,4]]},"1047":{"position":[[214,4]]},"1051":{"position":[[1438,4]]},"1055":{"position":[[214,4]]},"1059":{"position":[[1231,4]]},"1063":{"position":[[214,4]]},"1092":{"position":[[499,4]]},"1105":{"position":[[68,4]]},"1118":{"position":[[844,4]]},"1179":{"position":[[829,4]]},"1183":{"position":[[792,4]]},"1232":{"position":[[263,4]]},"1247":{"position":[[854,4]]},"1388":{"position":[[266,4]]},"1449":{"position":[[451,4]]},"1452":{"position":[[2558,4]]},"1461":{"position":[[842,4],[2358,4],[2847,4],[2923,4]]}},"keywords":{}}],["warehous",{"_index":542,"title":{},"content":{"20":{"position":[[740,10],[872,10]]},"67":{"position":[[1639,9]]},"121":{"position":[[2067,11]]},"124":{"position":[[202,10]]},"164":{"position":[[1158,9]]},"189":{"position":[[525,10],[872,10],[1352,10]]},"191":{"position":[[1424,9],[1453,9],[1652,9],[1677,9]]},"192":{"position":[[1130,10]]},"193":{"position":[[304,10]]},"234":{"position":[[488,9]]},"240":{"position":[[1385,9],[1414,9],[1613,9],[1638,9],[2309,10],[3575,9]]},"242":{"position":[[636,9],[651,9]]},"288":{"position":[[650,10]]},"289":{"position":[[229,10]]},"291":{"position":[[105,10]]},"299":{"position":[[565,10]]},"300":{"position":[[208,10]]},"302":{"position":[[105,10]]},"309":{"position":[[823,9]]},"324":{"position":[[83,10],[527,10],[581,10],[776,10],[798,10],[1252,10]]},"326":{"position":[[1400,11],[1646,10],[1751,9]]},"330":{"position":[[546,10],[656,9]]},"344":{"position":[[221,10]]},"849":{"position":[[2585,9],[2959,9]]},"1031":{"position":[[148,9]]},"1032":{"position":[[30,9],[378,9],[1003,9],[1055,9],[1237,9]]},"1034":{"position":[[493,10],[504,9],[536,9],[583,9]]},"1036":{"position":[[29,9],[686,9],[765,9]]},"1186":{"position":[[32,9],[150,10],[182,10],[374,9]]},"1188":{"position":[[102,9],[266,9]]},"1383":{"position":[[192,10],[1372,9],[1401,9],[1600,9],[1625,9]]},"1386":{"position":[[509,10],[520,9],[547,9]]},"1387":{"position":[[202,10],[756,10]]},"1388":{"position":[[207,10],[397,9],[645,9],[667,9]]},"1392":{"position":[[75,10]]},"1461":{"position":[[3925,10]]}},"keywords":{}}],["warehouse'",{"_index":6393,"title":{},"content":{"1388":{"position":[[288,11]]}},"keywords":{}}],["warehouse/materi",{"_index":3049,"title":{},"content":{"307":{"position":[[1494,21],[2362,21]]},"309":{"position":[[2313,21],[2920,21]]}},"keywords":{}}],["warehouse_id",{"_index":3047,"title":{},"content":{"307":{"position":[[1365,13],[1440,13],[2233,13],[2308,13]]}},"keywords":{}}],["warehouse_nam",{"_index":2138,"title":{},"content":{"191":{"position":[[588,14],[1245,16]]},"240":{"position":[[549,14],[1206,16]]},"1032":{"position":[[340,14],[902,16]]},"1383":{"position":[[247,15],[536,14],[1193,16]]}},"keywords":{}}],["warehouse_s",{"_index":2151,"title":{},"content":{"191":{"position":[[1505,14]]},"240":{"position":[[1466,14]]},"1032":{"position":[[1107,14]]},"1383":{"position":[[1453,14]]}},"keywords":{}}],["warehouse_typ",{"_index":2153,"title":{},"content":{"191":{"position":[[1529,14]]},"240":{"position":[[1490,14]]},"1032":{"position":[[1131,14]]},"1383":{"position":[[1477,14]]}},"keywords":{}}],["warehousea",{"_index":5806,"title":{},"content":{"1185":{"position":[[95,10]]},"1382":{"position":[[212,10]]}},"keywords":{}}],["warn",{"_index":1551,"title":{"411":{"position":[[10,8]]}},"content":{"107":{"position":[[2849,7]]},"117":{"position":[[527,7]]},"309":{"position":[[182,7]]},"414":{"position":[[860,8]]},"491":{"position":[[161,8]]},"577":{"position":[[567,7]]},"664":{"position":[[182,8]]},"679":{"position":[[161,8]]},"694":{"position":[[161,8]]},"1292":{"position":[[6758,8]]},"1306":{"position":[[6758,8]]},"1329":{"position":[[6758,8]]},"1452":{"position":[[1568,7]]}},"keywords":{}}],["wasm",{"_index":1465,"title":{},"content":{"102":{"position":[[330,5]]}},"keywords":{}}],["wasm.typescript",{"_index":2904,"title":{},"content":{"281":{"position":[[2724,15]]}},"keywords":{}}],["watchersjira",{"_index":4478,"title":{},"content":{"709":{"position":[[415,12]]}},"keywords":{}}],["watermark",{"_index":2563,"title":{},"content":{"236":{"position":[[3394,9]]},"366":{"position":[[734,10],[756,10]]},"367":{"position":[[312,10],[656,9]]},"370":{"position":[[1312,10],[1360,9]]},"750":{"position":[[412,10],[434,10],[879,10]]},"752":{"position":[[59,10],[304,9],[451,10]]},"753":{"position":[[763,10],[960,9],[1107,10]]},"757":{"position":[[763,10],[816,9]]},"766":{"position":[[412,10],[434,10],[879,10]]},"767":{"position":[[1815,10],[1940,9]]},"770":{"position":[[763,10],[816,9]]},"789":{"position":[[400,10],[422,10],[724,9],[949,9],[1012,9],[1091,9],[1280,10]]},"791":{"position":[[12,10],[257,9],[404,10]]},"792":{"position":[[1755,10],[1880,9]]},"793":{"position":[[734,10],[931,9],[1078,10]]},"797":{"position":[[763,10],[816,9]]},"807":{"position":[[400,10],[422,10],[867,10]]},"808":{"position":[[752,10],[877,9],[1024,10]]},"812":{"position":[[763,10],[816,9]]},"823":{"position":[[400,10],[422,10],[867,10]]},"824":{"position":[[1877,10],[2002,9]]},"828":{"position":[[763,10],[816,9]]},"864":{"position":[[797,10],[895,9],[1031,10]]},"867":{"position":[[652,10],[700,9]]},"903":{"position":[[760,10],[782,10]]},"904":{"position":[[1416,10],[1756,9]]},"907":{"position":[[1095,10],[1143,9]]},"915":{"position":[[760,10],[782,10]]},"917":{"position":[[1130,10],[1265,9]]},"918":{"position":[[1708,10],[2048,9]]},"919":{"position":[[1656,10],[2103,9]]},"923":{"position":[[1095,10],[1143,9]]},"930":{"position":[[760,10],[782,10]]},"931":{"position":[[1073,10],[1418,9]]},"934":{"position":[[1095,10],[1143,9]]},"950":{"position":[[1095,10],[1143,9]]},"963":{"position":[[914,10],[936,10]]},"965":{"position":[[1130,10],[1265,9]]},"968":{"position":[[1095,10],[1143,9]]},"1040":{"position":[[476,10],[498,10],[898,10]]},"1042":{"position":[[637,10],[736,9],[879,10]]},"1043":{"position":[[1301,10],[1400,9],[1543,10]]},"1045":{"position":[[822,10],[870,9]]},"1050":{"position":[[476,10],[498,10],[898,10]]},"1051":{"position":[[1563,10],[1662,9],[1805,10]]},"1053":{"position":[[822,10],[870,9]]},"1058":{"position":[[476,10],[498,10],[898,10]]},"1059":{"position":[[1356,10],[1455,9],[1598,10]]},"1061":{"position":[[822,10],[870,9]]}},"keywords":{}}],["way",{"_index":161,"title":{},"content":{"4":{"position":[[275,3]]},"13":{"position":[[728,5],[1519,3]]},"24":{"position":[[246,4]]},"44":{"position":[[246,3]]},"61":{"position":[[390,3]]},"66":{"position":[[523,3]]},"105":{"position":[[1020,3]]},"113":{"position":[[121,5],[988,5]]},"132":{"position":[[108,3]]},"137":{"position":[[606,5]]},"144":{"position":[[17,4],[318,5]]},"160":{"position":[[400,4]]},"180":{"position":[[52,3],[397,3]]},"183":{"position":[[2614,4]]},"197":{"position":[[210,3]]},"204":{"position":[[815,3]]},"206":{"position":[[696,3]]},"208":{"position":[[808,5]]},"210":{"position":[[530,3],[2129,3]]},"233":{"position":[[604,3],[650,3]]},"237":{"position":[[2858,4]]},"308":{"position":[[23,3]]},"309":{"position":[[23,3],[417,4],[1224,3]]},"310":{"position":[[23,3]]},"322":{"position":[[26,4],[614,3]]},"324":{"position":[[1012,4]]},"379":{"position":[[748,4]]},"480":{"position":[[862,3]]},"513":{"position":[[15,4]]},"522":{"position":[[15,4]]},"530":{"position":[[15,4]]},"551":{"position":[[15,4]]},"569":{"position":[[15,4]]},"581":{"position":[[286,4]]},"602":{"position":[[585,3]]},"607":{"position":[[15,4]]},"614":{"position":[[15,4]]},"643":{"position":[[15,4]]},"650":{"position":[[15,4]]},"683":{"position":[[15,4]]},"716":{"position":[[15,4]]},"731":{"position":[[15,4]]},"754":{"position":[[134,4]]},"763":{"position":[[271,4]]},"776":{"position":[[271,4]]},"792":{"position":[[258,4]]},"793":{"position":[[72,4]]},"803":{"position":[[277,4]]},"808":{"position":[[72,4]]},"818":{"position":[[277,4]]},"824":{"position":[[72,4]]},"834":{"position":[[277,4]]},"855":{"position":[[198,5]]},"864":{"position":[[381,3]]},"876":{"position":[[381,3]]},"904":{"position":[[72,4]]},"911":{"position":[[399,3]]},"912":{"position":[[1396,3]]},"917":{"position":[[14,3]]},"918":{"position":[[258,4]]},"919":{"position":[[72,4]]},"922":{"position":[[1103,4],[1646,4]]},"927":{"position":[[399,3]]},"931":{"position":[[72,4]]},"938":{"position":[[399,3]]},"954":{"position":[[399,3]]},"965":{"position":[[14,3]]},"972":{"position":[[399,3]]},"985":{"position":[[488,4]]},"989":{"position":[[97,3]]},"1000":{"position":[[666,4]]},"1004":{"position":[[97,3]]},"1043":{"position":[[72,4]]},"1051":{"position":[[72,4]]},"1059":{"position":[[72,4]]},"1067":{"position":[[273,4]]},"1129":{"position":[[25,4]]},"1147":{"position":[[324,4]]},"1174":{"position":[[324,4]]},"1182":{"position":[[347,3]]},"1191":{"position":[[349,3]]},"1216":{"position":[[324,4]]},"1224":{"position":[[324,4]]},"1243":{"position":[[1039,4]]},"1262":{"position":[[349,3]]},"1283":{"position":[[83,4]]},"1289":{"position":[[83,4]]},"1303":{"position":[[72,4]]},"1320":{"position":[[83,4]]},"1333":{"position":[[83,4]]},"1344":{"position":[[83,4]]},"1373":{"position":[[72,4]]},"1374":{"position":[[72,4]]},"1389":{"position":[[348,3]]},"1397":{"position":[[72,4]]},"1398":{"position":[[72,4]]},"1409":{"position":[[72,4]]},"1438":{"position":[[302,3]]},"1439":{"position":[[372,4]]},"1448":{"position":[[356,3]]},"1461":{"position":[[709,3]]}},"keywords":{}}],["we'd",{"_index":4241,"title":{},"content":{"590":{"position":[[913,4],[1105,4]]}},"keywords":{}}],["we'll",{"_index":302,"title":{},"content":{"11":{"position":[[357,5]]},"174":{"position":[[252,5],[586,5]]},"216":{"position":[[521,5]]},"232":{"position":[[19,5]]},"280":{"position":[[1681,5]]},"289":{"position":[[577,5]]},"300":{"position":[[524,5]]},"1461":{"position":[[3986,5],[4021,5],[4124,5],[4194,5]]}},"keywords":{}}],["we'r",{"_index":1282,"title":{},"content":{"87":{"position":[[232,5]]},"183":{"position":[[2508,5]]}},"keywords":{}}],["we'v",{"_index":150,"title":{},"content":{"4":{"position":[[4,5]]},"280":{"position":[[1815,5]]}},"keywords":{}}],["weaker",{"_index":1631,"title":{},"content":{"115":{"position":[[1150,6]]},"595":{"position":[[537,6]]},"1439":{"position":[[307,6]]}},"keywords":{}}],["web",{"_index":354,"title":{"25":{"position":[[12,3]]},"30":{"position":[[0,3]]},"80":{"position":[[5,3]]},"134":{"position":[[0,3]]},"135":{"position":[[16,3]]},"137":{"position":[[15,3]]},"168":{"position":[[26,3]]},"258":{"position":[[23,3]]},"261":{"position":[[28,3]]},"339":{"position":[[27,3]]},"383":{"position":[[53,3]]},"445":{"position":[[56,3]]},"523":{"position":[[53,3]]},"531":{"position":[[53,3]]},"553":{"position":[[53,3]]},"570":{"position":[[53,3]]},"608":{"position":[[53,3]]},"615":{"position":[[53,3]]},"644":{"position":[[54,3]]},"651":{"position":[[54,3]]},"717":{"position":[[55,3]]},"732":{"position":[[56,3]]},"987":{"position":[[57,3]]},"1002":{"position":[[57,3]]},"1082":{"position":[[28,3]]},"1083":{"position":[[43,3]]},"1227":{"position":[[36,3]]},"1244":{"position":[[36,3]]},"1470":{"position":[[32,3]]}},"content":{"12":{"position":[[75,3]]},"13":{"position":[[55,3]]},"25":{"position":[[72,3]]},"29":{"position":[[70,3]]},"30":{"position":[[10,3],[240,3],[287,3]]},"31":{"position":[[166,3],[232,3]]},"33":{"position":[[267,3]]},"38":{"position":[[528,3]]},"53":{"position":[[601,3]]},"54":{"position":[[96,3]]},"55":{"position":[[767,3],[862,3]]},"58":{"position":[[908,3]]},"68":{"position":[[307,3],[344,3]]},"79":{"position":[[294,3]]},"80":{"position":[[10,3],[259,3]]},"81":{"position":[[770,3],[1201,3]]},"82":{"position":[[1063,3]]},"83":{"position":[[782,3]]},"84":{"position":[[1305,3]]},"119":{"position":[[132,3]]},"135":{"position":[[5,3],[181,3],[722,3],[873,3]]},"137":{"position":[[23,3],[544,3]]},"138":{"position":[[1600,3]]},"140":{"position":[[551,3]]},"141":{"position":[[1605,3]]},"142":{"position":[[1617,3]]},"154":{"position":[[1856,3]]},"162":{"position":[[982,3]]},"165":{"position":[[914,3]]},"168":{"position":[[41,3]]},"169":{"position":[[51,3],[1410,3],[1530,3]]},"176":{"position":[[143,3]]},"179":{"position":[[64,3]]},"182":{"position":[[42,3]]},"183":{"position":[[91,3]]},"184":{"position":[[166,3]]},"188":{"position":[[78,3]]},"190":{"position":[[16,3]]},"191":{"position":[[107,3],[2279,3]]},"207":{"position":[[804,3]]},"217":{"position":[[194,3]]},"225":{"position":[[603,3]]},"228":{"position":[[112,3]]},"240":{"position":[[242,3],[2389,3],[4671,3]]},"255":{"position":[[1246,3]]},"259":{"position":[[31,3],[1704,3]]},"263":{"position":[[45,3],[140,3],[534,3]]},"264":{"position":[[691,3],[925,3]]},"266":{"position":[[34,3],[87,3],[203,3]]},"267":{"position":[[99,3],[1978,3]]},"268":{"position":[[2035,3]]},"269":{"position":[[1497,3]]},"270":{"position":[[240,3],[419,3],[2113,3]]},"274":{"position":[[538,3],[709,3]]},"275":{"position":[[903,3]]},"284":{"position":[[49,3],[186,3],[294,3]]},"288":{"position":[[90,3],[167,3]]},"290":{"position":[[171,3]]},"299":{"position":[[90,3],[167,3]]},"301":{"position":[[124,3]]},"307":{"position":[[471,3],[519,3]]},"308":{"position":[[827,3]]},"309":{"position":[[1410,3],[1458,3]]},"316":{"position":[[1571,3]]},"323":{"position":[[1901,3]]},"329":{"position":[[1035,3]]},"339":{"position":[[56,3]]},"340":{"position":[[270,3],[390,3]]},"350":{"position":[[45,3]]},"358":{"position":[[45,3]]},"369":{"position":[[45,3]]},"376":{"position":[[45,3]]},"382":{"position":[[85,3]]},"384":{"position":[[132,3]]},"386":{"position":[[45,3]]},"387":{"position":[[118,3]]},"391":{"position":[[45,3]]},"396":{"position":[[45,3]]},"401":{"position":[[73,3]]},"407":{"position":[[45,3]]},"416":{"position":[[45,3]]},"423":{"position":[[45,3]]},"431":{"position":[[45,3]]},"437":{"position":[[45,3]]},"444":{"position":[[88,3]]},"447":{"position":[[45,3]]},"448":{"position":[[118,3]]},"453":{"position":[[45,3]]},"459":{"position":[[45,3]]},"465":{"position":[[45,3]]},"472":{"position":[[45,3]]},"481":{"position":[[45,3]]},"485":{"position":[[367,3]]},"486":{"position":[[359,3]]},"488":{"position":[[66,3]]},"495":{"position":[[45,3]]},"500":{"position":[[121,3]]},"501":{"position":[[56,3]]},"502":{"position":[[487,3]]},"508":{"position":[[45,3]]},"513":{"position":[[222,3]]},"514":{"position":[[27,3]]},"516":{"position":[[45,3]]},"522":{"position":[[223,3]]},"525":{"position":[[45,3]]},"530":{"position":[[223,3]]},"533":{"position":[[45,3]]},"534":{"position":[[118,3]]},"539":{"position":[[45,3]]},"544":{"position":[[45,3]]},"551":{"position":[[221,3]]},"555":{"position":[[45,3]]},"556":{"position":[[118,3]]},"563":{"position":[[74,3]]},"569":{"position":[[240,3]]},"572":{"position":[[45,3]]},"573":{"position":[[122,3],[431,3]]},"574":{"position":[[153,3]]},"581":{"position":[[386,3]]},"583":{"position":[[45,3]]},"584":{"position":[[132,3]]},"585":{"position":[[153,3]]},"592":{"position":[[45,3]]},"600":{"position":[[45,3]]},"607":{"position":[[239,3]]},"608":{"position":[[202,3]]},"610":{"position":[[45,3]]},"611":{"position":[[118,3]]},"614":{"position":[[223,3]]},"618":{"position":[[45,3]]},"624":{"position":[[45,3]]},"630":{"position":[[45,3]]},"636":{"position":[[45,3]]},"643":{"position":[[197,3]]},"646":{"position":[[45,3]]},"650":{"position":[[196,3]]},"653":{"position":[[45,3]]},"657":{"position":[[367,3]]},"658":{"position":[[359,3]]},"659":{"position":[[223,3]]},"669":{"position":[[45,3]]},"673":{"position":[[367,3]]},"674":{"position":[[359,3]]},"676":{"position":[[66,3]]},"683":{"position":[[64,3]]},"684":{"position":[[45,3]]},"685":{"position":[[103,3]]},"688":{"position":[[367,3]]},"689":{"position":[[359,3]]},"691":{"position":[[66,3]]},"699":{"position":[[45,3]]},"705":{"position":[[45,3]]},"711":{"position":[[45,3]]},"716":{"position":[[223,3]]},"719":{"position":[[45,3]]},"720":{"position":[[118,3]]},"727":{"position":[[45,3]]},"731":{"position":[[194,3]]},"734":{"position":[[45,3]]},"740":{"position":[[45,3]]},"746":{"position":[[45,3]]},"756":{"position":[[45,3]]},"757":{"position":[[2239,3]]},"769":{"position":[[45,3]]},"770":{"position":[[2239,3]]},"781":{"position":[[45,3]]},"796":{"position":[[45,3]]},"797":{"position":[[2246,3]]},"811":{"position":[[45,3]]},"812":{"position":[[2246,3]]},"827":{"position":[[45,3]]},"828":{"position":[[2246,3]]},"841":{"position":[[45,3]]},"849":{"position":[[624,4],[680,3],[2298,3]]},"850":{"position":[[45,3]]},"855":{"position":[[243,3],[316,3]]},"858":{"position":[[45,3]]},"859":{"position":[[118,3]]},"866":{"position":[[45,3]]},"878":{"position":[[45,3]]},"884":{"position":[[45,3]]},"890":{"position":[[45,3]]},"896":{"position":[[45,3]]},"906":{"position":[[45,3]]},"921":{"position":[[45,3]]},"933":{"position":[[45,3]]},"947":{"position":[[21,3]]},"949":{"position":[[45,3]]},"958":{"position":[[45,3]]},"967":{"position":[[45,3]]},"981":{"position":[[45,3]]},"985":{"position":[[632,3]]},"987":{"position":[[26,3]]},"989":{"position":[[997,3],[1010,6],[1239,3]]},"990":{"position":[[45,3]]},"991":{"position":[[118,3]]},"996":{"position":[[45,3]]},"1000":{"position":[[946,3]]},"1002":{"position":[[26,3]]},"1004":{"position":[[1080,3],[1093,6],[1322,3]]},"1005":{"position":[[45,3]]},"1009":{"position":[[118,3]]},"1014":{"position":[[45,3]]},"1021":{"position":[[45,3]]},"1027":{"position":[[45,3]]},"1033":{"position":[[49,3]]},"1044":{"position":[[45,3]]},"1052":{"position":[[45,3]]},"1060":{"position":[[45,3]]},"1067":{"position":[[335,3],[420,3]]},"1069":{"position":[[45,3]]},"1070":{"position":[[118,3]]},"1075":{"position":[[45,3]]},"1081":{"position":[[139,3]]},"1082":{"position":[[76,3]]},"1083":{"position":[[114,3]]},"1084":{"position":[[45,3]]},"1085":{"position":[[193,3]]},"1093":{"position":[[45,3]]},"1100":{"position":[[45,3]]},"1106":{"position":[[45,3]]},"1112":{"position":[[45,3]]},"1124":{"position":[[45,3]]},"1132":{"position":[[45,3]]},"1200":{"position":[[556,3]]},"1226":{"position":[[193,3]]},"1227":{"position":[[75,3]]},"1230":{"position":[[293,3]]},"1237":{"position":[[57,3]]},"1243":{"position":[[1143,3],[1264,3]]},"1247":{"position":[[109,3],[464,3]]},"1252":{"position":[[45,3]]},"1282":{"position":[[236,3]]},"1288":{"position":[[210,3]]},"1310":{"position":[[251,3]]},"1362":{"position":[[54,3]]},"1446":{"position":[[13,3]]},"1461":{"position":[[4555,3],[4770,3],[5186,3],[5462,3]]},"1469":{"position":[[48,3]]},"1470":{"position":[[79,3],[278,3]]},"1479":{"position":[[13,3]]}},"keywords":{}}],["webhook",{"_index":1622,"title":{"484":{"position":[[20,9]]},"487":{"position":[[20,8]]},"488":{"position":[[0,7]]},"490":{"position":[[0,7]]},"656":{"position":[[12,9]]},"659":{"position":[[0,7]]},"660":{"position":[[0,7]]},"663":{"position":[[0,7]]},"672":{"position":[[21,9]]},"675":{"position":[[21,8]]},"676":{"position":[[0,7]]},"678":{"position":[[0,7]]},"687":{"position":[[17,9]]},"690":{"position":[[17,8]]},"691":{"position":[[0,7]]},"693":{"position":[[0,7]]},"1235":{"position":[[5,7]]}},"content":{"114":{"position":[[863,9]]},"125":{"position":[[297,8]]},"363":{"position":[[1412,9]]},"485":{"position":[[319,7]]},"487":{"position":[[167,7],[214,7],[260,7],[342,7],[367,7],[414,7],[484,7],[673,7]]},"488":{"position":[[239,9],[290,7],[431,7],[995,7],[1026,8]]},"490":{"position":[[37,7]]},"491":{"position":[[143,7]]},"657":{"position":[[319,7],[513,7]]},"659":{"position":[[16,7],[104,7],[396,9],[447,7],[588,7],[1152,7],[1183,8]]},"660":{"position":[[1,7],[74,8],[241,9],[374,7],[440,7],[491,7],[867,7],[926,7],[975,7],[1097,7],[1126,7],[1154,7]]},"661":{"position":[[6,8],[203,7],[240,7],[363,7],[437,8]]},"663":{"position":[[37,7]]},"664":{"position":[[164,7]]},"673":{"position":[[319,7]]},"675":{"position":[[59,8],[169,7],[217,7],[304,7]]},"676":{"position":[[239,9],[290,7],[431,7],[995,7],[1026,8]]},"678":{"position":[[37,7]]},"679":{"position":[[143,7]]},"688":{"position":[[319,7]]},"690":{"position":[[90,9],[120,7],[228,7],[352,7]]},"691":{"position":[[239,9],[290,7],[431,7],[995,7],[1026,8]]},"693":{"position":[[37,7]]},"694":{"position":[[143,7]]},"1237":{"position":[[5,8]]},"1440":{"position":[[29,9]]}},"keywords":{}}],["webhook.json",{"_index":3869,"title":{},"content":{"488":{"position":[[742,13],[840,13]]},"659":{"position":[[899,13],[997,13]]},"676":{"position":[[742,13],[840,13]]},"691":{"position":[[742,13],[840,13]]}},"keywords":{}}],["webhook/estuari",{"_index":5906,"title":{},"content":{"1241":{"position":[[80,15]]}},"keywords":{}}],["webhook:dev",{"_index":6673,"title":{},"content":{"1472":{"position":[[710,11]]}},"keywords":{}}],["webhook:v1",{"_index":5907,"title":{},"content":{"1241":{"position":[[152,10]]}},"keywords":{}}],["websit",{"_index":4143,"title":{},"content":{"568":{"position":[[76,7]]},"611":{"position":[[949,7],[977,7]]},"1461":{"position":[[4585,8]]}},"keywords":{}}],["website_overview",{"_index":4206,"title":{},"content":{"575":{"position":[[1093,16]]},"586":{"position":[[912,16]]}},"keywords":{}}],["websocket",{"_index":3435,"title":{},"content":{"373":{"position":[[130,9],[649,9]]},"377":{"position":[[436,9]]}},"keywords":{}}],["webstuff",{"_index":6633,"title":{},"content":{"1461":{"position":[[5637,9]]}},"keywords":{}}],["webstuff.flow.yaml",{"_index":6632,"title":{},"content":{"1461":{"position":[[5432,18],[5606,18]]}},"keywords":{}}],["wednesday",{"_index":6533,"title":{},"content":{"1452":{"position":[[1418,10]]}},"keywords":{}}],["week",{"_index":1802,"title":{},"content":{"138":{"position":[[2180,5],[2191,5]]},"141":{"position":[[2136,5],[2147,5]]},"142":{"position":[[2240,5],[2251,5]]},"331":{"position":[[96,6]]},"1209":{"position":[[888,4]]},"1292":{"position":[[6799,4]]},"1306":{"position":[[6799,4]]},"1329":{"position":[[6799,4]]},"1452":{"position":[[166,5],[478,4],[1206,4],[3709,5],[3753,4],[4141,4],[4520,4]]}},"keywords":{}}],["weekend",{"_index":3897,"title":{},"content":{"496":{"position":[[331,8],[347,9],[381,9]]}},"keywords":{}}],["weekli",{"_index":3730,"title":{},"content":{"443":{"position":[[98,7],[188,7],[266,7],[378,7],[459,7]]},"568":{"position":[[146,6],[169,6]]},"580":{"position":[[76,6]]}},"keywords":{}}],["weekly_active_us",{"_index":4207,"title":{},"content":{"575":{"position":[[1189,19]]},"586":{"position":[[1008,19]]}},"keywords":{}}],["weight_str",{"_index":6248,"title":{},"content":{"1292":{"position":[[6837,13]]},"1306":{"position":[[6837,13]]},"1329":{"position":[[6837,13]]}},"keywords":{}}],["welcom",{"_index":1766,"title":{},"content":{"137":{"position":[[48,7]]}},"keywords":{}}],["well",{"_index":221,"title":{},"content":{"6":{"position":[[579,4]]},"21":{"position":[[230,4],[371,4]]},"53":{"position":[[119,4]]},"68":{"position":[[516,4]]},"88":{"position":[[469,4]]},"99":{"position":[[280,4],[423,4]]},"102":{"position":[[298,4]]},"107":{"position":[[1857,4]]},"114":{"position":[[766,4]]},"115":{"position":[[885,4]]},"156":{"position":[[174,4],[511,4]]},"165":{"position":[[1618,5]]},"199":{"position":[[340,5]]},"209":{"position":[[189,4]]},"233":{"position":[[681,4]]},"241":{"position":[[485,4]]},"254":{"position":[[1910,4]]},"281":{"position":[[2687,4]]},"296":{"position":[[3614,4],[8030,5]]},"315":{"position":[[209,5]]},"324":{"position":[[595,4]]},"373":{"position":[[885,4]]},"429":{"position":[[1079,4]]},"480":{"position":[[644,4]]},"752":{"position":[[617,5]]},"753":{"position":[[1273,5]]},"788":{"position":[[60,4]]},"791":{"position":[[570,5]]},"793":{"position":[[1244,5]]},"808":{"position":[[1190,5]]},"869":{"position":[[192,4],[1238,4]]},"914":{"position":[[89,4]]},"1000":{"position":[[429,4]]},"1031":{"position":[[443,4]]},"1138":{"position":[[659,4]]},"1151":{"position":[[644,4]]},"1155":{"position":[[408,4]]},"1179":{"position":[[471,4]]},"1260":{"position":[[358,4]]},"1313":{"position":[[469,4]]},"1337":{"position":[[469,4]]},"1348":{"position":[[469,4]]},"1386":{"position":[[442,4]]},"1427":{"position":[[410,4]]},"1439":{"position":[[1427,4]]},"1461":{"position":[[103,4],[351,4]]}},"keywords":{}}],["went",{"_index":2263,"title":{},"content":{"209":{"position":[[184,4]]},"315":{"position":[[204,4]]}},"keywords":{}}],["we’ll",{"_index":2219,"title":{},"content":{"203":{"position":[[569,5]]},"204":{"position":[[192,5],[857,5]]},"236":{"position":[[65,5]]},"240":{"position":[[31,5]]},"1459":{"position":[[1498,5]]}},"keywords":{}}],["we’r",{"_index":2966,"title":{},"content":{"295":{"position":[[668,5]]}},"keywords":{}}],["what'",{"_index":832,"title":{"176":{"position":[[0,6]]},"219":{"position":[[0,6]]},"292":{"position":[[0,6]]},"303":{"position":[[0,6]]}},"content":{"56":{"position":[[307,6]]},"219":{"position":[[154,6]]}},"keywords":{}}],["whatev",{"_index":1134,"title":{},"content":{"81":{"position":[[2299,8]]},"216":{"position":[[470,8]]},"278":{"position":[[524,8]]},"483":{"position":[[345,8]]},"488":{"position":[[185,8]]},"659":{"position":[[342,8]]},"676":{"position":[[185,8]]},"691":{"position":[[185,8]]},"760":{"position":[[647,8],[907,8]]},"773":{"position":[[647,8],[907,8]]},"800":{"position":[[647,8],[907,8]]},"815":{"position":[[647,8],[907,8]]},"831":{"position":[[647,8],[907,8]]},"1383":{"position":[[427,8]]}},"keywords":{}}],["whatwg",{"_index":3623,"title":{},"content":{"419":{"position":[[1881,6]]},"441":{"position":[[490,6]]},"504":{"position":[[1510,6]]},"547":{"position":[[1883,6]]},"639":{"position":[[1508,6]]},"1023":{"position":[[1864,6]]}},"keywords":{}}],["what’",{"_index":1877,"title":{},"content":{"159":{"position":[[606,6]]}},"keywords":{}}],["whenev",{"_index":384,"title":{},"content":{"13":{"position":[[365,8]]},"20":{"position":[[51,8],[395,8]]},"64":{"position":[[577,8]]},"165":{"position":[[1518,8]]},"489":{"position":[[888,8]]},"662":{"position":[[888,8]]},"677":{"position":[[888,8]]},"692":{"position":[[888,8]]},"1140":{"position":[[3064,8]]},"1316":{"position":[[3064,8]]},"1340":{"position":[[3064,8]]},"1351":{"position":[[3064,8]]},"1379":{"position":[[5239,8]]},"1394":{"position":[[1038,8]]},"1403":{"position":[[5239,8]]},"1414":{"position":[[5239,8]]},"1431":{"position":[[3087,8]]}},"keywords":{}}],["wherea",{"_index":6546,"title":{},"content":{"1452":{"position":[[3346,7]]}},"keywords":{}}],["whether",{"_index":816,"title":{},"content":{"55":{"position":[[331,7]]},"68":{"position":[[1458,7]]},"88":{"position":[[649,7]]},"110":{"position":[[994,7]]},"115":{"position":[[1268,7]]},"122":{"position":[[1442,7]]},"126":{"position":[[517,7]]},"158":{"position":[[823,7]]},"159":{"position":[[994,7]]},"174":{"position":[[483,7]]},"230":{"position":[[963,7]]},"291":{"position":[[1200,7]]},"302":{"position":[[1146,7]]},"309":{"position":[[436,7],[1240,7]]},"325":{"position":[[371,7]]},"374":{"position":[[131,7]]},"483":{"position":[[158,7]]},"595":{"position":[[69,7]]},"842":{"position":[[3556,7],[3696,7]]},"885":{"position":[[291,7]]},"991":{"position":[[704,7]]},"1009":{"position":[[767,7]]},"1015":{"position":[[89,7]]},"1081":{"position":[[35,7],[111,7]]},"1179":{"position":[[1275,7]]},"1188":{"position":[[895,7]]},"1196":{"position":[[1035,7]]},"1386":{"position":[[1289,7]]},"1464":{"position":[[951,7]]},"1471":{"position":[[493,7]]},"1474":{"position":[[272,7]]},"1477":{"position":[[2946,7]]}},"keywords":{}}],["whichev",{"_index":3176,"title":{},"content":{"326":{"position":[[1167,9]]},"436":{"position":[[171,9]]}},"keywords":{}}],["white",{"_index":1791,"title":{},"content":{"138":{"position":[[1563,5]]},"141":{"position":[[1146,5],[1568,5]]},"142":{"position":[[1580,5]]}},"keywords":{}}],["whole",{"_index":2035,"title":{},"content":{"174":{"position":[[539,5]]},"309":{"position":[[3487,5]]},"414":{"position":[[82,5]]}},"keywords":{}}],["whose",{"_index":2487,"title":{},"content":{"230":{"position":[[489,5]]},"237":{"position":[[1141,5],[1992,5]]},"301":{"position":[[1062,5]]},"417":{"position":[[1231,5]]},"438":{"position":[[1747,5]]},"502":{"position":[[269,5]]},"545":{"position":[[840,5]]},"584":{"position":[[898,5]]},"922":{"position":[[1047,5]]},"1021":{"position":[[937,5]]},"1435":{"position":[[717,5]]}},"keywords":{}}],["wide",{"_index":694,"title":{},"content":{"37":{"position":[[302,4]]},"102":{"position":[[565,4]]},"429":{"position":[[375,4]]},"609":{"position":[[374,4]]}},"keywords":{}}],["wider",{"_index":3611,"title":{},"content":{"419":{"position":[[47,5]]},"440":{"position":[[63,5]]},"547":{"position":[[48,5]]},"1023":{"position":[[28,5]]},"1465":{"position":[[335,5]]}},"keywords":{}}],["widget",{"_index":5108,"title":{},"content":{"947":{"position":[[321,6]]}},"keywords":{}}],["width_bucket",{"_index":5656,"title":{},"content":{"1140":{"position":[[3150,12]]},"1316":{"position":[[3150,12]]},"1340":{"position":[[3150,12]]},"1351":{"position":[[3150,12]]},"1379":{"position":[[5391,12]]},"1403":{"position":[[5391,12]]},"1414":{"position":[[5391,12]]},"1431":{"position":[[3173,12]]}},"keywords":{}}],["wikimedia",{"_index":2051,"title":{},"content":{"180":{"position":[[526,9]]}},"keywords":{}}],["wikipedia",{"_index":2050,"title":{"181":{"position":[[12,9]]}},"content":{"180":{"position":[[497,10]]},"181":{"position":[[164,9]]},"182":{"position":[[212,9]]},"183":{"position":[[211,9],[1052,10],[1629,9],[3316,9]]},"252":{"position":[[176,9]]},"253":{"position":[[348,9]]},"255":{"position":[[1040,9]]},"312":{"position":[[180,9]]},"313":{"position":[[348,9],[3393,9],[3621,9]]},"316":{"position":[[1365,9]]}},"keywords":{}}],["wikipedia_data_by_us",{"_index":2092,"title":{},"content":{"184":{"position":[[899,23]]}},"keywords":{}}],["wikipedia_raw",{"_index":2091,"title":{},"content":{"184":{"position":[[736,14]]}},"keywords":{}}],["wildcard",{"_index":1776,"title":{},"content":{"138":{"position":[[946,9]]},"142":{"position":[[925,9]]},"1194":{"position":[[393,8]]}},"keywords":{}}],["will",{"_index":5031,"title":{},"content":{"912":{"position":[[1617,7]]}},"keywords":{}}],["william",{"_index":1062,"title":{},"content":{"71":{"position":[[742,7]]}},"keywords":{}}],["win",{"_index":2377,"title":{},"content":{"210":{"position":[[3206,5]]},"1438":{"position":[[629,5],[723,4],[758,4]]}},"keywords":{}}],["window",{"_index":721,"title":{"279":{"position":[[8,7]]},"1077":{"position":[[38,7]]}},"content":{"40":{"position":[[346,9]]},"58":{"position":[[57,8],[74,7],[124,8]]},"74":{"position":[[186,7]]},"110":{"position":[[1445,7]]},"169":{"position":[[1054,8],[1067,7],[1518,7]]},"191":{"position":[[130,6]]},"210":{"position":[[417,7],[1613,6]]},"218":{"position":[[1711,6]]},"224":{"position":[[828,7]]},"228":{"position":[[977,6]]},"238":{"position":[[552,6]]},"240":{"position":[[277,6]]},"259":{"position":[[1179,6],[2760,6]]},"267":{"position":[[226,6]]},"279":{"position":[[84,6],[460,6],[514,8],[936,6],[1092,6],[1159,8],[1180,7]]},"284":{"position":[[659,6]]},"291":{"position":[[1644,6]]},"295":{"position":[[1337,6]]},"296":{"position":[[6977,6]]},"302":{"position":[[1553,6]]},"319":{"position":[[1343,9],[1506,6]]},"331":{"position":[[187,9]]},"340":{"position":[[378,7]]},"517":{"position":[[2149,6],[3144,6],[3167,6]]},"556":{"position":[[275,6],[306,6]]},"573":{"position":[[1053,6]]},"578":{"position":[[209,6]]},"747":{"position":[[213,6],[375,6],[1169,6],[1184,6],[1283,6]]},"1015":{"position":[[165,6]]},"1076":{"position":[[380,6]]},"1077":{"position":[[285,7],[437,7],[556,6],[695,6]]},"1113":{"position":[[358,6]]},"1140":{"position":[[3198,6]]},"1292":{"position":[[6279,6]]},"1306":{"position":[[6279,6]]},"1316":{"position":[[3198,6]]},"1329":{"position":[[6279,6]]},"1340":{"position":[[3198,6]]},"1351":{"position":[[3198,6]]},"1370":{"position":[[1323,6]]},"1379":{"position":[[3805,6]]},"1403":{"position":[[3805,6]]},"1414":{"position":[[3805,6]]},"1431":{"position":[[3221,6]]},"1440":{"position":[[1127,8]]},"1452":{"position":[[628,7],[3142,6]]},"1470":{"position":[[157,6],[222,7]]}},"keywords":{}}],["window_in_day",{"_index":4160,"title":{},"content":{"573":{"position":[[1037,15]]},"575":{"position":[[284,15]]},"577":{"position":[[427,14]]},"584":{"position":[[940,15]]},"586":{"position":[[306,15]]},"588":{"position":[[422,14]]}},"keywords":{}}],["windows)cr",{"_index":3632,"title":{},"content":{"419":{"position":[[2566,11]]},"441":{"position":[[1175,11]]},"504":{"position":[[2195,11]]},"547":{"position":[[2568,11]]},"639":{"position":[[2193,11]]},"1023":{"position":[[2549,11]]}},"keywords":{}}],["wish",{"_index":1088,"title":{},"content":{"74":{"position":[[919,4]]},"160":{"position":[[57,5]]},"202":{"position":[[362,4],[385,4]]},"237":{"position":[[2780,4]]},"242":{"position":[[944,4]]},"254":{"position":[[1726,4]]},"314":{"position":[[1543,4]]},"366":{"position":[[309,4]]},"383":{"position":[[89,4]]},"385":{"position":[[652,4]]},"479":{"position":[[567,4],[653,4]]},"480":{"position":[[1672,4]]},"903":{"position":[[335,4]]},"915":{"position":[[335,4]]},"930":{"position":[[335,4]]},"963":{"position":[[489,4]]}},"keywords":{}}],["with"",{"_index":5165,"title":{},"content":{"1009":{"position":[[1174,11],[1197,11],[1268,11],[1295,11]]},"1010":{"position":[[375,10]]}},"keywords":{}}],["withclust",{"_index":5796,"title":{},"content":{"1183":{"position":[[34,14]]}},"keywords":{}}],["withflush",{"_index":6506,"title":{},"content":{"1443":{"position":[[1207,12]]}},"keywords":{}}],["within",{"_index":155,"title":{},"content":{"4":{"position":[[178,6]]},"6":{"position":[[551,6]]},"16":{"position":[[762,6]]},"27":{"position":[[185,6]]},"31":{"position":[[301,6]]},"34":{"position":[[32,6],[421,6]]},"36":{"position":[[275,6],[354,6]]},"45":{"position":[[49,6]]},"64":{"position":[[308,6]]},"67":{"position":[[291,6],[487,6],[623,6],[725,6]]},"69":{"position":[[556,6]]},"73":{"position":[[110,6]]},"76":{"position":[[33,6],[582,6]]},"77":{"position":[[547,6]]},"79":{"position":[[98,6]]},"81":{"position":[[733,6]]},"82":{"position":[[2770,6],[3154,6],[4908,6]]},"83":{"position":[[59,6]]},"87":{"position":[[200,6]]},"88":{"position":[[152,6],[487,6]]},"96":{"position":[[713,6],[799,6],[825,6]]},"97":{"position":[[78,6]]},"99":{"position":[[110,6],[454,6]]},"104":{"position":[[42,6]]},"113":{"position":[[320,6]]},"114":{"position":[[106,6]]},"121":{"position":[[107,6],[1619,6],[1874,6]]},"122":{"position":[[298,6]]},"124":{"position":[[826,6]]},"125":{"position":[[878,6]]},"138":{"position":[[2067,6]]},"141":{"position":[[2023,6]]},"142":{"position":[[2127,6]]},"159":{"position":[[118,6],[687,6]]},"160":{"position":[[420,6],[945,6]]},"161":{"position":[[217,6]]},"197":{"position":[[1339,6]]},"198":{"position":[[647,6]]},"224":{"position":[[839,6]]},"239":{"position":[[2098,6],[2695,6]]},"245":{"position":[[32,6]]},"278":{"position":[[417,6]]},"324":{"position":[[505,6],[787,6]]},"364":{"position":[[220,6]]},"385":{"position":[[770,6]]},"413":{"position":[[85,6]]},"417":{"position":[[1903,6]]},"418":{"position":[[561,6]]},"419":{"position":[[2029,6]]},"441":{"position":[[638,6]]},"477":{"position":[[233,6]]},"482":{"position":[[230,6]]},"487":{"position":[[203,6],[375,6]]},"499":{"position":[[48,6]]},"504":{"position":[[1658,6]]},"545":{"position":[[1505,6]]},"546":{"position":[[1269,6]]},"547":{"position":[[2031,6]]},"595":{"position":[[1245,6],[1640,6]]},"639":{"position":[[1656,6]]},"660":{"position":[[317,6]]},"661":{"position":[[352,6]]},"792":{"position":[[104,6]]},"918":{"position":[[104,6]]},"977":{"position":[[345,6]]},"1006":{"position":[[516,6]]},"1008":{"position":[[1374,6]]},"1023":{"position":[[2012,6]]},"1077":{"position":[[426,6]]},"1138":{"position":[[613,6]]},"1140":{"position":[[3268,6]]},"1144":{"position":[[935,6]]},"1151":{"position":[[598,6]]},"1162":{"position":[[526,6]]},"1178":{"position":[[217,6],[291,6]]},"1179":{"position":[[425,6],[629,6]]},"1213":{"position":[[612,6]]},"1260":{"position":[[312,6]]},"1313":{"position":[[423,6]]},"1316":{"position":[[3268,6]]},"1337":{"position":[[423,6]]},"1340":{"position":[[3268,6]]},"1348":{"position":[[423,6]]},"1351":{"position":[[3268,6]]},"1379":{"position":[[3927,6],[3993,6]]},"1382":{"position":[[176,6]]},"1386":{"position":[[396,6]]},"1391":{"position":[[217,6]]},"1403":{"position":[[3927,6],[3993,6]]},"1414":{"position":[[3927,6],[3993,6]]},"1427":{"position":[[364,6]]},"1431":{"position":[[3291,6]]},"1440":{"position":[[374,6]]},"1459":{"position":[[580,6]]},"1462":{"position":[[64,6],[144,6]]},"1465":{"position":[[194,6]]},"1477":{"position":[[577,6]]}},"keywords":{}}],["withinit",{"_index":99,"title":{},"content":{"2":{"position":[[816,9]]}},"keywords":{}}],["without",{"_index":320,"title":{},"content":{"11":{"position":[[804,7],[1260,7]]},"34":{"position":[[715,7]]},"40":{"position":[[338,7]]},"84":{"position":[[1172,7]]},"92":{"position":[[958,7]]},"101":{"position":[[452,7]]},"105":{"position":[[1079,7]]},"110":{"position":[[892,7]]},"115":{"position":[[1381,7]]},"133":{"position":[[627,7]]},"197":{"position":[[269,7]]},"254":{"position":[[3961,7]]},"295":{"position":[[837,7]]},"319":{"position":[[1331,7]]},"331":{"position":[[175,7],[758,7]]},"333":{"position":[[273,7],[555,7]]},"491":{"position":[[456,7]]},"556":{"position":[[1502,7],[2027,7]]},"664":{"position":[[477,7],[712,7]]},"679":{"position":[[456,7]]},"694":{"position":[[456,7]]},"718":{"position":[[14,7]]},"764":{"position":[[541,7]]},"777":{"position":[[541,7]]},"804":{"position":[[539,7]]},"819":{"position":[[539,7]]},"835":{"position":[[539,7]]},"847":{"position":[[33,7],[193,7]]},"857":{"position":[[216,7]]},"867":{"position":[[439,7]]},"1140":{"position":[[3301,7]]},"1268":{"position":[[472,7]]},"1292":{"position":[[6344,7]]},"1306":{"position":[[6344,7]]},"1316":{"position":[[3301,7]]},"1329":{"position":[[6344,7]]},"1340":{"position":[[3301,7]]},"1351":{"position":[[3301,7]]},"1370":{"position":[[1348,7]]},"1379":{"position":[[4039,7]]},"1392":{"position":[[53,7]]},"1403":{"position":[[4039,7]]},"1414":{"position":[[4039,7]]},"1431":{"position":[[3324,7]]},"1440":{"position":[[555,7]]},"1461":{"position":[[2522,7]]},"1462":{"position":[[281,7]]},"1474":{"position":[[606,8]]}},"keywords":{}}],["won't",{"_index":2025,"title":{},"content":{"173":{"position":[[1107,5]]},"218":{"position":[[1581,5]]},"307":{"position":[[2711,5]]},"309":{"position":[[1360,5]]},"331":{"position":[[376,5]]},"419":{"position":[[331,5]]},"436":{"position":[[794,5]]},"440":{"position":[[347,5]]},"480":{"position":[[763,5]]},"504":{"position":[[275,5]]},"547":{"position":[[332,5]]},"639":{"position":[[273,5]]},"685":{"position":[[140,5]]},"754":{"position":[[308,5]]},"794":{"position":[[181,5]]},"809":{"position":[[181,5]]},"825":{"position":[[181,5]]},"991":{"position":[[153,5]]},"1009":{"position":[[153,5]]},"1023":{"position":[[312,5]]},"1182":{"position":[[506,5]]},"1191":{"position":[[510,5]]},"1262":{"position":[[510,5]]},"1286":{"position":[[210,5]]},"1301":{"position":[[210,5]]},"1325":{"position":[[210,5]]},"1389":{"position":[[508,5]]},"1447":{"position":[[511,5]]}},"keywords":{}}],["wonder",{"_index":2894,"title":{},"content":{"281":{"position":[[2256,10]]}},"keywords":{}}],["won’t",{"_index":2238,"title":{},"content":{"207":{"position":[[473,5]]},"239":{"position":[[914,5]]},"242":{"position":[[147,5]]},"296":{"position":[[4146,5]]},"315":{"position":[[625,5]]}},"keywords":{}}],["woocommerc",{"_index":5344,"title":{"1088":{"position":[[0,11]]},"1091":{"position":[[7,12]]},"1092":{"position":[[11,11]]}},"content":{"1089":{"position":[[15,11],[61,11]]},"1090":{"position":[[38,11]]},"1092":{"position":[[177,11]]},"1093":{"position":[[250,11]]},"1094":{"position":[[111,11],[204,11],[495,11]]},"1096":{"position":[[5,11]]},"1097":{"position":[[16,11]]}},"keywords":{}}],["word",{"_index":382,"title":{"1140":{"position":[[9,6]]},"1192":{"position":[[9,6]]},"1209":{"position":[[9,6]]},"1292":{"position":[[9,6]]},"1306":{"position":[[9,6]]},"1316":{"position":[[9,6]]},"1329":{"position":[[9,6]]},"1340":{"position":[[9,6]]},"1351":{"position":[[9,6]]},"1370":{"position":[[9,6]]},"1379":{"position":[[9,6]]},"1394":{"position":[[9,6]]},"1403":{"position":[[9,6]]},"1414":{"position":[[9,6]]},"1423":{"position":[[9,6]]},"1431":{"position":[[9,6]]}},"content":{"13":{"position":[[320,6]]},"125":{"position":[[1023,6]]},"1140":{"position":[[35,5],[131,5],[256,5],[359,5]]},"1192":{"position":[[35,5],[157,5],[478,5]]},"1209":{"position":[[33,6],[130,4],[213,5]]},"1292":{"position":[[30,5],[126,5],[185,5],[288,5]]},"1306":{"position":[[30,5],[126,5],[185,5],[288,5]]},"1316":{"position":[[35,5],[131,5],[256,5],[359,5]]},"1329":{"position":[[30,5],[126,5],[185,5],[288,5]]},"1340":{"position":[[35,5],[131,5],[256,5],[359,5]]},"1351":{"position":[[35,5],[131,5],[256,5],[359,5]]},"1370":{"position":[[31,5],[127,5],[248,5],[351,5]]},"1379":{"position":[[34,5],[130,5],[193,5],[298,5]]},"1394":{"position":[[34,5],[156,5],[474,5]]},"1403":{"position":[[34,5],[130,5],[193,5],[298,5]]},"1414":{"position":[[34,5],[130,5],[193,5],[298,5]]},"1423":{"position":[[41,5],[163,5],[480,5]]},"1431":{"position":[[58,5],[154,5],[279,5],[382,5]]},"1479":{"position":[[690,6]]}},"keywords":{}}],["work",{"_index":283,"title":{"9":{"position":[[0,7]]},"29":{"position":[[0,7]]},"121":{"position":[[31,6]]},"1468":{"position":[[0,7]]}},"content":{"9":{"position":[[18,7]]},"13":{"position":[[1061,4],[1509,4]]},"24":{"position":[[155,4],[265,4]]},"26":{"position":[[50,4]]},"29":{"position":[[50,4]]},"31":{"position":[[41,7]]},"38":{"position":[[620,7]]},"47":{"position":[[120,6]]},"49":{"position":[[288,4]]},"60":{"position":[[403,4],[679,4]]},"61":{"position":[[23,4],[397,4],[941,7]]},"62":{"position":[[38,7]]},"63":{"position":[[57,7],[1152,7]]},"81":{"position":[[2362,7]]},"84":{"position":[[316,5]]},"92":{"position":[[670,5]]},"98":{"position":[[987,7]]},"103":{"position":[[737,4]]},"110":{"position":[[305,7]]},"115":{"position":[[868,5]]},"122":{"position":[[62,4]]},"124":{"position":[[821,4]]},"125":{"position":[[193,5]]},"126":{"position":[[497,5]]},"135":{"position":[[41,4],[111,4],[861,4],[1004,8]]},"163":{"position":[[1033,4]]},"169":{"position":[[77,4],[1281,8]]},"183":{"position":[[2514,7]]},"189":{"position":[[1474,5]]},"202":{"position":[[280,4]]},"203":{"position":[[131,5],[229,7]]},"210":{"position":[[4053,5]]},"213":{"position":[[145,4]]},"219":{"position":[[144,5]]},"225":{"position":[[618,7]]},"236":{"position":[[244,7]]},"238":{"position":[[565,7]]},"240":{"position":[[4170,4],[4611,6]]},"254":{"position":[[102,7],[2042,5]]},"259":{"position":[[1517,4],[3071,4]]},"260":{"position":[[67,4]]},"263":{"position":[[804,7]]},"264":{"position":[[331,4]]},"266":{"position":[[304,4]]},"268":{"position":[[1692,5]]},"269":{"position":[[1213,5]]},"270":{"position":[[851,7],[1793,7]]},"274":{"position":[[1604,7]]},"275":{"position":[[549,7],[1049,4]]},"281":{"position":[[2759,7]]},"285":{"position":[[240,7],[489,7]]},"296":{"position":[[102,7],[3829,7]]},"307":{"position":[[499,7],[776,7]]},"309":{"position":[[1126,4],[1438,7],[1926,4],[3320,5]]},"314":{"position":[[102,7]]},"315":{"position":[[286,7]]},"319":{"position":[[978,4],[1251,4]]},"320":{"position":[[180,7]]},"321":{"position":[[1605,4],[1816,5],[1907,5]]},"323":{"position":[[1993,5]]},"324":{"position":[[231,7]]},"340":{"position":[[32,4]]},"345":{"position":[[217,4]]},"347":{"position":[[160,5]]},"387":{"position":[[98,7]]},"448":{"position":[[98,7]]},"480":{"position":[[233,7]]},"534":{"position":[[98,7]]},"556":{"position":[[98,7]]},"573":{"position":[[102,7]]},"590":{"position":[[633,5]]},"611":{"position":[[98,7]]},"720":{"position":[[98,7]]},"792":{"position":[[172,7]]},"847":{"position":[[126,4]]},"849":{"position":[[1396,7]]},"859":{"position":[[98,7]]},"918":{"position":[[172,7]]},"922":{"position":[[30,5]]},"988":{"position":[[11,7]]},"991":{"position":[[98,7]]},"1003":{"position":[[11,7]]},"1007":{"position":[[157,5]]},"1009":{"position":[[98,7]]},"1039":{"position":[[21,4]]},"1070":{"position":[[98,7]]},"1083":{"position":[[11,7]]},"1140":{"position":[[3339,4]]},"1247":{"position":[[89,7]]},"1292":{"position":[[6392,4]]},"1306":{"position":[[6392,4]]},"1316":{"position":[[3339,4]]},"1329":{"position":[[6392,4]]},"1340":{"position":[[3339,4]]},"1351":{"position":[[3339,4]]},"1379":{"position":[[4095,4]]},"1403":{"position":[[4095,4]]},"1414":{"position":[[4095,4]]},"1431":{"position":[[3362,4]]},"1451":{"position":[[1064,5]]},"1452":{"position":[[4567,5]]},"1461":{"position":[[913,4],[2130,4],[3992,4],[4080,4],[4257,7]]},"1464":{"position":[[14,5],[253,5]]},"1466":{"position":[[209,5]]},"1467":{"position":[[554,5]]},"1472":{"position":[[144,4]]},"1479":{"position":[[202,7]]}},"keywords":{}}],["workbench",{"_index":4709,"title":{},"content":{"793":{"position":[[687,9]]}},"keywords":{}}],["workflow",{"_index":602,"title":{},"content":{"26":{"position":[[27,9]]},"39":{"position":[[118,10]]},"40":{"position":[[293,10]]},"54":{"position":[[75,8]]},"59":{"position":[[32,10]]},"60":{"position":[[1011,9]]},"61":{"position":[[248,8]]},"64":{"position":[[892,9]]},"81":{"position":[[1014,9]]},"110":{"position":[[519,9],[843,9]]},"119":{"position":[[191,9]]},"135":{"position":[[218,10],[640,10]]},"136":{"position":[[211,9]]},"144":{"position":[[293,8],[683,8]]},"169":{"position":[[177,9]]},"180":{"position":[[238,9]]},"193":{"position":[[418,10]]},"211":{"position":[[406,10]]},"227":{"position":[[209,9]]},"245":{"position":[[317,10]]},"257":{"position":[[55,9]]},"262":{"position":[[18,9]]},"273":{"position":[[18,9]]},"283":{"position":[[18,9]]},"285":{"position":[[424,8]]},"307":{"position":[[479,8],[755,9]]},"309":{"position":[[1418,8],[1746,8]]},"322":{"position":[[1215,8]]},"323":{"position":[[2023,9]]},"324":{"position":[[218,8]]},"329":{"position":[[170,9]]},"331":{"position":[[499,10]]},"529":{"position":[[694,8],[708,9]]},"548":{"position":[[345,9]]},"975":{"position":[[401,10]]},"1047":{"position":[[339,9]]},"1055":{"position":[[339,9]]},"1063":{"position":[[339,9]]},"1182":{"position":[[460,10]]},"1191":{"position":[[462,10]]},"1262":{"position":[[462,10]]},"1389":{"position":[[461,10]]},"1437":{"position":[[281,8],[474,9]]}},"keywords":{}}],["workflow.th",{"_index":2441,"title":{},"content":{"221":{"position":[[526,12]]}},"keywords":{}}],["workflowor",{"_index":5013,"title":{},"content":{"909":{"position":[[795,10]]},"925":{"position":[[795,10]]},"936":{"position":[[795,10]]},"952":{"position":[[795,10]]},"970":{"position":[[795,10]]}},"keywords":{}}],["workload",{"_index":1457,"title":{},"content":{"101":{"position":[[545,8]]},"326":{"position":[[376,11]]}},"keywords":{}}],["worklogsissuessprint",{"_index":4497,"title":{},"content":{"709":{"position":[[791,20]]}},"keywords":{}}],["workord",{"_index":5147,"title":{},"content":{"992":{"position":[[256,9]]},"1010":{"position":[[470,9]]}},"keywords":{}}],["workorderlineitem",{"_index":5149,"title":{},"content":{"992":{"position":[[314,17]]},"1010":{"position":[[580,17]]}},"keywords":{}}],["worksheet",{"_index":2133,"title":{},"content":{"191":{"position":[[340,9]]},"240":{"position":[[339,10]]}},"keywords":{}}],["worksom",{"_index":4810,"title":{},"content":{"847":{"position":[[48,8]]}},"keywords":{}}],["workspac",{"_index":2064,"title":{},"content":{"183":{"position":[[604,9]]},"267":{"position":[[972,9]]},"611":{"position":[[570,9]]},"683":{"position":[[195,10]]},"1013":{"position":[[7,9]]},"1118":{"position":[[61,9],[237,10]]},"1354":{"position":[[124,9]]},"1356":{"position":[[1429,10],[1440,9],[1474,9]]},"1357":{"position":[[401,10]]},"1361":{"position":[[72,9]]}},"keywords":{}}],["world",{"_index":1450,"title":{},"content":{"101":{"position":[[316,5]]},"156":{"position":[[272,5]]},"190":{"position":[[1371,5]]},"210":{"position":[[2033,5]]},"322":{"position":[[1238,5]]},"323":{"position":[[293,5]]}},"keywords":{}}],["worri",{"_index":2239,"title":{},"content":{"207":{"position":[[487,5]]},"236":{"position":[[1662,5]]},"239":{"position":[[928,5]]},"314":{"position":[[2519,5]]}},"keywords":{}}],["wors",{"_index":726,"title":{},"content":{"41":{"position":[[294,6]]},"1391":{"position":[[592,5]]}},"keywords":{}}],["worst",{"_index":5067,"title":{},"content":{"922":{"position":[[3243,5]]}},"keywords":{}}],["worth",{"_index":4637,"title":{},"content":{"760":{"position":[[855,5]]},"773":{"position":[[855,5]]},"800":{"position":[[855,5]]},"815":{"position":[[855,5]]},"831":{"position":[[855,5]]}},"keywords":{}}],["wrap",{"_index":1170,"title":{"211":{"position":[[0,8]]},"256":{"position":[[0,8]]},"297":{"position":[[0,8]]},"317":{"position":[[0,8]]}},"content":{"82":{"position":[[1898,8],[4222,8]]},"97":{"position":[[774,5]]}},"keywords":{}}],["wrapper",{"_index":6229,"title":{},"content":{"1292":{"position":[[6439,7]]},"1306":{"position":[[6439,7]]},"1329":{"position":[[6439,7]]}},"keywords":{}}],["write",{"_index":73,"title":{"160":{"position":[[0,7]]},"162":{"position":[[0,5]]},"254":{"position":[[0,7]]},"296":{"position":[[0,7]]},"314":{"position":[[0,7]]}},"content":{"2":{"position":[[173,5],[261,6]]},"11":{"position":[[109,5],[291,5],[986,7]]},"25":{"position":[[19,5]]},"64":{"position":[[844,5]]},"81":{"position":[[946,5]]},"82":{"position":[[1204,7],[1664,5],[1881,6],[4205,6]]},"84":{"position":[[635,5],[965,5]]},"96":{"position":[[34,5]]},"113":{"position":[[314,5]]},"114":{"position":[[146,5]]},"124":{"position":[[692,5],[877,5]]},"125":{"position":[[428,5]]},"132":{"position":[[172,5]]},"133":{"position":[[10,5]]},"138":{"position":[[2297,6],[2361,6]]},"146":{"position":[[520,6],[821,6]]},"149":{"position":[[794,6]]},"152":{"position":[[797,6]]},"154":{"position":[[593,5],[738,5]]},"161":{"position":[[1024,5]]},"162":{"position":[[429,5],[1087,5],[1144,5],[1317,5]]},"165":{"position":[[1200,5]]},"166":{"position":[[624,5]]},"182":{"position":[[697,5]]},"183":{"position":[[8,5]]},"207":{"position":[[1100,5]]},"237":{"position":[[1438,6]]},"254":{"position":[[1107,7]]},"256":{"position":[[34,5]]},"266":{"position":[[437,8]]},"267":{"position":[[8,5]]},"268":{"position":[[207,5],[1119,5],[1439,5],[1484,7],[1741,5]]},"269":{"position":[[690,5],[1014,5],[1055,7]]},"270":{"position":[[1278,5],[1805,5]]},"274":{"position":[[234,6]]},"281":{"position":[[537,6],[566,5],[1168,5]]},"297":{"position":[[34,5]]},"307":{"position":[[2748,7],[3130,7]]},"314":{"position":[[828,7],[3035,5]]},"315":{"position":[[86,7]]},"317":{"position":[[34,5]]},"321":{"position":[[1371,5],[1680,6]]},"323":{"position":[[493,7]]},"337":{"position":[[389,5]]},"338":{"position":[[160,5],[452,5]]},"366":{"position":[[186,5],[836,6]]},"370":{"position":[[1370,6]]},"417":{"position":[[328,5]]},"438":{"position":[[328,5]]},"491":{"position":[[260,5]]},"502":{"position":[[788,5]]},"545":{"position":[[328,5]]},"664":{"position":[[281,5]]},"679":{"position":[[260,5]]},"694":{"position":[[260,5]]},"723":{"position":[[354,5]]},"750":{"position":[[524,6]]},"752":{"position":[[441,5]]},"753":{"position":[[1097,5]]},"757":{"position":[[826,7]]},"766":{"position":[[524,6]]},"770":{"position":[[826,7]]},"789":{"position":[[512,6]]},"791":{"position":[[394,5]]},"793":{"position":[[1068,5]]},"797":{"position":[[826,7]]},"807":{"position":[[512,6]]},"808":{"position":[[1014,5]]},"812":{"position":[[826,7]]},"823":{"position":[[512,6]]},"828":{"position":[[826,7]]},"864":{"position":[[1018,5]]},"867":{"position":[[710,6]]},"869":{"position":[[8,6]]},"903":{"position":[[212,5],[862,6]]},"907":{"position":[[1153,6]]},"909":{"position":[[353,5]]},"915":{"position":[[212,5],[862,6]]},"923":{"position":[[1153,6]]},"925":{"position":[[353,5]]},"930":{"position":[[212,5],[862,6]]},"934":{"position":[[1153,6]]},"936":{"position":[[353,5]]},"950":{"position":[[1153,6]]},"952":{"position":[[353,5]]},"963":{"position":[[366,5],[1016,6]]},"968":{"position":[[1153,6]]},"970":{"position":[[353,5]]},"988":{"position":[[36,7]]},"989":{"position":[[605,5]]},"1003":{"position":[[36,7]]},"1004":{"position":[[688,5]]},"1008":{"position":[[355,5]]},"1021":{"position":[[1367,5]]},"1040":{"position":[[578,6]]},"1045":{"position":[[880,6]]},"1050":{"position":[[578,6]]},"1053":{"position":[[880,6]]},"1058":{"position":[[578,6]]},"1061":{"position":[[880,6]]},"1140":{"position":[[3364,5]]},"1142":{"position":[[54,5]]},"1144":{"position":[[181,7],[289,7],[372,5],[1202,5]]},"1149":{"position":[[625,5]]},"1151":{"position":[[786,7],[917,7]]},"1160":{"position":[[54,5],[303,5],[359,5]]},"1162":{"position":[[294,5]]},"1168":{"position":[[54,5]]},"1170":{"position":[[181,7],[289,7],[372,5]]},"1194":{"position":[[301,6]]},"1211":{"position":[[54,5]]},"1213":{"position":[[879,5]]},"1218":{"position":[[54,5]]},"1233":{"position":[[35,5]]},"1251":{"position":[[90,5]]},"1258":{"position":[[219,5]]},"1260":{"position":[[585,7],[716,7]]},"1292":{"position":[[6487,5]]},"1306":{"position":[[6487,5]]},"1316":{"position":[[3364,5]]},"1329":{"position":[[6487,5]]},"1340":{"position":[[3364,5]]},"1351":{"position":[[3364,5]]},"1379":{"position":[[4137,5]]},"1403":{"position":[[4137,5]]},"1414":{"position":[[4137,5]]},"1431":{"position":[[3387,5]]},"1438":{"position":[[623,5],[717,5],[752,5]]},"1439":{"position":[[666,6]]},"1440":{"position":[[1570,7]]},"1448":{"position":[[527,6]]}},"keywords":{}}],["writeahead",{"_index":5051,"title":{},"content":{"922":{"position":[[70,10]]}},"keywords":{}}],["writeschema",{"_index":1914,"title":{},"content":{"162":{"position":[[729,11],[2001,12]]},"165":{"position":[[999,12],[1219,11],[1505,12],[1692,11]]},"192":{"position":[[1904,12]]},"207":{"position":[[900,12],[1119,11]]}},"keywords":{}}],["writetext",{"_index":6344,"title":{},"content":{"1379":{"position":[[4188,9]]},"1403":{"position":[[4188,9]]},"1414":{"position":[[4188,9]]}},"keywords":{}}],["written",{"_index":152,"title":{},"content":{"4":{"position":[[46,7]]},"16":{"position":[[707,8]]},"34":{"position":[[72,7]]},"41":{"position":[[111,7]]},"48":{"position":[[326,8]]},"53":{"position":[[136,7]]},"63":{"position":[[41,7]]},"64":{"position":[[393,7]]},"77":{"position":[[441,8]]},"109":{"position":[[301,7]]},"138":{"position":[[1934,7],[2029,7]]},"141":{"position":[[1866,7],[1954,7]]},"146":{"position":[[139,7]]},"162":{"position":[[89,9]]},"180":{"position":[[694,7]]},"238":{"position":[[1434,7]]},"245":{"position":[[80,7]]},"270":{"position":[[827,7]]},"274":{"position":[[1580,7],[1773,7]]},"332":{"position":[[300,7]]},"577":{"position":[[578,7]]},"1147":{"position":[[62,7],[307,8],[368,7],[474,7]]},"1164":{"position":[[28,7]]},"1172":{"position":[[28,7]]},"1174":{"position":[[62,7],[307,8],[368,7],[474,7]]},"1216":{"position":[[62,7],[307,8],[368,7],[474,7]]},"1222":{"position":[[28,7]]},"1224":{"position":[[62,7],[307,8],[368,7],[474,7]]},"1391":{"position":[[751,7]]},"1440":{"position":[[1279,7]]},"1448":{"position":[[897,7]]},"1449":{"position":[[373,8]]},"1459":{"position":[[63,7],[186,7],[258,7]]},"1463":{"position":[[544,7]]},"1470":{"position":[[699,7],[789,7],[969,7],[986,7],[1019,7],[1101,7],[1118,7],[1145,7]]}},"keywords":{}}],["wrong",{"_index":1067,"title":{},"content":{"72":{"position":[[412,5]]},"759":{"position":[[75,5]]},"763":{"position":[[92,5]]},"772":{"position":[[86,5]]},"776":{"position":[[92,5]]},"799":{"position":[[73,5]]},"803":{"position":[[92,5]]},"814":{"position":[[73,5]]},"818":{"position":[[92,5]]},"830":{"position":[[73,5]]},"834":{"position":[[92,5]]}},"keywords":{}}],["wrote",{"_index":905,"title":{},"content":{"60":{"position":[[590,5]]}},"keywords":{}}],["wsl",{"_index":869,"title":{},"content":{"58":{"position":[[102,5]]},"169":{"position":[[1128,4]]}},"keywords":{}}],["x",{"_index":887,"title":{},"content":{"58":{"position":[[464,2],[643,2]]},"98":{"position":[[382,2]]},"161":{"position":[[873,3],[960,2]]},"169":{"position":[[705,2],[887,2]]},"218":{"position":[[1178,1]]},"250":{"position":[[936,2],[1263,1],[1293,1],[1325,1],[1351,1],[1385,1]]},"337":{"position":[[321,1],[499,1]]},"338":{"position":[[316,1],[368,1]]},"660":{"position":[[1064,1],[1087,1],[1116,1],[1142,1]]},"738":{"position":[[91,1],[168,2]]},"1080":{"position":[[85,1],[87,1],[99,1],[101,1],[107,1],[109,1],[121,1],[123,1],[144,1],[146,1],[166,1],[168,1],[191,1],[193,1],[222,1],[250,1],[281,1],[308,1],[310,1],[336,1],[338,1],[367,1],[369,1],[396,1],[398,1],[424,1],[426,1],[455,1],[457,1],[495,1],[532,1],[572,1],[607,1],[609,1],[643,1],[645,1],[675,1],[677,1],[706,1],[708,1],[755,1],[757,1],[803,1],[805,1]]}},"keywords":{}}],["x.decode('utf",{"_index":2669,"title":{},"content":{"250":{"position":[[939,13]]}},"keywords":{}}],["x509",{"_index":6233,"title":{},"content":{"1292":{"position":[[6528,4]]},"1306":{"position":[[6528,4]]},"1329":{"position":[[6528,4]]}},"keywords":{}}],["x86",{"_index":1975,"title":{},"content":{"169":{"position":[[293,3]]}},"keywords":{}}],["x86_64",{"_index":884,"title":{},"content":{"58":{"position":[[428,6]]},"169":{"position":[[669,6]]}},"keywords":{}}],["xa",{"_index":6234,"title":{},"content":{"1292":{"position":[[6564,2]]},"1306":{"position":[[6564,2]]},"1329":{"position":[[6564,2]]}},"keywords":{}}],["xid",{"_index":6236,"title":{},"content":{"1292":{"position":[[6594,3]]},"1306":{"position":[[6594,3]]},"1329":{"position":[[6594,3]]}},"keywords":{}}],["xmin",{"_index":5025,"title":{},"content":{"912":{"position":[[1146,4],[1208,5]]}},"keywords":{}}],["xmin::text::bigint",{"_index":5026,"title":{},"content":{"912":{"position":[[1231,18]]}},"keywords":{}}],["xml",{"_index":5663,"title":{},"content":{"1140":{"position":[[3395,3]]},"1292":{"position":[[6617,3]]},"1306":{"position":[[6617,3]]},"1316":{"position":[[3395,3]]},"1329":{"position":[[6617,3]]},"1340":{"position":[[3395,3]]},"1351":{"position":[[3395,3]]},"1431":{"position":[[3418,3]]}},"keywords":{}}],["xmlagg",{"_index":5665,"title":{},"content":{"1140":{"position":[[3433,6]]},"1316":{"position":[[3433,6]]},"1340":{"position":[[3433,6]]},"1351":{"position":[[3433,6]]},"1379":{"position":[[4238,6]]},"1403":{"position":[[4238,6]]},"1414":{"position":[[4238,6]]},"1431":{"position":[[3456,6]]}},"keywords":{}}],["xmlattribut",{"_index":5666,"title":{},"content":{"1140":{"position":[[3460,13]]},"1316":{"position":[[3460,13]]},"1340":{"position":[[3460,13]]},"1351":{"position":[[3460,13]]},"1379":{"position":[[4293,13]]},"1403":{"position":[[4293,13]]},"1414":{"position":[[4293,13]]},"1431":{"position":[[3483,13]]}},"keywords":{}}],["xmlbinari",{"_index":5669,"title":{},"content":{"1140":{"position":[[3506,9]]},"1316":{"position":[[3506,9]]},"1340":{"position":[[3506,9]]},"1351":{"position":[[3506,9]]},"1379":{"position":[[4350,9]]},"1403":{"position":[[4350,9]]},"1414":{"position":[[4350,9]]},"1431":{"position":[[3529,9]]}},"keywords":{}}],["xmlcast",{"_index":5672,"title":{},"content":{"1140":{"position":[[3547,7]]},"1316":{"position":[[3547,7]]},"1340":{"position":[[3547,7]]},"1351":{"position":[[3547,7]]},"1379":{"position":[[4403,7]]},"1403":{"position":[[4403,7]]},"1414":{"position":[[4403,7]]},"1431":{"position":[[3570,7]]}},"keywords":{}}],["xmlcomment",{"_index":5676,"title":{},"content":{"1140":{"position":[[3588,10]]},"1316":{"position":[[3588,10]]},"1340":{"position":[[3588,10]]},"1351":{"position":[[3588,10]]},"1379":{"position":[[4456,10]]},"1403":{"position":[[4456,10]]},"1414":{"position":[[4456,10]]},"1431":{"position":[[3611,10]]}},"keywords":{}}],["xmlconcat",{"_index":5678,"title":{},"content":{"1140":{"position":[[3626,9]]},"1316":{"position":[[3626,9]]},"1340":{"position":[[3626,9]]},"1351":{"position":[[3626,9]]},"1379":{"position":[[4502,9]]},"1403":{"position":[[4502,9]]},"1414":{"position":[[4502,9]]},"1431":{"position":[[3649,9]]}},"keywords":{}}],["xmldocument",{"_index":5680,"title":{},"content":{"1140":{"position":[[3658,11]]},"1316":{"position":[[3658,11]]},"1340":{"position":[[3658,11]]},"1351":{"position":[[3658,11]]},"1379":{"position":[[4547,11]]},"1403":{"position":[[4547,11]]},"1414":{"position":[[4547,11]]},"1431":{"position":[[3681,11]]}},"keywords":{}}],["xmlelement",{"_index":5682,"title":{},"content":{"1140":{"position":[[3697,10]]},"1316":{"position":[[3697,10]]},"1340":{"position":[[3697,10]]},"1351":{"position":[[3697,10]]},"1379":{"position":[[4594,10]]},"1403":{"position":[[4594,10]]},"1414":{"position":[[4594,10]]},"1431":{"position":[[3720,10]]}},"keywords":{}}],["xmlexist",{"_index":5686,"title":{},"content":{"1140":{"position":[[3741,9]]},"1316":{"position":[[3741,9]]},"1340":{"position":[[3741,9]]},"1351":{"position":[[3741,9]]},"1379":{"position":[[4655,9]]},"1403":{"position":[[4655,9]]},"1414":{"position":[[4655,9]]},"1431":{"position":[[3764,9]]}},"keywords":{}}],["xmlforest",{"_index":5690,"title":{},"content":{"1140":{"position":[[3785,9]]},"1316":{"position":[[3785,9]]},"1340":{"position":[[3785,9]]},"1351":{"position":[[3785,9]]},"1379":{"position":[[4712,9]]},"1403":{"position":[[4712,9]]},"1414":{"position":[[4712,9]]},"1431":{"position":[[3808,9]]}},"keywords":{}}],["xmliter",{"_index":5691,"title":{},"content":{"1140":{"position":[[3820,10]]},"1316":{"position":[[3820,10]]},"1340":{"position":[[3820,10]]},"1351":{"position":[[3820,10]]},"1379":{"position":[[4766,10]]},"1403":{"position":[[4766,10]]},"1414":{"position":[[4766,10]]},"1431":{"position":[[3843,10]]}},"keywords":{}}],["xmlnamespac",{"_index":5693,"title":{},"content":{"1140":{"position":[[3866,13]]},"1316":{"position":[[3866,13]]},"1340":{"position":[[3866,13]]},"1351":{"position":[[3866,13]]},"1379":{"position":[[4813,13]]},"1403":{"position":[[4813,13]]},"1414":{"position":[[4813,13]]},"1431":{"position":[[3889,13]]}},"keywords":{}}],["xmlpars",{"_index":5696,"title":{},"content":{"1140":{"position":[[3913,8]]},"1316":{"position":[[3913,8]]},"1340":{"position":[[3913,8]]},"1351":{"position":[[3913,8]]},"1379":{"position":[[4866,8]]},"1403":{"position":[[4866,8]]},"1414":{"position":[[4866,8]]},"1431":{"position":[[3936,8]]}},"keywords":{}}],["xmlpi",{"_index":5698,"title":{},"content":{"1140":{"position":[[3969,5]]},"1316":{"position":[[3969,5]]},"1340":{"position":[[3969,5]]},"1351":{"position":[[3969,5]]},"1379":{"position":[[4927,5]]},"1403":{"position":[[4927,5]]},"1414":{"position":[[4927,5]]},"1431":{"position":[[3992,5]]}},"keywords":{}}],["xmlqueri",{"_index":5700,"title":{},"content":{"1140":{"position":[[4002,8]]},"1316":{"position":[[4002,8]]},"1340":{"position":[[4002,8]]},"1351":{"position":[[4002,8]]},"1379":{"position":[[4975,8]]},"1403":{"position":[[4975,8]]},"1414":{"position":[[4975,8]]},"1431":{"position":[[4025,8]]}},"keywords":{}}],["xmlserial",{"_index":5702,"title":{},"content":{"1140":{"position":[[4046,12]]},"1316":{"position":[[4046,12]]},"1340":{"position":[[4046,12]]},"1351":{"position":[[4046,12]]},"1379":{"position":[[5033,12]]},"1403":{"position":[[5033,12]]},"1414":{"position":[[5033,12]]},"1431":{"position":[[4069,12]]}},"keywords":{}}],["xmltabl",{"_index":5706,"title":{},"content":{"1140":{"position":[[4095,8]]},"1316":{"position":[[4095,8]]},"1340":{"position":[[4095,8]]},"1351":{"position":[[4095,8]]},"1379":{"position":[[5086,8]]},"1403":{"position":[[5086,8]]},"1414":{"position":[[5086,8]]},"1431":{"position":[[4118,8]]}},"keywords":{}}],["xmltext",{"_index":5708,"title":{},"content":{"1140":{"position":[[4138,7]]},"1316":{"position":[[4138,7]]},"1340":{"position":[[4138,7]]},"1351":{"position":[[4138,7]]},"1379":{"position":[[5142,7]]},"1403":{"position":[[5142,7]]},"1414":{"position":[[5142,7]]},"1431":{"position":[[4161,7]]}},"keywords":{}}],["xmlvalid",{"_index":5711,"title":{},"content":{"1140":{"position":[[4181,11]]},"1316":{"position":[[4181,11]]},"1340":{"position":[[4181,11]]},"1351":{"position":[[4181,11]]},"1379":{"position":[[5196,11]]},"1403":{"position":[[5196,11]]},"1414":{"position":[[5196,11]]},"1431":{"position":[[4204,11]]}},"keywords":{}}],["xor",{"_index":6237,"title":{},"content":{"1292":{"position":[[6646,3]]},"1306":{"position":[[6646,3]]},"1329":{"position":[[6646,3]]}},"keywords":{}}],["xr9mfitngpwyj9d/pto7u9zupheoat8ave4wab08dsi",{"_index":1254,"title":{},"content":{"83":{"position":[[2287,44]]},"371":{"position":[[1206,44]]},"1139":{"position":[[1093,44]]}},"keywords":{}}],["xsmall",{"_index":2152,"title":{},"content":{"191":{"position":[[1522,6]]},"240":{"position":[[1483,6]]},"1032":{"position":[[1124,6]]},"1383":{"position":[[1470,6]]}},"keywords":{}}],["xxx",{"_index":4787,"title":{},"content":{"843":{"position":[[190,3],[216,3],[230,3],[253,3]]}},"keywords":{}}],["xxxx",{"_index":986,"title":{},"content":{"66":{"position":[[904,4],[909,4],[914,4]]}},"keywords":{}}],["xxxxxxxx",{"_index":5146,"title":{},"content":{"992":{"position":[[197,10]]},"1010":{"position":[[280,10]]}},"keywords":{}}],["xxxxxxxxxx.xxxxxxxxxx.tsdb.cloud.timescale.com:01234",{"_index":6419,"title":{},"content":{"1428":{"position":[[146,52]]}},"keywords":{}}],["xxxxxxxxxxxx"",{"_index":987,"title":{},"content":{"66":{"position":[[919,18]]}},"keywords":{}}],["xxxxxxxxxxxxxxxx",{"_index":3923,"title":{},"content":{"510":{"position":[[120,16]]},"1071":{"position":[[231,16]]}},"keywords":{}}],["y",{"_index":1906,"title":{},"content":{"161":{"position":[[883,3],[985,2]]},"337":{"position":[[383,1],[575,1]]}},"keywords":{}}],["yaml",{"_index":596,"title":{},"content":{"24":{"position":[[78,4]]},"63":{"position":[[661,4]]},"82":{"position":[[549,4]]},"83":{"position":[[839,5],[1355,4]]},"133":{"position":[[100,4]]},"161":{"position":[[1058,4]]},"225":{"position":[[635,4],[686,4]]},"236":{"position":[[274,4]]},"254":{"position":[[2118,4]]},"263":{"position":[[1062,4]]},"264":{"position":[[91,4]]},"274":{"position":[[1793,4],[1914,4]]},"275":{"position":[[113,4]]},"296":{"position":[[2670,5]]},"307":{"position":[[1780,4]]},"314":{"position":[[1624,4]]},"323":{"position":[[1963,4]]},"1008":{"position":[[1438,4]]}},"keywords":{}}],["ye",{"_index":4663,"title":{},"content":{"767":{"position":[[122,4]]}},"keywords":{}}],["year",{"_index":2127,"title":{},"content":{"190":{"position":[[1278,4]]},"331":{"position":[[108,5]]},"573":{"position":[[1237,6]]},"747":{"position":[[850,4]]},"754":{"position":[[680,5]]},"794":{"position":[[886,5]]},"809":{"position":[[886,5]]},"825":{"position":[[722,5]]},"859":{"position":[[668,5]]},"1140":{"position":[[4226,4]]},"1286":{"position":[[943,5]]},"1292":{"position":[[6686,4]]},"1301":{"position":[[779,5]]},"1306":{"position":[[6686,4]]},"1316":{"position":[[4226,4]]},"1325":{"position":[[943,5]]},"1329":{"position":[[6686,4]]},"1340":{"position":[[4226,4]]},"1351":{"position":[[4226,4]]},"1379":{"position":[[5250,4]]},"1403":{"position":[[5250,4]]},"1414":{"position":[[5250,4]]},"1431":{"position":[[4249,4]]}},"keywords":{}}],["year%/%monthnum%/%day%/%postname%/a",{"_index":5348,"title":{},"content":{"1089":{"position":[[186,37]]}},"keywords":{}}],["year_month",{"_index":6240,"title":{},"content":{"1292":{"position":[[6718,10]]},"1306":{"position":[[6718,10]]},"1329":{"position":[[6718,10]]}},"keywords":{}}],["yellow",{"_index":1782,"title":{},"content":{"138":{"position":[[1266,9]]},"141":{"position":[[1352,9]]},"142":{"position":[[1251,9]]}},"keywords":{}}],["yes.edit",{"_index":4726,"title":{},"content":{"824":{"position":[[235,8]]},"904":{"position":[[235,8]]},"1051":{"position":[[235,8]]},"1373":{"position":[[235,8]]},"1374":{"position":[[235,8]]}},"keywords":{}}],["yesterday",{"_index":1801,"title":{},"content":{"138":{"position":[[2164,10]]},"141":{"position":[[2120,10]]},"142":{"position":[[2224,10]]},"584":{"position":[[768,10]]}},"keywords":{}}],["yield",{"_index":248,"title":{},"content":{"7":{"position":[[535,5]]},"182":{"position":[[254,5]]},"290":{"position":[[81,5]]},"301":{"position":[[72,5]]}},"keywords":{}}],["york",{"_index":2101,"title":{},"content":{"189":{"position":[[16,4]]}},"keywords":{}}],["york","user":"204.116.28.102"",{"_index":3096,"title":{},"content":{"316":{"position":[[1061,55]]}},"keywords":{}}],["you'd",{"_index":437,"title":{},"content":{"14":{"position":[[800,5],[1157,5]]},"53":{"position":[[553,5]]},"54":{"position":[[162,5]]},"60":{"position":[[963,5]]},"61":{"position":[[315,5]]},"84":{"position":[[1428,5]]},"104":{"position":[[273,5]]},"119":{"position":[[250,5],[329,5]]},"154":{"position":[[615,5],[760,5],[903,5]]},"175":{"position":[[327,5]]},"177":{"position":[[227,5]]},"183":{"position":[[1005,5]]},"189":{"position":[[462,5]]},"190":{"position":[[1387,5]]},"213":{"position":[[444,5]]},"259":{"position":[[59,5],[1740,5]]},"267":{"position":[[1429,5]]},"268":{"position":[[1136,5]]},"269":{"position":[[707,5],[1321,5]]},"270":{"position":[[1058,5],[1295,5],[1936,5]]},"288":{"position":[[241,5]]},"299":{"position":[[233,5]]},"309":{"position":[[2654,5],[3452,5]]},"517":{"position":[[1454,5],[2006,5],[2637,5],[3790,5]]},"534":{"position":[[1424,5]]},"754":{"position":[[738,5]]},"794":{"position":[[944,5]]},"809":{"position":[[944,5]]},"825":{"position":[[780,5]]},"959":{"position":[[187,5]]},"982":{"position":[[189,5]]},"985":{"position":[[578,5]]},"989":{"position":[[348,5]]},"1000":{"position":[[756,5]]},"1004":{"position":[[431,5]]},"1070":{"position":[[846,5]]},"1085":{"position":[[734,5]]},"1133":{"position":[[801,5]]},"1232":{"position":[[412,5]]},"1286":{"position":[[1001,5]]},"1301":{"position":[[837,5]]},"1325":{"position":[[1001,5]]},"1383":{"position":[[152,5],[436,5]]}},"keywords":{}}],["you'll",{"_index":352,"title":{},"content":{"11":{"position":[[1987,6]]},"30":{"position":[[35,6]]},"32":{"position":[[18,6]]},"39":{"position":[[18,6]]},"61":{"position":[[92,6]]},"75":{"position":[[362,6]]},"136":{"position":[[104,6],[255,6]]},"138":{"position":[[1324,6]]},"141":{"position":[[405,6]]},"142":{"position":[[1317,6]]},"146":{"position":[[1017,6]]},"149":{"position":[[1011,6]]},"152":{"position":[[1001,6]]},"171":{"position":[[1,6]]},"172":{"position":[[1,6]]},"173":{"position":[[1,6],[81,6],[255,6],[559,6]]},"177":{"position":[[114,6]]},"179":{"position":[[134,6],[325,6],[385,6]]},"180":{"position":[[307,6],[432,6],[791,6],[864,6]]},"182":{"position":[[539,6],[645,6],[690,6]]},"183":{"position":[[1,6],[810,6],[1673,6],[2273,6],[2619,6],[4116,6]]},"184":{"position":[[6,6],[58,6]]},"188":{"position":[[1,6]]},"189":{"position":[[1112,6],[1313,6],[1727,6],[1808,6]]},"190":{"position":[[380,6],[543,6],[1289,6],[1968,6]]},"192":{"position":[[1470,6],[2361,6]]},"213":{"position":[[34,6]]},"217":{"position":[[1,6],[1878,6],[1942,6],[2179,6]]},"218":{"position":[[2105,6]]},"222":{"position":[[62,6]]},"224":{"position":[[64,6],[972,6]]},"227":{"position":[[145,6],[219,6]]},"228":{"position":[[568,6]]},"232":{"position":[[206,6],[725,6]]},"263":{"position":[[1080,6],[1184,6]]},"264":{"position":[[7,6]]},"266":{"position":[[492,6]]},"267":{"position":[[1,6],[1200,6],[1626,6],[1681,6]]},"268":{"position":[[200,6]]},"270":{"position":[[136,6]]},"274":{"position":[[423,6]]},"275":{"position":[[7,6],[419,6],[729,6]]},"277":{"position":[[332,6]]},"281":{"position":[[442,6]]},"288":{"position":[[1,6]]},"289":{"position":[[269,6]]},"290":{"position":[[1,6],[1402,6],[1659,6]]},"291":{"position":[[7,6],[656,6],[1915,6]]},"299":{"position":[[1,6],[380,6]]},"300":{"position":[[248,6]]},"301":{"position":[[1,6],[1498,6],[1633,6]]},"302":{"position":[[7,6],[656,6],[1827,6]]},"305":{"position":[[551,6]]},"307":{"position":[[336,6],[528,6],[798,6]]},"309":{"position":[[1537,6],[1837,6]]},"339":{"position":[[106,6]]},"364":{"position":[[175,6]]},"366":{"position":[[1,6],[1065,6]]},"370":{"position":[[67,6]]},"373":{"position":[[823,6]]},"375":{"position":[[24,6],[101,6]]},"383":{"position":[[1,6],[112,6]]},"387":{"position":[[127,6]]},"390":{"position":[[24,6]]},"395":{"position":[[24,6]]},"400":{"position":[[24,6]]},"413":{"position":[[246,6]]},"415":{"position":[[41,6],[108,6]]},"445":{"position":[[1,6]]},"446":{"position":[[1,6]]},"448":{"position":[[127,6]]},"452":{"position":[[43,6]]},"458":{"position":[[43,6]]},"478":{"position":[[166,6]]},"494":{"position":[[171,6]]},"507":{"position":[[24,6]]},"514":{"position":[[36,6]]},"515":{"position":[[45,6],[955,6]]},"534":{"position":[[127,6]]},"538":{"position":[[40,6]]},"548":{"position":[[365,6]]},"556":{"position":[[127,6]]},"571":{"position":[[520,6],[670,6]]},"573":{"position":[[131,6]]},"581":{"position":[[24,6],[197,6],[395,6]]},"582":{"position":[[41,6],[283,6]]},"591":{"position":[[1,6]]},"599":{"position":[[166,6]]},"608":{"position":[[1,6],[141,6]]},"609":{"position":[[1,6]]},"611":{"position":[[127,6]]},"617":{"position":[[442,6],[594,6]]},"623":{"position":[[44,6]]},"629":{"position":[[41,6]]},"635":{"position":[[24,6]]},"659":{"position":[[81,6]]},"661":{"position":[[146,6],[460,6]]},"683":{"position":[[95,6],[268,6]]},"685":{"position":[[112,6]]},"698":{"position":[[42,6]]},"704":{"position":[[41,6]]},"718":{"position":[[35,6]]},"720":{"position":[[127,6]]},"745":{"position":[[42,6]]},"750":{"position":[[24,6]]},"753":{"position":[[1628,6]]},"766":{"position":[[24,6]]},"767":{"position":[[2438,6]]},"780":{"position":[[1,6]]},"789":{"position":[[24,6]]},"792":{"position":[[2419,6]]},"793":{"position":[[1651,6]]},"807":{"position":[[24,6]]},"808":{"position":[[1601,6]]},"823":{"position":[[24,6]]},"824":{"position":[[2550,6]]},"840":{"position":[[168,6]]},"849":{"position":[[111,6],[1790,6]]},"855":{"position":[[24,6],[151,6]]},"859":{"position":[[127,6]]},"894":{"position":[[43,6]]},"903":{"position":[[1,6]]},"904":{"position":[[2365,6]]},"915":{"position":[[1,6]]},"918":{"position":[[2657,6]]},"919":{"position":[[2558,6]]},"930":{"position":[[1,6]]},"931":{"position":[[2080,6]]},"947":{"position":[[283,6]]},"963":{"position":[[1,6]]},"987":{"position":[[35,6],[99,6]]},"988":{"position":[[95,6],[145,6]]},"989":{"position":[[439,6],[731,6]]},"991":{"position":[[127,6]]},"995":{"position":[[40,6]]},"1002":{"position":[[35,6],[99,6]]},"1003":{"position":[[95,6],[145,6]]},"1004":{"position":[[522,6],[814,6]]},"1009":{"position":[[127,6]]},"1018":{"position":[[1,6]]},"1031":{"position":[[24,6]]},"1043":{"position":[[1893,6]]},"1051":{"position":[[2081,6]]},"1059":{"position":[[1927,6]]},"1066":{"position":[[1,6]]},"1067":{"position":[[430,6],[670,6]]},"1070":{"position":[[127,6]]},"1081":{"position":[[119,6]]},"1082":{"position":[[85,6],[132,6]]},"1083":{"position":[[61,6],[132,6]]},"1085":{"position":[[147,6]]},"1122":{"position":[[24,6]]},"1136":{"position":[[24,6]]},"1138":{"position":[[67,6]]},"1142":{"position":[[24,6],[222,6]]},"1149":{"position":[[24,6],[670,6]]},"1160":{"position":[[24,6],[385,6]]},"1168":{"position":[[24,6],[222,6]]},"1176":{"position":[[24,6],[602,6]]},"1177":{"position":[[468,6]]},"1185":{"position":[[24,6],[402,6]]},"1194":{"position":[[24,6],[612,6]]},"1203":{"position":[[24,6],[773,6]]},"1204":{"position":[[25,6],[333,6]]},"1211":{"position":[[24,6]]},"1218":{"position":[[24,6]]},"1226":{"position":[[24,6],[413,6]]},"1227":{"position":[[84,6],[257,6]]},"1228":{"position":[[91,6]]},"1243":{"position":[[24,6],[190,6]]},"1244":{"position":[[1,6]]},"1245":{"position":[[1,6],[394,6],[546,6]]},"1251":{"position":[[1,6]]},"1258":{"position":[[24,6],[264,6]]},"1274":{"position":[[24,6]]},"1281":{"position":[[24,6]]},"1295":{"position":[[24,6]]},"1303":{"position":[[1723,6]]},"1309":{"position":[[24,6]]},"1319":{"position":[[24,6]]},"1322":{"position":[[62,6]]},"1332":{"position":[[24,6]]},"1335":{"position":[[62,6]]},"1343":{"position":[[24,6]]},"1354":{"position":[[24,6],[437,6]]},"1365":{"position":[[24,6]]},"1372":{"position":[[24,6]]},"1373":{"position":[[1330,6]]},"1374":{"position":[[1334,6]]},"1382":{"position":[[24,6],[101,6],[656,6]]},"1388":{"position":[[259,6],[493,6]]},"1391":{"position":[[450,6]]},"1396":{"position":[[24,6]]},"1397":{"position":[[1162,6]]},"1398":{"position":[[1165,6]]},"1406":{"position":[[24,6]]},"1409":{"position":[[1166,6]]},"1417":{"position":[[24,6]]},"1425":{"position":[[24,6]]},"1447":{"position":[[584,6]]},"1448":{"position":[[135,6]]},"1479":{"position":[[308,6]]}},"keywords":{}}],["you'r",{"_index":329,"title":{},"content":{"11":{"position":[[1233,6]]},"13":{"position":[[68,6]]},"27":{"position":[[470,6]]},"32":{"position":[[77,6]]},"68":{"position":[[66,6]]},"79":{"position":[[188,6]]},"81":{"position":[[2355,6]]},"82":{"position":[[1333,6]]},"83":{"position":[[395,6]]},"99":{"position":[[722,6]]},"107":{"position":[[101,6]]},"138":{"position":[[479,6]]},"139":{"position":[[50,6]]},"140":{"position":[[32,6],[395,6]]},"143":{"position":[[58,6]]},"154":{"position":[[1263,6],[1296,6],[1534,6]]},"162":{"position":[[1639,6]]},"163":{"position":[[376,6]]},"164":{"position":[[212,6]]},"165":{"position":[[649,6]]},"170":{"position":[[238,6]]},"177":{"position":[[144,6],[290,6]]},"183":{"position":[[4369,6],[4541,6],[4667,6]]},"185":{"position":[[197,6]]},"189":{"position":[[328,6]]},"191":{"position":[[179,6]]},"217":{"position":[[1636,6],[2114,6]]},"228":{"position":[[19,6]]},"229":{"position":[[19,6]]},"241":{"position":[[478,6]]},"259":{"position":[[1409,6],[2955,6]]},"263":{"position":[[393,6]]},"264":{"position":[[303,6],[800,6]]},"267":{"position":[[563,6]]},"275":{"position":[[339,6],[1072,6]]},"290":{"position":[[1580,6]]},"301":{"position":[[1260,7]]},"307":{"position":[[492,6],[769,6]]},"309":{"position":[[167,6],[1431,6]]},"326":{"position":[[1362,6]]},"382":{"position":[[119,6]]},"387":{"position":[[91,6],[358,6]]},"392":{"position":[[457,6]]},"397":{"position":[[614,6]]},"417":{"position":[[628,6],[2126,6]]},"427":{"position":[[187,6]]},"444":{"position":[[122,6]]},"448":{"position":[[91,6]]},"478":{"position":[[321,6]]},"485":{"position":[[485,6]]},"488":{"position":[[517,6]]},"517":{"position":[[210,6]]},"534":{"position":[[91,6]]},"548":{"position":[[482,6]]},"556":{"position":[[91,6]]},"573":{"position":[[95,6]]},"577":{"position":[[306,6]]},"588":{"position":[[301,6]]},"595":{"position":[[1844,6]]},"599":{"position":[[321,6]]},"611":{"position":[[91,6]]},"657":{"position":[[670,6]]},"659":{"position":[[674,6]]},"673":{"position":[[485,6]]},"676":{"position":[[517,6]]},"688":{"position":[[485,6]]},"691":{"position":[[517,6]]},"720":{"position":[[91,6]]},"754":{"position":[[575,6]]},"792":{"position":[[165,6],[1487,6]]},"794":{"position":[[603,6],[781,6]]},"809":{"position":[[603,6],[781,6]]},"825":{"position":[[617,6]]},"840":{"position":[[368,6]]},"849":{"position":[[311,6]]},"859":{"position":[[91,6]]},"912":{"position":[[1610,6]]},"918":{"position":[[165,6]]},"987":{"position":[[4,6]]},"988":{"position":[[4,6]]},"991":{"position":[[91,6],[712,6]]},"1002":{"position":[[4,6]]},"1003":{"position":[[4,6]]},"1009":{"position":[[91,6],[775,6]]},"1070":{"position":[[91,6]]},"1083":{"position":[[4,6]]},"1085":{"position":[[112,6]]},"1125":{"position":[[406,6]]},"1144":{"position":[[767,6]]},"1165":{"position":[[232,6]]},"1170":{"position":[[767,6]]},"1182":{"position":[[258,6]]},"1191":{"position":[[260,6]]},"1247":{"position":[[82,6]]},"1262":{"position":[[260,6]]},"1286":{"position":[[660,6],[838,6]]},"1301":{"position":[[674,6]]},"1325":{"position":[[660,6],[838,6]]},"1389":{"position":[[259,6]]},"1449":{"position":[[1,6],[89,6]]},"1461":{"position":[[285,6],[486,6]]}},"keywords":{}}],["you'v",{"_index":154,"title":{},"content":{"4":{"position":[[160,6]]},"27":{"position":[[221,6]]},"136":{"position":[[73,6]]},"165":{"position":[[842,6]]},"169":{"position":[[1233,6]]},"173":{"position":[[1157,6]]},"174":{"position":[[85,6]]},"193":{"position":[[1,6]]},"207":{"position":[[1545,6]]},"218":{"position":[[10,6],[2021,6]]},"219":{"position":[[10,6]]},"225":{"position":[[7,6]]},"230":{"position":[[308,6]]},"241":{"position":[[21,6],[135,6],[312,6]]},"270":{"position":[[1781,6]]},"574":{"position":[[487,6]]}},"keywords":{}}],["your",{"_index":1046,"title":{},"content":{"70":{"position":[[269,5]]},"1076":{"position":[[133,5],[285,5]]},"1356":{"position":[[371,6]]}},"keywords":{}}],["your_client_id",{"_index":5145,"title":{},"content":{"992":{"position":[[141,16]]},"1010":{"position":[[224,16]]},"1016":{"position":[[172,16]]},"1363":{"position":[[192,16]]}},"keywords":{}}],["your_estuary_refresh_token",{"_index":2654,"title":{},"content":{"250":{"position":[[421,29]]}},"keywords":{}}],["your_group_id",{"_index":2656,"title":{},"content":{"250":{"position":[[463,16]]}},"keywords":{}}],["your_key",{"_index":2069,"title":{},"content":{"183":{"position":[[1199,9],[1234,8],[1263,9]]},"268":{"position":[[831,9],[866,8],[895,9]]},"269":{"position":[[456,9],[491,8],[520,9]]}},"keywords":{}}],["your_topic_nam",{"_index":2659,"title":{},"content":{"250":{"position":[[567,18]]}},"keywords":{}}],["your_usernam",{"_index":4568,"title":{},"content":{"748":{"position":[[177,15]]}},"keywords":{}}],["yourprefix",{"_index":2068,"title":{},"content":{"183":{"position":[[1035,11]]}},"keywords":{}}],["yourprefix/wikipedia/us",{"_index":2063,"title":{},"content":{"183":{"position":[[442,25],[1141,25],[3527,25]]},"184":{"position":[[822,25]]}},"keywords":{}}],["yourprefix/yournam",{"_index":2089,"title":{},"content":{"184":{"position":[[305,19]]}},"keywords":{}}],["yourschemasinto",{"_index":958,"title":{},"content":{"64":{"position":[[225,15]]}},"keywords":{}}],["yourself",{"_index":2028,"title":{},"content":{"174":{"position":[[70,9]]},"281":{"position":[[3307,9]]},"366":{"position":[[419,9]]},"903":{"position":[[445,9]]},"915":{"position":[[445,9]]},"930":{"position":[[445,9]]},"963":{"position":[[599,9]]}},"keywords":{}}],["youtub",{"_index":5379,"title":{"1098":{"position":[[0,7]]}},"content":{"1099":{"position":[[56,7]]},"1100":{"position":[[250,7]]},"1101":{"position":[[329,7]]},"1102":{"position":[[90,7]]}},"keywords":{}}],["you’d",{"_index":6670,"title":{},"content":{"1472":{"position":[[117,5]]}},"keywords":{}}],["you’ll",{"_index":2208,"title":{},"content":{"199":{"position":[[36,6]]},"205":{"position":[[298,6]]},"206":{"position":[[970,6]]},"209":{"position":[[142,6],[248,6]]},"212":{"position":[[278,6]]},"232":{"position":[[118,6],[354,6],[480,6]]},"234":{"position":[[352,6]]},"239":{"position":[[1692,6]]},"243":{"position":[[272,6]]},"252":{"position":[[84,6]]},"253":{"position":[[60,6],[112,6],[1143,6]]},"294":{"position":[[91,6]]},"295":{"position":[[155,6],[950,6],[1489,6],[1541,6]]},"312":{"position":[[91,6]]},"313":{"position":[[60,6],[112,6],[1143,6],[3484,6]]},"315":{"position":[[215,6]]},"1236":{"position":[[40,6]]},"1264":{"position":[[40,6]]}},"keywords":{}}],["you’r",{"_index":2226,"title":{},"content":{"204":{"position":[[737,6]]},"237":{"position":[[2863,6]]},"239":{"position":[[1397,6]]},"253":{"position":[[998,6]]},"295":{"position":[[1699,6],[3921,6]]},"313":{"position":[[998,6]]}},"keywords":{}}],["you’v",{"_index":2612,"title":{},"content":{"240":{"position":[[4295,6]]}},"keywords":{}}],["ywp8mdvkqwpouzw6wneitcgduacx5u/1jeggmuirgx2st5kcqqdsstfwdcyqbdhr",{"_index":1247,"title":{},"content":{"83":{"position":[[1832,64]]},"371":{"position":[[751,64]]},"1139":{"position":[[638,64]]}},"keywords":{}}],["yyyi",{"_index":3492,"title":{},"content":{"387":{"position":[[1234,4]]},"448":{"position":[[982,4]]},"496":{"position":[[450,4]]},"517":{"position":[[1514,4],[2066,4],[2679,4],[3840,4]]},"534":{"position":[[1479,4]]},"573":{"position":[[747,4]]},"584":{"position":[[802,4]]},"670":{"position":[[540,4]]},"747":{"position":[[712,4],[929,4]]},"859":{"position":[[535,4]]},"895":{"position":[[198,4]]},"897":{"position":[[104,4]]},"959":{"position":[[248,4]]},"982":{"position":[[250,4]]},"1009":{"position":[[872,4]]},"1085":{"position":[[806,4],[1210,4]]},"1094":{"position":[[376,4]]},"1107":{"position":[[175,4]]},"1133":{"position":[[869,4]]}},"keywords":{}}],["z",{"_index":81,"title":{},"content":{"2":{"position":[[364,2],[428,3]]},"341":{"position":[[301,1]]},"1437":{"position":[[1057,1]]}},"keywords":{}}],["zelda",{"_index":1717,"title":{},"content":{"128":{"position":[[435,6],[637,5],[732,5]]},"129":{"position":[[1132,5]]}},"keywords":{}}],["zelda"",{"_index":1732,"title":{},"content":{"130":{"position":[[284,11]]}},"keywords":{}}],["zendesk",{"_index":3388,"title":{"1103":{"position":[[0,7]]},"1127":{"position":[[0,7]]}},"content":{"364":{"position":[[3548,7],[3607,7],[3624,7],[3686,7]]},"660":{"position":[[1108,7],[1118,7]]},"1104":{"position":[[56,7]]},"1105":{"position":[[3,7]]},"1106":{"position":[[251,7]]},"1107":{"position":[[140,7],[302,7],[462,7]]},"1108":{"position":[[89,7]]},"1128":{"position":[[56,7]]},"1129":{"position":[[51,7]]},"1130":{"position":[[19,7]]},"1131":{"position":[[19,7],[143,7],[161,7],[188,7]]},"1132":{"position":[[251,7]]},"1133":{"position":[[341,7],[834,7],[996,7],[1258,7]]},"1134":{"position":[[89,7]]}},"keywords":{}}],["zero",{"_index":1885,"title":{},"content":{"159":{"position":[[919,5],[1040,5]]},"320":{"position":[[2271,4]]},"343":{"position":[[1055,4]]},"419":{"position":[[1998,5]]},"441":{"position":[[607,5]]},"504":{"position":[[1627,5]]},"547":{"position":[[2000,5]]},"639":{"position":[[1625,5]]},"757":{"position":[[1331,4]]},"770":{"position":[[1331,4]]},"797":{"position":[[1331,4]]},"812":{"position":[[1331,4]]},"828":{"position":[[1331,4]]},"867":{"position":[[2039,4]]},"1023":{"position":[[1981,5]]},"1443":{"position":[[1,4]]},"1444":{"position":[[1,4]]},"1455":{"position":[[112,4]]}},"keywords":{}}],["zerofil",{"_index":6243,"title":{},"content":{"1292":{"position":[[6767,8]]},"1306":{"position":[[6767,8]]},"1329":{"position":[[6767,8]]}},"keywords":{}}],["zip",{"_index":2108,"title":{},"content":{"189":{"position":[[278,6]]},"418":{"position":[[155,3]]},"439":{"position":[[412,3]]},"546":{"position":[[892,3]]},"638":{"position":[[184,3]]},"1022":{"position":[[221,3]]}},"keywords":{}}],["zipgzipzstd",{"_index":3900,"title":{},"content":{"499":{"position":[[244,11]]},"634":{"position":[[236,11]]}},"keywords":{}}],["zipgzipzstdnon",{"_index":3612,"title":{},"content":{"419":{"position":[[836,15]]},"440":{"position":[[852,15]]},"504":{"position":[[768,15]]},"547":{"position":[[837,15]]},"639":{"position":[[766,15]]},"1023":{"position":[[817,15]]}},"keywords":{}}],["zombi",{"_index":6478,"title":{},"content":{"1437":{"position":[[877,6]]}},"keywords":{}}],["zone",{"_index":4563,"title":{"754":{"position":[[25,5]]},"794":{"position":[[23,5]]},"809":{"position":[[23,5]]},"825":{"position":[[23,5]]},"1286":{"position":[[23,5]]},"1301":{"position":[[23,5]]},"1325":{"position":[[23,5]]}},"content":{"747":{"position":[[449,4]]},"750":{"position":[[1142,4]]},"752":{"position":[[1025,5]]},"754":{"position":[[110,4],[341,4],[436,4],[908,6],[947,4],[1176,4]]},"757":{"position":[[630,4]]},"766":{"position":[[1142,4]]},"770":{"position":[[630,4]]},"789":{"position":[[1543,4]]},"791":{"position":[[1059,5]]},"794":{"position":[[214,4],[309,4],[1114,6],[1153,4],[1380,4]]},"797":{"position":[[630,4]]},"807":{"position":[[1130,4]]},"809":{"position":[[214,4],[309,4],[1114,6],[1153,4],[1380,4]]},"812":{"position":[[630,4]]},"823":{"position":[[1130,4]]},"825":{"position":[[214,4],[309,4],[950,6],[989,4],[1216,4]]},"828":{"position":[[630,4]]},"1096":{"position":[[370,4],[393,4]]},"1285":{"position":[[642,4]]},"1286":{"position":[[243,4],[366,4],[1171,6],[1210,4],[1466,4]]},"1292":{"position":[[6804,4]]},"1300":{"position":[[642,4]]},"1301":{"position":[[243,4],[366,4],[1007,6],[1046,4],[1302,4]]},"1306":{"position":[[6804,4]]},"1324":{"position":[[642,4]]},"1325":{"position":[[243,4],[366,4],[1171,6],[1210,4],[1466,4]]},"1329":{"position":[[6804,4]]},"1379":{"position":[[5306,4]]},"1403":{"position":[[5306,4]]},"1414":{"position":[[5306,4]]},"1452":{"position":[[679,4],[3204,4],[3250,4],[3521,4]]}},"keywords":{}}],["zonessystem",{"_index":5375,"title":{},"content":{"1096":{"position":[[414,11]]}},"keywords":{}}],["zstandard",{"_index":26,"title":{},"content":{"1":{"position":[[322,10]]}},"keywords":{}}]],"pipeline":["stemmer"]} \ No newline at end of file diff --git a/pr-preview/pr-1594/lunr-index.json b/pr-preview/pr-1594/lunr-index.json deleted file mode 100644 index 7a21a1c599..0000000000 --- a/pr-preview/pr-1594/lunr-index.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,1221.28]],["content/0",[]],["keywords/0",[]],["title/1",[1,390.556]],["content/1",[0,14.879,2,1.149,3,3.413,4,5.888,5,9.685,6,7.473,7,6.54,8,3.993,9,7.108,10,9.685,11,3.009,12,9.685,13,2.443,14,3.831,15,6.714,16,1.595,17,15.768,18,2.468,19,3.732,20,3.674,21,10.224,22,1.864,23,9.731,24,4.966,25,3.133,26,11.042,27,11.042,28,19.172,29,6.855,30,6.751,31,5.457,32,11.042,33,6.636,34,12.119,35,7.303,36,6.228,37,7.926,38,11.042,39,6.636,40,7.019,41,5.476,42,7.672,43,4.252,44,12.342,45,11.042,46,9.685,47,4.995,48,12.413,49,2.841,50,11.042,51,11.042,52,4.477,53,8.961,54,6.272,55,8.264,56,9.685,57,6.444,58,11.042,59,8.469,60,6.167,61,3.855,62,4.568]],["keywords/1",[]],["title/2",[63,1009.408,64,639.394]],["content/2",[0,14.636,1,4.043,2,1.325,3,3.644,13,4.989,18,2.846,25,5.091,49,3.276,63,17.408,64,12.622,65,8.156,66,2.812,67,6.067,68,6.134,69,5.006,70,5.123,71,5.523,72,8.095,73,6.206,74,9.326,75,7.432,76,19.292,77,13.694,78,6.945,79,3.437,80,9.763,81,15.736,82,14.636,83,6.999,84,12.734,85,10.335,86,5.847,87,5.29,88,7.654,89,2.744,90,11.17,91,12.734,92,5.678,93,8.973,94,8.545,95,9.531,96,12.734,97,5.678,98,7.906,99,12.734]],["keywords/2",[]],["title/3",[17,924.895,24,357.029]],["content/3",[0,11.821,2,1.206,6,10.581,17,13.229,21,10.733,22,1.127,23,10.082,24,6.191,34,8.676,43,4.405,47,5.244,49,5.072,59,7.41,61,5.857,62,4.796,63,8.489,64,10.023,65,5.27,70,4.664,79,3.129,100,7.667,101,9.745,102,6.274,103,5.005,104,10.733,105,7.369,106,4.219,107,6.052,108,5.715,109,6.765,110,5.434,111,8.489,112,3.879,113,2.729,114,10.168,115,4.32,116,9.79,117,11.592,118,8.887,119,6.703,120,8.832,121,16.775,122,11.592,123,7.782,124,11.592,125,16.775,126,11.592,127,2.829,128,10.415,129,11.592,130,5.219,131,11.592,132,13.615,133,16.775,134,11.592,135,10.733,136,4.475,137,8.881,138,11.592,139,5.323,140,10.168,141,9.745,142,11.592,143,11.592,144,8.489,145,5.405,146,5.971,147,6.227,148,9.408,149,9.127]],["keywords/3",[]],["title/4",[148,1118.642,149,1085.254]],["content/4",[2,1.325,3,2.899,15,3.169,17,8.545,22,1.238,24,5.38,59,5.625,61,4.446,64,5.907,70,5.123,89,2.744,116,7.432,120,5.705,123,5.907,128,7.906,135,11.791,145,5.938,146,6.56,147,11.157,148,18.301,149,10.027,150,11.791,151,10.027,152,6.892,153,12.734,154,8.307,155,5.026,156,8.677,157,10.335,158,9.326,159,10.027,160,5.969,161,4.952,162,5.269,163,4.237,164,11.791,165,9.763,166,7.577,167,7.363,168,3.622,169,12.734,170,10.335,171,11.17,172,4.746,173,8.461,174,7.234,175,6.945,176,10.027,177,17.94,178,12.224,179,9.366,180,6.169,181,5.335,182,11.17,183,10.706,184,12.734,185,4.446,186,5.582,187,10.706,188,8.307,189,9.531,190,10.027,191,7.503,192,6.316,193,9.326,194,8.307,195,1.745]],["keywords/4",[]],["title/5",[196,534.023,197,782.945]],["content/5",[]],["keywords/5",[]],["title/6",[196,671.515]],["content/6",[2,2.485,3,3.604,22,1.914,49,3.749,64,6.758,65,6.623,78,10.736,103,8.5,113,3.429,130,6.559,155,5.75,160,10.452,186,4.533,195,2.697,196,9.664,198,6.656,199,8.584,200,11.824,201,12.248,202,10.09,203,13.49,204,13.49,205,6.83,206,6.028,207,6.235,208,8.145,209,11.832,210,12.779,211,8.848,212,9.503,213,8.944,214,6.941,215,9.635,216,8.282,217,7.606,218,8.944,219,6.591,220,6.182,221,7.315,222,2.312,223,3.191,224,1.655]],["keywords/6",[]],["title/7",[196,534.023,225,663.969]],["content/7",[2,1.419,3,3.04,4,7.268,15,3.392,18,3.046,31,3.523,33,8.192,49,3.507,70,5.484,196,9.441,207,5.833,208,5.639,209,8.192,216,9.061,217,9.821,223,2.985,224,1.548,225,12.137,226,3.071,227,6.048,228,6.449,229,5.71,230,4.616,231,8.599,232,8.192,233,13.63,234,12.62,235,7.021,236,13.63,237,5.911,238,7.551,239,13.63,240,12.62,241,5.663,242,9.287,243,13.63,244,6.259,245,15.814,246,7.613,247,13.63,248,11.459,249,11.955,250,7.613,251,4.066,252,13.63,253,10.449,254,6.801,255,7.742,256,13.63,257,11.459,258,2.72]],["keywords/7",[]],["title/8",[197,984.527]],["content/8",[2,2.111,3,3.279,19,2.812,22,1.972,43,3.203,49,5.22,64,5.66,65,5.546,69,3.404,72,7.756,74,12.745,79,5.476,97,5.44,103,5.268,113,2.872,130,5.492,160,9.51,168,2.463,186,3.796,191,7.188,195,3.204,197,6.93,198,5.574,199,7.188,200,9.902,201,10.257,202,8.449,207,7.448,216,10.23,218,7.49,219,5.519,220,7.384,222,2.761,223,2.672,228,3.388,251,3.64,259,16.197,260,12.2,261,4.531,262,5.268,263,5.343,264,10.701,265,7.12,266,5.812,267,7.854,268,4.547,269,8.597,270,5.444,271,12.2,272,6.243,273,8.069,274,6.414,275,7.49,276,8.187,277,2.572,278,12.2,279,4.012,280,12.2,281,2.812,282,2.32]],["keywords/8",[]],["title/9",[196,443.265,197,649.882,283,429.303]],["content/9",[89,4.79,196,8.611,197,12.625,283,8.34,284,6.682]],["keywords/9",[]],["title/10",[11,375.556,285,887.311]],["content/10",[]],["keywords/10",[]],["title/11",[286,1163.024]],["content/11",[1,1.861,2,2.184,3,4.067,8,5.801,11,4.955,13,1.827,22,0.803,43,2.168,49,2.125,64,6.023,65,5.902,73,5.549,97,5.789,102,7.026,103,3.566,106,3.006,128,5.127,168,2.621,186,4.991,195,3.4,218,5.07,220,3.504,222,3.484,223,4.597,231,6.405,237,3.582,251,6.55,255,11.23,261,3.067,263,2.535,268,3.078,277,2.737,285,5.316,287,3.534,288,4.282,289,3.792,290,3.55,291,5.759,292,8.258,293,4.612,294,5.187,295,4.312,296,3.247,297,3.489,298,4.199,299,5.819,300,5.387,301,7.244,302,6.181,303,3.534,304,5.316,305,6.048,306,8.258,307,6.122,308,8.258,309,6.702,310,6.702,311,8.258,312,3.534,313,6.048,314,8.258,315,13.487,316,3.235,317,5.719,318,9.148,319,5.627,320,6.439,321,6.219,322,6.502,323,5.127,324,4.047,325,3.956,326,4.913,327,5.316,328,7.647,329,3.211,330,2.788,331,8.991,332,5.187,333,5.387,334,3.403,335,1.861,336,8.258,337,7.647,338,4.312,339,5.25,340,3.571,341,9.508,342,8.258,343,3.067,344,7.244,345,3.582,346,8.258,347,2.976,348,4.404,349,4.819,350,5.462,351,4.775,352,2.384]],["keywords/11",[]],["title/12",[22,134.003,285,887.311]],["content/12",[1,3.599,2,2.178,3,3.382,11,4.351,25,4.532,185,5.575,195,2.188,222,2.534,231,6.375,237,6.926,251,6.963,261,7.772,285,13.471,291,4.382,298,8.119,331,11.06,341,11.695,351,13.496,353,9.804,354,3.94,355,4.109,356,9.071,357,7.486,358,9.151,359,6.865,360,7.155,361,9.501,362,12.709,363,8.226,364,8.994,365,10.562,366,10.281,367,6.056,368,5.813,369,8.395,370,7.155,371,15.969]],["keywords/12",[]],["title/13",[11,375.556,285,887.311]],["content/13",[1,1.929,2,2.093,3,3.444,11,2.333,13,1.894,25,2.43,30,2.738,43,2.248,64,3.972,65,3.892,66,4.44,69,5.175,89,1.845,113,3.865,128,8.292,136,3.305,161,5.194,168,2.697,195,2.25,214,4.079,220,5.667,222,1.359,223,4.405,229,3.587,231,3.418,237,8.044,251,5.533,255,9.327,258,1.709,261,3.18,270,4.178,277,1.805,283,5.012,285,15.23,290,3.681,291,5.519,296,3.367,303,5.716,307,2.882,324,4.196,326,5.094,329,3.33,330,2.891,334,3.528,335,1.929,347,3.086,354,2.113,355,2.203,363,4.41,366,10.571,368,3.117,372,5.725,373,6.146,374,3.169,375,4.706,376,6.949,377,6.835,378,6.033,379,5.746,380,8.027,381,5.094,382,4.634,383,4.706,384,5.512,385,2.808,386,4.221,387,4.148,388,6.742,389,4.533,390,8.562,391,5.256,392,5.378,393,8.562,394,3.836,395,7.198,396,3.557,397,3.469,398,12.29,399,3.354,400,5.667,401,8.091,402,10.239,403,7.51,404,5.594,405,4.951,406,6.742,407,7.928,408,3.649,409,4.634,410,5.146,411,4.533,412,7.928,413,3.952,414,8.962,415,4.599,416,4.44,417,4.822,418,6.742,419,8.562]],["keywords/13",[]],["title/14",[11,266.446,251,291.737,351,565.432,377,500.408]],["content/14",[3,3.951,11,5.576,13,4.843,14,7.965,15,5.094,18,3.451,19,4.718,20,3.445,43,4.848,52,8.299,64,4.803,65,4.707,69,2.889,113,3.634,119,5.987,127,2.527,139,4.754,168,4.42,220,4.393,222,2.45,223,4.482,251,6.849,255,8.77,277,2.183,282,1.969,285,6.665,291,2.841,324,5.074,335,3.479,351,8.927,357,8.654,372,4.765,377,5.298,383,5.69,404,5.26,406,8.152,420,7.582,421,5.736,422,3.187,423,5.987,424,5.881,425,17.236,426,3.019,427,5.601,428,5.715,429,6.428,430,5.831,431,10.354,432,8.271,433,9.587,434,5.198,435,5.264,436,7.749,437,7.901,438,6.428,439,8.174,440,4.011,441,8.152,442,7.749,443,6.042,444,7.582,445,3.17,446,10.354]],["keywords/14",[]],["title/15",[447,686.675]],["content/15",[]],["keywords/15",[]],["title/16",[64,639.394,65,626.598]],["content/16",[0,7.744,2,1.144,3,2.608,4,5.86,11,2.994,13,2.431,15,2.735,17,7.374,22,1.068,24,4.18,25,3.119,43,2.886,49,2.828,59,8.445,61,5.633,63,14.002,64,12.275,65,10.201,66,2.426,79,5.687,85,8.919,88,6.605,89,3.477,152,5.948,155,4.338,250,6.138,254,5.483,270,3.438,284,3.304,293,6.138,295,5.738,345,4.766,447,7.575,448,3.825,449,7.611,450,9.639,451,9.639,452,6.475,453,10.99,454,10.99,455,5.777,456,16.074,457,8.566,458,8.445,459,13.565,460,10.99,461,8.604,462,10.99,463,7.374,464,2.753,465,6.343,466,6.605,467,4.456,468,6.605,469,4.054,470,10.99,471,10.176,472,10.99,473,10.99,474,10.99,475,10.99,476,10.99,477,8.425,478,10.99,479,10.99,480,10.99,481,6.747,482,10.99,483,8.048,484,10.99,485,7.03,486,10.99,487,10.99]],["keywords/16",[]],["title/17",[64,639.394,488,939.177]],["content/17",[2,1.685,3,2.617,15,6.657,19,3.732,20,5.387,31,4.185,64,12.408,71,4.789,79,2.981,115,4.115,181,4.626,185,5.653,186,5.965,191,6.505,223,3.546,227,3.55,263,7.214,268,6.034,277,2.328,321,5.289,334,4.55,340,2.458,375,8.899,452,6.505,456,9.283,459,13.612,461,8.634,464,4.057,465,7.005,485,4.811,488,13.064,489,5.204,490,3.081,491,6.935,492,7.926,493,8.634,494,10.95,495,5.973,496,10.224,497,11.042,498,8.264,499,11.042,500,9.283,501,11.042,502,11.042,503,14.758,504,5.544,505,5.614,506,11.042,507,11.042,508,11.042,509,6.505,510,10.224]],["keywords/17",[]],["title/18",[216,579.843,217,719.607]],["content/18",[]],["keywords/18",[]],["title/19",[93,971.224,217,719.607]],["content/19",[18,5.097,66,3.364,67,7.259,68,7.34,69,4.251,74,11.159,78,8.309,87,6.33,93,17.844,110,7.143,216,10.23,217,13.877,279,5.011,290,6.55,340,3.392,387,7.382,388,11.997,396,6.33,410,9.158,495,5.621,511,7.299,512,8.246,513,6.465,514,11.159,515,7.797,516,8.51,517,11.997,518,5.925,519,8.374,520,12.07,521,14.109,522,9.686,523,11.405,524,12.81,525,10.938,526,4.324,527,7.901]],["keywords/19",[]],["title/20",[262,748.351]],["content/20",[2,1.189,3,1.846,4,6.09,16,1.65,22,1.11,33,6.864,36,4.393,39,6.864,44,14.672,49,2.939,69,5.454,72,7.261,79,3.083,89,3.577,168,2.306,191,6.729,195,2.274,216,6.982,217,8.665,223,2.501,226,2.574,229,8.189,258,3.312,262,11.387,270,3.573,277,2.408,290,4.91,307,3.845,316,4.474,330,3.856,356,12.947,368,4.157,369,6.004,384,10.684,387,5.533,396,4.745,404,3.891,422,3.516,449,13.538,495,7.211,511,5.471,528,7.45,529,6.936,530,6.665,531,7.664,532,6.327,533,5.218,534,10.018,535,11.421,536,7.261,537,8.199,538,7.261,539,8.048,540,5.533,541,5.923,542,8.915,543,10.575,544,5.845,545,7.664,546,6.55,547,5.883,548,9.602,549,7.261,550,7.78,551,4.631,552,5.883,553,8.048,554,7.782,555,9.602]],["keywords/20",[]],["title/21",[196,534.023,212,899.071]],["content/21",[0,12.941,3,2.968,7,5.318,16,1.903,22,1.28,59,8.112,61,4.597,62,5.448,100,13.986,103,9.131,186,5.714,195,2.516,196,8.194,212,13.795,213,11.274,214,6.273,216,9.626,217,9.588,221,9.22,222,2.089,224,1.496,258,3.665,262,5.685,268,6.844,277,3.872,291,3.613,400,7.792,464,3.299,540,6.379,556,5.736,557,8.075,558,10.686,559,15.591,560,13.167,561,8.476,562,8.708,563,7.613,564,12.146,565,13.167,566,13.167,567,13.167,568,5.028,569,6.828,570,8.708,571,9.452,572,7.997,573,8.174,574,5.986,575,3.159]],["keywords/21",[]],["title/22",[227,557.255]],["content/22",[]],["keywords/22",[]],["title/23",[2,143.445,195,188.839]],["content/23",[2,2.178,3,2.581,19,3.681,49,4.109,66,3.526,89,3.442,195,2.867,222,2.534,227,5.135,294,10.03,304,13.471,305,15.325,309,12.961,310,12.961,332,10.03,375,12.828,468,9.598,494,8.281,576,12.243,577,11.953,578,8.578,579,7.26,580,15.969,581,15.969,582,20.926,583,15.969,584,15.969,585,15.969,586,15.969,587,20.926,588,23.341,589,15.969,590,15.969,591,15.969,592,15.969,593,15.969]],["keywords/23",[]],["title/24",[1,257.805,2,119.066,24,296.351]],["content/24",[1,5.597,2,1.896,16,2.633,18,4.073,24,6.433,36,7.009,49,4.688,66,4.023,161,7.086,227,7.321,228,5.06,261,6.767,283,8.544,312,7.799,343,6.767,366,11.73,375,12.514,396,7.57,594,8.125,595,18.221,596,11.583]],["keywords/24",[]],["title/25",[2,119.066,354,282.279,355,294.361]],["content/25",[1,5.26,15,4.72,22,1.844,24,4.912,30,6.064,66,4.187,73,6.56,163,6.31,222,3.009,223,4.153,227,6.097,340,4.221,354,4.679,355,4.879,365,12.542,372,7.204,422,7.185,552,9.768,597,10.867,598,11.911]],["keywords/25",[]],["title/26",[599,748.351]],["content/26",[1,4.326,2,2.277,11,3.826,22,2.127,24,6.092,25,3.985,42,6.653,79,3.79,106,5.111,113,3.305,145,8.953,163,4.672,195,2.63,219,6.352,225,6.764,227,4.515,261,5.215,283,5.269,296,7.549,325,6.726,369,7.382,386,6.922,489,6.617,515,7.185,594,6.261,599,6.063,600,9.568,601,8.906,602,7.185,603,6.514,604,9.889,605,6.922,606,8.194,607,6.261,608,8.194,609,14.06,610,11.66,611,9.286,612,11.396,613,14.06,614,12.205,615,11.919,616,3.581,617,11.805,618,10.079,619,7.779,620,8.62,621,11.805]],["keywords/26",[]],["title/27",[622,898.75]],["content/27",[2,2.04,3,2.34,11,5.341,22,1.408,25,4.109,67,6.898,89,3.12,113,5.232,130,11.205,154,9.444,155,5.715,160,9.189,168,2.923,199,8.53,222,2.297,223,3.171,225,6.975,227,6.303,293,8.087,325,6.936,329,5.63,335,4.417,374,5.359,375,10.774,445,4.433,467,5.871,485,6.308,504,7.269,531,9.715,622,11.525,623,14.478,624,14.478,625,7.777,626,9.094,627,3.684,628,11.4,629,14.478,630,12.172,631,8.614,632,6.487,633,9.715,634,9.575,635,14.478,636,14.478,637,14.478,638,9.204]],["keywords/27",[]],["title/28",[639,1064.028]],["content/28",[]],["keywords/28",[]],["title/29",[2,143.445,283,517.202]],["content/29",[2,2.111,22,1.972,147,10.898,206,8.394,283,7.613,354,5.006,396,8.428,599,8.76,600,13.824,603,9.411,604,12.526,640,15.185,641,8.879,642,10.741]],["keywords/29",[]],["title/30",[206,570.267,354,340.075]],["content/30",[2,2.576,61,6.312,66,5.003,87,7.511,180,8.759,195,3.104,206,7.48,279,5.946,291,4.961,352,5.22,354,6.106,355,6.367,557,7.949,605,8.913,643,11.639,644,7.218,645,14.674,646,8.387,647,6.738,648,15.2,649,18.08]],["keywords/30",[]],["title/31",[599,748.351]],["content/31",[2,2.27,15,4.236,22,2.12,24,4.409,66,3.758,89,3.668,155,6.718,195,2.988,206,7.042,261,6.322,270,5.324,283,6.387,284,5.117,325,8.154,354,5.381,355,4.379,372,5.253,489,8.022,557,7.484,599,10.958,601,7.896,641,7.449,642,9.012,650,10.821,651,6.875,652,5.663,653,15.76,654,8.826,655,17.021,656,14.31]],["keywords/31",[]],["title/32",[639,846.169,657,971.224]],["content/32",[2,2.69,3,3.638,61,5.184,69,5.563,97,6.621,128,9.218,139,9.156,178,10.117,195,3.439,222,3.572,227,4.774,263,4.558,268,5.533,294,9.326,296,5.839,304,9.559,305,10.874,307,4.999,309,12.051,310,12.051,329,5.774,330,5.013,352,4.287,360,6.652,375,8.161,394,6.652,396,6.169,413,6.853,594,6.621,607,6.621,639,9.115,644,5.928,658,5.951,659,9.964,660,6.96,661,7.806,662,14.924,663,14.848,664,9.326,665,14.848,666,6.717]],["keywords/32",[]],["title/33",[227,557.255]],["content/33",[1,4.78,2,2.599,3,2.635,11,4.443,15,4.058,24,4.224,66,4.683,89,4.571,195,2.906,222,2.587,223,3.571,226,3.674,227,8.323,261,6.056,268,6.076,284,4.902,312,6.978,332,10.241,347,5.877,354,4.023,355,4.195,366,10.497,375,12.958,385,5.347,386,8.038,422,5.019,489,7.684,494,8.455,576,12.5,667,11.11]],["keywords/33",[]],["title/34",[3,280.117]],["content/34",[2,1.839,3,4.289,6,5.751,11,3.395,13,2.757,43,3.272,49,3.206,54,7.079,59,7.804,61,6.168,62,8.492,79,6.364,86,5.722,89,2.686,103,7.628,106,4.536,152,6.744,155,6.973,160,5.842,162,5.156,174,7.079,186,3.877,195,3.355,222,1.977,223,2.729,229,5.22,240,11.538,277,2.627,284,3.747,287,5.333,288,6.462,291,3.42,316,4.882,320,6.18,387,6.037,401,5.014,445,3.816,527,6.462,546,4.919,557,5.479,571,8.945,605,6.143,616,3.178,668,16.161,669,14.853,670,9.812,671,9.327,672,8.129,673,10.476,674,10.476,675,7.922,676,6.107,677,5.556,678,7.65,679,5.781,680,8.781,681,6.506,682,4.956,683,9.553]],["keywords/34",[]],["title/35",[222,275.003]],["content/35",[2,2.648,3,3.541,11,4.672,22,1.667,25,4.866,69,4.784,79,5.915,89,4.722,146,8.832,195,2.349,216,7.213,222,3.832,224,1.948,229,7.183,277,5.365,284,5.155,290,7.371,307,5.772,319,11.684,385,5.623,391,10.527,493,9.144,650,10.9,661,9.014,681,8.952]],["keywords/35",[]],["title/36",[223,379.576]],["content/36",[2,2.178,3,3.772,22,1.553,25,4.532,49,4.109,69,4.456,79,5.649,80,12.243,89,4.51,115,5.951,146,8.226,155,8.259,178,10.881,195,2.188,216,6.718,222,2.534,223,5.632,224,1.814,229,6.69,284,4.801,290,6.865,298,8.119,307,5.376,319,10.881,391,9.804,413,11.432,428,5.911,445,4.89,650,10.152,673,13.425,684,15.969,685,10.716,686,11.695]],["keywords/36",[]],["title/37",[258,345.873]],["content/37",[2,2.531,22,1.692,59,7.687,61,6.076,103,7.514,195,3.332,222,2.761,223,3.811,224,1.977,258,4.853,263,5.343,277,3.669,307,8.614,332,10.931,335,3.922,413,8.032,457,7.797,687,16.114,688,15.265,689,4.891,690,11.063,691,13.703,692,9.28,693,4.549,694,14.631]],["keywords/37",[]],["title/38",[224,196.887]],["content/38",[2,2.435,22,1.851,49,3.57,55,10.384,69,3.871,70,5.582,89,2.99,115,5.17,128,8.613,145,6.47,166,8.255,195,2.609,206,5.74,219,6.276,222,2.201,223,3.038,224,2.878,228,3.853,229,5.812,258,2.769,272,7.1,277,4.584,279,4.563,283,5.206,284,4.171,291,3.807,307,7.319,327,8.931,354,3.423,413,6.403,469,5.118,529,8.426,607,6.186,608,8.097,616,3.538,638,8.82,650,8.82,695,11.664,696,8.931,697,9.681,698,9.874,699,9.776,700,9.454,701,13.874,702,13.874,703,11.26,704,5.476,705,9.31,706,9.454,707,4.784,708,12.846,709,9.454]],["keywords/38",[]],["title/39",[639,846.169,710,1208.976]],["content/39",[30,6.602,89,4.45,186,6.424,352,5.961,602,10.566,607,9.207,639,12.676,644,8.243,658,8.275,696,13.292,711,13.656,712,11.348,713,16.758]],["keywords/39",[]],["title/40",[268,645.896]],["content/40",[3,3.575,7,7.029,22,2.151,25,4.939,79,4.698,89,4.767,214,8.291,263,5.343,268,9.062,277,3.669,284,5.232,290,7.481,291,4.776,320,8.631,394,7.797,550,8.158,578,9.349,602,8.906,666,7.873,689,4.891,714,6.793,715,14.125,716,16.114,717,8.684,718,14.125,719,9.565,720,11.352,721,8.58,722,11.352]],["keywords/40",[]],["title/41",[11,472.249]],["content/41",[2,2.441,3,3.525,11,6.696,15,3.474,36,5.368,43,3.665,66,3.082,79,6.332,89,3.008,97,6.223,106,5.08,115,5.201,145,6.508,152,7.554,162,5.775,181,5.847,186,4.342,195,2.988,205,6.543,216,5.872,227,4.487,234,12.923,284,4.196,316,7.49,378,9.835,395,11.734,494,7.237,516,7.795,527,7.237,552,7.189,562,9.231,672,9.104,681,9.982,692,7.443,705,9.366,723,13.957,724,13.957,725,13.957,726,12.923,727,10.221,728,7.795,729,12.242,730,8.476,731,5.775,732,11.328,733,9.835,734,12.923,735,9.104,736,7.389,737,12.923,738,9.835]],["keywords/41",[]],["title/42",[547,892.766]],["content/42",[2,1.958,3,3.938,4,7.268,11,3.714,13,5.712,22,1.829,31,4.862,42,6.458,59,6.021,60,7.613,70,5.484,79,6.801,89,4.642,162,5.639,168,3.798,172,5.079,181,5.71,191,8.03,195,1.867,223,4.717,251,4.066,263,4.184,270,4.264,284,4.098,289,6.259,335,3.071,391,8.368,432,6.106,485,5.938,518,5.3,523,10.202,544,6.975,547,9.689,578,7.322,579,6.196,664,8.561,720,8.891,739,8.561,740,13.63,741,7.433,742,12.62,743,8.109,744,9.784,745,11.062,746,6.166,747,9.014,748,7.322]],["keywords/42",[]],["title/43",[489,816.797]],["content/43",[2,1.673,3,3.785,6,7.421,22,1.563,25,4.563,79,4.341,83,8.838,89,4.53,139,9.652,195,2.203,268,8.727,284,4.834,321,7.703,385,5.273,391,9.872,438,9.983,489,12.145,494,8.338,547,8.283,607,7.17,621,13.518,632,7.204,661,12.312,748,11.292,749,7.975,750,12.035,751,15.394,752,9.174,753,11.543]],["keywords/43",[]],["title/44",[216,729.133]],["content/44",[2,1.628,3,4.129,49,4.026,79,5.573,86,7.185,128,9.714,161,6.085,195,2.829,216,8.686,222,3.276,223,4.522,227,6.639,229,6.555,251,4.668,258,3.123,268,7.695,277,3.299,290,6.726,291,5.666,303,6.697,360,7.01,385,5.131,391,9.606,413,7.221,518,6.085,666,7.078,754,15.647,755,17.358,756,13.155,757,15.647,758,10.348,759,12.32,760,12.32,761,8.739,762,15.647,763,15.647]],["keywords/44",[]],["title/45",[397,291.165,399,281.565]],["content/45",[3,3.772,8,5.775,42,7.567,66,3.526,112,5.344,155,6.303,195,2.188,215,10.562,222,3.32,223,4.583,224,2.377,258,4.176,270,4.995,277,3.367,307,5.376,335,3.599,345,6.926,397,5.432,399,4.275,413,7.37,445,4.89,579,9.513,652,5.313,676,7.827,691,12.574,693,5.47,733,11.253,764,11.463,765,15.969,766,9.804,767,8.709,768,15.969,769,12.961]],["keywords/45",[]],["title/46",[7,556.712,59,608.821]],["content/46",[2,2.429,3,3.772,7,10.213,22,1.844,59,11.967,61,6.621,62,9.657,89,4.087,130,8.537,195,2.598,215,12.542,284,5.702,312,8.116,770,13.888]],["keywords/46",[]],["title/47",[639,846.169,771,592.497]],["content/47",[2,2.505,22,1.939,89,4.297,116,11.637,207,8.534,244,9.156,283,7.482,404,6.793,639,12.241,658,7.991,660,9.347,713,16.183,771,10.345,772,16.183,773,15.7]],["keywords/47",[]],["title/48",[0,1221.28]],["content/48",[0,18.571,2,1.798,3,3.558,22,1.679,49,5.664,59,7.63,63,12.651,64,8.013,65,7.853,89,3.723,152,9.349,196,6.693,212,11.268,214,8.229,216,7.267,217,11.494,225,8.321,284,5.193,490,6.143,556,7.526,559,11.77,605,8.516,770,12.651,774,12.172,775,13.601,776,15.152,777,10.177]],["keywords/48",[]],["title/49",[216,579.843,217,719.607]],["content/49",[2,1.555,15,4.984,43,3.924,49,3.845,66,4.421,67,9.54,72,9.5,74,10.944,89,4.316,90,13.107,101,12.563,115,5.569,118,11.456,192,7.411,209,8.981,216,11.127,217,13.52,219,9.059,227,7.262,263,4.588,283,5.607,284,4.493,495,7.387,517,11.766,523,11.185,527,7.749,556,6.51,557,6.57,559,10.182,722,9.748,777,8.804,778,11.456,779,9.075,780,10.727,781,10.182,782,12.128,783,13.837]],["keywords/49",[]],["title/50",[447,686.675]],["content/50",[2,2.291,11,5.999,19,5.586,43,4.536,66,3.814,89,3.723,106,6.288,139,10.109,168,3.488,172,6.437,195,2.367,219,7.814,284,5.193,334,7.118,339,10.981,340,3.845,404,5.885,447,8.722,481,10.605,490,4.82,619,12.197,666,7.814,749,8.567,784,11.963,785,14.02,786,13.243,787,11.424,788,10.278]],["keywords/50",[]],["title/51",[222,275.003]],["content/51",[]],["keywords/51",[]],["title/52",[224,196.887]],["content/52",[22,1.772,43,4.785,79,4.919,195,3.12,215,12.051,219,8.243,222,3.613,224,2.955,251,5.436,258,3.636,277,3.842,279,5.993,281,4.2,287,7.799,303,7.799,307,6.134,334,7.508,335,4.106,466,10.951,664,11.444,788,10.841,789,15.983,790,9.937]],["keywords/52",[]],["title/53",[277,290.587,791,812.067]],["content/53",[2,2.46,41,7.049,43,3.732,79,5.226,87,5.905,145,6.628,152,7.692,167,8.218,188,9.271,221,7.136,222,2.255,224,3.019,263,5.943,277,4.641,279,4.674,281,3.276,287,6.083,291,5.312,354,3.507,355,3.657,365,9.4,386,7.007,437,7.273,518,7.528,525,10.203,571,10.203,616,4.936,627,3.616,652,4.729,689,3.994,691,11.191,699,13.641,700,13.191,791,8.374,792,5.857,793,14.213,794,14.213,795,11.535,796,10.638,797,11.949,798,14.213,799,11.535,800,10.203,801,9.843,802,11.949]],["keywords/53",[]],["title/54",[803,924.222]],["content/54",[2,2.541,3,3.052,7,5.538,11,3.736,15,4.701,16,3.122,22,1.333,25,3.891,36,5.274,49,3.528,69,5.27,71,5.946,136,5.293,168,2.768,188,8.943,195,2.588,206,5.672,207,5.868,222,3.694,224,1.557,244,6.295,250,7.658,255,7.788,258,2.736,261,5.092,291,3.762,340,3.052,354,3.383,368,4.99,372,4.232,374,6.991,385,4.496,399,4.414,422,6.651,424,7.788,437,7.016,485,5.973,512,7.42,518,5.331,556,5.973,602,7.016,689,3.853,711,9.067,761,7.658,803,10.071,804,5.649,805,9.661,806,13.71,807,8.611,808,5.842,809,10.262]],["keywords/54",[]],["title/55",[222,181.529,291,313.941,368,416.425]],["content/55",[2,1.778,3,2.761,4,6.339,11,3.239,30,6.394,60,9.542,66,2.625,69,3.317,70,4.783,86,5.459,107,8.919,163,3.955,168,2.4,222,3.468,226,3.85,237,7.409,251,6.522,255,6.753,261,4.415,277,2.506,282,3.803,285,7.653,291,4.688,298,6.044,334,4.899,335,2.679,341,12.511,351,6.874,354,4.215,355,4.395,362,7.22,367,4.508,370,5.326,372,3.669,374,4.4,377,6.084,380,7.145,381,7.073,385,5.602,397,2.511,399,3.49,418,9.361,424,11.359,445,3.64,458,5.251,493,10.663,518,4.623,715,9.648,748,6.386,810,5.352,811,9.994,812,5.326,813,6.586,814,7.557,815,11.008,816,6.586,817,8.898,818,5.603,819,11.888,820,14.362,821,9.361,822,10.428,823,5.251,824,11.008,825,11.888,826,11.888,827,15.818,828,11.888]],["keywords/55",[]],["title/56",[1,390.556]],["content/56",[1,3.514,2,1.092,3,3.33,11,1.728,13,1.403,15,6.9,16,2.253,18,4.159,19,3.982,20,4.465,22,0.617,24,3.476,30,3.355,31,1.64,41,8.567,43,2.755,66,2.317,69,2.928,86,2.913,97,2.829,107,3.312,113,2.47,127,1.548,130,4.724,195,0.869,216,2.669,222,3.582,223,1.389,224,2.427,226,3.024,227,2.04,232,3.813,237,2.751,251,4.004,258,3.447,263,1.948,270,1.984,277,2.829,279,2.086,282,1.206,291,2.88,294,3.984,296,4.126,312,7.393,324,3.109,330,3.543,341,7.685,345,2.751,348,3.383,351,3.668,363,3.268,368,3.82,374,2.348,385,2.08,387,3.073,394,2.842,396,2.635,397,3.649,399,3.802,400,5.694,418,4.995,424,7.623,426,1.85,427,2.301,458,5.928,469,2.34,485,2.764,490,2.928,518,2.467,533,2.898,546,2.504,569,3.29,579,2.884,607,2.829,611,4.195,618,4.554,651,2.562,676,3.109,689,3.772,693,1.658,706,7.15,707,4.628,728,3.543,815,5.874,817,4.748,818,2.99,820,5.333,829,2.856,830,6.344,831,3.073,832,4.995,833,3.514,834,3.984,835,3.022,836,3.813,837,3.938,838,2.727,839,5.564,840,4.646,841,3.359,842,2.161,843,5.874,844,5.333,845,5.333,846,3.056,847,5.036,848,5.333,849,3.924,850,6.344,851,4.917,852,6.344,853,6.344,854,13.11,855,4.646,856,3.738,857,6.344,858,3.573,859,9.204,860,8.44,861,4.554,862,4.646]],["keywords/56",[]],["title/57",[599,748.351]],["content/57",[]],["keywords/57",[]],["title/58",[863,911.566,864,498.398]],["content/58",[2,1.311,22,1.731,24,3.263,120,5.643,162,5.212,192,6.247,229,5.277,277,2.656,330,4.253,354,3.108,355,3.241,385,4.131,389,6.669,452,7.422,518,4.898,526,3.575,572,7.65,575,3.022,599,8.915,601,5.843,604,6.488,644,5.029,660,5.905,693,3.293,721,10.179,863,13.655,865,16.484,866,20.765,867,12.596,868,12.596,869,11.663,870,8.217,871,6.364,872,7.422,873,5.936,874,8.583,875,3.515,876,8.109,877,8.876,878,20.778,879,13.325,880,15.615,881,20.778,882,15.615,883,16.484,884,11.663,885,16.484,886,16.484,887,12.545,888,16.484,889,11.663,890,11.663,891,16.484,892,11.049,893,11.663,894,7.733,895,3.777,896,4.694]],["keywords/58",[]],["title/59",[575,330.693,804,567.943]],["content/59",[421,12.313,599,9.597,602,11.374,804,9.158,897,8.399]],["keywords/59",[]],["title/60",[599,595.127,898,1118.642]],["content/60",[0,10.952,1,3.502,2,1.932,3,3.551,17,7.01,49,2.688,79,2.82,89,4,115,6.917,186,4.836,195,2.129,219,4.726,225,8.941,227,7.405,230,6.286,244,8.522,261,3.88,263,4.772,266,4.977,270,3.268,283,5.832,284,4.673,345,4.531,364,5.884,366,6.725,372,4.797,375,8.542,386,5.15,389,5.531,421,5.787,437,5.346,452,6.155,489,4.923,490,2.915,519,5.742,527,5.417,546,4.123,575,2.506,579,4.749,594,4.658,599,10.299,601,7.21,602,5.346,603,8.61,604,5.381,606,10.832,607,4.658,627,2.658,631,6.215,633,7.01,641,4.572,642,5.531,667,7.118,677,4.658,704,6.135,752,4.092,761,5.835,814,6.641,875,2.915,895,4.661,898,18.693,899,10.447,900,6.561,901,5.032,902,4.593,903,7.819,904,10.447,905,10.447,906,4.68,907,10.447,908,3.753,909,5.835,910,7.361,911,8.782,912,7.499]],["keywords/60",[]],["title/61",[2,101.77,195,133.976,372,301.814,599,422.226]],["content/61",[1,5.073,2,1.023,3,2.4,19,3.423,22,0.956,24,4.635,30,3.143,67,4.682,89,2.118,94,6.595,95,11.113,97,4.382,115,3.663,130,8.976,161,3.822,162,4.066,163,3.27,195,1.347,198,4.49,227,7.515,230,6.752,255,5.583,261,6.646,266,4.682,270,3.074,277,2.072,283,6.715,289,4.513,297,4.152,298,4.997,304,6.327,305,7.198,312,4.206,319,6.697,330,3.319,340,2.188,352,2.838,372,3.034,375,9.835,386,7.32,394,6.652,437,5.03,489,6.997,594,4.382,599,10.092,602,5.03,603,10.843,604,9.217,605,4.845,625,5.28,711,6.5,717,4.904,752,7.01,761,11.137,804,4.05,817,7.356,823,4.341,875,2.742,897,3.714,898,7.977,908,3.531,913,9.829,914,9.829,915,6.411,916,9.101,917,7.535,918,6.697,919,6.697,920,5.167,921,4.206,922,9.829,923,9.829,924,7.356,925,6.784,926,5.097,927,7.977,928,9.829,929,7.598,930,7.918,931,9.829,932,9.829,933,14.848,934,9.829]],["keywords/61",[]],["title/62",[1,220.355,366,629.522,603,453.632,927,793.645]],["content/62",[1,4.737,3,3.397,22,1.266,24,6.433,31,3.365,69,5.865,94,12.227,97,5.805,113,3.065,163,4.332,220,5.524,227,5.858,251,3.884,255,11.941,270,4.073,275,7.993,283,4.885,298,6.62,300,8.493,303,8.996,353,7.993,370,11.127,374,8.428,410,12.634,546,5.139,599,7.867,610,11.066,625,9.788,746,8.243,748,6.994,761,13.872,912,9.346,935,18.48,936,12.055,937,13.02,938,7.746,939,13.02,940,13.02,941,15.318]],["keywords/62",[]],["title/63",[601,639.394,625,740.39]],["content/63",[1,5.463,2,1.99,6,5.072,9,7.075,22,1.569,24,6.28,66,3.562,67,5.235,69,3.066,108,5.418,113,2.587,130,4.947,152,5.948,178,7.488,195,1.506,215,7.268,227,6.147,255,6.243,261,4.081,263,4.954,267,7.075,270,3.438,277,4.031,281,2.533,283,6.055,321,5.264,325,5.264,343,4.081,366,12.309,374,4.068,385,3.604,387,5.324,422,4.967,447,4.354,493,5.86,515,8.257,518,6.275,556,4.788,557,4.832,596,6.986,599,9.689,601,7.485,603,5.098,607,7.195,610,6.674,614,6.986,619,8.939,625,12.054,626,7.485,632,4.924,640,8.225,641,4.81,650,6.986,704,4.338,761,9.012,912,7.889,942,9.239,943,7.744,944,10.99,945,9.239,946,7.168,947,16.135,948,9.239,949,10.99,950,10.176,951,9.639,952,10.176,953,10.99,954,16.135,955,10.99]],["keywords/63",[]],["title/64",[422,352.17,614,727.292,619,633.815]],["content/64",[1,2.679,2,2.081,15,2.959,18,4.469,19,2.74,22,1.944,24,4.425,73,4.112,89,2.562,144,8.706,152,6.434,155,4.692,175,6.483,181,4.98,195,2.341,227,3.822,241,4.939,251,3.547,254,8.524,265,6.938,268,6.366,291,3.262,303,5.088,312,8.558,321,9.579,325,5.695,334,4.899,349,6.938,364,9.622,368,4.327,374,4.4,384,7.653,422,3.659,447,4.71,495,6.302,514,8.706,557,5.227,599,8.634,602,6.084,611,7.862,619,12.11,620,13.42,625,6.386,650,7.557,788,11.897,792,4.899,807,7.467,854,9.994,942,9.994,946,7.755,956,11.562,957,7.145,958,11.888,959,7.467,960,7.977,961,11.888,962,11.008,963,9.994,964,6.084,965,9.994,966,7.755,967,11.008,968,9.114,969,8.534,970,11.888,971,11.888,972,11.008,973,7.977]],["keywords/64",[]],["title/65",[3,280.117]],["content/65",[]],["keywords/65",[]],["title/66",[79,467.849]],["content/66",[2,2.249,3,3.186,7,4.682,11,3.159,13,3.711,15,5.378,19,2.672,20,3.857,24,3.003,42,5.492,60,9.37,75,6.765,79,7.05,103,5.005,106,4.219,110,7.864,113,2.729,115,4.32,161,4.508,168,2.34,195,2.96,216,7.057,222,1.839,223,2.539,258,2.313,268,4.32,270,5.248,277,2.444,307,3.902,345,7.276,356,6.585,396,4.816,445,3.549,464,2.904,465,3.846,493,6.181,495,6.188,515,5.932,550,5.434,578,6.227,579,5.27,652,3.857,659,11.257,667,7.899,690,7.369,728,6.475,747,7.667,778,8.887,836,6.967,875,3.234,901,5.584,974,6.643,975,7.779,976,4.983,977,16.775,978,10.168,979,10.733,980,8.887,981,8.321,982,7.281,983,8.489,984,9.745,985,11.592,986,19.714,987,11.592,988,11.592,989,11.592,990,11.592,991,9.745,992,11.592]],["keywords/66",[]],["title/67",[307,385.149,465,379.544,993,619.168]],["content/67",[1,1.881,2,2.068,3,2.956,13,1.847,14,2.896,20,5.375,22,1.273,42,3.955,43,2.192,49,4.156,59,5.783,61,4.571,62,3.454,70,3.358,79,6.893,98,5.182,106,4.766,155,7.22,188,5.445,195,1.144,199,7.714,208,3.454,209,7.869,222,3.498,223,1.828,224,1.835,229,3.497,261,4.863,268,4.879,270,2.611,277,2.76,279,6.016,282,2.49,291,4.433,307,5.438,334,3.439,343,5.999,385,2.737,391,5.124,400,3.542,422,4.973,447,5.187,455,10.446,465,7.787,467,6.55,485,5.704,490,2.329,527,4.328,542,4.484,544,4.271,546,3.295,604,8.321,657,5.882,666,3.776,682,3.32,733,5.882,743,4.966,746,3.776,805,5.882,808,5.579,841,4.419,849,3.121,993,4.517,994,14.169,995,4.966,996,9.226,997,8.347,998,5.017,999,7.729,1000,7.729,1001,7.017,1002,18.293,1003,22.045,1004,6.775,1005,6.775,1006,11.007,1007,8.434,1008,6.343,1009,8.347,1010,7.322,1011,8.347,1012,7.729,1013,7.729,1014,3.482,1015,6.572,1016,8.347,1017,6.113,1018,5.688]],["keywords/67",[]],["title/68",[3,184.904,79,308.825,897,432.305]],["content/68",[1,1.988,2,0.918,3,4.255,11,2.404,13,3.024,15,2.196,18,1.972,22,1.832,30,4.371,31,2.28,43,2.316,47,3.991,64,10.438,65,4.011,67,6.512,68,4.25,79,5.823,106,4.976,115,5.094,127,2.153,163,2.935,164,8.169,179,7.137,186,7.727,195,2.956,206,5.656,218,5.416,219,3.991,221,4.429,222,1.4,223,1.932,224,1.002,228,2.45,229,3.696,230,2.988,244,6.277,246,4.927,251,2.632,263,4.197,266,4.203,270,4.276,277,1.86,281,2.034,318,6.216,329,3.431,330,2.979,340,1.964,354,3.373,359,7.194,363,4.544,404,3.006,413,4.072,416,4.575,427,3.201,435,4.485,438,5.477,448,4.758,452,5.198,491,5.541,503,5.541,550,4.135,599,8.806,616,2.25,627,2.245,641,7.324,676,4.324,678,5.416,704,3.482,749,4.375,796,6.603,816,4.887,895,2.646,897,5.165,901,4.25,912,9.813,920,4.638,945,7.417,964,6.995,1019,6.11,1020,4.849,1021,4.158,1022,4.887,1023,2.072,1024,5.679,1025,5.541,1026,4.671,1027,8.822,1028,12.256,1029,7.738,1030,6.333,1031,11.094,1032,5.835,1033,5.541,1034,7.738]],["keywords/68",[]],["title/69",[1,390.556]],["content/69",[1,2.453,2,1.133,3,4.161,8,3.937,11,4.366,13,4.64,15,6.87,18,3.581,19,5.153,20,6.978,24,2.82,25,3.089,30,6.08,42,5.158,64,5.05,65,4.949,79,4.326,89,3.453,106,3.963,113,2.563,127,2.657,155,4.297,168,3.235,172,4.057,174,6.184,226,2.453,227,3.5,254,5.432,263,3.342,268,5.972,281,2.51,284,3.273,295,8.366,303,4.659,312,4.659,426,3.175,427,3.95,432,4.877,440,4.218,447,6.349,448,3.789,457,4.877,465,3.612,467,4.415,579,7.285,608,6.353,618,11.503,639,6.683,666,4.925,681,5.684,759,8.572,788,6.477,807,6.838,829,4.901,846,5.244,858,9.025,1035,9.549,1036,11.735,1037,10.08,1038,6.921,1039,7.671,1040,10.08,1041,10.887,1042,4.38]],["keywords/69",[]],["title/70",[11,472.249]],["content/70",[1,4.205,2,1.942,3,3.016,11,7.258,13,2.98,14,7.428,17,9.04,18,3.011,19,4.301,20,4.482,24,3.49,79,5.037,89,2.903,97,6.007,106,4.904,113,3.171,174,7.653,195,1.846,219,6.094,223,2.95,244,6.186,263,4.136,268,5.021,277,2.84,282,2.562,284,4.05,303,7.986,316,5.278,349,7.862,422,4.147,426,3.929,490,3.759,492,9.671,538,8.564,618,9.671,681,7.034,692,7.184,711,8.91,727,9.866,731,5.574,734,12.474,803,7.184,1005,10.934,1038,11.862,1043,10.89,1044,7.653,1045,11.817,1046,11.817,1047,13.472,1048,11.817,1049,6.418,1050,5.644,1051,13.472,1052,13.472,1053,11.817]],["keywords/70",[]],["title/71",[13,383.443]],["content/71",[2,1.444,3,3.514,11,3.78,13,5.425,15,6.103,22,1.349,67,6.61,79,5.869,106,6.931,113,5.118,127,3.386,168,3.845,222,2.201,223,3.038,270,4.34,289,6.371,335,3.126,396,5.764,411,7.345,448,4.829,451,16.702,457,6.216,544,7.1,846,6.683,925,11.574,976,8.185,1038,8.82,1043,8.097,1054,12.846,1055,12.169,1056,18.991,1057,10.924,1058,21.741,1059,17.118,1060,17.631,1061,12.846,1062,13.874]],["keywords/71",[]],["title/72",[11,375.556,1063,745.942]],["content/72",[2,1.974,3,3.065,11,3.758,13,5.414,18,3.082,19,6.082,49,3.548,52,5.592,79,5.85,115,7.067,166,8.206,172,5.14,223,3.02,224,1.567,226,3.108,231,5.506,258,2.752,270,5.932,274,7.25,335,3.108,369,7.25,374,8.639,426,4.022,432,6.179,457,10.457,465,4.575,503,8.662,516,7.703,531,9.255,546,5.443,550,6.465,551,5.592,579,8.621,616,3.517,682,5.485,705,9.255,749,6.84,787,9.121,918,9.397,1063,7.464,1064,13.792,1065,13.792,1066,8.662,1067,9.718,1068,10.859]],["keywords/72",[]],["title/73",[13,304.933,1039,971.224]],["content/73",[3,4.072,11,5.125,13,5.574,20,6.259,155,7.425,263,5.775,295,9.821,457,10.405,579,8.552,631,11.192,846,9.062,1039,13.255,1054,17.418,1055,16.5,1069,18.811,1070,18.811,1071,18.811,1072,18.811,1073,18.811]],["keywords/73",[]],["title/74",[13,304.933,748,740.39]],["content/74",[2,2.117,3,3.788,13,5.389,15,3.053,39,7.371,42,5.811,47,5.548,49,4.494,59,7.716,79,5.985,86,5.632,102,6.637,113,4.112,151,9.657,162,5.074,173,4.602,181,5.138,194,8,195,1.68,215,8.111,219,5.548,223,3.826,237,5.319,258,2.447,268,4.57,270,3.836,282,2.333,293,6.85,323,7.614,334,5.054,369,6.448,422,3.775,450,10.758,451,10.758,467,4.973,468,7.371,495,4.524,504,6.157,527,6.36,530,7.157,544,8.939,546,6.895,547,6.317,561,7.895,603,8.103,607,5.469,721,6.046,1056,14.177,1060,11.356,1061,11.356,1074,6.12,1075,11.356,1076,8.494,1077,8.982,1078,8.357,1079,12.264,1080,10.758,1081,9.18,1082,12.264,1083,8.804,1084,12.264,1085,8.642,1086,8.642,1087,9.657,1088,8,1089,9.657,1090,7.895,1091,6.741]],["keywords/74",[]],["title/75",[13,304.933,409,745.942]],["content/75",[1,5.367,3,4.068,13,5.765,36,6.406,78,9.083,168,3.363,172,6.207,227,5.355,232,10.01,261,6.186,270,5.21,312,7.128,335,3.753,340,3.707,343,6.186,347,6.003,352,4.809,368,6.062,372,5.141,404,5.674,409,11.639,422,7.332,432,7.462,448,5.797,516,9.303,813,9.227,920,8.756,1092,16.656]],["keywords/75",[]],["title/76",[447,686.675]],["content/76",[3,3.916,9,7.772,11,4.707,13,3.822,15,6.21,16,1.744,19,2.783,20,4.017,22,1.679,30,3.86,64,11.241,65,10.59,79,5.943,89,2.602,106,4.395,113,4.066,155,6.818,163,4.017,219,5.462,223,2.644,284,3.63,295,9.018,312,7.393,335,2.721,368,4.395,369,6.347,447,10.11,457,9.036,458,5.333,464,3.025,465,6.691,467,4.896,490,3.369,849,4.515,1035,10.59,1037,11.179,1038,12.822,1040,15.994,1043,7.046,1066,7.583,1093,9.506,1094,9.037,1095,12.073,1096,11.179,1097,12.073,1098,12.073,1099,12.073,1100,12.073,1101,12.073]],["keywords/76",[]],["title/77",[59,765.571]],["content/77",[0,10.266,2,1.516,3,4.154,7,5.885,24,5.099,43,3.825,54,8.276,59,10.548,61,6.873,62,9.225,69,4.065,79,6.019,89,3.14,103,6.291,106,5.303,149,11.471,152,7.885,155,5.75,160,6.83,163,4.847,186,6.937,191,8.584,195,2.697,223,3.191,261,5.411,268,5.429,277,3.072,284,4.38,287,6.235,313,10.67,490,4.065,504,7.315,562,9.635,571,10.458,668,15.5,669,12.248,671,10.905,673,12.248,901,7.018,1102,11.471,1103,14.569,1104,12.248]],["keywords/77",[]],["title/78",[224,196.887]],["content/78",[]],["keywords/78",[]],["title/79",[22,134.003,224,156.574]],["content/79",[1,4.106,2,2.37,15,5.667,16,2.633,22,2.415,25,6.462,155,7.192,195,2.496,206,7.539,222,2.891,223,3.991,224,2.955,261,6.767,329,7.086,354,4.496,375,10.015,599,7.868,1026,9.647,1105,10.951,1106,13.08]],["keywords/79",[]],["title/80",[2,119.066,206,473.349,354,282.279]],["content/80",[1,3.164,2,2.448,15,4.778,16,2.774,18,3.138,47,6.352,147,7.543,167,8.119,168,2.835,179,10.023,195,2.63,206,5.809,222,2.228,223,3.075,224,2.485,258,3.831,261,5.215,296,5.521,307,6.463,325,6.726,354,4.737,355,3.613,359,6.036,368,5.111,385,4.605,394,6.291,397,2.966,416,9.956,424,7.976,465,6.369,530,8.194,556,6.117,597,8.046,614,8.926,641,6.145,642,7.434,689,3.946,772,11.396,810,6.321,875,5.357,901,9.248,924,10.51,1105,8.439,1107,11.056,1108,10.51,1109,11.805,1110,7.717,1111,14.041,1112,9.039,1113,7.006]],["keywords/80",[]],["title/81",[599,595.127,965,1158.748]],["content/81",[1,4.937,2,1.924,3,2.148,8,3.752,15,5.718,16,3.166,18,2.319,22,1.667,24,4.441,30,2.001,49,1.61,66,1.382,67,2.981,73,2.165,92,2.791,97,2.791,103,4.48,112,4.448,113,2.443,128,3.885,145,2.918,146,3.224,155,2.47,163,2.082,168,3.953,172,2.332,206,2.589,207,2.678,209,3.761,222,1.646,223,2.911,224,2.704,235,3.224,237,2.714,244,2.874,258,3.907,263,1.921,277,3.26,283,2.348,294,3.931,307,2.107,312,2.678,313,4.583,321,2.998,329,2.434,334,6.372,335,4.412,340,2.31,343,3.854,345,2.714,347,2.256,354,2.56,355,1.61,364,3.525,368,2.278,370,4.649,376,5.079,396,2.6,397,4.328,399,3.159,415,8.307,422,1.926,448,2.178,469,3.828,490,4.784,526,2.945,569,3.245,573,3.885,575,2.49,579,4.717,599,2.702,602,3.203,603,2.903,604,3.224,607,2.791,618,4.492,632,2.804,650,8.45,651,2.528,660,4.864,676,3.067,685,4.2,697,3.182,706,4.264,707,7.33,739,3.931,761,3.495,810,2.817,838,2.69,842,3.535,849,2.34,897,3.921,901,3.015,921,2.678,924,4.684,925,2.859,929,3.203,930,3.337,948,5.261,966,4.082,1035,9.102,1114,12.177,1115,6.258,1116,6.258,1117,11.175,1118,9.949,1119,6.258,1120,4.334,1121,2.981,1122,9.608,1123,5.489,1124,5.703,1125,7.186,1126,5.317,1127,6.258,1128,6.258,1129,6.258,1130,6.258,1131,5.079,1132,4.583,1133,3.728,1134,4.2,1135,6.258,1136,6.258,1137,4.928,1138,6.258,1139,4.334,1140,5.079,1141,3.978]],["keywords/81",[]],["title/82",[1140,1118.642,1142,481.212]],["content/82",[1,2.33,2,2.183,13,4.247,15,4.128,16,2.774,18,2.767,22,1.988,24,2.014,31,2.009,36,1.715,42,2.113,43,1.171,49,1.147,61,2.714,66,0.984,70,4.159,73,4.282,79,3.341,103,4.464,106,1.623,108,2.198,113,2.914,116,2.602,123,5.742,145,2.079,147,4.177,155,4.08,162,1.845,163,1.483,174,2.533,185,1.557,196,1.728,206,4.277,209,7.44,224,1.595,227,1.434,232,4.673,235,2.297,237,4.484,251,1.33,258,1.552,270,3.234,272,2.282,290,1.917,295,4.059,303,1.908,307,2.617,326,2.653,329,1.734,334,3.204,340,1.731,347,1.607,353,2.737,354,1.1,357,2.09,368,1.623,370,3.483,372,1.376,376,3.619,385,1.462,386,2.198,387,2.16,406,12.143,435,3.953,447,4.904,464,4.156,465,1.479,490,2.169,495,1.645,511,3.725,513,1.892,514,7.571,531,2.992,532,2.47,533,2.037,557,3.418,569,2.312,575,4.219,576,3.418,596,2.834,600,3.038,603,2.068,607,1.988,626,2.068,627,3.15,644,1.78,647,4.613,658,4.143,687,4.128,704,1.76,834,4.883,844,15.507,875,1.244,900,2.8,901,3.745,910,3.142,938,6.151,993,5.595,1057,3.511,1094,3.337,1105,2.68,1121,2.124,1126,4.256,1133,6.317,1140,17.024,1141,8.926,1142,1.557,1143,2.239,1144,4.459,1145,20.628,1146,14.06,1147,12.378,1148,5.961,1149,18.446,1150,3.598,1151,2.47,1152,7.775,1153,4.459,1154,2.834,1155,2.211,1156,4.459,1157,3.511,1158,2.949,1159,3.142,1160,10.338,1161,7.775,1162,7.775,1163,4.379,1164,4.459,1165,7.044,1166,12.378,1167,12.378,1168,12.378,1169,12.378,1170,6.122,1171,4.459,1172,4.459,1173,4.459,1174,4.459,1175,4.673,1176,7.775,1177,7.775,1178,7.775,1179,7.199,1180,12.378,1181,7.775,1182,7.199,1183,4.459,1184,7.775,1185,7.775,1186,4.459,1187,2.834,1188,4.459,1189,1.773,1190,3.911,1191,4.128,1192,4.128,1193,4.128,1194,3.511,1195,4.459,1196,2.555,1197,4.128,1198,3.142,1199,4.459,1200,4.459,1201,7.775,1202,7.775,1203,7.775,1204,2.555,1205,4.459,1206,7.775,1207,4.459,1208,4.459,1209,4.459]],["keywords/82",[]],["title/83",[258,195.144,461,521.453,646,453.632,693,255.603]],["content/83",[2,1.733,8,3.166,9,5.637,13,3.685,15,5.353,16,1.265,22,1.619,61,3.057,79,2.363,112,5.574,115,3.263,136,3.38,139,4.02,155,3.456,160,4.104,163,2.913,216,3.683,222,2.643,223,1.918,224,1.892,226,1.973,228,2.431,229,3.668,244,4.02,258,3.324,272,4.48,277,2.865,279,4.47,281,3.839,282,1.665,296,3.443,312,3.747,329,3.405,335,1.973,345,3.797,350,5.791,354,2.16,355,2.253,385,4.457,399,1.789,404,2.983,413,4.041,415,4.703,427,4.93,442,6.553,445,2.681,457,3.923,461,7.247,490,2.443,574,3.98,575,2.101,596,8.639,616,2.233,627,3.458,646,6.304,647,3.263,675,5.566,676,4.291,693,3.552,707,3.019,804,3.608,838,3.764,842,2.983,870,5.711,873,4.126,875,2.443,903,6.553,929,4.48,982,5.499,1023,2.057,1118,6.553,1122,8.107,1126,3.01,1142,3.057,1210,7.891,1211,5.159,1212,4.775,1213,8.107,1214,5.711,1215,3.98,1216,8.756,1217,7.498,1218,6.285,1219,7.68,1220,10.053,1221,7.3,1222,7.3,1223,8.756,1224,7.68,1225,8.107,1226,7.106,1227,7.68,1228,6.894,1229,8.756,1230,8.637,1231,8.756,1232,8.107,1233,8.756,1234,5.966,1235,8.756,1236,8.756,1237,4.54,1238,8.756,1239,8.756,1240,6.712,1241,8.988,1242,7.68,1243,7.68,1244,7.68,1245,7.68,1246,7.68,1247,7.68,1248,7.68,1249,7.68,1250,7.68,1251,7.68,1252,7.68,1253,7.68,1254,7.68]],["keywords/83",[]],["title/84",[224,129.964,697,581.683,1255,877.073]],["content/84",[1,2.302,2,1.906,4,5.448,8,5.528,15,3.805,22,1.486,54,5.804,67,4.867,70,4.111,71,4.431,73,5.288,76,8.292,86,4.691,88,6.141,97,4.556,145,10.151,146,5.263,157,12.407,163,3.399,195,1.4,219,4.622,224,2.828,230,3.46,250,5.707,272,11.139,277,3.223,279,6.687,283,3.834,307,6.166,320,5.067,343,3.795,345,4.431,354,2.521,355,2.629,365,6.757,370,4.577,435,5.195,437,5.228,442,7.647,490,2.851,518,3.973,557,6.721,569,9.498,575,3.668,601,4.74,607,4.556,608,5.963,611,6.757,616,2.605,652,3.399,674,8.59,697,7.772,706,6.962,707,5.272,784,7.076,795,8.292,802,8.59,926,5.298,1045,8.962,1106,7.334,1114,8.045,1117,8.59,1121,4.867,1139,10.587,1255,7.833,1256,7.334,1257,15.586,1258,7.647,1259,8.962,1260,7.199,1261,7.199,1262,10.217,1263,9.46,1264,9.46,1265,10.217,1266,10.217,1267,4.335,1268,7.833,1269,7.833,1270,6.577,1271,10.217,1272,10.217,1273,6.272,1274,10.217,1275,10.217,1276,9.46,1277,10.217,1278,6.665,1279,10.217]],["keywords/84",[]],["title/85",[224,156.574,229,577.406]],["content/85",[224,2.525,229,9.311,284,6.682,303,9.513,658,8.908]],["keywords/85",[]],["title/86",[607,772.804]],["content/86",[]],["keywords/86",[]],["title/87",[1,390.556]],["content/87",[2,1.444,3,3.077,15,6.305,22,1.349,24,4.932,83,7.625,155,5.476,163,4.616,175,7.566,230,4.698,269,9.776,270,5.956,277,4.584,366,8.931,489,8.974,599,8.222,607,10.934,625,7.453,658,5.56,682,5.518,704,5.476,727,10.16,728,7.749,788,8.255,858,7.814,870,9.05,894,8.517,1036,10.16,1050,5.812,1057,10.924,1121,6.61,1267,5.887,1280,9.31,1281,12.593,1282,12.846,1283,13.874,1284,13.874,1285,11.329,1286,13.874,1287,13.874,1288,13.874,1289,13.874,1290,8.097,1291,11.26,1292,10.636,1293,9.959,1294,10.16,1295,13.874,1296,13.874,1297,13.874]],["keywords/87",[]],["title/88",[654,714.732,748,740.39]],["content/88",[2,1.453,6,6.441,11,3.803,22,1.357,43,5.02,68,6.723,106,5.08,155,7.547,163,4.644,166,8.304,192,6.922,218,8.568,221,7.007,227,7.012,231,5.572,251,4.164,261,5.184,263,4.285,277,2.943,279,4.59,303,5.973,334,5.751,343,5.184,370,6.253,375,7.671,394,6.253,397,4.039,461,7.443,495,5.148,603,8.87,604,7.189,607,6.223,626,6.475,651,5.637,654,12.164,676,6.84,681,7.287,699,9.835,700,9.51,749,6.922,788,11.376,792,5.751,816,7.732,901,6.723,921,5.973,1049,6.649,1050,5.847,1221,5.427,1230,7.237,1285,8.304,1298,9.231,1299,8.476,1300,10.447,1301,13.957,1302,9.51,1303,9.835,1304,13.957]],["keywords/88",[]],["title/89",[19,317.729,607,614.573]],["content/89",[1,3.808,2,1.759,6,10.018,9,10.878,19,5.004,22,2.332,24,4.377,31,4.367,42,8.006,108,8.33,120,7.57,227,5.433,263,5.188,295,8.822,340,3.761,350,11.175,369,8.883,397,3.57,404,5.757,426,4.927,450,14.822,607,11.672,682,6.72,771,7.264,1044,9.599,1050,7.079,1305,21.707,1306,16.898,1307,15.646]],["keywords/89",[]],["title/90",[11,311.729,106,416.425,1308,736.511]],["content/90",[3,2.447,6,6.986,8,5.474,11,6.885,14,5.252,19,3.49,22,1.964,24,3.921,25,4.296,70,6.09,83,8.32,106,7.352,227,4.867,253,15.485,303,8.645,312,6.479,343,5.622,363,7.798,368,5.51,375,8.32,385,4.964,389,8.015,404,5.157,607,10.136,628,11.919,658,8.095,809,11.33,901,7.292,1050,8.462,1091,8.32,1285,9.007,1307,14.017,1308,9.745,1309,12.686,1310,10.315,1311,11.919,1312,9.098,1313,9.623,1314,20.199,1315,9.508]],["keywords/90",[]],["title/91",[268,426.353,397,241.681,607,510.125]],["content/91",[1,5.442,24,4.442,66,3.786,89,3.695,207,7.339,219,7.757,227,5.513,268,8.999,281,3.953,312,7.339,340,3.817,364,9.657,397,3.622,404,7.465,423,9.915,448,5.968,515,8.774,607,10.768,619,13.378,620,14.825,658,6.872,666,7.757,950,15.877,956,9.915,1091,9.424]],["keywords/91",[]],["title/92",[120,617.512,607,614.573]],["content/92",[2,1.333,3,2.069,4,6.828,24,3.317,83,7.037,89,3.881,119,7.404,120,10.671,127,3.125,162,5.298,175,6.983,181,5.364,194,8.352,222,2.032,227,5.79,263,3.931,270,4.005,277,4.392,283,4.805,303,5.48,304,13.411,305,15.256,320,6.35,323,7.949,343,4.755,383,7.037,421,7.094,447,5.073,574,5.821,607,11.552,658,7.218,810,5.764,834,8.042,847,4.805,1290,7.473,1299,7.776,1309,8.042,1315,8.042,1316,18.009,1317,22.603,1318,12.805,1319,11.856,1320,11.856,1321,18.009,1322,12.805,1323,12.805,1324,12.805,1325,18.009,1326,7.212,1327,11.231,1328,18.009,1329,12.805,1330,12.805,1331,10.765,1332,12.805]],["keywords/92",[]],["title/93",[268,645.896]],["content/93",[]],["keywords/93",[]],["title/94",[1,390.556]],["content/94",[2,0.93,3,3.201,9,5.756,11,1.428,13,3.986,14,1.819,15,6.976,18,1.998,19,3.89,20,5.157,22,1.846,24,4.015,25,1.488,30,5.761,31,4.006,35,5.913,36,3.439,43,3.627,52,3.625,64,5.422,66,1.158,79,5.855,106,1.908,113,3.649,123,4.148,162,2.169,168,1.059,172,4.356,185,1.83,186,4.823,216,2.206,217,2.737,224,1.569,226,1.181,237,3.878,261,3.32,268,8.426,277,4.176,291,2.453,303,5.003,343,1.947,360,5.237,374,3.309,377,4.575,422,4.252,425,4.128,426,2.607,428,5.112,432,2.349,436,3.924,448,1.825,464,2.24,466,3.151,467,3.625,488,3.572,490,1.463,495,6.647,504,2.632,515,2.683,551,2.126,569,4.636,571,3.763,599,3.86,614,3.333,618,8.391,619,9.983,620,7.176,666,8.588,676,2.569,685,5.999,717,6.892,788,3.119,835,2.498,846,4.307,849,1.96,858,6.583,926,4.636,956,8.963,968,4.019,969,6.418,1038,3.333,1039,3.694,1055,4.599,1234,3.572,1315,5.615,1333,5.243,1334,5.243,1335,4.854,1336,8.218,1337,5.684,1338,5.243,1339,5.243,1340,5.243,1341,4.408,1342,4.128,1343,5.243,1344,3.184,1345,5.243,1346,5.243,1347,5.243,1348,3.004,1349,9.827,1350,6.092,1351,4.599,1352,3.572,1353,7.256,1354,4.599,1355,3.119,1356,5.243,1357,4.854,1358,5.243,1359,5.684,1360,5.243,1361,5.243,1362,7.256,1363,6.759,1364,3.375]],["keywords/94",[]],["title/95",[616,351.477,1273,846.169]],["content/95",[2,2.358,8,6.538,22,1.758,79,4.88,145,8.431,172,6.738,209,10.866,222,2.869,223,3.96,224,2.574,228,5.021,268,8.444,325,8.661,421,10.016,616,4.61,619,10.016,666,10.25,708,16.741,841,9.572,1255,13.86,1336,10.757,1365,13.86,1366,13.532,1367,14.674,1368,11.957]],["keywords/95",[]],["title/96",[1336,1031.201]],["content/96",[3,2.092,10,11.356,15,6.17,22,1.259,40,8.231,42,6.134,49,3.331,73,4.478,79,5.657,113,3.048,155,8.272,172,4.825,185,4.52,224,1.471,265,7.556,266,6.168,268,8.465,269,9.123,277,3.827,325,6.202,335,2.917,428,4.792,481,7.948,518,5.035,545,8.688,557,5.692,632,5.801,666,5.857,670,10.194,956,7.486,1292,9.926,1336,14.751,1359,8.231,1369,10.508,1370,11.356,1371,12.947,1372,12.947,1373,11.988,1374,12.947,1375,18.15,1376,18.15,1377,18.15,1378,18.15,1379,11.356,1380,15.92,1381,14.291,1382,12.947,1383,12.947,1384,12.947,1385,12.947,1386,12.947,1387,12.947,1388,10.885,1389,12.947,1390,12.947,1391,8.335]],["keywords/96",[]],["title/97",[172,513.649,956,796.976]],["content/97",[1,2.885,2,1.333,3,2.911,7,5.172,11,4.907,15,3.187,18,2.862,22,1.751,24,4.665,25,3.634,79,4.861,89,2.759,136,4.943,155,5.054,168,2.585,172,8.876,185,4.47,216,5.387,224,1.455,261,6.689,262,5.529,263,5.529,268,6.711,269,9.023,291,3.514,303,5.48,312,5.48,334,5.276,335,2.885,339,15.705,360,5.737,490,3.573,551,5.192,571,9.192,614,8.14,618,9.192,777,7.544,858,7.212,906,5.737,956,13.07,964,6.552,976,5.504,1008,8.725,1170,10.082,1211,7.544,1212,6.983,1234,12.272,1336,7.618,1337,8.14,1391,8.243,1392,8.868,1393,9.277,1394,12.805,1395,10.765,1396,8.243,1397,10.392,1398,10.765,1399,8.725,1400,8.725]],["keywords/97",[]],["title/98",[7,556.712,79,372.057]],["content/98",[7,8.321,15,2.612,20,3.491,22,2.003,49,2.7,67,4.999,79,6.228,106,8.013,113,5.431,136,4.051,163,3.491,173,6.983,185,8.055,224,1.192,225,7.512,263,3.222,266,7.429,270,4.878,282,3.539,283,3.938,324,5.143,334,6.426,357,4.919,364,5.91,391,9.574,396,4.36,404,5.313,411,5.556,421,5.814,425,8.262,426,3.06,439,5.556,440,8.53,447,4.158,458,4.635,464,2.629,465,6.174,490,2.928,493,8.316,528,6.845,606,9.101,631,6.243,788,6.243,846,5.055,887,7.394,925,8.502,930,8.316,941,8.822,1175,6.307,1204,6.013,1293,7.533,1336,6.243,1401,4.868,1402,10.494,1403,10.494,1404,9.204,1405,10.494,1406,8.822,1407,9.716,1408,10.494,1409,10.494,1410,8.517,1411,10.494,1412,9.574,1413,9.716,1414,10.494,1415,10.494,1416,10.494,1417,9.716,1418,9.204,1419,9.716,1420,10.494,1421,10.494,1422,8.517,1423,8.517]],["keywords/98",[]],["title/99",[1401,804.016]],["content/99",[2,1.386,3,2.152,11,3.629,19,3.07,22,2.069,42,6.31,79,6.523,102,7.208,119,7.701,127,3.251,155,7.306,172,7.929,176,10.486,192,6.605,221,9.294,225,6.415,238,7.378,277,4.848,312,5.7,329,5.179,399,2.721,430,7.501,447,9.11,457,5.967,458,5.883,465,6.141,606,7.772,614,11.768,627,4.71,631,7.924,666,6.025,787,8.808,792,5.488,813,7.378,873,6.276,956,7.701,1030,9.56,1066,8.365,1401,10.667,1407,12.331,1424,11.196,1425,12.331,1426,13.318,1427,13.318,1428,11.196,1429,12.331,1430,13.318,1431,13.318,1432,13.318,1433,13.318,1434,13.318,1435,11.196,1436,10.486]],["keywords/99",[]],["title/100",[1337,1101.797]],["content/100",[2,1.607,3,2.495,8,3.744,11,5.03,22,1.007,24,2.682,25,2.938,40,9.815,47,4.684,52,4.198,66,4.076,69,4.308,75,6.042,79,4.168,120,4.639,163,3.445,168,4.635,172,6.88,188,6.754,192,5.135,213,6.356,214,4.932,216,4.356,224,1.754,251,6.106,261,5.734,262,6.666,268,8.158,299,10.879,312,4.431,335,4.612,338,5.406,339,9.815,340,2.305,360,6.917,362,6.288,374,3.832,377,5.298,385,6.055,411,5.482,425,14.537,439,5.482,440,4.011,443,6.042,532,5.736,551,4.198,552,5.333,557,4.552,563,5.987,568,3.954,608,6.042,611,6.847,618,7.432,698,8.006,770,7.582,777,6.1,835,7.355,846,4.988,858,5.831,897,3.912,956,5.987,964,7.901,1198,7.296,1234,7.055,1237,5.369,1336,13.024,1337,15.539,1437,8.403,1438,10.354,1439,10.354,1440,10.354,1441,10.354,1442,5.783,1443,4.595,1444,10.354]],["keywords/100",[]],["title/101",[546,684.084]],["content/101",[1,3.164,2,1.461,22,1.867,43,3.687,59,6.202,63,10.283,66,4.239,67,6.689,79,5.182,90,12.316,110,6.582,118,10.764,191,8.273,214,6.689,216,9.203,219,6.352,224,1.595,263,4.311,277,2.96,287,6.009,320,6.964,325,6.726,335,3.164,404,6.541,422,4.322,495,7.082,515,7.185,517,11.056,546,8.635,562,9.286,578,7.543,579,6.383,666,6.352,722,9.159,779,8.528,780,10.079,829,6.321,1121,6.689,1336,11.423,1443,6.231,1445,13.528,1446,14.041,1447,10.764,1448,14.041,1449,10.079,1450,11.056,1451,13.001,1452,14.041,1453,7.657,1454,14.041,1455,8.439,1456,10.764,1457,13.001,1458,14.041,1459,13.001]],["keywords/101",[]],["title/102",[619,960.186]],["content/102",[2,1.488,3,3.142,7,5.776,11,3.896,19,5.091,22,1.39,79,3.86,106,5.205,157,11.606,180,6.928,192,9.641,195,1.959,221,7.18,224,1.624,229,5.991,244,6.566,266,6.813,268,8.831,277,4.098,315,12.022,325,6.85,332,8.982,489,6.739,493,7.626,509,8.425,561,9.206,569,7.415,601,6.634,614,9.091,619,14.162,666,6.469,694,12.022,699,10.077,700,9.744,796,10.703,812,6.407,908,5.137,943,10.077,951,12.543,1397,11.606,1460,14.3,1461,12.022,1462,14.3,1463,12.543,1464,12.543,1465,14.3,1466,10.473,1467,10.473,1468,12.543,1469,14.3]],["keywords/102",[]],["title/103",[620,1064.028]],["content/103",[2,1.37,24,5.478,49,3.388,120,5.899,147,7.073,162,5.448,198,9.662,225,8.847,251,3.928,268,7.881,270,4.119,277,4.459,281,3.035,283,4.941,422,7.408,526,3.737,537,9.452,556,5.736,557,5.789,569,6.828,597,7.545,599,5.685,601,8.519,606,10.718,609,9.643,610,7.997,619,10.174,620,14.774,625,9.865,641,5.763,650,13.444,704,5.197,705,8.835,837,8.174,943,9.278,959,8.27,967,12.192,1026,6.971,1076,9.119,1108,9.855,1204,7.545,1470,9.855,1471,9.119,1472,11.549,1473,13.167,1474,13.167,1475,13.167,1476,13.167,1477,13.167,1478,11.549,1479,13.167,1480,13.167,1481,6.971,1482,12.192]],["keywords/103",[]],["title/104",[214,825.695]],["content/104",[22,1.718,40,11.231,89,3.807,109,10.311,155,6.973,158,12.939,207,7.562,214,10.639,224,2.007,263,5.424,268,6.584,408,7.529,422,6.874,437,9.041,569,9.162,616,4.505,619,9.788,620,10.846,650,11.231,777,10.409,788,10.512,849,6.607,908,6.347,943,12.449,1483,17.668,1484,14.853,1485,17.668,1486,13.911,1487,15.497,1488,9.491]],["keywords/104",[]],["title/105",[666,784.059]],["content/105",[2,0.943,3,3.791,13,2.005,25,4.83,37,6.505,43,2.38,49,3.591,66,2.001,69,5.335,70,3.646,75,5.289,79,6.133,87,3.765,89,1.953,94,6.081,95,12.74,113,3.285,136,3.499,161,3.524,162,3.75,173,3.401,181,3.797,186,7.069,195,1.242,198,4.141,202,6.276,213,5.564,214,6.649,216,3.813,219,6.314,220,3.845,224,1.029,261,3.366,268,7.694,270,2.835,277,4.79,291,3.83,304,8.985,305,6.637,312,3.879,320,4.495,353,5.564,364,5.104,367,3.437,369,4.764,374,3.354,377,4.638,385,2.972,399,1.851,410,5.447,416,4.699,435,4.608,457,4.06,495,6.279,517,7.136,518,3.524,561,5.834,575,2.174,666,11.312,719,4.981,777,5.339,799,7.355,882,12.242,956,5.24,959,5.692,963,7.619,1044,5.148,1121,6.649,1148,10.7,1187,5.761,1337,5.761,1359,10.82,1393,4.668,1489,9.063,1490,6.081,1491,8.391,1492,9.063,1493,7.619,1494,9.063,1495,8.391,1496,7.949,1497,6.783,1498,9.063,1499,9.063,1500,9.063,1501,9.063,1502,9.063,1503,9.063,1504,13.957,1505,13.957,1506,13.957,1507,6.386,1508,13.957,1509,7.355]],["keywords/105",[]],["title/106",[277,365.403]],["content/106",[2,1.488,3,3.83,11,6.018,43,3.755,54,8.123,64,10.993,65,6.501,79,5.961,102,10.521,174,8.123,181,8.144,186,6.871,191,8.425,231,5.709,237,6.202,261,5.311,268,7.244,277,5.39,290,6.147,379,9.596,391,8.779,418,11.26,488,15.049,490,3.99,491,8.982,494,7.415,495,7.171,505,7.271,552,7.366,666,8.794,681,7.466,703,11.606,735,9.328,738,10.077,760,11.26,920,7.518,1510,11.606,1511,13.241,1512,12.543]],["keywords/106",[]],["title/107",[1359,1101.797]],["content/107",[1,2.419,2,1.771,7,4.336,10,11.231,13,4.825,14,4.443,15,5.041,16,0.677,18,1.047,19,3.337,22,1.044,25,3.634,42,3.845,49,2.762,52,4.353,63,3.43,64,2.173,71,5.553,75,2.733,79,5.887,83,5.9,89,1.009,92,5.709,106,1.705,113,3.014,115,1.745,128,5.037,139,3.726,147,2.516,156,3.191,159,3.687,165,3.59,181,1.962,185,3.748,186,1.457,188,3.055,195,0.642,202,3.243,214,3.866,216,6.672,217,10.234,220,3.443,221,2.351,227,1.506,229,3.399,235,4.18,241,1.946,268,4.772,269,3.3,270,2.538,277,4.686,294,2.941,295,2.445,304,3.015,305,3.43,312,3.473,329,1.821,340,1.042,343,3.014,345,3.519,358,2.684,364,6.046,386,2.309,404,1.596,408,1.996,421,2.594,426,3.131,428,3.003,440,1.814,455,2.462,457,3.635,464,1.173,465,1.554,466,6.452,467,1.899,485,2.04,491,2.941,495,6.643,516,2.616,518,1.821,526,2.303,537,3.362,546,1.848,551,3.29,552,2.412,562,3.097,576,3.59,579,2.129,601,2.173,613,3.43,632,2.098,639,2.875,659,3.143,664,2.941,666,9.424,682,1.863,692,5.725,709,3.191,711,3.097,717,2.337,719,2.574,722,3.055,760,3.687,779,2.844,780,3.362,805,3.3,807,2.941,846,3.909,873,3.824,901,2.256,925,3.707,929,4.152,956,12.851,976,2.013,1038,2.977,1039,7.565,1066,2.941,1096,7.513,1309,2.941,1336,2.786,1359,16.224,1364,3.015,1370,11.231,1373,7.513,1393,2.412,1406,3.937,1472,4.108,1513,4.108,1514,4.336,1515,4.683,1516,5.293,1517,4.683,1518,13.049,1519,8.453,1520,4.108,1521,3.801,1522,8.114,1523,4.683,1524,4.683,1525,4.683,1526,4.683,1527,4.683,1528,4.683,1529,8.114,1530,7.117,1531,8.114,1532,7.117,1533,8.114,1534,8.114,1535,1.821,1536,4.683,1537,6.389,1538,5.224,1539,7.862,1540,7.117,1541,7.513,1542,4.683,1543,4.683,1544,4.683,1545,3.801,1546,4.108,1547,4.683,1548,4.108,1549,3.243,1550,3.362,1551,3.143,1552,3.015,1553,8.114,1554,2.977,1555,3.505,1556,4.683]],["keywords/107",[]],["title/108",[956,1002.17]],["content/108",[2,1.839,3,2.855,75,10.311,79,6.61,192,8.762,214,8.417,216,7.433,261,6.562,268,6.584,291,4.848,312,7.562,364,9.951,514,12.939,557,7.768,575,4.239,666,11.078,722,11.525,777,10.409,792,7.28,956,14.877,1044,10.036,1148,13.545,1393,9.101,1491,16.359,1557,17.668]],["keywords/108",[]],["title/109",[71,597.791,495,508.435]],["content/109",[3,3.397,8,4.708,13,4.031,22,1.266,25,3.695,43,4.784,49,3.35,69,3.633,71,10.394,79,5.674,89,3.927,152,7.046,175,7.1,186,7.084,199,7.671,216,5.477,217,6.797,219,5.89,220,8.919,268,8.485,277,5.053,328,12.055,330,6.152,345,7.903,394,5.833,420,9.535,444,9.535,495,8.841,522,8.277,579,5.919,666,8.243,676,6.381,764,9.346,871,6.578,963,10.945,1083,9.346,1256,9.346,1267,5.524,1359,11.583,1362,10.567,1447,9.981,1558,10.945,1559,8.493,1560,10.945,1561,8.277,1562,13.02,1563,13.02,1564,12.055]],["keywords/109",[]],["title/110",[35,911.566,186,428.833]],["content/110",[2,1.461,3,3.103,8,3.303,22,0.888,35,16.286,43,3.687,47,4.132,49,2.35,54,7.976,60,5.102,71,3.961,78,4.981,79,5.182,89,3.026,100,6.041,107,4.769,180,4.425,186,7.795,191,5.381,208,5.809,214,4.351,220,3.875,261,5.215,268,3.404,270,6.005,277,4.804,281,2.106,283,3.427,289,4.194,291,2.506,296,3.592,312,3.909,320,4.53,324,4.476,383,7.717,385,2.995,421,5.06,430,5.144,438,5.67,455,7.382,481,8.62,495,5.179,504,4.586,510,8.457,520,8.354,540,4.425,551,3.704,557,4.016,562,9.286,563,5.281,564,6.041,575,2.191,602,7.185,605,4.503,666,6.352,676,4.476,692,4.871,718,7.413,721,4.503,722,5.958,739,5.737,755,7.679,777,5.381,816,5.06,858,5.144,860,7.599,909,7.842,966,5.958,1007,4.769,1085,6.436,1187,5.806,1291,7.413,1355,5.434,1396,5.88,1516,5.958,1560,7.679,1565,5.806,1566,8.012,1567,10.764,1568,9.134,1569,6.326,1570,7.002,1571,7.679,1572,8.012,1573,9.134,1574,9.134,1575,9.134,1576,9.134,1577,9.134,1578,19.199,1579,10.764,1580,7.192,1581,7.002,1582,8.012,1583,9.134,1584,9.134,1585,7.413,1586,7.413,1587,9.134,1588,9.134]],["keywords/110",[]],["title/111",[186,428.833,1362,1118.642]],["content/111",[3,3.93,36,8.772,43,4.001,54,8.655,79,6.564,83,8.374,115,5.678,195,2.088,215,10.077,218,9.354,229,6.383,237,6.609,261,5.659,270,4.766,277,5.127,360,6.827,363,7.849,495,9.341,666,11.455,800,10.938,858,11.426,901,7.34,920,8.01,968,11.681,1348,8.732,1362,20.552,1490,10.225,1589,11.405,1590,10.225]],["keywords/111",[]],["title/112",[214,656.634,777,812.067]],["content/112",[2,1.697,15,4.058,18,2.491,22,1.084,69,3.11,79,4.401,92,4.971,93,7.855,100,7.373,173,4.183,188,7.271,192,5.529,198,5.093,202,7.72,212,10.636,214,12.134,216,9.495,217,10.065,237,7.072,266,5.311,267,7.176,268,8.411,277,2.35,279,3.666,291,3.059,321,5.34,335,4.78,340,2.481,368,4.058,394,4.994,396,4.631,408,4.75,411,5.902,457,4.994,495,4.112,546,4.4,557,4.901,559,7.596,568,4.257,573,6.921,574,5.068,605,5.496,619,6.176,666,5.043,678,6.844,705,7.48,719,6.127,720,7.271,722,7.271,733,7.855,777,13.891,779,6.77,849,4.169,956,6.446,975,7.48,1196,6.388,1280,7.48,1300,8.344,1336,9.701,1391,10.497,1393,5.742,1456,8.546,1510,9.047,1591,8.777,1592,8.546,1593,11.11,1594,6.226,1595,10.322,1596,9.047,1597,11.148,1598,11.586,1599,9.372,1600,9.372]],["keywords/112",[]],["title/113",[1601,1297.249]],["content/113",[2,2.162,3,2.058,7,5.144,11,4.888,22,2.019,73,4.405,103,5.498,147,6.841,155,5.026,159,10.027,161,6.976,165,9.763,173,4.778,209,7.654,216,5.357,219,5.761,251,3.799,268,6.686,270,5.612,291,3.494,345,5.523,364,10.104,383,6.999,394,5.705,396,5.29,468,10.782,481,7.818,512,6.892,526,5.091,537,12.878,544,10.629,547,10.699,562,8.422,569,6.603,608,7.432,659,8.545,664,7.998,676,6.241,682,5.065,720,11.702,777,7.503,807,7.998,810,5.733,956,13.744,981,9.141,1273,7.818,1336,7.577,1365,9.763,1513,11.17,1516,8.307,1552,8.198,1601,9.531,1602,12.734,1603,13.045,1604,8.973,1605,12.734,1606,12.734,1607,12.734,1608,12.734,1609,12.734]],["keywords/113",[]],["title/114",[214,465.863,216,411.382,777,576.139,1601,731.918]],["content/114",[3,2.721,15,5.717,22,1.922,43,3.059,73,4.03,79,4.545,92,5.195,103,5.03,119,6.736,155,4.598,168,2.352,173,4.372,185,6.902,187,9.794,210,10.219,214,10.944,221,5.849,223,3.687,232,7.002,258,2.325,261,4.327,262,5.03,268,8.561,270,3.644,291,5.943,296,4.581,307,5.668,317,8.068,334,4.8,339,7.406,360,5.219,438,7.233,442,8.72,464,2.919,570,7.705,616,2.971,690,7.406,704,4.598,777,11.648,925,5.323,929,5.962,956,9.735,968,8.931,1090,7.5,1336,6.931,1363,6.736,1443,5.17,1571,9.794,1601,8.72,1610,8.72,1611,6.931,1612,10.787,1613,25.753,1614,10.866,1615,10.787,1616,9.919,1617,10.787,1618,11.472,1619,10.787,1620,9.794,1621,7.075,1622,5.962]],["keywords/114",[]],["title/115",[335,310.59,1601,1031.638]],["content/115",[2,1.767,3,3.084,11,2.46,13,3.079,22,1.353,43,2.37,49,3.58,55,6.757,68,4.349,79,4.583,89,2.999,103,3.898,108,4.45,139,6.39,166,5.371,168,1.823,185,5.928,187,7.589,209,5.426,214,4.301,216,3.798,221,4.532,223,4.514,232,5.426,251,4.151,258,1.802,261,5.168,262,8.238,268,7.681,270,5.311,283,3.387,284,2.714,307,3.039,312,3.864,316,3.537,320,4.477,325,4.325,334,3.72,335,4.644,360,6.234,364,5.084,379,6.058,394,6.234,404,3.076,428,3.341,445,2.764,464,3.486,468,8.363,490,2.519,493,4.814,495,3.33,515,4.62,538,5.739,544,8.689,546,3.563,547,8.746,569,4.681,570,11.23,704,3.563,746,4.084,782,7.327,816,5.001,823,3.988,925,6.357,929,7.121,956,9.818,1030,6.48,1044,5.128,1090,5.812,1121,4.301,1187,5.739,1258,6.757,1294,6.611,1355,5.371,1363,5.22,1393,4.65,1443,7.535,1472,7.918,1554,5.739,1601,6.757,1603,8.74,1610,6.757,1611,8.279,1612,8.359,1614,9.332,1615,8.359,1616,5.319,1617,8.359,1618,6.151,1619,8.359,1623,5.604,1624,4.746,1625,7.108,1626,6.252,1627,7.108,1628,5.812,1629,6.151,1630,9.027,1631,7.918,1632,9.027,1633,5.371,1634,6.058,1635,8.359,1636,7.918,1637,5.739]],["keywords/115",[]],["title/116",[7,556.712,59,608.821]],["content/116",[]],["keywords/116",[]],["title/117",[196,534.023,212,899.071]],["content/117",[2,2.423,3,2.216,7,5.538,15,4.701,18,3.064,22,2.101,59,6.056,103,8.155,113,3.227,130,6.172,195,3.19,196,10.208,212,17.187,216,9.795,222,2.175,223,3.003,268,5.109,324,6.719,343,5.092,377,7.016,449,9.495,495,6.967,572,8.327,575,3.289,682,5.453,770,10.041,849,5.127,906,6.142,1159,9.661,1326,7.722,1391,8.826,1443,6.084,1551,9.2,1638,10.795,1639,9.842,1640,12.695,1641,13.71,1642,18.887,1643,6.496,1644,13.71,1645,12.695]],["keywords/117",[]],["title/118",[223,379.576]],["content/118",[]],["keywords/118",[]],["title/119",[803,924.222]],["content/119",[2,2.505,7,5.997,8,7.21,15,4.963,16,2.881,19,3.423,22,2.189,25,5.659,36,5.711,43,3.899,89,4.297,136,5.732,168,2.998,195,2.034,207,6.355,219,6.717,223,5.27,224,2.557,244,6.818,258,3.979,261,5.514,287,6.355,340,3.305,354,3.663,355,3.82,397,3.137,399,3.033,422,4.571,437,10.204,602,7.598,689,4.173,693,3.881,711,9.82,715,16.183,803,10.633,805,10.463,807,9.326,808,6.327]],["keywords/119",[]],["title/120",[1,390.556]],["content/120",[1,2.864,2,1.323,3,2.896,7,2.374,8,2.126,13,1.301,15,6.938,16,2.149,18,4.253,19,3.817,20,5.51,22,0.572,24,2.551,25,2.795,30,5.295,31,3.285,36,3.788,42,2.785,43,4.348,49,1.513,52,2.384,67,2.801,69,1.64,70,3.963,71,2.55,79,6.082,89,1.267,113,3.501,115,2.191,123,4.569,127,1.435,168,2.566,186,4.627,219,2.659,222,2.017,223,4.934,224,2.035,226,1.325,227,1.89,237,4.272,258,3.798,261,4.721,263,3.024,277,3.135,282,1.118,291,2.703,312,7.088,360,2.634,368,3.585,377,5.04,397,3.498,399,4.603,413,2.713,415,3.158,426,1.714,427,2.133,428,5.504,438,3.65,464,2.468,469,2.169,485,2.561,490,2.748,495,7.904,529,3.57,556,2.561,557,2.585,569,3.048,608,3.431,618,4.22,676,2.881,685,6.609,693,1.537,706,6.711,707,4.383,717,7.42,728,3.283,829,2.646,840,4.305,841,3.112,842,2.003,843,5.443,844,4.942,848,4.942,849,2.198,897,2.221,926,5.107,1118,4.4,1124,3.231,1267,2.494,1348,3.369,1349,10.686,1350,6.711,1351,5.156,1352,4.006,1353,7.994,1354,5.156,1362,12.07,1363,7.35,1364,3.785,1490,3.945,1590,3.945,1646,4.771,1647,5.443,1648,8.639,1649,5.879]],["keywords/120",[]],["title/121",[223,250.557,283,429.303,290,491.801]],["content/121",[2,2.03,3,3.838,11,2.188,13,3.485,15,3.921,18,1.795,19,2.927,20,2.672,22,0.781,25,2.279,43,2.109,49,2.066,52,3.256,54,4.561,59,3.547,67,3.826,69,3.543,70,3.231,79,6.259,86,5.831,87,3.336,103,3.467,107,4.192,118,6.156,119,4.643,155,6.218,162,3.322,168,3.615,186,3.951,191,4.731,195,1.1,214,6.05,223,5.305,258,4.335,261,2.982,270,2.512,277,1.693,282,1.527,287,3.437,290,3.452,291,4.913,298,4.083,307,5.303,316,3.146,335,1.81,360,3.598,387,3.89,397,4.12,399,1.64,400,3.407,417,4.523,445,2.459,467,3.256,469,2.962,518,3.123,536,5.105,540,3.89,542,4.314,544,6.499,547,6.542,557,3.531,562,8.399,563,7.343,605,6.261,664,7.976,722,5.238,732,6.517,743,7.556,746,3.633,747,5.311,774,5.658,777,4.731,871,4.057,897,4.799,901,3.868,925,3.669,929,4.109,930,4.282,938,4.778,976,5.459,1057,6.323,1083,9.116,1110,4.413,1443,3.564,1601,6.01,1611,4.778,1646,6.517,1650,6.01,1651,6.751,1652,8.03,1653,6.751,1654,6.156,1655,8.03,1656,8.03,1657,12.699,1658,19.504,1659,11.1,1660,6.517,1661,6.517,1662,7.044,1663,8.03,1664,15.753,1665,8.03,1666,15.753,1667,12.699,1668,8.03,1669,7.044,1670,6.517]],["keywords/121",[]],["title/122",[447,546.078,465,457.256]],["content/122",[2,1.519,3,2.36,7,4.682,13,1.585,15,6.655,18,3.263,19,4.544,20,3.857,22,2.101,30,2.291,31,3.773,47,3.241,49,1.843,66,2.559,70,2.882,79,4.973,88,4.306,106,5.314,108,3.532,113,1.686,132,5.815,155,2.828,163,3.857,168,3.387,172,6.252,185,5.097,219,3.241,223,4.035,224,2.357,228,1.989,229,4.856,230,2.426,254,3.575,258,3.348,263,6.052,270,3.626,277,1.51,283,2.688,307,2.412,326,4.263,334,4.776,335,1.614,391,4.398,397,1.513,399,1.464,411,3.793,420,5.247,429,4.448,432,3.21,440,4.491,445,2.194,447,6.646,457,6.541,458,3.165,464,2.904,465,8.457,490,1.999,491,7.281,503,10.536,514,5.247,552,3.69,579,3.257,597,4.106,608,4.181,632,5.193,667,4.882,748,3.848,771,3.08,796,5.362,807,4.5,809,5.362,816,3.969,818,3.376,829,3.225,833,3.969,840,5.247,846,5.584,848,6.023,897,2.707,910,5.048,921,9.247,1043,4.181,1309,4.5,1326,4.035,1487,6.284,1581,5.492,1646,5.815,1647,6.634,1650,5.362,1671,10.733,1672,6.634,1673,6.634,1674,6.634,1675,7.164,1676,7.164,1677,6.023,1678,5.815,1679,3.29,1680,6.023,1681,6.284,1682,7.164,1683,5.362,1684,4.221,1685,6.284,1686,7.164,1687,7.164]],["keywords/122",[]],["title/123",[64,639.394,488,939.177]],["content/123",[3,3.47,11,3.692,12,11.886,13,2.998,14,4.702,15,6.052,20,4.508,49,3.486,64,12.373,65,6.16,71,5.877,89,2.92,113,3.19,115,5.05,168,2.736,223,4.103,226,3.053,258,2.704,263,4.16,270,4.239,277,3.95,284,4.074,397,2.862,399,2.768,428,5.015,445,4.149,447,5.369,448,4.716,457,6.071,458,5.985,488,15.785,490,3.781,491,8.511,495,4.999,526,3.845,540,9.076,632,10.894,897,5.12,917,10.388,1555,10.142,1646,10.998,1688,13.551,1689,18.735,1690,13.551,1691,13.551,1692,13.551,1693,13.551]],["keywords/123",[]],["title/124",[1,257.805,413,528.008,546,451.561]],["content/124",[2,2.377,3,3.168,13,2.539,42,5.438,49,4.285,67,5.468,72,7.296,73,5.761,79,5.805,89,2.473,103,4.956,110,5.38,115,4.277,139,7.648,145,7.767,155,4.53,186,5.182,219,5.192,223,4.293,251,3.424,258,4.753,262,10.284,276,7.702,283,4.307,291,4.57,327,7.389,333,7.487,335,4.417,369,6.034,391,10.225,394,5.142,404,5.674,413,5.297,468,10.01,492,8.239,495,4.234,526,3.257,542,6.165,544,5.873,547,5.912,570,7.591,579,5.218,605,5.658,634,7.591,673,9.649,680,8.088,686,8.406,688,10.067,777,6.762,791,6.762,813,6.359,836,6.898,847,4.307,860,6.212,1049,5.468,1077,8.406,1141,7.296,1302,7.821,1443,5.094,1554,7.296,1670,9.315,1694,10.627,1695,9.649,1696,7.702,1697,10.067,1698,11.478,1699,11.478,1700,11.478,1701,11.478,1702,7.126,1703,8.239]],["keywords/124",[]],["title/125",[291,378.221,1014,574.998]],["content/125",[2,2.408,3,2.347,13,4.346,15,3.615,22,2.055,29,5.926,36,3.672,42,4.523,49,3.737,69,2.664,73,3.302,79,6.009,108,4.706,155,3.768,163,3.176,173,5.45,175,5.206,188,6.227,195,1.99,205,9.907,207,4.086,214,10.069,223,3.85,224,1.65,244,4.383,251,2.848,258,4.618,262,4.122,283,3.582,291,6.544,297,4.033,307,7.494,323,5.926,325,6.957,335,2.151,345,4.14,353,5.861,358,5.47,382,5.166,411,5.054,418,7.516,429,5.926,438,5.926,445,2.923,467,5.889,490,2.664,515,4.885,531,6.406,544,10.053,546,3.768,547,9.055,594,4.257,597,5.47,603,4.428,608,8.476,616,2.434,664,5.996,677,4.257,690,6.069,792,3.934,823,4.217,829,4.298,847,3.582,1014,8.195,1211,5.624,1255,7.318,1326,5.377,1535,3.712,1593,9.896,1594,5.332,1622,4.885,1624,5.019,1643,4.523,1650,7.145,1704,8.025,1705,9.546,1706,9.546,1707,5.091,1708,4.651,1709,5.128]],["keywords/125",[]],["title/126",[22,73.669,222,120.229,223,165.947,399,154.791,1648,664.638,1710,543.929]],["content/126",[39,9.341,43,4.081,55,11.633,70,9.267,86,7.137,115,5.792,175,8.476,181,6.511,218,9.542,222,3.889,223,5.582,226,3.502,241,6.457,251,4.637,277,4.334,282,2.956,283,5.832,307,7.754,347,5.602,368,8.384,399,5.207,404,5.295,413,7.173,435,10.451,682,6.181,714,6.066,816,8.611,1121,7.405,1554,9.881,1648,13.633,1711,15.543]],["keywords/126",[]],["title/127",[489,816.797]],["content/127",[]],["keywords/127",[]],["title/128",[661,911.164]],["content/128",[3,3.698,13,4.063,14,4.569,15,6.204,25,6.001,67,6.273,70,7.389,79,6.904,113,4.978,174,7.479,227,4.233,231,5.257,262,5.685,274,6.922,385,4.318,421,7.294,443,7.684,468,11.038,489,6.205,504,6.611,579,5.986,661,11.118,676,6.453,681,6.874,749,6.53,752,7.195,788,7.834,925,9.662,991,11.069,1056,17.164,1057,10.367,1410,14.905,1712,13.167,1713,13.167,1714,17.005,1715,11.549,1716,5.872,1717,19.581,1718,17.005,1719,13.167,1720,18.365,1721,11.549]],["keywords/128",[]],["title/129",[749,859.577]],["content/129",[3,3.485,6,6.941,11,2.724,13,4,15,6.7,25,2.837,42,4.737,49,2.572,55,7.483,71,6.523,79,6.912,102,8.14,113,4.734,174,5.679,198,4.568,222,1.586,231,3.991,263,3.069,268,3.726,321,4.789,340,4.024,369,5.256,457,6.738,465,3.317,467,4.054,489,4.712,490,2.79,494,7.799,544,5.116,621,8.405,660,4.687,661,7.907,681,5.22,704,3.946,749,11.659,752,5.892,753,10.796,785,8.114,792,4.12,841,5.293,849,3.739,925,8.26,929,7.696,930,8.02,991,15.199,1056,19.633,1410,17.503,1453,5.452,1490,6.709,1594,5.584,1624,5.256,1714,13.926,1715,8.769,1717,9.257,1718,9.257,1721,8.769,1722,9.998,1723,6.812,1724,9.998,1725,9.998,1726,15.04,1727,9.998,1728,9.998,1729,9.257]],["keywords/129",[]],["title/130",[64,639.394,488,939.177]],["content/130",[1,3.674,3,2.635,15,6.215,64,11.583,79,6.364,89,3.514,263,6.512,272,8.344,284,4.902,488,14.454,489,7.684,749,12.384,752,6.388,925,7.45,930,8.695,991,17.833,1056,17.216,1410,19.135,1715,14.302,1716,5.213,1721,14.302,1729,15.098,1730,21.212,1731,9.607,1732,16.305]],["keywords/130",[]],["title/131",[1212,945.178]],["content/131",[127,5.323,268,8.128,489,10.278,540,10.566,578,11.715,1212,11.894,1733,20.194]],["keywords/131",[]],["title/132",[489,649.558,547,709.973]],["content/132",[3,3.481,13,3.015,14,8.058,22,1.829,73,4.715,79,6.269,127,3.327,161,5.3,220,5.783,222,2.163,270,4.264,300,8.891,317,9.439,394,6.106,396,5.663,441,10.732,464,6.105,489,11.484,547,11.963,579,6.196,661,11.324,696,8.774,748,7.322,749,11.518,752,5.34,925,10.611,930,7.268,1053,16.499,1298,9.014,1589,10.202,1603,11.814,1611,12.815,1614,7.491,1616,8.03,1618,9.287,1716,6.014,1734,13.63,1735,13.63]],["keywords/132",[]],["title/133",[421,633.815,621,961.816,1736,837.857]],["content/133",[3,2.242,14,6.607,15,6.103,22,2.275,25,3.937,43,3.643,73,4.799,79,6.316,87,7.911,115,5.17,237,9.429,270,4.34,303,5.938,312,5.938,320,6.881,421,10.549,489,11.938,522,8.82,569,7.194,579,6.307,596,8.82,616,3.538,661,12.301,749,9.444,752,7.46,925,6.339,929,7.1,1010,16.702,1053,12.169,1204,7.95,1355,8.255,1674,12.846,1737,10.16,1738,17.631,1739,12.169,1740,12.846,1741,13.874,1742,13.874,1743,13.874,1744,13.874,1745,9.31]],["keywords/133",[]],["title/134",[206,570.267,354,340.075]],["content/134",[]],["keywords/134",[]],["title/135",[22,111.229,354,282.279,355,294.361]],["content/135",[2,2.117,8,4.435,22,1.192,66,3.857,120,5.495,136,4.735,139,8.021,175,6.688,195,3.337,216,5.159,222,3.228,223,3.826,228,3.406,229,7.318,263,3.765,268,4.57,272,6.276,277,2.586,283,8.32,290,5.272,293,6.85,296,4.823,307,4.129,354,5.471,355,5.705,372,3.785,421,6.794,490,3.422,495,4.524,504,6.157,515,6.276,546,6.895,575,2.943,597,7.028,599,9.574,600,11.903,602,8.939,641,5.368,642,6.493,666,5.548,731,5.074,764,8.804,771,5.272,792,5.054,897,4.634,921,5.249,1090,7.895,1213,11.356,1621,7.448,1624,6.448,1746,12.264,1747,12.264,1748,6.046,1749,12.264,1750,12.264,1751,12.264,1752,12.264,1753,12.264,1754,9.954,1755,8,1756,10.311,1757,8.982]],["keywords/135",[]],["title/136",[1020,952.57]],["content/136",[2,2.479,22,2.316,36,8.272,66,3.677,69,4.647,154,10.864,160,7.808,241,6.92,246,9.303,279,5.478,340,3.707,349,9.72,352,6.209,374,6.165,504,8.362,526,6.759,564,11.015,602,8.523,692,8.882,719,9.154,894,10.225,1020,9.154,1150,5.797,1278,10.864,1758,11.736,1759,12.769,1760,12.769,1761,14.609,1762,10.115,1763,19.913,1764,16.656]],["keywords/136",[]],["title/137",[354,282.279,355,294.361,1765,694.819]],["content/137",[2,2.328,3,3.195,22,1.922,71,8.574,161,5.701,195,2.709,196,5.68,222,3.137,223,3.211,277,3.091,296,5.765,304,9.438,305,10.737,309,11.899,310,11.899,345,6.359,354,4.878,355,5.087,363,7.552,374,5.426,375,8.058,413,6.766,548,12.325,551,5.945,557,6.446,594,6.537,643,9.438,662,10.973,711,9.696,750,10.973,764,10.524,810,6.6,849,5.482,875,4.091,901,7.062,1018,9.99,1021,10.541,1042,8.999,1175,8.811,1198,10.331,1391,9.438,1765,8.904,1766,14.661,1767,13.575,1768,8.401,1769,13.575]],["keywords/137",[]],["title/138",[222,218.697,1042,554.539]],["content/138",[1,1.418,2,1.615,3,3.172,8,2.275,15,1.566,16,0.909,19,3.076,22,1.013,30,2.012,41,6.617,43,4.516,54,3.574,60,3.514,66,1.389,69,1.756,70,2.532,73,3.605,79,1.698,113,4.62,127,1.536,130,6.007,152,5.641,155,2.484,168,2.694,173,2.361,181,4.366,185,5.417,195,2.539,197,3.574,214,2.998,216,2.647,217,5.442,219,2.846,222,4.153,223,2.922,224,0.715,227,2.023,228,2.894,230,2.131,231,2.512,237,4.521,261,3.871,263,1.932,270,1.968,277,1.327,281,2.403,297,2.658,307,2.118,321,3.014,324,3.084,329,2.447,352,1.817,353,3.863,354,1.552,355,3.433,359,6.67,360,2.819,361,9.232,367,5.06,372,1.942,374,2.329,386,3.102,401,2.532,415,5.599,423,3.638,432,4.67,435,3.199,440,5.17,464,1.576,467,2.551,483,4.608,494,3.263,540,3.048,551,2.551,556,4.541,574,2.861,579,2.861,605,3.102,616,1.605,627,1.601,631,3.744,643,4.051,644,2.512,677,5.949,693,2.724,697,3.199,717,5.201,733,4.434,735,4.104,781,9.092,810,2.833,833,5.774,897,2.378,906,4.67,909,3.514,925,2.875,929,3.22,930,3.355,976,2.705,982,3.952,1007,6.966,1022,9.527,1042,6.243,1109,5.29,1159,4.434,1198,4.434,1211,3.707,1237,3.263,1256,4.517,1355,3.744,1393,3.241,1535,4.053,1559,6.799,1614,3.458,1616,3.707,1618,4.287,1638,4.954,1643,2.981,1659,4.434,1661,5.107,1680,5.29,1748,3.102,1770,4.608,1771,10.423,1772,5.826,1773,5.826,1774,5.826,1775,3.38,1776,5.519,1777,6.292,1778,6.292,1779,6.292,1780,5.519,1781,6.292,1782,5.519,1783,5.826,1784,4.287,1785,5.519,1786,5.519,1787,5.519,1788,5.519,1789,5.519,1790,5.519,1791,5.519,1792,5.107,1793,4.358,1794,3.952,1795,6.141,1796,3.821,1797,5.826,1798,4,1799,4.161,1800,3.38,1801,5.29,1802,7.633,1803,5.48,1804,5.826,1805,5.519,1806,5.519,1807,8.207,1808,4.104,1809,3.952]],["keywords/138",[]],["title/139",[3,184.904,222,181.529,372,353.108]],["content/139",[1,4.205,36,7.177,66,4.12,222,4.279,228,5.182,261,6.93,281,4.301,329,7.256,358,10.693,359,8.021,372,7.748,408,7.952,752,7.31,804,7.689,1042,10.1,1110,10.256,1810,11.584]],["keywords/139",[]],["title/140",[66,304.314,222,218.697]],["content/140",[1,3.456,3,2.479,30,4.904,42,7.267,66,5.052,87,6.372,185,5.355,195,2.101,222,4.29,223,4.462,224,2.315,228,5.658,229,6.425,241,6.372,261,5.696,281,3.536,295,10.638,307,5.163,329,7.924,345,6.652,354,3.784,355,3.946,359,6.593,677,6.839,752,6.009,804,6.32,855,11.232,897,5.796,1022,8.497,1024,9.874,1033,9.633,1042,8.198,1087,12.076,1810,9.522,1811,11.232,1812,9.315,1813,14.202]],["keywords/140",[]],["title/141",[3,222.763,1042,554.539]],["content/141",[1,1.65,2,1.228,3,3.949,8,2.648,16,1.058,19,1.688,22,0.712,41,7.348,43,4.892,49,3.035,60,4.09,79,1.977,102,3.963,109,4.273,113,3.999,130,5.311,152,6.385,155,2.89,168,3.761,173,2.748,181,3.067,185,5.173,186,2.278,195,2.728,197,4.159,208,3.03,211,4.447,216,3.08,217,6.159,220,3.107,222,2.351,223,1.604,227,2.354,228,2.033,231,2.923,237,3.176,241,3.042,244,3.362,261,4.382,263,2.248,268,7.42,281,2.72,297,3.094,324,3.589,326,4.357,343,4.382,352,2.114,353,4.495,354,1.807,355,3.812,359,3.148,360,3.281,361,4.357,363,3.772,367,4.474,386,3.61,408,3.12,423,4.234,432,5.286,435,3.723,438,4.546,439,3.877,440,2.837,464,1.834,467,2.969,494,3.797,556,3.19,607,3.265,627,1.863,677,3.265,682,2.912,693,1.914,707,2.525,715,5.943,717,3.654,733,5.16,735,4.776,749,3.631,781,11.577,810,3.296,814,4.655,833,6.536,875,2.043,897,2.767,906,5.286,909,4.09,925,3.345,929,3.747,930,3.905,968,5.613,976,3.148,982,4.599,1007,7.735,1022,9.412,1023,1.72,1042,4.747,1159,5.16,1211,4.314,1221,2.847,1237,8.81,1256,5.256,1393,3.772,1535,6.607,1559,7.696,1614,4.024,1616,4.314,1618,4.989,1638,5.765,1643,3.469,1659,5.16,1661,5.943,1680,6.156,1748,3.61,1770,5.362,1780,10.348,1782,6.423,1784,4.989,1785,6.423,1786,6.423,1787,6.423,1788,6.423,1789,10.348,1790,10.348,1791,10.348,1792,9.575,1793,5.071,1794,4.599,1795,4.314,1796,4.447,1799,4.843,1800,3.933,1801,6.156,1802,8.64,1803,6.202,1807,9.289,1814,6.78,1815,4.913,1816,7.322,1817,7.322,1818,7.322,1819,7.322]],["keywords/141",[]],["title/142",[223,301.858,1042,554.539]],["content/142",[1,1.445,2,1.634,3,3.024,8,2.319,15,1.596,16,0.927,19,3.118,22,1.03,30,2.051,41,6.707,43,4.563,54,3.643,60,3.582,69,1.79,79,1.731,113,4.871,127,1.565,130,6.088,155,2.531,168,3.17,173,2.407,181,4.436,185,4.722,186,4.885,195,2.563,197,3.643,214,3.055,216,2.698,217,5.528,219,2.901,222,1.018,223,5.751,224,0.729,227,2.062,228,2.94,230,2.172,231,2.561,237,4.593,261,3.933,263,1.969,270,2.006,281,2.441,297,2.71,307,2.159,321,3.072,324,3.143,352,1.852,353,3.937,354,1.582,355,3.48,359,5.814,360,2.873,361,6.3,367,5.128,372,1.98,374,2.374,386,3.162,401,2.58,413,2.96,423,3.709,432,4.744,435,3.261,440,5.24,464,1.607,467,2.601,494,3.326,540,3.107,551,2.601,556,4.613,579,2.916,605,3.162,616,1.636,627,1.632,631,3.816,643,4.129,644,2.561,677,6.03,693,2.768,697,3.261,717,5.284,733,4.519,735,4.184,781,9.215,810,2.887,833,5.866,897,2.424,901,3.09,906,4.744,909,3.582,925,2.93,929,3.282,930,3.42,976,2.757,982,4.028,1007,7.061,1022,9.627,1042,6.316,1109,5.392,1154,4.077,1159,4.519,1198,4.519,1211,3.779,1237,3.326,1256,4.604,1312,3.855,1355,3.816,1393,3.304,1535,4.118,1559,6.907,1614,3.525,1616,3.779,1618,4.37,1638,5.05,1643,3.039,1659,4.519,1661,5.205,1680,5.392,1748,3.162,1770,4.697,1772,5.939,1773,5.939,1774,5.939,1775,3.445,1776,5.626,1780,5.626,1782,5.626,1783,5.939,1784,4.37,1785,5.626,1786,5.626,1787,5.626,1788,5.626,1789,5.626,1790,5.626,1791,5.626,1792,5.205,1793,4.442,1794,4.028,1795,6.239,1796,3.895,1797,5.939,1798,4.077,1799,4.242,1800,3.445,1801,5.392,1802,7.755,1803,5.567,1804,5.939,1805,5.626,1806,5.626,1807,8.338,1808,4.184,1809,4.028,1814,5.939,1820,4.442,1821,6.414,1822,5.939,1823,6.414,1824,2.676,1825,6.414,1826,6.414]],["keywords/142",[]],["title/143",[223,301.858,372,425.406]],["content/143",[1,4.205,36,7.177,66,4.12,223,5.906,228,5.182,261,6.93,281,4.301,329,7.256,358,10.693,359,8.021,372,7.748,408,7.952,752,7.31,804,7.689,1042,10.1,1110,10.256,1810,11.584]],["keywords/143",[]],["title/144",[66,304.314,223,301.858]],["content/144",[1,3.053,2,1.41,3,3.93,7,5.473,16,1.958,22,1.317,25,3.845,30,4.333,47,6.13,66,4.136,69,3.781,89,2.92,136,5.231,161,7.285,185,4.731,222,3.858,223,5.508,224,2.128,228,3.763,229,5.677,258,2.704,261,6.958,277,2.857,281,3.124,294,8.511,295,9.781,297,5.725,307,4.562,359,8.053,373,9.727,397,2.862,408,5.774,413,8.646,488,9.233,511,6.491,532,7.507,602,9.587,658,5.431,677,6.042,752,5.308,804,5.584,842,4.617,845,11.392,1024,8.723,1042,7.538,1110,7.447,1827,13.551,1828,13.551,1829,13.551,1830,9.384]],["keywords/144",[]],["title/145",[222,181.529,228,317.695,1042,460.294]],["content/145",[113,4.734,195,2.755,207,8.608,217,10.5,222,4.117,228,6.717,259,13.929,359,8.646,422,6.191,897,7.6,1042,9.733,1810,12.486]],["keywords/145",[]],["title/146",[1021,649.558,1831,1009.408]],["content/146",[1,2.442,3,3.065,22,1.553,41,5.374,43,2.845,66,2.392,73,5.524,79,2.925,102,5.864,113,2.551,152,5.864,179,5.657,180,5.25,181,4.539,185,3.783,195,3.057,196,4.198,197,6.155,207,6.835,217,5.657,222,3.83,224,1.231,228,5.266,231,4.326,251,3.233,281,3.681,291,4.382,304,6.976,324,7.826,345,4.7,352,3.128,359,6.865,368,3.944,378,7.635,416,5.619,485,6.957,504,8.017,551,4.394,556,4.721,558,8.794,605,5.342,617,9.11,658,8.386,677,7.12,697,5.509,712,5.955,739,10.03,829,4.878,897,4.095,919,7.384,925,4.951,929,5.545,930,5.778,973,7.271,1007,5.657,1022,10.506,1024,10.28,1042,4.36,1453,5.909,1567,8.307,1614,5.955,1616,6.384,1618,10.881,1659,7.635,1748,5.342,1796,6.581,1799,7.166,1800,5.821,1807,8.532,1832,13.163,1833,9.505,1834,8.532,1835,8.11,1836,8.532,1837,5.407,1838,14.007]],["keywords/146",[]],["title/147",[255,782.945,1021,649.558]],["content/147",[1,4.961,166,13.099,222,3.493,255,12.506,897,8.319,1021,10.375]],["keywords/147",[]],["title/148",[3,184.904,228,317.695,1042,460.294]],["content/148",[3,4.162,113,4.654,195,3.28,207,8.461,217,10.322,228,6.648,259,13.692,359,8.499,422,6.086,897,7.47,1025,12.417,1042,9.632,1810,12.274]],["keywords/148",[]],["title/149",[1021,649.558,1831,1009.408]],["content/149",[1,2.234,3,4.066,8,3.584,13,3.306,22,0.964,24,2.568,41,4.916,43,2.603,66,2.189,73,3.429,79,5.405,102,5.365,106,3.608,113,2.333,160,4.647,179,5.175,180,4.802,181,4.152,185,3.461,195,2.944,196,3.84,197,5.631,207,6.395,217,5.175,222,1.573,228,4.995,230,3.357,231,3.957,251,2.957,268,5.569,281,3.445,291,4.101,304,6.381,324,7.324,345,4.299,352,2.862,359,7.732,368,3.608,378,6.985,416,5.14,464,2.483,485,6.51,504,4.977,551,4.019,556,6.51,558,8.045,605,4.887,617,8.333,658,8.611,667,6.754,677,6.663,697,5.04,712,5.448,739,9.385,764,7.115,829,4.462,897,5.647,910,6.985,919,6.754,925,4.529,929,5.072,930,5.286,973,6.651,1007,5.175,1022,11.903,1023,2.328,1024,6.381,1025,6.226,1042,3.988,1453,5.406,1567,7.599,1614,5.448,1616,5.84,1618,10.182,1659,6.985,1748,4.887,1796,6.02,1798,6.301,1799,6.556,1800,5.325,1807,7.805,1832,12.784,1833,8.694,1834,7.805,1835,7.419,1836,7.805,1837,4.946,1838,13.107]],["keywords/149",[]],["title/150",[255,782.945,1021,649.558]],["content/150",[3,3.754,11,5.125,13,4.162,89,4.054,102,12.569,168,4.689,186,5.853,222,2.985,340,5.17,372,5.806,440,7.288,644,7.51,808,8.016,925,8.594,929,9.626,1001,15.814,1024,12.11,1212,10.258,1839,14.421,1840,13.503]],["keywords/150",[]],["title/151",[223,250.557,228,317.695,1042,460.294]],["content/151",[113,4.776,195,2.78,207,8.683,217,10.592,223,5.326,228,6.753,259,14.05,359,8.721,422,6.245,897,7.666,1042,9.783,1810,12.595]],["keywords/151",[]],["title/152",[1021,649.558,1831,1009.408]],["content/152",[1,2.5,3,3.107,22,1.079,41,5.502,43,2.913,66,2.449,73,3.838,79,2.995,102,6.004,113,2.612,179,5.792,180,5.375,181,4.648,185,3.873,186,3.452,195,2.9,196,4.298,197,6.302,207,6.954,217,5.792,222,1.76,223,4.933,228,5.339,231,4.429,251,3.31,281,3.745,291,4.459,304,7.142,324,7.963,345,4.812,352,3.203,359,6.985,368,4.038,378,7.818,416,5.753,485,7.079,504,5.57,551,4.499,556,7.079,558,9.004,605,5.469,617,9.327,658,8.482,677,7.245,697,5.641,712,6.098,739,10.205,829,4.994,897,4.192,919,7.56,925,5.069,929,5.677,930,5.916,973,7.445,1007,5.792,1022,11.725,1024,7.142,1042,4.464,1453,6.05,1567,8.505,1614,6.098,1616,6.537,1618,11.071,1659,7.818,1748,5.469,1796,6.738,1799,7.337,1800,5.96,1807,8.735,1832,13.261,1833,9.731,1834,8.735,1835,8.304,1836,8.735,1837,5.536,1838,14.252]],["keywords/152",[]],["title/153",[255,782.945,1021,649.558]],["content/153",[1,4.961,166,13.099,223,4.822,255,12.506,897,8.319,1021,10.375]],["keywords/153",[]],["title/154",[1042,554.539,1768,789.838]],["content/154",[2,1.542,3,1.183,7,5.984,8,2.648,16,1.058,18,1.637,20,3.925,22,1.147,25,3.348,42,3.469,49,4.371,59,9.249,61,5.932,62,4.881,73,4.081,89,3.661,93,5.16,103,3.162,107,3.823,108,3.61,113,1.724,130,10.124,160,3.432,168,4.228,180,3.547,186,4.61,188,4.776,195,1.003,206,4.881,222,1.162,223,1.604,224,2.262,225,3.527,226,1.65,227,2.354,229,3.067,230,2.48,263,3.622,270,2.29,281,2.72,284,3.547,291,2.009,294,4.599,296,4.639,329,5.762,340,1.63,354,1.807,396,3.042,425,13.377,436,5.481,437,7.582,445,2.242,457,5.286,469,2.701,490,3.292,526,2.078,527,3.797,531,4.913,575,5.395,579,3.329,599,5.094,600,10.096,605,5.816,606,4.273,627,6.383,633,4.913,652,3.925,704,2.89,717,3.654,752,2.869,792,4.861,801,5.071,808,3.12,895,3.538,896,4.397,897,6.42,903,5.481,966,4.776,976,7.303,1021,9.383,1022,4.057,1026,6.246,1042,2.946,1143,3.676,1155,3.631,1189,7.409,1530,6.423,1532,6.423,1638,5.765,1643,3.469,1760,11.359,1763,6.78,1768,6.761,1775,3.933,1841,16.99,1842,5.256,1843,7.324,1844,7.322,1845,11.798,1846,6.423,1847,7.322,1848,7.322,1849,6.423,1850,5.613,1851,5.256]],["keywords/154",[]],["title/155",[11,472.249]],["content/155",[]],["keywords/155",[]],["title/156",[11,375.556,106,501.688]],["content/156",[1,2.901,2,1.882,3,2.922,11,6.503,19,4.168,22,1.252,33,7.738,36,6.954,70,5.18,79,4.88,100,8.515,106,6.581,112,4.309,139,8.302,147,6.916,195,3.104,205,6.036,207,5.51,210,11.294,221,9.077,231,5.14,269,9.073,287,5.51,293,7.191,312,8.943,316,5.044,326,7.661,427,4.671,428,4.766,455,6.769,458,5.687,464,3.226,527,6.677,554,8.773,571,9.242,578,6.916,681,6.722,692,9.641,696,8.289,697,6.546,711,8.515,728,10.098,730,7.82,1039,9.073,1045,11.294,1258,9.637,1450,10.138,1467,9.429,1589,13.532,1852,12.875,1853,11.922,1854,11.294,1855,12.875,1856,8.185,1857,8.289,1858,12.875,1859,7.191,1860,12.875,1861,11.922,1862,11.922,1863,8.399]],["keywords/156",[]],["title/157",[422,533.514]],["content/157",[2,2.413,11,6.976,22,1.532,89,4.469,103,6.802,106,7.549,108,10.224,146,8.114,168,3.181,195,2.841,207,6.742,222,2.5,224,1.79,228,4.374,254,7.86,281,3.631,284,4.736,290,6.772,296,6.194,307,7.805,335,3.55,344,13.818,422,7.137,423,9.109,429,9.78,514,11.537,562,10.419,995,9.373,1110,8.658,1549,10.91,1864,10.571,1865,15.753,1866,15.753,1867,15.753]],["keywords/157",[]],["title/158",[957,1041.674]],["content/158",[2,1.839,3,2.014,11,6.672,15,3.102,19,4.073,22,1.718,25,3.536,42,5.904,43,5.39,66,3.901,106,4.536,168,2.516,172,4.644,181,5.22,209,7.49,219,5.637,223,2.729,224,1.416,227,4.007,244,8.113,254,8.816,258,2.487,270,3.898,288,6.462,307,4.195,323,7.736,324,6.107,364,7.018,368,4.536,375,6.849,395,10.476,422,3.836,438,7.736,440,4.828,447,7,465,4.134,490,5.727,512,6.744,546,4.919,561,8.022,575,2.99,619,6.904,638,7.922,681,6.506,738,8.781,784,8.63,787,8.242,788,7.414,812,7.915,816,6.904,835,5.937,873,8.326,956,7.206,957,7.49,1066,12.892,1204,7.141,1366,9.327,1464,10.93,1467,9.126,1650,9.327,1653,10.476,1862,11.538,1868,11.538,1869,12.462,1870,12.462,1871,12.462,1872,12.462]],["keywords/158",[]],["title/159",[1603,1088.567]],["content/159",[2,1.771,11,6.557,19,2.727,22,1.15,31,3.057,52,4.796,79,4.595,106,7.258,119,6.839,155,6.718,205,5.545,244,5.431,253,15.286,270,3.7,282,2.25,307,3.982,312,5.062,331,8.191,386,5.831,413,5.459,457,7.626,464,2.963,465,3.924,490,3.3,495,4.363,509,6.969,515,6.053,531,7.937,544,6.053,551,8.843,639,7.261,660,5.545,676,5.797,681,8.886,696,7.614,709,8.059,746,5.351,748,6.354,816,6.553,821,9.313,835,5.635,849,4.423,993,6.401,1074,5.902,1363,11.529,1569,8.191,1603,12.523,1629,8.059,1681,14.93,1716,7.929,1873,11.828,1874,9.313,1875,5.73,1876,7.343,1877,11.828,1878,11.828,1879,14.05,1880,18.462,1881,10.375,1882,10.952,1883,11.828,1884,10.375,1885,10.82]],["keywords/159",[]],["title/160",[11,375.556,73,476.77]],["content/160",[2,1.283,3,3.592,11,6.84,13,4.917,14,7.712,18,4.561,19,5.123,20,6.789,22,1.199,49,3.172,52,5,79,5.999,83,6.776,89,2.657,102,9.489,127,3.009,155,6.921,161,4.794,174,7.004,198,5.633,225,8.447,235,6.351,251,3.678,263,3.785,270,3.857,282,3.335,284,3.707,299,8.688,321,5.906,374,6.49,385,4.043,426,3.595,464,5.112,465,6.77,512,6.673,606,10.233,681,6.437,731,5.101,736,6.528,823,5.446,993,6.673,994,10.815,1048,10.815,1088,8.042,1538,7.937,1589,9.228,1633,7.336,1723,8.401,1820,8.539,1886,10.007,1887,12.329,1888,8.688,1889,10.815,1890,12.329]],["keywords/160",[]],["title/161",[160,812.464]],["content/161",[1,2.397,2,1.639,3,1.719,11,7.359,13,4.15,14,6.509,15,2.648,17,7.138,22,2.153,24,5.372,71,4.614,73,3.68,79,2.871,103,4.593,106,6.828,155,4.199,160,7.384,227,3.42,253,12.077,270,3.328,282,2.023,303,8.876,334,4.383,468,6.393,492,7.636,531,10.571,551,4.314,596,6.762,682,4.231,699,7.496,700,7.248,704,6.218,730,6.461,858,8.872,887,11.1,901,5.124,921,4.553,924,7.962,1050,7.859,1063,5.757,1212,5.801,1267,6.684,1281,7.035,1285,9.373,1308,13.351,1315,9.894,1363,9.109,1736,11.537,1879,7.496,1882,14.586,1891,9.331,1892,10.638,1893,10.638,1894,10.638,1895,7.962,1896,8.634,1897,10.638,1898,10.638,1899,15.753,1900,10.638,1901,17.37,1902,10.638,1903,10.638,1904,7.79,1905,7.496,1906,14.586,1907,10.638]],["keywords/161",[]],["title/162",[11,311.729,73,395.742,186,355.952]],["content/162",[3,3.484,4,3.797,11,6.937,13,2.552,14,5.044,15,2.871,19,4.772,20,3.838,22,1.625,36,2.739,52,4.677,54,4.045,59,3.145,61,2.486,64,3.303,65,3.237,66,1.572,68,3.43,70,4.641,73,5.782,103,3.074,108,3.51,113,1.676,127,1.738,147,3.825,152,3.854,162,2.946,186,6.93,195,3.135,205,5.407,222,3.119,223,3.184,224,0.809,229,2.983,235,7.489,237,3.088,241,2.958,251,2.124,258,1.421,268,2.654,270,3.608,277,3.065,282,2.194,300,4.645,307,6.182,312,7.86,325,3.411,329,2.769,330,2.404,334,2.934,335,1.605,340,3.236,345,5.003,347,2.566,354,1.757,355,1.832,360,3.19,372,3.56,404,2.426,408,3.034,426,4.24,427,4.185,434,3.575,447,4.57,465,2.362,469,4.255,481,4.371,504,3.575,523,5.33,546,4.553,551,7.447,552,7.489,616,1.816,644,2.843,682,2.832,691,5.607,728,6.442,730,4.324,731,2.946,792,4.753,808,3.034,855,5.215,873,3.356,918,4.852,926,3.692,959,4.472,1066,9.131,1068,9.082,1094,5.33,1108,5.33,1302,4.852,1309,4.472,1716,2.277,1875,3.883,1895,5.33,1908,11.534,1909,9.697,1910,3.945,1911,7.121,1912,5.779,1913,5.986,1914,9.697,1915,8.28,1916,5.941,1917,9.906,1918,9.082,1919,6.246,1920,6.593,1921,9.361,1922,15.478]],["keywords/162",[]],["title/163",[547,892.766]],["content/163",[2,2.326,3,3.073,8,3.937,11,2.966,13,4.64,22,1.558,31,2.814,35,7.2,42,5.158,43,2.859,59,4.809,67,5.186,70,4.38,71,4.722,79,6.525,89,3.453,103,4.701,115,4.057,118,8.346,139,7.358,189,8.148,193,7.973,195,2.195,209,6.543,223,2.384,250,6.081,258,2.173,262,6.919,265,6.353,283,4.085,290,4.68,291,2.987,307,3.665,325,5.215,327,7.008,329,4.233,334,4.486,349,6.353,383,5.983,391,6.683,411,5.764,421,6.031,468,6.543,495,7.014,527,5.645,536,6.921,544,9.731,545,7.305,546,4.297,547,9.795,579,4.949,605,5.367,611,7.2,696,7.008,739,6.838,741,5.937,746,4.925,748,8.608,791,9.441,809,8.148,960,7.305,964,5.571,995,6.477,1075,10.08,1081,8.148,1112,10.316,1121,7.634,1267,4.619,1512,9.549,1516,7.101,1594,6.081,1603,6.838,1694,10.08,1923,7.008,1924,9.549,1925,10.887,1926,10.887,1927,9.549,1928,7.973,1929,9.549,1930,6.838,1931,10.08,1932,10.08,1933,10.887]],["keywords/163",[]],["title/164",[544,705.325,1603,865.683]],["content/164",[1,1.539,2,1.47,3,2.904,7,5.706,11,4.896,13,4.265,14,2.369,15,6.339,19,3.256,20,2.272,22,1.585,43,1.793,52,4.52,79,4.401,89,1.471,106,2.485,107,3.565,119,3.948,158,5,159,8.777,168,2.852,173,5.301,181,2.86,208,5.845,215,4.516,219,3.089,223,2.441,232,4.104,251,2.037,270,2.136,274,3.59,284,2.053,312,4.771,323,4.239,329,2.655,335,1.539,391,4.192,409,7.645,411,3.615,421,6.176,428,2.527,443,9.515,445,2.091,457,3.059,467,2.769,468,4.104,490,1.905,514,5,542,3.668,544,11.825,546,2.695,547,8.399,579,3.104,628,5.376,660,3.201,664,4.288,686,8.164,720,7.271,743,11.47,745,5.542,746,5.043,748,5.988,788,4.062,792,2.813,809,5.111,821,5.376,841,3.615,846,8.655,897,2.58,925,9.292,929,9.865,930,9.581,951,5.989,1017,8.164,1039,4.811,1057,5.376,1175,4.104,1256,4.901,1273,4.192,1355,4.062,1363,3.948,1364,11.567,1422,9.047,1423,9.047,1565,8.98,1594,3.814,1603,12.108,1611,6.632,1614,9.875,1616,10.586,1696,4.582,1881,5.989,1895,5.111,1904,5,1934,6.828,1935,6.828,1936,5.376,1937,5.989,1938,9.047,1939,9.778,1940,6.828,1941,6.828,1942,8.002,1943,3.913,1944,5.74,1945,3.913,1946,6.828,1947,8.546,1948,5.542,1949,6.828,1950,5.989,1951,6.828,1952,5.542,1953,6.828,1954,6.828]],["keywords/164",[]],["title/165",[11,311.729,290,491.801,1066,718.559]],["content/165",[1,1.671,2,1.555,3,3.402,11,7.161,13,1.641,15,4.984,18,3.34,19,2.747,20,2.467,22,1.947,30,2.371,36,5.748,49,1.908,60,4.142,73,2.565,79,4.62,87,3.081,106,4.338,115,2.764,154,4.837,175,4.044,186,3.708,195,2.569,207,3.174,219,3.355,221,3.723,222,3.584,223,1.624,226,1.671,228,2.059,232,4.457,235,3.82,250,4.142,255,4.212,261,6.356,263,2.277,270,2.32,277,1.563,282,2.267,290,3.188,291,4.101,296,2.916,297,5.035,303,3.174,307,5.762,312,3.174,316,2.905,329,2.884,330,2.504,335,1.671,340,1.651,341,5.431,344,6.505,348,3.954,354,1.83,355,1.908,357,3.476,368,4.338,374,2.745,384,4.774,423,4.288,426,3.476,429,4.604,430,4.177,445,3.649,464,1.858,465,5.678,469,2.735,490,2.069,520,4.412,522,4.714,532,4.108,538,4.714,552,3.82,594,3.307,657,5.225,682,2.949,704,4.704,728,4.142,731,3.068,813,4.108,901,3.572,973,10.027,995,4.412,1066,13.746,1112,4.774,1261,5.225,1293,5.323,1308,11.018,1424,10.02,1443,3.291,1445,5.225,1626,5.136,1672,6.866,1914,14.388,1915,10.727,1920,6.866,1955,5.839,1956,9.333,1957,16.446,1958,5.431,1959,6.866,1960,13.836,1961,15.847,1962,7.416,1963,6.019,1964,5.225,1965,7.416]],["keywords/165",[]],["title/166",[31,356.226,1603,865.683]],["content/166",[3,3.065,11,5.905,13,3.051,14,7.52,15,3.433,18,4.238,19,4.996,20,4.589,22,1.844,31,6.032,52,7.69,73,4.771,162,5.706,186,5.9,222,2.188,223,5.112,232,8.289,258,2.752,268,5.14,282,2.623,307,4.643,380,8.289,385,4.523,464,5.848,465,6.291,504,6.924,544,7.058,705,9.255,743,8.206,792,5.683,835,9.034,837,8.562,841,7.302,1363,7.975,1603,15.369,1611,8.206,1851,13.613,1916,7.104,1966,13.792,1967,11.595,1968,13.792,1969,13.792]],["keywords/166",[]],["title/167",[864,498.398,1970,1118.642]],["content/167",[]],["keywords/167",[]],["title/168",[2,101.77,206,404.588,330,330.179,354,241.274]],["content/168",[2,2.462,3,2.654,16,2.373,22,2.434,59,10.45,61,8.259,62,9.788,103,7.09,195,2.92,206,6.794,263,5.041,281,3.785,325,10.208,330,5.544,354,4.051,404,5.594,526,4.66,564,10.86,646,7.617,692,8.756,906,7.357,1042,6.606,1488,11.447,1922,12.929,1971,12.29,1972,12.29,1973,9.77,1974,8.095]],["keywords/168",[]],["title/169",[2,119.066,330,386.293,1026,605.71]],["content/169",[2,1.717,8,3.119,18,1.928,22,1.604,24,2.234,36,3.318,44,5.553,67,4.109,68,4.155,89,2.895,120,3.864,136,5.186,154,5.627,162,3.569,192,4.278,195,1.182,229,5.627,237,3.741,277,1.819,279,2.837,283,5.041,284,2.593,316,3.379,354,4.071,355,4.245,367,3.271,370,3.864,385,2.829,386,4.252,389,4.567,452,5.082,483,6.317,495,3.182,518,5.224,522,5.483,526,3.812,529,5.239,572,5.239,575,3.223,599,10.238,600,5.878,601,6.231,602,4.414,603,4.001,604,6.919,611,5.705,616,2.2,627,4.198,641,3.775,642,4.567,652,2.87,660,4.043,697,4.386,704,3.405,721,8.133,771,3.708,792,3.554,863,12.316,865,7.987,866,16.334,869,7.987,870,5.627,871,6.786,872,7.914,873,4.065,874,5.878,875,2.407,876,10.621,877,6.078,878,17.243,879,10.054,880,11.783,881,17.243,882,11.783,883,12.438,884,7.987,885,12.438,886,12.438,887,9.465,888,12.438,889,7.987,890,7.987,891,12.438,892,7.566,893,7.987,894,5.295,895,4.028,896,6.94,900,5.418,921,3.692,966,5.627,1020,4.741,1021,4.065,1026,4.567,1163,4.858,1393,4.443,1443,3.828,1805,7.566,1830,5.974,1975,8.626,1976,8.626,1977,6.792,1978,8.626,1979,7.987,1980,8.626,1981,8.626,1982,8.626,1983,5.705,1984,5.788,1985,6.078,1986,5.355,1987,7.987]],["keywords/169",[]],["title/170",[2,78.859,16,109.486,22,73.669,59,334.701,61,264.548,62,313.506]],["content/170",[2,1.839,3,2.855,59,10.816,61,8.549,62,9.24,69,4.93,103,7.629,195,2.421,296,6.947,325,8.464,329,6.87,490,4.93,512,9.562,526,5.014,646,8.196,693,4.618,752,6.921,810,7.954,831,8.559,864,6.389,1150,6.149,1151,9.788,1443,7.841,1757,12.939,1988,7.529,1989,10.969,1990,15.497]],["keywords/170",[]],["title/171",[59,431.941,61,341.406,62,404.588,1150,340.348]],["content/171",[2,2.566,22,1.744,62,10.203,66,3.961,127,4.379,185,6.263,225,8.642,279,5.9,340,3.993,352,5.18,385,5.883,627,4.565,675,11.405,752,7.028,902,7.888,926,9.303,1189,7.135,1191,16.611,1192,16.611,1193,16.611,1830,12.425,1991,11.702,1992,12.224,1993,19.779,1994,17.94]],["keywords/171",[]],["title/172",[62,473.349,831,554.256,1988,487.519]],["content/172",[2,1.818,15,6.915,22,1.192,62,9.696,66,2.708,113,2.887,127,2.993,279,4.034,340,2.73,352,3.541,385,4.022,627,3.121,675,11.105,752,4.805,831,11.353,872,7.226,875,3.422,926,6.36,1189,4.878,1388,10.311,1723,8.357,1809,7.703,1916,6.317,1992,8.357,1995,8.357,1996,10.758,1997,10.758,1998,10.758,1999,10.758,2000,12.264,2001,17.846,2002,17.846,2003,17.105,2004,20.346,2005,20.346,2006,20.346,2007,17.105,2008,10.758,2009,12.264,2010,12.264,2011,17.105,2012,20.346,2013,12.264,2014,10.758,2015,16.174,2016,12.264]],["keywords/172",[]],["title/173",[59,505.351,1151,633.815,1989,710.262]],["content/173",[2,1.857,4,5.219,7,3.953,14,6.193,15,2.436,22,0.952,59,11.254,66,2.161,70,3.938,89,2.109,113,2.304,127,2.389,154,6.384,162,4.049,185,6.946,195,2.028,206,8.841,207,6.334,244,4.494,279,4.868,281,2.256,289,4.494,296,3.848,323,6.076,340,3.973,343,6.629,352,5.744,359,6.362,385,4.854,386,4.825,397,2.068,445,2.997,485,4.264,490,2.731,513,4.153,525,7.026,526,6.064,533,4.472,575,2.348,625,5.257,627,5.062,644,7.125,693,2.558,733,6.896,801,6.778,861,7.026,864,3.539,902,7.847,926,5.075,1021,4.612,1022,5.422,1042,7.181,1151,12.931,1189,7.913,1443,4.343,1598,5.882,1762,5.944,1775,7.95,1837,4.884,1916,5.041,1983,9.789,1989,13.266,1992,6.669,1993,8.585,2017,8.585,2018,10.839,2019,9.787,2020,4.264,2021,9.787,2022,11.654,2023,8.72,2024,7.503,2025,5.609,2026,9.787]],["keywords/173",[]],["title/174",[62,570.267,385,452.013]],["content/174",[1,3.346,2,1.545,22,1.939,59,9.944,61,6.961,62,10.387,113,3.495,130,6.684,154,9.685,195,2.034,207,8.534,235,7.648,241,6.169,302,14.924,330,5.013,385,4.869,512,8.036,526,4.214,679,6.888,752,7.811,816,8.226,823,8.807,829,6.684,831,7.193,861,10.658,901,7.153,1150,5.168,1151,8.226,1218,10.658,1443,6.589,1654,11.383,1707,7.918,1830,10.283,1859,8.293,1990,13.024,2017,13.024,2027,7.501,2028,11.383,2029,10.283,2030,14.848,2031,14.848,2032,14.848,2033,14.848,2034,11.691,2035,13.024]],["keywords/174",[]],["title/175",[2,119.066,647,426.353,1299,694.819]],["content/175",[2,2.462,22,2.072,43,4.312,61,5.733,76,13.327,79,4.432,198,7.502,209,9.869,229,6.879,277,3.462,279,5.4,303,7.028,370,7.357,437,8.403,490,4.582,616,4.187,647,9.33,677,7.322,864,5.938,894,10.081,901,7.91,921,7.028,1031,13.327,1108,12.29,1121,7.823,1294,12.025,1299,14.368,1326,9.248,1538,10.571,1696,11.019,1964,11.571,2036,16.42,2037,11.189,2038,11.189]],["keywords/175",[]],["title/176",[533,629.721,832,1085.254]],["content/176",[2,2.821,22,1.718,66,4.931,87,9.278,89,3.807,127,4.312,195,3.06,225,8.511,284,6.714,330,7.541,354,4.359,355,4.546,397,3.732,607,7.878,634,11.685,639,13.71,657,12.449,659,11.856,660,8.282,804,7.28,921,7.562]],["keywords/176",[]],["title/177",[2,143.445,1481,729.728]],["content/177",[2,2.694,22,2.062,36,6.272,69,4.55,89,3.514,195,2.906,226,3.674,235,8.399,244,9.74,284,6.377,296,6.412,329,8.249,352,4.708,357,9.944,404,5.555,408,6.948,437,8.344,569,8.455,575,5.089,639,10.01,644,6.51,692,8.695,804,6.719,812,7.305,1023,3.83,1086,11.489,1108,12.204,1481,11.23,1634,10.941,2039,15.098,2040,14.302]],["keywords/177",[]],["title/178",[43,198.963,66,167.298,223,165.947,287,324.3,897,286.322,2041,328.638]],["content/178",[]],["keywords/178",[]],["title/179",[2042,532.102]],["content/179",[2,2.441,22,1.859,25,3.961,61,6.675,115,5.201,145,6.508,172,5.201,180,6.762,196,5.408,226,3.145,244,6.409,279,4.59,296,5.488,297,5.897,303,5.973,335,4.914,340,4.256,345,6.053,352,6.297,354,3.444,355,3.591,389,7.389,404,4.755,415,7.497,445,4.274,526,5.426,552,7.189,564,9.231,599,6.026,601,8.87,603,8.87,604,9.849,616,3.559,647,5.201,693,3.648,752,5.468,804,5.751,863,9.231,894,8.568,1150,4.858,1151,7.732,1299,8.476,1481,7.389,1488,7.497,1971,10.447,1988,8.147,2041,6.053,2043,10.221,2044,12.923,2045,10.447,2046,7.795,2047,9.666]],["keywords/179",[]],["title/180",[286,1163.024]],["content/180",[2,1.195,3,1.855,15,4.879,22,1.116,25,3.257,41,5.692,43,4.373,87,4.768,92,5.118,110,5.38,152,6.212,161,6.477,168,3.363,173,6.25,179,8.696,195,2.686,208,4.749,215,7.591,222,2.643,223,4.293,226,2.586,251,4.969,263,3.524,268,6.207,270,3.59,272,5.873,273,7.591,282,2.183,287,7.128,288,10.165,291,3.15,327,7.389,331,7.949,340,2.555,352,6.209,379,7.702,415,10.53,518,4.463,536,7.296,540,5.56,546,6.574,562,7.591,602,5.873,643,7.389,651,4.636,666,7.535,669,9.649,689,3.226,696,7.389,705,7.702,739,7.209,791,6.762,792,4.729,801,7.949,829,5.167,897,6.293,1034,10.067,1090,7.389,1366,8.591,1418,17.195,1453,6.259,1571,9.649,1702,7.126,1840,8.239,1886,9.315,1891,10.067,1942,8.239,1973,6.829,2048,11.478,2049,9.315,2050,8.088,2051,11.478,2052,11.478,2053,10.627,2054,9.037,2055,6.898]],["keywords/180",[]],["title/181",[1943,655.603,2050,806.162,2056,856.309]],["content/181",[3,3.195,216,8.317,222,3.137,277,4.168,279,6.502,281,4.557,359,8.499,413,9.124,445,6.054,845,16.621,959,12.417,1042,7.954,1044,11.23,1765,12.007,2050,13.931,2056,17.92,2057,15.567]],["keywords/181",[]],["title/182",[195,133.976,277,206.163,408,416.7,812,438.107]],["content/182",[2,1.974,3,4.186,11,6.36,22,1.341,66,3.045,69,3.848,73,4.771,87,5.73,89,2.972,102,7.464,113,4.464,168,2.785,195,1.89,219,6.239,220,5.852,228,3.83,248,11.595,255,7.834,268,7.067,281,3.179,284,4.146,312,8.116,318,9.718,352,6.257,354,3.403,355,3.548,359,8.152,372,4.257,415,7.408,434,6.924,465,4.575,540,6.681,546,7.485,666,8.579,752,5.403,1021,6.5,1023,3.24,1042,7.63,1090,8.878,1113,6.882,1212,7.521,1481,7.302,1737,10.1,1775,7.408,2050,9.718,2058,14.538,2059,13.792,2060,10.323,2061,12.77]],["keywords/182",[]],["title/183",[195,133.976,268,364.419,385,320.691,666,442.372]],["content/183",[2,0.999,3,2.546,6,3.301,9,4.605,11,4.806,13,4.073,14,1.407,15,4.39,18,2.145,19,4.401,20,3.194,22,0.933,24,3.778,25,1.151,30,1.296,39,2.437,42,4.548,43,1.878,49,2.47,52,2.901,61,1.416,66,2.917,69,4.069,71,1.759,73,1.403,78,2.211,79,1.931,83,2.228,87,1.684,89,0.874,94,2.721,102,2.194,105,2.578,106,1.476,113,4.152,127,1.746,130,3.22,145,1.891,161,1.577,168,1.938,172,3.577,174,2.303,185,3.351,195,1.315,208,1.678,216,1.706,217,2.117,220,1.72,226,2.163,227,2.3,229,1.699,251,2.134,261,4.3,263,1.245,266,1.932,268,6.86,270,3.003,277,3.718,281,0.935,282,1.826,283,1.521,284,1.219,287,3.062,288,3.709,290,3.075,291,1.963,294,2.547,298,2.061,316,1.588,317,2.808,318,2.857,329,3.733,330,1.369,340,0.903,343,2.657,352,4.211,354,1,355,1.043,356,2.303,357,4.5,359,4.126,361,2.412,364,4.029,372,1.251,374,1.501,377,2.075,379,4.8,380,2.437,385,1.33,391,2.489,402,3.108,408,3.048,422,1.248,426,3.853,427,4.2,428,7.992,434,3.591,437,2.075,443,2.366,455,2.132,457,3.205,465,2.373,467,2.901,468,4.299,495,1.496,518,1.577,526,1.151,529,2.462,533,3.268,540,1.964,544,5.924,547,2.089,551,2.901,575,5.623,579,1.843,599,3.089,601,4.453,603,3.318,604,4.944,605,1.999,610,7.031,631,2.412,644,1.619,660,1.901,666,8.636,676,1.987,679,1.881,689,1.14,697,6.717,698,3.709,717,2.023,736,2.147,743,6.888,746,3.236,747,2.682,810,1.825,812,1.817,823,1.791,835,3.408,876,2.61,920,2.132,925,3.268,926,2.103,938,2.412,956,5.55,969,2.911,1020,2.228,1023,0.952,1025,4.493,1042,1.631,1050,1.699,1143,2.036,1267,1.72,1273,2.489,1282,3.754,1315,2.547,1336,4.256,1337,4.547,1359,8.399,1391,2.61,1396,2.61,1397,3.291,1418,6.274,1424,3.409,1488,2.178,1564,3.754,1572,3.556,1603,2.547,1611,5.711,1623,2.517,1643,3.389,1696,2.721,1775,2.178,1812,2.462,1836,3.192,1942,12.661,1995,6.54,2045,7.184,2050,8.158,2058,7.359,2062,3.035,2063,8.888,2064,2.911,2065,3.108,2066,3.409,2067,6.441,2068,4.055,2069,8.419,2070,7.153,2071,3.556,2072,11.577,2073,4.055,2074,5.354,2075,14.584,2076,7.153,2077,4.055,2078,2.178,2079,3.754,2080,2.645,2081,2.437,2082,4.055,2083,4.055,2084,3.556,2085,4.055,2086,2.366,2087,4.055,2088,3.409]],["keywords/183",[]],["title/184",[66,215.902,223,214.16,290,420.36,897,369.507]],["content/184",[2,1.27,3,3.279,22,1.186,31,3.153,69,4.856,79,3.293,92,5.44,113,5.207,168,4.466,223,5.325,224,1.386,244,5.602,261,4.531,268,4.547,270,5.444,273,8.069,277,3.669,281,2.812,282,2.32,288,6.326,335,3.922,340,2.716,352,5.025,354,3.01,355,3.139,359,9.509,385,6.653,408,5.199,413,5.631,415,12.563,434,6.125,467,4.947,489,5.75,493,9.28,533,5.574,546,4.815,644,6.948,647,4.547,679,5.66,693,3.189,711,8.069,842,4.156,897,4.61,1042,4.908,1110,6.705,1113,6.087,1126,4.194,1143,6.125,1210,5.781,1775,9.348,1942,12.493,1984,8.187,2041,5.291,2056,9.131,2058,9.353,2063,11.296,2089,12.2,2090,12.2,2091,12.2,2092,12.2]],["keywords/184",[]],["title/185",[394,617.512,2093,989.405]],["content/185",[22,1.705,49,4.512,110,8.22,168,3.54,173,6.58,174,9.96,223,3.84,238,9.714,251,5.231,273,11.597,281,4.042,290,7.538,297,7.408,327,11.288,329,6.819,380,10.539,397,3.704,415,9.419,518,6.819,546,6.921,711,11.597,792,7.225,833,9.714,906,7.856,1042,7.055,1443,7.782,2037,11.948,2094,7.605,2095,12.144,2096,11.766,2097,15.38,2098,13.806,2099,17.535]],["keywords/185",[]],["title/186",[397,366.13]],["content/186",[268,8.612]],["keywords/186",[]],["title/187",[66,167.298,87,314.799,831,367.092,1120,524.772,1988,322.891,2100,360.987]],["content/187",[]],["keywords/187",[]],["title/188",[2042,532.102]],["content/188",[2,2.417,25,5.338,279,6.187,340,4.187,352,5.431,354,4.641,355,4.84,526,7.15,552,9.689,564,12.441,677,8.388,681,9.821,1488,12.475,1760,17.804,1971,14.079,1973,11.192,1974,9.274,2100,11.064]],["keywords/188",[]],["title/189",[286,1163.024]],["content/189",[2,2.4,3,2.025,19,1.82,22,2.001,24,2.045,25,2.24,43,3.29,61,2.756,62,3.266,66,2.766,69,4.346,89,1.701,97,3.52,103,5.41,128,4.901,139,3.625,145,5.842,146,4.066,178,5.379,195,3.616,214,3.761,219,3.571,222,3.424,223,3.884,224,2.015,263,2.423,272,4.04,277,2.641,279,5.123,283,2.962,287,3.378,294,4.958,304,5.082,305,5.781,307,5.97,309,6.407,310,6.407,325,3.781,329,3.07,330,4.23,340,1.757,352,5.12,355,2.031,375,4.339,404,5.307,413,5.782,427,4.545,437,4.04,457,3.537,530,4.607,541,4.093,542,8.367,548,6.636,577,5.908,605,3.892,627,2.008,647,2.942,650,5.018,651,3.188,661,4.15,662,9.377,667,5.379,668,6.215,693,2.063,697,4.013,778,6.052,786,6.052,788,4.697,831,8.592,917,6.052,1256,5.666,1367,6.407,1585,16.708,1586,18.714,1591,9.865,1604,5.562,1626,5.467,1696,5.297,1755,8.172,1923,8.065,1983,5.221,1988,5.339,2037,5.379,2078,4.24,2093,5.666,2100,8.449,2101,7.894,2102,6.924,2103,7.309,2104,12.528,2105,7.691,2106,5.666,2107,7.309,2108,6.215,2109,6.215,2110,6.636,2111,7.894,2112,7.894,2113,7.894,2114,7.894,2115,7.894,2116,6.924,2117,6.924]],["keywords/189",[]],["title/190",[195,116.983,222,135.479,831,413.654,1585,692.98,1586,692.98]],["content/190",[2,2.259,3,2.731,11,3.19,13,3.257,14,2.517,15,2.914,16,2.127,18,3.29,22,1.431,24,3.814,25,3.323,59,5.172,62,8.203,69,2.024,87,3.014,89,2.523,103,3.132,113,3.977,120,3.25,130,8.925,160,6.901,162,3.001,185,2.533,195,2.716,215,4.797,222,3.31,223,2.564,224,1.33,229,3.039,230,2.457,231,2.896,251,2.164,261,4.348,263,2.227,270,2.269,277,2.468,281,2.699,282,2.8,287,3.105,288,3.761,295,3.787,296,4.604,299,5.111,307,2.442,319,4.943,343,2.694,345,6.385,352,4.878,354,1.79,355,1.866,358,4.157,359,8.966,375,3.987,404,3.989,408,3.091,422,2.233,427,4.248,434,3.642,437,3.712,443,4.233,465,2.406,467,4.748,490,2.024,491,7.354,494,3.761,495,2.676,511,3.475,527,6.072,530,6.833,533,6.726,557,3.189,605,3.576,609,5.312,622,3.761,627,3.746,644,2.896,645,5.887,651,2.93,679,5.432,693,1.896,705,4.868,752,2.842,771,3.118,810,3.266,812,3.25,831,8.186,919,7.978,925,3.314,927,5.887,966,4.732,1020,3.987,1021,3.418,1105,4.36,1110,3.987,1113,3.619,1121,3.456,1137,5.711,1142,2.533,1366,5.429,1443,3.219,1450,5.711,1481,3.84,1585,9.503,1586,9.503,1637,4.611,1756,6.098,1811,8.575,1850,5.561,1983,7.744,1988,3.091,2027,7.438,2062,5.429,2100,3.456,2118,7.254,2119,6.716,2120,7.637,2121,7.269,2122,3.576,2123,4.453,2124,11.709,2125,6.966,2126,6.363,2127,4.36,2128,7.254,2129,6.363,2130,4.943]],["keywords/190",[]],["title/191",[2,101.77,22,95.072,2100,465.863,2131,629.522]],["content/191",[2,1.771,11,4.638,15,6.172,22,1.655,25,2.085,36,2.825,59,3.245,66,5.313,69,4.143,79,1.983,127,1.793,145,5.515,172,2.737,173,4.438,179,3.835,205,3.443,206,3.039,223,1.609,226,4.493,244,3.373,251,3.529,279,6.558,281,1.693,296,2.888,329,2.856,335,3.835,340,2.633,354,2.918,355,1.89,359,5.084,361,4.37,374,6.906,416,3.809,458,5.224,464,1.84,490,2.05,518,6.619,526,2.085,529,4.461,533,3.356,542,9.143,552,3.784,575,4.084,616,1.873,627,3.009,643,4.729,650,4.67,658,2.944,679,3.407,697,6.014,712,6.501,721,3.621,752,2.878,849,2.747,864,2.656,872,4.328,874,5.005,902,10.581,964,3.759,1021,3.462,1074,3.665,1126,4.066,1142,4.129,1165,5.005,1189,8.673,1393,3.784,1628,4.729,1760,5.631,1842,5.273,1859,4.103,2100,9.499,2120,4.791,2132,6.175,2133,6.801,2134,12.482,2135,6.443,2136,6.175,2137,5.962,2138,9.943,2139,5.631,2140,11.691,2141,8.853,2142,9.599,2143,17.626,2144,9.943,2145,12.482,2146,10.374,2147,9.943,2148,6.175,2149,6.175,2150,9.943,2151,6.175,2152,6.175,2153,6.175,2154,5.962,2155,5.379,2156,6.175,2157,6.175,2158,10.374,2159,6.443]],["keywords/191",[]],["title/192",[2,101.77,3,158.044,223,214.16,2100,465.863]],["content/192",[1,1.65,2,1.939,3,2.746,7,2.958,8,2.648,11,5.705,15,2.936,16,1.705,18,2.637,22,1.811,25,2.078,31,1.892,49,1.884,59,3.234,61,2.556,62,3.03,69,3.292,83,4.024,89,3.193,97,3.265,113,3.999,130,3.296,136,2.827,168,2.991,179,3.823,185,2.556,195,2.328,196,2.837,223,4.771,224,0.832,226,1.65,228,3.276,229,3.067,231,2.923,251,2.185,261,4.382,270,4.635,277,2.487,282,2.244,284,2.201,295,3.823,296,2.879,297,3.094,312,3.134,316,2.869,319,4.989,321,3.508,335,1.65,337,6.78,345,3.176,352,3.406,359,9.364,360,3.281,368,2.665,385,2.401,408,3.12,413,3.379,422,3.632,440,2.837,443,4.273,444,5.362,445,2.242,465,3.914,467,2.969,485,5.14,490,2.043,495,2.701,511,3.508,526,4.205,527,3.797,530,4.273,533,6.769,542,3.933,574,3.329,575,1.757,605,3.61,644,4.71,647,5.521,658,2.935,661,3.849,679,3.397,693,1.914,731,3.03,739,4.599,741,3.993,752,2.869,810,3.296,812,3.281,831,3.547,834,4.599,874,8.039,897,2.767,902,3.219,919,4.989,973,4.913,982,4.599,1020,4.024,1021,3.451,1042,2.946,1050,7.117,1066,7.41,1110,4.024,1113,3.654,1121,3.488,1126,4.056,1142,2.556,1326,4.124,1368,4.843,1393,3.772,1443,3.25,1497,5.481,1760,5.613,1808,7.696,1811,8.64,1850,5.613,1859,4.09,1886,5.943,1914,6.156,1915,5.256,1917,4.989,1983,4.843,2062,5.481,2100,10.377,2105,4.495,2119,6.78,2132,3.823,2137,9.575,2139,5.613,2140,5.765,2141,5.481,2142,9.575,2160,7.322,2161,5.613,2162,5.765,2163,7.322,2164,7.322,2165,6.423,2166,7.322,2167,6.156]],["keywords/192",[]],["title/193",[2168,1733.188]],["content/193",[2,2.208,22,1.793,24,3.43,25,3.758,43,3.477,62,5.479,66,4.683,69,3.695,86,6.08,89,4.571,127,3.232,136,5.112,154,8.638,195,3.421,207,5.667,222,2.101,223,4.038,224,2.094,241,5.501,281,4.25,284,3.981,287,5.667,296,5.207,335,2.984,358,7.588,369,6.961,422,4.076,468,7.959,495,4.885,541,9.561,542,7.113,551,5.37,552,6.821,597,7.588,602,6.776,616,3.377,660,6.207,661,6.961,696,8.525,804,5.456,831,8.932,833,7.336,1042,5.328,1256,9.506,1481,7.011,1585,14.964,1586,14.964,1651,11.132,1988,5.643,2100,10.928,2105,8.129,2106,9.506,2169,11.132,2170,8.886]],["keywords/193",[]],["title/194",[43,256.768,287,418.518,790,533.277,1956,533.277]],["content/194",[]],["keywords/194",[]],["title/195",[1481,729.728,2171,1158.748]],["content/195",[]],["keywords/195",[]],["title/196",[790,945.178]],["content/196",[18,2.977,22,1.295,30,4.258,43,4.861,78,7.263,87,5.533,115,4.963,144,9.753,145,6.21,160,6.243,181,5.579,186,4.144,195,3.515,213,8.176,222,3.834,241,5.533,251,7.209,277,2.808,287,7.922,290,5.725,291,3.654,298,9.412,301,11.682,307,6.232,316,5.217,335,4.171,367,5.05,428,4.929,445,4.078,490,3.716,541,6.906,568,5.086,672,8.687,689,5.202,698,6.906,755,11.196,790,10.095,906,5.967,908,4.784,1008,6.452,1481,7.051,1604,9.384,1710,9.56,2029,12.82,2172,12.331,2173,12.331,2174,8.573,2175,12.331,2176,12.331,2177,9.56,2178,12.331,2179,11.682,2180,12.331]],["keywords/196",[]],["title/197",[116,570.685,208,404.588,251,291.737,1956,533.277]],["content/197",[1,3.193,3,2.29,5,8.107,8,3.342,13,4.274,16,1.335,19,2.131,25,2.623,43,2.427,49,2.378,69,2.579,74,6.769,78,5.04,79,5.933,87,3.84,127,2.256,155,3.648,161,3.594,163,3.075,191,5.446,195,2.854,208,10.221,215,6.113,222,1.467,228,2.567,231,3.69,251,7.043,263,4.35,287,3.956,291,5.716,294,5.805,307,3.112,316,3.621,320,4.584,335,2.083,345,4.009,362,8.605,367,3.505,374,3.421,387,9.359,394,4.141,422,2.845,435,8.761,465,5.716,493,4.929,495,3.409,504,7.114,604,4.761,616,2.357,634,6.113,643,5.95,672,6.029,689,4.843,728,5.162,760,7.277,784,6.401,790,7.727,808,3.939,836,5.555,906,8.655,981,6.635,1008,8.348,1080,8.107,1106,6.635,1204,5.296,1550,6.635,1593,6.298,1643,4.379,1669,8.107,1685,8.107,1695,7.77,1710,6.635,1913,7.77,1956,11.987,1995,6.298,2130,6.298,2181,9.813,2182,6.401,2183,12.429,2184,7.086,2185,8.558,2186,8.107,2187,7.501,2188,9.243,2189,14.169,2190,7.501,2191,14.169,2192,9.243,2193,8.558,2194,6.635,2195,9.243]],["keywords/197",[]],["title/198",[2,119.066,279,376.27,286,767.708]],["content/198",[3,1.704,18,2.356,19,3.607,43,6.068,68,5.078,72,6.701,74,11.459,103,4.551,145,4.916,147,5.662,155,4.161,163,3.507,168,2.128,194,6.876,195,3.022,237,4.572,241,4.379,251,6.58,276,7.074,277,2.222,279,7.868,287,8.837,333,6.876,334,4.344,335,2.375,400,4.473,401,4.241,413,4.865,466,12.409,536,11.862,616,3.99,660,4.941,664,6.621,671,7.89,677,4.7,682,4.192,689,6.724,693,2.755,722,6.876,788,6.272,790,11.26,791,9.219,792,4.344,829,7.044,847,3.956,856,6.211,1300,13.966,1348,6.041,1443,6.944,1538,6.786,1554,9.947,1614,5.794,1736,7.72,1820,7.3,1832,5.749,1888,7.428,1930,6.621,1943,6.041,1947,8.081,1956,5.749,1964,7.428,1974,5.197,2196,13.154,2197,15.647,2198,8.862,2199,10.541,2200,10.541,2201,8.555,2202,10.541,2203,9.246,2204,10.541,2205,10.541,2206,10.541,2207,10.541]],["keywords/198",[]],["title/199",[2042,532.102]],["content/199",[2,1.798,19,3.982,22,1.679,127,5.373,221,8.673,222,2.741,224,1.962,277,3.642,279,7.241,330,5.833,335,3.893,340,3.845,445,5.289,526,4.902,529,10.491,557,7.595,616,4.405,660,8.098,767,9.42,915,11.268,1020,9.494,1105,10.382,1481,11.656,1488,9.279,1624,9.081,1956,13.215,2208,10.981,2209,15.152,2210,16.478]],["keywords/199",[]],["title/200",[226,257.805,445,350.312,1956,623.908]],["content/200",[2,2.228,127,5.225,279,7.041,316,8.387,340,4.765,1566,18.778,1956,11.675,2042,6.572,2131,13.782]],["keywords/200",[]],["title/201",[1133,622.648]],["content/201",[92,9.126,108,10.09,263,6.283,335,4.612,363,10.542,693,5.35,895,6.137,1126,7.036,1133,8.782,1137,16.114,1143,10.275,1956,11.161,2211,14.174]],["keywords/201",[]],["title/202",[186,428.833,627,350.696]],["content/202",[2,1.685,4,8.634,89,3.489,162,6.699,176,12.749,181,6.783,186,7.311,195,3.219,222,3.35,226,3.649,283,6.076,316,6.343,340,3.604,445,4.958,526,4.595,573,10.052,575,3.885,627,5.373,731,9.722,873,7.631,902,9.284,1063,8.763,1088,13.774,1267,6.87,1365,12.413,1481,8.572,1916,8.34,1956,12.814,2210,12.119,2212,14.992,2213,16.192,2214,12.119]],["keywords/202",[]],["title/203",[16,199.154,2215,812.067]],["content/203",[16,2.041,18,3.157,19,3.256,31,3.651,71,6.127,89,3.044,92,6.299,112,4.728,115,5.264,127,3.448,162,5.845,195,1.935,220,5.994,226,5.561,251,4.214,281,3.256,283,7.234,284,4.247,286,9.479,289,6.487,316,5.534,340,3.144,347,6.948,447,5.597,533,6.454,568,5.395,627,3.594,658,5.662,664,8.873,689,3.97,767,10.513,801,9.783,915,9.215,926,7.325,930,7.533,1022,7.826,1105,11.587,1214,9.215,1215,6.422,1292,10.83,1488,7.588,1916,7.277,1956,12.858,1972,10.573,1992,9.626,2210,10.573,2216,16.321,2217,11.465,2218,14.127,2219,11.465]],["keywords/203",[]],["title/204",[16,199.154,1956,751.653]],["content/204",[2,2.099,18,2.698,22,2.14,30,3.86,66,2.666,69,3.369,97,5.383,112,5.781,161,4.695,162,4.995,181,5.058,182,10.59,226,2.721,230,4.089,279,6.634,281,2.783,290,5.19,330,4.077,335,4.545,340,2.687,359,5.19,361,10.277,367,4.578,385,3.959,396,5.016,426,5.882,445,3.697,461,6.438,513,5.123,533,5.516,627,3.072,633,11.591,644,4.82,658,4.839,679,5.601,693,6.089,767,9.42,810,5.435,861,8.667,864,4.366,871,6.1,1042,6.95,1105,7.256,1214,7.875,1215,7.853,1268,9.256,1481,10.679,1488,6.485,1634,8.102,1708,5.883,1765,10.491,1831,8.842,1916,6.219,1956,6.584,2029,8.361,2210,9.037,2219,14.019,2220,8.507,2221,12.073,2222,10.59,2223,10.15,2224,17.274,2225,10.15,2226,9.506,2227,11.179,2228,12.073,2229,8.102]],["keywords/204",[]],["title/205",[2,101.77,226,220.355,279,321.611,445,299.424]],["content/205",[2,1.811,16,2.515,22,1.692,43,4.57,66,3.842,69,6.172,195,2.384,222,3.858,224,2.513,229,7.291,230,5.894,277,3.669,287,7.448,361,13.161,557,7.652,633,11.678,1042,7.002,1109,14.631,1269,13.342,1624,9.149,1765,10.569,1775,9.349,1956,9.491,1985,17.135,2208,11.063,2222,15.265,2229,11.678]],["keywords/205",[]],["title/206",[16,165.308,222,181.529,1956,623.908]],["content/206",[2,2.052,3,1.873,8,6.066,16,2.848,22,1.127,30,5.364,87,4.816,112,6.598,113,2.729,158,8.489,161,4.508,162,4.796,179,6.052,195,1.588,222,2.662,226,2.612,228,3.219,229,7.028,258,2.313,281,2.672,297,4.897,316,4.541,335,5.166,361,6.897,368,4.219,385,3.802,397,2.449,404,3.949,409,6.274,424,9.529,445,5.137,448,4.035,466,6.967,495,4.276,529,7.04,533,7.664,546,4.575,575,2.781,606,6.765,627,2.949,658,8.659,660,5.434,693,4.385,699,8.168,752,6.572,803,6.181,810,5.219,842,3.949,861,8.321,864,4.192,895,3.476,897,4.38,915,7.561,1126,3.985,1143,5.82,1401,5.377,1443,5.144,1453,6.322,1488,6.227,1623,7.197,1643,5.492,1662,10.168,1716,3.706,1768,6.643,1916,5.971,1956,10.751,1985,8.168,2086,6.765,2120,7.561,2208,7.369,2210,8.676,2230,9.127,2231,11.592,2232,11.592,2233,9.745,2234,8.887,2235,11.592]],["keywords/206",[]],["title/207",[3,222.763,79,372.057]],["content/207",[1,3.071,2,1.958,3,3.753,11,5.869,13,3.015,15,5.593,16,1.27,18,3.731,19,3.142,20,5.555,22,1.623,25,2.494,36,3.381,43,2.308,56,7.709,59,6.02,61,3.068,73,3.04,79,5.814,89,1.894,103,8.122,106,3.199,113,2.069,154,5.733,186,4.241,195,2.577,207,3.761,220,3.729,222,2.163,224,0.998,226,1.98,229,3.682,235,4.527,261,3.264,281,3.142,282,2.592,287,3.761,294,5.52,298,4.468,303,3.761,307,2.959,330,2.967,333,5.733,334,3.621,354,2.168,355,2.261,357,4.12,358,5.036,359,3.778,374,3.253,426,3.975,430,4.95,445,2.691,464,2.202,465,5.539,469,5.028,504,6.843,511,6.529,520,5.229,527,4.557,538,5.587,657,6.193,668,6.92,676,4.307,680,9.604,704,3.469,731,3.636,831,4.258,918,5.989,973,5.897,998,5.282,1021,6.423,1042,3.536,1066,5.52,1080,7.709,1198,6.193,1308,8.774,1412,5.395,1443,3.9,1510,7.133,1633,5.229,1837,4.385,1914,11.458,1915,9.784,1956,10.258,1957,17.857,1958,6.436,1959,8.138,1960,8.138,1961,12.62,2198,7.389,2220,6.193,2236,13.63,2237,7.389,2238,7.133,2239,7.389,2240,8.192,2241,7.389]],["keywords/207",[]],["title/208",[11,311.729,285,736.511,2233,961.816]],["content/208",[1,1.841,2,1.658,3,3.534,11,6.503,13,1.808,18,1.826,22,0.794,64,3.791,65,3.715,66,2.843,69,6.101,70,3.288,89,3.434,92,5.741,97,5.741,113,3.031,137,4.326,139,3.752,161,3.177,167,4.725,168,3.65,185,2.853,195,1.764,222,2.043,223,4.308,226,1.841,228,2.269,231,3.262,237,6.91,244,3.752,251,3.841,277,2.714,279,4.234,285,14.077,291,3.533,294,5.132,296,3.213,313,5.984,315,6.869,331,5.659,334,5.305,335,2.901,338,6.722,347,2.945,360,3.661,363,4.209,368,2.974,380,4.911,397,2.72,398,9.637,399,1.669,400,5.463,401,7.914,402,9.87,405,4.725,406,6.434,407,7.566,409,4.422,410,7.738,413,7.353,414,5.483,415,4.389,416,4.237,422,2.515,440,3.166,444,5.984,445,2.502,469,3.014,485,3.56,490,2.28,495,3.014,504,4.102,511,3.914,516,4.564,551,3.313,578,4.389,604,4.209,627,2.079,650,5.194,657,5.758,664,5.132,743,4.862,847,4.831,849,3.056,908,2.935,960,5.483,1148,6.264,1278,5.33,1315,5.132,1455,4.911,1626,8.917,1710,5.866,1737,5.984,1759,6.264,1813,7.566,1837,4.077,1956,7.021,2233,6.869,2242,8.171,2243,6.434,2244,8.171,2245,7.167,2246,8.171,2247,6.434,2248,4.642,2249,8.171,2250,8.171,2251,5.568,2252,5.866,2253,8.171,2254,12.875,2255,6.116,2256,8.171,2257,6.116,2258,8.171,2259,8.171,2260,6.264]],["keywords/208",[]],["title/209",[222,218.697,261,511.896]],["content/209",[2,0.898,3,2.171,15,3.343,16,1.246,43,2.265,44,5.553,57,7.839,78,4.704,79,2.328,107,7.013,110,6.297,127,3.279,145,4.022,192,4.278,195,2.765,208,7.705,213,5.295,221,4.331,222,3.541,224,2.428,226,3.718,228,2.395,231,3.444,242,9.153,246,4.818,251,6.886,261,4.989,281,3.097,287,3.692,290,5.774,316,6.463,335,1.944,340,1.92,356,4.9,358,4.943,361,5.132,362,5.239,368,3.14,373,6.192,374,3.193,388,6.792,400,3.66,401,8.12,404,2.939,410,5.184,411,4.567,428,3.193,445,4.113,489,4.065,495,3.182,511,7.903,515,4.414,520,5.132,536,5.483,554,9.153,568,3.294,643,10.621,664,8.437,676,4.227,689,5.234,735,10.761,785,7.001,840,9.838,847,3.237,917,6.613,921,5.749,974,4.943,981,6.192,995,5.132,1005,7.001,1010,7.566,1049,6.399,1091,4.741,1113,6.703,1139,5.974,1300,10.054,1455,5.184,1623,5.355,1626,5.974,1710,6.192,1770,6.317,1832,4.704,1835,6.456,1956,7.326,1985,6.078,2020,3.758,2065,6.613,2183,14.471,2208,8.539,2216,5.705,2252,6.192,2261,7.566,2262,5.974,2263,7.987,2264,6.078,2265,6.317,2266,8.626,2267,7.987,2268,8.626,2269,6.792,2270,7.566,2271,6.192,2272,7.001,2273,8.626,2274,7.987,2275,7.001]],["keywords/209",[]],["title/210",[43,300.406,287,489.646,790,623.908]],["content/210",[1,1.173,2,1.21,3,3.192,15,6.659,16,0.752,19,1.2,22,0.506,43,3.054,69,1.453,74,3.814,79,4.168,94,3.494,95,3.898,106,1.895,145,2.428,161,3.457,180,4.307,181,3.724,185,1.818,195,1.884,197,2.958,207,2.229,208,2.155,226,1.173,228,1.446,232,3.13,251,1.554,272,2.665,281,3.17,283,1.954,287,3.805,291,2.439,327,3.352,357,6.446,374,1.927,387,2.523,397,1.1,401,2.095,408,4.956,422,1.603,424,2.958,445,1.595,447,2.063,458,2.3,477,11.836,489,2.454,495,3.279,511,2.495,527,2.7,562,3.444,568,1.989,578,2.797,594,2.322,601,2.416,678,3.197,689,2.498,721,4.382,727,3.814,749,2.583,805,3.669,812,3.983,823,2.3,871,2.631,872,3.068,906,2.333,909,2.909,929,2.665,930,2.777,941,4.378,983,3.814,1008,4.307,1023,1.223,1025,7.305,1042,3.576,1043,3.039,1066,3.271,1083,6.381,1142,1.818,1278,5.799,1381,4.1,1428,7.473,1450,4.1,1545,4.226,1570,3.992,1624,2.738,1651,4.378,1723,3.548,1792,4.226,1798,5.651,1831,3.814,1915,3.738,1938,4.226,1939,4.568,1956,7.499,1973,3.098,2029,6.156,2057,4.1,2116,4.568,2179,4.568,2186,4.568,2210,3.898,2220,6.264,2240,5.343,2276,13.75,2277,4.378,2278,5.207,2279,5.207,2280,4.822,2281,8.889,2282,7.215,2283,8.231,2284,4.568,2285,4.822,2286,5.207,2287,5.207,2288,5.207,2289,5.207,2290,5.207,2291,7.215,2292,8.889,2293,5.207,2294,4.822,2295,5.207,2296,4.378,2297,5.207,2298,4.822,2299,11.63,2300,5.207,2301,5.207,2302,8.889,2303,5.207,2304,5.207,2305,3.606,2306,5.207,2307,3.992,2308,4.822,2309,5.207,2310,5.207,2311,5.207,2312,5.207,2313,5.207,2314,5.207,2315,5.207,2316,5.207,2317,6.156,2318,5.207,2319,5.207,2320,5.207,2321,5.207,2322,5.207,2323,5.207,2324,4.822,2325,5.207,2326,5.207,2327,5.207,2328,5.207,2329,5.207,2330,5.207,2331,5.207,2332,5.207,2333,5.207,2334,5.207,2335,5.207,2336,3.669,2337,3.898,2338,5.207,2339,5.207,2340,4.822,2341,5.207,2342,5.207,2343,5.207,2344,5.207,2345,5.207,2346,5.207,2347,5.207,2348,5.207,2349,5.207,2350,5.207,2351,5.207,2352,5.207,2353,5.207,2354,5.207,2355,5.207,2356,5.207,2357,5.207,2358,5.207,2359,5.207,2360,5.207,2361,5.207,2362,5.207,2363,5.207,2364,5.207,2365,5.207,2366,5.207,2367,5.207,2368,5.207,2369,5.207,2370,5.207,2371,5.207,2372,5.207,2373,5.207,2374,5.207,2375,5.207,2376,5.207,2377,4.822,2378,5.207,2379,8.889,2380,4.568,2381,5.207,2382,5.207,2383,4.822,2384,5.207,2385,11.63,2386,5.207,2387,5.207,2388,5.207,2389,3.992,2390,5.207,2391,5.207,2392,5.207,2393,5.207,2394,5.207,2395,5.207,2396,5.207,2397,5.207,2398,5.207,2399,8.889,2400,5.207,2401,8.889,2402,5.207,2403,5.207,2404,5.207,2405,5.207,2406,5.207,2407,4.568,2408,5.207,2409,5.207,2410,5.207,2411,5.207,2412,4.568,2413,5.207]],["keywords/210",[]],["title/211",[445,422.038,1170,1085.254]],["content/211",[2,1.791,3,1.941,11,5.984,13,2.657,16,1.735,18,2.684,22,1.168,43,3.154,79,3.242,97,5.356,145,8.025,175,6.55,191,7.077,192,5.957,195,3.314,208,4.969,222,3.689,226,3.878,251,7.217,277,2.532,279,5.66,284,5.174,285,7.732,287,5.141,290,5.163,307,4.043,316,6.742,338,6.271,348,6.405,367,4.555,401,4.832,413,5.543,445,3.678,467,4.87,495,6.348,557,5.281,602,6.146,643,7.732,689,3.376,693,3.14,727,8.796,773,9.457,790,6.55,801,8.318,841,6.359,974,6.883,981,8.622,1267,5.096,1278,7.835,1481,9.112,1512,10.535,1710,12.354,1739,10.535,1843,7.457,1955,9.457,1956,11.977,2042,3.687,2093,8.622,2260,9.208,2269,9.457,2337,8.99,2414,12.011,2415,12.011,2416,12.011,2417,10.535]],["keywords/211",[]],["title/212",[533,629.721,752,539.96]],["content/212",[8,5.98,22,1.608,66,3.651,79,4.464,89,4.613,162,6.842,186,5.145,195,2.266,208,6.842,222,2.624,224,1.879,235,8.518,238,9.162,241,6.87,251,4.934,277,3.486,279,7.041,284,4.972,335,3.726,340,3.681,408,7.047,434,8.303,644,6.602,660,10.035,719,9.089,1074,8.252,1268,12.678,1481,8.755,1610,12.378,1916,8.518,1930,10.387,1956,9.018,2038,11.268,2208,10.513,2262,11.453,2418,16.537,2419,11.653,2420,14.505]],["keywords/212",[]],["title/213",[2,119.066,575,274.491,804,471.42]],["content/213",[2,2.641,3,2.479,8,5.546,15,3.817,66,3.386,159,12.076,195,3.34,216,6.452,244,7.043,268,5.716,277,3.234,283,5.755,284,4.611,307,5.163,319,10.451,327,9.874,335,3.456,352,4.428,408,6.536,413,7.079,421,8.497,437,7.849,575,3.68,597,8.789,600,10.451,644,6.123,646,7.115,658,6.147,660,7.19,692,8.179,693,4.009,716,14.202,752,7.982,804,9.428,812,6.872,1023,3.603,1108,11.48,1121,7.307,1481,8.12,2421,12.448,2422,9.416,2423,15.338]],["keywords/213",[]],["title/214",[2,101.77,66,215.902,195,133.976,711,646.731]],["content/214",[]],["keywords/214",[]],["title/215",[2042,532.102]],["content/215",[2,1.958,13,4.162,18,4.204,36,7.235,69,5.249,79,5.078,89,4.054,136,7.262,186,5.853,225,9.062,228,5.224,244,8.638,325,9.011,331,13.028,420,13.776,573,11.678,575,4.513,634,12.441,639,14.258,644,7.51,804,7.751,901,9.062,2424,18.811]],["keywords/215",[]],["title/216",[286,1163.024]],["content/216",[2,2.579,3,2.311,8,5.171,16,2.066,19,3.296,49,3.679,61,4.993,66,3.157,89,3.082,97,6.376,103,6.175,128,8.878,146,10.013,178,9.744,195,3.738,215,9.458,222,3.084,223,4.257,224,2.509,277,3.015,279,4.703,294,8.982,302,10.703,307,6.544,340,3.183,375,7.86,413,8.972,577,10.703,605,7.05,650,9.091,660,6.704,661,7.518,667,9.744,693,5.081,784,9.904,1105,8.595,1134,9.596,1367,11.606,1549,9.904,2421,11.606,2425,14.3,2426,14.3]],["keywords/216",[]],["title/217",[66,304.314,222,218.697]],["content/217",[2,1.545,3,4.141,7,2.967,11,4.638,13,1.625,15,3.695,16,1.061,18,2.643,19,2.727,22,1.15,25,4.214,30,2.349,31,1.898,47,3.323,49,1.89,66,3.278,68,3.538,69,2.05,79,1.983,83,4.037,87,3.052,89,3.2,113,4.694,130,5.325,136,2.836,168,1.483,179,6.175,181,3.077,185,5.184,195,2.332,206,3.039,207,3.144,219,3.323,222,3.46,223,3.252,224,2.265,228,2.04,229,7.13,230,5.028,241,6.168,251,3.529,261,4.393,266,7.074,270,2.298,277,3.934,279,2.416,281,1.693,282,2.824,290,3.158,295,3.835,298,3.735,303,3.144,307,5.73,329,4.599,352,4.914,354,1.812,357,5.544,359,9.013,360,3.291,376,5.962,397,1.552,399,1.501,408,3.13,416,3.809,430,4.137,435,6.014,443,4.287,465,2.437,467,2.979,485,3.2,490,3.3,495,2.71,511,3.519,515,3.759,526,2.085,530,8.665,533,5.404,540,3.559,552,3.784,557,3.23,627,1.869,645,5.962,677,3.275,679,3.407,689,2.064,693,3.092,698,3.809,731,3.039,808,3.13,810,5.325,873,3.462,897,2.776,1018,5.005,1020,4.037,1021,5.574,1022,4.069,1033,4.613,1034,6.443,1042,2.955,1063,3.975,1110,4.037,1113,3.665,1133,2.639,1187,4.67,1212,4.006,1435,6.175,1443,3.26,1775,3.946,1850,5.631,1886,5.962,1984,9.963,2098,5.784,2130,5.005,2159,6.443,2427,7.345,2428,5.784,2429,7.345,2430,6.801]],["keywords/217",[]],["title/218",[66,304.314,223,301.858]],["content/218",[2,1.99,3,4.001,4,4.112,7,3.114,11,6.049,16,1.114,18,2.748,19,1.777,22,1.491,25,2.188,30,4.904,36,2.966,47,3.488,49,3.946,66,1.702,69,4.279,89,3.305,113,2.895,154,8.021,162,3.19,168,2.483,175,4.205,181,3.23,195,3.214,222,2.777,223,4.682,224,1.742,228,2.141,229,3.23,230,2.611,251,3.669,258,2.454,261,5.696,266,3.673,270,2.412,277,3.69,281,1.777,282,2.339,303,3.3,307,2.596,318,5.433,335,1.738,352,2.226,359,9.836,360,5.509,361,4.588,363,3.972,365,5.1,385,2.529,397,2.598,408,3.286,413,9.404,417,4.343,430,4.343,434,6.174,435,7.798,445,2.361,465,4.079,467,3.127,488,5.254,490,2.151,511,3.694,515,3.946,530,4.5,533,5.618,644,4.909,677,3.438,689,2.167,691,6.071,693,2.015,698,3.998,721,3.801,728,4.307,731,3.19,742,7.14,810,5.536,842,4.189,845,6.482,849,2.883,887,5.433,920,4.054,966,5.03,976,3.315,1021,3.634,1022,4.272,1033,4.843,1042,3.102,1066,10.992,1110,4.238,1113,3.847,1187,7.817,1643,3.653,1775,4.142,1811,5.647,1850,5.911,1896,6.258,1912,6.258,1915,5.535,1984,5.174,2025,4.419,2130,5.254,2169,6.482,2265,5.647,2431,7.711,2432,6.763,2433,6.763,2434,7.711,2435,6.482,2436,7.711,2437,7.711]],["keywords/218",[]],["title/219",[533,629.721,832,1085.254]],["content/219",[2,2.306,3,4.014,11,3.921,25,4.083,49,3.702,66,3.177,87,5.978,89,4.207,116,8.397,154,9.386,186,4.477,195,3.255,220,8.283,222,3.097,223,5.203,225,6.931,268,5.362,270,4.501,277,3.034,283,5.399,345,8.466,360,6.446,413,10.225,434,7.224,481,8.833,494,7.461,547,7.412,575,3.452,576,11.031,578,7.729,579,8.874,634,9.516,639,8.833,666,6.509,771,6.185,808,6.131,832,11.329,1001,12.097,1105,8.648,1121,9.3,1580,11.329,2093,10.329]],["keywords/219",[]],["title/220",[16,141.294,693,255.603,1217,440.224,1220,438.107]],["content/220",[]],["keywords/220",[]],["title/221",[422,424.277,864,498.398]],["content/221",[1,1.785,3,1.28,8,2.864,13,3.454,15,3.127,16,2.799,18,1.77,22,1.221,24,5.019,25,4.43,30,2.533,31,2.047,61,2.765,66,1.749,69,2.21,79,3.391,82,5.581,112,2.651,115,5.818,127,3.066,136,4.85,146,4.08,180,3.837,196,4.867,205,3.713,207,3.39,220,3.361,222,1.257,223,1.735,224,0.9,226,1.785,228,2.199,258,2.507,266,3.773,267,5.099,270,2.478,279,2.605,293,4.424,303,3.39,307,2.667,316,4.921,330,4.242,334,3.264,343,2.942,350,5.238,357,5.889,374,4.65,386,3.905,387,3.837,404,2.699,422,2.438,427,2.874,448,4.372,461,6.699,490,2.21,513,3.361,515,4.053,552,4.08,569,4.107,575,3.746,603,3.674,625,4.255,627,3.196,641,5.498,646,3.674,647,2.952,657,5.581,675,5.035,693,3.284,698,4.107,711,5.238,752,4.921,777,4.667,779,4.81,810,3.566,812,3.549,842,2.699,901,3.816,903,9.403,921,5.376,926,4.107,946,5.167,981,5.686,1189,3.15,1210,5.952,1214,5.167,1215,5.711,1220,11.308,1221,8.716,1227,6.948,1230,8.096,1237,4.107,1241,10.325,1267,3.361,1315,4.975,1487,6.948,1507,5.581,1579,6.072,1810,4.917,2078,4.255,2225,6.659,2257,5.928,2407,11.019,2438,6.237,2439,6.237,2440,7.921,2441,7.921,2442,7.921,2443,6.659,2444,5.801,2445,6.659,2446,6.659,2447,7.921,2448,7.334,2449,5.928,2450,13.013,2451,9.403,2452,9.2,2453,5.928,2454,5.686,2455,5.315,2456,5.686,2457,5.928,2458,7.921,2459,7.921,2460,7.921,2461,5.686]],["keywords/221",[]],["title/222",[864,498.398,2027,696.341]],["content/222",[13,5.293,15,3.894,16,1.523,22,1.025,24,5.348,25,2.991,66,2.327,69,2.941,82,7.428,92,9.206,113,2.481,115,5.831,136,7.203,185,3.68,226,2.375,289,4.84,297,4.453,330,5.283,334,4.344,335,2.375,340,2.346,343,3.915,352,3.043,357,4.941,374,5.791,422,3.245,427,3.824,575,4.477,603,4.89,604,5.43,607,6.977,625,5.662,641,6.848,644,6.247,646,4.89,647,3.928,651,6.32,693,4.09,779,6.402,810,4.746,812,4.723,864,3.812,946,6.876,975,7.074,1049,5.022,1217,4.746,1220,11.009,1230,9.676,1237,5.466,1241,12.341,1267,4.473,1507,7.428,1552,6.786,1988,4.492,2027,7.905,2078,5.662,2443,8.862,2444,7.72,2445,8.862,2446,8.862,2449,7.89,2450,15.121,2451,11.711,2452,11.459,2453,7.89,2454,7.567,2455,7.074,2456,7.567,2457,7.89,2462,6.621,2463,17.358,2464,9.246,2465,9.246,2466,6.402,2467,9.246,2468,9.246]],["keywords/222",[]],["title/223",[61,399.429,864,413.694,1150,398.191]],["content/223",[13,5.112,15,3.894,22,1.025,24,5.348,25,2.991,61,3.68,66,2.327,69,2.941,82,7.428,92,4.7,94,7.074,112,6.245,115,3.928,136,7.203,146,5.43,226,2.375,263,3.236,297,4.453,330,6.3,334,4.344,335,2.375,343,3.915,345,4.572,357,4.941,374,5.791,385,3.457,422,5.744,445,3.228,575,2.529,603,7.259,616,2.688,625,5.662,641,6.848,644,4.208,647,3.928,651,6.32,693,2.755,707,3.635,779,9.503,810,4.746,812,4.723,864,3.812,946,6.876,1049,5.022,1143,5.292,1150,6.494,1163,8.813,1165,7.183,1215,4.792,1217,4.746,1220,10.718,1230,9.676,1237,5.466,1241,13.655,1267,4.473,1507,11.026,1859,5.888,2078,5.662,2449,7.89,2450,16.153,2451,13.966,2452,13.665,2453,7.89,2454,7.567,2455,7.074,2456,7.567,2457,7.89,2462,6.621,2469,16.257,2470,6.876,2471,8.862,2472,9.246,2473,5.705]],["keywords/223",[]],["title/224",[864,498.398,1151,763.589]],["content/224",[13,4.981,15,3.696,22,0.956,24,5.165,25,2.789,66,4.726,68,4.735,69,2.742,82,6.926,92,4.382,115,3.663,136,6.908,155,3.879,220,6.3,258,3.571,277,2.072,297,6.273,330,5.013,334,4.05,335,5.073,340,3.305,343,3.65,345,4.263,352,4.287,357,4.607,374,5.496,385,3.223,417,5.536,422,4.57,461,12.005,513,4.17,574,4.468,575,2.358,603,4.559,625,5.28,641,6.498,644,3.924,647,3.663,651,8.054,660,4.607,693,2.569,721,4.845,779,9.017,812,4.403,866,8.621,946,6.411,1074,7.409,1151,8.226,1215,4.468,1217,4.425,1220,10.472,1230,9.279,1237,5.097,1241,11.834,1267,4.17,1507,6.926,2041,4.263,2078,5.28,2248,5.583,2317,6.807,2449,7.356,2450,14.602,2451,11.113,2452,10.874,2453,7.356,2454,7.055,2455,6.595,2456,7.055,2457,7.356,2462,14.139,2469,15.7,2474,9.829,2475,8.621]],["keywords/224",[]],["title/225",[16,250.43]],["content/225",[6,6.56,13,4.283,15,4.818,18,3.177,22,1.382,24,3.682,31,3.673,112,4.757,127,3.469,154,9.271,163,4.729,222,2.255,223,3.113,224,1.615,254,7.092,258,2.836,283,5.333,296,5.589,303,6.083,316,5.568,354,3.507,355,3.657,385,4.661,404,4.842,427,5.156,448,6.738,465,4.715,493,7.579,515,7.273,596,12.306,647,5.297,651,5.741,693,3.715,698,7.37,870,9.271,921,6.083,1023,3.339,1042,5.718,1110,7.812,1132,10.409,1210,9.172,1215,6.461,1217,6.398,1220,11.08,1221,5.527,1227,12.467,1228,11.191,1230,10.038,1240,10.896,1401,6.593,2042,4.363,2407,16.98,2438,11.191]],["keywords/225",[]],["title/226",[223,250.557,465,379.544,632,512.565]],["content/226",[]],["keywords/226",[]],["title/227",[47,386.262,222,135.479,422,262.833,447,338.286,465,283.262]],["content/227",[3,2.813,11,4.742,22,1.692,36,6.694,102,9.419,106,6.335,223,4.844,241,7.23,251,5.192,261,6.463,263,5.343,268,6.486,352,6.386,372,5.371,447,6.895,465,7.338,602,8.906,631,10.355,672,11.352,728,12.355,901,8.384,918,11.859,1442,12.355,1863,11.352,2476,12.263,2477,17.403,2478,17.403,2479,17.403,2480,17.403]],["keywords/227",[]],["title/228",[3,222.763,222,218.697]],["content/228",[1,2.075,2,1.47,3,3.693,8,3.329,11,5.98,19,2.122,22,1.373,30,2.944,39,5.533,47,4.165,69,3.942,113,5.55,127,2.247,163,3.063,195,1.261,198,4.206,222,3.059,223,3.764,229,5.918,230,3.118,237,3.993,241,5.869,250,5.142,251,4.214,258,1.837,261,3.419,266,4.386,273,6.089,277,1.941,303,3.94,307,3.099,317,6.376,329,3.58,340,2.049,347,6.195,352,2.658,354,2.271,355,2.369,357,4.316,359,9.822,361,8.405,363,4.742,372,5.95,385,5.637,399,1.881,422,2.834,427,3.34,440,3.567,445,2.819,447,8.239,457,6.329,465,8.02,481,5.652,493,4.909,505,4.681,522,5.852,530,5.373,533,4.206,599,6.099,631,5.477,679,4.271,683,7.058,705,6.178,721,4.539,728,5.142,752,5.534,804,3.793,807,5.782,810,6.359,834,5.782,841,7.479,920,4.84,930,4.909,966,6.005,982,5.782,1021,4.339,1038,8.98,1042,3.704,1066,10.796,1113,4.594,1267,3.906,1618,6.273,1621,5.591,1851,6.608,2066,7.74,2448,8.524,2481,8.524,2482,9.206,2483,8.524,2484,9.206]],["keywords/228",[]],["title/229",[3,222.763,268,513.649]],["content/229",[1,4.043,3,3.357,11,6.477,22,2.192,47,5.761,102,9.709,113,5.595,127,3.108,195,1.745,223,3.929,227,4.094,237,5.523,251,3.799,255,7.234,258,2.541,261,4.729,263,3.91,268,6.686,277,3.782,281,2.936,291,3.494,307,4.287,329,4.952,347,4.59,365,11.865,385,4.176,422,3.92,440,4.934,447,7.108,457,5.705,465,7.886,505,6.475,599,8.968,603,5.907,705,8.545,728,7.113,752,4.989,761,10.02,807,7.998,841,9.498,920,6.695,982,7.998,1001,10.706,1025,7.998,1066,11.268,1267,5.403,1604,8.973,1621,7.734,1851,9.141,2481,11.791,2483,11.791,2485,17.94,2486,12.734]],["keywords/229",[]],["title/230",[47,442.372,223,214.16,263,300.216,465,324.41]],["content/230",[1,3.433,2,1.059,3,3.686,7,4.109,8,3.678,9,6.549,11,2.772,16,1.47,22,1.481,25,2.887,39,6.114,66,2.246,68,4.9,86,4.671,89,2.192,102,5.505,113,2.395,136,3.927,154,6.635,162,4.209,168,2.054,185,3.552,198,4.648,223,4.995,226,2.292,230,3.445,241,7.59,251,4.546,258,3.041,261,3.778,263,6.228,266,4.846,275,6.245,284,3.058,307,5.129,323,6.315,325,4.873,330,3.435,359,8.721,363,5.24,365,6.728,368,3.703,372,4.703,374,3.765,385,4.997,399,2.078,404,3.466,434,5.107,435,5.172,440,3.941,447,8.038,458,6.73,465,8.818,488,6.931,495,3.752,503,11.474,522,6.467,598,6.389,735,6.635,752,3.985,807,6.389,810,9.133,816,5.636,818,4.794,841,5.386,897,3.844,921,6.521,926,5.275,929,5.206,1021,4.794,1023,2.389,1042,4.093,1113,5.076,1326,5.729,1443,4.514,1765,6.178,1798,6.467,1851,10.938,1992,6.931,2487,7.168]],["keywords/230",[]],["title/231",[689,274.828,790,533.277,2041,424.116,2100,465.863]],["content/231",[]],["keywords/231",[]],["title/232",[286,1163.024]],["content/232",[2,2.001,3,2.626,16,1.603,22,1.869,36,4.267,40,7.053,43,2.913,87,4.609,139,9.718,145,5.173,162,7.954,168,2.24,191,6.537,195,3.225,208,4.59,222,1.76,223,3.558,224,1.846,226,3.661,235,5.715,251,3.31,279,6.323,281,2.557,284,4.885,287,4.748,294,6.968,299,7.818,300,7.237,302,8.304,325,5.315,330,3.746,335,2.5,340,2.47,352,4.691,396,4.609,422,3.415,445,5.887,524,9.327,529,6.738,541,5.753,568,4.237,660,5.201,661,5.832,664,6.968,686,8.125,689,3.118,692,5.916,719,6.098,752,4.346,788,6.601,790,8.861,1020,6.098,1110,6.098,1258,8.304,1268,8.505,1481,8.602,1488,5.96,1555,8.304,1623,6.888,1651,9.327,1916,8.369,1930,13.292,2038,7.56,2041,9.179,2100,10.082,2187,9.004,2208,12.221,2260,8.505,2262,7.683,2419,7.818,2488,11.094,2489,11.094]],["keywords/232",[]],["title/233",[790,945.178]],["content/233",[18,2.671,22,1.162,43,4.502,78,6.516,87,4.964,115,4.453,144,8.751,145,5.572,160,5.601,161,6.668,181,5.006,186,3.718,195,3.486,213,10.526,221,5.999,222,3.832,241,4.964,251,7.421,277,2.519,287,7.338,290,5.137,291,3.279,298,8.718,301,10.481,307,5.772,316,4.681,335,3.864,367,4.531,428,4.423,445,3.659,466,10.305,490,4.784,536,7.596,541,6.196,568,4.563,672,7.794,689,4.819,698,6.196,755,10.046,790,10.936,791,7.04,906,7.682,908,4.293,1008,5.789,1258,8.944,1267,5.07,1348,9.826,1481,6.326,1604,8.42,1710,8.578,1943,6.848,2029,11.875,2172,11.064,2173,11.064,2174,7.693,2175,11.064,2176,11.064,2177,8.578,2178,11.064,2179,10.481,2180,11.064,2490,11.949]],["keywords/233",[]],["title/234",[2042,532.102]],["content/234",[2,2.102,22,1.472,71,6.566,115,5.641,127,4.93,147,8.132,195,2.767,254,7.553,299,10.667,335,4.552,340,3.37,422,4.66,430,8.526,445,4.635,490,4.224,513,8.57,518,5.887,526,5.732,542,8.132,557,6.656,627,3.852,706,13.764,779,9.194,847,5.68,915,9.874,1093,11.919,1453,8.255,1481,12.035,1581,11.605,1614,8.32,1624,7.958,1760,11.605,1904,11.086,1913,12.726,2100,9.623,2208,9.623,2422,9.293,2491,14.017,2492,13.278,2493,16.981,2494,12.726,2495,12.726,2496,13.278]],["keywords/234",[]],["title/235",[226,170.748,277,159.751,335,170.748,445,232.017,752,296.845,925,346.191]],["content/235",[]],["keywords/235",[]],["title/236",[864,498.398,2041,597.791]],["content/236",[2,1.214,11,3.758,13,2.582,15,3.853,16,0.756,18,1.994,20,1.74,24,4.912,31,2.306,36,2.012,41,2.594,43,1.374,66,4.526,82,3.686,87,2.173,89,1.127,94,3.51,95,3.915,145,2.439,147,4.793,168,3.829,172,1.949,180,5.653,195,2.121,225,2.52,226,1.179,238,2.898,254,4.453,281,1.206,283,1.963,284,1.573,287,2.239,312,3.819,335,4.056,338,4.659,339,3.325,340,1.986,343,4.334,357,5.47,367,1.984,374,1.936,383,4.904,385,1.715,415,11.013,422,3.592,432,5.228,434,4.48,438,3.247,439,4.724,445,2.732,455,4.691,458,2.311,465,1.735,469,1.93,489,2.465,513,4.951,533,2.39,568,3.408,575,2.141,596,3.325,604,4.596,641,2.289,651,4.713,689,2.508,692,4.758,698,2.712,706,10.548,707,3.077,752,2.049,779,3.177,790,6.364,805,3.686,808,2.229,813,2.898,835,4.251,856,5.257,872,3.082,875,2.49,877,3.686,921,2.239,948,4.398,1059,7.026,1077,6.535,1113,2.61,1126,1.798,1132,3.831,1142,1.826,1189,3.549,1210,2.478,1267,2.219,1292,4.01,1396,5.745,1481,2.769,1509,4.245,1554,3.325,1565,3.325,1623,3.247,1643,5.529,1709,4.793,1723,6.08,1809,3.285,1840,3.755,1904,3.831,1937,4.588,2020,2.279,2041,3.87,2056,3.915,2067,3.51,2219,4.245,2220,6.288,2239,4.398,2296,4.398,2389,6.841,2412,4.588,2419,6.288,2455,3.51,2470,12.908,2491,4.843,2492,4.588,2497,4.588,2498,8.923,2499,11.669,2500,5.231,2501,4.588,2502,4.398,2503,5.231,2504,8.923,2505,10.805,2506,8.923,2507,8.923,2508,8.923,2509,3.564,2510,2.946,2511,5.231,2512,5.231,2513,5.231,2514,5.231,2515,5.231,2516,5.231,2517,5.231,2518,8.467,2519,5.231,2520,5.231,2521,4.398,2522,4.588,2523,5.231,2524,8.923,2525,5.231,2526,5.231,2527,12.77,2528,5.231,2529,5.231,2530,5.231,2531,3.755,2532,5.231,2533,5.231,2534,4.843,2535,5.231,2536,5.231,2537,5.231,2538,5.231,2539,5.231,2540,4.843,2541,5.231,2542,4.119,2543,5.231,2544,8.923,2545,3.623,2546,13.791,2547,5.231,2548,5.231,2549,11.311,2550,9.397,2551,8.923,2552,8.923,2553,13.791,2554,8.923,2555,8.923,2556,8.923,2557,8.923,2558,4.843,2559,3.564,2560,4.245,2561,8.546,2562,2.971,2563,2.579,2564,2.971,2565,7.718,2566,3.51,2567,4.843]],["keywords/236",[]],["title/237",[16,165.308,790,623.908,2041,496.196]],["content/237",[2,0.577,6,2.558,13,1.226,15,3.565,16,1.354,18,2.095,20,5.328,22,1.184,49,1.426,64,5.65,66,3.838,69,1.546,71,2.404,73,1.917,89,3.086,95,4.148,115,2.065,127,2.288,144,4.059,145,2.585,161,2.155,162,2.293,168,4.907,173,2.08,186,2.916,191,3.265,192,2.749,195,2.536,196,2.147,208,2.293,222,2.541,224,1.065,226,3.608,228,1.539,241,2.303,251,5.522,261,2.058,263,1.702,270,2.932,277,1.976,281,2.161,291,2.572,295,2.894,307,4.1,312,4.012,316,5.611,317,3.838,330,3.165,334,2.284,335,3.917,338,4.894,340,2.086,343,3.481,363,2.855,367,2.102,374,2.051,385,3.074,401,2.23,404,1.888,408,3.994,415,2.977,422,2.885,429,3.441,432,2.483,445,4.385,448,1.929,458,4.14,495,4.492,511,4.49,513,6.077,518,4.736,529,5.692,568,7.74,575,3.436,604,2.855,627,1.41,641,2.426,646,2.571,651,8.186,657,3.905,661,2.914,672,3.615,677,2.471,678,3.403,682,2.204,692,6.494,693,2.45,704,2.188,706,3.777,731,3.878,749,2.749,790,8.733,792,3.862,811,4.66,812,2.483,814,3.523,864,3.389,876,6.034,912,3.979,921,4.012,974,3.176,993,3,998,3.331,1008,2.685,1044,3.148,1088,3.615,1093,4.364,1121,2.64,1126,3.222,1142,1.935,1189,6.368,1313,3.523,1344,3.366,1391,3.568,1453,3.023,1481,2.934,1488,2.977,1633,3.298,1702,5.819,1709,2.977,1748,2.732,1820,3.838,1837,2.766,1904,4.059,1913,4.66,1916,2.855,1990,4.862,2020,2.415,2041,2.404,2080,3.615,2109,4.364,2167,4.66,2174,3.568,2186,4.862,2187,4.498,2214,4.148,2220,3.905,2226,4.364,2237,4.66,2270,4.862,2271,3.979,2419,3.905,2487,6.605,2492,4.862,2505,8.679,2518,9.831,2527,5.132,2540,5.132,2560,9.884,2561,10.489,2564,6.918,2565,10.59,2566,8.172,2567,8.679,2568,3.481,2569,7.015,2570,4.148,2571,7.38,2572,3.979,2573,3.523,2574,5.543,2575,5.543,2576,7.186,2577,5.543]],["keywords/237",[]],["title/238",[335,192.405,1093,672.297,2020,371.995,2493,717.825,2494,717.825]],["content/238",[2,0.958,7,3.718,11,2.508,15,6.419,18,2.058,19,3.256,22,0.895,25,2.613,36,3.541,39,5.533,95,10.573,97,4.105,112,3.081,113,2.167,147,4.945,152,4.982,162,3.809,168,3.892,185,4.932,192,4.566,195,1.935,226,2.075,229,3.857,230,3.118,241,3.825,244,4.227,270,2.88,283,3.455,298,4.681,327,5.927,330,3.108,335,4.344,339,5.852,343,3.419,367,3.491,404,3.136,415,12.987,422,2.834,429,5.715,445,2.819,504,7.092,513,5.994,532,5.1,533,4.206,568,3.516,575,2.209,641,4.029,651,7.787,692,10.28,693,3.692,721,4.539,747,13.753,749,7.006,752,3.607,823,6.24,875,2.569,911,7.74,925,6.454,929,4.711,976,7.389,982,5.782,1026,4.874,1050,5.918,1093,7.249,1125,6.376,1126,3.165,1210,4.362,1217,6.359,1368,6.089,1410,7.472,1453,5.02,1481,4.874,1488,4.945,1820,6.376,1942,6.608,2022,7.249,2061,8.524,2065,7.058,2296,7.74,2307,7.058,2419,6.487,2454,6.608,2493,11.876,2531,10.14,2542,7.249,2571,7.249,2578,14.126,2579,9.206,2580,9.206,2581,9.206,2582,6.891,2583,8.524,2584,13.08,2585,9.206,2586,9.206,2587,9.206,2588,9.206,2589,9.206,2590,9.206]],["keywords/238",[]],["title/239",[222,135.479,226,192.405,445,261.445,752,334.496,929,436.937]],["content/239",[1,1.318,2,2.341,3,3.347,11,6.129,13,1.294,15,2.441,16,2.142,18,1.307,20,3.263,30,1.87,31,2.535,36,2.25,43,1.536,49,1.505,56,5.131,59,4.332,61,2.042,64,2.713,66,1.291,69,4.608,79,5.125,88,3.515,89,2.114,103,5.468,106,2.129,112,1.958,113,1.377,118,4.484,127,1.428,128,3.631,146,3.013,155,3.871,158,4.284,167,3.382,180,6.136,181,4.109,195,2.93,207,5.42,222,2.836,223,2.148,224,0.664,225,4.725,226,2.21,229,2.45,237,2.537,251,4.927,255,3.323,261,2.172,263,3.011,277,3.125,279,1.924,281,2.919,285,10.631,287,2.503,288,5.086,291,4.068,294,3.674,298,2.974,307,1.969,312,4.198,316,2.291,321,2.802,325,2.802,326,3.48,330,3.312,334,2.41,335,1.318,351,7.323,357,4.598,359,5.444,364,3.294,368,5.396,370,2.621,377,2.993,380,3.515,383,3.215,385,1.918,387,2.834,388,4.605,401,2.353,404,1.993,408,4.179,421,3.24,422,1.8,428,2.165,429,3.631,445,1.791,504,4.924,514,4.284,527,5.086,533,5.786,556,4.273,564,3.868,605,2.884,634,6.486,660,5.937,661,3.075,664,6.16,668,4.605,676,2.867,679,2.713,680,8.924,682,2.326,693,1.529,728,8.28,730,3.552,741,3.19,749,2.901,752,3.842,771,2.514,803,3.119,812,2.621,822,5.131,831,2.834,836,5.895,920,3.075,926,3.033,998,3.515,1018,3.986,1021,2.757,1042,5.964,1049,2.787,1066,3.674,1085,4.122,1105,3.515,1113,2.919,1187,3.718,1267,2.482,1412,3.591,1443,2.596,1481,3.097,1488,3.142,1510,4.747,1610,4.378,1634,3.925,1650,4.378,1697,5.131,1708,2.85,1837,2.919,1945,3.352,1985,6.911,2017,5.131,2029,4.051,2039,5.416,2065,4.484,2120,3.815,2177,4.199,2181,4.051,2198,4.917,2208,3.718,2209,5.131,2220,8.924,2226,4.605,2229,3.925,2238,4.747,2239,4.917,2261,5.131,2262,4.051,2542,7.722,2568,3.674,2569,4.378,2583,5.416,2591,9.808,2592,5.849,2593,5.849,2594,3.868,2595,5.849,2596,5.416,2597,5.849,2598,3.414,2599,5.849,2600,5.849]],["keywords/239",[]],["title/240",[223,186.996,226,192.405,445,261.445,752,334.496,930,455.313]],["content/240",[2,1.84,3,1.558,11,3.986,15,5.172,16,2.283,19,0.94,22,1.289,30,2.298,31,1.857,35,6.374,36,2.764,43,2.531,59,1.8,66,4.588,69,2.689,97,1.817,113,0.959,115,2.678,127,0.995,136,1.573,139,1.872,145,4.494,158,5.263,162,1.686,168,2.346,172,2.678,173,3.617,179,3.752,181,3.011,185,2.509,188,2.659,189,3.051,192,4.78,195,2.302,205,1.911,206,1.686,216,1.715,222,1.529,223,3.46,224,0.816,226,4.158,228,2.676,229,3.011,251,3.467,261,2.669,270,1.275,272,2.086,277,1.515,279,5.815,281,2.222,283,2.697,287,1.744,290,3.089,291,3.189,296,1.603,298,2.072,307,1.372,316,1.597,330,1.376,335,2.987,340,1.6,354,2.378,355,1.049,357,5.447,359,3.089,361,5.735,363,2.099,374,4.907,391,2.502,392,2.56,396,1.693,408,3.062,413,3.317,415,3.86,416,2.114,430,2.296,434,2.046,438,2.53,444,2.985,445,2.951,458,3.174,464,2.415,485,1.776,490,2.005,495,3.555,511,1.953,518,1.585,520,2.425,523,3.051,526,2.039,527,2.114,532,3.981,533,5.309,542,7.859,544,2.086,551,1.653,575,2.788,605,2.009,606,2.379,616,1.039,627,2.452,643,2.624,647,1.519,658,1.634,661,2.143,679,1.891,693,1.878,697,3.654,712,3.95,721,2.009,727,2.985,735,2.659,741,2.223,752,3.776,761,2.277,771,1.752,790,2.223,810,1.835,812,1.826,860,2.206,864,1.474,872,2.401,874,4.897,902,8.92,910,2.872,925,1.862,929,3.678,930,2.173,938,2.425,964,2.086,981,2.926,1018,2.777,1021,1.921,1033,2.56,1042,2.891,1050,1.707,1083,2.926,1105,2.45,1110,2.24,1113,2.034,1126,2.471,1142,1.423,1165,2.777,1189,6.684,1261,5.064,1267,4.089,1292,3.125,1393,2.099,1401,5.391,1443,1.809,1481,2.158,1488,2.189,1521,3.308,1545,3.308,1566,3.575,1581,3.125,1610,3.051,1614,2.24,1616,2.401,1618,2.777,1628,2.624,1704,3.427,1748,3.543,1765,2.475,1795,2.401,1796,2.475,1808,2.659,1820,2.823,1832,3.919,1930,2.56,1943,2.336,1973,2.425,1983,2.696,1985,5.064,2029,4.977,2086,2.379,2088,3.427,2100,9.665,2120,2.659,2131,2.624,2132,3.752,2133,3.774,2134,8.103,2135,3.575,2136,3.427,2137,3.308,2138,6.042,2139,3.125,2140,7.589,2141,5.379,2142,5.833,2143,13.282,2144,6.042,2145,8.103,2146,6.304,2147,6.042,2148,3.427,2149,3.427,2150,6.042,2151,3.427,2152,3.427,2153,3.427,2154,3.308,2155,2.985,2156,3.427,2157,3.427,2158,6.304,2159,3.575,2209,3.575,2219,3.308,2220,2.872,2234,3.125,2237,3.427,2240,4.319,2247,3.209,2252,2.926,2496,3.575,2582,3.051,2601,3.774,2602,4.076,2603,4.076,2604,7.186,2605,7.186,2606,2.823,2607,2.45,2608,4.118,2609,3.774,2610,3.774,2611,3.774,2612,4.076]],["keywords/240",[]],["title/241",[43,361.914,700,939.177]],["content/241",[2,1.535,11,4.02,15,3.672,16,2.132,22,1.434,145,6.88,154,14.638,160,6.916,180,7.148,191,8.693,195,3.074,196,5.716,221,7.407,226,3.325,279,4.852,284,4.436,285,9.498,329,5.737,442,11.043,445,4.518,523,11.043,568,5.634,578,7.925,718,11.974,773,11.617,790,10.827,836,8.867,860,7.985,1004,11.974,1033,9.266,1086,10.396,1105,8.867,1267,6.26,1449,10.591,1820,10.218,1930,9.266,2041,6.399,2100,7.029,2129,12.941,2187,11.974,2317,10.218,2337,11.043,2613,14.754,2614,14.754,2615,13.661,2616,14.754,2617,13.661,2618,12.941,2619,14.754,2620,13.661,2621,14.754,2622,14.754,2623,14.754]],["keywords/241",[]],["title/242",[445,422.038,683,1056.653]],["content/242",[2,1.791,11,5.48,22,1.673,127,2.932,162,4.969,172,4.476,279,3.95,298,6.107,335,4.949,343,4.461,374,8.605,397,4.249,415,6.452,416,13.214,435,6.107,445,5.27,495,6.348,512,6.5,542,9.245,575,4.129,611,7.944,683,13.194,700,8.184,706,8.184,792,4.949,833,6.654,874,8.184,876,11.079,902,10.221,906,5.381,1088,7.835,1093,9.457,1158,13.301,1217,5.407,1258,8.99,1396,7.732,1905,8.464,1916,6.187,2093,8.622,2100,8.199,2137,13.968,2139,9.208,2140,15.835,2141,8.99,2142,13.968,2238,9.748,2240,7.219,2419,8.464,2493,10.098,2494,10.098,2564,11.424,2624,12.011,2625,11.121,2626,11.121,2627,12.011]],["keywords/242",[]],["title/243",[533,629.721,752,539.96]],["content/243",[8,6.023,22,1.619,66,3.677,79,4.496,89,4.635,162,6.891,186,5.182,195,2.947,224,1.892,235,8.579,238,9.227,241,6.92,277,3.511,279,7.073,284,5.008,335,3.753,340,3.707,408,7.097,434,8.362,644,6.649,660,10.082,719,9.154,1074,8.311,1268,12.769,1481,8.818,1610,12.466,1916,8.579,1930,10.461,1943,9.544,2038,11.349,2041,7.224,2100,7.935,2208,10.588,2262,11.535,2419,11.736,2420,14.609]],["keywords/243",[]],["title/244",[2,78.859,22,73.669,279,249.209,693,198.061,766,465.184,2628,614.977]],["content/244",[]],["keywords/244",[]],["title/245",[1831,1269.296]],["content/245",[2,1.896,3,4.014,79,6.146,145,8.497,147,9.788,152,9.861,155,7.192,186,5.669,222,2.891,223,3.991,279,5.993,288,9.449,367,6.909,374,6.744,420,13.344,490,5.084,527,9.449,602,9.324,766,13.979,1106,13.08,1267,7.731,2417,15.983,2629,18.221,2630,12.051]],["keywords/245",[]],["title/246",[13,304.933,326,820.063]],["content/246",[2,2.441,3,3.791,11,6.392,279,7.715,557,8.407,627,4.865,766,14.402,1117,19.722,1598,11.492,2630,12.645,2631,23.498,2632,19.12,2633,14.311,2634,17.704]],["keywords/246",[]],["title/247",[228,382.743,693,360.272]],["content/247",[2,1.733,11,4.538,112,7.198,127,4.065,220,7.067,228,4.625,279,8.279,340,3.707,422,5.127,693,5.621,823,7.357,896,8.876,1117,20.024,1126,7.394,1143,10.797,1368,11.015,1593,11.349,1768,9.544,1945,12.324,2020,7.256,2628,13.518,2635,14.002,2636,16.656,2637,16.656,2638,16.656,2639,15.422,2640,13.518,2641,16.656]],["keywords/247",[]],["title/248",[693,360.272,2628,1118.642]],["content/248",[]],["keywords/248",[]],["title/249",[279,280.819,422,262.833,896,318.197,925,390.102,1945,489.291]],["content/249",[69,5.761,179,10.78,196,8,279,6.791,297,8.723,422,6.356,646,9.578,658,8.275,896,7.695,1768,11.832,1945,11.832,2642,20.648,2643,20.648]],["keywords/249",[]],["title/250",[226,192.405,445,261.445,766,524.187,929,436.937,2094,370.322]],["content/250",[2,1.063,3,1.651,15,6.875,16,2.938,22,1.781,66,2.256,92,4.556,94,6.856,136,3.944,186,3.179,228,4.245,238,5.66,270,4.782,279,3.36,356,10.405,392,11.504,489,4.815,490,2.851,607,4.556,670,8.045,693,2.671,766,14.024,875,2.851,880,8.962,887,16.097,910,7.199,941,8.59,1112,6.577,1312,6.141,1363,5.908,1463,8.962,1507,7.199,1509,8.292,1623,6.343,1798,6.495,1928,7.482,1937,8.962,2094,7.944,2454,7.334,2630,6.757,2644,10.217,2645,15.287,2646,10.217,2647,9.46,2648,15.287,2649,10.217,2650,10.217,2651,10.217,2652,10.217,2653,10.217,2654,10.217,2655,10.217,2656,10.217,2657,10.217,2658,10.217,2659,10.217,2660,10.217,2661,10.217,2662,10.217,2663,10.217,2664,10.217,2665,10.217,2666,10.217,2667,10.217,2668,10.217,2669,10.217,2670,10.217,2671,10.217,2672,10.217,2673,10.217,2674,10.217,2675,15.287,2676,9.46,2677,10.217,2678,10.217,2679,10.217,2680,10.217,2681,10.217,2682,10.217,2683,10.217,2684,8.962,2685,10.217,2686,10.217]],["keywords/250",[]],["title/251",[22,95.072,172,364.419,195,133.976,666,442.372]],["content/251",[]],["keywords/251",[]],["title/252",[286,1163.024]],["content/252",[2,2.04,22,1.906,43,5.147,172,7.306,208,8.111,284,5.894,287,8.39,569,12.351,652,6.522,666,10.775,959,12.312,1022,10.86,1481,10.379,1627,15.435,1917,13.358,2050,13.814,2208,12.462]],["keywords/252",[]],["title/253",[226,220.355,445,299.424,601,453.632,604,503.706]],["content/253",[2,1.163,3,3.291,8,2.476,15,5.757,22,1.588,36,2.634,42,3.245,48,5.25,70,4.496,71,2.97,79,3.821,106,4.067,147,3.679,158,5.015,162,4.623,186,2.131,192,3.396,195,1.531,219,3.098,226,1.543,232,4.116,249,6.007,261,2.543,265,3.996,268,5.275,279,2.252,281,1.579,290,2.944,297,2.893,327,4.408,340,2.487,343,2.543,367,2.597,408,2.918,439,3.626,445,2.097,465,2.272,477,5.25,495,4.122,509,4.035,569,3.551,575,1.643,598,4.301,599,2.957,601,3.177,604,3.527,627,1.742,639,4.204,641,2.997,642,3.626,666,5.055,689,1.925,749,3.396,779,4.159,804,2.822,808,2.918,812,3.068,818,3.227,863,7.39,875,1.911,876,4.408,897,2.588,925,6.467,930,3.652,959,4.301,983,5.015,984,5.757,1020,3.764,1023,3.837,1024,4.408,1026,3.626,1028,5.015,1042,2.755,1074,3.417,1085,4.825,1137,5.392,1363,6.461,1379,6.007,1381,5.392,1481,5.916,1488,3.679,1837,3.417,1916,3.527,1974,3.376,1985,4.825,2050,4.825,2056,10.595,2058,10.852,2167,5.757,2208,8.998,2226,5.392,2229,4.595,2284,6.007,2291,5.558,2380,6.007,2389,8.566,2618,6.007,2687,9.069,2688,6.341,2689,6.007,2690,6.341,2691,6.341,2692,6.341,2693,6.341,2694,6.341,2695,6.007,2696,6.341,2697,9.801,2698,6.341,2699,6.341,2700,6.341,2701,6.007,2702,6.007,2703,6.341,2704,10.347,2705,6.341,2706,6.341,2707,13.107,2708,11.488,2709,13.107,2710,13.107,2711,6.341,2712,10.347,2713,6.341,2714,6.341,2715,6.007,2716,10.347,2717,6.341,2718,6.341,2719,6.341,2720,6.341,2721,6.341,2722,6.341,2723,6.341,2724,6.341,2725,6.341,2726,6.341,2727,6.341,2728,6.341,2729,6.341,2730,6.341,2731,6.341,2732,6.341,2733,6.341,2734,6.341,2735,6.341,2736,6.341,2737,10.347,2738,6.341,2739,5.757,2740,6.341,2741,6.341,2742,6.341,2743,6.341,2744,6.341,2745,6.341,2746,6.341,2747,6.341,2748,6.341,2749,6.341,2750,6.341,2751,6.341,2752,6.341,2753,6.341,2754,6.341,2755,6.341,2756,6.341,2757,6.341,2758,9.801,2759,6.341,2760,6.341,2761,6.341,2762,10.347,2763,6.007,2764,6.341,2765,6.848,2766,6.848,2767,6.848]],["keywords/253",[]],["title/254",[73,476.77,268,513.649]],["content/254",[2,1.53,3,3.305,6,2.215,11,5.195,13,3.557,15,4.929,16,0.693,18,2.445,19,4.963,20,2.757,22,1.063,24,3.372,25,1.362,52,1.946,66,1.83,70,3.334,73,1.66,79,5.346,83,2.638,87,3.443,89,2.357,106,1.747,113,1.951,127,2.023,136,1.853,160,2.25,172,3.088,181,2.01,185,5.614,186,1.493,192,2.38,194,3.13,195,0.658,208,4.525,221,2.409,223,1.051,226,1.868,228,2.301,229,3.472,232,2.884,235,4.269,251,1.432,258,0.958,263,2.544,266,2.286,268,4.852,277,3.39,281,1.106,282,2.08,283,3.11,284,1.443,288,2.489,289,2.204,293,2.68,295,2.506,312,7.377,319,3.27,320,2.38,334,1.978,339,3.051,340,1.068,343,1.782,372,4.963,385,2.718,394,2.15,396,3.443,397,1.014,404,1.635,408,3.532,426,3.797,427,3.007,428,7.969,438,2.979,445,1.469,448,2.884,457,2.15,464,2.74,465,2.749,495,3.057,504,2.409,533,2.193,544,9.324,547,5.634,551,6.52,575,4.575,596,3.051,607,3.695,610,6.643,625,2.578,642,4.388,658,3.321,660,5.127,666,4.948,676,2.352,679,2.226,680,5.84,683,3.679,717,2.395,728,2.68,743,11.782,746,3.749,758,3.174,805,3.382,812,2.15,835,5.211,846,2.312,915,3.13,925,5.948,926,2.489,956,4.792,974,2.75,1023,2.569,1038,3.051,1042,1.931,1043,2.801,1049,2.286,1074,2.395,1088,3.13,1204,2.75,1211,2.828,1336,4.931,1359,6.953,1363,9.298,1369,3.895,1412,2.946,1481,2.541,1552,3.09,1611,9.567,1623,2.979,1633,2.855,1643,3.927,1659,3.382,1695,4.035,1748,2.366,1983,5.481,2056,6.203,2058,8.385,2067,3.22,2181,3.324,2220,3.382,2267,4.444,2307,3.679,2594,3.174,2762,12.055,2763,18.438,2764,4.444,2768,3.895,2769,4.444,2770,16.079,2771,14.698,2772,8.288,2773,10.938,2774,10.938,2775,10.938,2776,4.444,2777,3.895]],["keywords/254",[]],["title/255",[749,859.577]],["content/255",[2,1.363,3,2.956,11,3.567,22,2.05,36,5.036,43,3.438,94,8.786,113,3.082,162,5.417,181,5.485,227,4.21,261,8.919,266,6.237,268,8.95,277,3.857,281,4.217,287,5.604,296,5.148,312,5.604,327,8.429,354,3.23,394,5.866,427,4.75,494,6.789,511,6.272,575,3.141,599,9.855,610,11.11,641,5.73,666,5.923,689,3.68,749,6.493,752,5.129,906,5.866,909,7.313,959,8.223,1007,6.836,1025,11.489,1033,8.223,1042,5.268,1381,17.972,1481,6.932,1916,6.744,2029,9.067,2050,9.226,2097,11.484,2240,7.869,2768,10.626,2769,12.123,2778,22.825,2779,13.093,2780,13.093,2781,13.093,2782,13.093]],["keywords/255",[]],["title/256",[445,422.038,1170,1085.254]],["content/256",[3,3.428,73,7.338,87,8.813,172,7.905,195,2.906,268,7.905,284,6.378,717,10.585,804,8.741,1627,16.702]],["keywords/256",[]],["title/257",[599,595.127,804,567.943]],["content/257",[2,2.405,22,1.814,66,4.12,76,15.144,89,4.021,235,9.612,261,6.93,268,6.954,279,6.137,281,4.301,284,5.61,372,5.759,375,10.256,421,10.338,599,10.839,602,9.549,639,11.456,658,7.478,804,9.522,1026,9.879,1042,7.507]],["keywords/257",[]],["title/258",[2,88.862,195,116.983,354,210.671,355,219.688,372,263.532]],["content/258",[]],["keywords/258",[]],["title/259",[222,218.697,372,425.406]],["content/259",[1,3.288,2,1.836,3,3.862,11,6.511,16,2.108,22,1.916,30,5.206,36,5.613,47,7.366,49,1.468,59,4.243,61,3.353,69,4.071,86,4.411,106,3.496,147,3.065,162,3.974,168,1.939,185,1.992,195,2.417,216,5.233,222,2.8,223,4.641,229,4.024,230,1.932,237,4.166,244,4.411,251,2.866,258,2.912,261,3.567,266,4.576,268,2.126,277,3.957,281,1.315,283,3.604,291,4.468,307,5.94,329,3.735,334,3.958,335,2.164,347,3.462,354,2.37,355,2.471,359,10.128,360,5.573,361,7.401,365,6.353,372,7.375,374,2.112,385,3.15,398,7.189,413,6.734,435,4.884,437,4.915,444,7.034,445,2.941,457,4.303,465,3.187,512,5.198,530,5.606,533,4.388,598,6.033,658,3.85,672,8.114,679,6.769,693,3.251,697,4.884,704,3.791,721,4.735,731,3.974,771,4.129,810,4.324,842,3.272,895,2.88,972,5.283,976,4.129,1021,4.527,1042,5.871,1066,12.879,1113,4.793,1121,2.718,1133,3.451,1218,6.895,1442,5.365,1634,6.445,1643,4.551,1896,7.796,1912,4.631,1915,6.895,1916,4.948,1945,5.504,1984,9.791,2243,7.563,2265,7.034,2783,4.631]],["keywords/259",[]],["title/260",[372,425.406,771,592.497]],["content/260",[1,4.572,4,10.818,22,1.972,24,5.255,89,4.372,163,6.75,181,8.499,283,7.613,372,6.262,599,8.76,603,9.411,1481,10.741,1581,15.553,1582,17.795,2784,20.288]],["keywords/260",[]],["title/261",[66,188.518,354,210.671,355,219.688,366,549.674,372,263.532]],["content/261",[]],["keywords/261",[]],["title/262",[2042,532.102]],["content/262",[279,7.106,296,8.496,340,4.809,526,6.132,599,9.329,602,11.057,603,10.023,863,14.29]],["keywords/262",[]],["title/263",[366,629.522,485,426.032,603,453.632,761,546.176]],["content/263",[1,3.445,2,1.063,3,1.651,14,7.054,15,2.543,22,0.993,24,5.639,25,2.899,49,2.629,66,2.256,88,6.141,113,4.312,130,4.6,168,2.063,185,5.337,218,6.272,222,1.621,223,2.238,225,4.922,227,3.285,228,2.837,230,5.177,241,4.245,255,5.804,266,4.867,277,3.862,283,3.834,297,4.317,329,3.973,343,5.677,345,4.431,352,4.414,354,4.519,355,4.713,357,7.166,366,16.964,372,3.153,440,5.923,455,5.371,515,5.228,518,5.945,551,4.143,556,4.451,596,6.495,599,10.225,601,4.74,606,5.963,607,4.556,610,6.205,625,8.212,626,4.74,627,3.89,644,6.103,652,3.399,679,4.74,682,6.08,704,4.033,728,5.707,761,5.707,871,7.723,896,7.577,900,6.417,925,4.668,946,6.665,1021,4.815,1026,5.409,1131,8.292,1198,7.199,1237,5.298,1590,6.856,1621,6.205,1643,4.841,2428,8.045,2785,12.407,2786,12.407,2787,10.217,2788,10.217]],["keywords/263",[]],["title/264",[261,424.898,366,736.511,372,353.108]],["content/264",[1,3.907,2,1.804,19,3.997,24,4.491,79,3.276,113,2.857,130,5.464,162,7.174,199,7.15,222,1.926,225,5.846,227,3.902,230,4.11,241,5.042,244,5.573,251,5.173,261,8.196,270,3.796,277,3.655,281,3.997,283,4.554,290,5.217,296,4.772,316,4.754,329,6.742,343,4.507,352,3.504,354,4.278,355,3.123,366,15.627,372,6.243,375,13.341,387,5.88,448,4.224,489,5.72,512,6.568,518,4.719,533,5.545,596,7.715,599,9.528,603,5.63,606,7.083,607,5.411,610,10.53,626,5.63,679,5.63,697,6.171,714,4.737,717,6.056,749,6.019,804,5.001,812,5.437,873,5.72,959,7.623,1021,5.72,1033,7.623,1443,5.386,2040,10.645,2098,9.556,2789,12.136,2790,10.645,2791,12.136,2792,12.136]],["keywords/264",[]],["title/265",[66,252.595,268,426.353,599,493.984]],["content/265",[]],["keywords/265",[]],["title/266",[2042,532.102]],["content/266",[2,2.574,3,2.297,8,5.139,24,3.682,61,4.962,66,4.274,73,4.916,97,6.337,108,7.007,145,6.628,195,1.947,196,5.507,206,5.88,222,2.255,244,6.526,268,5.297,281,3.276,283,5.333,340,4.309,352,4.103,354,5.432,355,4.981,374,5.261,408,6.057,526,6.248,529,8.632,552,7.321,564,9.4,599,9.506,601,10.213,603,8.98,604,11.34,627,3.616,679,6.593,804,5.857,810,6.398,863,12.803,894,8.726,969,10.203,1488,7.635,1917,9.685,2043,10.409,2044,13.16,2045,14.489]],["keywords/266",[]],["title/267",[330,465.387,2045,1031.638]],["content/267",[1,2.771,2,1.821,3,3.293,8,2.788,11,2.101,19,2.835,22,1.196,24,4.953,25,2.188,30,2.465,49,1.984,61,2.692,66,2.715,69,4.883,73,2.667,87,3.203,89,2.65,105,4.902,113,4.12,127,1.882,130,5.536,145,3.596,160,3.615,172,6.522,174,4.38,185,4.293,220,3.272,226,1.738,227,2.479,229,5.151,241,3.203,268,8.273,270,4.798,277,2.592,290,6.593,298,3.92,329,2.998,330,2.603,340,1.716,343,2.864,352,5.053,354,3.034,355,3.164,359,6.593,361,4.588,369,4.054,379,5.174,381,4.588,391,4.734,397,1.629,408,3.286,437,3.946,443,4.5,445,2.361,457,3.455,467,3.127,490,2.151,518,2.998,526,2.188,530,4.5,533,3.523,599,3.329,601,7.115,604,7.9,610,7.468,619,9.696,627,1.962,631,4.588,644,6.123,652,2.565,666,9.218,679,3.577,693,2.015,697,9.721,721,3.801,781,5.254,787,5.1,810,5.536,812,3.455,823,3.406,871,3.896,876,4.964,895,3.687,896,6.522,900,4.843,920,4.054,926,6.376,938,4.588,969,5.535,981,5.535,1020,4.238,1021,3.634,1026,4.082,1042,3.102,1050,3.23,1087,6.071,1273,7.549,1391,4.964,1424,6.482,1643,3.653,1765,4.683,1812,4.683,2045,15.251,2057,6.071,2062,9.204,2064,5.535,2065,5.911,2066,6.482,2067,11.744,2120,5.03,2785,6.258,2786,6.258,2793,9.682,2794,10.338,2795,7.711,2796,7.711,2797,7.711]],["keywords/267",[]],["title/268",[172,364.419,268,364.419,385,320.691,2045,731.918]],["content/268",[2,0.822,3,3.126,11,5.609,13,3.446,18,2.8,19,2.888,20,2.626,22,1.724,24,5.332,31,2.04,66,2.766,69,2.203,73,6.691,87,3.279,89,1.701,102,4.272,113,4.553,115,2.942,127,3.802,168,1.594,172,5.805,206,3.266,219,3.571,223,2.744,227,2.538,244,3.625,261,4.653,263,2.423,266,3.761,268,9.142,270,6.05,277,4.34,282,1.501,283,2.962,290,3.393,297,3.335,298,4.013,326,4.697,330,2.665,335,1.779,352,2.279,354,1.948,357,3.7,363,4.066,379,5.297,396,3.279,408,3.364,413,3.643,426,2.302,430,4.446,434,3.963,437,4.04,438,4.901,448,2.747,467,3.201,529,4.794,530,4.607,531,5.297,599,5.41,603,3.662,605,3.892,610,10.771,627,2.008,640,5.908,666,9.313,697,6.37,741,4.305,752,4.908,781,5.379,784,5.467,823,5.534,897,4.734,901,3.803,915,5.149,918,5.379,956,9.007,959,4.958,968,6.052,969,5.666,1025,9.783,1042,3.176,1087,6.215,1212,4.305,1237,4.093,1273,4.846,1336,7.454,1337,12.296,1355,7.454,1359,5.018,1395,6.636,1643,5.936,1846,10.989,2069,13.663,2248,4.484,2794,10.533,2798,7.894,2799,7.894,2800,15.698,2801,12.528,2802,7.894,2803,12.528,2804,7.894,2805,7.894,2806,6.215,2807,6.636]],["keywords/268",[]],["title/269",[268,364.419,385,320.691,619,541.745,2045,731.918]],["content/269",[2,0.977,3,3.148,11,6.027,13,3.85,18,3.206,19,3.307,20,3.125,22,1.692,24,4.508,31,2.427,66,2.074,69,2.621,73,6.02,83,5.162,102,5.083,113,4.585,127,3.501,206,3.886,219,4.249,223,2.057,227,3.02,244,4.313,261,5.327,263,2.883,266,4.474,268,9.246,270,5.444,277,4.663,282,1.786,283,3.524,297,3.968,298,4.775,330,3.171,354,2.317,357,4.403,379,6.302,408,4.002,413,4.335,426,2.739,430,5.29,434,4.715,437,7.34,438,5.831,448,3.269,467,3.808,529,5.704,530,5.481,531,6.302,599,6.194,603,4.357,610,11.831,612,7.623,619,11.624,620,5.766,627,2.39,640,7.03,666,10.007,697,4.775,741,5.122,752,5.619,781,6.4,823,4.149,901,4.524,915,6.126,918,6.4,919,6.4,959,5.899,968,7.2,969,6.742,1025,10.93,1042,3.779,1087,7.395,1212,5.122,1273,5.766,1359,5.971,1395,7.896,1643,4.45,1846,8.238,2069,15.265,2248,5.335,2794,12.059,2800,14.124,2806,7.395,2807,7.896,2808,9.392,2809,14.344]],["keywords/269",[]],["title/270",[66,252.595,268,426.353,603,530.728]],["content/270",[1,2.672,2,0.767,3,3.893,9,4.744,11,5.092,13,1.63,18,1.647,22,1.658,24,5.656,49,1.896,66,2.618,69,2.056,73,4.102,89,1.588,102,3.988,105,4.684,113,4.014,127,1.799,130,5.338,152,3.988,154,4.807,172,4.419,206,3.049,220,5.031,223,1.614,227,4.784,230,5.039,255,4.186,261,5.526,266,3.51,268,8.137,270,3.709,277,4.751,281,1.699,283,4.45,296,2.897,298,3.746,303,3.154,343,2.737,352,2.127,354,3.671,355,1.896,375,4.05,379,4.945,385,3.889,391,4.524,397,1.557,408,3.14,413,3.401,422,3.65,434,3.699,437,7.614,438,4.575,448,4.127,457,5.313,467,2.988,518,4.611,529,4.475,530,4.3,531,4.945,540,3.57,599,9.064,603,7.91,604,3.796,610,12.75,619,6.569,625,3.958,626,3.418,627,4.339,631,4.384,641,3.225,644,5.94,652,2.452,658,2.953,660,3.454,666,7.714,677,3.286,679,3.418,697,6.029,704,2.908,752,4.645,761,6.623,812,3.301,813,4.082,823,6.572,871,3.723,896,6.355,900,4.628,918,5.021,920,3.874,924,5.515,946,4.807,959,4.628,969,5.289,1021,3.473,1025,9.345,1026,3.901,1391,4.744,1393,3.796,1395,6.195,1453,4.018,1643,3.491,1775,3.958,2045,5.515,2066,6.195,2067,9.985,2177,5.289,2785,5.98,2786,5.98,2793,5.802,2794,6.195,2810,10.979,2811,5.98]],["keywords/270",[]],["title/271",[268,426.353,291,313.941,374,423.455]],["content/271",[3,3.382,25,4.532,43,4.193,69,6.513,70,8.419,113,4.926,162,6.607,172,5.951,181,6.69,220,6.776,251,4.764,268,8.698,270,4.995,277,3.367,291,6.405,325,7.65,339,10.152,360,7.155,374,7.745,385,5.237,401,6.425,410,9.598,440,6.187,619,8.847,620,9.804,666,10.559,679,7.408,807,10.03,906,7.155,956,9.234,1187,10.152,1218,11.463,1684,9.409,2596,14.787]],["keywords/271",[]],["title/272",[1,220.355,2,101.77,372,301.814,603,453.632]],["content/272",[]],["keywords/272",[]],["title/273",[2042,532.102]],["content/273",[2,2.058,22,1.922,25,5.611,89,4.261,261,7.342,279,6.502,296,7.774,340,4.401,366,12.727,372,6.102,375,10.866,526,5.611,599,8.536,602,10.117,603,9.171,804,8.146,863,13.075,2812,19.77]],["keywords/273",[]],["title/274",[1,257.805,603,530.728,761,639]],["content/274",[1,4.968,2,1.363,3,3.212,19,3.018,22,0.812,24,5.147,25,2.369,42,3.955,60,4.662,73,2.887,88,5.017,89,1.799,113,4.677,130,8.946,152,7.086,160,3.913,195,1.144,199,4.918,216,3.512,218,5.124,220,3.542,222,2.902,223,4.352,225,4.021,227,7.339,230,6.195,255,9.176,261,3.1,263,2.563,270,5.722,277,3.406,283,3.132,289,3.833,296,3.282,321,3.999,340,2.914,343,3.1,352,2.41,354,3.23,355,2.148,372,2.576,375,12.116,386,4.115,413,3.852,448,2.905,467,3.385,485,3.637,489,3.934,518,6.282,596,8.323,599,9.855,606,4.871,607,3.722,610,5.069,625,4.484,626,3.872,627,4.11,631,4.966,641,3.653,652,2.777,667,5.688,679,3.872,682,3.32,704,3.295,717,6.533,761,13.413,787,5.52,812,3.74,823,3.687,871,4.217,896,6.817,900,5.243,924,6.248,946,5.445,1021,3.934,1026,4.419,1042,3.358,1393,4.3,1643,3.955,1654,6.399,1775,4.484,1923,5.374,2428,6.572,2785,6.775,2786,6.775,2811,6.775,2813,7.322,2814,8.347,2815,13.093,2816,8.347,2817,8.347,2818,13.093,2819,13.093,2820,8.347]],["keywords/274",[]],["title/275",[1,170.748,24,196.278,237,328.638,261,281.416,277,159.751,372,233.868]],["content/275",[1,5.349,2,1.721,19,2.62,22,1.895,24,5.545,43,2.984,79,3.068,86,5.219,120,5.092,162,4.702,216,4.781,225,7.966,227,6.268,230,3.849,237,7.172,241,8.099,251,3.391,261,8.816,277,4.11,281,2.62,283,6.205,291,3.119,296,4.469,317,7.871,329,6.431,343,4.221,345,4.929,352,5.628,354,2.804,355,2.924,372,6.017,375,6.247,394,5.092,489,10.089,490,3.171,495,4.192,512,6.151,520,6.762,522,7.225,533,5.193,546,4.486,596,7.225,599,7.14,606,9.651,607,5.068,610,13.001,625,6.105,651,4.591,660,5.328,682,6.577,697,5.779,761,6.348,781,7.744,812,5.092,910,8.009,1091,6.247,1187,7.225,1393,5.854,1443,5.044,2040,9.969,2098,8.949,2262,7.871,2790,9.969,2821,11.365,2822,11.365,2823,7.517]],["keywords/275",[]],["title/276",[268,426.353,569,593.262,2824,1144.071]],["content/276",[]],["keywords/276",[]],["title/277",[540,554.256,717,570.86,1516,746.272]],["content/277",[2,1.023,3,3.46,8,3.554,11,2.678,13,3.959,14,5.152,15,3.696,18,2.197,22,1.74,25,2.789,49,3.82,66,2.17,79,4.008,109,5.736,113,2.314,116,5.736,172,7.431,173,3.688,185,5.184,223,2.153,224,1.117,229,4.117,237,4.263,244,4.513,261,3.65,266,4.682,268,9.179,269,6.926,277,4.204,293,5.49,297,4.152,325,4.708,331,6.807,340,3.305,352,2.838,391,6.034,399,2.008,408,7.625,413,4.536,428,3.638,445,3.009,457,4.403,526,5.078,540,10.906,563,5.683,575,2.358,600,6.697,627,2.501,658,3.939,666,6.717,682,3.909,698,5.097,705,6.595,717,4.904,805,6.926,897,3.714,956,8.585,1007,7.752,1234,6.697,1336,11.863,1359,6.248,1364,6.327,1401,6.888,1406,8.263,1516,13.964,1518,13.718,1519,7.739,1621,5.969,1707,9.542,1748,7.32,1888,6.926,2271,7.055,2825,14.848,2826,14.848,2827,9.829,2828,7.977,2829,9.829,2830,8.263,2831,9.829,2832,7.977,2833,9.829,2834,9.829]],["keywords/277",[]],["title/278",[69,272.849,526,277.509,644,390.397,975,656.187]],["content/278",[2,0.911,3,1.415,8,3.166,11,3.703,13,3.685,14,4.715,15,3.382,22,1.321,36,3.368,40,5.566,43,3.568,66,3.677,69,3.792,79,2.363,86,4.02,87,5.646,113,2.061,151,6.894,155,3.456,168,4.531,172,5.064,173,3.285,214,4.171,216,5.717,230,2.965,235,4.51,244,4.02,261,3.252,268,6.996,277,1.846,281,2.018,291,2.403,297,3.699,331,6.064,335,3.753,339,5.566,340,4.179,353,5.375,360,6.089,362,5.317,368,3.187,387,4.242,432,3.923,439,7.195,443,7.931,464,2.194,495,3.23,518,5.285,526,5.327,546,3.456,557,3.85,614,5.566,616,2.233,658,3.509,666,3.961,703,7.106,718,7.106,777,9.813,813,7.529,835,6.474,846,4.218,897,3.308,935,7.106,956,7.858,975,9.119,976,3.764,1008,9.094,1033,5.499,1134,5.875,1234,5.966,1278,5.711,1336,12.796,1337,14.265,1359,5.566,1391,5.637,1393,4.51,1419,8.107,1516,5.711,1518,17.203,1519,17.669,1707,10.01,1748,4.316,1842,6.285,2828,7.106,2830,7.361,2832,7.106,2835,8.107,2836,8.107,2837,8.756,2838,8.756,2839,8.756,2840,16.655,2841,8.756,2842,8.107,2843,8.756]],["keywords/278",[]],["title/279",[289,525.332,721,564.018,1516,746.272]],["content/279",[2,0.904,3,2.184,11,2.368,13,4.136,14,6.487,15,6.046,18,3.02,19,2.003,22,1.818,35,8.936,43,3.548,49,2.236,52,3.524,66,2.983,71,7.189,79,4.474,113,3.18,147,4.668,168,1.755,175,4.739,186,5.157,208,3.595,235,4.476,241,5.613,261,3.227,268,5.035,277,3.942,282,1.653,287,3.719,289,6.204,297,3.671,307,2.926,312,3.719,331,6.018,340,1.934,343,3.227,360,3.893,364,4.894,422,2.675,432,3.893,434,4.363,439,7.153,455,4.569,495,4.984,511,4.163,526,3.834,563,5.025,569,7.006,605,4.284,630,7.306,632,3.893,658,3.483,666,6.112,675,10.538,685,5.831,689,2.442,698,4.506,721,11.032,739,5.458,748,4.668,800,6.238,835,8.907,846,4.186,858,4.894,906,3.893,924,6.504,956,7.812,1007,4.537,1278,5.669,1308,5.594,1336,5.17,1337,5.524,1357,8.046,1359,8.589,1516,15.092,1518,14.334,1519,6.842,1748,4.284,1832,4.739,1835,6.504,1974,4.284,2828,7.053,2830,7.306,2832,10.965,2835,8.046,2844,8.69,2845,11.851,2846,5.335,2847,5.831,2848,8.69,2849,13.511,2850,8.69,2851,6.504,2852,8.69,2853,8.69,2854,8.69,2855,8.69,2856,8.69,2857,8.69,2858,8.69,2859,8.69]],["keywords/279",[]],["title/280",[322,1085.254,1516,899.071]],["content/280",[2,1.896,3,2.325,11,3.104,13,3.665,14,2.433,15,6.252,18,3.216,19,1.617,22,1.399,36,2.698,49,1.804,64,6.675,66,1.548,71,3.042,87,2.914,113,3.387,147,3.767,150,6.494,166,4.173,168,2.3,186,3.545,195,2.27,213,4.305,216,4.793,226,1.58,263,2.153,266,3.341,268,5.362,270,2.194,277,2.402,282,1.334,287,3.002,291,1.924,297,2.963,302,5.249,304,4.515,322,16.195,330,2.368,331,4.857,340,3.203,391,4.305,421,3.885,432,3.142,439,3.713,447,2.779,457,3.142,458,3.098,464,1.757,526,5.837,537,15.903,551,2.844,552,3.612,574,3.188,575,1.683,616,1.788,658,2.811,666,3.173,682,2.789,692,3.74,704,2.768,712,3.854,718,5.692,736,3.713,812,3.142,835,5.428,892,6.152,901,5.488,919,4.779,935,5.692,956,6.588,973,4.706,1008,3.398,1267,4.834,1278,4.575,1299,4.259,1308,4.515,1326,3.95,1336,6.779,1337,4.458,1359,9.147,1369,5.692,1467,5.136,1516,14.852,1518,12.7,1519,11.329,1520,12.621,1521,11.678,1660,5.692,1707,3.74,1716,2.242,1748,5.617,1842,8.178,1857,7.334,2275,5.692,2625,6.494,2828,5.692,2830,5.896,2832,11.678,2836,16.871,2845,9.993,2860,7.013,2861,12.096,2862,19.973,2863,11.393,2864,7.013,2865,7.013,2866,7.013,2867,11.393,2868,7.013,2869,7.013,2870,11.393,2871,5.376,2872,11.393,2873,7.013,2874,7.013,2875,7.013]],["keywords/280",[]],["title/281",[526,324.673,537,821.254,704,451.561]],["content/281",[1,1.209,2,0.949,3,0.867,8,3.296,11,2.484,13,2.017,15,6.325,18,3.133,19,3.232,20,1.785,22,1.527,24,2.361,25,1.522,36,2.063,49,3.059,64,2.488,66,1.184,73,4.112,79,3.209,87,2.228,89,2.562,113,2.146,168,2.4,172,1.999,181,2.247,185,1.873,189,4.015,214,5.664,216,5.898,220,2.276,221,2.693,235,2.763,241,2.228,251,2.72,261,1.992,263,1.647,268,7.715,270,2.852,277,1.131,281,1.236,282,1.02,283,2.013,297,2.266,299,3.779,319,3.655,321,2.569,322,4.223,330,1.811,331,3.715,332,3.369,334,2.21,335,1.209,343,1.992,352,1.549,396,2.228,403,4.705,404,1.827,408,2.286,422,2.806,426,1.564,428,1.985,445,2.791,489,2.528,518,2.086,524,4.509,526,5.171,533,4.165,537,16.037,538,3.41,540,2.598,543,4.966,544,6.083,546,2.117,547,8.092,551,2.175,552,2.763,557,2.358,569,6.165,575,3.769,578,2.881,599,2.316,601,2.488,605,2.644,607,2.392,613,3.928,614,3.41,619,11.078,620,11.774,631,3.191,641,2.347,650,3.41,658,4.764,666,2.426,692,2.86,699,3.779,700,3.655,704,5.534,705,6.117,720,5.946,722,3.499,728,5.091,738,3.779,741,4.971,743,5.424,746,4.124,777,5.371,796,4.015,812,2.403,813,2.971,938,3.191,943,3.779,969,3.85,982,3.369,1090,3.453,1091,2.948,1105,3.224,1110,5.01,1267,2.276,1278,3.499,1326,3.021,1336,3.191,1359,3.41,1393,2.763,1461,4.509,1463,4.705,1464,4.705,1466,3.928,1467,3.928,1468,4.705,1471,3.715,1484,7.664,1516,5.946,1518,4.112,1519,4.223,1520,4.705,1521,4.353,1555,4.015,1571,4.509,1589,4.015,1601,4.015,1603,10.73,1604,3.779,1611,7.073,1634,3.599,1677,4.509,1737,3.928,1740,4.966,1756,4.509,1836,4.223,1837,4.549,1851,3.85,1857,3.453,1876,3.33,1884,4.705,1895,4.015,2028,4.112,2053,4.966,2828,4.353,2832,4.353,2862,7.664,2876,4.966,2877,5.364,2878,5.364,2879,5.364,2880,5.364,2881,9.116,2882,5.364,2883,5.364,2884,5.364,2885,4.705,2886,5.364,2887,9.116,2888,5.364,2889,5.364,2890,5.364,2891,5.364,2892,9.116,2893,5.364,2894,5.364,2895,5.364,2896,5.364,2897,4.966,2898,4.223,2899,5.364,2900,5.364,2901,4.966,2902,5.364,2903,5.364,2904,5.364,2905,5.364,2906,4.705,2907,5.364,2908,5.364,2909,5.364]],["keywords/281",[]],["title/282",[216,481.298,599,493.984,1815,767.708]],["content/282",[]],["keywords/282",[]],["title/283",[2042,532.102]],["content/283",[279,7.106,296,8.496,340,4.809,526,6.132,599,9.329,602,11.057,603,10.023,863,14.29]],["keywords/283",[]],["title/284",[196,443.265,216,481.298,2576,877.073]],["content/284",[1,2.87,15,4.465,22,1.744,30,4.072,43,4.711,89,2.744,113,2.998,127,3.108,168,2.571,196,9.21,216,10,222,2.021,223,2.789,266,6.067,270,6.497,290,5.474,324,8.792,354,5.125,355,5.344,422,3.92,485,5.548,518,6.976,553,8.973,599,10.263,626,5.907,627,3.24,652,4.237,679,5.907,705,8.545,721,6.278,814,8.095,871,6.434,896,8.403,900,7.998,945,10.706,1007,6.649,1021,6.001,1026,6.742,1030,12.878,1042,5.123,1723,8.677,1832,6.945,2576,13.753,2777,10.335,2785,10.335,2786,10.335,2813,18.218,2910,11.791,2911,12.734,2912,11.791,2913,11.791,2914,12.734,2915,12.734]],["keywords/284",[]],["title/285",[196,443.265,225,551.126,251,341.318]],["content/285",[1,5.242,2,1.651,9,10.21,15,3.948,24,4.108,89,3.418,127,3.871,188,10.346,196,9.572,216,6.672,217,10.876,222,2.517,223,3.474,225,10.035,228,5.785,237,6.879,245,13.334,251,4.732,257,13.334,258,3.165,261,5.89,283,7.817,284,4.768,372,4.895,385,5.201,490,4.425,594,7.072,599,6.848,602,8.116,603,7.358,804,6.535,814,10.083,861,11.385,1621,9.632,2271,11.385,2813,13.912,2916,15.861,2917,15.861]],["keywords/285",[]],["title/286",[1,220.355,2,101.77,195,133.976,307,329.201]],["content/286",[1,5.225,2,2.564,8,5.696,18,3.521,22,2.016,49,4.053,66,3.478,76,12.785,132,12.785,195,3.376,222,2.5,223,3.45,224,1.79,277,4.372,279,5.181,281,3.631,307,7.805,404,5.367,413,9.572,494,8.169,495,5.811,552,8.114,576,12.077,640,15.523,658,6.313,660,7.385,733,11.1,804,10.153,2421,12.785,2918,13.244,2919,15.753]],["keywords/286",[]],["title/287",[61,341.406,1150,340.348,2100,465.863,2920,646.731]],["content/287",[]],["keywords/287",[]],["title/288",[2042,532.102]],["content/288",[2,2.081,8,4.299,11,3.239,13,2.63,22,1.661,25,3.374,66,4.415,106,4.327,116,6.938,186,3.699,195,1.629,206,4.919,225,5.727,228,3.301,270,3.719,279,3.91,297,5.023,319,8.101,321,5.695,327,7.653,335,4.506,340,2.646,343,4.415,352,3.432,354,4.215,355,3.059,374,4.4,385,3.899,422,3.659,427,4.313,437,6.084,447,4.71,485,8.712,513,9.275,526,7.454,542,6.386,552,6.124,564,7.862,575,2.852,627,5.088,639,7.298,647,4.43,711,7.862,847,4.461,864,4.299,873,5.603,874,8.101,902,7.511,921,5.088,1050,7.157,1150,5.946,1175,7.145,1189,4.728,1488,6.386,1598,10.267,1634,7.977,1971,8.898,2020,5.179,2100,8.139,2161,9.114,2162,9.361,2462,7.467,2920,11.298,2921,11.008,2922,11.008,2923,11.008]],["keywords/288",[]],["title/289",[286,1163.024]],["content/289",[2,2.574,3,3.558,8,5.139,16,2.054,22,1.382,43,3.732,61,6.759,66,3.138,127,3.469,128,8.824,145,6.628,178,9.685,195,3.388,222,3.072,223,4.24,224,2.199,277,4.081,279,4.674,287,6.083,302,10.638,307,7.411,335,3.203,352,4.103,404,4.842,413,8.934,542,7.635,605,7.007,661,7.472,667,9.685,804,5.857,871,7.181,1150,4.947,1367,11.535,1516,9.271,1549,9.843,1643,6.734,2100,10.488,2243,11.191,2421,11.535,2920,14.56,2924,14.213,2925,13.16]],["keywords/289",[]],["title/290",[222,218.697,2920,911.566]],["content/290",[2,2.068,3,3.881,7,3.371,11,3.567,13,1.847,15,2.078,16,1.206,18,2.926,19,1.924,22,1.932,25,2.369,30,2.669,49,4.707,66,3.567,68,4.021,69,2.329,87,3.468,102,4.517,106,4.766,113,5.189,127,2.037,130,5.894,136,3.222,162,3.454,179,4.358,185,2.914,195,1.144,206,3.454,222,3.884,223,2.867,229,3.497,244,3.833,248,7.017,251,2.49,261,4.863,270,2.611,277,2.76,279,2.745,281,1.924,282,2.49,290,5.628,291,2.291,295,4.358,329,3.246,335,4.751,352,4.664,354,2.059,359,9.063,408,3.557,416,4.328,422,2.569,423,4.827,427,3.028,435,4.244,443,4.871,445,2.556,447,3.307,448,2.905,465,2.769,467,3.385,490,3.653,511,3.999,513,5.555,526,4.584,530,4.871,533,5.982,557,3.67,579,3.795,627,3.331,644,3.332,645,6.775,660,3.913,677,3.722,678,5.124,679,3.872,693,3.422,704,3.295,808,3.557,810,3.758,829,3.758,995,4.966,1020,4.588,1021,3.934,1033,5.243,1110,4.588,1113,4.165,1121,3.977,1133,4.704,1150,2.905,1187,5.306,1212,4.552,1443,3.704,1811,6.113,1896,6.775,1984,5.601,2042,2.563,2098,6.572,2100,3.977,2130,5.688,2435,7.017,2920,15.096,2921,7.729,2926,8.347,2927,7.729,2928,8.347]],["keywords/290",[]],["title/291",[223,301.858,2100,656.634]],["content/291",[2,1.673,3,3.873,7,3.347,11,6.204,16,1.881,18,2.91,22,1.563,30,4.163,49,4.688,69,3.633,113,4.289,147,4.452,168,3.998,195,2.88,222,2.551,223,4.815,231,3.309,238,4.591,244,3.806,251,3.884,258,1.654,261,4.835,266,3.948,270,2.592,277,3.39,281,1.91,282,2.476,291,2.274,295,6.797,325,3.97,340,1.845,348,4.419,352,4.642,359,9.788,360,8.163,365,5.481,367,3.143,385,2.718,391,5.088,404,2.824,408,3.532,413,3.825,417,4.668,457,3.713,465,2.749,467,3.361,490,2.312,511,3.97,530,7.598,533,8.325,542,4.452,647,3.088,677,3.695,693,4.203,698,4.298,721,4.086,728,7.272,736,4.388,810,7.239,816,4.591,842,2.824,864,2.997,919,5.647,957,4.981,1014,3.457,1021,3.906,1022,4.591,1033,5.205,1066,12.438,1104,6.967,1110,4.555,1113,4.135,1187,5.268,1443,3.678,1643,3.927,1811,6.069,1912,6.726,1915,5.949,1919,7.269,1984,10.79,2042,2.544,2088,6.967,2100,11.157,2130,5.647,2265,6.069,2432,7.269,2433,7.269,2920,8.611,2929,7.674,2930,7.674,2931,7.674,2932,7.674]],["keywords/291",[]],["title/292",[533,629.721,832,1085.254]],["content/292",[2,2.358,43,4.747,66,3.992,70,7.274,78,9.86,86,8.302,168,3.65,195,3.391,268,9.223,281,4.168,287,7.738,290,7.772,291,4.961,335,4.074,518,7.031,520,10.757,666,8.179,771,7.772,804,7.45,901,8.709,1105,10.866,1396,11.639,2100,8.613,2920,11.957]],["keywords/292",[]],["title/293",[3,158.044,396,406.257,619,541.745,719,537.447]],["content/293",[]],["keywords/293",[]],["title/294",[286,1163.024]],["content/294",[2,2.093,22,1.955,43,5.281,71,8.723,284,6.047,287,8.608,494,10.429,569,12.544,619,11.142,632,9.011,666,9.098,1022,11.142,1481,10.648,1627,15.836,2208,12.785]],["keywords/294",[]],["title/295",[226,220.355,445,299.424,601,453.632,604,503.706]],["content/295",[2,1.62,3,3.004,8,2.288,13,1.4,22,1.018,25,5.274,49,2.694,66,2.312,69,1.765,70,2.545,71,8.533,79,1.708,113,2.465,147,3.398,162,2.618,168,2.704,180,3.065,181,2.65,186,1.968,192,3.138,195,1.835,222,1.004,226,1.426,229,2.65,241,2.628,268,2.358,277,1.334,279,2.081,281,3.589,290,2.72,320,3.138,340,2.331,343,2.35,357,4.908,358,3.625,372,1.953,379,4.245,385,2.075,387,3.065,394,2.834,396,2.628,408,4.462,417,3.563,430,3.563,435,3.217,439,3.349,445,1.937,465,2.099,489,2.981,495,2.334,500,5.319,522,4.022,548,5.319,569,5.429,579,2.876,598,3.973,599,4.521,601,2.935,604,3.259,627,1.61,632,8.326,641,2.769,666,2.862,676,3.101,677,2.821,679,2.935,719,5.754,721,3.119,749,5.193,779,3.842,792,2.607,812,2.834,863,6.924,871,5.29,897,2.391,925,2.89,926,3.281,929,5.358,930,3.374,998,3.802,1023,3.146,1025,3.973,1026,3.349,1028,4.633,1033,3.973,1042,4.212,1050,2.65,1074,3.157,1085,4.458,1150,3.644,1381,4.981,1481,3.349,1537,10.546,1643,2.998,1795,3.727,1809,6.576,1837,3.157,1859,3.534,1930,3.973,2020,4.561,2029,4.381,2084,5.549,2120,4.127,2208,9.897,2220,4.458,2226,8.244,2229,4.245,2383,12.402,2687,5.135,2702,5.549,2933,8.858,2934,10.47,2935,6.326,2936,6.326,2937,6.326,2938,10.47,2939,6.326,2940,6.326,2941,10.47,2942,6.326,2943,6.326,2944,6.326,2945,6.326,2946,6.326,2947,6.326,2948,10.47,2949,6.326,2950,6.326,2951,6.326,2952,6.326,2953,6.326,2954,5.858,2955,5.858,2956,5.858,2957,22.558,2958,6.326,2959,5.549,2960,8.497,2961,6.326,2962,6.326,2963,8.244,2964,6.326,2965,6.326,2966,6.326,2967,5.549,2968,4.184,2969,6.326,2970,4.458,2971,6.326,2972,19.674,2973,19.674,2974,19.674,2975,10.47,2976,6.326,2977,5.858,2978,10.47,2979,6.326,2980,6.326,2981,10.47,2982,6.326,2983,5.858,2984,6.326,2985,5.858,2986,4.85,2987,6.326,2988,6.326,2989,6.326,2990,6.326,2991,6.326,2992,6.326]],["keywords/295",[]],["title/296",[73,476.77,268,513.649]],["content/296",[2,1.124,3,2.575,6,2.179,11,2.607,12,7.167,13,3.895,15,6.442,16,0.682,18,1.826,19,4.269,20,2.186,22,1.252,24,3.563,25,3.376,42,1.213,49,1.215,52,1.038,66,2.627,69,3.319,70,1.899,71,8.21,79,5.213,83,1.407,89,1.416,103,1.105,106,0.932,113,3.893,127,1.604,128,1.589,160,1.2,180,5.233,181,2.753,185,0.894,186,1.469,195,0.647,198,1.169,202,1.773,207,2.812,209,1.538,217,1.336,219,1.158,220,1.086,221,2.37,223,1.79,224,0.536,226,1.064,227,0.823,228,2.269,235,1.319,241,1.063,254,1.277,261,3.554,268,6.561,277,3.486,281,2.206,282,0.898,283,1.772,291,0.702,295,1.336,299,1.804,303,1.096,312,5.51,340,1.051,345,1.11,357,4.486,361,1.523,364,3.701,372,0.79,374,1.747,375,1.407,376,2.077,377,1.31,383,1.407,385,1.548,394,5.33,396,4.488,397,0.541,404,0.872,408,1.091,422,3.325,426,5.833,434,1.285,438,1.589,445,0.784,448,0.891,457,2.944,465,0.849,466,1.538,469,0.944,485,1.115,489,1.206,490,0.714,495,1.742,500,8.045,512,2.555,527,3.407,533,1.169,544,6.589,547,4.209,551,2.664,556,1.115,569,4.237,596,1.627,599,4.132,606,1.494,607,3.643,610,5.812,613,1.875,614,4.177,619,5.302,620,2.898,625,3.53,631,4.862,632,5.768,633,1.718,641,1.12,657,1.804,658,1.026,659,1.718,660,2.213,666,6.582,677,4.267,679,2.19,699,1.804,704,1.01,709,1.744,717,1.277,719,5.937,721,1.262,728,2.637,743,6.427,746,6.222,752,1.003,792,3.367,805,1.804,808,2.012,812,1.147,841,1.355,846,6.202,858,1.442,860,1.385,871,1.293,906,1.147,909,1.43,915,3.08,925,1.169,942,3.969,943,4.63,959,1.608,1018,4.477,1022,1.418,1025,1.608,1033,1.608,1038,1.627,1039,1.804,1042,1.899,1049,3.13,1050,1.072,1085,1.804,1113,1.277,1150,1.643,1175,4.911,1258,4.918,1267,1.086,1291,2.077,1308,4.23,1359,7.563,1364,3.039,1366,1.916,1370,4.141,1393,3.385,1453,1.396,1471,6.627,1478,4.141,1481,8.435,1484,6.869,1537,13.862,1541,2.37,1569,3.27,1610,1.916,1614,2.595,1623,1.589,1633,1.523,1634,3.168,1643,1.213,1708,1.247,1716,1.51,1723,3.217,1775,1.375,1795,1.508,1820,4.551,1837,4.077,1839,1.962,1857,1.648,1859,5.345,1876,2.931,1923,1.648,1942,1.837,1983,3.122,1985,1.804,2029,4.551,2067,3.168,2074,3.534,2086,2.755,2109,2.015,2217,2.077,2220,3.327,2229,1.718,2234,1.962,2238,2.077,2262,1.773,2307,1.962,2456,3.389,2502,2.152,2545,1.773,2594,1.693,2687,2.077,2885,2.245,2901,2.37,2906,2.245,2933,5.404,2954,7.566,2955,2.37,2956,2.37,2968,6.329,2970,1.804,2993,12.875,2994,8.171,2995,9.57,2996,4.721,2997,4.721,2998,4.721,2999,2.37,3000,2.56,3001,4.721,3002,2.152,3003,2.245,3004,2.37,3005,2.56,3006,2.37,3007,2.56,3008,2.56,3009,1.773,3010,4.371,3011,9.57,3012,4.721,3013,9.57,3014,4.721,3015,4.721,3016,4.721,3017,3.832,3018,4.371,3019,4.371,3020,4.721,3021,2.37,3022,2.37,3023,4.721,3024,2.56,3025,2.56,3026,2.56,3027,2.56,3028,2.56,3029,2.56,3030,2.37]],["keywords/296",[]],["title/297",[445,422.038,1170,1085.254]],["content/297",[3,3.223,73,6.897,268,7.431,284,5.995,340,4.438,396,8.284,397,4.212,619,11.047,719,10.959,804,8.216,861,14.313,906,8.933,1481,10.557,2419,16.958,2420,17.49,2626,18.463]],["keywords/297",[]],["title/298",[831,554.256,1988,487.519,2100,545.038]],["content/298",[]],["keywords/298",[]],["title/299",[2042,532.102]],["content/299",[2,2.093,8,4.343,11,3.273,13,3.807,22,1.673,25,3.409,62,8.321,66,2.652,115,4.476,116,7.01,186,3.737,195,1.646,206,4.969,225,5.786,228,3.335,244,5.515,270,3.757,279,3.95,281,2.769,297,5.074,319,8.184,327,7.732,335,2.707,340,3.831,343,4.461,352,4.969,354,4.246,355,3.09,427,4.357,437,6.146,485,8.762,526,6.865,542,6.452,552,6.187,564,7.944,575,4.825,627,6.155,639,7.374,644,4.795,647,4.476,651,4.851,675,7.635,711,7.944,749,5.957,831,5.819,847,4.507,864,4.343,873,5.66,874,8.184,902,5.281,921,5.141,1050,7.21,1133,4.315,1142,4.193,1175,7.219,1189,4.777,1488,6.452,1598,7.219,1634,8.06,1971,8.99,2027,8.695,2095,8.318,2100,8.199,2161,9.208,2162,9.457,2462,7.544,2923,11.121,3031,10.098]],["keywords/299",[]],["title/300",[286,1163.024]],["content/300",[2,2.59,3,2.34,8,5.235,16,2.092,22,1.408,43,3.802,61,5.055,62,5.99,66,3.197,127,3.534,128,8.988,145,6.751,178,9.865,195,3.595,222,3.11,223,4.293,224,2.227,277,4.133,279,4.762,287,6.197,302,10.837,307,7.482,352,4.18,404,4.933,413,9.047,542,7.777,605,7.138,661,7.611,667,9.865,804,5.966,831,9.497,871,7.315,1367,11.751,1516,9.444,1549,10.027,1643,6.86,1988,6.17,2100,10.588,2421,11.751,2925,13.406,3032,14.478]],["keywords/300",[]],["title/301",[222,218.697,831,667.74]],["content/301",[1,1.822,2,1.871,3,2.558,11,3.479,13,3.501,14,2.806,15,2.013,16,1.168,18,3.537,19,1.864,20,2.69,22,1.903,24,2.095,25,2.295,49,2.08,62,8.606,66,2.819,68,3.895,69,2.256,79,2.183,87,3.359,89,1.743,102,4.376,103,3.491,106,5.76,113,4.607,120,3.623,130,8.81,136,3.121,160,3.79,179,4.222,185,2.823,195,2.168,206,3.345,207,3.461,222,3.973,223,2.797,224,0.919,226,1.822,228,2.245,230,2.738,248,6.798,261,4.742,270,3.994,277,1.705,279,2.659,281,2.944,282,2.429,290,5.489,291,2.219,295,4.222,329,3.144,340,1.8,352,4.569,354,1.995,359,8.413,360,3.623,385,2.652,404,2.755,408,3.446,416,4.193,422,2.489,443,4.719,445,2.476,465,4.236,467,3.279,490,4.415,494,6.622,511,3.873,526,2.295,530,4.719,533,3.694,557,3.555,625,4.344,627,4.026,644,3.228,645,6.563,660,3.79,671,6.052,677,3.605,678,4.964,679,3.751,693,3.338,704,3.191,717,6.371,728,4.516,731,3.345,771,3.476,810,3.64,831,11.758,1020,4.444,1021,3.811,1033,5.079,1110,4.444,1113,4.035,1133,2.905,1142,2.823,1230,4.193,1281,5.348,1811,5.922,1896,6.563,1988,3.446,2027,7.995,2100,3.852,2122,3.986,2130,5.51,2132,4.222,2435,6.798,2487,5.698,2631,7.487,3033,8.086,3034,4.86]],["keywords/301",[]],["title/302",[223,301.858,2100,656.634]],["content/302",[2,1.713,3,3.726,7,3.471,11,6.281,16,1.935,18,2.994,22,1.302,30,4.283,69,3.737,102,4.651,113,4.375,147,4.616,168,3.752,195,2.924,222,2.612,223,4.881,231,3.431,238,4.761,244,3.946,251,3.996,258,1.715,261,4.975,266,4.094,270,2.688,277,2.824,281,1.981,282,2.547,291,2.358,295,6.993,325,4.117,340,1.913,348,4.583,352,4.752,359,9.909,360,8.326,365,5.684,367,3.259,385,2.818,391,5.276,404,2.928,408,3.662,413,3.966,417,4.84,457,3.85,465,2.851,467,3.485,488,5.856,490,2.398,511,4.117,530,7.817,533,8.491,542,4.616,647,3.203,677,3.832,693,4.302,698,4.456,721,4.237,728,7.481,736,4.55,810,6.03,816,4.761,831,4.163,842,2.928,864,3.108,919,5.856,957,5.165,1014,3.585,1021,4.05,1022,4.761,1033,5.398,1066,12.653,1104,7.225,1110,4.723,1113,4.288,1187,5.463,1443,3.814,1643,4.072,1811,6.294,1912,6.975,1915,6.169,1919,7.538,1984,8.988,2042,2.638,2088,7.225,2100,11.283,2130,5.856,2265,6.294,2432,7.538,2433,7.538,2929,7.957,2930,7.957,2931,7.957,2932,7.957]],["keywords/302",[]],["title/303",[533,629.721,832,1085.254]],["content/303",[2,2.358,43,4.747,62,7.48,66,3.992,70,7.274,78,9.86,86,8.302,168,3.65,195,3.391,268,9.223,281,4.168,287,7.738,290,7.772,291,4.961,518,7.031,520,10.757,666,8.179,771,7.772,804,7.45,831,8.759,901,8.709,1105,10.866,1396,11.639,2100,8.613]],["keywords/303",[]],["title/304",[11,375.556,285,887.311]],["content/304",[]],["keywords/304",[]],["title/305",[286,1163.024]],["content/305",[1,3.304,2,2.057,3,3.869,15,4.921,43,3.85,59,6.476,97,6.537,106,5.336,162,6.066,195,3.425,216,8.317,218,9.001,219,6.632,222,2.326,223,4.33,231,7.893,244,6.732,251,6.673,255,11.23,263,4.501,268,5.464,277,3.091,287,6.275,312,6.275,313,10.737,315,16.62,333,9.563,340,3.263,352,4.233,380,8.811,392,12.417,481,12.137,509,8.638,659,9.838,672,9.563,759,11.544,901,7.062,1211,8.638,3035,12.86,3036,14.661,3037,14.661]],["keywords/305",[]],["title/306",[11,311.729,285,736.511,1626,792.33]],["content/306",[3,3.142,11,3.896,13,3.164,16,2.066,19,3.296,49,3.679,64,6.634,65,6.501,69,3.99,179,7.466,195,2.663,198,6.533,206,5.917,250,7.987,251,7.627,255,11.042,275,8.779,277,3.015,282,3.697,312,6.12,332,8.982,333,9.328,341,14.236,345,8.431,368,5.205,408,6.094,421,7.922,422,4.402,435,7.271,465,6.449,469,5.275,515,7.318,516,7.987,658,7.791,748,7.682,804,5.893,836,8.595,1038,9.091,1550,10.265,1593,9.744,1626,13.463,1643,6.776,1915,10.265,1967,12.022,3038,12.543,3039,19.439,3040,14.3,3041,14.3]],["keywords/306",[]],["title/307",[3,184.904,66,252.595,237,496.196]],["content/307",[2,1.285,3,3.901,11,4.412,13,3.582,15,5.536,16,0.816,18,2.129,19,4.524,20,3.17,24,1.464,30,3.046,52,3.863,64,4.419,65,4.331,66,4.124,69,3.446,73,3.295,113,2.242,127,1.379,136,3.678,168,2.494,181,2.367,185,1.973,195,1.305,216,2.377,220,2.397,222,3.241,223,4.091,224,1.647,231,2.256,237,7.022,251,5.238,255,5.411,258,2.894,264,12.719,270,2.98,277,2.604,281,1.302,282,2.758,283,3.575,285,3.637,291,4.443,297,4.025,298,2.873,303,5.286,312,2.418,316,2.213,321,2.707,329,3.705,330,1.908,340,2.749,341,4.138,347,2.036,351,3.267,352,3.566,354,2.351,355,2.451,356,3.21,359,2.429,360,2.531,367,2.143,368,3.468,370,2.531,374,3.526,377,2.891,397,3.063,399,3.308,400,2.397,401,6.514,410,5.726,413,2.608,414,3.791,415,5.117,416,2.93,424,3.21,426,4.228,428,2.091,445,1.73,458,2.496,464,1.416,519,5.236,546,2.23,596,3.592,599,4.113,602,4.875,610,3.432,615,3.508,622,4.94,651,3.848,689,2.677,707,5.001,808,2.408,813,3.13,820,4.75,838,4.095,842,4.94,847,4.635,849,2.113,875,1.577,925,4.352,926,2.93,938,3.362,982,3.549,1029,12.719,1038,3.592,1124,5.236,1146,10.619,1535,3.705,1545,4.586,1626,3.913,1695,4.75,2025,3.238,2100,7.714,2800,11.769,3042,9.527,3043,9.527,3044,9.527,3045,13.427,3046,16.256,3047,14.501,3048,8.821,3049,8.821,3050,8.356,3051,8.009,3052,12.351]],["keywords/307",[]],["title/308",[69,319.22,70,460.294,465,379.544]],["content/308",[1,2.512,2,1.16,3,1.802,11,4.443,22,1.084,25,3.164,31,2.881,49,2.868,69,5.919,70,7.756,89,2.402,119,6.446,136,4.303,161,4.335,168,2.251,223,5.578,224,1.266,226,3.674,237,4.835,241,4.631,250,9.107,251,3.326,270,3.487,281,2.57,316,4.367,330,3.764,335,2.512,347,5.877,354,2.75,355,2.868,359,4.792,367,7.31,368,5.935,372,3.441,385,6.322,398,12.204,399,4.333,400,4.73,401,4.485,402,8.546,426,3.251,465,8.889,530,6.506,551,4.52,599,4.813,644,4.45,660,5.226,709,7.596,817,8.344,818,5.253,833,6.176,921,10.091,926,5.781,976,7.009,982,7.001,1022,6.176,1626,7.72,1678,9.047,1679,5.119,1837,5.562,3053,6.921,3054,9.372,3055,10.322,3056,11.148,3057,11.148]],["keywords/308",[]],["title/309",[19,225.419,195,133.976,251,291.737,1967,822.099]],["content/309",[1,1.135,2,0.899,3,2.447,11,5.676,13,1.912,15,5.558,18,3.007,19,5.4,20,4.476,22,0.49,25,1.43,30,2.763,42,2.387,52,4.601,66,1.908,69,3.753,108,2.484,115,3.22,127,2.109,161,4.412,162,3.575,168,2.716,174,4.909,185,1.759,188,3.286,195,2.263,216,2.12,218,3.093,222,0.799,223,4.685,224,1.876,231,4.53,237,5.834,246,2.814,251,6.53,255,6.445,258,1.725,261,5.622,264,11.799,270,2.703,277,1.822,281,1.992,282,1.644,283,5.048,285,3.243,290,3.715,291,2.371,297,3.651,298,2.562,312,2.156,324,4.235,329,3.36,335,1.135,340,1.121,341,3.69,347,1.816,348,2.687,351,2.913,352,2.495,353,8.259,354,2.132,355,2.223,356,4.909,359,2.166,360,3.872,363,2.595,367,1.91,368,3.145,370,2.257,374,4.2,385,2.834,386,2.484,397,1.826,398,3.771,399,2.318,400,3.667,401,6.645,402,6.625,404,3.866,408,2.147,414,3.381,416,2.613,424,2.862,426,5.152,428,1.865,437,4.422,440,1.952,442,3.771,445,1.543,448,1.754,464,2.843,465,5.022,489,5.347,503,3.164,504,2.529,515,2.578,518,3.36,519,2.769,542,2.706,546,1.989,599,2.175,602,4.422,615,3.128,644,2.011,676,2.469,681,7.023,707,2.98,730,3.06,741,2.748,797,4.236,816,4.787,820,4.236,835,4.117,842,2.944,849,1.884,901,2.427,910,3.55,921,2.156,925,2.302,926,2.613,930,2.687,980,3.862,1029,11.799,1044,4.909,1063,4.677,1090,7.305,1121,2.4,1124,4.75,1146,6.329,1211,2.968,1302,3.433,1309,3.164,1326,6.391,1366,3.771,1455,3.028,1551,3.381,1616,2.968,1626,3.489,1716,3.628,1916,2.595,1964,3.55,1967,4.236,2025,2.887,2035,4.419,2100,6.409,2109,3.967,2777,4.089,2800,7.014,3045,8.002,3046,15.294,3048,8.002,3049,8.002,3050,7.58,3051,7.265,3058,4.236,3059,5.038,3060,8.642,3061,8.642]],["keywords/309",[]],["title/310",[435,700.782,465,457.256]],["content/310",[3,2.877,11,4.851,18,3.979,25,5.052,69,4.967,115,6.635,161,6.923,168,3.594,223,4.915,224,2.022,251,5.311,297,7.521,323,11.052,335,4.012,374,6.589,416,9.232,422,5.48,435,11.409,440,8.694,465,5.906,679,8.259,730,10.812,835,8.481,837,11.052,938,10.592,1218,12.78,1626,12.33,1708,8.674]],["keywords/310",[]],["title/311",[22,95.072,195,133.976,619,541.745,666,442.372]],["content/311",[]],["keywords/311",[]],["title/312",[286,1163.024]],["content/312",[2,2.04,22,1.906,43,5.147,208,8.111,284,5.894,287,8.39,569,12.351,619,10.86,652,6.522,666,8.868,717,9.782,959,12.312,1022,10.86,1481,10.379,1627,15.435,1917,13.358,2050,13.814,2208,12.462]],["keywords/312",[]],["title/313",[226,220.355,445,299.424,601,453.632,604,503.706]],["content/313",[2,1.087,3,3.176,8,2.281,15,6.023,20,2.099,22,1.674,25,1.79,36,2.427,70,4.203,71,2.736,79,3.609,106,3.802,147,3.389,158,4.621,160,2.958,162,2.61,186,1.963,192,3.129,195,1.431,198,2.883,208,2.61,215,4.173,226,1.422,229,2.643,249,5.534,261,2.343,265,3.682,268,5.792,279,2.075,281,1.454,290,2.712,297,2.666,298,3.208,313,4.621,327,4.062,340,2.325,343,2.343,345,2.736,367,2.392,408,2.689,439,3.34,444,4.621,445,1.932,465,4.435,477,4.837,495,3.854,509,3.717,518,2.453,550,2.958,569,3.272,598,3.963,599,2.724,601,2.927,604,3.25,627,1.605,631,3.754,639,3.873,641,2.761,666,4.726,689,1.773,717,3.148,749,3.129,779,3.832,804,2.6,812,2.827,818,2.973,863,6.909,875,1.76,876,4.062,897,2.384,925,6.108,930,3.364,959,6.561,983,4.621,984,5.304,1020,3.468,1023,3.651,1024,4.062,1026,3.34,1028,4.621,1042,4.203,1074,3.148,1085,4.446,1137,4.968,1267,2.677,1273,3.873,1363,3.648,1379,5.534,1381,4.968,1481,5.531,1488,3.389,1837,3.148,1904,4.621,1916,3.25,1983,4.173,1985,4.446,2050,9.42,2055,3.792,2056,10.006,2058,10.249,2074,4.722,2109,4.968,2167,5.304,2208,9.88,2226,4.968,2229,4.234,2284,5.534,2291,5.121,2307,4.837,2380,5.534,2389,8.009,2502,5.304,2618,5.534,2687,8.478,2688,5.842,2689,5.534,2690,5.842,2691,5.842,2692,5.842,2693,5.842,2694,5.842,2695,5.534,2696,5.842,2697,9.163,2698,5.842,2699,5.842,2700,5.842,2701,5.534,2702,5.534,2703,5.842,2704,5.842,2705,5.842,2706,5.842,2707,12.378,2708,10.85,2709,12.378,2710,12.378,2711,5.842,2712,9.673,2713,5.842,2714,9.673,2715,9.163,2716,12.378,2717,5.842,2718,5.842,2719,5.842,2720,5.842,2721,5.842,2722,5.842,2723,5.842,2724,5.842,2725,5.842,2726,5.842,2727,5.842,2728,5.842,2729,5.842,2730,5.842,2731,5.842,2732,5.842,2733,5.842,2734,5.842,2735,5.842,2736,5.842,2737,9.673,2738,5.842,2739,5.304,2740,5.842,2741,5.842,2742,5.842,2743,5.842,2744,5.842,2745,5.842,2746,5.842,2747,5.842,2748,5.842,2749,5.842,2750,5.842,2751,5.842,2752,5.842,2753,5.842,2754,5.842,2755,5.842,2756,5.842,2757,5.842,2758,5.534,2759,5.842,2760,5.842,2761,5.842,3062,5.842,3063,5.534,3064,6.344,3065,5.121,3066,6.309,3067,6.309,3068,5.842]],["keywords/313",[]],["title/314",[73,476.77,268,513.649]],["content/314",[2,1.806,3,3.738,6,2.952,11,5.839,13,4.374,16,1.527,18,3.017,19,4.765,20,3.515,22,1.312,24,5.121,25,1.815,52,2.594,66,2.333,73,3.655,79,5.784,83,3.515,87,4.389,89,2.277,106,2.328,113,3.689,127,2.579,136,2.469,137,5.594,160,2.998,181,2.679,186,1.99,194,4.172,195,0.876,223,1.401,226,2.381,228,2.934,229,4.426,235,5.442,254,6.735,258,1.276,263,3.244,266,3.047,268,6.466,277,3.658,281,1.474,282,2.567,283,2.4,289,2.937,312,7.426,334,2.636,340,1.424,343,2.375,357,2.998,374,2.367,379,4.292,385,3.465,397,1.351,404,2.179,426,5.06,438,3.971,445,1.958,448,3.677,457,2.866,465,2.122,495,3.897,504,3.211,533,4.827,544,3.273,575,1.535,596,4.066,607,2.852,610,8.198,614,4.066,619,10.351,620,6.486,625,3.436,658,4.234,660,6.327,666,7.849,676,3.135,679,4.901,680,7.445,717,5.272,728,3.572,805,4.507,846,3.081,915,4.172,926,3.317,938,3.805,974,3.665,994,5.61,996,4.507,999,9.783,1000,9.783,1023,3.171,1038,4.066,1043,3.733,1074,3.191,1088,4.172,1113,3.191,1267,2.714,1359,8.581,1369,5.191,1481,5.594,1552,4.118,1610,4.787,1623,6.559,1633,3.805,1643,5.006,1708,3.116,1723,4.358,1736,4.684,1737,4.684,1875,2.153,1983,6.987,2056,7.908,2058,10.348,2067,4.292,2071,13.748,2220,7.445,2239,5.377,2285,5.922,2307,4.903,2419,4.507,2768,8.575,2776,5.922,3064,3.884,3069,9.267,3070,9.783,3071,9.783,3072,10.565,3073,6.396,3074,6.396,3075,6.396]],["keywords/314",[]],["title/315",[614,876.205,666,623.523]],["content/315",[3,1.81,6,3.17,11,1.871,15,7.03,19,2.582,22,1.379,24,5.007,25,1.949,31,1.775,69,3.125,73,2.376,79,5.218,127,2.734,137,3.636,180,5.426,192,3.406,198,3.138,221,3.448,261,2.551,268,6.717,277,1.448,281,3.27,283,2.577,291,1.885,298,3.492,299,4.84,312,2.939,343,2.551,357,5.251,364,7.988,396,2.853,422,5.548,426,5.256,434,3.448,465,2.279,490,1.916,504,3.448,533,3.138,551,2.785,569,5.808,575,1.648,599,7.065,607,3.062,610,6.803,614,7.121,619,9.065,625,6.017,641,3.006,666,6.416,680,4.84,717,9.646,752,2.691,808,2.927,849,2.568,915,4.48,942,9.417,943,7.893,959,4.314,969,4.93,983,8.203,984,5.774,996,4.84,998,4.128,1049,3.272,1393,7.306,1471,9.823,1478,9.825,1481,5.93,1484,11.924,1614,6.156,1723,4.68,1733,6.359,1837,5.589,1875,2.312,1876,6.954,2067,4.609,2071,14.352,2208,4.366,2238,5.574,2262,4.757,2263,6.359,2291,5.574,2687,5.574,2695,6.024,2697,6.024,2715,6.024,2758,6.024,2768,9.091,2885,6.024,2906,6.024,3006,6.359,3017,5.574,3018,6.359,3019,6.359,3021,6.359,3022,6.359,3062,6.359,3064,6.803,3068,10.371,3069,12.441,3070,6.359,3071,10.371,3076,14.184,3077,6.868,3078,14.184,3079,6.868,3080,11.201,3081,6.868,3082,6.868,3083,6.868,3084,6.868,3085,6.868,3086,6.868,3087,6.868,3088,5.774]],["keywords/315",[]],["title/316",[749,859.577]],["content/316",[2,1.311,3,2.877,11,3.432,15,3.135,22,2.007,36,4.845,43,3.308,69,3.515,94,8.453,113,2.965,162,5.212,181,5.277,227,4.05,261,8.792,266,6.001,268,8.822,277,3.753,281,4.104,287,5.391,296,4.953,312,5.391,327,8.109,354,3.108,394,5.643,427,4.57,494,6.532,511,6.034,599,9.689,610,10.812,619,6.978,641,5.513,666,5.698,689,3.54,717,6.285,749,6.247,752,4.935,906,5.643,909,7.036,959,7.911,1007,6.577,1025,11.181,1033,7.911,1042,5.068,1481,6.669,1916,6.488,2029,8.724,2050,8.876,2097,11.049,2240,7.571,2701,18.11,2768,10.223,2977,11.663,2983,11.663,2985,11.663,3069,11.049,3089,12.596,3090,20.647,3091,12.596,3092,12.596,3093,12.596,3094,12.596,3095,12.596,3096,12.596]],["keywords/316",[]],["title/317",[445,422.038,1170,1085.254]],["content/317",[3,3.428,73,7.338,87,8.813,195,2.906,268,7.905,284,6.378,619,11.752,717,10.585,804,8.741,1627,16.702]],["keywords/317",[]],["title/318",[756,1457.086]],["content/318",[]],["keywords/318",[]],["title/319",[61,298.102,156,581.805,1120,591.333,1150,297.179,3097,790.599]],["content/319",[2,2.339,3,3.04,8,3.178,11,3.714,13,3.694,15,3.392,19,2.026,22,1.623,25,2.494,30,2.81,61,3.068,67,4.187,80,6.738,89,3.598,97,3.919,115,7.01,156,5.989,162,5.639,189,6.578,191,5.178,195,2.577,198,6.227,209,8.192,214,6.493,218,5.395,270,2.749,283,5.114,293,4.909,304,5.658,312,3.761,320,4.359,332,5.52,345,3.812,348,4.687,360,3.937,368,4.961,387,6.603,388,6.92,389,4.653,429,5.456,432,3.937,464,2.202,468,8.192,495,5.028,545,5.897,546,3.469,556,3.829,564,9.014,570,9.014,579,3.995,597,5.036,632,3.937,638,10.613,639,8.367,666,3.976,671,6.578,682,3.495,689,5.287,696,5.658,719,4.83,721,6.719,722,5.733,756,7.389,788,5.229,789,7.709,791,5.178,792,3.621,829,6.136,849,3.287,956,5.082,1043,5.129,1068,6.92,1105,5.282,1120,6.087,1150,3.059,1291,7.133,1359,5.587,1365,6.738,1391,5.658,1623,5.456,1624,4.62,1643,4.164,1737,6.436,1930,5.52,1936,6.92,2020,3.829,2170,5.897,2187,7.133,2277,17.115,2317,6.087,2502,7.389,2918,7.389,3097,22.974,3098,8.789,3099,8.789,3100,8.789,3101,8.138,3102,6.087,3103,8.789,3104,8.789,3105,8.789,3106,8.138,3107,8.789,3108,8.138,3109,8.789,3110,8.789,3111,8.138,3112,8.789,3113,7.133]],["keywords/319",[]],["title/320",[766,1064.028]],["content/320",[0,14.033,2,2.538,3,2.83,11,1.772,16,0.94,17,4.364,22,1.041,25,3.875,43,1.708,49,3.514,54,3.694,59,6.994,61,4.768,62,2.691,63,4.763,64,6.335,65,2.956,67,3.098,83,3.574,89,3.773,93,4.583,103,5.896,106,3.899,108,3.206,115,3.992,157,5.278,163,2.164,166,3.869,181,2.724,182,5.704,185,2.271,186,2.023,188,4.242,189,4.868,191,3.832,192,3.225,195,1.871,196,4.15,206,2.691,214,3.098,216,7.924,217,7.13,219,2.942,222,1.032,223,1.424,225,3.133,235,3.35,262,2.808,263,1.997,268,2.424,272,3.328,273,7.084,281,1.499,283,2.44,287,2.783,289,2.986,294,4.085,307,2.189,313,7.844,326,9.42,340,1.448,345,4.646,358,9.073,367,4.062,368,2.367,373,4.668,392,8.577,408,2.771,411,3.443,422,2.002,443,3.795,467,2.637,469,2.399,490,3.81,491,4.085,495,5.038,515,3.328,517,5.121,518,2.529,552,3.35,556,2.833,557,6.004,562,4.301,570,4.301,575,2.57,603,3.017,605,3.206,607,4.776,613,7.844,616,3.482,628,5.121,648,5.467,650,4.134,682,2.586,689,4.92,690,4.134,722,6.987,727,4.763,732,5.278,766,13.237,770,4.763,780,4.668,784,4.504,792,2.68,796,4.868,797,5.467,814,4.134,959,4.085,1020,3.574,1050,2.724,1139,4.504,1255,4.986,1267,2.759,1269,4.986,1298,4.301,1311,8.434,1344,3.95,1365,4.986,1391,4.187,1443,2.886,1554,4.134,1558,5.467,1590,4.364,1624,3.419,1643,6.471,1669,5.704,1671,6.022,1885,4.134,1891,5.704,1922,8.434,2094,2.821,2630,4.301,2635,5.467,2777,5.278,2918,5.467,3114,6.503,3115,12.645,3116,9.918,3117,6.022,3118,6.503,3119,19.915,3120,6.503,3121,4.868,3122,4.668,3123,6.503,3124,4.037,3125,6.503,3126,5.467,3127,6.503,3128,4.868,3129,6.022,3130,6.503,3131,6.503,3132,6.503,3133,5.467]],["keywords/320",[]],["title/321",[165,1328.705]],["content/321",[2,2.613,3,3.46,22,1.105,25,5.83,43,1.836,49,1.799,54,3.972,59,6.343,61,5.013,64,3.244,65,6.528,66,3.17,69,3.171,73,3.931,83,6.246,89,2.449,93,4.927,145,3.26,146,8.518,162,2.893,163,2.326,165,16.966,178,4.764,186,2.175,195,3.032,196,2.709,206,6.842,214,3.331,216,9.31,217,8.634,222,1.109,223,3.145,226,1.576,241,2.905,262,3.019,268,4.235,277,1.474,283,5.388,288,3.626,307,6.562,332,7.138,335,3.236,345,4.929,358,4.007,360,3.133,374,2.588,385,3.727,392,4.392,394,5.092,401,2.813,405,4.043,408,4.843,411,3.702,421,3.874,443,6.633,481,4.293,495,5.297,527,5.894,538,4.445,540,3.387,552,5.854,556,3.046,561,4.501,562,4.624,594,3.118,597,4.007,605,3.447,611,4.624,616,1.783,628,5.505,661,3.676,666,8.23,671,5.233,682,2.781,689,3.194,722,4.561,775,5.505,776,6.133,778,11.008,780,5.019,791,6.696,957,4.202,993,3.784,1039,4.927,1077,5.121,1083,5.019,1113,3.489,1121,3.331,1311,8.949,1623,4.341,1643,3.313,1723,7.744,1840,8.158,1886,5.675,1904,8.323,1932,6.474,1936,5.505,1943,4.007,2237,5.878,2317,4.842,2439,5.505,2496,6.133,2558,6.474,3058,5.878,3115,6.474,3129,6.474,3134,6.992,3135,18.192,3136,6.474,3137,6.992,3138,5.36,3139,6.992,3140,9.224,3141,6.992,3142,6.992,3143,6.474,3144,6.992,3145,6.992,3146,6.474,3147,6.992]],["keywords/321",[]],["title/322",[148,928.526,3148,1059.327,3149,1059.327]],["content/322",[2,2.484,3,3.179,8,2.955,15,3.205,22,2.031,24,2.117,25,2.319,43,4.747,49,2.102,55,6.116,59,3.609,61,2.853,66,1.804,69,2.28,89,1.761,103,3.528,108,6.347,116,4.769,147,6.916,148,12.931,149,6.434,157,6.632,161,5.007,162,3.381,163,2.719,167,4.725,168,1.65,173,4.831,195,3.194,196,3.166,215,5.404,216,3.438,219,3.696,222,1.297,223,1.79,251,2.438,268,4.798,270,2.556,277,3.812,281,1.884,287,6.819,288,4.237,290,5.535,296,3.213,298,4.154,307,6.622,312,3.497,325,3.914,335,1.841,340,1.819,345,5.584,349,4.769,360,3.661,374,3.024,394,3.661,400,3.467,404,2.784,411,4.326,428,5.897,429,5.073,443,4.769,445,4.879,447,3.237,495,3.014,518,7.649,541,6.676,546,3.225,594,3.643,602,4.181,611,5.404,638,5.194,662,6.116,666,8.179,682,3.25,756,6.869,800,5.866,813,4.527,814,5.194,897,3.088,919,5.568,975,5.483,998,4.911,1187,5.194,1219,7.167,1450,6.434,1471,8.917,1482,7.566,1513,11.293,1723,5.568,1888,5.758,1901,11.922,1942,5.866,1964,5.758,2093,5.866,2095,8.917,2096,8.64,2110,6.869,2262,5.659,2608,4.682,2615,7.566,2806,6.434,3106,7.566,3121,6.116,3140,14.673,3148,14.753,3149,16.74,3150,11.922,3151,7.566,3152,5.866,3153,7.566,3154,8.171]],["keywords/322",[]],["title/323",[442,731.918,795,793.645,2196,822.099,3155,905.445]],["content/323",[1,1.779,2,2.591,3,3.327,8,2.854,11,2.151,16,2.251,22,1.724,25,3.555,43,3.29,49,3.223,54,7.117,55,5.908,57,4.607,59,3.487,61,2.756,69,2.203,73,2.731,83,4.339,89,1.701,103,3.408,106,2.873,108,3.892,139,5.753,145,3.681,146,4.066,147,8.367,162,3.266,163,2.626,167,4.564,186,3.898,188,5.149,189,5.908,195,3.067,206,3.266,216,6.553,220,3.349,222,2.472,223,3.884,224,1.77,232,7.53,255,4.484,258,1.575,262,3.408,266,3.761,277,4.078,283,2.962,287,3.378,299,5.562,304,5.082,307,5.244,316,3.092,319,5.379,326,4.697,345,3.424,354,1.948,358,4.524,368,2.873,369,4.15,401,3.176,404,2.689,411,4.179,413,8.927,422,2.43,428,2.922,445,2.417,495,2.912,518,3.07,551,3.201,556,3.439,574,3.589,575,3.006,596,5.018,602,4.04,613,5.781,638,11.274,650,5.018,659,8.407,666,3.571,681,4.121,682,3.139,704,3.116,712,4.339,773,12.265,792,5.162,795,16.708,799,6.407,871,3.988,938,4.697,965,6.636,1043,4.607,1106,5.666,1137,6.215,1219,6.924,1264,7.309,1365,6.052,1368,5.221,1437,6.407,1443,3.503,1450,6.215,1471,5.467,1538,5.082,1554,5.018,1643,3.74,1756,6.636,1795,4.651,1843,4.901,1922,6.215,2196,6.636,2262,5.467,2497,6.924,2607,7.53,2611,7.309,3133,6.636,3140,10.168,3155,14.423,3156,6.407,3157,7.894,3158,7.894,3159,7.894,3160,7.894,3161,7.894]],["keywords/323",[]],["title/324",[3162,1604.808]],["content/324",[2,2.381,4,5.472,8,3.711,15,3.817,22,1.981,25,2.912,43,2.695,69,2.863,79,2.77,83,8.43,87,4.263,89,3.958,139,4.712,145,4.785,147,12.739,155,6.054,161,3.991,162,4.246,163,3.414,178,6.993,188,6.694,192,5.09,195,3.249,221,5.152,223,2.247,237,4.451,272,5.251,283,3.851,290,4.411,293,5.732,296,4.035,312,4.392,348,5.472,358,5.881,360,4.598,367,3.891,370,4.598,387,4.972,396,4.263,413,4.736,441,8.08,469,3.786,489,4.836,541,5.322,542,12.291,546,4.05,557,4.512,578,5.513,601,4.761,602,5.251,603,4.761,607,6.839,638,6.524,666,9.866,792,4.229,802,8.627,810,4.62,849,3.838,897,3.878,1039,7.231,1043,5.989,1106,7.367,1196,5.881,1269,7.867,1591,8.08,1620,8.627,1625,8.08,1737,7.516,1843,6.371,1888,7.231,1930,6.445,1955,8.08,2093,7.367,2196,8.627,2201,8.329,2317,7.107,2419,7.231,2568,6.445,3162,21.958,3163,15.337,3164,10.262,3165,10.262,3166,9.502,3167,9.502,3168,10.262]],["keywords/324",[]],["title/325",[43,198.963,223,165.947,287,324.3,335,170.748,3169,567.146,3170,701.608]],["content/325",[2,2.54,19,2.842,22,1.199,30,3.942,43,6.592,80,9.452,147,6.623,171,10.815,172,6.534,186,3.836,195,3.045,218,7.569,219,5.578,220,5.231,222,1.956,223,4.469,287,10.744,291,3.383,298,6.269,307,4.151,335,5.657,345,5.347,385,4.043,392,7.744,400,5.231,428,4.563,445,3.775,516,6.886,531,8.273,539,8.688,541,6.393,552,6.351,616,3.144,627,3.137,658,4.941,676,6.043,689,3.465,766,7.569,769,10.007,796,9.228,816,6.83,875,3.44,897,6.626,1083,8.85,1443,5.472,1670,10.007,1737,9.029,1843,7.654,1942,8.85,1995,8.401,2620,11.416,2635,10.365,2807,10.365,3102,8.539,3169,9.228,3170,11.416,3171,12.329,3172,12.329,3173,10.365]],["keywords/325",[]],["title/326",[335,220.355,549,621.643,1670,793.645,2100,465.863]],["content/326",[2,2.533,3,3.534,4,4.357,11,2.226,13,2.848,19,1.884,22,1.758,25,2.319,42,6.1,43,2.146,49,3.313,55,6.116,59,5.687,61,2.853,62,3.381,66,1.804,79,2.206,80,6.264,115,3.045,146,4.209,163,2.719,168,3.217,173,6.784,175,4.456,195,3.104,196,4.988,198,3.733,222,2.043,223,4.308,241,5.349,244,3.752,277,3.359,290,5.535,291,2.242,298,6.546,307,6.622,312,3.497,329,3.177,332,5.132,334,3.367,335,4.708,340,2.866,343,3.035,345,5.584,358,7.378,385,2.68,387,3.959,400,3.467,411,6.817,413,3.771,420,5.984,421,4.527,428,5.897,432,3.661,443,4.769,445,4.879,495,3.014,509,4.814,518,3.177,527,4.237,541,4.237,542,8.559,549,5.194,556,5.609,579,5.853,605,4.028,650,8.185,671,6.116,682,6.336,761,4.564,775,6.434,776,7.167,813,4.527,836,4.911,897,6.02,901,6.202,919,5.568,920,4.296,960,5.483,974,4.682,1014,3.409,1269,6.264,1298,5.404,1355,4.862,1369,6.632,1443,3.626,1457,7.566,1471,8.917,1538,5.26,1554,5.194,1595,7.566,1670,12.931,1755,5.33,1840,5.866,1843,5.073,1964,5.758,2054,6.434,2100,6.134,2262,5.659,2271,5.866,2277,6.869,2607,4.911,3150,7.566,3166,7.566,3174,8.171,3175,8.171,3176,7.566,3177,8.171]],["keywords/326",[]],["title/327",[2,143.445,22,134.003]],["content/327",[]],["keywords/327",[]],["title/328",[2,143.445,244,632.894]],["content/328",[2,2.249,230,7.317,244,9.921,326,12.855,467,8.762,738,15.225,823,9.544,2876,20.006]],["keywords/328",[]],["title/329",[145,533.493,1624,601.456,1930,718.559]],["content/329",[2,1.963,15,2.672,18,3.545,19,2.475,22,1.044,25,3.047,36,4.129,43,2.819,54,10.714,61,3.748,69,2.996,87,4.46,89,2.314,103,4.636,132,8.713,145,5.006,147,5.767,165,8.23,192,5.324,195,2.854,206,7.804,222,1.703,223,2.351,226,2.419,263,3.296,273,7.1,288,5.567,290,4.615,293,5.996,298,5.458,307,5.339,323,6.665,334,8.584,340,3.53,354,2.649,387,5.201,401,4.319,408,4.575,489,5.059,513,4.555,523,8.036,536,6.825,545,7.204,557,4.72,578,5.767,601,4.98,602,5.494,613,7.862,647,4.001,666,7.175,668,8.453,689,5.301,692,5.725,696,10.21,703,8.713,710,9.417,732,8.713,773,8.453,774,7.565,788,9.436,792,4.424,938,6.388,1026,5.684,1113,5.357,1150,3.737,1218,7.707,1263,9.941,1293,7.707,1299,6.52,1467,7.862,1514,9.941,1836,8.453,1843,6.665,1861,9.941,1930,6.743,2027,8.013,2079,9.941,2129,9.417,2217,8.713,2240,6.452,3053,6.665,3140,8.713,3178,10.736,3179,10.736,3180,8.23,3181,10.736,3182,10.736,3183,10.736,3184,10.736,3185,10.736,3186,10.736,3187,10.736,3188,9.417,3189,10.736,3190,9.941,3191,10.736]],["keywords/329",[]],["title/330",[191,812.067,1255,1056.653]],["content/330",[2,2.023,61,6.787,74,10.473,103,6.175,162,5.917,163,4.758,173,5.366,189,10.703,195,2.663,223,3.132,263,4.39,277,3.015,288,7.415,332,8.982,340,3.183,387,6.928,441,11.26,492,10.265,495,5.275,509,8.425,536,9.091,539,10.077,542,10.442,544,7.318,545,13.044,547,7.366,552,7.366,576,10.963,597,8.195,634,9.458,638,9.091,651,5.776,661,7.518,666,6.469,777,8.425,782,11.606,784,9.904,796,10.703,870,9.328,897,5.404,995,8.508,1255,10.963,1348,8.195,1643,6.776,1748,7.05,1922,11.26,1930,8.982,2170,9.596,2201,11.606,2497,12.543,3188,12.543,3192,10.963,3193,14.3,3194,14.3,3195,14.3,3196,11.26,3197,12.022,3198,14.3]],["keywords/330",[]],["title/331",[666,623.523,696,887.311]],["content/331",[2,2.364,15,3.222,18,2.894,43,3.4,69,3.613,71,5.615,162,5.357,175,7.061,193,9.482,195,1.774,208,7.509,229,5.424,237,7.872,251,5.415,262,5.59,288,6.714,307,4.359,320,9.002,340,2.882,381,7.703,383,7.116,387,6.272,467,5.25,528,8.445,550,6.069,602,6.625,605,6.383,630,10.885,638,8.231,666,8.211,676,6.345,689,5.89,698,6.714,703,10.508,704,5.11,719,11.518,721,6.383,730,7.863,748,6.955,770,9.482,779,7.863,788,7.703,872,7.628,964,6.625,1068,10.194,1155,6.421,1211,7.628,1443,8.055,1552,8.335,1598,7.781,1620,10.885,1696,8.688,1748,6.383,1802,9.482,1927,11.356,1930,8.132,1974,6.383,2025,7.419,2127,7.781,2572,9.294,2845,11.356,2862,10.885,3051,10.885,3199,12.947,3200,12.947,3201,12.947,3202,12.947]],["keywords/331",[]],["title/332",[145,642.725,195,188.839]],["content/332",[2,2.358,11,5.693,18,2.878,19,4.168,36,4.952,79,3.476,97,5.741,98,7.993,106,6.581,139,10.404,145,6.004,146,6.632,152,6.968,168,2.6,172,4.798,195,2.863,251,3.841,262,5.559,307,4.334,316,7.083,351,7.445,360,5.768,379,8.64,441,10.138,447,5.101,464,3.226,465,4.271,489,8.52,552,6.632,570,8.515,616,3.283,619,7.133,661,6.769,681,6.722,683,9.871,705,8.64,730,7.82,735,8.399,736,6.817,748,6.916,749,6.386,770,9.429,812,5.768,974,7.378,1043,7.514,1397,10.45,1425,11.922,1443,5.714,1467,9.429,1468,11.294,1554,8.185,1859,7.191,1868,11.922,1930,11.355,1955,10.138,2135,15.858,2435,10.824,3146,11.922,3203,12.875,3204,12.875,3205,12.875,3206,15.858,3207,12.875,3208,12.875]],["keywords/332",[]],["title/333",[528,899.071,722,899.071]],["content/333",[2,2.298,18,3.196,22,1.39,43,3.755,49,5.002,64,6.634,67,6.813,69,3.99,93,10.077,110,6.704,195,1.959,209,8.595,216,9.291,229,5.991,251,4.266,273,9.458,307,4.814,320,9.641,327,9.206,381,8.508,396,5.941,411,7.571,445,4.379,467,5.799,495,8.147,517,11.26,518,5.561,540,6.928,546,5.644,630,12.022,634,12.856,672,9.328,692,7.626,722,12.68,760,11.26,767,7.799,779,8.685,782,11.606,799,11.606,1077,10.473,1090,9.206,1105,8.595,1396,9.206,1863,9.328,2054,11.26,2430,13.241,3209,14.3,3210,14.3,3211,14.3,3212,13.241,3213,14.3,3214,14.3,3215,13.241]],["keywords/333",[]],["title/334",[2,88.862,112,285.755,279,280.819,1214,556.959,1215,388.167]],["content/334",[]],["keywords/334",[]],["title/335",[112,382.885,1214,746.272,1215,520.107]],["content/335",[2,2.149,112,6.91,127,5.04,277,4.353,279,6.791,307,6.951,316,8.089,413,9.529,792,8.508,1106,14.822,1214,13.468,1215,9.387,3216,20.648]],["keywords/335",[]],["title/336",[2,101.77,575,234.618,626,453.632,895,293.241]],["content/336",[]],["keywords/336",[]],["title/337",[20,325.355,1843,607.087,1849,857.735,3217,769.957]],["content/337",[20,6.55,73,5.04,115,5.429,130,10.038,181,6.103,186,6.125,195,1.996,201,12.248,202,10.09,270,4.557,368,5.303,369,7.659,375,10.82,575,5.984,627,6.346,631,8.668,662,14.735,682,5.794,699,10.266,700,9.927,887,13.872,1189,9.497,1643,9.328,1768,11.281,1843,12.222,1849,17.268,1906,18.228,1923,14.354,2793,15.5,3217,17.556,3218,18.228]],["keywords/337",[]],["title/338",[31,295.685,226,257.805,626,530.728]],["content/338",[2,1.488,22,2.147,70,5.753,73,6.724,87,5.941,88,8.595,89,3.082,103,6.175,130,11.508,160,6.704,166,8.508,186,6.048,196,5.541,198,6.533,199,8.425,200,11.606,220,6.068,270,4.473,368,5.205,445,5.952,467,5.799,514,10.473,575,5.299,627,6.504,633,13.044,887,13.698,1020,10.684,1026,7.571,1143,7.18,1189,8.783,1257,10.963,1768,12.656,1843,8.878,1909,12.022,2793,17.389,3219,14.3,3220,14.3]],["keywords/338",[]],["title/339",[2,101.77,354,241.274,355,251.601,895,293.241]],["content/339",[2,1.942,22,1.814,44,12.013,69,5.207,136,7.203,160,8.747,206,7.72,352,5.387,354,4.604,452,13.615,515,9.549,546,7.365,575,4.477,633,12.521,704,7.365,897,7.051,909,10.422,1020,10.256,1021,8.794,1189,7.421,1768,10.693,1843,14.347,3221,13.395]],["keywords/339",[]],["title/340",[2,101.77,22,95.072,895,293.241,1026,517.722]],["content/340",[2,1.526,22,1.922,36,5.639,44,9.438,127,3.578,227,4.714,237,6.359,279,4.822,283,5.501,316,5.743,354,4.878,355,5.087,366,9.438,452,8.638,495,5.408,518,5.701,522,9.32,526,4.161,599,8.536,601,10.376,603,10.376,604,10.183,627,5.03,652,4.878,697,7.454,721,7.228,871,7.407,872,8.638,876,12.727,895,5.928,896,8.336,900,9.208,903,10.973,1020,8.058,1021,6.909,1026,11.842,1163,8.257,1393,7.552,1830,10.153,1984,9.838,1985,10.331,1986,9.102,1987,13.575]],["keywords/340",[]],["title/341",[633,924.895,1843,855.688]],["content/341",[20,6.414,22,2.134,81,12.391,186,4.395,228,3.923,230,6.529,244,8.852,270,4.419,575,4.625,599,10.18,627,4.905,633,12.936,644,5.64,662,14.429,704,5.576,898,15.646,900,14.808,902,10.366,911,11.876,912,10.141,1026,7.479,1158,12.75,1189,7.667,1393,7.277,1768,12.576,1843,11.968,1923,12.411,2793,11.123,3217,15.179,3218,17.85,3222,19.278,3223,14.127,3224,14.127,3225,14.127,3226,14.127,3227,14.127,3228,14.127]],["keywords/341",[]],["title/342",[16,165.308,216,481.298,217,597.308]],["content/342",[]],["keywords/342",[]],["title/343",[282,329.633]],["content/343",[4,6.031,22,1.1,25,3.21,31,4.259,33,9.904,34,8.465,36,6.338,43,5.961,44,14.615,79,5.765,89,3.551,180,5.479,194,7.378,196,7.532,207,4.841,217,8.603,222,1.795,223,2.477,225,10.289,226,3.713,229,4.738,257,9.508,262,9.222,268,4.215,281,2.607,282,2.151,296,4.447,297,4.778,340,2.518,348,6.031,426,5.669,464,2.834,495,7.879,511,7.894,518,6.408,529,6.869,554,7.707,555,9.508,685,11.057,704,4.464,833,9.129,849,7.269,860,6.121,964,9.948,1049,7.85,1348,6.481,1352,7.707,1453,8.986,1614,6.216,1621,6.869,1679,5.193,1716,3.616,1748,8.124,1875,3.808,1885,7.19,3229,11.31,3230,11.31,3231,11.31,3232,16.478,3233,11.31,3234,11.31,3235,10.472,3236,10.472,3237,11.31]],["keywords/343",[]],["title/344",[1023,407.123]],["content/344",[11,4.571,168,3.387,217,8.758,223,4.732,224,1.906,245,14.103,257,14.103,258,3.348,277,3.537,335,3.78,397,3.544,399,3.427,526,4.761,542,9.011,575,4.025,707,5.785,842,5.715,925,7.664,1124,9.22,1126,5.767,1142,5.857,1822,15.533,1973,9.981,2027,8.475,2122,8.27,2123,10.299,2793,13.209,2800,13.615,3235,15.533,3236,15.533,3238,16.776,3239,15.533,3240,16.776,3241,15.533,3242,15.533,3243,15.533,3244,14.103,3245,16.776]],["keywords/344",[]],["title/345",[224,196.887]],["content/345",[16,2.786,22,1.874,79,5.204,80,14.779,89,4.155,127,4.705,145,8.99,222,3.059,224,2.893,228,5.353,230,6.529,283,7.234,284,5.796,704,7.609,801,13.351,1042,7.756,2248,10.951,3246,19.279,3247,19.279]],["keywords/345",[]],["title/346",[3248,1244.143]],["content/346",[]],["keywords/346",[]],["title/347",[2042,532.102]],["content/347",[18,4.273,127,4.667,224,2.665,226,5.286,283,7.175,340,4.256,445,5.855,627,6.457,644,7.633,759,15.055,896,9.861,2042,5.87,3248,16.839,3249,13.473]],["keywords/347",[]],["title/348",[864,626.718]],["content/348",[127,5.04,224,2.346,226,5.537,445,6.322,627,5.254,752,8.089,875,5.761,896,7.695,2211,14.3,3248,18.834]],["keywords/348",[]],["title/349",[2,78.859,224,86.077,226,170.748,279,249.209,445,232.017,3248,543.929]],["content/349",[2,1.709,16,2.373,47,7.428,113,3.865,127,4.008,185,5.733,196,6.362,224,1.865,258,3.277,279,5.4,330,5.544,359,9.16,408,6.997,422,5.055,428,7.887,436,12.29,606,9.583,615,10.194,627,4.178,689,4.615,717,8.193,896,6.119,1708,10.383,1765,9.972,1830,11.372,2211,11.372,2234,12.588,3248,15.297,3250,14.403,3251,14.403,3252,15.204,3253,15.204,3254,16.42,3255,15.204,3256,16.42,3257,16.42,3258,16.42,3259,16.42]],["keywords/349",[]],["title/350",[16,250.43]],["content/350",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3248,13.183]],["keywords/350",[]],["title/351",[282,329.633]],["content/351",[3,2.4,14,6.918,18,5.611,19,4.596,43,3.899,222,2.356,226,4.493,258,2.963,282,3.792,330,5.013,355,5.13,397,3.137,399,3.033,400,6.3,426,7.321,428,8.333,447,5.883,448,5.168,466,8.924,652,6.634,689,4.173,693,3.881,714,5.795,717,9.949,851,5.441,896,7.431,908,5.334,1535,5.774,1716,6.375,1875,6.713,2248,11.326,3248,10.658,3260,14.848,3261,12.051,3262,6.469,3263,7.035]],["keywords/351",[]],["title/352",[1023,407.123]],["content/352",[15,6.99,123,9.494,835,9.75,1380,17.952,2282,16.61,3264,18.95,3265,18.95,3266,20.466,3267,20.466]],["keywords/352",[]],["title/353",[616,351.477,689,387.369]],["content/353",[127,5.374,224,2.501,616,5.614,689,6.187,3248,15.804,3268,22.016]],["keywords/353",[]],["title/354",[270,357.875,652,380.65,908,411.007]],["content/354",[270,6.887,652,7.325,908,7.909,1643,10.431,3248,15.804,3269,22.016]],["keywords/354",[]],["title/355",[546,544.018,2215,812.067]],["content/355",[22,2.441,31,5.533,224,2.432,652,7.123,704,8.45,3248,15.367,3270,19.246]],["keywords/355",[]],["title/356",[3271,1406.653]],["content/356",[]],["keywords/356",[]],["title/357",[2042,532.102]],["content/357",[386,11.171,526,6.43,3271,18.39]],["keywords/357",[]],["title/358",[16,250.43]],["content/358",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3271,14.905]],["keywords/358",[]],["title/359",[282,329.633]],["content/359",[3,2.495,13,5.079,18,5.463,19,4.718,86,7.089,127,3.768,222,2.45,258,3.081,282,4.366,397,3.262,399,3.154,426,7.128,447,6.117,526,4.382,627,5.207,652,7.638,689,4.339,693,4.036,714,6.026,851,5.657,895,4.63,896,7.627,908,7.352,1535,6.004,1716,6.544,1875,6.89,3263,7.315,3271,16.61,3272,12.157,3273,9.697,3274,14.421]],["keywords/359",[]],["title/360",[1023,407.123]],["content/360",[15,4.798,222,3.059,224,2.19,258,3.847,397,4.073,399,3.938,575,4.625,689,5.418,707,6.648,838,8.287,842,6.568,847,7.234,851,7.064,3273,12.108,3275,8.11,3276,19.279,3277,12.76,3278,14.779,3279,10.858,3280,15.647]],["keywords/360",[]],["title/361",[222,218.697,224,156.574]],["content/361",[]],["keywords/361",[]],["title/362",[222,181.529,224,129.964,229,479.274]],["content/362",[]],["keywords/362",[]],["title/363",[224,156.574,279,453.311]],["content/363",[15,5.702,24,2.186,43,4.271,59,5.832,61,6.424,66,1.863,156,5.75,172,7.443,195,1.809,222,1.339,224,1.5,277,1.779,279,4.343,287,6.962,307,4.445,530,4.924,549,8.394,601,3.914,634,5.581,661,4.436,690,5.364,722,5.504,766,5.18,789,7.401,802,7.094,831,4.088,838,11.86,839,7.401,1118,6.316,1150,7.372,1151,9.012,1221,7.156,1622,4.318,1758,5.946,1824,3.52,1910,10.194,1956,4.602,1988,8.511,1989,8.197,2041,3.66,2046,7.375,2100,4.02,2920,5.581,3180,6.469,3244,7.094,3281,6.18,3282,24.281,3283,7.401,3284,6.316,3285,8.438,3286,5.844,3287,7.094,3288,7.813,3289,5.125,3290,7.813,3291,8.438,3292,8.438,3293,10.716,3294,8.438,3295,6.316,3296,8.438,3297,7.813,3298,7.813,3299,7.813,3300,8.438,3301,7.401,3302,8.438,3303,8.197,3304,7.813,3305,5.18,3306,7.401,3307,7.094,3308,6.18,3309,6.644,3310,7.813,3311,7.501,3312,7.813,3313,6.644,3314,8.438]],["keywords/363",[]],["title/364",[224,129.964,699,806.162,700,779.562]],["content/364",[2,1.402,39,3.834,43,1.675,54,3.623,66,1.408,70,6.295,89,1.375,108,3.145,115,2.377,155,2.518,166,3.795,167,3.688,195,2.144,222,1.012,224,2.12,226,1.437,229,4.416,262,2.754,276,4.28,277,1.345,279,2.098,287,2.73,352,1.842,367,2.419,370,2.858,387,3.09,400,2.706,518,2.48,541,8.114,550,2.99,616,2.688,652,2.122,691,5.022,697,3.243,698,3.308,699,9.493,700,9.18,704,2.518,791,3.758,795,5.177,838,11.711,894,3.916,1042,2.566,1121,3.039,1150,7.677,1616,3.758,1697,5.595,1775,5.662,1988,4.492,2038,4.346,2132,3.33,2823,4.218,2933,4.218,3121,4.774,3271,5.177,3282,24.522,3303,3.96,3311,3.623,3315,5.906,3316,6.378,3317,22.618,3318,6.378,3319,6.378,3320,5.022,3321,5.906,3322,8.081,3323,10.934,3324,5.022,3325,5.906,3326,5.022,3327,5.906,3328,5.022,3329,6.378,3330,7.567,3331,5.906,3332,7.567,3333,4.218,3334,5.595,3335,5.177,3336,5.906,3337,5.906,3338,5.177,3339,6.378,3340,5.906,3341,5.595,3342,6.378,3343,5.906,3344,5.595,3345,5.022,3346,6.378,3347,4.89,3348,5.906,3349,5.906,3350,5.177,3351,5.906,3352,4.774,3353,5.906,3354,6.378,3355,4.671,3356,6.378,3357,5.022,3358,6.378,3359,10.206,3360,6.378,3361,4.774,3362,5.906,3363,5.022,3364,6.378,3365,5.022,3366,6.378,3367,4.346,3368,5.906,3369,5.906,3370,8.081,3371,6.378,3372,5.022,3373,5.906,3374,5.906,3375,5.022,3376,5.906,3377,5.022,3378,5.906,3379,5.595,3380,5.022,3381,5.906,3382,4.89,3383,5.906,3384,5.022,3385,5.906,3386,5.022,3387,5.906,3388,10.206,3389,5.595,3390,5.906,3391,5.906]],["keywords/364",[]],["title/365",[3281,1269.296]],["content/365",[]],["keywords/365",[]],["title/366",[2042,532.102]],["content/366",[6,5.22,16,1.634,25,3.21,29,7.022,30,3.616,31,2.923,49,2.91,65,5.142,66,5.232,73,5.7,89,3.551,92,5.043,113,2.662,127,2.761,168,4.312,186,3.519,195,1.55,196,4.382,208,6.818,220,4.799,222,1.795,224,2.208,226,2.549,251,4.916,274,5.946,316,4.431,335,3.713,340,3.668,347,5.939,352,4.758,368,5.998,374,4.186,401,4.55,448,3.936,516,6.317,518,4.398,527,8.545,568,6.293,579,5.142,616,2.884,646,5.247,651,4.568,693,2.956,731,6.818,771,4.862,779,6.869,864,7.029,902,4.973,1063,8.918,1088,7.378,1214,7.378,1215,5.142,1217,5.092,1220,5.067,1344,6.869,1702,10.23,1748,5.576,1864,11.057,2020,4.928,2028,8.671,2041,4.905,2080,7.378,2174,7.281,2462,7.104,2562,11.042,2563,8.124,2572,8.119,2573,7.19,3281,12.068,3392,9.921,3393,11.31,3394,9.179,3395,6.37,3396,8.119,3397,9.179]],["keywords/366",[]],["title/367",[864,626.718]],["content/367",[11,4.851,13,2.787,31,3.256,61,4.398,65,5.726,66,5.227,69,3.515,92,9.206,127,4.345,168,4.961,185,6.215,220,5.345,222,1.999,226,4.012,246,7.036,296,4.953,338,6.577,367,4.777,374,4.662,432,5.643,439,9.425,445,3.857,447,4.991,568,6.799,575,4.271,641,5.513,651,9.064,693,3.293,731,5.212,752,4.935,779,7.65,873,5.936,902,5.538,912,9.042,1074,6.285,1126,4.331,1142,4.398,1150,4.384,1163,7.094,1189,8.211,1220,5.643,2042,3.867,2094,5.463,2462,7.911,2518,13.776,2561,13.038,2562,7.155,2563,8.777,2564,10.113,2565,8.331,2584,11.663,3053,7.82,3281,9.225,3398,12.596,3399,12.596,3400,11.663]],["keywords/367",[]],["title/368",[401,460.294,546,451.561,2215,674.055]],["content/368",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,3281,11.941,3401,11.11]],["keywords/368",[]],["title/369",[16,250.43]],["content/369",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2041,7.965]],["keywords/369",[]],["title/370",[282,329.633]],["content/370",[8,2.788,13,2.72,18,4.961,19,2.835,20,5.103,22,0.75,30,3.932,52,3.127,61,2.692,65,3.505,67,3.673,73,2.667,108,3.801,109,4.5,110,3.615,112,6.399,113,5.225,168,4.114,173,2.893,222,1.223,224,0.876,226,1.738,230,2.611,258,3.061,281,1.777,282,2.339,295,6.42,307,2.596,335,5.002,340,1.716,352,2.226,399,1.575,400,3.272,401,7.692,404,2.627,426,7.219,448,4.28,461,6.557,469,2.844,505,3.92,551,3.127,568,5.857,575,4.587,616,1.966,622,3.998,647,4.583,651,4.967,654,3.998,658,3.09,682,3.067,689,3.456,693,4.009,714,3.009,759,6.071,771,6.593,808,3.286,842,4.189,851,2.825,870,8.021,875,2.151,895,2.312,908,2.77,976,3.315,1023,1.811,1049,3.673,1110,4.238,1126,5.273,1150,2.684,1215,5.59,1217,5.536,1218,5.535,1220,9.945,1221,5.964,1222,4.142,1230,6.376,1535,2.998,1624,6.465,1716,3.932,1875,4.14,2041,5.333,2469,6.071,2475,6.763,2509,5.254,2562,6.985,2563,6.062,3124,4.787,3402,7.14,3403,4.634,3404,4.343,3405,4.343,3406,5.03,3407,5.647,3408,6.071,3409,6.071,3410,5.1,3411,4.38,3412,8.021,3413,6.071,3414,6.071,3415,5.535,3416,5.174,3417,6.071,3418,7.14,3419,7.14,3420,7.14,3421,7.14,3422,7.14,3423,5.03,3424,7.711]],["keywords/370",[]],["title/371",[1023,407.123]],["content/371",[13,4.112,49,3.446,89,4.005,112,6.22,127,3.269,136,5.171,139,6.15,168,2.704,222,3.658,224,1.522,254,10.649,258,2.673,277,2.824,284,4.027,335,4.188,357,6.279,397,2.83,399,3.797,400,5.683,575,3.214,578,7.195,622,6.946,689,3.764,707,4.619,842,4.563,847,5.026,849,5.009,851,4.908,929,6.854,995,7.969,1126,4.605,1215,6.089,1222,7.195,1226,10.871,1228,10.546,1230,9.637,1240,10.269,1241,12.291,1242,11.749,1243,11.749,1244,11.749,1245,11.749,1246,11.749,1247,11.749,1248,11.749,1249,11.749,1250,11.749,1251,11.749,1252,11.749,1253,11.749,1254,11.749,2509,9.127,3275,5.635,3405,7.544,3425,9.276,3426,13.394,3427,13.394,3428,8.988,3429,13.394,3430,6.643,3431,9.127,3432,6.416]],["keywords/371",[]],["title/372",[3284,1297.249]],["content/372",[]],["keywords/372",[]],["title/373",[43,224.2,54,485.021,195,116.983,287,365.434,3433,672.297]],["content/373",[16,1.537,18,2.378,22,1.824,43,6.088,54,13.17,69,2.968,89,2.292,107,5.554,109,6.208,123,9.621,195,3.601,220,4.513,221,5.341,222,2.499,224,2.131,229,4.456,263,3.266,281,2.452,284,3.198,287,8.876,290,4.573,291,2.919,330,7.476,334,4.383,352,3.071,394,4.766,396,4.419,401,6.338,428,5.831,448,5.483,495,3.924,511,5.096,520,6.329,536,6.762,546,4.199,550,4.987,579,4.836,652,7.983,667,7.248,674,8.943,689,5.829,758,7.035,780,7.636,792,4.383,841,8.34,927,8.634,1004,8.634,1121,5.068,1396,10.141,2020,4.635,3102,7.367,3284,11.791,3333,10.418,3433,19.4,3434,9.331,3435,14.586,3436,14.586,3437,10.638]],["keywords/373",[]],["title/374",[195,156.745,397,241.681,616,291.743]],["content/374",[2,2.158,3,3.352,16,2.276,22,2.016,42,7.464,67,9.88,89,3.395,181,6.599,195,2.841,222,4.062,224,2.356,226,3.55,230,5.335,385,5.166,445,6.35,579,7.162,611,10.419,616,5.289,652,5.241,812,7.058,816,8.727,2635,13.244,3284,17.354,3434,18.191,3438,15.753,3439,15.753,3440,10.571,3441,18.889,3442,17.436]],["keywords/374",[]],["title/375",[2042,532.102]],["content/375",[13,4.672,14,5.618,16,2.34,22,2.053,30,5.177,35,10.709,43,4.252,162,6.699,195,2.893,224,2.399,226,3.649,287,6.93,296,6.367,340,4.7,352,6.096,526,4.595,627,5.373,652,5.387,769,13.141,810,7.289,860,8.763,1023,3.803,1142,5.653,1488,11.343,1567,12.413,1755,15.328,1916,8.34,2060,12.119,3284,15.805,3433,12.749,3434,14.202,3443,14.202,3444,14.202]],["keywords/375",[]],["title/376",[16,250.43]],["content/376",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3284,13.746]],["keywords/376",[]],["title/377",[282,329.633]],["content/377",[3,2.064,13,3.977,14,4.431,18,4.649,19,2.944,20,2.69,22,1.748,30,4.083,33,4.86,35,5.348,41,9.706,43,4.72,44,8.22,54,10.21,108,3.986,113,3.006,123,3.751,195,3.093,213,4.964,219,3.658,222,1.283,226,3.566,230,2.738,251,3.81,258,1.614,282,2.429,287,5.465,296,3.18,330,5.343,340,1.8,348,4.312,399,2.609,401,9.349,426,7.077,428,6.653,467,3.279,469,2.983,511,3.873,554,5.51,575,1.94,643,5.205,652,6.921,679,5.924,681,6.667,689,4.447,761,4.516,769,12.843,771,5.489,808,3.446,810,3.64,833,9.958,860,4.376,1142,4.458,1155,6.333,1396,8.22,1443,3.588,1488,8.5,1567,6.199,1593,5.51,1679,7.266,1716,4.083,1755,10.322,1875,4.299,2020,7.831,2060,6.052,2074,6.052,2102,7.092,3262,3.523,3284,13.453,3333,5.348,3411,4.593,3433,6.367,3435,7.487,3436,7.487,3441,13.78,3444,11.2,3445,6.798,3446,8.086,3447,8.086,3448,8.086,3449,8.086,3450,8.086,3451,7.092,3452,8.086,3453,7.487,3454,7.487,3455,8.086,3456,6.199,3457,6.199]],["keywords/377",[]],["title/378",[1023,407.123]],["content/378",[113,4.256,222,2.869,224,2.054,258,3.608,397,3.819,399,3.693,458,7.986,483,13.241,707,6.235,769,14.674,771,7.772,842,6.16,847,6.784,2125,10.757,3262,7.877,3275,7.606,3277,12.263,3425,12.521,3433,14.236,3441,13.86,3444,15.858,3453,16.741,3454,16.741,3456,13.86,3458,18.08,3459,18.08,3460,18.08,3461,18.08]],["keywords/378",[]],["title/379",[550,812.464]],["content/379",[2,1.634,30,3.386,31,2.737,43,4.913,54,10.628,67,7.479,79,5.05,89,3.383,93,7.462,97,4.722,136,4.088,161,4.118,195,3.171,205,8.77,222,3.673,223,4.532,224,2.125,231,4.228,232,6.364,258,3.734,282,2.014,287,8.007,291,5.678,307,3.565,316,4.148,323,6.574,340,2.357,345,6.809,394,8.382,396,6.522,445,3.242,448,3.686,469,3.906,492,7.601,495,3.906,518,4.118,547,5.455,551,4.294,616,5.277,652,3.523,678,6.501,689,5.816,772,8.594,792,4.363,807,6.651,814,6.732,823,4.677,841,5.606,921,4.532,993,5.731,1014,6.55,1017,7.755,1032,7.003,1042,4.26,1049,5.045,1154,6.732,1285,9.341,1467,7.755,1535,6.105,1709,5.688,1745,12.555,1755,12.204,3102,7.334,3284,7.926,3433,8.338,3441,14.343,3442,13.199]],["keywords/379",[]],["title/380",[70,554.539,1988,587.339]],["content/380",[]],["keywords/380",[]],["title/381",[195,156.745,397,241.681,616,291.743]],["content/381",[2,1.516,3,2.355,7,5.885,8,5.268,31,3.765,49,3.749,70,10.035,127,3.556,195,1.996,274,12.554,397,4.159,399,2.976,469,5.374,616,3.715,689,4.095,692,14.252,1024,16.057,1880,13.49,2171,12.248,3462,14.569,3463,23.095,3464,22.297,3465,22.297,3466,22.297,3467,22.297,3468,14.569,3469,19.686,3470,14.569]],["keywords/381",[]],["title/382",[2042,532.102]],["content/382",[2,2.13,16,2.957,22,2.377,224,2.325,329,7.959,347,7.376,354,5.05,355,5.266,599,8.837,895,6.137,1026,10.835,1988,8.721,3471,9.972]],["keywords/382",[]],["title/383",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,1988,290.223,3471,331.852]],["content/383",[22,1.955,70,8.092,195,2.755,222,3.191,340,4.477,352,6.984,526,6.865,575,4.825,627,5.117,1020,11.054,1088,13.119,1133,7.225,1988,10.308]],["keywords/383",[]],["title/384",[22,95.072,347,352.446,895,293.241,1026,517.722]],["content/384",[14,6.13,16,2.553,22,1.718,70,7.108,220,7.496,224,2.007,296,6.947,347,6.368,354,4.359,355,4.546,368,6.431,490,4.93,495,6.517,652,5.878,654,9.162,896,8.322,1133,8.023,1142,6.168,1945,10.124,1988,7.529,2094,10.621,2211,12.236,2633,16.715,3471,8.609,3472,16.359,3473,17.668,3474,17.668]],["keywords/384",[]],["title/385",[185,341.406,195,133.976,2122,482.086,3221,701.955]],["content/385",[8,4.958,14,4.757,16,1.981,25,3.891,30,4.384,49,4.859,70,5.516,155,5.411,179,7.158,185,4.787,193,10.041,195,2.96,222,3.428,224,1.557,228,3.807,258,3.769,281,3.16,294,8.611,404,4.671,448,6.574,456,11.526,469,5.057,490,3.825,493,7.311,496,12.695,518,5.331,527,7.11,579,8.586,627,3.488,652,4.562,810,6.172,1050,5.744,1087,10.795,1088,8.943,1837,6.841,1916,7.062,1988,10.406,2122,11.478,2123,8.417,3038,12.026,3221,17.529,3333,9.067,3440,9.2,3475,12.695,3476,13.71,3477,13.71,3478,13.71,3479,13.71,3480,21.606]],["keywords/385",[]],["title/386",[16,250.43]],["content/386",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,70,7.331,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1988,7.765]],["keywords/386",[]],["title/387",[282,329.633]],["content/387",[2,0.932,3,2.236,14,6.593,15,4.206,18,5.057,19,3.895,20,2.98,22,0.871,30,4.423,33,8.313,44,5.767,52,5.609,66,1.978,70,7.645,86,4.113,89,1.93,145,4.177,168,1.809,195,2.315,206,5.723,219,4.052,220,3.801,222,1.421,224,1.018,226,2.019,237,3.885,241,3.722,258,1.788,274,10.797,282,3.614,283,3.361,329,5.379,330,4.67,347,6.09,352,2.586,353,5.499,354,2.21,355,2.305,397,1.892,399,1.83,422,2.757,426,6.815,427,3.25,428,5.12,575,2.149,601,6.417,650,5.695,654,7.173,689,2.518,693,2.341,714,3.496,744,6.43,761,5.003,846,4.315,851,3.282,860,4.848,872,5.278,875,2.499,895,2.686,896,5.155,900,5.626,908,6.07,1133,3.218,1142,4.829,1261,6.312,1535,3.483,1614,4.923,1621,5.44,1716,4.423,1875,4.657,1945,7.927,1974,4.416,1988,8.097,2094,8.242,2122,8.33,2155,10.13,2521,11.629,2522,12.133,3221,12.129,3262,3.903,3263,4.244,3471,4.365,3481,5.695,3482,6.011,3483,7.053,3484,4.526,3485,6.867,3486,6.867,3487,7.27,3488,8.958,3489,8.958,3490,8.294,3491,8.294,3492,5.626,3493,5.561,3494,6.312]],["keywords/387",[]],["title/388",[1023,407.123]],["content/388",[1,3.623,15,4.002,86,7.384,123,7.459,222,2.551,224,1.827,258,3.209,347,5.796,397,3.397,399,3.285,689,4.519,707,5.545,838,6.912,842,5.478,847,6.034,851,5.892,895,4.822,908,5.777,1023,3.777,1133,5.777,1614,8.838,1988,6.852,2122,7.927,2125,9.567,2155,11.776,3221,11.543,3262,7.006,3275,6.765,3277,8.702,3279,9.056,3323,13.05,3475,14.889,3483,12.661,3490,14.889,3491,14.889,3495,9.872,3496,10.635,3497,16.08,3498,16.08,3499,16.08,3500,9.872,3501,11.136,3502,16.08,3503,12.661,3504,16.08]],["keywords/388",[]],["title/389",[1988,587.339,3180,1056.653]],["content/389",[]],["keywords/389",[]],["title/390",[2042,532.102]],["content/390",[4,7.579,13,4.283,22,1.882,25,4.033,42,6.734,79,3.837,89,4.172,106,5.173,127,3.469,130,6.398,195,2.652,220,6.03,222,2.255,224,1.615,228,3.947,244,6.526,270,4.446,281,4.462,340,3.164,343,5.279,352,4.103,448,4.947,575,4.645,627,5.602,644,5.674,675,9.035,689,7.171,731,8.009,1133,5.106,1142,4.962,1837,7.092,1988,9.381,2023,11.405,2027,11.122,2095,9.843,2122,7.007,3180,16.877,3505,14.213,3506,14.213,3507,14.213,3508,13.16,3509,14.213,3510,14.213]],["keywords/390",[]],["title/391",[16,250.43]],["content/391",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1988,7.765,3180,13.969]],["keywords/391",[]],["title/392",[282,329.633]],["content/392",[13,4.595,14,4.419,18,5.04,19,4.136,22,2.019,113,4.223,167,7.363,222,2.021,258,4.5,282,3.412,321,8.594,329,4.952,399,2.601,426,6.932,457,5.705,490,3.553,627,5.737,652,4.237,689,5.837,693,5.429,966,8.307,1036,9.326,1133,6.445,1142,6.263,1716,5.736,1875,6.039,2027,13.618,2122,10.24,2123,7.818,3180,17.286,3263,6.034,3511,11.17,3512,14.56,3513,9.531,3514,8.095,3515,10.335,3516,10.027,3517,10.027]],["keywords/392",[]],["title/393",[1023,407.123]],["content/393",[13,3.485,49,4.053,89,4.469,127,3.845,222,3.909,224,1.79,254,11.569,258,3.144,284,4.736,357,7.385,397,3.328,399,4.237,578,8.462,627,5.277,689,5.829,707,5.432,838,6.772,842,5.367,847,5.911,849,5.891,995,9.373,1142,5.5,2027,10.478,2122,7.766,2123,9.671,3180,12.077,3275,6.627,3288,14.586,3432,7.546,3512,16.832,3513,11.791,3514,10.014,3515,12.785,3516,12.404,3517,12.404,3518,10.419,3519,15.753]],["keywords/393",[]],["title/394",[1988,587.339,3286,954.559]],["content/394",[]],["keywords/394",[]],["title/395",[2042,532.102]],["content/395",[13,4.015,22,2.038,25,3.674,69,3.613,79,3.495,88,10.908,89,3.911,127,3.16,130,5.829,168,4.586,185,4.52,224,1.471,228,5.04,244,5.945,270,4.05,281,4.184,340,2.882,352,3.738,367,6.882,410,7.781,448,4.506,575,4.355,627,4.618,644,5.169,675,11.538,689,7.155,707,4.465,731,7.509,897,4.892,1133,4.651,1142,4.52,1154,8.231,1267,5.493,1471,8.967,1837,6.46,1988,7.734,2023,10.693,2027,10.588,2095,8.967,3286,17.17,3508,11.988,3520,12.947,3521,12.947,3522,12.947,3523,12.947,3524,12.947,3525,12.947,3526,12.947,3527,12.947,3528,12.947]],["keywords/395",[]],["title/396",[16,250.43]],["content/396",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3286,12.719]],["keywords/396",[]],["title/397",[282,329.633]],["content/397",[13,4.578,14,5.447,18,4.625,19,3.619,22,1.526,49,2.725,52,7.587,60,5.914,113,4.404,167,6.123,168,5.163,186,3.295,222,3.506,251,3.159,258,3.734,269,7.462,282,2.986,329,4.118,330,3.575,348,5.647,353,6.501,368,3.854,392,6.651,399,2.163,401,8.891,426,6.444,457,4.744,490,2.955,550,7.36,551,6.366,627,5.265,633,7.106,652,3.523,693,2.768,778,8.118,783,14.537,966,6.907,1036,7.755,1049,5.045,1142,5.481,1155,5.252,1175,6.364,1267,4.493,1716,5.02,1875,5.285,2027,12.104,2120,6.907,2121,6.574,2122,9.224,2265,13.702,3286,12.957,3511,9.288,3514,6.732,3529,10.589,3530,10.873,3531,9.288,3532,10.589,3533,6.574,3534,10.589,3535,10.589,3536,7.462]],["keywords/397",[]],["title/398",[1023,407.123]],["content/398",[13,3.485,49,4.053,89,4.469,127,3.845,168,4.187,222,3.909,224,1.79,254,11.569,258,3.144,284,4.736,357,7.385,397,3.328,399,4.237,578,8.462,627,5.277,707,5.432,838,6.772,842,5.367,847,5.911,849,5.891,995,9.373,1142,5.5,2027,10.478,2122,7.766,2123,9.671,3275,6.627,3286,10.91,3287,13.244,3430,7.813,3432,7.546,3512,16.832,3513,11.791,3514,10.014,3515,12.785,3516,12.404,3517,12.404,3518,10.419]],["keywords/398",[]],["title/399",[1988,587.339,3537,954.559]],["content/399",[]],["keywords/399",[]],["title/400",[2042,532.102]],["content/400",[16,2.931,22,1.972,224,2.305,340,4.516,352,5.857,363,10.45,627,5.162,693,5.303,731,8.394,902,8.92,1133,7.288,1988,8.645,2023,11.953,3537,14.05,3538,20.288]],["keywords/400",[]],["title/401",[16,250.43]],["content/401",[1,5.518,2,2.324,8,6.389,16,3.227,22,1.718,24,4.577,89,3.807,163,5.878,207,7.562,224,2.923,228,4.906,277,4.708,281,4.073,354,4.359,355,4.546,372,5.453,464,4.426,490,4.93,804,7.28,875,4.93,1023,4.15,1988,7.529,3537,15.466]],["keywords/401",[]],["title/402",[282,329.633]],["content/402",[11,5.433,18,5.379,19,3.924,22,1.15,31,3.057,52,6.902,112,3.958,113,5.134,168,3.437,173,4.438,195,1.62,222,2.701,230,4.006,258,2.36,263,3.631,282,3.792,312,5.062,316,4.634,335,5.423,363,6.093,399,2.416,400,5.018,426,7.537,427,4.291,448,4.117,464,2.963,465,3.924,551,4.796,575,5.544,647,4.408,693,3.092,714,4.616,731,4.894,767,9.282,849,4.423,910,8.334,975,7.937,1050,7.13,1126,6.855,1132,8.662,1210,9.447,1215,5.377,1716,5.442,1875,5.73,2851,8.853,3395,6.662,3533,7.343,3537,8.191,3539,9.944,3540,10.952,3541,17.021,3542,11.828,3543,11.828,3544,10.375,3545,10.952]],["keywords/402",[]],["title/403",[1023,407.123]],["content/403",[11,4.742,168,3.514,222,2.761,224,1.977,258,3.473,335,3.922,397,3.676,399,3.555,575,5.307,647,6.486,707,6.002,838,7.481,842,5.929,847,6.53,1126,5.983,1210,8.246,2123,10.684,3275,7.321,3280,14.125,3395,9.802,3512,14.125,3537,12.053,3540,16.114,3544,15.265,3546,16.114,3547,17.403,3548,17.403,3549,17.403,3550,17.403,3551,17.403,3552,17.403,3553,13.342,3554,17.403]],["keywords/403",[]],["title/404",[1988,587.339,3555,1118.642]],["content/404",[]],["keywords/404",[]],["title/405",[2042,532.102]],["content/405",[627,5.447,1142,7.474,2023,14.791,2027,10.816,3555,17.375,3556,25.104,3557,17.998]],["keywords/405",[]],["title/406",[864,626.718]],["content/406",[13,3.416,18,3.451,22,1.501,66,3.409,127,3.768,186,6.367,205,7.238,224,1.754,226,3.479,295,8.061,297,8.646,340,3.437,356,11.625,426,4.502,432,6.917,445,4.728,455,8.117,458,6.82,464,3.868,465,5.122,575,3.704,598,9.697,675,9.815,704,6.094,731,8.467,752,6.048,792,6.362,818,7.276,906,9.169,1988,6.579,2023,14.402,2027,11.598,3395,8.696,3555,16.61,3558,15.439,3559,15.439,3560,20.466,3561,15.439,3562,15.439]],["keywords/406",[]],["title/407",[16,250.43]],["content/407",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3563,18.365]],["keywords/407",[]],["title/408",[282,329.633]],["content/408",[3,2.036,13,4.965,14,6.177,18,5.291,19,4.104,22,1.731,186,5.539,222,1.999,258,2.514,282,3.386,356,12.747,397,2.661,399,2.573,426,7.166,447,4.991,627,4.53,689,3.54,693,3.293,714,4.916,761,9.943,851,4.616,902,7.827,906,7.976,908,4.525,1050,7.458,1142,6.215,1535,4.898,1679,5.784,1716,5.692,1875,5.993,1988,5.368,2023,13.221,2027,12.415,2122,10.179,3263,5.968,3555,18.212,3557,18.865,3564,12.596,3565,11.663,3566,11.049,3567,12.596]],["keywords/408",[]],["title/409",[1023,407.123]],["content/409",[15,7.197,925,8.197,929,9.181,930,9.567,1363,10.374,1616,10.57,2282,14.56,3568,17.94,3569,24.683,3570,17.94,3571,17.94,3572,17.94,3573,17.94]],["keywords/409",[]],["title/410",[546,544.018,2215,812.067]],["content/410",[5,15.265,33,13.295,36,6.694,43,5.808,60,9.72,67,8.291,110,8.158,119,10.063,127,4.248,186,5.415,226,3.922,312,7.448,356,13.813,369,9.149,392,13.893,504,8.737,546,6.869,551,7.057,791,10.254,964,8.906,1198,12.263,1261,12.263,1453,9.491,1806,15.265,1928,12.745,2521,14.631,3574,12.493,3575,17.403,3576,17.403]],["keywords/410",[]],["title/411",[195,156.745,1551,767.708,3035,1003.508]],["content/411",[30,5.966,36,7.177,40,11.862,186,7.19,356,14.904,367,8.763,413,8.612,504,9.368,509,10.994,672,12.172,906,10.353,964,9.549,1159,13.149,1442,10.422,1538,12.013,3035,16.367,3555,15.144,3557,15.687,3577,18.66]],["keywords/411",[]],["title/412",[831,667.74,1988,587.339]],["content/412",[]],["keywords/412",[]],["title/413",[2042,532.102]],["content/413",[20,5.277,22,1.542,62,10.221,106,5.773,115,5.911,130,9.378,155,6.26,186,4.935,195,2.173,222,2.517,224,1.802,226,3.574,263,4.869,281,3.656,312,6.788,340,3.53,352,4.579,397,3.35,404,5.404,445,4.856,575,4.998,627,6.286,675,13.243,731,6.562,752,6.213,792,6.535,831,10.092,875,4.425,1196,9.089,1313,10.083,1874,12.488,2020,6.91,2023,12.274,2027,8.013,3031,13.334,3578,11.615]],["keywords/413",[]],["title/414",[62,473.349,651,462.098,864,413.694]],["content/414",[1,4.012,15,6.941,22,1.225,36,4.845,62,10.167,66,2.781,115,4.694,130,8.014,181,5.277,186,6.424,226,2.838,231,5.029,374,4.662,385,4.131,627,4.53,651,7.191,675,15.622,677,5.617,833,6.978,872,7.422,875,3.515,1019,8.724,1113,6.285,1234,8.583,1285,7.495,1388,10.59,1551,8.453,1809,7.911,1996,11.049,1997,11.049,1998,11.049,1999,11.049,2001,15.615,2002,15.615,2003,14.967,2007,14.967,2008,11.049,2011,14.967,2014,11.049,2035,11.049,3031,14.967,3579,10.223,3580,12.596,3581,12.596,3582,16.484,3583,11.663,3584,11.663]],["keywords/414",[]],["title/415",[526,277.509,575,234.618,627,248.809,864,353.599]],["content/415",[1,3.753,2,1.195,13,4.758,15,6.849,22,1.619,25,3.257,62,6.891,66,3.677,130,7.498,244,5.27,281,2.646,297,4.849,340,3.707,352,4.809,360,5.142,385,3.764,526,3.257,552,5.912,575,5.896,627,6.528,644,4.582,675,15.142,677,5.118,875,3.202,1133,4.123,1142,5.815,1189,4.565,1388,9.649,1539,8.406,1809,7.209,1874,9.037,1996,10.067,1997,10.067,1998,10.067,1999,10.067,2001,14.609,2002,14.609,2007,14.002,2008,10.067,2011,14.002,2014,10.067,2023,12.671,2027,9.904,2095,7.949,3579,9.315,3583,10.627,3584,10.627,3585,11.478,3586,11.478]],["keywords/415",[]],["title/416",[16,250.43]],["content/416",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,831,8.897,875,5.124,1023,4.314]],["keywords/416",[]],["title/417",[282,329.633]],["content/417",[6,5.169,13,4.511,14,2.383,16,1.618,18,4.321,19,3.772,20,6.432,22,1.879,23,6.732,24,4.238,30,3.581,31,3.666,43,1.803,60,9.139,62,9.356,71,7.096,73,2.376,106,2.5,108,3.386,113,3.339,115,4.174,120,5.018,130,8.703,139,3.154,155,2.711,167,3.971,186,4.413,195,1.535,198,3.138,222,2.596,229,2.877,230,5.541,231,2.742,238,7.858,258,2.831,270,2.148,281,1.583,282,2.13,288,3.562,317,4.757,321,5.366,329,4.356,334,2.83,340,1.529,360,3.077,368,4.077,377,3.515,399,1.403,426,6.595,427,5.146,455,3.611,457,3.077,490,3.125,494,7.355,550,3.22,575,1.648,609,5.03,615,6.954,627,2.85,651,4.524,652,2.285,660,3.22,693,3.707,714,4.372,717,3.427,771,2.952,808,2.927,818,3.237,831,8.732,835,5.336,875,1.916,966,4.48,1007,3.586,1036,5.03,1076,4.757,1133,4.024,1142,2.398,1196,3.936,1267,2.914,1281,4.542,1412,6.877,1435,5.774,1679,3.154,1709,6.017,1716,3.581,1875,3.771,1888,4.84,2027,11.111,2122,6.992,2123,6.877,2181,4.757,2487,4.84,2851,10.616,2918,5.774,3031,9.417,3034,6.732,3263,3.254,3445,5.774,3514,4.366,3516,8.819,3517,8.819,3518,4.542,3531,6.024,3587,5.574,3588,5.574,3589,5.408,3590,5.408,3591,5.574,3592,5.574,3593,5.574,3594,5.774,3595,5.574,3596,5.574,3597,5.574,3598,5.574,3599,5.574,3600,5.774,3601,6.359]],["keywords/417",[]],["title/418",[1023,407.123]],["content/418",[14,5.055,19,3.358,23,8.756,62,8.145,89,4.242,98,9.045,105,9.262,130,6.559,155,5.75,220,6.182,222,3.538,224,1.655,254,9.823,258,2.907,284,4.38,345,6.319,397,3.078,399,4.022,427,5.285,578,7.826,689,4.095,707,5.024,831,7.058,838,6.263,839,12.779,842,6.707,847,5.467,849,5.448,1143,7.315,1404,12.779,1614,8.007,1798,9.262,1800,7.826,2015,13.49,2105,8.944,2108,11.471,2122,7.182,2123,8.944,2510,8.205,3034,8.756,3275,6.129,3432,6.979,3516,11.471,3517,11.471,3602,11.824,3603,11.471,3604,11.824,3605,11.824,3606,11.824,3607,11.824,3608,11.824,3609,12.248,3610,13.49]],["keywords/418",[]],["title/419",[59,377.154,61,298.102,195,116.983,771,367.042,1412,524.187]],["content/419",[1,1.552,2,1.479,3,1.113,6,3.179,11,1.877,16,2.95,19,5.075,22,0.67,23,9.851,24,5.703,30,6.19,31,1.78,43,1.809,49,2.889,59,3.043,60,9.155,61,2.405,62,4.646,67,5.349,70,2.771,87,4.665,98,4.277,105,4.379,106,2.507,111,8.223,130,3.101,139,3.163,155,2.719,195,2.797,196,2.669,207,2.948,222,2.601,224,1.615,226,1.552,230,3.802,231,4.483,238,6.22,250,3.847,251,2.055,258,2.241,263,5.032,272,3.525,275,6.893,277,1.452,282,2.135,288,3.572,296,2.709,307,2.319,312,2.948,318,4.854,321,3.3,332,4.327,340,2.499,368,5.966,380,4.14,399,1.407,404,3.825,427,5.156,434,3.458,440,4.35,448,6.738,464,3.561,465,3.725,469,4.142,490,4.573,503,4.327,550,3.229,551,2.793,579,3.132,607,3.072,615,4.277,616,3.624,642,3.647,678,4.229,736,3.647,814,4.379,823,3.043,829,3.101,831,5.44,849,2.576,920,3.621,926,3.572,957,4.14,976,6.11,1021,3.246,1023,1.618,1044,3.913,1303,4.854,1412,6.893,1637,4.379,1683,5.156,1684,4.059,1731,6.615,1800,9.697,1876,4.277,1885,4.379,2025,3.947,2055,4.14,2081,4.14,2105,10.063,2422,6.893,2510,9.232,3034,10.849,3122,4.945,3128,5.156,3152,4.945,3411,3.913,3611,5.591,3612,5.424,3613,5.791,3614,5.424,3615,5.424,3616,5.424,3617,5.424,3618,5.424,3619,5.424,3620,5.424,3621,5.424,3622,5.424,3623,5.424,3624,5.424,3625,5.424,3626,7.052,3627,5.424,3628,5.424,3629,8.841,3630,5.424,3631,5.424,3632,5.424,3633,5.424,3634,5.424,3635,5.424,3636,5.424,3637,5.424]],["keywords/419",[]],["title/420",[3320,1364.669]],["content/420",[]],["keywords/420",[]],["title/421",[195,156.745,397,241.681,616,291.743]],["content/421",[2,2.006,3,3.116,7,7.787,8,8.526,31,4.983,49,4.96,127,4.705,195,2.641,386,9.504,397,4.981,399,3.938,452,11.358,469,7.112,575,4.625,616,4.916,652,6.414,3320,15.18,3638,19.279,3639,19.279]],["keywords/421",[]],["title/422",[2042,532.102]],["content/422",[13,5.645,447,8.723,652,7.325,1142,7.686,3320,17.335]],["keywords/422",[]],["title/423",[16,250.43]],["content/423",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3320,14.46]],["keywords/423",[]],["title/424",[282,329.633]],["content/424",[3,2.369,13,5.297,18,5.587,19,4.557,36,5.639,43,3.85,123,6.801,195,2.009,222,2.326,258,2.926,282,3.76,330,4.95,397,3.097,399,2.995,426,7.289,427,5.319,428,8.279,447,5.809,568,7.55,652,6.578,689,4.12,693,3.832,714,5.722,851,5.372,908,5.267,1142,6.902,1535,5.701,1716,6.321,1803,7.707,1875,6.655,3262,6.387,3263,6.947,3272,11.544,3320,17.612,3566,12.86,3640,9.99,3641,8.122]],["keywords/424",[]],["title/425",[1023,407.123]],["content/425",[208,6.346,222,2.434,224,1.742,258,3.061,397,5.361,399,3.133,400,9.708,689,7.132,707,5.289,838,6.593,842,5.225,847,9.523,851,9.299,1603,9.633,2125,9.125,2986,11.758,3262,6.682,3275,6.452,3277,11.027,3278,11.758,3279,11.476,3321,14.202,3566,13.453,3642,13.453,3643,15.338,3644,15.338,3645,14.202,3646,12.894,3647,15.338,3648,15.338,3649,15.338,3650,15.338]],["keywords/425",[]],["title/426",[156,939.177,766,846.169]],["content/426",[]],["keywords/426",[]],["title/427",[19,263.73,195,156.745,616,291.743]],["content/427",[2,2.188,3,2.599,19,3.707,36,6.185,43,4.222,66,3.55,70,6.469,86,7.384,89,3.465,103,6.943,106,8.524,195,3.209,207,6.882,224,2.66,279,5.288,329,6.253,343,5.972,356,14.108,525,11.543,616,5.972,715,13.05,728,8.981,766,15.247,808,6.852,1031,13.05,1105,9.664,1278,10.489,2116,14.104,2684,14.104,3651,16.08]],["keywords/427",[]],["title/428",[2042,532.102]],["content/428",[16,2.675,47,8.374,226,4.171,367,7.019,445,5.668,604,9.535,646,8.587,647,6.899,692,12.262,693,4.839,732,18.663,766,11.364,767,10.095,895,5.551,921,9.841,1593,12.614,2020,8.065,2037,12.614,2094,8.029,3652,18.511,3653,18.511,3654,18.511,3655,14.191]],["keywords/428",[]],["title/429",[646,530.728,693,299.043,895,343.078]],["content/429",[2,1.059,18,2.274,22,1.972,31,2.629,53,8.256,79,2.746,128,6.315,140,13.365,162,4.209,206,4.209,221,5.107,224,1.731,226,2.292,228,4.231,229,4.261,230,3.445,279,5.011,281,2.345,297,4.298,303,4.354,325,4.873,332,6.389,353,6.245,367,7.693,434,5.107,445,3.115,489,4.794,490,2.838,552,5.24,601,4.719,603,4.719,604,5.24,607,4.536,616,3.885,646,10.079,669,8.552,678,6.245,692,5.424,693,5.961,694,8.552,704,4.015,748,5.464,766,12.454,767,11.063,792,6.278,810,4.579,834,6.389,895,7.091,908,7.288,921,6.521,926,5.275,1031,8.256,1126,3.497,1143,5.107,1146,14.857,1232,9.419,1311,8.01,1326,5.729,1368,6.728,1466,7.45,1538,6.549,1545,8.256,1593,13.823,1963,8.256,1995,6.931,2037,6.931,2094,4.412,2215,5.993,2634,9.419,2640,8.256,3655,15.552,3656,10.172,3657,18.269,3658,10.172,3659,10.172,3660,10.172,3661,9.419,3662,9.419,3663,6.245,3664,10.172,3665,10.172]],["keywords/429",[]],["title/430",[557,375.411,689,239.969,766,524.187,2027,431.371,3666,790.599]],["content/430",[2,1.798,4,9.211,16,2.496,22,2.14,89,3.723,112,5.781,115,6.437,156,11.77,162,7.147,186,5.374,224,1.962,241,7.176,279,5.681,557,7.595,627,4.395,689,4.855,766,10.605,895,6.602,1155,8.567,1215,7.853,1837,8.619,1916,8.898,2023,14.277,2027,11.122,3666,20.385,3667,15.995,3668,11.963,3669,11.591,3670,11.963]],["keywords/430",[]],["title/431",[16,250.43]],["content/431",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,156,12.416,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,766,11.186,875,5.084,1023,4.28]],["keywords/431",[]],["title/432",[282,329.633]],["content/432",[13,3.327,14,3.469,18,4.041,19,4.168,20,3.326,22,1.955,25,4.268,113,2.353,206,6.223,207,4.279,226,3.389,228,2.776,258,1.995,282,2.86,399,2.042,400,4.242,426,7.467,469,3.688,511,4.789,594,4.458,627,3.827,682,3.976,689,2.81,693,5.923,714,3.902,758,6.612,766,12.347,767,8.202,835,4.763,851,3.663,895,6.795,908,3.592,1126,5.171,1133,5.403,1142,3.49,1143,7.551,1221,7.03,1535,3.888,1593,13.704,1716,4.809,1875,5.063,2020,4.356,2023,5.89,2027,11.877,2094,7.841,2122,4.929,2630,6.612,2640,16.322,3263,4.737,3330,7.177,3411,5.679,3440,12.132,3482,6.709,3495,11.099,3655,13.86,3671,9.998,3672,9.257,3673,11.53,3674,9.998,3675,9.257,3676,9.998,3677,8.114,3678,13.192,3679,8.769,3680,9.998,3681,9.998,3682,9.998]],["keywords/432",[]],["title/433",[1023,407.123]],["content/433",[49,3.295,53,10.392,89,3.881,140,11.231,222,3.586,224,2.046,254,10.395,258,3.594,284,3.85,397,3.804,399,4.256,400,7.641,575,3.072,578,6.878,689,5.061,707,6.211,766,7.861,838,7.742,842,6.136,847,6.758,849,4.788,851,6.599,895,5.401,925,5.85,1126,6.192,1133,6.47,1142,4.47,1143,6.429,1593,8.725,2023,7.544,2027,9.099,2122,6.313,2123,7.861,2630,8.468,2640,10.392,2647,16.675,3275,7.576,3290,16.675,3432,8.627,3495,11.056,3655,13.806,3661,11.856,3675,11.856,3683,18.009,3684,18.009,3685,12.805,3686,12.805,3687,18.009,3688,11.231,3689,12.805,3690,11.231]],["keywords/433",[]],["title/434",[59,505.351,1151,633.815,1989,710.262]],["content/434",[]],["keywords/434",[]],["title/435",[2042,532.102]],["content/435",[14,7.228,127,5.085,340,4.637,386,10.27,464,5.219,895,6.247,1151,11.541,3472,22.875,3691,17.734,3692,20.833]],["keywords/435",[]],["title/436",[206,404.588,864,353.599,1758,689.056,3693,977.878]],["content/436",[8,3.795,13,2.322,14,8.515,15,3.881,16,1.516,18,3.485,19,2.419,22,1.02,48,8.045,66,3.443,69,5.748,113,2.47,179,5.479,185,6.497,198,4.794,206,7.7,297,4.433,355,4.012,359,6.704,385,3.441,386,5.173,408,4.472,434,5.268,445,3.213,464,5.161,465,3.481,513,7.896,526,4.426,530,6.124,532,5.814,564,6.94,605,5.173,616,2.676,625,9.997,679,4.868,810,4.724,871,7.878,895,3.147,897,3.965,1042,4.222,1074,5.236,1106,7.533,1110,8.571,1113,5.236,1142,8.34,1151,10.31,1163,5.91,1708,5.113,1716,3.355,1831,7.685,1895,7.854,1905,7.394,1970,12.656,1993,9.204,2018,13.629,2025,6.013,2057,8.262,2094,10.361,2211,7.267,2222,9.204,3176,9.716,3691,14.788,3694,8.822,3695,10.494,3696,10.494,3697,10.494,3698,10.494,3699,10.494,3700,10.494,3701,7.854,3702,10.494,3703,10.494,3704,10.494]],["keywords/436",[]],["title/437",[16,250.43]],["content/437",[1,5.577,2,1.882,16,3.274,22,1.758,24,4.683,59,7.986,89,3.896,163,6.015,224,2.947,227,5.813,228,5.021,277,3.812,281,4.168,284,5.436,354,4.461,355,4.652,372,5.58,464,4.53,490,5.045,875,5.045,1023,4.247,1151,10.016,1989,11.224]],["keywords/437",[]],["title/438",[282,329.633]],["content/438",[13,4.251,14,7.101,18,5.131,19,2.857,20,6.393,22,2.335,24,3.211,30,2.49,43,2.045,59,10.14,62,3.222,71,7.633,73,2.694,106,2.835,108,3.839,113,4.523,120,3.489,130,5.58,139,3.576,186,3.856,195,1.067,198,3.558,222,1.236,230,4.198,231,3.109,258,1.554,270,2.436,282,2.357,317,5.394,334,3.209,340,1.734,343,7.136,360,3.489,377,3.985,399,1.591,426,7.128,455,4.094,457,3.489,490,2.173,494,8.006,526,4.995,575,1.869,693,4.036,714,4.838,717,3.886,771,3.348,808,3.319,818,3.67,895,5.762,1007,4.066,1076,5.394,1133,5.547,1142,4.327,1151,14.09,1196,4.463,1281,5.151,1679,3.576,1716,2.49,1875,5.198,1989,13.831,2018,9.077,2094,7.633,2181,5.394,2487,5.488,2851,11.556,3263,3.69,3445,6.547,3471,8.576,3587,6.321,3588,6.321,3589,6.132,3590,6.132,3591,6.321,3592,6.321,3593,6.321,3594,6.547,3691,8.898,3705,7.788,3706,7.788,3707,7.788,3708,7.788,3709,7.788,3710,7.788,3711,7.211]],["keywords/438",[]],["title/439",[1023,407.123]],["content/439",[14,4.932,19,3.276,23,8.542,98,8.824,105,9.035,222,2.255,224,1.615,258,2.836,270,6.887,397,3.002,399,2.903,427,5.156,689,3.994,707,4.901,842,6.595,847,5.333,1133,5.106,1142,4.962,1143,7.136,1151,7.874,1614,7.812,1798,9.035,1800,7.635,1989,8.824,2105,8.726,2108,11.191,2510,8.005,3034,8.542,3275,5.979,3425,9.843,3432,6.809,3602,11.535,3603,11.191,3604,11.535,3605,11.535,3606,11.535,3607,11.535,3608,11.535,3609,11.949,3711,13.16,3712,14.213,3713,14.213,3714,14.213,3715,22.015,3716,22.015,3717,22.015,3718,14.213,3719,14.213,3720,14.213,3721,14.213,3722,14.213,3723,14.213,3724,14.213,3725,14.213,3726,14.213]],["keywords/439",[]],["title/440",[59,377.154,61,298.102,195,116.983,771,367.042,1412,524.187]],["content/440",[2,1.618,3,1.688,6,4.821,11,2.846,16,3.328,19,5.65,22,1.016,23,12.354,24,5.692,30,4.969,31,2.7,43,2.743,49,3.999,59,6.865,60,10.366,61,3.647,62,6.431,67,7.404,70,4.203,106,3.802,130,4.703,195,3.156,196,4.047,207,4.471,222,2.945,224,2.108,238,8.61,250,5.835,251,3.117,258,3.102,263,3.207,272,5.346,275,9.542,277,2.202,307,3.517,312,4.471,318,7.361,321,5.004,332,6.561,340,2.325,368,6.756,380,6.279,399,2.134,404,3.559,427,6.733,434,5.245,448,7.154,465,3.466,490,2.915,550,4.897,579,4.749,615,6.485,616,4.733,678,6.413,736,5.531,829,4.703,831,5.061,957,6.279,1151,5.787,1412,9.542,1637,6.641,1683,7.819,1684,6.155,1876,6.485,1989,6.485,2025,5.986,2055,6.279,3034,12.354,3611,8.478,3612,8.225,3613,8.782]],["keywords/440",[]],["title/441",[16,199.154,2105,846.169]],["content/441",[1,2.442,2,1.128,19,2.498,24,5.42,30,6.691,60,6.052,87,6.634,98,6.727,105,6.888,111,11.695,139,4.976,155,4.277,195,1.485,222,1.719,226,2.442,230,5.408,231,6.375,263,5.822,282,3.037,288,5.619,296,4.261,340,2.412,368,3.944,404,3.692,440,6.187,448,5.558,464,4.751,465,3.595,469,5.891,490,5.291,503,6.806,551,4.394,607,4.832,642,5.737,814,6.888,823,4.786,849,4.052,920,5.697,926,5.619,976,8.152,1021,5.107,1023,2.545,1044,6.155,1303,7.635,1731,9.409,1800,11.985,1885,6.888,2081,6.513,2105,11.642,2422,9.804,2510,11.786,3034,6.513,3122,7.778,3128,8.11,3152,7.778,3411,6.155,3614,8.532,3615,8.532,3616,8.532,3617,8.532,3618,8.532,3619,8.532,3620,8.532,3621,8.532,3622,8.532,3623,8.532,3624,8.532,3625,8.532,3626,10.03,3627,8.532,3628,8.532,3629,12.574,3630,8.532,3631,8.532,3632,8.532,3633,8.532,3634,8.532,3635,8.532,3636,8.532,3637,8.532]],["keywords/441",[]],["title/442",[70,554.539,3322,1056.653]],["content/442",[]],["keywords/442",[]],["title/443",[195,156.745,397,241.681,616,291.743]],["content/443",[2,1.535,3,2.385,7,5.959,8,5.335,31,3.813,49,3.796,127,3.601,195,2.021,274,13.169,289,6.775,397,4.74,399,3.014,469,5.442,546,9.887,616,3.762,1767,23.195,2107,23.195,3727,13.661,3728,21.972,3729,21.059,3730,21.972,3731,14.754,3732,14.754,3733,14.754,3734,14.754,3735,14.754,3736,14.754,3737,14.754]],["keywords/443",[]],["title/444",[2042,532.102]],["content/444",[2,2.13,16,2.957,22,2.377,224,2.325,329,7.959,347,7.376,354,5.05,355,5.266,599,8.837,895,6.137,1026,10.835,1758,14.421,3471,9.972]],["keywords/444",[]],["title/445",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,1758,479.913,3471,331.852]],["content/445",[70,8.382,340,4.637,352,6.015,526,5.912,556,9.076,575,5.927,601,9.664,627,5.301,896,7.764,1133,7.484,3322,15.971]],["keywords/445",[]],["title/446",[22,95.072,347,352.446,895,293.241,1026,517.722]],["content/446",[14,5.697,70,8.573,127,5.201,206,8.817,226,3.7,296,6.457,297,9.003,340,3.655,352,4.741,564,14.093,575,5.113,614,10.439,626,7.617,627,4.178,752,6.433,864,5.938,896,8.816,1049,7.823,1133,5.899,1142,5.733,1151,9.097,1175,9.869,1945,9.41,2094,9.242,2633,12.29,3322,16.336,3484,8.296,3496,10.86,3500,10.081,3501,11.372,3694,13.805,3738,16.42]],["keywords/446",[]],["title/447",[16,250.43]],["content/447",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,70,7.331,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,3322,13.969]],["keywords/447",[]],["title/448",[282,329.633]],["content/448",[2,1.01,3,1.569,14,6.161,18,5.593,19,3.39,20,3.229,22,0.944,36,3.733,70,3.905,86,4.457,123,6.822,136,3.747,168,1.96,195,2.015,206,7.347,219,4.391,222,1.54,226,3.314,235,4.999,258,1.937,274,7.732,282,3.768,283,3.642,329,3.774,330,3.277,340,2.16,345,4.209,347,3.498,352,2.802,354,2.395,355,2.497,397,2.05,399,1.983,421,5.377,422,2.988,426,7.157,427,3.521,428,6.573,464,2.432,556,4.228,568,5.617,575,2.329,601,9.876,627,2.469,689,2.728,693,2.537,714,3.788,851,3.556,875,2.708,895,4.41,896,7.934,908,6.379,1133,6.379,1142,5.135,1535,3.774,1621,5.894,1709,5.214,1716,4.702,1758,12.513,1803,5.102,1875,4.951,1945,8.428,1986,6.025,2018,7.108,2094,8.593,3263,4.599,3322,7.441,3471,4.729,3481,6.17,3483,11.58,3485,7.441,3486,7.441,3487,7.877,3492,6.096,3493,6.025,3494,6.839,3739,8.987,3740,14.928,3741,9.706,3742,8.513,3743,8.987,3744,7.642,3745,8.987]],["keywords/448",[]],["title/449",[1023,407.123]],["content/449",[1,3.623,15,4.002,86,7.384,123,9.751,222,2.551,224,1.827,258,3.209,347,5.796,397,3.397,399,3.285,421,8.908,526,4.563,689,4.519,707,5.545,838,6.912,842,5.478,847,6.034,851,5.892,895,4.822,908,5.777,1023,3.777,1133,5.777,3275,6.765,3277,8.702,3279,9.056,3322,12.327,3323,13.05,3483,12.661,3495,9.872,3496,10.635,3500,9.872,3501,11.136,3742,14.104,3743,14.889,3744,12.661,3745,14.889,3746,16.08,3747,16.08,3748,16.08,3749,16.08,3750,16.08,3751,19.464,3752,14.104]],["keywords/449",[]],["title/450",[3324,1364.669]],["content/450",[]],["keywords/450",[]],["title/451",[195,156.745,397,241.681,616,291.743]],["content/451",[2,2.058,3,3.195,7,7.985,8,8.657,31,5.11,49,5.087,127,4.825,195,2.709,397,5.058,399,4.039,469,7.293,616,5.041,652,6.578,3324,15.567,3753,19.77,3754,19.77]],["keywords/451",[]],["title/452",[2042,532.102]],["content/452",[1,4.205,4,9.95,13,5.113,66,4.12,115,6.954,186,5.806,224,2.12,226,4.205,277,3.934,279,7.6,340,4.154,352,5.387,397,3.942,445,5.714,627,5.88,651,7.537,921,7.986,1063,10.099,3324,14.692,3755,18.66,3756,18.66,3757,18.66]],["keywords/452",[]],["title/453",[16,250.43]],["content/453",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3324,14.46]],["keywords/453",[]],["title/454",[282,329.633]],["content/454",[3,2.14,13,5.075,14,4.595,18,5.581,19,4.25,31,3.422,36,5.093,43,3.477,123,6.143,195,2.526,222,2.101,258,2.643,282,3.507,330,4.471,397,2.797,399,2.705,426,7.47,427,4.804,428,7.851,447,5.246,448,4.609,467,5.37,485,5.769,526,3.758,568,5.057,604,9.497,651,7.447,689,3.722,693,3.461,714,5.168,851,4.852,908,4.757,1196,7.588,1230,9.561,1535,5.149,1716,5.895,1803,6.961,1875,6.207,1917,9.023,3262,5.769,3263,6.274,3324,16.702,3640,9.023,3641,7.336,3758,13.242,3759,12.261,3760,13.242,3761,13.242,3762,12.261,3763,12.261]],["keywords/454",[]],["title/455",[1023,407.123]],["content/455",[15,4.5,123,8.387,222,2.869,224,2.054,258,3.608,397,3.819,399,3.693,601,8.387,604,9.313,632,8.1,689,5.081,707,6.235,838,7.772,842,6.16,847,6.784,851,6.625,3262,7.877,3275,7.606,3279,10.183,3325,16.741,3641,10.016,3759,16.741,3762,16.741,3763,16.741,3764,18.08,3765,19.875,3766,10.454,3767,16.741]],["keywords/455",[]],["title/456",[3328,1364.669]],["content/456",[]],["keywords/456",[]],["title/457",[195,156.745,397,241.681,616,291.743]],["content/457",[2,2.04,3,3.168,7,7.918,8,8.613,31,5.067,49,5.044,127,4.785,195,2.686,397,5.032,399,4.005,469,7.231,616,4.999,652,6.522,1175,11.782,3328,15.435,3768,19.604,3769,19.604]],["keywords/457",[]],["title/458",[2042,532.102]],["content/458",[13,4.568,224,2.346,226,4.653,227,6.639,277,4.353,340,4.596,352,5.961,370,9.251,445,6.322,652,6.87,692,11.01,3328,19.349]],["keywords/458",[]],["title/459",[16,250.43]],["content/459",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3328,14.46]],["keywords/459",[]],["title/460",[282,329.633]],["content/460",[3,2.116,13,4.047,18,5.561,19,4.217,36,5.036,43,3.438,92,5.838,123,6.074,130,5.894,195,1.794,198,5.982,222,2.077,227,5.881,258,2.613,282,3.479,330,4.421,370,9.446,397,2.766,399,2.675,426,7.255,427,4.75,428,7.804,447,5.187,568,5,644,7.303,652,7.015,658,5.247,689,3.68,692,9.755,693,3.422,714,5.11,851,4.797,908,4.704,1074,6.533,1535,5.091,1716,5.849,1803,6.883,1837,6.533,1875,6.158,3065,18.525,3262,5.704,3263,6.204,3328,18.909,3640,8.921,3641,7.253,3770,13.093,3771,12.123]],["keywords/460",[]],["title/461",[1023,407.123]],["content/461",[15,4.465,123,8.322,222,2.847,224,2.038,258,3.58,397,3.79,399,3.665,689,5.042,692,9.567,707,6.187,838,7.712,842,6.112,847,6.732,851,6.574,1175,10.782,3065,14.56,3262,7.816,3275,7.547,3277,9.709,3279,10.104,3641,9.939,3766,10.374,3771,16.611,3772,17.94,3773,17.94,3774,17.754,3775,17.94,3776,17.94,3777,17.94]],["keywords/461",[]],["title/462",[3326,1364.669]],["content/462",[]],["keywords/462",[]],["title/463",[195,156.745,397,241.681,616,291.743]],["content/463",[2,2.075,3,3.223,7,8.054,8,8.702,31,5.153,49,5.13,127,4.867,195,2.732,397,5.084,399,4.073,469,7.355,616,5.085,652,6.634,3326,15.7,3778,19.94]],["keywords/463",[]],["title/464",[2042,532.102]],["content/464",[13,4.693,18,3.644,113,3.838,226,5.627,258,3.254,355,4.195,445,4.993,490,4.55,526,4.627,557,7.169,601,7.564,652,8.308,758,15.593,1021,9.997,1049,7.768,1050,6.831,1364,17.395,2132,8.513,2229,14.234,2248,12.049,3101,15.098,3326,18.564,3779,16.305]],["keywords/464",[]],["title/465",[16,250.43]],["content/465",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3326,14.46]],["keywords/465",[]],["title/466",[282,329.633]],["content/466",[3,2.479,13,4.508,18,5.672,19,4.697,222,2.434,258,4.066,282,3.875,330,5.179,397,3.24,399,3.133,426,7.4,428,7.542,447,6.077,652,7.613,689,4.311,693,4.009,714,7.953,758,13.476,851,5.62,908,5.51,976,6.593,1050,8.536,1535,5.964,1716,6.515,1875,6.86,3262,6.682,3263,7.267,3272,12.076,3326,19.197]],["keywords/466",[]],["title/467",[1023,407.123]],["content/467",[15,4.644,123,8.656,208,7.72,222,2.961,224,2.12,258,3.724,397,3.942,399,3.812,689,5.244,707,6.435,838,8.021,842,6.357,847,7.002,851,6.837,1050,7.817,3262,8.13,3275,7.85,3278,14.305,3279,10.509,3327,17.278,3641,10.338,3646,15.687,3765,16.367,3766,10.79,3780,18.66]],["keywords/467",[]],["title/468",[3781,1520.246]],["content/468",[]],["keywords/468",[]],["title/469",[195,156.745,397,241.681,616,291.743]],["content/469",[16,3.01,113,4.904,127,5.085,185,7.273,195,2.854,222,3.306,224,2.367,397,4.401,448,7.251,652,6.931,1859,11.636,3064,12.652]],["keywords/469",[]],["title/470",[397,366.13]],["content/470",[2,2.208,3,3.428,7,8.568,8,7.67,49,5.458,397,4.481,399,4.333,469,7.825,3782,21.213,3783,21.213]],["keywords/470",[]],["title/471",[2042,532.102]],["content/471",[652,7.123,1163,12.057,1859,11.957,3064,13.002,3781,22.02,3784,18.778,3785,18.778,3786,21.408]],["keywords/471",[]],["title/472",[16,250.43]],["content/472",[1,4.723,2,2.181,16,2.623,22,1.259,24,3.354,66,4.007,79,3.495,89,2.79,163,4.308,196,5.016,222,2.054,224,2.717,226,2.917,227,4.163,228,5.04,277,2.73,279,5.969,281,2.985,284,3.893,303,5.541,354,3.194,355,3.331,359,7.802,372,3.996,445,3.964,464,3.244,465,6.953,490,3.613,652,6.973,875,3.613,894,7.948,896,6.764,1023,3.041,1074,6.46,1163,7.292,1775,6.955,1830,14.514,3064,7.863,3781,18.382,3784,15.92,3787,9.691,3788,8.563,3789,12.947,3790,11.356,3791,12.947,3792,12.947,3793,18.15,3794,12.947,3795,9.691,3796,12.947,3797,12.947,3798,11.988,3799,12.947,3800,12.947,3801,11.988,3802,11.988]],["keywords/472",[]],["title/473",[1023,407.123]],["content/473",[1,4.012,15,4.431,86,8.175,222,2.825,224,2.022,258,3.553,347,6.417,397,3.761,399,3.637,689,5.003,707,6.139,838,7.653,842,6.065,847,6.68,851,6.523,895,5.339,908,6.396,1023,4.182,1133,8.062,1157,14.018,1859,9.944,3261,14.449,3275,7.49,3279,10.027,3803,17.803,3804,14.018,3805,17.803,3806,17.803,3807,17.803,3808,17.803]],["keywords/473",[]],["title/474",[173,366.94,224,111.085,549,621.643,791,576.139]],["content/474",[]],["keywords/474",[]],["title/475",[2042,532.102]],["content/475",[13,3.793,18,3.832,22,1.667,61,7.65,66,3.786,89,3.695,127,4.185,195,2.349,207,7.339,224,1.948,281,3.953,340,3.817,397,3.622,447,6.793,513,10.246,526,6.853,549,10.9,804,7.065,864,6.2,895,5.142,902,7.539,1150,7.626,1165,11.684,2042,5.264,3809,15.877,3810,20.289,3811,15.877,3812,15.877,3813,15.877]],["keywords/475",[]],["title/476",[864,626.718]],["content/476",[127,5.323,224,2.478,226,4.915,445,6.678,549,13.864,752,8.544,875,6.085]],["keywords/476",[]],["title/477",[513,584.809,526,391.149]],["content/477",[6,5.543,14,6.978,22,1.168,61,6.008,66,4.849,69,3.351,108,5.921,112,4.02,127,4.201,144,8.796,155,4.741,168,3.475,179,6.271,186,3.737,195,2.755,288,6.228,340,2.674,363,6.187,424,6.823,427,4.357,513,11.008,518,4.671,526,7.232,549,10.94,557,5.281,633,8.06,714,4.688,731,8.321,813,6.654,902,9.657,920,6.314,921,5.141,926,6.228,1074,8.587,1133,4.315,1150,5.99,1157,9.457,1189,7.998,1859,6.709,1864,8.06,1895,8.99,2003,10.098,2023,7.077,2568,7.544,3140,9.748,3810,20.336,3811,15.935,3812,15.935,3814,12.604,3815,11.121,3816,11.121,3817,11.121,3818,11.121]],["keywords/477",[]],["title/478",[13,253.109,513,485.419,526,324.673]],["content/478",[2,1.99,13,5.749,18,3.119,22,1.357,24,3.615,61,4.873,66,5.426,69,5.335,106,5.08,127,4.667,175,7.611,176,10.989,222,3.034,226,3.145,329,5.427,340,4.256,352,4.03,420,10.221,427,5.063,445,4.274,490,3.894,513,10.768,526,7.374,731,5.775,741,7.611,752,5.468,895,4.185,1074,9.54,1085,9.835,1086,9.835,1150,6.655,1189,5.551,1443,6.194,1736,10.221,1795,8.223,1916,7.189,2106,10.019,2573,8.873,3814,10.221]],["keywords/478",[]],["title/479",[2,78.859,224,86.077,226,170.748,279,249.209,445,232.017,549,481.696]],["content/479",[2,1.347,6,5.975,13,2.864,14,4.492,30,4.14,31,3.346,49,3.331,113,4.272,168,4.231,185,7.317,196,5.016,222,3.325,224,1.471,226,2.917,229,5.424,279,4.258,288,6.714,323,8.038,359,9.009,361,10.799,368,4.713,399,4.281,424,7.355,436,9.691,440,5.016,447,7.191,448,6.317,513,5.493,526,3.674,534,11.356,573,8.038,606,7.556,748,6.955,829,5.829,872,7.628,873,6.102,1088,11.839,1196,7.419,1261,9.123,1443,5.746,1708,8.844,1716,4.14,1765,7.863,2098,10.194,2106,9.294,2234,9.926,3250,11.356,3395,7.292,3801,11.988,3802,11.988,3819,12.947,3820,12.947,3821,12.947,3822,12.947,3823,12.947,3824,12.947,3825,12.947,3826,12.947,3827,12.947,3828,12.947,3829,12.947,3830,12.947,3831,10.194,3832,12.947]],["keywords/479",[]],["title/480",[440,443.265,448,398.191,3395,644.352]],["content/480",[2,0.925,3,2.222,14,3.084,15,3.422,16,1.284,22,1.337,31,2.297,41,9.386,47,4.021,69,2.48,70,6.766,71,8.208,72,8.741,79,2.4,83,4.886,97,3.964,106,3.236,107,4.641,161,3.457,168,4.132,173,5.16,175,4.848,180,4.307,185,4.801,190,6.999,192,4.409,195,1.218,213,5.457,221,4.463,222,1.41,224,1.562,229,3.724,241,3.693,244,6.314,251,4.102,263,2.729,266,4.235,270,2.781,275,5.457,276,5.965,283,3.336,288,4.61,291,5.616,295,7.179,298,6.991,347,3.204,360,3.983,387,4.307,394,3.983,399,1.816,404,3.029,421,4.925,423,5.14,438,5.519,440,7.929,443,5.188,448,6.587,455,7.229,464,2.227,485,8.245,492,6.381,552,4.579,579,4.041,744,6.381,774,6.264,817,12.586,960,5.965,976,8.797,1077,6.51,1088,5.799,1196,5.094,1310,6.057,1348,7.88,1364,5.723,1443,7.463,1445,6.264,1540,14.75,1864,9.227,1928,13.86,1963,7.215,1964,6.264,1974,4.382,2025,5.094,2037,6.057,2275,7.215,2573,5.651,2999,8.231,3395,13.476,3589,6.999,3833,8.889,3834,8.889,3835,8.889,3836,8.889,3837,8.889,3838,8.889,3839,8.231,3840,8.889,3841,8.231,3842,8.231,3843,8.889,3844,8.889]],["keywords/480",[]],["title/481",[16,250.43]],["content/481",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,549,11.675,875,5.124,1023,4.314]],["keywords/481",[]],["title/482",[282,329.633]],["content/482",[1,2.764,6,5.66,13,2.713,14,6.061,15,3.053,18,5.238,19,4.027,22,1.192,24,3.177,41,10.997,106,6.358,113,4.112,155,4.841,168,2.476,173,4.602,192,6.083,199,7.226,222,1.946,258,2.447,277,2.586,282,3.322,288,11.498,343,4.555,399,4.787,400,5.204,424,6.967,426,7.309,440,4.752,447,8.061,467,4.973,485,5.343,513,5.204,526,3.48,549,11.105,846,5.908,1133,4.406,1165,8.357,1716,5.585,1875,5.881,1928,17.839,2456,8.804,3395,11.459,3457,9.402,3579,16.513,3841,11.356,3845,10.758,3846,9.402,3847,12.264,3848,7.895,3849,12.264,3850,8.23]],["keywords/482",[]],["title/483",[173,517.202,3579,1118.642]],["content/483",[16,1.903,25,5.212,31,3.403,42,6.239,66,4.055,67,6.273,69,5.124,89,2.838,92,5.871,168,3.708,173,9.03,174,7.479,192,6.53,214,6.273,216,5.539,220,5.587,222,2.914,226,2.967,265,7.684,282,2.504,312,5.635,335,4.138,340,2.931,341,9.643,374,4.873,385,4.318,394,5.899,396,5.47,399,4.32,411,6.971,440,7.115,468,7.914,469,6.774,481,8.083,541,6.828,546,5.197,569,9.523,578,7.073,594,8.189,615,8.174,632,5.899,748,7.073,803,7.021,808,5.611,816,7.294,824,12.192,827,12.192,833,7.294,897,4.975,1134,8.835,1488,7.073,2193,12.192,2846,8.083,3395,11.911,3579,17.164,3851,13.167,3852,13.167]],["keywords/483",[]],["title/484",[661,514.086,1622,500.408,1910,541.745,3853,857.735]],["content/484",[]],["keywords/484",[]],["title/485",[712,952.57]],["content/485",[1,4.592,2,2.121,16,2.216,18,3.428,20,5.103,22,1.981,66,3.386,106,5.583,136,5.921,181,6.425,195,3.135,211,9.315,222,3.233,224,2.315,241,6.372,258,4.566,261,5.696,277,3.234,281,3.536,307,5.163,329,5.964,354,3.784,355,3.946,408,6.536,434,7.7,467,6.219,489,7.228,529,9.315,597,8.789,651,6.195,681,8.008,761,8.567,901,7.389,1019,10.622,1024,9.874,1044,8.712,1050,6.425,1443,6.807,1622,7.849,1707,8.179,1917,10.451,3854,12.894,3855,11.232]],["keywords/485",[]],["title/486",[2,101.77,195,133.976,1023,229.702,1707,521.453]],["content/486",[2,1.618,3,3.322,22,1.511,79,4.196,106,5.657,195,3.156,222,3.655,228,4.316,238,8.611,258,3.102,261,5.772,270,4.862,354,3.835,355,3.999,359,9.901,408,6.623,490,4.337,556,6.771,641,8.997,642,8.229,644,6.205,679,7.21,697,7.902,871,7.852,879,11.633,897,5.873,973,10.43,1019,10.764,1025,9.762,1042,8.27,1707,12.282,1795,9.157,1888,10.952,2020,6.771,2096,10.43,2240,12.355,3855,11.383,3856,13.067]],["keywords/486",[]],["title/487",[16,165.308,1622,585.453,3853,1003.508]],["content/487",[16,2.005,19,3.198,22,1.349,30,4.436,61,6.648,66,3.063,69,3.871,113,3.266,127,3.386,145,10.911,155,7.516,185,7.59,195,2.609,198,6.339,207,5.938,272,9.744,279,4.563,312,5.938,359,5.964,378,9.776,436,10.384,464,3.476,465,4.603,467,7.721,643,13.996,661,7.294,863,9.176,1021,6.538,1050,7.977,1104,11.664,1278,9.05,1565,8.82,1622,13.521,1765,11.564,1775,10.229,1830,9.608,1948,11.26,2062,14.252,3853,19.07,3857,13.874,3858,13.874,3859,13.874,3860,13.874]],["keywords/487",[]],["title/488",[1050,577.406,1622,705.325]],["content/488",[2,1.155,3,1.793,15,6.206,16,1.603,31,2.867,49,4.181,60,6.197,79,4.386,120,11.172,173,4.163,195,2.226,198,5.069,222,2.578,224,1.26,226,2.5,258,3.242,270,6.62,281,2.557,329,4.314,330,3.746,354,2.737,355,2.854,359,4.769,361,6.601,372,5.015,385,3.638,394,7.279,399,3.927,443,6.475,465,3.681,467,6.589,469,4.092,493,5.916,598,6.968,677,8.572,842,3.78,849,4.149,983,8.125,1044,6.302,1050,9.86,1090,7.142,1134,7.445,1155,9.535,1267,4.707,1401,5.147,1622,11.528,2020,4.833,2240,6.668,3861,9.327,3862,9.327,3863,9.327,3864,9.327,3865,12.793,3866,9.327,3867,9.327,3868,9.327,3869,13.66,3870,9.327,3871,10.903,3872,8.505,3873,9.327,3874,9.327,3875,9.327,3876,9.327,3877,9.327,3878,9.327,3879,9.327]],["keywords/488",[]],["title/489",[895,519.739]],["content/489",[3,2.128,18,2.943,22,2.056,30,4.21,49,5.441,195,1.804,224,1.496,235,6.782,241,5.47,261,4.89,270,4.119,298,6.695,307,4.433,321,6.307,367,8.019,384,8.476,422,6.51,464,5.733,465,4.368,552,6.782,557,5.789,626,9.81,680,9.278,833,7.294,841,6.971,872,7.758,895,7.217,896,7.881,900,11.535,918,8.972,921,7.86,1050,5.516,1091,7.237,1121,6.273,1126,4.527,1142,6.412,1155,10.488,1293,13.183,1707,7.021,1731,10.82,1800,11.36,1910,7.294,3249,12.941,3795,9.855,3880,11.069,3881,15.439,3882,9.643]],["keywords/489",[]],["title/490",[751,837.857,1622,585.453,3883,856.309]],["content/490",[18,4.656,22,2.025,224,2.367,235,10.731,404,7.098,525,14.954,616,5.312,751,15.257,1622,10.661,2034,16.403,3787,15.593,3883,15.593]],["keywords/490",[]],["title/491",[16,199.154,258,275.056]],["content/491",[3,3.25,17,10.092,18,3.361,19,3.467,20,5.004,30,4.809,42,7.126,49,3.87,73,5.202,98,9.337,120,11.296,173,5.644,195,2.061,224,1.709,230,5.093,235,7.747,263,4.617,282,2.86,320,7.459,409,8.14,426,5.865,469,5.548,490,4.197,803,8.02,835,11.524,895,4.51,896,5.605,1044,8.543,1050,9.492,1155,9.974,1393,7.747,1401,6.977,1551,10.092,1622,7.696,1716,4.809,1875,5.063,2606,10.416,3249,10.598,3882,11.015,3884,11.257,3885,12.644,3886,12.644,3887,10.416]],["keywords/491",[]],["title/492",[16,199.154,397,291.165]],["content/492",[3,2.431,13,3.327,14,5.219,18,4.495,19,3.467,20,5.004,22,2.203,31,3.887,42,7.126,49,5.175,70,6.051,79,4.06,113,4.734,120,9.01,226,5.106,282,2.86,368,5.474,399,4.108,422,4.63,424,8.543,426,6.607,464,5.039,689,4.227,744,10.796,746,6.804,835,10.795,1050,6.301,1155,9.974,1716,4.809,1800,12.172,1875,5.063,1910,8.332,3884,11.257,3888,12.644,3889,12.207,3890,16.323,3891,11.53]],["keywords/492",[]],["title/493",[276,767.708,652,380.65,3330,821.254]],["content/493",[]],["keywords/493",[]],["title/494",[2042,532.102]],["content/494",[8,6.747,13,5.113,22,1.814,31,4.823,276,12.521,297,7.883,352,5.387,422,5.744,445,5.714,526,7.124,550,8.747,652,8.353,1020,10.256,1042,7.507,1267,7.917,1488,10.024,2248,10.6,3330,13.395,3892,17.278,3893,16.367]],["keywords/494",[]],["title/495",[16,250.43]],["content/495",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,276,12.227,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,3330,13.08]],["keywords/495",[]],["title/496",[282,329.633]],["content/496",[2,1.29,13,4.528,18,4.979,19,4.057,31,3.204,79,3.346,136,4.785,195,2.804,222,1.967,226,3.966,258,2.474,277,2.613,281,2.857,282,3.347,303,5.305,330,4.185,399,2.532,400,5.259,404,4.223,426,6.861,427,4.497,428,7.575,458,5.475,516,6.923,518,4.82,552,6.385,616,3.161,627,4.478,652,4.124,682,7,689,4.947,693,3.24,714,4.838,837,10.927,851,4.542,908,4.453,1141,7.88,1267,8.683,1488,6.658,1535,4.82,1679,5.692,1716,5.628,1755,8.085,1757,9.078,1875,5.925,3262,5.4,3263,5.873,3330,8.898,3492,7.785,3493,7.695,3494,8.734,3892,20.629,3893,15.438,3894,12.395,3895,12.395,3896,11.477,3897,20.466,3898,11.477]],["keywords/496",[]],["title/497",[1023,407.123]],["content/497",[25,4.761,89,3.615,123,10.023,195,2.298,222,3.792,224,1.906,229,7.028,254,10.781,258,3.348,284,5.044,397,3.544,399,4.414,400,7.118,458,7.41,689,6.072,707,5.785,838,7.211,842,5.715,847,6.295,851,6.147,1267,7.118,2125,9.981,3262,7.309,3275,7.057,3277,9.079,3330,12.042,3331,15.533,3432,8.036,3565,15.533,3893,14.715,3896,15.533,3898,20.006]],["keywords/497",[]],["title/498",[3295,1297.249]],["content/498",[]],["keywords/498",[]],["title/499",[19,263.73,195,156.745,616,291.743]],["content/499",[2,2.208,3,2.635,16,2.356,19,5.435,22,1.585,23,14.17,24,6.107,30,5.213,31,4.214,67,7.768,127,5.177,155,6.436,195,2.234,196,6.317,222,2.587,224,1.852,275,10.01,282,3.101,363,8.399,368,7.721,448,7.383,616,5.409,908,7.621,920,8.572,1876,10.123,2067,10.941,2105,10.01,3034,9.8,3295,12.204,3899,13.708,3900,15.098]],["keywords/499",[]],["title/500",[2042,532.102]],["content/500",[1,4.309,2,1.99,22,2.281,24,4.953,162,7.911,224,2.665,297,8.078,354,4.718,355,4.919,386,9.426,457,8.566,526,5.426,597,10.957,836,11.492,895,5.734,1916,9.849,2067,12.83,3295,17.558,3471,9.316]],["keywords/500",[]],["title/501",[16,250.43]],["content/501",[1,5.233,2,1.958,16,3.356,22,1.829,89,4.054,224,2.989,228,5.224,277,4.896,281,4.336,284,5.655,354,4.641,355,4.84,464,4.713,490,5.249,875,5.249,1023,4.419,3295,17.383]],["keywords/501",[]],["title/502",[282,329.633]],["content/502",[6,6.422,13,4.56,16,2.011,18,4.264,19,4.398,20,7.795,22,1.353,23,8.363,24,4.942,30,4.449,31,3.596,43,2.37,60,10.657,62,3.735,71,8.275,73,3.123,106,5.065,108,4.45,120,9.234,130,6.264,139,4.145,186,4.329,195,1.237,198,4.124,222,1.432,229,3.782,230,4.712,231,3.604,238,7.709,258,1.802,270,4.353,281,2.081,282,2.646,317,6.252,334,3.72,340,2.009,354,2.227,360,4.044,368,6.18,377,4.62,399,1.844,426,5.564,427,5.048,455,4.746,490,2.519,494,8.805,575,2.166,609,6.611,615,8.639,714,5.431,717,4.504,771,7.299,808,3.847,818,4.254,835,6.629,836,5.426,875,2.519,1007,4.713,1076,6.252,1133,6.1,1196,5.173,1267,3.83,1281,5.97,1412,8.543,1679,4.145,1716,4.449,1875,4.685,2067,9.337,2181,6.252,2240,5.426,2487,6.361,2851,12.709,3034,8.363,3263,4.277,3295,12.709,3471,4.399,3587,7.327,3588,7.327,3589,7.108,3590,7.108,3591,7.327,3592,7.327,3593,7.327,3595,7.327,3596,7.327,3597,7.327,3598,7.327,3599,7.327,3600,7.589,3901,7.327,3902,8.359]],["keywords/502",[]],["title/503",[1023,407.123]],["content/503",[120,8.783,222,3.11,224,2.227,258,3.912,397,4.141,399,4.005,689,5.509,707,6.76,838,8.427,842,6.679,847,7.356,1910,10.86,3275,8.247,3301,17.195,3432,9.391,3592,15.91,3594,16.481,3902,18.152,3903,19.604]],["keywords/503",[]],["title/504",[24,253.302,771,420.36,1412,600.333,3295,731.918]],["content/504",[2,1.297,3,1.267,11,2.136,16,2.785,19,5.148,23,10.618,24,5.785,30,6.563,31,2.026,49,2.017,60,9.868,87,5.177,98,4.868,105,4.984,106,2.854,111,9.126,139,3.6,155,3.095,195,2.641,196,3.038,207,3.356,222,1.977,224,1.762,226,1.767,230,4.22,231,4.975,238,6.904,251,2.339,258,1.565,263,4.761,275,7.65,282,2.37,288,4.066,296,3.083,312,3.356,318,5.525,321,3.756,332,4.924,340,2.774,343,2.912,368,7.017,380,4.712,404,4.245,427,4.521,440,4.828,448,7.144,464,3.885,465,2.601,469,4.597,490,4.93,503,4.924,551,3.179,607,3.496,642,4.151,736,4.151,814,4.984,849,2.932,920,4.122,926,4.066,957,4.712,976,6.666,1021,3.695,1044,4.454,1303,5.525,1412,7.65,1637,4.984,1683,5.869,1731,7.342,1800,10.356,1876,4.868,1885,4.984,2025,4.493,2067,8.362,2081,4.712,2105,10.846,2422,7.65,2510,9.95,3034,11.586,3122,5.628,3128,5.869,3152,5.628,3295,9.327,3411,4.454,3612,6.174,3614,6.174,3615,6.174,3616,6.174,3617,6.174,3618,6.174,3619,6.174,3620,6.174,3621,6.174,3622,6.174,3623,6.174,3624,6.174,3625,6.174,3626,7.827,3627,6.174,3628,6.174,3629,9.812,3630,6.174,3631,6.174,3632,6.174,3633,6.174,3634,6.174,3635,6.174,3636,6.174,3637,6.174,3899,6.592]],["keywords/504",[]],["title/505",[3335,1406.653]],["content/505",[]],["keywords/505",[]],["title/506",[195,156.745,397,241.681,616,291.743]],["content/506",[2,1.839,3,2.855,7,7.136,8,6.389,31,4.566,49,4.546,75,10.311,127,4.312,195,2.421,397,4.718,399,3.609,469,6.517,616,4.505,2223,14.853,3904,17.668,3905,17.668,3906,17.668,3907,17.668,3908,17.668,3909,17.668,3910,17.668,3911,17.668,3912,17.668,3913,17.668,3914,17.668,3915,17.668,3916,17.668,3917,17.668,3918,17.668,3919,17.668,3920,17.668]],["keywords/506",[]],["title/507",[2042,532.102]],["content/507",[13,4.693,22,2.062,224,2.41,340,4.722,352,6.124,526,6.02,652,7.058,3335,20.265,3921,21.213]],["keywords/507",[]],["title/508",[16,250.43]],["content/508",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3335,14.905]],["keywords/508",[]],["title/509",[282,329.633]],["content/509",[3,2.128,13,4.063,18,5.114,19,4.233,22,1.28,43,3.457,52,5.339,66,2.907,115,4.907,195,2.516,222,2.089,226,2.967,258,2.628,276,8.835,277,2.776,282,3.493,330,4.446,355,3.388,397,2.781,399,2.69,426,7.018,428,7.827,526,3.737,550,6.172,551,5.339,568,7.013,652,7.036,689,3.701,693,3.442,714,5.139,829,10.834,851,4.825,860,11.445,908,4.73,1155,10.488,1401,6.108,1535,5.12,1716,5.872,1803,6.922,1875,6.183,2959,11.549,3064,12.844,3262,5.736,3263,6.239,3272,10.367,3335,17.164,3922,13.167]],["keywords/509",[]],["title/510",[1023,407.123]],["content/510",[15,4.798,222,3.059,224,2.19,258,3.847,397,4.073,399,3.938,400,8.18,689,5.418,707,6.648,838,8.287,842,6.568,847,7.234,851,7.064,1190,16.91,3064,11.708,3275,8.11,3278,14.779,3336,17.851,3923,17.851,3924,19.279,3925,19.279]],["keywords/510",[]],["title/511",[3332,989.405,3333,911.566]],["content/511",[]],["keywords/511",[]],["title/512",[195,156.745,397,241.681,616,291.743]],["content/512",[2,1.974,3,3.065,7,7.66,8,6.857,31,4.901,49,4.879,70,7.63,127,4.629,195,2.598,397,4.931,399,3.874,469,6.996,526,5.382,556,8.262,616,4.836,1696,12.726,3332,13.613,3926,18.964,3927,18.964,3928,18.964,3929,18.964,3930,18.964]],["keywords/512",[]],["title/513",[2042,532.102]],["content/513",[2,2.37,22,1.772,161,7.086,195,2.496,222,2.891,345,7.903,347,8.207,354,4.496,355,4.688,396,7.57,616,4.647,627,4.636,641,7.975,642,9.647,895,5.464,896,6.79,908,8.18,921,7.799,1020,10.015,2042,5.594,3332,13.08,3440,12.227,3471,8.878,3484,9.206,3931,12.84]],["keywords/513",[]],["title/514",[1020,757.532,3471,671.584]],["content/514",[2,2.149,14,7.164,22,2.007,70,8.307,340,4.596,352,5.961,354,5.094,355,5.313,526,6.974,1696,13.855,3332,14.822,3471,10.061]],["keywords/514",[]],["title/515",[16,141.294,347,352.446,627,248.809,896,364.419]],["content/515",[1,2.561,14,3.944,16,1.642,18,2.54,19,2.62,31,2.937,66,2.509,69,4.614,70,7.843,115,4.235,127,4.036,147,6.105,205,7.752,224,1.879,226,2.561,229,4.761,276,11.097,322,8.949,326,6.762,340,2.53,347,4.096,352,4.774,355,5.016,359,4.886,361,6.762,422,3.499,445,3.48,518,4.42,526,5.532,550,7.752,557,4.997,601,5.272,616,2.898,627,6.387,634,7.517,644,4.537,652,7.568,731,8.065,752,4.452,771,8.38,864,4.11,875,3.171,896,7.265,1021,5.356,1155,9.668,1443,5.044,1696,11.097,1812,6.902,2229,7.627,2271,8.159,2275,9.224,2811,9.224,3053,7.056,3063,9.969,3332,13.993,3333,15.044,3932,11.365,3933,10.524,3934,9.555,3935,7.414,3936,16.537,3937,16.537,3938,11.365,3939,11.365]],["keywords/515",[]],["title/516",[16,250.43]],["content/516",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,3332,13.08,3333,12.051]],["keywords/516",[]],["title/517",[282,329.633]],["content/517",[1,2.816,3,0.73,14,2.73,15,2.6,16,0.653,18,3.165,19,1.814,22,1.511,30,3.34,31,1.168,33,4.728,41,2.241,43,2.066,49,2.024,52,5.067,69,2.915,70,5.027,75,2.637,97,3.508,103,1.951,110,5.857,112,2.633,113,2.941,115,1.684,123,2.097,136,1.745,139,4.797,195,2.952,197,4.469,222,2.651,224,1.419,226,3.191,230,4.231,246,4.394,258,0.902,263,2.415,266,3.748,268,3.893,270,1.414,274,2.376,282,1.496,289,2.075,312,4.471,326,2.689,329,1.757,330,4.781,340,2.781,343,2.922,347,1.629,360,4.68,394,4.68,397,0.955,399,0.923,400,1.918,404,2.68,421,2.504,422,5.143,426,5.994,427,4.533,428,7.802,437,6.394,448,4.349,464,1.971,465,5.872,469,1.667,491,2.839,520,4.681,526,3.546,551,3.19,556,1.969,568,5.408,575,1.888,627,2.002,632,3.525,652,4.711,654,4.08,682,3.129,689,2.936,693,1.181,707,1.559,714,4.877,720,5.132,721,5.15,761,2.524,791,6.155,818,3.708,829,2.035,846,6.019,851,1.656,895,1.355,896,2.932,906,3.525,908,1.624,909,2.524,924,3.383,925,2.065,930,2.41,943,7.361,998,4.728,1042,4.203,1091,2.484,1155,6.197,1535,1.757,1614,2.484,1625,12.238,1677,6.614,1679,3.612,1696,3.033,1707,4.195,1709,4.226,1716,2.515,1796,4.778,1875,2.648,1973,2.689,1974,6.981,2084,3.964,2223,6.614,2444,3.31,2455,5.279,2559,3.079,2608,4.508,2739,3.799,2959,3.964,2986,3.465,3124,2.806,3133,14.045,3262,5.444,3263,2.141,3332,11.992,3333,8.264,3442,3.799,3492,7.848,3493,7.757,3678,9.163,3940,4.519,3941,4.519,3942,4.519,3943,3.799,3944,3.558,3945,18.491,3946,11.569,3947,4.519,3948,15.542,3949,4.519,3950,5.448,3951,9.579,3952,4.519,3953,4.519,3954,7.867,3955,4.519,3956,4.519,3957,4.519,3958,4.519,3959,7.867,3960,4.519,3961,4.519,3962,4.185,3963,4.519,3964,4.519,3965,4.519,3966,3.13,3967,4.519,3968,4.519,3969,3.383,3970,4.519,3971,4.519,3972,4.185,3973,3.964]],["keywords/517",[]],["title/518",[1023,407.123]],["content/518",[1,2.243,70,4.005,86,4.571,89,2.145,113,2.343,222,2.379,224,1.131,254,4.967,258,1.987,284,2.993,347,3.588,386,4.908,397,5.538,399,2.034,400,10.998,465,3.302,632,4.46,689,7.367,707,3.433,838,4.279,842,3.391,847,9.837,851,9.605,895,2.985,908,3.576,1023,2.338,1625,7.838,2125,8.919,3133,8.369,3262,6.531,3273,6.252,3275,4.188,3277,5.387,3279,5.607,3332,7.146,3334,8.732,3456,11.493,3503,11.804,3944,7.838,3945,9.217,3946,9.217,3966,6.894,3974,9.955,3975,9.955,3976,9.955,3977,9.955,3978,9.955,3979,9.955,3980,9.955,3981,9.955,3982,9.955,3983,9.955,3984,9.955,3985,9.955,3986,9.955,3987,9.955,3988,9.955,3989,9.955,3990,9.955,3991,9.955,3992,9.955,3993,9.955,3994,9.955,3995,9.955,3996,9.955,3997,8.369,3998,9.955,3999,9.955,4000,9.955,4001,9.955]],["keywords/518",[]],["title/519",[2043,1269.296]],["content/519",[]],["keywords/519",[]],["title/520",[195,156.745,397,241.681,616,291.743]],["content/520",[16,2.983,127,5.04,185,7.209,195,3.367,222,3.899,224,2.346,230,6.992,289,9.481,397,4.362,447,8.18,2043,15.121]],["keywords/520",[]],["title/521",[397,366.13]],["content/521",[2,1.839,3,2.855,7,7.136,8,6.389,49,4.546,229,9.356,246,12.473,397,3.732,399,3.609,447,7,469,6.517,526,5.014,746,7.993,2043,16.355,4002,17.668,4003,17.668,4004,17.668,4005,17.668,4006,17.668,4007,17.668,4008,17.668,4009,17.668,4010,20.678,4011,22.332,4012,22.332,4013,17.668]],["keywords/521",[]],["title/522",[2042,532.102]],["content/522",[2,2.158,22,2.016,71,6.832,160,10.869,161,6.126,195,2.158,222,2.5,226,3.55,321,7.546,340,3.507,345,6.832,347,5.678,354,3.887,355,4.053,367,5.974,396,6.545,422,4.849,515,8.061,575,3.78,616,4.017,627,5.899,641,6.894,642,8.34,656,13.244,675,10.014,810,7.092,894,9.671,895,6.219,896,7.729,908,8.329,921,6.742,1293,11.308,2042,4.836,2043,11.537,3274,11.1,3471,7.676,3484,7.959,3931,11.1]],["keywords/522",[]],["title/523",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,2043,498.782,3471,331.852]],["content/523",[160,9.854,385,6.894,526,5.965,575,5.043,627,5.349,1294,15.395,1604,17.501,1762,15.084,2043,15.395]],["keywords/523",[]],["title/524",[1,139.372,16,89.367,22,60.132,224,70.26,347,222.918,627,157.369,896,230.491,3274,435.82]],["content/524",[375,11.659,526,6.02,575,5.089,627,6.353,896,7.905,1604,14.947,2043,18.287,3274,14.947]],["keywords/524",[]],["title/525",[16,250.43]],["content/525",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,894,11.275,1023,4.314]],["keywords/525",[]],["title/526",[864,626.718]],["content/526",[22,1.99,185,7.145,289,9.398,296,8.048,330,6.91,427,7.425,428,7.575,447,8.108,895,6.137,1350,13.945,2963,16.114,3484,10.34,4014,20.466,4015,20.466]],["keywords/526",[]],["title/527",[1023,407.123]],["content/527",[1,3.836,15,4.236,86,7.816,123,7.896,222,2.701,224,1.934,258,3.397,289,7.816,347,6.135,397,3.596,399,3.477,447,6.744,689,4.784,707,5.87,838,7.317,842,5.799,847,6.387,851,6.237,895,5.104,908,6.115,1023,3.998,1133,7.835,1142,5.943,2125,10.127,3262,7.416,3275,7.161,3279,9.587,3456,13.049,3804,13.402,4016,17.021,4017,15.76,4018,14.93,4019,17.021,4020,14.93,4021,14.31,4022,15.76]],["keywords/527",[]],["title/528",[894,1064.028]],["content/528",[]],["keywords/528",[]],["title/529",[195,156.745,397,241.681,616,291.743]],["content/529",[2,1.212,3,1.883,7,4.706,8,4.213,16,1.683,43,3.059,49,2.997,127,4.109,160,5.461,185,4.067,195,2.307,206,4.82,208,6.966,222,2.671,224,1.323,230,3.945,246,13.372,250,6.507,259,8.068,287,4.986,365,11.135,397,4.575,399,2.38,400,4.943,440,4.514,447,7.833,448,4.055,465,3.865,469,4.297,518,4.53,575,2.795,602,8.616,616,2.971,677,5.195,761,12.096,791,6.864,894,7.152,964,11.082,1032,7.705,1105,7.002,1114,9.173,1155,11.874,1278,12.896,1294,12.33,1761,10.219,1762,7.075,1945,6.676,2439,9.173,2470,15.617,3122,8.363,3262,5.076,4021,9.794,4023,11.65,4024,20.052,4025,10.787,4026,11.65,4027,10.219,4028,11.65,4029,11.65,4030,11.65,4031,11.65,4032,11.65]],["keywords/529",[]],["title/530",[2042,532.102]],["content/530",[2,2.158,22,2.016,71,6.832,160,10.869,161,6.126,195,2.158,222,2.5,226,3.55,321,7.546,340,3.507,345,6.832,347,5.678,354,3.887,355,4.053,367,5.974,396,6.545,422,4.849,515,8.061,575,3.78,616,4.017,627,5.899,641,6.894,642,8.34,656,13.244,675,10.014,810,7.092,894,12.732,895,6.219,896,7.729,908,8.329,921,6.742,1293,11.308,2042,4.836,3274,11.1,3471,7.676,3484,7.959,3931,11.1]],["keywords/530",[]],["title/531",[2,70.881,22,66.215,354,168.042,355,175.235,894,418.12,895,204.236,3471,331.852]],["content/531",[160,10.656,198,9.228,206,8.357,226,4.552,228,4.204,281,3.49,340,3.37,355,5.849,359,6.507,526,4.296,533,6.916,575,5.454,626,7.022,627,6.429,679,7.022,698,7.85,700,10.315,707,5.22,849,5.661,894,14.889,1042,6.09,1155,11.274,1189,6.02,1294,11.086,1539,11.086,1604,14.233,1762,9.194,1837,7.553,3274,10.667,3484,7.648,4033,15.138,4034,14.017,4035,11.33,4036,14.017,4037,15.138]],["keywords/531",[]],["title/532",[1,139.372,16,89.367,22,60.132,224,70.26,347,222.918,627,157.369,896,230.491,3274,435.82]],["content/532",[22,1.705,160,8.22,198,8.011,340,3.903,526,4.976,537,12.587,575,5.333,579,7.971,627,6.528,652,5.834,700,11.948,894,13.645,896,8.283,903,13.124,1189,6.974,1294,12.841,1604,15.661,1762,10.649,1943,10.048,3274,12.356,4034,16.236,4035,13.124,4036,16.236,4038,16.236,4039,17.535,4040,17.535]],["keywords/532",[]],["title/533",[16,250.43]],["content/533",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,894,11.275,1023,4.314]],["keywords/533",[]],["title/534",[282,329.633]],["content/534",[2,0.888,3,1.379,16,1.233,18,4.755,19,3.07,20,2.838,22,1.295,30,4.258,31,2.205,52,3.459,67,4.064,86,3.917,97,3.804,105,8.466,110,7.679,160,3.999,168,1.722,195,2.244,222,2.113,224,0.969,226,1.922,230,5.548,258,1.702,263,2.619,279,2.806,282,3.521,283,3.201,329,3.317,330,4.497,334,3.515,347,5.904,352,2.463,354,2.105,355,2.195,360,3.822,397,4.241,399,1.743,422,2.626,426,6.204,427,3.095,428,6.063,437,4.365,448,4.635,464,2.137,465,2.83,469,3.147,515,4.365,516,4.765,540,6.452,568,5.086,579,6.054,616,2.175,627,4.168,656,7.172,689,3.743,693,2.23,714,3.33,761,7.438,810,3.84,814,5.423,851,3.126,875,2.38,894,13.644,895,6.38,896,6.105,908,5.885,921,3.651,964,4.365,1042,5.358,1133,4.784,1294,16.84,1344,8.088,1535,3.317,1621,5.181,1716,4.258,1748,4.206,1809,8.364,1875,4.483,1973,5.076,2255,9.968,3262,3.717,3263,4.042,3274,6.011,3411,4.846,3471,4.157,3492,5.358,3493,5.296,3804,6.717,3951,6.54,4020,11.681,4021,16.878,4041,8.531,4042,8.531,4043,8.531,4044,7.899,4045,7.899,4046,8.531,4047,8.531]],["keywords/534",[]],["title/535",[1023,407.123]],["content/535",[1,3.836,15,4.236,86,7.816,123,7.896,222,2.701,224,1.934,258,3.397,347,6.135,397,3.596,399,3.477,689,4.784,707,5.87,838,7.317,842,5.799,847,6.387,851,6.237,895,5.104,908,6.115,1023,3.998,1133,7.835,1142,5.943,1294,12.465,1809,10.691,2125,10.127,3262,7.416,3275,7.161,3279,9.587,3337,15.76,3456,13.049,3804,13.402,4017,15.76,4018,14.93,4020,14.93,4022,15.76,4045,15.76,4048,17.021]],["keywords/535",[]],["title/536",[3338,1406.653]],["content/536",[]],["keywords/536",[]],["title/537",[195,156.745,397,241.681,616,291.743]],["content/537",[2,2.04,3,3.168,7,7.918,8,7.089,19,5.491,22,1.906,31,5.067,49,5.044,127,4.785,208,8.111,224,2.227,375,13.091,399,4.005,469,7.231,714,7.651,3338,15.91,4049,19.604]],["keywords/537",[]],["title/538",[2042,532.102]],["content/538",[224,2.388,226,4.737,277,4.432,340,4.679,352,6.069,445,6.437,526,5.965,652,6.994,896,7.834,3338,20.157]],["keywords/538",[]],["title/539",[16,250.43]],["content/539",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3338,14.905]],["keywords/539",[]],["title/540",[282,329.633]],["content/540",[18,5.492,19,4.76,22,2.007,41,11.461,97,6.977,112,5.237,113,4.86,160,9.679,195,2.144,258,3.123,282,3.927,291,4.294,397,4.362,399,3.196,426,7.449,652,6.87,895,6.192,896,7.695,1155,7.76,1190,18.111,1716,6.602,1859,11.532,1875,6.951,3457,11.996,4050,15.647,4051,14.488,4052,14.488]],["keywords/540",[]],["title/541",[1023,407.123]],["content/541",[15,4.798,41,9.561,113,4.538,160,9.037,222,3.059,224,2.19,258,3.847,397,4.073,399,3.938,707,6.648,838,8.287,842,6.568,847,7.234,3275,8.11,3277,10.434,4051,17.851,4052,17.851,4053,19.279,4054,19.279,4055,19.279,4056,19.279]],["keywords/541",[]],["title/542",[59,505.351,61,399.429,1150,398.191]],["content/542",[]],["keywords/542",[]],["title/543",[2042,532.102]],["content/543",[13,3.711,20,5.582,22,2.101,24,4.345,31,4.336,62,10.443,106,6.106,186,5.219,206,6.941,224,1.906,316,6.572,513,10.141,526,6.783,575,4.025,627,5.497,651,8.727,749,8.32,895,5.031,902,7.376,1133,6.027,1150,7.52,1598,10.082,1991,10.943,2020,7.309,3578,12.286,4057,16.776,4058,16.776,4059,12.861]],["keywords/543",[]],["title/544",[16,250.43]],["content/544",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,1991,11.98]],["keywords/544",[]],["title/545",[282,329.633]],["content/545",[6,6.182,13,4.931,16,1.935,18,3.679,19,4.284,20,7.101,22,1.807,23,8.05,24,4.814,30,2.748,31,4.254,43,2.257,59,3.796,60,10.38,61,3,62,9.221,71,8.06,73,2.973,106,4.875,108,4.237,113,3.153,120,3.85,130,10.033,139,3.946,155,3.392,186,2.674,195,1.835,198,3.926,206,3.556,222,2.612,229,3.6,230,4.536,231,3.431,238,7.42,258,1.715,270,2.688,282,2.547,288,4.456,317,5.952,334,3.541,340,1.913,360,3.85,368,4.875,377,4.398,399,1.756,426,6.499,427,5.971,455,4.518,490,2.398,494,8.535,513,5.683,526,3.801,550,4.029,575,2.062,609,6.294,615,8.315,714,5.228,717,4.288,771,3.694,808,3.662,818,4.05,835,6.381,858,4.84,1007,4.487,1076,5.952,1133,3.087,1150,4.662,1196,4.925,1267,3.646,1412,8.223,1679,3.946,1716,4.283,1875,4.509,2181,5.952,2487,6.056,2851,12.319,3034,8.05,3263,4.072,3445,7.225,3587,6.975,3588,6.975,3589,6.767,3590,6.767,3591,6.975,3592,6.975,3593,6.975,3594,7.225,3595,6.975,3596,6.975,3597,6.975,3598,6.975,3599,6.975,3600,7.225,3601,7.957,4060,7.225]],["keywords/545",[]],["title/546",[1023,407.123]],["content/546",[13,3.836,14,4.211,19,2.798,23,7.294,62,8.369,89,3.736,98,7.535,105,7.715,130,5.464,136,4.685,139,5.573,155,4.79,220,5.149,222,3.21,224,1.379,254,8.651,258,2.422,284,3.649,345,5.264,397,2.564,399,3.542,427,4.403,477,9.304,526,4.92,578,6.519,689,3.411,707,4.185,838,5.217,842,5.907,847,4.554,849,4.538,1143,6.093,1230,8.991,1614,6.67,1798,7.715,1800,6.519,1991,7.917,2105,7.451,2108,9.556,2510,9.765,3034,7.294,3275,5.106,3297,11.237,3432,5.814,3513,15.14,3602,9.85,3603,9.556,3604,9.85,3605,9.85,3606,9.85,3607,9.85,3608,9.85,3609,10.203,3610,11.237,4060,10.203,4061,11.237,4062,11.237,4063,11.237,4064,11.237,4065,11.237,4066,11.237,4067,11.237,4068,11.237,4069,11.237,4070,11.237,4071,11.237,4072,16.054,4073,10.645,4074,10.203,4075,11.237,4076,11.237,4077,11.237,4078,11.237,4079,11.237,4080,11.237,4081,11.237,4082,11.237]],["keywords/546",[]],["title/547",[59,377.154,61,298.102,195,116.983,771,367.042,1412,524.187]],["content/547",[1,1.552,2,1.479,3,1.113,6,3.179,11,1.877,16,2.95,19,5.075,22,0.67,23,9.851,24,5.703,30,6.19,31,1.78,43,1.809,49,2.889,59,3.043,60,9.155,61,2.405,62,4.646,67,5.349,70,2.771,87,4.665,98,4.277,105,4.379,106,2.507,111,8.223,130,3.101,139,3.163,155,2.719,195,2.797,196,2.669,207,2.948,222,2.601,224,1.615,226,1.552,230,3.802,231,4.483,238,6.22,250,3.847,251,2.055,258,2.241,263,5.032,272,3.525,275,6.893,277,1.452,282,2.135,288,3.572,296,2.709,307,2.319,312,2.948,318,4.854,321,3.3,332,4.327,340,2.499,368,5.966,380,4.14,399,1.407,404,3.825,427,5.156,434,3.458,440,4.35,448,6.738,464,3.561,465,3.725,469,4.142,490,4.573,503,4.327,550,3.229,551,2.793,579,3.132,607,3.072,615,4.277,616,3.624,642,3.647,678,4.229,736,3.647,814,4.379,823,3.043,829,3.101,849,2.576,920,3.621,926,3.572,957,4.14,976,6.11,1021,3.246,1023,1.618,1044,3.913,1303,4.854,1412,6.893,1637,4.379,1683,5.156,1684,4.059,1731,6.615,1800,9.697,1876,4.277,1885,4.379,1991,7.324,2025,3.947,2055,4.14,2081,4.14,2105,10.063,2422,6.893,2510,9.232,3034,10.849,3122,4.945,3128,5.156,3152,4.945,3411,3.913,3611,5.591,3612,5.424,3613,5.791,3614,5.424,3615,5.424,3616,5.424,3617,5.424,3618,5.424,3619,5.424,3620,5.424,3621,5.424,3622,5.424,3623,5.424,3624,5.424,3625,5.424,3626,7.052,3627,5.424,3628,5.424,3629,8.841,3630,5.424,3631,5.424,3632,5.424,3633,5.424,3634,5.424,3635,5.424,3636,5.424,3637,5.424]],["keywords/547",[]],["title/548",[16,109.486,513,321.5,526,215.036,771,325.727,1150,263.728,4083,701.608]],["content/548",[2,1.618,4,5.571,13,3.439,15,5.116,16,3.175,19,3.583,22,2.136,24,2.706,25,4.411,36,4.018,62,4.322,83,5.742,106,6.756,127,2.55,136,4.033,159,8.225,162,4.322,222,1.658,226,2.354,230,3.538,241,4.34,258,2.085,321,5.004,326,6.215,329,4.062,343,3.88,352,3.016,363,5.381,367,3.961,385,3.426,406,8.225,447,4.139,465,5.156,513,7.875,519,5.742,526,6.536,556,4.551,557,4.593,579,4.749,602,5.346,626,4.846,627,2.658,638,6.641,644,4.171,758,6.909,804,4.305,810,4.703,842,3.559,847,5.832,849,3.906,871,5.278,872,6.155,945,8.782,965,8.782,1023,3.651,1050,4.376,1133,7.894,1141,6.641,1145,16.28,1146,16.092,1150,3.636,1196,5.986,1840,7.499,1916,5.381,1991,6.814,2023,6.155,4060,8.782,4083,19.033,4084,7.499,4085,10.447,4086,10.447,4087,10.447,4088,10.447,4089,10.447,4090,10.447,4091,10.447,4092,10.447,4093,10.447,4094,10.447,4095,10.447,4096,10.447,4097,10.447,4098,10.447]],["keywords/548",[]],["title/549",[70,554.539,1150,479.72]],["content/549",[]],["keywords/549",[]],["title/550",[195,156.745,397,241.681,616,291.743]],["content/550",[2,1.882,3,2.922,7,7.303,8,6.538,22,1.758,31,4.673,49,4.652,127,4.413,139,8.302,173,6.784,195,2.477,397,5.644,399,3.693,422,5.565,469,6.669,527,9.375,616,4.61,632,8.1,652,6.015,1150,6.293,4099,18.08,4100,18.08,4101,18.08,4102,18.08,4103,15.858]],["keywords/550",[]],["title/551",[2042,532.102]],["content/551",[2,2.358,22,2.406,161,7.031,195,2.477,222,2.869,345,7.841,347,8.167,354,4.461,355,4.652,396,7.511,616,4.61,641,7.913,642,9.572,895,5.422,896,6.738,908,8.14,921,7.738,1133,6.495,1142,6.312,1150,6.293,2042,5.551,3471,8.809,3484,9.134,3931,12.74]],["keywords/551",[]],["title/552",[14,420.758,15,188.594,632,543.291,1163,426.764]],["content/552",[14,8.248,15,5.17,25,5.091,70,8.356,115,6.686,127,3.108,185,6.263,193,13.138,198,5.818,226,4.043,270,7.435,277,2.685,303,7.678,357,8.41,385,4.176,526,6.399,551,7.275,579,8.156,611,8.422,627,4.565,632,10.102,644,7.162,823,7.924,1150,7.229,1163,7.172,1537,16.354,1708,6.205,1840,12.878,2065,13.753,2086,7.432,2094,7.781,2229,12.038,2234,13.753,3411,7.234,4104,17.94,4105,11.17,4106,16.611,4107,17.94,4108,12.734,4109,12.734,4110,12.734]],["keywords/552",[]],["title/553",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,1150,237.045,3471,331.852]],["content/553",[14,7.862,25,5.131,49,5.83,70,9.957,89,3.896,162,7.48,297,9.573,316,7.083,526,7.583,557,7.949,627,4.6,632,10.152,1150,9.03,1795,10.652,2024,13.86,4111,18.08]],["keywords/553",[]],["title/554",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/554",[14,6.607,16,2.005,18,3.101,22,1.349,25,5.404,36,5.336,49,4.899,69,3.871,70,9.866,89,4.104,180,6.721,206,7.878,297,5.861,322,10.924,360,6.216,365,12.593,422,4.271,526,6.64,557,8.372,601,10.855,632,6.216,654,7.194,741,7.566,799,11.26,895,4.16,896,9.44,1142,4.844,1150,8.817,1442,7.749,1795,8.174,1916,7.146,1945,7.95,1974,6.84,1986,8.613,2024,10.636,2094,8.259,2846,8.517,4059,10.636,4112,10.924,4113,13.874]],["keywords/554",[]],["title/555",[16,250.43]],["content/555",[1,5.597,2,2.37,16,3.29,22,1.772,24,4.72,70,7.331,89,3.927,163,6.063,224,2.955,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1150,6.342]],["keywords/555",[]],["title/556",[282,329.633]],["content/556",[2,0.7,3,1.088,8,2.433,14,6.643,18,5.142,19,2.539,20,2.239,22,1.071,30,5.168,36,2.588,43,1.767,49,1.731,52,2.729,69,1.878,70,7.703,86,3.09,89,3.014,107,3.513,113,2.593,123,5.11,139,3.09,168,2.824,173,7.184,195,1.509,206,4.558,207,4.714,219,3.044,222,1.068,226,1.516,230,2.279,258,1.343,274,3.538,281,2.539,282,3.074,283,2.525,312,2.88,320,5.463,329,2.617,330,2.272,334,4.539,335,1.516,343,2.499,347,2.425,352,1.943,354,1.66,355,1.731,359,2.893,397,1.422,399,1.375,413,5.084,426,6.846,427,3.996,428,7.086,448,2.342,464,1.686,465,2.232,469,2.482,526,5.06,551,4.467,557,7.107,568,4.207,601,7.498,627,2.803,632,9.781,644,2.686,652,2.239,689,3.096,693,1.759,714,2.626,721,5.431,788,4.004,846,3.242,851,2.466,875,1.878,895,2.018,896,6.645,897,2.543,908,3.957,998,4.044,1049,3.206,1074,3.358,1106,4.83,1133,3.957,1142,3.846,1150,6.664,1155,3.337,1163,3.79,1189,2.676,1535,2.617,1537,5.298,1589,5.037,1621,4.087,1716,3.522,1803,5.791,1809,6.918,1837,5.496,1875,3.708,1921,5.461,1945,3.856,1948,5.461,2094,7.733,2171,5.657,2211,4.66,2340,10.2,2739,5.657,3262,2.932,3263,3.188,3411,3.822,3430,3.337,3471,3.279,3485,5.159,3486,5.159,3487,5.461,3678,5.902,3766,6.369,3950,4.66,3973,9.662,4059,8.445,4103,9.662,4105,5.902,4114,6.729,4115,11.757,4116,6.729,4117,12.949,4118,6.729,4119,6.231,4120,6.729,4121,11.015,4122,6.729]],["keywords/556",[]],["title/557",[1023,407.123]],["content/557",[1,3.304,15,3.649,71,6.359,86,6.732,123,11.106,173,5.501,185,5.119,222,2.326,224,1.665,258,2.926,347,5.284,397,3.097,399,2.995,400,6.22,689,4.12,707,5.056,838,6.302,842,4.995,847,5.501,851,5.372,895,4.396,908,5.267,1023,3.444,1133,5.267,1150,5.103,1537,11.544,1796,8.904,2125,8.723,3262,6.387,3273,9.208,3275,6.168,3323,11.899,3430,7.271,3496,9.696,3500,9.001,3501,13.692,3742,12.86,3744,11.544,3950,10.153,3966,13.692,3997,12.325,4105,12.86,4106,13.575,4117,13.575,4123,14.661,4124,14.661,4125,14.661,4126,14.661,4127,14.661,4128,19.77,4129,14.661,4130,14.661,4131,14.661]],["keywords/557",[]],["title/558",[173,517.202,632,617.512]],["content/558",[2,1.811,3,2.813,7,7.029,22,1.692,42,8.246,49,4.478,66,3.842,70,7.002,79,4.698,173,9.912,174,9.886,244,7.991,281,4.012,324,8.529,397,4.673,422,6.809,505,8.848,526,4.939,541,9.025,632,7.797,681,11.549,1150,7.699,1273,10.684,4059,13.342,4103,15.265,4119,16.114]],["keywords/558",[]],["title/559",[550,646.112,689,387.369]],["content/559",[]],["keywords/559",[]],["title/560",[4132,1604.808]],["content/560",[25,4.66,36,8.197,43,5.595,70,8.573,77,9.972,79,4.432,89,3.539,107,8.573,173,6.162,192,8.144,195,2.92,207,7.028,550,11.09,652,7.09,659,11.019,676,8.048,689,4.615,812,7.357,930,8.756,1150,5.715,1155,10.568,1211,9.674,1292,12.588,1393,8.458,1559,10.711,1560,13.805,1775,8.821,1974,10.505,3206,14.403,4059,12.588,4132,19.731,4133,16.42]],["keywords/560",[]],["title/561",[1150,479.72,1449,989.405]],["content/561",[]],["keywords/561",[]],["title/562",[2042,532.102]],["content/562",[1,4.138,16,2.654,22,1.786,24,4.757,127,4.483,162,7.598,224,2.599,297,7.759,386,9.054,397,3.88,448,6.392,457,8.228,526,5.212,597,10.524,627,4.673,731,7.598,1150,8.675,1449,17.892,1916,9.46,2067,12.324,2105,11.275,4134,18.365]],["keywords/562",[]],["title/563",[16,250.43]],["content/563",[1,5.461,2,2.291,8,6.246,16,2.496,22,1.679,24,4.475,89,3.723,163,5.747,207,7.393,224,2.899,226,4.961,228,4.797,277,3.642,303,7.393,354,4.262,355,4.444,372,5.332,445,6.741,464,4.328,490,4.82,804,7.118,875,4.82,1023,4.058,1150,7.662,1449,15.803]],["keywords/563",[]],["title/564",[282,329.633]],["content/564",[18,4.495,19,4.636,24,6.266,106,7.321,258,4.014,282,3.825,343,7.469,895,6.031,1133,8.69,1150,7,1449,14.437,1716,6.431,1875,6.771,3481,12.785]],["keywords/564",[]],["title/565",[399,354.058]],["content/565",[14,6.58,18,5.217,19,4.372,24,6.55,120,11.329,282,3.607,426,6.806,467,7.69,485,8.262,625,10.187,1150,8.124,1449,16.755,1716,6.064,1875,6.384,4135,18.964]],["keywords/565",[]],["title/566",[1023,407.123]],["content/566",[120,8.783,222,3.11,224,2.227,258,3.912,397,4.141,399,4.005,707,6.76,838,8.427,842,6.679,847,7.356,1133,7.043,1150,6.823,3275,8.247,4136,19.604,4137,19.604,4138,19.604,4139,19.604,4140,19.604,4141,19.604]],["keywords/566",[]],["title/567",[541,593.262,1150,398.191,4142,1144.071]],["content/567",[]],["keywords/567",[]],["title/568",[195,156.745,397,241.681,616,291.743]],["content/568",[2,2.313,3,3.592,7,7.082,8,6.34,16,2.534,31,4.532,49,4.512,127,4.28,195,2.402,222,2.782,274,9.218,386,13.052,397,4.695,399,3.582,469,6.468,632,7.856,3730,19.495,4143,15.38,4144,17.535,4145,17.535,4146,17.535,4147,17.535,4148,17.535,4149,17.535,4150,17.535]],["keywords/568",[]],["title/569",[2042,532.102]],["content/569",[2,1.825,13,4.917,22,2.161,161,6.819,195,2.402,222,2.782,345,7.605,347,6.32,354,4.326,355,4.512,396,7.285,422,5.398,513,9.43,526,6.307,541,9.093,616,4.471,641,7.674,642,9.283,895,5.258,897,6.626,908,7.985,921,7.505,1150,7.736,2042,5.383,3471,8.544,3484,8.859,3931,12.356]],["keywords/569",[]],["title/570",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,1150,237.045,3471,331.852]],["content/570",[14,7.039,22,1.972,147,10.898,526,7.39,541,10.52,644,8.099,897,7.666,1126,6.975,1143,10.186,1150,8.463,2093,14.563,4059,15.553]],["keywords/570",[]],["title/571",[13,188.901,347,307.742,513,362.279,526,242.31,895,256.047]],["content/571",[6,5.515,13,3.793,14,4.146,16,1.727,22,1.162,24,3.095,25,3.391,30,3.821,61,4.172,66,2.638,106,6.241,127,2.917,147,6.419,186,3.718,224,1.357,274,9.014,277,2.519,352,4.95,367,6.502,385,3.919,386,5.891,422,3.678,447,6.793,513,9.297,526,7.353,541,13.196,556,5.206,601,5.543,644,4.771,652,5.705,731,7.094,752,4.681,864,4.321,871,6.037,875,3.334,877,8.42,897,8.28,902,5.254,1112,7.693,1133,4.293,1150,9.265,1189,6.819,1401,5.543,1709,6.419,1905,8.42,2042,3.669,2093,8.578,2676,11.064,3053,7.418,3934,10.046,4059,9.161,4151,11.949,4152,15.04,4153,8.276]],["keywords/571",[]],["title/572",[16,250.43]],["content/572",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,541,9.449,875,5.084,1023,4.28,1150,6.342]],["keywords/572",[]],["title/573",[282,329.633]],["content/573",[2,0.966,6,4.283,13,3.144,14,4.931,16,1.341,18,5.121,19,3.982,20,3.087,22,1.382,24,2.404,30,4.544,36,3.569,49,2.388,52,3.763,86,4.261,101,7.801,106,5.173,127,2.265,136,3.582,190,7.307,195,2.367,226,3.203,241,5.905,258,1.852,274,7.472,282,3.682,283,3.482,329,3.609,330,3.133,347,3.345,352,2.679,354,3.507,355,3.657,397,1.96,399,1.896,400,3.937,422,2.856,426,6.682,427,3.367,428,6.394,464,2.325,513,8.214,526,4.902,541,8.957,568,3.544,594,4.138,632,6.368,654,7.37,682,3.691,689,3.994,693,2.426,714,5.547,721,4.575,737,8.592,846,4.47,851,3.4,864,3.355,895,5.18,897,6.527,908,6.206,925,4.24,974,5.318,1049,4.421,1123,8.139,1133,6.206,1150,6.012,1535,3.609,1621,5.636,1716,4.544,1748,4.575,1875,4.785,1974,8.516,2093,10.202,2127,5.577,2248,5.271,3262,6.192,3263,4.397,3471,4.521,3481,5.899,3482,6.227,3484,4.688,3492,5.828,3493,5.761,3494,6.539,4154,7.801,4155,8.139,4156,8.592,4157,8.592,4158,9.28,4159,9.28,4160,7.307,4161,9.28,4162,9.28]],["keywords/573",[]],["title/574",[274,724.603,632,617.512]],["content/574",[2,1.206,11,3.159,31,4.336,49,2.983,106,4.219,127,2.829,154,7.561,168,2.34,195,2.701,263,5.15,274,11.359,282,2.205,312,4.961,343,4.305,354,2.86,364,6.529,397,2.449,408,4.94,417,6.529,426,6.301,445,3.549,448,4.035,467,6.802,541,8.699,568,4.427,616,4.278,632,10.271,846,5.584,875,3.234,1059,9.127,1110,6.371,1150,5.839,1796,7.04,1809,7.281,1854,10.168,1947,17.576,1948,16,2132,6.052,4156,15.533,4163,10.168,4164,10.733,4165,16.775,4166,11.592,4167,11.592,4168,11.592,4169,11.592,4170,11.592,4171,11.592,4172,11.592,4173,11.592,4174,11.592,4175,11.592,4176,11.592,4177,11.592,4178,11.592,4179,11.592,4180,11.592,4181,11.592,4182,11.592,4183,11.592,4184,11.592,4185,11.592,4186,11.592,4187,11.592,4188,11.592,4189,11.592,4190,11.592,4191,11.592,4192,11.592,4193,11.592,4194,11.592,4195,11.592,4196,11.592,4197,11.592,4198,11.592]],["keywords/574",[]],["title/575",[1023,407.123]],["content/575",[86,5.27,89,2.473,123,5.324,222,2.643,224,1.304,254,5.727,258,2.29,284,3.451,347,4.137,397,5.505,399,2.345,400,11.057,457,5.142,459,9.649,513,4.87,541,5.952,689,7.324,707,3.958,838,4.934,842,3.91,847,9.779,851,9.549,895,3.442,908,4.123,925,5.244,1023,2.696,1042,4.618,1133,4.123,1150,3.995,2125,6.829,3262,5,3275,4.828,3277,6.212,3432,12.484,3495,7.046,3503,9.037,3846,8.799,4157,10.627,4160,9.037,4199,11.478,4200,10.067,4201,10.627,4202,10.627,4203,11.478,4204,10.627,4205,11.478,4206,10.627,4207,10.627]],["keywords/575",[]],["title/576",[546,544.018,2215,812.067]],["content/576",[]],["keywords/576",[]],["title/577",[195,188.839,1023,323.765]],["content/577",[31,3.862,43,3.924,70,6.012,77,9.075,78,8.149,111,17.67,152,8.087,162,6.183,170,12.128,173,5.607,194,13.062,196,5.79,205,7.005,222,2.371,226,3.367,274,10.528,298,7.598,329,5.811,360,6.695,448,5.201,452,8.804,464,3.744,509,8.804,518,5.811,526,5.683,541,11.712,550,9.387,551,6.06,553,10.53,652,6.663,660,7.005,925,6.827,1023,5.305,1150,5.201,1401,6.932,1551,10.028,1552,9.62,1972,11.185,2248,8.489,4153,10.349,4160,11.766,4208,12.128,4209,12.563,4210,13.837]],["keywords/577",[]],["title/578",[495,508.435,536,876.205]],["content/578",[43,4.193,49,4.109,115,5.951,186,6.511,195,3.198,224,1.814,251,4.764,274,12.271,290,6.865,291,5.742,316,6.256,360,7.155,368,5.813,394,7.155,445,4.89,530,9.32,541,12.103,652,5.313,721,7.873,812,7.155,912,11.463,920,11.001,929,8.172,1007,8.338,1150,8.124,1549,11.06,1593,10.881,1832,8.709,1974,7.873,2081,9.598,2846,9.804,3969,11.953,4211,15.969,4212,15.969,4213,15.969]],["keywords/578",[]],["title/579",[541,593.262,1150,398.191,1616,674.055]],["content/579",[]],["keywords/579",[]],["title/580",[195,156.745,397,241.681,616,291.743]],["content/580",[2,1.927,3,2.992,7,7.477,8,6.694,49,4.763,127,4.518,195,2.536,222,2.937,274,12.089,386,12.332,397,3.91,399,3.782,469,6.829,575,4.441,616,4.72,632,8.293,654,9.599,3729,15.563,3730,16.237,4214,18.511,4215,18.511,4216,18.511,4217,18.511]],["keywords/580",[]],["title/581",[2042,532.102]],["content/581",[2,1.586,8,5.51,13,3.371,14,5.287,22,2.217,25,4.324,30,4.872,61,5.32,89,3.284,161,5.925,163,5.07,195,2.088,224,2.305,282,3.858,340,4.516,347,5.492,352,6.585,354,3.759,355,3.92,367,5.778,386,7.512,396,6.33,422,4.69,447,6.037,513,6.465,526,4.324,541,11.827,556,6.638,601,7.068,652,5.07,895,4.569,908,5.474,1126,5.238,1143,7.65,1150,9.063,1616,8.977,1709,8.185,2042,4.678,3484,7.698]],["keywords/581",[]],["title/582",[13,188.901,347,307.742,513,362.279,526,242.31,895,256.047]],["content/582",[6,7.032,13,5.046,16,2.202,24,3.947,66,3.364,106,7.384,224,1.731,226,3.434,282,3.858,340,3.392,352,5.857,385,4.997,422,6.245,445,4.666,447,6.037,513,10.317,526,7.39,541,10.52,627,3.877,731,6.304,823,6.73,849,5.698,864,5.51,871,7.698,877,10.737,902,6.699,1049,7.259,1133,5.474,1150,7.938,1189,8.068,1401,7.068,1616,8.977,2042,4.678,4152,17.795]],["keywords/582",[]],["title/583",[16,250.43]],["content/583",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,541,9.449,875,5.084,1023,4.28,1150,6.342,1616,10.736]],["keywords/583",[]],["title/584",[282,329.633]],["content/584",[2,0.943,6,4.183,13,2.005,14,3.144,18,4.874,19,3.217,20,3.015,22,0.881,24,2.348,25,2.572,30,4.463,33,5.447,43,3.665,52,3.675,77,5.504,86,4.161,89,1.953,106,5.08,115,3.377,127,2.212,162,3.75,163,3.015,190,7.136,195,2.62,208,3.75,213,5.564,224,1.029,226,3.835,228,2.517,241,3.765,258,1.809,274,8.948,281,2.089,282,4.148,284,2.725,330,4.713,347,5.03,354,2.236,355,2.332,397,1.914,399,1.851,400,7.222,422,2.79,426,6.626,427,3.288,428,6.3,464,3.497,465,3.007,485,3.948,513,7.222,526,2.572,541,9.915,554,6.175,594,4.041,632,7.626,652,3.015,682,3.604,689,2.547,693,2.369,714,6.643,846,4.366,851,3.321,864,3.277,895,5.733,908,6.115,921,3.879,925,7.776,1023,2.129,1049,4.317,1133,6.115,1150,7.186,1155,6.922,1256,6.505,1535,3.524,1621,5.504,1709,4.868,1716,4.463,1801,7.619,1875,4.699,1974,4.468,2054,7.136,2174,5.834,2487,6.386,2569,6.783,3263,4.294,3481,5.761,3482,6.081,3492,5.692,3493,5.626,3494,6.386,4154,7.619,4155,7.949,4160,7.136,4218,8.391,4219,9.063,4220,8.391,4221,9.063,4222,9.063]],["keywords/584",[]],["title/585",[274,724.603,632,617.512]],["content/585",[11,3.873,15,5.883,22,1.382,31,3.673,106,5.173,127,3.469,195,2.652,263,5.943,274,11.574,282,2.703,354,3.507,364,8.005,397,3.002,408,6.057,426,4.145,541,7.37,568,5.428,616,3.624,632,9.863,717,7.092,846,6.847,1059,15.242,1110,7.812,1150,4.947,1854,12.467,1947,14.841,2132,7.42,3530,13.407,4163,16.98,4164,17.925,4223,17.925,4224,23.627,4225,13.16,4226,19.358,4227,14.213,4228,14.213,4229,14.213,4230,14.213,4231,14.213,4232,14.213,4233,14.213,4234,14.213,4235,14.213]],["keywords/585",[]],["title/586",[1023,407.123]],["content/586",[86,5.753,123,8.227,195,1.717,222,1.988,224,1.423,258,2.5,347,4.516,397,5.443,399,2.559,400,10.932,457,5.613,459,10.533,513,5.316,541,6.497,689,7.241,707,4.32,838,5.386,842,4.268,847,9.668,851,9.44,895,3.757,908,4.501,925,5.724,1023,2.943,1042,5.041,1133,4.501,1150,4.361,1350,8.537,3275,5.271,3277,6.78,3340,11.601,3432,12.342,3495,7.692,3846,9.605,4160,9.865,4200,10.989,4201,11.601,4202,11.601,4204,11.601,4206,11.601,4207,11.601,4218,11.601,4220,11.601]],["keywords/586",[]],["title/587",[546,544.018,2215,812.067]],["content/587",[]],["keywords/587",[]],["title/588",[195,188.839,1023,323.765]],["content/588",[31,4.017,43,4.081,70,6.253,77,9.439,111,17.949,162,6.431,170,12.614,173,5.832,194,13.409,195,2.129,205,7.286,226,3.502,274,8.171,298,7.902,329,6.044,360,6.963,448,5.41,452,9.157,464,3.894,509,9.157,518,6.044,526,5.834,541,11.944,550,9.636,551,6.303,553,10.952,652,6.839,660,7.286,925,7.101,1023,4.829,1150,5.41,1401,7.21,1552,10.006,1972,11.633,2248,8.829,4153,10.764,4160,12.238,4208,12.614,4209,13.067,4210,14.391]],["keywords/588",[]],["title/589",[1150,479.72,2920,911.566]],["content/589",[]],["keywords/589",[]],["title/590",[195,188.839,638,876.205]],["content/590",[2,1.673,3,3.913,7,6.495,15,6.414,22,1.063,42,5.182,49,4.137,79,6.842,88,6.574,89,2.357,93,7.707,113,2.575,120,7.204,139,5.022,160,7.538,195,1.499,218,6.715,224,1.243,235,5.634,270,6.575,282,2.08,283,4.104,289,5.022,335,2.465,343,8.318,356,12.722,396,4.544,444,8.01,445,3.349,464,2.74,465,3.629,485,4.765,556,7.005,575,5.043,638,6.953,677,4.877,709,7.453,750,8.187,792,4.507,925,7.346,929,5.597,974,6.268,998,6.574,1326,6.16,1355,6.508,1530,14.104,1532,14.104,1643,7.619,1673,10.128,2243,8.612,2495,9.195,2920,10.634,4236,16.08,4237,10.938,4238,10.938,4239,10.938,4240,10.938,4241,16.08,4242,10.938,4243,10.938,4244,10.938,4245,10.938,4246,10.938]],["keywords/590",[]],["title/591",[2042,532.102]],["content/591",[13,4.095,66,4.087,106,6.738,186,5.759,335,4.171,340,4.12,352,5.345,374,6.852,385,6.071,422,5.698,513,11.101,526,7.635,627,4.71,902,8.139,1150,6.443,1598,11.126,2020,8.065,2920,12.243,2922,17.14]],["keywords/591",[]],["title/592",[16,250.43]],["content/592",[1,5.617,2,2.381,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2920,12.146]],["keywords/592",[]],["title/593",[282,329.633]],["content/593",[3,3.615,16,2.118,18,4.999,19,4.557,30,4.688,61,5.119,106,5.336,108,7.228,113,3.451,120,8.857,195,2.009,222,3.137,228,4.071,258,2.926,281,3.38,282,3.76,335,5.04,399,2.995,401,5.899,426,6.981,513,6.22,526,4.161,616,3.739,631,8.723,836,8.811,875,4.091,926,7.602,1133,7.102,1150,5.103,1535,5.701,1716,6.321,1875,6.655,2120,9.563,2121,9.102,2927,13.575,4247,14.661,4248,14.661,4249,14.661,4250,14.661,4251,12.325,4252,14.661,4253,14.661,4254,14.661]],["keywords/593",[]],["title/594",[1023,407.123]],["content/594",[13,3.894,79,3.346,120,10.542,136,4.785,139,5.692,195,1.698,222,2.793,224,1.408,228,3.442,258,2.474,281,2.857,397,4.706,399,2.532,477,9.502,494,6.428,526,4.995,638,7.88,658,4.968,707,4.274,823,5.475,838,5.328,842,4.223,847,8.36,875,3.458,1230,9.127,1355,7.375,2510,6.981,2920,8.198,3275,5.214,3298,11.477,3513,15.318,4060,10.421,4061,11.477,4062,11.477,4063,11.477,4064,11.477,4065,11.477,4066,11.477,4067,11.477,4068,11.477,4069,11.477,4070,11.477,4071,11.477,4072,16.297,4073,10.872,4074,10.421,4075,11.477,4076,11.477,4077,11.477,4078,11.477,4079,11.477,4080,11.477,4081,11.477,4082,11.477,4251,18.73,4255,12.395,4256,12.395,4257,22.279,4258,12.395,4259,12.395,4260,12.395,4261,12.395,4262,12.395,4263,12.395,4264,12.395]],["keywords/594",[]],["title/595",[401,554.539,1535,535.982]],["content/595",[2,0.908,3,3.622,16,1.26,22,1.821,29,8.412,30,2.789,37,6.262,43,2.29,49,2.244,54,9.438,69,3.781,71,3.783,78,4.757,79,6.049,87,3.624,102,4.721,110,6.352,136,3.367,155,5.348,174,7.697,179,4.554,186,2.714,195,3.07,220,3.701,222,3.407,224,0.991,231,3.482,251,4.957,261,3.24,267,5.615,288,4.523,290,3.75,294,5.479,296,5.328,298,4.435,329,3.392,370,3.908,374,3.229,377,4.464,383,4.794,387,4.226,394,3.908,396,3.624,399,1.782,401,7.537,422,2.685,455,4.586,481,5.355,490,3.781,495,3.218,505,4.435,515,4.464,540,6.565,547,4.493,551,3.537,661,4.586,689,2.451,714,3.405,739,5.479,780,6.262,810,6.1,816,4.832,856,5.139,858,4.913,860,4.721,871,4.407,876,5.615,927,7.079,993,4.721,1005,7.079,1131,7.079,1155,4.326,1260,6.146,1302,5.944,1435,7.333,1443,3.871,1451,8.077,1453,4.757,1535,7.285,1538,8.723,1631,7.651,1702,5.415,1708,4.25,1745,9.093,1754,7.079,1832,4.757,1876,5.415,1955,6.868,2248,4.955,2305,6.041,2545,6.041,2570,6.529,2573,5.545,2920,14.201,3124,5.415,3215,8.077,4251,11.392,4265,12.547,4266,5.479,4267,8.723,4268,8.723,4269,8.723,4270,8.723,4271,8.723,4272,8.723,4273,8.723,4274,8.723,4275,8.723,4276,8.723,4277,8.723,4278,8.077,4279,8.077,4280,8.723]],["keywords/595",[]],["title/596",[61,399.429,690,727.292,1150,398.191]],["content/596",[]],["keywords/596",[]],["title/597",[2042,532.102]],["content/597",[13,3.879,18,3.919,22,1.705,61,7.76,66,3.871,89,3.779,127,4.28,207,7.505,224,1.992,281,4.042,340,3.903,397,3.704,447,6.947,513,10.354,526,6.925,690,11.147,804,7.225,864,6.34,895,5.258,902,7.709,1150,7.736,1165,11.948,2042,5.383,3809,16.236,3813,16.236,4281,16.236,4282,16.236]],["keywords/597",[]],["title/598",[513,584.809,526,391.149]],["content/598",[14,7.164,22,1.225,61,6.215,66,5.227,69,3.515,108,6.21,112,4.216,127,4.345,144,9.225,179,6.577,186,3.919,195,1.726,340,2.804,356,7.155,363,6.488,424,7.155,513,11.132,526,7.322,557,5.538,633,8.453,690,8.008,714,4.916,731,8.543,813,6.978,902,9.078,920,6.622,921,5.391,926,6.532,1074,8.883,1133,4.525,1150,6.196,1157,9.918,1189,8.211,1859,7.036,1864,8.453,1895,9.428,2003,10.59,2023,7.422,2568,7.911,2630,11.774,3691,12.779,3814,13.038,3815,11.663,3817,11.663,3818,11.663,4281,16.484,4282,16.484,4283,12.596,4284,12.596]],["keywords/598",[]],["title/599",[13,253.109,513,485.419,526,324.673]],["content/599",[2,1.99,13,5.749,18,3.119,22,1.357,24,3.615,61,4.873,66,5.426,69,5.335,106,5.08,127,4.667,175,7.611,176,10.989,222,3.034,226,3.145,329,5.427,340,4.256,352,4.03,420,10.221,427,5.063,445,4.274,490,3.894,513,10.768,526,7.374,731,5.775,741,7.611,752,5.468,895,4.185,1074,9.54,1085,9.835,1086,9.835,1150,6.655,1189,5.551,1443,6.194,1736,10.221,1795,8.223,1916,7.189,2106,10.019,2573,8.873,3814,10.221]],["keywords/599",[]],["title/600",[16,250.43]],["content/600",[1,4.572,2,2.111,16,2.931,22,1.972,24,5.255,89,4.372,163,6.75,224,2.762,227,6.523,284,6.099,354,5.006,355,5.22,372,6.262,4285,20.288]],["keywords/600",[]],["title/601",[282,329.633]],["content/601",[14,7.009,18,5.081,19,4.656,22,1.472,61,7.052,106,7.352,113,4.755,130,9.093,258,3.021,282,3.842,343,5.622,399,3.092,426,7.072,447,8.003,513,8.57,526,5.732,895,4.539,1133,5.438,1150,7.03,1716,6.458,1875,6.8,2184,11.605,2630,16.04,3691,14.5,4286,15.138,4287,21.049,4288,12.286,4289,15.138,4290,15.138,4291,15.138]],["keywords/601",[]],["title/602",[222,181.529,356,649.882,1443,507.721]],["content/602",[2,2.136,3,3.811,14,6.13,22,1.718,25,3.536,36,4.793,66,3.901,79,6.028,89,3.807,119,10.216,161,4.846,205,5.842,220,5.287,222,1.977,223,3.869,224,2.007,226,2.808,237,5.405,291,4.848,340,2.774,348,6.645,353,7.65,356,14.304,368,4.536,413,5.751,490,3.477,495,4.597,561,8.022,690,14.197,770,12.939,856,7.342,964,10.504,1014,5.199,1018,8.491,1267,5.287,1366,9.327,1443,9.109,1538,8.022,1554,7.922,1745,11.855,1842,12.682,2080,8.129,2184,9.553,2201,10.114,2708,10.114,3691,12.682,4292,15.032,4293,12.462,4294,12.462,4295,12.462,4296,12.462]],["keywords/602",[]],["title/603",[356,782.945,427,500.036]],["content/603",[18,4.171,22,1.814,106,6.792,109,10.89,195,3.439,222,2.961,224,2.12,231,7.45,345,8.093,356,10.6,377,9.549,404,6.357,408,7.952,427,9.518,495,8.524,616,4.758,704,7.365,1755,12.172,2034,14.692]],["keywords/603",[]],["title/604",[1150,398.191,1775,614.559,2132,597.308]],["content/604",[]],["keywords/604",[]],["title/605",[195,156.745,397,241.681,616,291.743]],["content/605",[2,1.733,3,3.476,7,6.727,8,6.023,31,4.305,49,4.285,127,5.249,173,6.25,195,2.947,288,8.637,343,6.186,360,7.462,397,5.032,399,3.402,465,5.525,469,6.144,540,8.069,541,14.082,616,4.247,859,14.609,1775,12.795,1917,11.349,4297,16.656,4298,16.656,4299,16.656,4300,16.656,4301,16.656]],["keywords/605",[]],["title/606",[274,724.603,632,617.512]],["content/606",[2,1.709,3,2.654,7,6.632,15,4.087,16,2.373,49,4.225,66,3.625,145,9.937,230,5.561,258,3.277,274,12.437,385,6.988,397,3.469,427,5.957,541,11.05,632,9.547,823,7.253,849,7.969,1059,12.929,1150,8.234,1350,11.189,1442,9.171,1704,13.805,1775,8.821,2132,8.573,3341,14.403,3662,15.204,4163,14.403,4223,15.204,4224,19.731,4225,15.204,4302,16.42]],["keywords/606",[]],["title/607",[2042,532.102]],["content/607",[2,1.825,13,4.917,22,2.161,161,6.819,195,2.402,222,2.782,345,7.605,347,6.32,354,4.326,355,4.512,396,7.285,422,5.398,513,9.43,526,6.307,616,4.471,641,7.674,642,9.283,895,5.258,908,7.985,921,7.505,1150,7.736,1775,9.419,2042,5.383,2132,9.155,3471,10.829,3931,12.356]],["keywords/607",[]],["title/608",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,1150,237.045,3471,331.852]],["content/608",[2,1.99,22,1.859,196,7.408,282,3.636,340,4.256,352,6.773,354,4.718,355,4.919,513,8.113,526,6.657,575,4.587,627,4.865,1133,8.428,1150,8.833,1775,10.271,2022,15.055,2132,9.982]],["keywords/608",[]],["title/609",[13,188.901,347,307.742,513,362.279,526,242.31,895,256.047]],["content/609",[6,7.221,8,5.658,13,4.568,16,2.261,24,4.053,66,3.455,106,7.515,127,3.819,224,1.777,226,3.526,340,3.483,352,4.518,422,4.817,445,4.791,495,5.772,513,10.426,526,6.974,652,5.206,694,13.155,752,6.13,871,7.905,875,4.366,877,11.026,897,5.913,1049,7.454,1133,5.621,1150,7.186,1189,6.223,1401,7.259,1775,8.405,2042,4.804,2055,9.404,2132,8.169,3053,9.714,3064,9.503,3484,7.905,3934,13.155,4303,15.647,4304,15.647,4305,15.647]],["keywords/609",[]],["title/610",[16,250.43]],["content/610",[1,5.577,2,1.882,16,3.274,22,1.758,24,4.683,89,3.896,163,6.015,224,2.947,227,5.813,228,5.021,277,3.812,281,4.168,284,5.436,354,4.461,355,4.652,372,5.58,464,4.53,490,5.045,875,5.045,1023,4.247,1150,6.293,1775,9.712,2132,9.439]],["keywords/610",[]],["title/611",[282,329.633]],["content/611",[2,1.006,3,1.562,13,3.243,18,5.351,19,4.083,20,3.216,22,1.722,30,3.09,36,3.718,86,4.438,106,6.447,123,6.801,139,4.438,168,1.951,195,2.009,219,4.372,222,1.534,226,2.178,241,4.015,258,1.929,274,7.707,282,4.042,283,3.627,329,3.758,330,4.95,347,5.284,352,2.79,354,2.385,355,2.487,397,2.042,399,1.974,426,6.523,427,5.319,428,8.602,465,3.206,513,7.515,526,5.61,568,5.599,594,4.31,626,4.484,632,6.568,689,2.716,693,2.526,714,5.722,846,7.062,851,3.541,864,3.495,875,2.697,895,5.928,908,5.267,1049,4.605,1050,6.142,1150,6.165,1490,6.486,1535,3.758,1621,5.87,1716,4.688,1768,5.539,1775,7.875,1803,7.707,1859,8.188,1874,7.61,1875,4.935,2064,6.938,2132,7.654,3152,6.938,3262,4.211,3263,4.579,3471,4.709,3481,6.144,3482,6.486,3766,8.477,3950,6.694,3973,12.859,4035,7.234,4143,12.859,4155,8.478,4306,8.949,4307,8.949,4308,8.949,4309,9.665]],["keywords/611",[]],["title/612",[1023,407.123]],["content/612",[1,3.808,15,4.206,86,7.759,123,7.839,222,2.681,224,1.92,258,3.372,347,6.09,397,3.57,399,3.452,513,7.17,689,4.749,707,5.827,838,7.264,842,5.757,847,6.341,851,6.191,895,5.067,908,6.07,1023,3.969,1133,6.07,1150,5.881,1775,9.077,1859,9.438,2125,10.054,3065,13.714,3262,7.362,3275,7.109,3277,9.145,3279,9.517,3343,15.646,3495,10.374,3503,13.305,4308,15.646,4310,15.646,4311,16.898,4312,16.898,4313,16.898]],["keywords/612",[]],["title/613",[1150,479.72,2933,911.566]],["content/613",[]],["keywords/613",[]],["title/614",[2042,532.102]],["content/614",[2,1.853,13,4.965,22,2.182,161,6.923,195,2.439,222,2.825,345,7.721,354,4.393,355,4.581,396,7.396,422,5.48,513,9.521,526,6.368,616,4.54,641,7.792,642,9.426,895,5.339,908,8.062,921,7.619,1150,6.196,2042,5.466,2933,11.774,3471,8.674,3484,8.994,3931,12.545,4314,17.803]],["keywords/614",[]],["title/615",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,1150,237.045,3471,331.852]],["content/615",[526,5.965,611,13.902,871,10.62,1126,7.227,1143,10.554,1150,8.644,1795,14.633,1984,14.106,2970,14.812]],["keywords/615",[]],["title/616",[427,500.036,2970,971.224]],["content/616",[2,1.497,11,3.921,22,1.399,49,5.023,69,4.015,87,8.11,89,3.101,113,5.215,115,5.362,191,8.477,195,1.971,224,2.218,226,3.242,251,5.824,343,8.823,351,8.32,404,4.902,409,10.565,427,5.22,438,8.933,440,5.575,634,9.516,707,4.962,711,9.516,712,7.908,976,8.391,1083,10.329,1261,10.139,1290,8.397,1342,11.329,1759,11.031,1800,11.901,1820,9.965,1983,14.652,2933,16.426,2970,10.139,4315,19.521,4316,14.389,4317,14.389,4318,14.389,4319,14.389,4320,12.621]],["keywords/616",[]],["title/617",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/617",[6,5.751,13,4.541,16,1.801,24,3.228,25,3.536,30,3.984,61,4.351,66,2.751,106,6.431,112,4.17,127,3.042,224,1.416,277,2.627,352,5.101,367,6.699,386,6.143,422,3.836,447,7,513,10.004,526,6.949,556,5.429,601,5.781,611,8.242,652,5.878,752,4.882,864,4.506,871,8.926,875,3.477,877,8.781,897,4.709,902,5.479,1049,5.937,1133,4.477,1150,9.236,1189,4.956,1309,7.827,1401,5.781,1449,12.682,1709,6.694,1795,12.093,1859,6.96,1923,13.214,1984,8.362,2024,9.553,2042,3.826,2933,13.575,2970,15.736,3053,7.736,3882,9.126,3934,10.476,4152,10.93]],["keywords/617",[]],["title/618",[16,250.43]],["content/618",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1150,6.342,2933,12.051]],["keywords/618",[]],["title/619",[282,329.633]],["content/619",[6,6.009,13,4.031,18,5.551,19,4.846,20,4.332,24,3.372,49,3.35,79,3.514,86,5.978,106,4.739,127,3.178,226,4.106,258,2.598,282,3.998,399,2.66,422,4.008,426,6.989,513,8.919,526,5.171,652,6.062,682,5.178,693,4.763,714,5.082,851,4.771,864,4.708,895,6.303,908,7.552,1049,6.203,1133,7.552,1150,7.925,1449,9.346,1535,5.063,1716,5.826,1795,10.735,1875,6.134,2933,15.059,2970,12.839,3263,6.169,3279,7.333,3481,8.277,3482,8.737,4306,12.055,4321,12.055]],["keywords/619",[]],["title/620",[1023,407.123]],["content/620",[89,3.927,222,3.613,224,2.07,254,9.092,258,3.636,284,5.478,397,3.849,399,3.722,513,7.731,689,5.121,707,6.284,838,7.833,842,6.208,847,6.837,851,6.677,1133,6.546,1150,6.342,3010,16.872,3275,7.666,3277,9.861,3279,10.262,3344,15.983,3432,8.729,3495,11.186,4310,16.872,4321,16.872,4322,18.221]],["keywords/620",[]],["title/621",[3345,1364.669]],["content/621",[]],["keywords/621",[]],["title/622",[195,156.745,397,241.681,616,291.743]],["content/622",[2,1.867,3,2.9,7,7.246,8,8.154,31,4.637,49,4.616,127,4.379,195,2.458,386,8.844,397,4.763,399,3.665,469,6.618,616,4.575,652,5.969,902,7.888,3345,14.126,4323,17.94,4324,17.94,4325,17.94,4326,17.94,4327,17.94,4328,17.94,4329,17.94,4330,17.94,4331,17.94,4332,17.94,4333,17.94,4334,17.94]],["keywords/622",[]],["title/623",[2042,532.102]],["content/623",[2,2.111,13,4.488,224,2.305,226,4.572,277,4.277,279,6.672,340,4.516,352,5.857,397,4.286,445,6.212,627,5.162,652,6.75,731,8.394,3345,15.974,3347,15.553]],["keywords/623",[]],["title/624",[16,250.43]],["content/624",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3345,14.46]],["keywords/624",[]],["title/625",[282,329.633]],["content/625",[3,2.771,13,4.848,18,5.397,19,5.051,222,2.721,258,3.422,282,4.167,397,3.622,399,3.503,422,5.278,426,7.042,447,6.793,464,4.296,652,7.29,689,4.819,693,4.482,714,6.692,851,6.283,908,6.16,1535,6.668,1716,7.006,1875,7.377,3263,8.124,3345,17.253,4335,15.04]],["keywords/625",[]],["title/626",[1023,407.123]],["content/626",[15,4.879,206,8.111,222,3.11,224,2.227,258,3.912,397,4.141,399,4.005,689,5.509,707,6.76,838,8.427,842,6.679,847,7.356,851,7.183,3275,8.247,3277,10.609,3279,11.041,4336,19.604,4337,15.91,4338,19.604]],["keywords/626",[]],["title/627",[3347,1328.705]],["content/627",[]],["keywords/627",[]],["title/628",[195,156.745,397,241.681,616,291.743]],["content/628",[2,1.709,3,2.654,7,6.632,8,7.705,31,4.244,49,4.225,127,4.008,195,2.25,216,6.908,397,4.502,399,3.354,447,6.506,469,6.057,545,11.019,575,3.94,616,4.187,652,5.463,1175,12.807,2094,7.122,3347,12.588,4339,16.42,4340,16.42,4341,16.42,4342,16.42,4343,16.42,4344,16.42,4345,16.42,4346,16.42,4347,16.42,4348,16.42,4349,16.42,4350,21.309,4351,16.42,4352,16.42,4353,16.42,4354,16.42,4355,16.42,4356,16.42]],["keywords/628",[]],["title/629",[2042,532.102]],["content/629",[13,4.609,14,7.228,224,2.367,226,4.694,277,4.392,340,4.637,352,6.015,445,6.379,526,5.912,652,6.931,3347,18.939]],["keywords/629",[]],["title/630",[16,250.43]],["content/630",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3347,14.079]],["keywords/630",[]],["title/631",[282,329.633]],["content/631",[3,2.177,14,6.474,18,5.423,19,4.301,31,3.482,36,7.177,43,4.9,123,8.656,139,6.186,195,2.556,222,2.138,258,2.688,282,3.549,330,4.549,397,2.846,399,2.752,426,7.076,427,6.769,428,9.292,447,5.338,526,5.295,568,7.126,627,3.428,689,3.786,693,3.521,714,5.258,851,4.936,896,5.021,908,4.84,975,9.04,1155,6.681,1535,5.239,1716,5.966,1803,9.81,1875,6.282,3262,5.869,3263,6.383,3274,9.493,3347,16.411,3640,12.715,3641,10.337,3950,9.33,4357,11.326]],["keywords/631",[]],["title/632",[1023,407.123]],["content/632",[15,4.535,123,10.563,222,2.891,224,2.07,258,3.636,397,3.849,399,3.722,400,7.731,689,5.121,707,6.284,838,7.833,842,6.208,847,6.837,851,6.677,2094,7.903,3262,7.939,3275,7.666,3348,16.872,3641,12.614,3744,14.347,3766,10.536,3816,16.872,3944,14.347,3950,12.619,4358,15.319,4359,18.221]],["keywords/632",[]],["title/633",[24,357.029,1910,763.589]],["content/633",[]],["keywords/633",[]],["title/634",[19,263.73,195,156.745,616,291.743]],["content/634",[2,2.218,3,2.654,16,2.373,19,5.453,22,1.596,23,14.218,24,6.128,30,5.25,31,4.244,67,7.823,127,5.201,195,2.25,196,6.362,222,2.605,224,1.865,275,10.081,282,3.123,363,8.458,368,7.756,448,7.417,616,5.434,647,6.119,908,7.655,920,8.632,1050,6.879,1876,10.194,2105,10.081,3034,9.869,3899,13.805,3900,15.204]],["keywords/634",[]],["title/635",[2042,532.102]],["content/635",[18,3.521,19,3.631,22,2.016,25,4.471,75,9.193,147,8.462,195,2.158,224,1.79,258,4.627,263,4.836,340,3.507,352,4.548,404,5.367,489,7.424,529,9.567,616,5.289,627,4.008,647,5.871,808,6.713,879,11.791,1007,8.225,1050,6.599,1126,5.416,1133,5.659,1143,7.909,1155,11.499,1212,8.591,1401,7.308,1600,13.244,1707,8.4,1800,8.462,1840,11.308,1910,13.65,1984,10.571,2029,14.363,4360,15.753,4361,14.586,4362,15.753]],["keywords/635",[]],["title/636",[16,250.43]],["content/636",[1,5.597,2,1.896,16,3.29,22,1.772,24,5.898,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1910,10.095]],["keywords/636",[]],["title/637",[282,329.633]],["content/637",[6,7.221,13,3.462,16,2.261,18,4.93,19,4.76,20,6.87,23,9.404,24,5.713,31,4.044,60,11.532,113,2.481,195,1.444,229,4.416,238,8.668,258,3.724,277,2.222,282,2.976,288,5.466,368,5.695,399,2.153,426,7.166,427,5.677,464,3.92,575,3.754,609,7.72,615,9.714,627,4.748,681,5.503,689,2.963,835,7.454,846,5.078,849,5.851,877,7.428,1050,8.65,1126,5.379,1133,5.621,1143,5.292,1155,5.228,1267,4.473,1412,9.606,1716,5.003,1800,12.413,1875,5.268,1910,13.254,3034,9.404,3263,4.995,3481,6.701,3595,8.555,3596,8.555,3597,8.555,3598,8.555,3599,8.555,3600,8.862,3677,8.555,4363,9.76,4364,18.659,4365,9.76]],["keywords/637",[]],["title/638",[1023,407.123]],["content/638",[14,5.738,19,3.812,23,9.939,98,10.267,105,10.513,222,2.624,224,1.879,258,3.3,397,3.493,399,3.378,427,5.999,689,4.648,707,5.703,838,7.109,842,7.293,847,6.205,1050,6.928,1143,8.303,1614,9.089,1798,10.513,1800,8.883,1910,9.162,2105,10.152,2108,13.021,2510,9.314,3034,9.939,3275,6.957,3301,14.505,3432,7.922,3602,13.422,3603,13.021,3604,13.422,3605,13.422,3606,13.422,3607,13.422,3608,13.422,3609,13.903,4361,15.312,4366,16.537,4367,16.537]],["keywords/638",[]],["title/639",[195,116.983,647,318.197,771,367.042,1412,524.187,1910,473.03]],["content/639",[1,1.738,2,1.28,3,1.246,11,2.101,16,2.763,19,5.117,23,10.518,24,5.75,30,6.515,31,1.993,49,1.984,60,9.775,87,5.109,98,4.787,105,4.902,106,2.807,111,9.005,139,3.541,155,3.043,195,2.62,196,2.987,207,3.3,222,1.951,224,1.742,226,1.738,230,4.164,231,4.909,238,6.812,251,2.3,258,3.061,263,5.373,275,7.549,282,2.339,288,3.998,296,3.032,312,3.3,318,5.433,321,3.694,332,4.843,340,2.737,368,6.959,380,4.634,404,4.189,427,4.461,440,4.764,448,7.092,464,3.843,465,4.079,469,4.536,490,4.883,503,4.843,551,3.127,607,3.438,616,1.966,642,4.082,736,4.082,814,4.902,823,3.406,849,2.883,920,4.054,926,3.998,957,4.634,976,6.593,1021,3.634,1023,1.811,1044,4.38,1303,5.433,1412,7.549,1637,4.902,1683,5.771,1731,7.245,1800,10.27,1876,4.787,1885,4.902,1910,6.812,2025,4.419,2081,4.634,2105,10.744,2422,7.549,2510,9.857,3034,11.491,3122,5.535,3128,5.771,3152,5.535,3411,4.38,3612,6.071,3614,6.071,3615,6.071,3616,6.071,3617,6.071,3618,6.071,3619,6.071,3620,6.071,3621,6.071,3622,6.071,3623,6.071,3624,6.071,3625,6.071,3626,7.723,3627,6.071,3628,6.071,3629,9.682,3630,6.071,3631,6.071,3632,6.071,3633,6.071,3634,6.071,3635,6.071,3636,6.071,3637,6.071,3899,6.482]],["keywords/639",[]],["title/640",[22,95.072,771,420.36,1800,525.286,1910,541.745]],["content/640",[8,6.293,13,3.85,16,3.196,18,3.89,30,5.564,79,4.698,195,2.384,222,2.761,263,5.343,277,3.669,281,4.012,321,8.337,334,7.171,340,3.874,616,4.438,627,4.428,652,8.091,658,6.975,1091,9.565,1142,6.076,1145,15.265,1146,12.745,1155,8.631,1302,11.859,1707,9.28,1800,13.062,1910,9.641,4365,16.114,4368,17.403]],["keywords/640",[]],["title/641",[15,331.695,43,224.2,287,365.434,3303,530.084]],["content/641",[]],["keywords/641",[]],["title/642",[397,241.681,616,291.743,3303,710.262]],["content/642",[20,6.259,35,12.441,127,4.591,208,7.783,224,2.137,291,5.162,368,6.847,397,3.974,399,3.843,424,10.685,445,5.76,632,8.428,652,6.259,860,10.18,974,10.779,1211,11.083,1614,10.339,1859,10.506,2476,13.255,3303,14.418,4369,18.811,4370,18.811,4371,18.811]],["keywords/642",[]],["title/643",[2042,532.102]],["content/643",[2,2.023,22,1.89,161,7.559,195,2.663,222,3.084,345,8.431,354,4.796,355,6.097,396,8.076,627,4.946,895,5.829,896,7.244,921,8.32,1230,10.081,2042,5.968,3303,12.069,3471,9.472,3484,9.821,3931,13.698]],["keywords/643",[]],["title/644",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,3303,422.823,3471,331.852]],["content/644",[526,6.494,3303,14.206]],["keywords/644",[]],["title/645",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/645",[16,2.944,22,1.491,66,4.499,69,5.685,83,8.43,113,4.796,127,3.744,186,4.772,224,1.742,229,6.425,316,6.009,355,6.53,422,4.721,526,6.493,575,3.68,627,6.203,810,6.905,864,5.546,871,7.749,873,7.228,896,8.527,1189,6.1,1230,11.865,1768,8.789,2055,9.218,2564,8.712,3303,15.755,4372,12.448,4373,14.202,4374,14.202,4375,14.202]],["keywords/645",[]],["title/646",[16,250.43]],["content/646",[1,4.612,2,1.29,16,2.543,18,4.979,19,4.057,20,4.124,22,1.205,24,3.211,41,10.15,43,3.255,86,5.692,89,2.671,97,5.527,113,4.143,127,3.025,163,4.124,195,2.804,206,5.128,224,2.531,226,2.793,227,3.985,228,3.442,258,2.474,281,2.857,282,3.892,284,3.727,287,5.305,354,3.058,355,5.266,372,3.826,397,3.718,399,2.532,426,6.497,464,3.105,490,3.458,627,5.669,714,4.838,875,3.458,895,5.278,896,8.302,908,4.453,1023,2.912,1133,6.323,1230,9.127,1716,5.628,1875,5.925,3303,10.927,3457,9.502,3481,7.88,4376,9.76,4377,10.872,4378,10.872,4379,11.477]],["keywords/646",[]],["title/647",[1023,407.123]],["content/647",[113,4.538,222,3.059,224,2.19,258,3.847,355,4.96,397,4.073,399,3.938,707,6.648,838,8.287,842,6.568,847,7.234,1133,6.926,1230,9.997,1257,14.779,3273,12.108,3275,8.11,3277,10.434,3303,11.969,3304,17.851,3432,9.235,4380,16.91]],["keywords/647",[]],["title/648",[3303,1075.998]],["content/648",[]],["keywords/648",[]],["title/649",[195,156.745,397,241.681,616,291.743]],["content/649",[2,1.639,3,2.546,7,6.363,8,5.696,16,2.276,19,3.631,31,4.071,49,4.053,127,5.062,195,2.841,225,7.589,226,3.55,230,5.335,397,4.898,399,3.218,469,5.811,526,5.886,556,6.863,616,5.289,1930,9.894,3303,9.78,3691,14.887,4381,15.753,4382,15.753,4383,15.753,4384,15.753,4385,15.753,4386,15.753,4387,15.753,4388,15.753,4389,15.753,4390,15.753,4391,15.753,4392,15.753,4393,15.753,4394,15.753,4395,20.739,4396,15.753,4397,15.753,4398,15.753]],["keywords/649",[]],["title/650",[2042,532.102]],["content/650",[2,1.896,22,2.214,161,7.086,195,2.496,222,2.891,345,7.903,354,4.496,355,5.858,396,7.57,616,4.647,627,5.793,641,7.975,642,9.647,895,5.464,896,8.485,908,8.18,921,7.799,1230,9.449,2042,5.594,3303,11.312,3471,8.878,3484,9.206,3931,12.84]],["keywords/650",[]],["title/651",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,3303,422.823,3471,331.852]],["content/651",[526,6.494,3303,14.206]],["keywords/651",[]],["title/652",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/652",[16,2.944,22,1.491,66,4.499,69,5.685,83,8.43,113,4.796,127,3.744,186,4.772,224,1.742,229,6.425,316,6.009,355,6.53,422,4.721,526,6.493,575,3.68,627,6.203,810,6.905,864,5.546,871,7.749,873,7.228,896,8.527,1189,6.1,1230,11.865,1768,8.789,2055,9.218,2564,8.712,3303,15.755,4372,12.448,4373,14.202,4374,14.202,4375,14.202]],["keywords/652",[]],["title/653",[16,250.43]],["content/653",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3303,11.402]],["keywords/653",[]],["title/654",[282,329.633]],["content/654",[18,5.407,19,4.636,20,3.996,22,1.168,36,4.62,43,3.154,86,5.515,113,4.051,123,5.572,127,2.932,185,4.193,195,3.009,206,4.969,207,5.141,226,2.707,229,5.032,258,2.397,282,3.825,330,4.056,355,4.428,397,3.636,399,2.454,426,7.054,427,4.357,428,7.444,526,3.409,568,4.587,627,5.588,689,4.837,693,3.14,714,4.688,761,6.709,851,4.401,895,5.161,896,8.185,908,6.183,948,10.098,1091,6.601,1133,6.183,1230,8.924,1535,4.671,1716,5.503,1803,6.314,1875,5.794,3262,5.233,3263,5.691,3303,10.684,3481,7.635,3641,6.654,3691,12.354,3766,6.945,4376,9.457,4377,10.535,4378,10.535,4379,11.121,4399,12.011,4400,12.011]],["keywords/654",[]],["title/655",[1023,407.123]],["content/655",[16,2.478,89,4.722,219,7.757,222,3.477,224,1.948,254,8.556,258,3.422,284,5.155,355,4.412,397,3.622,399,4.476,400,7.275,526,4.866,527,8.892,616,4.372,689,4.819,707,5.913,838,7.371,842,5.842,847,6.434,851,6.283,1133,7.872,1230,8.892,1257,13.145,3273,10.769,3275,7.213,3277,9.28,3303,10.645,3349,15.877,3432,8.214,4380,15.04,4401,17.147]],["keywords/655",[]],["title/656",[661,601.456,1622,585.453,1910,633.815]],["content/656",[]],["keywords/656",[]],["title/657",[712,952.57]],["content/657",[1,4.308,2,1.99,16,2.017,18,3.119,20,4.644,22,1.859,31,3.607,66,3.082,106,5.08,120,8.566,136,5.388,175,7.611,181,5.847,195,3.214,211,8.476,222,3.46,224,2.172,241,5.798,258,4.352,261,5.184,277,2.943,281,3.217,307,4.699,329,5.427,354,3.444,355,3.591,408,5.947,434,7.007,467,5.66,489,6.578,529,8.476,579,6.345,597,7.998,632,6.253,651,7.723,681,7.287,761,7.795,901,6.723,1019,9.666,1024,8.985,1044,10.861,1050,8.01,1155,6.922,1443,6.194,1622,9.784,1707,7.443,1917,9.51,3854,11.734,3855,10.221,3865,10.989,4402,13.957]],["keywords/657",[]],["title/658",[2,101.77,195,133.976,1023,229.702,1707,521.453]],["content/658",[2,1.618,3,3.322,22,1.511,79,4.196,106,5.657,195,3.156,222,3.655,228,4.316,238,8.611,258,3.102,261,5.772,270,4.862,354,3.835,355,3.999,359,9.901,408,6.623,490,4.337,556,6.771,641,8.997,642,8.229,644,6.205,679,7.21,697,7.902,871,7.852,879,11.633,897,5.873,973,10.43,1019,10.764,1025,9.762,1042,8.27,1707,12.282,1795,9.157,1888,10.952,2020,6.771,2096,10.43,2240,12.355,3855,11.383,3856,13.067]],["keywords/658",[]],["title/659",[1050,577.406,1622,705.325]],["content/659",[2,1.078,3,1.673,15,6.084,16,2.668,31,2.676,49,3.972,60,5.783,79,4.168,83,5.69,120,10.952,173,3.885,195,2.115,198,4.73,222,2.45,224,1.176,226,2.333,258,3.081,270,6.402,281,2.387,329,4.026,330,3.496,334,4.266,340,2.305,352,2.989,354,2.555,355,2.664,359,4.451,361,6.16,372,4.765,385,3.395,394,6.917,399,3.771,443,6.042,465,3.435,467,6.261,469,3.819,493,5.521,513,6.551,598,6.503,677,8.232,842,3.527,849,3.872,872,6.1,894,6.356,983,7.582,1044,5.881,1050,9.964,1090,6.665,1134,6.948,1155,9.156,1267,4.393,1401,4.803,1622,12.171,2020,4.511,2240,6.223,3530,7.17,3861,8.704,3862,8.704,3863,8.704,3864,8.704,3865,12.156,3866,8.704,3867,8.704,3868,8.704,3869,12.98,3870,8.704,3871,10.36,3872,7.937,3873,8.704,3874,8.704,3875,8.704,3876,8.704,3877,8.704,3878,8.704,3879,8.704,4403,9.587]],["keywords/659",[]],["title/660",[14,478.24,1622,705.325]],["content/660",[3,3.09,13,2.431,14,6.634,16,1.588,22,1.859,30,3.514,31,2.84,42,5.207,43,2.886,49,4.152,71,4.766,79,2.966,108,7.955,155,4.338,168,2.219,195,2.62,208,8.717,223,2.407,224,1.833,226,2.476,282,2.09,313,8.048,334,4.528,368,6.959,380,6.605,397,2.321,421,8.939,422,3.383,424,6.243,464,4.79,465,3.646,467,4.456,485,4.788,490,3.066,495,4.054,513,8.939,546,4.338,579,4.996,676,7.908,738,7.744,744,7.889,800,7.889,887,14.845,894,9.906,1211,6.475,1598,6.605,1622,13.541,1635,10.176,1636,9.639,1745,7.374,1800,10.27,1895,8.225,1910,8.939,3355,8.048,3388,10.525,3530,7.611,3784,9.639,3871,7.374,3889,8.919,3890,13.095,4403,17.703,4404,10.99,4405,10.99,4406,17.703,4407,10.99]],["keywords/660",[]],["title/661",[3,184.904,14,396.962,632,512.565]],["content/661",[3,3.265,11,6.194,13,5.366,14,5.252,18,3.383,155,5.975,195,2.074,208,8.357,222,2.402,226,4.552,241,6.289,270,4.735,282,2.879,316,5.93,321,7.252,340,3.37,352,5.832,374,7.476,399,3.092,426,4.414,467,6.138,485,6.595,552,7.798,632,6.782,910,10.667,920,7.958,926,7.85,1090,9.745,1326,8.526,1581,11.605,1622,12.93,1800,8.132,1840,10.867,1910,8.386,3530,10.484,4406,18.703,4408,15.138,4409,15.138,4410,15.138]],["keywords/661",[]],["title/662",[895,519.739]],["content/662",[3,2.128,18,2.943,22,2.056,30,4.21,49,5.441,195,1.804,224,1.496,235,6.782,241,5.47,261,4.89,270,4.119,298,6.695,307,4.433,321,6.307,367,8.019,384,8.476,422,6.51,464,5.733,465,4.368,552,6.782,557,5.789,626,9.81,680,9.278,833,7.294,841,6.971,872,7.758,895,7.217,896,7.881,900,11.535,918,8.972,921,7.86,1050,5.516,1091,7.237,1121,6.273,1126,4.527,1142,6.412,1155,10.488,1293,13.183,1707,7.021,1731,10.82,1800,11.36,1910,7.294,3249,12.941,3795,9.855,3880,11.069,3881,15.439,3882,9.643]],["keywords/662",[]],["title/663",[751,837.857,1622,585.453,3883,856.309]],["content/663",[18,4.656,22,2.025,224,2.367,235,10.731,404,7.098,525,14.954,616,5.312,751,15.257,1622,10.661,2034,16.403,3787,15.593,3883,15.593]],["keywords/663",[]],["title/664",[16,199.154,258,275.056]],["content/664",[3,3.408,17,12.275,18,2.926,19,3.018,20,4.356,30,4.186,42,8.667,49,4.707,73,4.529,98,11.356,120,11.672,173,6.864,195,1.794,224,1.487,230,6.195,235,6.744,263,5.616,282,2.49,320,9.072,409,7.086,426,5.334,469,6.748,490,5.104,803,9.755,835,10.874,895,5.486,896,6.817,1044,10.391,1050,9.562,1155,10.457,1393,9.423,1401,8.486,1551,8.786,1622,6.7,1716,4.186,1875,4.408,2606,9.067,3249,9.226,3882,9.589,3884,9.8,3885,11.007,3886,11.007,3887,12.669]],["keywords/664",[]],["title/665",[16,199.154,397,291.165]],["content/665",[3,2.431,13,3.327,14,5.219,18,4.495,19,3.467,20,5.004,22,2.203,31,3.887,42,7.126,49,5.175,70,6.051,79,4.06,113,4.734,120,9.01,226,5.106,282,2.86,368,5.474,399,4.108,422,4.63,424,8.543,426,6.607,464,5.039,689,4.227,744,10.796,746,6.804,835,10.795,1050,6.301,1155,9.974,1716,4.809,1800,12.172,1875,5.063,1910,8.332,3884,11.257,3888,12.644,3889,12.207,3890,16.323,3891,11.53]],["keywords/665",[]],["title/666",[3350,1406.653]],["content/666",[]],["keywords/666",[]],["title/667",[195,156.745,397,241.681,616,291.743]],["content/667",[2,1.867,3,2.9,7,7.246,8,8.154,31,4.637,49,4.616,79,4.843,89,3.866,127,4.379,195,2.458,207,7.678,281,4.136,304,11.549,397,4.763,399,3.665,469,6.618,616,4.575,652,8.205,1625,17.754,3350,20.015,4411,17.94,4412,17.94,4413,17.94]],["keywords/667",[]],["title/668",[2042,532.102]],["content/668",[14,6.919,70,8.022,304,12.836,526,6.829,551,8.086,601,9.25,652,6.634,1696,13.38,3063,17.49,3332,17.275,3484,10.074,4414,19.94,4415,19.94,4416,19.94,4417,19.94]],["keywords/668",[]],["title/669",[16,250.43]],["content/669",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3350,14.905]],["keywords/669",[]],["title/670",[282,329.633]],["content/670",[3,2.081,6,5.942,14,6.273,18,5.531,19,4.168,36,4.952,43,3.381,195,1.764,206,7.48,222,2.043,258,2.569,282,3.439,330,4.347,397,2.72,399,2.63,422,3.963,426,7.217,427,4.671,428,7.734,447,5.101,464,3.226,568,6.904,601,8.387,627,5.316,651,5.2,689,3.619,693,3.365,714,5.025,731,5.327,851,4.718,896,6.738,908,4.625,1142,6.312,1535,5.007,1716,5.781,1803,6.769,1875,6.086,2094,9.827,3262,5.609,3263,6.101,3273,8.087,3350,18.39,3492,8.087,3493,7.993,3500,7.904,3951,9.871,4418,10.824,4419,12.875,4420,12.875,4421,12.875,4422,12.875]],["keywords/670",[]],["title/671",[1023,407.123]],["content/671",[15,4.5,123,8.387,222,2.869,224,2.054,258,3.608,397,3.819,399,3.693,689,5.081,707,6.235,838,7.772,842,6.16,847,6.784,851,6.625,2094,7.841,3262,7.877,3273,11.355,3275,7.606,3277,12.263,3279,10.183,3351,16.741,3496,11.957,3500,11.099,3641,10.016,3766,10.454,3774,14.236,4358,15.2,4423,18.08,4424,18.08]],["keywords/671",[]],["title/672",[661,514.086,1622,500.408,1910,541.745,3352,731.918]],["content/672",[]],["keywords/672",[]],["title/673",[712,952.57]],["content/673",[1,4.592,2,2.121,16,2.216,18,3.428,20,5.103,22,1.981,66,3.386,106,5.583,136,5.921,181,6.425,195,3.135,211,9.315,222,3.233,224,2.315,241,6.372,258,4.566,261,5.696,277,3.234,281,3.536,307,5.163,329,5.964,354,3.784,355,3.946,408,6.536,434,7.7,467,6.219,489,7.228,529,9.315,597,8.789,651,6.195,681,8.008,761,8.567,901,7.389,1019,10.622,1024,9.874,1044,8.712,1050,6.425,1443,6.807,1622,7.849,1707,8.179,1917,10.451,3854,12.894,3855,11.232]],["keywords/673",[]],["title/674",[2,101.77,195,133.976,1023,229.702,1707,521.453]],["content/674",[2,1.618,3,3.322,22,1.511,79,4.196,106,5.657,195,3.156,222,3.655,228,4.316,238,8.611,258,3.102,261,5.772,270,4.862,354,3.835,355,3.999,359,9.901,408,6.623,490,4.337,556,6.771,641,8.997,642,8.229,644,6.205,679,7.21,697,7.902,871,7.852,879,11.633,897,5.873,973,10.43,1019,10.764,1025,9.762,1042,8.27,1707,12.282,1795,9.157,1888,10.952,2020,6.771,2096,10.43,2240,12.355,3855,11.383,3856,13.067]],["keywords/674",[]],["title/675",[16,165.308,1622,585.453,3352,856.309]],["content/675",[16,3.093,30,6.845,185,7.474,195,2.933,198,7.555,208,6.842,258,4.272,279,7.041,355,4.255,359,7.109,362,10.043,422,5.091,427,5.999,467,6.706,489,7.793,600,11.268,601,7.672,658,6.628,661,8.694,1025,10.387,1050,8.968,1113,8.252,1155,8.202,1622,12.847,1707,8.818,1765,10.043,1830,11.453,2630,10.937,3865,13.021,4425,16.537,4426,16.537]],["keywords/675",[]],["title/676",[1050,577.406,1622,705.325]],["content/676",[2,1.155,3,1.793,15,6.206,16,1.603,31,2.867,49,4.181,60,6.197,79,4.386,120,11.172,173,4.163,195,2.226,198,5.069,222,2.578,224,1.26,226,2.5,258,3.242,270,6.62,281,2.557,329,4.314,330,3.746,354,2.737,355,2.854,359,4.769,361,6.601,372,5.015,385,3.638,394,7.279,399,3.927,443,6.475,465,3.681,467,6.589,469,4.092,493,5.916,598,6.968,677,8.572,842,3.78,849,4.149,983,8.125,1044,6.302,1050,9.86,1090,7.142,1134,7.445,1155,9.535,1267,4.707,1401,5.147,1622,11.528,2020,4.833,2240,6.668,3861,9.327,3862,9.327,3863,9.327,3864,9.327,3865,12.793,3866,9.327,3867,9.327,3868,9.327,3869,13.66,3870,9.327,3871,10.903,3872,8.505,3873,9.327,3874,9.327,3875,9.327,3876,9.327,3877,9.327,3878,9.327,3879,9.327]],["keywords/676",[]],["title/677",[895,519.739]],["content/677",[3,2.128,18,2.943,22,2.056,30,4.21,49,5.441,195,1.804,224,1.496,235,6.782,241,5.47,261,4.89,270,4.119,298,6.695,307,4.433,321,6.307,367,8.019,384,8.476,422,6.51,464,5.733,465,4.368,552,6.782,557,5.789,626,9.81,680,9.278,833,7.294,841,6.971,872,7.758,895,7.217,896,7.881,900,11.535,918,8.972,921,7.86,1050,5.516,1091,7.237,1121,6.273,1126,4.527,1142,6.412,1155,10.488,1293,13.183,1707,7.021,1731,10.82,1800,11.36,1910,7.294,3249,12.941,3795,9.855,3880,11.069,3881,15.439,3882,9.643]],["keywords/677",[]],["title/678",[751,837.857,1622,585.453,3883,856.309]],["content/678",[18,4.656,22,2.025,224,2.367,235,10.731,404,7.098,525,14.954,616,5.312,751,15.257,1622,10.661,2034,16.403,3787,15.593,3883,15.593]],["keywords/678",[]],["title/679",[16,199.154,258,275.056]],["content/679",[3,3.25,17,10.092,18,3.361,19,3.467,20,5.004,30,4.809,42,7.126,49,3.87,73,5.202,98,9.337,120,11.296,173,5.644,195,2.061,224,1.709,230,5.093,235,7.747,263,4.617,282,2.86,320,7.459,409,8.14,426,5.865,469,5.548,490,4.197,803,8.02,835,11.524,895,4.51,896,5.605,1044,8.543,1050,9.492,1155,9.974,1393,7.747,1401,6.977,1551,10.092,1622,7.696,1716,4.809,1875,5.063,2606,10.416,3249,10.598,3882,11.015,3884,11.257,3885,12.644,3886,12.644,3887,10.416]],["keywords/679",[]],["title/680",[16,199.154,397,291.165]],["content/680",[3,2.599,14,5.579,18,4.698,19,3.707,20,5.35,22,2.044,31,4.156,42,7.619,49,5.408,70,6.469,79,4.341,113,3.785,120,9.418,226,5.277,282,3.058,368,5.853,399,3.285,422,4.95,426,6.13,464,5.266,835,10.014,1050,6.736,1155,10.425,1716,5.141,1800,12.58,1875,5.413,1910,8.908,3884,12.035,3888,13.518,3889,13.05,3890,17.06,3891,12.327]],["keywords/680",[]],["title/681",[3352,1297.249]],["content/681",[]],["keywords/681",[]],["title/682",[195,156.745,397,241.681,616,291.743]],["content/682",[2,2.006,3,3.116,7,7.787,8,8.526,31,4.983,49,4.96,127,4.705,195,2.641,397,4.981,399,3.938,469,7.112,616,4.916,652,6.414,3352,14.43,4427,19.279,4428,19.279,4429,19.279,4430,19.279,4431,19.279]],["keywords/682",[]],["title/683",[2042,532.102]],["content/683",[2,1.853,16,2.572,22,1.731,161,6.923,163,5.923,340,4.995,347,6.417,352,6.479,354,4.393,355,4.581,396,7.396,526,5.052,556,7.756,575,4.271,599,7.687,627,4.53,677,7.938,731,7.366,895,6.729,896,6.635,1020,9.785,1026,9.426,1126,6.121,1143,8.938,2064,12.78,3352,18.393]],["keywords/683",[]],["title/684",[16,250.43]],["content/684",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3352,13.746]],["keywords/684",[]],["title/685",[282,329.633]],["content/685",[2,1.435,3,2.229,18,5.217,19,4.372,22,1.341,36,5.305,43,3.621,86,6.333,123,6.398,162,5.706,163,4.589,168,2.785,195,1.89,222,2.188,258,2.752,282,4.122,330,4.657,340,3.07,347,4.971,352,3.982,354,3.403,355,3.548,397,2.913,399,2.817,426,6.806,427,5.003,428,8.022,568,5.267,627,5.515,689,3.876,693,3.605,714,5.383,851,5.053,875,3.848,895,5.687,896,8.077,908,4.955,1020,7.58,1026,7.302,1155,6.84,1535,5.363,1716,6.063,1803,7.25,1875,6.384,2025,7.903,3262,6.009,3263,6.535,3352,10.323,3641,7.641,3766,7.975,3943,11.595]],["keywords/685",[]],["title/686",[1023,407.123]],["content/686",[86,5.404,222,1.867,224,1.337,258,2.348,347,4.241,397,5.606,399,2.404,400,10.193,525,8.447,689,7.458,707,4.058,838,5.059,842,4.009,847,9.957,851,9.723,875,3.284,895,3.529,1023,2.764,1026,6.23,1114,9.266,1257,9.022,1278,7.676,1768,6.744,2125,7.002,2986,9.022,3262,5.127,3273,7.391,3275,4.951,3277,6.369,3279,12.989,3353,10.896,3530,8.15,3642,10.322,4115,9.893,4432,11.768,4433,11.768,4434,11.768,4435,11.768,4436,11.768,4437,11.768,4438,11.768,4439,11.768,4440,11.768,4441,11.768,4442,11.768,4443,11.768,4444,11.768,4445,10.896,4446,11.768]],["keywords/686",[]],["title/687",[661,514.086,1622,500.408,1910,541.745,3355,716.147]],["content/687",[]],["keywords/687",[]],["title/688",[712,952.57]],["content/688",[1,4.592,2,2.121,16,2.216,18,3.428,20,5.103,22,1.981,66,3.386,106,5.583,136,5.921,181,6.425,195,3.135,211,9.315,222,3.233,224,2.315,241,6.372,258,4.566,261,5.696,277,3.234,281,3.536,307,5.163,329,5.964,354,3.784,355,3.946,408,6.536,434,7.7,467,6.219,489,7.228,529,9.315,597,8.789,651,6.195,681,8.008,761,8.567,901,7.389,1019,10.622,1024,9.874,1044,8.712,1050,6.425,1443,6.807,1622,7.849,1707,8.179,1917,10.451,3854,12.894,3855,11.232]],["keywords/688",[]],["title/689",[2,101.77,195,133.976,1023,229.702,1707,521.453]],["content/689",[2,1.618,3,3.322,22,1.511,79,4.196,106,5.657,195,3.156,222,3.655,228,4.316,238,8.611,258,3.102,261,5.772,270,4.862,354,3.835,355,3.999,359,9.901,408,6.623,490,4.337,556,6.771,641,8.997,642,8.229,644,6.205,679,7.21,697,7.902,871,7.852,879,11.633,897,5.873,973,10.43,1019,10.764,1025,9.762,1042,8.27,1707,12.282,1795,9.157,1888,10.952,2020,6.771,2096,10.43,2240,12.355,3855,11.383,3856,13.067]],["keywords/689",[]],["title/690",[16,165.308,1622,585.453,3355,837.857]],["content/690",[2,1.746,13,3.711,15,4.175,16,2.424,66,3.704,79,4.528,89,4.656,207,9.247,222,2.662,261,6.23,265,9.79,281,3.867,359,7.211,365,11.095,422,5.164,445,5.137,658,8.659,728,9.37,875,4.681,1050,10.574,1269,12.861,1622,12.916,1775,11.606,1985,11.821,2132,8.758,3355,12.286,4035,12.556,4447,21.606]],["keywords/690",[]],["title/691",[1050,577.406,1622,705.325]],["content/691",[2,1.155,3,1.793,15,6.206,16,1.603,31,2.867,49,4.181,60,6.197,79,4.386,120,11.172,173,4.163,195,2.226,198,5.069,222,2.578,224,1.26,226,2.5,258,3.242,270,6.62,281,2.557,329,4.314,330,3.746,354,2.737,355,2.854,359,4.769,361,6.601,372,5.015,385,3.638,394,7.279,399,3.927,443,6.475,465,3.681,467,6.589,469,4.092,493,5.916,598,6.968,677,8.572,842,3.78,849,4.149,983,8.125,1044,6.302,1050,9.86,1090,7.142,1134,7.445,1155,9.535,1267,4.707,1401,5.147,1622,11.528,2020,4.833,2240,6.668,3861,9.327,3862,9.327,3863,9.327,3864,9.327,3865,12.793,3866,9.327,3867,9.327,3868,9.327,3869,13.66,3870,9.327,3871,10.903,3872,8.505,3873,9.327,3874,9.327,3875,9.327,3876,9.327,3877,9.327,3878,9.327,3879,9.327]],["keywords/691",[]],["title/692",[895,519.739]],["content/692",[3,2.128,18,2.943,22,2.056,30,4.21,49,5.441,195,1.804,224,1.496,235,6.782,241,5.47,261,4.89,270,4.119,298,6.695,307,4.433,321,6.307,367,8.019,384,8.476,422,6.51,464,5.733,465,4.368,552,6.782,557,5.789,626,9.81,680,9.278,833,7.294,841,6.971,872,7.758,895,7.217,896,7.881,900,11.535,918,8.972,921,7.86,1050,5.516,1091,7.237,1121,6.273,1126,4.527,1142,6.412,1155,10.488,1293,13.183,1707,7.021,1731,10.82,1800,11.36,1910,7.294,3249,12.941,3795,9.855,3880,11.069,3881,15.439,3882,9.643]],["keywords/692",[]],["title/693",[751,837.857,1622,585.453,3883,856.309]],["content/693",[18,4.656,22,2.025,224,2.367,235,10.731,404,7.098,525,14.954,616,5.312,751,15.257,1622,10.661,2034,16.403,3787,15.593,3883,15.593]],["keywords/693",[]],["title/694",[16,199.154,258,275.056]],["content/694",[3,3.25,17,10.092,18,3.361,19,3.467,20,5.004,30,4.809,42,7.126,49,3.87,73,5.202,98,9.337,120,11.296,173,5.644,195,2.061,224,1.709,230,5.093,235,7.747,263,4.617,282,2.86,320,7.459,409,8.14,426,5.865,469,5.548,490,4.197,803,8.02,835,11.524,895,4.51,896,5.605,1044,8.543,1050,9.492,1155,9.974,1393,7.747,1401,6.977,1551,10.092,1622,7.696,1716,4.809,1875,5.063,2606,10.416,3249,10.598,3882,11.015,3884,11.257,3885,12.644,3886,12.644,3887,10.416]],["keywords/694",[]],["title/695",[16,199.154,397,291.165]],["content/695",[3,2.431,13,3.327,14,5.219,18,4.495,19,3.467,20,5.004,22,2.203,31,3.887,42,7.126,49,5.175,70,6.051,79,4.06,113,4.734,120,9.01,226,5.106,282,2.86,368,5.474,399,4.108,422,4.63,424,8.543,426,6.607,464,5.039,689,4.227,744,10.796,746,6.804,835,10.795,1050,6.301,1155,9.974,1716,4.809,1800,12.172,1875,5.063,1910,8.332,3884,11.257,3888,12.644,3889,12.207,3890,16.323,3891,11.53]],["keywords/695",[]],["title/696",[2823,1146.263]],["content/696",[]],["keywords/696",[]],["title/697",[195,156.745,397,241.681,616,291.743]],["content/697",[2,1.882,3,2.922,7,7.303,8,8.193,31,4.673,49,4.652,127,4.413,195,2.477,397,4.787,399,3.693,469,6.669,616,4.61,652,6.015,1707,9.641,2823,11.957,4448,18.08,4449,18.08,4450,18.08,4451,18.08,4452,18.08,4453,18.08,4454,18.08,4455,18.08,4456,18.08,4457,18.08,4458,18.08,4459,18.08]],["keywords/697",[]],["title/698",[2042,532.102]],["content/698",[13,4.528,205,9.594,224,2.325,226,4.612,277,4.315,340,4.556,352,5.909,445,6.267,652,6.809,731,8.468,1018,13.945,1221,7.959,2823,16.167]],["keywords/698",[]],["title/699",[16,250.43]],["content/699",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2823,12.146]],["keywords/699",[]],["title/700",[282,329.633]],["content/700",[3,2.479,13,4.508,18,5.449,19,4.697,36,5.9,43,4.027,123,7.115,195,2.101,222,2.434,258,3.061,282,3.875,330,5.179,397,3.24,399,3.133,422,4.721,426,7.11,427,5.564,428,8.469,447,6.077,464,3.843,568,5.857,652,6.779,689,4.311,693,4.009,714,5.986,851,5.62,908,5.51,1535,5.964,1716,6.515,1803,8.063,1875,6.86,2823,13.476,3262,6.682,3263,7.267,3640,10.451,3641,8.497,4335,13.453]],["keywords/700",[]],["title/701",[1023,407.123]],["content/701",[15,4.72,123,8.797,222,3.009,224,2.154,258,3.784,397,4.006,399,3.874,689,5.33,707,6.54,838,8.152,842,6.461,847,7.116,851,6.949,1921,15.391,3262,8.262,3275,7.978,3277,10.263,3279,10.681,3641,10.506,3766,10.966,4337,15.391,4460,18.964,4461,18.964]],["keywords/701",[]],["title/702",[3357,1364.669]],["content/702",[]],["keywords/702",[]],["title/703",[195,156.745,397,241.681,616,291.743]],["content/703",[2,2.093,3,3.251,7,8.123,8,7.273,22,1.955,31,5.198,49,5.175,127,4.909,168,4.061,224,2.285,397,4.249,399,4.109,469,7.419,714,7.85,3357,15.836,4462,20.112]],["keywords/703",[]],["title/704",[2042,532.102]],["content/704",[13,4.651,224,2.388,226,4.737,277,4.432,340,4.679,352,6.069,445,6.437,652,6.994,1230,10.901,3357,19.556]],["keywords/704",[]],["title/705",[16,250.43]],["content/705",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3357,14.46]],["keywords/705",[]],["title/706",[282,329.633]],["content/706",[3,2.479,13,4.508,18,5.449,19,4.697,36,5.9,43,4.027,123,7.115,195,2.101,222,2.434,258,3.061,282,3.875,330,5.179,397,3.24,399,3.133,422,4.721,426,7.11,427,5.564,428,8.469,447,6.077,464,3.843,568,5.857,652,6.779,689,4.311,693,4.009,714,5.986,851,5.62,908,5.51,1535,5.964,1716,6.515,1803,8.063,1875,6.86,3262,6.682,3263,7.267,3272,12.076,3357,16.044,3640,10.451,3641,8.497]],["keywords/706",[]],["title/707",[1023,407.123]],["content/707",[15,4.72,123,8.797,222,3.009,224,2.154,230,6.422,258,3.784,397,4.006,399,3.874,689,5.33,707,6.54,838,8.152,842,6.461,847,7.116,851,6.949,3262,8.262,3275,7.978,3277,10.263,3278,14.538,3279,10.681,3641,10.506,3766,10.966,4463,18.964,4464,17.56]],["keywords/707",[]],["title/708",[3355,1269.296]],["content/708",[]],["keywords/708",[]],["title/709",[195,156.745,397,241.681,616,291.743]],["content/709",[2,1.444,3,2.242,7,5.604,8,6.885,19,4.389,31,3.586,49,3.57,127,3.386,195,1.901,206,5.74,397,4.022,399,2.834,465,6.317,469,5.118,616,3.538,632,6.216,646,6.436,652,4.616,731,5.74,781,9.454,870,9.05,1021,6.538,1765,8.426,1795,8.174,2065,10.636,2130,9.454,3355,10.16,4465,13.874,4466,13.874,4467,13.874,4468,13.874,4469,13.874,4470,13.874,4471,13.874,4472,23.399,4473,13.874,4474,13.874,4475,13.874,4476,13.874,4477,13.874,4478,13.874,4479,13.874,4480,13.874,4481,13.874,4482,13.874,4483,13.874,4484,13.874,4485,13.874,4486,13.874,4487,13.874,4488,13.874,4489,13.874,4490,13.874,4491,13.874,4492,13.874,4493,13.874,4494,13.874,4495,13.874,4496,13.874,4497,13.874,4498,13.874]],["keywords/709",[]],["title/710",[2042,532.102]],["content/710",[66,4.77,127,5.274,652,8.398,752,8.465,896,9.406,4499,21.607]],["keywords/710",[]],["title/711",[16,250.43]],["content/711",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3355,13.45]],["keywords/711",[]],["title/712",[282,329.633]],["content/712",[3,2.256,18,5.492,19,4.407,22,2.12,222,2.215,258,2.785,282,3.636,397,2.948,399,2.851,422,4.296,426,7.166,447,5.53,465,4.63,526,6.657,575,3.349,626,8.87,652,7.256,689,3.923,693,3.648,714,5.447,851,5.114,896,8.127,908,5.014,1535,5.427,1716,6.113,1859,12.181,1875,6.437,2255,10.447,3064,13.245,3263,6.613,3355,17.18,4500,13.957,4501,19.12,4502,13.957,4503,13.957,4504,13.957,4505,13.957]],["keywords/712",[]],["title/713",[1023,407.123]],["content/713",[15,4.72,222,3.009,224,2.154,246,10.592,258,3.784,397,4.006,399,3.874,400,8.046,689,5.33,707,6.54,838,8.152,842,6.461,847,7.116,851,6.949,1859,10.592,3064,11.517,3261,15.391,3275,7.978,3751,17.56,4506,18.964,4507,18.964,4508,18.964,4509,18.964]],["keywords/713",[]],["title/714",[70,554.539,3359,899.071]],["content/714",[]],["keywords/714",[]],["title/715",[195,156.745,397,241.681,616,291.743]],["content/715",[2,1.99,3,3.09,7,7.723,8,6.914,31,4.942,49,4.919,127,4.667,195,2.62,397,4.956,399,3.906,469,7.053,541,12.165,616,4.876,2171,16.074,3727,17.704,3962,17.704,4510,19.12,4511,19.12,4512,19.12,4513,19.12]],["keywords/715",[]],["title/716",[2042,532.102]],["content/716",[2,2.358,22,2.203,66,3.992,161,7.031,195,2.477,206,9.375,222,2.869,345,7.841,347,6.516,354,4.461,355,4.652,396,7.511,601,10.511,616,4.61,641,7.913,642,9.572,895,5.422,908,8.14,921,7.738,2042,5.551,3359,11.793,3471,8.809,3484,9.134,3931,12.74]],["keywords/716",[]],["title/717",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,3359,444.26,3471,331.852]],["content/717",[25,5.757,70,9.783,89,4.372,195,2.78,222,3.219,241,8.428,386,10.002,526,6.901,575,4.868,627,5.162,3359,15.862,3966,14.05]],["keywords/717",[]],["title/718",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/718",[16,3.093,22,2.081,66,4.726,195,2.266,206,8.857,222,3.397,290,7.109,291,4.538,320,8.202,340,3.681,347,5.96,352,4.775,422,5.091,601,7.672,627,6.04,652,5.502,864,5.98,896,8.846,1442,9.237,1974,8.153,1986,10.267,2155,12.111,3333,14.158,3359,16.961,3484,8.355,4514,16.537,4515,16.537]],["keywords/718",[]],["title/719",[16,250.43]],["content/719",[1,5.617,2,1.911,16,3.306,22,1.786,70,7.389,89,3.958,163,6.11,222,2.914,224,2.964,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3359,11.98]],["keywords/719",[]],["title/720",[282,329.633]],["content/720",[2,1.212,3,1.883,14,5.842,15,2.9,18,4.84,19,3.881,20,3.876,22,1.133,30,3.725,36,4.481,70,4.687,86,5.349,168,2.352,195,2.709,222,3.137,226,2.625,230,3.945,241,4.84,258,2.325,282,4.119,283,4.372,329,4.53,330,3.934,347,6.068,352,3.364,354,2.874,355,4.332,399,2.38,409,6.305,422,3.586,426,6.699,427,4.226,428,7.317,469,4.297,526,5.61,568,4.449,601,5.404,627,4.284,689,4.732,693,3.045,714,4.547,846,5.612,851,4.269,875,3.251,895,6.494,896,6.274,908,7.102,1133,4.185,1344,7.075,1535,4.53,1621,7.075,1716,5.383,1795,6.864,1803,6.125,1875,5.668,2120,7.599,2960,9.455,3262,5.076,3263,5.52,3273,7.317,3359,10.982,3471,5.676,3739,10.787,3744,9.173,4357,9.794,4376,9.173,4516,11.65]],["keywords/720",[]],["title/721",[1023,407.123]],["content/721",[1,3.864,15,4.268,86,7.873,123,10.165,222,2.721,224,1.948,258,3.422,347,6.18,397,3.622,399,3.503,400,7.275,689,4.819,707,5.913,838,7.371,842,5.842,847,6.434,851,6.283,895,5.142,908,6.16,1023,4.028,1133,6.16,1142,5.986,2125,10.202,3262,7.47,3273,13.762,3275,7.213,3323,13.916,3359,11.185,3944,13.501,3966,11.875,3997,14.415,4200,15.04,4517,17.147,4518,17.147]],["keywords/721",[]],["title/722",[1042,554.539,3359,899.071]],["content/722",[]],["keywords/722",[]],["title/723",[2042,532.102]],["content/723",[18,3.777,73,5.845,127,5.298,160,7.921,186,7.462,195,2.315,197,12.331,258,4.332,274,8.883,334,6.963,374,6.254,526,6.16,575,4.054,652,7.979,731,8.981,902,7.429,903,16.247,1042,6.798,1598,10.156,1768,9.683,1923,10.878,2096,11.339,2470,11.022,3359,11.022,4024,15.646,4519,16.898,4520,14.822,4521,16.898]],["keywords/723",[]],["title/724",[895,519.739]],["content/724",[16,2.707,18,4.187,22,1.821,69,3.781,71,5.877,75,7.908,89,4.037,195,1.857,206,5.606,222,2.973,228,5.202,231,5.41,250,7.568,277,2.857,281,4.319,290,5.825,291,3.718,340,3.016,347,4.884,355,3.486,365,8.962,422,4.171,428,5.015,557,5.958,627,5.464,676,6.641,693,3.542,749,6.72,840,9.924,849,5.067,864,4.9,895,4.063,896,9.372,910,9.548,1268,10.388,1837,9.348,1842,9.727,1889,11.886,1945,7.765,1974,9.236,1986,13.331,2055,8.144,2155,9.924,2545,9.384,3359,15.111,3484,9.465,4522,17.347,4523,13.551,4524,13.551]],["keywords/724",[]],["title/725",[627,291.095,895,343.078,896,426.353]],["content/725",[66,4.328,147,10.53,340,4.364,355,5.044,359,8.427,601,9.094,627,4.988,679,9.094,896,8.876,1113,9.782,3359,12.787,3484,9.904,3785,17.195,3795,14.673,4520,17.195,4525,18.152,4526,18.152,4527,18.152]],["keywords/725",[]],["title/726",[895,413.323,3484,696.341]],["content/726",[22,1.434,66,5.3,147,7.925,198,6.741,206,8.215,296,5.801,340,3.284,355,5.774,359,6.342,552,7.6,557,6.487,601,10.41,627,3.754,652,6.606,679,6.844,692,7.868,896,8.363,900,9.266,1021,9.357,1042,5.936,1063,7.985,1113,7.362,1268,11.311,1945,8.455,3333,9.758,3359,16.34,3484,10.031,3496,9.758,3500,9.058,3785,12.941,3795,11.043,4520,12.941,4522,13.661,4525,13.661,4526,13.661,4527,13.661,4528,14.754,4529,14.754,4530,13.661,4531,14.754,4532,14.754]],["keywords/726",[]],["title/727",[16,250.43]],["content/727",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1042,7.331,3359,11.886]],["keywords/727",[]],["title/728",[282,329.633]],["content/728",[14,8.222,18,5.539,19,3.296,22,1.89,147,10.442,160,9.113,282,2.72,422,5.984,426,7.227,464,4.87,467,5.799,601,9.018,627,3.639,896,9.527,903,10.703,1042,5.753,1050,5.991,1142,6.787,1716,4.572,1875,4.814,1945,8.195,2094,10.278,2248,8.123,2811,15.777,3273,8.982,3359,12.68,3484,11.972,3496,9.458,3500,8.779,3501,9.904,4533,14.3,4534,14.3]],["keywords/728",[]],["title/729",[616,351.477,689,387.369]],["content/729",[127,5.374,160,10.32,747,14.56,4535,22.016,4536,22.016,4537,22.016]],["keywords/729",[]],["title/730",[3361,1297.249]],["content/730",[]],["keywords/730",[]],["title/731",[2042,532.102]],["content/731",[2,1.911,13,5.062,22,2.225,161,7.142,195,2.516,222,2.914,345,7.965,347,6.619,354,4.531,355,4.725,396,7.63,616,4.683,641,8.038,642,9.723,652,7.613,895,5.507,908,8.22,921,7.86,2042,5.638,3361,13.746,3471,8.948,3484,9.278,3931,12.941]],["keywords/731",[]],["title/732",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,3361,509.766,3471,331.852]],["content/732",[526,6.494,3361,17.127]],["keywords/732",[]],["title/733",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/733",[13,4.917,526,6.308,652,7.395,3361,19.205]],["keywords/733",[]],["title/734",[16,250.43]],["content/734",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3361,13.746]],["keywords/734",[]],["title/735",[282,329.633]],["content/735",[13,4.949,18,5.587,19,5.762,20,4.878,86,6.732,127,3.578,226,4.455,228,4.071,230,4.965,258,2.926,282,4.254,397,3.097,399,2.995,400,6.22,426,6.981,652,7.442,682,5.831,693,3.832,714,5.722,851,5.372,895,7.496,908,7.102,1535,5.701,1716,6.321,1875,6.655,3263,6.947,3361,14.797,3481,9.32,3482,9.838,3966,10.153,4337,11.899,4538,13.575,4539,13.575]],["keywords/735",[]],["title/736",[1023,407.123]],["content/736",[89,3.615,222,3.428,224,1.906,230,5.681,254,8.371,258,3.348,284,5.044,397,5.049,399,3.427,400,10.141,689,6.717,707,5.785,838,7.211,842,5.715,847,8.968,851,8.757,1133,6.027,3275,7.057,3277,9.079,3362,15.533,3432,11.449,3495,10.299,3966,11.618,4337,17.536,4539,15.533]],["keywords/736",[]],["title/737",[3363,1364.669]],["content/737",[]],["keywords/737",[]],["title/738",[195,156.745,397,241.681,616,291.743]],["content/738",[2,1.363,3,2.116,7,5.288,8,4.734,19,5.262,22,1.273,31,3.384,49,4.707,127,3.196,168,2.643,207,7.829,224,1.487,228,5.08,230,4.434,250,12.749,270,4.096,281,4.217,343,9.484,386,11.839,397,2.766,399,2.675,429,8.128,440,5.073,469,4.83,714,5.11,787,8.659,887,12.89,993,7.086,1837,10.52,2103,12.123,2807,15.379,3363,21.336,3966,9.067,4540,13.093,4541,13.242,4542,13.093,4543,13.093,4544,13.093,4545,13.093,4546,13.093,4547,13.093,4548,13.093]],["keywords/738",[]],["title/739",[2042,532.102]],["content/739",[14,6.475,30,5.966,112,6.245,279,7.6,575,4.477,632,8.36,652,8.353,1050,7.817,1214,12.172,1215,8.483,1267,7.917,1905,13.149,2094,10.023,3363,19.766,4549,18.66,4550,18.66,4551,18.66,4552,18.66,4553,18.66]],["keywords/739",[]],["title/740",[16,250.43]],["content/740",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3363,14.46]],["keywords/740",[]],["title/741",[282,329.633]],["content/741",[3,2.216,14,6.553,18,5.641,19,4.354,36,5.274,43,3.6,123,6.36,195,1.878,206,7.814,222,2.175,258,2.736,282,3.592,330,4.629,397,2.896,399,2.801,426,7.36,427,4.974,428,7.997,447,5.432,568,5.236,601,8.762,689,3.853,693,3.584,714,5.351,851,5.024,908,4.925,1050,7.912,1142,6.594,1267,5.817,1535,5.331,1716,6.039,1803,7.208,1875,6.358,2094,10.098,3064,8.327,3262,5.973,3263,6.496,3363,18.332,3500,8.417,3640,9.342,3641,7.595,4418,11.526,4554,12.695]],["keywords/741",[]],["title/742",[1023,407.123]],["content/742",[15,4.5,123,8.387,222,2.869,224,2.054,258,3.608,397,3.819,399,3.693,689,5.081,707,6.235,838,7.772,842,6.16,847,6.784,851,6.625,3064,10.98,3262,7.877,3275,7.606,3277,12.263,3279,10.183,3496,11.957,3500,11.099,3641,10.016,3766,10.454,3774,14.236,4541,11.355,4554,16.741,4555,18.08,4556,18.08,4557,18.08]],["keywords/742",[]],["title/743",[3365,1364.669]],["content/743",[]],["keywords/743",[]],["title/744",[195,156.745,397,241.681,616,291.743]],["content/744",[2,2.058,3,3.195,7,7.985,8,8.657,31,5.11,49,5.087,127,4.825,195,2.709,397,5.058,399,4.039,469,7.293,616,5.041,652,6.578,1762,12.007,3365,15.567,4558,19.77]],["keywords/744",[]],["title/745",[2042,532.102]],["content/745",[14,6.86,224,2.246,226,4.455,277,4.168,340,4.401,352,5.708,445,6.054,447,10.203,513,8.388,526,5.611,901,9.524,2122,9.747,3365,18.851,4559,11.763,4560,18.306]],["keywords/745",[]],["title/746",[16,250.43]],["content/746",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3365,14.46]],["keywords/746",[]],["title/747",[282,329.633]],["content/747",[3,1.448,8,3.239,14,4.799,18,4.247,19,3.189,22,0.871,25,2.542,30,2.864,31,6.198,36,3.446,43,4.437,49,2.305,52,7.705,70,5.565,78,4.885,89,1.93,92,3.994,101,11.629,103,3.868,107,7.222,110,4.199,139,4.113,185,3.127,195,2.814,207,3.834,222,1.421,224,1.018,226,3.117,258,1.788,281,2.065,282,3.214,312,3.834,330,3.025,394,6.197,397,1.892,399,1.83,409,4.848,426,6.33,427,5.018,428,8.877,445,2.743,447,8.6,544,4.584,551,3.632,568,6.453,604,4.614,682,3.563,689,2.518,693,2.341,714,5.399,721,10.125,739,5.626,747,5.924,813,4.963,851,3.282,908,3.218,909,5.003,1049,4.268,1535,3.483,1560,7.531,1614,4.923,1679,4.113,1708,4.365,1716,4.423,1748,4.416,1837,4.47,1875,4.657,1974,6.819,1979,8.294,2122,8.33,2127,5.384,2132,4.677,2211,6.204,2248,5.088,2559,11.514,3064,5.44,3262,3.903,3263,4.244,3365,13.304,3492,8.688,3493,8.587,3494,9.747,3845,7.857,3950,6.204,3969,6.705,4559,8.23,4560,8.294,4561,8.294,4562,8.294,4563,4.743,4564,8.294,4565,8.294]],["keywords/747",[]],["title/748",[1023,407.123]],["content/748",[15,4.058,123,9.84,222,2.587,224,1.852,258,3.254,397,3.444,399,3.331,458,7.202,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,851,5.974,1133,5.858,1142,7.406,1143,8.186,1603,10.241,1614,8.962,1973,9.701,2122,8.038,3262,7.104,3275,6.859,3279,9.183,3495,10.01,3641,11.752,3645,15.098,3766,9.428,3950,11.292,4561,15.098,4562,15.098,4564,15.098,4565,15.098,4566,16.305,4567,16.305,4568,16.305,4569,13.233,4570,16.305,4571,16.305,4572,16.305]],["keywords/748",[]],["title/749",[3305,1064.028]],["content/749",[]],["keywords/749",[]],["title/750",[2042,532.102]],["content/750",[1,3.389,6,4.614,16,2.906,19,2.305,22,1.758,31,4.673,72,6.356,73,3.458,89,2.155,107,5.22,113,3.54,127,2.44,137,5.293,168,4.354,186,4.679,195,2.061,196,3.874,222,2.869,224,2.054,226,4.86,263,3.069,281,2.305,291,2.743,307,3.366,316,3.917,335,4.074,340,2.225,352,2.886,363,5.15,368,3.639,381,5.948,401,4.022,405,5.781,440,3.874,445,3.061,461,5.331,464,3.768,504,5.019,568,5.744,575,2.399,647,3.726,679,4.638,693,2.613,731,4.136,777,5.89,803,5.331,864,5.438,873,4.712,875,2.79,906,4.479,996,7.045,1008,4.843,1074,4.989,1121,4.763,1212,5.452,1217,6.771,1220,6.738,1348,5.729,1363,5.781,1453,5.452,1466,7.322,1702,9.337,1748,4.929,1784,6.812,1796,6.072,1973,5.948,1974,7.415,1986,9.337,2080,6.521,2094,4.336,2174,6.436,2563,8.913,2573,6.356,3305,6.138,3848,6.436,4559,5.948,4563,5.293,4573,8.114,4574,8.02,4575,9.257,4576,6.612,4577,8.114,4578,8.114,4579,8.769,4580,8.114,4581,8.114,4582,7.177,4583,7.872,4584,6.521,4585,8.114,4586,8.114,4587,8.114,4588,6.356,4589,6.279,4590,5.679,4591,6.009,4592,6.138]],["keywords/750",[]],["title/751",[864,626.718]],["content/751",[]],["keywords/751",[]],["title/752",[647,426.353,1299,694.819,3305,702.361]],["content/752",[2,1.177,13,2.502,15,5.651,16,2.381,18,3.683,24,2.93,40,10.475,43,2.97,52,4.586,66,5.012,73,3.912,89,2.437,113,2.662,127,2.761,168,4.785,185,5.753,186,5.127,195,1.55,196,4.382,207,4.841,221,5.678,222,1.795,226,4.38,281,2.607,291,3.104,335,3.713,340,2.518,368,4.117,369,5.946,374,7.195,417,6.37,432,5.067,439,5.988,485,4.928,568,7.424,572,6.869,575,3.954,627,2.878,731,6.818,803,6.031,808,4.82,875,3.156,906,5.067,1008,5.479,1063,6.121,1081,8.465,1139,11.412,1142,3.949,1189,7.731,1348,6.481,1973,6.729,1974,5.576,2094,4.905,2182,7.833,2257,8.465,2518,13.938,2562,6.425,2563,9.583,3053,7.022,4084,8.119,4563,5.988,4576,7.48,4583,8.905,4584,7.378,4588,7.19,4591,6.798,4593,12.334,4594,8.119,4595,8.283]],["keywords/752",[]],["title/753",[335,257.805,1151,633.815,3305,702.361]],["content/753",[2,1.75,13,1.967,15,3.422,16,2.957,18,1.987,22,1.84,52,3.605,66,4.778,69,2.48,73,3.075,92,3.964,112,5.628,113,2.093,115,5.124,127,3.356,168,4.132,185,4.801,186,4.278,198,6.282,221,4.463,222,1.41,224,1.91,226,2.003,228,2.468,250,4.965,258,1.774,263,2.729,279,4.522,281,2.049,282,1.691,291,2.439,293,4.965,297,3.756,335,3.789,340,1.979,352,2.567,367,3.371,368,3.236,374,6.224,389,4.706,423,5.14,426,2.592,427,3.225,432,3.983,439,4.706,448,3.094,485,3.873,568,6.422,575,3.299,594,3.964,600,6.057,627,3.499,646,6.379,647,3.313,658,3.563,693,4.947,731,5.689,803,4.74,804,3.663,823,3.927,849,5.142,864,3.214,906,3.983,1008,4.307,1023,2.088,1063,4.811,1074,4.436,1139,9.523,1142,3.104,1143,4.463,1151,4.925,1189,7.527,1210,4.212,1212,4.848,1215,6.251,1217,6.19,1220,7.534,1221,6.539,1222,4.775,2020,3.873,2094,5.964,2461,6.381,2466,5.399,2518,12.564,2562,5.05,2563,8.29,3305,10.323,3404,5.007,4576,5.879,4584,5.799,4588,5.651,4593,10.292,4594,6.381,4596,8.889,4597,5.457,4598,6.815,4599,8.231,4600,8.231,4601,6.057]],["keywords/753",[]],["title/754",[43,256.768,226,220.355,3305,600.333,4563,517.722]],["content/754",[2,1.586,16,2.931,19,2.345,22,1.481,31,2.629,43,6.529,69,2.838,75,5.937,78,5.547,89,2.192,113,2.395,137,9.672,161,3.956,168,3.688,222,3.219,226,5.603,251,4.546,263,4.678,270,3.182,275,9.354,281,2.345,282,2.898,284,3.058,307,6.15,329,3.956,335,4.571,340,2.264,368,3.703,389,5.386,405,8.81,427,6.628,437,5.206,440,7.078,448,5.303,457,4.557,509,5.993,515,5.206,573,6.315,875,2.838,901,4.9,1113,5.076,1221,3.956,1309,9.57,1445,7.168,1793,7.045,1803,5.348,1837,5.076,2025,5.829,2078,5.464,2122,5.015,2127,6.114,2422,6.245,3305,6.245,4559,13.569,4563,12.075,4574,8.125,4579,8.923,4590,8.655,4591,13.058,4592,11.215,4595,7.45,4602,8.552,4603,7.798,4604,7.798,4605,7.798,4606,7.614,4607,7.798]],["keywords/754",[]],["title/755",[401,460.294,546,451.561,2215,674.055]],["content/755",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,3305,10.01,3401,11.11]],["keywords/755",[]],["title/756",[16,250.43]],["content/756",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3305,11.275]],["keywords/756",[]],["title/757",[282,329.633]],["content/757",[1,2.555,14,4.972,16,1.007,18,4.586,19,3.303,22,1.393,43,1.83,49,1.794,52,4.597,57,6.617,67,3.321,73,2.411,109,4.068,110,3.268,112,2.333,113,4.83,116,4.068,137,3.691,168,4.317,173,2.616,180,3.377,181,2.92,186,2.169,206,2.884,222,2.882,224,1.628,226,3.229,230,2.361,250,3.894,258,1.391,282,2.156,295,3.64,307,5.557,334,2.872,335,5.24,340,1.552,347,2.513,354,1.72,368,2.537,369,3.665,385,2.286,399,2.927,400,2.958,401,6.641,422,2.146,424,6.44,426,6.627,440,4.393,445,2.135,448,2.426,464,2.84,467,4.597,469,2.572,495,2.572,504,3.5,505,5.764,516,3.894,519,3.831,551,2.827,568,2.662,575,3.961,622,3.615,626,3.234,627,1.774,644,2.783,647,2.598,654,3.615,681,3.64,682,2.772,689,3.186,693,2.963,714,2.721,767,3.802,792,2.872,803,3.717,812,5.079,851,2.554,895,2.09,901,3.358,908,2.504,976,2.997,1094,5.218,1126,4.926,1163,6.385,1221,2.711,1312,4.19,1535,2.711,1550,8.139,1624,5.96,1633,4.148,1679,3.201,1708,3.397,1716,3.625,1824,2.908,1875,3.817,1885,4.432,1918,5.489,2121,4.328,2182,4.828,2563,5.589,2606,4.828,3124,4.328,3305,4.28,3403,4.19,3404,3.926,3405,3.926,3406,4.547,3410,4.61,3411,3.96,3412,7.395,3416,4.678,3423,4.547,3673,10.985,4559,8.526,4563,3.691,4574,7.641,4582,5.004,4588,4.432,4590,6.44,4591,8.612,4592,4.28,4608,5.105,4609,4.432,4610,5.658,4611,5.658,4612,5.658,4613,5.489,4614,5.344,4615,5.344,4616,5.658,4617,5.658,4618,6.231,4619,9.202,4620,5.489,4621,8.139,4622,5.489,4623,5.344,4624,5.658]],["keywords/757",[]],["title/758",[1023,407.123]],["content/758",[49,4.195,89,4.571,112,5.457,127,3.98,168,3.292,222,3.962,224,1.852,254,11.764,258,3.254,277,3.438,284,4.902,335,3.674,357,7.643,397,3.444,399,4.333,400,6.918,575,3.912,578,8.759,622,8.455,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,849,6.097,851,5.974,995,9.701,1126,5.606,3275,6.859,3306,14.302,3405,9.183,3428,10.941,3430,8.087,3431,11.11,3432,7.811,4625,13.233]],["keywords/758",[]],["title/759",[222,181.529,231,456.746,1815,767.708]],["content/759",[127,4.483,195,2.516,224,2.086,230,6.219,232,11.038,266,8.749,277,3.872,290,7.895,381,10.927,383,10.094,411,9.723,430,10.344,532,10.174,561,14.73,597,10.524,736,9.723,909,10.258,1067,12.941,1089,14.46,1535,7.142,1637,11.675,1810,11.402,2336,12.941,3305,11.275,4626,14.905,4627,14.079]],["keywords/759",[]],["title/760",[387,667.74,4628,989.405]],["content/760",[11,3.547,47,5.89,109,7.598,168,5.253,214,6.203,220,5.524,222,3.613,230,4.409,231,7.274,281,3.001,324,6.381,334,5.365,338,11.888,377,6.662,385,5.976,387,10.184,399,2.66,404,6.208,408,5.548,416,10.9,435,6.62,440,5.044,504,6.537,532,7.213,546,5.139,616,5.806,704,8.297,938,10.841,960,8.737,1086,9.174,1134,12.227,1237,9.449,1285,7.746,1337,8.277,1447,9.981,1810,8.083,1863,8.493,2230,10.251,2598,7.598,2608,7.461,3831,10.251,4589,8.177,4629,9.346,4630,10.567,4631,10.251,4632,10.567,4633,8.611,4634,8.493,4635,10.567,4636,8.382,4637,10.567]],["keywords/760",[]],["title/761",[173,429.303,195,156.745,1392,792.33]],["content/761",[15,3.868,18,3.474,68,7.487,168,3.138,173,7.713,179,8.115,195,2.129,222,3.655,231,8.207,237,6.741,291,4.265,307,5.232,324,7.617,383,8.542,385,5.097,399,3.175,404,5.295,422,4.784,435,7.902,594,6.93,658,6.229,676,7.617,736,8.229,841,8.229,856,9.157,906,6.963,976,6.681,1008,7.53,1196,8.907,1285,9.247,1392,10.764,1455,9.341,2042,4.772,2598,9.071,4574,8.288,4618,11.298,4629,11.157,4633,10.279,4638,11.157,4639,11.157,4640,15.386,4641,11.157,4642,12.614,4643,12.614]],["keywords/761",[]],["title/762",[173,517.202,4644,1118.642]],["content/762",[19,3.681,68,7.693,116,9.32,168,3.224,172,5.951,173,8.758,179,8.338,222,3.703,224,2.377,231,8.354,324,7.827,334,6.58,340,3.555,387,7.737,422,4.916,430,8.994,520,9.501,698,8.281,704,6.303,736,8.455,808,6.805,837,9.914,841,8.455,856,9.409,1196,9.151,1302,10.881,1436,12.574,1455,9.598,1812,9.699,2598,9.32,4618,11.501,4628,15.021,4638,11.463,4639,11.463,4641,11.463,4645,12.961,4646,12.961,4647,12.961]],["keywords/762",[]],["title/763",[231,550.264,993,745.942]],["content/763",[3,2.654,69,4.582,78,8.955,113,3.865,161,6.385,166,9.77,168,4.302,213,10.081,222,3.973,230,5.561,237,7.122,324,8.048,334,6.766,349,9.583,377,8.403,383,9.025,399,3.354,422,5.055,430,9.248,435,8.349,440,6.362,495,6.057,676,8.048,993,8.887,1067,11.571,1285,9.77,2598,9.583,4084,11.787,4589,10.313,4618,9.025,4633,10.86,4634,10.711,4648,13.327,4649,13.327,4650,13.327,4651,13.327,4652,13.327,4653,13.327]],["keywords/763",[]],["title/764",[57,667.674,2871,877.073,4618,628.788]],["content/764",[6,5.297,15,2.857,16,1.658,18,2.565,22,1.116,30,3.67,37,8.239,43,3.014,49,2.953,57,11.44,61,5.815,107,10.235,116,6.698,162,4.749,168,2.317,179,5.992,186,3.571,195,1.573,207,4.912,208,4.749,222,3.779,226,3.753,231,6.649,237,4.978,251,3.424,272,5.873,296,4.513,303,4.912,320,5.692,324,5.625,330,3.875,334,4.729,335,2.586,340,2.555,349,6.698,381,6.829,383,6.308,401,4.618,464,2.876,481,7.046,518,4.463,519,6.308,557,7.323,561,7.389,575,2.754,594,5.118,658,4.6,704,4.53,709,7.821,735,7.487,736,6.077,752,4.496,771,4.934,774,8.088,786,8.799,823,5.07,833,6.359,849,4.292,864,4.15,1074,5.727,1159,8.088,1221,4.463,1298,7.591,1326,6.464,1637,7.296,1748,5.658,1784,7.821,1986,7.126,2042,3.524,2598,6.698,3305,7.046,3530,7.949,4576,7.591,4594,8.239,4618,9.154,4621,8.239,4634,7.487,4654,13.517,4655,13.517,4656,13.517,4657,9.315,4658,9.315,4659,9.315,4660,9.037,4661,9.315,4662,9.315]],["keywords/764",[]],["title/765",[1988,487.519,2046,639,3305,702.361]],["content/765",[]],["keywords/765",[]],["title/766",[2042,532.102]],["content/766",[1,2.5,6,5.12,16,1.603,19,2.557,22,1.869,31,4.969,72,7.053,73,3.838,107,5.792,113,3.825,127,2.708,137,5.874,168,4.548,186,5.055,195,1.52,196,4.298,222,2.578,224,1.846,226,4.769,263,3.406,291,3.044,307,3.735,316,4.346,335,3.661,340,2.47,352,3.203,363,5.715,368,4.038,381,6.601,401,4.464,405,6.415,440,4.298,464,4.071,504,5.57,568,6.205,575,2.662,679,5.147,731,4.59,803,5.916,864,4.012,873,5.228,875,3.096,906,4.97,996,7.818,1008,5.375,1121,5.285,1348,6.358,1363,6.415,1453,6.05,1466,8.125,1702,10.087,1748,5.469,1784,7.56,1796,6.738,1973,6.601,1974,8.01,1986,10.087,2080,7.237,2094,4.812,2174,7.142,2563,9.478,2573,7.053,3305,6.811,3848,7.142,4559,6.601,4563,5.874,4573,9.004,4574,8.664,4575,10.273,4576,7.337,4577,9.004,4578,9.004,4579,9.731,4580,9.004,4581,9.004,4582,7.964,4583,8.735,4584,7.237,4585,9.004,4586,9.004,4587,9.004,4588,7.053,4589,6.968,4590,6.302,4591,6.668,4592,6.811]],["keywords/766",[]],["title/767",[864,626.718]],["content/767",[2,1.435,13,1.459,15,2.697,16,2.549,22,0.641,33,3.964,52,2.674,57,9.319,66,5.153,69,5.291,79,1.78,92,2.941,107,5.657,112,4.616,113,1.553,115,6.574,127,4.629,168,2.188,180,5.25,185,2.303,186,3.371,196,2.555,222,1.047,224,1.231,226,4.273,228,1.832,250,3.684,251,3.233,258,2.162,263,2.025,279,3.564,281,1.52,282,2.061,289,9.952,291,2.973,297,2.786,303,2.823,335,4.715,340,1.468,348,5.778,350,4.362,352,1.904,360,2.955,367,4.109,372,2.036,374,5.105,389,3.492,432,4.855,439,3.492,445,2.02,464,1.652,467,2.674,485,2.873,518,4.214,556,6.008,568,5.267,572,4.006,575,2.6,594,2.941,627,3.509,641,4.742,646,7.408,651,2.664,658,2.643,693,3.605,731,2.729,752,2.584,804,2.718,808,5.877,810,2.969,823,2.913,849,4.052,873,3.108,906,2.955,921,4.638,1008,3.195,1023,1.549,1142,2.303,1189,5.485,1210,3.125,1215,4.926,1217,4.878,1220,6.179,1221,2.565,1222,3.543,1290,6.324,1363,3.814,1401,10.054,1628,6.976,1639,4.735,1643,3.125,1716,2.109,1757,4.83,1796,8.376,1832,3.597,1974,5.342,1988,2.811,2020,2.873,2046,7.703,2094,4.7,2132,3.443,2216,7.166,2466,4.006,2518,9.804,2562,3.747,2563,5.342,3305,9.804,3578,4.83,3668,7.504,3669,4.426,3670,4.568,4584,4.302,4593,8.11,4597,4.049,4598,5.056,4640,4.937,4663,6.596,4664,4.494,4665,5.353,4666,6.596,4667,5.785,4668,5.785,4669,5.785,4670,8.794,4671,6.107,4672,6.107,4673,6.107,4674,6.107,4675,5.785,4676,5.785]],["keywords/767",[]],["title/768",[401,460.294,546,451.561,2215,674.055]],["content/768",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,3305,10.01,3401,11.11]],["keywords/768",[]],["title/769",[16,250.43]],["content/769",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3305,11.275]],["keywords/769",[]],["title/770",[282,329.633]],["content/770",[1,2.555,14,4.972,16,1.007,18,4.586,19,3.303,22,1.393,43,1.83,49,1.794,52,4.597,57,6.617,67,3.321,73,2.411,109,4.068,110,3.268,112,2.333,113,4.83,116,4.068,137,3.691,168,4.317,173,2.616,180,3.377,181,2.92,186,2.169,206,2.884,222,2.882,224,1.628,226,3.229,230,2.361,250,3.894,258,1.391,282,2.156,295,3.64,307,5.557,334,2.872,335,5.24,340,1.552,347,2.513,354,1.72,368,2.537,369,3.665,385,2.286,399,2.927,400,2.958,401,6.641,422,2.146,424,6.44,426,6.627,440,4.393,445,2.135,448,2.426,464,2.84,467,4.597,469,2.572,495,2.572,504,3.5,505,5.764,516,3.894,519,3.831,551,2.827,568,2.662,575,3.961,622,3.615,626,3.234,627,1.774,644,2.783,647,2.598,654,3.615,681,3.64,682,2.772,689,3.186,693,2.963,714,2.721,767,3.802,792,2.872,803,3.717,812,5.079,851,2.554,895,2.09,901,3.358,908,2.504,976,2.997,1094,5.218,1126,4.926,1163,6.385,1221,2.711,1312,4.19,1535,2.711,1550,8.139,1624,5.96,1633,4.148,1679,3.201,1708,3.397,1716,3.625,1824,2.908,1875,3.817,1885,4.432,1918,5.489,2121,4.328,2182,4.828,2563,5.589,2606,4.828,3124,4.328,3305,4.28,3403,4.19,3404,3.926,3405,3.926,3406,4.547,3410,4.61,3411,3.96,3412,7.395,3416,4.678,3423,4.547,3673,10.985,4559,8.526,4563,3.691,4574,7.641,4582,5.004,4588,4.432,4590,6.44,4591,8.612,4592,4.28,4608,5.105,4609,4.432,4610,5.658,4611,5.658,4612,5.658,4613,5.489,4614,5.344,4615,5.344,4616,5.658,4617,5.658,4618,6.231,4619,9.202,4620,5.489,4621,8.139,4622,5.489,4623,5.344,4624,5.658]],["keywords/770",[]],["title/771",[1023,407.123]],["content/771",[49,4.195,89,4.571,112,5.457,127,3.98,168,3.292,222,3.962,224,1.852,254,11.764,258,3.254,277,3.438,284,4.902,335,3.674,357,7.643,397,3.444,399,4.333,400,6.918,575,3.912,578,8.759,622,8.455,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,849,6.097,851,5.974,995,9.701,1126,5.606,3275,6.859,3306,14.302,3405,9.183,3428,10.941,3430,8.087,3431,11.11,3432,7.811,4625,13.233]],["keywords/771",[]],["title/772",[222,181.529,231,456.746,1815,767.708]],["content/772",[127,4.413,195,2.477,224,2.054,230,6.123,232,10.866,266,8.613,277,3.812,290,7.772,381,10.757,383,9.937,411,9.572,430,10.183,532,10.016,561,14.587,597,10.361,736,9.572,909,10.098,1067,12.74,1089,14.236,1535,7.031,1637,11.493,1810,11.224,1988,7.704,2046,10.098,2336,12.74,3305,11.099,4626,14.674,4627,13.86]],["keywords/772",[]],["title/773",[387,667.74,4628,989.405]],["content/773",[11,3.547,47,5.89,109,7.598,168,5.253,214,6.203,220,5.524,222,3.613,230,4.409,231,7.274,281,3.001,324,6.381,334,5.365,338,11.888,377,6.662,385,5.976,387,10.184,399,2.66,404,6.208,408,5.548,416,10.9,435,6.62,440,5.044,504,6.537,532,7.213,546,5.139,616,5.806,704,8.297,938,10.841,960,8.737,1086,9.174,1134,12.227,1237,9.449,1285,7.746,1337,8.277,1447,9.981,1810,8.083,1863,8.493,2230,10.251,2598,7.598,2608,7.461,3831,10.251,4589,8.177,4629,9.346,4630,10.567,4631,10.251,4632,10.567,4633,8.611,4634,8.493,4635,10.567,4636,8.382,4637,10.567]],["keywords/773",[]],["title/774",[173,429.303,195,156.745,1392,792.33]],["content/774",[15,3.868,18,3.474,68,7.487,168,3.138,173,7.713,179,8.115,195,2.129,222,3.655,231,8.207,237,6.741,291,4.265,307,5.232,324,7.617,383,8.542,385,5.097,399,3.175,404,5.295,422,4.784,435,7.902,594,6.93,658,6.229,676,7.617,736,8.229,841,8.229,856,9.157,906,6.963,976,6.681,1008,7.53,1196,8.907,1285,9.247,1392,10.764,1455,9.341,2042,4.772,2598,9.071,4574,8.288,4618,11.298,4629,11.157,4633,10.279,4638,11.157,4639,11.157,4640,15.386,4641,11.157,4642,12.614,4643,12.614]],["keywords/774",[]],["title/775",[173,517.202,4644,1118.642]],["content/775",[19,3.681,68,7.693,116,9.32,168,3.224,172,5.951,173,8.758,179,8.338,222,3.703,224,2.377,231,8.354,324,7.827,334,6.58,340,3.555,387,7.737,422,4.916,430,8.994,520,9.501,698,8.281,704,6.303,736,8.455,808,6.805,837,9.914,841,8.455,856,9.409,1196,9.151,1302,10.881,1436,12.574,1455,9.598,1812,9.699,2598,9.32,4618,11.501,4628,15.021,4638,11.463,4639,11.463,4641,11.463,4645,12.961,4646,12.961,4647,12.961]],["keywords/775",[]],["title/776",[231,550.264,993,745.942]],["content/776",[3,2.654,69,4.582,78,8.955,113,3.865,161,6.385,166,9.77,168,4.302,213,10.081,222,3.973,230,5.561,237,7.122,324,8.048,334,6.766,349,9.583,377,8.403,383,9.025,399,3.354,422,5.055,430,9.248,435,8.349,440,6.362,495,6.057,676,8.048,993,8.887,1067,11.571,1285,9.77,2598,9.583,4084,11.787,4589,10.313,4618,9.025,4633,10.86,4634,10.711,4648,13.327,4649,13.327,4650,13.327,4651,13.327,4652,13.327,4653,13.327]],["keywords/776",[]],["title/777",[57,667.674,2871,877.073,4618,628.788]],["content/777",[6,5.297,15,2.857,16,1.658,18,2.565,22,1.116,30,3.67,37,8.239,43,3.014,49,2.953,57,11.44,61,5.815,107,10.235,116,6.698,162,4.749,168,2.317,179,5.992,186,3.571,195,1.573,207,4.912,208,4.749,222,3.779,226,3.753,231,6.649,237,4.978,251,3.424,272,5.873,296,4.513,303,4.912,320,5.692,324,5.625,330,3.875,334,4.729,335,2.586,340,2.555,349,6.698,381,6.829,383,6.308,401,4.618,464,2.876,481,7.046,518,4.463,519,6.308,557,7.323,561,7.389,575,2.754,594,5.118,658,4.6,704,4.53,709,7.821,735,7.487,736,6.077,752,4.496,771,4.934,774,8.088,786,8.799,823,5.07,833,6.359,849,4.292,864,4.15,1074,5.727,1159,8.088,1221,4.463,1298,7.591,1326,6.464,1637,7.296,1748,5.658,1784,7.821,1986,7.126,2042,3.524,2598,6.698,3305,7.046,3530,7.949,4576,7.591,4594,8.239,4618,9.154,4621,8.239,4634,7.487,4654,13.517,4655,13.517,4656,13.517,4657,9.315,4658,9.315,4659,9.315,4660,9.037,4661,9.315,4662,9.315]],["keywords/777",[]],["title/778",[1956,945.178]],["content/778",[]],["keywords/778",[]],["title/779",[195,188.839,638,876.205]],["content/779",[3,3.065,7,7.66,13,4.196,22,1.844,79,5.119,160,8.89,195,2.598,335,4.273,343,7.043,464,4.751,465,7.743,638,12.056,974,10.867,998,11.398,1956,12.729,1957,16.634,2241,15.943,2243,14.932,2495,15.943,4677,18.964,4678,18.964]],["keywords/779",[]],["title/780",[2042,532.102]],["content/780",[4,8.125,8,5.51,16,2.202,18,3.406,22,1.972,89,3.284,92,6.794,112,6.789,186,4.741,207,6.521,226,3.434,279,5.011,281,4.677,335,5.48,340,4.516,352,4.399,367,5.778,490,4.251,512,8.246,575,3.656,627,5.803,693,3.983,895,4.569,902,6.699,1105,9.158,1133,5.474,1212,8.309,1214,9.939,1215,9.223,1267,6.465,1401,7.068,1768,8.732,1956,13.81,2210,11.405,2212,14.109,2216,10.077,4679,15.237,4680,15.237,4681,15.237]],["keywords/780",[]],["title/781",[16,250.43]],["content/781",[1,5.617,2,2.381,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,1956,10.015]],["keywords/781",[]],["title/782",[282,329.633]],["content/782",[3,3.129,18,5.527,19,4.462,30,6.19,92,6.337,112,4.757,113,4.557,114,12.467,229,5.954,230,4.813,258,2.836,282,3.682,334,5.857,335,6.072,399,2.903,424,10.996,426,7.441,448,6.738,469,5.243,490,3.966,575,5.671,647,5.297,689,3.994,693,3.715,1050,5.954,1126,7.569,1210,6.734,1716,6.19,1875,6.517,3403,8.542,3411,8.074,4682,13.16,4683,9.843]],["keywords/782",[]],["title/783",[1023,407.123]],["content/783",[3,3.09,112,6.399,222,3.034,224,2.172,258,3.816,335,4.309,397,4.039,399,3.906,489,9.011,575,5.628,707,6.594,838,8.219,842,6.514,847,7.175,1126,6.573,3275,8.044,3280,15.518,3307,16.074,4684,17.704,4685,21.721]],["keywords/783",[]],["title/784",[1217,620.495,1220,617.512]],["content/784",[9,10.722,16,3.442,22,1.619,61,5.815,92,7.427,115,6.207,163,5.542,224,1.892,228,4.625,258,3.324,272,8.523,281,3.839,303,7.128,367,6.316,389,8.818,461,8.882,594,7.427,646,9.977,658,6.675,693,6.226,804,6.863,823,7.357,849,8.042,1023,3.912,1217,9.682,1220,10.671,1221,6.477,1222,8.947,1956,9.083,2020,7.256,2037,11.349]],["keywords/784",[]],["title/785",[43,256.768,287,418.518,291,268.337,401,393.43]],["content/785",[3,2.014,57,10.311,79,3.364,107,6.506,110,5.842,186,5.497,192,6.18,195,2.421,208,8.492,222,3.543,224,2.332,226,3.981,237,5.405,251,7.305,290,7.595,316,4.882,335,2.808,340,2.774,353,7.65,363,6.419,369,6.551,373,8.945,374,4.612,401,7.108,404,4.246,410,7.49,464,3.122,495,4.597,511,8.463,515,6.377,546,4.919,554,12.038,674,10.476,679,5.781,689,4.965,735,11.524,840,12.939,921,7.561,974,7.141,1005,14.339,1076,8.63,1091,6.849,1139,8.63,1218,8.945,1300,13.224,1590,8.362,1708,6.072,1770,9.126,1832,6.796,1835,9.327,2183,18.004,2265,9.126,2271,8.945,4686,12.462,4687,9.553,4688,12.462,4689,12.462,4690,12.462,4691,12.462]],["keywords/785",[]],["title/786",[208,353.271,251,254.733,373,612.92,707,294.447,2096,572.957]],["content/786",[3,2.654,15,4.087,16,2.373,79,4.432,89,3.539,207,7.028,208,6.794,222,3.754,226,4.802,229,6.879,251,6.357,263,5.041,277,3.462,281,3.785,291,5.847,367,8.08,373,15.297,387,10.324,677,7.322,682,6.53,689,4.615,707,8.158,906,7.357,1956,11.621,1995,11.189,2096,11.019,3788,10.86,4692,16.42,4693,16.42,4694,16.42,4695,16.42]],["keywords/786",[]],["title/787",[1824,723.04]],["content/787",[]],["keywords/787",[]],["title/788",[272,705.325,616,351.477]],["content/788",[61,8.108,92,8.388,127,4.591,221,9.444,224,2.137,272,9.626,335,4.239,490,6.48,616,4.797,647,8.655,864,6.802,1074,9.386,1299,14.105,1824,9.689,4696,15.814,4697,17.418,4698,15.814,4699,15.814,4700,14.811]],["keywords/788",[]],["title/789",[2042,532.102]],["content/789",[1,2.975,6,3.894,16,2.659,19,1.945,22,1.582,25,3.747,31,4.756,43,2.216,49,3.397,72,5.364,73,2.919,89,2.846,107,4.405,113,3.108,127,2.06,137,4.467,168,4.755,186,4.108,195,1.809,196,3.269,222,2.92,224,1.848,226,4.501,263,2.591,281,1.945,291,4.464,307,2.841,316,3.306,335,4.146,340,1.878,352,2.436,363,4.346,368,3.071,381,5.02,401,7.403,405,4.879,440,3.269,445,2.584,461,4.5,464,3.308,504,4.236,511,6.325,568,5.043,575,2.024,647,3.145,679,3.914,693,2.206,731,3.491,741,4.602,777,4.971,803,4.5,829,7.323,860,4.567,864,4.775,873,3.977,875,2.354,906,3.78,976,7.91,996,5.946,998,9.777,1008,4.088,1030,6.057,1049,4.02,1074,4.21,1121,4.02,1212,4.602,1217,5.944,1220,5.916,1348,4.835,1443,5.86,1453,4.602,1466,6.18,1702,8.197,1748,4.16,1784,5.75,1796,5.125,1824,5.508,1973,5.02,1974,6.51,1986,5.238,1995,5.75,2080,5.504,2094,3.66,2174,5.432,2265,6.18,2563,10.912,2573,5.364,3848,5.432,4559,5.02,4563,4.467,4573,6.848,4574,7.041,4576,5.581,4577,6.848,4578,6.848,4580,6.848,4581,6.848,4582,6.057,4584,5.504,4585,6.848,4586,6.848,4587,6.848,4588,5.364,4589,5.3,4590,4.793,4591,5.071,4592,5.18,4701,7.401,4702,6.18,4703,8.438,4704,8.438,4705,8.438]],["keywords/789",[]],["title/790",[864,626.718]],["content/790",[18,4.534,19,4.677,61,7.083,127,4.952,335,4.572,647,9.062,752,7.948,1299,12.321,1824,8.463,3053,12.595,4697,18.785,4698,17.056,4699,17.056,4700,15.974]],["keywords/790",[]],["title/791",[647,426.353,1299,694.819,1824,477.276]],["content/791",[2,1.673,13,2.42,15,5.574,16,2.323,18,2.445,24,2.833,31,2.827,40,10.222,43,2.872,52,4.435,66,4.945,73,3.783,89,2.357,113,2.575,168,4.728,185,5.614,186,5.003,195,2.203,196,4.238,207,4.681,221,5.491,222,2.551,226,4.737,281,2.521,291,3.001,335,3.623,340,2.435,368,3.981,369,5.75,374,7.057,417,6.16,432,4.9,439,5.791,485,4.765,526,3.104,568,7.282,572,6.643,575,4.575,627,2.783,731,6.653,803,5.833,808,4.661,875,3.052,906,4.9,1008,5.299,1063,5.92,1081,8.187,1139,11.136,1142,3.819,1189,7.583,1348,6.268,1824,6.708,1973,6.508,1974,5.392,2094,4.744,2182,7.575,2257,8.187,2470,7.135,2518,13.75,2562,6.213,2563,9.4,4084,7.852,4563,5.791,4576,7.234,4583,8.612,4584,7.135,4588,6.953,4591,6.574,4593,12.035,4594,7.852,4595,8.01]],["keywords/791",[]],["title/792",[1988,587.339,2047,954.559]],["content/792",[2,1.668,13,1.467,15,2.71,16,2.557,33,3.987,49,1.707,52,2.69,57,8.08,66,4.935,69,4.937,79,1.791,92,7.145,97,2.958,107,3.463,112,3.643,113,1.561,115,6.594,127,4.319,155,2.618,161,2.579,168,2.198,180,5.274,185,2.316,195,0.909,196,2.57,222,1.727,224,1.237,226,3.987,228,1.842,251,1.979,258,2.173,263,2.036,279,3.58,281,1.529,282,2.07,283,2.489,289,8.731,291,2.987,297,4.599,325,3.178,329,4.233,335,3.12,340,1.476,348,3.537,350,4.387,352,1.915,360,2.972,367,4.128,374,5.125,375,3.646,396,2.756,432,2.972,439,3.512,445,2.031,461,3.537,464,1.662,467,2.69,485,2.89,518,4.233,526,1.882,556,6.032,568,5.288,572,4.028,574,4.949,575,3.322,594,4.854,608,3.871,627,3.523,641,4.765,646,7.433,658,2.658,693,4.188,731,2.744,752,2.599,767,10.37,804,2.733,808,5.9,810,2.986,823,2.93,849,4.071,873,3.126,906,2.972,1008,3.214,1023,1.558,1142,2.316,1189,6.373,1196,3.801,1210,3.143,1215,4.949,1217,6.233,1220,7.179,1221,2.579,1222,3.563,1290,6.353,1363,3.835,1401,8.208,1628,10.316,1639,4.762,1643,3.143,1716,2.121,1757,4.858,1796,6.612,1824,4.542,1832,3.617,1974,5.367,1988,2.827,2020,2.89,2046,6.08,2047,11.098,2094,4.722,2132,3.463,2466,4.028,2470,4.327,2518,9.837,2562,3.768,2563,5.367,3578,4.858,3668,7.54,3669,4.451,3670,4.594,4584,4.327,4593,8.148,4597,4.072,4640,4.965,4664,4.52,4665,5.383,4667,5.818,4668,5.818,4669,5.818,4670,5.383,4675,5.818,4676,5.818,4706,6.142,4707,6.142,4708,6.633]],["keywords/792",[]],["title/793",[335,257.805,1151,633.815,1824,477.276]],["content/793",[2,1.942,13,1.915,15,3.353,16,2.921,18,1.935,22,1.31,52,3.511,66,4.934,69,2.416,73,2.995,97,3.86,112,4.509,113,2.038,115,6.163,127,2.113,161,3.367,168,4.082,185,4.703,186,4.191,195,1.186,198,6.155,221,4.347,222,2.138,224,1.53,226,1.951,228,2.404,258,1.728,263,2.658,279,4.431,281,1.996,282,1.647,291,2.376,293,4.836,297,3.658,325,4.147,335,3.036,340,1.927,352,2.5,367,3.283,368,3.151,374,6.121,396,3.597,423,5.006,426,2.525,427,3.141,432,3.879,439,4.584,448,3.013,461,4.617,485,3.772,526,2.457,568,6.315,574,6.124,575,3.968,594,3.86,600,5.899,627,4.748,646,6.25,647,3.226,658,3.47,693,4.877,731,5.574,803,4.617,804,3.568,823,3.824,849,5.038,906,3.879,1008,4.194,1023,2.034,1063,4.686,1139,9.33,1142,3.023,1143,4.347,1189,8.04,1210,4.102,1212,4.721,1215,6.124,1217,7.445,1220,8.36,1221,6.431,1222,4.651,1290,5.053,1824,5.62,2020,3.772,2094,5.843,2461,6.215,2466,5.258,2470,5.647,2518,12.411,2562,4.918,2563,8.153,3404,4.876,4576,5.726,4584,5.647,4588,5.504,4593,10.083,4594,6.215,4597,5.315,4599,8.017,4600,8.017,4601,5.899,4709,8.658]],["keywords/793",[]],["title/794",[43,256.768,226,220.355,1824,407.945,4563,517.722]],["content/794",[2,0.97,16,2.803,19,2.148,22,1.684,31,2.408,43,6.214,66,2.057,69,2.6,75,5.437,78,5.081,89,2.008,113,2.193,137,9.168,168,3.496,222,3.078,226,5.171,251,4.253,263,4.377,270,2.914,275,5.72,281,2.148,282,2.711,284,2.801,307,5.83,329,5.544,335,3.902,340,2.074,350,6.162,368,3.391,370,4.174,389,4.933,405,8.243,427,6.282,437,4.768,440,6.709,448,4.962,457,4.174,464,4.338,509,5.489,515,4.768,573,5.784,767,5.081,808,3.97,875,2.6,920,4.898,1113,4.649,1221,3.623,1309,5.852,1401,6.613,1445,6.565,1590,6.252,1628,5.998,1793,6.452,1803,4.898,1824,8.093,1837,4.649,1988,3.97,2025,5.339,2047,6.452,2078,5.005,2122,4.593,2127,5.6,2422,5.72,4559,13.119,4563,11.069,4574,4.968,4590,8.098,4591,13.252,4592,10.631,4595,6.823,4602,7.833,4603,7.142,4604,7.142,4605,7.142,4606,6.973,4607,7.142,4702,6.823,4710,11.225,4711,7.336,4712,7.336,4713,10.67,4714,7.336,4715,7.336,4716,7.336,4717,7.833,4718,7.833]],["keywords/794",[]],["title/795",[401,460.294,546,451.561,2215,674.055]],["content/795",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,1824,6.802,3401,11.11]],["keywords/795",[]],["title/796",[16,250.43]],["content/796",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,1824,7.662]],["keywords/796",[]],["title/797",[282,329.633]],["content/797",[1,2.549,11,1.894,14,4.962,16,1.004,18,4.58,19,3.296,22,1.39,43,1.825,49,1.788,52,4.586,57,6.6,67,3.311,73,2.404,109,4.056,110,3.258,112,2.326,113,4.823,116,4.056,137,3.68,168,4.312,173,2.608,180,3.367,181,2.912,186,2.162,206,2.876,222,2.878,224,1.624,226,3.222,230,2.354,250,3.882,258,1.387,282,2.151,295,3.629,307,5.547,334,2.864,335,4.977,340,1.547,347,2.505,354,1.715,368,2.53,369,3.654,385,2.279,399,2.921,400,2.949,401,6.63,422,2.139,424,6.425,426,6.62,440,4.382,445,2.128,448,2.419,464,2.834,467,4.586,469,2.564,495,2.564,504,3.489,505,5.75,516,3.882,519,3.82,551,2.818,568,2.654,575,3.954,622,3.604,626,3.224,627,1.768,644,2.775,647,2.59,654,3.604,681,3.629,682,2.764,689,3.179,693,2.956,714,2.713,767,3.79,792,2.864,803,3.706,812,5.067,851,2.547,895,2.084,901,3.348,908,2.497,976,2.988,1094,5.202,1126,4.916,1163,6.37,1221,2.703,1312,4.177,1535,2.703,1550,8.119,1624,5.946,1633,4.135,1679,3.191,1708,3.387,1716,3.616,1824,4.718,1875,3.808,1885,4.418,1918,5.472,2121,4.315,2182,4.813,2563,5.576,2606,4.813,3124,4.315,3403,4.177,3404,3.914,3405,3.914,3406,4.534,3410,4.597,3411,3.948,3412,7.377,3416,4.664,3423,4.534,3673,10.963,4559,8.508,4563,3.68,4574,7.625,4582,4.989,4588,4.418,4590,6.425,4591,8.595,4592,4.267,4608,5.09,4609,4.418,4610,5.641,4611,5.641,4612,5.641,4613,5.472,4614,5.328,4615,5.328,4616,5.641,4617,5.641,4618,6.216,4619,9.179,4620,5.472,4621,8.119,4622,5.472,4623,5.328,4624,5.641,4719,6.096,4720,6.096]],["keywords/797",[]],["title/798",[1023,407.123]],["content/798",[49,4.195,89,4.571,112,5.457,127,3.98,168,3.292,222,3.962,224,1.852,254,11.764,258,3.254,277,3.438,284,4.902,335,3.674,357,7.643,397,3.444,399,4.333,400,6.918,575,3.912,578,8.759,622,8.455,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,849,6.097,851,5.974,995,9.701,1126,5.606,3275,6.859,3308,11.941,3405,9.183,3428,10.941,3430,8.087,3431,11.11,3432,7.811,4625,13.233]],["keywords/798",[]],["title/799",[222,181.529,231,456.746,1815,767.708]],["content/799",[127,4.483,195,2.516,224,2.086,230,6.219,232,11.038,266,8.749,277,3.872,290,7.895,381,10.927,383,10.094,411,9.723,430,10.344,532,10.174,561,14.73,597,10.524,736,9.723,909,10.258,1067,12.941,1089,14.46,1535,7.142,1637,11.675,1810,11.402,1824,7.662,2336,12.941,4626,14.905,4627,14.079]],["keywords/799",[]],["title/800",[387,667.74,4628,989.405]],["content/800",[11,3.547,47,5.89,109,7.598,168,5.253,214,6.203,220,5.524,222,3.613,230,4.409,231,7.274,281,3.001,324,6.381,334,5.365,338,11.888,377,6.662,385,5.976,387,10.184,399,2.66,404,6.208,408,5.548,416,10.9,435,6.62,440,5.044,504,6.537,532,7.213,546,5.139,616,5.806,704,8.297,938,10.841,960,8.737,1086,9.174,1134,12.227,1237,9.449,1285,7.746,1337,8.277,1447,9.981,1810,8.083,1863,8.493,2230,10.251,2598,7.598,2608,7.461,3831,10.251,4589,8.177,4629,9.346,4630,10.567,4631,10.251,4632,10.567,4633,8.611,4634,8.493,4635,10.567,4636,8.382,4637,10.567]],["keywords/800",[]],["title/801",[173,429.303,195,156.745,1392,792.33]],["content/801",[15,3.843,18,3.451,68,7.438,168,3.117,173,7.68,179,8.061,195,2.115,222,3.643,231,8.17,237,6.696,291,4.237,307,5.198,324,7.567,383,8.486,385,5.063,399,3.154,404,5.26,422,4.753,435,7.85,594,6.884,658,6.188,676,7.567,736,8.174,841,8.174,856,9.096,906,6.917,976,6.637,1008,7.48,1196,8.847,1285,9.186,1392,10.693,1455,9.279,1824,6.441,2042,4.74,2598,9.01,4574,8.233,4618,11.248,4629,11.083,4633,10.211,4638,11.083,4639,11.083,4640,15.318,4641,11.083,4642,12.531,4643,12.531]],["keywords/801",[]],["title/802",[173,517.202,4644,1118.642]],["content/802",[19,3.681,68,7.693,116,9.32,168,3.224,172,5.951,173,8.758,179,8.338,222,3.703,224,2.377,231,8.354,324,7.827,334,6.58,340,3.555,387,7.737,422,4.916,430,8.994,520,9.501,698,8.281,704,6.303,736,8.455,808,6.805,837,9.914,841,8.455,856,9.409,1196,9.151,1302,10.881,1436,12.574,1455,9.598,1812,9.699,2598,9.32,4618,11.501,4628,15.021,4638,11.463,4639,11.463,4641,11.463,4645,12.961,4646,12.961,4647,12.961]],["keywords/802",[]],["title/803",[231,550.264,993,745.942]],["content/803",[3,2.635,69,4.55,78,8.892,113,3.838,161,6.341,166,9.701,168,4.283,213,10.01,222,3.962,230,5.522,237,7.072,324,7.991,334,6.719,349,9.516,377,8.344,383,8.962,399,3.331,422,5.019,430,9.183,435,8.29,440,6.317,495,6.015,676,7.991,993,8.824,1067,11.489,1285,9.701,1824,6.802,2598,9.516,4084,11.705,4589,10.241,4618,8.962,4633,10.784,4634,10.636,4648,13.233,4649,13.233,4650,13.233,4651,13.233,4652,13.233,4653,13.233]],["keywords/803",[]],["title/804",[57,667.674,2871,877.073,4618,628.788]],["content/804",[6,5.297,15,2.857,16,1.658,18,2.565,22,1.116,30,3.67,37,8.239,43,3.014,49,2.953,57,11.44,61,5.815,107,10.235,116,6.698,162,4.749,168,2.317,179,5.992,186,3.571,195,1.573,207,4.912,208,4.749,222,3.779,226,3.753,231,6.649,237,4.978,251,3.424,272,5.873,296,4.513,303,4.912,320,5.692,324,5.625,330,3.875,334,4.729,335,2.586,340,2.555,349,6.698,381,6.829,383,6.308,401,4.618,464,2.876,481,7.046,518,4.463,519,6.308,557,7.323,561,7.389,575,2.754,594,5.118,658,4.6,704,4.53,709,7.821,735,7.487,736,6.077,752,4.496,771,4.934,774,8.088,786,8.799,823,5.07,833,6.359,849,4.292,864,4.15,1074,5.727,1159,8.088,1221,4.463,1298,7.591,1326,6.464,1637,7.296,1748,5.658,1784,7.821,1824,4.788,1986,7.126,2042,3.524,2598,6.698,3530,7.949,4576,7.591,4594,8.239,4618,9.154,4621,8.239,4634,7.487,4654,13.517,4655,13.517,4656,13.517,4657,9.315,4658,9.315,4659,9.315,4660,9.037,4661,9.315,4662,9.315]],["keywords/804",[]],["title/805",[3,184.904,13,253.109,409,619.168]],["content/805",[1,3.981,2,1.839,3,3.958,13,5.692,22,1.718,36,6.796,79,6.028,168,3.567,222,2.803,227,5.681,231,7.053,261,6.562,277,3.725,289,8.113,340,3.933,347,6.368,372,5.453,385,5.794,409,9.562,422,5.439,448,6.149,489,8.326,660,8.282,1043,10.311,1237,9.162,2847,11.856]],["keywords/805",[]],["title/806",[61,341.406,172,364.419,1150,340.348,1824,407.945]],["content/806",[]],["keywords/806",[]],["title/807",[2042,532.102]],["content/807",[1,2.5,6,5.12,16,1.603,19,2.557,22,1.869,31,5.47,72,7.053,73,3.838,107,5.792,113,3.825,127,2.708,137,5.874,168,4.548,186,5.055,195,1.52,196,4.298,222,2.578,224,1.846,226,4.769,263,3.406,291,3.044,307,3.735,316,4.346,335,3.661,340,2.47,352,3.203,363,5.715,368,4.038,381,6.601,401,4.464,405,6.415,440,4.298,464,4.071,504,5.57,568,6.205,575,2.662,679,5.147,731,4.59,803,5.916,864,4.012,873,5.228,875,3.096,906,4.97,976,4.769,996,7.818,1008,5.375,1121,5.285,1348,6.358,1453,6.05,1466,8.125,1702,10.087,1748,5.469,1784,7.56,1796,6.738,1824,4.628,1973,6.601,1974,8.01,1986,6.888,2080,7.237,2094,4.812,2174,7.142,2563,9.478,2573,7.053,3848,7.142,4559,6.601,4563,5.874,4573,9.004,4574,8.664,4576,7.337,4577,9.004,4578,9.004,4580,9.004,4581,9.004,4582,7.964,4583,8.735,4584,7.237,4585,9.004,4586,9.004,4587,9.004,4588,7.053,4589,6.968,4590,6.302,4591,6.668,4592,6.811,4701,9.731,4702,8.125]],["keywords/807",[]],["title/808",[864,626.718]],["content/808",[2,1.95,13,1.93,15,3.373,16,2.931,18,1.95,22,1.317,52,3.537,61,4.731,66,4.741,73,3.017,97,3.889,112,6.27,115,6.192,127,2.129,161,3.392,168,4.096,185,4.731,186,4.216,195,1.195,198,3.985,221,4.379,222,2.15,224,1.539,226,1.966,228,2.422,258,1.741,263,2.678,279,4.457,281,2.011,282,1.659,291,2.394,293,4.872,297,3.685,325,4.179,335,3.744,340,1.942,352,2.518,367,5.138,368,3.175,374,6.15,385,2.861,396,3.624,432,3.908,439,4.618,461,4.651,485,3.8,526,2.475,568,6.345,574,6.16,575,3.986,594,3.889,600,5.944,626,4.046,627,4.228,646,6.286,647,3.251,651,5.473,658,3.496,682,3.469,693,4.343,731,5.606,803,4.651,804,3.594,823,3.853,849,5.067,906,3.908,1008,4.226,1023,2.049,1063,4.721,1139,9.384,1142,3.045,1150,3.036,1189,7.451,1210,4.133,1215,9.223,1217,7.48,1220,8.393,1221,3.392,1222,4.686,1824,3.639,2020,3.8,2094,5.877,2132,4.554,2225,7.333,2466,8.229,2470,5.69,2518,12.454,2562,4.955,2563,8.191,3404,4.913,4576,5.769,4584,5.69,4588,5.545,4593,10.142,4594,6.262,4597,5.355,4601,5.944,4721,8.723]],["keywords/808",[]],["title/809",[43,256.768,226,220.355,1824,407.945,4563,517.722]],["content/809",[2,0.97,16,2.803,19,2.148,22,1.684,31,2.408,43,6.214,66,2.057,69,2.6,75,5.437,78,5.081,89,2.008,113,2.193,137,9.168,168,3.496,222,3.078,226,5.171,251,4.253,263,4.377,270,2.914,275,5.72,281,2.148,282,2.711,284,2.801,307,5.83,329,5.544,335,3.902,340,2.074,350,6.162,368,3.391,370,4.174,389,4.933,405,8.243,427,6.282,437,4.768,440,6.709,448,4.962,457,4.174,464,4.338,509,5.489,515,4.768,573,5.784,767,5.081,808,3.97,875,2.6,920,4.898,1113,4.649,1221,3.623,1309,5.852,1401,6.613,1445,6.565,1590,6.252,1628,5.998,1793,6.452,1803,4.898,1824,8.093,1837,4.649,1988,3.97,2025,5.339,2047,6.452,2078,5.005,2122,4.593,2127,5.6,2422,5.72,4559,13.119,4563,11.069,4574,4.968,4590,8.098,4591,13.252,4592,10.631,4595,6.823,4602,7.833,4603,7.142,4604,7.142,4605,7.142,4606,6.973,4607,7.142,4702,6.823,4710,11.225,4711,7.336,4712,7.336,4713,10.67,4714,7.336,4715,7.336,4716,7.336,4717,7.833,4718,7.833]],["keywords/809",[]],["title/810",[401,460.294,546,451.561,2215,674.055]],["content/810",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,1824,6.802,3401,11.11]],["keywords/810",[]],["title/811",[16,250.43]],["content/811",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,1824,7.662]],["keywords/811",[]],["title/812",[282,329.633]],["content/812",[1,2.549,11,1.894,14,4.962,16,1.004,18,4.58,19,3.296,22,1.39,43,1.825,49,1.788,52,4.586,57,6.6,67,3.311,73,2.404,109,4.056,110,3.258,112,2.326,113,4.823,116,4.056,137,3.68,168,4.312,173,2.608,180,3.367,181,2.912,186,2.162,206,2.876,222,2.878,224,1.624,226,3.222,230,2.354,250,3.882,258,1.387,282,2.151,295,3.629,307,5.547,334,2.864,335,4.977,340,1.547,347,2.505,354,1.715,368,2.53,369,3.654,385,2.279,399,2.921,400,2.949,401,6.63,422,2.139,424,6.425,426,6.62,440,4.382,445,2.128,448,2.419,464,2.834,467,4.586,469,2.564,495,2.564,504,3.489,505,5.75,516,3.882,519,3.82,551,2.818,568,2.654,575,3.954,622,3.604,626,3.224,627,1.768,644,2.775,647,2.59,654,3.604,681,3.629,682,2.764,689,3.179,693,2.956,714,2.713,767,3.79,792,2.864,803,3.706,812,5.067,851,2.547,895,2.084,901,3.348,908,2.497,976,2.988,1094,5.202,1126,4.916,1163,6.37,1221,2.703,1312,4.177,1535,2.703,1550,8.119,1624,5.946,1633,4.135,1679,3.191,1708,3.387,1716,3.616,1824,4.718,1875,3.808,1885,4.418,1918,5.472,2121,4.315,2182,4.813,2563,5.576,2606,4.813,3124,4.315,3403,4.177,3404,3.914,3405,3.914,3406,4.534,3410,4.597,3411,3.948,3412,7.377,3416,4.664,3423,4.534,3673,10.963,4559,8.508,4563,3.68,4574,7.625,4582,4.989,4588,4.418,4590,6.425,4591,8.595,4592,4.267,4608,5.09,4609,4.418,4610,5.641,4611,5.641,4612,5.641,4613,5.472,4614,5.328,4615,5.328,4616,5.641,4617,5.641,4618,6.216,4619,9.179,4620,5.472,4621,8.119,4622,5.472,4623,5.328,4624,5.641,4719,6.096,4720,6.096]],["keywords/812",[]],["title/813",[1023,407.123]],["content/813",[49,4.195,89,4.571,112,5.457,127,3.98,168,3.292,222,3.962,224,1.852,254,11.764,258,3.254,277,3.438,284,4.902,335,3.674,357,7.643,397,3.444,399,4.333,400,6.918,575,3.912,578,8.759,622,8.455,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,849,6.097,851,5.974,995,9.701,1126,5.606,3275,6.859,3308,11.941,3405,9.183,3428,10.941,3430,8.087,3431,11.11,3432,7.811,4625,13.233]],["keywords/813",[]],["title/814",[222,181.529,231,456.746,1815,767.708]],["content/814",[127,4.483,195,2.516,224,2.086,230,6.219,232,11.038,266,8.749,277,3.872,290,7.895,381,10.927,383,10.094,411,9.723,430,10.344,532,10.174,561,14.73,597,10.524,736,9.723,909,10.258,1067,12.941,1089,14.46,1535,7.142,1637,11.675,1810,11.402,1824,7.662,2336,12.941,4626,14.905,4627,14.079]],["keywords/814",[]],["title/815",[387,667.74,4628,989.405]],["content/815",[11,3.547,47,5.89,109,7.598,168,5.253,214,6.203,220,5.524,222,3.613,230,4.409,231,7.274,281,3.001,324,6.381,334,5.365,338,11.888,377,6.662,385,5.976,387,10.184,399,2.66,404,6.208,408,5.548,416,10.9,435,6.62,440,5.044,504,6.537,532,7.213,546,5.139,616,5.806,704,8.297,938,10.841,960,8.737,1086,9.174,1134,12.227,1237,9.449,1285,7.746,1337,8.277,1447,9.981,1810,8.083,1863,8.493,2230,10.251,2598,7.598,2608,7.461,3831,10.251,4589,8.177,4629,9.346,4630,10.567,4631,10.251,4632,10.567,4633,8.611,4634,8.493,4635,10.567,4636,8.382,4637,10.567]],["keywords/815",[]],["title/816",[173,429.303,195,156.745,1392,792.33]],["content/816",[15,3.843,18,3.451,68,7.438,168,3.117,173,7.68,179,8.061,195,2.115,222,3.643,231,8.17,237,6.696,291,4.237,307,5.198,324,7.567,383,8.486,385,5.063,399,3.154,404,5.26,422,4.753,435,7.85,594,6.884,658,6.188,676,7.567,736,8.174,841,8.174,856,9.096,906,6.917,976,6.637,1008,7.48,1196,8.847,1285,9.186,1392,10.693,1455,9.279,1824,6.441,2042,4.74,2598,9.01,4574,8.233,4618,11.248,4629,11.083,4633,10.211,4638,11.083,4639,11.083,4640,15.318,4641,11.083,4642,12.531,4643,12.531]],["keywords/816",[]],["title/817",[173,517.202,4644,1118.642]],["content/817",[19,3.681,68,7.693,116,9.32,168,3.224,172,5.951,173,8.758,179,8.338,222,3.703,224,2.377,231,8.354,324,7.827,334,6.58,340,3.555,387,7.737,422,4.916,430,8.994,520,9.501,698,8.281,704,6.303,736,8.455,808,6.805,837,9.914,841,8.455,856,9.409,1196,9.151,1302,10.881,1436,12.574,1455,9.598,1812,9.699,2598,9.32,4618,11.501,4628,15.021,4638,11.463,4639,11.463,4641,11.463,4645,12.961,4646,12.961,4647,12.961]],["keywords/817",[]],["title/818",[231,550.264,993,745.942]],["content/818",[3,2.635,69,4.55,78,8.892,113,3.838,161,6.341,166,9.701,168,4.283,213,10.01,222,3.962,230,5.522,237,7.072,324,7.991,334,6.719,349,9.516,377,8.344,383,8.962,399,3.331,422,5.019,430,9.183,435,8.29,440,6.317,495,6.015,676,7.991,993,8.824,1067,11.489,1285,9.701,1824,6.802,2598,9.516,4084,11.705,4589,10.241,4618,8.962,4633,10.784,4634,10.636,4648,13.233,4649,13.233,4650,13.233,4651,13.233,4652,13.233,4653,13.233]],["keywords/818",[]],["title/819",[57,667.674,2871,877.073,4618,628.788]],["content/819",[6,5.297,15,2.857,16,1.658,18,2.565,22,1.116,30,3.67,37,8.239,43,3.014,49,2.953,57,11.44,61,5.815,107,10.235,116,6.698,162,4.749,168,2.317,179,5.992,186,3.571,195,1.573,207,4.912,208,4.749,222,3.779,226,3.753,231,6.649,237,4.978,251,3.424,272,5.873,296,4.513,303,4.912,320,5.692,324,5.625,330,3.875,334,4.729,335,2.586,340,2.555,349,6.698,381,6.829,383,6.308,401,4.618,464,2.876,481,7.046,518,4.463,519,6.308,557,7.323,561,7.389,575,2.754,594,5.118,658,4.6,704,4.53,709,7.821,735,7.487,736,6.077,752,4.496,771,4.934,774,8.088,786,8.799,823,5.07,833,6.359,849,4.292,864,4.15,1074,5.727,1159,8.088,1221,4.463,1298,7.591,1326,6.464,1637,7.296,1748,5.658,1784,7.821,1824,4.788,1986,7.126,2042,3.524,2598,6.698,3530,7.949,4576,7.591,4594,8.239,4618,9.154,4621,8.239,4634,7.487,4654,13.517,4655,13.517,4656,13.517,4657,9.315,4658,9.315,4659,9.315,4660,9.037,4661,9.315,4662,9.315]],["keywords/819",[]],["title/820",[3,184.904,13,253.109,409,619.168]],["content/820",[1,3.981,2,1.839,3,3.958,13,5.692,22,1.718,36,6.796,79,6.028,168,3.567,222,2.803,227,5.681,231,7.053,261,6.562,277,3.725,289,8.113,340,3.933,347,6.368,372,5.453,385,5.794,409,9.562,422,5.439,448,6.149,489,8.326,660,8.282,1043,10.311,1237,9.162,2847,11.856]],["keywords/820",[]],["title/821",[173,366.94,224,111.085,791,576.139,1824,407.945]],["content/821",[2,0.993,3,1.543,6,4.406,14,3.312,22,2.319,25,2.709,31,2.467,41,4.734,65,4.34,69,2.664,70,7.072,72,6.069,79,2.577,92,4.257,106,3.475,107,7.582,110,4.475,168,1.927,170,7.748,173,7.371,175,5.206,181,6.084,192,7.203,195,2.408,208,3.95,222,3.117,224,2.232,226,2.151,229,3.999,251,2.848,263,2.931,270,2.986,277,2.013,282,1.816,288,7.531,291,5.391,335,2.151,340,3.913,372,2.946,394,6.507,399,1.95,421,5.289,423,8.398,443,5.571,448,3.323,455,7.635,485,9.208,490,2.664,495,3.521,504,4.793,515,4.885,516,5.332,536,6.069,551,3.871,557,4.197,568,3.646,573,5.926,616,2.434,676,4.679,748,5.128,790,7.92,791,5.624,817,10.87,897,3.607,906,4.277,921,4.086,957,5.737,976,8.445,995,5.68,1090,6.145,1121,4.548,1259,8.373,1348,5.47,1591,11.435,1594,5.332,1737,6.991,1745,6.406,1824,8.195,1832,5.206,1835,7.145,1839,7.318,1863,9.474,1864,6.406,1928,6.991,1958,6.991,1964,6.727,2037,6.505,2060,7.145,2783,7.748,3395,9.9,4627,7.318,4687,7.318,4722,9.546,4723,8.839,4724,9.546,4725,9.546]],["keywords/821",[]],["title/822",[1824,477.276,1988,487.519,2046,639]],["content/822",[]],["keywords/822",[]],["title/823",[2042,532.102]],["content/823",[1,2.5,6,5.12,16,1.603,19,2.557,22,1.869,31,5.47,72,7.053,73,3.838,107,5.792,113,3.825,127,2.708,137,5.874,168,4.548,186,5.055,195,1.52,196,4.298,222,2.578,224,1.846,226,4.769,263,3.406,291,3.044,307,3.735,316,4.346,335,3.661,340,2.47,352,3.203,363,5.715,368,4.038,381,6.601,401,4.464,405,6.415,440,4.298,464,4.071,504,5.57,568,6.205,575,2.662,679,5.147,731,4.59,803,5.916,864,4.012,873,5.228,875,3.096,906,4.97,976,4.769,996,7.818,1008,5.375,1121,5.285,1348,6.358,1453,6.05,1466,8.125,1702,10.087,1748,5.469,1784,7.56,1796,6.738,1824,4.628,1973,6.601,1974,8.01,1986,6.888,2080,7.237,2094,4.812,2174,7.142,2563,9.478,2573,7.053,3848,7.142,4559,6.601,4563,5.874,4573,9.004,4574,8.664,4576,7.337,4577,9.004,4578,9.004,4580,9.004,4581,9.004,4582,7.964,4583,8.735,4584,7.237,4585,9.004,4586,9.004,4587,9.004,4588,7.053,4589,6.968,4590,6.302,4591,6.668,4592,6.811,4701,9.731,4702,8.125]],["keywords/823",[]],["title/824",[864,626.718]],["content/824",[2,1.62,13,1.4,15,2.606,16,2.492,22,0.615,33,3.802,52,2.565,57,9.086,66,5.185,69,5.186,79,1.708,92,2.821,97,2.821,107,5.466,112,3.504,113,1.489,115,6.926,127,4.536,161,2.46,168,2.114,180,5.072,185,2.209,186,3.257,195,0.867,196,2.451,222,1.661,224,1.189,226,4.188,228,1.757,251,3.124,258,2.089,263,1.942,279,3.443,281,1.458,282,1.991,289,9.8,291,2.873,297,2.673,325,3.031,335,4.637,340,1.408,348,5.583,350,4.184,352,1.827,360,2.834,367,3.97,374,4.958,396,2.628,432,4.691,439,3.349,445,1.937,461,3.374,464,1.585,467,2.565,485,2.756,518,4.071,526,1.795,556,5.835,568,5.115,572,3.842,574,4.76,575,3.214,594,4.668,627,4.389,641,4.582,646,7.222,651,2.555,658,2.535,693,3.501,731,2.618,804,2.607,808,5.708,810,2.848,823,2.794,849,3.915,873,2.981,906,2.834,921,4.481,1008,3.065,1023,1.486,1142,2.209,1189,6.192,1210,2.998,1215,4.76,1217,6.03,1220,6.975,1221,2.46,1222,3.398,1290,6.11,1363,3.658,1401,9.9,1628,6.74,1639,4.541,1643,2.998,1716,2.023,1757,4.633,1796,8.135,1824,7.195,1832,3.45,1974,5.162,1988,2.696,2020,2.756,2046,7.481,2094,4.541,2132,3.303,2216,6.924,2466,3.842,2470,4.127,2518,9.558,2562,3.594,2563,5.162,3578,4.633,3668,7.251,3669,4.245,3670,4.381,4584,4.127,4593,7.837,4597,3.884,4640,4.735,4664,4.311,4665,5.135,4667,5.549,4668,5.549,4669,5.549,4670,8.497,4671,5.858,4672,5.858,4673,5.858,4674,5.858,4675,5.549,4676,5.549,4707,5.858,4726,5.135]],["keywords/824",[]],["title/825",[43,256.768,226,220.355,1824,407.945,4563,517.722]],["content/825",[2,1.036,16,2.9,19,2.295,22,1.457,31,2.573,43,6.344,69,2.778,75,5.81,78,5.429,89,2.145,113,2.343,137,9.547,168,3.641,222,3.184,226,5.29,251,4.472,263,4.602,270,3.114,275,6.111,281,2.295,282,2.851,284,2.993,307,6.071,329,3.871,335,4.063,340,2.216,350,6.584,368,3.623,370,4.46,389,5.27,405,8.668,427,6.542,437,5.094,440,6.987,448,5.218,457,4.46,464,3.756,509,5.865,515,5.094,573,6.18,875,2.778,1113,4.967,1221,3.871,1309,6.252,1445,7.015,1590,6.68,1793,6.894,1803,5.233,1824,7.523,1837,4.967,2025,5.705,2078,5.347,2122,4.908,2127,5.983,2422,6.111,4559,13.459,4563,11.397,4574,5.308,4590,8.516,4591,12.938,4592,11.07,4595,7.29,4602,8.369,4603,7.632,4604,7.632,4605,7.632,4606,7.451,4607,7.632,4702,7.29,4710,11.804,4711,7.838,4712,7.838,4713,11.221,4714,7.838,4715,7.838,4716,7.838]],["keywords/825",[]],["title/826",[401,460.294,546,451.561,2215,674.055]],["content/826",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,1824,6.802,3401,11.11]],["keywords/826",[]],["title/827",[16,250.43]],["content/827",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,1824,7.662]],["keywords/827",[]],["title/828",[282,329.633]],["content/828",[1,2.549,11,1.894,14,4.962,16,1.004,18,4.58,19,3.296,22,1.39,43,1.825,49,1.788,52,4.586,57,6.6,67,3.311,73,2.404,109,4.056,110,3.258,112,2.326,113,4.823,116,4.056,137,3.68,168,4.312,173,2.608,180,3.367,181,2.912,186,2.162,206,2.876,222,2.878,224,1.624,226,3.222,230,2.354,250,3.882,258,1.387,282,2.151,295,3.629,307,5.547,334,2.864,335,4.977,340,1.547,347,2.505,354,1.715,368,2.53,369,3.654,385,2.279,399,2.921,400,2.949,401,6.63,422,2.139,424,6.425,426,6.62,440,4.382,445,2.128,448,2.419,464,2.834,467,4.586,469,2.564,495,2.564,504,3.489,505,5.75,516,3.882,519,3.82,551,2.818,568,2.654,575,3.954,622,3.604,626,3.224,627,1.768,644,2.775,647,2.59,654,3.604,681,3.629,682,2.764,689,3.179,693,2.956,714,2.713,767,3.79,792,2.864,803,3.706,812,5.067,851,2.547,895,2.084,901,3.348,908,2.497,976,2.988,1094,5.202,1126,4.916,1163,6.37,1221,2.703,1312,4.177,1535,2.703,1550,8.119,1624,5.946,1633,4.135,1679,3.191,1708,3.387,1716,3.616,1824,4.718,1875,3.808,1885,4.418,1918,5.472,2121,4.315,2182,4.813,2563,5.576,2606,4.813,3124,4.315,3403,4.177,3404,3.914,3405,3.914,3406,4.534,3410,4.597,3411,3.948,3412,7.377,3416,4.664,3423,4.534,3673,10.963,4559,8.508,4563,3.68,4574,7.625,4582,4.989,4588,4.418,4590,6.425,4591,8.595,4592,4.267,4608,5.09,4609,4.418,4610,5.641,4611,5.641,4612,5.641,4613,5.472,4614,5.328,4615,5.328,4616,5.641,4617,5.641,4618,6.216,4619,9.179,4620,5.472,4621,8.119,4622,5.472,4623,5.328,4624,5.641,4719,6.096,4720,6.096]],["keywords/828",[]],["title/829",[1023,407.123]],["content/829",[49,4.195,89,4.571,112,5.457,127,3.98,168,3.292,222,3.962,224,1.852,254,11.764,258,3.254,277,3.438,284,4.902,335,3.674,357,7.643,397,3.444,399,4.333,400,6.918,575,3.912,578,8.759,622,8.455,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,849,6.097,851,5.974,995,9.701,1126,5.606,3275,6.859,3308,11.941,3405,9.183,3428,10.941,3430,8.087,3431,11.11,3432,7.811,4625,13.233]],["keywords/829",[]],["title/830",[222,181.529,231,456.746,1815,767.708]],["content/830",[127,4.483,195,2.516,224,2.086,230,6.219,232,11.038,266,8.749,277,3.872,290,7.895,381,10.927,383,10.094,411,9.723,430,10.344,532,10.174,561,14.73,597,10.524,736,9.723,909,10.258,1067,12.941,1089,14.46,1535,7.142,1637,11.675,1810,11.402,1824,7.662,2336,12.941,4626,14.905,4627,14.079]],["keywords/830",[]],["title/831",[387,667.74,4628,989.405]],["content/831",[11,3.547,47,5.89,109,7.598,168,5.253,214,6.203,220,5.524,222,3.613,230,4.409,231,7.274,281,3.001,324,6.381,334,5.365,338,11.888,377,6.662,385,5.976,387,10.184,399,2.66,404,6.208,408,5.548,416,10.9,435,6.62,440,5.044,504,6.537,532,7.213,546,5.139,616,5.806,704,8.297,938,10.841,960,8.737,1086,9.174,1134,12.227,1237,9.449,1285,7.746,1337,8.277,1447,9.981,1810,8.083,1863,8.493,2230,10.251,2598,7.598,2608,7.461,3831,10.251,4589,8.177,4629,9.346,4630,10.567,4631,10.251,4632,10.567,4633,8.611,4634,8.493,4635,10.567,4636,8.382,4637,10.567]],["keywords/831",[]],["title/832",[173,429.303,195,156.745,1392,792.33]],["content/832",[15,3.843,18,3.451,68,7.438,168,3.117,173,7.68,179,8.061,195,2.115,222,3.643,231,8.17,237,6.696,291,4.237,307,5.198,324,7.567,383,8.486,385,5.063,399,3.154,404,5.26,422,4.753,435,7.85,594,6.884,658,6.188,676,7.567,736,8.174,841,8.174,856,9.096,906,6.917,976,6.637,1008,7.48,1196,8.847,1285,9.186,1392,10.693,1455,9.279,1824,6.441,2042,4.74,2598,9.01,4574,8.233,4618,11.248,4629,11.083,4633,10.211,4638,11.083,4639,11.083,4640,15.318,4641,11.083,4642,12.531,4643,12.531]],["keywords/832",[]],["title/833",[173,517.202,4644,1118.642]],["content/833",[19,3.681,68,7.693,116,9.32,168,3.224,172,5.951,173,8.758,179,8.338,222,3.703,224,2.377,231,8.354,324,7.827,334,6.58,340,3.555,387,7.737,422,4.916,430,8.994,520,9.501,698,8.281,704,6.303,736,8.455,808,6.805,837,9.914,841,8.455,856,9.409,1196,9.151,1302,10.881,1436,12.574,1455,9.598,1812,9.699,2598,9.32,4618,11.501,4628,15.021,4638,11.463,4639,11.463,4641,11.463,4645,12.961,4646,12.961,4647,12.961]],["keywords/833",[]],["title/834",[231,550.264,993,745.942]],["content/834",[3,2.635,69,4.55,78,8.892,113,3.838,161,6.341,166,9.701,168,4.283,213,10.01,222,3.962,230,5.522,237,7.072,324,7.991,334,6.719,349,9.516,377,8.344,383,8.962,399,3.331,422,5.019,430,9.183,435,8.29,440,6.317,495,6.015,676,7.991,993,8.824,1067,11.489,1285,9.701,1824,6.802,2598,9.516,4084,11.705,4589,10.241,4618,8.962,4633,10.784,4634,10.636,4648,13.233,4649,13.233,4650,13.233,4651,13.233,4652,13.233,4653,13.233]],["keywords/834",[]],["title/835",[57,667.674,2871,877.073,4618,628.788]],["content/835",[6,5.297,15,2.857,16,1.658,18,2.565,22,1.116,30,3.67,37,8.239,43,3.014,49,2.953,57,11.44,61,5.815,107,10.235,116,6.698,162,4.749,168,2.317,179,5.992,186,3.571,195,1.573,207,4.912,208,4.749,222,3.779,226,3.753,231,6.649,237,4.978,251,3.424,272,5.873,296,4.513,303,4.912,320,5.692,324,5.625,330,3.875,334,4.729,335,2.586,340,2.555,349,6.698,381,6.829,383,6.308,401,4.618,464,2.876,481,7.046,518,4.463,519,6.308,557,7.323,561,7.389,575,2.754,594,5.118,658,4.6,704,4.53,709,7.821,735,7.487,736,6.077,752,4.496,771,4.934,774,8.088,786,8.799,823,5.07,833,6.359,849,4.292,864,4.15,1074,5.727,1159,8.088,1221,4.463,1298,7.591,1326,6.464,1637,7.296,1748,5.658,1784,7.821,1824,4.788,1986,7.126,2042,3.524,2598,6.698,3530,7.949,4576,7.591,4594,8.239,4618,9.154,4621,8.239,4634,7.487,4654,13.517,4655,13.517,4656,13.517,4657,9.315,4658,9.315,4659,9.315,4660,9.037,4661,9.315,4662,9.315]],["keywords/835",[]],["title/836",[3,184.904,13,253.109,409,619.168]],["content/836",[1,3.981,2,1.839,3,3.958,13,5.692,22,1.718,36,6.796,79,6.028,168,3.567,222,2.803,227,5.681,231,7.053,261,6.562,277,3.725,289,8.113,340,3.933,347,6.368,372,5.453,385,5.794,409,9.562,422,5.439,448,6.149,489,8.326,660,8.282,1043,10.311,1237,9.162,2847,11.856]],["keywords/836",[]],["title/837",[693,299.043,3367,779.562,4727,877.073]],["content/837",[]],["keywords/837",[]],["title/838",[195,156.745,397,241.681,616,291.743]],["content/838",[2,2.168,168,4.206,230,7.055,262,8.995,263,6.396,274,10.952,424,11.834,627,5.301,864,8.933,1049,9.925,1189,8.285]],["keywords/838",[]],["title/839",[2042,532.102]],["content/839",[20,6.015,69,6.322,145,8.431,222,2.869,241,7.511,281,4.168,422,5.565,526,5.131,575,4.338,627,5.765,632,11.088,731,7.48,896,8.444,902,9.962,1267,7.671,1598,10.866,3367,12.319,4728,12.319,4729,16.741,4730,16.741,4731,16.741,4732,16.741,4733,16.741]],["keywords/839",[]],["title/840",[864,626.718]],["content/840",[2,1.741,13,2.212,14,4.467,16,0.865,20,1.991,22,1.626,30,1.913,66,3.693,69,3.592,86,2.748,112,2.003,113,4.517,115,2.23,145,9.378,162,2.476,185,5.251,198,5.882,206,2.476,207,4.279,214,2.851,225,7.245,226,2.901,230,3.386,241,2.486,250,3.343,251,4.487,262,2.584,270,4.705,274,3.146,279,4.946,329,2.327,340,1.332,352,1.728,357,4.686,359,7.772,361,3.561,367,2.269,372,3.086,375,8.266,379,10.092,385,4.932,392,9.446,417,7.251,422,1.842,434,3.005,440,2.319,445,3.942,526,5.707,557,5.661,575,4.338,607,6.706,627,5.117,632,4.479,644,5.14,646,2.776,658,4.007,677,6.706,678,3.674,679,6.977,692,3.191,693,2.613,731,4.136,758,6.612,812,2.681,864,6.537,871,6.505,895,3.861,896,7.495,897,5.683,902,9.482,920,3.146,921,2.561,938,5.948,982,6.279,1019,4.145,1021,2.82,1113,6.424,1126,2.057,1142,5.251,1143,3.005,1187,3.804,1257,7.664,1267,2.539,1302,6.812,1364,14.876,1401,2.776,1443,4.437,1497,4.479,1539,4.383,1598,6.009,1716,1.913,1765,3.635,1808,3.904,1859,3.343,1916,5.15,2062,12.52,2169,5.031,2211,4.145,2582,4.479,3367,12.319,3694,8.405,4728,4.078,4734,9.257,4735,5.541,4736,4.217,4737,5.541,4738,4.857,4739,11.921,4740,5.985,4741,5.541,4742,5.541,4743,5.541,4744,5.985]],["keywords/840",[]],["title/841",[16,250.43]],["content/841",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3367,12.514]],["keywords/841",[]],["title/842",[282,329.633]],["content/842",[13,3.711,14,5.343,15,1.29,18,5.204,19,3.55,20,1.725,22,1.631,30,2.831,31,2.289,33,8.24,41,4.392,43,2.325,44,5.701,52,2.102,66,1.145,71,2.248,79,2.39,97,2.312,108,2.556,113,3.949,136,2.001,145,4.129,168,3.813,173,5.145,180,2.512,195,1.878,196,2.009,216,5.768,222,0.823,228,1.44,230,1.756,232,3.116,251,1.547,258,1.035,277,1.867,282,2.929,303,2.219,330,2.99,340,1.154,343,1.925,353,5.437,368,3.223,369,2.725,392,8.611,399,2.368,400,6.533,401,7.599,424,5.03,426,6.571,428,5.074,429,3.218,440,6.499,458,2.29,467,2.102,490,1.447,518,2.016,526,2.513,550,5.434,551,5.559,556,8.589,562,3.429,563,2.998,579,2.357,627,2.949,634,3.429,654,2.688,689,1.457,692,2.764,693,4.025,719,7.535,771,2.229,780,3.721,812,2.323,816,4.906,818,2.443,821,4.082,835,2.47,842,1.766,860,2.806,895,4.111,896,5.109,902,5.097,925,5.296,930,4.722,960,3.479,976,3.807,1042,2.086,1049,6.531,1126,3.045,1133,1.862,1142,4.787,1143,2.603,1327,4.547,1364,3.337,1443,3.93,1614,2.849,1679,4.066,1703,3.721,1708,2.526,1716,4.923,1809,5.562,1832,2.827,1875,5.184,1943,10.823,1963,4.208,2024,6.789,2181,3.59,2255,3.88,2264,11.821,2521,7.445,2549,10.333,3124,3.218,3367,11.431,3395,4.988,3457,3.974,4035,3.88,4278,4.8,4736,3.653,4745,5.184,4746,5.184,4747,4.8,4748,4.8,4749,4.8,4750,4.8,4751,5.184,4752,4.8,4753,5.184,4754,5.184,4755,5.184,4756,5.184,4757,5.184,4758,5.184,4759,5.184,4760,5.184,4761,5.184,4762,5.184,4763,5.184,4764,5.184,4765,5.184,4766,5.184,4767,8.2,4768,5.184,4769,4.8,4770,4.8,4771,4.8,4772,5.184,4773,4.8,4774,4.8,4775,5.184,4776,5.184,4777,6.034,4778,8.856,4779,8.856,4780,5.184,4781,5.184,4782,5.184,4783,5.184]],["keywords/842",[]],["title/843",[1023,407.123]],["content/843",[14,6.527,15,4.682,41,6.76,113,3.208,222,2.163,224,1.548,258,2.72,262,8.122,397,2.879,399,2.784,458,6.021,526,3.868,556,5.938,707,4.7,771,5.859,818,10.151,835,6.493,838,5.859,842,4.644,847,5.115,895,4.087,896,5.079,925,6.227,930,7.268,1809,8.561,2264,9.604,3262,5.938,3275,5.734,3367,9.287,3442,11.459,3495,8.368,3544,11.955,4727,10.449,4749,12.62,4750,12.62,4752,12.62,4769,12.62,4770,12.62,4771,12.62,4773,12.62,4774,12.62,4784,13.63,4785,13.63,4786,11.955,4787,23.224,4788,13.63,4789,13.63,4790,13.63,4791,13.63,4792,13.63,4793,13.63,4794,13.63,4795,13.63,4796,13.63,4797,13.63,4798,13.63,4799,13.63,4800,13.63,4801,13.63,4802,11.062,4803,13.63,4804,13.63,4805,13.63]],["keywords/843",[]],["title/844",[758,756.644,3367,779.562,4806,1059.327]],["content/844",[]],["keywords/844",[]],["title/845",[613,554.925,652,252.11,758,501.136,2020,330.123,4727,580.899,4807,664.638]],["content/845",[13,4.871,345,11.067,396,9.146,693,5.755,1535,8.561]],["keywords/845",[]],["title/846",[693,360.272,4727,1056.653]],["content/846",[18,3.949,19,4.073,168,4.944,195,2.421,205,8.282,279,5.811,326,10.512,374,6.539,427,6.41,428,6.539,448,6.149,465,5.861,526,5.014,632,7.915,653,20.678,676,8.659,693,5.837,733,12.449,1679,8.113,1905,12.449,1921,14.339,2582,13.224,3367,12.039,4590,10.036,4727,13.545,4808,22.332,4809,17.668]],["keywords/846",[]],["title/847",[652,325.355,758,646.731,2020,426.032,4807,857.735]],["content/847",[1,3.836,18,3.804,19,3.924,43,4.469,60,9.507,168,4.403,205,7.979,224,1.934,226,3.836,279,5.598,283,6.387,320,10.816,347,6.135,412,15.76,428,6.3,440,6.595,464,4.264,527,8.826,550,7.979,616,5.561,632,9.771,731,7.042,758,11.257,849,6.365,1189,6.769,2086,9.934,2582,12.74,4810,17.021,4811,17.021,4812,17.021,4813,17.021,4814,17.021,4815,17.021]],["keywords/847",[]],["title/848",[2042,532.102]],["content/848",[20,5.878,69,6.231,145,8.239,222,2.803,241,7.34,281,4.073,422,5.439,526,5.014,575,4.239,620,10.846,627,5.682,632,10.971,731,7.31,896,8.322,902,9.819,1267,7.496,1598,10.619,1921,14.339,3367,12.039,4727,13.545,4728,12.039,4729,16.359,4730,16.359,4731,16.359,4732,16.359,4733,16.359]],["keywords/848",[]],["title/849",[422,424.277,864,498.398]],["content/849",[2,1.353,13,2.416,14,4.511,16,0.692,18,2.906,20,1.593,22,2.042,30,1.531,42,2.269,60,2.675,66,2.87,69,3.047,86,2.199,92,2.135,113,4.053,115,1.785,127,1.169,145,9.227,162,1.982,179,2.5,181,2.006,185,4.539,195,0.656,196,1.856,198,4.989,206,1.982,207,3.541,214,2.282,219,2.167,224,0.94,225,3.985,226,2.93,230,1.622,235,2.467,241,3.437,251,4.792,262,3.572,270,3.416,279,4.276,283,1.797,299,3.375,326,6.497,329,1.862,340,1.841,345,2.077,349,2.795,352,2.388,354,2.694,357,3.878,359,6.904,361,2.849,363,2.467,367,4.141,372,2.553,375,4.547,379,8.724,385,2.713,392,8.166,411,2.536,417,6.151,422,1.474,434,2.404,440,1.856,445,3.981,513,3.51,526,4.558,541,2.483,542,4.444,552,2.467,557,5.716,575,3.853,607,3.689,627,4.632,632,5.825,644,5.19,652,1.593,658,5.21,660,2.245,677,3.689,678,2.94,679,6.031,692,2.554,693,4.979,731,6.645,758,7.222,812,5.825,849,1.791,864,6.582,871,5.517,874,3.263,895,3.899,896,7.374,897,3.126,902,9.235,920,2.518,938,4.922,973,3.214,982,5.196,998,2.878,1021,3.899,1022,2.653,1113,7.324,1142,4.539,1187,5.259,1257,9.967,1267,3.51,1302,5.637,1364,15.068,1401,2.222,1443,3.671,1497,3.585,1539,3.507,1598,4.972,1716,1.531,1765,6.632,1808,3.124,1916,4.261,2055,2.878,2062,6.192,2074,3.585,2169,4.026,2211,3.317,2227,4.435,2255,3.585,2582,6.192,3117,4.435,3122,7.839,3367,10.002,3694,4.026,4035,3.585,4727,9.967,4735,4.435,4736,3.375,4737,4.435,4738,10.552,4739,10.112,4741,4.435,4742,4.435,4743,4.435,4806,4.435,4807,7.256,4816,4.789,4817,4.789,4818,4.789,4819,4.789,4820,4.789,4821,4.789,4822,4.789,4823,4.789,4824,4.789,4825,4.789]],["keywords/849",[]],["title/850",[16,250.43]],["content/850",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3367,12.514]],["keywords/850",[]],["title/851",[282,329.633]],["content/851",[3,2.933,13,5.025,18,5.807,19,4.184,145,8.464,195,1.774,222,2.054,258,2.584,282,3.452,330,4.372,392,14.266,397,2.735,399,2.645,426,7.424,428,6.718,447,5.13,556,7.907,627,4.618,689,3.639,692,6.904,693,3.384,714,5.053,851,4.744,896,8.913,908,4.651,1142,8.35,1535,5.035,1716,5.803,1875,6.11,2255,9.691,3262,5.641,3263,6.134,3367,12.367,4357,10.885,4734,16.806,4736,9.123,4747,11.988,4748,11.988,4786,11.356,4826,11.988,4827,11.988,4828,11.988]],["keywords/851",[]],["title/852",[1023,407.123]],["content/852",[15,4.431,222,2.825,224,2.022,258,3.553,262,7.687,397,3.761,399,3.637,483,13.038,526,5.052,689,5.003,707,6.139,838,7.653,842,6.065,847,6.68,1380,15.616,3262,7.756,3275,7.49,3277,12.145,3368,16.484,3765,19.683,3774,14.018,3944,14.018,4358,14.967,4786,15.616,4826,16.484,4827,16.484,4828,16.484,4829,17.803,4830,16.484]],["keywords/852",[]],["title/853",[3121,1297.249]],["content/853",[]],["keywords/853",[]],["title/854",[195,156.745,397,241.681,616,291.743]],["content/854",[2,2.13,3,3.308,7,8.266,8,7.401,31,5.289,49,5.266,127,4.995,195,2.804,397,5.164,399,4.181,469,7.55,616,5.219,4831,20.466]],["keywords/854",[]],["title/855",[2042,532.102]],["content/855",[2,1.759,16,2.442,22,2.461,36,6.5,66,4.793,145,10.122,161,6.571,163,5.622,224,1.92,340,3.761,347,7.824,352,6.267,354,5.356,355,5.585,396,7.02,526,4.795,616,4.309,627,4.299,693,4.417,810,7.607,895,5.067,896,6.297,921,7.232,1020,9.287,1026,8.946,3121,16.247,3484,10.967]],["keywords/855",[]],["title/856",[864,413.694,895,343.078,3484,577.996]],["content/856",[18,4.105,19,4.234,22,1.786,66,4.055,69,6.384,145,11.623,251,5.479,465,6.093,651,7.418,675,11.675,679,8.52,1036,13.45,1042,9.206,1110,10.094,1142,6.412,4832,18.365,4833,18.365,4834,18.365,4835,18.365,4836,18.365,4837,18.365,4838,18.365,4839,18.365]],["keywords/856",[]],["title/857",[347,412.345,864,413.694,895,343.078]],["content/857",[16,2.572,22,1.731,31,5.8,66,3.931,69,4.967,112,5.958,145,11.459,186,5.539,207,9.604,224,2.022,251,5.311,320,8.829,422,5.48,575,5.896,679,8.259,777,13.221,864,6.438,871,8.994,896,6.635,1042,7.163,1049,8.481,1859,9.944,3121,13.325,4840,17.803]],["keywords/857",[]],["title/858",[16,250.43]],["content/858",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3121,13.746]],["keywords/858",[]],["title/859",[282,329.633]],["content/859",[2,1.219,3,1.892,18,5.144,19,4.57,20,3.896,22,1.643,36,6.499,43,3.074,86,5.376,168,2.364,195,1.604,219,5.297,222,1.858,226,3.808,258,2.337,282,4.128,283,4.394,329,4.553,330,5.705,347,6.09,352,3.38,354,2.889,355,3.013,397,3.569,399,2.392,400,4.968,422,3.604,426,6.712,427,4.248,428,8.519,518,4.553,568,4.471,627,4.299,652,3.896,689,3.291,714,6.595,841,6.199,851,4.29,875,3.267,895,6.902,896,7.388,908,6.07,929,5.992,1535,4.553,1621,7.111,1624,6.155,1708,5.705,1716,5.403,1803,6.155,1875,5.688,1945,6.71,2121,7.269,2127,7.037,3121,12.647,3262,5.101,3263,5.548,3471,5.705,3481,7.443,3482,7.857,3492,7.354,3493,7.269,4615,8.976,4841,11.709,4842,11.709]],["keywords/859",[]],["title/860",[1023,407.123]],["content/860",[1,3.981,15,4.397,86,8.113,123,8.196,222,2.803,224,2.007,258,3.526,347,6.368,397,3.732,399,3.609,400,7.496,689,4.965,707,6.093,838,7.595,842,6.019,847,6.63,851,6.474,895,5.298,896,8.322,908,6.347,1023,4.15,1133,6.347,1142,6.168,1234,12.039,3262,7.697,3275,7.433,3369,16.359,3495,10.846,3640,12.039,3641,9.788,4843,16.359]],["keywords/860",[]],["title/861",[4844,1364.669]],["content/861",[]],["keywords/861",[]],["title/862",[2042,532.102]],["content/862",[2,2.466,168,3.925,186,6.048,279,7.794,335,4.381,340,4.327,374,7.195,469,7.171,568,7.424,575,4.664,627,4.946,693,5.081,2568,12.21,4728,16.147,4845,18,4846,18,4847,18]],["keywords/862",[]],["title/863",[864,626.718]],["content/863",[127,5.323,224,2.478,226,4.915,445,6.678,752,8.544,875,6.085,4844,17.172]],["keywords/863",[]],["title/864",[66,252.595,575,274.491,2568,718.559]],["content/864",[1,2.151,2,0.993,4,5.091,11,3.957,13,2.112,22,1.91,66,4.915,73,3.302,89,2.057,92,6.476,127,3.545,132,11.787,136,3.685,139,4.383,161,3.712,168,4.815,174,5.423,185,7.772,186,6.112,195,1.308,196,5.627,279,3.14,291,2.62,335,4.763,338,4.984,340,2.125,345,4.14,367,3.62,385,4.763,389,5.054,432,4.277,434,4.793,440,3.699,452,5.624,485,4.159,518,3.712,519,5.247,529,5.798,533,4.361,575,5.341,577,7.145,627,5.378,641,4.178,731,3.95,921,4.086,993,5.166,1008,4.625,1157,7.516,1189,10.537,1364,9.35,1580,7.516,1623,5.926,1654,7.318,1988,4.068,2046,5.332,2214,7.145,2563,8.666,2568,5.996,4848,22.526,4849,8.839,4850,8.839,4851,8.839,4852,9.546,4853,9.546,4854,9.546,4855,12.21,4856,8.839,4857,9.546,4858,9.546,4859,9.546,4860,9.546,4861,9.546,4862,9.546]],["keywords/864",[]],["title/865",[11,311.729,263,351.238,803,610.076]],["content/865",[2,2.04,11,7.272,16,2.833,113,4.615,168,4.809,357,9.19,404,6.679,424,13.53,448,6.823,575,4.703,627,4.988,1091,10.774,1141,12.462,4728,13.358]],["keywords/865",[]],["title/866",[16,250.43]],["content/866",[1,5.024,2,1.516,16,3.714,22,1.416,24,3.774,89,3.14,115,5.429,127,3.556,163,4.847,224,2.833,227,4.684,228,5.467,258,2.907,263,4.473,277,3.072,281,4.538,284,4.38,354,3.595,355,3.749,367,5.525,372,4.497,461,7.769,464,3.65,490,4.065,594,6.496,646,9.132,658,5.839,693,5.146,804,6.003,823,6.435,849,7.362,875,4.065,1023,4.624,1217,8.862,1220,9.989,1221,5.665,1222,7.826,2020,6.347,4597,8.944,4844,11.471]],["keywords/866",[]],["title/867",[282,329.633]],["content/867",[1,1.693,11,4.698,14,5.23,18,4.501,19,2.776,22,1.835,25,2.132,31,3.112,49,1.933,52,6.991,65,3.415,67,5.737,73,2.598,77,7.313,89,1.619,109,4.384,110,5.645,112,2.514,113,4.059,168,4.44,173,4.519,185,2.622,208,3.108,214,3.578,222,2.994,224,0.853,230,2.544,251,4.497,258,1.499,263,2.306,282,2.29,295,3.922,320,3.725,335,5.111,351,4.343,368,2.734,369,3.949,397,2.544,399,1.534,400,6.395,401,7.593,424,8.562,426,6.786,448,4.191,464,3.017,466,10.363,467,4.883,469,2.771,495,2.771,505,3.819,516,4.195,544,3.844,550,3.521,551,4.883,568,2.869,575,3.616,622,3.895,647,2.799,654,6.244,689,3.384,712,4.128,767,4.096,818,3.54,834,4.718,836,4.515,895,2.252,976,5.176,1049,3.578,1102,5.914,1126,5.182,1143,3.771,1495,6.955,1535,6.705,1550,5.392,1600,10.124,1623,4.663,1624,6.331,1633,4.469,1679,3.449,1716,3.85,1875,4.054,1885,4.775,2223,6.315,2534,6.955,2563,5.937,2606,5.202,2823,4.968,3124,7.476,3403,4.515,3404,4.231,3406,4.9,3410,4.968,3411,4.267,3412,7.855,3415,5.392,3423,4.9,3673,11.555,4613,5.914,4614,5.758,4615,5.758,4855,6.315,4863,6.955,4864,6.955,4865,7.511,4866,7.511,4867,10.562,4868,7.511,4869,7.511,4870,10.562,4871,7.511,4872,9.482,4873,5.501,4874,7.511,4875,7.511,4876,7.511]],["keywords/867",[]],["title/868",[1023,407.123]],["content/868",[13,3.557,112,5.381,136,6.207,222,2.551,224,1.827,258,3.209,335,4.737,397,3.397,399,3.285,466,9.664,575,3.858,622,8.338,689,4.519,707,5.545,771,6.912,818,7.578,838,6.912,842,5.478,847,6.034,1126,5.528,1142,5.614,1222,8.638,1226,13.05,1228,12.661,1230,8.338,1240,12.327,1241,10.635,2123,9.872,2455,10.79,3275,6.765,3405,9.056,3430,7.975,3431,10.957,3432,7.703,4863,14.889,4864,14.889,4867,14.104,4877,16.08,4878,14.889,4879,16.08,4880,16.08,4881,16.08,4882,14.889,4883,14.889]],["keywords/868",[]],["title/869",[1535,535.982,4872,1085.254]],["content/869",[11,4.571,14,4.757,20,7.746,22,2.417,24,4.892,31,2.289,43,3.6,54,5.03,73,3.063,89,2.955,92,3.949,107,4.623,113,5.304,163,2.946,168,4.125,175,4.829,181,3.71,186,2.755,191,5.217,195,2.588,196,7.318,208,3.664,221,6.883,222,1.405,224,1.006,235,4.562,246,4.946,251,5.635,270,2.77,335,3.78,338,4.623,339,5.63,345,3.841,360,3.967,368,3.223,370,3.967,374,3.278,387,6.642,392,5.562,395,7.445,397,1.871,440,5.312,466,10.082,485,7.309,575,2.125,657,6.24,682,3.522,704,3.495,712,4.867,801,6.133,810,3.987,813,4.906,836,8.24,873,4.173,957,10.082,1106,6.357,1112,5.701,1121,6.532,1211,5.217,1285,5.269,1442,4.946,1535,8.762,1600,15.878,2274,17.488,2324,8.2,2608,5.075,2783,7.187,2871,6.789,4541,5.562,4728,9.342,4855,15.878,4872,18.332,4873,6.485,4884,8.856,4885,8.856,4886,8.856,4887,8.856,4888,7.768,4889,11.526,4890,13.71,4891,8.856]],["keywords/869",[]],["title/870",[77,518.559,208,353.271,276,572.957,400,362.279,4870,748.94]],["content/870",[1,3.836,22,1.15,25,3.357,30,3.782,31,3.057,43,5.236,49,3.043,77,13.245,92,7.589,168,2.388,190,9.313,195,1.62,208,9.023,219,9.02,222,2.701,224,2.265,231,4.722,238,6.553,244,5.431,251,5.078,270,3.7,281,2.727,291,3.246,307,3.982,335,5.423,340,2.633,363,6.093,383,9.355,397,2.499,404,4.03,423,6.839,464,2.963,495,8.045,504,5.938,515,6.053,520,7.037,540,5.73,550,5.545,551,4.796,553,8.334,654,6.133,712,6.501,778,13.049,807,7.429,829,7.663,836,7.109,921,5.062,1108,8.853,1237,6.133,1348,6.778,1558,9.944,1572,10.375,1590,7.937,1592,13.049,1748,5.831,2439,9.313,2570,8.853,2823,13.187,3190,10.952,4870,14.93,4892,11.828,4893,11.828,4894,11.828,4895,11.828,4896,11.828,4897,11.828]],["keywords/870",[]],["title/871",[1815,1163.024]],["content/871",[127,4.705,172,7.184,231,7.697,238,10.68,246,10.768,281,4.444,338,10.065,575,6.111,641,8.437,693,5.039,875,5.379,1285,11.47,2564,10.951,3443,16.91,4038,17.851,4848,16.91,4898,19.279,4899,19.279,4900,16.207]],["keywords/871",[]],["title/872",[550,646.112,1112,887.311]],["content/872",[113,4.948,168,4.244,224,2.388,440,8.144,449,14.558,616,6.333,1298,13.902,1731,12.385,1973,12.507,4855,17.672]],["keywords/872",[]],["title/873",[4844,1085.254,4901,1208.976]],["content/873",[]],["keywords/873",[]],["title/874",[2042,532.102]],["content/874",[2,2.466,168,3.925,186,6.048,279,7.794,335,4.381,340,4.327,374,7.195,469,7.171,568,7.424,575,4.664,627,4.946,693,5.081,2568,12.21,4728,16.147,4845,18,4846,18,4847,18]],["keywords/874",[]],["title/875",[864,626.718]],["content/875",[127,5.323,224,2.478,226,4.915,445,6.678,752,8.544,875,6.085,4844,17.172]],["keywords/875",[]],["title/876",[66,252.595,575,274.491,2568,718.559]],["content/876",[1,2.901,2,1.34,4,6.866,11,4.926,22,1.252,66,5.003,89,2.775,127,4.413,161,5.007,168,4.575,174,7.314,185,7.295,186,7.05,279,4.235,335,5.106,340,2.866,345,5.584,389,6.817,434,6.464,452,7.586,485,5.609,518,5.007,529,7.82,533,5.882,575,5.938,577,9.637,627,6.073,641,5.635,731,5.327,921,5.51,993,6.968,1157,10.138,1189,10.487,1580,10.138,1623,7.993,1654,9.871,2214,9.637,2568,8.087,4848,21.707,4849,11.922,4850,11.922,4851,11.922,4856,11.922]],["keywords/876",[]],["title/877",[11,311.729,263,351.238,803,610.076]],["content/877",[2,1.974,11,6.89,16,3.373,31,4.901,113,4.464,168,4.713,357,8.89,404,7.952,409,10.263,424,13.259,448,6.6,575,5.6,627,4.825,1141,12.056,1352,12.922,4728,12.922]],["keywords/877",[]],["title/878",[16,250.43]],["content/878",[1,5.008,2,1.507,16,3.707,22,1.408,24,3.75,89,3.12,115,5.396,127,3.534,163,4.817,224,2.827,227,4.655,228,5.444,258,2.889,263,4.445,277,3.052,281,4.519,284,4.353,354,3.572,355,3.725,367,5.49,372,4.469,461,7.721,464,3.627,490,4.04,594,6.456,646,9.094,658,5.803,693,5.124,804,5.966,823,6.395,849,7.331,875,4.04,1023,4.605,1217,8.825,1220,9.957,1221,5.63,1222,7.777,2020,6.308,4597,8.888,4844,11.4,4901,12.7]],["keywords/878",[]],["title/879",[282,329.633]],["content/879",[11,4.683,18,4.905,19,3.256,20,3.063,22,1.671,24,3.659,25,2.613,31,3.651,41,10.313,49,2.369,52,6.97,57,10.031,67,4.386,97,6.299,110,4.316,112,3.081,113,3.325,168,3.47,173,3.455,258,1.837,282,2.687,291,3.876,334,3.793,335,4.344,397,3.631,399,1.881,401,5.683,426,7.321,427,3.34,505,7.182,551,3.733,556,4.011,575,2.209,616,2.348,627,2.342,654,4.774,693,4.493,812,6.329,818,4.339,895,5.154,908,3.307,952,8.524,974,5.276,976,3.957,1126,7.149,1133,6.926,1140,7.472,1143,9.679,1455,5.533,1538,5.927,1716,4.517,1875,5.787,1905,9.954,2275,7.472,3124,5.715,3403,5.533,3406,6.005,3457,7.058,3677,7.472,3679,8.075,4377,8.075,4623,7.058,4728,6.273,4802,11.465,4867,8.075,4901,15.077,4902,9.206,4903,6.742,4904,9.206,4905,20.795,4906,9.206,4907,9.206,4908,9.206,4909,9.206,4910,9.206,4911,9.206,4912,9.206,4913,9.206,4914,9.206,4915,9.206,4916,9.206,4917,9.206,4918,9.206,4919,9.206]],["keywords/879",[]],["title/880",[1023,407.123]],["content/880",[11,4.351,13,3.533,41,7.92,112,5.344,113,3.759,136,6.165,222,2.534,224,1.814,258,3.187,397,3.373,399,3.262,575,3.831,707,5.507,838,6.865,842,5.441,847,5.992,1126,7.194,1133,5.737,1142,5.575,1143,10.506,1222,8.578,1226,12.961,1228,12.574,1230,8.281,1240,12.243,1241,10.562,1768,9.151,1905,11.253,2123,9.804,2455,10.716,3275,6.718,3405,8.994,3430,7.92,3431,10.881,3432,7.65,4380,14.007,4728,10.881,4802,12.961,4878,14.787,4882,14.787,4883,14.787,4920,15.969,4921,15.969,4922,15.969]],["keywords/880",[]],["title/881",[262,595.127,3370,1056.653]],["content/881",[]],["keywords/881",[]],["title/882",[195,156.745,397,241.681,616,291.743]],["content/882",[2,2.075,3,3.223,7,8.054,8,8.702,31,5.153,49,5.13,127,4.867,195,2.732,397,5.084,399,4.073,469,7.355,616,5.085,652,6.634,3370,15.286,4923,19.94]],["keywords/882",[]],["title/883",[2042,532.102]],["content/883",[22,2.101,262,10.898,526,6.132,652,7.189,1102,17.013,3370,19.35]],["keywords/883",[]],["title/884",[16,250.43]],["content/884",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,262,7.868,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,3370,13.969]],["keywords/884",[]],["title/885",[282,329.633]],["content/885",[3,2.069,13,2.833,14,6.249,18,5.521,19,4.152,36,4.925,43,3.362,123,5.94,195,1.754,206,7.451,222,2.032,258,2.555,262,5.529,282,3.425,330,4.323,397,2.705,399,2.616,426,7.204,427,4.645,428,7.711,447,5.073,568,4.89,601,8.354,604,6.596,627,3.258,689,3.599,693,3.347,714,4.998,816,7.094,818,6.034,851,4.692,896,6.711,908,4.6,1142,6.288,1237,6.64,1535,4.979,1679,5.88,1716,5.758,1803,6.732,1875,6.063,1945,10.32,1986,7.949,2094,9.803,3262,5.579,3263,6.067,3370,15.97,3500,7.861,3501,8.868,3640,8.725,3641,7.094,4418,10.765,4736,12.69,4738,10.392,4924,10.082]],["keywords/885",[]],["title/886",[1023,407.123]],["content/886",[15,4.465,123,8.322,222,2.847,224,2.038,258,3.58,262,7.746,397,3.79,399,3.665,689,5.042,707,6.187,818,8.455,838,7.712,842,6.112,847,6.732,851,6.574,3262,7.816,3275,7.547,3277,13.346,3279,10.104,3370,13.753,3496,11.865,3500,11.014,3501,12.425,3641,9.939,3766,10.374,4830,16.611,4924,14.126,4925,17.94]],["keywords/886",[]],["title/887",[3309,1364.669]],["content/887",[]],["keywords/887",[]],["title/888",[195,156.745,397,241.681,616,291.743]],["content/888",[2,2.075,3,3.223,7,8.054,8,8.702,31,5.153,49,5.13,127,4.867,195,2.732,397,5.084,399,4.073,469,7.355,616,5.085,652,6.634,3309,15.7,4926,19.94]],["keywords/888",[]],["title/889",[2042,532.102]],["content/889",[13,4.78,145,10.076,326,12.855,526,6.132,652,7.189,3309,19.874,3933,20.006]],["keywords/889",[]],["title/890",[16,250.43]],["content/890",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3309,14.46]],["keywords/890",[]],["title/891",[282,329.633]],["content/891",[3,2.546,13,4.588,18,4.635,19,4.781,36,6.059,43,5.446,195,2.841,222,2.5,258,3.144,282,3.944,330,5.319,397,4.381,399,3.218,426,6.761,427,5.715,428,8.582,568,7.92,652,6.9,704,6.218,925,7.197,1716,6.631,1803,8.282,1832,8.591,1875,6.982,2846,9.671,3309,16.33,3457,12.077,3493,9.78,4927,15.753,4928,15.753,4929,15.753,4930,15.753]],["keywords/891",[]],["title/892",[1023,407.123]],["content/892",[113,6.401,222,2.356,224,1.687,258,2.963,274,7.806,326,8.834,397,5.744,399,3.033,707,5.12,804,6.118,838,6.383,842,5.059,847,10.203,1042,5.974,1133,5.334,3273,9.326,3275,6.246,3277,8.036,3310,13.748,4931,14.848,4932,14.848,4933,14.848,4934,14.848,4935,14.848,4936,14.848,4937,14.848,4938,14.848,4939,14.848,4940,14.848,4941,14.848,4942,14.848,4943,14.848,4944,14.848]],["keywords/892",[]],["title/893",[4945,1328.705]],["content/893",[]],["keywords/893",[]],["title/894",[2042,532.102]],["content/894",[14,7.039,127,4.952,224,2.305,226,4.572,277,4.277,340,4.516,352,5.857,355,5.22,445,6.212,896,7.56,1142,7.083,2042,6.228,4945,18.642,4946,20.288]],["keywords/894",[]],["title/895",[864,626.718]],["content/895",[2,1.516,13,3.223,14,5.055,22,1.416,31,3.765,70,5.862,127,3.556,185,5.086,195,1.996,196,5.645,224,1.655,226,3.283,277,3.072,279,4.792,355,3.749,359,6.263,427,5.285,428,7.286,445,6.028,490,4.065,526,4.135,626,6.758,627,3.707,679,6.758,752,5.707,875,4.065,896,7.336,908,5.234,1142,5.086,1830,13.634,1945,8.349,3251,12.779,3483,15.5,3492,9.15,3493,9.045,3494,10.266,3513,10.905,4074,16.55,4945,18.307,4947,14.569,4948,14.569,4949,12.779,4950,14.569,4951,14.569,4952,13.49,4953,14.569,4954,14.569,4955,13.49,4956,14.569,4957,14.569,4958,14.569]],["keywords/895",[]],["title/896",[16,250.43]],["content/896",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,4945,14.079]],["keywords/896",[]],["title/897",[282,329.633]],["content/897",[3,2.581,18,5.217,19,4.824,31,4.127,115,5.951,222,2.534,226,3.599,258,3.187,282,3.98,330,5.392,397,3.373,399,3.262,426,6.806,427,5.794,428,9.168,447,6.327,652,5.313,689,4.488,693,4.174,714,6.233,851,5.851,908,5.737,1256,11.463,1535,6.21,1716,6.691,1875,7.045,1974,7.873,2608,9.151,3263,7.567,3492,10.03,3493,9.914,3494,11.253,4945,12.243,4959,14.007,4960,15.969]],["keywords/897",[]],["title/898",[1023,407.123]],["content/898",[14,3.272,15,7.114,69,2.631,162,3.902,458,8.623,477,18.213,627,3.661,835,4.493,895,2.828,896,6.502,901,4.543,1142,3.292,1363,8.32,1428,12.096,2094,6.24,2211,6.531,2280,16.154,2282,14.16,2283,20.514,2291,17.981,2294,18.075,2298,8.732,3264,13.323,3265,13.323,3471,4.595,3484,7.269,3513,7.058,3569,13.323,3795,13.058,4073,8.271,4074,12.096,4955,13.323,4961,14.389,4962,9.43,4963,9.43,4964,9.43,4965,21.02,4966,9.43,4967,17.446,4968,9.43,4969,9.43,4970,14.389,4971,19.521,4972,17.446,4973,9.43,4974,9.43,4975,9.43,4976,8.732,4977,14.389,4978,9.43,4979,14.389,4980,19.521,4981,9.43]],["keywords/898",[]],["title/899",[616,351.477,689,387.369]],["content/899",[127,4.124,224,1.92,277,3.562,289,9.967,400,7.17,526,6.806,541,13.575,616,4.309,658,8.7,677,11.672,689,4.749,4945,12.954,4982,16.898,4983,16.898,4984,21.707,4985,20.099,4986,21.707,4987,21.707,4988,25.309]],["keywords/899",[]],["title/900",[546,544.018,2215,812.067]],["content/900",[70,8.198,79,4.14,127,3.744,180,7.43,207,6.564,224,1.742,276,10.292,289,7.043,297,8.608,303,6.564,355,3.946,526,4.353,541,7.953,550,9.552,575,4.889,652,6.779,689,6.431,829,12.172,849,5.735,860,8.301,1068,12.076,1091,8.43,1453,8.364,1643,10.842,1809,9.633,1815,10.292,1974,7.561,3787,11.48,3788,10.144,3966,10.622,4945,15.621,4989,15.338,4990,15.338,4991,15.338,4992,15.338]],["keywords/900",[]],["title/901",[1988,487.519,2041,496.196,2046,639]],["content/901",[]],["keywords/901",[]],["title/902",[272,585.453,370,512.565,616,291.743]],["content/902",[61,7.474,68,10.313,224,2.432,272,10.955,370,9.591,616,5.459,2041,9.285,4696,17.998,4993,18.778]],["keywords/902",[]],["title/903",[2042,532.102]],["content/903",[6,5.572,15,3.005,16,1.744,25,3.426,29,7.495,30,3.86,31,3.12,49,3.106,65,5.489,66,5.35,73,5.975,89,3.723,113,2.842,127,2.947,168,4.445,186,3.756,195,1.654,196,4.678,208,7.147,220,5.123,222,1.916,224,2.291,226,2.721,251,5.153,274,6.347,316,4.73,335,3.892,340,2.687,347,6.226,352,3.486,367,4.578,368,6.287,374,4.469,401,4.857,448,4.202,518,4.695,527,8.957,568,7.703,579,5.489,651,4.877,731,7.147,771,5.19,864,7.293,902,5.308,1063,9.349,1088,7.875,1344,7.332,1702,10.724,1748,5.952,1864,11.591,2028,9.256,2041,7.492,2080,7.875,2174,7.772,2562,11.457,2563,8.516,2572,8.667,2573,7.675,3394,9.799,3395,6.8,3396,8.667,3397,9.799,4994,10.15]],["keywords/903",[]],["title/904",[864,626.718]],["content/904",[2,1.203,11,3.151,13,1.58,15,1.778,16,2.658,18,1.596,31,1.846,64,3.313,65,3.247,66,4.765,69,5.493,92,5.156,97,3.185,112,3.87,113,2.722,115,6.855,127,3.556,161,2.777,168,4.502,180,3.46,185,4.037,198,3.263,222,2.312,224,1.314,226,4.145,228,1.983,230,2.419,241,2.967,251,2.131,258,2.308,263,2.193,279,3.803,281,1.646,282,2.199,289,9.517,297,3.018,325,3.421,335,4.436,338,7.606,340,1.59,348,3.809,352,2.062,367,4.385,374,2.644,385,2.342,396,2.967,432,3.2,439,6.122,445,2.187,458,3.155,461,3.809,467,2.896,518,2.777,556,6.347,568,2.728,574,5.257,575,3.495,594,5.156,627,3.707,641,3.126,646,7.768,651,8.371,658,2.862,693,4.377,731,2.955,804,2.943,808,4.927,823,3.155,849,4.324,873,3.366,921,3.057,1023,1.678,1126,2.456,1142,2.494,1189,7.315,1210,3.384,1215,5.257,1217,6.559,1220,7.502,1221,2.777,1222,3.837,1290,6.748,1313,4.54,1401,8.533,1628,4.598,1716,2.284,1988,3.044,2020,3.112,2041,5.015,2046,6.458,2094,3.098,2132,3.729,2466,4.338,2518,11.292,2561,10.669,2562,4.057,2563,5.7,2564,6.568,2565,9.635,2566,4.793,3668,8.008,3669,4.793,3670,4.946,4597,4.385,4664,4.867,4665,5.797,4670,5.797,4726,5.797,4995,6.005,4996,7.142,4997,6.613,4998,6.613,4999,9.104,5000,5.624]],["keywords/904",[]],["title/905",[401,460.294,546,451.561,2215,674.055]],["content/905",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,2041,7.072,3401,11.11]],["keywords/905",[]],["title/906",[16,250.43]],["content/906",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2041,7.965]],["keywords/906",[]],["title/907",[282,329.633]],["content/907",[2,0.875,16,1.215,18,5.258,19,3.035,20,2.797,22,0.817,25,2.386,30,4.21,52,3.409,65,3.822,67,4.005,73,2.908,79,2.269,108,4.145,109,4.907,110,3.941,112,2.814,113,5.386,168,4.026,173,3.155,222,1.334,226,4.138,228,2.335,230,2.847,231,3.357,258,1.678,270,2.63,282,2.504,295,4.389,335,4.981,340,1.871,399,1.717,400,3.567,401,8.022,426,7.268,429,5.22,448,2.926,469,3.101,505,4.275,551,3.409,557,5.789,568,6.198,569,4.36,575,4.784,622,4.36,647,3.133,651,5.318,654,4.36,677,3.749,682,3.344,689,3.7,693,4.242,714,3.281,748,4.516,749,4.17,771,6.976,808,3.583,812,3.767,851,3.081,895,2.521,908,3.02,976,3.614,1049,4.005,1091,4.621,1126,5.58,1309,5.28,1401,3.9,1535,7.754,1624,6.922,1716,4.21,1875,4.433,2041,7.039,2509,5.729,2562,7.479,2563,6.491,2847,5.642,3124,5.22,3403,5.053,3404,4.735,3405,4.735,3406,5.484,3407,6.157,3408,6.62,3409,6.62,3410,5.56,3411,4.776,3412,8.589,3413,6.62,3414,6.62,3415,6.035,3416,5.642,3417,6.62,3423,5.484,3663,12.241,3850,5.642,5001,5.924,5002,5.924,5003,6.293,5004,5.729,5005,6.823]],["keywords/907",[]],["title/908",[1023,407.123]],["content/908",[49,4.137,89,4.53,112,5.381,127,3.925,168,3.247,222,3.941,224,1.827,254,11.685,258,3.209,277,3.39,284,4.834,335,4.737,357,7.538,397,3.397,399,4.294,400,6.823,575,3.858,578,8.638,622,8.338,689,4.519,707,5.545,842,5.478,847,6.034,849,6.013,851,5.892,995,9.567,1126,5.528,2509,10.957,3275,6.765,3405,9.056,3425,11.136,3428,10.79,3430,7.975,3431,10.957,3432,7.703,5006,13.05,5007,13.05]],["keywords/908",[]],["title/909",[464,345.315,5008,911.566]],["content/909",[1,2.302,2,1.906,18,2.284,22,2.116,59,4.513,66,2.256,73,3.534,78,5.572,83,5.615,103,6.601,110,4.789,127,2.494,163,3.399,166,6.079,168,2.063,195,2.094,196,3.959,205,4.789,208,6.325,216,6.431,222,2.426,223,2.238,224,2.31,227,3.285,251,3.048,268,3.808,281,2.355,291,4.195,307,5.146,333,6.665,343,5.677,377,5.228,394,8.206,404,3.481,423,5.908,464,6.351,469,3.769,546,6.034,550,7.166,553,7.199,672,6.665,698,5.298,741,5.572,746,4.622,800,7.334,803,5.448,813,5.66,834,11.504,836,6.141,841,5.409,901,4.922,976,7.874,1014,4.262,1015,8.045,1042,4.111,1091,5.615,1110,5.615,1112,6.577,1121,4.867,1211,6.02,1326,5.754,1549,7.076,1570,7.833,1594,5.707,1798,6.495,1958,7.482,2041,8.818,2240,6.141,2252,7.334,2336,10.772,2337,7.647,2559,6.962,2569,7.647,3192,7.833,3396,7.334,5008,15.661,5009,8.292,5010,8.292,5011,10.258,5012,8.292,5013,8.292,5014,8.292,5015,8.292]],["keywords/909",[]],["title/910",[1815,1163.024]],["content/910",[11,4.707,22,1.679,102,9.349,110,8.098,127,4.216,168,3.488,218,10.605,238,9.57,246,9.648,279,5.681,316,6.767,335,3.893,464,5.516,546,6.818,547,8.898,616,4.405,677,7.702,738,12.172,746,7.814,998,10.382,1107,13.601,1154,10.981,1211,10.177,1260,12.172,1863,11.268,2216,11.424,2847,11.591,4112,13.601,5008,11.424,5011,11.591,5016,14.02,5017,14.02,5018,14.02,5019,14.02]],["keywords/910",[]],["title/911",[651,700.046]],["content/911",[1,3.674,13,3.607,15,4.058,22,2.292,47,7.376,66,5.206,161,6.341,168,5.226,175,8.892,222,3.741,263,5.006,270,5.1,291,4.474,321,7.811,335,3.674,343,6.056,374,6.035,404,5.555,411,8.633,432,7.305,449,11.292,458,7.202,495,6.015,651,10.085,813,9.033,906,7.305,921,6.978,1442,9.107,2565,10.784,2566,10.941]],["keywords/911",[]],["title/912",[173,366.94,224,111.085,791,576.139,2041,424.116]],["content/912",[2,0.947,3,1.47,6,4.199,15,4.247,22,1.863,25,2.582,31,2.351,41,6.943,65,6.364,69,2.539,70,6.865,79,2.456,92,4.057,106,3.312,107,7.309,161,3.538,168,1.837,170,11.361,173,8.814,174,5.168,181,5.864,185,4.887,192,6.943,195,2.993,208,3.764,222,3.282,224,2.35,226,2.05,277,1.918,291,3.841,307,3.063,329,3.538,330,3.072,335,3.155,340,4.265,347,3.279,372,2.808,394,6.272,399,1.859,404,3.1,411,4.817,415,4.887,423,5.261,425,11.022,440,3.525,481,5.585,490,2.539,516,5.082,518,3.538,536,5.784,551,3.689,557,4,568,3.475,573,5.648,616,2.32,634,6.017,661,4.783,709,6.199,790,7.634,791,5.36,840,6.663,860,4.924,897,6.447,906,4.076,921,3.894,925,4.157,957,5.468,976,3.911,1007,4.75,1013,8.424,1063,4.924,1090,5.857,1121,4.334,1259,7.98,1348,5.214,1364,5.857,1393,4.686,1406,7.649,1555,6.81,1591,11.022,1614,5,1745,6.105,1748,4.485,1839,6.975,1863,5.935,1928,10.252,1973,5.413,2041,7.4,2060,6.81,2271,6.531,2783,7.384,3395,5.124,4627,6.975,4687,6.975,4723,8.424,5020,9.098,5021,7.98,5022,9.098,5023,9.098,5024,9.098,5025,13.999,5026,9.098,5027,9.098,5028,9.098,5029,9.098,5030,9.098,5031,9.098]],["keywords/912",[]],["title/913",[2041,751.702]],["content/913",[]],["keywords/913",[]],["title/914",[272,585.453,370,512.565,616,291.743]],["content/914",[61,7.989,68,8.847,92,8.189,127,4.483,221,9.22,224,2.086,272,11.709,335,4.138,370,8.228,490,5.124,616,4.683,647,8.527,864,6.641,1074,9.164,1299,13.897,2041,9.924,4696,15.44,4698,15.44,4699,15.44,4700,14.46,4993,16.109,5032,17.005]],["keywords/914",[]],["title/915",[2042,532.102]],["content/915",[1,2.43,6,4.978,15,2.684,16,3.017,25,3.061,29,6.696,30,3.449,31,2.788,49,2.775,65,4.903,66,5.145,73,5.505,89,4.076,113,2.539,127,2.633,168,4.215,186,3.356,195,2.18,196,4.179,208,6.585,220,4.576,222,2.525,224,2.372,226,3.586,251,4.748,274,5.67,281,2.486,316,4.225,335,4.262,340,2.401,347,5.736,352,3.114,367,4.09,368,5.793,374,3.992,401,4.339,445,3.303,448,3.754,461,5.751,518,4.194,527,8.253,568,7.223,579,4.903,647,4.019,651,4.356,693,2.819,731,6.585,771,4.636,777,6.355,864,7.55,902,4.742,1063,8.613,1074,5.382,1088,7.035,1212,5.882,1217,7.164,1220,7.13,1344,6.55,1702,9.88,1748,5.317,1864,10.679,2028,8.269,2041,6.902,2080,7.035,2174,6.943,2562,10.743,2563,7.846,2572,7.742,2573,6.857,3394,8.754,3395,6.075,3396,7.742,3397,8.754,4994,9.067]],["keywords/915",[]],["title/916",[864,626.718]],["content/916",[18,4.534,19,4.677,61,7.083,127,4.952,335,4.572,647,9.062,752,7.948,1299,12.321,3053,12.595,4698,17.056,4699,17.056,4700,15.974,5032,18.785,5033,20.288]],["keywords/916",[]],["title/917",[647,426.353,1299,694.819,2041,496.196]],["content/917",[1,1.922,11,5.044,13,1.887,15,3.315,16,1.233,18,3.661,22,1.593,31,2.205,47,3.859,64,3.957,65,6.054,66,4.907,68,4.109,69,3.716,89,2.87,92,3.804,113,2.008,115,3.179,127,2.082,161,3.317,168,4.879,175,4.652,180,4.133,185,6.463,198,3.898,222,3.186,224,0.969,225,7.891,226,4.171,228,2.369,230,4.51,241,3.544,250,4.765,251,4.887,307,2.872,335,1.922,338,9.664,348,4.549,370,3.822,374,3.158,385,2.798,432,3.822,439,7.051,458,3.768,568,3.258,575,4.441,577,6.385,615,5.296,627,2.171,651,8.594,689,3.743,693,2.23,731,5.51,752,3.342,803,4.549,823,3.768,856,5.026,864,3.085,873,4.02,902,5.855,921,3.651,926,4.424,1063,7.207,1126,4.579,1142,2.978,1189,8.839,1313,5.423,1598,5.127,2041,5.776,2042,2.619,2074,6.385,2518,13.062,2560,6.924,2561,11.997,2562,4.846,2563,6.565,2564,9.305,2565,10.834,2566,5.724,3053,5.296,4588,8.466,4589,5.358,4999,10.486,5000,6.717,5011,10.993,5034,7.899,5035,7.483,5036,12.331,5037,11.681,5038,7.483]],["keywords/917",[]],["title/918",[1988,587.339,2047,954.559]],["content/918",[2,1.122,11,2.939,13,1.451,15,1.632,16,2.541,18,1.466,22,0.638,31,1.695,49,1.687,64,3.042,65,2.981,66,4.775,69,5.277,79,1.77,92,7.842,97,2.924,112,3.61,113,2.539,115,6.554,127,3.353,155,2.589,161,2.55,168,4.367,180,5.225,185,3.766,198,2.996,222,2.18,224,1.225,226,3.963,228,1.821,230,2.221,241,2.725,251,1.957,258,2.152,263,2.013,279,3.547,281,1.512,282,2.051,283,2.461,289,9.178,297,4.557,325,3.142,329,2.55,335,2.43,338,7.172,340,1.46,348,3.497,352,1.893,360,2.938,367,4.09,370,2.938,374,2.427,375,3.605,385,2.151,396,2.725,432,2.938,439,5.71,445,2.008,458,2.897,461,3.497,467,2.659,518,2.55,556,5.985,568,2.505,574,4.903,575,3.296,594,4.809,608,3.827,627,3.495,641,2.87,646,7.383,651,7.639,658,2.628,693,4.597,731,2.713,752,2.569,767,10.314,804,2.702,808,4.596,810,2.952,823,2.897,849,4.033,873,3.091,921,2.807,1023,1.541,1126,2.255,1142,2.29,1189,6.994,1196,3.758,1210,3.107,1215,4.903,1217,6.184,1220,7.13,1221,2.55,1222,3.523,1290,6.294,1313,4.169,1401,8.159,1628,10.245,1716,2.097,1988,2.795,2020,2.857,2041,4.678,2046,3.663,2047,11.022,2094,2.844,2132,3.424,2165,5.753,2466,3.983,2518,10.797,2561,10.06,2562,3.725,2563,5.317,2564,6.127,2565,9.085,2566,4.401,3578,4.803,3668,7.47,3669,4.401,3670,4.542,4597,4.026,4664,4.469,4665,5.323,4670,5.323,4706,6.073,4997,6.073,4998,6.073,4999,8.492,5000,5.164,5039,6.558,5040,6.558]],["keywords/918",[]],["title/919",[335,257.805,1151,633.815,2041,496.196]],["content/919",[1,1.53,2,1.155,11,5.238,13,1.502,15,1.689,16,2.931,18,1.517,22,1.368,31,2.867,47,3.071,65,5.044,66,4.245,68,3.27,69,3.096,89,1.463,92,3.027,97,3.027,112,3.713,113,1.598,115,5.243,127,3.434,161,2.64,168,4.422,175,3.702,185,7.083,198,5.069,222,2.578,224,0.771,226,3.661,228,1.885,230,2.299,250,3.791,258,1.355,263,2.084,270,2.123,279,3.649,281,1.565,282,1.291,293,3.791,297,2.868,325,3.252,335,1.53,338,8.483,352,1.96,367,4.207,370,3.041,374,2.512,385,2.226,396,2.82,423,3.925,426,1.979,432,3.041,439,5.874,445,2.078,458,2.998,461,3.62,518,2.64,568,5.373,574,5.044,575,3.376,594,3.027,607,3.027,615,4.214,616,1.731,627,4.134,641,2.971,644,2.71,646,5.147,647,2.53,651,8.548,658,2.72,689,3.118,693,4.682,731,4.59,803,3.62,804,2.797,823,2.998,849,4.149,873,3.199,926,3.52,1023,1.594,1063,3.674,1126,2.334,1142,2.37,1151,3.761,1175,4.08,1189,9.174,1210,3.216,1215,5.044,1217,6.334,1220,7.279,1221,4.314,1222,3.646,1290,3.961,1401,3.149,2020,2.957,2041,6.102,2074,5.081,2094,2.944,2461,4.873,2466,6.738,2518,13.445,2531,4.873,2560,5.509,2561,10.304,2562,3.856,2563,5.469,2564,7.992,2565,9.305,2566,4.555,3404,3.823,4588,7.053,4589,4.263,4597,4.167,4999,5.345,5035,5.954,5037,9.731,5041,14.069,5042,6.788,5043,6.788,5044,6.788,5045,6.788,5046,6.788,5047,6.788,5048,6.788,5049,6.788,5050,6.788]],["keywords/919",[]],["title/920",[401,460.294,546,451.561,2215,674.055]],["content/920",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,2041,7.072,3401,11.11]],["keywords/920",[]],["title/921",[16,250.43]],["content/921",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2041,7.965]],["keywords/921",[]],["title/922",[57,570.685,1401,453.632,1677,822.099,5011,656.187]],["content/922",[2,0.616,15,1.474,18,2.215,22,1.749,24,1.534,31,2.562,33,3.56,39,3.56,43,1.555,57,5.785,65,5.81,68,2.854,71,2.569,110,2.777,112,1.982,118,4.541,161,3.855,162,2.451,168,1.196,173,2.223,175,5.406,185,2.068,186,1.843,195,1.358,196,2.295,208,6.881,211,3.598,219,2.68,222,2.639,226,4.053,230,2.006,237,2.569,251,4.458,262,8.646,276,3.975,282,1.127,283,2.223,324,4.858,333,6.466,335,3.748,340,1.319,347,3.573,369,7.856,377,5.072,381,3.524,383,3.256,386,6.301,396,5.31,401,2.383,404,2.018,410,3.56,414,3.975,415,8.934,416,3.072,420,4.338,445,3.913,449,4.102,464,3.744,490,1.653,492,4.252,509,3.49,515,3.031,518,4.97,520,3.524,527,5.14,550,4.647,551,2.402,568,9.214,578,3.182,634,3.918,657,4.174,678,3.637,683,4.541,685,3.975,692,3.159,693,2.591,697,5.04,709,4.036,750,4.434,771,6.424,772,4.808,774,4.174,782,4.808,833,3.282,849,2.215,856,5.84,875,1.653,876,3.813,906,5.726,925,2.706,964,5.072,1019,4.102,1028,4.338,1033,3.72,1081,7.419,1110,5.448,1140,4.808,1196,5.68,1221,4.97,1260,4.174,1298,8.453,1326,3.336,1335,5.485,1344,3.598,1396,3.813,1455,7.681,1488,3.182,1550,4.252,1561,3.766,1592,4.541,1654,4.541,1707,3.159,1748,4.887,1770,4.338,1793,4.102,1842,4.252,1879,4.174,1889,8.694,1916,3.051,1917,4.036,2094,6.481,2194,4.252,2271,9.175,2487,4.174,2562,13.316,2608,3.395,2846,3.637,3138,7.599,3392,5.196,3395,3.336,3443,5.196,3842,5.485,3871,6.651,4209,4.98,4292,4.338,4873,7.259,5011,14.811,5051,5.924,5052,9.912,5053,5.924,5054,5.924,5055,16.631,5056,9.912,5057,9.912,5058,5.924,5059,5.924,5060,5.924,5061,12.781,5062,5.924,5063,5.924,5064,5.924,5065,5.924,5066,5.924,5067,5.924]],["keywords/922",[]],["title/923",[282,329.633]],["content/923",[2,0.875,16,1.215,18,5.258,19,3.035,20,2.797,22,0.817,25,2.386,30,4.21,52,3.409,65,3.822,67,4.005,73,2.908,79,2.269,108,4.145,109,4.907,110,3.941,112,2.814,113,5.386,168,4.026,173,3.155,222,1.334,226,4.138,228,2.335,230,2.847,231,3.357,258,1.678,270,2.63,282,2.504,295,4.389,335,4.981,340,1.871,399,1.717,400,3.567,401,8.022,426,7.268,429,5.22,448,2.926,469,3.101,505,4.275,551,3.409,557,5.789,568,6.198,569,4.36,575,4.784,622,4.36,647,3.133,651,5.318,654,4.36,677,3.749,682,3.344,689,3.7,693,4.242,714,3.281,748,4.516,749,4.17,771,6.976,808,3.583,812,3.767,851,3.081,895,2.521,908,3.02,976,3.614,1049,4.005,1091,4.621,1126,5.58,1309,5.28,1401,3.9,1535,7.754,1624,6.922,1716,4.21,1875,4.433,2041,7.039,2509,5.729,2562,7.479,2563,6.491,2847,5.642,3124,5.22,3403,5.053,3404,4.735,3405,4.735,3406,5.484,3407,6.157,3408,6.62,3409,6.62,3410,5.56,3411,4.776,3412,8.589,3413,6.62,3414,6.62,3415,6.035,3416,5.642,3417,6.62,3423,5.484,3663,12.241,3850,5.642,5001,5.924,5002,5.924,5003,6.293,5004,5.729,5005,6.823]],["keywords/923",[]],["title/924",[1023,407.123]],["content/924",[49,4.137,89,4.53,112,5.381,127,3.925,168,3.247,222,3.941,224,1.827,254,11.685,258,3.209,277,3.39,284,4.834,335,4.737,357,7.538,397,3.397,399,4.294,400,6.823,575,3.858,578,8.638,622,8.338,689,4.519,707,5.545,842,5.478,847,6.034,849,6.013,851,5.892,995,9.567,1126,5.528,2509,10.957,3275,6.765,3405,9.056,3425,11.136,3428,10.79,3430,7.975,3431,10.957,3432,7.703,5006,13.05,5007,13.05]],["keywords/924",[]],["title/925",[464,345.315,5008,911.566]],["content/925",[1,2.302,2,1.906,18,2.284,22,2.116,59,4.513,66,2.256,73,3.534,78,5.572,83,5.615,103,6.601,110,4.789,127,2.494,163,3.399,166,6.079,168,2.063,195,2.094,196,3.959,205,4.789,208,6.325,216,6.431,222,2.426,223,2.238,224,2.31,227,3.285,251,3.048,268,3.808,281,2.355,291,4.195,307,5.146,333,6.665,343,5.677,377,5.228,394,8.206,404,3.481,423,5.908,464,6.351,469,3.769,546,6.034,550,7.166,553,7.199,672,6.665,698,5.298,741,5.572,746,4.622,800,7.334,803,5.448,813,5.66,834,11.504,836,6.141,841,5.409,901,4.922,976,7.874,1014,4.262,1015,8.045,1042,4.111,1091,5.615,1110,5.615,1112,6.577,1121,4.867,1211,6.02,1326,5.754,1549,7.076,1570,7.833,1594,5.707,1798,6.495,1958,7.482,2041,8.818,2240,6.141,2252,7.334,2336,10.772,2337,7.647,2559,6.962,2569,7.647,3192,7.833,3396,7.334,5008,15.661,5009,8.292,5010,8.292,5011,10.258,5012,8.292,5013,8.292,5014,8.292,5015,8.292]],["keywords/925",[]],["title/926",[1815,1163.024]],["content/926",[11,4.707,22,1.679,102,9.349,110,8.098,127,4.216,168,3.488,218,10.605,238,9.57,246,9.648,279,5.681,316,6.767,335,3.893,464,5.516,546,6.818,547,8.898,616,4.405,677,7.702,738,12.172,746,7.814,998,10.382,1107,13.601,1154,10.981,1211,10.177,1260,12.172,1863,11.268,2216,11.424,2847,11.591,4112,13.601,5008,11.424,5011,11.591,5016,14.02,5017,14.02,5018,14.02,5019,14.02]],["keywords/926",[]],["title/927",[651,700.046]],["content/927",[1,3.674,13,3.607,15,4.058,22,2.292,47,7.376,66,5.206,161,6.341,168,5.226,175,8.892,222,3.741,263,5.006,270,5.1,291,4.474,321,7.811,335,3.674,343,6.056,374,6.035,404,5.555,411,8.633,432,7.305,449,11.292,458,7.202,495,6.015,651,10.085,813,9.033,906,7.305,921,6.978,1442,9.107,2565,10.784,2566,10.941]],["keywords/927",[]],["title/928",[61,341.406,172,364.419,1150,340.348,2041,424.116]],["content/928",[]],["keywords/928",[]],["title/929",[272,585.453,370,512.565,616,291.743]],["content/929",[68,10.606,224,2.501,370,9.864,616,5.614,2041,9.549,4993,19.311]],["keywords/929",[]],["title/930",[2042,532.102]],["content/930",[6,5.572,15,3.005,16,1.744,25,3.426,29,7.495,30,3.86,31,3.12,49,3.106,65,5.489,66,5.35,73,5.975,89,3.723,113,2.842,127,2.947,168,4.445,186,3.756,195,1.654,196,4.678,208,7.147,220,5.123,222,1.916,224,2.291,226,2.721,251,5.153,274,6.347,316,4.73,335,3.892,340,2.687,347,6.226,352,3.486,367,4.578,368,6.287,374,4.469,401,4.857,448,4.202,518,4.695,527,8.957,568,7.703,579,5.489,651,4.877,731,7.147,771,5.19,864,7.293,902,5.308,1063,9.349,1088,7.875,1344,7.332,1702,10.724,1748,5.952,1864,11.591,2028,9.256,2041,7.492,2080,7.875,2174,7.772,2562,11.457,2563,8.516,2572,8.667,2573,7.675,3394,9.799,3395,6.8,3396,8.667,3397,9.799,4994,10.15]],["keywords/930",[]],["title/931",[864,626.718]],["content/931",[2,1.283,11,3.359,13,1.712,15,1.926,16,2.767,18,1.729,22,0.752,31,1.999,61,5.367,64,3.589,65,3.517,66,4.228,69,2.159,92,5.497,97,3.45,112,5.868,113,1.821,115,5.728,127,3.009,161,3.008,168,4.625,172,2.883,179,4.039,185,4.304,198,5.633,222,2.439,224,1.401,226,3.464,228,2.148,230,2.62,241,3.214,246,4.321,251,2.308,258,1.544,263,2.375,279,4.055,281,1.783,282,1.471,293,4.321,297,3.268,325,3.706,335,2.778,338,8.025,352,2.234,359,5.3,367,5.829,374,2.863,385,4.043,396,3.214,432,3.466,439,6.528,445,2.369,458,3.417,461,4.125,568,4.708,574,5.605,575,3.688,594,3.45,626,3.589,627,3.137,641,3.386,646,5.719,647,2.883,651,8.977,658,4.941,682,3.077,693,4.583,731,3.201,804,3.188,823,3.417,849,4.61,873,3.646,902,3.401,912,8.85,921,3.311,1023,1.817,1042,3.113,1126,2.66,1142,2.701,1150,2.693,1163,4.357,1189,6.973,1210,3.666,1215,8.706,1217,6.92,1220,7.856,1221,3.008,1222,4.156,1313,4.918,1765,4.698,1808,5.046,1831,5.666,2020,3.37,2041,5.347,2094,3.355,2132,4.039,2466,7.488,2518,10.764,2531,5.553,2561,11.257,2562,4.395,2563,6.078,2564,7.004,2565,10.166,2566,5.191,3404,4.357,4597,4.749,4999,9.708,5000,6.091,5068,7.736,5069,7.736,5070,7.736,5071,7.736,5072,7.736,5073,7.736]],["keywords/931",[]],["title/932",[401,460.294,546,451.561,2215,674.055]],["content/932",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,2041,7.072,3401,11.11]],["keywords/932",[]],["title/933",[16,250.43]],["content/933",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2041,7.965]],["keywords/933",[]],["title/934",[282,329.633]],["content/934",[18,5.157,19,3.327,20,3.15,22,0.921,30,4.615,52,3.839,65,4.304,67,4.511,73,3.275,108,4.668,109,5.526,110,4.439,112,3.169,113,5.6,168,4.252,173,3.553,222,1.502,226,3.252,230,3.207,258,1.89,282,2.745,295,4.943,335,5.2,340,2.108,399,1.934,400,4.017,401,8.472,426,7.475,448,3.295,469,3.493,505,4.814,551,3.839,568,6.679,575,5.052,622,4.91,647,3.529,651,5.83,654,4.91,682,3.766,689,4.056,693,3.773,714,3.696,748,5.086,771,7.518,808,4.035,851,3.469,895,2.839,908,3.402,976,4.07,1049,4.511,1126,6.013,1401,4.392,1535,5.613,1624,7.588,1716,4.615,1875,4.859,2041,6.26,2509,6.452,2562,8.199,2563,7.115,3124,5.878,3403,5.691,3404,5.333,3405,5.333,3406,6.176,3407,6.934,3408,7.455,3409,7.455,3410,6.262,3411,5.379,3412,9.415,3413,7.455,3414,7.455,3415,6.797,3416,6.354,3417,7.455,3423,6.176,3663,8.861,3850,6.354,5001,6.672,5002,6.672,5003,7.087]],["keywords/934",[]],["title/935",[1023,407.123]],["content/935",[49,4.137,89,4.53,112,5.381,127,3.925,168,3.247,222,3.941,224,1.827,254,11.685,258,3.209,277,3.39,284,4.834,335,4.737,357,7.538,397,3.397,399,4.294,400,6.823,575,3.858,578,8.638,622,8.338,689,4.519,707,5.545,842,5.478,847,6.034,849,6.013,851,5.892,995,9.567,1126,5.528,2509,10.957,3275,6.765,3405,9.056,3425,11.136,3428,10.79,3430,7.975,3431,10.957,3432,7.703,5006,13.05,5007,13.05]],["keywords/935",[]],["title/936",[464,345.315,5008,911.566]],["content/936",[1,2.302,2,1.906,18,2.284,22,2.116,59,4.513,66,2.256,73,3.534,78,5.572,83,5.615,103,6.601,110,4.789,127,2.494,163,3.399,166,6.079,168,2.063,195,2.094,196,3.959,205,4.789,208,6.325,216,6.431,222,2.426,223,2.238,224,2.31,227,3.285,251,3.048,268,3.808,281,2.355,291,4.195,307,5.146,333,6.665,343,5.677,377,5.228,394,8.206,404,3.481,423,5.908,464,6.351,469,3.769,546,6.034,550,7.166,553,7.199,672,6.665,698,5.298,741,5.572,746,4.622,800,7.334,803,5.448,813,5.66,834,11.504,836,6.141,841,5.409,901,4.922,976,7.874,1014,4.262,1015,8.045,1042,4.111,1091,5.615,1110,5.615,1112,6.577,1121,4.867,1211,6.02,1326,5.754,1549,7.076,1570,7.833,1594,5.707,1798,6.495,1958,7.482,2041,8.818,2240,6.141,2252,7.334,2336,10.772,2337,7.647,2559,6.962,2569,7.647,3192,7.833,3396,7.334,5008,15.661,5009,8.292,5010,8.292,5011,10.258,5012,8.292,5013,8.292,5014,8.292,5015,8.292]],["keywords/936",[]],["title/937",[1815,1163.024]],["content/937",[11,4.707,22,1.679,102,9.349,110,8.098,127,4.216,168,3.488,218,10.605,238,9.57,246,9.648,279,5.681,316,6.767,335,3.893,464,5.516,546,6.818,547,8.898,616,4.405,677,7.702,738,12.172,746,7.814,998,10.382,1107,13.601,1154,10.981,1211,10.177,1260,12.172,1863,11.268,2216,11.424,2847,11.591,4112,13.601,5008,11.424,5011,11.591,5016,14.02,5017,14.02,5018,14.02,5019,14.02]],["keywords/937",[]],["title/938",[651,700.046]],["content/938",[1,3.674,13,3.607,15,4.058,22,2.292,47,7.376,66,5.206,161,6.341,168,5.226,175,8.892,222,3.741,263,5.006,270,5.1,291,4.474,321,7.811,335,3.674,343,6.056,374,6.035,404,5.555,411,8.633,432,7.305,449,11.292,458,7.202,495,6.015,651,10.085,813,9.033,906,7.305,921,6.978,1442,9.107,2565,10.784,2566,10.941]],["keywords/938",[]],["title/939",[2041,597.791,5004,939.177]],["content/939",[]],["keywords/939",[]],["title/940",[2042,532.102]],["content/940",[2,2.208,279,6.977,330,7.162,526,7.086,1488,11.395,1521,17.216,4027,18.606,5004,14.454,5074,21.213]],["keywords/940",[]],["title/941",[864,626.718]],["content/941",[]],["keywords/941",[]],["title/942",[65,388.167,367,323.775,568,326.078,925,390.102,5004,581.805]],["content/942",[16,2.054,65,12.081,127,3.469,172,5.297,173,5.333,185,6.759,226,3.203,251,5.775,335,3.203,367,9.676,386,7.007,415,7.635,416,7.37,447,9.365,518,5.527,568,9.444,598,8.927,676,6.966,693,3.715,749,7.049,808,6.057,856,8.374,1022,7.874,1401,6.593,1443,6.307,1552,9.15,2216,9.4,2229,9.537,5004,17.387,5038,20.733,5075,11.949,5076,14.213,5077,14.213,5078,14.213,5079,14.213]],["keywords/942",[]],["title/943",[66,188.518,415,458.659,568,326.078,902,375.411,929,436.937]],["content/943",[6,4.821,15,6.344,18,2.335,19,2.408,22,1.016,31,2.7,66,5.628,69,2.915,79,4.195,95,7.819,113,2.459,127,3.794,195,1.431,241,4.34,281,2.408,303,6.652,415,8.349,447,4.139,448,3.636,490,2.915,568,7.088,641,8.123,652,6.839,879,7.819,897,5.873,902,11.744,908,5.584,911,15.604,921,4.471,1026,10.883,1044,5.934,1059,8.225,1126,3.592,1189,4.155,1662,9.163,1765,6.344,2132,8.115,2545,7.235,2564,8.829,2568,6.561,3249,7.361,3855,7.651,4021,8.782,4025,9.673,4320,9.163,4952,9.673,5004,16.7,5080,10.447,5081,10.447,5082,10.447,5083,10.447,5084,10.447,5085,10.447,5086,10.447,5087,10.447,5088,10.447,5089,10.447,5090,10.447,5091,10.447,5092,14.391,5093,10.447,5094,10.447,5095,10.447,5096,10.447]],["keywords/943",[]],["title/944",[11,206.463,415,407.032,627,192.796,902,333.154,930,404.062,1189,301.353]],["content/944",[1,3.526,11,7.149,31,4.044,49,4.026,68,7.538,113,3.683,162,6.474,168,5.297,185,8.068,338,8.169,385,6.771,411,8.284,509,9.219,518,6.085,568,7.885,627,3.981,641,6.848,651,9.925,712,8.6,902,6.88,1189,10.159,1204,8.967,1916,8.06,2564,11.729,5097,23.109]],["keywords/944",[]],["title/945",[66,252.595,651,462.098,1616,674.055]],["content/945",[2,1.759,15,2.914,18,3.777,25,3.323,43,3.074,59,5.172,64,5.432,66,4.793,89,3.641,107,6.113,113,4.667,127,2.858,130,5.271,168,4.842,195,1.604,198,5.349,208,4.844,222,1.858,224,1.33,226,2.638,241,4.864,251,5.041,263,3.595,279,5.557,281,2.699,284,3.52,303,5.011,330,3.953,338,6.113,340,2.606,368,6.15,380,7.037,385,3.84,386,5.772,389,6.199,415,10.65,435,8.591,445,3.585,458,5.172,467,4.748,485,5.101,568,8.79,573,7.269,575,2.809,651,9.297,661,8.883,760,9.219,921,5.011,1204,6.71,1313,7.443,1837,5.842,2562,13.075,2565,11.175,2566,7.857,3787,8.764,5000,9.219,5004,7.978,5098,11.709,5099,11.709,5100,11.709,5101,11.709,5102,11.709,5103,11.709,5104,11.709,5105,9.503,5106,11.709]],["keywords/945",[]],["title/946",[115,426.353,3669,767.708,4664,779.562]],["content/946",[2,2.249,16,3.122,22,1.631,79,4.528,112,7.231,115,9.406,207,7.18,230,5.681,279,7.861,281,3.867,303,7.18,325,8.036,326,9.981,340,4.809,526,4.761,550,7.864,693,4.385,1214,10.943,1215,12.156,2122,8.27,3669,11.257,4664,11.431,5004,14.722,5107,16.776]],["keywords/946",[]],["title/947",[2,78.859,66,167.298,224,86.077,277,159.751,279,249.209,415,407.032]],["content/947",[2,1.596,3,1.659,11,2.796,25,2.912,30,3.281,49,3.946,69,4.279,89,2.212,112,3.434,113,5.386,168,3.097,180,4.972,185,5.355,222,2.434,224,2.086,227,3.3,228,5.658,251,3.062,261,3.811,277,3.872,279,5.044,335,3.456,345,4.451,352,2.963,354,2.532,357,7.19,359,9.836,385,3.365,401,4.129,413,4.736,426,5.942,434,5.152,436,7.681,447,4.066,448,5.338,464,3.843,465,3.404,495,3.786,533,7.007,568,3.919,633,6.886,644,4.097,689,2.884,693,6.199,810,4.62,812,4.598,823,4.533,875,2.863,982,6.445,1021,4.836,1023,2.411,1113,5.121,1142,5.355,1267,4.354,1708,5,1765,6.232,1792,12.448,1830,10.622,2041,4.451,2123,9.416,2229,6.886,2233,8.627,2240,6.168,2261,9.001,2265,7.516,4589,6.445,4738,8.329,5004,13.884,5108,10.262,5109,10.262,5110,15.337,5111,15.337,5112,10.262,5113,10.262,5114,10.262,5115,10.262,5116,10.262,5117,10.262,5118,10.262,5119,10.262]],["keywords/947",[]],["title/948",[401,460.294,546,451.561,2215,674.055]],["content/948",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,2041,7.072,3401,11.11]],["keywords/948",[]],["title/949",[16,250.43]],["content/949",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2041,7.965]],["keywords/949",[]],["title/950",[282,329.633]],["content/950",[18,5.157,19,3.327,20,3.15,22,0.921,30,4.615,52,3.839,65,4.304,67,4.511,73,3.275,108,4.668,109,5.526,110,4.439,112,3.169,113,5.6,168,4.252,173,3.553,222,1.502,226,3.252,230,3.207,258,1.89,282,2.745,295,4.943,335,5.2,340,2.108,399,1.934,400,4.017,401,8.472,426,7.475,448,3.295,469,3.493,505,4.814,551,3.839,568,6.679,575,5.052,622,4.91,647,3.529,651,5.83,654,4.91,682,3.766,689,4.056,693,3.773,714,3.696,748,5.086,771,7.518,808,4.035,851,3.469,895,2.839,908,3.402,976,4.07,1049,4.511,1126,6.013,1401,4.392,1535,5.613,1624,7.588,1716,4.615,1875,4.859,2041,6.26,2509,6.452,2562,8.199,2563,7.115,3124,5.878,3403,5.691,3404,5.333,3405,5.333,3406,6.176,3407,6.934,3408,7.455,3409,7.455,3410,6.262,3411,5.379,3412,9.415,3413,7.455,3414,7.455,3415,6.797,3416,6.354,3417,7.455,3423,6.176,3663,8.861,3850,6.354,5001,6.672,5002,6.672,5003,7.087]],["keywords/950",[]],["title/951",[1023,407.123]],["content/951",[49,4.137,89,4.53,112,5.381,127,3.925,168,3.247,222,3.941,224,1.827,254,11.685,258,3.209,277,3.39,284,4.834,335,4.737,357,7.538,397,3.397,399,4.294,400,6.823,575,3.858,578,8.638,622,8.338,689,4.519,707,5.545,842,5.478,847,6.034,849,6.013,851,5.892,995,9.567,1126,5.528,2509,10.957,3275,6.765,3405,9.056,3425,11.136,3428,10.79,3430,7.975,3431,10.957,3432,7.703,5006,13.05,5007,13.05]],["keywords/951",[]],["title/952",[464,345.315,5008,911.566]],["content/952",[1,2.302,2,1.906,18,2.284,22,2.116,59,4.513,66,2.256,73,3.534,78,5.572,83,5.615,103,6.601,110,4.789,127,2.494,163,3.399,166,6.079,168,2.063,195,2.094,196,3.959,205,4.789,208,6.325,216,6.431,222,2.426,223,2.238,224,2.31,227,3.285,251,3.048,268,3.808,281,2.355,291,4.195,307,5.146,333,6.665,343,5.677,377,5.228,394,8.206,404,3.481,423,5.908,464,6.351,469,3.769,546,6.034,550,7.166,553,7.199,672,6.665,698,5.298,741,5.572,746,4.622,800,7.334,803,5.448,813,5.66,834,11.504,836,6.141,841,5.409,901,4.922,976,7.874,1014,4.262,1015,8.045,1042,4.111,1091,5.615,1110,5.615,1112,6.577,1121,4.867,1211,6.02,1326,5.754,1549,7.076,1570,7.833,1594,5.707,1798,6.495,1958,7.482,2041,8.818,2240,6.141,2252,7.334,2336,10.772,2337,7.647,2559,6.962,2569,7.647,3192,7.833,3396,7.334,5008,15.661,5009,8.292,5010,8.292,5011,10.258,5012,8.292,5013,8.292,5014,8.292,5015,8.292]],["keywords/952",[]],["title/953",[1815,1163.024]],["content/953",[11,4.707,22,1.679,102,9.349,110,8.098,127,4.216,168,3.488,218,10.605,238,9.57,246,9.648,279,5.681,316,6.767,335,3.893,464,5.516,546,6.818,547,8.898,616,4.405,677,7.702,738,12.172,746,7.814,998,10.382,1107,13.601,1154,10.981,1211,10.177,1260,12.172,1863,11.268,2216,11.424,2847,11.591,4112,13.601,5008,11.424,5011,11.591,5016,14.02,5017,14.02,5018,14.02,5019,14.02]],["keywords/953",[]],["title/954",[651,700.046]],["content/954",[1,3.674,13,3.607,15,4.058,22,2.292,47,7.376,66,5.206,161,6.341,168,5.226,175,8.892,222,3.741,263,5.006,270,5.1,291,4.474,321,7.811,335,3.674,343,6.056,374,6.035,404,5.555,411,8.633,432,7.305,449,11.292,458,7.202,495,6.015,651,10.085,813,9.033,906,7.305,921,6.978,1442,9.107,2565,10.784,2566,10.941]],["keywords/954",[]],["title/955",[3372,1364.669]],["content/955",[]],["keywords/955",[]],["title/956",[195,156.745,397,241.681,616,291.743]],["content/956",[2,2.075,3,3.223,7,8.054,8,8.702,31,5.153,49,5.13,127,4.867,195,2.732,397,5.084,399,4.073,469,7.355,616,5.085,652,6.634,3372,15.7,5120,19.94]],["keywords/956",[]],["title/957",[2042,532.102]],["content/957",[627,5.71,895,6.729,896,8.363,3372,17.669]],["keywords/957",[]],["title/958",[16,250.43]],["content/958",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3372,14.46]],["keywords/958",[]],["title/959",[282,329.633]],["content/959",[3,2.447,18,5.421,19,4.656,36,5.823,195,2.767,222,2.402,258,3.021,282,3.842,330,5.111,397,3.198,399,3.092,422,4.66,426,7.072,427,5.492,428,8.414,437,7.747,447,5.998,464,3.793,568,7.714,627,5.139,652,5.037,689,4.254,693,3.957,714,5.908,851,5.547,896,7.527,908,5.438,1535,5.887,1716,6.458,1875,6.8,3262,6.595,3263,7.173,3372,15.904,3492,9.508,3493,9.398,3943,12.726,3951,11.605]],["keywords/959",[]],["title/960",[1023,407.123]],["content/960",[15,4.72,112,6.347,123,8.797,222,3.009,224,2.154,258,3.784,397,4.006,399,3.874,689,5.33,707,6.54,838,8.152,842,6.461,847,7.116,851,6.949,3262,8.262,3273,11.911,3275,7.978,3277,10.263,3279,10.681,3373,17.56,3641,10.506,3766,10.966,5121,18.964]],["keywords/960",[]],["title/961",[5122,1457.086]],["content/961",[]],["keywords/961",[]],["title/962",[272,585.453,370,512.565,616,291.743]],["content/962",[92,9.91,224,2.525,616,5.668,2041,9.64,5122,18.686]],["keywords/962",[]],["title/963",[2042,532.102]],["content/963",[1,2.272,6,4.654,15,2.51,16,2.919,25,2.862,29,6.261,30,3.224,31,2.606,49,2.595,66,5.019,73,5.236,89,3.916,112,3.375,113,2.374,127,2.461,168,4.078,186,3.137,195,2.074,196,3.907,208,6.263,220,4.279,222,2.402,224,2.295,226,3.411,251,4.516,274,5.301,281,3.49,316,3.951,335,4.552,340,2.245,347,5.456,352,2.911,367,3.824,368,5.51,374,3.732,401,4.057,445,3.088,448,3.51,461,5.377,518,3.921,527,7.85,568,6.94,574,6.882,579,4.584,647,3.758,651,4.073,693,5.28,731,6.263,771,4.335,777,5.941,864,7.304,902,4.434,1063,8.193,1074,5.032,1088,6.578,1132,7.385,1212,5.499,1217,6.815,1220,6.782,1344,6.124,1702,9.398,1748,4.971,1864,10.158,2028,7.731,2041,6.565,2080,6.578,2174,6.492,2562,10.323,2563,7.463,2572,7.239,2573,6.411,3394,8.184,3395,5.68,3396,7.239,3397,8.184,4620,7.94,4994,8.478,5122,15.278,5123,7.94,5124,9.337,5125,10.084]],["keywords/963",[]],["title/964",[335,257.805,574,520.107,693,299.043]],["content/964",[8,4.929,16,2.718,18,3.046,25,3.868,31,3.523,112,6.295,162,5.639,198,6.227,206,5.639,207,5.833,219,6.166,222,2.163,224,2.137,226,4.239,244,6.259,326,8.109,335,5.233,340,3.034,385,4.47,447,5.4,512,7.376,568,5.205,574,8.551,575,3.27,616,3.476,693,6.586,790,7.433,804,5.616,873,6.423,926,7.068,982,8.561,1024,8.774,1364,13.866,1549,9.439,1765,8.278,1916,7.021,2229,12.622,2248,7.742,2568,11.814,4738,11.062,5122,18.108,5123,14.811,5124,21.504,5126,13.63,5127,13.63,5128,13.63,5129,13.63,5130,13.63]],["keywords/964",[]],["title/965",[864,626.718]],["content/965",[1,1.922,11,5.044,13,1.887,15,3.315,16,1.233,18,3.661,22,1.593,31,2.205,47,3.859,64,3.957,65,6.054,66,4.907,68,4.109,69,3.716,89,2.87,92,3.804,113,2.008,115,3.179,127,2.082,161,3.317,168,4.879,175,4.652,180,4.133,185,6.463,198,3.898,222,3.186,224,0.969,225,7.891,226,4.171,228,2.369,230,4.51,241,3.544,250,4.765,251,4.887,307,2.872,335,1.922,338,9.664,348,4.549,370,3.822,374,3.158,385,2.798,432,3.822,439,7.051,458,3.768,568,3.258,575,4.441,577,6.385,615,5.296,627,2.171,651,8.594,689,3.743,693,2.23,731,5.51,752,3.342,803,4.549,823,3.768,856,5.026,864,3.085,873,4.02,902,5.855,921,3.651,926,4.424,1063,7.207,1126,4.579,1142,2.978,1189,8.839,1313,5.423,1598,5.127,2041,5.776,2042,2.619,2074,6.385,2518,13.062,2560,6.924,2561,11.997,2562,4.846,2563,6.565,2564,9.305,2565,10.834,2566,5.724,3053,5.296,4588,8.466,4589,5.358,4999,10.486,5000,6.717,5011,10.993,5034,7.899,5035,7.483,5036,12.331,5037,11.681,5038,7.483]],["keywords/965",[]],["title/966",[401,460.294,546,451.561,2215,674.055]],["content/966",[2,1.697,31,4.214,47,7.376,87,6.774,88,9.8,168,5.041,208,6.746,214,7.768,222,3.962,224,1.852,228,4.528,242,11.11,251,4.864,281,3.759,282,3.101,296,6.412,316,6.388,401,9.486,404,7.227,505,8.29,511,7.811,538,10.365,540,7.899,644,6.51,704,6.436,829,7.34,847,6.118,873,7.684,897,6.161,1629,11.11,1684,12.498,2041,7.072,3401,11.11]],["keywords/966",[]],["title/967",[16,250.43]],["content/967",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2041,7.965]],["keywords/967",[]],["title/968",[282,329.633]],["content/968",[2,0.875,16,1.215,18,5.258,19,3.035,20,2.797,22,0.817,25,2.386,30,4.21,52,3.409,65,3.822,67,4.005,73,2.908,79,2.269,108,4.145,109,4.907,110,3.941,112,2.814,113,5.386,168,4.026,173,3.155,222,1.334,226,4.138,228,2.335,230,2.847,231,3.357,258,1.678,270,2.63,282,2.504,295,4.389,335,4.981,340,1.871,399,1.717,400,3.567,401,8.022,426,7.268,429,5.22,448,2.926,469,3.101,505,4.275,551,3.409,557,5.789,568,6.198,569,4.36,575,4.784,622,4.36,647,3.133,651,5.318,654,4.36,677,3.749,682,3.344,689,3.7,693,4.242,714,3.281,748,4.516,749,4.17,771,6.976,808,3.583,812,3.767,851,3.081,895,2.521,908,3.02,976,3.614,1049,4.005,1091,4.621,1126,5.58,1309,5.28,1401,3.9,1535,7.754,1624,6.922,1716,4.21,1875,4.433,2041,7.039,2509,5.729,2562,7.479,2563,6.491,2847,5.642,3124,5.22,3403,5.053,3404,4.735,3405,4.735,3406,5.484,3407,6.157,3408,6.62,3409,6.62,3410,5.56,3411,4.776,3412,8.589,3413,6.62,3414,6.62,3415,6.035,3416,5.642,3417,6.62,3423,5.484,3663,12.241,3850,5.642,5001,5.924,5002,5.924,5003,6.293,5004,5.729,5005,6.823]],["keywords/968",[]],["title/969",[1023,407.123]],["content/969",[49,4.137,89,4.53,112,5.381,127,3.925,168,3.247,222,3.941,224,1.827,254,11.685,258,3.209,277,3.39,284,4.834,335,4.737,357,7.538,397,3.397,399,4.294,400,6.823,575,3.858,578,8.638,622,8.338,689,4.519,707,5.545,842,5.478,847,6.034,849,6.013,851,5.892,995,9.567,1126,5.528,2509,10.957,3275,6.765,3405,9.056,3425,11.136,3428,10.79,3430,7.975,3431,10.957,3432,7.703,5006,13.05,5007,13.05]],["keywords/969",[]],["title/970",[464,345.315,5008,911.566]],["content/970",[1,2.302,2,1.906,18,2.284,22,2.116,59,4.513,66,2.256,73,3.534,78,5.572,83,5.615,103,6.601,110,4.789,127,2.494,163,3.399,166,6.079,168,2.063,195,2.094,196,3.959,205,4.789,208,6.325,216,6.431,222,2.426,223,2.238,224,2.31,227,3.285,251,3.048,268,3.808,281,2.355,291,4.195,307,5.146,333,6.665,343,5.677,377,5.228,394,8.206,404,3.481,423,5.908,464,6.351,469,3.769,546,6.034,550,7.166,553,7.199,672,6.665,698,5.298,741,5.572,746,4.622,800,7.334,803,5.448,813,5.66,834,11.504,836,6.141,841,5.409,901,4.922,976,7.874,1014,4.262,1015,8.045,1042,4.111,1091,5.615,1110,5.615,1112,6.577,1121,4.867,1211,6.02,1326,5.754,1549,7.076,1570,7.833,1594,5.707,1798,6.495,1958,7.482,2041,8.818,2240,6.141,2252,7.334,2336,10.772,2337,7.647,2559,6.962,2569,7.647,3192,7.833,3396,7.334,5008,15.661,5009,8.292,5010,8.292,5011,10.258,5012,8.292,5013,8.292,5014,8.292,5015,8.292]],["keywords/970",[]],["title/971",[1815,1163.024]],["content/971",[11,4.707,22,1.679,102,9.349,110,8.098,127,4.216,168,3.488,218,10.605,238,9.57,246,9.648,279,5.681,316,6.767,335,3.893,464,5.516,546,6.818,547,8.898,616,4.405,677,7.702,738,12.172,746,7.814,998,10.382,1107,13.601,1154,10.981,1211,10.177,1260,12.172,1863,11.268,2216,11.424,2847,11.591,4112,13.601,5008,11.424,5011,11.591,5016,14.02,5017,14.02,5018,14.02,5019,14.02]],["keywords/971",[]],["title/972",[651,700.046]],["content/972",[1,3.674,13,3.607,15,4.058,22,2.292,47,7.376,66,5.206,161,6.341,168,5.226,175,8.892,222,3.741,263,5.006,270,5.1,291,4.474,321,7.811,335,3.674,343,6.056,374,6.035,404,5.555,411,8.633,432,7.305,449,11.292,458,7.202,495,6.015,651,10.085,813,9.033,906,7.305,921,6.978,1442,9.107,2565,10.784,2566,10.941]],["keywords/972",[]],["title/973",[3311,984.527]],["content/973",[]],["keywords/973",[]],["title/974",[1831,1269.296]],["content/974",[2,1.853,3,2.877,19,4.104,20,5.923,54,10.113,97,7.938,144,13.038,145,8.302,195,3.074,224,3.021,229,7.458,279,7.38,396,7.396,432,7.976,495,6.567,575,4.271,714,6.949,801,12.33,2417,15.616,3116,16.484,3311,13.959,5131,17.803,5132,16.484]],["keywords/974",[]],["title/975",[54,649.882,195,156.745,3311,649.882]],["content/975",[2,1.746,3,2.711,20,5.582,22,1.631,54,13.576,145,7.823,191,9.884,195,3.578,222,2.662,224,2.454,316,6.572,495,8.816,540,8.127,597,9.613,602,8.585,714,6.548,784,11.618,785,13.615,791,12.73,801,11.618,908,6.027,1012,15.533,1077,12.286,1620,14.103,1710,12.042,1843,10.415,2633,12.556,3311,12.273]],["keywords/975",[]],["title/976",[43,256.768,195,133.976,287,418.518,3311,555.478]],["content/976",[2,2.228,3,3.46,20,7.123,43,6.233,86,7.594,176,13.021,195,2.933,222,2.624,224,2.432,251,4.934,279,7.041,287,10.159,291,4.538,316,6.478,367,6.271,490,4.614,493,8.818,652,7.123,689,4.648,784,11.453,1593,11.268,1843,10.267,2181,11.453,2185,15.312,3311,14.26,5133,21.407]],["keywords/976",[]],["title/977",[224,111.085,518,380.264,780,701.955,792,402.94]],["content/977",[2,1.325,3,2.058,16,1.84,22,2.019,25,3.614,43,5.921,54,13.502,66,2.812,115,4.746,145,5.938,155,5.026,171,11.17,195,3.257,220,7.612,222,3.578,224,2.561,244,5.847,287,9.651,291,4.923,348,6.791,388,10.027,396,5.29,413,5.877,428,4.713,442,9.531,445,3.899,468,10.782,469,4.697,490,3.553,495,4.697,525,9.141,575,4.983,616,3.247,664,7.998,689,3.579,696,8.198,746,5.761,780,9.141,784,8.819,785,10.335,791,7.503,792,8.558,801,8.819,981,9.141,1278,8.307,1391,8.198,1455,7.654,1459,11.791,1625,10.027,1650,9.531,1843,7.906,3311,7.234,4266,7.998,5132,11.791]],["keywords/977",[]],["title/978",[3375,1364.669]],["content/978",[]],["keywords/978",[]],["title/979",[195,156.745,397,241.681,616,291.743]],["content/979",[2,1.942,3,3.016,7,7.537,8,8.356,31,4.823,49,4.801,127,4.554,195,2.557,274,9.81,289,8.568,397,4.882,399,3.812,469,6.883,616,4.758,652,6.208,3375,14.692,5134,18.66,5135,18.66,5136,18.66,5137,18.66,5138,18.66,5139,18.66,5140,18.66]],["keywords/979",[]],["title/980",[2042,532.102]],["content/980",[13,4.965,652,7.466,895,6.729,3375,17.669]],["keywords/980",[]],["title/981",[16,250.43]],["content/981",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3375,14.46]],["keywords/981",[]],["title/982",[282,329.633]],["content/982",[3,2.415,13,4.43,18,5.393,19,4.616,36,5.748,195,2.744,222,2.371,258,2.982,282,3.809,330,5.046,397,3.157,399,3.053,422,4.6,426,7.036,427,5.421,428,8.36,437,7.647,447,5.92,464,3.744,568,7.647,652,7.514,689,4.2,693,3.906,714,5.832,851,5.475,908,5.368,1535,5.811,1716,6.403,1875,6.741,3262,6.51,3263,7.08,3375,18.997,3492,9.386,3493,9.277,3951,11.456,4335,13.107]],["keywords/982",[]],["title/983",[1023,407.123]],["content/983",[15,4.72,123,8.797,222,3.009,224,2.154,258,3.784,397,4.006,399,3.874,400,8.046,689,5.33,707,6.54,838,8.152,842,6.461,847,7.116,851,6.949,1234,12.922,3262,8.262,3275,7.978,3277,10.263,3376,17.56,3641,10.506,3766,10.966,4337,15.391,4843,17.56]],["keywords/983",[]],["title/984",[15,212.515,43,224.2,195,116.983,287,365.434,3311,485.021]],["content/984",[]],["keywords/984",[]],["title/985",[195,156.745,397,241.681,616,291.743]],["content/985",[4,8.756,20,8.33,66,3.625,127,4.008,161,6.385,195,2.25,205,7.697,206,6.794,222,4.117,224,1.865,229,6.879,241,8.853,343,6.098,354,4.051,399,3.354,435,8.349,437,8.403,491,10.313,526,6.047,540,7.955,552,8.458,575,3.94,627,4.178,814,10.439,841,8.694,1049,7.823,1077,12.025,2545,11.372,2568,10.313,3311,13.438,5141,15.204]],["keywords/985",[]],["title/986",[2042,532.102]],["content/986",[]],["keywords/986",[]],["title/987",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,3311,386.879,3471,331.852]],["content/987",[2,1.853,22,2.182,66,3.931,127,4.345,160,8.345,186,5.539,329,6.923,340,3.963,352,6.479,354,4.393,355,4.581,575,5.384,652,5.923,807,11.182,895,5.339,921,7.619,1133,6.396,1155,8.829,1759,13.648,1972,13.325,2568,11.182,3311,14.656,3484,8.994,3536,12.545,5142,16.484]],["keywords/987",[]],["title/988",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/988",[1,3.922,14,6.038,18,3.89,73,6.02,206,7.2,226,3.922,281,4.012,283,6.53,329,6.768,340,4.924,347,6.273,352,6.386,422,5.357,445,5.329,599,7.514,601,10.261,603,8.073,604,8.964,752,6.818,864,6.293,896,6.486,1133,6.252,1142,6.076,1175,10.46,1945,9.973,2094,9.594,3311,9.886,3440,11.678,3471,8.48,3484,8.792]],["keywords/988",[]],["title/989",[864,626.718]],["content/989",[1,2.224,2,2.08,8,3.569,13,2.184,14,5.168,16,1.426,20,4.956,22,0.96,43,2.592,66,5.32,69,5.575,73,3.414,75,5.76,112,3.303,127,2.409,161,3.838,185,5.2,186,5.582,195,2.041,205,6.982,206,7.422,222,2.847,226,2.224,263,3.03,300,6.438,316,3.867,340,2.197,347,3.557,350,6.528,352,4.301,354,4.426,355,3.832,360,4.422,372,4.597,392,9.355,422,3.038,437,5.051,448,3.435,457,4.422,495,3.641,546,3.896,554,6.726,557,6.549,575,5.616,601,8.322,626,6.91,627,3.79,632,4.422,652,4.956,731,4.084,807,6.199,895,2.96,896,6.686,1020,5.425,1126,3.393,1142,6.263,1155,4.895,1189,3.925,1221,3.838,1299,5.994,1456,7.567,1539,7.228,1569,6.836,1623,6.128,1859,5.513,1945,8.536,1984,6.623,2020,6.489,2055,5.932,2094,8.666,2096,6.623,2211,6.836,2568,6.199,3221,12.878,3311,12.183,3501,6.836,4035,7.388,5143,9.139,5144,9.139]],["keywords/989",[]],["title/990",[16,250.43]],["content/990",[1,5.577,2,1.882,16,3.274,22,1.758,24,4.683,43,4.747,89,3.896,163,6.015,224,2.947,227,5.813,228,5.021,277,3.812,281,4.168,284,5.436,287,7.738,354,4.461,355,4.652,372,5.58,464,4.53,490,5.045,875,5.045,1023,4.247,3311,10.27]],["keywords/990",[]],["title/991",[282,329.633]],["content/991",[2,1.297,3,2.014,13,2.757,14,6.13,18,5.27,19,4.073,20,5.878,22,1.718,86,5.722,168,2.516,206,8.492,222,1.977,230,4.22,258,2.487,282,3.904,283,4.676,329,6.87,340,2.774,347,4.491,352,3.598,354,3.075,355,3.206,392,11.096,399,2.546,422,3.836,426,6.512,464,3.122,601,9.522,660,5.842,689,3.502,816,6.904,818,5.873,875,3.477,895,3.737,896,6.584,908,4.477,1112,11.374,1133,4.477,1142,7.166,1679,5.722,1716,5.649,1875,5.948,1945,10.124,2025,7.141,2094,9.686,3263,5.904,3311,12.686,3471,6.072,3481,7.922,3485,9.553,3486,9.553,3487,10.114,4736,12.449,4924,9.812]],["keywords/991",[]],["title/992",[1023,407.123]],["content/992",[222,2.869,224,2.054,258,3.608,397,4.787,399,3.693,689,6.368,707,6.235,818,8.52,838,7.772,842,6.16,847,8.503,1133,6.495,1142,6.312,3275,7.606,3311,10.27,3312,16.741,3496,11.957,3500,11.099,3501,12.521,4924,14.236,5145,15.2,5146,16.741,5147,16.741,5148,16.741,5149,16.741,5150,16.741]],["keywords/992",[]],["title/993",[3377,1364.669]],["content/993",[]],["keywords/993",[]],["title/994",[195,156.745,397,241.681,616,291.743]],["content/994",[2,2.075,3,3.223,7,8.054,8,8.702,31,5.153,49,5.13,127,4.867,195,2.732,397,5.084,399,4.073,469,7.355,616,5.085,652,6.634,3377,15.7,5151,19.94]],["keywords/994",[]],["title/995",[2042,532.102]],["content/995",[113,4.86,160,9.679,224,2.346,226,4.653,277,4.353,340,4.596,352,5.961,445,6.322,447,8.18,895,6.192,896,7.695,3377,19.349]],["keywords/995",[]],["title/996",[16,250.43]],["content/996",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3377,14.46]],["keywords/996",[]],["title/997",[282,329.633]],["content/997",[3,2.479,18,5.672,19,4.697,113,3.61,160,10.726,222,2.434,241,6.372,258,3.061,282,3.875,289,7.043,397,3.24,399,3.133,422,4.721,426,7.4,447,9.659,689,4.311,693,4.009,714,7.953,851,5.62,896,7.593,900,12.798,908,5.51,1535,5.964,1716,6.515,1875,6.86,2967,13.453,3263,7.267,3377,16.044,5152,15.338,5153,20.376]],["keywords/997",[]],["title/998",[1023,407.123]],["content/998",[15,4.644,160,8.747,208,7.72,222,2.961,224,2.12,258,3.724,397,3.942,399,3.812,447,7.393,689,5.244,707,6.435,838,8.021,842,6.357,847,7.002,851,6.837,3275,7.85,3277,10.099,3279,10.509,3378,17.278,3646,15.687,3774,18.195,5154,16.367,5155,18.66,5156,18.66]],["keywords/998",[]],["title/999",[15,243.386,54,555.478,195,133.976,3311,555.478]],["content/999",[]],["keywords/999",[]],["title/1000",[195,156.745,397,241.681,616,291.743]],["content/1000",[4,7.354,16,1.993,20,8.779,66,3.045,127,3.366,161,5.363,195,1.89,205,8.89,206,5.706,221,6.924,222,4.11,224,2.651,229,9.079,241,7.878,343,5.122,354,3.403,360,8.496,399,2.817,435,7.012,437,7.058,491,8.662,526,5.382,530,8.049,540,6.681,552,9.768,575,4.55,627,3.509,632,6.179,693,3.605,717,9.462,814,8.767,841,7.302,1049,6.57,1077,10.1,1139,9.551,2545,9.551,2568,8.662,3311,14.364,5141,12.77]],["keywords/1000",[]],["title/1001",[2042,532.102]],["content/1001",[]],["keywords/1001",[]],["title/1002",[2,70.881,22,66.215,354,168.042,355,175.235,895,204.236,3311,386.879,3471,331.852]],["content/1002",[2,1.853,22,2.182,66,3.931,127,4.345,160,8.345,186,5.539,329,6.923,340,3.963,352,6.479,354,4.393,355,4.581,575,5.384,652,5.923,807,11.182,895,5.339,921,7.619,1133,6.396,1155,8.829,1759,13.648,1972,13.325,2568,11.182,3311,14.656,3484,8.994,3536,12.545,5142,16.484]],["keywords/1002",[]],["title/1003",[1,220.355,16,141.294,224,111.085,347,352.446]],["content/1003",[1,3.922,14,6.038,18,3.89,73,6.02,206,7.2,226,3.922,281,4.012,283,6.53,329,6.768,340,4.924,347,6.273,352,6.386,422,5.357,445,5.329,599,7.514,601,10.261,603,8.073,604,8.964,752,6.818,864,6.293,896,6.486,1133,6.252,1142,6.076,1175,10.46,1945,9.973,2094,9.594,3311,9.886,3440,11.678,3471,8.48,3484,8.792]],["keywords/1003",[]],["title/1004",[864,626.718]],["content/1004",[1,2.169,2,2.053,8,3.48,13,2.129,14,5.071,16,1.391,20,4.863,22,1.421,43,2.527,66,5.279,69,5.504,73,3.329,75,5.617,112,3.221,127,2.349,160,4.512,161,3.743,185,5.102,186,5.497,195,2.421,205,6.851,206,7.31,222,2.803,226,2.169,263,2.955,300,6.278,316,3.771,340,2.142,347,3.469,350,6.366,352,4.219,354,4.359,355,3.76,360,4.312,372,4.511,392,9.179,422,2.963,437,4.925,448,3.35,457,4.312,495,3.551,540,4.663,546,3.799,554,6.559,557,6.426,575,5.568,601,8.196,626,6.78,627,3.719,632,4.312,652,4.863,731,3.982,807,6.045,895,2.886,896,6.584,1020,5.29,1126,3.309,1142,6.168,1155,4.774,1189,3.828,1221,3.743,1299,5.846,1456,7.379,1539,7.049,1569,6.666,1623,5.976,1748,4.745,1859,5.376,1945,8.375,1984,6.459,2020,6.367,2055,5.785,2094,8.556,2096,6.459,2211,6.666,2568,6.045,3221,12.682,3311,12.686,3501,6.666,4035,7.204,5143,8.912,5144,8.912]],["keywords/1004",[]],["title/1005",[16,250.43]],["content/1005",[1,5.597,2,2.37,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,791,10.736,875,5.084,1023,4.28,3311,10.351]],["keywords/1005",[]],["title/1006",[465,457.256,5157,1276.224]],["content/1006",[16,2.957,42,7.315,54,8.77,71,8.876,86,7.089,97,6.884,155,6.094,195,2.115,222,3.247,224,1.754,251,4.606,277,3.255,279,7.55,291,5.616,296,6.071,316,8.017,401,6.212,428,5.715,445,4.728,464,5.127,465,8.109,495,5.695,511,7.396,571,11.083,677,9.125,714,7.988,791,9.096,921,6.608,1443,6.852,1945,8.847,2217,12.531,2783,12.531,3156,12.531,3311,8.77,5157,22.634]],["keywords/1006",[]],["title/1007",[19,196.828,251,254.733,929,436.937,1947,654.579,2203,748.94]],["content/1007",[8,7.089,89,4.225,186,6.099,195,2.686,222,3.11,251,5.848,279,6.447,283,7.356,291,6.536,326,11.664,689,5.509,1014,9.937,1643,9.288,1837,9.782,1843,12.17,1971,14.673,3311,11.136]],["keywords/1007",[]],["title/1008",[43,224.2,195,116.983,287,365.434,746,386.262,791,503.062]],["content/1008",[1,2.764,2,0.8,3,3.451,14,4.255,15,3.052,16,1.11,18,2.741,19,2.827,20,2.557,22,1.978,24,1.991,36,2.956,43,5.012,49,3.938,66,3.857,69,3.422,71,3.333,73,2.658,79,3.311,86,3.529,89,1.656,113,4.493,127,3.735,130,3.46,139,5.631,155,3.033,162,5.074,179,4.012,186,2.391,188,5.013,195,1.68,207,3.289,220,7.412,222,3.797,224,1.984,225,5.908,227,3.943,251,2.293,255,4.366,261,4.555,263,2.359,270,3.836,277,2.586,279,4.034,282,1.462,287,8.169,290,3.304,316,3.011,317,5.322,343,2.854,368,2.797,385,2.52,386,3.789,396,3.193,422,2.366,426,2.241,445,3.755,458,3.395,481,4.718,518,2.989,544,3.933,547,6.317,569,3.985,596,4.886,599,6.608,603,5.689,604,3.959,606,4.485,607,3.427,610,4.667,612,6.237,622,3.985,641,6.698,642,6.493,644,3.068,689,2.16,728,6.85,743,9.105,746,5.548,752,4.805,761,8.548,791,10.292,792,7.198,817,5.752,823,5.417,875,2.144,1121,3.661,1313,4.886,1745,5.157,1851,8.804,1875,2.587,1909,10.31,1916,6.317,1923,4.947,1971,5.752,2018,11.208,2067,12.809,3311,9.923,3787,9.179,5158,12.264,5159,7.685,5160,7.685,5161,7.685,5162,7.685,5163,6.741]],["keywords/1008",[]],["title/1009",[282,329.633]],["content/1009",[2,0.878,3,1.364,13,1.867,14,4.581,18,4.734,19,3.75,20,6.645,22,1.789,30,2.698,70,3.395,86,3.875,108,4.16,168,1.704,185,2.946,195,2.229,206,6.73,213,5.18,222,2.92,226,1.901,230,2.858,258,1.684,282,3.094,283,3.166,329,5.135,330,4.458,340,1.878,347,3.041,352,2.436,354,2.082,355,2.171,392,8.293,399,1.724,422,2.597,426,6.868,427,3.061,428,6.021,455,4.436,464,4.075,465,6.105,568,3.222,601,7.546,626,3.914,659,5.662,660,3.955,689,3.711,693,2.206,714,3.293,717,8.117,816,4.675,818,3.977,835,4.02,846,6.361,851,3.092,875,2.354,895,2.53,896,4.921,908,4.744,1112,8.5,1121,4.02,1133,3.031,1142,5.679,1535,3.281,1679,3.875,1716,4.222,1775,8.738,1875,4.445,1945,7.567,2025,4.835,2094,8.663,2121,5.238,3054,13.676,3262,3.676,3311,12.031,3395,7.437,3471,4.111,3481,5.364,3482,5.662,3485,6.469,3486,6.469,3487,6.848,3492,5.3,3493,5.238,3494,5.946,4736,9.304,4924,6.644,4949,11.582,5164,15.062,5165,17.038,5166,13.204,5167,13.204,5168,8.438,5169,13.204,5170,8.438,5171,8.438,5172,8.438,5173,8.438]],["keywords/1009",[]],["title/1010",[1023,407.123]],["content/1010",[1,3.411,86,6.951,123,9.37,222,2.402,224,1.72,258,3.021,347,5.456,397,4.267,399,3.092,400,8.57,464,3.793,689,5.677,707,5.22,818,7.134,838,6.507,842,5.157,847,7.58,851,7.401,895,4.539,908,5.438,1023,3.556,1133,5.438,1142,5.285,2094,6.566,2125,9.007,3054,12.726,3262,6.595,3275,6.368,3374,14.017,3495,9.293,3496,10.012,3500,9.293,3501,10.484,4924,11.919,4949,13.278,5145,12.726,5146,14.017,5147,14.017,5148,14.017,5149,14.017,5150,14.017,5164,14.017,5165,14.017,5174,15.138,5175,17.717,5176,20.199]],["keywords/1010",[]],["title/1011",[2038,1180.983]],["content/1011",[]],["keywords/1011",[]],["title/1012",[195,156.745,397,241.681,616,291.743]],["content/1012",[2,1.911,3,2.968,7,7.418,8,8.274,24,4.757,31,4.747,49,4.725,127,4.483,195,2.516,397,4.834,399,3.752,469,6.775,616,4.683,652,6.11,1762,11.154,2038,12.514,4115,20.954,5177,14.079,5178,18.365,5179,18.365,5180,18.365,5181,18.365,5182,18.365]],["keywords/1012",[]],["title/1013",[2042,532.102]],["content/1013",[652,7.325,895,6.602,896,8.205,1050,9.223,2038,15.001,2064,15.804]],["keywords/1013",[]],["title/1014",[16,250.43]],["content/1014",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2038,12.514]],["keywords/1014",[]],["title/1015",[282,329.633]],["content/1015",[3,2.326,18,5.31,19,4.5,36,5.535,43,3.778,52,5.835,123,6.675,193,10.538,195,1.971,222,2.283,258,2.871,282,3.713,330,4.858,356,8.173,357,6.745,397,3.04,399,2.939,426,6.461,427,5.22,428,8.2,447,5.701,458,6.356,568,5.495,689,4.044,693,3.761,714,5.616,719,10.729,721,7.094,816,7.971,851,5.272,872,8.477,908,5.169,1535,5.595,1679,6.607,1716,6.242,1803,7.564,1875,6.572,1974,7.094,2038,9.804,3262,6.269,3263,6.818,3640,9.804,3641,7.971,3969,10.77,4265,18.075,5177,14.965,5183,14.389,5184,12.097]],["keywords/1015",[]],["title/1016",[1023,407.123]],["content/1016",[15,4.332,123,8.073,222,2.761,224,1.977,258,3.473,397,3.676,399,3.555,458,7.687,689,4.891,707,6.002,838,7.481,842,5.929,847,6.53,851,6.377,1133,6.252,1142,7.723,1796,10.569,3262,7.582,3273,10.931,3275,7.321,3279,9.802,3379,15.265,3484,8.792,3495,10.684,3496,11.51,3500,10.684,3641,9.641,3766,10.063,5145,14.631,5184,14.631,5185,17.403,5186,17.403,5187,17.403]],["keywords/1016",[]],["title/1017",[3313,1364.669]],["content/1017",[]],["keywords/1017",[]],["title/1018",[2042,532.102]],["content/1018",[2,2.149,22,2.007,112,6.91,279,6.791,340,4.596,352,5.961,693,5.397,895,6.192,1044,11.729,1126,7.099,1215,9.387,1221,8.029,3313,16.258]],["keywords/1018",[]],["title/1019",[946,746.272,1795,674.055,3441,877.073]],["content/1019",[16,3.589,24,6.739,166,10.841,222,4.128,224,2.07,303,7.799,519,10.015,625,13.341,946,14.853,1795,14.633,2570,13.638,3441,19.04,5188,18.221]],["keywords/1019",[]],["title/1020",[24,296.351,71,496.196,222,181.529]],["content/1020",[4,4.297,13,3.969,22,0.783,24,6.982,30,2.576,36,3.099,43,5.13,69,4.405,70,9.339,71,8.473,72,5.122,89,2.744,94,5.407,113,2.998,119,7.363,120,8.753,127,1.967,181,3.376,195,1.104,205,3.777,222,4.105,224,2.038,226,4.043,229,3.376,237,3.495,270,2.521,291,2.211,303,3.449,316,3.157,360,3.61,377,4.123,387,7.649,389,4.266,400,3.419,417,7.172,495,2.972,511,8.594,519,4.429,625,10.495,644,3.217,676,3.949,677,3.593,679,7.324,728,4.501,739,7.998,771,3.464,909,4.501,921,3.449,1048,7.068,1221,6.976,1267,5.403,1313,5.122,1445,5.678,1535,6.14,1590,8.545,1684,9.302,1795,7.503,1917,10.758,1963,6.54,2181,14.384,2851,13.428,3152,5.784,3441,9.762,5189,7.461,5190,15.383,5191,12.734,5192,8.058,5193,12.734,5194,8.058,5195,8.058,5196,12.734,5197,8.058,5198,8.058,5199,15.788,5200,8.058,5201,8.058]],["keywords/1020",[]],["title/1021",[16,250.43]],["content/1021",[1,3.464,2,0.805,6,5.69,13,3.401,16,2.767,18,4.28,19,3.543,20,5.114,22,1.199,23,7.41,24,6.321,25,3.499,30,3.942,31,3.186,43,2.031,60,9.793,71,6.667,73,2.676,89,1.667,106,4.488,108,3.814,112,2.589,113,1.821,120,6.887,130,3.483,139,3.552,163,2.574,222,2.782,224,1.992,227,2.487,228,2.148,229,3.241,230,4.175,238,6.83,258,1.544,263,2.375,270,3.857,277,1.631,281,2.842,282,2.345,284,2.326,334,3.188,340,1.722,354,1.909,355,1.99,360,3.466,368,4.488,372,2.388,399,1.58,426,6.481,427,4.473,455,4.067,464,1.938,490,4.892,494,7.971,575,1.856,609,5.666,615,7.654,625,11.939,647,2.883,714,4.812,717,3.86,771,5.3,808,3.297,818,3.646,835,5.874,858,4.357,875,3.44,895,4.609,946,5.046,1007,4.039,1023,1.817,1076,5.358,1126,6.584,1143,7.717,1210,3.666,1220,5.524,1221,3.008,1267,3.282,1412,7.569,1679,3.552,1716,3.942,1875,4.151,2181,5.358,2487,5.451,2851,9.228,3034,7.41,3263,3.666,3313,9.708,3403,4.65,3587,6.279,3588,6.279,3589,6.091,3590,6.091,3591,6.279,3593,10.006,3595,6.279,3596,6.279,3597,6.279,3598,6.279,3599,6.279,5190,6.091,5202,7.163,5203,15.371,5204,7.736]],["keywords/1021",[]],["title/1022",[1023,407.123]],["content/1022",[14,5.579,19,3.707,23,9.664,98,9.983,105,10.222,112,5.381,195,2.88,222,2.551,224,1.827,258,3.209,397,3.397,399,3.285,427,5.834,625,8.638,689,4.519,707,5.545,842,7.161,847,6.034,1126,5.528,1143,10.554,1614,8.838,1798,10.222,1800,8.638,2105,9.872,2108,12.661,2510,11.839,3034,9.664,3277,11.376,3425,11.136,3602,13.05,3603,12.661,3604,13.05,3605,13.05,3606,13.05,3607,13.05,3608,13.05,5202,14.889,5205,16.08,5206,16.08,5207,12.661]],["keywords/1022",[]],["title/1023",[24,253.302,771,420.36,1412,600.333,3313,769.957]],["content/1023",[1,1.562,2,1.485,3,1.12,6,3.198,11,1.888,16,2.957,19,5.086,22,0.674,23,9.886,24,5.715,30,6.207,31,1.791,43,1.82,49,2.903,60,9.187,62,4.668,67,5.375,70,2.788,87,4.687,98,4.302,105,4.405,106,2.522,111,8.263,130,3.12,139,3.182,155,2.735,195,2.804,196,2.685,207,2.966,222,2.61,224,1.621,226,1.562,230,3.821,231,4.504,238,6.251,250,3.87,251,2.067,258,2.252,263,5.05,275,6.927,277,1.461,282,2.146,288,3.593,296,2.725,307,2.333,312,2.966,318,4.883,321,3.32,332,4.352,340,2.511,368,5.987,380,4.165,399,1.416,404,3.844,427,5.177,434,3.479,440,4.371,448,6.756,464,3.575,465,3.743,469,4.162,490,4.59,503,4.352,550,3.248,551,2.81,579,3.15,607,3.09,615,4.302,616,3.639,642,3.669,678,4.254,736,3.669,814,4.405,823,3.061,829,3.12,849,2.591,920,3.643,926,3.593,957,4.165,976,6.135,1021,3.266,1023,1.628,1044,3.936,1221,2.695,1303,4.883,1412,6.927,1637,4.405,1683,5.187,1684,4.083,1731,6.647,1800,9.727,1876,4.302,1885,4.405,2025,3.971,2055,4.165,2081,4.165,2105,10.098,2422,6.927,2510,9.264,3034,10.883,3122,4.974,3128,5.187,3152,4.974,3313,8.884,3411,3.936,3611,5.624,3612,5.456,3613,5.826,3614,5.456,3615,5.456,3616,5.456,3617,5.456,3618,5.456,3619,5.456,3620,5.456,3621,5.456,3622,5.456,3623,5.456,3624,5.456,3625,5.456,3626,7.086,3627,5.456,3628,5.456,3629,8.884,3630,5.456,3631,5.456,3632,5.456,3633,5.456,3634,5.456,3635,5.456,3636,5.456,3637,5.456]],["keywords/1023",[]],["title/1024",[3333,911.566,3380,1085.254]],["content/1024",[]],["keywords/1024",[]],["title/1025",[195,156.745,397,241.681,616,291.743]],["content/1025",[2,2.093,3,3.251,7,8.123,8,7.273,22,1.955,31,5.198,49,5.175,127,4.909,168,4.061,224,2.285,397,4.249,399,4.109,469,7.419,714,7.85,3380,15.836,5208,20.112]],["keywords/1025",[]],["title/1026",[2042,532.102]],["content/1026",[195,2.933,241,8.894,526,7.124,627,5.447,714,8.356,731,8.857,3333,14.158,3380,16.856]],["keywords/1026",[]],["title/1027",[16,250.43]],["content/1027",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3380,14.46]],["keywords/1027",[]],["title/1028",[282,329.633]],["content/1028",[3,2.385,18,5.015,19,4.577,31,3.813,36,7.637,43,5.213,123,9.21,139,6.775,195,2.72,222,2.341,258,2.944,282,3.776,330,4.982,397,3.117,399,3.014,426,6.999,427,7.203,428,9.549,447,5.845,568,7.582,689,4.147,693,3.856,714,5.758,851,5.406,908,5.3,1535,5.737,1716,6.348,1803,10.438,1875,6.684,3263,6.991,3380,11.617,3640,13.529,3641,10.999,3950,10.218,4959,12.941]],["keywords/1028",[]],["title/1029",[1023,407.123]],["content/1029",[15,4.644,123,10.72,222,2.961,224,2.12,230,6.319,258,3.724,397,3.942,399,3.812,689,5.244,707,6.435,838,8.021,842,6.357,847,7.002,851,6.837,3262,8.13,3275,7.85,3279,10.509,3381,17.278,3641,12.802,3766,10.79,3950,12.923,4464,17.278,5209,18.66]],["keywords/1029",[]],["title/1030",[224,129.964,790,623.908,2100,545.038]],["content/1030",[]],["keywords/1030",[]],["title/1031",[2042,532.102]],["content/1031",[11,5.833,22,2.081,31,3.482,47,6.094,66,2.974,100,8.91,113,3.171,168,4.899,186,4.192,192,6.681,221,6.764,222,2.138,224,2.432,228,3.741,241,5.597,263,4.136,277,3.934,281,3.106,335,3.036,340,2.999,343,5.003,352,3.89,357,6.315,397,2.846,427,4.887,430,7.588,485,5.869,526,6.075,542,7.237,557,5.923,575,3.232,626,6.25,627,3.428,647,5.021,689,5.244,771,5.791,847,5.055,874,9.18,875,3.759,1050,5.644,1078,12.715,1189,5.358,1267,5.716,1709,7.237,2100,10.199,2462,8.461,3848,8.673,4084,9.671,5210,13.472,5211,13.472,5212,12.474,5213,13.472,5214,13.472,5215,13.472,5216,13.472,5217,12.474]],["keywords/1031",[]],["title/1032",[864,626.718]],["content/1032",[11,4.974,15,6.274,22,0.809,30,4.174,66,4.861,87,3.455,113,3.073,127,2.03,168,3.254,172,3.1,173,3.121,185,4.558,186,2.588,192,4.125,205,3.899,222,2.897,224,0.945,226,4.961,279,5.301,335,4.961,374,5.965,445,2.547,458,5.767,518,3.234,526,2.36,542,10.656,575,5.051,598,5.224,627,3.322,632,3.726,642,4.403,643,5.354,678,8.015,712,10.034,731,3.441,790,4.536,808,3.544,871,4.202,872,4.9,874,8.896,902,10.929,964,4.256,1043,4.854,1078,5.667,1126,5.541,1142,2.904,1189,9.541,1196,4.766,1539,6.091,1704,6.992,1820,5.76,1916,4.284,2100,6.22,2134,10.976,2136,6.992,2138,10.976,2139,6.376,2140,12.69,2141,9.772,2143,19.71,2144,6.992,2145,16.677,2147,10.976,2148,6.992,2149,6.992,2150,10.976,2151,6.992,2152,6.992,2153,6.992,2154,6.75,2155,6.091,2156,6.992,2157,6.992,2601,7.701,4574,4.435,5218,7.701,5219,8.317]],["keywords/1032",[]],["title/1033",[16,250.43]],["content/1033",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,790,9.937,875,5.084,1023,4.28,2100,8.681]],["keywords/1033",[]],["title/1034",[258,275.056,282,262.141]],["content/1034",[2,1.853,11,4.851,18,5.291,19,2.904,20,4.191,22,2.007,30,5.692,31,3.256,66,2.781,108,6.21,113,4.191,168,2.543,173,4.727,192,6.247,222,1.999,263,3.867,270,3.94,282,2.396,335,4.653,340,2.804,426,7.366,448,4.384,485,5.488,526,5.859,542,12.054,557,5.538,575,5.896,647,6.634,689,3.54,693,3.293,771,8.876,808,5.368,1050,5.277,1078,8.583,1126,7.098,1163,10.027,1368,8.331,1716,4.028,1875,4.241,2100,11.278,2121,7.82,2161,9.657,2162,9.918,2462,7.911,3539,10.59,5212,11.663,5220,12.596]],["keywords/1034",[]],["title/1035",[282,262.141,399,281.565]],["content/1035",[11,7.017,18,5.351,19,4.557,113,4.654,168,5.2,222,3.137,282,3.76,426,6.982,1716,6.321,1875,6.656,3533,12.274,4623,15.156]],["keywords/1035",[]],["title/1036",[41,683.579,1928,1009.408]],["content/1036",[2,1.166,3,1.81,4,5.973,16,2.364,22,1.089,31,2.895,41,12.4,43,4.296,69,3.125,97,4.994,115,4.174,168,2.262,175,6.108,192,5.555,195,1.535,216,4.712,218,6.877,219,5.067,222,3.373,224,1.272,226,2.524,251,4.882,255,6.363,266,5.336,277,3.45,282,2.13,288,5.808,291,3.074,297,4.732,298,5.695,343,4.16,353,6.877,372,3.457,386,5.522,404,3.816,445,3.43,448,3.899,449,7.757,490,4.565,536,10.402,537,8.041,542,10.384,544,5.732,545,12.972,575,2.687,594,4.994,597,6.419,660,5.251,689,3.148,712,6.156,741,6.108,790,6.108,860,6.062,901,5.396,960,7.516,1004,9.091,1113,5.589,1326,6.309,1348,6.419,1496,9.825,1548,9.825,1552,7.211,1581,8.587,1582,9.825,1590,10.98,1614,6.156,1650,8.384,1820,7.757,1832,6.108,1928,14.157,1955,8.82,2054,8.82,2060,8.384,2100,10.129,2609,10.372,5221,10.372,5222,11.201,5223,11.201,5224,11.201,5225,11.201,5226,8.203,5227,11.201]],["keywords/1036",[]],["title/1037",[16,199.154,1023,323.765]],["content/1037",[11,4.888,41,8.898,168,3.622,222,2.847,224,2.038,258,3.58,335,4.043,397,3.79,399,3.665,526,5.091,575,4.304,647,6.686,707,6.187,838,7.712,842,6.112,847,6.732,1126,6.168,1142,6.263,2100,8.547,2141,13.428,3050,15.736,3430,8.898,5217,16.611,5218,16.611,5228,17.94,5229,17.94,5230,17.94,5231,13.753,5232,17.94,5233,17.94]],["keywords/1037",[]],["title/1038",[172,426.353,1221,444.891,1758,806.162]],["content/1038",[]],["keywords/1038",[]],["title/1039",[272,585.453,370,512.565,616,291.743]],["content/1039",[22,1.608,61,7.474,127,4.036,172,10.103,174,9.394,224,1.879,272,8.463,283,6.205,335,3.726,370,7.409,445,5.064,489,7.793,490,5.973,597,9.477,616,4.217,647,7.978,790,9.018,792,6.814,864,5.98,1074,8.252,1105,9.939,1221,9.231,1299,10.043,2046,9.237,3156,13.422,3766,9.562,4696,13.903,5234,13.903,5235,13.903,5236,14.505]],["keywords/1039",[]],["title/1040",[2042,532.102]],["content/1040",[2,1.311,3,2.036,6,5.813,11,4.851,13,4.568,22,1.225,49,3.241,66,4.559,73,4.357,168,5.431,172,6.634,185,4.398,186,3.919,195,1.726,208,5.212,222,3.276,224,2.345,228,3.498,251,6.16,254,6.285,291,3.457,316,4.935,321,6.034,335,4.653,340,2.804,343,4.678,347,4.54,401,5.068,432,7.976,448,6.196,516,7.036,556,5.488,575,3.022,731,7.366,752,4.935,764,9.042,790,11.26,902,5.538,1008,6.102,1221,6.923,1344,7.65,1702,11.052,1748,6.21,2080,8.217,2174,8.109,2563,10.179,2572,9.042,2573,8.008,5237,11.049,5238,11.049,5239,11.049,5240,11.049]],["keywords/1040",[]],["title/1041",[864,626.718]],["content/1041",[18,4.381,19,4.519,61,6.844,127,4.785,172,10.191,647,8.876,752,7.68,1221,7.623,1299,11.906,2046,10.949,3053,12.17,5234,16.481,5235,16.481,5241,19.604]],["keywords/1041",[]],["title/1042",[172,364.419,647,364.419,1221,380.264,1299,593.887]],["content/1042",[2,0.998,11,6.075,13,2.121,15,5.549,16,2.105,22,1.416,31,2.477,52,3.887,66,4.675,112,3.208,115,3.572,127,2.34,168,4.679,173,6.613,185,6.153,195,1.313,222,2.796,224,1.089,226,2.16,228,2.662,241,3.982,246,5.354,258,2.907,263,2.943,279,4.791,281,2.21,291,2.63,335,2.16,343,3.56,358,8.349,367,7.465,385,4.778,408,4.085,432,4.294,439,5.075,445,2.935,573,5.951,575,4.228,604,4.938,641,4.195,646,6.758,647,3.572,693,4.606,731,6.028,790,11.547,849,5.448,875,2.675,1008,4.644,1023,2.252,1110,5.268,1126,5.009,1142,3.347,1163,8.205,1189,8.421,1214,6.253,1215,4.358,1217,6.559,1220,6.527,1221,5.665,1222,5.149,1290,5.594,2422,5.885,2461,6.881,2518,14.227,2563,8.688,2571,7.547,4598,7.349,5242,6.754,5243,10.09,5244,8.876,5245,13.51,5246,8.059,5247,8.059,5248,8.059,5249,8.059,5250,8.059,5251,8.059]],["keywords/1042",[]],["title/1043",[172,426.353,335,257.805,1151,633.815]],["content/1043",[2,1.304,11,5.609,13,1.746,15,5.124,16,2.975,22,1.514,31,3.238,52,3.201,66,4.764,69,2.203,92,3.52,97,3.52,112,4.193,113,1.858,115,5.805,127,3.802,161,3.07,168,4.356,172,2.942,173,5.845,185,5.438,195,1.082,198,3.607,222,2.472,224,1.77,228,2.192,241,3.279,246,4.409,258,1.575,263,2.423,279,4.12,281,1.82,282,1.501,291,2.166,293,4.409,297,3.335,325,3.781,335,2.823,343,2.932,352,2.279,358,7.179,367,6.725,385,4.109,396,3.279,432,3.537,439,4.179,461,4.209,573,4.901,574,5.696,575,4.255,594,3.52,607,3.52,627,3.963,641,3.455,644,3.151,646,5.812,647,2.942,658,3.164,682,3.139,693,4.636,731,5.184,790,10.548,804,3.253,823,3.487,849,4.685,875,2.203,1008,3.824,1023,1.854,1126,4.307,1142,2.756,1163,7.056,1175,4.744,1189,8.581,1210,3.74,1215,5.696,1217,7.012,1220,7.945,1221,4.872,1222,4.24,1290,4.607,2020,3.439,2094,3.424,2422,4.846,2461,5.666,2466,4.794,2518,13.247,2563,7.679,2571,6.215,3289,4.794,3404,4.446,4597,4.846,5242,5.562,5243,8.677,5244,7.309,5245,11.942,5246,6.636,5247,6.636,5248,6.636,5249,6.636,5250,6.636,5251,6.636,5252,6.215]],["keywords/1043",[]],["title/1044",[16,250.43]],["content/1044",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,172,6.79,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1221,7.086]],["keywords/1044",[]],["title/1045",[282,329.633]],["content/1045",[13,3.509,18,5.199,19,3.656,20,3.572,22,1.044,30,5.071,52,4.353,65,4.881,67,5.115,73,3.714,108,5.293,109,6.265,110,5.033,112,3.593,113,4.904,168,4.697,173,4.029,222,1.703,230,3.636,258,2.142,282,3.016,293,5.996,295,8.281,335,5.423,340,2.39,399,2.193,401,8.942,426,7.204,432,7.106,440,6.145,448,3.737,469,3.96,505,5.458,551,4.353,575,5.332,622,5.567,647,4.001,654,5.567,689,4.457,771,8.108,808,4.575,846,5.172,895,3.219,976,4.615,1049,5.115,1126,6.484,1221,4.175,1624,8.338,1716,5.071,1875,5.339,2563,7.819,3124,6.665,3403,6.452,3404,6.047,3405,6.047,3406,7.003,3407,7.862,3410,7.1,3411,6.098,3412,10.346,3415,7.707,3416,7.204,3423,7.003,5003,8.036,5253,9.417,5254,8.453]],["keywords/1045",[]],["title/1046",[1023,407.123]],["content/1046",[49,4.285,89,4.635,112,5.574,168,3.363,222,3.779,224,1.892,254,10.731,258,3.324,277,3.511,284,5.008,335,4.846,397,3.518,399,4.393,575,3.996,578,8.947,622,8.637,689,4.681,707,5.744,842,5.674,847,6.25,849,6.228,1126,5.726,2389,12.769,3275,7.007,3405,9.381,3425,11.535,3428,11.176,3430,8.26,3432,7.979,5245,12.769,5254,13.114,5255,14.609,5256,14.609,5257,14.609]],["keywords/1046",[]],["title/1047",[2,101.77,3,158.044,13,216.341,448,340.348]],["content/1047",[1,3.864,2,1.784,3,3.903,7,4.826,13,5.63,15,4.268,16,1.727,18,2.671,19,2.755,22,1.162,49,3.074,102,9.28,106,4.349,113,2.813,115,4.453,162,7.094,168,4.424,172,6.39,222,3.182,224,1.357,226,2.693,241,4.964,251,3.565,254,5.962,258,2.385,261,4.438,265,10.007,270,3.738,335,2.693,347,4.307,359,8.621,363,8.832,369,6.282,385,3.919,404,4.071,409,9.28,423,6.909,427,4.335,432,7.682,440,4.63,448,4.159,464,2.994,465,3.964,485,5.206,493,6.372,516,6.674,522,7.596,533,5.459,598,7.505,602,6.115,1021,5.631,1038,7.596,1049,5.693,1113,5.962,1221,6.668,1437,9.698,1851,8.578,1916,6.155,1983,7.903,2257,8.944,2305,11.875,2545,8.276,5258,10.481,5259,10.481]],["keywords/1047",[]],["title/1048",[172,364.419,1221,380.264,1988,416.7,2046,546.176]],["content/1048",[]],["keywords/1048",[]],["title/1049",[272,585.453,370,512.565,616,291.743]],["content/1049",[22,1.955,172,9.015,174,11.425,224,2.285,335,4.532,370,9.011,445,6.158,489,9.478,597,11.525,616,5.129,790,10.968,1221,9.407,3156,16.323,3766,11.629]],["keywords/1049",[]],["title/1050",[2042,532.102]],["content/1050",[2,1.189,3,1.846,6,5.271,11,4.522,13,4.325,18,2.553,19,2.633,22,1.11,49,2.939,61,3.987,66,4.316,73,3.951,127,2.788,168,5.325,172,9.144,185,3.987,186,3.553,195,1.565,208,4.725,222,3.102,224,2.221,228,3.172,251,5.832,254,5.699,291,3.134,316,4.474,321,5.471,335,4.405,340,2.542,343,4.242,347,4.116,401,4.595,432,7.435,448,5.776,516,6.379,556,4.976,575,2.74,647,6.185,731,6.866,752,6.501,764,8.199,790,10.66,902,5.022,1008,5.533,1221,7.602,1299,6.936,1344,6.936,1702,10.303,1748,5.631,2046,6.379,2080,7.45,2174,7.353,2563,9.637,2572,8.199,2573,7.261,3053,7.091,5234,9.602,5235,9.602,5236,10.018,5237,10.018,5238,10.018,5239,10.018,5240,10.018]],["keywords/1050",[]],["title/1051",[864,626.718]],["content/1051",[2,1.26,11,5.504,13,1.673,15,5.027,16,2.736,22,1.177,31,3.128,52,3.066,66,4.683,69,4.224,92,3.371,97,3.371,112,4.051,115,6.449,127,2.954,161,2.94,168,4.283,172,2.817,173,5.68,185,5.285,195,1.036,222,2.402,224,1.72,226,1.704,228,2.099,241,3.141,246,4.223,258,2.416,263,2.321,279,3.981,281,1.743,282,1.438,289,5.558,291,2.075,297,3.194,325,3.622,335,4.266,340,1.683,343,2.808,352,2.183,358,6.937,367,6.562,385,3.97,396,3.141,432,3.387,439,4.003,461,4.032,556,5.274,573,4.694,574,5.503,575,4.152,594,5.397,627,3.852,641,3.309,646,8.028,651,3.054,658,3.03,693,4.523,731,5.008,790,10.325,804,3.115,808,3.222,823,3.339,849,4.526,875,2.109,1008,3.663,1023,1.776,1126,4.162,1142,2.64,1163,6.817,1189,8.033,1210,3.582,1215,5.503,1217,6.815,1220,7.753,1221,2.94,1222,4.061,1290,7.064,1988,3.222,2020,3.294,2046,4.223,2094,3.279,2132,3.947,2422,4.641,2466,4.592,2518,13.022,2563,7.463,2571,5.953,3289,4.592,3668,8.383,3669,5.073,3670,5.236,4597,4.641,4664,5.152,4726,6.136,4995,6.356,5242,5.327,5243,8.383,5245,11.605,5246,6.356,5247,6.356,5248,6.356,5249,6.356,5250,6.356,5251,6.356,5260,7.56]],["keywords/1051",[]],["title/1052",[16,250.43]],["content/1052",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,172,6.79,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1221,7.086]],["keywords/1052",[]],["title/1053",[282,329.633]],["content/1053",[13,3.509,18,5.199,19,3.656,20,3.572,22,1.044,30,5.071,52,4.353,65,4.881,67,5.115,73,3.714,108,5.293,109,6.265,110,5.033,112,3.593,113,4.904,168,4.697,173,4.029,222,1.703,230,3.636,258,2.142,282,3.016,293,5.996,295,8.281,335,5.423,340,2.39,399,2.193,401,8.942,426,7.204,432,7.106,440,6.145,448,3.737,469,3.96,505,5.458,551,4.353,575,5.332,622,5.567,647,4.001,654,5.567,689,4.457,771,8.108,808,4.575,846,5.172,895,3.219,976,4.615,1049,5.115,1126,6.484,1221,4.175,1624,8.338,1716,5.071,1875,5.339,2563,7.819,3124,6.665,3403,6.452,3404,6.047,3405,6.047,3406,7.003,3407,7.862,3410,7.1,3411,6.098,3412,10.346,3415,7.707,3416,7.204,3423,7.003,5003,8.036,5253,9.417,5254,8.453]],["keywords/1053",[]],["title/1054",[1023,407.123]],["content/1054",[49,4.285,89,4.635,112,5.574,168,3.363,222,3.779,224,1.892,254,10.731,258,3.324,277,3.511,284,5.008,335,4.846,397,3.518,399,4.393,575,3.996,578,8.947,622,8.637,689,4.681,707,5.744,842,5.674,847,6.25,849,6.228,1126,5.726,2389,12.769,3275,7.007,3405,9.381,3425,11.535,3428,11.176,3430,8.26,3432,7.979,5245,12.769,5254,13.114,5255,14.609,5256,14.609,5257,14.609]],["keywords/1054",[]],["title/1055",[2,101.77,3,158.044,13,216.341,448,340.348]],["content/1055",[1,3.864,2,1.784,3,3.903,7,4.826,13,5.63,15,4.268,16,1.727,18,2.671,19,2.755,22,1.162,49,3.074,102,9.28,106,4.349,113,2.813,115,4.453,162,7.094,168,4.424,172,6.39,222,3.182,224,1.357,226,2.693,241,4.964,251,3.565,254,5.962,258,2.385,261,4.438,265,10.007,270,3.738,335,2.693,347,4.307,359,8.621,363,8.832,369,6.282,385,3.919,404,4.071,409,9.28,423,6.909,427,4.335,432,7.682,440,4.63,448,4.159,464,2.994,465,3.964,485,5.206,493,6.372,516,6.674,522,7.596,533,5.459,598,7.505,602,6.115,1021,5.631,1038,7.596,1049,5.693,1113,5.962,1221,6.668,1437,9.698,1851,8.578,1916,6.155,1983,7.903,2257,8.944,2305,11.875,2545,8.276,5258,10.481,5259,10.481]],["keywords/1055",[]],["title/1056",[61,298.102,172,496.644,1150,297.179,1221,332.032]],["content/1056",[]],["keywords/1056",[]],["title/1057",[272,585.453,370,512.565,616,291.743]],["content/1057",[22,1.955,172,9.015,174,11.425,224,2.285,335,4.532,370,9.011,445,6.158,489,9.478,597,11.525,616,5.129,790,10.968,1221,9.407,3156,16.323,3766,11.629]],["keywords/1057",[]],["title/1058",[2042,532.102]],["content/1058",[2,1.311,3,2.036,6,5.813,11,4.851,13,4.568,22,1.225,49,3.241,66,4.559,73,4.357,168,5.431,172,6.634,185,4.398,186,3.919,195,1.726,208,5.212,222,3.276,224,2.345,228,3.498,251,6.16,254,6.285,291,3.457,316,4.935,321,6.034,335,4.653,340,2.804,343,4.678,347,4.54,401,5.068,432,7.976,448,6.196,516,7.036,556,5.488,575,3.022,731,7.366,752,4.935,764,9.042,790,11.26,902,5.538,1008,6.102,1221,6.923,1344,7.65,1702,11.052,1748,6.21,2080,8.217,2174,8.109,2563,10.179,2572,9.042,2573,8.008,5237,11.049,5238,11.049,5239,11.049,5240,11.049]],["keywords/1058",[]],["title/1059",[864,626.718]],["content/1059",[2,1.3,11,5.601,13,1.74,15,5.116,16,2.79,22,1.511,31,3.229,52,3.19,61,2.747,66,4.538,92,3.508,97,3.508,112,5.924,115,5.792,127,3.05,161,3.059,168,4.351,172,2.932,173,5.832,185,5.426,195,1.078,198,3.594,222,2.466,224,1.766,228,2.185,241,3.268,246,4.394,258,1.57,263,2.415,279,4.109,281,1.814,282,1.496,291,2.159,293,4.394,297,3.324,325,3.769,335,3.502,343,2.922,352,2.271,358,7.16,367,7.322,385,5.097,396,3.268,432,3.525,439,4.165,461,4.195,573,4.884,574,5.68,575,4.247,594,3.508,626,3.65,627,3.179,641,3.443,646,5.796,647,2.932,651,5.047,658,3.153,682,3.129,693,4.627,731,5.17,790,10.531,804,3.242,823,3.475,849,4.672,875,2.195,1008,3.811,1023,1.848,1126,4.296,1163,7.037,1189,8.175,1210,3.728,1215,8.779,1217,6.997,1220,7.93,1221,3.059,1222,4.226,2020,3.427,2094,3.412,2132,4.107,2422,4.83,2466,4.778,2518,13.229,2563,7.662,2571,6.194,3289,4.778,3404,4.431,4597,4.83,5242,8.804,5243,8.653,5245,11.915,5246,6.614,5247,6.614,5248,6.614,5249,6.614,5250,6.614,5251,6.614,5252,6.194,5261,7.867,5262,6.901]],["keywords/1059",[]],["title/1060",[16,250.43]],["content/1060",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,172,6.79,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,1221,7.086]],["keywords/1060",[]],["title/1061",[282,329.633]],["content/1061",[13,3.509,18,5.199,19,3.656,20,3.572,22,1.044,30,5.071,52,4.353,65,4.881,67,5.115,73,3.714,108,5.293,109,6.265,110,5.033,112,3.593,113,4.904,168,4.697,173,4.029,222,1.703,230,3.636,258,2.142,282,3.016,293,5.996,295,8.281,335,5.423,340,2.39,399,2.193,401,8.942,426,7.204,432,7.106,440,6.145,448,3.737,469,3.96,505,5.458,551,4.353,575,5.332,622,5.567,647,4.001,654,5.567,689,4.457,771,8.108,808,4.575,846,5.172,895,3.219,976,4.615,1049,5.115,1126,6.484,1221,4.175,1624,8.338,1716,5.071,1875,5.339,2563,7.819,3124,6.665,3403,6.452,3404,6.047,3405,6.047,3406,7.003,3407,7.862,3410,7.1,3411,6.098,3412,10.346,3415,7.707,3416,7.204,3423,7.003,5003,8.036,5253,9.417,5254,8.453]],["keywords/1061",[]],["title/1062",[1023,407.123]],["content/1062",[49,4.285,89,4.635,112,5.574,168,3.363,222,3.779,224,1.892,254,10.731,258,3.324,277,3.511,284,5.008,335,4.846,397,3.518,399,4.393,575,3.996,578,8.947,622,8.637,689,4.681,707,5.744,842,5.674,847,6.25,849,6.228,1126,5.726,2389,12.769,3275,7.007,3405,9.381,3425,11.535,3428,11.176,3430,8.26,3432,7.979,5245,12.769,5254,13.114,5255,14.609,5256,14.609,5257,14.609]],["keywords/1062",[]],["title/1063",[2,101.77,3,158.044,13,216.341,448,340.348]],["content/1063",[1,3.864,2,1.784,3,3.903,7,4.826,13,5.63,15,4.268,16,1.727,18,2.671,19,2.755,22,1.162,49,3.074,102,9.28,106,4.349,113,2.813,115,4.453,162,7.094,168,4.424,172,6.39,222,3.182,224,1.357,226,2.693,241,4.964,251,3.565,254,5.962,258,2.385,261,4.438,265,10.007,270,3.738,335,2.693,347,4.307,359,8.621,363,8.832,369,6.282,385,3.919,404,4.071,409,9.28,423,6.909,427,4.335,432,7.682,440,4.63,448,4.159,464,2.994,465,3.964,485,5.206,493,6.372,516,6.674,522,7.596,533,5.459,598,7.505,602,6.115,1021,5.631,1038,7.596,1049,5.693,1113,5.962,1221,6.668,1437,9.698,1851,8.578,1916,6.155,1983,7.903,2257,8.944,2305,11.875,2545,8.276,5258,10.481,5259,10.481]],["keywords/1063",[]],["title/1064",[5263,1208.976,5264,1276.224]],["content/1064",[]],["keywords/1064",[]],["title/1065",[195,156.745,397,241.681,616,291.743]],["content/1065",[2,2.075,3,3.223,7,8.054,8,7.21,31,5.153,49,5.13,75,11.637,127,4.867,195,2.732,397,5.084,399,4.073,469,7.355,616,5.085,5265,19.94,5266,19.94,5267,19.94]],["keywords/1065",[]],["title/1066",[2042,532.102]],["content/1066",[2,2.249,16,3.122,145,10.076,340,4.809,352,6.238,355,5.559,1230,11.204,3384,17.013]],["keywords/1066",[]],["title/1067",[864,626.718]],["content/1067",[2,1.394,14,4.648,16,1.935,18,4.154,22,2.075,66,4.712,69,3.737,75,7.817,127,3.269,161,5.209,224,1.522,226,3.018,297,5.659,321,6.416,323,8.316,340,2.981,347,4.828,352,5.366,354,4.586,355,6.741,396,5.565,445,4.101,575,3.214,599,8.025,627,4.729,679,6.214,895,6.4,896,6.926,897,5.061,906,6.001,1026,7.091,1042,5.389,1105,8.05,1126,4.605,1142,4.676,1143,6.725,1230,11.067,1443,5.944,1755,8.737,1974,6.603,2055,8.05,2094,5.809,3206,11.749,3384,18.15,3484,9.389,5268,13.394,5269,13.394,5270,13.394,5271,13.394]],["keywords/1067",[]],["title/1068",[546,544.018,2215,812.067]],["content/1068",[22,1.939,224,2.265,509,11.748,550,11.281,652,6.634,829,10.834,860,10.791,1068,15.7,1643,9.448,1974,9.83,2412,17.49,3384,15.7,4209,16.763,5272,19.94,5273,16.763]],["keywords/1068",[]],["title/1069",[16,250.43]],["content/1069",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3384,14.46]],["keywords/1069",[]],["title/1070",[282,329.633]],["content/1070",[2,1.128,3,1.751,14,7.261,18,5.536,19,3.681,20,3.605,22,1.053,36,4.168,43,2.845,86,4.976,123,5.027,168,2.188,195,2.598,219,4.902,222,1.719,258,2.162,282,3.98,283,4.066,329,4.214,330,3.659,347,3.905,352,3.128,354,2.674,355,5.384,397,2.289,399,2.214,409,5.864,426,6.806,427,3.931,428,7.019,437,5.545,513,4.598,556,6.957,568,7.242,627,4.825,689,3.045,693,2.832,714,4.229,846,5.22,851,3.97,875,3.023,895,3.249,896,5.951,908,5.737,1133,5.737,1142,5.575,1230,9.834,1535,4.214,1621,6.581,1708,5.28,1716,5.106,1803,5.697,1875,5.376,2094,9.076,3262,4.721,3263,5.134,3384,16.476,3471,5.28,3481,6.888,3485,8.307,3486,8.307,3641,6.003,3766,6.266,4376,8.532,4985,10.033,5263,16.634,5264,10.033,5274,10.836]],["keywords/1070",[]],["title/1071",[1023,407.123]],["content/1071",[1,3.922,15,4.332,86,7.991,123,8.073,222,2.761,224,1.977,258,3.473,347,6.273,397,3.676,399,3.555,400,7.384,689,4.891,707,6.002,838,7.481,842,5.929,847,6.53,851,6.377,895,5.219,908,6.252,1023,4.088,1133,6.252,1142,7.723,3262,7.582,3273,10.931,3275,7.321,3385,16.114,3496,11.51,3500,10.684,3640,11.859,3641,9.641,3923,16.114,5263,15.265,5275,17.403]],["keywords/1071",[]],["title/1072",[3382,1328.705]],["content/1072",[]],["keywords/1072",[]],["title/1073",[195,156.745,397,241.681,616,291.743]],["content/1073",[2,1.853,3,2.877,7,7.191,8,8.114,31,4.601,49,4.581,127,4.345,195,2.439,397,4.74,399,3.637,452,10.489,469,6.567,537,16.108,616,4.54,642,11.881,652,5.923,3382,13.648,5276,17.803,5277,17.803,5278,17.803,5279,17.803,5280,17.803,5281,17.803,5282,17.803,5283,17.803,5284,17.803,5285,17.803]],["keywords/1073",[]],["title/1074",[2042,532.102]],["content/1074",[13,4.825,14,7.567,526,6.189,652,7.256,3382,19.456,5286,21.809]],["keywords/1074",[]],["title/1075",[16,250.43]],["content/1075",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3382,14.079]],["keywords/1075",[]],["title/1076",[282,329.633]],["content/1076",[3,1.921,13,3.779,14,5.928,18,5.175,19,3.938,22,1.156,30,3.801,43,3.122,52,4.821,123,5.515,195,2.74,222,1.886,224,1.35,226,3.85,237,5.156,258,2.372,282,3.249,291,3.262,330,6.752,397,2.511,399,2.429,422,3.659,423,6.874,426,6.752,427,4.313,428,7.401,464,2.978,526,4.848,568,6.524,644,6.82,652,3.955,660,9.374,682,4.728,689,3.341,693,3.107,714,4.64,721,5.861,851,4.356,872,7.004,908,4.271,960,7.977,1046,14.985,1142,4.151,1363,6.874,1471,8.233,1535,4.623,1716,5.462,1803,6.25,1875,5.751,1974,8.422,2455,11.464,2545,8.233,3262,5.179,3263,5.633,3382,15.33,3500,7.298,3641,6.586,3766,6.874,3969,8.898,4357,9.994,5287,11.888,5288,11.888,5289,11.888,5290,11.888,5291,11.888]],["keywords/1076",[]],["title/1077",[330,288.299,428,316.034,721,420.939,810,384.386,3969,639.083]],["content/1077",[22,1.231,42,6.001,43,4.693,66,2.796,68,6.101,69,3.534,136,6.899,155,4.999,195,3.466,222,3.764,224,2.695,226,4.027,251,5.332,270,5.59,290,7.682,296,4.98,330,8.01,357,5.937,366,8.153,386,6.244,414,8.499,428,7.665,455,6.658,526,3.594,568,4.837,643,8.153,652,4.214,698,6.568,704,4.999,721,11.089,810,5.702,901,6.101,915,8.261,930,9.53,1218,9.091,1455,7.612,1618,8.63,1796,7.692,1809,7.955,1853,11.727,2125,7.535,2986,9.709,3382,9.709,3969,15.5,5292,12.665,5293,11.727,5294,12.665,5295,22.494,5296,11.109]],["keywords/1077",[]],["title/1078",[1023,407.123]],["content/1078",[208,3.556,222,1.364,224,0.976,258,1.715,397,5.749,399,1.756,400,11.288,632,3.85,689,7.648,692,4.583,707,2.964,838,3.694,842,2.928,847,10.212,851,9.971,1516,5.606,1755,5.606,2125,5.113,2986,6.588,3262,3.744,3275,3.615,3277,4.651,3279,10.467,3383,7.957,3500,5.276,3642,7.538,3646,7.225,3691,6.169,3767,7.957,3944,6.767,5293,7.957,5297,8.594,5298,8.594,5299,8.594,5300,8.594,5301,8.594,5302,7.957,5303,8.594,5304,8.594,5305,8.594,5306,8.594,5307,8.594,5308,7.957,5309,8.594,5310,8.594,5311,8.594,5312,8.594,5313,8.594,5314,8.594,5315,8.594,5316,8.594,5317,8.594,5318,8.594,5319,8.594,5320,8.594,5321,8.594,5322,8.594,5323,8.594,5324,8.594,5325,8.594,5326,8.594,5327,8.594,5328,8.594,5329,8.594,5330,8.594,5331,8.594,5332,8.594]],["keywords/1078",[]],["title/1079",[3333,911.566,5333,1085.254]],["content/1079",[]],["keywords/1079",[]],["title/1080",[195,156.745,397,241.681,616,291.743]],["content/1080",[2,0.998,3,1.549,7,3.872,8,3.466,31,2.477,49,2.466,70,10.342,127,2.34,195,1.313,274,14.461,289,10.238,397,3.723,399,1.958,456,12.248,469,3.536,616,2.444,692,5.111,887,20.379,3113,17.184,3728,20.946,3729,20.076,3740,18.745,3966,15.441,5334,9.586,5335,24.459]],["keywords/1080",[]],["title/1081",[2042,532.102]],["content/1081",[2,2.093,22,1.955,345,8.723,352,5.807,354,4.962,355,5.175,515,10.292,526,5.708,599,8.684,692,10.725,816,13.402,1026,10.648,1696,13.496,2042,6.175,5336,20.112]],["keywords/1081",[]],["title/1082",[354,186.957,355,194.959,526,215.036,692,404.062,895,227.226,3484,382.815]],["content/1082",[2,1.896,22,2.415,25,5.171,89,3.927,196,7.06,297,7.698,327,11.73,340,4.056,352,6.574,354,4.496,355,4.688,386,8.983,526,7.048,692,9.717,1020,10.015,1126,6.264,1143,9.148,1696,12.227,3333,12.051,3484,9.206,3966,12.619,5333,17.928]],["keywords/1082",[]],["title/1083",[354,168.042,355,175.235,627,173.291,895,204.236,896,253.811,1026,360.583,4736,479.913]],["content/1083",[14,6.13,66,3.901,198,8.072,206,7.31,283,6.63,297,7.464,329,6.87,340,3.933,352,6.448,354,4.359,355,4.546,422,5.439,526,6.949,627,5.682,792,7.28,895,5.298,896,8.322,1026,9.354,1696,14.986,3740,14.853,4736,17.255,5333,17.584,5337,17.668]],["keywords/1083",[]],["title/1084",[16,250.43]],["content/1084",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,3333,12.051,5333,14.347]],["keywords/1084",[]],["title/1085",[282,329.633]],["content/1085",[2,0.966,3,1.5,14,4.931,18,4.664,19,3.982,20,3.087,22,1.679,30,2.967,36,3.569,86,4.261,97,4.138,139,4.261,168,1.874,195,3.016,206,3.839,219,4.198,222,1.472,226,3.892,258,1.852,274,7.472,282,3.682,329,3.609,330,5.832,347,5.123,352,2.679,354,2.29,355,2.388,369,4.878,394,4.157,397,1.96,399,1.896,400,3.937,422,4.375,426,6.893,427,5.156,428,8.749,437,4.749,520,5.521,526,4.033,546,3.663,568,7.97,626,4.305,627,3.616,659,6.227,682,3.691,689,3.994,692,4.948,693,2.426,704,3.663,714,5.547,720,9.271,810,4.178,851,3.4,875,2.589,895,6.602,896,5.297,908,6.954,1401,4.305,1535,3.609,1621,5.636,1716,4.544,1832,5.061,1875,4.785,1974,4.575,2214,10.638,3113,7.531,3262,6.192,3263,4.397,3471,4.521,3481,5.899,3482,6.227,3492,8.927,3493,8.824,3494,10.015,3740,11.949,3950,6.427,4376,7.307,4736,12.172,5333,7.307,5338,8.592,5339,9.28,5340,9.28,5341,9.28,5342,8.592]],["keywords/1085",[]],["title/1086",[1023,407.123]],["content/1086",[1,3.674,15,4.058,86,7.487,123,11.583,222,2.587,224,1.852,258,3.254,397,3.444,399,3.331,400,6.918,526,4.627,627,4.149,689,4.583,707,5.623,838,7.009,842,5.555,847,6.118,851,5.974,896,6.076,908,5.858,1023,3.83,1133,5.858,1142,7.406,1974,8.038,2125,9.701,3262,7.104,3273,10.241,3275,6.859,3334,14.302,3495,10.01,3744,12.838,3950,11.292,3966,11.292,3997,13.708,4736,11.489,5333,12.838,5338,15.098,5342,15.098,5343,16.305]],["keywords/1086",[]],["title/1087",[274,724.603,720,899.071]],["content/1087",[16,2.633,25,5.171,49,4.688,185,6.362,195,2.496,219,8.243,224,2.07,270,5.7,274,13.057,343,6.767,397,3.849,616,4.647,720,11.886,810,10.251,976,9.788,1267,7.731,1974,8.983,2214,18.589,3113,14.788,3728,15.983,3729,19.142]],["keywords/1087",[]],["title/1088",[5344,1244.143]],["content/1088",[]],["keywords/1088",[]],["title/1089",[2042,532.102]],["content/1089",[13,5.037,69,5.084,186,5.669,224,2.07,226,5.131,258,3.636,277,3.842,340,4.056,445,5.579,616,4.647,627,4.636,632,11.127,652,6.063,731,7.539,1142,6.362,1364,11.73,2255,13.638,5344,16.345,5345,18.221,5346,18.221,5347,22.77,5348,18.221]],["keywords/1089",[]],["title/1090",[864,626.718]],["content/1090",[127,5.274,224,2.454,226,4.869,277,4.555,445,6.616,752,8.465,875,6.029,5344,15.51]],["keywords/1090",[]],["title/1091",[226,257.805,445,350.312,5344,821.254]],["content/1091",[13,4.736,69,5.973,422,6.59,632,11.247,652,7.123,758,14.158,1142,7.474,5349,21.408]],["keywords/1091",[]],["title/1092",[2,78.859,224,86.077,226,170.748,279,249.209,445,232.017,5344,543.929]],["content/1092",[2,1.685,113,4.971,185,5.653,195,2.893,196,6.273,224,1.839,241,6.727,270,5.065,279,5.325,330,7.13,359,9.077,428,5.993,436,12.119,606,9.449,714,6.32,752,6.343,925,7.398,1050,6.783,1708,10.289,1765,9.834,2234,12.413,3250,14.202,3251,14.202,3252,14.992,3253,14.992,3255,14.992,3515,13.141,3798,14.992,4976,14.992,5344,11.623,5350,16.192,5351,21.116,5352,16.192,5353,16.192,5354,19.552,5355,16.192,5356,16.192]],["keywords/1092",[]],["title/1093",[16,250.43]],["content/1093",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,5344,13.183]],["keywords/1093",[]],["title/1094",[282,329.633]],["content/1094",[3,2.283,13,4.265,18,5.693,19,4.444,103,6.1,113,4.538,195,1.935,222,2.241,258,2.819,282,3.667,330,4.77,397,2.984,399,2.886,426,7.427,427,5.125,428,7.135,447,5.597,568,5.395,632,10.563,652,6.414,689,3.97,693,3.692,714,5.514,851,5.176,908,5.075,1142,6.731,1535,5.493,1716,6.164,1875,6.49,3262,6.155,3263,6.693,3492,8.873,3493,8.77,3494,9.954,5344,15.754,5354,20.32,5357,14.127,5358,14.127,5359,14.127]],["keywords/1094",[]],["title/1095",[1023,407.123]],["content/1095",[15,6.92,2282,18.039]],["keywords/1095",[]],["title/1096",[616,351.477,689,387.369]],["content/1096",[2,1.798,127,4.216,224,1.962,276,11.591,277,3.642,279,5.681,365,11.424,616,4.405,689,4.855,781,11.77,2559,11.77,4563,11.656,5308,15.995,5344,12.4,5360,17.274,5361,22.015,5362,17.274,5363,17.274,5364,17.274,5365,17.274,5366,17.274,5367,17.274,5368,17.274,5369,17.274,5370,17.274,5371,17.274,5372,17.274,5373,22.015,5374,17.274,5375,17.274,5376,17.274,5377,17.274]],["keywords/1096",[]],["title/1097",[1,192.405,15,212.515,224,96.995,326,508.015,5378,853.845]],["content/1097",[22,2.14,652,7.325,758,14.56,1795,12.971,1837,10.985,5344,15.804]],["keywords/1097",[]],["title/1098",[541,714.732,5379,1118.642]],["content/1098",[]],["keywords/1098",[]],["title/1099",[195,156.745,397,241.681,616,291.743]],["content/1099",[2,2.058,3,3.195,7,7.985,8,8.657,31,5.11,49,5.087,127,4.825,195,2.709,397,5.058,399,4.039,469,7.293,541,10.252,616,5.041,652,6.578,5379,16.045,5380,19.77]],["keywords/1099",[]],["title/1100",[16,250.43]],["content/1100",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,541,9.449,875,5.084,1023,4.28,5379,14.788]],["keywords/1100",[]],["title/1101",[282,329.633]],["content/1101",[3,2.546,13,3.485,14,7.196,18,5.722,19,4.781,222,2.5,258,3.144,282,3.944,397,3.328,399,3.218,426,7.466,447,6.241,541,8.169,689,4.427,693,4.118,714,6.148,851,5.772,896,7.729,908,5.659,1142,7.241,1535,6.126,1716,6.631,1875,6.982,1945,11.885,2094,10.056,3263,7.464,3500,9.671,3501,10.91,4418,13.244,5379,12.785]],["keywords/1101",[]],["title/1102",[1023,407.123]],["content/1102",[15,4.798,222,3.059,224,2.19,258,3.847,397,4.073,399,3.938,400,8.18,689,5.418,707,6.648,838,8.287,842,6.568,847,7.234,851,7.064,1133,6.926,3275,8.11,3484,9.74,3495,11.835,5379,15.647,5381,19.279,5382,19.279,5383,19.279]],["keywords/1102",[]],["title/1103",[3388,899.071,3389,1208.976]],["content/1103",[]],["keywords/1103",[]],["title/1104",[195,156.745,397,241.681,616,291.743]],["content/1104",[2,2.04,3,3.168,7,7.918,8,8.613,31,5.067,49,5.044,127,4.785,195,2.686,226,4.417,397,5.032,399,4.005,469,7.231,616,4.999,652,6.522,3388,12.787,5384,19.604,5385,19.604]],["keywords/1104",[]],["title/1105",[2042,532.102]],["content/1105",[1,4.273,4,10.113,13,4.196,66,4.187,115,7.067,186,5.9,195,2.598,241,7.879,279,7.677,397,4.006,526,6.624,627,6.714,731,7.846,896,7.067,921,8.116,1063,10.263,3388,12.37,5386,18.964]],["keywords/1105",[]],["title/1106",[16,250.43]],["content/1106",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,875,5.084,1023,4.28,3388,11.886,3389,15.983]],["keywords/1106",[]],["title/1107",[282,329.633]],["content/1107",[3,2.463,18,5.435,19,4.677,195,2.779,222,2.418,258,3.041,282,3.858,330,5.145,397,3.219,399,3.113,422,4.69,426,7.091,427,5.528,428,8.441,526,4.324,568,7.748,616,3.886,652,5.07,689,4.282,693,3.983,714,5.947,851,5.583,908,5.474,1050,6.383,1535,5.925,1716,6.487,1875,6.83,2248,8.655,3263,7.22,3388,14.877,3492,9.57,3493,9.46,3951,11.681,4959,13.365,5387,17.957]],["keywords/1107",[]],["title/1108",[1023,407.123]],["content/1108",[222,2.891,224,2.07,258,3.636,397,3.849,399,3.722,526,5.171,689,5.121,707,6.284,838,7.833,842,6.208,847,6.837,851,6.677,1133,8.18,2125,10.841,3262,7.939,3273,14.301,3275,7.666,3277,9.861,3279,10.262,3388,11.886,3390,16.872,3456,13.969,3503,14.347,3752,15.983,5387,14.347,5388,14.788]],["keywords/1108",[]],["title/1109",[3386,1364.669]],["content/1109",[]],["keywords/1109",[]],["title/1110",[195,156.745,397,241.681,616,291.743]],["content/1110",[2,1.709,3,2.654,7,6.632,8,7.705,31,4.244,49,4.225,127,4.008,195,2.25,362,9.972,397,4.502,399,3.354,469,6.057,500,22.351,551,10.152,616,4.187,652,5.463,3386,12.929,5389,16.42,5390,16.42,5391,16.42,5392,16.42,5393,16.42,5394,16.42,5395,16.42,5396,16.42,5397,16.42,5398,16.42,5399,16.42,5400,16.42,5401,16.42,5402,16.42,5403,16.42]],["keywords/1110",[]],["title/1111",[2042,532.102]],["content/1111",[895,6.729,896,8.363,900,14.094,3386,17.669]],["keywords/1111",[]],["title/1112",[16,250.43]],["content/1112",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,227,5.905,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3386,14.46]],["keywords/1112",[]],["title/1113",[282,329.633]],["content/1113",[3,2.229,14,4.785,18,5.469,19,4.372,31,3.564,36,5.305,43,3.621,52,5.592,123,6.398,193,10.1,195,1.89,222,2.188,258,2.752,282,3.607,330,4.657,357,6.465,397,2.913,399,2.817,426,7.136,427,5.003,428,8.022,447,5.464,526,5.382,568,7.242,689,3.876,693,3.605,714,5.383,721,6.799,851,5.053,860,7.464,872,8.126,896,7.067,900,11.911,908,4.955,998,8.289,1535,5.363,1716,6.063,1803,7.25,1875,6.384,3262,6.009,3263,6.535,3386,17.065,3640,9.397,3641,7.641,3969,10.323,5154,12.097,5184,11.595,5404,13.792,5405,13.792]],["keywords/1113",[]],["title/1114",[1023,407.123]],["content/1114",[15,4.5,123,8.387,222,2.869,224,2.054,258,3.608,397,3.819,399,3.693,526,6.43,689,5.081,707,6.235,838,7.772,842,6.16,847,6.784,851,6.625,1796,10.98,3262,7.877,3275,7.606,3277,9.785,3279,10.183,3387,16.741,3641,10.016,3752,15.858,3766,10.454,3774,14.236,4358,15.2,5154,15.858,5184,15.2,5406,18.08]],["keywords/1114",[]],["title/1115",[145,642.725,2628,1118.642]],["content/1115",[]],["keywords/1115",[]],["title/1116",[145,533.493,229,479.274,2628,928.526]],["content/1116",[5407,20.27]],["keywords/1116",[]],["title/1117",[5407,1520.246]],["content/1117",[]],["keywords/1117",[]],["title/1118",[2042,532.102]],["content/1118",[2,1.639,3,3.032,11,4.292,16,2.276,18,2.378,22,2.016,43,2.793,66,4.142,69,5.234,127,3.845,158,7.79,162,4.401,185,3.714,195,3.033,220,4.513,224,1.208,226,3.55,228,2.954,230,3.603,241,4.419,277,4.372,279,8.103,281,3.631,287,4.553,289,4.885,296,4.183,340,2.368,356,6.043,359,8.064,392,6.681,422,3.275,526,4.47,533,7.197,564,7.035,627,2.707,661,5.592,693,5.421,766,6.531,823,4.699,896,7.729,1025,6.681,1050,4.456,1083,7.636,1126,5.416,1143,5.341,1221,4.137,1488,5.714,1593,7.248,1623,6.604,1768,9.027,1850,8.155,1905,11.1,1945,9.027,2064,11.308,2181,7.367,2229,7.138,2630,10.418,2639,9.85,2640,8.634,2684,9.331,3392,9.331,3672,9.85,5407,21.046,5408,10.638,5409,10.638,5410,10.638,5411,10.638,5412,10.638]],["keywords/1118",[]],["title/1119",[223,301.858,224,156.574]],["content/1119",[]],["keywords/1119",[]],["title/1120",[223,250.557,224,129.964,229,479.274]],["content/1120",[15,6.488,16,1.33,24,4.994,61,6.001,156,11.712,168,1.859,172,7.749,549,5.852,690,5.852,831,10.632,1118,6.891,1124,15.274,1150,7.238,1151,5.1,1221,7.497,1336,5.477,1824,3.841,1956,5.02,1988,8.215,1991,12.575,2041,3.993,2046,5.142,2100,4.386,2105,8.672,3169,6.891,3244,7.74,3281,6.742,3282,24.377,3283,8.075,3286,6.376,3287,7.74,3293,13.95,3299,8.524,3307,7.74,3308,6.742,3537,6.376,3546,8.524,5413,7.74,5414,9.206,5415,10.83,5416,14.126,5417,14.126,5418,7.058,5419,8.524,5420,6.891,5421,8.524,5422,6.742,5423,8.524,5424,8.524,5425,7.249,5426,9.206,5427,7.058,5428,9.206,5429,8.524,5430,8.524,5431,6.891,5432,8.524]],["keywords/1120",[]],["title/1121",[1988,587.339,3286,954.559]],["content/1121",[]],["keywords/1121",[]],["title/1122",[2042,532.102]],["content/1122",[13,4.693,22,2.062,79,4.401,89,3.514,130,7.34,224,1.852,228,4.528,244,7.487,270,5.1,281,4.89,340,3.629,352,4.708,397,3.444,448,5.675,575,5.089,627,5.397,644,6.51,675,13.485,731,6.746,1133,5.858,1142,5.693,1154,10.365,1267,6.918,1837,8.136,1988,9.039,2023,12.498,2027,10.717,2095,11.292,3286,11.292,5433,16.305,5434,16.305,5435,16.305,5436,16.305,5437,16.305]],["keywords/1122",[]],["title/1123",[3,222.763,18,308.056]],["content/1123",[3,4.199,7,7.331,13,5.485,16,1.871,19,2.985,22,1.259,31,3.346,64,6.006,69,3.613,79,6.692,89,2.79,110,8.508,113,3.048,168,2.614,185,4.52,219,5.857,223,5.238,231,5.169,246,7.231,263,5.572,268,6.764,277,2.73,377,6.625,389,6.855,411,6.855,418,10.194,447,5.13,465,7.535,540,8.793,550,6.069,553,9.123,681,6.76,764,9.294,849,4.842,929,9.288,976,7.802,1285,7.703,1313,13.323,1709,6.955,1839,9.926,3286,15.731,5438,12.947,5439,12.947,5440,11.988]],["keywords/1123",[]],["title/1124",[16,250.43]],["content/1124",[1,5.617,2,1.911,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,223,4.022,224,2.964,227,5.905,228,5.1,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,3286,12.719]],["keywords/1124",[]],["title/1125",[282,329.633]],["content/1125",[13,5.037,14,6.322,18,5.089,19,4.2,22,1.266,31,3.365,113,4.289,167,7.528,168,4.597,223,5.249,258,4.195,282,3.465,291,5.768,329,5.063,399,2.66,426,6.989,490,3.633,512,7.046,627,5.793,652,4.332,693,3.403,818,8.587,966,8.493,1014,7.601,1036,9.535,1142,6.362,1679,5.978,1716,5.826,1875,6.134,2020,5.672,2027,12.547,2122,10.363,3286,12.619,3511,11.42,3514,8.277,3531,11.42,3533,8.083,5441,7.671]],["keywords/1125",[]],["title/1126",[1023,407.123]],["content/1126",[13,3.969,168,3.622,223,3.929,224,2.038,258,3.58,277,3.782,397,3.79,399,3.665,627,5.737,707,6.187,842,6.112,1124,9.86,1142,6.263,2027,11.392,2122,8.844,2123,11.014,3287,15.082,3430,8.898,3432,8.594,3512,18.301,3513,13.428,3514,11.405,3515,14.56,3516,14.126,3517,14.126,3518,11.865,5442,16.611]],["keywords/1126",[]],["title/1127",[616,351.477,3388,899.071]],["content/1127",[]],["keywords/1127",[]],["title/1128",[195,156.745,397,241.681,616,291.743]],["content/1128",[2,1.771,3,2.751,7,6.875,8,7.886,31,4.399,49,4.379,127,4.154,195,2.332,397,4.607,399,3.477,469,6.279,526,4.83,616,4.34,652,5.663,1948,13.814,2470,11.103,3388,11.103,5443,17.021,5444,17.021,5445,17.021,5446,17.021,5447,17.021,5448,17.021,5449,17.021,5450,17.021,5451,17.021,5452,17.021,5453,17.021,5454,17.021,5455,17.021,5456,17.021,5457,17.021,5458,17.021,5459,17.021,5460,17.021]],["keywords/1128",[]],["title/1129",[2042,532.102]],["content/1129",[2,2.023,22,1.89,161,7.559,195,2.663,222,3.084,230,6.583,345,8.431,396,8.076,490,5.424,616,4.957,652,6.468,792,8.01,875,5.424,895,7.106,896,7.244,908,6.984,2042,5.968,3388,12.68,3471,9.472]],["keywords/1129",[]],["title/1130",[895,413.323,3471,671.584]],["content/1130",[1050,10.632,3388,14.226,5387,19.982,5388,17.701,5461,19.13]],["keywords/1130",[]],["title/1131",[652,380.65,895,343.078,896,426.353]],["content/1131",[69,5.335,112,6.399,281,4.408,367,7.25,422,5.886,556,8.33,652,6.362,896,9.458,1050,9.827,1837,9.54,3388,17.26,5387,15.055,5388,15.518,5461,16.771,5462,19.12,5463,19.12]],["keywords/1131",[]],["title/1132",[16,250.43]],["content/1132",[1,5.597,2,1.896,16,3.29,22,1.772,24,4.72,89,3.927,163,6.063,224,2.955,227,5.859,228,5.06,277,3.842,281,4.2,284,5.478,354,4.496,355,4.688,372,5.624,464,4.565,490,5.084,616,4.647,875,5.084,1023,4.28,3388,11.886]],["keywords/1132",[]],["title/1133",[282,329.633]],["content/1133",[3,1.556,8,3.48,14,5.071,18,5.672,19,4.073,22,1.421,195,2.002,222,1.527,226,2.169,258,1.921,270,3.011,282,2.78,330,3.25,355,2.476,394,4.312,397,2.033,399,1.966,400,4.084,422,4.499,426,7.4,427,3.492,428,6.539,437,4.925,464,3.661,465,4.848,526,4.147,568,5.581,575,2.309,616,2.454,627,3.719,652,7.058,689,2.705,693,2.516,714,3.757,851,5.355,895,6.361,896,8.322,908,5.25,1050,4.032,1133,5.25,1142,5.102,1535,3.743,1716,4.673,1842,6.909,1859,8.163,1875,4.92,2094,8.556,2248,5.468,2811,11.861,3261,7.812,3262,4.193,3263,4.561,3388,12.868,3395,8.231,3471,8.608,3483,7.579,3484,10.717,3485,7.379,3486,7.379,3492,6.045,3493,5.976,3951,7.379,3972,8.912,4307,8.912,4376,7.579,5175,8.443,5387,15.533,5388,7.812,5461,8.443,5464,9.625,5465,9.625]],["keywords/1133",[]],["title/1134",[1023,407.123]],["content/1134",[43,1.767,160,3.154,222,1.068,224,0.764,258,1.343,289,3.09,397,5.673,399,1.375,400,10.672,575,1.614,689,7.547,707,2.321,838,2.893,842,2.293,847,10.077,851,9.84,1114,5.298,1133,3.957,1179,12.949,1859,3.758,2096,4.515,2125,4.004,2471,5.657,2607,4.044,3261,8.94,3262,2.932,3275,2.831,3277,3.642,3279,12.651,3280,5.461,3388,4.389,3391,6.231,3456,5.159,3463,6.231,3503,5.298,4445,6.231,5175,22.062,5387,5.298,5388,5.461,5466,6.729,5467,6.729,5468,6.729,5469,6.729,5470,6.729,5471,6.729,5472,6.729,5473,6.729,5474,6.729,5475,6.729,5476,23.005,5477,6.729,5478,6.729,5479,6.729,5480,6.729,5481,6.729,5482,6.729,5483,6.729,5484,6.729,5485,6.729,5486,6.729,5487,6.729,5488,6.729,5489,6.729,5490,6.729,5491,6.729,5492,6.729,5493,6.729,5494,6.729,5495,6.729,5496,6.729,5497,6.729,5498,6.729,5499,6.729,5500,6.729,5501,6.729,5502,6.729,5503,6.729,5504,6.729,5505,6.729,5506,6.729,5507,6.729,5508,6.729,5509,6.729,5510,6.729,5511,11.015,5512,6.729]],["keywords/1134",[]],["title/1135",[3281,1269.296]],["content/1135",[]],["keywords/1135",[]],["title/1136",[2042,532.102]],["content/1136",[1,3.599,22,1.553,61,5.575,66,5.153,69,4.456,92,9.331,127,3.898,168,4.225,220,6.776,223,3.497,224,2.377,335,4.715,340,3.555,347,5.756,352,4.611,447,6.327,516,8.919,575,3.831,616,4.072,646,7.408,693,4.174,771,6.865,779,12.709,829,7.189,1074,7.968,1133,5.737,1150,5.558,1214,10.417,1215,7.26,1217,7.189,1220,9.375,2020,6.957,2462,13.143,3281,15.325,3400,14.787,5513,15.969]],["keywords/1136",[]],["title/1137",[16,250.43]],["content/1137",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,3281,13.888]],["keywords/1137",[]],["title/1138",[282,329.633]],["content/1138",[8,2.986,11,5.982,13,2.872,16,1.876,18,4.419,19,2.993,20,4.32,22,0.803,30,2.64,61,2.883,65,3.754,66,4.015,112,7.024,113,3.056,155,3.259,168,4.834,172,4.838,220,3.504,221,4.146,223,3.983,224,1.822,226,2.926,258,3.629,262,3.566,281,1.904,282,2.469,291,4.402,295,4.312,307,2.78,335,4.947,352,2.384,367,3.131,389,6.874,397,1.745,399,2.652,404,2.813,417,4.651,426,6.981,448,4.519,461,6.923,512,4.469,518,3.211,556,3.598,575,4.363,616,2.106,647,4.838,658,3.31,693,4.193,759,6.502,818,3.892,842,4.423,849,4.855,870,8.469,875,2.304,993,4.469,1014,5.416,1023,1.94,1110,4.539,1126,5.515,1150,2.874,1210,3.913,1215,5.902,1217,7.222,1218,5.928,1220,10.48,1221,6.238,1222,4.436,1224,7.244,1230,6.732,1679,3.792,1709,6.974,1716,4.151,1875,4.371,2020,3.598,2469,6.502,2475,7.244,3402,7.647,3418,7.647,3419,7.647,3420,7.647,3421,7.647,3422,7.647,3553,6.331,3848,5.316,3850,5.542,4683,5.719,5441,4.866,5514,6.702,5515,6.702]],["keywords/1138",[]],["title/1139",[1023,407.123]],["content/1139",[2,2.13,13,4.528,112,5.167,136,5.96,139,7.089,168,3.117,223,3.381,224,1.754,258,3.081,277,3.255,335,3.479,397,3.262,399,3.154,415,8.294,575,3.704,707,5.324,842,5.26,929,7.901,1124,8.486,1126,5.308,1215,7.019,1222,8.294,1224,13.543,1226,12.531,1228,12.157,1230,10.613,1240,11.836,1241,13.535,1242,13.543,1243,13.543,1244,13.543,1245,13.543,1246,13.543,1247,13.543,1248,13.543,1249,13.543,1250,13.543,1251,13.543,1252,13.543,1253,13.543,1254,13.543,3283,13.543,3430,7.657,3432,7.396,5516,8.77,5517,15.439,5518,15.439]],["keywords/1139",[]],["title/1140",[382,745.942,2473,745.942]],["content/1140",[1,0.917,2,0.747,3,0.658,11,1.109,13,0.9,22,0.698,25,1.155,29,2.526,30,1.301,31,1.052,39,2.445,41,2.018,43,1.068,49,1.047,52,1.65,64,1.887,66,0.898,68,1.96,69,1.135,71,3.112,73,1.407,77,2.471,79,1.098,87,1.69,97,1.814,100,2.691,107,2.124,110,1.907,113,0.958,119,2.353,136,1.571,137,2.154,139,3.295,146,2.096,155,1.606,168,1.449,172,1.516,181,1.704,185,1.421,186,2.232,192,2.018,196,1.576,199,2.397,202,2.818,211,2.471,225,1.96,226,0.917,227,1.308,230,3.26,262,1.757,265,2.375,266,1.938,267,2.619,283,1.527,287,1.741,289,4.42,290,1.749,291,1.116,303,1.741,307,1.37,312,1.741,320,2.018,330,1.374,338,2.124,343,1.511,358,2.332,362,2.471,364,2.292,368,1.481,370,1.823,374,1.506,382,6.281,384,2.619,385,1.334,394,1.823,404,1.386,405,2.353,408,1.734,409,2.202,410,2.445,416,2.11,428,1.506,432,1.823,440,2.78,452,2.397,455,2.139,458,1.797,463,2.73,464,1.798,465,1.35,466,2.445,467,1.65,485,1.773,491,2.555,493,2.17,494,3.721,505,2.069,511,3.437,518,1.582,519,2.236,528,2.654,532,2.254,533,1.859,540,1.971,550,1.907,572,2.471,575,0.976,594,1.814,603,1.887,607,1.814,620,2.498,626,1.887,651,1.643,654,2.11,658,1.631,677,1.814,679,1.887,693,1.876,696,2.619,697,2.069,704,1.606,712,2.236,717,2.03,719,2.236,721,2.006,730,4.358,746,1.841,747,2.691,753,2.921,787,2.691,792,1.677,808,1.734,812,1.823,818,1.917,829,1.832,834,2.555,835,1.938,846,1.96,858,2.292,860,2.202,871,2.056,875,1.135,897,1.537,906,1.823,908,1.462,909,2.273,938,2.421,957,4.313,964,2.082,976,3.084,1007,2.124,1008,1.971,1022,2.254,1032,2.691,1043,2.375,1063,2.202,1141,2.587,1154,2.587,1158,2.691,1189,1.618,1194,3.204,1204,2.332,1237,2.11,1270,2.619,1273,2.498,1280,2.73,1281,2.691,1308,2.619,1310,2.772,1312,4.313,1315,2.555,1344,2.471,1348,2.332,1352,2.772,1355,2.421,1393,4.958,1399,2.772,1400,2.772,1401,1.887,1453,2.219,1488,2.186,1490,2.73,1559,2.654,1561,2.587,1565,2.587,1579,3.119,1594,2.273,1611,2.421,1633,2.421,1643,3.4,1679,1.868,1703,2.921,1708,1.982,1731,2.397,1762,2.471,1775,2.186,1794,2.555,1808,2.654,1832,2.219,1856,2.587,1857,2.619,1879,2.867,1974,2.006,1989,2.526,2041,3.112,2055,2.445,2078,2.186,2081,2.445,2086,2.375,2127,2.445,2131,2.619,2170,2.73,2194,2.921,2248,2.311,2264,2.867,2473,6.281,2510,4.041,2549,2.73,2550,2.772,2564,2.311,2846,2.498,2898,3.204,2968,2.691,3009,2.818,3064,2.471,3102,2.818,3395,2.292,3536,2.867,3574,2.921,3626,2.555,3788,2.691,3887,2.818,4153,2.818,4266,2.555,4541,4.507,4609,2.587,4636,2.619,4777,2.772,4903,2.98,5226,2.98,5243,4.969,5519,3.204,5520,3.204,5521,3.302,5522,3.302,5523,2.867,5524,2.772,5525,2.867,5526,3.302,5527,2.867,5528,3.045,5529,2.691,5530,3.302,5531,3.302,5532,2.867,5533,2.818,5534,3.045,5535,3.045,5536,2.818,5537,2.818,5538,3.045,5539,3.045,5540,2.867,5541,3.045,5542,3.302,5543,2.818,5544,4.619,5545,3.045,5546,3.302,5547,3.302,5548,2.98,5549,3.302,5550,2.818,5551,3.302,5552,3.045,5553,3.302,5554,3.119,5555,3.302,5556,2.867,5557,3.302,5558,2.818,5559,3.045,5560,3.045,5561,2.867,5562,3.045,5563,3.204,5564,3.302,5565,3.302,5566,2.772,5567,3.302,5568,2.98,5569,3.204,5570,3.302,5571,3.045,5572,3.204,5573,3.302,5574,2.818,5575,3.302,5576,3.302,5577,3.302,5578,2.867,5579,3.204,5580,3.045,5581,2.98,5582,3.302,5583,2.867,5584,3.302,5585,2.98,5586,3.045,5587,3.302,5588,3.302,5589,3.302,5590,3.302,5591,3.302,5592,3.302,5593,2.818,5594,3.302,5595,2.98,5596,3.302,5597,3.302,5598,3.045,5599,3.302,5600,3.302,5601,3.302,5602,3.045,5603,3.302,5604,3.302,5605,3.045,5606,3.302,5607,2.921,5608,3.302,5609,3.045,5610,2.98,5611,3.204,5612,4.969,5613,3.045,5614,3.045,5615,3.045,5616,2.772,5617,3.045,5618,3.302,5619,2.867,5620,3.045,5621,3.045,5622,2.921,5623,3.302,5624,5.824,5625,3.302,5626,3.045,5627,3.302,5628,3.045,5629,2.818,5630,3.302,5631,3.045,5632,3.045,5633,3.302,5634,3.302,5635,3.045,5636,3.045,5637,3.302,5638,3.302,5639,3.302,5640,3.045,5641,3.045,5642,3.302,5643,2.867,5644,4.969,5645,3.302,5646,2.98,5647,3.045,5648,3.045,5649,2.867,5650,2.867,5651,3.045,5652,3.045,5653,3.045,5654,2.818,5655,2.867,5656,3.045,5657,3.302,5658,2.867,5659,3.045,5660,3.302,5661,3.045,5662,3.302,5663,3.045,5664,3.302,5665,3.045,5666,3.045,5667,3.302,5668,3.204,5669,3.045,5670,3.045,5671,3.045,5672,3.045,5673,3.045,5674,3.045,5675,3.045,5676,3.045,5677,3.045,5678,3.045,5679,3.045,5680,3.045,5681,3.045,5682,3.045,5683,2.818,5684,3.302,5685,3.302,5686,3.045,5687,2.867,5688,3.045,5689,3.302,5690,3.045,5691,3.045,5692,3.204,5693,3.045,5694,2.691,5695,2.867,5696,3.045,5697,3.302,5698,3.045,5699,2.98,5700,3.045,5701,2.98,5702,3.045,5703,3.302,5704,3.119,5705,3.045,5706,3.045,5707,3.204,5708,3.045,5709,2.73,5710,3.045,5711,3.045,5712,2.98,5713,3.045]],["keywords/1140",[]],["title/1141",[24,253.302,831,473.743,1988,416.7,2105,600.333]],["content/1141",[]],["keywords/1141",[]],["title/1142",[2042,532.102]],["content/1142",[13,4.802,22,1.643,24,4.377,62,8.981,69,4.715,73,5.845,224,1.92,226,3.808,244,7.759,281,5.004,340,4.832,352,6.267,445,5.174,575,5.208,627,5.523,644,6.746,731,6.991,804,6.963,831,11.619,1074,8.431,1133,6.07,1142,5.899,1313,10.742,2023,9.956,2027,10.967,2095,11.703,5714,13.714,5715,15.646]],["keywords/1142",[]],["title/1143",[16,250.43]],["content/1143",[2,2.188,3,3.397,16,3.037,22,2.044,25,5.965,62,8.697,89,4.53,223,4.604,282,3.998,574,9.556,875,5.865]],["keywords/1143",[]],["title/1144",[282,329.633]],["content/1144",[13,4.328,14,5.008,18,4.707,19,3.327,20,5.819,22,1.7,24,5.067,30,3.027,31,4.52,33,5.691,41,4.696,48,7.259,52,7.932,62,8.713,67,4.511,73,6.767,103,6.232,105,6.019,110,6.766,120,6.466,130,7.874,155,3.737,167,5.475,195,1.977,223,4.284,258,3.904,282,2.745,329,3.682,399,1.934,409,5.124,426,7.371,440,3.669,464,2.372,469,3.493,490,2.642,505,4.814,519,5.204,527,4.91,550,4.439,627,4.977,632,4.242,652,3.15,693,2.475,831,6.992,835,6.876,862,6.934,925,4.326,966,6.176,976,4.07,1030,6.797,1036,6.934,1142,5.039,1708,4.613,1716,4.615,1731,8.504,1799,9.546,1800,7.753,1809,5.947,1875,4.859,2027,8.836,2106,10.361,2121,12.144,2122,8.623,3411,5.379,3514,6.019,3518,6.262,3901,7.685,5716,7.96,5717,7.087,5718,6.557,5719,7.96,5720,7.96,5721,7.96,5722,8.767,5723,8.767,5724,8.767]],["keywords/1144",[]],["title/1145",[1023,407.123]],["content/1145",[62,9.514,120,8.293,223,4.054,224,2.103,258,3.694,277,3.903,397,3.91,399,3.782,707,6.384,831,8.968,842,6.307,862,13.557,929,9.473,2122,9.126,2123,11.364,3432,8.868,3514,11.768,3518,12.243,5207,14.575,5516,10.515,5717,13.855,5725,13.855,5726,17.14,5727,15.563,5728,15.563]],["keywords/1145",[]],["title/1146",[24,357.029,113,324.447]],["content/1146",[1,3.526,3,2.529,16,2.983,24,5.986,42,7.414,52,6.345,62,6.474,72,13.126,113,4.86,120,7.01,130,7.044,181,6.555,223,4.522,226,3.526,237,6.786,258,3.123,270,4.895,330,5.283,399,4.721,401,8.307,414,10.5,464,5.173,527,8.114,605,7.714,660,7.335,704,6.176,915,10.207,1363,9.048,4541,9.828,5190,12.32,5537,10.837,5729,13.155,5730,13.155,5731,13.155,5732,14.488,5733,14.488,5734,14.488,5735,13.155,5736,13.155]],["keywords/1146",[]],["title/1147",[974,789.838,2476,971.224]],["content/1147",[2,1.697,3,2.635,24,6.468,113,3.838,152,13.513,161,6.341,195,2.906,217,8.513,220,6.918,223,4.646,237,10.226,262,10.18,296,6.412,321,7.811,330,5.505,348,8.695,349,9.516,495,6.015,627,4.149,739,13.323,964,8.344,980,12.5,1121,7.768,1443,7.236,2269,12.838,2476,11.489,2570,12.204,4687,12.5,5737,13.708,5738,13.708]],["keywords/1147",[]],["title/1148",[1988,587.339,3537,954.559]],["content/1148",[]],["keywords/1148",[]],["title/1149",[2042,532.102]],["content/1149",[1,2.934,11,3.547,13,4.031,16,2.633,22,1.771,24,3.372,62,8.697,66,4.023,69,5.084,73,4.504,89,2.806,163,4.332,168,3.679,186,4.051,220,5.524,224,2.07,226,2.934,244,5.978,281,4.846,335,2.934,340,4.056,347,4.692,352,5.261,445,3.987,546,5.139,575,5.043,616,3.32,627,5.348,644,5.198,693,3.403,731,5.387,767,9.937,771,5.597,804,5.365,829,5.861,831,10.184,864,4.708,1074,6.496,1078,8.871,1133,4.677,1142,4.546,1217,5.861,1220,5.833,1313,8.277,1794,8.177,1964,9.174,2023,7.671,2027,6.578,2095,9.017,2122,6.419,3537,14.558,3790,11.42,4631,10.251,5714,10.567,5739,13.02,5740,12.055,5741,12.055]],["keywords/1149",[]],["title/1150",[16,250.43]],["content/1150",[2,2.111,3,3.279,16,2.931,22,1.972,25,5.757,47,9.178,89,4.372,168,4.096,223,4.443,282,3.858,335,4.572,574,9.223,875,5.661,1988,8.645,3537,14.05]],["keywords/1150",[]],["title/1151",[282,329.633]],["content/1151",[3,1.384,11,5.806,13,4.103,14,4.634,16,1.237,18,5.146,19,3.079,20,2.849,22,1.298,30,2.738,31,3.452,62,9.208,65,3.892,73,4.62,103,3.697,112,2.866,113,3.865,120,3.836,130,3.855,155,3.379,168,4.302,186,4.155,195,2.25,220,3.633,221,4.299,223,3.596,258,1.709,270,2.678,282,2.54,291,4.506,335,5.553,353,5.256,389,7.071,397,1.809,399,2.728,426,7.301,448,2.98,490,2.389,512,4.634,521,7.928,539,6.033,546,3.379,556,3.73,575,4.825,627,4.719,647,3.191,685,5.746,693,3.491,767,7.283,818,6.294,831,10.323,834,5.378,993,4.634,1014,5.572,1078,13.704,1126,5.645,1142,4.663,1210,4.057,1661,6.949,1679,3.932,1709,4.599,1716,4.27,1875,4.496,1943,4.907,2020,3.73,2027,6.747,2122,9.144,2123,5.256,3403,5.146,3514,5.443,3518,5.663,3533,5.316,3537,5.93,3553,6.564,3848,5.512,5441,5.045,5742,8.562,5743,8.562,5744,7.198]],["keywords/1151",[]],["title/1152",[1023,407.123]],["content/1152",[62,9.152,112,5.824,168,3.514,223,3.811,224,1.977,258,3.473,277,3.669,335,3.922,397,3.676,399,3.555,575,5.307,707,6.002,842,5.929,929,8.906,1126,7.605,1628,11.204,2122,8.58,2123,13.58,3430,8.631,3432,8.337,3514,11.063,3518,11.51,5516,9.886,5725,13.026,5745,17.403,5746,17.403,5747,17.403,5748,17.403,5749,17.403,5750,17.403]],["keywords/1152",[]],["title/1153",[714,537.961,2607,828.392]],["content/1153",[16,3.627,186,6.661,224,2.432,616,5.459,660,10.035,714,8.356,2607,12.867,5718,14.826]],["keywords/1153",[]],["title/1154",[864,626.718]],["content/1154",[2,1.363,9,8.429,16,3.298,22,2.335,30,4.186,62,5.417,92,5.838,112,4.382,115,6.817,162,7.568,181,9.562,224,1.487,228,3.636,258,2.613,279,4.306,281,3.018,303,5.604,335,2.95,367,4.965,461,9.755,594,5.838,627,4.654,646,8.486,658,5.247,693,6.503,698,6.789,767,11.498,804,5.395,823,5.783,831,6.343,849,6.841,917,10.037,1023,3.075,1074,6.533,1078,8.921,1215,5.952,1217,10.276,1220,10.226,1221,5.091,1222,7.033,1910,7.253,2020,5.704,2027,6.615,2463,11.007,2494,15.379,3663,8.038,5751,13.093,5752,13.093]],["keywords/1154",[]],["title/1155",[113,324.447,612,1118.642]],["content/1155",[1,3.346,2,1.545,3,3.638,18,3.319,113,5.909,168,4.026,221,7.455,223,4.367,224,1.687,251,4.43,277,3.13,324,7.277,340,3.305,360,8.933,363,7.648,367,5.63,368,5.404,385,4.869,399,3.033,404,6.793,440,5.753,447,5.883,465,7.468,467,8.085,485,9.808,493,7.918,504,7.455,613,10.874,767,8.097,1310,10.117,1681,17.49,1684,11.748,1709,7.976,2510,8.363,3537,10.283,5533,13.809,5753,12.051,5754,14.848,5755,14.848]],["keywords/1155",[]],["title/1156",[546,544.018,2215,812.067]],["content/1156",[3,3.397,11,5.728,16,1.881,22,1.771,25,3.695,49,3.35,66,4.023,67,8.681,70,5.238,71,5.647,79,3.514,88,7.825,115,4.852,168,4.839,180,6.307,220,7.731,223,5.698,225,6.272,231,5.198,258,2.598,262,7.867,282,2.476,340,2.898,380,7.825,386,8.983,399,2.66,404,4.436,457,5.833,463,8.737,469,4.803,495,4.803,523,9.745,546,5.139,579,8.283,748,6.994,829,5.861,849,4.869,964,9.324,993,12.323,1443,5.778,1554,8.277,1923,8.382,1964,9.174,2054,10.251,3537,12.619,5756,17.672,5757,18.221,5758,13.02,5759,13.02]],["keywords/1156",[]],["title/1157",[33,687.605,110,536.304,998,687.605]],["content/1157",[3,3.575,22,1.692,33,10.46,66,3.842,67,8.291,79,6.564,110,8.158,195,3.031,223,5.326,231,6.948,265,10.157,268,6.486,343,6.463,353,10.684,394,7.797,465,7.338,492,12.493,503,10.931,632,7.797,979,20.482,1616,13.033,1748,8.58,2060,13.026,5440,16.114,5760,17.403]],["keywords/1157",[]],["title/1158",[291,378.221,1014,574.998]],["content/1158",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1158",[]],["title/1159",[156,581.805,168,172.392,831,413.654,1988,363.847,5413,717.825]],["content/1159",[]],["keywords/1159",[]],["title/1160",[2042,532.102]],["content/1160",[13,4.374,22,1.425,24,3.798,62,8.18,69,4.091,73,7.737,162,6.066,185,5.119,186,4.561,224,2.246,226,4.455,244,6.732,281,5.156,340,4.401,352,5.708,367,5.559,445,6.053,575,5.367,627,6.36,644,5.853,731,6.066,804,8.146,831,9.578,1074,9.865,1133,5.267,1142,5.119,1313,9.32,1916,7.552,2023,11.648,2027,12.095,2095,10.153,5714,11.899,5761,18.305,5762,14.661]],["keywords/1160",[]],["title/1161",[16,250.43]],["content/1161",[2,2.188,3,3.397,16,3.037,22,2.044,25,5.965,89,4.53,168,4.244,223,4.604,282,3.998,574,9.556,875,5.865]],["keywords/1161",[]],["title/1162",[282,329.633]],["content/1162",[3,1.719,13,4.588,14,5.466,16,1.537,18,5.182,19,3.631,20,3.539,22,1.034,24,4.081,30,5.037,41,5.276,44,6.848,62,7.762,73,3.68,103,4.593,113,2.504,130,8.445,155,4.199,168,4.47,195,1.457,224,1.208,258,2.123,282,2.996,291,5.691,335,2.397,389,8.34,397,2.247,399,3.218,426,7.466,458,4.699,512,5.757,513,6.684,616,2.713,622,12.023,627,5.899,681,5.554,685,7.138,704,4.199,831,5.154,1014,7.826,1142,5.5,1616,6.267,1709,5.714,1716,5.037,1832,5.801,1875,5.303,2020,4.635,2027,11.186,2106,11.308,2122,9.248,3152,7.636,3533,6.604,3690,9.331,3848,6.848,4767,9.85,4802,8.634,5441,6.267,5718,7.367,5763,10.638,5764,9.85,5765,8.634]],["keywords/1162",[]],["title/1163",[1023,407.123]],["content/1163",[62,9.329,168,3.622,223,3.929,224,2.038,258,3.58,277,3.782,397,3.79,399,3.665,458,7.924,622,11.693,707,6.187,831,8.691,842,6.112,929,9.181,2122,8.844,2123,11.014,3432,8.594,3688,15.736,3690,15.736,4802,14.56,5207,14.126,5441,10.57,5516,10.191,5725,13.428,5727,15.082,5728,15.082,5764,16.611,5766,17.94]],["keywords/1163",[]],["title/1164",[19,263.73,440,443.265,5413,961.816]],["content/1164",[2,2.142,3,3.618,19,5.655,20,4.168,43,5.405,52,7.191,66,2.766,152,6.78,156,8.537,165,9.605,167,7.244,168,2.53,195,2.43,223,2.744,369,9.323,426,7.911,427,8.899,428,7.62,433,11.601,440,9.153,465,7.838,551,7.191,572,7.609,608,7.312,616,3.195,631,7.454,704,4.945,996,12.497,1267,5.316,1561,7.965,1679,8.143,1936,9.865,2081,10.659,2501,10.989,5413,17.307,5767,12.529,5768,10.989,5769,10.168,5770,9.865]],["keywords/1164",[]],["title/1165",[168,278.284,2245,1208.976]],["content/1165",[22,1.744,24,4.647,168,4.553,173,6.732,195,2.458,223,3.929,224,2.038,227,5.768,316,7.028,329,6.976,367,6.803,368,8.976,539,12.642,546,8.9,571,12.878,616,4.575,804,7.392,1755,11.702,2027,9.064,2049,14.56,2245,21.631,5761,16.611,5771,17.94,5772,17.94]],["keywords/1165",[]],["title/1166",[570,911.566,1443,611.676]],["content/1166",[3,3.168,79,5.292,89,4.225,168,5.18,173,7.356,180,9.497,223,4.293,277,4.133,404,6.679,443,11.441,575,4.703,847,7.356,980,15.029,1121,11.347,1443,8.7,2215,11.55]],["keywords/1166",[]],["title/1167",[24,221.174,156,581.805,831,413.654,1988,363.847,5415,654.579]],["content/1167",[]],["keywords/1167",[]],["title/1168",[2042,532.102]],["content/1168",[13,4.802,22,1.643,24,4.377,62,8.981,69,4.715,73,5.845,224,1.92,226,3.808,244,7.759,281,5.004,340,4.832,352,6.267,445,5.174,575,5.208,627,5.523,644,6.746,731,6.991,804,6.963,831,11.619,1074,8.431,1133,6.07,1142,5.899,1313,10.742,2023,9.956,2027,10.967,2095,11.703,5714,13.714,5715,15.646]],["keywords/1168",[]],["title/1169",[16,250.43]],["content/1169",[2,2.188,3,3.397,16,3.037,22,2.044,25,5.965,62,8.697,89,4.53,223,4.604,282,3.998,574,9.556,875,5.865]],["keywords/1169",[]],["title/1170",[282,329.633]],["content/1170",[13,4.374,14,5.087,18,4.75,19,3.38,20,5.893,22,1.425,24,4.588,30,3.09,31,4.578,33,10.645,41,4.793,52,7.182,53,7.844,62,8.792,73,6.127,103,6.33,110,6.872,120,6.568,130,7.974,167,5.589,195,2.009,223,4.33,258,3.945,282,2.788,289,9.078,329,3.758,399,1.974,426,6.981,490,2.697,519,5.312,550,8.303,551,5.945,627,5.03,632,4.33,652,3.216,693,2.526,831,7.103,862,7.078,966,6.305,976,9.615,1030,10.524,1036,7.078,1142,5.118,1708,4.709,1716,4.688,1799,11.714,1809,6.07,1875,4.935,2027,8.948,2106,10.524,2121,12.273,2122,8.732,3514,6.144,3518,6.392,3901,7.844,5021,8.478,5716,8.126,5717,7.234,5718,6.694,5719,8.126,5720,8.126,5721,8.126,5773,8.949,5774,8.949,5775,8.949,5776,8.949]],["keywords/1170",[]],["title/1171",[1023,407.123]],["content/1171",[62,9.514,120,8.293,223,4.054,224,2.103,258,3.694,277,3.903,397,3.91,399,3.782,707,6.384,831,8.968,842,6.307,862,13.557,929,9.473,2122,9.126,2123,11.364,3432,8.868,3514,11.768,3518,12.243,5207,14.575,5516,10.515,5717,13.855,5725,13.855,5727,15.563,5728,15.563,5777,17.14]],["keywords/1171",[]],["title/1172",[19,263.73,195,156.745,5415,877.073]],["content/1172",[2,1.177,3,2.663,19,5.779,20,3.763,24,2.93,41,5.609,43,5.104,44,7.281,48,12.633,52,4.586,106,5.998,152,6.121,195,3.11,426,7.455,427,8.597,428,8.403,455,5.946,465,7.086,515,5.788,551,4.586,608,6.601,846,5.448,978,9.921,996,11.611,1267,4.799,1561,10.475,1679,7.566,1803,8.663,1834,8.905,1876,16.125,1936,12.975,2081,6.798,2252,11.829,5415,18.167,5768,9.921,5769,9.179,5770,12.975,5778,10.472,5779,21.021,5780,17.999,5781,10.472,5782,15.258]],["keywords/1172",[]],["title/1173",[24,357.029,113,324.447]],["content/1173",[1,3.526,3,2.529,16,2.983,24,5.986,42,7.414,52,6.345,62,6.474,72,13.126,113,4.86,120,7.01,130,7.044,181,6.555,223,4.522,226,3.526,237,6.786,258,3.123,270,4.895,330,5.283,399,4.721,401,8.307,414,10.5,464,5.173,527,8.114,605,7.714,660,7.335,704,6.176,915,10.207,1363,9.048,4541,9.828,5190,12.32,5537,10.837,5729,13.155,5730,13.155,5731,13.155,5735,13.155,5736,13.155,5783,14.488,5784,14.488,5785,14.488]],["keywords/1173",[]],["title/1174",[974,789.838,2476,971.224]],["content/1174",[2,1.697,3,2.635,24,6.468,113,3.838,152,13.513,161,6.341,195,2.906,217,8.513,220,6.918,223,4.646,237,10.226,262,10.18,296,6.412,321,7.811,330,5.505,348,8.695,349,9.516,495,6.015,627,4.149,739,13.323,964,8.344,980,12.5,1121,7.768,1443,7.236,2269,12.838,2476,11.489,2570,12.204,4687,12.5,5737,13.708,5738,13.708]],["keywords/1174",[]],["title/1175",[549,876.205,1150,479.72]],["content/1175",[]],["keywords/1175",[]],["title/1176",[2042,532.102]],["content/1176",[1,3.242,13,3.183,22,1.399,24,3.727,59,6.356,61,6.815,62,8.077,66,4.31,69,4.015,79,3.884,127,3.512,136,5.555,146,7.412,195,1.971,220,6.105,222,2.283,224,2.218,226,3.242,228,3.996,277,3.034,281,3.317,288,10.123,303,6.158,330,4.858,340,3.203,352,5.636,413,10.225,422,4.429,445,4.406,447,5.701,513,8.283,526,5.54,549,12.41,605,7.094,752,7.647,804,5.929,823,6.356,864,5.203,873,6.781,902,6.326,1120,9.965,1150,6.794,1212,7.847,1991,9.386,1992,9.804,2122,7.094,5786,13.323,5787,14.389,5788,14.389]],["keywords/1176",[]],["title/1177",[864,626.718]],["content/1177",[13,5.437,16,2.983,22,1.521,61,5.463,66,4.559,69,5.761,106,5.695,127,3.819,185,5.463,196,6.062,224,1.777,230,5.299,296,6.153,352,4.518,359,6.726,368,5.695,385,5.131,512,8.468,513,10.426,526,7.249,575,4.954,627,3.981,752,6.13,877,11.026,902,6.88,1021,7.374,1049,7.454,1150,5.446,1189,6.223,2132,8.169,2545,10.837,5786,14.488,5789,15.647,5790,15.647,5791,15.647]],["keywords/1177",[]],["title/1178",[16,250.43]],["content/1178",[2,2.149,3,3.337,11,4.263,16,2.261,22,2.007,25,5.859,47,7.078,89,4.45,136,6.04,155,8.149,160,7.335,168,4.169,195,2.144,223,3.427,224,1.777,225,7.538,281,3.607,282,2.976,286,10.5,288,11.983,296,6.153,335,3.526,343,5.811,397,3.305,429,9.714,447,6.199,549,16.239,574,7.113,579,7.113,606,9.132,628,12.32,667,10.662,875,4.366,1311,12.32,1837,7.808,2777,12.699]],["keywords/1178",[]],["title/1179",[282,329.633]],["content/1179",[3,1.595,14,6.933,16,2.152,18,5.04,19,3.434,22,1.448,31,2.551,59,4.36,61,3.446,62,9.329,89,2.127,103,4.262,106,5.422,108,4.866,113,2.323,120,6.673,155,5.879,168,4.553,205,4.627,220,6.32,221,4.955,223,3.262,226,2.224,241,4.101,258,2.973,281,2.275,282,2.833,284,2.968,288,12.138,291,4.087,387,4.782,389,5.226,394,4.422,397,2.085,399,3.043,426,7.191,447,8.497,457,4.422,513,6.32,526,4.227,549,13.634,556,4.3,626,4.579,685,6.623,816,5.468,818,4.652,993,5.342,1014,6.214,1133,3.546,1150,3.435,1267,4.188,1643,4.677,1679,4.532,1709,5.302,1716,4.763,1754,14.56,1837,4.925,1875,5.015,1991,13.034,2122,9.851,2132,5.153,3533,6.128,3845,8.658,3846,7.567,3848,6.354,4569,12.089,5441,5.815,5792,8.658,5793,9.87,5794,9.87]],["keywords/1179",[]],["title/1180",[1023,407.123]],["content/1180",[62,10.239,120,8.1,168,3.65,195,2.477,223,4.962,224,2.054,258,3.608,277,3.812,288,9.375,397,3.819,399,3.693,447,7.163,549,11.493,707,6.235,842,6.16,1124,9.937,1991,11.793,2122,8.913,3277,9.785,3430,8.967,3846,13.86,4569,14.674,5424,16.741,5516,10.27,5792,15.858,5795,12.74]],["keywords/1180",[]],["title/1181",[714,537.961,2607,828.392]],["content/1181",[16,3.627,186,6.661,224,2.432,616,5.459,660,10.035,714,8.356,2607,12.867,5718,14.826]],["keywords/1181",[]],["title/1182",[291,378.221,1014,574.998]],["content/1182",[2,1.479,13,3.144,22,1.382,31,3.673,79,3.837,161,5.527,168,4.445,173,5.333,205,9.075,208,5.88,224,1.615,266,6.771,277,2.996,288,7.37,291,7.002,300,9.271,329,5.527,348,7.579,367,8.963,380,8.542,394,6.368,397,3.002,399,3.955,458,6.278,467,5.763,536,9.035,540,6.886,544,9.906,545,9.537,546,5.61,549,12.306,602,7.273,616,3.624,746,6.43,792,5.857,829,6.398,1014,10.317,1076,9.843,1091,7.812,1624,7.472,1684,8.374,1864,9.537,2025,8.145,3430,7.049,5441,8.374,5795,10.015]],["keywords/1182",[]],["title/1183",[64,639.394,168,278.284]],["content/1183",[1,2.365,2,1.092,3,1.696,13,2.322,15,2.612,25,4.426,64,11.384,66,4.861,69,5.193,113,2.47,168,5.572,185,3.664,195,3.016,216,6.56,223,5.232,224,1.192,237,4.551,241,4.36,290,4.511,338,5.479,345,4.551,357,7.31,367,3.979,368,3.82,369,5.517,372,3.239,373,7.533,374,8.539,416,10.683,432,4.701,434,5.268,444,11.421,512,5.679,605,5.173,735,6.845,744,7.533,749,7.734,833,8.639,871,9.402,966,6.845,1085,10.989,1121,4.999,1267,4.452,1638,8.262,2078,8.377,2240,6.307,4115,8.822,5796,10.494,5797,10.494,5798,18.61,5799,10.494,5800,18.61,5801,18.61,5802,10.494,5803,18.61]],["keywords/1183",[]],["title/1184",[5418,1328.705]],["content/1184",[]],["keywords/1184",[]],["title/1185",[2042,532.102]],["content/1185",[1,3.574,2,1.651,3,2.563,11,4.322,15,3.948,22,1.542,25,4.501,65,7.21,66,3.502,79,4.281,136,6.123,146,8.17,168,3.202,172,5.911,195,2.173,222,2.517,224,2.367,225,7.64,263,4.869,277,3.344,289,7.283,303,6.788,330,5.355,340,3.53,352,6.015,397,3.35,526,4.501,575,3.805,605,7.819,627,4.036,752,6.213,804,6.535,873,9.818,902,6.973,1120,10.984,1189,6.308,1212,8.649,1598,9.532,1992,10.807,5418,12.159,5804,14.686,5805,19.289,5806,14.686]],["keywords/1185",[]],["title/1186",[864,626.718]],["content/1186",[16,3.103,22,1.317,25,3.845,31,3.502,35,12.39,66,4.741,71,5.877,79,5.057,87,5.63,172,8.633,198,6.191,224,2.128,226,3.053,228,5.963,229,5.677,281,4.95,291,3.718,340,4.17,363,6.98,368,4.932,413,6.254,464,3.395,526,3.845,542,12.444,545,9.093,552,6.98,554,9.233,575,3.251,615,8.412,627,4.767,644,5.41,693,4.897,714,5.289,801,9.384,860,7.333,875,3.781,896,6.982,921,5.799,926,7.027,1021,6.386,1113,6.761,1396,8.723,1401,6.286,1569,9.384,1973,8.062,2607,8.144,5189,12.547,5418,17.76]],["keywords/1186",[]],["title/1187",[16,250.43]],["content/1187",[2,2.441,3,3.791,16,2.763,22,2.281,25,6.657,69,5.335,89,5.055,136,7.381,168,3.86,195,2.62,223,4.187,224,2.172,282,3.636,574,8.692,875,5.335,5418,17.984]],["keywords/1187",[]],["title/1188",[282,329.633]],["content/1188",[1,2.612,11,6.512,18,5.509,19,4.544,20,3.857,22,1.917,31,5.095,112,3.879,113,5.086,120,7.516,168,3.98,172,6.252,205,5.434,223,2.539,226,2.612,227,5.394,258,2.313,282,3.191,291,4.603,295,6.052,389,8.881,399,2.368,426,7.36,490,3.234,542,9.011,627,4.268,647,4.32,816,6.422,818,5.463,895,5.031,896,6.252,902,7.376,1014,6.998,1133,7.082,1210,9.341,1679,5.323,1716,5.364,1875,5.647,1910,9.294,3274,11.821,3403,6.967,3482,7.779,3533,7.197,3804,9.127,4044,10.733,5231,8.887,5441,6.83,5804,10.733,5807,11.592,5808,11.592,5809,10.733,5810,9.127]],["keywords/1188",[]],["title/1189",[1023,407.123]],["content/1189",[2,1.662,3,2.581,8,5.775,11,4.351,15,5.208,25,4.532,31,5.408,49,4.109,112,5.344,168,3.224,195,2.188,223,4.583,224,1.814,258,3.187,277,3.367,296,6.279,316,6.256,340,3.555,385,5.237,397,3.373,399,4.275,579,7.26,640,11.953,707,5.507,842,5.441,1124,8.777,1133,5.737,1142,5.575,3430,7.92,3495,9.804,3804,12.574,4018,14.007,5231,12.243,5419,14.787,5516,9.071,5795,11.253,5809,14.787,5810,12.574,5811,15.969,5812,15.969,5813,15.969,5814,15.969]],["keywords/1189",[]],["title/1190",[714,537.961,2607,828.392]],["content/1190",[16,3.627,186,6.661,224,2.432,616,5.459,660,10.035,714,8.356,2607,12.867,5718,14.826]],["keywords/1190",[]],["title/1191",[291,378.221,1014,574.998]],["content/1191",[2,1.461,11,3.826,13,3.106,22,1.365,31,4.962,79,3.79,161,5.46,168,4.417,173,5.269,205,9,208,5.809,224,1.595,266,6.689,277,2.96,288,7.281,291,6.977,300,9.159,329,5.46,348,7.488,367,8.918,380,8.439,394,6.291,397,2.966,399,3.922,458,6.202,467,5.694,536,8.926,540,6.802,544,9.825,545,9.422,546,5.542,602,7.185,616,3.581,746,6.352,792,5.786,829,6.321,1014,10.273,1076,9.724,1091,7.717,1624,7.382,1684,8.273,1864,9.422,2025,8.046,3430,6.964,5418,14.718,5441,8.273,5795,9.894]],["keywords/1191",[]],["title/1192",[382,745.942,2473,745.942]],["content/1192",[2,1.479,20,4.729,22,1.882,31,3.673,66,4.274,68,6.847,71,6.164,79,3.837,168,2.87,172,5.297,173,5.333,230,7.456,231,5.674,263,4.363,281,3.276,323,8.824,339,9.035,368,5.173,382,11.915,394,6.368,458,6.278,465,4.715,485,8.434,644,5.674,660,6.663,677,6.337,682,5.653,719,7.812,818,6.698,835,6.771,875,3.966,1270,9.15,1312,8.542,1315,8.927,1442,7.938,1554,9.035,1594,7.938,1708,6.925,1837,7.092,2086,8.295,2473,11.915,2510,13.313,5418,16.877,5529,9.4,5544,9.15,5815,14.213,5816,14.213,5817,13.16,5818,19.358]],["keywords/1192",[]],["title/1193",[5420,1297.249]],["content/1193",[]],["keywords/1193",[]],["title/1194",[2042,532.102]],["content/1194",[1,3.242,2,1.497,3,2.326,22,2.154,25,4.083,49,3.702,66,4.892,73,4.977,79,5.269,127,3.512,136,5.555,146,7.412,186,4.477,195,1.971,222,2.283,224,2.218,277,3.034,281,3.317,303,6.158,312,6.158,330,4.858,340,3.203,352,5.636,563,11.287,605,7.094,646,6.675,693,3.761,752,5.637,767,10.646,804,5.929,873,6.781,902,8.583,1112,9.263,1120,9.965,1189,5.722,1212,7.847,1237,7.461,1776,12.621,1992,9.804,2564,14.108,3582,13.323,5420,10.77,5819,13.323,5820,14.389,5821,14.389,5822,14.389,5823,14.389,5824,14.389]],["keywords/1194",[]],["title/1195",[16,250.43]],["content/1195",[2,2.04,3,3.592,6,6.682,7,5.848,13,3.203,16,2.832,22,2.495,25,4.109,31,3.742,49,5.718,66,3.197,89,3.12,113,5.232,128,8.988,136,5.589,185,5.055,195,1.984,223,4.293,224,2.227,282,3.728,368,5.27,397,3.058,399,4.54,465,4.803,563,14.392,574,6.582,632,6.487,652,4.817,875,4.04,895,5.879,1007,7.559,1126,4.978,1143,7.269,1237,7.508,5420,17.828]],["keywords/1195",[]],["title/1196",[282,329.633]],["content/1196",[13,4.207,14,3.777,15,2.71,18,4.25,19,3.694,20,3.622,22,2.273,31,4.141,52,6.498,61,3.801,66,3.538,69,3.038,98,9.948,103,4.701,113,2.563,127,2.657,205,5.103,217,8.366,223,2.384,258,3.795,282,3.048,291,4.397,330,3.676,394,4.877,399,2.224,426,6.518,427,3.95,551,7.711,563,12.127,647,4.057,652,6.978,719,5.983,767,8.739,816,6.031,818,5.131,895,5.702,925,4.974,1014,6.685,1050,4.561,1126,5.509,1133,5.757,1143,8.045,1237,5.645,1650,8.148,1679,4.999,1716,5.124,1798,6.921,1875,5.395,1910,8.877,2120,10.453,2121,9.948,2216,10.598,3278,8.346,3603,8.572,3677,8.836,3679,9.549,4538,10.08,5420,15.698,5441,6.414,5769,8.836,5819,10.08,5825,10.887,5826,10.887,5827,10.887,5828,10.887,5829,10.08,5830,10.887]],["keywords/1196",[]],["title/1197",[1023,407.123]],["content/1197",[2,1.651,3,2.563,8,5.735,15,5.79,25,4.501,49,4.081,120,7.106,195,2.173,223,4.562,224,2.367,258,4.157,277,3.344,296,6.237,316,6.213,340,3.53,370,7.106,385,5.201,397,3.35,399,4.256,490,4.425,563,12.046,579,7.21,706,10.807,707,7.184,842,5.404,1124,8.717,1126,5.453,1133,5.698,1142,5.537,1143,7.963,1225,14.686,2123,9.737,2608,9.089,5420,11.871,5421,14.686,5831,15.861,5832,15.861,5833,15.861,5834,15.861]],["keywords/1197",[]],["title/1198",[864,626.718]],["content/1198",[9,10.21,16,3.57,22,1.542,61,5.537,112,5.308,115,7.763,224,1.802,228,4.404,258,3.165,272,8.116,279,6.851,281,3.656,303,6.788,363,8.17,367,6.014,389,8.397,461,8.458,594,7.072,646,9.664,658,6.356,693,6.081,767,8.649,804,6.535,823,7.006,849,7.79,1023,3.726,1214,10.346,1215,7.21,1217,9.378,1220,10.422,1221,6.168,1222,8.52,2020,6.91,2037,10.807,5420,11.871]],["keywords/1198",[]],["title/1199",[291,378.221,1014,574.998]],["content/1199",[19,4.519,22,1.906,30,6.268,49,6.128,89,4.225,205,9.19,224,2.227,284,5.894,291,7.041,399,4.005,616,4.999,792,8.078,810,8.825,1014,9.937,5835,19.604]],["keywords/1199",[]],["title/1200",[253,1056.653,465,457.256]],["content/1200",[1,3.85,3,3.533,7,9.352,13,4.424,15,6.798,16,2.468,19,3.938,22,1.661,66,3.772,89,2.562,106,6.218,163,3.955,185,4.151,223,4.379,228,3.301,251,3.547,253,16.758,270,3.719,291,3.262,321,8.184,354,2.933,355,3.059,372,3.669,399,3.49,411,6.294,426,4.982,439,6.294,458,8.833,464,2.978,465,7.252,563,6.874,598,7.467,599,5.133,771,5.11,875,3.317,982,7.467,1204,6.813,1237,6.165,1404,10.428,2011,9.994,3055,11.008,5420,8.898,5836,11.888,5837,17.083,5838,11.888,5839,11.008,5840,11.888,5841,11.888,5842,11.008,5843,11.888,5844,11.888,5845,11.888,5846,11.888,5847,11.888]],["keywords/1200",[]],["title/1201",[5848,1021.147]],["content/1201",[7,7.787,16,3.171,30,6.164,66,4.845,69,3.942,79,3.813,167,8.168,185,4.932,209,8.49,223,5.164,224,2.493,225,6.805,230,6.529,251,5.751,258,2.819,263,4.337,319,9.626,351,8.168,370,8.637,372,5.95,397,2.984,417,7.956,434,9.679,465,4.686,528,9.215,563,8.168,682,7.667,698,7.325,741,7.704,771,6.073,1196,8.095,1237,7.325,1267,5.994,1313,8.98,1350,9.626,1442,7.89,1812,8.579,2251,9.626,2444,10.346,2608,8.095,2963,11.123,3935,9.215,5848,8.323,5849,14.127,5850,19.278,5851,14.127,5852,14.127]],["keywords/1201",[]],["title/1202",[5422,1269.296]],["content/1202",[]],["keywords/1202",[]],["title/1203",[2042,532.102]],["content/1203",[1,2.917,2,1.347,3,2.092,16,1.871,22,1.259,25,5.151,36,4.98,62,8.671,66,4.007,79,4.899,103,5.59,106,4.713,136,4.998,146,6.669,185,4.52,195,1.774,222,2.054,223,2.835,224,2.062,226,4.09,277,2.73,281,2.985,303,5.541,316,5.072,330,6.128,335,2.917,340,2.882,352,5.24,372,3.996,404,4.411,445,3.964,494,6.714,575,4.355,605,6.383,607,5.773,615,8.038,616,3.302,627,3.294,651,5.229,682,5.149,752,7.11,804,5.335,831,6.272,873,6.102,875,3.613,1120,8.967,1212,7.061,1396,8.335,1739,11.356,1943,7.419,1992,8.822,2023,10.693,2027,6.541,2122,6.383,2317,17.631,2846,7.948,3113,10.508,3151,11.988,5422,13.292,5853,12.947,5854,12.947]],["keywords/1203",[]],["title/1204",[864,626.718]],["content/1204",[13,5.313,14,6.347,16,3.046,22,1.778,24,3.391,62,5.417,66,4.655,69,3.653,79,3.534,127,3.196,146,6.744,163,4.356,168,2.643,180,6.343,224,2.078,226,2.95,232,7.869,254,6.533,281,3.018,297,5.531,316,5.129,340,2.914,352,5.281,374,4.846,385,4.294,422,4.03,445,4.009,575,4.389,627,6.498,651,5.288,675,13.403,731,5.417,752,5.129,810,8.235,864,4.734,877,9.226,902,5.757,925,5.982,1042,5.268,1049,6.237,1133,6.572,1142,6.387,1197,12.123,1837,6.533,1874,14.403,1988,5.579,2023,13.448,2027,6.615,5422,9.589,5855,13.093]],["keywords/1204",[]],["title/1205",[16,250.43]],["content/1205",[2,2.429,3,3.065,16,2.74,22,2.269,25,5.382,47,8.579,89,4.087,136,7.321,146,9.768,168,4.713,195,3.198,223,4.153,224,2.154,282,3.607,574,8.621,875,5.291,2020,8.262,5422,17.094]],["keywords/1205",[]],["title/1206",[282,329.633]],["content/1206",[13,4.528,14,5.357,18,5.316,19,4.718,24,3.999,62,9.498,89,2.231,103,8.837,113,4.817,130,6.95,146,7.953,168,4.802,223,3.381,228,2.875,258,2.066,281,2.387,282,2.936,335,4.612,394,6.917,399,2.115,406,8.152,426,7.527,427,3.756,627,5.207,710,9.082,831,10.605,1050,6.468,1126,6.347,1142,5.39,1143,9.269,1716,4.936,1837,5.166,1875,5.198,2027,11.598,2122,7.611,2317,10.692,3533,6.428,5422,17.418,5856,10.354,5857,10.354,5858,10.354,5859,9.587,5860,10.354,5861,10.354,5862,9.587,5863,10.354,5864,10.354,5865,9.587]],["keywords/1206",[]],["title/1207",[1023,407.123]],["content/1207",[2,1.488,3,2.311,8,5.171,15,5.898,18,3.196,25,4.058,49,3.679,62,9.137,113,4.576,120,6.407,168,3.925,195,1.959,223,4.257,224,2.208,258,2.854,277,3.015,296,5.623,316,5.602,335,3.222,340,3.183,370,6.407,385,4.69,397,3.021,399,3.971,490,3.99,575,3.431,579,6.501,651,5.776,706,9.744,707,6.704,831,6.928,842,4.872,1124,7.86,1126,4.916,1142,4.993,1143,7.18,1628,12.514,1942,10.265,2123,8.779,2317,9.904,2608,8.195,5422,10.473,5423,13.241,5516,8.123,5795,10.077,5859,13.241,5862,13.241,5865,13.241,5866,14.3,5867,14.3,5868,14.3]],["keywords/1207",[]],["title/1208",[291,378.221,1014,574.998]],["content/1208",[3,2.834,15,5.532,22,1.705,79,4.733,103,7.571,163,5.834,205,8.22,223,3.84,224,1.992,273,11.597,291,6.696,307,7.482,357,8.22,387,8.495,398,13.124,404,5.974,516,9.794,616,4.471,897,6.626,906,7.856,1008,8.495,1014,9.272,1535,6.819,5422,18.791,5869,17.535]],["keywords/1208",[]],["title/1209",[382,745.942,2473,745.942]],["content/1209",[3,1.759,22,1.558,41,5.399,43,2.859,52,4.415,64,5.05,66,2.404,71,4.722,87,4.523,97,4.854,113,2.563,137,5.764,181,4.561,185,3.801,192,5.399,211,6.612,223,2.384,226,2.453,230,3.687,263,3.342,289,4.999,291,2.987,321,5.215,335,2.453,338,5.684,368,3.963,369,5.723,374,4.029,382,10.291,404,3.709,405,6.295,416,5.645,422,3.351,428,4.029,432,4.877,439,5.764,455,5.723,458,4.809,465,3.612,466,6.543,485,4.743,533,4.974,550,5.103,594,4.854,606,6.353,654,5.645,677,4.854,719,5.983,792,4.486,818,5.131,835,5.186,846,5.244,871,5.5,906,4.877,976,6.888,1008,5.274,1022,6.031,1023,2.557,1204,6.239,1270,7.008,1312,6.543,1561,6.921,1594,6.081,1679,4.999,1708,5.305,1802,7.973,1856,6.921,2081,6.543,2086,6.353,2131,7.008,2177,7.815,2473,10.291,2510,6.131,2549,7.305,2550,7.418,2968,7.2,4541,6.838,4590,6.184,4636,7.008,5422,11.735,5529,7.2,5543,7.54,5544,7.008,5554,8.346,5593,7.54,5595,7.973,5607,7.815,5619,7.671,5620,8.148,5622,7.815,5629,7.54,5654,7.54,5694,7.2,5704,8.346,5712,7.973,5765,8.836,5870,9.152,5871,10.887,5872,10.887,5873,10.887,5874,10.887,5875,10.887,5876,10.887,5877,10.887,5878,10.887,5879,10.887,5880,10.887]],["keywords/1209",[]],["title/1210",[24,253.302,1150,340.348,1991,637.866,2105,600.333]],["content/1210",[]],["keywords/1210",[]],["title/1211",[2042,532.102]],["content/1211",[13,4,22,1.758,24,5.869,61,6.312,62,9.375,66,3.992,69,5.045,73,6.254,224,2.054,226,4.074,281,4.168,340,4.024,352,5.22,445,5.536,513,9.614,526,5.131,804,7.45,1074,9.021,1150,6.293,1991,16.143,5881,16.741,5882,16.741,5883,16.741,5884,16.741]],["keywords/1211",[]],["title/1212",[16,250.43]],["content/1212",[2,2.188,3,3.397,16,3.037,22,2.044,25,5.965,62,8.697,89,4.53,223,4.604,282,3.998,574,9.556,875,5.865]],["keywords/1212",[]],["title/1213",[282,329.633]],["content/1213",[18,4.357,19,3.812,20,6.486,22,1.895,24,5.545,30,3.634,31,5.038,33,6.831,41,5.637,48,8.713,52,8.681,62,6.842,67,5.415,73,3.931,103,7.14,105,7.225,106,6.019,110,7.752,120,7.409,130,8.776,155,4.486,223,4.269,258,2.268,282,3.145,399,2.322,409,6.151,426,7.321,440,4.403,464,2.847,469,4.192,505,5.779,513,7.016,526,4.693,527,5.894,550,5.328,626,5.272,835,7.878,862,8.323,925,5.193,976,4.886,1030,8.159,1133,4.083,1716,5.287,1731,9.743,1799,10.937,1800,8.883,1809,7.138,1875,5.567,2106,11.871,2121,12.102,3411,6.456,3901,9.224,4288,9.224,5716,9.555,5717,8.507,5718,7.871,5719,9.555,5720,9.555,5721,9.555,5722,10.524,5723,10.524,5724,10.524]],["keywords/1213",[]],["title/1214",[1023,407.123]],["content/1214",[62,9.755,120,8.637,223,4.222,224,2.19,258,3.847,277,4.064,397,4.073,399,3.938,707,6.648,842,6.568,862,14.119,1991,12.575,3432,9.235,4288,15.647,5207,15.18,5516,10.951,5717,14.43,5725,14.43,5726,17.851,5885,17.851]],["keywords/1214",[]],["title/1215",[24,357.029,113,324.447]],["content/1215",[1,3.526,3,2.529,16,2.983,24,5.986,42,7.414,52,6.345,62,6.474,72,13.126,113,4.86,120,7.01,130,7.044,181,6.555,223,4.522,226,3.526,237,6.786,258,3.123,270,4.895,330,5.283,399,4.721,401,8.307,414,10.5,464,5.173,527,8.114,605,7.714,660,7.335,704,6.176,915,10.207,1363,9.048,4541,9.828,5190,12.32,5537,10.837,5729,13.155,5730,13.155,5731,13.155,5732,14.488,5733,14.488,5734,14.488,5735,13.155,5736,13.155]],["keywords/1215",[]],["title/1216",[974,789.838,2476,971.224]],["content/1216",[2,1.697,3,2.635,24,6.468,113,3.838,152,13.513,161,6.341,195,2.906,217,8.513,220,6.918,223,4.646,237,10.226,262,10.18,296,6.412,321,7.811,330,5.505,348,8.695,349,9.516,495,6.015,627,4.149,739,13.323,964,8.344,980,12.5,1121,7.768,1443,7.236,2269,12.838,2476,11.489,2570,12.204,4687,12.5,5737,13.708,5738,13.708]],["keywords/1216",[]],["title/1217",[24,221.174,156,581.805,1150,297.179,1991,556.959,5415,654.579]],["content/1217",[]],["keywords/1217",[]],["title/1218",[2042,532.102]],["content/1218",[13,4,22,1.758,24,5.869,61,6.312,62,9.375,66,3.992,69,5.045,73,6.254,224,2.054,226,4.074,281,4.168,340,4.024,352,5.22,445,5.536,513,9.614,526,5.131,804,7.45,1074,9.021,1150,6.293,1991,16.143,5881,16.741,5882,16.741,5883,16.741,5884,16.741]],["keywords/1218",[]],["title/1219",[16,250.43]],["content/1219",[2,2.188,3,3.397,16,3.037,22,2.044,25,5.965,62,8.697,89,4.53,223,4.604,282,3.998,574,9.556,875,5.865]],["keywords/1219",[]],["title/1220",[282,329.633]],["content/1220",[18,4.419,19,3.881,20,6.578,22,1.637,24,5.121,30,3.725,31,5.109,33,11.882,41,5.778,52,8.017,53,9.455,62,6.966,103,7.269,106,6.128,110,7.892,120,7.543,130,8.9,223,4.33,258,2.325,282,3.202,289,9.944,399,2.38,426,6.699,513,7.143,526,4.778,550,9.267,551,6.827,626,5.404,862,8.532,976,10.292,1030,12.086,1133,4.185,1716,5.383,1799,13.075,1809,7.317,1875,5.668,2106,12.086,2121,12.273,3901,9.455,4288,9.455,5021,10.219,5716,9.794,5717,8.72,5718,8.068,5719,9.794,5720,9.794,5721,9.794,5773,10.787,5774,10.787,5775,10.787,5776,10.787]],["keywords/1220",[]],["title/1221",[1023,407.123]],["content/1221",[62,9.755,120,8.637,223,4.222,224,2.19,258,3.847,277,4.064,397,4.073,399,3.938,707,6.648,842,6.568,862,14.119,1991,12.575,3432,9.235,4288,15.647,5207,15.18,5516,10.951,5717,14.43,5725,14.43,5777,17.851,5885,17.851]],["keywords/1221",[]],["title/1222",[19,263.73,195,156.745,5415,877.073]],["content/1222",[2,1.177,3,2.663,19,5.779,20,3.763,24,2.93,41,5.609,43,5.104,44,7.281,48,12.633,52,4.586,106,5.998,152,6.121,195,3.11,426,7.455,427,8.597,428,8.403,455,5.946,465,7.086,515,5.788,551,4.586,608,6.601,846,5.448,978,9.921,996,11.611,1267,4.799,1561,10.475,1679,7.566,1803,8.663,1834,8.905,1876,16.125,1936,12.975,2081,6.798,2252,11.829,5415,18.167,5768,9.921,5769,9.179,5770,12.975,5778,10.472,5779,21.021,5780,17.999,5781,10.472,5782,15.258]],["keywords/1222",[]],["title/1223",[24,357.029,113,324.447]],["content/1223",[1,3.526,3,2.529,16,2.983,24,5.986,42,7.414,52,6.345,62,6.474,72,13.126,113,4.86,120,7.01,130,7.044,181,6.555,223,4.522,226,3.526,237,6.786,258,3.123,270,4.895,330,5.283,399,4.721,401,8.307,414,10.5,464,5.173,527,8.114,605,7.714,660,7.335,704,6.176,915,10.207,1363,9.048,4541,9.828,5190,12.32,5537,10.837,5729,13.155,5730,13.155,5731,13.155,5735,13.155,5736,13.155,5783,14.488,5784,14.488,5785,14.488]],["keywords/1223",[]],["title/1224",[974,789.838,2476,971.224]],["content/1224",[2,1.697,3,2.635,24,6.468,113,3.838,152,13.513,161,6.341,195,2.906,217,8.513,220,6.918,223,4.646,237,10.226,262,10.18,296,6.412,321,7.811,330,5.505,348,8.695,349,9.516,495,6.015,627,4.149,739,13.323,964,8.344,980,12.5,1121,7.768,1443,7.236,2269,12.838,2476,11.489,2570,12.204,4687,12.5,5737,13.708,5738,13.708]],["keywords/1224",[]],["title/1225",[61,399.429,690,727.292,1150,398.191]],["content/1225",[]],["keywords/1225",[]],["title/1226",[2042,532.102]],["content/1226",[1,3.55,2,2.158,3,2.546,16,2.997,18,3.521,22,2.016,25,4.471,61,5.5,66,3.478,79,4.252,136,6.081,146,8.114,195,2.158,222,2.5,223,3.45,224,2.356,277,3.321,303,6.742,330,5.319,340,3.507,345,6.832,352,5.988,354,3.887,355,4.053,447,8.217,605,7.766,627,4.008,652,5.241,690,10.014,752,6.171,804,6.491,873,7.424,921,6.742,1120,10.91,1150,7.218,1175,9.468,1212,8.591,1992,10.734,3484,7.959,5886,15.753,5887,15.753]],["keywords/1226",[]],["title/1227",[2,78.859,22,73.669,354,186.957,355,194.959,895,227.226,3484,382.815]],["content/1227",[2,1.853,61,6.216,79,4.806,281,4.104,284,5.352,340,3.963,352,6.479,354,4.393,355,4.581,447,7.053,526,5.052,577,13.325,616,4.54,807,11.182,895,6.729,902,9.866,908,6.396,1126,6.121,1143,8.938,1150,8.553,1189,7.08,2023,10.489,2024,13.648,3440,11.946,3484,8.994,5888,16.484]],["keywords/1227",[]],["title/1228",[347,496.773,895,413.323]],["content/1228",[13,4.758,22,1.619,61,5.815,66,3.677,69,4.647,79,5.805,106,6.062,244,7.648,281,4.958,284,5.008,340,3.707,347,6.003,352,4.809,422,5.127,447,6.599,513,10.106,526,6.759,599,7.192,601,7.726,603,7.726,616,4.247,807,10.461,895,4.995,902,9.456,908,5.984,1150,8.761,1189,6.624,2023,9.813,5888,15.422]],["keywords/1228",[]],["title/1229",[16,250.43]],["content/1229",[2,2.417,3,3.754,16,2.718,22,2.258,25,6.591,47,8.51,61,6.567,89,5.005,136,7.262,195,2.577,223,4.12,224,2.137,282,3.578,574,8.552,690,14.764,875,5.249,1150,6.547,2630,12.441]],["keywords/1229",[]],["title/1230",[282,329.633]],["content/1230",[1,2.302,13,2.26,14,3.545,16,1.476,18,4.544,19,4.222,20,3.399,22,1.781,30,3.267,31,5.626,61,3.567,66,5.044,106,5.564,113,4.312,223,3.348,226,3.445,258,2.039,261,5.677,263,3.137,282,2.907,323,6.343,333,6.665,340,2.274,343,3.795,347,5.51,348,5.448,354,2.521,355,2.629,356,8.684,374,3.782,394,4.577,397,3.229,399,3.742,426,6.661,447,6.057,448,3.556,458,6.752,485,7.98,513,7.772,526,4.338,551,4.143,626,4.74,835,4.867,846,4.922,895,6.097,926,5.298,1133,3.671,1150,5.321,1442,5.707,1679,7.019,1709,5.488,1716,4.888,1875,5.146,2120,6.665,2201,8.292,2559,6.962,2630,16.103,3481,6.495,3482,6.856,3484,5.162,3691,14.595,4154,8.59,4287,14.155,4569,8.292,4660,8.045,5889,10.217,5890,10.217,5891,10.217,5892,8.962,5893,10.217]],["keywords/1230",[]],["title/1231",[1023,407.123]],["content/1231",[22,1.786,86,8.433,223,4.022,224,2.086,258,3.665,277,3.872,347,6.619,397,3.88,399,3.752,458,8.112,513,7.792,842,6.257,895,5.507,908,6.598,1023,4.314,1026,9.723,1133,6.598,1142,6.412,2630,12.146,3495,11.275,3846,14.079,4569,14.905,5516,10.432,5795,12.941,5894,18.365,5895,18.365,5896,18.365]],["keywords/1231",[]],["title/1232",[2630,911.566,5892,1208.976]],["content/1232",[2,2.075,3,2.4,16,2.881,25,4.214,30,4.747,70,5.974,220,8.46,223,4.367,241,6.169,277,4.204,316,5.817,345,6.44,357,6.96,358,8.509,396,6.169,397,4.212,399,5.28,437,7.598,465,4.926,467,6.021,468,8.924,485,10.484,579,6.75,690,9.439,761,8.293,1112,9.559,1292,11.383,2630,17.752,5892,21.108,5897,14.848,5898,14.848,5899,14.848,5900,14.848]],["keywords/1232",[]],["title/1233",[291,378.221,1014,574.998]],["content/1233",[22,2.044,61,7.339,73,7.271,208,8.697,224,2.388,291,5.768,307,7.077,689,5.908,690,13.363,1014,8.769,1150,7.316]],["keywords/1233",[]],["title/1234",[71,597.791,356,782.945]],["content/1234",[2,1.882,3,2.922,13,5.475,22,2.203,61,6.312,71,11.252,79,4.88,224,2.054,226,4.074,261,9.191,356,14.058,504,11.376,557,7.949,690,11.493,829,8.139,1150,6.293,1684,10.652,5901,18.08]],["keywords/1234",[]],["title/1235",[1622,705.325,1910,763.589]],["content/1235",[]],["keywords/1235",[]],["title/1236",[2042,532.102]],["content/1236",[2,2.093,3,3.251,22,1.955,25,5.708,127,4.909,223,4.405,224,2.285,340,4.477,513,8.533,847,7.547,1044,11.425,1155,9.975,1221,7.821,1910,11.142,2208,12.785,5902,20.112]],["keywords/1236",[]],["title/1237",[16,250.43]],["content/1237",[2,2.093,22,2.352,89,4.334,206,8.321,224,2.947,226,4.532,229,8.425,284,6.047,354,4.962,445,6.158,804,8.287,1622,10.292,1971,15.053]],["keywords/1237",[]],["title/1238",[282,329.633]],["content/1238",[]],["keywords/1238",[]],["title/1239",[258,345.873]],["content/1239",[18,3.949,19,4.073,20,5.878,22,1.718,31,4.566,112,5.913,195,2.421,258,3.526,263,5.424,282,3.36,426,6.512,849,6.607,908,8.797,1050,7.401,1155,8.762,1707,9.421,1716,5.649,1800,13.154,1875,5.948,1888,12.449,1910,13.566,2096,14.986,2255,13.224,3403,10.619]],["keywords/1239",[]],["title/1240",[399,354.058]],["content/1240",[18,4.574,19,4.718,120,10.952,195,2.804,282,3.892,426,5.968,858,13.768,1221,7.959,1716,6.544,1875,6.89,3871,13.733,5903,20.466]],["keywords/1240",[]],["title/1241",[1023,407.123]],["content/1241",[6,8.752,19,4.372,112,6.347,224,2.154,258,3.784,277,3.998,397,4.006,399,3.874,626,8.797,707,6.54,842,6.461,908,6.813,1124,10.423,1800,10.187,2096,12.726,3249,13.363,5092,17.56,5904,18.964,5905,17.56,5906,18.964,5907,18.964,5908,18.964,5909,18.964]],["keywords/1241",[]],["title/1242",[1150,479.72,2933,911.566]],["content/1242",[]],["keywords/1242",[]],["title/1243",[2042,532.102]],["content/1243",[1,2.312,2,1.911,3,3.293,8,3.711,13,4.508,16,2.216,22,2.225,25,2.912,36,3.947,49,2.64,66,2.266,69,2.863,79,2.77,83,5.64,87,4.263,89,2.212,136,3.962,146,5.286,161,3.991,195,2.101,222,1.628,223,5.339,224,2.315,226,2.312,231,4.097,266,8.749,268,3.824,277,2.164,290,4.411,296,4.035,303,4.392,324,5.029,330,3.465,333,6.694,340,2.284,343,5.696,347,5.528,352,4.428,354,3.784,355,3.946,394,4.598,396,4.263,403,9.001,467,4.161,513,4.354,515,5.251,526,2.912,546,4.05,550,4.811,551,4.161,605,5.059,616,2.617,685,10.292,752,4.02,804,4.229,810,4.62,829,4.62,849,3.838,873,4.836,895,4.599,908,3.687,921,4.392,925,7.007,926,5.322,1020,5.64,1026,5.433,1050,4.299,1120,7.107,1150,7.092,1442,8.566,1755,6.694,1950,9.001,1992,6.993,2042,3.151,2689,13.453,2846,9.416,2933,6.787,2970,14.358,3138,7.867,3484,7.749,4320,9.001,5910,10.262]],["keywords/1243",[]],["title/1244",[2,78.859,22,73.669,354,186.957,355,194.959,895,227.226,3484,382.815]],["content/1244",[340,4.722,352,6.124,372,6.547,413,9.79,526,6.02,627,5.397,1126,7.293,1143,10.65,1150,7.383,2970,14.947]],["keywords/1244",[]],["title/1245",[347,496.773,895,413.323]],["content/1245",[6,6.146,13,4.707,16,1.924,24,3.45,25,3.779,30,4.258,61,4.65,66,2.94,106,7.744,127,3.251,224,1.513,340,2.964,352,6.143,367,7.019,372,4.11,386,6.566,413,6.146,422,4.099,447,7.334,513,9.756,526,7.099,556,5.802,598,8.365,601,6.178,627,4.71,652,6.159,752,5.217,864,4.816,871,6.728,875,3.716,877,9.384,902,5.855,1049,6.345,1150,9.248,1189,7.362,1401,6.178,1449,13.288,1709,7.154,1923,8.573,2042,4.089,2933,12.243,2970,14.993,3053,8.268,5911,13.318]],["keywords/1245",[]],["title/1246",[16,250.43]],["content/1246",[2,2.111,3,3.279,16,2.931,22,2.364,25,5.757,89,4.372,136,7.832,195,2.78,223,4.443,224,2.305,282,3.858,875,5.661,1150,7.061,2933,13.417]],["keywords/1246",[]],["title/1247",[282,329.633]],["content/1247",[2,1.171,3,1.819,13,2.49,16,1.626,18,5.064,19,4.469,20,3.745,22,2.203,49,4.225,86,5.168,106,5.977,113,3.865,127,2.747,136,4.345,195,1.542,213,6.91,214,5.362,223,4.245,224,1.279,226,2.536,241,4.676,258,2.246,282,4.053,283,4.224,297,4.755,329,4.377,347,5.918,354,4.051,355,4.225,385,3.691,399,3.354,426,6.607,440,4.361,469,4.152,513,9.614,526,5.501,551,4.564,626,5.221,777,6.631,835,5.362,846,5.422,849,4.209,895,7.094,908,5.899,1050,6.879,1133,4.044,1150,3.917,1621,6.836,1679,5.168,1716,5.25,1875,5.528,1923,7.246,2933,14.093,2970,13.66,3481,7.155,3482,7.553,3484,8.296,4154,9.462,5912,10.422,5913,11.255]],["keywords/1247",[]],["title/1248",[1023,407.123]],["content/1248",[2,1.685,3,2.617,8,5.855,15,5.256,22,1.574,25,4.595,49,4.166,86,7.435,195,2.218,223,4.624,224,1.839,258,3.231,277,3.414,296,6.367,316,6.343,340,3.604,347,5.836,385,5.31,397,3.42,399,4.314,513,6.87,579,7.361,707,5.584,842,5.516,895,4.856,908,5.817,1023,3.803,1026,8.572,1124,8.899,1133,5.817,1150,5.636,2933,10.709,3277,8.763,3344,14.202,3495,9.94,3846,12.413,5516,9.198,5795,11.409,5912,14.992,5914,16.192,5915,16.192]],["keywords/1248",[]],["title/1249",[1956,945.178]],["content/1249",[]],["keywords/1249",[]],["title/1250",[195,188.839,638,876.205]],["content/1250",[3,3.811,7,7.787,13,4.265,22,1.874,79,6.364,160,9.037,195,2.641,335,4.344,343,7.16,464,4.83,465,7.822,998,11.587,1956,12.858,2243,15.18,2495,16.207,5916,19.279,5917,19.279]],["keywords/1250",[]],["title/1251",[2042,532.102]],["content/1251",[3,2.813,4,9.28,18,3.89,22,1.692,47,7.873,73,6.02,89,3.751,92,7.76,112,5.824,186,5.415,207,7.448,279,5.724,281,4.012,335,4.985,340,4.924,352,5.025,490,4.856,627,5.628,693,4.549,902,7.652,1133,6.252,1214,14.429,1215,10.056,1267,7.384,1956,13.954,2210,13.026]],["keywords/1251",[]],["title/1252",[16,250.43]],["content/1252",[1,5.617,2,2.381,16,3.306,22,1.786,24,4.757,89,3.958,163,6.11,224,2.964,228,5.1,277,3.872,281,4.234,284,5.522,354,4.531,355,4.725,372,5.668,464,4.601,490,5.124,875,5.124,1023,4.314,2920,12.146]],["keywords/1252",[]],["title/1253",[282,329.633]],["content/1253",[3,2.326,18,5.551,19,4.5,30,4.601,112,4.815,113,4.595,114,12.621,168,2.905,222,2.283,258,2.871,282,3.713,291,6.079,334,5.929,335,5.771,399,2.939,426,7.242,448,6.794,512,7.787,575,5.7,647,5.362,689,4.044,693,3.761,818,6.781,1014,8.144,1050,6.028,1126,7.617,1210,6.818,1679,6.607,1716,6.242,1875,6.572,2020,6.269,3403,8.648,4682,13.323,5441,8.477,5918,14.389]],["keywords/1253",[]],["title/1254",[1023,407.123]],["content/1254",[3,3.04,112,6.295,223,4.12,224,2.137,258,3.754,277,3.966,335,5.233,397,3.974,399,3.843,489,8.865,575,5.572,707,6.487,842,6.409,1124,10.339,1126,6.467,3275,7.914,3280,15.267,3307,15.814,4684,17.418,4685,21.504,5919,18.811]],["keywords/1254",[]],["title/1255",[1217,620.495,1220,617.512]],["content/1255",[9,10.722,16,3.442,22,1.619,61,5.815,92,7.427,115,6.207,163,5.542,224,1.892,228,4.625,258,3.324,272,8.523,281,3.839,303,7.128,367,6.316,389,8.818,461,8.882,594,7.427,646,9.977,658,6.675,693,6.226,804,6.863,823,7.357,849,8.042,1023,3.912,1217,9.682,1220,10.671,1221,6.477,1222,8.947,1956,9.083,2020,7.256,2037,11.349]],["keywords/1255",[]],["title/1256",[291,378.221,1014,574.998]],["content/1256",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1256",[]],["title/1257",[5425,1364.669]],["content/1257",[]],["keywords/1257",[]],["title/1258",[2042,532.102]],["content/1258",[13,4.672,22,1.574,24,4.194,62,8.737,69,4.518,73,5.601,186,5.038,224,1.839,226,3.649,244,7.435,281,4.868,340,4.7,352,6.096,445,4.958,513,6.87,526,4.595,575,5.066,627,5.373,644,6.464,804,6.672,831,11.384,1074,8.079,1078,11.033,1133,5.817,1142,5.653,1313,10.293,1794,10.17,2023,9.54,2027,8.18,2095,11.214,5425,12.749,5714,13.141,5740,14.992,5741,14.992,5920,16.192]],["keywords/1258",[]],["title/1259",[16,250.43]],["content/1259",[2,2.13,3,3.308,16,2.957,22,1.99,25,5.808,47,9.258,89,4.411,168,4.132,223,4.482,282,3.892,335,4.612,574,9.304,875,5.71,5425,16.114]],["keywords/1259",[]],["title/1260",[282,329.633]],["content/1260",[3,1.666,11,6.245,13,4.518,14,5.339,16,1.489,18,5.308,19,3.547,20,3.43,22,1.496,30,3.296,62,9.483,73,5.323,103,4.451,113,3.622,120,4.618,130,4.64,155,4.068,168,4.627,186,4.788,195,2.523,221,5.175,223,3.37,258,2.057,282,2.927,291,5.053,335,5.165,389,8.147,397,2.177,399,3.144,426,7.277,512,5.578,513,6.529,556,4.491,627,5.196,685,6.917,831,10.585,895,3.091,896,5.735,993,5.578,1014,6.42,1078,13.914,1142,5.372,1679,4.733,1709,5.537,1716,4.92,1875,5.18,1943,5.907,2020,4.491,2027,7.774,3514,6.553,3518,6.817,3533,6.399,3848,6.636,5425,12.116,5441,6.073,5744,8.666,5921,10.308]],["keywords/1260",[]],["title/1261",[1023,407.123]],["content/1261",[11,5.044,62,7.659,168,3.737,223,4.054,224,2.103,258,3.694,277,3.903,335,4.171,397,3.91,399,3.782,640,13.855,707,6.384,842,6.307,896,6.899,3430,9.181,3432,8.868,3514,11.768,3518,12.243,5516,10.515,5725,13.855,5727,15.563,5728,15.563,5922,18.511,5923,18.511,5924,18.511,5925,18.511]],["keywords/1261",[]],["title/1262",[291,378.221,1014,574.998]],["content/1262",[2,1.479,13,3.144,22,1.382,31,3.673,79,3.837,161,5.527,168,4.445,173,5.333,205,9.075,208,5.88,224,1.615,266,6.771,277,2.996,288,7.37,291,7.002,300,9.271,329,5.527,348,7.579,367,8.963,380,8.542,394,6.368,397,3.002,399,3.955,458,6.278,467,5.763,536,9.035,540,6.886,544,9.906,545,9.537,546,5.61,602,7.273,616,3.624,746,6.43,792,5.857,829,6.398,1014,10.317,1076,9.843,1091,7.812,1624,7.472,1684,8.374,1864,9.537,2025,8.145,3430,7.049,3432,6.809,5425,15.242,5441,8.374]],["keywords/1262",[]],["title/1263",[1824,574.998,5926,1085.254]],["content/1263",[]],["keywords/1263",[]],["title/1264",[2042,532.102]],["content/1264",[2,2.111,3,3.279,22,1.972,25,5.757,127,4.952,223,4.443,224,2.305,335,4.572,340,4.516,575,4.868,873,9.561,1824,8.463,2208,12.897,5926,15.974,5927,20.288]],["keywords/1264",[]],["title/1265",[16,250.43]],["content/1265",[2,2.075,3,3.889,16,2.881,22,1.939,25,5.659,89,4.297,168,4.026,185,6.962,223,4.367,224,2.265,244,9.156,282,3.792,330,6.733,875,5.564,1824,8.318,5926,15.7]],["keywords/1265",[]],["title/1266",[282,329.633]],["content/1266",[]],["keywords/1266",[]],["title/1267",[258,345.873]],["content/1267",[18,5.599,19,3.401,22,1.93,31,3.813,65,6.707,112,4.938,113,3.473,186,4.59,195,2.021,223,3.231,282,2.806,307,6.684,335,5.409,426,7.305,440,5.716,448,5.135,519,8.109,575,4.764,647,7.399,895,5.954,1126,7.715,1143,7.407,1210,9.407,1707,7.868,1708,7.189,1716,4.717,1875,4.967,2121,9.16,2182,10.218,3403,8.867,4559,13.351,4574,10.587,4590,8.381,4591,11.933,4601,10.053]],["keywords/1267",[]],["title/1268",[771,491.801,1535,444.891,3663,702.361]],["content/1268",[16,1.993,18,3.082,174,7.834,195,1.89,225,6.644,316,5.403,320,6.84,464,3.455,490,3.848,498,16.222,511,6.607,646,8.797,660,6.465,681,7.2,693,6.609,749,10.749,792,5.683,833,7.641,1121,6.57,1132,13.888,1221,8.428,1291,11.193,1516,8.996,1535,8.428,1759,10.573,1824,5.753,2020,6.009,2241,11.595,2260,14.538,2438,14.932,3663,16.437,3701,14.194,3839,12.77,4728,9.397,5926,10.859,5928,13.792,5929,11.595,5930,13.792,5931,13.792,5932,18.964,5933,11.595,5934,13.792]],["keywords/1268",[]],["title/1269",[399,354.058]],["content/1269",[18,4.656,19,4.802,113,4.904,168,4.988,195,2.854,282,3.962,426,6.075,1707,11.109,1716,6.661,1875,7.013,3533,12.933]],["keywords/1269",[]],["title/1270",[1023,407.123]],["content/1270",[2,2.429,112,6.347,168,3.829,223,4.153,224,2.154,258,3.784,277,3.998,335,4.273,397,4.006,399,3.874,575,4.55,707,6.54,842,6.461,1124,10.423,1125,13.134,1126,6.52,1142,6.621,1824,7.911,3430,9.405,3432,9.085,5516,10.773,5935,18.964]],["keywords/1270",[]],["title/1271",[61,298.102,648,717.825,1824,356.201,4728,581.805,5926,672.297]],["content/1271",[61,8.625,92,9.289,224,2.367,616,5.312,647,7.764,648,17.514,1267,8.839,1824,8.691,4728,14.195,5926,16.403,5936,20.833]],["keywords/1271",[]],["title/1272",[18,255.701,1217,515.041,1220,512.565]],["content/1272",[13,5.087,16,2.675,18,4.137,127,4.518,258,4.589,265,10.803,427,6.716,490,5.165,616,4.72,677,8.254,693,4.839,870,12.075,1217,10.352,1220,11.722,1221,7.198,1230,11.924,1241,12.243,1830,12.82,5937,18.511]],["keywords/1272",[]],["title/1273",[5427,1328.705]],["content/1273",[]],["keywords/1273",[]],["title/1274",[2042,532.102]],["content/1274",[13,4.917,22,2.161,66,3.871,103,7.571,223,3.84,224,1.992,226,3.951,340,3.903,352,5.062,439,9.283,526,6.307,563,12.851,638,11.147,652,7.395,921,7.505,1596,19.805,1947,13.442,3196,13.806,5427,17.039,5938,17.535,5939,16.236,5940,17.535,5941,14.231,5942,16.236,5943,17.535]],["keywords/1274",[]],["title/1275",[265,804.379,1596,1118.642]],["content/1275",[3,3.352,19,4.781,20,5.241,22,1.532,31,4.071,49,4.053,52,6.388,66,3.478,67,7.505,79,4.252,104,14.586,113,3.708,223,3.45,263,6.367,422,4.849,426,4.594,439,8.34,447,6.241,464,3.947,465,8.493,469,5.811,551,6.388,728,11.584,818,7.424,846,7.589,849,5.891,930,8.4,1267,6.684,1596,18.817,1678,12.785,1679,7.234,3196,12.404,5839,14.586,5944,15.753,5945,15.753,5946,15.753,5947,13.818,5948,15.753]],["keywords/1275",[]],["title/1276",[993,619.168,998,687.605,5427,877.073]],["content/1276",[22,2.062,31,4.214,79,5.726,103,7.04,106,5.935,173,7.96,185,5.693,223,4.646,263,5.006,367,6.183,426,4.755,465,8.284,503,10.241,556,7.104,557,7.169,563,13.633,616,4.158,712,8.962,993,14.01,1393,8.399,1592,12.5,2633,12.204,3196,16.702,5427,18.075,5949,16.305,5950,21.212]],["keywords/1276",[]],["title/1277",[282,329.633]],["content/1277",[3,1.735,13,4.609,14,5.503,18,4.967,19,3.656,20,3.572,22,2.161,30,5.071,31,2.775,61,3.748,108,5.293,113,3.733,160,9.765,223,3.473,258,2.142,270,3.358,282,3.016,340,2.39,374,3.974,399,3.24,422,3.305,426,7.018,439,5.684,447,4.253,448,3.737,563,9.171,575,2.576,579,4.881,604,8.17,622,8.224,638,11.99,652,7.395,771,6.818,808,4.575,873,5.059,895,4.756,921,4.595,926,5.567,1155,7.866,1165,7.315,1596,18.038,1716,5.071,1875,5.339,1947,8.23,2122,5.293,2967,9.417,3196,8.453,3423,7.003,5427,18.939,5829,9.941,5939,20.579,5941,12.872,5942,9.941,5951,9.941,5952,9.941,5953,9.941,5954,10.736,5955,10.736,5956,10.736,5957,10.736]],["keywords/1277",[]],["title/1278",[1023,407.123]],["content/1278",[223,4.153,224,2.154,258,3.784,277,3.998,397,4.006,399,3.874,563,13.496,604,9.768,622,12.104,707,6.54,842,6.461,1165,12.922,3432,9.085,5516,10.773,5725,14.194,5951,17.56,5952,17.56,5953,17.56,5958,18.964,5959,18.964,5960,18.964]],["keywords/1278",[]],["title/1279",[291,378.221,1014,574.998]],["content/1279",[2,2.228,3,3.836,13,4.736,14,5.738,31,4.274,79,4.464,220,7.017,223,4.688,224,1.879,225,7.966,291,5.874,387,8.012,464,4.143,547,8.518,563,9.562,606,9.651,631,9.839,743,12.737,1014,6.899,1267,9.083,1535,6.431,1636,14.505,1995,11.268,3196,18.691,5427,16.412,5961,16.537,5962,16.537,5963,16.537,5964,16.537,5965,16.537]],["keywords/1279",[]],["title/1280",[1824,723.04]],["content/1280",[]],["keywords/1280",[]],["title/1281",[2042,532.102]],["content/1281",[1,3.674,2,1.697,3,2.635,15,4.058,22,1.585,25,4.627,66,4.683,68,7.855,69,5.919,168,3.292,199,12.498,223,3.571,224,2.41,226,4.78,335,5.313,340,3.629,352,4.708,367,8.044,370,7.305,458,7.202,518,6.341,575,5.089,627,4.149,829,7.34,1133,7.621,1824,8.849,4574,8.695,5966,14.302,5967,12.838,5968,14.302,5969,18.606]],["keywords/1281",[]],["title/1282",[864,626.718]],["content/1282",[18,3.521,19,3.631,22,2.016,61,8.602,92,7.024,127,3.845,205,7.385,224,1.79,272,10.613,279,5.181,335,3.55,354,3.887,367,5.974,513,6.684,516,8.799,546,6.218,574,7.162,616,5.289,627,4.008,646,7.308,647,5.871,693,4.118,704,6.218,752,6.171,849,5.891,1150,5.483,1151,8.727,1215,7.162,1217,7.092,1220,7.058,1267,6.684,1538,10.141,1758,11.1,1824,9.672,1988,8.838,3053,9.78,4700,12.404,5970,14.586,5971,13.818]],["keywords/1282",[]],["title/1283",[335,257.805,1151,633.815,1824,477.276]],["content/1283",[2,1.721,16,2.389,66,4.726,69,4.614,112,5.534,115,6.163,127,4.036,161,6.431,163,5.502,226,3.726,279,7.041,325,7.922,335,5.349,396,6.87,445,5.064,574,7.518,627,5.447,693,6.562,1074,8.252,1151,11.86,1189,8.514,1215,9.732,1217,9.637,1220,10.635,1290,9.651,1824,6.899,2461,11.871]],["keywords/1283",[]],["title/1284",[16,250.43]],["content/1284",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,1824,7.911]],["keywords/1284",[]],["title/1285",[282,329.633]],["content/1285",[13,3.285,18,4.785,19,2.266,20,3.27,22,2.081,30,6.845,31,2.54,43,2.581,65,4.468,108,4.845,112,4.969,113,3.495,137,5.204,180,4.762,181,4.117,186,3.058,223,3.252,226,3.346,258,1.961,282,1.869,307,6.024,335,4.824,340,2.188,426,7.183,440,3.808,448,5.168,498,7.356,519,5.402,575,5.136,626,4.559,632,8.017,647,5.533,681,5.131,693,5.596,748,5.28,771,7.692,792,4.05,808,4.188,1126,6.152,1210,7.035,1221,5.774,1401,4.559,1535,7.754,1708,4.789,1716,3.143,1875,3.309,2094,8.648,2121,6.102,2182,6.807,3663,14.774,3701,13.393,3850,6.595,4559,10.646,4563,5.204,4574,9.542,4590,5.583,4591,10.755,4592,6.034,4601,6.697,4608,7.198,4609,6.248,4683,6.807,5001,6.926,5002,6.926,5972,8.621,5973,8.621,5974,8.621]],["keywords/1285",[]],["title/1286",[43,256.768,226,220.355,1824,407.945,4563,517.722]],["content/1286",[2,0.667,3,1.711,13,1.419,16,2.268,18,1.433,19,1.478,22,2.148,30,4.324,31,1.658,42,3.039,43,6.078,66,2.986,69,1.79,75,3.743,78,3.498,89,1.382,112,2.146,113,2.493,137,7.16,168,3.17,174,3.643,223,4.097,224,1.203,226,4.46,251,3.159,263,3.251,270,2.006,275,3.937,281,1.478,282,2.572,284,1.928,291,3.711,307,4.553,329,4.118,335,3.047,340,1.428,350,4.242,363,3.304,368,2.334,370,2.873,389,3.396,399,1.31,405,6.123,417,3.612,426,1.87,427,5.696,428,3.919,437,3.282,448,3.686,457,2.873,464,3.933,465,3.513,490,2.955,498,10.122,509,3.779,512,3.471,515,3.282,573,3.982,626,2.975,646,2.975,670,5.05,693,5.607,749,8.618,767,3.498,808,2.733,809,4.8,818,3.023,823,2.833,833,3.553,873,3.023,920,3.372,1014,4.418,1113,3.2,1121,3.055,1132,9.904,1215,2.916,1221,6.757,1309,4.028,1401,4.912,1445,4.519,1535,5.259,1555,4.8,1590,4.304,1628,4.129,1679,2.945,1709,3.445,1716,2.051,1793,4.442,1803,3.372,1824,6.549,1837,3.2,1875,2.159,1988,2.733,2020,2.794,2025,3.675,2047,4.442,2078,3.445,2094,4.593,2122,3.162,2127,3.855,2260,4.917,2422,3.937,2438,13.682,3533,3.982,3663,13.169,3701,10.122,4559,11.777,4563,9.2,4574,3.42,4590,3.643,4591,11.245,4592,8.303,4595,4.697,4603,4.917,4604,4.917,4605,4.917,4606,4.8,4607,4.917,4702,4.697,4710,8.338,4711,5.05,4712,5.05,4713,7.926,4714,5.05,4715,5.05,4716,5.05,4717,5.392,4718,5.392,5441,3.779,5929,5.392,5933,5.392,5975,5.626,5976,5.626,5977,5.626]],["keywords/1286",[]],["title/1287",[1023,407.123]],["content/1287",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1125,13.242,1126,6.573,3308,14.003,3430,9.483,3432,9.159,5516,10.861]],["keywords/1287",[]],["title/1288",[61,341.406,272,500.408,557,429.944,1824,407.945]],["content/1288",[22,2.13,61,8.431,92,7.646,205,8.038,224,1.948,272,11.213,279,5.639,354,4.231,367,6.502,513,7.275,516,9.577,546,6.768,574,7.795,616,5.588,627,4.363,646,7.954,693,4.482,704,6.768,849,6.412,1150,5.968,1151,9.499,1215,7.795,1217,7.719,1220,7.682,1267,7.275,1538,11.038,1758,12.082,1824,9.141,1988,7.307,5971,15.04]],["keywords/1288",[]],["title/1289",[864,626.718]],["content/1289",[2,0.878,9,5.432,15,2.1,16,3.198,22,1.582,31,2.181,49,2.171,61,5.679,66,3.592,69,4.539,79,2.278,92,7.253,112,6.684,113,1.986,115,4.921,127,2.06,161,3.281,163,4.393,172,4.921,198,3.855,219,3.817,224,1.848,226,1.901,228,2.343,258,2.635,272,4.318,279,4.343,281,3.044,289,6.063,303,3.611,325,4.042,335,4.773,340,1.878,367,6.168,372,2.604,385,2.767,396,3.506,404,2.875,411,4.467,423,4.879,426,2.461,448,2.937,457,3.78,556,5.753,574,3.836,594,3.762,626,3.914,627,4.139,644,3.369,646,7.546,647,7.443,651,5.333,658,3.382,682,3.356,693,5.786,752,3.306,804,3.477,808,3.596,810,3.799,823,3.727,829,3.799,849,4.938,875,2.354,920,4.436,1023,1.982,1074,4.21,1150,2.937,1189,3.356,1210,9.464,1212,4.602,1215,10.063,1217,8.284,1220,8.948,1221,5.135,1222,4.533,1230,6.847,1290,7.706,1988,8.511,2037,5.75,2046,7.375,2047,9.145,2132,4.405,3440,5.662,3578,6.18,3668,9.145,3669,5.662,3670,5.844,3814,6.18,4598,6.469,4601,11.084,4664,5.75,5978,7.094,5979,7.813,5980,7.813]],["keywords/1289",[]],["title/1290",[291,378.221,1014,574.998]],["content/1290",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1290",[]],["title/1291",[15,284.75,43,300.406,428,423.455]],["content/1291",[3,3.223,40,12.676,43,6.319,321,9.552,368,7.258,427,7.234,428,8.907,448,6.94,465,7.984,1803,12.652,1824,8.318,2078,10.711,4590,11.327]],["keywords/1291",[]],["title/1292",[382,745.942,2473,745.942]],["content/1292",[1,0.618,2,0.524,11,1.371,13,1.113,18,0.613,19,1.16,22,0.678,23,3.025,24,0.711,25,0.779,29,1.703,30,2.76,31,0.709,34,2.054,35,1.815,36,1.055,39,1.649,40,1.744,41,1.361,43,0.72,49,0.706,52,1.113,59,1.212,62,1.135,64,3.234,66,0.606,68,1.322,69,0.766,71,2.183,73,0.949,77,1.666,79,0.741,87,1.14,92,1.223,97,1.223,103,1.185,106,0.999,113,1.185,119,1.587,120,1.229,127,1.228,128,1.703,136,1.059,137,1.453,139,2.311,141,2.307,160,1.286,168,1.407,172,1.023,173,1.03,174,1.559,181,1.149,183,2.307,185,0.958,186,1.566,192,1.361,194,1.79,195,0.376,196,1.063,199,1.617,208,2.082,211,1.666,225,1.322,226,0.618,230,2.924,231,2.009,244,1.26,251,1.501,254,1.369,262,1.185,267,1.766,277,0.578,283,1.03,287,1.174,289,3.201,290,1.18,291,0.753,296,1.079,300,1.79,303,2.154,307,0.924,312,1.174,320,1.361,330,2.354,335,1.134,338,1.433,343,1.019,349,1.601,362,3.057,364,1.545,367,1.04,368,0.999,369,1.443,374,1.016,382,4.672,385,0.9,386,1.353,397,0.58,404,0.935,405,1.587,408,1.169,409,1.485,410,1.649,416,1.423,422,2.146,426,0.8,427,0.995,428,1.016,432,1.229,435,1.395,439,1.453,440,1.95,452,1.617,455,1.443,458,1.212,463,1.841,464,1.261,465,1.67,467,1.113,469,1.012,485,2.193,494,1.423,495,1.012,503,1.723,505,1.395,511,2.411,520,1.633,522,3.199,526,0.779,528,1.79,533,1.254,539,1.934,550,1.286,551,1.113,563,2.91,568,1.048,572,1.666,575,0.658,594,1.223,603,1.273,607,1.223,608,1.601,614,1.744,625,1.474,627,0.698,631,1.633,642,1.453,646,1.273,647,1.876,654,1.423,677,1.223,681,1.433,682,1.091,686,2.01,689,0.771,693,0.717,695,4.231,697,1.395,704,1.083,712,1.508,713,2.227,717,1.369,719,1.508,720,1.79,721,1.353,730,1.666,736,1.453,746,1.241,775,2.161,781,1.87,792,1.131,808,2.145,812,1.229,818,1.293,833,1.52,835,2.398,837,1.703,846,1.322,855,2.01,856,1.617,860,1.485,861,1.97,863,1.815,870,1.79,875,0.766,876,1.766,897,1.037,902,1.206,906,1.229,909,1.533,964,2.575,974,1.572,976,2.163,1006,2.307,1007,1.433,1008,1.329,1020,1.508,1022,1.52,1028,2.01,1032,1.815,1042,1.104,1043,1.601,1050,1.149,1063,1.485,1081,2.054,1102,2.161,1126,0.943,1141,1.744,1146,2.01,1148,2.104,1158,1.815,1189,2.002,1198,1.934,1204,1.572,1210,1.3,1221,1.067,1234,1.87,1260,1.934,1261,1.934,1270,1.766,1273,1.685,1280,1.841,1300,2.054,1312,1.649,1331,2.307,1337,1.744,1341,2.307,1391,1.766,1393,3.591,1396,1.766,1398,2.307,1399,1.87,1400,1.87,1453,1.496,1455,1.649,1456,2.104,1470,2.054,1471,1.9,1486,2.161,1493,2.307,1497,2.054,1535,1.067,1551,1.841,1559,1.79,1561,1.744,1565,1.744,1569,1.9,1592,2.104,1594,1.533,1633,1.633,1639,1.97,1643,1.3,1660,2.227,1679,1.26,1708,1.337,1716,0.877,1731,1.617,1736,2.01,1745,1.841,1757,2.01,1762,1.666,1768,1.572,1770,2.01,1794,1.723,1799,1.815,1802,2.01,1824,2.1,1832,1.496,1856,1.744,1857,1.766,1876,1.703,1923,1.766,1943,1.572,1944,2.307,1952,2.227,1970,2.227,1974,1.353,1986,1.703,1989,1.703,1995,1.87,2022,2.161,2049,2.227,2078,1.474,2081,1.649,2086,1.601,2094,1.19,2120,3.283,2127,1.649,2131,1.766,2170,1.841,2177,1.97,2190,2.227,2216,3.328,2247,2.161,2248,1.559,2264,1.934,2272,2.227,2317,3.485,2462,1.723,2470,1.79,2473,4.672,2510,2.835,2542,2.161,2549,1.841,2550,1.87,2559,1.87,2564,1.559,2594,1.815,2607,1.649,2823,1.815,2968,1.815,3009,1.9,3034,1.649,3088,2.307,3138,2.104,3173,2.307,3217,2.161,3221,3.613,3330,1.97,3395,1.545,3430,1.361,3626,3.161,3655,2.104,3663,1.685,3788,1.815,3872,2.104,3891,2.104,3935,1.79,4153,1.9,4208,2.227,4266,1.723,4372,2.227,4541,3.161,4563,1.453,4574,1.463,4584,1.79,4590,1.559,4609,3.199,4618,1.508,4636,1.766,4777,1.87,4873,2.01,4889,2.307,4900,2.307,5105,2.227,5177,2.104,5226,2.01,5231,2.104,5273,2.307,5523,1.934,5524,1.87,5525,1.934,5527,1.934,5529,1.815,5532,1.934,5533,1.9,5536,1.9,5539,2.054,5540,1.934,5543,1.9,5544,1.766,5556,1.934,5558,1.9,5559,2.054,5561,1.934,5566,1.87,5574,1.9,5578,1.934,5581,2.01,5583,1.934,5585,2.01,5593,1.9,5595,2.01,5598,2.054,5605,2.054,5612,3.485,5616,1.87,5629,1.9,5640,2.054,5643,1.934,5644,3.485,5649,1.934,5650,1.934,5652,2.054,5653,2.054,5654,1.9,5655,1.934,5658,1.934,5663,2.054,5671,2.054,5674,2.054,5683,1.9,5687,1.934,5694,1.815,5695,1.934,5709,3.377,5756,5.861,5765,2.227,5770,2.161,5810,2.161,5870,2.307,5981,2.407,5982,2.407,5983,2.407,5984,2.407,5985,2.407,5986,2.407,5987,2.407,5988,2.407,5989,2.407,5990,2.407,5991,2.407,5992,2.407,5993,2.407,5994,2.407,5995,2.407,5996,2.407,5997,2.407,5998,2.407,5999,2.407,6000,2.407,6001,2.407,6002,2.407,6003,2.407,6004,2.407,6005,2.407,6006,2.407,6007,2.407,6008,2.407,6009,2.407,6010,2.407,6011,2.407,6012,2.407,6013,2.407,6014,2.407,6015,2.407,6016,2.407,6017,2.407,6018,2.407,6019,2.407,6020,2.161,6021,2.407,6022,2.407,6023,2.407,6024,2.407,6025,2.407,6026,2.407,6027,2.407,6028,2.407,6029,2.407,6030,2.407,6031,2.407,6032,2.407,6033,2.407,6034,2.407,6035,2.407,6036,2.407,6037,2.407,6038,2.407,6039,2.407,6040,2.407,6041,2.407,6042,2.161,6043,2.407,6044,2.307,6045,2.407,6046,2.407,6047,2.407,6048,2.407,6049,2.407,6050,2.407,6051,2.407,6052,2.407,6053,2.407,6054,2.407,6055,2.407,6056,2.161,6057,2.407,6058,2.407,6059,2.407,6060,2.407,6061,2.407,6062,2.407,6063,2.407,6064,2.407,6065,2.407,6066,2.407,6067,2.407,6068,2.407,6069,2.407,6070,2.407,6071,2.407,6072,2.407,6073,2.407,6074,2.407,6075,2.407,6076,2.407,6077,2.407,6078,2.407,6079,2.407,6080,2.407,6081,2.407,6082,2.407,6083,2.407,6084,2.407,6085,2.407,6086,2.407,6087,2.407,6088,2.407,6089,2.407,6090,2.407,6091,4.414,6092,2.407,6093,2.407,6094,2.407,6095,2.407,6096,2.407,6097,2.307,6098,2.407,6099,4.414,6100,4.414,6101,2.407,6102,2.407,6103,2.407,6104,2.407,6105,2.407,6106,4.414,6107,2.407,6108,2.161,6109,2.407,6110,2.407,6111,2.407,6112,2.407,6113,2.407,6114,2.407,6115,2.407,6116,2.407,6117,2.407,6118,2.407,6119,2.407,6120,2.407,6121,2.407,6122,2.407,6123,2.407,6124,2.407,6125,2.407,6126,2.407,6127,2.407,6128,2.407,6129,2.407,6130,2.407,6131,2.407,6132,2.407,6133,2.407,6134,2.407,6135,2.407,6136,2.407,6137,2.407,6138,2.407,6139,2.407,6140,2.407,6141,2.407,6142,4.414,6143,2.407,6144,2.407,6145,2.227,6146,2.407,6147,2.407,6148,2.407,6149,2.407,6150,2.407,6151,2.407,6152,2.407,6153,2.407,6154,2.407,6155,2.161,6156,2.407,6157,2.407,6158,2.407,6159,2.407,6160,2.407,6161,2.407,6162,2.407,6163,2.407,6164,2.407,6165,2.407,6166,2.407,6167,2.407,6168,2.407,6169,2.407,6170,2.407,6171,2.407,6172,2.407,6173,2.407,6174,2.407,6175,2.407,6176,2.407,6177,2.407,6178,2.407,6179,2.407,6180,2.407,6181,2.407,6182,2.407,6183,2.161,6184,2.407,6185,4.414,6186,2.407,6187,2.407,6188,2.407,6189,4.414,6190,2.407,6191,2.407,6192,2.407,6193,2.407,6194,2.407,6195,2.407,6196,4.414,6197,2.407,6198,2.407,6199,2.407,6200,2.407,6201,2.407,6202,2.407,6203,2.407,6204,2.407,6205,2.407,6206,2.407,6207,2.407,6208,2.407,6209,2.407,6210,2.407,6211,4.414,6212,2.407,6213,2.407,6214,2.407,6215,2.407,6216,2.161,6217,2.407,6218,2.407,6219,2.407,6220,2.407,6221,2.407,6222,2.407,6223,2.407,6224,2.407,6225,2.407,6226,2.407,6227,2.407,6228,2.407,6229,2.407,6230,2.407,6231,2.407,6232,2.407,6233,2.407,6234,2.407,6235,2.407,6236,2.407,6237,2.407,6238,2.407,6239,2.227,6240,2.407,6241,2.407,6242,2.407,6243,2.407,6244,2.407,6245,2.407,6246,2.407,6247,2.407,6248,2.407]],["keywords/1292",[]],["title/1293",[5848,1021.147]],["content/1293",[66,3.901,87,7.34,167,10.216,223,4.891,224,2.782,230,7.563,251,6.663,263,5.424,351,10.216,370,10.971,372,6.893,682,7.027,698,9.162,741,9.635,1350,12.039,1442,9.868,1812,10.73,2251,12.039,2444,12.939,2608,10.124,2963,13.911,3270,13.545,3935,11.525,5848,10.409]],["keywords/1293",[]],["title/1294",[61,341.406,172,364.419,1150,340.348,1824,407.945]],["content/1294",[]],["keywords/1294",[]],["title/1295",[2042,532.102]],["content/1295",[1,3.674,2,1.697,3,2.635,15,4.058,22,1.585,25,4.627,66,4.683,68,7.855,69,5.919,168,3.292,199,12.498,223,3.571,224,2.41,226,4.78,335,5.313,340,3.629,352,4.708,367,8.044,370,7.305,458,7.202,518,6.341,575,5.089,627,4.149,829,7.34,1133,7.621,1824,8.849,4574,8.695,5966,14.302,5967,12.838,5968,14.302,5969,18.606]],["keywords/1295",[]],["title/1296",[864,626.718]],["content/1296",[]],["keywords/1296",[]],["title/1297",[61,298.102,163,284.088,172,318.197,1150,297.179,6249,790.599]],["content/1297",[2,2.168,112,8.268,279,6.852,335,4.694,367,7.9,385,6.832,626,9.664,651,8.414,1215,11.973]],["keywords/1297",[]],["title/1298",[693,299.043,1217,515.041,1220,512.565]],["content/1298",[13,4.901,15,3.581,16,2.079,22,1.399,24,5.057,25,2.676,31,2.437,49,2.426,61,3.292,66,2.082,69,2.631,82,6.645,92,4.205,94,6.328,112,6.533,115,3.514,127,2.302,136,6.735,146,4.857,219,4.266,224,1.635,226,2.125,263,2.895,297,3.984,330,5.891,334,3.886,335,3.242,343,3.502,345,4.09,357,4.421,374,5.326,385,3.093,404,3.213,422,5.37,445,2.887,448,3.282,457,4.225,575,2.263,603,6.675,616,2.405,625,5.066,641,6.297,644,5.744,647,6.502,651,5.812,693,2.465,707,3.252,779,8.738,810,4.245,812,4.225,864,3.41,920,4.958,946,6.151,1049,4.493,1143,4.734,1150,6.072,1163,8.104,1165,6.426,1210,6.817,1212,5.143,1215,4.287,1217,4.245,1220,10.324,1230,9.047,1237,4.89,1241,12.91,1267,4.001,1507,10.139,1859,5.267,2078,5.066,2132,4.923,2449,7.058,2450,15.394,2451,13.058,2452,12.777,2453,7.058,2454,6.769,2455,6.328,2456,6.769,2457,7.058,2462,5.923,2469,15.37,2470,6.151,2471,7.928,2472,8.271,2473,5.104,3440,6.328,3814,6.906,4601,6.426,5978,7.928]],["keywords/1298",[]],["title/1299",[16,250.43]],["content/1299",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,1824,7.911]],["keywords/1299",[]],["title/1300",[282,329.633]],["content/1300",[13,3.285,18,4.785,19,2.266,20,3.27,22,2.081,30,6.845,31,2.54,43,2.581,65,4.468,108,4.845,112,4.969,113,3.495,137,5.204,180,4.762,181,4.117,186,3.058,223,3.252,226,3.346,258,1.961,282,1.869,307,6.024,335,4.824,340,2.188,426,7.183,440,3.808,448,5.168,498,7.356,519,5.402,575,5.136,626,4.559,632,8.017,647,5.533,681,5.131,693,5.596,748,5.28,771,7.692,792,4.05,808,4.188,1126,6.152,1210,7.035,1221,5.774,1401,4.559,1535,7.754,1708,4.789,1716,3.143,1875,3.309,2094,8.648,2121,6.102,2182,6.807,3663,14.774,3701,13.393,3850,6.595,4559,10.646,4563,5.204,4574,9.542,4590,5.583,4591,10.755,4592,6.034,4601,6.697,4608,7.198,4609,6.248,4683,6.807,5001,6.926,5002,6.926,5972,8.621,5973,8.621,5974,8.621]],["keywords/1300",[]],["title/1301",[43,256.768,226,220.355,1824,407.945,4563,517.722]],["content/1301",[2,0.698,3,1.776,13,1.484,16,2.331,18,1.5,19,1.547,22,2.12,30,4.462,31,1.734,42,3.179,43,6.16,66,2.426,69,1.872,75,3.916,78,3.659,89,1.446,112,2.246,113,2.587,137,7.389,168,3.258,174,3.811,223,4.187,224,1.248,226,4.549,251,3.279,263,3.374,270,2.099,275,4.119,281,1.547,282,2.654,284,2.017,291,3.83,307,4.699,329,2.609,335,3.145,340,1.494,350,4.438,363,3.456,368,2.442,370,3.006,389,3.552,399,1.371,405,6.354,417,3.779,426,1.957,427,5.854,428,4.068,437,3.434,448,3.825,457,3.006,464,3.497,465,3.646,490,3.066,498,10.446,509,3.953,512,3.631,515,3.434,573,4.166,626,3.113,646,3.113,670,5.283,693,5.7,749,8.829,809,5.022,818,3.162,823,2.964,833,3.717,873,3.162,1014,4.584,1113,3.348,1121,3.197,1132,10.221,1215,3.05,1221,6.923,1309,4.214,1445,4.728,1535,5.427,1555,5.022,1590,4.502,1679,3.081,1709,3.604,1716,2.145,1793,4.647,1803,3.527,1824,5.822,1837,3.348,1875,2.259,2020,2.923,2025,3.845,2078,3.604,2094,4.766,2122,3.308,2127,4.033,2260,5.144,2422,4.119,2438,14.017,3533,4.166,3663,13.389,3701,10.446,4559,12.01,4563,9.425,4574,3.578,4590,3.811,4591,10.7,4592,8.568,4595,4.914,4603,5.144,4604,5.144,4605,5.144,4606,5.022,4607,5.144,4702,4.914,4710,8.653,4711,5.283,4712,5.283,4713,8.225,4714,5.283,4715,5.283,4716,5.283,5441,3.953,5929,5.641,5933,5.641,5975,5.885,5976,5.885,5977,5.885]],["keywords/1301",[]],["title/1302",[1023,407.123]],["content/1302",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1125,13.242,1126,6.573,3308,14.003,3430,9.483,3432,9.159,5516,10.861]],["keywords/1302",[]],["title/1303",[864,626.718]],["content/1303",[2,1.725,9,5.594,16,3.51,22,1.612,31,2.246,61,3.034,66,4.128,97,3.875,112,6.778,115,6.177,127,2.121,161,3.379,168,1.755,195,1.191,198,3.97,219,3.931,223,1.903,224,2.301,228,3.752,258,2.696,263,2.668,279,4.444,281,3.115,282,1.653,291,2.385,293,4.854,297,3.671,325,4.163,335,4.563,340,3.007,352,2.509,367,6.286,374,3.216,385,2.85,396,3.61,404,2.961,448,3.025,461,4.634,485,3.786,526,2.466,574,6.142,575,4.486,594,6.024,626,4.031,627,3.438,644,3.469,646,7.69,647,6.968,651,5.457,658,5.415,682,5.373,693,4.887,804,3.581,823,5.968,849,6.992,920,4.569,1023,3.174,1139,6.018,1142,3.034,1165,5.921,1189,5.373,1210,6.402,1212,4.739,1215,10.173,1217,8.417,1220,9.073,1221,3.379,1222,7.258,1230,4.506,1824,3.625,2020,3.786,2132,7.054,2466,5.278,2470,5.669,2564,4.936,3404,4.894,3440,5.831,4378,7.622,4597,5.335,4598,6.662,4601,11.295,5242,6.123,5978,7.306,6250,8.69,6251,8.69,6252,14.334,6253,8.69]],["keywords/1303",[]],["title/1304",[291,378.221,1014,574.998]],["content/1304",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1304",[]],["title/1305",[15,284.75,43,300.406,428,423.455]],["content/1305",[3,3.223,40,12.676,43,6.319,321,9.552,368,7.258,427,7.234,428,8.907,448,6.94,465,7.984,1803,12.652,1824,8.318,2078,10.711,4590,11.327]],["keywords/1305",[]],["title/1306",[382,745.942,2473,745.942]],["content/1306",[1,0.618,2,0.524,11,1.371,13,1.113,18,0.613,19,1.16,22,0.678,23,3.025,24,0.711,25,0.779,29,1.703,30,2.76,31,0.709,34,2.054,35,1.815,36,1.055,39,1.649,40,1.744,41,1.361,43,0.72,49,0.706,52,1.113,59,1.212,62,1.135,64,3.234,66,0.606,68,1.322,69,0.766,71,2.183,73,0.949,77,1.666,79,0.741,87,1.14,92,1.223,97,1.223,103,1.185,106,0.999,113,1.185,119,1.587,120,1.229,127,1.228,128,1.703,136,1.059,137,1.453,139,2.311,141,2.307,160,1.286,168,1.407,172,1.023,173,1.03,174,1.559,181,1.149,183,2.307,185,0.958,186,1.566,192,1.361,194,1.79,195,0.376,196,1.063,199,1.617,208,2.082,211,1.666,225,1.322,226,0.618,230,2.924,231,2.009,244,1.26,251,1.501,254,1.369,262,1.185,267,1.766,277,0.578,283,1.03,287,1.174,289,3.201,290,1.18,291,0.753,296,1.079,300,1.79,303,2.154,307,0.924,312,1.174,320,1.361,330,2.354,335,1.134,338,1.433,343,1.019,349,1.601,362,3.057,364,1.545,367,1.04,368,0.999,369,1.443,374,1.016,382,4.672,385,0.9,386,1.353,397,0.58,404,0.935,405,1.587,408,1.169,409,1.485,410,1.649,416,1.423,422,2.146,426,0.8,427,0.995,428,1.016,432,1.229,435,1.395,439,1.453,440,1.95,452,1.617,455,1.443,458,1.212,463,1.841,464,1.261,465,1.67,467,1.113,469,1.012,485,2.193,494,1.423,495,1.012,503,1.723,505,1.395,511,2.411,520,1.633,522,3.199,526,0.779,528,1.79,533,1.254,539,1.934,550,1.286,551,1.113,563,2.91,568,1.048,572,1.666,575,0.658,594,1.223,603,1.273,607,1.223,608,1.601,614,1.744,625,1.474,627,0.698,631,1.633,642,1.453,646,1.273,647,1.876,654,1.423,677,1.223,681,1.433,682,1.091,686,2.01,689,0.771,693,0.717,695,4.231,697,1.395,704,1.083,712,1.508,713,2.227,717,1.369,719,1.508,720,1.79,721,1.353,730,1.666,736,1.453,746,1.241,775,2.161,781,1.87,792,1.131,808,2.145,812,1.229,818,1.293,833,1.52,835,2.398,837,1.703,846,1.322,855,2.01,856,1.617,860,1.485,861,1.97,863,1.815,870,1.79,875,0.766,876,1.766,897,1.037,902,1.206,906,1.229,909,1.533,964,2.575,974,1.572,976,2.163,1006,2.307,1007,1.433,1008,1.329,1020,1.508,1022,1.52,1028,2.01,1032,1.815,1042,1.104,1043,1.601,1050,1.149,1063,1.485,1081,2.054,1102,2.161,1126,0.943,1141,1.744,1146,2.01,1148,2.104,1158,1.815,1189,2.002,1198,1.934,1204,1.572,1210,1.3,1221,1.067,1234,1.87,1260,1.934,1261,1.934,1270,1.766,1273,1.685,1280,1.841,1300,2.054,1312,1.649,1331,2.307,1337,1.744,1341,2.307,1391,1.766,1393,3.591,1396,1.766,1398,2.307,1399,1.87,1400,1.87,1453,1.496,1455,1.649,1456,2.104,1470,2.054,1471,1.9,1486,2.161,1493,2.307,1497,2.054,1535,1.067,1551,1.841,1559,1.79,1561,1.744,1565,1.744,1569,1.9,1592,2.104,1594,1.533,1633,1.633,1639,1.97,1643,1.3,1660,2.227,1679,1.26,1708,1.337,1716,0.877,1731,1.617,1736,2.01,1745,1.841,1757,2.01,1762,1.666,1768,1.572,1770,2.01,1794,1.723,1799,1.815,1802,2.01,1824,2.1,1832,1.496,1856,1.744,1857,1.766,1876,1.703,1923,1.766,1943,1.572,1944,2.307,1952,2.227,1970,2.227,1974,1.353,1986,1.703,1989,1.703,1995,1.87,2022,2.161,2049,2.227,2078,1.474,2081,1.649,2086,1.601,2094,1.19,2120,3.283,2127,1.649,2131,1.766,2170,1.841,2177,1.97,2190,2.227,2216,3.328,2247,2.161,2248,1.559,2264,1.934,2272,2.227,2317,3.485,2462,1.723,2470,1.79,2473,4.672,2510,2.835,2542,2.161,2549,1.841,2550,1.87,2559,1.87,2564,1.559,2594,1.815,2607,1.649,2823,1.815,2968,1.815,3009,1.9,3034,1.649,3088,2.307,3138,2.104,3173,2.307,3217,2.161,3221,3.613,3330,1.97,3395,1.545,3430,1.361,3626,3.161,3655,2.104,3663,1.685,3788,1.815,3872,2.104,3891,2.104,3935,1.79,4153,1.9,4208,2.227,4266,1.723,4372,2.227,4541,3.161,4563,1.453,4574,1.463,4584,1.79,4590,1.559,4609,3.199,4618,1.508,4636,1.766,4777,1.87,4873,2.01,4889,2.307,4900,2.307,5105,2.227,5177,2.104,5226,2.01,5231,2.104,5273,2.307,5523,1.934,5524,1.87,5525,1.934,5527,1.934,5529,1.815,5532,1.934,5533,1.9,5536,1.9,5539,2.054,5540,1.934,5543,1.9,5544,1.766,5556,1.934,5558,1.9,5559,2.054,5561,1.934,5566,1.87,5574,1.9,5578,1.934,5581,2.01,5583,1.934,5585,2.01,5593,1.9,5595,2.01,5598,2.054,5605,2.054,5612,3.485,5616,1.87,5629,1.9,5640,2.054,5643,1.934,5644,3.485,5649,1.934,5650,1.934,5652,2.054,5653,2.054,5654,1.9,5655,1.934,5658,1.934,5663,2.054,5671,2.054,5674,2.054,5683,1.9,5687,1.934,5694,1.815,5695,1.934,5709,3.377,5756,5.861,5765,2.227,5770,2.161,5810,2.161,5870,2.307,5981,2.407,5982,2.407,5983,2.407,5984,2.407,5985,2.407,5986,2.407,5987,2.407,5988,2.407,5989,2.407,5990,2.407,5991,2.407,5992,2.407,5993,2.407,5994,2.407,5995,2.407,5996,2.407,5997,2.407,5998,2.407,5999,2.407,6000,2.407,6001,2.407,6002,2.407,6003,2.407,6004,2.407,6005,2.407,6006,2.407,6007,2.407,6008,2.407,6009,2.407,6010,2.407,6011,2.407,6012,2.407,6013,2.407,6014,2.407,6015,2.407,6016,2.407,6017,2.407,6018,2.407,6019,2.407,6020,2.161,6021,2.407,6022,2.407,6023,2.407,6024,2.407,6025,2.407,6026,2.407,6027,2.407,6028,2.407,6029,2.407,6030,2.407,6031,2.407,6032,2.407,6033,2.407,6034,2.407,6035,2.407,6036,2.407,6037,2.407,6038,2.407,6039,2.407,6040,2.407,6041,2.407,6042,2.161,6043,2.407,6044,2.307,6045,2.407,6046,2.407,6047,2.407,6048,2.407,6049,2.407,6050,2.407,6051,2.407,6052,2.407,6053,2.407,6054,2.407,6055,2.407,6056,2.161,6057,2.407,6058,2.407,6059,2.407,6060,2.407,6061,2.407,6062,2.407,6063,2.407,6064,2.407,6065,2.407,6066,2.407,6067,2.407,6068,2.407,6069,2.407,6070,2.407,6071,2.407,6072,2.407,6073,2.407,6074,2.407,6075,2.407,6076,2.407,6077,2.407,6078,2.407,6079,2.407,6080,2.407,6081,2.407,6082,2.407,6083,2.407,6084,2.407,6085,2.407,6086,2.407,6087,2.407,6088,2.407,6089,2.407,6090,2.407,6091,4.414,6092,2.407,6093,2.407,6094,2.407,6095,2.407,6096,2.407,6097,2.307,6098,2.407,6099,4.414,6100,4.414,6101,2.407,6102,2.407,6103,2.407,6104,2.407,6105,2.407,6106,4.414,6107,2.407,6108,2.161,6109,2.407,6110,2.407,6111,2.407,6112,2.407,6113,2.407,6114,2.407,6115,2.407,6116,2.407,6117,2.407,6118,2.407,6119,2.407,6120,2.407,6121,2.407,6122,2.407,6123,2.407,6124,2.407,6125,2.407,6126,2.407,6127,2.407,6128,2.407,6129,2.407,6130,2.407,6131,2.407,6132,2.407,6133,2.407,6134,2.407,6135,2.407,6136,2.407,6137,2.407,6138,2.407,6139,2.407,6140,2.407,6141,2.407,6142,4.414,6143,2.407,6144,2.407,6145,2.227,6146,2.407,6147,2.407,6148,2.407,6149,2.407,6150,2.407,6151,2.407,6152,2.407,6153,2.407,6154,2.407,6155,2.161,6156,2.407,6157,2.407,6158,2.407,6159,2.407,6160,2.407,6161,2.407,6162,2.407,6163,2.407,6164,2.407,6165,2.407,6166,2.407,6167,2.407,6168,2.407,6169,2.407,6170,2.407,6171,2.407,6172,2.407,6173,2.407,6174,2.407,6175,2.407,6176,2.407,6177,2.407,6178,2.407,6179,2.407,6180,2.407,6181,2.407,6182,2.407,6183,2.161,6184,2.407,6185,4.414,6186,2.407,6187,2.407,6188,2.407,6189,4.414,6190,2.407,6191,2.407,6192,2.407,6193,2.407,6194,2.407,6195,2.407,6196,4.414,6197,2.407,6198,2.407,6199,2.407,6200,2.407,6201,2.407,6202,2.407,6203,2.407,6204,2.407,6205,2.407,6206,2.407,6207,2.407,6208,2.407,6209,2.407,6210,2.407,6211,4.414,6212,2.407,6213,2.407,6214,2.407,6215,2.407,6216,2.161,6217,2.407,6218,2.407,6219,2.407,6220,2.407,6221,2.407,6222,2.407,6223,2.407,6224,2.407,6225,2.407,6226,2.407,6227,2.407,6228,2.407,6229,2.407,6230,2.407,6231,2.407,6232,2.407,6233,2.407,6234,2.407,6235,2.407,6236,2.407,6237,2.407,6238,2.407,6239,2.227,6240,2.407,6241,2.407,6242,2.407,6243,2.407,6244,2.407,6245,2.407,6246,2.407,6247,2.407,6248,2.407]],["keywords/1306",[]],["title/1307",[5848,1021.147]],["content/1307",[66,3.901,87,7.34,167,10.216,223,4.891,224,2.782,230,7.563,251,6.663,263,5.424,351,10.216,370,10.971,372,6.893,682,7.027,698,9.162,741,9.635,1350,12.039,1442,9.868,1812,10.73,2251,12.039,2444,12.939,2608,10.124,2963,13.911,3270,13.545,3935,11.525,5848,10.409]],["keywords/1307",[]],["title/1308",[2041,751.702]],["content/1308",[]],["keywords/1308",[]],["title/1309",[2042,532.102]],["content/1309",[1,4.239,2,1.958,3,3.04,22,1.829,25,5.338,66,5.128,69,5.249,168,4.689,223,4.12,224,2.638,335,5.233,340,4.187,347,6.78,352,5.431,415,10.105,575,4.513,771,8.086,829,8.468,1133,6.758,6254,16.5]],["keywords/1309",[]],["title/1310",[864,626.718]],["content/1310",[16,2.77,18,2.468,19,2.545,22,1.864,31,2.854,49,2.841,61,7.85,92,4.923,112,5.419,113,2.599,127,3.952,172,4.115,198,5.045,205,5.176,219,4.995,224,2.178,258,2.203,272,8.286,279,3.631,335,4.32,340,2.458,354,2.724,367,4.187,404,3.762,423,6.385,426,3.22,427,4.006,448,3.843,457,4.947,513,4.685,516,6.167,546,4.358,574,5.02,616,4.129,627,2.809,644,4.408,646,5.122,647,9.28,682,4.391,693,4.232,704,4.358,752,4.326,849,4.129,920,5.805,1150,3.843,1151,6.117,1210,11.504,1212,6.021,1215,8.716,1217,4.971,1220,4.947,1221,4.294,1230,8.396,1267,4.685,1538,7.108,1758,7.78,1988,8.998,2041,8.315,2046,6.167,2047,7.647,2132,5.765,2531,11.623,3053,6.855,3404,6.219,3440,7.409,3814,8.086,4700,8.694,5970,10.224,5971,9.685,5979,10.224,5980,10.224,6255,11.042]],["keywords/1310",[]],["title/1311",[335,257.805,1151,633.815,2041,496.196]],["content/1311",[2,1.927,66,4.087,69,5.165,112,6.195,127,4.518,163,6.159,226,4.171,279,6.088,335,5.182,445,5.668,627,4.71,693,6.538,1074,9.237,1151,12.739,1189,7.362,1215,8.416,1217,8.334,1220,10.302,1290,10.803,2041,8.029,2461,13.288]],["keywords/1311",[]],["title/1312",[16,250.43]],["content/1312",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,415,10.187,574,8.621,875,5.291,897,7.166]],["keywords/1312",[]],["title/1313",[282,329.633]],["content/1313",[2,0.904,11,6.097,16,2.395,18,4.792,19,3.115,20,2.891,22,0.845,25,2.466,30,5.3,31,2.246,65,3.951,66,4.128,79,2.346,108,4.284,112,4.522,113,3.18,155,3.43,168,4.798,172,5.035,220,3.687,221,4.363,223,4.095,224,1.535,226,4.213,228,2.413,231,3.469,258,2.696,262,3.752,270,2.718,282,2.57,291,4.549,335,5.043,340,1.934,389,7.153,397,1.836,399,2.76,417,4.894,426,6.93,429,5.395,448,4.702,512,4.703,518,3.379,556,3.786,557,5.94,569,4.506,575,4.859,647,5.035,677,3.875,693,4.333,748,4.668,749,4.31,771,7.126,808,3.703,812,3.893,818,4.095,849,5.052,993,4.703,1014,5.636,1091,4.776,1126,5.699,1210,6.402,1309,5.458,1401,4.031,1535,7.271,1679,3.99,1709,7.258,1716,4.32,1875,4.548,2020,3.786,2041,3.769,2531,6.238,2847,5.831,3553,6.662,3663,12.433,3848,5.594,3850,9.066,4683,6.018,5001,6.123,5002,6.123,5004,5.921,5005,7.053,5441,5.12,5514,7.053,5515,7.053]],["keywords/1313",[]],["title/1314",[1023,407.123]],["content/1314",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1118,14.311,1124,10.509,1125,13.242,1126,6.573,3430,9.483,3432,9.159,5516,10.861]],["keywords/1314",[]],["title/1315",[291,378.221,1014,574.998]],["content/1315",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1315",[]],["title/1316",[382,745.942,2473,745.942]],["content/1316",[1,0.917,2,0.747,3,0.658,11,1.109,13,0.9,22,0.698,25,1.155,29,2.526,30,1.301,31,1.052,39,2.445,41,2.018,43,1.068,49,1.047,52,1.65,64,1.887,66,0.898,68,1.96,69,1.135,71,3.112,73,1.407,77,2.471,79,1.098,87,1.69,97,1.814,100,2.691,107,2.124,110,1.907,113,0.958,119,2.353,136,1.571,137,2.154,139,3.295,146,2.096,155,1.606,168,1.449,172,1.516,181,1.704,185,1.421,186,2.232,192,2.018,196,1.576,199,2.397,202,2.818,211,2.471,225,1.96,226,0.917,227,1.308,230,3.26,262,1.757,265,2.375,266,1.938,267,2.619,283,1.527,287,1.741,289,4.42,290,1.749,291,1.116,303,1.741,307,1.37,312,1.741,320,2.018,330,1.374,338,2.124,343,1.511,358,2.332,362,2.471,364,2.292,368,1.481,370,1.823,374,1.506,382,6.281,384,2.619,385,1.334,394,1.823,404,1.386,405,2.353,408,1.734,409,2.202,410,2.445,416,2.11,428,1.506,432,1.823,440,2.78,452,2.397,455,2.139,458,1.797,463,2.73,464,1.798,465,1.35,466,2.445,467,1.65,485,1.773,491,2.555,493,2.17,494,3.721,505,2.069,511,3.437,518,1.582,519,2.236,528,2.654,532,2.254,533,1.859,540,1.971,550,1.907,572,2.471,575,0.976,594,1.814,603,1.887,607,1.814,620,2.498,626,1.887,651,1.643,654,2.11,658,1.631,677,1.814,679,1.887,693,1.876,696,2.619,697,2.069,704,1.606,712,2.236,717,2.03,719,2.236,721,2.006,730,4.358,746,1.841,747,2.691,753,2.921,787,2.691,792,1.677,808,1.734,812,1.823,818,1.917,829,1.832,834,2.555,835,1.938,846,1.96,858,2.292,860,2.202,871,2.056,875,1.135,897,1.537,906,1.823,908,1.462,909,2.273,938,2.421,957,4.313,964,2.082,976,3.084,1007,2.124,1008,1.971,1022,2.254,1032,2.691,1043,2.375,1063,2.202,1141,2.587,1154,2.587,1158,2.691,1189,1.618,1194,3.204,1204,2.332,1237,2.11,1270,2.619,1273,2.498,1280,2.73,1281,2.691,1308,2.619,1310,2.772,1312,4.313,1315,2.555,1344,2.471,1348,2.332,1352,2.772,1355,2.421,1393,4.958,1399,2.772,1400,2.772,1401,1.887,1453,2.219,1488,2.186,1490,2.73,1559,2.654,1561,2.587,1565,2.587,1579,3.119,1594,2.273,1611,2.421,1633,2.421,1643,3.4,1679,1.868,1703,2.921,1708,1.982,1731,2.397,1762,2.471,1775,2.186,1794,2.555,1808,2.654,1832,2.219,1856,2.587,1857,2.619,1879,2.867,1974,2.006,1989,2.526,2041,3.112,2055,2.445,2078,2.186,2081,2.445,2086,2.375,2127,2.445,2131,2.619,2170,2.73,2194,2.921,2248,2.311,2264,2.867,2473,6.281,2510,4.041,2549,2.73,2550,2.772,2564,2.311,2846,2.498,2898,3.204,2968,2.691,3009,2.818,3064,2.471,3102,2.818,3395,2.292,3536,2.867,3574,2.921,3626,2.555,3788,2.691,3887,2.818,4153,2.818,4266,2.555,4541,4.507,4609,2.587,4636,2.619,4777,2.772,4903,2.98,5226,2.98,5243,4.969,5519,3.204,5520,3.204,5521,3.302,5522,3.302,5523,2.867,5524,2.772,5525,2.867,5526,3.302,5527,2.867,5528,3.045,5529,2.691,5530,3.302,5531,3.302,5532,2.867,5533,2.818,5534,3.045,5535,3.045,5536,2.818,5537,2.818,5538,3.045,5539,3.045,5540,2.867,5541,3.045,5542,3.302,5543,2.818,5544,4.619,5545,3.045,5546,3.302,5547,3.302,5548,2.98,5549,3.302,5550,2.818,5551,3.302,5552,3.045,5553,3.302,5554,3.119,5555,3.302,5556,2.867,5557,3.302,5558,2.818,5559,3.045,5560,3.045,5561,2.867,5562,3.045,5563,3.204,5564,3.302,5565,3.302,5566,2.772,5567,3.302,5568,2.98,5569,3.204,5570,3.302,5571,3.045,5572,3.204,5573,3.302,5574,2.818,5575,3.302,5576,3.302,5577,3.302,5578,2.867,5579,3.204,5580,3.045,5581,2.98,5582,3.302,5583,2.867,5584,3.302,5585,2.98,5586,3.045,5587,3.302,5588,3.302,5589,3.302,5590,3.302,5591,3.302,5592,3.302,5593,2.818,5594,3.302,5595,2.98,5596,3.302,5597,3.302,5598,3.045,5599,3.302,5600,3.302,5601,3.302,5602,3.045,5603,3.302,5604,3.302,5605,3.045,5606,3.302,5607,2.921,5608,3.302,5609,3.045,5610,2.98,5611,3.204,5612,4.969,5613,3.045,5614,3.045,5615,3.045,5616,2.772,5617,3.045,5618,3.302,5619,2.867,5620,3.045,5621,3.045,5622,2.921,5623,3.302,5624,5.824,5625,3.302,5626,3.045,5627,3.302,5628,3.045,5629,2.818,5630,3.302,5631,3.045,5632,3.045,5633,3.302,5634,3.302,5635,3.045,5636,3.045,5637,3.302,5638,3.302,5639,3.302,5640,3.045,5641,3.045,5642,3.302,5643,2.867,5644,4.969,5645,3.302,5646,2.98,5647,3.045,5648,3.045,5649,2.867,5650,2.867,5651,3.045,5652,3.045,5653,3.045,5654,2.818,5655,2.867,5656,3.045,5657,3.302,5658,2.867,5659,3.045,5660,3.302,5661,3.045,5662,3.302,5663,3.045,5664,3.302,5665,3.045,5666,3.045,5667,3.302,5668,3.204,5669,3.045,5670,3.045,5671,3.045,5672,3.045,5673,3.045,5674,3.045,5675,3.045,5676,3.045,5677,3.045,5678,3.045,5679,3.045,5680,3.045,5681,3.045,5682,3.045,5683,2.818,5684,3.302,5685,3.302,5686,3.045,5687,2.867,5688,3.045,5689,3.302,5690,3.045,5691,3.045,5692,3.204,5693,3.045,5694,2.691,5695,2.867,5696,3.045,5697,3.302,5698,3.045,5699,2.98,5700,3.045,5701,2.98,5702,3.045,5703,3.302,5704,3.119,5705,3.045,5706,3.045,5707,3.204,5708,3.045,5709,2.73,5710,3.045,5711,3.045,5712,2.98,5713,3.045]],["keywords/1316",[]],["title/1317",[5848,1021.147]],["content/1317",[2,1.283,19,4.704,43,4.604,44,7.937,66,3.871,89,2.657,113,4.803,167,10.139,168,3.54,223,4.867,224,2.525,230,5.938,251,6.088,263,5.383,343,4.579,351,10.139,370,10.52,372,5.412,415,9.419,417,9.875,426,3.595,428,6.49,434,8.803,440,7.906,464,3.089,465,6.77,483,9.029,490,3.44,493,6.575,608,7.195,682,4.903,698,6.393,741,9.562,974,7.065,1342,9.708,1442,6.886,1812,7.488,1973,7.336,2078,11.939,2125,7.336,2251,8.401,2608,7.065,3935,8.042,4266,7.744,5123,9.708,5753,10.007,5848,7.264,6256,10.365,6257,10.365,6258,10.365,6259,10.365,6260,10.365,6261,10.365]],["keywords/1317",[]],["title/1318",[1824,477.276,1988,487.519,2046,639]],["content/1318",[]],["keywords/1318",[]],["title/1319",[2042,532.102]],["content/1319",[1,3.674,2,1.697,3,2.635,15,4.058,22,1.585,25,4.627,66,4.683,68,7.855,69,5.919,168,3.292,199,12.498,223,3.571,224,2.41,226,4.78,335,5.313,340,3.629,352,4.708,367,8.044,370,7.305,458,7.202,518,6.341,575,5.089,627,4.149,829,7.34,1133,7.621,1824,8.849,4574,8.695,5966,14.302,5967,12.838,5968,14.302,5969,18.606]],["keywords/1319",[]],["title/1320",[864,626.718]],["content/1320",[16,2.931,66,4.479,115,7.56,161,7.889,279,6.672,325,9.719,335,4.572,396,8.428,574,9.223,627,5.162,693,5.303,1189,8.068,1215,9.223,1217,9.133,1220,9.089]],["keywords/1320",[]],["title/1321",[163,325.355,693,255.603,1988,416.7,2046,546.176]],["content/1321",[2,1.746,66,4.77,69,6.669,79,4.528,92,10.657,112,5.614,115,6.252,226,3.78,279,5.517,289,9.921,335,4.869,372,5.178,556,9.413,627,4.268,646,10.023,693,4.385,752,6.572,808,7.149,810,7.552,829,7.552,1215,7.626,1290,12.609,1988,7.149,3578,12.286,3668,14.964,3669,11.257,3670,11.618,4664,11.431]],["keywords/1321",[]],["title/1322",[693,299.043,1217,515.041,1220,512.565]],["content/1322",[9,5.26,13,4.838,15,3.205,16,3.019,22,1.549,24,4.683,25,2.319,31,2.112,49,2.102,61,2.853,66,1.804,69,2.28,82,5.758,92,8.061,112,2.735,113,1.923,115,4.798,127,1.994,136,6.151,185,2.853,219,3.696,224,1.81,226,1.841,228,2.269,258,2.569,272,4.181,281,1.884,289,3.752,297,3.452,303,3.497,330,4.347,334,3.367,335,2.901,340,1.819,343,3.035,352,2.359,357,3.83,367,3.098,374,4.766,404,2.784,422,2.515,427,2.964,448,2.844,457,3.661,575,3.823,594,3.643,603,3.791,604,4.209,607,5.741,625,4.389,641,5.635,644,6.361,646,5.973,647,6.737,651,5.2,658,3.275,693,4.726,779,4.963,804,3.367,810,3.679,812,3.661,823,3.609,849,4.815,864,2.955,920,4.296,946,5.33,975,5.483,1023,1.919,1049,3.893,1210,8.566,1212,4.456,1217,7.173,1220,10.905,1221,3.177,1222,4.389,1230,8.262,1237,4.237,1241,10.537,1267,3.467,1507,5.758,1552,5.26,1988,5.486,2027,6.505,2037,5.568,2046,4.564,2078,4.389,2132,4.266,2443,6.869,2444,5.984,2445,6.869,2446,6.869,2449,6.116,2450,13.24,2451,9.637,2452,9.429,2453,6.116,2454,5.866,2455,5.483,2456,5.866,2457,6.116,2462,5.132,2463,15.199,2464,7.167,2465,7.167,2466,4.963,2467,7.167,2468,7.167,3440,5.483,3814,5.984,4598,6.264,4601,5.568,5978,6.869]],["keywords/1322",[]],["title/1323",[16,250.43]],["content/1323",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,1824,7.911]],["keywords/1323",[]],["title/1324",[282,329.633]],["content/1324",[13,3.285,18,4.785,19,2.266,20,3.27,22,2.081,30,6.845,31,2.54,43,2.581,65,4.468,108,4.845,112,4.969,113,3.495,137,5.204,180,4.762,181,4.117,186,3.058,223,3.252,226,3.346,258,1.961,282,1.869,307,6.024,335,4.824,340,2.188,426,7.183,440,3.808,448,5.168,498,7.356,519,5.402,575,5.136,626,4.559,632,8.017,647,5.533,681,5.131,693,5.596,748,5.28,771,7.692,792,4.05,808,4.188,1126,6.152,1210,7.035,1221,5.774,1401,4.559,1535,7.754,1708,4.789,1716,3.143,1875,3.309,2094,8.648,2121,6.102,2182,6.807,3663,14.774,3701,13.393,3850,6.595,4559,10.646,4563,5.204,4574,9.542,4590,5.583,4591,10.755,4592,6.034,4601,6.697,4608,7.198,4609,6.248,4683,6.807,5001,6.926,5002,6.926,5972,8.621,5973,8.621,5974,8.621]],["keywords/1324",[]],["title/1325",[43,256.768,226,220.355,1824,407.945,4563,517.722]],["content/1325",[2,0.667,3,1.711,13,1.419,16,2.268,18,1.433,19,1.478,22,2.148,30,4.324,31,1.658,42,3.039,43,6.078,66,2.986,69,1.79,75,3.743,78,3.498,89,1.382,112,2.146,113,2.493,137,7.16,168,3.17,174,3.643,223,4.097,224,1.203,226,4.46,251,3.159,263,3.251,270,2.006,275,3.937,281,1.478,282,2.572,284,1.928,291,3.711,307,4.553,329,4.118,335,3.047,340,1.428,350,4.242,363,3.304,368,2.334,370,2.873,389,3.396,399,1.31,405,6.123,417,3.612,426,1.87,427,5.696,428,3.919,437,3.282,448,3.686,457,2.873,464,3.933,465,3.513,490,2.955,498,10.122,509,3.779,512,3.471,515,3.282,573,3.982,626,2.975,646,2.975,670,5.05,693,5.607,749,8.618,767,3.498,808,2.733,809,4.8,818,3.023,823,2.833,833,3.553,873,3.023,920,3.372,1014,4.418,1113,3.2,1121,3.055,1132,9.904,1215,2.916,1221,6.757,1309,4.028,1401,4.912,1445,4.519,1535,5.259,1555,4.8,1590,4.304,1628,4.129,1679,2.945,1709,3.445,1716,2.051,1793,4.442,1803,3.372,1824,6.549,1837,3.2,1875,2.159,1988,2.733,2020,2.794,2025,3.675,2047,4.442,2078,3.445,2094,4.593,2122,3.162,2127,3.855,2260,4.917,2422,3.937,2438,13.682,3533,3.982,3663,13.169,3701,10.122,4559,11.777,4563,9.2,4574,3.42,4590,3.643,4591,11.245,4592,8.303,4595,4.697,4603,4.917,4604,4.917,4605,4.917,4606,4.8,4607,4.917,4702,4.697,4710,8.338,4711,5.05,4712,5.05,4713,7.926,4714,5.05,4715,5.05,4716,5.05,4717,5.392,4718,5.392,5441,3.779,5929,5.392,5933,5.392,5975,5.626,5976,5.626,5977,5.626]],["keywords/1325",[]],["title/1326",[1023,407.123]],["content/1326",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1125,13.242,1126,6.573,3308,14.003,3430,9.483,3432,9.159,5516,10.861]],["keywords/1326",[]],["title/1327",[291,378.221,1014,574.998]],["content/1327",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1327",[]],["title/1328",[15,284.75,43,300.406,428,423.455]],["content/1328",[3,3.223,40,12.676,43,6.319,321,9.552,368,7.258,427,7.234,428,8.907,448,6.94,465,7.984,1803,12.652,1824,8.318,2078,10.711,4590,11.327]],["keywords/1328",[]],["title/1329",[382,745.942,2473,745.942]],["content/1329",[1,0.618,2,0.524,11,1.371,13,1.113,18,0.613,19,1.16,22,0.678,23,3.025,24,0.711,25,0.779,29,1.703,30,2.76,31,0.709,34,2.054,35,1.815,36,1.055,39,1.649,40,1.744,41,1.361,43,0.72,49,0.706,52,1.113,59,1.212,62,1.135,64,3.234,66,0.606,68,1.322,69,0.766,71,2.183,73,0.949,77,1.666,79,0.741,87,1.14,92,1.223,97,1.223,103,1.185,106,0.999,113,1.185,119,1.587,120,1.229,127,1.228,128,1.703,136,1.059,137,1.453,139,2.311,141,2.307,160,1.286,168,1.407,172,1.023,173,1.03,174,1.559,181,1.149,183,2.307,185,0.958,186,1.566,192,1.361,194,1.79,195,0.376,196,1.063,199,1.617,208,2.082,211,1.666,225,1.322,226,0.618,230,2.924,231,2.009,244,1.26,251,1.501,254,1.369,262,1.185,267,1.766,277,0.578,283,1.03,287,1.174,289,3.201,290,1.18,291,0.753,296,1.079,300,1.79,303,2.154,307,0.924,312,1.174,320,1.361,330,2.354,335,1.134,338,1.433,343,1.019,349,1.601,362,3.057,364,1.545,367,1.04,368,0.999,369,1.443,374,1.016,382,4.672,385,0.9,386,1.353,397,0.58,404,0.935,405,1.587,408,1.169,409,1.485,410,1.649,416,1.423,422,2.146,426,0.8,427,0.995,428,1.016,432,1.229,435,1.395,439,1.453,440,1.95,452,1.617,455,1.443,458,1.212,463,1.841,464,1.261,465,1.67,467,1.113,469,1.012,485,2.193,494,1.423,495,1.012,503,1.723,505,1.395,511,2.411,520,1.633,522,3.199,526,0.779,528,1.79,533,1.254,539,1.934,550,1.286,551,1.113,563,2.91,568,1.048,572,1.666,575,0.658,594,1.223,603,1.273,607,1.223,608,1.601,614,1.744,625,1.474,627,0.698,631,1.633,642,1.453,646,1.273,647,1.876,654,1.423,677,1.223,681,1.433,682,1.091,686,2.01,689,0.771,693,0.717,695,4.231,697,1.395,704,1.083,712,1.508,713,2.227,717,1.369,719,1.508,720,1.79,721,1.353,730,1.666,736,1.453,746,1.241,775,2.161,781,1.87,792,1.131,808,2.145,812,1.229,818,1.293,833,1.52,835,2.398,837,1.703,846,1.322,855,2.01,856,1.617,860,1.485,861,1.97,863,1.815,870,1.79,875,0.766,876,1.766,897,1.037,902,1.206,906,1.229,909,1.533,964,2.575,974,1.572,976,2.163,1006,2.307,1007,1.433,1008,1.329,1020,1.508,1022,1.52,1028,2.01,1032,1.815,1042,1.104,1043,1.601,1050,1.149,1063,1.485,1081,2.054,1102,2.161,1126,0.943,1141,1.744,1146,2.01,1148,2.104,1158,1.815,1189,2.002,1198,1.934,1204,1.572,1210,1.3,1221,1.067,1234,1.87,1260,1.934,1261,1.934,1270,1.766,1273,1.685,1280,1.841,1300,2.054,1312,1.649,1331,2.307,1337,1.744,1341,2.307,1391,1.766,1393,3.591,1396,1.766,1398,2.307,1399,1.87,1400,1.87,1453,1.496,1455,1.649,1456,2.104,1470,2.054,1471,1.9,1486,2.161,1493,2.307,1497,2.054,1535,1.067,1551,1.841,1559,1.79,1561,1.744,1565,1.744,1569,1.9,1592,2.104,1594,1.533,1633,1.633,1639,1.97,1643,1.3,1660,2.227,1679,1.26,1708,1.337,1716,0.877,1731,1.617,1736,2.01,1745,1.841,1757,2.01,1762,1.666,1768,1.572,1770,2.01,1794,1.723,1799,1.815,1802,2.01,1824,2.1,1832,1.496,1856,1.744,1857,1.766,1876,1.703,1923,1.766,1943,1.572,1944,2.307,1952,2.227,1970,2.227,1974,1.353,1986,1.703,1989,1.703,1995,1.87,2022,2.161,2049,2.227,2078,1.474,2081,1.649,2086,1.601,2094,1.19,2120,3.283,2127,1.649,2131,1.766,2170,1.841,2177,1.97,2190,2.227,2216,3.328,2247,2.161,2248,1.559,2264,1.934,2272,2.227,2317,3.485,2462,1.723,2470,1.79,2473,4.672,2510,2.835,2542,2.161,2549,1.841,2550,1.87,2559,1.87,2564,1.559,2594,1.815,2607,1.649,2823,1.815,2968,1.815,3009,1.9,3034,1.649,3088,2.307,3138,2.104,3173,2.307,3217,2.161,3221,3.613,3330,1.97,3395,1.545,3430,1.361,3626,3.161,3655,2.104,3663,1.685,3788,1.815,3872,2.104,3891,2.104,3935,1.79,4153,1.9,4208,2.227,4266,1.723,4372,2.227,4541,3.161,4563,1.453,4574,1.463,4584,1.79,4590,1.559,4609,3.199,4618,1.508,4636,1.766,4777,1.87,4873,2.01,4889,2.307,4900,2.307,5105,2.227,5177,2.104,5226,2.01,5231,2.104,5273,2.307,5523,1.934,5524,1.87,5525,1.934,5527,1.934,5529,1.815,5532,1.934,5533,1.9,5536,1.9,5539,2.054,5540,1.934,5543,1.9,5544,1.766,5556,1.934,5558,1.9,5559,2.054,5561,1.934,5566,1.87,5574,1.9,5578,1.934,5581,2.01,5583,1.934,5585,2.01,5593,1.9,5595,2.01,5598,2.054,5605,2.054,5612,3.485,5616,1.87,5629,1.9,5640,2.054,5643,1.934,5644,3.485,5649,1.934,5650,1.934,5652,2.054,5653,2.054,5654,1.9,5655,1.934,5658,1.934,5663,2.054,5671,2.054,5674,2.054,5683,1.9,5687,1.934,5694,1.815,5695,1.934,5709,3.377,5756,5.861,5765,2.227,5770,2.161,5810,2.161,5870,2.307,5981,2.407,5982,2.407,5983,2.407,5984,2.407,5985,2.407,5986,2.407,5987,2.407,5988,2.407,5989,2.407,5990,2.407,5991,2.407,5992,2.407,5993,2.407,5994,2.407,5995,2.407,5996,2.407,5997,2.407,5998,2.407,5999,2.407,6000,2.407,6001,2.407,6002,2.407,6003,2.407,6004,2.407,6005,2.407,6006,2.407,6007,2.407,6008,2.407,6009,2.407,6010,2.407,6011,2.407,6012,2.407,6013,2.407,6014,2.407,6015,2.407,6016,2.407,6017,2.407,6018,2.407,6019,2.407,6020,2.161,6021,2.407,6022,2.407,6023,2.407,6024,2.407,6025,2.407,6026,2.407,6027,2.407,6028,2.407,6029,2.407,6030,2.407,6031,2.407,6032,2.407,6033,2.407,6034,2.407,6035,2.407,6036,2.407,6037,2.407,6038,2.407,6039,2.407,6040,2.407,6041,2.407,6042,2.161,6043,2.407,6044,2.307,6045,2.407,6046,2.407,6047,2.407,6048,2.407,6049,2.407,6050,2.407,6051,2.407,6052,2.407,6053,2.407,6054,2.407,6055,2.407,6056,2.161,6057,2.407,6058,2.407,6059,2.407,6060,2.407,6061,2.407,6062,2.407,6063,2.407,6064,2.407,6065,2.407,6066,2.407,6067,2.407,6068,2.407,6069,2.407,6070,2.407,6071,2.407,6072,2.407,6073,2.407,6074,2.407,6075,2.407,6076,2.407,6077,2.407,6078,2.407,6079,2.407,6080,2.407,6081,2.407,6082,2.407,6083,2.407,6084,2.407,6085,2.407,6086,2.407,6087,2.407,6088,2.407,6089,2.407,6090,2.407,6091,4.414,6092,2.407,6093,2.407,6094,2.407,6095,2.407,6096,2.407,6097,2.307,6098,2.407,6099,4.414,6100,4.414,6101,2.407,6102,2.407,6103,2.407,6104,2.407,6105,2.407,6106,4.414,6107,2.407,6108,2.161,6109,2.407,6110,2.407,6111,2.407,6112,2.407,6113,2.407,6114,2.407,6115,2.407,6116,2.407,6117,2.407,6118,2.407,6119,2.407,6120,2.407,6121,2.407,6122,2.407,6123,2.407,6124,2.407,6125,2.407,6126,2.407,6127,2.407,6128,2.407,6129,2.407,6130,2.407,6131,2.407,6132,2.407,6133,2.407,6134,2.407,6135,2.407,6136,2.407,6137,2.407,6138,2.407,6139,2.407,6140,2.407,6141,2.407,6142,4.414,6143,2.407,6144,2.407,6145,2.227,6146,2.407,6147,2.407,6148,2.407,6149,2.407,6150,2.407,6151,2.407,6152,2.407,6153,2.407,6154,2.407,6155,2.161,6156,2.407,6157,2.407,6158,2.407,6159,2.407,6160,2.407,6161,2.407,6162,2.407,6163,2.407,6164,2.407,6165,2.407,6166,2.407,6167,2.407,6168,2.407,6169,2.407,6170,2.407,6171,2.407,6172,2.407,6173,2.407,6174,2.407,6175,2.407,6176,2.407,6177,2.407,6178,2.407,6179,2.407,6180,2.407,6181,2.407,6182,2.407,6183,2.161,6184,2.407,6185,4.414,6186,2.407,6187,2.407,6188,2.407,6189,4.414,6190,2.407,6191,2.407,6192,2.407,6193,2.407,6194,2.407,6195,2.407,6196,4.414,6197,2.407,6198,2.407,6199,2.407,6200,2.407,6201,2.407,6202,2.407,6203,2.407,6204,2.407,6205,2.407,6206,2.407,6207,2.407,6208,2.407,6209,2.407,6210,2.407,6211,4.414,6212,2.407,6213,2.407,6214,2.407,6215,2.407,6216,2.161,6217,2.407,6218,2.407,6219,2.407,6220,2.407,6221,2.407,6222,2.407,6223,2.407,6224,2.407,6225,2.407,6226,2.407,6227,2.407,6228,2.407,6229,2.407,6230,2.407,6231,2.407,6232,2.407,6233,2.407,6234,2.407,6235,2.407,6236,2.407,6237,2.407,6238,2.407,6239,2.227,6240,2.407,6241,2.407,6242,2.407,6243,2.407,6244,2.407,6245,2.407,6246,2.407,6247,2.407,6248,2.407]],["keywords/1329",[]],["title/1330",[5848,1021.147]],["content/1330",[66,3.901,87,7.34,167,10.216,223,4.891,224,2.782,230,7.563,251,6.663,263,5.424,351,10.216,370,10.971,372,6.893,682,7.027,698,9.162,741,9.635,1350,12.039,1442,9.868,1812,10.73,2251,12.039,2444,12.939,2608,10.124,2963,13.911,3270,13.545,3935,11.525,5848,10.409]],["keywords/1330",[]],["title/1331",[1988,487.519,2041,496.196,2046,639]],["content/1331",[]],["keywords/1331",[]],["title/1332",[2042,532.102]],["content/1332",[1,4.239,2,1.958,3,3.04,22,1.829,25,5.338,66,5.128,69,5.249,168,4.689,223,4.12,224,2.638,335,5.233,340,4.187,347,6.78,352,5.431,415,10.105,575,4.513,771,8.086,829,8.468,1133,6.758,6254,16.5]],["keywords/1332",[]],["title/1333",[864,626.718]],["content/1333",[16,2.931,66,4.479,115,7.56,161,7.889,279,6.672,325,9.719,335,4.572,396,8.428,574,9.223,627,5.162,693,5.303,1189,8.068,1215,9.223,1217,9.133,1220,9.089]],["keywords/1333",[]],["title/1334",[163,252.11,693,198.061,1988,516.744,2046,423.219,2047,524.772]],["content/1334",[2,1.628,22,1.521,66,4.559,69,6.448,79,4.224,92,10.304,112,5.237,115,5.831,226,3.526,279,5.146,281,3.607,289,9.481,303,6.697,335,4.653,367,5.933,372,4.829,411,8.284,556,8.995,627,5.253,646,9.578,651,6.32,693,4.09,752,6.13,808,6.668,810,7.044,875,4.366,1074,7.808,1215,7.113,1217,7.044,1220,7.01,1290,12.05,1988,6.668,3578,11.459,3668,14.299,3669,10.5,3670,10.837,4664,10.662]],["keywords/1334",[]],["title/1335",[693,299.043,1217,515.041,1220,512.565]],["content/1335",[13,5.048,15,3.505,16,2.477,22,1.369,24,4.983,25,2.602,31,2.37,49,2.359,66,2.025,69,2.559,82,6.461,92,8.578,112,3.069,113,2.159,115,5.248,127,2.238,136,6.619,185,3.201,219,4.148,224,1.6,226,2.066,258,1.83,289,4.211,297,3.874,330,4.755,334,3.778,335,3.174,340,2.041,343,3.406,352,2.647,357,4.299,374,5.213,404,3.124,422,2.823,427,5.109,448,3.192,457,4.108,575,4.114,603,4.254,604,4.723,607,6.28,625,4.926,641,6.164,644,6.845,646,4.254,647,7.169,651,5.688,693,3.681,779,5.569,810,4.128,812,4.108,864,3.316,920,4.821,946,5.981,975,6.153,1049,4.369,1210,9.115,1212,5.001,1217,4.128,1220,10.55,1230,8.891,1237,4.755,1241,11.34,1267,3.891,1507,6.461,1552,5.903,1988,6.001,2027,7.115,2046,5.122,2078,4.926,2132,4.787,2443,7.709,2444,6.716,2445,7.709,2446,7.709,2449,6.863,2450,14.089,2451,10.541,2452,10.314,2453,6.863,2454,6.582,2455,6.153,2456,6.582,2457,6.863,2462,5.759,2463,16.173,2464,8.043,2465,8.043,2466,5.569,2467,8.043,2468,8.043,2531,6.582,3404,5.165,3440,6.153,3814,6.716]],["keywords/1335",[]],["title/1336",[16,250.43]],["content/1336",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,415,10.187,574,8.621,875,5.291,897,7.166]],["keywords/1336",[]],["title/1337",[282,329.633]],["content/1337",[2,0.904,11,6.097,16,2.395,18,4.792,19,3.115,20,2.891,22,0.845,25,2.466,30,5.3,31,2.246,65,3.951,66,4.128,79,2.346,108,4.284,112,4.522,113,3.18,155,3.43,168,4.798,172,5.035,220,3.687,221,4.363,223,4.095,224,1.535,226,4.213,228,2.413,231,3.469,258,2.696,262,3.752,270,2.718,282,2.57,291,4.549,335,5.043,340,1.934,389,7.153,397,1.836,399,2.76,417,4.894,426,6.93,429,5.395,448,4.702,512,4.703,518,3.379,556,3.786,557,5.94,569,4.506,575,4.859,647,5.035,677,3.875,693,4.333,748,4.668,749,4.31,771,7.126,808,3.703,812,3.893,818,4.095,849,5.052,993,4.703,1014,5.636,1091,4.776,1126,5.699,1210,6.402,1309,5.458,1401,4.031,1535,7.271,1679,3.99,1709,7.258,1716,4.32,1875,4.548,2020,3.786,2041,3.769,2531,6.238,2847,5.831,3553,6.662,3663,12.433,3848,5.594,3850,9.066,4683,6.018,5001,6.123,5002,6.123,5004,5.921,5005,7.053,5441,5.12,5514,7.053,5515,7.053]],["keywords/1337",[]],["title/1338",[1023,407.123]],["content/1338",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1118,14.311,1124,10.509,1125,13.242,1126,6.573,3430,9.483,3432,9.159,5516,10.861]],["keywords/1338",[]],["title/1339",[291,378.221,1014,574.998]],["content/1339",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1339",[]],["title/1340",[382,745.942,2473,745.942]],["content/1340",[1,0.917,2,0.747,3,0.658,11,1.109,13,0.9,22,0.698,25,1.155,29,2.526,30,1.301,31,1.052,39,2.445,41,2.018,43,1.068,49,1.047,52,1.65,64,1.887,66,0.898,68,1.96,69,1.135,71,3.112,73,1.407,77,2.471,79,1.098,87,1.69,97,1.814,100,2.691,107,2.124,110,1.907,113,0.958,119,2.353,136,1.571,137,2.154,139,3.295,146,2.096,155,1.606,168,1.449,172,1.516,181,1.704,185,1.421,186,2.232,192,2.018,196,1.576,199,2.397,202,2.818,211,2.471,225,1.96,226,0.917,227,1.308,230,3.26,262,1.757,265,2.375,266,1.938,267,2.619,283,1.527,287,1.741,289,4.42,290,1.749,291,1.116,303,1.741,307,1.37,312,1.741,320,2.018,330,1.374,338,2.124,343,1.511,358,2.332,362,2.471,364,2.292,368,1.481,370,1.823,374,1.506,382,6.281,384,2.619,385,1.334,394,1.823,404,1.386,405,2.353,408,1.734,409,2.202,410,2.445,416,2.11,428,1.506,432,1.823,440,2.78,452,2.397,455,2.139,458,1.797,463,2.73,464,1.798,465,1.35,466,2.445,467,1.65,485,1.773,491,2.555,493,2.17,494,3.721,505,2.069,511,3.437,518,1.582,519,2.236,528,2.654,532,2.254,533,1.859,540,1.971,550,1.907,572,2.471,575,0.976,594,1.814,603,1.887,607,1.814,620,2.498,626,1.887,651,1.643,654,2.11,658,1.631,677,1.814,679,1.887,693,1.876,696,2.619,697,2.069,704,1.606,712,2.236,717,2.03,719,2.236,721,2.006,730,4.358,746,1.841,747,2.691,753,2.921,787,2.691,792,1.677,808,1.734,812,1.823,818,1.917,829,1.832,834,2.555,835,1.938,846,1.96,858,2.292,860,2.202,871,2.056,875,1.135,897,1.537,906,1.823,908,1.462,909,2.273,938,2.421,957,4.313,964,2.082,976,3.084,1007,2.124,1008,1.971,1022,2.254,1032,2.691,1043,2.375,1063,2.202,1141,2.587,1154,2.587,1158,2.691,1189,1.618,1194,3.204,1204,2.332,1237,2.11,1270,2.619,1273,2.498,1280,2.73,1281,2.691,1308,2.619,1310,2.772,1312,4.313,1315,2.555,1344,2.471,1348,2.332,1352,2.772,1355,2.421,1393,4.958,1399,2.772,1400,2.772,1401,1.887,1453,2.219,1488,2.186,1490,2.73,1559,2.654,1561,2.587,1565,2.587,1579,3.119,1594,2.273,1611,2.421,1633,2.421,1643,3.4,1679,1.868,1703,2.921,1708,1.982,1731,2.397,1762,2.471,1775,2.186,1794,2.555,1808,2.654,1832,2.219,1856,2.587,1857,2.619,1879,2.867,1974,2.006,1989,2.526,2041,3.112,2055,2.445,2078,2.186,2081,2.445,2086,2.375,2127,2.445,2131,2.619,2170,2.73,2194,2.921,2248,2.311,2264,2.867,2473,6.281,2510,4.041,2549,2.73,2550,2.772,2564,2.311,2846,2.498,2898,3.204,2968,2.691,3009,2.818,3064,2.471,3102,2.818,3395,2.292,3536,2.867,3574,2.921,3626,2.555,3788,2.691,3887,2.818,4153,2.818,4266,2.555,4541,4.507,4609,2.587,4636,2.619,4777,2.772,4903,2.98,5226,2.98,5243,4.969,5519,3.204,5520,3.204,5521,3.302,5522,3.302,5523,2.867,5524,2.772,5525,2.867,5526,3.302,5527,2.867,5528,3.045,5529,2.691,5530,3.302,5531,3.302,5532,2.867,5533,2.818,5534,3.045,5535,3.045,5536,2.818,5537,2.818,5538,3.045,5539,3.045,5540,2.867,5541,3.045,5542,3.302,5543,2.818,5544,4.619,5545,3.045,5546,3.302,5547,3.302,5548,2.98,5549,3.302,5550,2.818,5551,3.302,5552,3.045,5553,3.302,5554,3.119,5555,3.302,5556,2.867,5557,3.302,5558,2.818,5559,3.045,5560,3.045,5561,2.867,5562,3.045,5563,3.204,5564,3.302,5565,3.302,5566,2.772,5567,3.302,5568,2.98,5569,3.204,5570,3.302,5571,3.045,5572,3.204,5573,3.302,5574,2.818,5575,3.302,5576,3.302,5577,3.302,5578,2.867,5579,3.204,5580,3.045,5581,2.98,5582,3.302,5583,2.867,5584,3.302,5585,2.98,5586,3.045,5587,3.302,5588,3.302,5589,3.302,5590,3.302,5591,3.302,5592,3.302,5593,2.818,5594,3.302,5595,2.98,5596,3.302,5597,3.302,5598,3.045,5599,3.302,5600,3.302,5601,3.302,5602,3.045,5603,3.302,5604,3.302,5605,3.045,5606,3.302,5607,2.921,5608,3.302,5609,3.045,5610,2.98,5611,3.204,5612,4.969,5613,3.045,5614,3.045,5615,3.045,5616,2.772,5617,3.045,5618,3.302,5619,2.867,5620,3.045,5621,3.045,5622,2.921,5623,3.302,5624,5.824,5625,3.302,5626,3.045,5627,3.302,5628,3.045,5629,2.818,5630,3.302,5631,3.045,5632,3.045,5633,3.302,5634,3.302,5635,3.045,5636,3.045,5637,3.302,5638,3.302,5639,3.302,5640,3.045,5641,3.045,5642,3.302,5643,2.867,5644,4.969,5645,3.302,5646,2.98,5647,3.045,5648,3.045,5649,2.867,5650,2.867,5651,3.045,5652,3.045,5653,3.045,5654,2.818,5655,2.867,5656,3.045,5657,3.302,5658,2.867,5659,3.045,5660,3.302,5661,3.045,5662,3.302,5663,3.045,5664,3.302,5665,3.045,5666,3.045,5667,3.302,5668,3.204,5669,3.045,5670,3.045,5671,3.045,5672,3.045,5673,3.045,5674,3.045,5675,3.045,5676,3.045,5677,3.045,5678,3.045,5679,3.045,5680,3.045,5681,3.045,5682,3.045,5683,2.818,5684,3.302,5685,3.302,5686,3.045,5687,2.867,5688,3.045,5689,3.302,5690,3.045,5691,3.045,5692,3.204,5693,3.045,5694,2.691,5695,2.867,5696,3.045,5697,3.302,5698,3.045,5699,2.98,5700,3.045,5701,2.98,5702,3.045,5703,3.302,5704,3.119,5705,3.045,5706,3.045,5707,3.204,5708,3.045,5709,2.73,5710,3.045,5711,3.045,5712,2.98,5713,3.045]],["keywords/1340",[]],["title/1341",[5848,1021.147]],["content/1341",[2,1.283,19,4.704,43,4.604,44,7.937,66,3.871,89,2.657,113,4.803,167,10.139,168,3.54,223,4.867,224,2.525,230,5.938,251,6.088,263,5.383,343,4.579,351,10.139,370,10.52,372,5.412,415,9.419,417,9.875,426,3.595,428,6.49,434,8.803,440,7.906,464,3.089,465,6.77,483,9.029,490,3.44,493,6.575,608,7.195,682,4.903,698,6.393,741,9.562,974,7.065,1342,9.708,1442,6.886,1812,7.488,1973,7.336,2078,11.939,2125,7.336,2251,8.401,2608,7.065,3935,8.042,4266,7.744,5123,9.708,5753,10.007,5848,7.264,6256,10.365,6257,10.365,6258,10.365,6259,10.365,6260,10.365,6261,10.365]],["keywords/1341",[]],["title/1342",[61,341.406,172,364.419,1150,340.348,2041,424.116]],["content/1342",[]],["keywords/1342",[]],["title/1343",[2042,532.102]],["content/1343",[1,4.239,2,1.958,3,3.04,22,1.829,25,5.338,66,5.128,69,5.249,168,4.689,223,4.12,224,2.638,335,5.233,340,4.187,347,6.78,352,5.431,415,10.105,575,4.513,771,8.086,829,8.468,1133,6.758,6254,16.5]],["keywords/1343",[]],["title/1344",[864,626.718]],["content/1344",[16,2.931,66,4.479,115,7.56,161,7.889,279,6.672,325,9.719,335,4.572,396,8.428,574,9.223,627,5.162,693,5.303,1189,8.068,1215,9.223,1217,9.133,1220,9.089]],["keywords/1344",[]],["title/1345",[61,298.102,163,284.088,172,318.197,1150,297.179,6249,790.599]],["content/1345",[2,2.168,112,8.268,279,6.852,335,4.694,367,7.9,385,6.832,626,9.664,651,8.414,1215,11.973]],["keywords/1345",[]],["title/1346",[693,299.043,1217,515.041,1220,512.565]],["content/1346",[13,4.825,15,3.474,16,2.459,22,1.357,24,4.953,25,2.572,31,2.342,61,3.164,66,2.001,69,2.529,82,6.386,92,4.041,94,6.081,112,6.91,115,3.377,127,2.212,136,6.571,146,4.668,219,4.1,224,1.585,226,2.042,263,2.782,297,3.829,330,5.747,334,3.734,335,3.835,340,2.017,343,3.366,345,3.931,357,4.248,374,5.166,385,2.972,404,3.088,422,5.239,427,3.288,445,2.775,448,3.154,457,4.06,575,2.174,603,6.475,616,2.311,625,4.868,641,6.108,644,5.572,647,7.125,651,5.637,682,3.604,693,2.369,707,3.125,779,8.476,810,4.08,812,4.06,864,3.277,920,4.764,946,5.912,1049,4.317,1143,4.55,1150,5.924,1163,7.861,1165,6.175,1210,8.065,1212,4.942,1215,7.738,1217,4.08,1220,10.18,1230,10.707,1237,4.699,1241,12.645,1267,3.845,1507,9.835,1859,5.062,2078,4.868,2449,6.783,2450,15.121,2451,12.74,2452,12.465,2453,6.783,2454,6.505,2455,6.081,2456,6.505,2457,6.783,2462,5.692,2469,15.054,2470,5.912,2471,7.619,2472,7.949,2473,4.905,2531,10.019,3404,5.104,3440,6.081]],["keywords/1346",[]],["title/1347",[16,250.43]],["content/1347",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,415,10.187,574,8.621,875,5.291,897,7.166]],["keywords/1347",[]],["title/1348",[282,329.633]],["content/1348",[11,6.369,16,2.145,18,4.456,19,3.423,20,3.27,22,0.956,30,5.721,31,2.54,65,4.468,66,4.402,108,4.845,112,4.969,113,3.495,155,3.879,168,4.973,172,5.533,220,4.17,221,4.935,223,4.367,224,1.687,226,3.346,258,2.963,262,4.244,282,2.824,291,4.91,335,5.267,340,2.188,389,7.861,397,2.076,399,3.033,417,5.536,426,7.183,448,5.168,512,5.319,518,3.822,556,4.282,575,5.136,647,5.533,693,3.881,748,5.28,771,7.692,808,4.188,818,4.632,849,5.552,993,5.319,1014,6.194,1126,6.152,1210,7.035,1401,4.559,1535,3.822,1679,4.513,1709,7.976,1716,4.747,1875,4.999,2020,4.282,2531,7.055,3553,7.535,3663,9.115,3848,6.327,3850,9.963,4683,6.807,5001,6.926,5002,6.926,5441,5.791,5514,7.977,5515,7.977]],["keywords/1348",[]],["title/1349",[1023,407.123]],["content/1349",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1118,14.311,1124,10.509,1125,13.242,1126,6.573,3430,9.483,3432,9.159,5516,10.861]],["keywords/1349",[]],["title/1350",[291,378.221,1014,574.998]],["content/1350",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1350",[]],["title/1351",[382,745.942,2473,745.942]],["content/1351",[1,0.917,2,0.747,3,0.658,11,1.109,13,0.9,22,0.698,25,1.155,29,2.526,30,1.301,31,1.052,39,2.445,41,2.018,43,1.068,49,1.047,52,1.65,64,1.887,66,0.898,68,1.96,69,1.135,71,3.112,73,1.407,77,2.471,79,1.098,87,1.69,97,1.814,100,2.691,107,2.124,110,1.907,113,0.958,119,2.353,136,1.571,137,2.154,139,3.295,146,2.096,155,1.606,168,1.449,172,1.516,181,1.704,185,1.421,186,2.232,192,2.018,196,1.576,199,2.397,202,2.818,211,2.471,225,1.96,226,0.917,227,1.308,230,3.26,262,1.757,265,2.375,266,1.938,267,2.619,283,1.527,287,1.741,289,4.42,290,1.749,291,1.116,303,1.741,307,1.37,312,1.741,320,2.018,330,1.374,338,2.124,343,1.511,358,2.332,362,2.471,364,2.292,368,1.481,370,1.823,374,1.506,382,6.281,384,2.619,385,1.334,394,1.823,404,1.386,405,2.353,408,1.734,409,2.202,410,2.445,416,2.11,428,1.506,432,1.823,440,2.78,452,2.397,455,2.139,458,1.797,463,2.73,464,1.798,465,1.35,466,2.445,467,1.65,485,1.773,491,2.555,493,2.17,494,3.721,505,2.069,511,3.437,518,1.582,519,2.236,528,2.654,532,2.254,533,1.859,540,1.971,550,1.907,572,2.471,575,0.976,594,1.814,603,1.887,607,1.814,620,2.498,626,1.887,651,1.643,654,2.11,658,1.631,677,1.814,679,1.887,693,1.876,696,2.619,697,2.069,704,1.606,712,2.236,717,2.03,719,2.236,721,2.006,730,4.358,746,1.841,747,2.691,753,2.921,787,2.691,792,1.677,808,1.734,812,1.823,818,1.917,829,1.832,834,2.555,835,1.938,846,1.96,858,2.292,860,2.202,871,2.056,875,1.135,897,1.537,906,1.823,908,1.462,909,2.273,938,2.421,957,4.313,964,2.082,976,3.084,1007,2.124,1008,1.971,1022,2.254,1032,2.691,1043,2.375,1063,2.202,1141,2.587,1154,2.587,1158,2.691,1189,1.618,1194,3.204,1204,2.332,1237,2.11,1270,2.619,1273,2.498,1280,2.73,1281,2.691,1308,2.619,1310,2.772,1312,4.313,1315,2.555,1344,2.471,1348,2.332,1352,2.772,1355,2.421,1393,4.958,1399,2.772,1400,2.772,1401,1.887,1453,2.219,1488,2.186,1490,2.73,1559,2.654,1561,2.587,1565,2.587,1579,3.119,1594,2.273,1611,2.421,1633,2.421,1643,3.4,1679,1.868,1703,2.921,1708,1.982,1731,2.397,1762,2.471,1775,2.186,1794,2.555,1808,2.654,1832,2.219,1856,2.587,1857,2.619,1879,2.867,1974,2.006,1989,2.526,2041,3.112,2055,2.445,2078,2.186,2081,2.445,2086,2.375,2127,2.445,2131,2.619,2170,2.73,2194,2.921,2248,2.311,2264,2.867,2473,6.281,2510,4.041,2549,2.73,2550,2.772,2564,2.311,2846,2.498,2898,3.204,2968,2.691,3009,2.818,3064,2.471,3102,2.818,3395,2.292,3536,2.867,3574,2.921,3626,2.555,3788,2.691,3887,2.818,4153,2.818,4266,2.555,4541,4.507,4609,2.587,4636,2.619,4777,2.772,4903,2.98,5226,2.98,5243,4.969,5519,3.204,5520,3.204,5521,3.302,5522,3.302,5523,2.867,5524,2.772,5525,2.867,5526,3.302,5527,2.867,5528,3.045,5529,2.691,5530,3.302,5531,3.302,5532,2.867,5533,2.818,5534,3.045,5535,3.045,5536,2.818,5537,2.818,5538,3.045,5539,3.045,5540,2.867,5541,3.045,5542,3.302,5543,2.818,5544,4.619,5545,3.045,5546,3.302,5547,3.302,5548,2.98,5549,3.302,5550,2.818,5551,3.302,5552,3.045,5553,3.302,5554,3.119,5555,3.302,5556,2.867,5557,3.302,5558,2.818,5559,3.045,5560,3.045,5561,2.867,5562,3.045,5563,3.204,5564,3.302,5565,3.302,5566,2.772,5567,3.302,5568,2.98,5569,3.204,5570,3.302,5571,3.045,5572,3.204,5573,3.302,5574,2.818,5575,3.302,5576,3.302,5577,3.302,5578,2.867,5579,3.204,5580,3.045,5581,2.98,5582,3.302,5583,2.867,5584,3.302,5585,2.98,5586,3.045,5587,3.302,5588,3.302,5589,3.302,5590,3.302,5591,3.302,5592,3.302,5593,2.818,5594,3.302,5595,2.98,5596,3.302,5597,3.302,5598,3.045,5599,3.302,5600,3.302,5601,3.302,5602,3.045,5603,3.302,5604,3.302,5605,3.045,5606,3.302,5607,2.921,5608,3.302,5609,3.045,5610,2.98,5611,3.204,5612,4.969,5613,3.045,5614,3.045,5615,3.045,5616,2.772,5617,3.045,5618,3.302,5619,2.867,5620,3.045,5621,3.045,5622,2.921,5623,3.302,5624,5.824,5625,3.302,5626,3.045,5627,3.302,5628,3.045,5629,2.818,5630,3.302,5631,3.045,5632,3.045,5633,3.302,5634,3.302,5635,3.045,5636,3.045,5637,3.302,5638,3.302,5639,3.302,5640,3.045,5641,3.045,5642,3.302,5643,2.867,5644,4.969,5645,3.302,5646,2.98,5647,3.045,5648,3.045,5649,2.867,5650,2.867,5651,3.045,5652,3.045,5653,3.045,5654,2.818,5655,2.867,5656,3.045,5657,3.302,5658,2.867,5659,3.045,5660,3.302,5661,3.045,5662,3.302,5663,3.045,5664,3.302,5665,3.045,5666,3.045,5667,3.302,5668,3.204,5669,3.045,5670,3.045,5671,3.045,5672,3.045,5673,3.045,5674,3.045,5675,3.045,5676,3.045,5677,3.045,5678,3.045,5679,3.045,5680,3.045,5681,3.045,5682,3.045,5683,2.818,5684,3.302,5685,3.302,5686,3.045,5687,2.867,5688,3.045,5689,3.302,5690,3.045,5691,3.045,5692,3.204,5693,3.045,5694,2.691,5695,2.867,5696,3.045,5697,3.302,5698,3.045,5699,2.98,5700,3.045,5701,2.98,5702,3.045,5703,3.302,5704,3.119,5705,3.045,5706,3.045,5707,3.204,5708,3.045,5709,2.73,5710,3.045,5711,3.045,5712,2.98,5713,3.045]],["keywords/1351",[]],["title/1352",[5848,1021.147]],["content/1352",[2,1.283,19,4.704,43,4.604,44,7.937,66,3.871,89,2.657,113,4.803,167,10.139,168,3.54,223,4.867,224,2.525,230,5.938,251,6.088,263,5.383,343,4.579,351,10.139,370,10.52,372,5.412,415,9.419,417,9.875,426,3.595,428,6.49,434,8.803,440,7.906,464,3.089,465,6.77,483,9.029,490,3.44,493,6.575,608,7.195,682,4.903,698,6.393,741,9.562,974,7.065,1342,9.708,1442,6.886,1812,7.488,1973,7.336,2078,11.939,2125,7.336,2251,8.401,2608,7.065,3935,8.042,4266,7.744,5123,9.708,5753,10.007,5848,7.264,6256,10.365,6257,10.365,6258,10.365,6259,10.365,6260,10.365,6261,10.365]],["keywords/1352",[]],["title/1353",[3169,1297.249]],["content/1353",[]],["keywords/1353",[]],["title/1354",[2042,532.102]],["content/1354",[1,3.479,2,1.607,3,3.308,13,4.528,22,1.501,25,6.515,29,12.705,30,6.544,66,5.069,79,4.168,136,5.96,146,7.953,195,2.115,222,2.45,224,2.777,277,3.255,303,6.608,330,5.213,340,3.437,352,5.909,374,7.575,422,4.753,605,7.612,652,6.809,752,6.048,804,6.362,873,7.276,902,6.788,1120,10.693,1212,8.42,1762,9.377,1768,8.847,1992,10.52,2064,11.083,3169,17.183]],["keywords/1354",[]],["title/1355",[16,250.43]],["content/1355",[2,2.441,3,4.102,16,2.763,22,2.281,25,6.657,47,8.65,89,5.055,136,7.381,195,2.62,223,4.187,224,2.172,282,3.636,574,8.692,875,5.335,3169,17.558]],["keywords/1355",[]],["title/1356",[282,329.633]],["content/1356",[1,2.178,3,3.615,13,3.919,16,1.397,18,4.419,19,3.38,20,3.216,22,0.94,30,4.688,36,3.718,43,3.85,52,3.919,57,5.641,66,3.237,89,2.083,102,5.231,107,7.654,113,4.654,173,3.627,195,2.427,208,3.999,226,3.991,230,3.273,244,6.732,258,1.929,263,4.501,266,4.605,270,3.023,281,3.38,282,2.788,298,4.914,374,5.426,399,2.995,426,6.197,448,3.364,464,2.421,465,7.05,539,10.331,551,3.919,563,8.477,616,2.465,644,3.859,652,4.878,658,3.874,693,2.526,767,10.781,771,6.302,774,6.811,846,4.656,895,2.898,902,4.25,1046,8.478,1050,6.142,1105,5.809,1267,7.515,1355,5.751,1368,6.392,1453,7.995,1716,4.688,1748,7.228,1762,5.87,1768,5.539,1837,4.823,1875,4.935,2060,7.234,2064,12.714,2122,4.765,2272,11.899,3169,18.709,3272,7.61,6262,8.949,6263,8.949,6264,9.665,6265,9.665,6266,9.665,6267,14.661,6268,9.665,6269,9.665]],["keywords/1356",[]],["title/1357",[1023,407.123]],["content/1357",[2,1.697,3,3.428,8,5.896,15,5.868,25,4.627,49,4.195,120,7.305,195,2.234,223,4.646,224,2.41,258,3.254,277,3.438,296,6.412,316,6.388,340,3.629,370,7.305,385,5.347,397,3.444,399,4.333,490,4.55,579,7.413,706,11.11,707,7.315,842,5.555,1124,8.962,2064,11.705,2608,9.344,3278,12.5,3430,8.087,5429,15.098,5516,9.262,5795,11.489,6262,15.098,6263,15.098,6270,16.305,6271,16.305]],["keywords/1357",[]],["title/1358",[291,268.337,547,503.706,743,581.812,1014,407.945]],["content/1358",[2,2.464,3,3.337,11,6.114,13,2.787,22,1.731,31,3.256,42,5.968,79,5.573,102,6.817,106,4.585,127,3.074,195,1.726,205,5.905,223,3.899,224,1.431,225,6.068,258,2.514,266,6.001,273,8.331,291,4.885,307,4.241,312,8.837,316,4.935,345,5.463,357,5.905,387,6.102,398,9.428,404,4.292,464,3.156,544,6.446,546,4.972,547,11.559,570,11.774,606,7.351,607,5.617,631,7.495,676,6.173,682,5.01,743,12.285,746,9.34,897,4.76,901,6.068,917,9.657,974,7.218,1014,5.255,1017,9.225,1535,4.898,1603,7.911,1769,11.663,3108,11.663,3169,18.393,3590,9.918,6272,12.596,6273,12.596,6274,12.596,6275,12.596]],["keywords/1358",[]],["title/1359",[5848,1021.147]],["content/1359",[3,2.563,18,3.545,30,5.071,43,4.165,66,3.502,70,6.381,167,9.171,223,4.562,224,2.643,226,3.574,230,7.055,251,6.215,258,3.165,263,4.869,321,7.598,351,9.171,370,9.333,372,6.43,434,7.963,435,8.064,465,5.262,682,6.308,698,8.225,741,8.649,771,6.818,1008,7.684,1050,6.644,1267,6.73,1442,8.859,1812,9.632,1834,12.488,2122,7.819,2125,9.437,2251,10.807,2501,13.912,2608,9.089,2986,12.159,3935,10.346,5848,9.345,6276,15.861]],["keywords/1359",[]],["title/1360",[2038,1180.983]],["content/1360",[]],["keywords/1360",[]],["title/1361",[2042,532.102]],["content/1361",[2,2.093,3,3.251,22,1.955,25,5.708,127,4.909,224,2.285,316,7.879,386,9.915,627,5.117,873,9.478,896,7.495,1133,7.225,2038,13.704,2064,14.437,6277,20.112,6278,20.112]],["keywords/1361",[]],["title/1362",[16,250.43]],["content/1362",[2,1.853,14,7.164,18,5.291,19,4.104,22,2.007,89,2.715,113,4.191,186,3.919,195,1.726,206,5.212,224,2.345,226,2.838,229,5.277,258,2.514,277,3.753,282,3.386,284,3.787,354,3.108,356,7.155,399,2.573,426,7.366,445,3.857,627,4.53,652,5.923,804,5.19,895,5.339,896,6.634,1024,11.461,1142,6.215,1518,9.657,1707,6.717,1716,5.692,1875,5.993,2038,16.744,2094,9.732,3496,8.331,3500,7.733,3871,8.453,3943,10.59,5177,15.829,6279,12.596,6280,11.663,6281,11.663,6282,12.596,6283,17.803]],["keywords/1362",[]],["title/1363",[1023,407.123]],["content/1363",[216,7.547,223,3.929,224,2.038,258,3.58,277,3.782,397,3.79,399,3.665,643,11.549,707,6.187,842,6.112,1124,9.86,1133,6.445,1142,7.873,3273,11.268,3379,15.736,3484,9.064,3495,11.014,3496,11.865,3500,11.014,5145,15.082,5177,13.753,5442,16.611,6280,16.611,6281,16.611,6284,17.94,6285,17.94,6286,17.94,6287,17.94,6288,17.94]],["keywords/1363",[]],["title/1364",[1336,1031.201]],["content/1364",[]],["keywords/1364",[]],["title/1365",[2042,532.102]],["content/1365",[2,2.27,3,3.525,22,2.12,25,6.189,224,2.478,340,4.855,352,6.297]],["keywords/1365",[]],["title/1366",[16,250.43]],["content/1366",[3,3.525,16,3.151,18,4.874,223,5.558,340,4.855,810,9.818]],["keywords/1366",[]],["title/1367",[282,329.633]],["content/1367",[18,4.419,19,4.557,66,5.286,113,4.654,168,4.834,223,4.33,224,2.72,282,3.76,399,4.039,417,11.135,426,5.765,1709,10.62,1716,6.321,1875,6.656,3533,12.274]],["keywords/1367",[]],["title/1368",[1023,407.123]],["content/1368",[15,5.049,168,4.096,223,4.443,224,2.305,258,4.049,277,4.277,397,4.286,399,4.144,707,6.996,842,6.912,1124,11.15,3430,10.062,3432,9.719,5430,18.785,5516,11.524]],["keywords/1368",[]],["title/1369",[291,378.221,1014,574.998]],["content/1369",[224,2.525,291,6.099,616,5.668,1004,18.039,1014,9.272]],["keywords/1369",[]],["title/1370",[382,745.942,2473,745.942]],["content/1370",[2,1.47,13,2.037,22,1.373,31,2.379,36,3.541,49,2.369,64,4.271,66,2.033,71,6.127,77,5.591,79,2.485,87,3.825,97,4.105,119,5.323,127,2.247,136,3.554,137,4.874,139,4.227,168,2.852,173,3.455,181,3.857,185,3.214,211,5.591,223,2.016,226,2.075,230,5.821,262,3.975,289,6.487,291,2.526,303,3.94,320,4.566,324,4.512,335,2.075,338,4.806,362,5.591,368,3.351,374,3.407,382,10.433,385,3.019,404,3.136,411,4.874,416,4.774,422,2.834,432,4.125,440,5.473,464,2.306,465,3.054,467,3.733,485,4.011,494,4.774,503,5.782,511,4.41,532,5.1,550,4.316,563,8.168,608,5.373,677,4.105,682,3.661,704,3.634,717,4.594,719,5.06,721,4.539,730,5.591,812,4.125,835,6.73,837,5.715,875,2.569,897,3.479,906,4.125,909,5.142,935,7.472,936,8.524,964,4.711,976,6.073,1007,4.806,1008,4.46,1032,6.089,1063,4.982,1204,5.276,1270,5.927,1312,5.533,1336,8.405,1393,4.742,1399,6.273,1400,6.273,1497,6.891,1594,5.142,1708,4.486,1755,6.005,1794,5.782,1856,5.852,1857,5.927,1874,7.249,1995,6.273,2086,5.373,2177,6.608,2462,5.782,2473,10.433,2510,7.956,2842,8.524,2968,6.089,3138,7.058,3626,5.782,3788,6.089,4153,6.376,4609,5.852,4777,6.273,5519,7.249,5520,7.249,5529,6.089,5544,5.927,5548,6.742,5550,6.376,5554,7.058,5558,6.376,5566,6.273,5612,6.376,5619,6.487,5644,6.376,5668,7.249,5694,6.089,5709,6.178,5712,6.742,6145,7.472,6239,7.472,6289,9.206,6290,9.206,6291,9.206,6292,9.206,6293,9.206,6294,9.206,6295,9.206,6296,9.206,6297,9.206]],["keywords/1370",[]],["title/1371",[172,364.419,1221,380.264,1988,416.7,2046,546.176]],["content/1371",[]],["keywords/1371",[]],["title/1372",[2042,532.102]],["content/1372",[1,4.074,2,1.882,3,2.922,22,1.758,25,5.131,66,5.003,68,8.709,69,6.322,168,4.575,223,3.96,224,2.574,335,5.106,340,4.024,352,5.22,575,5.436,627,4.6,829,8.139,1133,8.14,3289,13.761,3766,10.454,5967,14.236]],["keywords/1372",[]],["title/1373",[172,318.197,864,308.749,1221,332.032,1988,363.847,2046,476.9]],["content/1373",[2,1.57,4,8.046,15,2.499,16,3.122,22,1.467,31,2.595,66,4.77,69,5.058,92,4.477,97,4.477,112,5.05,115,7.511,127,3.683,161,3.904,172,3.742,224,2.059,226,2.263,228,2.788,246,5.608,258,3.011,263,3.083,279,4.962,281,2.315,282,1.91,289,6.928,297,4.242,325,4.81,335,4.542,340,2.235,352,2.899,367,3.807,396,4.171,461,5.354,556,6.574,574,6.859,575,4.349,594,6.728,627,4.612,641,4.394,646,9.35,651,4.056,658,4.024,693,5.268,804,4.137,808,4.279,823,4.435,849,5.642,1023,2.359,1126,5.187,1142,3.506,1163,8.498,1189,7.209,1210,4.757,1215,6.859,1217,8.16,1220,9.03,1221,3.904,1222,5.394,1290,8.806,1988,4.279,2020,4.374,2046,5.608,2094,4.355,2132,5.242,2466,6.098,3289,6.098,3668,10.45,3669,6.738,3670,6.954,4597,6.164,4664,6.842,4726,8.149,4995,8.441,5242,7.075,6252,16.564,6298,7.906]],["keywords/1373",[]],["title/1374",[693,360.272,3289,837.083]],["content/1374",[2,1.57,4,8.046,15,2.499,16,3.122,22,1.467,31,2.595,66,4.77,69,5.058,92,4.477,97,4.477,112,5.05,115,7.511,127,3.683,161,3.904,172,3.742,224,2.059,226,2.263,228,2.788,246,5.608,258,3.011,263,3.083,279,4.962,281,2.315,282,1.91,289,6.928,297,4.242,325,4.81,335,4.542,340,2.235,352,2.899,367,3.807,396,4.171,461,5.354,556,6.574,574,6.859,575,4.349,594,6.728,627,4.612,641,4.394,646,9.35,651,4.056,658,4.024,693,5.268,804,4.137,808,4.279,823,4.435,849,5.642,1023,2.359,1126,5.187,1163,8.498,1189,7.209,1210,4.757,1215,6.859,1217,8.16,1220,9.03,1221,3.904,1222,5.394,1290,8.806,1988,4.279,2020,4.374,2046,5.608,2094,4.355,2132,5.242,2466,6.098,3289,6.098,3668,10.45,3669,6.738,3670,6.954,4597,6.164,4664,6.842,4726,8.149,4995,8.441,5242,7.075,5262,8.807,6252,16.564,6298,7.906]],["keywords/1374",[]],["title/1375",[16,250.43]],["content/1375",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,3289,11.517]],["keywords/1375",[]],["title/1376",[282,329.633]],["content/1376",[18,5.469,19,4.372,31,3.564,65,6.27,66,4.187,112,6.347,113,4.464,168,4.376,223,4.153,224,2.154,258,2.752,282,3.607,291,5.947,335,5.514,399,2.817,417,7.768,426,7.136,448,6.6,512,7.464,575,5.6,647,7.067,693,3.605,818,6.5,1014,7.911,1126,7.451,1210,8.985,1679,6.333,1709,7.408,1716,6.063,1875,6.384,2020,6.009,3533,8.562,4601,9.397,4683,9.551,5441,8.126]],["keywords/1376",[]],["title/1377",[1023,407.123]],["content/1377",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1125,13.242,1126,6.573,3293,15.518,3430,9.483,3432,9.159,5516,10.861]],["keywords/1377",[]],["title/1378",[291,378.221,1014,574.998]],["content/1378",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1378",[]],["title/1379",[382,745.942,2473,745.942]],["content/1379",[1,0.447,2,0.388,3,0.321,7,0.801,11,0.54,13,0.439,15,7.375,20,0.66,22,0.512,24,0.514,29,1.231,30,0.634,31,0.513,36,0.763,39,1.192,41,0.984,43,0.521,49,0.51,52,0.804,64,0.92,66,0.438,68,0.955,69,0.553,71,1.615,73,0.686,77,1.205,79,0.535,85,1.61,87,0.824,97,0.884,100,1.312,110,0.93,113,0.467,119,1.147,120,0.889,130,0.893,136,0.766,137,1.05,139,1.71,146,1.022,155,1.47,168,0.752,172,0.739,181,0.831,185,0.692,186,1.158,192,0.984,194,1.294,195,0.272,197,1.127,198,0.906,199,1.169,211,1.205,214,0.945,225,0.955,226,0.839,227,0.638,230,1.782,262,0.856,263,0.609,265,1.158,266,0.945,267,1.277,283,0.744,287,0.849,289,2.416,290,0.853,291,0.544,296,0.78,303,0.849,307,0.668,320,0.984,330,0.67,335,0.447,338,1.036,339,1.261,343,0.737,351,1.147,358,1.137,362,1.205,364,1.117,368,0.722,374,0.734,382,3.59,384,1.277,385,0.65,387,0.961,394,0.889,404,0.676,405,1.147,408,0.845,410,1.192,416,1.029,422,0.611,428,0.734,432,0.889,440,0.768,452,1.169,455,1.043,457,0.889,458,0.876,463,1.331,464,0.933,465,0.658,466,1.192,467,0.804,485,0.864,493,1.058,494,1.029,511,1.784,519,1.09,528,1.294,532,1.099,533,0.906,540,0.961,550,0.93,559,1.352,563,1.147,568,0.757,572,1.205,575,0.476,594,0.884,603,0.92,606,1.158,620,1.218,626,0.92,647,0.739,651,0.801,654,1.029,658,0.795,677,0.884,679,0.92,693,0.973,697,1.008,704,0.783,712,1.09,717,0.99,719,1.09,720,1.294,721,0.978,728,1.108,730,2.261,746,0.897,747,1.312,750,1.485,753,1.424,767,1.082,787,1.312,792,0.817,808,1.587,812,0.889,818,0.935,835,0.945,837,1.231,846,0.955,855,1.453,858,1.117,860,1.073,875,0.553,876,1.277,897,0.749,902,0.872,906,0.889,908,0.713,909,1.108,943,1.398,957,2.238,964,1.015,976,1.601,1007,1.036,1008,0.961,1032,1.312,1043,1.158,1063,1.073,1113,0.99,1141,1.261,1154,1.261,1158,1.312,1189,0.789,1204,1.137,1237,1.029,1270,1.277,1273,1.218,1280,1.331,1281,1.312,1290,1.158,1308,1.277,1310,1.352,1312,2.238,1315,1.246,1344,1.205,1348,1.137,1352,1.352,1393,1.918,1399,1.352,1400,1.352,1401,1.727,1453,1.082,1470,1.485,1488,1.065,1490,1.331,1552,1.277,1559,1.294,1561,1.261,1565,1.261,1594,1.108,1611,1.18,1633,1.18,1639,1.424,1643,1.764,1679,0.911,1703,1.424,1708,0.966,1731,1.169,1755,1.294,1762,1.205,1768,1.137,1775,1.065,1794,1.246,1808,1.294,1832,1.082,1856,1.261,1857,1.277,1879,1.398,1943,1.137,1974,0.978,1977,1.562,1989,1.231,2055,1.192,2078,1.065,2081,1.192,2086,1.158,2127,1.192,2131,1.277,2170,1.331,2194,1.424,2248,1.127,2428,1.562,2473,3.59,2510,2.097,2549,1.331,2550,1.352,2564,1.127,2576,1.521,2806,1.562,2823,1.312,2846,1.218,2861,1.667,2968,1.312,3009,1.374,3064,1.205,3102,1.374,3289,2.261,3395,1.117,3536,1.398,3574,1.424,3626,1.246,3788,1.312,3887,1.374,4266,1.246,4541,1.246,4563,1.05,4574,1.058,4636,1.277,4777,1.352,4872,1.562,4873,1.453,4903,1.453,5075,1.667,5243,2.579,5523,1.398,5524,1.352,5525,1.398,5527,1.398,5528,1.485,5529,1.312,5532,1.398,5533,1.374,5534,1.485,5535,1.485,5536,1.374,5537,1.374,5538,1.485,5540,1.398,5541,1.485,5543,1.374,5544,2.397,5545,1.485,5548,1.453,5550,1.374,5552,1.485,5556,1.398,5558,1.374,5560,1.485,5561,1.398,5562,1.485,5566,1.352,5568,1.453,5571,1.485,5574,1.374,5578,1.398,5580,1.485,5583,1.398,5586,1.485,5593,1.374,5602,1.485,5607,1.424,5609,1.485,5610,1.453,5612,2.579,5613,1.485,5614,1.485,5615,1.485,5616,1.352,5617,1.485,5619,1.398,5621,1.485,5622,1.424,5626,1.485,5628,1.485,5629,1.374,5631,1.485,5632,1.485,5635,1.485,5636,1.485,5641,1.485,5643,1.398,5644,2.579,5646,1.453,5647,1.485,5648,1.485,5649,1.398,5650,1.398,5651,1.485,5654,1.374,5655,1.398,5656,1.485,5658,1.398,5659,1.485,5661,1.485,5665,1.485,5666,1.485,5669,1.485,5670,1.485,5672,1.485,5673,1.485,5675,1.485,5676,1.485,5677,1.485,5678,1.485,5679,1.485,5680,1.485,5681,1.485,5682,1.485,5683,1.374,5686,1.485,5687,1.398,5688,1.485,5690,1.485,5691,1.485,5693,1.485,5694,1.312,5695,1.398,5696,1.485,5698,1.485,5699,1.453,5700,1.485,5701,1.453,5702,1.485,5705,1.485,5706,1.485,5708,1.485,5709,2.499,5710,1.485,5711,1.485,5713,1.485,5941,1.61,6020,1.562,6042,1.562,6108,1.562,6155,1.562,6183,1.562,6216,1.562,6299,1.74,6300,1.74,6301,1.74,6302,1.74,6303,1.74,6304,1.74,6305,1.74,6306,1.74,6307,1.74,6308,1.74,6309,1.74,6310,1.74,6311,1.74,6312,1.74,6313,1.74,6314,1.74,6315,1.74,6316,1.74,6317,1.74,6318,1.74,6319,1.74,6320,1.74,6321,1.74,6322,1.74,6323,1.74,6324,1.74,6325,1.74,6326,1.74,6327,1.74,6328,1.74,6329,1.74,6330,1.74,6331,1.74,6332,1.74,6333,1.74,6334,1.74,6335,1.74,6336,1.74,6337,1.74,6338,1.74,6339,1.74,6340,3.266,6341,1.74,6342,1.74,6343,1.74,6344,1.74,6345,1.74,6346,1.74,6347,1.74,6348,1.74,6349,1.74,6350,1.74,6351,1.74,6352,1.74,6353,1.74,6354,1.74,6355,1.74,6356,1.74,6357,1.74]],["keywords/1379",[]],["title/1380",[5848,1021.147]],["content/1380",[66,3.901,87,7.34,123,8.196,167,10.216,223,4.891,224,2.782,230,7.563,251,6.663,263,5.424,351,10.216,370,10.971,372,6.893,682,7.027,698,9.162,741,9.635,1350,12.039,1442,9.868,1812,10.73,2251,12.039,2608,10.124,2960,14.339,3270,13.545,3935,11.525,5848,10.409]],["keywords/1380",[]],["title/1381",[2100,825.695]],["content/1381",[]],["keywords/1381",[]],["title/1382",[2042,532.102]],["content/1382",[1,3.071,2,1.419,3,2.203,11,3.714,15,4.682,20,4.535,22,1.829,25,3.868,65,6.196,66,3.009,79,3.679,136,5.262,146,7.021,155,5.38,195,1.867,222,2.163,223,2.985,224,2.137,225,6.566,228,3.785,235,7.021,263,4.184,270,4.264,277,2.874,281,3.142,289,6.259,303,5.833,330,4.602,335,4.239,340,3.034,352,6.219,397,2.879,427,4.945,485,5.938,526,5.338,575,3.27,605,6.719,627,3.468,647,5.079,752,5.34,804,5.616,847,7.058,873,8.865,874,9.287,875,3.803,902,5.993,1050,5.71,1120,9.439,1189,5.421,1212,7.433,1598,8.192,1992,9.287,2024,10.449,2100,10.261,2161,10.449,2462,8.561,5806,12.62,6358,13.63,6359,13.63,6360,13.63]],["keywords/1382",[]],["title/1383",[864,626.718]],["content/1383",[11,5.314,15,6.302,22,1.741,59,3.547,66,5.44,69,2.241,87,3.336,113,2.989,127,1.96,145,5.922,172,2.993,173,3.013,205,3.764,226,4.895,251,2.396,279,6.821,335,4.395,340,1.787,359,3.452,374,7.676,437,6.499,448,2.795,458,5.61,518,3.123,526,2.279,542,10.477,575,3.779,598,5.043,616,2.048,627,3.231,642,4.251,643,5.169,712,6.98,812,5.69,871,4.057,872,4.731,874,8.653,902,10.833,964,4.109,1126,2.761,1134,5.388,1142,2.804,1165,5.472,1175,4.826,1189,8.957,1628,5.169,1850,6.156,1916,4.136,1995,5.472,2042,2.465,2100,7.505,2134,13.243,2136,6.751,2137,6.517,2138,13.243,2139,6.156,2140,14.098,2141,11.791,2142,12.785,2143,18.261,2144,10.676,2145,13.243,2146,11.139,2147,10.676,2148,6.751,2149,6.751,2150,10.676,2151,6.751,2152,6.751,2153,6.751,2154,6.517,2155,5.881,2156,6.751,2157,6.751,2158,11.139,2257,6.01,2439,6.323,3053,4.985,4574,4.282,6361,8.03,6362,8.03]],["keywords/1383",[]],["title/1384",[13,188.901,15,212.515,895,256.047,975,572.957,6363,717.825]],["content/1384",[13,5.713,15,5.809,16,1.414,22,2.077,25,2.777,71,4.245,87,4.066,136,3.778,139,4.494,172,3.647,185,3.417,186,3.045,195,1.341,207,4.189,224,1.112,226,3.335,273,6.473,291,4.061,338,5.11,340,2.179,367,5.612,370,4.385,399,3.023,408,6.307,422,6.125,434,4.914,445,2.997,494,5.075,572,5.944,575,4.774,603,6.866,641,4.283,651,9.078,749,4.854,871,4.945,895,6.408,975,13.351,1014,6.174,1112,6.301,1182,9.062,1230,7.675,1241,9.789,1443,4.343,1598,5.882,1943,5.609,2100,8.503,2141,11.078,2225,8.228,2450,7.168,5566,6.669,5769,7.943,6363,12.443,6364,8.585,6365,22.476,6366,9.787,6367,9.787,6368,9.787,6369,9.787,6370,14.801,6371,9.787,6372,9.787,6373,17.848,6374,9.787,6375,9.787,6376,9.787,6377,9.787,6378,9.787,6379,9.787,6380,9.062,6381,9.787,6382,9.787,6383,9.787,6384,14.801,6385,9.787,6386,9.787,6387,9.787,6388,9.787]],["keywords/1384",[]],["title/1385",[16,250.43]],["content/1385",[2,2.441,3,3.791,16,2.763,22,2.281,25,6.657,69,5.335,89,5.055,136,7.381,168,3.86,195,2.62,223,4.187,224,2.172,282,3.636,574,8.692,875,5.335,2100,11.176]],["keywords/1385",[]],["title/1386",[282,329.633]],["content/1386",[3,1.623,11,6.184,13,2.221,16,1.451,18,5.729,19,4.178,20,3.341,22,1.96,25,2.849,113,4.267,155,3.963,168,4.362,195,1.376,205,4.707,221,5.041,223,3.304,258,2.004,263,3.083,270,3.141,282,2.87,291,4.14,335,4.869,343,3.729,389,7.988,397,2.121,399,3.082,426,7.573,485,4.374,526,5.72,542,9.737,556,4.374,575,3.62,647,5.623,685,6.738,693,2.624,816,5.563,895,6.044,902,7.97,993,5.434,1014,6.295,1050,4.206,1126,3.452,1133,6.512,1143,5.041,1230,5.207,1368,6.641,1598,6.035,1679,4.61,1709,5.394,1716,4.824,1875,5.08,2100,9.602,2161,7.697,2162,7.906,3482,6.738,3533,6.233,3539,8.441,3677,8.149,3848,6.464,4363,9.297,5441,5.916,6364,13.235,6389,15.089,6390,10.041]],["keywords/1386",[]],["title/1387",[1023,407.123]],["content/1387",[2,1.703,3,2.644,8,5.917,11,4.458,13,4.277,15,6.45,25,4.643,49,4.21,136,4.324,139,5.143,168,3.304,195,2.242,223,4.656,224,1.859,258,3.265,277,3.45,296,6.434,316,6.41,335,3.687,340,3.642,385,5.366,397,3.456,399,4.343,542,8.789,575,4.638,579,7.439,647,6.098,707,5.643,842,5.575,895,4.907,975,7.516,1124,8.993,1126,5.625,1133,5.878,1142,3.911,1230,8.485,1240,8.587,2161,12.544,2162,12.883,3239,15.15,3241,15.15,3242,15.15,3243,15.15,3244,13.756,3430,8.115,3495,10.045,5516,9.295,5795,11.53,6364,9.825,6391,11.201,6392,11.201]],["keywords/1387",[]],["title/1388",[714,537.961,2607,828.392]],["content/1388",[15,3.205,16,3.274,18,2.878,22,1.252,25,5.131,43,3.381,49,3.313,113,3.031,173,4.831,179,6.722,186,4.006,195,1.764,224,1.463,226,2.901,241,5.349,262,5.559,296,5.063,298,6.546,316,5.044,338,6.722,352,5.22,386,8.913,396,5.349,504,6.464,542,12.171,545,8.64,552,6.632,554,8.773,615,7.993,616,3.283,660,6.036,714,7.056,829,5.796,860,6.968,875,3.593,917,9.871,921,5.51,981,9.242,982,8.087,995,7.661,1267,5.463,1453,11.395,1496,11.294,1552,11.639,1916,6.632,1922,10.138,2100,8.613,2117,11.294,2139,9.871,2154,10.45,2155,15.302,2165,11.294,2214,9.637,2217,10.45,2247,10.138,2607,10.866,3451,11.294,5105,10.45,5302,16.74,5718,8.917,6393,12.875,6394,12.875,6395,10.824]],["keywords/1388",[]],["title/1389",[291,378.221,1014,574.998]],["content/1389",[2,1.479,13,3.144,22,1.382,31,3.673,79,3.837,161,5.527,168,4.445,173,5.333,205,9.075,208,5.88,224,1.615,266,6.771,277,2.996,288,7.37,291,7.002,300,9.271,329,5.527,348,7.579,367,8.963,380,8.542,394,6.368,397,3.002,399,3.955,458,6.278,467,5.763,536,9.035,540,6.886,544,9.906,545,9.537,546,5.61,602,7.273,616,3.624,746,6.43,792,5.857,829,6.398,1014,10.317,1076,9.843,1091,7.812,1624,7.472,1684,8.374,1864,9.537,2025,8.145,2100,9.222,3430,7.049,5441,8.374,5795,10.015]],["keywords/1389",[]],["title/1390",[546,544.018,2215,812.067]],["content/1390",[]],["keywords/1390",[]],["title/1391",[205,458.399,291,268.337,539,689.056,546,385.965]],["content/1391",[3,3.159,13,5.042,22,1.613,33,6.864,43,2.999,49,4.27,63,12.154,64,10.573,71,4.954,152,6.181,155,4.508,168,2.306,180,5.533,181,4.785,186,3.553,191,6.729,193,12.154,195,2.274,205,5.354,220,4.846,223,4.699,244,5.244,262,4.931,263,3.506,270,3.573,273,7.554,281,2.633,288,5.923,291,4.554,334,4.706,340,2.542,352,3.297,428,7.235,440,4.425,464,2.861,471,10.575,540,5.533,546,7.716,554,7.782,676,8.134,726,10.575,797,16.434,810,7.471,813,6.327,959,7.173,976,7.134,993,8.982,1461,9.602,1510,9.269,1558,13.952,1580,8.993,1621,6.936,1645,15.367,1654,8.756,1863,7.45,1927,19.991,2100,10.222,2270,10.018,2763,18.82,3188,10.018,4279,10.575,6396,11.421,6397,11.421]],["keywords/1391",[]],["title/1392",[6363,1457.086]],["content/1392",[13,5.343,16,3.166,18,3.832,22,2.13,89,3.695,115,6.39,168,3.462,195,2.349,291,4.705,320,8.504,399,3.503,445,5.25,542,9.211,546,6.768,847,6.434,895,7.242,975,14.703,1014,7.153,1042,6.899,1074,8.556,1230,8.892,1905,12.082,1943,9.826,2248,9.74,6363,20.302,6398,17.147,6399,17.147]],["keywords/1392",[]],["title/1393",[7,394.971,19,225.419,195,133.976,455,514.086]],["content/1393",[2,2.54,16,2.534,19,4.042,22,2.161,66,3.871,79,4.733,89,3.779,195,2.402,207,7.505,223,3.84,226,3.951,281,4.042,349,10.233,377,8.973,440,9.454,455,9.218,1709,9.419,2100,11.625,6400,22.226,6401,17.535,6402,22.226,6403,22.226,6404,17.535]],["keywords/1393",[]],["title/1394",[382,745.942,2473,745.942]],["content/1394",[2,1.133,11,2.966,20,3.622,22,1.558,66,4.198,68,5.244,71,6.95,79,2.939,97,4.854,127,2.657,160,5.103,168,3.235,172,4.057,173,4.085,185,3.801,211,6.612,226,2.453,230,6.44,231,4.346,246,6.081,263,3.342,281,2.51,289,4.999,291,2.987,323,6.759,330,3.676,335,2.453,338,5.684,339,6.921,362,6.612,368,3.963,374,4.029,382,10.291,384,7.008,394,4.877,400,4.619,404,3.709,416,5.645,440,4.218,458,4.809,464,2.727,465,3.612,467,4.415,485,6.981,526,3.089,644,4.346,660,5.103,677,4.854,682,4.33,693,4.188,704,4.297,719,5.983,730,6.612,812,4.877,818,5.131,835,5.186,875,3.038,897,4.114,906,4.877,976,6.888,1008,5.274,1023,2.557,1158,7.2,1189,4.33,1204,6.239,1270,7.008,1315,6.838,1442,6.081,1554,6.921,1594,6.081,1708,5.305,1837,5.432,1856,6.921,2086,6.353,2100,9.059,2117,9.549,2473,10.291,2510,11.812,3412,7.101,5524,7.418,5529,7.2,5544,7.008,5568,7.973,5616,7.418,5619,7.671,5620,8.148,5694,7.2,5704,8.346,5709,7.305,5712,7.973,5817,10.08,6097,9.152,6145,8.836,6405,10.887,6406,10.887]],["keywords/1394",[]],["title/1395",[61,341.406,172,364.419,1150,340.348,3289,593.887]],["content/1395",[]],["keywords/1395",[]],["title/1396",[2042,532.102]],["content/1396",[1,4.074,2,1.882,3,2.922,22,1.758,25,5.131,66,5.003,68,8.709,69,6.322,168,4.575,223,3.96,224,2.574,335,5.106,340,4.024,352,5.22,575,5.436,627,4.6,829,8.139,1133,8.14,3289,13.761,3766,10.454,5967,14.236]],["keywords/1396",[]],["title/1397",[61,264.548,172,451.911,864,273.996,1150,263.728,1221,294.658]],["content/1397",[2,1.634,4,8.372,15,2.636,16,3.193,22,1.819,31,2.737,61,3.697,66,4.569,92,4.722,97,4.722,112,6.925,115,6.972,127,3.832,161,4.118,172,3.946,198,4.838,224,2.125,228,2.941,246,5.914,258,2.113,263,3.251,279,5.163,281,2.441,282,2.014,293,5.914,297,4.474,325,5.073,335,4.216,352,3.057,367,5.953,385,3.473,396,4.399,461,5.647,574,7.137,575,4.489,594,4.722,626,4.912,627,3.995,641,4.634,646,7.283,647,3.946,651,6.341,658,4.244,682,4.211,693,5.409,804,4.363,823,4.677,849,5.871,1023,2.487,1126,5.398,1142,3.697,1163,8.842,1189,7.441,1210,5.017,1215,10.046,1217,8.423,1220,9.271,1221,4.118,1222,5.688,2020,4.613,2094,4.593,2132,5.529,2466,6.431,3289,6.431,3404,5.964,4597,6.501,5242,7.462,5252,8.338,6252,16.941,6298,8.338]],["keywords/1397",[]],["title/1398",[693,360.272,3289,837.083]],["content/1398",[2,1.634,4,8.372,15,2.636,16,3.193,22,1.819,31,2.737,61,3.697,66,4.569,92,4.722,97,4.722,112,6.925,115,6.972,127,3.832,161,4.118,172,3.946,198,4.838,224,2.125,228,2.941,246,5.914,258,2.113,263,3.251,279,5.163,281,2.441,282,2.014,293,5.914,297,4.474,325,5.073,335,4.216,352,3.057,367,5.953,385,3.473,396,4.399,461,5.647,574,7.137,575,4.489,594,4.722,626,4.912,627,3.995,641,4.634,646,7.283,647,3.946,651,6.341,658,4.244,682,4.211,693,5.409,804,4.363,823,4.677,849,5.871,1023,2.487,1126,5.398,1163,8.842,1189,7.441,1210,5.017,1215,10.046,1217,8.423,1220,9.271,1221,4.118,1222,5.688,2020,4.613,2094,4.593,2132,5.529,2466,6.431,3289,6.431,3404,5.964,4597,6.501,5242,7.462,5252,8.338,5262,9.288,6252,16.941,6298,8.338]],["keywords/1398",[]],["title/1399",[16,250.43]],["content/1399",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,3289,11.517]],["keywords/1399",[]],["title/1400",[282,329.633]],["content/1400",[18,5.469,19,4.372,31,3.564,65,6.27,66,4.187,112,6.347,113,4.464,168,4.376,223,4.153,224,2.154,258,2.752,282,3.607,291,5.947,335,5.514,399,2.817,417,7.768,426,7.136,448,6.6,512,7.464,575,5.6,647,7.067,693,3.605,818,6.5,1014,7.911,1126,7.451,1210,8.985,1679,6.333,1709,7.408,1716,6.063,1875,6.384,2020,6.009,3533,8.562,4683,9.551,5252,10.859,5441,8.126]],["keywords/1400",[]],["title/1401",[1023,407.123]],["content/1401",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1125,13.242,1126,6.573,3293,15.518,3430,9.483,3432,9.159,5516,10.861]],["keywords/1401",[]],["title/1402",[291,378.221,1014,574.998]],["content/1402",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1402",[]],["title/1403",[382,745.942,2473,745.942]],["content/1403",[1,0.447,2,0.388,3,0.321,7,0.801,11,0.54,13,0.439,15,7.375,20,0.66,22,0.512,24,0.514,29,1.231,30,0.634,31,0.513,36,0.763,39,1.192,41,0.984,43,0.521,49,0.51,52,0.804,64,0.92,66,0.438,68,0.955,69,0.553,71,1.615,73,0.686,77,1.205,79,0.535,85,1.61,87,0.824,97,0.884,100,1.312,110,0.93,113,0.467,119,1.147,120,0.889,130,0.893,136,0.766,137,1.05,139,1.71,146,1.022,155,1.47,168,0.752,172,0.739,181,0.831,185,0.692,186,1.158,192,0.984,194,1.294,195,0.272,197,1.127,198,0.906,199,1.169,211,1.205,214,0.945,225,0.955,226,0.839,227,0.638,230,1.782,262,0.856,263,0.609,265,1.158,266,0.945,267,1.277,283,0.744,287,0.849,289,2.416,290,0.853,291,0.544,296,0.78,303,0.849,307,0.668,320,0.984,330,0.67,335,0.447,338,1.036,339,1.261,343,0.737,351,1.147,358,1.137,362,1.205,364,1.117,368,0.722,374,0.734,382,3.59,384,1.277,385,0.65,387,0.961,394,0.889,404,0.676,405,1.147,408,0.845,410,1.192,416,1.029,422,0.611,428,0.734,432,0.889,440,0.768,452,1.169,455,1.043,457,0.889,458,0.876,463,1.331,464,0.933,465,0.658,466,1.192,467,0.804,485,0.864,493,1.058,494,1.029,511,1.784,519,1.09,528,1.294,532,1.099,533,0.906,540,0.961,550,0.93,559,1.352,563,1.147,568,0.757,572,1.205,575,0.476,594,0.884,603,0.92,606,1.158,620,1.218,626,0.92,647,0.739,651,0.801,654,1.029,658,0.795,677,0.884,679,0.92,693,0.973,697,1.008,704,0.783,712,1.09,717,0.99,719,1.09,720,1.294,721,0.978,728,1.108,730,2.261,746,0.897,747,1.312,750,1.485,753,1.424,767,1.082,787,1.312,792,0.817,808,1.587,812,0.889,818,0.935,835,0.945,837,1.231,846,0.955,855,1.453,858,1.117,860,1.073,875,0.553,876,1.277,897,0.749,902,0.872,906,0.889,908,0.713,909,1.108,943,1.398,957,2.238,964,1.015,976,1.601,1007,1.036,1008,0.961,1032,1.312,1043,1.158,1063,1.073,1113,0.99,1141,1.261,1154,1.261,1158,1.312,1189,0.789,1204,1.137,1237,1.029,1270,1.277,1273,1.218,1280,1.331,1281,1.312,1290,1.158,1308,1.277,1310,1.352,1312,2.238,1315,1.246,1344,1.205,1348,1.137,1352,1.352,1393,1.918,1399,1.352,1400,1.352,1401,1.727,1453,1.082,1470,1.485,1488,1.065,1490,1.331,1552,1.277,1559,1.294,1561,1.261,1565,1.261,1594,1.108,1611,1.18,1633,1.18,1639,1.424,1643,1.764,1679,0.911,1703,1.424,1708,0.966,1731,1.169,1755,1.294,1762,1.205,1768,1.137,1775,1.065,1794,1.246,1808,1.294,1832,1.082,1856,1.261,1857,1.277,1879,1.398,1943,1.137,1974,0.978,1977,1.562,1989,1.231,2055,1.192,2078,1.065,2081,1.192,2086,1.158,2127,1.192,2131,1.277,2170,1.331,2194,1.424,2248,1.127,2428,1.562,2473,3.59,2510,2.097,2549,1.331,2550,1.352,2564,1.127,2576,1.521,2806,1.562,2823,1.312,2846,1.218,2861,1.667,2968,1.312,3009,1.374,3064,1.205,3102,1.374,3289,2.261,3395,1.117,3536,1.398,3574,1.424,3626,1.246,3788,1.312,3887,1.374,4266,1.246,4541,1.246,4563,1.05,4574,1.058,4636,1.277,4777,1.352,4872,1.562,4873,1.453,4903,1.453,5075,1.667,5243,2.579,5523,1.398,5524,1.352,5525,1.398,5527,1.398,5528,1.485,5529,1.312,5532,1.398,5533,1.374,5534,1.485,5535,1.485,5536,1.374,5537,1.374,5538,1.485,5540,1.398,5541,1.485,5543,1.374,5544,2.397,5545,1.485,5548,1.453,5550,1.374,5552,1.485,5556,1.398,5558,1.374,5560,1.485,5561,1.398,5562,1.485,5566,1.352,5568,1.453,5571,1.485,5574,1.374,5578,1.398,5580,1.485,5583,1.398,5586,1.485,5593,1.374,5602,1.485,5607,1.424,5609,1.485,5610,1.453,5612,2.579,5613,1.485,5614,1.485,5615,1.485,5616,1.352,5617,1.485,5619,1.398,5621,1.485,5622,1.424,5626,1.485,5628,1.485,5629,1.374,5631,1.485,5632,1.485,5635,1.485,5636,1.485,5641,1.485,5643,1.398,5644,2.579,5646,1.453,5647,1.485,5648,1.485,5649,1.398,5650,1.398,5651,1.485,5654,1.374,5655,1.398,5656,1.485,5658,1.398,5659,1.485,5661,1.485,5665,1.485,5666,1.485,5669,1.485,5670,1.485,5672,1.485,5673,1.485,5675,1.485,5676,1.485,5677,1.485,5678,1.485,5679,1.485,5680,1.485,5681,1.485,5682,1.485,5683,1.374,5686,1.485,5687,1.398,5688,1.485,5690,1.485,5691,1.485,5693,1.485,5694,1.312,5695,1.398,5696,1.485,5698,1.485,5699,1.453,5700,1.485,5701,1.453,5702,1.485,5705,1.485,5706,1.485,5708,1.485,5709,2.499,5710,1.485,5711,1.485,5713,1.485,5941,1.61,6020,1.562,6042,1.562,6108,1.562,6155,1.562,6183,1.562,6216,1.562,6299,1.74,6300,1.74,6301,1.74,6302,1.74,6303,1.74,6304,1.74,6305,1.74,6306,1.74,6307,1.74,6308,1.74,6309,1.74,6310,1.74,6311,1.74,6312,1.74,6313,1.74,6314,1.74,6315,1.74,6316,1.74,6317,1.74,6318,1.74,6319,1.74,6320,1.74,6321,1.74,6322,1.74,6323,1.74,6324,1.74,6325,1.74,6326,1.74,6327,1.74,6328,1.74,6329,1.74,6330,1.74,6331,1.74,6332,1.74,6333,1.74,6334,1.74,6335,1.74,6336,1.74,6337,1.74,6338,1.74,6339,1.74,6340,3.266,6341,1.74,6342,1.74,6343,1.74,6344,1.74,6345,1.74,6346,1.74,6347,1.74,6348,1.74,6349,1.74,6350,1.74,6351,1.74,6352,1.74,6353,1.74,6354,1.74,6355,1.74,6356,1.74,6357,1.74]],["keywords/1403",[]],["title/1404",[5848,1021.147]],["content/1404",[66,3.901,87,7.34,123,8.196,167,10.216,223,4.891,224,2.782,230,7.563,251,6.663,263,5.424,351,10.216,370,10.971,372,6.893,682,7.027,698,9.162,741,9.635,1350,12.039,1442,9.868,1812,10.73,2251,12.039,2608,10.124,2960,14.339,3270,13.545,3935,11.525,5848,10.409]],["keywords/1404",[]],["title/1405",[1758,971.224,3289,837.083]],["content/1405",[]],["keywords/1405",[]],["title/1406",[2042,532.102]],["content/1406",[1,4.074,2,1.882,3,2.922,22,1.758,25,5.131,66,5.003,68,8.709,69,6.322,168,4.575,223,3.96,224,2.574,335,5.106,340,4.024,352,5.22,575,5.436,627,4.6,829,8.139,1133,8.14,3289,13.761,3766,10.454,5967,14.236]],["keywords/1406",[]],["title/1407",[864,626.718]],["content/1407",[18,4.381,19,4.519,61,6.844,127,4.785,172,10.191,647,8.876,752,7.68,1221,7.623,1299,11.906,2046,10.949,3053,12.17,5234,16.481,5235,16.481,5236,17.195]],["keywords/1407",[]],["title/1408",[172,364.419,647,364.419,1221,380.264,1299,593.887]],["content/1408",[2,1.444,4,10.154,15,3.453,16,2.751,22,1.851,66,4.8,112,4.643,115,5.17,127,3.386,224,1.576,226,3.126,228,3.853,246,7.749,258,3.8,263,4.259,279,6.263,281,3.198,335,3.126,367,5.261,408,5.912,445,4.248,575,4.569,604,7.146,641,6.072,646,8.833,647,5.17,693,5.683,849,7.121,1023,3.259,1110,7.625,1126,6.546,1142,4.844,1163,10.724,1189,7.573,1214,9.05,1215,6.307,1217,8.572,1220,8.531,1221,7.405,1222,7.453,1290,8.097,2461,9.959,4598,10.636,5242,9.776,6252,18.799,6298,10.924]],["keywords/1408",[]],["title/1409",[172,426.353,335,257.805,1151,633.815]],["content/1409",[2,1.634,4,8.372,15,2.636,16,3.345,22,1.819,31,2.737,66,4.879,69,2.955,92,4.722,97,4.722,112,5.254,113,2.493,115,6.972,127,4.567,161,4.118,172,3.946,198,4.838,224,2.125,228,2.941,246,5.914,258,2.113,263,3.251,279,5.163,281,2.441,282,2.014,293,5.914,297,4.474,325,5.073,335,3.538,352,3.057,367,4.015,396,4.399,461,5.647,574,7.137,575,4.489,594,4.722,607,4.722,627,4.76,641,4.634,644,4.228,646,7.283,647,3.946,658,4.244,682,4.211,693,5.409,804,4.363,823,4.677,849,5.871,1023,2.487,1126,5.398,1142,3.697,1163,8.842,1175,6.364,1189,8.23,1210,5.017,1215,7.137,1217,8.423,1220,9.271,1221,6.105,1222,5.688,1290,6.18,2020,4.613,2094,4.593,2461,7.601,2466,6.431,3289,6.431,3404,5.964,4597,6.501,5242,7.462,5252,8.338,6252,16.941,6298,8.338]],["keywords/1409",[]],["title/1410",[16,250.43]],["content/1410",[2,2.429,3,3.772,16,2.74,22,2.269,25,6.624,47,8.579,89,5.03,136,7.321,168,3.829,195,2.598,223,4.153,224,2.154,282,3.607,335,4.273,574,8.621,875,5.291,897,7.166,3289,11.517]],["keywords/1410",[]],["title/1411",[282,329.633]],["content/1411",[18,5.469,19,4.372,31,3.564,65,6.27,66,4.187,112,6.347,113,4.464,168,4.376,223,4.153,224,2.154,258,2.752,282,3.607,291,5.947,335,5.514,399,2.817,417,7.768,426,7.136,448,6.6,512,7.464,575,5.6,647,7.067,693,3.605,818,6.5,1014,7.911,1126,7.451,1210,8.985,1679,6.333,1709,7.408,1716,6.063,1875,6.384,2020,6.009,3533,8.562,4601,9.397,4683,9.551,5441,8.126]],["keywords/1411",[]],["title/1412",[1023,407.123]],["content/1412",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1125,13.242,1126,6.573,3293,15.518,3430,9.483,3432,9.159,5516,10.861]],["keywords/1412",[]],["title/1413",[291,378.221,1014,574.998]],["content/1413",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1413",[]],["title/1414",[382,745.942,2473,745.942]],["content/1414",[1,0.447,2,0.388,3,0.321,7,0.801,11,0.54,13,0.439,15,7.375,20,0.66,22,0.512,24,0.514,29,1.231,30,0.634,31,0.513,36,0.763,39,1.192,41,0.984,43,0.521,49,0.51,52,0.804,64,0.92,66,0.438,68,0.955,69,0.553,71,1.615,73,0.686,77,1.205,79,0.535,85,1.61,87,0.824,97,0.884,100,1.312,110,0.93,113,0.467,119,1.147,120,0.889,130,0.893,136,0.766,137,1.05,139,1.71,146,1.022,155,1.47,168,0.752,172,0.739,181,0.831,185,0.692,186,1.158,192,0.984,194,1.294,195,0.272,197,1.127,198,0.906,199,1.169,211,1.205,214,0.945,225,0.955,226,0.839,227,0.638,230,1.782,262,0.856,263,0.609,265,1.158,266,0.945,267,1.277,283,0.744,287,0.849,289,2.416,290,0.853,291,0.544,296,0.78,303,0.849,307,0.668,320,0.984,330,0.67,335,0.447,338,1.036,339,1.261,343,0.737,351,1.147,358,1.137,362,1.205,364,1.117,368,0.722,374,0.734,382,3.59,384,1.277,385,0.65,387,0.961,394,0.889,404,0.676,405,1.147,408,0.845,410,1.192,416,1.029,422,0.611,428,0.734,432,0.889,440,0.768,452,1.169,455,1.043,457,0.889,458,0.876,463,1.331,464,0.933,465,0.658,466,1.192,467,0.804,485,0.864,493,1.058,494,1.029,511,1.784,519,1.09,528,1.294,532,1.099,533,0.906,540,0.961,550,0.93,559,1.352,563,1.147,568,0.757,572,1.205,575,0.476,594,0.884,603,0.92,606,1.158,620,1.218,626,0.92,647,0.739,651,0.801,654,1.029,658,0.795,677,0.884,679,0.92,693,0.973,697,1.008,704,0.783,712,1.09,717,0.99,719,1.09,720,1.294,721,0.978,728,1.108,730,2.261,746,0.897,747,1.312,750,1.485,753,1.424,767,1.082,787,1.312,792,0.817,808,1.587,812,0.889,818,0.935,835,0.945,837,1.231,846,0.955,855,1.453,858,1.117,860,1.073,875,0.553,876,1.277,897,0.749,902,0.872,906,0.889,908,0.713,909,1.108,943,1.398,957,2.238,964,1.015,976,1.601,1007,1.036,1008,0.961,1032,1.312,1043,1.158,1063,1.073,1113,0.99,1141,1.261,1154,1.261,1158,1.312,1189,0.789,1204,1.137,1237,1.029,1270,1.277,1273,1.218,1280,1.331,1281,1.312,1290,1.158,1308,1.277,1310,1.352,1312,2.238,1315,1.246,1344,1.205,1348,1.137,1352,1.352,1393,1.918,1399,1.352,1400,1.352,1401,1.727,1453,1.082,1470,1.485,1488,1.065,1490,1.331,1552,1.277,1559,1.294,1561,1.261,1565,1.261,1594,1.108,1611,1.18,1633,1.18,1639,1.424,1643,1.764,1679,0.911,1703,1.424,1708,0.966,1731,1.169,1755,1.294,1762,1.205,1768,1.137,1775,1.065,1794,1.246,1808,1.294,1832,1.082,1856,1.261,1857,1.277,1879,1.398,1943,1.137,1974,0.978,1977,1.562,1989,1.231,2055,1.192,2078,1.065,2081,1.192,2086,1.158,2127,1.192,2131,1.277,2170,1.331,2194,1.424,2248,1.127,2428,1.562,2473,3.59,2510,2.097,2549,1.331,2550,1.352,2564,1.127,2576,1.521,2806,1.562,2823,1.312,2846,1.218,2861,1.667,2968,1.312,3009,1.374,3064,1.205,3102,1.374,3289,2.261,3395,1.117,3536,1.398,3574,1.424,3626,1.246,3788,1.312,3887,1.374,4266,1.246,4541,1.246,4563,1.05,4574,1.058,4636,1.277,4777,1.352,4872,1.562,4873,1.453,4903,1.453,5075,1.667,5243,2.579,5523,1.398,5524,1.352,5525,1.398,5527,1.398,5528,1.485,5529,1.312,5532,1.398,5533,1.374,5534,1.485,5535,1.485,5536,1.374,5537,1.374,5538,1.485,5540,1.398,5541,1.485,5543,1.374,5544,2.397,5545,1.485,5548,1.453,5550,1.374,5552,1.485,5556,1.398,5558,1.374,5560,1.485,5561,1.398,5562,1.485,5566,1.352,5568,1.453,5571,1.485,5574,1.374,5578,1.398,5580,1.485,5583,1.398,5586,1.485,5593,1.374,5602,1.485,5607,1.424,5609,1.485,5610,1.453,5612,2.579,5613,1.485,5614,1.485,5615,1.485,5616,1.352,5617,1.485,5619,1.398,5621,1.485,5622,1.424,5626,1.485,5628,1.485,5629,1.374,5631,1.485,5632,1.485,5635,1.485,5636,1.485,5641,1.485,5643,1.398,5644,2.579,5646,1.453,5647,1.485,5648,1.485,5649,1.398,5650,1.398,5651,1.485,5654,1.374,5655,1.398,5656,1.485,5658,1.398,5659,1.485,5661,1.485,5665,1.485,5666,1.485,5669,1.485,5670,1.485,5672,1.485,5673,1.485,5675,1.485,5676,1.485,5677,1.485,5678,1.485,5679,1.485,5680,1.485,5681,1.485,5682,1.485,5683,1.374,5686,1.485,5687,1.398,5688,1.485,5690,1.485,5691,1.485,5693,1.485,5694,1.312,5695,1.398,5696,1.485,5698,1.485,5699,1.453,5700,1.485,5701,1.453,5702,1.485,5705,1.485,5706,1.485,5708,1.485,5709,2.499,5710,1.485,5711,1.485,5713,1.485,5941,1.61,6020,1.562,6042,1.562,6108,1.562,6155,1.562,6183,1.562,6216,1.562,6299,1.74,6300,1.74,6301,1.74,6302,1.74,6303,1.74,6304,1.74,6305,1.74,6306,1.74,6307,1.74,6308,1.74,6309,1.74,6310,1.74,6311,1.74,6312,1.74,6313,1.74,6314,1.74,6315,1.74,6316,1.74,6317,1.74,6318,1.74,6319,1.74,6320,1.74,6321,1.74,6322,1.74,6323,1.74,6324,1.74,6325,1.74,6326,1.74,6327,1.74,6328,1.74,6329,1.74,6330,1.74,6331,1.74,6332,1.74,6333,1.74,6334,1.74,6335,1.74,6336,1.74,6337,1.74,6338,1.74,6339,1.74,6340,3.266,6341,1.74,6342,1.74,6343,1.74,6344,1.74,6345,1.74,6346,1.74,6347,1.74,6348,1.74,6349,1.74,6350,1.74,6351,1.74,6352,1.74,6353,1.74,6354,1.74,6355,1.74,6356,1.74,6357,1.74]],["keywords/1414",[]],["title/1415",[5848,1021.147]],["content/1415",[66,3.901,87,7.34,123,8.196,167,10.216,223,4.891,224,2.782,230,7.563,251,6.663,263,5.424,351,10.216,370,10.971,372,6.893,682,7.027,698,9.162,741,9.635,1350,12.039,1442,9.868,1812,10.73,2251,12.039,2608,10.124,2960,14.339,3270,13.545,3935,11.525,5848,10.409]],["keywords/1415",[]],["title/1416",[6407,1457.086]],["content/1416",[]],["keywords/1416",[]],["title/1417",[2042,532.102]],["content/1417",[2,1.651,3,2.563,11,4.322,22,2.025,25,5.912,65,7.21,66,4.599,168,3.202,195,2.173,224,1.802,227,5.099,263,4.869,289,7.283,330,5.355,340,3.53,343,5.89,352,4.579,416,8.225,448,5.52,493,8.458,518,6.168,526,4.501,575,3.805,627,4.036,767,8.649,808,6.759,831,11.27,902,6.973,1189,6.308,1598,9.532,1794,9.962,1988,8.877,3514,10.083,3518,10.49,5805,19.289,6407,13.334,6408,18.273,6409,15.861,6410,15.861]],["keywords/1417",[]],["title/1418",[864,626.718]],["content/1418",[1,3.922,11,4.742,59,7.687,168,3.514,185,7.723,250,9.72,340,3.874,385,5.707,457,7.797,627,4.428,647,6.486,679,8.073,693,5.782,767,9.491,902,9.726,1189,6.921,1364,17.38,1794,10.931,1837,8.684,2094,9.594,2564,13.813,3790,15.265,6411,17.403]],["keywords/1418",[]],["title/1419",[16,250.43]],["content/1419",[2,2.441,3,3.791,16,2.763,22,2.281,25,6.657,69,5.335,89,5.055,136,7.381,168,3.86,195,2.62,223,4.187,224,2.172,282,3.636,574,8.692,875,5.335,6407,19.722]],["keywords/1419",[]],["title/1420",[282,329.633]],["content/1420",[11,6.568,13,3.779,14,4.125,18,5.943,19,3.938,20,3.955,22,1.156,30,3.801,31,3.073,59,5.251,62,8.273,103,5.133,113,5.45,120,5.326,130,5.352,168,4.037,223,2.604,227,7.028,258,2.372,282,3.249,389,9.045,399,2.429,426,7.835,526,6.204,627,4.347,647,4.43,831,5.759,1126,6.875,1142,4.151,1210,5.633,1716,5.462,1875,5.751,2027,11.044,2122,9.858,3514,7.557,3518,7.862,3533,7.38,3539,9.994,5744,9.994,6408,17.54]],["keywords/1420",[]],["title/1421",[1023,407.123]],["content/1421",[2,1.607,3,2.495,8,5.583,11,5.576,15,5.094,25,4.382,31,3.99,49,3.972,62,8.467,168,3.117,195,2.115,223,4.482,224,1.754,227,4.964,258,3.081,277,3.255,296,6.071,316,6.048,340,3.437,385,5.063,397,3.262,399,4.181,526,5.808,579,7.019,647,5.754,707,5.324,842,5.26,1124,8.486,1126,7.036,2122,10.089,3404,8.696,3430,7.657,3514,9.815,3518,10.211,3688,13.543,5231,11.836,5516,8.77,5744,12.98,5792,13.543,5795,10.879,5810,12.157,6412,15.439,6413,15.439]],["keywords/1421",[]],["title/1422",[714,537.961,2607,828.392]],["content/1422",[16,3.627,186,6.661,224,2.432,616,5.459,660,10.035,714,8.356,2607,12.867,5718,14.826]],["keywords/1422",[]],["title/1423",[382,745.942,2473,745.942]],["content/1423",[2,1.276,20,4.081,22,1.698,66,3.857,71,5.319,79,3.311,139,5.632,168,3.527,172,4.57,173,4.602,192,6.083,211,7.448,230,6.89,231,4.896,263,3.765,281,2.827,323,7.614,339,7.797,368,4.464,374,4.539,382,11.011,394,5.495,416,6.36,458,5.417,464,3.073,465,4.069,485,7.61,519,6.741,594,5.469,644,4.896,660,5.749,682,4.878,719,6.741,835,5.843,875,3.422,906,5.495,1008,5.942,1312,7.371,1315,7.703,1442,6.85,1554,7.797,1594,6.85,1708,5.976,1837,6.12,1856,7.797,2473,11.011,2510,12.488,3626,7.703,5524,8.357,5536,8.494,5544,7.895,5563,9.657,5569,9.657,5572,9.657,5579,9.657,5581,8.982,5585,8.982,5607,8.804,5610,8.982,5611,9.657,5616,8.357,5620,9.18,5622,8.804,5683,8.494,5692,9.657,5694,8.111,5699,8.982,5701,8.982,5707,9.657,5709,8.23,5712,8.982,6407,14.686,6408,15.322,6414,12.264,6415,12.264]],["keywords/1423",[]],["title/1424",[5431,1297.249]],["content/1424",[]],["keywords/1424",[]],["title/1425",[2042,532.102]],["content/1425",[2,1.958,3,3.04,22,2.258,25,5.338,61,6.567,207,8.051,223,4.12,224,2.137,229,7.88,235,9.689,250,10.506,335,4.239,340,4.187,352,5.431,575,4.513,647,7.01,693,4.917,1133,6.758,1210,8.913,2132,9.821,5431,14.079,6416,18.811,6417,18.811]],["keywords/1425",[]],["title/1426",[16,250.43]],["content/1426",[1,3.893,2,2.291,3,3.558,16,2.496,22,2.14,25,6.248,47,7.814,66,4.861,69,4.82,89,4.744,136,6.668,168,4.893,195,2.367,223,3.783,224,2.501,282,3.285,335,4.961,347,6.226,574,7.853,616,4.405,771,7.426,829,7.777,875,4.82,897,6.527,5431,12.929]],["keywords/1426",[]],["title/1427",[282,329.633]],["content/1427",[11,6.586,16,2.315,18,4.687,19,3.694,22,1.558,30,3.481,65,4.949,66,4.935,112,5.363,113,3.772,155,4.297,168,5.111,172,5.972,220,4.619,221,5.466,223,4.593,224,1.82,226,2.453,258,3.198,262,4.701,282,3.048,291,5.218,335,5.447,389,8.484,397,2.3,399,3.273,417,6.131,426,7.233,448,3.789,512,5.892,518,4.233,556,4.743,575,5.032,647,4.057,693,2.846,818,5.131,849,5.992,993,5.892,1014,6.685,1126,6.537,1210,5.158,1679,4.999,1709,8.608,1716,5.124,1875,5.395,2020,4.743,3553,8.346,3848,7.008,3850,7.305,4683,7.54,5441,6.414,5514,8.836,5515,8.836,6418,9.549]],["keywords/1427",[]],["title/1428",[1023,407.123]],["content/1428",[2,2.641,112,6.399,168,3.86,223,4.187,224,2.172,258,3.816,277,4.031,335,4.309,397,4.039,399,3.906,575,4.587,707,6.594,842,6.514,1124,10.509,1126,6.573,3430,9.483,3432,9.159,5432,17.704,5516,10.861,6419,19.12]],["keywords/1428",[]],["title/1429",[66,252.595,5431,856.309,6418,1003.508]],["content/1429",[2,1.394,3,2.165,16,2.685,30,4.283,43,6.053,49,3.446,70,5.389,113,3.153,127,3.269,168,5.189,172,4.992,180,6.489,185,6.489,195,1.835,223,4.07,270,4.19,277,2.824,339,8.515,343,4.975,357,6.279,374,4.958,385,4.393,397,2.83,399,4.947,427,4.859,440,5.19,455,7.042,464,5.347,465,7.08,481,8.223,494,6.946,539,9.438,571,9.615,829,6.03,1546,11.749,1643,6.346,1684,7.892,2041,8.061,2422,8.223,5431,10.025,6418,16.302,6420,13.394,6421,18.585,6422,13.394,6423,18.585,6424,18.585,6425,18.585,6426,13.394]],["keywords/1429",[]],["title/1430",[291,378.221,1014,574.998]],["content/1430",[22,2.044,31,5.433,205,11.643,224,2.388,291,6.815,616,5.36,746,9.509,792,8.662,1014,8.769]],["keywords/1430",[]],["title/1431",[382,745.942,2473,745.942]],["content/1431",[1,0.914,2,0.744,3,0.655,11,1.105,13,0.897,22,0.695,25,1.151,29,2.517,30,1.296,31,1.048,39,2.437,41,2.011,43,1.065,49,1.043,52,1.644,64,1.881,66,0.895,68,1.953,69,1.131,71,3.102,73,1.403,77,2.462,79,1.094,87,1.684,97,1.808,100,2.682,107,2.117,110,1.901,113,0.954,119,2.344,136,1.565,137,2.147,139,3.285,146,2.089,155,1.6,168,1.444,172,1.511,181,1.699,185,1.416,186,2.226,192,2.011,196,1.571,199,2.389,202,2.808,211,2.462,225,1.953,226,0.914,227,1.304,230,3.251,262,1.751,265,2.366,266,1.932,267,2.61,283,1.521,287,1.735,289,4.407,290,1.743,291,1.113,303,1.735,307,1.365,312,1.735,320,2.011,330,1.369,338,2.117,343,1.506,358,2.323,362,2.462,364,2.284,368,1.476,370,1.817,374,1.501,382,6.266,384,2.61,385,1.33,394,1.817,404,1.381,405,2.344,408,1.728,409,2.194,410,2.437,416,2.103,428,1.501,432,1.817,440,2.772,452,2.389,455,2.132,458,1.791,463,2.721,464,1.792,465,1.345,466,2.437,467,1.644,485,1.766,491,2.547,493,2.162,494,3.709,505,2.061,511,3.427,518,1.577,519,2.228,528,2.645,532,2.246,533,1.852,540,1.964,550,1.901,572,2.462,575,0.973,594,1.808,603,1.881,607,1.808,620,2.489,626,1.881,651,1.638,654,2.103,658,1.625,677,1.808,679,1.881,693,1.87,696,2.61,697,2.061,704,1.6,712,2.228,717,2.023,719,2.228,721,1.999,730,4.344,746,1.834,747,2.682,753,2.911,787,2.682,792,1.671,808,1.728,812,1.817,818,1.911,829,1.825,834,2.547,835,1.932,846,1.953,858,2.284,860,2.194,871,2.048,875,1.131,897,1.532,906,1.817,908,1.457,909,2.265,938,2.412,957,4.299,964,2.075,976,3.075,1007,2.117,1008,1.964,1022,2.246,1032,2.682,1043,2.366,1063,2.194,1141,2.578,1154,2.578,1158,2.682,1189,1.613,1194,3.192,1204,2.323,1237,2.103,1270,2.61,1273,2.489,1280,2.721,1281,2.682,1298,2.682,1308,2.61,1310,2.763,1312,4.299,1315,2.547,1344,2.462,1348,2.323,1352,2.763,1355,2.412,1393,4.944,1399,2.763,1400,2.763,1401,1.881,1453,2.211,1488,2.178,1490,2.721,1559,2.645,1561,2.578,1565,2.578,1579,3.108,1594,2.265,1611,2.412,1633,2.412,1643,3.389,1679,1.862,1703,2.911,1708,1.976,1731,2.389,1762,2.462,1775,2.178,1794,2.547,1808,2.645,1832,2.211,1856,2.578,1857,2.61,1879,2.857,1974,1.999,1989,2.517,2041,3.102,2055,2.437,2078,2.178,2081,2.437,2086,2.366,2127,2.437,2131,2.61,2170,2.721,2194,2.911,2248,2.303,2264,2.857,2473,6.266,2510,4.029,2549,2.721,2550,2.763,2564,2.303,2846,2.489,2898,3.192,2968,2.682,3009,2.808,3064,2.462,3102,2.808,3395,2.284,3536,2.857,3574,2.911,3626,2.547,3788,2.682,3887,2.808,4153,2.808,4266,2.547,4541,4.493,4609,2.578,4636,2.61,4777,2.763,4903,2.969,5226,2.969,5243,4.954,5431,3.035,5519,3.192,5520,3.192,5521,3.291,5522,3.291,5523,2.857,5524,2.763,5525,2.857,5526,3.291,5527,2.857,5528,3.035,5529,2.682,5530,3.291,5531,3.291,5532,2.857,5533,2.808,5534,3.035,5535,3.035,5536,2.808,5537,2.808,5538,3.035,5539,3.035,5540,2.857,5541,3.035,5542,3.291,5543,2.808,5544,4.605,5545,3.035,5546,3.291,5547,3.291,5548,2.969,5549,3.291,5550,2.808,5551,3.291,5552,3.035,5553,3.291,5554,3.108,5555,3.291,5556,2.857,5557,3.291,5558,2.808,5559,3.035,5560,3.035,5561,2.857,5562,3.035,5563,3.192,5564,3.291,5565,3.291,5566,2.763,5567,3.291,5568,2.969,5569,3.192,5570,3.291,5571,3.035,5572,3.192,5573,3.291,5574,2.808,5575,3.291,5576,3.291,5577,3.291,5578,2.857,5579,3.192,5580,3.035,5581,2.969,5582,3.291,5583,2.857,5584,3.291,5585,2.969,5586,3.035,5587,3.291,5588,3.291,5589,3.291,5590,3.291,5591,3.291,5592,3.291,5593,2.808,5594,3.291,5595,2.969,5596,3.291,5597,3.291,5598,3.035,5599,3.291,5600,3.291,5601,3.291,5602,3.035,5603,3.291,5604,3.291,5605,3.035,5606,3.291,5607,2.911,5608,3.291,5609,3.035,5610,2.969,5611,3.192,5612,4.954,5613,3.035,5614,3.035,5615,3.035,5616,2.763,5617,3.035,5618,3.291,5619,2.857,5620,3.035,5621,3.035,5622,2.911,5623,3.291,5624,5.806,5625,3.291,5626,3.035,5627,3.291,5628,3.035,5629,2.808,5630,3.291,5631,3.035,5632,3.035,5633,3.291,5634,3.291,5635,3.035,5636,3.035,5637,3.291,5638,3.291,5639,3.291,5640,3.035,5641,3.035,5642,3.291,5643,2.857,5644,4.954,5645,3.291,5646,2.969,5647,3.035,5648,3.035,5649,2.857,5650,2.857,5651,3.035,5652,3.035,5653,3.035,5654,2.808,5655,2.857,5656,3.035,5657,3.291,5658,2.857,5659,3.035,5660,3.291,5661,3.035,5662,3.291,5663,3.035,5664,3.291,5665,3.035,5666,3.035,5667,3.291,5668,3.192,5669,3.035,5670,3.035,5671,3.035,5672,3.035,5673,3.035,5674,3.035,5675,3.035,5676,3.035,5677,3.035,5678,3.035,5679,3.035,5680,3.035,5681,3.035,5682,3.035,5683,2.808,5684,3.291,5685,3.291,5686,3.035,5687,2.857,5688,3.035,5689,3.291,5690,3.035,5691,3.035,5692,3.192,5693,3.035,5694,2.682,5695,2.857,5696,3.035,5697,3.291,5698,3.035,5699,2.969,5700,3.035,5701,2.969,5702,3.035,5703,3.291,5704,3.108,5705,3.035,5706,3.035,5707,3.192,5708,3.035,5709,2.721,5710,3.035,5711,3.035,5712,2.969,5713,3.035]],["keywords/1431",[]],["title/1432",[5848,1021.147]],["content/1432",[2,1.27,19,4.677,43,4.57,44,7.854,66,3.842,89,2.629,113,4.775,167,10.063,168,3.514,223,4.844,224,2.513,230,5.894,251,6.052,263,5.343,343,4.531,351,10.063,370,10.478,372,5.371,415,9.348,417,9.802,426,3.558,428,6.441,434,8.737,440,7.86,464,3.057,465,6.73,483,8.935,490,3.404,493,6.506,608,7.12,682,4.852,698,6.326,741,9.491,974,6.991,1342,9.606,1442,6.814,1812,7.409,1973,7.259,2078,11.882,2125,7.259,2251,8.313,2608,6.991,3935,7.958,4266,7.663,5123,9.606,5431,13.026,5753,9.902,5848,7.188,6256,10.257,6257,10.257,6258,10.257,6259,10.257,6260,10.257,6261,10.257]],["keywords/1432",[]],["title/1433",[223,301.858,1368,911.566]],["content/1433",[]],["keywords/1433",[]],["title/1434",[750,1031.638,916,1276.224]],["content/1434",[13,1.641,15,2.966,19,1.709,25,2.104,34,8.921,43,1.947,49,1.908,75,4.328,103,5.146,113,2.806,136,2.863,139,6.862,181,7.17,196,4.618,206,3.068,209,16.156,212,7.774,262,5.146,263,2.277,269,5.225,296,2.916,297,10.94,356,4.212,374,5.531,434,3.723,511,3.552,522,4.714,544,3.795,546,2.927,552,3.82,559,5.053,612,6.019,654,3.845,682,2.949,693,1.938,834,4.658,872,4.369,964,7.647,1007,6.223,1078,5.053,1628,4.774,1707,3.954,1708,9.757,1930,4.658,1943,12.061,2086,12.772,2594,9.883,2633,8.921,2846,7.317,3315,6.866,4292,15.414,5550,5.136,6056,5.839,6427,6.866,6428,7.416,6429,19.852,6430,7.416,6431,7.416,6432,23.178,6433,7.416,6434,7.416,6435,7.416,6436,7.416,6437,20.025,6438,7.416,6439,7.416,6440,17.115,6441,7.416,6442,7.416,6443,7.416,6444,7.416,6445,7.416,6446,7.416,6447,7.416,6448,7.416,6449,7.416,6450,7.416,6451,7.416,6452,7.416,6453,7.416,6454,7.416,6455,7.416,6456,7.416,6457,7.416,6458,7.416,6459,7.416,6460,7.416,6461,7.416,6462,7.416,6463,7.416,6464,7.416,6465,7.416,6466,7.416,6467,7.416,6468,7.416]],["keywords/1434",[]],["title/1435",[570,756.644,1443,507.721,1554,727.292]],["content/1435",[2,1.419,37,9.784,68,6.566,87,5.663,89,2.937,187,11.459,196,7.288,212,12.27,214,11.609,216,5.734,219,6.166,220,5.783,223,5.337,251,4.066,258,2.72,262,10.028,291,5.162,293,7.613,307,6.333,312,5.833,325,6.529,333,8.891,524,11.459,559,15.825,569,7.068,605,6.719,616,3.476,682,5.421,733,9.604,770,9.982,792,7.751,897,8.139,964,11.022,1276,12.62,1303,9.604,1368,9.014,1594,7.613,1604,9.604,1624,7.165,1702,8.462,1843,8.462,2018,9.982,2487,9.604,6429,16.513,6469,12.62,6470,13.63]],["keywords/1435",[]],["title/1436",[421,633.815,569,593.262,1355,680.692]],["content/1436",[223,4.562,258,4.157,262,8.995,421,11.541,515,10.661,569,10.803,870,13.589,1355,14.699,1820,14.428,1843,12.933,2037,14.195]],["keywords/1436",[]],["title/1437",[103,493.984,870,746.272,1303,806.162]],["content/1437",[2,2.027,18,2.099,22,0.913,25,2.665,40,5.971,49,4.478,69,2.621,81,8.238,83,7.884,86,4.313,92,4.188,93,12.263,103,9.06,108,4.63,168,1.896,186,2.922,196,3.639,212,6.126,214,6.834,216,8.827,219,4.249,220,3.985,223,3.141,251,2.802,262,9.551,270,2.938,291,4.775,293,5.246,307,3.162,334,5.911,335,2.116,340,2.091,348,9.28,380,8.621,381,5.588,463,6.302,464,2.353,495,3.465,504,4.715,509,5.534,518,3.652,531,9.625,559,14.297,569,4.87,570,6.212,602,7.34,607,4.188,664,5.899,678,5.766,697,7.293,748,5.045,749,4.658,813,5.203,817,7.03,829,4.228,837,5.831,870,9.357,897,5.42,901,4.524,964,10.737,1303,6.618,1355,8.534,1368,6.212,1391,6.046,1486,7.395,1511,8.696,1535,3.652,1546,8.238,1598,12.611,1710,6.742,1745,6.302,1843,5.831,1977,7.395,2055,5.645,2126,8.238,2215,5.534,2455,6.302,2594,6.212,3192,7.2,3197,12.059,6239,7.623,6469,8.696,6471,9.392,6472,9.392,6473,9.392,6474,9.392,6475,16.114,6476,9.392,6477,9.392,6478,9.392,6479,9.392,6480,9.392,6481,9.392,6482,9.392,6483,19.48]],["keywords/1437",[]],["title/1438",[103,368.671,196,330.818,212,556.959,232,513.175,262,368.671]],["content/1438",[2,1.347,3,2.092,8,6.563,11,4.945,22,1.259,40,8.231,73,7.249,88,7.781,89,2.79,102,9.823,103,9.049,161,5.035,163,4.308,196,5.016,212,8.445,232,7.781,262,9.049,268,4.825,296,5.091,297,5.47,321,6.202,324,8.895,334,7.479,348,9.678,360,5.801,377,6.625,490,3.613,547,9.349,559,8.822,570,8.563,652,4.308,688,11.356,748,6.955,813,7.173,836,7.781,856,7.628,1007,10.942,1049,6.168,1211,7.628,1280,12.179,1326,7.292,1355,10.799,1392,8.967,1443,9.301,1535,5.035,1603,8.132,1621,7.863,1624,6.806,1810,8.038,1943,7.419,2198,10.885,2377,19.405,2422,7.948,2594,8.563,3126,10.885,4010,11.988,6429,9.926,6475,11.988,6484,11.988]],["keywords/1438",[]],["title/1439",[196,378.874,212,637.866,360,438.107,6485,822.099]],["content/1439",[2,1.453,6,4.183,18,2.026,22,1.357,24,4.953,36,3.486,43,2.38,59,4.003,69,2.529,71,3.931,73,3.135,75,5.289,103,9.811,115,5.201,144,6.637,146,4.668,161,3.524,163,3.015,175,4.942,186,2.82,196,6.595,209,5.447,212,11.103,214,6.649,221,4.55,235,4.668,262,8.255,263,2.782,270,2.835,273,5.994,291,3.83,293,5.062,297,3.829,303,3.879,316,3.55,326,5.392,334,3.734,348,9.076,360,9.771,369,4.764,387,4.39,389,4.798,422,2.79,429,5.626,467,5.66,490,2.529,559,15.482,570,9.231,579,4.12,609,6.637,616,2.311,739,5.692,744,6.505,792,3.734,805,6.386,813,5.021,823,4.003,831,6.762,836,5.447,856,5.339,901,4.366,920,4.764,963,7.619,964,11.627,974,5.193,1049,4.317,1078,11.598,1267,3.845,1290,5.289,1303,6.386,1326,5.104,1355,11.376,1393,4.668,1413,8.391,1443,6.194,1538,5.834,1554,5.761,1589,6.783,1624,4.764,1631,7.949,1943,5.193,2126,7.949,2131,5.834,2307,6.948,2476,6.386,2522,7.949,2594,5.994,3058,7.619,3212,8.391,6429,17.419,6485,17.358,6486,9.063,6487,9.063,6488,9.063,6489,9.063,6490,9.063,6491,9.063,6492,9.063]],["keywords/1439",[]],["title/1440",[15,212.515,178,581.805,258,170.393,291,234.301,1014,356.201]],["content/1440",[2,1.689,3,2.968,11,2.291,18,1.879,22,1.578,36,3.234,49,3.388,69,2.346,73,2.908,79,7.042,86,3.861,103,8.609,119,4.861,151,6.62,152,4.55,155,3.318,178,5.729,181,5.516,193,6.157,209,5.053,219,3.803,223,2.884,237,3.646,262,7.929,270,2.63,273,5.56,291,6.604,297,5.563,300,5.484,307,2.83,320,4.17,330,2.839,334,3.464,353,5.161,370,3.767,402,6.445,404,4.486,411,4.451,445,2.574,468,11.038,494,4.36,495,3.101,505,4.275,518,3.269,527,4.36,531,5.642,533,6.016,544,10.203,547,9.46,652,2.797,671,6.293,676,4.12,677,5.871,682,3.344,690,8.37,693,2.198,704,3.318,721,4.145,739,5.28,743,5.002,748,7.073,766,5.161,925,8.39,929,10.822,930,7.021,1014,10.039,1017,6.157,1049,4.005,1083,11.65,1204,4.818,1298,5.56,1486,6.62,1535,5.12,1594,4.696,1611,7.834,1616,9.562,1618,8.972,1622,4.302,1624,6.922,1707,4.483,1796,7.996,1943,7.545,2184,6.445,2594,5.56,2897,7.785,3111,7.785,5296,7.375,6493,8.407,6494,8.407,6495,8.407,6496,8.407,6497,8.407]],["keywords/1440",[]],["title/1441",[1368,911.566,2594,911.566]],["content/1441",[]],["keywords/1441",[]],["title/1442",[4292,1269.296]],["content/1442",[2,0.929,36,5.305,37,6.406,71,3.87,79,2.409,87,7.003,127,2.178,180,4.323,186,5.244,196,5.343,209,10.131,212,5.821,235,4.597,237,3.87,251,2.662,258,1.781,262,9.358,263,2.74,269,9.718,270,2.791,296,5.423,323,5.54,324,4.373,330,3.013,356,10.772,360,6.179,369,4.691,386,4.399,387,4.323,404,3.04,411,4.724,495,5.087,512,4.829,520,5.309,532,9.338,533,4.077,562,11.148,570,11.148,611,5.902,682,3.549,741,7.521,811,11.594,836,5.363,854,11.594,921,3.819,964,12.522,1007,7.2,1078,9.397,1237,7.152,1261,6.288,1298,5.902,1319,8.263,1320,8.263,1355,5.309,1397,7.242,1443,6.12,1707,10.932,1929,7.827,1930,5.605,1943,10.867,2131,5.745,2439,7.026,2582,6.679,2594,5.902,2846,8.467,3126,7.502,3197,14.171,3871,11.311,4292,19.473,4622,7.026,5550,6.18,6429,19.095,6485,11.594,6498,13.791,6499,8.924,6500,8.924,6501,8.924,6502,8.924,6503,8.263]],["keywords/1442",[]],["title/1443",[1943,993.194]],["content/1443",[13,3.659,34,16.023,36,4.372,39,6.831,42,5.385,49,2.924,75,9.651,79,5.262,89,2.449,103,4.907,136,6.384,186,3.536,209,14.267,219,5.141,223,2.489,262,9.822,263,3.489,269,13.736,291,3.119,296,4.469,349,9.651,356,12.921,399,2.322,414,7.627,495,6.1,522,7.225,530,6.633,532,6.296,607,5.068,654,5.894,704,4.486,741,6.198,821,13.021,1014,4.741,1155,5.637,1237,5.894,1298,7.517,1326,6.401,1443,5.044,1535,4.42,1623,7.056,1624,5.975,1707,10.395,1812,6.902,1842,13.993,1885,7.225,1929,9.969,1930,7.138,1931,10.524,1943,14.667,2190,13.421,2594,7.517,2846,6.977,3557,9.555,3871,11.097,4292,12.111,5550,11.453,6429,14.944,6504,11.365,6505,11.365,6506,11.365]],["keywords/1443",[]],["title/1444",[103,748.351]],["content/1444",[13,2.699,18,2.727,69,3.404,75,7.12,79,4.698,89,2.629,103,10.098,136,6.718,186,3.796,196,4.727,206,5.048,209,14.056,212,7.958,235,6.284,262,8.759,263,3.746,291,4.776,316,4.779,343,4.531,356,13.285,434,6.125,465,4.047,466,7.332,495,6.42,559,15.936,569,6.326,605,6.015,660,5.719,678,7.49,697,6.203,704,4.815,821,9.606,837,7.574,964,8.906,1237,6.326,1355,10.354,1366,9.131,1368,8.069,1443,5.414,1624,6.414,1640,11.296,1707,6.506,1885,7.756,2594,8.069,2633,9.131,3143,11.296,3197,10.257,3871,8.187,4266,7.663,4292,8.935,6056,9.606,6429,18.642,6484,11.296,6503,16.114,6507,17.403,6508,12.2,6509,12.2,6510,12.2,6511,12.2,6512,12.2]],["keywords/1444",[]],["title/1445",[372,425.406,2215,812.067]],["content/1445",[]],["keywords/1445",[]],["title/1446",[2,119.066,372,353.108,375,628.788]],["content/1446",[1,3.864,2,1.785,3,3.903,11,5.97,22,1.667,47,7.757,147,9.211,222,3.832,223,5.289,237,7.437,261,6.368,268,6.39,354,4.231,355,4.412,372,8.301,489,8.081,556,9.546,599,9.461,603,7.954,761,9.577,1066,10.769,6513,17.147]],["keywords/1446",[]],["title/1447",[16,165.308,251,341.318,258,228.31]],["content/1447",[2,1.934,8,4.843,16,2.685,18,2.994,36,5.152,175,7.305,180,6.489,216,8.978,222,3.386,223,4.674,224,1.522,237,8.061,246,7.481,251,6.367,258,3.709,270,4.19,277,2.824,290,5.758,297,5.659,307,4.509,324,6.565,330,4.523,333,8.737,335,3.018,340,2.981,345,5.809,352,3.867,353,8.223,372,7.115,377,10.921,380,8.05,381,7.969,421,7.421,434,6.725,490,3.737,516,7.481,518,7.227,532,7.421,627,3.408,644,5.347,704,5.287,736,7.091,895,4.017,1033,8.413,1091,7.362,1133,8.281,1210,6.346,1326,7.544,1709,7.195,2025,7.676,3038,11.749,6514,13.394,6515,13.394]],["keywords/1447",[]],["title/1448",[224,129.964,291,313.941,557,503.014]],["content/1448",[3,3.83,7,6.656,16,1.634,18,2.528,22,1.1,36,4.35,40,7.19,49,2.91,69,5.959,70,4.55,73,3.912,79,3.053,107,5.905,113,3.879,136,4.366,152,6.121,161,4.398,195,2.663,220,4.799,222,3.602,223,2.477,224,2.848,226,2.549,229,4.738,230,3.83,251,3.374,261,4.2,270,3.538,275,6.943,290,4.862,291,6.23,297,4.778,340,3.668,345,4.905,352,3.265,370,7.383,372,7.007,385,3.709,397,2.389,398,8.465,404,3.853,427,4.103,428,4.186,435,5.75,465,5.467,658,4.533,679,5.247,704,4.464,792,4.66,812,5.067,840,8.283,897,4.274,1007,5.905,1021,5.33,1022,6.266,1091,6.216,1643,7.808,1768,6.481,1811,8.283,1942,11.829,2608,6.481,3667,10.472,4530,10.472,5848,6.664,6516,11.31,6517,11.31,6518,11.31,6519,11.31,6520,11.31,6521,11.31]],["keywords/1448",[]],["title/1449",[113,269.307,251,341.318,2215,674.055]],["content/1449",[3,3.604,22,1.416,54,8.276,59,6.435,66,4.346,69,6.221,113,5.871,152,7.885,168,2.942,195,3.055,222,2.312,223,4.311,224,2.236,241,6.053,251,7.124,290,6.263,291,3.998,329,7.655,347,7.095,372,4.497,374,5.392,377,7.455,397,5.045,401,5.862,410,8.756,413,6.724,457,6.527,509,8.584,515,7.455,678,8.944,744,10.458,772,11.824,778,11.169,823,6.435,1121,6.941,1311,11.471,1709,7.826,1793,10.09,6522,14.569]],["keywords/1449",[]],["title/1450",[223,250.557,714,446.534,2607,687.605]],["content/1450",[]],["keywords/1450",[]],["title/1451",[22,83.013,195,116.983,262,368.671,413,394.064,714,333.258]],["content/1451",[2,1.759,3,2.731,16,1.692,22,1.138,35,13.112,43,3.074,69,4.715,79,3.161,89,2.523,186,3.643,191,6.898,194,7.638,195,3.154,207,5.011,223,5.252,224,1.33,251,3.493,262,10.928,277,3.562,279,5.557,283,4.394,290,7.264,291,4.637,298,5.953,340,2.606,343,6.276,360,5.246,401,6.798,404,3.989,413,9.15,428,4.334,445,6.647,468,7.037,492,8.405,495,7.313,518,7.71,533,5.349,659,7.857,682,4.657,686,8.575,714,6.595,791,6.898,811,9.843,849,4.378,960,11.339,1121,5.578,1368,7.744,1467,8.575,1470,8.764,1624,6.155,1653,14.206,1702,7.269,1748,5.772,1943,6.71,2607,7.037,2608,11.361,2810,10.841,6523,11.709]],["keywords/1451",[]],["title/1452",[16,165.308,714,446.534,2607,687.605]],["content/1452",[1,1.619,8,4.794,16,2.283,22,1.289,30,1.303,31,1.857,43,6.477,46,3.575,71,1.768,77,2.475,82,5.064,83,2.24,89,2.504,97,1.817,107,5.032,113,2.269,119,2.357,127,0.995,136,1.573,137,3.805,162,1.686,178,2.777,180,4.669,190,9.15,192,7.256,195,2.528,206,1.686,216,3.023,220,1.729,223,3.204,226,3.56,229,1.707,230,1.38,237,1.768,241,1.693,251,3.955,262,7.256,265,4.194,270,4.942,282,0.775,283,1.529,291,1.118,295,3.752,296,3.79,297,1.722,316,1.597,323,4.462,330,4.476,348,5.14,360,1.826,367,7.486,386,4.752,409,2.206,411,2.158,413,1.881,426,3.866,428,1.509,445,2.951,464,3.958,490,2.689,518,2.795,532,2.258,533,1.862,546,1.609,603,1.891,660,1.911,676,1.998,681,5.032,682,3.833,686,15.841,689,1.146,714,10.126,721,3.543,736,3.805,813,2.258,833,2.258,858,2.296,860,5.216,875,1.137,964,2.086,1049,6.316,1091,9.236,1113,2.034,1121,4.592,1196,2.336,1204,2.336,1212,2.223,1396,9.418,1507,2.872,1509,7.822,1551,2.735,1567,3.125,1616,6.847,1624,2.143,1653,3.427,1716,1.303,1798,2.591,1802,11.57,1803,2.143,1832,8.616,1835,3.051,1875,1.372,1973,4.276,1974,11.793,2120,2.659,2203,10.193,2452,7.059,2606,4.977,2607,8.793,2846,2.502,3126,3.427,4251,3.427,4292,7.059,4559,9.4,4563,6.152,4592,4.412,4606,3.051,4608,2.985,4713,7.214,5221,8.924,5718,13.672,6044,3.427,6395,3.427,6524,4.076,6525,4.076,6526,4.076,6527,4.076,6528,7.186,6529,4.076,6530,11.621,6531,7.186,6532,4.076,6533,4.076,6534,4.076,6535,4.076,6536,7.186,6537,7.186,6538,9.638,6539,4.076,6540,4.076,6541,4.076,6542,4.076,6543,4.076,6544,4.076,6545,4.076,6546,4.076,6547,4.076,6548,4.076,6549,4.076,6550,4.076,6551,4.076,6552,4.076,6553,4.076,6554,4.076,6555,4.076,6556,4.076,6557,4.076,6558,4.076,6559,4.076,6560,4.076,6561,4.076,6562,4.076,6563,7.186,6564,4.076,6565,4.076]],["keywords/1452",[]],["title/1453",[43,361.914,714,537.961]],["content/1453",[1,2.253,2,1.04,4,5.331,15,2.488,16,2.173,22,0.972,41,4.958,43,6.352,46,8.769,49,2.572,78,8.202,87,4.153,136,3.859,162,4.136,197,5.679,209,6.009,215,6.612,216,4.206,217,5.22,220,6.381,223,3.959,224,1.136,226,3.389,250,5.584,258,1.995,262,10.151,270,3.127,296,5.914,307,6.086,316,3.917,345,4.336,360,4.479,397,4.248,413,4.614,421,5.539,423,5.781,430,5.631,464,3.768,469,3.688,485,4.356,509,5.89,518,3.888,533,6.871,579,4.545,659,6.709,676,8.861,712,5.495,714,8.417,773,7.872,856,5.89,858,5.631,998,6.009,1086,7.045,1267,4.242,1455,6.009,1552,15.134,1561,6.356,1707,5.331,1710,7.177,1723,6.812,1748,4.929,1832,5.452,2607,6.009,2846,6.138,3153,9.257,3871,10.092,4292,15.794,5574,6.924,5718,12.521,6395,8.405,6566,15.04,6567,15.04,6568,9.998,6569,15.04,6570,9.998,6571,9.998,6572,9.998,6573,9.998,6574,9.998,6575,9.998,6576,9.998,6577,9.998,6578,9.998,6579,9.998]],["keywords/1453",[]],["title/1454",[2130,1180.983]],["content/1454",[]],["keywords/1454",[]],["title/1455",[195,156.745,378,806.162,1924,1003.508]],["content/1455",[16,2.173,41,11.238,43,3.949,69,4.197,71,6.523,79,4.06,112,5.033,180,7.286,185,7.911,195,2.061,198,6.871,213,9.233,216,6.327,222,2.386,223,3.294,226,3.389,340,3.348,348,8.02,359,8.645,378,10.598,445,6.158,530,8.777,575,3.608,640,11.257,660,7.05,897,5.683,926,7.799,1113,7.505,1759,11.53,1765,9.134,1842,10.796,1859,11.233,1885,9.561,1924,13.192,2018,11.015,2057,11.842,2062,11.257,2130,13.704,2184,17.371,3122,10.796,3871,10.092,4027,13.192,6580,15.04,6581,15.04,6582,15.04]],["keywords/1455",[]],["title/1456",[378,971.224,1754,1118.642]],["content/1456",[127,3.98,139,9.74,160,7.643,168,3.292,208,6.746,265,9.516,330,5.505,368,5.935,378,14.947,408,6.948,414,10.941,490,4.55,575,3.912,681,8.513,859,14.302,908,7.621,1488,13.413,1754,13.233,1760,18.075,1859,9.107,1972,12.204,1974,8.038,2018,11.941,2130,11.11,2184,12.5,3401,11.11,3871,10.941,6583,16.305,6584,21.212,6585,21.212,6586,16.305,6587,21.212]],["keywords/1456",[]],["title/1457",[282,329.633]],["content/1457",[127,4.909,130,9.054,282,3.825,378,14.172,426,7.054,1716,6.431,1859,14.491,1875,6.771,2018,14.729,2130,16.483,2184,15.418,6588,20.112]],["keywords/1457",[]],["title/1458",[547,709.973,743,820.063]],["content/1458",[]],["keywords/1458",[]],["title/1459",[547,709.973,1538,887.311]],["content/1459",[2,2.033,3,2.552,13,3.493,15,6.377,22,0.783,25,5.091,36,3.099,43,3.344,47,3.645,64,5.907,65,5.789,67,3.839,71,9.433,78,4.394,79,6.916,89,2.744,115,3.003,116,4.703,119,4.659,127,1.967,152,8.545,155,3.18,163,2.681,175,4.394,191,4.748,220,6.699,222,2.021,223,1.765,237,3.495,262,5.498,268,3.003,270,4.939,273,5.329,293,7.112,298,4.097,303,3.449,307,2.713,340,1.794,345,3.495,360,5.705,369,4.236,455,4.236,458,3.559,468,9.489,481,4.947,520,4.794,527,4.178,540,3.904,544,4.123,547,9.241,556,5.548,569,6.603,570,5.329,608,4.703,616,2.055,676,6.241,743,7.577,792,3.32,829,3.628,847,3.024,858,4.538,918,5.491,929,9.18,930,9.566,966,5.256,973,5.407,1018,8.677,1121,3.839,1187,5.122,1267,5.403,1326,7.172,1443,5.651,1509,12.814,1538,10.164,1554,10.037,1616,7.503,1623,5.003,1634,8.545,1659,8.973,1702,5.003,1708,3.926,1748,3.973,1810,5.003,1923,5.187,2086,4.703,2219,6.54,2296,6.774,2862,6.774,3002,10.706,3003,11.17,3341,7.068,3545,7.461,4609,5.122,4888,7.068,6485,6.774,6589,8.058,6590,8.058,6591,8.058,6592,8.058,6593,8.058]],["keywords/1459",[]],["title/1460",[2,119.066,160,536.304,227,367.842]],["content/1460",[]],["keywords/1460",[]],["title/1461",[607,772.804]],["content/1461",[2,0.932,3,3.319,11,4.087,13,1.465,14,2.298,15,6.405,16,1.294,18,0.831,19,0.857,22,1.719,24,3.583,25,1.055,42,3.138,47,1.682,49,4.119,66,0.821,75,5.228,80,2.85,83,4.923,89,1.427,97,1.658,100,2.459,113,2.109,115,3.338,120,4.872,146,1.915,149,2.927,160,5.848,161,1.446,162,1.538,163,1.237,186,1.157,195,1.227,198,1.698,201,12.609,207,1.591,220,2.81,221,3.325,223,1.962,225,3.191,227,6.864,241,4.517,244,1.707,250,3.7,255,8.52,258,2.17,261,2.46,263,1.141,268,2.468,270,5.008,277,0.784,283,4.681,290,1.598,298,3.368,300,2.425,302,8.139,303,5.92,307,3.016,312,2.835,320,1.844,325,1.781,329,2.576,330,1.255,331,2.575,340,0.828,343,1.381,345,1.612,354,2.683,357,5.848,366,2.393,386,1.833,396,1.544,399,0.759,404,1.267,421,3.67,428,2.452,429,2.308,430,2.094,434,1.866,445,2.028,469,4.011,489,4.222,490,2.499,491,2.335,494,1.928,515,1.902,518,1.446,526,1.88,532,2.06,542,1.997,551,2.686,557,1.635,574,3.011,575,3.598,579,1.69,597,2.13,599,1.605,601,5.787,603,4.155,604,6.426,606,5.228,607,9.962,610,9.109,616,0.948,619,2.06,625,6.701,627,2.767,632,4.013,658,1.49,664,2.335,677,1.658,682,1.478,692,7.998,727,2.723,728,2.076,761,2.076,788,2.212,792,1.532,808,1.584,823,1.642,836,2.234,858,5.045,875,1.037,897,3.385,901,4.315,902,1.635,921,1.591,962,3.442,1026,1.968,1049,1.771,1050,3.753,1078,2.533,1085,2.62,1090,4.264,1108,2.783,1123,3.261,1126,1.278,1131,3.017,1187,2.363,1234,2.533,1267,1.577,1269,2.85,1270,4.264,1278,13.926,1281,2.459,1315,2.335,1336,5.33,1455,3.981,1461,3.125,1466,2.723,1539,2.723,1591,2.927,1626,2.575,1628,2.393,1643,1.761,1761,7.857,1768,2.13,1840,4.755,1950,3.261,1964,2.62,1972,2.783,2100,4.268,2109,8.562,2110,3.125,2177,2.669,2214,2.783,2262,4.587,2271,2.669,3051,5.569,3065,3.017,3401,2.533,3530,2.575,4143,3.261,4634,2.425,6594,3.718,6595,3.718,6596,3.718,6597,3.718,6598,3.718,6599,3.718,6600,3.718,6601,10.874,6602,12.475,6603,6.133,6604,3.718,6605,3.718,6606,3.718,6607,8.958,6608,8.958,6609,8.958,6610,3.718,6611,3.718,6612,3.718,6613,3.718,6614,3.718,6615,10.874,6616,8.958,6617,3.718,6618,6.624,6619,3.718,6620,6.624,6621,3.718,6622,3.718,6623,3.718,6624,3.718,6625,3.718,6626,3.718,6627,6.624,6628,3.718,6629,3.718,6630,3.718,6631,3.718,6632,6.624,6633,3.718,6634,3.718]],["keywords/1461",[]],["title/1462",[199,812.067,622,714.732]],["content/1462",[2,2.411,3,3.93,15,3.373,68,6.528,89,2.92,113,5.92,115,5.05,155,7.395,160,8.782,162,5.606,175,7.39,195,1.857,199,11.038,204,12.547,227,7.448,238,7.507,263,4.16,270,4.239,284,4.074,298,6.89,307,4.562,320,6.72,343,5.033,374,5.015,441,10.669,467,7.597,469,6.911,518,5.269,607,8.354,622,9.715,632,9.62,662,10.142,919,9.233,935,10.998,1204,7.765,1278,15.111,1580,10.669,1983,8.962,2110,11.392,6427,12.547,6603,17.347,6635,13.551,6636,13.551,6637,13.551]],["keywords/1462",[]],["title/1463",[1017,1009.408,6638,1158.748]],["content/1463",[3,3.177,11,4.554,13,5.445,15,6.925,18,2.578,19,3.853,20,3.838,31,2.981,79,4.512,87,6.944,113,2.715,151,9.082,152,6.242,180,8.098,213,7.081,230,3.906,282,2.194,426,3.364,457,5.168,464,2.89,489,5.436,544,11.031,661,6.064,682,6.648,743,11.696,746,5.218,748,6.196,749,5.721,1007,6.022,1017,15.787,1417,18.202,1603,10.498,1683,8.633,2305,13.614,2419,8.128,3136,10.68,6638,16.527,6639,19.658,6640,24.611,6641,21.556,6642,8.843,6643,10.68,6644,19.658]],["keywords/1463",[]],["title/1464",[443,1011.479]],["content/1464",[3,3.082,11,4.381,13,5.356,15,6.703,18,2.445,19,4.846,20,3.639,43,2.872,79,4.34,113,2.575,200,8.877,231,4.367,282,2.08,283,6.034,394,4.9,404,3.726,414,7.34,426,3.19,443,13.071,464,5.266,468,6.574,489,5.155,512,5.92,544,8.228,547,9.822,608,6.383,661,5.75,682,4.35,743,9.567,746,4.948,749,5.425,788,6.508,816,6.06,822,9.594,835,10.014,846,10.126,925,7.346,929,8.228,930,8.574,1018,12.992,1175,6.574,1310,7.453,1565,6.953,1634,14.105,1708,7.835,1876,6.79,2086,9.384,2305,13.205,3017,8.877,6642,8.385,6645,19.067,6646,10.128,6647,10.128,6648,14.889]],["keywords/1464",[]],["title/1465",[1565,876.205,1904,1009.408]],["content/1465",[3,3.116,4,4.181,8,2.835,11,4.814,13,5.216,15,6.995,18,1.752,19,3.575,20,2.609,22,1.212,42,3.715,79,5.541,106,2.854,113,1.846,155,3.095,180,3.798,181,3.285,206,3.244,253,6.011,270,2.453,282,2.949,298,3.986,332,4.924,334,3.231,402,6.011,426,2.286,457,3.513,464,5.595,468,4.712,489,3.695,544,10.504,547,6.419,551,3.179,556,3.416,632,3.513,661,6.551,676,3.843,743,12.212,746,3.547,748,4.212,749,6.18,909,12.473,1017,5.742,1114,6.174,1363,4.534,1365,6.011,1565,9.858,1589,5.869,1603,4.924,1611,13.287,1614,4.309,1856,4.984,1881,13.602,1884,10.93,1904,5.742,1952,19.531,2007,10.476,2277,6.592,2305,14.215,2308,7.26,2582,5.869,2790,6.877,3002,10.476,3611,6.363,4266,4.924,5947,6.877,6380,7.26,6638,6.592,6642,6.011,6649,7.841,6650,17.85,6651,7.841,6652,7.26,6653,7.26,6654,12.461]],["keywords/1465",[]],["title/1466",[1611,1031.201]],["content/1466",[3,3.387,11,3.528,13,5.632,15,6.891,18,2.894,19,5.236,20,4.308,43,3.4,52,5.25,70,5.209,79,4.899,113,3.048,231,5.169,282,2.462,283,4.858,396,7.54,426,3.775,464,5.992,489,6.102,544,10.724,551,7.36,608,7.556,661,6.806,743,10.799,746,5.857,749,6.421,788,7.703,1611,14.23,1614,7.116,2305,14.514,3017,10.508,5947,11.356,6642,9.926,6650,19.405,6652,11.988,6653,11.988,6655,12.947,6656,12.947]],["keywords/1466",[]],["title/1467",[746,784.059]],["content/1467",[3,3.007,11,2.346,13,5.622,15,6.966,18,1.924,19,4.481,20,5.483,22,0.488,25,1.424,43,1.317,49,2.215,71,3.734,79,4.759,89,1.081,106,1.826,113,2.027,166,2.985,180,4.171,200,4.071,231,2.003,282,2.551,283,1.882,293,2.802,297,2.119,334,2.067,373,3.601,394,2.247,396,2.084,404,1.709,414,3.366,426,2.511,443,2.928,449,3.474,457,5.067,464,5.211,489,4.057,512,2.715,534,4.4,544,10.318,546,1.98,547,2.584,551,3.491,563,2.901,608,2.928,661,5.946,664,3.151,682,1.995,729,4.4,743,10.489,745,4.071,746,10.96,749,5.609,788,2.985,792,6.79,835,4.102,841,2.656,846,8.962,858,2.825,925,9.758,929,9.52,930,4.591,1018,11.228,1038,3.189,1175,10.595,1310,3.418,1422,13.374,1423,10.886,1428,4.217,1569,3.474,1594,2.802,1611,6.729,1634,5.777,1678,4.071,1708,2.444,1745,3.366,1839,10.283,1857,3.229,1876,3.114,1909,4.217,1923,3.229,1938,10.886,2086,2.928,2305,13.463,2708,4.071,3002,9.508,3003,7.552,3004,7.972,3017,4.071,5163,4.4,5842,4.645,6638,4.217,6642,8.671,6646,4.645,6647,4.645,6657,18.603,6658,5.017,6659,18.603,6660,17.629]],["keywords/1467",[]],["title/1468",[196,443.265,197,649.882,283,429.303]],["content/1468",[]],["keywords/1468",[]],["title/1469",[196,443.265,197,649.882,627,291.095]],["content/1469",[2,2.188,146,10.828,196,8.144,197,11.941,223,4.604,258,4.195,354,5.187,355,5.409,627,5.349,641,9.2,642,11.129]],["keywords/1469",[]],["title/1470",[2,88.862,196,330.818,197,485.021,354,210.671,355,219.688]],["content/1470",[2,1.601,3,3.704,19,2.376,22,1.002,39,6.195,49,3.959,69,2.876,113,2.426,152,13.212,186,6.798,195,2.523,196,9.458,197,10.46,216,6.474,217,5.382,222,3.467,223,4.785,228,2.862,259,10.657,261,5.715,282,2.927,296,4.053,307,3.47,324,5.052,345,4.471,354,3.797,355,3.959,359,4.431,375,5.665,377,5.275,381,6.133,396,4.282,445,3.156,465,3.42,491,6.474,493,8.206,527,9.548,530,6.016,555,8.666,556,8.897,599,4.451,627,2.623,662,7.715,676,5.052,677,4.596,721,7.586,764,7.399,897,7.716,982,6.474,1024,9.906,1131,8.366,1443,4.574,1659,10.843,1799,13.505,1837,9.188,1958,7.549,2057,8.116,4084,7.399,6395,8.666,6661,10.308,6662,10.308,6663,10.308,6664,10.308,6665,10.308,6666,10.308,6667,10.308]],["keywords/1470",[]],["title/1471",[196,330.818,197,485.021,627,217.25,641,373.691,642,452.055]],["content/1471",[1,3.687,2,1.166,8,4.05,17,7.516,18,2.503,25,5.486,30,3.581,31,2.895,36,4.308,43,5.583,89,2.414,107,5.848,115,6.098,186,5.091,196,9.45,197,6.363,216,8.944,218,6.877,244,5.143,245,9.417,259,17.948,261,4.16,262,7.065,266,5.336,270,5.118,330,5.525,550,5.251,599,10.796,605,5.522,627,2.85,641,7.161,642,8.663,676,5.49,678,6.877,682,4.455,704,4.421,727,8.203,741,6.108,816,6.205,849,4.189,872,6.599,898,9.091,908,4.024,912,8.041,964,8.373,1007,5.848,1028,14.157,1030,8.041,1031,9.091,1033,7.035,1155,5.555,1569,7.757,1723,7.632,1832,6.108,2576,12.544,2610,10.372,2633,14.469,2912,10.372,2913,10.372,3167,10.372,5296,9.825,6668,16.362,6669,11.201]],["keywords/1471",[]],["title/1472",[196,378.874,223,214.16,259,677.233,627,248.809]],["content/1472",[3,3.408,15,3.259,22,1.273,64,10.589,108,6.455,112,4.382,113,3.082,146,6.744,166,7.79,185,4.571,196,10.094,197,13.642,203,12.123,208,5.417,216,8.87,223,5.259,224,2.078,258,2.613,259,12.669,277,2.76,283,4.913,290,5.628,307,4.408,323,8.128,362,7.952,385,4.294,397,2.766,399,2.675,488,12.465,491,8.223,503,13.242,509,7.714,600,8.921,643,8.429,707,4.515,842,4.461,908,4.704,1124,7.196,1442,7.313,1916,6.744,5905,12.123,6056,14.403,6670,13.093,6671,18.293,6672,18.293,6673,13.093,6674,13.093,6675,13.093]],["keywords/1472",[]],["title/1473",[197,782.945,229,577.406]],["content/1473",[3,2.771,19,3.953,49,4.412,79,4.629,127,4.185,195,2.349,197,13.717,207,9.378,216,7.213,222,2.721,223,3.755,229,7.183,259,11.875,262,9.461,263,7.414,265,10.007,266,8.169,267,11.038,268,6.39,282,3.261,325,8.214,348,9.144,363,8.832,639,10.527,771,7.371,784,11.875,1748,8.453,2617,15.877,6676,17.147,6677,17.147]],["keywords/1473",[]],["title/1474",[207,589.901,217,719.607]],["content/1474",[2,1.318,13,2.802,14,6.201,19,4.774,20,4.214,25,3.594,49,3.259,60,7.074,74,9.275,77,10.853,79,3.419,113,4.207,115,4.72,130,5.702,136,7.994,195,2.837,206,5.24,207,7.649,216,9.979,217,13.208,227,5.746,259,8.771,262,5.468,282,2.409,320,6.281,426,6.559,467,5.136,468,7.612,485,5.518,495,6.592,558,14.504,579,5.758,607,5.647,667,12.177,813,7.016,816,7.016,1598,10.741,1716,4.049,1977,9.972,4713,13.376,6678,17.871,6679,17.871,6680,12.665,6681,12.665,6682,12.665,6683,12.665,6684,12.665,6685,12.665,6686,12.665,6687,12.665,6688,12.665,6689,12.665,6690,12.665]],["keywords/1474",[]],["title/1475",[207,589.901,262,595.127]],["content/1475",[1,1.98,2,0.915,3,2.203,13,1.944,19,2.026,20,8.107,22,1.623,36,3.381,43,3.579,52,7.628,66,1.94,69,2.452,79,6.269,98,5.456,106,3.199,146,4.527,160,6.389,191,5.178,195,2.287,197,4.992,206,3.636,207,5.833,216,5.734,222,2.985,223,4.717,259,14.099,261,5.062,262,8.79,263,2.698,265,10.978,266,8.961,268,8.886,277,1.853,282,1.672,291,4.581,316,3.443,330,4.602,413,4.056,426,2.563,438,5.456,455,4.62,468,5.282,493,4.687,494,4.557,495,5.028,518,3.418,527,7.068,544,4.497,547,4.527,551,8.255,555,7.389,564,9.014,666,6.166,697,4.468,792,3.621,854,11.458,860,4.756,956,7.881,964,4.497,1659,14.345,1716,2.81,1748,6.719,1799,5.812,1810,5.456,2910,18.85,6691,8.789,6692,8.789,6693,8.789,6694,8.789,6695,8.789,6696,16.695,6697,8.789,6698,8.789,6699,8.789,6700,8.789,6701,8.789,6702,8.789,6703,8.789,6704,8.789,6705,8.789,6706,8.789,6707,8.789]],["keywords/1475",[]],["title/1476",[995,820.063,6708,1276.224]],["content/1476",[3,2.992,11,2.834,13,5.878,15,6.806,18,2.324,19,4.728,20,3.46,22,1.011,25,1.781,33,3.772,43,1.648,71,2.722,79,4.997,89,1.352,106,2.284,113,2.448,151,8.189,162,2.596,180,5.038,181,4.357,208,2.596,213,3.852,270,1.963,282,1.978,426,3.883,457,2.811,464,3.881,466,3.772,489,4.901,544,10.888,551,4.217,554,7.086,578,3.371,661,5.467,704,2.477,743,11.663,745,5.093,746,6.025,749,5.158,846,3.023,858,3.534,925,6.084,929,6.815,930,5.546,995,11.013,1018,7.086,1038,3.989,1039,4.422,1121,2.99,1175,3.772,1258,4.697,1308,4.04,1363,6.013,1364,4.04,1422,16.646,1423,8.44,1429,5.81,1490,6.979,1569,4.346,1611,3.734,1614,5.716,1616,7.846,1634,6.979,1708,3.058,1738,5.81,1938,10.808,2086,3.662,2102,5.504,2305,14.205,3451,5.504,3574,17.956,4614,7.973,5646,16.84,6642,7.973,6643,5.81,6648,5.81,6708,17.14,6709,18.511,6710,10.4,6711,10.4,6712,6.275,6713,6.275,6714,6.275]],["keywords/1476",[]],["title/1477",[226,390.556]],["content/1477",[2,0.658,3,2.788,7,2.555,11,3.283,13,5.392,15,7.056,18,2.34,19,4.535,20,5.973,22,0.836,25,2.439,42,1.673,49,2.211,67,1.682,70,1.421,71,2.744,79,5.017,89,0.761,106,1.285,113,1.489,115,3.203,127,1.544,155,1.394,162,1.461,220,1.498,226,4.885,282,2.547,291,2.358,313,2.586,343,1.312,360,5.398,373,2.535,385,2.818,387,3.065,400,2.684,404,1.203,426,2.506,435,6.81,457,4.691,464,5.347,489,2.981,490,0.985,527,3.281,544,9.51,547,3.259,551,2.565,556,4.561,659,2.37,660,2.966,661,5.504,664,2.218,682,4.792,704,2.497,729,3.097,743,10.681,745,2.866,746,5.45,749,5.193,788,3.764,792,1.455,816,1.956,837,3.928,846,8.953,849,3.214,858,1.989,925,10.306,929,5.358,930,3.374,974,2.024,1017,4.633,1018,4.311,1038,2.245,1175,6.293,1187,2.245,1204,2.024,1267,1.498,1327,5.549,1363,8.416,1422,15.083,1423,8.497,1540,5.549,1548,3.097,1594,1.972,1603,3.973,1611,7.168,1634,2.37,1678,2.866,1685,7.538,1708,1.721,1745,2.37,1762,2.145,1839,8.027,1856,4.022,1905,2.488,1938,8.497,1939,13.655,2305,13.625,2708,2.866,3058,5.319,4888,5.549,5163,7.538,5544,6.74,6642,4.85,6715,6.326,6716,6.326,6717,3.531,6718,17.248,6719,18.585,6720,10.47,6721,10.47,6722,6.326,6723,10.47,6724,6.326]],["keywords/1477",[]],["title/1478",[43,361.914,1599,1158.748]],["content/1478",[]],["keywords/1478",[]],["title/1479",[16,165.308,43,300.406,1599,961.816]],["content/1479",[1,2.967,2,1.37,3,3.418,16,1.903,22,1.28,25,3.737,30,4.21,36,7.064,43,5.553,66,2.907,69,5.901,180,6.379,185,6.412,195,2.516,198,6.016,223,5.27,226,2.967,263,4.042,277,2.776,283,4.941,290,5.66,316,5.158,348,7.021,352,3.802,354,3.249,355,3.388,359,5.66,374,4.873,382,7.126,396,5.47,397,2.781,428,7.827,464,5.298,465,7.591,569,6.828,644,5.257,697,6.695,792,8.714,901,6.343,1349,15.439,1353,14.905,1599,15.439,1765,7.997,1795,7.758,1808,8.589,2241,11.069,3030,12.192,3053,8.174,3054,11.069,3128,9.855,6725,13.167,6726,13.167]],["keywords/1479",[]],["title/1480",[1,390.556]],["content/1480",[1,2.083,2,1.793,3,3.122,15,6.812,16,2.047,18,4.318,19,3.266,20,4.714,22,0.899,24,3.67,30,4.53,31,3.662,36,3.555,43,5.072,79,6.372,113,4.056,123,6.573,127,2.256,186,6.01,223,4.231,224,1.957,237,6.145,258,3.439,261,5.262,277,4.073,291,3.888,312,6.064,377,7.251,389,4.893,399,2.895,413,4.266,426,2.695,427,3.353,428,7.15,464,3.55,465,3.066,490,3.954,495,8.108,569,4.793,618,6.635,685,9.508,693,2.416,706,9.655,707,5.942,717,9.639,792,3.809,840,6.769,841,4.893,842,3.149,844,7.77,848,7.77,897,3.493,926,7.348,1124,5.08,1348,5.296,1349,14.486,1350,9.655,1351,8.107,1352,6.298,1353,11.5,1354,8.107,1646,7.501,3308,6.769,6727,9.243]],["keywords/1480",[]],["title/1481",[282,329.633]],["content/1481",[36,9.257,43,7.048,195,2.732,263,7.388,282,3.792,428,9.567,1353,16.183,1716,6.375,1875,6.713,6728,19.94]],["keywords/1481",[]]],"invertedIndex":[["",{"_index":15,"title":{"552":{"position":[[12,1]]},"641":{"position":[[8,1],[20,1]]},"984":{"position":[[11,1]]},"999":{"position":[[11,1]]},"1097":{"position":[[28,1]]},"1291":{"position":[[5,1]]},"1305":{"position":[[5,1]]},"1328":{"position":[[5,1]]},"1384":{"position":[[24,1]]},"1440":{"position":[[20,1]]}},"content":{"1":{"position":[[196,1],[235,1],[272,1],[313,1],[356,1],[408,1],[477,1],[526,1],[583,1],[659,1],[679,1],[718,1],[790,1],[812,1]]},"4":{"position":[[725,1]]},"7":{"position":[[775,2]]},"14":{"position":[[478,1],[494,1],[501,1],[535,1]]},"16":{"position":[[987,4]]},"17":{"position":[[224,1],[287,1],[342,1],[411,1],[471,1],[517,1],[579,1],[638,1],[706,1],[777,1],[835,1],[903,1],[964,1]]},"25":{"position":[[66,1]]},"31":{"position":[[147,1]]},"33":{"position":[[215,1]]},"41":{"position":[[289,1]]},"49":{"position":[[477,1],[496,1]]},"54":{"position":[[319,1],[361,1]]},"56":{"position":[[77,1],[124,1],[159,1],[212,1],[294,1],[366,1],[454,1],[530,1],[613,1],[695,1],[780,1],[860,1],[922,1],[986,1],[1021,1],[1093,1],[1184,1],[1245,1],[1329,1],[1399,1],[1465,1],[1501,1],[1542,1],[1608,1],[1667,1],[1735,1],[1801,1],[1865,1],[1891,1],[1954,1],[2151,1],[2219,1],[2293,1],[2358,1],[2360,1],[2439,1],[2512,1],[2591,1],[2625,1],[2627,1]]},"64":{"position":[[367,1]]},"66":{"position":[[848,1],[869,1],[938,2],[1011,1]]},"68":{"position":[[64,1]]},"69":{"position":[[80,1],[130,1],[168,1],[229,1],[296,1],[364,1],[377,1],[473,1],[544,1],[615,1],[684,1],[715,1],[758,1],[816,1],[854,1],[932,1],[994,1],[1027,1]]},"71":{"position":[[625,1],[634,1],[722,1],[731,1],[740,1]]},"74":{"position":[[557,1]]},"76":{"position":[[440,1],[498,1],[571,1],[638,1],[676,1],[799,1],[879,1]]},"79":{"position":[[6,1],[19,1]]},"80":{"position":[[526,1],[547,1]]},"81":{"position":[[1087,1],[1151,1],[1289,1],[1482,1],[1551,1],[1617,1],[1684,1],[1753,1],[1831,1],[1898,1],[2297,1],[2742,2]]},"82":{"position":[[1518,1],[1605,1],[1645,1],[1730,1],[2396,1],[4017,1],[4513,1]]},"83":{"position":[[1121,1],[1182,1],[1267,1],[1345,1],[1412,1],[2372,2]]},"84":{"position":[[414,1],[431,1]]},"87":{"position":[[222,1],[312,1],[413,1],[514,1],[699,1],[743,1]]},"94":{"position":[[98,1],[192,1],[260,1],[283,1],[323,1],[365,1],[409,1],[442,1],[502,1],[540,1],[592,1],[729,1],[777,1],[814,1],[864,1],[917,1],[955,1],[1029,1],[1107,1],[1168,1],[1188,1],[1190,2],[1258,1],[1307,1],[1351,1],[1388,1],[1434,1],[1481,1],[1540,2],[1543,1],[1608,1],[1684,1],[1757,1],[1812,1],[1893,1],[1958,1],[2033,1],[2108,1],[2178,1],[2258,1],[2315,1],[2346,1],[2348,1],[2400,1],[2402,1],[2457,1],[2511,1],[2599,1],[2659,1],[2685,1],[2756,1],[2817,1],[2843,1],[2901,1],[2959,1],[3021,1],[3076,1],[3131,1]]},"96":{"position":[[131,2],[280,1],[331,1],[497,1],[555,1],[686,1]]},"97":{"position":[[536,3]]},"98":{"position":[[385,1]]},"107":{"position":[[48,1],[74,1],[1530,1],[1599,1],[1674,3],[2676,1],[3378,1],[3447,1],[3515,3],[3944,2],[4104,3]]},"112":{"position":[[1021,1],[1041,1]]},"114":{"position":[[339,1],[345,1],[380,1],[421,1],[427,1]]},"117":{"position":[[112,1],[158,1]]},"119":{"position":[[415,1],[457,1]]},"120":{"position":[[85,1],[140,1],[183,1],[249,1],[326,1],[361,1],[433,1],[543,1],[604,1],[688,1],[774,1],[854,1],[892,1],[929,1],[971,1],[1014,1],[1051,1],[1095,1],[1160,1],[1236,1],[1309,1],[1364,1],[1445,1],[1510,1],[1585,1],[1660,1],[1730,1],[1810,1],[1878,1],[1948,1],[2012,1],[2038,1],[2073,1],[2132,1],[2196,1],[2255,1],[2322,1],[2370,1],[2372,1],[2435,1],[2498,1],[2556,1],[2558,1],[2610,1],[2685,1],[2760,1],[2833,1]]},"121":{"position":[[1157,3],[1205,1],[1221,1]]},"122":{"position":[[1163,3],[1223,1],[1246,1],[1248,1],[1331,1],[1407,1],[1440,1],[1516,1],[1576,1],[1620,1],[1704,1],[1715,3],[1762,1],[1830,1],[1901,1],[1903,1],[1987,1],[2064,1],[2155,1],[2211,1],[2213,1],[2224,3],[2262,3],[2278,3]]},"123":{"position":[[538,3],[552,1],[675,1],[788,1],[811,1]]},"125":{"position":[[290,1],[318,1]]},"128":{"position":[[517,1],[558,1],[562,1],[603,1],[697,1],[748,1]]},"129":{"position":[[762,1],[799,1],[803,1],[839,1],[890,1],[933,1],[937,1],[976,1],[1028,1],[1097,1],[1150,1],[1152,1],[1220,1],[1232,1],[1236,1],[1285,1]]},"130":{"position":[[249,1],[296,1],[300,1],[349,1]]},"133":{"position":[[448,4],[463,4],[468,3],[482,3],[533,3]]},"138":{"position":[[944,1]]},"142":{"position":[[923,1]]},"158":{"position":[[873,1]]},"161":{"position":[[844,1]]},"162":{"position":[[2142,1],[2257,1]]},"164":{"position":[[543,1],[559,1],[561,1],[628,1],[646,1],[648,1],[1841,1],[1923,1],[1942,1],[1944,1],[2039,1],[2065,1],[2067,1],[2109,1],[2119,3],[2149,1],[2170,2],[2179,2]]},"165":{"position":[[990,1],[997,1],[1042,1],[1057,1],[1069,1],[1075,1]]},"166":{"position":[[467,1]]},"172":{"position":[[259,1],[329,1],[331,1],[462,1],[533,2],[703,2],[706,1],[770,1],[841,2],[953,2],[956,1],[1020,1],[1091,2],[1208,1],[1210,1],[1212,1]]},"173":{"position":[[1021,1]]},"180":{"position":[[248,1],[637,1],[659,1]]},"183":{"position":[[2744,1],[2751,1],[2759,1],[2761,1],[2815,1],[3940,1],[3947,1],[3955,1],[3957,1]]},"190":{"position":[[147,1],[188,1]]},"191":{"position":[[568,1],[603,1],[636,1],[671,1],[710,1],[741,1],[1176,1],[1209,1],[1243,1],[1520,1],[1544,1],[1568,1],[1585,1],[1612,1]]},"192":{"position":[[97,1],[143,1]]},"207":{"position":[[532,1],[891,1],[898,1],[943,1],[958,1],[970,1],[976,1]]},"209":{"position":[[332,1],[367,1]]},"210":{"position":[[632,1],[659,1],[764,1],[783,1],[822,2],[844,1],[948,1],[966,1],[1221,1],[1223,2],[1263,1],[1265,2],[1301,2],[1328,1],[1349,1],[1351,1],[1403,2],[1406,1],[1461,1],[1463,1],[1465,2],[1504,1],[1945,1],[2712,1],[2839,2],[3129,1],[3232,2],[3342,1],[3416,2],[3548,1],[3570,1],[3649,2],[3695,1],[3772,2],[3837,2],[3876,1]]},"213":{"position":[[180,1]]},"217":{"position":[[845,1],[1080,1],[1851,1]]},"221":{"position":[[1129,1],[1326,1]]},"222":{"position":[[374,1],[571,1]]},"223":{"position":[[340,1],[537,1]]},"224":{"position":[[393,1],[590,1]]},"225":{"position":[[99,1],[416,1]]},"236":{"position":[[2195,1],[2532,2],[2980,1],[3317,2],[3585,1]]},"237":{"position":[[1053,5],[1341,5],[1857,1],[3308,1]]},"238":{"position":[[860,1],[1032,1],[1039,1],[1046,1],[1062,1],[1080,1],[1088,1],[1107,1],[1125,1],[1133,1],[1151,1],[1162,1],[1170,1]]},"239":{"position":[[382,1],[973,1]]},"240":{"position":[[529,1],[564,1],[597,1],[632,1],[671,1],[702,1],[1137,1],[1170,1],[1204,1],[1481,1],[1505,1],[1529,1],[1546,1],[1573,1]]},"241":{"position":[[18,2]]},"250":{"position":[[229,1],[258,1],[260,1],[392,5],[512,1],[514,1],[550,1],[957,1],[959,1],[1260,1],[1290,1],[1322,1],[1348,1],[1382,1],[1440,1],[1468,1],[1514,1],[1521,1],[1536,1],[1546,1]]},"253":{"position":[[847,3],[1193,1],[1278,1],[1418,2],[1612,1],[2114,2],[3064,1],[3229,1],[3231,3],[3317,3],[3321,1]]},"254":{"position":[[575,2],[678,1],[824,1],[864,1],[2632,2],[2735,1],[2881,1],[2921,1],[3542,1],[3582,1]]},"263":{"position":[[489,1]]},"277":{"position":[[650,2],[827,2]]},"278":{"position":[[1013,1],[1094,2]]},"279":{"position":[[1067,1],[1188,1],[1202,1],[1275,1],[1378,2],[1515,1],[1532,1],[1628,1],[1645,1],[1701,1]]},"280":{"position":[[770,3],[1180,1],[1437,1],[1452,1],[1532,1],[1591,2],[1653,1],[1717,1],[1734,1],[1784,1],[1858,1],[2021,1],[2041,1],[2162,1],[2172,1],[2183,1]]},"281":{"position":[[1225,1],[1269,1],[1305,2],[1401,1],[1422,1],[1448,3],[1463,1],[1475,1],[1494,1],[1496,2],[1517,1],[1558,2],[1561,2],[1586,1],[1629,2],[1632,2],[1635,1],[1637,1],[2065,1],[2083,1],[2103,1],[2118,1],[2150,1],[2166,1]]},"284":{"position":[[466,1],[594,1]]},"285":{"position":[[410,2]]},"290":{"position":[[653,1]]},"296":{"position":[[3079,1],[3849,1],[3856,1],[3858,3],[3872,3],[3886,3],[3905,1],[3907,3],[3922,1],[3924,3],[3933,1],[3935,3],[3964,1],[3966,3],[3995,3],[4023,3],[4415,2],[4518,1],[4520,2],[4604,2],[4607,1],[4697,2],[4700,2],[4791,1],[4793,1],[4896,2],[4899,2],[4993,1],[4995,1],[5082,2],[5218,1],[5281,1],[5351,2],[5481,1],[5501,1],[5525,3],[5540,1],[5588,1],[5611,1],[5638,3],[5653,1],[5701,1],[5703,1],[5870,1],[5933,1],[6003,2],[6133,1],[6153,1],[6177,3],[6192,1],[6201,2],[6239,2],[6277,3],[6281,1],[6304,1],[6331,3],[6346,1],[6355,2],[6393,2],[6479,3],[6483,1],[6485,1],[6622,1]]},"301":{"position":[[593,1]]},"305":{"position":[[599,1],[630,1]]},"307":{"position":[[1348,1],[1363,1],[1379,1],[1394,1],[1406,1],[1422,1],[2216,1],[2231,1],[2247,1],[2262,1],[2274,1],[2290,1]]},"309":{"position":[[654,1],[669,1],[2182,1],[2197,1],[2209,1],[2225,1],[2240,1],[2255,1],[2779,1],[2794,1],[2806,1],[2822,1],[2837,1],[2862,1]]},"313":{"position":[[847,3],[1193,1],[1278,1],[1418,2],[1612,1],[2114,2],[3064,1],[3255,1],[3257,3],[3279,1],[3281,3],[3340,3],[3344,2],[3347,3],[3351,1]]},"315":{"position":[[306,1],[313,1],[315,3],[329,3],[343,3],[362,1],[364,3],[379,1],[381,3],[390,1],[392,3],[416,1],[418,3],[458,3],[496,3],[905,2],[1044,1],[1046,1],[1068,1],[1115,2],[1166,2],[1311,1],[1365,1],[1441,2],[1577,1],[1609,1],[1645,3],[1660,1],[1708,1],[1710,1],[1872,1],[1904,1],[1940,3],[1955,1],[1984,2],[2007,1],[2016,2],[2038,1],[2164,2],[2279,3],[2283,1],[2290,1],[2299,2],[2302,1],[2304,1],[2306,1]]},"316":{"position":[[147,1]]},"319":{"position":[[1414,1],[1449,1]]},"322":{"position":[[1721,1],[1808,1]]},"324":{"position":[[128,1],[162,1]]},"329":{"position":[[1070,1]]},"331":{"position":[[589,1]]},"352":{"position":[[1,1],[27,1],[53,1],[139,1],[141,1],[143,1]]},"360":{"position":[[247,5]]},"363":{"position":[[431,1],[588,1],[654,1],[729,1],[883,1],[1035,1],[1187,1],[1938,1]]},"387":{"position":[[856,1],[982,1],[1104,1]]},"388":{"position":[[508,2]]},"409":{"position":[[1,1],[27,1],[52,1],[75,2],[98,1],[121,2],[148,1],[171,2],[198,1],[221,2],[253,1],[276,1],[278,1],[280,1]]},"414":{"position":[[246,1],[316,1],[318,1],[467,1],[495,2],[520,1],[562,1],[564,2],[567,1],[666,1],[693,2],[718,1],[762,1],[764,1],[766,1],[768,1]]},"415":{"position":[[506,1],[576,1],[578,1],[690,1],[718,2],[743,1],[785,1],[787,2],[790,1],[851,1],[878,2],[903,1],[947,1],[949,1],[951,1],[953,1]]},"436":{"position":[[259,1],[275,1]]},"449":{"position":[[489,2]]},"455":{"position":[[334,5]]},"461":{"position":[[327,5]]},"467":{"position":[[264,5]]},"473":{"position":[[365,5]]},"480":{"position":[[60,1],[1014,1]]},"482":{"position":[[706,2]]},"488":{"position":[[1092,1],[1113,1],[1174,1],[1219,2],[1222,3],[1226,1],[1228,3],[1232,1]]},"510":{"position":[[255,5]]},"517":{"position":[[1039,2],[1266,2],[1764,2]]},"527":{"position":[[419,5]]},"535":{"position":[[434,5]]},"541":{"position":[[270,5]]},"548":{"position":[[869,1],[1126,1],[1228,1],[1333,1]]},"552":{"position":[[746,1],[769,1],[795,1]]},"557":{"position":[[683,5]]},"585":{"position":[[376,5],[437,6],[696,5],[757,5]]},"590":{"position":[[549,3],[559,1],[561,3],[574,1],[576,3],[582,1],[584,3],[590,3],[598,3],[611,3]]},"606":{"position":[[304,6]]},"612":{"position":[[430,2]]},"626":{"position":[[233,5]]},"632":{"position":[[291,5]]},"659":{"position":[[1249,1],[1270,1],[1331,1],[1376,2],[1379,3],[1383,1],[1385,3],[1389,1]]},"671":{"position":[[325,5]]},"676":{"position":[[1092,1],[1113,1],[1174,1],[1219,2],[1222,3],[1226,1],[1228,3],[1232,1]]},"690":{"position":[[46,1]]},"691":{"position":[[1092,1],[1113,1],[1174,1],[1219,2],[1222,3],[1226,1],[1228,3],[1232,1]]},"701":{"position":[[256,5]]},"707":{"position":[[250,5]]},"713":{"position":[[260,5]]},"720":{"position":[[418,2]]},"721":{"position":[[395,5]]},"742":{"position":[[318,5]]},"748":{"position":[[490,5]]},"752":{"position":[[733,3],[772,3],[982,1],[1086,1],[1088,1]]},"753":{"position":[[1389,3],[1428,3]]},"761":{"position":[[228,1]]},"764":{"position":[[881,1]]},"767":{"position":[[2066,3],[2105,3]]},"774":{"position":[[228,1]]},"777":{"position":[[881,1]]},"786":{"position":[[147,1]]},"791":{"position":[[738,3],[777,3],[1016,1],[1120,1],[1122,1]]},"792":{"position":[[2058,3],[2097,3]]},"793":{"position":[[1412,3],[1451,3]]},"801":{"position":[[234,1]]},"804":{"position":[[879,1]]},"808":{"position":[[1358,3],[1397,3]]},"816":{"position":[[234,1]]},"819":{"position":[[879,1]]},"824":{"position":[[2180,3],[2219,3]]},"832":{"position":[[234,1]]},"835":{"position":[[879,1]]},"842":{"position":[[2972,2]]},"843":{"position":[[388,2],[857,5]]},"852":{"position":[[374,5]]},"860":{"position":[[341,5]]},"886":{"position":[[355,5]]},"898":{"position":[[1,1],[100,1],[126,1],[165,2],[193,1],[222,1],[274,2],[296,1],[298,1],[457,1],[484,1],[629,2],[655,1],[848,2],[878,1],[1080,2],[1110,1],[1328,1],[1330,2],[1355,1],[1408,1],[1410,2],[1413,1],[1522,1],[1550,1],[1755,2],[1783,1],[1936,1],[1938,2],[1963,1],[2015,1],[2017,1],[2019,1],[2021,1],[2023,1],[2025,1]]},"903":{"position":[[90,1]]},"904":{"position":[[1947,1]]},"911":{"position":[[331,1]]},"912":{"position":[[908,1],[1214,1],[1563,1]]},"915":{"position":[[90,1]]},"917":{"position":[[1456,1],[1869,1]]},"918":{"position":[[2239,1]]},"919":{"position":[[2294,1]]},"922":{"position":[[1813,1]]},"927":{"position":[[331,1]]},"930":{"position":[[90,1]]},"931":{"position":[[1609,1]]},"938":{"position":[[331,1]]},"943":{"position":[[752,1],[1033,1],[1065,1],[1118,1],[1156,1],[1161,2],[1182,1],[1223,1],[1225,2],[1228,1]]},"945":{"position":[[264,1]]},"954":{"position":[[331,1]]},"960":{"position":[[264,5]]},"963":{"position":[[244,1]]},"965":{"position":[[1456,1],[1869,1]]},"972":{"position":[[331,1]]},"983":{"position":[[251,5]]},"998":{"position":[[291,5]]},"1008":{"position":[[1728,3],[1747,1]]},"1016":{"position":[[388,5]]},"1029":{"position":[[258,5]]},"1032":{"position":[[289,1],[355,1],[427,1],[498,1],[563,1],[833,1],[866,1],[900,1],[1122,1],[1146,1],[1170,1],[1187,1],[1214,1]]},"1042":{"position":[[235,1],[552,2],[599,2],[1022,1],[1044,1],[1076,1]]},"1043":{"position":[[899,1],[1216,2],[1263,2],[1686,1],[1708,1],[1740,1]]},"1047":{"position":[[566,1],[568,2]]},"1051":{"position":[[1161,1],[1478,2],[1525,2],[1948,1],[1970,1],[2002,1]]},"1055":{"position":[[566,1],[568,2]]},"1059":{"position":[[950,1],[1271,2],[1318,2],[1741,1],[1763,1],[1795,1]]},"1063":{"position":[[566,1],[568,2]]},"1071":{"position":[[391,5]]},"1086":{"position":[[450,5]]},"1095":{"position":[[1,1],[27,1],[29,1],[31,1]]},"1102":{"position":[[266,5]]},"1114":{"position":[[314,5]]},"1120":{"position":[[375,1],[469,1],[563,1],[677,1],[756,1],[829,1],[909,1],[1067,1],[1245,1],[1551,1],[1626,1],[1698,1],[1771,1],[1843,1]]},"1183":{"position":[[962,1]]},"1185":{"position":[[113,1]]},"1189":{"position":[[315,1],[402,1]]},"1196":{"position":[[692,4]]},"1197":{"position":[[57,1],[321,1],[408,1]]},"1200":{"position":[[777,1],[801,1],[803,1],[827,1],[883,2],[964,1],[987,1],[1014,1],[1042,1],[1044,2],[1077,1],[1079,1],[1081,1],[1083,1]]},"1207":{"position":[[179,1],[282,1],[404,1],[491,1]]},"1208":{"position":[[179,1],[215,1]]},"1248":{"position":[[348,1],[435,1]]},"1281":{"position":[[392,1]]},"1289":{"position":[[587,3]]},"1295":{"position":[[392,1]]},"1298":{"position":[[340,1],[537,1]]},"1319":{"position":[[392,1]]},"1322":{"position":[[374,1],[571,1]]},"1335":{"position":[[374,1],[571,1]]},"1346":{"position":[[340,1],[537,1]]},"1357":{"position":[[132,1],[253,1],[340,1]]},"1368":{"position":[[117,2]]},"1373":{"position":[[1082,1]]},"1374":{"position":[[1082,1]]},"1379":{"position":[[287,1],[304,1],[306,1],[308,1],[310,1],[312,1],[314,1],[331,1],[347,1],[363,1],[379,1],[395,1],[403,1],[405,1],[416,1],[426,1],[433,1],[445,1],[450,1],[452,1],[461,1],[474,1],[480,1],[495,1],[502,1],[504,1],[510,1],[523,1],[534,1],[545,1],[552,1],[554,1],[560,1],[574,1],[583,1],[590,1],[606,1],[608,1],[616,1],[630,1],[639,1],[644,1],[656,1],[658,1],[666,1],[677,1],[686,1],[698,1],[711,1],[713,1],[725,1],[741,1],[749,1],[759,1],[769,1],[771,1],[779,1],[790,1],[799,1],[806,1],[818,1],[820,1],[826,1],[836,1],[848,1],[854,1],[863,1],[865,1],[876,1],[883,1],[890,1],[897,1],[902,1],[904,1],[912,1],[928,1],[938,1],[949,1],[957,1],[959,1],[965,1],[973,1],[982,1],[990,1],[1003,1],[1005,1],[1011,1],[1023,1],[1030,1],[1037,1],[1043,1],[1045,1],[1051,1],[1064,1],[1075,1],[1085,1],[1093,1],[1095,1],[1103,1],[1112,1],[1122,1],[1132,1],[1141,1],[1143,1],[1148,1],[1156,1],[1164,1],[1171,1],[1178,1],[1180,1],[1186,1],[1193,1],[1201,1],[1208,1],[1219,1],[1221,1],[1234,1],[1246,1],[1253,1],[1261,1],[1271,1],[1273,1],[1285,1],[1295,1],[1308,1],[1315,1],[1321,1],[1323,1],[1336,1],[1352,1],[1361,1],[1374,1],[1386,1],[1388,1],[1393,1],[1408,1],[1416,1],[1424,1],[1437,1],[1439,1],[1448,1],[1464,1],[1472,1],[1481,1],[1491,1],[1493,1],[1509,1],[1524,1],[1530,1],[1535,1],[1547,1],[1549,1],[1555,1],[1570,1],[1580,1],[1587,1],[1596,1],[1598,1],[1607,1],[1623,1],[1633,1],[1641,1],[1648,1],[1650,1],[1659,1],[1674,1],[1682,1],[1694,1],[1704,1],[1706,1],[1714,1],[1730,1],[1737,1],[1753,1],[1768,1],[1770,1],[1780,1],[1796,1],[1807,1],[1817,1],[1833,1],[1835,1],[1844,1],[1859,1],[1875,1],[1883,1],[1899,1],[1901,1],[1907,1],[1916,1],[1923,1],[1929,1],[1937,1],[1939,1],[1952,1],[1960,1],[1967,1],[1975,1],[1982,1],[1984,1],[1991,1],[1998,1],[2014,1],[2020,1],[2031,1],[2033,1],[2043,1],[2054,1],[2065,1],[2074,1],[2090,1],[2092,1],[2099,1],[2106,1],[2115,1],[2123,1],[2133,1],[2135,1],[2145,1],[2151,1],[2161,1],[2170,1],[2182,1],[2184,1],[2192,1],[2199,1],[2205,1],[2211,1],[2220,1],[2222,1],[2231,1],[2244,1],[2253,1],[2262,1],[2273,1],[2275,1],[2282,1],[2288,1],[2293,1],[2299,1],[2309,1],[2311,1],[2316,1],[2326,1],[2333,1],[2344,1],[2355,1],[2357,1],[2364,1],[2374,1],[2382,1],[2391,1],[2401,1],[2403,1],[2412,1],[2422,1],[2430,1],[2439,1],[2447,1],[2449,1],[2463,1],[2476,1],[2487,1],[2495,1],[2503,1],[2505,1],[2515,1],[2526,1],[2535,1],[2546,1],[2559,1],[2561,1],[2572,1],[2581,1],[2588,1],[2596,1],[2603,1],[2605,1],[2612,1],[2619,1],[2630,1],[2641,1],[2653,1],[2655,1],[2662,1],[2670,1],[2677,1],[2687,1],[2696,1],[2698,1],[2708,1],[2716,1],[2723,1],[2731,1],[2743,1],[2745,1],[2752,1],[2759,1],[2770,1],[2778,1],[2786,1],[2788,1],[2802,1],[2813,1],[2829,1],[2835,1],[2842,1],[2844,1],[2856,1],[2869,1],[2883,1],[2890,1],[2898,1],[2900,1],[2916,1],[2926,1],[2931,1],[2936,1],[2947,1],[2949,1],[2957,1],[2970,1],[2979,1],[2989,1],[2996,1],[2998,1],[3011,1],[3027,1],[3039,1],[3054,1],[3068,1],[3070,1],[3078,1],[3092,1],[3097,1],[3104,1],[3116,1],[3118,1],[3125,1],[3138,1],[3148,1],[3160,1],[3166,1],[3168,1],[3176,1],[3189,1],[3197,1],[3203,1],[3216,1],[3218,1],[3230,1],[3237,1],[3249,1],[3256,1],[3270,1],[3272,1],[3283,1],[3294,1],[3307,1],[3316,1],[3328,1],[3330,1],[3340,1],[3354,1],[3366,1],[3376,1],[3388,1],[3390,1],[3402,1],[3411,1],[3419,1],[3428,1],[3441,1],[3443,1],[3453,1],[3462,1],[3470,1],[3486,1],[3502,1],[3504,1],[3513,1],[3520,1],[3528,1],[3543,1],[3553,1],[3555,1],[3564,1],[3571,1],[3585,1],[3590,1],[3603,1],[3605,1],[3618,1],[3628,1],[3637,1],[3643,1],[3654,1],[3656,1],[3666,1],[3673,1],[3679,1],[3689,1],[3700,1],[3702,1],[3714,1],[3724,1],[3734,1],[3740,1],[3751,1],[3753,1],[3764,1],[3780,1],[3792,1],[3803,1],[3812,1],[3814,1],[3824,1],[3840,1],[3854,1],[3868,1],[3875,1],[3877,1],[3891,1],[3903,1],[3915,1],[3925,1],[3934,1],[3942,1],[3944,1],[3954,1],[3965,1],[3981,1],[3991,1],[4000,1],[4002,1],[4013,1],[4023,1],[4029,1],[4037,1],[4047,1],[4049,1],[4058,1],[4073,1],[4085,1],[4093,1],[4100,1],[4102,1],[4111,1],[4117,1],[4126,1],[4135,1],[4143,1],[4145,1],[4155,1],[4162,1],[4176,1],[4186,1],[4198,1],[4200,1],[4209,1],[4219,1],[4227,1],[4236,1],[4245,1],[4247,1],[4256,1],[4267,1],[4281,1],[4291,1],[4307,1],[4309,1],[4317,1],[4327,1],[4339,1],[4348,1],[4360,1],[4362,1],[4369,1],[4376,1],[4388,1],[4401,1],[4411,1],[4413,1],[4424,1],[4435,1],[4446,1],[4454,1],[4467,1],[4469,1],[4478,1],[4485,1],[4492,1],[4500,1],[4512,1],[4514,1],[4524,1],[4532,1],[4539,1],[4545,1],[4559,1],[4561,1],[4567,1],[4578,1],[4585,1],[4592,1],[4605,1],[4607,1],[4618,1],[4633,1],[4645,1],[4653,1],[4665,1],[4667,1],[4680,1],[4686,1],[4702,1],[4710,1],[4722,1],[4724,1],[4731,1],[4739,1],[4755,1],[4764,1],[4777,1],[4779,1],[4786,1],[4796,1],[4801,1],[4811,1],[4827,1],[4829,1],[4836,1],[4847,1],[4853,1],[4864,1],[4875,1],[4877,1],[4889,1],[4904,1],[4915,1],[4925,1],[4933,1],[4935,1],[4944,1],[4955,1],[4962,1],[4973,1],[4984,1],[4986,1],[4994,1],[5007,1],[5021,1],[5031,1],[5046,1],[5048,1],[5057,1],[5065,1],[5077,1],[5084,1],[5095,1],[5097,1],[5106,1],[5114,1],[5130,1],[5140,1],[5150,1],[5152,1],[5161,1],[5173,1],[5187,1],[5194,1],[5208,1],[5210,1],[5220,1],[5229,1],[5237,1],[5248,1],[5255,1],[5257,1],[5273,1],[5286,1],[5296,1],[5304,1],[5311,1],[5313,1],[5322,1],[5335,1],[5342,1],[5350,1],[5352,1],[5368,1],[5382,1],[5389,1],[5404,1]]},"1382":{"position":[[133,1],[174,1]]},"1383":{"position":[[516,1],[551,1],[584,1],[619,1],[658,1],[689,1],[1124,1],[1157,1],[1191,1],[1468,1],[1492,1],[1516,1],[1533,1],[1560,1]]},"1384":{"position":[[246,1],[291,1],[351,1],[427,1],[911,1],[1035,1],[1066,1]]},"1387":{"position":[[354,1],[441,1],[845,1],[885,3],[889,3],[893,3],[897,3],[901,3],[980,1],[1067,1]]},"1388":{"position":[[705,1]]},"1397":{"position":[[861,1]]},"1398":{"position":[[860,1]]},"1403":{"position":[[287,1],[304,1],[306,1],[308,1],[310,1],[312,1],[314,1],[331,1],[347,1],[363,1],[379,1],[395,1],[403,1],[405,1],[416,1],[426,1],[433,1],[445,1],[450,1],[452,1],[461,1],[474,1],[480,1],[495,1],[502,1],[504,1],[510,1],[523,1],[534,1],[545,1],[552,1],[554,1],[560,1],[574,1],[583,1],[590,1],[606,1],[608,1],[616,1],[630,1],[639,1],[644,1],[656,1],[658,1],[666,1],[677,1],[686,1],[698,1],[711,1],[713,1],[725,1],[741,1],[749,1],[759,1],[769,1],[771,1],[779,1],[790,1],[799,1],[806,1],[818,1],[820,1],[826,1],[836,1],[848,1],[854,1],[863,1],[865,1],[876,1],[883,1],[890,1],[897,1],[902,1],[904,1],[912,1],[928,1],[938,1],[949,1],[957,1],[959,1],[965,1],[973,1],[982,1],[990,1],[1003,1],[1005,1],[1011,1],[1023,1],[1030,1],[1037,1],[1043,1],[1045,1],[1051,1],[1064,1],[1075,1],[1085,1],[1093,1],[1095,1],[1103,1],[1112,1],[1122,1],[1132,1],[1141,1],[1143,1],[1148,1],[1156,1],[1164,1],[1171,1],[1178,1],[1180,1],[1186,1],[1193,1],[1201,1],[1208,1],[1219,1],[1221,1],[1234,1],[1246,1],[1253,1],[1261,1],[1271,1],[1273,1],[1285,1],[1295,1],[1308,1],[1315,1],[1321,1],[1323,1],[1336,1],[1352,1],[1361,1],[1374,1],[1386,1],[1388,1],[1393,1],[1408,1],[1416,1],[1424,1],[1437,1],[1439,1],[1448,1],[1464,1],[1472,1],[1481,1],[1491,1],[1493,1],[1509,1],[1524,1],[1530,1],[1535,1],[1547,1],[1549,1],[1555,1],[1570,1],[1580,1],[1587,1],[1596,1],[1598,1],[1607,1],[1623,1],[1633,1],[1641,1],[1648,1],[1650,1],[1659,1],[1674,1],[1682,1],[1694,1],[1704,1],[1706,1],[1714,1],[1730,1],[1737,1],[1753,1],[1768,1],[1770,1],[1780,1],[1796,1],[1807,1],[1817,1],[1833,1],[1835,1],[1844,1],[1859,1],[1875,1],[1883,1],[1899,1],[1901,1],[1907,1],[1916,1],[1923,1],[1929,1],[1937,1],[1939,1],[1952,1],[1960,1],[1967,1],[1975,1],[1982,1],[1984,1],[1991,1],[1998,1],[2014,1],[2020,1],[2031,1],[2033,1],[2043,1],[2054,1],[2065,1],[2074,1],[2090,1],[2092,1],[2099,1],[2106,1],[2115,1],[2123,1],[2133,1],[2135,1],[2145,1],[2151,1],[2161,1],[2170,1],[2182,1],[2184,1],[2192,1],[2199,1],[2205,1],[2211,1],[2220,1],[2222,1],[2231,1],[2244,1],[2253,1],[2262,1],[2273,1],[2275,1],[2282,1],[2288,1],[2293,1],[2299,1],[2309,1],[2311,1],[2316,1],[2326,1],[2333,1],[2344,1],[2355,1],[2357,1],[2364,1],[2374,1],[2382,1],[2391,1],[2401,1],[2403,1],[2412,1],[2422,1],[2430,1],[2439,1],[2447,1],[2449,1],[2463,1],[2476,1],[2487,1],[2495,1],[2503,1],[2505,1],[2515,1],[2526,1],[2535,1],[2546,1],[2559,1],[2561,1],[2572,1],[2581,1],[2588,1],[2596,1],[2603,1],[2605,1],[2612,1],[2619,1],[2630,1],[2641,1],[2653,1],[2655,1],[2662,1],[2670,1],[2677,1],[2687,1],[2696,1],[2698,1],[2708,1],[2716,1],[2723,1],[2731,1],[2743,1],[2745,1],[2752,1],[2759,1],[2770,1],[2778,1],[2786,1],[2788,1],[2802,1],[2813,1],[2829,1],[2835,1],[2842,1],[2844,1],[2856,1],[2869,1],[2883,1],[2890,1],[2898,1],[2900,1],[2916,1],[2926,1],[2931,1],[2936,1],[2947,1],[2949,1],[2957,1],[2970,1],[2979,1],[2989,1],[2996,1],[2998,1],[3011,1],[3027,1],[3039,1],[3054,1],[3068,1],[3070,1],[3078,1],[3092,1],[3097,1],[3104,1],[3116,1],[3118,1],[3125,1],[3138,1],[3148,1],[3160,1],[3166,1],[3168,1],[3176,1],[3189,1],[3197,1],[3203,1],[3216,1],[3218,1],[3230,1],[3237,1],[3249,1],[3256,1],[3270,1],[3272,1],[3283,1],[3294,1],[3307,1],[3316,1],[3328,1],[3330,1],[3340,1],[3354,1],[3366,1],[3376,1],[3388,1],[3390,1],[3402,1],[3411,1],[3419,1],[3428,1],[3441,1],[3443,1],[3453,1],[3462,1],[3470,1],[3486,1],[3502,1],[3504,1],[3513,1],[3520,1],[3528,1],[3543,1],[3553,1],[3555,1],[3564,1],[3571,1],[3585,1],[3590,1],[3603,1],[3605,1],[3618,1],[3628,1],[3637,1],[3643,1],[3654,1],[3656,1],[3666,1],[3673,1],[3679,1],[3689,1],[3700,1],[3702,1],[3714,1],[3724,1],[3734,1],[3740,1],[3751,1],[3753,1],[3764,1],[3780,1],[3792,1],[3803,1],[3812,1],[3814,1],[3824,1],[3840,1],[3854,1],[3868,1],[3875,1],[3877,1],[3891,1],[3903,1],[3915,1],[3925,1],[3934,1],[3942,1],[3944,1],[3954,1],[3965,1],[3981,1],[3991,1],[4000,1],[4002,1],[4013,1],[4023,1],[4029,1],[4037,1],[4047,1],[4049,1],[4058,1],[4073,1],[4085,1],[4093,1],[4100,1],[4102,1],[4111,1],[4117,1],[4126,1],[4135,1],[4143,1],[4145,1],[4155,1],[4162,1],[4176,1],[4186,1],[4198,1],[4200,1],[4209,1],[4219,1],[4227,1],[4236,1],[4245,1],[4247,1],[4256,1],[4267,1],[4281,1],[4291,1],[4307,1],[4309,1],[4317,1],[4327,1],[4339,1],[4348,1],[4360,1],[4362,1],[4369,1],[4376,1],[4388,1],[4401,1],[4411,1],[4413,1],[4424,1],[4435,1],[4446,1],[4454,1],[4467,1],[4469,1],[4478,1],[4485,1],[4492,1],[4500,1],[4512,1],[4514,1],[4524,1],[4532,1],[4539,1],[4545,1],[4559,1],[4561,1],[4567,1],[4578,1],[4585,1],[4592,1],[4605,1],[4607,1],[4618,1],[4633,1],[4645,1],[4653,1],[4665,1],[4667,1],[4680,1],[4686,1],[4702,1],[4710,1],[4722,1],[4724,1],[4731,1],[4739,1],[4755,1],[4764,1],[4777,1],[4779,1],[4786,1],[4796,1],[4801,1],[4811,1],[4827,1],[4829,1],[4836,1],[4847,1],[4853,1],[4864,1],[4875,1],[4877,1],[4889,1],[4904,1],[4915,1],[4925,1],[4933,1],[4935,1],[4944,1],[4955,1],[4962,1],[4973,1],[4984,1],[4986,1],[4994,1],[5007,1],[5021,1],[5031,1],[5046,1],[5048,1],[5057,1],[5065,1],[5077,1],[5084,1],[5095,1],[5097,1],[5106,1],[5114,1],[5130,1],[5140,1],[5150,1],[5152,1],[5161,1],[5173,1],[5187,1],[5194,1],[5208,1],[5210,1],[5220,1],[5229,1],[5237,1],[5248,1],[5255,1],[5257,1],[5273,1],[5286,1],[5296,1],[5304,1],[5311,1],[5313,1],[5322,1],[5335,1],[5342,1],[5350,1],[5352,1],[5368,1],[5382,1],[5389,1],[5404,1]]},"1408":{"position":[[180,1]]},"1409":{"position":[[844,1]]},"1414":{"position":[[287,1],[304,1],[306,1],[308,1],[310,1],[312,1],[314,1],[331,1],[347,1],[363,1],[379,1],[395,1],[403,1],[405,1],[416,1],[426,1],[433,1],[445,1],[450,1],[452,1],[461,1],[474,1],[480,1],[495,1],[502,1],[504,1],[510,1],[523,1],[534,1],[545,1],[552,1],[554,1],[560,1],[574,1],[583,1],[590,1],[606,1],[608,1],[616,1],[630,1],[639,1],[644,1],[656,1],[658,1],[666,1],[677,1],[686,1],[698,1],[711,1],[713,1],[725,1],[741,1],[749,1],[759,1],[769,1],[771,1],[779,1],[790,1],[799,1],[806,1],[818,1],[820,1],[826,1],[836,1],[848,1],[854,1],[863,1],[865,1],[876,1],[883,1],[890,1],[897,1],[902,1],[904,1],[912,1],[928,1],[938,1],[949,1],[957,1],[959,1],[965,1],[973,1],[982,1],[990,1],[1003,1],[1005,1],[1011,1],[1023,1],[1030,1],[1037,1],[1043,1],[1045,1],[1051,1],[1064,1],[1075,1],[1085,1],[1093,1],[1095,1],[1103,1],[1112,1],[1122,1],[1132,1],[1141,1],[1143,1],[1148,1],[1156,1],[1164,1],[1171,1],[1178,1],[1180,1],[1186,1],[1193,1],[1201,1],[1208,1],[1219,1],[1221,1],[1234,1],[1246,1],[1253,1],[1261,1],[1271,1],[1273,1],[1285,1],[1295,1],[1308,1],[1315,1],[1321,1],[1323,1],[1336,1],[1352,1],[1361,1],[1374,1],[1386,1],[1388,1],[1393,1],[1408,1],[1416,1],[1424,1],[1437,1],[1439,1],[1448,1],[1464,1],[1472,1],[1481,1],[1491,1],[1493,1],[1509,1],[1524,1],[1530,1],[1535,1],[1547,1],[1549,1],[1555,1],[1570,1],[1580,1],[1587,1],[1596,1],[1598,1],[1607,1],[1623,1],[1633,1],[1641,1],[1648,1],[1650,1],[1659,1],[1674,1],[1682,1],[1694,1],[1704,1],[1706,1],[1714,1],[1730,1],[1737,1],[1753,1],[1768,1],[1770,1],[1780,1],[1796,1],[1807,1],[1817,1],[1833,1],[1835,1],[1844,1],[1859,1],[1875,1],[1883,1],[1899,1],[1901,1],[1907,1],[1916,1],[1923,1],[1929,1],[1937,1],[1939,1],[1952,1],[1960,1],[1967,1],[1975,1],[1982,1],[1984,1],[1991,1],[1998,1],[2014,1],[2020,1],[2031,1],[2033,1],[2043,1],[2054,1],[2065,1],[2074,1],[2090,1],[2092,1],[2099,1],[2106,1],[2115,1],[2123,1],[2133,1],[2135,1],[2145,1],[2151,1],[2161,1],[2170,1],[2182,1],[2184,1],[2192,1],[2199,1],[2205,1],[2211,1],[2220,1],[2222,1],[2231,1],[2244,1],[2253,1],[2262,1],[2273,1],[2275,1],[2282,1],[2288,1],[2293,1],[2299,1],[2309,1],[2311,1],[2316,1],[2326,1],[2333,1],[2344,1],[2355,1],[2357,1],[2364,1],[2374,1],[2382,1],[2391,1],[2401,1],[2403,1],[2412,1],[2422,1],[2430,1],[2439,1],[2447,1],[2449,1],[2463,1],[2476,1],[2487,1],[2495,1],[2503,1],[2505,1],[2515,1],[2526,1],[2535,1],[2546,1],[2559,1],[2561,1],[2572,1],[2581,1],[2588,1],[2596,1],[2603,1],[2605,1],[2612,1],[2619,1],[2630,1],[2641,1],[2653,1],[2655,1],[2662,1],[2670,1],[2677,1],[2687,1],[2696,1],[2698,1],[2708,1],[2716,1],[2723,1],[2731,1],[2743,1],[2745,1],[2752,1],[2759,1],[2770,1],[2778,1],[2786,1],[2788,1],[2802,1],[2813,1],[2829,1],[2835,1],[2842,1],[2844,1],[2856,1],[2869,1],[2883,1],[2890,1],[2898,1],[2900,1],[2916,1],[2926,1],[2931,1],[2936,1],[2947,1],[2949,1],[2957,1],[2970,1],[2979,1],[2989,1],[2996,1],[2998,1],[3011,1],[3027,1],[3039,1],[3054,1],[3068,1],[3070,1],[3078,1],[3092,1],[3097,1],[3104,1],[3116,1],[3118,1],[3125,1],[3138,1],[3148,1],[3160,1],[3166,1],[3168,1],[3176,1],[3189,1],[3197,1],[3203,1],[3216,1],[3218,1],[3230,1],[3237,1],[3249,1],[3256,1],[3270,1],[3272,1],[3283,1],[3294,1],[3307,1],[3316,1],[3328,1],[3330,1],[3340,1],[3354,1],[3366,1],[3376,1],[3388,1],[3390,1],[3402,1],[3411,1],[3419,1],[3428,1],[3441,1],[3443,1],[3453,1],[3462,1],[3470,1],[3486,1],[3502,1],[3504,1],[3513,1],[3520,1],[3528,1],[3543,1],[3553,1],[3555,1],[3564,1],[3571,1],[3585,1],[3590,1],[3603,1],[3605,1],[3618,1],[3628,1],[3637,1],[3643,1],[3654,1],[3656,1],[3666,1],[3673,1],[3679,1],[3689,1],[3700,1],[3702,1],[3714,1],[3724,1],[3734,1],[3740,1],[3751,1],[3753,1],[3764,1],[3780,1],[3792,1],[3803,1],[3812,1],[3814,1],[3824,1],[3840,1],[3854,1],[3868,1],[3875,1],[3877,1],[3891,1],[3903,1],[3915,1],[3925,1],[3934,1],[3942,1],[3944,1],[3954,1],[3965,1],[3981,1],[3991,1],[4000,1],[4002,1],[4013,1],[4023,1],[4029,1],[4037,1],[4047,1],[4049,1],[4058,1],[4073,1],[4085,1],[4093,1],[4100,1],[4102,1],[4111,1],[4117,1],[4126,1],[4135,1],[4143,1],[4145,1],[4155,1],[4162,1],[4176,1],[4186,1],[4198,1],[4200,1],[4209,1],[4219,1],[4227,1],[4236,1],[4245,1],[4247,1],[4256,1],[4267,1],[4281,1],[4291,1],[4307,1],[4309,1],[4317,1],[4327,1],[4339,1],[4348,1],[4360,1],[4362,1],[4369,1],[4376,1],[4388,1],[4401,1],[4411,1],[4413,1],[4424,1],[4435,1],[4446,1],[4454,1],[4467,1],[4469,1],[4478,1],[4485,1],[4492,1],[4500,1],[4512,1],[4514,1],[4524,1],[4532,1],[4539,1],[4545,1],[4559,1],[4561,1],[4567,1],[4578,1],[4585,1],[4592,1],[4605,1],[4607,1],[4618,1],[4633,1],[4645,1],[4653,1],[4665,1],[4667,1],[4680,1],[4686,1],[4702,1],[4710,1],[4722,1],[4724,1],[4731,1],[4739,1],[4755,1],[4764,1],[4777,1],[4779,1],[4786,1],[4796,1],[4801,1],[4811,1],[4827,1],[4829,1],[4836,1],[4847,1],[4853,1],[4864,1],[4875,1],[4877,1],[4889,1],[4904,1],[4915,1],[4925,1],[4933,1],[4935,1],[4944,1],[4955,1],[4962,1],[4973,1],[4984,1],[4986,1],[4994,1],[5007,1],[5021,1],[5031,1],[5046,1],[5048,1],[5057,1],[5065,1],[5077,1],[5084,1],[5095,1],[5097,1],[5106,1],[5114,1],[5130,1],[5140,1],[5150,1],[5152,1],[5161,1],[5173,1],[5187,1],[5194,1],[5208,1],[5210,1],[5220,1],[5229,1],[5237,1],[5248,1],[5255,1],[5257,1],[5273,1],[5286,1],[5296,1],[5304,1],[5311,1],[5313,1],[5322,1],[5335,1],[5342,1],[5350,1],[5352,1],[5368,1],[5382,1],[5389,1],[5404,1]]},"1421":{"position":[[341,1],[428,1]]},"1434":{"position":[[488,2],[1928,1]]},"1453":{"position":[[1432,1]]},"1459":{"position":[[980,1],[1230,1],[1235,1],[1239,1],[1243,1],[1248,1],[1253,2],[1284,1],[1288,1],[1292,1],[1296,1],[1300,1],[1316,1],[1324,1],[1328,2]]},"1461":{"position":[[346,1],[400,1],[1193,3],[1207,3],[1221,1],[1223,3],[1235,1],[1237,3],[1251,1],[1253,3],[1270,3],[1283,1],[1285,3],[1299,1],[1301,3],[1310,1],[1312,1],[1314,3],[1326,1],[1328,1],[1330,3],[1344,1],[1346,1],[1348,3],[1365,1],[1367,3],[1381,1],[1383,3],[1395,1],[1397,3],[1411,1],[1413,3],[1443,3],[1453,3],[1465,3],[1479,3],[3027,3],[3045,3],[3064,3],[3623,1]]},"1462":{"position":[[537,2]]},"1463":{"position":[[322,1],[340,1],[359,1],[374,1],[381,1],[391,1],[418,1],[420,1],[427,1],[437,1],[463,1],[465,1],[628,1],[695,1],[699,1],[766,1],[830,1],[897,1]]},"1464":{"position":[[178,1],[196,1],[215,1],[230,1],[239,1],[288,1],[352,1],[371,1],[510,1],[548,1],[552,1],[610,1],[673,1],[737,1]]},"1465":{"position":[[510,1],[525,1],[534,1],[549,1],[567,1],[637,1],[651,1],[706,1],[716,1],[731,1],[733,1],[743,1],[769,1],[771,1],[785,1],[862,1],[982,1],[1009,1],[1018,1],[1028,1],[1044,1],[1046,1],[1056,1],[1074,1],[1207,1],[1253,1],[1257,1],[1306,1],[1372,1],[1407,1],[1473,1],[1521,1],[1525,1],[1573,1],[1639,1],[1674,1]]},"1466":{"position":[[137,1],[155,1],[174,1],[189,1],[198,1],[269,1],[334,1],[350,1],[488,1],[521,1],[525,1],[561,1],[621,1],[656,1]]},"1467":{"position":[[480,1],[498,1],[517,1],[532,1],[541,1],[612,1],[686,1],[704,1],[706,1],[802,1],[818,1],[863,1],[879,1],[1025,1],[1063,1],[1067,1],[1108,1],[1170,1],[1211,1],[1326,1],[1357,1],[1394,1],[1396,1],[1400,1],[1431,1],[1468,1],[1470,1],[1532,1],[1563,1],[1618,1],[1620,1],[1998,4],[2151,1],[2169,1],[2188,1],[2203,1],[2265,1],[2275,1],[2302,1],[2304,1],[2452,1],[2483,2],[2509,2],[2512,1],[2537,2],[2540,1],[2544,1],[2575,2],[2601,2],[2604,1],[2629,2],[2632,1],[2698,1],[2729,2],[2755,2],[2758,1],[2783,2],[2786,1],[2811,3],[2815,1]]},"1472":{"position":[[829,1]]},"1476":{"position":[[188,1],[206,1],[225,1],[240,1],[247,1],[257,1],[278,1],[280,1],[287,1],[297,1],[318,1],[320,1],[461,1],[515,1],[519,1],[573,1],[637,1],[691,1],[1254,1],[1272,1],[1291,1],[1306,1],[1393,1],[1409,1],[1688,1],[1761,1],[1765,1],[1838,1],[1842,1],[1915,1],[1919,1],[1992,1],[2058,1],[2148,1],[2221,1]]},"1477":{"position":[[958,1],[976,1],[995,1],[1010,1],[1019,1],[1084,1],[1100,1],[1102,1],[1189,1],[1317,1],[1333,1],[1335,1],[1395,1],[1434,1],[1510,1],[1536,1],[1719,1],[1750,1],[1769,1],[1824,1],[1826,1],[1828,1],[1832,1],[1863,1],[1885,1],[1904,1],[1906,1],[1908,1],[1912,1],[1943,1],[1962,1],[1999,1],[2001,1],[2003,1],[2063,1],[2094,1],[2113,1],[2168,1],[2170,1],[2172,1],[2232,1],[2263,1],[2288,1],[2325,1],[2327,1],[2329,1],[2333,1],[2364,1],[2383,1],[2420,1],[2422,1],[2424,1],[2484,1],[2515,1],[2534,1],[2589,1],[2591,1],[2593,1],[2893,4],[3038,1],[3052,1],[3180,1],[3198,1],[3217,1],[3232,1],[3241,1],[3330,1],[3419,1],[3501,1],[3561,1],[3600,1],[3676,1],[3702,1],[3704,1],[3812,1],[3828,1],[3838,1],[3856,1],[3893,1],[3999,1],[4065,1],[4096,1],[4176,1],[4178,1],[4182,1],[4213,1],[4256,1],[4258,1],[4262,1],[4293,1],[4353,1],[4355,1],[4421,1],[4452,1],[4532,1],[4534,1],[4600,1],[4631,1],[4697,1],[4699,1],[4703,1],[4734,1],[4794,1],[4796,1],[4862,1],[4893,1],[4973,1],[4975,1]]},"1480":{"position":[[120,1],[186,1],[263,1],[298,1],[370,1],[477,1],[538,1],[635,1],[677,1],[720,1],[757,1],[801,1],[866,1],[942,1],[1015,1],[1070,1],[1151,1],[1216,1],[1291,1],[1366,1],[1436,1]]}},"keywords":{}}],["0",{"_index":1363,"title":{},"content":{"94":{"position":[[3142,2],[3159,1],[3171,1]]},"114":{"position":[[326,1]]},"115":{"position":[[806,1]]},"120":{"position":[[2579,2],[2596,1],[2608,1]]},"159":{"position":[[807,1],[861,1],[904,1]]},"161":{"position":[[982,2],[1007,2]]},"164":{"position":[[2029,1]]},"166":{"position":[[478,1]]},"250":{"position":[[1519,1]]},"253":{"position":[[1840,2],[3290,1]]},"254":{"position":[[790,2],[866,2],[2847,2],[2923,2],[3508,2],[3584,1]]},"313":{"position":[[1840,2]]},"409":{"position":[[73,1]]},"750":{"position":[[391,1]]},"766":{"position":[[391,1]]},"767":{"position":[[1124,1]]},"792":{"position":[[1429,1]]},"824":{"position":[[1190,1]]},"898":{"position":[[546,2],[1849,2]]},"1076":{"position":[[584,1]]},"1146":{"position":[[683,2]]},"1173":{"position":[[695,2]]},"1215":{"position":[[683,2]]},"1223":{"position":[[695,2]]},"1465":{"position":[[1519,1]]},"1476":{"position":[[1443,4],[1518,4]]},"1477":{"position":[[1902,1],[2305,2],[2323,1],[3325,4],[4252,3],[4673,3],[4693,3]]}},"keywords":{}}],["0'",{"_index":5730,"title":{},"content":{"1146":{"position":[[96,3]]},"1173":{"position":[[96,3]]},"1215":{"position":[[96,3]]},"1223":{"position":[[96,3]]}},"keywords":{}}],["0.8",{"_index":1386,"title":{},"content":{"96":{"position":[[493,3]]}},"keywords":{}}],["00000000",{"_index":5297,"title":{},"content":{"1078":{"position":[[120,8]]}},"keywords":{}}],["000000000",{"_index":4200,"title":{},"content":{"575":{"position":[[186,9]]},"586":{"position":[[296,9]]},"721":{"position":[[199,9]]}},"keywords":{}}],["000000000000000",{"_index":3974,"title":{},"content":{"518":{"position":[[231,15]]}},"keywords":{}}],["0000000000000000",{"_index":138,"title":{},"content":{"3":{"position":[[847,16]]}},"keywords":{}}],["00000000201a3f27",{"_index":125,"title":{},"content":{"3":{"position":[[537,16],[886,16]]}},"keywords":{}}],["002",{"_index":5942,"title":{},"content":{"1274":{"position":[[261,3]]},"1277":{"position":[[628,3]]}},"keywords":{}}],["002"",{"_index":5956,"title":{},"content":{"1277":{"position":[[680,9]]}},"keywords":{}}],["00:00",{"_index":6568,"title":{},"content":{"1453":{"position":[[511,6]]}},"keywords":{}}],["00:13",{"_index":6572,"title":{},"content":{"1453":{"position":[[739,6]]}},"keywords":{}}],["00:15",{"_index":6569,"title":{},"content":{"1453":{"position":[[518,6],[782,5]]}},"keywords":{}}],["00:30",{"_index":6570,"title":{},"content":{"1453":{"position":[[525,6]]}},"keywords":{}}],["00:45and",{"_index":6571,"title":{},"content":{"1453":{"position":[[532,8]]}},"keywords":{}}],["01",{"_index":123,"title":{},"content":{"3":{"position":[[502,2],[803,2]]},"4":{"position":[[136,2]]},"82":{"position":[[2568,2],[2701,2],[4709,2],[4839,2]]},"94":{"position":[[1877,2],[2242,2]]},"120":{"position":[[1429,2],[1794,2]]},"352":{"position":[[87,2]]},"373":{"position":[[270,2],[273,2],[376,2],[379,2]]},"377":{"position":[[1552,2]]},"388":{"position":[[416,2]]},"424":{"position":[[245,2]]},"448":{"position":[[1023,2],[1026,2]]},"449":{"position":[[376,2],[379,2]]},"454":{"position":[[435,2]]},"455":{"position":[[227,2]]},"460":{"position":[[249,2]]},"461":{"position":[[182,2]]},"467":{"position":[[146,2]]},"497":{"position":[[170,2],[173,2]]},"517":{"position":[[2524,2]]},"527":{"position":[[313,2]]},"535":{"position":[[327,2]]},"556":{"position":[[1728,2],[2102,2]]},"557":{"position":[[426,2],[429,2],[449,2],[452,2]]},"575":{"position":[[216,2]]},"586":{"position":[[277,2],[280,2]]},"611":{"position":[[825,2],[1092,2]]},"612":{"position":[[344,2]]},"631":{"position":[[249,2],[388,2]]},"632":{"position":[[158,2],[189,2]]},"654":{"position":[[489,2]]},"671":{"position":[[222,2]]},"685":{"position":[[369,2]]},"700":{"position":[[197,2]]},"701":{"position":[[151,2]]},"706":{"position":[[197,2]]},"707":{"position":[[151,2]]},"721":{"position":[[300,2],[303,2]]},"741":{"position":[[312,2]]},"742":{"position":[[183,2]]},"748":{"position":[[316,2],[347,2]]},"860":{"position":[[241,2]]},"885":{"position":[[498,2]]},"886":{"position":[[242,2]]},"960":{"position":[[157,2]]},"983":{"position":[[151,2]]},"1010":{"position":[[326,2],[329,2]]},"1015":{"position":[[311,2]]},"1016":{"position":[[269,2]]},"1028":{"position":[[120,2],[258,2]]},"1029":{"position":[[128,2],[159,2]]},"1070":{"position":[[696,2]]},"1071":{"position":[[289,2]]},"1076":{"position":[[658,2]]},"1086":{"position":[[307,2],[310,2],[354,2],[357,2]]},"1113":{"position":[[249,2]]},"1114":{"position":[[190,2]]},"1380":{"position":[[313,3]]},"1404":{"position":[[313,3]]},"1415":{"position":[[313,3]]},"1480":{"position":[[1135,2],[1500,2]]}},"keywords":{}}],["0123456789",{"_index":4126,"title":{},"content":{"557":{"position":[[358,11]]}},"keywords":{}}],["01950",{"_index":4899,"title":{},"content":{"871":{"position":[[61,6]]}},"keywords":{}}],["01t00:00:00.000z"",{"_index":3266,"title":{},"content":{"352":{"position":[[90,23]]}},"keywords":{}}],["01t00:00:00z",{"_index":3456,"title":{},"content":{"377":{"position":[[1555,13]]},"378":{"position":[[208,12]]},"518":{"position":[[267,12],[440,12]]},"527":{"position":[[316,12]]},"535":{"position":[[330,12]]},"1108":{"position":[[202,12]]},"1134":{"position":[[222,12]]}},"keywords":{}}],["01t00:00:00z"",{"_index":4829,"title":{},"content":{"852":{"position":[[283,18]]}},"keywords":{}}],["03",{"_index":3503,"title":{},"content":{"388":{"position":[[413,2]]},"518":{"position":[[264,2],[437,2]]},"575":{"position":[[213,2]]},"612":{"position":[[341,2]]},"1108":{"position":[[199,2]]},"1134":{"position":[[219,2]]}},"keywords":{}}],["04",{"_index":1381,"title":{},"content":{"96":{"position":[[417,2],[636,2]]},"210":{"position":[[3271,2]]},"253":{"position":[[1696,2]]},"255":{"position":[[258,2],[399,2],[544,2],[683,2]]},"295":{"position":[[3771,2]]},"313":{"position":[[1696,2]]}},"keywords":{}}],["04/utc_hour=16/<name>.gz",{"_index":484,"title":{},"content":{"16":{"position":[[1130,30]]}},"keywords":{}}],["04:00",{"_index":4605,"title":{},"content":{"754":{"position":[[648,6]]},"794":{"position":[[854,6]]},"809":{"position":[[854,6]]},"825":{"position":[[690,6]]},"1286":{"position":[[911,6]]},"1301":{"position":[[747,6]]},"1325":{"position":[[911,6]]}},"keywords":{}}],["05",{"_index":2957,"title":{},"content":{"295":{"position":[[509,2],[537,2],[568,2],[2070,2],[2350,2],[2633,2],[2918,2],[3202,2],[3485,2],[3488,2],[3768,2]]}},"keywords":{}}],["05:00",{"_index":4595,"title":{},"content":{"752":{"position":[[1090,6]]},"754":{"position":[[638,5]]},"791":{"position":[[1124,6]]},"794":{"position":[[844,5]]},"809":{"position":[[844,5]]},"825":{"position":[[680,5]]},"1286":{"position":[[901,5]]},"1301":{"position":[[737,5]]},"1325":{"position":[[901,5]]}},"keywords":{}}],["05t15:49:45z"",{"_index":1181,"title":{},"content":{"82":{"position":[[2571,18],[2704,18]]}},"keywords":{}}],["05t16:06:36z"",{"_index":1207,"title":{},"content":{"82":{"position":[[4712,18]]}},"keywords":{}}],["05t16:06:37z"",{"_index":1209,"title":{},"content":{"82":{"position":[[4842,18]]}},"keywords":{}}],["06",{"_index":2986,"title":{},"content":{"295":{"position":[[3205,2]]},"425":{"position":[[180,2]]},"517":{"position":[[2529,3]]},"686":{"position":[[217,2]]},"1077":{"position":[[514,2]]},"1078":{"position":[[176,2]]},"1359":{"position":[[313,3]]}},"keywords":{}}],["06t00:00:00z",{"_index":5294,"title":{},"content":{"1077":{"position":[[517,12]]}},"keywords":{}}],["07",{"_index":2084,"title":{},"content":{"183":{"position":[[4188,2]]},"295":{"position":[[2921,2]]},"517":{"position":[[2533,2]]}},"keywords":{}}],["07/schema#"",{"_index":3074,"title":{},"content":{"314":{"position":[[1092,16]]}},"keywords":{}}],["07/utc_hour=19",{"_index":135,"title":{},"content":{"3":{"position":[[806,15]]},"4":{"position":[[139,16]]}},"keywords":{}}],["07/utc_hour=19/0000000000000000",{"_index":124,"title":{},"content":{"3":{"position":[[505,31]]}},"keywords":{}}],["08",{"_index":2963,"title":{},"content":{"295":{"position":[[571,2],[2636,2]]},"526":{"position":[[87,2]]},"1201":{"position":[[310,2]]},"1293":{"position":[[310,2]]},"1307":{"position":[[310,2]]},"1330":{"position":[[310,2]]}},"keywords":{}}],["08","total_edits":1,"total_new_lines":769,"user_id":"sebring12hrs"",{"_index":2780,"title":{},"content":{"255":{"position":[[402,112]]}},"keywords":{}}],["08","total_edits":1,"total_new_lines":82,"user_id":"simeon"",{"_index":2782,"title":{},"content":{"255":{"position":[[686,105]]}},"keywords":{}}],["08","total_edits":3,"total_new_lines":110,"user_id":"renamerr"",{"_index":2779,"title":{},"content":{"255":{"position":[[261,108]]}},"keywords":{}}],["08","total_edits":5,"total_new_lines":3360,"user_id":"sic19"",{"_index":2781,"title":{},"content":{"255":{"position":[[547,106]]}},"keywords":{}}],["08t15:52:13z"",{"_index":2718,"title":{},"content":{"253":{"position":[[1699,19]]},"313":{"position":[[1699,19]]}},"keywords":{}}],["09",{"_index":2960,"title":{},"content":{"295":{"position":[[540,2],[2353,2]]},"720":{"position":[[711,2]]},"1380":{"position":[[310,2]]},"1404":{"position":[[310,2]]},"1415":{"position":[[310,2]]}},"keywords":{}}],["0987654321",{"_index":4127,"title":{},"content":{"557":{"position":[[400,10]]}},"keywords":{}}],["09:00",{"_index":6526,"title":{},"content":{"1452":{"position":[[919,8]]}},"keywords":{}}],["09:00fast",{"_index":6553,"title":{},"content":{"1452":{"position":[[3622,9]]}},"keywords":{}}],["0ed3",{"_index":2973,"title":{},"content":{"295":{"position":[[1961,4],[2241,4],[2524,4],[2809,4],[3093,4],[3376,4],[3659,4]]}},"keywords":{}}],["0s",{"_index":6544,"title":{},"content":{"1452":{"position":[[2656,3]]}},"keywords":{}}],["0stimezon",{"_index":6551,"title":{},"content":{"1452":{"position":[[3572,11]]}},"keywords":{}}],["1",{"_index":925,"title":{"235":{"position":[[5,2]]},"249":{"position":[[0,2]]},"942":{"position":[[0,2]]}},"content":{"61":{"position":[[891,4],[1288,2]]},"71":{"position":[[341,2],[401,2],[464,2],[632,1],[729,1],[738,1]]},"81":{"position":[[1089,2]]},"98":{"position":[[791,3],[1111,2],[1169,2]]},"107":{"position":[[883,3],[983,4]]},"114":{"position":[[388,2]]},"115":{"position":[[833,2],[837,1]]},"121":{"position":[[1342,2]]},"128":{"position":[[527,2],[572,2],[707,2]]},"129":{"position":[[772,2],[900,2],[1107,2]]},"130":{"position":[[259,2]]},"132":{"position":[[509,2],[529,2],[549,2],[669,2]]},"133":{"position":[[445,2]]},"138":{"position":[[176,2]]},"141":{"position":[[486,2]]},"142":{"position":[[289,2]]},"146":{"position":[[3,2]]},"149":{"position":[[3,2]]},"150":{"position":[[3,2]]},"152":{"position":[[3,2]]},"164":{"position":[[563,2],[570,1],[1913,1],[2069,3],[2093,3],[2111,3],[2151,3]]},"183":{"position":[[3032,1],[3188,2]]},"190":{"position":[[971,1]]},"238":{"position":[[1251,2],[1320,2]]},"240":{"position":[[225,2]]},"253":{"position":[[1526,2],[2470,2],[2544,2]]},"254":{"position":[[736,1],[2793,1],[3454,1],[3689,1]]},"263":{"position":[[626,1]]},"295":{"position":[[498,1]]},"296":{"position":[[1687,1]]},"307":{"position":[[2088,1],[2566,1]]},"309":{"position":[[3311,2]]},"313":{"position":[[1526,2],[2470,2],[2544,2]]},"344":{"position":[[171,1]]},"409":{"position":[[119,1]]},"433":{"position":[[718,1]]},"517":{"position":[[2595,1]]},"573":{"position":[[1252,1]]},"575":{"position":[[300,1]]},"577":{"position":[[478,2]]},"584":{"position":[[1125,1],[1258,2],[1324,1]]},"586":{"position":[[322,1]]},"588":{"position":[[473,2]]},"590":{"position":[[580,1],[615,1]]},"842":{"position":[[2083,2],[2522,1],[2665,1]]},"843":{"position":[[759,1]]},"891":{"position":[[285,1]]},"912":{"position":[[1255,4]]},"922":{"position":[[2109,1]]},"1092":{"position":[[341,1]]},"1144":{"position":[[1028,2]]},"1196":{"position":[[1221,1]]},"1204":{"position":[[486,2]]},"1213":{"position":[[705,2]]},"1243":{"position":[[344,1],[420,1]]},"1440":{"position":[[607,2],[740,1],[933,2],[1047,1]]},"1464":{"position":[[541,3],[704,3]]},"1467":{"position":[[1056,3],[1060,2],[1374,2],[1392,1],[1448,2],[1466,1],[1598,2],[1616,1],[2507,1],[2535,1],[2753,1],[2781,1]]},"1476":{"position":[[1733,3],[1758,2],[2094,2]]},"1477":{"position":[[1786,2],[1804,2],[1822,1],[1979,2],[1997,1],[2148,2],[2166,1],[2400,2],[2418,1],[2569,2],[2587,1],[4132,3],[4152,3],[4172,3],[4329,3],[4349,3],[4508,3],[4528,3],[4770,3],[4790,3],[4949,3],[4969,3]]}},"keywords":{}}],["1"",{"_index":3517,"title":{},"content":{"392":{"position":[[653,7]]},"393":{"position":[[307,7]]},"398":{"position":[[308,7]]},"417":{"position":[[2081,7],[2189,7]]},"418":{"position":[[368,7]]},"1126":{"position":[[269,7]]}},"keywords":{}}],["1.2",{"_index":5947,"title":{},"content":{"1275":{"position":[[490,3]]},"1465":{"position":[[1302,3]]},"1466":{"position":[[557,3]]}},"keywords":{}}],["1.3",{"_index":6654,"title":{},"content":{"1465":{"position":[[1569,3],[1670,3]]}},"keywords":{}}],["1.amazonaws.com",{"_index":2468,"title":{},"content":{"222":{"position":[[1011,16]]},"1322":{"position":[[1011,16]]},"1335":{"position":[[1011,16]]}},"keywords":{}}],["1.amazonaws.comssh://sshuser@198.21.98.1ssh://sshuser@198.21.98.1:22",{"_index":2447,"title":{},"content":{"221":{"position":[[692,68]]}},"keywords":{}}],["1.app.firebolt.io",{"_index":5868,"title":{},"content":{"1207":{"position":[[144,17]]}},"keywords":{}}],["1.aws.found.io:9243",{"_index":5833,"title":{},"content":{"1197":{"position":[[251,19]]}},"keywords":{}}],["1.comput",{"_index":2446,"title":{},"content":{"221":{"position":[[682,9]]},"222":{"position":[[1001,9]]},"1322":{"position":[[1001,9]]},"1335":{"position":[[1001,9]]}},"keywords":{}}],["1.ukqdmzdqvvsz.u",{"_index":4878,"title":{},"content":{"868":{"position":[[126,17]]},"880":{"position":[[142,17]]}},"keywords":{}}],["10",{"_index":1809,"title":{},"content":{"138":{"position":[[2631,3]]},"142":{"position":[[2815,3]]},"172":{"position":[[293,2]]},"236":{"position":[[1012,3]]},"295":{"position":[[512,2],[2073,2]]},"414":{"position":[[280,2]]},"415":{"position":[[540,2]]},"534":{"position":[[1083,2],[1102,2]]},"535":{"position":[[282,2]]},"556":{"position":[[1486,2],[2010,3]]},"574":{"position":[[575,2]]},"842":{"position":[[1438,2],[2841,3]]},"843":{"position":[[470,2]]},"900":{"position":[[257,2]]},"1077":{"position":[[758,3]]},"1144":{"position":[[669,3]]},"1170":{"position":[[669,3]]},"1213":{"position":[[524,3]]},"1220":{"position":[[524,3]]}},"keywords":{}}],["10.0",{"_index":4993,"title":{},"content":{"902":{"position":[[45,4]]},"914":{"position":[[45,4]]},"929":{"position":[[45,4]]}},"keywords":{}}],["100",{"_index":1406,"title":{},"content":{"98":{"position":[[387,3]]},"107":{"position":[[2824,4]]},"277":{"position":[[797,4]]},"912":{"position":[[935,3]]}},"keywords":{}}],["100,000",{"_index":4278,"title":{},"content":{"595":{"position":[[1706,7]]},"842":{"position":[[2671,7]]}},"keywords":{}}],["100.25",{"_index":2965,"title":{},"content":{"295":{"position":[[583,6]]}},"keywords":{}}],["1000",{"_index":4991,"title":{},"content":{"900":{"position":[[203,4]]}},"keywords":{}}],["1000"",{"_index":2536,"title":{},"content":{"236":{"position":[[1417,10]]}},"keywords":{}}],["10000",{"_index":2534,"title":{},"content":{"236":{"position":[[1396,5]]},"867":{"position":[[1144,5]]}},"keywords":{}}],["100000",{"_index":4803,"title":{},"content":{"843":{"position":[[739,6]]}},"keywords":{}}],["1000000",{"_index":5774,"title":{},"content":{"1170":{"position":[[977,7]]},"1220":{"position":[[654,7]]}},"keywords":{}}],["1001",{"_index":2390,"title":{},"content":{"210":{"position":[[3411,4]]}},"keywords":{}}],["100m",{"_index":2200,"title":{},"content":{"198":{"position":[[654,6]]}},"keywords":{}}],["101",{"_index":2934,"title":{},"content":{"295":{"position":[[290,3],[500,3]]}},"keywords":{}}],["102",{"_index":2941,"title":{},"content":{"295":{"position":[[336,3],[528,3]]}},"keywords":{}}],["103",{"_index":2948,"title":{},"content":{"295":{"position":[[384,3],[559,3]]}},"keywords":{}}],["10737418240",{"_index":5720,"title":{},"content":{"1144":{"position":[[657,11]]},"1170":{"position":[[657,11]]},"1213":{"position":[[512,11]]},"1220":{"position":[[512,11]]}},"keywords":{}}],["10:00:00","order_id":"4","row_id":206,"total_amount":"25.75"",{"_index":2984,"title":{},"content":{"295":{"position":[[2924,116]]}},"keywords":{}}],["10:15:00.000000"",{"_index":2381,"title":{},"content":{"210":{"position":[[3277,22]]}},"keywords":{}}],["10m",{"_index":2914,"title":{},"content":{"284":{"position":[[759,3]]}},"keywords":{}}],["10x",{"_index":2205,"title":{},"content":{"198":{"position":[[1015,3]]}},"keywords":{}}],["11",{"_index":483,"title":{},"content":{"16":{"position":[[1127,2]]},"138":{"position":[[2730,3]]},"169":{"position":[[339,2]]},"378":{"position":[[205,2]]},"852":{"position":[[280,2]]},"1317":{"position":[[310,2]]},"1341":{"position":[[310,2]]},"1352":{"position":[[310,2]]},"1432":{"position":[[310,2]]}},"keywords":{}}],["11.5",{"_index":1384,"title":{},"content":{"96":{"position":[[464,5]]}},"keywords":{}}],["111111111",{"_index":4517,"title":{},"content":{"721":{"position":[[211,9]]}},"keywords":{}}],["11:20:00","order_id":"6","row_id":208,"total_amount":"45.9"",{"_index":2989,"title":{},"content":{"295":{"position":[[3491,115]]}},"keywords":{}}],["11ee",{"_index":2701,"title":{},"content":{"253":{"position":[[1389,4]]},"313":{"position":[[1389,4]]},"316":{"position":[[373,4],[655,4],[945,4]]}},"keywords":{}}],["11ef",{"_index":2974,"title":{},"content":{"295":{"position":[[1966,4],[2246,4],[2529,4],[2814,4],[3098,4],[3381,4],[3664,4]]}},"keywords":{}}],["11g",{"_index":4845,"title":{},"content":{"862":{"position":[[8,3]]},"874":{"position":[[8,3]]}},"keywords":{}}],["12",{"_index":1834,"title":{},"content":{"146":{"position":[[305,2]]},"149":{"position":[[314,2]]},"152":{"position":[[321,2]]},"1172":{"position":[[822,3]]},"1222":{"position":[[822,3]]},"1359":{"position":[[310,2]]}},"keywords":{}}],["12/schema"",{"_index":2287,"title":{},"content":{"210":{"position":[[907,16]]}},"keywords":{}}],["120",{"_index":2412,"title":{},"content":{"210":{"position":[[3872,3]]},"236":{"position":[[1025,3]]},"1068":{"position":[[61,3]]}},"keywords":{}}],["123",{"_index":2938,"title":{},"content":{"295":{"position":[[323,3],[421,3]]}},"keywords":{}}],["123456.u",{"_index":5111,"title":{},"content":{"947":{"position":[[454,9],[771,9]]}},"keywords":{}}],["1234567",{"_index":4570,"title":{},"content":{"748":{"position":[[205,7]]}},"keywords":{}}],["1234567890",{"_index":4106,"title":{},"content":{"552":{"position":[[260,11],[748,10]]},"557":{"position":[[370,10]]}},"keywords":{}}],["1234567890,9876543210",{"_index":4110,"title":{},"content":{"552":{"position":[[797,21]]}},"keywords":{}}],["1253",{"_index":2767,"title":{},"content":{"253":{"position":[[3312,4]]}},"keywords":{}}],["127.0.0.1:5432",{"_index":1224,"title":{},"content":{"83":{"position":[[1028,14]]},"1138":{"position":[[390,14]]},"1139":{"position":[[146,14]]}},"keywords":{}}],["12837",{"_index":2698,"title":{},"content":{"253":{"position":[[1344,6]]},"313":{"position":[[1344,6]]}},"keywords":{}}],["12:00:00",{"_index":2961,"title":{},"content":{"295":{"position":[[543,8]]}},"keywords":{}}],["12:00:00","order_id":"2","row_id":204,"total_amount":"75.5"",{"_index":2979,"title":{},"content":{"295":{"position":[[2356,115]]}},"keywords":{}}],["12:59",{"_index":4715,"title":{},"content":{"794":{"position":[[508,5]]},"809":{"position":[[508,5]]},"825":{"position":[[508,5]]},"1286":{"position":[[565,5]]},"1301":{"position":[[565,5]]},"1325":{"position":[[565,5]]}},"keywords":{}}],["13",{"_index":3957,"title":{},"content":{"517":{"position":[[2538,3]]}},"keywords":{}}],["13"",{"_index":2371,"title":{},"content":{"210":{"position":[[3099,9]]}},"keywords":{}}],["131072",{"_index":4616,"title":{},"content":{"757":{"position":[[1657,6]]},"770":{"position":[[1657,6]]},"797":{"position":[[1657,6]]},"812":{"position":[[1657,6]]},"828":{"position":[[1657,6]]}},"keywords":{}}],["135",{"_index":2348,"title":{},"content":{"210":{"position":[[2689,4]]}},"keywords":{}}],["13:00",{"_index":4716,"title":{},"content":{"794":{"position":[[517,7]]},"809":{"position":[[517,7]]},"825":{"position":[[517,7]]},"1286":{"position":[[574,7]]},"1301":{"position":[[574,7]]},"1325":{"position":[[574,7]]}},"keywords":{}}],["13:59",{"_index":4711,"title":{},"content":{"794":{"position":[[430,5]]},"809":{"position":[[430,5]]},"825":{"position":[[430,5]]},"1286":{"position":[[487,5]]},"1301":{"position":[[487,5]]},"1325":{"position":[[487,5]]}},"keywords":{}}],["14",{"_index":2739,"title":{},"content":{"253":{"position":[[2140,3]]},"313":{"position":[[2140,3]]},"517":{"position":[[2542,2]]},"556":{"position":[[518,2]]}},"keywords":{}}],["1433",{"_index":5252,"title":{},"content":{"1043":{"position":[[1877,5]]},"1059":{"position":[[1911,5]]},"1397":{"position":[[1146,5]]},"1398":{"position":[[1149,5]]},"1400":{"position":[[243,5]]},"1409":{"position":[[1150,5]]}},"keywords":{}}],["14407",{"_index":2586,"title":{},"content":{"238":{"position":[[891,5]]}},"keywords":{}}],["14:00",{"_index":4712,"title":{},"content":{"794":{"position":[[439,7]]},"809":{"position":[[439,7]]},"825":{"position":[[439,7]]},"1286":{"position":[[496,7]]},"1301":{"position":[[496,7]]},"1325":{"position":[[496,7]]}},"keywords":{}}],["14:45:00","order_id":"5","row_id":207,"total_amount":"60.2"",{"_index":2987,"title":{},"content":{"295":{"position":[[3208,115]]}},"keywords":{}}],["14a6",{"_index":3747,"title":{},"content":{"449":{"position":[[233,4]]}},"keywords":{}}],["15",{"_index":1567,"title":{},"content":{"110":{"position":[[171,2],[268,2]]},"146":{"position":[[699,2]]},"149":{"position":[[672,2]]},"152":{"position":[[675,2]]},"375":{"position":[[181,2]]},"377":{"position":[[602,2]]},"1452":{"position":[[2500,2]]}},"keywords":{}}],["15234",{"_index":2388,"title":{},"content":{"210":{"position":[[3388,6]]}},"keywords":{}}],["1536",{"_index":5943,"title":{},"content":{"1274":{"position":[[318,5]]}},"keywords":{}}],["15:30:00",{"_index":2964,"title":{},"content":{"295":{"position":[[574,8]]}},"keywords":{}}],["15:30:00","order_id":"3","row_id":205,"total_amount":"100.25"",{"_index":2982,"title":{},"content":{"295":{"position":[[2639,117]]}},"keywords":{}}],["15m",{"_index":46,"title":{},"content":{"1":{"position":[[579,3]]},"1452":{"position":[[2454,3]]},"1453":{"position":[[449,4]]}},"keywords":{}}],["16",{"_index":978,"title":{},"content":{"66":{"position":[[694,2]]},"1172":{"position":[[905,3]]},"1222":{"position":[[905,3]]}},"keywords":{}}],["16.2",{"_index":2587,"title":{},"content":{"238":{"position":[[954,6]]}},"keywords":{}}],["168",{"_index":4676,"title":{},"content":{"767":{"position":[[2371,5]]},"792":{"position":[[2352,5]]},"824":{"position":[[2483,5]]}},"keywords":{}}],["17",{"_index":4516,"title":{},"content":{"720":{"position":[[714,3]]}},"keywords":{}}],["17"",{"_index":1388,"title":{},"content":{"96":{"position":[[639,9]]},"172":{"position":[[296,9]]},"414":{"position":[[283,9]]},"415":{"position":[[543,9]]}},"keywords":{}}],["1712591533",{"_index":2754,"title":{},"content":{"253":{"position":[[2790,11]]},"313":{"position":[[2790,11]]}},"keywords":{}}],["1739808000000",{"_index":2365,"title":{},"content":{"210":{"position":[[3000,14]]}},"keywords":{}}],["1739894400000",{"_index":2410,"title":{},"content":{"210":{"position":[[3823,13]]}},"keywords":{}}],["17:00",{"_index":6528,"title":{},"content":{"1452":{"position":[[1134,8],[3648,5]]}},"keywords":{}}],["17t16:45:31z"",{"_index":1382,"title":{},"content":{"96":{"position":[[420,19]]}},"keywords":{}}],["18","edits_this_day":3,"user":"wmrapids"",{"_index":2085,"title":{},"content":{"183":{"position":[[4191,76]]}},"keywords":{}}],["18t00:00:00z",{"_index":3642,"title":{},"content":{"425":{"position":[[183,12]]},"686":{"position":[[220,12]]},"1078":{"position":[[179,12]]}},"keywords":{}}],["198",{"_index":2443,"title":{},"content":{"221":{"position":[[672,3]]},"222":{"position":[[991,3]]},"1322":{"position":[[991,3]]},"1335":{"position":[[991,3]]}},"keywords":{}}],["1d",{"_index":2915,"title":{},"content":{"284":{"position":[[767,3]]}},"keywords":{}}],["1ec69e2de187b7720fb864a8cd6d50bb69cc7f26",{"_index":142,"title":{},"content":{"3":{"position":[[924,40]]}},"keywords":{}}],["1ec69e2de187b7720fb864a8cd6d50bb69cc7f26.gz",{"_index":126,"title":{},"content":{"3":{"position":[[554,43]]}},"keywords":{}}],["1h",{"_index":2912,"title":{},"content":{"284":{"position":[[591,2]]},"1471":{"position":[[875,2]]}},"keywords":{}}],["1nkuyiqdjzospilz4abpf+a+myjounl1wjbaowkdm6acvt1j9bkw5mrcly+pgtv",{"_index":1250,"title":{},"content":{"83":{"position":[[2027,64]]},"371":{"position":[[946,64]]},"1139":{"position":[[833,64]]}},"keywords":{}}],["1st",{"_index":3955,"title":{},"content":{"517":{"position":[[2460,3]]}},"keywords":{}}],["2",{"_index":929,"title":{"239":{"position":[[5,2]]},"250":{"position":[[0,2]]},"943":{"position":[[0,2]]},"1007":{"position":[[32,2]]}},"content":{"61":{"position":[[1101,4],[1211,2]]},"81":{"position":[[1291,2]]},"83":{"position":[[1472,2]]},"107":{"position":[[917,3],[1009,4]]},"114":{"position":[[429,2]]},"115":{"position":[[851,2],[854,1]]},"121":{"position":[[1402,2]]},"129":{"position":[[813,2],[1230,1]]},"133":{"position":[[460,2]]},"138":{"position":[[208,2]]},"141":{"position":[[518,2]]},"142":{"position":[[321,2]]},"146":{"position":[[37,2]]},"149":{"position":[[40,2]]},"150":{"position":[[47,2]]},"152":{"position":[[45,2]]},"164":{"position":[[566,2],[578,1],[2073,3],[2097,2],[2115,3],[2155,3]]},"210":{"position":[[3795,2]]},"230":{"position":[[1205,1]]},"238":{"position":[[1181,2]]},"240":{"position":[[3363,1],[3412,1]]},"295":{"position":[[526,1],[1270,1]]},"371":{"position":[[391,2]]},"409":{"position":[[169,1]]},"578":{"position":[[219,1]]},"590":{"position":[[588,1]]},"859":{"position":[[666,1]]},"1123":{"position":[[43,1],[714,1]]},"1139":{"position":[[278,2]]},"1145":{"position":[[244,1]]},"1152":{"position":[[360,1]]},"1163":{"position":[[254,1]]},"1171":{"position":[[248,1]]},"1440":{"position":[[617,1],[777,2],[795,2],[943,1],[1098,2],[1407,2]]},"1459":{"position":[[1227,2],[1241,1],[1286,1],[1298,1]]},"1464":{"position":[[545,2],[708,2]]},"1467":{"position":[[1098,3],[1102,2],[1105,2],[1208,2],[1580,2],[2599,1],[2627,1],[2809,1]]},"1476":{"position":[[1810,3],[1835,2],[2218,2]]},"1477":{"position":[[2130,2],[3456,1],[3738,1],[4488,3]]}},"keywords":{}}],["2).jpg",{"_index":2711,"title":{},"content":{"253":{"position":[[1532,8]]},"313":{"position":[[1532,8]]}},"keywords":{}}],["2).jpg</a>",{"_index":2748,"title":{},"content":{"253":{"position":[[2550,16]]},"313":{"position":[[2550,16]]}},"keywords":{}}],["2).jpg\\">file:jeton",{"_index":2747,"title":{},"content":{"253":{"position":[[2476,28]]},"313":{"position":[[2476,28]]}},"keywords":{}}],["2.aws.neon.tech/dbname?sslmode=requir",{"_index":5112,"title":{},"content":{"947":{"position":[[469,38]]}},"keywords":{}}],["2.aws.neon.tech:5432us",{"_index":5115,"title":{},"content":{"947":{"position":[[786,25]]}},"keywords":{}}],["2.rds.amazonaws.com:1521",{"_index":4879,"title":{},"content":{"868":{"position":[[149,24]]}},"keywords":{}}],["2.rds.amazonaws.com:1521/orcl"",{"_index":4922,"title":{},"content":{"880":{"position":[[165,35]]}},"keywords":{}}],["2.redshift.amazonaws.com"",{"_index":3548,"title":{},"content":{"403":{"position":[[155,30]]}},"keywords":{}}],["2.redshift.amazonaws.com:5439",{"_index":5743,"title":{},"content":{"1151":{"position":[[156,29]]}},"keywords":{}}],["2.redshift.amazonaws.com:5439"",{"_index":5748,"title":{},"content":{"1152":{"position":[[179,35]]}},"keywords":{}}],["20",{"_index":3442,"title":{},"content":{"374":{"position":[[255,2],[332,3]]},"379":{"position":[[30,2],[133,2]]},"517":{"position":[[2547,3]]},"843":{"position":[[370,2]]}},"keywords":{}}],["200",{"_index":1408,"title":{},"content":{"98":{"position":[[462,5]]}},"keywords":{}}],["2016",{"_index":3436,"title":{},"content":{"373":{"position":[[276,5],[382,5]]},"377":{"position":[[1547,4]]}},"keywords":{}}],["2017",{"_index":3766,"title":{},"content":{"455":{"position":[[222,4]]},"461":{"position":[[177,4]]},"467":{"position":[[141,4]]},"556":{"position":[[1723,4],[2097,4]]},"611":{"position":[[820,4],[1087,4]]},"632":{"position":[[153,4]]},"654":{"position":[[484,4]]},"671":{"position":[[217,4]]},"685":{"position":[[364,4]]},"701":{"position":[[146,4]]},"707":{"position":[[146,4]]},"742":{"position":[[178,4]]},"748":{"position":[[311,4]]},"886":{"position":[[237,4]]},"960":{"position":[[152,4]]},"983":{"position":[[146,4]]},"1016":{"position":[[264,4]]},"1029":{"position":[[123,4]]},"1039":{"position":[[211,4]]},"1049":{"position":[[137,4]]},"1057":{"position":[[140,4]]},"1070":{"position":[[691,4]]},"1076":{"position":[[653,4]]},"1114":{"position":[[185,4]]},"1372":{"position":[[116,4]]},"1396":{"position":[[116,4]]},"1406":{"position":[[116,4]]}},"keywords":{}}],["2018",{"_index":5209,"title":{},"content":{"1029":{"position":[[154,4]]}},"keywords":{}}],["2019",{"_index":4572,"title":{},"content":{"748":{"position":[[342,4]]}},"keywords":{}}],["2020",{"_index":3744,"title":{},"content":{"448":{"position":[[1018,4]]},"449":{"position":[[371,4]]},"557":{"position":[[444,4]]},"632":{"position":[[184,4]]},"720":{"position":[[706,4]]},"1086":{"position":[[349,4]]}},"keywords":{}}],["2021",{"_index":3640,"title":{},"content":{"424":{"position":[[240,4]]},"454":{"position":[[430,4]]},"460":{"position":[[244,4]]},"631":{"position":[[244,4],[383,4]]},"700":{"position":[[192,4]]},"706":{"position":[[192,4]]},"741":{"position":[[307,4]]},"860":{"position":[[236,4]]},"885":{"position":[[493,4]]},"1015":{"position":[[306,4]]},"1028":{"position":[[115,4],[253,4]]},"1071":{"position":[[284,4]]},"1113":{"position":[[244,4]]}},"keywords":{}}],["2022",{"_index":2125,"title":{},"content":{"190":{"position":[[1079,4],[1283,5]]},"378":{"position":[[200,4]]},"388":{"position":[[408,4]]},"425":{"position":[[175,4]]},"497":{"position":[[165,4]]},"518":{"position":[[259,4],[432,4]]},"527":{"position":[[308,4]]},"535":{"position":[[322,4]]},"557":{"position":[[421,4]]},"575":{"position":[[208,4]]},"612":{"position":[[336,4]]},"686":{"position":[[212,4]]},"721":{"position":[[295,4]]},"1010":{"position":[[321,4]]},"1077":{"position":[[509,4]]},"1078":{"position":[[171,4]]},"1086":{"position":[[302,4]]},"1108":{"position":[[194,4]]},"1134":{"position":[[214,4]]},"1317":{"position":[[305,4]]},"1341":{"position":[[305,4]]},"1352":{"position":[[305,4]]},"1359":{"position":[[305,4]]},"1432":{"position":[[305,4]]}},"keywords":{}}],["2023",{"_index":1350,"title":{},"content":{"94":{"position":[[1872,4],[2237,4]]},"120":{"position":[[1424,4],[1789,4]]},"526":{"position":[[82,4]]},"586":{"position":[[272,4]]},"606":{"position":[[483,5]]},"1201":{"position":[[305,4]]},"1293":{"position":[[305,4]]},"1307":{"position":[[305,4]]},"1330":{"position":[[305,4]]},"1380":{"position":[[305,4]]},"1404":{"position":[[305,4]]},"1415":{"position":[[305,4]]},"1480":{"position":[[1130,4],[1495,4]]}},"keywords":{}}],["2024",{"_index":2383,"title":{},"content":{"210":{"position":[[3318,5]]},"295":{"position":[[504,4],[532,4],[563,4]]}},"keywords":{}}],["2048",{"_index":6367,"title":{},"content":{"1384":{"position":[[286,4]]}},"keywords":{}}],["21",{"_index":2444,"title":{},"content":{"221":{"position":[[676,2]]},"222":{"position":[[995,2]]},"517":{"position":[[2551,2]]},"1201":{"position":[[313,3]]},"1293":{"position":[[313,3]]},"1307":{"position":[[313,3]]},"1322":{"position":[[995,2]]},"1330":{"position":[[313,3]]},"1335":{"position":[[995,2]]}},"keywords":{}}],["22",{"_index":2407,"title":{},"content":{"210":{"position":[[3746,3]]},"221":{"position":[[790,3],[907,3]]},"225":{"position":[[234,3],[351,3]]}},"keywords":{}}],["2344535",{"_index":4747,"title":{},"content":{"842":{"position":[[121,8]]},"851":{"position":[[98,8]]}},"keywords":{}}],["2344535_sb1",{"_index":4748,"title":{},"content":{"842":{"position":[[151,12]]},"851":{"position":[[128,12]]}},"keywords":{}}],["2345678",{"_index":4735,"title":{},"content":{"840":{"position":[[356,8]]},"849":{"position":[[299,8]]}},"keywords":{}}],["2345678_sb2",{"_index":4737,"title":{},"content":{"840":{"position":[[408,12]]},"849":{"position":[[351,12]]}},"keywords":{}}],["23t01:00:00z",{"_index":1351,"title":{},"content":{"94":{"position":[[1880,12]]},"120":{"position":[[1432,12]]},"1480":{"position":[[1138,12]]}},"keywords":{}}],["23t02:00:00z",{"_index":1354,"title":{},"content":{"94":{"position":[[2245,12]]},"120":{"position":[[1797,12]]},"1480":{"position":[[1503,12]]}},"keywords":{}}],["24",{"_index":1835,"title":{},"content":{"146":{"position":[[315,2]]},"149":{"position":[[324,2]]},"152":{"position":[[331,2]]},"209":{"position":[[1709,2]]},"279":{"position":[[320,2]]},"785":{"position":[[921,2]]},"821":{"position":[[870,2]]},"1452":{"position":[[3070,2]]}},"keywords":{}}],["24/7",{"_index":5221,"title":{},"content":{"1036":{"position":[[46,4]]},"1452":{"position":[[64,4],[530,5],[2331,5]]}},"keywords":{}}],["2468434138",{"_index":2713,"title":{},"content":{"253":{"position":[[1582,11]]},"313":{"position":[[1582,11]]}},"keywords":{}}],["24h",{"_index":2859,"title":{},"content":{"279":{"position":[[1658,3]]}},"keywords":{}}],["25",{"_index":3973,"title":{},"content":{"517":{"position":[[3744,2]]},"556":{"position":[[1731,3],[2105,3]]},"611":{"position":[[828,3],[1095,3]]}},"keywords":{}}],["256",{"_index":3658,"title":{},"content":{"429":{"position":[[475,4]]}},"keywords":{}}],["258@help",{"_index":1191,"title":{},"content":{"82":{"position":[[3349,11]]},"171":{"position":[[227,11]]}},"keywords":{}}],["2592000",{"_index":4576,"title":{},"content":{"750":{"position":[[175,8]]},"752":{"position":[[984,8]]},"753":{"position":[[706,8]]},"764":{"position":[[883,7]]},"766":{"position":[[175,8]]},"777":{"position":[[883,7]]},"789":{"position":[[209,8]]},"791":{"position":[[1018,8]]},"793":{"position":[[666,8]]},"804":{"position":[[881,7]]},"807":{"position":[[209,8]]},"808":{"position":[[681,8]]},"819":{"position":[[881,7]]},"823":{"position":[[209,8]]},"835":{"position":[[881,7]]}},"keywords":{}}],["25t00:00:00z",{"_index":3641,"title":{},"content":{"424":{"position":[[248,13]]},"454":{"position":[[438,13]]},"455":{"position":[[230,12]]},"460":{"position":[[252,13]]},"461":{"position":[[185,12]]},"467":{"position":[[149,12]]},"631":{"position":[[252,13],[391,13]]},"632":{"position":[[161,12],[192,12]]},"654":{"position":[[492,13]]},"671":{"position":[[225,12]]},"685":{"position":[[372,13]]},"700":{"position":[[200,13]]},"701":{"position":[[154,12]]},"706":{"position":[[200,13]]},"707":{"position":[[154,12]]},"741":{"position":[[315,13]]},"742":{"position":[[186,12]]},"748":{"position":[[319,12],[350,12]]},"860":{"position":[[244,12]]},"885":{"position":[[501,13]]},"886":{"position":[[245,12]]},"960":{"position":[[160,12]]},"983":{"position":[[154,12]]},"1015":{"position":[[314,13]]},"1016":{"position":[[272,12]]},"1028":{"position":[[123,13],[261,13]]},"1029":{"position":[[131,12],[162,12]]},"1070":{"position":[[699,13]]},"1071":{"position":[[292,12]]},"1076":{"position":[[661,13]]},"1113":{"position":[[252,13]]},"1114":{"position":[[193,12]]}},"keywords":{}}],["2637",{"_index":2589,"title":{},"content":{"238":{"position":[[1246,4]]}},"keywords":{}}],["2642",{"_index":2590,"title":{},"content":{"238":{"position":[[1315,4]]}},"keywords":{}}],["27",{"_index":3958,"title":{},"content":{"517":{"position":[[2556,3]]}},"keywords":{}}],["273219.iam.gserviceaccount.com",{"_index":1193,"title":{},"content":{"82":{"position":[[3369,30]]},"171":{"position":[[247,30]]}},"keywords":{}}],["28",{"_index":3959,"title":{},"content":{"517":{"position":[[2564,2],[3182,2]]}},"keywords":{}}],["3",{"_index":930,"title":{"240":{"position":[[5,2]]},"944":{"position":[[0,2]]}},"content":{"61":{"position":[[1150,4],[1248,2]]},"81":{"position":[[1484,2]]},"98":{"position":[[584,2],[812,4]]},"121":{"position":[[1462,2]]},"129":{"position":[[947,2],[1246,2]]},"130":{"position":[[310,2]]},"132":{"position":[[560,2]]},"138":{"position":[[428,2]]},"141":{"position":[[741,2]]},"142":{"position":[[549,2]]},"146":{"position":[[326,2]]},"149":{"position":[[335,2]]},"152":{"position":[[342,2]]},"164":{"position":[[2077,3],[2100,2],[2123,3],[2139,3],[2159,3]]},"203":{"position":[[399,1]]},"210":{"position":[[3149,2]]},"228":{"position":[[1431,1]]},"240":{"position":[[319,2]]},"253":{"position":[[592,2]]},"295":{"position":[[557,1]]},"309":{"position":[[2514,1]]},"313":{"position":[[592,2]]},"409":{"position":[[219,1]]},"517":{"position":[[2572,2]]},"560":{"position":[[279,1]]},"842":{"position":[[260,2],[310,1]]},"843":{"position":[[298,1]]},"1077":{"position":[[566,2],[629,2]]},"1275":{"position":[[475,1]]},"1440":{"position":[[610,2],[936,2]]},"1459":{"position":[[1232,2],[1245,2],[1290,1],[1294,1]]},"1464":{"position":[[583,3],[711,2]]},"1467":{"position":[[1201,3],[1205,2]]},"1476":{"position":[[1887,3],[1912,2]]},"1477":{"position":[[2551,2],[4929,3]]}},"keywords":{}}],["3.5+wordpress",{"_index":5345,"title":{},"content":{"1089":{"position":[[73,13]]}},"keywords":{}}],["3.7.1",{"_index":1185,"title":{},"content":{"82":{"position":[[2732,5],[4870,5]]}},"keywords":{}}],["3.8",{"_index":6653,"title":{},"content":{"1465":{"position":[[1403,3]]},"1466":{"position":[[652,3]]}},"keywords":{}}],["30",{"_index":1973,"title":{},"content":{"168":{"position":[[264,2]]},"180":{"position":[[645,2]]},"188":{"position":[[191,2]]},"210":{"position":[[3274,2]]},"240":{"position":[[3078,2]]},"344":{"position":[[396,3]]},"517":{"position":[[2569,2]]},"534":{"position":[[1090,3]]},"748":{"position":[[392,2]]},"750":{"position":[[167,2]]},"752":{"position":[[908,2]]},"766":{"position":[[167,2]]},"789":{"position":[[201,2]]},"791":{"position":[[942,2]]},"807":{"position":[[201,2]]},"823":{"position":[[201,2]]},"872":{"position":[[36,2]]},"912":{"position":[[961,2]]},"1186":{"position":[[596,2]]},"1317":{"position":[[313,3]]},"1341":{"position":[[313,3]]},"1352":{"position":[[313,3]]},"1432":{"position":[[313,3]]},"1452":{"position":[[548,2],[2534,2]]}},"keywords":{}}],["300",{"_index":4989,"title":{},"content":{"900":{"position":[[128,3]]}},"keywords":{}}],["30m",{"_index":5233,"title":{},"content":{"1037":{"position":[[347,3]]}},"keywords":{}}],["30th",{"_index":3956,"title":{},"content":{"517":{"position":[[2476,5]]}},"keywords":{}}],["31t00:00:00option",{"_index":4015,"title":{},"content":{"526":{"position":[[90,21]]}},"keywords":{}}],["32",{"_index":4614,"title":{},"content":{"757":{"position":[[1249,2]]},"770":{"position":[[1249,2]]},"797":{"position":[[1249,2]]},"812":{"position":[[1249,2]]},"828":{"position":[[1249,2]]},"867":{"position":[[1957,2]]},"1476":{"position":[[490,3],[666,3]]}},"keywords":{}}],["3210",{"_index":2947,"title":{},"content":{"295":{"position":[[379,4]]}},"keywords":{}}],["3306",{"_index":4601,"title":{},"content":{"753":{"position":[[1611,6]]},"793":{"position":[[1634,6]]},"808":{"position":[[1585,5]]},"1267":{"position":[[153,5]]},"1285":{"position":[[243,5]]},"1289":{"position":[[1335,4],[1593,5],[1729,6]]},"1298":{"position":[[1167,4]]},"1300":{"position":[[243,5]]},"1303":{"position":[[1046,4],[1197,5],[1707,5]]},"1322":{"position":[[1554,4]]},"1324":{"position":[[243,5]]},"1376":{"position":[[243,5]]},"1411":{"position":[[243,5]]}},"keywords":{}}],["3339",{"_index":3591,"title":{},"content":{"417":{"position":[[391,4]]},"438":{"position":[[391,4]]},"502":{"position":[[851,4]]},"545":{"position":[[391,4]]},"1021":{"position":[[1428,4]]}},"keywords":{}}],["34",{"_index":2404,"title":{},"content":{"210":{"position":[[3671,3]]}},"keywords":{}}],["34.121.207.12835.226.75.13534.68.62.148",{"_index":3216,"title":{},"content":{"335":{"position":[[133,39]]}},"keywords":{}}],["360",{"_index":4210,"title":{},"content":{"577":{"position":[[296,3]]},"588":{"position":[[291,3]]}},"keywords":{}}],["364",{"_index":4222,"title":{},"content":{"584":{"position":[[1280,4]]}},"keywords":{}}],["365",{"_index":4523,"title":{},"content":{"724":{"position":[[511,3]]}},"keywords":{}}],["3856",{"_index":2400,"title":{},"content":{"210":{"position":[[3621,5]]}},"keywords":{}}],["3g",{"_index":506,"title":{},"content":{"17":{"position":[[998,2]]}},"keywords":{}}],["4",{"_index":1616,"title":{"579":{"position":[[17,1]]},"945":{"position":[[0,2]]}},"content":{"114":{"position":[[403,1],[408,1]]},"115":{"position":[[842,1]]},"132":{"position":[[539,2]]},"138":{"position":[[618,2]]},"141":{"position":[[864,2]]},"142":{"position":[[1075,2]]},"146":{"position":[[534,2]]},"149":{"position":[[507,2]]},"152":{"position":[[510,2]]},"164":{"position":[[2081,2],[2103,2],[2127,2],[2143,2],[2163,2]]},"240":{"position":[[396,2]]},"309":{"position":[[3121,1]]},"364":{"position":[[1453,1]]},"409":{"position":[[274,1]]},"581":{"position":[[256,1]]},"582":{"position":[[138,1]]},"583":{"position":[[257,1]]},"1157":{"position":[[48,1],[119,1]]},"1162":{"position":[[718,1]]},"1440":{"position":[[648,2],[699,1],[994,2]]},"1452":{"position":[[1781,1],[1880,1],[1973,1],[2989,1]]},"1459":{"position":[[1237,1],[1250,2]]},"1476":{"position":[[1964,3],[1989,2],[2117,2]]}},"keywords":{}}],["4.2",{"_index":2398,"title":{},"content":{"210":{"position":[[3592,4]]}},"keywords":{}}],["4.4+pretti",{"_index":5346,"title":{},"content":{"1089":{"position":[[87,10]]}},"keywords":{}}],["400kb",{"_index":5439,"title":{},"content":{"1123":{"position":[[388,5]]}},"keywords":{}}],["401",{"_index":4524,"title":{},"content":{"724":{"position":[[563,3]]}},"keywords":{}}],["4096",{"_index":3407,"title":{},"content":{"370":{"position":[[890,4]]},"907":{"position":[[673,4]]},"923":{"position":[[673,4]]},"934":{"position":[[673,4]]},"950":{"position":[[673,4]]},"968":{"position":[[673,4]]},"1045":{"position":[[658,4]]},"1053":{"position":[[658,4]]},"1061":{"position":[[658,4]]}},"keywords":{}}],["42",{"_index":1429,"title":{},"content":{"99":{"position":[[594,4]]},"1476":{"position":[[548,3]]}},"keywords":{}}],["4262",{"_index":2721,"title":{},"content":{"253":{"position":[[1755,4]]},"313":{"position":[[1755,4]]}},"keywords":{}}],["443",{"_index":5808,"title":{},"content":{"1188":{"position":[[147,3]]}},"keywords":{}}],["456",{"_index":2939,"title":{},"content":{"295":{"position":[[327,3]]}},"keywords":{}}],["4567",{"_index":2953,"title":{},"content":{"295":{"position":[[425,4]]}},"keywords":{}}],["45e1",{"_index":2729,"title":{},"content":{"253":{"position":[[1887,4]]},"313":{"position":[[1887,4]]}},"keywords":{}}],["48",{"_index":4211,"title":{},"content":{"578":{"position":[[63,2]]}},"keywords":{}}],["49ae",{"_index":3748,"title":{},"content":{"449":{"position":[[238,4]]}},"keywords":{}}],["4eac",{"_index":2720,"title":{},"content":{"253":{"position":[[1750,4]]},"313":{"position":[[1750,4]]}},"keywords":{}}],["4fdf95f7b91a"",{"_index":2703,"title":{},"content":{"253":{"position":[[1399,18]]},"313":{"position":[[1399,18]]}},"keywords":{}}],["4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"adoption","user":"justbecool"",{"_index":3091,"title":{},"content":{"316":{"position":[[383,147]]}},"keywords":{}}],["4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"islandia",{"_index":3095,"title":{},"content":{"316":{"position":[[955,101]]}},"keywords":{}}],["4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"wikipedia:teahouse","user":"subanark"",{"_index":3093,"title":{},"content":{"316":{"position":[[665,155]]}},"keywords":{}}],["4m",{"_index":3245,"title":{},"content":{"344":{"position":[[416,2]]}},"keywords":{}}],["5",{"_index":1614,"title":{},"content":{"114":{"position":[[347,2],[362,1],[367,1]]},"115":{"position":[[815,2],[818,1],[823,1]]},"132":{"position":[[519,2]]},"138":{"position":[[1106,2]]},"141":{"position":[[1705,2]]},"142":{"position":[[1717,2]]},"146":{"position":[[637,2]]},"149":{"position":[[610,2]]},"152":{"position":[[613,2]]},"164":{"position":[[2084,2],[2106,2],[2130,2],[2146,2],[2166,3]]},"198":{"position":[[1013,1]]},"234":{"position":[[225,1]]},"240":{"position":[[2089,2]]},"296":{"position":[[4046,1],[4061,1]]},"315":{"position":[[525,1],[540,1]]},"343":{"position":[[757,1]]},"387":{"position":[[1061,1]]},"388":{"position":[[370,1]]},"418":{"position":[[242,1]]},"439":{"position":[[499,1]]},"517":{"position":[[2513,1]]},"546":{"position":[[979,1]]},"638":{"position":[[271,1]]},"642":{"position":[[232,1]]},"747":{"position":[[385,1]]},"748":{"position":[[233,1]]},"842":{"position":[[1699,1]]},"912":{"position":[[882,1]]},"1022":{"position":[[308,1]]},"1036":{"position":[[307,1]]},"1465":{"position":[[1251,1]]},"1466":{"position":[[519,1]]},"1476":{"position":[[2142,3],[2193,3]]}},"keywords":{}}],["5.7",{"_index":5966,"title":{},"content":{"1281":{"position":[[117,3]]},"1295":{"position":[[117,3]]},"1319":{"position":[[117,3]]}},"keywords":{}}],["5.tcp.eu.ngrok.io",{"_index":2585,"title":{},"content":{"238":{"position":[[870,17]]}},"keywords":{}}],["5.tcp.eu.ngrok.io:14407",{"_index":2579,"title":{},"content":{"238":{"position":[[434,23]]}},"keywords":{}}],["50",{"_index":2959,"title":{},"content":{"295":{"position":[[523,2]]},"509":{"position":[[296,2]]},"517":{"position":[[3445,2]]}},"keywords":{}}],["50,000",{"_index":4892,"title":{},"content":{"870":{"position":[[240,6]]}},"keywords":{}}],["500",{"_index":5272,"title":{},"content":{"1068":{"position":[[45,3]]}},"keywords":{}}],["50000",{"_index":4867,"title":{},"content":{"867":{"position":[[982,5],[1255,5]]},"868":{"position":[[289,5]]},"879":{"position":[[1139,5]]}},"keywords":{}}],["5008568732",{"_index":2724,"title":{},"content":{"253":{"position":[[1805,11]]},"313":{"position":[[1805,11]]}},"keywords":{}}],["50gb",{"_index":5063,"title":{},"content":{"922":{"position":[[2322,4]]}},"keywords":{}}],["50k",{"_index":4704,"title":{},"content":{"789":{"position":[[832,3]]}},"keywords":{}}],["50mb/sec",{"_index":2204,"title":{},"content":{"198":{"position":[[952,8]]}},"keywords":{}}],["512",{"_index":53,"title":{},"content":{"1":{"position":[[714,3]]},"429":{"position":[[495,4]]},"433":{"position":[[266,3]]},"1170":{"position":[[1131,4]]},"1220":{"position":[[808,4]]}},"keywords":{}}],["512mb",{"_index":51,"title":{},"content":{"1":{"position":[[672,6]]}},"keywords":{}}],["536870912",{"_index":5776,"title":{},"content":{"1170":{"position":[[1121,9]]},"1220":{"position":[[798,9]]}},"keywords":{}}],["5432",{"_index":2531,"title":{},"content":{"236":{"position":[[1259,4]]},"238":{"position":[[236,4],[279,4]]},"919":{"position":[[2541,6]]},"931":{"position":[[2064,5]]},"1310":{"position":[[656,4],[914,5]]},"1313":{"position":[[234,5]]},"1335":{"position":[[1202,4]]},"1337":{"position":[[234,5]]},"1346":{"position":[[1168,4],[1319,5]]},"1348":{"position":[[234,5]]}},"keywords":{}}],["5432).timescaledb",{"_index":6255,"title":{},"content":{"1310":{"position":[[1050,18]]}},"keywords":{}}],["5439",{"_index":3549,"title":{},"content":{"403":{"position":[[192,4]]}},"keywords":{}}],["555",{"_index":2952,"title":{},"content":{"295":{"position":[[417,3]]}},"keywords":{}}],["5954",{"_index":989,"title":{},"content":{"66":{"position":[[960,5]]}},"keywords":{}}],["5954"",{"_index":992,"title":{},"content":{"66":{"position":[[999,11]]}},"keywords":{}}],["5:00pm",{"_index":6548,"title":{},"content":{"1452":{"position":[[3494,6]]}},"keywords":{}}],["5kemoppu80otbyzlgpn0ivp/6xw1e5fcrp2ofqkzyxvwu5txkiakjyrruuiiztza",{"_index":1248,"title":{},"content":{"83":{"position":[[1897,64]]},"371":{"position":[[816,64]]},"1139":{"position":[[703,64]]}},"keywords":{}}],["5m",{"_index":862,"title":{},"content":{"56":{"position":[[2672,2]]},"1144":{"position":[[480,2]]},"1145":{"position":[[262,2]]},"1170":{"position":[[480,2]]},"1171":{"position":[[266,2]]},"1213":{"position":[[335,2]]},"1214":{"position":[[202,2]]},"1220":{"position":[[335,2]]},"1221":{"position":[[206,2]]}},"keywords":{}}],["5s",{"_index":2520,"title":{},"content":{"236":{"position":[[1000,2]]}},"keywords":{}}],["6",{"_index":1618,"title":{},"content":{"114":{"position":[[444,1],[449,1]]},"115":{"position":[[859,1]]},"132":{"position":[[679,2]]},"138":{"position":[[1700,2]]},"141":{"position":[[1831,2]]},"142":{"position":[[1853,2]]},"146":{"position":[[296,1],[747,2]]},"149":{"position":[[305,1],[720,2]]},"152":{"position":[[312,1],[723,2]]},"228":{"position":[[1441,1]]},"240":{"position":[[2207,2]]},"1077":{"position":[[536,2]]},"1440":{"position":[[728,2],[1035,2]]}},"keywords":{}}],["60",{"_index":2155,"title":{},"content":{"191":{"position":[[1570,2]]},"240":{"position":[[1531,2]]},"387":{"position":[[1155,2],[1282,2]]},"388":{"position":[[393,2]]},"718":{"position":[[310,2]]},"724":{"position":[[379,2]]},"1032":{"position":[[1172,2]]},"1383":{"position":[[1518,2]]},"1388":{"position":[[186,2],[429,2],[707,3]]}},"keywords":{}}],["63fa",{"_index":2728,"title":{},"content":{"253":{"position":[[1882,4]]},"313":{"position":[[1882,4]]}},"keywords":{}}],["64",{"_index":1976,"title":{},"content":{"169":{"position":[[297,3]]}},"keywords":{}}],["654",{"_index":2946,"title":{},"content":{"295":{"position":[[375,3]]}},"keywords":{}}],["671580/role",{"_index":5091,"title":{},"content":{"943":{"position":[[1019,13]]}},"keywords":{}}],["6731de76",{"_index":3746,"title":{},"content":{"449":{"position":[[224,8]]}},"keywords":{}}],["6d9be407e4b8"},"customer_id":"101","order_date":"2024",{"_index":2975,"title":{},"content":{"295":{"position":[[1976,93],[2824,93]]}},"keywords":{}}],["6d9be407e4b8"},"customer_id":"102","order_date":"2024",{"_index":2978,"title":{},"content":{"295":{"position":[[2256,93],[3391,93]]}},"keywords":{}}],["6d9be407e4b8"},"customer_id":"103","order_date":"2024",{"_index":2981,"title":{},"content":{"295":{"position":[[2539,93],[3108,93]]}},"keywords":{}}],["6d9be407e4b8"},"customer_id":"104","order_date":"2024",{"_index":2991,"title":{},"content":{"295":{"position":[[3674,93]]}},"keywords":{}}],["6eba6914391",{"_index":3750,"title":{},"content":{"449":{"position":[[248,12]]}},"keywords":{}}],["6jfat/abxesqf3ibkk8cqat5r/llem1/8ekgovbh8maqpwbw771qzhun84siud/q",{"_index":1253,"title":{},"content":{"83":{"position":[[2222,64]]},"371":{"position":[[1141,64]]},"1139":{"position":[[1028,64]]}},"keywords":{}}],["7",{"_index":1796,"title":{},"content":{"138":{"position":[[1820,2]]},"141":{"position":[[2222,2]]},"142":{"position":[[1950,2]]},"146":{"position":[[897,2]]},"149":{"position":[[870,2]]},"152":{"position":[[873,2]]},"240":{"position":[[2339,2]]},"517":{"position":[[2328,2],[2371,1]]},"557":{"position":[[206,1]]},"574":{"position":[[551,1]]},"750":{"position":[[294,1]]},"766":{"position":[[294,1]]},"767":{"position":[[1257,1],[1578,1],[2258,1]]},"789":{"position":[[328,1]]},"792":{"position":[[1553,1],[2250,1]]},"807":{"position":[[328,1]]},"823":{"position":[[328,1]]},"824":{"position":[[1323,1],[1642,1],[2372,1]]},"1016":{"position":[[250,1]]},"1077":{"position":[[825,1]]},"1114":{"position":[[223,1]]},"1440":{"position":[[732,2],[1039,2]]}},"keywords":{}}],["720h",{"_index":58,"title":{},"content":{"1":{"position":[[861,4]]}},"keywords":{}}],["7396",{"_index":6272,"title":{},"content":{"1358":{"position":[[369,4]]}},"keywords":{}}],["75.5",{"_index":2962,"title":{},"content":{"295":{"position":[[552,4]]}},"keywords":{}}],["763301/branches/br",{"_index":5089,"title":{},"content":{"943":{"position":[[989,18]]}},"keywords":{}}],["7890",{"_index":2940,"title":{},"content":{"295":{"position":[[331,4]]}},"keywords":{}}],["8",{"_index":1798,"title":{},"content":{"138":{"position":[[1902,2]]},"142":{"position":[[2326,2]]},"149":{"position":[[1137,2]]},"210":{"position":[[3177,2],[3212,1]]},"230":{"position":[[1215,1]]},"250":{"position":[[953,3]]},"418":{"position":[[224,1]]},"439":{"position":[[481,1]]},"546":{"position":[[961,1]]},"638":{"position":[[253,1]]},"909":{"position":[[48,1]]},"925":{"position":[[48,1]]},"936":{"position":[[48,1]]},"952":{"position":[[48,1]]},"970":{"position":[[48,1]]},"1022":{"position":[[290,1]]},"1196":{"position":[[635,1]]},"1452":{"position":[[1822,1]]}},"keywords":{}}],["8.0",{"_index":2406,"title":{},"content":{"210":{"position":[[3717,4]]}},"keywords":{}}],["8.0.19",{"_index":4710,"title":{},"content":{"794":{"position":[[399,6],[487,7]]},"809":{"position":[[399,6],[487,7]]},"825":{"position":[[399,6],[487,7]]},"1286":{"position":[[456,6],[544,7]]},"1301":{"position":[[456,6],[544,7]]},"1325":{"position":[[456,6],[544,7]]}},"keywords":{}}],["8.5",{"_index":2386,"title":{},"content":{"210":{"position":[[3364,4]]}},"keywords":{}}],["8000",{"_index":3438,"title":{},"content":{"374":{"position":[[22,4]]}},"keywords":{}}],["8080.u",{"_index":3862,"title":{},"content":{"488":{"position":[[102,7]]},"659":{"position":[[259,7]]},"676":{"position":[[102,7]]},"691":{"position":[[102,7]]}},"keywords":{}}],["82",{"_index":2402,"title":{},"content":{"210":{"position":[[3646,2]]}},"keywords":{}}],["8401",{"_index":2702,"title":{},"content":{"253":{"position":[[1394,4]]},"295":{"position":[[1971,4]]},"313":{"position":[[1394,4]]}},"keywords":{}}],["85bb5a33d7a5",{"_index":3718,"title":{},"content":{"439":{"position":[[207,12]]}},"keywords":{}}],["86784f1692bc"",{"_index":2731,"title":{},"content":{"253":{"position":[[1897,19]]},"313":{"position":[[1897,19]]}},"keywords":{}}],["8801",{"_index":2977,"title":{},"content":{"295":{"position":[[2251,4]]},"316":{"position":[[660,4]]}},"keywords":{}}],["89",{"_index":4960,"title":{},"content":{"897":{"position":[[196,3]]}},"keywords":{}}],["8:00:00",{"_index":2958,"title":{},"content":{"295":{"position":[[515,7]]}},"keywords":{}}],["8:00:00","order_id":"1","row_id":203,"total_amount":"50"",{"_index":2976,"title":{},"content":{"295":{"position":[[2076,112]]}},"keywords":{}}],["8c01",{"_index":2980,"title":{},"content":{"295":{"position":[[2534,4]]}},"keywords":{}}],["9",{"_index":1804,"title":{},"content":{"138":{"position":[[2266,2]]},"142":{"position":[[2709,2]]}},"keywords":{}}],["90",{"_index":3206,"title":{},"content":{"332":{"position":[[502,3],[511,2]]},"560":{"position":[[157,2]]},"1067":{"position":[[225,2]]}},"keywords":{}}],["9001",{"_index":2983,"title":{},"content":{"295":{"position":[[2819,4]]},"316":{"position":[[950,4]]}},"keywords":{}}],["91",{"_index":2408,"title":{},"content":{"210":{"position":[[3769,2]]}},"keywords":{}}],["9401",{"_index":2985,"title":{},"content":{"295":{"position":[[3103,4]]},"316":{"position":[[378,4]]}},"keywords":{}}],["97bc",{"_index":3749,"title":{},"content":{"449":{"position":[[243,4]]}},"keywords":{}}],["98",{"_index":2445,"title":{},"content":{"221":{"position":[[679,2]]},"222":{"position":[[998,2]]},"1322":{"position":[[998,2]]},"1335":{"position":[[998,2]]}},"keywords":{}}],["9801",{"_index":2988,"title":{},"content":{"295":{"position":[[3386,4]]}},"keywords":{}}],["987",{"_index":2945,"title":{},"content":{"295":{"position":[[371,3]]}},"keywords":{}}],["9876543210",{"_index":4107,"title":{},"content":{"552":{"position":[[563,11],[771,10]]}},"keywords":{}}],["9:00am",{"_index":6547,"title":{},"content":{"1452":{"position":[[3483,6]]}},"keywords":{}}],["9:30:00","order_id":"7","row_id":209,"total_amount":"80.1"",{"_index":2992,"title":{},"content":{"295":{"position":[[3774,114]]}},"keywords":{}}],["9c01",{"_index":2990,"title":{},"content":{"295":{"position":[[3669,4]]}},"keywords":{}}],["_",{"_index":1343,"title":{},"content":{"94":{"position":[[1196,3]]}},"keywords":{}}],["_btv1b10405460g_(1_of_2).jpg\\"",{"_index":2745,"title":{},"content":{"253":{"position":[[2370,35]]},"313":{"position":[[2370,35]]}},"keywords":{}}],["_extern",{"_index":5864,"title":{},"content":{"1206":{"position":[[1003,9]]}},"keywords":{}}],["_id",{"_index":1957,"title":{},"content":{"165":{"position":[[715,3],[992,4],[1037,4],[1071,3],[1277,3]]},"207":{"position":[[893,4],[938,4],[972,3],[1177,3],[1376,3]]},"779":{"position":[[191,3]]}},"keywords":{}}],["_meta",{"_index":994,"title":{},"content":{"67":{"position":[[5,5],[115,5],[232,5]]},"160":{"position":[[204,5]]},"314":{"position":[[1121,6]]}},"keywords":{}}],["_meta/fil",{"_index":999,"title":{},"content":{"67":{"position":[[403,11]]},"314":{"position":[[357,11],[1700,11]]}},"keywords":{}}],["_meta/offset",{"_index":1000,"title":{},"content":{"67":{"position":[[419,13]]},"314":{"position":[[371,13],[1714,13]]}},"keywords":{}}],["_meta/path",{"_index":4244,"title":{},"content":{"590":{"position":[[1029,11]]}},"keywords":{}}],["_meta/queri",{"_index":3873,"title":{},"content":{"488":{"position":[[947,14]]},"659":{"position":[[1104,14]]},"676":{"position":[[947,14]]},"691":{"position":[[947,14]]}},"keywords":{}}],["_meta/uuid",{"_index":1002,"title":{},"content":{"67":{"position":[[522,11],[539,10],[1185,10],[1373,10]]}},"keywords":{}}],["_meta/webhookid",{"_index":3890,"title":{},"content":{"492":{"position":[[107,16],[343,19]]},"660":{"position":[[518,17],[795,16]]},"665":{"position":[[107,16],[343,19]]},"680":{"position":[[107,16],[343,19]]},"695":{"position":[[107,16],[343,19]]}},"keywords":{}}],["_read.doc",{"_index":3024,"title":{},"content":{"296":{"position":[[6264,12]]}},"keywords":{}}],["_read.doc._meta.fil",{"_index":3082,"title":{},"content":{"315":{"position":[[2058,21]]}},"keywords":{}}],["_read.doc._meta.offset",{"_index":3083,"title":{},"content":{"315":{"position":[[2100,23]]}},"keywords":{}}],["_read.doc._meta.uuid",{"_index":3084,"title":{},"content":{"315":{"position":[[2142,21]]}},"keywords":{}}],["_read.doc.customer_id",{"_index":3023,"title":{},"content":{"296":{"position":[[6217,21],[6371,21]]}},"keywords":{}}],["_read.doc.email",{"_index":3025,"title":{},"content":{"296":{"position":[[6417,16]]}},"keywords":{}}],["_read.doc.meta.domain",{"_index":3085,"title":{},"content":{"315":{"position":[[2187,22]]}},"keywords":{}}],["_read.doc.meta?.domain",{"_index":3081,"title":{},"content":{"315":{"position":[[1960,23]]}},"keywords":{}}],["_read.doc.nam",{"_index":3026,"title":{},"content":{"296":{"position":[[6440,15]]}},"keywords":{}}],["_read.doc.phon",{"_index":3027,"title":{},"content":{"296":{"position":[[6463,15]]}},"keywords":{}}],["_read.doc.titl",{"_index":3086,"title":{},"content":{"315":{"position":[[2229,16]]}},"keywords":{}}],["_read.doc.us",{"_index":3087,"title":{},"content":{"315":{"position":[[2264,14]]}},"keywords":{}}],["_report",{"_index":4099,"title":{},"content":{"550":{"position":[[65,7]]}},"keywords":{}}],["_sop",{"_index":1202,"title":{},"content":{"82":{"position":[[3952,5],[4565,5]]}},"keywords":{}}],["_v2",{"_index":407,"title":{},"content":{"13":{"position":[[1209,4]]},"208":{"position":[[1448,5]]}},"keywords":{}}],["a,b,c,d...z",{"_index":4317,"title":{},"content":{"616":{"position":[[300,14]]}},"keywords":{}}],["a12b.cloud.databricks.com",{"_index":5813,"title":{},"content":{"1189":{"position":[[94,25]]}},"keywords":{}}],["a451",{"_index":2722,"title":{},"content":{"253":{"position":[[1760,4]]},"313":{"position":[[1760,4]]}},"keywords":{}}],["aaaa",{"_index":3715,"title":{},"content":{"439":{"position":[[192,4],[283,4],[335,4]]}},"keywords":{}}],["aad",{"_index":3704,"title":{},"content":{"436":{"position":[[1161,4]]}},"keywords":{}}],["aapl,msft,amzn,tsla,googl,goog,nvda,brk.b,meta,unh",{"_index":3459,"title":{},"content":{"378":{"position":[[230,50]]}},"keywords":{}}],["ab",{"_index":5521,"title":{},"content":{"1140":{"position":[[365,3]]},"1316":{"position":[[365,3]]},"1340":{"position":[[365,3]]},"1351":{"position":[[365,3]]},"1431":{"position":[[388,3]]}},"keywords":{}}],["abbrevi",{"_index":6555,"title":{},"content":{"1452":{"position":[[4150,11]]}},"keywords":{}}],["abc123",{"_index":6623,"title":{},"content":{"1461":{"position":[[3918,6]]}},"keywords":{}}],["abc123def",{"_index":5117,"title":{},"content":{"947":{"position":[[897,9]]}},"keywords":{}}],["abcdefgh",{"_index":5812,"title":{},"content":{"1189":{"position":[[85,8]]}},"keywords":{}}],["abil",{"_index":1139,"title":{},"content":{"81":{"position":[[2891,7]]},"84":{"position":[[952,9],[1108,7]]},"209":{"position":[[1282,7]]},"320":{"position":[[1253,7]]},"752":{"position":[[385,7],[421,7]]},"753":{"position":[[1041,7],[1077,7]]},"785":{"position":[[479,7]]},"791":{"position":[[338,7],[374,7]]},"793":{"position":[[1012,7],[1048,7]]},"808":{"position":[[958,7],[994,7]]},"1000":{"position":[[375,7]]},"1303":{"position":[[1354,7]]}},"keywords":{}}],["abort",{"_index":936,"title":{},"content":{"62":{"position":[[245,5]]},"1370":{"position":[[357,5]]}},"keywords":{}}],["aboutwarn",{"_index":236,"title":{},"content":{"7":{"position":[[278,10]]}},"keywords":{}}],["abov",{"_index":823,"title":{},"content":{"55":{"position":[[908,6]]},"61":{"position":[[885,5]]},"115":{"position":[[1490,6]]},"125":{"position":[[14,6]]},"160":{"position":[[855,5]]},"174":{"position":[[105,5],[464,6]]},"183":{"position":[[998,6]]},"210":{"position":[[1581,6]]},"238":{"position":[[14,6],[412,6]]},"247":{"position":[[408,5]]},"267":{"position":[[1422,6]]},"268":{"position":[[342,6],[639,6]]},"269":{"position":[[277,6]]},"270":{"position":[[184,6],[1051,6],[1563,6]]},"274":{"position":[[1081,5]]},"328":{"position":[[67,6]]},"379":{"position":[[397,6]]},"419":{"position":[[2787,5]]},"441":{"position":[[1396,5]]},"547":{"position":[[2789,5]]},"552":{"position":[[215,5],[524,5]]},"582":{"position":[[20,5]]},"594":{"position":[[1073,5]]},"606":{"position":[[37,6]]},"639":{"position":[[2414,5]]},"753":{"position":[[483,6]]},"764":{"position":[[1059,7]]},"767":{"position":[[629,6]]},"777":{"position":[[1059,7]]},"784":{"position":[[282,6]]},"792":{"position":[[907,6]]},"793":{"position":[[442,6]]},"804":{"position":[[1057,7]]},"808":{"position":[[458,6]]},"819":{"position":[[1057,7]]},"824":{"position":[[699,6]]},"835":{"position":[[1057,7]]},"866":{"position":[[459,6]]},"878":{"position":[[469,6]]},"904":{"position":[[698,6]]},"917":{"position":[[30,5]]},"918":{"position":[[907,6]]},"919":{"position":[[442,6]]},"931":{"position":[[462,6]]},"947":{"position":[[625,6]]},"965":{"position":[[30,5]]},"1008":{"position":[[1253,5],[1851,5]]},"1023":{"position":[[2770,5]]},"1043":{"position":[[442,6]]},"1051":{"position":[[698,6]]},"1059":{"position":[[462,6]]},"1118":{"position":[[709,5]]},"1154":{"position":[[648,6]]},"1176":{"position":[[408,5]]},"1198":{"position":[[371,6]]},"1255":{"position":[[282,6]]},"1286":{"position":[[1518,7]]},"1289":{"position":[[988,6]]},"1301":{"position":[[1354,7]]},"1303":{"position":[[462,6],[699,6]]},"1322":{"position":[[1207,6]]},"1325":{"position":[[1518,7]]},"1373":{"position":[[680,6]]},"1374":{"position":[[680,6]]},"1397":{"position":[[459,6]]},"1398":{"position":[[458,6]]},"1409":{"position":[[442,6]]},"1439":{"position":[[1199,6]]},"1449":{"position":[[231,6]]},"1461":{"position":[[3097,5]]}},"keywords":{}}],["above.a",{"_index":5884,"title":{},"content":{"1211":{"position":[[222,7]]},"1218":{"position":[[222,7]]}},"keywords":{}}],["aboveallow",{"_index":4846,"title":{},"content":{"862":{"position":[[15,10]]},"874":{"position":[[15,10]]}},"keywords":{}}],["absent",{"_index":1966,"title":{},"content":{"166":{"position":[[130,6]]}},"keywords":{}}],["absolut",{"_index":1281,"title":{},"content":{"87":{"position":[[58,8],[525,8]]},"161":{"position":[[1253,8]]},"301":{"position":[[1068,8]]},"417":{"position":[[1237,8]]},"438":{"position":[[1753,8]]},"502":{"position":[[275,8]]},"1140":{"position":[[431,8]]},"1316":{"position":[[431,8]]},"1340":{"position":[[431,8]]},"1351":{"position":[[431,8]]},"1379":{"position":[[407,8]]},"1403":{"position":[[407,8]]},"1414":{"position":[[407,8]]},"1431":{"position":[[454,8]]},"1461":{"position":[[231,8]]}},"keywords":{}}],["abstract",{"_index":1483,"title":{},"content":{"104":{"position":[[5,8]]}},"keywords":{}}],["accept",{"_index":1044,"title":{},"content":{"70":{"position":[[61,6]]},"89":{"position":[[201,7]]},"105":{"position":[[359,6]]},"108":{"position":[[78,6]]},"115":{"position":[[1454,11]]},"181":{"position":[[68,9]]},"237":{"position":[[3343,6]]},"309":{"position":[[1260,10],[1691,6]]},"419":{"position":[[1933,10]]},"441":{"position":[[542,10]]},"485":{"position":[[193,6]]},"488":{"position":[[424,6]]},"491":{"position":[[348,6]]},"504":{"position":[[1562,10]]},"547":{"position":[[1935,10]]},"639":{"position":[[1560,10]]},"657":{"position":[[193,6],[506,6]]},"659":{"position":[[581,6]]},"664":{"position":[[369,6],[604,6]]},"673":{"position":[[193,6]]},"676":{"position":[[424,6]]},"679":{"position":[[348,6]]},"688":{"position":[[193,6]]},"691":{"position":[[424,6]]},"694":{"position":[[348,6]]},"943":{"position":[[1038,8]]},"1018":{"position":[[37,6]]},"1023":{"position":[[1916,10]]},"1236":{"position":[[97,6]]}},"keywords":{}}],["access",{"_index":627,"title":{"202":{"position":[[5,7]]},"415":{"position":[[7,9]]},"515":{"position":[[29,6]]},"524":{"position":[[64,6]]},"532":{"position":[[64,6]]},"725":{"position":[[0,6]]},"944":{"position":[[16,6]]},"1083":{"position":[[8,6]]},"1469":{"position":[[0,9]]},"1471":{"position":[[0,9]]},"1472":{"position":[[0,9]]}},"content":{"27":{"position":[[293,7]]},"53":{"position":[[582,6]]},"60":{"position":[[1047,6]]},"68":{"position":[[425,6]]},"82":{"position":[[198,8],[943,6],[1004,6],[3264,6]]},"83":{"position":[[124,6],[474,6]]},"99":{"position":[[93,6],[377,6]]},"138":{"position":[[81,7]]},"141":{"position":[[79,7]]},"142":{"position":[[97,7]]},"154":{"position":[[40,6],[155,6],[282,6],[330,7],[382,6],[464,6],[574,6],[599,6],[744,6],[811,6],[887,6],[980,6],[1014,6],[1129,7],[2024,6]]},"169":{"position":[[1325,6],[1573,6],[1621,6]]},"171":{"position":[[35,6]]},"172":{"position":[[35,6]]},"173":{"position":[[35,6],[577,6],[730,6],[832,6]]},"189":{"position":[[476,6]]},"190":{"position":[[674,7],[851,6],[880,6]]},"191":{"position":[[1642,6],[1767,6]]},"202":{"position":[[27,6],[128,6]]},"203":{"position":[[561,7]]},"204":{"position":[[393,7]]},"206":{"position":[[415,6]]},"208":{"position":[[79,6]]},"217":{"position":[[721,7]]},"221":{"position":[[1628,6],[1695,6]]},"234":{"position":[[36,6]]},"237":{"position":[[756,6]]},"240":{"position":[[287,6],[1603,6],[1728,6]]},"246":{"position":[[24,6]]},"253":{"position":[[334,6]]},"263":{"position":[[162,6],[316,7]]},"266":{"position":[[20,6]]},"267":{"position":[[2000,6]]},"268":{"position":[[2016,6]]},"269":{"position":[[1478,6]]},"270":{"position":[[262,6],[483,6],[632,7],[2094,6]]},"274":{"position":[[560,6],[806,6],[938,7]]},"277":{"position":[[1172,6]]},"284":{"position":[[71,6]]},"288":{"position":[[71,6],[364,6],[721,6]]},"290":{"position":[[546,7],[905,6]]},"295":{"position":[[1714,6]]},"299":{"position":[[71,6],[302,6],[352,8],[400,6],[422,6],[636,6]]},"301":{"position":[[486,7],[698,6],[727,6]]},"313":{"position":[[334,6]]},"325":{"position":[[727,6]]},"337":{"position":[[93,6],[344,6],[395,7],[442,6],[529,6]]},"338":{"position":[[115,6],[166,6],[192,6],[401,6],[458,6],[485,6]]},"340":{"position":[[433,6],[481,6]]},"341":{"position":[[309,6],[498,6]]},"347":{"position":[[72,6],[89,6],[183,6]]},"348":{"position":[[76,6]]},"349":{"position":[[337,6]]},"359":{"position":[[193,6],[219,6]]},"375":{"position":[[60,6],[136,6]]},"383":{"position":[[41,6]]},"385":{"position":[[345,6]]},"390":{"position":[[511,6],[569,6],[591,6]]},"392":{"position":[[80,6],[198,6],[249,6],[371,6]]},"393":{"position":[[203,6],[268,6]]},"395":{"position":[[748,6],[770,6]]},"397":{"position":[[76,6],[94,6],[187,6],[209,6]]},"398":{"position":[[204,6],[269,6]]},"400":{"position":[[38,6]]},"405":{"position":[[9,6]]},"408":{"position":[[201,6],[219,6]]},"413":{"position":[[153,10],[194,10],[261,6],[440,7]]},"414":{"position":[[34,6],[914,6]]},"415":{"position":[[13,8],[61,6],[83,6],[137,6],[172,6],[293,6],[315,6],[438,6],[474,6]]},"417":{"position":[[724,6],[918,6]]},"430":{"position":[[168,6]]},"432":{"position":[[954,6],[1052,6]]},"445":{"position":[[37,6]]},"446":{"position":[[304,6]]},"448":{"position":[[680,6]]},"452":{"position":[[189,7],[270,7]]},"496":{"position":[[72,6],[92,6]]},"513":{"position":[[131,6]]},"515":{"position":[[31,6],[173,6],[225,6],[258,7],[618,6],[747,6],[802,6],[863,6]]},"517":{"position":[[545,6],[575,6]]},"522":{"position":[[132,6],[236,6],[492,6]]},"523":{"position":[[28,6]]},"524":{"position":[[28,6],[82,6]]},"530":{"position":[[132,6],[236,6],[492,6]]},"531":{"position":[[28,6],[145,6],[347,6],[469,6],[513,6]]},"532":{"position":[[28,6],[138,6],[282,6],[346,6]]},"534":{"position":[[680,6],[702,6],[773,6]]},"543":{"position":[[80,6],[206,8]]},"548":{"position":[[181,6]]},"552":{"position":[[108,9],[384,9]]},"553":{"position":[[92,6]]},"556":{"position":[[976,6],[1868,6]]},"562":{"position":[[95,6]]},"582":{"position":[[107,6]]},"591":{"position":[[51,6]]},"608":{"position":[[45,6]]},"623":{"position":[[141,7]]},"631":{"position":[[159,6]]},"635":{"position":[[469,7]]},"637":{"position":[[118,6],[214,6],[295,6]]},"640":{"position":[[10,8]]},"643":{"position":[[106,6]]},"645":{"position":[[23,6],[165,6],[413,6],[455,6]]},"646":{"position":[[328,6],[478,6],[533,6],[554,6]]},"650":{"position":[[105,6],[209,6]]},"652":{"position":[[23,6],[165,6],[413,6],[455,6]]},"654":{"position":[[49,6],[199,6],[254,6],[275,6]]},"670":{"position":[[270,6],[300,6],[437,6]]},"683":{"position":[[284,6]]},"685":{"position":[[155,6],[232,6],[245,6]]},"717":{"position":[[78,6]]},"718":{"position":[[123,6],[254,6],[286,6]]},"720":{"position":[[582,6],[595,6]]},"724":{"position":[[80,6],[355,6],[615,6]]},"725":{"position":[[170,6]]},"726":{"position":[[588,6]]},"728":{"position":[[459,6]]},"752":{"position":[[607,6]]},"753":{"position":[[227,6],[1263,6]]},"757":{"position":[[1111,7]]},"767":{"position":[[105,13],[1591,7],[1608,10]]},"770":{"position":[[1111,7]]},"780":{"position":[[85,6],[136,6],[221,6]]},"791":{"position":[[560,6]]},"792":{"position":[[294,6],[360,7],[407,10]]},"793":{"position":[[108,6],[174,7],[221,6],[1234,6]]},"797":{"position":[[1111,7]]},"808":{"position":[[108,6],[174,7],[1180,6]]},"812":{"position":[[1111,7]]},"824":{"position":[[108,6],[174,7],[218,13],[1655,7],[1672,10]]},"828":{"position":[[1111,7]]},"838":{"position":[[53,6]]},"839":{"position":[[32,6],[141,6]]},"840":{"position":[[1132,6],[1231,6],[1328,6],[1424,6],[1690,6],[1796,6],[1938,6],[1986,6]]},"842":{"position":[[500,6],[881,6],[956,6]]},"848":{"position":[[32,6],[141,6]]},"849":{"position":[[2143,6],[2253,6],[2280,6],[2315,6],[2731,6],[2837,6],[3057,6],[3105,6]]},"851":{"position":[[464,6],[524,6]]},"855":{"position":[[274,6]]},"859":{"position":[[436,6],[460,6]]},"862":{"position":[[164,6]]},"864":{"position":[[51,6],[337,6],[402,6],[547,6],[958,6]]},"865":{"position":[[172,6]]},"874":{"position":[[164,6]]},"876":{"position":[[51,6],[337,6],[402,6],[547,6],[823,6]]},"877":{"position":[[222,6]]},"879":{"position":[[624,6]]},"885":{"position":[[408,6]]},"895":{"position":[[371,6]]},"898":{"position":[[1205,6],[1621,6]]},"904":{"position":[[108,6],[174,7],[218,13]]},"917":{"position":[[1023,6]]},"918":{"position":[[294,6],[360,7],[407,10]]},"919":{"position":[[108,6],[174,7],[221,6],[1548,6]]},"931":{"position":[[108,6],[174,7]]},"944":{"position":[[107,7]]},"957":{"position":[[10,6]]},"959":{"position":[[74,6],[104,6]]},"965":{"position":[[1023,6]]},"985":{"position":[[551,6]]},"989":{"position":[[236,6],[302,6]]},"1000":{"position":[[729,6]]},"1004":{"position":[[319,6],[385,6]]},"1026":{"position":[[49,6]]},"1031":{"position":[[405,6]]},"1032":{"position":[[1035,6],[1327,6]]},"1043":{"position":[[108,6],[174,7],[221,6]]},"1051":{"position":[[108,6],[174,7],[218,13]]},"1059":{"position":[[108,6],[174,7]]},"1067":{"position":[[356,6],[624,6]]},"1070":{"position":[[335,6],[348,6],[930,6]]},"1083":{"position":[[89,6],[255,6]]},"1085":{"position":[[635,6],[673,6]]},"1086":{"position":[[40,6]]},"1089":{"position":[[262,6]]},"1105":{"position":[[38,6],[84,6],[173,6],[246,7]]},"1118":{"position":[[122,6]]},"1122":{"position":[[374,6],[396,6]]},"1125":{"position":[[76,6],[94,6],[182,6],[204,6]]},"1126":{"position":[[165,6],[230,6]]},"1133":{"position":[[657,6],[674,6]]},"1142":{"position":[[238,6],[260,6]]},"1144":{"position":[[149,6],[163,6],[256,6],[274,6]]},"1147":{"position":[[446,9]]},"1149":{"position":[[57,10],[686,6],[708,6]]},"1151":{"position":[[738,6],[756,6],[868,6],[890,6]]},"1154":{"position":[[116,10],[336,10]]},"1160":{"position":[[161,6],[257,6],[309,6],[401,6],[423,6]]},"1162":{"position":[[83,6],[97,6],[115,9],[189,6],[207,6],[222,9]]},"1168":{"position":[[238,6],[260,6]]},"1170":{"position":[[149,6],[163,6],[256,6],[274,6]]},"1174":{"position":[[446,9]]},"1177":{"position":[[171,6]]},"1185":{"position":[[212,6]]},"1186":{"position":[[626,6],[751,6]]},"1188":{"position":[[582,6],[660,6]]},"1203":{"position":[[541,10]]},"1204":{"position":[[50,6],[240,7],[253,7],[282,6],[307,6],[566,6],[591,6]]},"1206":{"position":[[87,6],[105,9],[223,6],[253,9]]},"1216":{"position":[[446,9]]},"1224":{"position":[[446,9]]},"1226":{"position":[[162,6]]},"1244":{"position":[[71,6]]},"1245":{"position":[[140,6],[742,7]]},"1251":{"position":[[96,6],[168,6]]},"1258":{"position":[[280,6],[302,6]]},"1260":{"position":[[537,6],[555,6],[667,6],[689,6]]},"1281":{"position":[[251,6]]},"1282":{"position":[[423,6]]},"1283":{"position":[[119,6],[257,6]]},"1288":{"position":[[135,6]]},"1289":{"position":[[119,6],[408,10],[802,7]]},"1292":{"position":[[294,10]]},"1295":{"position":[[251,6]]},"1303":{"position":[[108,6],[174,7]]},"1306":{"position":[[294,10]]},"1310":{"position":[[438,6]]},"1311":{"position":[[93,6]]},"1319":{"position":[[251,6]]},"1320":{"position":[[119,6]]},"1321":{"position":[[188,10]]},"1329":{"position":[[294,10]]},"1333":{"position":[[119,6]]},"1334":{"position":[[188,10],[304,7]]},"1344":{"position":[[119,6]]},"1361":{"position":[[133,6]]},"1362":{"position":[[236,6],[263,6]]},"1372":{"position":[[251,6]]},"1373":{"position":[[108,6],[174,7],[218,13]]},"1374":{"position":[[108,6],[174,7],[218,13]]},"1382":{"position":[[277,6]]},"1383":{"position":[[1590,6],[1715,6]]},"1396":{"position":[[251,6]]},"1397":{"position":[[108,6],[175,7]]},"1398":{"position":[[108,6],[174,7]]},"1406":{"position":[[251,6]]},"1409":{"position":[[108,6],[174,7],[221,6]]},"1417":{"position":[[368,6]]},"1418":{"position":[[121,6]]},"1420":{"position":[[367,6],[428,6]]},"1447":{"position":[[128,8]]},"1461":{"position":[[5199,6],[5231,8],[5344,7],[5477,6]]},"1469":{"position":[[9,6]]},"1470":{"position":[[247,6]]},"1471":{"position":[[1132,8]]}},"keywords":{}}],["access"",{"_index":4034,"title":{},"content":{"531":{"position":[[379,13]]},"532":{"position":[[313,12]]}},"keywords":{}}],["access.cr",{"_index":4058,"title":{},"content":{"543":{"position":[[300,13]]}},"keywords":{}}],["access_key",{"_index":3565,"title":{},"content":{"408":{"position":[[181,11]]},"497":{"position":[[126,11]]}},"keywords":{}}],["access_key_id",{"_index":5749,"title":{},"content":{"1152":{"position":[[274,13]]}},"keywords":{}}],["access_token",{"_index":3273,"title":{},"content":{"359":{"position":[[170,13]]},"360":{"position":[[111,13]]},"518":{"position":[[190,13]]},"557":{"position":[[299,14]]},"647":{"position":[[159,13]]},"655":{"position":[[165,13]]},"670":{"position":[[256,13]]},"671":{"position":[[176,13]]},"686":{"position":[[171,13]]},"720":{"position":[[510,12]]},"721":{"position":[[247,12],[260,13]]},"728":{"position":[[445,13]]},"892":{"position":[[120,13]]},"960":{"position":[[111,13]]},"1016":{"position":[[138,13]]},"1071":{"position":[[197,13]]},"1086":{"position":[[245,13]]},"1108":{"position":[[127,13],[169,12]]},"1363":{"position":[[158,13]]}},"keywords":{}}],["accessto",{"_index":5740,"title":{},"content":{"1149":{"position":[[631,8]]},"1258":{"position":[[225,8]]}},"keywords":{}}],["accident",{"_index":1469,"title":{},"content":{"102":{"position":[[606,10]]}},"keywords":{}}],["accommod",{"_index":1437,"title":{},"content":{"100":{"position":[[76,11]]},"323":{"position":[[1215,11]]},"1047":{"position":[[910,11]]},"1055":{"position":[[910,11]]},"1063":{"position":[[910,11]]}},"keywords":{}}],["accompani",{"_index":967,"title":{},"content":{"64":{"position":[[663,12]]},"103":{"position":[[188,13]]}},"keywords":{}}],["accomplish",{"_index":917,"title":{},"content":{"61":{"position":[[328,10]]},"123":{"position":[[438,12]]},"189":{"position":[[1596,10]]},"209":{"position":[[1293,10]]},"1154":{"position":[[80,12]]},"1358":{"position":[[733,10]]},"1388":{"position":[[317,10]]}},"keywords":{}}],["accord",{"_index":5189,"title":{},"content":{"1020":{"position":[[70,9]]},"1186":{"position":[[489,9]]}},"keywords":{}}],["accordingli",{"_index":2257,"title":{},"content":{"208":{"position":[[1704,12]]},"221":{"position":[[1771,12]]},"752":{"position":[[184,12]]},"791":{"position":[[137,12]]},"1047":{"position":[[162,12]]},"1055":{"position":[[162,12]]},"1063":{"position":[[162,12]]},"1383":{"position":[[282,12]]}},"keywords":{}}],["account",{"_index":526,"title":{"278":{"position":[[12,7]]},"281":{"position":[[8,7]]},"415":{"position":[[29,8]]},"477":{"position":[[8,8]]},"478":{"position":[[8,7]]},"548":{"position":[[35,7]]},"571":{"position":[[39,7]]},"582":{"position":[[39,7]]},"598":{"position":[[8,8]]},"599":{"position":[[8,7]]},"609":{"position":[[39,7]]},"1082":{"position":[[48,10]]}},"content":{"19":{"position":[[564,7]]},"58":{"position":[[842,7]]},"81":{"position":[[483,8],[2277,7]]},"103":{"position":[[811,7]]},"107":{"position":[[702,8],[801,8]]},"113":{"position":[[665,7],[821,7]]},"123":{"position":[[398,10]]},"124":{"position":[[883,8]]},"136":{"position":[[40,7],[163,8],[340,7]]},"154":{"position":[[1522,8]]},"168":{"position":[[145,7]]},"169":{"position":[[12,7],[1372,7]]},"170":{"position":[[10,8]]},"173":{"position":[[58,7],[414,7],[459,8],[550,8],[753,7]]},"174":{"position":[[550,8]]},"179":{"position":[[17,8],[125,8]]},"183":{"position":[[578,7]]},"188":{"position":[[31,8],[131,7],[150,9]]},"191":{"position":[[2056,7]]},"192":{"position":[[835,7],[870,8],[884,7]]},"199":{"position":[[80,8]]},"202":{"position":[[174,7]]},"217":{"position":[[294,7]]},"234":{"position":[[463,8],[577,7]]},"240":{"position":[[2017,7],[2815,7]]},"262":{"position":[[50,7]]},"266":{"position":[[8,7],[64,7],[535,7]]},"267":{"position":[[946,7]]},"273":{"position":[[50,7]]},"277":{"position":[[218,8],[385,8],[1377,8]]},"278":{"position":[[173,7],[208,8],[281,7],[356,7]]},"279":{"position":[[174,7],[299,7]]},"280":{"position":[[186,7],[342,7],[431,7],[459,7],[585,7],[1534,7],[2080,9]]},"281":{"position":[[148,7],[289,7],[1720,7],[1813,8],[1885,7],[2000,7],[2985,10]]},"283":{"position":[[50,7]]},"288":{"position":[[125,8],[345,7],[480,8],[522,8],[556,7],[576,8],[597,7],[865,7],[935,7],[987,7]]},"290":{"position":[[271,7],[888,7],[1060,7]]},"299":{"position":[[125,8],[371,8],[512,7],[780,7],[850,7],[902,7]]},"301":{"position":[[224,7]]},"340":{"position":[[232,7]]},"344":{"position":[[82,8]]},"357":{"position":[[20,7]]},"359":{"position":[[249,8]]},"375":{"position":[[48,8]]},"383":{"position":[[28,7],[66,7]]},"415":{"position":[[32,8]]},"436":{"position":[[115,7],[424,7]]},"438":{"position":[[689,7],[737,8],[1144,7],[1321,8]]},"445":{"position":[[60,8]]},"449":{"position":[[430,8]]},"454":{"position":[[225,8]]},"464":{"position":[[27,7]]},"475":{"position":[[135,7],[250,7],[296,7]]},"477":{"position":[[64,7],[340,7],[437,7],[535,8],[652,7],[686,7],[878,8],[959,7]]},"478":{"position":[[9,7],[65,9],[136,7],[201,7],[350,8],[394,8],[470,7]]},"479":{"position":[[363,7]]},"482":{"position":[[317,7]]},"494":{"position":[[51,8],[113,7],[148,8]]},"500":{"position":[[61,8]]},"507":{"position":[[53,7]]},"509":{"position":[[331,8]]},"512":{"position":[[193,7]]},"514":{"position":[[68,7],[87,7]]},"515":{"position":[[79,8],[99,7],[411,7]]},"517":{"position":[[90,8],[627,7],[654,7],[4044,7]]},"521":{"position":[[329,9]]},"523":{"position":[[15,7]]},"524":{"position":[[15,7]]},"531":{"position":[[15,7]]},"532":{"position":[[15,7]]},"538":{"position":[[61,7]]},"543":{"position":[[108,8],[235,8],[329,7]]},"545":{"position":[[658,7],[674,7]]},"546":{"position":[[433,7],[851,7]]},"548":{"position":[[76,7],[115,8],[208,8],[422,7],[890,7],[1148,7]]},"552":{"position":[[61,7],[319,8],[340,8],[495,8]]},"553":{"position":[[24,9],[75,7],[134,7],[159,8],[219,7]]},"554":{"position":[[24,9],[87,7],[135,7],[197,7]]},"556":{"position":[[1645,8],[1840,8],[1891,7],[1920,8],[2002,7]]},"558":{"position":[[282,8]]},"562":{"position":[[82,7]]},"569":{"position":[[150,7],[261,7]]},"570":{"position":[[39,8],[81,7],[116,7]]},"571":{"position":[[39,8],[81,7],[180,8],[206,7],[574,7],[629,7],[739,7],[819,7],[867,7]]},"573":{"position":[[57,7],[493,7],[952,7]]},"577":{"position":[[268,7],[379,9]]},"581":{"position":[[474,7]]},"582":{"position":[[70,7],[185,7],[242,7],[352,7],[432,7],[484,7]]},"584":{"position":[[424,7]]},"588":{"position":[[263,7],[374,9]]},"591":{"position":[[32,7],[167,8],[209,8],[243,7],[263,8]]},"593":{"position":[[112,7]]},"594":{"position":[[421,7],[839,7]]},"597":{"position":[[134,7],[213,7],[259,7]]},"598":{"position":[[63,7],[304,7],[401,7],[499,8],[616,7],[650,7],[840,8],[921,7]]},"599":{"position":[[9,7],[65,9],[136,7],[201,7],[350,8],[394,8],[470,7]]},"601":{"position":[[180,7],[214,7]]},"607":{"position":[[148,7],[260,7]]},"608":{"position":[[110,7],[131,8]]},"609":{"position":[[32,7],[196,7],[296,7],[406,8]]},"611":{"position":[[426,7],[471,7],[614,7],[1017,8]]},"614":{"position":[[133,7],[244,7]]},"615":{"position":[[85,7]]},"617":{"position":[[132,8],[158,7],[496,7],[553,7],[663,7],[774,8]]},"619":{"position":[[57,7],[398,7]]},"629":{"position":[[65,7]]},"631":{"position":[[72,7],[91,7]]},"644":{"position":[[11,7]]},"645":{"position":[[11,7],[95,8],[228,7]]},"649":{"position":[[56,7],[555,8]]},"651":{"position":[[11,7]]},"652":{"position":[[11,7],[95,8],[228,7]]},"654":{"position":[[604,7]]},"655":{"position":[[395,8]]},"668":{"position":[[47,7],[152,7]]},"683":{"position":[[314,8]]},"712":{"position":[[130,7],[208,8],[342,7],[437,7]]},"717":{"position":[[25,8],[95,8]]},"720":{"position":[[253,7],[306,7],[402,9]]},"723":{"position":[[22,7],[44,7]]},"732":{"position":[[13,7]]},"733":{"position":[[13,7]]},"745":{"position":[[73,7]]},"791":{"position":[[653,7]]},"792":{"position":[[1973,7]]},"793":{"position":[[1327,7]]},"808":{"position":[[1273,7]]},"824":{"position":[[2095,7]]},"839":{"position":[[46,7]]},"840":{"position":[[19,7],[38,7],[127,7],[156,7],[292,7],[329,8],[2415,7],[2514,8]]},"842":{"position":[[79,7],[521,7]]},"843":{"position":[[113,8]]},"846":{"position":[[268,7]]},"848":{"position":[[46,7]]},"849":{"position":[[43,7],[62,7],[235,7],[272,8],[3555,7],[3648,7]]},"852":{"position":[[132,7]]},"855":{"position":[[45,7]]},"883":{"position":[[84,8]]},"889":{"position":[[9,7]]},"895":{"position":[[342,7]]},"899":{"position":[[65,7],[205,8],[229,7]]},"900":{"position":[[157,8]]},"940":{"position":[[17,7],[69,7]]},"946":{"position":[[291,8]]},"985":{"position":[[90,8],[366,8]]},"1000":{"position":[[90,8],[544,8]]},"1026":{"position":[[22,7],[66,8]]},"1031":{"position":[[50,7],[630,8],[678,7]]},"1032":{"position":[[18,7]]},"1034":{"position":[[207,8],[216,7],[238,7]]},"1037":{"position":[[164,8]]},"1074":{"position":[[1,7]]},"1076":{"position":[[72,7],[95,7]]},"1077":{"position":[[235,7]]},"1081":{"position":[[95,8]]},"1082":{"position":[[32,7],[168,7],[265,7]]},"1083":{"position":[[52,8],[168,8],[187,7]]},"1085":{"position":[[99,9],[138,8]]},"1086":{"position":[[72,9]]},"1105":{"position":[[11,7],[55,8]]},"1107":{"position":[[346,7]]},"1108":{"position":[[269,8]]},"1113":{"position":[[73,7],[91,7]]},"1114":{"position":[[131,7],[255,8]]},"1118":{"position":[[12,7],[47,7]]},"1128":{"position":[[70,7]]},"1133":{"position":[[349,8],[1040,7]]},"1176":{"position":[[151,7],[466,8]]},"1177":{"position":[[27,8],[122,8],[138,7],[330,7],[363,9]]},"1179":{"position":[[198,7],[247,7]]},"1185":{"position":[[51,7]]},"1186":{"position":[[80,8]]},"1211":{"position":[[255,8]]},"1213":{"position":[[154,7],[203,7]]},"1218":{"position":[[255,8]]},"1220":{"position":[[154,7],[203,7]]},"1227":{"position":[[107,7]]},"1228":{"position":[[122,7],[298,8],[369,7]]},"1230":{"position":[[347,7],[388,7]]},"1243":{"position":[[1199,7]]},"1244":{"position":[[53,7]]},"1245":{"position":[[74,8],[100,7],[448,7],[505,7],[615,7],[719,8]]},"1247":{"position":[[518,7],[559,7],[764,8]]},"1258":{"position":[[51,7]]},"1274":{"position":[[49,7],[102,7]]},"1292":{"position":[[330,7]]},"1303":{"position":[[1497,7]]},"1306":{"position":[[330,7]]},"1329":{"position":[[330,7]]},"1382":{"position":[[50,7],[424,7]]},"1383":{"position":[[2004,7]]},"1386":{"position":[[71,8],[635,8],[644,7],[666,7]]},"1394":{"position":[[480,7]]},"1417":{"position":[[57,7]]},"1420":{"position":[[235,8],[244,7],[259,7],[314,7]]},"1421":{"position":[[88,8],[97,7]]},"1461":{"position":[[3003,7],[3819,8]]}},"keywords":{}}],["account>@<anotherproject>.iam.gserviceaccount.com",{"_index":4094,"title":{},"content":{"548":{"position":[[1394,58]]}},"keywords":{}}],["account>@<project>.iam.gserviceaccount.com:generateaccesstoken",{"_index":4090,"title":{},"content":{"548":{"position":[[1054,71]]}},"keywords":{}}],["account'",{"_index":2024,"title":{},"content":{"173":{"position":[[822,9]]},"553":{"position":[[44,9]]},"554":{"position":[[44,9]]},"617":{"position":[[893,9]]},"842":{"position":[[1124,9],[1213,9]]},"1227":{"position":[[276,9]]},"1382":{"position":[[365,9]]}},"keywords":{}}],["account(",{"_index":4111,"title":{},"content":{"553":{"position":[[117,11]]}},"keywords":{}}],["account.a",{"_index":5463,"title":{},"content":{"1131":{"position":[[151,9]]}},"keywords":{}}],["account.contact",{"_index":1764,"title":{},"content":{"136":{"position":[[285,15]]}},"keywords":{}}],["account.in",{"_index":3250,"title":{},"content":{"349":{"position":[[28,10]]},"479":{"position":[[28,10]]},"1092":{"position":[[28,10]]}},"keywords":{}}],["account.navig",{"_index":4947,"title":{},"content":{"895":{"position":[[94,16]]}},"keywords":{}}],["account.not",{"_index":3815,"title":{},"content":{"477":{"position":[[612,12]]},"598":{"position":[[576,12]]}},"keywords":{}}],["account.secret",{"_index":5286,"title":{},"content":{"1074":{"position":[[27,14]]}},"keywords":{}}],["account_attribut",{"_index":5466,"title":{},"content":{"1134":{"position":[[289,18]]}},"keywords":{}}],["account_curr",{"_index":3976,"title":{},"content":{"518":{"position":[[339,17]]}},"keywords":{}}],["account_id",{"_index":3944,"title":{},"content":{"517":{"position":[[615,11]]},"518":{"position":[[219,11]]},"632":{"position":[[110,11]]},"721":{"position":[[184,12]]},"852":{"position":[[111,11]]},"1078":{"position":[[108,11]]}},"keywords":{}}],["account_sid",{"_index":5406,"title":{},"content":{"1114":{"position":[[109,12]]}},"keywords":{}}],["accountadmin",{"_index":2158,"title":{},"content":{"191":{"position":[[1914,12],[2014,13]]},"240":{"position":[[1875,12],[1975,13]]},"1383":{"position":[[1862,12],[1962,13]]}},"keywords":{}}],["accountallow",{"_index":4729,"title":{},"content":{"839":{"position":[[17,14]]},"848":{"position":[[17,14]]}},"keywords":{}}],["accountcan",{"_index":4808,"title":{},"content":{"846":{"position":[[78,10],[148,10]]}},"keywords":{}}],["accountcontactuseropportunityfilledhistoryleadhistoryopportunitycampaigncasecontactlineitementitlementleadlivechattranscriptmessagingsessionquotequotelineitemserviceappointmentservicecontracttaskuserservicepresenceworkorderworkorderlineitem",{"_index":5141,"title":{},"content":{"985":{"position":[[100,240]]},"1000":{"position":[[100,240]]}},"keywords":{}}],["accountid",{"_index":2163,"title":{},"content":{"192":{"position":[[975,9]]}},"keywords":{}}],["accountid.region.cloudprovider.snowflakecomputing.com",{"_index":2160,"title":{},"content":{"192":{"position":[[717,53]]}},"keywords":{}}],["accountinstagram",{"_index":4414,"title":{},"content":{"668":{"position":[[21,16]]}},"keywords":{}}],["accountnam",{"_index":2164,"title":{},"content":{"192":{"position":[[988,12]]}},"keywords":{}}],["accountname.snowflakecomputing.com",{"_index":2162,"title":{},"content":{"192":{"position":[[782,35]]},"288":{"position":[[1014,35]]},"299":{"position":[[929,35]]},"1034":{"position":[[125,34]]},"1386":{"position":[[146,34]]},"1387":{"position":[[140,34],[694,34]]}},"keywords":{}}],["accountname.snowflakecomputing.com.at",{"_index":6360,"title":{},"content":{"1382":{"position":[[465,37]]}},"keywords":{}}],["accounts)ep",{"_index":4013,"title":{},"content":{"521":{"position":[[252,13]]}},"keywords":{}}],["accountsaccount",{"_index":3727,"title":{},"content":{"443":{"position":[[46,15]]},"715":{"position":[[46,15]]}},"keywords":{}}],["accountsaddressesalertsapplicationsavail",{"_index":5389,"title":{},"content":{"1110":{"position":[[70,44]]}},"keywords":{}}],["accountsagentsag",{"_index":5384,"title":{},"content":{"1104":{"position":[[70,19]]}},"keywords":{}}],["accountscampaignsimagesvideo",{"_index":3930,"title":{},"content":{"512":{"position":[[97,29]]}},"keywords":{}}],["accountschargescheckout",{"_index":5277,"title":{},"content":{"1073":{"position":[[94,23]]}},"keywords":{}}],["accountsplanssubscript",{"_index":3754,"title":{},"content":{"451":{"position":[[120,26]]}},"keywords":{}}],["accountwith",{"_index":5882,"title":{},"content":{"1211":{"position":[[156,11]]},"1218":{"position":[[156,11]]}},"keywords":{}}],["acct_",{"_index":5287,"title":{},"content":{"1076":{"position":[[119,8]]}},"keywords":{}}],["accumul",{"_index":1601,"title":{"113":{"position":[[9,12]]},"114":{"position":[[0,10]]},"115":{"position":[[0,10]]}},"content":{"113":{"position":[[514,12]]},"114":{"position":[[9,10]]},"115":{"position":[[4,10]]},"121":{"position":[[284,11]]},"281":{"position":[[3416,12]]}},"keywords":{}}],["accumulate?"",{"_index":2908,"title":{},"content":{"281":{"position":[[3338,17]]}},"keywords":{}}],["accur",{"_index":1955,"title":{},"content":{"165":{"position":[[349,8]]},"211":{"position":[[896,11]]},"324":{"position":[[755,8]]},"332":{"position":[[49,8]]},"595":{"position":[[898,8]]},"1036":{"position":[[971,8]]}},"keywords":{}}],["accuraci",{"_index":2174,"title":{},"content":{"196":{"position":[[510,8]]},"233":{"position":[[517,8]]},"237":{"position":[[1478,8]]},"366":{"position":[[876,8]]},"584":{"position":[[1204,9]]},"750":{"position":[[587,8]]},"766":{"position":[[587,8]]},"789":{"position":[[575,8]]},"807":{"position":[[575,8]]},"823":{"position":[[575,8]]},"903":{"position":[[902,8]]},"915":{"position":[[902,8]]},"930":{"position":[[902,8]]},"963":{"position":[[1056,8]]},"1040":{"position":[[618,8]]},"1050":{"position":[[618,8]]},"1058":{"position":[[618,8]]}},"keywords":{}}],["achiev",{"_index":523,"title":{},"content":{"19":{"position":[[468,9]]},"42":{"position":[[685,7]]},"49":{"position":[[149,7]]},"162":{"position":[[661,7]]},"240":{"position":[[3877,7]]},"241":{"position":[[299,12]]},"329":{"position":[[315,7]]},"1156":{"position":[[283,7]]}},"keywords":{}}],["acknowledg",{"_index":4292,"title":{"1442":{"position":[[0,12]]}},"content":{"602":{"position":[[23,12],[134,15],[539,12]]},"922":{"position":[[2918,13]]},"1434":{"position":[[688,11],[723,12],[765,12],[989,12],[1118,11],[2251,11],[2273,13]]},"1442":{"position":[[1,11],[17,12],[251,12],[322,11],[338,12],[368,12],[400,11],[459,12],[625,13],[684,14],[968,15],[1302,15],[1396,13],[1503,16],[1633,12],[1712,12],[1831,12]]},"1443":{"position":[[592,12],[618,12]]},"1444":{"position":[[1044,11]]},"1452":{"position":[[1687,12],[1947,13],[2042,13]]},"1453":{"position":[[106,15],[466,16],[559,15],[1040,12],[1129,16]]}},"keywords":{}}],["acm",{"_index":201,"title":{},"content":{"6":{"position":[[106,4]]},"8":{"position":[[107,4]]},"337":{"position":[[326,4]]},"1461":{"position":[[922,4],[1188,4],[2978,4],[3022,4],[4503,4],[4647,4],[4694,4]]}},"keywords":{}}],["acme'",{"_index":6625,"title":{},"content":{"1461":{"position":[[4578,6]]}},"keywords":{}}],["acme/customers/customerinfo",{"_index":6595,"title":{},"content":{"1461":{"position":[[1038,27]]}},"keywords":{}}],["acme/flow.yaml",{"_index":6606,"title":{},"content":{"1461":{"position":[[1921,15]]}},"keywords":{}}],["acme/insid",{"_index":6636,"title":{},"content":{"1462":{"position":[[595,11]]}},"keywords":{}}],["acme/products/flow.yaml",{"_index":6610,"title":{},"content":{"1461":{"position":[[2206,23]]}},"keywords":{}}],["acme/products/info",{"_index":6611,"title":{},"content":{"1461":{"position":[[2401,19]]}},"keywords":{}}],["acme/products/info/flow.yaml",{"_index":6613,"title":{},"content":{"1461":{"position":[[2493,28]]}},"keywords":{}}],["acme/products/info/manufactur",{"_index":6596,"title":{},"content":{"1461":{"position":[[1066,32]]}},"keywords":{}}],["acme/products/info/sku",{"_index":6597,"title":{},"content":{"1461":{"position":[[1099,23]]}},"keywords":{}}],["acme/products/inventori",{"_index":6598,"title":{},"content":{"1461":{"position":[[1123,23]]}},"keywords":{}}],["acme/sales/complet",{"_index":6600,"title":{},"content":{"1461":{"position":[[1166,19]]}},"keywords":{}}],["acme/sales/flow.yaml",{"_index":6612,"title":{},"content":{"1461":{"position":[[2461,20]]}},"keywords":{}}],["acme/sales/pend",{"_index":6599,"title":{},"content":{"1461":{"position":[[1147,18]]}},"keywords":{}}],["acme_product",{"_index":6620,"title":{},"content":{"1461":{"position":[[3828,15],[3936,15]]}},"keywords":{}}],["acmebank",{"_index":2824,"title":{"276":{"position":[[29,8]]}},"content":{},"keywords":{}}],["acmebank/bal",{"_index":2881,"title":{},"content":{"281":{"position":[[878,18],[1338,18]]}},"keywords":{}}],["acmebank/first",{"_index":2839,"title":{},"content":{"278":{"position":[[890,14]]}},"keywords":{}}],["acmebank/group",{"_index":2854,"title":{},"content":{"279":{"position":[[1031,16]]}},"keywords":{}}],["acmebank/last",{"_index":2829,"title":{},"content":{"277":{"position":[[556,13]]}},"keywords":{}}],["acmebank/transf",{"_index":2832,"title":{},"content":{"277":{"position":[[697,18]]},"278":{"position":[[1139,18]]},"279":{"position":[[1487,18],[1600,18]]},"280":{"position":[[1144,17],[1634,18],[1945,17]]},"281":{"position":[[1033,17]]}},"keywords":{}}],["acmeco",{"_index":2793,"title":{},"content":{"267":{"position":[[371,7],[1459,7]]},"270":{"position":[[1088,7]]},"337":{"position":[[358,7],[429,7]]},"338":{"position":[[355,7],[415,7],[468,7]]},"341":{"position":[[319,6]]},"344":{"position":[[91,6]]}},"keywords":{}}],["acmeco*mysql",{"_index":1825,"title":{},"content":{"142":{"position":[[1060,13]]}},"keywords":{}}],["acmeco*sourc",{"_index":1779,"title":{},"content":{"138":{"position":[[1081,13]]}},"keywords":{}}],["acmeco/'",{"_index":3228,"title":{},"content":{"341":{"position":[[483,9]]}},"keywords":{}}],["acmeco/anvil",{"_index":1822,"title":{},"content":{"142":{"position":[[985,12]]},"344":{"position":[[342,13]]}},"keywords":{}}],["acmeco/anvil/ord",{"_index":1689,"title":{},"content":{"123":{"position":[[217,20],[655,19]]}},"keywords":{}}],["acmeco/anvils/captur",{"_index":6668,"title":{},"content":{"1471":{"position":[[280,21],[327,21]]}},"keywords":{}}],["acmeco/anvils/log",{"_index":6672,"title":{},"content":{"1472":{"position":[[634,19],[926,22]]}},"keywords":{}}],["acmeco/anvils/materi",{"_index":6669,"title":{},"content":{"1471":{"position":[[833,29]]}},"keywords":{}}],["acmeco/collect",{"_index":1053,"title":{},"content":{"70":{"position":[[683,18]]},"132":{"position":[[473,17],[633,17]]},"133":{"position":[[409,17]]}},"keywords":{}}],["acmeco/color",{"_index":1657,"title":{},"content":{"121":{"position":[[905,14],[1181,13]]}},"keywords":{}}],["acmeco/compound",{"_index":1069,"title":{},"content":{"73":{"position":[[179,15]]}},"keywords":{}}],["acmeco/coordin",{"_index":1898,"title":{},"content":{"161":{"position":[[628,19]]}},"keywords":{}}],["acmeco/coyot",{"_index":1968,"title":{},"content":{"166":{"position":[[328,15]]}},"keywords":{}}],["acmeco/custom",{"_index":1130,"title":{},"content":{"81":{"position":[[2044,16]]}},"keywords":{}}],["acmeco/data",{"_index":3048,"title":{},"content":{"307":{"position":[[1482,11],[2350,11]]},"309":{"position":[[2301,11],[2908,11]]}},"keywords":{}}],["acmeco/debugmateri",{"_index":256,"title":{},"content":{"7":{"position":[[712,28]]}},"keywords":{}}],["acmeco/example/a",{"_index":1649,"title":{},"content":{"120":{"position":[[2863,16]]}},"keywords":{}}],["acmeco/example/anoth",{"_index":852,"title":{},"content":{"56":{"position":[[2053,22]]}},"keywords":{}}],["acmeco/example/collect",{"_index":848,"title":{},"content":{"56":{"position":[[1641,25]]},"120":{"position":[[1069,25]]},"122":{"position":[[1187,25]]},"1480":{"position":[[775,25]]}},"keywords":{}}],["acmeco/example/databas",{"_index":1646,"title":{},"content":{"120":{"position":[[218,23]]},"121":{"position":[[1116,23]]},"122":{"position":[[1122,23]]},"123":{"position":[[497,23]]},"1480":{"position":[[155,23]]}},"keywords":{}}],["acmeco/example/sourc",{"_index":830,"title":{},"content":{"56":{"position":[[186,21]]}},"keywords":{}}],["acmeco/greet",{"_index":1721,"title":{},"content":{"128":{"position":[[667,16]]},"129":{"position":[[1000,16]]},"130":{"position":[[151,16]]}},"keywords":{}}],["acmeco/integ",{"_index":1900,"title":{},"content":{"161":{"position":[[704,14]]}},"keywords":{}}],["acmeco/inventory/anvil",{"_index":1029,"title":{},"content":{"68":{"position":[[880,23]]},"307":{"position":[[1236,23],[1273,24],[1661,23],[2625,23]]},"309":{"position":[[2107,24],[2480,23],[2704,24],[3087,23]]}},"keywords":{}}],["acmeco/inventory/anvils_v2",{"_index":3052,"title":{},"content":{"307":{"position":[[2098,26],[2138,27],[2529,26]]}},"keywords":{}}],["acmeco/inventory/sourc",{"_index":3042,"title":{},"content":{"307":{"position":[[1025,23],[1875,23]]}},"keywords":{}}],["acmeco/logistics/anvil",{"_index":1777,"title":{},"content":{"138":{"position":[[998,22]]}},"keywords":{}}],["acmeco/my/deriv",{"_index":1334,"title":{},"content":{"94":{"position":[[135,21]]}},"keywords":{}}],["acmeco/my/source/collect",{"_index":1347,"title":{},"content":{"94":{"position":[[1406,27]]}},"keywords":{}}],["acmeco/my_time_seri",{"_index":6424,"title":{},"content":{"1429":{"position":[[604,21],[905,21]]}},"keywords":{}}],["acmeco/myfirestorecaptur",{"_index":2926,"title":{},"content":{"290":{"position":[[693,26]]}},"keywords":{}}],["acmeco/myfirstcaptur",{"_index":2429,"title":{},"content":{"217":{"position":[[884,22]]}},"keywords":{}}],["acmeco/myfirstmateri",{"_index":2431,"title":{},"content":{"218":{"position":[[423,30]]}},"keywords":{}}],["acmeco/mys3captur",{"_index":3033,"title":{},"content":{"301":{"position":[[633,19]]}},"keywords":{}}],["acmeco/mysnowflakemateri",{"_index":2929,"title":{},"content":{"291":{"position":[[347,34]]},"302":{"position":[[347,34]]}},"keywords":{}}],["acmeco/ord",{"_index":10,"title":{},"content":{"1":{"position":[[133,14]]},"96":{"position":[[173,13]]},"107":{"position":[[1469,13],[2649,13],[3303,13],[4021,13]]}},"keywords":{}}],["acmeco/peopl",{"_index":1714,"title":{},"content":{"128":{"position":[[351,13],[490,13]]},"129":{"position":[[735,13],[863,13]]}},"keywords":{}}],["acmeco/posit",{"_index":1903,"title":{},"content":{"161":{"position":[[796,15]]}},"keywords":{}}],["acmeco/postgr",{"_index":1122,"title":{},"content":{"81":{"position":[[1043,15],[2555,15]]},"83":{"position":[[918,15]]}},"keywords":{}}],["acmeco/produc",{"_index":1641,"title":{},"content":{"117":{"position":[[379,14]]}},"keywords":{}}],["acmeco/products/anvil",{"_index":1035,"title":{},"content":{"69":{"position":[[205,23]]},"76":{"position":[[370,23]]},"81":{"position":[[1459,22],[1755,24]]}},"keywords":{}}],["acmeco/products/tnt",{"_index":1128,"title":{},"content":{"81":{"position":[[1984,19]]}},"keywords":{}}],["acmeco/resources/anvil",{"_index":2794,"title":{},"content":{"267":{"position":[[400,23],[817,22]]},"268":{"position":[[780,22],[1006,23]]},"269":{"position":[[405,22],[616,23]]},"270":{"position":[[782,23]]}},"keywords":{}}],["acmeco/sal",{"_index":922,"title":{},"content":{"61":{"position":[[661,13]]}},"keywords":{}}],["acmeco/snowflak",{"_index":3238,"title":{},"content":{"344":{"position":[[19,16]]}},"keywords":{}}],["acmeco/teams/manufactur",{"_index":636,"title":{},"content":{"27":{"position":[[639,28]]}},"keywords":{}}],["acmeco/teams/manufacturing/anvil",{"_index":624,"title":{},"content":{"27":{"position":[[100,34]]}},"keywords":{}}],["acmeco/tests/greet",{"_index":1715,"title":{},"content":{"128":{"position":[[388,23]]},"129":{"position":[[689,23]]},"130":{"position":[[105,23]]}},"keywords":{}}],["acmeco/tests/on",{"_index":1741,"title":{},"content":{"133":{"position":[[356,17]]}},"keywords":{}}],["acmeco/tests/sum",{"_index":1735,"title":{},"content":{"132":{"position":[[378,16]]}},"keywords":{}}],["acmeco/tests/two",{"_index":1743,"title":{},"content":{"133":{"position":[[486,17]]}},"keywords":{}}],["acmeco/us",{"_index":451,"title":{},"content":{"16":{"position":[[144,11]]},"71":{"position":[[199,13],[305,13]]},"74":{"position":[[424,12]]}},"keywords":{}}],["acmeco/whoop",{"_index":1890,"title":{},"content":{"160":{"position":[[723,14]]}},"keywords":{}}],["acmeco_db",{"_index":3239,"title":{},"content":{"344":{"position":[[108,9]]},"1387":{"position":[[116,9],[670,9]]}},"keywords":{}}],["acmeco_flow_schema",{"_index":3241,"title":{},"content":{"344":{"position":[[181,18]]},"1387":{"position":[[183,18],[737,18]]}},"keywords":{}}],["acmeco_warehous",{"_index":3243,"title":{},"content":{"344":{"position":[[232,16]]},"1387":{"position":[[213,16],[767,16]]}},"keywords":{}}],["acmeconew/market",{"_index":955,"title":{},"content":{"63":{"position":[[1218,23]]}},"keywords":{}}],["acmemodule.t",{"_index":1340,"title":{},"content":{"94":{"position":[[1015,13]]}},"keywords":{}}],["acmesupport.freshdesk.com",{"_index":3924,"title":{},"content":{"510":{"position":[[145,25]]}},"keywords":{}}],["aco",{"_index":5526,"title":{},"content":{"1140":{"position":[[474,4]]},"1316":{"position":[[474,4]]},"1340":{"position":[[474,4]]},"1351":{"position":[[474,4]]},"1431":{"position":[[497,4]]}},"keywords":{}}],["aconnect",{"_index":5126,"title":{},"content":{"964":{"position":[[77,11]]}},"keywords":{}}],["acquir",{"_index":5757,"title":{},"content":{"1156":{"position":[[506,8],[641,9]]}},"keywords":{}}],["acronym",{"_index":3664,"title":{},"content":{"429":{"position":[[1208,7]]}},"keywords":{}}],["act",{"_index":759,"title":{},"content":{"44":{"position":[[311,5]]},"69":{"position":[[622,3]]},"305":{"position":[[215,3]]},"347":{"position":[[102,6]]},"370":{"position":[[1580,4]]},"1138":{"position":[[871,4]]}},"keywords":{}}],["action",{"_index":909,"title":{},"content":{"60":{"position":[[955,7]]},"110":{"position":[[618,6],[1014,6]]},"138":{"position":[[254,7]]},"141":{"position":[[564,7]]},"142":{"position":[[367,7]]},"210":{"position":[[1561,6]]},"255":{"position":[[1300,7]]},"296":{"position":[[8019,7]]},"316":{"position":[[1625,7]]},"339":{"position":[[132,7]]},"517":{"position":[[971,6]]},"747":{"position":[[304,7]]},"759":{"position":[[252,6]]},"772":{"position":[[263,6]]},"799":{"position":[[250,6]]},"814":{"position":[[250,6]]},"830":{"position":[[250,6]]},"1020":{"position":[[477,7]]},"1140":{"position":[[513,6]]},"1292":{"position":[[368,6]]},"1306":{"position":[[368,6]]},"1316":{"position":[[513,6]]},"1329":{"position":[[368,6]]},"1340":{"position":[[513,6]]},"1351":{"position":[[513,6]]},"1370":{"position":[[373,6]]},"1379":{"position":[[454,6]]},"1403":{"position":[[454,6]]},"1414":{"position":[[454,6]]},"1431":{"position":[[536,6]]},"1465":{"position":[[644,6],[708,7],[778,6],[955,7],[1231,7],[1281,7],[1497,7],[1549,7]]}},"keywords":{}}],["action_breakdown",{"_index":3946,"title":{},"content":{"517":{"position":[[910,17],[952,18],[1006,17],[1060,19]]},"518":{"position":[[387,18]]}},"keywords":{}}],["action_typ",{"_index":3978,"title":{},"content":{"518":{"position":[[406,13]]}},"keywords":{}}],["activ",{"_index":386,"title":{},"content":{"13":{"position":[[477,6]]},"26":{"position":[[407,9]]},"33":{"position":[[27,6]]},"53":{"position":[[499,8]]},"60":{"position":[[441,6]]},"61":{"position":[[475,6],[759,6]]},"82":{"position":[[730,6]]},"107":{"position":[[2882,6]]},"138":{"position":[[1221,8]]},"141":{"position":[[1304,8]]},"142":{"position":[[1198,8]]},"159":{"position":[[937,9]]},"169":{"position":[[29,9]]},"173":{"position":[[367,6]]},"221":{"position":[[1,8]]},"274":{"position":[[25,6]]},"309":{"position":[[249,8]]},"357":{"position":[[4,6]]},"421":{"position":[[73,6]]},"435":{"position":[[68,6]]},"436":{"position":[[299,6]]},"500":{"position":[[46,6]]},"518":{"position":[[1455,10]]},"562":{"position":[[62,6]]},"568":{"position":[[129,6],[153,6],[176,6],[195,6],[213,6]]},"571":{"position":[[484,8]]},"580":{"position":[[52,6],[83,6],[147,6]]},"581":{"position":[[161,8]]},"617":{"position":[[406,8]]},"622":{"position":[[74,8]]},"717":{"position":[[39,6]]},"738":{"position":[[99,8],[145,10],[238,10],[264,8],[404,8]]},"922":{"position":[[1022,6],[2444,6],[2895,8]]},"942":{"position":[[322,6]]},"945":{"position":[[975,6]]},"1008":{"position":[[1052,6]]},"1036":{"position":[[39,6]]},"1077":{"position":[[674,7]]},"1082":{"position":[[193,6]]},"1156":{"position":[[72,6],[884,8]]},"1245":{"position":[[358,8]]},"1292":{"position":[[409,6]]},"1306":{"position":[[409,6]]},"1329":{"position":[[409,6]]},"1361":{"position":[[59,6]]},"1388":{"position":[[158,9],[300,6]]},"1442":{"position":[[723,8]]},"1452":{"position":[[640,6],[1249,7],[3780,7]]},"1461":{"position":[[5120,8]]}},"keywords":{}}],["active_us",{"_index":3647,"title":{},"content":{"425":{"position":[[462,12]]}},"keywords":{}}],["activities_send_email",{"_index":4542,"title":{},"content":{"738":{"position":[[184,21]]}},"keywords":{}}],["activities_x",{"_index":4540,"title":{},"content":{"738":{"position":[[72,12]]}},"keywords":{}}],["activitiesad",{"_index":3927,"title":{},"content":{"512":{"position":[[52,12]]}},"keywords":{}}],["actual",{"_index":1723,"title":{},"content":{"129":{"position":[[383,6]]},"160":{"position":[[676,8]]},"172":{"position":[[230,6]]},"210":{"position":[[387,6]]},"236":{"position":[[2019,6],[2663,8]]},"284":{"position":[[645,6]]},"296":{"position":[[5096,6],[6608,6]]},"314":{"position":[[2490,6]]},"315":{"position":[[1180,6]]},"321":{"position":[[1746,8],[1883,8]]},"322":{"position":[[1647,8]]},"1453":{"position":[[810,9]]},"1471":{"position":[[941,6]]}},"keywords":{}}],["acycl",{"_index":2867,"title":{},"content":{"280":{"position":[[905,7],[973,8]]}},"keywords":{}}],["ad",{"_index":70,"title":{"308":{"position":[[15,6]]},"380":{"position":[[7,3]]},"442":{"position":[[5,3]]},"549":{"position":[[7,3]]},"714":{"position":[[9,3]]}},"content":{"2":{"position":[[142,5]]},"3":{"position":[[1064,5]]},"4":{"position":[[487,2]]},"7":{"position":[[628,6]]},"38":{"position":[[346,5]]},"42":{"position":[[417,5]]},"55":{"position":[[63,6]]},"67":{"position":[[74,5]]},"82":{"position":[[1947,6],[3946,5],[4281,6]]},"84":{"position":[[1384,5]]},"90":{"position":[[545,5]]},"105":{"position":[[885,5]]},"120":{"position":[[2738,5],[2789,5]]},"121":{"position":[[1260,5]]},"122":{"position":[[1553,5]]},"126":{"position":[[413,5],[462,5],[543,5]]},"128":{"position":[[199,5],[462,5]]},"138":{"position":[[587,5]]},"156":{"position":[[627,5]]},"162":{"position":[[83,5],[745,6]]},"163":{"position":[[59,5]]},"173":{"position":[[322,2]]},"208":{"position":[[898,6]]},"253":{"position":[[1541,5],[2567,5]]},"254":{"position":[[1975,6],[3841,5]]},"271":{"position":[[130,6],[411,6]]},"292":{"position":[[208,6]]},"295":{"position":[[198,7]]},"296":{"position":[[7915,5],[8055,6]]},"303":{"position":[[199,6]]},"308":{"position":[[135,5],[400,5],[1022,5]]},"313":{"position":[[1541,5],[2567,5]]},"338":{"position":[[540,6]]},"364":{"position":[[589,3],[729,3],[1371,3],[2345,3]]},"381":{"position":[[71,2],[215,2],[242,2],[280,3],[361,2]]},"383":{"position":[[62,3]]},"384":{"position":[[240,3]]},"385":{"position":[[516,3]]},"386":{"position":[[257,3]]},"387":{"position":[[519,3],[636,3],[727,3],[1393,3]]},"419":{"position":[[1232,5]]},"427":{"position":[[385,5]]},"440":{"position":[[1248,5]]},"445":{"position":[[56,3]]},"446":{"position":[[33,3],[204,3]]},"447":{"position":[[255,3]]},"448":{"position":[[1278,3]]},"480":{"position":[[454,5],[724,5],[887,5]]},"492":{"position":[[406,6]]},"512":{"position":[[94,2]]},"514":{"position":[[84,2]]},"515":{"position":[[96,2],[408,2],[839,3]]},"517":{"position":[[87,2],[651,2],[2906,2],[3070,4]]},"518":{"position":[[1537,3]]},"547":{"position":[[1234,5]]},"552":{"position":[[57,3],[131,3],[407,3]]},"553":{"position":[[20,3],[113,3],[215,3]]},"554":{"position":[[20,3],[75,3],[131,3],[152,3],[185,3]]},"555":{"position":[[254,3]]},"556":{"position":[[344,2],[371,2],[464,4],[631,3],[748,3],[2257,2]]},"558":{"position":[[278,3]]},"560":{"position":[[15,3],[369,3]]},"577":{"position":[[68,2]]},"588":{"position":[[63,2]]},"665":{"position":[[406,6]]},"668":{"position":[[149,2]]},"680":{"position":[[406,6]]},"695":{"position":[[406,6]]},"717":{"position":[[22,2],[92,2]]},"719":{"position":[[254,3]]},"720":{"position":[[868,3]]},"747":{"position":[[264,3],[331,2]]},"821":{"position":[[615,2],[1431,5],[1563,5]]},"895":{"position":[[222,5]]},"900":{"position":[[186,2],[197,5]]},"912":{"position":[[631,2],[1307,6],[1351,2]]},"1009":{"position":[[889,5]]},"1020":{"position":[[214,5],[272,5],[1238,5],[1460,5],[1525,5],[1627,5],[1719,5],[1857,5],[2080,5]]},"1023":{"position":[[1215,5]]},"1080":{"position":[[89,2],[103,3],[125,3],[148,3],[170,3],[283,2],[312,2],[340,2],[574,2],[611,2],[647,3],[679,3]]},"1156":{"position":[[152,5]]},"1232":{"position":[[123,6]]},"1359":{"position":[[338,5]]},"1429":{"position":[[205,6]]},"1448":{"position":[[73,5]]},"1466":{"position":[[43,6]]},"1477":{"position":[[749,6]]}},"keywords":{}}],["ad_account",{"_index":3979,"title":{},"content":{"518":{"position":[[483,10]]}},"keywords":{}}],["ad_cr",{"_index":4000,"title":{},"content":{"518":{"position":[[1605,12]]}},"keywords":{}}],["ad_group_adsad_group_ad_labelad_groupsad_group_labelcampaignscampaign_labelsclick_viewcustomergeographic_viewkeyword_viewuser_location_viewaccount_performance_reportad_performance_reportdisplay_keyword_performance_reportdisplay_topics_performance_reportshopping_performance_report",{"_index":4102,"title":{},"content":{"550":{"position":[[130,280]]}},"keywords":{}}],["ad_id",{"_index":3975,"title":{},"content":{"518":{"position":[[331,7]]}},"keywords":{}}],["ad_set",{"_index":3981,"title":{},"content":{"518":{"position":[[565,7]]}},"keywords":{}}],["ada",{"_index":5941,"title":{},"content":{"1274":{"position":[[257,3]]},"1277":{"position":[[624,3],[676,3]]},"1379":{"position":[[506,3]]},"1403":{"position":[[506,3]]},"1414":{"position":[[506,3]]}},"keywords":{}}],["adaccountsadsadsquadscampaignscreativesmediaorganizationssegmentsadaccountsstatshourlyadaccountsstatsdailyadaccountsstatslifetimeadsstatshourlyadsstatsdailyadsstatshourlyadsstatsdailyadsstatslifetimeadsquadsstatsdailyadsquadsstatslifetimecampaignsstatshourlycampaignsstatsdailycampaignsstatslifetim",{"_index":5208,"title":{},"content":{"1025":{"position":[[73,299]]}},"keywords":{}}],["adapt",{"_index":1697,"title":{},"content":{"124":{"position":[[474,10]]},"239":{"position":[[2632,10]]},"364":{"position":[[486,7]]}},"keywords":{}}],["add",{"_index":385,"title":{"174":{"position":[[0,3]]},"183":{"position":[[0,3]]},"268":{"position":[[0,3]]},"269":{"position":[[0,3]]}},"content":{"13":{"position":[[415,3]]},"33":{"position":[[337,3]]},"35":{"position":[[239,4]]},"43":{"position":[[60,3]]},"44":{"position":[[351,4]]},"54":{"position":[[634,3]]},"55":{"position":[[342,3],[1006,3]]},"56":{"position":[[461,3]]},"58":{"position":[[291,3]]},"63":{"position":[[323,3]]},"67":{"position":[[217,3]]},"80":{"position":[[214,3]]},"82":{"position":[[1099,4]]},"83":{"position":[[692,3],[794,3]]},"90":{"position":[[111,3]]},"100":{"position":[[197,3],[524,3],[697,3]]},"105":{"position":[[976,3]]},"110":{"position":[[665,4]]},"128":{"position":[[14,3]]},"160":{"position":[[145,4]]},"166":{"position":[[661,3]]},"169":{"position":[[530,3]]},"171":{"position":[[141,3]]},"172":{"position":[[140,3]]},"173":{"position":[[655,3],[864,3]]},"174":{"position":[[63,3]]},"183":{"position":[[2280,3]]},"184":{"position":[[249,3],[647,3],[771,3]]},"192":{"position":[[1477,3]]},"204":{"position":[[449,4]]},"206":{"position":[[83,3]]},"218":{"position":[[1059,3]]},"223":{"position":[[865,3]]},"224":{"position":[[727,3]]},"225":{"position":[[485,3]]},"228":{"position":[[743,3],[1024,4],[1306,3]]},"229":{"position":[[433,3]]},"230":{"position":[[822,3],[1125,3]]},"236":{"position":[[3629,3]]},"237":{"position":[[1901,3],[2238,3]]},"239":{"position":[[1797,3]]},"254":{"position":[[203,3],[1772,3]]},"259":{"position":[[558,3],[2252,3]]},"270":{"position":[[1213,3],[1504,3]]},"271":{"position":[[181,3]]},"285":{"position":[[282,3]]},"288":{"position":[[492,3]]},"291":{"position":[[14,3]]},"295":{"position":[[1129,3]]},"296":{"position":[[203,3],[7833,3]]},"301":{"position":[[964,3]]},"302":{"position":[[14,3]]},"308":{"position":[[757,3],[801,3],[926,3]]},"309":{"position":[[1056,3],[3297,3]]},"314":{"position":[[203,3],[1589,3]]},"321":{"position":[[65,3],[2391,3]]},"325":{"position":[[578,4]]},"326":{"position":[[115,3]]},"374":{"position":[[318,3]]},"414":{"position":[[772,3]]},"415":{"position":[[957,3]]},"436":{"position":[[687,3]]},"483":{"position":[[772,3]]},"488":{"position":[[370,3]]},"523":{"position":[[127,3]]},"548":{"position":[[590,3]]},"552":{"position":[[683,3]]},"571":{"position":[[803,3]]},"582":{"position":[[416,3]]},"591":{"position":[[179,3]]},"606":{"position":[[52,3],[137,3]]},"659":{"position":[[527,3]]},"676":{"position":[[370,3]]},"691":{"position":[[370,3]]},"757":{"position":[[2496,3]]},"760":{"position":[[587,3],[891,3]]},"761":{"position":[[589,3]]},"770":{"position":[[2496,3]]},"773":{"position":[[587,3],[891,3]]},"774":{"position":[[589,3]]},"797":{"position":[[2504,3]]},"800":{"position":[[587,3],[891,3]]},"801":{"position":[[595,3]]},"805":{"position":[[200,3]]},"808":{"position":[[220,3]]},"812":{"position":[[2504,3]]},"815":{"position":[[587,3],[891,3]]},"816":{"position":[[595,3]]},"820":{"position":[[200,3]]},"828":{"position":[[2504,3]]},"831":{"position":[[587,3],[891,3]]},"832":{"position":[[595,3]]},"836":{"position":[[200,3]]},"840":{"position":[[1077,3],[1176,3],[1273,3],[1369,3]]},"849":{"position":[[2088,3],[2201,3]]},"864":{"position":[[1477,3],[1622,6]]},"904":{"position":[[1991,3]]},"917":{"position":[[1500,3]]},"918":{"position":[[2283,3]]},"919":{"position":[[2338,3]]},"931":{"position":[[220,3],[1653,3]]},"944":{"position":[[426,3],[454,3]]},"945":{"position":[[502,3]]},"947":{"position":[[836,3]]},"964":{"position":[[747,3]]},"965":{"position":[[1500,3]]},"1008":{"position":[[1808,3]]},"1042":{"position":[[446,3],[916,3]]},"1043":{"position":[[1110,3],[1580,3]]},"1047":{"position":[[275,3]]},"1051":{"position":[[1372,3],[1842,3]]},"1055":{"position":[[275,3]]},"1059":{"position":[[220,3],[1165,3],[1635,3]]},"1063":{"position":[[275,3]]},"1140":{"position":[[544,3]]},"1155":{"position":[[599,3]]},"1177":{"position":[[396,3]]},"1189":{"position":[[375,3]]},"1197":{"position":[[381,3]]},"1204":{"position":[[142,3]]},"1207":{"position":[[464,3]]},"1247":{"position":[[915,3]]},"1248":{"position":[[408,3]]},"1289":{"position":[[669,3]]},"1292":{"position":[[446,3]]},"1297":{"position":[[39,3]]},"1298":{"position":[[865,3]]},"1303":{"position":[[220,3]]},"1306":{"position":[[446,3]]},"1316":{"position":[[544,3]]},"1329":{"position":[[446,3]]},"1340":{"position":[[544,3]]},"1345":{"position":[[39,3]]},"1346":{"position":[[865,3]]},"1351":{"position":[[544,3]]},"1357":{"position":[[313,3]]},"1370":{"position":[[385,3]]},"1379":{"position":[[556,3]]},"1387":{"position":[[414,3],[1040,3]]},"1397":{"position":[[221,3]]},"1398":{"position":[[220,3]]},"1403":{"position":[[556,3]]},"1414":{"position":[[556,3]]},"1418":{"position":[[221,3]]},"1421":{"position":[[401,3]]},"1429":{"position":[[139,3]]},"1431":{"position":[[567,3]]},"1448":{"position":[[271,3]]},"1472":{"position":[[377,3]]},"1477":{"position":[[266,5],[428,5],[3032,5]]}},"keywords":{}}],["add"",{"_index":6715,"title":{},"content":{"1477":{"position":[[107,11],[173,11]]}},"keywords":{}}],["add?contact",{"_index":1279,"title":{},"content":{"84":{"position":[[1442,11]]}},"keywords":{}}],["addeda",{"_index":3040,"title":{},"content":{"306":{"position":[[296,6]]}},"keywords":{}}],["addit",{"_index":849,"title":{},"content":{"56":{"position":[[1685,10],[2605,10]]},"67":{"position":[[221,10]]},"76":{"position":[[297,10]]},"81":{"position":[[1905,10]]},"94":{"position":[[58,10]]},"104":{"position":[[80,11]]},"112":{"position":[[504,10]]},"117":{"position":[[4,8]]},"120":{"position":[[1828,10]]},"129":{"position":[[403,10]]},"137":{"position":[[77,10]]},"159":{"position":[[346,10]]},"191":{"position":[[256,10]]},"208":{"position":[[4,8]]},"218":{"position":[[1063,10]]},"307":{"position":[[2778,8]]},"309":{"position":[[2634,8]]},"315":{"position":[[2408,8]]},"319":{"position":[[216,10]]},"324":{"position":[[116,8]]},"343":{"position":[[507,10],[621,10],[998,10]]},"371":{"position":[[1474,10]]},"393":{"position":[[457,10]]},"398":{"position":[[448,10]]},"402":{"position":[[502,10]]},"418":{"position":[[515,10]]},"419":{"position":[[1418,10]]},"433":{"position":[[883,10]]},"441":{"position":[[27,10]]},"488":{"position":[[374,10]]},"504":{"position":[[1047,10]]},"531":{"position":[[543,10]]},"546":{"position":[[1222,10]]},"547":{"position":[[1420,10]]},"548":{"position":[[1233,8]]},"582":{"position":[[4,8]]},"606":{"position":[[4,8],[339,10]]},"637":{"position":[[367,10],[391,10]]},"639":{"position":[[1045,10]]},"659":{"position":[[531,10]]},"676":{"position":[[374,10]]},"691":{"position":[[374,10]]},"724":{"position":[[154,10]]},"753":{"position":[[504,10],[619,10]]},"758":{"position":[[458,10]]},"764":{"position":[[979,10]]},"767":{"position":[[650,10],[765,10]]},"771":{"position":[[458,10]]},"777":{"position":[[979,10]]},"784":{"position":[[298,8],[422,10]]},"792":{"position":[[928,10],[1044,10]]},"793":{"position":[[463,10],[579,10]]},"798":{"position":[[456,10]]},"804":{"position":[[977,10]]},"808":{"position":[[479,10],[595,10]]},"813":{"position":[[456,10]]},"819":{"position":[[977,10]]},"824":{"position":[[720,10],[836,10]]},"829":{"position":[[456,10]]},"835":{"position":[[977,10]]},"847":{"position":[[115,10]]},"849":{"position":[[1993,10]]},"866":{"position":[[480,10],[596,10]]},"878":{"position":[[490,10],[606,10]]},"900":{"position":[[308,10]]},"904":{"position":[[719,10],[835,10]]},"908":{"position":[[502,10]]},"918":{"position":[[928,10],[1044,10]]},"919":{"position":[[463,10],[579,10]]},"922":{"position":[[2807,10]]},"924":{"position":[[502,10]]},"931":{"position":[[483,10],[599,10]]},"935":{"position":[[502,10]]},"951":{"position":[[502,10]]},"969":{"position":[[502,10]]},"1023":{"position":[[1401,10]]},"1042":{"position":[[1269,10],[1384,10]]},"1043":{"position":[[463,10],[579,10]]},"1046":{"position":[[436,10]]},"1051":{"position":[[719,10],[835,10]]},"1054":{"position":[[436,10]]},"1059":{"position":[[483,10],[599,10]]},"1062":{"position":[[436,10]]},"1123":{"position":[[334,10]]},"1138":{"position":[[1361,10],[1389,10]]},"1154":{"position":[[664,10],[790,10]]},"1156":{"position":[[100,10]]},"1198":{"position":[[387,8],[511,10]]},"1239":{"position":[[221,10]]},"1243":{"position":[[1328,10]]},"1247":{"position":[[922,8]]},"1255":{"position":[[298,8],[422,10]]},"1275":{"position":[[261,10]]},"1282":{"position":[[125,8]]},"1288":{"position":[[4,8]]},"1289":{"position":[[1004,10],[1129,10]]},"1303":{"position":[[483,10],[599,10],[715,10],[840,10]]},"1310":{"position":[[130,8]]},"1313":{"position":[[905,10],[933,10]]},"1322":{"position":[[1223,10],[1348,10]]},"1337":{"position":[[905,10],[933,10]]},"1348":{"position":[[905,10],[933,10]]},"1373":{"position":[[701,10],[817,10]]},"1374":{"position":[[701,10],[817,10]]},"1397":{"position":[[480,10],[596,10]]},"1398":{"position":[[479,10],[595,10]]},"1408":{"position":[[542,10],[657,10]]},"1409":{"position":[[463,10],[579,10]]},"1427":{"position":[[632,10],[660,10]]},"1451":{"position":[[671,10]]},"1471":{"position":[[1071,10]]},"1477":{"position":[[388,10],[541,10],[622,9]]}},"keywords":{}}],["addition",{"_index":3667,"title":{},"content":{"430":{"position":[[185,13]]},"1448":{"position":[[289,13]]}},"keywords":{}}],["additional_table_create_sql",{"_index":6421,"title":{},"content":{"1429":{"position":[[225,28],[792,28]]}},"keywords":{}}],["additionalproperti",{"_index":5163,"title":{},"content":{"1008":{"position":[[1670,21]]},"1467":{"position":[[820,21]]},"1477":{"position":[[1239,21],[1274,21],[3467,21]]}},"keywords":{}}],["addnewbind",{"_index":815,"title":{},"content":{"55":{"position":[[298,14]]},"56":{"position":[[509,15]]}},"keywords":{}}],["addnewbindings"break",{"_index":828,"title":{},"content":{"55":{"position":[[1047,28]]}},"keywords":{}}],["address",{"_index":112,"title":{"334":{"position":[[16,9]]},"335":{"position":[[3,9]]}},"content":{"3":{"position":[[288,9]]},"45":{"position":[[18,11]]},"81":{"position":[[471,7],[1362,8],[2655,8]]},"83":{"position":[[277,9],[606,7],[1019,8]]},"156":{"position":[[420,10]]},"203":{"position":[[526,9]]},"204":{"position":[[356,10],[461,8]]},"206":{"position":[[233,7],[468,8],[539,8]]},"221":{"position":[[1911,10]]},"223":{"position":[[723,7],[919,7],[985,8]]},"225":{"position":[[161,8]]},"238":{"position":[[500,7]]},"239":{"position":[[2349,9]]},"247":{"position":[[90,8],[132,8]]},"335":{"position":[[30,9]]},"370":{"position":[[95,7],[123,8],[157,7],[176,8],[286,7]]},"371":{"position":[[181,8],[371,7]]},"402":{"position":[[86,7]]},"430":{"position":[[305,10]]},"477":{"position":[[919,7]]},"517":{"position":[[3399,7],[3698,7]]},"540":{"position":[[173,7]]},"598":{"position":[[881,7]]},"617":{"position":[[909,8]]},"739":{"position":[[37,9]]},"753":{"position":[[180,8],[257,10],[1660,7]]},"757":{"position":[[76,7]]},"758":{"position":[[169,8]]},"767":{"position":[[60,8],[403,10],[2464,7]]},"770":{"position":[[76,7]]},"771":{"position":[[169,8]]},"780":{"position":[[267,8],[567,10]]},"782":{"position":[[69,7]]},"783":{"position":[[109,8]]},"792":{"position":[[716,10],[2445,7]]},"793":{"position":[[251,10],[1683,7]]},"797":{"position":[[76,7]]},"798":{"position":[[167,8]]},"808":{"position":[[240,9],[267,10],[1552,8],[1633,7]]},"812":{"position":[[76,7]]},"813":{"position":[[167,8]]},"824":{"position":[[508,10],[2576,7]]},"828":{"position":[[76,7]]},"829":{"position":[[167,8]]},"840":{"position":[[96,8]]},"857":{"position":[[230,8]]},"867":{"position":[[69,7]]},"868":{"position":[[108,8]]},"879":{"position":[[69,7]]},"880":{"position":[[118,8]]},"904":{"position":[[507,10],[2391,7]]},"907":{"position":[[69,7]]},"908":{"position":[[182,8]]},"918":{"position":[[716,10],[2683,7]]},"919":{"position":[[251,10],[2590,7]]},"922":{"position":[[1654,7]]},"923":{"position":[[69,7]]},"924":{"position":[[182,8]]},"931":{"position":[[244,9],[271,10],[2031,8],[2112,7]]},"934":{"position":[[69,7]]},"935":{"position":[[182,8]]},"946":{"position":[[58,9],[156,10]]},"947":{"position":[[745,8]]},"950":{"position":[[69,7]]},"951":{"position":[[182,8]]},"960":{"position":[[203,9]]},"963":{"position":[[87,7]]},"964":{"position":[[310,7],[342,7]]},"968":{"position":[[69,7]]},"969":{"position":[[182,8]]},"989":{"position":[[468,7]]},"1004":{"position":[[551,7]]},"1018":{"position":[[81,9]]},"1021":{"position":[[342,7]]},"1022":{"position":[[108,8]]},"1042":{"position":[[1442,9]]},"1043":{"position":[[251,10],[1925,7]]},"1045":{"position":[[76,7]]},"1046":{"position":[[123,8]]},"1051":{"position":[[507,10],[2107,7]]},"1053":{"position":[[76,7]]},"1054":{"position":[[123,8]]},"1059":{"position":[[244,9],[271,10],[1878,8],[1959,7]]},"1061":{"position":[[76,7]]},"1062":{"position":[[123,8]]},"1131":{"position":[[114,7]]},"1138":{"position":[[95,7],[123,8],[157,7],[176,8],[351,8],[360,7]]},"1139":{"position":[[137,8]]},"1151":{"position":[[69,7]]},"1152":{"position":[[131,8]]},"1154":{"position":[[168,10]]},"1188":{"position":[[69,7]]},"1189":{"position":[[72,8]]},"1198":{"position":[[130,10]]},"1239":{"position":[[58,7]]},"1241":{"position":[[171,8]]},"1251":{"position":[[329,10]]},"1253":{"position":[[69,7]]},"1254":{"position":[[122,8]]},"1267":{"position":[[58,7]]},"1270":{"position":[[140,8]]},"1283":{"position":[[287,9]]},"1285":{"position":[[143,8],[152,7]]},"1286":{"position":[[2082,7]]},"1287":{"position":[[131,8]]},"1289":{"position":[[577,9],[689,9],[716,10],[1239,7],[1569,8]]},"1297":{"position":[[63,9],[90,10]]},"1298":{"position":[[723,7],[919,7],[985,8],[1071,7]]},"1300":{"position":[[143,8],[152,7]]},"1301":{"position":[[1918,7]]},"1302":{"position":[[131,8]]},"1303":{"position":[[244,9],[271,10],[950,7],[1674,8],[1755,7]]},"1310":{"position":[[559,7],[890,8]]},"1311":{"position":[[123,10]]},"1313":{"position":[[134,8],[143,7]]},"1314":{"position":[[134,8]]},"1321":{"position":[[370,10]]},"1322":{"position":[[1458,7]]},"1324":{"position":[[143,8],[152,7]]},"1325":{"position":[[2082,7]]},"1326":{"position":[[131,8]]},"1334":{"position":[[458,10]]},"1335":{"position":[[1105,7]]},"1337":{"position":[[134,8],[143,7]]},"1338":{"position":[[134,8]]},"1345":{"position":[[63,9],[90,10]]},"1346":{"position":[[723,7],[919,7],[985,8],[1071,7],[1295,8]]},"1348":{"position":[[134,8],[143,7]]},"1349":{"position":[[134,8]]},"1373":{"position":[[489,10],[1356,7]]},"1374":{"position":[[489,10],[1360,7]]},"1376":{"position":[[143,8],[152,7]]},"1377":{"position":[[135,8]]},"1397":{"position":[[241,9],[268,10],[1113,8],[1194,7]]},"1398":{"position":[[240,9],[267,10],[1116,8],[1197,7]]},"1400":{"position":[[143,8],[152,7]]},"1401":{"position":[[135,8]]},"1408":{"position":[[715,9]]},"1409":{"position":[[251,10],[1198,7]]},"1411":{"position":[[143,8],[152,7]]},"1412":{"position":[[135,8]]},"1427":{"position":[[134,8],[143,7]]},"1428":{"position":[[137,8]]},"1455":{"position":[[605,9]]},"1472":{"position":[[730,8]]}},"keywords":{}}],["address>",{"_index":5518,"title":{},"content":{"1139":{"position":[[254,11]]}},"keywords":{}}],["address"",{"_index":6250,"title":{},"content":{"1303":{"position":[[1162,14]]}},"keywords":{}}],["address.flow",{"_index":3207,"title":{},"content":{"332":{"position":[[561,12]]}},"keywords":{}}],["address=(protocol=tcps)(host",{"_index":4904,"title":{},"content":{"879":{"position":[[201,38]]}},"keywords":{}}],["addresseschargescollectionscustomersdiscountsmetafieldsonetimesordersproductsshopsubscript",{"_index":5120,"title":{},"content":{"956":{"position":[[72,94]]}},"keywords":{}}],["addressfor",{"_index":5129,"title":{},"content":{"964":{"position":[[637,10]]}},"keywords":{}}],["addressin",{"_index":5130,"title":{},"content":{"964":{"position":[[775,9]]}},"keywords":{}}],["aderiv",{"_index":5760,"title":{},"content":{"1157":{"position":[[186,11]]}},"keywords":{}}],["adgroupadreport",{"_index":4122,"title":{},"content":{"556":{"position":[[1595,15]]}},"keywords":{}}],["adjust",{"_index":2252,"title":{},"content":{"208":{"position":[[1051,7]]},"209":{"position":[[1601,6]]},"240":{"position":[[447,9]]},"909":{"position":[[673,11]]},"925":{"position":[[673,11]]},"936":{"position":[[673,11]]},"952":{"position":[[673,11]]},"970":{"position":[[673,11]]},"1172":{"position":[[561,8],[650,8]]},"1222":{"position":[[561,8],[650,8]]}},"keywords":{}}],["admin",{"_index":1768,"title":{"154":{"position":[[0,5]]}},"content":{"137":{"position":[[204,6]]},"154":{"position":[[8,5],[1306,6]]},"206":{"position":[[603,5]]},"247":{"position":[[304,5]]},"249":{"position":[[23,5]]},"337":{"position":[[295,6],[338,5]]},"338":{"position":[[109,5],[395,5],[547,6]]},"339":{"position":[[280,5]]},"341":{"position":[[7,6],[303,5],[453,5]]},"611":{"position":[[533,5]]},"645":{"position":[[246,5]]},"652":{"position":[[246,5]]},"686":{"position":[[263,6]]},"723":{"position":[[75,5]]},"780":{"position":[[364,5]]},"880":{"position":[[298,5]]},"1118":{"position":[[204,5],[516,5]]},"1292":{"position":[[485,5]]},"1306":{"position":[[485,5]]},"1329":{"position":[[485,5]]},"1354":{"position":[[102,5]]},"1356":{"position":[[152,5]]},"1379":{"position":[[610,5]]},"1403":{"position":[[610,5]]},"1414":{"position":[[610,5]]},"1448":{"position":[[995,5]]},"1461":{"position":[[3850,5]]}},"keywords":{}}],["admin@yourdomain.com",{"_index":4311,"title":{},"content":{"612":{"position":[[269,20]]}},"keywords":{}}],["administr",{"_index":4035,"title":{},"content":{"531":{"position":[[445,13]]},"532":{"position":[[259,13]]},"611":{"position":[[580,14]]},"690":{"position":[[13,14]]},"842":{"position":[[286,13]]},"849":{"position":[[1672,14]]},"989":{"position":[[168,14]]},"1004":{"position":[[251,14]]}},"keywords":{}}],["adminscompaniescompani",{"_index":4427,"title":{},"content":{"682":{"position":[[71,22]]}},"keywords":{}}],["ads)ad",{"_index":4512,"title":{},"content":{"715":{"position":[[133,6]]}},"keywords":{}}],["ads.dev",{"_index":3319,"title":{},"content":{"364":{"position":[[646,7]]}},"keywords":{}}],["ads:dev",{"_index":3323,"title":{},"content":{"364":{"position":[[784,7],[1428,7],[2404,7]]},"388":{"position":[[166,7]]},"449":{"position":[[164,7]]},"557":{"position":[[166,7]]},"721":{"position":[[168,7]]}},"keywords":{}}],["ads_insight",{"_index":3983,"title":{},"content":{"518":{"position":[[641,12]]}},"keywords":{}}],["ads_insights_action_typ",{"_index":3995,"title":{},"content":{"518":{"position":[[1265,24]]}},"keywords":{}}],["ads_insights_age_and_gend",{"_index":3985,"title":{},"content":{"518":{"position":[[727,27]]}},"keywords":{}}],["ads_insights_countri",{"_index":3987,"title":{},"content":{"518":{"position":[[843,20]]}},"keywords":{}}],["ads_insights_dma",{"_index":3991,"title":{},"content":{"518":{"position":[[1045,16]]}},"keywords":{}}],["ads_insights_platform_and_devic",{"_index":3993,"title":{},"content":{"518":{"position":[[1139,32]]}},"keywords":{}}],["ads_insights_region",{"_index":3989,"title":{},"content":{"518":{"position":[[945,19]]}},"keywords":{}}],["ads_manag",{"_index":3936,"title":{},"content":{"515":{"position":[[662,16],[909,14]]}},"keywords":{}}],["ads_read",{"_index":3937,"title":{},"content":{"515":{"position":[[679,9],[885,8]]}},"keywords":{}}],["adsad",{"_index":3926,"title":{},"content":{"512":{"position":[[46,5]]}},"keywords":{}}],["adset",{"_index":3967,"title":{},"content":{"517":{"position":[[3079,6]]}},"keywords":{}}],["adssponsor",{"_index":3470,"title":{},"content":{"381":{"position":[[388,12]]}},"keywords":{}}],["advanc",{"_index":771,"title":{"47":{"position":[[0,8]]},"260":{"position":[[0,8]]},"419":{"position":[[0,9]]},"440":{"position":[[0,9]]},"504":{"position":[[0,9]]},"547":{"position":[[0,9]]},"548":{"position":[[0,9]]},"639":{"position":[[0,9]]},"640":{"position":[[0,9]]},"1023":{"position":[[0,9]]},"1268":{"position":[[0,9]]}},"content":{"47":{"position":[[24,8],[149,8]]},"89":{"position":[[430,8]]},"122":{"position":[[2168,8]]},"135":{"position":[[631,8]]},"169":{"position":[[168,8]]},"190":{"position":[[1502,8]]},"219":{"position":[[522,8]]},"239":{"position":[[1599,7]]},"240":{"position":[[2926,8]]},"259":{"position":[[336,8],[2025,8]]},"292":{"position":[[182,7]]},"301":{"position":[[1223,8]]},"303":{"position":[[173,7]]},"366":{"position":[[483,8]]},"370":{"position":[[634,9],[644,8],[673,8]]},"377":{"position":[[70,8],[99,8]]},"378":{"position":[[281,9]]},"417":{"position":[[82,8]]},"438":{"position":[[82,8]]},"502":{"position":[[511,9],[521,8],[542,8]]},"515":{"position":[[249,8],[738,8],[793,8]]},"545":{"position":[[82,8]]},"764":{"position":[[1076,8]]},"777":{"position":[[1076,8]]},"804":{"position":[[1074,8]]},"819":{"position":[[1074,8]]},"835":{"position":[[1074,8]]},"842":{"position":[[1250,8]]},"843":{"position":[[342,9]]},"868":{"position":[[256,9]]},"903":{"position":[[509,8]]},"907":{"position":[[417,9],[427,8],[456,8]]},"915":{"position":[[509,8]]},"922":{"position":[[1272,7],[1332,7],[1456,7],[1621,10]]},"923":{"position":[[417,9],[427,8],[456,8]]},"930":{"position":[[509,8]]},"934":{"position":[[417,9],[427,8],[456,8]]},"950":{"position":[[417,9],[427,8],[456,8]]},"963":{"position":[[663,8]]},"968":{"position":[[417,9],[427,8],[456,8]]},"1020":{"position":[[697,8]]},"1021":{"position":[[1082,9],[1104,8]]},"1031":{"position":[[370,8]]},"1034":{"position":[[644,9],[654,8],[683,8]]},"1045":{"position":[[402,9],[412,8],[441,8]]},"1053":{"position":[[402,9],[412,8],[441,8]]},"1061":{"position":[[402,9],[412,8],[441,8]]},"1136":{"position":[[209,7]]},"1149":{"position":[[338,7]]},"1200":{"position":[[519,8]]},"1201":{"position":[[588,9]]},"1277":{"position":[[690,9],[712,8]]},"1285":{"position":[[748,9],[758,8],[787,8]]},"1300":{"position":[[748,9],[758,8],[787,8]]},"1309":{"position":[[209,7]]},"1313":{"position":[[602,9],[612,8],[641,8]]},"1324":{"position":[[748,9],[758,8],[787,8]]},"1332":{"position":[[209,7]]},"1337":{"position":[[602,9],[612,8],[641,8]]},"1343":{"position":[[209,7]]},"1348":{"position":[[602,9],[612,8],[641,8]]},"1356":{"position":[[454,8],[955,8]]},"1359":{"position":[[469,8]]},"1426":{"position":[[353,7]]},"1473":{"position":[[276,8]]}},"keywords":{}}],["advanced.incremental_scn_rang",{"_index":4893,"title":{},"content":{"870":{"position":[[289,30]]}},"keywords":{}}],["advanced/ascendingkey",{"_index":3587,"title":{},"content":{"417":{"position":[[152,23]]},"438":{"position":[[152,23]]},"502":{"position":[[612,23]]},"545":{"position":[[152,23]]},"1021":{"position":[[1174,23]]}},"keywords":{}}],["advanced/backfill_chunk_s",{"_index":3406,"title":{},"content":{"370":{"position":[[743,29]]},"757":{"position":[[1510,29]]},"770":{"position":[[1510,29]]},"797":{"position":[[1510,29]]},"812":{"position":[[1510,29]]},"828":{"position":[[1510,29]]},"867":{"position":[[835,29]]},"879":{"position":[[992,29]]},"907":{"position":[[526,29]]},"923":{"position":[[526,29]]},"934":{"position":[[526,29]]},"950":{"position":[[526,29]]},"968":{"position":[[526,29]]},"1045":{"position":[[511,29]]},"1053":{"position":[[511,29]]},"1061":{"position":[[511,29]]}},"keywords":{}}],["advanced/backfillseg",{"_index":3529,"title":{},"content":{"397":{"position":[[373,25]]}},"keywords":{}}],["advanced/connection_limit",{"_index":4765,"title":{},"content":{"842":{"position":[[1668,26]]}},"keywords":{}}],["advanced/dbnam",{"_index":4611,"title":{},"content":{"757":{"position":[[933,16]]},"770":{"position":[[933,16]]},"797":{"position":[[933,16]]},"812":{"position":[[933,16]]},"828":{"position":[[933,16]]}},"keywords":{}}],["advanced/default_interv",{"_index":4918,"title":{},"content":{"879":{"position":[[1363,26]]}},"keywords":{}}],["advanced/dictionary_mod",{"_index":4871,"title":{},"content":{"867":{"position":[[1261,25]]}},"keywords":{}}],["advanced/disable_backfil",{"_index":3446,"title":{},"content":{"377":{"position":[[169,26]]}},"keywords":{}}],["advanced/disable_real_tim",{"_index":3447,"title":{},"content":{"377":{"position":[[343,27]]}},"keywords":{}}],["advanced/discover_schema",{"_index":4874,"title":{},"content":{"867":{"position":[[1654,26]]}},"keywords":{}}],["advanced/endpoint",{"_index":3531,"title":{},"content":{"397":{"position":[[540,17]]},"417":{"position":[[553,18]]},"1125":{"position":[[332,17]]}},"keywords":{}}],["advanced/flowschema",{"_index":5220,"title":{},"content":{"1034":{"position":[[753,20]]}},"keywords":{}}],["advanced/incremental_chunk_s",{"_index":4868,"title":{},"content":{"867":{"position":[[988,32]]}},"keywords":{}}],["advanced/incremental_scn_rang",{"_index":4869,"title":{},"content":{"867":{"position":[[1150,31]]}},"keywords":{}}],["advanced/is_free_plan",{"_index":3448,"title":{},"content":{"377":{"position":[[515,22]]}},"keywords":{}}],["advanced/max_backfill_interv",{"_index":3449,"title":{},"content":{"377":{"position":[[622,31]]}},"keywords":{}}],["advanced/min_backfill_interv",{"_index":3450,"title":{},"content":{"377":{"position":[[853,31]]}},"keywords":{}}],["advanced/node_id",{"_index":4613,"title":{},"content":{"757":{"position":[[1144,17]]},"770":{"position":[[1144,17]]},"797":{"position":[[1144,17]]},"812":{"position":[[1144,17]]},"828":{"position":[[1144,17]]},"867":{"position":[[1852,17]]}},"keywords":{}}],["advanced/number_of_replica",{"_index":5828,"title":{},"content":{"1196":{"position":[[704,27]]}},"keywords":{}}],["advanced/pol",{"_index":3847,"title":{},"content":{"482":{"position":[[355,14]]}},"keywords":{}}],["advanced/publicationnam",{"_index":3408,"title":{},"content":{"370":{"position":[[895,25]]},"907":{"position":[[678,25]]},"923":{"position":[[678,25]]},"934":{"position":[[678,25]]},"950":{"position":[[678,25]]},"968":{"position":[[678,25]]}},"keywords":{}}],["advanced/scanlimit",{"_index":3532,"title":{},"content":{"397":{"position":[[688,18]]}},"keywords":{}}],["advanced/skip_backfil",{"_index":3410,"title":{},"content":{"370":{"position":[[1032,24]]},"757":{"position":[[1377,24]]},"770":{"position":[[1377,24]]},"797":{"position":[[1377,24]]},"812":{"position":[[1377,24]]},"828":{"position":[[1377,24]]},"867":{"position":[[493,24]]},"907":{"position":[[815,24]]},"923":{"position":[[815,24]]},"934":{"position":[[815,24]]},"950":{"position":[[815,24]]},"968":{"position":[[815,24]]},"1045":{"position":[[663,24]]},"1053":{"position":[[663,24]]},"1061":{"position":[[663,24]]}},"keywords":{}}],["advanced/skip_binlog_retention_check",{"_index":4617,"title":{},"content":{"757":{"position":[[1664,37]]},"770":{"position":[[1664,37]]},"797":{"position":[[1664,37]]},"812":{"position":[[1664,37]]},"828":{"position":[[1664,37]]}},"keywords":{}}],["advanced/skip_flashback_retention_check",{"_index":4916,"title":{},"content":{"879":{"position":[[1145,41]]}},"keywords":{}}],["advanced/slotnam",{"_index":3413,"title":{},"content":{"370":{"position":[[1165,18]]},"907":{"position":[[948,18]]},"923":{"position":[[948,18]]},"934":{"position":[[948,18]]},"950":{"position":[[948,18]]},"968":{"position":[[948,18]]}},"keywords":{}}],["advanced/ssl_client_cert",{"_index":5973,"title":{},"content":{"1285":{"position":[[1088,25]]},"1300":{"position":[[1088,25]]},"1324":{"position":[[1088,25]]}},"keywords":{}}],["advanced/ssl_client_key",{"_index":5974,"title":{},"content":{"1285":{"position":[[1217,24]]},"1300":{"position":[[1217,24]]},"1324":{"position":[[1217,24]]}},"keywords":{}}],["advanced/ssl_server_ca",{"_index":5972,"title":{},"content":{"1285":{"position":[[961,23]]},"1300":{"position":[[961,23]]},"1324":{"position":[[961,23]]}},"keywords":{}}],["advanced/sslmod",{"_index":5001,"title":{},"content":{"907":{"position":[[1284,17]]},"923":{"position":[[1284,17]]},"934":{"position":[[1284,17]]},"950":{"position":[[1284,17]]},"968":{"position":[[1284,17]]},"1285":{"position":[[857,17]]},"1300":{"position":[[857,17]]},"1313":{"position":[[711,17]]},"1324":{"position":[[857,17]]},"1337":{"position":[[711,17]]},"1348":{"position":[[711,17]]}},"keywords":{}}],["advanced/start_d",{"_index":4766,"title":{},"content":{"842":{"position":[[1707,20]]}},"keywords":{}}],["advanced/stop_d",{"_index":3452,"title":{},"content":{"377":{"position":[[1058,19]]}},"keywords":{}}],["advanced/task_limit",{"_index":4763,"title":{},"content":{"842":{"position":[[1453,20]]}},"keywords":{}}],["advanced/watermarks_t",{"_index":4610,"title":{},"content":{"757":{"position":[[736,26]]},"770":{"position":[[736,26]]},"797":{"position":[[736,26]]},"812":{"position":[[736,26]]},"828":{"position":[[736,26]]}},"keywords":{}}],["advanced/watermarkst",{"_index":3415,"title":{},"content":{"370":{"position":[[1286,25]]},"867":{"position":[[626,25]]},"907":{"position":[[1069,25]]},"923":{"position":[[1069,25]]},"934":{"position":[[1069,25]]},"950":{"position":[[1069,25]]},"968":{"position":[[1069,25]]},"1045":{"position":[[796,25]]},"1053":{"position":[[796,25]]},"1061":{"position":[[796,25]]}},"keywords":{}}],["advancedcollectionsettings/clustering_key",{"_index":6267,"title":{},"content":{"1356":{"position":[[991,42],[1081,43]]}},"keywords":{}}],["advancedcollectionsettings/retention_sec",{"_index":6269,"title":{},"content":{"1356":{"position":[[1175,42]]}},"keywords":{}}],["advaned/openaiorg",{"_index":5957,"title":{},"content":{"1277":{"position":[[782,18]]}},"keywords":{}}],["advantag",{"_index":1461,"title":{},"content":{"102":{"position":[[200,9]]},"281":{"position":[[2411,11]]},"1391":{"position":[[370,9]]},"1461":{"position":[[2083,11]]}},"keywords":{}}],["advertis",{"_index":3740,"title":{},"content":{"448":{"position":[[425,11],[553,11],[1084,11]]},"1080":{"position":[[195,11],[224,11],[252,11],[459,11],[497,11],[534,11]]},"1083":{"position":[[281,10]]},"1085":{"position":[[519,10],[537,10]]}},"keywords":{}}],["advertiser_id",{"_index":5343,"title":{},"content":{"1086":{"position":[[268,14]]}},"keywords":{}}],["advisori",{"_index":1473,"title":{},"content":{"103":{"position":[[284,9]]}},"keywords":{}}],["adword",{"_index":4101,"title":{},"content":{"550":{"position":[[116,7]]}},"keywords":{}}],["affect",{"_index":398,"title":{},"content":{"13":{"position":[[820,8],[1746,8],[1890,9]]},"208":{"position":[[1063,8],[1960,8]]},"259":{"position":[[1497,7],[3051,7]]},"308":{"position":[[871,8],[1196,8]]},"309":{"position":[[1366,6]]},"1208":{"position":[[253,6]]},"1358":{"position":[[157,6]]},"1448":{"position":[[345,6]]}},"keywords":{}}],["afford",{"_index":1932,"title":{},"content":{"163":{"position":[[1132,7]]},"321":{"position":[[2328,7]]}},"keywords":{}}],["after_cursor",{"_index":5511,"title":{},"content":{"1134":{"position":[[2905,12],[3007,12]]}},"keywords":{}}],["again",{"_index":1187,"title":{},"content":{"82":{"position":[[3130,6]]},"105":{"position":[[1323,6]]},"110":{"position":[[1177,5]]},"115":{"position":[[389,5]]},"217":{"position":[[2102,6]]},"218":{"position":[[787,6],[2074,6]]},"239":{"position":[[2902,6]]},"271":{"position":[[475,5]]},"275":{"position":[[723,5]]},"290":{"position":[[1567,6]]},"291":{"position":[[788,6]]},"302":{"position":[[788,6]]},"322":{"position":[[1567,5]]},"840":{"position":[[1524,5]]},"849":{"position":[[1355,5],[2415,5]]},"1459":{"position":[[1007,5]]},"1461":{"position":[[4487,5]]},"1477":{"position":[[770,6]]}},"keywords":{}}],["again"",{"_index":1726,"title":{},"content":{"129":{"position":[[921,11],[1138,11]]}},"keywords":{}}],["again.go",{"_index":3702,"title":{},"content":{"436":{"position":[[819,8]]}},"keywords":{}}],["against",{"_index":174,"title":{},"content":{"4":{"position":[[517,7]]},"34":{"position":[[785,7]]},"69":{"position":[[261,7]]},"70":{"position":[[99,7]]},"82":{"position":[[563,7]]},"106":{"position":[[455,7]]},"128":{"position":[[79,7]]},"129":{"position":[[564,7]]},"160":{"position":[[368,7]]},"183":{"position":[[3437,7]]},"185":{"position":[[124,7]]},"267":{"position":[[645,7]]},"309":{"position":[[586,7],[3396,7]]},"483":{"position":[[78,7]]},"558":{"position":[[255,7]]},"595":{"position":[[555,7],[1090,7]]},"864":{"position":[[165,7]]},"876":{"position":[[165,7]]},"912":{"position":[[925,7]]},"1039":{"position":[[192,7]]},"1049":{"position":[[118,7]]},"1057":{"position":[[121,7]]},"1268":{"position":[[436,7]]},"1286":{"position":[[1947,7]]},"1292":{"position":[[557,7]]},"1301":{"position":[[1783,7]]},"1306":{"position":[[557,7]]},"1325":{"position":[[1947,7]]},"1329":{"position":[[557,7]]}},"keywords":{}}],["agent",{"_index":1190,"title":{},"content":{"82":{"position":[[3327,6]]},"510":{"position":[[201,6]]},"540":{"position":[[149,5],[161,5]]}},"keywords":{}}],["agent/network",{"_index":462,"title":{},"content":{"16":{"position":[[344,14]]}},"keywords":{}}],["agent/typ",{"_index":460,"title":{},"content":{"16":{"position":[[297,11]]}},"keywords":{}}],["agent_availabilityagent_statuscontactconversationcustomerpayment_requesttask",{"_index":4049,"title":{},"content":{"537":{"position":[[83,76]]}},"keywords":{}}],["agentavailabilityev",{"_index":4054,"title":{},"content":{"541":{"position":[[188,23]]}},"keywords":{}}],["agentemail",{"_index":4051,"title":{},"content":{"540":{"position":[[137,11]]},"541":{"position":[[123,11]]}},"keywords":{}}],["agentsbusi",{"_index":3904,"title":{},"content":{"506":{"position":[[46,14]]}},"keywords":{}}],["aggreg",{"_index":720,"title":{"1087":{"position":[[7,12]]}},"content":{"40":{"position":[[324,13]]},"42":{"position":[[707,11]]},"112":{"position":[[77,11]]},"113":{"position":[[575,10],[743,10]]},"164":{"position":[[1191,12],[1429,13]]},"281":{"position":[[273,10],[3168,13]]},"517":{"position":[[2176,9],[2377,10]]},"1085":{"position":[[1010,11],[1059,11]]},"1087":{"position":[[85,10]]},"1292":{"position":[[597,9]]},"1306":{"position":[[597,9]]},"1329":{"position":[[597,9]]},"1379":{"position":[[715,9]]},"1403":{"position":[[715,9]]},"1414":{"position":[[715,9]]}},"keywords":{}}],["agil",{"_index":2619,"title":{},"content":{"241":{"position":[[390,7]]}},"keywords":{}}],["ago",{"_index":1560,"title":{},"content":{"109":{"position":[[383,3]]},"110":{"position":[[279,4]]},"560":{"position":[[288,4]]},"747":{"position":[[855,3]]}},"keywords":{}}],["agre",{"_index":390,"title":{},"content":{"13":{"position":[[590,5]]}},"keywords":{}}],["ahead",{"_index":3396,"title":{},"content":{"366":{"position":[[192,5]]},"903":{"position":[[218,5]]},"909":{"position":[[359,5]]},"915":{"position":[[218,5]]},"925":{"position":[[359,5]]},"930":{"position":[[218,5]]},"936":{"position":[[359,5]]},"952":{"position":[[359,5]]},"963":{"position":[[372,5]]},"970":{"position":[[359,5]]}},"keywords":{}}],["ahold",{"_index":2228,"title":{},"content":{"204":{"position":[[826,5]]}},"keywords":{}}],["aid",{"_index":1733,"title":{},"content":{"131":{"position":[[24,3]]},"315":{"position":[[77,3]]}},"keywords":{}}],["airbyt",{"_index":795,"title":{"323":{"position":[[10,8]]}},"content":{"53":{"position":[[108,7]]},"84":{"position":[[890,8]]},"323":{"position":[[25,7],[1240,8],[1376,7],[1406,7],[1537,7],[1719,7]]},"364":{"position":[[431,8]]}},"keywords":{}}],["aircal",{"_index":3248,"title":{"346":{"position":[[0,7]]},"349":{"position":[[11,7]]}},"content":{"347":{"position":[[15,7],[215,8]]},"348":{"position":[[38,7],[68,7],[98,7]]},"349":{"position":[[177,7],[364,7]]},"350":{"position":[[250,7]]},"351":{"position":[[389,7]]},"353":{"position":[[5,7]]},"354":{"position":[[38,8]]},"355":{"position":[[5,7]]}},"keywords":{}}],["airtabl",{"_index":3271,"title":{"356":{"position":[[0,8]]}},"content":{"357":{"position":[[11,8]]},"358":{"position":[[250,8]]},"359":{"position":[[240,8],[366,8]]},"364":{"position":[[514,8]]}},"keywords":{}}],["airtable.dev",{"_index":3318,"title":{},"content":{"364":{"position":[[569,12]]}},"keywords":{}}],["airtable:dev",{"_index":3276,"title":{},"content":{"360":{"position":[[90,12]]}},"keywords":{}}],["ak",{"_index":3689,"title":{},"content":{"433":{"position":[[666,5]]}},"keywords":{}}],["akin",{"_index":629,"title":{},"content":{"27":{"position":[[341,4]]}},"keywords":{}}],["alarm",{"_index":2540,"title":{},"content":{"236":{"position":[[1548,7]]},"237":{"position":[[3477,8]]}},"keywords":{}}],["alert",{"_index":378,"title":{"1455":{"position":[[14,7]]},"1456":{"position":[[8,7]]}},"content":{"13":{"position":[[199,6]]},"41":{"position":[[602,8]]},"146":{"position":[[1031,5]]},"149":{"position":[[1025,5]]},"152":{"position":[[1015,5]]},"487":{"position":[[616,5]]},"1455":{"position":[[331,5]]},"1456":{"position":[[9,6],[122,6]]},"1457":{"position":[[117,5]]}},"keywords":{}}],["alex",{"_index":2950,"title":{},"content":{"295":{"position":[[408,4]]}},"keywords":{}}],["algorithm",{"_index":1493,"title":{},"content":{"105":{"position":[[849,11]]},"1292":{"position":[[643,9]]},"1306":{"position":[[643,9]]},"1329":{"position":[[643,9]]}},"keywords":{}}],["alia",{"_index":6306,"title":{},"content":{"1379":{"position":[[773,5]]},"1403":{"position":[[773,5]]},"1414":{"position":[[773,5]]}},"keywords":{}}],["alic",{"_index":1530,"title":{},"content":{"107":{"position":[[1031,5],[1093,5]]},"154":{"position":[[707,6]]},"590":{"position":[[372,5],[553,5]]}},"keywords":{}}],["alice'",{"_index":4245,"title":{},"content":{"590":{"position":[[1141,7]]}},"keywords":{}}],["align",{"_index":1541,"title":{},"content":{"107":{"position":[[1775,5],[3601,5]]},"296":{"position":[[3532,5]]}},"keywords":{}}],["aliv",{"_index":2580,"title":{},"content":{"238":{"position":[[663,6]]}},"keywords":{}}],["all"",{"_index":5219,"title":{},"content":{"1032":{"position":[[1987,9]]}},"keywords":{}}],["all."",{"_index":2602,"title":{},"content":{"240":{"position":[[2195,10]]}},"keywords":{}}],["alloc",{"_index":3536,"title":{},"content":{"397":{"position":[[954,10]]},"987":{"position":[[211,11]]},"1002":{"position":[[211,11]]},"1140":{"position":[[605,8]]},"1316":{"position":[[605,8]]},"1340":{"position":[[605,8]]},"1351":{"position":[[605,8]]},"1379":{"position":[[867,8]]},"1403":{"position":[[867,8]]},"1414":{"position":[[867,8]]},"1431":{"position":[[628,8]]}},"keywords":{}}],["allof",{"_index":1959,"title":{},"content":{"165":{"position":[[1089,6]]},"207":{"position":[[990,6]]}},"keywords":{}}],["allow",{"_index":115,"title":{"946":{"position":[[0,5]]}},"content":{"3":{"position":[[318,6]]},"17":{"position":[[1080,5]]},"36":{"position":[[401,7]]},"38":{"position":[[39,5]]},"41":{"position":[[635,8]]},"49":{"position":[[101,5]]},"60":{"position":[[207,6],[389,6],[665,6]]},"61":{"position":[[9,6]]},"66":{"position":[[671,6]]},"68":{"position":[[1006,6],[1102,6]]},"72":{"position":[[53,7],[521,7]]},"83":{"position":[[111,5]]},"107":{"position":[[2389,6]]},"111":{"position":[[380,5]]},"120":{"position":[[2628,6]]},"123":{"position":[[602,6]]},"124":{"position":[[948,6]]},"126":{"position":[[204,6]]},"133":{"position":[[544,6]]},"163":{"position":[[416,5]]},"165":{"position":[[2003,8]]},"179":{"position":[[484,5]]},"196":{"position":[[423,6]]},"203":{"position":[[555,5]]},"221":{"position":[[1462,5],[1532,5],[1604,5]]},"222":{"position":[[4,5],[761,5]]},"223":{"position":[[4,5]]},"224":{"position":[[4,5]]},"233":{"position":[[430,6]]},"234":{"position":[[150,5]]},"237":{"position":[[471,8]]},"240":{"position":[[95,5],[3551,8]]},"268":{"position":[[426,5]]},"299":{"position":[[316,6]]},"309":{"position":[[931,5],[2611,5]]},"310":{"position":[[89,7]]},"319":{"position":[[726,5],[951,8],[1023,6],[1292,6]]},"320":{"position":[[1158,5],[2147,5]]},"326":{"position":[[138,6]]},"337":{"position":[[219,6]]},"364":{"position":[[332,5]]},"413":{"position":[[168,8]]},"414":{"position":[[53,5]]},"417":{"position":[[843,6],[1034,6]]},"430":{"position":[[249,6]]},"452":{"position":[[207,5]]},"509":{"position":[[255,7]]},"515":{"position":[[271,6]]},"517":{"position":[[354,6]]},"552":{"position":[[612,6],[664,5]]},"578":{"position":[[255,6]]},"584":{"position":[[1226,7]]},"616":{"position":[[525,5]]},"753":{"position":[[121,5],[296,5]]},"767":{"position":[[1,5],[360,5],[442,5],[1288,5],[1641,5]]},"784":{"position":[[76,5]]},"792":{"position":[[187,5],[347,5],[673,5],[730,5],[1583,5]]},"793":{"position":[[1,5],[161,5],[265,5]]},"808":{"position":[[1,5],[161,5],[281,5]]},"824":{"position":[[1,5],[161,5],[465,5],[522,5],[1354,5],[1705,5]]},"840":{"position":[[1441,5]]},"849":{"position":[[2332,5]]},"866":{"position":[[281,5]]},"878":{"position":[[291,5]]},"897":{"position":[[176,7]]},"904":{"position":[[1,5],[161,5],[464,5],[521,5],[1206,5]]},"917":{"position":[[1904,5]]},"918":{"position":[[187,5],[347,5],[673,5],[730,5],[1498,5]]},"919":{"position":[[1,5],[161,5],[265,5]]},"931":{"position":[[1,5],[161,5],[285,5]]},"946":{"position":[[28,5],[111,5],[334,7],[372,6]]},"965":{"position":[[1904,5]]},"977":{"position":[[424,8]]},"1036":{"position":[[752,8]]},"1042":{"position":[[1096,5]]},"1043":{"position":[[1,5],[161,5],[265,5]]},"1047":{"position":[[828,7]]},"1051":{"position":[[1,5],[161,5],[464,5],[521,5]]},"1055":{"position":[[828,7]]},"1059":{"position":[[1,5],[161,5],[285,5]]},"1063":{"position":[[828,7]]},"1105":{"position":[[183,5]]},"1154":{"position":[[36,5],[457,8]]},"1156":{"position":[[839,8]]},"1198":{"position":[[50,5],[165,5]]},"1255":{"position":[[76,5]]},"1283":{"position":[[37,5]]},"1289":{"position":[[37,5],[547,5]]},"1298":{"position":[[4,5]]},"1303":{"position":[[1,5],[161,5],[285,5]]},"1320":{"position":[[37,5]]},"1321":{"position":[[327,5]]},"1322":{"position":[[4,5],[761,5]]},"1333":{"position":[[37,5]]},"1334":{"position":[[415,5]]},"1335":{"position":[[4,5],[761,5]]},"1344":{"position":[[37,5]]},"1346":{"position":[[4,5]]},"1373":{"position":[[1,5],[161,5],[446,5],[503,5]]},"1374":{"position":[[1,5],[161,5],[446,5],[503,5]]},"1392":{"position":[[10,6]]},"1397":{"position":[[1,5],[162,5],[282,5]]},"1398":{"position":[[1,5],[161,5],[281,5]]},"1408":{"position":[[369,5]]},"1409":{"position":[[1,5],[161,5],[265,5]]},"1439":{"position":[[277,6],[1021,6]]},"1459":{"position":[[1398,5]]},"1461":{"position":[[557,6],[2293,6],[4411,8]]},"1462":{"position":[[629,6]]},"1471":{"position":[[48,5],[132,6]]},"1474":{"position":[[248,6]]},"1477":{"position":[[225,8],[275,8],[442,8]]}},"keywords":{}}],["allowlist",{"_index":1214,"title":{"334":{"position":[[0,12]]},"335":{"position":[[16,10]]}},"content":{"83":{"position":[[252,9]]},"203":{"position":[[540,11]]},"204":{"position":[[323,12]]},"221":{"position":[[1886,9]]},"335":{"position":[[44,11]]},"366":{"position":[[1183,14]]},"739":{"position":[[12,9]]},"780":{"position":[[510,12]]},"946":{"position":[[243,11]]},"1042":{"position":[[1417,9]]},"1136":{"position":[[336,14]]},"1198":{"position":[[105,9]]},"1251":{"position":[[271,12],[304,9]]},"1408":{"position":[[690,9]]}},"keywords":{}}],["alloydb",{"_index":3281,"title":{"365":{"position":[[0,7]]},"1135":{"position":[[0,7]]}},"content":{"363":{"position":[[190,7]]},"366":{"position":[[15,7],[1155,8]]},"367":{"position":[[133,7]]},"368":{"position":[[12,7]]},"1120":{"position":[[1,7]]},"1136":{"position":[[41,7],[308,8]]},"1137":{"position":[[113,7]]}},"keywords":{}}],["alloydb.logical_decod",{"_index":3398,"title":{},"content":{"367":{"position":[[59,24]]}},"keywords":{}}],["alloydb:dev",{"_index":3283,"title":{},"content":{"363":{"position":[[244,11]]},"1120":{"position":[[60,11]]},"1139":{"position":[[98,11]]}},"keywords":{}}],["alloydb:dev"",{"_index":3426,"title":{},"content":{"371":{"position":[[155,17]]}},"keywords":{}}],["alloydbsuperus",{"_index":3399,"title":{},"content":{"367":{"position":[[397,16]]}},"keywords":{}}],["allstor",{"_index":6512,"title":{},"content":{"1444":{"position":[[864,8]]}},"keywords":{}}],["alog",{"_index":5778,"title":{},"content":{"1172":{"position":[[219,8]]},"1222":{"position":[[219,8]]}},"keywords":{}}],["along",{"_index":915,"title":{},"content":{"61":{"position":[[275,5]]},"199":{"position":[[11,5]]},"203":{"position":[[247,5]]},"206":{"position":[[307,5]]},"234":{"position":[[544,5]]},"254":{"position":[[130,6]]},"268":{"position":[[72,5]]},"269":{"position":[[79,5]]},"296":{"position":[[130,6],[4097,5]]},"314":{"position":[[130,6]]},"315":{"position":[[576,5]]},"1077":{"position":[[716,5]]},"1146":{"position":[[633,5]]},"1173":{"position":[[645,5]]},"1215":{"position":[[633,5]]},"1223":{"position":[[645,5]]}},"keywords":{}}],["alongsid",{"_index":1546,"title":{},"content":{"107":{"position":[[2101,9]]},"1429":{"position":[[93,9]]},"1437":{"position":[[1296,9]]}},"keywords":{}}],["alpaca",{"_index":3284,"title":{"372":{"position":[[0,6]]}},"content":{"363":{"position":[[256,6]]},"373":{"position":[[5,6],[238,6]]},"374":{"position":[[1,6],[139,6],[181,6]]},"375":{"position":[[41,6],[323,6]]},"376":{"position":[[250,6]]},"377":{"position":[[1154,6],[1177,6],[1228,6],[1255,6]]},"379":{"position":[[687,7]]}},"keywords":{}}],["alpaca:dev",{"_index":3285,"title":{},"content":{"363":{"position":[[309,10]]}},"keywords":{}}],["alpaca:dev"",{"_index":3458,"title":{},"content":{"378":{"position":[[95,16]]}},"keywords":{}}],["alphabet",{"_index":4316,"title":{},"content":{"616":{"position":[[283,8]]}},"keywords":{}}],["alreadi",{"_index":926,"title":{},"content":{"61":{"position":[[919,7]]},"84":{"position":[[687,7]]},"94":{"position":[[1793,7],[2159,7]]},"120":{"position":[[1345,7],[1711,7]]},"162":{"position":[[634,7]]},"171":{"position":[[112,8]]},"172":{"position":[[111,8]]},"173":{"position":[[212,8]]},"183":{"position":[[774,7]]},"203":{"position":[[16,8]]},"221":{"position":[[67,8]]},"230":{"position":[[380,7]]},"239":{"position":[[1353,7]]},"254":{"position":[[1126,7]]},"267":{"position":[[1138,7],[1827,7]]},"295":{"position":[[1403,7]]},"307":{"position":[[2838,7]]},"308":{"position":[[1070,7]]},"309":{"position":[[1392,7]]},"314":{"position":[[847,7]]},"419":{"position":[[2223,7]]},"429":{"position":[[712,7]]},"441":{"position":[[832,7]]},"477":{"position":[[414,7]]},"504":{"position":[[1852,7]]},"547":{"position":[[2225,7]]},"593":{"position":[[438,7]]},"598":{"position":[[378,7]]},"639":{"position":[[1850,7]]},"661":{"position":[[279,7]]},"917":{"position":[[1091,7]]},"919":{"position":[[1616,7]]},"964":{"position":[[679,7]]},"965":{"position":[[1091,7]]},"1023":{"position":[[2206,7]]},"1186":{"position":[[55,7]]},"1230":{"position":[[1044,7]]},"1243":{"position":[[793,7]]},"1277":{"position":[[128,7]]},"1455":{"position":[[281,7]]},"1480":{"position":[[1051,7],[1417,7]]}},"keywords":{}}],["alright",{"_index":3075,"title":{},"content":{"314":{"position":[[2945,8]]}},"keywords":{}}],["alter",{"_index":338,"title":{},"content":{"11":{"position":[[1431,5]]},"100":{"position":[[508,5]]},"208":{"position":[[187,11],[1782,11]]},"211":{"position":[[953,12]]},"236":{"position":[[3518,5],[3594,5]]},"237":{"position":[[1790,5],[1866,5]]},"367":{"position":[[500,5]]},"760":{"position":[[533,5],[572,11],[656,10],[922,10]]},"773":{"position":[[533,5],[572,11],[656,10],[922,10]]},"800":{"position":[[533,5],[572,11],[656,10],[922,10]]},"815":{"position":[[533,5],[572,11],[656,10],[922,10]]},"831":{"position":[[533,5],[572,11],[656,10],[922,10]]},"864":{"position":[[1462,5]]},"869":{"position":[[747,5]]},"871":{"position":[[152,5]]},"904":{"position":[[1600,5],[1880,5],[1956,5]]},"917":{"position":[[508,5],[1389,5],[1465,5],[1842,5]]},"918":{"position":[[1892,5],[2172,5],[2248,5]]},"919":{"position":[[1045,5],[1691,5],[2227,5],[2303,5]]},"931":{"position":[[1262,5],[1542,5],[1618,5]]},"944":{"position":[[251,5]]},"945":{"position":[[197,5]]},"965":{"position":[[508,5],[1389,5],[1465,5],[1842,5]]},"1140":{"position":[[649,5]]},"1183":{"position":[[226,5]]},"1209":{"position":[[232,5]]},"1292":{"position":[[726,5]]},"1306":{"position":[[726,5]]},"1316":{"position":[[649,5]]},"1329":{"position":[[726,5]]},"1340":{"position":[[649,5]]},"1351":{"position":[[649,5]]},"1370":{"position":[[414,5]]},"1379":{"position":[[906,5]]},"1384":{"position":[[633,5]]},"1388":{"position":[[661,5]]},"1394":{"position":[[517,5]]},"1403":{"position":[[906,5]]},"1414":{"position":[[906,5]]},"1431":{"position":[[672,5]]}},"keywords":{}}],["alter,drop,truncate,etc",{"_index":4630,"title":{},"content":{"760":{"position":[[64,25]]},"773":{"position":[[64,25]]},"800":{"position":[[64,25]]},"815":{"position":[[64,25]]},"831":{"position":[[64,25]]}},"keywords":{}}],["altern",{"_index":389,"title":{},"content":{"13":{"position":[[532,14]]},"58":{"position":[[669,14]]},"60":{"position":[[920,11]]},"90":{"position":[[427,11]]},"169":{"position":[[915,14]]},"179":{"position":[[226,14]]},"319":{"position":[[336,12]]},"753":{"position":[[273,14]]},"754":{"position":[[784,14]]},"767":{"position":[[419,14]]},"784":{"position":[[7,11]]},"794":{"position":[[990,14]]},"809":{"position":[[990,14]]},"825":{"position":[[826,14]]},"864":{"position":[[497,14]]},"876":{"position":[[497,14]]},"945":{"position":[[546,14]]},"1020":{"position":[[678,14]]},"1123":{"position":[[272,9]]},"1138":{"position":[[1588,11],[1607,11]]},"1151":{"position":[[1547,11],[1566,11]]},"1162":{"position":[[867,11],[889,11]]},"1179":{"position":[[1137,11]]},"1188":{"position":[[797,11],[816,11]]},"1198":{"position":[[142,14]]},"1255":{"position":[[7,11]]},"1260":{"position":[[1071,11],[1090,11]]},"1286":{"position":[[1047,14]]},"1301":{"position":[[883,14]]},"1313":{"position":[[1132,11],[1151,11]]},"1325":{"position":[[1047,14]]},"1337":{"position":[[1132,11],[1151,11]]},"1348":{"position":[[1132,11],[1151,11]]},"1386":{"position":[[1200,11],[1219,11]]},"1420":{"position":[[747,11],[766,11]]},"1427":{"position":[[892,11],[911,11]]},"1439":{"position":[[1088,11]]},"1480":{"position":[[1,14]]}},"keywords":{}}],["although",{"_index":2570,"title":{},"content":{"237":{"position":[[1249,8]]},"595":{"position":[[1759,8]]},"870":{"position":[[1001,8]]},"1019":{"position":[[286,8]]},"1147":{"position":[[403,8]]},"1174":{"position":[[403,8]]},"1216":{"position":[[403,8]]},"1224":{"position":[[403,8]]}},"keywords":{}}],["altogeth",{"_index":508,"title":{},"content":{"17":{"position":[[1094,10]]}},"keywords":{}}],["alway",{"_index":682,"title":{},"content":{"34":{"position":[[859,6]]},"67":{"position":[[121,6]]},"72":{"position":[[169,6]]},"87":{"position":[[84,6]]},"89":{"position":[[8,7]]},"107":{"position":[[2960,6]]},"113":{"position":[[376,6]]},"117":{"position":[[333,6]]},"126":{"position":[[54,6]]},"141":{"position":[[955,6]]},"161":{"position":[[1178,6]]},"162":{"position":[[1246,6]]},"165":{"position":[[1576,6]]},"198":{"position":[[668,6]]},"237":{"position":[[2493,6]]},"239":{"position":[[1126,6]]},"263":{"position":[[571,6],[995,6]]},"274":{"position":[[1843,6]]},"275":{"position":[[433,6],[743,6]]},"277":{"position":[[1338,6]]},"280":{"position":[[111,6]]},"319":{"position":[[1089,6]]},"320":{"position":[[1696,6]]},"321":{"position":[[2095,6]]},"322":{"position":[[694,6]]},"323":{"position":[[987,6]]},"326":{"position":[[1156,6],[1369,6],[1901,6]]},"337":{"position":[[197,6]]},"370":{"position":[[2198,6]]},"432":{"position":[[1319,6]]},"496":{"position":[[628,6],[713,6]]},"517":{"position":[[1651,6],[2812,6]]},"573":{"position":[[1430,6]]},"584":{"position":[[1493,6]]},"619":{"position":[[739,6]]},"735":{"position":[[545,6]]},"747":{"position":[[1004,6]]},"757":{"position":[[2149,6]]},"770":{"position":[[2149,6]]},"786":{"position":[[66,6]]},"797":{"position":[[2156,6]]},"808":{"position":[[1575,6]]},"812":{"position":[[2156,6]]},"828":{"position":[[2156,6]]},"869":{"position":[[1535,6]]},"907":{"position":[[1603,6]]},"923":{"position":[[1603,6]]},"931":{"position":[[2054,6]]},"934":{"position":[[1603,6]]},"950":{"position":[[1603,6]]},"968":{"position":[[1603,6]]},"1043":{"position":[[1870,6]]},"1059":{"position":[[1901,6]]},"1076":{"position":[[435,6]]},"1085":{"position":[[929,6]]},"1192":{"position":[[320,6]]},"1201":{"position":[[230,6],[494,6]]},"1203":{"position":[[351,6]]},"1289":{"position":[[1586,6]]},"1292":{"position":[[756,6]]},"1293":{"position":[[230,6]]},"1303":{"position":[[1190,6],[1697,6]]},"1306":{"position":[[756,6]]},"1307":{"position":[[230,6]]},"1310":{"position":[[907,6]]},"1317":{"position":[[230,6]]},"1329":{"position":[[756,6]]},"1330":{"position":[[230,6]]},"1341":{"position":[[230,6]]},"1346":{"position":[[1312,6]]},"1352":{"position":[[230,6]]},"1358":{"position":[[336,6]]},"1359":{"position":[[230,6]]},"1370":{"position":[[424,6]]},"1380":{"position":[[230,6]]},"1394":{"position":[[317,6]]},"1397":{"position":[[1136,6]]},"1398":{"position":[[1139,6]]},"1404":{"position":[[230,6]]},"1409":{"position":[[1143,6]]},"1415":{"position":[[230,6]]},"1423":{"position":[[327,6]]},"1432":{"position":[[230,6]]},"1434":{"position":[[148,6]]},"1435":{"position":[[272,6]]},"1440":{"position":[[160,6]]},"1442":{"position":[[34,6]]},"1451":{"position":[[819,6]]},"1452":{"position":[[2461,6],[2586,6],[3376,6]]},"1461":{"position":[[4669,6]]},"1463":{"position":[[48,6],[133,6]]},"1464":{"position":[[764,6]]},"1467":{"position":[[1934,6]]},"1471":{"position":[[964,6]]},"1477":{"position":[[218,6],[1030,6],[2838,6],[3000,6],[3252,6]]}},"keywords":{}}],["amazon",{"_index":1988,"title":{"172":{"position":[[0,6]]},"187":{"position":[[32,6]]},"298":{"position":[[0,6]]},"380":{"position":[[0,6]]},"383":{"position":[[34,6]]},"389":{"position":[[0,6]]},"394":{"position":[[0,6]]},"399":{"position":[[0,6]]},"404":{"position":[[0,6]]},"412":{"position":[[0,6]]},"765":{"position":[[0,6]]},"792":{"position":[[0,6]]},"822":{"position":[[0,6]]},"901":{"position":[[0,6]]},"918":{"position":[[0,6]]},"1048":{"position":[[0,6]]},"1121":{"position":[[0,6]]},"1141":{"position":[[13,6]]},"1148":{"position":[[0,6]]},"1159":{"position":[[25,6]]},"1167":{"position":[[24,6]]},"1318":{"position":[[0,6]]},"1321":{"position":[[25,6]]},"1331":{"position":[[0,6]]},"1334":{"position":[[22,6],[36,6]]},"1371":{"position":[[0,6]]},"1373":{"position":[[6,6]]}},"content":{"170":{"position":[[203,6]]},"179":{"position":[[513,6],[525,6]]},"189":{"position":[[256,6],[1132,6]]},"190":{"position":[[216,6]]},"193":{"position":[[82,6]]},"222":{"position":[[133,6]]},"300":{"position":[[150,6]]},"301":{"position":[[296,6]]},"363":{"position":[[320,6],[395,6],[468,6],[536,6],[557,6]]},"364":{"position":[[582,6],[639,6]]},"382":{"position":[[49,7]]},"383":{"position":[[16,6],[55,6]]},"384":{"position":[[233,6]]},"385":{"position":[[72,6],[316,6],[404,6],[467,6],[509,6]]},"386":{"position":[[250,6]]},"387":{"position":[[512,6],[629,6],[720,6],[1386,6]]},"388":{"position":[[159,6]]},"390":{"position":[[50,6],[521,6],[548,6]]},"391":{"position":[[250,6]]},"395":{"position":[[704,6],[727,6]]},"400":{"position":[[80,6]]},"401":{"position":[[305,6]]},"406":{"position":[[34,6]]},"408":{"position":[[596,6]]},"767":{"position":[[283,6]]},"772":{"position":[[12,6]]},"792":{"position":[[596,6]]},"794":{"position":[[616,6]]},"809":{"position":[[616,6]]},"824":{"position":[[388,6]]},"864":{"position":[[1524,6]]},"904":{"position":[[388,6]]},"918":{"position":[[596,6]]},"1051":{"position":[[388,6]]},"1120":{"position":[[72,6],[152,6],[232,6],[301,6]]},"1122":{"position":[[331,6],[353,6]]},"1150":{"position":[[42,6]]},"1204":{"position":[[651,6]]},"1282":{"position":[[70,6],[229,6]]},"1286":{"position":[[673,6]]},"1288":{"position":[[203,6]]},"1289":{"position":[[192,6],[206,6],[470,6],[1471,6],[1486,6]]},"1310":{"position":[[70,6],[244,6],[792,6],[807,6]]},"1321":{"position":[[250,6]]},"1322":{"position":[[133,6],[1690,6]]},"1325":{"position":[[673,6]]},"1334":{"position":[[338,6]]},"1335":{"position":[[133,6],[1338,6]]},"1373":{"position":[[370,6]]},"1374":{"position":[[370,6]]},"1417":{"position":[[150,6],[419,6]]}},"keywords":{}}],["amazonsq",{"_index":3563,"title":{},"content":{"407":{"position":[[250,9]]}},"keywords":{}}],["ambigu",{"_index":6427,"title":{},"content":{"1434":{"position":[[31,10]]},"1462":{"position":[[316,12]]}},"keywords":{}}],["ambiti",{"_index":2329,"title":{},"content":{"210":{"position":[[2328,9]]}},"keywords":{}}],["america",{"_index":497,"title":{},"content":{"17":{"position":[[611,8]]}},"keywords":{}}],["america)eu",{"_index":3476,"title":{},"content":{"385":{"position":[[222,10]]}},"keywords":{}}],["america/new_york",{"_index":4607,"title":{},"content":{"754":{"position":[[826,17]]},"794":{"position":[[1032,17]]},"809":{"position":[[1032,17]]},"825":{"position":[[868,17]]},"1286":{"position":[[1089,17]]},"1301":{"position":[[925,17]]},"1325":{"position":[[1089,17]]}},"keywords":{}}],["america/new_yorkfast",{"_index":6552,"title":{},"content":{"1452":{"position":[[3584,20]]}},"keywords":{}}],["amongst",{"_index":6681,"title":{},"content":{"1474":{"position":[[318,7]]}},"keywords":{}}],["amount",{"_index":1748,"title":{},"content":{"135":{"position":[[429,6]]},"138":{"position":[[1965,6]]},"141":{"position":[[1897,6]]},"142":{"position":[[2018,6]]},"146":{"position":[[97,6]]},"149":{"position":[[100,6]]},"152":{"position":[[110,6]]},"237":{"position":[[1453,6]]},"240":{"position":[[3236,6],[4944,6]]},"254":{"position":[[3650,6]]},"277":{"position":[[770,7],[784,7]]},"278":{"position":[[1333,8]]},"279":{"position":[[1357,6]]},"280":{"position":[[2119,8],[2174,8]]},"330":{"position":[[175,6]]},"331":{"position":[[535,6]]},"343":{"position":[[382,6],[872,6]]},"366":{"position":[[851,6]]},"534":{"position":[[948,6]]},"573":{"position":[[1083,6]]},"747":{"position":[[1260,6]]},"750":{"position":[[539,6]]},"764":{"position":[[300,6]]},"766":{"position":[[539,6]]},"777":{"position":[[300,6]]},"789":{"position":[[527,6]]},"804":{"position":[[298,6]]},"807":{"position":[[527,6]]},"819":{"position":[[298,6]]},"823":{"position":[[527,6]]},"835":{"position":[[298,6]]},"870":{"position":[[396,6]]},"903":{"position":[[877,6]]},"912":{"position":[[1595,6]]},"915":{"position":[[877,6]]},"922":{"position":[[1546,6],[2005,6]]},"930":{"position":[[877,6]]},"963":{"position":[[1031,6]]},"1004":{"position":[[180,6]]},"1040":{"position":[[593,6]]},"1050":{"position":[[593,6]]},"1058":{"position":[[593,6]]},"1157":{"position":[[292,7]]},"1356":{"position":[[759,6],[835,6]]},"1451":{"position":[[714,6]]},"1453":{"position":[[860,6]]},"1459":{"position":[[487,7]]},"1473":{"position":[[52,6]]},"1475":{"position":[[86,6],[230,6]]}},"keywords":{}}],["amp",{"_index":1905,"title":{},"content":{"161":{"position":[[877,5]]},"242":{"position":[[211,5]]},"436":{"position":[[571,5]]},"571":{"position":[[918,5]]},"739":{"position":[[163,5]]},"846":{"position":[[120,5]]},"879":{"position":[[351,5],[526,5]]},"880":{"position":[[273,5]]},"1118":{"position":[[20,5],[55,5]]},"1392":{"position":[[350,5]]},"1477":{"position":[[3383,5]]}},"keywords":{}}],["amp;&",{"_index":885,"title":{},"content":{"58":{"position":[[442,10],[621,10]]},"169":{"position":[[683,10],[865,10]]}},"keywords":{}}],["amp;lt;user&gt;.flow_watermark",{"_index":4866,"title":{},"content":{"867":{"position":[[798,36]]}},"keywords":{}}],["amp;mysetup",{"_index":1742,"title":{},"content":{"133":{"position":[[384,12]]}},"keywords":{}}],["amplitud",{"_index":3320,"title":{"420":{"position":[[0,9]]}},"content":{"364":{"position":[[654,9]]},"421":{"position":[[56,9]]},"422":{"position":[[4,9]]},"423":{"position":[[250,9]]},"424":{"position":[[77,9],[135,9],[420,9]]}},"keywords":{}}],["amplitude:dev",{"_index":3321,"title":{},"content":{"364":{"position":[[710,13]]},"425":{"position":[[90,13]]}},"keywords":{}}],["amzn1.appl",{"_index":3497,"title":{},"content":{"388":{"position":[[226,17]]}},"keywords":{}}],["analog",{"_index":1311,"title":{},"content":{"90":{"position":[[230,6]]},"320":{"position":[[239,6],[752,9]]},"321":{"position":[[1192,10],[1420,6]]},"429":{"position":[[879,9]]},"1178":{"position":[[379,9]]},"1449":{"position":[[319,9]]}},"keywords":{}}],["analys",{"_index":5539,"title":{},"content":{"1140":{"position":[[689,7]]},"1292":{"position":[[784,7]]},"1306":{"position":[[784,7]]},"1316":{"position":[[689,7]]},"1329":{"position":[[784,7]]},"1340":{"position":[[689,7]]},"1351":{"position":[[689,7]]},"1431":{"position":[[712,7]]}},"keywords":{}}],["analysi",{"_index":171,"title":{},"content":{"4":{"position":[[494,9]]},"325":{"position":[[751,8]]},"977":{"position":[[712,8]]}},"keywords":{}}],["analyst",{"_index":3163,"title":{},"content":{"324":{"position":[[33,8],[809,8]]}},"keywords":{}}],["analyt",{"_index":541,"title":{"567":{"position":[[7,9]]},"579":{"position":[[7,9]]},"1098":{"position":[[8,9]]}},"content":{"20":{"position":[[729,10]]},"189":{"position":[[574,9]]},"193":{"position":[[357,10],[407,10]]},"196":{"position":[[361,10]]},"232":{"position":[[684,10]]},"233":{"position":[[368,10]]},"322":{"position":[[304,9],[370,9]]},"324":{"position":[[517,9]]},"325":{"position":[[770,10]]},"326":{"position":[[306,9]]},"364":{"position":[[1443,9],[1508,9],[1548,9],[1611,9]]},"483":{"position":[[469,9]]},"558":{"position":[[46,9]]},"569":{"position":[[82,9]]},"570":{"position":[[29,9]]},"571":{"position":[[29,9],[111,9],[132,9],[269,9],[357,9],[378,9],[442,9],[841,9]]},"572":{"position":[[257,9]]},"573":{"position":[[864,9],[942,9],[1359,9]]},"574":{"position":[[143,9],[399,9]]},"575":{"position":[[152,9]]},"577":{"position":[[12,9],[286,9],[360,9]]},"578":{"position":[[16,9],[150,10],[418,9]]},"581":{"position":[[49,9],[115,9],[246,9]]},"582":{"position":[[128,9],[454,9]]},"583":{"position":[[247,9]]},"584":{"position":[[619,10],[864,9],[1081,9],[1427,10]]},"585":{"position":[[143,9]]},"586":{"position":[[152,9]]},"588":{"position":[[12,9],[281,9],[355,9]]},"605":{"position":[[53,10],[126,10],[236,9],[263,9],[287,9],[313,9],[337,9]]},"606":{"position":[[95,9],[436,10]]},"715":{"position":[[140,9],[164,9]]},"849":{"position":[[790,9]]},"899":{"position":[[73,9],[237,9],[292,9],[347,9],[390,9]]},"900":{"position":[[109,9]]},"1099":{"position":[[64,9]]},"1100":{"position":[[258,9]]},"1101":{"position":[[337,9]]}},"keywords":{}}],["analytics:dev",{"_index":5381,"title":{},"content":{"1102":{"position":[[98,13]]}},"keywords":{}}],["analyz",{"_index":4153,"title":{},"content":{"571":{"position":[[924,7]]},"577":{"position":[[184,8]]},"588":{"position":[[179,8]]},"1140":{"position":[[727,7]]},"1292":{"position":[[830,7]]},"1306":{"position":[[830,7]]},"1316":{"position":[[727,7]]},"1329":{"position":[[830,7]]},"1340":{"position":[[727,7]]},"1351":{"position":[[727,7]]},"1370":{"position":[[436,7]]},"1431":{"position":[[750,7]]}},"keywords":{}}],["anchor",{"_index":1738,"title":{},"content":{"133":{"position":[[114,7],[242,7]]},"1476":{"position":[[1313,8]]}},"keywords":{}}],["and/or",{"_index":2439,"title":{},"content":{"221":{"position":[[137,6]]},"321":{"position":[[2110,6]]},"529":{"position":[[78,6]]},"870":{"position":[[445,6]]},"1383":{"position":[[203,6]]},"1442":{"position":[[961,6]]}},"keywords":{}}],["andhow",{"_index":2484,"title":{},"content":{"228":{"position":[[1388,6]]}},"keywords":{}}],["andid",{"_index":1544,"title":{},"content":{"107":{"position":[[2042,5]]}},"keywords":{}}],["andmateri",{"_index":3159,"title":{},"content":{"323":{"position":[[473,19]]}},"keywords":{}}],["android",{"_index":502,"title":{},"content":{"17":{"position":[[697,8]]}},"keywords":{}}],["anew",{"_index":6495,"title":{},"content":{"1440":{"position":[[1025,5]]}},"keywords":{}}],["annot",{"_index":1603,"title":{"159":{"position":[[0,12]]},"164":{"position":[[7,12]]},"166":{"position":[[8,12]]}},"content":{"113":{"position":[[49,12],[426,12],[889,11]]},"115":{"position":[[228,11],[365,11]]},"132":{"position":[[11,11],[130,11]]},"159":{"position":[[202,8],[357,10],[639,11]]},"163":{"position":[[404,11]]},"164":{"position":[[101,11],[466,12],[888,11],[1395,11],[1670,11],[2225,11]]},"166":{"position":[[21,11],[116,10],[227,10],[501,11],[670,10]]},"183":{"position":[[2017,12]]},"281":{"position":[[67,12],[1919,12],[1972,11],[2822,11],[3074,12],[3279,11]]},"425":{"position":[[303,11]]},"748":{"position":[[425,11]]},"1358":{"position":[[681,11]]},"1438":{"position":[[448,11]]},"1463":{"position":[[89,9],[199,10]]},"1465":{"position":[[65,12]]},"1477":{"position":[[1397,10],[3563,10]]}},"keywords":{}}],["annotation,reduc",{"_index":1949,"title":{},"content":{"164":{"position":[[1652,17]]}},"keywords":{}}],["annotations.curr",{"_index":1609,"title":{},"content":{"113":{"position":[[801,19]]}},"keywords":{}}],["annotationswithin",{"_index":1935,"title":{},"content":{"164":{"position":[[54,17]]}},"keywords":{}}],["anonym",{"_index":3031,"title":{},"content":{"299":{"position":[[323,9]]},"413":{"position":[[177,9]]},"414":{"position":[[59,9],[169,9]]},"417":{"position":[[850,9],[1041,9]]}},"keywords":{}}],["anoth",{"_index":83,"title":{},"content":{"2":{"position":[[410,7]]},"43":{"position":[[377,7]]},"87":{"position":[[637,8]]},"90":{"position":[[331,7]]},"92":{"position":[[942,7]]},"107":{"position":[[1790,7],[1984,7],[3789,7]]},"111":{"position":[[317,7]]},"160":{"position":[[392,7]]},"183":{"position":[[2902,7]]},"192":{"position":[[1288,7]]},"217":{"position":[[162,7]]},"254":{"position":[[2588,7]]},"269":{"position":[[158,7]]},"296":{"position":[[3547,7]]},"314":{"position":[[2219,7]]},"320":{"position":[[1212,7]]},"321":{"position":[[474,8],[2196,8]]},"323":{"position":[[82,8]]},"324":{"position":[[978,7],[1004,7]]},"480":{"position":[[854,7]]},"548":{"position":[[99,7]]},"645":{"position":[[351,7]]},"652":{"position":[[351,7]]},"659":{"position":[[27,7]]},"909":{"position":[[1158,7]]},"925":{"position":[[1158,7]]},"936":{"position":[[1158,7]]},"952":{"position":[[1158,7]]},"970":{"position":[[1158,7]]},"1243":{"position":[[824,7]]},"1437":{"position":[[1067,7],[1486,7]]},"1452":{"position":[[1965,7]]},"1461":{"position":[[330,7],[469,7],[4334,7]]}},"keywords":{}}],["answer",{"_index":187,"title":{},"content":{"4":{"position":[[708,6]]},"114":{"position":[[661,7]]},"115":{"position":[[178,7]]},"1435":{"position":[[706,6]]}},"keywords":{}}],["anti",{"_index":5816,"title":{},"content":{"1192":{"position":[[484,4]]}},"keywords":{}}],["anvil",{"_index":2800,"title":{},"content":{"268":{"position":[[364,5],[661,5],[942,5],[991,6],[1051,5]]},"269":{"position":[[299,5],[565,5],[601,6]]},"307":{"position":[[1208,6],[1702,6],[2058,6],[2585,6]]},"309":{"position":[[2533,6],[3140,6]]},"344":{"position":[[327,6]]}},"keywords":{}}],["anvil_product",{"_index":1127,"title":{},"content":{"81":{"position":[[1816,14]]}},"keywords":{}}],["anvils.schema.yaml",{"_index":1037,"title":{},"content":{"69":{"position":[[454,18]]},"76":{"position":[[402,18]]}},"keywords":{}}],["anvils_drop",{"_index":1969,"title":{},"content":{"166":{"position":[[412,15]]}},"keywords":{}}],["anymor",{"_index":2626,"title":{},"content":{"242":{"position":[[157,8]]},"297":{"position":[[172,8]]}},"keywords":{}}],["anyon",{"_index":3882,"title":{},"content":{"489":{"position":[[780,6]]},"491":{"position":[[202,6]]},"617":{"position":[[822,6]]},"662":{"position":[[780,6]]},"664":{"position":[[223,6]]},"677":{"position":[[780,6]]},"679":{"position":[[202,6]]},"692":{"position":[[780,6]]},"694":{"position":[[202,6]]}},"keywords":{}}],["anyth",{"_index":1292,"title":{},"content":{"87":{"position":[[602,8]]},"96":{"position":[[779,8]]},"203":{"position":[[321,8]]},"236":{"position":[[1684,8]]},"240":{"position":[[2703,9]]},"560":{"position":[[293,8]]},"1232":{"position":[[403,8]]}},"keywords":{}}],["anywhere.when",{"_index":2465,"title":{},"content":{"222":{"position":[[787,13]]},"1322":{"position":[[787,13]]},"1335":{"position":[[787,13]]}},"keywords":{}}],["aogagooubp+byajdn8esv1dcpu6jsdf/tf//rbeyror6bdb/3fyw4zn+zgtgih5t",{"_index":1245,"title":{},"content":{"83":{"position":[[1702,64]]},"371":{"position":[[621,64]]},"1139":{"position":[[508,64]]}},"keywords":{}}],["apach",{"_index":156,"title":{"319":{"position":[[0,6]]},"426":{"position":[[0,6]]},"1159":{"position":[[0,6]]},"1167":{"position":[[0,6]]},"1217":{"position":[[0,6]]}},"content":{"4":{"position":[[189,6]]},"107":{"position":[[161,6]]},"319":{"position":[[34,6]]},"363":{"position":[[620,6]]},"430":{"position":[[36,6]]},"431":{"position":[[250,6]]},"1120":{"position":[[326,6],[420,6],[515,6]]},"1164":{"position":[[726,6]]}},"keywords":{}}],["apart",{"_index":2061,"title":{},"content":{"182":{"position":[[426,5]]},"238":{"position":[[1378,5]]}},"keywords":{}}],["api",{"_index":652,"title":{"354":{"position":[[0,3]]},"493":{"position":[[15,3]]},"845":{"position":[[35,4]]},"847":{"position":[[17,4]]},"1131":{"position":[[0,3]]}},"content":{"31":{"position":[[68,4]]},"45":{"position":[[339,3]]},"53":{"position":[[203,5]]},"66":{"position":[[411,3]]},"84":{"position":[[159,4]]},"154":{"position":[[1989,4],[2003,3]]},"169":{"position":[[1555,3]]},"252":{"position":[[186,4]]},"263":{"position":[[125,3]]},"267":{"position":[[1963,3]]},"270":{"position":[[225,3]]},"274":{"position":[[523,3]]},"284":{"position":[[34,3]]},"312":{"position":[[190,4]]},"340":{"position":[[415,3]]},"351":{"position":[[68,3],[127,3]]},"354":{"position":[[18,3]]},"355":{"position":[[13,3]]},"359":{"position":[[49,3],[138,3],[146,3]]},"364":{"position":[[1009,3]]},"373":{"position":[[24,3],[47,4],[96,3],[163,3],[257,3],[414,4],[492,3]]},"374":{"position":[[195,4]]},"375":{"position":[[330,3]]},"377":{"position":[[287,4],[446,4],[1161,3],[1184,3],[1235,3],[1262,3]]},"379":{"position":[[77,3]]},"384":{"position":[[244,3]]},"385":{"position":[[366,4]]},"392":{"position":[[500,3]]},"397":{"position":[[649,3]]},"417":{"position":[[666,3]]},"421":{"position":[[66,5]]},"422":{"position":[[30,3]]},"424":{"position":[[69,3],[87,3]]},"451":{"position":[[66,5]]},"457":{"position":[[66,5]]},"458":{"position":[[69,3]]},"460":{"position":[[74,3],[92,3],[473,4]]},"463":{"position":[[62,5]]},"464":{"position":[[76,3],[105,3],[181,3],[205,3]]},"466":{"position":[[80,3],[94,3],[215,3]]},"469":{"position":[[59,3]]},"471":{"position":[[11,3]]},"472":{"position":[[286,3],[348,3],[663,3]]},"494":{"position":[[4,3],[47,3],[84,3]]},"496":{"position":[[88,3]]},"507":{"position":[[79,3]]},"509":{"position":[[69,3],[87,3],[613,3]]},"515":{"position":[[145,3],[169,3],[556,4],[578,3],[614,3]]},"517":{"position":[[345,3],[374,3],[718,4],[3298,4],[3530,3]]},"532":{"position":[[208,3]]},"538":{"position":[[77,3]]},"540":{"position":[[233,3],[243,3]]},"550":{"position":[[124,4]]},"556":{"position":[[883,5]]},"560":{"position":[[19,3],[373,3]]},"571":{"position":[[152,4],[398,4]]},"577":{"position":[[32,3],[128,3]]},"578":{"position":[[438,4]]},"581":{"position":[[64,3]]},"584":{"position":[[1091,4]]},"588":{"position":[[27,3],[123,3]]},"609":{"position":[[120,4]]},"617":{"position":[[104,4],[323,4]]},"619":{"position":[[173,3],[238,4]]},"622":{"position":[[67,5]]},"623":{"position":[[68,3]]},"625":{"position":[[68,3],[104,3]]},"628":{"position":[[64,5]]},"629":{"position":[[80,3]]},"640":{"position":[[35,5],[269,3],[302,3]]},"642":{"position":[[285,4]]},"667":{"position":[[66,5],[119,3],[146,3]]},"668":{"position":[[92,3]]},"682":{"position":[[65,4]]},"697":{"position":[[65,5]]},"698":{"position":[[79,3]]},"700":{"position":[[68,3],[102,3]]},"704":{"position":[[73,3]]},"706":{"position":[[69,3],[102,3]]},"709":{"position":[[61,5]]},"710":{"position":[[1,3],[30,3]]},"712":{"position":[[71,3],[86,3],[381,3]]},"718":{"position":[[101,4]]},"723":{"position":[[35,3],[124,3],[178,4]]},"726":{"position":[[218,4],[266,3]]},"731":{"position":[[108,3],[207,3]]},"733":{"position":[[33,3]]},"735":{"position":[[49,3],[320,3],[343,3]]},"739":{"position":[[59,3],[104,3],[127,3]]},"744":{"position":[[65,5]]},"849":{"position":[[1453,3]]},"859":{"position":[[456,3]]},"882":{"position":[[63,5]]},"883":{"position":[[24,3]]},"888":{"position":[[62,4]]},"889":{"position":[[62,3]]},"891":{"position":[[86,3],[105,3]]},"897":{"position":[[192,3]]},"900":{"position":[[15,3],[383,3]]},"943":{"position":[[236,3],[821,3],[860,3],[913,3]]},"956":{"position":[[65,5]]},"959":{"position":[[229,4]]},"976":{"position":[[159,4],[291,4]]},"979":{"position":[[65,5]]},"980":{"position":[[10,3]]},"982":{"position":[[77,3],[111,3],[231,4]]},"987":{"position":[[199,3]]},"989":{"position":[[898,4],[903,6]]},"994":{"position":[[63,5]]},"1002":{"position":[[199,3]]},"1004":{"position":[[981,4],[986,6]]},"1012":{"position":[[62,5]]},"1013":{"position":[[24,3]]},"1068":{"position":[[18,3]]},"1073":{"position":[[63,4]]},"1074":{"position":[[61,4]]},"1076":{"position":[[239,3]]},"1077":{"position":[[133,3]]},"1089":{"position":[[228,3]]},"1091":{"position":[[21,3]]},"1094":{"position":[[104,3],[197,3]]},"1097":{"position":[[33,3]]},"1099":{"position":[[74,5]]},"1104":{"position":[[64,4]]},"1107":{"position":[[156,4]]},"1110":{"position":[[63,5]]},"1125":{"position":[[443,3]]},"1128":{"position":[[64,4]]},"1129":{"position":[[127,3]]},"1131":{"position":[[169,3]]},"1133":{"position":[[199,3],[226,3],[267,3],[378,3],[850,4]]},"1144":{"position":[[804,3]]},"1170":{"position":[[804,3]]},"1195":{"position":[[335,3]]},"1196":{"position":[[489,3],[497,3],[547,4],[574,3]]},"1226":{"position":[[85,3]]},"1245":{"position":[[46,4],[275,4]]},"1274":{"position":[[65,3],[118,3]]},"1277":{"position":[[360,3],[377,3],[447,3],[462,3],[960,3]]},"1354":{"position":[[48,3],[70,3]]},"1356":{"position":[[77,3],[129,4]]},"1362":{"position":[[259,3],[418,3]]},"1438":{"position":[[200,4]]},"1440":{"position":[[23,5]]}},"keywords":{}}],["api)data",{"_index":4812,"title":{},"content":{"847":{"position":[[258,8]]}},"keywords":{}}],["api.usw2a1.rockset.com",{"_index":6263,"title":{},"content":{"1356":{"position":[[279,22]]},"1357":{"position":[[88,22]]}},"keywords":{}}],["api:dev",{"_index":3340,"title":{},"content":{"364":{"position":[[1523,7]]},"586":{"position":[[167,7]]}},"keywords":{}}],["api_id",{"_index":3256,"title":{},"content":{"349":{"position":[[292,7]]}},"keywords":{}}],["api_key",{"_index":3278,"title":{},"content":{"360":{"position":[[140,8]]},"425":{"position":[[112,8]]},"467":{"position":[[108,8]]},"510":{"position":[[111,8]]},"707":{"position":[[110,8]]},"1196":{"position":[[666,7]]},"1357":{"position":[[111,8]]}},"keywords":{}}],["api_key_id",{"_index":3453,"title":{},"content":{"377":{"position":[[1142,11]]},"378":{"position":[[120,11]]}},"keywords":{}}],["api_secret_key",{"_index":3454,"title":{},"content":{"377":{"position":[[1212,15]]},"378":{"position":[[147,15]]}},"keywords":{}}],["api_token",{"_index":3261,"title":{},"content":{"351":{"position":[[116,10]]},"473":{"position":[[195,10]]},"713":{"position":[[107,10]]},"1133":{"position":[[137,9]]},"1134":{"position":[[130,10],[169,9]]}},"keywords":{}}],["apikey",{"_index":4337,"title":{},"content":{"626":{"position":[[113,7]]},"701":{"position":[[111,7]]},"735":{"position":[[276,7]]},"736":{"position":[[135,6],[142,7]]},"983":{"position":[[111,7]]}},"keywords":{}}],["apitoken",{"_index":4052,"title":{},"content":{"540":{"position":[[223,9]]},"541":{"position":[[135,9]]}},"keywords":{}}],["app",{"_index":355,"title":{"25":{"position":[[16,4]]},"135":{"position":[[20,4]]},"137":{"position":[[19,4]]},"258":{"position":[[27,3]]},"261":{"position":[[32,3]]},"339":{"position":[[31,4]]},"383":{"position":[[57,4]]},"445":{"position":[[60,4]]},"523":{"position":[[57,4]]},"531":{"position":[[57,4]]},"553":{"position":[[57,4]]},"570":{"position":[[57,4]]},"608":{"position":[[57,4]]},"615":{"position":[[57,4]]},"644":{"position":[[58,4]]},"651":{"position":[[58,4]]},"717":{"position":[[59,4]]},"732":{"position":[[60,4]]},"987":{"position":[[61,4]]},"1002":{"position":[[61,4]]},"1082":{"position":[[32,3]]},"1083":{"position":[[47,3]]},"1227":{"position":[[40,4]]},"1244":{"position":[[40,4]]},"1470":{"position":[[36,4]]}},"content":{"12":{"position":[[79,4]]},"13":{"position":[[59,3]]},"25":{"position":[[76,3]]},"30":{"position":[[145,3],[244,4],[291,4]]},"31":{"position":[[236,4]]},"33":{"position":[[271,4]]},"53":{"position":[[605,4]]},"55":{"position":[[771,4],[866,3]]},"58":{"position":[[912,4]]},"80":{"position":[[263,4]]},"81":{"position":[[1205,3]]},"83":{"position":[[786,4]]},"84":{"position":[[1309,3]]},"119":{"position":[[136,4]]},"135":{"position":[[9,3],[185,4],[726,4],[877,4]]},"137":{"position":[[27,4],[548,3]]},"138":{"position":[[1541,3],[1574,3],[1604,3]]},"140":{"position":[[555,4]]},"141":{"position":[[1546,3],[1579,3],[1609,3]]},"142":{"position":[[1558,3],[1591,3],[1621,3]]},"162":{"position":[[986,3]]},"165":{"position":[[918,4]]},"169":{"position":[[55,4],[1414,3],[1534,3]]},"176":{"position":[[147,4]]},"179":{"position":[[68,3]]},"182":{"position":[[46,4]]},"183":{"position":[[95,4]]},"184":{"position":[[170,4]]},"188":{"position":[[82,3]]},"189":{"position":[[676,5]]},"190":{"position":[[20,3]]},"191":{"position":[[111,3]]},"207":{"position":[[808,4]]},"225":{"position":[[607,4]]},"228":{"position":[[116,3]]},"240":{"position":[[246,3]]},"259":{"position":[[35,4],[1708,4]]},"263":{"position":[[49,4],[144,3],[538,4]]},"264":{"position":[[695,4]]},"266":{"position":[[38,4],[91,3]]},"267":{"position":[[103,4],[1982,3]]},"270":{"position":[[244,3]]},"274":{"position":[[542,3]]},"275":{"position":[[907,3]]},"284":{"position":[[53,3],[190,4],[298,3]]},"288":{"position":[[171,3]]},"299":{"position":[[171,3]]},"307":{"position":[[475,3],[523,4]]},"308":{"position":[[831,4]]},"309":{"position":[[1414,3],[1462,4]]},"340":{"position":[[274,3],[394,3]]},"350":{"position":[[49,4]]},"351":{"position":[[75,3],[137,3]]},"358":{"position":[[49,4]]},"369":{"position":[[49,4]]},"376":{"position":[[49,4]]},"382":{"position":[[89,4]]},"384":{"position":[[136,4]]},"386":{"position":[[49,4]]},"387":{"position":[[122,4]]},"391":{"position":[[49,4]]},"396":{"position":[[49,4]]},"401":{"position":[[77,3]]},"407":{"position":[[49,4]]},"416":{"position":[[49,4]]},"423":{"position":[[49,4]]},"431":{"position":[[49,4]]},"436":{"position":[[329,3],[471,3]]},"437":{"position":[[49,4]]},"444":{"position":[[92,4]]},"447":{"position":[[49,4]]},"448":{"position":[[122,4]]},"453":{"position":[[49,4]]},"459":{"position":[[49,4]]},"464":{"position":[[303,3]]},"465":{"position":[[49,4]]},"472":{"position":[[49,4]]},"481":{"position":[[49,4]]},"485":{"position":[[371,3]]},"486":{"position":[[363,3]]},"488":{"position":[[70,3]]},"495":{"position":[[49,4]]},"500":{"position":[[125,4]]},"501":{"position":[[60,4]]},"508":{"position":[[49,4]]},"509":{"position":[[323,3]]},"513":{"position":[[226,4]]},"514":{"position":[[31,4]]},"515":{"position":[[121,3],[460,3],[763,4]]},"516":{"position":[[49,4]]},"522":{"position":[[227,4]]},"525":{"position":[[49,4]]},"530":{"position":[[227,4]]},"531":{"position":[[276,4],[302,3],[331,3]]},"533":{"position":[[49,4]]},"534":{"position":[[122,4]]},"539":{"position":[[49,4]]},"544":{"position":[[49,4]]},"551":{"position":[[225,4]]},"555":{"position":[[49,4]]},"556":{"position":[[122,4]]},"563":{"position":[[78,3]]},"569":{"position":[[244,4]]},"572":{"position":[[49,4]]},"573":{"position":[[126,4],[435,4]]},"581":{"position":[[390,4]]},"583":{"position":[[49,4]]},"584":{"position":[[136,4]]},"592":{"position":[[49,4]]},"600":{"position":[[49,4]]},"607":{"position":[[243,4]]},"608":{"position":[[206,4]]},"610":{"position":[[49,4]]},"611":{"position":[[122,4]]},"614":{"position":[[227,4]]},"618":{"position":[[49,4]]},"624":{"position":[[49,4]]},"630":{"position":[[49,4]]},"636":{"position":[[49,4]]},"643":{"position":[[102,3],[201,4]]},"645":{"position":[[76,3],[133,3],[297,4],[311,3],[404,3]]},"646":{"position":[[49,4],[474,3],[686,3]]},"647":{"position":[[143,3]]},"650":{"position":[[101,3],[200,4]]},"652":{"position":[[76,3],[133,3],[297,4],[311,3],[404,3]]},"653":{"position":[[49,4]]},"654":{"position":[[195,3],[407,3]]},"655":{"position":[[149,3]]},"657":{"position":[[371,3]]},"658":{"position":[[363,3]]},"659":{"position":[[227,3]]},"669":{"position":[[49,4]]},"673":{"position":[[371,3]]},"674":{"position":[[363,3]]},"675":{"position":[[18,3]]},"676":{"position":[[70,3]]},"683":{"position":[[68,4]]},"684":{"position":[[49,4]]},"685":{"position":[[107,4]]},"688":{"position":[[371,3]]},"689":{"position":[[363,3]]},"691":{"position":[[70,3]]},"699":{"position":[[49,4]]},"705":{"position":[[49,4]]},"711":{"position":[[49,4]]},"716":{"position":[[227,4]]},"719":{"position":[[49,4]]},"720":{"position":[[122,4],[648,4]]},"724":{"position":[[309,3]]},"725":{"position":[[77,3]]},"726":{"position":[[25,4],[310,3],[495,3]]},"727":{"position":[[49,4]]},"731":{"position":[[198,4]]},"734":{"position":[[49,4]]},"740":{"position":[[49,4]]},"746":{"position":[[49,4]]},"756":{"position":[[49,4]]},"769":{"position":[[49,4]]},"781":{"position":[[49,4]]},"796":{"position":[[49,4]]},"811":{"position":[[49,4]]},"827":{"position":[[49,4]]},"841":{"position":[[49,4]]},"850":{"position":[[49,4]]},"855":{"position":[[247,4],[320,4]]},"858":{"position":[[49,4]]},"859":{"position":[[122,4]]},"866":{"position":[[49,4]]},"878":{"position":[[49,4]]},"884":{"position":[[49,4]]},"890":{"position":[[49,4]]},"894":{"position":[[95,3]]},"895":{"position":[[521,3]]},"896":{"position":[[49,4]]},"900":{"position":[[290,3]]},"906":{"position":[[49,4]]},"921":{"position":[[49,4]]},"933":{"position":[[49,4]]},"949":{"position":[[49,4]]},"958":{"position":[[49,4]]},"967":{"position":[[49,4]]},"981":{"position":[[49,4]]},"987":{"position":[[30,4]]},"989":{"position":[[865,4],[1026,3]]},"990":{"position":[[49,4]]},"991":{"position":[[122,4]]},"996":{"position":[[49,4]]},"1002":{"position":[[30,4]]},"1004":{"position":[[948,4],[1109,3]]},"1005":{"position":[[49,4]]},"1009":{"position":[[122,4]]},"1014":{"position":[[49,4]]},"1021":{"position":[[49,4]]},"1027":{"position":[[49,4]]},"1033":{"position":[[53,4]]},"1044":{"position":[[49,4]]},"1052":{"position":[[49,4]]},"1060":{"position":[[49,4]]},"1066":{"position":[[49,3]]},"1067":{"position":[[30,4],[142,4],[202,3],[244,3],[339,4],[424,4],[537,3],[653,3]]},"1069":{"position":[[49,4]]},"1070":{"position":[[122,4],[391,4],[497,4],[615,4]]},"1075":{"position":[[49,4]]},"1081":{"position":[[143,3]]},"1082":{"position":[[80,4]]},"1083":{"position":[[118,3]]},"1084":{"position":[[49,4]]},"1085":{"position":[[197,4]]},"1093":{"position":[[49,4]]},"1100":{"position":[[49,4]]},"1106":{"position":[[49,4]]},"1112":{"position":[[49,4]]},"1124":{"position":[[49,4]]},"1132":{"position":[[49,4]]},"1133":{"position":[[711,4]]},"1200":{"position":[[560,3]]},"1226":{"position":[[197,3]]},"1227":{"position":[[79,4]]},"1230":{"position":[[297,4]]},"1243":{"position":[[1147,4],[1268,4]]},"1247":{"position":[[113,4],[468,4]]},"1252":{"position":[[49,4]]},"1446":{"position":[[17,4]]},"1469":{"position":[[52,4]]},"1470":{"position":[[83,4],[282,4]]},"1479":{"position":[[17,4]]}},"keywords":{}}],["app'",{"_index":2811,"title":{},"content":{"270":{"position":[[423,5]]},"274":{"position":[[713,5]]},"515":{"position":[[498,5]]},"728":{"position":[[215,5],[288,5]]},"1133":{"position":[[452,5],[568,5]]}},"keywords":{}}],["app.edit",{"_index":2792,"title":{},"content":{"264":{"position":[[929,8]]}},"keywords":{}}],["app.set",{"_index":5268,"title":{},"content":{"1067":{"position":[[65,7]]}},"keywords":{}}],["app/schemas/products.sql",{"_index":2533,"title":{},"content":{"236":{"position":[[1367,25]]}},"keywords":{}}],["appboard",{"_index":4992,"title":{},"content":{"900":{"position":[[238,9]]}},"keywords":{}}],["appear",{"_index":530,"title":{},"content":{"20":{"position":[[127,6]]},"74":{"position":[[840,7]]},"80":{"position":[[373,6]]},"189":{"position":[[803,8]]},"190":{"position":[[190,6],[257,7]]},"192":{"position":[[228,7]]},"217":{"position":[[428,7],[540,7],[1235,8]]},"218":{"position":[[1718,8]]},"228":{"position":[[984,8]]},"259":{"position":[[1186,8],[2767,8]]},"267":{"position":[[233,8]]},"268":{"position":[[1852,7]]},"269":{"position":[[1309,7]]},"270":{"position":[[1924,7]]},"290":{"position":[[392,7]]},"291":{"position":[[178,7],[1651,8]]},"301":{"position":[[338,7]]},"302":{"position":[[178,7],[1560,8]]},"308":{"position":[[77,7]]},"363":{"position":[[160,7]]},"436":{"position":[[725,6]]},"578":{"position":[[81,8]]},"1000":{"position":[[480,6]]},"1443":{"position":[[103,6]]},"1455":{"position":[[420,6]]},"1470":{"position":[[164,7]]}},"keywords":{}}],["append",{"_index":443,"title":{"1464":{"position":[[0,6]]}},"content":{"14":{"position":[[1096,9]]},"100":{"position":[[221,6]]},"128":{"position":[[315,8]]},"164":{"position":[[1730,6],[1779,8],[1880,9],[1935,6]]},"183":{"position":[[408,6]]},"190":{"position":[[723,6]]},"192":{"position":[[361,6]]},"217":{"position":[[806,6]]},"267":{"position":[[783,6]]},"278":{"position":[[1595,9],[1691,8]]},"290":{"position":[[614,6]]},"301":{"position":[[554,6]]},"320":{"position":[[808,6]]},"321":{"position":[[860,6],[958,6]]},"322":{"position":[[701,6]]},"326":{"position":[[640,6]]},"480":{"position":[[738,6]]},"488":{"position":[[150,6]]},"659":{"position":[[307,6]]},"676":{"position":[[150,6]]},"691":{"position":[[150,6]]},"821":{"position":[[1445,6]]},"1166":{"position":[[80,8]]},"1464":{"position":[[0,6],[7,6],[241,6],[364,6],[428,6]]},"1467":{"position":[[2825,7]]}},"keywords":{}}],["appfacebook",{"_index":4416,"title":{},"content":{"668":{"position":[[113,11]]}},"keywords":{}}],["appli",{"_index":360,"title":{"1439":{"position":[[29,6]]}},"content":{"12":{"position":[[154,5]]},"32":{"position":[[470,5]]},"44":{"position":[[449,8]]},"94":{"position":[[462,5],[2607,7],[3032,7]]},"97":{"position":[[295,7]]},"100":{"position":[[723,7],[1346,5]]},"111":{"position":[[279,7]]},"114":{"position":[[690,7]]},"115":{"position":[[381,7],[1362,7]]},"120":{"position":[[2207,7]]},"121":{"position":[[507,7]]},"138":{"position":[[270,7]]},"141":{"position":[[580,7]]},"142":{"position":[[383,7]]},"162":{"position":[[1253,5]]},"192":{"position":[[1923,5]]},"208":{"position":[[851,5]]},"217":{"position":[[1968,5]]},"218":{"position":[[1251,5],[1878,5]]},"219":{"position":[[568,5]]},"259":{"position":[[1381,5],[2327,5],[2927,5]]},"271":{"position":[[17,7]]},"278":{"position":[[486,5],[1730,7]]},"279":{"position":[[49,7]]},"291":{"position":[[1254,5],[1424,5],[1811,5],[1848,5]]},"301":{"position":[[1000,5]]},"302":{"position":[[1179,5],[1339,5],[1720,5],[1757,5]]},"307":{"position":[[638,5]]},"309":{"position":[[224,5],[1679,5]]},"319":{"position":[[1096,7]]},"321":{"position":[[718,8]]},"322":{"position":[[1573,5]]},"324":{"position":[[646,7]]},"332":{"position":[[704,7]]},"415":{"position":[[128,5]]},"417":{"position":[[1160,7]]},"438":{"position":[[1676,7]]},"480":{"position":[[1374,6]]},"502":{"position":[[198,7]]},"517":{"position":[[263,5],[1027,5],[1254,5]]},"534":{"position":[[1638,5]]},"545":{"position":[[769,7]]},"554":{"position":[[233,8]]},"577":{"position":[[137,5]]},"578":{"position":[[190,7]]},"588":{"position":[[132,5]]},"605":{"position":[[204,7]]},"767":{"position":[[1373,7]]},"792":{"position":[[10,5]]},"824":{"position":[[1439,7]]},"869":{"position":[[166,7]]},"918":{"position":[[10,5]]},"989":{"position":[[400,8]]},"1000":{"position":[[779,5],[841,5]]},"1004":{"position":[[483,8]]},"1020":{"position":[[1814,7]]},"1021":{"position":[[869,7]]},"1155":{"position":[[91,5],[569,6]]},"1438":{"position":[[499,7]]},"1439":{"position":[[158,8],[232,7],[415,5],[810,8],[1558,6],[1634,7]]},"1442":{"position":[[1555,5],[1567,5]]},"1451":{"position":[[755,7]]},"1452":{"position":[[1630,7]]},"1453":{"position":[[876,7]]},"1459":{"position":[[715,7],[1767,7]]},"1477":{"position":[[306,8],[473,8],[1593,5],[2901,5],[3915,5]]}},"keywords":{}}],["applic",{"_index":206,"title":{"30":{"position":[[4,12]]},"80":{"position":[[9,12]]},"134":{"position":[[4,11]]},"168":{"position":[[30,12]]},"436":{"position":[[24,12]]}},"content":{"6":{"position":[[192,11]]},"29":{"position":[[74,11]]},"30":{"position":[[14,11]]},"31":{"position":[[170,12]]},"38":{"position":[[532,12]]},"54":{"position":[[100,12]]},"68":{"position":[[311,12],[348,11]]},"79":{"position":[[298,11]]},"80":{"position":[[14,11]]},"81":{"position":[[774,11]]},"82":{"position":[[1067,12],[1557,11],[1619,11]]},"154":{"position":[[1597,10],[1860,12]]},"168":{"position":[[45,12]]},"173":{"position":[[642,12],[675,11],[718,11],[1081,12],[1177,12]]},"191":{"position":[[2283,12]]},"217":{"position":[[198,11]]},"240":{"position":[[2393,11]]},"266":{"position":[[207,12]]},"268":{"position":[[2039,11]]},"269":{"position":[[1501,11]]},"270":{"position":[[2117,11]]},"288":{"position":[[94,11]]},"290":{"position":[[175,11]]},"299":{"position":[[94,11]]},"301":{"position":[[128,11]]},"306":{"position":[[667,11]]},"320":{"position":[[111,12]]},"321":{"position":[[1098,13],[1270,11],[1299,11],[1438,11]]},"323":{"position":[[1905,12]]},"329":{"position":[[485,11],[788,12],[1039,11]]},"339":{"position":[[60,12]]},"387":{"position":[[533,12],[650,12]]},"429":{"position":[[951,13]]},"432":{"position":[[757,10],[860,10]]},"436":{"position":[[522,11],[958,11],[1070,11]]},"446":{"position":[[37,11],[208,11]]},"448":{"position":[[447,12],[575,12],[1106,12]]},"529":{"position":[[827,10]]},"531":{"position":[[241,12],[501,11]]},"543":{"position":[[351,11]]},"545":{"position":[[701,11]]},"554":{"position":[[290,12],[457,12]]},"556":{"position":[[645,12],[762,12]]},"626":{"position":[[166,12]]},"646":{"position":[[434,11]]},"654":{"position":[[155,11]]},"670":{"position":[[123,12],[227,12]]},"709":{"position":[[68,11]]},"716":{"position":[[133,12],[246,11]]},"718":{"position":[[60,11],[165,11]]},"724":{"position":[[189,11]]},"726":{"position":[[95,11],[150,11]]},"741":{"position":[[121,12],[223,12]]},"757":{"position":[[2243,12]]},"770":{"position":[[2243,12]]},"797":{"position":[[2250,12]]},"812":{"position":[[2250,12]]},"828":{"position":[[2250,12]]},"840":{"position":[[2020,11]]},"849":{"position":[[3140,11]]},"885":{"position":[[120,12],[221,12]]},"964":{"position":[[137,13]]},"985":{"position":[[636,12]]},"988":{"position":[[224,11]]},"989":{"position":[[545,11],[696,12],[818,12]]},"991":{"position":[[387,12],[539,12],[655,12]]},"1000":{"position":[[950,12]]},"1003":{"position":[[224,11]]},"1004":{"position":[[628,11],[779,12],[901,12]]},"1009":{"position":[[450,12],[602,12],[718,12]]},"1083":{"position":[[230,12]]},"1085":{"position":[[589,12]]},"1237":{"position":[[61,12]]},"1362":{"position":[[58,12]]},"1434":{"position":[[651,12]]},"1444":{"position":[[691,12]]},"1452":{"position":[[604,10]]},"1465":{"position":[[93,13]]},"1474":{"position":[[372,10]]},"1475":{"position":[[314,10]]}},"keywords":{}}],["application"",{"_index":4973,"title":{},"content":{"898":{"position":[[750,18]]}},"keywords":{}}],["application."",{"_index":4975,"title":{},"content":{"898":{"position":[[977,19]]}},"keywords":{}}],["application/json",{"_index":5092,"title":{},"content":{"943":{"position":[[1047,17],[1138,17]]},"1241":{"position":[[243,16]]}},"keywords":{}}],["apply"",{"_index":6500,"title":{},"content":{"1442":{"position":[[1233,11]]}},"keywords":{}}],["approach",{"_index":981,"title":{},"content":{"66":{"position":[[740,8]]},"113":{"position":[[912,10]]},"197":{"position":[[485,8]]},"209":{"position":[[744,8]]},"211":{"position":[[306,8]]},"221":{"position":[[1788,8]]},"240":{"position":[[3179,8]]},"267":{"position":[[532,12]]},"977":{"position":[[380,8]]},"1388":{"position":[[361,9]]}},"keywords":{}}],["appropri",{"_index":873,"title":{},"content":{"58":{"position":[[194,11]]},"83":{"position":[[700,11]]},"99":{"position":[[839,11]]},"107":{"position":[[2978,11],[3238,11]]},"158":{"position":[[468,11],[572,11]]},"162":{"position":[[1953,11]]},"169":{"position":[[433,11]]},"202":{"position":[[190,11]]},"217":{"position":[[368,11]]},"264":{"position":[[663,11]]},"288":{"position":[[709,11]]},"299":{"position":[[624,11]]},"367":{"position":[[272,11]]},"368":{"position":[[341,11]]},"479":{"position":[[382,11]]},"645":{"position":[[43,13]]},"652":{"position":[[43,13]]},"750":{"position":[[754,11]]},"755":{"position":[[341,11]]},"766":{"position":[[754,11]]},"767":{"position":[[1775,11]]},"768":{"position":[[341,11]]},"789":{"position":[[1155,11]]},"792":{"position":[[1715,11]]},"795":{"position":[[339,11]]},"807":{"position":[[742,11]]},"810":{"position":[[339,11]]},"823":{"position":[[742,11]]},"824":{"position":[[1837,11]]},"826":{"position":[[339,11]]},"869":{"position":[[1133,11]]},"904":{"position":[[1376,11]]},"905":{"position":[[344,11]]},"917":{"position":[[387,11]]},"918":{"position":[[1668,11]]},"919":{"position":[[850,11]]},"920":{"position":[[344,11]]},"931":{"position":[[1033,11]]},"932":{"position":[[344,11]]},"948":{"position":[[344,11]]},"964":{"position":[[518,11]]},"965":{"position":[[387,11]]},"966":{"position":[[344,11]]},"1176":{"position":[[674,11]]},"1185":{"position":[[200,11],[474,11]]},"1194":{"position":[[684,11]]},"1203":{"position":[[845,11]]},"1226":{"position":[[485,11]]},"1243":{"position":[[262,11]]},"1264":{"position":[[102,11]]},"1277":{"position":[[151,11]]},"1286":{"position":[[277,11]]},"1301":{"position":[[277,11]]},"1325":{"position":[[277,11]]},"1354":{"position":[[509,11]]},"1361":{"position":[[87,11]]},"1382":{"position":[[265,11],[728,11]]}},"keywords":{}}],["approv",{"_index":322,"title":{"280":{"position":[[0,9]]}},"content":{"11":{"position":[[1047,7]]},"280":{"position":[[305,7],[638,8],[1355,9],[1405,9],[1805,9],[1887,8],[2002,9]]},"281":{"position":[[1090,9]]},"515":{"position":[[945,9]]},"554":{"position":[[376,9]]}},"keywords":{}}],["approxim",{"_index":1030,"title":{},"content":{"68":{"position":[[1031,11]]},"99":{"position":[[801,11]]},"115":{"position":[[1435,14]]},"284":{"position":[[612,13],[669,11]]},"789":{"position":[[1042,13]]},"1144":{"position":[[588,11]]},"1170":{"position":[[588,11],[1057,11]]},"1213":{"position":[[443,11]]},"1220":{"position":[[443,11],[734,11]]},"1471":{"position":[[908,13]]}},"keywords":{}}],["apt",{"_index":3098,"title":{},"content":{"319":{"position":[[13,3]]}},"keywords":{}}],["arbitrari",{"_index":630,"title":{},"content":{"27":{"position":[[371,9]]},"279":{"position":[[926,9]]},"331":{"position":[[142,9]]},"333":{"position":[[350,9]]}},"keywords":{}}],["architect",{"_index":3203,"title":{},"content":{"332":{"position":[[9,11]]}},"keywords":{}}],["architectur",{"_index":1255,"title":{"84":{"position":[[22,14]]},"330":{"position":[[10,13]]}},"content":{"84":{"position":[[385,12]]},"95":{"position":[[97,13]]},"125":{"position":[[654,13]]},"320":{"position":[[1486,13]]},"330":{"position":[[25,13]]}},"keywords":{}}],["area",{"_index":899,"title":{},"content":{"60":{"position":[[82,6]]}},"keywords":{}}],["aren't",{"_index":1621,"title":{},"content":{"114":{"position":[[819,6]]},"135":{"position":[[692,6]]},"228":{"position":[[655,6]]},"229":{"position":[[392,6]]},"263":{"position":[[8,6]]},"277":{"position":[[437,6]]},"285":{"position":[[14,6]]},"343":{"position":[[614,6]]},"387":{"position":[[174,6]]},"448":{"position":[[174,6]]},"534":{"position":[[174,6]]},"556":{"position":[[174,6]]},"573":{"position":[[178,6]]},"584":{"position":[[166,6]]},"611":{"position":[[174,6]]},"720":{"position":[[174,6]]},"859":{"position":[[174,6]]},"1070":{"position":[[174,6]]},"1085":{"position":[[230,6]]},"1247":{"position":[[165,6]]},"1391":{"position":[[1053,6]]},"1438":{"position":[[705,6]]}},"keywords":{}}],["aren’t",{"_index":510,"title":{},"content":{"17":{"position":[[1134,6]]},"110":{"position":[[587,6]]}},"keywords":{}}],["argument",{"_index":1491,"title":{},"content":{"105":{"position":[[379,10]]},"108":{"position":[[98,9]]}},"keywords":{}}],["around",{"_index":1366,"title":{},"content":{"95":{"position":[[67,6]]},"158":{"position":[[802,7]]},"180":{"position":[[294,6]]},"190":{"position":[[1122,6]]},"296":{"position":[[7997,6]]},"309":{"position":[[1931,6]]},"602":{"position":[[750,6]]},"1444":{"position":[[1030,6]]}},"keywords":{}}],["around<br/>to",{"_index":6467,"title":{},"content":{"1434":{"position":[[2231,19]]}},"keywords":{}}],["arr$0",{"_index":1434,"title":{},"content":{"99":{"position":[[711,7]]}},"keywords":{}}],["arrang",{"_index":471,"title":{},"content":{"16":{"position":[[753,8]]},"1391":{"position":[[204,7]]}},"keywords":{}}],["array",{"_index":846,"title":{},"content":{"56":{"position":[[1483,5]]},"69":{"position":[[733,5]]},"71":{"position":[[105,5]]},"73":{"position":[[136,7]]},"94":{"position":[[610,5],[1035,5]]},"98":{"position":[[671,6]]},"100":{"position":[[249,6]]},"107":{"position":[[1265,5],[1359,5]]},"122":{"position":[[1087,6],[1725,5]]},"164":{"position":[[1788,5],[1828,5],[1850,5],[1964,5],[1998,5]]},"254":{"position":[[2293,5]]},"278":{"position":[[1669,6]]},"279":{"position":[[1196,5]]},"296":{"position":[[530,5],[1501,5],[1923,6],[2092,7],[2245,6],[2492,5],[7756,6],[7928,5]]},"314":{"position":[[1834,5]]},"387":{"position":[[835,5]]},"482":{"position":[[700,5]]},"517":{"position":[[928,5],[1033,5],[1260,5],[1758,5]]},"556":{"position":[[1053,5]]},"573":{"position":[[632,5]]},"574":{"position":[[226,5]]},"584":{"position":[[554,5]]},"585":{"position":[[216,5]]},"611":{"position":[[690,5],[1026,5]]},"637":{"position":[[461,5]]},"720":{"position":[[412,5]]},"1009":{"position":[[1088,5],[1665,6]]},"1045":{"position":[[1216,5]]},"1053":{"position":[[1216,5]]},"1061":{"position":[[1216,5]]},"1070":{"position":[[957,5]]},"1140":{"position":[[892,5]]},"1172":{"position":[[288,5]]},"1209":{"position":[[266,5]]},"1222":{"position":[[288,5]]},"1230":{"position":[[134,6]]},"1247":{"position":[[305,6]]},"1275":{"position":[[272,5]]},"1292":{"position":[[951,5]]},"1306":{"position":[[951,5]]},"1316":{"position":[[892,5]]},"1329":{"position":[[951,5]]},"1340":{"position":[[892,5]]},"1351":{"position":[[892,5]]},"1356":{"position":[[1075,5]]},"1379":{"position":[[1097,5]]},"1403":{"position":[[1097,5]]},"1414":{"position":[[1097,5]]},"1431":{"position":[[915,5]]},"1464":{"position":[[25,7],[59,5],[338,5],[777,6]]},"1467":{"position":[[166,7],[271,7],[662,7],[942,6],[1745,6],[1861,6],[2053,6],[2218,5]]},"1476":{"position":[[1342,5]]},"1477":{"position":[[2619,7],[2763,6],[2954,5],[3145,5],[3436,5],[3495,5],[3761,5],[3942,5],[4046,5],[4402,5],[4581,5],[4843,5]]}},"keywords":{}}],["array[tableassoci",{"_index":4775,"title":{},"content":{"842":{"position":[[2948,23]]}},"keywords":{}}],["array_agg",{"_index":5549,"title":{},"content":{"1140":{"position":[[926,9]]},"1316":{"position":[[926,9]]},"1340":{"position":[[926,9]]},"1351":{"position":[[926,9]]},"1431":{"position":[[949,9]]}},"keywords":{}}],["array_max_cardin",{"_index":5553,"title":{},"content":{"1140":{"position":[[974,21]]},"1316":{"position":[[974,21]]},"1340":{"position":[[974,21]]},"1351":{"position":[[974,21]]},"1431":{"position":[[997,21]]}},"keywords":{}}],["arraynullobjectfract",{"_index":1065,"title":{},"content":{"72":{"position":[[112,25]]}},"keywords":{}}],["arrays"",{"_index":6647,"title":{},"content":{"1464":{"position":[[435,13]]},"1467":{"position":[[2374,13]]}},"keywords":{}}],["arriv",{"_index":1083,"title":{},"content":{"74":{"position":[[582,6]]},"109":{"position":[[480,6]]},"121":{"position":[[608,7],[1568,6]]},"210":{"position":[[52,8],[3983,8]]},"240":{"position":[[4430,8]]},"321":{"position":[[938,8]]},"325":{"position":[[693,7]]},"616":{"position":[[484,8]]},"1118":{"position":[[1173,6]]},"1440":{"position":[[629,6],[745,6],[1060,6]]}},"keywords":{}}],["arrow",{"_index":2159,"title":{},"content":{"191":{"position":[[2148,5]]},"217":{"position":[[768,5]]},"240":{"position":[[2142,5]]}},"keywords":{}}],["articl",{"_index":301,"title":{},"content":{"11":{"position":[[348,8]]},"196":{"position":[[652,8]]},"233":{"position":[[837,8]]}},"keywords":{}}],["articlessolut",{"_index":3917,"title":{},"content":{"506":{"position":[[331,16]]}},"keywords":{}}],["asc",{"_index":5558,"title":{},"content":{"1140":{"position":[[1078,3]]},"1292":{"position":[[1038,3]]},"1306":{"position":[[1038,3]]},"1316":{"position":[[1078,3]]},"1329":{"position":[[1038,3]]},"1340":{"position":[[1078,3]]},"1351":{"position":[[1078,3]]},"1370":{"position":[[467,3]]},"1379":{"position":[[1182,3]]},"1403":{"position":[[1182,3]]},"1414":{"position":[[1182,3]]},"1431":{"position":[[1101,3]]}},"keywords":{}}],["ascend",{"_index":2851,"title":{},"content":{"279":{"position":[[749,9]]},"402":{"position":[[819,9]]},"417":{"position":[[176,9],[345,9],[504,9]]},"438":{"position":[[176,9],[345,9],[504,9]]},"502":{"position":[[636,9],[805,9],[964,9]]},"545":{"position":[[176,9],[345,9],[504,9]]},"1020":{"position":[[713,9],[1155,10],[1367,9],[1969,9]]},"1021":{"position":[[1198,9],[1382,9]]}},"keywords":{}}],["ascii",{"_index":6005,"title":{},"content":{"1292":{"position":[[1073,5]]},"1306":{"position":[[1073,5]]},"1329":{"position":[[1073,5]]}},"keywords":{}}],["asensit",{"_index":5561,"title":{},"content":{"1140":{"position":[[1117,10]]},"1292":{"position":[[1117,10]]},"1306":{"position":[[1117,10]]},"1316":{"position":[[1117,10]]},"1329":{"position":[[1117,10]]},"1340":{"position":[[1117,10]]},"1351":{"position":[[1117,10]]},"1379":{"position":[[1223,10]]},"1403":{"position":[[1223,10]]},"1414":{"position":[[1223,10]]},"1431":{"position":[[1140,10]]}},"keywords":{}}],["asexpect",{"_index":1860,"title":{},"content":{"156":{"position":[[516,14]]}},"keywords":{}}],["asin",{"_index":5565,"title":{},"content":{"1140":{"position":[[1159,4]]},"1316":{"position":[[1159,4]]},"1340":{"position":[[1159,4]]},"1351":{"position":[[1159,4]]},"1431":{"position":[[1182,4]]}},"keywords":{}}],["ask",{"_index":1555,"title":{},"content":{"107":{"position":[[3868,3]]},"123":{"position":[[360,4]]},"232":{"position":[[1044,3]]},"281":{"position":[[1831,3]]},"912":{"position":[[1181,3]]},"1286":{"position":[[1770,4]]},"1301":{"position":[[1606,4]]},"1325":{"position":[[1770,4]]}},"keywords":{}}],["aspect",{"_index":5,"title":{},"content":{"1":{"position":[[35,7]]},"197":{"position":[[717,7]]},"410":{"position":[[36,8]]}},"keywords":{}}],["asselect",{"_index":1402,"title":{},"content":{"98":{"position":[[260,8]]}},"keywords":{}}],["assert",{"_index":753,"title":{},"content":{"43":{"position":[[349,6]]},"129":{"position":[[14,6],[1203,8]]},"1140":{"position":[[1203,9]]},"1316":{"position":[[1203,9]]},"1340":{"position":[[1203,9]]},"1351":{"position":[[1203,9]]},"1379":{"position":[[1275,9]]},"1403":{"position":[[1275,9]]},"1414":{"position":[[1275,9]]},"1431":{"position":[[1226,9]]}},"keywords":{}}],["assign",{"_index":1598,"title":{},"content":{"112":{"position":[[810,8],[826,9],[1056,8]]},"173":{"position":[[873,11]]},"246":{"position":[[140,8]]},"288":{"position":[[435,6],[684,8]]},"299":{"position":[[599,8]]},"331":{"position":[[515,9]]},"543":{"position":[[274,8]]},"591":{"position":[[122,6]]},"660":{"position":[[746,6]]},"723":{"position":[[62,8]]},"839":{"position":[[201,8]]},"840":{"position":[[2070,8],[2132,8]]},"848":{"position":[[238,8]]},"849":{"position":[[3210,8],[3272,8]]},"917":{"position":[[376,6]]},"965":{"position":[[376,6]]},"1185":{"position":[[175,8]]},"1382":{"position":[[240,8]]},"1384":{"position":[[559,6]]},"1386":{"position":[[607,8]]},"1417":{"position":[[347,8]]},"1437":{"position":[[666,10],[736,10],[884,11],[998,10],[1046,10]]},"1474":{"position":[[750,8],[883,8]]}},"keywords":{}}],["assigne",{"_index":4048,"title":{},"content":{"535":{"position":[[373,9]]}},"keywords":{}}],["assigneesbranchescollaboratorsissu",{"_index":4029,"title":{},"content":{"529":{"position":[[866,35]]}},"keywords":{}}],["assignmentsexpens",{"_index":4351,"title":{},"content":{"628":{"position":[[364,18]]}},"keywords":{}}],["assignmentsproject",{"_index":4347,"title":{},"content":{"628":{"position":[[269,18]]}},"keywords":{}}],["assignmentsprojectsrolesus",{"_index":4348,"title":{},"content":{"628":{"position":[[293,28]]}},"keywords":{}}],["assist",{"_index":1107,"title":{},"content":{"80":{"position":[[41,6]]},"910":{"position":[[413,11]]},"926":{"position":[[413,11]]},"937":{"position":[[413,11]]},"953":{"position":[[413,11]]},"971":{"position":[[413,11]]}},"keywords":{}}],["associ",{"_index":556,"title":{},"content":{"21":{"position":[[22,10]]},"48":{"position":[[240,10]]},"49":{"position":[[350,10]]},"54":{"position":[[695,10]]},"63":{"position":[[790,10]]},"80":{"position":[[549,10]]},"103":{"position":[[50,10]]},"120":{"position":[[2342,10]]},"138":{"position":[[2044,10],[2269,10]]},"141":{"position":[[1990,10]]},"142":{"position":[[2104,10],[2329,10]]},"146":{"position":[[750,10]]},"149":{"position":[[473,10],[723,10]]},"152":{"position":[[485,10],[726,10]]},"239":{"position":[[1141,10],[2296,10]]},"263":{"position":[[657,10]]},"296":{"position":[[7700,10]]},"319":{"position":[[790,10]]},"320":{"position":[[1731,10]]},"321":{"position":[[239,10]]},"323":{"position":[[1002,10]]},"326":{"position":[[562,10],[1695,10]]},"445":{"position":[[87,10]]},"448":{"position":[[759,10]]},"486":{"position":[[391,10]]},"512":{"position":[[154,10]]},"517":{"position":[[57,10]]},"548":{"position":[[921,10]]},"571":{"position":[[460,11]]},"581":{"position":[[137,11]]},"590":{"position":[[253,10],[664,10]]},"617":{"position":[[382,11]]},"649":{"position":[[27,10]]},"658":{"position":[[391,10]]},"674":{"position":[[391,10]]},"683":{"position":[[133,10]]},"689":{"position":[[391,10]]},"767":{"position":[[155,10],[225,9],[1175,9]]},"792":{"position":[[475,10],[545,9],[1431,9]]},"824":{"position":[[267,10],[337,9],[1241,9]]},"842":{"position":[[681,10],[795,10],[2854,13],[2868,12],[2889,10],[3086,10],[3149,11],[3579,10],[3719,10]]},"843":{"position":[[495,13]]},"851":{"position":[[294,10],[393,10]]},"879":{"position":[[705,10]]},"904":{"position":[[267,10],[337,9],[1134,9]]},"918":{"position":[[475,10],[545,9],[1425,9]]},"1040":{"position":[[242,10]]},"1050":{"position":[[242,10]]},"1051":{"position":[[267,10],[337,9]]},"1058":{"position":[[242,10]]},"1070":{"position":[[455,10],[573,10]]},"1131":{"position":[[122,10]]},"1138":{"position":[[667,10]]},"1151":{"position":[[652,10]]},"1179":{"position":[[479,10]]},"1245":{"position":[[334,11]]},"1260":{"position":[[366,10]]},"1276":{"position":[[35,10]]},"1289":{"position":[[249,10],[328,9]]},"1313":{"position":[[477,10]]},"1321":{"position":[[29,10],[108,9]]},"1334":{"position":[[29,10],[108,9]]},"1337":{"position":[[477,10]]},"1348":{"position":[[477,10]]},"1373":{"position":[[267,10],[337,9]]},"1374":{"position":[[267,10],[337,9]]},"1386":{"position":[[450,10]]},"1427":{"position":[[418,10]]},"1446":{"position":[[150,10],[201,10]]},"1459":{"position":[[1208,11],[1775,14]]},"1465":{"position":[[928,12]]},"1470":{"position":[[434,10],[1055,10],[1180,10],[1324,10]]},"1477":{"position":[[679,11],[1221,10],[1637,11],[3976,11]]}},"keywords":{}}],["associatedjson",{"_index":723,"title":{},"content":{"41":{"position":[[33,14]]}},"keywords":{}}],["associatedroles/storage.objectadminon",{"_index":5788,"title":{},"content":{"1176":{"position":[[347,37]]}},"keywords":{}}],["associations/[n]/child_join_column_nam",{"_index":4781,"title":{},"content":{"842":{"position":[[3336,40]]}},"keywords":{}}],["associations/[n]/child_table_nam",{"_index":4776,"title":{},"content":{"842":{"position":[[2975,34]]}},"keywords":{}}],["associations/[n]/load_during_backfil",{"_index":4782,"title":{},"content":{"842":{"position":[[3496,38]]}},"keywords":{}}],["associations/[n]/load_during_increment",{"_index":4783,"title":{},"content":{"842":{"position":[[3630,41]]}},"keywords":{}}],["associations/[n]/parent_join_column_nam",{"_index":4780,"title":{},"content":{"842":{"position":[[3177,41]]}},"keywords":{}}],["assum",{"_index":2422,"title":{},"content":{"213":{"position":[[185,6]]},"234":{"position":[[20,6]]},"419":{"position":[[2309,7],[2421,7]]},"441":{"position":[[918,7],[1030,7]]},"504":{"position":[[1938,7],[2050,7]]},"547":{"position":[[2311,7],[2423,7]]},"639":{"position":[[1936,7],[2048,7]]},"754":{"position":[[1162,6]]},"794":{"position":[[1366,6]]},"809":{"position":[[1366,6]]},"825":{"position":[[1202,6]]},"1023":{"position":[[2292,7],[2404,7]]},"1042":{"position":[[375,7]]},"1043":{"position":[[1039,7]]},"1051":{"position":[[1301,7]]},"1059":{"position":[[1094,7]]},"1286":{"position":[[1452,6]]},"1301":{"position":[[1288,6]]},"1325":{"position":[[1452,6]]},"1429":{"position":[[673,8]]},"1438":{"position":[[465,6]]}},"keywords":{}}],["assumpt",{"_index":6576,"title":{},"content":{"1453":{"position":[[1078,11]]}},"keywords":{}}],["asymmetr",{"_index":5571,"title":{},"content":{"1140":{"position":[[1246,10]]},"1316":{"position":[[1246,10]]},"1340":{"position":[[1246,10]]},"1351":{"position":[[1246,10]]},"1379":{"position":[[1325,10]]},"1403":{"position":[[1325,10]]},"1414":{"position":[[1325,10]]},"1431":{"position":[[1269,10]]}},"keywords":{}}],["async",{"_index":4251,"title":{},"content":{"593":{"position":[[506,7]]},"594":{"position":[[1152,5],[1267,5],[1356,5],[1427,5]]},"595":{"position":[[301,6],[1893,6]]},"1452":{"position":[[2435,5]]}},"keywords":{}}],["atan",{"_index":5577,"title":{},"content":{"1140":{"position":[[1351,4]]},"1316":{"position":[[1351,4]]},"1340":{"position":[[1351,4]]},"1351":{"position":[[1351,4]]},"1431":{"position":[[1374,4]]}},"keywords":{}}],["atla",{"_index":2210,"title":{},"content":{"199":{"position":[[217,5],[251,5]]},"202":{"position":[[242,6]]},"203":{"position":[[274,5]]},"204":{"position":[[314,5]]},"206":{"position":[[390,6]]},"210":{"position":[[1738,5]]},"780":{"position":[[469,6]]},"1251":{"position":[[230,6]]}},"keywords":{}}],["atlassian",{"_index":3784,"title":{},"content":{"471":{"position":[[1,9]]},"472":{"position":[[338,9],[653,9]]},"660":{"position":[[1144,9]]}},"keywords":{}}],["atom",{"_index":2194,"title":{},"content":{"197":{"position":[[1289,6]]},"922":{"position":[[365,6]]},"1140":{"position":[[1390,6]]},"1316":{"position":[[1390,6]]},"1340":{"position":[[1390,6]]},"1351":{"position":[[1390,6]]},"1379":{"position":[[1441,6]]},"1403":{"position":[[1441,6]]},"1414":{"position":[[1441,6]]},"1431":{"position":[[1413,6]]}},"keywords":{}}],["attach",{"_index":1874,"title":{},"content":{"159":{"position":[[88,6]]},"413":{"position":[[338,6]]},"415":{"position":[[980,6]]},"611":{"position":[[996,8]]},"1204":{"position":[[410,6],[448,6]]},"1370":{"position":[[477,6]]}},"keywords":{}}],["attempt",{"_index":353,"title":{},"content":{"12":{"position":[[10,7]]},"62":{"position":[[326,10]]},"82":{"position":[[2922,7]]},"105":{"position":[[1170,10]]},"125":{"position":[[771,7]]},"138":{"position":[[1291,10]]},"141":{"position":[[1380,10]]},"142":{"position":[[1284,10]]},"278":{"position":[[1370,8]]},"309":{"position":[[1310,7],[1340,8],[1471,7],[1771,7]]},"387":{"position":[[1019,7]]},"397":{"position":[[1002,7]]},"429":{"position":[[652,7]]},"602":{"position":[[175,7]]},"785":{"position":[[389,7]]},"842":{"position":[[1417,7],[1763,7]]},"1036":{"position":[[335,7]]},"1151":{"position":[[427,7]]},"1157":{"position":[[54,10]]},"1440":{"position":[[193,7]]},"1447":{"position":[[353,7]]}},"keywords":{}}],["attent",{"_index":3000,"title":{},"content":{"296":{"position":[[1758,9]]}},"keywords":{}}],["attenu",{"_index":1562,"title":{},"content":{"109":{"position":[[736,10]]}},"keywords":{}}],["attribut",{"_index":2559,"title":{},"content":{"236":{"position":[[2621,9]]},"517":{"position":[[3155,11]]},"747":{"position":[[201,11],[241,11],[363,11]]},"909":{"position":[[208,9]]},"925":{"position":[[208,9]]},"936":{"position":[[208,9]]},"952":{"position":[[208,9]]},"970":{"position":[[208,9]]},"1096":{"position":[[182,9]]},"1230":{"position":[[1233,9]]},"1292":{"position":[[1191,9]]},"1306":{"position":[[1191,9]]},"1329":{"position":[[1191,9]]}},"keywords":{}}],["attribute_definit",{"_index":5468,"title":{},"content":{"1134":{"position":[[387,21]]}},"keywords":{}}],["attributea",{"_index":3394,"title":{},"content":{"366":{"position":[[110,10]]},"903":{"position":[[136,10]]},"915":{"position":[[136,10]]},"930":{"position":[[136,10]]},"963":{"position":[[290,10]]}},"keywords":{}}],["attributesattribut",{"_index":5443,"title":{},"content":{"1128":{"position":[[78,19]]}},"keywords":{}}],["attributescompani",{"_index":4428,"title":{},"content":{"682":{"position":[[94,17]]}},"keywords":{}}],["attributesconversationsconvers",{"_index":4430,"title":{},"content":{"682":{"position":[[136,35]]}},"keywords":{}}],["attributesproduct",{"_index":5365,"title":{},"content":{"1096":{"position":[[205,17]]}},"keywords":{}}],["attribution_window",{"_index":4561,"title":{},"content":{"747":{"position":[[181,19]]},"748":{"position":[[213,19]]}},"keywords":{}}],["atzr|xxxxxxxxxxxx",{"_index":3502,"title":{},"content":{"388":{"position":[[310,17]]}},"keywords":{}}],["audienc",{"_index":5335,"title":{},"content":{"1080":{"position":[[471,8],[509,8],[546,8],[583,8],[620,8],[651,8],[683,8],[720,8],[769,8]]}},"keywords":{}}],["audit",{"_index":1157,"title":{},"content":{"82":{"position":[[905,8]]},"473":{"position":[[312,5]]},"477":{"position":[[388,9]]},"598":{"position":[[352,9]]},"864":{"position":[[107,9]]},"876":{"position":[[107,9]]}},"keywords":{}}],["audit_log",{"_index":5470,"title":{},"content":{"1134":{"position":[[491,10]]}},"keywords":{}}],["auditblog",{"_index":3782,"title":{},"content":{"470":{"position":[[1,9]]}},"keywords":{}}],["auditsticket",{"_index":5454,"title":{},"content":{"1128":{"position":[[301,12]]}},"keywords":{}}],["augment",{"_index":2852,"title":{},"content":{"279":{"position":[[784,7]]}},"keywords":{}}],["aurora",{"_index":2047,"title":{"792":{"position":[[7,7]]},"918":{"position":[[7,7]]},"1334":{"position":[[43,7]]}},"content":{"179":{"position":[[532,7]]},"792":{"position":[[51,6],[1136,6],[1260,6],[2276,6]]},"794":{"position":[[623,7]]},"809":{"position":[[623,7]]},"918":{"position":[[51,6],[1112,6],[1236,6],[1286,6]]},"1286":{"position":[[680,7]]},"1289":{"position":[[213,7],[1493,7]]},"1310":{"position":[[814,7]]},"1325":{"position":[[680,7]]}},"keywords":{}}],["auroragoogl",{"_index":4699,"title":{},"content":{"788":{"position":[[188,12]]},"790":{"position":[[104,12]]},"914":{"position":[[222,12]]},"916":{"position":[[109,12]]}},"keywords":{}}],["auth",{"_index":900,"title":{},"content":{"60":{"position":[[202,4]]},"82":{"position":[[1614,4]]},"169":{"position":[[1494,4]]},"263":{"position":[[188,4]]},"267":{"position":[[2026,4]]},"270":{"position":[[288,4]]},"274":{"position":[[586,4]]},"284":{"position":[[97,4]]},"340":{"position":[[354,4]]},"341":{"position":[[91,4],[126,4],[207,4],[334,4]]},"387":{"position":[[292,4]]},"489":{"position":[[215,4],[626,4]]},"662":{"position":[[215,4],[626,4]]},"677":{"position":[[215,4],[626,4]]},"692":{"position":[[215,4],[626,4]]},"726":{"position":[[383,4]]},"997":{"position":[[72,4],[83,4]]},"1111":{"position":[[8,4]]},"1113":{"position":[[131,4],[149,4]]}},"keywords":{}}],["auth_method",{"_index":4518,"title":{},"content":{"721":{"position":[[234,12]]}},"keywords":{}}],["auth_token",{"_index":5154,"title":{},"content":{"998":{"position":[[109,11]]},"1113":{"position":[[119,11]]},"1114":{"position":[[146,11]]}},"keywords":{}}],["auth_typ",{"_index":3495,"title":{},"content":{"388":{"position":[[195,10]]},"432":{"position":[[984,10],[1079,10],[1148,10]]},"433":{"position":[[221,10],[632,10]]},"449":{"position":[[193,10]]},"575":{"position":[[232,10]]},"586":{"position":[[196,10]]},"612":{"position":[[206,10]]},"620":{"position":[[128,10]]},"736":{"position":[[124,10]]},"748":{"position":[[124,10]]},"843":{"position":[[159,10]]},"860":{"position":[[191,10]]},"1010":{"position":[[195,10]]},"1016":{"position":[[121,10]]},"1086":{"position":[[213,10]]},"1102":{"position":[[133,10]]},"1189":{"position":[[220,10]]},"1231":{"position":[[154,10]]},"1248":{"position":[[154,10]]},"1363":{"position":[[141,10]]},"1387":{"position":[[243,10],[797,10]]}},"keywords":{}}],["authent",{"_index":895,"title":{"336":{"position":[[22,14]]},"339":{"position":[[0,14]]},"340":{"position":[[0,14]]},"383":{"position":[[16,12]]},"384":{"position":[[0,14]]},"429":{"position":[[0,14]]},"445":{"position":[[16,12]]},"446":{"position":[[0,14]]},"489":{"position":[[0,15]]},"523":{"position":[[16,12]]},"531":{"position":[[16,12]]},"553":{"position":[[16,12]]},"570":{"position":[[16,12]]},"571":{"position":[[0,14]]},"582":{"position":[[0,14]]},"608":{"position":[[16,12]]},"609":{"position":[[0,14]]},"615":{"position":[[16,12]]},"644":{"position":[[16,12]]},"651":{"position":[[16,12]]},"662":{"position":[[0,15]]},"677":{"position":[[0,15]]},"692":{"position":[[0,15]]},"717":{"position":[[16,12]]},"724":{"position":[[0,15]]},"725":{"position":[[13,15]]},"726":{"position":[[6,15]]},"732":{"position":[[16,12]]},"856":{"position":[[16,15]]},"857":{"position":[[17,15]]},"987":{"position":[[16,12]]},"1002":{"position":[[16,12]]},"1082":{"position":[[6,14]]},"1083":{"position":[[21,14]]},"1130":{"position":[[7,15]]},"1131":{"position":[[10,15]]},"1227":{"position":[[6,14]]},"1228":{"position":[[7,15]]},"1244":{"position":[[6,14]]},"1245":{"position":[[7,15]]},"1384":{"position":[[9,14]]}},"content":{"58":{"position":[[878,14]]},"60":{"position":[[221,12],[365,15]]},"68":{"position":[[698,13]]},"154":{"position":[[171,12],[2049,12]]},"169":{"position":[[1290,12],[1733,13]]},"201":{"position":[[118,14]]},"206":{"position":[[562,14]]},"259":{"position":[[395,12],[2084,12]]},"267":{"position":[[1764,14],[1835,13]]},"340":{"position":[[125,12],[593,13]]},"359":{"position":[[57,14]]},"370":{"position":[[498,12]]},"382":{"position":[[31,12]]},"387":{"position":[[65,14]]},"388":{"position":[[47,14]]},"428":{"position":[[112,14]]},"429":{"position":[[9,14],[192,14],[391,14],[537,14],[584,14],[725,14],[908,14]]},"430":{"position":[[72,14],[127,14]]},"432":{"position":[[419,12],[507,14],[571,14],[677,12],[776,14],[879,14]]},"433":{"position":[[19,14],[437,15]]},"435":{"position":[[39,12]]},"436":{"position":[[1138,14]]},"438":{"position":[[604,12],[828,12],[975,12],[1440,12],[1525,15]]},"444":{"position":[[31,12]]},"448":{"position":[[65,14],[306,14]]},"449":{"position":[[47,14]]},"473":{"position":[[47,14]]},"475":{"position":[[265,12]]},"478":{"position":[[34,12]]},"489":{"position":[[65,14],[145,15],[492,15],[759,15],[873,14]]},"491":{"position":[[130,12]]},"500":{"position":[[70,14]]},"513":{"position":[[23,12]]},"517":{"position":[[750,14]]},"518":{"position":[[47,14]]},"522":{"position":[[23,12],[315,14]]},"526":{"position":[[10,14]]},"527":{"position":[[47,14]]},"530":{"position":[[23,12],[315,14]]},"534":{"position":[[65,14],[473,14],[502,12],[567,14],[623,14],[732,15]]},"535":{"position":[[47,14]]},"540":{"position":[[192,14],[264,14]]},"543":{"position":[[406,15]]},"551":{"position":[[23,12]]},"554":{"position":[[614,15]]},"556":{"position":[[65,14]]},"557":{"position":[[47,14]]},"564":{"position":[[106,14]]},"569":{"position":[[23,12]]},"573":{"position":[[69,14],[327,14],[347,14]]},"575":{"position":[[33,14]]},"581":{"position":[[294,12]]},"584":{"position":[[56,14],[86,12],[315,14],[363,15]]},"586":{"position":[[33,14]]},"597":{"position":[[228,12]]},"599":{"position":[[34,12]]},"601":{"position":[[250,15]]},"607":{"position":[[23,12]]},"611":{"position":[[65,14],[253,14],[307,14],[353,14]]},"612":{"position":[[47,14]]},"614":{"position":[[23,12]]},"619":{"position":[[69,14],[282,14],[302,14]]},"643":{"position":[[23,12]]},"646":{"position":[[341,14],[446,12]]},"650":{"position":[[23,12]]},"654":{"position":[[62,14],[167,12]]},"662":{"position":[[65,14],[145,15],[492,15],[759,15],[873,14]]},"664":{"position":[[105,14],[151,12]]},"677":{"position":[[65,14],[145,15],[492,15],[759,15],[873,14]]},"679":{"position":[[130,12]]},"683":{"position":[[23,12],[243,14]]},"685":{"position":[[61,14],[269,13]]},"686":{"position":[[34,14]]},"692":{"position":[[65,14],[145,15],[492,15],[759,15],[873,14]]},"694":{"position":[[130,12]]},"716":{"position":[[23,12]]},"720":{"position":[[65,14],[434,14],[481,14],[526,12]]},"721":{"position":[[47,14]]},"724":{"position":[[18,14]]},"731":{"position":[[23,12]]},"735":{"position":[[57,14],[142,14],[157,14],[228,14],[248,14]]},"757":{"position":[[198,12]]},"770":{"position":[[198,12]]},"780":{"position":[[328,14]]},"797":{"position":[[198,12]]},"812":{"position":[[198,12]]},"828":{"position":[[198,12]]},"840":{"position":[[681,14],[727,14],[2593,12]]},"842":{"position":[[446,15],[462,14],[561,15],[1011,15]]},"843":{"position":[[143,15]]},"849":{"position":[[487,14],[550,15],[1156,14],[1202,14]]},"855":{"position":[[158,12]]},"859":{"position":[[65,14],[253,12],[280,14],[342,14],[386,14]]},"860":{"position":[[47,14]]},"867":{"position":[[189,12]]},"879":{"position":[[297,14],[366,14],[452,14]]},"898":{"position":[[1642,13]]},"907":{"position":[[281,12]]},"923":{"position":[[281,12]]},"934":{"position":[[281,12]]},"950":{"position":[[281,12]]},"957":{"position":[[27,15]]},"968":{"position":[[281,12]]},"980":{"position":[[22,15]]},"987":{"position":[[57,12]]},"989":{"position":[[492,12]]},"991":{"position":[[65,14]]},"995":{"position":[[77,14]]},"1002":{"position":[[57,12]]},"1004":{"position":[[575,12]]},"1009":{"position":[[65,14]]},"1010":{"position":[[47,14]]},"1013":{"position":[[38,15]]},"1018":{"position":[[106,15]]},"1021":{"position":[[457,15],[521,15],[621,15]]},"1045":{"position":[[266,12]]},"1053":{"position":[[266,12]]},"1061":{"position":[[266,12]]},"1067":{"position":[[281,12],[398,14],[562,14]]},"1070":{"position":[[65,14]]},"1071":{"position":[[47,14]]},"1083":{"position":[[68,12]]},"1085":{"position":[[65,14],[168,12],[309,14],[331,14],[392,14],[452,12]]},"1111":{"position":[[23,15]]},"1129":{"position":[[33,12],[165,14]]},"1133":{"position":[[277,14],[388,14],[496,14],[616,14],[743,14]]},"1188":{"position":[[475,14],[537,14]]},"1195":{"position":[[231,14],[255,12]]},"1196":{"position":[[334,14],[427,14],[509,14]]},"1227":{"position":[[23,14],[311,13]]},"1228":{"position":[[8,14]]},"1230":{"position":[[73,14],[108,12],[211,14],[257,15]]},"1231":{"position":[[33,14]]},"1243":{"position":[[1047,12],[1367,14]]},"1247":{"position":[[56,14],[244,14],[279,12],[382,14],[428,15],[616,14]]},"1248":{"position":[[33,14]]},"1260":{"position":[[110,14]]},"1267":{"position":[[280,15],[344,15]]},"1277":{"position":[[394,15],[479,15]]},"1356":{"position":[[101,12]]},"1362":{"position":[[280,15],[347,15]]},"1384":{"position":[[76,12],[104,15],[138,15],[188,15],[1198,14]]},"1386":{"position":[[733,14],[787,14],[972,14],[1061,14]]},"1387":{"position":[[19,15],[573,15]]},"1392":{"position":[[210,14],[284,14],[335,14]]},"1447":{"position":[[471,12]]}},"keywords":{}}],["authenticatio",{"_index":6011,"title":{},"content":{"1292":{"position":[[1247,13]]},"1306":{"position":[[1247,13]]},"1329":{"position":[[1247,13]]}},"keywords":{}}],["authentication.a",{"_index":5940,"title":{},"content":{"1274":{"position":[[130,16]]}},"keywords":{}}],["authentication.an",{"_index":5938,"title":{},"content":{"1274":{"position":[[77,17]]}},"keywords":{}}],["authentication.at",{"_index":6278,"title":{},"content":{"1361":{"position":[[150,17]]}},"keywords":{}}],["authentication/consumer_secret",{"_index":4755,"title":{},"content":{"842":{"position":[[731,31]]}},"keywords":{}}],["authentication/password",{"_index":4761,"title":{},"content":{"842":{"position":[[1165,24]]}},"keywords":{}}],["authentication/token_key",{"_index":4756,"title":{},"content":{"842":{"position":[[845,25]]}},"keywords":{}}],["authentication/token_secret",{"_index":4757,"title":{},"content":{"842":{"position":[[914,28]]}},"keywords":{}}],["authenticationa",{"_index":4731,"title":{},"content":{"839":{"position":[[108,15]]},"848":{"position":[[108,15]]}},"keywords":{}}],["author",{"_index":626,"title":{"336":{"position":[[0,11]]},"338":{"position":[[8,13]]}},"content":{"27":{"position":[[283,9],[698,13]]},"63":{"position":[[1046,7],[1198,6]]},"82":{"position":[[818,13]]},"88":{"position":[[661,9]]},"263":{"position":[[92,9]]},"264":{"position":[[371,6]]},"270":{"position":[[192,9]]},"274":{"position":[[490,9]]},"284":{"position":[[1,9]]},"446":{"position":[[334,13]]},"489":{"position":[[100,14],[548,13],[701,14]]},"531":{"position":[[259,10]]},"548":{"position":[[282,13]]},"611":{"position":[[490,14]]},"662":{"position":[[100,14],[548,13],[701,14]]},"677":{"position":[[100,14],[548,13],[701,14]]},"692":{"position":[[100,14],[548,13],[701,14]]},"712":{"position":[[108,13],[415,13]]},"757":{"position":[[1097,10]]},"770":{"position":[[1097,10]]},"797":{"position":[[1097,10]]},"808":{"position":[[253,10]]},"812":{"position":[[1097,10]]},"828":{"position":[[1097,10]]},"895":{"position":[[398,13]]},"931":{"position":[[257,10]]},"989":{"position":[[570,13],[1090,10]]},"1004":{"position":[[653,13],[1173,10]]},"1009":{"position":[[302,13]]},"1031":{"position":[[451,13]]},"1059":{"position":[[257,10]]},"1085":{"position":[[662,10]]},"1140":{"position":[[1433,13]]},"1179":{"position":[[266,14]]},"1213":{"position":[[222,14]]},"1220":{"position":[[222,14]]},"1230":{"position":[[407,14]]},"1241":{"position":[[260,14]]},"1247":{"position":[[578,14]]},"1285":{"position":[[1027,9]]},"1286":{"position":[[2461,9]]},"1289":{"position":[[702,10]]},"1297":{"position":[[76,10]]},"1300":{"position":[[1027,9]]},"1301":{"position":[[2297,9]]},"1303":{"position":[[257,10]]},"1316":{"position":[[1433,13]]},"1324":{"position":[[1027,9]]},"1325":{"position":[[2461,9]]},"1340":{"position":[[1433,13]]},"1345":{"position":[[76,10]]},"1351":{"position":[[1433,13]]},"1379":{"position":[[1495,13]]},"1397":{"position":[[254,10]]},"1398":{"position":[[253,10]]},"1403":{"position":[[1495,13]]},"1414":{"position":[[1495,13]]},"1431":{"position":[[1456,13]]}},"keywords":{}}],["authorit",{"_index":1303,"title":{"1437":{"position":[[16,14]]}},"content":{"88":{"position":[[395,13]]},"419":{"position":[[2367,14]]},"441":{"position":[[976,14]]},"504":{"position":[[1996,14]]},"547":{"position":[[2369,14]]},"639":{"position":[[1994,14]]},"1023":{"position":[[2350,14]]},"1435":{"position":[[733,14]]},"1437":{"position":[[1195,14]]},"1439":{"position":[[37,14]]}},"keywords":{}}],["authoritative"",{"_index":6509,"title":{},"content":{"1444":{"position":[[356,19]]}},"keywords":{}}],["authsource=admin",{"_index":2231,"title":{},"content":{"206":{"position":[[493,17]]}},"keywords":{}}],["auto",{"_index":615,"title":{},"content":{"26":{"position":[[448,4],[534,4]]},"307":{"position":[[3182,4]]},"309":{"position":[[3506,4]]},"349":{"position":[[304,4]]},"417":{"position":[[1543,7],[1695,7]]},"419":{"position":[[938,5]]},"440":{"position":[[954,5]]},"483":{"position":[[533,4]]},"502":{"position":[[1191,7],[1343,7]]},"545":{"position":[[1145,7],[1297,7]]},"547":{"position":[[939,5]]},"637":{"position":[[705,7],[857,7]]},"917":{"position":[[1053,4]]},"919":{"position":[[1578,4]]},"965":{"position":[[1053,4]]},"1021":{"position":[[1702,7],[1854,7]]},"1023":{"position":[[919,5]]},"1186":{"position":[[341,4]]},"1203":{"position":[[325,4]]},"1388":{"position":[[410,4]]}},"keywords":{}}],["auto_incremen",{"_index":6016,"title":{},"content":{"1292":{"position":[[1359,13]]},"1306":{"position":[[1359,13]]},"1329":{"position":[[1359,13]]}},"keywords":{}}],["auto_offset_reset",{"_index":2657,"title":{},"content":{"250":{"position":[[480,20]]}},"keywords":{}}],["auto_offset_reset=conf['auto_offset_reset",{"_index":2666,"title":{},"content":{"250":{"position":[[840,44]]}},"keywords":{}}],["auto_resum",{"_index":2156,"title":{},"content":{"191":{"position":[[1573,11]]},"240":{"position":[[1534,11]]},"1032":{"position":[[1175,11]]},"1383":{"position":[[1521,11]]}},"keywords":{}}],["auto_suspend",{"_index":2154,"title":{},"content":{"191":{"position":[[1555,12]]},"240":{"position":[[1516,12]]},"1032":{"position":[[1157,12]]},"1383":{"position":[[1503,12]]},"1388":{"position":[[692,12]]}},"keywords":{}}],["autocaptur",{"_index":819,"title":{},"content":{"55":{"position":[[444,11]]}},"keywords":{}}],["autodetect",{"_index":2927,"title":{},"content":{"290":{"position":[[787,10]]},"593":{"position":[[235,11]]}},"keywords":{}}],["autodiscov",{"_index":341,"title":{},"content":{"11":{"position":[[1527,12],[1707,12]]},"12":{"position":[[319,12]]},"55":{"position":[[74,12],[279,13]]},"56":{"position":[[379,13],[440,13]]},"165":{"position":[[2339,13]]},"306":{"position":[[589,13],[679,12]]},"307":{"position":[[3266,14]]},"309":{"position":[[3590,14]]},"483":{"position":[[694,14]]}},"keywords":{}}],["autodiscover"automat",{"_index":826,"title":{},"content":{"55":{"position":[[974,31]]}},"keywords":{}}],["autodiscoveri",{"_index":5023,"title":{},"content":{"912":{"position":[[1041,13]]}},"keywords":{}}],["autoextend_si",{"_index":6014,"title":{},"content":{"1292":{"position":[[1309,13]]},"1306":{"position":[[1309,13]]},"1329":{"position":[[1309,13]]}},"keywords":{}}],["autoincr",{"_index":6289,"title":{},"content":{"1370":{"position":[[497,13]]}},"keywords":{}}],["autom",{"_index":2233,"title":{"208":{"position":[[0,10]]}},"content":{"206":{"position":[[704,9]]},"208":{"position":[[485,8]]},"947":{"position":[[1343,9]]}},"keywords":{}}],["automat",{"_index":368,"title":{"55":{"position":[[0,13]]}},"content":{"12":{"position":[[402,9]]},"13":{"position":[[239,13]]},"20":{"position":[[557,13]]},"54":{"position":[[227,13]]},"56":{"position":[[214,13],[495,13]]},"64":{"position":[[67,9]]},"75":{"position":[[25,13]]},"76":{"position":[[200,13]]},"80":{"position":[[463,13]]},"81":{"position":[[1226,14]]},"82":{"position":[[1085,13]]},"90":{"position":[[153,13]]},"112":{"position":[[530,9]]},"120":{"position":[[2658,13],[2772,13]]},"126":{"position":[[336,13],[448,13],[576,14]]},"146":{"position":[[672,13]]},"149":{"position":[[645,13]]},"152":{"position":[[648,13]]},"158":{"position":[[380,13]]},"165":{"position":[[6,13],[95,13]]},"192":{"position":[[1776,13]]},"206":{"position":[[885,13]]},"208":{"position":[[837,13]]},"209":{"position":[[353,13]]},"230":{"position":[[600,13]]},"239":{"position":[[1361,13],[1745,13],[1783,13],[2274,13]]},"278":{"position":[[1716,13]]},"306":{"position":[[646,14]]},"307":{"position":[[3228,13],[3417,14]]},"308":{"position":[[118,13],[406,13]]},"309":{"position":[[3552,13],[3741,14]]},"319":{"position":[[683,9],[738,9]]},"320":{"position":[[1780,9]]},"323":{"position":[[918,13]]},"337":{"position":[[501,13]]},"338":{"position":[[373,13]]},"366":{"position":[[675,13],[1007,13]]},"384":{"position":[[96,13]]},"397":{"position":[[1063,13]]},"417":{"position":[[1589,14],[1736,13]]},"419":{"position":[[256,13],[410,9],[808,14],[1505,13]]},"440":{"position":[[272,13],[426,9],[824,14]]},"441":{"position":[[114,13]]},"479":{"position":[[463,13]]},"492":{"position":[[215,14]]},"499":{"position":[[16,13],[274,13]]},"502":{"position":[[458,13],[1237,14],[1384,13]]},"504":{"position":[[193,13],[354,9],[740,14],[937,13],[1134,13]]},"545":{"position":[[1191,14],[1338,13]]},"547":{"position":[[257,13],[411,9],[809,14],[1507,13]]},"578":{"position":[[176,13]]},"602":{"position":[[869,13]]},"634":{"position":[[16,13],[266,13]]},"637":{"position":[[751,14],[898,13]]},"639":{"position":[[192,13],[352,9],[738,14],[935,13],[1132,13]]},"642":{"position":[[15,13]]},"660":{"position":[[572,13],[732,13],[896,13]]},"665":{"position":[[215,14]]},"680":{"position":[[215,14]]},"695":{"position":[[215,14]]},"750":{"position":[[995,9]]},"752":{"position":[[559,9]]},"753":{"position":[[1215,9]]},"754":{"position":[[873,14]]},"757":{"position":[[2260,9]]},"766":{"position":[[995,9]]},"770":{"position":[[2260,9]]},"789":{"position":[[1396,9]]},"791":{"position":[[512,9]]},"793":{"position":[[1186,9]]},"794":{"position":[[1079,14]]},"797":{"position":[[2267,9]]},"807":{"position":[[983,9]]},"808":{"position":[[1132,9]]},"809":{"position":[[1079,14]]},"812":{"position":[[2267,9]]},"823":{"position":[[983,9]]},"825":{"position":[[915,14]]},"828":{"position":[[2267,9]]},"842":{"position":[[2199,14],[2401,14]]},"867":{"position":[[1765,13]]},"869":{"position":[[1102,13]]},"903":{"position":[[701,13],[1033,13]]},"915":{"position":[[701,13],[1033,13]]},"930":{"position":[[701,13],[1033,13]]},"945":{"position":[[672,13],[884,13]]},"963":{"position":[[855,13],[1187,13]]},"1008":{"position":[[700,13]]},"1021":{"position":[[1748,14],[1895,13]]},"1023":{"position":[[237,13],[391,9],[789,14],[1488,13]]},"1140":{"position":[[298,13]]},"1155":{"position":[[77,13]]},"1165":{"position":[[160,13],[187,9],[282,9]]},"1177":{"position":[[442,13]]},"1183":{"position":[[12,13]]},"1186":{"position":[[441,13]]},"1192":{"position":[[104,13]]},"1195":{"position":[[364,13]]},"1209":{"position":[[140,13]]},"1286":{"position":[[1136,14]]},"1291":{"position":[[105,13]]},"1292":{"position":[[227,13]]},"1301":{"position":[[972,14]]},"1305":{"position":[[105,13]]},"1306":{"position":[[227,13]]},"1316":{"position":[[298,13]]},"1325":{"position":[[1136,14]]},"1328":{"position":[[105,13]]},"1329":{"position":[[227,13]]},"1340":{"position":[[298,13]]},"1351":{"position":[[298,13]]},"1370":{"position":[[290,13]]},"1379":{"position":[[235,13]]},"1394":{"position":[[103,13]]},"1403":{"position":[[235,13]]},"1414":{"position":[[235,13]]},"1423":{"position":[[110,13]]},"1431":{"position":[[321,13]]},"1456":{"position":[[20,13]]}},"keywords":{}}],["automatically.avrocsvjsonprotobufw3c",{"_index":3613,"title":{},"content":{"419":{"position":[[1010,36]]},"440":{"position":[[1026,36]]},"547":{"position":[[1011,36]]},"1023":{"position":[[991,36]]}},"keywords":{}}],["automationssegmentssingl",{"_index":5135,"title":{},"content":{"979":{"position":[[100,25]]}},"keywords":{}}],["automationssettingsskillssla",{"_index":3915,"title":{},"content":{"506":{"position":[[285,28]]}},"keywords":{}}],["avail",{"_index":229,"title":{"85":{"position":[[0,9]]},"362":{"position":[[0,9]]},"1116":{"position":[[0,9]]},"1120":{"position":[[0,9]]},"1473":{"position":[[0,9]]}},"content":{"7":{"position":[[127,9]]},"13":{"position":[[33,9]]},"20":{"position":[[267,9],[331,10],[424,10]]},"34":{"position":[[649,9]]},"35":{"position":[[182,9]]},"36":{"position":[[265,9]]},"38":{"position":[[558,9]]},"44":{"position":[[218,10]]},"58":{"position":[[42,10]]},"67":{"position":[[1303,9]]},"68":{"position":[[932,9]]},"83":{"position":[[541,9]]},"85":{"position":[[13,9]]},"102":{"position":[[236,9]]},"107":{"position":[[2436,9],[2743,9]]},"111":{"position":[[512,9]]},"122":{"position":[[411,9],[2144,10]]},"135":{"position":[[705,9],[806,9]]},"140":{"position":[[96,9]]},"144":{"position":[[328,9]]},"154":{"position":[[1834,9]]},"162":{"position":[[965,9]]},"169":{"position":[[271,9],[1040,9]]},"175":{"position":[[21,9]]},"183":{"position":[[568,9]]},"190":{"position":[[118,9]]},"192":{"position":[[60,9]]},"205":{"position":[[150,9]]},"206":{"position":[[761,9],[940,9]]},"207":{"position":[[512,9]]},"217":{"position":[[788,9],[1265,9],[1358,9],[1572,9]]},"218":{"position":[[1590,11]]},"228":{"position":[[910,10],[1260,9]]},"238":{"position":[[59,9]]},"239":{"position":[[953,9]]},"240":{"position":[[3449,9],[3540,10]]},"254":{"position":[[1660,9],[3350,9]]},"259":{"position":[[862,9],[2417,9]]},"267":{"position":[[249,9],[936,9]]},"277":{"position":[[1047,10]]},"290":{"position":[[1208,9]]},"295":{"position":[[44,9]]},"313":{"position":[[3094,10]]},"314":{"position":[[1477,9],[2925,9]]},"331":{"position":[[545,9]]},"333":{"position":[[194,13]]},"343":{"position":[[1023,10]]},"364":{"position":[[395,9],[458,9]]},"373":{"position":[[219,9]]},"417":{"position":[[1795,10]]},"429":{"position":[[417,9]]},"479":{"position":[[491,9]]},"480":{"position":[[577,9]]},"497":{"position":[[388,9]]},"502":{"position":[[1443,10]]},"515":{"position":[[640,9]]},"521":{"position":[[202,9],[279,9]]},"545":{"position":[[1397,10]]},"637":{"position":[[957,10]]},"645":{"position":[[428,9]]},"652":{"position":[[428,9]]},"654":{"position":[[652,9]]},"782":{"position":[[440,9]]},"786":{"position":[[272,10]]},"821":{"position":[[1294,9]]},"974":{"position":[[278,10]]},"985":{"position":[[451,9]]},"1000":{"position":[[457,9],[629,9],[892,9]]},"1020":{"position":[[118,9]]},"1021":{"position":[[1954,10]]},"1186":{"position":[[399,10]]},"1237":{"position":[[27,9]]},"1362":{"position":[[24,9]]},"1425":{"position":[[183,9]]},"1448":{"position":[[360,9]]},"1452":{"position":[[198,9]]},"1473":{"position":[[1,9]]}},"keywords":{}}],["avatarsproject",{"_index":4481,"title":{},"content":{"709":{"position":[[487,14]]}},"keywords":{}}],["averag",{"_index":4280,"title":{},"content":{"595":{"position":[[1799,7]]}},"keywords":{}}],["average_session_length",{"_index":3649,"title":{},"content":{"425":{"position":[[547,22]]}},"keywords":{}}],["avg",{"_index":5583,"title":{},"content":{"1140":{"position":[[1497,3]]},"1292":{"position":[[1400,3]]},"1306":{"position":[[1400,3]]},"1316":{"position":[[1497,3]]},"1329":{"position":[[1400,3]]},"1340":{"position":[[1497,3]]},"1351":{"position":[[1497,3]]},"1379":{"position":[[1551,3]]},"1403":{"position":[[1551,3]]},"1414":{"position":[[1551,3]]},"1431":{"position":[[1520,3]]}},"keywords":{}}],["avg_row_lengt",{"_index":6018,"title":{},"content":{"1292":{"position":[[1429,13]]},"1306":{"position":[[1429,13]]},"1329":{"position":[[1429,13]]}},"keywords":{}}],["avoid",{"_index":509,"title":{},"content":{"17":{"position":[[1105,5]]},"102":{"position":[[600,5]]},"159":{"position":[[544,5]]},"253":{"position":[[771,5]]},"305":{"position":[[635,5]]},"313":{"position":[[771,5]]},"326":{"position":[[1680,5]]},"330":{"position":[[78,5]]},"411":{"position":[[252,5]]},"577":{"position":[[397,5]]},"588":{"position":[[392,5]]},"754":{"position":[[391,5]]},"794":{"position":[[264,5]]},"809":{"position":[[264,5]]},"825":{"position":[[264,5]]},"922":{"position":[[3147,5]]},"944":{"position":[[409,6]]},"1068":{"position":[[109,5]]},"1286":{"position":[[321,5]]},"1301":{"position":[[321,5]]},"1325":{"position":[[321,5]]},"1437":{"position":[[964,6]]},"1449":{"position":[[425,5]]},"1453":{"position":[[895,5]]},"1472":{"position":[[875,5]]}},"keywords":{}}],["avro",{"_index":2684,"title":{},"content":{"250":{"position":[[1541,4]]},"427":{"position":[[357,4]]},"1118":{"position":[[550,4]]}},"keywords":{}}],["avrocsvjsonprotobufw3c",{"_index":3899,"title":{},"content":{"499":{"position":[[157,22]]},"504":{"position":[[964,22]]},"634":{"position":[[149,22]]},"639":{"position":[[962,22]]}},"keywords":{}}],["aw",{"_index":2027,"title":{"222":{"position":[[10,4]]},"430":{"position":[[0,3]]}},"content":{"174":{"position":[[47,3]]},"190":{"position":[[847,3],[869,3],[951,3]]},"222":{"position":[[57,4],[680,4]]},"299":{"position":[[396,3],[455,3]]},"301":{"position":[[694,3],[716,3],[769,3]]},"329":{"position":[[412,3],[535,3]]},"344":{"position":[[151,3]]},"390":{"position":[[150,3],[565,3],[624,3]]},"392":{"position":[[76,3],[106,3],[194,3],[238,3],[272,3],[360,3],[398,3],[415,3],[527,4],[547,3],[574,3]]},"393":{"position":[[199,3],[257,3]]},"395":{"position":[[161,3],[744,3],[803,3]]},"397":{"position":[[90,3],[198,3],[280,3],[307,3],[558,3],[575,3],[676,4]]},"398":{"position":[[200,3],[258,3]]},"405":{"position":[[1,3]]},"406":{"position":[[64,3],[341,3],[471,3]]},"408":{"position":[[126,3],[137,3],[193,3],[240,3],[300,3],[341,3]]},"413":{"position":[[288,3]]},"415":{"position":[[57,3],[335,3],[975,4]]},"417":{"position":[[572,3],[589,3],[693,3],[720,3],[750,3],[907,3],[941,3],[1997,3],[2024,3]]},"430":{"position":[[10,3],[154,3]]},"432":{"position":[[559,3],[950,3],[995,3],[1041,3],[1090,3],[1121,3],[1159,3]]},"433":{"position":[[429,3],[643,3]]},"1122":{"position":[[370,3],[429,3]]},"1125":{"position":[[90,3],[193,3],[270,3],[350,3],[367,3],[470,4]]},"1126":{"position":[[161,3],[219,3]]},"1142":{"position":[[135,3],[280,3]]},"1144":{"position":[[145,3],[245,3],[831,4]]},"1149":{"position":[[590,3]]},"1151":{"position":[[752,3],[879,3]]},"1154":{"position":[[563,3]]},"1160":{"position":[[135,3],[171,3],[264,3],[443,3]]},"1162":{"position":[[79,3],[125,3],[178,3],[232,3],[420,3]]},"1165":{"position":[[249,3]]},"1168":{"position":[[135,3],[280,3]]},"1170":{"position":[[145,3],[245,3],[831,4]]},"1203":{"position":[[462,3]]},"1204":{"position":[[60,3]]},"1206":{"position":[[72,3],[83,3],[149,3],[160,3],[212,3],[234,3]]},"1258":{"position":[[184,3]]},"1260":{"position":[[551,3],[678,3]]},"1322":{"position":[[57,4],[680,4]]},"1335":{"position":[[57,4],[680,4]]},"1420":{"position":[[363,3],[417,3],[463,3],[484,3]]}},"keywords":{}}],["await",{"_index":1931,"title":{},"content":{"163":{"position":[[1060,6]]},"1443":{"position":[[325,5]]}},"keywords":{}}],["await<br/>acknowledg",{"_index":6445,"title":{},"content":{"1434":{"position":[[894,28]]}},"keywords":{}}],["awar",{"_index":2783,"title":{},"content":{"259":{"position":[[739,5]]},"821":{"position":[[727,5]]},"869":{"position":[[1462,5]]},"912":{"position":[[743,5]]},"1006":{"position":[[268,5]]}},"keywords":{}}],["awkward",{"_index":3214,"title":{},"content":{"333":{"position":[[432,7]]}},"keywords":{}}],["aws"",{"_index":2006,"title":{},"content":{"172":{"position":[[523,9],[831,9],[1081,9]]}},"keywords":{}}],["aws_access_key_id",{"_index":3688,"title":{},"content":{"433":{"position":[[647,18]]},"1163":{"position":[[133,18]]},"1421":{"position":[[182,17]]}},"keywords":{}}],["aws_region",{"_index":5857,"title":{},"content":{"1206":{"position":[[137,11]]}},"keywords":{}}],["aws_secret_access_key",{"_index":3690,"title":{},"content":{"433":{"position":[[672,22]]},"1162":{"position":[[155,22]]},"1163":{"position":[[174,22]]}},"keywords":{}}],["aws_secret_key",{"_index":5858,"title":{},"content":{"1206":{"position":[[196,15]]}},"keywords":{}}],["aws_secret_key_id",{"_index":6412,"title":{},"content":{"1421":{"position":[[220,17]]}},"keywords":{}}],["awsaccesskeyid",{"_index":3518,"title":{},"content":{"393":{"position":[[169,15]]},"398":{"position":[[170,15]]},"417":{"position":[[704,15]]},"1126":{"position":[[131,15]]},"1144":{"position":[[129,15]]},"1145":{"position":[[144,15]]},"1151":{"position":[[722,15]]},"1152":{"position":[[258,15]]},"1170":{"position":[[129,15]]},"1171":{"position":[[148,15]]},"1260":{"position":[[521,15]]},"1261":{"position":[[220,15]]},"1417":{"position":[[251,14]]},"1420":{"position":[[347,15]]},"1421":{"position":[[166,15]]}},"keywords":{}}],["awssecretaccesskey",{"_index":3514,"title":{},"content":{"392":{"position":[[218,19]]},"393":{"position":[[223,19]]},"397":{"position":[[160,19]]},"398":{"position":[[224,19]]},"417":{"position":[[887,19]]},"1125":{"position":[[155,19]]},"1126":{"position":[[185,19]]},"1144":{"position":[[225,19]]},"1145":{"position":[[182,19]]},"1151":{"position":[[841,19]]},"1152":{"position":[[288,19]]},"1170":{"position":[[225,19]]},"1171":{"position":[[186,19]]},"1260":{"position":[[640,19]]},"1261":{"position":[[258,19]]},"1417":{"position":[[270,18]]},"1420":{"position":[[397,19]]},"1421":{"position":[[200,19]]}},"keywords":{}}],["azur",{"_index":1151,"title":{"173":{"position":[[0,5]]},"224":{"position":[[10,6]]},"434":{"position":[[0,5]]},"753":{"position":[[0,5]]},"793":{"position":[[0,5]]},"919":{"position":[[0,5]]},"1043":{"position":[[0,5]]},"1283":{"position":[[0,5]]},"1311":{"position":[[0,5]]},"1409":{"position":[[0,5]]}},"content":{"82":{"position":[[636,5]]},"170":{"position":[[213,5]]},"173":{"position":[[150,5],[316,5],[361,5],[395,5],[479,5],[669,5],[1239,5]]},"174":{"position":[[334,6]]},"179":{"position":[[558,5]]},"224":{"position":[[57,6],[1097,5]]},"363":{"position":[[689,5],[770,5],[833,5]]},"435":{"position":[[55,5]]},"436":{"position":[[109,5],[293,5],[1110,5]]},"437":{"position":[[250,5]]},"438":{"position":[[578,5],[622,5],[718,5],[790,5],[846,5],[929,5],[993,5],[1072,5],[1102,5],[1125,5],[1229,5],[1265,5],[1302,5],[1458,5],[1587,5]]},"439":{"position":[[95,5]]},"440":{"position":[[30,5]]},"446":{"position":[[227,5]]},"753":{"position":[[53,5]]},"919":{"position":[[620,5]]},"1120":{"position":[[608,5]]},"1282":{"position":[[263,5]]},"1283":{"position":[[192,5],[385,5]]},"1288":{"position":[[237,5]]},"1310":{"position":[[278,5]]},"1311":{"position":[[23,5],[222,5]]}},"keywords":{}}],["azureclientid",{"_index":3713,"title":{},"content":{"439":{"position":[[168,14]]}},"keywords":{}}],["azureclientsecret",{"_index":3719,"title":{},"content":{"439":{"position":[[220,18]]}},"keywords":{}}],["azuresubscriptionid",{"_index":3720,"title":{},"content":{"439":{"position":[[253,20]]}},"keywords":{}}],["azuretenantid",{"_index":3723,"title":{},"content":{"439":{"position":[[311,14]]}},"keywords":{}}],["b",{"_index":941,"title":{},"content":{"62":{"position":[[723,2],[840,2]]},"98":{"position":[[1114,4]]},"210":{"position":[[2753,2]]},"250":{"position":[[1443,1]]}},"keywords":{}}],["b/data.csv",{"_index":5192,"title":{},"content":{"1020":{"position":[[1107,10]]}},"keywords":{}}],["b35e",{"_index":2730,"title":{},"content":{"253":{"position":[[1892,4]]},"313":{"position":[[1892,4]]}},"keywords":{}}],["b7ca247e401c"",{"_index":2723,"title":{},"content":{"253":{"position":[[1765,19]]},"313":{"position":[[1765,19]]}},"keywords":{}}],["b926c154ecc7",{"_index":3722,"title":{},"content":{"439":{"position":[[298,12]]}},"keywords":{}}],["back",{"_index":605,"title":{},"content":{"26":{"position":[[152,4]]},"30":{"position":[[152,6]]},"34":{"position":[[729,4]]},"48":{"position":[[117,6]]},"61":{"position":[[139,4]]},"110":{"position":[[59,4]]},"112":{"position":[[667,6]]},"121":{"position":[[404,4],[774,4]]},"124":{"position":[[411,4]]},"138":{"position":[[1175,5]]},"142":{"position":[[1144,5]]},"146":{"position":[[977,4]]},"149":{"position":[[968,4]]},"152":{"position":[[953,4]]},"154":{"position":[[1235,4],[1344,6]]},"163":{"position":[[1118,4]]},"183":{"position":[[104,4]]},"189":{"position":[[1218,6]]},"190":{"position":[[1830,4]]},"192":{"position":[[2192,4]]},"216":{"position":[[264,6]]},"239":{"position":[[841,6]]},"240":{"position":[[2448,4]]},"268":{"position":[[491,5]]},"279":{"position":[[118,5]]},"281":{"position":[[102,5]]},"289":{"position":[[380,6]]},"300":{"position":[[348,6]]},"320":{"position":[[1844,6]]},"321":{"position":[[828,6]]},"326":{"position":[[630,6]]},"331":{"position":[[255,4]]},"436":{"position":[[828,4]]},"1146":{"position":[[668,4]]},"1173":{"position":[[680,4]]},"1176":{"position":[[621,4]]},"1183":{"position":[[1240,4]]},"1185":{"position":[[421,4]]},"1194":{"position":[[631,4]]},"1203":{"position":[[792,4]]},"1215":{"position":[[668,4]]},"1223":{"position":[[680,4]]},"1226":{"position":[[432,4]]},"1243":{"position":[[209,4]]},"1354":{"position":[[456,4]]},"1382":{"position":[[675,4]]},"1435":{"position":[[362,7]]},"1444":{"position":[[1025,4]]},"1471":{"position":[[587,4]]}},"keywords":{}}],["backbon",{"_index":2574,"title":{},"content":{"237":{"position":[[2588,8]]}},"keywords":{}}],["backfil",{"_index":401,"title":{"368":{"position":[[0,9]]},"595":{"position":[[0,8]]},"755":{"position":[[0,9]]},"768":{"position":[[0,9]]},"785":{"position":[[0,8]]},"795":{"position":[[0,9]]},"810":{"position":[[0,9]]},"826":{"position":[[0,9]]},"905":{"position":[[0,9]]},"920":{"position":[[0,9]]},"932":{"position":[[0,9]]},"948":{"position":[[0,9]]},"966":{"position":[[0,9]]}},"content":{"13":{"position":[[873,8],[984,8],[1251,9],[1435,8],[1954,9]]},"34":{"position":[[705,9]]},"138":{"position":[[1380,9]]},"142":{"position":[[1381,9]]},"198":{"position":[[440,11]]},"208":{"position":[[943,11],[1116,8],[1231,8],[1509,11],[1686,8]]},"209":{"position":[[508,8],[684,9],[912,11],[1127,9],[1507,8]]},"210":{"position":[[178,9]]},"211":{"position":[[855,11]]},"237":{"position":[[1492,11]]},"239":{"position":[[2970,9]]},"271":{"position":[[439,8]]},"307":{"position":[[2078,9],[2556,9],[2794,8],[2820,8],[3025,8]]},"308":{"position":[[1172,8]]},"309":{"position":[[1605,8],[2504,9],[3111,9],[3214,8],[3277,9],[3301,9]]},"321":{"position":[[2345,9]]},"323":{"position":[[932,8]]},"329":{"position":[[761,9]]},"366":{"position":[[890,11]]},"368":{"position":[[74,10],[365,9],[445,11]]},"370":{"position":[[773,8],[866,8],[1062,9],[1146,11],[1384,10]]},"373":{"position":[[349,8],[520,8]]},"377":{"position":[[220,8],[254,8],[487,8],[662,8],[733,10],[893,8],[965,9],[993,8],[1093,11]]},"397":{"position":[[399,8],[453,8],[510,8],[771,8],[1038,9]]},"593":{"position":[[392,8]]},"595":{"position":[[88,8],[1199,8],[1590,8],[1864,8]]},"750":{"position":[[601,11]]},"755":{"position":[[74,10],[365,9],[445,11]]},"757":{"position":[[1407,9],[1491,11],[1540,8],[1633,8]]},"764":{"position":[[727,8]]},"766":{"position":[[601,11]]},"768":{"position":[[74,10],[365,9],[445,11]]},"770":{"position":[[1407,9],[1491,11],[1540,8],[1633,8]]},"777":{"position":[[727,8]]},"785":{"position":[[162,8],[695,8]]},"789":{"position":[[589,11],[882,8],[925,10],[1002,9]]},"795":{"position":[[72,10],[363,9],[443,11]]},"797":{"position":[[1407,9],[1491,11],[1540,8],[1633,8]]},"804":{"position":[[725,8]]},"807":{"position":[[589,11]]},"810":{"position":[[72,10],[363,9],[443,11]]},"812":{"position":[[1407,9],[1491,11],[1540,8],[1633,8]]},"819":{"position":[[725,8]]},"823":{"position":[[589,11]]},"826":{"position":[[72,10],[363,9],[443,11]]},"828":{"position":[[1407,9],[1491,11],[1540,8],[1633,8]]},"835":{"position":[[725,8]]},"842":{"position":[[1559,8],[1589,9],[1780,11],[1815,8],[2312,10],[2505,12],[3547,8],[3607,8]]},"867":{"position":[[523,9],[607,11],[724,10],[865,8],[958,8]]},"879":{"position":[[1022,8],[1115,8]]},"903":{"position":[[916,11]]},"905":{"position":[[77,10],[368,9],[448,11]]},"907":{"position":[[556,8],[649,8],[845,9],[929,11],[1167,10]]},"915":{"position":[[916,11]]},"920":{"position":[[77,10],[368,9],[448,11]]},"922":{"position":[[2721,8]]},"923":{"position":[[556,8],[649,8],[845,9],[929,11],[1167,10]]},"930":{"position":[[916,11]]},"932":{"position":[[77,10],[368,9],[448,11]]},"934":{"position":[[556,8],[649,8],[845,9],[929,11],[1167,10]]},"947":{"position":[[1353,8]]},"948":{"position":[[77,10],[368,9],[448,11]]},"950":{"position":[[556,8],[649,8],[845,9],[929,11],[1167,10]]},"963":{"position":[[1070,11]]},"966":{"position":[[77,10],[368,9],[448,11]]},"968":{"position":[[556,8],[649,8],[845,9],[929,11],[1167,10]]},"1006":{"position":[[447,8]]},"1040":{"position":[[632,11]]},"1045":{"position":[[541,8],[634,8],[693,9],[777,11],[894,10]]},"1050":{"position":[[632,11]]},"1053":{"position":[[541,8],[634,8],[693,9],[777,11],[894,10]]},"1058":{"position":[[632,11]]},"1061":{"position":[[541,8],[634,8],[693,9],[777,11],[894,10]]},"1146":{"position":[[550,8],[621,11]]},"1173":{"position":[[562,8],[633,11]]},"1215":{"position":[[550,8],[621,11]]},"1223":{"position":[[562,8],[633,11]]},"1449":{"position":[[636,10]]},"1451":{"position":[[409,11],[809,9]]}},"keywords":{}}],["backfillmod",{"_index":4257,"title":{},"content":{"594":{"position":[[1138,13],[1253,13],[1342,13],[1413,13]]}},"keywords":{}}],["background",{"_index":811,"title":{},"content":{"55":{"position":[[49,10]]},"237":{"position":[[3108,10]]},"1442":{"position":[[706,10],[1004,10]]},"1451":{"position":[[1079,10]]}},"keywords":{}}],["backlog",{"_index":1568,"title":{},"content":{"110":{"position":[[334,7]]}},"keywords":{}}],["backslash",{"_index":3627,"title":{},"content":{"419":{"position":[[2117,9]]},"441":{"position":[[726,9]]},"504":{"position":[[1746,9]]},"547":{"position":[[2119,9]]},"639":{"position":[[1744,9]]},"1023":{"position":[[2100,9]]}},"keywords":{}}],["backup",{"_index":1639,"title":{},"content":{"117":{"position":[[225,7]]},"767":{"position":[[1230,6]]},"792":{"position":[[1526,6]]},"824":{"position":[[1296,6]]},"1292":{"position":[[1481,6]]},"1306":{"position":[[1481,6]]},"1329":{"position":[[1481,6]]},"1379":{"position":[[1600,6]]},"1403":{"position":[[1600,6]]},"1414":{"position":[[1600,6]]}},"keywords":{}}],["backward",{"_index":2251,"title":{},"content":{"208":{"position":[[857,8]]},"1201":{"position":[[75,9]]},"1293":{"position":[[75,9]]},"1307":{"position":[[75,9]]},"1317":{"position":[[75,9]]},"1330":{"position":[[75,9]]},"1341":{"position":[[75,9]]},"1352":{"position":[[75,9]]},"1359":{"position":[[75,9]]},"1380":{"position":[[75,9]]},"1404":{"position":[[75,9]]},"1415":{"position":[[75,9]]},"1432":{"position":[[75,9]]}},"keywords":{}}],["bad",{"_index":725,"title":{},"content":{"41":{"position":[[242,3]]}},"keywords":{}}],["badli",{"_index":4651,"title":{},"content":{"763":{"position":[[86,5]]},"776":{"position":[[86,5]]},"803":{"position":[[86,5]]},"818":{"position":[[86,5]]},"834":{"position":[[86,5]]}},"keywords":{}}],["balanc",{"_index":537,"title":{"281":{"position":[[16,9]]}},"content":{"20":{"position":[[571,8]]},"103":{"position":[[819,8]]},"107":{"position":[[782,7]]},"113":{"position":[[673,8],[829,8]]},"280":{"position":[[350,7],[439,8],[467,7],[1235,8],[1569,7],[1699,8],[2090,8],[2154,7],[2164,7]]},"281":{"position":[[193,8],[297,8],[334,7],[1537,8],[1609,8],[1728,7],[1796,7],[1854,7],[1893,7],[1943,8],[2008,8],[2048,8],[2120,8]]},"532":{"position":[[183,7]]},"1036":{"position":[[355,7]]},"1073":{"position":[[69,7],[170,7]]}},"keywords":{}}],["balance_transact",{"_index":5298,"title":{},"content":{"1078":{"position":[[222,20]]}},"keywords":{}}],["balances.flow.yaml",{"_index":2877,"title":{},"content":{"281":{"position":[[640,19]]}},"keywords":{}}],["balances.flow.yamlmodul",{"_index":2879,"title":{},"content":{"281":{"position":[[825,24]]}},"keywords":{}}],["balances.schema.yaml",{"_index":2882,"title":{},"content":{"281":{"position":[[905,20]]}},"keywords":{}}],["balances.t",{"_index":2883,"title":{},"content":{"281":{"position":[[974,11]]}},"keywords":{}}],["balances.tsbal",{"_index":2886,"title":{},"content":{"281":{"position":[[1183,19]]}},"keywords":{}}],["bank",{"_index":2805,"title":{},"content":{"268":{"position":[[1578,4]]}},"keywords":{}}],["bank_account",{"_index":5300,"title":{},"content":{"1078":{"position":[[323,13]]}},"keywords":{}}],["bar",{"_index":436,"title":{},"content":{"14":{"position":[[795,4]]},"94":{"position":[[2593,5]]},"154":{"position":[[609,5]]},"349":{"position":[[59,4]]},"479":{"position":[[59,4]]},"487":{"position":[[147,4]]},"947":{"position":[[69,3]]},"1092":{"position":[[59,4]]}},"keywords":{}}],["bar.flow.yaml",{"_index":1317,"title":{},"content":{"92":{"position":[[69,14],[185,13],[489,13],[966,14]]}},"keywords":{}}],["base",{"_index":1267,"title":{},"content":{"84":{"position":[[757,5]]},"87":{"position":[[117,4]]},"109":{"position":[[243,5]]},"120":{"position":[[2672,5]]},"161":{"position":[[465,4],[577,4]]},"163":{"position":[[875,5]]},"183":{"position":[[4604,5]]},"202":{"position":[[122,5]]},"211":{"position":[[300,5]]},"221":{"position":[[1160,5]]},"222":{"position":[[405,5]]},"223":{"position":[[371,5]]},"224":{"position":[[424,5]]},"228":{"position":[[800,5]]},"229":{"position":[[494,5]]},"233":{"position":[[735,5]]},"236":{"position":[[494,4]]},"239":{"position":[[440,5]]},"240":{"position":[[2607,5],[4520,5],[4783,5]]},"241":{"position":[[171,5]]},"245":{"position":[[301,5]]},"280":{"position":[[329,5],[2202,5]]},"281":{"position":[[2227,5]]},"296":{"position":[[6720,5]]},"313":{"position":[[3502,4]]},"314":{"position":[[2125,4]]},"320":{"position":[[893,5]]},"395":{"position":[[684,5]]},"397":{"position":[[1087,5]]},"417":{"position":[[1750,5]]},"488":{"position":[[43,4]]},"494":{"position":[[204,4]]},"496":{"position":[[147,5],[153,4],[275,4]]},"497":{"position":[[116,5]]},"502":{"position":[[1398,5]]},"545":{"position":[[1352,5]]},"602":{"position":[[919,5]]},"637":{"position":[[912,5]]},"659":{"position":[[200,4]]},"676":{"position":[[43,4]]},"691":{"position":[[43,4]]},"739":{"position":[[190,4]]},"741":{"position":[[431,4]]},"780":{"position":[[130,5]]},"839":{"position":[[102,5]]},"840":{"position":[[721,5]]},"848":{"position":[[102,5]]},"849":{"position":[[544,5],[1196,5]]},"947":{"position":[[587,5]]},"1020":{"position":[[305,5],[805,5]]},"1021":{"position":[[1909,5]]},"1031":{"position":[[570,5]]},"1087":{"position":[[106,5]]},"1122":{"position":[[311,5]]},"1164":{"position":[[61,5]]},"1172":{"position":[[53,5]]},"1179":{"position":[[619,4]]},"1183":{"position":[[49,5]]},"1201":{"position":[[353,5]]},"1222":{"position":[[53,5]]},"1251":{"position":[[162,5]]},"1271":{"position":[[31,5]]},"1275":{"position":[[95,5]]},"1279":{"position":[[79,5],[132,5]]},"1282":{"position":[[183,5]]},"1288":{"position":[[62,5]]},"1298":{"position":[[371,5]]},"1310":{"position":[[193,5]]},"1322":{"position":[[405,5]]},"1335":{"position":[[405,5]]},"1346":{"position":[[371,5]]},"1356":{"position":[[209,4],[222,4],[1280,5]]},"1359":{"position":[[325,4]]},"1388":{"position":[[757,5]]},"1439":{"position":[[1412,4]]},"1453":{"position":[[1198,5]]},"1459":{"position":[[830,4],[1084,4]]},"1461":{"position":[[5278,5]]},"1477":{"position":[[502,4]]}},"keywords":{}}],["base64",{"_index":5769,"title":{},"content":{"1164":{"position":[[325,7]]},"1172":{"position":[[427,7]]},"1196":{"position":[[608,6]]},"1222":{"position":[[427,7]]},"1384":{"position":[[1081,6]]}},"keywords":{}}],["basi",{"_index":1684,"title":{},"content":{"122":{"position":[[1980,6]]},"271":{"position":[[41,5]]},"368":{"position":[[202,6],[472,6]]},"419":{"position":[[1217,6]]},"440":{"position":[[1233,6]]},"547":{"position":[[1219,6]]},"755":{"position":[[202,6],[472,6]]},"768":{"position":[[202,6],[472,6]]},"795":{"position":[[200,6],[470,6]]},"810":{"position":[[200,6],[470,6]]},"826":{"position":[[200,6],[470,6]]},"905":{"position":[[205,6],[475,6]]},"920":{"position":[[205,6],[475,6]]},"932":{"position":[[205,6],[475,6]]},"948":{"position":[[205,6],[475,6]]},"966":{"position":[[205,6],[475,6]]},"1020":{"position":[[189,5],[1299,5],[1837,6]]},"1023":{"position":[[1200,6]]},"1155":{"position":[[398,6],[504,5]]},"1182":{"position":[[577,6]]},"1191":{"position":[[581,6]]},"1234":{"position":[[243,6]]},"1262":{"position":[[581,6]]},"1389":{"position":[[579,6]]},"1429":{"position":[[196,5]]}},"keywords":{}}],["basic",{"_index":711,"title":{"214":{"position":[[9,5]]}},"content":{"39":{"position":[[71,5]]},"54":{"position":[[184,5]]},"61":{"position":[[228,5]]},"70":{"position":[[400,5]]},"107":{"position":[[2515,5]]},"119":{"position":[[269,5]]},"137":{"position":[[257,5]]},"156":{"position":[[186,5]]},"184":{"position":[[363,5]]},"185":{"position":[[110,5]]},"221":{"position":[[286,5]]},"288":{"position":[[50,5]]},"299":{"position":[[50,5]]},"616":{"position":[[57,5]]}},"keywords":{}}],["basicauth",{"_index":4501,"title":{},"content":{"712":{"position":[[141,10],[448,10]]}},"keywords":{}}],["basisdebug",{"_index":243,"title":{},"content":{"7":{"position":[[434,11]]}},"keywords":{}}],["bastion",{"_index":3418,"title":{},"content":{"370":{"position":[[1590,7]]},"1138":{"position":[[881,7]]}},"keywords":{}}],["batch",{"_index":791,"title":{"53":{"position":[[0,5]]},"474":{"position":[[9,5]]},"821":{"position":[[6,5]]},"912":{"position":[[11,5]]},"1008":{"position":[[22,5]]}},"content":{"53":{"position":[[64,5]]},"124":{"position":[[485,7]]},"163":{"position":[[781,5],[858,8]]},"180":{"position":[[232,5]]},"198":{"position":[[193,5],[615,6]]},"233":{"position":[[729,5]]},"319":{"position":[[857,5]]},"321":{"position":[[29,5],[159,5]]},"364":{"position":[[91,5]]},"410":{"position":[[50,5]]},"517":{"position":[[3217,7],[3242,5],[3271,5]]},"529":{"position":[[205,7]]},"821":{"position":[[6,5]]},"912":{"position":[[11,5]]},"975":{"position":[[111,5],[235,5]]},"977":{"position":[[653,5]]},"1005":{"position":[[247,5]]},"1006":{"position":[[158,5]]},"1008":{"position":[[36,5],[120,5],[212,5],[422,5]]},"1451":{"position":[[914,8]]}},"keywords":{}}],["batch.messag",{"_index":3576,"title":{},"content":{"410":{"position":[[218,13]]}},"keywords":{}}],["batch:dev",{"_index":3294,"title":{},"content":{"363":{"position":[[917,9]]}},"keywords":{}}],["batchgetitem",{"_index":5434,"title":{},"content":{"1122":{"position":[[81,12]]}},"keywords":{}}],["batman",{"_index":3686,"title":{},"content":{"433":{"position":[[317,6]]}},"keywords":{}}],["bbbb",{"_index":3716,"title":{},"content":{"439":{"position":[[197,4],[288,4],[340,4]]}},"keywords":{}}],["be",{"_index":504,"title":{},"content":{"17":{"position":[[818,5]]},"27":{"position":[[335,5]]},"74":{"position":[[96,5]]},"77":{"position":[[576,5]]},"94":{"position":[[2643,5]]},"110":{"position":[[493,5]]},"128":{"position":[[309,5]]},"135":{"position":[[444,5]]},"136":{"position":[[142,5]]},"146":{"position":[[193,5],[467,5]]},"149":{"position":[[202,5]]},"152":{"position":[[209,5]]},"162":{"position":[[77,5]]},"166":{"position":[[61,5]]},"197":{"position":[[1515,5],[1571,5]]},"207":{"position":[[394,5],[506,5]]},"208":{"position":[[290,5]]},"238":{"position":[[751,5],[1428,5]]},"239":{"position":[[835,5],[947,5]]},"254":{"position":[[2476,5]]},"309":{"position":[[258,5]]},"314":{"position":[[2017,5]]},"315":{"position":[[2389,5]]},"410":{"position":[[325,5]]},"411":{"position":[[89,5]]},"750":{"position":[[926,5]]},"757":{"position":[[588,5]]},"760":{"position":[[200,5]]},"766":{"position":[[926,5]]},"770":{"position":[[588,5]]},"773":{"position":[[200,5]]},"789":{"position":[[1327,5]]},"797":{"position":[[588,5]]},"800":{"position":[[200,5]]},"807":{"position":[[914,5]]},"812":{"position":[[588,5]]},"815":{"position":[[200,5]]},"821":{"position":[[973,5]]},"823":{"position":[[914,5]]},"828":{"position":[[588,5]]},"831":{"position":[[200,5]]},"870":{"position":[[746,5]]},"1155":{"position":[[313,5]]},"1234":{"position":[[174,5],[180,5]]},"1388":{"position":[[615,5]]},"1437":{"position":[[1097,6]]}},"keywords":{}}],["beam",{"_index":3097,"title":{"319":{"position":[[7,4]]}},"content":{"319":{"position":[[41,5],[110,4],[258,5],[322,4],[426,5],[525,4],[653,5],[767,5],[818,5],[1018,4],[1374,5]]}},"keywords":{}}],["beam'",{"_index":3110,"title":{},"content":{"319":{"position":[[1487,6]]}},"keywords":{}}],["bearer",{"_index":3249,"title":{},"content":{"347":{"position":[[114,6]]},"489":{"position":[[115,6],[716,6]]},"491":{"position":[[114,6]]},"662":{"position":[[115,6],[716,6]]},"664":{"position":[[135,6]]},"677":{"position":[[115,6],[716,6]]},"679":{"position":[[114,6]]},"692":{"position":[[115,6],[716,6]]},"694":{"position":[[114,6]]},"943":{"position":[[1091,6]]},"1241":{"position":[[275,6]]}},"keywords":{}}],["becam",{"_index":4657,"title":{},"content":{"764":{"position":[[264,6]]},"777":{"position":[[264,6]]},"804":{"position":[[262,6]]},"819":{"position":[[262,6]]},"835":{"position":[[262,6]]}},"keywords":{}}],["becom",{"_index":391,"title":{},"content":{"13":{"position":[[619,7]]},"35":{"position":[[175,6]]},"36":{"position":[[258,6]]},"42":{"position":[[209,7]]},"43":{"position":[[7,6]]},"44":{"position":[[211,6]]},"67":{"position":[[2040,7]]},"98":{"position":[[55,7],[1047,6]]},"106":{"position":[[598,6]]},"122":{"position":[[469,7]]},"124":{"position":[[742,7],[781,6]]},"163":{"position":[[641,6]]},"164":{"position":[[1214,7]]},"183":{"position":[[907,6]]},"240":{"position":[[3532,7]]},"267":{"position":[[1297,6]]},"270":{"position":[[926,6]]},"277":{"position":[[1040,6]]},"280":{"position":[[209,8]]},"291":{"position":[[896,7]]},"302":{"position":[[896,7]]}},"keywords":{}}],["becuas",{"_index":5197,"title":{},"content":{"1020":{"position":[[1579,7]]}},"keywords":{}}],["befor",{"_index":36,"title":{},"content":{"1":{"position":[[430,6],[639,6]]},"20":{"position":[[845,6]]},"24":{"position":[[193,6]]},"41":{"position":[[658,6]]},"54":{"position":[[503,6]]},"75":{"position":[[458,6]]},"82":{"position":[[5045,6]]},"94":{"position":[[1648,6],[2636,6]]},"111":{"position":[[103,6],[287,6],[589,6]]},"119":{"position":[[548,6]]},"120":{"position":[[1200,6],[2500,6]]},"125":{"position":[[114,6]]},"136":{"position":[[96,7],[135,6]]},"139":{"position":[[164,6]]},"143":{"position":[[188,6]]},"156":{"position":[[615,6],[759,6]]},"162":{"position":[[1064,6]]},"165":{"position":[[255,6],[385,6],[1996,6]]},"169":{"position":[[1418,7]]},"177":{"position":[[183,6]]},"191":{"position":[[1,6]]},"207":{"position":[[1,6]]},"215":{"position":[[199,6]]},"218":{"position":[[991,6]]},"227":{"position":[[373,6]]},"232":{"position":[[857,6]]},"236":{"position":[[1702,6]]},"238":{"position":[[671,6]]},"239":{"position":[[1588,6]]},"240":{"position":[[3272,6],[3420,6]]},"253":{"position":[[255,6]]},"255":{"position":[[55,6]]},"259":{"position":[[476,6],[1560,6],[2170,6],[3118,6]]},"278":{"position":[[385,7]]},"280":{"position":[[154,6]]},"281":{"position":[[2524,6]]},"313":{"position":[[255,6]]},"316":{"position":[[55,6]]},"329":{"position":[[924,6]]},"332":{"position":[[689,6]]},"340":{"position":[[278,7]]},"343":{"position":[[446,6],[937,6]]},"410":{"position":[[198,6]]},"411":{"position":[[221,6]]},"414":{"position":[[869,6]]},"424":{"position":[[271,6]]},"427":{"position":[[101,6]]},"448":{"position":[[908,6]]},"454":{"position":[[461,6]]},"460":{"position":[[275,6]]},"548":{"position":[[454,6]]},"554":{"position":[[436,6]]},"556":{"position":[[2118,6]]},"560":{"position":[[165,6],[302,6]]},"573":{"position":[[768,6]]},"602":{"position":[[525,6]]},"611":{"position":[[1108,6]]},"631":{"position":[[275,6],[414,6]]},"654":{"position":[[515,6]]},"670":{"position":[[571,6]]},"685":{"position":[[395,6]]},"700":{"position":[[223,6]]},"706":{"position":[[223,6]]},"720":{"position":[[727,6]]},"741":{"position":[[338,6]]},"747":{"position":[[733,6]]},"805":{"position":[[320,6]]},"820":{"position":[[320,6]]},"836":{"position":[[320,6]]},"855":{"position":[[104,6]]},"859":{"position":[[580,6],[674,6]]},"885":{"position":[[524,6]]},"891":{"position":[[292,6]]},"959":{"position":[[279,6]]},"982":{"position":[[281,6]]},"1008":{"position":[[831,6]]},"1015":{"position":[[337,6]]},"1020":{"position":[[1602,6]]},"1028":{"position":[[146,6],[284,6]]},"1070":{"position":[[722,6]]},"1085":{"position":[[1231,6]]},"1113":{"position":[[275,6]]},"1203":{"position":[[110,6]]},"1243":{"position":[[1003,6]]},"1292":{"position":[[1517,6]]},"1306":{"position":[[1517,6]]},"1329":{"position":[[1517,6]]},"1356":{"position":[[774,6]]},"1370":{"position":[[519,6]]},"1379":{"position":[[1652,6]]},"1403":{"position":[[1652,6]]},"1414":{"position":[[1652,6]]},"1439":{"position":[[1642,6]]},"1440":{"position":[[1208,6]]},"1442":{"position":[[393,6],[472,6]]},"1443":{"position":[[585,6]]},"1447":{"position":[[658,6]]},"1448":{"position":[[929,6]]},"1459":{"position":[[194,6]]},"1471":{"position":[[1036,6]]},"1475":{"position":[[495,6]]},"1479":{"position":[[288,6],[716,6]]},"1480":{"position":[[906,6]]},"1481":{"position":[[47,6],[72,6]]}},"keywords":{}}],["before<br/>proceed",{"_index":6446,"title":{},"content":{"1434":{"position":[[923,27]]}},"keywords":{}}],["begin",{"_index":136,"title":{},"content":{"3":{"position":[[822,9]]},"13":{"position":[[1005,10]]},"54":{"position":[[117,5]]},"83":{"position":[[1480,5]]},"97":{"position":[[837,5]]},"98":{"position":[[943,6]]},"105":{"position":[[1277,6]]},"119":{"position":[[205,5]]},"135":{"position":[[850,5]]},"144":{"position":[[25,5]]},"169":{"position":[[68,5],[1275,5]]},"192":{"position":[[693,10]]},"193":{"position":[[387,5]]},"215":{"position":[[210,6]]},"217":{"position":[[683,5]]},"221":{"position":[[1103,5],[1296,5]]},"222":{"position":[[146,5],[348,5],[541,5]]},"223":{"position":[[112,5],[314,5],[507,5]]},"224":{"position":[[165,5],[367,5],[560,5]]},"230":{"position":[[278,5]]},"240":{"position":[[3282,6]]},"250":{"position":[[1526,9]]},"254":{"position":[[3172,9]]},"290":{"position":[[508,5]]},"301":{"position":[[448,5]]},"307":{"position":[[3046,10],[3119,10]]},"308":{"position":[[1242,10]]},"314":{"position":[[2747,9]]},"339":{"position":[[21,5]]},"371":{"position":[[399,5]]},"379":{"position":[[565,9]]},"448":{"position":[[858,5]]},"485":{"position":[[352,6]]},"496":{"position":[[472,5]]},"517":{"position":[[3804,5]]},"546":{"position":[[321,5]]},"548":{"position":[[465,6]]},"573":{"position":[[1133,9]]},"594":{"position":[[309,5]]},"595":{"position":[[1311,10]]},"657":{"position":[[352,6]]},"673":{"position":[[352,6]]},"688":{"position":[[352,6]]},"842":{"position":[[1833,10]]},"864":{"position":[[1551,5]]},"868":{"position":[[367,5]]},"880":{"position":[[368,5]]},"1077":{"position":[[45,9],[588,5]]},"1137":{"position":[[24,5]]},"1139":{"position":[[286,5]]},"1140":{"position":[[1544,5]]},"1176":{"position":[[557,9]]},"1178":{"position":[[24,5]]},"1185":{"position":[[357,9]]},"1187":{"position":[[24,5]]},"1194":{"position":[[567,9]]},"1195":{"position":[[24,5]]},"1203":{"position":[[728,9]]},"1205":{"position":[[24,5]]},"1226":{"position":[[368,9]]},"1229":{"position":[[24,5]]},"1243":{"position":[[145,9]]},"1246":{"position":[[24,5]]},"1247":{"position":[[945,9]]},"1284":{"position":[[24,5]]},"1292":{"position":[[1547,5]]},"1298":{"position":[[112,5],[314,5],[507,5]]},"1299":{"position":[[24,5]]},"1306":{"position":[[1547,5]]},"1312":{"position":[[24,5]]},"1316":{"position":[[1544,5]]},"1322":{"position":[[146,5],[348,5],[541,5]]},"1323":{"position":[[24,5]]},"1329":{"position":[[1547,5]]},"1335":{"position":[[146,5],[348,5],[541,5]]},"1336":{"position":[[24,5]]},"1340":{"position":[[1544,5]]},"1346":{"position":[[112,5],[314,5],[507,5]]},"1347":{"position":[[24,5]]},"1351":{"position":[[1544,5]]},"1354":{"position":[[392,9]]},"1355":{"position":[[24,5]]},"1370":{"position":[[529,5]]},"1375":{"position":[[24,5]]},"1379":{"position":[[1708,5]]},"1382":{"position":[[611,9]]},"1384":{"position":[[495,5]]},"1385":{"position":[[24,5]]},"1387":{"position":[[852,5]]},"1399":{"position":[[24,5]]},"1403":{"position":[[1708,5]]},"1410":{"position":[[24,5]]},"1414":{"position":[[1708,5]]},"1419":{"position":[[24,5]]},"1426":{"position":[[24,5]]},"1431":{"position":[[1567,5]]},"1434":{"position":[[2136,6]]},"1443":{"position":[[493,5],[686,5]]},"1444":{"position":[[647,6],[976,6]]},"1448":{"position":[[597,5]]},"1452":{"position":[[784,5]]},"1453":{"position":[[303,6]]},"1474":{"position":[[18,6],[725,9],[858,9]]}},"keywords":{}}],["begin/committransact",{"_index":6471,"title":{},"content":{"1437":{"position":[[327,24]]}},"keywords":{}}],["begin_fram",{"_index":5589,"title":{},"content":{"1140":{"position":[[1594,11]]},"1316":{"position":[[1594,11]]},"1340":{"position":[[1594,11]]},"1351":{"position":[[1594,11]]},"1431":{"position":[[1617,11]]}},"keywords":{}}],["begin_partit",{"_index":5591,"title":{},"content":{"1140":{"position":[[1635,15]]},"1316":{"position":[[1635,15]]},"1340":{"position":[[1635,15]]},"1351":{"position":[[1635,15]]},"1431":{"position":[[1658,15]]}},"keywords":{}}],["behalf",{"_index":514,"title":{},"content":{"19":{"position":[[175,7]]},"64":{"position":[[277,7]]},"82":{"position":[[454,7],[1148,7],[2982,7]]},"108":{"position":[[365,7]]},"122":{"position":[[739,7]]},"157":{"position":[[102,7]]},"164":{"position":[[438,6]]},"239":{"position":[[1297,6]]},"338":{"position":[[330,6]]}},"keywords":{}}],["behav",{"_index":6717,"title":{},"content":{"1477":{"position":[[667,6]]}},"keywords":{}}],["behavior",{"_index":748,"title":{"74":{"position":[[4,10]]},"88":{"position":[[6,9]]}},"content":{"42":{"position":[[719,10]]},"43":{"position":[[101,9],[150,8]]},"55":{"position":[[267,8]]},"62":{"position":[[366,8]]},"122":{"position":[[1956,8]]},"132":{"position":[[334,8]]},"159":{"position":[[530,9]]},"163":{"position":[[362,8],[444,10]]},"164":{"position":[[11,9],[2250,10]]},"279":{"position":[[797,8]]},"306":{"position":[[692,8]]},"331":{"position":[[748,9]]},"332":{"position":[[785,8]]},"429":{"position":[[516,8]]},"479":{"position":[[755,8]]},"483":{"position":[[233,8]]},"821":{"position":[[910,9]]},"907":{"position":[[1336,8]]},"923":{"position":[[1336,8]]},"934":{"position":[[1336,8]]},"950":{"position":[[1336,8]]},"968":{"position":[[1336,8]]},"1156":{"position":[[677,8]]},"1285":{"position":[[909,8]]},"1300":{"position":[[909,8]]},"1313":{"position":[[763,8]]},"1324":{"position":[[909,8]]},"1337":{"position":[[763,8]]},"1348":{"position":[[763,8]]},"1437":{"position":[[1236,9]]},"1438":{"position":[[677,9]]},"1440":{"position":[[1473,9],[1639,8]]},"1463":{"position":[[235,9]]},"1465":{"position":[[369,10]]}},"keywords":{}}],["behind",{"_index":2179,"title":{},"content":{"196":{"position":[[689,6]]},"210":{"position":[[500,6]]},"233":{"position":[[874,6]]}},"keywords":{}}],["belong",{"_index":2967,"title":{},"content":{"295":{"position":[[783,6]]},"997":{"position":[[197,6]]},"1277":{"position":[[885,6]]}},"keywords":{}}],["below",{"_index":875,"title":{},"content":{"58":{"position":[[213,5]]},"60":{"position":[[194,6]]},"61":{"position":[[268,6]]},"66":{"position":[[840,6]]},"80":{"position":[[197,6],[380,5]]},"82":{"position":[[1255,5]]},"83":{"position":[[854,6]]},"137":{"position":[[625,6]]},"141":{"position":[[225,6]]},"169":{"position":[[452,5]]},"172":{"position":[[180,6]]},"236":{"position":[[268,5],[1856,5]]},"238":{"position":[[852,6]]},"250":{"position":[[106,5]]},"253":{"position":[[469,5]]},"307":{"position":[[622,6]]},"313":{"position":[[469,5]]},"325":{"position":[[849,5]]},"348":{"position":[[18,5]]},"350":{"position":[[198,5]]},"358":{"position":[[198,5]]},"369":{"position":[[198,5]]},"370":{"position":[[199,5]]},"376":{"position":[[198,5]]},"386":{"position":[[198,5]]},"387":{"position":[[40,5]]},"391":{"position":[[198,5]]},"396":{"position":[[198,5]]},"401":{"position":[[244,5]]},"407":{"position":[[198,5]]},"413":{"position":[[424,5]]},"414":{"position":[[161,6]]},"415":{"position":[[421,6]]},"416":{"position":[[198,5]]},"417":{"position":[[1441,6]]},"423":{"position":[[198,5]]},"431":{"position":[[198,5]]},"437":{"position":[[198,5]]},"447":{"position":[[198,5]]},"448":{"position":[[40,5]]},"453":{"position":[[198,5]]},"459":{"position":[[198,5]]},"465":{"position":[[198,5]]},"472":{"position":[[198,5]]},"476":{"position":[[18,5]]},"481":{"position":[[198,5]]},"495":{"position":[[198,5]]},"501":{"position":[[154,5]]},"502":{"position":[[1089,6]]},"508":{"position":[[198,5]]},"515":{"position":[[346,5]]},"516":{"position":[[198,5]]},"525":{"position":[[198,5]]},"533":{"position":[[198,5]]},"534":{"position":[[40,5]]},"539":{"position":[[198,5]]},"544":{"position":[[198,5]]},"555":{"position":[[195,5]]},"556":{"position":[[40,5]]},"563":{"position":[[262,5]]},"571":{"position":[[303,5]]},"572":{"position":[[198,5]]},"574":{"position":[[447,6]]},"583":{"position":[[188,5]]},"592":{"position":[[195,5]]},"593":{"position":[[469,5]]},"594":{"position":[[886,5]]},"609":{"position":[[143,5]]},"610":{"position":[[198,5]]},"611":{"position":[[40,5]]},"617":{"position":[[245,5]]},"618":{"position":[[198,5]]},"624":{"position":[[198,5]]},"630":{"position":[[198,5]]},"636":{"position":[[198,5]]},"646":{"position":[[198,5]]},"653":{"position":[[198,5]]},"669":{"position":[[198,5]]},"684":{"position":[[198,5]]},"685":{"position":[[40,5]]},"686":{"position":[[12,5]]},"690":{"position":[[249,5]]},"699":{"position":[[198,5]]},"705":{"position":[[198,5]]},"711":{"position":[[198,5]]},"719":{"position":[[193,5]]},"720":{"position":[[40,5]]},"727":{"position":[[198,5]]},"734":{"position":[[198,5]]},"740":{"position":[[198,5]]},"746":{"position":[[198,5]]},"750":{"position":[[288,5]]},"752":{"position":[[1035,5]]},"754":{"position":[[1228,7]]},"756":{"position":[[198,5]]},"766":{"position":[[288,5]]},"769":{"position":[[198,5]]},"781":{"position":[[195,5]]},"789":{"position":[[322,5]]},"791":{"position":[[1069,5]]},"794":{"position":[[1432,7]]},"796":{"position":[[199,5]]},"807":{"position":[[322,5]]},"809":{"position":[[1432,7]]},"811":{"position":[[198,5]]},"823":{"position":[[322,5]]},"825":{"position":[[1268,7]]},"827":{"position":[[198,5]]},"841":{"position":[[198,5]]},"850":{"position":[[198,5]]},"858":{"position":[[198,5]]},"859":{"position":[[40,5]]},"863":{"position":[[18,5]]},"866":{"position":[[198,5]]},"871":{"position":[[122,5]]},"875":{"position":[[18,5]]},"878":{"position":[[198,5]]},"884":{"position":[[198,5]]},"890":{"position":[[199,5]]},"895":{"position":[[18,5]]},"896":{"position":[[198,5]]},"906":{"position":[[198,5]]},"921":{"position":[[198,5]]},"922":{"position":[[2300,6]]},"933":{"position":[[198,5]]},"947":{"position":[[671,6]]},"949":{"position":[[198,5]]},"958":{"position":[[198,5]]},"967":{"position":[[198,5]]},"981":{"position":[[198,5]]},"990":{"position":[[198,5]]},"991":{"position":[[40,5]]},"996":{"position":[[198,5]]},"1005":{"position":[[195,5]]},"1008":{"position":[[1812,5]]},"1009":{"position":[[40,5]]},"1014":{"position":[[198,5]]},"1021":{"position":[[198,5],[1600,6]]},"1027":{"position":[[198,5]]},"1031":{"position":[[826,5]]},"1033":{"position":[[202,5]]},"1042":{"position":[[851,5]]},"1043":{"position":[[1515,5]]},"1044":{"position":[[198,5]]},"1051":{"position":[[1777,5]]},"1052":{"position":[[198,5]]},"1059":{"position":[[1570,5]]},"1060":{"position":[[198,5]]},"1069":{"position":[[198,5]]},"1070":{"position":[[40,5]]},"1075":{"position":[[198,5]]},"1084":{"position":[[198,5]]},"1085":{"position":[[40,5]]},"1090":{"position":[[18,5]]},"1093":{"position":[[198,5]]},"1100":{"position":[[198,5]]},"1106":{"position":[[199,5]]},"1112":{"position":[[198,5]]},"1124":{"position":[[198,5]]},"1129":{"position":[[199,6]]},"1132":{"position":[[199,5]]},"1137":{"position":[[81,5]]},"1138":{"position":[[199,5]]},"1140":{"position":[[286,6]]},"1143":{"position":[[9,5]]},"1150":{"position":[[9,5]]},"1161":{"position":[[9,5]]},"1169":{"position":[[9,5]]},"1178":{"position":[[81,5]]},"1186":{"position":[[558,7]]},"1187":{"position":[[81,5]]},"1192":{"position":[[244,6]]},"1195":{"position":[[81,5]]},"1200":{"position":[[769,6]]},"1203":{"position":[[610,6]]},"1205":{"position":[[81,5]]},"1212":{"position":[[9,5]]},"1219":{"position":[[9,5]]},"1229":{"position":[[81,5]]},"1245":{"position":[[197,5]]},"1246":{"position":[[81,5]]},"1252":{"position":[[195,5]]},"1259":{"position":[[9,5]]},"1265":{"position":[[105,5]]},"1284":{"position":[[81,5]]},"1289":{"position":[[748,5]]},"1292":{"position":[[215,6]]},"1299":{"position":[[81,5]]},"1306":{"position":[[215,6]]},"1312":{"position":[[81,5]]},"1316":{"position":[[286,6]]},"1323":{"position":[[81,5]]},"1329":{"position":[[215,6]]},"1334":{"position":[[250,5]]},"1336":{"position":[[81,5]]},"1340":{"position":[[286,6]]},"1347":{"position":[[81,5]]},"1351":{"position":[[286,6]]},"1355":{"position":[[81,5]]},"1370":{"position":[[278,6]]},"1375":{"position":[[81,5]]},"1379":{"position":[[223,6]]},"1382":{"position":[[326,5]]},"1385":{"position":[[81,5]]},"1388":{"position":[[608,6]]},"1394":{"position":[[242,6]]},"1399":{"position":[[81,5]]},"1403":{"position":[[223,6]]},"1410":{"position":[[81,5]]},"1414":{"position":[[223,6]]},"1419":{"position":[[81,5]]},"1423":{"position":[[245,6]]},"1426":{"position":[[81,5]]},"1431":{"position":[[309,6]]},"1452":{"position":[[497,6]]},"1461":{"position":[[1030,6]]}},"keywords":{}}],["benchmark",{"_index":2206,"title":{},"content":{"198":{"position":[[1029,10]]}},"keywords":{}}],["bend",{"_index":6492,"title":{},"content":{"1439":{"position":[[1286,7]]}},"keywords":{}}],["benefit",{"_index":543,"title":{},"content":{"20":{"position":[[755,7]]},"281":{"position":[[2849,8]]}},"keywords":{}}],["best",{"_index":1964,"title":{},"content":{"165":{"position":[[2269,4]]},"175":{"position":[[307,4]]},"198":{"position":[[16,4]]},"309":{"position":[[1219,4]]},"322":{"position":[[609,4]]},"326":{"position":[[1187,4]]},"480":{"position":[[562,4]]},"821":{"position":[[1279,4]]},"1149":{"position":[[442,4]]},"1156":{"position":[[5,4]]},"1461":{"position":[[704,4]]}},"keywords":{}}],["beta",{"_index":1031,"title":{},"content":{"68":{"position":[[1242,4],[1256,5]]},"175":{"position":[[138,4]]},"427":{"position":[[340,4]]},"429":{"position":[[1304,4]]},"1471":{"position":[[369,4]]}},"keywords":{}}],["beta.click",{"_index":5079,"title":{},"content":{"942":{"position":[[515,10]]}},"keywords":{}}],["better",{"_index":1580,"title":{},"content":{"110":{"position":[[1370,6]]},"219":{"position":[[117,6]]},"864":{"position":[[77,6]]},"876":{"position":[[77,6]]},"1391":{"position":[[474,6]]},"1462":{"position":[[563,6]]}},"keywords":{}}],["between",{"_index":97,"title":{},"content":{"2":{"position":[[734,7]]},"8":{"position":[[676,7]]},"11":{"position":[[688,7],[1945,7]]},"32":{"position":[[142,7]]},"41":{"position":[[516,8]]},"56":{"position":[[2170,7]]},"61":{"position":[[154,7]]},"62":{"position":[[122,7]]},"70":{"position":[[341,8]]},"81":{"position":[[1534,7]]},"84":{"position":[[876,7]]},"189":{"position":[[1684,7]]},"192":{"position":[[1858,7]]},"204":{"position":[[532,7]]},"208":{"position":[[619,7],[770,7]]},"211":{"position":[[519,7]]},"216":{"position":[[453,7]]},"238":{"position":[[633,7]]},"240":{"position":[[3616,7]]},"266":{"position":[[330,8]]},"305":{"position":[[88,7]]},"319":{"position":[[849,7]]},"332":{"position":[[494,7]]},"379":{"position":[[173,7]]},"480":{"position":[[1167,7]]},"517":{"position":[[1555,7],[2720,7]]},"534":{"position":[[1075,7]]},"540":{"position":[[432,7]]},"646":{"position":[[859,7]]},"792":{"position":[[205,7]]},"793":{"position":[[19,7]]},"808":{"position":[[19,7]]},"824":{"position":[[19,7]]},"842":{"position":[[2620,7]]},"879":{"position":[[1424,7],[1751,7]]},"904":{"position":[[19,7]]},"918":{"position":[[205,7]]},"919":{"position":[[19,7]]},"931":{"position":[[19,7]]},"974":{"position":[[67,7]]},"1006":{"position":[[233,7]]},"1036":{"position":[[363,7]]},"1043":{"position":[[19,7]]},"1051":{"position":[[19,7]]},"1059":{"position":[[19,7]]},"1085":{"position":[[837,7]]},"1140":{"position":[[1693,7]]},"1209":{"position":[[283,7]]},"1292":{"position":[[1597,7]]},"1303":{"position":[[19,7]]},"1306":{"position":[[1597,7]]},"1316":{"position":[[1693,7]]},"1329":{"position":[[1597,7]]},"1340":{"position":[[1693,7]]},"1351":{"position":[[1693,7]]},"1370":{"position":[[539,7]]},"1373":{"position":[[19,7]]},"1374":{"position":[[19,7]]},"1379":{"position":[[1772,7]]},"1394":{"position":[[586,7]]},"1397":{"position":[[19,7]]},"1398":{"position":[[19,7]]},"1403":{"position":[[1772,7]]},"1409":{"position":[[19,7]]},"1414":{"position":[[1772,7]]},"1431":{"position":[[1716,7]]},"1452":{"position":[[3462,7]]},"1461":{"position":[[649,7]]}},"keywords":{}}],["beyond",{"_index":1854,"title":{},"content":{"156":{"position":[[179,6]]},"574":{"position":[[22,6]]},"585":{"position":[[22,6]]}},"keywords":{}}],["big",{"_index":1979,"title":{},"content":{"169":{"position":[[342,4]]},"747":{"position":[[1297,3]]}},"keywords":{}}],["bigger",{"_index":737,"title":{},"content":{"41":{"position":[[678,6]]},"573":{"position":[[1160,6]]}},"keywords":{}}],["biggest",{"_index":3172,"title":{},"content":{"325":{"position":[[245,7]]}},"keywords":{}}],["bigint",{"_index":5595,"title":{},"content":{"1140":{"position":[[1749,6]]},"1209":{"position":[[306,6]]},"1292":{"position":[[1631,6]]},"1306":{"position":[[1631,6]]},"1316":{"position":[[1749,6]]},"1329":{"position":[[1631,6]]},"1340":{"position":[[1749,6]]},"1351":{"position":[[1749,6]]},"1431":{"position":[[1772,6]]}},"keywords":{}}],["bigqueri",{"_index":549,"title":{"326":{"position":[[11,9]]},"474":{"position":[[0,8]]},"479":{"position":[[11,8]]},"1175":{"position":[[7,8]]}},"content":{"20":{"position":[[911,9]]},"326":{"position":[[829,9]]},"363":{"position":[[853,8],[908,8]]},"475":{"position":[[96,8]]},"476":{"position":[[38,8]]},"477":{"position":[[19,9],[202,8]]},"481":{"position":[[250,8]]},"482":{"position":[[140,8],[194,8]]},"1120":{"position":[[1037,8]]},"1176":{"position":[[98,8],[315,8]]},"1178":{"position":[[113,8],[226,8],[247,8],[483,9],[501,8]]},"1179":{"position":[[138,8],[361,8],[804,9],[955,8],[1056,8]]},"1180":{"position":[[87,8]]},"1182":{"position":[[184,8],[497,8]]}},"keywords":{}}],["bigquery:dev",{"_index":5424,"title":{},"content":{"1120":{"position":[[1097,12]]},"1180":{"position":[[259,12]]}},"keywords":{}}],["bike",{"_index":1586,"title":{"190":{"position":[[13,4]]}},"content":{"110":{"position":[[1524,4]]},"189":{"position":[[59,4],[84,5],[95,4],[355,4],[398,4],[425,4],[455,6],[492,4],[784,4]]},"190":{"position":[[1093,4],[2052,4]]},"193":{"position":[[59,4],[162,4]]}},"keywords":{}}],["bikes"",{"_index":1588,"title":{},"content":{"110":{"position":[[1540,11]]}},"keywords":{}}],["bill",{"_index":1754,"title":{"1456":{"position":[[0,7]]}},"content":{"135":{"position":[[608,7]]},"595":{"position":[[1502,4]]},"1179":{"position":[[730,7],[794,6],[938,8]]},"1456":{"position":[[1,7]]}},"keywords":{}}],["billabl",{"_index":4349,"title":{},"content":{"628":{"position":[[322,8]]}},"keywords":{}}],["billing.optim",{"_index":280,"title":{},"content":{"8":{"position":[[837,16]]}},"keywords":{}}],["billing_project_id",{"_index":5794,"title":{},"content":{"1179":{"position":[[710,19]]}},"keywords":{}}],["binari",{"_index":572,"title":{},"content":{"21":{"position":[[562,6]]},"58":{"position":[[9,8]]},"117":{"position":[[261,6]]},"169":{"position":[[242,7]]},"752":{"position":[[878,6]]},"767":{"position":[[2234,6]]},"791":{"position":[[883,6]]},"792":{"position":[[2226,6]]},"824":{"position":[[2348,6]]},"1140":{"position":[[1791,6]]},"1164":{"position":[[333,6]]},"1292":{"position":[[1668,6]]},"1306":{"position":[[1668,6]]},"1316":{"position":[[1791,6]]},"1329":{"position":[[1668,6]]},"1340":{"position":[[1791,6]]},"1351":{"position":[[1791,6]]},"1379":{"position":[[1837,6]]},"1384":{"position":[[1059,6]]},"1403":{"position":[[1837,6]]},"1414":{"position":[[1837,6]]},"1431":{"position":[[1814,6]]}},"keywords":{}}],["bind",{"_index":399,"title":{"45":{"position":[[14,9]]},"126":{"position":[[63,9]]},"565":{"position":[[0,9]]},"1035":{"position":[[0,7]]},"1240":{"position":[[0,9]]},"1269":{"position":[[0,9]]}},"content":{"13":{"position":[[845,8],[1843,8],[1906,8]]},"45":{"position":[[444,8],[506,9]]},"54":{"position":[[377,8],[642,9],[720,9]]},"55":{"position":[[417,9],[507,9]]},"56":{"position":[[285,8],[486,8],[631,8],[1331,8],[1415,4],[1489,9]]},"81":{"position":[[1439,9],[1526,7],[1900,4],[2732,9]]},"83":{"position":[[2362,9]]},"99":{"position":[[191,4]]},"105":{"position":[[18,5]]},"119":{"position":[[479,9]]},"120":{"position":[[690,8],[883,8],[917,9],[962,8],[2246,8],[2266,8],[2392,7],[2490,7],[2532,8],[2635,8],[2687,8],[2725,8]]},"121":{"position":[[1161,9]]},"122":{"position":[[1167,9]]},"123":{"position":[[542,9]]},"126":{"position":[[296,8],[372,8],[400,8],[529,8],[591,8]]},"208":{"position":[[1088,8]]},"217":{"position":[[1618,8]]},"228":{"position":[[266,7]]},"230":{"position":[[864,7]]},"277":{"position":[[1228,9]]},"307":{"position":[[390,8],[1160,9],[1641,9],[2010,9],[2509,9]]},"308":{"position":[[244,8],[662,7],[880,8],[1205,7]]},"309":{"position":[[2460,9],[3067,9],[3248,7]]},"344":{"position":[[298,9]]},"351":{"position":[[298,9]]},"359":{"position":[[275,9]]},"360":{"position":[[164,9]]},"370":{"position":[[1983,9]]},"371":{"position":[[1281,9],[1485,8]]},"377":{"position":[[1663,9],[1754,8]]},"378":{"position":[[310,9]]},"381":{"position":[[616,8]]},"387":{"position":[[1312,9]]},"388":{"position":[[419,9]]},"392":{"position":[[662,9]]},"393":{"position":[[315,9],[468,8]]},"397":{"position":[[804,9]]},"398":{"position":[[316,9],[459,8]]},"402":{"position":[[628,9]]},"403":{"position":[[394,9]]},"408":{"position":[[505,9]]},"417":{"position":[[2198,9]]},"418":{"position":[[376,9],[526,8]]},"419":{"position":[[1209,7]]},"421":{"position":[[215,8]]},"424":{"position":[[329,9]]},"425":{"position":[[196,9]]},"432":{"position":[[1172,9]]},"433":{"position":[[324,9],[720,9],[894,8]]},"438":{"position":[[1883,9]]},"439":{"position":[[603,9]]},"440":{"position":[[1225,7]]},"443":{"position":[[574,8]]},"448":{"position":[[1199,9]]},"449":{"position":[[400,9]]},"451":{"position":[[224,8]]},"454":{"position":[[518,9]]},"455":{"position":[[243,9]]},"457":{"position":[[228,8]]},"460":{"position":[[535,9]]},"461":{"position":[[244,9]]},"463":{"position":[[334,8]]},"466":{"position":[[246,9]]},"467":{"position":[[179,9]]},"470":{"position":[[97,8]]},"473":{"position":[[282,9]]},"479":{"position":[[592,8],[615,7],[865,7]]},"480":{"position":[[1497,8]]},"482":{"position":[[402,8],[445,8],[478,9],[586,8],[877,8]]},"483":{"position":[[34,7],[406,7],[823,9]]},"488":{"position":[[505,8],[685,8],[783,7]]},"492":{"position":[[431,8],[517,8]]},"496":{"position":[[511,9]]},"497":{"position":[[198,9],[349,8]]},"502":{"position":[[1531,9]]},"503":{"position":[[172,9]]},"506":{"position":[[491,8]]},"509":{"position":[[511,9]]},"510":{"position":[[171,9]]},"512":{"position":[[251,8]]},"517":{"position":[[3934,9]]},"518":{"position":[[453,9]]},"521":{"position":[[404,8]]},"527":{"position":[[329,9]]},"529":{"position":[[783,8]]},"534":{"position":[[1679,9]]},"535":{"position":[[343,9]]},"537":{"position":[[240,8]]},"540":{"position":[[296,9]]},"541":{"position":[[160,9]]},"545":{"position":[[1593,9]]},"546":{"position":[[1083,9],[1233,8]]},"547":{"position":[[1211,7]]},"550":{"position":[[488,8]]},"556":{"position":[[2176,9]]},"557":{"position":[[595,9]]},"566":{"position":[[158,9]]},"568":{"position":[[298,8]]},"573":{"position":[[1255,9]]},"575":{"position":[[302,9]]},"580":{"position":[[240,8]]},"584":{"position":[[1327,9]]},"586":{"position":[[324,9]]},"593":{"position":[[319,9]]},"594":{"position":[[859,9]]},"595":{"position":[[31,7]]},"601":{"position":[[390,9]]},"605":{"position":[[446,8]]},"611":{"position":[[1166,9]]},"612":{"position":[[347,9]]},"619":{"position":[[568,9]]},"620":{"position":[[241,9]]},"622":{"position":[[452,8]]},"625":{"position":[[140,9]]},"626":{"position":[[136,9]]},"628":{"position":[[516,8]]},"631":{"position":[[471,9]]},"632":{"position":[[205,9]]},"637":{"position":[[1129,9]]},"638":{"position":[[375,9]]},"642":{"position":[[39,8]]},"646":{"position":[[709,9]]},"647":{"position":[[188,9]]},"649":{"position":[[114,8]]},"654":{"position":[[791,9]]},"655":{"position":[[194,9],[334,8]]},"659":{"position":[[662,8],[842,8],[940,7]]},"661":{"position":[[231,4]]},"665":{"position":[[431,8],[517,8]]},"667":{"position":[[301,8]]},"670":{"position":[[629,9]]},"671":{"position":[[238,9]]},"676":{"position":[[505,8],[685,8],[783,7]]},"680":{"position":[[431,8]]},"682":{"position":[[272,8]]},"685":{"position":[[453,9]]},"686":{"position":[[233,9]]},"691":{"position":[[505,8],[685,8],[783,7]]},"695":{"position":[[431,8],[517,8]]},"697":{"position":[[641,8]]},"700":{"position":[[281,9]]},"701":{"position":[[167,9]]},"703":{"position":[[206,8]]},"706":{"position":[[281,9]]},"707":{"position":[[167,9]]},"709":{"position":[[894,8]]},"712":{"position":[[476,9]]},"713":{"position":[[176,9]]},"715":{"position":[[263,8]]},"720":{"position":[[785,9]]},"721":{"position":[[306,9]]},"735":{"position":[[368,9]]},"736":{"position":[[165,9]]},"738":{"position":[[818,8]]},"741":{"position":[[458,9]]},"742":{"position":[[235,9]]},"744":{"position":[[208,8]]},"747":{"position":[[1340,9]]},"748":{"position":[[395,9]]},"757":{"position":[[1890,9],[2298,7],[2500,8]]},"758":{"position":[[265,9],[469,8]]},"760":{"position":[[376,8]]},"761":{"position":[[545,7]]},"763":{"position":[[363,8]]},"770":{"position":[[1890,9],[2298,7],[2500,8]]},"771":{"position":[[265,9],[469,8]]},"773":{"position":[[376,8]]},"774":{"position":[[545,7]]},"776":{"position":[[363,8]]},"782":{"position":[[486,9]]},"783":{"position":[[192,9]]},"797":{"position":[[1890,9],[2305,7],[2508,8]]},"798":{"position":[[263,9],[467,8]]},"800":{"position":[[376,8]]},"801":{"position":[[551,7]]},"803":{"position":[[369,8]]},"812":{"position":[[1890,9],[2305,7],[2508,8]]},"813":{"position":[[263,9],[467,8]]},"815":{"position":[[376,8]]},"816":{"position":[[551,7]]},"818":{"position":[[369,8]]},"821":{"position":[[1184,8]]},"828":{"position":[[1890,9],[2305,7],[2508,8]]},"829":{"position":[[263,9],[467,8]]},"831":{"position":[[376,8]]},"832":{"position":[[551,7]]},"834":{"position":[[369,8]]},"842":{"position":[[1863,9],[1960,7],[3125,7]]},"843":{"position":[[473,9]]},"851":{"position":[[561,9]]},"852":{"position":[[302,9]]},"854":{"position":[[157,8]]},"859":{"position":[[708,9]]},"860":{"position":[[257,9]]},"867":{"position":[[2087,9]]},"868":{"position":[[443,9]]},"879":{"position":[[1510,9]]},"880":{"position":[[444,9]]},"882":{"position":[[168,8]]},"885":{"position":[[582,9]]},"886":{"position":[[258,9]]},"888":{"position":[[223,8]]},"891":{"position":[[317,9]]},"892":{"position":[[149,9]]},"897":{"position":[[235,9]]},"907":{"position":[[1390,9]]},"908":{"position":[[309,9],[513,8]]},"912":{"position":[[1322,8]]},"923":{"position":[[1390,9]]},"924":{"position":[[309,9],[513,8]]},"934":{"position":[[1390,9]]},"935":{"position":[[309,9],[513,8]]},"950":{"position":[[1390,9]]},"951":{"position":[[309,9],[513,8]]},"956":{"position":[[244,8]]},"959":{"position":[[337,9]]},"960":{"position":[[173,9]]},"968":{"position":[[1390,9]]},"969":{"position":[[309,9],[513,8]]},"979":{"position":[[318,8]]},"982":{"position":[[339,9]]},"983":{"position":[[167,9]]},"985":{"position":[[660,8]]},"991":{"position":[[762,9]]},"992":{"position":[[226,9]]},"994":{"position":[[176,8]]},"997":{"position":[[307,9]]},"998":{"position":[[206,9]]},"1000":{"position":[[974,8]]},"1009":{"position":[[1501,9]]},"1010":{"position":[[410,9]]},"1012":{"position":[[303,8]]},"1015":{"position":[[395,9]]},"1016":{"position":[[285,9]]},"1021":{"position":[[2009,9]]},"1022":{"position":[[401,9]]},"1023":{"position":[[1192,7]]},"1025":{"position":[[450,8]]},"1028":{"position":[[342,9]]},"1029":{"position":[[175,9]]},"1037":{"position":[[237,9]]},"1045":{"position":[[1009,9]]},"1046":{"position":[[250,9],[447,8]]},"1053":{"position":[[1009,9]]},"1054":{"position":[[250,9],[447,8]]},"1061":{"position":[[1009,9]]},"1062":{"position":[[250,9],[447,8]]},"1065":{"position":[[175,8]]},"1070":{"position":[[965,9]]},"1071":{"position":[[305,9]]},"1073":{"position":[[427,8]]},"1076":{"position":[[748,9]]},"1078":{"position":[[192,9]]},"1080":{"position":[[884,8]]},"1085":{"position":[[1339,9]]},"1086":{"position":[[360,9]]},"1094":{"position":[[404,9]]},"1099":{"position":[[548,8]]},"1101":{"position":[[238,9]]},"1102":{"position":[[150,9]]},"1104":{"position":[[246,8]]},"1107":{"position":[[376,9]]},"1108":{"position":[[239,9]]},"1110":{"position":[[566,8]]},"1113":{"position":[[438,9]]},"1114":{"position":[[225,9]]},"1125":{"position":[[484,9]]},"1126":{"position":[[277,9]]},"1128":{"position":[[483,8]]},"1133":{"position":[[1172,9]]},"1134":{"position":[[259,9]]},"1138":{"position":[[624,7],[1273,9]]},"1139":{"position":[[1168,9]]},"1144":{"position":[[1236,9]]},"1145":{"position":[[265,9]]},"1146":{"position":[[492,7],[570,7],[607,7]]},"1151":{"position":[[609,7],[1307,9]]},"1152":{"position":[[362,9]]},"1155":{"position":[[352,8]]},"1156":{"position":[[161,8]]},"1162":{"position":[[537,7],[740,9]]},"1163":{"position":[[299,9]]},"1170":{"position":[[1161,9]]},"1171":{"position":[[269,9]]},"1173":{"position":[[504,7],[582,7],[619,7]]},"1179":{"position":[[436,7],[971,9]]},"1180":{"position":[[272,9]]},"1182":{"position":[[569,7],[586,9]]},"1188":{"position":[[690,9]]},"1189":{"position":[[381,7],[441,9]]},"1191":{"position":[[573,7],[590,9]]},"1195":{"position":[[417,7],[499,8],[699,8]]},"1196":{"position":[[848,9]]},"1197":{"position":[[387,7],[447,9]]},"1199":{"position":[[93,8]]},"1200":{"position":[[336,7],[701,7]]},"1206":{"position":[[812,9]]},"1207":{"position":[[470,7],[530,9]]},"1213":{"position":[[913,9]]},"1214":{"position":[[205,9]]},"1215":{"position":[[492,7],[570,7],[607,7]]},"1220":{"position":[[838,9]]},"1221":{"position":[[209,9]]},"1223":{"position":[[504,7],[582,7],[619,7]]},"1230":{"position":[[582,9],[1103,7],[1159,7]]},"1231":{"position":[[236,9]]},"1232":{"position":[[167,7],[250,8],[309,7],[360,7],[429,7],[474,9]]},"1241":{"position":[[1,9]]},"1247":{"position":[[790,9],[822,7]]},"1248":{"position":[[414,7],[474,9]]},"1253":{"position":[[401,9]]},"1254":{"position":[[232,9]]},"1260":{"position":[[323,7],[855,9]]},"1261":{"position":[[304,9]]},"1262":{"position":[[573,7],[590,9]]},"1270":{"position":[[192,9]]},"1277":{"position":[[587,9],[983,9]]},"1278":{"position":[[266,9]]},"1286":{"position":[[2484,9]]},"1287":{"position":[[181,9]]},"1301":{"position":[[2320,9]]},"1302":{"position":[[181,9]]},"1313":{"position":[[434,7],[817,9]]},"1314":{"position":[[184,9]]},"1325":{"position":[[2484,9]]},"1326":{"position":[[181,9]]},"1337":{"position":[[434,7],[817,9]]},"1338":{"position":[[184,9]]},"1348":{"position":[[434,7],[817,9]]},"1349":{"position":[[184,9]]},"1356":{"position":[[395,9],[410,7]]},"1357":{"position":[[319,7],[379,9]]},"1362":{"position":[[454,9]]},"1363":{"position":[[233,9]]},"1367":{"position":[[1,9]]},"1368":{"position":[[120,9]]},"1376":{"position":[[399,9]]},"1377":{"position":[[185,9]]},"1384":{"position":[[54,9],[1236,8]]},"1386":{"position":[[407,7],[1093,9]]},"1387":{"position":[[420,7],[480,9],[1046,7],[1106,9]]},"1389":{"position":[[571,7],[588,9]]},"1392":{"position":[[167,9]]},"1400":{"position":[[399,9]]},"1401":{"position":[[185,9]]},"1411":{"position":[[399,9]]},"1412":{"position":[[185,9]]},"1420":{"position":[[640,9]]},"1421":{"position":[[407,7],[467,9]]},"1427":{"position":[[375,7],[544,9]]},"1428":{"position":[[225,9]]},"1429":{"position":[[188,7],[268,7],[464,8],[730,7],[770,9]]},"1443":{"position":[[1072,8]]},"1461":{"position":[[4133,7]]},"1472":{"position":[[754,9]]},"1480":{"position":[[623,9],[668,8]]}},"keywords":{}}],["bindingname.schema.yaml",{"_index":5162,"title":{},"content":{"1008":{"position":[[1531,24]]}},"keywords":{}}],["bing",{"_index":3322,"title":{"442":{"position":[[0,4]]}},"content":{"364":{"position":[[724,4],[779,4]]},"445":{"position":[[51,4]]},"446":{"position":[[28,4],[199,4]]},"447":{"position":[[250,4]]},"448":{"position":[[1273,4]]},"449":{"position":[[159,4]]}},"keywords":{}}],["binlog",{"_index":4618,"title":{"764":{"position":[[13,6]]},"777":{"position":[[13,6]]},"804":{"position":[[13,6]]},"819":{"position":[[13,6]]},"835":{"position":[[13,6]]}},"content":{"757":{"position":[[1707,6],[1769,6]]},"761":{"position":[[170,7],[459,7]]},"762":{"position":[[104,6],[578,7]]},"763":{"position":[[238,6]]},"764":{"position":[[123,6],[349,6]]},"770":{"position":[[1707,6],[1769,6]]},"774":{"position":[[170,7],[459,7]]},"775":{"position":[[104,6],[578,7]]},"776":{"position":[[238,6]]},"777":{"position":[[123,6],[349,6]]},"797":{"position":[[1707,6],[1769,6]]},"801":{"position":[[176,7],[465,7]]},"802":{"position":[[104,6],[578,7]]},"803":{"position":[[244,6]]},"804":{"position":[[121,6],[347,6]]},"812":{"position":[[1707,6],[1769,6]]},"816":{"position":[[176,7],[465,7]]},"817":{"position":[[104,6],[578,7]]},"818":{"position":[[244,6]]},"819":{"position":[[121,6],[347,6]]},"828":{"position":[[1707,6],[1769,6]]},"832":{"position":[[176,7],[465,7]]},"833":{"position":[[104,6],[578,7]]},"834":{"position":[[244,6]]},"835":{"position":[[121,6],[347,6]]},"1292":{"position":[[1705,6]]},"1306":{"position":[[1705,6]]},"1329":{"position":[[1705,6]]}},"keywords":{}}],["binlog_expire_logs_second",{"_index":4594,"title":{},"content":{"752":{"position":[[955,26]]},"753":{"position":[[660,26]]},"764":{"position":[[854,26]]},"777":{"position":[[854,26]]},"791":{"position":[[989,26]]},"793":{"position":[[620,26]]},"804":{"position":[[852,26]]},"808":{"position":[[647,26]]},"819":{"position":[[852,26]]},"835":{"position":[[852,26]]}},"keywords":{}}],["binlog_format",{"_index":4640,"title":{},"content":{"761":{"position":[[214,13],[321,13]]},"767":{"position":[[1070,14]]},"774":{"position":[[214,13],[321,13]]},"792":{"position":[[1375,14]]},"801":{"position":[[220,13],[327,13]]},"816":{"position":[[220,13],[327,13]]},"824":{"position":[[1136,14]]},"832":{"position":[[220,13],[327,13]]}},"keywords":{}}],["binlog_formatsystem",{"_index":4573,"title":{},"content":{"750":{"position":[[82,19]]},"766":{"position":[[82,19]]},"789":{"position":[[80,19]]},"807":{"position":[[80,19]]},"823":{"position":[[80,19]]}},"keywords":{}}],["bit",{"_index":1633,"title":{},"content":{"115":{"position":[[1303,3]]},"160":{"position":[[152,3]]},"207":{"position":[[57,3]]},"237":{"position":[[3407,3]]},"254":{"position":[[995,3]]},"296":{"position":[[980,3]]},"314":{"position":[[716,3]]},"757":{"position":[[1252,3]]},"770":{"position":[[1252,3]]},"797":{"position":[[1252,3]]},"812":{"position":[[1252,3]]},"828":{"position":[[1252,3]]},"867":{"position":[[1960,3]]},"1140":{"position":[[1843,3]]},"1292":{"position":[[1739,3]]},"1306":{"position":[[1739,3]]},"1316":{"position":[[1843,3]]},"1329":{"position":[[1739,3]]},"1340":{"position":[[1843,3]]},"1351":{"position":[[1843,3]]},"1379":{"position":[[1903,3]]},"1403":{"position":[[1903,3]]},"1414":{"position":[[1903,3]]},"1431":{"position":[[1866,3]]}},"keywords":{}}],["bit_length",{"_index":5602,"title":{},"content":{"1140":{"position":[[1889,10]]},"1316":{"position":[[1889,10]]},"1340":{"position":[[1889,10]]},"1351":{"position":[[1889,10]]},"1379":{"position":[[1941,10]]},"1403":{"position":[[1941,10]]},"1414":{"position":[[1941,10]]},"1431":{"position":[[1912,10]]}},"keywords":{}}],["bitbucket",{"_index":2044,"title":{},"content":{"179":{"position":[[115,9]]},"266":{"position":[[525,9]]}},"keywords":{}}],["black",{"_index":1789,"title":{},"content":{"138":{"position":[[1529,6]]},"141":{"position":[[1121,6],[1534,6]]},"142":{"position":[[1546,6]]}},"keywords":{}}],["blank",{"_index":2121,"title":{},"content":{"190":{"position":[[944,6],[1060,6]]},"397":{"position":[[1054,5]]},"593":{"position":[[226,5]]},"757":{"position":[[432,5]]},"770":{"position":[[432,5]]},"797":{"position":[[432,5]]},"812":{"position":[[432,5]]},"828":{"position":[[432,5]]},"859":{"position":[[629,6]]},"1009":{"position":[[953,6]]},"1034":{"position":[[630,6]]},"1144":{"position":[[681,6],[860,6],[972,6],[1144,6]]},"1170":{"position":[[681,6],[860,6],[988,6],[1144,6]]},"1196":{"position":[[804,5],[1179,5]]},"1213":{"position":[[536,6],[649,6],[821,6]]},"1220":{"position":[[536,6],[665,6],[821,6]]},"1267":{"position":[[472,5]]},"1285":{"position":[[494,5]]},"1300":{"position":[[494,5]]},"1324":{"position":[[494,5]]}},"keywords":{}}],["bloat",{"_index":5104,"title":{},"content":{"945":{"position":[[872,6]]}},"keywords":{}}],["blob",{"_index":1989,"title":{"173":{"position":[[6,4]]},"434":{"position":[[6,4]]}},"content":{"170":{"position":[[219,4]]},"173":{"position":[[156,4],[401,4],[485,4],[776,4],[904,4]]},"363":{"position":[[695,4],[753,4]]},"437":{"position":[[256,4]]},"438":{"position":[[628,4],[724,4],[852,4],[999,4],[1131,4],[1308,4],[1464,4],[1593,4]]},"439":{"position":[[101,4]]},"440":{"position":[[36,4]]},"1140":{"position":[[1929,4]]},"1292":{"position":[[1777,4]]},"1306":{"position":[[1777,4]]},"1316":{"position":[[1929,4]]},"1329":{"position":[[1777,4]]},"1340":{"position":[[1929,4]]},"1351":{"position":[[1929,4]]},"1379":{"position":[[1986,4]]},"1403":{"position":[[1986,4]]},"1414":{"position":[[1986,4]]},"1431":{"position":[[1952,4]]}},"keywords":{}}],["block",{"_index":1234,"title":{},"content":{"83":{"position":[[1368,5]]},"94":{"position":[[2380,6]]},"97":{"position":[[13,6],[386,6]]},"100":{"position":[[268,5]]},"277":{"position":[[61,6]]},"278":{"position":[[1609,6]]},"414":{"position":[[901,5]]},"860":{"position":[[287,6]]},"983":{"position":[[197,6]]},"1292":{"position":[[1821,5]]},"1306":{"position":[[1821,5]]},"1329":{"position":[[1821,5]]},"1461":{"position":[[3280,5]]}},"keywords":{}}],["blockscommentsdatabasespagesus",{"_index":4831,"title":{},"content":{"854":{"position":[[46,33]]}},"keywords":{}}],["blog",{"_index":2095,"title":{},"content":{"185":{"position":[[170,4]]},"299":{"position":[[459,4]]},"322":{"position":[[219,4],[1095,4]]},"390":{"position":[[628,4]]},"395":{"position":[[807,4]]},"415":{"position":[[339,4]]},"1122":{"position":[[433,4]]},"1142":{"position":[[284,4]]},"1149":{"position":[[731,4]]},"1160":{"position":[[447,4]]},"1168":{"position":[[284,4]]},"1258":{"position":[[325,4]]}},"keywords":{}}],["blue",{"_index":1662,"title":{},"content":{"121":{"position":[[1038,5]]},"206":{"position":[[831,4]]},"943":{"position":[[1008,4]]}},"keywords":{}}],["blunt"",{"_index":2351,"title":{},"content":{"210":{"position":[[2726,12]]}},"keywords":{}}],["board",{"_index":4985,"title":{},"content":{"899":{"position":[[150,5],[184,5]]},"1070":{"position":[[905,6]]}},"keywords":{}}],["boardspipelinesjobsprojectsproject",{"_index":4003,"title":{},"content":{"521":{"position":[[34,34]]}},"keywords":{}}],["bob",{"_index":1532,"title":{},"content":{"107":{"position":[[1063,3],[1122,3]]},"154":{"position":[[714,4]]},"590":{"position":[[382,4],[594,3]]}},"keywords":{}}],["bob'",{"_index":4246,"title":{},"content":{"590":{"position":[[1164,6]]}},"keywords":{}}],["bodi",{"_index":2885,"title":{},"content":{"281":{"position":[[1133,4]]},"296":{"position":[[5779,4]]},"315":{"position":[[1783,4]]}},"keywords":{}}],["bodies.learn",{"_index":971,"title":{},"content":{"64":{"position":[[863,12]]}},"keywords":{}}],["bool",{"_index":5765,"title":{},"content":{"1162":{"position":[[1084,4]]},"1209":{"position":[[328,4]]},"1292":{"position":[[1865,4]]},"1306":{"position":[[1865,4]]},"1329":{"position":[[1865,4]]}},"keywords":{}}],["boolean",{"_index":1679,"title":{},"content":{"122":{"position":[[1594,7]]},"308":{"position":[[542,9]]},"343":{"position":[[90,7]]},"377":{"position":[[335,7],[507,7],[614,7]]},"408":{"position":[[487,7]]},"417":{"position":[[539,7]]},"438":{"position":[[539,7]]},"496":{"position":[[391,7]]},"502":{"position":[[999,7]]},"517":{"position":[[2986,7],[3086,7]]},"545":{"position":[[539,7]]},"747":{"position":[[650,7]]},"757":{"position":[[1880,7]]},"770":{"position":[[1880,7]]},"797":{"position":[[1880,7]]},"812":{"position":[[1880,7]]},"828":{"position":[[1880,7]]},"842":{"position":[[3616,7],[3765,7]]},"846":{"position":[[291,10]]},"867":{"position":[[479,7]]},"885":{"position":[[334,7]]},"991":{"position":[[747,7]]},"1009":{"position":[[810,7]]},"1015":{"position":[[118,7]]},"1021":{"position":[[1510,7]]},"1125":{"position":[[724,7]]},"1138":{"position":[[1566,7]]},"1140":{"position":[[1967,7]]},"1151":{"position":[[1525,7]]},"1164":{"position":[[252,7],[260,7]]},"1172":{"position":[[353,7],[361,7]]},"1179":{"position":[[1316,7]]},"1188":{"position":[[936,7]]},"1196":{"position":[[1077,7]]},"1209":{"position":[[350,7]]},"1222":{"position":[[353,7],[361,7]]},"1230":{"position":[[141,8],[1060,7]]},"1247":{"position":[[312,8]]},"1253":{"position":[[595,7]]},"1260":{"position":[[1055,7]]},"1275":{"position":[[235,9]]},"1286":{"position":[[2771,7]]},"1292":{"position":[[1902,7]]},"1301":{"position":[[2607,7]]},"1306":{"position":[[1902,7]]},"1313":{"position":[[1110,7]]},"1316":{"position":[[1967,7]]},"1325":{"position":[[2771,7]]},"1329":{"position":[[1902,7]]},"1337":{"position":[[1110,7]]},"1340":{"position":[[1967,7]]},"1348":{"position":[[1110,7]]},"1351":{"position":[[1967,7]]},"1376":{"position":[[686,7]]},"1379":{"position":[[2035,7]]},"1386":{"position":[[1330,7]]},"1400":{"position":[[686,7]]},"1403":{"position":[[2035,7]]},"1411":{"position":[[686,7]]},"1414":{"position":[[2035,7]]},"1427":{"position":[[870,7]]},"1431":{"position":[[1990,7]]}},"keywords":{}}],["booleanintegerstr",{"_index":1064,"title":{},"content":{"72":{"position":[[69,20]]}},"keywords":{}}],["boolfield",{"_index":5948,"title":{},"content":{"1275":{"position":[[494,10]]}},"keywords":{}}],["bootstrap",{"_index":3672,"title":{},"content":{"432":{"position":[[79,9]]},"1118":{"position":[[369,9]]}},"keywords":{}}],["bootstrap.serv",{"_index":3652,"title":{},"content":{"428":{"position":[[23,17]]}},"keywords":{}}],["bootstrap_serv",{"_index":2647,"title":{},"content":{"250":{"position":[[262,20]]},"433":{"position":[[149,18],[560,18]]}},"keywords":{}}],["bootstrap_servers=conf['bootstrap_serv",{"_index":2660,"title":{},"content":{"250":{"position":[[586,44]]}},"keywords":{}}],["bot",{"_index":2762,"title":{},"content":{"253":{"position":[[3133,3],[3196,3]]},"254":{"position":[[859,4],[2916,4],[3577,4],[3941,3]]}},"keywords":{}}],["both",{"_index":792,"title":{"977":{"position":[[8,4]]}},"content":{"53":{"position":[[23,4]]},"64":{"position":[[47,4]]},"88":{"position":[[344,4]]},"99":{"position":[[247,4]]},"108":{"position":[[244,5]]},"125":{"position":[[1365,5]]},"129":{"position":[[249,4]]},"135":{"position":[[102,5]]},"154":{"position":[[338,4],[1883,4]]},"162":{"position":[[832,4],[1797,4]]},"164":{"position":[[1566,4]]},"166":{"position":[[617,4]]},"169":{"position":[[362,4]]},"180":{"position":[[888,4]]},"185":{"position":[[132,4]]},"198":{"position":[[596,4]]},"237":{"position":[[3191,4],[3523,4]]},"242":{"position":[[266,4]]},"295":{"position":[[607,4]]},"296":{"position":[[2064,4],[2084,4],[2230,4],[3358,4]]},"319":{"position":[[988,4]]},"320":{"position":[[580,4]]},"323":{"position":[[1701,4],[1727,4]]},"324":{"position":[[1206,4]]},"329":{"position":[[1017,4]]},"335":{"position":[[59,4]]},"373":{"position":[[409,4]]},"379":{"position":[[1073,4]]},"406":{"position":[[395,4]]},"413":{"position":[[378,4]]},"429":{"position":[[98,4],[314,4]]},"590":{"position":[[1013,4]]},"757":{"position":[[715,4]]},"770":{"position":[[715,4]]},"797":{"position":[[715,4]]},"812":{"position":[[715,4]]},"828":{"position":[[715,4]]},"977":{"position":[[32,4],[225,4],[751,4]]},"1008":{"position":[[31,4],[115,4],[297,4],[582,4]]},"1039":{"position":[[29,4]]},"1083":{"position":[[105,4]]},"1129":{"position":[[160,4]]},"1140":{"position":[[1998,4]]},"1158":{"position":[[25,4]]},"1182":{"position":[[25,4]]},"1191":{"position":[[25,4]]},"1199":{"position":[[25,4]]},"1209":{"position":[[372,4]]},"1256":{"position":[[25,4]]},"1262":{"position":[[25,4]]},"1268":{"position":[[612,4]]},"1285":{"position":[[727,4]]},"1290":{"position":[[25,4]]},"1292":{"position":[[1934,4]]},"1300":{"position":[[727,4]]},"1304":{"position":[[25,4]]},"1306":{"position":[[1934,4]]},"1315":{"position":[[25,4]]},"1316":{"position":[[1998,4]]},"1324":{"position":[[727,4]]},"1327":{"position":[[25,4]]},"1329":{"position":[[1934,4]]},"1339":{"position":[[25,4]]},"1340":{"position":[[1998,4]]},"1350":{"position":[[25,4]]},"1351":{"position":[[1998,4]]},"1378":{"position":[[25,4]]},"1379":{"position":[[2094,4]]},"1389":{"position":[[25,4]]},"1402":{"position":[[25,4]]},"1403":{"position":[[2094,4]]},"1413":{"position":[[25,4]]},"1414":{"position":[[2094,4]]},"1430":{"position":[[25,4]]},"1431":{"position":[[2021,4]]},"1435":{"position":[[167,4],[446,4]]},"1439":{"position":[[1403,4]]},"1448":{"position":[[845,4]]},"1459":{"position":[[1638,4]]},"1461":{"position":[[5139,4]]},"1467":{"position":[[138,4],[158,4],[177,4],[266,4],[302,4],[1730,4]]},"1475":{"position":[[1519,4]]},"1477":{"position":[[3072,4]]},"1479":{"position":[[529,4],[603,4],[650,4]]},"1480":{"position":[[16,4]]}},"keywords":{}}],["bother",{"_index":2895,"title":{},"content":{"281":{"position":[[2271,7]]}},"keywords":{}}],["bottleneck",{"_index":1262,"title":{},"content":{"84":{"position":[[438,10]]}},"keywords":{}}],["bottom",{"_index":3030,"title":{},"content":{"296":{"position":[[6991,6]]},"1479":{"position":[[129,6]]}},"keywords":{}}],["bounceemail",{"_index":4450,"title":{},"content":{"697":{"position":[[111,11]]}},"keywords":{}}],["bound",{"_index":685,"title":{},"content":{"36":{"position":[[282,5]]},"81":{"position":[[1740,5]]},"94":{"position":[[1551,5],[1901,5]]},"120":{"position":[[1103,5],[1453,5]]},"279":{"position":[[556,5]]},"343":{"position":[[371,6],[861,6]]},"922":{"position":[[1987,5]]},"1151":{"position":[[555,5]]},"1162":{"position":[[483,5]]},"1179":{"position":[[382,5]]},"1243":{"position":[[389,5],[623,7]]},"1260":{"position":[[269,5]]},"1386":{"position":[[353,5]]},"1480":{"position":[[809,5],[1159,5]]}},"keywords":{}}],["boundari",{"_index":2913,"title":{},"content":{"284":{"position":[[715,9]]},"1471":{"position":[[999,9]]}},"keywords":{}}],["box",{"_index":1850,"title":{},"content":{"154":{"position":[[1046,5]]},"190":{"position":[[428,4]]},"192":{"position":[[316,4]]},"217":{"position":[[1627,4]]},"218":{"position":[[1118,3]]},"1118":{"position":[[585,4]]},"1383":{"position":[[477,4]]}},"keywords":{}}],["braintre",{"_index":3324,"title":{"450":{"position":[[0,9]]}},"content":{"364":{"position":[[792,9]]},"451":{"position":[[56,9]]},"452":{"position":[[15,9]]},"453":{"position":[[250,9]]},"454":{"position":[[275,9],[337,9],[609,9]]}},"keywords":{}}],["braintree'",{"_index":3755,"title":{},"content":{"452":{"position":[[55,12]]}},"keywords":{}}],["braintree:dev",{"_index":3325,"title":{},"content":{"364":{"position":[[848,13]]},"455":{"position":[[90,13]]}},"keywords":{}}],["branch",{"_index":4021,"title":{},"content":{"527":{"position":[[359,8]]},"529":{"position":[[285,8]]},"534":{"position":[[248,6],[308,8],[362,8],[377,8],[430,6]]},"943":{"position":[[447,6]]}},"keywords":{}}],["branchescommitsissuesgroup",{"_index":4002,"title":{},"content":{"521":{"position":[[1,26]]}},"keywords":{}}],["brand",{"_index":3463,"title":{},"content":{"381":{"position":[[64,6],[90,6],[116,6],[141,6],[171,6]]},"1134":{"position":[[598,6]]}},"keywords":{}}],["braze",{"_index":3326,"title":{"462":{"position":[[0,5]]}},"content":{"364":{"position":[[862,5]]},"463":{"position":[[56,5]]},"464":{"position":[[38,5],[131,5],[235,5]]},"465":{"position":[[250,5]]},"466":{"position":[[69,5],[88,5],[204,5],[337,5]]}},"keywords":{}}],["braze:dev",{"_index":3327,"title":{},"content":{"364":{"position":[[914,9]]},"467":{"position":[[90,9]]}},"keywords":{}}],["breadth",{"_index":6322,"title":{},"content":{"1379":{"position":[[2137,7]]},"1403":{"position":[[2137,7]]},"1414":{"position":[[2137,7]]}},"keywords":{}}],["break",{"_index":351,"title":{"14":{"position":[[12,8]]}},"content":{"11":{"position":[[1925,5]]},"12":{"position":[[31,8],[350,8],[458,8]]},"14":{"position":[[98,8],[221,8]]},"55":{"position":[[626,8]]},"56":{"position":[[546,8]]},"239":{"position":[[1824,8],[2359,8],[2488,8]]},"307":{"position":[[3294,8]]},"309":{"position":[[3618,8]]},"332":{"position":[[81,5]]},"616":{"position":[[425,5]]},"867":{"position":[[1429,5]]},"1201":{"position":[[34,8]]},"1293":{"position":[[34,8]]},"1307":{"position":[[34,8]]},"1317":{"position":[[34,8],[340,8]]},"1330":{"position":[[34,8]]},"1341":{"position":[[34,8],[340,8]]},"1352":{"position":[[34,8],[340,8]]},"1359":{"position":[[34,8]]},"1379":{"position":[[2186,5]]},"1380":{"position":[[34,8]]},"1403":{"position":[[2186,5]]},"1404":{"position":[[34,8]]},"1414":{"position":[[2186,5]]},"1415":{"position":[[34,8]]},"1432":{"position":[[34,8],[340,8]]}},"keywords":{}}],["breakdown",{"_index":3133,"title":{},"content":{"320":{"position":[[2500,9]]},"323":{"position":[[2071,10]]},"517":{"position":[[436,10],[896,10],[978,10],[1200,11],[1212,10],[1240,10],[1287,12]]},"518":{"position":[[357,11]]}},"keywords":{}}],["breakdownflow",{"_index":3131,"title":{},"content":{"320":{"position":[[2454,13]]}},"keywords":{}}],["breakdowns.breakdown",{"_index":3940,"title":{},"content":{"517":{"position":[[274,21]]}},"keywords":{}}],["breakdownsar",{"_index":3942,"title":{},"content":{"517":{"position":[[410,13]]}},"keywords":{}}],["breviti",{"_index":1176,"title":{},"content":{"82":{"position":[[2421,8],[4538,8]]}},"keywords":{}}],["brew",{"_index":891,"title":{},"content":{"58":{"position":[[721,4],[746,4]]},"169":{"position":[[968,4],[993,4]]}},"keywords":{}}],["briefli",{"_index":2424,"title":{},"content":{"215":{"position":[[47,7]]}},"keywords":{}}],["brilliant",{"_index":2333,"title":{},"content":{"210":{"position":[[2388,9]]}},"keywords":{}}],["bring",{"_index":1269,"title":{},"content":{"84":{"position":[[787,6]]},"205":{"position":[[245,5]]},"320":{"position":[[1173,5]]},"324":{"position":[[740,6]]},"326":{"position":[[1328,5]]},"690":{"position":[[55,5]]},"1461":{"position":[[305,8]]}},"keywords":{}}],["brittl",{"_index":1329,"title":{},"content":{"92":{"position":[[829,7]]}},"keywords":{}}],["broad",{"_index":1462,"title":{},"content":{"102":{"position":[[217,5]]}},"keywords":{}}],["broaden",{"_index":3061,"title":{},"content":{"309":{"position":[[2598,9],[3346,10]]}},"keywords":{}}],["broader",{"_index":3118,"title":{},"content":{"320":{"position":[[312,7]]}},"keywords":{}}],["broken",{"_index":3038,"title":{},"content":{"306":{"position":[[15,6]]},"385":{"position":[[435,6]]},"1447":{"position":[[63,6]]}},"keywords":{}}],["broker",{"_index":2635,"title":{},"content":{"247":{"position":[[83,6]]},"320":{"position":[[392,6]]},"325":{"position":[[113,8]]},"374":{"position":[[188,6]]}},"keywords":{}}],["broker.address.family=v4",{"_index":2678,"title":{},"content":{"250":{"position":[[1265,24]]}},"keywords":{}}],["brought",{"_index":3164,"title":{},"content":{"324":{"position":[[194,7]]}},"keywords":{}}],["brows",{"_index":2428,"title":{},"content":{"217":{"position":[[580,6]]},"263":{"position":[[846,6]]},"274":{"position":[[1624,6]]},"1379":{"position":[[2224,6]]},"1403":{"position":[[2224,6]]},"1414":{"position":[[2224,6]]}},"keywords":{}}],["browser",{"_index":1984,"title":{},"content":{"169":{"position":[[1510,7]]},"184":{"position":[[623,8]]},"217":{"position":[[620,8],[1227,7],[1754,8]]},"218":{"position":[[650,7]]},"259":{"position":[[547,7],[1076,8],[2241,7],[2657,8]]},"290":{"position":[[1361,7]]},"291":{"position":[[888,7],[1042,8],[1541,8]]},"302":{"position":[[888,7],[1461,8]]},"340":{"position":[[370,7]]},"615":{"position":[[64,8]]},"617":{"position":[[64,8]]},"635":{"position":[[415,8]]},"989":{"position":[[1001,8]]},"1004":{"position":[[1084,8]]}},"keywords":{}}],["bruce.wayn",{"_index":3685,"title":{},"content":{"433":{"position":[[280,11]]}},"keywords":{}}],["btree",{"_index":6029,"title":{},"content":{"1292":{"position":[[1972,5]]},"1306":{"position":[[1972,5]]},"1329":{"position":[[1972,5]]}},"keywords":{}}],["btv1b10405460g",{"_index":2710,"title":{},"content":{"253":{"position":[[1511,14],[2455,14],[2529,14]]},"313":{"position":[[1511,14],[2455,14],[2529,14]]}},"keywords":{}}],["bucket",{"_index":62,"title":{"170":{"position":[[31,6]]},"171":{"position":[[21,8]]},"172":{"position":[[10,8]]},"174":{"position":[[8,7]]},"414":{"position":[[14,8]]}},"content":{"1":{"position":[[928,7]]},"3":{"position":[[158,7]]},"21":{"position":[[765,7]]},"34":{"position":[[313,7],[514,6],[558,6]]},"46":{"position":[[36,7],[158,7]]},"67":{"position":[[513,7]]},"77":{"position":[[156,7],[233,7],[329,8]]},"154":{"position":[[1380,6],[1675,6]]},"168":{"position":[[190,6],[246,6],[361,6]]},"170":{"position":[[64,6],[119,7]]},"171":{"position":[[54,7],[72,6],[162,6]]},"172":{"position":[[53,7],[71,6],[146,6],[214,6],[250,7]]},"174":{"position":[[9,6],[276,6],[320,6],[404,6],[520,6]]},"189":{"position":[[266,6]]},"190":{"position":[[896,6],[973,7],[1010,6],[1106,6],[1735,7],[2066,6]]},"192":{"position":[[1406,7]]},"193":{"position":[[92,6]]},"299":{"position":[[203,6],[277,8],[344,7]]},"300":{"position":[[160,6]]},"301":{"position":[[53,7],[760,8],[784,7],[864,6],[1031,7],[1731,6]]},"303":{"position":[[100,6]]},"320":{"position":[[1203,8]]},"326":{"position":[[1351,7]]},"413":{"position":[[62,6],[94,7],[107,6],[400,8]]},"414":{"position":[[14,8],[27,6],[88,6],[127,6],[795,7],[936,6]]},"415":{"position":[[5,7],[195,6]]},"417":{"position":[[290,6],[822,6],[1013,6],[1078,7],[1086,6],[1108,6],[1914,6],[2048,6],[2295,7],[2316,6]]},"418":{"position":[[104,7],[577,7]]},"419":{"position":[[316,7],[682,6]]},"438":{"position":[[290,6]]},"440":{"position":[[332,7],[698,6]]},"502":{"position":[[750,6]]},"543":{"position":[[40,6],[129,8],[165,6],[198,7]]},"545":{"position":[[290,6],[553,7],[561,6],[601,6],[1516,6],[1690,7],[1711,6]]},"546":{"position":[[105,7],[116,6],[1285,7]]},"547":{"position":[[317,7],[683,6]]},"548":{"position":[[817,7]]},"1023":{"position":[[297,7],[663,6]]},"1142":{"position":[[44,6],[199,7]]},"1143":{"position":[[123,7]]},"1144":{"position":[[68,6],[75,6],[201,7],[309,7],[362,6]]},"1145":{"position":[[129,7],[137,6]]},"1146":{"position":[[408,6]]},"1149":{"position":[[402,6],[463,6],[647,7]]},"1151":{"position":[[817,7],[948,7],[972,7],[991,6],[1013,6],[1107,7],[1235,6]]},"1152":{"position":[[326,7],[337,6]]},"1154":{"position":[[232,6]]},"1160":{"position":[[44,6],[325,6]]},"1162":{"position":[[262,7],[270,6],[284,6]]},"1163":{"position":[[223,7],[231,6]]},"1168":{"position":[[44,6],[199,7]]},"1169":{"position":[[123,7]]},"1170":{"position":[[68,6],[75,6],[201,7],[309,7],[362,6]]},"1171":{"position":[[133,7],[141,6]]},"1173":{"position":[[420,6]]},"1176":{"position":[[65,6],[393,6]]},"1179":{"position":[[127,6],[539,7],[547,6],[570,7],[607,6],[644,7]]},"1180":{"position":[[142,7],[158,6],[178,6]]},"1203":{"position":[[368,6],[432,6],[509,6]]},"1204":{"position":[[16,8]]},"1206":{"position":[[122,7],[175,6],[270,7],[583,6],[601,6],[742,7]]},"1207":{"position":[[195,8],[213,6],[251,6]]},"1211":{"position":[[44,6],[207,6]]},"1212":{"position":[[123,7]]},"1213":{"position":[[68,6],[75,6]]},"1214":{"position":[[130,7],[138,6]]},"1215":{"position":[[408,6]]},"1218":{"position":[[44,6],[207,6]]},"1219":{"position":[[123,7]]},"1220":{"position":[[68,6],[75,6]]},"1221":{"position":[[134,7],[142,6]]},"1223":{"position":[[420,6]]},"1258":{"position":[[83,6],[241,7]]},"1260":{"position":[[426,7],[445,6],[467,6],[616,7],[747,7],[783,6]]},"1261":{"position":[[202,7]]},"1292":{"position":[[2001,7]]},"1306":{"position":[[2001,7]]},"1329":{"position":[[2001,7]]},"1420":{"position":[[512,7],[520,6],[560,6]]},"1421":{"position":[[253,7],[261,6]]}},"keywords":{}}],["bucket"",{"_index":2015,"title":{},"content":{"172":{"position":[[940,12],[1195,12]]},"418":{"position":[[121,12]]}},"keywords":{}}],["bucket.a",{"_index":5881,"title":{},"content":{"1211":{"position":[[126,8]]},"1218":{"position":[[126,8]]}},"keywords":{}}],["bucket.an",{"_index":5714,"title":{},"content":{"1142":{"position":[[125,9]]},"1149":{"position":[[580,9]]},"1160":{"position":[[125,9]]},"1168":{"position":[[125,9]]},"1258":{"position":[[174,9]]}},"keywords":{}}],["bucket/${prefix",{"_index":3610,"title":{},"content":{"418":{"position":[[409,16]]},"546":{"position":[[1116,16]]}},"keywords":{}}],["bucket/*"",{"_index":2013,"title":{},"content":{"172":{"position":[[688,14]]}},"keywords":{}}],["bucket/acmeco/orders/category=anvils/pivot=00",{"_index":131,"title":{},"content":{"3":{"position":[[706,46]]}},"keywords":{}}],["bucket/acmeco/orders/category=anvils/pivot=00/utc_date=2022",{"_index":122,"title":{},"content":{"3":{"position":[[442,59]]}},"keywords":{}}],["bucket/and",{"_index":850,"title":{},"content":{"56":{"position":[[1936,10]]}},"keywords":{}}],["bucket/anoth",{"_index":853,"title":{},"content":{"56":{"position":[[2107,14]]}},"keywords":{}}],["bucket/prefix/path/v0000000000/00000000000000000000.csv",{"_index":5732,"title":{},"content":{"1146":{"position":[[218,55]]},"1215":{"position":[[218,55]]}},"keywords":{}}],["bucket/prefix/path/v0000000000/00000000000000000000.parquet",{"_index":5783,"title":{},"content":{"1173":{"position":[[218,59]]},"1223":{"position":[[218,59]]}},"keywords":{}}],["bucket/prefix/path/v0000000000/00000000000000000001.csv",{"_index":5733,"title":{},"content":{"1146":{"position":[[274,55]]},"1215":{"position":[[274,55]]}},"keywords":{}}],["bucket/prefix/path/v0000000000/00000000000000000001.parquet",{"_index":5784,"title":{},"content":{"1173":{"position":[[278,59]]},"1223":{"position":[[278,59]]}},"keywords":{}}],["bucket/prefix/path/v0000000000/00000000000000000002.csv",{"_index":5734,"title":{},"content":{"1146":{"position":[[330,55]]},"1215":{"position":[[330,55]]}},"keywords":{}}],["bucket/prefix/path/v0000000000/00000000000000000002.parquet",{"_index":5785,"title":{},"content":{"1173":{"position":[[338,59]]},"1223":{"position":[[338,59]]}},"keywords":{}}],["bucket_path",{"_index":5792,"title":{},"content":{"1179":{"position":[[594,12]]},"1180":{"position":[[165,12]]},"1421":{"position":[[280,11]]}},"keywords":{}}],["bucketanonym",{"_index":3580,"title":{},"content":{"414":{"position":[[199,15]]}},"keywords":{}}],["bucketiam",{"_index":3585,"title":{},"content":{"415":{"position":[[459,9]]}},"keywords":{}}],["bucketpath",{"_index":5744,"title":{},"content":{"1151":{"position":[[1223,11]]},"1260":{"position":[[771,11]]},"1420":{"position":[[548,11]]},"1421":{"position":[[268,11]]}},"keywords":{}}],["budget",{"_index":4355,"title":{},"content":{"628":{"position":[[427,6]]}},"keywords":{}}],["buffer",{"_index":38,"title":{},"content":{"1":{"position":[[458,7]]}},"keywords":{}}],["bug",{"_index":1468,"title":{},"content":{"102":{"position":[[591,4]]},"281":{"position":[[2507,4]]},"332":{"position":[[684,4]]}},"keywords":{}}],["build",{"_index":788,"title":{},"content":{"50":{"position":[[294,5]]},"52":{"position":[[67,6]]},"64":{"position":[[77,5],[194,5],[351,5]]},"69":{"position":[[872,6]]},"87":{"position":[[676,5]]},"88":{"position":[[96,5],[559,5]]},"94":{"position":[[1065,5]]},"98":{"position":[[1214,5]]},"104":{"position":[[304,8]]},"128":{"position":[[124,5]]},"158":{"position":[[167,5]]},"164":{"position":[[985,8]]},"189":{"position":[[711,5]]},"198":{"position":[[1110,5]]},"232":{"position":[[172,8]]},"319":{"position":[[478,5]]},"329":{"position":[[20,6],[433,5]]},"331":{"position":[[20,5]]},"556":{"position":[[1128,8]]},"1461":{"position":[[5529,5]]},"1464":{"position":[[320,5]]},"1466":{"position":[[301,5]]},"1467":{"position":[[644,5]]},"1477":{"position":[[1631,5],[3970,5]]}},"keywords":{}}],["builder",{"_index":4119,"title":{},"content":{"556":{"position":[[1213,7]]},"558":{"position":[[202,7]]}},"keywords":{}}],["buildrich",{"_index":1954,"title":{},"content":{"164":{"position":[[2240,9]]}},"keywords":{}}],["built",{"_index":1365,"title":{},"content":{"95":{"position":[[61,5]]},"113":{"position":[[177,5]]},"202":{"position":[[260,5]]},"319":{"position":[[1133,5]]},"320":{"position":[[346,5]]},"323":{"position":[[45,5]]},"1465":{"position":[[259,5]]}},"keywords":{}}],["bulk",{"_index":1470,"title":{},"content":{"103":{"position":[[5,4]]},"1292":{"position":[[2046,4]]},"1306":{"position":[[2046,4]]},"1329":{"position":[[2046,4]]},"1379":{"position":[[2277,4]]},"1403":{"position":[[2277,4]]},"1414":{"position":[[2277,4]]},"1451":{"position":[[505,4]]}},"keywords":{}}],["bunch",{"_index":3062,"title":{},"content":{"313":{"position":[[3078,5]]},"315":{"position":[[228,5]]}},"keywords":{}}],["bundl",{"_index":3117,"title":{},"content":{"320":{"position":[[264,8]]},"849":{"position":[[2566,7]]}},"keywords":{}}],["busi",{"_index":1696,"title":{},"content":{"124":{"position":[[463,5]]},"164":{"position":[[1037,9]]},"175":{"position":[[41,8]]},"183":{"position":[[1492,8]]},"189":{"position":[[654,8]]},"331":{"position":[[682,8]]},"512":{"position":[[184,8]]},"514":{"position":[[59,8]]},"515":{"position":[[70,8],[476,9]]},"517":{"position":[[78,8]]},"668":{"position":[[38,8]]},"1081":{"position":[[86,8]]},"1082":{"position":[[159,8]]},"1083":{"position":[[43,8],[159,8]]}},"keywords":{}}],["busier",{"_index":1700,"title":{},"content":{"124":{"position":[[750,6]]}},"keywords":{}}],["business_manag",{"_index":3939,"title":{},"content":{"515":{"position":[[708,21]]}},"keywords":{}}],["bussi",{"_index":4534,"title":{},"content":{"728":{"position":[[138,10]]}},"keywords":{}}],["button",{"_index":361,"title":{},"content":{"12":{"position":[[160,6]]},"138":{"position":[[105,6],[239,8],[443,7],[471,7]]},"141":{"position":[[549,8]]},"142":{"position":[[129,6],[352,8]]},"183":{"position":[[166,7]]},"191":{"position":[[2170,6]]},"204":{"position":[[470,7],[661,6]]},"205":{"position":[[127,7],[233,6]]},"206":{"position":[[843,6]]},"209":{"position":[[87,7]]},"218":{"position":[[1232,7]]},"228":{"position":[[191,6],[948,7]]},"240":{"position":[[2164,6],[2868,7],[3931,7]]},"259":{"position":[[97,6],[724,7],[1778,6]]},"267":{"position":[[183,7]]},"296":{"position":[[7525,6]]},"479":{"position":[[427,6],[923,7]]},"488":{"position":[[587,6]]},"515":{"position":[[525,6]]},"659":{"position":[[744,6]]},"676":{"position":[[587,6]]},"691":{"position":[[587,6]]},"840":{"position":[[1779,7]]},"849":{"position":[[2820,7]]}},"keywords":{}}],["buy",{"_index":2114,"title":{},"content":{"189":{"position":[[441,3]]}},"keywords":{}}],["buz",{"_index":1845,"title":{},"content":{"154":{"position":[[897,5],[1024,5]]}},"keywords":{}}],["bxo2fe1srqbbf4cbnopjd9dnxwz0miqejwhuwrqo0inxeexnaxhykqccnjnuay1j",{"_index":1252,"title":{},"content":{"83":{"position":[[2157,64]]},"371":{"position":[[1076,64]]},"1139":{"position":[[963,64]]}},"keywords":{}}],["bypass",{"_index":4620,"title":{},"content":{"757":{"position":[[1737,8]]},"770":{"position":[[1737,8]]},"797":{"position":[[1737,8]]},"812":{"position":[[1737,8]]},"828":{"position":[[1737,8]]},"963":{"position":[[132,8]]}},"keywords":{}}],["byte",{"_index":1799,"title":{},"content":{"138":{"position":[[1984,5]]},"141":{"position":[[1916,5]]},"142":{"position":[[2037,5]]},"146":{"position":[[116,5]]},"149":{"position":[[119,5]]},"152":{"position":[[129,5]]},"1144":{"position":[[638,6],[1013,4]]},"1170":{"position":[[638,6],[1046,4],[1087,5]]},"1213":{"position":[[493,6],[690,4]]},"1220":{"position":[[493,6],[723,4],[764,5]]},"1292":{"position":[[2122,4]]},"1306":{"position":[[2122,4]]},"1329":{"position":[[2122,4]]},"1470":{"position":[[693,5],[963,5],[1095,5],[1235,5]]},"1475":{"position":[[1335,5]]}},"keywords":{}}],["byte_array",{"_index":5779,"title":{},"content":{"1172":{"position":[[308,11],[341,11],[435,10],[487,11],[945,11]]},"1222":{"position":[[308,11],[341,11],[435,10],[487,11],[945,11]]}},"keywords":{}}],["bytestot",{"_index":6663,"title":{},"content":{"1470":{"position":[[740,10]]}},"keywords":{}}],["c",{"_index":94,"title":{},"content":{"2":{"position":[[668,2]]},"61":{"position":[[1284,1]]},"62":{"position":[[788,2],[847,2]]},"105":{"position":[[1515,1]]},"183":{"position":[[4431,2]]},"210":{"position":[[1174,3]]},"223":{"position":[[771,1]]},"236":{"position":[[940,1]]},"250":{"position":[[1258,1]]},"255":{"position":[[792,2]]},"316":{"position":[[1117,2]]},"1020":{"position":[[1118,2]]},"1298":{"position":[[771,1]]},"1346":{"position":[[771,1]]}},"keywords":{}}],["c"",{"_index":2511,"title":{},"content":{"236":{"position":[[847,7]]}},"keywords":{}}],["c05a95ljhsl"",{"_index":6286,"title":{},"content":{"1363":{"position":[[304,17]]}},"keywords":{}}],["c[activ",{"_index":932,"title":{},"content":{"61":{"position":[[1188,8]]}},"keywords":{}}],["c[sourc",{"_index":1502,"title":{},"content":{"105":{"position":[[1405,9]]}},"keywords":{}}],["c^c",{"_index":2693,"title":{},"content":{"253":{"position":[[1060,4]]},"313":{"position":[[1060,4]]}},"keywords":{}}],["ca",{"_index":498,"title":{},"content":{"17":{"position":[[634,3]]},"1268":{"position":[[468,3],[525,2],[706,2]]},"1285":{"position":[[996,2]]},"1286":{"position":[[1976,3],[2170,2],[2364,2]]},"1300":{"position":[[996,2]]},"1301":{"position":[[1812,3],[2006,2],[2200,2]]},"1324":{"position":[[996,2]]},"1325":{"position":[[1976,3],[2170,2],[2364,2]]}},"keywords":{}}],["cach",{"_index":5273,"title":{},"content":{"1068":{"position":[[98,7]]},"1292":{"position":[[2164,5]]},"1306":{"position":[[2164,5]]},"1329":{"position":[[2164,5]]}},"keywords":{}}],["calcul",{"_index":2764,"title":{},"content":{"253":{"position":[[3159,9]]},"254":{"position":[[3636,9]]}},"keywords":{}}],["call",{"_index":1643,"title":{},"content":{"117":{"position":[[424,6]]},"125":{"position":[[917,6]]},"138":{"position":[[991,6]]},"141":{"position":[[201,6]]},"142":{"position":[[978,6]]},"154":{"position":[[432,6]]},"183":{"position":[[1028,6],[2944,6]]},"197":{"position":[[143,6]]},"206":{"position":[[182,6]]},"218":{"position":[[1791,6]]},"236":{"position":[[297,6],[1827,6],[1882,6]]},"254":{"position":[[947,6],[1096,6]]},"259":{"position":[[1259,6],[2840,6]]},"263":{"position":[[1022,6]]},"267":{"position":[[1452,6]]},"268":{"position":[[357,6],[654,6]]},"269":{"position":[[292,6]]},"270":{"position":[[1081,6]]},"274":{"position":[[1867,6]]},"289":{"position":[[558,6]]},"291":{"position":[[1724,6]]},"295":{"position":[[635,6]]},"296":{"position":[[3027,6]]},"300":{"position":[[505,6]]},"302":{"position":[[1633,6]]},"306":{"position":[[709,6]]},"314":{"position":[[625,6],[817,6]]},"319":{"position":[[503,7]]},"320":{"position":[[1015,6],[1570,6],[2130,5]]},"321":{"position":[[1730,5]]},"323":{"position":[[543,6]]},"330":{"position":[[372,5]]},"337":{"position":[[47,6],[114,6]]},"354":{"position":[[29,4]]},"590":{"position":[[328,6],[421,6]]},"767":{"position":[[2312,4]]},"792":{"position":[[2293,4]]},"824":{"position":[[2424,4]]},"900":{"position":[[132,5],[208,5],[260,5]]},"1007":{"position":[[98,6]]},"1068":{"position":[[30,4]]},"1140":{"position":[[2054,4],[2096,6]]},"1179":{"position":[[657,6]]},"1292":{"position":[[2194,4]]},"1306":{"position":[[2194,4]]},"1316":{"position":[[2054,4],[2096,6]]},"1329":{"position":[[2194,4]]},"1340":{"position":[[2054,4],[2096,6]]},"1351":{"position":[[2054,4],[2096,6]]},"1379":{"position":[[2359,4],[2405,6]]},"1403":{"position":[[2359,4],[2405,6]]},"1414":{"position":[[2359,4],[2405,6]]},"1429":{"position":[[648,6]]},"1431":{"position":[[2077,4],[2119,6]]},"1448":{"position":[[550,6],[754,6]]},"1461":{"position":[[3200,6]]}},"keywords":{}}],["caller",{"_index":5401,"title":{},"content":{"1110":{"position":[[421,6]]}},"keywords":{}}],["callscompanycontactsnumberstagsuser_availablityusersteamswebhook",{"_index":3268,"title":{},"content":{"353":{"position":[[56,65]]}},"keywords":{}}],["callsengag",{"_index":4386,"title":{},"content":{"649":{"position":[[315,16]]}},"keywords":{}}],["came",{"_index":1001,"title":{},"content":{"67":{"position":[[477,4]]},"150":{"position":[[239,4]]},"219":{"position":[[469,4]]},"229":{"position":[[32,4]]}},"keywords":{}}],["campaign",{"_index":3966,"title":{},"content":{"517":{"position":[[3059,10]]},"518":{"position":[[1375,9]]},"557":{"position":[[536,8],[625,8]]},"717":{"position":[[46,10]]},"721":{"position":[[336,9]]},"735":{"position":[[461,10]]},"736":{"position":[[280,9]]},"738":{"position":[[523,10]]},"900":{"position":[[174,11]]},"1080":{"position":[[111,9],[371,9],[400,9],[428,9],[710,9],[759,9]]},"1082":{"position":[[200,10]]},"1086":{"position":[[390,9]]}},"keywords":{}}],["campaign.id",{"_index":4128,"title":{},"content":{"557":{"position":[[487,12],[554,11]]}},"keywords":{}}],["campaign.nam",{"_index":4129,"title":{},"content":{"557":{"position":[[500,14]]}},"keywords":{}}],["campaign.statu",{"_index":4130,"title":{},"content":{"557":{"position":[[515,15]]}},"keywords":{}}],["campaignad",{"_index":4513,"title":{},"content":{"715":{"position":[[153,10]]}},"keywords":{}}],["campaigns_custom",{"_index":4131,"title":{},"content":{"557":{"position":[[578,16]]}},"keywords":{}}],["campaignscampaign",{"_index":4448,"title":{},"content":{"697":{"position":[[72,17]]}},"keywords":{}}],["campaignscampaigns_analyticscanvasescanvases_analyticseventsevents_analyticskpi_daily_new_userskpi_daily_active_userskpi_daily_app_uninstallscardscards_analyticssegmentssegments_analyt",{"_index":3778,"title":{},"content":{"463":{"position":[[69,187]]}},"keywords":{}}],["campaignscompaniescontact",{"_index":4381,"title":{},"content":{"649":{"position":[[197,25]]}},"keywords":{}}],["campaignseventsglobalexclusionslistsmetricsflowsprofil",{"_index":4462,"title":{},"content":{"703":{"position":[[72,56]]}},"keywords":{}}],["campaignslistscontactsstat",{"_index":5134,"title":{},"content":{"979":{"position":[[72,27]]}},"keywords":{}}],["campaignssponsor",{"_index":3465,"title":{},"content":{"381":{"position":[[97,18],[245,18],[409,18]]}},"keywords":{}}],["can't",{"_index":1958,"title":{},"content":{"165":{"position":[[776,5]]},"207":{"position":[[1479,5]]},"821":{"position":[[1470,5]]},"909":{"position":[[145,5]]},"925":{"position":[[145,5]]},"936":{"position":[[145,5]]},"952":{"position":[[145,5]]},"970":{"position":[[145,5]]},"1470":{"position":[[234,5]]}},"keywords":{}}],["cancel",{"_index":2692,"title":{},"content":{"253":{"position":[[1029,6]]},"313":{"position":[[1029,6]]}},"keywords":{}}],["canon",{"_index":1314,"title":{},"content":{"90":{"position":[[439,9],[510,9]]}},"keywords":{}}],["capabilitiesfrom",{"_index":4840,"title":{},"content":{"857":{"position":[[140,16]]}},"keywords":{}}],["capability=admin",{"_index":3223,"title":{},"content":{"341":{"position":[[248,16]]}},"keywords":{}}],["capability=read",{"_index":3226,"title":{},"content":{"341":{"position":[[394,15]]}},"keywords":{}}],["capabl",{"_index":1843,"title":{"337":{"position":[[33,13]]},"341":{"position":[[13,13]]}},"content":{"154":{"position":[[684,13],[1112,12]]},"211":{"position":[[628,12]]},"323":{"position":[[1633,13]]},"324":{"position":[[178,11]]},"325":{"position":[[407,12]]},"326":{"position":[[339,7]]},"329":{"position":[[334,12]]},"337":{"position":[[33,10],[253,13]]},"338":{"position":[[568,12]]},"339":{"position":[[157,12],[217,12]]},"341":{"position":[[32,12],[186,12]]},"975":{"position":[[252,13]]},"976":{"position":[[261,12]]},"977":{"position":[[16,12]]},"1007":{"position":[[12,7]]},"1435":{"position":[[407,7]]},"1436":{"position":[[119,12]]},"1437":{"position":[[819,12]]}},"keywords":{}}],["capac",{"_index":783,"title":{},"content":{"49":{"position":[[525,8]]},"397":{"position":[[970,8],[1112,8]]}},"keywords":{}}],["capit",{"_index":6257,"title":{},"content":{"1317":{"position":[[543,14]]},"1341":{"position":[[543,14]]},"1352":{"position":[[543,14]]},"1432":{"position":[[543,14]]}},"keywords":{}}],["captur",{"_index":222,"title":{"35":{"position":[[0,9]]},"51":{"position":[[0,8]]},"55":{"position":[[21,9]]},"126":{"position":[[35,7]]},"138":{"position":[[0,8]]},"139":{"position":[[8,8]]},"140":{"position":[[11,8]]},"145":{"position":[[0,7]]},"190":{"position":[[0,7]]},"206":{"position":[[8,7]]},"209":{"position":[[15,8]]},"217":{"position":[[9,8]]},"227":{"position":[[0,7]]},"228":{"position":[[0,8]]},"239":{"position":[[17,8]]},"259":{"position":[[7,8]]},"290":{"position":[[0,7]]},"301":{"position":[[0,7]]},"361":{"position":[[0,7]]},"362":{"position":[[10,7]]},"602":{"position":[[22,8]]},"759":{"position":[[16,7]]},"772":{"position":[[16,7]]},"799":{"position":[[16,7]]},"814":{"position":[[16,7]]},"830":{"position":[[16,7]]},"1020":{"position":[[5,9]]}},"content":{"6":{"position":[[591,7]]},"8":{"position":[[515,9],[730,7]]},"11":{"position":[[384,8],[464,7],[700,7],[959,7],[1458,8],[1645,8],[1953,8]]},"12":{"position":[[337,8]]},"13":{"position":[[1309,8]]},"14":{"position":[[185,9],[334,7]]},"21":{"position":[[80,7]]},"23":{"position":[[137,7]]},"25":{"position":[[202,8]]},"27":{"position":[[22,10]]},"32":{"position":[[185,8],[267,8],[372,7]]},"33":{"position":[[73,9]]},"34":{"position":[[49,8]]},"35":{"position":[[3,7],[284,8],[359,8]]},"36":{"position":[[230,9]]},"37":{"position":[[50,8]]},"38":{"position":[[102,8]]},"44":{"position":[[1,9],[343,7]]},"45":{"position":[[367,7],[461,7]]},"52":{"position":[[1,8],[175,7]]},"53":{"position":[[308,7]]},"54":{"position":[[32,9],[253,7],[525,8],[591,8]]},"55":{"position":[[103,8],[186,7],[406,7],[831,8]]},"56":{"position":[[1,8],[88,8],[149,9],[177,8],[977,8],[1128,7],[1403,7],[1528,7],[1763,7],[2275,7],[2514,7]]},"66":{"position":[[166,10]]},"67":{"position":[[194,7],[337,8],[787,8],[1093,8],[1786,7],[1886,8],[2008,7]]},"68":{"position":[[250,8]]},"71":{"position":[[291,8]]},"79":{"position":[[105,7]]},"80":{"position":[[220,7]]},"81":{"position":[[600,8],[2859,8]]},"83":{"position":[[743,7],[908,9],[934,7]]},"92":{"position":[[113,8]]},"95":{"position":[[9,8]]},"117":{"position":[[114,9]]},"120":{"position":[[2709,8],[2751,8],[2880,7]]},"126":{"position":[[388,8],[426,8],[556,7],[626,7]]},"129":{"position":[[270,8]]},"132":{"position":[[145,8]]},"135":{"position":[[273,9],[387,8],[930,8]]},"137":{"position":[[142,11],[287,7]]},"138":{"position":[[5,8],[54,8],[97,7],[163,9],[628,9],[668,7],[710,8],[743,7],[909,7],[983,7],[1186,8],[1280,7],[1364,7],[1424,7],[1501,7],[1703,7],[1810,8],[1823,7],[1886,8],[1905,7],[2017,7],[2353,7],[2378,8],[2701,7]]},"139":{"position":[[41,8],[75,7],[125,7],[175,7],[228,8]]},"140":{"position":[[23,8],[59,7],[106,7],[194,7],[224,7],[328,8],[386,8],[459,9]]},"141":{"position":[[140,8],[375,8],[2001,7]]},"142":{"position":[[248,8]]},"144":{"position":[[140,8],[158,8],[261,8],[701,8],[737,8]]},"145":{"position":[[33,7],[48,8],[87,7]]},"146":{"position":[[27,8],[40,7],[154,8],[397,8],[512,7],[813,7],[987,8]]},"147":{"position":[[58,7]]},"149":{"position":[[786,7]]},"150":{"position":[[223,7]]},"152":{"position":[[789,7]]},"154":{"position":[[1888,7]]},"157":{"position":[[6,9]]},"162":{"position":[[206,9],[394,7],[647,9],[1006,7],[1172,7],[1899,9]]},"165":{"position":[[51,8],[120,9],[280,8],[397,9],[558,9],[656,9],[878,7],[2059,8],[2166,9]]},"166":{"position":[[568,8]]},"180":{"position":[[508,8],[599,8]]},"181":{"position":[[53,8]]},"189":{"position":[[749,7],[1053,8],[1119,7],[1376,7],[1443,7],[1748,7],[1838,8]]},"190":{"position":[[99,7],[128,7],[241,8],[304,8],[397,8],[1922,8],[2082,8]]},"193":{"position":[[270,7]]},"196":{"position":[[21,8],[60,7],[129,7],[447,7],[625,8]]},"197":{"position":[[400,9]]},"199":{"position":[[156,7]]},"202":{"position":[[86,7],[370,7]]},"205":{"position":[[32,7],[118,8],[205,10]]},"206":{"position":[[25,7],[60,7]]},"207":{"position":[[453,9],[768,7]]},"208":{"position":[[46,8],[1574,8]]},"209":{"position":[[133,8],[394,8],[626,7],[782,7],[1053,7],[1201,9],[1571,8]]},"211":{"position":[[52,7],[165,9],[398,7],[572,7],[880,7]]},"212":{"position":[[93,9]]},"216":{"position":[[155,8],[348,7]]},"217":{"position":[[23,7],[348,8],[651,8],[665,7],[822,7],[1326,8],[1455,8],[2214,7]]},"218":{"position":[[17,8],[401,8],[705,8],[1369,8]]},"219":{"position":[[245,8],[352,7]]},"221":{"position":[[1640,7]]},"225":{"position":[[511,7]]},"228":{"position":[[36,8],[86,8],[135,7],[1278,7]]},"232":{"position":[[235,7]]},"233":{"position":[[21,8],[60,7],[129,7],[454,7],[657,7],[810,8]]},"237":{"position":[[131,7],[486,7],[824,9],[1166,7],[2403,8]]},"239":{"position":[[171,8],[182,7],[270,8],[388,7],[894,9],[1334,8]]},"240":{"position":[[3769,7],[3922,8],[3969,7]]},"245":{"position":[[57,8]]},"259":{"position":[[51,7],[162,7],[593,8],[1484,7],[1551,8],[2443,8]]},"263":{"position":[[640,7]]},"264":{"position":[[787,8]]},"266":{"position":[[183,7]]},"274":{"position":[[44,8],[196,8],[1015,9],[1144,8]]},"284":{"position":[[252,8]]},"285":{"position":[[311,7]]},"286":{"position":[[136,9]]},"289":{"position":[[312,8],[503,7]]},"290":{"position":[[23,7],[325,8],[375,8],[445,8],[476,8],[490,7],[630,7],[1624,9],[1694,7],[1782,9],[1825,8]]},"291":{"position":[[61,8],[325,8],[944,8]]},"295":{"position":[[1101,8]]},"300":{"position":[[291,8],[450,7]]},"301":{"position":[[23,7],[278,8],[321,8],[385,8],[416,8],[430,7],[570,7],[927,7],[1109,9],[1150,7],[1668,7],[1747,9],[1790,8]]},"302":{"position":[[61,8],[325,8],[943,8]]},"305":{"position":[[139,8]]},"307":{"position":[[406,8],[896,8],[1015,9],[1803,7],[1865,9],[2735,8],[3064,8],[3142,8],[3374,8]]},"309":{"position":[[3698,8]]},"320":{"position":[[2031,9]]},"321":{"position":[[1627,7]]},"322":{"position":[[1381,7]]},"323":{"position":[[600,8],[1311,8],[1346,9]]},"325":{"position":[[598,7]]},"326":{"position":[[1437,7],[1570,7]]},"329":{"position":[[72,8]]},"343":{"position":[[727,8]]},"345":{"position":[[114,7]]},"351":{"position":[[432,9]]},"359":{"position":[[410,9]]},"360":{"position":[[2,9]]},"363":{"position":[[127,7]]},"364":{"position":[[106,9]]},"366":{"position":[[330,8]]},"367":{"position":[[259,7]]},"368":{"position":[[20,7],[88,8],[164,9],[296,8]]},"370":{"position":[[414,7]]},"371":{"position":[[11,7],[61,9],[1421,7],[1551,7]]},"373":{"position":[[422,7],[792,7]]},"374":{"position":[[231,7],[306,7],[352,10],[375,8],[409,8]]},"377":{"position":[[1502,7]]},"378":{"position":[[1,9]]},"379":{"position":[[1,9],[53,7],[106,7],[185,9],[246,7],[418,8]]},"383":{"position":[[97,7]]},"385":{"position":[[100,7],[169,7],[660,7]]},"387":{"position":[[1433,9]]},"388":{"position":[[71,9]]},"390":{"position":[[86,8]]},"392":{"position":[[464,9]]},"393":{"position":[[11,7],[61,9],[404,7],[520,7]]},"397":{"position":[[112,9],[224,9],[621,9],[909,9],[989,7]]},"398":{"position":[[11,7],[61,9],[403,7],[511,7]]},"402":{"position":[[240,7],[726,8]]},"403":{"position":[[1,9]]},"408":{"position":[[642,9]]},"413":{"position":[[31,7]]},"417":{"position":[[635,9],[1338,7],[1924,7],[1973,8]]},"418":{"position":[[1,9],[470,7],[603,7]]},"419":{"position":[[386,9],[1101,8],[1332,7],[2076,8]]},"424":{"position":[[465,9]]},"425":{"position":[[2,9]]},"433":{"position":[[43,9],[454,9],[830,7],[943,7]]},"438":{"position":[[1854,7]]},"439":{"position":[[1,9]]},"440":{"position":[[402,9],[1117,8],[1348,7]]},"441":{"position":[[685,8]]},"448":{"position":[[1318,9]]},"449":{"position":[[71,9]]},"454":{"position":[[654,9]]},"455":{"position":[[2,9]]},"460":{"position":[[671,9]]},"461":{"position":[[2,9]]},"466":{"position":[[378,9]]},"467":{"position":[[2,9]]},"469":{"position":[[134,9]]},"472":{"position":[[594,7]]},"473":{"position":[[71,9]]},"478":{"position":[[231,8],[661,8]]},"479":{"position":[[247,7],[317,7],[575,7]]},"480":{"position":[[1096,7]]},"482":{"position":[[685,7]]},"483":{"position":[[560,8],[648,7]]},"485":{"position":[[43,7],[387,8]]},"486":{"position":[[22,8],[121,8],[412,8]]},"488":{"position":[[536,7],[917,8]]},"496":{"position":[[613,8]]},"497":{"position":[[1,9],[309,7],[429,7]]},"499":{"position":[[30,8]]},"502":{"position":[[364,7]]},"503":{"position":[[1,9]]},"504":{"position":[[330,9],[1705,8]]},"509":{"position":[[644,9]]},"510":{"position":[[1,9]]},"513":{"position":[[55,9]]},"517":{"position":[[39,8],[128,7],[251,7],[1750,7],[2651,7],[3810,9],[4079,9]]},"518":{"position":[[71,9],[1691,7]]},"520":{"position":[[93,7],[162,9]]},"522":{"position":[[53,9]]},"527":{"position":[[71,9]]},"529":{"position":[[112,7],[181,9]]},"530":{"position":[[53,9]]},"534":{"position":[[903,8],[1794,9]]},"535":{"position":[[71,9]]},"541":{"position":[[2,9]]},"545":{"position":[[962,7],[1526,7],[1575,8]]},"546":{"position":[[1,9],[1177,7],[1311,7]]},"547":{"position":[[387,9],[1103,8],[1334,7],[2078,8]]},"548":{"position":[[312,7]]},"551":{"position":[[53,9]]},"556":{"position":[[2296,9]]},"557":{"position":[[71,9]]},"566":{"position":[[1,9]]},"568":{"position":[[34,8]]},"569":{"position":[[53,9]]},"575":{"position":[[57,9],[1287,7]]},"577":{"position":[[593,7]]},"580":{"position":[[263,7]]},"586":{"position":[[57,9]]},"593":{"position":[[206,7],[583,7]]},"594":{"position":[[1,9],[904,7]]},"595":{"position":[[9,8],[197,7],[279,7],[327,7],[351,8],[1283,7]]},"599":{"position":[[231,8],[661,8]]},"602":{"position":[[381,8]]},"603":{"position":[[117,7]]},"607":{"position":[[53,9]]},"611":{"position":[[1297,9]]},"612":{"position":[[71,9]]},"614":{"position":[[53,9]]},"620":{"position":[[1,9],[357,7]]},"625":{"position":[[277,9]]},"626":{"position":[[2,9]]},"631":{"position":[[605,9]]},"632":{"position":[[2,9]]},"634":{"position":[[30,8]]},"638":{"position":[[1,9]]},"639":{"position":[[328,9],[1703,8]]},"640":{"position":[[362,8]]},"643":{"position":[[54,9]]},"647":{"position":[[1,9]]},"650":{"position":[[54,9]]},"655":{"position":[[1,9],[422,7]]},"657":{"position":[[43,7],[387,8],[624,7]]},"658":{"position":[[22,8],[121,8],[412,8]]},"659":{"position":[[693,7],[1074,8]]},"661":{"position":[[429,7]]},"670":{"position":[[765,9]]},"671":{"position":[[2,9]]},"673":{"position":[[43,7],[387,8]]},"674":{"position":[[22,8],[121,8],[412,8]]},"676":{"position":[[536,7],[917,8]]},"685":{"position":[[577,9]]},"686":{"position":[[62,9]]},"688":{"position":[[43,7],[387,8]]},"689":{"position":[[22,8],[121,8],[412,8]]},"690":{"position":[[203,7]]},"691":{"position":[[536,7],[917,8]]},"700":{"position":[[416,9]]},"701":{"position":[[2,9]]},"706":{"position":[[415,9]]},"707":{"position":[[2,9]]},"712":{"position":[[607,9]]},"713":{"position":[[2,9]]},"716":{"position":[[55,9]]},"717":{"position":[[127,7]]},"718":{"position":[[349,7],[386,7]]},"719":{"position":[[81,7]]},"720":{"position":[[332,7],[373,7],[906,9]]},"721":{"position":[[71,9]]},"724":{"position":[[418,7],[455,7]]},"731":{"position":[[56,9]]},"736":{"position":[[1,9],[462,7]]},"741":{"position":[[592,9]]},"742":{"position":[[2,9]]},"747":{"position":[[1475,9]]},"748":{"position":[[2,9]]},"750":{"position":[[1046,8],[1179,7],[1283,7]]},"752":{"position":[[545,9]]},"753":{"position":[[1201,9]]},"754":{"position":[[216,7],[993,7],[1091,7],[1133,7]]},"755":{"position":[[20,7],[88,8],[164,9],[296,8]]},"757":{"position":[[380,9],[594,9],[1065,7],[1186,8],[2066,8]]},"758":{"position":[[11,7],[61,9],[405,7],[535,7]]},"760":{"position":[[9,7],[206,9],[368,7],[424,7]]},"761":{"position":[[9,7],[407,7],[537,7]]},"762":{"position":[[9,7],[445,7],[524,7]]},"763":{"position":[[9,7],[355,7],[401,7],[489,8]]},"764":{"position":[[9,7],[191,7],[373,7],[496,7],[596,7],[676,8]]},"766":{"position":[[1046,8],[1179,7]]},"767":{"position":[[1762,7]]},"768":{"position":[[20,7],[88,8],[164,9],[296,8]]},"770":{"position":[[380,9],[594,9],[1065,7],[1186,8],[2066,8]]},"771":{"position":[[11,7],[61,9],[405,7],[535,7]]},"773":{"position":[[9,7],[206,9],[368,7],[424,7]]},"774":{"position":[[9,7],[407,7],[537,7]]},"775":{"position":[[9,7],[445,7],[524,7]]},"776":{"position":[[9,7],[355,7],[401,7],[489,8]]},"777":{"position":[[9,7],[191,7],[373,7],[496,7],[596,7],[676,8]]},"783":{"position":[[1,9]]},"785":{"position":[[104,7],[295,7],[407,9],[854,7]]},"786":{"position":[[1,8],[251,8],[310,9]]},"789":{"position":[[772,7],[1447,8],[1580,7],[1684,7]]},"791":{"position":[[498,9],[681,9]]},"792":{"position":[[1702,7],[2001,9]]},"793":{"position":[[1172,9],[1355,9]]},"794":{"position":[[89,7],[1197,7],[1295,7],[1337,7]]},"795":{"position":[[18,7],[86,8],[162,9],[294,8]]},"797":{"position":[[380,9],[594,9],[1065,7],[1186,8],[2073,8]]},"798":{"position":[[11,7],[61,9],[403,7],[533,7]]},"800":{"position":[[9,7],[206,9],[368,7],[424,7]]},"801":{"position":[[9,7],[413,7],[543,7]]},"802":{"position":[[9,7],[445,7],[524,7]]},"803":{"position":[[9,7],[361,7],[407,7],[495,8]]},"804":{"position":[[9,7],[189,7],[371,7],[494,7],[594,7],[674,8]]},"805":{"position":[[98,8]]},"807":{"position":[[1034,8],[1167,7]]},"808":{"position":[[1118,9],[1301,9]]},"809":{"position":[[89,7],[1197,7],[1295,7],[1337,7]]},"810":{"position":[[18,7],[86,8],[162,9],[294,8]]},"812":{"position":[[380,9],[594,9],[1065,7],[1186,8],[2073,8]]},"813":{"position":[[11,7],[61,9],[403,7],[533,7]]},"815":{"position":[[9,7],[206,9],[368,7],[424,7]]},"816":{"position":[[9,7],[413,7],[543,7]]},"817":{"position":[[9,7],[445,7],[524,7]]},"818":{"position":[[9,7],[361,7],[407,7],[495,8]]},"819":{"position":[[9,7],[189,7],[371,7],[494,7],[594,7],[674,8]]},"820":{"position":[[98,8]]},"821":{"position":[[43,8],[277,8],[460,7],[564,7]]},"823":{"position":[[1034,8],[1167,7]]},"824":{"position":[[1824,7],[2123,9]]},"825":{"position":[[89,7],[1033,7],[1131,7],[1173,7]]},"826":{"position":[[18,7],[86,8],[162,9],[294,8]]},"828":{"position":[[380,9],[594,9],[1065,7],[1186,8],[2073,8]]},"829":{"position":[[11,7],[61,9],[403,7],[533,7]]},"831":{"position":[[9,7],[206,9],[368,7],[424,7]]},"832":{"position":[[9,7],[413,7],[543,7]]},"833":{"position":[[9,7],[445,7],[524,7]]},"834":{"position":[[9,7],[361,7],[407,7],[495,8]]},"835":{"position":[[9,7],[189,7],[371,7],[494,7],[594,7],[674,8]]},"836":{"position":[[98,8]]},"839":{"position":[[171,8]]},"842":{"position":[[2157,7]]},"843":{"position":[[2,9]]},"848":{"position":[[171,7]]},"851":{"position":[[696,9]]},"852":{"position":[[2,9]]},"859":{"position":[[825,9]]},"860":{"position":[[71,9]]},"867":{"position":[[343,7],[417,7],[1218,8],[1439,7],[1894,8]]},"868":{"position":[[1,9]]},"869":{"position":[[623,9]]},"870":{"position":[[195,8],[256,8]]},"880":{"position":[[1,9]]},"885":{"position":[[727,9]]},"886":{"position":[[2,9]]},"891":{"position":[[441,9]]},"892":{"position":[[1,9]]},"897":{"position":[[371,9]]},"903":{"position":[[356,8]]},"904":{"position":[[1363,7],[2106,8],[2241,8]]},"905":{"position":[[23,7],[91,8],[167,9],[299,8]]},"907":{"position":[[197,7]]},"908":{"position":[[11,7],[61,9],[449,7],[579,7]]},"909":{"position":[[837,8],[1141,8]]},"911":{"position":[[52,7],[97,9],[454,8]]},"912":{"position":[[48,8],[288,8],[471,7],[580,7],[1314,7]]},"915":{"position":[[356,8],[1140,7]]},"917":{"position":[[816,8],[966,8],[1081,9],[1615,8],[1750,8]]},"918":{"position":[[1655,7],[2398,8],[2533,8]]},"919":{"position":[[837,7],[1341,8],[1491,8],[1606,9]]},"920":{"position":[[23,7],[91,8],[167,9],[299,8]]},"922":{"position":[[244,7],[1183,7],[1685,8],[2616,7],[2706,7]]},"923":{"position":[[197,7]]},"924":{"position":[[11,7],[61,9],[449,7],[579,7]]},"925":{"position":[[837,8],[1141,8]]},"927":{"position":[[52,7],[97,9],[454,8]]},"930":{"position":[[356,8]]},"931":{"position":[[1020,7],[1768,8],[1903,8]]},"932":{"position":[[23,7],[91,8],[167,9],[299,8]]},"934":{"position":[[197,7]]},"935":{"position":[[11,7],[61,9],[449,7],[579,7]]},"936":{"position":[[837,8],[1141,8]]},"938":{"position":[[52,7],[97,9],[454,8]]},"945":{"position":[[395,8]]},"947":{"position":[[87,8],[721,7]]},"948":{"position":[[23,7],[91,8],[167,9],[299,8]]},"950":{"position":[[197,7]]},"951":{"position":[[11,7],[61,9],[449,7],[579,7]]},"952":{"position":[[837,8],[1141,8]]},"954":{"position":[[52,7],[97,9],[454,8]]},"959":{"position":[[472,9]]},"960":{"position":[[2,9]]},"963":{"position":[[510,8],[1294,7]]},"964":{"position":[[263,7]]},"965":{"position":[[816,8],[966,8],[1081,9],[1615,8],[1750,8]]},"966":{"position":[[23,7],[91,8],[167,9],[299,8]]},"968":{"position":[[197,7]]},"969":{"position":[[11,7],[61,9],[449,7],[579,7]]},"970":{"position":[[837,8],[1141,8]]},"972":{"position":[[52,7],[97,9],[454,8]]},"975":{"position":[[46,7]]},"976":{"position":[[49,7]]},"977":{"position":[[79,9],[127,7],[198,7],[230,8]]},"982":{"position":[[474,9]]},"983":{"position":[[2,9]]},"985":{"position":[[20,7],[427,7],[592,8],[608,7],[699,8]]},"989":{"position":[[136,8],[362,7],[613,7]]},"991":{"position":[[881,9]]},"992":{"position":[[1,9]]},"997":{"position":[[440,9]]},"998":{"position":[[2,9]]},"1000":{"position":[[20,7],[386,7],[605,7],[770,8],[871,8],[922,7],[1013,8]]},"1004":{"position":[[136,8],[445,7],[696,7]]},"1006":{"position":[[20,7],[368,7]]},"1007":{"position":[[23,9]]},"1008":{"position":[[56,8],[145,7],[194,7],[218,7],[250,7],[278,7],[302,8],[496,7],[587,8],[800,8],[1416,7]]},"1009":{"position":[[926,9],[977,9],[1079,8],[1737,9]]},"1010":{"position":[[71,9]]},"1015":{"position":[[527,9]]},"1016":{"position":[[2,9]]},"1019":{"position":[[54,7],[104,7],[201,8],[276,9]]},"1020":{"position":[[56,7],[160,9],[238,8],[296,8],[447,9],[565,9],[840,8],[907,8],[1224,9],[1258,8],[1430,9],[1506,9],[1569,9],[1664,9],[1758,8],[1950,9]]},"1021":{"position":[[727,7],[1003,9],[1055,7],[2095,8]]},"1022":{"position":[[1,9]]},"1023":{"position":[[367,9],[1084,8],[1315,7],[2059,8]]},"1028":{"position":[[477,9]]},"1029":{"position":[[2,9]]},"1031":{"position":[[125,7]]},"1032":{"position":[[323,7],[464,7],[533,7],[599,7]]},"1034":{"position":[[330,7]]},"1035":{"position":[[87,7]]},"1036":{"position":[[211,7],[430,7],[618,7],[831,8]]},"1037":{"position":[[1,9]]},"1040":{"position":[[4,7],[103,9],[386,9]]},"1042":{"position":[[400,8],[520,8],[969,8]]},"1043":{"position":[[1064,8],[1184,8],[1633,8]]},"1045":{"position":[[204,7]]},"1046":{"position":[[1,9],[383,7],[513,7]]},"1047":{"position":[[222,7],[322,7],[1006,7]]},"1050":{"position":[[4,7],[103,9],[386,9]]},"1051":{"position":[[1326,8],[1446,8],[1895,8]]},"1053":{"position":[[204,7]]},"1054":{"position":[[1,9],[383,7],[513,7]]},"1055":{"position":[[222,7],[322,7],[1006,7]]},"1058":{"position":[[4,7],[103,9],[386,9]]},"1059":{"position":[[1119,8],[1239,8],[1688,8]]},"1061":{"position":[[204,7]]},"1062":{"position":[[1,9],[383,7],[513,7]]},"1063":{"position":[[222,7],[322,7],[1006,7]]},"1070":{"position":[[1088,9]]},"1071":{"position":[[71,9]]},"1076":{"position":[[870,9]]},"1077":{"position":[[32,7],[397,7],[597,7],[658,7],[831,7]]},"1078":{"position":[[1,9]]},"1085":{"position":[[1456,9]]},"1086":{"position":[[83,9]]},"1094":{"position":[[542,9]]},"1101":{"position":[[382,9]]},"1102":{"position":[[2,9]]},"1107":{"position":[[497,9]]},"1108":{"position":[[1,9]]},"1113":{"position":[[571,9]]},"1114":{"position":[[2,9]]},"1129":{"position":[[72,9]]},"1133":{"position":[[1293,9]]},"1134":{"position":[[1,9]]},"1176":{"position":[[499,8]]},"1185":{"position":[[299,8]]},"1194":{"position":[[509,8]]},"1203":{"position":[[670,8]]},"1226":{"position":[[310,8]]},"1243":{"position":[[87,8]]},"1253":{"position":[[237,7]]},"1354":{"position":[[334,8]]},"1382":{"position":[[553,8]]},"1446":{"position":[[35,8],[137,8],[252,9]]},"1447":{"position":[[27,7],[242,7],[373,7]]},"1448":{"position":[[107,7],[322,7],[514,7],[615,7],[836,8]]},"1449":{"position":[[41,7]]},"1455":{"position":[[39,7]]},"1459":{"position":[[885,7],[967,7]]},"1470":{"position":[[120,7],[525,7],[650,8],[953,9],[1191,7]]},"1473":{"position":[[201,9]]},"1475":{"position":[[639,8],[648,7],[694,7],[931,8]]}},"keywords":{}}],["capture"",{"_index":3791,"title":{},"content":{"472":{"position":[[526,13]]}},"keywords":{}}],["capture".loc",{"_index":3821,"title":{},"content":{"479":{"position":[[134,20]]}},"keywords":{}}],["capture'",{"_index":4084,"title":{},"content":{"548":{"position":[[622,9]]},"752":{"position":[[145,9]]},"763":{"position":[[107,9]]},"776":{"position":[[107,9]]},"791":{"position":[[98,9]]},"803":{"position":[[107,9]]},"818":{"position":[[107,9]]},"834":{"position":[[107,9]]},"1031":{"position":[[360,9]]},"1470":{"position":[[1045,9]]}},"keywords":{}}],["capture(",{"_index":1771,"title":{},"content":{"138":{"position":[[415,11],[568,10]]}},"keywords":{}}],["capture.pend",{"_index":1781,"title":{},"content":{"138":{"position":[[1250,15]]}},"keywords":{}}],["capture.se",{"_index":5237,"title":{},"content":{"1040":{"position":[[299,11]]},"1050":{"position":[[299,11]]},"1058":{"position":[[299,11]]}},"keywords":{}}],["capture/on",{"_index":582,"title":{},"content":{"23":{"position":[[309,11],[340,11]]}},"keywords":{}}],["capture/two",{"_index":580,"title":{},"content":{"23":{"position":[[278,11]]}},"keywords":{}}],["capture_nam",{"_index":5205,"title":{},"content":{"1022":{"position":[[11,16]]}},"keywords":{}}],["captured.access",{"_index":5239,"title":{},"content":{"1040":{"position":[[769,15]]},"1050":{"position":[[769,15]]},"1058":{"position":[[769,15]]}},"keywords":{}}],["captured.permiss",{"_index":4587,"title":{},"content":{"750":{"position":[[932,19]]},"766":{"position":[[932,19]]},"789":{"position":[[1333,19]]},"807":{"position":[[920,19]]},"823":{"position":[[920,19]]}},"keywords":{}}],["capturescollectionsmateri",{"_index":2791,"title":{},"content":{"264":{"position":[[262,35]]}},"keywords":{}}],["capturescollectionsmaterializationsderivationstest",{"_index":2821,"title":{},"content":{"275":{"position":[[282,51]]}},"keywords":{}}],["card",{"_index":4027,"title":{},"content":{"529":{"position":[[542,5]]},"940":{"position":[[48,4]]},"1455":{"position":[[167,5]]}},"keywords":{}}],["cardin",{"_index":1703,"title":{},"content":{"124":{"position":[[1060,11]]},"842":{"position":[[2372,12]]},"1140":{"position":[[2126,11]]},"1316":{"position":[[2126,11]]},"1340":{"position":[[2126,11]]},"1351":{"position":[[2126,11]]},"1379":{"position":[[2451,11]]},"1403":{"position":[[2451,11]]},"1414":{"position":[[2451,11]]},"1431":{"position":[[2149,11]]}},"keywords":{}}],["care",{"_index":3126,"title":{},"content":{"320":{"position":[[1454,4]]},"1438":{"position":[[388,4]]},"1442":{"position":[[1263,4]]},"1452":{"position":[[2733,4]]}},"keywords":{}}],["carefulli",{"_index":4112,"title":{},"content":{"554":{"position":[[397,9]]},"910":{"position":[[365,9]]},"926":{"position":[[365,9]]},"937":{"position":[[365,9]]},"953":{"position":[[365,9]]},"971":{"position":[[365,9]]}},"keywords":{}}],["carol",{"_index":1844,"title":{},"content":{"154":{"position":[[723,5]]}},"keywords":{}}],["carri",{"_index":3143,"title":{},"content":{"321":{"position":[[1892,5]]},"1444":{"position":[[269,7]]}},"keywords":{}}],["cart",{"_index":1575,"title":{},"content":{"110":{"position":[[689,5]]}},"keywords":{}}],["cascad",{"_index":5612,"title":{},"content":{"1140":{"position":[[2171,7],[2206,8]]},"1292":{"position":[[2223,7],[2267,8]]},"1306":{"position":[[2223,7],[2267,8]]},"1316":{"position":[[2171,7],[2206,8]]},"1329":{"position":[[2223,7],[2267,8]]},"1340":{"position":[[2171,7],[2206,8]]},"1351":{"position":[[2171,7],[2206,8]]},"1370":{"position":[[566,7]]},"1379":{"position":[[2507,7],[2563,8]]},"1403":{"position":[[2507,7],[2563,8]]},"1414":{"position":[[2507,7],[2563,8]]},"1431":{"position":[[2194,7],[2229,8]]}},"keywords":{}}],["case",{"_index":404,"title":{},"content":{"13":{"position":[[1074,6],[1607,5],[1819,5]]},"14":{"position":[[986,4],[1151,5]]},"20":{"position":[[651,5]]},"47":{"position":[[162,6]]},"50":{"position":[[146,5]]},"68":{"position":[[9,6]]},"75":{"position":[[223,5]]},"83":{"position":[[9,6]]},"89":{"position":[[443,6]]},"90":{"position":[[462,5]]},"91":{"position":[[9,6],[183,6]]},"98":{"position":[[9,6],[881,4]]},"101":{"position":[[78,5],[326,5]]},"107":{"position":[[3732,5]]},"115":{"position":[[1429,5]]},"124":{"position":[[131,4],[186,4]]},"126":{"position":[[9,6]]},"162":{"position":[[9,6]]},"168":{"position":[[310,6]]},"177":{"position":[[352,5]]},"179":{"position":[[319,5]]},"189":{"position":[[1106,5],[1307,5],[1533,5]]},"190":{"position":[[1381,5],[1692,5]]},"206":{"position":[[556,5]]},"209":{"position":[[1741,6]]},"221":{"position":[[918,5]]},"225":{"position":[[362,5]]},"230":{"position":[[588,6]]},"237":{"position":[[2034,5]]},"238":{"position":[[199,4]]},"239":{"position":[[1246,6]]},"254":{"position":[[3281,4]]},"281":{"position":[[377,6]]},"286":{"position":[[85,6]]},"289":{"position":[[126,5]]},"291":{"position":[[704,5]]},"296":{"position":[[2369,5]]},"300":{"position":[[126,5]]},"301":{"position":[[1304,7]]},"302":{"position":[[704,5]]},"309":{"position":[[1636,6],[1911,6],[3441,5]]},"314":{"position":[[2856,4]]},"322":{"position":[[599,5]]},"323":{"position":[[1561,5]]},"368":{"position":[[236,6],[423,5]]},"370":{"position":[[1774,5]]},"385":{"position":[[602,5]]},"413":{"position":[[240,5]]},"419":{"position":[[455,6],[1482,6]]},"440":{"position":[[471,6]]},"441":{"position":[[91,6]]},"480":{"position":[[163,5]]},"490":{"position":[[107,5]]},"496":{"position":[[115,4]]},"504":{"position":[[399,6],[1111,6]]},"517":{"position":[[3430,6],[3729,6]]},"547":{"position":[[456,6],[1484,6]]},"603":{"position":[[220,4]]},"616":{"position":[[278,4]]},"635":{"position":[[492,5]]},"639":{"position":[[397,6],[1109,6]]},"663":{"position":[[107,5]]},"678":{"position":[[107,5]]},"693":{"position":[[107,5]]},"755":{"position":[[236,6],[423,5]]},"760":{"position":[[224,4],[525,4]]},"761":{"position":[[477,4]]},"768":{"position":[[236,6],[423,5]]},"773":{"position":[[224,4],[525,4]]},"774":{"position":[[477,4]]},"785":{"position":[[741,5]]},"795":{"position":[[234,6],[421,5]]},"800":{"position":[[224,4],[525,4]]},"801":{"position":[[483,4]]},"810":{"position":[[234,6],[421,5]]},"815":{"position":[[224,4],[525,4]]},"816":{"position":[[483,4]]},"826":{"position":[[234,6],[421,5]]},"831":{"position":[[224,4],[525,4]]},"832":{"position":[[483,4]]},"865":{"position":[[130,4]]},"870":{"position":[[789,5]]},"877":{"position":[[130,4],[175,5]]},"905":{"position":[[239,6],[426,5]]},"909":{"position":[[917,5]]},"911":{"position":[[115,5]]},"912":{"position":[[1126,4]]},"920":{"position":[[239,6],[426,5]]},"922":{"position":[[3249,4]]},"925":{"position":[[917,5]]},"927":{"position":[[115,5]]},"932":{"position":[[239,6],[426,5]]},"936":{"position":[[917,5]]},"938":{"position":[[115,5]]},"948":{"position":[[239,6],[426,5]]},"952":{"position":[[917,5]]},"954":{"position":[[115,5]]},"966":{"position":[[239,6],[426,5]]},"970":{"position":[[917,5]]},"972":{"position":[[115,5]]},"1023":{"position":[[436,6],[1465,6]]},"1036":{"position":[[801,5]]},"1047":{"position":[[179,5]]},"1055":{"position":[[179,5]]},"1063":{"position":[[179,5]]},"1138":{"position":[[1065,5]]},"1140":{"position":[[2247,4]]},"1155":{"position":[[381,4],[487,4]]},"1156":{"position":[[754,4]]},"1166":{"position":[[9,6]]},"1203":{"position":[[256,5]]},"1208":{"position":[[236,6]]},"1209":{"position":[[392,4]]},"1289":{"position":[[1377,7]]},"1292":{"position":[[2316,4]]},"1298":{"position":[[1209,7]]},"1303":{"position":[[1088,7]]},"1306":{"position":[[2316,4]]},"1310":{"position":[[698,7]]},"1316":{"position":[[2247,4]]},"1322":{"position":[[1596,7]]},"1329":{"position":[[2316,4]]},"1335":{"position":[[1244,7]]},"1340":{"position":[[2247,4]]},"1346":{"position":[[1210,7]]},"1351":{"position":[[2247,4]]},"1358":{"position":[[140,6]]},"1370":{"position":[[579,4]]},"1379":{"position":[[2607,4]]},"1394":{"position":[[618,4]]},"1403":{"position":[[2607,4]]},"1414":{"position":[[2607,4]]},"1431":{"position":[[2270,4]]},"1440":{"position":[[1430,5],[1501,5]]},"1442":{"position":[[510,5]]},"1448":{"position":[[46,6]]},"1451":{"position":[[307,4]]},"1461":{"position":[[824,4]]},"1464":{"position":[[825,4]]},"1467":{"position":[[2872,4]]},"1477":{"position":[[832,4]]}},"keywords":{}}],["cast",{"_index":5619,"title":{},"content":{"1140":{"position":[[2287,4]]},"1209":{"position":[[406,4]]},"1316":{"position":[[2287,4]]},"1340":{"position":[[2287,4]]},"1351":{"position":[[2287,4]]},"1370":{"position":[[590,4]]},"1379":{"position":[[2657,4]]},"1394":{"position":[[640,4]]},"1403":{"position":[[2657,4]]},"1414":{"position":[[2657,4]]},"1431":{"position":[[2310,4]]}},"keywords":{}}],["cat",{"_index":6375,"title":{},"content":{"1384":{"position":[[474,3]]}},"keywords":{}}],["catalog",{"_index":227,"title":{"22":{"position":[[0,7]]},"33":{"position":[[0,8]]},"1460":{"position":[[18,7]]}},"content":{"7":{"position":[[36,7],[679,7]]},"17":{"position":[[38,7]]},"23":{"position":[[23,7]]},"24":{"position":[[1,7],[222,8]]},"25":{"position":[[242,7]]},"26":{"position":[[164,8]]},"27":{"position":[[5,7],[395,7]]},"32":{"position":[[593,8]]},"33":{"position":[[5,7],[158,7],[353,8],[385,7],[459,7]]},"41":{"position":[[538,7]]},"44":{"position":[[77,7],[325,7]]},"49":{"position":[[45,7],[300,7],[383,7]]},"56":{"position":[[115,8]]},"60":{"position":[[381,7],[448,7],[644,8],[991,8],[1230,7],[1266,8]]},"61":{"position":[[504,8],[639,7],[1142,7],[1197,9],[1222,7],[1259,7],[1299,7]]},"62":{"position":[[79,7],[221,7]]},"63":{"position":[[121,7],[594,7],[1013,7]]},"64":{"position":[[39,7]]},"69":{"position":[[121,8]]},"75":{"position":[[483,8]]},"82":{"position":[[3209,8]]},"88":{"position":[[88,7],[173,7],[219,7]]},"89":{"position":[[312,7]]},"90":{"position":[[9,7]]},"91":{"position":[[36,7]]},"92":{"position":[[8,7],[784,7]]},"107":{"position":[[219,7]]},"120":{"position":[[131,8]]},"128":{"position":[[116,7]]},"138":{"position":[[645,7]]},"141":{"position":[[779,7]]},"142":{"position":[[592,7]]},"154":{"position":[[353,7]]},"158":{"position":[[198,7]]},"161":{"position":[[1124,7]]},"183":{"position":[[389,7],[4467,7]]},"229":{"position":[[153,7]]},"255":{"position":[[1121,7]]},"263":{"position":[[1125,7]]},"264":{"position":[[712,7]]},"267":{"position":[[764,7]]},"268":{"position":[[1905,7]]},"269":{"position":[[1367,7]]},"270":{"position":[[534,7],[756,7],[1983,7]]},"274":{"position":[[138,8],[681,8],[857,7],[1104,7],[1288,7],[1370,7],[1500,7],[1754,7]]},"275":{"position":[[386,7],[687,7],[926,7]]},"296":{"position":[[6809,7]]},"316":{"position":[[1446,7]]},"340":{"position":[[62,8]]},"350":{"position":[[81,7]]},"358":{"position":[[81,7]]},"369":{"position":[[81,7]]},"376":{"position":[[81,7]]},"386":{"position":[[81,7]]},"391":{"position":[[81,7]]},"396":{"position":[[81,7]]},"407":{"position":[[81,7]]},"416":{"position":[[81,7]]},"423":{"position":[[81,7]]},"431":{"position":[[81,7]]},"437":{"position":[[81,7]]},"447":{"position":[[81,7]]},"453":{"position":[[81,7]]},"458":{"position":[[93,7]]},"459":{"position":[[81,7]]},"460":{"position":[[357,7],[373,7]]},"465":{"position":[[81,7]]},"472":{"position":[[81,7]]},"481":{"position":[[81,7]]},"495":{"position":[[81,7]]},"508":{"position":[[81,7]]},"516":{"position":[[81,7]]},"525":{"position":[[81,7]]},"533":{"position":[[81,7]]},"539":{"position":[[81,7]]},"544":{"position":[[81,7]]},"572":{"position":[[81,7]]},"600":{"position":[[81,7]]},"610":{"position":[[81,7]]},"618":{"position":[[81,7]]},"624":{"position":[[81,7]]},"630":{"position":[[81,7]]},"636":{"position":[[81,7]]},"646":{"position":[[81,7]]},"653":{"position":[[81,7]]},"669":{"position":[[81,7]]},"684":{"position":[[81,7]]},"699":{"position":[[81,7]]},"705":{"position":[[81,7]]},"711":{"position":[[81,7]]},"727":{"position":[[81,7]]},"734":{"position":[[81,7]]},"740":{"position":[[81,7]]},"746":{"position":[[81,7]]},"756":{"position":[[81,7]]},"769":{"position":[[81,7]]},"796":{"position":[[81,7]]},"805":{"position":[[345,7]]},"811":{"position":[[81,7]]},"820":{"position":[[345,7]]},"827":{"position":[[81,7]]},"836":{"position":[[345,7]]},"841":{"position":[[81,7]]},"850":{"position":[[81,7]]},"858":{"position":[[81,7]]},"866":{"position":[[81,7]]},"878":{"position":[[81,7]]},"884":{"position":[[81,7]]},"890":{"position":[[81,7]]},"896":{"position":[[81,7]]},"906":{"position":[[81,7]]},"909":{"position":[[656,7]]},"921":{"position":[[81,7]]},"925":{"position":[[656,7]]},"933":{"position":[[81,7]]},"936":{"position":[[656,7]]},"947":{"position":[[113,8]]},"949":{"position":[[81,7]]},"952":{"position":[[656,7]]},"958":{"position":[[81,7]]},"967":{"position":[[81,7]]},"970":{"position":[[656,7]]},"981":{"position":[[81,7]]},"990":{"position":[[81,7]]},"996":{"position":[[81,7]]},"1008":{"position":[[1128,7],[1912,7]]},"1014":{"position":[[81,7]]},"1021":{"position":[[81,7]]},"1027":{"position":[[81,7]]},"1033":{"position":[[85,7]]},"1044":{"position":[[81,7]]},"1052":{"position":[[81,7]]},"1060":{"position":[[81,7]]},"1069":{"position":[[81,7]]},"1075":{"position":[[81,7]]},"1084":{"position":[[81,7]]},"1093":{"position":[[81,7]]},"1100":{"position":[[81,7]]},"1106":{"position":[[81,7]]},"1112":{"position":[[81,7]]},"1124":{"position":[[81,7]]},"1132":{"position":[[81,7]]},"1140":{"position":[[2331,7]]},"1165":{"position":[[258,8]]},"1188":{"position":[[306,7],[338,7]]},"1316":{"position":[[2331,7]]},"1340":{"position":[[2331,7]]},"1351":{"position":[[2331,7]]},"1379":{"position":[[2700,7]]},"1403":{"position":[[2700,7]]},"1414":{"position":[[2700,7]]},"1417":{"position":[[429,7]]},"1420":{"position":[[105,8],[114,7],[134,7],[142,7]]},"1421":{"position":[[124,8]]},"1431":{"position":[[2354,7]]},"1461":{"position":[[94,8],[124,7],[271,7],[338,7],[412,8],[477,8],[530,7],[581,8],[890,7],[1733,8],[1800,7],[1855,8],[1907,7],[2447,7],[2714,7],[3127,7],[4467,7]]},"1462":{"position":[[225,8],[356,7],[458,7],[638,7]]},"1474":{"position":[[457,7],[593,7]]}},"keywords":{}}],["catalog>",{"_index":3776,"title":{},"content":{"461":{"position":[[232,11]]}},"keywords":{}}],["catalog_nam",{"_index":5810,"title":{},"content":{"1188":{"position":[[292,13]]},"1189":{"position":[[120,13]]},"1292":{"position":[[2361,12]]},"1306":{"position":[[2361,12]]},"1329":{"position":[[2361,12]]},"1421":{"position":[[133,12]]}},"keywords":{}}],["cataloga",{"_index":5805,"title":{},"content":{"1185":{"position":[[82,8],[149,8]]},"1417":{"position":[[160,8],[321,8]]}},"keywords":{}}],["catalogof",{"_index":914,"title":{},"content":{"61":{"position":[[193,9]]}},"keywords":{}}],["catch",{"_index":1467,"title":{},"content":{"102":{"position":[[557,5]]},"156":{"position":[[718,8]]},"158":{"position":[[228,5]]},"280":{"position":[[575,6]]},"281":{"position":[[2490,5]]},"329":{"position":[[907,7]]},"332":{"position":[[676,7]]},"379":{"position":[[513,7]]},"1451":{"position":[[533,5]]}},"keywords":{}}],["categor",{"_index":4647,"title":{},"content":{"762":{"position":[[293,10]]},"775":{"position":[[293,10]]},"802":{"position":[[293,10]]},"817":{"position":[[293,10]]},"833":{"position":[[293,10]]}},"keywords":{}}],["categori",{"_index":182,"title":{},"content":{"4":{"position":[[605,9]]},"204":{"position":[[104,8]]},"320":{"position":[[2019,11]]}},"keywords":{}}],["categoriesboard",{"_index":4494,"title":{},"content":{"709":{"position":[[749,15]]}},"keywords":{}}],["categoriesdiscuss",{"_index":3908,"title":{},"content":{"506":{"position":[[146,20]]}},"keywords":{}}],["categoriesestim",{"_index":4342,"title":{},"content":{"628":{"position":[[153,18]]}},"keywords":{}}],["categoriesexpensesexpens",{"_index":4344,"title":{},"content":{"628":{"position":[[203,25]]}},"keywords":{}}],["categoriesproduct",{"_index":5366,"title":{},"content":{"1096":{"position":[[223,17]]}},"keywords":{}}],["categoriesproject",{"_index":4482,"title":{},"content":{"709":{"position":[[502,17]]}},"keywords":{}}],["categoriessolut",{"_index":3918,"title":{},"content":{"506":{"position":[[348,18]]}},"keywords":{}}],["categoriestaskstim",{"_index":4345,"title":{},"content":{"628":{"position":[[229,19]]}},"keywords":{}}],["category"",{"_index":2712,"title":{},"content":{"253":{"position":[[1550,15],[2576,15]]},"313":{"position":[[1550,15],[2576,15]]}},"keywords":{}}],["cater",{"_index":2188,"title":{},"content":{"197":{"position":[[695,8]]}},"keywords":{}}],["caught",{"_index":1653,"title":{},"content":{"121":{"position":[[491,6]]},"158":{"position":[[889,7]]},"1451":{"position":[[190,6],[797,6]]},"1452":{"position":[[384,6]]}},"keywords":{}}],["caus",{"_index":377,"title":{"14":{"position":[[5,6]]}},"content":{"13":{"position":[[150,5],[897,6]]},"14":{"position":[[87,5]]},"55":{"position":[[618,5]]},"94":{"position":[[1746,5],[2114,5]]},"100":{"position":[[883,5]]},"105":{"position":[[61,7]]},"117":{"position":[[597,5]]},"120":{"position":[[1298,5],[1666,5]]},"183":{"position":[[1616,6]]},"239":{"position":[[2478,6]]},"296":{"position":[[2403,5]]},"307":{"position":[[3086,6]]},"417":{"position":[[525,5]]},"438":{"position":[[525,5]]},"502":{"position":[[985,5]]},"545":{"position":[[525,5]]},"595":{"position":[[1123,5]]},"603":{"position":[[95,5]]},"760":{"position":[[443,8]]},"763":{"position":[[464,5]]},"773":{"position":[[443,8]]},"776":{"position":[[464,5]]},"800":{"position":[[443,8]]},"803":{"position":[[470,5]]},"815":{"position":[[443,8]]},"818":{"position":[[470,5]]},"831":{"position":[[443,8]]},"834":{"position":[[470,5]]},"909":{"position":[[617,5]]},"922":{"position":[[2801,5],[2983,5]]},"925":{"position":[[617,5]]},"936":{"position":[[617,5]]},"952":{"position":[[617,5]]},"970":{"position":[[617,5]]},"1020":{"position":[[547,5]]},"1123":{"position":[[497,5]]},"1393":{"position":[[216,5]]},"1438":{"position":[[332,7]]},"1447":{"position":[[232,5],[329,5],[517,5]]},"1449":{"position":[[184,5]]},"1470":{"position":[[468,6]]},"1480":{"position":[[1004,5],[1372,5]]}},"keywords":{}}],["caution",{"_index":1442,"title":{},"content":{"100":{"position":[[612,7]]},"227":{"position":[[193,7],[323,7]]},"259":{"position":[[368,7],[2057,7]]},"411":{"position":[[213,7]]},"554":{"position":[[266,7]]},"606":{"position":[[368,7]]},"718":{"position":[[269,7]]},"869":{"position":[[1701,7]]},"911":{"position":[[342,7]]},"927":{"position":[[342,7]]},"938":{"position":[[342,7]]},"954":{"position":[[342,7]]},"972":{"position":[[342,7]]},"1192":{"position":[[252,7]]},"1201":{"position":[[134,7]]},"1230":{"position":[[593,7]]},"1243":{"position":[[282,7],[744,7]]},"1293":{"position":[[134,7]]},"1307":{"position":[[134,7]]},"1317":{"position":[[134,7]]},"1330":{"position":[[134,7]]},"1341":{"position":[[134,7]]},"1352":{"position":[[134,7]]},"1359":{"position":[[134,7]]},"1380":{"position":[[134,7]]},"1394":{"position":[[250,7]]},"1404":{"position":[[134,7]]},"1415":{"position":[[134,7]]},"1423":{"position":[[253,7]]},"1432":{"position":[[134,7]]},"1472":{"position":[[358,7]]}},"keywords":{}}],["cautious",{"_index":4917,"title":{},"content":{"879":{"position":[[1261,10]]}},"keywords":{}}],["caveat",{"_index":4723,"title":{},"content":{"821":{"position":[[705,6]]},"912":{"position":[[721,6]]}},"keywords":{}}],["cccc",{"_index":3717,"title":{},"content":{"439":{"position":[[202,4],[293,4],[345,4]]}},"keywords":{}}],["cdc",{"_index":790,"title":{"194":{"position":[[10,3]]},"196":{"position":[[8,5]]},"210":{"position":[[10,4]]},"231":{"position":[[11,3]]},"233":{"position":[[8,5]]},"237":{"position":[[27,4]]},"1030":{"position":[[10,3]]}},"content":{"52":{"position":[[183,5]]},"196":{"position":[[1,4],[419,3]]},"197":{"position":[[218,4],[332,3]]},"198":{"position":[[42,3],[140,3],[1044,4],[1128,3]]},"211":{"position":[[60,5]]},"232":{"position":[[44,3],[317,3]]},"233":{"position":[[1,4],[426,3],[563,3]]},"236":{"position":[[32,3],[2837,3],[3791,3]]},"237":{"position":[[11,3],[259,3],[370,3],[1285,4],[2609,3]]},"240":{"position":[[4337,3]]},"241":{"position":[[50,3],[177,3]]},"821":{"position":[[202,3],[245,3]]},"912":{"position":[[215,3],[256,3]]},"964":{"position":[[201,3]]},"1032":{"position":[[67,3]]},"1033":{"position":[[264,3]]},"1036":{"position":[[115,3]]},"1039":{"position":[[155,3]]},"1040":{"position":[[327,3],[716,3],[840,3]]},"1042":{"position":[[90,3],[333,3],[602,3],[832,3],[871,3]]},"1043":{"position":[[754,3],[997,3],[1266,3],[1496,3],[1535,3]]},"1049":{"position":[[81,3]]},"1050":{"position":[[327,3],[716,3],[840,3]]},"1051":{"position":[[1010,3],[1259,3],[1528,3],[1758,3],[1797,3]]},"1057":{"position":[[84,3]]},"1058":{"position":[[327,3],[716,3],[840,3]]},"1059":{"position":[[774,3],[1052,3],[1321,3],[1551,3],[1590,3]]}},"keywords":{}}],["cdc_role",{"_index":5097,"title":{},"content":{"944":{"position":[[184,9],[241,9],[319,9]]}},"keywords":{}}],["cdc_rolepassword",{"_index":5116,"title":{},"content":{"947":{"position":[[812,17]]}},"keywords":{}}],["ceil",{"_index":5624,"title":{},"content":{"1140":{"position":[[2369,4],[2403,7]]},"1316":{"position":[[2369,4],[2403,7]]},"1340":{"position":[[2369,4],[2403,7]]},"1351":{"position":[[2369,4],[2403,7]]},"1431":{"position":[[2392,4],[2426,7]]}},"keywords":{}}],["celebr",{"_index":2614,"title":{},"content":{"241":{"position":[[284,9]]}},"keywords":{}}],["cell",{"_index":4320,"title":{},"content":{"616":{"position":[[598,5]]},"943":{"position":[[984,4]]},"1243":{"position":[[354,5]]}},"keywords":{}}],["central",{"_index":1276,"title":{},"content":{"84":{"position":[[1184,11]]},"1435":{"position":[[5,7]]}},"keywords":{}}],["central1",{"_index":5951,"title":{},"content":{"1277":{"position":[[306,8]]},"1278":{"position":[[165,8]]}},"keywords":{}}],["central1.gcp.snowflakecomputing.com",{"_index":5217,"title":{},"content":{"1031":{"position":[[773,36]]},"1037":{"position":[[128,35]]}},"keywords":{}}],["central1.v1.estuari",{"_index":3863,"title":{},"content":{"488":{"position":[[110,19]]},"659":{"position":[[267,19]]},"676":{"position":[[110,19]]},"691":{"position":[[110,19]]}},"keywords":{}}],["central1/keyrings/your",{"_index":1168,"title":{},"content":{"82":{"position":[[1806,22],[2492,22],[4130,22],[4633,22]]}},"keywords":{}}],["certain",{"_index":1091,"title":{},"content":{"74":{"position":[[984,7]]},"90":{"position":[[1,7]]},"91":{"position":[[175,7]]},"209":{"position":[[1358,7]]},"275":{"position":[[820,7]]},"281":{"position":[[2403,7]]},"489":{"position":[[374,7]]},"517":{"position":[[233,7]]},"640":{"position":[[27,7]]},"654":{"position":[[665,7]]},"662":{"position":[[374,7]]},"677":{"position":[[374,7]]},"692":{"position":[[374,7]]},"785":{"position":[[550,7]]},"865":{"position":[[184,7]]},"900":{"position":[[27,7]]},"907":{"position":[[1658,7]]},"909":{"position":[[1013,7]]},"923":{"position":[[1658,7]]},"925":{"position":[[1013,7]]},"936":{"position":[[1013,7]]},"952":{"position":[[1013,7]]},"968":{"position":[[1658,7]]},"970":{"position":[[1013,7]]},"1182":{"position":[[265,7]]},"1191":{"position":[[267,7]]},"1262":{"position":[[267,7]]},"1313":{"position":[[1408,7]]},"1337":{"position":[[1408,7]]},"1389":{"position":[[266,7]]},"1447":{"position":[[292,7]]},"1448":{"position":[[303,7]]},"1452":{"position":[[114,7],[146,7],[441,7],[2694,7],[2792,7],[3689,7],[3733,7],[3996,7]]}},"keywords":{}}],["certainli",{"_index":1675,"title":{},"content":{"122":{"position":[[617,9]]}},"keywords":{}}],["certif",{"_index":3701,"title":{},"content":{"436":{"position":[[558,12]]},"1268":{"position":[[424,11],[630,11]]},"1285":{"position":[[1015,11],[1125,11],[1153,11]]},"1286":{"position":[[1935,11],[2260,11],[2409,11]]},"1300":{"position":[[1015,11],[1125,11],[1153,11]]},"1301":{"position":[[1771,11],[2096,11],[2245,11]]},"1324":{"position":[[1015,11],[1125,11],[1153,11]]},"1325":{"position":[[1935,11],[2260,11],[2409,11]]}},"keywords":{}}],["certificate.verify_ca",{"_index":5933,"title":{},"content":{"1268":{"position":[[347,22]]},"1286":{"position":[[1855,22]]},"1301":{"position":[[1691,22]]},"1325":{"position":[[1855,22]]}},"keywords":{}}],["cf22902",{"_index":5230,"title":{},"content":{"1037":{"position":[[173,7]]}},"keywords":{}}],["cf22902.u",{"_index":5229,"title":{},"content":{"1037":{"position":[[117,10]]}},"keywords":{}}],["chain",{"_index":6045,"title":{},"content":{"1292":{"position":[[2406,5]]},"1306":{"position":[[2406,5]]},"1329":{"position":[[2406,5]]}},"keywords":{}}],["challeng",{"_index":2337,"title":{},"content":{"210":{"position":[[2525,10]]},"211":{"position":[[353,10]]},"241":{"position":[[522,10]]},"909":{"position":[[303,9]]},"925":{"position":[[303,9]]},"936":{"position":[[303,9]]},"952":{"position":[[303,9]]},"970":{"position":[[303,9]]}},"keywords":{}}],["challenge_r",{"_index":6047,"title":{},"content":{"1292":{"position":[[2448,13]]},"1306":{"position":[[2448,13]]},"1329":{"position":[[2448,13]]}},"keywords":{}}],["chanc",{"_index":2435,"title":{},"content":{"218":{"position":[[949,6]]},"290":{"position":[[1418,6]]},"301":{"position":[[1514,6]]},"332":{"position":[[403,6]]}},"keywords":{}}],["chang",{"_index":251,"title":{"14":{"position":[[28,9]]},"197":{"position":[[14,6]]},"285":{"position":[[0,6]]},"309":{"position":[[24,8]]},"786":{"position":[[0,6]]},"1007":{"position":[[7,8]]},"1447":{"position":[[23,8]]},"1449":{"position":[[24,8]]}},"content":{"7":{"position":[[599,6]]},"8":{"position":[[758,6]]},"11":{"position":[[947,7],[1062,7],[1306,7],[1336,6],[1750,7],[1828,6],[1912,7]]},"12":{"position":[[40,6],[359,7],[467,6]]},"13":{"position":[[1034,7],[1481,7],[1587,8],[1874,7]]},"14":{"position":[[8,7],[107,6],[119,6],[237,8],[936,8],[1003,6]]},"42":{"position":[[570,8]]},"44":{"position":[[523,7]]},"52":{"position":[[163,6]]},"55":{"position":[[145,7],[211,8],[635,6],[1076,7]]},"56":{"position":[[555,7],[718,8],[800,7]]},"62":{"position":[[354,6]]},"64":{"position":[[1055,8]]},"68":{"position":[[291,7]]},"82":{"position":[[3019,7]]},"88":{"position":[[688,7]]},"100":{"position":[[631,6],[953,7],[1039,7],[1189,7]]},"103":{"position":[[360,7]]},"113":{"position":[[729,7]]},"115":{"position":[[157,7],[1389,8]]},"124":{"position":[[1014,7]]},"125":{"position":[[1093,7]]},"126":{"position":[[138,7]]},"146":{"position":[[229,7]]},"149":{"position":[[238,7]]},"152":{"position":[[245,7]]},"160":{"position":[[869,6]]},"162":{"position":[[1271,7]]},"164":{"position":[[900,6]]},"180":{"position":[[486,7],[614,6]]},"183":{"position":[[2044,7],[2226,7]]},"185":{"position":[[85,7]]},"190":{"position":[[1946,6]]},"191":{"position":[[474,8],[1899,6]]},"192":{"position":[[1226,6]]},"196":{"position":[[9,6],[68,7],[209,8],[473,7],[613,6]]},"197":{"position":[[1,6],[150,6],[167,6],[261,7],[355,6],[391,8],[675,6],[1159,6]]},"198":{"position":[[199,6],[364,7],[559,6],[795,6],[886,8]]},"203":{"position":[[82,6]]},"208":{"position":[[884,8],[1356,8]]},"209":{"position":[[403,6],[444,6],[608,6],[649,7],[835,6],[1017,6],[1211,6],[1450,6]]},"210":{"position":[[1675,6]]},"211":{"position":[[40,6],[198,7],[386,6],[676,7],[827,6],[888,7]]},"212":{"position":[[103,6]]},"217":{"position":[[1464,6],[2060,7]]},"218":{"position":[[964,7],[2037,7]]},"227":{"position":[[250,6]]},"228":{"position":[[592,6],[1066,6]]},"229":{"position":[[750,6]]},"230":{"position":[[521,7],[783,8]]},"232":{"position":[[368,6]]},"233":{"position":[[9,6],[68,7],[209,8],[234,6],[480,7],[671,6],[798,6]]},"237":{"position":[[163,7],[494,7],[834,8],[1147,7],[1998,7],[2207,7],[2804,6]]},"239":{"position":[[1833,7],[2249,7],[2368,7],[2497,7],[2657,8]]},"240":{"position":[[1860,6],[2695,7],[4690,7],[4975,7]]},"254":{"position":[[3665,8]]},"259":{"position":[[1428,8],[2974,8]]},"264":{"position":[[19,7],[156,8]]},"271":{"position":[[204,8]]},"275":{"position":[[178,8]]},"281":{"position":[[1710,6],[1862,7]]},"285":{"position":[[54,6]]},"290":{"position":[[1532,7]]},"291":{"position":[[1062,6],[1858,7]]},"302":{"position":[[1047,6],[1767,7]]},"305":{"position":[[483,7],[512,6],[571,7]]},"306":{"position":[[131,8],[273,7],[414,7],[466,7],[548,8],[571,8]]},"307":{"position":[[71,8],[120,7],[228,7],[285,6],[1732,6],[3303,6]]},"308":{"position":[[51,7]]},"309":{"position":[[51,7],[89,8],[403,6],[630,7],[888,8],[999,6],[1161,7],[1250,6],[1492,6],[1792,6],[1894,8],[3186,6],[3627,6]]},"310":{"position":[[51,7]]},"322":{"position":[[659,7]]},"331":{"position":[[408,7],[704,7]]},"332":{"position":[[67,7]]},"333":{"position":[[457,7]]},"366":{"position":[[213,6],[566,6]]},"368":{"position":[[174,6]]},"377":{"position":[[1484,7],[1773,7]]},"397":{"position":[[492,7]]},"419":{"position":[[345,6]]},"440":{"position":[[361,6]]},"480":{"position":[[628,7],[786,7]]},"504":{"position":[[289,6]]},"547":{"position":[[346,6]]},"578":{"position":[[301,7]]},"595":{"position":[[228,7],[625,7],[991,7]]},"616":{"position":[[444,7],[542,8]]},"639":{"position":[[287,6]]},"754":{"position":[[763,8],[853,7]]},"755":{"position":[[174,6]]},"764":{"position":[[436,6]]},"767":{"position":[[1298,7],[1651,7]]},"768":{"position":[[174,6]]},"777":{"position":[[436,6]]},"785":{"position":[[86,6],[112,6],[264,6],[307,7],[417,6],[643,6]]},"786":{"position":[[24,6],[110,6]]},"792":{"position":[[1593,7]]},"794":{"position":[[969,8],[1059,7]]},"795":{"position":[[172,6]]},"804":{"position":[[434,6]]},"809":{"position":[[969,8],[1059,7]]},"810":{"position":[[172,6]]},"819":{"position":[[434,6]]},"821":{"position":[[1343,7]]},"824":{"position":[[1364,7],[1715,7]]},"825":{"position":[[805,8],[895,7]]},"826":{"position":[[172,6]]},"835":{"position":[[434,6]]},"840":{"position":[[762,8],[1482,8],[1917,8],[2292,8]]},"842":{"position":[[2053,7]]},"849":{"position":[[704,8],[883,8],[1237,8],[2373,8],[3036,8],[3432,8]]},"856":{"position":[[99,6]]},"857":{"position":[[128,6]]},"867":{"position":[[425,6],[1404,7],[1509,7]]},"869":{"position":[[728,7],[1080,8],[1655,7],[1749,7]]},"870":{"position":[[43,7],[77,6]]},"903":{"position":[[239,6],[592,6]]},"904":{"position":[[2204,7]]},"905":{"position":[[177,6]]},"909":{"position":[[402,6]]},"915":{"position":[[239,6],[592,6]]},"917":{"position":[[56,6],[1713,7],[1924,6]]},"918":{"position":[[2496,7]]},"920":{"position":[[177,6]]},"922":{"position":[[47,6],[306,8],[652,7],[3210,6]]},"925":{"position":[[402,6]]},"930":{"position":[[239,6],[592,6]]},"931":{"position":[[1866,7]]},"932":{"position":[[177,6]]},"936":{"position":[[402,6]]},"942":{"position":[[87,8],[193,7]]},"945":{"position":[[358,7],[742,6]]},"947":{"position":[[1131,6]]},"948":{"position":[[177,6]]},"952":{"position":[[402,6]]},"963":{"position":[[393,6],[746,6]]},"965":{"position":[[56,6],[1713,7],[1924,6]]},"966":{"position":[[177,6]]},"970":{"position":[[402,6]]},"976":{"position":[[200,7]]},"1006":{"position":[[281,8]]},"1007":{"position":[[72,7]]},"1008":{"position":[[2011,7]]},"1023":{"position":[[326,6]]},"1036":{"position":[[153,7],[237,7]]},"1040":{"position":[[12,6],[410,6],[792,6]]},"1047":{"position":[[867,7]]},"1050":{"position":[[12,6],[410,6],[792,6]]},"1055":{"position":[[867,7]]},"1058":{"position":[[12,6],[410,6],[792,6]]},"1063":{"position":[[867,7]]},"1077":{"position":[[405,7],[843,7]]},"1155":{"position":[[651,6]]},"1200":{"position":[[483,7]]},"1201":{"position":[[43,7],[96,7]]},"1286":{"position":[[1026,8],[1116,7]]},"1292":{"position":[[2486,6],[2521,7]]},"1293":{"position":[[43,7],[96,7]]},"1301":{"position":[[862,8],[952,7]]},"1306":{"position":[[2486,6],[2521,7]]},"1307":{"position":[[43,7],[96,7]]},"1317":{"position":[[43,7],[96,7],[349,7]]},"1325":{"position":[[1026,8],[1116,7]]},"1329":{"position":[[2486,6],[2521,7]]},"1330":{"position":[[43,7],[96,7]]},"1341":{"position":[[43,7],[96,7],[349,7]]},"1352":{"position":[[43,7],[96,7],[349,7]]},"1359":{"position":[[43,7],[96,7]]},"1380":{"position":[[43,7],[96,7]]},"1383":{"position":[[1847,6]]},"1404":{"position":[[43,7],[96,7]]},"1415":{"position":[[43,7],[96,7]]},"1432":{"position":[[43,7],[96,7],[349,7]]},"1435":{"position":[[211,7]]},"1437":{"position":[[1458,8]]},"1442":{"position":[[1573,7]]},"1447":{"position":[[163,7],[311,7],[691,7]]},"1448":{"position":[[237,6]]},"1449":{"position":[[20,6],[120,6],[210,7],[266,6]]},"1451":{"position":[[556,8]]},"1452":{"position":[[408,8],[1576,7],[1836,6],[2074,7],[2155,7]]}},"keywords":{}}],["changeda",{"_index":3041,"title":{},"content":{"306":{"position":[[325,8]]}},"keywords":{}}],["changedth",{"_index":3039,"title":{},"content":{"306":{"position":[[163,10],[213,10]]}},"keywords":{}}],["changelog",{"_index":5848,"title":{"1201":{"position":[[0,10]]},"1293":{"position":[[0,10]]},"1307":{"position":[[0,10]]},"1317":{"position":[[0,10]]},"1330":{"position":[[0,10]]},"1341":{"position":[[0,10]]},"1352":{"position":[[0,10]]},"1359":{"position":[[0,10]]},"1380":{"position":[[0,10]]},"1404":{"position":[[0,10]]},"1415":{"position":[[0,10]]},"1432":{"position":[[0,10]]}},"content":{"1201":{"position":[[5,9]]},"1293":{"position":[[5,9]]},"1307":{"position":[[5,9]]},"1317":{"position":[[5,9]]},"1330":{"position":[[5,9]]},"1341":{"position":[[5,9]]},"1352":{"position":[[5,9]]},"1359":{"position":[[5,9]]},"1380":{"position":[[5,9]]},"1404":{"position":[[5,9]]},"1415":{"position":[[5,9]]},"1432":{"position":[[5,9]]},"1448":{"position":[[1164,9]]}},"keywords":{}}],["changes:flowctl",{"_index":2822,"title":{},"content":{"275":{"position":[[370,15]]}},"keywords":{}}],["changesticketsticket",{"_index":4394,"title":{},"content":{"649":{"position":[[472,20]]}},"keywords":{}}],["changestreampreandpostimag",{"_index":4694,"title":{},"content":{"786":{"position":[[360,28]]}},"keywords":{}}],["channel",{"_index":5177,"title":{},"content":{"1012":{"position":[[69,8]]},"1015":{"position":[[80,8],[109,8]]},"1292":{"position":[[2557,7]]},"1306":{"position":[[2557,7]]},"1329":{"position":[[2557,7]]},"1362":{"position":[[585,8],[594,7],[622,7]]},"1363":{"position":[[285,8]]}},"keywords":{}}],["channel_annotations_a1",{"_index":5382,"title":{},"content":{"1102":{"position":[[180,22]]}},"keywords":{}}],["channel_annotations_a1channel_basic_a2channel_cards_a1channel_combined_a2channel_demographics_a1channel_device_os_a2channel_end_screens_a1channel_playback_location_a2channel_province_a2channel_sharing_service_a1channel_subtitles_a2channel_traffic_source_a2playlist_basic_a1playlist_combined_a1playlist_device_os_a1playlist_playback_location_a1playlist_province_a1playlist_traffic_source_a1",{"_index":5380,"title":{},"content":{"1099":{"position":[[81,389]]}},"keywords":{}}],["channel_memb",{"_index":5186,"title":{},"content":{"1016":{"position":[[315,15]]}},"keywords":{}}],["char",{"_index":5629,"title":{},"content":{"1140":{"position":[[2444,4]]},"1209":{"position":[[421,4]]},"1292":{"position":[[2597,4]]},"1306":{"position":[[2597,4]]},"1316":{"position":[[2444,4]]},"1329":{"position":[[2597,4]]},"1340":{"position":[[2444,4]]},"1351":{"position":[[2444,4]]},"1379":{"position":[[2747,4]]},"1403":{"position":[[2747,4]]},"1414":{"position":[[2747,4]]},"1431":{"position":[[2467,4]]}},"keywords":{}}],["char_length",{"_index":5636,"title":{},"content":{"1140":{"position":[[2575,11]]},"1316":{"position":[[2575,11]]},"1340":{"position":[[2575,11]]},"1351":{"position":[[2575,11]]},"1379":{"position":[[2790,11]]},"1403":{"position":[[2790,11]]},"1414":{"position":[[2790,11]]},"1431":{"position":[[2598,11]]}},"keywords":{}}],["charact",{"_index":1731,"title":{},"content":{"130":{"position":[[224,11]]},"419":{"position":[[2092,11],[2661,9]]},"441":{"position":[[701,11],[1270,9]]},"489":{"position":[[390,11],[437,10]]},"504":{"position":[[1721,11],[2290,9]]},"547":{"position":[[2094,11],[2663,9]]},"639":{"position":[[1719,11],[2288,9]]},"662":{"position":[[390,11],[437,10]]},"677":{"position":[[390,11],[437,10]]},"692":{"position":[[390,11],[437,10]]},"872":{"position":[[39,10]]},"1023":{"position":[[2075,11],[2644,9]]},"1140":{"position":[[2483,9]]},"1144":{"position":[[905,9],[996,9]]},"1213":{"position":[[582,9],[673,9]]},"1292":{"position":[[2640,9]]},"1306":{"position":[[2640,9]]},"1316":{"position":[[2483,9]]},"1329":{"position":[[2640,9]]},"1340":{"position":[[2483,9]]},"1351":{"position":[[2483,9]]},"1379":{"position":[[2846,9]]},"1403":{"position":[[2846,9]]},"1414":{"position":[[2846,9]]},"1431":{"position":[[2506,9]]}},"keywords":{}}],["character_len",{"_index":6330,"title":{},"content":{"1379":{"position":[[2902,13]]},"1403":{"position":[[2902,13]]},"1414":{"position":[[2902,13]]}},"keywords":{}}],["character_length",{"_index":5633,"title":{},"content":{"1140":{"position":[[2523,16]]},"1316":{"position":[[2523,16]]},"1340":{"position":[[2523,16]]},"1351":{"position":[[2523,16]]},"1431":{"position":[[2546,16]]}},"keywords":{}}],["charg",{"_index":5302,"title":{},"content":{"1078":{"position":[[411,7]]},"1388":{"position":[[230,8],[508,7]]}},"keywords":{}}],["chargebe",{"_index":3328,"title":{"456":{"position":[[0,9]]}},"content":{"364":{"position":[[924,9]]},"457":{"position":[[56,9]]},"458":{"position":[[15,9],[59,9]]},"459":{"position":[[250,9]]},"460":{"position":[[82,9],[153,9],[397,9],[502,9],[626,9]]}},"keywords":{}}],["chargebee.dev",{"_index":3329,"title":{},"content":{"364":{"position":[[980,13]]}},"keywords":{}}],["chargebee:dev",{"_index":3772,"title":{},"content":{"461":{"position":[[90,13]]}},"keywords":{}}],["charset",{"_index":6054,"title":{},"content":{"1292":{"position":[[2678,7]]},"1306":{"position":[[2678,7]]},"1329":{"position":[[2678,7]]}},"keywords":{}}],["chart",{"_index":1833,"title":{},"content":{"146":{"position":[[216,5]]},"149":{"position":[[225,5]]},"152":{"position":[[232,5]]}},"keywords":{}}],["chat",{"_index":3389,"title":{"1103":{"position":[[8,4]]}},"content":{"364":{"position":[[3556,4]]},"1106":{"position":[[259,4]]}},"keywords":{}}],["chat:dev",{"_index":3390,"title":{},"content":{"364":{"position":[[3615,8]]},"1108":{"position":[[97,8]]}},"keywords":{}}],["cheaper",{"_index":6399,"title":{},"content":{"1392":{"position":[[99,7]]}},"keywords":{}}],["cheapli",{"_index":1510,"title":{},"content":{"106":{"position":[[366,7]]},"112":{"position":[[964,7]]},"207":{"position":[[580,7]]},"239":{"position":[[1021,7]]},"1391":{"position":[[1017,7]]}},"keywords":{}}],["check",{"_index":812,"title":{"182":{"position":[[0,5]]}},"content":{"55":{"position":[[135,5]]},"102":{"position":[[497,7]]},"158":{"position":[[696,6],[735,6]]},"177":{"position":[[358,5]]},"183":{"position":[[3420,5]]},"190":{"position":[[1839,5]]},"192":{"position":[[2201,5]]},"210":{"position":[[441,5],[3911,5]]},"213":{"position":[[506,5]]},"221":{"position":[[1072,5]]},"222":{"position":[[317,5]]},"223":{"position":[[283,5]]},"224":{"position":[[336,5]]},"237":{"position":[[1000,5]]},"239":{"position":[[2737,5]]},"240":{"position":[[4357,5]]},"253":{"position":[[200,5]]},"254":{"position":[[2048,5]]},"264":{"position":[[592,5]]},"267":{"position":[[682,9]]},"270":{"position":[[409,5]]},"274":{"position":[[699,5]]},"275":{"position":[[942,5]]},"280":{"position":[[118,5]]},"281":{"position":[[2477,6]]},"295":{"position":[[1629,5]]},"296":{"position":[[7620,5]]},"313":{"position":[[200,5]]},"332":{"position":[[667,8]]},"374":{"position":[[125,5]]},"560":{"position":[[354,5]]},"578":{"position":[[275,5]]},"757":{"position":[[1731,5],[1794,5]]},"770":{"position":[[1731,5],[1794,5]]},"797":{"position":[[1731,5],[1794,5]]},"812":{"position":[[1731,5],[1794,5]]},"828":{"position":[[1731,5],[1794,5]]},"840":{"position":[[705,5]]},"842":{"position":[[2031,5]]},"849":{"position":[[511,5],[648,5],[822,5],[1180,5]]},"879":{"position":[[1212,6],[1244,7]]},"907":{"position":[[1831,5]]},"923":{"position":[[1831,5]]},"947":{"position":[[1069,8]]},"968":{"position":[[1831,5]]},"1140":{"position":[[2625,5]]},"1292":{"position":[[2722,5]]},"1298":{"position":[[283,5]]},"1306":{"position":[[2722,5]]},"1313":{"position":[[1581,5]]},"1316":{"position":[[2625,5]]},"1322":{"position":[[317,5]]},"1329":{"position":[[2722,5]]},"1335":{"position":[[317,5]]},"1337":{"position":[[1581,5]]},"1340":{"position":[[2625,5]]},"1346":{"position":[[283,5]]},"1351":{"position":[[2625,5]]},"1370":{"position":[[598,5]]},"1379":{"position":[[2951,5]]},"1383":{"position":[[449,5],[471,5]]},"1394":{"position":[[658,5]]},"1403":{"position":[[2951,5]]},"1414":{"position":[[2951,5]]},"1431":{"position":[[2648,5]]},"1448":{"position":[[945,5]]}},"keywords":{}}],["checkbox",{"_index":4738,"title":{},"content":{"840":{"position":[[742,9]]},"849":{"position":[[521,8],[658,8],[832,8],[1217,9]]},"885":{"position":[[270,8]]},"947":{"position":[[1082,8]]},"964":{"position":[[485,8]]}},"keywords":{}}],["checkout_sess",{"_index":5304,"title":{},"content":{"1078":{"position":[[487,17]]}},"keywords":{}}],["checkout_sessions_line_item",{"_index":5306,"title":{},"content":{"1078":{"position":[[582,28]]}},"keywords":{}}],["checkpoint",{"_index":559,"title":{},"content":{"21":{"position":[[117,11],[243,11],[326,11],[384,11]]},"48":{"position":[[304,10]]},"49":{"position":[[370,12]]},"112":{"position":[[454,10]]},"1379":{"position":[[3000,10]]},"1403":{"position":[[3000,10]]},"1414":{"position":[[3000,10]]},"1434":{"position":[[368,11]]},"1435":{"position":[[86,11],[176,10],[234,10],[455,10]]},"1437":{"position":[[107,11],[166,12],[390,10],[1022,10],[1310,10]]},"1438":{"position":[[63,10]]},"1439":{"position":[[440,11],[575,11],[973,10],[1000,11],[1100,11],[1153,10],[1241,11]]},"1444":{"position":[[296,11],[409,10],[544,11],[781,11],[941,10]]}},"keywords":{}}],["checksum",{"_index":141,"title":{},"content":{"3":{"position":[[915,8]]},"1292":{"position":[[2768,8]]},"1306":{"position":[[2768,8]]},"1329":{"position":[[2768,8]]}},"keywords":{}}],["child",{"_index":6605,"title":{},"content":{"1461":{"position":[[1869,5]]}},"keywords":{}}],["child_join_column_nam",{"_index":4796,"title":{},"content":{"843":{"position":[[511,23]]}},"keywords":{}}],["child_table_nam",{"_index":4797,"title":{},"content":{"843":{"position":[[547,17]]}},"keywords":{}}],["children",{"_index":4254,"title":{},"content":{"593":{"position":[[626,8]]}},"keywords":{}}],["chip",{"_index":1805,"title":{},"content":{"138":{"position":[[2434,4]]},"142":{"position":[[2512,4]]},"169":{"position":[[380,5]]}},"keywords":{}}],["chmod",{"_index":886,"title":{},"content":{"58":{"position":[[458,5],[637,5]]},"169":{"position":[[699,5],[881,5]]}},"keywords":{}}],["choic",{"_index":2037,"title":{},"content":{"175":{"position":[[129,7]]},"185":{"position":[[28,7]]},"189":{"position":[[596,6]]},"428":{"position":[[140,6]]},"429":{"position":[[1068,7]]},"480":{"position":[[567,6]]},"784":{"position":[[207,7]]},"821":{"position":[[1284,6]]},"1198":{"position":[[296,7]]},"1255":{"position":[[207,7]]},"1289":{"position":[[913,7]]},"1322":{"position":[[1132,7]]},"1436":{"position":[[74,6]]}},"keywords":{}}],["choos",{"_index":810,"title":{"1077":{"position":[[0,8]]}},"content":{"55":{"position":[[9,6]]},"80":{"position":[[268,6]]},"81":{"position":[[1209,7]]},"92":{"position":[[254,7]]},"113":{"position":[[501,6]]},"137":{"position":[[360,6]]},"138":{"position":[[306,6]]},"141":{"position":[[616,6]]},"142":{"position":[[419,6]]},"170":{"position":[[127,6]]},"183":{"position":[[365,6]]},"190":{"position":[[88,6]]},"192":{"position":[[1309,9]]},"204":{"position":[[707,8]]},"206":{"position":[[1056,6]]},"217":{"position":[[337,6],[357,6]]},"218":{"position":[[325,6],[1602,6]]},"221":{"position":[[489,6]]},"222":{"position":[[823,6]]},"223":{"position":[[823,8]]},"228":{"position":[[202,6],[255,6]]},"230":{"position":[[87,6],[467,6],[956,6],[1067,6]]},"240":{"position":[[2545,6]]},"259":{"position":[[1085,6],[2666,6]]},"266":{"position":[[323,6]]},"267":{"position":[[389,6],[740,6]]},"290":{"position":[[314,6]]},"291":{"position":[[249,6],[1193,6],[1550,6]]},"301":{"position":[[267,6]]},"302":{"position":[[249,6],[1139,6]]},"324":{"position":[[1064,6]]},"375":{"position":[[258,6]]},"377":{"position":[[1340,6]]},"385":{"position":[[62,6]]},"429":{"position":[[250,6]]},"436":{"position":[[637,6]]},"522":{"position":[[341,6]]},"530":{"position":[[341,6]]},"534":{"position":[[488,6]]},"548":{"position":[[764,6]]},"595":{"position":[[62,6],[1886,6]]},"645":{"position":[[344,6]]},"652":{"position":[[344,6]]},"767":{"position":[[1504,6]]},"792":{"position":[[389,8]]},"824":{"position":[[1568,6]]},"855":{"position":[[140,6]]},"869":{"position":[[1317,6]]},"918":{"position":[[389,8]]},"947":{"position":[[122,6]]},"1077":{"position":[[89,7]]},"1085":{"position":[[1100,6]]},"1087":{"position":[[173,6],[240,6]]},"1199":{"position":[[67,6]]},"1204":{"position":[[220,6],[403,6]]},"1243":{"position":[[1393,7]]},"1289":{"position":[[390,8]]},"1298":{"position":[[823,8]]},"1321":{"position":[[170,8]]},"1322":{"position":[[823,6]]},"1334":{"position":[[170,8]]},"1335":{"position":[[823,6]]},"1346":{"position":[[823,8]]},"1366":{"position":[[75,6]]},"1391":{"position":[[73,6],[335,6]]}},"keywords":{}}],["chose",{"_index":1087,"title":{},"content":{"74":{"position":[[885,5]]},"140":{"position":[[289,6]]},"267":{"position":[[1187,6]]},"268":{"position":[[8,5]]},"269":{"position":[[8,5]]},"385":{"position":[[792,6]]}},"keywords":{}}],["chosen",{"_index":3678,"title":{},"content":{"432":{"position":[[801,7],[904,7]]},"517":{"position":[[999,6],[1233,6],[1733,6]]},"556":{"position":[[1350,6]]}},"keywords":{}}],["chronolog",{"_index":6397,"title":{},"content":{"1391":{"position":[[698,13]]}},"keywords":{}}],["chunk",{"_index":3124,"title":{},"content":{"320":{"position":[[1008,6]]},"370":{"position":[[782,5]]},"517":{"position":[[2215,7]]},"595":{"position":[[441,7]]},"757":{"position":[[1549,5]]},"770":{"position":[[1549,5]]},"797":{"position":[[1549,5]]},"812":{"position":[[1549,5]]},"828":{"position":[[1549,5]]},"842":{"position":[[1617,6]]},"867":{"position":[[874,5],[1033,5]]},"879":{"position":[[1031,5]]},"907":{"position":[[565,5]]},"923":{"position":[[565,5]]},"934":{"position":[[565,5]]},"950":{"position":[[565,5]]},"968":{"position":[[565,5]]},"1045":{"position":[[550,5]]},"1053":{"position":[[550,5]]},"1061":{"position":[[550,5]]}},"keywords":{}}],["cipher",{"_index":6060,"title":{},"content":{"1292":{"position":[[2812,6]]},"1306":{"position":[[2812,6]]},"1329":{"position":[[2812,6]]}},"keywords":{}}],["ciqaw8bc2au779cgdmfujwphnlectaj9rl949sbvpq6eyac3edessqcnysjkd3ewx8xrtrghqx327",{"_index":1208,"title":{},"content":{"82":{"position":[[4736,77]]}},"keywords":{}}],["ciqaw8bc2gdywrjtp3ikvgkti2xazc6f4p/d/pcblczcz8bziuissqcnysjkiptagfkil01uibqp056c",{"_index":1183,"title":{},"content":{"82":{"position":[[2595,80]]}},"keywords":{}}],["circl",{"_index":1787,"title":{},"content":{"138":{"position":[[1488,8]]},"141":{"position":[[1490,8]]},"142":{"position":[[1497,8]]}},"keywords":{}}],["circumst",{"_index":4687,"title":{},"content":{"785":{"position":[[558,14]]},"821":{"position":[[392,13]]},"912":{"position":[[403,13]]},"1147":{"position":[[9,14]]},"1174":{"position":[[9,14]]},"1216":{"position":[[9,14]]},"1224":{"position":[[9,14]]}},"keywords":{}}],["circumv",{"_index":5018,"title":{},"content":{"910":{"position":[[209,11]]},"926":{"position":[[209,11]]},"937":{"position":[[209,11]]},"953":{"position":[[209,11]]},"971":{"position":[[209,11]]}},"keywords":{}}],["citi",{"_index":1585,"title":{"190":{"position":[[8,4]]}},"content":{"110":{"position":[[1519,4]]},"189":{"position":[[21,4],[79,4],[90,4],[420,4],[487,4],[779,4]]},"190":{"position":[[1088,4],[2047,4]]},"193":{"position":[[54,4],[157,4]]}},"keywords":{}}],["citibikedata",{"_index":2166,"title":{},"content":{"192":{"position":[[1272,12]]}},"keywords":{}}],["class",{"_index":943,"title":{},"content":{"63":{"position":[[442,7]]},"102":{"position":[[110,5]]},"103":{"position":[[120,5]]},"104":{"position":[[26,5]]},"281":{"position":[[1364,5]]},"296":{"position":[[5444,5],[5845,5],[6096,5]]},"315":{"position":[[1540,5],[1835,5]]},"517":{"position":[[1141,5],[1355,5],[1844,5]]},"1379":{"position":[[3072,5]]},"1403":{"position":[[3072,5]]},"1414":{"position":[[3072,5]]}},"keywords":{}}],["class_origin",{"_index":6063,"title":{},"content":{"1292":{"position":[[2860,12]]},"1306":{"position":[[2860,12]]},"1329":{"position":[[2860,12]]}},"keywords":{}}],["classesproduct",{"_index":5369,"title":{},"content":{"1096":{"position":[[279,14]]}},"keywords":{}}],["classestax",{"_index":5377,"title":{},"content":{"1096":{"position":[[442,10]]}},"keywords":{}}],["classifi",{"_index":5639,"title":{},"content":{"1140":{"position":[[2659,10]]},"1316":{"position":[[2659,10]]},"1340":{"position":[[2659,10]]},"1351":{"position":[[2659,10]]},"1431":{"position":[[2682,10]]}},"keywords":{}}],["clean",{"_index":683,"title":{"242":{"position":[[0,5]]}},"content":{"34":{"position":[[866,5]]},"228":{"position":[[998,6]]},"242":{"position":[[38,5],[356,5]]},"254":{"position":[[3998,5]]},"332":{"position":[[252,6]]},"922":{"position":[[978,5]]}},"keywords":{}}],["clear",{"_index":1950,"title":{},"content":{"164":{"position":[[1812,8]]},"1243":{"position":[[939,5]]},"1461":{"position":[[1515,5]]}},"keywords":{}}],["clearli",{"_index":2864,"title":{},"content":{"280":{"position":[[448,7]]}},"keywords":{}}],["cleartext",{"_index":1199,"title":{},"content":{"82":{"position":[[3690,9]]}},"keywords":{}}],["cli",{"_index":1026,"title":{"169":{"position":[[26,4]]},"340":{"position":[[30,4]]},"384":{"position":[[34,4]]},"446":{"position":[[34,4]]},"1083":{"position":[[54,4]]}},"content":{"68":{"position":[[684,4]]},"79":{"position":[[325,4]]},"103":{"position":[[453,3]]},"154":{"position":[[1985,3],[1999,3]]},"169":{"position":[[1551,3]]},"238":{"position":[[147,3]]},"253":{"position":[[155,3]]},"257":{"position":[[88,4]]},"263":{"position":[[121,3]]},"267":{"position":[[1959,3]]},"270":{"position":[[221,3]]},"274":{"position":[[519,3]]},"284":{"position":[[30,3]]},"295":{"position":[[1584,3]]},"313":{"position":[[155,3]]},"329":{"position":[[1066,3]]},"338":{"position":[[591,4]]},"340":{"position":[[25,3],[176,4],[411,3]]},"341":{"position":[[55,3]]},"382":{"position":[[144,4]]},"444":{"position":[[147,4]]},"683":{"position":[[224,4]]},"685":{"position":[[86,4]]},"686":{"position":[[56,4]]},"855":{"position":[[379,4]]},"943":{"position":[[228,4],[654,3],[694,3],[739,3]]},"1067":{"position":[[386,4]]},"1081":{"position":[[162,4]]},"1083":{"position":[[126,4]]},"1231":{"position":[[65,4]]},"1243":{"position":[[1322,4]]},"1248":{"position":[[65,4]]},"1461":{"position":[[1679,4]]}},"keywords":{}}],["cli.creat",{"_index":5797,"title":{},"content":{"1183":{"position":[[743,10]]}},"keywords":{}}],["cli.manag",{"_index":1753,"title":{},"content":{"135":{"position":[[597,10]]}},"keywords":{}}],["click",{"_index":359,"title":{},"content":{"12":{"position":[[144,5]]},"68":{"position":[[364,5],[444,5],[602,5]]},"80":{"position":[[433,5]]},"138":{"position":[[460,5],[2104,5],[2480,8],[2743,5]]},"139":{"position":[[10,5]]},"140":{"position":[[10,5]]},"141":{"position":[[2060,5]]},"142":{"position":[[2164,5],[2558,8],[2828,5]]},"143":{"position":[[10,5]]},"144":{"position":[[60,8],[176,8]]},"145":{"position":[[10,5]]},"146":{"position":[[240,8],[842,7]]},"148":{"position":[[10,5]]},"149":{"position":[[249,8],[815,7],[1316,5]]},"151":{"position":[[10,5]]},"152":{"position":[[256,8],[818,7]]},"173":{"position":[[858,5],[1015,5]]},"181":{"position":[[36,5]]},"182":{"position":[[94,5],[145,5]]},"183":{"position":[[137,5],[480,5],[663,5]]},"184":{"position":[[175,5],[226,5],[923,5],[958,5]]},"190":{"position":[[62,5],[235,5],[406,5],[683,5],[1524,5],[1865,5],[2162,5]]},"191":{"position":[[2128,5],[2181,5]]},"192":{"position":[[194,5],[294,5],[321,5],[1693,5],[1725,5],[1917,5],[1946,5],[2227,5]]},"204":{"position":[[638,8]]},"207":{"position":[[706,5]]},"217":{"position":[[311,5],[748,5],[944,5],[1787,5],[2091,5],[2155,5],[2246,5]]},"218":{"position":[[155,5],[518,5],[1168,5],[1211,5],[1640,5],[1666,5],[1872,5],[2063,5],[2081,5]]},"228":{"position":[[173,5],[316,5],[731,5],[836,5],[921,5],[1220,5],[1481,5]]},"230":{"position":[[529,5],[792,5],[1179,5],[1255,5]]},"239":{"position":[[306,8],[373,5],[1511,5]]},"240":{"position":[[2119,8],[3893,8]]},"259":{"position":[[79,5],[127,5],[706,5],[1109,5],[1135,5],[1375,5],[1437,5],[1449,5],[1760,5],[1808,5],[2690,5],[2716,5],[2921,5],[2983,5],[2995,5]]},"267":{"position":[[151,5],[848,5],[1031,5]]},"290":{"position":[[288,5],[369,5],[1103,5],[1556,5],[1634,5],[1849,5]]},"291":{"position":[[147,5],[566,5],[770,5],[1574,5],[1600,5],[1805,5],[1834,5],[1891,5]]},"301":{"position":[[241,5],[315,5],[1312,5],[1608,5],[1814,5]]},"302":{"position":[[147,5],[566,5],[770,5],[1470,5],[1509,5],[1714,5],[1743,5],[1803,5]]},"307":{"position":[[632,5]]},"308":{"position":[[893,5]]},"309":{"position":[[1673,5]]},"349":{"position":[[64,5],[119,5]]},"436":{"position":[[589,5],[681,5]]},"472":{"position":[[479,5],[555,5]]},"479":{"position":[[64,5],[118,5],[884,5]]},"486":{"position":[[31,5],[153,5],[421,5]]},"487":{"position":[[80,5]]},"488":{"position":[[556,5]]},"515":{"position":[[515,5]]},"531":{"position":[[292,5]]},"556":{"position":[[374,5]]},"658":{"position":[[31,5],[153,5],[421,5]]},"659":{"position":[[713,5]]},"674":{"position":[[31,5],[153,5],[421,5]]},"675":{"position":[[323,5]]},"676":{"position":[[556,5]]},"689":{"position":[[31,5],[153,5],[421,5]]},"690":{"position":[[100,5]]},"691":{"position":[[556,5]]},"725":{"position":[[54,5]]},"726":{"position":[[472,5]]},"840":{"position":[[1054,5],[1158,5],[1257,5],[1354,5],[1735,5],[1764,5]]},"849":{"position":[[447,5],[1655,5],[2065,5],[2186,5],[2776,5],[2805,5]]},"895":{"position":[[615,5]]},"931":{"position":[[692,5],[764,5]]},"947":{"position":[[77,5],[149,5],[830,5],[936,5],[1244,8],[1276,5]]},"1047":{"position":[[397,5],[475,5],[581,5]]},"1055":{"position":[[397,5],[475,5],[581,5]]},"1063":{"position":[[397,5],[475,5],[581,5]]},"1092":{"position":[[64,5],[119,5]]},"1118":{"position":[[718,5],[878,5],[1046,5]]},"1177":{"position":[[390,5]]},"1383":{"position":[[486,5]]},"1455":{"position":[[468,8],[480,5]]},"1470":{"position":[[553,5]]},"1479":{"position":[[404,5]]}},"keywords":{}}],["clickemail",{"_index":4451,"title":{},"content":{"697":{"position":[[123,10]]}},"keywords":{}}],["clickview",{"_index":4132,"title":{"560":{"position":[[0,10]]}},"content":{"560":{"position":[[36,9],[253,9]]}},"keywords":{}}],["client",{"_index":2094,"title":{"250":{"position":[[21,7]]}},"content":{"185":{"position":[[18,6]]},"250":{"position":[[22,6],[83,6],[152,6]]},"320":{"position":[[1308,7]]},"367":{"position":[[164,7]]},"384":{"position":[[153,6],[282,6],[296,6]]},"387":{"position":[[480,6],[494,6],[589,6],[607,6]]},"428":{"position":[[60,7]]},"429":{"position":[[629,6]]},"432":{"position":[[184,6],[434,6],[690,6]]},"436":{"position":[[249,6],[261,6],[534,8],[599,6],[746,6],[970,8],[1012,6]]},"438":{"position":[[796,6],[810,6],[935,6],[953,6]]},"446":{"position":[[91,6],[101,6]]},"448":{"position":[[383,6],[397,6],[503,6],[521,6]]},"552":{"position":[[312,6],[488,6]]},"554":{"position":[[576,6],[590,6]]},"556":{"position":[[592,6],[606,6],[701,6],[719,6],[1423,8]]},"628":{"position":[[71,6]]},"632":{"position":[[235,7]]},"670":{"position":[[71,6],[85,6],[167,6],[185,6]]},"671":{"position":[[132,6]]},"728":{"position":[[194,6],[221,6],[263,6],[294,6]]},"739":{"position":[[153,6],[169,6]]},"741":{"position":[[71,6],[85,6],[165,6],[183,6]]},"750":{"position":[[791,6]]},"752":{"position":[[704,7]]},"753":{"position":[[744,7],[1360,7]]},"766":{"position":[[791,6]]},"767":{"position":[[1698,7],[2037,7]]},"789":{"position":[[1192,6]]},"791":{"position":[[709,7]]},"792":{"position":[[1638,7],[2029,7]]},"793":{"position":[[715,7],[1383,7]]},"807":{"position":[[779,6]]},"808":{"position":[[733,7],[1329,7]]},"823":{"position":[[779,6]]},"824":{"position":[[1760,7],[2151,7]]},"885":{"position":[[71,6],[85,6],[164,6],[182,6]]},"898":{"position":[[726,6],[949,6]]},"904":{"position":[[1270,7]]},"918":{"position":[[1562,7]]},"919":{"position":[[744,7]]},"922":{"position":[[157,6],[596,7],[740,6],[2885,6]]},"931":{"position":[[925,7]]},"988":{"position":[[253,6],[264,6]]},"989":{"position":[[749,6],[760,6],[1174,6],[1188,6]]},"991":{"position":[[302,6],[327,6],[443,6],[472,6]]},"1003":{"position":[[253,6],[264,6]]},"1004":{"position":[[832,6],[843,6],[1257,6],[1271,6]]},"1009":{"position":[[328,6],[365,6],[390,6],[506,6],[535,6]]},"1010":{"position":[[206,6]]},"1043":{"position":[[624,7]]},"1051":{"position":[[880,7]]},"1059":{"position":[[644,7]]},"1067":{"position":[[601,6]]},"1070":{"position":[[435,6],[445,6],[545,6],[559,6]]},"1101":{"position":[[71,6],[86,6],[143,6]]},"1133":{"position":[[432,6],[458,6],[544,6],[574,6]]},"1285":{"position":[[1118,6],[1146,6],[1246,6],[1266,6]]},"1286":{"position":[[2402,6],[2475,7]]},"1292":{"position":[[2916,6]]},"1300":{"position":[[1118,6],[1146,6],[1246,6],[1266,6]]},"1301":{"position":[[2238,6],[2311,7]]},"1306":{"position":[[2916,6]]},"1324":{"position":[[1118,6],[1146,6],[1246,6],[1266,6]]},"1325":{"position":[[2402,6],[2475,7]]},"1329":{"position":[[2916,6]]},"1362":{"position":[[323,6],[333,6],[394,6],[422,6]]},"1373":{"position":[[862,7]]},"1374":{"position":[[862,7]]},"1397":{"position":[[641,7]]},"1398":{"position":[[640,7]]},"1409":{"position":[[624,7]]},"1418":{"position":[[66,7],[83,8]]}},"keywords":{}}],["client.xxxxxxxxx",{"_index":3499,"title":{},"content":{"388":{"position":[[248,16]]}},"keywords":{}}],["client_email",{"_index":4092,"title":{},"content":{"548":{"position":[[1369,13]]}},"keywords":{}}],["client_id",{"_index":3496,"title":{},"content":{"388":{"position":[[215,10]]},"446":{"position":[[264,9]]},"449":{"position":[[213,10]]},"557":{"position":[[221,10]]},"671":{"position":[[112,10]]},"726":{"position":[[346,9]]},"728":{"position":[[183,10]]},"742":{"position":[[110,10]]},"886":{"position":[[121,10]]},"992":{"position":[[130,10]]},"1010":{"position":[[213,10]]},"1016":{"position":[[161,10]]},"1071":{"position":[[220,10]]},"1362":{"position":[[312,10]]},"1363":{"position":[[181,10]]}},"keywords":{}}],["client_secret",{"_index":3500,"title":{},"content":{"388":{"position":[[265,14]]},"446":{"position":[[278,14]]},"449":{"position":[[261,14]]},"557":{"position":[[251,14]]},"670":{"position":[[152,14]]},"671":{"position":[[146,14]]},"726":{"position":[[360,13]]},"728":{"position":[[248,14]]},"741":{"position":[[150,14]]},"742":{"position":[[136,14]]},"885":{"position":[[149,14]]},"886":{"position":[[147,14]]},"992":{"position":[[158,14]]},"1010":{"position":[[241,14]]},"1016":{"position":[[189,14]]},"1071":{"position":[[248,14]]},"1076":{"position":[[206,14]]},"1078":{"position":[[129,14]]},"1101":{"position":[[112,14]]},"1362":{"position":[[379,14]]},"1363":{"position":[[209,14]]}},"keywords":{}}],["clipboard",{"_index":6374,"title":{},"content":{"1384":{"position":[[464,9]]}},"keywords":{}}],["clob",{"_index":5641,"title":{},"content":{"1140":{"position":[[2708,4]]},"1316":{"position":[[2708,4]]},"1340":{"position":[[2708,4]]},"1351":{"position":[[2708,4]]},"1379":{"position":[[3120,4]]},"1403":{"position":[[3120,4]]},"1414":{"position":[[3120,4]]},"1431":{"position":[[2731,4]]}},"keywords":{}}],["clock",{"_index":2850,"title":{},"content":{"279":{"position":[[630,5]]}},"keywords":{}}],["clone",{"_index":1456,"title":{},"content":{"101":{"position":[[495,6]]},"112":{"position":[[972,6]]},"989":{"position":[[207,7]]},"1004":{"position":[[290,7]]},"1292":{"position":[[305,5]]},"1306":{"position":[[305,5]]},"1329":{"position":[[305,5]]}},"keywords":{}}],["close",{"_index":39,"title":{},"content":{"1":{"position":[[470,6]]},"20":{"position":[[358,7]]},"74":{"position":[[592,7]]},"126":{"position":[[91,7]]},"183":{"position":[[4682,5]]},"228":{"position":[[842,6]]},"230":{"position":[[1185,6]]},"238":{"position":[[541,5]]},"364":{"position":[[189,5]]},"922":{"position":[[937,6]]},"1140":{"position":[[2740,5]]},"1292":{"position":[[338,5]]},"1306":{"position":[[338,5]]},"1316":{"position":[[2740,5]]},"1329":{"position":[[338,5]]},"1340":{"position":[[2740,5]]},"1351":{"position":[[2740,5]]},"1379":{"position":[[3170,5]]},"1403":{"position":[[3170,5]]},"1414":{"position":[[3170,5]]},"1431":{"position":[[2763,5]]},"1443":{"position":[[502,6]]},"1470":{"position":[[212,5]]}},"keywords":{}}],["closer",{"_index":2558,"title":{},"content":{"236":{"position":[[2551,6]]},"321":{"position":[[1755,6]]}},"keywords":{}}],["closest",{"_index":3142,"title":{},"content":{"321":{"position":[[1412,7]]}},"keywords":{}}],["cloud",{"_index":61,"title":{"170":{"position":[[17,5]]},"171":{"position":[[7,5]]},"223":{"position":[[17,6]]},"287":{"position":[[7,5]]},"319":{"position":[[23,5]]},"419":{"position":[[18,5]]},"440":{"position":[[18,5]]},"542":{"position":[[7,5]]},"547":{"position":[[18,5]]},"596":{"position":[[7,5]]},"806":{"position":[[7,5]]},"928":{"position":[[7,5]]},"1056":{"position":[[7,5]]},"1225":{"position":[[7,5]]},"1271":{"position":[[25,5]]},"1288":{"position":[[17,5]]},"1294":{"position":[[7,5]]},"1297":{"position":[[31,5]]},"1342":{"position":[[7,5]]},"1345":{"position":[[31,5]]},"1395":{"position":[[7,5]]},"1397":{"position":[[13,5]]}},"content":{"1":{"position":[[914,5]]},"3":{"position":[[144,5],[188,5]]},"4":{"position":[[57,5]]},"16":{"position":[[769,5],[1017,5]]},"21":{"position":[[751,5]]},"30":{"position":[[170,5]]},"32":{"position":[[284,5]]},"34":{"position":[[299,5],[500,5]]},"37":{"position":[[254,5]]},"46":{"position":[[22,5]]},"67":{"position":[[351,5],[499,5]]},"77":{"position":[[142,5],[315,5]]},"82":{"position":[[616,5],[1536,5]]},"83":{"position":[[330,5]]},"154":{"position":[[75,5],[1206,5],[1366,5],[1661,5]]},"162":{"position":[[1454,5]]},"168":{"position":[[176,5],[232,5],[347,5]]},"170":{"position":[[50,5],[136,5],[189,5]]},"174":{"position":[[30,5],[187,5]]},"175":{"position":[[106,5]]},"179":{"position":[[174,5],[547,5]]},"183":{"position":[[38,5]]},"189":{"position":[[1212,5]]},"192":{"position":[[1392,5]]},"207":{"position":[[207,5]]},"216":{"position":[[258,5]]},"221":{"position":[[144,5]]},"223":{"position":[[64,6]]},"239":{"position":[[810,5]]},"259":{"position":[[944,5],[2525,5]]},"266":{"position":[[351,5]]},"267":{"position":[[46,5]]},"289":{"position":[[157,5],[374,5]]},"300":{"position":[[342,5]]},"319":{"position":[[159,5]]},"320":{"position":[[1057,5],[1189,5],[1332,5]]},"321":{"position":[[329,5],[637,5],[1332,5]]},"322":{"position":[[1756,5]]},"323":{"position":[[699,5]]},"326":{"position":[[1272,5]]},"329":{"position":[[670,5]]},"330":{"position":[[401,5],[447,5]]},"363":{"position":[[1000,5],[1152,5],[1237,5],[1307,5]]},"367":{"position":[[885,5]]},"370":{"position":[[1792,5]]},"419":{"position":[[1,5]]},"440":{"position":[[1,5]]},"475":{"position":[[77,5],[121,5]]},"477":{"position":[[559,5],[806,5]]},"478":{"position":[[417,5]]},"487":{"position":[[16,5],[513,5]]},"545":{"position":[[587,5]]},"547":{"position":[[1,5]]},"571":{"position":[[513,6]]},"581":{"position":[[190,6]]},"593":{"position":[[98,5]]},"597":{"position":[[77,5],[120,5]]},"598":{"position":[[523,5],[769,5]]},"599":{"position":[[417,5]]},"601":{"position":[[89,5],[200,5]]},"617":{"position":[[435,6]]},"764":{"position":[[964,5],[1034,5]]},"777":{"position":[[964,5],[1034,5]]},"784":{"position":[[184,5]]},"788":{"position":[[40,5],[201,5]]},"790":{"position":[[117,5]]},"804":{"position":[[962,5],[1032,5]]},"808":{"position":[[703,5],[1496,5]]},"819":{"position":[[962,5],[1032,5]]},"835":{"position":[[962,5],[1032,5]]},"902":{"position":[[69,5]]},"914":{"position":[[69,5],[235,5]]},"916":{"position":[[122,5]]},"931":{"position":[[642,6],[875,5],[1975,5]]},"1039":{"position":[[67,5],[359,5]]},"1041":{"position":[[143,5]]},"1050":{"position":[[1057,5]]},"1059":{"position":[[1822,5]]},"1120":{"position":[[1117,5],[1207,5],[1282,5]]},"1136":{"position":[[439,5]]},"1138":{"position":[[1083,5]]},"1176":{"position":[[51,5],[137,5]]},"1177":{"position":[[87,5]]},"1179":{"position":[[113,5]]},"1196":{"position":[[155,5]]},"1198":{"position":[[273,5]]},"1211":{"position":[[142,5]]},"1218":{"position":[[142,5]]},"1226":{"position":[[47,5]]},"1227":{"position":[[177,5]]},"1228":{"position":[[192,5]]},"1229":{"position":[[120,5]]},"1230":{"position":[[473,5]]},"1233":{"position":[[16,5]]},"1234":{"position":[[8,5]]},"1245":{"position":[[387,6]]},"1255":{"position":[[184,5]]},"1271":{"position":[[25,5],[79,5]]},"1277":{"position":[[254,5]]},"1282":{"position":[[87,5],[177,5],[213,5],[312,5]]},"1288":{"position":[[56,5],[187,5],[286,5]]},"1289":{"position":[[620,5],[890,5],[1539,5]]},"1298":{"position":[[64,6]]},"1303":{"position":[[1618,5]]},"1310":{"position":[[87,5],[187,5],[228,5],[327,5],[860,5]]},"1322":{"position":[[1109,5]]},"1346":{"position":[[64,6]]},"1397":{"position":[[1057,5]]},"1398":{"position":[[1060,5]]},"1407":{"position":[[142,5]]},"1425":{"position":[[156,6]]}},"keywords":{}}],["cloud_provid",{"_index":3240,"title":{},"content":{"344":{"position":[[135,15]]}},"keywords":{}}],["cloudsql",{"_index":2418,"title":{},"content":{"212":{"position":[[159,8]]}},"keywords":{}}],["cloudsql.logical_decod",{"_index":5072,"title":{},"content":{"931":{"position":[[800,25]]}},"keywords":{}}],["cloudsqlsuperus",{"_index":5073,"title":{},"content":{"931":{"position":[[1158,17]]}},"keywords":{}}],["cluster",{"_index":767,"title":{},"content":{"45":{"position":[[260,7]]},"199":{"position":[[223,8]]},"203":{"position":[[73,8],[388,7]]},"204":{"position":[[113,8],[157,7]]},"333":{"position":[[72,7]]},"402":{"position":[[111,8],[167,8]]},"428":{"position":[[9,7]]},"429":{"position":[[85,8],[436,9],[756,8],[1116,8]]},"432":{"position":[[130,7],[227,7]]},"757":{"position":[[1222,7]]},"770":{"position":[[1222,7]]},"792":{"position":[[61,8],[115,8],[1146,8],[1472,8],[1508,8],[1572,7]]},"794":{"position":[[655,7]]},"797":{"position":[[1222,7]]},"809":{"position":[[655,7]]},"812":{"position":[[1222,7]]},"828":{"position":[[1222,7]]},"867":{"position":[[1930,7]]},"918":{"position":[[61,8],[115,8],[1122,8],[1335,7],[1467,8],[1487,7]]},"1149":{"position":[[49,7],[516,8]]},"1151":{"position":[[127,7],[1198,8]]},"1154":{"position":[[25,7],[108,7],[328,7]]},"1155":{"position":[[305,7]]},"1194":{"position":[[49,7],[237,7]]},"1196":{"position":[[821,7],[1196,7]]},"1198":{"position":[[39,7]]},"1286":{"position":[[712,7]]},"1325":{"position":[[712,7]]},"1356":{"position":[[559,10],[594,10],[1034,10],[1057,10]]},"1379":{"position":[[3220,9]]},"1403":{"position":[[3220,9]]},"1414":{"position":[[3220,9]]},"1417":{"position":[[128,7]]},"1418":{"position":[[24,7]]}},"keywords":{}}],["cluster.account.u",{"_index":5747,"title":{},"content":{"1152":{"position":[[155,18]]}},"keywords":{}}],["cluster.properli",{"_index":3538,"title":{},"content":{"400":{"position":[[96,16]]}},"keywords":{}}],["cluster.typ",{"_index":5040,"title":{},"content":{"918":{"position":[[1318,13]]}},"keywords":{}}],["cluster.u",{"_index":3547,"title":{},"content":{"403":{"position":[[139,10]]}},"keywords":{}}],["clusterparamet",{"_index":4708,"title":{},"content":{"792":{"position":[[1284,16]]}},"keywords":{}}],["co",{"_index":202,"title":{},"content":{"6":{"position":[[111,3]]},"8":{"position":[[112,3]]},"105":{"position":[[198,2]]},"107":{"position":[[479,2]]},"112":{"position":[[725,2]]},"296":{"position":[[3283,2]]},"337":{"position":[[331,2]]},"1140":{"position":[[3440,3]]},"1316":{"position":[[3440,3]]},"1340":{"position":[[3440,3]]},"1351":{"position":[[3440,3]]},"1431":{"position":[[3463,3]]}},"keywords":{}}],["coalesc",{"_index":5643,"title":{},"content":{"1140":{"position":[[2776,8]]},"1292":{"position":[[375,8]]},"1306":{"position":[[375,8]]},"1316":{"position":[[2776,8]]},"1329":{"position":[[375,8]]},"1340":{"position":[[2776,8]]},"1351":{"position":[[2776,8]]},"1379":{"position":[[3274,8]]},"1403":{"position":[[3274,8]]},"1414":{"position":[[3274,8]]},"1431":{"position":[[2799,8]]}},"keywords":{}}],["coalesce($length$new",{"_index":2774,"title":{},"content":{"254":{"position":[[754,20],[2811,20],[3472,20]]}},"keywords":{}}],["code",{"_index":614,"title":{"64":{"position":[[11,4]]},"315":{"position":[[19,5]]}},"content":{"26":{"position":[[427,4],[487,4]]},"63":{"position":[[481,4]]},"80":{"position":[[118,4]]},"94":{"position":[[2394,5]]},"97":{"position":[[195,4]]},"99":{"position":[[179,5],[649,5]]},"102":{"position":[[313,4]]},"278":{"position":[[616,4]]},"281":{"position":[[2707,4]]},"296":{"position":[[2990,4],[5118,4],[6580,4]]},"314":{"position":[[2477,4]]},"315":{"position":[[113,5],[1202,4]]},"446":{"position":[[348,4]]},"1292":{"position":[[416,4]]},"1306":{"position":[[416,4]]},"1329":{"position":[[416,4]]}},"keywords":{}}],["codec",{"_index":21,"title":{},"content":{"1":{"position":[[274,5]]},"3":{"position":[[977,5]]}},"keywords":{}}],["codesrefundssubscript",{"_index":5284,"title":{},"content":{"1073":{"position":[[297,24]]}},"keywords":{}}],["cohort",{"_index":3643,"title":{},"content":{"425":{"position":[[226,7]]}},"keywords":{}}],["collabor",{"_index":1761,"title":{},"content":{"136":{"position":[[224,11]]},"529":{"position":[[319,13]]},"1461":{"position":[[635,13],[4236,14],[4396,14]]}},"keywords":{}}],["collaps",{"_index":2432,"title":{},"content":{"218":{"position":[[613,9]]},"291":{"position":[[851,9]]},"302":{"position":[[851,9]]}},"keywords":{}}],["collat",{"_index":5644,"title":{},"content":{"1140":{"position":[[2817,7],[2849,9]]},"1292":{"position":[[450,7],[491,9]]},"1306":{"position":[[450,7],[491,9]]},"1316":{"position":[[2817,7],[2849,9]]},"1329":{"position":[[450,7],[491,9]]},"1340":{"position":[[2817,7],[2849,9]]},"1351":{"position":[[2817,7],[2849,9]]},"1370":{"position":[[611,7]]},"1379":{"position":[[3332,7],[3392,9]]},"1403":{"position":[[3332,7],[3392,9]]},"1414":{"position":[[3332,7],[3392,9]]},"1431":{"position":[[2840,7],[2872,9]]}},"keywords":{}}],["collect",{"_index":3,"title":{"34":{"position":[[0,12]]},"65":{"position":[[0,11]]},"68":{"position":[[8,10]]},"139":{"position":[[21,12]]},"141":{"position":[[0,11]]},"148":{"position":[[0,10]]},"192":{"position":[[22,10]]},"207":{"position":[[14,12]]},"228":{"position":[[9,12]]},"229":{"position":[[8,12]]},"293":{"position":[[16,11]]},"307":{"position":[[14,11]]},"661":{"position":[[7,10]]},"805":{"position":[[6,10]]},"820":{"position":[[6,10]]},"836":{"position":[[6,10]]},"1047":{"position":[[16,10]]},"1055":{"position":[[16,10]]},"1063":{"position":[[16,10]]},"1123":{"position":[[0,10]]}},"content":{"1":{"position":[[6,11],[120,12],[763,10],[959,10]]},"2":{"position":[[35,10],[197,11],[306,10],[771,10]]},"4":{"position":[[16,10],[380,11]]},"6":{"position":[[45,10],[442,11],[518,9]]},"7":{"position":[[98,9],[412,7]]},"8":{"position":[[46,10],[248,11],[357,10]]},"11":{"position":[[41,12],[123,12],[172,12],[305,12],[489,10],[575,10],[616,10],[902,11],[1017,10],[1295,10],[1315,10],[1500,10],[1680,10]]},"12":{"position":[[52,10],[486,11]]},"13":{"position":[[1100,10],[1167,10],[1219,10],[1362,10],[1402,11],[1548,10]]},"14":{"position":[[23,10],[133,10],[270,10],[376,11],[400,10],[590,10],[746,10],[1041,10]]},"16":{"position":[[55,11],[131,12]]},"17":{"position":[[21,11],[211,11]]},"20":{"position":[[160,12]]},"21":{"position":[[266,10],[407,10]]},"23":{"position":[[162,10]]},"27":{"position":[[55,12]]},"32":{"position":[[397,10],[506,11],[537,11]]},"33":{"position":[[114,12]]},"34":{"position":[[1,11],[85,11],[144,11],[157,11],[255,10],[368,10],[456,11],[635,10],[755,10],[905,11]]},"35":{"position":[[90,12],[272,11]]},"36":{"position":[[68,11],[152,10],[288,12]]},"40":{"position":[[19,10],[88,12]]},"41":{"position":[[5,11],[277,11],[583,10]]},"42":{"position":[[12,10],[74,10],[138,10],[311,12],[428,11]]},"43":{"position":[[167,11],[314,11],[393,10]]},"44":{"position":[[49,12],[230,12],[371,10],[435,10],[536,10]]},"45":{"position":[[30,10],[409,10],[539,11]]},"46":{"position":[[6,11],[128,11]]},"48":{"position":[[49,12],[103,10]]},"54":{"position":[[424,10],[666,10]]},"55":{"position":[[477,10],[649,11]]},"56":{"position":[[346,10],[577,12],[697,10],[741,11],[1351,11],[1452,12],[1514,10],[2076,10]]},"60":{"position":[[653,11],[699,12],[743,10],[839,11],[876,11]]},"61":{"position":[[677,11],[700,11]]},"62":{"position":[[705,11],[770,11],[825,11]]},"66":{"position":[[115,11],[580,10],[788,10]]},"67":{"position":[[842,11],[1134,11],[1322,11],[1935,10]]},"68":{"position":[[48,10],[198,10],[374,11],[395,11],[492,10],[528,10],[559,10],[755,11],[774,10],[850,11],[869,10],[972,12],[1179,11],[1413,10],[1659,11],[1838,12]]},"69":{"position":[[1,11],[91,11],[155,12],[193,11],[249,11],[275,10],[490,11],[563,10],[804,11],[884,10]]},"70":{"position":[[12,10],[670,12]]},"71":{"position":[[12,10],[186,12],[555,10]]},"72":{"position":[[185,10],[245,10]]},"73":{"position":[[3,10],[48,12],[166,12]]},"74":{"position":[[3,10],[52,10],[350,10],[692,10],[935,11]]},"75":{"position":[[104,12],[290,10],[321,10],[446,11]]},"76":{"position":[[42,10],[148,11],[232,10],[357,12],[486,11],[917,11]]},"77":{"position":[[1,11],[67,10],[282,11],[408,10],[502,10],[647,11]]},"81":{"position":[[1553,10],[1787,11],[1916,11]]},"87":{"position":[[209,11],[572,10]]},"90":{"position":[[32,12]]},"92":{"position":[[55,10]]},"94":{"position":[[85,12],[235,10],[1084,11],[1267,10],[1365,10],[1469,11],[1617,10],[1967,10],[2868,10]]},"96":{"position":[[86,10]]},"97":{"position":[[614,11],[667,10]]},"99":{"position":[[64,10]]},"100":{"position":[[937,11],[1150,10]]},"102":{"position":[[433,11],[636,10]]},"105":{"position":[[33,10],[633,10],[737,11],[986,10],[1068,10],[1303,10],[1415,12],[1438,12]]},"106":{"position":[[37,11],[92,11],[528,10],[658,11]]},"108":{"position":[[229,11]]},"109":{"position":[[58,12],[105,10],[325,12]]},"110":{"position":[[881,10],[951,10],[1069,10],[1166,10]]},"111":{"position":[[56,10],[145,10],[232,10],[325,10]]},"113":{"position":[[12,10]]},"114":{"position":[[252,10],[550,10]]},"115":{"position":[[293,11],[322,10],[410,10],[473,10]]},"117":{"position":[[16,10]]},"120":{"position":[[722,11],[818,11],[938,10],[1028,10],[1169,10],[1519,10]]},"121":{"position":[[96,10],[253,10],[474,11],[519,10],[587,10],[854,10],[892,12],[1273,11],[1582,11],[1738,10]]},"122":{"position":[[72,11],[255,10],[1289,10]]},"123":{"position":[[60,10],[135,10],[204,12]]},"124":{"position":[[608,10],[920,10],[983,10]]},"125":{"position":[[514,10],[822,10]]},"128":{"position":[[39,11],[331,11],[478,11],[655,11]]},"129":{"position":[[52,10],[279,12],[723,11],[851,11],[988,11]]},"130":{"position":[[139,11]]},"132":{"position":[[154,11],[461,11],[621,11]]},"133":{"position":[[397,11]]},"137":{"position":[[154,12],[312,10]]},"138":{"position":[[540,11],[2055,11],[2280,12],[2328,11],[2410,12],[2456,11],[2618,11]]},"140":{"position":[[438,11]]},"141":{"position":[[5,11],[49,11],[355,10],[751,11],[802,10],[828,11],[892,10],[1175,10],[1708,10],[1818,11],[1834,10],[1970,10],[2291,10]]},"142":{"position":[[2115,11],[2340,12],[2389,11],[2488,12],[2534,11],[2696,11]]},"144":{"position":[[218,11],[541,11],[569,10],[601,11],[746,11]]},"146":{"position":[[487,11],[761,12],[788,11]]},"148":{"position":[[33,10],[51,11],[93,10]]},"149":{"position":[[27,11],[43,10],[160,11],[406,11],[484,11],[734,12],[761,11],[1183,10],[1249,11],[1294,10]]},"150":{"position":[[34,11],[202,11]]},"152":{"position":[[496,12],[737,12],[764,11]]},"154":{"position":[[1250,12]]},"156":{"position":[[595,10],[640,11]]},"158":{"position":[[365,10]]},"160":{"position":[[429,10],[560,10],[710,12],[952,12]]},"161":{"position":[[615,12]]},"162":{"position":[[106,10],[158,11],[684,11],[803,10],[1208,10],[1356,11],[1488,11],[1977,12]]},"163":{"position":[[6,11],[68,11],[610,10]]},"164":{"position":[[382,10],[860,10],[951,10],[1334,10],[1468,10]]},"165":{"position":[[60,11],[234,10],[927,10],[1415,10],[1791,10],[2075,11],[2240,10]]},"166":{"position":[[315,12],[602,10]]},"168":{"position":[[278,11]]},"170":{"position":[[80,10]]},"180":{"position":[[465,10]]},"181":{"position":[[126,11]]},"182":{"position":[[13,11],[120,10],[169,10],[414,11],[441,10],[510,11],[591,10]]},"183":{"position":[[116,11],[189,10],[1128,12],[1542,10],[2094,10],[2414,11],[3514,12]]},"184":{"position":[[611,11],[655,10],[779,10]]},"189":{"position":[[1155,12],[1401,10]]},"190":{"position":[[1634,11],[1715,10],[2101,11],[2180,12]]},"192":{"position":[[1202,11],[1330,10],[1666,10],[1703,10]]},"197":{"position":[[898,11],[1079,11]]},"198":{"position":[[400,10]]},"206":{"position":[[1090,11]]},"207":{"position":[[152,12],[274,11],[382,11],[719,12],[828,10],[1315,10],[1417,11],[1638,10]]},"208":{"position":[[30,11],[997,11],[1307,10],[1406,10],[1463,10],[1624,10],[1655,11]]},"209":{"position":[[488,10],[953,11]]},"210":{"position":[[24,11],[114,11],[221,10],[554,10],[591,11],[1627,11],[1789,11],[3925,10],[4030,11]]},"211":{"position":[[219,11]]},"213":{"position":[[363,10]]},"216":{"position":[[218,12]]},"217":{"position":[[107,11],[1191,11],[1215,11],[1275,12],[1368,12],[1425,11],[1471,10],[1582,11],[1656,11],[1742,11],[1772,10],[1797,10],[1835,10],[1901,10],[2031,12],[2078,12],[2264,11]]},"218":{"position":[[48,12],[638,11],[690,10],[979,11],[1044,11],[1074,12],[1106,11],[1132,11],[1156,11],[1283,10],[1611,10],[1650,10],[1755,10]]},"219":{"position":[[225,11],[310,10],[378,12],[452,11],[548,10]]},"221":{"position":[[362,7]]},"227":{"position":[[233,11]]},"228":{"position":[[8,10],[161,11],[242,12],[298,11],[326,10],[703,10],[1454,12]]},"229":{"position":[[8,10],[665,10],[919,10]]},"230":{"position":[[45,10],[328,11],[446,10],[478,10],[539,10],[1228,12]]},"232":{"position":[[534,11],[636,11]]},"239":{"position":[[612,12],[755,12],[1114,11],[1524,10],[1812,11],[1852,11],[2152,10],[2419,11],[2530,10]]},"240":{"position":[[121,11],[3816,11],[4635,10]]},"245":{"position":[[1,11],[93,11],[204,11]]},"246":{"position":[[44,11],[165,12]]},"250":{"position":[[1211,10]]},"253":{"position":[[424,11],[551,11],[576,10],[646,10],[860,11],[879,10],[1111,11]]},"254":{"position":[[236,12],[904,11],[1031,10],[2200,10],[2383,10],[2432,10],[2561,10],[2596,11],[3012,11],[3113,10],[3136,10]]},"255":{"position":[[133,12],[1222,11]]},"256":{"position":[[96,11]]},"259":{"position":[[535,11],[572,11],[693,12],[781,10],[1064,11],[1094,10],[1119,10],[1223,10],[2229,11],[2266,11],[2359,10],[2431,11],[2645,11],[2675,10],[2700,10],[2804,10]]},"263":{"position":[[668,12]]},"266":{"position":[[134,11]]},"267":{"position":[[125,11],[208,10],[259,11],[292,10],[424,11],[1550,10]]},"268":{"position":[[303,10],[767,12],[1193,10],[1406,12],[2121,11]]},"269":{"position":[[392,12],[764,10],[977,12],[1583,11]]},"270":{"position":[[377,10],[429,12],[549,12],[602,11],[697,10],[731,10],[906,10],[1003,10],[1176,10],[1244,10],[1352,10],[2199,11]]},"271":{"position":[[160,12],[464,10]]},"274":{"position":[[86,12],[250,12],[728,12],[1027,12],[1546,11]]},"277":{"position":[[288,10],[543,12],[1008,11],[1143,11],[1288,10]]},"278":{"position":[[877,12]]},"279":{"position":[[594,10],[1018,12]]},"280":{"position":[[682,10],[738,10],[1131,12]]},"281":{"position":[[865,12]]},"289":{"position":[[362,11],[407,11],[473,11]]},"290":{"position":[[96,10],[126,10],[1228,10],[1258,11],[1313,11],[1349,11],[1389,12],[1543,12],[1606,11],[1867,11]]},"291":{"position":[[876,11],[928,11],[1030,11],[1106,11],[1242,11],[1529,11],[1559,10],[1584,10],[1688,10],[1878,12]]},"295":{"position":[[1015,11],[1272,12],[1351,11],[1816,12],[1838,11],[1857,10]]},"296":{"position":[[232,12],[1024,10],[1191,10],[1723,12],[1886,10],[2426,7],[3171,11],[4463,10],[4743,10],[4942,10],[6928,11],[7452,11]]},"297":{"position":[[76,12]]},"300":{"position":[[328,11]]},"301":{"position":[[95,12],[1452,10],[1832,11]]},"302":{"position":[[876,11],[928,10],[1015,10],[1210,10],[1449,11],[1493,10],[1597,10],[1791,11]]},"305":{"position":[[6,11],[330,10],[401,10],[461,10]]},"306":{"position":[[110,10],[528,10]]},"307":{"position":[[99,10],[138,10],[246,10],[319,10],[364,10],[458,11],[587,10],[661,10],[716,10],[827,10],[1260,12],[1743,10],[1819,10],[2125,12],[2649,10],[3169,11],[3322,11]]},"308":{"position":[[92,10]]},"309":{"position":[[1660,11],[2094,12],[2691,12],[3493,11],[3646,11]]},"310":{"position":[[151,12]]},"313":{"position":[[424,11],[551,11],[576,10],[646,10],[860,11],[879,10],[1111,11]]},"314":{"position":[[236,12],[582,11],[752,10],[1613,10],[1741,10],[1924,10],[1973,10],[2130,11],[2192,10],[2227,11],[2688,10],[2711,10]]},"315":{"position":[[953,10],[2510,10]]},"316":{"position":[[133,12],[1547,11]]},"317":{"position":[[103,11]]},"319":{"position":[[462,11],[576,11],[773,11],[931,10]]},"320":{"position":[[1577,12],[1596,11],[1684,11],[1755,11],[1830,10]]},"321":{"position":[[199,10],[496,11],[688,10],[774,12],[812,11],[912,10],[986,11],[2133,12]]},"322":{"position":[[725,12],[1013,11],[1450,10],[1709,11],[1737,10]]},"323":{"position":[[519,13],[647,12],[665,11],[793,10],[967,11],[1074,10]]},"326":{"position":[[432,12],[451,11],[609,11],[733,11],[928,11],[1099,10],[1294,10]]},"351":{"position":[[416,11]]},"359":{"position":[[394,11]]},"374":{"position":[[282,11],[430,11]]},"377":{"position":[[310,9],[469,9]]},"381":{"position":[[586,10]]},"387":{"position":[[1211,10],[1419,10]]},"408":{"position":[[626,11]]},"419":{"position":[[177,11]]},"421":{"position":[[185,10]]},"424":{"position":[[449,11]]},"427":{"position":[[69,11]]},"440":{"position":[[193,11]]},"443":{"position":[[544,10]]},"448":{"position":[[1304,10]]},"451":{"position":[[194,10]]},"454":{"position":[[638,11]]},"457":{"position":[[198,10]]},"460":{"position":[[655,11]]},"463":{"position":[[304,10]]},"466":{"position":[[362,11]]},"470":{"position":[[67,10]]},"480":{"position":[[143,11],[1294,12]]},"486":{"position":[[330,11],[380,10]]},"488":{"position":[[666,11]]},"489":{"position":[[842,11]]},"491":{"position":[[279,12],[401,10]]},"492":{"position":[[468,11]]},"499":{"position":[[103,11]]},"504":{"position":[[114,11]]},"506":{"position":[[461,10]]},"509":{"position":[[630,10]]},"512":{"position":[[221,10]]},"517":{"position":[[4063,11]]},"521":{"position":[[374,10]]},"529":{"position":[[753,10]]},"534":{"position":[[1780,10]]},"537":{"position":[[210,10]]},"547":{"position":[[178,11]]},"550":{"position":[[458,10]]},"556":{"position":[[2282,10]]},"558":{"position":[[136,11]]},"568":{"position":[[51,11],[268,10]]},"580":{"position":[[210,10]]},"590":{"position":[[147,12],[161,11],[225,10],[317,10],[715,10],[827,11],[962,12]]},"593":{"position":[[453,11],[544,10],[602,11]]},"595":{"position":[[185,11],[490,11],[868,12],[930,11],[1006,10],[1693,12],[1828,11]]},"602":{"position":[[99,11],[403,10],[510,10],[632,10],[808,11]]},"605":{"position":[[174,11],[416,10]]},"606":{"position":[[355,11]]},"611":{"position":[[1283,10]]},"622":{"position":[[422,10]]},"625":{"position":[[261,11]]},"628":{"position":[[486,10]]},"631":{"position":[[589,11]]},"634":{"position":[[95,11]]},"639":{"position":[[113,11]]},"649":{"position":[[84,10]]},"658":{"position":[[330,11],[380,10]]},"659":{"position":[[823,11]]},"660":{"position":[[453,11],[504,10],[880,10]]},"661":{"position":[[216,11],[263,10]]},"662":{"position":[[842,11]]},"664":{"position":[[300,12],[422,10],[657,10]]},"665":{"position":[[468,11]]},"667":{"position":[[271,10]]},"670":{"position":[[749,11]]},"674":{"position":[[330,11],[380,10]]},"676":{"position":[[666,11]]},"677":{"position":[[842,11]]},"679":{"position":[[279,12],[401,10]]},"680":{"position":[[468,11]]},"682":{"position":[[242,10]]},"685":{"position":[[561,11]]},"689":{"position":[[330,11],[380,10]]},"691":{"position":[[666,11]]},"692":{"position":[[842,11]]},"694":{"position":[[279,12],[401,10]]},"695":{"position":[[468,11]]},"697":{"position":[[611,10]]},"700":{"position":[[400,11]]},"703":{"position":[[176,10]]},"706":{"position":[[399,11]]},"709":{"position":[[864,10]]},"712":{"position":[[591,11]]},"715":{"position":[[233,10]]},"720":{"position":[[892,10]]},"738":{"position":[[788,10]]},"741":{"position":[[576,11]]},"744":{"position":[[178,10]]},"747":{"position":[[1459,11]]},"763":{"position":[[431,11]]},"776":{"position":[[431,11]]},"779":{"position":[[232,11]]},"782":{"position":[[594,11],[613,10]]},"783":{"position":[[214,11]]},"785":{"position":[[142,10]]},"786":{"position":[[339,10]]},"803":{"position":[[437,11]]},"805":{"position":[[12,10],[144,10],[309,10]]},"818":{"position":[[437,11]]},"820":{"position":[[12,10],[144,10],[309,10]]},"821":{"position":[[78,11]]},"834":{"position":[[437,11]]},"836":{"position":[[12,10],[144,10],[309,10]]},"851":{"position":[[219,10],[680,11]]},"854":{"position":[[127,10]]},"859":{"position":[[811,10]]},"882":{"position":[[138,10]]},"885":{"position":[[711,11]]},"888":{"position":[[193,10]]},"891":{"position":[[425,11]]},"897":{"position":[[355,11]]},"912":{"position":[[86,11]]},"947":{"position":[[1260,10]]},"956":{"position":[[214,10]]},"959":{"position":[[456,11]]},"974":{"position":[[223,12]]},"975":{"position":[[93,11]]},"976":{"position":[[96,11],[429,12]]},"977":{"position":[[283,11]]},"979":{"position":[[288,10]]},"982":{"position":[[458,11]]},"991":{"position":[[867,10]]},"994":{"position":[[146,10]]},"997":{"position":[[424,11]]},"1008":{"position":[[90,11],[373,11],[625,11],[935,12],[1485,11],[1579,11],[1754,10]]},"1009":{"position":[[1723,10]]},"1012":{"position":[[273,10]]},"1015":{"position":[[511,11]]},"1023":{"position":[[158,11]]},"1025":{"position":[[420,10]]},"1028":{"position":[[461,11]]},"1036":{"position":[[943,11]]},"1040":{"position":[[258,10]]},"1047":{"position":[[12,10],[289,10],[462,12],[532,10],[882,10],[954,10]]},"1050":{"position":[[258,10]]},"1055":{"position":[[12,10],[289,10],[462,12],[532,10],[882,10],[954,10]]},"1058":{"position":[[258,10]]},"1063":{"position":[[12,10],[289,10],[462,12],[532,10],[882,10],[954,10]]},"1065":{"position":[[145,10]]},"1070":{"position":[[1074,10]]},"1073":{"position":[[397,10]]},"1076":{"position":[[854,11]]},"1080":{"position":[[854,10]]},"1085":{"position":[[1442,10]]},"1094":{"position":[[526,11]]},"1099":{"position":[[518,10]]},"1101":{"position":[[366,11]]},"1104":{"position":[[216,10]]},"1107":{"position":[[481,11]]},"1110":{"position":[[536,10]]},"1113":{"position":[[555,11]]},"1118":{"position":[[785,11],[829,10],[1157,10]]},"1123":{"position":[[14,11],[45,10],[116,10],[322,11],[460,10],[687,11],[813,10],[845,10]]},"1128":{"position":[[453,10]]},"1133":{"position":[[1277,11]]},"1137":{"position":[[60,12],[181,11]]},"1140":{"position":[[2891,7]]},"1143":{"position":[[103,11]]},"1146":{"position":[[205,11]]},"1147":{"position":[[344,10]]},"1150":{"position":[[118,11]]},"1151":{"position":[[561,10]]},"1155":{"position":[[186,10],[442,11],[623,10]]},"1156":{"position":[[111,11],[258,11],[318,10]]},"1157":{"position":[[80,11],[218,10]]},"1161":{"position":[[103,11]]},"1162":{"position":[[489,10]]},"1164":{"position":[[6,10],[159,10],[179,10],[549,10]]},"1166":{"position":[[63,10]]},"1169":{"position":[[103,11]]},"1172":{"position":[[6,10],[243,10]]},"1173":{"position":[[205,11]]},"1174":{"position":[[344,10]]},"1178":{"position":[[60,12],[182,11]]},"1179":{"position":[[388,10]]},"1183":{"position":[[67,10]]},"1185":{"position":[[264,10]]},"1187":{"position":[[60,12],[184,11]]},"1189":{"position":[[338,11]]},"1194":{"position":[[474,10]]},"1195":{"position":[[60,12],[190,11],[542,10]]},"1197":{"position":[[344,11]]},"1200":{"position":[[1,10],[111,10],[182,10],[216,10]]},"1203":{"position":[[635,10]]},"1205":{"position":[[60,12]]},"1207":{"position":[[427,11]]},"1208":{"position":[[194,10]]},"1209":{"position":[[77,11]]},"1212":{"position":[[103,11]]},"1215":{"position":[[205,11]]},"1216":{"position":[[344,10]]},"1219":{"position":[[103,11]]},"1222":{"position":[[6,10],[243,10]]},"1223":{"position":[[205,11]]},"1224":{"position":[[344,10]]},"1226":{"position":[[259,10]]},"1229":{"position":[[60,12],[194,11]]},"1232":{"position":[[35,11]]},"1234":{"position":[[143,10]]},"1236":{"position":[[159,11]]},"1243":{"position":[[56,11],[395,10],[503,10],[605,10]]},"1246":{"position":[[60,12]]},"1247":{"position":[[839,10]]},"1248":{"position":[[371,11]]},"1250":{"position":[[144,12],[232,11]]},"1251":{"position":[[140,12]]},"1253":{"position":[[479,10]]},"1254":{"position":[[254,11]]},"1259":{"position":[[110,11]]},"1260":{"position":[[275,10]]},"1264":{"position":[[149,11]]},"1265":{"position":[[33,11],[145,11]]},"1275":{"position":[[57,10],[108,10]]},"1277":{"position":[[1113,10]]},"1279":{"position":[[150,10],[171,11],[310,11]]},"1281":{"position":[[435,10]]},"1284":{"position":[[60,12],[179,11]]},"1286":{"position":[[101,11],[1368,11]]},"1291":{"position":[[39,12]]},"1295":{"position":[[435,10]]},"1299":{"position":[[60,12],[179,11]]},"1301":{"position":[[101,11],[1204,11]]},"1305":{"position":[[39,12]]},"1309":{"position":[[253,10]]},"1312":{"position":[[60,12],[182,11]]},"1316":{"position":[[2891,7]]},"1319":{"position":[[435,10]]},"1323":{"position":[[60,12],[179,11]]},"1325":{"position":[[101,11],[1368,11]]},"1328":{"position":[[39,12]]},"1332":{"position":[[253,10]]},"1336":{"position":[[60,12],[182,11]]},"1340":{"position":[[2891,7]]},"1343":{"position":[[253,10]]},"1347":{"position":[[60,12],[182,11]]},"1351":{"position":[[2891,7]]},"1354":{"position":[[207,10],[299,10]]},"1355":{"position":[[60,12],[181,11],[217,12]]},"1356":{"position":[[463,10],[545,12],[964,10],[1308,11],[1328,10],[1363,10]]},"1357":{"position":[[276,11],[430,11]]},"1358":{"position":[[313,10],[570,10],[767,10]]},"1359":{"position":[[478,10]]},"1361":{"position":[[183,11]]},"1365":{"position":[[56,10]]},"1366":{"position":[[84,10]]},"1372":{"position":[[298,10]]},"1375":{"position":[[60,12],[183,11]]},"1379":{"position":[[3445,7]]},"1382":{"position":[[518,10]]},"1385":{"position":[[60,12],[183,11]]},"1386":{"position":[[359,10]]},"1387":{"position":[[377,11],[1003,11]]},"1391":{"position":[[54,10],[344,10],[529,10]]},"1396":{"position":[[298,10]]},"1399":{"position":[[60,12],[183,11]]},"1403":{"position":[[3445,7]]},"1406":{"position":[[298,10]]},"1410":{"position":[[60,12],[183,11]]},"1414":{"position":[[3445,7]]},"1417":{"position":[[455,10]]},"1419":{"position":[[60,12],[183,11]]},"1421":{"position":[[364,11]]},"1425":{"position":[[257,11]]},"1426":{"position":[[60,12],[185,11]]},"1429":{"position":[[593,10]]},"1431":{"position":[[2914,7]]},"1438":{"position":[[687,11]]},"1440":{"position":[[338,10],[500,10],[835,10],[911,10]]},"1446":{"position":[[108,10],[212,11],[280,12]]},"1448":{"position":[[370,11],[453,10],[539,10],[743,10],[850,11],[916,11]]},"1449":{"position":[[140,12],[190,10],[357,11]]},"1451":{"position":[[214,12],[432,12]]},"1459":{"position":[[40,10],[595,11],[949,10]]},"1461":{"position":[[776,12],[864,11],[994,11],[1545,11],[1626,10],[2152,11],[2272,12],[2569,11],[3165,11],[4141,11],[4875,12],[4983,11],[5487,11],[5543,11],[5625,11]]},"1462":{"position":[[12,10],[99,11],[396,10],[525,11],[570,10]]},"1463":{"position":[[245,12],[576,11],[778,11]]},"1464":{"position":[[102,12],[459,11],[622,11]]},"1465":{"position":[[422,12],[1153,11],[1318,11],[1419,11],[1585,11]]},"1466":{"position":[[64,12],[440,11],[573,11]]},"1467":{"position":[[405,12],[975,11],[1120,11],[1276,11],[1482,11],[2072,12],[2398,11],[2644,11]]},"1470":{"position":[[352,10],[659,11],[862,11],[1082,12],[1160,10],[1335,12]]},"1472":{"position":[[40,11],[318,11],[579,8]]},"1473":{"position":[[356,10]]},"1475":{"position":[[676,10],[751,10]]},"1476":{"position":[[111,12],[409,11],[585,11],[1173,12],[1632,11],[2004,11]]},"1477":{"position":[[885,12],[1671,11],[2015,11],[2184,11],[2436,11],[3101,12],[4011,11],[4367,11],[4546,11],[4808,11]]},"1479":{"position":[[103,11],[179,11],[254,10]]},"1480":{"position":[[644,10],[734,10],[875,10],[1225,10]]}},"keywords":{}}],["collection'",{"_index":102,"title":{},"content":{"3":{"position":[[50,12]]},"11":{"position":[[842,12],[1762,12]]},"74":{"position":[[536,12]]},"99":{"position":[[347,12]]},"106":{"position":[[245,12],[474,12]]},"129":{"position":[[576,12],[663,12]]},"141":{"position":[[268,12]]},"146":{"position":[[871,12]]},"149":{"position":[[844,12]]},"150":{"position":[[10,12],[54,12]]},"152":{"position":[[847,12]]},"160":{"position":[[300,12],[478,12]]},"182":{"position":[[663,12]]},"183":{"position":[[1588,12]]},"227":{"position":[[70,12]]},"229":{"position":[[94,12],[228,12]]},"230":{"position":[[851,12]]},"268":{"position":[[1234,12]]},"269":{"position":[[805,12]]},"270":{"position":[[1389,12]]},"290":{"position":[[1444,12]]},"301":{"position":[[1540,12]]},"302":{"position":[[1480,12]]},"595":{"position":[[18,12]]},"910":{"position":[[102,12]]},"926":{"position":[[102,12]]},"937":{"position":[[102,12]]},"953":{"position":[[102,12]]},"971":{"position":[[102,12]]},"1047":{"position":[[145,12],[486,12]]},"1055":{"position":[[145,12],[486,12]]},"1063":{"position":[[145,12],[486,12]]},"1356":{"position":[[629,12]]},"1358":{"position":[[658,12]]},"1438":{"position":[[414,12],[595,12]]}},"keywords":{}}],["collection'sschema",{"_index":1712,"title":{},"content":{"128":{"position":[[91,19]]}},"keywords":{}}],["collection(",{"_index":715,"title":{},"content":{"40":{"position":[[155,14]]},"55":{"position":[[719,13]]},"119":{"position":[[315,13],[376,13]]},"141":{"position":[[725,14]]},"427":{"position":[[173,13]]}},"keywords":{}}],["collection.dekaf",{"_index":2629,"title":{},"content":{"245":{"position":[[152,16]]}},"keywords":{}}],["collection.doc",{"_index":6664,"title":{},"content":{"1470":{"position":[[773,15]]}},"keywords":{}}],["collection.if",{"_index":1016,"title":{},"content":{"67":{"position":[[1917,13]]}},"keywords":{}}],["collection/*/subcollect",{"_index":4240,"title":{},"content":{"590":{"position":[[867,27]]}},"keywords":{}}],["collection/a",{"_index":585,"title":{},"content":{"23":{"position":[[371,12]]}},"keywords":{}}],["collection/c",{"_index":589,"title":{},"content":{"23":{"position":[[435,12]]}},"keywords":{}}],["collection/d",{"_index":587,"title":{},"content":{"23":{"position":[[403,12],[499,12]]}},"keywords":{}}],["collection_nam",{"_index":5207,"title":{},"content":{"1022":{"position":[[445,18]]},"1145":{"position":[[293,18]]},"1163":{"position":[[328,18]]},"1171":{"position":[[297,18]]},"1214":{"position":[[233,18]]},"1221":{"position":[[237,18]]}},"keywords":{}}],["collectiona",{"_index":5408,"title":{},"content":{"1118":{"position":[[26,11]]}},"keywords":{}}],["collectionacmebank/last",{"_index":2833,"title":{},"content":{"277":{"position":[[846,23]]}},"keywords":{}}],["collectioneach",{"_index":5898,"title":{},"content":{"1232":{"position":[[345,14]]}},"keywords":{}}],["collections"",{"_index":827,"title":{},"content":{"55":{"position":[[1014,17],[1096,17]]},"483":{"position":[[780,17]]}},"keywords":{}}],["collections.a",{"_index":763,"title":{},"content":{"44":{"position":[[483,13]]}},"keywords":{}}],["collections.for",{"_index":6666,"title":{},"content":{"1470":{"position":[[1066,15]]}},"keywords":{}}],["collections.view",{"_index":1750,"title":{},"content":{"135":{"position":[[487,19]]}},"keywords":{}}],["collectionsedit",{"_index":6513,"title":{},"content":{"1446":{"position":[[161,18]]}},"keywords":{}}],["collectionwith",{"_index":1333,"title":{},"content":{"94":{"position":[[40,14]]}},"keywords":{}}],["collection’",{"_index":977,"title":{},"content":{"66":{"position":[[450,12],[495,12]]}},"keywords":{}}],["collis",{"_index":6635,"title":{},"content":{"1462":{"position":[[550,10]]}},"keywords":{}}],["coloc",{"_index":2776,"title":{},"content":{"254":{"position":[[3230,8]]},"314":{"position":[[2805,8]]}},"keywords":{}}],["colon",{"_index":5827,"title":{},"content":{"1196":{"position":[[686,5]]}},"keywords":{}}],["color",{"_index":1658,"title":{},"content":{"121":{"position":[[925,8],[965,7],[1018,6],[1214,6],[1548,6]]}},"keywords":{}}],["column",{"_index":440,"title":{"480":{"position":[[18,8]]},"1164":{"position":[[8,6]]}},"content":{"14":{"position":[[913,6]]},"69":{"position":[[706,8]]},"98":{"position":[[34,6],[360,6],[483,7],[917,6],[1035,6]]},"100":{"position":[[528,6]]},"107":{"position":[[3578,7]]},"122":{"position":[[168,7],[479,6]]},"138":{"position":[[1942,6],[2307,6],[2529,6]]},"141":{"position":[[1874,6]]},"142":{"position":[[1995,6],[2368,6],[2607,6]]},"150":{"position":[[116,7]]},"158":{"position":[[584,8]]},"192":{"position":[[1626,6]]},"208":{"position":[[911,7]]},"228":{"position":[[1188,6]]},"229":{"position":[[872,6]]},"230":{"position":[[188,6]]},"263":{"position":[[472,7],[500,7]]},"271":{"position":[[137,7]]},"309":{"position":[[897,6]]},"310":{"position":[[218,6],[358,7]]},"419":{"position":[[2200,6],[2501,6]]},"441":{"position":[[809,6],[1110,6]]},"479":{"position":[[676,7]]},"480":{"position":[[337,8],[368,6],[396,8],[1213,7],[1280,7]]},"482":{"position":[[630,6]]},"483":{"position":[[146,7],[272,8]]},"504":{"position":[[1829,6],[2130,6]]},"529":{"position":[[556,7]]},"547":{"position":[[2202,6],[2503,6]]},"616":{"position":[[169,7]]},"639":{"position":[[1827,6],[2128,6]]},"738":{"position":[[351,6]]},"750":{"position":[[1063,7]]},"754":{"position":[[241,7],[362,6],[1120,8]]},"757":{"position":[[399,8],[557,7]]},"760":{"position":[[599,7]]},"763":{"position":[[153,6]]},"766":{"position":[[1063,7]]},"770":{"position":[[399,8],[557,7]]},"773":{"position":[[599,7]]},"776":{"position":[[153,6]]},"789":{"position":[[1464,7]]},"794":{"position":[[114,7],[235,6],[1324,8]]},"797":{"position":[[399,8],[557,7]]},"800":{"position":[[599,7]]},"803":{"position":[[153,6]]},"807":{"position":[[1051,7]]},"809":{"position":[[114,7],[235,6],[1324,8]]},"812":{"position":[[399,8],[557,7]]},"815":{"position":[[599,7]]},"818":{"position":[[153,6]]},"823":{"position":[[1051,7]]},"825":{"position":[[114,7],[235,6],[1160,8]]},"828":{"position":[[399,8],[557,7]]},"831":{"position":[[599,7]]},"834":{"position":[[153,6]]},"840":{"position":[[1727,7]]},"842":{"position":[[2127,6],[2280,6],[3231,6],[3254,6],[3390,6],[3413,6]]},"847":{"position":[[283,7]]},"849":{"position":[[2768,7]]},"864":{"position":[[1509,8]]},"869":{"position":[[200,6],[556,6]]},"872":{"position":[[11,6]]},"912":{"position":[[1158,6]]},"1023":{"position":[[2183,6],[2484,6]]},"1045":{"position":[[1208,7],[1226,7]]},"1047":{"position":[[650,6]]},"1053":{"position":[[1208,7],[1226,7]]},"1055":{"position":[[650,6]]},"1061":{"position":[[1208,7],[1226,7]]},"1063":{"position":[[650,6]]},"1140":{"position":[[191,7],[2925,6]]},"1144":{"position":[[927,7]]},"1155":{"position":[[144,6]]},"1164":{"position":[[53,7],[124,7],[214,6],[661,7],[695,7]]},"1213":{"position":[[604,7]]},"1247":{"position":[[931,6]]},"1267":{"position":[[439,8]]},"1285":{"position":[[461,8]]},"1292":{"position":[[530,6],[565,7]]},"1300":{"position":[[461,8]]},"1306":{"position":[[530,6],[565,7]]},"1316":{"position":[[191,7],[2925,6]]},"1317":{"position":[[379,8],[418,6],[621,6]]},"1324":{"position":[[461,8]]},"1329":{"position":[[530,6],[565,7]]},"1340":{"position":[[191,7],[2925,6]]},"1341":{"position":[[379,8],[418,6],[621,6]]},"1351":{"position":[[191,7],[2925,6]]},"1352":{"position":[[379,8],[418,6],[621,6]]},"1370":{"position":[[187,7],[622,6]]},"1379":{"position":[[3506,6]]},"1391":{"position":[[320,7]]},"1393":{"position":[[79,7],[247,8],[275,7]]},"1394":{"position":[[675,6]]},"1403":{"position":[[3506,6]]},"1414":{"position":[[3506,6]]},"1429":{"position":[[521,6]]},"1431":{"position":[[214,7],[2948,6]]},"1432":{"position":[[379,8],[418,6],[635,6]]}},"keywords":{}}],["column_format",{"_index":5989,"title":{},"content":{"1292":{"position":[[607,13]]},"1306":{"position":[[607,13]]},"1329":{"position":[[607,13]]}},"keywords":{}}],["column_nam",{"_index":5990,"title":{},"content":{"1292":{"position":[[653,11]]},"1306":{"position":[[653,11]]},"1329":{"position":[[653,11]]}},"keywords":{}}],["columnar",{"_index":6264,"title":{},"content":{"1356":{"position":[[642,8]]}},"keywords":{}}],["columns.campaign",{"_index":4545,"title":{},"content":{"738":{"position":[[471,18]]}},"keywords":{}}],["columnsthi",{"_index":4809,"title":{},"content":{"846":{"position":[[213,11]]}},"keywords":{}}],["combin",{"_index":468,"title":{},"content":{"16":{"position":[[549,11]]},"23":{"position":[[225,9]]},"74":{"position":[[632,8]]},"113":{"position":[[81,8],[857,8]]},"115":{"position":[[243,7],[1221,8]]},"124":{"position":[[497,8],[643,7]]},"128":{"position":[[286,8],[446,8]]},"161":{"position":[[406,11]]},"163":{"position":[[790,7]]},"164":{"position":[[2192,7]]},"183":{"position":[[2133,11],[2695,12]]},"193":{"position":[[579,11]]},"319":{"position":[[1055,7],[1104,7]]},"483":{"position":[[513,8]]},"977":{"position":[[4,7],[635,8]]},"1232":{"position":[[271,7]]},"1440":{"position":[[318,8],[949,8],[1049,7],[1136,7]]},"1451":{"position":[[927,9]]},"1459":{"position":[[909,8],[1013,8],[1686,11]]},"1464":{"position":[[907,8]]},"1465":{"position":[[286,8]]},"1474":{"position":[[131,11]]},"1475":{"position":[[1760,8]]}},"keywords":{}}],["come",{"_index":1917,"title":{},"content":{"162":{"position":[[1157,5],[1373,4],[1545,4]]},"192":{"position":[[506,4]]},"252":{"position":[[144,6]]},"266":{"position":[[410,5]]},"312":{"position":[[148,6]]},"454":{"position":[[127,4]]},"485":{"position":[[337,4]]},"605":{"position":[[186,4]]},"657":{"position":[[337,4]]},"673":{"position":[[337,4]]},"688":{"position":[[337,4]]},"922":{"position":[[435,5]]},"1020":{"position":[[1596,5],[1691,5],[1779,5]]}},"keywords":{}}],["comma",{"_index":3411,"title":{},"content":{"370":{"position":[[1074,5]]},"377":{"position":[[1602,5]]},"419":{"position":[[1646,5]]},"432":{"position":[[166,7]]},"441":{"position":[[255,5]]},"504":{"position":[[1275,5]]},"534":{"position":[[792,5]]},"547":{"position":[[1648,5]]},"552":{"position":[[718,6]]},"556":{"position":[[1399,5]]},"639":{"position":[[1273,5]]},"757":{"position":[[1419,5]]},"770":{"position":[[1419,5]]},"782":{"position":[[355,5]]},"797":{"position":[[1419,5]]},"812":{"position":[[1419,5]]},"828":{"position":[[1419,5]]},"867":{"position":[[535,5]]},"907":{"position":[[857,5]]},"923":{"position":[[857,5]]},"934":{"position":[[857,5]]},"950":{"position":[[857,5]]},"968":{"position":[[857,5]]},"1023":{"position":[[1629,5]]},"1045":{"position":[[705,5]]},"1053":{"position":[[705,5]]},"1061":{"position":[[705,5]]},"1144":{"position":[[963,5]]},"1213":{"position":[[640,5]]}},"keywords":{}}],["command",{"_index":641,"title":{"1471":{"position":[[39,7]]}},"content":{"29":{"position":[[140,7]]},"31":{"position":[[14,7]]},"60":{"position":[[1109,7]]},"63":{"position":[[991,8]]},"68":{"position":[[739,7],[1267,7],[1797,8]]},"80":{"position":[[167,7]]},"103":{"position":[[457,7]]},"135":{"position":[[755,7]]},"169":{"position":[[112,7]]},"221":{"position":[[1219,8],[1348,8]]},"222":{"position":[[464,8],[593,8]]},"223":{"position":[[430,8],[559,8]]},"224":{"position":[[483,8],[612,8]]},"236":{"position":[[806,8]]},"237":{"position":[[2144,8]]},"238":{"position":[[113,8]]},"253":{"position":[[475,7]]},"255":{"position":[[93,7]]},"270":{"position":[[567,7]]},"274":{"position":[[876,7]]},"281":{"position":[[690,8]]},"295":{"position":[[1768,8]]},"296":{"position":[[3777,7]]},"313":{"position":[[475,7]]},"315":{"position":[[142,8]]},"316":{"position":[[93,7]]},"367":{"position":[[221,8]]},"486":{"position":[[256,8],[286,7]]},"513":{"position":[[288,7]]},"522":{"position":[[295,7]]},"530":{"position":[[295,7]]},"551":{"position":[[287,7]]},"569":{"position":[[319,7]]},"607":{"position":[[318,7]]},"614":{"position":[[302,7]]},"650":{"position":[[268,7]]},"658":{"position":[[256,8],[286,7]]},"674":{"position":[[256,8],[286,7]]},"689":{"position":[[256,8],[286,7]]},"716":{"position":[[304,7]]},"731":{"position":[[261,7]]},"767":{"position":[[1724,8],[2215,7]]},"792":{"position":[[1664,8],[2207,7]]},"824":{"position":[[1786,8],[2329,7]]},"864":{"position":[[156,8]]},"871":{"position":[[114,7]]},"876":{"position":[[156,8]]},"904":{"position":[[1325,8]]},"918":{"position":[[1617,8]]},"919":{"position":[[799,8]]},"931":{"position":[[982,8]]},"943":{"position":[[658,7],[721,8],[743,8]]},"944":{"position":[[125,8]]},"1008":{"position":[[1112,7],[1179,7],[1896,7]]},"1042":{"position":[[47,9]]},"1043":{"position":[[711,9]]},"1051":{"position":[[967,9]]},"1059":{"position":[[731,9]]},"1298":{"position":[[430,8],[559,8]]},"1322":{"position":[[464,8],[593,8]]},"1335":{"position":[[464,8],[593,8]]},"1346":{"position":[[430,8],[559,8]]},"1373":{"position":[[949,9]]},"1374":{"position":[[949,9]]},"1384":{"position":[[622,9]]},"1397":{"position":[[728,9]]},"1398":{"position":[[727,9]]},"1408":{"position":[[47,9]]},"1409":{"position":[[711,9]]},"1469":{"position":[[116,7]]},"1471":{"position":[[106,7],[1149,7]]}},"keywords":{}}],["comment",{"_index":2470,"title":{},"content":{"223":{"position":[[736,8]]},"236":{"position":[[2254,7],[2328,7],[2385,7],[2447,7],[2613,7],[3039,7],[3113,7],[3170,7],[3232,7]]},"529":{"position":[[276,8],[301,7],[340,8],[434,7],[586,7],[666,8]]},"723":{"position":[[306,9]]},"791":{"position":[[639,7]]},"792":{"position":[[1959,7]]},"793":{"position":[[1313,7]]},"808":{"position":[[1259,7]]},"824":{"position":[[2081,7]]},"1128":{"position":[[226,7]]},"1292":{"position":[[690,7]]},"1298":{"position":[[736,8]]},"1303":{"position":[[1483,7]]},"1306":{"position":[[690,7]]},"1329":{"position":[[690,7]]},"1346":{"position":[[736,8]]}},"keywords":{}}],["commentsdiscuss",{"_index":3909,"title":{},"content":{"506":{"position":[[167,18]]}},"keywords":{}}],["commentsissu",{"_index":4496,"title":{},"content":{"709":{"position":[[777,13]]}},"keywords":{}}],["commentspost",{"_index":5449,"title":{},"content":{"1128":{"position":[[213,12]]}},"keywords":{}}],["commentsticket",{"_index":5455,"title":{},"content":{"1128":{"position":[[314,14]]}},"keywords":{}}],["commit",{"_index":964,"title":{},"content":{"64":{"position":[[502,6]]},"68":{"position":[[1489,9],[1531,9]]},"97":{"position":[[846,6]]},"100":{"position":[[1113,7],[1178,10]]},"163":{"position":[[1071,6]]},"191":{"position":[[2118,7]]},"240":{"position":[[2079,7]]},"331":{"position":[[365,10]]},"343":{"position":[[472,7],[531,6],[962,7]]},"410":{"position":[[205,10]]},"411":{"position":[[168,9]]},"529":{"position":[[294,6],[333,6],[362,7],[383,7]]},"534":{"position":[[325,7]]},"602":{"position":[[76,9],[480,9],[593,10]]},"922":{"position":[[200,10],[3067,8]]},"1032":{"position":[[1925,7]]},"1140":{"position":[[2967,6]]},"1147":{"position":[[245,9]]},"1156":{"position":[[462,6],[893,10]]},"1174":{"position":[[245,9]]},"1216":{"position":[[245,9]]},"1224":{"position":[[245,9]]},"1292":{"position":[[732,6],[763,9]]},"1306":{"position":[[732,6],[763,9]]},"1316":{"position":[[2967,6]]},"1329":{"position":[[732,6],[763,9]]},"1340":{"position":[[2967,6]]},"1351":{"position":[[2967,6]]},"1370":{"position":[[632,6]]},"1379":{"position":[[3557,6]]},"1383":{"position":[[2066,7]]},"1403":{"position":[[3557,6]]},"1414":{"position":[[3557,6]]},"1431":{"position":[[2990,6]]},"1434":{"position":[[620,7],[2029,6],[2143,6]]},"1435":{"position":[[279,6],[426,7],[723,6]]},"1437":{"position":[[535,9],[926,10],[1059,7],[1397,6],[1594,10]]},"1439":{"position":[[262,8],[596,9],[712,8],[1143,9],[1253,6],[1352,7],[1714,9]]},"1442":{"position":[[203,9],[310,10],[601,6],[673,6],[834,9],[954,6],[1015,6],[1380,6],[1483,6],[1763,6]]},"1444":{"position":[[657,6],[986,7]]},"1452":{"position":[[2016,6]]},"1471":{"position":[[531,9],[623,9]]},"1475":{"position":[[514,6]]}},"keywords":{}}],["commits<br/>to",{"_index":6441,"title":{},"content":{"1434":{"position":[[553,20]]}},"keywords":{}}],["commitspul",{"_index":4031,"title":{},"content":{"529":{"position":[[934,11]]}},"keywords":{}}],["committed<br/>runtim",{"_index":6436,"title":{},"content":{"1434":{"position":[[340,27]]}},"keywords":{}}],["common",{"_index":421,"title":{"133":{"position":[[8,6]]},"1436":{"position":[[0,6]]}},"content":{"14":{"position":[[80,6]]},"59":{"position":[[17,6]]},"60":{"position":[[1004,6]]},"92":{"position":[[631,6]]},"95":{"position":[[235,6]]},"98":{"position":[[975,6]]},"107":{"position":[[2467,6]]},"110":{"position":[[809,6]]},"128":{"position":[[267,6]]},"133":{"position":[[172,6],[254,6]]},"135":{"position":[[211,6]]},"163":{"position":[[93,6]]},"164":{"position":[[400,6],[911,6]]},"213":{"position":[[88,6]]},"239":{"position":[[2471,6]]},"257":{"position":[[48,6]]},"280":{"position":[[218,7]]},"306":{"position":[[55,6]]},"321":{"position":[[232,6]]},"326":{"position":[[1537,6]]},"448":{"position":[[1131,6]]},"449":{"position":[[393,6]]},"480":{"position":[[477,6]]},"517":{"position":[[388,6]]},"660":{"position":[[88,6],[968,6]]},"821":{"position":[[1193,6]]},"1436":{"position":[[17,6]]},"1447":{"position":[[3,6]]},"1453":{"position":[[928,6]]},"1461":{"position":[[2620,6],[4284,6]]}},"keywords":{}}],["commonli",{"_index":809,"title":{},"content":{"54":{"position":[[608,8]]},"90":{"position":[[45,8]]},"122":{"position":[[2196,8]]},"163":{"position":[[833,9]]},"164":{"position":[[1063,8]]},"1286":{"position":[[2043,8]]},"1301":{"position":[[1879,8]]},"1325":{"position":[[2043,8]]}},"keywords":{}}],["commun",{"_index":1268,"title":{},"content":{"84":{"position":[[763,9]]},"204":{"position":[[518,13]]},"212":{"position":[[417,10]]},"232":{"position":[[1012,10]]},"243":{"position":[[412,10]]},"724":{"position":[[288,9]]},"726":{"position":[[245,9]]}},"keywords":{}}],["commut",{"_index":6591,"title":{},"content":{"1459":{"position":[[1272,11]]}},"keywords":{}}],["compact",{"_index":2049,"title":{},"content":{"180":{"position":[[90,7]]},"1165":{"position":[[302,10]]},"1292":{"position":[[792,7]]},"1306":{"position":[[792,7]]},"1329":{"position":[[792,7]]}},"keywords":{}}],["compani",{"_index":1257,"title":{},"content":{"84":{"position":[[169,9],[213,7],[423,7],[1216,8]]},"338":{"position":[[346,8]]},"647":{"position":[[216,9]]},"655":{"position":[[224,9]]},"686":{"position":[[338,9]]},"840":{"position":[[248,7],[261,7]]},"849":{"position":[[191,7],[204,7],[417,7],[777,7]]}},"keywords":{}}],["companiescontactscustom",{"_index":4369,"title":{},"content":{"642":{"position":[[86,23]]}},"keywords":{}}],["company_attribut",{"_index":4440,"title":{},"content":{"686":{"position":[[774,18]]}},"keywords":{}}],["company_seg",{"_index":4434,"title":{},"content":{"686":{"position":[[418,16]]}},"keywords":{}}],["compar",{"_index":273,"title":{},"content":{"8":{"position":[[708,7]]},"180":{"position":[[956,7]]},"184":{"position":[[104,7]]},"185":{"position":[[141,7]]},"228":{"position":[[511,7]]},"320":{"position":[[469,10],[2351,8]]},"329":{"position":[[323,10]]},"333":{"position":[[315,10]]},"1208":{"position":[[300,8]]},"1358":{"position":[[203,8]]},"1384":{"position":[[954,7]]},"1391":{"position":[[892,8]]},"1439":{"position":[[1115,8]]},"1440":{"position":[[880,7]]},"1459":{"position":[[1442,8]]}},"keywords":{}}],["comparison",{"_index":756,"title":{"318":{"position":[[0,11]]}},"content":{"44":{"position":[[253,11]]},"319":{"position":[[17,10]]},"322":{"position":[[119,11]]}},"keywords":{}}],["compat",{"_index":167,"title":{},"content":{"4":{"position":[[423,10]]},"53":{"position":[[419,13]]},"80":{"position":[[144,10]]},"208":{"position":[[866,10]]},"239":{"position":[[2330,14]]},"322":{"position":[[1787,10]]},"323":{"position":[[1517,10]]},"364":{"position":[[498,14]]},"392":{"position":[[489,10]]},"397":{"position":[[638,10]]},"417":{"position":[[655,10]]},"1125":{"position":[[432,10]]},"1144":{"position":[[793,10]]},"1164":{"position":[[707,13]]},"1170":{"position":[[793,10]]},"1201":{"position":[[85,10]]},"1293":{"position":[[85,10]]},"1307":{"position":[[85,10]]},"1317":{"position":[[85,10],[512,10]]},"1330":{"position":[[85,10]]},"1341":{"position":[[85,10],[512,10]]},"1352":{"position":[[85,10],[512,10]]},"1359":{"position":[[85,10]]},"1380":{"position":[[85,10]]},"1404":{"position":[[85,10]]},"1415":{"position":[[85,10]]},"1432":{"position":[[85,10],[512,10]]}},"keywords":{}}],["compil",{"_index":1464,"title":{},"content":{"102":{"position":[[318,8]]},"158":{"position":[[678,7]]},"281":{"position":[[2712,8]]}},"keywords":{}}],["complain",{"_index":4887,"title":{},"content":{"869":{"position":[[913,8]]}},"keywords":{}}],["complaintemail",{"_index":4452,"title":{},"content":{"697":{"position":[[134,14]]}},"keywords":{}}],["complementari",{"_index":3103,"title":{},"content":{"319":{"position":[[361,13]]}},"keywords":{}}],["complet",{"_index":296,"title":{},"content":{"11":{"position":[[225,8]]},"13":{"position":[[1152,10]]},"26":{"position":[[453,9],[539,9]]},"32":{"position":[[112,8]]},"56":{"position":[[2244,10],[2427,11]]},"80":{"position":[[104,10]]},"83":{"position":[[296,10]]},"110":{"position":[[712,8]]},"114":{"position":[[626,8]]},"135":{"position":[[60,8]]},"137":{"position":[[485,8]]},"154":{"position":[[106,8],[1783,8]]},"157":{"position":[[216,8]]},"165":{"position":[[204,8]]},"170":{"position":[[155,8]]},"173":{"position":[[295,8]]},"177":{"position":[[34,8]]},"179":{"position":[[249,8]]},"190":{"position":[[1761,10],[2011,9]]},"191":{"position":[[64,8]]},"192":{"position":[[2123,10]]},"193":{"position":[[18,8]]},"208":{"position":[[1391,10]]},"225":{"position":[[14,9]]},"240":{"position":[[2360,9]]},"255":{"position":[[1087,10]]},"262":{"position":[[4,8]]},"264":{"position":[[568,9]]},"270":{"position":[[585,8]]},"273":{"position":[[4,8]]},"274":{"position":[[894,8]]},"275":{"position":[[14,8]]},"283":{"position":[[4,8]]},"316":{"position":[[1412,10]]},"322":{"position":[[648,10]]},"324":{"position":[[1027,8]]},"343":{"position":[[541,8]]},"367":{"position":[[28,8]]},"368":{"position":[[264,8]]},"375":{"position":[[67,8]]},"377":{"position":[[1005,9]]},"384":{"position":[[220,8]]},"419":{"position":[[2354,8]]},"441":{"position":[[963,8]]},"446":{"position":[[154,8]]},"504":{"position":[[1983,8]]},"526":{"position":[[1,8]]},"547":{"position":[[2356,8]]},"595":{"position":[[1235,9],[1630,9]]},"639":{"position":[[1981,8]]},"726":{"position":[[318,8]]},"755":{"position":[[264,8]]},"764":{"position":[[718,8]]},"768":{"position":[[264,8]]},"777":{"position":[[718,8]]},"795":{"position":[[262,8]]},"804":{"position":[[716,8]]},"810":{"position":[[262,8]]},"819":{"position":[[716,8]]},"826":{"position":[[262,8]]},"835":{"position":[[716,8]]},"905":{"position":[[267,8]]},"920":{"position":[[267,8]]},"932":{"position":[[267,8]]},"948":{"position":[[267,8]]},"966":{"position":[[267,8]]},"1006":{"position":[[459,9]]},"1023":{"position":[[2337,8]]},"1077":{"position":[[185,9]]},"1118":{"position":[[1083,8]]},"1147":{"position":[[268,9]]},"1174":{"position":[[268,9]]},"1177":{"position":[[36,8]]},"1178":{"position":[[433,8]]},"1189":{"position":[[414,8]]},"1197":{"position":[[420,8]]},"1207":{"position":[[503,8]]},"1216":{"position":[[268,9]]},"1224":{"position":[[268,9]]},"1243":{"position":[[928,10]]},"1248":{"position":[[447,8]]},"1292":{"position":[[838,10]]},"1306":{"position":[[838,10]]},"1329":{"position":[[838,10]]},"1357":{"position":[[352,8]]},"1379":{"position":[[3607,10]]},"1387":{"position":[[453,8],[1079,8]]},"1388":{"position":[[482,10]]},"1403":{"position":[[3607,10]]},"1414":{"position":[[3607,10]]},"1421":{"position":[[440,8]]},"1434":{"position":[[1930,9]]},"1438":{"position":[[541,10]]},"1442":{"position":[[583,9],[1770,10]]},"1443":{"position":[[402,10]]},"1452":{"position":[[1673,9],[1931,8],[2026,8]]},"1453":{"position":[[230,8],[704,9]]},"1470":{"position":[[293,8]]}},"keywords":{}}],["complex",{"_index":578,"title":{},"content":{"23":{"position":[[216,8]]},"40":{"position":[[266,7]]},"42":{"position":[[699,7]]},"66":{"position":[[635,10]]},"101":{"position":[[131,10]]},"131":{"position":[[48,7]]},"156":{"position":[[258,8]]},"208":{"position":[[1018,7]]},"210":{"position":[[2205,12]]},"219":{"position":[[183,7]]},"241":{"position":[[509,7]]},"281":{"position":[[2782,7]]},"324":{"position":[[1098,7]]},"329":{"position":[[866,11]]},"371":{"position":[[1460,8]]},"393":{"position":[[443,8]]},"398":{"position":[[434,8]]},"418":{"position":[[501,8]]},"433":{"position":[[869,8]]},"483":{"position":[[461,7]]},"546":{"position":[[1208,8]]},"758":{"position":[[444,8]]},"771":{"position":[[444,8]]},"798":{"position":[[442,8]]},"813":{"position":[[442,8]]},"829":{"position":[[442,8]]},"908":{"position":[[488,8]]},"922":{"position":[[2270,7]]},"924":{"position":[[488,8]]},"935":{"position":[[488,8]]},"951":{"position":[[488,8]]},"969":{"position":[[488,8]]},"1046":{"position":[[422,8]]},"1054":{"position":[[422,8]]},"1062":{"position":[[422,8]]},"1476":{"position":[[866,7]]}},"keywords":{}}],["compli",{"_index":4530,"title":{},"content":{"726":{"position":[[162,8]]},"1448":{"position":[[178,6]]}},"keywords":{}}],["complianc",{"_index":2825,"title":{},"content":{"277":{"position":[[91,10],[1243,10]]}},"keywords":{}}],["complic",{"_index":412,"title":{},"content":{"13":{"position":[[1469,11]]},"847":{"position":[[430,11]]}},"keywords":{}}],["compon",{"_index":128,"title":{},"content":{"3":{"position":[[627,11],[640,9]]},"4":{"position":[[81,10]]},"11":{"position":[[207,10]]},"13":{"position":[[162,10],[279,10]]},"32":{"position":[[172,11]]},"38":{"position":[[23,10]]},"44":{"position":[[124,10]]},"81":{"position":[[722,10]]},"107":{"position":[[1879,10],[2189,11]]},"189":{"position":[[1658,10]]},"216":{"position":[[427,9]]},"239":{"position":[[2307,10]]},"289":{"position":[[547,10]]},"296":{"position":[[3636,10]]},"300":{"position":[[494,10]]},"429":{"position":[[1097,10]]},"1195":{"position":[[525,9]]},"1292":{"position":[[881,9]]},"1306":{"position":[[881,9]]},"1329":{"position":[[881,9]]}},"keywords":{}}],["component.avail",{"_index":1011,"title":{},"content":{"67":{"position":[[1248,23]]}},"keywords":{}}],["componentsproject",{"_index":4483,"title":{},"content":{"709":{"position":[[520,17]]}},"keywords":{}}],["compos",{"_index":1904,"title":{"1465":{"position":[[0,9]]}},"content":{"161":{"position":[[846,7]]},"164":{"position":[[1722,7]]},"234":{"position":[[120,7]]},"236":{"position":[[462,7]]},"237":{"position":[[3137,7]]},"313":{"position":[[3369,8]]},"321":{"position":[[2009,9],[2062,9]]},"1465":{"position":[[0,9]]}},"keywords":{}}],["compose.yml",{"_index":2499,"title":{},"content":{"236":{"position":[[311,12],[336,11],[573,11]]}},"keywords":{}}],["composit",{"_index":1039,"title":{"73":{"position":[[0,9]]}},"content":{"69":{"position":[[631,9]]},"73":{"position":[[68,9]]},"94":{"position":[[2903,9]]},"107":{"position":[[1375,9],[1895,9],[3701,9]]},"156":{"position":[[278,9]]},"164":{"position":[[1593,11]]},"296":{"position":[[3652,9]]},"321":{"position":[[1493,11]]},"324":{"position":[[331,12]]},"1476":{"position":[[910,9]]}},"keywords":{}}],["comprehens",{"_index":785,"title":{},"content":{"50":{"position":[[178,13]]},"129":{"position":[[342,14]]},"209":{"position":[[763,13]]},"975":{"position":[[344,13]]},"977":{"position":[[400,13]]}},"keywords":{}}],["compress",{"_index":23,"title":{},"content":{"1":{"position":[[288,8],[646,12]]},"3":{"position":[[84,10],[965,11]]},"417":{"position":[[1475,11],[1577,11]]},"418":{"position":[[142,12]]},"419":{"position":[[653,12],[702,11],[720,11],[791,11]]},"439":{"position":[[399,12]]},"440":{"position":[[669,12],[718,11],[736,11],[807,11]]},"499":{"position":[[208,11],[314,11],[387,12]]},"502":{"position":[[1123,11],[1225,11]]},"504":{"position":[[597,12],[634,11],[652,11],[723,11]]},"545":{"position":[[1077,11],[1179,11]]},"546":{"position":[[879,12]]},"547":{"position":[[654,12],[703,11],[721,11],[792,11]]},"634":{"position":[[200,11],[306,11],[379,12]]},"637":{"position":[[637,11],[739,11]]},"638":{"position":[[171,12]]},"639":{"position":[[595,12],[632,11],[650,11],[721,11]]},"1021":{"position":[[1634,11],[1736,11]]},"1022":{"position":[[208,12]]},"1023":{"position":[[634,12],[683,11],[701,11],[772,11]]},"1292":{"position":[[918,10],[957,11]]},"1306":{"position":[[918,10],[957,11]]},"1329":{"position":[[918,10],[957,11]]}},"keywords":{}}],["compressioncodec",{"_index":32,"title":{},"content":{"1":{"position":[[385,17]]}},"keywords":{}}],["compris",{"_index":667,"title":{},"content":{"33":{"position":[[48,8]]},"60":{"position":[[826,8]]},"66":{"position":[[131,9]]},"122":{"position":[[845,10]]},"149":{"position":[[1236,8]]},"189":{"position":[[1010,9]]},"216":{"position":[[112,9]]},"274":{"position":[[183,9]]},"289":{"position":[[298,10]]},"300":{"position":[[277,10]]},"373":{"position":[[28,9]]},"1178":{"position":[[313,9]]},"1474":{"position":[[687,9],[820,9]]}},"keywords":{}}],["comput",{"_index":1552,"title":{},"content":{"107":{"position":[[2857,8]]},"113":{"position":[[721,7]]},"222":{"position":[[94,9]]},"254":{"position":[[3360,8]]},"314":{"position":[[2935,8]]},"331":{"position":[[780,7]]},"577":{"position":[[45,7]]},"588":{"position":[[40,7]]},"942":{"position":[[283,8]]},"1036":{"position":[[21,7]]},"1322":{"position":[[94,9]]},"1335":{"position":[[94,9]]},"1379":{"position":[[3658,7]]},"1388":{"position":[[126,7],[534,8]]},"1403":{"position":[[3658,7]]},"1414":{"position":[[3658,7]]},"1453":{"position":[[144,8],[326,8],[826,8],[1211,7],[1315,7],[1516,7],[1570,7]]}},"keywords":{}}],["concat",{"_index":5871,"title":{},"content":{"1209":{"position":[[434,6]]}},"keywords":{}}],["concept",{"_index":639,"title":{"28":{"position":[[0,8]]},"32":{"position":[[10,9]]},"39":{"position":[[13,9]]},"47":{"position":[[9,9]]}},"content":{"32":{"position":[[64,9]]},"39":{"position":[[40,8]]},"47":{"position":[[38,9]]},"69":{"position":[[966,7]]},"107":{"position":[[189,7]]},"159":{"position":[[41,7]]},"176":{"position":[[182,9],[203,9]]},"177":{"position":[[255,8]]},"215":{"position":[[77,9],[160,8]]},"219":{"position":[[105,8]]},"253":{"position":[[759,8]]},"257":{"position":[[207,8]]},"288":{"position":[[61,9]]},"299":{"position":[[61,9]]},"313":{"position":[[759,8]]},"319":{"position":[[942,8],[1441,7]]},"1473":{"position":[[285,8]]}},"keywords":{}}],["conceptu",{"_index":80,"title":{},"content":{"2":{"position":[[328,13]]},"36":{"position":[[208,10]]},"319":{"position":[[281,10]]},"325":{"position":[[211,10]]},"326":{"position":[[467,12]]},"345":{"position":[[251,10]]},"1461":{"position":[[292,12]]}},"keywords":{}}],["concern",{"_index":1632,"title":{},"content":{"115":{"position":[[1285,7]]}},"keywords":{}}],["conclus",{"_index":2168,"title":{"193":{"position":[[0,11]]}},"content":{},"keywords":{}}],["concret",{"_index":1482,"title":{},"content":{"103":{"position":[[843,8]]},"322":{"position":[[1169,9]]}},"keywords":{}}],["concurr",{"_index":2264,"title":{},"content":{"209":{"position":[[465,12]]},"842":{"position":[[1390,10],[1507,10],[2428,12],[2441,11],[2471,10],[2647,12]]},"843":{"position":[[746,12]]},"1140":{"position":[[2999,12]]},"1292":{"position":[[995,10]]},"1306":{"position":[[995,10]]},"1316":{"position":[[2999,12]]},"1329":{"position":[[995,10]]},"1340":{"position":[[2999,12]]},"1351":{"position":[[2999,12]]},"1431":{"position":[[3022,12]]}},"keywords":{}}],["condit",{"_index":1565,"title":{"1465":{"position":[[15,12]]}},"content":{"110":{"position":[[124,9]]},"164":{"position":[[1610,13],[1700,13],[2207,12]]},"236":{"position":[[1450,10]]},"487":{"position":[[622,10]]},"1140":{"position":[[3034,9]]},"1292":{"position":[[1042,9]]},"1306":{"position":[[1042,9]]},"1316":{"position":[[3034,9]]},"1329":{"position":[[1042,9]]},"1340":{"position":[[3034,9]]},"1351":{"position":[[3034,9]]},"1379":{"position":[[3704,9]]},"1403":{"position":[[3704,9]]},"1414":{"position":[[3704,9]]},"1431":{"position":[[3057,9]]},"1464":{"position":[[928,12]]},"1465":{"position":[[15,12],[173,11],[307,12]]}},"keywords":{}}],["conduct",{"_index":5771,"title":{},"content":{"1165":{"position":[[49,7]]}},"keywords":{}}],["conenect",{"_index":6249,"title":{"1297":{"position":[[0,11]]},"1345":{"position":[[0,11]]}},"content":{},"keywords":{}}],["conf",{"_index":2646,"title":{},"content":{"250":{"position":[[253,4]]}},"keywords":{}}],["config",{"_index":842,"title":{},"content":{"56":{"position":[[1291,7]]},"81":{"position":[[1354,7],[2647,7]]},"83":{"position":[[1011,7]]},"120":{"position":[[650,7]]},"144":{"position":[[511,6]]},"184":{"position":[[369,6]]},"206":{"position":[[199,8]]},"218":{"position":[[602,6],[1996,6]]},"221":{"position":[[331,6]]},"259":{"position":[[286,6],[1975,6]]},"291":{"position":[[844,6]]},"302":{"position":[[844,6]]},"307":{"position":[[1122,7],[1596,7],[1972,7],[2464,7]]},"309":{"position":[[2415,7],[3022,7]]},"344":{"position":[[74,7]]},"360":{"position":[[103,7]]},"370":{"position":[[20,6],[220,7]]},"371":{"position":[[173,7]]},"378":{"position":[[112,7]]},"388":{"position":[[174,7]]},"393":{"position":[[161,7]]},"398":{"position":[[162,7]]},"403":{"position":[[102,7]]},"418":{"position":[[96,7],[177,7]]},"425":{"position":[[104,7]]},"433":{"position":[[141,7],[552,7]]},"439":{"position":[[124,7],[434,7]]},"449":{"position":[[172,7]]},"455":{"position":[[104,7]]},"461":{"position":[[104,7]]},"467":{"position":[[100,7]]},"473":{"position":[[174,7]]},"488":{"position":[[638,6]]},"497":{"position":[[108,7]]},"503":{"position":[[103,7]]},"510":{"position":[[103,7]]},"518":{"position":[[182,7]]},"527":{"position":[[170,7]]},"535":{"position":[[170,7]]},"541":{"position":[[101,7]]},"546":{"position":[[97,7],[914,7]]},"548":{"position":[[809,7]]},"557":{"position":[[174,7]]},"566":{"position":[[106,7]]},"575":{"position":[[169,7]]},"586":{"position":[[175,7]]},"594":{"position":[[103,7]]},"612":{"position":[[185,7]]},"620":{"position":[[107,7]]},"626":{"position":[[105,7]]},"632":{"position":[[102,7]]},"638":{"position":[[103,7],[206,7]]},"647":{"position":[[108,7]]},"655":{"position":[[101,7]]},"659":{"position":[[795,6]]},"671":{"position":[[104,7]]},"676":{"position":[[638,6]]},"686":{"position":[[163,7]]},"691":{"position":[[638,6]]},"701":{"position":[[103,7]]},"707":{"position":[[102,7]]},"713":{"position":[[99,7]]},"721":{"position":[[176,7]]},"736":{"position":[[103,7]]},"742":{"position":[[102,7]]},"748":{"position":[[103,7]]},"758":{"position":[[161,7]]},"771":{"position":[[161,7]]},"783":{"position":[[101,7]]},"798":{"position":[[159,7]]},"813":{"position":[[159,7]]},"829":{"position":[[159,7]]},"842":{"position":[[1259,6]]},"843":{"position":[[105,7]]},"852":{"position":[[103,7]]},"860":{"position":[[170,7]]},"868":{"position":[[100,7]]},"880":{"position":[[110,7]]},"886":{"position":[[113,7]]},"892":{"position":[[99,7]]},"908":{"position":[[174,7]]},"924":{"position":[[174,7]]},"935":{"position":[[174,7]]},"951":{"position":[[174,7]]},"960":{"position":[[103,7]]},"969":{"position":[[174,7]]},"983":{"position":[[103,7]]},"992":{"position":[[109,7]]},"998":{"position":[[101,7]]},"1010":{"position":[[174,7]]},"1016":{"position":[[100,7]]},"1022":{"position":[[100,7],[243,7]]},"1029":{"position":[[103,7]]},"1037":{"position":[[103,7]]},"1046":{"position":[[115,7]]},"1054":{"position":[[115,7]]},"1062":{"position":[[115,7]]},"1071":{"position":[[176,7]]},"1078":{"position":[[100,7]]},"1086":{"position":[[192,7]]},"1102":{"position":[[112,7]]},"1108":{"position":[[106,7]]},"1114":{"position":[[101,7]]},"1126":{"position":[[123,7]]},"1134":{"position":[[109,7]]},"1138":{"position":[[20,6],[220,7]]},"1139":{"position":[[110,7]]},"1145":{"position":[[121,7]]},"1152":{"position":[[123,7]]},"1163":{"position":[[125,7]]},"1171":{"position":[[125,7]]},"1180":{"position":[[63,7]]},"1189":{"position":[[64,7]]},"1197":{"position":[[184,7]]},"1207":{"position":[[63,7]]},"1214":{"position":[[122,7]]},"1221":{"position":[[126,7]]},"1231":{"position":[[133,7]]},"1241":{"position":[[163,7]]},"1248":{"position":[[133,7]]},"1254":{"position":[[114,7]]},"1261":{"position":[[125,7]]},"1270":{"position":[[117,7]]},"1278":{"position":[[123,7]]},"1287":{"position":[[108,7]]},"1302":{"position":[[108,7]]},"1314":{"position":[[111,7]]},"1326":{"position":[[108,7]]},"1338":{"position":[[111,7]]},"1349":{"position":[[111,7]]},"1357":{"position":[[63,7]]},"1363":{"position":[[120,7]]},"1368":{"position":[[109,7]]},"1377":{"position":[[112,7]]},"1387":{"position":[[98,7],[652,7]]},"1401":{"position":[[112,7]]},"1412":{"position":[[112,7]]},"1421":{"position":[[64,7]]},"1428":{"position":[[114,7]]},"1472":{"position":[[722,7]]},"1480":{"position":[[584,7]]}},"keywords":{}}],["config.json",{"_index":4583,"title":{},"content":{"750":{"position":[[720,12]]},"752":{"position":[[155,11]]},"766":{"position":[[720,12]]},"791":{"position":[[108,11]]},"807":{"position":[[708,12]]},"823":{"position":[[708,12]]}},"keywords":{}}],["config.json.th",{"_index":4703,"title":{},"content":{"789":{"position":[[708,15]]}},"keywords":{}}],["config.sops.yaml",{"_index":3045,"title":{},"content":{"307":{"position":[[1143,16],[1624,16],[1993,16],[2492,16]]},"309":{"position":[[2443,16],[3050,16]]}},"keywords":{}}],["config.yaml",{"_index":844,"title":{},"content":{"56":{"position":[[1317,11]]},"82":{"position":[[1374,11],[1859,11],[1980,11],[2758,11],[3069,12],[3804,11],[4183,11],[4316,11],[4896,11]]},"120":{"position":[[676,11]]},"1480":{"position":[[611,11]]}},"keywords":{}}],["configsemail",{"_index":3912,"title":{},"content":{"506":{"position":[[215,12]]}},"keywords":{}}],["configur",{"_index":16,"title":{"170":{"position":[[0,11]]},"203":{"position":[[0,13]]},"204":{"position":[[0,9]]},"206":{"position":[[16,14]]},"220":{"position":[[0,9]]},"225":{"position":[[0,14]]},"237":{"position":[[0,11]]},"342":{"position":[[0,11]]},"350":{"position":[[0,14]]},"358":{"position":[[0,14]]},"369":{"position":[[0,14]]},"376":{"position":[[0,14]]},"386":{"position":[[0,14]]},"391":{"position":[[0,14]]},"396":{"position":[[0,14]]},"401":{"position":[[0,14]]},"407":{"position":[[0,14]]},"416":{"position":[[0,14]]},"423":{"position":[[0,14]]},"431":{"position":[[0,14]]},"437":{"position":[[0,14]]},"441":{"position":[[4,14]]},"447":{"position":[[0,14]]},"453":{"position":[[0,14]]},"459":{"position":[[0,14]]},"465":{"position":[[0,14]]},"472":{"position":[[0,14]]},"481":{"position":[[0,14]]},"487":{"position":[[0,9]]},"491":{"position":[[9,14]]},"492":{"position":[[9,14]]},"495":{"position":[[0,14]]},"501":{"position":[[0,14]]},"508":{"position":[[0,14]]},"515":{"position":[[0,11]]},"516":{"position":[[0,14]]},"524":{"position":[[0,11]]},"525":{"position":[[0,14]]},"532":{"position":[[0,11]]},"533":{"position":[[0,14]]},"539":{"position":[[0,14]]},"544":{"position":[[0,14]]},"548":{"position":[[10,9]]},"554":{"position":[[0,11]]},"555":{"position":[[0,14]]},"563":{"position":[[0,14]]},"572":{"position":[[0,14]]},"583":{"position":[[0,14]]},"592":{"position":[[0,14]]},"600":{"position":[[0,14]]},"610":{"position":[[0,14]]},"617":{"position":[[0,11]]},"618":{"position":[[0,14]]},"624":{"position":[[0,14]]},"630":{"position":[[0,14]]},"636":{"position":[[0,14]]},"645":{"position":[[0,11]]},"646":{"position":[[0,14]]},"652":{"position":[[0,11]]},"653":{"position":[[0,14]]},"664":{"position":[[9,14]]},"665":{"position":[[9,14]]},"669":{"position":[[0,14]]},"675":{"position":[[0,9]]},"679":{"position":[[9,14]]},"680":{"position":[[9,14]]},"684":{"position":[[0,14]]},"690":{"position":[[0,9]]},"694":{"position":[[9,14]]},"695":{"position":[[9,14]]},"699":{"position":[[0,14]]},"705":{"position":[[0,14]]},"711":{"position":[[0,14]]},"718":{"position":[[0,11]]},"719":{"position":[[0,14]]},"727":{"position":[[0,14]]},"733":{"position":[[0,11]]},"734":{"position":[[0,14]]},"740":{"position":[[0,14]]},"746":{"position":[[0,14]]},"756":{"position":[[0,14]]},"769":{"position":[[0,14]]},"781":{"position":[[0,14]]},"796":{"position":[[0,14]]},"811":{"position":[[0,14]]},"827":{"position":[[0,14]]},"841":{"position":[[0,14]]},"850":{"position":[[0,14]]},"858":{"position":[[0,14]]},"866":{"position":[[0,14]]},"878":{"position":[[0,14]]},"884":{"position":[[0,14]]},"890":{"position":[[0,14]]},"896":{"position":[[0,14]]},"906":{"position":[[0,14]]},"921":{"position":[[0,14]]},"933":{"position":[[0,14]]},"949":{"position":[[0,14]]},"958":{"position":[[0,14]]},"967":{"position":[[0,14]]},"981":{"position":[[0,14]]},"988":{"position":[[0,11]]},"990":{"position":[[0,14]]},"996":{"position":[[0,14]]},"1003":{"position":[[0,11]]},"1005":{"position":[[0,14]]},"1014":{"position":[[0,14]]},"1021":{"position":[[0,14]]},"1027":{"position":[[0,14]]},"1033":{"position":[[0,14]]},"1037":{"position":[[7,14]]},"1044":{"position":[[0,14]]},"1052":{"position":[[0,14]]},"1060":{"position":[[0,14]]},"1069":{"position":[[0,14]]},"1075":{"position":[[0,14]]},"1084":{"position":[[0,14]]},"1093":{"position":[[0,14]]},"1100":{"position":[[0,14]]},"1106":{"position":[[0,14]]},"1112":{"position":[[0,14]]},"1124":{"position":[[0,14]]},"1132":{"position":[[0,14]]},"1137":{"position":[[0,14]]},"1143":{"position":[[0,14]]},"1150":{"position":[[0,14]]},"1161":{"position":[[0,14]]},"1169":{"position":[[0,14]]},"1178":{"position":[[0,14]]},"1187":{"position":[[0,14]]},"1195":{"position":[[0,14]]},"1205":{"position":[[0,14]]},"1212":{"position":[[0,14]]},"1219":{"position":[[0,14]]},"1229":{"position":[[0,14]]},"1237":{"position":[[0,14]]},"1246":{"position":[[0,14]]},"1252":{"position":[[0,14]]},"1259":{"position":[[0,14]]},"1265":{"position":[[0,14]]},"1284":{"position":[[0,14]]},"1299":{"position":[[0,14]]},"1312":{"position":[[0,14]]},"1323":{"position":[[0,14]]},"1336":{"position":[[0,14]]},"1347":{"position":[[0,14]]},"1355":{"position":[[0,14]]},"1362":{"position":[[0,14]]},"1366":{"position":[[0,14]]},"1375":{"position":[[0,14]]},"1385":{"position":[[0,14]]},"1399":{"position":[[0,14]]},"1410":{"position":[[0,14]]},"1419":{"position":[[0,14]]},"1426":{"position":[[0,14]]},"1447":{"position":[[9,13]]},"1452":{"position":[[0,11]]},"1479":{"position":[[7,9]]}},"content":{"1":{"position":[[198,13]]},"20":{"position":[[1124,14]]},"21":{"position":[[789,10]]},"24":{"position":[[101,13]]},"54":{"position":[[13,9],[261,13],[479,13]]},"56":{"position":[[1230,14],[1247,13],[1696,13],[1837,13]]},"76":{"position":[[606,9]]},"79":{"position":[[77,9]]},"80":{"position":[[67,13],[617,14]]},"81":{"position":[[438,13],[549,13],[1311,13],[1504,13],[1859,10],[2090,14],[2202,14],[2447,13],[2755,13],[2829,13]]},"82":{"position":[[358,13],[1309,14],[1358,14],[1674,13],[3035,14],[3433,14],[3458,14],[3582,13],[3925,13],[5026,13]]},"83":{"position":[[645,9]]},"107":{"position":[[1165,11]]},"119":{"position":[[156,9],[524,13]]},"120":{"position":[[589,14],[606,13],[1839,13],[1984,13]]},"138":{"position":[[2076,12]]},"141":{"position":[[2032,12]]},"142":{"position":[[2136,12]]},"144":{"position":[[428,13]]},"154":{"position":[[1485,11]]},"168":{"position":[[328,9]]},"190":{"position":[[362,10],[1550,13],[1850,14]]},"192":{"position":[[1972,13],[2212,14]]},"197":{"position":[[95,14]]},"203":{"position":[[311,9]]},"205":{"position":[[272,13]]},"206":{"position":[[159,13],[355,10],[1002,13]]},"207":{"position":[[566,10]]},"209":{"position":[[27,13]]},"210":{"position":[[1544,13]]},"211":{"position":[[452,13]]},"216":{"position":[[576,9]]},"217":{"position":[[2140,14]]},"218":{"position":[[503,14]]},"221":{"position":[[192,9],[292,13],[1434,13],[1569,9],[1739,9]]},"222":{"position":[[729,9]]},"230":{"position":[[904,11]]},"232":{"position":[[500,9]]},"236":{"position":[[1576,15]]},"237":{"position":[[90,11],[2153,9]]},"239":{"position":[[399,9],[547,9],[1007,10],[1656,13]]},"240":{"position":[[65,13],[2739,13],[2972,9],[4044,13],[4492,10],[4797,13],[4933,10]]},"241":{"position":[[157,9]]},"250":{"position":[[1,9],[90,14],[126,13],[231,13]]},"254":{"position":[[1342,14]]},"259":{"position":[[504,14],[1601,14],[2198,14],[3159,14]]},"289":{"position":[[603,9]]},"290":{"position":[[1139,13]]},"291":{"position":[[602,13],[718,13]]},"296":{"position":[[7273,9],[7384,13]]},"300":{"position":[[550,9]]},"301":{"position":[[1348,13]]},"302":{"position":[[602,13],[718,13]]},"306":{"position":[[195,13]]},"307":{"position":[[51,14]]},"314":{"position":[[2413,9],[2958,13]]},"320":{"position":[[1119,14]]},"323":{"position":[[719,12],[1822,10],[1972,14]]},"345":{"position":[[30,13]]},"349":{"position":[[276,15]]},"350":{"position":[[5,9],[212,13]]},"358":{"position":[[5,9],[212,13]]},"366":{"position":[[492,14]]},"369":{"position":[[5,9],[212,13]]},"373":{"position":[[305,13]]},"374":{"position":[[97,9]]},"375":{"position":[[291,11]]},"376":{"position":[[5,9],[212,13]]},"382":{"position":[[97,9]]},"384":{"position":[[10,9]]},"385":{"position":[[10,9]]},"386":{"position":[[5,9],[212,13]]},"391":{"position":[[5,9],[212,13]]},"396":{"position":[[5,9],[212,13]]},"400":{"position":[[113,10]]},"401":{"position":[[9,9],[258,13]]},"407":{"position":[[5,9],[212,13]]},"416":{"position":[[5,9],[212,13]]},"417":{"position":[[1380,13],[1394,10]]},"419":{"position":[[363,13],[537,14],[582,13],[628,13],[1189,10],[1291,13],[1376,14]]},"423":{"position":[[5,9],[212,13]]},"428":{"position":[[41,10]]},"430":{"position":[[235,13]]},"431":{"position":[[5,9],[212,13]]},"436":{"position":[[1053,11]]},"437":{"position":[[5,9],[212,13]]},"440":{"position":[[379,13],[553,14],[598,13],[644,13],[1205,10],[1307,13]]},"444":{"position":[[100,9]]},"447":{"position":[[5,9],[212,13]]},"453":{"position":[[5,9],[212,13]]},"459":{"position":[[5,9],[212,13]]},"465":{"position":[[5,9],[212,13]]},"469":{"position":[[10,9]]},"472":{"position":[[5,9],[212,13]]},"480":{"position":[[320,9]]},"481":{"position":[[5,9],[212,13]]},"483":{"position":[[128,10]]},"485":{"position":[[170,14]]},"487":{"position":[[234,14]]},"488":{"position":[[219,13]]},"495":{"position":[[5,9],[212,13]]},"499":{"position":[[458,14]]},"501":{"position":[[5,9],[168,13]]},"502":{"position":[[1028,13],[1042,10]]},"504":{"position":[[307,13],[481,14],[526,13],[572,13],[1005,14]]},"508":{"position":[[5,9],[212,13]]},"515":{"position":[[4,9]]},"516":{"position":[[5,9],[212,13]]},"517":{"position":[[195,14]]},"520":{"position":[[10,9]]},"525":{"position":[[5,9],[212,13]]},"529":{"position":[[10,9]]},"533":{"position":[[5,9],[212,13]]},"534":{"position":[[1537,14]]},"539":{"position":[[5,9],[212,13]]},"544":{"position":[[5,9],[212,13]]},"545":{"position":[[1004,13],[1018,10]]},"547":{"position":[[364,13],[538,14],[583,13],[629,13],[1191,10],[1293,13],[1378,14]]},"548":{"position":[[53,10],[267,9],[641,14],[793,14],[1170,10]]},"554":{"position":[[213,10]]},"555":{"position":[[5,9],[209,13]]},"562":{"position":[[123,10]]},"563":{"position":[[276,13]]},"568":{"position":[[321,9]]},"571":{"position":[[778,9]]},"572":{"position":[[5,9],[212,13]]},"573":{"position":[[396,14]]},"582":{"position":[[391,9]]},"583":{"position":[[5,9],[202,13]]},"592":{"position":[[5,9],[209,13]]},"593":{"position":[[406,10]]},"595":{"position":[[39,14]]},"600":{"position":[[5,9]]},"606":{"position":[[163,13]]},"609":{"position":[[335,9]]},"610":{"position":[[5,9],[212,13]]},"617":{"position":[[702,9]]},"618":{"position":[[5,9],[212,13]]},"624":{"position":[[5,9],[212,13]]},"630":{"position":[[5,9],[212,13]]},"634":{"position":[[450,14]]},"636":{"position":[[5,9],[212,13]]},"637":{"position":[[564,13],[578,10]]},"639":{"position":[[305,13],[479,14],[524,13],[570,13],[1003,14]]},"640":{"position":[[159,14],[180,13]]},"645":{"position":[[57,10],[493,14]]},"646":{"position":[[5,9],[212,13]]},"649":{"position":[[601,15]]},"652":{"position":[[57,10],[493,14]]},"653":{"position":[[5,9],[212,13]]},"655":{"position":[[300,13]]},"657":{"position":[[170,14]]},"659":{"position":[[4,9],[125,13],[376,13]]},"660":{"position":[[696,13]]},"669":{"position":[[5,9],[212,13]]},"673":{"position":[[170,14]]},"675":{"position":[[77,13],[246,9]]},"676":{"position":[[219,13]]},"683":{"position":[[233,9]]},"684":{"position":[[5,9],[212,13]]},"688":{"position":[[170,14]]},"690":{"position":[[338,11]]},"691":{"position":[[219,13]]},"699":{"position":[[5,9],[212,13]]},"705":{"position":[[5,9],[212,13]]},"711":{"position":[[5,9],[212,13]]},"718":{"position":[[4,9],[357,13]]},"719":{"position":[[5,9],[207,13]]},"724":{"position":[[40,10],[426,13]]},"727":{"position":[[5,9],[212,13]]},"734":{"position":[[5,9],[212,13]]},"740":{"position":[[5,9],[212,13]]},"746":{"position":[[5,9],[212,13]]},"750":{"position":[[1187,10],[1234,13],[1255,9],[1420,9]]},"752":{"position":[[864,9],[995,9]]},"753":{"position":[[370,9],[416,9],[461,13],[529,13],[1686,9]]},"754":{"position":[[1010,13],[1148,10],[1200,13],[1249,13]]},"756":{"position":[[5,9],[212,13]]},"757":{"position":[[2207,9]]},"764":{"position":[[1156,13]]},"766":{"position":[[1187,10]]},"767":{"position":[[516,9],[562,9],[607,13],[675,13],[2490,9]]},"769":{"position":[[5,9],[212,13]]},"770":{"position":[[2207,9]]},"777":{"position":[[1156,13]]},"780":{"position":[[174,13]]},"781":{"position":[[5,9],[209,13]]},"784":{"position":[[153,9],[215,9],[260,13]]},"786":{"position":[[127,10]]},"789":{"position":[[1588,10],[1635,13],[1656,9],[1821,9]]},"791":{"position":[[869,9],[1029,9]]},"792":{"position":[[794,9],[840,9],[885,13],[953,13],[2471,9]]},"793":{"position":[[329,9],[375,9],[420,13],[488,13],[1709,9]]},"794":{"position":[[1214,13],[1352,10],[1404,13],[1453,13]]},"796":{"position":[[5,9],[213,13]]},"797":{"position":[[2214,9]]},"804":{"position":[[1154,13]]},"807":{"position":[[1175,10]]},"808":{"position":[[345,9],[391,9],[436,13],[504,13],[1659,9]]},"809":{"position":[[1214,13],[1352,10],[1404,13],[1453,13]]},"811":{"position":[[5,9],[212,13]]},"812":{"position":[[2214,9]]},"819":{"position":[[1154,13]]},"823":{"position":[[1175,10]]},"824":{"position":[[586,9],[632,9],[677,13],[745,13],[2602,9]]},"825":{"position":[[1050,13],[1188,10],[1240,13],[1289,13]]},"827":{"position":[[5,9],[212,13]]},"828":{"position":[[2214,9]]},"835":{"position":[[1154,13]]},"840":{"position":[[2404,10]]},"841":{"position":[[5,9],[212,13]]},"849":{"position":[[3544,10]]},"850":{"position":[[5,9],[212,13]]},"855":{"position":[[337,13]]},"857":{"position":[[289,14]]},"858":{"position":[[5,9],[212,13]]},"865":{"position":[[16,14]]},"866":{"position":[[5,9],[212,13],[346,9],[392,9],[437,13],[505,13]]},"877":{"position":[[16,14],[236,10]]},"878":{"position":[[5,9],[212,13],[356,9],[402,9],[447,13],[515,13]]},"884":{"position":[[5,9],[212,13]]},"890":{"position":[[5,9],[213,13]]},"896":{"position":[[5,9],[212,13]]},"903":{"position":[[518,14]]},"904":{"position":[[585,9],[631,9],[676,13],[744,13],[2417,9]]},"906":{"position":[[5,9],[212,13]]},"907":{"position":[[1937,14]]},"915":{"position":[[518,14],[1091,13],[1112,9],[1277,9]]},"917":{"position":[[1099,10]]},"918":{"position":[[794,9],[840,9],[885,13],[953,13],[2709,9]]},"919":{"position":[[329,9],[375,9],[420,13],[488,13],[1624,10],[2435,14],[2616,9]]},"921":{"position":[[5,9],[212,13]]},"923":{"position":[[1937,14]]},"930":{"position":[[518,14]]},"931":{"position":[[349,9],[395,9],[440,13],[508,13],[2138,9]]},"933":{"position":[[5,9],[212,13]]},"942":{"position":[[62,13]]},"946":{"position":[[322,11],[359,9]]},"949":{"position":[[5,9],[212,13]]},"958":{"position":[[5,9],[212,13]]},"963":{"position":[[672,14],[1245,13],[1266,9],[1431,9]]},"964":{"position":[[610,9],[708,10]]},"965":{"position":[[1099,10]]},"967":{"position":[[5,9],[212,13]]},"968":{"position":[[1937,14]]},"977":{"position":[[246,10]]},"981":{"position":[[5,9],[212,13]]},"989":{"position":[[674,9]]},"990":{"position":[[5,9],[212,13]]},"996":{"position":[[5,9],[212,13]]},"1000":{"position":[[803,9]]},"1004":{"position":[[757,9]]},"1005":{"position":[[5,9],[209,13]]},"1006":{"position":[[91,10],[353,9]]},"1008":{"position":[[560,10]]},"1014":{"position":[[5,9],[212,13]]},"1019":{"position":[[23,10],[150,10],[299,10]]},"1021":{"position":[[5,9],[212,13],[1322,10],[1539,13],[1553,10]]},"1023":{"position":[[344,13],[518,14],[563,13],[609,13],[1172,10],[1274,13],[1359,14]]},"1027":{"position":[[5,9],[212,13]]},"1033":{"position":[[9,9],[216,13]]},"1036":{"position":[[166,12],[491,10]]},"1042":{"position":[[1242,14],[1294,13]]},"1043":{"position":[[329,9],[375,9],[420,13],[488,13],[1799,14],[1951,9]]},"1044":{"position":[[5,9],[212,13]]},"1047":{"position":[[379,13]]},"1051":{"position":[[585,9],[631,9],[676,13],[744,13],[2133,9]]},"1052":{"position":[[5,9],[212,13]]},"1055":{"position":[[379,13]]},"1059":{"position":[[349,9],[395,9],[440,13],[508,13],[1985,9]]},"1060":{"position":[[5,9],[212,13]]},"1063":{"position":[[379,13]]},"1066":{"position":[[16,9]]},"1067":{"position":[[704,14]]},"1069":{"position":[[5,9],[212,13]]},"1075":{"position":[[5,9],[212,13]]},"1084":{"position":[[5,9],[212,13]]},"1087":{"position":[[149,14]]},"1093":{"position":[[5,9],[212,13]]},"1100":{"position":[[5,9],[212,13]]},"1106":{"position":[[5,9],[213,13]]},"1112":{"position":[[5,9],[212,13]]},"1118":{"position":[[306,9],[891,9]]},"1120":{"position":[[625,13]]},"1123":{"position":[[296,10]]},"1124":{"position":[[5,9],[212,13]]},"1132":{"position":[[5,9],[213,13]]},"1137":{"position":[[101,9]]},"1138":{"position":[[641,14],[1686,14]]},"1143":{"position":[[29,9]]},"1146":{"position":[[449,14],[500,14]]},"1149":{"position":[[117,10],[215,10]]},"1150":{"position":[[29,9]]},"1151":{"position":[[626,14]]},"1153":{"position":[[25,11],[94,9]]},"1154":{"position":[[10,9],[527,9],[581,9],[626,13]]},"1156":{"position":[[415,10]]},"1161":{"position":[[29,9]]},"1162":{"position":[[554,15]]},"1169":{"position":[[29,9]]},"1173":{"position":[[461,14],[512,14]]},"1177":{"position":[[4,9],[485,9]]},"1178":{"position":[[101,9]]},"1179":{"position":[[453,14],[1223,14]]},"1181":{"position":[[25,11],[94,9]]},"1186":{"position":[[121,11],[506,10],[536,13]]},"1187":{"position":[[101,9]]},"1190":{"position":[[25,11],[94,9]]},"1195":{"position":[[101,9],[676,13]]},"1198":{"position":[[10,9],[242,9],[304,9],[349,13]]},"1200":{"position":[[298,9],[681,13]]},"1201":{"position":[[552,13],[623,14],[680,13]]},"1203":{"position":[[571,9]]},"1204":{"position":[[40,9],[353,9],[618,9]]},"1205":{"position":[[101,9]]},"1212":{"position":[[29,9]]},"1215":{"position":[[449,14],[500,14]]},"1219":{"position":[[29,9]]},"1223":{"position":[[461,14],[512,14]]},"1226":{"position":[[152,9],[220,11]]},"1229":{"position":[[101,9]]},"1230":{"position":[[425,11]]},"1232":{"position":[[175,14],[437,13]]},"1243":{"position":[[1156,11],[1285,13]]},"1245":{"position":[[647,9]]},"1246":{"position":[[101,9]]},"1247":{"position":[[801,9]]},"1252":{"position":[[5,9],[209,13]]},"1255":{"position":[[153,9],[215,9],[260,13]]},"1259":{"position":[[29,9]]},"1260":{"position":[[340,14]]},"1265":{"position":[[80,13]]},"1268":{"position":[[1,11]]},"1272":{"position":[[26,9]]},"1283":{"position":[[10,9]]},"1284":{"position":[[101,9]]},"1286":{"position":[[1275,13],[1438,10],[1490,13],[1539,13]]},"1289":{"position":[[10,9],[859,9],[921,9],[966,13],[1163,13],[1184,9],[1615,9]]},"1298":{"position":[[995,13],[1016,9]]},"1299":{"position":[[101,9]]},"1301":{"position":[[1111,13],[1274,10],[1326,13],[1375,13]]},"1303":{"position":[[349,9],[395,9],[440,13],[508,13],[632,9],[677,13],[874,13],[895,9],[1219,9],[1781,9]]},"1310":{"position":[[483,13],[504,9],[936,9]]},"1312":{"position":[[101,9]]},"1313":{"position":[[451,14],[1230,14],[1687,14]]},"1320":{"position":[[10,9]]},"1322":{"position":[[729,9],[1078,9],[1140,9],[1185,13],[1382,13],[1403,9]]},"1323":{"position":[[101,9]]},"1325":{"position":[[1275,13],[1438,10],[1490,13],[1539,13]]},"1333":{"position":[[10,9]]},"1335":{"position":[[729,9],[1029,13],[1050,9]]},"1336":{"position":[[101,9]]},"1337":{"position":[[451,14],[1230,14],[1687,14]]},"1344":{"position":[[10,9]]},"1346":{"position":[[995,13],[1016,9],[1341,9]]},"1347":{"position":[[101,9]]},"1348":{"position":[[451,14],[1230,14]]},"1355":{"position":[[101,9]]},"1356":{"position":[[418,13]]},"1366":{"position":[[34,14]]},"1373":{"position":[[567,9],[613,9],[658,13],[726,13],[1382,9]]},"1374":{"position":[[567,9],[613,9],[658,13],[726,13],[1386,9]]},"1375":{"position":[[101,9]]},"1384":{"position":[[1137,11]]},"1385":{"position":[[101,9]]},"1386":{"position":[[424,14]]},"1388":{"position":[[25,11],[94,9],[372,9],[711,9]]},"1392":{"position":[[193,11],[263,11]]},"1393":{"position":[[167,13]]},"1397":{"position":[[346,9],[392,9],[437,13],[505,13],[1220,9]]},"1398":{"position":[[345,9],[391,9],[436,13],[504,13],[1223,9]]},"1399":{"position":[[101,9]]},"1408":{"position":[[515,14],[567,13]]},"1409":{"position":[[329,9],[375,9],[420,13],[488,13],[1072,14],[1224,9]]},"1410":{"position":[[101,9]]},"1419":{"position":[[101,9]]},"1422":{"position":[[25,11],[94,9]]},"1426":{"position":[[101,9]]},"1427":{"position":[[392,14],[990,14]]},"1429":{"position":[[276,14],[738,13]]},"1447":{"position":[[79,14],[643,14]]},"1448":{"position":[[161,13]]},"1451":{"position":[[587,10]]},"1452":{"position":[[26,10],[212,11],[486,10],[807,10],[1025,10],[1220,10],[3412,13]]},"1453":{"position":[[1291,14],[1623,11]]},"1455":{"position":[[289,10]]},"1461":{"position":[[2763,13],[3355,13],[3449,13]]},"1479":{"position":[[150,13]]},"1480":{"position":[[523,14],[540,13]]}},"keywords":{}}],["configuration"",{"_index":5069,"title":{},"content":{"931":{"position":[[709,20]]}},"keywords":{}}],["configuration.a",{"_index":5213,"title":{},"content":{"1031":{"position":[[379,15]]}},"keywords":{}}],["configuration.ev",{"_index":6276,"title":{},"content":{"1359":{"position":[[388,19]]}},"keywords":{}}],["configurationpackag",{"_index":3282,"title":{},"content":{"363":{"position":[[198,20],[263,20],[336,20],[410,20],[490,20],[567,20],[633,20],[708,20],[787,20],[862,20],[935,20],[1014,20],[1085,20],[1166,20],[1254,20],[1340,20],[1422,20],[1504,20],[1577,20],[1656,20],[1724,20],[1788,20],[1850,20],[1917,20],[2008,20],[2079,20],[2144,20]]},"364":{"position":[[523,20],[593,20],[664,20],[733,20],[802,20],[868,20],[934,20],[1013,20],[1097,20],[1176,20],[1243,20],[1307,20],[1375,20],[1455,20],[1558,20],[1650,20],[1736,20],[1811,20],[1880,20],[1946,20],[2014,20],[2083,20],[2151,20],[2215,20],[2278,20],[2349,20],[2427,20],[2506,20],[2574,20],[2641,20],[2709,20],[2775,20],[2851,20],[2929,20],[3021,20],[3091,20],[3157,20],[3220,20],[3285,20],[3351,20],[3421,20],[3491,20],[3561,20],[3640,20]]},"1120":{"position":[[9,20],[88,20],[168,20],[250,20],[354,20],[448,20],[542,20],[656,20],[735,20],[808,20],[888,20],[966,20],[1046,20],[1131,20],[1224,20],[1314,20],[1388,20],[1460,20],[1530,20],[1605,20],[1677,20],[1750,20],[1822,20],[1895,20],[1972,20]]}},"keywords":{}}],["configurationsissu",{"_index":4468,"title":{},"content":{"709":{"position":[[159,19]]}},"keywords":{}}],["confirm",{"_index":1019,"title":{},"content":{"68":{"position":[[222,7]]},"414":{"position":[[884,7]]},"485":{"position":[[416,12]]},"486":{"position":[[64,12]]},"657":{"position":[[416,12]]},"658":{"position":[[64,12]]},"673":{"position":[[416,12]]},"674":{"position":[[64,12]]},"688":{"position":[[416,12]]},"689":{"position":[[64,12]]},"840":{"position":[[77,7]]},"922":{"position":[[579,9]]}},"keywords":{}}],["confirmed_flush_lsn",{"_index":5057,"title":{},"content":{"922":{"position":[[1284,19],[1476,19]]}},"keywords":{}}],["confirmed_flush_lsnproperti",{"_index":5054,"title":{},"content":{"922":{"position":[[463,27]]}},"keywords":{}}],["conflict",{"_index":935,"title":{},"content":{"62":{"position":[[112,9],[449,11],[539,11],[632,11]]},"278":{"position":[[1277,8]]},"280":{"position":[[2131,8]]},"1370":{"position":[[645,8]]},"1462":{"position":[[303,9]]}},"keywords":{}}],["confluenc",{"_index":3781,"title":{"468":{"position":[[0,10]]}},"content":{"471":{"position":[[25,10],[52,10]]},"472":{"position":[[415,10],[721,10],[786,10]]}},"keywords":{}}],["confluence:dev",{"_index":3803,"title":{},"content":{"473":{"position":[[159,14]]}},"keywords":{}}],["confluent",{"_index":3130,"title":{},"content":{"320":{"position":[[2424,9]]}},"keywords":{}}],["confluent'",{"_index":2634,"title":{},"content":{"246":{"position":[[188,11]]},"429":{"position":[[1264,11]]}},"keywords":{}}],["conform",{"_index":1395,"title":{},"content":{"97":{"position":[[651,7]]},"268":{"position":[[1166,7]]},"269":{"position":[[737,7]]},"270":{"position":[[1325,7]]}},"keywords":{}}],["congratul",{"_index":2613,"title":{},"content":{"241":{"position":[[1,16]]}},"keywords":{}}],["conjunct",{"_index":1965,"title":{},"content":{"165":{"position":[[2322,11]]}},"keywords":{}}],["connect",{"_index":693,"title":{"83":{"position":[[0,10]]},"220":{"position":[[10,11]]},"244":{"position":[[0,10]]},"247":{"position":[[0,10]]},"248":{"position":[[7,7]]},"429":{"position":[[19,10]]},"837":{"position":[[24,7]]},"846":{"position":[[15,8]]},"964":{"position":[[16,11]]},"1298":{"position":[[0,7]]},"1321":{"position":[[0,10]]},"1322":{"position":[[0,7]]},"1334":{"position":[[0,7]]},"1335":{"position":[[0,7]]},"1346":{"position":[[0,7]]},"1374":{"position":[[0,10]]},"1398":{"position":[[0,10]]}},"content":{"37":{"position":[[285,8]]},"45":{"position":[[398,8],[522,7]]},"56":{"position":[[948,7]]},"58":{"position":[[821,7]]},"83":{"position":[[618,11],[1284,7]]},"119":{"position":[[46,7]]},"120":{"position":[[275,7]]},"138":{"position":[[1308,8],[1681,10]]},"141":{"position":[[1686,10]]},"142":{"position":[[1301,8],[1698,10]]},"170":{"position":[[23,9]]},"173":{"position":[[613,10]]},"179":{"position":[[490,11]]},"184":{"position":[[946,11]]},"189":{"position":[[941,7]]},"190":{"position":[[1591,10]]},"192":{"position":[[2013,10]]},"198":{"position":[[965,10]]},"201":{"position":[[38,10]]},"204":{"position":[[245,7],[577,10],[651,9],[839,10],[885,10]]},"206":{"position":[[528,10],[917,10]]},"211":{"position":[[508,10]]},"213":{"position":[[412,10]]},"216":{"position":[[43,7],[503,7]]},"217":{"position":[[34,7],[1006,10]]},"218":{"position":[[548,10]]},"221":{"position":[[936,10],[1940,11]]},"222":{"position":[[771,10],[857,7]]},"223":{"position":[[931,7]]},"224":{"position":[[685,7]]},"225":{"position":[[380,10]]},"237":{"position":[[3350,11],[3601,7]]},"238":{"position":[[621,11],[779,10]]},"239":{"position":[[413,10]]},"240":{"position":[[2588,10],[3707,10]]},"247":{"position":[[4,7],[62,10]]},"250":{"position":[[39,10]]},"259":{"position":[[191,10],[630,10],[1880,10]]},"267":{"position":[[1794,7]]},"290":{"position":[[34,7],[1167,10]]},"291":{"position":[[49,7],[630,10],[805,10]]},"301":{"position":[[34,7],[1376,10]]},"302":{"position":[[49,7],[630,10],[805,10]]},"351":{"position":[[478,10]]},"359":{"position":[[456,10]]},"366":{"position":[[1103,7]]},"367":{"position":[[172,7]]},"370":{"position":[[1530,7],[1940,7],[2179,10]]},"387":{"position":[[1479,10]]},"392":{"position":[[143,7],[309,7],[435,7]]},"397":{"position":[[595,7]]},"400":{"position":[[61,10]]},"402":{"position":[[560,10]]},"408":{"position":[[688,10]]},"417":{"position":[[609,7],[787,7],[978,7]]},"424":{"position":[[511,10]]},"428":{"position":[[72,7]]},"429":{"position":[[28,10],[210,10],[636,10],[970,10],[1356,10],[1412,10]]},"432":{"position":[[141,7],[244,10],[307,10],[392,10],[441,10],[1300,10]]},"438":{"position":[[1392,10],[1414,10],[1507,10]]},"448":{"position":[[1364,10]]},"454":{"position":[[700,10]]},"460":{"position":[[717,10]]},"466":{"position":[[424,10]]},"496":{"position":[[694,10]]},"509":{"position":[[690,10]]},"517":{"position":[[4125,10]]},"534":{"position":[[1840,10]]},"556":{"position":[[2342,10]]},"573":{"position":[[1411,10]]},"584":{"position":[[1474,10]]},"611":{"position":[[1343,10]]},"619":{"position":[[193,10],[720,10]]},"625":{"position":[[323,10]]},"631":{"position":[[651,10]]},"654":{"position":[[935,10]]},"670":{"position":[[811,10]]},"685":{"position":[[623,10]]},"700":{"position":[[462,10]]},"706":{"position":[[461,10]]},"712":{"position":[[653,10]]},"720":{"position":[[952,10]]},"724":{"position":[[111,7]]},"735":{"position":[[526,10]]},"741":{"position":[[638,10]]},"747":{"position":[[1521,10]]},"750":{"position":[[1430,11]]},"753":{"position":[[127,11],[309,11],[573,10],[1583,10]]},"757":{"position":[[988,7],[2130,10]]},"767":{"position":[[7,11],[455,11],[719,10]]},"770":{"position":[[988,7],[2130,10]]},"780":{"position":[[31,10]]},"782":{"position":[[222,7]]},"784":{"position":[[22,10],[89,11],[375,10]]},"789":{"position":[[1831,11]]},"792":{"position":[[193,11],[425,12],[743,11],[997,10]]},"793":{"position":[[7,11],[278,11],[532,10],[1606,10]]},"797":{"position":[[988,7],[2137,10]]},"808":{"position":[[7,11],[294,11],[548,10]]},"812":{"position":[[988,7],[2137,10]]},"824":{"position":[[7,11],[535,11],[789,10]]},"828":{"position":[[988,7],[2137,10]]},"840":{"position":[[187,7],[2488,7]]},"842":{"position":[[1351,10],[1441,11],[2482,11],[2524,10],[2632,11]]},"845":{"position":[[21,10]]},"846":{"position":[[29,7],[239,7]]},"849":{"position":[[130,7],[595,11],[745,8],[805,12],[864,8],[1457,11],[2503,7],[3017,8],[3628,7]]},"851":{"position":[[742,10]]},"855":{"position":[[84,7]]},"862":{"position":[[26,11]]},"866":{"position":[[294,11],[549,10]]},"871":{"position":[[47,8]]},"874":{"position":[[26,11]]},"878":{"position":[[304,11],[559,10]]},"879":{"position":[[81,10],[103,10],[174,7]]},"885":{"position":[[773,10]]},"897":{"position":[[417,10]]},"904":{"position":[[7,11],[534,11],[788,10],[1278,7]]},"907":{"position":[[1325,10],[1584,10],[1751,7]]},"915":{"position":[[1287,11]]},"917":{"position":[[251,7]]},"918":{"position":[[193,11],[425,12],[743,11],[997,10],[1570,7]]},"919":{"position":[[7,11],[278,11],[532,10],[752,7],[2513,10]]},"922":{"position":[[923,10],[2463,11]]},"923":{"position":[[1325,10],[1584,10],[1751,7]]},"931":{"position":[[7,11],[298,11],[552,10],[933,7]]},"934":{"position":[[1325,10],[1584,10]]},"942":{"position":[[329,11]]},"946":{"position":[[77,7]]},"947":{"position":[[155,8],[174,10],[258,10],[302,10],[372,10],[535,10],[607,10]]},"950":{"position":[[1325,10],[1584,10]]},"959":{"position":[[518,10]]},"963":{"position":[[106,10],[154,10],[193,10],[1441,11]]},"964":{"position":[[40,10],[97,10],[299,10],[467,10],[530,10],[575,11]]},"965":{"position":[[251,7]]},"968":{"position":[[1325,10],[1584,10],[1751,7]]},"982":{"position":[[520,10]]},"997":{"position":[[486,10]]},"1000":{"position":[[493,10]]},"1009":{"position":[[1783,10]]},"1015":{"position":[[573,10]]},"1018":{"position":[[44,11]]},"1028":{"position":[[523,10]]},"1034":{"position":[[96,11]]},"1042":{"position":[[1,7],[1109,10],[1338,10]]},"1043":{"position":[[7,11],[278,11],[532,10],[632,7]]},"1051":{"position":[[7,11],[534,11],[788,10],[888,7]]},"1059":{"position":[[7,11],[298,11],[552,10],[652,7]]},"1070":{"position":[[1134,10]]},"1076":{"position":[[916,10]]},"1085":{"position":[[1502,10]]},"1094":{"position":[[588,10]]},"1101":{"position":[[428,10]]},"1107":{"position":[[543,10]]},"1113":{"position":[[617,10]]},"1118":{"position":[[72,10],[159,11],[320,10],[1096,10]]},"1125":{"position":[[387,7]]},"1133":{"position":[[1339,10]]},"1136":{"position":[[256,7]]},"1138":{"position":[[764,7],[821,7],[1230,7]]},"1140":{"position":[[3073,7],[3116,10]]},"1144":{"position":[[748,7]]},"1149":{"position":[[131,7]]},"1151":{"position":[[230,7],[438,7]]},"1154":{"position":[[42,11],[203,10],[275,8],[416,11],[473,11],[743,10]]},"1170":{"position":[[748,7]]},"1186":{"position":[[232,10],[259,10]]},"1194":{"position":[[95,7]]},"1198":{"position":[[56,11],[178,11],[464,10]]},"1251":{"position":[[31,10]]},"1253":{"position":[[295,7]]},"1255":{"position":[[22,10],[89,11],[375,10]]},"1268":{"position":[[177,10],[233,10],[304,10],[370,8],[387,10],[587,11]]},"1272":{"position":[[259,11]]},"1282":{"position":[[376,7]]},"1283":{"position":[[43,11],[170,7],[297,7],[371,10]]},"1285":{"position":[[370,7],[898,10],[1049,10],[1177,10],[1289,10]]},"1286":{"position":[[1680,10],[1745,10],[1791,7],[1812,11],[1878,7],[1899,11],[2062,10],[2207,7],[2228,11]]},"1288":{"position":[[88,7]]},"1289":{"position":[[43,11],[170,7],[426,12],[591,7],[810,7],[1083,10],[1701,10]]},"1292":{"position":[[1079,10]]},"1298":{"position":[[931,7]]},"1300":{"position":[[370,7],[898,10],[1049,10],[1177,10],[1289,10]]},"1301":{"position":[[1516,10],[1581,10],[1627,7],[1648,11],[1714,7],[1735,11],[1898,10],[2043,7],[2064,11]]},"1303":{"position":[[7,11],[298,11],[552,10],[794,10]]},"1306":{"position":[[1079,10]]},"1310":{"position":[[391,7],[1022,10]]},"1311":{"position":[[1,7],[134,7],[208,10]]},"1313":{"position":[[574,7],[752,10],[1501,7]]},"1316":{"position":[[3073,7],[3116,10]]},"1320":{"position":[[43,11]]},"1321":{"position":[[206,12]]},"1322":{"position":[[771,10],[857,7],[1029,7],[1302,10]]},"1324":{"position":[[370,7],[898,10],[1049,10],[1177,10],[1289,10]]},"1325":{"position":[[1680,10],[1745,10],[1791,7],[1812,11],[1878,7],[1899,11],[2062,10],[2207,7],[2228,11]]},"1329":{"position":[[1079,10]]},"1333":{"position":[[43,11]]},"1334":{"position":[[206,12]]},"1335":{"position":[[771,10],[857,7]]},"1337":{"position":[[574,7],[752,10],[1501,7]]},"1340":{"position":[[3073,7],[3116,10]]},"1344":{"position":[[43,11]]},"1346":{"position":[[931,7]]},"1348":{"position":[[574,7],[752,10]]},"1351":{"position":[[3073,7],[3116,10]]},"1356":{"position":[[234,7]]},"1373":{"position":[[7,11],[516,11],[770,10],[870,7]]},"1374":{"position":[[7,11],[516,11],[770,10],[870,7]]},"1376":{"position":[[370,7]]},"1379":{"position":[[418,7],[463,10]]},"1386":{"position":[[117,11]]},"1394":{"position":[[697,7],[716,10]]},"1397":{"position":[[7,11],[295,11],[549,10],[649,7]]},"1398":{"position":[[7,11],[294,11],[548,10],[648,7]]},"1400":{"position":[[370,7]]},"1403":{"position":[[418,7],[463,10]]},"1408":{"position":[[1,7],[382,10],[611,10]]},"1409":{"position":[[7,11],[278,11],[532,10],[632,7]]},"1411":{"position":[[370,7]]},"1414":{"position":[[418,7],[463,10]]},"1418":{"position":[[38,10],[74,8]]},"1425":{"position":[[217,10]]},"1427":{"position":[[515,7]]},"1431":{"position":[[3096,7],[3139,10]]},"1434":{"position":[[287,7]]},"1440":{"position":[[1657,8]]},"1480":{"position":[[212,7]]}},"keywords":{}}],["connect.fail",{"_index":1819,"title":{},"content":{"141":{"position":[[1397,14]]}},"keywords":{}}],["connection_limit",{"_index":4792,"title":{},"content":{"843":{"position":[[352,17]]}},"keywords":{}}],["connection_typ",{"_index":4791,"title":{},"content":{"843":{"position":[[257,16]]}},"keywords":{}}],["connector",{"_index":224,"title":{"38":{"position":[[0,11]]},"52":{"position":[[0,11]]},"78":{"position":[[0,10]]},"79":{"position":[[6,11]]},"84":{"position":[[12,9]]},"85":{"position":[[10,11]]},"345":{"position":[[0,10]]},"349":{"position":[[19,9]]},"361":{"position":[[8,10]]},"362":{"position":[[18,11]]},"363":{"position":[[8,11]]},"364":{"position":[[12,11]]},"474":{"position":[[21,9]]},"479":{"position":[[20,9]]},"524":{"position":[[16,9]]},"532":{"position":[[16,9]]},"554":{"position":[[16,9]]},"617":{"position":[[16,9]]},"645":{"position":[[16,9]]},"652":{"position":[[16,9]]},"718":{"position":[[16,9]]},"733":{"position":[[16,9]]},"821":{"position":[[18,9]]},"912":{"position":[[23,9]]},"947":{"position":[[25,9]]},"977":{"position":[[13,10]]},"988":{"position":[[16,9]]},"1003":{"position":[[16,9]]},"1030":{"position":[[14,9]]},"1092":{"position":[[23,9]]},"1097":{"position":[[0,9]]},"1119":{"position":[[16,10]]},"1120":{"position":[[26,11]]},"1448":{"position":[[9,9]]}},"content":{"6":{"position":[[619,10]]},"7":{"position":[[242,9]]},"21":{"position":[[356,11]]},"35":{"position":[[329,11]]},"36":{"position":[[460,11]]},"37":{"position":[[334,11]]},"38":{"position":[[1,10],[159,9],[181,10],[259,10],[488,10],[694,10]]},"45":{"position":[[150,10],[308,9]]},"52":{"position":[[48,10],[103,10],[189,11],[217,9]]},"53":{"position":[[50,10],[152,11],[170,10],[274,9],[355,10],[461,10],[518,11],[543,9]]},"54":{"position":[[152,9]]},"56":{"position":[[1044,9],[1082,10],[1136,10],[1737,9],[1880,10],[2010,10],[2207,11],[2226,9],[2307,9]]},"67":{"position":[[202,10],[365,11],[1794,10]]},"68":{"position":[[151,10]]},"72":{"position":[[591,11]]},"79":{"position":[[62,10],[87,10],[218,10],[261,10]]},"80":{"position":[[57,9],[308,9],[363,9]]},"81":{"position":[[1,10],[199,10],[529,10],[639,10],[666,9],[1076,10],[1140,10],[1334,9],[1596,9],[1887,10],[1954,9],[2114,10],[2322,9],[2588,10]]},"82":{"position":[[234,10],[432,9],[1348,9],[2964,9],[5072,10]]},"83":{"position":[[385,9],[562,10],[957,10]]},"84":{"position":[[375,9],[517,10],[578,10],[651,10],[831,11],[971,10],[1129,10],[1352,10],[1418,9]]},"85":{"position":[[23,10]]},"94":{"position":[[285,9],[398,10],[766,10],[2335,10]]},"95":{"position":[[86,10],[122,10]]},"96":{"position":[[15,9]]},"97":{"position":[[764,9]]},"98":{"position":[[602,9]]},"100":{"position":[[12,9],[1320,9]]},"101":{"position":[[253,9]]},"102":{"position":[[30,9]]},"104":{"position":[[183,10]]},"105":{"position":[[126,10]]},"119":{"position":[[32,10],[110,9],[240,9]]},"120":{"position":[[384,9],[422,10],[484,10],[1880,9],[2027,10],[2100,9]]},"122":{"position":[[516,10],[681,9],[800,9],[1387,9],[1505,10],[1946,9],[2021,9]]},"125":{"position":[[1407,10],[1432,9]]},"138":{"position":[[685,9]]},"140":{"position":[[114,10],[275,9]]},"142":{"position":[[640,9]]},"144":{"position":[[354,10],[389,9]]},"146":{"position":[[457,9]]},"154":{"position":[[123,11],[1742,11],[1759,10],[1804,10],[1916,11],[1933,9]]},"157":{"position":[[134,10]]},"158":{"position":[[527,9]]},"162":{"position":[[1180,9]]},"184":{"position":[[530,9]]},"189":{"position":[[1623,11],[1635,10],[1756,9],[1796,10]]},"190":{"position":[[136,10],[319,9]]},"192":{"position":[[86,10]]},"193":{"position":[[480,10],[604,10]]},"199":{"position":[[164,9]]},"205":{"position":[[160,11],[262,9]]},"207":{"position":[[26,10]]},"209":{"position":[[17,9],[237,10],[373,9],[577,9],[709,9],[1469,9]]},"212":{"position":[[323,10]]},"216":{"position":[[391,10],[404,9],[564,11]]},"217":{"position":[[380,9],[474,10],[530,9],[591,10],[1153,10],[1502,11]]},"218":{"position":[[236,10],[272,9],[302,10]]},"221":{"position":[[1542,9]]},"225":{"position":[[664,10]]},"232":{"position":[[243,9],[283,9]]},"237":{"position":[[1014,9],[1415,9]]},"239":{"position":[[2945,9]]},"240":{"position":[[2729,9],[4510,9]]},"243":{"position":[[317,10]]},"277":{"position":[[923,10]]},"286":{"position":[[364,9]]},"289":{"position":[[565,11],[641,10]]},"296":{"position":[[7289,10],[7590,10]]},"300":{"position":[[512,11],[581,10]]},"301":{"position":[[1180,9]]},"307":{"position":[[1069,10],[1537,10],[1919,10],[2405,10]]},"308":{"position":[[481,10]]},"309":{"position":[[157,9],[1282,9],[1526,10],[1826,10],[2356,10],[2963,10]]},"310":{"position":[[104,11]]},"323":{"position":[[1259,10],[1421,10],[1580,10]]},"344":{"position":[[63,10]]},"345":{"position":[[0,10],[66,10],[206,10]]},"347":{"position":[[23,10],[147,9]]},"348":{"position":[[46,10]]},"349":{"position":[[185,9]]},"350":{"position":[[15,10],[113,10],[150,11],[265,10]]},"353":{"position":[[13,9]]},"355":{"position":[[40,9]]},"358":{"position":[[15,10],[113,10],[150,11],[266,10]]},"360":{"position":[[49,10]]},"363":{"position":[[7,10],[116,10]]},"364":{"position":[[30,10],[67,10],[155,10],[254,9],[299,10],[384,10]]},"366":{"position":[[696,9],[813,9],[1028,9]]},"368":{"position":[[58,9]]},"369":{"position":[[15,10],[113,10],[150,11],[268,10]]},"370":{"position":[[56,10]]},"371":{"position":[[108,10]]},"373":{"position":[[295,9],[394,9],[634,9]]},"374":{"position":[[111,10],[218,9]]},"375":{"position":[[13,10],[307,10]]},"376":{"position":[[15,10],[113,10],[150,11],[264,10]]},"378":{"position":[[48,10]]},"379":{"position":[[408,9],[1008,10],[1054,9]]},"382":{"position":[[6,9]]},"384":{"position":[[25,9]]},"385":{"position":[[42,10]]},"386":{"position":[[15,10],[113,10],[150,11],[268,10]]},"387":{"position":[[1004,9]]},"388":{"position":[[118,10]]},"390":{"position":[[13,10]]},"391":{"position":[[15,10],[113,10],[150,11],[272,10]]},"393":{"position":[[108,10]]},"395":{"position":[[13,10]]},"396":{"position":[[15,10],[113,10],[150,11],[266,10]]},"398":{"position":[[108,10]]},"400":{"position":[[13,10]]},"401":{"position":[[39,9],[168,10],[196,11],[328,10]]},"403":{"position":[[48,10]]},"406":{"position":[[45,10]]},"407":{"position":[[15,10],[113,10],[150,11],[267,10]]},"413":{"position":[[18,9]]},"416":{"position":[[15,10],[113,10],[150,11],[260,10]]},"418":{"position":[[48,10]]},"419":{"position":[[605,10],[755,9],[975,9]]},"423":{"position":[[15,10],[113,10],[150,11],[267,10]]},"425":{"position":[[49,10]]},"427":{"position":[[6,9],[123,10],[276,9]]},"429":{"position":[[157,10],[1395,10]]},"430":{"position":[[96,10]]},"431":{"position":[[15,10],[113,10],[150,11],[270,10]]},"433":{"position":[[90,10],[501,10]]},"437":{"position":[[15,10],[113,10],[150,11],[276,10]]},"439":{"position":[[48,10]]},"440":{"position":[[621,10],[771,9],[991,9]]},"444":{"position":[[6,9]]},"447":{"position":[[15,10],[113,10],[150,11],[266,10]]},"449":{"position":[[118,10]]},"452":{"position":[[32,10]]},"453":{"position":[[15,10],[113,10],[150,11],[267,10]]},"455":{"position":[[49,10]]},"458":{"position":[[32,10]]},"459":{"position":[[15,10],[113,10],[150,11],[267,10]]},"461":{"position":[[49,10]]},"465":{"position":[[15,10],[113,10],[150,11],[263,10]]},"467":{"position":[[49,10]]},"469":{"position":[[24,10]]},"472":{"position":[[15,10],[113,10],[150,11],[264,10],[426,9]]},"473":{"position":[[118,10]]},"475":{"position":[[13,10]]},"476":{"position":[[47,10]]},"479":{"position":[[453,9]]},"480":{"position":[[6,9],[1104,9]]},"481":{"position":[[15,10],[113,10],[150,11],[266,10]]},"485":{"position":[[6,9],[51,10]]},"488":{"position":[[409,9]]},"489":{"position":[[5,9]]},"490":{"position":[[6,9]]},"491":{"position":[[234,9]]},"495":{"position":[[15,10],[113,10],[150,11],[272,10]]},"497":{"position":[[48,10]]},"499":{"position":[[6,9]]},"500":{"position":[[13,10],[142,9]]},"501":{"position":[[34,9],[69,10],[106,11],[221,10]]},"503":{"position":[[48,10]]},"504":{"position":[[549,10],[687,9],[891,9]]},"507":{"position":[[13,10]]},"508":{"position":[[15,10],[113,10],[150,11],[267,10]]},"510":{"position":[[48,10]]},"515":{"position":[[317,10],[1020,10]]},"516":{"position":[[15,10],[113,10],[150,11],[276,10]]},"517":{"position":[[29,9],[2491,9],[3386,9],[3685,9]]},"518":{"position":[[118,10]]},"520":{"position":[[24,10]]},"525":{"position":[[15,10],[113,10],[150,11],[264,10]]},"527":{"position":[[118,10]]},"529":{"position":[[24,10]]},"533":{"position":[[15,10],[113,10],[150,11],[264,10]]},"534":{"position":[[893,9]]},"535":{"position":[[118,10]]},"537":{"position":[[6,9]]},"538":{"position":[[29,10]]},"539":{"position":[[15,10],[113,10],[150,11],[264,10]]},"541":{"position":[[49,10]]},"543":{"position":[[13,10]]},"544":{"position":[[15,10],[113,10],[150,11],[261,10]]},"546":{"position":[[48,10]]},"547":{"position":[[606,10],[756,9],[976,9]]},"555":{"position":[[15,10],[110,10],[147,11],[265,10]]},"557":{"position":[[118,10]]},"562":{"position":[[13,10],[191,9]]},"563":{"position":[[40,9],[174,10],[213,11],[327,10]]},"566":{"position":[[48,10]]},"571":{"position":[[792,10]]},"572":{"position":[[15,10],[113,10],[150,11],[274,10]]},"575":{"position":[[104,10]]},"578":{"position":[[166,9]]},"581":{"position":[[13,10],[312,9]]},"582":{"position":[[405,10]]},"583":{"position":[[15,10],[103,10],[140,11],[266,10]]},"584":{"position":[[1034,9]]},"586":{"position":[[104,10]]},"590":{"position":[[623,9]]},"592":{"position":[[15,10],[110,10],[147,11],[264,10]]},"594":{"position":[[48,10]]},"595":{"position":[[585,9]]},"597":{"position":[[13,10]]},"600":{"position":[[15,10],[149,11]]},"602":{"position":[[301,9],[436,9]]},"603":{"position":[[125,10]]},"609":{"position":[[349,10]]},"610":{"position":[[15,10],[113,10],[150,11],[279,10]]},"612":{"position":[[118,10]]},"616":{"position":[[33,9],[406,9]]},"617":{"position":[[716,10]]},"618":{"position":[[15,10],[113,10],[150,11],[271,10]]},"620":{"position":[[48,10]]},"623":{"position":[[33,10]]},"624":{"position":[[15,10],[113,10],[150,11],[268,10]]},"626":{"position":[[49,10]]},"629":{"position":[[30,10]]},"630":{"position":[[15,10],[113,10],[150,11],[265,10]]},"632":{"position":[[49,10]]},"634":{"position":[[6,9]]},"635":{"position":[[13,10]]},"636":{"position":[[15,10],[113,10],[150,11],[267,10]]},"638":{"position":[[48,10]]},"639":{"position":[[547,10],[685,9],[889,9]]},"642":{"position":[[5,9]]},"645":{"position":[[483,9]]},"646":{"position":[[15,10],[113,10],[150,11],[268,10]]},"647":{"position":[[48,10]]},"652":{"position":[[483,9]]},"653":{"position":[[15,10],[113,10],[150,11],[265,10]]},"655":{"position":[[48,10]]},"657":{"position":[[6,9],[51,10]]},"659":{"position":[[566,9]]},"660":{"position":[[593,10],[722,9]]},"662":{"position":[[5,9]]},"663":{"position":[[6,9]]},"664":{"position":[[255,9]]},"669":{"position":[[15,10],[113,10],[150,11],[267,10]]},"671":{"position":[[49,10]]},"673":{"position":[[6,9],[51,10]]},"676":{"position":[[409,9]]},"677":{"position":[[5,9]]},"678":{"position":[[6,9]]},"679":{"position":[[234,9]]},"684":{"position":[[15,10],[113,10],[150,11],[266,10]]},"686":{"position":[[109,10]]},"688":{"position":[[6,9],[51,10]]},"691":{"position":[[409,9]]},"692":{"position":[[5,9]]},"693":{"position":[[6,9]]},"694":{"position":[[234,9]]},"698":{"position":[[31,10]]},"699":{"position":[[15,10],[113,10],[150,11],[266,10]]},"701":{"position":[[49,10]]},"703":{"position":[[6,9]]},"704":{"position":[[30,10]]},"705":{"position":[[15,10],[113,10],[150,11],[265,10]]},"707":{"position":[[49,10]]},"711":{"position":[[15,10],[113,10],[150,11],[262,10]]},"713":{"position":[[49,10]]},"719":{"position":[[15,10],[108,10],[145,11],[265,10]]},"721":{"position":[[118,10]]},"727":{"position":[[15,10],[113,10],[150,11],[272,10]]},"734":{"position":[[15,10],[113,10],[150,11],[267,10]]},"736":{"position":[[48,10]]},"738":{"position":[[6,9]]},"740":{"position":[[15,10],[113,10],[150,11],[265,10]]},"742":{"position":[[49,10]]},"745":{"position":[[31,10]]},"746":{"position":[[15,10],[113,10],[150,11],[266,10]]},"747":{"position":[[805,9]]},"748":{"position":[[49,10]]},"750":{"position":[[13,10],[501,9],[1270,9]]},"753":{"position":[[18,9],[431,9],[1700,10]]},"755":{"position":[[58,9]]},"756":{"position":[[15,10],[113,10],[150,11],[265,10]]},"757":{"position":[[1038,9],[1340,9],[2222,9]]},"758":{"position":[[108,10]]},"759":{"position":[[20,9]]},"762":{"position":[[121,9],[206,9]]},"766":{"position":[[13,10],[501,9]]},"767":{"position":[[577,9],[2504,10]]},"768":{"position":[[58,9]]},"769":{"position":[[15,10],[113,10],[150,11],[265,10]]},"770":{"position":[[1038,9],[1340,9],[2222,9]]},"771":{"position":[[108,10]]},"772":{"position":[[31,9]]},"775":{"position":[[121,9],[206,9]]},"781":{"position":[[15,10],[110,10],[147,11],[262,10]]},"783":{"position":[[48,10]]},"784":{"position":[[230,9]]},"785":{"position":[[52,9],[227,9],[662,9]]},"788":{"position":[[6,9]]},"789":{"position":[[13,10],[489,9],[1671,9]]},"792":{"position":[[855,9],[2485,10]]},"793":{"position":[[390,9],[1723,10]]},"795":{"position":[[56,9]]},"796":{"position":[[15,10],[114,10],[151,11],[264,10]]},"797":{"position":[[1038,9],[1340,9],[2229,9]]},"798":{"position":[[108,10]]},"799":{"position":[[18,9]]},"802":{"position":[[121,9],[206,9]]},"807":{"position":[[13,10],[489,9]]},"808":{"position":[[406,9],[1673,10]]},"810":{"position":[[56,9]]},"811":{"position":[[15,10],[113,10],[150,11],[263,10]]},"812":{"position":[[1038,9],[1340,9],[2229,9]]},"813":{"position":[[108,10]]},"814":{"position":[[18,9]]},"817":{"position":[[121,9],[206,9]]},"821":{"position":[[18,9],[33,9],[663,9],[752,9]]},"823":{"position":[[13,10],[489,9]]},"824":{"position":[[647,9],[2616,10]]},"826":{"position":[[56,9]]},"827":{"position":[[15,10],[113,10],[150,11],[263,10]]},"828":{"position":[[1038,9],[1340,9],[2229,9]]},"829":{"position":[[108,10]]},"830":{"position":[[18,9]]},"833":{"position":[[121,9],[206,9]]},"841":{"position":[[15,10],[113,10],[150,11],[266,10]]},"843":{"position":[[49,10]]},"847":{"position":[[400,10]]},"849":{"position":[[1761,9],[2641,10]]},"850":{"position":[[15,10],[113,10],[150,11],[266,10]]},"852":{"position":[[49,10]]},"855":{"position":[[13,10]]},"857":{"position":[[279,9]]},"858":{"position":[[15,10],[113,10],[150,11],[264,10]]},"860":{"position":[[118,10]]},"863":{"position":[[47,10]]},"866":{"position":[[15,10],[113,10],[150,11],[266,10],[407,9]]},"867":{"position":[[2048,9]]},"868":{"position":[[48,10]]},"869":{"position":[[1296,9]]},"870":{"position":[[25,9],[435,9],[858,9]]},"872":{"position":[[126,10]]},"875":{"position":[[47,10]]},"878":{"position":[[15,10],[113,10],[150,11],[276,10],[417,9]]},"880":{"position":[[48,10]]},"884":{"position":[[15,10],[113,10],[150,11],[276,10]]},"886":{"position":[[49,10]]},"890":{"position":[[15,10],[114,10],[151,11],[264,10]]},"892":{"position":[[48,10]]},"894":{"position":[[32,10]]},"895":{"position":[[55,10]]},"896":{"position":[[15,10],[113,10],[150,11],[267,10]]},"899":{"position":[[22,9]]},"900":{"position":[[55,10]]},"902":{"position":[[6,9]]},"903":{"position":[[722,9],[839,9],[1054,9]]},"904":{"position":[[646,9],[2431,10]]},"905":{"position":[[61,9]]},"906":{"position":[[15,10],[113,10],[150,11],[268,10]]},"908":{"position":[[108,10]]},"909":{"position":[[386,10],[550,9],[715,9],[1181,9]]},"912":{"position":[[23,9],[38,9],[219,9],[679,9],[768,9]]},"914":{"position":[[6,9]]},"915":{"position":[[722,9],[839,9],[1054,9],[1127,9]]},"917":{"position":[[90,9]]},"918":{"position":[[855,9],[2723,10]]},"919":{"position":[[390,9]]},"920":{"position":[[61,9]]},"921":{"position":[[15,10],[113,10],[150,11],[268,10]]},"924":{"position":[[108,10]]},"925":{"position":[[386,10],[550,9],[715,9],[1181,9]]},"929":{"position":[[6,9]]},"930":{"position":[[722,9],[839,9],[1054,9]]},"931":{"position":[[410,9],[2152,10]]},"932":{"position":[[61,9]]},"933":{"position":[[15,10],[113,10],[150,11],[268,10]]},"935":{"position":[[108,10]]},"936":{"position":[[386,10],[550,9],[715,9],[1181,9]]},"945":{"position":[[644,9]]},"947":{"position":[[103,9],[569,9],[1316,9]]},"948":{"position":[[61,9]]},"949":{"position":[[15,10],[113,10],[150,11],[268,10]]},"951":{"position":[[108,10]]},"952":{"position":[[386,10],[550,9],[715,9],[1181,9]]},"958":{"position":[[15,10],[113,10],[150,11],[266,10]]},"960":{"position":[[49,10]]},"962":{"position":[[6,9]]},"963":{"position":[[876,9],[993,9],[1208,9],[1281,9]]},"964":{"position":[[236,9],[271,9]]},"965":{"position":[[90,9]]},"966":{"position":[[61,9]]},"967":{"position":[[15,10],[113,10],[150,11],[268,10]]},"969":{"position":[[108,10]]},"970":{"position":[[386,10],[550,9],[715,9],[1181,9]]},"974":{"position":[[24,9],[137,10],[267,10],[302,9],[331,10]]},"975":{"position":[[21,9],[142,9]]},"976":{"position":[[15,9],[301,9]]},"977":{"position":[[37,11],[114,9],[185,9],[756,10]]},"981":{"position":[[15,10],[113,10],[150,11],[266,10]]},"983":{"position":[[49,10]]},"985":{"position":[[6,9]]},"990":{"position":[[15,10],[113,10],[150,11],[278,10]]},"992":{"position":[[48,10]]},"995":{"position":[[29,10]]},"996":{"position":[[15,10],[113,10],[150,11],[264,10]]},"998":{"position":[[49,10]]},"1000":{"position":[[6,9],[357,9],[817,10],[861,9]]},"1005":{"position":[[15,10],[110,10],[147,11],[271,10]]},"1006":{"position":[[183,10]]},"1008":{"position":[[16,10],[226,10],[286,10],[428,9]]},"1010":{"position":[[118,10]]},"1014":{"position":[[15,10],[113,10],[150,11],[263,10]]},"1016":{"position":[[49,10]]},"1019":{"position":[[5,9]]},"1020":{"position":[[40,9],[346,9],[770,9],[1274,9]]},"1021":{"position":[[15,10],[113,10],[150,11],[262,10]]},"1022":{"position":[[38,10]]},"1023":{"position":[[586,10],[736,9],[956,9]]},"1025":{"position":[[6,9]]},"1027":{"position":[[15,10],[113,10],[150,11],[266,10]]},"1029":{"position":[[49,10]]},"1031":{"position":[[13,10],[168,9],[272,10]]},"1032":{"position":[[71,10]]},"1033":{"position":[[19,10],[117,10],[154,11],[275,10]]},"1036":{"position":[[119,9]]},"1037":{"position":[[49,10]]},"1039":{"position":[[6,9]]},"1040":{"position":[[60,10],[456,9],[555,9]]},"1042":{"position":[[184,10]]},"1043":{"position":[[390,9],[848,10],[1965,10]]},"1044":{"position":[[15,10],[113,10],[150,11],[268,10]]},"1046":{"position":[[48,10]]},"1047":{"position":[[108,9]]},"1049":{"position":[[6,9]]},"1050":{"position":[[60,10],[456,9],[555,9]]},"1051":{"position":[[646,9],[1110,10],[2147,10]]},"1052":{"position":[[15,10],[113,10],[150,11],[268,10]]},"1054":{"position":[[48,10]]},"1055":{"position":[[108,9]]},"1057":{"position":[[6,9]]},"1058":{"position":[[60,10],[456,9],[555,9]]},"1059":{"position":[[410,9],[899,10],[1999,10]]},"1060":{"position":[[15,10],[113,10],[150,11],[268,10]]},"1062":{"position":[[48,10]]},"1063":{"position":[[108,9]]},"1067":{"position":[[694,9]]},"1068":{"position":[[83,9]]},"1069":{"position":[[15,10],[113,10],[150,11],[270,10]]},"1071":{"position":[[118,10]]},"1075":{"position":[[15,10],[113,10],[150,11],[264,10]]},"1076":{"position":[[420,9]]},"1077":{"position":[[5,9],[341,9],[476,9],[573,9],[766,9]]},"1078":{"position":[[48,10]]},"1084":{"position":[[15,10],[113,10],[150,11],[274,10]]},"1086":{"position":[[130,10]]},"1087":{"position":[[28,9]]},"1089":{"position":[[34,9]]},"1090":{"position":[[57,10]]},"1092":{"position":[[189,9]]},"1093":{"position":[[15,10],[113,10],[150,11],[269,10]]},"1096":{"position":[[24,9]]},"1100":{"position":[[15,10],[113,10],[150,11],[275,10]]},"1102":{"position":[[49,10]]},"1106":{"position":[[15,10],[114,10],[151,11],[271,10]]},"1108":{"position":[[48,10]]},"1112":{"position":[[15,10],[113,10],[150,11],[264,10]]},"1114":{"position":[[49,10]]},"1118":{"position":[[291,10]]},"1122":{"position":[[13,10]]},"1124":{"position":[[15,10],[113,10],[150,11],[275,10]]},"1126":{"position":[[64,10]]},"1132":{"position":[[15,10],[114,10],[151,11],[274,10]]},"1134":{"position":[[48,10]]},"1136":{"position":[[13,10],[109,9]]},"1137":{"position":[[13,10]]},"1138":{"position":[[56,10],[1777,10],[1799,9]]},"1139":{"position":[[52,10]]},"1142":{"position":[[13,10]]},"1145":{"position":[[52,10]]},"1149":{"position":[[13,10],[238,9]]},"1152":{"position":[[52,10]]},"1153":{"position":[[6,9]]},"1154":{"position":[[596,9]]},"1155":{"position":[[62,9]]},"1158":{"position":[[6,9]]},"1160":{"position":[[13,10],[346,9]]},"1162":{"position":[[1045,9]]},"1163":{"position":[[52,10]]},"1165":{"position":[[116,9]]},"1168":{"position":[[13,10]]},"1171":{"position":[[52,10]]},"1176":{"position":[[13,10],[634,9]]},"1177":{"position":[[499,10]]},"1178":{"position":[[13,10]]},"1180":{"position":[[52,10]]},"1181":{"position":[[6,9]]},"1182":{"position":[[6,9]]},"1183":{"position":[[448,9]]},"1185":{"position":[[13,10],[434,9]]},"1186":{"position":[[431,9],[671,10]]},"1187":{"position":[[13,10]]},"1189":{"position":[[53,10]]},"1190":{"position":[[6,9]]},"1191":{"position":[[6,9]]},"1194":{"position":[[13,10],[644,9]]},"1195":{"position":[[13,10],[349,9]]},"1197":{"position":[[46,10],[93,10]]},"1198":{"position":[[319,9]]},"1199":{"position":[[6,9]]},"1201":{"position":[[64,10],[211,10],[281,9]]},"1203":{"position":[[13,10],[805,9]]},"1204":{"position":[[367,10],[632,10]]},"1205":{"position":[[13,10]]},"1207":{"position":[[52,10],[318,10]]},"1208":{"position":[[105,9]]},"1211":{"position":[[13,10]]},"1214":{"position":[[52,10]]},"1218":{"position":[[13,10]]},"1221":{"position":[[52,10]]},"1226":{"position":[[13,10],[445,9]]},"1229":{"position":[[13,10]]},"1231":{"position":[[122,10]]},"1233":{"position":[[75,9]]},"1234":{"position":[[74,9]]},"1236":{"position":[[29,10]]},"1237":{"position":[[14,9],[94,10],[151,11]]},"1241":{"position":[[106,10]]},"1243":{"position":[[13,10],[222,9],[320,9],[1088,10]]},"1245":{"position":[[661,10]]},"1246":{"position":[[13,10]]},"1247":{"position":[[900,9]]},"1248":{"position":[[122,10]]},"1252":{"position":[[15,10],[110,10],[147,11],[264,10]]},"1254":{"position":[[56,10]]},"1255":{"position":[[230,9]]},"1256":{"position":[[6,9]]},"1258":{"position":[[13,10]]},"1261":{"position":[[52,10]]},"1262":{"position":[[6,9]]},"1264":{"position":[[29,10]]},"1265":{"position":[[65,10]]},"1270":{"position":[[52,10]]},"1271":{"position":[[6,9]]},"1274":{"position":[[13,10]]},"1278":{"position":[[52,10]]},"1279":{"position":[[6,9]]},"1281":{"position":[[13,10],[148,9]]},"1282":{"position":[[158,9]]},"1284":{"position":[[13,10]]},"1286":{"position":[[2612,10],[2634,9]]},"1287":{"position":[[52,10]]},"1288":{"position":[[37,9]]},"1289":{"position":[[936,9],[1198,10],[1307,9]]},"1290":{"position":[[6,9]]},"1293":{"position":[[64,10],[211,10],[281,9]]},"1295":{"position":[[13,10],[148,9]]},"1298":{"position":[[1030,10],[1139,9]]},"1299":{"position":[[13,10]]},"1301":{"position":[[2448,10],[2470,9]]},"1302":{"position":[[52,10]]},"1303":{"position":[[410,9],[647,9],[909,10],[1018,9],[1795,10]]},"1304":{"position":[[6,9]]},"1307":{"position":[[64,10],[211,10],[281,9]]},"1309":{"position":[[13,10],[109,9]]},"1310":{"position":[[168,9],[518,10],[628,9]]},"1312":{"position":[[13,10]]},"1313":{"position":[[1321,10],[1343,9]]},"1314":{"position":[[52,10]]},"1315":{"position":[[6,9]]},"1317":{"position":[[64,10],[211,10],[281,9],[491,9]]},"1319":{"position":[[13,10],[148,9]]},"1322":{"position":[[1155,9],[1417,10],[1526,9]]},"1323":{"position":[[13,10]]},"1325":{"position":[[2612,10],[2634,9]]},"1326":{"position":[[52,10]]},"1327":{"position":[[6,9]]},"1330":{"position":[[64,10],[211,10],[281,9]]},"1332":{"position":[[13,10],[109,9]]},"1335":{"position":[[1064,10],[1174,9]]},"1336":{"position":[[13,10]]},"1337":{"position":[[1321,10],[1343,9]]},"1338":{"position":[[52,10]]},"1339":{"position":[[6,9]]},"1341":{"position":[[64,10],[211,10],[281,9],[491,9]]},"1343":{"position":[[13,10],[109,9]]},"1346":{"position":[[1030,10],[1140,9]]},"1347":{"position":[[13,10]]},"1348":{"position":[[1321,10],[1343,9]]},"1349":{"position":[[52,10]]},"1350":{"position":[[6,9]]},"1352":{"position":[[64,10],[211,10],[281,9],[491,9]]},"1354":{"position":[[13,10],[186,10],[270,10],[469,9]]},"1355":{"position":[[13,10]]},"1357":{"position":[[52,10],[168,10]]},"1358":{"position":[[13,9]]},"1359":{"position":[[64,10],[211,10],[281,9]]},"1361":{"position":[[13,10]]},"1362":{"position":[[11,9],[91,10],[150,11]]},"1363":{"position":[[64,10]]},"1365":{"position":[[13,10]]},"1367":{"position":[[129,10],[151,9]]},"1368":{"position":[[52,10]]},"1369":{"position":[[6,9]]},"1372":{"position":[[13,10],[148,9]]},"1373":{"position":[[628,9],[1027,10],[1396,10]]},"1374":{"position":[[628,9],[1027,10],[1400,10]]},"1375":{"position":[[13,10]]},"1376":{"position":[[527,10],[549,9]]},"1377":{"position":[[52,10]]},"1378":{"position":[[6,9]]},"1380":{"position":[[64,10],[211,10],[281,9]]},"1382":{"position":[[13,10],[688,9]]},"1384":{"position":[[1164,10]]},"1385":{"position":[[13,10]]},"1387":{"position":[[87,10],[641,10]]},"1388":{"position":[[6,9]]},"1389":{"position":[[6,9]]},"1396":{"position":[[13,10],[148,9]]},"1397":{"position":[[407,9],[806,10],[1234,10]]},"1398":{"position":[[406,9],[805,10],[1237,10]]},"1399":{"position":[[13,10]]},"1400":{"position":[[527,10],[549,9]]},"1401":{"position":[[52,10]]},"1402":{"position":[[6,9]]},"1404":{"position":[[64,10],[211,10],[281,9]]},"1406":{"position":[[13,10],[148,9]]},"1408":{"position":[[125,10]]},"1409":{"position":[[390,9],[789,10],[1238,10]]},"1410":{"position":[[13,10]]},"1411":{"position":[[527,10],[549,9]]},"1412":{"position":[[52,10]]},"1413":{"position":[[6,9]]},"1415":{"position":[[64,10],[211,10],[281,9]]},"1417":{"position":[[13,10]]},"1419":{"position":[[13,10]]},"1421":{"position":[[53,10]]},"1422":{"position":[[6,9]]},"1425":{"position":[[13,10]]},"1426":{"position":[[13,10],[253,9]]},"1427":{"position":[[1081,10],[1103,9]]},"1428":{"position":[[52,10]]},"1430":{"position":[[6,9]]},"1432":{"position":[[64,10],[211,10],[281,9],[491,9]]},"1447":{"position":[[442,9]]},"1448":{"position":[[1,10],[202,9],[330,10],[412,9],[655,10],[670,9],[956,9],[1026,11]]},"1449":{"position":[[162,9],[687,9]]},"1451":{"position":[[61,10]]},"1453":{"position":[[74,9]]},"1472":{"position":[[527,9],[664,10]]},"1480":{"position":[[321,9],[359,10],[421,10]]}},"keywords":{}}],["connector'",{"_index":840,"title":{},"content":{"56":{"position":[[1209,11]]},"120":{"position":[[568,11]]},"122":{"position":[[2079,11]]},"209":{"position":[[1169,11],[1270,11]]},"724":{"position":[[6,11]]},"785":{"position":[[338,11],[467,11]]},"912":{"position":[[1029,11]]},"1448":{"position":[[1093,11]]},"1480":{"position":[[502,11]]}},"keywords":{}}],["connector.ent",{"_index":3823,"title":{},"content":{"479":{"position":[[191,15]]}},"keywords":{}}],["connector.format",{"_index":5048,"title":{},"content":{"919":{"position":[[2630,16]]}},"keywords":{}}],["connector.if",{"_index":3397,"title":{},"content":{"366":{"position":[[292,12]]},"903":{"position":[[318,12]]},"915":{"position":[[318,12]]},"930":{"position":[[318,12]]},"963":{"position":[[472,12]]}},"keywords":{}}],["connectorinstead",{"_index":4722,"title":{},"content":{"821":{"position":[[206,16]]}},"keywords":{}}],["connectors.deriv",{"_index":560,"title":{},"content":{"21":{"position":[[147,21]]}},"keywords":{}}],["connectorsdekaf",{"_index":3247,"title":{},"content":{"345":{"position":[[148,15]]}},"keywords":{}}],["connectorserv",{"_index":5113,"title":{},"content":{"947":{"position":[[729,15]]}},"keywords":{}}],["connectorsmateri",{"_index":3246,"title":{},"content":{"345":{"position":[[122,25]]}},"keywords":{}}],["consequ",{"_index":2480,"title":{},"content":{"227":{"position":[[360,12]]}},"keywords":{}}],["consid",{"_index":119,"title":{},"content":{"3":{"position":[[393,8]]},"14":{"position":[[389,8]]},"92":{"position":[[872,8]]},"99":{"position":[[480,8]]},"114":{"position":[[241,8]]},"121":{"position":[[843,8]]},"159":{"position":[[706,8]]},"164":{"position":[[1072,8]]},"308":{"position":[[556,10]]},"410":{"position":[[1,8]]},"602":{"position":[[646,10],[1001,8]]},"1020":{"position":[[939,9],[992,8]]},"1140":{"position":[[104,9]]},"1292":{"position":[[99,9]]},"1306":{"position":[[99,9]]},"1316":{"position":[[104,9]]},"1329":{"position":[[99,9]]},"1340":{"position":[[104,9]]},"1351":{"position":[[104,9]]},"1370":{"position":[[100,9]]},"1379":{"position":[[103,9]]},"1403":{"position":[[103,9]]},"1414":{"position":[[103,9]]},"1431":{"position":[[127,9]]},"1440":{"position":[[445,8]]},"1452":{"position":[[3317,10]]},"1459":{"position":[[322,10]]}},"keywords":{}}],["consider",{"_index":2215,"title":{"203":{"position":[[14,15]]},"355":{"position":[[12,15]]},"368":{"position":[[26,15]]},"410":{"position":[[12,15]]},"576":{"position":[[12,15]]},"587":{"position":[[12,15]]},"755":{"position":[[26,15]]},"768":{"position":[[26,15]]},"795":{"position":[[26,15]]},"810":{"position":[[26,15]]},"826":{"position":[[26,15]]},"900":{"position":[[12,15]]},"905":{"position":[[26,15]]},"920":{"position":[[26,15]]},"932":{"position":[[26,15]]},"948":{"position":[[26,15]]},"966":{"position":[[26,15]]},"1068":{"position":[[12,15]]},"1156":{"position":[[12,15]]},"1390":{"position":[[12,15]]},"1445":{"position":[[8,14]]},"1449":{"position":[[0,14]]}},"content":{"429":{"position":[[117,15]]},"1166":{"position":[[186,13]]},"1437":{"position":[[614,13]]}},"keywords":{}}],["consist",{"_index":974,"title":{"1147":{"position":[[9,12]]},"1174":{"position":[[9,12]]},"1216":{"position":[[9,12]]},"1224":{"position":[[9,12]]}},"content":{"66":{"position":[[71,7]]},"209":{"position":[[1533,12]]},"211":{"position":[[711,11]]},"237":{"position":[[2646,11]]},"254":{"position":[[883,8]]},"314":{"position":[[561,8]]},"326":{"position":[[1917,11]]},"332":{"position":[[259,10]]},"573":{"position":[[1122,7]]},"590":{"position":[[47,8]]},"642":{"position":[[258,11]]},"779":{"position":[[45,8]]},"785":{"position":[[719,12]]},"879":{"position":[[1295,11]]},"1292":{"position":[[1128,10]]},"1306":{"position":[[1128,10]]},"1317":{"position":[[407,10]]},"1329":{"position":[[1128,10]]},"1341":{"position":[[407,10]]},"1352":{"position":[[407,10]]},"1358":{"position":[[541,10]]},"1432":{"position":[[407,10]]},"1439":{"position":[[1321,10]]},"1477":{"position":[[3010,10]]}},"keywords":{}}],["consol",{"_index":2132,"title":{"604":{"position":[[14,7]]}},"content":{"191":{"position":[[166,8],[465,8]]},"192":{"position":[[2311,7]]},"240":{"position":[[309,8],[438,8]]},"301":{"position":[[820,8]]},"364":{"position":[[1642,7]]},"464":{"position":[[163,7]]},"574":{"position":[[157,8]]},"585":{"position":[[157,8]]},"606":{"position":[[112,7]]},"607":{"position":[[87,8]]},"608":{"position":[[73,7]]},"609":{"position":[[95,7]]},"610":{"position":[[264,7]]},"611":{"position":[[762,8],[1254,6]]},"690":{"position":[[28,7]]},"747":{"position":[[568,7]]},"767":{"position":[[2390,8]]},"792":{"position":[[2371,8]]},"808":{"position":[[1502,8]]},"824":{"position":[[2502,8]]},"904":{"position":[[2317,8]]},"918":{"position":[[2609,8]]},"931":{"position":[[1981,8]]},"943":{"position":[[219,8],[367,8]]},"1051":{"position":[[2033,8]]},"1059":{"position":[[1828,8]]},"1177":{"position":[[93,7]]},"1179":{"position":[[694,8]]},"1289":{"position":[[1462,8]]},"1298":{"position":[[1294,8]]},"1303":{"position":[[1134,7],[1624,8]]},"1310":{"position":[[783,8]]},"1322":{"position":[[1681,8]]},"1335":{"position":[[1329,8]]},"1373":{"position":[[1282,8]]},"1374":{"position":[[1286,8]]},"1397":{"position":[[1063,8]]},"1398":{"position":[[1066,8]]},"1425":{"position":[[201,8]]}},"keywords":{}}],["console.on",{"_index":5077,"title":{},"content":{"942":{"position":[[453,10]]}},"keywords":{}}],["console.select",{"_index":5081,"title":{},"content":{"943":{"position":[[398,14]]}},"keywords":{}}],["console:dev",{"_index":3343,"title":{},"content":{"364":{"position":[[1710,11]]},"612":{"position":[[173,11]]}},"keywords":{}}],["consolego",{"_index":3520,"title":{},"content":{"395":{"position":[[165,9]]}},"keywords":{}}],["consolid",{"_index":1698,"title":{},"content":{"124":{"position":[[519,11]]}},"keywords":{}}],["const",{"_index":1884,"title":{},"content":{"159":{"position":[[897,6]]},"281":{"position":[[1465,5]]},"1465":{"position":[[718,6],[963,6]]}},"keywords":{}}],["constantli",{"_index":702,"title":{},"content":{"38":{"position":[[442,10]]}},"keywords":{}}],["constraint",{"_index":730,"title":{},"content":{"41":{"position":[[418,11]]},"156":{"position":[[535,11]]},"161":{"position":[[553,11]]},"162":{"position":[[49,11]]},"239":{"position":[[1207,11]]},"309":{"position":[[955,12]]},"310":{"position":[[320,10]]},"331":{"position":[[197,11]]},"332":{"position":[[446,12]]},"1140":{"position":[[3163,10],[3205,11]]},"1292":{"position":[[1158,10]]},"1306":{"position":[[1158,10]]},"1316":{"position":[[3163,10],[3205,11]]},"1329":{"position":[[1158,10]]},"1340":{"position":[[3163,10],[3205,11]]},"1351":{"position":[[3163,10],[3205,11]]},"1370":{"position":[[661,10]]},"1379":{"position":[[512,10],[562,11]]},"1394":{"position":[[736,10]]},"1403":{"position":[[512,10],[562,11]]},"1414":{"position":[[512,10],[562,11]]},"1431":{"position":[[3186,10],[3228,11]]}},"keywords":{}}],["constraint_ca",{"_index":6009,"title":{},"content":{"1292":{"position":[[1201,13]]},"1306":{"position":[[1201,13]]},"1329":{"position":[[1201,13]]}},"keywords":{}}],["constraint_na",{"_index":6012,"title":{},"content":{"1292":{"position":[[1261,13]]},"1306":{"position":[[1261,13]]},"1329":{"position":[[1261,13]]}},"keywords":{}}],["constraint_sc",{"_index":6015,"title":{},"content":{"1292":{"position":[[1323,13]]},"1306":{"position":[[1323,13]]},"1329":{"position":[[1323,13]]}},"keywords":{}}],["constraints.flow",{"_index":1869,"title":{},"content":{"158":{"position":[[604,16]]}},"keywords":{}}],["construct",{"_index":2790,"title":{},"content":{"264":{"position":[[188,9]]},"275":{"position":[[210,9]]},"1465":{"position":[[323,9]]}},"keywords":{}}],["constructor",{"_index":6300,"title":{},"content":{"1379":{"position":[[618,11]]},"1403":{"position":[[618,11]]},"1414":{"position":[[618,11]]}},"keywords":{}}],["consult",{"_index":1487,"title":{},"content":{"104":{"position":[[195,7]]},"122":{"position":[[2066,7]]},"221":{"position":[[76,7]]}},"keywords":{}}],["consum",{"_index":392,"title":{},"content":{"13":{"position":[[632,9]]},"240":{"position":[[3686,9]]},"250":{"position":[[523,8],[541,8],[995,9]]},"305":{"position":[[119,7],[184,10]]},"320":{"position":[[517,8],[569,10],[625,8]]},"321":{"position":[[2117,7]]},"325":{"position":[[66,7]]},"397":{"position":[[1013,7]]},"410":{"position":[[100,7],[309,9]]},"840":{"position":[[463,8],[480,8],[776,8],[793,8]]},"842":{"position":[[655,8],[668,8],[763,8],[779,8]]},"849":{"position":[[934,8],[951,8],[1251,8],[1268,8]]},"851":{"position":[[268,8],[281,8],[361,8],[377,8]]},"869":{"position":[[1246,9]]},"989":{"position":[[1112,8],[1129,8]]},"991":{"position":[[354,8],[503,8]]},"1004":{"position":[[1195,8],[1212,8]]},"1009":{"position":[[417,8],[566,8]]},"1118":{"position":[[906,8]]}},"keywords":{}}],["consumer.clos",{"_index":2674,"title":{},"content":{"250":{"position":[[1095,16]]}},"keywords":{}}],["consumer/token",{"_index":4744,"title":{},"content":{"840":{"position":[[2642,14]]}},"keywords":{}}],["consumer_key",{"_index":4786,"title":{},"content":{"843":{"position":[[176,13]]},"851":{"position":[[254,13]]},"852":{"position":[[147,13]]}},"keywords":{}}],["consumer_secret",{"_index":4826,"title":{},"content":{"851":{"position":[[344,16]]},"852":{"position":[[173,16]]}},"keywords":{}}],["consumer_secret_sop",{"_index":4788,"title":{},"content":{"843":{"position":[[194,21]]}},"keywords":{}}],["consumpt",{"_index":6469,"title":{},"content":{"1435":{"position":[[74,11]]},"1437":{"position":[[95,11]]}},"keywords":{}}],["contact",{"_index":525,"title":{},"content":{"19":{"position":[[543,7]]},"53":{"position":[[610,7]]},"173":{"position":[[281,7]]},"427":{"position":[[419,7]]},"490":{"position":[[120,7]]},"663":{"position":[[120,7]]},"678":{"position":[[120,7]]},"686":{"position":[[696,8]]},"693":{"position":[[120,7]]},"977":{"position":[[780,7]]}},"keywords":{}}],["contact_attribut",{"_index":4442,"title":{},"content":{"686":{"position":[[872,18]]}},"keywords":{}}],["contactsclientscompanyinvoic",{"_index":4339,"title":{},"content":{"628":{"position":[[78,29]]}},"keywords":{}}],["contain",{"_index":343,"title":{},"content":{"11":{"position":[[1571,8]]},"24":{"position":[[89,7]]},"63":{"position":[[645,7]]},"67":{"position":[[56,8],[395,7],[1218,8]]},"75":{"position":[[273,7]]},"81":{"position":[[33,9],[113,9]]},"84":{"position":[[1235,9]]},"88":{"position":[[250,9]]},"90":{"position":[[318,9]]},"92":{"position":[[810,9]]},"94":{"position":[[1144,10]]},"107":{"position":[[2967,7],[3109,7]]},"117":{"position":[[281,7]]},"141":{"position":[[912,7],[1186,8]]},"173":{"position":[[70,10],[169,9],[498,9]]},"183":{"position":[[1998,8],[2918,7]]},"190":{"position":[[1203,7]]},"221":{"position":[[1042,8]]},"222":{"position":[[287,8]]},"223":{"position":[[253,8]]},"224":{"position":[[306,8]]},"236":{"position":[[353,8],[1913,8],[2771,8]]},"237":{"position":[[1124,7],[3077,10]]},"238":{"position":[[341,8]]},"242":{"position":[[200,10]]},"253":{"position":[[663,8]]},"254":{"position":[[1824,7]]},"263":{"position":[[578,7],[1157,7]]},"264":{"position":[[107,7]]},"267":{"position":[[1527,8]]},"270":{"position":[[1156,8]]},"274":{"position":[[1942,7]]},"275":{"position":[[129,7]]},"279":{"position":[[615,7]]},"281":{"position":[[161,8]]},"288":{"position":[[223,8]]},"295":{"position":[[619,7]]},"299":{"position":[[215,8]]},"313":{"position":[[663,8]]},"314":{"position":[[2465,7]]},"315":{"position":[[2347,7]]},"326":{"position":[[534,10]]},"390":{"position":[[113,7]]},"427":{"position":[[45,7]]},"438":{"position":[[1289,8],[1556,9],[1606,9],[1944,9],[1958,9]]},"482":{"position":[[118,10]]},"504":{"position":[[21,7]]},"517":{"position":[[816,8],[879,8]]},"548":{"position":[[875,10]]},"556":{"position":[[1160,7]]},"564":{"position":[[95,10]]},"574":{"position":[[537,7]]},"590":{"position":[[95,7],[348,8],[480,7],[991,7],[1068,8]]},"601":{"position":[[111,8]]},"605":{"position":[[89,8]]},"616":{"position":[[139,7],[220,7],[345,8],[566,7]]},"738":{"position":[[113,8],[206,8],[380,8],[490,8],[554,8],[614,8],[684,8]]},"779":{"position":[[92,7]]},"842":{"position":[[3133,10]]},"909":{"position":[[94,7],[436,8]]},"911":{"position":[[65,7]]},"925":{"position":[[94,7],[436,8]]},"927":{"position":[[65,7]]},"936":{"position":[[94,7],[436,8]]},"938":{"position":[[65,7]]},"952":{"position":[[94,7],[436,8]]},"954":{"position":[[65,7]]},"970":{"position":[[94,7],[436,8]]},"972":{"position":[[65,7]]},"985":{"position":[[375,7]]},"1000":{"position":[[553,7]]},"1008":{"position":[[1609,8]]},"1031":{"position":[[91,10]]},"1036":{"position":[[960,7]]},"1040":{"position":[[748,7]]},"1042":{"position":[[493,7]]},"1043":{"position":[[1157,7]]},"1050":{"position":[[748,7]]},"1051":{"position":[[1419,7]]},"1058":{"position":[[748,7]]},"1059":{"position":[[1212,7]]},"1087":{"position":[[282,7]]},"1140":{"position":[[3239,8]]},"1157":{"position":[[271,10]]},"1178":{"position":[[281,9]]},"1230":{"position":[[510,10]]},"1243":{"position":[[691,7],[801,8]]},"1250":{"position":[[92,7]]},"1292":{"position":[[1373,8]]},"1298":{"position":[[253,8]]},"1306":{"position":[[1373,8]]},"1316":{"position":[[3239,8]]},"1317":{"position":[[654,10]]},"1322":{"position":[[287,8]]},"1329":{"position":[[1373,8]]},"1335":{"position":[[287,8]]},"1340":{"position":[[3239,8]]},"1341":{"position":[[654,10]]},"1346":{"position":[[253,8]]},"1351":{"position":[[3239,8]]},"1352":{"position":[[654,10]]},"1379":{"position":[[668,8]]},"1386":{"position":[[562,8]]},"1403":{"position":[[668,8]]},"1414":{"position":[[668,8]]},"1417":{"position":[[136,10]]},"1429":{"position":[[528,10]]},"1431":{"position":[[3262,8]]},"1432":{"position":[[668,10]]},"1444":{"position":[[747,7]]},"1451":{"position":[[334,8],[980,8]]},"1461":{"position":[[1789,8]]},"1462":{"position":[[504,8]]},"1477":{"position":[[3717,9]]}},"keywords":{}}],["container_nam",{"_index":2504,"title":{},"content":{"236":{"position":[[628,15],[1155,15]]}},"keywords":{}}],["containernam",{"_index":3711,"title":{},"content":{"438":{"position":[[1541,14]]},"439":{"position":[[132,14]]}},"keywords":{}}],["contains"",{"_index":5170,"title":{},"content":{"1009":{"position":[[1317,15]]}},"keywords":{}}],["containst",{"_index":6304,"title":{},"content":{"1379":{"position":[[727,13]]},"1403":{"position":[[727,13]]},"1414":{"position":[[727,13]]}},"keywords":{}}],["content",{"_index":6,"title":{},"content":{"1":{"position":[[56,8],[593,7]]},"3":{"position":[[63,8],[280,7],[832,7],[871,7],[907,7]]},"34":{"position":[[622,7]]},"43":{"position":[[365,8]]},"63":{"position":[[614,8]]},"88":{"position":[[143,8]]},"89":{"position":[[211,7],[338,7]]},"90":{"position":[[590,7]]},"129":{"position":[[38,8],[237,8]]},"183":{"position":[[1103,8],[3004,8]]},"225":{"position":[[434,8]]},"237":{"position":[[1522,9]]},"254":{"position":[[221,9]]},"296":{"position":[[221,9],[5200,9]]},"314":{"position":[[221,9]]},"315":{"position":[[1293,9]]},"366":{"position":[[920,9]]},"417":{"position":[[1520,9],[1672,9]]},"419":{"position":[[689,8]]},"440":{"position":[[705,8]]},"477":{"position":[[266,8]]},"479":{"position":[[796,8]]},"482":{"position":[[292,8]]},"502":{"position":[[1168,9],[1320,9]]},"545":{"position":[[1122,9],[1274,9]]},"547":{"position":[[690,8]]},"571":{"position":[[686,8]]},"573":{"position":[[513,8]]},"582":{"position":[[299,8]]},"584":{"position":[[444,8]]},"609":{"position":[[243,8]]},"617":{"position":[[610,8]]},"619":{"position":[[418,8]]},"637":{"position":[[682,9],[834,9]]},"670":{"position":[[429,7]]},"750":{"position":[[631,9]]},"764":{"position":[[747,10]]},"766":{"position":[[631,9]]},"777":{"position":[[747,10]]},"789":{"position":[[619,9]]},"804":{"position":[[745,10]]},"807":{"position":[[619,9]]},"819":{"position":[[745,10]]},"821":{"position":[[576,8]]},"823":{"position":[[619,9]]},"835":{"position":[[745,10]]},"903":{"position":[[946,9]]},"912":{"position":[[592,8]]},"915":{"position":[[946,9]]},"930":{"position":[[946,9]]},"943":{"position":[[1123,8]]},"963":{"position":[[1100,9]]},"1021":{"position":[[1679,9],[1831,9]]},"1023":{"position":[[670,8]]},"1040":{"position":[[662,9]]},"1050":{"position":[[662,9]]},"1058":{"position":[[662,9]]},"1195":{"position":[[167,8]]},"1241":{"position":[[229,7]]},"1245":{"position":[[562,8]]},"1439":{"position":[[1373,8]]}},"keywords":{}}],["contentencod",{"_index":5768,"title":{},"content":{"1164":{"position":[[307,17]]},"1172":{"position":[[409,17]]},"1222":{"position":[[409,17]]}},"keywords":{}}],["contenttyp",{"_index":1306,"title":{},"content":{"89":{"position":[[299,12]]}},"keywords":{}}],["context",{"_index":1391,"title":{},"content":{"96":{"position":[[724,7]]},"97":{"position":[[279,7]]},"112":{"position":[[766,8],[797,8]]},"117":{"position":[[212,7]]},"137":{"position":[[474,7]]},"183":{"position":[[631,7]]},"237":{"position":[[248,7]]},"267":{"position":[[999,7]]},"270":{"position":[[160,7]]},"278":{"position":[[428,7]]},"319":{"position":[[877,9]]},"320":{"position":[[612,8]]},"977":{"position":[[538,8]]},"1292":{"position":[[1404,7]]},"1306":{"position":[[1404,7]]},"1329":{"position":[[1404,7]]},"1437":{"position":[[302,7]]}},"keywords":{}}],["contextsissu",{"_index":4469,"title":{},"content":{"709":{"position":[[192,13]]}},"keywords":{}}],["contigu",{"_index":3123,"title":{},"content":{"320":{"position":[[997,10]]}},"keywords":{}}],["continu",{"_index":290,"title":{"121":{"position":[[4,10]]},"165":{"position":[[0,10]]},"184":{"position":[[11,10]]}},"content":{"11":{"position":[[64,11]]},"13":{"position":[[510,8]]},"19":{"position":[[276,8]]},"20":{"position":[[226,8]]},"35":{"position":[[113,12]]},"36":{"position":[[118,12]]},"40":{"position":[[110,12]]},"44":{"position":[[164,12]]},"82":{"position":[[2869,8]]},"106":{"position":[[113,12]]},"121":{"position":[[27,10]]},"135":{"position":[[995,8]]},"157":{"position":[[434,10]]},"163":{"position":[[508,12]]},"165":{"position":[[568,10]]},"183":{"position":[[669,9],[4582,8]]},"185":{"position":[[230,9]]},"196":{"position":[[188,10]]},"204":{"position":[[951,8]]},"209":{"position":[[420,12],[991,10]]},"211":{"position":[[797,12]]},"217":{"position":[[2279,9]]},"233":{"position":[[188,10]]},"240":{"position":[[2408,8],[4011,9]]},"253":{"position":[[262,11]]},"264":{"position":[[858,8]]},"267":{"position":[[1037,9],[1719,8],[1738,8]]},"268":{"position":[[1536,10]]},"284":{"position":[[495,12]]},"290":{"position":[[1834,13],[1882,9]]},"292":{"position":[[48,12]]},"295":{"position":[[3936,9]]},"301":{"position":[[1799,13],[1847,9]]},"303":{"position":[[48,12]]},"309":{"position":[[1114,8],[1716,8]]},"313":{"position":[[262,11]]},"322":{"position":[[870,12],[1425,12]]},"324":{"position":[[603,10]]},"326":{"position":[[890,12],[1475,12]]},"329":{"position":[[59,12]]},"373":{"position":[[749,10]]},"578":{"position":[[38,8]]},"595":{"position":[[1365,13]]},"718":{"position":[[374,8]]},"724":{"position":[[443,8]]},"759":{"position":[[115,10]]},"772":{"position":[[126,10]]},"785":{"position":[[62,12],[237,9]]},"799":{"position":[[113,10]]},"814":{"position":[[113,10]]},"830":{"position":[[113,10]]},"1008":{"position":[[838,11]]},"1077":{"position":[[20,11],[781,8]]},"1140":{"position":[[3275,8]]},"1183":{"position":[[1702,8]]},"1243":{"position":[[1014,9]]},"1292":{"position":[[1443,8]]},"1306":{"position":[[1443,8]]},"1316":{"position":[[3275,8]]},"1329":{"position":[[1443,8]]},"1340":{"position":[[3275,8]]},"1351":{"position":[[3275,8]]},"1379":{"position":[[781,8]]},"1403":{"position":[[781,8]]},"1414":{"position":[[781,8]]},"1431":{"position":[[3298,8]]},"1447":{"position":[[424,13]]},"1448":{"position":[[805,8]]},"1449":{"position":[[585,8]]},"1451":{"position":[[905,8],[1037,10]]},"1461":{"position":[[4068,8]]},"1472":{"position":[[131,12]]},"1479":{"position":[[295,11]]}},"keywords":{}}],["contract",{"_index":315,"title":{},"content":{"11":{"position":[[679,8],[1936,8],[2013,9]]},"102":{"position":[[652,10]]},"208":{"position":[[474,10]]},"305":{"position":[[79,8],[236,8]]}},"keywords":{}}],["contrast",{"_index":6514,"title":{},"content":{"1447":{"position":[[282,9]]}},"keywords":{}}],["contribut",{"_index":1263,"title":{},"content":{"84":{"position":[[493,11]]},"329":{"position":[[1104,10]]}},"keywords":{}}],["control",{"_index":4,"title":{},"content":{"1":{"position":[[22,7]]},"7":{"position":[[52,7]]},"16":{"position":[[730,8]]},"20":{"position":[[660,7]]},"42":{"position":[[544,7]]},"55":{"position":[[251,11]]},"84":{"position":[[1196,7]]},"92":{"position":[[348,7]]},"162":{"position":[[355,7]]},"173":{"position":[[839,7]]},"202":{"position":[[135,7]]},"218":{"position":[[1925,7]]},"260":{"position":[[21,7]]},"324":{"position":[[279,8]]},"326":{"position":[[1379,8]]},"343":{"position":[[1110,8]]},"390":{"position":[[499,11]]},"430":{"position":[[175,8]]},"452":{"position":[[220,7]]},"548":{"position":[[173,7]]},"780":{"position":[[143,7]]},"864":{"position":[[95,7]]},"876":{"position":[[95,7]]},"985":{"position":[[496,7]]},"1000":{"position":[[674,7]]},"1020":{"position":[[2023,7]]},"1036":{"position":[[1063,8]]},"1105":{"position":[[196,7]]},"1251":{"position":[[175,7]]},"1373":{"position":[[1160,7],[1210,7]]},"1374":{"position":[[1164,7],[1214,7]]},"1397":{"position":[[939,7],[989,7]]},"1398":{"position":[[942,7],[992,7]]},"1408":{"position":[[258,7],[308,7]]},"1409":{"position":[[922,7],[972,7]]},"1453":{"position":[[40,10]]},"1465":{"position":[[143,10]]}},"keywords":{}}],["conveni",{"_index":1913,"title":{},"content":{"162":{"position":[[600,12]]},"197":{"position":[[199,10]]},"234":{"position":[[81,12]]},"237":{"position":[[873,12]]}},"keywords":{}}],["convent",{"_index":612,"title":{"1155":{"position":[[7,12]]}},"content":{"26":{"position":[[374,11]]},"269":{"position":[[228,10]]},"1008":{"position":[[1520,10]]},"1434":{"position":[[6,10]]}},"keywords":{}}],["convers",{"_index":4115,"title":{},"content":{"556":{"position":[[264,10],[295,10],[410,11]]},"686":{"position":[[511,13]]},"1012":{"position":[[109,13],[140,13],[175,13]]},"1183":{"position":[[553,11]]}},"keywords":{}}],["conversation_part",{"_index":4437,"title":{},"content":{"686":{"position":[[599,18]]}},"keywords":{}}],["conversations)channel",{"_index":5178,"title":{},"content":{"1012":{"position":[[78,22]]}},"keywords":{}}],["conversion_window_day",{"_index":4123,"title":{},"content":{"557":{"position":[[182,23]]}},"keywords":{}}],["convert",{"_index":2078,"title":{},"content":{"183":{"position":[[3194,8]]},"189":{"position":[[812,7]]},"221":{"position":[[1328,7]]},"222":{"position":[[573,7]]},"223":{"position":[[539,7]]},"224":{"position":[[592,7]]},"754":{"position":[[350,7]]},"794":{"position":[[223,7]]},"809":{"position":[[223,7]]},"825":{"position":[[223,7]]},"1140":{"position":[[3309,7]]},"1183":{"position":[[283,7],[569,7]]},"1286":{"position":[[252,7]]},"1291":{"position":[[119,9]]},"1292":{"position":[[1488,7]]},"1298":{"position":[[539,7]]},"1301":{"position":[[252,7]]},"1305":{"position":[[119,9]]},"1306":{"position":[[1488,7]]},"1316":{"position":[[3309,7]]},"1317":{"position":[[599,9],[688,9],[808,9],[890,10]]},"1322":{"position":[[573,7]]},"1325":{"position":[[252,7]]},"1328":{"position":[[119,9]]},"1329":{"position":[[1488,7]]},"1335":{"position":[[573,7]]},"1340":{"position":[[3309,7]]},"1341":{"position":[[599,9],[688,9],[808,9],[890,10]]},"1346":{"position":[[539,7]]},"1351":{"position":[[3309,7]]},"1352":{"position":[[599,9],[688,9],[808,9],[890,10]]},"1379":{"position":[[828,7]]},"1403":{"position":[[828,7]]},"1414":{"position":[[828,7]]},"1431":{"position":[[3332,7]]},"1432":{"position":[[599,9],[702,9],[822,9],[918,10]]}},"keywords":{}}],["convey",{"_index":1119,"title":{},"content":{"81":{"position":[[369,7]]}},"keywords":{}}],["cooki",{"_index":1841,"title":{},"content":{"154":{"position":[[213,6],[2077,6],[2110,6],[2152,6]]}},"keywords":{}}],["cool",{"_index":5110,"title":{},"content":{"947":{"position":[[440,4],[757,4]]}},"keywords":{}}],["coordin",{"_index":1901,"title":{},"content":{"161":{"position":[[719,12],[785,10],[812,12]]},"322":{"position":[[498,10],[982,13]]}},"keywords":{}}],["copi",{"_index":871,"title":{},"content":{"58":{"position":[[175,4]]},"109":{"position":[[397,4]]},"121":{"position":[[1728,6]]},"169":{"position":[[414,4],[1564,4]]},"204":{"position":[[876,4]]},"210":{"position":[[1885,4]]},"263":{"position":[[152,4],[682,4]]},"267":{"position":[[1990,4]]},"270":{"position":[[252,4]]},"274":{"position":[[550,4]]},"284":{"position":[[61,4]]},"289":{"position":[[387,6]]},"295":{"position":[[139,4],[1155,6]]},"296":{"position":[[7332,4]]},"300":{"position":[[355,4]]},"323":{"position":[[343,4]]},"340":{"position":[[424,4]]},"436":{"position":[[767,4],[854,4]]},"486":{"position":[[233,4]]},"548":{"position":[[1264,4]]},"571":{"position":[[677,4]]},"582":{"position":[[290,4]]},"595":{"position":[[907,4]]},"609":{"position":[[234,4]]},"615":{"position":[[40,4]]},"617":{"position":[[40,4],[601,4]]},"645":{"position":[[446,4]]},"652":{"position":[[446,4]]},"658":{"position":[[233,4]]},"674":{"position":[[233,4]]},"689":{"position":[[233,4]]},"840":{"position":[[282,4],[829,4],[2352,4]]},"849":{"position":[[225,4],[1304,4],[3492,4]]},"857":{"position":[[239,4]]},"1032":{"position":[[82,4]]},"1140":{"position":[[3344,4]]},"1183":{"position":[[362,7],[1270,7],[1416,4]]},"1209":{"position":[[454,4]]},"1245":{"position":[[553,4]]},"1316":{"position":[[3344,4]]},"1340":{"position":[[3344,4]]},"1351":{"position":[[3344,4]]},"1383":{"position":[[28,4]]},"1384":{"position":[[453,4]]},"1431":{"position":[[3367,4]]}},"keywords":{}}],["core",{"_index":1454,"title":{},"content":{"101":{"position":[[415,5]]}},"keywords":{}}],["corner",{"_index":2234,"title":{},"content":{"206":{"position":[[867,7]]},"240":{"position":[[4144,7]]},"296":{"position":[[7549,6]]},"349":{"position":[[111,7]]},"479":{"position":[[110,7]]},"552":{"position":[[171,6],[446,6]]},"1092":{"position":[[111,7]]}},"keywords":{}}],["corp",{"_index":6594,"title":{},"content":{"1461":{"position":[[927,4]]}},"keywords":{}}],["corr",{"_index":5661,"title":{},"content":{"1140":{"position":[[3370,4]]},"1316":{"position":[[3370,4]]},"1340":{"position":[[3370,4]]},"1351":{"position":[[3370,4]]},"1379":{"position":[[878,4]]},"1403":{"position":[[878,4]]},"1414":{"position":[[878,4]]},"1431":{"position":[[3393,4]]}},"keywords":{}}],["correct",{"_index":920,"title":{},"content":{"61":{"position":[[382,7]]},"68":{"position":[[129,7]]},"75":{"position":[[84,7]]},"106":{"position":[[748,7]]},"111":{"position":[[252,11]]},"183":{"position":[[1075,7]]},"218":{"position":[[1494,7]]},"228":{"position":[[783,7]]},"229":{"position":[[477,7]]},"239":{"position":[[1576,8]]},"267":{"position":[[1494,7]]},"270":{"position":[[1123,7]]},"326":{"position":[[1908,8]]},"419":{"position":[[1533,7]]},"441":{"position":[[142,7]]},"477":{"position":[[454,7]]},"499":{"position":[[368,7]]},"504":{"position":[[1162,7]]},"547":{"position":[[1535,7]]},"578":{"position":[[106,12],[285,7]]},"598":{"position":[[418,7]]},"634":{"position":[[360,7]]},"639":{"position":[[1160,7]]},"661":{"position":[[295,7]]},"794":{"position":[[749,7]]},"809":{"position":[[749,7]]},"840":{"position":[[2432,7]]},"849":{"position":[[3572,7]]},"1023":{"position":[[1516,7]]},"1286":{"position":[[806,7]]},"1289":{"position":[[1361,7]]},"1298":{"position":[[1193,7]]},"1303":{"position":[[1072,7]]},"1310":{"position":[[682,7]]},"1322":{"position":[[1580,7]]},"1325":{"position":[[806,7]]},"1335":{"position":[[1228,7]]},"1346":{"position":[[1194,7]]},"1439":{"position":[[1701,7]]}},"keywords":{}}],["correctli",{"_index":317,"title":{},"content":{"11":{"position":[[755,9]]},"114":{"position":[[680,9]]},"132":{"position":[[603,9]]},"183":{"position":[[4304,9]]},"228":{"position":[[433,9]]},"237":{"position":[[2393,9]]},"275":{"position":[[65,10]]},"417":{"position":[[487,10]]},"438":{"position":[[487,10]]},"502":{"position":[[947,10]]},"545":{"position":[[487,10]]},"1008":{"position":[[571,10]]}},"keywords":{}}],["correspond",{"_index":493,"title":{},"content":{"17":{"position":[[385,13],[749,13]]},"35":{"position":[[258,13]]},"55":{"position":[[870,10],[1032,11],[1114,11]]},"63":{"position":[[574,11]]},"66":{"position":[[265,11]]},"98":{"position":[[91,13],[158,13]]},"102":{"position":[[450,13]]},"115":{"position":[[986,13]]},"184":{"position":[[707,13],[870,13]]},"197":{"position":[[1145,13]]},"225":{"position":[[575,13]]},"228":{"position":[[279,11]]},"385":{"position":[[743,10]]},"488":{"position":[[480,10]]},"659":{"position":[[637,10]]},"676":{"position":[[480,10]]},"691":{"position":[[480,10]]},"976":{"position":[[402,13]]},"1047":{"position":[[131,13]]},"1055":{"position":[[131,13]]},"1063":{"position":[[131,13]]},"1140":{"position":[[3399,13]]},"1155":{"position":[[163,14]]},"1316":{"position":[[3399,13]]},"1317":{"position":[[829,13]]},"1340":{"position":[[3399,13]]},"1341":{"position":[[829,13]]},"1351":{"position":[[3399,13]]},"1352":{"position":[[829,13]]},"1379":{"position":[[914,13]]},"1403":{"position":[[914,13]]},"1414":{"position":[[914,13]]},"1417":{"position":[[302,10]]},"1431":{"position":[[3422,13]]},"1432":{"position":[[843,13]]},"1470":{"position":[[721,11],[811,11]]},"1475":{"position":[[348,13]]}},"keywords":{}}],["correspondingli",{"_index":4274,"title":{},"content":{"595":{"position":[[1480,15]]}},"keywords":{}}],["corrupt",{"_index":4653,"title":{},"content":{"763":{"position":[[255,7]]},"776":{"position":[[255,7]]},"803":{"position":[[261,7]]},"818":{"position":[[261,7]]},"834":{"position":[[261,7]]}},"keywords":{}}],["cosh",{"_index":5667,"title":{},"content":{"1140":{"position":[[3474,4]]},"1316":{"position":[[3474,4]]},"1340":{"position":[[3474,4]]},"1351":{"position":[[3474,4]]},"1431":{"position":[[3497,4]]}},"keywords":{}}],["cost",{"_index":545,"title":{},"content":{"20":{"position":[[806,4]]},"96":{"position":[[297,5]]},"163":{"position":[[556,4]]},"319":{"position":[[1233,4]]},"329":{"position":[[900,6]]},"330":{"position":[[116,6],[666,6]]},"628":{"position":[[341,4]]},"1036":{"position":[[371,4],[666,5],[743,5]]},"1182":{"position":[[229,5]]},"1186":{"position":[[304,6]]},"1191":{"position":[[231,5]]},"1262":{"position":[[231,5]]},"1388":{"position":[[247,5]]},"1389":{"position":[[230,5]]}},"keywords":{}}],["couldn't",{"_index":1542,"title":{},"content":{"107":{"position":[[1943,8]]}},"keywords":{}}],["count",{"_index":747,"title":{},"content":{"42":{"position":[[673,7]]},"66":{"position":[[825,5]]},"121":{"position":[[1681,6]]},"183":{"position":[[2662,6]]},"238":{"position":[[1208,8],[1232,5],[1277,8],[1301,5],[1345,8]]},"729":{"position":[[70,5]]},"747":{"position":[[346,8]]},"1140":{"position":[[3516,5]]},"1316":{"position":[[3516,5]]},"1340":{"position":[[3516,5]]},"1351":{"position":[[3516,5]]},"1379":{"position":[[967,5]]},"1403":{"position":[[967,5]]},"1414":{"position":[[967,5]]},"1431":{"position":[[3539,5]]}},"keywords":{}}],["counter",{"_index":402,"title":{},"content":{"13":{"position":[[882,8],[1444,9]]},"183":{"position":[[3177,7]]},"208":{"position":[[1125,8],[1695,8]]},"308":{"position":[[1181,7]]},"309":{"position":[[1614,9],[3223,8]]},"1440":{"position":[[481,9]]},"1465":{"position":[[413,8]]}},"keywords":{}}],["counterfor",{"_index":5736,"title":{},"content":{"1146":{"position":[[559,10]]},"1173":{"position":[[571,10]]},"1215":{"position":[[559,10]]},"1223":{"position":[[571,10]]}},"keywords":{}}],["counterintuit",{"_index":2193,"title":{},"content":{"197":{"position":[[1234,16]]},"483":{"position":[[594,16]]}},"keywords":{}}],["countri",{"_index":456,"title":{},"content":{"16":{"position":[[235,8],[254,8],[1168,8]]},"17":{"position":[[620,8]]},"385":{"position":[[450,8]]},"1080":{"position":[[740,7],[789,7]]}},"keywords":{}}],["countriesavail",{"_index":5390,"title":{},"content":{"1110":{"position":[[128,18]]}},"keywords":{}}],["countrysearch",{"_index":4297,"title":{},"content":{"605":{"position":[[249,13]]}},"keywords":{}}],["counts.flow.yaml",{"_index":1297,"title":{},"content":{"87":{"position":[[839,16]]}},"keywords":{}}],["countsannotationsaverag",{"_index":3638,"title":{},"content":{"421":{"position":[[85,24]]}},"keywords":{}}],["coupl",{"_index":1630,"title":{},"content":{"115":{"position":[[945,7]]}},"keywords":{}}],["coupon",{"_index":5308,"title":{},"content":{"1078":{"position":[[697,7]]},"1096":{"position":[[83,7]]}},"keywords":{}}],["cours",{"_index":1446,"title":{},"content":{"101":{"position":[[35,6]]}},"keywords":{}}],["covar_pop",{"_index":5673,"title":{},"content":{"1140":{"position":[[3555,9]]},"1316":{"position":[[3555,9]]},"1340":{"position":[[3555,9]]},"1351":{"position":[[3555,9]]},"1379":{"position":[[1013,9]]},"1403":{"position":[[1013,9]]},"1414":{"position":[[1013,9]]},"1431":{"position":[[3578,9]]}},"keywords":{}}],["covar_samp",{"_index":5677,"title":{},"content":{"1140":{"position":[[3599,10]]},"1316":{"position":[[3599,10]]},"1340":{"position":[[3599,10]]},"1351":{"position":[[3599,10]]},"1379":{"position":[[1053,10]]},"1403":{"position":[[1053,10]]},"1414":{"position":[[1053,10]]},"1431":{"position":[[3622,10]]}},"keywords":{}}],["cover",{"_index":76,"title":{},"content":{"2":{"position":[[268,8],[392,5],[418,6],[487,7],[625,8]]},"84":{"position":[[695,7]]},"175":{"position":[[173,7]]},"257":{"position":[[42,5]]},"286":{"position":[[54,5]]}},"keywords":{}}],["coyot",{"_index":1692,"title":{},"content":{"123":{"position":[[769,8]]}},"keywords":{}}],["coyote"",{"_index":1378,"title":{},"content":{"96":{"position":[[369,13],[593,13]]}},"keywords":{}}],["coyote_ord",{"_index":1693,"title":{},"content":{"123":{"position":[[797,13]]}},"keywords":{}}],["cpu",{"_index":4889,"title":{},"content":{"869":{"position":[[1222,3],[1512,5]]},"1292":{"position":[[1524,3]]},"1306":{"position":[[1524,3]]},"1329":{"position":[[1524,3]]}},"keywords":{}}],["cr268+dwwwcdxohu5dnrn8qv/awk7hwp18mlcnyo0skt84zvippe+juqmk4hdqni",{"_index":1246,"title":{},"content":{"83":{"position":[[1767,64]]},"371":{"position":[[686,64]]},"1139":{"position":[[573,64]]}},"keywords":{}}],["crash",{"_index":3200,"title":{},"content":{"331":{"position":[[425,5]]}},"keywords":{}}],["crawl",{"_index":2235,"title":{},"content":{"206":{"position":[[899,5]]}},"keywords":{}}],["crdt",{"_index":6593,"title":{},"content":{"1459":{"position":[[1467,6]]}},"keywords":{}}],["creat",{"_index":66,"title":{"140":{"position":[[0,8]]},"144":{"position":[[0,8]]},"178":{"position":[[0,6]]},"184":{"position":[[0,6]]},"187":{"position":[[0,6]]},"214":{"position":[[0,6]]},"217":{"position":[[0,6]]},"218":{"position":[[0,6]]},"261":{"position":[[13,7]]},"265":{"position":[[0,6]]},"270":{"position":[[0,6]]},"307":{"position":[[3,8]]},"864":{"position":[[0,6]]},"876":{"position":[[0,6]]},"943":{"position":[[3,6]]},"945":{"position":[[3,6]]},"947":{"position":[[0,6]]},"1429":{"position":[[0,8]]}},"content":{"2":{"position":[[49,7]]},"13":{"position":[[388,6],[930,6],[1084,6],[1142,7],[1735,6]]},"16":{"position":[[1348,8]]},"19":{"position":[[22,8]]},"23":{"position":[[43,6]]},"24":{"position":[[254,6]]},"25":{"position":[[195,6]]},"30":{"position":[[54,7],[250,6]]},"31":{"position":[[204,6]]},"33":{"position":[[280,6],[405,6]]},"41":{"position":[[668,7]]},"45":{"position":[[360,6]]},"49":{"position":[[202,7],[401,7]]},"50":{"position":[[112,6]]},"55":{"position":[[814,6]]},"56":{"position":[[651,7],[761,8]]},"63":{"position":[[254,7],[355,6]]},"81":{"position":[[1708,6]]},"82":{"position":[[857,7]]},"91":{"position":[[409,8]]},"94":{"position":[[641,6]]},"100":{"position":[[388,6],[431,6],[785,6]]},"101":{"position":[[472,8],[584,8]]},"105":{"position":[[1262,8]]},"122":{"position":[[219,6],[501,7]]},"135":{"position":[[241,8],[923,6]]},"136":{"position":[[312,6]]},"138":{"position":[[502,6]]},"139":{"position":[[118,6]]},"140":{"position":[[16,6],[52,6],[319,6]]},"143":{"position":[[134,6]]},"144":{"position":[[31,8],[812,6]]},"146":{"position":[[444,8]]},"149":{"position":[[456,8]]},"152":{"position":[[468,8]]},"158":{"position":[[461,6],[542,6]]},"162":{"position":[[1037,6]]},"171":{"position":[[63,6]]},"172":{"position":[[62,6]]},"173":{"position":[[140,6]]},"176":{"position":[[53,6],[103,6]]},"182":{"position":[[546,6]]},"183":{"position":[[507,6],[787,7],[2644,8],[2894,7],[3106,7]]},"189":{"position":[[920,6],[1824,8]]},"191":{"position":[[323,6],[764,6],[799,6],[910,6],[930,6],[1029,6],[1089,6],[1115,6],[1415,6],[1446,6],[1792,6],[2034,6]]},"193":{"position":[[8,7],[550,6],[731,6]]},"204":{"position":[[478,6]]},"205":{"position":[[19,6]]},"208":{"position":[[558,6],[979,8]]},"212":{"position":[[59,6]]},"213":{"position":[[396,6]]},"216":{"position":[[22,6]]},"217":{"position":[[14,6],[88,6],[850,6]]},"218":{"position":[[890,6]]},"219":{"position":[[171,6]]},"221":{"position":[[499,6]]},"222":{"position":[[77,6]]},"223":{"position":[[789,6]]},"224":{"position":[[79,6],[674,6],[769,6],[810,6],[996,6]]},"230":{"position":[[249,7]]},"236":{"position":[[105,6],[1811,6],[1987,6],[2142,6],[2739,6],[2857,6],[2958,6],[3320,6],[3481,6],[3708,6]]},"237":{"position":[[78,7],[277,6],[1031,6],[1291,6],[1753,6],[2540,8]]},"239":{"position":[[158,6]]},"240":{"position":[[322,6],[725,6],[760,6],[871,6],[891,6],[990,6],[1050,6],[1076,6],[1376,6],[1407,6],[1753,6],[1995,6],[2512,6],[3785,7]]},"243":{"position":[[59,6]]},"250":{"position":[[516,6]]},"254":{"position":[[93,6],[149,6]]},"257":{"position":[[145,6]]},"263":{"position":[[519,7]]},"266":{"position":[[161,6],[255,6]]},"267":{"position":[[875,6],[1151,7]]},"268":{"position":[[516,8],[1961,7]]},"269":{"position":[[1423,7]]},"270":{"position":[[1,8],[2039,7]]},"277":{"position":[[232,6]]},"278":{"position":[[517,6],[762,6],[989,6]]},"279":{"position":[[1252,6],[1381,6]]},"280":{"position":[[1502,6]]},"281":{"position":[[247,6]]},"286":{"position":[[273,6]]},"288":{"position":[[278,6],[461,6],[786,6]]},"289":{"position":[[22,6]]},"290":{"position":[[14,6],[658,6],[1072,7]]},"292":{"position":[[294,6]]},"295":{"position":[[1004,6],[1075,6]]},"296":{"position":[[93,6],[149,6],[3790,6],[7163,6],[7300,6],[7430,7],[7644,7]]},"299":{"position":[[701,6]]},"300":{"position":[[22,6]]},"301":{"position":[[14,6],[598,6]]},"303":{"position":[[285,6]]},"307":{"position":[[152,8],[260,8],[351,6],[576,6],[650,6],[816,6],[2982,8]]},"309":{"position":[[1649,6],[3476,6]]},"314":{"position":[[93,6],[149,6]]},"321":{"position":[[419,6],[679,6],[899,6]]},"322":{"position":[[750,8]]},"326":{"position":[[844,7]]},"363":{"position":[[22,7]]},"364":{"position":[[420,7]]},"366":{"position":[[277,7],[400,6],[638,7],[667,7],[970,7],[999,7]]},"367":{"position":[[233,6],[347,6],[582,6],[743,6],[824,6]]},"387":{"position":[[368,8]]},"406":{"position":[[57,6]]},"414":{"position":[[118,6]]},"415":{"position":[[214,6],[380,6]]},"427":{"position":[[194,8]]},"436":{"position":[[456,6],[932,8]]},"452":{"position":[[127,8]]},"472":{"position":[[276,6],[326,8]]},"475":{"position":[[359,6]]},"477":{"position":[[313,6],[593,8],[669,8],[976,8]]},"478":{"position":[[218,8],[287,6],[363,6],[451,8],[494,6]]},"483":{"position":[[393,6],[628,6]]},"485":{"position":[[378,6]]},"487":{"position":[[462,7]]},"509":{"position":[[399,7]]},"515":{"position":[[447,6]]},"558":{"position":[[9,6]]},"571":{"position":[[557,6]]},"582":{"position":[[168,6]]},"591":{"position":[[148,6]]},"597":{"position":[[322,6]]},"598":{"position":[[176,6],[277,6],[557,8],[633,8],[938,8]]},"599":{"position":[[218,8],[287,6],[363,6],[451,8],[494,6]]},"602":{"position":[[242,7],[328,7]]},"606":{"position":[[71,7]]},"609":{"position":[[179,6]]},"617":{"position":[[479,6]]},"645":{"position":[[116,6],[276,6]]},"652":{"position":[[116,6],[276,6]]},"657":{"position":[[378,6]]},"673":{"position":[[378,6]]},"688":{"position":[[378,6]]},"690":{"position":[[111,6]]},"710":{"position":[[20,6]]},"716":{"position":[[112,8]]},"718":{"position":[[50,6],[146,6]]},"725":{"position":[[60,6]]},"726":{"position":[[1,6],[31,6],[394,6],[478,6]]},"752":{"position":[[48,6],[198,6],[234,6],[323,6],[624,6]]},"753":{"position":[[189,6],[752,6],[854,6],[890,6],[979,6],[1280,6]]},"767":{"position":[[189,6],[305,6],[798,6],[861,6],[887,6],[1322,6],[1396,6],[1535,7],[1736,6],[1834,6],[1870,6],[1957,6]]},"791":{"position":[[1,6],[151,6],[187,6],[276,6],[577,6]]},"792":{"position":[[320,8],[509,6],[618,6],[1077,6],[1155,6],[1181,6],[1676,6],[1774,6],[1810,6],[1897,6]]},"793":{"position":[[134,8],[182,6],[723,6],[825,6],[861,6],[950,6],[1251,6]]},"794":{"position":[[631,6]]},"808":{"position":[[134,8],[741,6],[771,6],[807,6],[896,6],[1197,6]]},"809":{"position":[[631,6]]},"824":{"position":[[134,8],[301,6],[410,6],[869,6],[930,6],[956,6],[1388,6],[1462,6],[1599,7],[1798,6],[1896,6],[1932,6],[2019,6]]},"840":{"position":[[1,6],[28,6],[421,6],[1848,7],[2228,9]]},"842":{"position":[[239,8]]},"849":{"position":[[892,6],[2896,7],[3161,7],[3368,9]]},"855":{"position":[[73,7],[115,6]]},"856":{"position":[[34,6]]},"857":{"position":[[34,6]]},"864":{"position":[[1,8],[121,6],[189,6],[267,6],[788,6],[816,6]]},"876":{"position":[[1,8],[121,6],[189,6],[267,6]]},"903":{"position":[[303,7],[426,6],[664,7],[693,7],[996,7],[1025,7]]},"904":{"position":[[134,8],[301,6],[928,6],[954,6],[1337,6],[1451,6],[1682,6],[1843,6]]},"909":{"position":[[825,6]]},"911":{"position":[[144,6],[247,6],[366,8]]},"915":{"position":[[303,7],[426,6],[664,7],[693,7],[996,7],[1025,7]]},"917":{"position":[[161,6],[280,6],[313,6],[1119,6],[1170,6],[1191,6],[1352,6]]},"918":{"position":[[320,8],[509,6],[618,6],[1131,6],[1157,6],[1629,6],[1743,6],[1974,6],[2135,6]]},"919":{"position":[[134,8],[182,6],[811,6],[876,6],[2029,6],[2190,6]]},"925":{"position":[[825,6]]},"927":{"position":[[144,6],[247,6],[366,8]]},"930":{"position":[[303,7],[426,6],[664,7],[693,7],[996,7],[1025,7]]},"931":{"position":[[134,8],[994,6],[1108,6],[1344,6],[1505,6]]},"936":{"position":[[825,6]]},"938":{"position":[[144,6],[247,6],[366,8]]},"943":{"position":[[28,6],[155,7],[196,7],[341,6],[472,6],[558,7],[578,7],[666,7],[773,6],[832,7]]},"945":{"position":[[1,6],[125,6],[574,6],[686,6]]},"952":{"position":[[825,6]]},"954":{"position":[[144,6],[247,6],[366,8]]},"963":{"position":[[457,7],[580,6],[818,7],[847,7],[1150,7],[1179,7]]},"965":{"position":[[161,6],[280,6],[313,6],[1119,6],[1170,6],[1191,6],[1352,6]]},"970":{"position":[[825,6]]},"972":{"position":[[144,6],[247,6],[366,8]]},"977":{"position":[[59,6]]},"985":{"position":[[511,6]]},"987":{"position":[[265,8]]},"989":{"position":[[1,6],[38,8],[183,6],[381,6],[430,8],[526,6],[663,6],[795,6]]},"1000":{"position":[[689,6]]},"1002":{"position":[[265,8]]},"1004":{"position":[[1,6],[38,8],[266,6],[464,6],[513,8],[609,6],[746,6],[878,6]]},"1008":{"position":[[83,6],[181,6],[237,6],[1571,7]]},"1031":{"position":[[512,6]]},"1032":{"position":[[629,6],[664,6],[772,6],[994,6],[1048,6],[1381,6],[1411,6]]},"1034":{"position":[[816,6]]},"1040":{"position":[[286,8],[402,7],[806,7]]},"1042":{"position":[[142,6],[195,6],[247,6],[626,6],[677,6]]},"1043":{"position":[[134,8],[182,6],[806,6],[859,6],[911,6],[1290,6],[1341,6]]},"1050":{"position":[[286,8],[402,7],[806,7]]},"1051":{"position":[[134,8],[301,6],[1068,6],[1121,6],[1173,6],[1552,6],[1603,6]]},"1058":{"position":[[286,8],[402,7],[806,7]]},"1059":{"position":[[134,8],[857,6],[910,6],[966,6],[1345,6],[1396,6]]},"1067":{"position":[[44,6],[545,8],[661,8]]},"1077":{"position":[[223,8]]},"1083":{"position":[[195,7]]},"1105":{"position":[[111,8]]},"1118":{"position":[[109,6],[248,6],[1052,6]]},"1136":{"position":[[124,6],[189,7],[378,6]]},"1138":{"position":[[1378,6],[1456,7],[1762,7],[1824,7]]},"1140":{"position":[[3636,6]]},"1149":{"position":[[253,6],[318,7]]},"1156":{"position":[[213,8],[360,7]]},"1157":{"position":[[201,6]]},"1164":{"position":[[136,7]]},"1176":{"position":[[400,7],[583,6]]},"1177":{"position":[[105,6],[408,6]]},"1183":{"position":[[26,7],[107,7],[337,8],[835,6],[1343,6]]},"1185":{"position":[[383,6]]},"1186":{"position":[[19,6],[167,8],[741,6]]},"1192":{"position":[[283,7],[352,8]]},"1194":{"position":[[286,8],[352,8],[593,6]]},"1195":{"position":[[378,6]]},"1196":{"position":[[773,6],[1150,6]]},"1200":{"position":[[70,7],[400,7]]},"1201":{"position":[[172,7],[345,7],[452,8]]},"1203":{"position":[[117,8],[754,6]]},"1204":{"position":[[183,6],[470,7],[495,8]]},"1209":{"position":[[473,6]]},"1211":{"position":[[214,7]]},"1218":{"position":[[214,7]]},"1226":{"position":[[394,6]]},"1228":{"position":[[346,8]]},"1230":{"position":[[694,6],[879,6],[912,6],[947,8],[975,7],[1170,8]]},"1243":{"position":[[171,6]]},"1245":{"position":[[431,6]]},"1274":{"position":[[162,7]]},"1275":{"position":[[21,7]]},"1281":{"position":[[163,6],[261,6]]},"1283":{"position":[[145,8],[218,6]]},"1286":{"position":[[688,6],[2597,7],[2659,7]]},"1289":{"position":[[145,8],[292,6],[492,6]]},"1292":{"position":[[1553,6]]},"1293":{"position":[[172,7]]},"1295":{"position":[[163,6],[261,6]]},"1298":{"position":[[789,6]]},"1301":{"position":[[2433,7],[2495,7]]},"1303":{"position":[[134,8],[1259,6],[1365,6],[1417,6]]},"1306":{"position":[[1553,6]]},"1307":{"position":[[172,7]]},"1309":{"position":[[124,6],[189,7]]},"1311":{"position":[[54,6]]},"1313":{"position":[[922,6],[1000,7],[1306,7],[1368,7]]},"1316":{"position":[[3636,6]]},"1317":{"position":[[172,7],[453,7]]},"1319":{"position":[[163,6],[261,6]]},"1320":{"position":[[145,8]]},"1321":{"position":[[72,6],[272,6]]},"1322":{"position":[[77,6]]},"1325":{"position":[[688,6],[2597,7],[2659,7]]},"1329":{"position":[[1553,6]]},"1330":{"position":[[172,7]]},"1332":{"position":[[124,6],[189,7]]},"1333":{"position":[[145,8]]},"1334":{"position":[[72,6],[360,6]]},"1335":{"position":[[77,6]]},"1337":{"position":[[922,6],[1000,7],[1306,7],[1368,7]]},"1340":{"position":[[3636,6]]},"1341":{"position":[[172,7],[453,7]]},"1343":{"position":[[124,6],[189,7]]},"1344":{"position":[[145,8]]},"1346":{"position":[[789,6]]},"1348":{"position":[[922,6],[1000,7],[1306,7],[1368,7]]},"1351":{"position":[[3636,6]]},"1352":{"position":[[172,7],[453,7]]},"1354":{"position":[[171,7],[255,7],[418,6]]},"1356":{"position":[[1383,7],[1493,7]]},"1359":{"position":[[172,7]]},"1367":{"position":[[114,7],[176,7]]},"1370":{"position":[[678,6]]},"1372":{"position":[[163,6],[261,6]]},"1373":{"position":[[134,8],[301,6],[985,6],[1038,6],[1094,6]]},"1374":{"position":[[134,8],[301,6],[985,6],[1038,6],[1098,6]]},"1376":{"position":[[512,7],[574,7]]},"1379":{"position":[[1105,6]]},"1380":{"position":[[172,7]]},"1382":{"position":[[637,6]]},"1383":{"position":[[338,6],[712,6],[747,6],[858,6],[878,6],[977,6],[1037,6],[1063,6],[1363,6],[1394,6],[1740,6],[1982,6]]},"1393":{"position":[[267,7]]},"1394":{"position":[[280,7],[349,8],[765,6]]},"1396":{"position":[[163,6],[261,6]]},"1397":{"position":[[134,8],[764,6],[817,6],[873,6]]},"1398":{"position":[[134,8],[763,6],[816,6],[876,6]]},"1400":{"position":[[512,7],[574,7]]},"1403":{"position":[[1105,6]]},"1404":{"position":[[172,7]]},"1406":{"position":[[163,6],[261,6]]},"1408":{"position":[[83,6],[136,6],[192,6]]},"1409":{"position":[[134,8],[182,6],[747,6],[800,6],[856,6]]},"1411":{"position":[[512,7],[574,7]]},"1414":{"position":[[1105,6]]},"1415":{"position":[[172,7]]},"1417":{"position":[[69,6],[378,7]]},"1423":{"position":[[290,7],[359,8]]},"1426":{"position":[[268,6],[333,7]]},"1427":{"position":[[649,6],[727,7],[757,8],[1066,7],[1128,7]]},"1431":{"position":[[3659,6]]},"1432":{"position":[[172,7],[453,7]]},"1449":{"position":[[78,6],[551,7]]},"1461":{"position":[[2530,8]]},"1475":{"position":[[1996,7]]},"1479":{"position":[[72,6]]}},"keywords":{}}],["create/insert",{"_index":2295,"title":{},"content":{"210":{"position":[[1178,13]]}},"keywords":{}}],["create_default_subscript",{"_index":5895,"title":{},"content":{"1231":{"position":[[258,28]]}},"keywords":{}}],["create_hypertable('my_time_seri",{"_index":6426,"title":{},"content":{"1429":{"position":[[829,35]]}},"keywords":{}}],["create_hypertable('t",{"_index":6422,"title":{},"content":{"1429":{"position":[[353,26]]}},"keywords":{}}],["create_index",{"_index":5824,"title":{},"content":{"1194":{"position":[[333,13]]}},"keywords":{}}],["created_at",{"_index":1179,"title":{},"content":{"82":{"position":[[2545,11],[4686,11]]},"1134":{"position":[[539,10],[2111,10],[2226,10]]}},"keywords":{}}],["creation",{"_index":2545,"title":{},"content":{"236":{"position":[[2032,8]]},"296":{"position":[[7229,8]]},"595":{"position":[[1027,9]]},"724":{"position":[[531,8]]},"943":{"position":[[515,8]]},"985":{"position":[[616,8]]},"1000":{"position":[[930,8]]},"1047":{"position":[[330,8]]},"1055":{"position":[[330,8]]},"1063":{"position":[[330,8]]},"1076":{"position":[[566,9]]},"1177":{"position":[[146,9]]}},"keywords":{}}],["creativ",{"_index":3962,"title":{},"content":{"517":{"position":[[2909,9]]},"715":{"position":[[177,8]]}},"keywords":{}}],["creativesad",{"_index":3928,"title":{},"content":{"512":{"position":[[65,11]]}},"keywords":{}}],["credenti",{"_index":1133,"title":{"201":{"position":[[0,12]]}},"content":{"81":{"position":[[2285,11],[2920,11]]},"82":{"position":[[31,11],[100,11],[166,10],[318,12],[703,10],[1028,11],[1577,11],[3790,12]]},"201":{"position":[[22,11],[102,11]]},"217":{"position":[[257,11]]},"259":{"position":[[456,11],[2150,11]]},"290":{"position":[[234,11],[1030,12]]},"299":{"position":[[487,12]]},"301":{"position":[[187,11]]},"383":{"position":[[129,11]]},"384":{"position":[[66,11],[206,12]]},"387":{"position":[[386,11]]},"388":{"position":[[182,12]]},"390":{"position":[[656,12]]},"392":{"position":[[110,11],[276,11]]},"395":{"position":[[835,12]]},"400":{"position":[[45,11]]},"415":{"position":[[367,12]]},"417":{"position":[[754,11],[945,11]]},"432":{"position":[[367,12],[380,11]]},"433":{"position":[[208,12],[619,12]]},"438":{"position":[[553,12],[566,11],[584,11]]},"439":{"position":[[155,12]]},"445":{"position":[[20,11]]},"446":{"position":[[68,11]]},"448":{"position":[[253,11],[817,11],[1040,11]]},"449":{"position":[[180,12]]},"473":{"position":[[182,12],[210,11]]},"477":{"position":[[38,11]]},"482":{"position":[[271,11]]},"502":{"position":[[391,12],[404,11],[423,11]]},"527":{"position":[[178,12],[209,11]]},"534":{"position":[[460,12],[600,11]]},"535":{"position":[[178,12],[209,11]]},"543":{"position":[[371,11]]},"545":{"position":[[721,11]]},"548":{"position":[[440,12],[518,11],[598,11],[739,12],[1128,11]]},"551":{"position":[[131,12]]},"556":{"position":[[521,12],[541,11]]},"557":{"position":[[208,12]]},"564":{"position":[[73,11],[121,11]]},"566":{"position":[[114,12]]},"571":{"position":[[747,11]]},"573":{"position":[[257,11],[269,11],[501,11]]},"575":{"position":[[219,12]]},"582":{"position":[[360,11]]},"584":{"position":[[245,11],[257,11],[432,11]]},"586":{"position":[[183,12]]},"593":{"position":[[79,11],[125,12]]},"598":{"position":[[37,11]]},"601":{"position":[[227,11]]},"608":{"position":[[22,11],[158,11]]},"609":{"position":[[304,11]]},"612":{"position":[[193,12]]},"617":{"position":[[671,11]]},"619":{"position":[[154,11],[177,11],[406,11]]},"620":{"position":[[115,12]]},"635":{"position":[[453,11]]},"637":{"position":[[73,11],[90,12]]},"646":{"position":[[615,11],[639,11]]},"647":{"position":[[147,11]]},"654":{"position":[[336,11],[360,11]]},"655":{"position":[[109,12],[153,11]]},"720":{"position":[[421,12]]},"721":{"position":[[221,12]]},"736":{"position":[[111,12]]},"748":{"position":[[111,12]]},"780":{"position":[[15,11]]},"842":{"position":[[485,11]]},"860":{"position":[[178,12]]},"879":{"position":[[256,12],[269,11],[281,11],[434,11]]},"880":{"position":[[232,12]]},"892":{"position":[[107,12]]},"987":{"position":[[239,12]]},"988":{"position":[[132,12]]},"991":{"position":[[168,12]]},"992":{"position":[[117,12]]},"1002":{"position":[[239,12]]},"1003":{"position":[[132,12]]},"1009":{"position":[[168,12]]},"1010":{"position":[[182,12]]},"1016":{"position":[[108,12]]},"1070":{"position":[[253,11],[265,11]]},"1071":{"position":[[184,12]]},"1086":{"position":[[200,12]]},"1102":{"position":[[120,12]]},"1108":{"position":[[114,12],[156,12]]},"1122":{"position":[[461,12]]},"1133":{"position":[[85,11],[112,11]]},"1134":{"position":[[117,12],[156,12]]},"1136":{"position":[[92,12]]},"1142":{"position":[[312,12]]},"1149":{"position":[[759,12]]},"1160":{"position":[[475,12]]},"1168":{"position":[[312,12]]},"1179":{"position":[[220,11]]},"1188":{"position":[[450,12],[463,11],[490,11]]},"1189":{"position":[[207,12]]},"1196":{"position":[[254,12],[582,12]]},"1197":{"position":[[271,12]]},"1204":{"position":[[531,11],[680,12]]},"1213":{"position":[[176,11]]},"1220":{"position":[[176,11]]},"1230":{"position":[[88,11]]},"1231":{"position":[[141,12]]},"1247":{"position":[[259,11]]},"1248":{"position":[[141,12]]},"1251":{"position":[[15,11]]},"1258":{"position":[[353,12]]},"1281":{"position":[[89,12],[229,11]]},"1295":{"position":[[89,12],[229,11]]},"1309":{"position":[[92,12]]},"1319":{"position":[[89,12],[229,11]]},"1332":{"position":[[92,12]]},"1343":{"position":[[92,12]]},"1361":{"position":[[117,11]]},"1363":{"position":[[128,12]]},"1372":{"position":[[93,12],[229,11]]},"1386":{"position":[[692,12],[705,11],[717,11]]},"1387":{"position":[[230,12],[784,12]]},"1396":{"position":[[93,12],[229,11]]},"1406":{"position":[[93,12],[229,11]]},"1425":{"position":[[101,12]]},"1447":{"position":[[300,10],[500,10],[615,11],[699,12]]}},"keywords":{}}],["credentials"",{"_index":4379,"title":{},"content":{"646":{"position":[[690,17]]},"654":{"position":[[411,17]]}},"keywords":{}}],["credentials.at",{"_index":5927,"title":{},"content":{"1264":{"position":[[119,14]]}},"keywords":{}}],["credentials.properli",{"_index":4134,"title":{},"content":{"562":{"position":[[102,20]]}},"keywords":{}}],["credentials/access_token",{"_index":4376,"title":{},"content":{"646":{"position":[[507,25]]},"654":{"position":[[228,25]]},"720":{"position":[[556,25]]},"1070":{"position":[[309,25]]},"1085":{"position":[[609,25]]},"1133":{"position":[[631,25]]}},"keywords":{}}],["credentials/advertiser_id",{"_index":5339,"title":{},"content":{"1085":{"position":[[492,26]]}},"keywords":{}}],["credentials/api_token",{"_index":5465,"title":{},"content":{"1133":{"position":[[176,22]]}},"keywords":{}}],["credentials/apikey",{"_index":4538,"title":{},"content":{"735":{"position":[[300,19]]},"1196":{"position":[[469,19]]}},"keywords":{}}],["credentials/auth_method",{"_index":3739,"title":{},"content":{"448":{"position":[[281,24]]},"720":{"position":[[456,24]]}},"keywords":{}}],["credentials/auth_typ",{"_index":3482,"title":{},"content":{"387":{"position":[[269,22]]},"432":{"position":[[484,22]]},"573":{"position":[[304,22]]},"584":{"position":[[292,22]]},"611":{"position":[[284,22]]},"619":{"position":[[259,22]]},"735":{"position":[[205,22]]},"859":{"position":[[319,22]]},"1009":{"position":[[279,22]]},"1085":{"position":[[369,22]]},"1188":{"position":[[509,22]]},"1230":{"position":[[188,22]]},"1247":{"position":[[359,22]]},"1386":{"position":[[764,22]]}},"keywords":{}}],["credentials/aws_access_key_id",{"_index":3680,"title":{},"content":{"432":{"position":[[919,30]]}},"keywords":{}}],["credentials/aws_secret_access_key",{"_index":3681,"title":{},"content":{"432":{"position":[[1006,34]]}},"keywords":{}}],["credentials/azureclientid",{"_index":3706,"title":{},"content":{"438":{"position":[[763,26]]}},"keywords":{}}],["credentials/azureclientsecret",{"_index":3707,"title":{},"content":{"438":{"position":[[898,30]]}},"keywords":{}}],["credentials/azuresubscriptionid",{"_index":3709,"title":{},"content":{"438":{"position":[[1196,32]]}},"keywords":{}}],["credentials/azuretenantid",{"_index":3708,"title":{},"content":{"438":{"position":[[1045,26]]}},"keywords":{}}],["credentials/client_id",{"_index":3485,"title":{},"content":{"387":{"position":[[457,22]]},"448":{"position":[[360,22]]},"556":{"position":[[569,22]]},"991":{"position":[[279,22]]},"1009":{"position":[[342,22]]},"1070":{"position":[[412,22]]},"1133":{"position":[[403,22]]}},"keywords":{}}],["credentials/client_secret",{"_index":3486,"title":{},"content":{"387":{"position":[[562,26]]},"448":{"position":[[476,26]]},"556":{"position":[[674,26]]},"991":{"position":[[416,26]]},"1009":{"position":[[479,26]]},"1070":{"position":[[518,26]]},"1133":{"position":[[511,26]]}},"keywords":{}}],["credentials/connectionstr",{"_index":3710,"title":{},"content":{"438":{"position":[[1362,29]]}},"keywords":{}}],["credentials/credentials_json",{"_index":4154,"title":{},"content":{"573":{"position":[[456,28]]},"584":{"position":[[386,29]]},"1230":{"position":[[309,29]]},"1247":{"position":[[480,29]]}},"keywords":{}}],["credentials/credentials_titl",{"_index":4377,"title":{},"content":{"646":{"position":[[584,30]]},"654":{"position":[[305,30]]},"879":{"position":[[403,30]]}},"keywords":{}}],["credentials/developer_token",{"_index":4116,"title":{},"content":{"556":{"position":[[791,28]]}},"keywords":{}}],["credentials/email",{"_index":4307,"title":{},"content":{"611":{"position":[[514,18]]},"1133":{"position":[[292,18]]}},"keywords":{}}],["credentials/ewallet",{"_index":4912,"title":{},"content":{"879":{"position":[[828,20]]}},"keywords":{}}],["credentials/mechan",{"_index":3676,"title":{},"content":{"432":{"position":[[593,22]]}},"keywords":{}}],["credentials/option_titl",{"_index":4043,"title":{},"content":{"534":{"position":[[541,25]]}},"keywords":{}}],["credentials/password",{"_index":3677,"title":{},"content":{"432":{"position":[[713,21]]},"637":{"position":[[158,21]]},"879":{"position":[[661,21]]},"1196":{"position":[[376,21]]},"1386":{"position":[[909,21]]}},"keywords":{}}],["credentials/personal_access_token",{"_index":4044,"title":{},"content":{"534":{"position":[[645,34]]},"1188":{"position":[[611,34]]}},"keywords":{}}],["credentials/privatekey",{"_index":6390,"title":{},"content":{"1386":{"position":[[1003,23]]}},"keywords":{}}],["credentials/refresh_token",{"_index":3487,"title":{},"content":{"387":{"position":[[679,26]]},"448":{"position":[[604,26]]},"556":{"position":[[905,26]]},"991":{"position":[[568,26]]},"1009":{"position":[[631,26]]}},"keywords":{}}],["credentials/region",{"_index":3682,"title":{},"content":{"432":{"position":[[1101,19]]}},"keywords":{}}],["credentials/service_account_info",{"_index":4306,"title":{},"content":{"611":{"position":[[384,33]]},"619":{"position":[[357,32]]}},"keywords":{}}],["credentials/storageaccountnam",{"_index":3705,"title":{},"content":{"438":{"position":[[649,31]]}},"keywords":{}}],["credentials/tnsnam",{"_index":4909,"title":{},"content":{"879":{"position":[[751,21]]}},"keywords":{}}],["credentials/token",{"_index":4841,"title":{},"content":{"859":{"position":[[417,18]]}},"keywords":{}}],["credentials/us",{"_index":4363,"title":{},"content":{"637":{"position":[[247,17]]},"1386":{"position":[[851,17]]}},"keywords":{}}],["credentials/usernam",{"_index":3679,"title":{},"content":{"432":{"position":[[816,21]]},"879":{"position":[[563,21]]},"1196":{"position":[[283,21]]}},"keywords":{}}],["credentials/wallet_password",{"_index":4915,"title":{},"content":{"879":{"position":[[902,28]]}},"keywords":{}}],["credentials_json",{"_index":3846,"title":{},"content":{"482":{"position":[[253,17]]},"575":{"position":[[251,17]]},"586":{"position":[[215,17]]},"1179":{"position":[[172,17]]},"1180":{"position":[[191,17]]},"1231":{"position":[[173,17]]},"1248":{"position":[[173,17]]}},"keywords":{}}],["credentials_titl",{"_index":4380,"title":{},"content":{"647":{"position":[[116,18]]},"655":{"position":[[122,18]]},"880":{"position":[[245,18]]}},"keywords":{}}],["credentialsjson",{"_index":4288,"title":{},"content":{"601":{"position":[[155,16]]},"1213":{"position":[[129,16]]},"1214":{"position":[[145,16]]},"1220":{"position":[[129,16]]},"1221":{"position":[[149,16]]}},"keywords":{}}],["credit",{"_index":1521,"title":{},"content":{"107":{"position":[[695,6]]},"240":{"position":[[3678,7]]},"280":{"position":[[527,8],[605,8],[1860,6]]},"281":{"position":[[1564,6]]},"940":{"position":[[41,6]]}},"keywords":{}}],["creditrecipi",{"_index":2875,"title":{},"content":{"280":{"position":[[1768,15]]}},"keywords":{}}],["criteria",{"_index":3054,"title":{},"content":{"308":{"position":[[437,8]]},"1009":{"position":[[1113,9],[1130,8],[1148,8]]},"1010":{"position":[[352,9]]},"1479":{"position":[[655,8]]}},"keywords":{}}],["criterion",{"_index":5172,"title":{},"content":{"1009":{"position":[[1463,9]]}},"keywords":{}}],["critic",{"_index":234,"title":{},"content":{"7":{"position":[[261,8]]},"41":{"position":[[140,8]]}},"keywords":{}}],["crlf",{"_index":3630,"title":{},"content":{"419":{"position":[[2540,4]]},"441":{"position":[[1149,4]]},"504":{"position":[[2169,4]]},"547":{"position":[[2542,4]]},"639":{"position":[[2167,4]]},"1023":{"position":[[2523,4]]}},"keywords":{}}],["cross",{"_index":1270,"title":{},"content":{"84":{"position":[[844,5]]},"1140":{"position":[[3670,5]]},"1192":{"position":[[598,5]]},"1209":{"position":[[488,5]]},"1292":{"position":[[1605,5]]},"1306":{"position":[[1605,5]]},"1316":{"position":[[3670,5]]},"1329":{"position":[[1605,5]]},"1340":{"position":[[3670,5]]},"1351":{"position":[[3670,5]]},"1370":{"position":[[690,5]]},"1379":{"position":[[1150,5]]},"1394":{"position":[[782,5]]},"1403":{"position":[[1150,5]]},"1414":{"position":[[1150,5]]},"1431":{"position":[[3693,5]]},"1461":{"position":[[4225,5],[4385,5]]}},"keywords":{}}],["crucial",{"_index":3212,"title":{},"content":{"333":{"position":[[400,7]]},"1439":{"position":[[1211,7]]}},"keywords":{}}],["csv",{"_index":2105,"title":{"441":{"position":[[0,3]]},"1141":{"position":[[0,3]]},"1210":{"position":[[0,3]]}},"content":{"189":{"position":[[120,3],[285,3]]},"192":{"position":[[1607,3]]},"193":{"position":[[64,3]]},"418":{"position":[[173,3]]},"419":{"position":[[1372,3],[1392,3],[2264,3],[2404,3]]},"439":{"position":[[430,3]]},"441":{"position":[[1,3],[873,3],[1013,3]]},"499":{"position":[[421,4]]},"504":{"position":[[1001,3],[1021,3],[1893,3],[2033,3]]},"546":{"position":[[910,3]]},"547":{"position":[[1374,3],[1394,3],[2266,3],[2406,3]]},"562":{"position":[[230,4]]},"634":{"position":[[413,4]]},"638":{"position":[[202,3]]},"639":{"position":[[999,3],[1019,3],[1891,3],[2031,3]]},"1022":{"position":[[239,3]]},"1023":{"position":[[1355,3],[1375,3],[2247,3],[2387,3]]},"1120":{"position":[[639,3],[719,3]]}},"keywords":{}}],["csv:dev",{"_index":5417,"title":{},"content":{"1120":{"position":[[711,7],[789,7]]}},"keywords":{}}],["csv:dev"",{"_index":5726,"title":{},"content":{"1145":{"position":[[107,13]]},"1214":{"position":[[108,13]]}},"keywords":{}}],["csvconfig/delimit",{"_index":5722,"title":{},"content":{"1144":{"position":[[874,20]]},"1213":{"position":[[551,20]]}},"keywords":{}}],["csvconfig/nullstr",{"_index":5723,"title":{},"content":{"1144":{"position":[[1039,21]]},"1213":{"position":[[716,21]]}},"keywords":{}}],["csvconfig/skiphead",{"_index":5724,"title":{},"content":{"1144":{"position":[[1159,22]]},"1213":{"position":[[836,22]]}},"keywords":{}}],["ctrl",{"_index":2087,"title":{},"content":{"183":{"position":[[4426,4]]}},"keywords":{}}],["cube",{"_index":5683,"title":{},"content":{"1140":{"position":[[3708,4]]},"1292":{"position":[[1638,4]]},"1306":{"position":[[1638,4]]},"1316":{"position":[[3708,4]]},"1329":{"position":[[1638,4]]},"1340":{"position":[[3708,4]]},"1351":{"position":[[3708,4]]},"1379":{"position":[[1188,4]]},"1403":{"position":[[1188,4]]},"1414":{"position":[[1188,4]]},"1423":{"position":[[486,4]]},"1431":{"position":[[3731,4]]}},"keywords":{}}],["cumbersom",{"_index":1195,"title":{},"content":{"82":{"position":[[3542,10]]}},"keywords":{}}],["cume_dist",{"_index":5687,"title":{},"content":{"1140":{"position":[[3751,9]]},"1292":{"position":[[1675,9]]},"1306":{"position":[[1675,9]]},"1316":{"position":[[3751,9]]},"1329":{"position":[[1675,9]]},"1340":{"position":[[3751,9]]},"1351":{"position":[[3751,9]]},"1379":{"position":[[1236,9]]},"1403":{"position":[[1236,9]]},"1414":{"position":[[1236,9]]},"1431":{"position":[[3774,9]]}},"keywords":{}}],["cumul",{"_index":3112,"title":{},"content":{"319":{"position":[[1567,10]]}},"keywords":{}}],["curl",{"_index":879,"title":{},"content":{"58":{"position":[[328,4],[504,4]]},"169":{"position":[[569,4],[748,4]]},"486":{"position":[[251,4]]},"635":{"position":[[276,4]]},"658":{"position":[[251,4]]},"674":{"position":[[251,4]]},"689":{"position":[[251,4]]},"943":{"position":[[929,4]]}},"keywords":{}}],["currenc",{"_index":3892,"title":{},"content":{"494":{"position":[[209,9]]},"496":{"position":[[158,8],[181,9],[247,8],[280,8]]}},"keywords":{}}],["current",{"_index":704,"title":{"281":{"position":[[0,7]]}},"content":{"38":{"position":[[468,9]]},"60":{"position":[[433,7],[490,7]]},"63":{"position":[[1144,7]]},"68":{"position":[[1275,9]]},"82":{"position":[[810,7]]},"87":{"position":[[139,7]]},"103":{"position":[[803,7]]},"114":{"position":[[653,7]]},"115":{"position":[[170,7]]},"129":{"position":[[30,7]]},"154":{"position":[[1824,9]]},"161":{"position":[[130,7],[1218,7]]},"165":{"position":[[1382,7],[1497,7]]},"169":{"position":[[1030,9]]},"207":{"position":[[1282,7]]},"237":{"position":[[3036,7]]},"259":{"position":[[448,7],[2142,7]]},"263":{"position":[[15,9]]},"270":{"position":[[843,7]]},"274":{"position":[[1596,7]]},"280":{"position":[[423,7]]},"281":{"position":[[185,7],[326,7],[1788,7],[1877,7]]},"290":{"position":[[1736,9]]},"296":{"position":[[3821,7]]},"301":{"position":[[1710,9]]},"323":{"position":[[1732,9]]},"331":{"position":[[48,7]]},"339":{"position":[[230,9]]},"341":{"position":[[164,9]]},"343":{"position":[[133,9]]},"345":{"position":[[13,7]]},"355":{"position":[[17,9]]},"364":{"position":[[405,9]]},"368":{"position":[[126,7]]},"406":{"position":[[187,9]]},"429":{"position":[[1327,9]]},"603":{"position":[[1,9]]},"755":{"position":[[126,7]]},"760":{"position":[[190,9],[548,9],[685,9]]},"762":{"position":[[140,11]]},"764":{"position":[[739,7]]},"768":{"position":[[126,7]]},"773":{"position":[[190,9],[548,9],[685,9]]},"775":{"position":[[140,11]]},"777":{"position":[[739,7]]},"795":{"position":[[124,7]]},"800":{"position":[[190,9],[548,9],[685,9]]},"802":{"position":[[140,11]]},"804":{"position":[[737,7]]},"810":{"position":[[124,7]]},"815":{"position":[[190,9],[548,9],[685,9]]},"817":{"position":[[140,11]]},"819":{"position":[[737,7]]},"826":{"position":[[124,7]]},"831":{"position":[[190,9],[548,9],[685,9]]},"833":{"position":[[140,11]]},"835":{"position":[[737,7]]},"869":{"position":[[527,9]]},"891":{"position":[[303,7]]},"905":{"position":[[129,7]]},"920":{"position":[[129,7]]},"932":{"position":[[129,7]]},"948":{"position":[[129,7]]},"966":{"position":[[129,7]]},"1077":{"position":[[731,7]]},"1085":{"position":[[962,7]]},"1140":{"position":[[3795,7]]},"1146":{"position":[[542,7]]},"1162":{"position":[[1030,9]]},"1164":{"position":[[761,9]]},"1173":{"position":[[554,7]]},"1215":{"position":[[542,7]]},"1223":{"position":[[554,7]]},"1282":{"position":[[273,9]]},"1288":{"position":[[247,9]]},"1292":{"position":[[1712,7]]},"1306":{"position":[[1712,7]]},"1310":{"position":[[288,9]]},"1316":{"position":[[3795,7]]},"1329":{"position":[[1712,7]]},"1340":{"position":[[3795,7]]},"1351":{"position":[[3795,7]]},"1370":{"position":[[706,7]]},"1379":{"position":[[1287,7]]},"1394":{"position":[[799,7]]},"1403":{"position":[[1287,7]]},"1414":{"position":[[1287,7]]},"1431":{"position":[[3818,7]]},"1440":{"position":[[1171,7]]},"1443":{"position":[[469,7]]},"1444":{"position":[[427,7]]},"1447":{"position":[[607,7]]},"1448":{"position":[[194,7]]},"1471":{"position":[[400,9]]},"1476":{"position":[[985,7]]},"1477":{"position":[[1465,11],[3631,11]]}},"keywords":{}}],["current_bal",{"_index":2872,"title":{},"content":{"280":{"position":[[1515,16],[2063,16]]}},"keywords":{}}],["current_cat",{"_index":6308,"title":{},"content":{"1379":{"position":[[1338,13]]},"1403":{"position":[[1338,13]]},"1414":{"position":[[1338,13]]}},"keywords":{}}],["current_catalog",{"_index":5692,"title":{},"content":{"1140":{"position":[[3831,15]]},"1316":{"position":[[3831,15]]},"1340":{"position":[[3831,15]]},"1351":{"position":[[3831,15]]},"1423":{"position":[[504,15]]},"1431":{"position":[[3854,15]]}},"keywords":{}}],["current_d",{"_index":5694,"title":{},"content":{"1140":{"position":[[3880,12]]},"1209":{"position":[[507,12]]},"1292":{"position":[[1743,12]]},"1306":{"position":[[1743,12]]},"1316":{"position":[[3880,12]]},"1329":{"position":[[1743,12]]},"1340":{"position":[[3880,12]]},"1351":{"position":[[3880,12]]},"1370":{"position":[[719,12]]},"1379":{"position":[[1395,12]]},"1394":{"position":[[820,12]]},"1403":{"position":[[1395,12]]},"1414":{"position":[[1395,12]]},"1423":{"position":[[535,12]]},"1431":{"position":[[3903,12]]}},"keywords":{}}],["current_defau",{"_index":6309,"title":{},"content":{"1379":{"position":[[1450,13]]},"1403":{"position":[[1450,13]]},"1414":{"position":[[1450,13]]}},"keywords":{}}],["current_default_transform_group",{"_index":5697,"title":{},"content":{"1140":{"position":[[3922,31]]},"1316":{"position":[[3922,31]]},"1340":{"position":[[3922,31]]},"1351":{"position":[[3922,31]]},"1431":{"position":[[3945,31]]}},"keywords":{}}],["current_path",{"_index":5699,"title":{},"content":{"1140":{"position":[[3975,12]]},"1316":{"position":[[3975,12]]},"1340":{"position":[[3975,12]]},"1351":{"position":[[3975,12]]},"1379":{"position":[[1511,12]]},"1403":{"position":[[1511,12]]},"1414":{"position":[[1511,12]]},"1423":{"position":[[558,12]]},"1431":{"position":[[3998,12]]}},"keywords":{}}],["current_rol",{"_index":5701,"title":{},"content":{"1140":{"position":[[4011,12]]},"1316":{"position":[[4011,12]]},"1340":{"position":[[4011,12]]},"1351":{"position":[[4011,12]]},"1379":{"position":[[1557,12]]},"1403":{"position":[[1557,12]]},"1414":{"position":[[1557,12]]},"1423":{"position":[[579,12]]},"1431":{"position":[[4034,12]]}},"keywords":{}}],["current_row",{"_index":5703,"title":{},"content":{"1140":{"position":[[4059,11]]},"1316":{"position":[[4059,11]]},"1340":{"position":[[4059,11]]},"1351":{"position":[[4059,11]]},"1431":{"position":[[4082,11]]}},"keywords":{}}],["current_schem",{"_index":6312,"title":{},"content":{"1379":{"position":[[1609,13]]},"1403":{"position":[[1609,13]]},"1414":{"position":[[1609,13]]}},"keywords":{}}],["current_schema",{"_index":5707,"title":{},"content":{"1140":{"position":[[4104,14]]},"1316":{"position":[[4104,14]]},"1340":{"position":[[4104,14]]},"1351":{"position":[[4104,14]]},"1423":{"position":[[605,14]]},"1431":{"position":[[4127,14]]}},"keywords":{}}],["current_tim",{"_index":5709,"title":{},"content":{"1140":{"position":[[4146,12]]},"1292":{"position":[[1782,12],[1827,13]]},"1306":{"position":[[1782,12],[1827,13]]},"1316":{"position":[[4146,12]]},"1329":{"position":[[1782,12],[1827,13]]},"1340":{"position":[[4146,12]]},"1351":{"position":[[4146,12]]},"1370":{"position":[[739,12]]},"1379":{"position":[[1661,12],[1716,13]]},"1394":{"position":[[843,12]]},"1403":{"position":[[1661,12],[1716,13]]},"1414":{"position":[[1661,12],[1716,13]]},"1423":{"position":[[637,12]]},"1431":{"position":[[4169,12]]}},"keywords":{}}],["current_timestamp",{"_index":5712,"title":{},"content":{"1140":{"position":[[4193,17]]},"1209":{"position":[[535,17]]},"1316":{"position":[[4193,17]]},"1340":{"position":[[4193,17]]},"1351":{"position":[[4193,17]]},"1370":{"position":[[762,17]]},"1394":{"position":[[875,17]]},"1423":{"position":[[669,17]]},"1431":{"position":[[4216,17]]}},"keywords":{}}],["current_tran",{"_index":6314,"title":{},"content":{"1379":{"position":[[1782,13]]},"1403":{"position":[[1782,13]]},"1414":{"position":[[1782,13]]}},"keywords":{}}],["current_transform_group_for_typ",{"_index":5522,"title":{},"content":{"1140":{"position":[[369,32]]},"1316":{"position":[[369,32]]},"1340":{"position":[[369,32]]},"1351":{"position":[[369,32]]},"1431":{"position":[[392,32]]}},"keywords":{}}],["current_us",{"_index":5524,"title":{},"content":{"1140":{"position":[[440,12]]},"1292":{"position":[[1870,12]]},"1306":{"position":[[1870,12]]},"1316":{"position":[[440,12]]},"1329":{"position":[[1870,12]]},"1340":{"position":[[440,12]]},"1351":{"position":[[440,12]]},"1379":{"position":[[1846,12]]},"1394":{"position":[[914,12]]},"1403":{"position":[[1846,12]]},"1414":{"position":[[1846,12]]},"1423":{"position":[[705,12]]},"1431":{"position":[[463,12]]}},"keywords":{}}],["cursor",{"_index":3395,"title":{"480":{"position":[[11,6]]}},"content":{"366":{"position":[[157,8]]},"402":{"position":[[778,6]]},"403":{"position":[[443,6]]},"406":{"position":[[119,6]]},"479":{"position":[[669,6]]},"480":{"position":[[330,6],[351,6],[505,7],[950,6],[1154,6],[1206,6],[1316,7],[1417,6],[1591,6]]},"482":{"position":[[611,7],[619,6],[693,6]]},"483":{"position":[[139,6],[176,6],[265,6]]},"821":{"position":[[1056,6],[1161,6],[1221,7]]},"842":{"position":[[2108,6],[2244,6]]},"903":{"position":[[183,8]]},"912":{"position":[[1170,6]]},"915":{"position":[[183,8]]},"922":{"position":[[269,6]]},"930":{"position":[[183,8]]},"963":{"position":[[337,8]]},"1009":{"position":[[1573,6],[1602,6]]},"1133":{"position":[[1386,6],[1417,6]]},"1140":{"position":[[479,6]]},"1292":{"position":[[1910,6]]},"1306":{"position":[[1910,6]]},"1316":{"position":[[479,6]]},"1329":{"position":[[1910,6]]},"1340":{"position":[[479,6]]},"1351":{"position":[[479,6]]},"1379":{"position":[[1909,6]]},"1403":{"position":[[1909,6]]},"1414":{"position":[[1909,6]]},"1431":{"position":[[502,6]]}},"keywords":{}}],["cursor_field",{"_index":3544,"title":{},"content":{"402":{"position":[[751,13]]},"403":{"position":[[429,13]]},"843":{"position":[[373,14]]}},"keywords":{}}],["cursor_nam",{"_index":6028,"title":{},"content":{"1292":{"position":[[1939,11]]},"1306":{"position":[[1939,11]]},"1329":{"position":[[1939,11]]}},"keywords":{}}],["cursorfield",{"_index":5175,"title":{},"content":{"1010":{"position":[[432,12],[542,12]]},"1133":{"position":[[1374,11]]},"1134":{"position":[[524,12],[799,12],[909,12],[1009,12],[1116,12],[1241,12],[1357,12],[1737,12],[2096,12],[2211,12],[2326,12],[2438,12],[2551,12],[2672,12],[2784,12],[2890,12],[2992,12]]}},"keywords":{}}],["cursornam",{"_index":3836,"title":{},"content":{"480":{"position":[[1034,11]]}},"keywords":{}}],["cursornameand",{"_index":3838,"title":{},"content":{"480":{"position":[[1077,14]]}},"keywords":{}}],["custom",{"_index":632,"title":{"226":{"position":[[0,9]]},"552":{"position":[[0,8],[20,8]]},"558":{"position":[[0,6]]},"574":{"position":[[0,6]]},"585":{"position":[[0,6]]},"606":{"position":[[0,6]]},"661":{"position":[[0,6]]}},"content":{"27":{"position":[[460,9]]},"43":{"position":[[80,10]]},"63":{"position":[[829,9]]},"81":{"position":[[2078,9]]},"96":{"position":[[215,10]]},"107":{"position":[[1646,8]]},"122":{"position":[[1936,9],[2125,14]]},"123":{"position":[[192,10],[289,9],[351,8],[728,9],[759,9]]},"279":{"position":[[77,6]]},"294":{"position":[[151,9]]},"295":{"position":[[121,10],[236,9],[725,8],[797,9],[827,9],[888,9]]},"296":{"position":[[385,8],[1356,8],[2457,9],[4583,8],[7733,8],[7855,9],[7960,9],[8064,9]]},"319":{"position":[[1598,9]]},"455":{"position":[[273,9]]},"483":{"position":[[816,6]]},"517":{"position":[[179,6],[787,6]]},"518":{"position":[[308,6]]},"550":{"position":[[520,6]]},"552":{"position":[[11,8],[277,8],[585,8],[632,8]]},"553":{"position":[[54,8],[248,8]]},"554":{"position":[[54,8]]},"556":{"position":[[1022,6],[1083,6],[1098,6],[1384,8],[1432,8],[1451,8],[1816,8],[1882,8],[1975,8]]},"558":{"position":[[16,6]]},"568":{"position":[[331,6]]},"573":{"position":[[599,6],[653,6]]},"574":{"position":[[61,6],[114,6],[190,6],[457,6],[519,6]]},"580":{"position":[[271,6]]},"584":{"position":[[521,6],[575,6],[647,6]]},"585":{"position":[[61,6],[114,6],[180,6]]},"606":{"position":[[56,6],[376,6]]},"611":{"position":[[657,6],[711,6]]},"642":{"position":[[193,6]]},"657":{"position":[[596,9]]},"661":{"position":[[166,9]]},"709":{"position":[[179,6]]},"739":{"position":[[131,6]]},"839":{"position":[[124,6],[217,6],[259,6]]},"840":{"position":[[1452,6],[1549,9]]},"846":{"position":[[126,7]]},"847":{"position":[[1,6],[276,6]]},"848":{"position":[[124,6],[254,6],[296,6]]},"849":{"position":[[1953,6],[2343,6],[2440,9],[2528,6]]},"989":{"position":[[333,6]]},"1000":{"position":[[437,6]]},"1004":{"position":[[416,6]]},"1032":{"position":[[240,9]]},"1078":{"position":[[892,9]]},"1089":{"position":[[149,6],[272,8],[289,8]]},"1091":{"position":[[36,8],[53,8]]},"1094":{"position":[[74,8],[87,8],[161,8],[177,8]]},"1144":{"position":[[706,6]]},"1157":{"position":[[311,11]]},"1170":{"position":[[706,6]]},"1195":{"position":[[603,9]]},"1285":{"position":[[1065,6],[1193,6],[1305,6]]},"1300":{"position":[[1065,6],[1193,6],[1305,6]]},"1324":{"position":[[1065,6],[1193,6],[1305,6]]},"1461":{"position":[[1211,9],[4652,9],[4744,8]]},"1462":{"position":[[418,10],[515,9],[657,8]]},"1465":{"position":[[352,6]]}},"keywords":{}}],["custom_insight",{"_index":3945,"title":{},"content":{"517":{"position":[[770,16],[934,17],[1042,17],[1182,17],[1269,17],[1396,17],[1690,17],[1767,17],[1885,17],[1945,17],[2095,17]]},"518":{"position":[[280,16]]}},"keywords":{}}],["custom_queri",{"_index":4117,"title":{},"content":{"556":{"position":[[1006,15],[1059,16],[1250,16]]},"557":{"position":[[455,15]]}},"keywords":{}}],["custom_report",{"_index":4155,"title":{},"content":{"573":{"position":[[583,15]]},"584":{"position":[[505,15]]},"611":{"position":[[641,15]]}},"keywords":{}}],["custom_rol",{"_index":5473,"title":{},"content":{"1134":{"position":[[673,12]]}},"keywords":{}}],["customari",{"_index":2624,"title":{},"content":{"242":{"position":[[25,9]]}},"keywords":{}}],["customer1",{"_index":4108,"title":{},"content":{"552":{"position":[[736,9]]}},"keywords":{}}],["customer1@email.com",{"_index":2935,"title":{},"content":{"295":{"position":[[294,19]]}},"keywords":{}}],["customer2",{"_index":4109,"title":{},"content":{"552":{"position":[[759,9]]}},"keywords":{}}],["customer2@email.com",{"_index":2942,"title":{},"content":{"295":{"position":[[340,19]]}},"keywords":{}}],["customer3@email.com",{"_index":2949,"title":{},"content":{"295":{"position":[[388,19]]}},"keywords":{}}],["customer_balance_transact",{"_index":5310,"title":{},"content":{"1078":{"position":[[773,29]]}},"keywords":{}}],["customer_id",{"_index":1537,"title":{},"content":{"107":{"position":[[1516,13],[2775,13]]},"295":{"position":[[261,11],[462,11],[642,12]]},"296":{"position":[[431,12],[621,11],[664,12],[833,12],[934,12],[1402,12],[1592,11],[1635,12],[2834,12],[2935,12],[4609,12],[4795,13],[4997,13],[6204,12],[6358,12]]},"552":{"position":[[542,11],[692,11],[783,11]]},"556":{"position":[[1371,12]]},"557":{"position":[[345,12]]}},"keywords":{}}],["customer_secret",{"_index":5358,"title":{},"content":{"1094":{"position":[[144,16]]}},"keywords":{}}],["customers/flow.yaml",{"_index":6607,"title":{},"content":{"1461":{"position":[[1980,19],[3536,19],[3738,19]]}},"keywords":{}}],["customers/sheet1",{"_index":2998,"title":{},"content":{"296":{"position":[[901,16],[2902,16]]}},"keywords":{}}],["customers_with_ord",{"_index":3001,"title":{},"content":{"296":{"position":[[1864,21],[4474,22]]}},"keywords":{}}],["customers_with_orders.t",{"_index":3007,"title":{},"content":{"296":{"position":[[3970,24]]}},"keywords":{}}],["customersdiscountsdisputestransactionsmerch",{"_index":3753,"title":{},"content":{"451":{"position":[[73,46]]}},"keywords":{}}],["cycl",{"_index":5528,"title":{},"content":{"1140":{"position":[[520,5]]},"1316":{"position":[[520,5]]},"1340":{"position":[[520,5]]},"1351":{"position":[[520,5]]},"1379":{"position":[[1954,5]]},"1403":{"position":[[1954,5]]},"1414":{"position":[[1954,5]]},"1431":{"position":[[543,5]]}},"keywords":{}}],["cyclic",{"_index":1492,"title":{},"content":{"105":{"position":[[821,6]]}},"keywords":{}}],["d",{"_index":95,"title":{},"content":{"2":{"position":[[675,2]]},"61":{"position":[[1207,1],[1244,1]]},"105":{"position":[[1451,1],[1473,1],[1494,1]]},"210":{"position":[[1203,3]]},"236":{"position":[[971,1]]},"237":{"position":[[3063,1]]},"238":{"position":[[910,1],[1004,2]]},"943":{"position":[[1159,1]]}},"keywords":{}}],["d+(s|m|h",{"_index":1356,"title":{},"content":{"94":{"position":[[2715,13]]}},"keywords":{}}],["d494a2c6",{"_index":3724,"title":{},"content":{"439":{"position":[[326,8]]}},"keywords":{}}],["d[deriv",{"_index":1498,"title":{},"content":{"105":{"position":[[1341,14]]}},"keywords":{}}],["d[local",{"_index":931,"title":{},"content":{"61":{"position":[[1166,7]]}},"keywords":{}}],["daemon",{"_index":2575,"title":{},"content":{"237":{"position":[[3097,10]]}},"keywords":{}}],["dag",{"_index":2868,"title":{},"content":{"280":{"position":[[919,6]]}},"keywords":{}}],["daili",{"_index":3729,"title":{},"content":{"443":{"position":[[91,6],[181,6],[259,6],[371,6],[452,6]]},"580":{"position":[[46,5]]},"1080":{"position":[[160,5],[244,5],[330,5],[418,5],[526,5],[637,5],[700,5],[797,5]]},"1087":{"position":[[188,6],[247,5]]}},"keywords":{}}],["daily_active_us",{"_index":4201,"title":{},"content":{"575":{"position":[[332,18]]},"586":{"position":[[354,18]]}},"keywords":{}}],["dailychangesbyus",{"_index":2076,"title":{},"content":{"183":{"position":[[2459,18],[3876,18]]}},"keywords":{}}],["danger",{"_index":4621,"title":{},"content":{"757":{"position":[[1750,12],[1847,6]]},"764":{"position":[[159,11]]},"770":{"position":[[1750,12],[1847,6]]},"777":{"position":[[159,11]]},"797":{"position":[[1750,12],[1847,6]]},"804":{"position":[[157,11]]},"812":{"position":[[1750,12],[1847,6]]},"819":{"position":[[157,11]]},"828":{"position":[[1750,12],[1847,6]]},"835":{"position":[[157,11]]}},"keywords":{}}],["dani",{"_index":3006,"title":{},"content":{"296":{"position":[[3928,4]]},"315":{"position":[[385,4]]}},"keywords":{}}],["dani/deriv",{"_index":2768,"title":{},"content":{"254":{"position":[[249,15]]},"255":{"position":[[189,15]]},"314":{"position":[[249,15],[632,15]]},"315":{"position":[[964,15],[1474,15]]},"316":{"position":[[191,15]]}},"keywords":{}}],["dani/join",{"_index":2993,"title":{},"content":{"296":{"position":[[245,9],[781,9],[882,9],[1216,9],[2782,9],[2883,9],[5384,9],[6036,9]]}},"keywords":{}}],["dark",{"_index":1792,"title":{},"content":{"138":{"position":[[1584,4]]},"141":{"position":[[1155,4],[1589,4]]},"142":{"position":[[1601,4]]},"210":{"position":[[2260,4]]},"947":{"position":[[445,8],[762,8]]}},"keywords":{}}],["dash",{"_index":4121,"title":{},"content":{"556":{"position":[[1510,7],[2035,8]]}},"keywords":{}}],["dashboard",{"_index":2229,"title":{},"content":{"204":{"position":[[938,9]]},"205":{"position":[[8,10]]},"239":{"position":[[91,9]]},"253":{"position":[[302,10]]},"295":{"position":[[1061,9]]},"296":{"position":[[6903,9]]},"313":{"position":[[302,10]]},"464":{"position":[[137,9],[241,9]]},"515":{"position":[[504,10]]},"552":{"position":[[135,9],[411,9]]},"942":{"position":[[473,10]]},"947":{"position":[[335,9]]},"964":{"position":[[419,9],[798,10]]},"1118":{"position":[[522,10]]}},"keywords":{}}],["dashboard)schema",{"_index":2641,"title":{},"content":{"247":{"position":[[310,16]]}},"keywords":{}}],["dashboard.estuary.dev",{"_index":645,"title":{},"content":{"30":{"position":[[118,22]]},"190":{"position":[[27,21]]},"217":{"position":[[213,21]]},"290":{"position":[[190,21]]},"301":{"position":[[143,21]]}},"keywords":{}}],["dashboard.in",{"_index":5409,"title":{},"content":{"1118":{"position":[[210,12]]}},"keywords":{}}],["dashboard.navig",{"_index":2642,"title":{},"content":{"249":{"position":[[29,18]]}},"keywords":{}}],["data",{"_index":195,"title":{"23":{"position":[[0,4]]},"61":{"position":[[8,4]]},"182":{"position":[[21,5]]},"183":{"position":[[30,5]]},"190":{"position":[[18,4]]},"214":{"position":[[15,4]]},"251":{"position":[[17,4]]},"258":{"position":[[5,4]]},"286":{"position":[[16,4]]},"309":{"position":[[10,4]]},"311":{"position":[[17,4]]},"332":{"position":[[0,4]]},"373":{"position":[[31,5]]},"374":{"position":[[10,4]]},"381":{"position":[[10,4]]},"385":{"position":[[10,4]]},"411":{"position":[[0,4]]},"419":{"position":[[32,5]]},"421":{"position":[[10,4]]},"427":{"position":[[10,4]]},"440":{"position":[[32,5]]},"443":{"position":[[10,4]]},"451":{"position":[[10,4]]},"457":{"position":[[10,4]]},"463":{"position":[[10,4]]},"469":{"position":[[10,4]]},"486":{"position":[[12,4]]},"499":{"position":[[10,4]]},"506":{"position":[[10,4]]},"512":{"position":[[10,4]]},"520":{"position":[[10,4]]},"529":{"position":[[10,4]]},"537":{"position":[[10,4]]},"547":{"position":[[32,5]]},"550":{"position":[[10,4]]},"568":{"position":[[10,4]]},"577":{"position":[[0,4]]},"580":{"position":[[10,4]]},"588":{"position":[[0,4]]},"590":{"position":[[0,4]]},"605":{"position":[[10,4]]},"622":{"position":[[10,4]]},"628":{"position":[[10,4]]},"634":{"position":[[10,4]]},"639":{"position":[[30,5]]},"649":{"position":[[10,4]]},"658":{"position":[[12,4]]},"667":{"position":[[10,4]]},"674":{"position":[[12,4]]},"682":{"position":[[10,4]]},"689":{"position":[[12,4]]},"697":{"position":[[10,4]]},"703":{"position":[[10,4]]},"709":{"position":[[10,4]]},"715":{"position":[[10,4]]},"738":{"position":[[10,4]]},"744":{"position":[[10,4]]},"761":{"position":[[0,4]]},"774":{"position":[[0,4]]},"779":{"position":[[0,4]]},"801":{"position":[[0,4]]},"816":{"position":[[0,4]]},"832":{"position":[[0,4]]},"838":{"position":[[10,4]]},"854":{"position":[[10,4]]},"882":{"position":[[10,4]]},"888":{"position":[[10,4]]},"956":{"position":[[10,4]]},"975":{"position":[[22,5]]},"976":{"position":[[21,5]]},"979":{"position":[[10,4]]},"984":{"position":[[23,4]]},"985":{"position":[[10,4]]},"994":{"position":[[10,4]]},"999":{"position":[[24,4]]},"1000":{"position":[[10,4]]},"1008":{"position":[[28,5]]},"1012":{"position":[[10,4]]},"1025":{"position":[[10,4]]},"1065":{"position":[[10,4]]},"1073":{"position":[[10,4]]},"1080":{"position":[[10,4]]},"1099":{"position":[[10,4]]},"1104":{"position":[[10,4]]},"1110":{"position":[[10,4]]},"1128":{"position":[[10,4]]},"1172":{"position":[[8,4]]},"1222":{"position":[[8,4]]},"1250":{"position":[[0,4]]},"1393":{"position":[[10,4]]},"1451":{"position":[[34,4]]},"1455":{"position":[[0,4]]}},"content":{"4":{"position":[[806,4]]},"6":{"position":[[376,4],[635,4]]},"8":{"position":[[181,4],[461,4],[587,4],[650,4],[725,4]]},"11":{"position":[[115,4],[162,4],[234,4],[277,4],[297,4],[594,4],[747,4],[794,4],[1085,4],[1220,4],[1593,5],[1608,4]]},"12":{"position":[[243,4]]},"13":{"position":[[180,4],[484,4],[747,4]]},"20":{"position":[[830,4],[860,4]]},"21":{"position":[[569,4],[644,5]]},"23":{"position":[[63,4],[89,4]]},"26":{"position":[[182,4],[604,4]]},"30":{"position":[[87,4],[268,4]]},"31":{"position":[[136,4],[213,4]]},"32":{"position":[[132,4],[207,4],[276,4],[327,4],[496,4]]},"33":{"position":[[61,4],[425,4]]},"34":{"position":[[185,4],[215,4],[342,4],[411,4],[677,4],[851,4]]},"35":{"position":[[39,4]]},"36":{"position":[[46,4]]},"37":{"position":[[59,4],[119,5],[138,4]]},"38":{"position":[[77,4],[412,4]]},"41":{"position":[[191,5],[246,4],[317,4]]},"42":{"position":[[562,4]]},"43":{"position":[[40,4]]},"44":{"position":[[140,4],[289,4]]},"45":{"position":[[44,4]]},"46":{"position":[[71,5]]},"50":{"position":[[218,4]]},"52":{"position":[[18,4],[170,4]]},"54":{"position":[[329,4],[419,4]]},"56":{"position":[[1386,4]]},"60":{"position":[[498,4],[729,4]]},"61":{"position":[[80,4]]},"63":{"position":[[778,4]]},"64":{"position":[[184,4],[339,4]]},"66":{"position":[[27,4],[220,4],[299,4],[660,5]]},"67":{"position":[[1634,4]]},"68":{"position":[[59,4],[241,4],[962,4],[1073,5],[1126,4],[1816,4]]},"70":{"position":[[157,4]]},"74":{"position":[[260,4]]},"77":{"position":[[27,4],[360,4]]},"79":{"position":[[29,4]]},"80":{"position":[[287,4],[503,4]]},"84":{"position":[[15,4]]},"102":{"position":[[647,4]]},"105":{"position":[[828,4]]},"107":{"position":[[122,4]]},"111":{"position":[[309,4]]},"117":{"position":[[27,5],[294,5],[471,4],[544,4]]},"119":{"position":[[425,4]]},"121":{"position":[[2062,4]]},"125":{"position":[[103,4],[1088,4]]},"135":{"position":[[124,4],[261,4],[283,4],[439,4],[482,4],[669,4]]},"137":{"position":[[263,4],[494,4]]},"138":{"position":[[354,5],[1213,4],[1878,4],[1929,4],[1975,5],[2368,5]]},"140":{"position":[[202,4]]},"141":{"position":[[319,5],[366,4],[664,5],[1296,4],[1861,4],[1907,5]]},"142":{"position":[[467,5],[1190,4],[1924,4],[1985,4],[2028,5],[2438,5]]},"145":{"position":[[116,4]]},"146":{"position":[[107,5],[527,5],[617,4],[731,4],[828,4]]},"148":{"position":[[125,4],[170,5]]},"149":{"position":[[110,5],[590,4],[704,4],[801,4],[1144,4]]},"151":{"position":[[123,4]]},"152":{"position":[[120,5],[593,4],[707,4],[804,4]]},"154":{"position":[[1621,4]]},"156":{"position":[[324,4],[700,4],[727,4],[798,4]]},"157":{"position":[[16,4],[313,5]]},"162":{"position":[[64,4],[121,4],[216,4],[297,4],[406,4],[484,4],[625,4],[1430,4],[1577,4],[1965,4]]},"163":{"position":[[564,4],[1166,4]]},"165":{"position":[[112,4],[380,4],[448,4],[550,4],[2051,4]]},"168":{"position":[[211,5],[217,4]]},"169":{"position":[[92,4]]},"170":{"position":[[91,5]]},"173":{"position":[[781,4],[909,4]]},"174":{"position":[[291,4]]},"176":{"position":[[71,4],[121,4]]},"177":{"position":[[108,5],[215,4]]},"180":{"position":[[143,4],[460,4],[812,4]]},"182":{"position":[[735,4]]},"183":{"position":[[221,5],[2857,4],[3326,4]]},"189":{"position":[[5,5],[112,4],[234,4],[497,4],[520,4],[569,4],[618,5],[729,4],[769,4],[859,4],[927,4],[949,4],[1000,4],[1048,4],[1076,4],[1198,4],[1225,4],[1266,4],[1347,4]]},"190":{"position":[[175,4],[1211,4],[1447,4],[1666,4],[2033,4],[2143,4]]},"192":{"position":[[125,4],[1444,4],[1539,4],[1767,4]]},"193":{"position":[[27,4],[179,5],[299,4],[352,4],[559,4],[740,4]]},"196":{"position":[[16,4],[84,4],[234,4],[389,4],[468,4],[505,4],[620,4]]},"197":{"position":[[89,5],[256,4],[386,4],[512,4],[753,4]]},"198":{"position":[[206,4],[372,4],[541,4],[566,4],[802,4]]},"202":{"position":[[94,5],[222,5],[353,4]]},"203":{"position":[[208,4]]},"205":{"position":[[355,4]]},"206":{"position":[[793,4]]},"207":{"position":[[80,4],[175,4],[463,5],[594,4]]},"208":{"position":[[453,4],[469,4]]},"209":{"position":[[777,4],[879,4],[1048,4],[1528,4],[1566,4]]},"210":{"position":[[2049,5],[2231,4],[2466,4],[2906,4]]},"211":{"position":[[47,4],[193,4],[393,4],[567,4],[648,4],[706,4]]},"212":{"position":[[75,4]]},"213":{"position":[[155,4],[210,4],[304,4],[500,5]]},"216":{"position":[[29,4],[51,4],[102,4],[150,4],[178,4],[248,4],[271,4],[311,4],[479,4],[608,4]]},"217":{"position":[[50,4],[407,4],[1065,4],[1103,4]]},"218":{"position":[[26,4],[134,4],[815,4],[869,4],[1343,4],[1378,4],[1553,4],[1742,4],[1949,4],[2145,4]]},"219":{"position":[[37,4],[191,4],[574,4],[604,4]]},"228":{"position":[[820,4]]},"229":{"position":[[514,4]]},"232":{"position":[[381,4],[468,5],[526,4],[564,4],[772,4],[821,4]]},"233":{"position":[[16,4],[84,4],[241,4],[396,4],[475,4],[512,4],[619,5],[805,4]]},"234":{"position":[[193,4],[483,4]]},"236":{"position":[[427,4],[1945,5],[2107,4],[2706,4],[2841,5]]},"237":{"position":[[158,4],[447,4],[772,4],[1136,4],[1463,4],[2641,4],[2951,4]]},"238":{"position":[[746,4],[1412,4]]},"239":{"position":[[210,4],[246,4],[574,4],[679,4],[778,4],[904,5],[1035,4],[1459,5],[2107,4],[2685,4]]},"240":{"position":[[3191,4],[3314,5],[3459,5],[3489,4],[3843,4],[4392,4],[4422,4],[4601,4]]},"241":{"position":[[239,4],[423,4],[517,4]]},"243":{"position":[[75,4],[101,4]]},"253":{"position":[[841,5],[1138,4]]},"254":{"position":[[1085,4]]},"256":{"position":[[86,4]]},"259":{"position":[[1039,4],[1210,4],[1537,4],[2620,4],[2791,4],[3091,4]]},"266":{"position":[[264,4]]},"274":{"position":[[169,4]]},"280":{"position":[[82,4],[827,4],[881,4],[958,4]]},"286":{"position":[[16,4],[146,4],[282,4],[321,4]]},"288":{"position":[[236,4]]},"289":{"position":[[29,4],[52,4],[224,4],[283,4],[335,4]]},"290":{"position":[[1731,4]]},"291":{"position":[[70,4],[100,4],[1336,4],[1367,4],[1675,4],[1955,4]]},"292":{"position":[[6,4],[195,4],[255,4]]},"295":{"position":[[5,4],[1324,4],[1394,4]]},"296":{"position":[[3387,4],[7778,4]]},"299":{"position":[[228,4]]},"300":{"position":[[29,4],[52,4],[203,4],[262,4],[314,4],[368,4],[427,4]]},"301":{"position":[[1057,4],[1483,4],[1705,4]]},"302":{"position":[[70,4],[100,4],[1261,4],[1297,4],[1584,4],[1867,4]]},"303":{"position":[[6,4],[186,4],[246,4]]},"305":{"position":[[51,4],[133,5],[259,4],[287,4],[533,5]]},"306":{"position":[[311,4],[484,5]]},"307":{"position":[[972,4],[3151,4]]},"309":{"position":[[75,4],[388,4],[567,4],[713,4],[818,4],[2051,4]]},"313":{"position":[[841,5],[1138,4]]},"314":{"position":[[806,4]]},"317":{"position":[[93,4]]},"319":{"position":[[536,4],[693,4],[993,4],[1271,5]]},"320":{"position":[[203,5],[989,4],[1290,4]]},"321":{"position":[[601,4],[933,4],[1060,5],[1322,4],[1465,4],[1478,4],[2125,4],[2164,4],[2369,4]]},"322":{"position":[[314,5],[708,4],[1084,5],[1261,4],[1392,4],[1488,4],[1533,4],[1694,4],[1748,4]]},"323":{"position":[[59,4],[348,4],[381,4],[614,4],[691,4],[757,5],[961,5],[1085,5]]},"324":{"position":[[28,4],[69,4],[244,5],[568,4],[764,4],[856,5],[1247,4]]},"325":{"position":[[85,5],[557,4],[593,4],[684,4]]},"326":{"position":[[316,4],[549,4],[1305,5],[1395,4],[1445,4],[1578,4],[1641,4],[1746,4]]},"329":{"position":[[108,4],[553,4],[817,4],[967,4]]},"330":{"position":[[185,4],[516,4]]},"331":{"position":[[299,4]]},"332":{"position":[[41,4],[270,4],[797,4]]},"333":{"position":[[360,4]]},"337":{"position":[[459,4]]},"363":{"position":[[135,4],[2002,5]]},"364":{"position":[[116,4],[351,4],[1518,4],[3015,5]]},"366":{"position":[[861,4]]},"373":{"position":[[19,4],[121,4],[158,4],[187,5],[211,4],[252,4],[455,4],[709,4],[834,4],[942,5],[990,4],[1077,5]]},"374":{"position":[[239,4],[384,4]]},"375":{"position":[[82,4],[169,4]]},"377":{"position":[[215,4],[249,4],[282,4],[292,4],[451,4],[594,4],[1116,4],[1329,4]]},"379":{"position":[[11,4],[114,4],[322,4],[452,4],[501,4],[592,4]]},"381":{"position":[[15,4]]},"383":{"position":[[105,5]]},"385":{"position":[[108,5],[177,5],[668,4]]},"387":{"position":[[825,4],[873,4],[1047,5]]},"390":{"position":[[126,4],[536,4]]},"402":{"position":[[248,4]]},"413":{"position":[[39,4]]},"417":{"position":[[467,4],[1960,4]]},"419":{"position":[[86,4],[167,4],[303,4],[872,4],[1115,4],[1343,4],[2435,4]]},"421":{"position":[[15,4]]},"424":{"position":[[266,4]]},"427":{"position":[[58,5],[87,4],[309,4]]},"438":{"position":[[467,4]]},"440":{"position":[[102,4],[183,4],[319,4],[888,4],[1131,4],[1359,4]]},"441":{"position":[[1044,4]]},"443":{"position":[[15,4]]},"448":{"position":[[883,5],[893,4]]},"451":{"position":[[15,4]]},"454":{"position":[[117,4],[456,4]]},"457":{"position":[[15,4]]},"460":{"position":[[270,4]]},"463":{"position":[[15,4]]},"469":{"position":[[115,4]]},"475":{"position":[[197,4]]},"477":{"position":[[9,4],[126,4],[1062,4]]},"480":{"position":[[1562,4]]},"485":{"position":[[96,4],[327,4],[510,4]]},"486":{"position":[[273,4],[314,5],[447,4]]},"487":{"position":[[434,4],[492,4]]},"488":{"position":[[249,4],[356,5]]},"489":{"position":[[829,4]]},"491":{"position":[[266,4]]},"496":{"position":[[462,4],[585,4],[622,5]]},"497":{"position":[[398,4]]},"499":{"position":[[43,4]]},"502":{"position":[[927,4]]},"504":{"position":[[104,4],[240,4],[626,4],[804,4],[2064,4]]},"506":{"position":[[15,4]]},"509":{"position":[[394,4],[477,4]]},"512":{"position":[[15,4]]},"513":{"position":[[65,4]]},"517":{"position":[[52,4],[119,4],[269,4],[685,4],[1478,4],[1540,4],[1677,5],[2030,4],[2659,5],[2705,4],[2838,5],[3041,4],[3820,5],[3866,4]]},"520":{"position":[[101,5],[143,4]]},"522":{"position":[[63,4]]},"529":{"position":[[120,5],[162,4]]},"530":{"position":[[63,4]]},"534":{"position":[[958,5],[1448,4],[1557,4]]},"540":{"position":[[111,4]]},"545":{"position":[[467,4],[1562,4]]},"547":{"position":[[87,4],[168,4],[304,4],[873,4],[1117,4],[1345,4],[2437,4]]},"550":{"position":[[15,4]]},"551":{"position":[[63,4]]},"556":{"position":[[1739,4],[2113,4]]},"560":{"position":[[118,4],[263,4]]},"568":{"position":[[15,4]]},"569":{"position":[[63,4]]},"573":{"position":[[763,4],[897,4],[1329,4]]},"574":{"position":[[17,4],[41,4],[644,4]]},"578":{"position":[[1,4],[101,4],[342,4]]},"580":{"position":[[15,4]]},"581":{"position":[[59,4]]},"584":{"position":[[956,4],[1060,4],[1289,4],[1401,4]]},"585":{"position":[[17,4],[41,4]]},"586":{"position":[[162,4]]},"588":{"position":[[22,4]]},"590":{"position":[[36,4]]},"593":{"position":[[433,4]]},"594":{"position":[[1054,4]]},"595":{"position":[[108,5],[163,4],[335,5],[433,4],[563,4],[1109,5],[1222,4]]},"598":{"position":[[9,4]]},"603":{"position":[[30,4],[68,4],[245,4]]},"605":{"position":[[15,4],[102,4]]},"607":{"position":[[63,4]]},"611":{"position":[[836,4],[1103,4]]},"614":{"position":[[63,4]]},"616":{"position":[[479,4]]},"622":{"position":[[15,4]]},"628":{"position":[[15,4]]},"631":{"position":[[270,4],[409,4]]},"634":{"position":[[43,4]]},"635":{"position":[[75,4]]},"637":{"position":[[129,4]]},"639":{"position":[[103,4],[239,4],[624,4],[802,4],[2062,4]]},"640":{"position":[[5,4]]},"643":{"position":[[64,5]]},"646":{"position":[[774,4],[800,4],[867,4]]},"649":{"position":[[138,4],[518,4]]},"650":{"position":[[64,5]]},"654":{"position":[[510,4],[752,4],[858,4],[884,4]]},"657":{"position":[[96,4],[327,4],[578,5],[695,4]]},"658":{"position":[[273,4],[314,5],[447,4]]},"659":{"position":[[406,4],[513,5]]},"660":{"position":[[448,4],[499,4],[875,4]]},"661":{"position":[[211,4]]},"662":{"position":[[829,4]]},"664":{"position":[[287,4]]},"667":{"position":[[15,4]]},"670":{"position":[[566,4]]},"673":{"position":[[96,4],[327,4],[510,4]]},"674":{"position":[[273,4],[314,5],[447,4]]},"675":{"position":[[241,4],[401,4]]},"676":{"position":[[249,4],[356,5]]},"677":{"position":[[829,4]]},"679":{"position":[[266,4]]},"682":{"position":[[15,4]]},"685":{"position":[[390,4]]},"688":{"position":[[96,4],[327,4],[510,4]]},"689":{"position":[[273,4],[314,5],[447,4]]},"691":{"position":[[249,4],[356,5]]},"692":{"position":[[829,4]]},"694":{"position":[[266,4]]},"697":{"position":[[15,4]]},"700":{"position":[[218,4]]},"706":{"position":[[218,4]]},"709":{"position":[[15,4]]},"715":{"position":[[15,4]]},"716":{"position":[[65,4]]},"717":{"position":[[135,5]]},"718":{"position":[[394,4]]},"720":{"position":[[340,5],[381,4],[722,4]]},"723":{"position":[[413,5]]},"724":{"position":[[463,4]]},"731":{"position":[[66,5]]},"741":{"position":[[333,4]]},"744":{"position":[[15,4]]},"747":{"position":[[728,4],[830,4],[945,4],[1232,5],[1270,4]]},"750":{"position":[[549,4],[1291,4]]},"752":{"position":[[899,4]]},"759":{"position":[[166,5]]},"761":{"position":[[128,4]]},"764":{"position":[[581,5]]},"766":{"position":[[549,4]]},"772":{"position":[[177,5]]},"774":{"position":[[128,4]]},"777":{"position":[[581,5]]},"779":{"position":[[34,4]]},"785":{"position":[[714,4],[862,5]]},"789":{"position":[[537,4],[1692,4]]},"791":{"position":[[676,4],[904,4]]},"792":{"position":[[1996,4]]},"793":{"position":[[1350,4]]},"799":{"position":[[164,5]]},"801":{"position":[[128,4]]},"804":{"position":[[579,5]]},"807":{"position":[[537,4]]},"808":{"position":[[1296,4]]},"814":{"position":[[164,5]]},"816":{"position":[[128,4]]},"819":{"position":[[579,5]]},"821":{"position":[[52,4],[272,4],[968,4]]},"823":{"position":[[537,4]]},"824":{"position":[[2118,4]]},"830":{"position":[[164,5]]},"832":{"position":[[128,4]]},"835":{"position":[[579,5]]},"842":{"position":[[340,4],[367,4],[1401,4],[2925,4]]},"846":{"position":[[177,4]]},"849":{"position":[[2954,4]]},"851":{"position":[[230,4]]},"854":{"position":[[15,4]]},"859":{"position":[[565,4]]},"864":{"position":[[1498,4]]},"869":{"position":[[55,4],[227,4],[344,4],[644,5]]},"870":{"position":[[527,5]]},"882":{"position":[[15,4]]},"885":{"position":[[519,4]]},"888":{"position":[[15,4]]},"891":{"position":[[230,4],[382,4]]},"895":{"position":[[217,4]]},"903":{"position":[[887,4]]},"909":{"position":[[1090,4],[1150,4]]},"912":{"position":[[57,4],[283,4],[984,5],[1093,5],[1534,4],[1605,4]]},"915":{"position":[[887,4],[1148,4]]},"922":{"position":[[1560,4],[2019,4]]},"925":{"position":[[1090,4],[1150,4]]},"930":{"position":[[887,4]]},"936":{"position":[[1090,4],[1150,4]]},"943":{"position":[[77,5]]},"945":{"position":[[737,4]]},"952":{"position":[[1090,4],[1150,4]]},"956":{"position":[[15,4]]},"959":{"position":[[211,4],[274,4]]},"963":{"position":[[1041,4],[1302,4]]},"970":{"position":[[1090,4],[1150,4]]},"974":{"position":[[100,4],[176,4]]},"975":{"position":[[16,4],[54,4],[215,5],[329,5],[385,4]]},"976":{"position":[[57,4],[195,4]]},"977":{"position":[[146,5],[340,4],[500,4],[598,4],[707,4]]},"979":{"position":[[15,4]]},"982":{"position":[[213,4],[276,4]]},"985":{"position":[[400,5]]},"989":{"position":[[889,4],[988,4]]},"994":{"position":[[15,4]]},"1000":{"position":[[578,5]]},"1004":{"position":[[190,4],[972,4],[1071,4]]},"1006":{"position":[[310,4]]},"1007":{"position":[[61,4]]},"1008":{"position":[[140,4],[606,4]]},"1009":{"position":[[884,4],[964,4],[1618,4]]},"1012":{"position":[[15,4]]},"1015":{"position":[[332,4]]},"1020":{"position":[[1049,4]]},"1022":{"position":[[194,5],[431,5]]},"1023":{"position":[[67,4],[148,4],[284,4],[853,4],[1098,4],[1326,4],[2418,4]]},"1026":{"position":[[56,4]]},"1028":{"position":[[141,4],[279,4]]},"1036":{"position":[[840,4]]},"1040":{"position":[[603,4]]},"1042":{"position":[[361,5]]},"1043":{"position":[[1025,5]]},"1050":{"position":[[603,4]]},"1051":{"position":[[1287,5]]},"1058":{"position":[[603,4]]},"1059":{"position":[[1080,5]]},"1065":{"position":[[15,4]]},"1070":{"position":[[717,4],[870,5],[891,4]]},"1073":{"position":[[15,4]]},"1076":{"position":[[452,4],[533,4],[680,4]]},"1077":{"position":[[40,4],[112,4],[378,5],[421,4],[605,4],[801,4],[859,5]]},"1080":{"position":[[15,4]]},"1085":{"position":[[758,4],[822,4],[948,4],[1083,4],[1226,4],[1306,4]]},"1087":{"position":[[60,4]]},"1092":{"position":[[326,4],[521,4]]},"1094":{"position":[[357,4]]},"1099":{"position":[[15,4]]},"1104":{"position":[[15,4]]},"1105":{"position":[[45,4]]},"1107":{"position":[[131,4],[201,4]]},"1110":{"position":[[15,4]]},"1113":{"position":[[270,4]]},"1118":{"position":[[261,4],[972,4],[1059,4],[1130,4],[1197,4]]},"1128":{"position":[[15,4]]},"1129":{"position":[[82,4]]},"1133":{"position":[[825,4],[895,4]]},"1137":{"position":[[35,4]]},"1144":{"position":[[189,4],[297,4]]},"1147":{"position":[[355,4],[482,5]]},"1151":{"position":[[794,4],[925,4],[1039,4]]},"1157":{"position":[[169,4],[303,4]]},"1162":{"position":[[300,4]]},"1164":{"position":[[74,4],[196,4]]},"1165":{"position":[[292,4]]},"1170":{"position":[[189,4],[297,4]]},"1172":{"position":[[66,4],[113,4],[136,4],[260,4],[278,4]]},"1174":{"position":[[355,4],[482,5]]},"1176":{"position":[[513,4]]},"1178":{"position":[[35,4]]},"1180":{"position":[[126,4]]},"1183":{"position":[[374,4],[806,4],[1048,4],[1505,4],[1725,4]]},"1185":{"position":[[313,4]]},"1187":{"position":[[35,4]]},"1189":{"position":[[423,4]]},"1194":{"position":[[523,4]]},"1195":{"position":[[35,4]]},"1197":{"position":[[429,4]]},"1203":{"position":[[684,4]]},"1205":{"position":[[35,4],[162,4]]},"1207":{"position":[[512,4]]},"1216":{"position":[[355,4],[482,5]]},"1222":{"position":[[66,4],[113,4],[136,4],[260,4],[278,4]]},"1224":{"position":[[355,4],[482,5]]},"1226":{"position":[[324,4]]},"1229":{"position":[[35,4]]},"1239":{"position":[[98,4]]},"1240":{"position":[[115,4]]},"1243":{"position":[[101,4],[766,4]]},"1246":{"position":[[35,4]]},"1247":{"position":[[1013,5]]},"1248":{"position":[[456,4]]},"1250":{"position":[[34,4]]},"1260":{"position":[[493,4],[593,4],[724,4]]},"1267":{"position":[[231,4]]},"1268":{"position":[[65,4]]},"1269":{"position":[[92,4]]},"1284":{"position":[[35,4]]},"1292":{"position":[[1978,4]]},"1299":{"position":[[35,4]]},"1303":{"position":[[1520,4]]},"1306":{"position":[[1978,4]]},"1312":{"position":[[35,4]]},"1323":{"position":[[35,4]]},"1329":{"position":[[1978,4]]},"1336":{"position":[[35,4]]},"1347":{"position":[[35,4]]},"1354":{"position":[[348,4]]},"1355":{"position":[[35,4]]},"1356":{"position":[[781,4],[845,4],[1265,4]]},"1357":{"position":[[361,4]]},"1358":{"position":[[803,4]]},"1362":{"position":[[535,4]]},"1375":{"position":[[35,4]]},"1379":{"position":[[1993,4]]},"1382":{"position":[[567,4]]},"1384":{"position":[[1275,5]]},"1385":{"position":[[35,4]]},"1386":{"position":[[542,4]]},"1387":{"position":[[462,4],[1088,4]]},"1388":{"position":[[788,4]]},"1391":{"position":[[212,4],[743,4]]},"1392":{"position":[[29,4]]},"1393":{"position":[[29,4]]},"1399":{"position":[[35,4]]},"1403":{"position":[[1993,4]]},"1410":{"position":[[35,4]]},"1414":{"position":[[1993,4]]},"1417":{"position":[[241,4]]},"1419":{"position":[[35,4]]},"1421":{"position":[[449,4]]},"1426":{"position":[[35,4]]},"1429":{"position":[[76,5]]},"1448":{"position":[[432,4],[720,5],[884,4]]},"1449":{"position":[[329,4],[472,4],[615,4]]},"1451":{"position":[[24,4],[138,4],[354,4],[497,4],[1007,5]]},"1452":{"position":[[2262,4],[2326,4],[2606,4],[2675,4],[2771,4],[3426,4],[3437,4],[3669,4],[3807,4],[3977,4]]},"1455":{"position":[[117,4]]},"1461":{"position":[[4317,4],[5211,4],[5326,4]]},"1462":{"position":[[666,4]]},"1470":{"position":[[1014,4],[1140,4],[1280,4]]},"1473":{"position":[[62,4]]},"1474":{"position":[[30,4],[280,4],[362,4]]},"1475":{"position":[[96,4],[240,4],[304,4]]},"1479":{"position":[[637,4],[701,4]]},"1481":{"position":[[132,4]]}},"keywords":{}}],["data'",{"_index":4368,"title":{},"content":{"640":{"position":[[295,6]]}},"keywords":{}}],["data.appli",{"_index":4531,"title":{},"content":{"726":{"position":[[227,10]]}},"keywords":{}}],["data.csv.thi",{"_index":5201,"title":{},"content":{"1020":{"position":[[1791,13]]}},"keywords":{}}],["data.dev",{"_index":3864,"title":{},"content":{"488":{"position":[[130,10]]},"659":{"position":[[287,10]]},"676":{"position":[[130,10]]},"691":{"position":[[130,10]]}},"keywords":{}}],["data.fail",{"_index":1783,"title":{},"content":{"138":{"position":[[1401,11]]},"142":{"position":[[1402,11]]}},"keywords":{}}],["data.for",{"_index":5762,"title":{},"content":{"1160":{"position":[[365,8]]}},"keywords":{}}],["data?testkey=testvalu",{"_index":3874,"title":{},"content":{"488":{"position":[[1035,22]]},"659":{"position":[[1192,22]]},"676":{"position":[[1035,22]]},"691":{"position":[[1035,22]]}},"keywords":{}}],["dataa",{"_index":6358,"title":{},"content":{"1382":{"position":[[120,5]]}},"keywords":{}}],["databas",{"_index":335,"title":{"115":{"position":[[16,9]]},"235":{"position":[[22,9]]},"238":{"position":[[11,8]]},"325":{"position":[[50,10]]},"326":{"position":[[36,10]]},"753":{"position":[[6,8]]},"793":{"position":[[6,8]]},"919":{"position":[[6,8]]},"964":{"position":[[7,8]]},"1043":{"position":[[10,9]]},"1283":{"position":[[6,8]]},"1311":{"position":[[6,8]]},"1409":{"position":[[10,9]]}},"content":{"11":{"position":[[1402,9]]},"13":{"position":[[950,9]]},"14":{"position":[[619,8],[830,8]]},"27":{"position":[[238,8],[349,8]]},"37":{"position":[[179,10]]},"42":{"position":[[172,8]]},"45":{"position":[[190,8]]},"52":{"position":[[154,8]]},"55":{"position":[[382,8]]},"71":{"position":[[573,8]]},"72":{"position":[[695,9]]},"75":{"position":[[159,8]]},"76":{"position":[[127,9]]},"81":{"position":[[462,8],[582,8],[1405,9],[1630,8],[1661,8],[2256,8],[2698,9]]},"83":{"position":[[1043,9]]},"96":{"position":[[764,9]]},"97":{"position":[[303,8]]},"100":{"position":[[58,8],[173,8],[800,8],[1295,9]]},"101":{"position":[[509,8]]},"112":{"position":[[342,8],[848,9],[989,8],[1011,9]]},"115":{"position":[[59,9],[565,8],[930,9],[1000,8],[1237,8]]},"121":{"position":[[1494,8]]},"122":{"position":[[791,8]]},"124":{"position":[[449,8],[733,8],[1035,9]]},"125":{"position":[[257,9]]},"157":{"position":[[174,10]]},"162":{"position":[[1513,9]]},"164":{"position":[[1496,8]]},"165":{"position":[[165,10]]},"179":{"position":[[465,8],[564,8],[605,9]]},"184":{"position":[[438,8],[466,8]]},"191":{"position":[[937,8],[992,8],[1777,8],[1825,8]]},"192":{"position":[[1086,9]]},"193":{"position":[[141,9]]},"196":{"position":[[94,9],[328,9]]},"197":{"position":[[728,8]]},"198":{"position":[[262,8]]},"199":{"position":[[271,9]]},"201":{"position":[[78,9]]},"204":{"position":[[33,9],[260,9],[675,8]]},"206":{"position":[[249,8],[429,10],[609,9],[771,8],[1076,9]]},"208":{"position":[[145,8],[1211,8]]},"209":{"position":[[314,8]]},"212":{"position":[[168,8]]},"213":{"position":[[431,9]]},"218":{"position":[[1535,8]]},"222":{"position":[[29,8]]},"223":{"position":[[29,8]]},"224":{"position":[[29,8],[154,9],[744,8],[1031,8],[1103,8],[1179,8]]},"232":{"position":[[404,9]]},"233":{"position":[[94,9],[335,9]]},"234":{"position":[[173,8],[288,8]]},"236":{"position":[[78,9],[117,8],[201,9],[405,8],[1725,9],[2784,8],[3746,8]]},"237":{"position":[[50,8],[461,9],[800,9],[2896,9],[3315,8],[3580,8]]},"238":{"position":[[50,8],[524,9],[654,8],[797,8]]},"239":{"position":[[431,8]]},"240":{"position":[[898,8],[953,8],[1738,8],[1786,8],[2278,10]]},"242":{"position":[[275,8],[580,8],[800,8],[852,8]]},"243":{"position":[[162,8]]},"259":{"position":[[930,9],[2511,9]]},"268":{"position":[[477,8]]},"278":{"position":[[468,9],[492,8],[1632,8]]},"281":{"position":[[124,8]]},"288":{"position":[[209,8],[389,9],[620,9]]},"289":{"position":[[179,8]]},"290":{"position":[[60,9],[145,9],[768,9],[802,8],[948,8],[1764,8]]},"292":{"position":[[107,8]]},"299":{"position":[[535,9]]},"308":{"position":[[620,8]]},"309":{"position":[[805,8]]},"310":{"position":[[178,8]]},"321":{"position":[[348,9],[656,9],[1398,9]]},"322":{"position":[[1882,9]]},"325":{"position":[[18,9],[187,9],[347,9],[384,8],[654,9],[708,9],[863,10]]},"326":{"position":[[24,9],[60,9],[184,8],[250,9],[491,8],[873,8]]},"344":{"position":[[98,9]]},"366":{"position":[[23,8],[353,9]]},"370":{"position":[[86,8],[329,8],[370,9],[380,8],[397,8],[481,8],[603,8],[845,8]]},"371":{"position":[[217,9],[1523,9]]},"402":{"position":[[192,9],[202,8],[228,8],[286,8],[390,8],[578,8]]},"403":{"position":[[197,9]]},"483":{"position":[[90,9],[676,9]]},"556":{"position":[[1337,8]]},"590":{"position":[[22,9]]},"591":{"position":[[76,9]]},"593":{"position":[[154,9],[164,8],[194,8]]},"750":{"position":[[46,8],[735,8],[1301,9]]},"752":{"position":[[120,9],[205,8]]},"753":{"position":[[59,8],[146,8],[861,8]]},"754":{"position":[[188,9],[450,9],[920,8],[1070,8]]},"757":{"position":[[119,8],[181,8],[309,8],[950,8],[976,8],[1082,9],[1612,8],[1974,8],[2084,9],[2339,9],[2404,9]]},"758":{"position":[[507,9]]},"764":{"position":[[330,8]]},"766":{"position":[[46,8],[735,8]]},"767":{"position":[[26,8],[80,9],[176,9],[247,9],[1213,8],[1276,8],[1433,9],[1841,8]]},"770":{"position":[[119,8],[181,8],[309,8],[950,8],[976,8],[1082,9],[1612,8],[1974,8],[2084,9],[2339,9],[2404,9]]},"771":{"position":[[507,9]]},"777":{"position":[[330,8]]},"779":{"position":[[20,9]]},"780":{"position":[[71,8],[235,10],[370,9],[408,9]]},"782":{"position":[[98,9],[205,8],[296,8],[327,9],[337,8],[383,9],[450,9],[555,8],[564,8]]},"783":{"position":[[232,9]]},"785":{"position":[[29,8]]},"788":{"position":[[216,8]]},"789":{"position":[[44,8],[790,8],[1136,8],[1702,9]]},"790":{"position":[[132,8]]},"791":{"position":[[73,9],[158,8]]},"792":{"position":[[86,8],[217,8],[1781,8]]},"793":{"position":[[31,8],[832,8]]},"794":{"position":[[323,9],[1126,8],[1274,8]]},"797":{"position":[[119,8],[181,8],[309,8],[950,8],[976,8],[1082,9],[1612,8],[2091,9],[2346,9]]},"798":{"position":[[505,9]]},"804":{"position":[[328,8]]},"807":{"position":[[44,8],[723,8]]},"808":{"position":[[31,8],[207,8],[778,8]]},"809":{"position":[[323,9],[1126,8],[1274,8]]},"812":{"position":[[119,8],[181,8],[309,8],[950,8],[976,8],[1082,9],[1612,8],[2091,9],[2346,9]]},"813":{"position":[[505,9]]},"819":{"position":[[328,8]]},"821":{"position":[[359,9]]},"823":{"position":[[44,8],[723,8]]},"824":{"position":[[31,8],[193,9],[288,9],[359,8],[1279,8],[1342,8],[1497,9],[1903,8]]},"825":{"position":[[323,9],[962,8],[1110,8]]},"828":{"position":[[119,8],[181,8],[309,8],[950,8],[976,8],[1082,9],[1612,8],[2091,9],[2346,9]]},"829":{"position":[[505,9]]},"835":{"position":[[328,8]]},"862":{"position":[[71,8]]},"864":{"position":[[22,8],[178,9],[1005,8],[1468,8],[1662,8]]},"867":{"position":[[112,8],[172,8],[268,8],[299,9],[309,8],[326,8],[937,8],[1096,8],[1567,8]]},"868":{"position":[[117,8],[222,9]]},"869":{"position":[[127,9],[416,8],[584,8]]},"870":{"position":[[216,8],[369,8],[456,8],[672,8],[841,8],[903,8]]},"874":{"position":[[71,8]]},"876":{"position":[[22,8],[178,9],[856,9],[922,8]]},"879":{"position":[[121,9],[321,9],[635,9],[1094,8]]},"903":{"position":[[26,8],[379,9]]},"904":{"position":[[31,8],[193,9],[288,9],[359,8],[1173,9],[1194,8]]},"907":{"position":[[112,8],[153,9],[163,8],[180,8],[264,8],[386,8],[628,8]]},"908":{"position":[[218,9],[551,9]]},"910":{"position":[[344,8]]},"911":{"position":[[190,8]]},"912":{"position":[[370,9],[1189,8]]},"914":{"position":[[250,8]]},"915":{"position":[[26,8],[379,9],[1158,9]]},"916":{"position":[[137,8]]},"917":{"position":[[106,8]]},"918":{"position":[[86,8],[217,8]]},"919":{"position":[[31,8]]},"922":{"position":[[1932,8],[2063,8],[2155,9],[2353,10],[3230,8]]},"923":{"position":[[112,8],[153,9],[163,8],[180,8],[264,8],[386,8],[628,8]]},"924":{"position":[[218,9],[551,9]]},"926":{"position":[[344,8]]},"927":{"position":[[190,8]]},"930":{"position":[[26,8],[379,9]]},"931":{"position":[[31,8],[207,8]]},"934":{"position":[[112,8],[153,9],[163,8],[180,8],[264,8],[386,8],[628,8]]},"935":{"position":[[218,9],[551,9]]},"937":{"position":[[344,8]]},"938":{"position":[[190,8]]},"942":{"position":[[131,9]]},"947":{"position":[[207,9],[986,8]]},"950":{"position":[[112,8],[153,9],[163,8],[180,8],[264,8],[386,8],[628,8]]},"951":{"position":[[218,9],[551,9]]},"953":{"position":[[344,8]]},"954":{"position":[[190,8]]},"963":{"position":[[35,8],[184,8],[533,9],[1312,9]]},"964":{"position":[[60,8],[327,9],[394,8],[653,9]]},"965":{"position":[[106,8]]},"968":{"position":[[112,8],[153,9],[163,8],[180,8],[264,8],[386,8],[628,8]]},"969":{"position":[[218,9],[551,9]]},"971":{"position":[[344,8]]},"972":{"position":[[190,8]]},"1031":{"position":[[82,8]]},"1032":{"position":[[311,8],[1365,8],[1444,8],[1548,8],[1649,8],[1753,8],[1854,8]]},"1034":{"position":[[273,9],[283,8],[318,8]]},"1037":{"position":[[181,9]]},"1039":{"position":[[103,9]]},"1040":{"position":[[154,9],[345,8],[431,9]]},"1042":{"position":[[102,9]]},"1043":{"position":[[31,8],[766,9]]},"1045":{"position":[[119,8],[160,9],[170,8],[187,8],[249,8],[371,8],[613,8]]},"1046":{"position":[[162,9],[485,9]]},"1047":{"position":[[428,8]]},"1049":{"position":[[29,9]]},"1050":{"position":[[154,9],[345,8],[431,9]]},"1051":{"position":[[31,8],[193,9],[288,9],[359,8],[1022,9]]},"1053":{"position":[[119,8],[160,9],[170,8],[187,8],[249,8],[371,8],[613,8]]},"1054":{"position":[[162,9],[485,9]]},"1055":{"position":[[428,8]]},"1057":{"position":[[32,9]]},"1058":{"position":[[154,9],[345,8],[431,9]]},"1059":{"position":[[31,8],[207,8],[786,9]]},"1061":{"position":[[119,8],[160,9],[170,8],[187,8],[249,8],[371,8],[613,8]]},"1062":{"position":[[162,9],[485,9]]},"1063":{"position":[[428,8]]},"1136":{"position":[[49,8],[149,8]]},"1137":{"position":[[234,9]]},"1138":{"position":[[86,8],[287,8],[316,8],[492,8],[531,8],[547,8],[747,8]]},"1139":{"position":[[118,9]]},"1149":{"position":[[278,8]]},"1150":{"position":[[160,9]]},"1151":{"position":[[98,9],[213,8],[304,8],[335,9],[345,8],[374,8],[461,8],[519,8],[535,8],[1189,8],[1391,8]]},"1152":{"position":[[245,9]]},"1154":{"position":[[407,8]]},"1162":{"position":[[824,8]]},"1178":{"position":[[417,9]]},"1203":{"position":[[49,8]]},"1206":{"position":[[285,9],[295,8],[325,9],[401,9]]},"1207":{"position":[[71,9]]},"1209":{"position":[[567,8]]},"1250":{"position":[[20,9]]},"1251":{"position":[[71,9],[119,8]]},"1253":{"position":[[98,9],[194,9],[204,8],[225,8],[278,8],[369,8]]},"1254":{"position":[[155,9],[272,9]]},"1259":{"position":[[152,9]]},"1260":{"position":[[158,9],[168,8],[181,8],[233,8],[249,8],[939,8]]},"1261":{"position":[[173,9]]},"1264":{"position":[[85,8]]},"1267":{"position":[[87,9],[175,9],[185,8],[214,8]]},"1270":{"position":[[125,9]]},"1281":{"position":[[46,8],[188,8],[407,9]]},"1282":{"position":[[102,8]]},"1283":{"position":[[25,8],[198,8],[391,9]]},"1284":{"position":[[232,9]]},"1285":{"position":[[70,8],[99,8],[181,9],[311,8],[353,8]]},"1286":{"position":[[380,9],[1183,8],[1335,8]]},"1287":{"position":[[116,9]]},"1289":{"position":[[25,8],[270,8],[350,8],[656,8],[1230,8],[1659,9]]},"1292":{"position":[[2009,8],[2051,9]]},"1295":{"position":[[46,8],[188,8],[407,9]]},"1297":{"position":[[26,8]]},"1298":{"position":[[29,8],[1062,8]]},"1299":{"position":[[232,9]]},"1300":{"position":[[70,8],[99,8],[181,9],[311,8],[353,8]]},"1301":{"position":[[380,9],[1019,8],[1171,8]]},"1302":{"position":[[116,9]]},"1303":{"position":[[31,8],[207,8],[941,8],[1248,9],[1320,9]]},"1306":{"position":[[2009,8],[2051,9]]},"1309":{"position":[[49,8],[149,8]]},"1310":{"position":[[102,8],[550,8],[980,9]]},"1311":{"position":[[29,8],[228,9]]},"1312":{"position":[[235,9]]},"1313":{"position":[[70,8],[99,8],[172,9],[302,8],[341,8],[357,8],[557,8]]},"1314":{"position":[[119,9]]},"1319":{"position":[[46,8],[188,8],[407,9]]},"1320":{"position":[[25,8]]},"1321":{"position":[[50,8],[130,8]]},"1322":{"position":[[29,8],[1449,8]]},"1323":{"position":[[232,9]]},"1324":{"position":[[70,8],[99,8],[181,9],[311,8],[353,8]]},"1325":{"position":[[380,9],[1183,8],[1335,8]]},"1326":{"position":[[116,9]]},"1329":{"position":[[2009,8],[2051,9]]},"1332":{"position":[[49,8],[149,8]]},"1333":{"position":[[25,8]]},"1334":{"position":[[50,8],[130,8]]},"1335":{"position":[[29,8],[1096,8]]},"1336":{"position":[[235,9]]},"1337":{"position":[[70,8],[99,8],[172,9],[302,8],[341,8],[357,8],[557,8]]},"1338":{"position":[[119,9]]},"1343":{"position":[[49,8],[149,8]]},"1344":{"position":[[25,8]]},"1345":{"position":[[26,8]]},"1346":{"position":[[29,8],[1062,8],[1370,9]]},"1347":{"position":[[235,9]]},"1348":{"position":[[70,8],[99,8],[172,9],[302,8],[341,8],[357,8],[557,8]]},"1349":{"position":[[119,9]]},"1370":{"position":[[788,8]]},"1372":{"position":[[50,8],[188,8]]},"1373":{"position":[[31,8],[193,9],[288,9],[1175,8]]},"1374":{"position":[[31,8],[193,9],[288,9],[1179,8]]},"1375":{"position":[[236,9]]},"1376":{"position":[[70,8],[99,8],[181,9],[311,8],[353,8]]},"1377":{"position":[[120,9]]},"1379":{"position":[[2045,8]]},"1382":{"position":[[82,9],[157,8]]},"1383":{"position":[[182,9],[885,8],[940,8],[1725,8],[1773,8]]},"1386":{"position":[[228,9],[238,8],[269,8],[333,8],[575,8]]},"1387":{"position":[[106,9],[660,9]]},"1394":{"position":[[940,8]]},"1396":{"position":[[50,8],[188,8]]},"1397":{"position":[[31,8],[208,8],[954,8]]},"1398":{"position":[[31,8],[207,8],[957,8]]},"1399":{"position":[[236,9]]},"1400":{"position":[[70,8],[99,8],[181,9],[311,8],[353,8]]},"1401":{"position":[[120,9]]},"1403":{"position":[[2045,8]]},"1406":{"position":[[50,8],[188,8]]},"1408":{"position":[[273,8]]},"1409":{"position":[[31,8],[937,8]]},"1410":{"position":[[236,9]]},"1411":{"position":[[70,8],[99,8],[181,9],[311,8],[353,8]]},"1412":{"position":[[120,9]]},"1414":{"position":[[2045,8]]},"1425":{"position":[[52,8]]},"1426":{"position":[[238,9],[293,8]]},"1427":{"position":[[70,8],[99,8],[172,8],[243,8],[282,8],[298,8],[498,8]]},"1428":{"position":[[122,9]]},"1437":{"position":[[51,9]]},"1447":{"position":[[112,8]]}},"keywords":{}}],["database'",{"_index":2182,"title":{},"content":{"197":{"position":[[78,10]]},"752":{"position":[[1009,10]]},"757":{"position":[[449,10]]},"770":{"position":[[449,10]]},"791":{"position":[[1043,10]]},"797":{"position":[[449,10]]},"812":{"position":[[449,10]]},"828":{"position":[[449,10]]},"1267":{"position":[[489,10]]},"1285":{"position":[[511,10]]},"1300":{"position":[[511,10]]},"1324":{"position":[[511,10]]}},"keywords":{}}],["database(",{"_index":2212,"title":{},"content":{"202":{"position":[[49,11]]},"780":{"position":[[108,12]]}},"keywords":{}}],["database.azur",{"_index":5980,"title":{},"content":{"1289":{"position":[[1644,14]]},"1310":{"position":[[965,14]]}},"keywords":{}}],["database.set",{"_index":4718,"title":{},"content":{"794":{"position":[[705,12]]},"809":{"position":[[705,12]]},"1286":{"position":[[762,12]]},"1325":{"position":[[762,12]]}},"keywords":{}}],["database.th",{"_index":5854,"title":{},"content":{"1203":{"position":[[496,12]]}},"keywords":{}}],["database/schema",{"_index":4719,"title":{},"content":{"797":{"position":[[1974,15]]},"812":{"position":[[1974,15]]},"828":{"position":[[1974,15]]}},"keywords":{}}],["database::<database>",{"_index":6298,"title":{},"content":{"1373":{"position":[[1221,26]]},"1374":{"position":[[1225,26]]},"1397":{"position":[[1000,26]]},"1398":{"position":[[1003,26]]},"1408":{"position":[[319,26]]},"1409":{"position":[[983,26]]}},"keywords":{}}],["database_nam",{"_index":2136,"title":{},"content":{"191":{"position":[[554,13]]},"240":{"position":[[515,13]]},"1032":{"position":[[275,13]]},"1383":{"position":[[502,13]]}},"keywords":{}}],["databasea",{"_index":6359,"title":{},"content":{"1382":{"position":[[194,9]]}},"keywords":{}}],["databaseamazon",{"_index":5235,"title":{},"content":{"1039":{"position":[[319,14]]},"1041":{"position":[[102,14]]},"1050":{"position":[[1017,14]]},"1407":{"position":[[102,14]]}},"keywords":{}}],["databases.a",{"_index":4705,"title":{},"content":{"789":{"position":[[901,12]]}},"keywords":{}}],["databrick",{"_index":5418,"title":{"1184":{"position":[[0,10]]}},"content":{"1120":{"position":[[797,10]]},"1185":{"position":[[40,10]]},"1186":{"position":[[93,10],[135,10],[420,10],[720,10]]},"1187":{"position":[[113,10],[203,10]]},"1191":{"position":[[184,10],[499,10]]},"1192":{"position":[[1,10],[263,11],[451,10]]}},"keywords":{}}],["databricks'",{"_index":5815,"title":{},"content":{"1192":{"position":[[195,12]]}},"keywords":{}}],["databricks:dev",{"_index":5419,"title":{},"content":{"1120":{"position":[[859,14]]},"1189":{"position":[[300,14]]}},"keywords":{}}],["datadog",{"_index":3853,"title":{"484":{"position":[[0,7]]},"487":{"position":[[12,7]]}},"content":{"487":{"position":[[8,7],[382,7],[505,7]]}},"keywords":{}}],["datafil",{"_index":6033,"title":{},"content":{"1292":{"position":[[2090,8]]},"1306":{"position":[[2090,8]]},"1329":{"position":[[2090,8]]}},"keywords":{}}],["dataflow",{"_index":1120,"title":{"187":{"position":[[18,8]]},"319":{"position":[[29,9]]}},"content":{"81":{"position":[[686,9]]},"319":{"position":[[165,9]]},"1176":{"position":[[592,9]]},"1185":{"position":[[392,9]]},"1194":{"position":[[602,9]]},"1203":{"position":[[763,9]]},"1226":{"position":[[403,9]]},"1243":{"position":[[180,9]]},"1354":{"position":[[427,9]]},"1382":{"position":[[646,9]]}},"keywords":{}}],["dataflowcustom",{"_index":3185,"title":{},"content":{"329":{"position":[[676,14]]}},"keywords":{}}],["datagen",{"_index":2527,"title":{},"content":{"236":{"position":[[1119,8],[1171,7],[2099,7],[2677,7]]},"237":{"position":[[3374,7]]}},"keywords":{}}],["datalink",{"_index":5531,"title":{},"content":{"1140":{"position":[[548,8]]},"1316":{"position":[[548,8]]},"1340":{"position":[[548,8]]},"1351":{"position":[[548,8]]},"1431":{"position":[[571,8]]}},"keywords":{}}],["dataset",{"_index":288,"title":{},"content":{"11":{"position":[[29,8]]},"34":{"position":[[23,8]]},"158":{"position":[[47,7]]},"180":{"position":[[75,7],[572,7],[917,8]]},"183":{"position":[[2535,8],[4621,8]]},"184":{"position":[[93,7]]},"190":{"position":[[1160,8]]},"239":{"position":[[2079,7],[2190,8]]},"245":{"position":[[23,8]]},"254":{"position":[[4004,8]]},"321":{"position":[[554,8]]},"322":{"position":[[420,8]]},"329":{"position":[[733,9]]},"330":{"position":[[618,9]]},"331":{"position":[[736,8]]},"417":{"position":[[2280,7]]},"419":{"position":[[1589,9]]},"441":{"position":[[198,9]]},"477":{"position":[[244,8]]},"479":{"position":[[285,7]]},"480":{"position":[[750,8]]},"482":{"position":[[149,7],[173,8],[182,7],[203,7]]},"504":{"position":[[1218,9]]},"545":{"position":[[1675,7]]},"547":{"position":[[1591,9]]},"595":{"position":[[1146,9]]},"605":{"position":[[220,8]]},"637":{"position":[[1215,7]]},"639":{"position":[[1216,9]]},"821":{"position":[[1034,7],[1457,8]]},"1023":{"position":[[1572,9]]},"1036":{"position":[[863,7]]},"1176":{"position":[[119,8],[336,7]]},"1178":{"position":[[235,8],[256,7],[359,7]]},"1179":{"position":[[147,8],[344,8],[353,7],[370,7],[1065,7],[1122,8],[1149,7]]},"1180":{"position":[[104,8]]},"1182":{"position":[[245,9]]},"1191":{"position":[[247,9]]},"1262":{"position":[[247,9]]},"1389":{"position":[[246,9]]},"1391":{"position":[[41,8]]}},"keywords":{}}],["dataset.select",{"_index":3827,"title":{},"content":{"479":{"position":[[537,14]]}},"keywords":{}}],["datasetroles/bigquery.jobus",{"_index":5787,"title":{},"content":{"1176":{"position":[[255,29]]}},"keywords":{}}],["datatyp",{"_index":4652,"title":{},"content":{"763":{"position":[[169,10]]},"776":{"position":[[169,10]]},"803":{"position":[[169,10]]},"818":{"position":[[169,10]]},"834":{"position":[[169,10]]}},"keywords":{}}],["date",{"_index":428,"title":{"1077":{"position":[[20,4]]},"1291":{"position":[[0,4]]},"1305":{"position":[[0,4]]},"1328":{"position":[[0,4]]}},"content":{"14":{"position":[[525,4],[780,4]]},"36":{"position":[[349,4]]},"94":{"position":[[1557,4],[1660,4],[1907,4],[2009,4]]},"96":{"position":[[246,5]]},"107":{"position":[[3077,5],[3494,5]]},"115":{"position":[[506,4]]},"120":{"position":[[1109,4],[1212,4],[1459,4],[1561,4]]},"123":{"position":[[393,4]]},"156":{"position":[[395,6]]},"164":{"position":[[1586,5]]},"183":{"position":[[1831,5],[1845,4],[1925,4],[1975,5],[2084,5],[2160,5],[2202,5],[2260,5],[2690,4],[3071,4],[3235,4],[3637,5],[3651,4],[3731,4],[3781,5],[4324,5]]},"196":{"position":[[307,4]]},"209":{"position":[[985,5]]},"233":{"position":[[314,4]]},"239":{"position":[[1778,4]]},"254":{"position":[[345,5],[359,4],[513,4],[535,5],[730,5],[1413,5],[1427,4],[1581,4],[1805,4],[2170,5],[2787,5],[3448,5],[3627,4]]},"277":{"position":[[1351,4]]},"281":{"position":[[180,4]]},"307":{"position":[[3261,4]]},"309":{"position":[[3585,4]]},"322":{"position":[[910,4],[1467,4],[1917,4]]},"323":{"position":[[870,4]]},"325":{"position":[[151,4]]},"326":{"position":[[914,4],[1528,5],[1781,4]]},"349":{"position":[[393,4],[451,5]]},"351":{"position":[[199,4],[204,4],[259,4]]},"373":{"position":[[336,4],[553,4]]},"377":{"position":[[1083,4],[1129,5],[1428,4],[1461,5]]},"387":{"position":[[1176,4],[1202,4]]},"424":{"position":[[203,4],[212,4],[283,4]]},"448":{"position":[[839,4],[920,4],[974,4]]},"454":{"position":[[393,4],[402,4],[473,4]]},"460":{"position":[[207,4],[216,4],[287,4]]},"466":{"position":[[137,4],[158,4]]},"496":{"position":[[422,4],[431,4],[488,5]]},"509":{"position":[[366,4],[375,4],[418,4]]},"517":{"position":[[1428,4],[1437,4],[1573,4],[1587,4],[1981,4],[1990,4],[2442,5],[2611,4],[2620,4],[2748,4],[3765,4],[3774,4],[3892,4]]},"526":{"position":[[63,4]]},"534":{"position":[[1399,4],[1408,4],[1594,4]]},"556":{"position":[[1684,4],[1704,4],[1755,4],[2069,4],[2078,4],[2130,4]]},"573":{"position":[[719,4],[728,4],[780,4]]},"584":{"position":[[694,4],[711,4],[726,5]]},"611":{"position":[[792,4],[801,4],[852,4],[919,4],[1059,4],[1068,4],[1120,4]]},"631":{"position":[[207,4],[216,4],[287,4],[346,4],[355,4],[426,4]]},"654":{"position":[[447,4],[456,4],[527,4]]},"670":{"position":[[503,4],[512,4],[583,4]]},"685":{"position":[[327,4],[336,4],[407,4]]},"700":{"position":[[155,4],[164,4],[235,4]]},"706":{"position":[[155,4],[164,4],[235,4]]},"720":{"position":[[678,4],[687,4],[739,4]]},"724":{"position":[[540,5]]},"741":{"position":[[270,4],[279,4],[350,4]]},"747":{"position":[[471,4],[684,4],[693,4],[745,4],[901,4],[910,4],[961,4],[1031,5],[1156,4]]},"842":{"position":[[1734,4],[1743,4],[1844,4],[2117,4]]},"846":{"position":[[302,5]]},"847":{"position":[[187,5]]},"851":{"position":[[205,4],[240,4]]},"859":{"position":[[498,4],[507,4],[592,4],[646,4],[693,5]]},"885":{"position":[[456,4],[465,4],[536,4]]},"891":{"position":[[159,4],[168,4],[249,4]]},"895":{"position":[[190,4],[246,4]]},"897":{"position":[[78,4],[85,4],[138,5],[184,4]]},"959":{"position":[[162,4],[171,4],[291,4]]},"977":{"position":[[460,4]]},"982":{"position":[[164,4],[173,4],[293,4]]},"1006":{"position":[[127,4]]},"1009":{"position":[[842,4],[853,4],[913,4]]},"1015":{"position":[[269,4],[278,4],[349,4]]},"1028":{"position":[[78,4],[87,4],[158,4],[216,4],[225,4],[296,4]]},"1070":{"position":[[654,4],[663,4],[734,4]]},"1076":{"position":[[616,4],[625,4],[706,4]]},"1077":{"position":[[80,4],[206,4],[501,4]]},"1085":{"position":[[708,4],[717,4],[865,4],[970,5],[1156,4],[1179,4],[1194,4],[1243,4]]},"1092":{"position":[[490,4]]},"1094":{"position":[[315,4],[324,4]]},"1107":{"position":[[78,4],[87,4],[227,4]]},"1113":{"position":[[207,4],[216,4],[287,4]]},"1133":{"position":[[776,4],[785,4],[921,4]]},"1140":{"position":[[578,4]]},"1164":{"position":[[361,4],[434,5],[440,4]]},"1172":{"position":[[467,5],[473,4],[520,4],[708,5],[714,4]]},"1209":{"position":[[589,4]]},"1222":{"position":[[467,5],[473,4],[520,4],[708,5],[714,4]]},"1286":{"position":[[146,4],[1385,4]]},"1291":{"position":[[1,4],[76,4]]},"1292":{"position":[[2127,4]]},"1301":{"position":[[146,4],[1221,4]]},"1305":{"position":[[1,4],[76,4]]},"1306":{"position":[[2127,4]]},"1316":{"position":[[578,4]]},"1317":{"position":[[744,5],[876,4]]},"1325":{"position":[[146,4],[1385,4]]},"1328":{"position":[[1,4],[76,4]]},"1329":{"position":[[2127,4]]},"1340":{"position":[[578,4]]},"1341":{"position":[[744,5],[876,4]]},"1351":{"position":[[578,4]]},"1352":{"position":[[744,5],[876,4]]},"1379":{"position":[[2101,4]]},"1391":{"position":[[624,6],[783,5],[829,6]]},"1403":{"position":[[2101,4]]},"1414":{"position":[[2101,4]]},"1431":{"position":[[601,4]]},"1432":{"position":[[758,5],[904,4]]},"1448":{"position":[[1058,4]]},"1451":{"position":[[293,5]]},"1452":{"position":[[2766,4]]},"1461":{"position":[[4682,5],[4803,4]]},"1479":{"position":[[333,4],[736,4],[765,4]]},"1480":{"position":[[815,4],[918,4],[1165,4],[1267,4]]},"1481":{"position":[[67,4],[89,4],[153,4]]}},"keywords":{}}],["date"",{"_index":825,"title":{},"content":{"55":{"position":[[955,10]]}},"keywords":{}}],["date($meta$dt",{"_index":2077,"title":{},"content":{"183":{"position":[[3053,14]]}},"keywords":{}}],["date($order_timestamp",{"_index":1553,"title":{},"content":{"107":{"position":[[3354,23],[4072,23]]}},"keywords":{}}],["date($timestamp",{"_index":1371,"title":{},"content":{"96":{"position":[[226,16]]}},"keywords":{}}],["date,"",{"_index":4950,"title":{},"content":{"895":{"position":[[166,11]]}},"keywords":{}}],["date/tim",{"_index":6725,"title":{},"content":{"1479":{"position":[[436,9]]}},"keywords":{}}],["date_ranges_start_d",{"_index":4218,"title":{},"content":{"584":{"position":[[670,23]]},"586":{"position":[[248,23]]}},"keywords":{}}],["date_window_s",{"_index":4565,"title":{},"content":{"747":{"position":[[1138,17]]},"748":{"position":[[374,17]]}},"keywords":{}}],["datesearch",{"_index":4298,"title":{},"content":{"605":{"position":[[276,10]]}},"keywords":{}}],["datetim",{"_index":4590,"title":{},"content":{"750":{"position":[[1079,9]]},"754":{"position":[[261,9],[1111,8]]},"757":{"position":[[390,8],[575,8]]},"766":{"position":[[1079,9]]},"770":{"position":[[390,8],[575,8]]},"789":{"position":[[1480,9]]},"794":{"position":[[134,9],[1315,8]]},"797":{"position":[[390,8],[575,8]]},"807":{"position":[[1067,9]]},"809":{"position":[[134,9],[1315,8]]},"812":{"position":[[390,8],[575,8]]},"823":{"position":[[1067,9]]},"825":{"position":[[134,9],[1151,8]]},"828":{"position":[[390,8],[575,8]]},"846":{"position":[[312,10]]},"1209":{"position":[[605,8]]},"1267":{"position":[[430,8]]},"1285":{"position":[[452,8]]},"1286":{"position":[[260,9]]},"1291":{"position":[[157,8]]},"1292":{"position":[[2170,8]]},"1300":{"position":[[452,8]]},"1301":{"position":[[260,9]]},"1305":{"position":[[157,8]]},"1306":{"position":[[2170,8]]},"1324":{"position":[[452,8]]},"1325":{"position":[[260,9]]},"1328":{"position":[[157,8]]},"1329":{"position":[[2170,8]]}},"keywords":{}}],["dave@estuary.dev",{"_index":3807,"title":{},"content":{"473":{"position":[[265,16]]}},"keywords":{}}],["day",{"_index":1974,"title":{},"content":{"168":{"position":[[267,4]]},"188":{"position":[[194,5]]},"198":{"position":[[753,4]]},"253":{"position":[[3223,4]]},"279":{"position":[[203,4]]},"331":{"position":[[90,5]]},"387":{"position":[[1285,4]]},"480":{"position":[[196,3]]},"517":{"position":[[2159,4],[2230,3],[2270,4],[2373,3],[2575,4]]},"554":{"position":[[365,4]]},"560":{"position":[[107,4],[160,4]]},"573":{"position":[[1063,4],[1093,4],[1214,4]]},"578":{"position":[[221,4]]},"584":{"position":[[987,4]]},"718":{"position":[[313,5]]},"724":{"position":[[382,5],[515,4]]},"747":{"position":[[387,5],[1199,5]]},"750":{"position":[[170,4],[296,4]]},"752":{"position":[[911,5]]},"766":{"position":[[170,4],[296,4]]},"767":{"position":[[1259,5],[2260,5]]},"789":{"position":[[204,4],[330,4]]},"791":{"position":[[945,5]]},"792":{"position":[[1555,5],[2252,5]]},"807":{"position":[[204,4],[330,4]]},"823":{"position":[[204,4],[330,4]]},"824":{"position":[[1325,5],[2374,5]]},"897":{"position":[[200,4]]},"900":{"position":[[142,3]]},"1015":{"position":[[172,6]]},"1067":{"position":[[228,5]]},"1068":{"position":[[53,3]]},"1076":{"position":[[390,4],[473,5]]},"1085":{"position":[[1107,4]]},"1086":{"position":[[333,3]]},"1087":{"position":[[307,4]]},"1140":{"position":[[614,3]]},"1292":{"position":[[2199,3]]},"1306":{"position":[[2199,3]]},"1316":{"position":[[614,3]]},"1329":{"position":[[2199,3]]},"1340":{"position":[[614,3]]},"1351":{"position":[[614,3]]},"1379":{"position":[[2147,3]]},"1403":{"position":[[2147,3]]},"1414":{"position":[[2147,3]]},"1431":{"position":[[637,3]]},"1452":{"position":[[135,3],[154,4],[466,4],[647,5],[762,3],[981,3],[1189,4],[1194,4],[1260,4],[1344,4],[1533,4],[2715,4],[2813,4],[3697,4],[3741,4],[3801,5],[3843,4],[4017,4],[4069,5],[4094,4],[4113,5],[4129,4],[4304,5],[4508,4]]},"1456":{"position":[[262,4]]}},"keywords":{}}],["day.onc",{"_index":3832,"title":{},"content":{"479":{"position":[[828,8]]}},"keywords":{}}],["day_hour",{"_index":6037,"title":{},"content":{"1292":{"position":[[2231,8]]},"1306":{"position":[[2231,8]]},"1329":{"position":[[2231,8]]}},"keywords":{}}],["day_microseco",{"_index":6039,"title":{},"content":{"1292":{"position":[[2276,13]]},"1306":{"position":[[2276,13]]},"1329":{"position":[[2276,13]]}},"keywords":{}}],["day_minut",{"_index":6040,"title":{},"content":{"1292":{"position":[[2321,10]]},"1306":{"position":[[2321,10]]},"1329":{"position":[[2321,10]]}},"keywords":{}}],["day_second",{"_index":6043,"title":{},"content":{"1292":{"position":[[2374,10]]},"1306":{"position":[[2374,10]]},"1329":{"position":[[2374,10]]}},"keywords":{}}],["daylight",{"_index":4606,"title":{},"content":{"754":{"position":[[715,8]]},"794":{"position":[[921,8]]},"809":{"position":[[921,8]]},"825":{"position":[[757,8]]},"1286":{"position":[[978,8]]},"1301":{"position":[[814,8]]},"1325":{"position":[[978,8]]},"1452":{"position":[[3291,8]]}},"keywords":{}}],["dayspubl",{"_index":4674,"title":{},"content":{"767":{"position":[[1580,10]]},"824":{"position":[[1644,10]]}},"keywords":{}}],["db",{"_index":1628,"title":{},"content":{"115":{"position":[[776,2]]},"191":{"position":[[927,2]]},"240":{"position":[[888,2]]},"767":{"position":[[983,2],[1484,2]]},"792":{"position":[[58,2],[1143,2],[1281,2],[1469,2]]},"794":{"position":[[652,2]]},"809":{"position":[[652,2]]},"824":{"position":[[1049,2],[1548,2]]},"904":{"position":[[1049,2]]},"918":{"position":[[58,2],[1119,2],[1332,2],[1464,2]]},"1152":{"position":[[255,2]]},"1207":{"position":[[84,2],[102,2]]},"1286":{"position":[[709,2]]},"1325":{"position":[[709,2]]},"1383":{"position":[[875,2]]},"1434":{"position":[[1999,2]]},"1461":{"position":[[4173,2]]}},"keywords":{}}],["db<br/>(where",{"_index":6442,"title":{},"content":{"1434":{"position":[[631,19]]}},"keywords":{}}],["db<br/>now",{"_index":6463,"title":{},"content":{"1434":{"position":[[2039,16]]}},"keywords":{}}],["dbc",{"_index":5811,"title":{},"content":{"1189":{"position":[[81,3]]}},"keywords":{}}],["dbcc",{"_index":6323,"title":{},"content":{"1379":{"position":[[2194,4]]},"1403":{"position":[[2194,4]]},"1414":{"position":[[2194,4]]}},"keywords":{}}],["dbname",{"_index":5119,"title":{},"content":{"947":{"position":[[929,6]]}},"keywords":{}}],["dbo",{"_index":5245,"title":{},"content":{"1042":{"position":[[436,6],[555,3],[1024,6]]},"1043":{"position":[[1100,6],[1219,3],[1688,6]]},"1046":{"position":[[305,3]]},"1051":{"position":[[1362,6],[1481,3],[1950,6]]},"1054":{"position":[[305,3]]},"1059":{"position":[[1155,6],[1274,3],[1743,6]]},"1062":{"position":[[305,3]]}},"keywords":{}}],["dbo.flow_watermark",{"_index":5247,"title":{},"content":{"1042":{"position":[[785,19]]},"1043":{"position":[[1449,19]]},"1051":{"position":[[1711,19]]},"1059":{"position":[[1504,19]]}},"keywords":{}}],["dbo.flow_watermarks(slot",{"_index":5246,"title":{},"content":{"1042":{"position":[[690,24]]},"1043":{"position":[[1354,24]]},"1051":{"position":[[1616,24]]},"1059":{"position":[[1409,24]]}},"keywords":{}}],["dbt",{"_index":3162,"title":{"324":{"position":[[0,4]]}},"content":{"324":{"position":[[1,3],[190,3],[362,4],[442,3],[837,3],[1157,4],[1177,3]]}},"keywords":{}}],["dd",{"_index":3494,"title":{},"content":{"387":{"position":[[1242,2]]},"448":{"position":[[990,2]]},"496":{"position":[[458,3]]},"573":{"position":[[755,3]]},"584":{"position":[[810,3]]},"747":{"position":[[720,3],[937,3]]},"895":{"position":[[206,2]]},"897":{"position":[[112,3]]},"1009":{"position":[[880,3]]},"1085":{"position":[[814,3],[1218,3]]},"1094":{"position":[[384,2]]}},"keywords":{}}],["ddl",{"_index":2543,"title":{},"content":{"236":{"position":[[1866,3]]}},"keywords":{}}],["ddt00:00:00z",{"_index":3951,"title":{},"content":{"517":{"position":[[1522,13],[2074,13],[2687,13],[3848,13]]},"534":{"position":[[1487,13]]},"670":{"position":[[548,13]]},"959":{"position":[[256,13]]},"982":{"position":[[258,13]]},"1107":{"position":[[183,13]]},"1133":{"position":[[877,13]]}},"keywords":{}}],["ddthh:mm:ss.000z",{"_index":4842,"title":{},"content":{"859":{"position":[[543,17]]}},"keywords":{}}],["ddthh:mm:ssz"",{"_index":4930,"title":{},"content":{"891":{"position":[[210,19]]}},"keywords":{}}],["de",{"_index":2708,"title":{},"content":{"253":{"position":[[1497,3],[2441,3],[2515,3]]},"313":{"position":[[1497,3],[2441,3],[2515,3]]},"602":{"position":[[886,2]]},"1467":{"position":[[1891,2]]},"1477":{"position":[[2793,2]]}},"keywords":{}}],["deal",{"_index":1013,"title":{},"content":{"67":{"position":[[1668,7]]},"912":{"position":[[1628,4]]}},"keywords":{}}],["dealloc",{"_index":5536,"title":{},"content":{"1140":{"position":[[655,10]]},"1292":{"position":[[2412,10]]},"1306":{"position":[[2412,10]]},"1316":{"position":[[655,10]]},"1329":{"position":[[2412,10]]},"1340":{"position":[[655,10]]},"1351":{"position":[[655,10]]},"1379":{"position":[[2233,10]]},"1403":{"position":[[2233,10]]},"1414":{"position":[[2233,10]]},"1423":{"position":[[736,10]]},"1431":{"position":[[678,10]]}},"keywords":{}}],["debezium",{"_index":3132,"title":{},"content":{"320":{"position":[[2471,8]]}},"keywords":{}}],["debit",{"_index":1520,"title":{},"content":{"107":{"position":[[686,5]]},"280":{"position":[[478,7],[1687,5],[1821,7]]},"281":{"position":[[1499,5]]}},"keywords":{}}],["debitsend",{"_index":2873,"title":{},"content":{"280":{"position":[[1614,11]]}},"keywords":{}}],["debitsender.sql",{"_index":2874,"title":{},"content":{"280":{"position":[[1744,15]]}},"keywords":{}}],["debug",{"_index":245,"title":{},"content":{"7":{"position":[[469,5],[759,5]]},"285":{"position":[[394,5]]},"344":{"position":[[374,5]]},"1471":{"position":[[173,10]]}},"keywords":{}}],["dec",{"_index":5540,"title":{},"content":{"1140":{"position":[[697,3]]},"1292":{"position":[[2462,3]]},"1306":{"position":[[2462,3]]},"1316":{"position":[[697,3]]},"1329":{"position":[[2462,3]]},"1340":{"position":[[697,3]]},"1351":{"position":[[697,3]]},"1379":{"position":[[2284,3]]},"1403":{"position":[[2284,3]]},"1414":{"position":[[2284,3]]},"1431":{"position":[[720,3]]}},"keywords":{}}],["decfloat",{"_index":5542,"title":{},"content":{"1140":{"position":[[735,8]]},"1316":{"position":[[735,8]]},"1340":{"position":[[735,8]]},"1351":{"position":[[735,8]]},"1431":{"position":[[758,8]]}},"keywords":{}}],["decid",{"_index":2430,"title":{},"content":{"217":{"position":[[1296,6]]},"333":{"position":[[381,7]]}},"keywords":{}}],["decim",{"_index":5543,"title":{},"content":{"1140":{"position":[[771,7]]},"1209":{"position":[[628,7]]},"1292":{"position":[[2493,7]]},"1306":{"position":[[2493,7]]},"1316":{"position":[[771,7]]},"1329":{"position":[[2493,7]]},"1340":{"position":[[771,7]]},"1351":{"position":[[771,7]]},"1379":{"position":[[2318,7]]},"1403":{"position":[[2318,7]]},"1414":{"position":[[2318,7]]},"1431":{"position":[[794,7]]}},"keywords":{}}],["decis",{"_index":3201,"title":{},"content":{"331":{"position":[[591,9]]}},"keywords":{}}],["declar",{"_index":1043,"title":{},"content":{"70":{"position":[[28,7],[454,8]]},"71":{"position":[[28,7]]},"76":{"position":[[328,7]]},"122":{"position":[[153,11]]},"210":{"position":[[518,11]]},"254":{"position":[[2216,7]]},"314":{"position":[[1757,7]]},"319":{"position":[[1149,8]]},"323":{"position":[[1951,11]]},"324":{"position":[[379,11]]},"332":{"position":[[733,11]]},"805":{"position":[[28,7]]},"820":{"position":[[28,7]]},"836":{"position":[[28,7]]},"1032":{"position":[[169,12]]},"1140":{"position":[[813,7]]},"1292":{"position":[[2529,7]]},"1306":{"position":[[2529,7]]},"1316":{"position":[[813,7]]},"1329":{"position":[[2529,7]]},"1340":{"position":[[813,7]]},"1351":{"position":[[813,7]]},"1379":{"position":[[2366,7]]},"1403":{"position":[[2366,7]]},"1414":{"position":[[2366,7]]},"1431":{"position":[[836,7]]}},"keywords":{}}],["decod",{"_index":3392,"title":{},"content":{"366":{"position":[[67,8]]},"922":{"position":[[869,8]]},"1118":{"position":[[543,6]]}},"keywords":{}}],["decompress",{"_index":3596,"title":{},"content":{"417":{"position":[[1505,10]]},"502":{"position":[[1153,10]]},"545":{"position":[[1107,10]]},"637":{"position":[[667,10]]},"1021":{"position":[[1664,10]]}},"keywords":{}}],["decreas",{"_index":535,"title":{},"content":{"20":{"position":[[478,8]]}},"keywords":{}}],["decrypt",{"_index":1147,"title":{},"content":{"82":{"position":[[399,8],[687,10],[2932,10],[3274,7]]}},"keywords":{}}],["dedic",{"_index":2568,"title":{"864":{"position":[[9,9]]},"876":{"position":[[9,9]]}},"content":{"237":{"position":[[353,9]]},"239":{"position":[[2751,9]]},"324":{"position":[[1137,9]]},"477":{"position":[[322,9]]},"598":{"position":[[286,9]]},"862":{"position":[[121,9]]},"864":{"position":[[12,9]]},"874":{"position":[[121,9]]},"876":{"position":[[12,9]]},"943":{"position":[[37,9]]},"964":{"position":[[622,9],[760,9]]},"985":{"position":[[520,9]]},"987":{"position":[[276,9]]},"989":{"position":[[49,9]]},"1000":{"position":[[698,9]]},"1002":{"position":[[276,9]]},"1004":{"position":[[49,9]]}},"keywords":{}}],["dedupl",{"_index":4406,"title":{},"content":{"660":{"position":[[409,11],[611,13],[910,11]]},"661":{"position":[[28,13],[112,11]]}},"keywords":{}}],["deep",{"_index":3004,"title":{},"content":{"296":{"position":[[2287,4]]},"1467":{"position":[[218,4],[1787,4]]}},"keywords":{}}],["deeper",{"_index":2322,"title":{},"content":{"210":{"position":[[2189,6]]}},"keywords":{}}],["deepli",{"_index":745,"title":{},"content":{"42":{"position":[[632,6]]},"164":{"position":[[585,6]]},"1467":{"position":[[708,6]]},"1476":{"position":[[1046,6]]},"1477":{"position":[[636,6]]}},"keywords":{}}],["default",{"_index":31,"title":{"166":{"position":[[0,7]]},"338":{"position":[[0,7]]}},"content":{"1":{"position":[[368,7],[494,7],[661,7],[792,7]]},"7":{"position":[[564,7]]},"17":{"position":[[519,8],[905,8]]},"42":{"position":[[443,8],[583,7]]},"56":{"position":[[2639,8]]},"62":{"position":[[204,8]]},"68":{"position":[[1563,8]]},"82":{"position":[[1569,7],[1631,7]]},"89":{"position":[[96,7]]},"94":{"position":[[1493,7],[1824,7],[2190,7],[2687,8],[3133,8]]},"120":{"position":[[1376,7],[1742,7],[2570,8]]},"122":{"position":[[948,7],[1706,8],[2215,8]]},"159":{"position":[[491,7]]},"163":{"position":[[274,7]]},"166":{"position":[[13,7],[299,7],[469,8],[493,7]]},"184":{"position":[[502,8]]},"192":{"position":[[1237,7]]},"203":{"position":[[356,7]]},"217":{"position":[[1401,8]]},"221":{"position":[[774,7]]},"225":{"position":[[218,7]]},"236":{"position":[[2516,7],[3301,7]]},"239":{"position":[[1735,8],[2871,7]]},"240":{"position":[[3061,7],[4156,8]]},"268":{"position":[[1369,8]]},"269":{"position":[[940,8]]},"308":{"position":[[228,7]]},"315":{"position":[[1285,7]]},"343":{"position":[[700,8],[1038,7]]},"355":{"position":[[50,8]]},"366":{"position":[[468,7]]},"367":{"position":[[506,7]]},"368":{"position":[[45,8]]},"379":{"position":[[1093,7]]},"381":{"position":[[543,8]]},"402":{"position":[[184,7]]},"417":{"position":[[1534,8],[1686,8],[2102,7]]},"419":{"position":[[231,8]]},"421":{"position":[[142,8]]},"429":{"position":[[63,7]]},"440":{"position":[[247,8]]},"443":{"position":[[501,8]]},"451":{"position":[[151,8]]},"454":{"position":[[509,7]]},"457":{"position":[[155,8]]},"463":{"position":[[261,8]]},"479":{"position":[[747,7]]},"480":{"position":[[1510,7]]},"483":{"position":[[201,7]]},"488":{"position":[[257,9]]},"492":{"position":[[440,8]]},"494":{"position":[[196,7]]},"496":{"position":[[267,7]]},"499":{"position":[[260,8]]},"502":{"position":[[1182,8],[1334,8]]},"504":{"position":[[168,8]]},"506":{"position":[[418,8]]},"512":{"position":[[131,8]]},"515":{"position":[[237,8]]},"517":{"position":[[15,8]]},"534":{"position":[[422,7]]},"537":{"position":[[164,8]]},"543":{"position":[[363,7]]},"545":{"position":[[713,7],[1136,8],[1288,8]]},"547":{"position":[[232,8]]},"550":{"position":[[415,8]]},"568":{"position":[[66,8]]},"574":{"position":[[33,7],[384,7]]},"577":{"position":[[463,7]]},"585":{"position":[[33,7]]},"588":{"position":[[458,7]]},"605":{"position":[[373,8]]},"622":{"position":[[379,8]]},"628":{"position":[[443,8]]},"631":{"position":[[462,7]]},"634":{"position":[[252,8]]},"637":{"position":[[696,8],[848,8]]},"639":{"position":[[167,8]]},"649":{"position":[[4,8]]},"657":{"position":[[487,8]]},"659":{"position":[[414,9]]},"660":{"position":[[539,8]]},"665":{"position":[[440,8]]},"667":{"position":[[228,8]]},"676":{"position":[[257,9]]},"680":{"position":[[440,8]]},"682":{"position":[[199,8]]},"691":{"position":[[257,9]]},"695":{"position":[[440,8]]},"697":{"position":[[568,8]]},"703":{"position":[[133,8]]},"709":{"position":[[821,8]]},"715":{"position":[[190,8]]},"738":{"position":[[745,8]]},"744":{"position":[[135,8]]},"747":{"position":[[355,7],[401,7],[583,7],[642,7],[658,7],[862,8],[1044,7],[1130,7],[1331,7]]},"750":{"position":[[374,7],[645,7],[1224,8]]},"754":{"position":[[64,8]]},"755":{"position":[[45,8]]},"766":{"position":[[374,7],[645,7],[1224,8]]},"768":{"position":[[45,8]]},"789":{"position":[[125,7],[184,7],[633,7],[1625,8]]},"791":{"position":[[917,7]]},"794":{"position":[[62,8]]},"795":{"position":[[43,8]]},"807":{"position":[[125,7],[184,7],[633,7],[1212,8]]},"809":{"position":[[62,8]]},"810":{"position":[[43,8]]},"821":{"position":[[835,7]]},"823":{"position":[[125,7],[184,7],[633,7],[1212,8]]},"825":{"position":[[62,8]]},"826":{"position":[[43,8]]},"842":{"position":[[248,8],[2756,7]]},"854":{"position":[[84,8]]},"857":{"position":[[105,8],[182,8]]},"867":{"position":[[357,8],[1618,8]]},"869":{"position":[[1444,7]]},"870":{"position":[[229,8]]},"877":{"position":[[154,7]]},"879":{"position":[[1390,7],[1407,7]]},"882":{"position":[[95,8]]},"888":{"position":[[150,8]]},"895":{"position":[[434,8]]},"897":{"position":[[156,9]]},"903":{"position":[[494,7]]},"904":{"position":[[1606,7]]},"905":{"position":[[48,8]]},"912":{"position":[[854,7]]},"915":{"position":[[494,7]]},"917":{"position":[[514,7]]},"918":{"position":[[1898,7]]},"919":{"position":[[1051,7],[1697,7]]},"920":{"position":[[48,8]]},"922":{"position":[[1504,7],[2096,8]]},"930":{"position":[[494,7]]},"931":{"position":[[1268,7]]},"932":{"position":[[48,8]]},"943":{"position":[[133,7]]},"944":{"position":[[257,7]]},"948":{"position":[[48,8]]},"956":{"position":[[171,8]]},"963":{"position":[[648,7]]},"964":{"position":[[4,8]]},"965":{"position":[[514,7]]},"966":{"position":[[48,8]]},"979":{"position":[[245,8]]},"994":{"position":[[103,8]]},"1012":{"position":[[230,8]]},"1021":{"position":[[1693,8],[1845,8]]},"1023":{"position":[[212,8]]},"1025":{"position":[[377,8]]},"1028":{"position":[[194,7]]},"1031":{"position":[[287,7]]},"1034":{"position":[[575,7]]},"1036":{"position":[[320,8]]},"1042":{"position":[[420,7]]},"1043":{"position":[[664,7],[1084,7]]},"1051":{"position":[[920,7],[1346,7]]},"1059":{"position":[[684,7],[1139,7]]},"1065":{"position":[[102,8]]},"1073":{"position":[[354,8]]},"1080":{"position":[[811,8]]},"1099":{"position":[[475,8]]},"1104":{"position":[[173,8]]},"1110":{"position":[[493,8]]},"1113":{"position":[[429,7]]},"1123":{"position":[[66,8]]},"1125":{"position":[[706,7]]},"1128":{"position":[[410,8]]},"1140":{"position":[[862,7]]},"1144":{"position":[[645,8],[949,8],[1113,8]]},"1151":{"position":[[453,7],[1507,7]]},"1158":{"position":[[70,7]]},"1170":{"position":[[645,8],[965,8],[1109,8]]},"1179":{"position":[[873,9]]},"1182":{"position":[[70,7]]},"1186":{"position":[[573,7]]},"1188":{"position":[[166,7],[387,7],[427,7]]},"1189":{"position":[[199,7],[492,7]]},"1191":{"position":[[70,7],[641,7]]},"1192":{"position":[[579,7]]},"1195":{"position":[[586,8]]},"1196":{"position":[[829,8],[1204,8]]},"1213":{"position":[[500,8],[626,8],[790,8]]},"1220":{"position":[[500,8],[642,8],[786,8]]},"1230":{"position":[[622,7],[706,7],[738,8],[891,7],[921,7]]},"1239":{"position":[[190,8]]},"1256":{"position":[[70,7]]},"1262":{"position":[[70,7]]},"1267":{"position":[[142,7]]},"1275":{"position":[[131,8]]},"1276":{"position":[[347,8]]},"1277":{"position":[[601,7]]},"1279":{"position":[[300,9]]},"1285":{"position":[[232,7]]},"1286":{"position":[[62,8]]},"1289":{"position":[[1343,8]]},"1290":{"position":[[70,7]]},"1292":{"position":[[2565,7]]},"1298":{"position":[[1175,8]]},"1300":{"position":[[232,7]]},"1301":{"position":[[62,8]]},"1303":{"position":[[1054,8]]},"1304":{"position":[[70,7]]},"1306":{"position":[[2565,7]]},"1310":{"position":[[664,8]]},"1313":{"position":[[223,7]]},"1315":{"position":[[71,7]]},"1316":{"position":[[862,7]]},"1322":{"position":[[1562,8]]},"1324":{"position":[[232,7]]},"1325":{"position":[[62,8]]},"1327":{"position":[[70,7]]},"1329":{"position":[[2565,7]]},"1335":{"position":[[1210,8]]},"1337":{"position":[[223,7]]},"1339":{"position":[[70,7]]},"1340":{"position":[[862,7]]},"1346":{"position":[[1176,8]]},"1348":{"position":[[223,7]]},"1350":{"position":[[70,7]]},"1351":{"position":[[862,7]]},"1358":{"position":[[945,8]]},"1370":{"position":[[803,7]]},"1373":{"position":[[902,7]]},"1374":{"position":[[902,7]]},"1376":{"position":[[232,7]]},"1378":{"position":[[70,7]]},"1379":{"position":[[2414,7]]},"1389":{"position":[[70,7]]},"1397":{"position":[[681,7]]},"1398":{"position":[[680,7]]},"1400":{"position":[[232,7]]},"1402":{"position":[[70,7]]},"1403":{"position":[[2414,7]]},"1409":{"position":[[664,7]]},"1411":{"position":[[232,7]]},"1413":{"position":[[70,7]]},"1414":{"position":[[2414,7]]},"1420":{"position":[[186,7]]},"1421":{"position":[[518,7]]},"1430":{"position":[[70,7]]},"1431":{"position":[[885,7]]},"1452":{"position":[[536,8],[2526,7]]},"1463":{"position":[[210,7]]},"1471":{"position":[[651,8]]},"1480":{"position":[[1082,7],[1448,7]]}},"keywords":{}}],["default)debugtrac",{"_index":2917,"title":{},"content":{"285":{"position":[[164,19]]}},"keywords":{}}],["default_auth",{"_index":6051,"title":{},"content":{"1292":{"position":[[2602,12]]},"1306":{"position":[[2602,12]]},"1329":{"position":[[2602,12]]}},"keywords":{}}],["default_rol",{"_index":2148,"title":{},"content":{"191":{"position":[[1196,12]]},"240":{"position":[[1157,12]]},"1032":{"position":[[853,12]]},"1383":{"position":[[1144,12]]}},"keywords":{}}],["default_warehous",{"_index":2149,"title":{},"content":{"191":{"position":[[1225,17]]},"240":{"position":[[1186,17]]},"1032":{"position":[[882,17]]},"1383":{"position":[[1173,17]]}},"keywords":{}}],["defect",{"_index":2900,"title":{},"content":{"281":{"position":[[2516,7]]}},"keywords":{}}],["defer",{"_index":5550,"title":{},"content":{"1140":{"position":[[936,8]]},"1316":{"position":[[936,8]]},"1340":{"position":[[936,8]]},"1351":{"position":[[936,8]]},"1370":{"position":[[834,8]]},"1379":{"position":[[2517,8]]},"1403":{"position":[[2517,8]]},"1414":{"position":[[2517,8]]},"1431":{"position":[[959,8]]},"1434":{"position":[[1353,8]]},"1442":{"position":[[881,8]]},"1443":{"position":[[280,5],[825,8]]}},"keywords":{}}],["deferr",{"_index":5548,"title":{},"content":{"1140":{"position":[[898,10]]},"1316":{"position":[[898,10]]},"1340":{"position":[[898,10]]},"1351":{"position":[[898,10]]},"1370":{"position":[[817,10]]},"1379":{"position":[[2465,10]]},"1403":{"position":[[2465,10]]},"1414":{"position":[[2465,10]]},"1431":{"position":[[921,10]]}},"keywords":{}}],["defin",{"_index":312,"title":{},"content":{"11":{"position":[[603,7]]},"24":{"position":[[22,7]]},"33":{"position":[[179,7]]},"46":{"position":[[94,6]]},"56":{"position":[[14,7],[933,7],[1340,6],[1556,7],[1854,7]]},"61":{"position":[[68,6]]},"64":{"position":[[99,6],[590,6],[639,6]]},"69":{"position":[[17,7]]},"75":{"position":[[195,7]]},"76":{"position":[[690,6],[812,6]]},"81":{"position":[[705,6]]},"83":{"position":[[732,6]]},"90":{"position":[[417,6]]},"91":{"position":[[118,6]]},"97":{"position":[[63,7]]},"99":{"position":[[257,7]]},"100":{"position":[[157,7]]},"105":{"position":[[336,7]]},"107":{"position":[[1251,7],[3180,6]]},"108":{"position":[[18,7]]},"110":{"position":[[22,6]]},"115":{"position":[[73,6]]},"120":{"position":[[22,7],[260,7],[699,6],[861,7],[2001,7]]},"133":{"position":[[235,6]]},"156":{"position":[[47,8],[124,7],[312,6]]},"159":{"position":[[517,6]]},"162":{"position":[[821,7],[1422,7],[1569,7],[1688,6],[1782,6]]},"164":{"position":[[25,7],[1410,6]]},"165":{"position":[[1677,7]]},"182":{"position":[[609,7],[652,6]]},"192":{"position":[[1344,7]]},"236":{"position":[[1962,7],[2634,6]]},"237":{"position":[[1240,8],[1968,7]]},"239":{"position":[[1164,7],[2178,6]]},"254":{"position":[[934,6],[1134,7],[1172,6],[1305,7],[1899,7],[2128,7],[2937,6]]},"255":{"position":[[843,7]]},"279":{"position":[[451,6]]},"296":{"position":[[1013,6],[1838,7],[2135,6],[2512,7],[2635,7],[2998,7],[6597,6],[6744,7]]},"305":{"position":[[306,7]]},"306":{"position":[[249,7]]},"307":{"position":[[982,7]]},"309":{"position":[[2061,7]]},"314":{"position":[[612,6],[855,7],[893,6],[995,6],[1658,7]]},"315":{"position":[[2495,7]]},"316":{"position":[[1168,7]]},"319":{"position":[[1048,6]]},"322":{"position":[[1372,6]]},"324":{"position":[[460,8]]},"326":{"position":[[424,7]]},"402":{"position":[[770,7]]},"410":{"position":[[140,6]]},"413":{"position":[[314,6]]},"419":{"position":[[194,7]]},"440":{"position":[[210,7]]},"483":{"position":[[42,7]]},"487":{"position":[[605,6]]},"504":{"position":[[131,7]]},"517":{"position":[[1150,6],[1364,6],[1853,6]]},"547":{"position":[[195,7]]},"556":{"position":[[1105,7]]},"574":{"position":[[505,8]]},"639":{"position":[[130,7]]},"747":{"position":[[1176,7]]},"1023":{"position":[[175,7]]},"1140":{"position":[[996,6]]},"1194":{"position":[[196,8]]},"1292":{"position":[[2650,7]]},"1306":{"position":[[2650,7]]},"1316":{"position":[[996,6]]},"1329":{"position":[[2650,7]]},"1340":{"position":[[996,6]]},"1351":{"position":[[996,6]]},"1358":{"position":[[293,7],[508,7],[819,7]]},"1431":{"position":[[1019,6]]},"1435":{"position":[[503,7]]},"1461":{"position":[[1560,8],[3181,6]]},"1480":{"position":[[35,7],[197,7]]}},"keywords":{}}],["definit",{"_index":254,"title":{},"content":{"7":{"position":[[661,10]]},"16":{"position":[[118,11]]},"64":{"position":[[291,11],[741,11]]},"69":{"position":[[335,10]]},"122":{"position":[[232,11]]},"157":{"position":[[264,11]]},"158":{"position":[[555,11],[642,11]]},"225":{"position":[[538,11]]},"234":{"position":[[128,10]]},"236":{"position":[[374,11],[2577,11]]},"296":{"position":[[1117,11]]},"314":{"position":[[1426,10],[1629,11],[2107,10]]},"371":{"position":[[19,10],[1429,10],[1559,12]]},"393":{"position":[[19,10],[412,10],[528,13]]},"398":{"position":[[19,10],[411,10],[519,12]]},"418":{"position":[[478,10],[611,12]]},"433":{"position":[[302,10],[838,10],[951,13]]},"497":{"position":[[317,10],[437,12]]},"518":{"position":[[1699,12]]},"546":{"position":[[1185,10],[1319,12]]},"575":{"position":[[1295,12]]},"620":{"position":[[365,12]]},"655":{"position":[[430,12]]},"736":{"position":[[470,12]]},"758":{"position":[[19,10],[413,10],[543,12]]},"771":{"position":[[19,10],[413,10],[543,12]]},"798":{"position":[[19,10],[411,10],[541,12]]},"813":{"position":[[19,10],[411,10],[541,12]]},"829":{"position":[[19,10],[411,10],[541,12]]},"908":{"position":[[19,10],[457,10],[587,12]]},"924":{"position":[[19,10],[457,10],[587,12]]},"935":{"position":[[19,10],[457,10],[587,12]]},"951":{"position":[[19,10],[457,10],[587,12]]},"969":{"position":[[19,10],[457,10],[587,12]]},"1040":{"position":[[269,10]]},"1046":{"position":[[391,10],[521,12]]},"1047":{"position":[[300,10]]},"1050":{"position":[[269,10]]},"1054":{"position":[[391,10],[521,12]]},"1055":{"position":[[300,10]]},"1058":{"position":[[269,10]]},"1062":{"position":[[391,10],[521,12]]},"1063":{"position":[[300,10]]},"1204":{"position":[[171,11]]},"1292":{"position":[[2686,10]]},"1306":{"position":[[2686,10]]},"1329":{"position":[[2686,10]]}},"keywords":{}}],["definitionsaudit",{"_index":5444,"title":{},"content":{"1128":{"position":[[98,16]]}},"keywords":{}}],["degre",{"_index":3146,"title":{},"content":{"321":{"position":[[2278,6]]},"332":{"position":[[514,8]]}},"keywords":{}}],["dekaf",{"_index":2628,"title":{"244":{"position":[[44,5]]},"248":{"position":[[18,6]]},"1115":{"position":[[0,5]]},"1116":{"position":[[10,5]]}},"content":{"247":{"position":[[32,6]]}},"keywords":{}}],["dekaf.estuary.dev:9092",{"_index":2648,"title":{},"content":{"250":{"position":[[283,25],[1445,22]]}},"keywords":{}}],["dekaf.estuary.devsasl",{"_index":5410,"title":{},"content":{"1118":{"position":[[388,21]]}},"keywords":{}}],["dekaf.estuary.devschema",{"_index":2636,"title":{},"content":{"247":{"position":[[99,23]]}},"keywords":{}}],["delay",{"_index":35,"title":{"110":{"position":[[5,6]]}},"content":{"1":{"position":[[424,5]]},"94":{"position":[[2601,5],[2699,6]]},"110":{"position":[[36,6],[118,5],[162,5],[370,7],[419,5],[902,5],[974,5],[1195,6],[1255,7],[1334,6]]},"163":{"position":[[751,6]]},"240":{"position":[[3117,5],[3347,5],[3470,5]]},"279":{"position":[[30,7],[822,5]]},"375":{"position":[[191,6]]},"377":{"position":[[587,6]]},"642":{"position":[[215,7]]},"1186":{"position":[[455,6],[581,5]]},"1292":{"position":[[2728,7]]},"1306":{"position":[[2728,7]]},"1329":{"position":[[2728,7]]},"1451":{"position":[[698,7],[741,5],[878,8]]}},"keywords":{}}],["delay"",{"_index":2605,"title":{},"content":{"240":{"position":[[2999,11],[4831,11]]}},"keywords":{}}],["delay_key_wri",{"_index":6058,"title":{},"content":{"1292":{"position":[[2777,13]]},"1306":{"position":[[2777,13]]},"1329":{"position":[[2777,13]]}},"keywords":{}}],["delaylearn",{"_index":1584,"title":{},"content":{"110":{"position":[[1494,10]]}},"keywords":{}}],["delayor",{"_index":1563,"title":{},"content":{"109":{"position":[[762,7]]}},"keywords":{}}],["deleg",{"_index":4304,"title":{},"content":{"609":{"position":[[379,10]]}},"keywords":{}}],["delet",{"_index":906,"title":{},"content":{"60":{"position":[[619,6]]},"97":{"position":[[356,6]]},"117":{"position":[[535,8]]},"138":{"position":[[232,6],[382,6]]},"141":{"position":[[542,6],[692,6]]},"142":{"position":[[345,6],[495,6]]},"168":{"position":[[256,7]]},"185":{"position":[[265,6]]},"196":{"position":[[165,10]]},"197":{"position":[[462,9],[1021,6],[1111,6],[1401,7]]},"210":{"position":[[4021,8]]},"233":{"position":[[165,10],[689,8]]},"242":{"position":[[913,6]]},"255":{"position":[[1071,6]]},"271":{"position":[[380,8]]},"279":{"position":[[1670,6]]},"296":{"position":[[8036,8]]},"297":{"position":[[140,6]]},"316":{"position":[[1396,6]]},"406":{"position":[[240,6],[359,6]]},"408":{"position":[[406,6],[433,6]]},"411":{"position":[[15,6],[56,7]]},"517":{"position":[[3025,7],[3051,7]]},"750":{"position":[[865,6]]},"752":{"position":[[817,6]]},"753":{"position":[[1473,6]]},"761":{"position":[[112,6]]},"766":{"position":[[865,6]]},"767":{"position":[[2150,6]]},"774":{"position":[[112,6]]},"786":{"position":[[225,6]]},"789":{"position":[[1266,6]]},"791":{"position":[[822,6]]},"792":{"position":[[2142,6]]},"793":{"position":[[1496,6]]},"801":{"position":[[112,6]]},"807":{"position":[[853,6]]},"808":{"position":[[1442,6]]},"816":{"position":[[112,6]]},"821":{"position":[[286,6]]},"823":{"position":[[853,6]]},"824":{"position":[[2264,6]]},"832":{"position":[[112,6]]},"911":{"position":[[582,8]]},"912":{"position":[[297,6]]},"922":{"position":[[1194,8],[1674,8],[1751,8]]},"927":{"position":[[582,8]]},"938":{"position":[[582,8]]},"954":{"position":[[582,8]]},"972":{"position":[[582,8]]},"1067":{"position":[[214,7]]},"1140":{"position":[[1036,6]]},"1208":{"position":[[66,8]]},"1209":{"position":[[651,6]]},"1292":{"position":[[2819,6]]},"1306":{"position":[[2819,6]]},"1316":{"position":[[1036,6]]},"1329":{"position":[[2819,6]]},"1340":{"position":[[1036,6]]},"1351":{"position":[[1036,6]]},"1370":{"position":[[853,6]]},"1379":{"position":[[2574,6]]},"1394":{"position":[[964,6]]},"1403":{"position":[[2574,6]]},"1414":{"position":[[2574,6]]},"1423":{"position":[[763,6]]},"1431":{"position":[[1059,6]]}},"keywords":{}}],["delete."",{"_index":2297,"title":{},"content":{"210":{"position":[[1207,13]]}},"keywords":{}}],["delete_messag",{"_index":3567,"title":{},"content":{"408":{"position":[[389,16]]}},"keywords":{}}],["deletefrom",{"_index":2837,"title":{},"content":{"278":{"position":[[644,10]]}},"keywords":{}}],["delimit",{"_index":105,"title":{},"content":{"3":{"position":[[111,9]]},"183":{"position":[[862,9]]},"267":{"position":[[1252,9]]},"270":{"position":[[881,9]]},"418":{"position":[[185,10]]},"419":{"position":[[1622,10]]},"439":{"position":[[442,10]]},"441":{"position":[[231,10]]},"504":{"position":[[1251,10]]},"534":{"position":[[272,9],[1143,9]]},"546":{"position":[[922,10]]},"547":{"position":[[1624,10]]},"638":{"position":[[214,10]]},"639":{"position":[[1249,10]]},"1022":{"position":[[251,10]]},"1023":{"position":[[1605,10]]},"1144":{"position":[[895,9]]},"1213":{"position":[[572,9]]}},"keywords":{}}],["deliv",{"_index":2201,"title":{},"content":{"198":{"position":[[810,9]]},"324":{"position":[[557,10]]},"330":{"position":[[53,7]]},"602":{"position":[[189,7]]},"1230":{"position":[[655,9]]}},"keywords":{}}],["deliveri",{"_index":4404,"title":{},"content":{"660":{"position":[[9,8]]}},"keywords":{}}],["delivery"",{"_index":4294,"title":{},"content":{"602":{"position":[[274,15]]}},"keywords":{}}],["delta",{"_index":1014,"title":{"125":{"position":[[0,5]]},"1158":{"position":[[0,5]]},"1182":{"position":[[0,5]]},"1191":{"position":[[0,5]]},"1199":{"position":[[0,5]]},"1208":{"position":[[0,5]]},"1233":{"position":[[0,5]]},"1256":{"position":[[0,5]]},"1262":{"position":[[0,5]]},"1279":{"position":[[0,5]]},"1290":{"position":[[0,5]]},"1304":{"position":[[0,5]]},"1315":{"position":[[0,5]]},"1327":{"position":[[0,5]]},"1339":{"position":[[0,5]]},"1350":{"position":[[0,5]]},"1358":{"position":[[0,5]]},"1369":{"position":[[0,5]]},"1378":{"position":[[0,5]]},"1389":{"position":[[0,5]]},"1402":{"position":[[0,5]]},"1413":{"position":[[0,5]]},"1430":{"position":[[0,5]]},"1440":{"position":[[22,5]]}},"content":{"67":{"position":[[1711,5]]},"125":{"position":[[711,5],[742,5],[1035,5],[1347,5]]},"291":{"position":[[1218,5]]},"302":{"position":[[1164,5]]},"326":{"position":[[702,5]]},"379":{"position":[[837,6],[1174,5]]},"602":{"position":[[979,5]]},"909":{"position":[[1205,5]]},"925":{"position":[[1205,5]]},"936":{"position":[[1205,5]]},"952":{"position":[[1205,5]]},"970":{"position":[[1205,5]]},"1007":{"position":[[105,5],[143,5]]},"1125":{"position":[[637,5],[691,5]]},"1138":{"position":[[1497,5],[1551,5]]},"1151":{"position":[[1438,5],[1492,5]]},"1158":{"position":[[51,5]]},"1162":{"position":[[960,5],[1015,5],[1069,5]]},"1179":{"position":[[1260,5],[1302,5]]},"1182":{"position":[[51,5],[116,5],[321,5],[422,5],[546,5]]},"1188":{"position":[[881,5],[922,5]]},"1191":{"position":[[51,5],[116,5],[323,5],[424,5],[550,5]]},"1196":{"position":[[1021,5],[1062,5]]},"1199":{"position":[[43,5],[120,5]]},"1208":{"position":[[132,5],[172,6]]},"1233":{"position":[[95,5]]},"1253":{"position":[[526,5],[580,5]]},"1256":{"position":[[51,5]]},"1260":{"position":[[986,5],[1040,5]]},"1262":{"position":[[51,5],[116,5],[323,5],[424,5],[550,5]]},"1279":{"position":[[33,5]]},"1286":{"position":[[2702,5],[2756,5]]},"1290":{"position":[[51,5]]},"1301":{"position":[[2538,5],[2592,5]]},"1304":{"position":[[51,5]]},"1313":{"position":[[1041,5],[1095,5]]},"1315":{"position":[[51,5]]},"1325":{"position":[[2702,5],[2756,5]]},"1327":{"position":[[51,5]]},"1337":{"position":[[1041,5],[1095,5]]},"1339":{"position":[[51,5]]},"1348":{"position":[[1041,5],[1095,5]]},"1350":{"position":[[51,5]]},"1358":{"position":[[40,5]]},"1369":{"position":[[33,5]]},"1376":{"position":[[617,5],[671,5]]},"1378":{"position":[[51,5]]},"1384":{"position":[[40,5],[1222,5]]},"1386":{"position":[[1275,5],[1316,5]]},"1389":{"position":[[51,5],[116,5],[322,5],[423,5],[548,5]]},"1392":{"position":[[153,5]]},"1400":{"position":[[617,5],[671,5]]},"1402":{"position":[[51,5]]},"1411":{"position":[[617,5],[671,5]]},"1413":{"position":[[51,5]]},"1427":{"position":[[801,5],[855,5]]},"1430":{"position":[[51,5]]},"1440":{"position":[[286,5],[431,5],[563,5],[891,5],[969,5],[1072,5],[1107,5],[1260,5],[1353,5],[1507,5]]},"1443":{"position":[[1105,5]]}},"keywords":{}}],["delta_upd",{"_index":5441,"title":{},"content":{"1125":{"position":[[622,14]]},"1138":{"position":[[1482,14]]},"1151":{"position":[[1423,14]]},"1162":{"position":[[945,14]]},"1163":{"position":[[347,14]]},"1179":{"position":[[1245,14]]},"1182":{"position":[[629,14]]},"1188":{"position":[[866,14]]},"1191":{"position":[[649,14]]},"1196":{"position":[[1006,14]]},"1253":{"position":[[511,14]]},"1260":{"position":[[971,14]]},"1262":{"position":[[633,14]]},"1286":{"position":[[2687,14]]},"1301":{"position":[[2523,14]]},"1313":{"position":[[1026,14]]},"1325":{"position":[[2687,14]]},"1337":{"position":[[1026,14]]},"1348":{"position":[[1026,14]]},"1376":{"position":[[602,14]]},"1386":{"position":[[1260,14]]},"1389":{"position":[[631,14]]},"1400":{"position":[[602,14]]},"1411":{"position":[[602,14]]},"1427":{"position":[[786,14]]}},"keywords":{}}],["delv",{"_index":2321,"title":{},"content":{"210":{"position":[[2183,5]]}},"keywords":{}}],["demo",{"_index":2056,"title":{"181":{"position":[[22,5]]}},"content":{"181":{"position":[[22,4],[174,4]]},"184":{"position":[[344,5]]},"236":{"position":[[1940,4]]},"253":{"position":[[358,5],[419,4],[1106,4]]},"254":{"position":[[1149,5],[3131,4]]},"313":{"position":[[358,5],[419,4],[1106,4]]},"314":{"position":[[870,5],[2706,4]]}},"keywords":{}}],["demo/wikipedia/recentchang",{"_index":2058,"title":{},"content":{"182":{"position":[[62,27],[378,27]]},"183":{"position":[[249,28],[1383,27],[3903,27]]},"184":{"position":[[666,27]]},"253":{"position":[[515,27],[618,27],[890,27]]},"254":{"position":[[621,27],[2678,27],[3037,27]]},"313":{"position":[[515,27],[618,27],[890,27]]},"314":{"position":[[498,27],[2353,27],[2612,27]]}},"keywords":{}}],["demonstr",{"_index":2618,"title":{},"content":{"241":{"position":[[373,12]]},"253":{"position":[[736,11]]},"313":{"position":[[736,11]]}},"keywords":{}}],["deni",{"_index":2861,"title":{},"content":{"280":{"position":[[316,4],[1368,6],[1415,5]]},"1379":{"position":[[2614,4]]},"1403":{"position":[[2614,4]]},"1414":{"position":[[2614,4]]}},"keywords":{}}],["deno",{"_index":1480,"title":{},"content":{"103":{"position":[[778,4]]}},"keywords":{}}],["deno.json",{"_index":1478,"title":{},"content":{"103":{"position":[[672,9]]},"296":{"position":[[3862,9],[4112,9]]},"315":{"position":[[319,9],[591,9]]}},"keywords":{}}],["denoand",{"_index":1460,"title":{},"content":{"102":{"position":[[179,7]]}},"keywords":{}}],["dense_rank",{"_index":5559,"title":{},"content":{"1140":{"position":[[1082,10]]},"1292":{"position":[[2873,10]]},"1306":{"position":[[2873,10]]},"1316":{"position":[[1082,10]]},"1329":{"position":[[2873,10]]},"1340":{"position":[[1082,10]]},"1351":{"position":[[1082,10]]},"1431":{"position":[[1105,10]]}},"keywords":{}}],["depart",{"_index":2826,"title":{},"content":{"277":{"position":[[102,10],[1254,10]]}},"keywords":{}}],["depend",{"_index":515,"title":{},"content":{"19":{"position":[[183,9]]},"26":{"position":[[586,9]]},"63":{"position":[[756,12],[861,12]]},"66":{"position":[[620,7]]},"91":{"position":[[198,12]]},"94":{"position":[[2307,7]]},"101":{"position":[[42,6]]},"115":{"position":[[1293,7]]},"125":{"position":[[1376,7]]},"135":{"position":[[136,9]]},"159":{"position":[[983,7]]},"209":{"position":[[1309,7]]},"217":{"position":[[1136,9]]},"218":{"position":[[1326,9]]},"221":{"position":[[794,9]]},"225":{"position":[[238,9]]},"263":{"position":[[948,9]]},"306":{"position":[[73,9]]},"309":{"position":[[133,7]]},"320":{"position":[[1876,9]]},"339":{"position":[[140,9]]},"522":{"position":[[348,7]]},"530":{"position":[[348,7]]},"534":{"position":[[996,7]]},"595":{"position":[[1782,9]]},"754":{"position":[[655,9]]},"785":{"position":[[498,7]]},"794":{"position":[[861,9]]},"809":{"position":[[861,9]]},"821":{"position":[[989,9]]},"825":{"position":[[697,9]]},"870":{"position":[[152,9]]},"922":{"position":[[3187,7]]},"1081":{"position":[[22,9]]},"1172":{"position":[[90,9]]},"1222":{"position":[[90,9]]},"1243":{"position":[[1353,6]]},"1286":{"position":[[918,9]]},"1301":{"position":[[754,9]]},"1325":{"position":[[918,9]]},"1436":{"position":[[92,7]]},"1449":{"position":[[670,9]]},"1461":{"position":[[2541,10]]}},"keywords":{}}],["depends_on",{"_index":2537,"title":{},"content":{"236":{"position":[[1428,11]]}},"keywords":{}}],["deploy",{"_index":1105,"title":{},"content":{"79":{"position":[[200,9]]},"80":{"position":[[85,11]]},"82":{"position":[[3199,9]]},"190":{"position":[[1894,8]]},"199":{"position":[[325,11]]},"203":{"position":[[39,6],[173,11]]},"204":{"position":[[91,6]]},"216":{"position":[[596,6]]},"219":{"position":[[17,8]]},"239":{"position":[[2934,6]]},"240":{"position":[[4223,10]]},"241":{"position":[[223,6]]},"281":{"position":[[2539,9]]},"292":{"position":[[25,9]]},"303":{"position":[[25,9]]},"319":{"position":[[115,11]]},"333":{"position":[[107,12]]},"427":{"position":[[108,9]]},"529":{"position":[[391,11]]},"780":{"position":[[422,6]]},"1039":{"position":[[41,11]]},"1067":{"position":[[131,6]]},"1356":{"position":[[258,11]]}},"keywords":{}}],["deprec",{"_index":3662,"title":{},"content":{"429":{"position":[[1160,10]]},"606":{"position":[[465,9]]}},"keywords":{}}],["depth",{"_index":2806,"title":{},"content":{"268":{"position":[[1654,5]]},"269":{"position":[[1175,5]]},"322":{"position":[[1143,6]]},"1379":{"position":[[2664,5]]},"1403":{"position":[[2664,5]]},"1414":{"position":[[2664,5]]}},"keywords":{}}],["der",{"_index":6387,"title":{},"content":{"1384":{"position":[[1031,3]]}},"keywords":{}}],["deref",{"_index":5562,"title":{},"content":{"1140":{"position":[[1128,5]]},"1316":{"position":[[1128,5]]},"1340":{"position":[[1128,5]]},"1351":{"position":[[1128,5]]},"1379":{"position":[[2710,5]]},"1403":{"position":[[2710,5]]},"1414":{"position":[[2710,5]]},"1431":{"position":[[1151,5]]}},"keywords":{}}],["deriv",{"_index":268,"title":{"40":{"position":[[0,12]]},"91":{"position":[[10,10]]},"93":{"position":[[0,11]]},"183":{"position":[[6,10]]},"229":{"position":[[0,7]]},"254":{"position":[[12,11]]},"265":{"position":[[9,10]]},"268":{"position":[[10,10]]},"269":{"position":[[17,10]]},"270":{"position":[[9,10]]},"271":{"position":[[21,11]]},"276":{"position":[[13,11]]},"296":{"position":[[12,11]]},"314":{"position":[[12,11]]}},"content":{"8":{"position":[[545,12]]},"11":{"position":[[251,11]]},"17":{"position":[[60,12],[299,10]]},"21":{"position":[[667,11],[689,10]]},"32":{"position":[[453,12]]},"33":{"position":[[101,12]]},"40":{"position":[[3,10],[183,11],[399,11]]},"43":{"position":[[64,11],[183,12],[385,7]]},"44":{"position":[[11,12],[414,10]]},"64":{"position":[[128,12],[599,10]]},"66":{"position":[[199,12]]},"67":{"position":[[746,7],[1345,7]]},"69":{"position":[[856,10],[1019,7]]},"70":{"position":[[199,11]]},"74":{"position":[[664,10]]},"77":{"position":[[450,11]]},"91":{"position":[[16,11],[274,10],[380,10]]},"94":{"position":[[3,10],[69,6],[123,11],[208,8],[248,11],[275,7],[306,10],[367,10],[731,10],[852,11],[1076,7],[2324,10],[2357,10],[3119,11]]},"95":{"position":[[45,11],[111,10]]},"96":{"position":[[108,7],[505,10],[697,11],[841,11]]},"97":{"position":[[606,7],[693,10]]},"100":{"position":[[351,7],[851,11],[929,7],[1090,10],[1142,7]]},"102":{"position":[[19,10],[148,11],[348,11],[534,11]]},"103":{"position":[[26,10],[147,11],[165,10]]},"104":{"position":[[333,12]]},"105":{"position":[[49,11],[115,10],[467,10],[800,11],[912,10]]},"106":{"position":[[408,11],[695,10]]},"107":{"position":[[937,11],[1685,10],[3639,10],[3921,7]]},"108":{"position":[[221,7]]},"109":{"position":[[155,10],[356,10],[409,10],[507,11]]},"110":{"position":[[291,10]]},"112":{"position":[[1,10],[160,11],[280,7],[311,12],[397,11]]},"113":{"position":[[1,10],[478,11]]},"114":{"position":[[53,11],[125,11],[208,7],[307,7],[542,7]]},"115":{"position":[[82,10],[285,7],[624,10],[787,7],[1584,10]]},"117":{"position":[[124,12]]},"129":{"position":[[254,11]]},"131":{"position":[[56,12]]},"135":{"position":[[679,12]]},"141":{"position":[[922,11],[1197,11],[1366,10],[1423,10],[1503,10],[2012,10]]},"149":{"position":[[908,12],[978,11]]},"162":{"position":[[514,10]]},"166":{"position":[[581,12]]},"180":{"position":[[373,11],[851,11]]},"182":{"position":[[557,11],[571,10]]},"183":{"position":[[19,10],[327,10],[733,10],[887,10],[1273,7],[3388,10],[3787,7],[4017,10],[4410,10],[4446,11]]},"184":{"position":[[799,8]]},"186":{"position":[[7,11]]},"213":{"position":[[381,11]]},"219":{"position":[[616,10]]},"227":{"position":[[306,12]]},"229":{"position":[[44,11],[86,7]]},"253":{"position":[[47,12],[790,10],[1180,11]]},"254":{"position":[[81,11],[552,7],[2575,7],[2609,7]]},"255":{"position":[[44,10],[898,10],[971,10],[1193,11],[1286,10]]},"256":{"position":[[65,10]]},"257":{"position":[[152,12]]},"259":{"position":[[1336,12]]},"266":{"position":[[426,10]]},"267":{"position":[[19,10],[195,6],[577,12],[702,10],[1101,10],[1277,10],[1374,10],[1594,11]]},"268":{"position":[[273,10],[502,10],[588,10],[725,11],[905,7],[1152,10],[1497,11],[1601,11],[1680,11],[1775,10],[1885,11],[1946,10]]},"269":{"position":[[239,10],[350,11],[530,7],[723,10],[1076,11],[1122,11],[1201,11],[1232,10],[1347,11],[1408,10]]},"270":{"position":[[12,10],[397,11],[1221,10],[1311,10],[1512,6],[1844,10],[1962,11],[2024,10]]},"271":{"position":[[1,11],[105,10],[152,7]]},"277":{"position":[[37,12],[245,10],[359,10],[627,7],[804,7],[884,7],[912,10],[940,10],[1135,7]]},"278":{"position":[[401,11],[952,7],[1359,10],[1570,10]]},"279":{"position":[[695,10],[1215,7]]},"280":{"position":[[726,6],[1005,10],[1465,7]]},"281":{"position":[[41,11],[498,11],[612,10],[939,7],[1327,10],[1370,10],[2383,11],[2435,11],[2554,10],[2641,11]]},"292":{"position":[[217,11],[229,11],[303,11]]},"295":{"position":[[1476,12]]},"296":{"position":[[81,11],[677,7],[1048,10],[2612,10],[2678,7],[3442,10],[3707,10],[4455,7],[5373,10],[5450,10],[5834,10],[6025,10],[6102,10],[6774,10],[7415,10]]},"297":{"position":[[53,10]]},"303":{"position":[[208,11],[220,11],[294,11]]},"305":{"position":[[199,11]]},"313":{"position":[[47,12],[790,10],[1180,11],[3521,11]]},"314":{"position":[[81,11],[385,7],[2206,7],[2240,7],[2989,10]]},"315":{"position":[[396,10],[945,7],[1463,10],[1546,10],[1841,10]]},"316":{"position":[[44,10],[1223,10],[1296,10],[1518,11],[1611,10]]},"317":{"position":[[72,10]]},"320":{"position":[[2041,12]]},"321":{"position":[[707,7],[1645,6]]},"322":{"position":[[197,12],[1548,12]]},"343":{"position":[[740,12]]},"517":{"position":[[1124,6],[1338,6],[1827,6]]},"909":{"position":[[1237,10]]},"925":{"position":[[1237,10]]},"936":{"position":[[1237,10]]},"952":{"position":[[1237,10]]},"970":{"position":[[1237,10]]},"1123":{"position":[[786,10],[800,6]]},"1157":{"position":[[210,7]]},"1243":{"position":[[571,10]]},"1438":{"position":[[782,12]]},"1446":{"position":[[293,12]]},"1459":{"position":[[587,7]]},"1461":{"position":[[2365,10],[5535,7]]},"1473":{"position":[[231,12]]},"1475":{"position":[[785,7],[793,10],[822,10],[1468,11],[1531,10],[1648,10],[1791,10],[1901,10],[2012,10]]}},"keywords":{}}],["derivation'",{"_index":968,"title":{},"content":{"64":{"position":[[728,12]]},"94":{"position":[[2479,12]]},"111":{"position":[[439,12]]},"114":{"position":[[461,12]]},"141":{"position":[[1227,12]]},"268":{"position":[[87,12]]},"269":{"position":[[94,12]]}},"keywords":{}}],["derivation.compar",{"_index":271,"title":{},"content":{"8":{"position":[[629,18]]}},"keywords":{}}],["derivation.deriv",{"_index":2128,"title":{},"content":{"190":{"position":[[1468,22]]}},"keywords":{}}],["derivation.for",{"_index":6667,"title":{},"content":{"1470":{"position":[[1202,14]]}},"keywords":{}}],["derivation.pend",{"_index":1818,"title":{},"content":{"141":{"position":[[1333,18]]}},"keywords":{}}],["derivation.t",{"_index":1476,"title":{},"content":{"103":{"position":[[549,14]]}},"keywords":{}}],["derivation/",{"_index":592,"title":{},"content":{"23":{"position":[[538,12]]}},"keywords":{}}],["derivation/b",{"_index":590,"title":{},"content":{"23":{"position":[[467,12]]}},"keywords":{}}],["derivations/registers/createdtot",{"_index":6707,"title":{},"content":{"1475":{"position":[[1912,35]]}},"keywords":{}}],["derivations/transforms/transformstat",{"_index":6702,"title":{},"content":{"1475":{"position":[[1393,38]]}},"keywords":{}}],["derivations/transforms/transformstats/input",{"_index":6703,"title":{},"content":{"1475":{"position":[[1542,44]]}},"keywords":{}}],["derivations/transforms/transformstats/publish",{"_index":6706,"title":{},"content":{"1475":{"position":[[1802,46]]}},"keywords":{}}],["derivations/transforms/transformstats/upd",{"_index":6705,"title":{},"content":{"1475":{"position":[[1659,45]]}},"keywords":{}}],["des_key_fil",{"_index":5983,"title":{},"content":{"1292":{"position":[[384,12]]},"1306":{"position":[[384,12]]},"1329":{"position":[[384,12]]}},"keywords":{}}],["desc",{"_index":5566,"title":{},"content":{"1140":{"position":[[1164,4]]},"1292":{"position":[[2923,4]]},"1306":{"position":[[2923,4]]},"1316":{"position":[[1164,4]]},"1329":{"position":[[2923,4]]},"1340":{"position":[[1164,4]]},"1351":{"position":[[1164,4]]},"1370":{"position":[[871,4]]},"1379":{"position":[[2754,4]]},"1384":{"position":[[780,4]]},"1403":{"position":[[2754,4]]},"1414":{"position":[[2754,4]]},"1431":{"position":[[1187,4]]}},"keywords":{}}],["descend",{"_index":5188,"title":{},"content":{"1019":{"position":[[87,7]]}},"keywords":{}}],["describ",{"_index":594,"title":{},"content":{"24":{"position":[[34,9]]},"26":{"position":[[199,9]]},"32":{"position":[[576,9]]},"60":{"position":[[184,9]]},"61":{"position":[[875,9]]},"125":{"position":[[4,9]]},"137":{"position":[[615,9]]},"165":{"position":[[2153,8]]},"210":{"position":[[1825,11]]},"285":{"position":[[436,10]]},"321":{"position":[[14,9]]},"322":{"position":[[621,10]]},"432":{"position":[[646,10]]},"483":{"position":[[113,10],[242,9]]},"573":{"position":[[638,10]]},"584":{"position":[[560,10]]},"611":{"position":[[696,10]]},"753":{"position":[[444,9]]},"761":{"position":[[239,9]]},"764":{"position":[[894,9]]},"767":{"position":[[590,9]]},"774":{"position":[[239,9]]},"777":{"position":[[894,9]]},"784":{"position":[[243,9]]},"792":{"position":[[579,9],[868,9]]},"793":{"position":[[403,9]]},"801":{"position":[[245,9]]},"804":{"position":[[892,9]]},"808":{"position":[[419,9]]},"816":{"position":[[245,9]]},"819":{"position":[[892,9]]},"824":{"position":[[371,9],[660,9]]},"832":{"position":[[245,9]]},"835":{"position":[[892,9]]},"866":{"position":[[420,9]]},"878":{"position":[[430,9]]},"904":{"position":[[371,9],[659,9]]},"918":{"position":[[579,9],[868,9]]},"919":{"position":[[403,9]]},"931":{"position":[[423,9]]},"1036":{"position":[[548,9]]},"1043":{"position":[[403,9]]},"1051":{"position":[[371,9],[659,9]]},"1059":{"position":[[423,9]]},"1140":{"position":[[1213,8]]},"1154":{"position":[[609,9]]},"1198":{"position":[[332,9]]},"1209":{"position":[[671,8]]},"1255":{"position":[[243,9]]},"1289":{"position":[[949,9]]},"1292":{"position":[[311,8]]},"1303":{"position":[[423,9],[660,9]]},"1306":{"position":[[311,8]]},"1316":{"position":[[1213,8]]},"1322":{"position":[[1168,9]]},"1329":{"position":[[311,8]]},"1340":{"position":[[1213,8]]},"1351":{"position":[[1213,8]]},"1373":{"position":[[353,9],[641,9]]},"1374":{"position":[[353,9],[641,9]]},"1379":{"position":[[2804,8]]},"1397":{"position":[[420,9]]},"1398":{"position":[[419,9]]},"1403":{"position":[[2804,8]]},"1409":{"position":[[403,9]]},"1414":{"position":[[2804,8]]},"1423":{"position":[[787,8]]},"1431":{"position":[[1236,8]]}},"keywords":{}}],["descript",{"_index":1716,"title":{},"content":{"128":{"position":[[422,12],[615,12]]},"130":{"position":[[168,12]]},"132":{"position":[[417,12],[573,12]]},"159":{"position":[[175,11],[276,12],[291,11],[809,12],[863,12],[906,12],[947,11]]},"162":{"position":[[2057,12]]},"206":{"position":[[89,11]]},"280":{"position":[[1329,12]]},"296":{"position":[[306,12],[1277,12]]},"309":{"position":[[2227,12],[2582,11],[2824,12]]},"343":{"position":[[16,11]]},"351":{"position":[[27,11],[324,11]]},"359":{"position":[[96,11],[301,11]]},"370":{"position":[[244,11],[2009,11]]},"377":{"position":[[27,11],[1689,11]]},"387":{"position":[[207,11],[1338,11]]},"392":{"position":[[27,11],[688,11]]},"397":{"position":[[27,11],[830,11]]},"402":{"position":[[27,11],[654,11]]},"408":{"position":[[27,11],[531,11]]},"417":{"position":[[27,11],[2224,11]]},"424":{"position":[[27,11],[355,11]]},"432":{"position":[[27,11],[1198,11]]},"436":{"position":[[624,12]]},"438":{"position":[[27,11]]},"448":{"position":[[207,11],[1225,11]]},"454":{"position":[[27,11],[544,11]]},"460":{"position":[[27,11],[561,11]]},"466":{"position":[[27,11],[272,11]]},"479":{"position":[[227,11]]},"482":{"position":[[27,11],[504,11]]},"491":{"position":[[16,11]]},"492":{"position":[[16,11]]},"496":{"position":[[27,11],[537,11]]},"502":{"position":[[27,11],[1557,11]]},"509":{"position":[[27,11],[537,11]]},"517":{"position":[[498,11],[3960,11]]},"534":{"position":[[207,11],[1705,11]]},"540":{"position":[[27,11],[322,11]]},"545":{"position":[[27,11],[1619,11]]},"556":{"position":[[207,11],[2202,11]]},"564":{"position":[[27,11]]},"565":{"position":[[16,11]]},"573":{"position":[[211,11],[1281,11]]},"584":{"position":[[199,11],[1353,11]]},"593":{"position":[[27,11],[345,11]]},"601":{"position":[[27,11],[416,11]]},"611":{"position":[[207,11],[1192,11]]},"619":{"position":[[108,11],[594,11]]},"625":{"position":[[27,11],[166,11]]},"631":{"position":[[27,11],[497,11]]},"637":{"position":[[27,11],[1155,11]]},"646":{"position":[[380,11],[735,11]]},"654":{"position":[[101,11],[817,11]]},"664":{"position":[[16,11]]},"665":{"position":[[16,11]]},"670":{"position":[[27,11],[655,11]]},"679":{"position":[[16,11]]},"680":{"position":[[16,11]]},"685":{"position":[[185,11],[479,11]]},"694":{"position":[[16,11]]},"695":{"position":[[16,11]]},"700":{"position":[[27,11],[307,11]]},"706":{"position":[[27,11],[307,11]]},"712":{"position":[[27,11],[502,11]]},"720":{"position":[[207,11],[811,11]]},"728":{"position":[[16,11]]},"735":{"position":[[96,11],[394,11]]},"741":{"position":[[27,11],[484,11]]},"747":{"position":[[27,11],[1366,11]]},"757":{"position":[[27,11],[1916,11]]},"767":{"position":[[912,11]]},"770":{"position":[[27,11],[1916,11]]},"782":{"position":[[27,11],[512,11]]},"792":{"position":[[1206,11]]},"797":{"position":[[27,11],[1916,11]]},"812":{"position":[[27,11],[1916,11]]},"824":{"position":[[981,11]]},"828":{"position":[[27,11],[1916,11]]},"840":{"position":[[2190,11]]},"842":{"position":[[27,11],[593,11],[1043,11],[1291,11],[1889,11]]},"849":{"position":[[3330,11]]},"851":{"position":[[27,11],[587,11]]},"859":{"position":[[207,11],[734,11]]},"867":{"position":[[27,11],[2113,11]]},"879":{"position":[[27,11],[1536,11]]},"885":{"position":[[27,11],[608,11]]},"891":{"position":[[27,11],[343,11]]},"897":{"position":[[27,11],[261,11]]},"904":{"position":[[979,11]]},"907":{"position":[[27,11],[1416,11]]},"918":{"position":[[1182,11]]},"923":{"position":[[27,11],[1416,11]]},"934":{"position":[[27,11],[1416,11]]},"950":{"position":[[27,11],[1416,11]]},"959":{"position":[[27,11],[363,11]]},"968":{"position":[[27,11],[1416,11]]},"982":{"position":[[27,11],[365,11]]},"991":{"position":[[217,11],[788,11]]},"997":{"position":[[27,11],[333,11]]},"1009":{"position":[[217,11],[1527,11]]},"1015":{"position":[[27,11],[421,11]]},"1021":{"position":[[300,11],[2035,11]]},"1028":{"position":[[27,11],[368,11]]},"1034":{"position":[[16,11]]},"1035":{"position":[[16,11]]},"1045":{"position":[[27,11],[1035,11]]},"1053":{"position":[[27,11],[1035,11]]},"1061":{"position":[[27,11],[1035,11]]},"1070":{"position":[[207,11],[991,11]]},"1076":{"position":[[27,11],[774,11]]},"1085":{"position":[[263,11],[1365,11]]},"1094":{"position":[[27,11],[430,11]]},"1101":{"position":[[27,11],[264,11]]},"1107":{"position":[[27,11],[402,11]]},"1113":{"position":[[27,11],[464,11]]},"1125":{"position":[[27,11],[510,11]]},"1133":{"position":[[27,11],[1198,11]]},"1138":{"position":[[244,11],[1299,11]]},"1144":{"position":[[27,11],[1262,11]]},"1151":{"position":[[27,11],[1333,11]]},"1162":{"position":[[27,11],[766,11]]},"1170":{"position":[[27,11],[1187,11]]},"1179":{"position":[[27,11],[997,11]]},"1188":{"position":[[27,11],[716,11]]},"1196":{"position":[[27,11],[874,11]]},"1206":{"position":[[27,11],[838,11]]},"1213":{"position":[[27,11],[939,11]]},"1220":{"position":[[27,11],[864,11]]},"1230":{"position":[[27,11],[817,11]]},"1239":{"position":[[16,11]]},"1240":{"position":[[16,11]]},"1247":{"position":[[198,11],[1035,11]]},"1253":{"position":[[27,11],[427,11]]},"1260":{"position":[[27,11],[881,11]]},"1267":{"position":[[16,11]]},"1269":{"position":[[16,11]]},"1277":{"position":[[27,11],[1009,11]]},"1285":{"position":[[27,11]]},"1286":{"position":[[2510,11]]},"1292":{"position":[[344,11]]},"1300":{"position":[[27,11]]},"1301":{"position":[[2346,11]]},"1306":{"position":[[344,11]]},"1313":{"position":[[27,11],[843,11]]},"1324":{"position":[[27,11]]},"1325":{"position":[[2510,11]]},"1329":{"position":[[344,11]]},"1337":{"position":[[27,11],[843,11]]},"1348":{"position":[[27,11],[843,11]]},"1356":{"position":[[27,11],[894,11]]},"1362":{"position":[[189,11],[480,11]]},"1367":{"position":[[27,11]]},"1376":{"position":[[27,11],[425,11]]},"1386":{"position":[[27,11],[1119,11]]},"1400":{"position":[[27,11],[425,11]]},"1411":{"position":[[27,11],[425,11]]},"1420":{"position":[[27,11],[666,11]]},"1427":{"position":[[27,11],[570,11]]},"1452":{"position":[[259,11]]},"1457":{"position":[[16,11]]},"1474":{"position":[[350,11]]},"1475":{"position":[[292,11]]},"1481":{"position":[[16,11]]}},"keywords":{}}],["descriptionnam",{"_index":3857,"title":{},"content":{"487":{"position":[[321,15]]}},"keywords":{}}],["descriptor",{"_index":4903,"title":{},"content":{"879":{"position":[[182,10]]},"1140":{"position":[[1257,10]]},"1316":{"position":[[1257,10]]},"1340":{"position":[[1257,10]]},"1351":{"position":[[1257,10]]},"1379":{"position":[[2858,10]]},"1403":{"position":[[2858,10]]},"1414":{"position":[[2858,10]]},"1431":{"position":[[1280,10]]}},"keywords":{}}],["deselect",{"_index":1680,"title":{},"content":{"122":{"position":[[1660,11]]},"138":{"position":[[193,8]]},"141":{"position":[[503,8]]},"142":{"position":[[306,8]]}},"keywords":{}}],["design",{"_index":597,"title":{},"content":{"25":{"position":[[83,8]]},"80":{"position":[[29,8]]},"103":{"position":[[725,8]]},"122":{"position":[[1832,9]]},"125":{"position":[[643,6]]},"135":{"position":[[29,8]]},"193":{"position":[[334,8]]},"213":{"position":[[124,8]]},"319":{"position":[[714,8]]},"321":{"position":[[2316,6]]},"330":{"position":[[414,6]]},"485":{"position":[[79,8]]},"500":{"position":[[155,8]]},"562":{"position":[[204,8]]},"657":{"position":[[79,8]]},"673":{"position":[[79,8]]},"688":{"position":[[79,8]]},"759":{"position":[[33,8]]},"772":{"position":[[44,8]]},"799":{"position":[[31,8]]},"814":{"position":[[31,8]]},"830":{"position":[[31,8]]},"975":{"position":[[34,8]]},"1036":{"position":[[132,8]]},"1039":{"position":[[90,8]]},"1049":{"position":[[16,8]]},"1057":{"position":[[19,8]]},"1461":{"position":[[4372,8]]}},"keywords":{}}],["desir",{"_index":47,"title":{"227":{"position":[[8,7]]},"230":{"position":[[8,7]]}},"content":{"1":{"position":[[585,7]]},"3":{"position":[[245,7]]},"68":{"position":[[612,7]]},"74":{"position":[[653,8]]},"80":{"position":[[279,7]]},"100":{"position":[[736,7]]},"110":{"position":[[1006,7]]},"122":{"position":[[634,8]]},"144":{"position":[[467,7]]},"217":{"position":[[399,7]]},"218":{"position":[[126,7]]},"228":{"position":[[640,7]]},"229":{"position":[[377,7]]},"259":{"position":[[232,8],[605,8],[838,8],[1921,8],[2307,8]]},"349":{"position":[[437,7]]},"368":{"position":[[218,9]]},"428":{"position":[[88,7]]},"480":{"position":[[291,8]]},"755":{"position":[[218,9]]},"760":{"position":[[435,7]]},"768":{"position":[[218,9]]},"773":{"position":[[435,7]]},"795":{"position":[[216,9]]},"800":{"position":[[435,7]]},"810":{"position":[[216,9]]},"815":{"position":[[435,7]]},"826":{"position":[[216,9]]},"831":{"position":[[435,7]]},"905":{"position":[[221,9]]},"911":{"position":[[131,9]]},"917":{"position":[[885,8]]},"919":{"position":[[1410,8]]},"920":{"position":[[221,9]]},"927":{"position":[[131,9]]},"932":{"position":[[221,9]]},"938":{"position":[[131,9]]},"948":{"position":[[221,9]]},"954":{"position":[[131,9]]},"965":{"position":[[885,8]]},"966":{"position":[[221,9]]},"972":{"position":[[131,9]]},"1031":{"position":[[482,7]]},"1137":{"position":[[201,7]]},"1150":{"position":[[138,7]]},"1178":{"position":[[202,7]]},"1205":{"position":[[175,7]]},"1229":{"position":[[214,7]]},"1251":{"position":[[132,7]]},"1259":{"position":[[130,7]]},"1284":{"position":[[199,7]]},"1299":{"position":[[199,7]]},"1312":{"position":[[202,7]]},"1323":{"position":[[199,7]]},"1336":{"position":[[202,7]]},"1347":{"position":[[202,7]]},"1355":{"position":[[201,7]]},"1375":{"position":[[203,7]]},"1399":{"position":[[203,7]]},"1410":{"position":[[203,7]]},"1426":{"position":[[205,7]]},"1446":{"position":[[344,7]]},"1459":{"position":[[464,7]]},"1461":{"position":[[3253,7]]}},"keywords":{}}],["destin",{"_index":413,"title":{"124":{"position":[[0,11]]},"1451":{"position":[[44,12]]}},"content":{"13":{"position":[[1630,11]]},"32":{"position":[[346,12]]},"36":{"position":[[95,12],[170,12],[331,11],[441,12]]},"37":{"position":[[72,11]]},"38":{"position":[[656,11]]},"44":{"position":[[559,11]]},"45":{"position":[[68,11]]},"68":{"position":[[110,11]]},"83":{"position":[[31,11]]},"120":{"position":[[290,11]]},"124":{"position":[[59,11]]},"126":{"position":[[32,11]]},"137":{"position":[[167,12]]},"142":{"position":[[1905,11]]},"144":{"position":[[475,12],[633,11]]},"159":{"position":[[570,11]]},"181":{"position":[[142,12]]},"184":{"position":[[136,12]]},"189":{"position":[[965,11],[1286,12]]},"192":{"position":[[130,12]]},"198":{"position":[[762,13]]},"208":{"position":[[259,11],[584,11],[1844,11]]},"211":{"position":[[755,11]]},"213":{"position":[[253,11]]},"216":{"position":[[67,11],[331,11]]},"218":{"position":[[89,12],[139,11],[568,11],[774,12],[924,12],[1475,11]]},"219":{"position":[[333,13],[427,12],[509,12]]},"240":{"position":[[2479,12],[5001,12]]},"259":{"position":[[209,11],[1679,12],[1898,11],[2106,11]]},"268":{"position":[[2075,12]]},"269":{"position":[[1537,12]]},"270":{"position":[[2153,12]]},"274":{"position":[[745,12]]},"277":{"position":[[1318,12]]},"286":{"position":[[216,12],[425,11]]},"289":{"position":[[80,11],[197,11]]},"291":{"position":[[82,12]]},"300":{"position":[[80,11],[176,11]]},"302":{"position":[[82,12]]},"307":{"position":[[2931,11]]},"323":{"position":[[135,13],[224,12],[368,12],[504,14],[821,11]]},"324":{"position":[[986,12]]},"326":{"position":[[1124,11]]},"335":{"position":[[79,11]]},"411":{"position":[[152,11]]},"556":{"position":[[1279,11],[1325,11]]},"602":{"position":[[907,11]]},"947":{"position":[[1154,11]]},"977":{"position":[[361,12]]},"1176":{"position":[[107,11],[243,11],[324,11]]},"1186":{"position":[[477,11]]},"1244":{"position":[[85,11]]},"1245":{"position":[[154,11]]},"1449":{"position":[[286,11]]},"1451":{"position":[[150,12],[275,11],[517,11]]},"1452":{"position":[[2477,11]]},"1453":{"position":[[1236,11]]},"1475":{"position":[[1038,12]]},"1480":{"position":[[227,11]]}},"keywords":{}}],["destinations.cr",{"_index":1746,"title":{},"content":{"135":{"position":[[332,22]]}},"keywords":{}}],["destroy",{"_index":6331,"title":{},"content":{"1379":{"position":[[2918,7]]},"1403":{"position":[[2918,7]]},"1414":{"position":[[2918,7]]}},"keywords":{}}],["destruct",{"_index":4632,"title":{},"content":{"760":{"position":[[253,11]]},"773":{"position":[[253,11]]},"800":{"position":[[253,11]]},"815":{"position":[[253,11]]},"831":{"position":[[253,11]]}},"keywords":{}}],["destructor",{"_index":6333,"title":{},"content":{"1379":{"position":[[2959,10]]},"1403":{"position":[[2959,10]]},"1414":{"position":[[2959,10]]}},"keywords":{}}],["detach",{"_index":6292,"title":{},"content":{"1370":{"position":[[883,6]]}},"keywords":{}}],["detail",{"_index":228,"title":{"145":{"position":[[8,7]]},"148":{"position":[[11,7]]},"151":{"position":[[16,7]]},"247":{"position":[[11,8]]}},"content":{"7":{"position":[[73,6],[171,9],[446,7],[519,6]]},"8":{"position":[[898,8]]},"24":{"position":[[115,7]]},"38":{"position":[[609,7]]},"68":{"position":[[454,7]]},"83":{"position":[[1451,8]]},"95":{"position":[[149,7]]},"122":{"position":[[2109,7]]},"135":{"position":[[616,8]]},"138":{"position":[[1790,7],[2598,7]]},"139":{"position":[[203,8]]},"140":{"position":[[247,7],[301,8]]},"141":{"position":[[1798,7]]},"142":{"position":[[1815,7],[2676,7]]},"143":{"position":[[235,8]]},"144":{"position":[[794,8]]},"145":{"position":[[95,7],[162,8]]},"146":{"position":[[333,7],[537,8],[884,6]]},"148":{"position":[[104,7],[188,8]]},"149":{"position":[[342,7],[510,8],[857,6]]},"151":{"position":[[103,6],[169,8]]},"152":{"position":[[349,7],[513,8],[860,6]]},"157":{"position":[[421,8]]},"165":{"position":[[336,8]]},"182":{"position":[[131,7]]},"192":{"position":[[1488,8],[2073,7]]},"197":{"position":[[410,8]]},"206":{"position":[[33,7]]},"208":{"position":[[648,7]]},"209":{"position":[[259,8]]},"210":{"position":[[244,7]]},"215":{"position":[[192,6]]},"217":{"position":[[511,7]]},"218":{"position":[[252,7]]},"221":{"position":[[1448,7]]},"237":{"position":[[992,7]]},"240":{"position":[[2599,7],[3718,7],[4646,7]]},"247":{"position":[[73,8]]},"250":{"position":[[50,7],[245,7]]},"254":{"position":[[1004,7],[2353,6]]},"263":{"position":[[464,7]]},"285":{"position":[[38,7],[128,9]]},"288":{"position":[[824,7]]},"296":{"position":[[989,7],[2623,7],[3422,6],[8082,7]]},"299":{"position":[[739,7]]},"301":{"position":[[1432,7]]},"314":{"position":[[725,7],[1894,6]]},"341":{"position":[[549,8]]},"345":{"position":[[44,7]]},"350":{"position":[[226,7]]},"358":{"position":[[226,7]]},"368":{"position":[[498,8]]},"369":{"position":[[226,7]]},"376":{"position":[[226,7]]},"385":{"position":[[483,8]]},"386":{"position":[[226,7]]},"390":{"position":[[473,7]]},"391":{"position":[[226,7]]},"395":{"position":[[242,7],[643,7]]},"396":{"position":[[226,7]]},"401":{"position":[[272,7]]},"407":{"position":[[226,7]]},"416":{"position":[[226,7]]},"423":{"position":[[226,7]]},"429":{"position":[[599,7],[1294,8]]},"431":{"position":[[226,7]]},"432":{"position":[[403,7]]},"437":{"position":[[226,7]]},"447":{"position":[[226,7]]},"453":{"position":[[226,7]]},"459":{"position":[[226,7]]},"465":{"position":[[226,7]]},"472":{"position":[[226,7],[301,8]]},"481":{"position":[[226,7]]},"486":{"position":[[427,7]]},"495":{"position":[[226,7]]},"501":{"position":[[182,7]]},"508":{"position":[[226,7]]},"516":{"position":[[226,7]]},"525":{"position":[[226,7]]},"531":{"position":[[554,7]]},"533":{"position":[[226,7]]},"539":{"position":[[226,7]]},"544":{"position":[[226,7]]},"555":{"position":[[223,7]]},"563":{"position":[[290,7]]},"572":{"position":[[226,7]]},"583":{"position":[[216,7]]},"584":{"position":[[1307,8]]},"592":{"position":[[223,7]]},"593":{"position":[[479,7]]},"594":{"position":[[1083,8]]},"610":{"position":[[226,7]]},"618":{"position":[[226,7]]},"624":{"position":[[226,7]]},"630":{"position":[[226,7]]},"636":{"position":[[226,7]]},"646":{"position":[[226,7]]},"653":{"position":[[226,7]]},"658":{"position":[[427,7]]},"669":{"position":[[226,7]]},"674":{"position":[[427,7]]},"684":{"position":[[226,7]]},"689":{"position":[[427,7]]},"699":{"position":[[226,7]]},"705":{"position":[[226,7]]},"711":{"position":[[226,7]]},"719":{"position":[[221,7]]},"724":{"position":[[270,7],[695,7]]},"727":{"position":[[226,7]]},"734":{"position":[[226,7]]},"735":{"position":[[181,7]]},"738":{"position":[[317,8],[447,8]]},"740":{"position":[[226,7]]},"746":{"position":[[226,7]]},"753":{"position":[[630,7]]},"755":{"position":[[498,8]]},"756":{"position":[[226,7]]},"767":{"position":[[776,7]]},"768":{"position":[[498,8]]},"769":{"position":[[226,7]]},"781":{"position":[[223,7]]},"784":{"position":[[433,7]]},"792":{"position":[[1055,7]]},"793":{"position":[[590,7]]},"795":{"position":[[496,8]]},"796":{"position":[[227,7]]},"808":{"position":[[606,7]]},"810":{"position":[[496,8]]},"811":{"position":[[226,7]]},"824":{"position":[[847,7]]},"826":{"position":[[496,8]]},"827":{"position":[[226,7]]},"841":{"position":[[226,7]]},"842":{"position":[[477,7]]},"850":{"position":[[226,7]]},"858":{"position":[[226,7]]},"866":{"position":[[226,7],[607,7]]},"878":{"position":[[226,7],[617,7]]},"884":{"position":[[226,7]]},"890":{"position":[[227,7]]},"896":{"position":[[226,7]]},"904":{"position":[[846,7]]},"905":{"position":[[501,8]]},"906":{"position":[[226,7]]},"907":{"position":[[1881,7]]},"917":{"position":[[217,8]]},"918":{"position":[[1055,7]]},"919":{"position":[[590,7]]},"920":{"position":[[501,8]]},"921":{"position":[[226,7]]},"923":{"position":[[1881,7]]},"931":{"position":[[610,7]]},"932":{"position":[[501,8]]},"933":{"position":[[226,7]]},"947":{"position":[[185,7],[235,7],[313,7],[518,7]]},"948":{"position":[[501,8]]},"949":{"position":[[226,7]]},"958":{"position":[[226,7]]},"965":{"position":[[217,8]]},"966":{"position":[[501,8]]},"967":{"position":[[226,7]]},"968":{"position":[[1881,7]]},"981":{"position":[[226,7]]},"990":{"position":[[226,7]]},"996":{"position":[[226,7]]},"1005":{"position":[[223,7]]},"1014":{"position":[[226,7]]},"1021":{"position":[[226,7]]},"1027":{"position":[[226,7]]},"1031":{"position":[[836,8]]},"1033":{"position":[[230,7]]},"1040":{"position":[[311,8]]},"1042":{"position":[[1395,7]]},"1043":{"position":[[590,7]]},"1044":{"position":[[226,7]]},"1050":{"position":[[311,8]]},"1051":{"position":[[846,7]]},"1052":{"position":[[226,7]]},"1058":{"position":[[311,8]]},"1059":{"position":[[610,7]]},"1060":{"position":[[226,7]]},"1069":{"position":[[226,7]]},"1075":{"position":[[226,7]]},"1084":{"position":[[226,7]]},"1093":{"position":[[226,7]]},"1100":{"position":[[226,7]]},"1106":{"position":[[227,7]]},"1112":{"position":[[226,7]]},"1118":{"position":[[331,8]]},"1122":{"position":[[270,7]]},"1124":{"position":[[226,7]]},"1132":{"position":[[227,7]]},"1154":{"position":[[801,7]]},"1176":{"position":[[428,8]]},"1186":{"position":[[210,7],[270,7],[550,7]]},"1198":{"position":[[522,7]]},"1200":{"position":[[655,8]]},"1206":{"position":[[1152,8]]},"1252":{"position":[[223,7]]},"1255":{"position":[[433,7]]},"1289":{"position":[[1140,7]]},"1303":{"position":[[610,7],[851,7]]},"1313":{"position":[[1631,7]]},"1322":{"position":[[1359,7]]},"1337":{"position":[[1631,7]]},"1373":{"position":[[828,7]]},"1374":{"position":[[828,7]]},"1382":{"position":[[336,8]]},"1397":{"position":[[607,7]]},"1398":{"position":[[606,7]]},"1408":{"position":[[668,7]]},"1409":{"position":[[590,7]]},"1470":{"position":[[495,7]]}},"keywords":{}}],["details.log",{"_index":5125,"title":{},"content":{"963":{"position":[[208,15]]}},"keywords":{}}],["detect",{"_index":275,"title":{},"content":{"8":{"position":[[749,8]]},"62":{"position":[[257,7]]},"230":{"position":[[614,7]]},"306":{"position":[[456,9]]},"419":{"position":[[270,6],[420,9]]},"440":{"position":[[286,6],[436,9]]},"480":{"position":[[931,10]]},"499":{"position":[[288,7]]},"504":{"position":[[207,6],[364,9]]},"547":{"position":[[271,6],[421,9]]},"634":{"position":[[280,7]]},"639":{"position":[[206,6],[362,9]]},"754":{"position":[[93,6],[325,6]]},"794":{"position":[[198,6]]},"809":{"position":[[198,6]]},"825":{"position":[[198,6]]},"1023":{"position":[[251,6],[401,9]]},"1286":{"position":[[227,6]]},"1301":{"position":[[227,6]]},"1325":{"position":[[227,6]]},"1448":{"position":[[680,7]]}},"keywords":{}}],["determin",{"_index":60,"title":{},"content":{"1":{"position":[[890,9]]},"42":{"position":[[99,9]]},"55":{"position":[[320,10],[558,10]]},"66":{"position":[[476,10],[562,10]]},"110":{"position":[[984,9]]},"138":{"position":[[1621,9]]},"141":{"position":[[1626,9]]},"142":{"position":[[1638,9]]},"165":{"position":[[192,9]]},"274":{"position":[[630,9]]},"397":{"position":[[1077,9]]},"410":{"position":[[252,9]]},"417":{"position":[[1487,10],[1563,9],[1644,10],[1715,9]]},"419":{"position":[[777,9],[891,10],[997,9],[1519,9]]},"440":{"position":[[793,9],[907,10],[1013,9]]},"441":{"position":[[128,9]]},"488":{"position":[[4,9]]},"502":{"position":[[1135,10],[1211,9],[1292,10],[1363,9]]},"504":{"position":[[709,9],[823,10],[913,9],[1148,9]]},"545":{"position":[[1089,10],[1165,9],[1246,10],[1317,9]]},"547":{"position":[[778,9],[892,10],[998,9],[1521,9]]},"637":{"position":[[649,10],[725,9],[806,10],[877,9]]},"639":{"position":[[707,9],[821,10],[911,9],[1146,9]]},"659":{"position":[[161,9]]},"676":{"position":[[4,9]]},"691":{"position":[[4,9]]},"847":{"position":[[346,11]]},"849":{"position":[[1805,9]]},"1021":{"position":[[1646,10],[1722,9],[1803,10],[1874,9]]},"1023":{"position":[[758,9],[872,10],[978,9],[1502,9]]},"1474":{"position":[[262,9]]}},"keywords":{}}],["determinist",{"_index":5574,"title":{},"content":{"1140":{"position":[[1297,13]]},"1292":{"position":[[421,13]]},"1306":{"position":[[421,13]]},"1316":{"position":[[1297,13]]},"1329":{"position":[[421,13]]},"1340":{"position":[[1297,13]]},"1351":{"position":[[1297,13]]},"1379":{"position":[[3013,13]]},"1403":{"position":[[3013,13]]},"1414":{"position":[[3013,13]]},"1431":{"position":[[1320,13]]},"1453":{"position":[[1184,13]]}},"keywords":{}}],["detour",{"_index":2595,"title":{},"content":{"239":{"position":[[1954,6]]}},"keywords":{}}],["dev",{"_index":1123,"title":{},"content":{"81":{"position":[[1157,5]]},"573":{"position":[[981,3]]},"1461":{"position":[[3653,3]]}},"keywords":{}}],["dev.flow.yaml",{"_index":6615,"title":{},"content":{"1461":{"position":[[3031,13],[3512,13],[3625,13],[4002,14]]}},"keywords":{}}],["develop",{"_index":601,"title":{"63":{"position":[[0,11]]},"253":{"position":[[16,11]]},"295":{"position":[[16,11]]},"313":{"position":[[16,11]]}},"content":{"26":{"position":[[17,9],[496,11]]},"31":{"position":[[88,10]]},"58":{"position":[[149,11]]},"60":{"position":[[239,11],[273,11]]},"63":{"position":[[102,7],[302,12]]},"84":{"position":[[456,11]]},"102":{"position":[[512,7]]},"103":{"position":[[328,11],[747,9]]},"107":{"position":[[2889,11]]},"169":{"position":[[1151,11],[1456,11]]},"179":{"position":[[180,11],[286,11]]},"183":{"position":[[44,11],[519,11],[688,11]]},"210":{"position":[[2446,7]]},"253":{"position":[[87,11]]},"263":{"position":[[837,8]]},"266":{"position":[[277,11],[357,11],[565,11]]},"267":{"position":[[52,11],[887,11],[1056,11]]},"281":{"position":[[2612,9]]},"295":{"position":[[1516,11]]},"313":{"position":[[87,11]]},"324":{"position":[[303,12]]},"329":{"position":[[497,12]]},"340":{"position":[[96,11],[146,11],[316,11]]},"363":{"position":[[90,12]]},"387":{"position":[[523,9],[640,9]]},"429":{"position":[[280,11]]},"445":{"position":[[71,9]]},"448":{"position":[[437,9],[565,9],[727,9],[743,9],[1096,9]]},"455":{"position":[[125,11]]},"464":{"position":[[153,9]]},"515":{"position":[[435,11]]},"554":{"position":[[156,9],[248,9],[274,9],[508,9]]},"556":{"position":[[635,9],[752,9],[820,9],[836,9]]},"571":{"position":[[493,7]]},"581":{"position":[[170,7]]},"617":{"position":[[415,7]]},"668":{"position":[[10,10]]},"670":{"position":[[113,9],[217,9]]},"675":{"position":[[30,9]]},"716":{"position":[[123,9],[236,9]]},"718":{"position":[[222,9]]},"720":{"position":[[637,10]]},"725":{"position":[[20,11]]},"726":{"position":[[85,9],[121,9],[438,11]]},"728":{"position":[[399,10],[517,10]]},"741":{"position":[[111,9],[213,9]]},"885":{"position":[[110,9],[211,9]]},"988":{"position":[[70,11],[214,9]]},"989":{"position":[[535,9],[686,9],[808,9]]},"991":{"position":[[377,9],[529,9],[645,9]]},"1003":{"position":[[70,11],[214,9]]},"1004":{"position":[[618,9],[769,9],[891,9]]},"1009":{"position":[[440,9],[592,9],[708,9]]},"1228":{"position":[[74,7]]},"1245":{"position":[[367,7]]},"1461":{"position":[[2102,12],[2671,12],[2931,7],[3471,11],[4100,11]]}},"keywords":{}}],["developer'",{"_index":5340,"title":{},"content":{"1085":{"position":[[569,11]]}},"keywords":{}}],["developer_token",{"_index":3742,"title":{},"content":{"448":{"position":[[710,16]]},"449":{"position":[[320,16]]},"557":{"position":[[282,16]]}},"keywords":{}}],["developers.appli",{"_index":4514,"title":{},"content":{"718":{"position":[[189,16]]}},"keywords":{}}],["devic",{"_index":459,"title":{},"content":{"16":{"position":[[279,7],[1177,7]]},"17":{"position":[[654,6],[680,7]]},"575":{"position":[[430,7]]},"586":{"position":[[452,7]]}},"keywords":{}}],["device_platform",{"_index":3977,"title":{},"content":{"518":{"position":[[369,17]]}},"keywords":{}}],["devicesearch",{"_index":4299,"title":{},"content":{"605":{"position":[[300,12]]}},"keywords":{}}],["df98701.u",{"_index":5216,"title":{},"content":{"1031":{"position":[[762,10]]}},"keywords":{}}],["dgst",{"_index":6388,"title":{},"content":{"1384":{"position":[[1045,4]]}},"keywords":{}}],["diagnost",{"_index":5578,"title":{},"content":{"1140":{"position":[[1356,11]]},"1292":{"position":[[458,11]]},"1306":{"position":[[458,11]]},"1316":{"position":[[1356,11]]},"1329":{"position":[[458,11]]},"1340":{"position":[[1356,11]]},"1351":{"position":[[1356,11]]},"1379":{"position":[[3080,11]]},"1403":{"position":[[3080,11]]},"1414":{"position":[[3080,11]]},"1431":{"position":[[1379,11]]}},"keywords":{}}],["diagram",{"_index":916,"title":{"1434":{"position":[[9,8]]}},"content":{"61":{"position":[[288,7]]}},"keywords":{}}],["dialog",{"_index":3855,"title":{},"content":{"485":{"position":[[429,6]]},"486":{"position":[[77,6]]},"657":{"position":[[429,6]]},"658":{"position":[[77,6]]},"673":{"position":[[429,6]]},"674":{"position":[[77,6]]},"688":{"position":[[429,6]]},"689":{"position":[[77,6]]},"943":{"position":[[524,7]]}},"keywords":{}}],["dictat",{"_index":2459,"title":{},"content":{"221":{"position":[[1814,8]]}},"keywords":{}}],["dictionari",{"_index":4872,"title":{"869":{"position":[[0,10]]}},"content":{"867":{"position":[[1287,10],[1314,12]]},"869":{"position":[[444,11],[488,10],[813,10],[930,10],[1003,10],[1145,10],[1366,10],[1557,11]]},"1379":{"position":[[3127,10]]},"1403":{"position":[[3127,10]]},"1414":{"position":[[3127,10]]}},"keywords":{}}],["dictionary_mod",{"_index":4881,"title":{},"content":{"868":{"position":[[295,16]]}},"keywords":{}}],["didn't",{"_index":1082,"title":{},"content":{"74":{"position":[[575,6]]}},"keywords":{}}],["differ",{"_index":345,"title":{},"content":{"11":{"position":[[1620,9]]},"16":{"position":[[438,9]]},"45":{"position":[[554,9]]},"56":{"position":[[1442,9]]},"60":{"position":[[61,9]]},"66":{"position":[[280,9],[307,9]]},"81":{"position":[[2183,9]]},"83":{"position":[[320,9]]},"84":{"position":[[1145,9]]},"107":{"position":[[293,9],[2168,9]]},"109":{"position":[[619,9],[657,9]]},"113":{"position":[[978,9]]},"125":{"position":[[1230,9]]},"137":{"position":[[521,9]]},"140":{"position":[[529,9]]},"146":{"position":[[355,9]]},"149":{"position":[[364,9]]},"152":{"position":[[371,9]]},"162":{"position":[[39,9],[1613,9]]},"179":{"position":[[413,10]]},"190":{"position":[[338,9],[1219,9],[1414,9]]},"192":{"position":[[1846,11]]},"197":{"position":[[707,9]]},"219":{"position":[[417,9],[479,9]]},"223":{"position":[[642,7]]},"224":{"position":[[1203,10]]},"263":{"position":[[938,9]]},"275":{"position":[[872,9]]},"296":{"position":[[8009,9]]},"306":{"position":[[45,9],[431,9]]},"313":{"position":[[3434,9]]},"319":{"position":[[407,12]]},"320":{"position":[[17,9],[1671,12]]},"321":{"position":[[1536,9],[2047,9]]},"322":{"position":[[16,9],[1120,11]]},"323":{"position":[[256,12]]},"325":{"position":[[253,10]]},"326":{"position":[[6,7],[1597,9]]},"379":{"position":[[464,9],[699,9]]},"418":{"position":[[539,9]]},"448":{"position":[[1165,9]]},"513":{"position":[[165,7]]},"522":{"position":[[166,7]]},"530":{"position":[[166,7]]},"546":{"position":[[1246,9]]},"551":{"position":[[164,7]]},"569":{"position":[[183,7]]},"603":{"position":[[255,9]]},"607":{"position":[[181,7]]},"614":{"position":[[166,7]]},"643":{"position":[[140,7]]},"650":{"position":[[139,7]]},"716":{"position":[[166,7]]},"731":{"position":[[137,7]]},"845":{"position":[[11,9],[52,12]]},"849":{"position":[[1881,9]]},"864":{"position":[[576,9]]},"869":{"position":[[102,9]]},"876":{"position":[[576,9]]},"947":{"position":[[695,7]]},"1081":{"position":[[15,6]]},"1129":{"position":[[15,9]]},"1183":{"position":[[620,9]]},"1226":{"position":[[120,9]]},"1232":{"position":[[330,9]]},"1298":{"position":[[642,7]]},"1346":{"position":[[642,7]]},"1358":{"position":[[393,7]]},"1447":{"position":[[147,9]]},"1448":{"position":[[471,9]]},"1453":{"position":[[1358,9]]},"1459":{"position":[[269,9]]},"1461":{"position":[[3345,9]]},"1470":{"position":[[902,9]]}},"keywords":{}}],["differenti",{"_index":1564,"title":{},"content":{"109":{"position":[[770,14]]},"183":{"position":[[2369,13]]}},"keywords":{}}],["digit",{"_index":2340,"title":{},"content":{"210":{"position":[[2563,7]]},"556":{"position":[[1489,5],[2014,5]]}},"keywords":{}}],["dilemma",{"_index":2326,"title":{},"content":{"210":{"position":[[2288,8]]}},"keywords":{}}],["dimens",{"_index":1947,"title":{"1007":{"position":[[16,10]]}},"content":{"164":{"position":[[1368,11],[1534,11]]},"198":{"position":[[895,10]]},"574":{"position":[[409,10],[464,10],[560,10],[623,9],[669,10]]},"585":{"position":[[540,10],[670,9]]},"1274":{"position":[[300,10]]},"1277":{"position":[[163,10]]}},"keywords":{}}],["dir",{"_index":954,"title":{},"content":{"63":{"position":[[1079,3],[1214,3]]}},"keywords":{}}],["direct",{"_index":574,"title":{"964":{"position":[[0,6]]}},"content":{"21":{"position":[[599,6]]},"83":{"position":[[117,6]]},"92":{"position":[[399,7]]},"112":{"position":[[129,6]]},"138":{"position":[[486,8]]},"192":{"position":[[10,8]]},"224":{"position":[[867,9]]},"280":{"position":[[896,8]]},"323":{"position":[[400,8]]},"792":{"position":[[287,6],[353,6]]},"793":{"position":[[101,6],[167,6]]},"808":{"position":[[101,6],[167,6]]},"824":{"position":[[101,6],[167,6]]},"904":{"position":[[101,6],[167,6]]},"918":{"position":[[287,6],[353,6]]},"919":{"position":[[101,6],[167,6]]},"931":{"position":[[101,6],[167,6]]},"963":{"position":[[99,6],[177,6]]},"964":{"position":[[292,6],[568,6]]},"1043":{"position":[[101,6],[167,6]]},"1051":{"position":[[101,6],[167,6]]},"1059":{"position":[[101,6],[167,6]]},"1137":{"position":[[149,6]]},"1143":{"position":[[71,6]]},"1150":{"position":[[86,6]]},"1161":{"position":[[71,6]]},"1169":{"position":[[71,6]]},"1178":{"position":[[150,6]]},"1187":{"position":[[152,6]]},"1195":{"position":[[156,6]]},"1205":{"position":[[150,6]]},"1212":{"position":[[71,6]]},"1219":{"position":[[71,6]]},"1229":{"position":[[162,6]]},"1259":{"position":[[78,6]]},"1282":{"position":[[416,6]]},"1283":{"position":[[112,6]]},"1284":{"position":[[147,6]]},"1288":{"position":[[128,6]]},"1289":{"position":[[112,6]]},"1299":{"position":[[147,6]]},"1303":{"position":[[101,6],[167,6]]},"1310":{"position":[[431,6]]},"1312":{"position":[[150,6]]},"1320":{"position":[[112,6]]},"1323":{"position":[[147,6]]},"1333":{"position":[[112,6]]},"1336":{"position":[[150,6]]},"1344":{"position":[[112,6]]},"1347":{"position":[[150,6]]},"1355":{"position":[[149,6]]},"1373":{"position":[[101,6],[167,6]]},"1374":{"position":[[101,6],[167,6]]},"1375":{"position":[[151,6]]},"1385":{"position":[[151,6]]},"1397":{"position":[[101,6],[168,6]]},"1398":{"position":[[101,6],[167,6]]},"1399":{"position":[[151,6]]},"1409":{"position":[[101,6],[167,6]]},"1410":{"position":[[151,6]]},"1419":{"position":[[151,6]]},"1426":{"position":[[153,6]]},"1461":{"position":[[15,9],[5470,6]]}},"keywords":{}}],["directli",{"_index":163,"title":{"1297":{"position":[[12,8]]},"1321":{"position":[[11,8]]},"1334":{"position":[[8,8]]},"1345":{"position":[[12,8]]}},"content":{"4":{"position":[[292,8]]},"25":{"position":[[57,8]]},"26":{"position":[[80,8]]},"55":{"position":[[881,8]]},"61":{"position":[[781,9]]},"62":{"position":[[56,8]]},"68":{"position":[[96,8]]},"76":{"position":[[107,8]]},"77":{"position":[[200,8]]},"81":{"position":[[2370,8]]},"82":{"position":[[189,8]]},"83":{"position":[[823,8]]},"84":{"position":[[35,8]]},"87":{"position":[[667,8]]},"88":{"position":[[373,8]]},"98":{"position":[[125,8]]},"100":{"position":[[874,8]]},"122":{"position":[[53,8],[2005,8]]},"125":{"position":[[144,8]]},"197":{"position":[[287,8]]},"198":{"position":[[906,8]]},"225":{"position":[[640,9]]},"228":{"position":[[45,9]]},"260":{"position":[[72,8]]},"320":{"position":[[460,8]]},"321":{"position":[[2169,8]]},"322":{"position":[[1679,8]]},"323":{"position":[[208,8]]},"324":{"position":[[1196,9]]},"326":{"position":[[1428,8]]},"330":{"position":[[527,8]]},"350":{"position":[[60,8]]},"358":{"position":[[60,8]]},"369":{"position":[[60,8]]},"376":{"position":[[60,8]]},"386":{"position":[[60,8]]},"391":{"position":[[60,8]]},"396":{"position":[[60,8]]},"401":{"position":[[87,8]]},"407":{"position":[[60,8]]},"416":{"position":[[60,8]]},"423":{"position":[[60,8]]},"431":{"position":[[60,8]]},"437":{"position":[[60,8]]},"447":{"position":[[60,8]]},"453":{"position":[[60,8]]},"459":{"position":[[60,8]]},"465":{"position":[[60,8]]},"472":{"position":[[60,8]]},"481":{"position":[[60,8]]},"495":{"position":[[60,8]]},"508":{"position":[[60,8]]},"516":{"position":[[60,8]]},"525":{"position":[[60,8]]},"533":{"position":[[60,8]]},"539":{"position":[[60,8]]},"544":{"position":[[60,8]]},"555":{"position":[[60,8]]},"563":{"position":[[124,9]]},"572":{"position":[[60,8]]},"581":{"position":[[336,8]]},"583":{"position":[[60,8]]},"584":{"position":[[99,8]]},"592":{"position":[[60,8]]},"600":{"position":[[60,8]]},"610":{"position":[[60,8]]},"618":{"position":[[60,8]]},"624":{"position":[[60,8]]},"630":{"position":[[60,8]]},"636":{"position":[[60,8]]},"646":{"position":[[60,8]]},"653":{"position":[[60,8]]},"669":{"position":[[60,8]]},"683":{"position":[[85,9]]},"684":{"position":[[60,8]]},"685":{"position":[[127,8]]},"699":{"position":[[60,8]]},"705":{"position":[[60,8]]},"711":{"position":[[60,8]]},"719":{"position":[[60,8]]},"727":{"position":[[60,8]]},"734":{"position":[[60,8]]},"740":{"position":[[60,8]]},"746":{"position":[[60,8]]},"756":{"position":[[60,8]]},"769":{"position":[[60,8]]},"781":{"position":[[60,8]]},"784":{"position":[[58,9]]},"796":{"position":[[60,8]]},"811":{"position":[[60,8]]},"827":{"position":[[60,8]]},"841":{"position":[[60,8]]},"850":{"position":[[60,8]]},"855":{"position":[[227,8]]},"858":{"position":[[60,8]]},"866":{"position":[[60,8]]},"869":{"position":[[425,8]]},"878":{"position":[[60,8]]},"884":{"position":[[60,8]]},"890":{"position":[[60,8]]},"896":{"position":[[60,8]]},"906":{"position":[[60,8]]},"909":{"position":[[161,9]]},"921":{"position":[[60,8]]},"925":{"position":[[161,9]]},"933":{"position":[[60,8]]},"936":{"position":[[161,9]]},"949":{"position":[[60,8]]},"952":{"position":[[161,9]]},"958":{"position":[[60,8]]},"967":{"position":[[60,8]]},"970":{"position":[[161,9]]},"981":{"position":[[60,8]]},"990":{"position":[[60,8]]},"996":{"position":[[60,8]]},"1005":{"position":[[60,8]]},"1014":{"position":[[60,8]]},"1021":{"position":[[60,8]]},"1027":{"position":[[60,8]]},"1033":{"position":[[64,8]]},"1044":{"position":[[60,8]]},"1052":{"position":[[60,8]]},"1060":{"position":[[60,8]]},"1069":{"position":[[60,8]]},"1075":{"position":[[60,8]]},"1084":{"position":[[60,8]]},"1093":{"position":[[60,8]]},"1100":{"position":[[60,8]]},"1106":{"position":[[60,8]]},"1112":{"position":[[60,8]]},"1124":{"position":[[60,8]]},"1132":{"position":[[60,8]]},"1149":{"position":[[75,8]]},"1200":{"position":[[610,9]]},"1204":{"position":[[435,8]]},"1208":{"position":[[217,9]]},"1252":{"position":[[60,8]]},"1255":{"position":[[58,9]]},"1283":{"position":[[178,8]]},"1289":{"position":[[178,8],[599,8]]},"1311":{"position":[[9,8]]},"1438":{"position":[[150,8]]},"1439":{"position":[[149,8]]},"1459":{"position":[[814,8]]},"1461":{"position":[[5580,8]]}},"keywords":{}}],["directori",{"_index":625,"title":{"63":{"position":[[12,12]]}},"content":{"27":{"position":[[146,9]]},"61":{"position":[[949,10]]},"62":{"position":[[46,9],[157,9]]},"63":{"position":[[65,9],[391,9],[520,9],[1118,9],[1160,10]]},"64":{"position":[[357,9]]},"87":{"position":[[122,9]]},"103":{"position":[[584,9],[705,10]]},"173":{"position":[[374,9]]},"221":{"position":[[1004,10]]},"222":{"position":[[249,10]]},"223":{"position":[[215,10]]},"224":{"position":[[268,10]]},"254":{"position":[[110,9]]},"263":{"position":[[812,10],[899,9]]},"270":{"position":[[859,10]]},"274":{"position":[[1612,10]]},"275":{"position":[[557,10]]},"296":{"position":[[110,9],[3837,10],[4048,12]]},"301":{"position":[[903,9]]},"314":{"position":[[110,9]]},"315":{"position":[[294,10],[527,12]]},"436":{"position":[[306,10],[863,9],[983,9]]},"565":{"position":[[157,9]]},"1019":{"position":[[41,9],[161,10],[310,9]]},"1020":{"position":[[1003,9],[1076,9],[1538,9],[1640,9],[1732,9]]},"1021":{"position":[[693,10],[704,9],[714,9],[765,9],[902,10],[965,10],[1333,10],[2104,10]]},"1022":{"position":[[183,10]]},"1292":{"position":[[501,9]]},"1298":{"position":[[215,10]]},"1306":{"position":[[501,9]]},"1322":{"position":[[249,10]]},"1329":{"position":[[501,9]]},"1335":{"position":[[249,10]]},"1346":{"position":[[215,10]]},"1461":{"position":[[1010,9],[1579,9],[1779,9],[1875,12],[5098,10]]}},"keywords":{}}],["disabl",{"_index":833,"title":{},"content":{"56":{"position":[[371,7]]},"122":{"position":[[1891,9]]},"138":{"position":[[219,8],[313,7]]},"141":{"position":[[529,8],[623,7]]},"142":{"position":[[332,8],[426,7]]},"185":{"position":[[254,7]]},"193":{"position":[[257,7]]},"242":{"position":[[902,7]]},"308":{"position":[[319,7]]},"343":{"position":[[41,7],[49,7]]},"377":{"position":[[196,7],[229,8],[371,7],[399,8]]},"414":{"position":[[946,9]]},"483":{"position":[[798,8]]},"489":{"position":[[421,7]]},"662":{"position":[[421,7]]},"677":{"position":[[421,7]]},"692":{"position":[[421,7]]},"764":{"position":[[1180,7]]},"777":{"position":[[1180,7]]},"804":{"position":[[1178,7]]},"819":{"position":[[1178,7]]},"835":{"position":[[1178,7]]},"922":{"position":[[1203,9]]},"1183":{"position":[[528,8],[675,9]]},"1268":{"position":[[140,9]]},"1286":{"position":[[1650,9]]},"1292":{"position":[[537,7]]},"1301":{"position":[[1486,9]]},"1306":{"position":[[537,7]]},"1325":{"position":[[1650,9]]},"1329":{"position":[[537,7]]},"1452":{"position":[[2199,7]]}},"keywords":{}}],["disabled.unknown",{"_index":1788,"title":{},"content":{"138":{"position":[[1512,16]]},"141":{"position":[[1517,16]]},"142":{"position":[[1529,16]]}},"keywords":{}}],["discard",{"_index":3088,"title":{},"content":{"315":{"position":[[2420,10]]},"1292":{"position":[[573,7]]},"1306":{"position":[[573,7]]},"1329":{"position":[[573,7]]}},"keywords":{}}],["disconnect",{"_index":5580,"title":{},"content":{"1140":{"position":[[1397,10]]},"1316":{"position":[[1397,10]]},"1340":{"position":[[1397,10]]},"1351":{"position":[[1397,10]]},"1379":{"position":[[3178,10]]},"1403":{"position":[[3178,10]]},"1414":{"position":[[3178,10]]},"1431":{"position":[[1420,10]]}},"keywords":{}}],["discourag",{"_index":4577,"title":{},"content":{"750":{"position":[[271,10]]},"766":{"position":[[271,10]]},"789":{"position":[[305,10]]},"807":{"position":[[305,10]]},"823":{"position":[[305,10]]}},"keywords":{}}],["discov",{"_index":424,"title":{},"content":{"14":{"position":[[299,10]]},"54":{"position":[[540,9]]},"55":{"position":[[32,9],[352,10],[593,10]]},"56":{"position":[[246,8],[475,10],[566,10]]},"80":{"position":[[439,8]]},"206":{"position":[[931,8],[1112,10]]},"210":{"position":[[2505,8]]},"307":{"position":[[3187,10]]},"309":{"position":[[3511,10]]},"477":{"position":[[217,8]]},"479":{"position":[[477,9]]},"482":{"position":[[214,8]]},"492":{"position":[[566,10]]},"598":{"position":[[159,8]]},"642":{"position":[[29,9]]},"660":{"position":[[480,10]]},"665":{"position":[[566,10]]},"695":{"position":[[566,10]]},"757":{"position":[[1052,8],[2476,11]]},"770":{"position":[[1052,8],[2476,11]]},"782":{"position":[[396,9],[427,8]]},"797":{"position":[[1052,8],[2484,11]]},"812":{"position":[[1052,8],[2484,11]]},"828":{"position":[[1052,8],[2484,11]]},"838":{"position":[[6,9]]},"842":{"position":[[2214,11],[2416,11]]},"865":{"position":[[89,11],[235,11]]},"867":{"position":[[1681,8],[1779,11],[1811,8]]},"877":{"position":[[89,11],[274,11]]}},"keywords":{}}],["discoveri",{"_index":803,"title":{"54":{"position":[[0,10]]},"119":{"position":[[0,10]]},"865":{"position":[[20,10]]},"877":{"position":[[20,10]]}},"content":{"54":{"position":[[65,9],[123,10]]},"70":{"position":[[420,10]]},"119":{"position":[[181,9],[211,10]]},"206":{"position":[[714,9]]},"239":{"position":[[1315,9]]},"483":{"position":[[538,9]]},"491":{"position":[[368,9]]},"664":{"position":[[389,9],[624,9]]},"679":{"position":[[368,9]]},"694":{"position":[[368,9]]},"750":{"position":[[1005,9]]},"752":{"position":[[569,9]]},"753":{"position":[[1225,9]]},"757":{"position":[[2270,9]]},"766":{"position":[[1005,9]]},"770":{"position":[[2270,9]]},"789":{"position":[[1406,9]]},"791":{"position":[[522,9]]},"793":{"position":[[1196,9]]},"797":{"position":[[2277,9]]},"807":{"position":[[993,9]]},"808":{"position":[[1142,9]]},"812":{"position":[[2277,9]]},"823":{"position":[[993,9]]},"828":{"position":[[2277,9]]},"909":{"position":[[785,9]]},"917":{"position":[[1058,10]]},"919":{"position":[[1583,10]]},"925":{"position":[[785,9]]},"936":{"position":[[785,9]]},"952":{"position":[[785,9]]},"965":{"position":[[1058,10]]},"970":{"position":[[785,9]]}},"keywords":{}}],["discrep",{"_index":2250,"title":{},"content":{"208":{"position":[[756,13]]}},"keywords":{}}],["discuss",{"_index":772,"title":{},"content":{"47":{"position":[[14,9]]},"80":{"position":[[187,9]]},"379":{"position":[[387,9]]},"922":{"position":[[2290,9]]},"1449":{"position":[[221,9]]}},"keywords":{}}],["discussion]../../concepts/derivations.md(#wher",{"_index":2909,"title":{},"content":{"281":{"position":[[3365,47]]}},"keywords":{}}],["disk",{"_index":4873,"title":{},"content":{"867":{"position":[[1587,5]]},"869":{"position":[[1256,4]]},"922":{"position":[[1588,4],[3356,4]]},"1292":{"position":[[621,4]]},"1306":{"position":[[621,4]]},"1329":{"position":[[621,4]]},"1379":{"position":[[3232,4]]},"1403":{"position":[[3232,4]]},"1414":{"position":[[3232,4]]}},"keywords":{}}],["disk).to",{"_index":4891,"title":{},"content":{"869":{"position":[[1526,8]]}},"keywords":{}}],["disk.prop",{"_index":5062,"title":{},"content":{"922":{"position":[[2232,11]]}},"keywords":{}}],["display",{"_index":1024,"title":{},"content":{"68":{"position":[[584,9]]},"140":{"position":[[129,10]]},"144":{"position":[[369,10]]},"146":{"position":[[78,8],[199,9]]},"149":{"position":[[208,9]]},"150":{"position":[[74,9]]},"152":{"position":[[215,9]]},"253":{"position":[[486,7]]},"313":{"position":[[486,7]]},"381":{"position":[[207,7],[234,7],[264,7],[294,7],[325,7]]},"485":{"position":[[436,8]]},"657":{"position":[[436,8]]},"673":{"position":[[436,8]]},"688":{"position":[[436,8]]},"964":{"position":[[459,7]]},"1362":{"position":[[681,7],[698,7]]},"1470":{"position":[[177,8],[584,7]]}},"keywords":{}}],["display_nam",{"_index":6280,"title":{},"content":{"1362":{"position":[[667,13]]},"1363":{"position":[[337,13]]}},"keywords":{}}],["disput",{"_index":5312,"title":{},"content":{"1078":{"position":[[972,8]]}},"keywords":{}}],["disrupt",{"_index":2599,"title":{},"content":{"239":{"position":[[2458,12]]}},"keywords":{}}],["distinct",{"_index":211,"title":{},"content":{"6":{"position":[[277,8]]},"141":{"position":[[179,12]]},"485":{"position":[[19,8]]},"657":{"position":[[19,8]]},"673":{"position":[[19,8]]},"688":{"position":[[19,8]]},"922":{"position":[[400,8]]},"1140":{"position":[[1447,8]]},"1209":{"position":[[694,8]]},"1292":{"position":[[665,8]]},"1306":{"position":[[665,8]]},"1316":{"position":[[1447,8]]},"1329":{"position":[[665,8]]},"1340":{"position":[[1447,8]]},"1351":{"position":[[1447,8]]},"1370":{"position":[[898,8]]},"1379":{"position":[[3285,8]]},"1394":{"position":[[981,8]]},"1403":{"position":[[3285,8]]},"1414":{"position":[[3285,8]]},"1423":{"position":[[806,8]]},"1431":{"position":[[1470,8]]}},"keywords":{}}],["distinctrow",{"_index":5991,"title":{},"content":{"1292":{"position":[[698,11]]},"1306":{"position":[[698,11]]},"1329":{"position":[[698,11]]}},"keywords":{}}],["distinguish",{"_index":3104,"title":{},"content":{"319":{"position":[[837,11]]}},"keywords":{}}],["distribut",{"_index":1977,"title":{},"content":{"169":{"position":[[305,13]]},"1379":{"position":[[3342,11]]},"1403":{"position":[[3342,11]]},"1414":{"position":[[3342,11]]},"1437":{"position":[[577,11]]},"1474":{"position":[[306,11]]}},"keywords":{}}],["distributionth",{"_index":1275,"title":{},"content":{"84":{"position":[[1092,15]]}},"keywords":{}}],["div",{"_index":5993,"title":{},"content":{"1292":{"position":[[739,3]]},"1306":{"position":[[739,3]]},"1329":{"position":[[739,3]]}},"keywords":{}}],["dive",{"_index":2180,"title":{},"content":{"196":{"position":[[764,4]]},"233":{"position":[[949,4]]}},"keywords":{}}],["divers",{"_index":3316,"title":{},"content":{"364":{"position":[[343,7]]}},"keywords":{}}],["divid",{"_index":4772,"title":{},"content":{"842":{"position":[[2612,7]]}},"keywords":{}}],["divis",{"_index":635,"title":{},"content":{"27":{"position":[[552,8]]}},"keywords":{}}],["dlnewcopi",{"_index":5584,"title":{},"content":{"1140":{"position":[[1501,9]]},"1316":{"position":[[1501,9]]},"1340":{"position":[[1501,9]]},"1351":{"position":[[1501,9]]},"1431":{"position":[[1524,9]]}},"keywords":{}}],["dlpreviouscopi",{"_index":5587,"title":{},"content":{"1140":{"position":[[1550,14]]},"1316":{"position":[[1550,14]]},"1340":{"position":[[1550,14]]},"1351":{"position":[[1550,14]]},"1431":{"position":[[1573,14]]}},"keywords":{}}],["dlurlcomplet",{"_index":5590,"title":{},"content":{"1140":{"position":[[1606,13]]},"1316":{"position":[[1606,13]]},"1340":{"position":[[1606,13]]},"1351":{"position":[[1606,13]]},"1431":{"position":[[1629,13]]}},"keywords":{}}],["dlurlcompleteonli",{"_index":5592,"title":{},"content":{"1140":{"position":[[1651,17]]},"1316":{"position":[[1651,17]]},"1340":{"position":[[1651,17]]},"1351":{"position":[[1651,17]]},"1431":{"position":[[1674,17]]}},"keywords":{}}],["dlurlcompletewrit",{"_index":5594,"title":{},"content":{"1140":{"position":[[1701,18]]},"1316":{"position":[[1701,18]]},"1340":{"position":[[1701,18]]},"1351":{"position":[[1701,18]]},"1431":{"position":[[1724,18]]}},"keywords":{}}],["dlurlpath",{"_index":5596,"title":{},"content":{"1140":{"position":[[1756,9]]},"1316":{"position":[[1756,9]]},"1340":{"position":[[1756,9]]},"1351":{"position":[[1756,9]]},"1431":{"position":[[1779,9]]}},"keywords":{}}],["dlurlpathonli",{"_index":5597,"title":{},"content":{"1140":{"position":[[1798,13]]},"1316":{"position":[[1798,13]]},"1340":{"position":[[1798,13]]},"1351":{"position":[[1798,13]]},"1431":{"position":[[1821,13]]}},"keywords":{}}],["dlurlpathwrit",{"_index":5601,"title":{},"content":{"1140":{"position":[[1847,14]]},"1316":{"position":[[1847,14]]},"1340":{"position":[[1847,14]]},"1351":{"position":[[1847,14]]},"1431":{"position":[[1870,14]]}},"keywords":{}}],["dlurlschem",{"_index":5603,"title":{},"content":{"1140":{"position":[[1900,11]]},"1316":{"position":[[1900,11]]},"1340":{"position":[[1900,11]]},"1351":{"position":[[1900,11]]},"1431":{"position":[[1923,11]]}},"keywords":{}}],["dlurlserv",{"_index":5604,"title":{},"content":{"1140":{"position":[[1934,11]]},"1316":{"position":[[1934,11]]},"1340":{"position":[[1934,11]]},"1351":{"position":[[1934,11]]},"1431":{"position":[[1957,11]]}},"keywords":{}}],["dlvalu",{"_index":5606,"title":{},"content":{"1140":{"position":[[1975,7]]},"1316":{"position":[[1975,7]]},"1340":{"position":[[1975,7]]},"1351":{"position":[[1975,7]]},"1431":{"position":[[1998,7]]}},"keywords":{}}],["dml",{"_index":4638,"title":{},"content":{"761":{"position":[[54,3]]},"762":{"position":[[332,3]]},"774":{"position":[[54,3]]},"775":{"position":[[332,3]]},"801":{"position":[[54,3]]},"802":{"position":[[332,3]]},"816":{"position":[[54,3]]},"817":{"position":[[332,3]]},"832":{"position":[[54,3]]},"833":{"position":[[332,3]]}},"keywords":{}}],["dn",{"_index":2467,"title":{},"content":{"222":{"position":[[953,4]]},"1322":{"position":[[953,4]]},"1335":{"position":[[953,4]]}},"keywords":{}}],["do",{"_index":744,"title":{},"content":{"42":{"position":[[614,5]]},"387":{"position":[[431,5]]},"480":{"position":[[169,5]]},"492":{"position":[[560,5]]},"660":{"position":[[822,5]]},"665":{"position":[[560,5]]},"695":{"position":[[560,5]]},"1183":{"position":[[543,5]]},"1439":{"position":[[1012,5]]},"1449":{"position":[[431,5]]}},"keywords":{}}],["doc",{"_index":1837,"title":{},"content":{"146":{"position":[[740,5]]},"149":{"position":[[713,5]]},"152":{"position":[[716,5]]},"173":{"position":[[1245,5]]},"207":{"position":[[612,4]]},"208":{"position":[[693,5]]},"237":{"position":[[1024,5]]},"239":{"position":[[1053,4]]},"253":{"position":[[214,4]]},"281":{"position":[[1424,4],[1471,3]]},"295":{"position":[[1643,4]]},"296":{"position":[[5503,4],[5613,4],[6155,4],[6306,4]]},"308":{"position":[[277,4]]},"313":{"position":[[214,4]]},"315":{"position":[[1611,4],[1906,4]]},"385":{"position":[[474,4]]},"390":{"position":[[555,5]]},"395":{"position":[[734,5]]},"430":{"position":[[158,5]]},"460":{"position":[[512,5]]},"531":{"position":[[577,4]]},"556":{"position":[[504,5],[1568,5]]},"724":{"position":[[334,5],[726,5]]},"738":{"position":[[306,4],[436,4],[735,5]]},"747":{"position":[[115,4]]},"754":{"position":[[986,5]]},"794":{"position":[[1190,5]]},"809":{"position":[[1190,5]]},"825":{"position":[[1026,5]]},"945":{"position":[[482,4]]},"1007":{"position":[[173,5]]},"1097":{"position":[[37,5]]},"1122":{"position":[[360,5]]},"1131":{"position":[[196,4]]},"1178":{"position":[[510,5]]},"1179":{"position":[[964,5]]},"1192":{"position":[[462,5]]},"1204":{"position":[[658,4]]},"1206":{"position":[[1138,4]]},"1286":{"position":[[1247,5]]},"1301":{"position":[[1083,5]]},"1325":{"position":[[1247,5]]},"1356":{"position":[[715,4]]},"1394":{"position":[[458,5]]},"1418":{"position":[[320,3]]},"1423":{"position":[[464,5]]},"1470":{"position":[[981,4],[1113,4],[1250,4]]}},"keywords":{}}],["doc.amount",{"_index":2892,"title":{},"content":{"281":{"position":[[1547,10],[1618,10]]}},"keywords":{}}],["doc.recipi",{"_index":2893,"title":{},"content":{"281":{"position":[[1594,14]]}},"keywords":{}}],["doc.send",{"_index":2891,"title":{},"content":{"281":{"position":[[1525,11]]}},"keywords":{}}],["docker",{"_index":706,"title":{},"content":{"38":{"position":[[571,6]]},"56":{"position":[[1068,6],[1095,6]]},"81":{"position":[[43,8]]},"84":{"position":[[750,6]]},"120":{"position":[[408,6],[435,6]]},"234":{"position":[[69,7],[113,6]]},"236":{"position":[[304,6],[329,6],[499,6],[566,6],[1569,6]]},"237":{"position":[[3130,6]]},"242":{"position":[[193,6]]},"1197":{"position":[[118,6]]},"1207":{"position":[[343,6]]},"1357":{"position":[[193,6]]},"1480":{"position":[[345,6],[372,6]]}},"keywords":{}}],["docs.lead",{"_index":4546,"title":{},"content":{"738":{"position":[[542,11]]}},"keywords":{}}],["docs.list",{"_index":4547,"title":{},"content":{"738":{"position":[[602,11]]}},"keywords":{}}],["docs.program",{"_index":4548,"title":{},"content":{"738":{"position":[[669,14]]}},"keywords":{}}],["docstot",{"_index":6665,"title":{},"content":{"1470":{"position":[[830,9]]}},"keywords":{}}],["document",{"_index":79,"title":{"66":{"position":[[0,10]]},"68":{"position":[[19,10]]},"98":{"position":[[0,8]]},"207":{"position":[[0,9]]}},"content":{"2":{"position":[[317,10]]},"3":{"position":[[126,9]]},"8":{"position":[[322,8],[400,8],[949,10]]},"16":{"position":[[419,9],[522,9],[693,9],[800,8]]},"17":{"position":[[1119,9]]},"20":{"position":[[117,9]]},"26":{"position":[[570,14]]},"34":{"position":[[58,9],[118,9],[230,9],[443,9],[808,9]]},"35":{"position":[[103,9],[165,9]]},"36":{"position":[[108,9],[248,9]]},"40":{"position":[[223,10]]},"41":{"position":[[68,9],[217,9],[440,10],[557,9]]},"42":{"position":[[85,9],[298,9],[388,9],[468,8],[501,9],[645,10]]},"43":{"position":[[289,8]]},"44":{"position":[[193,9],[356,9]]},"52":{"position":[[237,14]]},"53":{"position":[[324,10],[472,13]]},"60":{"position":[[1059,13]]},"66":{"position":[[44,10],[144,10],[237,10],[256,8],[463,9],[549,9],[611,8],[678,9],[727,9],[773,8]]},"67":{"position":[[41,10],[106,8],[179,9],[261,8],[317,9],[468,8],[614,8],[815,8],[893,8],[1081,8],[1404,8],[1514,8],[1729,8],[2098,9]]},"68":{"position":[[209,9],[503,9],[570,9],[1210,13],[1424,9],[1541,9]]},"69":{"position":[[286,9],[574,10]]},"70":{"position":[[68,9],[614,9]]},"71":{"position":[[69,10],[131,8],[277,9]]},"72":{"position":[[7,8],[196,10],[310,8]]},"74":{"position":[[37,9],[197,9],[390,9],[1015,9]]},"76":{"position":[[53,8],[593,8],[733,8],[850,8]]},"77":{"position":[[50,9],[419,9],[537,9]]},"82":{"position":[[554,8],[1688,8],[2835,8],[3596,8]]},"83":{"position":[[363,13]]},"94":{"position":[[1571,9],[1628,9],[1773,9],[1850,10],[1921,9],[1978,9],[2139,9],[2216,10],[2626,9],[2778,9],[2968,10],[3043,9]]},"95":{"position":[[164,9]]},"96":{"position":[[97,9],[320,9],[539,8]]},"97":{"position":[[567,9],[636,9]]},"98":{"position":[[105,9],[295,8],[516,10],[1065,9],[1144,8],[1220,9]]},"99":{"position":[[48,8],[121,9],[225,9],[470,9],[515,9]]},"100":{"position":[[893,9],[1125,9]]},"101":{"position":[[157,9],[382,9]]},"102":{"position":[[63,9]]},"105":{"position":[[73,9],[150,9],[226,9],[300,9],[366,9],[397,9],[607,9]]},"106":{"position":[[52,9],[445,9],[634,9]]},"107":{"position":[[16,8],[368,10],[457,9],[516,9],[671,9],[1177,8],[1343,10],[1405,9],[2328,9],[2403,9],[2552,9],[2942,9],[3099,9],[3220,8]]},"108":{"position":[[85,9],[131,9],[202,9]]},"109":{"position":[[221,9],[275,9],[448,9]]},"110":{"position":[[93,9],[207,8],[352,10],[478,9]]},"111":{"position":[[34,9],[114,9],[529,9],[607,9]]},"112":{"position":[[259,9],[288,10]]},"114":{"position":[[216,10],[612,9]]},"115":{"position":[[255,9],[421,8],[1205,8]]},"120":{"position":[[1123,9],[1180,9],[1325,9],[1402,10],[1473,9],[1530,9],[1691,9],[1768,10],[2218,9],[2298,9],[2454,9],[2513,9]]},"121":{"position":[[264,9],[457,9],[530,9],[598,9],[653,9],[714,9],[764,9],[1233,9],[1558,9]]},"122":{"position":[[27,8],[92,10],[325,8],[964,8],[2091,13]]},"124":{"position":[[506,9],[591,9],[633,9],[931,10]]},"125":{"position":[[134,9],[525,9],[868,9],[979,8],[1190,9],[1503,14]]},"128":{"position":[[18,9],[55,9],[159,9],[250,9],[468,9],[504,10],[684,10]]},"129":{"position":[[82,8],[110,9],[148,8],[292,9],[390,8],[443,8],[486,8],[525,9],[749,10],[877,10],[1017,10]]},"130":{"position":[[62,9],[193,9],[236,10]]},"132":{"position":[[216,9],[437,9],[491,10],[651,10]]},"133":{"position":[[60,9],[179,9],[427,10],[590,9]]},"138":{"position":[[1997,10]]},"141":{"position":[[1929,10]]},"142":{"position":[[2050,10]]},"146":{"position":[[129,9]]},"149":{"position":[[132,9],[1194,10],[1261,9],[1354,9]]},"152":{"position":[[142,9]]},"156":{"position":[[84,10],[606,8]]},"159":{"position":[[142,9],[430,9]]},"160":{"position":[[184,9],[344,8],[411,8],[698,10]]},"161":{"position":[[240,9]]},"163":{"position":[[42,9],[167,9],[206,8],[318,8],[621,9],[803,10],[897,8]]},"164":{"position":[[77,8],[188,8],[361,9],[829,14]]},"165":{"position":[[688,9],[826,9],[1909,10],[2016,9]]},"175":{"position":[[189,14]]},"183":{"position":[[1663,9],[4132,9]]},"184":{"position":[[540,13]]},"191":{"position":[[307,14]]},"197":{"position":[[868,9],[965,10],[1050,9],[1131,9],[1348,9],[1416,9]]},"207":{"position":[[114,9],[194,9],[260,9],[649,10],[1349,9],[1529,9]]},"209":{"position":[[530,10]]},"210":{"position":[[61,10],[279,10],[394,9],[1764,8],[3901,9]]},"211":{"position":[[291,8]]},"212":{"position":[[262,14]]},"215":{"position":[[169,13]]},"217":{"position":[[487,13]]},"221":{"position":[[88,13],[268,13]]},"239":{"position":[[702,9],[717,9],[797,9],[825,9],[1100,9],[1227,10],[2761,13]]},"243":{"position":[[256,14]]},"245":{"position":[[66,9],[126,9]]},"253":{"position":[[498,9],[684,10],[970,9]]},"254":{"position":[[1197,9],[1686,10],[2062,13],[2151,10],[2257,10],[2319,8],[2417,9],[2988,9],[3239,9],[3316,9]]},"264":{"position":[[227,13]]},"275":{"position":[[249,13]]},"277":{"position":[[1030,9],[1199,9]]},"278":{"position":[[1466,9]]},"279":{"position":[[605,9],[736,9],[873,9]]},"281":{"position":[[1240,9],[1452,10],[2790,8]]},"295":{"position":[[1798,9]]},"296":{"position":[[327,8],[1167,9],[1298,8],[2016,8],[3261,9],[3320,9],[4442,9],[4509,8],[4525,8],[4722,9],[4921,9],[5233,9],[5529,10],[5642,10],[5885,9],[6181,10],[6335,10],[6559,9],[7037,9]]},"301":{"position":[[1190,13]]},"313":{"position":[[498,9],[684,10],[970,9]]},"314":{"position":[[918,9],[1017,9],[1503,10],[1681,10],[1798,10],[1860,8],[1958,9],[2814,9],[2891,9]]},"315":{"position":[[932,9],[1035,8],[1326,9],[1649,10],[1944,10],[2331,9]]},"324":{"position":[[316,14]]},"326":{"position":[[669,8]]},"332":{"position":[[334,8]]},"343":{"position":[[436,9],[638,9],[927,9],[1009,9]]},"345":{"position":[[262,14]]},"379":{"position":[[371,11],[634,10],[972,13]]},"390":{"position":[[454,9]]},"395":{"position":[[624,9]]},"429":{"position":[[1276,13]]},"472":{"position":[[388,14]]},"480":{"position":[[121,9]]},"486":{"position":[[196,9]]},"488":{"position":[[969,10],[1076,8]]},"492":{"position":[[413,9]]},"496":{"position":[[199,14]]},"558":{"position":[[210,14]]},"560":{"position":[[377,13]]},"590":{"position":[[59,9],[211,8],[361,10],[392,8],[493,9],[654,9],[747,9],[789,8],[1059,8]]},"594":{"position":[[926,9]]},"595":{"position":[[214,9],[248,9],[364,10],[645,8],[732,8],[1714,9],[1807,8]]},"602":{"position":[[494,8],[854,9],[942,10],[1042,8]]},"619":{"position":[[674,9]]},"640":{"position":[[306,13]]},"658":{"position":[[196,9]]},"659":{"position":[[1126,10],[1233,8]]},"660":{"position":[[329,8]]},"665":{"position":[[413,9]]},"667":{"position":[[150,14]]},"674":{"position":[[196,9]]},"676":{"position":[[969,10],[1076,8]]},"680":{"position":[[413,9]]},"689":{"position":[[196,9]]},"690":{"position":[[321,13]]},"691":{"position":[[969,10],[1076,8]]},"695":{"position":[[413,9]]},"767":{"position":[[290,14]]},"779":{"position":[[164,9]]},"785":{"position":[[184,10]]},"786":{"position":[[10,9]]},"792":{"position":[[603,14]]},"805":{"position":[[69,10],[356,10]]},"820":{"position":[[69,10],[356,10]]},"821":{"position":[[162,10]]},"824":{"position":[[395,14]]},"836":{"position":[[69,10],[356,10]]},"842":{"position":[[3590,9],[3730,9]]},"900":{"position":[[387,14]]},"907":{"position":[[1863,13]]},"912":{"position":[[170,10]]},"918":{"position":[[603,14]]},"923":{"position":[[1863,13]]},"943":{"position":[[698,13],[864,13]]},"946":{"position":[[193,13]]},"968":{"position":[[1863,13]]},"1008":{"position":[[725,10],[1000,13]]},"1122":{"position":[[251,9]]},"1123":{"position":[[189,9],[208,8],[482,9],[550,8],[621,8],[740,10]]},"1140":{"position":[[226,14]]},"1156":{"position":[[329,10]]},"1157":{"position":[[36,8],[97,9],[242,10]]},"1166":{"position":[[39,9]]},"1176":{"position":[[653,13]]},"1182":{"position":[[166,9]]},"1185":{"position":[[453,13]]},"1186":{"position":[[104,13],[701,13]]},"1191":{"position":[[166,9]]},"1192":{"position":[[208,13]]},"1194":{"position":[[179,13],[663,13]]},"1201":{"position":[[481,8]]},"1203":{"position":[[386,9],[824,13]]},"1204":{"position":[[90,13]]},"1208":{"position":[[205,9]]},"1226":{"position":[[464,13]]},"1227":{"position":[[211,13]]},"1228":{"position":[[226,13],[323,13]]},"1234":{"position":[[164,9]]},"1243":{"position":[[241,13]]},"1250":{"position":[[56,9],[165,9]]},"1262":{"position":[[166,9]]},"1275":{"position":[[68,9]]},"1276":{"position":[[165,8],[254,8]]},"1279":{"position":[[395,9]]},"1289":{"position":[[477,14]]},"1292":{"position":[[154,14]]},"1306":{"position":[[154,14]]},"1313":{"position":[[1613,13]]},"1316":{"position":[[226,14]]},"1321":{"position":[[257,14]]},"1329":{"position":[[154,14]]},"1334":{"position":[[345,14]]},"1337":{"position":[[1613,13]]},"1340":{"position":[[226,14]]},"1351":{"position":[[226,14]]},"1354":{"position":[[488,13]]},"1358":{"position":[[116,8],[272,9],[428,10]]},"1370":{"position":[[218,14]]},"1379":{"position":[[162,14]]},"1382":{"position":[[707,13]]},"1389":{"position":[[166,9]]},"1393":{"position":[[315,13]]},"1394":{"position":[[206,13]]},"1403":{"position":[[162,14]]},"1414":{"position":[[162,14]]},"1423":{"position":[[209,13]]},"1431":{"position":[[249,14]]},"1440":{"position":[[224,10],[349,9],[454,9],[596,9],[639,8],[690,8],[768,8],[785,9],[846,9],[922,9],[982,8],[1085,8],[1149,9],[1247,9],[1395,8],[1583,8]]},"1442":{"position":[[1112,9]]},"1443":{"position":[[57,9],[85,8],[958,9]]},"1444":{"position":[[85,10],[195,9]]},"1448":{"position":[[1105,14]]},"1451":{"position":[[941,9]]},"1455":{"position":[[531,9]]},"1459":{"position":[[10,9],[138,8],[232,9],[305,9],[417,10],[688,8],[771,9],[835,9],[858,9],[936,8],[991,8],[1089,8],[1483,14],[1557,8],[1720,9]]},"1463":{"position":[[615,10],[817,10]]},"1464":{"position":[[497,10],[660,10]]},"1465":{"position":[[118,8],[682,9],[1194,10],[1359,10],[1460,10],[1626,10]]},"1466":{"position":[[475,10],[608,10]]},"1467":{"position":[[90,8],[1012,10],[1157,10],[1313,10],[1519,10],[2439,10],[2685,10]]},"1473":{"position":[[367,9]]},"1474":{"position":[[9,8]]},"1475":{"position":[[7,9],[597,9],[889,9],[1011,9],[1174,9],[1264,9],[1371,9],[1597,9]]},"1476":{"position":[[448,10],[624,10],[961,8],[1032,9],[1675,10],[2047,10]]},"1477":{"position":[[23,8],[236,8],[401,8],[593,8],[1706,10],[2050,10],[2219,10],[2471,10],[4052,10],[4408,10],[4587,10],[4849,10]]},"1480":{"position":[[829,9],[886,9],[1031,9],[1108,10],[1179,9],[1236,9],[1397,9],[1474,10]]}},"keywords":{}}],["document:{"greeting"",{"_index":1414,"title":{},"content":{"98":{"position":[[721,31]]}},"keywords":{}}],["documentation.cr",{"_index":4995,"title":{},"content":{"904":{"position":[[395,20]]},"1051":{"position":[[395,20]]},"1373":{"position":[[377,20]]},"1374":{"position":[[377,20]]}},"keywords":{}}],["documentationfor",{"_index":4695,"title":{},"content":{"786":{"position":[[423,16]]}},"keywords":{}}],["documents.captur",{"_index":292,"title":{},"content":{"11":{"position":[[90,18]]}},"keywords":{}}],["documentswrit",{"_index":1656,"title":{},"content":{"121":{"position":[[740,15]]}},"keywords":{}}],["documentt0",{"_index":1612,"title":{},"content":{"114":{"position":[[315,10]]},"115":{"position":[[795,10]]}},"keywords":{}}],["document’",{"_index":3107,"title":{},"content":{"319":{"position":[[1175,10]]}},"keywords":{}}],["doe",{"_index":2937,"title":{},"content":{"295":{"position":[[319,3]]}},"keywords":{}}],["doesn't",{"_index":516,"title":{},"content":{"19":{"position":[[235,7]]},"41":{"position":[[251,7]]},"72":{"position":[[437,7]]},"75":{"position":[[168,7]]},"107":{"position":[[2232,7]]},"208":{"position":[[924,7]]},"306":{"position":[[505,7]]},"325":{"position":[[443,7]]},"366":{"position":[[1164,7]]},"496":{"position":[[224,7]]},"534":{"position":[[1630,7]]},"757":{"position":[[1279,7]]},"770":{"position":[[1279,7]]},"797":{"position":[[1279,7]]},"812":{"position":[[1279,7]]},"821":{"position":[[504,7]]},"828":{"position":[[1279,7]]},"867":{"position":[[1987,7]]},"912":{"position":[[520,7]]},"1040":{"position":[[175,7]]},"1047":{"position":[[230,7]]},"1050":{"position":[[175,7]]},"1055":{"position":[[230,7]]},"1058":{"position":[[175,7]]},"1063":{"position":[[230,7]]},"1136":{"position":[[317,7]]},"1208":{"position":[[39,7]]},"1282":{"position":[[341,7]]},"1288":{"position":[[315,7]]},"1310":{"position":[[356,7]]},"1447":{"position":[[452,7]]}},"keywords":{}}],["doesn’t",{"_index":1291,"title":{},"content":{"87":{"position":[[583,7]]},"110":{"position":[[704,7]]},"296":{"position":[[3065,7]]},"319":{"position":[[829,7]]},"1268":{"position":[[319,7]]}},"keywords":{}}],["domain",{"_index":3064,"title":{},"content":{"313":{"position":[[3403,7],[3664,6]]},"314":{"position":[[1239,7]]},"315":{"position":[[1118,8],[2378,6]]},"469":{"position":[[67,6]]},"471":{"position":[[36,6]]},"472":{"position":[[732,6]]},"509":{"position":[[112,7],[120,6],[137,6]]},"510":{"position":[[137,7]]},"609":{"position":[[367,6]]},"712":{"position":[[168,7],[176,6],[187,6]]},"713":{"position":[[132,7]]},"741":{"position":[[407,6]]},"742":{"position":[[220,6]]},"747":{"position":[[1090,6]]},"1140":{"position":[[2032,6]]},"1316":{"position":[[2032,6]]},"1340":{"position":[[2032,6]]},"1351":{"position":[[2032,6]]},"1379":{"position":[[3404,6]]},"1403":{"position":[[3404,6]]},"1414":{"position":[[3404,6]]},"1431":{"position":[[2055,6]]}},"keywords":{}}],["domain.com",{"_index":4505,"title":{},"content":{"712":{"position":[[273,10]]}},"keywords":{}}],["domain_nam",{"_index":3805,"title":{},"content":{"473":{"position":[[222,12]]}},"keywords":{}}],["domain_url",{"_index":4554,"title":{},"content":{"741":{"position":[[395,11]]},"742":{"position":[[199,11]]}},"keywords":{}}],["don't",{"_index":552,"title":{},"content":{"20":{"position":[[1020,5]]},"25":{"position":[[5,5]]},"41":{"position":[[567,5]]},"100":{"position":[[868,5]]},"106":{"position":[[400,6]]},"107":{"position":[[2572,5]]},"122":{"position":[[988,5]]},"162":{"position":[[335,5],[349,5],[1849,5]]},"165":{"position":[[1636,5]]},"179":{"position":[[33,5]]},"188":{"position":[[47,5]]},"191":{"position":[[357,5]]},"193":{"position":[[251,5]]},"217":{"position":[[1441,5]]},"221":{"position":[[52,5]]},"266":{"position":[[50,5]]},"280":{"position":[[105,5]]},"281":{"position":[[548,5]]},"286":{"position":[[300,5]]},"288":{"position":[[141,5]]},"299":{"position":[[141,5]]},"320":{"position":[[1432,5]]},"321":{"position":[[893,5],[1129,5]]},"325":{"position":[[664,5]]},"330":{"position":[[564,5]]},"332":{"position":[[75,5]]},"415":{"position":[[240,5]]},"429":{"position":[[706,5]]},"480":{"position":[[908,5]]},"489":{"position":[[746,5]]},"496":{"position":[[368,5]]},"661":{"position":[[15,5]]},"662":{"position":[[746,5]]},"677":{"position":[[746,5]]},"692":{"position":[[746,5]]},"726":{"position":[[61,5]]},"849":{"position":[[2515,5]]},"985":{"position":[[685,5]]},"1000":{"position":[[835,5],[999,5]]},"1186":{"position":[[49,5]]},"1388":{"position":[[218,5]]},"1434":{"position":[[1580,5]]}},"keywords":{}}],["done",{"_index":512,"title":{},"content":{"19":{"position":[[138,4]]},"54":{"position":[[617,4]]},"113":{"position":[[383,4]]},"158":{"position":[[90,4]]},"160":{"position":[[238,4]]},"170":{"position":[[245,5]]},"174":{"position":[[614,5]]},"242":{"position":[[78,4]]},"259":{"position":[[1416,4],[2962,4]]},"264":{"position":[[310,5]]},"275":{"position":[[346,5]]},"296":{"position":[[2332,5],[6649,4]]},"780":{"position":[[346,4]]},"964":{"position":[[687,4]]},"1125":{"position":[[682,4]]},"1138":{"position":[[1542,4]]},"1151":{"position":[[1483,4]]},"1162":{"position":[[1006,4]]},"1177":{"position":[[301,5]]},"1183":{"position":[[424,4]]},"1253":{"position":[[571,4]]},"1260":{"position":[[1031,4]]},"1286":{"position":[[2747,4]]},"1301":{"position":[[2583,4]]},"1313":{"position":[[1086,4]]},"1325":{"position":[[2747,4]]},"1337":{"position":[[1086,4]]},"1348":{"position":[[1086,4]]},"1376":{"position":[[662,4]]},"1400":{"position":[[662,4]]},"1411":{"position":[[662,4]]},"1427":{"position":[[846,4]]},"1442":{"position":[[1656,5]]},"1464":{"position":[[989,4]]},"1467":{"position":[[1832,5]]}},"keywords":{}}],["don’t",{"_index":2419,"title":{},"content":{"212":{"position":[[378,5]]},"232":{"position":[[1023,5]]},"236":{"position":[[1539,5],[1648,5]]},"237":{"position":[[3468,5]]},"238":{"position":[[535,5]]},"242":{"position":[[938,5]]},"243":{"position":[[373,5]]},"297":{"position":[[124,5],[161,5]]},"314":{"position":[[2512,6]]},"324":{"position":[[1181,5]]},"1463":{"position":[[169,5]]}},"keywords":{}}],["doubl",{"_index":2081,"title":{},"content":{"183":{"position":[[3413,6]]},"419":{"position":[[2671,6]]},"441":{"position":[[1280,6]]},"504":{"position":[[2300,6]]},"547":{"position":[[2673,6]]},"578":{"position":[[268,6]]},"639":{"position":[[2298,6]]},"1023":{"position":[[2654,6]]},"1140":{"position":[[2059,6]]},"1164":{"position":[[288,6],[509,6]]},"1172":{"position":[[390,6]]},"1209":{"position":[[714,6]]},"1222":{"position":[[390,6]]},"1292":{"position":[[800,6]]},"1306":{"position":[[800,6]]},"1316":{"position":[[2059,6]]},"1329":{"position":[[800,6]]},"1340":{"position":[[2059,6]]},"1351":{"position":[[2059,6]]},"1379":{"position":[[3455,6]]},"1403":{"position":[[3455,6]]},"1414":{"position":[[3455,6]]},"1431":{"position":[[2082,6]]}},"keywords":{}}],["doublecolon",{"_index":5874,"title":{},"content":{"1209":{"position":[[740,11]]}},"keywords":{}}],["doubt",{"_index":2090,"title":{},"content":{"184":{"position":[[487,6]]}},"keywords":{}}],["dow",{"_index":5876,"title":{},"content":{"1209":{"position":[[774,3]]}},"keywords":{}}],["down",{"_index":179,"title":{},"content":{"4":{"position":[[570,5],[654,4]]},"68":{"position":[[467,4],[1728,4]]},"80":{"position":[[323,4],[395,5]]},"146":{"position":[[1084,4]]},"149":{"position":[[1078,4]]},"152":{"position":[[1068,4]]},"180":{"position":[[63,4],[817,4]]},"191":{"position":[[2143,4]]},"192":{"position":[[1178,4]]},"206":{"position":[[140,4]]},"217":{"position":[[763,4],[1551,4]]},"240":{"position":[[2137,4],[2914,4]]},"249":{"position":[[134,4]]},"290":{"position":[[586,4]]},"301":{"position":[[526,4]]},"306":{"position":[[22,4]]},"385":{"position":[[442,4]]},"436":{"position":[[513,4]]},"477":{"position":[[625,4]]},"595":{"position":[[1611,4]]},"598":{"position":[[589,4]]},"761":{"position":[[376,4]]},"762":{"position":[[495,4]]},"764":{"position":[[626,4]]},"774":{"position":[[376,4]]},"775":{"position":[[495,4]]},"777":{"position":[[626,4]]},"801":{"position":[[382,4]]},"802":{"position":[[495,4]]},"804":{"position":[[624,4]]},"816":{"position":[[382,4]]},"817":{"position":[[495,4]]},"819":{"position":[[624,4]]},"832":{"position":[[382,4]]},"833":{"position":[[495,4]]},"835":{"position":[[624,4]]},"849":{"position":[[1727,4]]},"931":{"position":[[737,4]]},"1008":{"position":[[1042,4]]},"1388":{"position":[[253,5]]}},"keywords":{}}],["download",{"_index":877,"title":{},"content":{"58":{"position":[[249,8]]},"169":{"position":[[488,8]]},"236":{"position":[[534,8]]},"571":{"position":[[702,10]]},"582":{"position":[[315,10]]},"609":{"position":[[259,10]]},"617":{"position":[[626,10]]},"637":{"position":[[1083,11]]},"1177":{"position":[[456,11]]},"1204":{"position":[[514,8]]},"1245":{"position":[[578,10]]}},"keywords":{}}],["downsid",{"_index":3842,"title":{},"content":{"480":{"position":[[1631,8]]},"922":{"position":[[3293,8]]}},"keywords":{}}],["downstream",{"_index":672,"title":{},"content":{"34":{"position":[[393,10]]},"41":{"position":[[306,10]]},"196":{"position":[[265,10]]},"197":{"position":[[532,10]]},"227":{"position":[[274,10]]},"233":{"position":[[272,10]]},"237":{"position":[[174,10]]},"259":{"position":[[1014,10],[1293,10],[2595,10]]},"305":{"position":[[582,10]]},"333":{"position":[[592,10]]},"411":{"position":[[141,10]]},"909":{"position":[[645,10]]},"925":{"position":[[645,10]]},"936":{"position":[[645,10]]},"952":{"position":[[645,10]]},"970":{"position":[[645,10]]}},"keywords":{}}],["downtim",{"_index":517,"title":{},"content":{"19":{"position":[[251,9]]},"49":{"position":[[487,8]]},"101":{"position":[[460,8]]},"105":{"position":[[1097,9]]},"320":{"position":[[2276,8]]},"333":{"position":[[281,9]]}},"keywords":{}}],["doy",{"_index":5878,"title":{},"content":{"1209":{"position":[[813,3]]}},"keywords":{}}],["draft",{"_index":366,"title":{"62":{"position":[[36,7]]},"261":{"position":[[7,5]]},"263":{"position":[[13,5]]},"264":{"position":[[9,5]]}},"content":{"12":{"position":[[296,6]]},"13":{"position":[[352,5],[397,6],[426,5]]},"24":{"position":[[186,6]]},"33":{"position":[[309,7]]},"60":{"position":[[902,5]]},"63":{"position":[[96,5],[1040,5],[1192,5]]},"87":{"position":[[753,5]]},"263":{"position":[[1,6],[244,5],[291,6],[387,5],[419,5],[512,6],[559,6],[691,5],[712,6],[727,5],[777,5],[831,5],[965,6]]},"264":{"position":[[74,6],[350,6],[365,5],[486,5],[519,6],[534,5]]},"273":{"position":[[142,7]]},"340":{"position":[[75,6]]},"1077":{"position":[[164,5]]},"1461":{"position":[[3971,5]]}},"keywords":{}}],["dramat",{"_index":3188,"title":{},"content":{"329":{"position":[[828,12]]},"330":{"position":[[637,12]]},"1391":{"position":[[461,12]]}},"keywords":{}}],["dramaticallyexecut",{"_index":3193,"title":{},"content":{"330":{"position":[[242,21]]}},"keywords":{}}],["drive",{"_index":1449,"title":{"561":{"position":[[7,5]]}},"content":{"101":{"position":[[274,5]]},"241":{"position":[[537,5]]},"562":{"position":[[76,5],[162,5],[271,5]]},"563":{"position":[[27,5],[321,5]]},"564":{"position":[[144,6]]},"565":{"position":[[98,5],[177,6]]},"617":{"position":[[98,5],[317,5]]},"619":{"position":[[232,5]]},"1245":{"position":[[40,5],[269,5]]}},"keywords":{}}],["drive:dev",{"_index":4136,"title":{},"content":{"566":{"position":[[96,9]]}},"keywords":{}}],["driven",{"_index":1570,"title":{},"content":{"110":{"position":[[512,6]]},"210":{"position":[[2039,6]]},"909":{"position":[[996,6]]},"925":{"position":[[996,6]]},"936":{"position":[[996,6]]},"952":{"position":[[996,6]]},"970":{"position":[[996,6]]}},"keywords":{}}],["driver",{"_index":6429,"title":{},"content":{"1434":{"position":[[141,6],[279,7],[380,6],[441,7],[602,7],[792,7],[965,6],[1103,7],[1291,7],[1373,6],[1481,6],[1535,7],[1593,6],[1715,7],[1920,7],[2021,7],[2066,6],[2197,7]]},"1435":{"position":[[496,6],[526,6],[659,7]]},"1438":{"position":[[143,6]]},"1439":{"position":[[60,6],[433,6],[496,6],[950,6],[993,6],[1032,6],[1575,6]]},"1442":{"position":[[238,6],[520,6],[642,6],[926,7],[1149,6],[1176,7],[1349,6],[1524,6],[1599,6],[1663,7],[1782,7]]},"1443":{"position":[[189,7],[421,6],[761,7]]},"1444":{"position":[[60,7],[158,6],[309,7],[512,6],[584,6],[934,6]]}},"keywords":{}}],["driver'",{"_index":6510,"title":{},"content":{"1444":{"position":[[772,8]]}},"keywords":{}}],["drivercp",{"_index":6434,"title":{},"content":{"1434":{"position":[[255,9]]}},"keywords":{}}],["drop",{"_index":416,"title":{},"content":{"13":{"position":[[1723,4]]},"68":{"position":[[462,4]]},"80":{"position":[[318,4],[390,4]]},"105":{"position":[[1207,7]]},"146":{"position":[[1079,4]]},"149":{"position":[[1073,4]]},"152":{"position":[[1063,4]]},"191":{"position":[[2138,4]]},"208":{"position":[[1934,4]]},"217":{"position":[[758,4]]},"240":{"position":[[2132,4]]},"242":{"position":[[627,4],[646,4],[686,4],[709,4],[743,4],[780,4],[809,4],[847,4]]},"290":{"position":[[581,4]]},"301":{"position":[[521,4]]},"307":{"position":[[2967,7]]},"309":{"position":[[937,8]]},"310":{"position":[[237,8]]},"760":{"position":[[232,4],[594,4],[773,4]]},"773":{"position":[[232,4],[594,4],[773,4]]},"800":{"position":[[232,4],[594,4],[773,4]]},"815":{"position":[[232,4],[594,4],[773,4]]},"831":{"position":[[232,4],[594,4],[773,4]]},"922":{"position":[[1849,4]]},"942":{"position":[[349,7]]},"1140":{"position":[[2103,4]]},"1183":{"position":[[1097,4],[1123,4],[1549,4],[1590,4]]},"1209":{"position":[[829,4]]},"1292":{"position":[[849,4]]},"1306":{"position":[[849,4]]},"1316":{"position":[[2103,4]]},"1329":{"position":[[849,4]]},"1340":{"position":[[2103,4]]},"1351":{"position":[[2103,4]]},"1370":{"position":[[925,4]]},"1379":{"position":[[3515,4]]},"1394":{"position":[[1002,4]]},"1403":{"position":[[3515,4]]},"1414":{"position":[[3515,4]]},"1417":{"position":[[394,4]]},"1423":{"position":[[820,4]]},"1431":{"position":[[2126,4]]}},"keywords":{}}],["dropbox",{"_index":3295,"title":{"498":{"position":[[0,7]]},"504":{"position":[[18,7]]}},"content":{"363":{"position":[[927,7]]},"499":{"position":[[69,7]]},"500":{"position":[[53,7],[196,7]]},"501":{"position":[[19,7],[206,7]]},"502":{"position":[[87,7],[439,8],[1619,7]]},"504":{"position":[[1,7],[252,7]]}},"keywords":{}}],["dropbox:dev",{"_index":3296,"title":{},"content":{"363":{"position":[[981,11]]}},"keywords":{}}],["dropdown",{"_index":2062,"title":{},"content":{"183":{"position":[[355,9]]},"190":{"position":[[710,8]]},"192":{"position":[[348,8]]},"267":{"position":[[271,9],[730,9]]},"487":{"position":[[120,9],[690,9]]},"840":{"position":[[1089,8],[1188,8],[1285,8],[1381,8],[1817,8]]},"849":{"position":[[2100,8],[2858,8]]},"1455":{"position":[[205,8]]}},"keywords":{}}],["dropdown.fil",{"_index":3255,"title":{},"content":{"349":{"position":[[235,13]]},"1092":{"position":[[243,13]]}},"keywords":{}}],["dual",{"_index":5998,"title":{},"content":{"1292":{"position":[[891,4]]},"1306":{"position":[[891,4]]},"1329":{"position":[[891,4]]}},"keywords":{}}],["due",{"_index":1211,"title":{},"content":{"83":{"position":[[143,3]]},"97":{"position":[[719,3]]},"125":{"position":[[623,3]]},"138":{"position":[[1662,3]]},"141":{"position":[[1667,3]]},"142":{"position":[[1679,3]]},"254":{"position":[[3775,3]]},"305":{"position":[[503,3]]},"309":{"position":[[770,3]]},"331":{"position":[[416,3]]},"560":{"position":[[1,3]]},"642":{"position":[[242,3]]},"660":{"position":[[210,3]]},"869":{"position":[[736,4]]},"909":{"position":[[979,3]]},"910":{"position":[[47,3]]},"925":{"position":[[979,3]]},"926":{"position":[[47,3]]},"936":{"position":[[979,3]]},"937":{"position":[[47,3]]},"952":{"position":[[979,3]]},"953":{"position":[[47,3]]},"970":{"position":[[979,3]]},"971":{"position":[[47,3]]},"1438":{"position":[[522,3]]}},"keywords":{}}],["dump",{"_index":6339,"title":{},"content":{"1379":{"position":[[3566,4]]},"1403":{"position":[[3566,4]]},"1414":{"position":[[3566,4]]}},"keywords":{}}],["dumpfil",{"_index":6000,"title":{},"content":{"1292":{"position":[[929,8]]},"1306":{"position":[[929,8]]},"1329":{"position":[[929,8]]}},"keywords":{}}],["duplic",{"_index":1745,"title":{},"content":{"133":{"position":[[645,9]]},"379":{"position":[[355,9],[623,10],[889,10]]},"595":{"position":[[568,12],[1098,10]]},"602":{"position":[[844,9],[889,10]]},"660":{"position":[[217,9]]},"821":{"position":[[957,10]]},"912":{"position":[[1001,11]]},"1008":{"position":[[750,10]]},"1292":{"position":[[969,9]]},"1306":{"position":[[969,9]]},"1329":{"position":[[969,9]]},"1437":{"position":[[1138,11]]},"1467":{"position":[[1894,10]]},"1477":{"position":[[2796,10]]}},"keywords":{}}],["durabl",{"_index":770,"title":{},"content":{"46":{"position":[[52,7]]},"48":{"position":[[190,10]]},"100":{"position":[[1056,7]]},"117":{"position":[[181,7]]},"320":{"position":[[647,7]]},"331":{"position":[[307,7]]},"332":{"position":[[133,7]]},"602":{"position":[[68,7],[472,7]]},"1435":{"position":[[418,7]]}},"keywords":{}}],["durat",{"_index":44,"title":{},"content":{"1":{"position":[[554,9],[720,8],[840,9]]},"20":{"position":[[468,9],[521,9],[680,9],[994,9],[1096,8]]},"169":{"position":[[1697,9]]},"209":{"position":[[1392,8]]},"339":{"position":[[81,8]]},"340":{"position":[[557,9]]},"343":{"position":[[342,8],[356,8],[691,8],[832,8],[846,8]]},"377":{"position":[[829,8],[1034,8]]},"387":{"position":[[1114,8]]},"842":{"position":[[2069,8],[2826,8]]},"1162":{"position":[[686,8]]},"1172":{"position":[[756,9]]},"1222":{"position":[[756,9]]},"1317":{"position":[[750,9]]},"1341":{"position":[[750,9]]},"1352":{"position":[[750,9]]},"1432":{"position":[[764,9]]}},"keywords":{}}],["dure",{"_index":1049,"title":{},"content":{"70":{"position":[[413,6]]},"88":{"position":[[77,6]]},"124":{"position":[[698,6]]},"209":{"position":[[295,6],[1109,6]]},"222":{"position":[[715,6]]},"223":{"position":[[952,6]]},"239":{"position":[[1304,6]]},"254":{"position":[[3747,6]]},"296":{"position":[[4167,6],[6677,6],[7133,6]]},"315":{"position":[[646,6]]},"343":{"position":[[397,6],[887,6]]},"370":{"position":[[1377,6]]},"379":{"position":[[900,6]]},"397":{"position":[[1021,6]]},"446":{"position":[[241,6]]},"464":{"position":[[84,6]]},"556":{"position":[[395,6]]},"573":{"position":[[553,6]]},"582":{"position":[[218,6]]},"584":{"position":[[484,6]]},"609":{"position":[[415,6]]},"611":{"position":[[627,6]]},"617":{"position":[[529,6]]},"619":{"position":[[458,6]]},"747":{"position":[[318,6]]},"789":{"position":[[863,6]]},"838":{"position":[[60,6]]},"842":{"position":[[3540,6],[3600,6],[3677,6],[3740,6]]},"857":{"position":[[114,6]]},"867":{"position":[[717,6]]},"907":{"position":[[1160,6]]},"923":{"position":[[1160,6]]},"934":{"position":[[1160,6]]},"950":{"position":[[1160,6]]},"968":{"position":[[1160,6]]},"985":{"position":[[601,6]]},"1000":{"position":[[915,6]]},"1045":{"position":[[887,6]]},"1047":{"position":[[311,6]]},"1053":{"position":[[887,6]]},"1055":{"position":[[311,6]]},"1061":{"position":[[887,6]]},"1063":{"position":[[311,6]]},"1177":{"position":[[131,6]]},"1204":{"position":[[206,6]]},"1245":{"position":[[481,6]]},"1298":{"position":[[952,6]]},"1322":{"position":[[715,6]]},"1335":{"position":[[715,6]]},"1346":{"position":[[952,6]]},"1438":{"position":[[105,6]]},"1439":{"position":[[627,6]]},"1440":{"position":[[244,6]]},"1452":{"position":[[107,6],[2687,6],[2785,6],[2924,6],[3989,6]]},"1461":{"position":[[2095,6]]}},"keywords":{}}],["dynam",{"_index":528,"title":{"333":{"position":[[0,7]]}},"content":{"20":{"position":[[28,7]]},"98":{"position":[[1235,7]]},"331":{"position":[[527,7]]},"1140":{"position":[[2138,7]]},"1201":{"position":[[422,7]]},"1292":{"position":[[1006,7]]},"1306":{"position":[[1006,7]]},"1316":{"position":[[2138,7]]},"1329":{"position":[[1006,7]]},"1340":{"position":[[2138,7]]},"1351":{"position":[[2138,7]]},"1379":{"position":[[3620,7]]},"1403":{"position":[[3620,7]]},"1414":{"position":[[3620,7]]},"1431":{"position":[[2161,7]]}},"keywords":{}}],["dynamodb",{"_index":3286,"title":{"394":{"position":[[7,8]]},"1121":{"position":[[7,8]]}},"content":{"363":{"position":[[327,8]]},"395":{"position":[[50,8],[71,8],[107,8],[226,8],[590,9],[711,8]]},"396":{"position":[[250,8]]},"397":{"position":[[127,8],[239,8],[328,8]]},"398":{"position":[[477,8]]},"1120":{"position":[[79,8]]},"1122":{"position":[[217,9]]},"1123":{"position":[[139,8],[373,8],[580,8],[644,8]]},"1124":{"position":[[250,8]]},"1125":{"position":[[129,9],[236,9]]}},"keywords":{}}],["dynamodb:dev",{"_index":3287,"title":{},"content":{"363":{"position":[[382,12]]},"398":{"position":[[149,12]]},"1120":{"position":[[139,12]]},"1126":{"position":[[110,12]]}},"keywords":{}}],["dynamodbin",{"_index":5437,"title":{},"content":{"1122":{"position":[[338,10]]}},"keywords":{}}],["e",{"_index":1377,"title":{},"content":{"96":{"position":[[366,2],[590,2]]}},"keywords":{}}],["e.g",{"_index":2255,"title":{},"content":{"208":{"position":[[1441,6]]},"534":{"position":[[338,4],[1196,4]]},"712":{"position":[[217,4]]},"842":{"position":[[116,4]]},"849":{"position":[[2915,5]]},"851":{"position":[[93,4]]},"1089":{"position":[[181,4]]},"1239":{"position":[[162,6]]}},"keywords":{}}],["e2889d31",{"_index":3714,"title":{},"content":{"439":{"position":[[183,8]]}},"keywords":{}}],["each",{"_index":49,"title":{},"content":{"1":{"position":[[611,4]]},"2":{"position":[[210,4]]},"3":{"position":[[24,4],[348,4],[1073,4]]},"6":{"position":[[1,4]]},"7":{"position":[[31,4]]},"8":{"position":[[1,4],[372,4],[395,4]]},"11":{"position":[[570,4]]},"16":{"position":[[517,4]]},"20":{"position":[[611,4]]},"23":{"position":[[256,4]]},"24":{"position":[[128,4]]},"34":{"position":[[750,4]]},"36":{"position":[[142,4]]},"38":{"position":[[586,4]]},"44":{"position":[[151,4]]},"48":{"position":[[62,4],[222,4]]},"49":{"position":[[243,4]]},"54":{"position":[[394,4]]},"60":{"position":[[89,4]]},"67":{"position":[[174,4],[256,4],[609,4]]},"72":{"position":[[509,4]]},"74":{"position":[[268,4],[446,4]]},"81":{"position":[[2158,4]]},"82":{"position":[[1907,4]]},"96":{"position":[[74,4]]},"98":{"position":[[16,4]]},"103":{"position":[[160,4]]},"105":{"position":[[513,4],[567,4]]},"107":{"position":[[4,4],[265,4],[328,4]]},"109":{"position":[[583,4]]},"110":{"position":[[1131,4]]},"115":{"position":[[405,4],[468,4]]},"120":{"position":[[856,4]]},"121":{"position":[[1536,4]]},"122":{"position":[[458,4]]},"123":{"position":[[179,4]]},"124":{"position":[[833,4],[855,4]]},"125":{"position":[[810,4],[885,4]]},"129":{"position":[[161,4]]},"141":{"position":[[263,4],[1965,4]]},"154":{"position":[[459,4],[670,4],[729,4],[1314,4]]},"160":{"position":[[171,4]]},"165":{"position":[[229,4]]},"183":{"position":[[851,4],[2121,4],[2562,4]]},"185":{"position":[[53,4]]},"192":{"position":[[1580,4]]},"197":{"position":[[690,4]]},"216":{"position":[[376,4]]},"217":{"position":[[1174,4]]},"218":{"position":[[267,4],[685,4],[1278,4]]},"219":{"position":[[403,4]]},"237":{"position":[[208,4]]},"239":{"position":[[2185,4]]},"259":{"position":[[2354,4]]},"263":{"position":[[414,4]]},"267":{"position":[[1241,4]]},"270":{"position":[[870,4]]},"277":{"position":[[208,4],[1372,4]]},"279":{"position":[[232,4]]},"280":{"position":[[283,4]]},"281":{"position":[[284,4],[1740,4],[1808,4]]},"286":{"position":[[92,4]]},"290":{"position":[[111,4],[1203,4],[1308,4],[1439,4]]},"291":{"position":[[965,4],[1101,4],[1181,4],[1237,4]]},"295":{"position":[[147,4],[1311,4]]},"296":{"position":[[3159,4],[6554,4]]},"301":{"position":[[1535,4]]},"306":{"position":[[726,4]]},"308":{"position":[[239,4]]},"320":{"position":[[783,4],[1072,4],[1825,4]]},"321":{"position":[[923,4]]},"322":{"position":[[769,4]]},"323":{"position":[[788,4],[842,4]]},"326":{"position":[[625,4],[664,4]]},"333":{"position":[[209,4],[535,4]]},"366":{"position":[[363,4]]},"371":{"position":[[1498,4]]},"381":{"position":[[552,4]]},"385":{"position":[[371,4],[581,5]]},"393":{"position":[[481,4]]},"397":{"position":[[760,4]]},"398":{"position":[[472,4]]},"419":{"position":[[111,4],[1327,4]]},"421":{"position":[[151,4]]},"433":{"position":[[907,4]]},"440":{"position":[[127,4],[1343,4]]},"443":{"position":[[510,4]]},"451":{"position":[[160,4]]},"457":{"position":[[164,4]]},"463":{"position":[[270,4]]},"470":{"position":[[33,4]]},"479":{"position":[[610,4]]},"488":{"position":[[451,4],[465,4]]},"489":{"position":[[38,4],[513,4],[680,4]]},"491":{"position":[[416,4]]},"492":{"position":[[154,4],[243,4]]},"504":{"position":[[58,4]]},"506":{"position":[[427,4]]},"512":{"position":[[140,4]]},"517":{"position":[[843,4],[2901,4]]},"521":{"position":[[340,4]]},"529":{"position":[[719,4]]},"537":{"position":[[173,4]]},"547":{"position":[[112,4],[1329,4]]},"550":{"position":[[424,4]]},"553":{"position":[[39,4],[203,4]]},"554":{"position":[[39,4],[119,4]]},"556":{"position":[[1446,4]]},"558":{"position":[[87,4]]},"568":{"position":[[234,4]]},"573":{"position":[[1098,4]]},"574":{"position":[[514,4]]},"578":{"position":[[119,4]]},"580":{"position":[[161,4]]},"590":{"position":[[387,4],[1054,4]]},"595":{"position":[[4,4]]},"605":{"position":[[382,4]]},"606":{"position":[[311,4]]},"616":{"position":[[87,4],[164,4]]},"619":{"position":[[641,4]]},"622":{"position":[[388,4]]},"628":{"position":[[452,4]]},"639":{"position":[[57,4]]},"649":{"position":[[13,4]]},"659":{"position":[[608,4],[622,4]]},"660":{"position":[[324,4],[369,4]]},"662":{"position":[[38,4],[513,4],[680,4]]},"664":{"position":[[437,4],[672,4]]},"665":{"position":[[154,4],[243,4]]},"667":{"position":[[237,4]]},"676":{"position":[[451,4],[465,4]]},"677":{"position":[[38,4],[513,4],[680,4]]},"679":{"position":[[416,4]]},"680":{"position":[[154,4],[243,4]]},"682":{"position":[[208,4]]},"691":{"position":[[451,4],[465,4]]},"692":{"position":[[38,4],[513,4],[680,4]]},"694":{"position":[[416,4]]},"695":{"position":[[154,4],[243,4]]},"697":{"position":[[577,4]]},"703":{"position":[[142,4]]},"709":{"position":[[830,4]]},"715":{"position":[[199,4]]},"738":{"position":[[346,4],[754,4]]},"744":{"position":[[144,4]]},"747":{"position":[[1278,4]]},"757":{"position":[[1195,4]]},"758":{"position":[[482,4]]},"764":{"position":[[653,4]]},"770":{"position":[[1195,4]]},"771":{"position":[[482,4]]},"777":{"position":[[653,4]]},"789":{"position":[[852,4],[914,4]]},"792":{"position":[[128,4]]},"797":{"position":[[1195,4]]},"798":{"position":[[480,4]]},"804":{"position":[[651,4]]},"812":{"position":[[1195,4]]},"813":{"position":[[480,4]]},"819":{"position":[[651,4]]},"828":{"position":[[1195,4]]},"829":{"position":[[480,4]]},"835":{"position":[[651,4]]},"854":{"position":[[93,4]]},"867":{"position":[[1903,4]]},"870":{"position":[[268,4]]},"879":{"position":[[1481,4]]},"882":{"position":[[104,4]]},"888":{"position":[[159,4]]},"903":{"position":[[389,4]]},"908":{"position":[[526,4]]},"915":{"position":[[389,4]]},"918":{"position":[[128,4]]},"924":{"position":[[526,4]]},"930":{"position":[[389,4]]},"935":{"position":[[526,4]]},"944":{"position":[[138,4]]},"947":{"position":[[1175,4],[1229,4]]},"951":{"position":[[526,4]]},"956":{"position":[[180,4]]},"963":{"position":[[543,4]]},"969":{"position":[[526,4]]},"979":{"position":[[254,4]]},"994":{"position":[[112,4]]},"1008":{"position":[[1214,4],[1472,4],[1560,4]]},"1012":{"position":[[239,4]]},"1023":{"position":[[92,4],[1310,4]]},"1025":{"position":[[386,4]]},"1040":{"position":[[86,4]]},"1046":{"position":[[460,4]]},"1047":{"position":[[481,4]]},"1050":{"position":[[86,4]]},"1054":{"position":[[460,4]]},"1055":{"position":[[481,4]]},"1058":{"position":[[86,4]]},"1062":{"position":[[460,4]]},"1063":{"position":[[481,4]]},"1065":{"position":[[111,4]]},"1073":{"position":[[363,4]]},"1080":{"position":[[820,4]]},"1087":{"position":[[302,4]]},"1099":{"position":[[484,4]]},"1104":{"position":[[182,4]]},"1110":{"position":[[502,4]]},"1128":{"position":[[419,4]]},"1140":{"position":[[2179,4]]},"1156":{"position":[[253,4]]},"1189":{"position":[[393,4]]},"1194":{"position":[[269,4]]},"1195":{"position":[[412,4],[472,4],[694,4]]},"1197":{"position":[[399,4]]},"1199":{"position":[[88,4],[164,4]]},"1207":{"position":[[482,4]]},"1243":{"position":[[903,4]]},"1247":{"position":[[834,4],[958,4]]},"1248":{"position":[[426,4]]},"1275":{"position":[[52,4]]},"1289":{"position":[[1446,4]]},"1292":{"position":[[1052,4]]},"1298":{"position":[[1278,4]]},"1306":{"position":[[1052,4]]},"1310":{"position":[[767,4]]},"1316":{"position":[[2179,4]]},"1322":{"position":[[1665,4]]},"1329":{"position":[[1052,4]]},"1335":{"position":[[1313,4]]},"1340":{"position":[[2179,4]]},"1351":{"position":[[2179,4]]},"1357":{"position":[[331,4]]},"1370":{"position":[[938,4]]},"1379":{"position":[[3668,4]]},"1387":{"position":[[432,4],[1058,4]]},"1388":{"position":[[465,4]]},"1391":{"position":[[232,4],[315,4]]},"1403":{"position":[[3668,4]]},"1414":{"position":[[3668,4]]},"1421":{"position":[[419,4]]},"1429":{"position":[[263,4]]},"1431":{"position":[[2202,4]]},"1434":{"position":[[503,4]]},"1437":{"position":[[1324,4],[1365,4],[1392,4]]},"1440":{"position":[[1348,4],[1578,4]]},"1443":{"position":[[222,4]]},"1448":{"position":[[1038,4]]},"1453":{"position":[[554,4]]},"1461":{"position":[[119,4],[184,4],[1527,4],[1774,4],[3105,4],[3308,4],[3325,4],[4449,4]]},"1467":{"position":[[232,4],[288,4]]},"1470":{"position":[[645,4],[925,4]]},"1473":{"position":[[92,4]]},"1474":{"position":[[79,4]]},"1477":{"position":[[1191,5],[2721,4],[3421,5]]}},"keywords":{}}],["earli",{"_index":1862,"title":{},"content":{"156":{"position":[[752,6]]},"158":{"position":[[253,6]]}},"keywords":{}}],["earlier",{"_index":2074,"title":{},"content":{"183":{"position":[[1568,8],[3153,8]]},"296":{"position":[[6752,8],[7102,8]]},"313":{"position":[[3122,8]]},"377":{"position":[[1534,7]]},"849":{"position":[[3169,8]]},"917":{"position":[[491,7]]},"919":{"position":[[1028,7]]},"965":{"position":[[491,7]]}},"keywords":{}}],["earliest",{"_index":2658,"title":{},"content":{"250":{"position":[[501,10]]}},"keywords":{}}],["eas",{"_index":1200,"title":{},"content":{"82":{"position":[[3704,4]]}},"keywords":{}}],["easi",{"_index":441,"title":{},"content":{"14":{"position":[[964,4]]},"132":{"position":[[103,4]]},"324":{"position":[[1217,4]]},"330":{"position":[[488,4]]},"332":{"position":[[187,4]]},"1462":{"position":[[210,4]]}},"keywords":{}}],["easier",{"_index":1756,"title":{},"content":{"135":{"position":[[908,6]]},"190":{"position":[[1308,6]]},"281":{"position":[[2747,6]]},"323":{"position":[[1788,6]]}},"keywords":{}}],["easiest",{"_index":2227,"title":{},"content":{"204":{"position":[[807,7]]},"849":{"position":[[1624,7]]}},"keywords":{}}],["easili",{"_index":1840,"title":{},"content":{"150":{"position":[[146,6]]},"180":{"position":[[115,6]]},"236":{"position":[[160,7]]},"321":{"position":[[137,6],[1969,6]]},"326":{"position":[[752,6]]},"548":{"position":[[166,6]]},"552":{"position":[[81,6],[357,6]]},"635":{"position":[[394,6]]},"661":{"position":[[105,6]]},"1461":{"position":[[38,6],[2123,6]]}},"keywords":{}}],["east",{"_index":2123,"title":{},"content":{"190":{"position":[[966,4]]},"344":{"position":[[166,4]]},"385":{"position":[[257,5]]},"392":{"position":[[648,4]]},"393":{"position":[[302,4]]},"398":{"position":[[303,4]]},"403":{"position":[[150,4]]},"417":{"position":[[2076,4],[2184,4]]},"418":{"position":[[363,4]]},"433":{"position":[[713,4]]},"868":{"position":[[144,4]]},"880":{"position":[[160,4]]},"947":{"position":[[464,4],[781,4]]},"1126":{"position":[[264,4]]},"1145":{"position":[[239,4]]},"1151":{"position":[[151,4]]},"1152":{"position":[[174,4],[355,4]]},"1163":{"position":[[249,4]]},"1171":{"position":[[243,4]]},"1197":{"position":[[246,4]]},"1207":{"position":[[139,4]]}},"keywords":{}}],["eastern",{"_index":6549,"title":{},"content":{"1452":{"position":[[3508,7]]}},"keywords":{}}],["ec2",{"_index":2463,"title":{},"content":{"222":{"position":[[140,4],[710,4],[907,3],[987,3]]},"1154":{"position":[[567,3]]},"1322":{"position":[[140,4],[710,4],[907,3],[987,3]]},"1335":{"position":[[140,4],[710,4],[907,3],[987,3]]}},"keywords":{}}],["ecosystem",{"_index":157,"title":{},"content":{"4":{"position":[[201,10]]},"84":{"position":[[535,10],[710,10]]},"102":{"position":[[223,9]]},"320":{"position":[[326,10]]},"322":{"position":[[60,9]]}},"keywords":{}}],["edit",{"_index":372,"title":{"61":{"position":[[0,7]]},"139":{"position":[[0,7]]},"143":{"position":[[0,7]]},"258":{"position":[[0,4]]},"259":{"position":[[0,4]]},"260":{"position":[[9,8]]},"261":{"position":[[0,4]]},"264":{"position":[[0,4]]},"272":{"position":[[0,4]]},"275":{"position":[[0,4]]},"1445":{"position":[[0,7]]},"1446":{"position":[[7,4]]}},"content":{"13":{"position":[[75,7],[139,4],[378,5],[604,5]]},"14":{"position":[[345,6],[737,4]]},"25":{"position":[[28,4],[155,4]]},"31":{"position":[[112,5]]},"54":{"position":[[571,7]]},"55":{"position":[[824,4]]},"60":{"position":[[540,8],[599,6]]},"61":{"position":[[1060,5]]},"75":{"position":[[386,4]]},"82":{"position":[[3050,4]]},"135":{"position":[[368,7]]},"138":{"position":[[2769,4]]},"139":{"position":[[16,4],[70,4],[221,4]]},"142":{"position":[[2854,4]]},"143":{"position":[[16,4],[78,4],[253,4]]},"150":{"position":[[214,4]]},"162":{"position":[[675,4],[999,4]]},"182":{"position":[[236,6]]},"183":{"position":[[4344,6]]},"227":{"position":[[226,4]]},"228":{"position":[[209,4],[694,4],[737,5],[1367,7]]},"230":{"position":[[412,4],[798,5]]},"254":{"position":[[826,6],[954,5],[2883,6],[3544,6],[3884,5],[3928,4]]},"257":{"position":[[115,4]]},"259":{"position":[[73,5],[133,4],[157,4],[182,4],[483,7],[1474,7],[1567,7],[1617,4],[1644,4],[1754,5],[1814,4],[1838,4],[1871,4],[2177,7],[3020,7],[3125,7]]},"260":{"position":[[34,8]]},"263":{"position":[[1199,5]]},"264":{"position":[[145,5],[870,4],[913,4]]},"273":{"position":[[125,4]]},"274":{"position":[[480,8]]},"275":{"position":[[28,6],[167,5],[1118,6]]},"285":{"position":[[205,4]]},"295":{"position":[[206,7]]},"296":{"position":[[8074,7]]},"308":{"position":[[836,4]]},"350":{"position":[[69,7]]},"358":{"position":[[69,7]]},"369":{"position":[[69,7]]},"376":{"position":[[69,7]]},"386":{"position":[[69,7]]},"391":{"position":[[69,7]]},"396":{"position":[[69,7]]},"401":{"position":[[96,7]]},"407":{"position":[[69,7]]},"416":{"position":[[69,7]]},"423":{"position":[[69,7]]},"431":{"position":[[69,7]]},"437":{"position":[[69,7]]},"447":{"position":[[69,7]]},"453":{"position":[[69,7]]},"459":{"position":[[69,7]]},"465":{"position":[[69,7]]},"472":{"position":[[69,7]]},"481":{"position":[[69,7]]},"488":{"position":[[524,7],[600,7]]},"495":{"position":[[69,7]]},"508":{"position":[[69,7]]},"516":{"position":[[69,7]]},"525":{"position":[[69,7]]},"533":{"position":[[69,7]]},"539":{"position":[[69,7]]},"544":{"position":[[69,7]]},"555":{"position":[[69,7]]},"563":{"position":[[88,7]]},"572":{"position":[[69,7]]},"583":{"position":[[69,7]]},"592":{"position":[[69,7]]},"600":{"position":[[69,7]]},"610":{"position":[[69,7]]},"618":{"position":[[69,7]]},"624":{"position":[[69,7]]},"630":{"position":[[69,7]]},"636":{"position":[[69,7]]},"646":{"position":[[69,7]]},"653":{"position":[[69,7]]},"659":{"position":[[681,7],[757,7]]},"669":{"position":[[69,7]]},"676":{"position":[[524,7],[600,7]]},"684":{"position":[[69,7]]},"691":{"position":[[524,7],[600,7]]},"699":{"position":[[69,7]]},"705":{"position":[[69,7]]},"711":{"position":[[69,7]]},"719":{"position":[[69,7]]},"727":{"position":[[69,7]]},"734":{"position":[[69,7]]},"740":{"position":[[69,7]]},"746":{"position":[[69,7]]},"756":{"position":[[69,7]]},"767":{"position":[[127,4]]},"769":{"position":[[69,7]]},"781":{"position":[[69,7]]},"796":{"position":[[69,7]]},"805":{"position":[[251,4]]},"811":{"position":[[69,7]]},"820":{"position":[[251,4]]},"821":{"position":[[1149,7]]},"827":{"position":[[69,7]]},"836":{"position":[[251,4]]},"840":{"position":[[1502,4],[1774,4]]},"841":{"position":[[69,7]]},"849":{"position":[[2393,4],[2815,4]]},"850":{"position":[[69,7]]},"858":{"position":[[69,7]]},"866":{"position":[[69,7]]},"878":{"position":[[69,7]]},"884":{"position":[[69,7]]},"890":{"position":[[69,7]]},"896":{"position":[[69,7]]},"906":{"position":[[69,7]]},"912":{"position":[[1273,7]]},"921":{"position":[[69,7]]},"933":{"position":[[69,7]]},"949":{"position":[[69,7]]},"958":{"position":[[69,7]]},"967":{"position":[[69,7]]},"981":{"position":[[69,7]]},"989":{"position":[[252,4],[1017,4]]},"990":{"position":[[69,7]]},"996":{"position":[[69,7]]},"1004":{"position":[[335,4],[1100,4]]},"1005":{"position":[[69,7]]},"1014":{"position":[[69,7]]},"1021":{"position":[[69,7]]},"1027":{"position":[[69,7]]},"1033":{"position":[[73,7]]},"1036":{"position":[[505,7]]},"1044":{"position":[[69,7]]},"1052":{"position":[[69,7]]},"1060":{"position":[[69,7]]},"1069":{"position":[[69,7]]},"1075":{"position":[[69,7]]},"1084":{"position":[[69,7]]},"1093":{"position":[[69,7]]},"1100":{"position":[[69,7]]},"1106":{"position":[[69,7]]},"1112":{"position":[[69,7]]},"1124":{"position":[[69,7]]},"1132":{"position":[[69,7]]},"1183":{"position":[[703,7]]},"1200":{"position":[[587,4]]},"1201":{"position":[[147,7],[222,7]]},"1203":{"position":[[269,4]]},"1244":{"position":[[66,4]]},"1245":{"position":[[737,4]]},"1252":{"position":[[69,7]]},"1289":{"position":[[221,4]]},"1293":{"position":[[147,7],[222,7]]},"1307":{"position":[[147,7],[222,7]]},"1317":{"position":[[147,7],[222,7]]},"1321":{"position":[[1,4]]},"1330":{"position":[[147,7],[222,7]]},"1334":{"position":[[1,4]]},"1341":{"position":[[147,7],[222,7]]},"1352":{"position":[[147,7],[222,7]]},"1359":{"position":[[147,7],[222,7]]},"1380":{"position":[[147,7],[222,7]]},"1404":{"position":[[147,7],[222,7]]},"1415":{"position":[[147,7],[222,7]]},"1432":{"position":[[147,7],[222,7]]},"1446":{"position":[[30,4],[103,4],[129,7],[247,4],[375,8],[404,7]]},"1447":{"position":[[20,4],[364,4],[532,8],[665,8]]},"1448":{"position":[[100,4],[399,8],[606,4],[829,6],[936,8]]},"1449":{"position":[[387,7]]}},"keywords":{}}],["edit'",{"_index":2479,"title":{},"content":{"227":{"position":[[353,6]]}},"keywords":{}}],["editor",{"_index":598,"title":{},"content":{"25":{"position":[[250,7]]},"230":{"position":[[812,6]]},"253":{"position":[[131,6]]},"259":{"position":[[359,7],[2048,7]]},"295":{"position":[[1560,6]]},"313":{"position":[[131,6]]},"406":{"position":[[156,7]]},"488":{"position":[[694,7]]},"659":{"position":[[851,7]]},"676":{"position":[[694,7]]},"691":{"position":[[694,7]]},"942":{"position":[[665,7]]},"1032":{"position":[[141,7]]},"1047":{"position":[[621,6]]},"1055":{"position":[[621,6]]},"1063":{"position":[[621,6]]},"1200":{"position":[[542,6]]},"1245":{"position":[[517,6]]},"1383":{"position":[[87,7]]}},"keywords":{}}],["editor"",{"_index":4282,"title":{},"content":{"597":{"position":[[165,12]]},"598":{"position":[[94,12],[992,13]]}},"keywords":{}}],["edits_by_us",{"_index":2772,"title":{},"content":{"254":{"position":[[598,14],[2655,14]]}},"keywords":{}}],["edits_this_day",{"_index":2075,"title":{},"content":{"183":{"position":[[1779,15],[1932,14],[3037,15],[3118,14],[3585,15],[3738,14]]}},"keywords":{}}],["ef1e5eaa64a6",{"_index":3725,"title":{},"content":{"439":{"position":[[350,12]]}},"keywords":{}}],["effect",{"_index":348,"title":{},"content":{"11":{"position":[[1854,6]]},"56":{"position":[[862,11]]},"165":{"position":[[2189,9]]},"211":{"position":[[684,12]]},"291":{"position":[[1372,11]]},"302":{"position":[[1302,11]]},"309":{"position":[[102,6]]},"319":{"position":[[1238,9]]},"324":{"position":[[99,12]]},"343":{"position":[[258,9]]},"377":{"position":[[1474,6]]},"397":{"position":[[482,6]]},"602":{"position":[[775,8]]},"767":{"position":[[1314,7],[1667,7]]},"792":{"position":[[1609,7]]},"824":{"position":[[1380,7],[1731,7]]},"904":{"position":[[1244,7]]},"917":{"position":[[1939,7]]},"918":{"position":[[1536,7]]},"965":{"position":[[1939,7]]},"977":{"position":[[295,11]]},"1147":{"position":[[385,11]]},"1174":{"position":[[385,11]]},"1182":{"position":[[382,6]]},"1191":{"position":[[384,6]]},"1216":{"position":[[385,11]]},"1224":{"position":[[385,11]]},"1230":{"position":[[1024,6]]},"1262":{"position":[[384,6]]},"1389":{"position":[[383,6]]},"1437":{"position":[[244,11],[635,6],[1154,7]]},"1438":{"position":[[344,7],[660,11]]},"1439":{"position":[[109,7],[204,7],[823,7]]},"1452":{"position":[[520,9],[1872,7],[2171,6]]},"1455":{"position":[[350,7]]},"1473":{"position":[[310,11]]},"1479":{"position":[[565,7]]}},"keywords":{}}],["effect"",{"_index":4296,"title":{},"content":{"602":{"position":[[670,12]]}},"keywords":{}}],["effici",{"_index":191,"title":{"330":{"position":[[0,9]]}},"content":{"4":{"position":[[763,9]]},"8":{"position":[[879,11]]},"17":{"position":[[1062,9]]},"20":{"position":[[540,11]]},"42":{"position":[[365,10]]},"77":{"position":[[390,9]]},"101":{"position":[[286,11]]},"106":{"position":[[292,10]]},"110":{"position":[[1350,9]]},"121":{"position":[[1933,9]]},"197":{"position":[[502,9]]},"211":{"position":[[557,9]]},"232":{"position":[[762,9]]},"237":{"position":[[516,12]]},"241":{"position":[[402,10]]},"319":{"position":[[1219,9]]},"320":{"position":[[1396,12]]},"616":{"position":[[12,9]]},"869":{"position":[[1616,10]]},"975":{"position":[[269,11]]},"1391":{"position":[[145,11]]},"1451":{"position":[[476,11]]},"1459":{"position":[[1413,9]]},"1475":{"position":[[204,12]]}},"keywords":{}}],["efficient.certain",{"_index":2905,"title":{},"content":{"281":{"position":[[3150,17]]}},"keywords":{}}],["effort",{"_index":2268,"title":{},"content":{"209":{"position":[[924,6]]}},"keywords":{}}],["effortlessli",{"_index":5131,"title":{},"content":{"974":{"position":[[158,12]]}},"keywords":{}}],["eft",{"_index":3439,"title":{},"content":{"374":{"position":[[38,5]]}},"keywords":{}}],["either.when",{"_index":5058,"title":{},"content":{"922":{"position":[[1340,11]]}},"keywords":{}}],["ej6r5rtasvn++/+mpwull7sudoobzr6erlklhet7uxxusazojmxfkzpearmcjwhi",{"_index":1243,"title":{},"content":{"83":{"position":[[1572,64]]},"371":{"position":[[491,64]]},"1139":{"position":[[378,64]]}},"keywords":{}}],["elaps",{"_index":857,"title":{},"content":{"56":{"position":[[2349,8]]}},"keywords":{}}],["elast",{"_index":5819,"title":{},"content":{"1194":{"position":[[41,7]]},"1196":{"position":[[147,7]]}},"keywords":{}}],["elastic'",{"_index":5821,"title":{},"content":{"1194":{"position":[[169,9]]}},"keywords":{}}],["elasticsearch",{"_index":5420,"title":{"1193":{"position":[[0,13]]}},"content":{"1120":{"position":[[874,13]]},"1194":{"position":[[106,13]]},"1195":{"position":[[114,13],[207,13],[271,13],[388,13]]},"1196":{"position":[[354,14],[447,14],[533,13],[932,13]]},"1197":{"position":[[479,13]]},"1198":{"position":[[25,13]]},"1200":{"position":[[857,13]]}},"keywords":{}}],["elasticsearch:dev",{"_index":5421,"title":{},"content":{"1120":{"position":[[939,17]]},"1197":{"position":[[166,17]]}},"keywords":{}}],["elba"",{"_index":2355,"title":{},"content":{"210":{"position":[[2782,11]]}},"keywords":{}}],["element",{"_index":5614,"title":{},"content":{"1140":{"position":[[2215,7]]},"1316":{"position":[[2215,7]]},"1340":{"position":[[2215,7]]},"1351":{"position":[[2215,7]]},"1379":{"position":[[3716,7]]},"1403":{"position":[[3716,7]]},"1414":{"position":[[3716,7]]},"1431":{"position":[[2238,7]]}},"keywords":{}}],["elig",{"_index":3259,"title":{},"content":{"349":{"position":[[409,8]]}},"keywords":{}}],["elseif",{"_index":6007,"title":{},"content":{"1292":{"position":[[1139,6]]},"1306":{"position":[[1139,6]]},"1329":{"position":[[1139,6]]}},"keywords":{}}],["elsewher",{"_index":1891,"title":{},"content":{"161":{"position":[[75,10]]},"180":{"position":[[357,10]]},"320":{"position":[[132,10]]}},"keywords":{}}],["elt",{"_index":2196,"title":{"323":{"position":[[29,3]]}},"content":{"198":{"position":[[104,3],[470,3]]},"323":{"position":[[97,3]]},"324":{"position":[[1036,3]]}},"keywords":{}}],["email",{"_index":1859,"title":{},"content":{"156":{"position":[[414,5]]},"174":{"position":[[369,5]]},"191":{"position":[[245,6]]},"192":{"position":[[659,6]]},"223":{"position":[[717,5]]},"295":{"position":[[273,5]]},"296":{"position":[[457,6],[1428,6],[4630,7],[5019,7],[6410,6]]},"332":{"position":[[555,5]]},"469":{"position":[[52,6]]},"471":{"position":[[69,5]]},"473":{"position":[[258,6]]},"477":{"position":[[913,5]]},"540":{"position":[[155,5],[167,5]]},"598":{"position":[[875,5]]},"611":{"position":[[539,5],[549,5]]},"612":{"position":[[262,6]]},"617":{"position":[[903,5]]},"642":{"position":[[176,5]]},"712":{"position":[[300,6],[307,5],[322,5]]},"713":{"position":[[155,6]]},"840":{"position":[[90,5]]},"857":{"position":[[224,5]]},"989":{"position":[[462,5]]},"1004":{"position":[[545,5]]},"1133":{"position":[[311,5],[326,5]]},"1134":{"position":[[179,6]]},"1298":{"position":[[717,5]]},"1346":{"position":[[717,5]]},"1455":{"position":[[573,5],[599,5]]},"1456":{"position":[[73,5]]},"1457":{"position":[[104,6],[111,5],[137,5]]}},"keywords":{}}],["email"",{"_index":4072,"title":{},"content":{"546":{"position":[[441,12],[859,11]]},"594":{"position":[[429,12],[847,11]]}},"keywords":{}}],["email/usernam",{"_index":4760,"title":{},"content":{"842":{"position":[[1134,14]]}},"keywords":{}}],["email_act",{"_index":4539,"title":{},"content":{"735":{"position":[[475,14]]},"736":{"position":[[369,14]]}},"keywords":{}}],["emailclick",{"_index":3800,"title":{},"content":{"472":{"position":[[803,10]]}},"keywords":{}}],["emailproject",{"_index":4484,"title":{},"content":{"709":{"position":[[538,12]]}},"keywords":{}}],["emailsengag",{"_index":4387,"title":{},"content":{"649":{"position":[[332,17]]}},"keywords":{}}],["emailsspam",{"_index":5140,"title":{},"content":{"979":{"position":[[222,10]]}},"keywords":{}}],["emailsworkflow",{"_index":4398,"title":{},"content":{"649":{"position":[[648,15]]}},"keywords":{}}],["emb",{"_index":1413,"title":{},"content":{"98":{"position":[[693,6]]},"1439":{"position":[[960,5]]}},"keywords":{}}],["embark",{"_index":2334,"title":{},"content":{"210":{"position":[[2408,6]]}},"keywords":{}}],["embed",{"_index":1596,"title":{"1275":{"position":[[0,9]]}},"content":{"112":{"position":[[690,8]]},"1274":{"position":[[199,11],[226,9],[247,9]]},"1275":{"position":[[38,9],[192,10],[352,9]]},"1277":{"position":[[182,9],[527,9],[546,9],[614,9],[666,9]]}},"keywords":{}}],["embeddingmodel",{"_index":5954,"title":{},"content":{"1277":{"position":[[511,15]]}},"keywords":{}}],["emit",{"_index":1015,"title":{},"content":{"67":{"position":[[1773,7]]},"909":{"position":[[560,5]]},"925":{"position":[[560,5]]},"936":{"position":[[560,5]]},"952":{"position":[[560,5]]},"970":{"position":[[560,5]]}},"keywords":{}}],["emoji",{"_index":6283,"title":{},"content":{"1362":{"position":[[760,5],[770,5]]}},"keywords":{}}],["empow",{"_index":1264,"title":{},"content":{"84":{"position":[[622,9]]},"323":{"position":[[1858,10]]}},"keywords":{}}],["empti",{"_index":409,"title":{"75":{"position":[[0,5]]},"805":{"position":[[0,5]]},"820":{"position":[[0,5]]},"836":{"position":[[0,5]]}},"content":{"13":{"position":[[1241,5]]},"75":{"position":[[284,5],[348,5]]},"164":{"position":[[1863,6],[1973,6],[2010,6]]},"206":{"position":[[684,6]]},"208":{"position":[[1489,5]]},"491":{"position":[[181,5]]},"616":{"position":[[374,6],[395,6]]},"664":{"position":[[202,5]]},"679":{"position":[[181,5]]},"694":{"position":[[181,5]]},"720":{"position":[[352,5]]},"747":{"position":[[995,5]]},"805":{"position":[[169,6]]},"820":{"position":[[169,6]]},"836":{"position":[[169,6]]},"877":{"position":[[189,6]]},"1047":{"position":[[574,6],[598,5]]},"1055":{"position":[[574,6],[598,5]]},"1063":{"position":[[574,6],[598,5]]},"1070":{"position":[[884,6]]},"1140":{"position":[[2292,5]]},"1144":{"position":[[1128,5]]},"1213":{"position":[[805,5]]},"1292":{"position":[[1169,5]]},"1306":{"position":[[1169,5]]},"1316":{"position":[[2292,5]]},"1329":{"position":[[1169,5]]},"1340":{"position":[[2292,5]]},"1351":{"position":[[2292,5]]},"1431":{"position":[[2315,5]]},"1452":{"position":[[2401,6]]}},"keywords":{}}],["empty_identifi",{"_index":5879,"title":{},"content":{"1209":{"position":[[848,16]]}},"keywords":{}}],["emul",{"_index":2631,"title":{},"content":{"246":{"position":[[13,10],[101,10],[178,9]]},"301":{"position":[[893,7]]}},"keywords":{}}],["en.wikipedia.org",{"_index":3068,"title":{},"content":{"313":{"position":[[3671,17]]},"315":{"position":[[1987,19],[2359,18]]}},"keywords":{}}],["enabl",{"_index":367,"title":{"942":{"position":[[3,6]]}},"content":{"12":{"position":[[311,7]]},"55":{"position":[[966,7]]},"105":{"position":[[812,8]]},"138":{"position":[[211,7],[360,6],[1353,6]]},"141":{"position":[[521,7],[670,6]]},"142":{"position":[[324,7],[473,6],[1346,6]]},"169":{"position":[[155,7]]},"196":{"position":[[107,7]]},"197":{"position":[[223,8]]},"204":{"position":[[506,7]]},"211":{"position":[[641,6]]},"233":{"position":[[107,7]]},"236":{"position":[[2815,6]]},"237":{"position":[[4,6]]},"238":{"position":[[161,7]]},"245":{"position":[[169,7]]},"253":{"position":[[327,6]]},"291":{"position":[[1211,6]]},"302":{"position":[[1157,6]]},"307":{"position":[[3206,7]]},"308":{"position":[[217,7],[309,6],[376,8]]},"309":{"position":[[3530,7]]},"313":{"position":[[327,6]]},"320":{"position":[[1358,7],[2312,7]]},"324":{"position":[[20,7]]},"364":{"position":[[287,6]]},"367":{"position":[[98,6]]},"395":{"position":[[88,8],[100,6]]},"411":{"position":[[6,8],[228,8]]},"428":{"position":[[222,7]]},"429":{"position":[[52,7],[740,7],[1019,6],[1447,7]]},"489":{"position":[[138,6],[485,6],[752,6]]},"522":{"position":[[451,7]]},"530":{"position":[[451,7]]},"548":{"position":[[372,6]]},"571":{"position":[[157,7],[339,6]]},"581":{"position":[[68,7]]},"617":{"position":[[109,7],[281,6]]},"662":{"position":[[138,6],[485,6],[752,6]]},"677":{"position":[[138,6],[485,6],[752,6]]},"692":{"position":[[138,6],[485,6],[752,6]]},"753":{"position":[[546,6]]},"767":{"position":[[692,6],[830,6]]},"780":{"position":[[392,7]]},"784":{"position":[[338,6]]},"786":{"position":[[389,8],[467,6]]},"792":{"position":[[970,6],[1109,6]]},"793":{"position":[[505,6]]},"808":{"position":[[182,6],[521,6]]},"824":{"position":[[762,6],[901,6]]},"840":{"position":[[665,8]]},"849":{"position":[[364,6],[430,6],[1140,8]]},"864":{"position":[[1405,6]]},"866":{"position":[[522,6]]},"878":{"position":[[532,6]]},"903":{"position":[[82,7]]},"904":{"position":[[761,6],[868,6]]},"915":{"position":[[82,7]]},"918":{"position":[[970,6],[1077,6]]},"919":{"position":[[505,6],[698,6]]},"930":{"position":[[82,7]]},"931":{"position":[[182,6],[525,6],[840,6]]},"942":{"position":[[1,8],[236,8],[384,6],[526,6],[536,6],[608,7]]},"963":{"position":[[236,7]]},"976":{"position":[[170,7]]},"1042":{"position":[[83,6],[825,6],[863,7],[1311,6]]},"1043":{"position":[[505,6],[747,6],[1489,6],[1527,7]]},"1051":{"position":[[761,6],[1003,6],[1751,6],[1789,7]]},"1059":{"position":[[182,6],[525,6],[767,6],[1544,6],[1582,7]]},"1131":{"position":[[204,6]]},"1138":{"position":[[408,6]]},"1154":{"position":[[706,6]]},"1155":{"position":[[290,7]]},"1160":{"position":[[335,6]]},"1165":{"position":[[275,6]]},"1182":{"position":[[107,8],[312,8],[413,8],[539,6]]},"1183":{"position":[[1672,6]]},"1191":{"position":[[107,8],[314,8],[415,8],[543,6]]},"1198":{"position":[[427,6]]},"1245":{"position":[[51,7],[233,6]]},"1255":{"position":[[338,6]]},"1262":{"position":[[107,8],[314,8],[415,8],[543,6]]},"1276":{"position":[[230,6]]},"1281":{"position":[[320,8],[337,6]]},"1282":{"position":[[409,6]]},"1288":{"position":[[121,6]]},"1289":{"position":[[631,6],[786,8],[1046,6]]},"1292":{"position":[[1215,6]]},"1295":{"position":[[320,8],[337,6]]},"1297":{"position":[[1,6]]},"1303":{"position":[[182,6],[525,6],[757,6]]},"1306":{"position":[[1215,6]]},"1310":{"position":[[424,6]]},"1319":{"position":[[320,8],[337,6]]},"1322":{"position":[[1265,6]]},"1329":{"position":[[1215,6]]},"1334":{"position":[[288,8]]},"1345":{"position":[[1,6]]},"1373":{"position":[[743,6]]},"1374":{"position":[[743,6]]},"1384":{"position":[[13,6],[1213,8]]},"1389":{"position":[[107,8],[313,8],[414,8],[541,6]]},"1397":{"position":[[183,6],[522,6]]},"1398":{"position":[[182,6],[521,6]]},"1408":{"position":[[584,6]]},"1409":{"position":[[505,6]]},"1452":{"position":[[424,7],[1181,7],[1278,8],[1542,7],[2219,6],[3852,6],[4061,7],[4086,7],[4296,7],[4318,6],[4376,6],[4449,6]]}},"keywords":{}}],["enable_auto_commit=tru",{"_index":2667,"title":{},"content":{"250":{"position":[[885,24]]}},"keywords":{}}],["enable_auto_cursor",{"_index":4793,"title":{},"content":{"843":{"position":[[391,19]]}},"keywords":{}}],["enabled.a",{"_index":3933,"title":{},"content":{"515":{"position":[[149,9]]},"889":{"position":[[46,9]]}},"keywords":{}}],["enabled.access",{"_index":5886,"title":{},"content":{"1226":{"position":[[89,14]]}},"keywords":{}}],["enableda",{"_index":3809,"title":{},"content":{"475":{"position":[[105,8]]},"597":{"position":[[104,8]]}},"keywords":{}}],["enabledon",{"_index":5238,"title":{},"content":{"1040":{"position":[[331,9]]},"1050":{"position":[[331,9]]},"1058":{"position":[[331,9]]}},"keywords":{}}],["enabledus",{"_index":3393,"title":{},"content":{"366":{"position":[[76,11]]}},"keywords":{}}],["enc",{"_index":1182,"title":{},"content":{"82":{"position":[[2590,4],[4731,4]]},"1384":{"position":[[1076,3]]}},"keywords":{}}],["enc[aes256_gcm,data:dlfidmrhfdxn//nwqtpcsjog,iv:dhq5dxhyooski6zizcum67r6dd/2mse4lenrgot6gpy=,tag:fns2ptlzylagvz7vp/yciq==,type:str",{"_index":1205,"title":{},"content":{"82":{"position":[[4361,131]]}},"keywords":{}}],["enc[aes256_gcm,data:iddy+fl0/gacsh+6tjrdww+g,iv:ye8st7zj9wsmrms6boaywlajenc9qenjkkjo6bpp/te=,tag:eps9unkdg4eaficgujltfq==,type:str",{"_index":1173,"title":{},"content":{"82":{"position":[[2132,131]]}},"keywords":{}}],["enc[aes256_gcm,data:k/clly65pthtg2u=,iv:1bnmy8wjtjhfbcxlr1kfcsnmgvxrl5lgtdreuzigceu=,tag:5gkcguvpihxxdim7hhunna==,type:str",{"_index":1172,"title":{},"content":{"82":{"position":[[1998,123]]}},"keywords":{}}],["enc[aes256_gcm,data:w+f7mmwqhw==,iv:amhhncjwajnjagujzgjhzvzuzaeschepupbau7rvecg=,tag:62hguhnnsdqjdkdwynj7mq==,type:str",{"_index":1174,"title":{},"content":{"82":{"position":[[2270,119]]}},"keywords":{}}],["encapsul",{"_index":708,"title":{},"content":{"38":{"position":[[591,13]]},"95":{"position":[[133,11]]}},"keywords":{}}],["enclos",{"_index":1398,"title":{},"content":{"97":{"position":[[799,9]]},"1292":{"position":[[1275,8]]},"1306":{"position":[[1275,8]]},"1329":{"position":[[1275,8]]}},"keywords":{}}],["encod",{"_index":98,"title":{},"content":{"2":{"position":[[808,7]]},"67":{"position":[[1230,7]]},"332":{"position":[[439,6]]},"418":{"position":[[210,9]]},"419":{"position":[[1849,8]]},"439":{"position":[[467,9]]},"441":{"position":[[458,8]]},"491":{"position":[[476,9]]},"504":{"position":[[1478,8]]},"546":{"position":[[947,9]]},"547":{"position":[[1851,8]]},"638":{"position":[[239,9]]},"639":{"position":[[1476,8]]},"664":{"position":[[497,9],[732,9]]},"679":{"position":[[476,9]]},"694":{"position":[[476,9]]},"1022":{"position":[[276,9]]},"1023":{"position":[[1832,8]]},"1196":{"position":[[564,9],[615,8]]},"1475":{"position":[[1363,7]]}},"keywords":{}}],["encompass",{"_index":3479,"title":{},"content":{"385":{"position":[[383,11]]}},"keywords":{}}],["encount",{"_index":2847,"title":{},"content":{"279":{"position":[[344,11]]},"805":{"position":[[114,9]]},"820":{"position":[[114,9]]},"836":{"position":[[114,9]]},"907":{"position":[[1896,9]]},"910":{"position":[[8,9]]},"923":{"position":[[1896,9]]},"926":{"position":[[8,9]]},"937":{"position":[[8,9]]},"953":{"position":[[8,9]]},"968":{"position":[[1896,9]]},"971":{"position":[[8,9]]},"1313":{"position":[[1646,9]]},"1337":{"position":[[1646,9]]}},"keywords":{}}],["encourag",{"_index":3656,"title":{},"content":{"429":{"position":[[332,10]]}},"keywords":{}}],["encrypt",{"_index":1146,"title":{},"content":{"82":{"position":[[298,7],[379,9],[516,8],[673,10],[1739,7],[1924,9],[3734,9],[3972,7],[4026,7],[4047,9]]},"307":{"position":[[1130,9],[1604,9],[1980,9],[2472,9]]},"309":{"position":[[2423,9],[3030,9]]},"429":{"position":[[1030,10],[1175,11],[1248,11],[1313,10]]},"548":{"position":[[384,10],[510,7],[676,9],[712,7],[774,7]]},"640":{"position":[[205,9]]},"1292":{"position":[[1337,10]]},"1306":{"position":[[1337,10]]},"1329":{"position":[[1337,10]]}},"keywords":{}}],["encrypted_suffix",{"_index":1206,"title":{},"content":{"82":{"position":[[4547,17],[4975,17]]}},"keywords":{}}],["end",{"_index":139,"title":{},"content":{"3":{"position":[[864,6]]},"14":{"position":[[1163,3]]},"32":{"position":[[121,3],[128,3]]},"43":{"position":[[139,3],[146,3]]},"50":{"position":[[192,3],[199,3]]},"83":{"position":[[2337,3]]},"107":{"position":[[921,3],[1014,3]]},"115":{"position":[[1032,3],[1039,3]]},"124":{"position":[[337,3],[344,3]]},"135":{"position":[[250,3],[257,3]]},"156":{"position":[[689,3],[696,3]]},"163":{"position":[[948,3],[955,4]]},"189":{"position":[[175,6]]},"208":{"position":[[283,3]]},"232":{"position":[[113,4],[306,3],[313,3],[703,3]]},"240":{"position":[[4728,4]]},"323":{"position":[[1144,3],[1151,3]]},"324":{"position":[[431,3]]},"332":{"position":[[192,3],[199,3],[774,3],[781,3]]},"371":{"position":[[1256,3]]},"417":{"position":[[237,3]]},"419":{"position":[[2526,6]]},"438":{"position":[[237,3]]},"441":{"position":[[1135,6]]},"502":{"position":[[697,3]]},"504":{"position":[[2155,6]]},"517":{"position":[[1424,3],[2438,3],[2607,3]]},"545":{"position":[[237,3]]},"546":{"position":[[363,3]]},"547":{"position":[[2528,6]]},"550":{"position":[[55,6]]},"556":{"position":[[1680,3]]},"590":{"position":[[918,3]]},"594":{"position":[[351,3]]},"611":{"position":[[788,3]]},"631":{"position":[[342,3]]},"639":{"position":[[2153,6]]},"747":{"position":[[897,3]]},"864":{"position":[[1650,4]]},"1008":{"position":[[408,3],[1285,3]]},"1021":{"position":[[1263,3]]},"1023":{"position":[[2509,6]]},"1028":{"position":[[212,3]]},"1085":{"position":[[704,3]]},"1139":{"position":[[1143,3]]},"1140":{"position":[[2339,3],[2374,3]]},"1292":{"position":[[1382,3],[1412,4]]},"1306":{"position":[[1382,3],[1412,4]]},"1316":{"position":[[2339,3],[2374,3]]},"1329":{"position":[[1382,3],[1412,4]]},"1340":{"position":[[2339,3],[2374,3]]},"1351":{"position":[[2339,3],[2374,3]]},"1370":{"position":[[967,3]]},"1379":{"position":[[476,3],[525,3]]},"1384":{"position":[[532,3]]},"1387":{"position":[[910,3]]},"1403":{"position":[[476,3],[525,3]]},"1414":{"position":[[476,3],[525,3]]},"1423":{"position":[[848,3]]},"1431":{"position":[[2362,3],[2397,3]]},"1434":{"position":[[1111,3],[1723,3],[2205,3]]},"1456":{"position":[[249,7],[316,6]]}},"keywords":{}}],["end_dat",{"_index":3950,"title":{},"content":{"517":{"position":[[1414,9],[2597,9]]},"556":{"position":[[1670,9]]},"557":{"position":[[411,9]]},"611":{"position":[[778,9]]},"631":{"position":[[332,9]]},"632":{"position":[[174,9]]},"747":{"position":[[887,9]]},"748":{"position":[[332,9]]},"1028":{"position":[[202,9]]},"1029":{"position":[[144,9]]},"1085":{"position":[[694,9]]},"1086":{"position":[[292,9]]}},"keywords":{}}],["end_fram",{"_index":5627,"title":{},"content":{"1140":{"position":[[2411,9]]},"1316":{"position":[[2411,9]]},"1340":{"position":[[2411,9]]},"1351":{"position":[[2411,9]]},"1431":{"position":[[2434,9]]}},"keywords":{}}],["end_partit",{"_index":5630,"title":{},"content":{"1140":{"position":[[2449,13]]},"1316":{"position":[[2449,13]]},"1340":{"position":[[2449,13]]},"1351":{"position":[[2449,13]]},"1431":{"position":[[2472,13]]}},"keywords":{}}],["endedprovid",{"_index":6586,"title":{},"content":{"1456":{"position":[[349,13]]}},"keywords":{}}],["endpoint",{"_index":258,"title":{"37":{"position":[[0,10]]},"83":{"position":[[14,9]]},"491":{"position":[[0,8]]},"664":{"position":[[0,8]]},"679":{"position":[[0,8]]},"694":{"position":[[0,8]]},"1034":{"position":[[0,8]]},"1239":{"position":[[0,9]]},"1267":{"position":[[0,9]]},"1440":{"position":[[10,9]]},"1447":{"position":[[0,8]]}},"content":{"7":{"position":[[765,9]]},"13":{"position":[[777,8]]},"20":{"position":[[148,8],[888,8]]},"21":{"position":[[138,8],[347,8]]},"37":{"position":[[1,9],[158,10],[318,9]]},"38":{"position":[[68,8]]},"44":{"position":[[571,9]]},"45":{"position":[[133,8],[199,8]]},"52":{"position":[[31,8]]},"54":{"position":[[212,9]]},"56":{"position":[[924,8],[1011,9],[1028,8],[1726,8],[1782,8]]},"66":{"position":[[326,8]]},"72":{"position":[[668,9]]},"74":{"position":[[121,9]]},"80":{"position":[[448,9],[569,8]]},"81":{"position":[[429,8],[1066,9],[1131,8],[1302,8],[1572,8],[2193,8],[2578,9]]},"82":{"position":[[6,8],[3449,8]]},"83":{"position":[[43,8],[577,9],[947,9]]},"114":{"position":[[804,9]]},"115":{"position":[[39,9]]},"119":{"position":[[62,8],[297,9]]},"120":{"position":[[251,8],[351,9],[368,8],[754,8],[834,8],[1869,8],[1929,8]]},"121":{"position":[[118,8],[337,8],[419,8],[672,8],[788,8],[1147,9],[1800,8]]},"122":{"position":[[6,8],[1153,9],[1378,8],[1496,8]]},"123":{"position":[[528,9]]},"124":{"position":[[71,8],[221,8],[313,8],[434,9],[674,8],[860,8]]},"125":{"position":[[203,8],[332,10],[475,8],[686,10],[1003,9],[1149,8],[1308,8]]},"144":{"position":[[502,8]]},"158":{"position":[[504,8]]},"162":{"position":[[321,9]]},"163":{"position":[[723,10]]},"166":{"position":[[88,8]]},"206":{"position":[[189,9]]},"218":{"position":[[494,8],[593,8]]},"221":{"position":[[543,8],[1667,9]]},"224":{"position":[[145,8],[735,8],[1013,8]]},"225":{"position":[[90,8]]},"228":{"position":[[1169,8]]},"229":{"position":[[853,8]]},"230":{"position":[[216,8],[1332,8]]},"254":{"position":[[2501,9]]},"259":{"position":[[277,8],[495,8],[1966,8],[2189,8]]},"285":{"position":[[400,9]]},"291":{"position":[[835,8]]},"302":{"position":[[835,8]]},"307":{"position":[[1059,9],[1527,9],[1909,9],[2395,9]]},"309":{"position":[[2346,9],[2953,9]]},"314":{"position":[[2042,9]]},"323":{"position":[[1195,8]]},"344":{"position":[[53,9]]},"349":{"position":[[267,8]]},"351":{"position":[[1,9]]},"359":{"position":[[1,9]]},"360":{"position":[[39,9]]},"370":{"position":[[1,9],[1722,8],[1731,8]]},"371":{"position":[[98,9]]},"377":{"position":[[1,9]]},"378":{"position":[[38,9]]},"379":{"position":[[804,8],[1155,8],[1224,8]]},"385":{"position":[[24,8],[294,9]]},"387":{"position":[[1,9]]},"388":{"position":[[108,9]]},"392":{"position":[[1,9],[388,9],[402,8],[419,8]]},"393":{"position":[[98,9]]},"397":{"position":[[1,9],[562,8],[579,8]]},"398":{"position":[[98,9]]},"402":{"position":[[1,9]]},"403":{"position":[[38,9]]},"408":{"position":[[1,9]]},"417":{"position":[[1,9],[576,8],[593,8]]},"418":{"position":[[38,9]]},"419":{"position":[[573,8],[1282,8]]},"424":{"position":[[1,9]]},"425":{"position":[[39,9]]},"432":{"position":[[1,9]]},"433":{"position":[[80,9],[491,9]]},"438":{"position":[[1,9]]},"439":{"position":[[38,9]]},"440":{"position":[[589,8],[1298,8]]},"448":{"position":[[1,9]]},"449":{"position":[[108,9]]},"454":{"position":[[1,9]]},"455":{"position":[[39,9]]},"460":{"position":[[1,9]]},"461":{"position":[[39,9]]},"464":{"position":[[322,8]]},"466":{"position":[[1,9],[219,9]]},"467":{"position":[[39,9]]},"473":{"position":[[108,9]]},"482":{"position":[[1,9]]},"485":{"position":[[127,9],[152,8],[474,9]]},"486":{"position":[[41,8]]},"488":{"position":[[210,8],[629,8]]},"496":{"position":[[1,9]]},"497":{"position":[[38,9]]},"502":{"position":[[1,9]]},"503":{"position":[[38,9]]},"504":{"position":[[517,8]]},"509":{"position":[[1,9]]},"510":{"position":[[38,9]]},"517":{"position":[[1,9]]},"518":{"position":[[108,9]]},"527":{"position":[[108,9]]},"534":{"position":[[1,9]]},"535":{"position":[[108,9]]},"540":{"position":[[1,9]]},"541":{"position":[[39,9]]},"545":{"position":[[1,9]]},"546":{"position":[[38,9]]},"547":{"position":[[574,8],[1284,8]]},"548":{"position":[[632,8]]},"556":{"position":[[1,9]]},"557":{"position":[[108,9]]},"564":{"position":[[1,9]]},"566":{"position":[[38,9]]},"573":{"position":[[1,9]]},"575":{"position":[[94,9]]},"584":{"position":[[1,9]]},"586":{"position":[[94,9]]},"593":{"position":[[1,9]]},"594":{"position":[[38,9]]},"601":{"position":[[1,9]]},"606":{"position":[[154,8]]},"611":{"position":[[1,9]]},"612":{"position":[[108,9]]},"619":{"position":[[1,9]]},"620":{"position":[[38,9]]},"625":{"position":[[1,9]]},"626":{"position":[[39,9]]},"631":{"position":[[1,9]]},"632":{"position":[[39,9]]},"635":{"position":[[55,8],[120,8],[435,9]]},"637":{"position":[[1,9],[230,9],[311,9]]},"638":{"position":[[38,9]]},"639":{"position":[[6,9],[256,9],[515,8]]},"646":{"position":[[280,9]]},"647":{"position":[[38,9]]},"654":{"position":[[1,9]]},"655":{"position":[[38,9]]},"657":{"position":[[127,9],[152,8],[474,9]]},"658":{"position":[[41,8]]},"659":{"position":[[367,8],[786,8]]},"670":{"position":[[1,9]]},"671":{"position":[[39,9]]},"673":{"position":[[127,9],[152,8],[474,9]]},"674":{"position":[[41,8]]},"675":{"position":[[105,8],[177,8]]},"676":{"position":[[210,8],[629,8]]},"685":{"position":[[1,9]]},"686":{"position":[[99,9]]},"688":{"position":[[127,9],[152,8],[474,9]]},"689":{"position":[[41,8]]},"691":{"position":[[210,8],[629,8]]},"700":{"position":[[1,9]]},"701":{"position":[[39,9]]},"706":{"position":[[1,9]]},"707":{"position":[[39,9]]},"712":{"position":[[1,9]]},"713":{"position":[[39,9]]},"720":{"position":[[1,9]]},"721":{"position":[[108,9]]},"723":{"position":[[128,10],[139,9]]},"735":{"position":[[1,9]]},"736":{"position":[[38,9]]},"741":{"position":[[1,9]]},"742":{"position":[[39,9]]},"747":{"position":[[1,9]]},"748":{"position":[[39,9]]},"753":{"position":[[587,9]]},"757":{"position":[[1,9]]},"758":{"position":[[98,9]]},"767":{"position":[[733,9],[2419,8]]},"770":{"position":[[1,9]]},"771":{"position":[[98,9]]},"782":{"position":[[1,9]]},"783":{"position":[[38,9]]},"784":{"position":[[389,9]]},"792":{"position":[[1011,9],[2400,8]]},"793":{"position":[[546,9]]},"797":{"position":[[1,9]]},"798":{"position":[[98,9]]},"808":{"position":[[562,9]]},"812":{"position":[[1,9]]},"813":{"position":[[98,9]]},"824":{"position":[[803,9],[2531,8]]},"828":{"position":[[1,9]]},"829":{"position":[[98,9]]},"842":{"position":[[1,9]]},"843":{"position":[[39,9]]},"851":{"position":[[1,9]]},"852":{"position":[[39,9]]},"859":{"position":[[1,9]]},"860":{"position":[[108,9]]},"866":{"position":[[563,9]]},"867":{"position":[[1,9]]},"868":{"position":[[38,9]]},"878":{"position":[[573,9]]},"879":{"position":[[1,9]]},"880":{"position":[[38,9]]},"885":{"position":[[1,9]]},"886":{"position":[[39,9]]},"891":{"position":[[1,9]]},"892":{"position":[[38,9]]},"897":{"position":[[1,9]]},"904":{"position":[[802,9],[2346,8]]},"907":{"position":[[1,9]]},"908":{"position":[[98,9]]},"918":{"position":[[1011,9],[2638,8]]},"919":{"position":[[546,9]]},"923":{"position":[[1,9]]},"924":{"position":[[98,9]]},"931":{"position":[[566,9]]},"934":{"position":[[1,9]]},"935":{"position":[[98,9]]},"950":{"position":[[1,9]]},"951":{"position":[[98,9]]},"959":{"position":[[1,9]]},"960":{"position":[[39,9]]},"968":{"position":[[1,9]]},"969":{"position":[[98,9]]},"982":{"position":[[1,9]]},"983":{"position":[[39,9]]},"991":{"position":[[1,9]]},"992":{"position":[[38,9]]},"997":{"position":[[1,9]]},"998":{"position":[[39,9]]},"1009":{"position":[[1,9]]},"1010":{"position":[[108,9]]},"1015":{"position":[[1,9]]},"1016":{"position":[[39,9]]},"1021":{"position":[[274,9]]},"1022":{"position":[[28,9]]},"1023":{"position":[[554,8],[1265,8]]},"1028":{"position":[[1,9]]},"1029":{"position":[[39,9]]},"1037":{"position":[[39,9]]},"1042":{"position":[[1233,8],[1352,9]]},"1043":{"position":[[546,9]]},"1045":{"position":[[1,9]]},"1046":{"position":[[38,9]]},"1047":{"position":[[370,8]]},"1051":{"position":[[802,9],[2062,8]]},"1053":{"position":[[1,9]]},"1054":{"position":[[38,9]]},"1055":{"position":[[370,8]]},"1059":{"position":[[566,9]]},"1061":{"position":[[1,9]]},"1062":{"position":[[38,9]]},"1063":{"position":[[370,8]]},"1070":{"position":[[1,9]]},"1071":{"position":[[108,9]]},"1076":{"position":[[1,9]]},"1078":{"position":[[38,9]]},"1085":{"position":[[1,9]]},"1086":{"position":[[120,9]]},"1089":{"position":[[156,9]]},"1094":{"position":[[1,9]]},"1101":{"position":[[1,9]]},"1102":{"position":[[39,9]]},"1107":{"position":[[1,9]]},"1108":{"position":[[38,9]]},"1113":{"position":[[1,9]]},"1114":{"position":[[39,9]]},"1125":{"position":[[1,9],[354,8],[371,8]]},"1126":{"position":[[54,9]]},"1133":{"position":[[1,9]]},"1134":{"position":[[38,9]]},"1138":{"position":[[1,9],[1013,8],[1022,8],[1677,8]]},"1139":{"position":[[42,9]]},"1144":{"position":[[1,9],[696,9],[716,8],[732,8]]},"1145":{"position":[[42,9]]},"1146":{"position":[[440,8]]},"1151":{"position":[[1,9]]},"1152":{"position":[[42,9]]},"1154":{"position":[[757,9]]},"1156":{"position":[[433,8]]},"1162":{"position":[[1,9]]},"1163":{"position":[[42,9]]},"1170":{"position":[[1,9],[696,9],[716,8],[732,8]]},"1171":{"position":[[42,9]]},"1173":{"position":[[452,8]]},"1179":{"position":[[1,9],[1214,8]]},"1180":{"position":[[42,9]]},"1188":{"position":[[1,9]]},"1189":{"position":[[43,9]]},"1196":{"position":[[1,9],[70,8],[79,8]]},"1197":{"position":[[36,9],[192,9]]},"1198":{"position":[[478,9]]},"1201":{"position":[[608,8]]},"1206":{"position":[[1,9]]},"1207":{"position":[[42,9]]},"1213":{"position":[[1,9]]},"1214":{"position":[[42,9]]},"1215":{"position":[[440,8]]},"1220":{"position":[[1,9]]},"1221":{"position":[[42,9]]},"1223":{"position":[[452,8]]},"1230":{"position":[[1,9]]},"1231":{"position":[[112,9]]},"1239":{"position":[[81,8]]},"1241":{"position":[[96,9]]},"1247":{"position":[[1,9]]},"1248":{"position":[[112,9]]},"1253":{"position":[[1,9]]},"1254":{"position":[[46,9]]},"1255":{"position":[[389,9]]},"1260":{"position":[[1,9]]},"1261":{"position":[[42,9]]},"1270":{"position":[[42,9]]},"1272":{"position":[[83,9],[103,8]]},"1277":{"position":[[1,9]]},"1278":{"position":[[42,9]]},"1285":{"position":[[1,9]]},"1287":{"position":[[42,9]]},"1289":{"position":[[1097,9],[1509,9]]},"1300":{"position":[[1,9]]},"1302":{"position":[[42,9]]},"1303":{"position":[[566,9],[808,9]]},"1310":{"position":[[830,9]]},"1313":{"position":[[1,9],[1221,8]]},"1314":{"position":[[42,9]]},"1322":{"position":[[1316,9],[1710,9]]},"1324":{"position":[[1,9]]},"1326":{"position":[[42,9]]},"1335":{"position":[[1358,9]]},"1337":{"position":[[1,9],[1221,8]]},"1338":{"position":[[42,9]]},"1348":{"position":[[1,9],[1221,8]]},"1349":{"position":[[42,9]]},"1356":{"position":[[1,9]]},"1357":{"position":[[42,9]]},"1358":{"position":[[622,10]]},"1359":{"position":[[379,8]]},"1362":{"position":[[163,9]]},"1363":{"position":[[54,9]]},"1368":{"position":[[42,9]]},"1373":{"position":[[784,9],[1311,8]]},"1374":{"position":[[784,9],[1315,8]]},"1376":{"position":[[1,9]]},"1377":{"position":[[42,9]]},"1386":{"position":[[1,9]]},"1387":{"position":[[77,9],[631,9]]},"1397":{"position":[[563,9]]},"1398":{"position":[[562,9]]},"1400":{"position":[[1,9]]},"1401":{"position":[[42,9]]},"1408":{"position":[[506,8],[625,9]]},"1409":{"position":[[546,9]]},"1411":{"position":[[1,9]]},"1412":{"position":[[42,9]]},"1420":{"position":[[1,9]]},"1421":{"position":[[43,9]]},"1427":{"position":[[1,9],[981,8]]},"1428":{"position":[[42,9]]},"1435":{"position":[[565,8]]},"1436":{"position":[[146,9]]},"1442":{"position":[[285,8]]},"1447":{"position":[[70,8],[634,8]]},"1453":{"position":[[1282,8]]},"1461":{"position":[[2754,8],[3191,8],[3377,9],[3797,10]]},"1469":{"position":[[94,9]]},"1472":{"position":[[654,9]]},"1480":{"position":[[188,8],[288,9],[305,8]]}},"keywords":{}}],["endpoint>/webhook",{"_index":4402,"title":{},"content":{"657":{"position":[[557,20]]}},"keywords":{}}],["endpoint'",{"_index":1911,"title":{},"content":{"162":{"position":[[367,10]]}},"keywords":{}}],["endpoint.<br/>option",{"_index":6435,"title":{},"content":{"1434":{"position":[[298,30]]}},"keywords":{}}],["endpoint.a",{"_index":762,"title":{},"content":{"44":{"position":[[403,10]]}},"keywords":{}}],["endpoint.at",{"_index":5902,"title":{},"content":{"1236":{"position":[[132,11]]}},"keywords":{}}],["endpointconfig",{"_index":3885,"title":{},"content":{"491":{"position":[[54,14]]},"664":{"position":[[54,14]]},"679":{"position":[[54,14]]},"694":{"position":[[54,14]]}},"keywords":{}}],["endpointth",{"_index":5820,"title":{},"content":{"1194":{"position":[[70,11]]}},"keywords":{}}],["enforc",{"_index":4208,"title":{},"content":{"577":{"position":[[36,8]]},"588":{"position":[[31,8]]},"1292":{"position":[[1452,8]]},"1306":{"position":[[1452,8]]},"1329":{"position":[[1452,8]]}},"keywords":{}}],["engin",{"_index":2317,"title":{},"content":{"210":{"position":[[2074,9],[2398,9]]},"224":{"position":[[1188,7]]},"241":{"position":[[428,11]]},"319":{"position":[[92,8]]},"321":{"position":[[35,6]]},"324":{"position":[[46,9]]},"1203":{"position":[[76,6],[87,6],[170,6],[274,6],[289,7],[304,6],[335,6]]},"1206":{"position":[[363,6],[374,6]]},"1207":{"position":[[108,6]]},"1292":{"position":[[1496,6],[1528,7]]},"1306":{"position":[[1496,6],[1528,7]]},"1329":{"position":[[1496,6],[1528,7]]}},"keywords":{}}],["engine_attrib",{"_index":6021,"title":{},"content":{"1292":{"position":[[1560,13]]},"1306":{"position":[[1560,13]]},"1329":{"position":[[1560,13]]}},"keywords":{}}],["engine_url",{"_index":5859,"title":{},"content":{"1206":{"position":[[351,11]]},"1207":{"position":[[87,11]]}},"keywords":{}}],["english",{"_index":3067,"title":{},"content":{"313":{"position":[[3604,7]]}},"keywords":{}}],["enhanc",{"_index":1459,"title":{},"content":{"101":{"position":[[669,7]]},"977":{"position":[[698,8]]}},"keywords":{}}],["enorm",{"_index":2688,"title":{},"content":{"253":{"position":[[609,8]]},"313":{"position":[[609,8]]}},"keywords":{}}],["enough",{"_index":2271,"title":{},"content":{"209":{"position":[[1416,6]]},"237":{"position":[[3494,6]]},"277":{"position":[[450,7]]},"285":{"position":[[31,6]]},"326":{"position":[[347,6]]},"515":{"position":[[974,6]]},"785":{"position":[[602,6]]},"912":{"position":[[1518,6]]},"922":{"position":[[2337,6],[3137,6],[3344,6]]},"1461":{"position":[[617,6]]}},"keywords":{}}],["enough"",{"_index":5224,"title":{},"content":{"1036":{"position":[[417,12]]}},"keywords":{}}],["enrich",{"_index":2845,"title":{},"content":{"279":{"position":[[225,6],[1069,6]]},"280":{"position":[[273,9],[1182,6]]},"331":{"position":[[712,9]]}},"keywords":{}}],["enrichandaddtowindow",{"_index":2856,"title":{},"content":{"279":{"position":[[1458,20]]}},"keywords":{}}],["enrichandaddtowindow.sql",{"_index":2857,"title":{},"content":{"279":{"position":[[1542,24]]}},"keywords":{}}],["ensur",{"_index":316,"title":{},"content":{"11":{"position":[[733,8]]},"20":{"position":[[1004,6]]},"34":{"position":[[838,7]]},"41":{"position":[[161,7],[230,6]]},"70":{"position":[[130,6]]},"115":{"position":[[1023,8]]},"121":{"position":[[236,7]]},"156":{"position":[[680,8]]},"165":{"position":[[1931,6]]},"169":{"position":[[1340,6]]},"183":{"position":[[2549,7]]},"192":{"position":[[1568,6]]},"196":{"position":[[496,8]]},"197":{"position":[[494,7]]},"200":{"position":[[50,6]]},"202":{"position":[[1,6]]},"203":{"position":[[501,6]]},"206":{"position":[[440,6]]},"209":{"position":[[756,6],[1032,7],[1550,6]]},"211":{"position":[[548,8],[697,8]]},"221":{"position":[[927,6],[1927,7]]},"225":{"position":[[371,6]]},"233":{"position":[[503,8]]},"237":{"position":[[736,7],[1471,6],[2346,7],[2632,8]]},"239":{"position":[[2118,8]]},"240":{"position":[[3476,7]]},"264":{"position":[[453,7]]},"307":{"position":[[2915,6]]},"308":{"position":[[1112,6]]},"323":{"position":[[1047,6]]},"332":{"position":[[24,6],[235,6]]},"335":{"position":[[1,6]]},"340":{"position":[[200,6]]},"366":{"position":[[869,6]]},"368":{"position":[[249,7]]},"379":{"position":[[1208,6]]},"402":{"position":[[839,6]]},"543":{"position":[[244,6]]},"553":{"position":[[175,6]]},"578":{"position":[[94,6]]},"645":{"position":[[198,6]]},"652":{"position":[[198,6]]},"661":{"position":[[520,6]]},"750":{"position":[[580,6]]},"755":{"position":[[249,7]]},"766":{"position":[[580,6]]},"768":{"position":[[249,7]]},"785":{"position":[[707,6]]},"789":{"position":[[568,6]]},"795":{"position":[[247,7]]},"807":{"position":[[568,6]]},"810":{"position":[[247,7]]},"823":{"position":[[568,6]]},"826":{"position":[[247,7]]},"903":{"position":[[895,6]]},"905":{"position":[[252,7]]},"910":{"position":[[90,6]]},"915":{"position":[[895,6]]},"920":{"position":[[252,7]]},"926":{"position":[[90,6]]},"930":{"position":[[895,6]]},"932":{"position":[[252,7]]},"937":{"position":[[90,6]]},"948":{"position":[[252,7]]},"953":{"position":[[90,6]]},"963":{"position":[[1049,6]]},"966":{"position":[[252,7]]},"971":{"position":[[90,6]]},"975":{"position":[[335,8]]},"976":{"position":[[311,7]]},"989":{"position":[[1033,6]]},"1004":{"position":[[1116,6]]},"1006":{"position":[[114,6],[303,6]]},"1008":{"position":[[736,8]]},"1020":{"position":[[2064,6]]},"1040":{"position":[[611,6]]},"1050":{"position":[[611,6]]},"1058":{"position":[[611,6]]},"1165":{"position":[[4,6]]},"1189":{"position":[[407,6]]},"1197":{"position":[[413,6]]},"1203":{"position":[[237,6]]},"1204":{"position":[[266,7]]},"1207":{"position":[[496,6]]},"1232":{"position":[[232,6]]},"1248":{"position":[[440,6]]},"1268":{"position":[[572,7]]},"1357":{"position":[[345,6]]},"1358":{"position":[[750,6]]},"1361":{"position":[[24,6]]},"1387":{"position":[[446,6],[1072,6]]},"1388":{"position":[[446,7]]},"1421":{"position":[[433,6]]},"1439":{"position":[[1597,6]]},"1444":{"position":[[591,7]]},"1452":{"position":[[3265,6]]},"1453":{"position":[[999,6]]},"1475":{"position":[[164,6]]},"1479":{"position":[[620,6]]}},"keywords":{}}],["enter",{"_index":1830,"title":{},"content":{"144":{"position":[[671,7]]},"169":{"position":[[1645,6]]},"171":{"position":[[216,5]]},"174":{"position":[[211,5]]},"340":{"position":[[505,6]]},"349":{"position":[[427,5]]},"472":{"position":[[642,5],[710,5],[775,5]]},"487":{"position":[[272,5]]},"675":{"position":[[118,5]]},"895":{"position":[[500,5],[579,5]]},"947":{"position":[[164,5],[508,5]]},"1272":{"position":[[93,5]]}},"keywords":{}}],["enterpris",{"_index":5142,"title":{},"content":{"987":{"position":[[160,10]]},"1002":{"position":[[160,10]]}},"keywords":{}}],["entic",{"_index":2112,"title":{},"content":{"189":{"position":[[413,6]]}},"keywords":{}}],["entir",{"_index":1196,"title":{},"content":{"82":{"position":[[3575,6]]},"112":{"position":[[328,6]]},"324":{"position":[[205,8]]},"413":{"position":[[52,6]]},"417":{"position":[[283,6]]},"438":{"position":[[283,6]]},"454":{"position":[[210,6]]},"479":{"position":[[789,6]]},"480":{"position":[[203,8]]},"502":{"position":[[743,6]]},"545":{"position":[[283,6]]},"548":{"position":[[786,6]]},"761":{"position":[[400,6]]},"762":{"position":[[517,6]]},"774":{"position":[[400,6]]},"775":{"position":[[517,6]]},"792":{"position":[[44,6]]},"801":{"position":[[406,6]]},"802":{"position":[[517,6]]},"816":{"position":[[406,6]]},"817":{"position":[[517,6]]},"832":{"position":[[406,6]]},"833":{"position":[[517,6]]},"918":{"position":[[44,6]]},"922":{"position":[[1581,6],[2225,6]]},"1032":{"position":[[1954,6]]},"1201":{"position":[[469,6]]},"1452":{"position":[[1337,6]]}},"keywords":{}}],["entireti",{"_index":4634,"title":{},"content":{"760":{"position":[[506,10]]},"763":{"position":[[505,10]]},"764":{"position":[[692,9]]},"773":{"position":[[506,10]]},"776":{"position":[[505,10]]},"777":{"position":[[692,9]]},"800":{"position":[[506,10]]},"803":{"position":[[511,10]]},"804":{"position":[[690,9]]},"815":{"position":[[506,10]]},"818":{"position":[[511,10]]},"819":{"position":[[690,9]]},"831":{"position":[[506,10]]},"834":{"position":[[511,10]]},"835":{"position":[[690,9]]},"1461":{"position":[[318,8]]}},"keywords":{}}],["entiti",{"_index":375,"title":{"1446":{"position":[[17,9]]}},"content":{"13":{"position":[[101,9]]},"17":{"position":[[46,8],[279,7]]},"23":{"position":[[31,8],[114,9],[244,8]]},"24":{"position":[[9,8],[133,6]]},"27":{"position":[[13,8],[403,8]]},"32":{"position":[[563,8]]},"33":{"position":[[34,8],[166,8],[393,8]]},"60":{"position":[[456,9],[626,8]]},"61":{"position":[[213,9],[605,6],[860,6]]},"79":{"position":[[178,9]]},"88":{"position":[[227,8]]},"90":{"position":[[17,9]]},"137":{"position":[[430,8]]},"158":{"position":[[206,9]]},"189":{"position":[[1035,9]]},"190":{"position":[[443,8]]},"216":{"position":[[137,9]]},"257":{"position":[[135,9]]},"264":{"position":[[249,6],[470,8],[615,6],[625,8],[760,6],[840,9]]},"270":{"position":[[456,8]]},"273":{"position":[[111,9]]},"274":{"position":[[7,6],[646,8],[779,8],[911,8],[1000,6],[1712,6],[1954,9]]},"275":{"position":[[966,8]]},"296":{"position":[[8100,7]]},"337":{"position":[[5,6],[75,6]]},"524":{"position":[[42,8]]},"537":{"position":[[56,6],[178,6]]},"792":{"position":[[158,6]]},"840":{"position":[[1098,8],[1197,8],[1294,8],[1390,8]]},"849":{"position":[[2109,8],[2219,8]]},"918":{"position":[[158,6]]},"1470":{"position":[[935,6]]}},"keywords":{}}],["entra",{"_index":3693,"title":{"436":{"position":[[18,5]]}},"content":{},"keywords":{}}],["entri",{"_index":2223,"title":{},"content":{"204":{"position":[[494,5]]},"506":{"position":[[406,7]]},"517":{"position":[[834,8],[848,5]]},"867":{"position":[[1800,7]]}},"keywords":{}}],["entriesproject",{"_index":4346,"title":{},"content":{"628":{"position":[[249,14]]}},"keywords":{}}],["entrypoint",{"_index":2524,"title":{},"content":{"236":{"position":[[1059,10],[1338,11]]}},"keywords":{}}],["enum",{"_index":1660,"title":{},"content":{"121":{"position":[[1025,6]]},"280":{"position":[[1399,5]]},"1292":{"position":[[1611,4]]},"1306":{"position":[[1611,4]]},"1329":{"position":[[1611,4]]}},"keywords":{}}],["enumer",{"_index":3948,"title":{},"content":{"517":{"position":[[1111,12],[1161,13],[1325,12],[1375,13],[1814,12],[1864,13]]}},"keywords":{}}],["envelop",{"_index":1171,"title":{},"content":{"82":{"position":[[1934,8]]}},"keywords":{}}],["environ",{"_index":604,"title":{"253":{"position":[[28,12]]},"295":{"position":[[28,12]]},"313":{"position":[[28,12]]}},"content":{"26":{"position":[[103,11],[508,11]]},"29":{"position":[[20,12],[110,11]]},"58":{"position":[[161,12]]},"60":{"position":[[285,12]]},"61":{"position":[[173,11],[553,12],[1174,13]]},"67":{"position":[[771,12],[998,11],[1649,12]]},"81":{"position":[[902,12]]},"88":{"position":[[65,11]]},"169":{"position":[[1163,12],[1468,12]]},"179":{"position":[[192,11],[298,12]]},"183":{"position":[[56,11],[531,12],[700,11]]},"197":{"position":[[584,13]]},"208":{"position":[[154,11]]},"222":{"position":[[104,12]]},"236":{"position":[[719,12],[1203,12]]},"237":{"position":[[545,12]]},"253":{"position":[[99,12]]},"266":{"position":[[289,11],[369,11],[577,12]]},"267":{"position":[[64,11],[899,12],[1068,11]]},"270":{"position":[[346,12]]},"295":{"position":[[1528,12]]},"313":{"position":[[99,12]]},"340":{"position":[[108,12],[328,12]]},"428":{"position":[[274,13]]},"429":{"position":[[358,13]]},"454":{"position":[[73,11],[85,11]]},"455":{"position":[[112,12]]},"747":{"position":[[1310,12]]},"885":{"position":[[315,11]]},"988":{"position":[[82,12]]},"1003":{"position":[[82,12]]},"1008":{"position":[[1090,11]]},"1042":{"position":[[1154,12]]},"1277":{"position":[[220,12],[242,11]]},"1278":{"position":[[149,12]]},"1322":{"position":[[104,12]]},"1335":{"position":[[104,12]]},"1408":{"position":[[427,12]]},"1461":{"position":[[2600,13],[2643,12],[2868,11],[3483,11],[4112,11]]}},"keywords":{}}],["environment.view",{"_index":2784,"title":{},"content":{"260":{"position":[[118,16]]}},"keywords":{}}],["environments)connect",{"_index":3654,"title":{},"content":{"428":{"position":[[189,23]]}},"keywords":{}}],["ep",{"_index":5114,"title":{},"content":{"947":{"position":[[754,2]]}},"keywords":{}}],["epoch",{"_index":5880,"title":{},"content":{"1209":{"position":[[878,5]]}},"keywords":{}}],["equal",{"_index":1490,"title":{},"content":{"105":{"position":[[246,5]]},"111":{"position":[[501,6]]},"120":{"position":[[2282,5]]},"129":{"position":[[509,6]]},"611":{"position":[[900,5]]},"1140":{"position":[[2493,6]]},"1316":{"position":[[2493,6]]},"1340":{"position":[[2493,6]]},"1351":{"position":[[2493,6]]},"1379":{"position":[[576,6]]},"1403":{"position":[[576,6]]},"1414":{"position":[[576,6]]},"1431":{"position":[[2516,6]]},"1476":{"position":[[974,6],[2067,5]]}},"keywords":{}}],["equip",{"_index":2622,"title":{},"content":{"241":{"position":[[490,8]]}},"keywords":{}}],["equival",{"_index":807,"title":{},"content":{"54":{"position":[[350,10]]},"64":{"position":[[241,10]]},"69":{"position":[[646,10]]},"107":{"position":[[53,13]]},"113":{"position":[[935,10]]},"119":{"position":[[446,10]]},"122":{"position":[[337,10]]},"228":{"position":[[1208,11]]},"229":{"position":[[892,11]]},"230":{"position":[[198,10]]},"271":{"position":[[366,10]]},"379":{"position":[[1253,10]]},"870":{"position":[[115,10]]},"987":{"position":[[188,10]]},"989":{"position":[[1156,10]]},"1002":{"position":[[188,10]]},"1004":{"position":[[1239,10]]},"1227":{"position":[[151,10]]},"1228":{"position":[[166,10]]}},"keywords":{}}],["errlvl",{"_index":6301,"title":{},"content":{"1379":{"position":[[632,6]]},"1403":{"position":[[632,6]]},"1414":{"position":[[632,6]]}},"keywords":{}}],["error",{"_index":231,"title":{"759":{"position":[[24,7]]},"763":{"position":[[9,7]]},"772":{"position":[[24,7]]},"776":{"position":[[9,7]]},"799":{"position":[[24,7]]},"803":{"position":[[9,7]]},"814":{"position":[[24,7]]},"818":{"position":[[9,7]]},"830":{"position":[[24,7]]},"834":{"position":[[9,7]]}},"content":{"7":{"position":[[187,6],[210,6],[289,6]]},"11":{"position":[[812,6],[1113,6],[1268,5]]},"12":{"position":[[95,5]]},"13":{"position":[[682,6]]},"72":{"position":[[349,5]]},"88":{"position":[[699,7]]},"106":{"position":[[684,6]]},"128":{"position":[[130,5]]},"129":{"position":[[370,5]]},"138":{"position":[[1692,6]]},"141":{"position":[[1697,6]]},"142":{"position":[[1709,6]]},"146":{"position":[[1010,6]]},"149":{"position":[[1004,6]]},"152":{"position":[[994,6]]},"156":{"position":[[732,6]]},"190":{"position":[[1820,6]]},"192":{"position":[[2182,6]]},"197":{"position":[[609,5]]},"208":{"position":[[735,6]]},"209":{"position":[[268,5]]},"291":{"position":[[689,6]]},"302":{"position":[[689,6]]},"305":{"position":[[273,5],[641,7]]},"307":{"position":[[542,5]]},"309":{"position":[[797,6],[1551,5],[1851,5]]},"379":{"position":[[81,8]]},"414":{"position":[[850,6]]},"417":{"position":[[531,7]]},"419":{"position":[[1910,5],[1958,7]]},"438":{"position":[[531,7]]},"441":{"position":[[519,5],[567,7]]},"502":{"position":[[991,7]]},"504":{"position":[[1539,5],[1587,7]]},"545":{"position":[[531,7]]},"547":{"position":[[1912,5],[1960,7]]},"595":{"position":[[1129,6]]},"603":{"position":[[101,6]]},"639":{"position":[[1537,5],[1585,7]]},"724":{"position":[[590,6]]},"760":{"position":[[102,6],[626,5]]},"761":{"position":[[70,6],[295,5]]},"762":{"position":[[64,6],[182,5]]},"764":{"position":[[79,6],[812,5]]},"773":{"position":[[102,6],[626,5]]},"774":{"position":[[70,6],[295,5]]},"775":{"position":[[64,6],[182,5]]},"777":{"position":[[79,6],[812,5]]},"800":{"position":[[102,6],[626,5]]},"801":{"position":[[70,6],[301,5]]},"802":{"position":[[64,6],[182,5]]},"804":{"position":[[79,6],[810,5]]},"805":{"position":[[127,5]]},"815":{"position":[[102,6],[626,5]]},"816":{"position":[[70,6],[301,5]]},"817":{"position":[[64,6],[182,5]]},"819":{"position":[[79,6],[810,5]]},"820":{"position":[[127,5]]},"831":{"position":[[102,6],[626,5]]},"832":{"position":[[70,6],[301,5]]},"833":{"position":[[64,6],[182,5]]},"835":{"position":[[79,6],[810,5]]},"836":{"position":[[127,5]]},"870":{"position":[[561,5]]},"871":{"position":[[26,5]]},"907":{"position":[[1906,6]]},"923":{"position":[[1906,6]]},"968":{"position":[[1906,6]]},"1023":{"position":[[1893,5],[1941,7]]},"1123":{"position":[[503,6]]},"1156":{"position":[[740,6]]},"1157":{"position":[[142,6]]},"1192":{"position":[[435,7]]},"1243":{"position":[[870,6]]},"1292":{"position":[[1643,5],[1685,6]]},"1306":{"position":[[1643,5],[1685,6]]},"1313":{"position":[[1656,6]]},"1329":{"position":[[1643,5],[1685,6]]},"1337":{"position":[[1656,6]]},"1394":{"position":[[432,7]]},"1423":{"position":[[442,7]]},"1464":{"position":[[311,5]]},"1466":{"position":[[292,5]]},"1467":{"position":[[635,5]]}},"keywords":{}}],["error"",{"_index":4649,"title":{},"content":{"763":{"position":[[50,11]]},"776":{"position":[[50,11]]},"803":{"position":[[50,11]]},"818":{"position":[[50,11]]},"834":{"position":[[50,11]]}},"keywords":{}}],["error(",{"_index":6662,"title":{},"content":{"1470":{"position":[[454,8]]}},"keywords":{}}],["error("not",{"_index":3018,"title":{},"content":{"296":{"position":[[5552,15],[5665,15]]},"315":{"position":[[1672,15]]}},"keywords":{}}],["error.dis",{"_index":1785,"title":{},"content":{"138":{"position":[[1465,14]]},"141":{"position":[[1467,14]]},"142":{"position":[[1474,14]]}},"keywords":{}}],["error.schema",{"_index":3204,"title":{},"content":{"332":{"position":[[421,13]]}},"keywords":{}}],["errorthreshold",{"_index":3604,"title":{},"content":{"418":{"position":[[226,15]]},"439":{"position":[[483,15]]},"546":{"position":[[963,15]]},"638":{"position":[[255,15]]},"1022":{"position":[[292,15]]}},"keywords":{}}],["errorwarninfo",{"_index":2916,"title":{},"content":{"285":{"position":[[150,13]]}},"keywords":{}}],["escap",{"_index":3626,"title":{},"content":{"419":{"position":[[2085,6],[2151,7]]},"441":{"position":[[694,6],[760,7]]},"504":{"position":[[1714,6],[1780,7]]},"547":{"position":[[2087,6],[2153,7]]},"639":{"position":[[1712,6],[1778,7]]},"1023":{"position":[[2068,6],[2134,7]]},"1140":{"position":[[2540,6]]},"1292":{"position":[[1720,6],[1756,7]]},"1306":{"position":[[1720,6],[1756,7]]},"1316":{"position":[[2540,6]]},"1329":{"position":[[1720,6],[1756,7]]},"1340":{"position":[[2540,6]]},"1351":{"position":[[2540,6]]},"1370":{"position":[[977,6]]},"1379":{"position":[[679,6]]},"1403":{"position":[[679,6]]},"1414":{"position":[[679,6]]},"1423":{"position":[[867,6]]},"1431":{"position":[[2563,6]]}},"keywords":{}}],["esoter",{"_index":1265,"title":{},"content":{"84":{"position":[[666,8]]}},"keywords":{}}],["especi",{"_index":1629,"title":{},"content":{"115":{"position":[[874,10]]},"159":{"position":[[613,10]]},"368":{"position":[[375,10]]},"755":{"position":[[375,10]]},"768":{"position":[[375,10]]},"795":{"position":[[373,10]]},"810":{"position":[[373,10]]},"826":{"position":[[373,10]]},"905":{"position":[[378,10]]},"920":{"position":[[378,10]]},"932":{"position":[[378,10]]},"948":{"position":[[378,10]]},"966":{"position":[[378,10]]}},"keywords":{}}],["essenc",{"_index":2173,"title":{},"content":{"196":{"position":[[410,8]]},"233":{"position":[[417,8]]}},"keywords":{}}],["essenti",{"_index":657,"title":{"32":{"position":[[0,9]]}},"content":{"67":{"position":[[1146,12]]},"165":{"position":[[738,11]]},"176":{"position":[[167,9]]},"207":{"position":[[1441,11]]},"208":{"position":[[1772,9]]},"221":{"position":[[1726,9]]},"237":{"position":[[810,9]]},"296":{"position":[[997,12]]},"869":{"position":[[465,11]]},"922":{"position":[[255,11]]}},"keywords":{}}],["establish",{"_index":2260,"title":{},"content":{"208":{"position":[[1946,9]]},"211":{"position":[[487,9]]},"232":{"position":[[737,11]]},"1268":{"position":[[150,11],[285,11]]},"1286":{"position":[[1694,11]]},"1301":{"position":[[1530,11]]},"1325":{"position":[[1694,11]]}},"keywords":{}}],["estuari",{"_index":279,"title":{"198":{"position":[[16,7]]},"205":{"position":[[11,7]]},"244":{"position":[[14,7]]},"249":{"position":[[15,7]]},"334":{"position":[[30,7]]},"349":{"position":[[32,7]]},"363":{"position":[[0,7]]},"479":{"position":[[33,7]]},"947":{"position":[[38,7]]},"1092":{"position":[[36,7]]}},"content":{"8":{"position":[[825,7]]},"19":{"position":[[556,7]]},"30":{"position":[[203,7]]},"38":{"position":[[204,8]]},"52":{"position":[[59,7]]},"53":{"position":[[144,7]]},"56":{"position":[[2002,7]]},"67":{"position":[[630,7],[732,7],[1013,7],[1741,7]]},"83":{"position":[[266,7],[554,7]]},"84":{"position":[[406,7],[485,7],[823,7],[1397,7]]},"88":{"position":[[188,7]]},"112":{"position":[[476,7]]},"136":{"position":[[301,7]]},"169":{"position":[[1364,7]]},"171":{"position":[[22,7]]},"172":{"position":[[22,7]]},"173":{"position":[[22,7],[1122,7]]},"175":{"position":[[396,7]]},"179":{"position":[[4,7]]},"181":{"position":[[90,7]]},"188":{"position":[[18,7]]},"189":{"position":[[695,7],[884,7],[902,7]]},"191":{"position":[[791,7],[1107,7],[1438,7],[1629,7],[1759,7],[1962,7]]},"198":{"position":[[1,7],[117,7],[291,7],[579,7],[776,7],[834,7],[930,7]]},"199":{"position":[[67,7],[285,7]]},"200":{"position":[[24,7]]},"204":{"position":[[221,7],[340,7],[925,7]]},"208":{"position":[[337,7],[410,7]]},"211":{"position":[[84,7],[539,8]]},"212":{"position":[[254,7],[403,7]]},"216":{"position":[[4,7]]},"217":{"position":[[286,7]]},"221":{"position":[[1900,7]]},"232":{"position":[[92,7],[923,7],[998,7]]},"239":{"position":[[2009,7]]},"240":{"position":[[181,7],[752,7],[1068,7],[1399,7],[1590,7],[1720,7],[1923,7],[2324,7],[3136,7]]},"241":{"position":[[98,7]]},"242":{"position":[[471,7]]},"243":{"position":[[248,7],[398,7]]},"245":{"position":[[39,7]]},"246":{"position":[[31,7],[152,7]]},"247":{"position":[[15,7],[246,7],[296,7],[383,7]]},"249":{"position":[[15,7]]},"250":{"position":[[1198,7]]},"253":{"position":[[289,7]]},"257":{"position":[[75,7]]},"262":{"position":[[42,7]]},"273":{"position":[[42,7]]},"283":{"position":[[42,7]]},"286":{"position":[[68,7]]},"288":{"position":[[117,7]]},"289":{"position":[[4,7]]},"290":{"position":[[263,7]]},"295":{"position":[[1030,7]]},"299":{"position":[[117,7]]},"300":{"position":[[4,7]]},"301":{"position":[[216,7]]},"313":{"position":[[289,7]]},"335":{"position":[[118,7]]},"340":{"position":[[224,7]]},"349":{"position":[[15,7]]},"363":{"position":[[33,8],[108,7]]},"364":{"position":[[1,7]]},"427":{"position":[[431,7]]},"429":{"position":[[765,7],[991,7]]},"430":{"position":[[289,7]]},"452":{"position":[[181,7],[244,7]]},"472":{"position":[[439,7],[462,7]]},"479":{"position":[[15,7]]},"487":{"position":[[450,7]]},"534":{"position":[[1241,11]]},"623":{"position":[[110,7]]},"675":{"position":[[161,7],[429,8]]},"739":{"position":[[26,7],[88,7]]},"753":{"position":[[164,7],[241,7]]},"767":{"position":[[44,7],[387,7]]},"780":{"position":[[556,7]]},"792":{"position":[[230,7],[700,7]]},"793":{"position":[[44,7],[235,7]]},"808":{"position":[[44,7],[224,7]]},"824":{"position":[[44,7],[492,7]]},"840":{"position":[[609,7],[981,7],[1881,7],[2250,7]]},"846":{"position":[[349,7]]},"847":{"position":[[140,7]]},"849":{"position":[[1080,7],[1594,7],[2921,7],[3390,7]]},"862":{"position":[[43,7],[141,7]]},"864":{"position":[[1709,7]]},"874":{"position":[[43,7],[141,7]]},"876":{"position":[[969,7]]},"895":{"position":[[81,7]]},"904":{"position":[[44,7],[491,7]]},"910":{"position":[[393,7]]},"918":{"position":[[230,7],[700,7]]},"919":{"position":[[44,7],[235,7]]},"926":{"position":[[393,7]]},"931":{"position":[[44,7],[228,7]]},"937":{"position":[[393,7]]},"940":{"position":[[4,7]]},"945":{"position":[[110,7],[631,7]]},"946":{"position":[[138,7],[180,7],[263,7]]},"947":{"position":[[8,7],[948,7]]},"953":{"position":[[393,7]]},"971":{"position":[[393,7]]},"974":{"position":[[5,7],[210,7]]},"976":{"position":[[227,8],[416,7]]},"1006":{"position":[[1,7],[248,7],[523,8]]},"1007":{"position":[[1,7]]},"1008":{"position":[[1,7],[685,7]]},"1018":{"position":[[65,7]]},"1032":{"position":[[656,7],[1017,7],[1319,7]]},"1042":{"position":[[1123,7],[1431,7]]},"1043":{"position":[[44,7],[235,7]]},"1051":{"position":[[44,7],[491,7]]},"1059":{"position":[[44,7],[228,7]]},"1092":{"position":[[15,7]]},"1096":{"position":[[37,7]]},"1105":{"position":[[165,7],[220,7]]},"1118":{"position":[[4,7],[83,7],[196,7],[458,7],[508,7],[684,7],[809,8],[1144,7]]},"1154":{"position":[[59,8]]},"1198":{"position":[[73,8],[119,7]]},"1251":{"position":[[318,7]]},"1282":{"position":[[333,7]]},"1283":{"position":[[60,8],[271,7]]},"1288":{"position":[[307,7]]},"1289":{"position":[[60,8],[673,7]]},"1297":{"position":[[47,7]]},"1303":{"position":[[44,7],[228,7]]},"1310":{"position":[[348,7]]},"1311":{"position":[[107,7]]},"1320":{"position":[[60,8]]},"1321":{"position":[[354,7]]},"1333":{"position":[[60,8]]},"1334":{"position":[[442,7]]},"1344":{"position":[[60,8]]},"1345":{"position":[[47,7]]},"1373":{"position":[[44,7],[473,7]]},"1374":{"position":[[44,7],[473,7]]},"1383":{"position":[[739,7],[1055,7],[1386,7],[1577,7],[1707,7],[1910,7]]},"1397":{"position":[[44,7],[225,7]]},"1398":{"position":[[44,7],[224,7]]},"1408":{"position":[[396,7],[704,7]]},"1409":{"position":[[44,7],[235,7]]},"1451":{"position":[[1,7],[887,7]]}},"keywords":{}}],["estuary'",{"_index":801,"title":{},"content":{"53":{"position":[[444,9]]},"154":{"position":[[1651,9]]},"173":{"position":[[659,9]]},"180":{"position":[[443,9]]},"203":{"position":[[513,9]]},"211":{"position":[[601,9]]},"345":{"position":[[56,9]]},"869":{"position":[[1279,9]]},"974":{"position":[[90,9]]},"975":{"position":[[375,9]]},"977":{"position":[[788,9]]},"1186":{"position":[[410,9]]}},"keywords":{}}],["estuary'sazur",{"_index":2019,"title":{},"content":{"173":{"position":[[627,14]]}},"keywords":{}}],["estuary.atlassian.net",{"_index":4502,"title":{},"content":{"712":{"position":[[222,22]]}},"keywords":{}}],["estuary.dev",{"_index":4019,"title":{},"content":{"527":{"position":[[261,11]]}},"keywords":{}}],["estuary.jira.com",{"_index":4503,"title":{},"content":{"712":{"position":[[245,17]]}},"keywords":{}}],["estuary/anoth",{"_index":4047,"title":{},"content":{"534":{"position":[[1316,15]]}},"keywords":{}}],["estuary/flow",{"_index":4020,"title":{},"content":{"527":{"position":[[283,12]]},"534":{"position":[[1201,14],[1302,13]]},"535":{"position":[[297,12]]}},"keywords":{}}],["estuary/flow/your",{"_index":4042,"title":{},"content":{"534":{"position":[[343,18]]}},"keywords":{}}],["estuary/flowctl",{"_index":893,"title":{},"content":{"58":{"position":[[730,15]]},"169":{"position":[[977,15]]}},"keywords":{}}],["estuary1.atlassian.net",{"_index":3806,"title":{},"content":{"473":{"position":[[235,22]]}},"keywords":{}}],["estuary_",{"_index":5103,"title":{},"content":{"945":{"position":[[809,9]]}},"keywords":{}}],["estuary_db",{"_index":2137,"title":{},"content":{"191":{"position":[[570,13]]},"192":{"position":[[1096,10],[2330,10]]},"240":{"position":[[531,13]]},"242":{"position":[[589,10],[871,11]]},"1383":{"position":[[518,13]]}},"keywords":{}}],["estuary_flow_us",{"_index":4848,"title":{},"content":{"864":{"position":[[201,17],[285,18],[476,18],[672,18],[767,18],[1079,18],[1128,18],[1177,18],[1222,18],[1266,18],[1304,18],[1384,18]]},"871":{"position":[[163,17]]},"876":{"position":[[201,17],[285,18],[476,18],[672,18],[767,18],[896,18]]}},"keywords":{}}],["estuary_flow_user.flow_watermark",{"_index":4860,"title":{},"content":{"864":{"position":[[1347,33]]}},"keywords":{}}],["estuary_flow_user.flow_watermarks(slot",{"_index":4852,"title":{},"content":{"864":{"position":[[829,38]]}},"keywords":{}}],["estuary_password",{"_index":2134,"title":{},"content":{"191":{"position":[[497,16],[693,16],[1178,17]]},"240":{"position":[[471,16],[654,16],[1139,17]]},"1032":{"position":[[481,16],[835,17]]},"1383":{"position":[[407,16],[641,16],[1126,17]]}},"keywords":{}}],["estuary_publ",{"_index":5098,"title":{},"content":{"945":{"position":[[36,20]]}},"keywords":{}}],["estuary_rol",{"_index":2140,"title":{},"content":{"191":{"position":[[623,12],[638,15],[1211,13]]},"192":{"position":[[1158,12]]},"240":{"position":[[584,12],[599,15],[1172,13]]},"242":{"position":[[541,13],[610,13],[763,13]]},"1032":{"position":[[550,12],[565,15],[868,13]]},"1383":{"position":[[375,13],[571,12],[586,15],[1159,13]]}},"keywords":{}}],["estuary_schema",{"_index":2142,"title":{},"content":{"191":{"position":[[726,14],[743,17]]},"192":{"position":[[1115,14],[2345,15]]},"240":{"position":[[687,14],[704,17]]},"242":{"position":[[516,14],[831,15]]},"1383":{"position":[[267,14],[674,14],[691,17]]}},"keywords":{}}],["estuary_stag",{"_index":5212,"title":{},"content":{"1031":{"position":[[319,15]]},"1034":{"position":[[873,15]]}},"keywords":{}}],["estuary_us",{"_index":2141,"title":{},"content":{"191":{"position":[[658,12],[673,15]]},"192":{"position":[[1007,12]]},"240":{"position":[[619,12],[634,15]]},"242":{"position":[[729,13]]},"1032":{"position":[[414,12],[429,15]]},"1037":{"position":[[207,12]]},"1383":{"position":[[389,13],[606,12],[621,15]]},"1384":{"position":[[644,13],[790,14]]}},"keywords":{}}],["estuary_wh",{"_index":2139,"title":{},"content":{"191":{"position":[[605,13]]},"192":{"position":[[1141,10]]},"240":{"position":[[566,13]]},"242":{"position":[[671,11]]},"1032":{"position":[[357,13]]},"1383":{"position":[[553,13]]},"1388":{"position":[[677,10]]}},"keywords":{}}],["et",{"_index":6550,"title":{},"content":{"1452":{"position":[[3526,4]]}},"keywords":{}}],["etc",{"_index":4405,"title":{},"content":{"660":{"position":[[138,4]]}},"keywords":{}}],["etc.rw_organization_admin",{"_index":4521,"title":{},"content":{"723":{"position":[[327,26]]}},"keywords":{}}],["etl",{"_index":3183,"title":{},"content":{"329":{"position":[[481,3]]}},"keywords":{}}],["eu",{"_index":4560,"title":{},"content":{"745":{"position":[[154,4]]},"747":{"position":[[1119,3]]}},"keywords":{}}],["eu/na/f",{"_index":3488,"title":{},"content":{"387":{"position":[[883,11]]}},"keywords":{}}],["eur",{"_index":3893,"title":{},"content":{"494":{"position":[[219,4]]},"496":{"position":[[292,3],[303,3]]},"497":{"position":[[122,3]]}},"keywords":{}}],["european",{"_index":3477,"title":{},"content":{"385":{"position":[[233,9]]}},"keywords":{}}],["evalu",{"_index":269,"title":{},"content":{"8":{"position":[[574,8]]},"87":{"position":[[91,9]]},"96":{"position":[[59,9]]},"97":{"position":[[262,9]]},"107":{"position":[[2726,9]]},"156":{"position":[[556,9]]},"277":{"position":[[1066,9]]},"397":{"position":[[747,8]]},"1434":{"position":[[1303,8]]},"1442":{"position":[[767,8],[890,11]]},"1443":{"position":[[213,8],[292,11],[834,12]]}},"keywords":{}}],["evaluated.contact",{"_index":5019,"title":{},"content":{"910":{"position":[[375,17]]},"926":{"position":[[375,17]]},"937":{"position":[[375,17]]},"953":{"position":[[375,17]]},"971":{"position":[[375,17]]}},"keywords":{}}],["even",{"_index":175,"title":{},"content":{"4":{"position":[[542,4]]},"64":{"position":[[967,4]]},"87":{"position":[[662,4]]},"92":{"position":[[605,4]]},"109":{"position":[[74,4]]},"125":{"position":[[550,4]]},"126":{"position":[[112,4]]},"135":{"position":[[732,4]]},"165":{"position":[[262,4]]},"211":{"position":[[908,4]]},"218":{"position":[[1915,4]]},"279":{"position":[[429,4]]},"326":{"position":[[1314,4]]},"331":{"position":[[103,4]]},"478":{"position":[[313,4]]},"480":{"position":[[1720,4]]},"599":{"position":[[313,4]]},"657":{"position":[[619,4]]},"821":{"position":[[924,4]]},"869":{"position":[[700,4]]},"911":{"position":[[426,5]]},"917":{"position":[[842,4]]},"919":{"position":[[1367,4]]},"922":{"position":[[1464,4],[2873,4]]},"927":{"position":[[426,5]]},"938":{"position":[[426,5]]},"954":{"position":[[426,5]]},"965":{"position":[[842,4]]},"972":{"position":[[426,5]]},"1036":{"position":[[607,4]]},"1439":{"position":[[861,4]]},"1447":{"position":[[712,4]]},"1459":{"position":[[527,4]]},"1462":{"position":[[255,4]]}},"keywords":{}}],["evenli",{"_index":6680,"title":{},"content":{"1474":{"position":[[299,6]]}},"keywords":{}}],["event",{"_index":208,"title":{"197":{"position":[[21,6]]},"786":{"position":[[7,5]]},"870":{"position":[[26,6]]}},"content":{"6":{"position":[[239,6],[533,6]]},"7":{"position":[[371,7]]},"67":{"position":[[2075,5]]},"110":{"position":[[506,5],[561,6]]},"141":{"position":[[1029,5]]},"164":{"position":[[1022,6],[1090,5],[1141,6]]},"180":{"position":[[549,5]]},"183":{"position":[[1639,5]]},"197":{"position":[[8,6],[419,6],[682,7],[795,6],[841,7],[920,7],[1028,7],[1166,5],[1213,6],[1565,5]]},"209":{"position":[[410,6],[1145,5],[1218,6],[1457,7]]},"210":{"position":[[1682,6]]},"211":{"position":[[920,5]]},"212":{"position":[[110,6]]},"232":{"position":[[375,5]]},"237":{"position":[[2811,6]]},"252":{"position":[[137,6]]},"254":{"position":[[3621,5],[3933,7],[3954,6]]},"279":{"position":[[581,7]]},"312":{"position":[[141,6]]},"313":{"position":[[3573,6]]},"331":{"position":[[56,5],[70,5]]},"366":{"position":[[220,6],[573,6]]},"368":{"position":[[181,6]]},"425":{"position":[[388,6]]},"467":{"position":[[209,6]]},"529":{"position":[[408,6],[475,6]]},"537":{"position":[[50,5]]},"584":{"position":[[904,6]]},"642":{"position":[[182,6]]},"660":{"position":[[382,6],[425,6],[934,7],[1073,5]]},"661":{"position":[[128,7],[406,6]]},"675":{"position":[[312,6]]},"755":{"position":[[181,6]]},"764":{"position":[[443,6]]},"768":{"position":[[181,6]]},"777":{"position":[[443,6]]},"785":{"position":[[119,6],[424,6],[650,7]]},"786":{"position":[[31,6]]},"795":{"position":[[179,6]]},"804":{"position":[[441,6]]},"810":{"position":[[179,6]]},"819":{"position":[[441,6]]},"821":{"position":[[304,7]]},"826":{"position":[[179,6]]},"835":{"position":[[441,6]]},"867":{"position":[[432,6]]},"869":{"position":[[1179,5]]},"870":{"position":[[174,6],[406,6],[735,6],[931,6]]},"903":{"position":[[246,6],[599,6]]},"905":{"position":[[184,6]]},"909":{"position":[[409,5],[990,5]]},"912":{"position":[[315,7]]},"915":{"position":[[246,6],[599,6]]},"920":{"position":[[184,6]]},"922":{"position":[[54,6],[101,6],[353,6],[535,5],[2944,7]]},"925":{"position":[[409,5],[990,5]]},"930":{"position":[[246,6],[599,6]]},"932":{"position":[[184,6]]},"936":{"position":[[409,5],[990,5]]},"945":{"position":[[749,6]]},"948":{"position":[[184,6]]},"952":{"position":[[409,5],[990,5]]},"963":{"position":[[400,6],[753,6]]},"966":{"position":[[184,6]]},"970":{"position":[[409,5],[990,5]]},"998":{"position":[[236,6]]},"1040":{"position":[[19,6]]},"1050":{"position":[[19,6]]},"1058":{"position":[[19,6]]},"1078":{"position":[[1050,6]]},"1182":{"position":[[282,6]]},"1191":{"position":[[284,6]]},"1233":{"position":[[46,5]]},"1262":{"position":[[284,6]]},"1292":{"position":[[1795,5],[1841,6]]},"1306":{"position":[[1795,5],[1841,6]]},"1329":{"position":[[1795,5],[1841,6]]},"1356":{"position":[[1289,5]]},"1389":{"position":[[283,6]]},"1456":{"position":[[164,7]]},"1472":{"position":[[615,6]]},"1476":{"position":[[932,5]]}},"keywords":{}}],["eventsengagementsengag",{"_index":4385,"title":{},"content":{"649":{"position":[[286,28]]}},"keywords":{}}],["eventsissuesprojectsreleas",{"_index":5151,"title":{},"content":{"994":{"position":[[70,28]]}},"keywords":{}}],["eventspropertiesticket",{"_index":4371,"title":{},"content":{"642":{"position":[[139,23]]}},"keywords":{}}],["eventsticket",{"_index":5459,"title":{},"content":{"1128":{"position":[[375,12]]}},"keywords":{}}],["eventu",{"_index":2476,"title":{"1147":{"position":[[0,8]]},"1174":{"position":[[0,8]]},"1216":{"position":[[0,8]]},"1224":{"position":[[0,8]]}},"content":{"227":{"position":[[15,10]]},"642":{"position":[[249,8]]},"1147":{"position":[[329,10]]},"1174":{"position":[[329,10]]},"1216":{"position":[[329,10]]},"1224":{"position":[[329,10]]},"1439":{"position":[[1505,10]]}},"keywords":{}}],["everyon",{"_index":1848,"title":{},"content":{"154":{"position":[[963,8]]}},"keywords":{}}],["everyth",{"_index":2262,"title":{},"content":{"209":{"position":[[173,10]]},"212":{"position":[[28,10]]},"232":{"position":[[138,10]]},"239":{"position":[[2853,10]]},"243":{"position":[[28,10]]},"275":{"position":[[91,11]]},"296":{"position":[[7473,10]]},"315":{"position":[[193,10]]},"322":{"position":[[887,10]]},"323":{"position":[[1659,10]]},"326":{"position":[[1511,10]]},"1461":{"position":[[508,10],[4052,10]]}},"keywords":{}}],["everywher",{"_index":3165,"title":{},"content":{"324":{"position":[[654,10]]}},"keywords":{}}],["evict",{"_index":4688,"title":{},"content":{"785":{"position":[[631,7]]}},"keywords":{}}],["evolut",{"_index":285,"title":{"10":{"position":[[7,9]]},"12":{"position":[[6,11]]},"13":{"position":[[15,10]]},"208":{"position":[[18,10]]},"304":{"position":[[7,9]]},"306":{"position":[[7,9]]}},"content":{"11":{"position":[[1147,10]]},"12":{"position":[[181,9],[419,10]]},"13":{"position":[[12,9],[327,10],[404,10],[659,10],[798,9],[1050,10],[1132,9],[1282,9],[1493,10]]},"14":{"position":[[1074,10]]},"55":{"position":[[689,9]]},"208":{"position":[[123,10],[384,9],[683,9],[707,10],[1041,9],[1369,9],[1552,9]]},"211":{"position":[[618,9]]},"239":{"position":[[1921,10],[2031,9],[2264,9],[2610,9],[2791,10]]},"241":{"position":[[208,10]]},"307":{"position":[[3388,9]]},"309":{"position":[[3712,9]]}},"keywords":{}}],["evolv",{"_index":703,"title":{},"content":{"38":{"position":[[453,9]]},"106":{"position":[[551,6]]},"278":{"position":[[1528,6]]},"329":{"position":[[37,6]]},"331":{"position":[[656,6]]}},"keywords":{}}],["evolveincompatiblecollect",{"_index":820,"title":{},"content":{"55":{"position":[[521,29],[1129,29]]},"56":{"position":[[886,30]]},"307":{"position":[[3334,31]]},"309":{"position":[[3658,31]]}},"keywords":{}}],["ewallet",{"_index":4913,"title":{},"content":{"879":{"position":[[849,7]]}},"keywords":{}}],["ewallet.pem",{"_index":4914,"title":{},"content":{"879":{"position":[[861,11]]}},"keywords":{}}],["ex",{"_index":5755,"title":{},"content":{"1155":{"position":[[510,4]]}},"keywords":{}}],["exact",{"_index":733,"title":{},"content":{"41":{"position":[[490,9]]},"45":{"position":[[92,5]]},"67":{"position":[[800,5]]},"112":{"position":[[597,5]]},"138":{"position":[[2682,5]]},"141":{"position":[[2272,5]]},"142":{"position":[[2759,5]]},"173":{"position":[[1063,5]]},"286":{"position":[[315,5]]},"846":{"position":[[171,5]]},"1435":{"position":[[303,5]]}},"keywords":{}}],["exactingli",{"_index":1047,"title":{},"content":{"70":{"position":[[284,10]]}},"keywords":{}}],["exactli",{"_index":1554,"title":{"1435":{"position":[[0,7]]}},"content":{"107":{"position":[[3553,7]]},"115":{"position":[[1043,8]]},"124":{"position":[[348,8]]},"126":{"position":[[221,7]]},"198":{"position":[[313,7],[820,7]]},"236":{"position":[[1767,7]]},"320":{"position":[[686,7]]},"323":{"position":[[1155,7]]},"326":{"position":[[1836,7]]},"332":{"position":[[159,7]]},"602":{"position":[[757,7]]},"1156":{"position":[[291,7]]},"1192":{"position":[[341,7]]},"1394":{"position":[[338,7]]},"1423":{"position":[[348,7]]},"1439":{"position":[[359,7]]},"1459":{"position":[[557,7],[723,7],[1145,7]]}},"keywords":{}}],["exacts"",{"_index":5171,"title":{},"content":{"1009":{"position":[[1347,13]]}},"keywords":{}}],["examin",{"_index":2167,"title":{},"content":{"192":{"position":[[1754,8]]},"237":{"position":[[200,7]]},"253":{"position":[[1066,7]]},"313":{"position":[[1066,7]]}},"keywords":{}}],["exampl",{"_index":270,"title":{"354":{"position":[[11,8]]}},"content":{"8":{"position":[[618,8],[699,8]]},"13":{"position":[[971,8],[1678,8]]},"16":{"position":[[789,8]]},"20":{"position":[[694,8]]},"31":{"position":[[187,8]]},"42":{"position":[[192,8]]},"45":{"position":[[165,8]]},"56":{"position":[[2445,8]]},"60":{"position":[[1160,8]]},"61":{"position":[[622,8]]},"62":{"position":[[655,8]]},"63":{"position":[[1175,8]]},"66":{"position":[[348,8],[765,7]]},"67":{"position":[[381,8]]},"68":{"position":[[833,8],[989,8]]},"71":{"position":[[155,8]]},"72":{"position":[[561,8],[682,8]]},"74":{"position":[[437,8]]},"75":{"position":[[139,8]]},"82":{"position":[[1246,8],[1290,8],[3402,8]]},"87":{"position":[[164,8],[709,7]]},"92":{"position":[[88,7]]},"98":{"position":[[196,8],[1079,7]]},"103":{"position":[[852,7]]},"105":{"position":[[967,8]]},"107":{"position":[[558,8],[1915,8]]},"110":{"position":[[146,8],[1046,8],[1473,7],[1552,7]]},"111":{"position":[[221,8]]},"113":{"position":[[642,7],[844,7]]},"114":{"position":[[232,8]]},"115":{"position":[[761,8],[1482,7],[1603,8]]},"121":{"position":[[834,8]]},"122":{"position":[[449,8],[776,8]]},"123":{"position":[[103,8]]},"132":{"position":[[278,8]]},"133":{"position":[[339,8]]},"138":{"position":[[960,8]]},"142":{"position":[[939,8]]},"154":{"position":[[549,8]]},"158":{"position":[[814,8]]},"159":{"position":[[156,8]]},"160":{"position":[[537,8]]},"161":{"position":[[488,7]]},"162":{"position":[[175,8],[1828,7]]},"164":{"position":[[490,7]]},"165":{"position":[[636,8]]},"180":{"position":[[423,8]]},"183":{"position":[[434,7],[990,7],[2430,8]]},"184":{"position":[[296,8],[813,8]]},"190":{"position":[[758,8]]},"192":{"position":[[396,8],[708,8],[953,9]]},"217":{"position":[[876,7]]},"218":{"position":[[414,8]]},"219":{"position":[[280,8]]},"221":{"position":[[463,8]]},"237":{"position":[[619,8],[1115,8]]},"238":{"position":[[404,7]]},"240":{"position":[[3325,8]]},"250":{"position":[[69,7],[118,7]]},"264":{"position":[[777,7]]},"267":{"position":[[338,8],[809,7],[1414,7]]},"268":{"position":[[334,7],[631,7],[1526,9],[1583,8],[1638,8]]},"269":{"position":[[269,7],[1104,8],[1159,8]]},"270":{"position":[[1043,7],[1531,8]]},"271":{"position":[[121,8]]},"274":{"position":[[152,8],[1087,8],[1353,8],[1483,8]]},"280":{"position":[[786,7]]},"281":{"position":[[2233,9],[2323,8]]},"284":{"position":[[199,7],[406,8],[751,7]]},"288":{"position":[[959,8]]},"290":{"position":[[684,8]]},"291":{"position":[[338,8]]},"299":{"position":[[874,8]]},"301":{"position":[[624,8],[1123,8]]},"302":{"position":[[338,8]]},"307":{"position":[[614,7],[948,8]]},"308":{"position":[[496,8]]},"309":{"position":[[614,8],[2027,8]]},"319":{"position":[[1524,8]]},"322":{"position":[[1202,7]]},"337":{"position":[[307,8]]},"338":{"position":[[298,8]]},"341":{"position":[[108,8]]},"354":{"position":[[4,7]]},"390":{"position":[[485,9]]},"395":{"position":[[655,9]]},"417":{"position":[[1288,8]]},"438":{"position":[[1804,8]]},"439":{"position":[[147,7],[383,7],[633,7]]},"480":{"position":[[484,8]]},"486":{"position":[[183,7]]},"488":{"position":[[79,7],[271,8],[706,8],[984,8]]},"489":{"position":[[603,8]]},"502":{"position":[[120,8],[326,8]]},"517":{"position":[[2294,8]]},"545":{"position":[[912,8]]},"552":{"position":[[196,8],[221,8],[505,8],[530,8],[726,8]]},"590":{"position":[[291,8],[442,8],[508,8],[904,8]]},"658":{"position":[[183,7]]},"659":{"position":[[236,7],[428,8],[863,8],[1141,8]]},"661":{"position":[[417,8]]},"662":{"position":[[603,8]]},"674":{"position":[[183,7]]},"676":{"position":[[79,7],[271,8],[706,8],[984,8]]},"677":{"position":[[603,8]]},"689":{"position":[[183,7]]},"691":{"position":[[79,7],[271,8],[706,8],[984,8]]},"692":{"position":[[603,8]]},"738":{"position":[[175,8]]},"754":{"position":[[563,8]]},"794":{"position":[[769,8]]},"809":{"position":[[769,8]]},"821":{"position":[[1200,8]]},"825":{"position":[[605,8]]},"840":{"position":[[600,8],[972,8],[1872,8],[2242,7]]},"849":{"position":[[1071,8],[1585,8],[3382,7]]},"869":{"position":[[773,9]]},"870":{"position":[[537,7]]},"907":{"position":[[1774,7]]},"911":{"position":[[231,7]]},"919":{"position":[[2682,8]]},"923":{"position":[[1774,7]]},"927":{"position":[[231,7]]},"938":{"position":[[231,7]]},"954":{"position":[[231,7]]},"968":{"position":[[1774,7]]},"972":{"position":[[231,7]]},"1008":{"position":[[389,8],[1259,7]]},"1020":{"position":[[983,8]]},"1021":{"position":[[384,8],[1017,8]]},"1034":{"position":[[108,8]]},"1047":{"position":[[722,7]]},"1055":{"position":[[722,7]]},"1063":{"position":[[722,7]]},"1077":{"position":[[153,8],[450,8]]},"1087":{"position":[[224,8]]},"1092":{"position":[[392,8]]},"1122":{"position":[[282,9]]},"1133":{"position":[[1057,8]]},"1146":{"position":[[139,8]]},"1151":{"position":[[108,8]]},"1173":{"position":[[139,8]]},"1200":{"position":[[668,7]]},"1215":{"position":[[139,8]]},"1223":{"position":[[139,8]]},"1277":{"position":[[294,8]]},"1286":{"position":[[826,8]]},"1301":{"position":[[662,8]]},"1313":{"position":[[1524,7]]},"1325":{"position":[[826,8]]},"1337":{"position":[[1524,7]]},"1356":{"position":[[270,8]]},"1382":{"position":[[448,8]]},"1386":{"position":[[129,8]]},"1391":{"position":[[499,8]]},"1429":{"position":[[561,8]]},"1437":{"position":[[40,8]]},"1439":{"position":[[485,8]]},"1440":{"position":[[1670,8]]},"1442":{"position":[[1414,8]]},"1447":{"position":[[98,8]]},"1448":{"position":[[492,8]]},"1452":{"position":[[1349,9],[2248,8],[2412,8],[2661,8],[3404,7],[3655,8],[4257,8]]},"1453":{"position":[[404,8]]},"1459":{"position":[[849,8],[1459,7],[1743,8]]},"1461":{"position":[[745,9],[756,8],[2175,8],[2339,8],[2582,8],[2983,7],[4216,8],[4508,8]]},"1462":{"position":[[334,8]]},"1465":{"position":[[384,8]]},"1471":{"position":[[250,8],[802,8]]},"1476":{"position":[[1086,8]]}},"keywords":{}}],["example.com'.choos",{"_index":5356,"title":{},"content":{"1092":{"position":[[459,20]]}},"keywords":{}}],["example/reductions/append",{"_index":6645,"title":{},"content":{"1464":{"position":[[123,25],[471,25],[634,25]]}},"keywords":{}}],["example/reductions/fww",{"_index":6639,"title":{},"content":{"1463":{"position":[[266,22],[588,22],[790,22]]}},"keywords":{}}],["example/reductions/merg",{"_index":6657,"title":{},"content":{"1467":{"position":[[426,24],[987,24],[1132,24],[1288,24],[1494,24],[2093,24],[2410,24],[2656,24]]}},"keywords":{}}],["example/reductions/min",{"_index":6709,"title":{},"content":{"1476":{"position":[[132,22],[421,22],[597,22],[1194,22],[1644,22],[2016,22]]}},"keywords":{}}],["example/reductions/set",{"_index":6718,"title":{},"content":{"1477":{"position":[[906,22],[1683,22],[2027,22],[2196,22],[2448,22],[3122,22],[4023,22],[4379,22],[4558,22],[4820,22]]}},"keywords":{}}],["example/reductions/sum",{"_index":6650,"title":{},"content":{"1465":{"position":[[443,22],[1165,22],[1330,22],[1431,22],[1597,22]]},"1466":{"position":[[85,22],[452,22],[585,22]]}},"keywords":{}}],["example:curl",{"_index":4360,"title":{},"content":{"635":{"position":[[308,12]]}},"keywords":{}}],["example_t",{"_index":1647,"title":{},"content":{"120":{"position":[[2182,13]]},"122":{"position":[[1232,13]]}},"keywords":{}}],["exampleshuffl",{"_index":1517,"title":{},"content":{"107":{"position":[[604,14]]}},"keywords":{}}],["examplestorag",{"_index":129,"title":{},"content":{"3":{"position":[[650,14]]}},"keywords":{}}],["exce",{"_index":553,"title":{},"content":{"20":{"position":[[1026,6]]},"284":{"position":[[698,6]]},"577":{"position":[[521,6]]},"588":{"position":[[516,6]]},"870":{"position":[[599,7]]},"909":{"position":[[114,6]]},"925":{"position":[[114,6]]},"936":{"position":[[114,6]]},"952":{"position":[[114,6]]},"970":{"position":[[114,6]]},"1123":{"position":[[526,7]]}},"keywords":{}}],["exceed",{"_index":4209,"title":{},"content":{"577":{"position":[[114,9]]},"588":{"position":[[109,9]]},"922":{"position":[[2406,9]]},"1068":{"position":[[115,9]]}},"keywords":{}}],["excel",{"_index":3161,"title":{},"content":{"323":{"position":[[1999,11]]}},"keywords":{}}],["except",{"_index":1312,"title":{},"content":{"90":{"position":[[354,9]]},"142":{"position":[[274,11]]},"250":{"position":[[1055,6]]},"757":{"position":[[2363,11]]},"770":{"position":[[2363,11]]},"797":{"position":[[2370,11]]},"812":{"position":[[2370,11]]},"828":{"position":[[2370,11]]},"1140":{"position":[[2631,6],[2670,9]]},"1192":{"position":[[489,6]]},"1209":{"position":[[893,6]]},"1292":{"position":[[1917,6]]},"1306":{"position":[[1917,6]]},"1316":{"position":[[2631,6],[2670,9]]},"1329":{"position":[[1917,6]]},"1340":{"position":[[2631,6],[2670,9]]},"1351":{"position":[[2631,6],[2670,9]]},"1370":{"position":[[993,6]]},"1379":{"position":[[792,6],[838,9]]},"1403":{"position":[[792,6],[838,9]]},"1414":{"position":[[792,6],[838,9]]},"1423":{"position":[[882,6]]},"1431":{"position":[[2654,6],[2693,9]]}},"keywords":{}}],["excess",{"_index":5440,"title":{},"content":{"1123":{"position":[[722,11]]},"1157":{"position":[[282,9]]}},"keywords":{}}],["exchang",{"_index":3330,"title":{"493":{"position":[[0,8]]}},"content":{"364":{"position":[[994,8],[1059,8]]},"432":{"position":[[664,8]]},"494":{"position":[[33,8]]},"495":{"position":[[250,8]]},"496":{"position":[[357,10]]},"497":{"position":[[89,8]]},"1292":{"position":[[1951,8]]},"1306":{"position":[[1951,8]]},"1329":{"position":[[1951,8]]}},"keywords":{}}],["exchange_r",{"_index":3898,"title":{},"content":{"496":{"position":[[642,15]]},"497":{"position":[[228,14],[361,14]]}},"keywords":{}}],["exclud",{"_index":503,"title":{},"content":{"17":{"position":[[708,9],[791,7],[859,8],[880,7],[932,9],[955,8]]},"68":{"position":[[1700,7]]},"72":{"position":[[91,8]]},"122":{"position":[[956,7],[1261,8],[1632,8],[1731,8]]},"230":{"position":[[741,7],[1088,7],[1153,7]]},"309":{"position":[[292,8]]},"419":{"position":[[2058,8]]},"441":{"position":[[667,8]]},"504":{"position":[[1687,8]]},"547":{"position":[[2060,8]]},"639":{"position":[[1685,8]]},"1023":{"position":[[2041,8]]},"1157":{"position":[[256,7]]},"1276":{"position":[[428,7]]},"1292":{"position":[[1983,7]]},"1306":{"position":[[1983,7]]},"1329":{"position":[[1983,7]]},"1370":{"position":[[1004,7]]},"1472":{"position":[[405,7],[831,7],[911,8]]}},"keywords":{}}],["excluded_field",{"_index":3059,"title":{},"content":{"309":{"position":[[638,15]]}},"keywords":{}}],["exclus",{"_index":6294,"title":{},"content":{"1370":{"position":[[1017,9]]}},"keywords":{}}],["exclusivemaximum",{"_index":1883,"title":{},"content":{"159":{"position":[[843,17]]}},"keywords":{}}],["exclusiveminimum",{"_index":1882,"title":{},"content":{"159":{"position":[[789,17]]},"161":{"position":[[963,18],[988,18]]}},"keywords":{}}],["exec",{"_index":5243,"title":{},"content":{"1042":{"position":[[112,4],[978,4]]},"1043":{"position":[[776,4],[1642,4]]},"1051":{"position":[[1032,4],[1904,4]]},"1059":{"position":[[796,4],[1697,4]]},"1140":{"position":[[2378,4],[2713,4]]},"1316":{"position":[[2378,4],[2713,4]]},"1340":{"position":[[2378,4],[2713,4]]},"1351":{"position":[[2378,4],[2713,4]]},"1379":{"position":[[529,4],[885,4]]},"1403":{"position":[[529,4],[885,4]]},"1414":{"position":[[529,4],[885,4]]},"1431":{"position":[[2401,4],[2736,4]]}},"keywords":{}}],["execut",{"_index":192,"title":{},"content":{"4":{"position":[[779,9]]},"49":{"position":[[29,9]]},"58":{"position":[[275,11]]},"88":{"position":[[624,10]]},"99":{"position":[[22,7]]},"100":{"position":[[994,9]]},"102":{"position":[[76,9],[164,8]]},"108":{"position":[[304,9]]},"112":{"position":[[756,9]]},"169":{"position":[[514,11]]},"209":{"position":[[478,9]]},"211":{"position":[[846,8]]},"237":{"position":[[2997,7]]},"238":{"position":[[1333,9]]},"240":{"position":[[378,7],[2092,7],[2649,8]]},"253":{"position":[[457,7]]},"254":{"position":[[2972,8]]},"295":{"position":[[1754,7]]},"313":{"position":[[457,7]]},"315":{"position":[[120,7]]},"320":{"position":[[602,9]]},"324":{"position":[[496,8]]},"329":{"position":[[626,10]]},"480":{"position":[[41,9]]},"482":{"position":[[763,8]]},"483":{"position":[[69,8]]},"560":{"position":[[65,8]]},"785":{"position":[[132,9]]},"821":{"position":[[106,9],[791,7]]},"912":{"position":[[114,9],[807,7]]},"1031":{"position":[[189,7]]},"1032":{"position":[[391,7]]},"1034":{"position":[[554,7]]},"1036":{"position":[[264,10]]},"1140":{"position":[[2746,7]]},"1209":{"position":[[910,7]]},"1292":{"position":[[2018,7]]},"1306":{"position":[[2018,7]]},"1316":{"position":[[2746,7]]},"1329":{"position":[[2018,7]]},"1340":{"position":[[2746,7]]},"1351":{"position":[[2746,7]]},"1379":{"position":[[930,7]]},"1403":{"position":[[930,7]]},"1414":{"position":[[930,7]]},"1423":{"position":[[899,7]]},"1431":{"position":[[2769,7]]},"1452":{"position":[[341,8],[790,9],[874,8],[1008,9],[1089,8],[1308,8]]}},"keywords":{}}],["execute_catalog_rol",{"_index":4857,"title":{},"content":{"864":{"position":[[1104,20]]}},"keywords":{}}],["exercis",{"_index":3577,"title":{},"content":{"411":{"position":[[204,8]]}},"keywords":{}}],["exert",{"_index":742,"title":{},"content":{"42":{"position":[[533,5]]},"218":{"position":[[1909,5]]}},"keywords":{}}],["exhaust",{"_index":1089,"title":{},"content":{"74":{"position":[[962,10]]},"759":{"position":[[194,10]]},"772":{"position":[[205,10]]},"799":{"position":[[192,10]]},"814":{"position":[[192,10]]},"830":{"position":[[192,10]]}},"keywords":{}}],["exist",{"_index":374,"title":{"271":{"position":[[12,8]]}},"content":{"13":{"position":[[87,8]]},"27":{"position":[[412,5]]},"54":{"position":[[582,8],[711,8]]},"55":{"position":[[498,8]]},"56":{"position":[[604,8]]},"62":{"position":[[134,8],[268,8],[386,8],[670,8]]},"63":{"position":[[970,6]]},"64":{"position":[[926,7]]},"72":{"position":[[176,5],[277,9],[381,6],[397,5]]},"94":{"position":[[534,5],[949,5]]},"100":{"position":[[641,8]]},"105":{"position":[[1005,8]]},"136":{"position":[[359,8]]},"137":{"position":[[439,5]]},"138":{"position":[[40,8]]},"142":{"position":[[48,8]]},"160":{"position":[[331,5],[685,5]]},"165":{"position":[[809,5]]},"183":{"position":[[1707,8]]},"191":{"position":[[818,6],[953,6],[1050,6],[1134,6],[1470,6]]},"197":{"position":[[956,8]]},"207":{"position":[[1512,5]]},"209":{"position":[[521,8]]},"210":{"position":[[1841,8]]},"221":{"position":[[1188,7],[1267,7]]},"222":{"position":[[433,7],[512,7]]},"223":{"position":[[399,7],[478,7]]},"224":{"position":[[452,7],[531,7]]},"230":{"position":[[388,7]]},"236":{"position":[[3340,6]]},"237":{"position":[[1311,6]]},"240":{"position":[[779,6],[914,6],[1011,6],[1095,6],[1431,6]]},"242":{"position":[[664,6],[722,6],[756,6],[824,6],[864,6]]},"245":{"position":[[286,8]]},"259":{"position":[[772,8]]},"266":{"position":[[120,8]]},"271":{"position":[[96,8],[230,8]]},"288":{"position":[[505,8]]},"296":{"position":[[3073,5],[7937,8]]},"307":{"position":[[2616,8],[2846,7]]},"309":{"position":[[558,8],[704,8],[3360,8]]},"310":{"position":[[209,8]]},"314":{"position":[[2544,8]]},"321":{"position":[[972,8]]},"322":{"position":[[716,8]]},"366":{"position":[[258,6]]},"367":{"position":[[602,6]]},"414":{"position":[[818,8]]},"483":{"position":[[189,7]]},"591":{"position":[[192,8]]},"595":{"position":[[239,8]]},"661":{"position":[[254,8],[569,5]]},"723":{"position":[[4,8]]},"752":{"position":[[221,6],[254,6],[643,6]]},"753":{"position":[[877,6],[910,6],[1299,6]]},"767":{"position":[[1857,6],[1890,6],[1976,6]]},"785":{"position":[[175,8]]},"791":{"position":[[174,6],[207,6],[596,6]]},"792":{"position":[[1797,6],[1830,6],[1916,6]]},"793":{"position":[[848,6],[881,6],[1270,6]]},"808":{"position":[[794,6],[827,6],[1216,6]]},"824":{"position":[[1919,6],[1952,6],[2038,6]]},"846":{"position":[[134,5]]},"862":{"position":[[89,5]]},"869":{"position":[[537,8]]},"874":{"position":[[89,5]]},"903":{"position":[[284,6]]},"904":{"position":[[1702,6]]},"911":{"position":[[410,8]]},"915":{"position":[[284,6]]},"917":{"position":[[1211,6]]},"918":{"position":[[1994,6]]},"919":{"position":[[2049,6]]},"927":{"position":[[410,8]]},"930":{"position":[[284,6]]},"931":{"position":[[1364,6]]},"938":{"position":[[410,8]]},"954":{"position":[[410,8]]},"963":{"position":[[438,6]]},"965":{"position":[[1211,6]]},"972":{"position":[[410,8]]},"1032":{"position":[[683,6],[791,6],[1072,6]]},"1140":{"position":[[2785,6]]},"1183":{"position":[[152,8],[255,8],[294,8],[388,8],[580,8],[818,8]]},"1204":{"position":[[417,8]]},"1209":{"position":[[932,6]]},"1230":{"position":[[1052,7]]},"1277":{"position":[[136,5]]},"1292":{"position":[[2061,6]]},"1298":{"position":[[399,7],[478,7]]},"1303":{"position":[[1436,6]]},"1306":{"position":[[2061,6]]},"1316":{"position":[[2785,6]]},"1322":{"position":[[433,7],[512,7]]},"1329":{"position":[[2061,6]]},"1335":{"position":[[433,7],[512,7]]},"1340":{"position":[[2785,6]]},"1346":{"position":[[399,7],[478,7]]},"1351":{"position":[[2785,6]]},"1354":{"position":[[152,6],[236,6]]},"1356":{"position":[[1406,6],[1516,6]]},"1370":{"position":[[1037,6]]},"1379":{"position":[[975,6]]},"1383":{"position":[[173,8],[766,6],[901,6],[998,6],[1082,6],[1418,6]]},"1394":{"position":[[1028,6]]},"1403":{"position":[[975,6]]},"1414":{"position":[[975,6]]},"1423":{"position":[[911,6]]},"1429":{"position":[[87,5]]},"1431":{"position":[[2808,6]]},"1434":{"position":[[1226,5],[1586,6],[1651,8]]},"1449":{"position":[[597,6]]},"1462":{"position":[[135,8]]},"1479":{"position":[[44,8]]}},"keywords":{}}],["existing=keep",{"_index":939,"title":{},"content":{"62":{"position":[[499,13]]}},"keywords":{}}],["existing=merg",{"_index":940,"title":{},"content":{"62":{"position":[[560,14]]}},"keywords":{}}],["existing=overwrit",{"_index":937,"title":{},"content":{"62":{"position":[[404,18]]}},"keywords":{}}],["existingdevelop",{"_index":5337,"title":{},"content":{"1083":{"position":[[212,17]]}},"keywords":{}}],["exit",{"_index":855,"title":{},"content":{"56":{"position":[[2264,6]]},"140":{"position":[[519,4]]},"162":{"position":[[134,7]]},"1292":{"position":[[2099,4]]},"1306":{"position":[[2099,4]]},"1329":{"position":[[2099,4]]},"1379":{"position":[[1025,4]]},"1403":{"position":[[1025,4]]},"1414":{"position":[[1025,4]]}},"keywords":{}}],["exp",{"_index":5645,"title":{},"content":{"1140":{"position":[[2825,3]]},"1316":{"position":[[2825,3]]},"1340":{"position":[[2825,3]]},"1351":{"position":[[2825,3]]},"1431":{"position":[[2848,3]]}},"keywords":{}}],["expand",{"_index":973,"title":{},"content":{"64":{"position":[[989,6]]},"146":{"position":[[1100,8]]},"149":{"position":[[1094,8]]},"152":{"position":[[1084,8]]},"165":{"position":[[1367,7],[1482,7],[1852,7]]},"192":{"position":[[2323,6]]},"207":{"position":[[1267,7]]},"280":{"position":[[19,7]]},"486":{"position":[[130,6]]},"658":{"position":[[130,6]]},"674":{"position":[[130,6]]},"689":{"position":[[130,6]]},"849":{"position":[[1904,6]]},"1459":{"position":[[1336,6]]}},"keywords":{}}],["expans",{"_index":6035,"title":{},"content":{"1292":{"position":[[2132,9]]},"1306":{"position":[[2132,9]]},"1329":{"position":[[2132,9]]}},"keywords":{}}],["expect",{"_index":438,"title":{},"content":{"14":{"position":[[806,6]]},"43":{"position":[[417,12]]},"68":{"position":[[262,9]]},"110":{"position":[[773,9]]},"114":{"position":[[516,6]]},"120":{"position":[[2110,7]]},"125":{"position":[[1418,6]]},"141":{"position":[[387,8]]},"158":{"position":[[789,12]]},"236":{"position":[[1783,6]]},"240":{"position":[[4442,9]]},"254":{"position":[[1705,9]]},"268":{"position":[[1863,9]]},"269":{"position":[[1327,7]]},"270":{"position":[[1942,7]]},"296":{"position":[[3142,8]]},"314":{"position":[[1522,9]]},"480":{"position":[[414,8]]},"616":{"position":[[43,7]]},"1475":{"position":[[268,13]]}},"keywords":{}}],["expens",{"_index":2054,"title":{},"content":{"180":{"position":[[763,9]]},"326":{"position":[[1686,8]]},"333":{"position":[[444,9]]},"584":{"position":[[1193,7]]},"1036":{"position":[[72,9]]},"1156":{"position":[[828,7]]}},"keywords":{}}],["experi",{"_index":1108,"title":{},"content":{"80":{"position":[[123,11]]},"103":{"position":[[340,11]]},"162":{"position":[[560,10]]},"175":{"position":[[312,11]]},"177":{"position":[[52,11]]},"213":{"position":[[477,10]]},"870":{"position":[[469,10]]},"1461":{"position":[[4753,11]]}},"keywords":{}}],["experiment",{"_index":1485,"title":{},"content":{"104":{"position":[[92,12]]}},"keywords":{}}],["expir",{"_index":1986,"title":{},"content":{"169":{"position":[[1668,6]]},"340":{"position":[[528,6]]},"448":{"position":[[672,7]]},"554":{"position":[[555,8]]},"718":{"position":[[300,6]]},"724":{"position":[[369,6],[498,6],[632,7]]},"750":{"position":[[133,10],[397,12]]},"764":{"position":[[339,7]]},"766":{"position":[[133,10],[397,12]]},"777":{"position":[[339,7]]},"789":{"position":[[151,10]]},"804":{"position":[[337,7]]},"807":{"position":[[151,10]]},"819":{"position":[[337,7]]},"823":{"position":[[151,10]]},"835":{"position":[[337,7]]},"885":{"position":[[400,7]]},"1292":{"position":[[2179,6]]},"1306":{"position":[[2179,6]]},"1329":{"position":[[2179,6]]}},"keywords":{}}],["expired."",{"_index":4978,"title":{},"content":{"898":{"position":[[1229,15]]}},"keywords":{}}],["explain",{"_index":2177,"title":{},"content":{"196":{"position":[[670,7]]},"233":{"position":[[855,7]]},"239":{"position":[[1964,7]]},"270":{"position":[[116,9]]},"1209":{"position":[[951,7]]},"1292":{"position":[[2203,7]]},"1306":{"position":[[2203,7]]},"1329":{"position":[[2203,7]]},"1370":{"position":[[1051,7]]},"1461":{"position":[[716,10]]}},"keywords":{}}],["explan",{"_index":2807,"title":{},"content":{"268":{"position":[[1660,12]]},"269":{"position":[[1181,12]]},"325":{"position":[[819,12]]},"738":{"position":[[326,11],[456,11]]}},"keywords":{}}],["explicit",{"_index":1683,"title":{},"content":{"122":{"position":[[1842,8]]},"419":{"position":[[502,8]]},"440":{"position":[[518,8]]},"504":{"position":[[446,8]]},"547":{"position":[[503,8]]},"639":{"position":[[444,8]]},"1023":{"position":[[483,8]]},"1463":{"position":[[183,8]]}},"keywords":{}}],["explicitli",{"_index":1309,"title":{},"content":{"90":{"position":[[100,10],[534,10]]},"92":{"position":[[295,10]]},"107":{"position":[[3881,10]]},"122":{"position":[[551,10]]},"162":{"position":[[1558,10]]},"309":{"position":[[335,10]]},"617":{"position":[[865,10]]},"754":{"position":[[151,10],[412,10]]},"794":{"position":[[285,10]]},"809":{"position":[[285,10]]},"825":{"position":[[285,10]]},"907":{"position":[[1720,10]]},"923":{"position":[[1720,10]]},"968":{"position":[[1720,10]]},"1286":{"position":[[342,10]]},"1301":{"position":[[342,10]]},"1313":{"position":[[1470,10]]},"1325":{"position":[[342,10]]},"1337":{"position":[[1470,10]]}},"keywords":{}}],["explor",{"_index":2093,"title":{"185":{"position":[[0,7]]}},"content":{"189":{"position":[[606,7]]},"211":{"position":[[421,8]]},"219":{"position":[[56,7]]},"242":{"position":[[83,9]]},"322":{"position":[[1105,8]]},"324":{"position":[[844,7]]},"570":{"position":[[89,8]]},"571":{"position":[[89,8]]},"573":{"position":[[960,9],[1011,9]]}},"keywords":{}}],["export",{"_index":1471,"title":{},"content":{"103":{"position":[[108,7]]},"281":{"position":[[1357,6]]},"296":{"position":[[4497,6],[4762,6],[4961,6],[5437,6],[6089,6]]},"315":{"position":[[1023,6],[1533,6],[1828,6]]},"322":{"position":[[413,6],[1254,6]]},"323":{"position":[[185,6]]},"326":{"position":[[979,7],[1057,8]]},"395":{"position":[[182,7]]},"1076":{"position":[[445,6]]},"1292":{"position":[[2240,6]]},"1306":{"position":[[2240,6]]},"1329":{"position":[[2240,6]]}},"keywords":{}}],["exportengagefunnelsrevenueannotationscohortscohort",{"_index":4558,"title":{},"content":{"744":{"position":[[72,50]]}},"keywords":{}}],["expos",{"_index":1093,"title":{"238":{"position":[[0,6]]}},"content":{"76":{"position":[[116,7]]},"234":{"position":[[377,6]]},"237":{"position":[[3569,6]]},"238":{"position":[[220,6]]},"242":{"position":[[313,7]]}},"keywords":{}}],["express",{"_index":1589,"title":{},"content":{"111":{"position":[[393,7]]},"132":{"position":[[27,10]]},"156":{"position":[[18,10],[382,12]]},"160":{"position":[[935,9]]},"281":{"position":[[3253,7]]},"556":{"position":[[1182,11]]},"1439":{"position":[[1042,7]]},"1465":{"position":[[582,7]]}},"keywords":{}}],["expression>"",{"_index":4235,"title":{},"content":{"585":{"position":[[854,22]]}},"keywords":{}}],["extend",{"_index":1876,"title":{},"content":{"159":{"position":[[321,7]]},"281":{"position":[[1381,7]]},"296":{"position":[[5461,7],[6113,7]]},"315":{"position":[[1557,7],[1852,7]]},"419":{"position":[[1047,8]]},"440":{"position":[[1063,8]]},"499":{"position":[[180,8]]},"504":{"position":[[987,8]]},"547":{"position":[[1048,8]]},"595":{"position":[[1405,8]]},"634":{"position":[[172,8]]},"639":{"position":[[985,8]]},"1023":{"position":[[1028,8]]},"1172":{"position":[[207,8],[299,8],[332,8],[478,8],[541,8],[630,8],[719,8],[775,8],[858,8],[936,8]]},"1222":{"position":[[207,8],[299,8],[332,8],[478,8],[541,8],[630,8],[719,8],[775,8],[858,8],[936,8]]},"1292":{"position":[[2290,8]]},"1306":{"position":[[2290,8]]},"1329":{"position":[[2290,8]]},"1464":{"position":[[37,7]]},"1467":{"position":[[334,9]]}},"keywords":{}}],["extens",{"_index":609,"title":{},"content":{"26":{"position":[[319,9],[397,9]]},"103":{"position":[[783,10]]},"190":{"position":[[1189,10]]},"417":{"position":[[1768,9]]},"502":{"position":[[1416,9]]},"545":{"position":[[1370,9]]},"637":{"position":[[930,9]]},"1021":{"position":[[1927,9]]},"1439":{"position":[[913,9]]}},"keywords":{}}],["extent_s",{"_index":6041,"title":{},"content":{"1292":{"position":[[2332,11]]},"1306":{"position":[[2332,11]]},"1329":{"position":[[2332,11]]}},"keywords":{}}],["extern",{"_index":146,"title":{},"content":{"3":{"position":[[1128,8]]},"4":{"position":[[434,8]]},"35":{"position":[[52,8]]},"36":{"position":[[86,8]]},"81":{"position":[[2140,8]]},"84":{"position":[[72,8]]},"157":{"position":[[29,8]]},"189":{"position":[[1277,8]]},"216":{"position":[[191,8],[322,8]]},"221":{"position":[[1686,8]]},"223":{"position":[[907,8]]},"239":{"position":[[223,8]]},"321":{"position":[[306,8],[399,8],[616,8],[1701,8]]},"323":{"position":[[1291,8]]},"326":{"position":[[790,8]]},"332":{"position":[[311,8]]},"1140":{"position":[[2859,8]]},"1176":{"position":[[527,8]]},"1185":{"position":[[327,8]]},"1194":{"position":[[537,8]]},"1203":{"position":[[698,8]]},"1204":{"position":[[156,8]]},"1205":{"position":[[206,8]]},"1206":{"position":[[641,8],[949,8]]},"1226":{"position":[[338,8]]},"1243":{"position":[[115,8]]},"1298":{"position":[[907,8]]},"1316":{"position":[[2859,8]]},"1340":{"position":[[2859,8]]},"1346":{"position":[[907,8]]},"1351":{"position":[[2859,8]]},"1354":{"position":[[362,8]]},"1379":{"position":[[1066,8]]},"1382":{"position":[[581,8]]},"1403":{"position":[[1066,8]]},"1414":{"position":[[1066,8]]},"1431":{"position":[[2882,8]]},"1439":{"position":[[72,8]]},"1461":{"position":[[2781,8]]},"1469":{"position":[[85,8]]},"1472":{"position":[[58,8]]},"1475":{"position":[[1029,8]]}},"keywords":{}}],["extra",{"_index":2810,"title":{},"content":{"270":{"position":[[81,5],[100,5]]},"1451":{"position":[[735,5]]}},"keywords":{}}],["extract",{"_index":466,"title":{},"content":{"16":{"position":[[484,8]]},"52":{"position":[[10,7]]},"94":{"position":[[2944,9]]},"107":{"position":[[82,9],[1316,9],[1814,9]]},"198":{"position":[[211,11],[304,8],[500,7],[675,8]]},"206":{"position":[[798,11]]},"233":{"position":[[611,7],[741,11]]},"296":{"position":[[3571,9]]},"351":{"position":[[267,7]]},"867":{"position":[[1365,8],[1489,7],[1630,8],[1646,7]]},"868":{"position":[[312,7]]},"869":{"position":[[993,7],[1354,7],[1406,7]]},"1140":{"position":[[2899,7]]},"1209":{"position":[[962,7]]},"1316":{"position":[[2899,7]]},"1340":{"position":[[2899,7]]},"1351":{"position":[[2899,7]]},"1379":{"position":[[1114,7]]},"1403":{"position":[[1114,7]]},"1414":{"position":[[1114,7]]},"1431":{"position":[[2922,7]]},"1444":{"position":[[100,9]]},"1476":{"position":[[900,9]]}},"keywords":{}}],["extractor",{"_index":6724,"title":{},"content":{"1477":{"position":[[2665,10],[2880,9]]}},"keywords":{}}],["extractor"",{"_index":6714,"title":{},"content":{"1476":{"position":[[1605,16]]}},"keywords":{}}],["extrem",{"_index":538,"title":{},"content":{"20":{"position":[[590,8]]},"70":{"position":[[303,9]]},"115":{"position":[[713,9]]},"165":{"position":[[1234,9]]},"207":{"position":[[1134,9]]},"281":{"position":[[3140,9]]},"321":{"position":[[1033,9]]},"368":{"position":[[390,9]]},"755":{"position":[[390,9]]},"768":{"position":[[390,9]]},"795":{"position":[[388,9]]},"810":{"position":[[388,9]]},"826":{"position":[[388,9]]},"905":{"position":[[393,9]]},"920":{"position":[[393,9]]},"932":{"position":[[393,9]]},"948":{"position":[[393,9]]},"966":{"position":[[393,9]]}},"keywords":{}}],["ey",{"_index":4276,"title":{},"content":{"595":{"position":[[1579,3]]}},"keywords":{}}],["f",{"_index":82,"title":{},"content":{"2":{"position":[[401,2],[637,2],[678,3]]},"221":{"position":[[1395,1]]},"222":{"position":[[640,1]]},"223":{"position":[[606,1]]},"224":{"position":[[659,1]]},"236":{"position":[[1403,1]]},"1298":{"position":[[606,1]]},"1322":{"position":[[640,1]]},"1335":{"position":[[640,1]]},"1346":{"position":[[606,1]]},"1452":{"position":[[1362,2],[4313,1]]}},"keywords":{}}],["f1a5bc81",{"_index":3721,"title":{},"content":{"439":{"position":[[274,8]]}},"keywords":{}}],["f5bf",{"_index":2700,"title":{},"content":{"253":{"position":[[1384,4]]},"313":{"position":[[1384,4]]}},"keywords":{}}],["f5c0",{"_index":3090,"title":{},"content":{"316":{"position":[[368,4],[650,4],[940,4]]}},"keywords":{}}],["face",{"_index":2324,"title":{},"content":{"210":{"position":[[2277,4]]},"869":{"position":[[359,6]]}},"keywords":{}}],["facebook",{"_index":3332,"title":{"511":{"position":[[0,8]]}},"content":{"364":{"position":[[1078,8],[1143,8]]},"512":{"position":[[175,8]]},"513":{"position":[[41,8]]},"514":{"position":[[50,8]]},"515":{"position":[[61,8],[112,8],[399,8]]},"516":{"position":[[250,8]]},"517":{"position":[[141,8],[317,8],[642,8],[699,8],[3289,8],[3521,8],[4025,8]]},"518":{"position":[[159,8]]},"668":{"position":[[63,8],[104,8]]}},"keywords":{}}],["facilit",{"_index":144,"title":{},"content":{"3":{"position":[[1100,10]]},"64":{"position":[[756,10]]},"196":{"position":[[338,12]]},"233":{"position":[[345,12]]},"237":{"position":[[116,10]]},"477":{"position":[[351,10]]},"598":{"position":[[315,10]]},"974":{"position":[[34,11]]},"1439":{"position":[[456,10]]}},"keywords":{}}],["fact",{"_index":1942,"title":{},"content":{"164":{"position":[[1006,4],[1357,4]]},"180":{"position":[[833,4]]},"183":{"position":[[468,4],[1167,4],[1315,4],[1437,4],[2956,4],[3475,4],[3553,4],[3829,4],[3972,4]]},"184":{"position":[[34,4],[848,4]]},"238":{"position":[[1423,4]]},"296":{"position":[[3109,4]]},"322":{"position":[[796,5]]},"325":{"position":[[513,5]]},"1207":{"position":[[582,4]]},"1448":{"position":[[714,5],[791,6]]}},"keywords":{}}],["factor",{"_index":6044,"title":{},"content":{"1292":{"position":[[2385,6]]},"1306":{"position":[[2385,6]]},"1329":{"position":[[2385,6]]},"1452":{"position":[[3278,7]]}},"keywords":{}}],["fail",{"_index":324,"title":{},"content":{"11":{"position":[[1100,4]]},"13":{"position":[[193,5]]},"14":{"position":[[955,5]]},"56":{"position":[[830,6]]},"98":{"position":[[828,6]]},"110":{"position":[[1290,6]]},"117":{"position":[[628,4]]},"138":{"position":[[1436,6]]},"141":{"position":[[1438,6]]},"142":{"position":[[1445,6]]},"146":{"position":[[1053,7],[1121,6]]},"149":{"position":[[1047,7],[1115,6]]},"152":{"position":[[1037,7],[1105,6]]},"158":{"position":[[913,4]]},"284":{"position":[[166,7],[487,7]]},"309":{"position":[[765,4],[1333,6]]},"558":{"position":[[237,5]]},"760":{"position":[[20,7]]},"761":{"position":[[20,7]]},"762":{"position":[[20,7]]},"763":{"position":[[20,7]]},"764":{"position":[[17,5]]},"773":{"position":[[20,7]]},"774":{"position":[[20,7]]},"775":{"position":[[20,7]]},"776":{"position":[[20,7]]},"777":{"position":[[17,5]]},"800":{"position":[[20,7]]},"801":{"position":[[20,7]]},"802":{"position":[[20,7]]},"803":{"position":[[20,7]]},"804":{"position":[[17,5]]},"815":{"position":[[20,7]]},"816":{"position":[[20,7]]},"817":{"position":[[20,7]]},"818":{"position":[[20,7]]},"819":{"position":[[17,5]]},"831":{"position":[[20,7]]},"832":{"position":[[20,7]]},"833":{"position":[[20,7]]},"834":{"position":[[20,7]]},"835":{"position":[[17,5]]},"922":{"position":[[1227,7],[2645,4]]},"1155":{"position":[[561,4]]},"1243":{"position":[[468,5]]},"1370":{"position":[[1063,4]]},"1438":{"position":[[292,4],[567,6]]},"1442":{"position":[[1458,6]]},"1447":{"position":[[272,5]]},"1470":{"position":[[405,6]]}},"keywords":{}}],["failedlogin",{"_index":6046,"title":{},"content":{"1292":{"position":[[2423,11]]},"1306":{"position":[[2423,11]]},"1329":{"position":[[2423,11]]}},"keywords":{}}],["failur",{"_index":381,"title":{},"content":{"13":{"position":[[301,8]]},"55":{"position":[[744,9]]},"267":{"position":[[653,8]]},"331":{"position":[[442,8]]},"333":{"position":[[177,7]]},"750":{"position":[[354,9]]},"759":{"position":[[228,7]]},"764":{"position":[[224,7]]},"766":{"position":[[354,9]]},"772":{"position":[[239,7]]},"777":{"position":[[224,7]]},"789":{"position":[[388,9]]},"799":{"position":[[226,7]]},"804":{"position":[[222,7]]},"807":{"position":[[388,9]]},"814":{"position":[[226,7]]},"819":{"position":[[222,7]]},"823":{"position":[[388,9]]},"830":{"position":[[226,7]]},"835":{"position":[[222,7]]},"922":{"position":[[2818,8]]},"1437":{"position":[[973,7]]},"1447":{"position":[[523,8]]},"1470":{"position":[[479,8]]}},"keywords":{}}],["fair",{"_index":2896,"title":{},"content":{"281":{"position":[[2279,4]]}},"keywords":{}}],["fairli",{"_index":2436,"title":{},"content":{"218":{"position":[[1390,6]]}},"keywords":{}}],["fake",{"_index":2492,"title":{},"content":{"234":{"position":[[188,4]]},"236":{"position":[[2701,4]]},"237":{"position":[[2946,4]]}},"keywords":{}}],["faker.datatype.boolean",{"_index":2556,"title":{},"content":{"236":{"position":[[2455,27],[3240,27]]}},"keywords":{}}],["faker.datatype.numb",{"_index":2553,"title":{},"content":{"236":{"position":[[2336,26],[2393,26],[3121,26],[3178,26]]}},"keywords":{}}],["faker.internet.usernam",{"_index":2551,"title":{},"content":{"236":{"position":[[2262,28],[3047,28]]}},"keywords":{}}],["fall",{"_index":3128,"title":{},"content":{"320":{"position":[[1996,4]]},"419":{"position":[[2024,4]]},"441":{"position":[[633,4]]},"504":{"position":[[1653,4]]},"547":{"position":[[2026,4]]},"639":{"position":[[1651,4]]},"1023":{"position":[[2007,4]]},"1479":{"position":[[711,4]]}},"keywords":{}}],["fals",{"_index":818,"title":{},"content":{"55":{"position":[[437,6]]},"56":{"position":[[773,6]]},"122":{"position":[[1521,6]]},"230":{"position":[[1053,6]]},"253":{"position":[[1438,6]]},"308":{"position":[[693,6]]},"313":{"position":[[1438,6]]},"406":{"position":[[270,6]]},"417":{"position":[[547,5]]},"438":{"position":[[547,5]]},"502":{"position":[[1007,5]]},"517":{"position":[[2994,5],[3094,5]]},"545":{"position":[[547,5]]},"842":{"position":[[3624,5]]},"843":{"position":[[411,5],[435,5],[641,5]]},"867":{"position":[[487,5]]},"868":{"position":[[250,5]]},"879":{"position":[[1357,5]]},"885":{"position":[[342,5]]},"886":{"position":[[189,5]]},"991":{"position":[[755,5]]},"992":{"position":[[220,5]]},"1009":{"position":[[818,5]]},"1010":{"position":[[303,5]]},"1021":{"position":[[1518,5]]},"1125":{"position":[[717,6],[732,5]]},"1138":{"position":[[1574,5]]},"1140":{"position":[[2932,5]]},"1151":{"position":[[1518,6],[1533,5]]},"1179":{"position":[[1324,5]]},"1188":{"position":[[944,5]]},"1192":{"position":[[592,5]]},"1196":{"position":[[1085,5]]},"1209":{"position":[[223,5]]},"1253":{"position":[[603,5]]},"1275":{"position":[[505,5]]},"1286":{"position":[[2779,5]]},"1292":{"position":[[2466,5]]},"1301":{"position":[[2615,5]]},"1306":{"position":[[2466,5]]},"1313":{"position":[[1118,5]]},"1316":{"position":[[2932,5]]},"1325":{"position":[[2779,5]]},"1329":{"position":[[2466,5]]},"1337":{"position":[[1118,5]]},"1340":{"position":[[2932,5]]},"1348":{"position":[[1118,5]]},"1351":{"position":[[2932,5]]},"1376":{"position":[[694,5]]},"1379":{"position":[[1158,5]]},"1394":{"position":[[1047,5]]},"1400":{"position":[[694,5]]},"1403":{"position":[[1158,5]]},"1411":{"position":[[694,5]]},"1414":{"position":[[1158,5]]},"1427":{"position":[[878,5]]},"1431":{"position":[[2955,5]]}},"keywords":{}}],["famili",{"_index":4665,"title":{},"content":{"767":{"position":[[958,7]]},"792":{"position":[[1252,7]]},"824":{"position":[[1027,7]]},"904":{"position":[[1025,7]]},"918":{"position":[[1228,7]]}},"keywords":{}}],["familiar",{"_index":159,"title":{},"content":{"4":{"position":[[236,9]]},"107":{"position":[[108,8]]},"113":{"position":[[138,8]]},"164":{"position":[[219,8],[337,9]]},"213":{"position":[[223,8]]},"548":{"position":[[489,8]]}},"keywords":{}}],["far",{"_index":193,"title":{},"content":{"4":{"position":[[797,3]]},"163":{"position":[[426,3]]},"331":{"position":[[251,3]]},"385":{"position":[[252,4]]},"552":{"position":[[161,3],[437,3]]},"1015":{"position":[[183,3]]},"1113":{"position":[[369,3]]},"1391":{"position":[[588,3],[874,3]]},"1440":{"position":[[874,4]]}},"keywords":{}}],["fashion",{"_index":3315,"title":{},"content":{"364":{"position":[[97,8]]},"1434":{"position":[[100,7]]}},"keywords":{}}],["fast",{"_index":686,"title":{},"content":{"36":{"position":[[381,4]]},"124":{"position":[[141,4]]},"164":{"position":[[1280,4],[1571,4]]},"232":{"position":[[955,4]]},"1292":{"position":[[2501,4]]},"1306":{"position":[[2501,4]]},"1329":{"position":[[2501,4]]},"1451":{"position":[[833,4]]},"1452":{"position":[[733,4],[953,4],[1171,4],[2614,4],[3003,4],[3028,4],[3445,4],[3767,4],[3906,4],[3932,4],[4051,4],[4076,4],[4286,4],[4325,4],[4383,4],[4456,4]]}},"keywords":{}}],["faster",{"_index":190,"title":{},"content":{"4":{"position":[[747,6]]},"480":{"position":[[269,6]]},"573":{"position":[[1179,6]]},"584":{"position":[[1179,6]]},"870":{"position":[[982,6]]},"1452":{"position":[[86,6],[2680,6],[3674,6],[3982,6]]}},"keywords":{}}],["fastsyncenabledday",{"_index":6529,"title":{},"content":{"1452":{"position":[[1150,20]]}},"keywords":{}}],["fastsyncstarttim",{"_index":6525,"title":{},"content":{"1452":{"position":[[714,18]]}},"keywords":{}}],["fastsyncstoptim",{"_index":6527,"title":{},"content":{"1452":{"position":[[935,17]]}},"keywords":{}}],["fault",{"_index":775,"title":{},"content":{"48":{"position":[[205,5]]},"321":{"position":[[2295,5]]},"326":{"position":[[1933,5]]},"1292":{"position":[[2537,6]]},"1306":{"position":[[2537,6]]},"1329":{"position":[[2537,6]]}},"keywords":{}}],["feasibl",{"_index":1259,"title":{},"content":{"84":{"position":[[198,8]]},"821":{"position":[[430,9]]},"912":{"position":[[441,9]]}},"keywords":{}}],["featur",{"_index":326,"title":{"246":{"position":[[4,9]]},"1097":{"position":[[19,8]]}},"content":{"11":{"position":[[1158,7]]},"13":{"position":[[22,7]]},"82":{"position":[[3751,7]]},"122":{"position":[[2177,7]]},"141":{"position":[[124,8]]},"156":{"position":[[467,8]]},"239":{"position":[[2041,7]]},"268":{"position":[[454,8]]},"320":{"position":[[294,8],[1227,7],[2434,7],[2480,7]]},"323":{"position":[[2051,7]]},"328":{"position":[[19,8]]},"515":{"position":[[831,7]]},"517":{"position":[[302,7]]},"548":{"position":[[693,7]]},"846":{"position":[[37,7]]},"849":{"position":[[17,8],[384,9],[437,9]]},"889":{"position":[[38,7]]},"892":{"position":[[177,7]]},"946":{"position":[[34,7]]},"964":{"position":[[217,8]]},"1007":{"position":[[90,7]]},"1439":{"position":[[297,7]]}},"keywords":{}}],["featureev",{"_index":4937,"title":{},"content":{"892":{"position":[[431,13]]}},"keywords":{}}],["featureguidepagereportpageeventsfeatureeventstrackeventsguideeventspollev",{"_index":4926,"title":{},"content":{"888":{"position":[[68,77]]}},"keywords":{}}],["fed",{"_index":6704,"title":{},"content":{"1475":{"position":[[1617,3]]}},"keywords":{}}],["feed",{"_index":769,"title":{},"content":{"45":{"position":[[343,6]]},"325":{"position":[[552,4]]},"375":{"position":[[242,4]]},"377":{"position":[[1294,5],[1300,4],[1309,4]]},"378":{"position":[[178,5]]}},"keywords":{}}],["feedapplicationsappl",{"_index":4323,"title":{},"content":{"622":{"position":[[83,28]]}},"keywords":{}}],["feedback",{"_index":4396,"title":{},"content":{"649":{"position":[[618,8]]}},"keywords":{}}],["feel",{"_index":158,"title":{},"content":{"4":{"position":[[231,4]]},"104":{"position":[[236,4]]},"164":{"position":[[332,4]]},"206":{"position":[[662,4]]},"239":{"position":[[2834,4]]},"240":{"position":[[4080,4],[4584,4]]},"253":{"position":[[1016,4]]},"313":{"position":[[1016,4]]},"1118":{"position":[[992,4]]}},"keywords":{}}],["fenc",{"_index":6475,"title":{},"content":{"1437":{"position":[[767,7],[1228,7],[1530,6]]},"1438":{"position":[[86,7]]}},"keywords":{}}],["fetch",{"_index":654,"title":{"88":{"position":[[0,5]]}},"content":{"31":{"position":[[265,5]]},"88":{"position":[[16,8],[135,7],[527,7],[591,7]]},"370":{"position":[[828,7]]},"384":{"position":[[110,5]]},"387":{"position":[[819,5],[1031,8]]},"517":{"position":[[2875,5],[2919,5]]},"554":{"position":[[494,7]]},"573":{"position":[[891,5],[1190,6]]},"580":{"position":[[169,7]]},"757":{"position":[[1595,7]]},"770":{"position":[[1595,7]]},"797":{"position":[[1595,7]]},"812":{"position":[[1595,7]]},"828":{"position":[[1595,7]]},"842":{"position":[[2586,5]]},"867":{"position":[[920,7],[1079,7]]},"870":{"position":[[35,7]]},"879":{"position":[[1077,7]]},"907":{"position":[[611,7]]},"923":{"position":[[611,7]]},"934":{"position":[[611,7]]},"950":{"position":[[611,7]]},"968":{"position":[[611,7]]},"1045":{"position":[[596,7]]},"1053":{"position":[[596,7]]},"1061":{"position":[[596,7]]},"1140":{"position":[[2974,5]]},"1209":{"position":[[238,5]]},"1292":{"position":[[2573,5]]},"1306":{"position":[[2573,5]]},"1316":{"position":[[2974,5]]},"1329":{"position":[[2573,5]]},"1340":{"position":[[2974,5]]},"1351":{"position":[[2974,5]]},"1379":{"position":[[1195,5]]},"1403":{"position":[[1195,5]]},"1414":{"position":[[1195,5]]},"1431":{"position":[[2997,5]]},"1434":{"position":[[329,5]]},"1443":{"position":[[70,6]]}},"keywords":{}}],["fetch_thumbnail_imag",{"_index":3960,"title":{},"content":{"517":{"position":[[2851,23]]}},"keywords":{}}],["few",{"_index":1820,"title":{},"content":{"142":{"position":[[270,3]]},"160":{"position":[[75,3]]},"198":{"position":[[79,3]]},"237":{"position":[[3158,3]]},"238":{"position":[[1366,3]]},"240":{"position":[[4040,3]]},"241":{"position":[[122,3]]},"296":{"position":[[3799,3],[7873,3],[7977,3]]},"616":{"position":[[53,3]]},"1032":{"position":[[195,3]]},"1036":{"position":[[876,3]]},"1436":{"position":[[13,3]]}},"keywords":{}}],["fewer",{"_index":4279,"title":{},"content":{"595":{"position":[[1727,5]]},"1391":{"position":[[878,5]]}},"keywords":{}}],["fi"",{"_index":2345,"title":{},"content":{"210":{"position":[[2635,9]]}},"keywords":{}}],["field",{"_index":465,"title":{"67":{"position":[[7,6]]},"122":{"position":[[10,7]]},"226":{"position":[[23,6]]},"227":{"position":[[16,6]]},"230":{"position":[[16,6]]},"308":{"position":[[6,5]]},"310":{"position":[[2,5]]},"1006":{"position":[[8,7]]},"1200":{"position":[[8,7]]}},"content":{"16":{"position":[[471,7],[505,6],[576,6]]},"17":{"position":[[374,6],[493,6],[738,6],[868,6]]},"66":{"position":[[808,7]]},"67":{"position":[[550,5],[687,5],[964,5],[1043,5],[1196,6],[1294,5],[1384,6],[1463,5],[1827,5]]},"69":{"position":[[597,6]]},"72":{"position":[[152,6]]},"76":{"position":[[532,6],[699,5],[821,5]]},"80":{"position":[[348,6],[422,6]]},"82":{"position":[[1133,6]]},"98":{"position":[[172,5],[223,5],[237,5]]},"99":{"position":[[394,6],[773,6]]},"107":{"position":[[3141,6]]},"122":{"position":[[354,7],[431,6],[463,5],[715,5],[838,6],[1323,7],[1364,6],[1432,7],[1461,6],[1533,6],[1622,6],[1696,7],[1764,6],[1815,7],[1851,6],[1880,6],[1974,5]]},"129":{"position":[[635,6]]},"158":{"position":[[833,5]]},"159":{"position":[[270,5]]},"160":{"position":[[272,6],[464,6],[610,6]]},"162":{"position":[[785,5]]},"165":{"position":[[719,6],[798,6],[1661,6],[1722,6]]},"166":{"position":[[156,6],[186,5]]},"182":{"position":[[196,7]]},"183":{"position":[[2184,7],[3133,5]]},"190":{"position":[[937,6]]},"192":{"position":[[1263,5],[1585,5]]},"197":{"position":[[986,5],[1332,6],[1490,5]]},"207":{"position":[[1380,5],[1501,6],[1602,6]]},"217":{"position":[[741,6]]},"218":{"position":[[1974,5],[2055,7]]},"225":{"position":[[589,6]]},"227":{"position":[[5,5],[106,5]]},"228":{"position":[[357,7],[378,6],[523,5],[603,5],[648,6],[755,6],[899,7],[1049,7],[1096,7]]},"229":{"position":[[262,6],[385,6],[449,6],[583,7],[780,7]]},"230":{"position":[[19,6],[156,5],[502,6],[573,6],[626,6],[694,5],[755,7],[830,6],[916,6],[1004,7],[1018,7],[1096,6],[1171,7],[1300,6]]},"236":{"position":[[2721,7]]},"253":{"position":[[3149,6]]},"254":{"position":[[1640,6],[1810,6]]},"259":{"position":[[263,6],[1952,6]]},"290":{"position":[[566,6]]},"291":{"position":[[1091,5]]},"295":{"position":[[629,5]]},"296":{"position":[[6534,6]]},"301":{"position":[[506,6],[1232,6]]},"302":{"position":[[1076,6]]},"306":{"position":[[287,5],[334,5]]},"308":{"position":[[71,5],[186,7],[206,6],[339,7],[365,6],[389,6],[512,6],[591,6],[714,5],[807,6],[934,5],[1028,6],[1146,6]]},"309":{"position":[[233,6],[283,5],[448,5],[1034,5],[1881,5]]},"310":{"position":[[69,6]]},"313":{"position":[[3087,6],[3204,6],[3360,5]]},"314":{"position":[[1457,6]]},"315":{"position":[[2436,6]]},"332":{"position":[[533,5]]},"402":{"position":[[785,5]]},"406":{"position":[[126,5]]},"419":{"position":[[202,6],[2808,7]]},"436":{"position":[[393,6]]},"440":{"position":[[218,6]]},"441":{"position":[[1417,7]]},"472":{"position":[[635,6],[703,6],[768,6]]},"487":{"position":[[309,5]]},"488":{"position":[[233,5]]},"489":{"position":[[232,6]]},"504":{"position":[[139,6]]},"517":{"position":[[241,6],[888,7],[1708,7],[1716,6],[1740,6],[1785,8],[3338,5],[3637,5]]},"518":{"position":[[323,7]]},"529":{"position":[[814,5]]},"534":{"position":[[1624,5]]},"547":{"position":[[203,6],[2810,7]]},"548":{"position":[[1256,7],[1363,5]]},"556":{"position":[[1934,5]]},"584":{"position":[[1249,5]]},"590":{"position":[[115,6]]},"605":{"position":[[68,6]]},"611":{"position":[[924,6]]},"639":{"position":[[138,6],[2435,7]]},"659":{"position":[[390,5]]},"660":{"position":[[311,5]]},"662":{"position":[[232,6]]},"676":{"position":[[233,5]]},"677":{"position":[[232,6]]},"691":{"position":[[233,5]]},"692":{"position":[[232,6]]},"709":{"position":[[153,5],[186,5]]},"712":{"position":[[397,5]]},"779":{"position":[[112,6],[195,5]]},"846":{"position":[[284,6]]},"856":{"position":[[159,7]]},"947":{"position":[[579,7]]},"1006":{"position":[[47,7],[140,7],[205,5],[485,5]]},"1009":{"position":[[944,5],[1580,5],[1586,5],[1658,6]]},"1023":{"position":[[183,6],[2791,7]]},"1047":{"position":[[785,5]]},"1055":{"position":[[785,5]]},"1063":{"position":[[785,5]]},"1123":{"position":[[345,6],[448,6],[607,6],[767,5]]},"1133":{"position":[[1393,5],[1399,5]]},"1140":{"position":[[319,6]]},"1155":{"position":[[197,7],[416,5],[658,5]]},"1157":{"position":[[264,6],[340,7]]},"1164":{"position":[[17,6],[91,6],[170,7],[190,5],[560,6]]},"1172":{"position":[[17,6],[83,6],[107,5],[254,5]]},"1192":{"position":[[125,6]]},"1195":{"position":[[486,5]]},"1200":{"position":[[12,6],[227,5],[312,5],[362,6]]},"1201":{"position":[[375,6]]},"1209":{"position":[[94,5]]},"1222":{"position":[[17,6],[83,6],[107,5],[254,5]]},"1232":{"position":[[154,5]]},"1250":{"position":[[112,6],[195,5]]},"1275":{"position":[[119,7],[140,6],[293,6],[316,7],[387,5]]},"1276":{"position":[[28,6],[207,5],[337,6],[463,6]]},"1286":{"position":[[123,6],[1403,7]]},"1291":{"position":[[15,6],[94,6]]},"1292":{"position":[[248,6],[2615,6]]},"1301":{"position":[[123,6],[1239,7]]},"1305":{"position":[[15,6],[94,6]]},"1306":{"position":[[248,6],[2615,6]]},"1316":{"position":[[319,6]]},"1317":{"position":[[580,6],[647,6],[712,5]]},"1325":{"position":[[123,6],[1403,7]]},"1328":{"position":[[15,6],[94,6]]},"1329":{"position":[[248,6],[2615,6]]},"1340":{"position":[[319,6]]},"1341":{"position":[[580,6],[647,6],[712,5]]},"1351":{"position":[[319,6]]},"1352":{"position":[[580,6],[647,6],[712,5]]},"1356":{"position":[[570,7],[605,6],[1068,6],[1137,5],[1162,5]]},"1359":{"position":[[413,6]]},"1370":{"position":[[311,6]]},"1379":{"position":[[256,6]]},"1394":{"position":[[124,6]]},"1403":{"position":[[256,6]]},"1414":{"position":[[256,6]]},"1423":{"position":[[131,6]]},"1429":{"position":[[254,5],[443,5],[712,5]]},"1431":{"position":[[342,6]]},"1432":{"position":[[580,6],[661,6],[726,5]]},"1444":{"position":[[110,6]]},"1448":{"position":[[62,6],[281,6]]},"1470":{"position":[[881,6]]},"1479":{"position":[[343,6],[420,5],[534,6],[608,6]]},"1480":{"position":[[21,6]]}},"keywords":{}}],["field":"value"",{"_index":1405,"title":{},"content":{"98":{"position":[[319,31]]}},"keywords":{}}],["field'",{"_index":1967,"title":{"309":{"position":[[2,7]]}},"content":{"166":{"position":[[291,7]]},"306":{"position":[[303,7]]},"309":{"position":[[67,7]]}},"keywords":{}}],["field(",{"_index":4408,"title":{},"content":{"661":{"position":[[343,8]]}},"keywords":{}}],["field.click",{"_index":3825,"title":{},"content":{"479":{"position":[[394,11]]}},"keywords":{}}],["field_nam",{"_index":6268,"title":{},"content":{"1356":{"position":[[1125,11]]}},"keywords":{}}],["fields.includ",{"_index":3057,"title":{},"content":{"308":{"position":[[943,14]]}},"keywords":{}}],["fields.us",{"_index":3056,"title":{},"content":{"308":{"position":[[904,12]]}},"keywords":{}}],["fieldsdegreesdepartmentsdisciplineseeocemail",{"_index":4326,"title":{},"content":{"622":{"position":[[161,44]]}},"keywords":{}}],["fieldsissu",{"_index":4467,"title":{},"content":{"709":{"position":[[141,11]]}},"keywords":{}}],["fieldsscreen",{"_index":4489,"title":{},"content":{"709":{"position":[[627,12]]}},"keywords":{}}],["fieldsticket",{"_index":5456,"title":{},"content":{"1128":{"position":[[329,12]]}},"keywords":{}}],["fieldsticketstim",{"_index":3920,"title":{},"content":{"506":{"position":[[388,17]]}},"keywords":{}}],["file",{"_index":24,"title":{"3":{"position":[[9,6]]},"24":{"position":[[19,6]]},"275":{"position":[[12,5]]},"504":{"position":[[26,6]]},"633":{"position":[[5,4]]},"1020":{"position":[[0,4]]},"1023":{"position":[[23,6]]},"1141":{"position":[[4,5]]},"1146":{"position":[[0,4]]},"1167":{"position":[[15,5]]},"1173":{"position":[[0,4]]},"1210":{"position":[[4,5]]},"1215":{"position":[[0,4]]},"1217":{"position":[[15,5]]},"1223":{"position":[[0,4]]}},"content":{"1":{"position":[[306,6],[750,5],[979,6]]},"3":{"position":[[18,5],[95,4],[167,5],[353,4],[413,4],[1087,4]]},"4":{"position":[[36,5],[261,5],[681,5]]},"16":{"position":[[743,5],[1008,5]]},"24":{"position":[[83,5],[177,5],[289,6]]},"25":{"position":[[51,5]]},"26":{"position":[[74,5],[230,5],[271,4],[305,5]]},"31":{"position":[[279,5]]},"33":{"position":[[209,5]]},"56":{"position":[[44,5],[1186,4],[1602,5]]},"58":{"position":[[796,5]]},"61":{"position":[[57,5],[817,6],[927,5]]},"62":{"position":[[143,5],[277,4],[461,5],[551,6],[644,6],[689,4]]},"63":{"position":[[31,5],[201,4],[248,5],[414,6],[666,5],[728,5],[956,6]]},"64":{"position":[[12,5],[428,5]]},"66":{"position":[[60,5]]},"69":{"position":[[47,5]]},"70":{"position":[[503,5]]},"77":{"position":[[128,5],[217,5]]},"81":{"position":[[976,6],[2403,6],[2494,6],[2519,4],[2781,5]]},"82":{"position":[[1892,5],[4216,5]]},"87":{"position":[[154,5],[241,4]]},"89":{"position":[[77,6]]},"90":{"position":[[339,5]]},"91":{"position":[[347,5]]},"92":{"position":[[23,4]]},"94":{"position":[[485,4],[520,4],[901,4],[935,4],[2556,4]]},"97":{"position":[[145,4],[165,4]]},"100":{"position":[[326,4]]},"103":{"position":[[98,4],[641,5],[682,4]]},"120":{"position":[[52,5],[545,4]]},"149":{"position":[[1225,5]]},"161":{"position":[[138,5],[1092,6],[1132,5],[1226,5]]},"169":{"position":[[1196,5]]},"183":{"position":[[844,6],[970,5],[1093,5],[2910,4],[2939,4],[3431,5]]},"189":{"position":[[289,5]]},"190":{"position":[[529,4],[1184,4],[1263,5]]},"193":{"position":[[68,5]]},"221":{"position":[[338,5],[1032,4],[1166,5],[1183,4],[1262,4]]},"222":{"position":[[277,4],[411,5],[428,4],[507,4]]},"223":{"position":[[243,4],[377,5],[394,4],[473,4]]},"224":{"position":[[296,4],[430,5],[447,4],[526,4]]},"225":{"position":[[466,4]]},"236":{"position":[[292,4],[348,4],[1877,4],[1908,4],[1957,4],[2065,5],[2759,5],[3698,5]]},"254":{"position":[[168,5],[197,5],[1285,5],[2123,4]]},"260":{"position":[[98,5]]},"263":{"position":[[790,5],[864,6],[883,5],[1017,4],[1067,6]]},"264":{"position":[[96,5],[434,4]]},"266":{"position":[[463,5]]},"267":{"position":[[1234,6],[1360,4],[1512,5],[1522,4],[1675,5]]},"268":{"position":[[163,6],[180,5],[409,5],[711,4],[1433,5],[1732,4]]},"269":{"position":[[166,4],[336,4],[1008,5]]},"270":{"position":[[817,5],[989,4],[1141,5],[1151,4],[1272,5],[1638,5],[1721,5],[1776,4]]},"274":{"position":[[1570,5],[1642,6],[1798,5],[1862,4],[1919,6]]},"275":{"position":[[118,5],[468,4],[786,5],[882,5]]},"281":{"position":[[719,6],[763,4]]},"285":{"position":[[276,5]]},"296":{"position":[[168,5],[197,5],[2548,5],[3022,4],[3807,5],[4063,5],[4122,4],[4211,4],[5150,5]]},"301":{"position":[[1163,5]]},"307":{"position":[[865,5]]},"314":{"position":[[168,5],[197,5],[1140,5],[1212,4],[1391,5],[2450,4],[2535,4]]},"315":{"position":[[241,5],[542,5],[601,4],[690,4],[1070,5],[1234,5]]},"322":{"position":[[1043,5]]},"350":{"position":[[103,5]]},"358":{"position":[[103,5]]},"363":{"position":[[1335,4]]},"369":{"position":[[103,5]]},"376":{"position":[[103,5]]},"386":{"position":[[103,5]]},"391":{"position":[[103,5]]},"396":{"position":[[103,5]]},"401":{"position":[[127,5]]},"407":{"position":[[103,5]]},"416":{"position":[[103,5]]},"417":{"position":[[222,5],[1351,6],[1409,5],[1763,4]]},"419":{"position":[[64,4],[125,4],[1132,4],[1164,4],[1360,4],[1396,5],[2268,5],[2408,4],[2515,5]]},"423":{"position":[[103,5]]},"431":{"position":[[103,5]]},"437":{"position":[[103,5]]},"438":{"position":[[222,5],[1867,6]]},"440":{"position":[[80,4],[141,4],[1148,4],[1180,4],[1376,4]]},"441":{"position":[[5,5],[877,5],[1017,4],[1124,5]]},"447":{"position":[[103,5]]},"453":{"position":[[103,5]]},"459":{"position":[[103,5]]},"465":{"position":[[103,5]]},"472":{"position":[[103,5]]},"478":{"position":[[595,5]]},"481":{"position":[[103,5]]},"482":{"position":[[334,4]]},"495":{"position":[[103,5]]},"499":{"position":[[130,4],[300,4],[376,4]]},"500":{"position":[[168,5]]},"502":{"position":[[377,6],[682,5],[1057,5],[1411,4]]},"504":{"position":[[42,4],[63,4],[863,4],[927,4],[1025,5],[1897,5],[2037,4],[2144,5]]},"508":{"position":[[103,5]]},"516":{"position":[[103,5]]},"525":{"position":[[103,5]]},"533":{"position":[[103,5]]},"539":{"position":[[103,5]]},"543":{"position":[[397,4]]},"544":{"position":[[103,5]]},"545":{"position":[[222,5],[975,6],[1033,5],[1365,4]]},"547":{"position":[[65,4],[126,4],[1134,4],[1166,4],[1362,4],[1398,5],[2270,5],[2410,4],[2517,5]]},"548":{"position":[[1305,4]]},"555":{"position":[[100,5]]},"562":{"position":[[235,5]]},"563":{"position":[[119,4]]},"564":{"position":[[90,4],[151,4]]},"565":{"position":[[58,4],[104,5],[149,4]]},"571":{"position":[[717,4]]},"572":{"position":[[103,5]]},"573":{"position":[[538,4]]},"582":{"position":[[330,4]]},"583":{"position":[[93,5]]},"584":{"position":[[469,4]]},"592":{"position":[[100,5]]},"599":{"position":[[595,5]]},"600":{"position":[[103,5]]},"609":{"position":[[274,4]]},"610":{"position":[[103,5]]},"617":{"position":[[641,4]]},"618":{"position":[[103,5]]},"619":{"position":[[443,4]]},"624":{"position":[[103,5]]},"630":{"position":[[103,5]]},"634":{"position":[[122,4],[292,4],[368,4]]},"636":{"position":[[103,5],[255,4]]},"637":{"position":[[435,5],[593,5],[925,4],[1053,4],[1106,5]]},"639":{"position":[[41,4],[62,4],[861,4],[925,4],[1023,5],[1895,5],[2035,4],[2142,5]]},"646":{"position":[[103,5]]},"653":{"position":[[103,5]]},"669":{"position":[[103,5]]},"684":{"position":[[103,5]]},"699":{"position":[[103,5]]},"705":{"position":[[103,5]]},"711":{"position":[[103,5]]},"727":{"position":[[103,5]]},"734":{"position":[[103,5]]},"740":{"position":[[103,5]]},"746":{"position":[[103,5]]},"752":{"position":[[167,4]]},"756":{"position":[[103,5]]},"769":{"position":[[103,5]]},"781":{"position":[[100,5]]},"791":{"position":[[120,4]]},"796":{"position":[[103,5]]},"811":{"position":[[103,5]]},"827":{"position":[[103,5]]},"841":{"position":[[103,5]]},"850":{"position":[[103,5]]},"858":{"position":[[103,5]]},"866":{"position":[[103,5]]},"869":{"position":[[24,5],[250,5],[1032,5],[1395,6]]},"878":{"position":[[103,5]]},"879":{"position":[[799,4],[873,4]]},"884":{"position":[[103,5]]},"890":{"position":[[103,6]]},"896":{"position":[[103,5]]},"906":{"position":[[103,5]]},"921":{"position":[[103,5]]},"922":{"position":[[995,5]]},"933":{"position":[[103,5]]},"949":{"position":[[103,5]]},"958":{"position":[[103,5]]},"967":{"position":[[103,5]]},"981":{"position":[[103,5]]},"990":{"position":[[103,5]]},"996":{"position":[[103,5]]},"1005":{"position":[[100,5]]},"1008":{"position":[[1457,5]]},"1012":{"position":[[220,5]]},"1014":{"position":[[103,5]]},"1019":{"position":[[62,5],[112,5],[191,5],[228,6]]},"1020":{"position":[[64,5],[112,5],[199,5],[266,5],[364,4],[524,4],[597,5],[637,4],[790,5],[830,5],[916,5],[970,5],[1054,4],[1244,5],[1466,5],[1520,4],[1622,4],[1714,4],[1849,4],[1892,5],[1939,4],[2050,5]]},"1021":{"position":[[103,5],[735,5],[751,5],[850,5],[884,4],[931,5],[1068,6],[1248,5],[1309,5],[1373,5],[1568,5],[1922,4]]},"1023":{"position":[[45,4],[106,4],[1115,4],[1147,4],[1343,4],[1379,5],[2251,5],[2391,4],[2498,5]]},"1027":{"position":[[103,5]]},"1033":{"position":[[107,5]]},"1044":{"position":[[103,5]]},"1052":{"position":[[103,5]]},"1060":{"position":[[103,5]]},"1069":{"position":[[103,5]]},"1075":{"position":[[103,5]]},"1084":{"position":[[103,5]]},"1093":{"position":[[103,5]]},"1100":{"position":[[103,5]]},"1106":{"position":[[103,6]]},"1112":{"position":[[103,5]]},"1120":{"position":[[435,5],[530,5],[643,5],[723,5]]},"1124":{"position":[[103,5]]},"1132":{"position":[[103,6]]},"1142":{"position":[[60,5]]},"1144":{"position":[[449,5],[572,4],[629,5],[1219,6]]},"1146":{"position":[[14,5],[157,5],[648,4]]},"1147":{"position":[[46,5],[73,5],[229,5],[379,5]]},"1149":{"position":[[431,6]]},"1160":{"position":[[60,5]]},"1162":{"position":[[305,5],[638,5]]},"1165":{"position":[[297,4]]},"1168":{"position":[[60,5]]},"1170":{"position":[[449,5],[572,4],[629,5]]},"1172":{"position":[[47,5]]},"1173":{"position":[[14,5],[157,5],[660,4]]},"1174":{"position":[[46,5],[73,5],[229,5],[379,5]]},"1176":{"position":[[170,4]]},"1204":{"position":[[543,5]]},"1206":{"position":[[631,5],[722,5]]},"1211":{"position":[[60,5],[234,4]]},"1213":{"position":[[304,5],[427,4],[484,5],[896,6]]},"1215":{"position":[[14,5],[157,5],[648,4]]},"1216":{"position":[[46,5],[73,5],[229,5],[379,5]]},"1218":{"position":[[60,5],[234,4]]},"1220":{"position":[[304,5],[427,4],[484,5]]},"1222":{"position":[[47,5]]},"1223":{"position":[[14,5],[157,5],[660,4]]},"1224":{"position":[[46,5],[73,5],[229,5],[379,5]]},"1245":{"position":[[593,4]]},"1252":{"position":[[100,5]]},"1258":{"position":[[112,6]]},"1292":{"position":[[2658,4]]},"1298":{"position":[[243,4],[377,5],[394,4],[473,4]]},"1306":{"position":[[2658,4]]},"1322":{"position":[[277,4],[411,5],[428,4],[507,4]]},"1329":{"position":[[2658,4]]},"1335":{"position":[[277,4],[411,5],[428,4],[507,4]]},"1346":{"position":[[243,4],[377,5],[394,4],[473,4]]},"1379":{"position":[[1248,4]]},"1403":{"position":[[1248,4]]},"1414":{"position":[[1248,4]]},"1439":{"position":[[684,5],[751,4],[845,4],[881,4]]},"1461":{"position":[[137,4],[173,6],[386,5],[898,6],[3330,4],[5083,5]]},"1480":{"position":[[69,4],[479,4]]}},"keywords":{}}],["file:dev",{"_index":3301,"title":{},"content":{"363":{"position":[[1391,8]]},"503":{"position":[[94,8]]},"638":{"position":[[94,8]]}},"keywords":{}}],["file_block_si",{"_index":6055,"title":{},"content":{"1292":{"position":[[2697,13]]},"1306":{"position":[[2697,13]]},"1329":{"position":[[2697,13]]}},"keywords":{}}],["file_id",{"_index":4138,"title":{},"content":{"566":{"position":[[180,8]]}},"keywords":{}}],["filenam",{"_index":6486,"title":{},"content":{"1439":{"position":[[527,8]]}},"keywords":{}}],["files.thes",{"_index":595,"title":{},"content":{"24":{"position":[[66,11]]}},"keywords":{}}],["filesizelimit",{"_index":5719,"title":{},"content":{"1144":{"position":[[557,14]]},"1170":{"position":[[557,14]]},"1213":{"position":[[412,14]]},"1220":{"position":[[412,14]]}},"keywords":{}}],["fill",{"_index":1110,"title":{},"content":{"80":{"position":[[410,4]]},"121":{"position":[[409,5]]},"139":{"position":[[148,6]]},"143":{"position":[[172,6]]},"144":{"position":[[489,4]]},"157":{"position":[[409,4]]},"184":{"position":[[350,4]]},"190":{"position":[[806,4]]},"192":{"position":[[444,4]]},"217":{"position":[[907,4]]},"218":{"position":[[454,4]]},"225":{"position":[[560,7]]},"232":{"position":[[428,6]]},"240":{"position":[[2572,7]]},"281":{"position":[[752,4],[1120,4]]},"290":{"position":[[720,4]]},"291":{"position":[[382,4]]},"301":{"position":[[653,4]]},"302":{"position":[[382,4]]},"370":{"position":[[74,4]]},"436":{"position":[[371,4],[614,4]]},"574":{"position":[[177,4]]},"585":{"position":[[167,4]]},"856":{"position":[[138,4]]},"909":{"position":[[873,4]]},"922":{"position":[[1569,4],[2210,7]]},"925":{"position":[[873,4]]},"936":{"position":[[873,4]]},"952":{"position":[[873,4]]},"970":{"position":[[873,4]]},"1042":{"position":[[1220,4]]},"1138":{"position":[[74,4]]},"1408":{"position":[[493,4]]}},"keywords":{}}],["fillfactor",{"_index":6307,"title":{},"content":{"1379":{"position":[[1297,10]]},"1403":{"position":[[1297,10]]},"1414":{"position":[[1297,10]]}},"keywords":{}}],["filter",{"_index":717,"title":{"277":{"position":[[0,9]]}},"content":{"40":{"position":[[216,6]]},"61":{"position":[[574,6]]},"94":{"position":[[1674,9],[1710,7],[2023,9],[2076,7]]},"107":{"position":[[2521,9]]},"120":{"position":[[1226,9],[1262,7],[1575,9],[1628,7]]},"138":{"position":[[621,6],[1067,9]]},"141":{"position":[[744,6]]},"142":{"position":[[552,6],[1046,9]]},"154":{"position":[[1055,6]]},"183":{"position":[[3260,7]]},"254":{"position":[[3913,6]]},"256":{"position":[[79,6]]},"264":{"position":[[726,9]]},"274":{"position":[[990,6],[1471,7]]},"277":{"position":[[411,6]]},"296":{"position":[[5801,6]]},"301":{"position":[[989,7],[1094,6]]},"312":{"position":[[133,7]]},"313":{"position":[[3514,6]]},"314":{"position":[[287,8],[670,8]]},"315":{"position":[[435,8],[814,8],[1002,8],[1416,8],[1512,8],[1805,6]]},"316":{"position":[[229,8]]},"317":{"position":[[86,6]]},"349":{"position":[[398,6]]},"351":{"position":[[214,6],[237,7]]},"417":{"position":[[1153,6]]},"438":{"position":[[1669,6]]},"502":{"position":[[191,6]]},"545":{"position":[[762,6]]},"585":{"position":[[459,7]]},"1000":{"position":[[787,6],[849,7]]},"1009":{"position":[[1012,6],[1049,6],[1476,6]]},"1021":{"position":[[862,6]]},"1140":{"position":[[3012,6]]},"1292":{"position":[[2736,6]]},"1306":{"position":[[2736,6]]},"1316":{"position":[[3012,6]]},"1329":{"position":[[2736,6]]},"1340":{"position":[[3012,6]]},"1351":{"position":[[3012,6]]},"1370":{"position":[[1074,6]]},"1379":{"position":[[1354,6]]},"1403":{"position":[[1354,6]]},"1414":{"position":[[1354,6]]},"1431":{"position":[[3035,6]]},"1480":{"position":[[932,9],[968,7],[1281,9],[1334,7]]}},"keywords":{}}],["filter_values_typescript",{"_index":3072,"title":{},"content":{"314":{"position":[[465,24],[2320,24]]}},"keywords":{}}],["filtered.schema.yaml",{"_index":3070,"title":{},"content":{"314":{"position":[[329,20],[1347,20]]},"315":{"position":[[475,20]]}},"keywords":{}}],["filtered.t",{"_index":3071,"title":{},"content":{"314":{"position":[[433,11],[2288,11]]},"315":{"position":[[513,11],[1253,12]]}},"keywords":{}}],["filtertransf",{"_index":2831,"title":{},"content":{"277":{"position":[[673,15]]}},"keywords":{}}],["filtervaluestypescript(_read",{"_index":3080,"title":{},"content":{"315":{"position":[[1579,29],[1874,29]]}},"keywords":{}}],["final",{"_index":1623,"title":{},"content":{"115":{"position":[[437,6]]},"183":{"position":[[3248,8]]},"206":{"position":[[996,5]]},"209":{"position":[[4,8]]},"232":{"position":[[584,8]]},"236":{"position":[[2730,8]]},"250":{"position":[[1086,8]]},"254":{"position":[[2516,5]]},"296":{"position":[[7068,6]]},"314":{"position":[[1011,5],[2147,5]]},"319":{"position":[[1278,8]]},"321":{"position":[[434,8]]},"864":{"position":[[923,7]]},"867":{"position":[[466,5]]},"876":{"position":[[788,7]]},"989":{"position":[[1260,5]]},"1004":{"position":[[1343,5]]},"1118":{"position":[[933,8]]},"1443":{"position":[[695,8]]},"1459":{"position":[[1059,5]]}},"keywords":{}}],["finalize<br/>a",{"_index":6447,"title":{},"content":{"1434":{"position":[[1040,20]]}},"keywords":{}}],["find",{"_index":644,"title":{"278":{"position":[[0,7]]}},"content":{"30":{"position":[[107,4]]},"32":{"position":[[25,4]]},"39":{"position":[[25,4]]},"58":{"position":[[780,4]]},"82":{"position":[[3145,5]]},"138":{"position":[[1056,4]]},"142":{"position":[[1035,4]]},"150":{"position":[[153,4]]},"162":{"position":[[1919,4]]},"173":{"position":[[344,4],[434,4],[520,4]]},"177":{"position":[[121,4]]},"183":{"position":[[1066,4]]},"184":{"position":[[202,4],[571,7]]},"190":{"position":[[207,4]]},"192":{"position":[[166,4],[2368,4]]},"204":{"position":[[567,4]]},"212":{"position":[[285,4]]},"213":{"position":[[41,4]]},"215":{"position":[[121,4]]},"218":{"position":[[103,4],[1125,4]]},"222":{"position":[[155,7],[917,4]]},"223":{"position":[[121,7]]},"224":{"position":[[174,7]]},"243":{"position":[[279,4]]},"263":{"position":[[378,4],[1087,4]]},"267":{"position":[[1341,4],[1485,4],[1638,4]]},"270":{"position":[[143,4],[970,4],[1114,4]]},"290":{"position":[[334,4]]},"299":{"position":[[473,7]]},"301":{"position":[[287,4]]},"308":{"position":[[862,4]]},"309":{"position":[[1231,4]]},"341":{"position":[[544,4]]},"347":{"position":[[174,4]]},"368":{"position":[[333,4]]},"390":{"position":[[642,7]]},"395":{"position":[[821,7]]},"415":{"position":[[353,7]]},"460":{"position":[[436,4],[462,4]]},"486":{"position":[[371,4]]},"515":{"position":[[389,4]]},"548":{"position":[[132,4]]},"552":{"position":[[88,4],[364,4]]},"556":{"position":[[1545,4]]},"570":{"position":[[56,4]]},"571":{"position":[[56,4]]},"658":{"position":[[371,4]]},"674":{"position":[[371,4]]},"689":{"position":[[371,4]]},"755":{"position":[[333,4]]},"757":{"position":[[2325,5]]},"768":{"position":[[333,4]]},"770":{"position":[[2325,5]]},"795":{"position":[[331,4]]},"797":{"position":[[2332,5]]},"810":{"position":[[331,4]]},"812":{"position":[[2332,5]]},"826":{"position":[[331,4]]},"828":{"position":[[2332,5]]},"840":{"position":[[136,4],[1659,4],[1787,4]]},"849":{"position":[[52,4],[2157,4],[2700,4],[2828,4]]},"905":{"position":[[336,4]]},"919":{"position":[[2450,4]]},"920":{"position":[[336,4]]},"932":{"position":[[336,4]]},"947":{"position":[[290,4]]},"948":{"position":[[336,4]]},"966":{"position":[[336,4]]},"1008":{"position":[[1433,4]]},"1020":{"position":[[356,5]]},"1043":{"position":[[1814,4]]},"1076":{"position":[[128,4],[280,4]]},"1122":{"position":[[447,7]]},"1142":{"position":[[298,7]]},"1149":{"position":[[745,7]]},"1160":{"position":[[461,7]]},"1168":{"position":[[298,7]]},"1186":{"position":[[201,4]]},"1192":{"position":[[177,4]]},"1258":{"position":[[339,7]]},"1289":{"position":[[1393,4]]},"1298":{"position":[[121,7],[1225,4]]},"1303":{"position":[[1104,4]]},"1310":{"position":[[714,4]]},"1322":{"position":[[155,7],[917,4],[1612,4]]},"1335":{"position":[[155,7],[917,4],[1260,4]]},"1346":{"position":[[121,7],[1226,4]]},"1356":{"position":[[366,4]]},"1394":{"position":[[176,4]]},"1409":{"position":[[1087,4]]},"1423":{"position":[[183,4]]},"1447":{"position":[[194,7]]},"1479":{"position":[[315,4]]}},"keywords":{}}],["fine",{"_index":1581,"title":{},"content":{"110":{"position":[[1413,4]]},"122":{"position":[[760,4]]},"234":{"position":[[598,5]]},"240":{"position":[[4185,4]]},"260":{"position":[[10,4]]},"661":{"position":[[81,5]]},"1036":{"position":[[1089,4]]}},"keywords":{}}],["fingerprint",{"_index":6378,"title":{},"content":{"1384":{"position":[[720,11]]}},"keywords":{}}],["finish",{"_index":861,"title":{},"content":{"56":{"position":[[2522,8]]},"173":{"position":[[1190,6]]},"174":{"position":[[92,8]]},"204":{"position":[[169,8]]},"206":{"position":[[125,9]]},"285":{"position":[[413,6]]},"297":{"position":[[95,9]]},"1292":{"position":[[2791,6]]},"1306":{"position":[[2791,6]]},"1329":{"position":[[2791,6]]}},"keywords":{}}],["fire",{"_index":2189,"title":{},"content":{"197":{"position":[[928,5],[1182,5]]}},"keywords":{}}],["firebas",{"_index":2921,"title":{},"content":{"288":{"position":[[310,8]]},"290":{"position":[[924,8]]}},"keywords":{}}],["firebolt",{"_index":5422,"title":{"1202":{"position":[[0,8]]}},"content":{"1120":{"position":[[957,8]]},"1203":{"position":[[40,8],[487,8]]},"1204":{"position":[[81,8]]},"1205":{"position":[[113,8],[183,8]]},"1206":{"position":[[316,8],[392,8],[534,8],[776,8],[896,8],[1072,8],[1129,8]]},"1207":{"position":[[268,8]]},"1208":{"position":[[1,8],[96,8],[152,8],[291,8]]},"1209":{"position":[[1,8],[177,8]]}},"keywords":{}}],["firebolt:dev",{"_index":5423,"title":{},"content":{"1120":{"position":[[1017,12]]},"1207":{"position":[[391,12]]}},"keywords":{}}],["firehos",{"_index":3181,"title":{},"content":{"329":{"position":[[460,8]]}},"keywords":{}}],["firestor",{"_index":2920,"title":{"287":{"position":[[13,9]]},"290":{"position":[[13,10]]},"589":{"position":[[7,9]]}},"content":{"288":{"position":[[199,9],[379,9]]},"289":{"position":[[163,9],[397,9],[617,9]]},"290":{"position":[[50,9],[116,9],[350,9],[435,9],[757,10],[1183,10],[1218,9],[1754,9]]},"291":{"position":[[1315,9],[1389,9]]},"292":{"position":[[97,9]]},"363":{"position":[[1075,9]]},"590":{"position":[[1,9],[705,9]]},"591":{"position":[[66,9]]},"592":{"position":[[247,9]]},"594":{"position":[[916,9]]},"595":{"position":[[175,9],[480,9],[920,9],[970,9],[1156,9],[1512,10]]},"1252":{"position":[[247,9]]}},"keywords":{}}],["firestore:dev",{"_index":3298,"title":{},"content":{"363":{"position":[[1131,13]]},"594":{"position":[[89,13]]}},"keywords":{}}],["firestoresever",{"_index":2924,"title":{},"content":{"289":{"position":[[345,16]]}},"keywords":{}}],["firewal",{"_index":2461,"title":{},"content":{"221":{"position":[[2011,8]]},"753":{"position":[[202,8]]},"793":{"position":[[195,8]]},"919":{"position":[[195,8]]},"1042":{"position":[[1460,8]]},"1043":{"position":[[195,8]]},"1283":{"position":[[231,8]]},"1311":{"position":[[67,8]]},"1408":{"position":[[733,8]]},"1409":{"position":[[195,8]]}},"keywords":{}}],["first",{"_index":87,"title":{"187":{"position":[[12,5]]}},"content":{"2":{"position":[[470,5]]},"19":{"position":[[16,5]]},"30":{"position":[[262,5]]},"53":{"position":[[28,5]]},"105":{"position":[[164,5]]},"121":{"position":[[366,5]]},"133":{"position":[[281,5],[609,5]]},"140":{"position":[[80,5]]},"165":{"position":[[1775,5]]},"176":{"position":[[65,5],[115,5]]},"180":{"position":[[784,6]]},"182":{"position":[[638,6]]},"183":{"position":[[1477,5]]},"190":{"position":[[373,6]]},"196":{"position":[[777,6]]},"197":{"position":[[1254,6]]},"206":{"position":[[6,5]]},"217":{"position":[[8,5]]},"219":{"position":[[31,5]]},"232":{"position":[[347,6]]},"233":{"position":[[962,6]]},"236":{"position":[[126,6]]},"254":{"position":[[1013,5],[1781,6]]},"256":{"position":[[45,5]]},"267":{"position":[[1788,5]]},"268":{"position":[[218,5]]},"278":{"position":[[149,5],[831,5]]},"280":{"position":[[390,5]]},"281":{"position":[[592,5]]},"290":{"position":[[8,5]]},"301":{"position":[[8,5]]},"314":{"position":[[734,5],[1598,6]]},"317":{"position":[[45,5]]},"324":{"position":[[728,6]]},"329":{"position":[[219,5]]},"338":{"position":[[10,5]]},"368":{"position":[[68,5]]},"419":{"position":[[2247,5],[2386,5]]},"441":{"position":[[856,5],[995,5]]},"504":{"position":[[1876,5],[2015,5]]},"547":{"position":[[2249,5],[2388,5]]},"595":{"position":[[345,5]]},"616":{"position":[[110,5],[184,5]]},"639":{"position":[[1874,5],[2013,5]]},"755":{"position":[[68,5]]},"768":{"position":[[68,5]]},"795":{"position":[[66,5]]},"810":{"position":[[66,5]]},"826":{"position":[[66,5]]},"905":{"position":[[71,5]]},"920":{"position":[[71,5]]},"932":{"position":[[71,5]]},"948":{"position":[[71,5]]},"966":{"position":[[71,5]]},"1023":{"position":[[2230,5],[2369,5]]},"1032":{"position":[[189,5]]},"1140":{"position":[[3044,5]]},"1186":{"position":[[13,5]]},"1209":{"position":[[254,5]]},"1243":{"position":[[559,5]]},"1292":{"position":[[2826,5]]},"1293":{"position":[[318,5]]},"1306":{"position":[[2826,5]]},"1307":{"position":[[318,5]]},"1316":{"position":[[3044,5]]},"1329":{"position":[[2826,5]]},"1330":{"position":[[318,5]]},"1340":{"position":[[3044,5]]},"1351":{"position":[[3044,5]]},"1370":{"position":[[1086,5]]},"1379":{"position":[[1410,5]]},"1380":{"position":[[318,5]]},"1383":{"position":[[131,5]]},"1384":{"position":[[204,5]]},"1403":{"position":[[1410,5]]},"1404":{"position":[[318,5]]},"1414":{"position":[[1410,5]]},"1415":{"position":[[318,5]]},"1431":{"position":[[3067,5]]},"1435":{"position":[[671,5]]},"1442":{"position":[[45,5],[103,5],[1296,5]]},"1453":{"position":[[718,5]]},"1463":{"position":[[65,5],[528,5]]}},"keywords":{}}],["first_nam",{"_index":3605,"title":{},"content":{"418":{"position":[[268,11]]},"439":{"position":[[525,11]]},"546":{"position":[[1005,11]]},"638":{"position":[[297,11]]},"1022":{"position":[[334,11]]}},"keywords":{}}],["first_valu",{"_index":5652,"title":{},"content":{"1140":{"position":[[3081,11]]},"1292":{"position":[[2884,11]]},"1306":{"position":[[2884,11]]},"1316":{"position":[[3081,11]]},"1329":{"position":[[2884,11]]},"1340":{"position":[[3081,11]]},"1351":{"position":[[3081,11]]},"1431":{"position":[[3104,11]]}},"keywords":{}}],["firstwritewin",{"_index":6638,"title":{"1463":{"position":[[0,14]]}},"content":{"1463":{"position":[[0,14],[33,14],[403,14]]},"1465":{"position":[[994,14]]},"1467":{"position":[[2287,14]]}},"keywords":{}}],["fit",{"_index":1572,"title":{},"content":{"110":{"position":[[541,3]]},"183":{"position":[[2865,3]]},"870":{"position":[[345,3]]}},"keywords":{}}],["five",{"_index":859,"title":{},"content":{"56":{"position":[[2473,4],[2648,4]]},"605":{"position":[[169,4]]},"1456":{"position":[[257,4]]}},"keywords":{}}],["fivetran",{"_index":3155,"title":{"323":{"position":[[0,9]]}},"content":{"323":{"position":[[12,8],[1706,8],[2042,8]]}},"keywords":{}}],["fix",{"_index":736,"title":{},"content":{"41":{"position":[[651,3]]},"160":{"position":[[847,3]]},"183":{"position":[[1680,3]]},"280":{"position":[[261,3]]},"291":{"position":[[710,3]]},"302":{"position":[[710,3]]},"332":{"position":[[413,3]]},"419":{"position":[[465,3]]},"440":{"position":[[481,3]]},"504":{"position":[[409,3]]},"547":{"position":[[466,3]]},"639":{"position":[[407,3]]},"759":{"position":[[278,3]]},"761":{"position":[[310,6]]},"762":{"position":[[429,3]]},"764":{"position":[[837,5]]},"772":{"position":[[289,3]]},"774":{"position":[[310,6]]},"775":{"position":[[429,3]]},"777":{"position":[[837,5]]},"799":{"position":[[276,3]]},"801":{"position":[[316,6]]},"802":{"position":[[429,3]]},"804":{"position":[[835,5]]},"814":{"position":[[276,3]]},"816":{"position":[[316,6]]},"817":{"position":[[429,3]]},"819":{"position":[[835,5]]},"830":{"position":[[276,3]]},"832":{"position":[[316,6]]},"833":{"position":[[429,3]]},"835":{"position":[[835,5]]},"1023":{"position":[[446,3]]},"1292":{"position":[[2928,5]]},"1306":{"position":[[2928,5]]},"1329":{"position":[[2928,5]]},"1447":{"position":[[57,3]]},"1452":{"position":[[49,5],[2272,5]]}},"keywords":{}}],["fixed_len_byte_array",{"_index":5782,"title":{},"content":{"1172":{"position":[[784,20],[867,20]]},"1222":{"position":[[784,20],[867,20]]}},"keywords":{}}],["fixtur",{"_index":621,"title":{"133":{"position":[[15,9]]}},"content":{"26":{"position":[[675,9]]},"43":{"position":[[298,8]]},"129":{"position":[[91,9]]}},"keywords":{}}],["flag",{"_index":912,"title":{},"content":{"60":{"position":[[1150,5]]},"62":{"position":[[395,5]]},"63":{"position":[[1083,4]]},"68":{"position":[[1375,4],[1769,4]]},"237":{"position":[[3065,4]]},"341":{"position":[[606,5]]},"367":{"position":[[84,4]]},"578":{"position":[[399,4]]},"931":{"position":[[749,5],[826,4]]},"1471":{"position":[[392,4]]}},"keywords":{}}],["flag"",{"_index":5071,"title":{},"content":{"931":{"position":[[780,11]]}},"keywords":{}}],["flagto",{"_index":4721,"title":{},"content":{"808":{"position":[[674,6]]}},"keywords":{}}],["flashback",{"_index":4901,"title":{"873":{"position":[[9,11]]}},"content":{"878":{"position":[[259,9]]},"879":{"position":[[1192,9],[1224,9],[1310,9]]}},"keywords":{}}],["flashback:dev",{"_index":4920,"title":{},"content":{"880":{"position":[[96,13]]}},"keywords":{}}],["flat",{"_index":1919,"title":{},"content":{"162":{"position":[[1406,4]]},"291":{"position":[[1331,4]]},"302":{"position":[[1256,4]]}},"keywords":{}}],["flatten",{"_index":2478,"title":{},"content":{"227":{"position":[[152,7]]}},"keywords":{}}],["flavor",{"_index":1868,"title":{},"content":{"158":{"position":[[333,8]]},"332":{"position":[[609,8]]}},"keywords":{}}],["flexibl",{"_index":727,"title":{},"content":{"41":{"position":[[350,8]]},"70":{"position":[[259,9]]},"87":{"position":[[560,9]]},"210":{"position":[[1524,8]]},"211":{"position":[[326,11]]},"240":{"position":[[3170,8]]},"320":{"position":[[956,9]]},"1461":{"position":[[608,8]]},"1471":{"position":[[144,11]]}},"keywords":{}}],["flink",{"_index":1514,"title":{},"content":{"107":{"position":[[178,6]]},"329":{"position":[[525,6]]}},"keywords":{}}],["float",{"_index":5654,"title":{},"content":{"1140":{"position":[[3127,5]]},"1209":{"position":[[272,5]]},"1292":{"position":[[320,5]]},"1306":{"position":[[320,5]]},"1316":{"position":[[3127,5]]},"1329":{"position":[[320,5]]},"1340":{"position":[[3127,5]]},"1351":{"position":[[3127,5]]},"1379":{"position":[[1466,5]]},"1403":{"position":[[1466,5]]},"1414":{"position":[[1466,5]]},"1431":{"position":[[3150,5]]}},"keywords":{}}],["float4",{"_index":5981,"title":{},"content":{"1292":{"position":[[356,6]]},"1306":{"position":[[356,6]]},"1329":{"position":[[356,6]]}},"keywords":{}}],["float8",{"_index":5984,"title":{},"content":{"1292":{"position":[[397,6]]},"1306":{"position":[[397,6]]},"1329":{"position":[[397,6]]}},"keywords":{}}],["floor",{"_index":5657,"title":{},"content":{"1140":{"position":[[3174,5]]},"1316":{"position":[[3174,5]]},"1340":{"position":[[3174,5]]},"1351":{"position":[[3174,5]]},"1431":{"position":[[3197,5]]}},"keywords":{}}],["flow",{"_index":2,"title":{"23":{"position":[[5,6]]},"24":{"position":[[0,4]]},"25":{"position":[[7,4]]},"29":{"position":[[13,5]]},"61":{"position":[[13,5]]},"80":{"position":[[0,4]]},"168":{"position":[[21,4]]},"169":{"position":[[21,4]]},"170":{"position":[[51,5]]},"175":{"position":[[13,5]]},"177":{"position":[[0,4]]},"191":{"position":[[30,5]]},"192":{"position":[[17,4]]},"198":{"position":[[24,5]]},"205":{"position":[[19,5]]},"213":{"position":[[0,4]]},"214":{"position":[[20,4]]},"244":{"position":[[22,4]]},"258":{"position":[[10,5]]},"272":{"position":[[7,4]]},"286":{"position":[[21,5]]},"327":{"position":[[15,5]]},"328":{"position":[[4,4]]},"334":{"position":[[38,4]]},"336":{"position":[[42,4]]},"339":{"position":[[15,4]]},"340":{"position":[[15,4]]},"349":{"position":[[40,5]]},"383":{"position":[[48,4]]},"445":{"position":[[51,4]]},"479":{"position":[[41,5]]},"486":{"position":[[20,5]]},"523":{"position":[[48,4]]},"531":{"position":[[48,4]]},"553":{"position":[[48,4]]},"570":{"position":[[48,4]]},"608":{"position":[[48,4]]},"615":{"position":[[48,4]]},"644":{"position":[[49,4]]},"651":{"position":[[49,4]]},"658":{"position":[[20,5]]},"674":{"position":[[20,5]]},"689":{"position":[[20,5]]},"717":{"position":[[50,4]]},"732":{"position":[[51,4]]},"947":{"position":[[46,5]]},"987":{"position":[[52,4]]},"1002":{"position":[[52,4]]},"1047":{"position":[[11,4]]},"1055":{"position":[[11,4]]},"1063":{"position":[[11,4]]},"1092":{"position":[[44,5]]},"1227":{"position":[[31,4]]},"1244":{"position":[[31,4]]},"1446":{"position":[[12,4]]},"1460":{"position":[[13,4]]},"1470":{"position":[[27,4]]}},"content":{"1":{"position":[[1,4]]},"2":{"position":[[30,4]]},"3":{"position":[[325,4]]},"4":{"position":[[246,4]]},"6":{"position":[[29,4],[381,5],[562,4],[640,4]]},"7":{"position":[[226,4]]},"8":{"position":[[29,4],[186,5],[741,4]]},"11":{"position":[[1,4],[239,5],[799,4],[1090,4],[1225,4],[1874,4]]},"12":{"position":[[70,4],[248,4]]},"13":{"position":[[50,4],[96,4],[185,4],[489,5],[1095,4]]},"16":{"position":[[479,4]]},"17":{"position":[[33,4],[1086,4]]},"20":{"position":[[552,4]]},"23":{"position":[[68,6],[94,4]]},"24":{"position":[[47,4]]},"26":{"position":[[187,4],[463,4],[609,5]]},"27":{"position":[[192,4],[455,4]]},"29":{"position":[[60,5]]},"30":{"position":[[5,4],[92,6],[273,4]]},"31":{"position":[[141,5],[218,4]]},"32":{"position":[[49,4],[91,5],[137,4],[194,4],[248,4],[315,4]]},"33":{"position":[[66,6],[190,4],[262,4],[430,6]]},"34":{"position":[[39,5],[416,4]]},"35":{"position":[[16,4],[85,4],[152,5],[207,4]]},"36":{"position":[[24,4],[147,4]]},"37":{"position":[[45,4],[101,4],[280,4]]},"38":{"position":[[45,4],[134,4],[309,4],[523,4]]},"41":{"position":[[20,4],[156,4],[197,4],[526,4]]},"42":{"position":[[7,4],[265,4]]},"43":{"position":[[45,5]]},"44":{"position":[[145,5]]},"46":{"position":[[1,4],[105,4]]},"47":{"position":[[33,4],[115,4]]},"48":{"position":[[44,4]]},"49":{"position":[[229,4]]},"50":{"position":[[1,4],[223,5]]},"53":{"position":[[1,4],[260,4],[438,5],[596,4]]},"54":{"position":[[42,4],[91,4],[143,4],[222,4],[438,5]]},"55":{"position":[[112,4],[762,4]]},"56":{"position":[[25,4],[736,4]]},"58":{"position":[[837,4]]},"60":{"position":[[326,4],[503,6],[694,4]]},"61":{"position":[[85,6]]},"63":{"position":[[1,4],[229,4],[930,4]]},"64":{"position":[[34,4],[189,4],[209,4]]},"66":{"position":[[1,4],[155,4],[251,4],[666,4]]},"67":{"position":[[36,4],[83,5],[638,5],[740,5],[1749,4]]},"68":{"position":[[339,4]]},"69":{"position":[[28,4]]},"70":{"position":[[7,4],[373,4]]},"71":{"position":[[7,4]]},"72":{"position":[[207,4],[425,4]]},"74":{"position":[[28,4],[131,4],[644,5]]},"77":{"position":[[277,4]]},"79":{"position":[[34,5],[289,4]]},"80":{"position":[[5,4],[254,4],[458,4],[664,4]]},"81":{"position":[[214,4],[745,4],[823,4],[957,4],[1546,4],[2384,4]]},"82":{"position":[[215,4],[246,4],[780,4],[1058,4],[1080,4],[1214,4],[2782,4],[2806,4],[3235,4],[3306,4],[3344,4],[4920,4],[4940,4]]},"83":{"position":[[466,4],[777,4],[1053,4]]},"84":{"position":[[884,5],[1300,4],[1337,4]]},"87":{"position":[[79,4]]},"88":{"position":[[1,4]]},"89":{"position":[[58,4]]},"92":{"position":[[249,4]]},"94":{"position":[[1752,4],[2120,4]]},"95":{"position":[[40,4],[265,4]]},"97":{"position":[[87,4]]},"99":{"position":[[817,4]]},"100":{"position":[[1085,4],[1224,4]]},"101":{"position":[[422,4]]},"102":{"position":[[380,4]]},"103":{"position":[[264,4]]},"105":{"position":[[833,5]]},"106":{"position":[[357,4]]},"107":{"position":[[214,4],[393,4],[1137,4],[1532,4],[3380,4],[3668,4],[3858,4]]},"108":{"position":[[287,4]]},"110":{"position":[[856,4],[1324,4]]},"112":{"position":[[780,4],[917,4]]},"113":{"position":[[327,4],[395,4],[780,4]]},"115":{"position":[[190,4],[940,4],[1121,4]]},"117":{"position":[[33,4],[101,4],[459,4],[603,4]]},"119":{"position":[[127,4],[141,4],[231,4],[362,4]]},"120":{"position":[[33,4],[1304,4],[1672,4]]},"121":{"position":[[1,4],[399,4],[502,4],[616,5],[1691,4]]},"122":{"position":[[245,4],[652,4],[2058,5]]},"124":{"position":[[1,4],[253,4],[469,4],[565,4],[796,4]]},"125":{"position":[[403,4],[453,4],[697,4],[757,4],[847,4],[1059,4],[1211,5]]},"135":{"position":[[129,6],[176,4],[266,6]]},"136":{"position":[[61,5],[91,4],[191,4]]},"137":{"position":[[268,5],[425,4],[499,5]]},"138":{"position":[[49,4],[346,4],[1230,7],[1375,4]]},"141":{"position":[[656,4],[1313,7]]},"142":{"position":[[57,4],[459,4],[1207,7],[1376,4]]},"144":{"position":[[596,4]]},"154":{"position":[[1245,4],[1329,4],[1502,4]]},"156":{"position":[[95,4],[135,4]]},"157":{"position":[[46,4],[185,4],[319,4]]},"158":{"position":[[23,4],[101,4]]},"159":{"position":[[316,4],[392,4]]},"160":{"position":[[140,4]]},"161":{"position":[[86,4],[1119,4]]},"163":{"position":[[1,4],[124,4],[460,4],[740,4],[968,4]]},"164":{"position":[[121,4],[412,4],[1310,5]]},"165":{"position":[[1,4],[176,4],[909,4]]},"168":{"position":[[16,4],[134,5],[380,5]]},"169":{"position":[[97,5],[224,4],[1405,4]]},"170":{"position":[[5,4]]},"171":{"position":[[30,4],[91,5],[222,4]]},"172":{"position":[[30,4],[90,5]]},"173":{"position":[[30,4],[191,5],[572,4]]},"174":{"position":[[545,4]]},"175":{"position":[[5,4],[93,4],[294,4]]},"176":{"position":[[13,4],[76,5],[126,4],[138,4],[177,4],[254,4]]},"177":{"position":[[0,4],[15,4],[90,4],[220,6],[250,4]]},"179":{"position":[[12,4],[59,4],[220,5],[507,5]]},"180":{"position":[[368,4]]},"182":{"position":[[37,4],[505,4]]},"183":{"position":[[86,4],[2634,4],[2885,4]]},"184":{"position":[[161,4]]},"188":{"position":[[26,4],[73,4]]},"189":{"position":[[703,4],[734,4],[892,5],[910,5],[932,5],[1005,4],[1174,4],[1613,4],[1692,4]]},"190":{"position":[[11,4],[455,4],[651,4],[1511,4],[1536,4],[1678,5],[1889,4],[2096,4]]},"191":{"position":[[33,4],[102,4],[2253,5],[2274,4]]},"192":{"position":[[1325,4],[1508,4],[1749,4],[1958,4],[2251,4]]},"193":{"position":[[32,4],[564,4],[745,5]]},"199":{"position":[[75,4]]},"200":{"position":[[32,5]]},"202":{"position":[[307,4]]},"204":{"position":[[229,4],[348,4],[933,4]]},"205":{"position":[[360,5]]},"206":{"position":[[735,4],[875,4],[1126,5]]},"207":{"position":[[103,5],[132,5],[672,4],[799,4]]},"208":{"position":[[418,5],[458,4],[992,4]]},"209":{"position":[[95,4]]},"210":{"position":[[158,4],[252,4],[3951,4]]},"211":{"position":[[92,5],[792,4]]},"213":{"position":[[0,4],[95,4],[160,5],[321,4],[520,4]]},"215":{"position":[[32,4]]},"216":{"position":[[12,5],[34,5],[107,4],[461,4],[613,5]]},"217":{"position":[[122,5],[189,4],[957,4]]},"218":{"position":[[531,4],[874,5],[880,4],[1727,4],[2150,4]]},"219":{"position":[[42,5],[139,4],[196,5]]},"228":{"position":[[107,4],[993,4]]},"230":{"position":[[595,4]]},"232":{"position":[[100,5],[510,4],[931,4]]},"234":{"position":[[243,4],[506,4]]},"236":{"position":[[150,4],[2822,4],[3763,4]]},"237":{"position":[[3592,4]]},"238":{"position":[[641,4]]},"239":{"position":[[86,4],[197,4],[251,4],[604,4],[663,4],[735,5],[1095,4],[1253,4],[1477,4],[1901,4],[2112,5],[2690,4]]},"240":{"position":[[101,4],[189,4],[237,4],[2332,5],[2384,4],[2456,5],[3796,4],[4606,4],[4666,4]]},"241":{"position":[[106,5]]},"242":{"position":[[97,5],[885,4]]},"245":{"position":[[47,5]]},"246":{"position":[[39,4],[160,4]]},"247":{"position":[[23,4]]},"250":{"position":[[1206,4]]},"252":{"position":[[116,4]]},"253":{"position":[[168,4],[297,4]]},"254":{"position":[[878,4],[2195,4],[2408,4],[3087,4],[3218,4]]},"255":{"position":[[912,5]]},"257":{"position":[[83,4],[130,4]]},"259":{"position":[[959,4],[1044,5],[1195,4],[2540,4],[2625,5],[2776,4]]},"263":{"position":[[40,4]]},"264":{"position":[[198,4],[686,4]]},"266":{"position":[[3,4],[129,4],[198,4],[269,5],[397,5]]},"267":{"position":[[94,4],[145,5],[1849,5],[1931,5]]},"268":{"position":[[2116,4]]},"269":{"position":[[1578,4]]},"270":{"position":[[2194,4]]},"273":{"position":[[106,4]]},"274":{"position":[[133,4],[174,4]]},"275":{"position":[[220,4],[521,4]]},"277":{"position":[[836,4]]},"278":{"position":[[1741,5]]},"279":{"position":[[496,4]]},"280":{"position":[[87,5],[832,5],[886,4],[926,4],[963,5]]},"281":{"position":[[1835,4],[2931,5]]},"285":{"position":[[77,4]]},"286":{"position":[[21,5],[76,4],[287,5],[326,4]]},"288":{"position":[[56,4],[85,4],[855,5]]},"289":{"position":[[12,5],[34,5],[288,4],[426,4],[684,5]]},"290":{"position":[[91,4],[166,4],[778,4],[1116,4],[1253,4]]},"291":{"position":[[579,4],[1660,4],[1960,4]]},"292":{"position":[[11,4],[200,4]]},"294":{"position":[[123,4]]},"295":{"position":[[1038,5],[1421,5],[1597,4],[1721,4]]},"296":{"position":[[1795,4],[2961,4],[3197,4],[6707,4],[6898,4],[7783,5]]},"299":{"position":[[56,4],[85,4],[770,5]]},"300":{"position":[[12,5],[34,5],[267,4],[380,4],[624,5]]},"301":{"position":[[90,4],[119,4],[1325,4],[1447,4]]},"302":{"position":[[579,4],[1569,4],[1872,4]]},"303":{"position":[[11,4],[191,4]]},"305":{"position":[[1,4],[292,6]]},"307":{"position":[[94,4],[514,4],[977,4]]},"308":{"position":[[822,4]]},"309":{"position":[[1453,4],[2056,4]]},"312":{"position":[[123,4]]},"313":{"position":[[168,4],[297,4]]},"314":{"position":[[556,4],[1736,4],[1949,4],[2662,4],[2793,4]]},"316":{"position":[[1237,5]]},"319":{"position":[[305,5],[331,4],[541,4],[549,5],[824,4],[887,4],[1287,4]]},"320":{"position":[[1,4],[143,4],[228,4],[338,4],[492,4],[735,4],[1140,4],[1421,4],[1506,4],[1591,4],[1908,4],[2125,4],[2216,5],[2346,4],[2416,4]]},"321":{"position":[[80,4],[194,4],[491,4],[807,4],[1158,5],[1453,4],[1470,5],[1483,4],[1508,4],[1571,5],[1767,4],[1782,5],[1951,5],[2019,4],[2084,4],[2235,4]]},"322":{"position":[[134,5],[248,5],[632,4],[684,5],[802,4],[855,4],[1008,4],[1354,5],[1543,4],[1704,4]]},"323":{"position":[[237,4],[386,5],[567,4],[660,4],[982,4],[1249,4],[1356,4],[1449,5],[1477,4],[1647,4],[1833,5],[1939,4],[2034,4]]},"324":{"position":[[367,4],[538,4],[735,4],[866,4],[1017,4],[1168,4]]},"325":{"position":[[235,5],[272,4],[461,4],[544,4],[573,4],[801,5]]},"326":{"position":[[1,4],[70,4],[133,4],[226,4],[419,4],[604,4],[945,5],[1250,4],[1412,4],[1562,4],[1657,4]]},"328":{"position":[[14,4]]},"329":{"position":[[6,5],[350,4],[823,4]]},"330":{"position":[[1,4],[469,4]]},"331":{"position":[[6,5],[127,4],[283,4],[462,4]]},"332":{"position":[[1,4],[292,4],[364,4],[802,6]]},"333":{"position":[[5,4],[309,5],[474,4]]},"335":{"position":[[126,5]]},"338":{"position":[[31,5]]},"339":{"position":[[51,4]]},"340":{"position":[[265,4]]},"349":{"position":[[23,4]]},"350":{"position":[[40,4]]},"358":{"position":[[40,4]]},"364":{"position":[[169,5],[356,6],[471,4]]},"368":{"position":[[310,5]]},"369":{"position":[[40,4]]},"374":{"position":[[83,4],[277,4]]},"376":{"position":[[40,4]]},"379":{"position":[[723,5],[867,4]]},"381":{"position":[[581,4]]},"382":{"position":[[80,4]]},"386":{"position":[[40,4]]},"387":{"position":[[113,4]]},"391":{"position":[[40,4]]},"396":{"position":[[40,4]]},"401":{"position":[[68,4],[108,4]]},"407":{"position":[[40,4]]},"415":{"position":[[271,5]]},"416":{"position":[[40,4]]},"419":{"position":[[137,4],[1079,4],[1489,4]]},"421":{"position":[[180,4]]},"423":{"position":[[40,4]]},"427":{"position":[[64,4],[168,4]]},"429":{"position":[[446,4]]},"430":{"position":[[297,4]]},"431":{"position":[[40,4]]},"437":{"position":[[40,4]]},"440":{"position":[[153,4],[1095,4]]},"441":{"position":[[98,4]]},"443":{"position":[[539,4]]},"444":{"position":[[83,4]]},"447":{"position":[[40,4]]},"448":{"position":[[113,4]]},"451":{"position":[[189,4]]},"453":{"position":[[40,4]]},"457":{"position":[[193,4]]},"459":{"position":[[40,4]]},"463":{"position":[[299,4]]},"465":{"position":[[40,4]]},"470":{"position":[[62,4]]},"472":{"position":[[40,4],[447,4],[470,4]]},"478":{"position":[[308,4],[635,4]]},"479":{"position":[[23,4]]},"480":{"position":[[138,4]]},"481":{"position":[[40,4]]},"485":{"position":[[298,4],[518,5]]},"486":{"position":[[354,4]]},"488":{"position":[[61,4]]},"495":{"position":[[40,4]]},"496":{"position":[[608,4]]},"499":{"position":[[98,4],[269,4]]},"500":{"position":[[116,4]]},"501":{"position":[[51,4]]},"504":{"position":[[74,4],[1118,4]]},"506":{"position":[[456,4]]},"508":{"position":[[40,4]]},"512":{"position":[[216,4]]},"513":{"position":[[75,5],[217,4]]},"514":{"position":[[22,4]]},"516":{"position":[[40,4]]},"521":{"position":[[369,4]]},"522":{"position":[[73,5],[218,4]]},"525":{"position":[[40,4]]},"529":{"position":[[748,4]]},"530":{"position":[[73,5],[218,4]]},"533":{"position":[[40,4]]},"534":{"position":[[113,4]]},"537":{"position":[[205,4]]},"539":{"position":[[40,4]]},"544":{"position":[[40,4]]},"547":{"position":[[138,4],[1080,4],[1491,4]]},"548":{"position":[[323,4],[533,4]]},"550":{"position":[[453,4]]},"551":{"position":[[73,5],[216,4]]},"555":{"position":[[40,4],[81,4]]},"556":{"position":[[113,4]]},"558":{"position":[[131,4]]},"563":{"position":[[69,4],[100,4]]},"568":{"position":[[46,4],[263,4]]},"569":{"position":[[235,4]]},"572":{"position":[[40,4]]},"573":{"position":[[117,4]]},"574":{"position":[[649,5]]},"580":{"position":[[205,4]]},"581":{"position":[[381,4]]},"583":{"position":[[40,4]]},"584":{"position":[[127,4]]},"590":{"position":[[822,4],[957,4]]},"592":{"position":[[40,4],[81,4]]},"595":{"position":[[945,5]]},"599":{"position":[[308,4],[635,4]]},"600":{"position":[[40,4]]},"602":{"position":[[94,4],[398,4],[627,4]]},"605":{"position":[[411,4]]},"606":{"position":[[350,4]]},"607":{"position":[[234,4]]},"608":{"position":[[197,4]]},"610":{"position":[[40,4]]},"611":{"position":[[113,4]]},"614":{"position":[[218,4]]},"616":{"position":[[517,4]]},"618":{"position":[[40,4]]},"622":{"position":[[417,4]]},"623":{"position":[[118,4]]},"624":{"position":[[40,4]]},"628":{"position":[[481,4]]},"630":{"position":[[40,4]]},"634":{"position":[[90,4],[261,4]]},"636":{"position":[[40,4]]},"639":{"position":[[73,4],[1116,4]]},"643":{"position":[[192,4]]},"646":{"position":[[40,4]]},"649":{"position":[[79,4]]},"650":{"position":[[191,4]]},"653":{"position":[[40,4]]},"657":{"position":[[298,4],[703,5]]},"658":{"position":[[354,4]]},"659":{"position":[[218,4]]},"667":{"position":[[266,4]]},"669":{"position":[[40,4]]},"673":{"position":[[298,4],[518,5]]},"674":{"position":[[354,4]]},"676":{"position":[[61,4]]},"682":{"position":[[237,4]]},"683":{"position":[[59,4]]},"684":{"position":[[40,4]]},"685":{"position":[[98,4]]},"688":{"position":[[298,4],[518,5]]},"689":{"position":[[354,4]]},"690":{"position":[[214,5]]},"691":{"position":[[61,4]]},"697":{"position":[[606,4]]},"699":{"position":[[40,4]]},"703":{"position":[[171,4]]},"705":{"position":[[40,4]]},"709":{"position":[[859,4]]},"711":{"position":[[40,4]]},"715":{"position":[[228,4]]},"716":{"position":[[75,5],[218,4]]},"719":{"position":[[40,4]]},"720":{"position":[[113,4]]},"727":{"position":[[40,4]]},"731":{"position":[[189,4]]},"734":{"position":[[40,4]]},"738":{"position":[[783,4]]},"740":{"position":[[40,4]]},"744":{"position":[[173,4]]},"746":{"position":[[40,4]]},"752":{"position":[[228,5]]},"753":{"position":[[172,4],[249,4],[884,5]]},"754":{"position":[[73,4],[303,4]]},"755":{"position":[[310,5]]},"756":{"position":[[40,4]]},"767":{"position":[[52,4],[395,4],[1864,5]]},"768":{"position":[[310,5]]},"769":{"position":[[40,4]]},"781":{"position":[[40,4],[81,4]]},"791":{"position":[[181,5],[665,4]]},"792":{"position":[[238,5],[708,4],[1804,5],[1985,4]]},"793":{"position":[[52,5],[243,4],[855,5],[1339,4]]},"794":{"position":[[176,4]]},"795":{"position":[[308,5]]},"796":{"position":[[40,4]]},"805":{"position":[[7,4]]},"808":{"position":[[52,5],[232,4],[801,5],[1285,4]]},"809":{"position":[[176,4]]},"810":{"position":[[308,5]]},"811":{"position":[[40,4]]},"820":{"position":[[7,4]]},"821":{"position":[[73,4]]},"824":{"position":[[52,5],[500,4],[1926,5],[2107,4]]},"825":{"position":[[176,4]]},"826":{"position":[[308,5]]},"827":{"position":[[40,4]]},"836":{"position":[[7,4]]},"838":{"position":[[1,4]]},"840":{"position":[[200,5],[883,5],[1605,5],[1709,5],[2501,5]]},"841":{"position":[[40,4]]},"849":{"position":[[143,5],[1496,5],[2750,5],[3641,5]]},"850":{"position":[[40,4]]},"854":{"position":[[122,4]]},"855":{"position":[[97,5]]},"858":{"position":[[40,4]]},"859":{"position":[[113,4]]},"862":{"position":[[51,4],[149,4]]},"864":{"position":[[1717,5]]},"865":{"position":[[64,4]]},"866":{"position":[[40,4]]},"874":{"position":[[51,4],[149,4]]},"876":{"position":[[977,5]]},"877":{"position":[[64,4]]},"878":{"position":[[40,4]]},"882":{"position":[[133,4]]},"884":{"position":[[40,4]]},"888":{"position":[[188,4]]},"890":{"position":[[40,4]]},"895":{"position":[[89,4]]},"896":{"position":[[40,4]]},"904":{"position":[[52,5],[499,4]]},"905":{"position":[[313,5]]},"906":{"position":[[40,4]]},"907":{"position":[[1764,5]]},"909":{"position":[[814,4],[1030,5],[1095,5]]},"912":{"position":[[81,4]]},"918":{"position":[[238,5],[708,4]]},"919":{"position":[[52,5],[243,4]]},"920":{"position":[[313,5]]},"921":{"position":[[40,4]]},"922":{"position":[[2611,4]]},"923":{"position":[[1764,5]]},"925":{"position":[[814,4],[1030,5],[1095,5]]},"931":{"position":[[52,5],[236,4]]},"932":{"position":[[313,5]]},"933":{"position":[[40,4]]},"936":{"position":[[814,4],[1030,5],[1095,5]]},"940":{"position":[[12,4]]},"945":{"position":[[118,5],[639,4]]},"946":{"position":[[188,4],[271,4]]},"947":{"position":[[16,4],[956,4]]},"948":{"position":[[313,5]]},"949":{"position":[[40,4]]},"952":{"position":[[814,4],[1030,5],[1095,5]]},"956":{"position":[[209,4]]},"958":{"position":[[40,4]]},"966":{"position":[[313,5]]},"967":{"position":[[40,4]]},"968":{"position":[[1764,5]]},"970":{"position":[[814,4],[1030,5],[1095,5]]},"974":{"position":[[218,4]]},"975":{"position":[[88,4]]},"976":{"position":[[91,4],[424,4]]},"977":{"position":[[278,4]]},"979":{"position":[[283,4]]},"981":{"position":[[40,4]]},"987":{"position":[[21,4]]},"989":{"position":[[126,4],[375,5],[519,5],[1250,5]]},"990":{"position":[[40,4]]},"991":{"position":[[113,4]]},"994":{"position":[[141,4]]},"996":{"position":[[40,4]]},"1002":{"position":[[21,4]]},"1004":{"position":[[126,4],[458,5],[602,5],[1333,5]]},"1005":{"position":[[40,4],[81,4]]},"1008":{"position":[[2022,5]]},"1009":{"position":[[113,4]]},"1012":{"position":[[268,4]]},"1014":{"position":[[40,4]]},"1018":{"position":[[73,4]]},"1021":{"position":[[40,4]]},"1023":{"position":[[118,4],[1060,4],[1472,4]]},"1025":{"position":[[415,4]]},"1027":{"position":[[40,4]]},"1033":{"position":[[44,4]]},"1034":{"position":[[774,4],[806,4]]},"1036":{"position":[[224,4]]},"1040":{"position":[[253,4]]},"1042":{"position":[[1131,4]]},"1043":{"position":[[52,5],[243,4]]},"1044":{"position":[[40,4]]},"1047":{"position":[[7,4],[457,4]]},"1050":{"position":[[253,4]]},"1051":{"position":[[52,5],[499,4]]},"1052":{"position":[[40,4]]},"1055":{"position":[[7,4],[457,4]]},"1058":{"position":[[253,4]]},"1059":{"position":[[52,5],[236,4]]},"1060":{"position":[[40,4]]},"1063":{"position":[[7,4],[457,4]]},"1065":{"position":[[140,4]]},"1066":{"position":[[71,5]]},"1067":{"position":[[310,5]]},"1069":{"position":[[40,4]]},"1070":{"position":[[113,4]]},"1073":{"position":[[392,4]]},"1075":{"position":[[40,4]]},"1080":{"position":[[849,4]]},"1081":{"position":[[134,4]]},"1082":{"position":[[71,4]]},"1084":{"position":[[40,4]]},"1085":{"position":[[188,4]]},"1092":{"position":[[23,4]]},"1093":{"position":[[40,4]]},"1096":{"position":[[45,4]]},"1099":{"position":[[513,4]]},"1100":{"position":[[40,4]]},"1104":{"position":[[211,4]]},"1106":{"position":[[40,4]]},"1110":{"position":[[531,4]]},"1112":{"position":[[40,4]]},"1118":{"position":[[91,4],[1152,4]]},"1124":{"position":[[40,4]]},"1128":{"position":[[448,4]]},"1129":{"position":[[92,5]]},"1132":{"position":[[40,4]]},"1137":{"position":[[55,4],[176,4]]},"1139":{"position":[[171,4],[182,4]]},"1140":{"position":[[99,4],[293,4]]},"1143":{"position":[[98,4]]},"1147":{"position":[[172,4]]},"1150":{"position":[[113,4]]},"1154":{"position":[[160,4]]},"1155":{"position":[[181,4]]},"1161":{"position":[[98,4]]},"1164":{"position":[[1,4],[154,4],[544,4]]},"1169":{"position":[[98,4]]},"1172":{"position":[[1,4]]},"1174":{"position":[[172,4]]},"1178":{"position":[[55,4],[177,4]]},"1182":{"position":[[143,4]]},"1183":{"position":[[62,4]]},"1185":{"position":[[259,4]]},"1187":{"position":[[55,4],[179,4]]},"1189":{"position":[[428,4]]},"1191":{"position":[[143,4]]},"1192":{"position":[[99,4]]},"1194":{"position":[[469,4]]},"1195":{"position":[[55,4],[185,4]]},"1197":{"position":[[434,4]]},"1203":{"position":[[630,4]]},"1205":{"position":[[55,4],[157,4]]},"1207":{"position":[[517,4]]},"1212":{"position":[[98,4]]},"1216":{"position":[[172,4]]},"1219":{"position":[[98,4]]},"1222":{"position":[[1,4]]},"1224":{"position":[[172,4]]},"1226":{"position":[[188,4],[254,4]]},"1227":{"position":[[70,4]]},"1229":{"position":[[55,4],[189,4]]},"1232":{"position":[[30,4],[340,4]]},"1234":{"position":[[138,4]]},"1236":{"position":[[154,4]]},"1237":{"position":[[52,4]]},"1243":{"position":[[51,4],[721,4],[832,4]]},"1246":{"position":[[55,4]]},"1247":{"position":[[104,4]]},"1248":{"position":[[461,4]]},"1252":{"position":[[40,4],[81,4]]},"1259":{"position":[[105,4]]},"1262":{"position":[[143,4]]},"1264":{"position":[[144,4]]},"1265":{"position":[[28,4]]},"1270":{"position":[[135,4],[187,4]]},"1279":{"position":[[145,4],[390,4]]},"1281":{"position":[[430,4]]},"1283":{"position":[[279,4]]},"1284":{"position":[[55,4],[174,4]]},"1286":{"position":[[205,4]]},"1287":{"position":[[126,4],[165,4],[176,4]]},"1289":{"position":[[681,4]]},"1292":{"position":[[94,4],[222,4]]},"1295":{"position":[[430,4]]},"1297":{"position":[[55,4]]},"1299":{"position":[[55,4],[174,4]]},"1301":{"position":[[205,4]]},"1302":{"position":[[126,4],[165,4],[176,4]]},"1303":{"position":[[52,5],[236,4],[1509,4]]},"1306":{"position":[[94,4],[222,4]]},"1309":{"position":[[248,4]]},"1311":{"position":[[115,4]]},"1312":{"position":[[55,4],[177,4]]},"1313":{"position":[[1514,5]]},"1314":{"position":[[129,4],[168,4],[179,4]]},"1316":{"position":[[99,4],[293,4]]},"1317":{"position":[[590,4]]},"1319":{"position":[[430,4]]},"1321":{"position":[[362,4]]},"1323":{"position":[[55,4],[174,4]]},"1325":{"position":[[205,4]]},"1326":{"position":[[126,4],[165,4],[176,4]]},"1329":{"position":[[94,4],[222,4]]},"1332":{"position":[[248,4]]},"1334":{"position":[[450,4]]},"1336":{"position":[[55,4],[177,4]]},"1337":{"position":[[1514,5]]},"1338":{"position":[[129,4],[168,4],[179,4]]},"1340":{"position":[[99,4],[293,4]]},"1341":{"position":[[590,4]]},"1343":{"position":[[248,4]]},"1345":{"position":[[55,4]]},"1347":{"position":[[55,4],[177,4]]},"1349":{"position":[[129,4],[168,4],[179,4]]},"1351":{"position":[[99,4],[293,4]]},"1352":{"position":[[590,4]]},"1354":{"position":[[294,4]]},"1355":{"position":[[55,4],[176,4]]},"1357":{"position":[[366,4]]},"1358":{"position":[[97,5],[308,4],[410,4],[524,4],[696,4]]},"1361":{"position":[[178,4]]},"1362":{"position":[[49,4],[543,4]]},"1365":{"position":[[51,4]]},"1370":{"position":[[95,4],[285,4]]},"1372":{"position":[[293,4]]},"1373":{"position":[[52,5],[481,4]]},"1374":{"position":[[52,5],[481,4]]},"1375":{"position":[[55,4],[178,4]]},"1377":{"position":[[130,4],[169,4],[180,4]]},"1379":{"position":[[98,4],[230,4]]},"1382":{"position":[[513,4]]},"1385":{"position":[[55,4],[178,4]]},"1387":{"position":[[467,4],[1093,4]]},"1389":{"position":[[143,4]]},"1393":{"position":[[1,4],[222,4],[256,4]]},"1394":{"position":[[98,4]]},"1396":{"position":[[293,4]]},"1397":{"position":[[52,5],[233,4]]},"1398":{"position":[[52,5],[232,4]]},"1399":{"position":[[55,4],[178,4]]},"1401":{"position":[[130,4],[169,4],[180,4]]},"1403":{"position":[[98,4],[230,4]]},"1406":{"position":[[293,4]]},"1408":{"position":[[404,4]]},"1409":{"position":[[52,5],[243,4]]},"1410":{"position":[[55,4],[178,4]]},"1412":{"position":[[130,4],[169,4],[180,4]]},"1414":{"position":[[98,4],[230,4]]},"1417":{"position":[[450,4]]},"1419":{"position":[[55,4],[178,4]]},"1421":{"position":[[454,4]]},"1423":{"position":[[105,4]]},"1425":{"position":[[252,4]]},"1426":{"position":[[55,4],[180,4]]},"1428":{"position":[[132,4],[209,4],[220,4]]},"1429":{"position":[[588,4]]},"1431":{"position":[[122,4],[316,4]]},"1432":{"position":[[590,4]]},"1435":{"position":[[328,4]]},"1437":{"position":[[90,4],[223,4],[385,4],[567,4]]},"1438":{"position":[[58,4]]},"1439":{"position":[[968,4],[1750,4]]},"1440":{"position":[[77,4],[179,4],[578,4]]},"1442":{"position":[[1037,4]]},"1446":{"position":[[8,4]]},"1447":{"position":[[184,4],[409,4]]},"1451":{"position":[[9,4],[895,4]]},"1453":{"position":[[129,4]]},"1459":{"position":[[4,5],[351,4],[541,4],[742,4],[880,4]]},"1461":{"position":[[963,5],[2709,4],[4364,4]]},"1462":{"position":[[7,4],[81,4],[94,4],[747,4]]},"1469":{"position":[[43,4]]},"1470":{"position":[[74,4],[930,4]]},"1471":{"position":[[235,4]]},"1474":{"position":[[399,4]]},"1475":{"position":[[181,4]]},"1477":{"position":[[1337,4],[3503,4]]},"1479":{"position":[[8,4]]},"1480":{"position":[[50,4],[1010,4],[1378,4]]}},"keywords":{}}],["flow'",{"_index":325,"title":{},"content":{"11":{"position":[[1133,6]]},"26":{"position":[[417,6]]},"27":{"position":[[691,6]]},"31":{"position":[[54,6]]},"63":{"position":[[783,6]]},"64":{"position":[[344,6]]},"80":{"position":[[160,6]]},"95":{"position":[[210,6]]},"96":{"position":[[1,6]]},"101":{"position":[[239,6]]},"102":{"position":[[1,6]]},"115":{"position":[[1615,6]]},"125":{"position":[[21,6],[599,6]]},"162":{"position":[[892,6]]},"163":{"position":[[267,6]]},"168":{"position":[[162,6],[225,6]]},"170":{"position":[[36,6]]},"189":{"position":[[1738,6]]},"215":{"position":[[66,6]]},"230":{"position":[[985,6]]},"232":{"position":[[217,6]]},"239":{"position":[[2017,6]]},"271":{"position":[[338,6]]},"277":{"position":[[898,6]]},"291":{"position":[[1475,6]]},"302":{"position":[[1395,6]]},"322":{"position":[[169,6]]},"429":{"position":[[144,6]]},"792":{"position":[[304,6]]},"793":{"position":[[118,6]]},"808":{"position":[[118,6]]},"824":{"position":[[118,6]]},"904":{"position":[[118,6]]},"918":{"position":[[304,6]]},"919":{"position":[[118,6]]},"931":{"position":[[118,6]]},"946":{"position":[[146,6]]},"1043":{"position":[[118,6]]},"1051":{"position":[[118,6]]},"1059":{"position":[[118,6]]},"1283":{"position":[[129,6]]},"1289":{"position":[[129,6]]},"1303":{"position":[[118,6]]},"1320":{"position":[[129,6]]},"1333":{"position":[[129,6]]},"1344":{"position":[[129,6]]},"1373":{"position":[[118,6]]},"1374":{"position":[[118,6]]},"1397":{"position":[[118,6]]},"1398":{"position":[[118,6]]},"1409":{"position":[[118,6]]},"1435":{"position":[[748,6]]},"1461":{"position":[[1,6]]},"1473":{"position":[[269,6]]}},"keywords":{}}],["flow,"",{"_index":4374,"title":{},"content":{"645":{"position":[[329,11]]},"652":{"position":[[329,11]]}},"keywords":{}}],["flow.definit",{"_index":1009,"title":{},"content":{"67":{"position":[[1021,16]]}},"keywords":{}}],["flow.json",{"_index":1477,"title":{},"content":{"103":{"position":[[631,9]]}},"keywords":{}}],["flow.t",{"_index":6601,"title":{},"content":{"1461":{"position":[[1227,7],[1318,7],[1387,7],[1457,7]]}},"keywords":{}}],["flow.watermark",{"_index":4593,"title":{},"content":{"752":{"position":[[261,15],[827,15]]},"753":{"position":[[917,15],[1483,15]]},"767":{"position":[[1897,15],[2160,15]]},"791":{"position":[[214,15],[832,15]]},"792":{"position":[[1837,15],[2152,15]]},"793":{"position":[[888,15],[1506,15]]},"808":{"position":[[834,15],[1452,15]]},"824":{"position":[[1959,15],[2274,15]]}},"keywords":{}}],["flow.yaml",{"_index":610,"title":{},"content":{"26":{"position":[[329,11],[361,9]]},"62":{"position":[[679,9],[749,9]]},"63":{"position":[[167,10]]},"103":{"position":[[618,9]]},"183":{"position":[[960,9],[1083,9],[4086,9],[4492,9]]},"254":{"position":[[158,9],[187,9],[1275,9]]},"255":{"position":[[172,9],[1146,9]]},"263":{"position":[[1029,9]]},"264":{"position":[[387,10],[424,9]]},"267":{"position":[[1350,9],[1502,9]]},"268":{"position":[[100,9],[701,9],[1820,9],[1930,9]]},"269":{"position":[[107,9],[326,9],[1277,9],[1392,9]]},"270":{"position":[[979,9],[1131,9],[1262,9],[1690,9],[1766,9],[1890,9],[2008,9]]},"274":{"position":[[1874,9]]},"275":{"position":[[408,9],[458,9],[712,9],[776,9]]},"296":{"position":[[158,9],[187,9],[3760,9],[3876,9],[6834,9]]},"307":{"position":[[855,9]]},"314":{"position":[[158,9],[187,9],[1381,9]]},"315":{"position":[[178,9],[333,9]]},"316":{"position":[[174,9],[1471,9]]},"1008":{"position":[[1937,9]]},"1461":{"position":[[1197,9],[1241,9],[1289,9],[1334,9],[1401,9],[1469,9],[1813,12]]}},"keywords":{}}],["flow.yamlschema.yaml",{"_index":1054,"title":{},"content":{"71":{"position":[[165,20]]},"73":{"position":[[145,20]]}},"keywords":{}}],["flow.yamlschemas.yaml",{"_index":1897,"title":{},"content":{"161":{"position":[[593,21]]}},"keywords":{}}],["flow.yamlus",{"_index":2082,"title":{},"content":{"183":{"position":[[3461,13]]}},"keywords":{}}],["flow/acmebank/balances.t",{"_index":2888,"title":{},"content":{"281":{"position":[[1276,28]]}},"keywords":{}}],["flow/dani/deriv",{"_index":3079,"title":{},"content":{"315":{"position":[[1372,21]]}},"keywords":{}}],["flow/dani/join",{"_index":3014,"title":{},"content":{"296":{"position":[[5288,15],[5940,15]]}},"keywords":{}}],["flow://inf",{"_index":1961,"title":{},"content":{"165":{"position":[[1132,15],[1337,15],[1541,15],[1829,15]]},"207":{"position":[[1033,15],[1237,15]]}},"keywords":{}}],["flow://writ",{"_index":1960,"title":{},"content":{"165":{"position":[[1104,12],[1462,12],[1595,12]]},"207":{"position":[[1005,12]]}},"keywords":{}}],["flow_captur",{"_index":2518,"title":{},"content":{"236":{"position":[[957,12],[2869,12],[2944,13],[3467,13]]},"237":{"position":[[289,12],[655,13],[718,12],[1589,13],[1609,12]]},"367":{"position":[[359,12],[486,13],[568,13],[729,13]]},"752":{"position":[[334,12],[650,12],[740,15],[779,15],[846,15]]},"753":{"position":[[990,12],[1306,12],[1396,15],[1435,15],[1502,15]]},"767":{"position":[[1983,12],[2073,15],[2112,15],[2179,15]]},"791":{"position":[[287,12],[603,12],[745,15],[784,15],[851,15]]},"792":{"position":[[1923,12],[2065,15],[2104,15],[2171,15]]},"793":{"position":[[961,12],[1277,12],[1419,15],[1458,15],[1525,15]]},"808":{"position":[[907,12],[1223,12],[1365,15],[1404,15],[1471,15]]},"824":{"position":[[2045,12],[2187,15],[2226,15],[2293,15]]},"904":{"position":[[1463,12],[1525,13],[1586,13],[1668,13],[1829,13]]},"917":{"position":[[325,12],[465,13],[576,13],[659,13],[744,13],[1338,13]]},"918":{"position":[[1755,12],[1817,13],[1878,13],[1960,13],[2121,13]]},"919":{"position":[[888,12],[1000,13],[1113,13],[1190,13],[1275,13],[1759,13],[1836,13],[2015,13],[2176,13]]},"931":{"position":[[1120,12],[1248,13],[1330,13],[1491,13]]},"965":{"position":[[325,12],[465,13],[576,13],[659,13],[744,13],[1338,13]]},"1042":{"position":[[208,12],[259,12],[282,13],[562,13],[609,13],[808,13],[1078,15]]},"1043":{"position":[[872,12],[923,12],[946,13],[1226,13],[1273,13],[1472,13],[1742,15]]},"1051":{"position":[[1134,12],[1185,12],[1208,13],[1488,13],[1535,13],[1734,13],[2004,15]]},"1059":{"position":[[923,12],[978,12],[1001,13],[1281,13],[1328,13],[1527,13],[1797,15]]}},"keywords":{}}],["flow_capture@myazuredb",{"_index":5050,"title":{},"content":{"919":{"position":[[2691,23]]}},"keywords":{}}],["flow_docu",{"_index":5950,"title":{},"content":{"1276":{"position":[[213,13],[440,13]]}},"keywords":{}}],["flow_gener",{"_index":942,"title":{},"content":{"63":{"position":[[374,16]]},"64":{"position":[[315,15]]},"296":{"position":[[3890,14],[4082,14]]},"315":{"position":[[347,14],[561,14]]}},"keywords":{}}],["flow_generated/typescript/<your_working_directory>/<your_prefix>/customers_with_orders.t",{"_index":3008,"title":{},"content":{"296":{"position":[[4245,101]]}},"keywords":{}}],["flow_generated/typescript/<your_working_directory>/<your_prefix>/recentchang",{"_index":3077,"title":{},"content":{"315":{"position":[[724,89]]}},"keywords":{}}],["flow_materi",{"_index":6252,"title":{},"content":{"1303":{"position":[[1270,16],[1387,21],[1443,16],[1589,19]]},"1373":{"position":[[1051,16],[1106,16],[1133,17],[1187,16],[1251,17]]},"1374":{"position":[[1051,16],[1110,16],[1137,17],[1191,16],[1255,17]]},"1397":{"position":[[830,16],[885,16],[912,17],[966,16],[1030,17]]},"1398":{"position":[[829,16],[888,16],[915,17],[969,16],[1033,17]]},"1408":{"position":[[149,16],[204,16],[231,17],[285,16],[349,17]]},"1409":{"position":[[813,16],[868,16],[895,17],[949,16],[1013,17]]}},"keywords":{}}],["flow_publ",{"_index":2565,"title":{},"content":{"236":{"position":[[3500,17],[3536,16],[3612,16]]},"237":{"position":[[1772,17],[1808,16],[1884,16],[2044,16],[2167,16]]},"367":{"position":[[762,16]]},"904":{"position":[[1862,17],[1898,16],[1974,16]]},"911":{"position":[[266,16]]},"917":{"position":[[1371,17],[1407,16],[1483,16]]},"918":{"position":[[2154,17],[2190,16],[2266,16]]},"919":{"position":[[2209,17],[2245,16],[2321,16]]},"927":{"position":[[266,16]]},"931":{"position":[[1524,17],[1560,16],[1636,16]]},"938":{"position":[[266,16]]},"945":{"position":[[144,16],[215,16]]},"954":{"position":[[266,16]]},"965":{"position":[[1371,17],[1407,16],[1483,16]]},"972":{"position":[[266,16]]}},"keywords":{}}],["flow_published_at",{"_index":1003,"title":{},"content":{"67":{"position":[[645,18],[669,17],[946,17],[1276,17],[1445,17],[1809,17],[2022,17]]}},"keywords":{}}],["flow_us",{"_index":1225,"title":{},"content":{"83":{"position":[[1064,9]]},"1197":{"position":[[294,9]]}},"keywords":{}}],["flow_watermark",{"_index":2571,"title":{},"content":{"237":{"position":[[1353,15],[1656,15]]},"238":{"position":[[1109,15]]},"1042":{"position":[[1046,18]]},"1043":{"position":[[1710,18]]},"1051":{"position":[[1972,18]]},"1059":{"position":[[1765,18]]}},"keywords":{}}],["flowctl",{"_index":599,"title":{"26":{"position":[[5,8]]},"31":{"position":[[0,8]]},"57":{"position":[[0,7]]},"60":{"position":[[0,7]]},"61":{"position":[[24,8]]},"81":{"position":[[11,8]]},"257":{"position":[[0,7]]},"265":{"position":[[25,7]]},"282":{"position":[[25,7]]}},"content":{"26":{"position":[[121,8]]},"29":{"position":[[132,7]]},"31":{"position":[[1,7],[79,8],[254,7],[338,7]]},"58":{"position":[[1,7],[258,8],[759,7]]},"59":{"position":[[24,7]]},"60":{"position":[[1,7],[160,7],[893,8],[1080,7],[1170,7],[1201,7],[1222,7]]},"61":{"position":[[1,7],[407,8],[631,7],[960,7],[1214,7],[1251,7],[1291,7]]},"62":{"position":[[71,7],[213,7]]},"63":{"position":[[88,7],[113,7],[1005,7],[1032,7],[1184,7]]},"64":{"position":[[419,8],[817,7],[934,7]]},"68":{"position":[[676,7],[712,7],[747,7],[842,7],[1171,7]]},"79":{"position":[[317,7]]},"81":{"position":[[867,7]]},"87":{"position":[[650,7],[745,7]]},"94":{"position":[[572,8],[987,8]]},"103":{"position":[[395,7]]},"135":{"position":[[17,7],[589,7],[824,8],[984,7]]},"154":{"position":[[189,7],[2067,8]]},"169":{"position":[[250,8],[260,7],[497,8],[1006,7],[1016,7],[1181,7],[1250,7],[1486,7],[1771,8]]},"179":{"position":[[348,7]]},"183":{"position":[[4061,7],[4459,7]]},"228":{"position":[[1336,8],[1380,7]]},"229":{"position":[[135,8],[145,7],[592,7]]},"253":{"position":[[852,7]]},"255":{"position":[[13,7],[147,7],[946,8],[1113,7]]},"257":{"position":[[0,7],[93,8],[190,8]]},"260":{"position":[[55,7]]},"262":{"position":[[58,7]]},"263":{"position":[[82,8],[102,8],[180,7],[236,7],[256,7],[719,7],[823,7]]},"264":{"position":[[357,7],[526,7],[704,7],[943,8]]},"266":{"position":[[314,8],[473,7],[598,7]]},"267":{"position":[[2018,7]]},"268":{"position":[[1795,7],[1897,7]]},"269":{"position":[[1252,7],[1359,7]]},"270":{"position":[[202,8],[280,7],[526,7],[748,7],[1664,7],[1865,7],[1975,7]]},"273":{"position":[[58,7]]},"274":{"position":[[500,8],[578,7],[849,7],[1096,7],[1280,7],[1362,7],[1492,7],[1650,7]]},"275":{"position":[[679,7],[918,7]]},"281":{"position":[[673,7]]},"283":{"position":[[58,7]]},"284":{"position":[[11,8],[89,7],[316,7],[415,7],[541,7]]},"285":{"position":[[231,8]]},"295":{"position":[[1730,8],[1830,7]]},"296":{"position":[[3724,8],[3734,7],[5718,7],[6791,8],[6801,7]]},"307":{"position":[[747,7],[789,8]]},"308":{"position":[[917,8]]},"309":{"position":[[1738,7]]},"313":{"position":[[852,7]]},"315":{"position":[[25,7],[152,7],[252,7],[1725,7]]},"316":{"position":[[13,7],[149,7],[1271,8],[1438,7]]},"340":{"position":[[17,7],[346,7]]},"341":{"position":[[83,7],[118,7],[199,7],[326,7]]},"382":{"position":[[136,7]]},"444":{"position":[[139,7]]},"683":{"position":[[216,7]]},"988":{"position":[[24,7]]},"1003":{"position":[[24,7]]},"1008":{"position":[[974,8],[1120,7],[1904,7]]},"1067":{"position":[[378,7],[582,8]]},"1081":{"position":[[154,7]]},"1200":{"position":[[576,7]]},"1228":{"position":[[63,7]]},"1446":{"position":[[230,8],[417,7]]},"1461":{"position":[[2184,7]]},"1470":{"position":[[320,7]]},"1471":{"position":[[5,7],[22,7],[260,7],[306,7],[423,7],[812,7],[1094,7],[1111,7]]}},"keywords":{}}],["flows'",{"_index":5971,"title":{},"content":{"1282":{"position":[[434,7]]},"1288":{"position":[[146,7]]},"1310":{"position":[[449,7]]}},"keywords":{}}],["flowtcl",{"_index":2687,"title":{},"content":{"253":{"position":[[142,8],[370,8]]},"295":{"position":[[1571,8]]},"296":{"position":[[4221,7]]},"313":{"position":[[142,8],[370,8]]},"315":{"position":[[700,7]]}},"keywords":{}}],["flow’",{"_index":2277,"title":{},"content":{"210":{"position":[[493,6]]},"319":{"position":[[1,6],[432,6],[659,6],[1074,6],[1389,6]]},"326":{"position":[[1829,6]]},"1465":{"position":[[252,6]]}},"keywords":{}}],["flush",{"_index":34,"title":{},"content":{"1":{"position":[[418,5],[510,5]]},"3":{"position":[[177,7]]},"343":{"position":[[952,5]]},"1292":{"position":[[435,5]]},"1306":{"position":[[435,5]]},"1329":{"position":[[435,5]]},"1434":{"position":[[1475,5],[1617,7]]},"1443":{"position":[[550,5],[754,6],[902,7],[1178,5]]}},"keywords":{}}],["flushinterv",{"_index":45,"title":{},"content":{"1":{"position":[[564,14]]}},"keywords":{}}],["focu",{"_index":798,"title":{},"content":{"53":{"position":[[189,5]]}},"keywords":{}}],["focus",{"_index":2497,"title":{},"content":{"236":{"position":[[21,7]]},"323":{"position":[[1847,7]]},"330":{"position":[[508,7]]}},"keywords":{}}],["folder",{"_index":2067,"title":{},"content":{"183":{"position":[[916,7],[940,7],[1020,7]]},"236":{"position":[[1820,6]]},"254":{"position":[[13,6]]},"267":{"position":[[1306,7],[1330,7],[1444,7],[1618,7]]},"270":{"position":[[935,7],[959,7],[1073,7]]},"296":{"position":[[13,6],[4075,6]]},"314":{"position":[[13,6]]},"315":{"position":[[554,6]]},"499":{"position":[[77,6]]},"500":{"position":[[204,7]]},"502":{"position":[[95,6],[1627,7]]},"504":{"position":[[9,7],[260,7]]},"562":{"position":[[277,7]]},"1008":{"position":[[1203,6],[1309,6],[1349,6],[1389,6],[1979,6]]}},"keywords":{}}],["folderscan",{"_index":3906,"title":{},"content":{"506":{"position":[[82,13]]}},"keywords":{}}],["folderssurveysticket",{"_index":3919,"title":{},"content":{"506":{"position":[[367,20]]}},"keywords":{}}],["follow",{"_index":127,"title":{},"content":{"3":{"position":[[617,9]]},"14":{"position":[[211,9]]},"56":{"position":[[58,9]]},"68":{"position":[[1293,9]]},"69":{"position":[[61,9]]},"71":{"position":[[262,9]]},"92":{"position":[[650,9]]},"99":{"position":[[493,9]]},"120":{"position":[[66,9]]},"131":{"position":[[5,9]]},"132":{"position":[[291,9]]},"138":{"position":[[757,6]]},"142":{"position":[[728,6]]},"160":{"position":[[550,9]]},"162":{"position":[[1120,9]]},"171":{"position":[[121,6]]},"172":{"position":[[120,6]]},"173":{"position":[[232,9]]},"176":{"position":[[82,6]]},"183":{"position":[[976,9],[1748,10]]},"191":{"position":[[442,6]]},"193":{"position":[[653,8]]},"197":{"position":[[779,9]]},"199":{"position":[[4,6],[52,10]]},"200":{"position":[[61,9]]},"203":{"position":[[237,9]]},"209":{"position":[[541,9],[719,6]]},"221":{"position":[[374,9],[643,10]]},"225":{"position":[[63,9]]},"228":{"position":[[55,6]]},"229":{"position":[[56,6]]},"234":{"position":[[50,9],[537,6]]},"237":{"position":[[3009,9],[3267,9]]},"239":{"position":[[524,9]]},"240":{"position":[[207,9]]},"242":{"position":[[396,9]]},"247":{"position":[[52,9]]},"254":{"position":[[123,6],[211,9]]},"267":{"position":[[1400,9]]},"268":{"position":[[51,6],[253,7],[568,7]]},"269":{"position":[[58,6],[209,7]]},"270":{"position":[[1029,9]]},"284":{"position":[[459,6]]},"285":{"position":[[185,6]]},"289":{"position":[[247,9]]},"290":{"position":[[970,7]]},"296":{"position":[[123,6],[211,9],[5140,9]]},"300":{"position":[[226,9]]},"307":{"position":[[997,9]]},"309":{"position":[[2076,9],[2681,8]]},"314":{"position":[[123,6],[211,9]]},"315":{"position":[[132,9],[1224,9]]},"335":{"position":[[17,9]]},"340":{"position":[[188,10]]},"345":{"position":[[97,9]]},"347":{"position":[[47,9]]},"348":{"position":[[1,6]]},"349":{"position":[[257,9]]},"353":{"position":[[36,9]]},"359":{"position":[[16,9]]},"366":{"position":[[47,10]]},"367":{"position":[[211,9],[797,6]]},"371":{"position":[[49,10]]},"381":{"position":[[5,9]]},"390":{"position":[[182,9]]},"393":{"position":[[49,10]]},"395":{"position":[[342,9]]},"398":{"position":[[49,10]]},"406":{"position":[[1,6]]},"410":{"position":[[14,9]]},"421":{"position":[[5,9]]},"435":{"position":[[19,9]]},"443":{"position":[[5,9]]},"446":{"position":[[58,9],[167,9]]},"451":{"position":[[5,9]]},"457":{"position":[[5,9]]},"463":{"position":[[5,9]]},"469":{"position":[[105,9]]},"475":{"position":[[42,9]]},"476":{"position":[[1,6]]},"477":{"position":[[545,6],[708,6]]},"478":{"position":[[403,6],[564,8]]},"487":{"position":[[285,9]]},"499":{"position":[[120,9],[198,9]]},"506":{"position":[[5,9]]},"512":{"position":[[5,9]]},"515":{"position":[[329,6],[816,10]]},"520":{"position":[[133,9]]},"529":{"position":[[152,9],[845,9]]},"537":{"position":[[40,9]]},"548":{"position":[[559,9]]},"550":{"position":[[5,9]]},"552":{"position":[[704,8]]},"562":{"position":[[47,10]]},"568":{"position":[[5,9]]},"571":{"position":[[286,6]]},"573":{"position":[[16,9]]},"574":{"position":[[253,9]]},"580":{"position":[[5,9]]},"584":{"position":[[16,9]]},"585":{"position":[[243,9]]},"597":{"position":[[42,9]]},"598":{"position":[[509,6],[672,6]]},"599":{"position":[[403,6],[564,8]]},"605":{"position":[[5,9],[159,9]]},"609":{"position":[[126,6]]},"617":{"position":[[228,6]]},"619":{"position":[[16,9]]},"622":{"position":[[5,9]]},"628":{"position":[[5,9]]},"634":{"position":[[112,9],[190,9]]},"642":{"position":[[56,9]]},"645":{"position":[[186,10]]},"646":{"position":[[295,9]]},"649":{"position":[[128,9],[508,9]]},"652":{"position":[[186,10]]},"654":{"position":[[16,9]]},"667":{"position":[[5,9]]},"682":{"position":[[5,9]]},"697":{"position":[[5,9]]},"703":{"position":[[40,9]]},"709":{"position":[[5,9]]},"710":{"position":[[40,9]]},"715":{"position":[[5,9]]},"723":{"position":[[94,9],[183,8]]},"729":{"position":[[61,8]]},"735":{"position":[[16,9]]},"738":{"position":[[40,9]]},"744":{"position":[[5,9]]},"750":{"position":[[70,10]]},"752":{"position":[[36,10]]},"753":{"position":[[90,9],[350,6]]},"758":{"position":[[49,10]]},"759":{"position":[[177,7]]},"766":{"position":[[70,10]]},"767":{"position":[[496,6],[936,9],[1048,9],[1473,10],[1714,9],[2205,9]]},"771":{"position":[[49,10]]},"772":{"position":[[188,7]]},"788":{"position":[[132,9]]},"789":{"position":[[68,10]]},"790":{"position":[[29,6]]},"792":{"position":[[774,6],[1230,9],[1353,9],[1654,9],[2197,9]]},"793":{"position":[[309,6]]},"798":{"position":[[49,10]]},"799":{"position":[[175,7]]},"807":{"position":[[68,10]]},"808":{"position":[[325,6]]},"813":{"position":[[49,10]]},"814":{"position":[[175,7]]},"823":{"position":[[68,10]]},"824":{"position":[[566,6],[1005,9],[1114,9],[1537,10],[1776,9],[2319,9]]},"829":{"position":[[49,10]]},"830":{"position":[[175,7]]},"849":{"position":[[2209,9]]},"854":{"position":[[5,9]]},"863":{"position":[[1,6]]},"864":{"position":[[146,9],[440,8]]},"866":{"position":[[326,6]]},"871":{"position":[[16,9]]},"875":{"position":[[1,6]]},"876":{"position":[[146,9],[440,8]]},"878":{"position":[[336,6]]},"882":{"position":[[5,9]]},"888":{"position":[[5,9]]},"894":{"position":[[59,9]]},"895":{"position":[[1,6]]},"899":{"position":[[45,9]]},"900":{"position":[[90,9]]},"903":{"position":[[50,10]]},"904":{"position":[[565,6],[1003,9],[1315,9]]},"908":{"position":[[49,10]]},"909":{"position":[[765,6]]},"910":{"position":[[78,10]]},"914":{"position":[[161,9]]},"915":{"position":[[50,10]]},"916":{"position":[[29,6]]},"917":{"position":[[233,9]]},"918":{"position":[[774,6],[1206,9],[1607,9]]},"919":{"position":[[309,6],[789,9],[2405,9]]},"924":{"position":[[49,10]]},"925":{"position":[[765,6]]},"926":{"position":[[78,10]]},"930":{"position":[[50,10]]},"931":{"position":[[329,6],[972,9]]},"935":{"position":[[49,10]]},"936":{"position":[[765,6]]},"937":{"position":[[78,10]]},"942":{"position":[[631,9]]},"943":{"position":[[644,9],[806,9]]},"945":{"position":[[819,8]]},"951":{"position":[[49,10]]},"952":{"position":[[765,6]]},"953":{"position":[[78,10]]},"956":{"position":[[5,9]]},"963":{"position":[[59,10]]},"965":{"position":[[233,9]]},"969":{"position":[[49,10]]},"970":{"position":[[765,6]]},"971":{"position":[[78,10]]},"979":{"position":[[5,9]]},"985":{"position":[[32,9]]},"987":{"position":[[115,10]]},"989":{"position":[[1217,6]]},"994":{"position":[[5,9]]},"1000":{"position":[[32,9]]},"1002":{"position":[[115,10]]},"1004":{"position":[[1300,6]]},"1008":{"position":[[163,9],[1502,6],[1622,9]]},"1012":{"position":[[5,9]]},"1020":{"position":[[1032,9]]},"1025":{"position":[[40,9]]},"1032":{"position":[[101,9]]},"1039":{"position":[[265,9]]},"1041":{"position":[[29,6]]},"1042":{"position":[[37,9]]},"1043":{"position":[[309,6],[701,9],[1769,9]]},"1050":{"position":[[944,6]]},"1051":{"position":[[565,6],[957,9]]},"1059":{"position":[[329,6],[721,9]]},"1065":{"position":[[5,9]]},"1067":{"position":[[77,9]]},"1073":{"position":[[5,9]]},"1080":{"position":[[5,9]]},"1090":{"position":[[1,6]]},"1096":{"position":[[63,9]]},"1099":{"position":[[5,9]]},"1104":{"position":[[5,9]]},"1110":{"position":[[5,9]]},"1118":{"position":[[348,9],[602,9]]},"1128":{"position":[[5,9]]},"1136":{"position":[[351,6]]},"1176":{"position":[[193,9]]},"1177":{"position":[[49,9]]},"1194":{"position":[[143,9]]},"1196":{"position":[[166,7]]},"1204":{"position":[[70,6]]},"1236":{"position":[[56,10]]},"1245":{"position":[[180,6]]},"1247":{"position":[[16,9]]},"1264":{"position":[[56,10]]},"1272":{"position":[[67,10]]},"1282":{"position":[[29,6]]},"1283":{"position":[[325,6]]},"1289":{"position":[[1423,9]]},"1292":{"position":[[470,9],[511,7]]},"1298":{"position":[[1255,9]]},"1303":{"position":[[329,6]]},"1306":{"position":[[470,9],[511,7]]},"1310":{"position":[[29,6],[744,9]]},"1311":{"position":[[162,6]]},"1322":{"position":[[1642,9]]},"1329":{"position":[[470,9],[511,7]]},"1335":{"position":[[1290,9]]},"1346":{"position":[[1256,9]]},"1358":{"position":[[793,9]]},"1361":{"position":[[44,10]]},"1370":{"position":[[1102,9]]},"1373":{"position":[[547,6],[939,9]]},"1374":{"position":[[547,6],[939,9]]},"1383":{"position":[[47,9]]},"1394":{"position":[[1065,9]]},"1397":{"position":[[326,6],[718,9]]},"1398":{"position":[[325,6],[717,9]]},"1407":{"position":[[29,6]]},"1408":{"position":[[37,9]]},"1409":{"position":[[309,6],[701,9],[1042,9]]},"1429":{"position":[[327,9]]},"1442":{"position":[[1184,9]]},"1452":{"position":[[176,9]]},"1456":{"position":[[154,9]]},"1457":{"position":[[127,9]]},"1459":{"position":[[1605,9]]},"1473":{"position":[[389,9]]},"1477":{"position":[[359,8],[512,8]]},"1480":{"position":[[83,9]]}},"keywords":{}}],["followingpermiss",{"_index":5433,"title":{},"content":{"1122":{"position":[[59,21]]}},"keywords":{}}],["followingthi",{"_index":5772,"title":{},"content":{"1165":{"position":[[316,13]]}},"keywords":{}}],["foo",{"_index":425,"title":{},"content":{"14":{"position":[[496,4],[705,3],[888,3],[928,3],[1212,3]]},"94":{"position":[[2587,5]]},"98":{"position":[[394,5]]},"100":{"position":[[401,3],[458,3],[520,3]]},"154":{"position":[[584,4],[754,5],[866,4],[990,4]]},"912":{"position":[[915,3],[1221,3]]}},"keywords":{}}],["foo.flow.yaml",{"_index":1316,"title":{},"content":{"92":{"position":[[28,13],[418,13]]}},"keywords":{}}],["foo.flow.yamlimport",{"_index":1318,"title":{},"content":{"92":{"position":[[164,20]]}},"keywords":{}}],["foo.flow.yamlwer",{"_index":1332,"title":{},"content":{"92":{"position":[[912,17]]}},"keywords":{}}],["foo/a",{"_index":1070,"title":{},"content":{"73":{"position":[[225,8]]}},"keywords":{}}],["foo/b",{"_index":1071,"title":{},"content":{"73":{"position":[[234,7]]}},"keywords":{}}],["foo/c/0",{"_index":1072,"title":{},"content":{"73":{"position":[[242,9]]}},"keywords":{}}],["foo/c/1",{"_index":1073,"title":{},"content":{"73":{"position":[[252,9]]}},"keywords":{}}],["foobar",{"_index":1338,"title":{},"content":{"94":{"position":[[654,6]]}},"keywords":{}}],["forc",{"_index":1260,"title":{},"content":{"84":{"position":[[269,6]]},"595":{"position":[[1271,7]]},"910":{"position":[[236,7]]},"922":{"position":[[2053,5]]},"926":{"position":[[236,7]]},"937":{"position":[[236,7]]},"953":{"position":[[236,7]]},"971":{"position":[[236,7]]},"1292":{"position":[[581,5]]},"1306":{"position":[[581,5]]},"1329":{"position":[[581,5]]}},"keywords":{}}],["foreign",{"_index":4777,"title":{},"content":{"842":{"position":[[3010,7],[3377,7]]},"1140":{"position":[[3248,7]]},"1292":{"position":[[626,7]]},"1306":{"position":[[626,7]]},"1316":{"position":[[3248,7]]},"1329":{"position":[[626,7]]},"1340":{"position":[[3248,7]]},"1351":{"position":[[3248,7]]},"1370":{"position":[[1126,7]]},"1379":{"position":[[1572,7]]},"1403":{"position":[[1572,7]]},"1414":{"position":[[1572,7]]},"1431":{"position":[[3271,7]]}},"keywords":{}}],["forev",{"_index":56,"title":{},"content":{"1":{"position":[[803,8]]},"207":{"position":[[599,8]]},"239":{"position":[[1040,8]]}},"keywords":{}}],["forget",{"_index":2420,"title":{},"content":{"212":{"position":[[384,6]]},"243":{"position":[[379,6]]},"297":{"position":[[130,6]]}},"keywords":{}}],["forgotten",{"_index":3202,"title":{},"content":{"331":{"position":[[632,10]]}},"keywords":{}}],["form",{"_index":295,"title":{},"content":{"11":{"position":[[218,4]]},"16":{"position":[[89,4]]},"69":{"position":[[416,5],[440,5]]},"73":{"position":[[61,4]]},"76":{"position":[[684,5],[806,5]]},"82":{"position":[[389,5],[2907,5]]},"89":{"position":[[183,4]]},"107":{"position":[[1365,5]]},"140":{"position":[[232,5],[242,4]]},"144":{"position":[[418,4],[518,4]]},"190":{"position":[[252,4]]},"192":{"position":[[223,4]]},"217":{"position":[[423,4]]},"237":{"position":[[2579,4]]},"254":{"position":[[3859,4]]},"290":{"position":[[387,4]]},"291":{"position":[[173,4],[732,4]]},"296":{"position":[[7083,5]]},"301":{"position":[[333,4]]},"302":{"position":[[173,4],[732,4]]},"370":{"position":[[1453,5],[1834,4]]},"406":{"position":[[151,4]]},"480":{"position":[[1002,4],[1307,4]]},"757":{"position":[[892,5]]},"770":{"position":[[892,5]]},"797":{"position":[[892,5]]},"812":{"position":[[892,5]]},"828":{"position":[[892,5]]},"867":{"position":[[785,5]]},"907":{"position":[[1236,5]]},"923":{"position":[[1236,5]]},"934":{"position":[[1236,5]]},"950":{"position":[[1236,5]]},"968":{"position":[[1236,5]]},"1045":{"position":[[963,5],[1249,4]]},"1053":{"position":[[963,5],[1249,4]]},"1061":{"position":[[963,5],[1249,4]]},"1138":{"position":[[1125,4]]},"1188":{"position":[[120,4]]},"1452":{"position":[[911,4],[1126,4]]}},"keywords":{}}],["form.sav",{"_index":4532,"title":{},"content":{"726":{"position":[[331,9]]}},"keywords":{}}],["formal",{"_index":314,"title":{},"content":{"11":{"position":[[672,6]]}},"keywords":{}}],["format",{"_index":427,"title":{"603":{"position":[[8,7]]},"616":{"position":[[12,11]]}},"content":{"14":{"position":[[517,7],[772,7]]},"56":{"position":[[68,7]]},"68":{"position":[[657,7]]},"69":{"position":[[71,7]]},"83":{"position":[[1184,9],[1311,9]]},"120":{"position":[[76,7]]},"156":{"position":[[441,8]]},"162":{"position":[[1884,9],[2093,9]]},"183":{"position":[[1837,7],[3240,7],[3643,7],[4314,9]]},"189":{"position":[[124,6],[838,7]]},"190":{"position":[[1229,8],[1452,7]]},"221":{"position":[[572,9]]},"222":{"position":[[971,9]]},"225":{"position":[[170,9]]},"228":{"position":[[1398,6]]},"254":{"position":[[351,7],[1419,7]]},"255":{"position":[[824,6]]},"288":{"position":[[915,9]]},"290":{"position":[[982,6]]},"299":{"position":[[830,9]]},"316":{"position":[[1149,6]]},"387":{"position":[[1245,7]]},"402":{"position":[[587,9]]},"417":{"position":[[1637,6],[1729,6],[2303,9]]},"418":{"position":[[159,7]]},"419":{"position":[[852,7],[877,7],[950,6]]},"424":{"position":[[233,6]]},"439":{"position":[[416,7]]},"440":{"position":[[868,7],[893,7],[966,6]]},"448":{"position":[[993,7]]},"454":{"position":[[423,6]]},"460":{"position":[[237,6]]},"477":{"position":[[719,6]]},"478":{"position":[[517,7]]},"496":{"position":[[443,6]]},"502":{"position":[[1285,6],[1377,6]]},"504":{"position":[[784,7],[809,7]]},"517":{"position":[[1507,6],[2059,6],[2672,6],[3833,6]]},"526":{"position":[[75,6]]},"534":{"position":[[1472,6]]},"545":{"position":[[1239,6],[1331,6],[1698,9]]},"546":{"position":[[896,7]]},"547":{"position":[[853,7],[878,7],[951,6]]},"556":{"position":[[1716,6],[2090,6]]},"573":{"position":[[740,6]]},"584":{"position":[[795,6]]},"599":{"position":[[517,7]]},"603":{"position":[[43,6],[82,7],[154,7],[265,7]]},"606":{"position":[[184,6]]},"611":{"position":[[813,6],[1080,6]]},"616":{"position":[[63,10]]},"631":{"position":[[237,6],[376,6]]},"637":{"position":[[799,6],[891,6]]},"638":{"position":[[188,7]]},"639":{"position":[[782,7],[807,7]]},"654":{"position":[[477,6]]},"670":{"position":[[533,6]]},"675":{"position":[[193,6]]},"685":{"position":[[357,6]]},"700":{"position":[[185,6]]},"706":{"position":[[185,6]]},"720":{"position":[[699,6]]},"741":{"position":[[300,6]]},"747":{"position":[[705,6],[922,6]]},"753":{"position":[[825,6]]},"754":{"position":[[380,7],[550,7],[1322,7]]},"793":{"position":[[796,6]]},"794":{"position":[[253,7],[592,7],[1526,7]]},"809":{"position":[[253,7],[592,7],[1526,7]]},"825":{"position":[[253,7],[592,7],[1362,7]]},"846":{"position":[[336,9]]},"859":{"position":[[528,6]]},"879":{"position":[[145,6]]},"885":{"position":[[486,6]]},"891":{"position":[[189,6]]},"895":{"position":[[209,7]]},"897":{"position":[[97,6]]},"959":{"position":[[241,6]]},"982":{"position":[[243,6]]},"1009":{"position":[[865,6]]},"1015":{"position":[[299,6]]},"1021":{"position":[[1796,6],[1888,6]]},"1022":{"position":[[225,7]]},"1023":{"position":[[833,7],[858,7],[931,6]]},"1028":{"position":[[108,6],[246,6]]},"1031":{"position":[[647,9]]},"1047":{"position":[[689,9]]},"1055":{"position":[[689,9]]},"1063":{"position":[[689,9]]},"1070":{"position":[[684,6]]},"1076":{"position":[[646,6]]},"1085":{"position":[[799,6],[1202,7]]},"1094":{"position":[[368,7]]},"1107":{"position":[[168,6]]},"1113":{"position":[[237,6]]},"1133":{"position":[[862,6]]},"1164":{"position":[[352,8],[425,8],[457,8],[492,8],[587,7],[620,7]]},"1172":{"position":[[458,8],[511,8],[610,8],[699,8],[747,8],[838,8]]},"1196":{"position":[[178,6]]},"1206":{"position":[[418,7]]},"1222":{"position":[[458,8],[511,8],[610,8],[699,8],[747,8],[838,8]]},"1272":{"position":[[161,10]]},"1286":{"position":[[138,7],[159,7],[649,7],[1612,7]]},"1291":{"position":[[68,7]]},"1292":{"position":[[674,6]]},"1301":{"position":[[138,7],[159,7],[649,7],[1448,7]]},"1305":{"position":[[68,7]]},"1306":{"position":[[674,6]]},"1310":{"position":[[574,6]]},"1322":{"position":[[971,9]]},"1325":{"position":[[138,7],[159,7],[649,7],[1612,7]]},"1328":{"position":[[68,7]]},"1329":{"position":[[674,6]]},"1335":{"position":[[971,9],[1120,6]]},"1346":{"position":[[1086,6]]},"1382":{"position":[[393,9]]},"1429":{"position":[[337,7]]},"1448":{"position":[[257,10]]},"1480":{"position":[[93,7]]}},"keywords":{}}],["format<account",{"_index":4283,"title":{},"content":{"598":{"position":[[683,17]]}},"keywords":{}}],["formathost:port",{"_index":5978,"title":{},"content":{"1289":{"position":[[1254,16]]},"1298":{"position":[[1086,16]]},"1303":{"position":[[965,16]]},"1322":{"position":[[1473,16]]}},"keywords":{}}],["formerli",{"_index":2676,"title":{},"content":{"250":{"position":[[1136,9]]},"571":{"position":[[894,9]]}},"keywords":{}}],["formsticket",{"_index":5457,"title":{},"content":{"1128":{"position":[[342,11]]}},"keywords":{}}],["formula",{"_index":5157,"title":{"1006":{"position":[[0,7]]}},"content":{"1006":{"position":[[39,7],[132,7],[197,7],[477,7]]}},"keywords":{}}],["formulavalu",{"_index":4319,"title":{},"content":{"616":{"position":[[574,12]]}},"keywords":{}}],["forth",{"_index":913,"title":{},"content":{"61":{"position":[[148,5]]}},"keywords":{}}],["fortran",{"_index":6313,"title":{},"content":{"1379":{"position":[[1625,7]]},"1403":{"position":[[1625,7]]},"1414":{"position":[[1625,7]]}},"keywords":{}}],["forumsdiscuss",{"_index":3910,"title":{},"content":{"506":{"position":[[186,16]]}},"keywords":{}}],["forward",{"_index":1218,"title":{},"content":{"83":{"position":[[433,11]]},"174":{"position":[[302,8]]},"259":{"position":[[1528,8],[3082,8]]},"271":{"position":[[33,7]]},"310":{"position":[[300,8]]},"329":{"position":[[1027,7]]},"370":{"position":[[1660,10]]},"785":{"position":[[321,8]]},"1077":{"position":[[708,7]]},"1138":{"position":[[951,10]]}},"keywords":{}}],["found",{"_index":2248,"title":{},"content":{"208":{"position":[[663,5]]},"224":{"position":[[1134,5]]},"268":{"position":[[114,5]]},"269":{"position":[[121,5]]},"345":{"position":[[84,5]]},"351":{"position":[[82,5],[147,5]]},"464":{"position":[[122,5],[226,5]]},"494":{"position":[[99,5]]},"573":{"position":[[920,5]]},"577":{"position":[[247,5]]},"588":{"position":[[242,5]]},"595":{"position":[[654,5]]},"728":{"position":[[113,5]]},"747":{"position":[[522,5]]},"964":{"position":[[357,5]]},"1107":{"position":[[332,5]]},"1133":{"position":[[1026,5]]},"1140":{"position":[[3284,5]]},"1292":{"position":[[710,5]]},"1306":{"position":[[710,5]]},"1316":{"position":[[3284,5]]},"1329":{"position":[[710,5]]},"1340":{"position":[[3284,5]]},"1351":{"position":[[3284,5]]},"1379":{"position":[[1676,5]]},"1392":{"position":[[306,5]]},"1403":{"position":[[1676,5]]},"1414":{"position":[[1676,5]]},"1431":{"position":[[3307,5]]}},"keywords":{}}],["foundat",{"_index":637,"title":{},"content":{"27":{"position":[[676,10]]}},"keywords":{}}],["foundation'",{"_index":2052,"title":{},"content":{"180":{"position":[[536,12]]}},"keywords":{}}],["foundher",{"_index":5752,"title":{},"content":{"1154":{"position":[[372,10]]}},"keywords":{}}],["four",{"_index":1767,"title":{},"content":{"137":{"position":[[72,4]]},"443":{"position":[[118,5],[208,5],[286,5],[398,5],[479,5]]}},"keywords":{}}],["four_weekly_active_us",{"_index":4202,"title":{},"content":{"575":{"position":[[517,24]]},"586":{"position":[[539,24]]}},"keywords":{}}],["fow",{"_index":867,"title":{},"content":{"58":{"position":[[53,3]]}},"keywords":{}}],["fragment",{"_index":17,"title":{"3":{"position":[[0,8]]}},"content":{"1":{"position":[[224,10],[261,10],[297,8],[449,8],[616,9],[970,8]]},"3":{"position":[[9,8],[404,8],[1078,8]]},"4":{"position":[[27,8]]},"16":{"position":[[1335,8]]},"60":{"position":[[811,9]]},"70":{"position":[[560,8]]},"161":{"position":[[166,8]]},"320":{"position":[[1022,10]]},"491":{"position":[[533,9]]},"664":{"position":[[554,9],[789,9]]},"679":{"position":[[533,9]]},"694":{"position":[[533,9]]},"1471":{"position":[[990,8]]}},"keywords":{}}],["frame_row",{"_index":5660,"title":{},"content":{"1140":{"position":[[3317,9]]},"1316":{"position":[[3317,9]]},"1340":{"position":[[3317,9]]},"1351":{"position":[[3317,9]]},"1431":{"position":[[3340,9]]}},"keywords":{}}],["framework",{"_index":3116,"title":{},"content":{"320":{"position":[[166,9],[526,10]]},"974":{"position":[[116,10]]}},"keywords":{}}],["fraud",{"_index":2835,"title":{},"content":{"278":{"position":[[79,5]]},"279":{"position":[[104,5]]}},"keywords":{}}],["free",{"_index":1488,"title":{},"content":{"104":{"position":[[241,4]]},"168":{"position":[[25,5],[71,4]]},"179":{"position":[[88,5]]},"183":{"position":[[4674,4]]},"188":{"position":[[102,5],[120,4]]},"199":{"position":[[121,4]]},"203":{"position":[[364,4]]},"204":{"position":[[131,4]]},"206":{"position":[[667,4]]},"232":{"position":[[964,5]]},"237":{"position":[[3023,4]]},"238":{"position":[[142,4]]},"239":{"position":[[2839,4]]},"240":{"position":[[4085,4]]},"253":{"position":[[1021,4]]},"266":{"position":[[111,5]]},"288":{"position":[[191,5]]},"299":{"position":[[191,5]]},"313":{"position":[[1021,4]]},"375":{"position":[[212,4],[269,4]]},"377":{"position":[[538,4],[576,4],[1383,4]]},"483":{"position":[[303,4]]},"494":{"position":[[143,4]]},"496":{"position":[[214,4]]},"922":{"position":[[3351,4]]},"940":{"position":[[32,5]]},"1118":{"position":[[997,4]]},"1140":{"position":[[3349,4]]},"1316":{"position":[[3349,4]]},"1340":{"position":[[3349,4]]},"1351":{"position":[[3349,4]]},"1379":{"position":[[1732,4]]},"1403":{"position":[[1732,4]]},"1414":{"position":[[1732,4]]},"1431":{"position":[[3372,4]]},"1456":{"position":[[173,4],[228,4],[295,4],[334,4]]}},"keywords":{}}],["freecallsconfer",{"_index":5394,"title":{},"content":{"1110":{"position":[[225,19]]}},"keywords":{}}],["freetext",{"_index":6315,"title":{},"content":{"1379":{"position":[[1798,8]]},"1403":{"position":[[1798,8]]},"1414":{"position":[[1798,8]]}},"keywords":{}}],["freetextt",{"_index":6317,"title":{},"content":{"1379":{"position":[[1861,13]]},"1403":{"position":[[1861,13]]},"1414":{"position":[[1861,13]]}},"keywords":{}}],["freez",{"_index":5662,"title":{},"content":{"1140":{"position":[[3375,6]]},"1316":{"position":[[3375,6]]},"1340":{"position":[[3375,6]]},"1351":{"position":[[3375,6]]},"1431":{"position":[[3398,6]]}},"keywords":{}}],["frequenc",{"_index":5718,"title":{},"content":{"1144":{"position":[[430,9]]},"1153":{"position":[[57,10]]},"1162":{"position":[[619,9]]},"1170":{"position":[[430,9]]},"1181":{"position":[[57,10]]},"1190":{"position":[[57,10]]},"1213":{"position":[[285,9]]},"1220":{"position":[[285,9]]},"1388":{"position":[[57,10]]},"1422":{"position":[[57,10]]},"1452":{"position":[[295,9],[305,9],[823,10],[1041,10],[1236,9],[1793,10],[2359,9],[2441,9],[2643,9],[2901,9],[3561,10],[3885,10]]},"1453":{"position":[[436,9],[609,9],[964,9]]}},"keywords":{}}],["frequent",{"_index":960,"title":{},"content":{"64":{"position":[[377,10]]},"163":{"position":[[493,10]]},"208":{"position":[[203,8]]},"326":{"position":[[1723,10]]},"480":{"position":[[1643,8]]},"760":{"position":[[808,10]]},"773":{"position":[[808,10]]},"800":{"position":[[808,10]]},"815":{"position":[[808,10]]},"831":{"position":[[808,10]]},"842":{"position":[[2017,10]]},"1036":{"position":[[1076,8]]},"1076":{"position":[[541,10]]},"1451":{"position":[[235,8],[639,8]]}},"keywords":{}}],["fresh",{"_index":2217,"title":{},"content":{"203":{"position":[[260,5]]},"296":{"position":[[7309,5]]},"329":{"position":[[972,5]]},"1006":{"position":[[315,10]]},"1388":{"position":[[793,10]]}},"keywords":{}}],["fresh"",{"_index":3868,"title":{},"content":{"488":{"position":[[575,11]]},"659":{"position":[[732,11]]},"676":{"position":[[575,11]]},"691":{"position":[[575,11]]}},"keywords":{}}],["freshdesk",{"_index":3335,"title":{"505":{"position":[[0,9]]}},"content":{"364":{"position":[[1166,9]]},"507":{"position":[[43,9],[69,9]]},"508":{"position":[[250,9]]},"509":{"position":[[77,9],[127,9],[603,9]]}},"keywords":{}}],["freshdesk:dev",{"_index":3336,"title":{},"content":{"364":{"position":[[1222,13]]},"510":{"position":[[89,13]]}},"keywords":{}}],["friday",{"_index":6531,"title":{},"content":{"1452":{"position":[[1381,7],[1433,8]]}},"keywords":{}}],["friday.su",{"_index":6562,"title":{},"content":{"1452":{"position":[[4353,10]]}},"keywords":{}}],["from.a",{"_index":5210,"title":{},"content":{"1031":{"position":[[133,6]]}},"keywords":{}}],["fromcustom",{"_index":2997,"title":{},"content":{"296":{"position":[[854,13],[2855,13]]}},"keywords":{}}],["fromcustomers(_read",{"_index":3020,"title":{},"content":{"296":{"position":[[5590,20],[6283,20]]}},"keywords":{}}],["fromord",{"_index":1370,"title":{},"content":{"96":{"position":[[154,10]]},"107":{"position":[[1450,10],[2630,10],[3284,10],[4002,10]]},"296":{"position":[[756,10],[2757,10]]}},"keywords":{}}],["fromorders(_read",{"_index":3016,"title":{},"content":{"296":{"position":[[5483,17],[6135,17]]}},"keywords":{}}],["fromoutcom",{"_index":2884,"title":{},"content":{"281":{"position":[[1006,12]]}},"keywords":{}}],["fromoutcomes(read",{"_index":2889,"title":{},"content":{"281":{"position":[[1403,18]]}},"keywords":{}}],["fromtransf",{"_index":2841,"title":{},"content":{"278":{"position":[[1117,13]]}},"keywords":{}}],["front",{"_index":1672,"title":{},"content":{"122":{"position":[[147,5]]},"165":{"position":[[248,6]]}},"keywords":{}}],["frozen",{"_index":4315,"title":{},"content":{"616":{"position":[[128,6],[201,6]]}},"keywords":{}}],["full",{"_index":677,"title":{},"content":{"34":{"position":[[606,4]]},"60":{"position":[[1054,4]]},"125":{"position":[[791,4]]},"138":{"position":[[904,4],[1721,4],[2559,4]]},"140":{"position":[[219,4]]},"141":{"position":[[1729,4]]},"142":{"position":[[875,4],[1746,4],[2637,4]]},"144":{"position":[[413,4]]},"146":{"position":[[10,4],[940,4]]},"149":{"position":[[10,4],[931,4]]},"152":{"position":[[10,4],[916,4]]},"175":{"position":[[208,4]]},"188":{"position":[[145,4]]},"198":{"position":[[175,4]]},"217":{"position":[[861,4]]},"218":{"position":[[2140,4]]},"237":{"position":[[1633,4]]},"270":{"position":[[726,4]]},"290":{"position":[[669,4]]},"291":{"position":[[1950,4]]},"295":{"position":[[983,4]]},"296":{"position":[[712,4],[2713,4],[3034,4],[3999,4],[5156,4]]},"301":{"position":[[609,4]]},"302":{"position":[[1862,4]]},"414":{"position":[[194,4]]},"415":{"position":[[454,4]]},"488":{"position":[[18,4],[285,4],[765,4]]},"529":{"position":[[192,4]]},"590":{"position":[[1081,5]]},"659":{"position":[[175,4],[442,4],[922,4]]},"676":{"position":[[18,4],[285,4],[765,4]]},"683":{"position":[[161,4]]},"691":{"position":[[18,4],[285,4],[765,4]]},"786":{"position":[[83,4]]},"840":{"position":[[1119,4],[1218,4],[1315,4],[1411,4]]},"849":{"position":[[2130,4],[2240,4]]},"899":{"position":[[103,5],[130,5],[164,5],[190,5],[214,5]]},"907":{"position":[[1825,5]]},"910":{"position":[[184,4]]},"923":{"position":[[1825,5]]},"926":{"position":[[184,4]]},"937":{"position":[[184,4]]},"953":{"position":[[184,4]]},"968":{"position":[[1825,5]]},"971":{"position":[[184,4]]},"1006":{"position":[[72,4],[398,4]]},"1020":{"position":[[953,4]]},"1140":{"position":[[3444,4]]},"1192":{"position":[[496,4]]},"1209":{"position":[[313,4]]},"1272":{"position":[[230,4]]},"1292":{"position":[[776,4]]},"1306":{"position":[[776,4]]},"1313":{"position":[[1575,5]]},"1316":{"position":[[3444,4]]},"1329":{"position":[[776,4]]},"1337":{"position":[[1575,5]]},"1340":{"position":[[3444,4]]},"1351":{"position":[[3444,4]]},"1370":{"position":[[1154,4]]},"1379":{"position":[[1962,4]]},"1394":{"position":[[505,4]]},"1403":{"position":[[1962,4]]},"1414":{"position":[[1962,4]]},"1431":{"position":[[3467,4]]},"1440":{"position":[[813,4],[1225,4]]},"1461":{"position":[[4462,4]]},"1470":{"position":[[261,4]]}},"keywords":{}}],["full_refresh",{"_index":3279,"title":{},"content":{"360":{"position":[[210,12]]},"388":{"position":[[468,12]]},"425":{"position":[[244,12],[325,12]]},"449":{"position":[[449,12]]},"455":{"position":[[293,12]]},"461":{"position":[[290,12]]},"467":{"position":[[226,12]]},"473":{"position":[[328,12]]},"518":{"position":[[1628,12]]},"527":{"position":[[378,12]]},"535":{"position":[[393,12]]},"612":{"position":[[393,12]]},"619":{"position":[[753,13]]},"620":{"position":[[288,12]]},"626":{"position":[[189,12]]},"671":{"position":[[286,12]]},"686":{"position":[[280,12],[803,12],[901,12],[1063,12],[1135,12]]},"701":{"position":[[216,12]]},"707":{"position":[[213,12]]},"742":{"position":[[281,12]]},"748":{"position":[[447,12]]},"886":{"position":[[311,12]]},"960":{"position":[[223,12]]},"998":{"position":[[253,12]]},"1016":{"position":[[341,12]]},"1029":{"position":[[221,12]]},"1078":{"position":[[347,12],[813,12],[1241,12],[1900,12]]},"1108":{"position":[[288,12]]},"1114":{"position":[[274,12]]},"1134":{"position":[[318,12],[419,12],[615,12],[696,12],[1451,12],[1544,12],[1633,12],[1841,12],[1925,12],[2004,12]]}},"keywords":{}}],["fulldocu",{"_index":4692,"title":{},"content":{"786":{"position":[[149,13]]}},"keywords":{}}],["fulli",{"_index":1624,"title":{"329":{"position":[[0,5]]}},"content":{"115":{"position":[[444,5]]},"125":{"position":[[501,5]]},"129":{"position":[[124,5]]},"135":{"position":[[699,5]]},"199":{"position":[[134,5]]},"205":{"position":[[331,5]]},"210":{"position":[[136,5]]},"234":{"position":[[253,5]]},"319":{"position":[[732,5]]},"320":{"position":[[2199,5]]},"370":{"position":[[1098,5],[1403,5]]},"757":{"position":[[842,5],[1443,5]]},"770":{"position":[[842,5],[1443,5]]},"797":{"position":[[842,5],[1443,5]]},"812":{"position":[[842,5],[1443,5]]},"828":{"position":[[842,5],[1443,5]]},"859":{"position":[[908,5]]},"867":{"position":[[559,5],[743,5]]},"907":{"position":[[881,5],[1186,5]]},"923":{"position":[[881,5],[1186,5]]},"934":{"position":[[881,5],[1186,5]]},"950":{"position":[[881,5],[1186,5]]},"968":{"position":[[881,5],[1186,5]]},"1045":{"position":[[729,5],[913,5]]},"1053":{"position":[[729,5],[913,5]]},"1061":{"position":[[729,5],[913,5]]},"1182":{"position":[[515,5]]},"1191":{"position":[[519,5]]},"1262":{"position":[[519,5]]},"1389":{"position":[[517,5]]},"1435":{"position":[[591,5]]},"1438":{"position":[[371,5]]},"1439":{"position":[[1628,5]]},"1440":{"position":[[210,5],[1381,5]]},"1443":{"position":[[396,5]]},"1444":{"position":[[892,5]]},"1451":{"position":[[791,5]]},"1452":{"position":[[378,5]]}},"keywords":{}}],["fullread_onli",{"_index":4668,"title":{},"content":{"767":{"position":[[1109,14]]},"792":{"position":[[1414,14]]},"824":{"position":[[1175,14]]}},"keywords":{}}],["fulltext",{"_index":5995,"title":{},"content":{"1292":{"position":[[807,8]]},"1306":{"position":[[807,8]]},"1329":{"position":[[807,8]]}},"keywords":{}}],["fulltextt",{"_index":6319,"title":{},"content":{"1379":{"position":[[2000,13]]},"1403":{"position":[[2000,13]]},"1414":{"position":[[2000,13]]}},"keywords":{}}],["function",{"_index":364,"title":{},"content":{"12":{"position":[[253,12]]},"60":{"position":[[71,10]]},"64":{"position":[[114,9],[854,8]]},"81":{"position":[[2341,9]]},"91":{"position":[[136,9]]},"98":{"position":[[1014,10]]},"105":{"position":[[344,9]]},"107":{"position":[[2706,8],[2917,11],[3189,8]]},"108":{"position":[[26,9]]},"113":{"position":[[167,9],[284,10]]},"115":{"position":[[683,10]]},"158":{"position":[[718,10]]},"183":{"position":[[2806,8],[2821,8]]},"239":{"position":[[1270,11]]},"279":{"position":[[486,9]]},"296":{"position":[[5748,10],[5770,8],[5808,14]]},"315":{"position":[[1753,9],[1774,8],[1812,14]]},"574":{"position":[[97,13]]},"585":{"position":[[97,13]]},"1140":{"position":[[3479,8]]},"1292":{"position":[[854,8]]},"1306":{"position":[[854,8]]},"1316":{"position":[[3479,8]]},"1329":{"position":[[854,8]]},"1340":{"position":[[3479,8]]},"1351":{"position":[[3479,8]]},"1379":{"position":[[2056,8]]},"1403":{"position":[[2056,8]]},"1414":{"position":[[2056,8]]},"1431":{"position":[[3502,8]]}},"keywords":{}}],["fund",{"_index":2836,"title":{},"content":{"278":{"position":[[187,5]]},"280":{"position":[[148,5],[510,6],[553,6],[618,5],[1392,6]]}},"keywords":{}}],["fundament",{"_index":3134,"title":{},"content":{"321":{"position":[[88,13]]}},"keywords":{}}],["further",{"_index":531,"title":{},"content":{"20":{"position":[[246,7]]},"27":{"position":[[544,7]]},"72":{"position":[[623,7]]},"82":{"position":[[3011,7]]},"125":{"position":[[1113,7]]},"154":{"position":[[846,8]]},"159":{"position":[[402,7]]},"161":{"position":[[448,7],[533,7]]},"268":{"position":[[1995,7]]},"269":{"position":[[1457,7]]},"270":{"position":[[2073,7]]},"325":{"position":[[811,7]]},"1437":{"position":[[937,7],[1605,7]]},"1440":{"position":[[1328,7]]}},"keywords":{}}],["furthermor",{"_index":1266,"title":{},"content":{"84":{"position":[[722,12]]}},"keywords":{}}],["fusion",{"_index":5670,"title":{},"content":{"1140":{"position":[[3522,6]]},"1316":{"position":[[3522,6]]},"1340":{"position":[[3522,6]]},"1351":{"position":[[3522,6]]},"1379":{"position":[[2108,6]]},"1403":{"position":[[2108,6]]},"1414":{"position":[[2108,6]]},"1431":{"position":[[3545,6]]}},"keywords":{}}],["futur",{"_index":678,"title":{},"content":{"34":{"position":[[670,6]]},"68":{"position":[[1514,7]]},"112":{"position":[[584,7]]},"210":{"position":[[2026,6]]},"237":{"position":[[2761,7]]},"290":{"position":[[1796,6]]},"301":{"position":[[1761,6]]},"379":{"position":[[271,6]]},"419":{"position":[[1245,7]]},"429":{"position":[[1462,7]]},"440":{"position":[[1261,7]]},"547":{"position":[[1247,7]]},"840":{"position":[[1475,6]]},"849":{"position":[[2366,6]]},"922":{"position":[[897,6]]},"1023":{"position":[[1228,7]]},"1032":{"position":[[1530,6],[1736,6]]},"1437":{"position":[[1475,7]]},"1444":{"position":[[467,6]]},"1449":{"position":[[465,6]]},"1471":{"position":[[615,7]]}},"keywords":{}}],["fww",{"_index":6641,"title":{},"content":{"1463":{"position":[[376,4],[652,4],[723,4],[854,4]]}},"keywords":{}}],["g",{"_index":84,"title":{},"content":{"2":{"position":[[425,2]]}},"keywords":{}}],["ga",{"_index":4156,"title":{},"content":{"573":{"position":[[690,3]]},"574":{"position":[[666,2],[690,2]]}},"keywords":{}}],["ga4",{"_index":4221,"title":{},"content":{"584":{"position":[[874,3]]}},"keywords":{}}],["ga:14dayus",{"_index":4168,"title":{},"content":{"574":{"position":[[711,13]]}},"keywords":{}}],["ga:1dayus",{"_index":4170,"title":{},"content":{"574":{"position":[[733,12]]}},"keywords":{}}],["ga:28dayus",{"_index":4172,"title":{},"content":{"574":{"position":[[759,13]]}},"keywords":{}}],["ga:30dayus",{"_index":4174,"title":{},"content":{"574":{"position":[[784,13]]}},"keywords":{}}],["ga:7dayus",{"_index":4175,"title":{},"content":{"574":{"position":[[806,12]]}},"keywords":{}}],["ga:avgsessiondur",{"_index":4177,"title":{},"content":{"574":{"position":[[837,21]]}},"keywords":{}}],["ga:avgtimeonpag",{"_index":4179,"title":{},"content":{"574":{"position":[[871,16]]}},"keywords":{}}],["ga:bouncer",{"_index":4181,"title":{},"content":{"574":{"position":[[898,13]]}},"keywords":{}}],["ga:citi",{"_index":4169,"title":{},"content":{"574":{"position":[[725,7]]}},"keywords":{}}],["ga:contin",{"_index":4171,"title":{},"content":{"574":{"position":[[746,12]]}},"keywords":{}}],["ga:countri",{"_index":4173,"title":{},"content":{"574":{"position":[[773,10]]}},"keywords":{}}],["ga:dat",{"_index":4165,"title":{},"content":{"574":{"position":[[615,7],[798,7]]}},"keywords":{}}],["ga:devicecategori",{"_index":4176,"title":{},"content":{"574":{"position":[[819,17]]}},"keywords":{}}],["ga:entr",{"_index":4185,"title":{},"content":{"574":{"position":[[956,12]]}},"keywords":{}}],["ga:entrancer",{"_index":4183,"title":{},"content":{"574":{"position":[[921,15]]}},"keywords":{}}],["ga:exit",{"_index":4187,"title":{},"content":{"574":{"position":[[981,8]]}},"keywords":{}}],["ga:hostnam",{"_index":4178,"title":{},"content":{"574":{"position":[[859,11]]}},"keywords":{}}],["ga:medium",{"_index":4180,"title":{},"content":{"574":{"position":[[888,9]]}},"keywords":{}}],["ga:metro",{"_index":4182,"title":{},"content":{"574":{"position":[[912,8]]}},"keywords":{}}],["ga:newus",{"_index":4189,"title":{},"content":{"574":{"position":[[1000,11]]}},"keywords":{}}],["ga:operatingsystem",{"_index":4184,"title":{},"content":{"574":{"position":[[937,18]]}},"keywords":{}}],["ga:pagepath",{"_index":4186,"title":{},"content":{"574":{"position":[[969,11]]}},"keywords":{}}],["ga:pageview",{"_index":4191,"title":{},"content":{"574":{"position":[[1029,12]]}},"keywords":{}}],["ga:pageviewspersess",{"_index":4193,"title":{},"content":{"574":{"position":[[1052,22]]}},"keywords":{}}],["ga:region",{"_index":4188,"title":{},"content":{"574":{"position":[[990,9]]}},"keywords":{}}],["ga:seg",{"_index":4227,"title":{},"content":{"585":{"position":[[529,10]]}},"keywords":{}}],["ga:sess",{"_index":4195,"title":{},"content":{"574":{"position":[[1091,11]]}},"keywords":{}}],["ga:sessionsperus",{"_index":4196,"title":{},"content":{"574":{"position":[[1103,18]]}},"keywords":{}}],["ga:socialnetwork",{"_index":4190,"title":{},"content":{"574":{"position":[[1012,16]]}},"keywords":{}}],["ga:sourc",{"_index":4192,"title":{},"content":{"574":{"position":[[1042,9]]}},"keywords":{}}],["ga:subcontin",{"_index":4194,"title":{},"content":{"574":{"position":[[1075,15]]}},"keywords":{}}],["ga:uniquepageview",{"_index":4197,"title":{},"content":{"574":{"position":[[1122,18]]}},"keywords":{}}],["ga:us",{"_index":4198,"title":{},"content":{"574":{"position":[[1141,8]]}},"keywords":{}}],["gain",{"_index":2615,"title":{},"content":{"241":{"position":[[328,6]]},"322":{"position":[[144,4]]}},"keywords":{}}],["galaxi",{"_index":6408,"title":{},"content":{"1417":{"position":[[50,6],[90,6]]},"1420":{"position":[[127,6],[252,6],[307,6]]},"1423":{"position":[[11,6],[274,7]]}},"keywords":{}}],["gaql",{"_index":4103,"title":{},"content":{"550":{"position":[[543,4]]},"556":{"position":[[1029,4],[1113,4]]},"558":{"position":[[71,6]]}},"keywords":{}}],["gateway",{"_index":3761,"title":{},"content":{"454":{"position":[[217,7]]}},"keywords":{}}],["gatewaysproduct",{"_index":5363,"title":{},"content":{"1096":{"position":[[166,15]]}},"keywords":{}}],["gather",{"_index":2017,"title":{},"content":{"173":{"position":[[221,6]]},"174":{"position":[[441,8]]},"239":{"position":[[468,8]]}},"keywords":{}}],["gazett",{"_index":3119,"title":{},"content":{"320":{"position":[[355,8],[483,8],[723,7],[825,7],[966,7],[1238,7],[1470,7]]}},"keywords":{}}],["gazette’",{"_index":3120,"title":{},"content":{"320":{"position":[[507,9]]}},"keywords":{}}],["gc",{"_index":1991,"title":{"1210":{"position":[[20,3]]},"1217":{"position":[[31,3]]}},"content":{"171":{"position":[[50,3]]},"543":{"position":[[36,3]]},"544":{"position":[[250,3]]},"546":{"position":[[1256,3]]},"547":{"position":[[30,3],[1099,3]]},"548":{"position":[[308,3]]},"1120":{"position":[[444,3],[499,3],[652,3],[707,3]]},"1176":{"position":[[389,3]]},"1179":{"position":[[316,3],[566,3],[640,3],[690,3]]},"1180":{"position":[[154,3]]},"1211":{"position":[[40,3],[122,3],[203,3]]},"1214":{"position":[[104,3]]},"1218":{"position":[[40,3],[122,3],[203,3]]},"1221":{"position":[[104,3]]}},"keywords":{}}],["gcloud",{"_index":1164,"title":{},"content":{"82":{"position":[[1607,6]]}},"keywords":{}}],["gcp",{"_index":1165,"title":{},"content":{"82":{"position":[[1760,3],[3287,3],[4084,3]]},"191":{"position":[[2000,4]]},"223":{"position":[[818,4]]},"240":{"position":[[1961,4]]},"475":{"position":[[229,3]]},"482":{"position":[[87,3]]},"597":{"position":[[192,3]]},"1277":{"position":[[315,3]]},"1278":{"position":[[174,3]]},"1298":{"position":[[818,4]]},"1303":{"position":[[1130,3]]},"1346":{"position":[[818,4]]},"1383":{"position":[[1948,4]]}},"keywords":{}}],["gcp_km",{"_index":1177,"title":{},"content":{"82":{"position":[[2430,8],[4571,8]]}},"keywords":{}}],["gcs:dev",{"_index":3297,"title":{},"content":{"363":{"position":[[1060,7]]},"546":{"position":[[89,7]]}},"keywords":{}}],["gener",{"_index":422,"title":{"64":{"position":[[16,11]]},"157":{"position":[[0,11]]},"221":{"position":[[0,7]]},"227":{"position":[[27,8]]},"249":{"position":[[3,8]]},"849":{"position":[[0,7]]}},"content":{"14":{"position":[[153,9]]},"20":{"position":[[439,8]]},"25":{"position":[[95,8],[164,9]]},"33":{"position":[[245,9]]},"54":{"position":[[241,9],[367,9],[469,9]]},"63":{"position":[[404,9],[486,11]]},"64":{"position":[[781,8]]},"67":{"position":[[568,9],[705,9],[973,9]]},"70":{"position":[[389,8]]},"74":{"position":[[858,9]]},"75":{"position":[[39,10],[244,9],[395,9]]},"81":{"position":[[810,8]]},"94":{"position":[[556,9],[581,10],[971,9],[996,10]]},"101":{"position":[[189,9]]},"103":{"position":[[202,9],[302,9],[403,8],[470,8],[661,8]]},"104":{"position":[[32,9],[207,9]]},"119":{"position":[[514,9]]},"145":{"position":[[154,7]]},"148":{"position":[[180,7]]},"151":{"position":[[161,7]]},"157":{"position":[[63,8],[205,8],[339,8]]},"158":{"position":[[621,9]]},"183":{"position":[[1648,8]]},"190":{"position":[[1614,9]]},"192":{"position":[[1790,9],[2043,8]]},"193":{"position":[[691,11]]},"197":{"position":[[1577,9]]},"208":{"position":[[1379,9]]},"210":{"position":[[455,9]]},"221":{"position":[[1196,8]]},"222":{"position":[[441,8]]},"223":{"position":[[407,8],[676,8],[975,9]]},"224":{"position":[[460,8],[925,9]]},"228":{"position":[[849,8]]},"229":{"position":[[554,8]]},"232":{"position":[[440,9]]},"234":{"position":[[198,9]]},"236":{"position":[[432,9],[2112,9],[2692,8]]},"237":{"position":[[2956,9],[3453,10]]},"238":{"position":[[766,9]]},"239":{"position":[[1258,9]]},"247":{"position":[[268,9]]},"249":{"position":[[77,8]]},"270":{"position":[[1672,8],[1711,9]]},"279":{"position":[[711,9]]},"281":{"position":[[681,8],[705,9]]},"284":{"position":[[530,10]]},"288":{"position":[[533,9]]},"290":{"position":[[1278,9]]},"296":{"position":[[3674,8],[3742,8],[4229,9],[4418,9],[4703,9],[4902,9]]},"301":{"position":[[1398,9]]},"306":{"position":[[493,8]]},"310":{"position":[[79,9]]},"315":{"position":[[36,8],[160,8],[260,9],[708,9],[908,9]]},"320":{"position":[[1410,10]]},"323":{"position":[[1124,9]]},"349":{"position":[[309,9]]},"387":{"position":[[955,10]]},"448":{"position":[[898,9]]},"489":{"position":[[161,8],[280,8],[457,8]]},"492":{"position":[[205,9]]},"494":{"position":[[12,9]]},"515":{"position":[[593,8]]},"517":{"position":[[588,10],[1103,7],[1317,7],[1545,9],[1806,7],[2710,9],[3871,9]]},"522":{"position":[[110,10]]},"530":{"position":[[110,10]]},"534":{"position":[[1562,9]]},"550":{"position":[[511,8]]},"554":{"position":[[566,9]]},"558":{"position":[[92,9],[157,10]]},"569":{"position":[[129,10]]},"571":{"position":[[586,8]]},"573":{"position":[[543,9]]},"581":{"position":[[453,10]]},"582":{"position":[[96,10],[197,8]]},"584":{"position":[[474,9]]},"591":{"position":[[220,9]]},"595":{"position":[[1740,9]]},"607":{"position":[[127,10]]},"609":{"position":[[208,8]]},"614":{"position":[[112,10]]},"617":{"position":[[508,8]]},"619":{"position":[[448,9]]},"625":{"position":[[112,10]]},"645":{"position":[[152,8]]},"652":{"position":[[152,8]]},"660":{"position":[[562,9]]},"662":{"position":[[161,8],[280,8],[457,8]]},"665":{"position":[[205,9]]},"670":{"position":[[313,9]]},"675":{"position":[[142,9]]},"677":{"position":[[161,8],[280,8],[457,8]]},"680":{"position":[[205,9]]},"690":{"position":[[174,9]]},"692":{"position":[[161,8],[280,8],[457,8]]},"695":{"position":[[205,9]]},"700":{"position":[[110,10]]},"706":{"position":[[110,10]]},"712":{"position":[[368,8]]},"718":{"position":[[110,8]]},"720":{"position":[[608,9]]},"724":{"position":[[656,8]]},"728":{"position":[[370,9],[488,9]]},"757":{"position":[[1003,7]]},"761":{"position":[[190,9]]},"762":{"position":[[168,8]]},"763":{"position":[[409,10]]},"770":{"position":[[1003,7]]},"774":{"position":[[190,9]]},"775":{"position":[[168,8]]},"776":{"position":[[409,10]]},"797":{"position":[[1003,7]]},"801":{"position":[[196,9]]},"802":{"position":[[168,8]]},"803":{"position":[[415,10]]},"805":{"position":[[260,9]]},"812":{"position":[[1003,7]]},"816":{"position":[[196,9]]},"817":{"position":[[168,8]]},"818":{"position":[[415,10]]},"820":{"position":[[260,9]]},"828":{"position":[[1003,7]]},"832":{"position":[[196,9]]},"833":{"position":[[168,8]]},"834":{"position":[[415,10]]},"836":{"position":[[260,9]]},"839":{"position":[[241,9]]},"840":{"position":[[1926,8]]},"848":{"position":[[278,9]]},"849":{"position":[[3045,8]]},"857":{"position":[[248,9]]},"859":{"position":[[570,9]]},"959":{"position":[[117,10]]},"982":{"position":[[119,10]]},"988":{"position":[[243,9]]},"989":{"position":[[561,8]]},"991":{"position":[[627,9]]},"997":{"position":[[94,9]]},"1003":{"position":[[243,9]]},"1004":{"position":[[644,8]]},"1008":{"position":[[1192,8]]},"1009":{"position":[[690,9]]},"1076":{"position":[[685,9]]},"1083":{"position":[[243,8]]},"1085":{"position":[[551,9],[827,9]]},"1091":{"position":[[1,8]]},"1107":{"position":[[206,9]]},"1118":{"position":[[480,9]]},"1131":{"position":[[222,8]]},"1133":{"position":[[236,10],[900,9]]},"1176":{"position":[[175,9]]},"1204":{"position":[[322,10]]},"1209":{"position":[[333,8]]},"1228":{"position":[[381,10]]},"1245":{"position":[[460,8]]},"1275":{"position":[[334,9]]},"1277":{"position":[[569,10]]},"1292":{"position":[[896,7],[938,8],[979,9]]},"1298":{"position":[[407,8],[676,8],[975,9]]},"1306":{"position":[[896,7],[938,8],[979,9]]},"1322":{"position":[[441,8]]},"1329":{"position":[[896,7],[938,8],[979,9]]},"1335":{"position":[[441,8]]},"1346":{"position":[[407,8],[676,8],[975,9]]},"1354":{"position":[[56,9]]},"1370":{"position":[[1167,9]]},"1379":{"position":[[2153,7]]},"1384":{"position":[[210,8],[248,8],[353,8],[1110,9]]},"1403":{"position":[[2153,7]]},"1414":{"position":[[2153,7]]},"1439":{"position":[[509,8]]}},"keywords":{}}],["generateand",{"_index":970,"title":{},"content":{"64":{"position":[[825,11]]}},"keywords":{}}],["generated.access",{"_index":3934,"title":{},"content":{"515":{"position":[[186,16]]},"571":{"position":[[231,16]]},"609":{"position":[[57,16]]},"617":{"position":[[183,16]]}},"keywords":{}}],["generated.edit",{"_index":5911,"title":{},"content":{"1245":{"position":[[125,14]]}},"keywords":{}}],["genrsa",{"_index":6366,"title":{},"content":{"1384":{"position":[[279,6]]}},"keywords":{}}],["geomcollectio",{"_index":6002,"title":{},"content":{"1292":{"position":[[1014,13]]},"1306":{"position":[[1014,13]]},"1329":{"position":[[1014,13]]}},"keywords":{}}],["geometri",{"_index":6003,"title":{},"content":{"1292":{"position":[[1057,8]]},"1306":{"position":[[1057,8]]},"1329":{"position":[[1057,8]]}},"keywords":{}}],["geometrycol",{"_index":6006,"title":{},"content":{"1292":{"position":[[1095,13]]},"1306":{"position":[[1095,13]]},"1329":{"position":[[1095,13]]}},"keywords":{}}],["get",{"_index":1695,"title":{},"content":{"124":{"position":[[458,4]]},"197":{"position":[[1177,4]]},"254":{"position":[[2967,4]]},"307":{"position":[[2962,4]]}},"keywords":{}}],["get_format",{"_index":6008,"title":{},"content":{"1292":{"position":[[1175,10]]},"1306":{"position":[[1175,10]]},"1329":{"position":[[1175,10]]}},"keywords":{}}],["get_master_pu",{"_index":6010,"title":{},"content":{"1292":{"position":[[1222,13]]},"1306":{"position":[[1222,13]]},"1329":{"position":[[1222,13]]}},"keywords":{}}],["get_source_pu",{"_index":6013,"title":{},"content":{"1292":{"position":[[1284,13]]},"1306":{"position":[[1284,13]]},"1329":{"position":[[1284,13]]}},"keywords":{}}],["ghcr.io/estuary/azur",{"_index":3291,"title":{},"content":{"363":{"position":[[731,21]]}},"keywords":{}}],["ghcr.io/estuary/materi",{"_index":1124,"title":{},"content":{"81":{"position":[[1248,27],[2606,27]]},"120":{"position":[[502,27]]},"307":{"position":[[1555,27],[2423,27]]},"309":{"position":[[2374,27],[2981,27]]},"344":{"position":[[256,27]]},"1120":{"position":[[32,27],[111,27],[191,27],[273,27],[377,27],[471,27],[565,27],[679,27],[758,27],[831,27],[911,27],[989,27],[1069,27],[1154,27],[1247,27],[1337,27],[1411,27],[1483,27],[1553,27],[1628,27],[1700,27],[1773,27],[1845,27],[1918,27],[1995,27]]},"1126":{"position":[[82,27]]},"1139":{"position":[[70,27]]},"1180":{"position":[[231,27]]},"1189":{"position":[[272,27]]},"1197":{"position":[[138,27]]},"1207":{"position":[[363,27]]},"1241":{"position":[[124,27]]},"1248":{"position":[[302,27]]},"1254":{"position":[[74,27]]},"1270":{"position":[[70,27]]},"1287":{"position":[[70,27]]},"1302":{"position":[[70,27]]},"1314":{"position":[[70,27]]},"1326":{"position":[[70,27]]},"1338":{"position":[[70,27]]},"1349":{"position":[[70,27]]},"1357":{"position":[[213,27]]},"1363":{"position":[[82,27]]},"1368":{"position":[[70,27]]},"1377":{"position":[[70,27]]},"1387":{"position":[[312,27],[938,27]]},"1401":{"position":[[70,27]]},"1412":{"position":[[70,27]]},"1421":{"position":[[299,27]]},"1428":{"position":[[70,27]]},"1472":{"position":[[682,27]]},"1480":{"position":[[439,27]]}},"keywords":{}}],["ghcr.io/estuary/sourc",{"_index":838,"title":{},"content":{"56":{"position":[[1154,22]]},"81":{"position":[[300,22]]},"83":{"position":[[975,22]]},"307":{"position":[[1087,22],[1937,22]]},"360":{"position":[[67,22]]},"363":{"position":[[221,22],[286,22],[359,22],[433,22],[513,22],[590,22],[656,22],[810,22],[885,22],[958,22],[1037,22],[1108,22],[1189,22],[1277,22],[1363,22],[1445,22],[1527,22],[1600,22],[1679,22],[1747,22],[1811,22],[1873,22],[1940,22],[2031,22],[2102,22],[2167,22]]},"364":{"position":[[687,22],[756,22],[825,22],[891,22],[1036,22],[1120,22],[1199,22],[1266,22],[1398,22],[1478,22],[1581,22],[1673,22],[1759,22],[1903,22],[1969,22],[2037,22],[2106,22],[2372,22],[2450,22],[2529,22],[2732,22],[2798,22],[2952,22],[3044,22],[3114,22],[3180,22],[3243,22],[3308,22],[3374,22],[3444,22],[3514,22],[3584,22],[3663,22]]},"388":{"position":[[136,22]]},"393":{"position":[[126,22]]},"398":{"position":[[126,22]]},"403":{"position":[[66,22]]},"418":{"position":[[66,22]]},"425":{"position":[[67,22]]},"433":{"position":[[108,22],[519,22]]},"449":{"position":[[136,22]]},"455":{"position":[[67,22]]},"461":{"position":[[67,22]]},"467":{"position":[[67,22]]},"473":{"position":[[136,22]]},"497":{"position":[[66,22]]},"503":{"position":[[66,22]]},"510":{"position":[[66,22]]},"518":{"position":[[136,22]]},"527":{"position":[[136,22]]},"535":{"position":[[136,22]]},"541":{"position":[[67,22]]},"546":{"position":[[66,22]]},"557":{"position":[[136,22]]},"566":{"position":[[66,22]]},"575":{"position":[[122,22]]},"586":{"position":[[122,22]]},"594":{"position":[[66,22]]},"612":{"position":[[136,22]]},"620":{"position":[[66,22]]},"626":{"position":[[67,22]]},"632":{"position":[[67,22]]},"638":{"position":[[66,22]]},"647":{"position":[[66,22]]},"655":{"position":[[66,22]]},"671":{"position":[[67,22]]},"686":{"position":[[127,22]]},"701":{"position":[[67,22]]},"707":{"position":[[67,22]]},"713":{"position":[[67,22]]},"721":{"position":[[136,22]]},"736":{"position":[[66,22]]},"742":{"position":[[67,22]]},"748":{"position":[[67,22]]},"758":{"position":[[126,22]]},"771":{"position":[[126,22]]},"783":{"position":[[66,22]]},"798":{"position":[[126,22]]},"813":{"position":[[126,22]]},"829":{"position":[[126,22]]},"843":{"position":[[67,22]]},"852":{"position":[[67,22]]},"860":{"position":[[136,22]]},"868":{"position":[[66,22]]},"880":{"position":[[66,22]]},"886":{"position":[[67,22]]},"892":{"position":[[66,22]]},"960":{"position":[[67,22]]},"983":{"position":[[67,22]]},"992":{"position":[[66,22]]},"998":{"position":[[67,22]]},"1010":{"position":[[136,22]]},"1016":{"position":[[67,22]]},"1029":{"position":[[67,22]]},"1037":{"position":[[67,22]]},"1071":{"position":[[136,22]]},"1078":{"position":[[66,22]]},"1086":{"position":[[148,22]]},"1102":{"position":[[67,22]]},"1108":{"position":[[66,22]]},"1114":{"position":[[67,22]]},"1134":{"position":[[66,22]]}},"keywords":{}}],["ghrc.io/estuary/sourc",{"_index":3317,"title":{},"content":{"364":{"position":[[546,22],[616,22],[957,22],[1330,22],[1834,22],[2174,22],[2238,22],[2301,22],[2597,22],[2664,22],[2874,22]]}},"keywords":{}}],["gib",{"_index":5721,"title":{},"content":{"1144":{"position":[[673,4]]},"1170":{"position":[[673,4]]},"1213":{"position":[[528,4]]},"1220":{"position":[[528,4]]}},"keywords":{}}],["gib/day",{"_index":5022,"title":{},"content":{"912":{"position":[[964,7]]}},"keywords":{}}],["gigabyt",{"_index":249,"title":{},"content":{"7":{"position":[[541,9]]},"253":{"position":[[828,9]]},"313":{"position":[[828,9]]}},"keywords":{}}],["git",{"_index":655,"title":{},"content":{"31":{"position":[[310,3]]}},"keywords":{}}],["github",{"_index":894,"title":{"528":{"position":[[0,6]]},"531":{"position":[[34,6]]}},"content":{"58":{"position":[[805,6]]},"87":{"position":[[724,6]]},"136":{"position":[[33,6]]},"169":{"position":[[1214,6]]},"175":{"position":[[371,6]]},"179":{"position":[[104,7]]},"266":{"position":[[514,7]]},"364":{"position":[[1236,6]]},"472":{"position":[[250,6]]},"522":{"position":[[394,6]]},"525":{"position":[[250,6]]},"529":{"position":[[57,6]]},"530":{"position":[[41,6],[394,6]]},"531":{"position":[[3,6],[155,6],[284,7],[570,6]]},"532":{"position":[[3,6],[122,6]]},"533":{"position":[[250,6]]},"534":{"position":[[290,6],[518,6],[886,6],[1117,6],[1161,6],[1458,6],[1753,6]]},"659":{"position":[[52,7]]},"660":{"position":[[112,7],[1066,6]]}},"keywords":{}}],["github:dev",{"_index":3337,"title":{},"content":{"364":{"position":[[1289,10]]},"535":{"position":[[159,10]]}},"keywords":{}}],["gitlab",{"_index":2043,"title":{"519":{"position":[[0,6]]},"523":{"position":[[34,6]]}},"content":{"179":{"position":[[96,7]]},"266":{"position":[[506,7]]},"520":{"position":[[53,6]]},"521":{"position":[[216,6],[293,6]]},"522":{"position":[[41,6]]},"523":{"position":[[3,6]]},"524":{"position":[[3,6],[66,6]]}},"keywords":{}}],["gitlab.com",{"_index":4011,"title":{},"content":{"521":{"position":[[236,10],[313,10]]}},"keywords":{}}],["gitlab:dev",{"_index":4016,"title":{},"content":{"527":{"position":[[159,10]]}},"keywords":{}}],["gitop",{"_index":965,"title":{"81":{"position":[[0,6]]}},"content":{"64":{"position":[[527,6]]},"323":{"position":[[2016,6]]},"548":{"position":[[338,6]]}},"keywords":{}}],["gitpod",{"_index":2045,"title":{"267":{"position":[[17,7]]},"268":{"position":[[24,7]]},"269":{"position":[[31,7]]}},"content":{"179":{"position":[[162,7]]},"183":{"position":[[497,6],[681,6],[4693,7]]},"266":{"position":[[339,7],[403,6]]},"267":{"position":[[36,7],[865,6],[1049,6],[1805,7],[1872,6],[2077,6]]},"270":{"position":[[60,7]]}},"keywords":{}}],["give",{"_index":379,"title":{},"content":{"13":{"position":[[215,5]]},"106":{"position":[[721,4]]},"115":{"position":[[1539,4]]},"180":{"position":[[32,4]]},"183":{"position":[[318,4],[2331,4]]},"267":{"position":[[692,4]]},"268":{"position":[[1332,4]]},"269":{"position":[[903,4]]},"270":{"position":[[1570,4]]},"295":{"position":[[1110,4]]},"314":{"position":[[2563,4]]},"332":{"position":[[390,6]]},"840":{"position":[[567,4],[946,4],[1685,4],[2183,4]]},"849":{"position":[[1038,4],[1559,4],[2726,4],[3323,4]]}},"keywords":{}}],["given",{"_index":42,"title":{},"content":{"1":{"position":[[538,5],[824,5]]},"26":{"position":[[176,5]]},"42":{"position":[[403,5]]},"45":{"position":[[455,5]]},"66":{"position":[[444,5]]},"67":{"position":[[1398,5]]},"69":{"position":[[608,6]]},"74":{"position":[[405,5]]},"82":{"position":[[1340,5]]},"89":{"position":[[109,5]]},"96":{"position":[[305,5]]},"99":{"position":[[767,5]]},"107":{"position":[[795,5],[2315,5]]},"120":{"position":[[2703,5]]},"124":{"position":[[546,5]]},"125":{"position":[[1302,5]]},"129":{"position":[[302,5]]},"140":{"position":[[402,5]]},"154":{"position":[[499,5]]},"158":{"position":[[41,5]]},"163":{"position":[[332,5]]},"183":{"position":[[2062,5],[2078,5],[2675,5]]},"253":{"position":[[3186,5]]},"274":{"position":[[163,5]]},"296":{"position":[[2451,5]]},"309":{"position":[[1276,5]]},"326":{"position":[[721,5],[1093,5]]},"374":{"position":[[369,5]]},"390":{"position":[[80,5]]},"483":{"position":[[100,5]]},"491":{"position":[[421,5]]},"492":{"position":[[133,5]]},"558":{"position":[[265,5]]},"590":{"position":[[205,5]]},"660":{"position":[[770,5]]},"664":{"position":[[442,5],[677,5]]},"665":{"position":[[133,5]]},"679":{"position":[[421,5]]},"680":{"position":[[133,5]]},"694":{"position":[[421,5]]},"695":{"position":[[133,5]]},"849":{"position":[[1748,5]]},"1006":{"position":[[148,5]]},"1077":{"position":[[316,5]]},"1146":{"position":[[199,5]]},"1173":{"position":[[199,5]]},"1215":{"position":[[199,5]]},"1223":{"position":[[199,5]]},"1286":{"position":[[1959,5]]},"1301":{"position":[[1795,5]]},"1325":{"position":[[1959,5]]},"1358":{"position":[[564,5]]},"1443":{"position":[[79,5]]},"1461":{"position":[[1539,5],[5289,5]]},"1465":{"position":[[112,5]]},"1477":{"position":[[2685,5]]}},"keywords":{}}],["gladli",{"_index":3338,"title":{"536":{"position":[[0,6]]}},"content":{"364":{"position":[[1300,6]]},"537":{"position":[[74,7]]},"538":{"position":[[15,6],[54,6]]},"539":{"position":[[250,6]]}},"keywords":{}}],["gladly.dev",{"_index":3339,"title":{},"content":{"364":{"position":[[1353,10]]}},"keywords":{}}],["gladly:dev",{"_index":4053,"title":{},"content":{"541":{"position":[[90,10]]}},"keywords":{}}],["glob",{"_index":6296,"title":{},"content":{"1370":{"position":[[1187,4]]}},"keywords":{}}],["global",{"_index":199,"title":{"1462":{"position":[[0,6]]}},"content":{"6":{"position":[[66,6]]},"8":{"position":[[67,6]]},"27":{"position":[[200,8]]},"67":{"position":[[151,8],[578,8]]},"109":{"position":[[171,8]]},"264":{"position":[[343,6]]},"274":{"position":[[105,8]]},"338":{"position":[[262,6]]},"482":{"position":[[844,6]]},"1140":{"position":[[3610,6]]},"1281":{"position":[[296,6],[372,6]]},"1292":{"position":[[1348,6]]},"1295":{"position":[[296,6],[372,6]]},"1306":{"position":[[1348,6]]},"1316":{"position":[[3610,6]]},"1319":{"position":[[296,6],[372,6]]},"1329":{"position":[[1348,6]]},"1340":{"position":[[3610,6]]},"1351":{"position":[[3610,6]]},"1379":{"position":[[2246,6]]},"1403":{"position":[[2246,6]]},"1414":{"position":[[2246,6]]},"1431":{"position":[[3633,6]]},"1462":{"position":[[153,6],[185,8]]}},"keywords":{}}],["glue",{"_index":5761,"title":{},"content":{"1160":{"position":[[175,5],[268,5]]},"1165":{"position":[[253,4]]}},"keywords":{}}],["go",{"_index":679,"title":{},"content":{"34":{"position":[[723,5]]},"174":{"position":[[296,5]]},"183":{"position":[[101,2]]},"184":{"position":[[126,2]]},"190":{"position":[[1,2],[1827,2]]},"191":{"position":[[145,2]]},"192":{"position":[[2189,2]]},"204":{"position":[[748,5]]},"217":{"position":[[179,2]]},"228":{"position":[[76,2]]},"239":{"position":[[280,2]]},"240":{"position":[[3588,2]]},"254":{"position":[[977,2]]},"259":{"position":[[1,2],[1522,5],[1669,2],[3076,5]]},"263":{"position":[[111,2]]},"264":{"position":[[653,2]]},"266":{"position":[[77,2]]},"267":{"position":[[1949,2]]},"270":{"position":[[211,2]]},"271":{"position":[[30,2]]},"274":{"position":[[509,2]]},"284":{"position":[[20,2]]},"290":{"position":[[156,2]]},"295":{"position":[[674,5]]},"296":{"position":[[1666,5],[7617,2]]},"301":{"position":[[109,2]]},"310":{"position":[[294,5]]},"314":{"position":[[698,2],[2084,5]]},"377":{"position":[[826,2],[1031,2]]},"436":{"position":[[287,2]]},"486":{"position":[[320,2]]},"531":{"position":[[232,5]]},"658":{"position":[[320,2]]},"674":{"position":[[320,2]]},"689":{"position":[[320,2]]},"725":{"position":[[1,2]]},"726":{"position":[[419,2]]},"750":{"position":[[282,5]]},"766":{"position":[[282,5]]},"785":{"position":[[315,5]]},"789":{"position":[[316,5]]},"807":{"position":[[316,5]]},"823":{"position":[[316,5]]},"840":{"position":[[231,2],[889,2],[1611,2],[1952,2]]},"849":{"position":[[174,2],[1502,2],[2652,2],[3071,2]]},"856":{"position":[[1,2]]},"857":{"position":[[1,2]]},"895":{"position":[[276,2]]},"1020":{"position":[[183,5],[1293,5],[1831,5]]},"1067":{"position":[[1,2]]},"1140":{"position":[[3643,2]]},"1316":{"position":[[3643,2]]},"1340":{"position":[[3643,2]]},"1351":{"position":[[3643,2]]},"1379":{"position":[[2290,2]]},"1403":{"position":[[2290,2]]},"1414":{"position":[[2290,2]]},"1418":{"position":[[13,2]]},"1431":{"position":[[3666,2]]},"1448":{"position":[[985,2]]}},"keywords":{}}],["goal",{"_index":3066,"title":{},"content":{"313":{"position":[[3552,4]]}},"keywords":{}}],["goe",{"_index":1853,"title":{},"content":{"156":{"position":[[169,4]]},"1077":{"position":[[640,4]]}},"keywords":{}}],["gold",{"_index":4012,"title":{},"content":{"521":{"position":[[247,4],[324,4]]}},"keywords":{}}],["gone",{"_index":4650,"title":{},"content":{"763":{"position":[[81,4]]},"776":{"position":[[81,4]]},"803":{"position":[[81,4]]},"818":{"position":[[81,4]]},"834":{"position":[[81,4]]}},"keywords":{}}],["good",{"_index":1085,"title":{},"content":{"74":{"position":[[868,4]]},"110":{"position":[[603,4]]},"239":{"position":[[1,4]]},"253":{"position":[[1009,4]]},"295":{"position":[[3928,4]]},"296":{"position":[[7490,5]]},"313":{"position":[[1009,4]]},"478":{"position":[[248,4]]},"599":{"position":[[248,4]]},"1183":{"position":[[1086,5],[1538,5]]},"1461":{"position":[[4739,4]]}},"keywords":{}}],["goodfield",{"_index":1686,"title":{},"content":{"122":{"position":[[2250,11]]}},"keywords":{}}],["googl",{"_index":1150,"title":{"171":{"position":[[0,6]]},"223":{"position":[[10,6]]},"287":{"position":[[0,6]]},"319":{"position":[[16,6]]},"542":{"position":[[0,6]]},"548":{"position":[[20,6]]},"549":{"position":[[0,6]]},"553":{"position":[[34,6]]},"561":{"position":[[0,6]]},"567":{"position":[[0,6]]},"570":{"position":[[34,6]]},"579":{"position":[[0,6]]},"589":{"position":[[0,6]]},"596":{"position":[[0,6]]},"604":{"position":[[0,6]]},"608":{"position":[[34,6]]},"613":{"position":[[0,6]]},"615":{"position":[[34,6]]},"806":{"position":[[0,6]]},"928":{"position":[[0,6]]},"1056":{"position":[[0,6]]},"1175":{"position":[[0,6]]},"1210":{"position":[[13,6]]},"1217":{"position":[[24,6]]},"1225":{"position":[[0,6]]},"1242":{"position":[[0,6]]},"1294":{"position":[[0,6]]},"1297":{"position":[[24,6]]},"1342":{"position":[[0,6]]},"1345":{"position":[[24,6]]},"1395":{"position":[[0,6]]},"1397":{"position":[[6,6]]}},"content":{"82":{"position":[[609,6],[1488,6],[1529,6]]},"136":{"position":[[11,7]]},"170":{"position":[[182,6]]},"174":{"position":[[23,6]]},"179":{"position":[[540,6]]},"223":{"position":[[57,6],[629,6],[710,6]]},"288":{"position":[[303,6],[330,6]]},"289":{"position":[[150,6]]},"290":{"position":[[343,6]]},"295":{"position":[[61,6],[1088,6]]},"296":{"position":[[7255,6],[7315,6]]},"319":{"position":[[152,6]]},"329":{"position":[[663,6]]},"363":{"position":[[993,6],[1068,6],[1145,6],[1212,6],[1230,6],[1300,6]]},"364":{"position":[[1364,6],[1421,6],[1436,6],[1501,6],[1531,6],[1604,6],[1628,6],[1696,6],[1722,6],[1782,6]]},"367":{"position":[[878,6]]},"370":{"position":[[1785,6]]},"475":{"position":[[70,6],[114,6]]},"477":{"position":[[552,6],[799,6]]},"478":{"position":[[50,6],[410,6]]},"543":{"position":[[93,6],[220,6]]},"545":{"position":[[580,6],[643,6]]},"548":{"position":[[17,6]]},"550":{"position":[[109,6]]},"551":{"position":[[41,6]]},"552":{"position":[[50,6],[124,6],[400,6]]},"553":{"position":[[13,6],[68,6],[106,6],[208,6]]},"554":{"position":[[13,6],[68,6],[124,6],[145,6],[178,6],[333,6]]},"555":{"position":[[247,6]]},"556":{"position":[[457,6],[534,6],[624,6],[741,6],[863,6],[2250,6]]},"557":{"position":[[159,6]]},"558":{"position":[[39,6],[271,6]]},"560":{"position":[[8,6]]},"562":{"position":[[69,6],[155,6],[264,6]]},"563":{"position":[[20,6],[314,6]]},"564":{"position":[[137,6]]},"565":{"position":[[91,6],[170,6]]},"566":{"position":[[89,6]]},"569":{"position":[[41,6],[75,6]]},"570":{"position":[[22,6],[109,6]]},"571":{"position":[[22,6],[104,6],[125,6],[173,6],[191,6],[262,6],[350,6],[371,6],[411,6],[506,6],[834,6]]},"572":{"position":[[250,6]]},"573":{"position":[[857,6],[935,6],[1352,6]]},"574":{"position":[[136,6],[392,6]]},"575":{"position":[[145,6]]},"577":{"position":[[5,6]]},"578":{"position":[[9,6],[143,6],[411,6]]},"581":{"position":[[42,6],[84,6],[183,6],[239,6],[327,7],[350,6]]},"582":{"position":[[55,6],[121,6],[447,6]]},"583":{"position":[[240,6]]},"584":{"position":[[113,6],[612,6],[857,6],[1074,6],[1420,6]]},"585":{"position":[[136,6]]},"586":{"position":[[145,6]]},"588":{"position":[[5,6]]},"591":{"position":[[17,6]]},"593":{"position":[[91,6]]},"597":{"position":[[70,6],[113,6]]},"598":{"position":[[516,6],[762,6]]},"599":{"position":[[50,6],[410,6]]},"601":{"position":[[82,6],[193,6]]},"606":{"position":[[88,6],[419,6],[453,6]]},"607":{"position":[[41,6],[73,6]]},"608":{"position":[[15,6],[59,6],[183,6]]},"609":{"position":[[17,6],[81,6]]},"610":{"position":[[250,6]]},"611":{"position":[[563,6],[748,6],[1240,6]]},"612":{"position":[[159,6]]},"614":{"position":[[41,6]]},"615":{"position":[[13,6],[78,6]]},"617":{"position":[[13,6],[73,6],[91,6],[125,6],[143,6],[292,6],[310,6],[336,6],[428,6],[738,6]]},"618":{"position":[[250,6]]},"619":{"position":[[166,6],[207,6],[225,6],[660,6]]},"620":{"position":[[89,6]]},"808":{"position":[[696,6]]},"931":{"position":[[635,6]]},"1120":{"position":[[1030,6],[1110,6],[1182,6],[1200,6],[1275,6]]},"1136":{"position":[[432,6]]},"1138":{"position":[[1076,6]]},"1176":{"position":[[44,6],[130,6]]},"1177":{"position":[[80,6]]},"1179":{"position":[[106,6]]},"1211":{"position":[[135,6]]},"1218":{"position":[[135,6]]},"1226":{"position":[[40,6],[70,6]]},"1227":{"position":[[100,6],[170,6],[200,6]]},"1228":{"position":[[107,6],[185,6],[215,6],[316,6]]},"1229":{"position":[[113,6]]},"1230":{"position":[[126,7],[466,6]]},"1233":{"position":[[9,6]]},"1234":{"position":[[1,6]]},"1243":{"position":[[658,6],[1065,6],[1115,6],[1184,6]]},"1244":{"position":[[46,6]]},"1245":{"position":[[15,6],[33,6],[67,6],[85,6],[244,6],[262,6],[288,6],[380,6],[683,6]]},"1246":{"position":[[113,6]]},"1247":{"position":[[297,7]]},"1248":{"position":[[330,6]]},"1282":{"position":[[206,6]]},"1288":{"position":[[180,6]]},"1289":{"position":[[613,6]]},"1298":{"position":[[57,6],[629,6],[710,6]]},"1310":{"position":[[221,6]]},"1346":{"position":[[57,6],[629,6],[710,6]]}},"keywords":{}}],["google'",{"_index":4059,"title":{},"content":{"543":{"position":[[342,8]]},"554":{"position":[[414,8]]},"556":{"position":[[495,8],[1198,8]]},"558":{"position":[[187,8]]},"560":{"position":[[360,8]]},"570":{"position":[[72,8]]},"571":{"position":[[72,8]]}},"keywords":{}}],["googlecredenti",{"_index":4060,"title":{},"content":{"545":{"position":[[624,18]]},"546":{"position":[[123,18]]},"548":{"position":[[1343,19]]},"594":{"position":[[111,18]]}},"keywords":{}}],["googlecredentials_sop",{"_index":4086,"title":{},"content":{"548":{"position":[[845,23]]}},"keywords":{}}],["goto",{"_index":5681,"title":{},"content":{"1140":{"position":[[3676,4]]},"1316":{"position":[[3676,4]]},"1340":{"position":[[3676,4]]},"1351":{"position":[[3676,4]]},"1379":{"position":[[2328,4]]},"1403":{"position":[[2328,4]]},"1414":{"position":[[2328,4]]},"1431":{"position":[[3699,4]]}},"keywords":{}}],["govern",{"_index":2242,"title":{},"content":{"208":{"position":[[109,6]]}},"keywords":{}}],["grab",{"_index":2603,"title":{},"content":{"240":{"position":[[2782,4]]}},"keywords":{}}],["gracefulli",{"_index":1495,"title":{},"content":{"105":{"position":[[1033,10]]},"867":{"position":[[1529,10]]}},"keywords":{}}],["grain",{"_index":1582,"title":{},"content":{"110":{"position":[[1418,5]]},"260":{"position":[[15,5]]},"1036":{"position":[[1094,7]]}},"keywords":{}}],["grant",{"_index":1189,"title":{"944":{"position":[[3,5]]}},"content":{"82":{"position":[[3258,5]]},"154":{"position":[[47,7],[289,6],[389,7],[471,5],[818,7]]},"171":{"position":[[16,5]]},"172":{"position":[[16,5]]},"173":{"position":[[16,5],[566,5],[708,5],[1197,8]]},"191":{"position":[[852,5],[1262,5],[1334,5],[1623,5],[1662,5],[1753,5],[1786,5],[2028,5]]},"221":{"position":[[1680,5]]},"236":{"position":[[2918,5],[3411,5]]},"237":{"position":[[401,7],[629,5],[671,8],[941,5],[1533,5]]},"240":{"position":[[813,5],[1223,5],[1295,5],[1584,5],[1623,5],[1714,5],[1747,5],[1989,5]]},"288":{"position":[[698,6]]},"299":{"position":[[613,6]]},"337":{"position":[[25,5],[103,7],[287,7],[421,7]]},"338":{"position":[[101,7],[152,7],[387,7]]},"339":{"position":[[170,7]]},"341":{"position":[[218,5],[289,6]]},"367":{"position":[[439,5],[542,5],[673,5]]},"415":{"position":[[166,5]]},"477":{"position":[[163,5],[840,8],[999,7]]},"478":{"position":[[113,7]]},"531":{"position":[[463,5]]},"532":{"position":[[276,5]]},"556":{"position":[[852,7]]},"571":{"position":[[619,5],[857,5]]},"582":{"position":[[232,5],[474,5]]},"598":{"position":[[123,6],[803,8],[960,7]]},"599":{"position":[[113,7]]},"609":{"position":[[436,5]]},"617":{"position":[[543,5]]},"645":{"position":[[390,5]]},"652":{"position":[[390,5]]},"752":{"position":[[686,5],[756,5],[795,5]]},"753":{"position":[[220,6],[1342,5],[1412,5],[1451,5]]},"767":{"position":[[2019,5],[2089,5],[2128,5]]},"791":{"position":[[691,5],[761,5],[800,5]]},"792":{"position":[[278,8],[2011,5],[2081,5],[2120,5]]},"793":{"position":[[92,8],[214,6],[1365,5],[1435,5],[1474,5]]},"808":{"position":[[92,8],[1311,5],[1381,5],[1420,5]]},"824":{"position":[[92,8],[2133,5],[2203,5],[2242,5]]},"838":{"position":[[47,5]]},"847":{"position":[[390,5]]},"864":{"position":[[261,5],[312,5],[391,5],[450,5],[541,5],[596,5],[691,5],[943,5],[1050,5],[1098,5],[1147,5],[1196,5],[1241,5],[1285,5],[1323,5]]},"876":{"position":[[261,5],[312,5],[391,5],[450,5],[541,5],[596,5],[691,5],[808,5],[867,5]]},"904":{"position":[[92,8],[1500,5],[1539,5],[1642,5],[1773,5]]},"917":{"position":[[439,5],[550,5],[590,5],[673,5],[907,5],[1148,5],[1282,5]]},"918":{"position":[[278,8],[1792,5],[1831,5],[1934,5],[2065,5]]},"919":{"position":[[92,8],[214,6],[974,5],[1087,5],[1127,5],[1204,5],[1432,5],[1733,5],[1773,5],[1850,5],[2120,5]]},"931":{"position":[[92,8],[1201,5],[1304,5],[1435,5]]},"943":{"position":[[244,7]]},"944":{"position":[[101,5],[152,5],[194,5],[293,5],[331,8]]},"965":{"position":[[439,5],[550,5],[590,5],[673,5],[907,5],[1148,5],[1282,5]]},"989":{"position":[[288,5]]},"1004":{"position":[[371,5]]},"1031":{"position":[[412,6]]},"1032":{"position":[[717,5],[919,5],[1029,5],[1222,5],[1313,5],[1405,5],[1515,5],[1619,5],[1720,5],[1824,5]]},"1042":{"position":[[299,5],[529,5],[576,5],[658,5],[753,5]]},"1043":{"position":[[92,8],[214,6],[963,5],[1193,5],[1240,5],[1322,5],[1417,5]]},"1051":{"position":[[92,8],[1225,5],[1455,5],[1502,5],[1584,5],[1679,5]]},"1059":{"position":[[92,8],[1018,5],[1248,5],[1295,5],[1377,5],[1472,5]]},"1140":{"position":[[3713,5]]},"1177":{"position":[[156,5]]},"1185":{"position":[[189,6]]},"1194":{"position":[[419,5]]},"1227":{"position":[[240,8]]},"1228":{"position":[[255,8]]},"1245":{"position":[[495,5],[728,8]]},"1283":{"position":[[103,8],[250,6]]},"1289":{"position":[[103,8]]},"1292":{"position":[[1386,5],[1417,6]]},"1303":{"position":[[92,8],[1543,5]]},"1306":{"position":[[1386,5],[1417,6]]},"1311":{"position":[[86,6]]},"1316":{"position":[[3713,5]]},"1320":{"position":[[103,8]]},"1329":{"position":[[1386,5],[1417,6]]},"1333":{"position":[[103,8]]},"1340":{"position":[[3713,5]]},"1344":{"position":[[103,8]]},"1351":{"position":[[3713,5]]},"1373":{"position":[[92,8],[1154,5],[1204,5]]},"1374":{"position":[[92,8],[1158,5],[1208,5]]},"1379":{"position":[[2376,5]]},"1382":{"position":[[254,6]]},"1383":{"position":[[800,5],[1210,5],[1282,5],[1571,5],[1610,5],[1701,5],[1734,5],[1976,5]]},"1394":{"position":[[523,5]]},"1397":{"position":[[92,8],[933,5],[983,5]]},"1398":{"position":[[92,8],[936,5],[986,5]]},"1403":{"position":[[2376,5]]},"1408":{"position":[[252,5],[302,5]]},"1409":{"position":[[92,8],[214,6],[916,5],[966,5]]},"1414":{"position":[[2376,5]]},"1417":{"position":[[361,6]]},"1418":{"position":[[115,5]]},"1431":{"position":[[3736,5]]}},"keywords":{}}],["granular",{"_index":2214,"title":{},"content":{"202":{"position":[[405,9]]},"237":{"position":[[954,8]]},"864":{"position":[[528,8]]},"876":{"position":[[528,8]]},"1085":{"position":[[1022,11],[1038,11]]},"1087":{"position":[[119,11],[207,12],[253,12]]},"1388":{"position":[[564,12]]},"1461":{"position":[[2325,9]]}},"keywords":{}}],["graph",{"_index":304,"title":{},"content":{"11":{"position":[[418,5]]},"23":{"position":[[127,5],[268,5]]},"32":{"position":[[362,5]]},"61":{"position":[[1156,5]]},"92":{"position":[[408,5],[479,5],[677,5]]},"105":{"position":[[843,5],[1331,5]]},"107":{"position":[[811,5]]},"137":{"position":[[277,5]]},"146":{"position":[[591,5]]},"149":{"position":[[564,5]]},"152":{"position":[[567,5]]},"189":{"position":[[1366,5]]},"280":{"position":[[913,5]]},"319":{"position":[[497,5]]},"323":{"position":[[409,5]]},"667":{"position":[[113,5]]},"668":{"position":[[86,5]]}},"keywords":{}}],["graphic",{"_index":3160,"title":{},"content":{"323":{"position":[[1747,9]]}},"keywords":{}}],["great",{"_index":1571,"title":{},"content":{"110":{"position":[[535,5]]},"114":{"position":[[494,5]]},"180":{"position":[[391,5]]},"281":{"position":[[394,5]]}},"keywords":{}}],["greater",{"_index":3152,"title":{},"content":{"322":{"position":[[1135,7]]},"419":{"position":[[1985,7]]},"441":{"position":[[594,7]]},"504":{"position":[[1614,7]]},"547":{"position":[[1987,7]]},"611":{"position":[[889,7]]},"639":{"position":[[1612,7]]},"1020":{"position":[[879,7]]},"1023":{"position":[[1968,7]]},"1162":{"position":[[705,7]]}},"keywords":{}}],["greatest",{"_index":3145,"title":{},"content":{"321":{"position":[[2269,8]]}},"keywords":{}}],["greatfield",{"_index":1687,"title":{},"content":{"122":{"position":[[2266,11]]}},"keywords":{}}],["green",{"_index":1780,"title":{},"content":{"138":{"position":[[1204,8]]},"141":{"position":[[967,6],[1287,8]]},"142":{"position":[[1181,8]]}},"keywords":{}}],["greenhous",{"_index":3345,"title":{"621":{"position":[[0,10]]}},"content":{"364":{"position":[[1800,10]]},"622":{"position":[[56,10]]},"623":{"position":[[15,10]]},"624":{"position":[[250,10]]},"625":{"position":[[93,10],[231,10]]}},"keywords":{}}],["greenhouse.dev",{"_index":3346,"title":{},"content":{"364":{"position":[[1857,14]]}},"keywords":{}}],["greenhouse:dev",{"_index":4336,"title":{},"content":{"626":{"position":[[90,14]]}},"keywords":{}}],["greet",{"_index":1410,"title":{},"content":{"98":{"position":[[553,9]]},"128":{"position":[[646,8],[710,9]]},"129":{"position":[[1030,9],[1077,8],[1110,9],[1154,10],[1249,9]]},"130":{"position":[[209,5],[262,9],[313,9]]},"238":{"position":[[314,7]]}},"keywords":{}}],["groundbreak",{"_index":2335,"title":{},"content":{"210":{"position":[[2420,14]]}},"keywords":{}}],["group",{"_index":289,"title":{"279":{"position":[[0,7]]}},"content":{"11":{"position":[[54,6]]},"42":{"position":[[122,8]]},"61":{"position":[[750,5]]},"71":{"position":[[59,5]]},"110":{"position":[[1437,7]]},"173":{"position":[[969,6]]},"203":{"position":[[156,5]]},"222":{"position":[[752,5]]},"254":{"position":[[2247,5]]},"274":{"position":[[1429,5]]},"279":{"position":[[255,8],[562,8]]},"314":{"position":[[1788,5]]},"320":{"position":[[1550,6]]},"443":{"position":[[146,5]]},"517":{"position":[[368,5]]},"520":{"position":[[60,6]]},"526":{"position":[[119,6]]},"527":{"position":[[253,7]]},"590":{"position":[[798,9]]},"767":{"position":[[149,5],[215,5],[821,5],[880,6],[996,5],[1027,5],[1367,5],[1497,6],[1525,5]]},"792":{"position":[[469,5],[535,5],[1100,5],[1174,6],[1301,5],[1332,5]]},"805":{"position":[[59,5]]},"820":{"position":[[59,5]]},"824":{"position":[[261,5],[327,5],[892,5],[949,6],[1062,5],[1093,5],[1433,5],[1561,6],[1589,5]]},"836":{"position":[[59,5]]},"899":{"position":[[318,6],[341,5]]},"900":{"position":[[189,7]]},"904":{"position":[[261,5],[327,5],[947,6],[1062,5],[1093,5],[1158,5],[1230,5]]},"918":{"position":[[469,5],[535,5],[1150,6],[1353,5],[1384,5],[1449,5],[1522,5]]},"979":{"position":[[188,5]]},"997":{"position":[[190,6]]},"1051":{"position":[[261,5],[327,5]]},"1080":{"position":[[92,6],[286,6],[315,6],[343,6],[577,5],[614,5]]},"1118":{"position":[[915,5]]},"1134":{"position":[[880,6]]},"1140":{"position":[[3761,5],[3803,8],[3847,6]]},"1170":{"position":[[910,5],[958,6],[1040,5],[1102,6]]},"1185":{"position":[[125,8]]},"1209":{"position":[[358,5]]},"1220":{"position":[[587,5],[635,6],[717,5],[779,6]]},"1289":{"position":[[243,5],[318,5]]},"1292":{"position":[[1461,5],[1503,8],[1536,6]]},"1306":{"position":[[1461,5],[1503,8],[1536,6]]},"1316":{"position":[[3761,5],[3803,8],[3847,6]]},"1321":{"position":[[23,5],[98,5]]},"1322":{"position":[[752,5]]},"1329":{"position":[[1461,5],[1503,8],[1536,6]]},"1334":{"position":[[23,5],[98,5]]},"1335":{"position":[[752,5]]},"1340":{"position":[[3761,5],[3803,8],[3847,6]]},"1351":{"position":[[3761,5],[3803,8],[3847,6]]},"1370":{"position":[[1198,5],[1211,6]]},"1373":{"position":[[261,5],[327,5]]},"1374":{"position":[[261,5],[327,5]]},"1379":{"position":[[2424,5],[2478,8],[3936,5]]},"1382":{"position":[[145,8]]},"1394":{"position":[[540,5]]},"1403":{"position":[[2424,5],[2478,8],[3936,5]]},"1414":{"position":[[2424,5],[2478,8],[3936,5]]},"1417":{"position":[[195,8]]},"1431":{"position":[[3784,5],[3826,8],[3870,6]]}},"keywords":{}}],["group_id",{"_index":2655,"title":{},"content":{"250":{"position":[[451,11]]}},"keywords":{}}],["group_id=conf['group_id",{"_index":2665,"title":{},"content":{"250":{"position":[[813,26]]}},"keywords":{}}],["group_membership",{"_index":5475,"title":{},"content":{"1134":{"position":[[759,17]]}},"keywords":{}}],["group_replica",{"_index":6022,"title":{},"content":{"1292":{"position":[[1574,13]]},"1306":{"position":[[1574,13]]},"1329":{"position":[[1574,13]]}},"keywords":{}}],["groupassoci",{"_index":4717,"title":{},"content":{"794":{"position":[[673,15]]},"809":{"position":[[673,15]]},"1286":{"position":[[730,15]]},"1325":{"position":[[730,15]]}},"keywords":{}}],["grouped.flow.yamlenrichandaddtowindow.sqlgroup",{"_index":2853,"title":{},"content":{"279":{"position":[[954,48]]}},"keywords":{}}],["groupsad",{"_index":3732,"title":{},"content":{"443":{"position":[[137,8]]}},"keywords":{}}],["groupscampaignscreativesaddirectsponsoredcont",{"_index":4511,"title":{},"content":{"715":{"position":[[76,49]]}},"keywords":{}}],["groupsfilesremot",{"_index":5182,"title":{},"content":{"1012":{"position":[[202,17]]}},"keywords":{}}],["groupssponsor",{"_index":3464,"title":{},"content":{"381":{"position":[[74,15],[218,15],[364,15]]}},"keywords":{}}],["groupssuppress",{"_index":5138,"title":{},"content":{"979":{"position":[[170,17]]}},"keywords":{}}],["groupwith",{"_index":4669,"title":{},"content":{"767":{"position":[[1199,9]]},"792":{"position":[[1455,9]]},"824":{"position":[[1265,9]]}},"keywords":{}}],["grow",{"_index":2053,"title":{},"content":{"180":{"position":[[734,5]]},"281":{"position":[[2943,5]]}},"keywords":{}}],["gsc",{"_index":4309,"title":{},"content":{"611":{"position":[[1013,3]]}},"keywords":{}}],["gscluster",{"_index":6405,"title":{},"content":{"1394":{"position":[[556,9]]}},"keywords":{}}],["gt",{"_index":1364,"title":{},"content":{"94":{"position":[[3153,5]]},"107":{"position":[[2819,4]]},"120":{"position":[[2590,5]]},"164":{"position":[[572,5],[713,5],[2087,5],[2133,5],[2173,5]]},"277":{"position":[[792,4]]},"296":{"position":[[319,4],[1290,4]]},"464":{"position":[[148,4],[176,4],[195,4],[252,4],[274,4],[293,4],[313,4]]},"480":{"position":[[1046,4]]},"840":{"position":[[243,4],[256,4],[515,4],[532,4],[557,4],[901,4],[918,4],[936,4],[1623,4],[1640,4],[1964,4],[1981,4],[2000,4]]},"842":{"position":[[2660,4]]},"849":{"position":[[186,4],[199,4],[412,4],[425,4],[772,4],[785,4],[800,4],[986,4],[1003,4],[1028,4],[1514,4],[1531,4],[1549,4],[2664,4],[2681,4],[3083,4],[3100,4],[3119,4]]},"864":{"position":[[1616,5],[1636,5]]},"912":{"position":[[1250,4]]},"964":{"position":[[389,4],[742,4],[755,4]]},"1089":{"position":[[121,4]]},"1418":{"position":[[33,4],[55,4],[172,4],[199,4],[216,4],[236,4]]},"1476":{"position":[[2120,5]]}},"keywords":{}}],["gt80kty/d6091fbmkhxl5shej4ssryvftgul2ea7s5xjspyxkadrzr0wj3scqava",{"_index":1251,"title":{},"content":{"83":{"position":[[2092,64]]},"371":{"position":[[1011,64]]},"1139":{"position":[[898,64]]}},"keywords":{}}],["gt;",{"_index":1505,"title":{},"content":{"105":{"position":[[1487,6],[1574,6]]}},"keywords":{}}],["gt;>driver",{"_index":6432,"title":{},"content":{"1434":{"position":[[213,15],[672,15],[1145,15],[1247,15],[1421,15],[1459,15],[1750,15],[1789,15],[1828,15],[1867,15]]}},"keywords":{}}],["gt;>runtim",{"_index":6437,"title":{},"content":{"1434":{"position":[[387,16],[972,16],[1380,16],[1488,16],[1600,16],[2073,16]]}},"keywords":{}}],["gt;bar.flow.yaml",{"_index":1321,"title":{},"content":{"92":{"position":[[433,18],[742,18]]}},"keywords":{}}],["gt;c",{"_index":934,"title":{},"content":{"61":{"position":[[1277,6]]}},"keywords":{}}],["gt;captur",{"_index":308,"title":{},"content":{"11":{"position":[[451,12]]}},"keywords":{}}],["gt;collect",{"_index":309,"title":{},"content":{"11":{"position":[[473,15]]},"23":{"position":[[146,15]]},"32":{"position":[[381,15]]},"137":{"position":[[296,15]]},"189":{"position":[[1385,15]]}},"keywords":{}}],["gt;collection/a",{"_index":584,"title":{},"content":{"23":{"position":[[353,17]]}},"keywords":{}}],["gt;collection/c",{"_index":583,"title":{},"content":{"23":{"position":[[322,17]]}},"keywords":{}}],["gt;collection/d",{"_index":581,"title":{},"content":{"23":{"position":[[291,17]]}},"keywords":{}}],["gt;d",{"_index":933,"title":{},"content":{"61":{"position":[[1237,6],[1320,6]]}},"keywords":{}}],["gt;derivation/",{"_index":588,"title":{},"content":{"23":{"position":[[417,17],[449,17],[481,17]]}},"keywords":{}}],["gt;derivation/b",{"_index":586,"title":{},"content":{"23":{"position":[[385,17]]}},"keywords":{}}],["gt;dest[destin",{"_index":311,"title":{},"content":{"11":{"position":[[539,20]]}},"keywords":{}}],["gt;foo.flow.yaml",{"_index":1325,"title":{},"content":{"92":{"position":[[542,18],[705,18]]}},"keywords":{}}],["gt;l",{"_index":1508,"title":{},"content":{"105":{"position":[[1553,6],[1595,6]]}},"keywords":{}}],["gt;materi",{"_index":310,"title":{},"content":{"11":{"position":[[501,20]]},"23":{"position":[[174,20]]},"32":{"position":[[409,20]]},"137":{"position":[[324,20]]},"189":{"position":[[1413,20]]}},"keywords":{}}],["gt;materialization/on",{"_index":591,"title":{},"content":{"23":{"position":[[513,24]]}},"keywords":{}}],["gt;materialization/two",{"_index":593,"title":{},"content":{"23":{"position":[[552,24]]}},"keywords":{}}],["gt;o",{"_index":1506,"title":{},"content":{"105":{"position":[[1508,6],[1621,6]]}},"keywords":{}}],["gt;other.flow.yaml",{"_index":1323,"title":{},"content":{"92":{"position":[[504,20]]}},"keywords":{}}],["gt;t",{"_index":1504,"title":{},"content":{"105":{"position":[[1466,6],[1532,6]]}},"keywords":{}}],["gt;t1",{"_index":1531,"title":{},"content":{"107":{"position":[[1039,7],[1101,7]]}},"keywords":{}}],["gt;t2",{"_index":1533,"title":{},"content":{"107":{"position":[[1069,7],[1128,7]]}},"keywords":{}}],["gtid_onli",{"_index":6023,"title":{},"content":{"1292":{"position":[[1616,9]]},"1306":{"position":[[1616,9]]},"1329":{"position":[[1616,9]]}},"keywords":{}}],["guarante",{"_index":1538,"title":{"1459":{"position":[[10,11]]}},"content":{"107":{"position":[[1537,10],[3385,10]]},"160":{"position":[[516,9]]},"175":{"position":[[228,10]]},"198":{"position":[[784,10]]},"323":{"position":[[1134,9]]},"326":{"position":[[1860,11]]},"411":{"position":[[122,9]]},"429":{"position":[[567,11]]},"595":{"position":[[544,10],[1080,9]]},"602":{"position":[[739,10]]},"879":{"position":[[1285,9]]},"1282":{"position":[[349,9]]},"1288":{"position":[[323,9]]},"1310":{"position":[[364,9]]},"1439":{"position":[[326,9]]},"1459":{"position":[[546,10],[756,9],[1158,10]]}},"keywords":{}}],["guerr",{"_index":2709,"title":{},"content":{"253":{"position":[[1501,7],[2445,7],[2519,7]]},"313":{"position":[[1501,7],[2445,7],[2519,7]]}},"keywords":{}}],["guid",{"_index":804,"title":{"59":{"position":[[5,7]]},"213":{"position":[[10,6]]},"257":{"position":[[8,6]]}},"content":{"54":{"position":[[58,6]]},"59":{"position":[[6,6]]},"61":{"position":[[1350,6]]},"83":{"position":[[679,6]]},"139":{"position":[[245,6]]},"140":{"position":[[345,6]]},"143":{"position":[[285,6]]},"144":{"position":[[846,6]]},"176":{"position":[[94,5]]},"177":{"position":[[377,7]]},"179":{"position":[[438,5]]},"193":{"position":[[722,5]]},"213":{"position":[[10,6],[59,6],[113,6]]},"215":{"position":[[6,5]]},"228":{"position":[[1358,5]]},"253":{"position":[[449,6]]},"256":{"position":[[9,5]]},"257":{"position":[[8,6],[19,6]]},"264":{"position":[[895,6]]},"266":{"position":[[246,5]]},"273":{"position":[[159,7]]},"285":{"position":[[196,5]]},"286":{"position":[[31,6],[97,5],[264,5],[350,5]]},"289":{"position":[[262,6]]},"292":{"position":[[285,5]]},"297":{"position":[[9,5]]},"300":{"position":[[241,6]]},"303":{"position":[[276,5]]},"306":{"position":[[6,5]]},"313":{"position":[[449,6]]},"317":{"position":[[9,5]]},"401":{"position":[[187,5]]},"475":{"position":[[319,5]]},"548":{"position":[[581,5]]},"563":{"position":[[198,5]]},"597":{"position":[[282,5]]},"753":{"position":[[361,5]]},"767":{"position":[[507,5]]},"784":{"position":[[144,5]]},"792":{"position":[[785,5]]},"793":{"position":[[320,5]]},"808":{"position":[[336,5]]},"824":{"position":[[577,5]]},"866":{"position":[[337,5]]},"878":{"position":[[347,5]]},"892":{"position":[[229,5]]},"904":{"position":[[576,5]]},"918":{"position":[[785,5]]},"919":{"position":[[320,5]]},"931":{"position":[[340,5]]},"964":{"position":[[22,6]]},"1043":{"position":[[320,5]]},"1051":{"position":[[576,5]]},"1059":{"position":[[340,5]]},"1142":{"position":[[79,5]]},"1149":{"position":[[534,5]]},"1154":{"position":[[518,5]]},"1160":{"position":[[79,5],[190,5]]},"1165":{"position":[[330,6]]},"1168":{"position":[[79,5]]},"1176":{"position":[[574,5]]},"1185":{"position":[[374,5]]},"1194":{"position":[[584,5]]},"1198":{"position":[[233,5]]},"1203":{"position":[[745,5]]},"1211":{"position":[[79,5]]},"1218":{"position":[[79,5]]},"1226":{"position":[[385,5]]},"1237":{"position":[[136,5]]},"1243":{"position":[[162,5]]},"1255":{"position":[[144,5]]},"1258":{"position":[[128,5]]},"1289":{"position":[[850,5]]},"1303":{"position":[[340,5]]},"1322":{"position":[[1069,5]]},"1354":{"position":[[409,5]]},"1362":{"position":[[135,5]]},"1373":{"position":[[558,5]]},"1374":{"position":[[558,5]]},"1382":{"position":[[628,5]]},"1397":{"position":[[337,5]]},"1398":{"position":[[336,5]]},"1409":{"position":[[320,5]]}},"keywords":{}}],["guidanc",{"_index":2040,"title":{},"content":{"177":{"position":[[326,8]]},"264":{"position":[[169,8]]},"275":{"position":[[191,8]]}},"keywords":{}}],["guide.fil",{"_index":5352,"title":{},"content":{"1092":{"position":[[351,10]]}},"keywords":{}}],["guideev",{"_index":4941,"title":{},"content":{"892":{"position":[[555,11]]}},"keywords":{}}],["gz",{"_index":143,"title":{},"content":{"3":{"position":[[983,3]]}},"keywords":{}}],["gzip",{"_index":28,"title":{},"content":{"1":{"position":[[341,5],[379,5],[403,4]]}},"keywords":{}}],["h",{"_index":911,"title":{},"content":{"60":{"position":[[1148,1]]},"238":{"position":[[868,1]]},"341":{"position":[[604,1]]},"943":{"position":[[1036,1],[1068,1],[1121,1]]}},"keywords":{}}],["hadoop",{"_index":3148,"title":{"322":{"position":[[0,7]]}},"content":{"322":{"position":[[38,7],[847,7],[1231,6]]}},"keywords":{}}],["half",{"_index":3215,"title":{},"content":{"333":{"position":[[540,4]]},"595":{"position":[[1647,4]]}},"keywords":{}}],["halt",{"_index":4626,"title":{},"content":{"759":{"position":[[45,4]]},"772":{"position":[[56,4]]},"799":{"position":[[43,4]]},"814":{"position":[[43,4]]},"830":{"position":[[43,4]]}},"keywords":{}}],["hand",{"_index":1634,"title":{},"content":{"115":{"position":[[1322,5]]},"177":{"position":[[269,5]]},"204":{"position":[[421,4]]},"239":{"position":[[342,4]]},"259":{"position":[[471,4],[2165,4]]},"281":{"position":[[3100,5]]},"288":{"position":[[835,4]]},"296":{"position":[[1955,4],[1975,4]]},"299":{"position":[[750,4]]},"1459":{"position":[[1523,4],[1581,4]]},"1464":{"position":[[54,4],[91,4],[749,4],[793,4]]},"1467":{"position":[[29,4],[49,4]]},"1476":{"position":[[951,4],[998,4]]},"1477":{"position":[[344,4]]}},"keywords":{}}],["handi",{"_index":2930,"title":{},"content":{"291":{"position":[[460,5]]},"302":{"position":[[460,5]]}},"keywords":{}}],["handl",{"_index":836,"title":{},"content":{"56":{"position":[[539,6]]},"66":{"position":[[542,6]]},"124":{"position":[[84,6]]},"197":{"position":[[615,8]]},"239":{"position":[[1906,7],[2060,7]]},"241":{"position":[[194,6]]},"306":{"position":[[615,6]]},"326":{"position":[[357,6]]},"500":{"position":[[88,7]]},"502":{"position":[[472,7]]},"593":{"position":[[421,8]]},"867":{"position":[[1521,7]]},"869":{"position":[[1116,6],[1641,6]]},"870":{"position":[[880,6]]},"909":{"position":[[725,7]]},"925":{"position":[[725,7]]},"936":{"position":[[725,7]]},"952":{"position":[[725,7]]},"970":{"position":[[725,7]]},"1438":{"position":[[78,7]]},"1439":{"position":[[787,6]]},"1442":{"position":[[1280,6]]},"1461":{"position":[[45,6]]}},"keywords":{}}],["handler",{"_index":6024,"title":{},"content":{"1292":{"position":[[1649,7]]},"1306":{"position":[[1649,7]]},"1329":{"position":[[1649,7]]}},"keywords":{}}],["happen",{"_index":383,"title":{},"content":{"13":{"position":[[338,6]]},"14":{"position":[[63,7]]},"92":{"position":[[902,6]]},"110":{"position":[[647,9],[1025,8]]},"113":{"position":[[532,7]]},"163":{"position":[[115,8]]},"236":{"position":[[1793,7],[2041,7]]},"239":{"position":[[1375,8]]},"296":{"position":[[7125,7]]},"331":{"position":[[81,8]]},"595":{"position":[[1330,7]]},"759":{"position":[[95,8]]},"761":{"position":[[204,6]]},"763":{"position":[[199,7]]},"764":{"position":[[423,7]]},"772":{"position":[[106,8]]},"774":{"position":[[204,6]]},"776":{"position":[[199,7]]},"777":{"position":[[423,7]]},"799":{"position":[[93,8]]},"801":{"position":[[210,6]]},"803":{"position":[[199,7]]},"804":{"position":[[421,7]]},"814":{"position":[[93,8]]},"816":{"position":[[210,6]]},"818":{"position":[[199,7]]},"819":{"position":[[421,7]]},"830":{"position":[[93,8]]},"832":{"position":[[210,6]]},"834":{"position":[[199,7]]},"835":{"position":[[421,7]]},"870":{"position":[[181,6],[716,6]]},"922":{"position":[[3158,10]]}},"keywords":{}}],["hard",{"_index":2569,"title":{},"content":{"237":{"position":[[899,4],[1264,4]]},"239":{"position":[[16,4]]},"584":{"position":[[1145,4]]},"909":{"position":[[18,4]]},"925":{"position":[[18,4]]},"936":{"position":[[18,4]]},"952":{"position":[[18,4]]},"970":{"position":[[18,4]]}},"keywords":{}}],["harder",{"_index":2490,"title":{},"content":{"233":{"position":[[708,6]]}},"keywords":{}}],["harvest",{"_index":3347,"title":{"627":{"position":[[0,7]]}},"content":{"364":{"position":[[1872,7]]},"623":{"position":[[60,7]]},"628":{"position":[[56,7]]},"629":{"position":[[15,7],[57,7]]},"630":{"position":[[250,7]]},"631":{"position":[[83,7],[120,7],[562,7]]}},"keywords":{}}],["harvest:dev",{"_index":3348,"title":{},"content":{"364":{"position":[[1926,11]]},"632":{"position":[[90,11]]}},"keywords":{}}],["hash",{"_index":6025,"title":{},"content":{"1292":{"position":[[1692,4]]},"1306":{"position":[[1692,4]]},"1329":{"position":[[1692,4]]}},"keywords":{}}],["hashicorp",{"_index":1153,"title":{},"content":{"82":{"position":[[656,9]]}},"keywords":{}}],["haslog",{"_index":1688,"title":{},"content":{"123":{"position":[[76,10]]}},"keywords":{}}],["hasn't",{"_index":2911,"title":{},"content":{"284":{"position":[[480,6]]}},"keywords":{}}],["hasn’t",{"_index":1574,"title":{},"content":{"110":{"position":[[640,6]]}},"keywords":{}}],["have",{"_index":1204,"title":{},"content":{"82":{"position":[[4243,6]]},"98":{"position":[[924,6]]},"103":{"position":[[609,6]]},"133":{"position":[[635,6]]},"158":{"position":[[83,6]]},"197":{"position":[[277,6]]},"254":{"position":[[3782,6]]},"944":{"position":[[416,6]]},"945":{"position":[[1026,6]]},"1140":{"position":[[3893,6]]},"1200":{"position":[[376,6]]},"1209":{"position":[[377,6]]},"1292":{"position":[[1727,6]]},"1306":{"position":[[1727,6]]},"1316":{"position":[[3893,6]]},"1329":{"position":[[1727,6]]},"1340":{"position":[[3893,6]]},"1351":{"position":[[3893,6]]},"1370":{"position":[[1225,6]]},"1379":{"position":[[2528,6]]},"1394":{"position":[[575,6]]},"1403":{"position":[[2528,6]]},"1414":{"position":[[2528,6]]},"1431":{"position":[[3916,6]]},"1440":{"position":[[491,6]]},"1452":{"position":[[2744,6]]},"1462":{"position":[[289,6]]},"1477":{"position":[[95,6]]}},"keywords":{}}],["haven't",{"_index":1992,"title":{},"content":{"171":{"position":[[104,7]]},"172":{"position":[[103,7]]},"173":{"position":[[204,7]]},"203":{"position":[[8,7]]},"230":{"position":[[241,7]]},"1176":{"position":[[487,7]]},"1185":{"position":[[287,7]]},"1194":{"position":[[497,7]]},"1203":{"position":[[658,7]]},"1226":{"position":[[298,7]]},"1243":{"position":[[75,7]]},"1354":{"position":[[322,7]]},"1382":{"position":[[541,7]]}},"keywords":{}}],["haven’t",{"_index":2209,"title":{},"content":{"199":{"position":[[96,7]]},"239":{"position":[[109,7]]},"240":{"position":[[2687,7]]}},"keywords":{}}],["havereduct",{"_index":1602,"title":{},"content":{"113":{"position":[[35,13]]}},"keywords":{}}],["hdf",{"_index":3149,"title":{"322":{"position":[[8,5]]}},"content":{"322":{"position":[[46,5],[255,4],[459,5],[1052,4]]}},"keywords":{}}],["head",{"_index":2029,"title":{},"content":{"174":{"position":[[118,4]]},"196":{"position":[[634,4],[772,4]]},"204":{"position":[[907,4]]},"210":{"position":[[7,4],[1713,4]]},"233":{"position":[[819,4],[957,4]]},"239":{"position":[[68,4]]},"240":{"position":[[2462,4],[4618,4]]},"255":{"position":[[1205,4]]},"295":{"position":[[1044,4]]},"296":{"position":[[6881,4],[7196,4],[7789,4]]},"316":{"position":[[1530,4]]},"635":{"position":[[142,4],[257,4]]}},"keywords":{}}],["header",{"_index":1800,"title":{"640":{"position":[[21,8]]}},"content":{"138":{"position":[[2135,6]]},"141":{"position":[[2091,6]]},"142":{"position":[[2195,6]]},"146":{"position":[[274,6]]},"149":{"position":[[283,6]]},"152":{"position":[[290,6]]},"418":{"position":[[244,8]]},"419":{"position":[[2207,8],[2281,7],[2343,7],[2445,9],[2478,6]]},"439":{"position":[[501,8]]},"441":{"position":[[816,8],[890,7],[952,7],[1054,9],[1087,6]]},"489":{"position":[[127,7],[562,6],[670,6]]},"492":{"position":[[144,6],[285,7],[301,6]]},"504":{"position":[[1836,8],[1910,7],[1972,7],[2074,9],[2107,6]]},"546":{"position":[[981,8]]},"547":{"position":[[2209,8],[2283,7],[2345,7],[2447,9],[2480,6]]},"616":{"position":[[147,6],[228,6],[242,6]]},"635":{"position":[[224,7]]},"637":{"position":[[328,8],[337,7],[383,7],[407,7],[488,6],[529,6]]},"638":{"position":[[273,8]]},"639":{"position":[[1834,8],[1908,7],[1970,7],[2072,9],[2105,6]]},"640":{"position":[[62,7],[151,7],[324,7]]},"660":{"position":[[299,6],[781,6],[996,7]]},"661":{"position":[[65,8]]},"662":{"position":[[127,7],[562,6],[670,6]]},"665":{"position":[[144,6],[285,7],[301,6]]},"677":{"position":[[127,7],[562,6],[670,6]]},"680":{"position":[[144,6],[285,7],[301,6]]},"692":{"position":[[127,7],[562,6],[670,6]]},"695":{"position":[[144,6],[285,7],[301,6]]},"1022":{"position":[[310,8]]},"1023":{"position":[[2190,8],[2264,7],[2326,7],[2428,9],[2461,6]]},"1144":{"position":[[1187,7],[1208,7]]},"1213":{"position":[[864,7],[885,7]]},"1239":{"position":[[204,8],[213,7],[232,7]]},"1241":{"position":[[220,8]]}},"keywords":{}}],["headers/item",{"_index":4364,"title":{},"content":{"637":{"position":[[352,14],[467,15],[506,15]]}},"keywords":{}}],["healthcheck",{"_index":2513,"title":{},"content":{"236":{"position":[[887,12]]}},"keywords":{}}],["heatwav",{"_index":5926,"title":{"1263":{"position":[[6,8]]},"1271":{"position":[[6,8]]}},"content":{"1264":{"position":[[76,8]]},"1265":{"position":[[178,9]]},"1268":{"position":[[86,9]]},"1271":{"position":[[43,8]]}},"keywords":{}}],["heatwave:dev",{"_index":5935,"title":{},"content":{"1270":{"position":[[104,12]]}},"keywords":{}}],["heavi",{"_index":3028,"title":{},"content":{"296":{"position":[[6632,5]]}},"keywords":{}}],["hello",{"_index":1409,"title":{},"content":{"98":{"position":[[542,7]]}},"keywords":{}}],["help",{"_index":244,"title":{"328":{"position":[[13,5]]}},"content":{"7":{"position":[[464,4]]},"47":{"position":[[138,7]]},"54":{"position":[[4,4]]},"60":{"position":[[1139,4],[1180,4],[1240,4]]},"68":{"position":[[182,7],[1198,4]]},"70":{"position":[[124,5]]},"81":{"position":[[801,4]]},"83":{"position":[[291,4]]},"102":{"position":[[551,5]]},"119":{"position":[[146,5]]},"125":{"position":[[493,4]]},"141":{"position":[[334,4]]},"158":{"position":[[216,7],[756,7]]},"159":{"position":[[508,4]]},"173":{"position":[[1225,5]]},"177":{"position":[[69,4],[132,7]]},"179":{"position":[[448,5]]},"184":{"position":[[566,4]]},"191":{"position":[[267,4]]},"208":{"position":[[321,4]]},"213":{"position":[[136,4]]},"215":{"position":[[129,7]]},"238":{"position":[[987,5]]},"259":{"position":[[968,4],[2549,4]]},"264":{"position":[[906,5]]},"266":{"position":[[232,5]]},"268":{"position":[[1479,4]]},"269":{"position":[[1050,4]]},"277":{"position":[[259,4]]},"278":{"position":[[101,5]]},"290":{"position":[[865,7]]},"291":{"position":[[1508,5]]},"299":{"position":[[468,4]]},"302":{"position":[[1428,5]]},"305":{"position":[[245,5]]},"326":{"position":[[1671,4]]},"328":{"position":[[32,4]]},"341":{"position":[[558,4],[595,4]]},"390":{"position":[[637,4]]},"395":{"position":[[816,4]]},"415":{"position":[[348,4]]},"480":{"position":[[769,4],[914,4]]},"558":{"position":[[152,4]]},"870":{"position":[[972,4]]},"964":{"position":[[120,7]]},"977":{"position":[[740,4]]},"1122":{"position":[[442,4]]},"1142":{"position":[[293,4]]},"1149":{"position":[[740,4]]},"1160":{"position":[[456,4]]},"1168":{"position":[[293,4]]},"1228":{"position":[[341,4]]},"1258":{"position":[[334,4]]},"1265":{"position":[[116,4]]},"1292":{"position":[[1764,4]]},"1306":{"position":[[1764,4]]},"1329":{"position":[[1764,4]]},"1356":{"position":[[511,4],[660,4]]},"1391":{"position":[[400,4]]},"1461":{"position":[[29,4]]},"1471":{"position":[[1162,5]]}},"keywords":{}}],["helpfulli",{"_index":3021,"title":{},"content":{"296":{"position":[[5707,10]]},"315":{"position":[[1714,10]]}},"keywords":{}}],["here",{"_index":660,"title":{},"content":{"32":{"position":[[103,5]]},"47":{"position":[[64,4]]},"58":{"position":[[812,5]]},"81":{"position":[[1678,5],[2217,4]]},"129":{"position":[[1212,5]]},"159":{"position":[[927,5]]},"164":{"position":[[1714,4]]},"169":{"position":[[1221,5]]},"176":{"position":[[219,4]]},"183":{"position":[[1689,5]]},"193":{"position":[[373,5]]},"198":{"position":[[68,4]]},"199":{"position":[[126,5]]},"206":{"position":[[208,4]]},"212":{"position":[[334,5],[365,5]]},"213":{"position":[[287,4]]},"216":{"position":[[515,5]]},"224":{"position":[[1140,5]]},"232":{"position":[[936,5]]},"239":{"position":[[55,4],[147,6],[1686,5]]},"243":{"position":[[328,5],[359,5]]},"254":{"position":[[941,5],[2360,4],[2928,4]]},"270":{"position":[[126,5]]},"275":{"position":[[487,4]]},"286":{"position":[[331,5]]},"290":{"position":[[851,5]]},"296":{"position":[[1846,5],[6504,5]]},"301":{"position":[[971,5]]},"308":{"position":[[1004,5]]},"314":{"position":[[619,5],[1901,4],[2404,4]]},"417":{"position":[[2152,5]]},"577":{"position":[[253,5]]},"588":{"position":[[248,5]]},"805":{"position":[[367,5]]},"820":{"position":[[367,5]]},"836":{"position":[[367,5]]},"849":{"position":[[1644,4]]},"991":{"position":[[195,5]]},"1009":{"position":[[195,5]]},"1036":{"position":[[558,5]]},"1076":{"position":[[139,4],[291,4],[504,5]]},"1146":{"position":[[388,4]]},"1153":{"position":[[109,5]]},"1173":{"position":[[400,4]]},"1181":{"position":[[109,5]]},"1190":{"position":[[109,5]]},"1192":{"position":[[222,4]]},"1215":{"position":[[388,4]]},"1223":{"position":[[400,4]]},"1268":{"position":[[96,4]]},"1388":{"position":[[109,5]]},"1394":{"position":[[220,4]]},"1422":{"position":[[109,5]]},"1423":{"position":[[223,4]]},"1444":{"position":[[1000,5]]},"1452":{"position":[[4243,4]]},"1455":{"position":[[486,5]]},"1477":{"position":[[1480,5],[3646,5]]}},"keywords":{}}],["here>",{"_index":2786,"title":{},"content":{"263":{"position":[[223,8],[758,9]]},"267":{"position":[[2061,8]]},"270":{"position":[[323,8]]},"274":{"position":[[621,8]]},"284":{"position":[[132,8]]}},"keywords":{}}],["here'",{"_index":1895,"title":{},"content":{"161":{"position":[[478,6]]},"162":{"position":[[1812,6]]},"164":{"position":[[480,6]]},"281":{"position":[[1932,6]]},"436":{"position":[[47,6]]},"477":{"position":[[492,6]]},"598":{"position":[[456,6]]},"660":{"position":[[943,6]]}},"keywords":{}}],["here’",{"_index":2308,"title":{},"content":{"210":{"position":[[1804,6]]},"1465":{"position":[[393,6]]}},"keywords":{}}],["hh:mm",{"_index":4608,"title":{},"content":{"757":{"position":[[643,6]]},"770":{"position":[[643,6]]},"797":{"position":[[643,6]]},"812":{"position":[[643,6]]},"828":{"position":[[643,6]]},"1285":{"position":[[655,6]]},"1300":{"position":[[655,6]]},"1324":{"position":[[655,6]]},"1452":{"position":[[692,6]]}},"keywords":{}}],["hh:mmoffset",{"_index":6545,"title":{},"content":{"1452":{"position":[[3219,13]]}},"keywords":{}}],["hidden",{"_index":1806,"title":{},"content":{"138":{"position":[[2472,7]]},"142":{"position":[[2550,7]]},"410":{"position":[[291,6]]}},"keywords":{}}],["hierarch",{"_index":1673,"title":{},"content":{"122":{"position":[[307,12]]},"590":{"position":[[187,15]]}},"keywords":{}}],["hierarchi",{"_index":4239,"title":{},"content":{"590":{"position":[[772,10]]}},"keywords":{}}],["high",{"_index":634,"title":{},"content":{"27":{"position":[[501,4]]},"124":{"position":[[1001,4]]},"176":{"position":[[192,4]]},"197":{"position":[[568,4]]},"215":{"position":[[149,4]]},"219":{"position":[[94,4]]},"239":{"position":[[689,4],[1984,4]]},"330":{"position":[[61,4]]},"333":{"position":[[84,4],[189,4]]},"363":{"position":[[56,4]]},"515":{"position":[[969,4]]},"616":{"position":[[273,4]]},"842":{"position":[[2367,4]]},"912":{"position":[[1513,4]]},"922":{"position":[[3132,4]]}},"keywords":{}}],["high_prior",{"_index":6026,"title":{},"content":{"1292":{"position":[[1801,13]]},"1306":{"position":[[1801,13]]},"1329":{"position":[[1801,13]]}},"keywords":{}}],["higher",{"_index":1590,"title":{},"content":{"111":{"position":[[544,6]]},"120":{"position":[[2406,6]]},"263":{"position":[[614,6]]},"320":{"position":[[1522,6]]},"785":{"position":[[948,6]]},"794":{"position":[[409,7]]},"809":{"position":[[409,7]]},"825":{"position":[[409,7]]},"870":{"position":[[955,6]]},"1020":{"position":[[1477,6],[1905,6]]},"1036":{"position":[[659,6],[705,6]]},"1286":{"position":[[466,7]]},"1301":{"position":[[466,7]]},"1325":{"position":[[466,7]]}},"keywords":{}}],["highest",{"_index":3839,"title":{},"content":{"480":{"position":[[1137,7]]},"1268":{"position":[[668,7]]}},"keywords":{}}],["highli",{"_index":732,"title":{},"content":{"41":{"position":[[483,6]]},"121":{"position":[[2022,6]]},"320":{"position":[[366,6]]},"329":{"position":[[1149,6]]},"428":{"position":[[154,7],[239,7]]}},"keywords":{}}],["highlight",{"_index":5378,"title":{"1097":{"position":[[30,11]]}},"content":{},"keywords":{}}],["hint",{"_index":2448,"title":{},"content":{"221":{"position":[[761,4]]},"228":{"position":[[505,5]]}},"keywords":{}}],["histogram",{"_index":6027,"title":{},"content":{"1292":{"position":[[1848,9]]},"1306":{"position":[[1848,9]]},"1329":{"position":[[1848,9]]}},"keywords":{}}],["histor",{"_index":54,"title":{"373":{"position":[[14,10]]},"975":{"position":[[11,10]]},"999":{"position":[[13,10]]}},"content":{"1":{"position":[[739,10]]},"34":{"position":[[611,10]]},"77":{"position":[[39,10]]},"84":{"position":[[1,13]]},"106":{"position":[[623,10]]},"110":{"position":[[323,10],[467,10]]},"111":{"position":[[298,10]]},"121":{"position":[[446,10]]},"138":{"position":[[1390,10]]},"142":{"position":[[1391,10]]},"162":{"position":[[286,10]]},"320":{"position":[[1279,10]]},"321":{"position":[[2358,10]]},"323":{"position":[[746,10],[950,10]]},"329":{"position":[[190,12],[709,10],[806,10]]},"364":{"position":[[3004,10]]},"373":{"position":[[104,10],[194,10],[430,10],[509,10],[846,10],[1052,10]]},"377":{"position":[[204,10],[238,10],[271,10],[1105,10]]},"379":{"position":[[297,10],[427,10],[490,10]]},"595":{"position":[[97,10],[422,10],[1211,10]]},"869":{"position":[[633,10]]},"974":{"position":[[320,10]]},"975":{"position":[[5,10],[193,10],[318,10]]},"977":{"position":[[103,10],[135,10],[315,10],[527,10],[573,10]]},"1006":{"position":[[436,10]]},"1449":{"position":[[604,10]]}},"keywords":{}}],["histori",{"_index":1102,"title":{},"content":{"77":{"position":[[178,7]]},"867":{"position":[[404,7]]},"883":{"position":[[47,7]]},"1292":{"position":[[1889,7]]},"1306":{"position":[[1889,7]]},"1329":{"position":[[1889,7]]}},"keywords":{}}],["history)usersthread",{"_index":5180,"title":{},"content":{"1012":{"position":[[154,20]]}},"keywords":{}}],["historymod",{"_index":4864,"title":{},"content":{"867":{"position":[[391,12]]},"868":{"position":[[237,12]]}},"keywords":{}}],["historyquotessubscript",{"_index":4393,"title":{},"content":{"649":{"position":[[446,25]]}},"keywords":{}}],["hit",{"_index":3190,"title":{},"content":{"329":{"position":[[936,3]]},"870":{"position":[[694,3]]}},"keywords":{}}],["hive",{"_index":148,"title":{"4":{"position":[[0,4]]},"322":{"position":[[18,5]]}},"content":{"3":{"position":[[1159,4]]},"4":{"position":[[196,4],[333,4],[367,4],[418,4]]},"322":{"position":[[579,5],[1336,4],[1671,4]]}},"keywords":{}}],["hoc",{"_index":170,"title":{},"content":{"4":{"position":[[490,3]]},"577":{"position":[[71,3]]},"588":{"position":[[66,3]]},"821":{"position":[[618,3]]},"912":{"position":[[634,3],[1354,3]]}},"keywords":{}}],["hold",{"_index":100,"title":{},"content":{"3":{"position":[[29,4]]},"21":{"position":[[557,4],[629,4],[679,4]]},"110":{"position":[[54,4]]},"112":{"position":[[62,4]]},"156":{"position":[[575,4]]},"1031":{"position":[[225,4]]},"1140":{"position":[[3954,4]]},"1316":{"position":[[3954,4]]},"1340":{"position":[[3954,4]]},"1351":{"position":[[3954,4]]},"1379":{"position":[[2583,4]]},"1403":{"position":[[2583,4]]},"1414":{"position":[[2583,4]]},"1431":{"position":[[3977,4]]},"1461":{"position":[[2808,4]]}},"keywords":{}}],["holdlock",{"_index":6326,"title":{},"content":{"1379":{"position":[[2621,8]]},"1403":{"position":[[2621,8]]},"1414":{"position":[[2621,8]]}},"keywords":{}}],["hollow",{"_index":1786,"title":{},"content":{"138":{"position":[[1480,7]]},"141":{"position":[[1482,7]]},"142":{"position":[[1489,7]]}},"keywords":{}}],["home",{"_index":2449,"title":{},"content":{"221":{"position":[[999,4]]},"222":{"position":[[244,4]]},"223":{"position":[[210,4]]},"224":{"position":[[263,4]]},"1298":{"position":[[210,4]]},"1322":{"position":[[244,4]]},"1335":{"position":[[244,4]]},"1346":{"position":[[210,4]]}},"keywords":{}}],["homebrew",{"_index":890,"title":{},"content":{"58":{"position":[[711,9]]},"169":{"position":[[957,9]]}},"keywords":{}}],["homepag",{"_index":4835,"title":{},"content":{"856":{"position":[[218,9]]}},"keywords":{}}],["honor",{"_index":6273,"title":{},"content":{"1358":{"position":[[477,5]]}},"keywords":{}}],["hood",{"_index":1595,"title":{},"content":{"112":{"position":[[654,4]]},"326":{"position":[[598,5]]}},"keywords":{}}],["horizont",{"_index":2207,"title":{},"content":{"198":{"position":[[1064,12]]}},"keywords":{}}],["host",{"_index":647,"title":{"175":{"position":[[5,7]]},"639":{"position":[[23,6]]},"752":{"position":[[5,6]]},"791":{"position":[[5,6]]},"917":{"position":[[5,6]]},"1042":{"position":[[5,6]]},"1408":{"position":[[5,6]]}},"content":{"30":{"position":[[176,6]]},"82":{"position":[[1386,5],[1992,5],[3816,5],[4328,5]]},"83":{"position":[[336,7]]},"175":{"position":[[88,4],[158,7],[276,6],[352,5]]},"179":{"position":[[598,6]]},"184":{"position":[[447,4]]},"189":{"position":[[26,5]]},"192":{"position":[[542,4],[859,4],[924,4]]},"221":{"position":[[828,7]]},"222":{"position":[[47,6]]},"223":{"position":[[47,6]]},"224":{"position":[[47,6]]},"225":{"position":[[272,7]]},"240":{"position":[[2802,4]]},"288":{"position":[[888,4]]},"291":{"position":[[491,4]]},"299":{"position":[[803,4]]},"302":{"position":[[491,4]]},"329":{"position":[[652,7]]},"370":{"position":[[298,4],[1598,4]]},"402":{"position":[[66,4]]},"403":{"position":[[110,5]]},"428":{"position":[[96,4]]},"634":{"position":[[48,6]]},"635":{"position":[[69,5]]},"750":{"position":[[1311,6]]},"753":{"position":[[1540,4]]},"757":{"position":[[88,4]]},"770":{"position":[[88,4]]},"782":{"position":[[77,4]]},"788":{"position":[[73,6],[159,6]]},"789":{"position":[[1712,6]]},"790":{"position":[[55,7],[75,6]]},"793":{"position":[[1563,4]]},"797":{"position":[[88,4]]},"808":{"position":[[1531,4]]},"812":{"position":[[88,4]]},"828":{"position":[[88,4]]},"867":{"position":[[81,4]]},"907":{"position":[[81,4]]},"914":{"position":[[102,6],[188,6]]},"915":{"position":[[1168,6]]},"916":{"position":[[55,7],[75,6]]},"919":{"position":[[2470,4]]},"923":{"position":[[81,4]]},"931":{"position":[[2010,4]]},"934":{"position":[[81,4]]},"950":{"position":[[81,4]]},"963":{"position":[[1322,6]]},"968":{"position":[[81,4]]},"1021":{"position":[[350,4]]},"1031":{"position":[[602,4]]},"1034":{"position":[[55,4],[78,4]]},"1037":{"position":[[111,5]]},"1039":{"position":[[34,6],[292,6]]},"1041":{"position":[[55,7],[75,6]]},"1042":{"position":[[1146,7]]},"1043":{"position":[[1834,4]]},"1045":{"position":[[88,4]]},"1050":{"position":[[970,7],[990,6]]},"1053":{"position":[[88,4]]},"1059":{"position":[[1857,4]]},"1061":{"position":[[88,4]]},"1138":{"position":[[368,4],[889,4]]},"1151":{"position":[[77,4]]},"1188":{"position":[[77,4]]},"1196":{"position":[[88,4]]},"1253":{"position":[[77,4]]},"1267":{"position":[[66,4],[109,4]]},"1271":{"position":[[62,6]]},"1282":{"position":[[55,7]]},"1285":{"position":[[160,4],[203,4]]},"1289":{"position":[[1292,4],[1402,4],[1501,4],[1550,4],[1669,4]]},"1292":{"position":[[1924,4],[1960,5]]},"1298":{"position":[[47,6],[1124,4],[1234,4]]},"1300":{"position":[[160,4],[203,4]]},"1303":{"position":[[1003,4],[1113,4],[1118,4],[1653,4]]},"1306":{"position":[[1924,4],[1960,5]]},"1310":{"position":[[55,7],[613,4],[723,4],[822,4],[871,4],[990,4],[1069,4],[1077,5]]},"1313":{"position":[[151,4],[194,4]]},"1322":{"position":[[47,6],[1511,4],[1621,4],[1702,4]]},"1324":{"position":[[160,4],[203,4]]},"1329":{"position":[[1924,4],[1960,5]]},"1335":{"position":[[47,6],[1159,4],[1269,4],[1350,4]]},"1337":{"position":[[151,4],[194,4]]},"1346":{"position":[[47,6],[1125,4],[1235,4],[1276,4]]},"1348":{"position":[[151,4],[194,4]]},"1376":{"position":[[160,4],[203,4]]},"1379":{"position":[[2672,4]]},"1382":{"position":[[375,4]]},"1386":{"position":[[66,4],[99,4]]},"1387":{"position":[[126,5],[680,5]]},"1397":{"position":[[1092,4]]},"1398":{"position":[[1095,4]]},"1400":{"position":[[160,4],[203,4]]},"1403":{"position":[[2672,4]]},"1407":{"position":[[55,7],[75,6]]},"1408":{"position":[[419,7]]},"1409":{"position":[[1107,4]]},"1411":{"position":[[160,4],[203,4]]},"1414":{"position":[[2672,4]]},"1418":{"position":[[8,4]]},"1420":{"position":[[66,4]]},"1421":{"position":[[72,5]]},"1425":{"position":[[122,4]]},"1427":{"position":[[151,4]]}},"keywords":{}}],["host:port",{"_index":3404,"title":{},"content":{"370":{"position":[[306,9]]},"753":{"position":[[1643,9]]},"757":{"position":[[96,9]]},"770":{"position":[[96,9]]},"793":{"position":[[1666,9]]},"797":{"position":[[96,9]]},"808":{"position":[[1616,9]]},"812":{"position":[[96,9]]},"828":{"position":[[96,9]]},"867":{"position":[[89,9]]},"907":{"position":[[89,9]]},"919":{"position":[[2573,9]]},"923":{"position":[[89,9]]},"931":{"position":[[2095,9]]},"934":{"position":[[89,9]]},"950":{"position":[[89,9]]},"968":{"position":[[89,9]]},"1043":{"position":[[1908,9]]},"1045":{"position":[[96,9]]},"1053":{"position":[[96,9]]},"1059":{"position":[[1942,9]]},"1061":{"position":[[96,9]]},"1303":{"position":[[1738,9]]},"1310":{"position":[[581,10]]},"1335":{"position":[[1127,10]]},"1346":{"position":[[1093,10]]},"1397":{"position":[[1177,9]]},"1398":{"position":[[1180,9]]},"1409":{"position":[[1181,9]]},"1421":{"position":[[78,9]]}},"keywords":{}}],["host:port/sid",{"_index":4902,"title":{},"content":{"879":{"position":[[155,13]]}},"keywords":{}}],["host[:port",{"_index":5807,"title":{},"content":{"1188":{"position":[[128,13]]}},"keywords":{}}],["hostnam",{"_index":1132,"title":{},"content":{"81":{"position":[[2265,8]]},"225":{"position":[[138,9]]},"236":{"position":[[657,9]]},"402":{"position":[[71,8]]},"963":{"position":[[117,8]]},"1268":{"position":[[504,9],[646,9]]},"1286":{"position":[[2013,9],[2112,8],[2289,9]]},"1301":{"position":[[1849,9],[1948,8],[2125,9]]},"1325":{"position":[[2013,9],[2112,8],[2289,9]]}},"keywords":{}}],["hostname>/mi",{"_index":3870,"title":{},"content":{"488":{"position":[[824,15]]},"659":{"position":[[981,15]]},"676":{"position":[[824,15]]},"691":{"position":[[824,15]]}},"keywords":{}}],["hostname>/webhook",{"_index":3866,"title":{},"content":{"488":{"position":[[335,20]]},"659":{"position":[[492,20]]},"676":{"position":[[335,20]]},"691":{"position":[[335,20]]}},"keywords":{}}],["hour",{"_index":1832,"title":{},"content":{"146":{"position":[[167,5],[187,5],[298,6],[308,6],[318,6],[630,5],[656,5]]},"149":{"position":[[176,5],[196,5],[307,6],[317,6],[327,6],[603,5],[629,5]]},"152":{"position":[[183,5],[203,5],[314,6],[324,6],[334,6],[606,5],[632,5]]},"198":{"position":[[744,5]]},"209":{"position":[[1712,5]]},"240":{"position":[[3365,6],[3414,5]]},"279":{"position":[[323,6]]},"284":{"position":[[635,5]]},"578":{"position":[[66,5]]},"595":{"position":[[1655,4]]},"767":{"position":[[2363,7]]},"785":{"position":[[924,6]]},"792":{"position":[[2344,7]]},"821":{"position":[[873,5]]},"824":{"position":[[2475,7]]},"842":{"position":[[2086,5]]},"891":{"position":[[287,4]]},"1036":{"position":[[880,6]]},"1085":{"position":[[1125,5]]},"1140":{"position":[[3988,4]]},"1162":{"position":[[720,6]]},"1292":{"position":[[1991,4]]},"1306":{"position":[[1991,4]]},"1316":{"position":[[3988,4]]},"1329":{"position":[[1991,4]]},"1340":{"position":[[3988,4]]},"1351":{"position":[[3988,4]]},"1379":{"position":[[2718,4]]},"1403":{"position":[[2718,4]]},"1414":{"position":[[2718,4]]},"1431":{"position":[[4011,4]]},"1452":{"position":[[1783,4],[1824,5],[1882,5],[1975,5],[2991,6],[3073,4],[3474,5]]},"1453":{"position":[[635,5]]},"1471":{"position":[[931,5]]}},"keywords":{}}],["hour_microsec",{"_index":6030,"title":{},"content":{"1292":{"position":[[2026,13]]},"1306":{"position":[[2026,13]]},"1329":{"position":[[2026,13]]}},"keywords":{}}],["hour_minut",{"_index":6031,"title":{},"content":{"1292":{"position":[[2068,11]]},"1306":{"position":[[2068,11]]},"1329":{"position":[[2068,11]]}},"keywords":{}}],["hour_second",{"_index":6034,"title":{},"content":{"1292":{"position":[[2104,11]]},"1306":{"position":[[2104,11]]},"1329":{"position":[[2104,11]]}},"keywords":{}}],["hourli",{"_index":3728,"title":{},"content":{"443":{"position":[[83,7],[173,7],[251,7],[363,7],[444,7]]},"1080":{"position":[[137,6],[215,6],[301,6],[389,6],[488,6],[600,6],[668,6],[748,6]]},"1087":{"position":[[180,7]]}},"keywords":{}}],["hourscan",{"_index":3905,"title":{},"content":{"506":{"position":[[61,11]]}},"keywords":{}}],["hous",{"_index":3178,"title":{},"content":{"329":{"position":[[285,5]]}},"keywords":{}}],["hover",{"_index":1807,"title":{},"content":{"138":{"position":[[2513,5],[2649,5]]},"141":{"position":[[978,5],[2239,5]]},"142":{"position":[[2591,5],[2726,5]]},"146":{"position":[[563,5]]},"149":{"position":[[536,5]]},"152":{"position":[[539,5]]}},"keywords":{}}],["href=\\"/wiki/file:jeton._ordinaire_des_guerres_",{"_index":2744,"title":{},"content":{"253":{"position":[[2317,52]]},"313":{"position":[[2317,52]]}},"keywords":{}}],["http",{"_index":1910,"title":{"484":{"position":[[8,4]]},"633":{"position":[[0,4]]},"639":{"position":[[18,4]]},"640":{"position":[[16,4]]},"656":{"position":[[0,4]]},"672":{"position":[[9,4]]},"687":{"position":[[5,4]]},"1235":{"position":[[0,4]]}},"content":{"162":{"position":[[316,4]]},"363":{"position":[[1330,4],[1386,4],[1400,4],[1468,4]]},"489":{"position":[[122,4]]},"492":{"position":[[139,4]]},"503":{"position":[[89,4]]},"635":{"position":[[50,4],[115,4],[147,4],[430,4]]},"636":{"position":[[250,4]]},"637":{"position":[[141,4],[225,4],[306,4],[378,4],[402,4],[1048,4],[1070,4]]},"638":{"position":[[89,4]]},"639":{"position":[[1,4],[251,4]]},"640":{"position":[[86,4]]},"660":{"position":[[294,4],[776,4]]},"661":{"position":[[60,4]]},"662":{"position":[[122,4]]},"665":{"position":[[139,4]]},"677":{"position":[[122,4]]},"680":{"position":[[139,4]]},"692":{"position":[[122,4]]},"695":{"position":[[139,4]]},"1154":{"position":[[289,5]]},"1188":{"position":[[234,4],[244,4]]},"1196":{"position":[[117,7],[128,9]]},"1236":{"position":[[104,4]]},"1239":{"position":[[131,4],[143,4],[258,4]]}},"keywords":{}}],["http://192.168.1.100:3000",{"_index":5908,"title":{},"content":{"1241":{"position":[[180,26]]}},"keywords":{}}],["http://acme.com/teamuser#userprofile/#schema",{"_index":6634,"title":{},"content":{"1461":{"position":[[5656,44]]}},"keywords":{}}],["http://dashboard.estuary.devprivaci",{"_index":4836,"title":{},"content":{"856":{"position":[[228,35]]}},"keywords":{}}],["http://dashboard.estuary.devwebsit",{"_index":4834,"title":{},"content":{"856":{"position":[[182,35]]}},"keywords":{}}],["http://www.acme.com/teamuser#userprofile.flow.yaml",{"_index":6631,"title":{},"content":{"1461":{"position":[[5380,50]]}},"keywords":{}}],["http_path",{"_index":5809,"title":{},"content":{"1188":{"position":[[223,10]]},"1189":{"position":[[139,10]]}},"keywords":{}}],["https://<your",{"_index":3865,"title":{},"content":{"488":{"position":[[311,16],[800,16]]},"657":{"position":[[533,16]]},"659":{"position":[[468,16],[957,16]]},"675":{"position":[[200,16]]},"676":{"position":[[311,16],[800,16]]},"691":{"position":[[311,16],[800,16]]}},"keywords":{}}],["https://abc123",{"_index":3861,"title":{},"content":{"488":{"position":[[87,14]]},"659":{"position":[[244,14]]},"676":{"position":[[87,14]]},"691":{"position":[[87,14]]}},"keywords":{}}],["https://api.aircall.io/v1/numb",{"_index":3269,"title":{},"content":{"354":{"position":[[52,33]]}},"keywords":{}}],["https://cluster_id.region.cloud_platform.domain:port",{"_index":5826,"title":{},"content":{"1196":{"position":[[185,52]]}},"keywords":{}}],["https://console.neon.tech/api/v2/projects/hidden",{"_index":5088,"title":{},"content":{"943":{"position":[[934,49]]}},"keywords":{}}],["https://dashboard.stripe.com/apikey",{"_index":5290,"title":{},"content":{"1076":{"position":[[296,36]]}},"keywords":{}}],["https://dashboard.stripe.com/settings/account",{"_index":5288,"title":{},"content":{"1076":{"position":[[144,45]]}},"keywords":{}}],["https://dekaf.estuary.devsecur",{"_index":2637,"title":{},"content":{"247":{"position":[[141,33]]}},"keywords":{}}],["https://dekaf.estuary.devusernam",{"_index":5412,"title":{},"content":{"1118":{"position":[[628,34]]}},"keywords":{}}],["https://docs.google.com/spreadsheet",{"_index":4322,"title":{},"content":{"620":{"position":[[200,40]]}},"keywords":{}}],["https://docs.google.com/spreadsheets/d/<your_spreadsheet_id>/edit",{"_index":5914,"title":{},"content":{"1248":{"position":[[222,72]]}},"keywords":{}}],["https://ec47fc4d2c53414e1307e85726d4b9bb.u",{"_index":5832,"title":{},"content":{"1197":{"position":[[202,43]]}},"keywords":{}}],["https://example.com",{"_index":5355,"title":{},"content":{"1092":{"position":[[421,20]]}},"keywords":{}}],["https://example.com/yet/another/migration.sql",{"_index":1441,"title":{},"content":{"100":{"position":[[564,45]]}},"keywords":{}}],["https://example/path/flow.yaml",{"_index":1289,"title":{},"content":{"87":{"position":[[483,30]]}},"keywords":{}}],["https://ga",{"_index":4158,"title":{},"content":{"573":{"position":[[970,10]]}},"keywords":{}}],["https://github.com/estuary/flow/releases/latest/download/flowctl",{"_index":883,"title":{},"content":{"58":{"position":[[362,65],[538,65]]},"169":{"position":[[603,65],[782,65]]}},"keywords":{}}],["https://iamcredentials.googleapis.com/v1/project",{"_index":4088,"title":{},"content":{"548":{"position":[[975,50]]}},"keywords":{}}],["https://mi",{"_index":4361,"title":{},"content":{"635":{"position":[[324,10]]},"638":{"position":[[116,10]]}},"keywords":{}}],["https://my_subdomain.zendesk.com",{"_index":5461,"title":{},"content":{"1130":{"position":[[43,34]]},"1131":{"position":[[43,34]]},"1133":{"position":[[1069,34]]}},"keywords":{}}],["https://oauth2.googleapis.com/token",{"_index":4096,"title":{},"content":{"548":{"position":[[1464,35]]}},"keywords":{}}],["https://raw.githubusercontent.com/estuary/flow",{"_index":1295,"title":{},"content":{"87":{"position":[[773,46]]}},"keywords":{}}],["https://www.estuary.dev/privaci",{"_index":4837,"title":{},"content":{"856":{"position":[[272,31]]}},"keywords":{}}],["https://www.estuary.dev/term",{"_index":4839,"title":{},"content":{"856":{"position":[[325,30]]}},"keywords":{}}],["https://www.googleapis.com/auth/webmasters.readonli",{"_index":4305,"title":{},"content":{"609":{"position":[[446,51]]}},"keywords":{}}],["https://yaml",{"_index":1238,"title":{},"content":{"83":{"position":[[1418,12]]}},"keywords":{}}],["https://your",{"_index":3858,"title":{},"content":{"487":{"position":[[394,12]]}},"keywords":{}}],["https://yourdomain.com",{"_index":4312,"title":{},"content":{"612":{"position":[[301,22]]}},"keywords":{}}],["https://{}:{your_estuary_refresh_token}@dekaf.estuary.dev",{"_index":2686,"title":{},"content":{"250":{"position":[[1551,57]]}},"keywords":{}}],["hub",{"_index":4425,"title":{},"content":{"675":{"position":[[40,3]]}},"keywords":{}}],["hub,github",{"_index":1116,"title":{},"content":{"81":{"position":[[102,10]]}},"keywords":{}}],["hubspot",{"_index":3303,"title":{"641":{"position":[[0,7]]},"642":{"position":[[10,7]]},"644":{"position":[[34,7]]},"648":{"position":[[0,7]]},"651":{"position":[[34,7]]}},"content":{"363":{"position":[[1484,7],[1550,7]]},"364":{"position":[[1938,7]]},"642":{"position":[[66,7],[277,7]]},"643":{"position":[[41,7]]},"644":{"position":[[3,7]]},"645":{"position":[[3,7],[87,7],[140,7],[215,7],[267,8]]},"646":{"position":[[250,7],[546,7]]},"647":{"position":[[89,7]]},"649":{"position":[[48,7]]},"650":{"position":[[41,7]]},"651":{"position":[[3,7]]},"652":{"position":[[3,7],[87,7],[140,7],[215,7],[267,8]]},"653":{"position":[[250,7]]},"654":{"position":[[267,7],[596,7]]},"655":{"position":[[387,7]]}},"keywords":{}}],["hubspot:dev",{"_index":3349,"title":{},"content":{"364":{"position":[[1992,11]]},"655":{"position":[[89,11]]}},"keywords":{}}],["huge",{"_index":2048,"title":{},"content":{"180":{"position":[[70,4]]}},"keywords":{}}],["human",{"_index":961,"title":{},"content":{"64":{"position":[[459,5]]}},"keywords":{}}],["hundr",{"_index":2691,"title":{},"content":{"253":{"position":[[816,8]]},"313":{"position":[[816,8]]}},"keywords":{}}],["hypert",{"_index":6418,"title":{"1429":{"position":[[21,12]]}},"content":{"1427":{"position":[[766,12]]},"1429":{"position":[[1,11],[143,11]]}},"keywords":{}}],["hypothet",{"_index":3153,"title":{},"content":{"322":{"position":[[1189,12]]},"1453":{"position":[[391,12]]}},"keywords":{}}],["i.",{"_index":2195,"title":{},"content":{"197":{"position":[[1496,6]]}},"keywords":{}}],["iam",{"_index":2023,"title":{},"content":{"173":{"position":[[792,3],[847,5]]},"390":{"position":[[164,3],[443,3]]},"395":{"position":[[324,3],[613,3]]},"400":{"position":[[124,3]]},"405":{"position":[[5,3],[23,3]]},"406":{"position":[[68,3],[281,3],[345,3],[475,3]]},"408":{"position":[[197,3],[244,3],[304,3],[345,3]]},"413":{"position":[[219,3],[383,3]]},"415":{"position":[[224,3],[390,3],[429,3],[1005,3]]},"430":{"position":[[68,3],[123,3],[164,3]]},"432":{"position":[[567,3]]},"433":{"position":[[433,3]]},"477":{"position":[[849,3]]},"548":{"position":[[24,3]]},"598":{"position":[[812,3]]},"1122":{"position":[[41,3],[240,3]]},"1142":{"position":[[147,3]]},"1149":{"position":[[602,3]]},"1160":{"position":[[147,3],[227,3]]},"1168":{"position":[[147,3]]},"1203":{"position":[[558,3],[586,3]]},"1204":{"position":[[64,4],[117,3],[196,3],[527,3]]},"1227":{"position":[[207,3]]},"1228":{"position":[[222,3]]},"1258":{"position":[[196,3]]}},"keywords":{}}],["iana",{"_index":4592,"title":{},"content":{"750":{"position":[[1137,4]]},"754":{"position":[[536,4],[898,4],[1308,4]]},"757":{"position":[[620,4]]},"766":{"position":[[1137,4]]},"770":{"position":[[620,4]]},"789":{"position":[[1538,4]]},"794":{"position":[[578,4],[1104,4],[1512,4]]},"797":{"position":[[620,4]]},"807":{"position":[[1125,4]]},"809":{"position":[[578,4],[1104,4],[1512,4]]},"812":{"position":[[620,4]]},"823":{"position":[[1125,4]]},"825":{"position":[[578,4],[940,4],[1348,4]]},"828":{"position":[[620,4]]},"1285":{"position":[[632,4]]},"1286":{"position":[[635,4],[1161,4],[1598,4]]},"1300":{"position":[[632,4]]},"1301":{"position":[[635,4],[997,4],[1434,4]]},"1324":{"position":[[632,4]]},"1325":{"position":[[635,4],[1161,4],[1598,4]]},"1452":{"position":[[669,4],[3194,4]]}},"keywords":{}}],["iceberg",{"_index":5413,"title":{"1159":{"position":[[7,7]]},"1164":{"position":[[0,7]]}},"content":{"1120":{"position":[[333,7]]},"1164":{"position":[[39,7],[98,7],[206,7]]}},"keywords":{}}],["iceberg:dev",{"_index":5414,"title":{},"content":{"1120":{"position":[[408,11]]}},"keywords":{}}],["iceberg:dev"",{"_index":5766,"title":{},"content":{"1163":{"position":[[107,17]]}},"keywords":{}}],["icon",{"_index":1797,"title":{},"content":{"138":{"position":[[1841,4]]},"142":{"position":[[1882,4]]}},"keywords":{}}],["id",{"_index":14,"title":{"552":{"position":[[9,2],[29,3]]},"660":{"position":[[8,4]]},"661":{"position":[[18,4]]}},"content":{"1":{"position":[[180,5]]},"14":{"position":[[474,3],[547,4],[557,5],[680,3],[863,3],[1187,3]]},"67":{"position":[[167,2]]},"70":{"position":[[733,4],[750,3],[766,5]]},"90":{"position":[[388,3]]},"94":{"position":[[661,3]]},"107":{"position":[[1642,3],[1655,3],[3064,2],[3490,3]]},"123":{"position":[[243,5]]},"128":{"position":[[373,6]]},"132":{"position":[[504,4],[524,4],[544,4],[664,4]]},"133":{"position":[[440,4],[455,4]]},"160":{"position":[[607,2],[789,3],[836,5],[888,4]]},"161":{"position":[[653,5],[737,5],[830,5]]},"162":{"position":[[2138,3],[2253,3],[2301,5]]},"164":{"position":[[1096,2]]},"166":{"position":[[375,4],[392,3],[485,5]]},"173":{"position":[[332,3],[422,3],[508,3]]},"183":{"position":[[2153,2]]},"190":{"position":[[862,2]]},"263":{"position":[[432,3],[697,3],[742,2],[755,2]]},"277":{"position":[[324,4],[744,4]]},"278":{"position":[[946,5],[1307,4]]},"279":{"position":[[1209,5],[1277,2],[1698,2],[1703,4]]},"280":{"position":[[1459,5]]},"301":{"position":[[709,2]]},"351":{"position":[[72,2],[79,2]]},"375":{"position":[[338,2]]},"377":{"position":[[1169,2],[1192,3]]},"384":{"position":[[289,2]]},"385":{"position":[[700,4]]},"387":{"position":[[487,2],[501,2],[780,3],[803,3]]},"392":{"position":[[91,2]]},"397":{"position":[[87,2],[105,2]]},"408":{"position":[[212,2],[230,2]]},"417":{"position":[[735,2]]},"418":{"position":[[253,4]]},"432":{"position":[[965,2]]},"435":{"position":[[133,2]]},"436":{"position":[[90,2],[242,2],[256,2],[284,2],[543,2],[882,2],[979,3],[1002,3]]},"438":{"position":[[803,2],[817,2],[1085,2],[1092,2],[1248,2],[1255,2]]},"439":{"position":[[510,4]]},"446":{"position":[[98,2]]},"448":{"position":[[390,2],[404,2],[1063,2]]},"454":{"position":[[176,2]]},"477":{"position":[[634,2],[694,3],[941,2]]},"479":{"position":[[278,2]]},"480":{"position":[[839,4]]},"482":{"position":[[80,2],[99,2]]},"492":{"position":[[194,2]]},"514":{"position":[[95,3]]},"515":{"position":[[419,3]]},"517":{"position":[[635,2],[662,2]]},"546":{"position":[[990,4]]},"552":{"position":[[20,2],[69,3],[286,2],[594,4],[641,3]]},"553":{"position":[[63,2],[257,3]]},"554":{"position":[[63,2],[583,2]]},"556":{"position":[[599,2],[613,2],[1441,4],[1460,2],[1825,2],[1984,2]]},"565":{"position":[[63,2]]},"570":{"position":[[10,2]]},"571":{"position":[[10,2]]},"573":{"position":[[839,2],[846,2]]},"581":{"position":[[267,3]]},"584":{"position":[[852,2]]},"598":{"position":[[598,2],[658,3],[903,2]]},"601":{"position":[[79,2],[103,2]]},"602":{"position":[[932,2],[1065,3]]},"629":{"position":[[73,2]]},"631":{"position":[[80,2],[99,3]]},"638":{"position":[[282,4]]},"660":{"position":[[362,2],[1105,2],[1134,2]]},"661":{"position":[[42,2]]},"665":{"position":[[194,2]]},"668":{"position":[[160,2]]},"670":{"position":[[78,2],[92,2]]},"680":{"position":[[194,2]]},"695":{"position":[[194,2]]},"720":{"position":[[261,3],[314,3]]},"728":{"position":[[79,2],[109,3],[201,2],[228,3]]},"739":{"position":[[160,2]]},"741":{"position":[[78,2],[92,2]]},"745":{"position":[[98,3]]},"747":{"position":[[80,2],[96,2]]},"757":{"position":[[1167,2],[1175,2],[1256,3]]},"770":{"position":[[1167,2],[1175,2],[1256,3]]},"797":{"position":[[1167,2],[1175,2],[1256,3]]},"812":{"position":[[1167,2],[1175,2],[1256,3]]},"821":{"position":[[1524,3]]},"828":{"position":[[1167,2],[1175,2],[1256,3]]},"840":{"position":[[164,3],[300,3],[2312,2]]},"842":{"position":[[87,2],[113,2],[213,2],[220,2],[276,2]]},"843":{"position":[[616,2],[723,2]]},"849":{"position":[[70,2],[243,3],[3452,2],[3656,2]]},"867":{"position":[[1875,2],[1883,2],[1964,3]]},"869":{"position":[[51,3],[67,2]]},"885":{"position":[[78,2],[92,2]]},"894":{"position":[[99,2]]},"895":{"position":[[525,2]]},"898":{"position":[[733,2]]},"988":{"position":[[260,3]]},"989":{"position":[[756,3],[1181,2]]},"991":{"position":[[309,2],[334,3]]},"1003":{"position":[[260,3]]},"1004":{"position":[[839,3],[1264,2]]},"1008":{"position":[[1709,3],[1744,2]]},"1009":{"position":[[372,2],[397,3]]},"1022":{"position":[[319,4]]},"1067":{"position":[[608,3]]},"1070":{"position":[[442,2],[452,2],[812,3],[816,3]]},"1074":{"position":[[9,2]]},"1076":{"position":[[80,2],[103,2]]},"1083":{"position":[[292,2]]},"1085":{"position":[[530,2],[548,2]]},"1101":{"position":[[78,2],[93,2]]},"1113":{"position":[[81,2]]},"1125":{"position":[[87,2],[105,2]]},"1133":{"position":[[439,2],[465,3]]},"1144":{"position":[[160,2],[174,2]]},"1151":{"position":[[749,2],[767,2]]},"1162":{"position":[[94,2],[108,2]]},"1170":{"position":[[160,2],[174,2]]},"1179":{"position":[[80,2],[95,2],[746,2],[761,2]]},"1196":{"position":[[659,2]]},"1204":{"position":[[293,2],[577,2]]},"1206":{"position":[[80,2],[98,2]]},"1230":{"position":[[487,2]]},"1260":{"position":[[548,2],[566,2]]},"1277":{"position":[[543,2],[562,2]]},"1279":{"position":[[94,3]]},"1362":{"position":[[330,2],[340,2],[606,2]]},"1420":{"position":[[378,2]]},"1461":{"position":[[5054,5],[5706,5]]},"1474":{"position":[[707,3],[840,3]]}},"keywords":{}}],["id>",{"_index":4358,"title":{},"content":{"632":{"position":[[134,6]]},"671":{"position":[[139,6]]},"852":{"position":[[140,6]]},"1114":{"position":[[139,6]]}},"keywords":{}}],["id>"",{"_index":4232,"title":{},"content":{"585":{"position":[[803,13]]}},"keywords":{}}],["id"",{"_index":3513,"title":{},"content":{"392":{"position":[[209,8]]},"393":{"position":[[214,8]]},"398":{"position":[[215,8]]},"546":{"position":[[227,9],[275,9],[490,9]]},"594":{"position":[[215,9],[263,9],[478,9]]},"895":{"position":[[460,8]]},"898":{"position":[[801,9]]},"1126":{"position":[[176,8]]}},"keywords":{}}],["id(",{"_index":4120,"title":{},"content":{"556":{"position":[[1393,5]]}},"keywords":{}}],["id)consum",{"_index":4740,"title":{},"content":{"840":{"position":[[2523,11]]}},"keywords":{}}],["id.a",{"_index":3932,"title":{},"content":{"515":{"position":[[107,4]]}},"keywords":{}}],["id.api_token",{"_index":3257,"title":{},"content":{"349":{"position":[[319,13]]}},"keywords":{}}],["id/locations/u",{"_index":1167,"title":{},"content":{"82":{"position":[[1790,15],[2476,15],[4114,15],[4617,15]]}},"keywords":{}}],["id=userz",{"_index":3224,"title":{},"content":{"341":{"position":[[280,8]]}},"keywords":{}}],["id]whil",{"_index":1543,"title":{},"content":{"107":{"position":[[1973,10]]}},"keywords":{}}],["idclient",{"_index":3472,"title":{},"content":{"384":{"position":[[160,8]]},"435":{"position":[[102,8],[111,8]]}},"keywords":{}}],["idea",{"_index":2097,"title":{},"content":{"185":{"position":[[184,6]]},"255":{"position":[[111,4]]},"316":{"position":[[111,4]]}},"keywords":{}}],["ideal",{"_index":3167,"title":{},"content":{"324":{"position":[[888,7]]},"1471":{"position":[[163,5]]}},"keywords":{}}],["idempot",{"_index":6485,"title":{"1439":{"position":[[18,10]]}},"content":{"1439":{"position":[[219,12],[404,10],[794,12],[1446,10],[1547,10]]},"1442":{"position":[[1222,10],[1541,10]]},"1459":{"position":[[1305,10]]}},"keywords":{}}],["idempotent<br/>appli",{"_index":6444,"title":{},"content":{"1434":{"position":[[815,26]]}},"keywords":{}}],["ident",{"_index":1154,"title":{},"content":{"82":{"position":[[793,9]]},"142":{"position":[[218,9]]},"379":{"position":[[661,9]]},"395":{"position":[[675,8]]},"910":{"position":[[172,8]]},"926":{"position":[[172,8]]},"937":{"position":[[172,8]]},"953":{"position":[[172,8]]},"971":{"position":[[172,8]]},"1122":{"position":[[302,8]]},"1140":{"position":[[4024,8]]},"1316":{"position":[[4024,8]]},"1340":{"position":[[4024,8]]},"1351":{"position":[[4024,8]]},"1379":{"position":[[2761,8]]},"1403":{"position":[[2761,8]]},"1414":{"position":[[2761,8]]},"1431":{"position":[[4047,8]]}},"keywords":{}}],["identif",{"_index":4886,"title":{},"content":{"869":{"position":[[329,14]]}},"keywords":{}}],["identifi",{"_index":485,"title":{"263":{"position":[[0,8]]}},"content":{"16":{"position":[[1206,8],[1248,10]]},"17":{"position":[[141,10]]},"27":{"position":[[72,10]]},"42":{"position":[[65,8]]},"54":{"position":[[287,10]]},"56":{"position":[[1750,8]]},"67":{"position":[[594,10],[1413,10]]},"107":{"position":[[398,8]]},"120":{"position":[[1893,8]]},"146":{"position":[[945,10],[1037,11]]},"149":{"position":[[936,10],[1031,11]]},"152":{"position":[[921,10],[1021,11]]},"173":{"position":[[114,11]]},"192":{"position":[[843,11],[892,11]]},"208":{"position":[[1798,11]]},"217":{"position":[[1042,10]]},"240":{"position":[[2823,10]]},"274":{"position":[[430,8]]},"284":{"position":[[141,8]]},"288":{"position":[[873,10],[943,11],[995,10]]},"296":{"position":[[3202,8]]},"299":{"position":[[788,10],[858,11],[910,10]]},"454":{"position":[[190,10]]},"480":{"position":[[619,8],[709,8],[777,8],[869,11]]},"482":{"position":[[570,10]]},"565":{"position":[[73,10]]},"584":{"position":[[887,10]]},"590":{"position":[[642,11]]},"660":{"position":[[1162,10]]},"661":{"position":[[393,8]]},"752":{"position":[[663,10]]},"753":{"position":[[1319,10]]},"767":{"position":[[1996,10]]},"791":{"position":[[616,10]]},"792":{"position":[[1936,10]]},"793":{"position":[[1290,10]]},"808":{"position":[[1236,10]]},"821":{"position":[[1086,8],[1330,8],[1416,8],[1487,8],[1548,8]]},"824":{"position":[[2058,10]]},"864":{"position":[[219,10]]},"869":{"position":[[93,8],[711,11],[872,11]]},"876":{"position":[[219,10]]},"945":{"position":[[840,11]]},"1031":{"position":[[686,11]]},"1034":{"position":[[246,10]]},"1047":{"position":[[521,8]]},"1055":{"position":[[521,8]]},"1063":{"position":[[521,8]]},"1140":{"position":[[87,11]]},"1155":{"position":[[41,11],[128,11],[151,11]]},"1192":{"position":[[87,11],[303,11]]},"1209":{"position":[[64,12]]},"1230":{"position":[[1083,10],[1111,10],[1131,10]]},"1232":{"position":[[143,10],[381,11],[496,11],[587,11]]},"1292":{"position":[[82,11],[2142,10]]},"1303":{"position":[[1460,10]]},"1306":{"position":[[82,11],[2142,10]]},"1316":{"position":[[87,11]]},"1329":{"position":[[82,11],[2142,10]]},"1340":{"position":[[87,11]]},"1351":{"position":[[87,11]]},"1370":{"position":[[83,11]]},"1379":{"position":[[86,11]]},"1382":{"position":[[432,11]]},"1386":{"position":[[674,10]]},"1394":{"position":[[86,11],[300,11]]},"1403":{"position":[[86,11]]},"1414":{"position":[[86,11]]},"1423":{"position":[[93,11],[310,11]]},"1431":{"position":[[110,11]]},"1453":{"position":[[1335,10]]},"1474":{"position":[[113,10]]}},"keywords":{}}],["identifier($database_nam",{"_index":2145,"title":{},"content":{"191":{"position":[[960,27],[1001,27],[1834,26]]},"240":{"position":[[921,27],[962,27],[1795,26]]},"1032":{"position":[[1453,26],[1557,26],[1658,26],[1762,26],[1863,26]]},"1383":{"position":[[908,27],[949,27],[1782,26]]}},"keywords":{}}],["identifier($estuary_rol",{"_index":2143,"title":{},"content":{"191":{"position":[[825,26],[863,25],[1273,25],[1385,26],[1723,26],[1869,26],[2072,26]]},"240":{"position":[[786,26],[824,25],[1234,25],[1346,26],[1684,26],[1830,26],[2033,26]]},"1032":{"position":[[690,26],[728,25],[930,25],[1283,26],[1488,26],[1592,26],[1693,26],[1797,26],[1898,26]]},"1383":{"position":[[773,26],[811,25],[1221,25],[1333,26],[1671,26],[1817,26],[2020,26]]}},"keywords":{}}],["identifier($estuary_schema",{"_index":2146,"title":{},"content":{"191":{"position":[[1057,28],[1354,27]]},"240":{"position":[[1018,28],[1315,27]]},"1383":{"position":[[1005,28],[1302,27]]}},"keywords":{}}],["identifier($estuary_us",{"_index":2147,"title":{},"content":{"191":{"position":[[1141,25],[1307,26]]},"240":{"position":[[1102,25],[1268,26]]},"1032":{"position":[[798,25],[964,26]]},"1383":{"position":[[1089,25],[1255,26]]}},"keywords":{}}],["identifier($warehouse_nam",{"_index":2150,"title":{},"content":{"191":{"position":[[1477,27],[1687,27]]},"240":{"position":[[1438,27],[1648,27]]},"1032":{"position":[[1079,27],[1247,27]]},"1383":{"position":[[1425,27],[1635,27]]}},"keywords":{}}],["identifier/connector",{"_index":1773,"title":{},"content":{"138":{"position":[[790,20]]},"142":{"position":[[761,20]]}},"keywords":{}}],["identity_ins",{"_index":6328,"title":{},"content":{"1379":{"position":[[2815,13]]},"1403":{"position":[[2815,13]]},"1414":{"position":[[2815,13]]}},"keywords":{}}],["identitycol",{"_index":6329,"title":{},"content":{"1379":{"position":[[2871,11]]},"1403":{"position":[[2871,11]]},"1414":{"position":[[2871,11]]}},"keywords":{}}],["ideriv",{"_index":1484,"title":{},"content":{"104":{"position":[[14,11]]},"281":{"position":[[1227,12],[1389,11]]},"296":{"position":[[5220,12],[5469,11],[5872,12],[6121,11]]},"315":{"position":[[1313,12],[1565,11],[1860,11]]}},"keywords":{}}],["idfor",{"_index":5962,"title":{},"content":{"1279":{"position":[[102,5]]}},"keywords":{}}],["idfromhead",{"_index":3889,"title":{},"content":{"492":{"position":[[85,13]]},"660":{"position":[[660,12]]},"665":{"position":[[85,13]]},"680":{"position":[[85,13]]},"695":{"position":[[85,13]]}},"keywords":{}}],["idfromheadergithub",{"_index":4407,"title":{},"content":{"660":{"position":[[1045,18]]}},"keywords":{}}],["idl",{"_index":2609,"title":{},"content":{"240":{"position":[[3591,4]]},"1036":{"position":[[781,4]]}},"keywords":{}}],["idpriv",{"_index":3757,"title":{},"content":{"452":{"position":[[99,9]]}},"keywords":{}}],["idsqueuesrecordingstranscriptionsusag",{"_index":5402,"title":{},"content":{"1110":{"position":[[428,38]]}},"keywords":{}}],["idtoken",{"_index":4743,"title":{},"content":{"840":{"position":[[2559,7]]},"849":{"position":[[3699,7]]}},"keywords":{}}],["idx_foo_th",{"_index":1438,"title":{},"content":{"100":{"position":[[444,13]]}},"keywords":{}}],["idx_transfers_send",{"_index":2855,"title":{},"content":{"279":{"position":[[1394,20]]}},"keywords":{}}],["iex",{"_index":3444,"title":{},"content":{"375":{"position":[[250,3]]},"377":{"position":[[1352,3],[1368,3]]},"378":{"position":[[184,3]]}},"keywords":{}}],["if/then/els",{"_index":6649,"title":{},"content":{"1465":{"position":[[227,13]]}},"keywords":{}}],["ignor",{"_index":837,"title":{},"content":{"56":{"position":[[877,8]]},"103":{"position":[[381,8]]},"166":{"position":[[557,7]]},"310":{"position":[[263,7]]},"496":{"position":[[324,6],[340,6]]},"762":{"position":[[407,8]]},"775":{"position":[[407,8]]},"802":{"position":[[407,8]]},"817":{"position":[[407,8]]},"833":{"position":[[407,8]]},"1292":{"position":[[2211,6]]},"1306":{"position":[[2211,6]]},"1329":{"position":[[2211,6]]},"1370":{"position":[[1248,6]]},"1379":{"position":[[2972,6]]},"1403":{"position":[[2972,6]]},"1414":{"position":[[2972,6]]},"1437":{"position":[[256,8]]},"1444":{"position":[[532,6]]},"1477":{"position":[[1493,8],[3659,8]]}},"keywords":{}}],["ignore_serv",{"_index":6038,"title":{},"content":{"1292":{"position":[[2247,13]]},"1306":{"position":[[2247,13]]},"1329":{"position":[[2247,13]]}},"keywords":{}}],["ignore_weekend",{"_index":3896,"title":{},"content":{"496":{"position":[[307,16]]},"497":{"position":[[176,16]]}},"keywords":{}}],["ii",{"_index":2202,"title":{},"content":{"198":{"position":[[876,2]]}},"keywords":{}}],["ilik",{"_index":5704,"title":{},"content":{"1140":{"position":[[4071,5]]},"1209":{"position":[[411,5]]},"1316":{"position":[[4071,5]]},"1340":{"position":[[4071,5]]},"1351":{"position":[[4071,5]]},"1394":{"position":[[594,5]]},"1431":{"position":[[4094,5]]}},"keywords":{}}],["illustr",{"_index":2897,"title":{},"content":{"281":{"position":[[2310,12]]},"1440":{"position":[[403,10]]}},"keywords":{}}],["imag",{"_index":707,"title":{"786":{"position":[[27,7]]}},"content":{"38":{"position":[[578,7]]},"56":{"position":[[1075,6],[1102,5],[1147,6]]},"81":{"position":[[52,7],[153,5],[256,5],[281,5],[353,5],[390,5],[1104,5],[1241,6],[2599,6]]},"83":{"position":[[968,6]]},"84":{"position":[[1076,5],[1245,5]]},"120":{"position":[[415,6],[442,5],[495,6]]},"141":{"position":[[219,5]]},"223":{"position":[[835,5]]},"236":{"position":[[605,6],[1128,6]]},"307":{"position":[[1080,6],[1548,6],[1930,6],[2416,6]]},"309":{"position":[[2367,6],[2974,6]]},"344":{"position":[[249,6]]},"360":{"position":[[60,6]]},"371":{"position":[[119,6]]},"378":{"position":[[59,6]]},"388":{"position":[[129,6]]},"393":{"position":[[119,6]]},"395":{"position":[[276,6]]},"398":{"position":[[119,6]]},"403":{"position":[[59,6]]},"418":{"position":[[59,6]]},"425":{"position":[[60,6]]},"433":{"position":[[101,6],[512,6]]},"439":{"position":[[59,6]]},"449":{"position":[[129,6]]},"455":{"position":[[60,6]]},"461":{"position":[[60,6]]},"467":{"position":[[60,6]]},"473":{"position":[[129,6]]},"497":{"position":[[59,6]]},"503":{"position":[[59,6]]},"510":{"position":[[59,6]]},"517":{"position":[[2891,6]]},"518":{"position":[[129,6]]},"527":{"position":[[129,6]]},"531":{"position":[[313,5]]},"535":{"position":[[129,6]]},"541":{"position":[[60,6]]},"546":{"position":[[59,6]]},"557":{"position":[[129,6]]},"566":{"position":[[59,6]]},"575":{"position":[[115,6]]},"586":{"position":[[115,6]]},"594":{"position":[[59,6]]},"612":{"position":[[129,6]]},"616":{"position":[[330,5]]},"620":{"position":[[59,6]]},"626":{"position":[[60,6]]},"632":{"position":[[60,6]]},"638":{"position":[[59,6]]},"647":{"position":[[59,6]]},"655":{"position":[[59,6]]},"671":{"position":[[60,6]]},"686":{"position":[[120,6]]},"701":{"position":[[60,6]]},"707":{"position":[[60,6]]},"713":{"position":[[60,6]]},"721":{"position":[[129,6]]},"736":{"position":[[59,6]]},"742":{"position":[[60,6]]},"748":{"position":[[60,6]]},"758":{"position":[[119,6]]},"771":{"position":[[119,6]]},"783":{"position":[[59,6]]},"786":{"position":[[93,6],[193,6],[297,6]]},"798":{"position":[[119,6]]},"813":{"position":[[119,6]]},"829":{"position":[[119,6]]},"843":{"position":[[60,6]]},"852":{"position":[[60,6]]},"860":{"position":[[129,6]]},"868":{"position":[[59,6]]},"880":{"position":[[59,6]]},"886":{"position":[[60,6]]},"892":{"position":[[59,6]]},"908":{"position":[[119,6]]},"924":{"position":[[119,6]]},"935":{"position":[[119,6]]},"951":{"position":[[119,6]]},"960":{"position":[[60,6]]},"969":{"position":[[119,6]]},"983":{"position":[[60,6]]},"992":{"position":[[59,6]]},"998":{"position":[[60,6]]},"1010":{"position":[[129,6]]},"1016":{"position":[[60,6]]},"1022":{"position":[[49,6]]},"1029":{"position":[[60,6]]},"1037":{"position":[[60,6]]},"1046":{"position":[[59,6]]},"1054":{"position":[[59,6]]},"1062":{"position":[[59,6]]},"1071":{"position":[[129,6]]},"1078":{"position":[[59,6]]},"1086":{"position":[[141,6]]},"1102":{"position":[[60,6]]},"1108":{"position":[[59,6]]},"1114":{"position":[[60,6]]},"1126":{"position":[[75,6]]},"1134":{"position":[[59,6]]},"1139":{"position":[[63,6]]},"1145":{"position":[[63,6]]},"1152":{"position":[[63,6]]},"1163":{"position":[[63,6]]},"1171":{"position":[[63,6]]},"1180":{"position":[[224,6]]},"1189":{"position":[[265,6]]},"1197":{"position":[[125,5],[131,6]]},"1207":{"position":[[350,5],[356,6]]},"1214":{"position":[[63,6]]},"1221":{"position":[[63,6]]},"1241":{"position":[[117,6]]},"1248":{"position":[[295,6]]},"1254":{"position":[[67,6]]},"1261":{"position":[[63,6]]},"1270":{"position":[[63,6]]},"1278":{"position":[[63,6]]},"1287":{"position":[[63,6]]},"1298":{"position":[[835,5]]},"1302":{"position":[[63,6]]},"1314":{"position":[[63,6]]},"1326":{"position":[[63,6]]},"1338":{"position":[[63,6]]},"1346":{"position":[[835,5]]},"1349":{"position":[[63,6]]},"1357":{"position":[[200,5],[206,6]]},"1363":{"position":[[75,6]]},"1368":{"position":[[63,6]]},"1377":{"position":[[63,6]]},"1387":{"position":[[305,6],[931,6]]},"1401":{"position":[[63,6]]},"1412":{"position":[[63,6]]},"1421":{"position":[[292,6]]},"1428":{"position":[[63,6]]},"1472":{"position":[[675,6]]},"1480":{"position":[[352,6],[379,5],[432,6]]}},"keywords":{}}],["images.sheet",{"_index":4318,"title":{},"content":{"616":{"position":[[354,12]]}},"keywords":{}}],["imagin",{"_index":2110,"title":{},"content":{"189":{"position":[[320,7]]},"322":{"position":[[1179,7]]},"1461":{"position":[[4523,7]]},"1462":{"position":[[343,7]]}},"keywords":{}}],["immedi",{"_index":532,"title":{},"content":{"20":{"position":[[319,11]]},"82":{"position":[[968,11]]},"100":{"position":[[1008,11]]},"144":{"position":[[230,11]]},"165":{"position":[[2107,11]]},"238":{"position":[[299,11]]},"240":{"position":[[3511,11],[4698,12]]},"436":{"position":[[775,11]]},"759":{"position":[[50,11]]},"760":{"position":[[731,9]]},"772":{"position":[[61,11]]},"773":{"position":[[731,9]]},"799":{"position":[[48,11]]},"800":{"position":[[731,9]]},"814":{"position":[[48,11]]},"815":{"position":[[731,9]]},"830":{"position":[[48,11]]},"831":{"position":[[731,9]]},"1140":{"position":[[4119,9]]},"1316":{"position":[[4119,9]]},"1340":{"position":[[4119,9]]},"1351":{"position":[[4119,9]]},"1370":{"position":[[1262,9]]},"1379":{"position":[[3029,9]]},"1403":{"position":[[3029,9]]},"1414":{"position":[[3029,9]]},"1431":{"position":[[4142,9]]},"1442":{"position":[[1465,11],[1725,11],[1844,11]]},"1443":{"position":[[201,11]]},"1447":{"position":[[220,11]]},"1452":{"position":[[2178,12]]},"1461":{"position":[[1503,11]]}},"keywords":{}}],["immediately,<br/>or",{"_index":6451,"title":{},"content":{"1434":{"position":[[1317,25]]}},"keywords":{}}],["immens",{"_index":1870,"title":{},"content":{"158":{"position":[[746,9]]}},"keywords":{}}],["impact",{"_index":1863,"title":{},"content":{"156":{"position":[[775,6]]},"227":{"position":[[261,6]]},"333":{"position":[[578,9]]},"760":{"position":[[163,9]]},"773":{"position":[[163,9]]},"800":{"position":[[163,9]]},"815":{"position":[[163,9]]},"821":{"position":[[338,6],[895,6]]},"831":{"position":[[163,9]]},"910":{"position":[[328,7]]},"912":{"position":[[349,6]]},"926":{"position":[[328,7]]},"937":{"position":[[328,7]]},"953":{"position":[[328,7]]},"971":{"position":[[328,7]]},"1391":{"position":[[103,6]]}},"keywords":{}}],["imper",{"_index":6428,"title":{},"content":{"1434":{"position":[[89,10]]}},"keywords":{}}],["imperson",{"_index":4083,"title":{"548":{"position":[[43,14]]}},"content":{"548":{"position":[[87,11],[399,11],[901,11],[1184,11]]}},"keywords":{}}],["impersonated_service_account",{"_index":4098,"title":{},"content":{"548":{"position":[[1528,28]]}},"keywords":{}}],["implement",{"_index":569,"title":{"276":{"position":[[0,12]]},"1436":{"position":[[7,14]]}},"content":{"21":{"position":[[483,9]]},"56":{"position":[[1113,10]]},"81":{"position":[[1115,10]]},"82":{"position":[[1169,9]]},"84":{"position":[[44,11],[589,11],[735,12]]},"94":{"position":[[834,12],[2441,15]]},"102":{"position":[[126,10]]},"103":{"position":[[131,10]]},"104":{"position":[[217,14]]},"113":{"position":[[466,9]]},"115":{"position":[[121,9]]},"120":{"position":[[453,10]]},"133":{"position":[[152,9]]},"177":{"position":[[194,9]]},"221":{"position":[[17,14]]},"252":{"position":[[36,9],[104,9]]},"253":{"position":[[13,9]]},"279":{"position":[[65,9],[913,12]]},"281":{"position":[[598,9],[1308,14],[3294,12]]},"294":{"position":[[36,9],[111,9]]},"295":{"position":[[971,9],[1442,9]]},"296":{"position":[[1675,9],[5354,14],[5787,9],[6006,14]]},"312":{"position":[[36,9],[111,9]]},"313":{"position":[[13,9]]},"315":{"position":[[1444,14],[1791,9]]},"483":{"position":[[218,10],[335,9]]},"907":{"position":[[1685,15]]},"923":{"position":[[1685,15]]},"968":{"position":[[1685,15]]},"1008":{"position":[[914,11]]},"1313":{"position":[[1435,15]]},"1337":{"position":[[1435,15]]},"1435":{"position":[[628,12]]},"1436":{"position":[[24,14]]},"1437":{"position":[[1218,9]]},"1444":{"position":[[317,12]]},"1459":{"position":[[1381,12],[1423,15]]},"1479":{"position":[[354,12]]},"1480":{"position":[[390,10]]}},"keywords":{}}],["implemented"",{"_index":3019,"title":{},"content":{"296":{"position":[[5568,19],[5681,19]]},"315":{"position":[[1688,19]]}},"keywords":{}}],["implementor",{"_index":6470,"title":{},"content":{"1435":{"position":[[689,11]]}},"keywords":{}}],["impli",{"_index":2865,"title":{},"content":{"280":{"position":[[663,7]]}},"keywords":{}}],["implic",{"_index":5835,"title":{},"content":{"1199":{"position":[[142,12]]}},"keywords":{}}],["import",{"_index":607,"title":{"86":{"position":[[0,7]]},"89":{"position":[[0,6]]},"91":{"position":[[0,9]]},"92":{"position":[[0,6]]},"1461":{"position":[[0,7]]}},"content":{"26":{"position":[[276,7]]},"32":{"position":[[39,9]]},"38":{"position":[[381,10]]},"39":{"position":[[30,9]]},"43":{"position":[[17,9]]},"56":{"position":[[1579,8]]},"60":{"position":[[140,9]]},"63":{"position":[[211,7],[365,8]]},"74":{"position":[[295,9]]},"81":{"position":[[2798,9]]},"82":{"position":[[3184,9]]},"84":{"position":[[800,9]]},"87":{"position":[[5,6],[192,7],[278,7],[545,6],[625,8]]},"88":{"position":[[43,7]]},"89":{"position":[[20,6],[45,6],[131,7],[231,8],[251,7]]},"90":{"position":[[128,6],[194,7],[558,6]]},"91":{"position":[[57,6],[245,7],[311,6]]},"92":{"position":[[139,6],[233,6],[265,6],[318,6],[365,6],[379,6],[593,6],[930,8]]},"141":{"position":[[169,9]]},"176":{"position":[[244,9]]},"222":{"position":[[655,6],[847,9]]},"250":{"position":[[208,6]]},"254":{"position":[[2343,9],[3729,9]]},"263":{"position":[[1044,7]]},"264":{"position":[[496,9]]},"274":{"position":[[1889,7]]},"275":{"position":[[503,7]]},"281":{"position":[[1218,6]]},"296":{"position":[[1741,9],[3412,9],[5211,6],[5863,6]]},"314":{"position":[[1884,9]]},"315":{"position":[[1304,6]]},"320":{"position":[[284,9],[1661,9]]},"324":{"position":[[147,9],[920,9]]},"419":{"position":[[1449,9]]},"429":{"position":[[107,9]]},"441":{"position":[[58,9]]},"504":{"position":[[1078,9]]},"547":{"position":[[1451,9]]},"639":{"position":[[1076,9]]},"840":{"position":[[1042,11],[1146,11],[1245,11],[1342,11]]},"849":{"position":[[2053,11],[2174,11]]},"919":{"position":[[2415,9]]},"1008":{"position":[[856,9]]},"1023":{"position":[[1432,9]]},"1043":{"position":[[1779,9]]},"1140":{"position":[[4159,6]]},"1203":{"position":[[151,9]]},"1292":{"position":[[2299,6]]},"1306":{"position":[[2299,6]]},"1316":{"position":[[4159,6]]},"1322":{"position":[[655,6],[847,9]]},"1329":{"position":[[2299,6]]},"1335":{"position":[[655,6],[847,9]]},"1340":{"position":[[4159,6]]},"1351":{"position":[[4159,6]]},"1358":{"position":[[638,9]]},"1409":{"position":[[1052,9]]},"1431":{"position":[[4182,6]]},"1437":{"position":[[604,9]]},"1443":{"position":[[642,9]]},"1461":{"position":[[8,6],[146,6],[189,6],[259,6],[421,7],[462,6],[498,9],[542,9],[1837,6],[1970,7],[2306,7],[2486,6],[3147,6],[3273,6],[3526,7],[3728,7],[4908,7],[5150,6],[5371,7],[5589,6]]},"1462":{"position":[[218,6],[449,6]]},"1474":{"position":[[203,9]]}},"keywords":{}}],["importantadmin",{"_index":6622,"title":{},"content":{"1461":{"position":[[3893,14]]}},"keywords":{}}],["impos",{"_index":1068,"title":{},"content":{"72":{"position":[[616,6]]},"162":{"position":[[32,6],[447,6]]},"319":{"position":[[1363,7]]},"331":{"position":[[209,7]]},"900":{"position":[[19,7]]},"1068":{"position":[[22,7]]}},"keywords":{}}],["improv",{"_index":1076,"title":{},"content":{"74":{"position":[[210,7]]},"103":{"position":[[315,7]]},"417":{"position":[[191,7]]},"438":{"position":[[191,7]]},"502":{"position":[[651,7]]},"545":{"position":[[191,7]]},"785":{"position":[[965,7]]},"1021":{"position":[[1217,7]]},"1182":{"position":[[354,7]]},"1191":{"position":[[356,7]]},"1262":{"position":[[356,7]]},"1389":{"position":[[355,7]]}},"keywords":{}}],["inact",{"_index":5105,"title":{},"content":{"945":{"position":[[906,8]]},"1292":{"position":[[2392,8]]},"1306":{"position":[[2392,8]]},"1329":{"position":[[2392,8]]},"1388":{"position":[[198,8]]}},"keywords":{}}],["inadvert",{"_index":1511,"title":{},"content":{"106":{"position":[[584,13]]},"1437":{"position":[[1124,13]]}},"keywords":{}}],["inbound",{"_index":3669,"title":{"946":{"position":[[6,7]]}},"content":{"430":{"position":[[256,7]]},"767":{"position":[[318,7]]},"792":{"position":[[631,7]]},"824":{"position":[[423,7]]},"904":{"position":[[422,7]]},"918":{"position":[[631,7]]},"946":{"position":[[117,7]]},"1051":{"position":[[422,7]]},"1289":{"position":[[505,7]]},"1321":{"position":[[285,7]]},"1334":{"position":[[373,7]]},"1373":{"position":[[404,7]]},"1374":{"position":[[404,7]]}},"keywords":{}}],["includ",{"_index":263,"title":{"230":{"position":[[0,7]]},"865":{"position":[[0,7]]},"877":{"position":[[0,7]]}},"content":{"8":{"position":[[409,8],[931,8]]},"11":{"position":[[829,8]]},"17":{"position":[[250,8],[344,9],[484,8],[547,9],[570,8],[581,7]]},"32":{"position":[[443,8]]},"37":{"position":[[169,9]]},"40":{"position":[[304,9]]},"42":{"position":[[30,8]]},"49":{"position":[[314,9]]},"53":{"position":[[78,9],[486,8]]},"56":{"position":[[100,7]]},"60":{"position":[[9,8],[103,7]]},"63":{"position":[[157,8],[421,9]]},"68":{"position":[[1084,7],[1677,7]]},"69":{"position":[[106,7]]},"70":{"position":[[529,7]]},"73":{"position":[[92,7]]},"81":{"position":[[2433,9]]},"88":{"position":[[120,8]]},"89":{"position":[[352,7]]},"92":{"position":[[306,7]]},"97":{"position":[[204,7],[829,7]]},"98":{"position":[[495,8]]},"101":{"position":[[84,9]]},"104":{"position":[[71,8]]},"120":{"position":[[116,7],[805,7]]},"122":{"position":[[875,9],[926,9],[1453,7],[1565,10],[1774,8],[2241,8]]},"123":{"position":[[750,8]]},"129":{"position":[[623,7]]},"130":{"position":[[18,7],[363,8]]},"135":{"position":[[229,10]]},"138":{"position":[[1741,9]]},"141":{"position":[[1749,9]]},"142":{"position":[[1766,9]]},"154":{"position":[[1182,8],[1873,9]]},"160":{"position":[[445,7]]},"165":{"position":[[1583,7]]},"168":{"position":[[81,8]]},"180":{"position":[[665,8]]},"183":{"position":[[4291,8]]},"189":{"position":[[148,9]]},"190":{"position":[[1931,9]]},"197":{"position":[[976,9],[1358,9]]},"201":{"position":[[93,8]]},"223":{"position":[[696,8]]},"227":{"position":[[54,8]]},"229":{"position":[[285,9]]},"230":{"position":[[108,7],[147,8],[1114,7],[1291,8]]},"237":{"position":[[2073,8]]},"239":{"position":[[2199,9],[2505,7]]},"254":{"position":[[1626,8],[1734,7]]},"268":{"position":[[1618,8]]},"269":{"position":[[1139,8]]},"274":{"position":[[14,10]]},"280":{"position":[[1984,8]]},"281":{"position":[[1072,8]]},"305":{"position":[[371,9]]},"314":{"position":[[1437,8],[1551,7]]},"320":{"position":[[2227,8]]},"329":{"position":[[743,9]]},"330":{"position":[[129,8]]},"373":{"position":[[70,9]]},"402":{"position":[[457,8]]},"413":{"position":[[370,7]]},"419":{"position":[[642,9],[1402,7],[2231,8],[2793,8]]},"440":{"position":[[658,9]]},"441":{"position":[[11,7],[840,8],[1402,8]]},"480":{"position":[[513,8]]},"491":{"position":[[501,7]]},"504":{"position":[[586,9],[1031,7],[1860,8]]},"517":{"position":[[3017,7],[3033,7]]},"534":{"position":[[756,7]]},"547":{"position":[[643,9],[1404,7],[2233,8],[2795,8]]},"574":{"position":[[9,7],[603,7]]},"585":{"position":[[9,7],[517,7]]},"635":{"position":[[200,7]]},"639":{"position":[[584,9],[1029,7],[1858,8],[2420,8]]},"640":{"position":[[244,7]]},"664":{"position":[[522,7],[757,7]]},"679":{"position":[[501,7]]},"694":{"position":[[501,7]]},"750":{"position":[[1055,7]]},"753":{"position":[[490,9]]},"754":{"position":[[231,9],[934,7]]},"766":{"position":[[1055,7]]},"767":{"position":[[636,9]]},"786":{"position":[[73,7]]},"789":{"position":[[1456,7]]},"792":{"position":[[914,9]]},"793":{"position":[[449,9]]},"794":{"position":[[104,9],[1140,7]]},"807":{"position":[[1043,7]]},"808":{"position":[[465,9]]},"809":{"position":[[104,9],[1140,7]]},"821":{"position":[[1229,8]]},"823":{"position":[[1043,7]]},"824":{"position":[[706,9]]},"825":{"position":[[104,9],[976,7]]},"838":{"position":[[74,9]]},"866":{"position":[[466,9]]},"867":{"position":[[1576,10]]},"878":{"position":[[476,9]]},"904":{"position":[[705,9]]},"911":{"position":[[471,8]]},"918":{"position":[[914,9]]},"919":{"position":[[449,9]]},"927":{"position":[[471,8]]},"931":{"position":[[469,9]]},"938":{"position":[[471,8]]},"945":{"position":[[57,7]]},"954":{"position":[[471,8]]},"972":{"position":[[471,8]]},"989":{"position":[[1285,7]]},"1004":{"position":[[1368,7]]},"1008":{"position":[[1770,7]]},"1021":{"position":[[806,9]]},"1023":{"position":[[623,9],[1385,7],[2214,8],[2776,8]]},"1031":{"position":[[63,9]]},"1034":{"position":[[168,7]]},"1042":{"position":[[1257,7]]},"1043":{"position":[[449,9]]},"1051":{"position":[[705,9]]},"1059":{"position":[[469,9]]},"1123":{"position":[[104,7],[359,9]]},"1185":{"position":[[64,9]]},"1192":{"position":[[361,9]]},"1201":{"position":[[15,8]]},"1209":{"position":[[111,7]]},"1230":{"position":[[1198,8]]},"1239":{"position":[[243,7]]},"1275":{"position":[[175,9],[253,7]]},"1276":{"position":[[140,7]]},"1286":{"position":[[113,9],[1197,7]]},"1293":{"position":[[15,8]]},"1298":{"position":[[696,8]]},"1301":{"position":[[113,9],[1033,7]]},"1303":{"position":[[469,9]]},"1307":{"position":[[15,8]]},"1317":{"position":[[15,8],[331,8]]},"1325":{"position":[[113,9],[1197,7]]},"1330":{"position":[[15,8]]},"1341":{"position":[[15,8],[331,8]]},"1346":{"position":[[696,8]]},"1352":{"position":[[15,8],[331,8]]},"1356":{"position":[[310,7],[432,8]]},"1359":{"position":[[15,8]]},"1373":{"position":[[687,9]]},"1374":{"position":[[687,9]]},"1379":{"position":[[3140,7]]},"1380":{"position":[[15,8]]},"1382":{"position":[[63,9]]},"1386":{"position":[[189,7]]},"1391":{"position":[[253,8]]},"1394":{"position":[[358,9]]},"1397":{"position":[[466,9]]},"1398":{"position":[[465,9]]},"1403":{"position":[[3140,7]]},"1404":{"position":[[15,8]]},"1408":{"position":[[530,7]]},"1409":{"position":[[449,9]]},"1414":{"position":[[3140,7]]},"1415":{"position":[[15,8]]},"1417":{"position":[[108,9]]},"1423":{"position":[[368,9]]},"1432":{"position":[[15,8],[331,8]]},"1434":{"position":[[1978,7]]},"1439":{"position":[[1395,7]]},"1442":{"position":[[84,9]]},"1443":{"position":[[811,9]]},"1444":{"position":[[389,7]]},"1461":{"position":[[2746,7]]},"1462":{"position":[[649,7]]},"1473":{"position":[[22,7],[120,7],[377,7]]},"1475":{"position":[[17,7]]},"1479":{"position":[[776,8]]},"1481":{"position":[[59,7],[124,7]]}},"keywords":{}}],["include_delet",{"_index":3965,"title":{},"content":{"517":{"position":[[3000,16]]}},"keywords":{}}],["inclus",{"_index":4713,"title":{},"content":{"794":{"position":[[447,10],[525,10]]},"809":{"position":[[447,10],[525,10]]},"825":{"position":[[447,10],[525,10]]},"1286":{"position":[[504,10],[582,10]]},"1301":{"position":[[504,10],[582,10]]},"1325":{"position":[[504,10],[582,10]]},"1452":{"position":[[1389,11],[1479,10],[1517,11]]},"1474":{"position":[[715,9],[848,9]]}},"keywords":{}}],["incollect",{"_index":4678,"title":{},"content":{"779":{"position":[[141,14]]}},"keywords":{}}],["incom",{"_index":680,"title":{},"content":{"34":{"position":[[799,8]]},"124":{"position":[[582,8]]},"207":{"position":[[71,8],[688,8]]},"239":{"position":[[565,8],[1450,8],[1493,8]]},"254":{"position":[[1076,8],[1677,8]]},"314":{"position":[[797,8],[1494,8]]},"315":{"position":[[2452,8]]},"489":{"position":[[518,8]]},"662":{"position":[[518,8]]},"677":{"position":[[518,8]]},"692":{"position":[[518,8]]}},"keywords":{}}],["incompat",{"_index":418,"title":{},"content":{"13":{"position":[[1861,12]]},"55":{"position":[[706,12]]},"56":{"position":[[787,12]]},"106":{"position":[[605,12]]},"125":{"position":[[581,12]]},"1123":{"position":[[754,12]]}},"keywords":{}}],["inconsist",{"_index":5738,"title":{},"content":{"1147":{"position":[[412,15]]},"1174":{"position":[[412,15]]},"1216":{"position":[[412,15]]},"1224":{"position":[[412,15]]}},"keywords":{}}],["incorpor",{"_index":6488,"title":{},"content":{"1439":{"position":[[759,12]]}},"keywords":{}}],["incorrect",{"_index":1637,"title":{},"content":{"115":{"position":[[1547,9]]},"190":{"position":[[1174,9]]},"419":{"position":[[437,9]]},"440":{"position":[[453,9]]},"504":{"position":[[381,9]]},"547":{"position":[[438,9]]},"639":{"position":[[379,9]]},"759":{"position":[[156,9]]},"764":{"position":[[571,9]]},"772":{"position":[[167,9]]},"777":{"position":[[571,9]]},"799":{"position":[[154,9]]},"804":{"position":[[569,9]]},"814":{"position":[[154,9]]},"819":{"position":[[569,9]]},"830":{"position":[[154,9]]},"835":{"position":[[569,9]]},"1023":{"position":[[418,9]]}},"keywords":{}}],["incorrectli",{"_index":2483,"title":{},"content":{"228":{"position":[[881,11]]},"229":{"position":[[414,11]]}},"keywords":{}}],["increas",{"_index":72,"title":{},"content":{"2":{"position":[[160,8]]},"8":{"position":[[869,9]]},"20":{"position":[[531,8]]},"49":{"position":[[501,8]]},"124":{"position":[[899,10]]},"198":{"position":[[1080,8]]},"480":{"position":[[435,8],[828,10]]},"750":{"position":[[313,8]]},"766":{"position":[[313,8]]},"789":{"position":[[347,8]]},"807":{"position":[[347,8]]},"821":{"position":[[1513,10]]},"823":{"position":[[347,8]]},"1020":{"position":[[2089,10]]},"1146":{"position":[[49,10],[590,9]]},"1173":{"position":[[49,10],[602,9]]},"1215":{"position":[[49,10],[590,9]]},"1223":{"position":[[49,10],[602,9]]}},"keywords":{}}],["increasingli",{"_index":5194,"title":{},"content":{"1020":{"position":[[1318,12]]}},"keywords":{}}],["increment",{"_index":400,"title":{"870":{"position":[[0,11]]}},"content":{"13":{"position":[[857,9],[1418,10]]},"21":{"position":[[105,11],[314,11]]},"56":{"position":[[1982,11],[2031,11],[2139,11]]},"67":{"position":[[1581,11]]},"121":{"position":[[546,11]]},"198":{"position":[[148,11]]},"208":{"position":[[1100,9],[1667,12]]},"209":{"position":[[672,11]]},"307":{"position":[[2859,9]]},"308":{"position":[[1158,9]]},"309":{"position":[[1581,9],[3200,9]]},"322":{"position":[[1599,13]]},"325":{"position":[[311,13]]},"326":{"position":[[1492,13]]},"351":{"position":[[225,11]]},"364":{"position":[[124,11]]},"370":{"position":[[2212,12]]},"371":{"position":[[1365,11]]},"402":{"position":[[795,11]]},"425":{"position":[[405,11],[485,11],[580,11]]},"432":{"position":[[1333,11]]},"433":{"position":[[378,11],[774,11]]},"482":{"position":[[673,11]]},"496":{"position":[[727,12]]},"497":{"position":[[253,11]]},"510":{"position":[[218,11]]},"517":{"position":[[2134,9]]},"518":{"position":[[504,11],[583,11],[664,11],[765,11],[874,11],[975,11],[1072,11],[1182,11],[1300,11],[1395,11],[1476,11],[1551,11]]},"529":{"position":[[223,11]]},"557":{"position":[[644,11]]},"573":{"position":[[1444,12]]},"575":{"position":[[361,11],[448,11],[552,11],[641,11],[741,11],[826,11],[921,11],[1024,11],[1120,11],[1219,11]]},"584":{"position":[[974,9],[1012,9],[1507,12]]},"586":{"position":[[383,11],[470,11],[574,11],[663,11],[748,11],[843,11],[939,11],[1038,11]]},"632":{"position":[[253,11]]},"655":{"position":[[244,11]]},"686":{"position":[[358,11],[445,11],[535,11],[628,11],[715,11],[989,11]]},"713":{"position":[[223,11]]},"721":{"position":[[356,11]]},"735":{"position":[[559,12]]},"736":{"position":[[211,11],[300,11],[394,11]]},"757":{"position":[[2163,12]]},"758":{"position":[[349,11]]},"770":{"position":[[2163,12]]},"771":{"position":[[349,11]]},"797":{"position":[[2170,12]]},"798":{"position":[[347,11]]},"812":{"position":[[2170,12]]},"813":{"position":[[347,11]]},"828":{"position":[[2170,12]]},"829":{"position":[[347,11]]},"842":{"position":[[1571,11],[2041,11],[2145,11],[3684,11],[3747,11]]},"859":{"position":[[890,14]]},"860":{"position":[[304,11]]},"867":{"position":[[1021,11],[1117,11],[1182,11]]},"899":{"position":[[400,13]]},"907":{"position":[[1617,12]]},"908":{"position":[[393,11]]},"923":{"position":[[1617,12]]},"924":{"position":[[393,11]]},"934":{"position":[[1617,12]]},"935":{"position":[[393,11]]},"950":{"position":[[1617,12]]},"951":{"position":[[393,11]]},"968":{"position":[[1617,12]]},"969":{"position":[[393,11]]},"983":{"position":[[214,11]]},"1010":{"position":[[490,11],[608,11]]},"1020":{"position":[[247,14]]},"1071":{"position":[[353,11]]},"1078":{"position":[[253,11],[429,11],[515,11],[621,11],[715,11],[912,11],[991,11],[1067,11],[1148,11],[1328,11],[1413,11],[1496,11],[1570,11],[1645,11],[1730,11],[1813,11],[1993,11],[2077,11]]},"1085":{"position":[[771,11]]},"1086":{"position":[[410,11]]},"1102":{"position":[[213,11]]},"1133":{"position":[[1483,12]]},"1134":{"position":[[512,11],[787,11],[897,11],[997,11],[1104,11],[1229,11],[1345,11],[1725,11],[2084,11],[2199,11],[2314,11],[2426,11],[2539,11],[2660,11],[2772,11],[2878,11],[2980,11]]},"1394":{"position":[[623,9]]},"1477":{"position":[[1617,13],[3956,13]]}},"keywords":{}}],["incremental)ad",{"_index":4988,"title":{},"content":{"899":{"position":[[302,15],[325,15],[357,16],[374,15]]}},"keywords":{}}],["incremental)board",{"_index":4982,"title":{},"content":{"899":{"position":[[83,19]]}},"keywords":{}}],["incremental)campaign",{"_index":4987,"title":{},"content":{"899":{"position":[[247,22],[270,21]]}},"keywords":{}}],["incremental)custom",{"_index":5360,"title":{},"content":{"1096":{"position":[[91,22]]}},"keywords":{}}],["incremental)ord",{"_index":5361,"title":{},"content":{"1096":{"position":[[114,19],[134,18]]}},"keywords":{}}],["incremental)product",{"_index":5367,"title":{},"content":{"1096":{"position":[[249,20]]}},"keywords":{}}],["incremental)refundsship",{"_index":5372,"title":{},"content":{"1096":{"position":[[325,28]]}},"keywords":{}}],["incremental_scn_rang",{"_index":4880,"title":{},"content":{"868":{"position":[[266,22]]}},"keywords":{}}],["incur",{"_index":1496,"title":{},"content":{"105":{"position":[[1087,9]]},"1036":{"position":[[653,5]]},"1388":{"position":[[224,5]]}},"keywords":{}}],["inde",{"_index":2413,"title":{},"content":{"210":{"position":[[3976,6]]}},"keywords":{}}],["indefinit",{"_index":674,"title":{},"content":{"34":{"position":[[479,12]]},"84":{"position":[[284,12]]},"373":{"position":[[760,12]]},"785":{"position":[[279,12]]}},"keywords":{}}],["indent",{"_index":1236,"title":{},"content":{"83":{"position":[[1389,11]]}},"keywords":{}}],["independ",{"_index":799,"title":{},"content":{"53":{"position":[[370,13]]},"105":{"position":[[587,13]]},"323":{"position":[[311,11]]},"333":{"position":[[241,14]]},"554":{"position":[[307,13]]}},"keywords":{}}],["index",{"_index":563,"title":{},"content":{"21":{"position":[[207,5]]},"100":{"position":[[438,5]]},"110":{"position":[[1103,5]]},"121":{"position":[[174,7],[807,7]]},"277":{"position":[[1361,7]]},"279":{"position":[[1388,5]]},"842":{"position":[[2254,8]]},"1194":{"position":[[274,5],[361,5]]},"1195":{"position":[[402,5],[453,5],[577,5],[629,5],[645,5]]},"1196":{"position":[[732,5],[914,5],[946,5],[1161,5]]},"1197":{"position":[[469,6],[493,5]]},"1200":{"position":[[55,5]]},"1201":{"position":[[318,5]]},"1274":{"position":[[156,5],[284,5]]},"1276":{"position":[[316,7],[386,6],[416,8]]},"1277":{"position":[[76,5],[91,5]]},"1278":{"position":[[131,6],[143,5]]},"1279":{"position":[[439,5]]},"1292":{"position":[[2435,5],[2472,7]]},"1306":{"position":[[2435,5],[2472,7]]},"1329":{"position":[[2435,5],[2472,7]]},"1356":{"position":[[651,5],[850,7]]},"1370":{"position":[[1288,5],[1299,7]]},"1379":{"position":[[3191,5]]},"1403":{"position":[[3191,5]]},"1414":{"position":[[3191,5]]},"1467":{"position":[[293,5]]}},"keywords":{}}],["index"",{"_index":5842,"title":{},"content":{"1200":{"position":[[871,11]]},"1467":{"position":[[952,12]]}},"keywords":{}}],["indic",{"_index":1237,"title":{},"content":{"83":{"position":[[1401,10]]},"100":{"position":[[110,8]]},"138":{"position":[[1116,10]]},"141":{"position":[[874,10],[938,9],[1074,9],[1267,10]]},"142":{"position":[[1085,10]]},"221":{"position":[[1137,9]]},"222":{"position":[[382,9]]},"223":{"position":[[348,9]]},"224":{"position":[[401,9]]},"263":{"position":[[628,9]]},"268":{"position":[[533,8]]},"760":{"position":[[114,9],[632,9]]},"773":{"position":[[114,9],[632,9]]},"800":{"position":[[114,9],[632,9]]},"805":{"position":[[133,10]]},"815":{"position":[[114,9],[632,9]]},"820":{"position":[[133,10]]},"831":{"position":[[114,9],[632,9]]},"836":{"position":[[133,10]]},"870":{"position":[[633,9]]},"885":{"position":[[282,8]]},"1140":{"position":[[402,9]]},"1194":{"position":[[447,8]]},"1195":{"position":[[221,8]]},"1196":{"position":[[784,7]]},"1200":{"position":[[347,8]]},"1201":{"position":[[574,7]]},"1298":{"position":[[348,9]]},"1316":{"position":[[402,9]]},"1322":{"position":[[382,9]]},"1335":{"position":[[382,9]]},"1340":{"position":[[402,9]]},"1346":{"position":[[348,9]]},"1351":{"position":[[402,9]]},"1379":{"position":[[3239,9]]},"1403":{"position":[[3239,9]]},"1414":{"position":[[3239,9]]},"1431":{"position":[[425,9]]},"1442":{"position":[[164,8],[267,8]]},"1443":{"position":[[522,9]]},"1444":{"position":[[68,10]]}},"keywords":{}}],["indirect",{"_index":1322,"title":{},"content":{"92":{"position":[[468,9]]}},"keywords":{}}],["indirectli",{"_index":1219,"title":{},"content":{"83":{"position":[[490,10]]},"322":{"position":[[547,10]]},"323":{"position":[[581,10]]}},"keywords":{}}],["individu",{"_index":764,"title":{},"content":{"45":{"position":[[221,10]]},"109":{"position":[[588,10]]},"135":{"position":[[376,10]]},"137":{"position":[[445,13]]},"149":{"position":[[1209,10]]},"1040":{"position":[[362,10]]},"1050":{"position":[[362,10]]},"1058":{"position":[[362,10]]},"1123":{"position":[[411,10]]},"1470":{"position":[[50,10]]}},"keywords":{}}],["individualload",{"_index":6504,"title":{},"content":{"1443":{"position":[[335,14]]}},"keywords":{}}],["inert",{"_index":757,"title":{},"content":{"44":{"position":[[269,6]]}},"keywords":{}}],["inexpens",{"_index":3177,"title":{},"content":{"326":{"position":[[1260,11]]}},"keywords":{}}],["infer",{"_index":1066,"title":{"165":{"position":[[18,10]]}},"content":{"72":{"position":[[228,9]]},"76":{"position":[[214,8]]},"99":{"position":[[321,8]]},"107":{"position":[[3746,5]]},"158":{"position":[[123,9],[268,9],[394,8]]},"162":{"position":[[906,9],[924,5],[952,9]]},"165":{"position":[[20,6],[586,9],[1390,8],[1754,10],[1812,8],[1961,8],[2091,8],[2303,8]]},"192":{"position":[[1738,10],[1929,8]]},"207":{"position":[[1290,8]]},"210":{"position":[[1276,5]]},"218":{"position":[[1679,10],[1701,9],[1770,6],[1884,8]]},"228":{"position":[[938,9],[967,9],[1244,9]]},"229":{"position":[[541,9],[610,5]]},"239":{"position":[[1554,8]]},"259":{"position":[[819,9],[1148,9],[1169,9],[1238,6],[1387,8],[2729,9],[2750,9],[2819,6],[2933,8]]},"291":{"position":[[1489,9],[1613,9],[1634,9],[1703,6],[1817,8]]},"302":{"position":[[1409,9],[1522,9],[1543,9],[1612,6],[1726,8]]},"1446":{"position":[[85,9]]}},"keywords":{}}],["inferenec",{"_index":1867,"title":{},"content":{"157":{"position":[[452,10]]}},"keywords":{}}],["inferr",{"_index":1866,"title":{},"content":{"157":{"position":[[395,10]]}},"keywords":{}}],["infil",{"_index":6048,"title":{},"content":{"1292":{"position":[[2506,6]]},"1306":{"position":[[2506,6]]},"1329":{"position":[[2506,6]]}},"keywords":{}}],["infinit",{"_index":6671,"title":{},"content":{"1472":{"position":[[500,8],[884,8]]}},"keywords":{}}],["info",{"_index":250,"title":{},"content":{"7":{"position":[[585,5]]},"16":{"position":[[1163,4]]},"54":{"position":[[535,4]]},"84":{"position":[[1263,4]]},"163":{"position":[[735,4]]},"165":{"position":[[1441,4]]},"228":{"position":[[1232,4]]},"306":{"position":[[353,4]]},"308":{"position":[[291,4],[1011,4]]},"419":{"position":[[1060,4]]},"440":{"position":[[1076,4]]},"529":{"position":[[793,4]]},"547":{"position":[[1061,4]]},"724":{"position":[[341,4]]},"738":{"position":[[499,4],[563,4],[623,4],[693,4]]},"753":{"position":[[268,4]]},"757":{"position":[[2193,4]]},"767":{"position":[[414,4]]},"770":{"position":[[2193,4]]},"797":{"position":[[2200,4]]},"812":{"position":[[2200,4]]},"828":{"position":[[2200,4]]},"840":{"position":[[2575,4]]},"917":{"position":[[831,4]]},"919":{"position":[[1356,4]]},"965":{"position":[[831,4]]},"1023":{"position":[[1041,4]]},"1418":{"position":[[49,4]]},"1425":{"position":[[228,4]]},"1453":{"position":[[1159,4]]},"1461":{"position":[[1305,4],[2427,4]]}},"keywords":{}}],["inform",{"_index":207,"title":{"1474":{"position":[[6,12]]},"1475":{"position":[[12,12]]}},"content":{"6":{"position":[[221,11]]},"7":{"position":[[382,11]]},"8":{"position":[[418,11],[805,11]]},"47":{"position":[[52,11]]},"54":{"position":[[190,11]]},"81":{"position":[[2234,11]]},"91":{"position":[[363,12]]},"104":{"position":[[289,11]]},"119":{"position":[[275,11]]},"125":{"position":[[1070,11]]},"145":{"position":[[137,12]]},"146":{"position":[[375,11],[910,11]]},"148":{"position":[[146,12]]},"149":{"position":[[384,11],[883,11]]},"151":{"position":[[144,12]]},"152":{"position":[[391,11],[886,11]]},"156":{"position":[[197,11]]},"157":{"position":[[472,12]]},"165":{"position":[[358,11]]},"173":{"position":[[126,12],[242,12]]},"174":{"position":[[230,11],[425,11]]},"193":{"position":[[461,11]]},"207":{"position":[[631,11]]},"210":{"position":[[2133,11]]},"217":{"position":[[980,11]]},"221":{"position":[[384,12]]},"239":{"position":[[453,11],[1072,12],[2724,12]]},"296":{"position":[[394,11],[1365,11],[4592,11]]},"301":{"position":[[1208,11]]},"343":{"position":[[1086,11]]},"401":{"position":[[142,11]]},"419":{"position":[[511,11]]},"427":{"position":[[406,12]]},"432":{"position":[[199,8]]},"440":{"position":[[527,11]]},"475":{"position":[[334,11]]},"487":{"position":[[295,12]]},"504":{"position":[[455,11]]},"547":{"position":[[512,11]]},"556":{"position":[[478,12],[1230,12]]},"560":{"position":[[341,12]]},"563":{"position":[[143,11]]},"597":{"position":[[297,11]]},"639":{"position":[[453,11]]},"654":{"position":[[708,11]]},"667":{"position":[[82,12]]},"690":{"position":[[264,11],[369,12]]},"738":{"position":[[122,11],[215,11]]},"747":{"position":[[129,11]]},"752":{"position":[[1050,12]]},"764":{"position":[[92,9]]},"777":{"position":[[92,9]]},"780":{"position":[[160,12]]},"786":{"position":[[445,11]]},"791":{"position":[[1084,12]]},"804":{"position":[[92,9]]},"819":{"position":[[92,9]]},"835":{"position":[[92,9]]},"840":{"position":[[269,12],[2464,11]]},"849":{"position":[[212,12],[3604,11]]},"857":{"position":[[165,11],[204,11]]},"900":{"position":[[319,11]]},"946":{"position":[[304,11]]},"964":{"position":[[541,11]]},"1008":{"position":[[1023,12]]},"1023":{"position":[[492,11]]},"1251":{"position":[[192,12]]},"1384":{"position":[[315,6]]},"1393":{"position":[[364,12]]},"1425":{"position":[[168,11]]},"1451":{"position":[[1090,12]]},"1461":{"position":[[4808,11]]},"1473":{"position":[[30,11],[137,11]]},"1474":{"position":[[188,11],[410,11]]},"1475":{"position":[[25,11],[149,11]]}},"keywords":{}}],["information.an",{"_index":5739,"title":{},"content":{"1149":{"position":[[384,14]]}},"keywords":{}}],["information.retent",{"_index":6265,"title":{},"content":{"1356":{"position":[[729,21]]}},"keywords":{}}],["information_schema",{"_index":4588,"title":{},"content":{"750":{"position":[[965,18]]},"752":{"position":[[588,18]]},"753":{"position":[[1244,18]]},"757":{"position":[[2414,19]]},"766":{"position":[[965,18]]},"770":{"position":[[2414,19]]},"789":{"position":[[1366,18]]},"791":{"position":[[541,18]]},"793":{"position":[[1215,18]]},"797":{"position":[[2417,19]]},"807":{"position":[[953,18]]},"808":{"position":[[1161,18]]},"812":{"position":[[2417,19]]},"823":{"position":[[953,18]]},"828":{"position":[[2417,19]]},"917":{"position":[[710,19],[985,20]]},"919":{"position":[[1241,19],[1510,20]]},"965":{"position":[[710,19],[985,20]]}},"keywords":{}}],["information_schema.column",{"_index":5042,"title":{},"content":{"919":{"position":[[1866,27]]}},"keywords":{}}],["information_schema.t",{"_index":5043,"title":{},"content":{"919":{"position":[[1894,26]]}},"keywords":{}}],["infrastructur",{"_index":648,"title":{"1271":{"position":[[31,15]]}},"content":{"30":{"position":[[183,14]]},"320":{"position":[[72,14]]},"1271":{"position":[[85,14]]}},"keywords":{}}],["ingest",{"_index":661,"title":{"128":{"position":[[0,7]]},"484":{"position":[[13,6]]},"656":{"position":[[5,6]]},"672":{"position":[[14,6]]},"687":{"position":[[10,6]]}},"content":{"32":{"position":[[199,7]]},"35":{"position":[[31,7]]},"43":{"position":[[221,9],[254,9],[270,6]]},"128":{"position":[[1,6],[183,6],[414,7]]},"129":{"position":[[715,7],[843,7]]},"132":{"position":[[199,7],[409,7],[430,6]]},"133":{"position":[[261,6],[376,7],[506,7],[615,6]]},"189":{"position":[[1068,7]]},"192":{"position":[[1433,6]]},"193":{"position":[[42,7]]},"216":{"position":[[170,7]]},"232":{"position":[[361,6]]},"237":{"position":[[2794,9]]},"239":{"position":[[202,7]]},"240":{"position":[[3196,9]]},"289":{"position":[[327,7]]},"300":{"position":[[306,7]]},"321":{"position":[[1635,9]]},"330":{"position":[[203,9]]},"332":{"position":[[278,8]]},"363":{"position":[[1405,6]]},"487":{"position":[[474,9]]},"595":{"position":[[414,7]]},"675":{"position":[[415,8]]},"912":{"position":[[975,8]]},"945":{"position":[[98,6],[727,9]]},"1118":{"position":[[852,6]]},"1463":{"position":[[568,7]]},"1464":{"position":[[451,7]]},"1465":{"position":[[1145,7],[1411,7]]},"1466":{"position":[[432,7]]},"1467":{"position":[[967,7],[1268,7],[2390,7]]},"1476":{"position":[[401,7],[1624,7]]},"1477":{"position":[[1663,7],[2176,7],[4003,7],[4538,7]]}},"keywords":{}}],["ingest:dev",{"_index":3302,"title":{},"content":{"363":{"position":[[1473,10]]}},"keywords":{}}],["inhabit",{"_index":3114,"title":{},"content":{"320":{"position":[[6,8]]}},"keywords":{}}],["inher",{"_index":3189,"title":{},"content":{"329":{"position":[[857,8]]}},"keywords":{}}],["inherit",{"_index":1849,"title":{"337":{"position":[[23,9]]}},"content":{"154":{"position":[[1000,8]]},"337":{"position":[[238,7],[515,8]]}},"keywords":{}}],["init.sql",{"_index":2546,"title":{},"content":{"236":{"position":[[2056,8],[2750,8],[2848,8],[3689,8]]}},"keywords":{}}],["init.sql:/dock",{"_index":2523,"title":{},"content":{"236":{"position":[[1040,18]]}},"keywords":{}}],["initdb.d/init.sql",{"_index":2525,"title":{},"content":{"236":{"position":[[1070,17]]}},"keywords":{}}],["initi",{"_index":511,"title":{},"content":{"19":{"position":[[37,11]]},"20":{"position":[[194,10]]},"82":{"position":[[220,9],[1546,10]]},"144":{"position":[[280,8]]},"190":{"position":[[1580,8]]},"192":{"position":[[2002,8]]},"207":{"position":[[11,10],[1621,9]]},"208":{"position":[[1474,11]]},"209":{"position":[[306,7],[555,7],[812,10]]},"210":{"position":[[170,7]]},"217":{"position":[[995,8]]},"218":{"position":[[536,9]]},"237":{"position":[[2698,7],[2918,10]]},"240":{"position":[[57,7]]},"255":{"position":[[987,10]]},"279":{"position":[[281,9]]},"290":{"position":[[1156,8]]},"291":{"position":[[619,8]]},"301":{"position":[[1365,8]]},"302":{"position":[[619,8]]},"316":{"position":[[1312,10]]},"343":{"position":[[461,8],[562,10]]},"368":{"position":[[31,10]]},"373":{"position":[[672,8]]},"377":{"position":[[985,7]]},"432":{"position":[[101,7]]},"755":{"position":[[31,10]]},"768":{"position":[[31,10]]},"785":{"position":[[21,7],[205,7]]},"789":{"position":[[874,7],[994,7]]},"795":{"position":[[29,10]]},"810":{"position":[[29,10]]},"826":{"position":[[29,10]]},"905":{"position":[[34,10]]},"920":{"position":[[34,10]]},"932":{"position":[[34,10]]},"948":{"position":[[34,10]]},"966":{"position":[[34,10]]},"1006":{"position":[[389,8]]},"1020":{"position":[[147,9],[1059,9],[1211,9],[1417,9]]},"1140":{"position":[[453,7],[486,9]]},"1268":{"position":[[215,9]]},"1292":{"position":[[2544,7],[2622,8]]},"1306":{"position":[[2544,7],[2622,8]]},"1316":{"position":[[453,7],[486,9]]},"1329":{"position":[[2544,7],[2622,8]]},"1340":{"position":[[453,7],[486,9]]},"1351":{"position":[[453,7],[486,9]]},"1370":{"position":[[1313,9]]},"1379":{"position":[[3296,10],[3356,9]]},"1403":{"position":[[3296,10],[3356,9]]},"1414":{"position":[[3296,10],[3356,9]]},"1431":{"position":[[476,7],[509,9]]},"1434":{"position":[[458,14]]}},"keywords":{}}],["initial_s",{"_index":6050,"title":{},"content":{"1292":{"position":[[2579,12]]},"1306":{"position":[[2579,12]]},"1329":{"position":[[2579,12]]}},"keywords":{}}],["initially_suspend",{"_index":2157,"title":{},"content":{"191":{"position":[[1592,19]]},"240":{"position":[[1553,19]]},"1032":{"position":[[1194,19]]},"1383":{"position":[[1540,19]]}},"keywords":{}}],["inlin",{"_index":618,"title":{},"content":{"26":{"position":[[563,6]]},"56":{"position":[[1283,7]]},"69":{"position":[[328,6],[432,7]]},"70":{"position":[[463,7]]},"81":{"position":[[2461,6]]},"94":{"position":[[471,6],[869,6],[2535,6]]},"97":{"position":[[71,6]]},"100":{"position":[[277,6]]},"120":{"position":[[642,7]]},"1480":{"position":[[576,7]]}},"keywords":{}}],["inlinefil",{"_index":1051,"title":{},"content":{"70":{"position":[[627,10]]}},"keywords":{}}],["inlinereferenc",{"_index":1135,"title":{},"content":{"81":{"position":[[2502,16]]}},"keywords":{}}],["inner",{"_index":5529,"title":{},"content":{"1140":{"position":[[526,5]]},"1192":{"position":[[501,5]]},"1209":{"position":[[441,5]]},"1292":{"position":[[2663,5]]},"1306":{"position":[[2663,5]]},"1316":{"position":[[526,5]]},"1329":{"position":[[2663,5]]},"1340":{"position":[[526,5]]},"1351":{"position":[[526,5]]},"1370":{"position":[[1330,5]]},"1379":{"position":[[3413,5]]},"1394":{"position":[[645,5]]},"1403":{"position":[[3413,5]]},"1414":{"position":[[3413,5]]},"1431":{"position":[[549,5]]}},"keywords":{}}],["innov",{"_index":2623,"title":{},"content":{"241":{"position":[[543,10]]}},"keywords":{}}],["inout",{"_index":5532,"title":{},"content":{"1140":{"position":[[557,5]]},"1292":{"position":[[2711,5]]},"1306":{"position":[[2711,5]]},"1316":{"position":[[557,5]]},"1329":{"position":[[2711,5]]},"1340":{"position":[[557,5]]},"1351":{"position":[[557,5]]},"1379":{"position":[[3464,5]]},"1403":{"position":[[3464,5]]},"1414":{"position":[[3464,5]]},"1431":{"position":[[580,5]]}},"keywords":{}}],["input",{"_index":265,"title":{"1275":{"position":[[10,6]]}},"content":{"8":{"position":[[466,6]]},"64":{"position":[[161,6]]},"96":{"position":[[314,5]]},"163":{"position":[[604,5]]},"253":{"position":[[1166,5]]},"313":{"position":[[1166,5]]},"483":{"position":[[106,6]]},"690":{"position":[[151,5]]},"1047":{"position":[[360,5],[632,5]]},"1055":{"position":[[360,5],[632,5]]},"1063":{"position":[[360,5],[632,5]]},"1140":{"position":[[583,5]]},"1157":{"position":[[30,5]]},"1272":{"position":[[220,5]]},"1316":{"position":[[583,5]]},"1340":{"position":[[583,5]]},"1351":{"position":[[583,5]]},"1379":{"position":[[3522,5]]},"1403":{"position":[[3522,5]]},"1414":{"position":[[3522,5]]},"1431":{"position":[[606,5]]},"1452":{"position":[[2394,6],[4275,6]]},"1456":{"position":[[60,6]]},"1473":{"position":[[70,6]]},"1475":{"position":[[62,6],[883,5],[1005,5],[1591,5]]}},"keywords":{}}],["insecur",{"_index":3660,"title":{},"content":{"429":{"position":[[677,10]]}},"keywords":{}}],["insensit",{"_index":5533,"title":{},"content":{"1140":{"position":[[618,11]]},"1155":{"position":[[386,11],[492,11]]},"1292":{"position":[[2743,11]]},"1306":{"position":[[2743,11]]},"1316":{"position":[[618,11]]},"1329":{"position":[[2743,11]]},"1340":{"position":[[618,11]]},"1351":{"position":[[618,11]]},"1379":{"position":[[3573,11]]},"1403":{"position":[[3573,11]]},"1414":{"position":[[3573,11]]},"1431":{"position":[[641,11]]}},"keywords":{}}],["insert",{"_index":1008,"title":{},"content":{"67":{"position":[[923,9],[1899,8]]},"97":{"position":[[336,7],[529,6]]},"196":{"position":[[140,11]]},"197":{"position":[[438,11],[834,6],[882,8]]},"210":{"position":[[1751,6],[3890,6]]},"233":{"position":[[140,11]]},"237":{"position":[[1681,7]]},"278":{"position":[[625,7],[1202,6],[1382,6],[1509,9]]},"280":{"position":[[2051,6]]},"750":{"position":[[845,7]]},"752":{"position":[[801,7]]},"753":{"position":[[1457,7]]},"761":{"position":[[96,7]]},"766":{"position":[[845,7]]},"767":{"position":[[2134,7]]},"774":{"position":[[96,7]]},"789":{"position":[[1246,7]]},"791":{"position":[[806,7]]},"792":{"position":[[2126,7]]},"793":{"position":[[1480,7]]},"801":{"position":[[96,7]]},"807":{"position":[[833,7]]},"808":{"position":[[1426,7]]},"816":{"position":[[96,7]]},"823":{"position":[[833,7]]},"824":{"position":[[2248,7]]},"832":{"position":[[96,7]]},"864":{"position":[[1329,7]]},"1040":{"position":[[860,7]]},"1042":{"position":[[767,7]]},"1043":{"position":[[1431,7]]},"1050":{"position":[[860,7]]},"1051":{"position":[[1693,7]]},"1058":{"position":[[860,7]]},"1059":{"position":[[1486,7]]},"1140":{"position":[[666,6]]},"1208":{"position":[[16,6]]},"1209":{"position":[[459,6]]},"1292":{"position":[[2798,6]]},"1306":{"position":[[2798,6]]},"1316":{"position":[[666,6]]},"1329":{"position":[[2798,6]]},"1340":{"position":[[666,6]]},"1351":{"position":[[666,6]]},"1359":{"position":[[428,6]]},"1370":{"position":[[1341,6]]},"1379":{"position":[[3630,6]]},"1394":{"position":[[664,6]]},"1403":{"position":[[3630,6]]},"1414":{"position":[[3630,6]]},"1423":{"position":[[491,6]]},"1431":{"position":[[689,6]]}},"keywords":{}}],["insert/delet",{"_index":4642,"title":{},"content":{"761":{"position":[[488,13]]},"774":{"position":[[488,13]]},"801":{"position":[[494,13]]},"816":{"position":[[494,13]]},"832":{"position":[[494,13]]}},"keywords":{}}],["insert_method",{"_index":6061,"title":{},"content":{"1292":{"position":[[2832,13]]},"1306":{"position":[[2832,13]]},"1329":{"position":[[2832,13]]}},"keywords":{}}],["insertions.cr",{"_index":3834,"title":{},"content":{"480":{"position":[[656,19]]}},"keywords":{}}],["insid",{"_index":1983,"title":{},"content":{"169":{"position":[[1121,6]]},"173":{"position":[[530,6],[802,6]]},"189":{"position":[[1203,6]]},"190":{"position":[[412,6],[1671,6]]},"192":{"position":[[300,6]]},"240":{"position":[[2627,6]]},"254":{"position":[[141,7],[175,6]]},"296":{"position":[[141,7],[175,6]]},"313":{"position":[[3230,6]]},"314":{"position":[[141,7],[175,6]]},"616":{"position":[[80,6],[452,6],[587,6]]},"1047":{"position":[[587,6]]},"1055":{"position":[[587,6]]},"1063":{"position":[[587,6]]},"1462":{"position":[[372,6]]}},"keywords":{}}],["insight",{"_index":1625,"title":{},"content":{"115":{"position":[[545,7]]},"324":{"position":[[930,8]]},"517":{"position":[[186,8],[336,8],[794,8],[825,8],[1930,7],[3126,8]]},"518":{"position":[[315,7]]},"667":{"position":[[137,8],[215,8]]},"977":{"position":[[725,9]]}},"keywords":{}}],["insights_lookback_window",{"_index":3968,"title":{},"content":{"517":{"position":[[3100,25]]}},"keywords":{}}],["insightsbusi",{"_index":3929,"title":{},"content":{"512":{"position":[[77,16]]}},"keywords":{}}],["insightsmediamedia",{"_index":4412,"title":{},"content":{"667":{"position":[[175,18]]}},"keywords":{}}],["insightsstoriesstori",{"_index":4413,"title":{},"content":{"667":{"position":[[194,20]]}},"keywords":{}}],["inspecifi",{"_index":3851,"title":{},"content":{"483":{"position":[[252,12]]}},"keywords":{}}],["inspect",{"_index":653,"title":{},"content":{"31":{"position":[[103,8]]},"846":{"position":[[89,7],[159,7]]}},"keywords":{}}],["instagram",{"_index":3350,"title":{"666":{"position":[[0,9]]}},"content":{"364":{"position":[[2004,9]]},"667":{"position":[[56,9],[103,9],[127,9]]},"669":{"position":[[250,9]]},"670":{"position":[[103,9],[207,9],[412,9],[720,9]]}},"keywords":{}}],["instagram:dev",{"_index":3351,"title":{},"content":{"364":{"position":[[2060,13]]},"671":{"position":[[90,13]]}},"keywords":{}}],["instagram_bas",{"_index":4419,"title":{},"content":{"670":{"position":[[328,16]]}},"keywords":{}}],["instagram_manage_insight",{"_index":4420,"title":{},"content":{"670":{"position":[[345,26]]}},"keywords":{}}],["instal",{"_index":863,"title":{"58":{"position":[[0,12]]}},"content":{"58":{"position":[[66,7],[698,7],[751,7]]},"169":{"position":[[405,8],[944,7],[998,7],[1240,9]]},"179":{"position":[[340,7]]},"253":{"position":[[173,9],[227,12]]},"262":{"position":[[66,9]]},"266":{"position":[[481,10],[590,7]]},"273":{"position":[[66,9]]},"283":{"position":[[66,9]]},"295":{"position":[[1602,9],[1656,12]]},"313":{"position":[[173,9],[227,12]]},"487":{"position":[[191,7]]},"1292":{"position":[[2896,7]]},"1306":{"position":[[2896,7]]},"1329":{"position":[[2896,7]]}},"keywords":{}}],["instanc",{"_index":92,"title":{},"content":{"2":{"position":[[603,9]]},"81":{"position":[[1964,9]]},"107":{"position":[[1609,9],[2347,9],[3017,9],[3457,9]]},"112":{"position":[[707,8]]},"114":{"position":[[69,9]]},"180":{"position":[[943,8]]},"184":{"position":[[423,9]]},"201":{"position":[[65,8]]},"203":{"position":[[374,8]]},"208":{"position":[[1263,9],[1888,9]]},"222":{"position":[[38,8],[120,9],[698,8],[872,9]]},"223":{"position":[[38,8]]},"224":{"position":[[38,8]]},"250":{"position":[[532,8]]},"366":{"position":[[1127,8]]},"367":{"position":[[141,9],[188,8],[907,9]]},"460":{"position":[[163,9]]},"483":{"position":[[384,8]]},"747":{"position":[[1097,8]]},"753":{"position":[[40,9]]},"767":{"position":[[1147,8]]},"780":{"position":[[58,8]]},"782":{"position":[[467,9]]},"784":{"position":[[49,8]]},"788":{"position":[[80,10]]},"792":{"position":[[95,8],[379,9],[496,9],[567,8]]},"821":{"position":[[489,8]]},"824":{"position":[[1213,8]]},"849":{"position":[[1941,9]]},"864":{"position":[[1446,9],[1535,9]]},"869":{"position":[[792,9]]},"870":{"position":[[590,8],[681,8]]},"904":{"position":[[918,9],[1294,8]]},"912":{"position":[[505,8]]},"914":{"position":[[109,10]]},"917":{"position":[[267,8]]},"918":{"position":[[95,8],[379,9],[496,9],[567,8],[1586,8]]},"919":{"position":[[768,8]]},"931":{"position":[[896,9],[949,8]]},"962":{"position":[[49,10]]},"965":{"position":[[267,8]]},"1043":{"position":[[648,8]]},"1051":{"position":[[904,8]]},"1059":{"position":[[668,8]]},"1136":{"position":[[280,8],[461,9]]},"1154":{"position":[[571,9]]},"1251":{"position":[[58,8]]},"1255":{"position":[[49,8]]},"1271":{"position":[[52,9]]},"1282":{"position":[[195,10]]},"1288":{"position":[[74,10]]},"1289":{"position":[[279,9],[359,9],[380,9]]},"1292":{"position":[[2934,8]]},"1298":{"position":[[38,8]]},"1306":{"position":[[2934,8]]},"1310":{"position":[[210,10]]},"1321":{"position":[[59,9],[139,9],[160,9]]},"1322":{"position":[[38,8],[120,9],[698,8],[872,9]]},"1329":{"position":[[2934,8]]},"1334":{"position":[[59,9],[139,9],[160,9]]},"1335":{"position":[[38,8],[120,9],[698,8],[872,9]]},"1346":{"position":[[38,8]]},"1373":{"position":[[886,8]]},"1374":{"position":[[886,8]]},"1397":{"position":[[665,8]]},"1398":{"position":[[664,8]]},"1409":{"position":[[648,8]]},"1437":{"position":[[1546,8]]}},"keywords":{}}],["instance'",{"_index":2466,"title":{},"content":{"222":{"position":[[935,10]]},"753":{"position":[[1529,10]]},"767":{"position":[[2408,10]]},"792":{"position":[[2389,10]]},"793":{"position":[[1552,10]]},"808":{"position":[[636,10],[1520,10]]},"824":{"position":[[2520,10]]},"904":{"position":[[2335,10]]},"918":{"position":[[2627,10]]},"919":{"position":[[637,10],[2459,10]]},"931":{"position":[[666,10],[1999,10]]},"1043":{"position":[[1823,10]]},"1051":{"position":[[2051,10]]},"1059":{"position":[[1846,10]]},"1303":{"position":[[1642,10]]},"1322":{"position":[[935,10]]},"1335":{"position":[[935,10]]},"1373":{"position":[[1300,10]]},"1374":{"position":[[1304,10]]},"1397":{"position":[[1081,10]]},"1398":{"position":[[1084,10]]},"1409":{"position":[[1096,10]]}},"keywords":{}}],["instant",{"_index":6567,"title":{},"content":{"1453":{"position":[[368,8],[1116,8]]}},"keywords":{}}],["instead",{"_index":411,"title":{},"content":{"13":{"position":[[1376,7]]},"71":{"position":[[659,7]]},"98":{"position":[[858,8]]},"100":{"position":[[688,8]]},"112":{"position":[[172,8]]},"122":{"position":[[643,8]]},"125":{"position":[[838,8]]},"163":{"position":[[960,7]]},"164":{"position":[[1320,7]]},"209":{"position":[[283,8]]},"320":{"position":[[870,7]]},"321":{"position":[[2146,7]]},"322":{"position":[[1364,7]]},"323":{"position":[[269,7]]},"326":{"position":[[124,8],[388,7]]},"333":{"position":[[465,8]]},"483":{"position":[[620,7]]},"759":{"position":[[104,7]]},"772":{"position":[[115,7]]},"799":{"position":[[102,7]]},"814":{"position":[[102,7]]},"830":{"position":[[102,7]]},"849":{"position":[[2541,8]]},"911":{"position":[[199,7]]},"912":{"position":[[229,7]]},"927":{"position":[[199,7]]},"938":{"position":[[199,7]]},"944":{"position":[[371,7]]},"954":{"position":[[199,7]]},"972":{"position":[[199,7]]},"1123":{"position":[[856,8]]},"1200":{"position":[[272,7]]},"1289":{"position":[[775,7]]},"1334":{"position":[[277,7]]},"1370":{"position":[[1356,7]]},"1440":{"position":[[235,8]]},"1442":{"position":[[653,7]]},"1452":{"position":[[2511,7]]}},"keywords":{}}],["instruct",{"_index":1074,"title":{},"content":{"74":{"position":[[18,9]]},"159":{"position":[[410,11]]},"191":{"position":[[229,12]]},"212":{"position":[[290,12]]},"224":{"position":[[1080,12],[1156,12]]},"243":{"position":[[284,12]]},"253":{"position":[[240,13]]},"254":{"position":[[2398,9]]},"295":{"position":[[1669,13]]},"313":{"position":[[240,13]]},"314":{"position":[[1939,9]]},"367":{"position":[[808,12]]},"436":{"position":[[58,13]]},"460":{"position":[[413,12]]},"472":{"position":[[310,12]]},"477":{"position":[[576,12],[823,12]]},"478":{"position":[[434,12],[541,12]]},"556":{"position":[[1523,11]]},"598":{"position":[[540,12],[786,12]]},"599":{"position":[[434,12],[541,12]]},"750":{"position":[[1393,12]]},"753":{"position":[[106,13]]},"764":{"position":[[1046,12]]},"777":{"position":[[1046,12]]},"788":{"position":[[98,12]]},"789":{"position":[[1794,12]]},"804":{"position":[[1044,12]]},"819":{"position":[[1044,12]]},"835":{"position":[[1044,12]]},"914":{"position":[[127,12]]},"915":{"position":[[1250,12]]},"963":{"position":[[1404,12]]},"1039":{"position":[[231,12]]},"1136":{"position":[[362,12]]},"1142":{"position":[[89,12]]},"1149":{"position":[[544,12]]},"1154":{"position":[[302,12]]},"1160":{"position":[[89,12],[200,12]]},"1168":{"position":[[89,12]]},"1211":{"position":[[89,12]]},"1218":{"position":[[89,12]]},"1258":{"position":[[138,12]]},"1283":{"position":[[336,12]]},"1289":{"position":[[735,12]]},"1311":{"position":[[173,12]]},"1334":{"position":[[237,12]]},"1392":{"position":[[246,12]]}},"keywords":{}}],["insuffici",{"_index":2871,"title":{"764":{"position":[[0,12]]},"777":{"position":[[0,12]]},"804":{"position":[[0,12]]},"819":{"position":[[0,12]]},"835":{"position":[[0,12]]}},"content":{"280":{"position":[[1379,12]]},"869":{"position":[[832,12]]}},"keywords":{}}],["int",{"_index":2549,"title":{},"content":{"236":{"position":[[2212,3],[2315,3],[2381,3],[2997,3],[3100,3],[3166,3]]},"842":{"position":[[306,3],[1434,3],[1695,3],[2518,3],[2667,3]]},"1140":{"position":[[701,3]]},"1209":{"position":[[480,3]]},"1292":{"position":[[326,3]]},"1306":{"position":[[326,3]]},"1316":{"position":[[701,3]]},"1329":{"position":[[326,3]]},"1340":{"position":[[701,3]]},"1351":{"position":[[701,3]]},"1379":{"position":[[3675,3]]},"1403":{"position":[[3675,3]]},"1414":{"position":[[3675,3]]},"1431":{"position":[[724,3]]}},"keywords":{}}],["int1",{"_index":5982,"title":{},"content":{"1292":{"position":[[363,4]]},"1306":{"position":[[363,4]]},"1329":{"position":[[363,4]]}},"keywords":{}}],["int2",{"_index":5985,"title":{},"content":{"1292":{"position":[[404,4]]},"1306":{"position":[[404,4]]},"1329":{"position":[[404,4]]}},"keywords":{}}],["int3",{"_index":5986,"title":{},"content":{"1292":{"position":[[441,4]]},"1306":{"position":[[441,4]]},"1329":{"position":[[441,4]]}},"keywords":{}}],["int32",{"_index":5781,"title":{},"content":{"1172":{"position":[[728,6]]},"1222":{"position":[[728,6]]}},"keywords":{}}],["int4",{"_index":5987,"title":{},"content":{"1292":{"position":[[480,4]]},"1306":{"position":[[480,4]]},"1329":{"position":[[480,4]]}},"keywords":{}}],["int64",{"_index":5780,"title":{},"content":{"1172":{"position":[[377,5],[550,6],[639,6]]},"1222":{"position":[[377,5],[550,6],[639,6]]}},"keywords":{}}],["int8",{"_index":5988,"title":{},"content":{"1292":{"position":[[519,4]]},"1306":{"position":[[519,4]]},"1329":{"position":[[519,4]]}},"keywords":{}}],["integ",{"_index":52,"title":{},"content":{"1":{"position":[[697,8]]},"14":{"position":[[486,7],[684,7],[867,7],[1191,7]]},"72":{"position":[[539,7]]},"94":{"position":[[665,7],[3145,7]]},"100":{"position":[[412,7]]},"107":{"position":[[1845,8],[2051,8],[3964,9]]},"120":{"position":[[2582,7]]},"121":{"position":[[1066,7]]},"159":{"position":[[1006,7]]},"160":{"position":[[800,8]]},"162":{"position":[[2150,8],[2265,8]]},"164":{"position":[[511,8],[527,7]]},"166":{"position":[[403,8],[435,8]]},"183":{"position":[[1823,7],[3629,7]]},"254":{"position":[[1963,8]]},"279":{"position":[[1280,7]]},"296":{"position":[[3602,8]]},"307":{"position":[[1414,7],[2282,7]]},"309":{"position":[[680,7],[2217,7],[2814,7]]},"314":{"position":[[1173,7]]},"370":{"position":[[882,7]]},"387":{"position":[[1053,7],[1147,7]]},"397":{"position":[[532,7],[794,7],[1135,7]]},"402":{"position":[[176,7],[880,7]]},"509":{"position":[[340,7]]},"517":{"position":[[2587,7],[3174,7],[3437,7],[3736,7]]},"534":{"position":[[1094,7]]},"556":{"position":[[510,7]]},"573":{"position":[[1244,7]]},"584":{"position":[[1316,7]]},"747":{"position":[[164,7],[393,7],[463,7],[1323,7]]},"752":{"position":[[283,7]]},"753":{"position":[[939,7]]},"757":{"position":[[1369,7],[1649,7]]},"767":{"position":[[1919,7]]},"770":{"position":[[1369,7],[1649,7]]},"791":{"position":[[236,7]]},"792":{"position":[[1859,7]]},"793":{"position":[[910,7]]},"797":{"position":[[1369,7],[1649,7]]},"808":{"position":[[856,7]]},"812":{"position":[[1369,7],[1649,7]]},"824":{"position":[[1981,7]]},"828":{"position":[[1369,7],[1649,7]]},"842":{"position":[[2272,7]]},"867":{"position":[[974,7],[1136,7],[1247,7],[2077,7]]},"879":{"position":[[1131,7],[1349,7],[1496,7]]},"907":{"position":[[665,7]]},"923":{"position":[[665,7]]},"934":{"position":[[665,7]]},"950":{"position":[[665,7]]},"968":{"position":[[665,7]]},"1015":{"position":[[234,7]]},"1042":{"position":[[715,7]]},"1043":{"position":[[1379,7]]},"1045":{"position":[[650,7]]},"1051":{"position":[[1641,7]]},"1053":{"position":[[650,7]]},"1059":{"position":[[1434,7]]},"1061":{"position":[[650,7]]},"1076":{"position":[[576,7]]},"1113":{"position":[[421,7]]},"1140":{"position":[[744,7]]},"1144":{"position":[[688,7],[1031,7],[1151,7],[1226,7]]},"1146":{"position":[[60,7]]},"1164":{"position":[[268,7],[466,8]]},"1170":{"position":[[688,7],[995,7],[1151,7]]},"1172":{"position":[[369,7]]},"1173":{"position":[[60,7]]},"1196":{"position":[[838,7],[1213,7]]},"1209":{"position":[[494,7]]},"1213":{"position":[[543,7],[708,7],[828,7],[903,7]]},"1215":{"position":[[60,7]]},"1220":{"position":[[543,7],[672,7],[828,7]]},"1222":{"position":[[369,7]]},"1223":{"position":[[60,7]]},"1275":{"position":[[212,9]]},"1292":{"position":[[549,7]]},"1306":{"position":[[549,7]]},"1316":{"position":[[744,7]]},"1329":{"position":[[549,7]]},"1340":{"position":[[744,7]]},"1351":{"position":[[744,7]]},"1356":{"position":[[1300,7]]},"1379":{"position":[[3726,7]]},"1403":{"position":[[3726,7]]},"1414":{"position":[[3726,7]]},"1431":{"position":[[767,7]]},"1466":{"position":[[31,8]]},"1475":{"position":[[627,7],[1274,7],[1381,7],[2004,7]]}},"keywords":{}}],["integr",{"_index":145,"title":{"329":{"position":[[6,10]]},"332":{"position":[[5,10]]},"1115":{"position":[[6,12]]},"1116":{"position":[[16,13]]}},"content":{"3":{"position":[[1111,11]]},"4":{"position":[[404,10]]},"26":{"position":[[432,11],[468,10]]},"38":{"position":[[326,12]]},"41":{"position":[[173,9]]},"53":{"position":[[246,13]]},"81":{"position":[[654,9]]},"82":{"position":[[251,10]]},"84":{"position":[[56,12],[245,13],[348,11],[471,13],[1119,9]]},"95":{"position":[[195,9]]},"124":{"position":[[258,10],[326,10]]},"179":{"position":[[204,10]]},"183":{"position":[[68,10]]},"189":{"position":[[636,9],[1493,9]]},"191":{"position":[[1939,11],[2041,11]]},"196":{"position":[[394,12]]},"198":{"position":[[30,11]]},"209":{"position":[[884,10]]},"210":{"position":[[328,11]]},"211":{"position":[[66,11],[727,9]]},"232":{"position":[[569,10]]},"233":{"position":[[401,12]]},"236":{"position":[[473,10]]},"237":{"position":[[2662,9]]},"240":{"position":[[1900,11],[2002,11],[2426,11]]},"241":{"position":[[244,11]]},"245":{"position":[[269,11]]},"266":{"position":[[381,10]]},"267":{"position":[[76,10]]},"289":{"position":[[655,9]]},"300":{"position":[[595,9]]},"321":{"position":[[144,9]]},"323":{"position":[[1361,10]]},"324":{"position":[[1222,11]]},"329":{"position":[[255,9]]},"332":{"position":[[762,11]]},"345":{"position":[[164,12]]},"387":{"position":[[329,11]]},"487":{"position":[[59,12],[93,12],[175,11],[222,11]]},"606":{"position":[[120,12],[402,11]]},"839":{"position":[[79,11]]},"840":{"position":[[439,11],[520,11],[544,12],[576,11],[622,12],[989,11],[1889,11],[2263,11]]},"842":{"position":[[702,12],[816,12]]},"848":{"position":[[79,11]]},"849":{"position":[[910,11],[991,11],[1015,12],[1047,11],[1097,12],[1384,11],[1602,11],[2929,11],[2969,10],[3403,11]]},"851":{"position":[[315,12],[414,12]]},"855":{"position":[[61,11],[127,12]]},"856":{"position":[[12,12],[47,12],[110,11]]},"857":{"position":[[12,12],[56,12],[76,12]]},"889":{"position":[[26,11]]},"974":{"position":[[55,11]]},"975":{"position":[[358,11]]},"977":{"position":[[561,11]]},"1066":{"position":[[56,9]]},"1383":{"position":[[1887,11],[1989,11]]}},"keywords":{}}],["integration'",{"_index":4832,"title":{},"content":{"856":{"position":[[71,13]]}},"keywords":{}}],["integrator"",{"_index":4824,"title":{},"content":{"849":{"position":[[2595,16]]}},"keywords":{}}],["intel",{"_index":1981,"title":{},"content":{"169":{"position":[[367,5]]}},"keywords":{}}],["intellig",{"_index":2115,"title":{},"content":{"189":{"position":[[663,12]]}},"keywords":{}}],["intend",{"_index":573,"title":{},"content":{"21":{"position":[[586,8]]},"81":{"position":[[789,8]]},"112":{"position":[[484,7]]},"202":{"position":[[76,6]]},"215":{"position":[[15,8]]},"479":{"position":[[307,6]]},"754":{"position":[[206,6]]},"794":{"position":[[79,6]]},"809":{"position":[[79,6]]},"821":{"position":[[676,8]]},"825":{"position":[[79,6]]},"912":{"position":[[692,8]]},"945":{"position":[[1016,6]]},"1042":{"position":[[959,6]]},"1043":{"position":[[1623,6]]},"1051":{"position":[[1885,6]]},"1059":{"position":[[1678,6]]},"1286":{"position":[[79,6]]},"1301":{"position":[[79,6]]},"1325":{"position":[[79,6]]}},"keywords":{}}],["intent",{"_index":6490,"title":{},"content":{"1439":{"position":[[1053,9]]}},"keywords":{}}],["intention",{"_index":3154,"title":{},"content":{"322":{"position":[[1773,13]]}},"keywords":{}}],["intentspayoutsplansproductspromot",{"_index":5283,"title":{},"content":{"1073":{"position":[[260,36]]}},"keywords":{}}],["interact",{"_index":1106,"title":{},"content":{"79":{"position":[[247,8]]},"84":{"position":[[105,9]]},"197":{"position":[[296,8]]},"245":{"position":[[184,8]]},"323":{"position":[[1274,11]]},"324":{"position":[[1187,8]]},"335":{"position":[[104,8]]},"436":{"position":[[1096,8]]},"556":{"position":[[347,11]]},"869":{"position":[[395,11]]}},"keywords":{}}],["intercom",{"_index":3352,"title":{"672":{"position":[[0,8]]},"675":{"position":[[12,8]]},"681":{"position":[[0,8]]}},"content":{"364":{"position":[[2074,8]]},"682":{"position":[[56,8]]},"683":{"position":[[41,9],[186,8],[305,8]]},"684":{"position":[[250,8]]},"685":{"position":[[541,8]]}},"keywords":{}}],["intercom:dev",{"_index":3353,"title":{},"content":{"364":{"position":[[2129,12]]},"686":{"position":[[150,12]]}},"keywords":{}}],["interest",{"_index":1604,"title":{},"content":{"113":{"position":[[109,11]]},"189":{"position":[[335,10]]},"196":{"position":[[580,10]]},"229":{"position":[[272,8]]},"233":{"position":[[765,10]]},"281":{"position":[[420,8]]},"523":{"position":[[58,9],[110,9]]},"524":{"position":[[54,9]]},"531":{"position":[[58,9],[110,9]]},"532":{"position":[[58,9],[110,9]]},"1435":{"position":[[553,11]]}},"keywords":{}}],["interfac",{"_index":650,"title":{},"content":{"31":{"position":[[27,9]]},"35":{"position":[[293,9]]},"36":{"position":[[426,9]]},"38":{"position":[[53,9]]},"63":{"position":[[454,11]]},"64":{"position":[[1039,10]]},"81":{"position":[[182,9],[1606,10],[2125,9]]},"103":{"position":[[212,10],[231,9],[479,9]]},"104":{"position":[[53,10]]},"189":{"position":[[1674,9]]},"191":{"position":[[395,9]]},"208":{"position":[[60,9]]},"216":{"position":[[442,10]]},"281":{"position":[[782,10]]},"320":{"position":[[1535,9]]},"323":{"position":[[1757,10]]},"326":{"position":[[88,10],[166,10]]},"387":{"position":[[416,10]]}},"keywords":{}}],["intermedi",{"_index":710,"title":{"39":{"position":[[0,12]]}},"content":{"329":{"position":[[569,12]]},"1206":{"position":[[618,12]]}},"keywords":{}}],["intern",{"_index":777,"title":{"112":{"position":[[0,8]]},"114":{"position":[[14,8]]}},"content":{"48":{"position":[[295,8]]},"49":{"position":[[361,8]]},"97":{"position":[[412,8]]},"100":{"position":[[828,8]]},"104":{"position":[[161,8]]},"105":{"position":[[443,8]]},"108":{"position":[[173,8]]},"110":{"position":[[922,8]]},"112":{"position":[[35,8],[105,8],[221,8],[358,8],[540,8],[613,8]]},"113":{"position":[[596,8]]},"114":{"position":[[30,8],[91,8],[474,8]]},"121":{"position":[[1719,8]]},"124":{"position":[[273,8]]},"221":{"position":[[1584,8]]},"278":{"position":[[52,8],[801,8],[1539,8]]},"281":{"position":[[2897,8],[3117,8]]},"330":{"position":[[346,8]]},"750":{"position":[[1326,8]]},"789":{"position":[[1727,8]]},"857":{"position":[[47,8],[93,8]]},"915":{"position":[[1183,8]]},"963":{"position":[[1337,8]]},"1247":{"position":[[991,8]]}},"keywords":{}}],["internet",{"_index":2494,"title":{"238":{"position":[[27,8]]}},"content":{"234":{"position":[[394,9]]},"242":{"position":[[331,9]]},"1154":{"position":[[136,8],[356,8]]}},"keywords":{}}],["interoper",{"_index":1271,"title":{},"content":{"84":{"position":[[859,16]]}},"keywords":{}}],["interpret",{"_index":1685,"title":{},"content":{"122":{"position":[[2043,11]]},"197":{"position":[[1434,10]]},"1477":{"position":[[8,10],[291,11],[458,11]]}},"keywords":{}}],["interrupt",{"_index":2269,"title":{},"content":{"209":{"position":[[1243,13]]},"211":{"position":[[929,13]]},"1147":{"position":[[130,11]]},"1174":{"position":[[130,11]]},"1216":{"position":[[130,11]]},"1224":{"position":[[130,11]]}},"keywords":{}}],["intersect",{"_index":5544,"title":{},"content":{"1140":{"position":[[779,9],[821,12]]},"1192":{"position":[[507,9]]},"1209":{"position":[[520,9]]},"1292":{"position":[[587,9]]},"1306":{"position":[[587,9]]},"1316":{"position":[[779,9],[821,12]]},"1329":{"position":[[587,9]]},"1340":{"position":[[779,9],[821,12]]},"1351":{"position":[[779,9],[821,12]]},"1370":{"position":[[363,9]]},"1379":{"position":[[435,9],[482,12]]},"1394":{"position":[[682,9]]},"1403":{"position":[[435,9],[482,12]]},"1414":{"position":[[435,9],[482,12]]},"1423":{"position":[[520,9]]},"1431":{"position":[[802,9],[844,12]]},"1477":{"position":[[250,11],[319,12],[565,11],[3040,11]]}},"keywords":{}}],["intersect"",{"_index":6716,"title":{},"content":{"1477":{"position":[[119,17],[185,17]]}},"keywords":{}}],["interv",{"_index":41,"title":{"1036":{"position":[[8,9]]}},"content":{"1":{"position":[[516,9]]},"53":{"position":[[295,9]]},"56":{"position":[[2153,8],[2328,8],[2362,9],[2461,8],[2662,9]]},"138":{"position":[[2094,9],[2119,8],[2243,9]]},"141":{"position":[[2050,9],[2075,8],[2199,9]]},"142":{"position":[[2154,9],[2179,8],[2303,9]]},"146":{"position":[[258,8]]},"149":{"position":[[267,8]]},"152":{"position":[[274,8]]},"180":{"position":[[276,9]]},"236":{"position":[[990,9]]},"377":{"position":[[671,8],[697,8],[758,9],[902,8],[929,8]]},"480":{"position":[[1183,10],[1479,8],[1526,8],[1690,8]]},"482":{"position":[[375,8],[786,8],[822,8],[859,8]]},"517":{"position":[[2234,10]]},"540":{"position":[[404,9],[414,8],[423,8]]},"541":{"position":[[212,9]]},"646":{"position":[[831,9],[841,8],[850,8]]},"821":{"position":[[851,8]]},"842":{"position":[[1994,9],[2004,8]]},"843":{"position":[[677,9]]},"879":{"position":[[1398,8],[1415,8],[1723,9],[1733,8],[1742,8]]},"880":{"position":[[513,9]]},"912":{"position":[[870,8],[1500,8]]},"1036":{"position":[[179,9],[288,8],[475,8],[527,8],[586,8],[712,8],[923,8],[1047,8]]},"1037":{"position":[[337,9]]},"1140":{"position":[[870,8]]},"1144":{"position":[[421,8]]},"1162":{"position":[[610,8]]},"1170":{"position":[[421,8]]},"1172":{"position":[[766,8]]},"1209":{"position":[[553,8]]},"1213":{"position":[[276,8]]},"1220":{"position":[[276,8]]},"1222":{"position":[[766,8]]},"1292":{"position":[[634,8]]},"1306":{"position":[[634,8]]},"1316":{"position":[[870,8]]},"1329":{"position":[[634,8]]},"1340":{"position":[[870,8]]},"1351":{"position":[[870,8]]},"1379":{"position":[[536,8]]},"1403":{"position":[[536,8]]},"1414":{"position":[[536,8]]},"1431":{"position":[[893,8]]},"1453":{"position":[[935,10]]},"1455":{"position":[[90,8],[187,8],[222,9]]}},"keywords":{}}],["interval"",{"_index":3830,"title":{},"content":{"479":{"position":[[709,14]]}},"keywords":{}}],["intervent",{"_index":5064,"title":{},"content":{"922":{"position":[[2661,12]]}},"keywords":{}}],["interviewsapprovalscandidatesclos",{"_index":4324,"title":{},"content":{"622":{"position":[[112,34]]}},"keywords":{}}],["intfield",{"_index":5945,"title":{},"content":{"1275":{"position":[[465,9]]}},"keywords":{}}],["intransact",{"_index":6523,"title":{},"content":{"1451":{"position":[[29,15]]}},"keywords":{}}],["intric",{"_index":2258,"title":{},"content":{"208":{"position":[[1737,9]]}},"keywords":{}}],["intricaci",{"_index":2176,"title":{},"content":{"196":{"position":[[598,11]]},"233":{"position":[[783,11]]}},"keywords":{}}],["intrigu",{"_index":2309,"title":{},"content":{"210":{"position":[[1859,10]]}},"keywords":{}}],["introduc",{"_index":331,"title":{},"content":{"11":{"position":[[1283,9],[1838,11]]},"12":{"position":[[375,10]]},"159":{"position":[[26,10]]},"180":{"position":[[205,9]]},"208":{"position":[[345,10]]},"215":{"position":[[55,10]]},"277":{"position":[[19,10]]},"278":{"position":[[19,10]]},"279":{"position":[[19,10]]},"280":{"position":[[59,10]]},"281":{"position":[[19,10]]},"1461":{"position":[[951,11]]}},"keywords":{}}],["introduct",{"_index":286,"title":{"11":{"position":[[0,13]]},"180":{"position":[[0,13]]},"189":{"position":[[0,13]]},"198":{"position":[[0,12]]},"216":{"position":[[0,13]]},"232":{"position":[[0,13]]},"252":{"position":[[0,13]]},"289":{"position":[[0,13]]},"294":{"position":[[0,13]]},"300":{"position":[[0,13]]},"305":{"position":[[0,13]]},"312":{"position":[[0,13]]}},"content":{"203":{"position":[[465,12]]},"1178":{"position":[[442,12]]}},"keywords":{}}],["introspect",{"_index":1865,"title":{},"content":{"157":{"position":[[240,13]]}},"keywords":{}}],["invalid",{"_index":1889,"title":{},"content":{"160":{"position":[[587,7]]},"724":{"position":[[567,7]]},"922":{"position":[[2495,10],[2573,11]]}},"keywords":{}}],["invalu",{"_index":2172,"title":{},"content":{"196":{"position":[[242,10]]},"233":{"position":[[249,10]]}},"keywords":{}}],["invari",{"_index":729,"title":{},"content":{"41":{"position":[[396,11]]},"1467":{"position":[[1956,10]]},"1477":{"position":[[2859,10]]}},"keywords":{}}],["inventori",{"_index":3051,"title":{},"content":{"307":{"position":[[1717,9],[2600,9]]},"309":{"position":[[2548,9],[3155,9]]},"331":{"position":[[555,9]]},"1461":{"position":[[1371,9],[2559,9]]}},"keywords":{}}],["invers",{"_index":684,"title":{},"content":{"36":{"position":[[219,7]]}},"keywords":{}}],["investig",{"_index":904,"title":{},"content":{"60":{"position":[[474,11]]}},"keywords":{}}],["investigationinfo",{"_index":239,"title":{},"content":{"7":{"position":[[337,18]]}},"keywords":{}}],["invis",{"_index":5992,"title":{},"content":{"1292":{"position":[[716,9]]},"1306":{"position":[[716,9]]},"1329":{"position":[[716,9]]}},"keywords":{}}],["invoc",{"_index":854,"title":{},"content":{"56":{"position":[[2178,11],[2404,10],[2494,10],[2564,10]]},"64":{"position":[[404,11]]},"1442":{"position":[[1438,10],[1606,11]]},"1475":{"position":[[1736,12],[1881,12]]}},"keywords":{}}],["invoic",{"_index":5293,"title":{},"content":{"1077":{"position":[[170,7]]},"1078":{"position":[[1309,8]]}},"keywords":{}}],["invoice_item",{"_index":5314,"title":{},"content":{"1078":{"position":[[1124,13]]}},"keywords":{}}],["invoice_line_item",{"_index":5316,"title":{},"content":{"1078":{"position":[[1212,18]]}},"keywords":{}}],["invok",{"_index":1148,"title":{},"content":{"82":{"position":[[421,8],[2953,8]]},"105":{"position":[[313,8],[1543,7]]},"108":{"position":[[45,7]]},"208":{"position":[[1759,7]]},"1292":{"position":[[748,7]]},"1306":{"position":[[748,7]]},"1329":{"position":[[748,7]]}},"keywords":{}}],["involv",{"_index":1704,"title":{},"content":{"125":{"position":[[63,8]]},"240":{"position":[[194,8]]},"606":{"position":[[391,7]]},"1032":{"position":[[260,9]]}},"keywords":{}}],["io",{"_index":5994,"title":{},"content":{"1292":{"position":[[781,2]]},"1306":{"position":[[781,2]]},"1329":{"position":[[781,2]]}},"keywords":{}}],["io_after_gtid",{"_index":5996,"title":{},"content":{"1292":{"position":[[816,13]]},"1306":{"position":[[816,13]]},"1329":{"position":[[816,13]]}},"keywords":{}}],["io_before_gti",{"_index":5997,"title":{},"content":{"1292":{"position":[[863,13]]},"1306":{"position":[[863,13]]},"1329":{"position":[[863,13]]}},"keywords":{}}],["io_thread",{"_index":5999,"title":{},"content":{"1292":{"position":[[904,9]]},"1306":{"position":[[904,9]]},"1329":{"position":[[904,9]]}},"keywords":{}}],["ip",{"_index":1215,"title":{"334":{"position":[[13,2]]},"335":{"position":[[0,2]]}},"content":{"83":{"position":[[274,2]]},"203":{"position":[[523,2]]},"204":{"position":[[353,2],[458,2]]},"221":{"position":[[1908,2],[1971,2]]},"223":{"position":[[916,2]]},"224":{"position":[[968,3]]},"225":{"position":[[158,2]]},"335":{"position":[[27,2]]},"366":{"position":[[1180,2]]},"370":{"position":[[120,2],[154,2]]},"371":{"position":[[368,2]]},"402":{"position":[[83,2]]},"430":{"position":[[302,2]]},"739":{"position":[[34,2]]},"753":{"position":[[177,2],[254,2]]},"767":{"position":[[57,2],[400,2]]},"780":{"position":[[526,4],[564,2]]},"792":{"position":[[311,2],[713,2]]},"793":{"position":[[125,2],[248,2]]},"808":{"position":[[125,2],[196,2],[237,2],[264,2],[1549,2]]},"824":{"position":[[125,2],[505,2]]},"904":{"position":[[125,2],[504,2]]},"918":{"position":[[311,2],[713,2]]},"919":{"position":[[125,2],[248,2]]},"931":{"position":[[125,2],[196,2],[241,2],[268,2],[2028,2]]},"946":{"position":[[25,2],[55,2],[153,2],[223,3],[342,3],[369,2]]},"1018":{"position":[[78,2]]},"1042":{"position":[[1439,2]]},"1043":{"position":[[125,2],[248,2]]},"1051":{"position":[[125,2],[504,2]]},"1059":{"position":[[125,2],[196,2],[241,2],[268,2],[1875,2]]},"1136":{"position":[[333,2]]},"1138":{"position":[[120,2],[154,2]]},"1139":{"position":[[251,2]]},"1154":{"position":[[165,2]]},"1198":{"position":[[127,2]]},"1251":{"position":[[287,4],[326,2]]},"1282":{"position":[[442,2]]},"1283":{"position":[[136,2],[284,2]]},"1286":{"position":[[2079,2]]},"1288":{"position":[[154,2]]},"1289":{"position":[[136,2],[574,2],[645,2],[686,2],[713,2],[1566,2],[1633,2]]},"1297":{"position":[[15,2],[60,2],[87,2]]},"1298":{"position":[[916,2]]},"1301":{"position":[[1915,2]]},"1303":{"position":[[125,2],[196,2],[241,2],[268,2],[1159,2],[1237,2],[1671,2]]},"1310":{"position":[[457,2],[887,2],[954,2]]},"1311":{"position":[[120,2]]},"1320":{"position":[[136,2]]},"1321":{"position":[[367,2]]},"1325":{"position":[[2079,2]]},"1333":{"position":[[136,2]]},"1334":{"position":[[455,2]]},"1344":{"position":[[136,2]]},"1345":{"position":[[15,2],[60,2],[87,2]]},"1346":{"position":[[916,2],[1292,2],[1359,2]]},"1373":{"position":[[125,2],[486,2]]},"1374":{"position":[[125,2],[486,2]]},"1397":{"position":[[125,2],[197,2],[238,2],[265,2],[1110,2]]},"1398":{"position":[[125,2],[196,2],[237,2],[264,2],[1113,2]]},"1408":{"position":[[712,2]]},"1409":{"position":[[125,2],[248,2]]}},"keywords":{}}],["ipc",{"_index":6001,"title":{},"content":{"1292":{"position":[[947,3]]},"1306":{"position":[[947,3]]},"1329":{"position":[[947,3]]}},"keywords":{}}],["iphon",{"_index":501,"title":{},"content":{"17":{"position":[[688,8]]}},"keywords":{}}],["ipv4",{"_index":5123,"title":{},"content":{"963":{"position":[[82,4]]},"964":{"position":[[632,4],[770,4]]},"1317":{"position":[[760,5]]},"1341":{"position":[[760,5]]},"1352":{"position":[[760,5]]},"1432":{"position":[[774,5]]}},"keywords":{}}],["ipv6",{"_index":6259,"title":{},"content":{"1317":{"position":[[766,5]]},"1341":{"position":[[766,5]]},"1352":{"position":[[766,5]]},"1432":{"position":[[780,5]]}},"keywords":{}}],["irrelev",{"_index":6396,"title":{},"content":{"1391":{"position":[[421,10]]}},"keywords":{}}],["is_free_plan",{"_index":3460,"title":{},"content":{"378":{"position":[[291,13]]}},"keywords":{}}],["is_sandbox",{"_index":4924,"title":{},"content":{"885":{"position":[[250,11]]},"886":{"position":[[177,11]]},"991":{"position":[[684,11]]},"992":{"position":[[208,11]]},"1009":{"position":[[747,11]]},"1010":{"position":[[291,11]]}},"keywords":{}}],["isaac"",{"_index":2358,"title":{},"content":{"210":{"position":[[2827,11]]}},"keywords":{}}],["isdatagolden",{"_index":4213,"title":{},"content":{"578":{"position":[[386,12]]}},"keywords":{}}],["isn't",{"_index":966,"title":{},"content":{"64":{"position":[[560,5]]},"81":{"position":[[992,5]]},"110":{"position":[[1228,5]]},"154":{"position":[[1591,5]]},"169":{"position":[[1024,5]]},"190":{"position":[[1017,5]]},"218":{"position":[[1515,5]]},"228":{"position":[[1254,5]]},"392":{"position":[[509,5]]},"397":{"position":[[658,5]]},"417":{"position":[[675,5]]},"1125":{"position":[[452,5]]},"1144":{"position":[[813,5]]},"1170":{"position":[[813,5]]},"1183":{"position":[[208,5]]},"1459":{"position":[[218,5]]}},"keywords":{}}],["isnul",{"_index":5554,"title":{},"content":{"1140":{"position":[[1003,6]]},"1209":{"position":[[594,6]]},"1316":{"position":[[1003,6]]},"1340":{"position":[[1003,6]]},"1351":{"position":[[1003,6]]},"1370":{"position":[[398,6]]},"1431":{"position":[[1026,6]]}},"keywords":{}}],["iso",{"_index":3895,"title":{},"content":{"496":{"position":[[167,3]]}},"keywords":{}}],["iso8601",{"_index":4767,"title":{},"content":{"842":{"position":[[2061,7],[2818,7]]},"1162":{"position":[[678,7]]}},"keywords":{}}],["isol",{"_index":463,"title":{},"content":{"16":{"position":[[396,7]]},"1140":{"position":[[1043,9]]},"1156":{"position":[[714,9]]},"1292":{"position":[[1028,9]]},"1306":{"position":[[1028,9]]},"1316":{"position":[[1043,9]]},"1329":{"position":[[1028,9]]},"1340":{"position":[[1043,9]]},"1351":{"position":[[1043,9]]},"1379":{"position":[[688,9]]},"1403":{"position":[[688,9]]},"1414":{"position":[[688,9]]},"1431":{"position":[[1066,9]]},"1437":{"position":[[545,9]]}},"keywords":{}}],["issu",{"_index":246,"title":{},"content":{"7":{"position":[[478,5]]},"68":{"position":[[729,5]]},"136":{"position":[[148,6]]},"209":{"position":[[215,6]]},"309":{"position":[[1942,5]]},"367":{"position":[[201,5]]},"517":{"position":[[3416,6],[3715,6]]},"521":{"position":[[28,5],[266,6]]},"529":{"position":[[349,5],[428,5],[469,5],[488,5],[511,5],[527,6]]},"713":{"position":[[206,6]]},"869":{"position":[[968,6]]},"871":{"position":[[144,6]]},"910":{"position":[[21,5]]},"926":{"position":[[21,5]]},"931":{"position":[[962,5]]},"937":{"position":[[21,5]]},"953":{"position":[[21,5]]},"971":{"position":[[21,5]]},"1042":{"position":[[27,5]]},"1043":{"position":[[691,5]]},"1051":{"position":[[947,5]]},"1059":{"position":[[711,5]]},"1123":{"position":[[675,6]]},"1373":{"position":[[929,5]]},"1374":{"position":[[929,5]]},"1394":{"position":[[747,5]]},"1397":{"position":[[708,5]]},"1398":{"position":[[707,5]]},"1408":{"position":[[27,5]]},"1409":{"position":[[691,5]]},"1447":{"position":[[335,6]]}},"keywords":{}}],["issuer",{"_index":6004,"title":{},"content":{"1292":{"position":[[1066,6]]},"1306":{"position":[[1066,6]]},"1329":{"position":[[1066,6]]}},"keywords":{}}],["issuesbi",{"_index":4498,"title":{},"content":{"709":{"position":[[812,8]]}},"keywords":{}}],["issuesissu",{"_index":4495,"title":{},"content":{"709":{"position":[[765,11]]}},"keywords":{}}],["isuncheck",{"_index":5128,"title":{},"content":{"964":{"position":[[494,11]]}},"keywords":{}}],["it'",{"_index":901,"title":{},"content":{"60":{"position":[[298,4]]},"66":{"position":[[713,4]]},"68":{"position":[[16,4]]},"77":{"position":[[380,4]]},"80":{"position":[[97,4],[139,4]]},"81":{"position":[[915,4]]},"82":{"position":[[914,4],[3082,4]]},"88":{"position":[[339,4]]},"90":{"position":[[78,4]]},"107":{"position":[[34,4]]},"111":{"position":[[11,4]]},"121":{"position":[[169,4]]},"137":{"position":[[401,4]]},"142":{"position":[[206,4]]},"161":{"position":[[300,4]]},"165":{"position":[[392,4]]},"174":{"position":[[609,4]]},"175":{"position":[[66,4]]},"215":{"position":[[94,4]]},"221":{"position":[[1721,4]]},"227":{"position":[[91,4]]},"268":{"position":[[1378,4]]},"269":{"position":[[949,4]]},"280":{"position":[[491,4],[517,4]]},"292":{"position":[[67,4]]},"303":{"position":[[67,4]]},"305":{"position":[[498,4]]},"309":{"position":[[357,4]]},"326":{"position":[[49,4],[329,4]]},"485":{"position":[[70,4]]},"657":{"position":[[70,4]]},"673":{"position":[[70,4]]},"688":{"position":[[70,4]]},"745":{"position":[[85,4]]},"754":{"position":[[120,4]]},"757":{"position":[[1092,4]]},"770":{"position":[[1092,4]]},"797":{"position":[[1092,4]]},"812":{"position":[[1092,4]]},"828":{"position":[[1092,4]]},"898":{"position":[[1224,4]]},"909":{"position":[[1036,4]]},"925":{"position":[[1036,4]]},"936":{"position":[[1036,4]]},"952":{"position":[[1036,4]]},"970":{"position":[[1036,4]]},"1036":{"position":[[813,4]]},"1077":{"position":[[253,4]]},"1358":{"position":[[633,4]]},"1437":{"position":[[906,4]]},"1439":{"position":[[1206,4]]},"1461":{"position":[[1498,4],[2615,4],[4279,4]]},"1479":{"position":[[489,4]]}},"keywords":{}}],["it'd",{"_index":1846,"title":{},"content":{"154":{"position":[[945,4]]},"268":{"position":[[349,4],[646,4]]},"269":{"position":[[284,4]]}},"keywords":{}}],["it'll",{"_index":2169,"title":{},"content":{"193":{"position":[[185,5]]},"218":{"position":[[1449,5]]},"840":{"position":[[392,5]]},"849":{"position":[[335,5]]}},"keywords":{}}],["item",{"_index":1175,"title":{},"content":{"82":{"position":[[2403,5],[4520,5]]},"98":{"position":[[590,7]]},"137":{"position":[[579,5]]},"164":{"position":[[1894,6]]},"288":{"position":[[806,6]]},"296":{"position":[[536,6],[1507,6],[2323,5],[2472,5]]},"299":{"position":[[721,6]]},"397":{"position":[[738,5]]},"446":{"position":[[147,6]]},"457":{"position":[[145,5]]},"461":{"position":[[274,5]]},"628":{"position":[[148,4],[198,4]]},"919":{"position":[[2425,5]]},"988":{"position":[[163,5]]},"1003":{"position":[[163,5]]},"1043":{"position":[[1789,5]]},"1226":{"position":[[130,5]]},"1383":{"position":[[349,4]]},"1409":{"position":[[1062,5]]},"1464":{"position":[[70,5]]},"1467":{"position":[[279,5],[383,5],[735,6],[774,6],[1823,5],[2015,4],[2258,6]]},"1476":{"position":[[1348,6]]},"1477":{"position":[[875,4],[2742,5],[3748,6],[3767,6]]}},"keywords":{}}],["item/product_id",{"_index":1536,"title":{},"content":{"107":{"position":[[1497,18]]}},"keywords":{}}],["item_pric",{"_index":1373,"title":{},"content":{"96":{"position":[[268,11]]},"107":{"position":[[2789,11],[2807,11]]}},"keywords":{}}],["itemscouponscustom",{"_index":5279,"title":{},"content":{"1073":{"position":[[149,20]]}},"keywords":{}}],["itemsinvoic",{"_index":5281,"title":{},"content":{"1073":{"position":[[221,12]]}},"keywords":{}}],["itemsinvoicespay",{"_index":5282,"title":{},"content":{"1073":{"position":[[239,20]]}},"keywords":{}}],["itemsownersproductsproperti",{"_index":4392,"title":{},"content":{"649":{"position":[[418,27]]}},"keywords":{}}],["itemssubscriptionstransf",{"_index":5285,"title":{},"content":{"1073":{"position":[[322,27]]}},"keywords":{}}],["iter",{"_index":2823,"title":{"696":{"position":[[0,8]]}},"content":{"275":{"position":[[1144,11]]},"364":{"position":[[2142,8]]},"697":{"position":[[56,8]]},"698":{"position":[[15,8],[58,8]]},"699":{"position":[[250,8]]},"700":{"position":[[93,8],[372,8]]},"867":{"position":[[1236,10]]},"870":{"position":[[10,10],[273,11],[769,10]]},"1292":{"position":[[1109,7]]},"1306":{"position":[[1109,7]]},"1329":{"position":[[1109,7]]},"1379":{"position":[[751,7]]},"1403":{"position":[[751,7]]},"1414":{"position":[[751,7]]}},"keywords":{}}],["iterable.dev",{"_index":3354,"title":{},"content":{"364":{"position":[[2197,12]]}},"keywords":{}}],["iterable:dev",{"_index":4460,"title":{},"content":{"701":{"position":[[90,12]]}},"keywords":{}}],["itrequir",{"_index":5976,"title":{},"content":{"1286":{"position":[[1779,11]]},"1301":{"position":[[1615,11]]},"1325":{"position":[[1779,11]]}},"keywords":{}}],["itself",{"_index":166,"title":{},"content":{"4":{"position":[[372,7]]},"38":{"position":[[314,7]]},"72":{"position":[[430,6]]},"88":{"position":[[675,6]]},"115":{"position":[[635,6]]},"147":{"position":[[66,7]]},"153":{"position":[[74,7]]},"280":{"position":[[1032,7]]},"320":{"position":[[52,7]]},"338":{"position":[[176,6]]},"364":{"position":[[264,7]]},"763":{"position":[[245,6]]},"776":{"position":[[245,6]]},"803":{"position":[[251,6]]},"818":{"position":[[251,6]]},"834":{"position":[[251,6]]},"909":{"position":[[484,6]]},"925":{"position":[[484,6]]},"936":{"position":[[484,6]]},"952":{"position":[[484,6]]},"970":{"position":[[484,6]]},"1019":{"position":[[324,6]]},"1467":{"position":[[1927,6]]},"1472":{"position":[[460,7]]}},"keywords":{}}],["it’",{"_index":1258,"title":{},"content":{"84":{"position":[[189,4]]},"115":{"position":[[1184,4]]},"156":{"position":[[622,4]]},"232":{"position":[[942,4]]},"233":{"position":[[625,4]]},"242":{"position":[[20,4]]},"296":{"position":[[1041,4],[1736,4],[6852,4]]},"1476":{"position":[[1157,4]]}},"keywords":{}}],["jane",{"_index":2943,"title":{},"content":{"295":{"position":[[360,4]]}},"keywords":{}}],["javascript",{"_index":951,"title":{},"content":{"63":{"position":[[801,10]]},"102":{"position":[[258,10]]},"164":{"position":[[282,11]]}},"keywords":{}}],["jdbc",{"_index":3541,"title":{},"content":{"402":{"position":[[486,4],[539,4]]}},"keywords":{}}],["jdbc_param",{"_index":3540,"title":{},"content":{"402":{"position":[[473,12]]},"403":{"position":[[325,12]]}},"keywords":{}}],["jersey",{"_index":4603,"title":{},"content":{"754":{"position":[[597,7]]},"794":{"position":[[803,7]]},"809":{"position":[[803,7]]},"825":{"position":[[639,7]]},"1286":{"position":[[860,7]]},"1301":{"position":[[696,7]]},"1325":{"position":[[860,7]]}},"keywords":{}}],["jira",{"_index":3355,"title":{"687":{"position":[[0,4]]},"690":{"position":[[12,4]]},"708":{"position":[[0,4]]}},"content":{"364":{"position":[[2210,4]]},"660":{"position":[[1137,4]]},"690":{"position":[[8,4]]},"709":{"position":[[56,4]]},"711":{"position":[[250,4]]},"712":{"position":[[81,4],[203,4],[337,4],[567,4]]}},"keywords":{}}],["jira'",{"_index":4447,"title":{},"content":{"690":{"position":[[64,6],[314,6]]}},"keywords":{}}],["jira.dev",{"_index":3356,"title":{},"content":{"364":{"position":[[2261,8]]}},"keywords":{}}],["jira.your",{"_index":4504,"title":{},"content":{"712":{"position":[[263,9]]}},"keywords":{}}],["jira:dev",{"_index":4506,"title":{},"content":{"713":{"position":[[90,8]]}},"keywords":{}}],["jiradomainemail",{"_index":4499,"title":{},"content":{"710":{"position":[[67,15]]}},"keywords":{}}],["jitter",{"_index":6577,"title":{},"content":{"1453":{"position":[[1168,6]]}},"keywords":{}}],["job",{"_index":3140,"title":{},"content":{"321":{"position":[[1112,5],[2078,5]]},"322":{"position":[[380,5],[535,5],[781,3],[826,3]]},"323":{"position":[[177,4],[333,4]]},"329":{"position":[[607,3]]},"477":{"position":[[211,5]]}},"keywords":{}}],["john",{"_index":2936,"title":{},"content":{"295":{"position":[[314,4]]}},"keywords":{}}],["join",{"_index":719,"title":{"293":{"position":[[7,4]]}},"content":{"40":{"position":[[314,5]]},"105":{"position":[[1024,5]]},"107":{"position":[[2590,6]]},"112":{"position":[[92,4]]},"136":{"position":[[351,4]]},"212":{"position":[[394,4]]},"232":{"position":[[989,4]]},"243":{"position":[[389,4]]},"295":{"position":[[705,4],[994,5]]},"296":{"position":[[356,6],[1327,6],[1697,4],[3939,4],[4554,6],[6615,6]]},"297":{"position":[[67,4]]},"319":{"position":[[1325,5]]},"331":{"position":[[41,4],[169,5],[276,5]]},"842":{"position":[[3226,4],[3311,4],[3385,4],[3471,4]]},"1015":{"position":[[75,4],[100,4]]},"1140":{"position":[[1093,4]]},"1192":{"position":[[517,4]]},"1196":{"position":[[674,6]]},"1209":{"position":[[614,4]]},"1292":{"position":[[1150,4]]},"1306":{"position":[[1150,4]]},"1316":{"position":[[1093,4]]},"1329":{"position":[[1150,4]]},"1340":{"position":[[1093,4]]},"1351":{"position":[[1093,4]]},"1370":{"position":[[409,4]]},"1379":{"position":[[801,4]]},"1394":{"position":[[772,4]]},"1403":{"position":[[801,4]]},"1414":{"position":[[801,4]]},"1423":{"position":[[592,4]]},"1431":{"position":[[1116,4]]}},"keywords":{}}],["join.flow.t",{"_index":2995,"title":{},"content":{"296":{"position":[[723,12],[2724,12],[3045,12],[4010,12],[5167,13]]}},"keywords":{}}],["join_channel",{"_index":5185,"title":{},"content":{"1016":{"position":[[213,14]]}},"keywords":{}}],["join_typ",{"_index":5872,"title":{},"content":{"1209":{"position":[[636,9]]}},"keywords":{}}],["jordan"",{"_index":2353,"title":{},"content":{"210":{"position":[[2756,13]]}},"keywords":{}}],["journal",{"_index":0,"title":{"0":{"position":[[0,8]]},"48":{"position":[[0,9]]}},"content":{"1":{"position":[[81,8],[102,8],[186,9],[216,7]]},"2":{"position":[[707,9],[746,7],[826,7]]},"3":{"position":[[1,7],[384,8]]},"16":{"position":[[1327,7]]},"21":{"position":[[418,9],[543,9]]},"48":{"position":[[1,8],[129,8],[160,8],[276,7],[353,8]]},"60":{"position":[[791,8],[803,7]]},"77":{"position":[[611,9]]},"320":{"position":[[711,8],[788,7],[923,9],[974,8],[1077,7],[1560,9],[1866,9]]}},"keywords":{}}],["journals.materi",{"_index":565,"title":{},"content":{"21":{"position":[[277,24]]}},"keywords":{}}],["jq",{"_index":5096,"title":{},"content":{"943":{"position":[[1230,2]]}},"keywords":{}}],["json",{"_index":106,"title":{"90":{"position":[[0,4]]},"156":{"position":[[0,4]]}},"content":{"3":{"position":[[121,4]]},"11":{"position":[[85,4]]},"26":{"position":[[653,4]]},"34":{"position":[[286,4]]},"41":{"position":[[333,4]]},"50":{"position":[[21,4]]},"66":{"position":[[55,4]]},"67":{"position":[[1761,4],[1870,4]]},"68":{"position":[[652,4],[1811,4]]},"69":{"position":[[515,4]]},"70":{"position":[[537,4]]},"71":{"position":[[114,4],[272,4]]},"76":{"position":[[558,4]]},"77":{"position":[[123,4]]},"82":{"position":[[541,4]]},"88":{"position":[[453,4]]},"90":{"position":[[64,4],[244,4]]},"94":{"position":[[2920,4]]},"98":{"position":[[511,4],[666,4],[955,4],[963,5],[1009,4]]},"102":{"position":[[394,4]]},"107":{"position":[[1274,4]]},"122":{"position":[[87,4],[320,4],[1069,4]]},"149":{"position":[[1220,4]]},"156":{"position":[[1,4],[157,4]]},"157":{"position":[[81,4],[225,4]]},"158":{"position":[[70,4]]},"159":{"position":[[5,4],[137,4],[329,4]]},"161":{"position":[[1,4],[1035,4],[1066,4]]},"164":{"position":[[1640,4]]},"165":{"position":[[29,4],[213,4]]},"183":{"position":[[4127,4]]},"207":{"position":[[189,4]]},"210":{"position":[[1820,4]]},"227":{"position":[[129,4]]},"239":{"position":[[792,4]]},"253":{"position":[[965,4],[1083,4]]},"254":{"position":[[2302,4]]},"259":{"position":[[324,4],[2013,4]]},"288":{"position":[[543,4]]},"290":{"position":[[1047,4],[1457,4]]},"296":{"position":[[2170,4]]},"301":{"position":[[1132,7],[1158,4],[1553,4]]},"305":{"position":[[386,4]]},"313":{"position":[[965,4],[1083,4]]},"314":{"position":[[1843,4]]},"320":{"position":[[1709,4],[1742,4]]},"323":{"position":[[1013,4]]},"332":{"position":[[222,4],[586,4]]},"390":{"position":[[121,4]]},"413":{"position":[[296,4]]},"417":{"position":[[1346,4]]},"419":{"position":[[213,4]]},"427":{"position":[[53,4],[95,5],[236,4]]},"438":{"position":[[1862,4]]},"440":{"position":[[229,4]]},"478":{"position":[[512,4]]},"480":{"position":[[116,4]]},"482":{"position":[[283,4],[329,4]]},"485":{"position":[[218,4]]},"486":{"position":[[191,4]]},"502":{"position":[[347,8],[372,4]]},"504":{"position":[[150,4]]},"543":{"position":[[316,4]]},"545":{"position":[[682,4],[970,4]]},"547":{"position":[[214,4]]},"548":{"position":[[435,4],[610,4],[1296,4]]},"564":{"position":[[85,4]]},"571":{"position":[[222,4],[597,4]]},"573":{"position":[[529,4],[627,4]]},"574":{"position":[[221,4]]},"582":{"position":[[87,4],[208,4]]},"584":{"position":[[460,4],[549,4]]},"585":{"position":[[211,4]]},"591":{"position":[[230,4]]},"593":{"position":[[120,4]]},"599":{"position":[[512,4]]},"601":{"position":[[188,4],[222,4]]},"603":{"position":[[38,4]]},"609":{"position":[[48,4],[219,4]]},"611":{"position":[[434,4],[447,4],[685,4]]},"617":{"position":[[174,4],[519,4]]},"619":{"position":[[434,4]]},"639":{"position":[[149,4]]},"657":{"position":[[218,4]]},"658":{"position":[[191,4]]},"673":{"position":[[218,4]]},"674":{"position":[[191,4]]},"688":{"position":[[218,4]]},"689":{"position":[[191,4]]},"821":{"position":[[157,4]]},"912":{"position":[[165,4]]},"1021":{"position":[[1038,8],[1063,4]]},"1023":{"position":[[194,4]]},"1047":{"position":[[704,4]]},"1055":{"position":[[704,4]]},"1063":{"position":[[704,4]]},"1172":{"position":[[294,4],[327,4]]},"1177":{"position":[[421,4]]},"1179":{"position":[[206,4],[215,4]]},"1200":{"position":[[507,4],[676,4]]},"1203":{"position":[[381,4]]},"1213":{"position":[[162,4],[171,4]]},"1220":{"position":[[162,4],[171,4]]},"1222":{"position":[[294,4],[327,4]]},"1228":{"position":[[273,4]]},"1230":{"position":[[355,4],[364,4]]},"1245":{"position":[[116,4],[471,4],[623,4]]},"1247":{"position":[[526,4],[535,4]]},"1276":{"position":[[179,4]]},"1292":{"position":[[1186,4]]},"1306":{"position":[[1186,4]]},"1329":{"position":[[1186,4]]},"1358":{"position":[[376,4]]},"1465":{"position":[[53,4]]},"1467":{"position":[[1670,4]]},"1475":{"position":[[1358,4]]},"1476":{"position":[[757,4]]},"1477":{"position":[[2706,4]]}},"keywords":{}}],["json('tru",{"_index":1421,"title":{},"content":{"98":{"position":[[1119,14]]}},"keywords":{}}],["json_array",{"_index":5563,"title":{},"content":{"1140":{"position":[[1134,10]]},"1316":{"position":[[1134,10]]},"1340":{"position":[[1134,10]]},"1351":{"position":[[1134,10]]},"1423":{"position":[[620,10]]},"1431":{"position":[[1157,10]]}},"keywords":{}}],["json_array(1",{"_index":1411,"title":{},"content":{"98":{"position":[[563,13]]}},"keywords":{}}],["json_arrayagg",{"_index":5567,"title":{},"content":{"1140":{"position":[[1169,13]]},"1316":{"position":[[1169,13]]},"1340":{"position":[[1169,13]]},"1351":{"position":[[1169,13]]},"1431":{"position":[[1192,13]]}},"keywords":{}}],["json_exist",{"_index":5569,"title":{},"content":{"1140":{"position":[[1222,11]]},"1316":{"position":[[1222,11]]},"1340":{"position":[[1222,11]]},"1351":{"position":[[1222,11]]},"1423":{"position":[[650,11]]},"1431":{"position":[[1245,11]]}},"keywords":{}}],["json_object",{"_index":5572,"title":{},"content":{"1140":{"position":[[1268,11]]},"1316":{"position":[[1268,11]]},"1340":{"position":[[1268,11]]},"1351":{"position":[[1268,11]]},"1423":{"position":[[687,11]]},"1431":{"position":[[1291,11]]}},"keywords":{}}],["json_object('a",{"_index":1420,"title":{},"content":{"98":{"position":[[1094,16]]}},"keywords":{}}],["json_objectagg",{"_index":5575,"title":{},"content":{"1140":{"position":[[1311,14]]},"1316":{"position":[[1311,14]]},"1340":{"position":[[1311,14]]},"1351":{"position":[[1311,14]]},"1431":{"position":[[1334,14]]}},"keywords":{}}],["json_queri",{"_index":5579,"title":{},"content":{"1140":{"position":[[1368,10]]},"1316":{"position":[[1368,10]]},"1340":{"position":[[1368,10]]},"1351":{"position":[[1368,10]]},"1423":{"position":[[718,10]]},"1431":{"position":[[1391,10]]}},"keywords":{}}],["json_schema",{"_index":1307,"title":{},"content":{"89":{"position":[[360,12]]},"90":{"position":[[578,11]]}},"keywords":{}}],["json_tabl",{"_index":5581,"title":{},"content":{"1140":{"position":[[1408,10]]},"1292":{"position":[[1236,10]]},"1306":{"position":[[1236,10]]},"1316":{"position":[[1408,10]]},"1329":{"position":[[1236,10]]},"1340":{"position":[[1408,10]]},"1351":{"position":[[1408,10]]},"1423":{"position":[[747,10]]},"1431":{"position":[[1431,10]]}},"keywords":{}}],["json_table_primit",{"_index":5582,"title":{},"content":{"1140":{"position":[[1456,20]]},"1316":{"position":[[1456,20]]},"1340":{"position":[[1456,20]]},"1351":{"position":[[1456,20]]},"1431":{"position":[[1479,20]]}},"keywords":{}}],["json_valu",{"_index":5585,"title":{},"content":{"1140":{"position":[[1511,10]]},"1292":{"position":[[1298,10]]},"1306":{"position":[[1298,10]]},"1316":{"position":[[1511,10]]},"1329":{"position":[[1298,10]]},"1340":{"position":[[1511,10]]},"1351":{"position":[[1511,10]]},"1423":{"position":[[770,10]]},"1431":{"position":[[1534,10]]}},"keywords":{}}],["juli",{"_index":4302,"title":{},"content":{"606":{"position":[[478,4]]}},"keywords":{}}],["jump",{"_index":2581,"title":{},"content":{"238":{"position":[[681,4]]}},"keywords":{}}],["june",{"_index":5295,"title":{},"content":{"1077":{"position":[[530,5],[624,4],[753,4],[820,4]]}},"keywords":{}}],["jwt",{"_index":6364,"title":{},"content":{"1384":{"position":[[134,3]]},"1386":{"position":[[831,3],[1057,3]]},"1387":{"position":[[808,3]]}},"keywords":{}}],["k",{"_index":6659,"title":{},"content":{"1467":{"position":[[2253,4],[2486,2],[2514,2],[2578,2],[2606,2],[2732,2],[2760,2],[2788,2]]}},"keywords":{}}],["kafka",{"_index":766,"title":{"244":{"position":[[32,5]]},"250":{"position":[[15,5]]},"320":{"position":[[0,6]]},"426":{"position":[[7,5]]},"430":{"position":[[22,5]]}},"content":{"45":{"position":[[254,5]]},"245":{"position":[[236,5],[295,5]]},"246":{"position":[[1,5],[72,5]]},"250":{"position":[[16,5],[77,5],[146,5],[174,5],[202,5],[1238,5]]},"320":{"position":[[38,5],[60,5],[320,5],[446,5],[563,5],[765,5],[1632,5],[1939,5],[2408,6]]},"325":{"position":[[107,5]]},"363":{"position":[[627,5]]},"427":{"position":[[25,5],[241,5],[323,5],[362,5]]},"428":{"position":[[3,5]]},"429":{"position":[[79,5],[151,5],[430,5],[1187,5]]},"430":{"position":[[43,5]]},"431":{"position":[[257,5]]},"432":{"position":[[124,5],[178,5],[455,5],[1246,5]]},"433":{"position":[[912,5]]},"1118":{"position":[[285,5]]},"1440":{"position":[[1651,5]]}},"keywords":{}}],["kafka:dev",{"_index":3290,"title":{},"content":{"363":{"position":[[679,9]]},"433":{"position":[[131,9],[542,9]]}},"keywords":{}}],["kafkacat",{"_index":2677,"title":{},"content":{"250":{"position":[[1155,9]]}},"keywords":{}}],["kafkaconsum",{"_index":2645,"title":{},"content":{"250":{"position":[[215,13],[552,14]]}},"keywords":{}}],["kb",{"_index":5009,"title":{},"content":{"909":{"position":[[50,3]]},"925":{"position":[[50,3]]},"936":{"position":[[50,3]]},"952":{"position":[[50,3]]},"970":{"position":[[50,3]]}},"keywords":{}}],["kcat",{"_index":2675,"title":{},"content":{"250":{"position":[[1131,4],[1252,4]]}},"keywords":{}}],["keep",{"_index":298,"title":{},"content":{"11":{"position":[[321,4]]},"12":{"position":[[233,4]]},"36":{"position":[[321,5]]},"55":{"position":[[936,4]]},"61":{"position":[[345,4]]},"62":{"position":[[513,5]]},"121":{"position":[[1705,4]]},"183":{"position":[[622,4]]},"196":{"position":[[257,7],[784,4]]},"207":{"position":[[223,4]]},"217":{"position":[[1680,4]]},"233":{"position":[[264,7],[969,4]]},"238":{"position":[[612,4]]},"239":{"position":[[1759,4]]},"240":{"position":[[228,4]]},"242":{"position":[[952,5]]},"267":{"position":[[990,4]]},"268":{"position":[[1209,4]]},"269":{"position":[[780,4]]},"270":{"position":[[1414,4]]},"307":{"position":[[3242,4]]},"309":{"position":[[3566,4]]},"313":{"position":[[3568,4]]},"315":{"position":[[2478,7]]},"322":{"position":[[1442,5]]},"325":{"position":[[130,4]]},"326":{"position":[[1506,4],[1764,7]]},"329":{"position":[[956,5]]},"480":{"position":[[1119,4],[1557,4]]},"489":{"position":[[307,4]]},"577":{"position":[[415,7]]},"588":{"position":[[410,7]]},"595":{"position":[[1571,4]]},"662":{"position":[[307,4]]},"677":{"position":[[307,4]]},"692":{"position":[[307,4]]},"1036":{"position":[[1,7]]},"1356":{"position":[[826,4]]},"1388":{"position":[[242,4]]},"1451":{"position":[[266,4]]},"1459":{"position":[[1620,4]]},"1461":{"position":[[81,7],[571,4]]},"1462":{"position":[[171,7]]},"1465":{"position":[[829,4]]}},"keywords":{}}],["kept",{"_index":55,"title":{},"content":{"1":{"position":[[784,5]]},"38":{"position":[[290,4]]},"115":{"position":[[495,4]]},"126":{"position":[[350,4]]},"129":{"position":[[1089,5]]},"322":{"position":[[1906,4]]},"323":{"position":[[859,4]]},"326":{"position":[[903,4]]}},"keywords":{}}],["key",{"_index":13,"title":{"71":{"position":[[0,5]]},"73":{"position":[[10,5]]},"74":{"position":[[0,3]]},"75":{"position":[[6,5]]},"246":{"position":[[0,3]]},"478":{"position":[[16,4]]},"571":{"position":[[47,4]]},"582":{"position":[[47,4]]},"599":{"position":[[16,4]]},"609":{"position":[[47,4]]},"805":{"position":[[17,4]]},"820":{"position":[[17,4]]},"836":{"position":[[17,4]]},"1047":{"position":[[27,5]]},"1055":{"position":[[27,5]]},"1063":{"position":[[27,5]]},"1384":{"position":[[0,3]]}},"content":{"1":{"position":[[175,4]]},"2":{"position":[[288,4],[345,4],[476,3],[584,3]]},"11":{"position":[[855,4]]},"13":{"position":[[1559,3]]},"14":{"position":[[34,3],[552,4],[700,4],[883,4],[1207,4]]},"16":{"position":[[194,4]]},"34":{"position":[[772,5]]},"42":{"position":[[41,4],[50,3],[205,3],[233,3],[284,3],[409,3],[519,4]]},"56":{"position":[[708,4]]},"66":{"position":[[91,3],[591,4]]},"67":{"position":[[1436,4]]},"68":{"position":[[597,4],[620,3]]},"69":{"position":[[479,3],[641,4],[680,3],[739,4]]},"70":{"position":[[761,4]]},"71":{"position":[[38,3],[80,4],[233,4],[512,3],[650,3]]},"72":{"position":[[1,5],[146,5],[304,5],[455,5],[749,4]]},"73":{"position":[[78,4],[195,4],[220,4]]},"74":{"position":[[14,3],[411,4],[684,3],[798,4],[893,3],[973,3]]},"75":{"position":[[92,3],[191,3],[301,4],[354,4],[431,4]]},"76":{"position":[[421,4],[500,4]]},"82":{"position":[[573,3],[642,3],[1499,3],[1850,3],[2536,3],[3119,3],[3295,3],[4174,3],[4677,3],[5040,4]]},"83":{"position":[[1277,3],[1498,3],[2353,3]]},"94":{"position":[[180,4],[185,6],[681,3],[2758,3],[2879,3],[2913,3],[2979,4]]},"105":{"position":[[260,5]]},"107":{"position":[[92,4],[1196,4],[1228,4],[1242,4],[1385,3],[1492,4],[1742,4],[1824,3],[1905,4],[2158,4],[3258,4],[3719,4],[3782,3],[3837,3]]},"109":{"position":[[607,4],[637,4]]},"115":{"position":[[484,3],[541,3]]},"120":{"position":[[2128,3]]},"121":{"position":[[199,4],[824,4],[920,4]]},"122":{"position":[[868,3]]},"123":{"position":[[238,4]]},"124":{"position":[[619,4]]},"125":{"position":[[544,5],[833,4],[992,3],[1104,4]]},"128":{"position":[[274,3],[369,3]]},"129":{"position":[[173,4],[676,4],[1044,5]]},"132":{"position":[[240,3]]},"149":{"position":[[1305,3],[1324,3]]},"150":{"position":[[23,3]]},"160":{"position":[[313,3],[491,4],[638,4],[831,4]]},"161":{"position":[[648,4],[732,4],[825,4]]},"162":{"position":[[814,3],[2296,4]]},"163":{"position":[[23,5],[100,4],[224,3],[338,4]]},"164":{"position":[[407,4],[871,5],[962,5],[1117,4],[1345,3],[1520,5]]},"165":{"position":[[985,4]]},"166":{"position":[[480,4]]},"183":{"position":[[1256,4],[1553,4],[1612,3],[1727,3],[1960,4],[2112,5],[2497,4],[2746,4],[3766,4],[3942,4]]},"190":{"position":[[858,3],[887,4],[1073,5]]},"197":{"position":[[1120,3],[1377,5],[1394,3],[1507,4]]},"207":{"position":[[886,4],[1406,3]]},"208":{"position":[[1318,3]]},"211":{"position":[[246,3]]},"215":{"position":[[73,3]]},"217":{"position":[[1846,4]]},"221":{"position":[[1067,4],[1121,3],[1318,3]]},"222":{"position":[[179,3],[312,4],[366,3],[563,3],[671,3],[813,3],[834,3]]},"223":{"position":[[145,3],[278,4],[332,3],[529,3],[687,3],[881,3]]},"224":{"position":[[198,3],[331,4],[385,3],[582,3],[892,3],[917,3]]},"225":{"position":[[412,3],[462,3]]},"236":{"position":[[2224,4],[3009,4],[3389,4]]},"237":{"position":[[1236,3]]},"239":{"position":[[2209,4]]},"254":{"position":[[528,4],[2140,3],[2163,4],[2226,3],[2268,4],[2394,3]]},"268":{"position":[[888,4],[1114,4],[1204,4]]},"269":{"position":[[513,4],[685,4],[775,4]]},"270":{"position":[[1363,4]]},"277":{"position":[[302,5],[350,3],[612,4]]},"278":{"position":[[941,4],[1070,3],[1167,4]]},"279":{"position":[[1204,4],[1296,3],[1517,4],[1630,4]]},"280":{"position":[[1454,4],[1555,3],[1719,4],[2023,4]]},"281":{"position":[[139,5],[926,4]]},"288":{"position":[[564,3]]},"290":{"position":[[1068,3]]},"295":{"position":[[694,3]]},"296":{"position":[[592,4],[657,4],[826,4],[927,4],[1563,4],[1628,4],[2144,4],[2264,3],[2356,4],[2827,4],[2928,4],[3404,4],[3499,4],[3581,3],[3662,4]]},"299":{"position":[[407,3],[429,3]]},"301":{"position":[[705,3],[734,4],[983,5]]},"306":{"position":[[145,3]]},"307":{"position":[[15,3],[85,3],[1298,4],[1754,4],[2166,4]]},"309":{"position":[[2132,4],[2729,4]]},"314":{"position":[[350,4],[1670,3],[1693,4],[1767,3],[1809,4],[1935,3],[2103,3]]},"319":{"position":[[403,3],[1428,3],[1498,3]]},"326":{"position":[[583,4],[727,4]]},"359":{"position":[[53,3],[142,3],[150,3]]},"367":{"position":[[651,4]]},"370":{"position":[[1921,3],[1933,3]]},"371":{"position":[[417,3],[1272,3]]},"375":{"position":[[334,3],[352,4]]},"377":{"position":[[1165,3],[1188,3],[1246,3],[1273,4]]},"390":{"position":[[576,3],[598,3]]},"392":{"position":[[87,3],[205,3],[256,3]]},"393":{"position":[[210,3]]},"395":{"position":[[755,3],[777,3]]},"397":{"position":[[83,3],[101,3],[194,3],[216,3]]},"398":{"position":[[211,3]]},"406":{"position":[[111,3]]},"408":{"position":[[208,3],[226,3],[315,3],[330,3]]},"415":{"position":[[68,3],[90,3],[300,3],[322,4]]},"417":{"position":[[186,4],[415,3],[514,4],[731,3],[925,3],[1148,4],[1182,4]]},"422":{"position":[[34,3],[49,3]]},"424":{"position":[[73,3],[91,4],[131,3],[152,4]]},"432":{"position":[[961,3],[1059,3]]},"436":{"position":[[1026,4]]},"438":{"position":[[186,4],[415,3],[514,4],[1664,4],[1698,4]]},"452":{"position":[[109,3],[160,3]]},"454":{"position":[[271,3],[293,4],[333,3],[354,4]]},"458":{"position":[[73,3]]},"460":{"position":[[78,3],[96,4]]},"464":{"position":[[80,3],[109,3]]},"466":{"position":[[84,3],[98,4]]},"475":{"position":[[258,3]]},"478":{"position":[[17,4],[209,3],[300,3],[376,3],[478,4],[505,3],[591,3]]},"479":{"position":[[371,3]]},"482":{"position":[[325,3]]},"492":{"position":[[551,3]]},"494":{"position":[[8,3],[88,3]]},"496":{"position":[[79,3],[99,4],[108,3]]},"502":{"position":[[186,4],[220,4],[646,4],[875,3],[974,4]]},"507":{"position":[[83,3]]},"509":{"position":[[73,3],[91,4]]},"543":{"position":[[337,4]]},"545":{"position":[[186,4],[415,3],[514,4],[687,3],[757,4],[791,4],[846,3]]},"546":{"position":[[335,3],[375,3]]},"548":{"position":[[238,5],[1301,3]]},"569":{"position":[[158,4],[269,3]]},"571":{"position":[[227,3],[713,3]]},"573":{"position":[[65,3],[534,3]]},"581":{"position":[[482,4]]},"582":{"position":[[92,3],[213,4],[326,3]]},"584":{"position":[[465,3]]},"591":{"position":[[251,3]]},"594":{"position":[[323,3],[363,3]]},"597":{"position":[[221,3]]},"599":{"position":[[17,4],[209,3],[300,3],[376,3],[478,4],[505,3],[591,3]]},"607":{"position":[[156,4],[268,3]]},"609":{"position":[[53,3],[270,3]]},"611":{"position":[[439,3],[452,3]]},"614":{"position":[[141,4],[252,3]]},"617":{"position":[[179,3],[524,4],[637,3]]},"619":{"position":[[65,3],[439,3]]},"623":{"position":[[72,3]]},"625":{"position":[[72,3],[108,3]]},"629":{"position":[[84,4]]},"637":{"position":[[483,4],[495,3]]},"640":{"position":[[273,5]]},"660":{"position":[[469,3]]},"661":{"position":[[191,3],[314,4],[332,3],[483,3]]},"665":{"position":[[551,3]]},"690":{"position":[[48,3]]},"695":{"position":[[551,3]]},"698":{"position":[[83,3]]},"700":{"position":[[72,3],[106,3]]},"704":{"position":[[77,4]]},"706":{"position":[[73,3],[106,3]]},"731":{"position":[[112,4],[211,3]]},"733":{"position":[[37,3]]},"735":{"position":[[53,3],[324,3],[347,3]]},"752":{"position":[[299,4]]},"753":{"position":[[955,4]]},"767":{"position":[[1935,4]]},"779":{"position":[[221,3]]},"791":{"position":[[252,4]]},"792":{"position":[[1875,4]]},"793":{"position":[[926,4]]},"805":{"position":[[38,3],[155,3],[206,3],[296,4]]},"808":{"position":[[872,4]]},"820":{"position":[[38,3],[155,3],[206,3],[296,4]]},"824":{"position":[[1997,4]]},"836":{"position":[[38,3],[155,3],[206,3],[296,4]]},"840":{"position":[[472,3],[785,3]]},"842":{"position":[[664,3],[677,3],[877,3],[894,3],[3316,3],[3476,3]]},"845":{"position":[[48,3]]},"849":{"position":[[943,3],[1260,3],[1373,3]]},"851":{"position":[[277,3],[290,3],[460,3],[477,3]]},"864":{"position":[[890,4]]},"868":{"position":[[385,3]]},"880":{"position":[[386,3]]},"885":{"position":[[381,3]]},"889":{"position":[[66,3]]},"891":{"position":[[90,3],[109,4]]},"895":{"position":[[539,4]]},"904":{"position":[[1751,4]]},"911":{"position":[[528,3]]},"917":{"position":[[1260,4]]},"918":{"position":[[2043,4]]},"919":{"position":[[2098,4]]},"927":{"position":[[528,3]]},"931":{"position":[[1413,4]]},"938":{"position":[[528,3]]},"954":{"position":[[528,3]]},"965":{"position":[[1260,4]]},"972":{"position":[[528,3]]},"980":{"position":[[14,3]]},"982":{"position":[[81,3],[115,3]]},"989":{"position":[[1121,3]]},"991":{"position":[[363,4]]},"1004":{"position":[[1204,3]]},"1009":{"position":[[426,4]]},"1020":{"position":[[723,4],[1166,4],[1377,4],[1979,4]]},"1021":{"position":[[605,3],[613,3],[1208,4]]},"1040":{"position":[[123,3],[198,4],[231,3]]},"1042":{"position":[[731,4]]},"1043":{"position":[[1395,4]]},"1045":{"position":[[1204,3],[1266,3]]},"1047":{"position":[[35,4],[89,3],[158,3],[253,4],[604,3],[684,4],[781,3],[965,5]]},"1050":{"position":[[123,3],[198,4],[231,3]]},"1051":{"position":[[1657,4]]},"1053":{"position":[[1204,3],[1266,3]]},"1055":{"position":[[35,4],[89,3],[158,3],[253,4],[604,3],[684,4],[781,3],[965,5]]},"1058":{"position":[[123,3],[198,4],[231,3]]},"1059":{"position":[[1450,4]]},"1061":{"position":[[1204,3],[1266,3]]},"1063":{"position":[[35,4],[89,3],[158,3],[253,4],[604,3],[684,4],[781,3],[965,5]]},"1074":{"position":[[42,3]]},"1076":{"position":[[228,3],[243,3]]},"1089":{"position":[[232,3],[281,3]]},"1091":{"position":[[45,3]]},"1094":{"position":[[83,3],[96,3]]},"1101":{"position":[[134,3]]},"1105":{"position":[[144,3]]},"1122":{"position":[[381,3],[403,3]]},"1123":{"position":[[56,5],[127,4],[158,3],[171,4],[657,5],[716,5]]},"1125":{"position":[[83,3],[101,3],[189,3],[211,3]]},"1126":{"position":[[172,3]]},"1138":{"position":[[1211,3],[1223,3]]},"1139":{"position":[[304,3],[1159,3]]},"1140":{"position":[[1565,3]]},"1142":{"position":[[245,3],[267,4]]},"1144":{"position":[[156,3],[170,3],[263,3],[281,3]]},"1149":{"position":[[693,3],[715,4]]},"1151":{"position":[[745,3],[763,3],[875,3],[897,3]]},"1160":{"position":[[408,3],[430,4]]},"1162":{"position":[[90,3],[104,3],[196,3],[214,3]]},"1168":{"position":[[245,3],[267,4]]},"1170":{"position":[[156,3],[170,3],[263,3],[281,3]]},"1176":{"position":[[166,3]]},"1177":{"position":[[380,4],[400,3],[426,4],[435,3]]},"1182":{"position":[[306,5]]},"1183":{"position":[[86,5]]},"1191":{"position":[[308,5]]},"1195":{"position":[[339,4]]},"1196":{"position":[[493,3],[501,3],[578,3]]},"1200":{"position":[[122,4],[193,4],[427,3]]},"1204":{"position":[[248,4],[289,3],[314,3],[573,3],[598,3]]},"1206":{"position":[[76,3],[94,3],[230,3],[245,3]]},"1211":{"position":[[230,3]]},"1218":{"position":[[230,3]]},"1228":{"position":[[278,3],[396,4]]},"1230":{"position":[[369,3]]},"1234":{"position":[[62,5],[102,3],[239,3]]},"1243":{"position":[[437,5],[542,5],[638,5],[1207,4]]},"1245":{"position":[[121,3],[476,4],[589,3]]},"1247":{"position":[[540,3]]},"1250":{"position":[[221,3]]},"1258":{"position":[[287,3],[309,4]]},"1260":{"position":[[544,3],[562,3],[674,3],[696,3]]},"1262":{"position":[[308,5]]},"1272":{"position":[[215,4],[247,3]]},"1274":{"position":[[69,3],[122,3]]},"1277":{"position":[[364,3],[381,3],[451,3],[466,3]]},"1279":{"position":[[161,4],[467,4]]},"1285":{"position":[[1253,3],[1273,3]]},"1286":{"position":[[2425,3]]},"1292":{"position":[[1355,3],[1424,4]]},"1298":{"position":[[145,3],[278,4],[332,3],[529,3],[687,3],[881,3]]},"1300":{"position":[[1253,3],[1273,3]]},"1301":{"position":[[2261,3]]},"1306":{"position":[[1355,3],[1424,4]]},"1316":{"position":[[1565,3]]},"1322":{"position":[[179,3],[312,4],[366,3],[563,3],[671,3],[813,3],[834,3]]},"1324":{"position":[[1253,3],[1273,3]]},"1325":{"position":[[2425,3]]},"1329":{"position":[[1355,3],[1424,4]]},"1335":{"position":[[179,3],[312,4],[366,3],[563,3],[671,3],[813,3],[834,3]]},"1340":{"position":[[1565,3]]},"1346":{"position":[[145,3],[278,4],[332,3],[529,3],[687,3],[881,3]]},"1351":{"position":[[1565,3]]},"1354":{"position":[[52,3],[74,3]]},"1356":{"position":[[81,3],[89,3],[1045,3]]},"1358":{"position":[[289,3]]},"1370":{"position":[[420,3]]},"1379":{"position":[[850,3]]},"1384":{"position":[[95,3],[179,3],[221,3],[267,3],[371,3],[445,3],[508,3],[543,3],[577,3],[716,3],[1128,3],[1189,3]]},"1386":{"position":[[1035,3]]},"1387":{"position":[[564,3],[866,3],[922,3]]},"1389":{"position":[[307,5]]},"1391":{"position":[[65,3],[355,3],[547,3],[824,4],[906,3]]},"1392":{"position":[[241,4],[275,3],[326,3]]},"1403":{"position":[[850,3]]},"1414":{"position":[[850,3]]},"1420":{"position":[[374,3],[435,3]]},"1431":{"position":[[1588,3]]},"1434":{"position":[[1202,4]]},"1443":{"position":[[94,3],[263,4]]},"1444":{"position":[[79,5]]},"1459":{"position":[[51,3],[254,3],[960,3]]},"1461":{"position":[[5049,4],[5701,4]]},"1463":{"position":[[354,4],[477,5],[483,4],[488,6],[630,4],[701,4],[832,4]]},"1464":{"position":[[210,4],[383,5],[389,4],[394,6],[512,4],[554,4],[675,4]]},"1465":{"position":[[505,4],[561,5],[1076,4],[1081,6],[1209,4],[1259,4],[1374,4],[1475,4],[1527,4],[1641,4]]},"1466":{"position":[[169,4],[362,5],[368,4],[373,6],[490,4],[527,4],[623,4]]},"1467":{"position":[[512,4],[891,5],[897,4],[902,6],[1027,4],[1069,4],[1172,4],[1328,4],[1402,4],[1534,4],[1644,4],[1764,3],[1856,4],[1912,4],[1991,3],[2118,3],[2183,4],[2248,4],[2316,5],[2322,4],[2327,6],[2435,3],[2454,4],[2546,4],[2681,3],[2700,4]]},"1474":{"position":[[759,3]]},"1475":{"position":[[1981,4]]},"1476":{"position":[[220,4],[332,5],[338,4],[343,6],[463,4],[521,4],[639,4],[731,4],[814,4],[920,4],[970,3],[1221,3],[1286,4],[1438,4],[1513,4],[1533,5],[1539,4],[1544,6],[1601,3],[1671,3],[1690,4],[1767,4],[1844,4],[1921,4],[2043,3],[2073,4],[2150,4]]},"1477":{"position":[[880,4],[990,4],[1206,4],[1548,5],[1554,4],[1559,6],[1721,4],[1834,4],[1914,4],[2065,4],[2234,4],[2335,4],[2486,4],[2661,3],[2676,4],[2814,4],[2876,3],[3212,4],[3320,4],[3445,5],[3727,5],[3868,5],[3874,4],[3879,6],[4067,4],[4184,4],[4264,4],[4423,4],[4602,4],[4705,4],[4864,4]]}},"keywords":{}}],["key"",{"_index":3515,"title":{},"content":{"392":{"position":[[378,9]]},"393":{"position":[[275,9]]},"398":{"position":[[276,9]]},"1092":{"position":[[275,9]]},"1126":{"position":[[237,9]]}},"keywords":{}}],["key'",{"_index":1722,"title":{},"content":{"129":{"position":[[196,5]]}},"keywords":{}}],["key.obtain",{"_index":5349,"title":{},"content":{"1091":{"position":[[25,10]]}},"keywords":{}}],["key/valu",{"_index":688,"title":{},"content":{"37":{"position":[[190,9]]},"124":{"position":[[146,9]]},"1438":{"position":[[215,9]]}},"keywords":{}}],["key=valu",{"_index":3543,"title":{},"content":{"402":{"position":[[600,11]]}},"keywords":{}}],["key\\n",{"_index":4068,"title":{},"content":{"546":{"position":[[353,5]]},"594":{"position":[[341,5]]}},"keywords":{}}],["key_block_siz",{"_index":6019,"title":{},"content":{"1292":{"position":[[1467,13]]},"1306":{"position":[[1467,13]]},"1329":{"position":[[1467,13]]}},"keywords":{}}],["keyaw",{"_index":3556,"title":{},"content":{"405":{"position":[[16,6],[34,6]]}},"keywords":{}}],["keybegin",{"_index":6678,"title":{},"content":{"1474":{"position":[[156,9],[805,9]]}},"keywords":{}}],["keyboardinterrupt",{"_index":2673,"title":{},"content":{"250":{"position":[[1062,18]]}},"keywords":{}}],["keyconsum",{"_index":4741,"title":{},"content":{"840":{"position":[[2535,11]]},"849":{"position":[[3675,11]]}},"keywords":{}}],["keydur",{"_index":4151,"title":{},"content":{"571":{"position":[[602,9]]}},"keywords":{}}],["keyenvironmentmerch",{"_index":3756,"title":{},"content":{"452":{"position":[[76,22]]}},"keywords":{}}],["keygen",{"_index":2451,"title":{},"content":{"221":{"position":[[1232,6],[1361,6]]},"222":{"position":[[477,6],[606,6]]},"223":{"position":[[443,6],[572,6],[749,6]]},"224":{"position":[[496,6],[625,6]]},"1298":{"position":[[443,6],[572,6],[749,6]]},"1322":{"position":[[477,6],[606,6]]},"1335":{"position":[[477,6],[606,6]]},"1346":{"position":[[443,6],[572,6],[749,6]]}},"keywords":{}}],["keyof",{"_index":5901,"title":{},"content":{"1234":{"position":[[154,5]]}},"keywords":{}}],["keyproject",{"_index":3037,"title":{},"content":{"305":{"position":[[412,15]]}},"keywords":{}}],["keyr",{"_index":6017,"title":{},"content":{"1292":{"position":[[1392,7]]},"1306":{"position":[[1392,7]]},"1329":{"position":[[1392,7]]}},"keywords":{}}],["keyrefresh",{"_index":4946,"title":{},"content":{"894":{"position":[[113,10]]}},"keywords":{}}],["keys<br/>hav",{"_index":6456,"title":{},"content":{"1434":{"position":[[1660,19]]}},"keywords":{}}],["keys<br/>that",{"_index":6455,"title":{},"content":{"1434":{"position":[[1560,19]]}},"keywords":{}}],["keyscreat",{"_index":3558,"title":{},"content":{"406":{"position":[[72,10]]}},"keywords":{}}],["keysreduc",{"_index":1655,"title":{},"content":{"121":{"position":[[698,11]]}},"keywords":{}}],["keysurl",{"_index":3779,"title":{},"content":{"464":{"position":[[209,7]]}},"keywords":{}}],["keyto",{"_index":1489,"title":{},"content":{"105":{"position":[[192,5]]}},"keywords":{}}],["keyword",{"_index":253,"title":{"1200":{"position":[[0,7]]}},"content":{"7":{"position":[[646,7]]},"90":{"position":[[261,8],[392,7]]},"159":{"position":[[74,8],[368,9],[499,8]]},"161":{"position":[[24,7],[436,8]]},"1200":{"position":[[47,7],[256,7],[383,7],[744,7]]},"1465":{"position":[[185,8]]}},"keywords":{}}],["keywordssponsor",{"_index":3466,"title":{},"content":{"381":{"position":[[123,17],[436,17],[471,17]]}},"keywords":{}}],["keyyou'l",{"_index":4303,"title":{},"content":{"609":{"position":[[224,9]]}},"keywords":{}}],["kick",{"_index":2261,"title":{},"content":{"209":{"position":[[45,4]]},"239":{"position":[[2959,4]]},"947":{"position":[[1330,4]]}},"keywords":{}}],["kill",{"_index":6020,"title":{},"content":{"1292":{"position":[[1512,4]]},"1306":{"position":[[1512,4]]},"1329":{"position":[[1512,4]]},"1379":{"position":[[892,4]]},"1403":{"position":[[892,4]]},"1414":{"position":[[892,4]]}},"keywords":{}}],["kind",{"_index":687,"title":{},"content":{"37":{"position":[[129,5]]},"82":{"position":[[51,5]]}},"keywords":{}}],["kinesi",{"_index":3180,"title":{"389":{"position":[[7,7]]}},"content":{"329":{"position":[[452,7]]},"363":{"position":[[402,7]]},"390":{"position":[[57,7],[421,8],[528,7]]},"391":{"position":[[257,7]]},"392":{"position":[[154,8],[320,8],[481,7],[595,7]]},"393":{"position":[[486,7]]}},"keywords":{}}],["kinesis:dev",{"_index":3288,"title":{},"content":{"363":{"position":[[456,11]]},"393":{"position":[[149,11]]}},"keywords":{}}],["kinesisdata",{"_index":3179,"title":{},"content":{"329":{"position":[[416,11]]}},"keywords":{}}],["kingdom",{"_index":1192,"title":{},"content":{"82":{"position":[[3361,7]]},"171":{"position":[[239,7]]}},"keywords":{}}],["kingdom"",{"_index":2394,"title":{},"content":{"210":{"position":[[3473,15]]}},"keywords":{}}],["klaviyo",{"_index":3357,"title":{"702":{"position":[[0,7]]}},"content":{"364":{"position":[[2270,7]]},"703":{"position":[[62,8]]},"704":{"position":[[15,7],[57,7]]},"705":{"position":[[250,7]]},"706":{"position":[[94,7],[372,7]]}},"keywords":{}}],["klaviyo.dev",{"_index":3358,"title":{},"content":{"364":{"position":[[2324,11]]}},"keywords":{}}],["klaviyo:dev",{"_index":4463,"title":{},"content":{"707":{"position":[[90,11]]}},"keywords":{}}],["km",{"_index":1149,"title":{},"content":{"82":{"position":[[595,5],[631,4],[848,4],[957,4],[1495,3],[1764,3],[3115,3],[3291,3],[4088,3]]}},"keywords":{}}],["knob",{"_index":3213,"title":{},"content":{"333":{"position":[[420,4]]}},"keywords":{}}],["know",{"_index":235,"title":{},"content":{"7":{"position":[[273,4]]},"81":{"position":[[236,5]]},"82":{"position":[[2819,5]]},"107":{"position":[[541,4],[3678,4]]},"160":{"position":[[89,5]]},"162":{"position":[[341,4],[613,7],[1855,4]]},"165":{"position":[[782,4]]},"174":{"position":[[478,4]]},"177":{"position":[[85,4]]},"207":{"position":[[1485,4]]},"212":{"position":[[51,4]]},"232":{"position":[[161,4]]},"243":{"position":[[51,4]]},"254":{"position":[[2371,4],[3092,4]]},"257":{"position":[[185,4]]},"278":{"position":[[345,4]]},"279":{"position":[[141,4]]},"281":{"position":[[554,4]]},"296":{"position":[[3345,4]]},"314":{"position":[[1912,4],[2667,4]]},"320":{"position":[[1446,4]]},"448":{"position":[[1149,4]]},"489":{"position":[[791,5]]},"490":{"position":[[159,5]]},"491":{"position":[[213,5]]},"590":{"position":[[1116,4]]},"662":{"position":[[791,5]]},"663":{"position":[[159,5]]},"664":{"position":[[234,5]]},"677":{"position":[[791,5]]},"678":{"position":[[159,5]]},"679":{"position":[[213,5]]},"692":{"position":[[791,5]]},"693":{"position":[[159,5]]},"694":{"position":[[213,5]]},"849":{"position":[[79,4]]},"869":{"position":[[504,5]]},"1382":{"position":[[345,4]]},"1425":{"position":[[86,4]]},"1439":{"position":[[1488,4]]},"1442":{"position":[[1363,4]]},"1444":{"position":[[853,5]]}},"keywords":{}}],["knowledg",{"_index":2617,"title":{},"content":{"241":{"position":[[354,9]]},"1473":{"position":[[256,9]]}},"keywords":{}}],["known",{"_index":1112,"title":{"872":{"position":[[0,5]]}},"content":{"80":{"position":[[528,5]]},"163":{"position":[[246,5],[843,5]]},"165":{"position":[[534,5]]},"250":{"position":[[1146,5]]},"571":{"position":[[904,5]]},"869":{"position":[[1736,5]]},"909":{"position":[[894,5]]},"925":{"position":[[894,5]]},"936":{"position":[[894,5]]},"952":{"position":[[894,5]]},"970":{"position":[[894,5]]},"991":{"position":[[343,5],[492,5]]},"1009":{"position":[[406,5],[555,5]]},"1194":{"position":[[64,5]]},"1232":{"position":[[82,5]]},"1384":{"position":[[125,5]]}},"keywords":{}}],["ksqldb",{"_index":3170,"title":{"325":{"position":[[22,7]]}},"content":{"325":{"position":[[59,6]]}},"keywords":{}}],["kubernet",{"_index":3209,"title":{},"content":{"333":{"position":[[61,10]]}},"keywords":{}}],["l",{"_index":882,"title":{},"content":{"58":{"position":[[360,1],[536,1]]},"105":{"position":[[1560,1],[1602,1]]},"169":{"position":[[601,1],[780,1]]}},"keywords":{}}],["l[lambda",{"_index":1501,"title":{},"content":{"105":{"position":[[1394,10]]}},"keywords":{}}],["label",{"_index":3122,"title":{},"content":{"320":{"position":[[887,5]]},"419":{"position":[[1888,6]]},"441":{"position":[[497,6]]},"504":{"position":[[1517,6]]},"529":{"position":[[355,6]]},"547":{"position":[[1890,6]]},"639":{"position":[[1515,6]]},"849":{"position":[[530,7],[667,7],[841,7]]},"1023":{"position":[[1871,6]]},"1455":{"position":[[214,7]]}},"keywords":{}}],["labelsepics(onli",{"_index":4009,"title":{},"content":{"521":{"position":[[185,16]]}},"keywords":{}}],["labelsorganizationspul",{"_index":4030,"title":{},"content":{"529":{"position":[[902,23]]}},"keywords":{}}],["labelsproject",{"_index":4008,"title":{},"content":{"521":{"position":[[171,13]]}},"keywords":{}}],["lag",{"_index":5226,"title":{},"content":{"1036":{"position":[[848,3]]},"1140":{"position":[[1620,3]]},"1292":{"position":[[1543,3]]},"1306":{"position":[[1543,3]]},"1316":{"position":[[1620,3]]},"1329":{"position":[[1543,3]]},"1340":{"position":[[1620,3]]},"1351":{"position":[[1620,3]]},"1431":{"position":[[1643,3]]}},"keywords":{}}],["lake",{"_index":668,"title":{},"content":{"34":{"position":[[190,5],[220,5],[347,5]]},"77":{"position":[[32,6],[365,5]]},"189":{"position":[[1230,4]]},"207":{"position":[[180,5]]},"239":{"position":[[783,5]]},"329":{"position":[[428,4]]}},"keywords":{}}],["lakea",{"_index":2426,"title":{},"content":{"216":{"position":[[276,5]]}},"keywords":{}}],["lambda",{"_index":956,"title":{"97":{"position":[[4,8]]},"108":{"position":[[0,8]]}},"content":{"64":{"position":[[106,7],[622,7],[650,6]]},"91":{"position":[[129,6]]},"94":{"position":[[2260,6],[2368,7],[2428,9],[2513,7],[2572,7]]},"96":{"position":[[200,7]]},"97":{"position":[[1,7],[188,6],[785,7],[872,8]]},"99":{"position":[[10,6]]},"100":{"position":[[987,6]]},"105":{"position":[[322,8]]},"107":{"position":[[1210,7],[1592,6],[1666,7],[2225,6],[2493,7],[2689,6],[2760,7],[2840,7],[3170,6],[3326,7],[3440,6],[3507,7],[3534,6],[4044,7],[4096,7]]},"108":{"position":[[1,7],[154,7],[251,7],[349,7]]},"112":{"position":[[196,7]]},"113":{"position":[[66,7],[302,7],[546,7],[709,7],[868,6]]},"114":{"position":[[152,7],[299,7]]},"115":{"position":[[131,7],[661,7],[779,7]]},"158":{"position":[[711,6]]},"183":{"position":[[1424,7],[2799,6],[3959,7]]},"254":{"position":[[670,7],[2727,7]]},"268":{"position":[[173,6],[1043,7],[1426,6]]},"271":{"position":[[299,6]]},"277":{"position":[[54,6],[729,7]]},"278":{"position":[[609,6],[1194,7]]},"279":{"position":[[1534,7],[1662,7]]},"280":{"position":[[1736,7],[2043,7]]},"319":{"position":[[636,8]]},"1475":{"position":[[1729,6],[1874,6]]}},"keywords":{}}],["lambdaand",{"_index":2834,"title":{},"content":{"277":{"position":[[1087,9]]}},"keywords":{}}],["land",{"_index":548,"title":{},"content":{"20":{"position":[[852,7]]},"137":{"position":[[36,4]]},"189":{"position":[[850,4]]},"295":{"position":[[1411,6]]}},"keywords":{}}],["landscap",{"_index":701,"title":{},"content":{"38":{"position":[[399,9]]}},"keywords":{}}],["languag",{"_index":1273,"title":{"95":{"position":[[10,10]]}},"content":{"84":{"position":[[989,8]]},"113":{"position":[[188,9]]},"164":{"position":[[309,10]]},"183":{"position":[[301,8]]},"267":{"position":[[459,8],[1174,8]]},"268":{"position":[[41,9]]},"269":{"position":[[48,9]]},"313":{"position":[[3612,8]]},"558":{"position":[[62,8]]},"1140":{"position":[[1669,8]]},"1292":{"position":[[1588,8]]},"1306":{"position":[[1588,8]]},"1316":{"position":[[1669,8]]},"1329":{"position":[[1588,8]]},"1340":{"position":[[1669,8]]},"1351":{"position":[[1669,8]]},"1379":{"position":[[940,8]]},"1403":{"position":[[940,8]]},"1414":{"position":[[940,8]]},"1431":{"position":[[1692,8]]}},"keywords":{}}],["larg",{"_index":540,"title":{"277":{"position":[[10,5]]}},"content":{"20":{"position":[[723,5]]},"21":{"position":[[201,5]]},"110":{"position":[[1396,5]]},"121":{"position":[[1999,5]]},"123":{"position":[[129,5],[345,5]]},"131":{"position":[[39,5]]},"138":{"position":[[2394,5]]},"142":{"position":[[2472,5]]},"180":{"position":[[589,6]]},"182":{"position":[[262,6]]},"183":{"position":[[2529,5]]},"217":{"position":[[1558,5]]},"270":{"position":[[34,7]]},"277":{"position":[[176,5],[444,5],[492,5],[517,5],[570,5],[870,5]]},"281":{"position":[[2955,5]]},"321":{"position":[[1043,5]]},"333":{"position":[[55,5]]},"368":{"position":[[400,5]]},"534":{"position":[[857,5],[942,5]]},"595":{"position":[[1140,5],[1496,5]]},"605":{"position":[[148,6]]},"755":{"position":[[400,5]]},"768":{"position":[[400,5]]},"795":{"position":[[398,5]]},"810":{"position":[[398,5]]},"826":{"position":[[398,5]]},"870":{"position":[[390,5]]},"905":{"position":[[403,5]]},"920":{"position":[[403,5]]},"932":{"position":[[403,5]]},"948":{"position":[[403,5]]},"966":{"position":[[403,5]]},"975":{"position":[[301,5]]},"985":{"position":[[383,5]]},"1000":{"position":[[561,5]]},"1004":{"position":[[174,5]]},"1123":{"position":[[476,5],[734,5]]},"1140":{"position":[[1720,5]]},"1182":{"position":[[239,5]]},"1191":{"position":[[241,5]]},"1262":{"position":[[241,5]]},"1316":{"position":[[1720,5]]},"1340":{"position":[[1720,5]]},"1351":{"position":[[1720,5]]},"1379":{"position":[[984,5]]},"1389":{"position":[[240,5]]},"1391":{"position":[[35,5]]},"1403":{"position":[[984,5]]},"1414":{"position":[[984,5]]},"1431":{"position":[[1743,5]]},"1459":{"position":[[443,7]]}},"keywords":{}}],["larger",{"_index":492,"title":{},"content":{"17":{"position":[[272,6]]},"70":{"position":[[600,6]]},"124":{"position":[[788,7]]},"161":{"position":[[226,6]]},"330":{"position":[[604,6]]},"379":{"position":[[209,6]]},"480":{"position":[[246,6]]},"922":{"position":[[3313,6]]},"1157":{"position":[[107,6]]},"1451":{"position":[[453,6]]}},"keywords":{}}],["largest",{"_index":2102,"title":{},"content":{"189":{"position":[[51,7]]},"377":{"position":[[684,7]]},"1476":{"position":[[77,7]]}},"keywords":{}}],["last",{"_index":1007,"title":{},"content":{"67":{"position":[[906,4],[1500,4],[2070,4]]},"110":{"position":[[1113,4]]},"138":{"position":[[2186,4],[2212,4],[2713,4]]},"141":{"position":[[2142,4],[2168,4],[2306,4]]},"142":{"position":[[2246,4],[2272,4],[2798,4]]},"146":{"position":[[418,4]]},"149":{"position":[[430,4]]},"152":{"position":[[442,4]]},"255":{"position":[[863,4]]},"277":{"position":[[171,4],[487,4]]},"279":{"position":[[198,4]]},"284":{"position":[[630,4]]},"316":{"position":[[1188,4]]},"417":{"position":[[248,4]]},"438":{"position":[[248,4]]},"502":{"position":[[708,4]]},"545":{"position":[[248,4]]},"578":{"position":[[239,4]]},"635":{"position":[[210,4]]},"912":{"position":[[1458,4]]},"1021":{"position":[[1274,4]]},"1140":{"position":[[1766,4]]},"1195":{"position":[[520,4]]},"1292":{"position":[[1626,4]]},"1306":{"position":[[1626,4]]},"1316":{"position":[[1766,4]]},"1329":{"position":[[1626,4]]},"1340":{"position":[[1766,4]]},"1351":{"position":[[1766,4]]},"1370":{"position":[[431,4]]},"1379":{"position":[[1032,4]]},"1403":{"position":[[1032,4]]},"1414":{"position":[[1032,4]]},"1431":{"position":[[1789,4]]},"1434":{"position":[[335,4],[845,4]]},"1438":{"position":[[618,4],[712,4],[747,4]]},"1442":{"position":[[182,4],[1375,4]]},"1448":{"position":[[1070,4]]},"1463":{"position":[[150,5]]},"1471":{"position":[[926,4]]}},"keywords":{}}],["last_nam",{"_index":3606,"title":{},"content":{"418":{"position":[[280,10]]},"439":{"position":[[537,10]]},"546":{"position":[[1017,10]]},"638":{"position":[[309,10]]},"1022":{"position":[[346,10]]}},"keywords":{}}],["last_valu",{"_index":5598,"title":{},"content":{"1140":{"position":[[1812,10]]},"1292":{"position":[[1657,10]]},"1306":{"position":[[1657,10]]},"1316":{"position":[[1812,10]]},"1329":{"position":[[1657,10]]},"1340":{"position":[[1812,10]]},"1351":{"position":[[1812,10]]},"1431":{"position":[[1835,10]]}},"keywords":{}}],["lastcursorvalu",{"_index":3837,"title":{},"content":{"480":{"position":[[1051,16]]}},"keywords":{}}],["lastmodifi",{"_index":1184,"title":{},"content":{"82":{"position":[[2676,13],[4814,13]]}},"keywords":{}}],["lastmodifiedd",{"_index":4804,"title":{},"content":{"843":{"position":[[794,16]]}},"keywords":{}}],["lastwritewin",{"_index":1017,"title":{"1463":{"position":[[19,13]]}},"content":{"67":{"position":[[1978,13]]},"164":{"position":[[1741,13],[2051,13]]},"379":{"position":[[1267,13]]},"1358":{"position":[[896,13]]},"1440":{"position":[[1449,13]]},"1463":{"position":[[19,13],[119,13],[221,13],[449,13]]},"1465":{"position":[[755,13]]},"1477":{"position":[[1522,13],[3688,13]]}},"keywords":{}}],["latenc",{"_index":536,"title":{"578":{"position":[[11,8]]}},"content":{"20":{"position":[[487,8]]},"121":{"position":[[566,7]]},"163":{"position":[[1199,8]]},"180":{"position":[[215,8]]},"198":{"position":[[282,8],[636,7],[718,7]]},"209":{"position":[[803,8]]},"233":{"position":[[584,8]]},"329":{"position":[[378,7]]},"330":{"position":[[84,8]]},"373":{"position":[[904,7]]},"821":{"position":[[264,7]]},"912":{"position":[[275,7]]},"1036":{"position":[[438,7],[626,9]]},"1182":{"position":[[217,7]]},"1191":{"position":[[219,7]]},"1262":{"position":[[219,7]]},"1389":{"position":[[218,7]]}},"keywords":{}}],["latent",{"_index":4212,"title":{},"content":{"578":{"position":[[335,6]]}},"keywords":{}}],["later",{"_index":68,"title":{},"content":{"2":{"position":[[91,5]]},"19":{"position":[[70,5]]},"68":{"position":[[1342,5]]},"88":{"position":[[682,5]]},"115":{"position":[[306,6]]},"162":{"position":[[1928,5]]},"169":{"position":[[355,6]]},"198":{"position":[[415,5]]},"217":{"position":[[1999,6]]},"224":{"position":[[989,6]]},"230":{"position":[[1103,6]]},"290":{"position":[[1469,6]]},"301":{"position":[[1565,6]]},"761":{"position":[[440,5]]},"762":{"position":[[559,5]]},"774":{"position":[[440,5]]},"775":{"position":[[559,5]]},"801":{"position":[[446,5]]},"802":{"position":[[559,5]]},"816":{"position":[[446,5]]},"817":{"position":[[559,5]]},"832":{"position":[[446,5]]},"833":{"position":[[559,5]]},"902":{"position":[[54,5]]},"914":{"position":[[54,5]]},"917":{"position":[[432,6]]},"919":{"position":[[966,6]]},"922":{"position":[[750,5]]},"929":{"position":[[54,6]]},"944":{"position":[[441,5]]},"965":{"position":[[432,6]]},"1077":{"position":[[200,5]]},"1140":{"position":[[1862,7]]},"1192":{"position":[[522,7]]},"1281":{"position":[[125,5]]},"1292":{"position":[[1697,7]]},"1295":{"position":[[125,5]]},"1306":{"position":[[1697,7]]},"1316":{"position":[[1862,7]]},"1319":{"position":[[125,5]]},"1329":{"position":[[1697,7]]},"1340":{"position":[[1862,7]]},"1351":{"position":[[1862,7]]},"1372":{"position":[[125,5]]},"1379":{"position":[[1077,7]]},"1394":{"position":[[788,7]]},"1396":{"position":[[125,5]]},"1403":{"position":[[1077,7]]},"1406":{"position":[[125,5]]},"1414":{"position":[[1077,7]]},"1431":{"position":[[1885,7]]},"1435":{"position":[[540,6]]},"1462":{"position":[[436,5]]}},"keywords":{}}],["latest",{"_index":2608,"title":{},"content":{"240":{"position":[[3307,6],[3442,6]]},"322":{"position":[[1481,6]]},"517":{"position":[[1670,6],[2831,6]]},"760":{"position":[[456,6]]},"773":{"position":[[456,6]]},"800":{"position":[[456,6]]},"815":{"position":[[456,6]]},"831":{"position":[[456,6]]},"869":{"position":[[481,6]]},"897":{"position":[[169,6]]},"922":{"position":[[528,6]]},"1197":{"position":[[71,6]]},"1201":{"position":[[274,6]]},"1207":{"position":[[296,6]]},"1293":{"position":[[274,6]]},"1307":{"position":[[274,6]]},"1317":{"position":[[274,6]]},"1330":{"position":[[274,6]]},"1341":{"position":[[274,6]]},"1352":{"position":[[274,6]]},"1357":{"position":[[146,6]]},"1359":{"position":[[274,6]]},"1380":{"position":[[274,6]]},"1404":{"position":[[274,6]]},"1415":{"position":[[274,6]]},"1432":{"position":[[274,6]]},"1448":{"position":[[633,6]]},"1451":{"position":[[347,6],[549,6],[1000,6]]}},"keywords":{}}],["latitud",{"_index":3205,"title":{},"content":{"332":{"position":[[471,8]]}},"keywords":{}}],["latter",{"_index":4243,"title":{},"content":{"590":{"position":[[984,6]]}},"keywords":{}}],["launch",{"_index":2464,"title":{},"content":{"222":{"position":[[685,6]]},"1322":{"position":[[685,6]]},"1335":{"position":[[685,6]]}},"keywords":{}}],["layer",{"_index":1774,"title":{},"content":{"138":{"position":[[849,6]]},"142":{"position":[[820,6]]}},"keywords":{}}],["layout",{"_index":149,"title":{"4":{"position":[[5,8]]}},"content":{"3":{"position":[[1164,8]]},"4":{"position":[[217,6]]},"77":{"position":[[105,6]]},"322":{"position":[[1727,6]]},"1461":{"position":[[2054,6]]}},"keywords":{}}],["lead",{"_index":4541,"title":{},"content":{"738":{"position":[[140,4],[233,4],[587,6]]},"742":{"position":[[265,5]]},"869":{"position":[[1483,5]]},"1140":{"position":[[1912,4],[1946,7]]},"1146":{"position":[[88,7]]},"1173":{"position":[[88,7]]},"1209":{"position":[[658,7]]},"1215":{"position":[[88,7]]},"1223":{"position":[[88,7]]},"1292":{"position":[[1734,4],[1769,7]]},"1306":{"position":[[1734,4],[1769,7]]},"1316":{"position":[[1912,4],[1946,7]]},"1329":{"position":[[1734,4],[1769,7]]},"1340":{"position":[[1912,4],[1946,7]]},"1351":{"position":[[1912,4],[1946,7]]},"1379":{"position":[[1124,7]]},"1403":{"position":[[1124,7]]},"1414":{"position":[[1124,7]]},"1431":{"position":[[1935,4],[1969,7]]}},"keywords":{}}],["learn",{"_index":284,"title":{},"content":{"9":{"position":[[1,5]]},"16":{"position":[[1358,5]]},"31":{"position":[[321,5]]},"33":{"position":[[438,5]]},"34":{"position":[[888,5]]},"35":{"position":[[342,5]]},"36":{"position":[[473,5]]},"38":{"position":[[677,5]]},"40":{"position":[[382,5]]},"41":{"position":[[695,5]]},"42":{"position":[[731,5]]},"43":{"position":[[431,5]]},"46":{"position":[[181,5]]},"48":{"position":[[336,5]]},"49":{"position":[[548,5]]},"50":{"position":[[307,5]]},"60":{"position":[[348,5],[851,5]]},"69":{"position":[[982,5]]},"70":{"position":[[774,5]]},"76":{"position":[[988,5]]},"77":{"position":[[594,5]]},"85":{"position":[[1,5]]},"115":{"position":[[1566,5]]},"123":{"position":[[815,5]]},"130":{"position":[[395,5]]},"154":{"position":[[1095,5],[1706,5]]},"157":{"position":[[111,5]]},"160":{"position":[[902,5]]},"164":{"position":[[782,5]]},"169":{"position":[[1748,5]]},"176":{"position":[[158,8],[227,5]]},"177":{"position":[[43,8],[240,5]]},"182":{"position":[[488,5]]},"183":{"position":[[2708,5]]},"192":{"position":[[818,5]]},"193":{"position":[[438,5]]},"203":{"position":[[414,5]]},"211":{"position":[[126,7],[780,7]]},"212":{"position":[[211,5]]},"213":{"position":[[468,8]]},"230":{"position":[[887,5]]},"232":{"position":[[130,7],[487,5]]},"236":{"position":[[144,5]]},"241":{"position":[[142,7]]},"243":{"position":[[205,5]]},"252":{"position":[[91,5]]},"254":{"position":[[2000,5]]},"256":{"position":[[19,7]]},"257":{"position":[[102,5]]},"285":{"position":[[472,5]]},"294":{"position":[[98,5]]},"297":{"position":[[19,7]]},"312":{"position":[[98,5]]},"317":{"position":[[19,7]]},"345":{"position":[[185,5]]},"350":{"position":[[127,5]]},"358":{"position":[[127,5]]},"369":{"position":[[127,5]]},"371":{"position":[[1534,5]]},"373":{"position":[[1023,5]]},"376":{"position":[[127,5]]},"386":{"position":[[127,5]]},"391":{"position":[[127,5]]},"393":{"position":[[503,5]]},"396":{"position":[[127,5]]},"398":{"position":[[494,5]]},"407":{"position":[[127,5]]},"416":{"position":[[127,5]]},"418":{"position":[[586,5]]},"423":{"position":[[127,5]]},"431":{"position":[[127,5]]},"433":{"position":[[926,5]]},"437":{"position":[[127,5]]},"447":{"position":[[127,5]]},"453":{"position":[[127,5]]},"459":{"position":[[127,5]]},"465":{"position":[[127,5]]},"472":{"position":[[127,5]]},"481":{"position":[[127,5]]},"495":{"position":[[127,5]]},"497":{"position":[[412,5]]},"501":{"position":[[83,5]]},"508":{"position":[[127,5]]},"516":{"position":[[127,5]]},"518":{"position":[[1674,5]]},"525":{"position":[[127,5]]},"533":{"position":[[127,5]]},"539":{"position":[[127,5]]},"544":{"position":[[127,5]]},"546":{"position":[[1294,5]]},"555":{"position":[[124,5]]},"572":{"position":[[127,5]]},"575":{"position":[[1270,5]]},"583":{"position":[[117,5]]},"584":{"position":[[630,5]]},"592":{"position":[[124,5]]},"600":{"position":[[126,5]]},"610":{"position":[[127,5]]},"618":{"position":[[127,5]]},"620":{"position":[[340,5]]},"624":{"position":[[127,5]]},"630":{"position":[[127,5]]},"636":{"position":[[127,5]]},"646":{"position":[[127,5]]},"653":{"position":[[127,5]]},"655":{"position":[[405,5]]},"669":{"position":[[127,5]]},"684":{"position":[[127,5]]},"699":{"position":[[127,5]]},"705":{"position":[[127,5]]},"711":{"position":[[127,5]]},"719":{"position":[[122,5]]},"727":{"position":[[127,5]]},"734":{"position":[[127,5]]},"736":{"position":[[445,5]]},"740":{"position":[[127,5]]},"746":{"position":[[127,5]]},"754":{"position":[[960,5]]},"756":{"position":[[127,5]]},"758":{"position":[[518,5]]},"769":{"position":[[127,5]]},"771":{"position":[[518,5]]},"781":{"position":[[124,5]]},"794":{"position":[[1166,5]]},"796":{"position":[[128,5]]},"798":{"position":[[516,5]]},"809":{"position":[[1166,5]]},"811":{"position":[[127,5]]},"813":{"position":[[516,5]]},"825":{"position":[[1002,5]]},"827":{"position":[[127,5]]},"829":{"position":[[516,5]]},"841":{"position":[[127,5]]},"850":{"position":[[127,5]]},"858":{"position":[[127,5]]},"866":{"position":[[127,5]]},"878":{"position":[[127,5]]},"884":{"position":[[127,5]]},"890":{"position":[[128,5]]},"896":{"position":[[127,5]]},"906":{"position":[[127,5]]},"908":{"position":[[562,5]]},"921":{"position":[[127,5]]},"924":{"position":[[562,5]]},"933":{"position":[[127,5]]},"935":{"position":[[562,5]]},"945":{"position":[[1104,5]]},"949":{"position":[[127,5]]},"951":{"position":[[562,5]]},"958":{"position":[[127,5]]},"967":{"position":[[127,5]]},"969":{"position":[[562,5]]},"981":{"position":[[127,5]]},"990":{"position":[[127,5]]},"996":{"position":[[127,5]]},"1005":{"position":[[124,5]]},"1014":{"position":[[127,5]]},"1021":{"position":[[127,5]]},"1027":{"position":[[127,5]]},"1033":{"position":[[131,5]]},"1044":{"position":[[127,5]]},"1046":{"position":[[496,5]]},"1052":{"position":[[127,5]]},"1054":{"position":[[496,5]]},"1060":{"position":[[127,5]]},"1062":{"position":[[496,5]]},"1069":{"position":[[127,5]]},"1075":{"position":[[127,5]]},"1084":{"position":[[127,5]]},"1093":{"position":[[127,5]]},"1100":{"position":[[127,5]]},"1106":{"position":[[128,5]]},"1112":{"position":[[127,5]]},"1124":{"position":[[127,5]]},"1132":{"position":[[128,5]]},"1179":{"position":[[913,5]]},"1199":{"position":[[103,5]]},"1227":{"position":[[228,5]]},"1228":{"position":[[243,5]]},"1237":{"position":[[77,5]]},"1252":{"position":[[124,5]]},"1286":{"position":[[1223,5]]},"1301":{"position":[[1059,5]]},"1325":{"position":[[1223,5]]},"1362":{"position":[[74,5]]},"1462":{"position":[[726,5]]}},"keywords":{}}],["leav",{"_index":2120,"title":{},"content":{"190":{"position":[[925,5],[1049,5]]},"191":{"position":[[92,5]]},"206":{"position":[[675,5]]},"239":{"position":[[2847,5]]},"240":{"position":[[3029,5]]},"267":{"position":[[1866,5]]},"295":{"position":[[1255,5]]},"397":{"position":[[1048,5]]},"593":{"position":[[220,5]]},"720":{"position":[[346,5]]},"1196":{"position":[[798,5],[1173,5]]},"1230":{"position":[[688,5]]},"1292":{"position":[[1815,5],[1858,6]]},"1306":{"position":[[1815,5],[1858,6]]},"1329":{"position":[[1815,5],[1858,6]]},"1452":{"position":[[2378,5]]}},"keywords":{}}],["lee",{"_index":2951,"title":{},"content":{"295":{"position":[[413,3]]}},"keywords":{}}],["left",{"_index":1708,"title":{},"content":{"125":{"position":[[1134,4]]},"204":{"position":[[416,4]]},"239":{"position":[[337,4]]},"296":{"position":[[1950,4]]},"310":{"position":[[391,4]]},"314":{"position":[[3024,4]]},"349":{"position":[[43,4],[106,4]]},"436":{"position":[[151,4]]},"479":{"position":[[43,4],[105,4]]},"552":{"position":[[441,4]]},"595":{"position":[[1382,4]]},"747":{"position":[[990,4]]},"757":{"position":[[427,4]]},"770":{"position":[[427,4]]},"785":{"position":[[445,4]]},"797":{"position":[[427,4]]},"812":{"position":[[427,4]]},"828":{"position":[[427,4]]},"842":{"position":[[2744,4]]},"859":{"position":[[624,4]]},"947":{"position":[[53,4]]},"1070":{"position":[[879,4]]},"1092":{"position":[[43,4],[106,4]]},"1140":{"position":[[1983,4]]},"1144":{"position":[[855,4]]},"1170":{"position":[[855,4]]},"1192":{"position":[[530,4]]},"1209":{"position":[[680,4]]},"1267":{"position":[[467,4]]},"1285":{"position":[[489,4]]},"1292":{"position":[[1897,4]]},"1300":{"position":[[489,4]]},"1306":{"position":[[1897,4]]},"1316":{"position":[[1983,4]]},"1324":{"position":[[489,4]]},"1329":{"position":[[1897,4]]},"1340":{"position":[[1983,4]]},"1351":{"position":[[1983,4]]},"1370":{"position":[[444,4]]},"1379":{"position":[[1166,4]]},"1394":{"position":[[807,4]]},"1403":{"position":[[1166,4]]},"1414":{"position":[[1166,4]]},"1423":{"position":[[796,4]]},"1431":{"position":[[2006,4]]},"1434":{"position":[[526,4],[860,4],[1007,4],[1180,4],[1630,4],[2119,4]]},"1459":{"position":[[1517,5]]},"1464":{"position":[[49,4],[788,4]]},"1467":{"position":[[24,4]]},"1476":{"position":[[993,4]]},"1477":{"position":[[339,4]]}},"keywords":{}}],["legaci",{"_index":4100,"title":{},"content":{"550":{"position":[[83,6]]}},"keywords":{}}],["length",{"_index":48,"title":{},"content":{"1":{"position":[[601,6],[706,7]]},"253":{"position":[[3125,7]]},"436":{"position":[[668,7]]},"1144":{"position":[[1018,6]]},"1172":{"position":[[812,6],[895,6]]},"1213":{"position":[[695,6]]},"1222":{"position":[[812,6],[895,6]]}},"keywords":{}}],["length$old",{"_index":2775,"title":{},"content":{"254":{"position":[[777,12],[2834,12],[3495,12]]}},"keywords":{}}],["lengthcohortsev",{"_index":3639,"title":{},"content":{"421":{"position":[[118,19]]}},"keywords":{}}],["less",{"_index":194,"title":{},"content":{"4":{"position":[[801,4]]},"74":{"position":[[803,4]]},"92":{"position":[[824,4]]},"198":{"position":[[233,4]]},"254":{"position":[[1635,4]]},"314":{"position":[[1452,4]]},"343":{"position":[[595,4]]},"577":{"position":[[313,4],[495,4]]},"588":{"position":[[308,4],[490,4]]},"1292":{"position":[[1929,4]]},"1306":{"position":[[1929,4]]},"1329":{"position":[[1929,4]]},"1379":{"position":[[1203,4]]},"1403":{"position":[[1203,4]]},"1414":{"position":[[1203,4]]},"1451":{"position":[[634,4]]}},"keywords":{}}],["let",{"_index":1369,"title":{},"content":{"96":{"position":[[25,4]]},"254":{"position":[[3082,4]]},"280":{"position":[[1046,4]]},"314":{"position":[[2657,4]]},"326":{"position":[[1319,4]]}},"keywords":{}}],["let'",{"_index":2109,"title":{},"content":{"189":{"position":[[314,5]]},"237":{"position":[[194,5]]},"296":{"position":[[7157,5]]},"309":{"position":[[2560,5]]},"313":{"position":[[3533,5]]},"1461":{"position":[[790,5],[2833,5],[4517,5],[4849,5]]}},"keywords":{}}],["letter",{"_index":1342,"title":{},"content":{"94":{"position":[[1170,8]]},"616":{"position":[[292,7]]},"1317":{"position":[[675,7]]},"1341":{"position":[[675,7]]},"1352":{"position":[[675,7]]},"1432":{"position":[[689,7]]}},"keywords":{}}],["let’",{"_index":2220,"title":{},"content":{"204":{"position":[[1,5]]},"207":{"position":[[37,5]]},"210":{"position":[[1,5],[189,5]]},"236":{"position":[[211,5],[1735,5]]},"237":{"position":[[3548,5]]},"239":{"position":[[647,5],[1625,5],[1935,5]]},"240":{"position":[[4351,5]]},"254":{"position":[[971,5]]},"295":{"position":[[858,5]]},"296":{"position":[[949,5],[3668,5]]},"314":{"position":[[692,5],[989,5]]}},"keywords":{}}],["level",{"_index":225,"title":{"7":{"position":[[4,6]]},"285":{"position":[[11,6]]}},"content":{"7":{"position":[[21,5],[64,5],[137,7],[510,5],[576,5],[619,5]]},"26":{"position":[[265,5]]},"27":{"position":[[506,5]]},"48":{"position":[[26,5]]},"60":{"position":[[30,5],[154,5],[1195,5]]},"98":{"position":[[69,5],[1247,5]]},"99":{"position":[[414,5]]},"103":{"position":[[578,5],[699,5]]},"154":{"position":[[1323,5]]},"160":{"position":[[113,5],[254,5]]},"171":{"position":[[169,5]]},"176":{"position":[[197,5]]},"215":{"position":[[154,5]]},"219":{"position":[[99,5]]},"236":{"position":[[2793,5]]},"239":{"position":[[694,6],[1989,5]]},"263":{"position":[[1011,5]]},"264":{"position":[[418,5]]},"274":{"position":[[1856,5]]},"275":{"position":[[452,5],[770,5]]},"285":{"position":[[69,6],[101,7]]},"288":{"position":[[728,6]]},"299":{"position":[[643,6]]},"320":{"position":[[1529,5]]},"343":{"position":[[112,5],[122,6],[272,5],[1178,5]]},"649":{"position":[[188,7]]},"840":{"position":[[1139,6],[1238,6],[1335,6],[1431,6]]},"849":{"position":[[2150,6],[2260,6]]},"917":{"position":[[71,5],[1823,5],[1918,5]]},"965":{"position":[[71,5],[1823,5],[1918,5]]},"1008":{"position":[[1303,5],[1959,5]]},"1140":{"position":[[2006,5]]},"1156":{"position":[[492,5]]},"1178":{"position":[[275,5]]},"1185":{"position":[[219,6]]},"1201":{"position":[[617,5]]},"1268":{"position":[[676,5]]},"1279":{"position":[[196,5]]},"1292":{"position":[[1966,5]]},"1306":{"position":[[1966,5]]},"1316":{"position":[[2006,5]]},"1329":{"position":[[1966,5]]},"1340":{"position":[[2006,5]]},"1351":{"position":[[2006,5]]},"1358":{"position":[[849,5]]},"1379":{"position":[[1255,5]]},"1382":{"position":[[284,6]]},"1403":{"position":[[1255,5]]},"1414":{"position":[[1255,5]]},"1431":{"position":[[2029,5]]},"1461":{"position":[[1901,5],[3121,5]]}},"keywords":{}}],["level"",{"_index":1427,"title":{},"content":{"99":{"position":[[537,12]]}},"keywords":{}}],["leverag",{"_index":784,"title":{},"content":{"50":{"position":[[6,9]]},"84":{"position":[[569,8]]},"158":{"position":[[106,9]]},"197":{"position":[[346,8]]},"216":{"position":[[547,8]]},"268":{"position":[[439,8]]},"320":{"position":[[1145,9]]},"330":{"position":[[139,10]]},"975":{"position":[[224,10]]},"976":{"position":[[236,10]]},"977":{"position":[[622,8]]},"1473":{"position":[[322,8]]}},"keywords":{}}],["lexic",{"_index":5190,"title":{},"content":{"1020":{"position":[[869,9],[922,7],[1484,7],[1912,7],[2100,7]]},"1021":{"position":[[1452,7]]},"1146":{"position":[[115,9]]},"1173":{"position":[[115,9]]},"1215":{"position":[[115,9]]},"1223":{"position":[[115,9]]}},"keywords":{}}],["lexicograph",{"_index":3589,"title":{},"content":{"417":{"position":[[355,13]]},"438":{"position":[[355,13]]},"480":{"position":[[1340,13]]},"502":{"position":[[815,13]]},"545":{"position":[[355,13]]},"1021":{"position":[[1392,13]]}},"keywords":{}}],["lh",{"_index":3002,"title":{},"content":{"296":{"position":[[2040,3]]},"1459":{"position":[[1534,5],[1647,3]]},"1465":{"position":[[838,3],[877,3]]},"1467":{"position":[[114,3],[250,3],[2837,3]]}},"keywords":{}}],["librari",{"_index":1463,"title":{},"content":{"102":{"position":[[284,10]]},"250":{"position":[[187,8]]},"281":{"position":[[2673,10]]}},"keywords":{}}],["licens",{"_index":2036,"title":{},"content":{"175":{"position":[[57,8]]}},"keywords":{}}],["lifecycl",{"_index":240,"title":{},"content":{"7":{"position":[[361,9]]},"34":{"position":[[565,9]]}},"keywords":{}}],["lifetim",{"_index":3113,"title":{},"content":{"319":{"position":[[1578,8]]},"1080":{"position":[[182,8],[272,8],[358,8],[446,8],[563,8]]},"1085":{"position":[[1112,9]]},"1087":{"position":[[198,8]]},"1203":{"position":[[201,8]]}},"keywords":{}}],["lift",{"_index":3029,"title":{},"content":{"296":{"position":[[6638,7]]}},"keywords":{}}],["light",{"_index":1790,"title":{},"content":{"138":{"position":[[1551,5]]},"141":{"position":[[1131,5],[1556,5]]},"142":{"position":[[1568,5]]}},"keywords":{}}],["lightweight",{"_index":2495,"title":{},"content":{"234":{"position":[[415,11]]},"590":{"position":[[69,12]]},"779":{"position":[[66,12]]},"1250":{"position":[[66,12]]}},"keywords":{}}],["like/category=anvils/pivot=00/utc_date=2022",{"_index":153,"title":{},"content":{"4":{"position":[[92,43]]}},"keywords":{}}],["like_regex",{"_index":5609,"title":{},"content":{"1140":{"position":[[2066,10]]},"1316":{"position":[[2066,10]]},"1340":{"position":[[2066,10]]},"1351":{"position":[[2066,10]]},"1379":{"position":[[1363,10]]},"1403":{"position":[[1363,10]]},"1414":{"position":[[1363,10]]},"1431":{"position":[[2089,10]]}},"keywords":{}}],["likeflow_generated/typescript/acmeco/mi",{"_index":1475,"title":{},"content":{"103":{"position":[[509,39]]}},"keywords":{}}],["likelihood",{"_index":4578,"title":{},"content":{"750":{"position":[[326,10]]},"766":{"position":[[326,10]]},"789":{"position":[[360,10]]},"807":{"position":[[360,10]]},"823":{"position":[[360,10]]}},"keywords":{}}],["likepython,javascript",{"_index":1605,"title":{},"content":{"113":{"position":[[198,22]]}},"keywords":{}}],["likeschemastore.org",{"_index":1907,"title":{},"content":{"161":{"position":[[1291,20]]}},"keywords":{}}],["likesnowflakeandbigqueryfor",{"_index":169,"title":{},"content":{"4":{"position":[[459,27]]}},"keywords":{}}],["likevscode'",{"_index":1479,"title":{},"content":{"103":{"position":[[765,12]]}},"keywords":{}}],["likewis",{"_index":3136,"title":{},"content":{"321":{"position":[[358,9]]},"1463":{"position":[[109,9]]}},"keywords":{}}],["limit",{"_index":550,"title":{"379":{"position":[[0,12]]},"559":{"position":[[7,12]]},"872":{"position":[[6,12]]}},"content":{"20":{"position":[[921,5],[1039,7]]},"40":{"position":[[368,12]]},"66":{"position":[[754,6]]},"68":{"position":[[1303,12]]},"72":{"position":[[38,7]]},"313":{"position":[[3184,7]]},"331":{"position":[[241,5]]},"364":{"position":[[231,11]]},"373":{"position":[[1008,11]]},"397":{"position":[[712,5],[718,5]]},"417":{"position":[[1950,5]]},"419":{"position":[[1308,5]]},"440":{"position":[[1324,5]]},"494":{"position":[[181,7]]},"509":{"position":[[287,5]]},"515":{"position":[[296,5],[986,5]]},"545":{"position":[[1552,5]]},"547":{"position":[[1310,5]]},"560":{"position":[[23,12],[92,7],[268,7]]},"577":{"position":[[155,5],[343,12]]},"588":{"position":[[150,5],[338,12]]},"842":{"position":[[1362,5],[1479,5],[2554,5]]},"847":{"position":[[235,10]]},"867":{"position":[[1469,8]]},"870":{"position":[[700,6]]},"900":{"position":[[40,6],[100,7]]},"909":{"position":[[33,6],[125,6]]},"922":{"position":[[2397,5],[2764,5]]},"925":{"position":[[33,6],[125,6]]},"936":{"position":[[33,6],[125,6]]},"946":{"position":[[45,5]]},"952":{"position":[[33,6],[125,6]]},"970":{"position":[[33,6],[125,6]]},"1023":{"position":[[1291,5]]},"1068":{"position":[[35,6],[131,7]]},"1123":{"position":[[399,5]]},"1140":{"position":[[2108,5]]},"1144":{"position":[[582,5]]},"1170":{"position":[[582,5],[920,5],[1051,5]]},"1209":{"position":[[721,5]]},"1213":{"position":[[437,5]]},"1220":{"position":[[437,5],[597,5],[728,5]]},"1243":{"position":[[333,7]]},"1292":{"position":[[2040,5]]},"1306":{"position":[[2040,5]]},"1316":{"position":[[2108,5]]},"1329":{"position":[[2040,5]]},"1340":{"position":[[2108,5]]},"1351":{"position":[[2108,5]]},"1370":{"position":[[461,5]]},"1379":{"position":[[1418,5]]},"1403":{"position":[[1418,5]]},"1414":{"position":[[1418,5]]},"1431":{"position":[[2131,5]]},"1471":{"position":[[711,5]]}},"keywords":{}}],["limit_distinct",{"_index":5875,"title":{},"content":{"1209":{"position":[[752,14]]}},"keywords":{}}],["line",{"_index":642,"title":{"1471":{"position":[[47,5]]}},"content":{"29":{"position":[[148,4]]},"31":{"position":[[22,4]]},"60":{"position":[[1117,4]]},"80":{"position":[[175,4]]},"135":{"position":[[763,4]]},"169":{"position":[[120,5]]},"253":{"position":[[3178,5]]},"254":{"position":[[1316,4],[3660,4]]},"419":{"position":[[2521,4]]},"441":{"position":[[1130,4]]},"486":{"position":[[294,5]]},"504":{"position":[[2150,4]]},"513":{"position":[[296,5]]},"522":{"position":[[303,5]]},"530":{"position":[[303,5]]},"547":{"position":[[2523,4]]},"551":{"position":[[295,5]]},"569":{"position":[[327,5]]},"607":{"position":[[326,5]]},"614":{"position":[[310,5]]},"639":{"position":[[2148,4]]},"650":{"position":[[276,5]]},"658":{"position":[[294,5]]},"674":{"position":[[294,5]]},"689":{"position":[[294,5]]},"716":{"position":[[312,5]]},"731":{"position":[[269,5]]},"1008":{"position":[[1783,5],[1857,4]]},"1023":{"position":[[2504,4]]},"1032":{"position":[[199,5]]},"1073":{"position":[[144,4],[234,4]]},"1292":{"position":[[2116,5]]},"1306":{"position":[[2116,5]]},"1329":{"position":[[2116,5]]},"1383":{"position":[[141,6]]},"1469":{"position":[[124,5]]},"1471":{"position":[[114,5],[1157,4]]}},"keywords":{}}],["linear",{"_index":6032,"title":{},"content":{"1292":{"position":[[2080,6]]},"1306":{"position":[[2080,6]]},"1329":{"position":[[2080,6]]}},"keywords":{}}],["lineend",{"_index":3607,"title":{},"content":{"418":{"position":[[291,11]]},"439":{"position":[[548,11]]},"546":{"position":[[1028,11]]},"638":{"position":[[320,11]]},"1022":{"position":[[357,11]]}},"keywords":{}}],["lineno",{"_index":6310,"title":{},"content":{"1379":{"position":[[1474,6]]},"1403":{"position":[[1474,6]]},"1414":{"position":[[1474,6]]}},"keywords":{}}],["linestr",{"_index":6036,"title":{},"content":{"1292":{"position":[[2153,10]]},"1306":{"position":[[2153,10]]},"1329":{"position":[[2153,10]]}},"keywords":{}}],["link",{"_index":1795,"title":{"1019":{"position":[[28,6]]}},"content":{"138":{"position":[[1778,4],[2585,5]]},"141":{"position":[[1786,4]]},"142":{"position":[[1803,4],[2663,5]]},"240":{"position":[[3760,4]]},"295":{"position":[[1194,6]]},"296":{"position":[[7364,5]]},"323":{"position":[[592,7]]},"478":{"position":[[534,6]]},"486":{"position":[[50,4]]},"553":{"position":[[193,6]]},"554":{"position":[[109,6]]},"599":{"position":[[534,6]]},"615":{"position":[[3,4],[49,4]]},"617":{"position":[[3,4],[49,4],[838,4]]},"619":{"position":[[516,4],[525,4]]},"658":{"position":[[50,4]]},"674":{"position":[[50,4]]},"689":{"position":[[50,4]]},"709":{"position":[[206,4]]},"720":{"position":[[395,6]]},"1019":{"position":[[182,5],[244,5],[345,5]]},"1020":{"position":[[588,5],[671,5]]},"1097":{"position":[[8,6]]},"1479":{"position":[[247,4]]}},"keywords":{}}],["link"",{"_index":1728,"title":{},"content":{"129":{"position":[[1180,11]]}},"keywords":{}}],["linkedin",{"_index":3359,"title":{"714":{"position":[[0,8]]},"717":{"position":[[34,8]]},"722":{"position":[[0,8]]}},"content":{"364":{"position":[[2336,8],[2395,8],[2412,8],[2473,8]]},"716":{"position":[[41,8]]},"717":{"position":[[13,8],[59,8]]},"718":{"position":[[82,8],[180,8],[213,8],[277,8],[404,9]]},"719":{"position":[[245,8]]},"720":{"position":[[628,8],[859,8]]},"721":{"position":[[159,8]]},"723":{"position":[[13,8]]},"724":{"position":[[71,8],[206,8],[346,8],[473,9]]},"725":{"position":[[11,8]]},"726":{"position":[[10,8],[40,8],[199,8],[301,8],[429,8]]},"727":{"position":[[250,8]]},"728":{"position":[[390,8],[508,8]]}},"keywords":{}}],["linkedin'",{"_index":4522,"title":{},"content":{"724":{"position":[[323,10],[715,10]]},"726":{"position":[[110,10]]}},"keywords":{}}],["linksissu",{"_index":4475,"title":{},"content":{"709":{"position":[[311,10]]}},"keywords":{}}],["linux",{"_index":866,"title":{},"content":{"58":{"position":[[32,5],[96,5],[115,5],[316,6],[435,6]]},"169":{"position":[[287,5],[556,6],[676,6],[1107,5]]},"224":{"position":[[819,5]]}},"keywords":{}}],["list",{"_index":230,"title":{},"content":{"7":{"position":[[145,6]]},"60":{"position":[[782,4],[1185,5],[1245,5]]},"61":{"position":[[261,6],[462,4],[647,4],[694,5]]},"68":{"position":[[436,7]]},"84":{"position":[[360,5]]},"87":{"position":[[39,4]]},"122":{"position":[[562,4]]},"138":{"position":[[2564,5]]},"142":{"position":[[2642,5]]},"149":{"position":[[1337,4]]},"154":{"position":[[115,4]]},"190":{"position":[[1626,4]]},"204":{"position":[[489,4]]},"205":{"position":[[142,4]]},"217":{"position":[[1257,4],[1350,4],[1564,4]]},"218":{"position":[[1631,4]]},"228":{"position":[[349,4]]},"230":{"position":[[566,6]]},"238":{"position":[[1007,4]]},"259":{"position":[[676,4]]},"263":{"position":[[72,4],[250,4]]},"264":{"position":[[720,5]]},"270":{"position":[[494,6],[542,4],[594,4]]},"274":{"position":[[817,6],[865,5],[903,4],[1112,4]]},"275":{"position":[[934,4]]},"278":{"position":[[1707,4]]},"301":{"position":[[802,6]]},"328":{"position":[[60,6]]},"341":{"position":[[137,4],[152,4]]},"345":{"position":[[21,4]]},"370":{"position":[[1090,4]]},"374":{"position":[[64,4]]},"377":{"position":[[1618,4]]},"402":{"position":[[438,4]]},"417":{"position":[[214,7],[271,7],[860,8],[1051,8]]},"419":{"position":[[2192,4],[2335,4]]},"429":{"position":[[794,6]]},"438":{"position":[[214,7],[271,7]]},"441":{"position":[[801,4],[944,4]]},"491":{"position":[[327,4]]},"502":{"position":[[674,7],[731,7]]},"504":{"position":[[1821,4],[1964,4]]},"517":{"position":[[805,4],[991,4],[1225,4],[1725,4]]},"520":{"position":[[45,4]]},"529":{"position":[[49,4]]},"534":{"position":[[282,4],[808,5],[1153,4]]},"545":{"position":[[214,7],[271,7]]},"547":{"position":[[2194,4],[2337,4]]},"548":{"position":[[1249,6]]},"556":{"position":[[1415,4]]},"606":{"position":[[30,6]]},"639":{"position":[[1819,4],[1962,4]]},"649":{"position":[[245,4]]},"664":{"position":[[348,4],[583,4]]},"679":{"position":[[327,4]]},"694":{"position":[[327,4]]},"707":{"position":[[197,5]]},"720":{"position":[[294,4]]},"735":{"position":[[454,6]]},"736":{"position":[[195,5]]},"738":{"position":[[654,6]]},"757":{"position":[[1435,4]]},"759":{"position":[[205,4]]},"760":{"position":[[385,5]]},"763":{"position":[[372,4]]},"770":{"position":[[1435,4]]},"772":{"position":[[216,4]]},"773":{"position":[[385,5]]},"776":{"position":[[372,4]]},"782":{"position":[[371,4]]},"797":{"position":[[1435,4]]},"799":{"position":[[203,4]]},"800":{"position":[[385,5]]},"803":{"position":[[378,4]]},"812":{"position":[[1435,4]]},"814":{"position":[[203,4]]},"815":{"position":[[385,5]]},"818":{"position":[[378,4]]},"828":{"position":[[1435,4]]},"830":{"position":[[203,4]]},"831":{"position":[[385,5]]},"834":{"position":[[378,4]]},"838":{"position":[[107,6]]},"840":{"position":[[1263,5],[1826,5]]},"842":{"position":[[2881,4]]},"849":{"position":[[2867,5]]},"867":{"position":[[551,4]]},"904":{"position":[[2076,5]]},"907":{"position":[[873,4]]},"917":{"position":[[785,5],[1585,5]]},"918":{"position":[[2368,5]]},"919":{"position":[[1310,5]]},"922":{"position":[[1768,4]]},"923":{"position":[[873,4]]},"931":{"position":[[1738,5]]},"934":{"position":[[873,4]]},"946":{"position":[[215,4]]},"950":{"position":[[873,4]]},"965":{"position":[[785,5],[1585,5]]},"968":{"position":[[873,4]]},"991":{"position":[[188,6]]},"1009":{"position":[[188,6]]},"1021":{"position":[[1240,7],[1297,7]]},"1023":{"position":[[2175,4],[2318,4]]},"1029":{"position":[[205,5]]},"1045":{"position":[[721,4]]},"1053":{"position":[[721,4]]},"1061":{"position":[[721,4]]},"1118":{"position":[[748,4]]},"1129":{"position":[[192,6]]},"1140":{"position":[[18,4],[266,6],[343,5]]},"1177":{"position":[[347,4]]},"1192":{"position":[[18,4],[163,5],[187,4]]},"1201":{"position":[[26,4],[112,7]]},"1209":{"position":[[16,4]]},"1292":{"position":[[13,4],[195,6],[272,5],[2189,4]]},"1293":{"position":[[26,4],[112,7]]},"1306":{"position":[[13,4],[195,6],[272,5],[2189,4]]},"1307":{"position":[[26,4],[112,7]]},"1316":{"position":[[18,4],[266,6],[343,5]]},"1317":{"position":[[26,4],[112,7]]},"1329":{"position":[[13,4],[195,6],[272,5],[2189,4]]},"1330":{"position":[[26,4],[112,7]]},"1340":{"position":[[18,4],[266,6],[343,5]]},"1341":{"position":[[26,4],[112,7]]},"1351":{"position":[[18,4],[266,6],[343,5]]},"1352":{"position":[[26,4],[112,7]]},"1356":{"position":[[1049,4]]},"1359":{"position":[[26,4],[112,7]]},"1370":{"position":[[14,4],[258,6],[335,5]]},"1379":{"position":[[17,4],[203,6],[280,5]]},"1380":{"position":[[26,4],[112,7]]},"1394":{"position":[[17,4],[162,5],[186,4]]},"1403":{"position":[[17,4],[203,6],[280,5]]},"1404":{"position":[[26,4],[112,7]]},"1414":{"position":[[17,4],[203,6],[280,5]]},"1415":{"position":[[26,4],[112,7]]},"1423":{"position":[[24,4],[169,5],[193,4]]},"1431":{"position":[[41,4],[289,6],[366,5]]},"1432":{"position":[[26,4],[112,7]]},"1448":{"position":[[1018,4]]},"1452":{"position":[[4533,6]]},"1463":{"position":[[539,4]]}},"keywords":{}}],["list.for",{"_index":3828,"title":{},"content":{"479":{"position":[[601,8]]}},"keywords":{}}],["listagg",{"_index":5611,"title":{},"content":{"1140":{"position":[[2146,7]]},"1316":{"position":[[2146,7]]},"1340":{"position":[[2146,7]]},"1351":{"position":[[2146,7]]},"1423":{"position":[[825,7]]},"1431":{"position":[[2169,7]]}},"keywords":{}}],["listscontactscontact",{"_index":4382,"title":{},"content":{"649":{"position":[[223,21]]}},"keywords":{}}],["listshard",{"_index":3506,"title":{},"content":{"390":{"position":[[205,10]]}},"keywords":{}}],["listtabl",{"_index":3524,"title":{},"content":{"395":{"position":[[365,10]]}},"keywords":{}}],["liter",{"_index":1233,"title":{},"content":{"83":{"position":[[1360,7]]}},"keywords":{}}],["littl",{"_index":2237,"title":{},"content":{"207":{"position":[[50,6]]},"237":{"position":[[3400,6]]},"240":{"position":[[2861,6]]},"321":{"position":[[2040,6]]}},"keywords":{}}],["live",{"_index":959,"title":{},"content":{"64":{"position":[[303,4]]},"103":{"position":[[37,5]]},"105":{"position":[[544,5]]},"162":{"position":[[280,5]]},"181":{"position":[[17,4]]},"252":{"position":[[160,5]]},"253":{"position":[[1093,5]]},"255":{"position":[[1024,5]]},"264":{"position":[[638,5]]},"268":{"position":[[1976,4]]},"269":{"position":[[1438,4]]},"270":{"position":[[2054,4]]},"296":{"position":[[5128,4]]},"312":{"position":[[164,5]]},"313":{"position":[[1093,5],[3217,5]]},"315":{"position":[[1212,4]]},"316":{"position":[[1349,5]]},"320":{"position":[[1049,4]]},"1391":{"position":[[957,4]]}},"keywords":{}}],["ln",{"_index":5613,"title":{},"content":{"1140":{"position":[[2184,2]]},"1316":{"position":[[2184,2]]},"1340":{"position":[[2184,2]]},"1351":{"position":[[2184,2]]},"1379":{"position":[[1532,2]]},"1403":{"position":[[1532,2]]},"1414":{"position":[[1532,2]]},"1431":{"position":[[2207,2]]}},"keywords":{}}],["load",{"_index":1943,"title":{"181":{"position":[[0,7]]},"1443":{"position":[[0,5]]}},"content":{"164":{"position":[[1132,4]]},"198":{"position":[[243,4]]},"233":{"position":[[599,4]]},"240":{"position":[[3835,7]]},"243":{"position":[[93,7]]},"321":{"position":[[376,4]]},"532":{"position":[[195,4]]},"842":{"position":[[1583,5],[1603,4],[2940,7],[3535,4],[3574,4],[3672,4],[3714,4],[3759,5]]},"1151":{"position":[[1044,6]]},"1203":{"position":[[420,7]]},"1260":{"position":[[498,6]]},"1292":{"position":[[2218,4]]},"1306":{"position":[[2218,4]]},"1329":{"position":[[2218,4]]},"1379":{"position":[[1582,4]]},"1384":{"position":[[1267,7]]},"1392":{"position":[[21,7]]},"1403":{"position":[[1582,4]]},"1414":{"position":[[1582,4]]},"1434":{"position":[[108,7],[178,9],[959,5],[1197,4],[1312,4],[1549,6],[1730,4]]},"1438":{"position":[[116,4]]},"1439":{"position":[[1659,6]]},"1440":{"position":[[150,5],[704,6]]},"1442":{"position":[[487,4],[556,4],[740,4],[776,5]]},"1443":{"position":[[14,4],[173,4],[227,4],[271,4],[796,4],[860,6],[981,6],[998,7],[1145,4]]},"1451":{"position":[[488,4]]}},"keywords":{}}],["load<a>",{"_index":6448,"title":{},"content":{"1434":{"position":[[1161,13]]}},"keywords":{}}],["load<b>",{"_index":6450,"title":{},"content":{"1434":{"position":[[1263,13]]}},"keywords":{}}],["load<c>",{"_index":6453,"title":{},"content":{"1434":{"position":[[1437,13]]}},"keywords":{}}],["load.if",{"_index":4897,"title":{},"content":{"870":{"position":[[891,7]]}},"keywords":{}}],["load_during_backfil",{"_index":4800,"title":{},"content":{"843":{"position":[[619,21]]}},"keywords":{}}],["load_during_increment",{"_index":4801,"title":{},"content":{"843":{"position":[[647,24]]}},"keywords":{}}],["loaded<a>",{"_index":6452,"title":{},"content":{"1434":{"position":[[1397,15]]}},"keywords":{}}],["loaded<c>",{"_index":6454,"title":{},"content":{"1434":{"position":[[1505,15]]}},"keywords":{}}],["local",{"_index":603,"title":{"62":{"position":[[30,5]]},"263":{"position":[[31,8]]},"270":{"position":[[20,8]]},"272":{"position":[[26,7]]},"274":{"position":[[20,8]]}},"content":{"26":{"position":[[97,5]]},"29":{"position":[[104,5]]},"60":{"position":[[267,5],[534,5],[606,8]]},"61":{"position":[[28,7],[167,5],[547,5],[804,5],[1066,8],[1080,5],[1114,5]]},"63":{"position":[[296,5]]},"74":{"position":[[164,5],[624,7]]},"81":{"position":[[896,5]]},"82":{"position":[[1233,8]]},"88":{"position":[[59,5],[548,7]]},"125":{"position":[[852,7]]},"169":{"position":[[1450,5]]},"179":{"position":[[280,5],[356,8]]},"183":{"position":[[4028,7],[4404,5]]},"221":{"position":[[1509,5]]},"222":{"position":[[191,5]]},"223":{"position":[[157,5],[660,5]]},"224":{"position":[[210,5]]},"229":{"position":[[121,7]]},"260":{"position":[[112,5]]},"262":{"position":[[76,7]]},"264":{"position":[[325,5]]},"266":{"position":[[559,5],[606,7]]},"268":{"position":[[1786,8]]},"269":{"position":[[1243,8]]},"270":{"position":[[23,7],[340,5],[708,7],[1855,8]]},"273":{"position":[[76,7]]},"283":{"position":[[76,7]]},"285":{"position":[[256,5]]},"320":{"position":[[655,5]]},"324":{"position":[[297,5]]},"340":{"position":[[90,5],[140,5],[310,5]]},"429":{"position":[[274,5]]},"988":{"position":[[64,5]]},"1003":{"position":[[64,5]]},"1008":{"position":[[1084,5],[1973,5]]},"1140":{"position":[[2223,5]]},"1228":{"position":[[82,8]]},"1292":{"position":[[2261,5]]},"1298":{"position":[[157,5],[660,5]]},"1306":{"position":[[2261,5]]},"1316":{"position":[[2223,5]]},"1322":{"position":[[191,5]]},"1329":{"position":[[2261,5]]},"1335":{"position":[[191,5]]},"1340":{"position":[[2223,5]]},"1346":{"position":[[157,5],[660,5]]},"1351":{"position":[[2223,5]]},"1379":{"position":[[1635,5]]},"1384":{"position":[[770,8],[971,5]]},"1403":{"position":[[1635,5]]},"1414":{"position":[[1635,5]]},"1431":{"position":[[2246,5]]},"1446":{"position":[[366,8]]},"1452":{"position":[[3272,5]]},"1461":{"position":[[2939,7],[3977,8],[4160,5]]}},"keywords":{}}],["local_infil",{"_index":5969,"title":{},"content":{"1281":{"position":[[283,12],[379,12]]},"1295":{"position":[[283,12],[379,12]]},"1319":{"position":[[283,12],[379,12]]}},"keywords":{}}],["localavail",{"_index":5391,"title":{},"content":{"1110":{"position":[[161,14]]}},"keywords":{}}],["localhost",{"_index":3402,"title":{},"content":{"370":{"position":[[110,9]]},"1138":{"position":[[110,9]]}},"keywords":{}}],["localhost:5432",{"_index":1125,"title":{},"content":{"81":{"position":[[1371,14],[2664,14]]},"238":{"position":[[471,15]]},"1270":{"position":[[149,14]]},"1287":{"position":[[140,14]]},"1302":{"position":[[140,14]]},"1314":{"position":[[143,14]]},"1326":{"position":[[140,14]]},"1338":{"position":[[143,14]]},"1349":{"position":[[143,14]]},"1377":{"position":[[144,14]]},"1401":{"position":[[144,14]]},"1412":{"position":[[144,14]]}},"keywords":{}}],["localhost:9093",{"_index":3683,"title":{},"content":{"433":{"position":[[168,14],[579,14]]}},"keywords":{}}],["localtim",{"_index":5616,"title":{},"content":{"1140":{"position":[[2257,9]]},"1292":{"position":[[2306,9]]},"1306":{"position":[[2306,9]]},"1316":{"position":[[2257,9]]},"1329":{"position":[[2306,9]]},"1340":{"position":[[2257,9]]},"1351":{"position":[[2257,9]]},"1379":{"position":[[1684,9]]},"1394":{"position":[[856,9]]},"1403":{"position":[[1684,9]]},"1414":{"position":[[1684,9]]},"1423":{"position":[[838,9]]},"1431":{"position":[[2280,9]]}},"keywords":{}}],["localtimestam",{"_index":6042,"title":{},"content":{"1292":{"position":[[2347,13]]},"1306":{"position":[[2347,13]]},"1329":{"position":[[2347,13]]},"1379":{"position":[[1739,13]]},"1403":{"position":[[1739,13]]},"1414":{"position":[[1739,13]]}},"keywords":{}}],["localtimestamp",{"_index":5620,"title":{},"content":{"1140":{"position":[[2298,14]]},"1209":{"position":[[778,14]]},"1316":{"position":[[2298,14]]},"1340":{"position":[[2298,14]]},"1351":{"position":[[2298,14]]},"1394":{"position":[[893,14]]},"1423":{"position":[[852,14]]},"1431":{"position":[[2321,14]]}},"keywords":{}}],["locat",{"_index":457,"title":{},"content":{"16":{"position":[[244,9],[287,9],[334,9]]},"37":{"position":[[268,10]]},"69":{"position":[[546,9]]},"71":{"position":[[140,10]]},"72":{"position":[[16,9],[319,10],[362,8],[461,8]]},"73":{"position":[[32,9],[100,9]]},"76":{"position":[[23,9],[573,8],[936,9]]},"83":{"position":[[1123,8]]},"99":{"position":[[100,9]]},"105":{"position":[[201,6]]},"107":{"position":[[482,6],[1291,9]]},"112":{"position":[[728,7]]},"122":{"position":[[288,9],[973,9],[1035,9]]},"123":{"position":[[299,9]]},"129":{"position":[[414,9],[495,9]]},"154":{"position":[[89,10],[1220,9]]},"159":{"position":[[109,8],[974,8]]},"164":{"position":[[197,10]]},"183":{"position":[[817,6],[951,6]]},"189":{"position":[[192,9]]},"228":{"position":[[124,6],[791,8]]},"229":{"position":[[485,8]]},"254":{"position":[[2328,10]]},"259":{"position":[[40,6],[1713,6]]},"267":{"position":[[1207,6]]},"270":{"position":[[359,6],[1700,6]]},"277":{"position":[[1179,9]]},"280":{"position":[[2255,9]]},"291":{"position":[[117,6]]},"296":{"position":[[2025,10],[2217,9],[3286,6]]},"302":{"position":[[117,6]]},"314":{"position":[[1869,10]]},"392":{"position":[[613,8]]},"397":{"position":[[348,8]]},"417":{"position":[[2058,8]]},"438":{"position":[[1155,8]]},"500":{"position":[[174,7]]},"562":{"position":[[241,7]]},"575":{"position":[[621,9]]},"586":{"position":[[643,9]]},"754":{"position":[[582,7]]},"794":{"position":[[788,7]]},"809":{"position":[[788,7]]},"825":{"position":[[624,7]]},"989":{"position":[[1101,6]]},"1004":{"position":[[1184,6]]},"1156":{"position":[[393,7]]},"1179":{"position":[[1181,7]]},"1286":{"position":[[845,7]]},"1289":{"position":[[1433,9]]},"1298":{"position":[[1265,9]]},"1301":{"position":[[681,7]]},"1310":{"position":[[754,9]]},"1322":{"position":[[1652,9]]},"1325":{"position":[[845,7]]},"1335":{"position":[[1300,9]]},"1346":{"position":[[1266,9]]},"1379":{"position":[[1809,7]]},"1403":{"position":[[1809,7]]},"1414":{"position":[[1809,7]]},"1418":{"position":[[241,10]]},"1449":{"position":[[486,9]]},"1463":{"position":[[99,9]]},"1465":{"position":[[127,8]]},"1467":{"position":[[99,10],[725,9],[1717,9]]},"1476":{"position":[[804,9]]},"1477":{"position":[[32,8],[68,8],[1371,9],[3537,9]]}},"keywords":{}}],["location"",{"_index":6411,"title":{},"content":{"1418":{"position":[[285,14]]}},"keywords":{}}],["locations/materi",{"_index":1823,"title":{},"content":{"142":{"position":[[998,21]]}},"keywords":{}}],["locations/sourc",{"_index":1778,"title":{},"content":{"138":{"position":[[1021,16]]}},"keywords":{}}],["locationsship",{"_index":5374,"title":{},"content":{"1096":{"position":[[375,17]]}},"keywords":{}}],["lock",{"_index":5756,"title":{},"content":{"1156":{"position":[[498,4],[657,6],[669,7]]},"1292":{"position":[[2401,4],[2441,6],[2480,5]]},"1306":{"position":[[2401,4],[2441,6],[2480,5]]},"1329":{"position":[[2401,4],[2441,6],[2480,5]]}},"keywords":{}}],["lock.json",{"_index":949,"title":{},"content":{"63":{"position":[[717,10]]}},"keywords":{}}],["lockstep",{"_index":1444,"title":{},"content":{"100":{"position":[[1164,8]]}},"keywords":{}}],["log",{"_index":196,"title":{"5":{"position":[[0,4]]},"6":{"position":[[0,5]]},"7":{"position":[[0,3]]},"9":{"position":[[13,4]]},"21":{"position":[[9,5]]},"117":{"position":[[9,5]]},"284":{"position":[[11,5]]},"285":{"position":[[7,3]]},"1438":{"position":[[9,3]]},"1439":{"position":[[9,3]]},"1468":{"position":[[13,4]]},"1469":{"position":[[10,4]]},"1470":{"position":[[0,4]]},"1471":{"position":[[10,4]]},"1472":{"position":[[10,4]]}},"content":{"6":{"position":[[40,4],[204,5],[300,5],[414,4],[509,4]]},"7":{"position":[[17,3],[89,4],[554,4],[572,3],[615,3]]},"9":{"position":[[31,4]]},"21":{"position":[[526,4],[659,4],[727,4]]},"48":{"position":[[260,4]]},"82":{"position":[[894,6]]},"117":{"position":[[94,5],[173,4],[242,4],[268,4],[314,4],[420,3],[490,4],[563,4]]},"137":{"position":[[10,3]]},"146":{"position":[[1136,5]]},"149":{"position":[[1130,5]]},"152":{"position":[[1120,5]]},"179":{"position":[[153,3]]},"192":{"position":[[579,3]]},"221":{"position":[[434,3],[1475,3]]},"237":{"position":[[3310,4]]},"241":{"position":[[167,3]]},"249":{"position":[[1,3]]},"266":{"position":[[546,3]]},"284":{"position":[[324,4],[423,4],[514,4],[549,4],[602,4]]},"285":{"position":[[9,4],[65,3],[97,3],[502,4]]},"320":{"position":[[410,3],[820,4]]},"321":{"position":[[872,5]]},"322":{"position":[[1029,3]]},"326":{"position":[[652,5],[685,3]]},"338":{"position":[[206,5]]},"343":{"position":[[108,3],[118,3],[268,3]]},"349":{"position":[[1,3]]},"366":{"position":[[198,3]]},"419":{"position":[[1056,3]]},"440":{"position":[[1072,3]]},"472":{"position":[[453,3]]},"479":{"position":[[1,3]]},"499":{"position":[[189,3]]},"504":{"position":[[996,3]]},"547":{"position":[[1057,3]]},"577":{"position":[[601,4]]},"608":{"position":[[173,3]]},"634":{"position":[[181,3]]},"639":{"position":[[994,3]]},"750":{"position":[[129,3]]},"752":{"position":[[885,3]]},"766":{"position":[[129,3]]},"767":{"position":[[2241,3]]},"789":{"position":[[147,3]]},"791":{"position":[[890,3]]},"792":{"position":[[2233,3]]},"807":{"position":[[147,3]]},"823":{"position":[[147,3]]},"824":{"position":[[2355,3]]},"842":{"position":[[2104,3]]},"849":{"position":[[2267,3]]},"864":{"position":[[1425,8],[1494,3]]},"869":{"position":[[20,3],[246,3],[1028,3],[1391,3]]},"895":{"position":[[67,3]]},"903":{"position":[[224,3]]},"909":{"position":[[365,3]]},"915":{"position":[[224,3]]},"922":{"position":[[81,4]]},"925":{"position":[[365,3]]},"930":{"position":[[224,3]]},"936":{"position":[[365,3]]},"952":{"position":[[365,3]]},"963":{"position":[[378,3]]},"970":{"position":[[365,3]]},"1023":{"position":[[1037,3]]},"1082":{"position":[[111,3]]},"1092":{"position":[[1,3]]},"1140":{"position":[[2343,3]]},"1177":{"position":[[67,3]]},"1292":{"position":[[2552,4]]},"1306":{"position":[[2552,4]]},"1316":{"position":[[2343,3]]},"1329":{"position":[[2552,4]]},"1340":{"position":[[2343,3]]},"1351":{"position":[[2343,3]]},"1431":{"position":[[2366,3]]},"1434":{"position":[[583,4],[2173,4]]},"1435":{"position":[[393,4],[764,4]]},"1437":{"position":[[237,3]]},"1438":{"position":[[41,3]]},"1439":{"position":[[30,3],[622,4],[1180,4]]},"1442":{"position":[[229,4],[1213,3]]},"1444":{"position":[[968,3]]},"1469":{"position":[[16,4]]},"1470":{"position":[[26,4],[89,5],[197,5],[266,4],[310,5],[347,4],[429,4],[596,5]]},"1471":{"position":[[13,4],[67,4],[202,4],[268,4],[670,4],[742,4],[1102,4]]},"1472":{"position":[[26,4],[165,4],[209,4],[303,4],[417,4],[558,4],[588,4],[843,4]]}},"keywords":{}}],["log/wordcount",{"_index":6675,"title":{},"content":{"1472":{"position":[[790,14]]}},"keywords":{}}],["log10",{"_index":5625,"title":{},"content":{"1140":{"position":[[2383,5]]},"1316":{"position":[[2383,5]]},"1340":{"position":[[2383,5]]},"1351":{"position":[[2383,5]]},"1431":{"position":[[2406,5]]}},"keywords":{}}],["log_cursor",{"_index":4769,"title":{},"content":{"842":{"position":[[2092,11]]},"843":{"position":[[782,11]]}},"keywords":{}}],["logfil",{"_index":6049,"title":{},"content":{"1292":{"position":[[2513,7]]},"1306":{"position":[[2513,7]]},"1329":{"position":[[2513,7]]}},"keywords":{}}],["logic",{"_index":65,"title":{"16":{"position":[[0,7]]},"942":{"position":[[10,7]]}},"content":{"2":{"position":[[7,7],[786,7]]},"3":{"position":[[1036,7]]},"6":{"position":[[477,9]]},"8":{"position":[[283,9]]},"11":{"position":[[876,7],[1775,7]]},"13":{"position":[[1566,7]]},"14":{"position":[[41,7]]},"16":{"position":[[33,9],[377,7],[597,7],[623,7],[1217,7]]},"48":{"position":[[67,7]]},"68":{"position":[[1148,7]]},"69":{"position":[[776,7]]},"76":{"position":[[83,7],[336,7],[458,7],[616,7],[892,7]]},"106":{"position":[[258,7]]},"123":{"position":[[154,9]]},"162":{"position":[[1753,7]]},"208":{"position":[[1325,7]]},"306":{"position":[[174,7]]},"307":{"position":[[30,7],[185,7]]},"320":{"position":[[1790,7]]},"321":{"position":[[546,7],[1589,7],[1800,7]]},"366":{"position":[[59,7]]},"367":{"position":[[105,7]]},"370":{"position":[[389,7]]},"821":{"position":[[520,7]]},"867":{"position":[[318,7]]},"903":{"position":[[62,7]]},"904":{"position":[[875,7]]},"907":{"position":[[172,7]]},"912":{"position":[[536,7],[1055,5]]},"915":{"position":[[62,7]]},"917":{"position":[[1832,8],[1871,8]]},"918":{"position":[[1084,7]]},"919":{"position":[[687,7],[705,7]]},"922":{"position":[[10,7],[286,7],[861,7]]},"923":{"position":[[172,7]]},"930":{"position":[[62,7]]},"931":{"position":[[847,7]]},"934":{"position":[[172,7]]},"942":{"position":[[10,7],[115,7],[204,8],[245,7],[391,7],[543,7],[585,7],[712,7]]},"950":{"position":[[172,7]]},"965":{"position":[[1832,8],[1871,8]]},"968":{"position":[[172,7]]},"1045":{"position":[[179,7]]},"1053":{"position":[[179,7]]},"1061":{"position":[[179,7]]},"1138":{"position":[[308,7]]},"1151":{"position":[[366,7]]},"1185":{"position":[[117,7]]},"1267":{"position":[[206,7]]},"1285":{"position":[[91,7]]},"1300":{"position":[[91,7]]},"1313":{"position":[[91,7]]},"1324":{"position":[[91,7]]},"1337":{"position":[[91,7]]},"1348":{"position":[[91,7]]},"1376":{"position":[[91,7]]},"1382":{"position":[[137,7]]},"1400":{"position":[[91,7]]},"1411":{"position":[[91,7]]},"1417":{"position":[[187,7]]},"1427":{"position":[[91,7]]},"1459":{"position":[[83,7],[279,7]]}},"keywords":{}}],["login",{"_index":1163,"title":{"552":{"position":[[14,5]]}},"content":{"82":{"position":[[1520,5],[1639,5]]},"169":{"position":[[1499,5]]},"223":{"position":[[636,5],[858,6]]},"340":{"position":[[359,5]]},"367":{"position":[[414,5]]},"436":{"position":[[93,5]]},"471":{"position":[[63,5]]},"472":{"position":[[797,5]]},"552":{"position":[[5,5]]},"556":{"position":[[1810,5]]},"757":{"position":[[166,5],[267,5]]},"770":{"position":[[166,5],[267,5]]},"797":{"position":[[166,5],[267,5]]},"812":{"position":[[166,5],[267,5]]},"828":{"position":[[166,5],[267,5]]},"931":{"position":[[1176,5]]},"1034":{"position":[[389,5],[466,5]]},"1042":{"position":[[202,5],[276,5]]},"1043":{"position":[[866,5],[940,5]]},"1051":{"position":[[1128,5],[1202,5]]},"1059":{"position":[[917,5],[995,5]]},"1298":{"position":[[636,5],[858,6]]},"1346":{"position":[[636,5],[858,6]]},"1373":{"position":[[1045,5],[1127,5]]},"1374":{"position":[[1045,5],[1131,5]]},"1397":{"position":[[824,5],[906,5]]},"1398":{"position":[[823,5],[909,5]]},"1408":{"position":[[143,5],[225,5]]},"1409":{"position":[[807,5],[889,5]]}},"keywords":{}}],["login_customer_id",{"_index":4105,"title":{},"content":{"552":{"position":[[233,17]]},"556":{"position":[[1791,18]]},"557":{"position":[[381,18]]}},"keywords":{}}],["loglevel",{"_index":257,"title":{},"content":{"7":{"position":[[749,9]]},"285":{"position":[[384,9]]},"343":{"position":[[98,9]]},"344":{"position":[[364,9]]}},"keywords":{}}],["logmin",{"_index":4855,"title":{},"content":{"864":{"position":[[972,9],[1291,9]]},"867":{"position":[[1338,9]]},"869":{"position":[[262,9],[600,9],[899,8],[1089,8]]},"872":{"position":[[71,9]]}},"keywords":{}}],["logo",{"_index":6282,"title":{},"content":{"1362":{"position":[[755,4]]}},"keywords":{}}],["logo_emoji",{"_index":6281,"title":{},"content":{"1362":{"position":[[743,11]]},"1363":{"position":[[364,11]]}},"keywords":{}}],["logsbrandscustom",{"_index":5445,"title":{},"content":{"1128":{"position":[[115,16]]}},"keywords":{}}],["logsto",{"_index":567,"title":{},"content":{"21":{"position":[[454,6]]}},"keywords":{}}],["long",{"_index":369,"title":{},"content":{"12":{"position":[[433,4]]},"20":{"position":[[238,4]]},"26":{"position":[[251,4]]},"72":{"position":[[493,4]]},"74":{"position":[[562,4]]},"76":{"position":[[801,4]]},"89":{"position":[[178,4]]},"105":{"position":[[539,4]]},"124":{"position":[[1048,4]]},"129":{"position":[[466,4]]},"193":{"position":[[239,4]]},"267":{"position":[[1894,5]]},"323":{"position":[[1183,4]]},"337":{"position":[[270,4]]},"410":{"position":[[266,4]]},"752":{"position":[[133,4]]},"757":{"position":[[1297,4]]},"770":{"position":[[1297,4]]},"785":{"position":[[597,4]]},"791":{"position":[[86,4]]},"797":{"position":[[1297,4]]},"812":{"position":[[1297,4]]},"828":{"position":[[1297,4]]},"842":{"position":[[2796,4]]},"867":{"position":[[2005,4]]},"922":{"position":[[1004,4],[1354,4],[2846,4],[2954,4]]},"1047":{"position":[[43,4]]},"1055":{"position":[[43,4]]},"1063":{"position":[[43,4]]},"1085":{"position":[[652,4]]},"1164":{"position":[[276,4],[475,4]]},"1183":{"position":[[482,4]]},"1209":{"position":[[817,4]]},"1292":{"position":[[2592,4]]},"1306":{"position":[[2592,4]]},"1329":{"position":[[2592,4]]},"1439":{"position":[[380,4]]},"1442":{"position":[[949,4]]},"1459":{"position":[[632,4]]}},"keywords":{}}],["longblob",{"_index":6052,"title":{},"content":{"1292":{"position":[[2631,8]]},"1306":{"position":[[2631,8]]},"1329":{"position":[[2631,8]]}},"keywords":{}}],["longer",{"_index":449,"title":{},"content":{"16":{"position":[[82,6]]},"20":{"position":[[502,6],[768,6],[975,6]]},"117":{"position":[[509,6]]},"872":{"position":[[24,6]]},"911":{"position":[[545,6]]},"922":{"position":[[2545,6]]},"927":{"position":[[545,6]]},"938":{"position":[[545,6]]},"954":{"position":[[545,6]]},"972":{"position":[[545,6]]},"1036":{"position":[[790,7]]},"1467":{"position":[[397,7]]}},"keywords":{}}],["longtext",{"_index":6053,"title":{},"content":{"1292":{"position":[[2669,8]]},"1306":{"position":[[2669,8]]},"1329":{"position":[[2669,8]]}},"keywords":{}}],["look",{"_index":357,"title":{},"content":{"12":{"position":[[114,5]]},"14":{"position":[[423,5],[651,4],[853,4]]},"82":{"position":[[4945,5]]},"98":{"position":[[612,5]]},"165":{"position":[[958,4]]},"177":{"position":[[162,7],[297,7]]},"183":{"position":[[1112,4],[4147,4],[4275,5]]},"207":{"position":[[859,4]]},"210":{"position":[[75,5],[202,4],[375,4],[619,5]]},"217":{"position":[[1336,4],[1704,4]]},"221":{"position":[[622,4],[1015,4]]},"222":{"position":[[260,4]]},"223":{"position":[[226,4]]},"224":{"position":[[279,4]]},"228":{"position":[[365,4]]},"236":{"position":[[224,4],[1754,4],[2558,4]]},"239":{"position":[[1570,5],[1638,4]]},"240":{"position":[[2760,4],[4239,4],[4397,6],[4407,5]]},"263":{"position":[[400,7],[924,4]]},"268":{"position":[[740,5]]},"269":{"position":[[365,5]]},"295":{"position":[[960,7],[1301,4]]},"296":{"position":[[962,4],[4203,4],[5188,4],[6957,4],[7484,5]]},"314":{"position":[[1032,4]]},"315":{"position":[[682,4],[1273,4]]},"371":{"position":[[35,4]]},"393":{"position":[[35,4]]},"398":{"position":[[35,4]]},"552":{"position":[[149,4],[425,4]]},"758":{"position":[[35,4]]},"771":{"position":[[35,4]]},"798":{"position":[[35,4]]},"813":{"position":[[35,4]]},"829":{"position":[[35,4]]},"840":{"position":[[346,4],[398,4]]},"849":{"position":[[289,4],[341,4]]},"865":{"position":[[76,4]]},"877":{"position":[[76,4]]},"908":{"position":[[35,4]]},"924":{"position":[[35,4]]},"935":{"position":[[35,4]]},"947":{"position":[[395,4],[1207,4]]},"951":{"position":[[35,4]]},"969":{"position":[[35,4]]},"1015":{"position":[[204,4]]},"1031":{"position":[[708,4]]},"1077":{"position":[[365,4]]},"1113":{"position":[[390,4]]},"1183":{"position":[[1080,5],[1532,5]]},"1208":{"position":[[283,4]]},"1232":{"position":[[456,4]]},"1298":{"position":[[226,4]]},"1322":{"position":[[260,4]]},"1335":{"position":[[260,4]]},"1346":{"position":[[226,4]]},"1358":{"position":[[187,4]]},"1429":{"position":[[758,4]]},"1461":{"position":[[796,4],[1943,4],[3500,4],[3701,4],[4855,4]]}},"keywords":{}}],["lookback",{"_index":3969,"title":{"1077":{"position":[[29,8]]}},"content":{"517":{"position":[[3135,8]]},"578":{"position":[[200,8]]},"747":{"position":[[276,8]]},"1015":{"position":[[156,8]]},"1076":{"position":[[371,8]]},"1077":{"position":[[276,8],[547,8],[686,8]]},"1113":{"position":[[349,8]]}},"keywords":{}}],["lookback_window",{"_index":5184,"title":{},"content":{"1015":{"position":[[131,16]]},"1016":{"position":[[233,16]]},"1113":{"position":[[332,16]]},"1114":{"position":[[206,16]]}},"keywords":{}}],["lookback_window_day",{"_index":5291,"title":{},"content":{"1076":{"position":[[349,21]]}},"keywords":{}}],["lookup",{"_index":4519,"title":{},"content":{"723":{"position":[[171,6]]}},"keywords":{}}],["lookupfollow",{"_index":4535,"title":{},"content":{"729":{"position":[[14,14]]}},"keywords":{}}],["loop",{"_index":6056,"title":{},"content":{"1292":{"position":[[2717,4]]},"1306":{"position":[[2717,4]]},"1329":{"position":[[2717,4]]},"1434":{"position":[[2225,5]]},"1444":{"position":[[1019,5]]},"1472":{"position":[[509,4],[893,5]]}},"keywords":{}}],["loos",{"_index":1920,"title":{},"content":{"162":{"position":[[1414,7]]},"165":{"position":[[472,7]]}},"keywords":{}}],["lose",{"_index":1197,"title":{},"content":{"82":{"position":[[3612,4]]},"1204":{"position":[[670,4]]}},"keywords":{}}],["loss",{"_index":3035,"title":{"411":{"position":[[5,4]]}},"content":{"305":{"position":[[264,4]]},"411":{"position":[[276,5]]}},"keywords":{}}],["lossi",{"_index":1084,"title":{},"content":{"74":{"position":[[808,5]]}},"keywords":{}}],["lost",{"_index":4660,"title":{},"content":{"764":{"position":[[471,4]]},"777":{"position":[[471,4]]},"804":{"position":[[469,4]]},"819":{"position":[[469,4]]},"835":{"position":[[469,4]]},"1230":{"position":[[682,5]]}},"keywords":{}}],["lot",{"_index":1737,"title":{},"content":{"133":{"position":[[18,3]]},"182":{"position":[[229,3]]},"208":{"position":[[298,3]]},"281":{"position":[[2978,3]]},"314":{"position":[[1448,3]]},"319":{"position":[[274,3]]},"324":{"position":[[697,4]]},"325":{"position":[[204,3]]},"821":{"position":[[950,3]]}},"keywords":{}}],["low",{"_index":774,"title":{},"content":{"48":{"position":[[22,3]]},"121":{"position":[[562,3]]},"329":{"position":[[374,3]]},"480":{"position":[[1575,4]]},"764":{"position":[[171,3]]},"777":{"position":[[171,3]]},"804":{"position":[[169,3]]},"819":{"position":[[169,3]]},"835":{"position":[[169,3]]},"922":{"position":[[2755,3]]},"1356":{"position":[[811,3]]}},"keywords":{}}],["low_prior",{"_index":6057,"title":{},"content":{"1292":{"position":[[2755,12]]},"1306":{"position":[[2755,12]]},"1329":{"position":[[2755,12]]}},"keywords":{}}],["lower",{"_index":1348,"title":{},"content":{"94":{"position":[[1545,5]]},"111":{"position":[[622,5]]},"120":{"position":[[1097,5]]},"198":{"position":[[275,6]]},"233":{"position":[[578,5],[593,5]]},"330":{"position":[[650,5]]},"343":{"position":[[855,5]]},"480":{"position":[[1461,5],[1680,5]]},"750":{"position":[[235,5]]},"752":{"position":[[935,6]]},"766":{"position":[[235,5]]},"789":{"position":[[269,5]]},"791":{"position":[[969,6]]},"807":{"position":[[269,5]]},"821":{"position":[[258,5]]},"823":{"position":[[269,5]]},"870":{"position":[[808,8]]},"912":{"position":[[269,5]]},"1036":{"position":[[612,5]]},"1140":{"position":[[2421,5]]},"1316":{"position":[[2421,5]]},"1340":{"position":[[2421,5]]},"1351":{"position":[[2421,5]]},"1379":{"position":[[1877,5]]},"1403":{"position":[[1877,5]]},"1414":{"position":[[1877,5]]},"1431":{"position":[[2444,5]]},"1480":{"position":[[803,5]]}},"keywords":{}}],["lowercas",{"_index":5753,"title":{},"content":{"1155":{"position":[[220,10]]},"1317":{"position":[[701,10]]},"1341":{"position":[[701,10]]},"1352":{"position":[[701,10]]},"1432":{"position":[[715,10]]}},"keywords":{}}],["lowest",{"_index":3437,"title":{},"content":{"373":{"position":[[897,6]]}},"keywords":{}}],["lr",{"_index":305,"title":{},"content":{"11":{"position":[[424,3]]},"23":{"position":[[133,3],[274,3]]},"32":{"position":[[368,3]]},"61":{"position":[[1162,3]]},"92":{"position":[[414,3],[485,3],[683,3]]},"105":{"position":[[1337,3]]},"107":{"position":[[817,3]]},"137":{"position":[[283,3]]},"189":{"position":[[1372,3]]}},"keywords":{}}],["lsn",{"_index":5053,"title":{},"content":{"922":{"position":[[409,4]]}},"keywords":{}}],["lt",{"_index":4764,"title":{},"content":{"842":{"position":[[1662,5]]}},"keywords":{}}],["lt;=>",{"_index":6468,"title":{},"content":{"1434":{"position":[[2263,9]]}},"keywords":{}}],["lt;access_key_id>",{"_index":5727,"title":{},"content":{"1145":{"position":[[160,21]]},"1163":{"position":[[152,21]]},"1171":{"position":[[164,21]]},"1261":{"position":[[236,21]]}},"keywords":{}}],["lt;account",{"_index":3816,"title":{},"content":{"477":{"position":[[726,11]]},"632":{"position":[[122,11]]}},"keywords":{}}],["lt;br/>",{"_index":6439,"title":{},"content":{"1434":{"position":[[473,14]]}},"keywords":{}}],["lt;bucket",{"_index":4085,"title":{},"content":{"548":{"position":[[825,10]]}},"keywords":{}}],["lt;credentialsjson>",{"_index":5885,"title":{},"content":{"1214":{"position":[[162,23]]},"1221":{"position":[[166,23]]}},"keywords":{}}],["lt;database>",{"_index":5242,"title":{},"content":{"1042":{"position":[[62,17]]},"1043":{"position":[[726,17]]},"1051":{"position":[[982,17]]},"1059":{"position":[[746,17],[834,19]]},"1303":{"position":[[1567,18]]},"1373":{"position":[[964,17]]},"1374":{"position":[[964,17]]},"1397":{"position":[[743,17]]},"1398":{"position":[[742,17]]},"1408":{"position":[[62,17]]},"1409":{"position":[[726,17]]}},"keywords":{}}],["lt;domain>",{"_index":4507,"title":{},"content":{"713":{"position":[[140,14]]}},"keywords":{}}],["lt;email>",{"_index":4508,"title":{},"content":{"713":{"position":[[162,13]]}},"keywords":{}}],["lt;engin",{"_index":5860,"title":{},"content":{"1206":{"position":[[426,10]]}},"keywords":{}}],["lt;full/collect",{"_index":1027,"title":{},"content":{"68":{"position":[[785,19]]}},"keywords":{}}],["lt;full\\path\\to\\flow.yaml>",{"_index":2486,"title":{},"content":{"229":{"position":[[632,30]]}},"keywords":{}}],["lt;id>",{"_index":3764,"title":{},"content":{"455":{"position":[[150,10]]}},"keywords":{}}],["lt;key>",{"_index":3765,"title":{},"content":{"455":{"position":[[174,11],[198,11]]},"467":{"position":[[117,11]]},"852":{"position":[[161,11],[216,11]]}},"keywords":{}}],["lt;motherduck_service_token>",{"_index":5923,"title":{},"content":{"1261":{"position":[[140,32]]}},"keywords":{}}],["lt;n>daysago",{"_index":4219,"title":{},"content":{"584":{"position":[[750,17]]}},"keywords":{}}],["lt;origin",{"_index":4093,"title":{},"content":{"548":{"position":[[1383,10]]}},"keywords":{}}],["lt;other_schema>",{"_index":5036,"title":{},"content":{"917":{"position":[[635,20],[764,20]]},"965":{"position":[[635,20],[764,20]]}},"keywords":{}}],["lt;other_tables>",{"_index":4999,"title":{},"content":{"904":{"position":[[2025,21],[2055,20]]},"917":{"position":[[1534,21],[1564,20]]},"918":{"position":[[2317,21],[2347,20]]},"919":{"position":[[2372,21]]},"931":{"position":[[1687,21],[1717,20]]},"965":{"position":[[1534,21],[1564,20]]}},"keywords":{}}],["lt;others>",{"_index":5041,"title":{},"content":{"919":{"position":[[1172,14],[1295,14],[1818,14]]}},"keywords":{}}],["lt;past",{"_index":2785,"title":{},"content":{"263":{"position":[[207,9],[745,9]]},"267":{"position":[[2045,9]]},"270":{"position":[[307,9]]},"274":{"position":[[605,9]]},"284":{"position":[[116,9]]}},"keywords":{}}],["lt;pollinginterval>",{"_index":5030,"title":{},"content":{"912":{"position":[[1565,23]]}},"keywords":{}}],["lt;prefix",{"_index":944,"title":{},"content":{"63":{"position":[[498,10]]}},"keywords":{}}],["lt;role>",{"_index":5087,"title":{},"content":{"943":{"position":[[787,12]]}},"keywords":{}}],["lt;schema>.<table>",{"_index":3416,"title":{},"content":{"370":{"position":[[1422,30]]},"757":{"position":[[861,30]]},"770":{"position":[[861,30]]},"797":{"position":[[861,30]]},"812":{"position":[[861,30]]},"828":{"position":[[861,30]]},"907":{"position":[[1205,30]]},"923":{"position":[[1205,30]]},"934":{"position":[[1205,30]]},"950":{"position":[[1205,30]]},"968":{"position":[[1205,30]]},"1045":{"position":[[932,30]]},"1053":{"position":[[932,30]]},"1061":{"position":[[932,30]]}},"keywords":{}}],["lt;schema>.t",{"_index":4865,"title":{},"content":{"867":{"position":[[762,22]]}},"keywords":{}}],["lt;secret>",{"_index":3277,"title":{},"content":{"360":{"position":[[125,14],[149,14]]},"378":{"position":[[132,14],[163,14]]},"388":{"position":[[280,14]]},"425":{"position":[[121,14],[148,14]]},"449":{"position":[[276,14]]},"461":{"position":[[126,14]]},"497":{"position":[[138,14]]},"518":{"position":[[204,14]]},"541":{"position":[[145,14]]},"575":{"position":[[269,14]]},"586":{"position":[[233,14]]},"612":{"position":[[247,14]]},"620":{"position":[[169,14]]},"626":{"position":[[121,14]]},"647":{"position":[[173,14]]},"655":{"position":[[179,14]]},"671":{"position":[[161,14],[190,14]]},"686":{"position":[[185,14]]},"701":{"position":[[119,14]]},"707":{"position":[[119,14]]},"736":{"position":[[150,14]]},"742":{"position":[[121,14],[151,14]]},"852":{"position":[[190,14],[242,14]]},"886":{"position":[[132,14],[162,14],[210,14]]},"892":{"position":[[134,14]]},"960":{"position":[[125,14]]},"983":{"position":[[119,14]]},"998":{"position":[[121,14]]},"1022":{"position":[[143,14],[168,14]]},"1078":{"position":[[144,14]]},"1108":{"position":[[141,14]]},"1114":{"position":[[158,14]]},"1134":{"position":[[141,14]]},"1180":{"position":[[209,14]]},"1248":{"position":[[191,14]]}},"keywords":{}}],["lt;secret_access_key>",{"_index":5728,"title":{},"content":{"1145":{"position":[[202,25]]},"1163":{"position":[[197,25]]},"1171":{"position":[[206,25]]},"1261":{"position":[[278,25]]}},"keywords":{}}],["lt;task",{"_index":2910,"title":{},"content":{"284":{"position":[[336,8]]},"1475":{"position":[[833,9],[956,9],[1119,9],[1216,9],[1286,9]]}},"keywords":{}}],["lt;tbl1",{"_index":5099,"title":{},"content":{"945":{"position":[[171,9]]}},"keywords":{}}],["lt;token>",{"_index":3751,"title":{},"content":{"449":{"position":[[306,13],[337,13]]},"713":{"position":[[118,13]]}},"keywords":{}}],["lt;url>",{"_index":3780,"title":{},"content":{"467":{"position":[[167,11]]}},"keywords":{}}],["lt;your",{"_index":3774,"title":{},"content":{"461":{"position":[[147,8],[215,8]]},"671":{"position":[[123,8]]},"742":{"position":[[211,8]]},"852":{"position":[[123,8]]},"998":{"position":[[150,8],[185,8]]},"1114":{"position":[[122,8]]}},"keywords":{}}],["lt;your_collection_id>",{"_index":2971,"title":{},"content":{"295":{"position":[[1868,26]]}},"keywords":{}}],["lt;your_dataset>.<your_schema>.<your_table>",{"_index":5800,"title":{},"content":{"1183":{"position":[[969,60],[1134,60],[1356,59]]}},"keywords":{}}],["lt;your_dataset>.<your_schema>.<your_table>_copi",{"_index":5798,"title":{},"content":{"1183":{"position":[[848,64],[1421,65],[1601,65]]}},"keywords":{}}],["lt;your_openai_api_key>",{"_index":5960,"title":{},"content":{"1278":{"position":[[238,27]]}},"keywords":{}}],["lt;your_partitioning>",{"_index":5799,"title":{},"content":{"1183":{"position":[[926,25]]}},"keywords":{}}],["lt;your_password_here>",{"_index":4849,"title":{},"content":{"864":{"position":[[233,27]]},"876":{"position":[[233,27]]}},"keywords":{}}],["lt;your_pinecone_api_key>",{"_index":5959,"title":{},"content":{"1278":{"position":[[194,29]]}},"keywords":{}}],["lt;your_table>",{"_index":5803,"title":{},"content":{"1183":{"position":[[1248,18],[1322,19],[1513,18]]}},"keywords":{}}],["lt;your_table>_copi",{"_index":5801,"title":{},"content":{"1183":{"position":[[1056,23],[1216,23],[1558,23]]}},"keywords":{}}],["lt;your_token>",{"_index":5909,"title":{},"content":{"1241":{"position":[[282,18]]}},"keywords":{}}],["lt;yourorg/full/collectionname>",{"_index":2485,"title":{},"content":{"229":{"position":[[179,35],[676,35]]}},"keywords":{}}],["lurk",{"_index":2339,"title":{},"content":{"210":{"position":[[2548,7]]}},"keywords":{}}],["lww",{"_index":6640,"title":{},"content":{"1463":{"position":[[289,3],[422,4],[611,3],[674,4],[745,4],[813,3],[876,4]]}},"keywords":{}}],["ly",{"_index":6501,"title":{},"content":{"1442":{"position":[[1552,2]]}},"keywords":{}}],["m",{"_index":2452,"title":{},"content":{"221":{"position":[[1240,1],[1388,1]]},"222":{"position":[[485,1],[633,1]]},"223":{"position":[[451,1],[599,1],[757,1]]},"224":{"position":[[504,1],[652,1]]},"1298":{"position":[[451,1],[599,1],[757,1]]},"1322":{"position":[[485,1],[633,1]]},"1335":{"position":[[485,1],[633,1]]},"1346":{"position":[[451,1],[599,1],[757,1]]},"1452":{"position":[[1359,2],[4311,1],[4556,1]]}},"keywords":{}}],["m)onday",{"_index":6557,"title":{},"content":{"1452":{"position":[[4175,9]]}},"keywords":{}}],["m,th",{"_index":6565,"title":{},"content":{"1452":{"position":[[4439,4]]}},"keywords":{}}],["m,w,f",{"_index":6532,"title":{},"content":{"1452":{"position":[[1401,7]]}},"keywords":{}}],["m0",{"_index":2221,"title":{},"content":{"204":{"position":[[101,2]]}},"keywords":{}}],["m1",{"_index":1982,"title":{},"content":{"169":{"position":[[377,2]]}},"keywords":{}}],["mac",{"_index":888,"title":{},"content":{"58":{"position":[[494,4],[684,3]]},"169":{"position":[[737,4],[930,3]]}},"keywords":{}}],["macaddr",{"_index":6260,"title":{},"content":{"1317":{"position":[[772,8]]},"1341":{"position":[[772,8]]},"1352":{"position":[[772,8]]},"1432":{"position":[[786,8]]}},"keywords":{}}],["macaddr8",{"_index":6261,"title":{},"content":{"1317":{"position":[[781,9]]},"1341":{"position":[[781,9]]},"1352":{"position":[[781,9]]},"1432":{"position":[[795,9]]}},"keywords":{}}],["machin",{"_index":779,"title":{},"content":{"49":{"position":[[137,8]]},"101":{"position":[[657,8]]},"107":{"position":[[312,9]]},"112":{"position":[[1074,9]]},"221":{"position":[[1515,8]]},"222":{"position":[[197,8]]},"223":{"position":[[97,7],[163,8]]},"224":{"position":[[96,7],[216,8]]},"234":{"position":[[343,8]]},"236":{"position":[[1632,8]]},"253":{"position":[[191,8]]},"295":{"position":[[1620,8]]},"313":{"position":[[191,8]]},"331":{"position":[[434,7]]},"333":{"position":[[169,7]]},"366":{"position":[[1092,7]]},"367":{"position":[[841,7]]},"1136":{"position":[[245,7],[395,7]]},"1298":{"position":[[97,7],[163,8]]},"1322":{"position":[[197,8]]},"1335":{"position":[[197,8]]},"1346":{"position":[[97,7],[163,8]]}},"keywords":{}}],["machinebuilt",{"_index":1274,"title":{},"content":{"84":{"position":[[1018,12]]}},"keywords":{}}],["maco",{"_index":865,"title":{},"content":{"58":{"position":[[22,5],[614,6]]},"169":{"position":[[858,6]]}},"keywords":{}}],["macro",{"_index":5479,"title":{},"content":{"1134":{"position":[[980,6]]}},"keywords":{}}],["made",{"_index":698,"title":{},"content":{"38":{"position":[[196,4],[228,4]]},"100":{"position":[[961,4],[1197,4]]},"183":{"position":[[2052,4],[2234,4]]},"196":{"position":[[76,4]]},"217":{"position":[[2051,4]]},"218":{"position":[[2028,4]]},"221":{"position":[[954,5]]},"225":{"position":[[398,5]]},"233":{"position":[[76,4]]},"236":{"position":[[1601,4]]},"277":{"position":[[200,4]]},"279":{"position":[[186,4]]},"291":{"position":[[1870,4]]},"302":{"position":[[1779,4]]},"331":{"position":[[612,5]]},"364":{"position":[[453,4]]},"531":{"position":[[410,4]]},"762":{"position":[[436,4]]},"775":{"position":[[436,4]]},"802":{"position":[[436,4]]},"817":{"position":[[436,4]]},"833":{"position":[[436,4]]},"909":{"position":[[693,5]]},"925":{"position":[[693,5]]},"936":{"position":[[693,5]]},"952":{"position":[[693,5]]},"970":{"position":[[693,5]]},"1077":{"position":[[413,4]]},"1154":{"position":[[432,4]]},"1201":{"position":[[51,4]]},"1293":{"position":[[51,4]]},"1307":{"position":[[51,4]]},"1317":{"position":[[51,4]]},"1330":{"position":[[51,4]]},"1341":{"position":[[51,4]]},"1352":{"position":[[51,4]]},"1359":{"position":[[51,4]]},"1380":{"position":[[51,4]]},"1404":{"position":[[51,4]]},"1415":{"position":[[51,4]]},"1432":{"position":[[51,4]]}},"keywords":{}}],["mailboxesgroupsproductsrolessatisfact",{"_index":3913,"title":{},"content":{"506":{"position":[[228,40]]}},"keywords":{}}],["mailchimp",{"_index":3361,"title":{"730":{"position":[[0,9]]},"732":{"position":[[34,9]]}},"content":{"364":{"position":[[2496,9]]},"731":{"position":[[41,9]]},"732":{"position":[[3,9]]},"733":{"position":[[3,9],[23,9]]},"734":{"position":[[250,9]]},"735":{"position":[[333,9],[444,9]]}},"keywords":{}}],["mailchimp:dev",{"_index":3362,"title":{},"content":{"364":{"position":[[2552,13]]},"736":{"position":[[89,13]]}},"keywords":{}}],["main",{"_index":640,"title":{},"content":{"29":{"position":[[15,4]]},"63":{"position":[[182,4]]},"268":{"position":[[1596,4]]},"269":{"position":[[1117,4]]},"286":{"position":[[259,4],[345,4]]},"1189":{"position":[[134,4]]},"1261":{"position":[[197,4]]},"1455":{"position":[[24,4]]}},"keywords":{}}],["mainli",{"_index":3174,"title":{},"content":{"326":{"position":[[34,6]]}},"keywords":{}}],["maintain",{"_index":664,"title":{},"content":{"32":{"position":[[253,9]]},"42":{"position":[[656,8]]},"52":{"position":[[78,9]]},"107":{"position":[[766,11]]},"113":{"position":[[655,9]]},"121":{"position":[[63,8],[1985,8]]},"125":{"position":[[782,8]]},"164":{"position":[[1484,9]]},"198":{"position":[[851,8]]},"203":{"position":[[190,8]]},"208":{"position":[[599,8]]},"209":{"position":[[870,8],[1519,8]]},"232":{"position":[[552,11]]},"239":{"position":[[2321,8],[2666,11]]},"977":{"position":[[442,8]]},"1437":{"position":[[1273,8]]},"1461":{"position":[[1760,13]]},"1467":{"position":[[1941,9]]},"1477":{"position":[[2845,8]]}},"keywords":{}}],["mainten",{"_index":2245,"title":{"1165":{"position":[[6,12]]}},"content":{"208":{"position":[[305,12]]},"1165":{"position":[[65,11],[148,11],[203,11]]}},"keywords":{}}],["major",{"_index":4696,"title":{},"content":{"788":{"position":[[34,5]]},"902":{"position":[[63,5]]},"914":{"position":[[63,5]]},"1039":{"position":[[61,5]]}},"keywords":{}}],["make",{"_index":162,"title":{},"content":{"4":{"position":[[282,4]]},"34":{"position":[[245,4]]},"41":{"position":[[259,4]]},"42":{"position":[[324,6]]},"58":{"position":[[267,4]]},"61":{"position":[[1055,4]]},"74":{"position":[[792,5]]},"82":{"position":[[3006,4]]},"92":{"position":[[774,4]]},"94":{"position":[[224,5]]},"103":{"position":[[372,4]]},"105":{"position":[[941,5]]},"121":{"position":[[1905,5]]},"162":{"position":[[766,4]]},"166":{"position":[[647,4]]},"169":{"position":[[506,4]]},"173":{"position":[[953,4]]},"190":{"position":[[1296,4]]},"202":{"position":[[154,4]]},"203":{"position":[[25,4]]},"204":{"position":[[206,4]]},"206":{"position":[[745,4]]},"212":{"position":[[223,4]]},"218":{"position":[[959,4]]},"230":{"position":[[778,4]]},"232":{"position":[[664,4],[881,4],[970,4]]},"237":{"position":[[558,4]]},"238":{"position":[[41,4]]},"240":{"position":[[4986,4]]},"242":{"position":[[103,4]]},"243":{"position":[[217,4]]},"253":{"position":[[313,4],[3109,4]]},"255":{"position":[[1058,4]]},"259":{"position":[[1421,6],[2967,6]]},"264":{"position":[[14,4],[151,4]]},"271":{"position":[[75,4]]},"275":{"position":[[173,4]]},"290":{"position":[[1523,4]]},"295":{"position":[[132,4]]},"305":{"position":[[566,4]]},"309":{"position":[[548,4],[1018,4]]},"313":{"position":[[313,4]]},"316":{"position":[[1383,4]]},"319":{"position":[[316,5],[1200,5]]},"321":{"position":[[1175,4]]},"322":{"position":[[1154,4]]},"323":{"position":[[1773,4]]},"324":{"position":[[692,4]]},"330":{"position":[[479,5]]},"331":{"position":[[456,5]]},"375":{"position":[[223,6]]},"429":{"position":[[869,6]]},"430":{"position":[[211,4]]},"500":{"position":[[24,4]]},"548":{"position":[[472,4]]},"553":{"position":[[231,4]]},"562":{"position":[[24,4]]},"577":{"position":[[486,5]]},"584":{"position":[[1165,4]]},"588":{"position":[[481,5]]},"685":{"position":[[262,6]]},"764":{"position":[[527,4]]},"777":{"position":[[527,4]]},"804":{"position":[[525,4]]},"819":{"position":[[525,4]]},"835":{"position":[[525,4]]},"840":{"position":[[635,4]]},"849":{"position":[[1110,4]]},"898":{"position":[[1637,4]]},"922":{"position":[[1694,4]]},"944":{"position":[[88,4]]},"964":{"position":[[438,6]]},"1008":{"position":[[869,4],[1591,4]]},"1047":{"position":[[767,4],[842,4]]},"1055":{"position":[[767,4],[842,4]]},"1063":{"position":[[767,4],[842,4]]},"1118":{"position":[[1005,4]]},"1154":{"position":[[96,6],[319,6]]},"1160":{"position":[[274,4]]},"1452":{"position":[[2067,6]]},"1453":{"position":[[1069,5]]},"1461":{"position":[[1722,5]]},"1462":{"position":[[201,5]]},"1476":{"position":[[819,4]]},"1477":{"position":[[656,5]]}},"keywords":{}}],["malform",{"_index":3625,"title":{},"content":{"419":{"position":[[2004,9]]},"441":{"position":[[613,9]]},"504":{"position":[[1633,9]]},"547":{"position":[[2006,9]]},"639":{"position":[[1631,9]]},"1023":{"position":[[1987,9]]}},"keywords":{}}],["manag",{"_index":557,"title":{"430":{"position":[[4,7]]},"1288":{"position":[[9,7]]},"1448":{"position":[[0,8]]}},"content":{"21":{"position":[[49,7],[175,6]]},"30":{"position":[[211,8]]},"31":{"position":[[294,6]]},"34":{"position":[[532,7]]},"49":{"position":[[214,7]]},"63":{"position":[[749,6]]},"64":{"position":[[534,7]]},"82":{"position":[[577,10],[3227,7]]},"84":{"position":[[1056,10],[1329,7]]},"96":{"position":[[749,7]]},"100":{"position":[[31,8]]},"103":{"position":[[253,7]]},"108":{"position":[[292,7]]},"110":{"position":[[1382,8]]},"112":{"position":[[785,8]]},"120":{"position":[[2650,7]]},"121":{"position":[[329,7]]},"137":{"position":[[567,6]]},"190":{"position":[[1318,6]]},"199":{"position":[[140,7]]},"205":{"position":[[337,7]]},"211":{"position":[[662,6]]},"217":{"position":[[302,8]]},"234":{"position":[[259,7]]},"246":{"position":[[112,6]]},"278":{"position":[[453,7]]},"281":{"position":[[2920,7]]},"290":{"position":[[279,8]]},"301":{"position":[[232,8]]},"320":{"position":[[585,6],[2205,7],[2256,10]]},"324":{"position":[[1086,6]]},"329":{"position":[[611,10]]},"430":{"position":[[14,7]]},"464":{"position":[[257,6]]},"477":{"position":[[373,10]]},"489":{"position":[[269,7]]},"515":{"position":[[843,10]]},"548":{"position":[[28,11]]},"553":{"position":[[151,7]]},"554":{"position":[[79,7],[189,7]]},"556":{"position":[[1637,7],[1832,7],[1912,7],[1994,7]]},"598":{"position":[[337,10]]},"662":{"position":[[269,7]]},"677":{"position":[[269,7]]},"692":{"position":[[269,7]]},"724":{"position":[[298,10]]},"726":{"position":[[255,10]]},"764":{"position":[[956,7],[1026,7]]},"777":{"position":[[956,7],[1026,7]]},"804":{"position":[[954,7],[1024,7]]},"819":{"position":[[954,7],[1024,7]]},"821":{"position":[[475,7]]},"835":{"position":[[954,7],[1024,7]]},"840":{"position":[[537,6],[923,6],[1645,6]]},"849":{"position":[[480,6],[1008,6],[1536,6],[2686,6]]},"907":{"position":[[1666,7],[1842,7]]},"912":{"position":[[486,7]]},"923":{"position":[[1666,7],[1842,7]]},"968":{"position":[[1666,7],[1842,7]]},"989":{"position":[[877,6],[976,6]]},"1004":{"position":[[960,6],[1059,6]]},"1031":{"position":[[257,7]]},"1034":{"position":[[827,6]]},"1234":{"position":[[22,7]]},"1276":{"position":[[359,6]]},"1313":{"position":[[1416,7],[1592,7]]},"1337":{"position":[[1416,7],[1592,7]]},"1461":{"position":[[5129,6]]}},"keywords":{}}],["mandatori",{"_index":2241,"title":{},"content":{"207":{"position":[[1366,9]]},"779":{"position":[[181,9]]},"1268":{"position":[[531,9]]},"1479":{"position":[[498,9]]}},"keywords":{}}],["mandatory_id",{"_index":5917,"title":{},"content":{"1250":{"position":[[182,12]]}},"keywords":{}}],["mani",{"_index":219,"title":{},"content":{"6":{"position":[[371,4]]},"8":{"position":[[176,4]]},"26":{"position":[[242,5]]},"38":{"position":[[176,4]]},"49":{"position":[[82,4],[132,4]]},"50":{"position":[[141,4]]},"52":{"position":[[88,4]]},"60":{"position":[[943,4]]},"68":{"position":[[4,4]]},"70":{"position":[[354,4]]},"74":{"position":[[385,4]]},"76":{"position":[[179,4]]},"84":{"position":[[142,4]]},"91":{"position":[[4,4]]},"101":{"position":[[356,4]]},"105":{"position":[[487,4],[1459,4]]},"109":{"position":[[46,4]]},"113":{"position":[[225,4]]},"119":{"position":[[57,4]]},"120":{"position":[[813,4]]},"122":{"position":[[1,4]]},"124":{"position":[[166,4]]},"138":{"position":[[2451,4]]},"142":{"position":[[2529,4]]},"158":{"position":[[162,4]]},"164":{"position":[[298,4]]},"165":{"position":[[293,4]]},"182":{"position":[[191,4]]},"189":{"position":[[1561,4]]},"217":{"position":[[1857,4]]},"253":{"position":[[3173,4]]},"268":{"position":[[1627,4]]},"269":{"position":[[1148,4]]},"296":{"position":[[1692,4]]},"305":{"position":[[446,4]]},"320":{"position":[[1378,4]]},"322":{"position":[[11,4]]},"325":{"position":[[639,4]]},"377":{"position":[[796,4]]},"387":{"position":[[149,4]]},"448":{"position":[[149,4]]},"556":{"position":[[149,4]]},"611":{"position":[[149,4]]},"655":{"position":[[324,4]]},"849":{"position":[[1876,4]]},"859":{"position":[[149,4]]},"870":{"position":[[169,4],[730,4],[926,4]]},"922":{"position":[[2348,4]]},"964":{"position":[[132,4]]},"1036":{"position":[[86,4]]},"1070":{"position":[[149,4]]},"1085":{"position":[[205,4]]},"1087":{"position":[[1,4]]},"1123":{"position":[[443,4]]},"1289":{"position":[[1372,4]]},"1298":{"position":[[1204,4]]},"1303":{"position":[[1083,4]]},"1310":{"position":[[693,4]]},"1322":{"position":[[1591,4]]},"1335":{"position":[[1239,4]]},"1346":{"position":[[1205,4]]},"1435":{"position":[[548,4]]},"1437":{"position":[[156,4]]},"1440":{"position":[[1421,4]]},"1443":{"position":[[258,4]]}},"keywords":{}}],["manipul",{"_index":1392,"title":{"761":{"position":[[5,12]]},"774":{"position":[[5,12]]},"801":{"position":[[5,12]]},"816":{"position":[[5,12]]},"832":{"position":[[5,12]]}},"content":{"97":{"position":[[396,10]]},"761":{"position":[[133,12]]},"774":{"position":[[133,12]]},"801":{"position":[[133,12]]},"816":{"position":[[133,12]]},"832":{"position":[[133,12]]},"1438":{"position":[[159,11]]}},"keywords":{}}],["manner",{"_index":3137,"title":{},"content":{"321":{"position":[[521,7]]}},"keywords":{}}],["manual",{"_index":347,"title":{"384":{"position":[[15,8]]},"446":{"position":[[15,8]]},"515":{"position":[[12,8]]},"524":{"position":[[40,8]]},"532":{"position":[[40,8]]},"554":{"position":[[40,9]]},"571":{"position":[[15,8]]},"582":{"position":[[15,8]]},"609":{"position":[[15,8]]},"617":{"position":[[40,9]]},"645":{"position":[[40,9]]},"652":{"position":[[40,9]]},"718":{"position":[[40,9]]},"733":{"position":[[40,9]]},"857":{"position":[[10,6]]},"988":{"position":[[40,9]]},"1003":{"position":[[40,9]]},"1228":{"position":[[0,6]]},"1245":{"position":[[0,6]]}},"content":{"11":{"position":[[1741,8]]},"13":{"position":[[557,8]]},"33":{"position":[[224,9]]},"75":{"position":[[377,8]]},"81":{"position":[[937,8]]},"82":{"position":[[1184,8]]},"126":{"position":[[564,8]]},"162":{"position":[[875,9]]},"203":{"position":[[330,8],[493,7]]},"208":{"position":[[225,8]]},"228":{"position":[[721,9],[1057,8],[1322,8]]},"229":{"position":[[741,8]]},"259":{"position":[[304,8],[1993,8]]},"307":{"position":[[838,8]]},"308":{"position":[[748,8],[792,8]]},"309":{"position":[[1951,8]]},"366":{"position":[[646,9],[978,9]]},"382":{"position":[[107,8]]},"384":{"position":[[35,9]]},"387":{"position":[[58,6],[322,6],[440,9]]},"388":{"position":[[40,6]]},"444":{"position":[[110,8]]},"448":{"position":[[58,6]]},"449":{"position":[[40,6]]},"473":{"position":[[40,6]]},"480":{"position":[[311,8]]},"513":{"position":[[109,8],[235,6]]},"515":{"position":[[14,8]]},"517":{"position":[[743,6]]},"518":{"position":[[40,6]]},"522":{"position":[[97,9]]},"527":{"position":[[40,6]]},"530":{"position":[[97,9]]},"534":{"position":[[58,6],[616,6],[725,6]]},"535":{"position":[[40,6]]},"551":{"position":[[97,9],[234,6]]},"556":{"position":[[58,6]]},"557":{"position":[[40,6]]},"569":{"position":[[116,9]]},"573":{"position":[[389,6]]},"575":{"position":[[26,6]]},"581":{"position":[[440,9]]},"584":{"position":[[49,6],[356,6]]},"586":{"position":[[26,6]]},"607":{"position":[[114,9]]},"611":{"position":[[58,6],[346,6]]},"612":{"position":[[40,6]]},"683":{"position":[[258,9]]},"685":{"position":[[54,6]]},"686":{"position":[[27,6]]},"716":{"position":[[99,9]]},"718":{"position":[[328,8]]},"720":{"position":[[58,6],[539,9]]},"721":{"position":[[40,6]]},"724":{"position":[[397,8]]},"731":{"position":[[90,9]]},"757":{"position":[[2525,9]]},"770":{"position":[[2525,9]]},"797":{"position":[[2533,9]]},"805":{"position":[[242,8]]},"812":{"position":[[2533,9]]},"820":{"position":[[242,8]]},"828":{"position":[[2533,9]]},"836":{"position":[[242,8]]},"847":{"position":[[41,6]]},"855":{"position":[[255,9],[330,6]]},"859":{"position":[[58,6],[379,6]]},"860":{"position":[[40,6]]},"903":{"position":[[672,9],[1004,9]]},"912":{"position":[[1298,8]]},"915":{"position":[[672,9],[1004,9]]},"922":{"position":[[1875,8],[2654,6]]},"930":{"position":[[672,9],[1004,9]]},"963":{"position":[[826,9],[1158,9]]},"988":{"position":[[110,8]]},"989":{"position":[[596,8]]},"991":{"position":[[58,6]]},"1003":{"position":[[110,8]]},"1004":{"position":[[679,8]]},"1009":{"position":[[58,6]]},"1010":{"position":[[40,6]]},"1040":{"position":[[212,8]]},"1047":{"position":[[266,8]]},"1050":{"position":[[212,8]]},"1055":{"position":[[266,8]]},"1058":{"position":[[212,8]]},"1063":{"position":[[266,8]]},"1067":{"position":[[555,6]]},"1070":{"position":[[58,6]]},"1071":{"position":[[40,6]]},"1085":{"position":[[58,6],[443,8]]},"1136":{"position":[[197,8]]},"1149":{"position":[[326,8]]},"1228":{"position":[[1,6]]},"1230":{"position":[[250,6],[437,9]]},"1231":{"position":[[26,6]]},"1243":{"position":[[1168,8],[1278,6]]},"1247":{"position":[[49,6],[421,6]]},"1248":{"position":[[26,6]]},"1309":{"position":[[197,8]]},"1332":{"position":[[197,8]]},"1343":{"position":[[197,8]]},"1426":{"position":[[341,8]]},"1449":{"position":[[111,8],[257,8]]}},"keywords":{}}],["manually).someon",{"_index":346,"title":{},"content":{"11":{"position":[[1723,17]]}},"keywords":{}}],["manually).th",{"_index":342,"title":{},"content":{"11":{"position":[[1543,13]]}},"keywords":{}}],["manually,bi",{"_index":4314,"title":{},"content":{"614":{"position":[[100,11]]}},"keywords":{}}],["manually.at",{"_index":5887,"title":{},"content":{"1226":{"position":[[232,11]]}},"keywords":{}}],["map",{"_index":7,"title":{"46":{"position":[[8,9]]},"98":{"position":[[9,8]]},"116":{"position":[[8,8]]},"1393":{"position":[[20,8]]}},"content":{"1":{"position":[[69,6],[881,8]]},"21":{"position":[[808,8]]},"40":{"position":[[198,4]]},"46":{"position":[[85,8],[110,4],[206,8]]},"54":{"position":[[407,6]]},"66":{"position":[[366,3]]},"77":{"position":[[298,6]]},"97":{"position":[[555,6]]},"98":{"position":[[284,3],[400,4],[714,6],[1134,4]]},"102":{"position":[[385,4]]},"107":{"position":[[67,6],[2534,7],[3203,4]]},"113":{"position":[[152,3]]},"117":{"position":[[56,7]]},"119":{"position":[[367,4]]},"120":{"position":[[734,3]]},"122":{"position":[[1097,5],[1920,3]]},"144":{"position":[[592,3]]},"154":{"position":[[1146,9],[1169,8],[1731,9]]},"164":{"position":[[237,3],[371,3],[601,4]]},"173":{"position":[[1138,8]]},"192":{"position":[[1614,6]]},"217":{"position":[[1179,6]]},"218":{"position":[[746,6]]},"230":{"position":[[170,6]]},"238":{"position":[[461,6]]},"290":{"position":[[1198,4]]},"291":{"position":[[986,6]]},"302":{"position":[[978,6]]},"381":{"position":[[569,6]]},"421":{"position":[[168,6]]},"443":{"position":[[527,6]]},"451":{"position":[[177,6]]},"457":{"position":[[181,6]]},"463":{"position":[[287,6]]},"470":{"position":[[50,6]]},"506":{"position":[[444,6]]},"512":{"position":[[204,6]]},"521":{"position":[[357,6]]},"529":{"position":[[736,6]]},"537":{"position":[[193,6]]},"550":{"position":[[441,6]]},"558":{"position":[[119,6]]},"568":{"position":[[251,6]]},"580":{"position":[[193,6]]},"590":{"position":[[103,8],[812,6]]},"605":{"position":[[399,6]]},"606":{"position":[[326,6]]},"622":{"position":[[405,6]]},"628":{"position":[[469,6]]},"649":{"position":[[67,6]]},"667":{"position":[[254,6]]},"682":{"position":[[225,6]]},"697":{"position":[[594,6]]},"703":{"position":[[159,6]]},"709":{"position":[[847,6]]},"715":{"position":[[216,6]]},"738":{"position":[[771,6]]},"744":{"position":[[161,6]]},"779":{"position":[[100,8]]},"854":{"position":[[110,6]]},"882":{"position":[[121,6]]},"888":{"position":[[176,6]]},"956":{"position":[[197,6]]},"979":{"position":[[271,6]]},"994":{"position":[[129,6]]},"1012":{"position":[[256,6]]},"1025":{"position":[[403,6]]},"1047":{"position":[[447,6]]},"1055":{"position":[[447,6]]},"1063":{"position":[[447,6]]},"1065":{"position":[[128,6]]},"1073":{"position":[[380,6]]},"1080":{"position":[[837,6]]},"1099":{"position":[[501,6]]},"1104":{"position":[[199,6]]},"1110":{"position":[[519,6]]},"1123":{"position":[[589,3],[653,3]]},"1128":{"position":[[436,6]]},"1195":{"position":[[459,8]]},"1200":{"position":[[61,8],[136,8],[264,7],[391,8],[752,7]]},"1201":{"position":[[324,8],[438,8]]},"1250":{"position":[[100,8]]},"1379":{"position":[[1925,3]]},"1403":{"position":[[1925,3]]},"1414":{"position":[[1925,3]]},"1448":{"position":[[426,3],[730,4]]},"1477":{"position":[[691,5],[1199,3]]}},"keywords":{}}],["mappingsdetermin",{"_index":1103,"title":{},"content":{"77":{"position":[[255,17]]}},"keywords":{}}],["mapreduc",{"_index":1513,"title":{},"content":{"107":{"position":[[150,10]]},"113":{"position":[[261,9]]},"322":{"position":[[235,9],[525,9]]}},"keywords":{}}],["maps"",{"_index":6722,"title":{},"content":{"1477":{"position":[[1649,11],[3988,10]]}},"keywords":{}}],["mariadb",{"_index":3305,"title":{"749":{"position":[[0,7]]},"752":{"position":[[12,8]]},"753":{"position":[[19,8]]},"754":{"position":[[12,7]]},"765":{"position":[[15,7]]}},"content":{"363":{"position":[[1569,7]]},"750":{"position":[[38,7]]},"753":{"position":[[32,7],[72,7],[736,7]]},"754":{"position":[[978,7]]},"755":{"position":[[12,7]]},"756":{"position":[[250,7]]},"757":{"position":[[2389,7]]},"759":{"position":[[12,7]]},"764":{"position":[[115,7]]},"766":{"position":[[38,7]]},"767":{"position":[[852,8],[1425,7],[1690,7],[2294,7]]},"768":{"position":[[12,7]]},"769":{"position":[[250,7]]},"770":{"position":[[2389,7]]},"772":{"position":[[23,7]]},"777":{"position":[[115,7]]}},"keywords":{}}],["mariadb'",{"_index":4579,"title":{},"content":{"750":{"position":[[364,9]]},"754":{"position":[[1,9]]},"766":{"position":[[364,9]]}},"keywords":{}}],["mariadb10.6typ",{"_index":4666,"title":{},"content":{"767":{"position":[[966,16]]}},"keywords":{}}],["mariadb:dev",{"_index":3306,"title":{},"content":{"363":{"position":[[1623,11]]},"758":{"position":[[149,11]]},"771":{"position":[[149,11]]}},"keywords":{}}],["mark",{"_index":5519,"title":{},"content":{"1140":{"position":[[146,6]]},"1316":{"position":[[146,6]]},"1340":{"position":[[146,6]]},"1351":{"position":[[146,6]]},"1370":{"position":[[142,6]]},"1431":{"position":[[169,6]]}},"keywords":{}}],["market",{"_index":3333,"title":{"511":{"position":[[9,9]]},"1024":{"position":[[9,9]]},"1079":{"position":[[7,9]]}},"content":{"364":{"position":[[1087,9]]},"373":{"position":[[12,6],[245,6]]},"377":{"position":[[1322,6]]},"385":{"position":[[356,9]]},"515":{"position":[[135,9],[159,9],[546,9],[568,9],[604,9]]},"516":{"position":[[259,9]]},"517":{"position":[[150,9],[326,9],[708,9],[4034,9]]},"718":{"position":[[91,9],[155,9]]},"726":{"position":[[208,9]]},"1026":{"position":[[12,9]]},"1082":{"position":[[22,9]]},"1084":{"position":[[257,9]]}},"keywords":{}}],["marketing:dev",{"_index":3334,"title":{},"content":{"364":{"position":[[1152,13]]},"518":{"position":[[168,13]]},"1086":{"position":[[178,13]]}},"keywords":{}}],["marketo",{"_index":3363,"title":{"737":{"position":[[0,7]]}},"content":{"364":{"position":[[2566,7]]},"738":{"position":[[62,8],[298,7],[428,7],[515,7],[534,7],[579,7],[594,7],[639,7],[661,7],[709,7],[727,7]]},"739":{"position":[[68,7],[96,7],[119,7]]},"740":{"position":[[250,7]]},"741":{"position":[[103,7],[205,7],[423,7],[549,7]]}},"keywords":{}}],["marketo.dev",{"_index":3364,"title":{},"content":{"364":{"position":[[2620,11]]}},"keywords":{}}],["marketo:dev",{"_index":4555,"title":{},"content":{"742":{"position":[[90,11]]}},"keywords":{}}],["marketplac",{"_index":3480,"title":{},"content":{"385":{"position":[[411,13],[532,13],[757,12]]}},"keywords":{}}],["massiv",{"_index":4273,"title":{},"content":{"595":{"position":[[1440,7]]}},"keywords":{}}],["master",{"_index":6059,"title":{},"content":{"1292":{"position":[[2805,6]]},"1306":{"position":[[2805,6]]},"1329":{"position":[[2805,6]]}},"keywords":{}}],["master_auto_p",{"_index":6062,"title":{},"content":{"1292":{"position":[[2846,13]]},"1306":{"position":[[2846,13]]},"1329":{"position":[[2846,13]]}},"keywords":{}}],["master_bind",{"_index":6064,"title":{},"content":{"1292":{"position":[[2904,11]]},"1306":{"position":[[2904,11]]},"1329":{"position":[[2904,11]]}},"keywords":{}}],["master_compr",{"_index":6065,"title":{},"content":{"1292":{"position":[[2943,13]]},"1306":{"position":[[2943,13]]},"1329":{"position":[[2943,13]]}},"keywords":{}}],["master_connec",{"_index":6066,"title":{},"content":{"1292":{"position":[[2957,13]]},"1306":{"position":[[2957,13]]},"1329":{"position":[[2957,13]]}},"keywords":{}}],["master_delay",{"_index":6068,"title":{},"content":{"1292":{"position":[[3007,12]]},"1306":{"position":[[3007,12]]},"1329":{"position":[[3007,12]]}},"keywords":{}}],["master_heartb",{"_index":6071,"title":{},"content":{"1292":{"position":[[3050,13]]},"1306":{"position":[[3050,13]]},"1329":{"position":[[3050,13]]}},"keywords":{}}],["master_host",{"_index":6073,"title":{},"content":{"1292":{"position":[[3098,11]]},"1306":{"position":[[3098,11]]},"1329":{"position":[[3098,11]]}},"keywords":{}}],["master_log_fi",{"_index":6075,"title":{},"content":{"1292":{"position":[[3145,13]]},"1306":{"position":[[3145,13]]},"1329":{"position":[[3145,13]]}},"keywords":{}}],["master_log_po",{"_index":6080,"title":{},"content":{"1292":{"position":[[3209,13]]},"1306":{"position":[[3209,13]]},"1329":{"position":[[3209,13]]}},"keywords":{}}],["master_passwo",{"_index":6082,"title":{},"content":{"1292":{"position":[[3262,13]]},"1306":{"position":[[3262,13]]},"1329":{"position":[[3262,13]]}},"keywords":{}}],["master_port",{"_index":6084,"title":{},"content":{"1292":{"position":[[3308,11]]},"1306":{"position":[[3308,11]]},"1329":{"position":[[3308,11]]}},"keywords":{}}],["master_publ",{"_index":6088,"title":{},"content":{"1292":{"position":[[3356,13]]},"1306":{"position":[[3356,13]]},"1329":{"position":[[3356,13]]}},"keywords":{}}],["master_serv",{"_index":6094,"title":{},"content":{"1292":{"position":[[3464,13]]},"1306":{"position":[[3464,13]]},"1329":{"position":[[3464,13]]}},"keywords":{}}],["master_ssl",{"_index":6096,"title":{},"content":{"1292":{"position":[[3514,10]]},"1306":{"position":[[3514,10]]},"1329":{"position":[[3514,10]]}},"keywords":{}}],["master_ssl_c",{"_index":6101,"title":{},"content":{"1292":{"position":[[3652,13]]},"1306":{"position":[[3652,13]]},"1329":{"position":[[3652,13]]}},"keywords":{}}],["master_ssl_ca",{"_index":6099,"title":{},"content":{"1292":{"position":[[3557,13],[3603,13]]},"1306":{"position":[[3557,13],[3603,13]]},"1329":{"position":[[3557,13],[3603,13]]}},"keywords":{}}],["master_ssl_ci",{"_index":6103,"title":{},"content":{"1292":{"position":[[3700,13]]},"1306":{"position":[[3700,13]]},"1329":{"position":[[3700,13]]}},"keywords":{}}],["master_ssl_cr",{"_index":6106,"title":{},"content":{"1292":{"position":[[3750,13],[3801,13]]},"1306":{"position":[[3750,13],[3801,13]]},"1329":{"position":[[3750,13],[3801,13]]}},"keywords":{}}],["master_ssl_k",{"_index":6111,"title":{},"content":{"1292":{"position":[[3841,13]]},"1306":{"position":[[3841,13]]},"1329":{"position":[[3841,13]]}},"keywords":{}}],["master_ssl_v",{"_index":6113,"title":{},"content":{"1292":{"position":[[3881,13]]},"1306":{"position":[[3881,13]]},"1329":{"position":[[3881,13]]}},"keywords":{}}],["master_tls_ci",{"_index":6116,"title":{},"content":{"1292":{"position":[[3932,13]]},"1306":{"position":[[3932,13]]},"1329":{"position":[[3932,13]]}},"keywords":{}}],["master_tls_v",{"_index":6121,"title":{},"content":{"1292":{"position":[[3978,13]]},"1306":{"position":[[3978,13]]},"1329":{"position":[[3978,13]]}},"keywords":{}}],["master_us",{"_index":6123,"title":{},"content":{"1292":{"position":[[4027,11]]},"1306":{"position":[[4027,11]]},"1329":{"position":[[4027,11]]}},"keywords":{}}],["master_zstd_c",{"_index":6125,"title":{},"content":{"1292":{"position":[[4057,13]]},"1306":{"position":[[4057,13]]},"1329":{"position":[[4057,13]]}},"keywords":{}}],["masterretri",{"_index":6092,"title":{},"content":{"1292":{"position":[[3408,11]]},"1306":{"position":[[3408,11]]},"1329":{"position":[[3408,11]]}},"keywords":{}}],["match",{"_index":494,"title":{},"content":{"17":{"position":[[421,7],[508,8],[782,8],[839,5]]},"23":{"position":[[17,5]]},"33":{"position":[[379,5]]},"41":{"position":[[573,5]]},"43":{"position":[[404,5]]},"106":{"position":[[324,5]]},"129":{"position":[[63,5],[478,7]]},"138":{"position":[[724,5]]},"141":{"position":[[845,5]]},"142":{"position":[[687,5]]},"190":{"position":[[1067,5]]},"219":{"position":[[216,8]]},"255":{"position":[[831,7]]},"286":{"position":[[394,5]]},"294":{"position":[[133,7]]},"301":{"position":[[977,5],[1082,7]]},"316":{"position":[[1156,7]]},"417":{"position":[[428,7],[1142,5],[1251,7]]},"438":{"position":[[428,7],[1658,5],[1767,7]]},"502":{"position":[[180,5],[289,7],[888,7]]},"545":{"position":[[428,7],[751,5],[875,7]]},"594":{"position":[[941,5]]},"1021":{"position":[[844,5],[976,7],[1474,7]]},"1140":{"position":[[2463,5],[2500,7]]},"1203":{"position":[[473,8]]},"1292":{"position":[[4106,5]]},"1306":{"position":[[4106,5]]},"1316":{"position":[[2463,5],[2500,7]]},"1329":{"position":[[4106,5]]},"1340":{"position":[[2463,5],[2500,7]]},"1351":{"position":[[2463,5],[2500,7]]},"1370":{"position":[[471,5]]},"1379":{"position":[[1969,5]]},"1384":{"position":[[745,7]]},"1403":{"position":[[1969,5]]},"1414":{"position":[[1969,5]]},"1429":{"position":[[417,7]]},"1431":{"position":[[2486,5],[2523,7]]},"1440":{"position":[[1627,7]]},"1461":{"position":[[1595,5]]},"1475":{"position":[[255,7]]}},"keywords":{}}],["match_numb",{"_index":5634,"title":{},"content":{"1140":{"position":[[2547,12]]},"1316":{"position":[[2547,12]]},"1340":{"position":[[2547,12]]},"1351":{"position":[[2547,12]]},"1431":{"position":[[2570,12]]}},"keywords":{}}],["match_recogn",{"_index":5637,"title":{},"content":{"1140":{"position":[[2593,15]]},"1316":{"position":[[2593,15]]},"1340":{"position":[[2593,15]]},"1351":{"position":[[2593,15]]},"1431":{"position":[[2616,15]]}},"keywords":{}}],["matchfil",{"_index":5204,"title":{},"content":{"1021":{"position":[[832,11]]}},"keywords":{}}],["matchkey",{"_index":3592,"title":{},"content":{"417":{"position":[[1131,10]]},"438":{"position":[[1647,10]]},"502":{"position":[[169,10]]},"503":{"position":[[140,10]]},"545":{"position":[[740,10]]}},"keywords":{}}],["materi",{"_index":223,"title":{"36":{"position":[[0,17]]},"118":{"position":[[0,16]]},"121":{"position":[[15,15]]},"126":{"position":[[47,15]]},"142":{"position":[[0,16]]},"143":{"position":[[8,17]]},"144":{"position":[[11,16]]},"151":{"position":[[0,15]]},"178":{"position":[[19,12]]},"184":{"position":[[22,12]]},"192":{"position":[[0,11]]},"218":{"position":[[9,16]]},"226":{"position":[[10,12]]},"230":{"position":[[31,16]]},"240":{"position":[[17,16]]},"291":{"position":[[0,11]]},"302":{"position":[[0,11]]},"325":{"position":[[0,12]]},"1119":{"position":[[0,15]]},"1120":{"position":[[10,15]]},"1433":{"position":[[0,15]]},"1450":{"position":[[0,15]]},"1472":{"position":[[27,16]]}},"content":{"6":{"position":[[603,15]]},"7":{"position":[[694,17]]},"8":{"position":[[525,16]]},"11":{"position":[[140,16],[397,17],[522,15],[716,16],[970,15],[1966,17]]},"13":{"position":[[735,11],[829,15],[908,15],[1322,16],[1689,15]]},"14":{"position":[[163,17],[572,12],[817,12],[1055,12]]},"17":{"position":[[73,17],[313,16]]},"20":{"position":[[703,16]]},"25":{"position":[[215,16]]},"27":{"position":[[33,17]]},"33":{"position":[[83,17]]},"34":{"position":[[105,12]]},"36":{"position":[[3,15],[183,16],[305,15],[409,16],[490,16]]},"37":{"position":[[106,12]]},"38":{"position":[[115,17]]},"42":{"position":[[152,12],[244,12],[343,16]]},"44":{"position":[[28,16],[497,15]]},"45":{"position":[[378,16],[472,15]]},"56":{"position":[[615,15]]},"66":{"position":[[177,17]]},"67":{"position":[[1681,16]]},"68":{"position":[[81,11]]},"70":{"position":[[215,17]]},"71":{"position":[[532,15]]},"72":{"position":[[575,15]]},"74":{"position":[[102,12],[726,11]]},"76":{"position":[[164,13]]},"77":{"position":[[466,16]]},"79":{"position":[[116,15]]},"80":{"position":[[231,15]]},"81":{"position":[[1025,17],[1719,11],[2537,17]]},"83":{"position":[[754,15]]},"95":{"position":[[22,17]]},"114":{"position":[[526,11],[782,16]]},"115":{"position":[[23,15],[336,13],[518,12],[895,13],[1075,13]]},"117":{"position":[[141,16]]},"119":{"position":[[1,16],[94,15],[343,11],[570,16]]},"120":{"position":[[1,16],[96,16],[165,17],[201,16],[309,16],[468,15],[741,12],[785,15],[1906,11],[2079,11],[2157,11],[2802,16]]},"121":{"position":[[6,16],[38,12],[211,15],[382,16],[640,12],[873,16],[1098,17],[1471,15],[1630,12],[1883,16],[1911,16]]},"122":{"position":[[364,15],[589,16],[665,15],[1104,17],[1304,15]]},"123":{"position":[[29,11],[479,17]]},"124":{"position":[[379,15],[969,11],[1079,15]]},"125":{"position":[[37,15],[957,12],[1391,15]]},"126":{"position":[[188,15],[270,16],[312,15],[475,16],[659,16]]},"135":{"position":[[312,13],[943,17]]},"137":{"position":[[180,19]]},"138":{"position":[[431,11],[509,16],[600,16]]},"140":{"position":[[422,11],[492,16]]},"141":{"position":[[423,11]]},"142":{"position":[[5,16],[62,16],[113,15],[188,17],[559,16],[615,15],[665,16],[706,15],[880,15],[962,15],[1155,16],[1265,15],[1357,15],[1425,15],[1510,15],[1720,15],[1835,16],[1856,15],[1932,12],[1953,15],[2070,15],[2416,15],[2448,16],[2778,15]]},"143":{"position":[[41,16],[83,15],[141,15],[199,15],[260,16]]},"144":{"position":[[42,16],[73,15],[96,16],[206,11],[338,15],[821,16]]},"151":{"position":[[33,15],[56,16]]},"152":{"position":[[27,16],[48,15],[162,16],[413,16],[963,16]]},"153":{"position":[[58,15]]},"154":{"position":[[1900,15]]},"158":{"position":[[420,16]]},"162":{"position":[[528,16],[1017,15],[1046,16]]},"163":{"position":[[700,12]]},"164":{"position":[[1257,12],[1445,15]]},"165":{"position":[[2032,13]]},"166":{"position":[[67,12],[196,12],[269,12],[531,17]]},"180":{"position":[[1,12],[186,12],[876,11]]},"184":{"position":[[13,11],[70,11],[185,16],[232,16],[275,16],[325,12]]},"185":{"position":[[277,15]]},"189":{"position":[[1237,16],[1320,11],[1455,15],[1780,15]]},"190":{"position":[[2126,11],[2168,11]]},"191":{"position":[[16,11]]},"192":{"position":[[26,16],[70,15],[200,16],[268,11],[1523,11],[2088,16],[2270,16],[2377,12]]},"193":{"position":[[103,12],[281,16]]},"208":{"position":[[815,16],[1072,15],[1148,15],[1587,16],[1900,15]]},"216":{"position":[[282,16],[360,15]]},"217":{"position":[[147,11],[2015,11],[2252,11]]},"218":{"position":[[69,11],[161,16],[355,15],[1002,11],[1309,16],[1455,11],[1829,16]]},"219":{"position":[[258,17],[289,11],[391,11],[440,11]]},"221":{"position":[[1651,15]]},"225":{"position":[[522,15]]},"227":{"position":[[34,11],[285,16]]},"228":{"position":[[397,12],[487,16],[1136,15]]},"229":{"position":[[352,16],[820,15]]},"230":{"position":[[123,16],[261,16],[343,12],[364,15],[417,15],[636,12]]},"232":{"position":[[267,15],[618,11]]},"239":{"position":[[2388,16],[2575,17]]},"240":{"position":[[109,11],[2525,16],[3144,16],[3289,13],[3376,15],[4746,12],[4883,16]]},"245":{"position":[[113,12]]},"254":{"position":[[2482,12]]},"259":{"position":[[1315,16],[1624,15],[1651,16],[1724,15],[1843,15],[2287,16],[2385,16],[2878,16],[3030,15],[3105,12]]},"263":{"position":[[543,15]]},"268":{"position":[[1547,12],[2055,11]]},"269":{"position":[[1517,11]]},"270":{"position":[[2133,11]]},"274":{"position":[[57,17],[332,12],[360,16],[1042,17],[1155,16]]},"277":{"position":[[1270,12]]},"284":{"position":[[264,16]]},"285":{"position":[[322,15]]},"286":{"position":[[185,13]]},"289":{"position":[[439,16],[515,15]]},"290":{"position":[[1485,11],[1855,11]]},"291":{"position":[[30,15],[153,16],[231,16],[279,15],[1297,16],[1355,11],[1762,16]]},"296":{"position":[[6684,15],[7140,16],[7213,15],[7574,15]]},"300":{"position":[[393,16],[462,15]]},"301":{"position":[[1581,11],[1820,11]]},"302":{"position":[[30,15],[153,16],[231,16],[279,15],[1229,16],[1280,11],[1671,16]]},"305":{"position":[[163,16],[613,16]]},"307":{"position":[[418,16],[908,16],[1464,17],[1840,15],[2332,17],[2888,16],[3004,15]]},"308":{"position":[[148,16],[261,15],[465,15],[603,13],[646,15],[771,16],[845,16],[965,15],[1083,13]]},"309":{"position":[[117,15],[264,13],[311,16],[457,12],[743,15],[833,16],[1093,15],[1182,13],[1973,15],[1992,11],[2283,17],[2890,17]]},"310":{"position":[[187,17],[278,15]]},"314":{"position":[[2023,12]]},"320":{"position":[[2058,17]]},"321":{"position":[[577,11],[1668,11],[2418,17]]},"322":{"position":[[1825,11]]},"323":{"position":[[776,11],[897,16],[1324,17],[1459,17]]},"324":{"position":[[942,12]]},"325":{"position":[[33,12],[281,11],[610,15]]},"326":{"position":[[196,13],[759,12],[1079,11],[1619,11],[1878,12]]},"329":{"position":[[96,11]]},"330":{"position":[[496,11]]},"343":{"position":[[771,17]]},"344":{"position":[[1,17],[36,16]]},"379":{"position":[[786,11],[911,15],[992,15],[1137,11]]},"602":{"position":[[792,11],[953,16]]},"660":{"position":[[844,15]]},"909":{"position":[[1125,11]]},"925":{"position":[[1125,11]]},"936":{"position":[[1125,11]]},"952":{"position":[[1125,11]]},"970":{"position":[[1125,11]]},"1123":{"position":[[1,12],[79,12],[220,12],[562,12],[828,11]]},"1124":{"position":[[259,15]]},"1125":{"position":[[112,13],[219,13],[295,12],[413,13],[589,12]]},"1126":{"position":[[1,17]]},"1136":{"position":[[70,12]]},"1137":{"position":[[121,16]]},"1138":{"position":[[328,11],[574,12],[678,15],[1735,11]]},"1139":{"position":[[1,17]]},"1143":{"position":[[43,16]]},"1144":{"position":[[91,12],[616,12],[774,13],[1336,12]]},"1145":{"position":[[1,17]]},"1146":{"position":[[1,12],[170,12]]},"1147":{"position":[[33,12],[105,15]]},"1150":{"position":[[58,16]]},"1151":{"position":[[386,11],[406,15],[663,15]]},"1152":{"position":[[1,17]]},"1155":{"position":[[319,12],[540,15]]},"1156":{"position":[[56,15],[129,12],[185,15],[233,15],[344,15],[563,16],[771,16],[862,15]]},"1157":{"position":[[68,11],[152,11],[327,12]]},"1161":{"position":[[43,16]]},"1163":{"position":[[1,17]]},"1164":{"position":[[638,12]]},"1165":{"position":[[86,12]]},"1166":{"position":[[132,12]]},"1169":{"position":[[43,16]]},"1170":{"position":[[91,12],[616,12],[774,13],[1261,12]]},"1171":{"position":[[1,17]]},"1173":{"position":[[1,12],[170,12]]},"1174":{"position":[[33,12],[105,15]]},"1178":{"position":[[122,16]]},"1179":{"position":[[490,15],[1082,12]]},"1180":{"position":[[1,17],[113,12]]},"1183":{"position":[[187,12],[461,13],[494,13],[589,12],[656,15],[1683,15],[1711,13]]},"1187":{"position":[[124,16]]},"1188":{"position":[[405,11]]},"1189":{"position":[[2,17],[362,12]]},"1195":{"position":[[128,16],[432,15]]},"1196":{"position":[[965,15]]},"1197":{"position":[[1,17],[368,12]]},"1200":{"position":[[202,11],[630,15],[714,12]]},"1201":{"position":[[155,16],[251,15],[389,16],[501,13]]},"1203":{"position":[[217,16]]},"1205":{"position":[[122,16]]},"1206":{"position":[[920,12],[1096,12]]},"1207":{"position":[[1,17],[451,12]]},"1208":{"position":[[264,12]]},"1209":{"position":[[186,16]]},"1212":{"position":[[43,16]]},"1213":{"position":[[91,12],[471,12],[1013,12]]},"1214":{"position":[[1,17]]},"1215":{"position":[[1,12],[170,12]]},"1216":{"position":[[33,12],[105,15]]},"1219":{"position":[[43,16]]},"1220":{"position":[[91,12],[471,12],[938,12]]},"1221":{"position":[[1,17]]},"1223":{"position":[[1,12],[170,12]]},"1224":{"position":[[33,12],[105,15]]},"1226":{"position":[[273,12]]},"1229":{"position":[[134,16]]},"1230":{"position":[[548,16],[1333,12]]},"1231":{"position":[[71,17]]},"1232":{"position":[[9,11],[196,13]]},"1236":{"position":[[13,15]]},"1243":{"position":[[364,12],[447,15],[489,11],[726,16],[752,13],[837,15],[908,16],[965,16]]},"1246":{"position":[[127,16]]},"1247":{"position":[[713,11],[862,11],[1119,11]]},"1248":{"position":[[71,17],[395,12]]},"1254":{"position":[[1,17]]},"1259":{"position":[[50,16]]},"1260":{"position":[[193,11],[377,15]]},"1261":{"position":[[1,17]]},"1264":{"position":[[13,15]]},"1265":{"position":[[128,11]]},"1267":{"position":[[416,13]]},"1270":{"position":[[1,17]]},"1274":{"position":[[179,12]]},"1275":{"position":[[5,15]]},"1276":{"position":[[119,15],[152,12]]},"1277":{"position":[[106,16],[1129,11]]},"1278":{"position":[[1,17]]},"1279":{"position":[[108,12],[330,12]]},"1281":{"position":[[67,12]]},"1284":{"position":[[119,16]]},"1285":{"position":[[111,11],[438,13]]},"1286":{"position":[[89,11],[303,14],[1254,11],[1356,11],[1415,15],[2570,11]]},"1287":{"position":[[1,17]]},"1293":{"position":[[155,16],[251,15]]},"1295":{"position":[[67,12]]},"1299":{"position":[[119,16]]},"1300":{"position":[[111,11],[438,13]]},"1301":{"position":[[89,11],[303,14],[1090,11],[1192,11],[1251,15],[2406,11]]},"1302":{"position":[[1,17]]},"1303":{"position":[[1525,17]]},"1307":{"position":[[155,16],[251,15]]},"1309":{"position":[[70,12]]},"1312":{"position":[[122,16]]},"1313":{"position":[[111,11],[384,12],[488,15],[1279,11]]},"1314":{"position":[[1,17]]},"1317":{"position":[[155,16],[251,15],[360,12],[921,12]]},"1319":{"position":[[67,12]]},"1323":{"position":[[119,16]]},"1324":{"position":[[111,11],[438,13]]},"1325":{"position":[[89,11],[303,14],[1254,11],[1356,11],[1415,15],[2570,11]]},"1326":{"position":[[1,17]]},"1330":{"position":[[155,16],[251,15]]},"1332":{"position":[[70,12]]},"1336":{"position":[[122,16]]},"1337":{"position":[[111,11],[384,12],[488,15],[1279,11]]},"1338":{"position":[[1,17]]},"1341":{"position":[[155,16],[251,15],[360,12],[921,12]]},"1343":{"position":[[70,12]]},"1347":{"position":[[122,16]]},"1348":{"position":[[111,11],[384,12],[488,15],[1279,11]]},"1349":{"position":[[1,17]]},"1352":{"position":[[155,16],[251,15],[360,12],[921,12]]},"1355":{"position":[[121,16]]},"1357":{"position":[[1,17],[300,12]]},"1358":{"position":[[168,12],[606,15]]},"1359":{"position":[[155,16],[251,15]]},"1363":{"position":[[1,17]]},"1366":{"position":[[6,15],[98,12]]},"1367":{"position":[[87,11]]},"1368":{"position":[[1,17]]},"1370":{"position":[[484,12]]},"1372":{"position":[[71,12]]},"1375":{"position":[[123,16]]},"1376":{"position":[[111,11],[485,11]]},"1377":{"position":[[1,17]]},"1380":{"position":[[155,16],[251,15]]},"1382":{"position":[[108,11]]},"1385":{"position":[[123,16]]},"1386":{"position":[[290,11],[461,15]]},"1387":{"position":[[36,17],[401,12],[590,17],[1027,12]]},"1391":{"position":[[113,15],[515,11],[605,15],[662,16]]},"1393":{"position":[[6,12]]},"1396":{"position":[[71,12]]},"1399":{"position":[[123,16]]},"1400":{"position":[[111,11],[485,11]]},"1401":{"position":[[1,17]]},"1404":{"position":[[155,16],[251,15]]},"1406":{"position":[[71,12]]},"1410":{"position":[[123,16]]},"1411":{"position":[[111,11],[485,11]]},"1412":{"position":[[1,17]]},"1415":{"position":[[155,16],[251,15]]},"1419":{"position":[[123,16]]},"1420":{"position":[[204,11]]},"1421":{"position":[[2,17],[388,12]]},"1425":{"position":[[73,12]]},"1426":{"position":[[125,16]]},"1427":{"position":[[111,11],[325,12],[429,15],[1039,11]]},"1428":{"position":[[1,17]]},"1429":{"position":[[163,15],[570,13]]},"1432":{"position":[[155,16],[251,15],[360,12],[949,12]]},"1435":{"position":[[37,16],[139,15],[333,15],[643,15],[776,12]]},"1436":{"position":[[52,17]]},"1437":{"position":[[491,15],[682,15]]},"1440":{"position":[[82,16],[856,12]]},"1443":{"position":[[1056,15]]},"1446":{"position":[[48,17],[180,16],[262,17]]},"1447":{"position":[[38,15],[253,15],[384,16]]},"1448":{"position":[[118,16]]},"1449":{"position":[[52,15],[397,16]]},"1451":{"position":[[45,15],[80,15],[171,15],[390,15],[772,15],[1048,15]]},"1452":{"position":[[3,15],[359,15],[1648,15],[2087,15],[2230,16],[2567,15]]},"1453":{"position":[[58,15],[664,15],[1487,15]]},"1455":{"position":[[52,16]]},"1459":{"position":[[611,16]]},"1461":{"position":[[2813,12],[2883,11],[3408,16]]},"1469":{"position":[[60,13]]},"1470":{"position":[[131,16],[331,11],[536,16],[675,16],[1217,17]]},"1472":{"position":[[9,11],[193,11],[444,15],[537,12],[856,15]]},"1473":{"position":[[211,16]]},"1475":{"position":[[702,12],[715,15],[769,15],[940,15],[1079,16],[1103,15]]},"1479":{"position":[[53,15],[221,16],[272,15],[667,13],[792,16]]},"1480":{"position":[[102,17],[138,16],[246,16],[405,15]]}},"keywords":{}}],["materialization'",{"_index":6395,"title":{},"content":{"1388":{"position":[[725,17]]},"1452":{"position":[[1589,17]]},"1453":{"position":[[1264,17]]},"1470":{"position":[[1306,17]]}},"keywords":{}}],["materialization(",{"_index":1821,"title":{},"content":{"142":{"position":[[528,19]]}},"keywords":{}}],["materialization.it'",{"_index":5853,"title":{},"content":{"1203":{"position":[[130,20]]}},"keywords":{}}],["materialization.pend",{"_index":1826,"title":{},"content":{"142":{"position":[[1227,23]]}},"keywords":{}}],["materializations.db",{"_index":6619,"title":{},"content":{"1461":{"position":[[3657,19]]}},"keywords":{}}],["materializations.monitor",{"_index":1747,"title":{},"content":{"135":{"position":[[400,24]]}},"keywords":{}}],["materializationsth",{"_index":1138,"title":{},"content":{"81":{"position":[[2871,19]]}},"keywords":{}}],["materialize.click",{"_index":1828,"title":{},"content":{"144":{"position":[[185,20]]}},"keywords":{}}],["materialize/datagen",{"_index":2528,"title":{},"content":{"236":{"position":[[1135,19]]}},"keywords":{}}],["matter",{"_index":1550,"title":{},"content":{"107":{"position":[[2279,6]]},"197":{"position":[[825,7]]},"306":{"position":[[513,6]]},"757":{"position":[[1026,7],[1287,6]]},"770":{"position":[[1026,7],[1287,6]]},"797":{"position":[[1026,7],[1287,6]]},"812":{"position":[[1026,7],[1287,6]]},"828":{"position":[[1026,7],[1287,6]]},"867":{"position":[[1995,6]]},"922":{"position":[[420,6]]}},"keywords":{}}],["maverick",{"_index":2316,"title":{},"content":{"210":{"position":[[2065,8]]}},"keywords":{}}],["max",{"_index":3574,"title":{},"content":{"410":{"position":[[46,3]]},"1140":{"position":[[2638,3]]},"1316":{"position":[[2638,3]]},"1340":{"position":[[2638,3]]},"1351":{"position":[[2638,3]]},"1379":{"position":[[2016,3]]},"1403":{"position":[[2016,3]]},"1414":{"position":[[2016,3]]},"1431":{"position":[[2661,3]]},"1476":{"position":[[155,3],[282,4],[444,3],[494,4],[552,4],[620,3],[670,4],[1217,3],[1326,3],[1448,4],[1470,3],[1667,3],[1737,4],[1814,4],[1891,4],[1968,4],[2039,3],[2197,4]]}},"keywords":{}}],["max=364",{"_index":4162,"title":{},"content":{"573":{"position":[[1219,8]]}},"keywords":{}}],["max_batch_s",{"_index":3970,"title":{},"content":{"517":{"position":[[3185,15]]}},"keywords":{}}],["max_connectio",{"_index":6128,"title":{},"content":{"1292":{"position":[[4185,13]]},"1306":{"position":[[4185,13]]},"1329":{"position":[[4185,13]]}},"keywords":{}}],["max_queries_p",{"_index":6131,"title":{},"content":{"1292":{"position":[[4239,13]]},"1306":{"position":[[4239,13]]},"1329":{"position":[[4239,13]]}},"keywords":{}}],["max_row",{"_index":6135,"title":{},"content":{"1292":{"position":[[4307,8]]},"1306":{"position":[[4307,8]]},"1329":{"position":[[4307,8]]}},"keywords":{}}],["max_siz",{"_index":6138,"title":{},"content":{"1292":{"position":[[4354,8]]},"1306":{"position":[[4354,8]]},"1329":{"position":[[4354,8]]}},"keywords":{}}],["max_slot_wal_keep_s",{"_index":5061,"title":{},"content":{"922":{"position":[[1949,22],[2374,22],[2774,22]]}},"keywords":{}}],["max_updates_p",{"_index":6141,"title":{},"content":{"1292":{"position":[[4406,13]]},"1306":{"position":[[4406,13]]},"1329":{"position":[[4406,13]]}},"keywords":{}}],["max_user_conn",{"_index":6144,"title":{},"content":{"1292":{"position":[[4470,13]]},"1306":{"position":[[4470,13]]},"1329":{"position":[[4470,13]]}},"keywords":{}}],["maxim",{"_index":6708,"title":{"1476":{"position":[[13,8]]}},"content":{"1476":{"position":[[13,8],[35,8],[309,8],[706,8],[852,8],[1504,8]]}},"keywords":{}}],["maximum",{"_index":33,"title":{"1157":{"position":[[0,7]]}},"content":{"1":{"position":[[410,7]]},"7":{"position":[[502,7]]},"20":{"position":[[1076,7]]},"156":{"position":[[358,7]]},"343":{"position":[[322,7],[683,7]]},"377":{"position":[[654,7]]},"387":{"position":[[966,7],[984,7]]},"410":{"position":[[70,7],[151,7]]},"517":{"position":[[3201,7],[3234,7]]},"584":{"position":[[1269,7]]},"767":{"position":[[2270,7]]},"792":{"position":[[2262,7]]},"824":{"position":[[2384,7]]},"842":{"position":[[1372,7],[1489,7],[2453,7],[2560,7]]},"922":{"position":[[1997,7]]},"1144":{"position":[[600,7]]},"1157":{"position":[[5,7]]},"1170":{"position":[[600,7],[926,7],[1069,7]]},"1213":{"position":[[455,7]]},"1220":{"position":[[455,7],[603,7],[746,7]]},"1391":{"position":[[296,7]]},"1476":{"position":[[1019,8]]}},"keywords":{}}],["maxitem",{"_index":1953,"title":{},"content":{"164":{"position":[[2019,9]]}},"keywords":{}}],["maxtxndur",{"_index":3235,"title":{},"content":{"343":{"position":[[306,15]]},"344":{"position":[[400,15]]}},"keywords":{}}],["maxvalu",{"_index":6127,"title":{},"content":{"1292":{"position":[[4143,8]]},"1306":{"position":[[4143,8]]},"1329":{"position":[[4143,8]]}},"keywords":{}}],["may<br/>",{"_index":6449,"title":{},"content":{"1434":{"position":[[1207,14]]}},"keywords":{}}],["mb",{"_index":979,"title":{},"content":{"66":{"position":[[697,2]]},"1157":{"position":[[50,3],[121,2]]}},"keywords":{}}],["mcc",{"_index":4104,"title":{},"content":{"552":{"position":[[46,3],[336,3]]}},"keywords":{}}],["mean",{"_index":676,"title":{},"content":{"34":{"position":[[591,5]]},"45":{"position":[[98,7]]},"56":{"position":[[1821,7]]},"68":{"position":[[1398,5]]},"81":{"position":[[497,7]]},"83":{"position":[[456,5]]},"88":{"position":[[333,5]]},"94":{"position":[[2293,7]]},"109":{"position":[[343,5]]},"110":{"position":[[188,4]]},"113":{"position":[[445,5]]},"120":{"position":[[1968,7]]},"128":{"position":[[230,5]]},"159":{"position":[[229,8]]},"183":{"position":[[4535,5]]},"207":{"position":[[428,4]]},"209":{"position":[[1065,5]]},"239":{"position":[[869,4]]},"254":{"position":[[3301,7]]},"295":{"position":[[943,6]]},"309":{"position":[[973,5]]},"314":{"position":[[2876,7]]},"325":{"position":[[451,4]]},"331":{"position":[[335,7]]},"560":{"position":[[222,5]]},"660":{"position":[[63,5],[831,5]]},"724":{"position":[[600,5]]},"761":{"position":[[82,5]]},"763":{"position":[[223,5]]},"774":{"position":[[82,5]]},"776":{"position":[[223,5]]},"801":{"position":[[82,5]]},"803":{"position":[[223,5]]},"816":{"position":[[82,5]]},"818":{"position":[[223,5]]},"821":{"position":[[943,4]]},"832":{"position":[[82,5]]},"834":{"position":[[223,5]]},"846":{"position":[[225,5]]},"942":{"position":[[314,7]]},"1020":{"position":[[462,5]]},"1358":{"position":[[65,5]]},"1391":{"position":[[732,5],[802,5]]},"1440":{"position":[[418,7]]},"1452":{"position":[[1742,5]]},"1453":{"position":[[177,5],[646,5],[1467,5]]},"1459":{"position":[[121,7],[1169,4]]},"1465":{"position":[[246,5]]},"1470":{"position":[[912,8]]},"1471":{"position":[[443,5]]}},"keywords":{}}],["meaning",{"_index":2899,"title":{},"content":{"281":{"position":[[2496,10]]}},"keywords":{}}],["means.activity_typ",{"_index":4544,"title":{},"content":{"738":{"position":[[358,21]]}},"keywords":{}}],["measur",{"_index":1579,"title":{},"content":{"110":{"position":[[792,13],[1310,12]]},"221":{"position":[[2032,9]]},"1140":{"position":[[2680,8]]},"1316":{"position":[[2680,8]]},"1340":{"position":[[2680,8]]},"1351":{"position":[[2680,8]]},"1431":{"position":[[2703,8]]}},"keywords":{}}],["mechan",{"_index":1593,"title":{},"content":{"112":{"position":[[465,10],[515,10]]},"125":{"position":[[53,9],[1240,10]]},"197":{"position":[[133,9]]},"247":{"position":[[198,10]]},"306":{"position":[[441,10]]},"377":{"position":[[496,10]]},"428":{"position":[[127,9]]},"429":{"position":[[230,11],[923,10],[1055,9],[1376,9]]},"432":{"position":[[621,9],[636,9],[791,9],[894,9]]},"433":{"position":[[245,10]]},"578":{"position":[[362,9]]},"976":{"position":[[36,9]]},"1118":{"position":[[410,10]]}},"keywords":{}}],["mediamessagesoutgo",{"_index":5400,"title":{},"content":{"1110":{"position":[[399,21]]}},"keywords":{}}],["medium",{"_index":6147,"title":{},"content":{"1292":{"position":[[4523,6]]},"1306":{"position":[[4523,6]]},"1329":{"position":[[4523,6]]}},"keywords":{}}],["mediumblob",{"_index":6150,"title":{},"content":{"1292":{"position":[[4574,10]]},"1306":{"position":[[4574,10]]},"1329":{"position":[[4574,10]]}},"keywords":{}}],["mediumint",{"_index":6154,"title":{},"content":{"1292":{"position":[[4624,9]]},"1306":{"position":[[4624,9]]},"1329":{"position":[[4624,9]]}},"keywords":{}}],["mediumtext",{"_index":6159,"title":{},"content":{"1292":{"position":[[4682,10]]},"1306":{"position":[[4682,10]]},"1329":{"position":[[4682,10]]}},"keywords":{}}],["meet",{"_index":3053,"title":{},"content":{"308":{"position":[[428,4]]},"329":{"position":[[294,4]]},"367":{"position":[[4,4]]},"515":{"position":[[355,4]]},"571":{"position":[[312,4]]},"609":{"position":[[152,4]]},"617":{"position":[[254,4]]},"752":{"position":[[4,4]]},"790":{"position":[[4,4]]},"916":{"position":[[4,4]]},"917":{"position":[[21,4]]},"965":{"position":[[21,4]]},"1041":{"position":[[4,4]]},"1050":{"position":[[919,4]]},"1245":{"position":[[206,4]]},"1282":{"position":[[4,4]]},"1310":{"position":[[4,4]]},"1383":{"position":[[4,4]]},"1407":{"position":[[4,4]]},"1479":{"position":[[642,7]]}},"keywords":{}}],["meetingsengag",{"_index":4388,"title":{},"content":{"649":{"position":[[350,19]]}},"keywords":{}}],["megabyt",{"_index":50,"title":{},"content":{"1":{"position":[[629,9]]}},"keywords":{}}],["meltano",{"_index":794,"title":{},"content":{"53":{"position":[[96,7]]}},"keywords":{}}],["member",{"_index":1762,"title":{},"content":{"136":{"position":[[246,8]]},"173":{"position":[[1030,8]]},"523":{"position":[[83,6],[133,7]]},"529":{"position":[[420,7]]},"531":{"position":[[83,6]]},"532":{"position":[[83,6]]},"744":{"position":[[123,7]]},"1012":{"position":[[101,7]]},"1140":{"position":[[2718,6]]},"1292":{"position":[[4740,6]]},"1306":{"position":[[4740,6]]},"1316":{"position":[[2718,6]]},"1329":{"position":[[4740,6]]},"1340":{"position":[[2718,6]]},"1351":{"position":[[2718,6]]},"1354":{"position":[[92,6]]},"1356":{"position":[[161,7]]},"1379":{"position":[[2067,6]]},"1403":{"position":[[2067,6]]},"1414":{"position":[[2067,6]]},"1431":{"position":[[2741,6]]},"1477":{"position":[[724,6]]}},"keywords":{}}],["members)messag",{"_index":5179,"title":{},"content":{"1012":{"position":[[123,16]]}},"keywords":{}}],["membersblocksbouncesinvalid",{"_index":5139,"title":{},"content":{"979":{"position":[[194,27]]}},"keywords":{}}],["membership",{"_index":4025,"title":{},"content":{"529":{"position":[[457,11]]},"943":{"position":[[252,10]]}},"keywords":{}}],["membershipsd",{"_index":4383,"title":{},"content":{"649":{"position":[[250,15]]}},"keywords":{}}],["membershipsgroupsmacrosorganizationsorgan",{"_index":5447,"title":{},"content":{"1128":{"position":[[143,48]]}},"keywords":{}}],["membershipspostspost",{"_index":5448,"title":{},"content":{"1128":{"position":[[192,20]]}},"keywords":{}}],["memberstagsreleasesgroup",{"_index":4007,"title":{},"content":{"521":{"position":[[146,24]]}},"keywords":{}}],["memor",{"_index":4375,"title":{},"content":{"645":{"position":[[372,9]]},"652":{"position":[[372,9]]}},"keywords":{}}],["memori",{"_index":1592,"title":{},"content":{"112":{"position":[[420,6]]},"870":{"position":[[571,6],[652,6]]},"922":{"position":[[111,6]]},"1276":{"position":[[366,6]]},"1292":{"position":[[4787,6]]},"1306":{"position":[[4787,6]]},"1329":{"position":[[4787,6]]}},"keywords":{}}],["memoryoptimist",{"_index":3195,"title":{},"content":{"330":{"position":[[297,16]]}},"keywords":{}}],["mention",{"_index":2307,"title":{},"content":{"210":{"position":[[1571,9]]},"238":{"position":[[4,9]]},"254":{"position":[[3152,9]]},"296":{"position":[[7092,9]]},"313":{"position":[[3112,9]]},"314":{"position":[[2727,9]]},"1439":{"position":[[1189,9]]}},"keywords":{}}],["menu",{"_index":1109,"title":{},"content":{"80":{"position":[[328,5]]},"138":{"position":[[2761,4]]},"142":{"position":[[2846,4]]},"205":{"position":[[71,4]]}},"keywords":{}}],["merchant",{"_index":3760,"title":{},"content":{"454":{"position":[[167,8]]}},"keywords":{}}],["merchant_id",{"_index":3759,"title":{},"content":{"454":{"position":[[154,12]]},"455":{"position":[[137,12]]}},"keywords":{}}],["mere",{"_index":5227,"title":{},"content":{"1036":{"position":[[1056,6]]}},"keywords":{}}],["merg",{"_index":746,"title":{"1008":{"position":[[0,7]]},"1467":{"position":[[0,5]]}},"content":{"42":{"position":[[639,5]]},"62":{"position":[[599,5],[795,6]]},"67":{"position":[[1995,5]]},"115":{"position":[[1349,5]]},"121":{"position":[[999,6]]},"159":{"position":[[524,5]]},"163":{"position":[[152,5]]},"164":{"position":[[592,6],[640,5]]},"183":{"position":[[1900,5],[3706,5]]},"254":{"position":[[495,5],[1563,5]]},"281":{"position":[[2077,5],[3200,7]]},"296":{"position":[[586,5],[651,5],[1557,5],[1622,5],[1821,5],[1932,5],[2116,6],[2258,5],[2299,5]]},"492":{"position":[[545,5]]},"521":{"position":[[87,5]]},"665":{"position":[[545,5]]},"695":{"position":[[545,5]]},"909":{"position":[[854,5]]},"910":{"position":[[135,5]]},"925":{"position":[[854,5]]},"926":{"position":[[135,5]]},"936":{"position":[[854,5]]},"937":{"position":[[135,5]]},"952":{"position":[[854,5]]},"953":{"position":[[135,5]]},"970":{"position":[[854,5]]},"971":{"position":[[135,5]]},"977":{"position":[[307,7]]},"1008":{"position":[[714,5],[1836,5]]},"1140":{"position":[[2754,5]]},"1158":{"position":[[39,7]]},"1182":{"position":[[39,7]]},"1191":{"position":[[39,7]]},"1256":{"position":[[39,7]]},"1262":{"position":[[39,7]]},"1290":{"position":[[39,7]]},"1292":{"position":[[4834,5]]},"1304":{"position":[[39,7]]},"1306":{"position":[[4834,5]]},"1315":{"position":[[39,7]]},"1316":{"position":[[2754,5]]},"1327":{"position":[[39,7]]},"1329":{"position":[[4834,5]]},"1339":{"position":[[39,7]]},"1340":{"position":[[2754,5]]},"1350":{"position":[[39,7]]},"1351":{"position":[[2754,5]]},"1358":{"position":[[125,6],[265,6],[381,6]]},"1378":{"position":[[39,7]]},"1379":{"position":[[2117,5]]},"1389":{"position":[[39,7]]},"1402":{"position":[[39,7]]},"1403":{"position":[[2117,5]]},"1413":{"position":[[39,7]]},"1414":{"position":[[2117,5]]},"1430":{"position":[[39,7]]},"1431":{"position":[[2777,5]]},"1463":{"position":[[334,5]]},"1464":{"position":[[190,5]]},"1465":{"position":[[1068,5]]},"1466":{"position":[[149,5]]},"1467":{"position":[[0,5],[6,5],[201,5],[223,5],[317,6],[492,5],[543,5],[698,5],[715,5],[936,5],[1233,5],[1622,5],[1758,5],[1799,5],[1921,5],[2038,7],[2163,5],[2242,5],[2361,5],[2844,5]]},"1476":{"position":[[200,5],[1053,7],[1266,5]]},"1477":{"position":[[643,7],[970,5],[2756,6],[3192,5],[3850,5]]}},"keywords":{}}],["mergea",{"_index":6275,"title":{},"content":{"1358":{"position":[[877,6]]}},"keywords":{}}],["messag",{"_index":356,"title":{"602":{"position":[[14,7]]},"603":{"position":[[0,7]]},"1234":{"position":[[0,7]]}},"content":{"12":{"position":[[101,7]]},"20":{"position":[[16,8],[62,7],[254,8],[306,8],[413,7]]},"66":{"position":[[396,8]]},"183":{"position":[[4508,7]]},"209":{"position":[[274,8]]},"250":{"position":[[970,8],[1027,8],[1181,8]]},"307":{"position":[[548,7]]},"309":{"position":[[1557,7],[1857,7]]},"406":{"position":[[247,8],[366,8]]},"408":{"position":[[272,8],[373,8],[413,8],[440,8]]},"410":{"position":[[88,8],[189,8],[273,7]]},"411":{"position":[[22,8],[43,8],[195,8],[268,7]]},"427":{"position":[[31,8],[247,9],[329,9],[368,8]]},"590":{"position":[[428,8],[565,8],[602,8],[999,8],[1127,8]]},"598":{"position":[[223,8]]},"602":{"position":[[10,8],[153,9],[197,8],[364,8],[556,7],[611,7],[701,8]]},"603":{"position":[[16,8]]},"1015":{"position":[[213,8]]},"1118":{"position":[[555,8]]},"1230":{"position":[[665,8],[1256,8]]},"1234":{"position":[[30,7],[119,8],[197,8]]},"1362":{"position":[[638,8]]},"1434":{"position":[[42,7]]},"1442":{"position":[[51,8],[492,9],[561,8],[745,9]]},"1443":{"position":[[19,8],[178,9],[556,8],[801,9],[1150,8]]},"1444":{"position":[[20,8],[175,9],[255,7],[614,8],[873,8]]}},"keywords":{}}],["message_text",{"_index":6167,"title":{},"content":{"1292":{"position":[[4878,12]]},"1306":{"position":[[4878,12]]},"1329":{"position":[[4878,12]]}},"keywords":{}}],["messagesconvers",{"_index":5396,"title":{},"content":{"1110":{"position":[[294,20]]}},"keywords":{}}],["messagesestimatesestim",{"_index":4343,"title":{},"content":{"628":{"position":[[172,25]]}},"keywords":{}}],["messagesinvoic",{"_index":4340,"title":{},"content":{"628":{"position":[[108,15]]}},"keywords":{}}],["met",{"_index":1566,"title":{},"content":{"110":{"position":[[137,4]]},"200":{"position":[[89,4]]},"240":{"position":[[4029,3]]}},"keywords":{}}],["meta",{"_index":3063,"title":{},"content":{"313":{"position":[[3241,4]]},"515":{"position":[[426,4]]},"668":{"position":[[1,4]]}},"keywords":{}}],["metadata",{"_index":993,"title":{"67":{"position":[[18,9]]},"763":{"position":[[0,8]]},"776":{"position":[[0,8]]},"803":{"position":[[0,8]]},"818":{"position":[[0,8]]},"834":{"position":[[0,8]]},"1276":{"position":[[16,9]]}},"content":{"67":{"position":[[65,8]]},"82":{"position":[[1961,8],[3165,8],[4297,8]]},"159":{"position":[[95,8]]},"160":{"position":[[159,8]]},"237":{"position":[[1707,8]]},"321":{"position":[[250,9]]},"379":{"position":[[709,8]]},"595":{"position":[[741,8]]},"738":{"position":[[389,8]]},"763":{"position":[[135,9]]},"776":{"position":[[135,9]]},"803":{"position":[[135,9]]},"818":{"position":[[135,9]]},"834":{"position":[[135,9]]},"864":{"position":[[987,8]]},"876":{"position":[[838,8]]},"1138":{"position":[[694,8]]},"1151":{"position":[[679,8]]},"1156":{"position":[[377,8],[524,8],[595,8],[805,8]]},"1179":{"position":[[506,8]]},"1260":{"position":[[393,8]]},"1276":{"position":[[19,8],[198,8],[328,8],[407,8],[454,8]]},"1313":{"position":[[504,8]]},"1337":{"position":[[504,8]]},"1348":{"position":[[504,8]]},"1386":{"position":[[477,8]]},"1391":{"position":[[262,9],[388,8]]},"1427":{"position":[[445,8]]}},"keywords":{}}],["metal",{"_index":1100,"title":{},"content":{"76":{"position":[[929,6]]}},"keywords":{}}],["metal_typ",{"_index":1099,"title":{},"content":{"76":{"position":[[867,11]]}},"keywords":{}}],["method",{"_index":908,"title":{"354":{"position":[[4,6]]}},"content":{"60":{"position":[[932,6]]},"61":{"position":[[438,6]]},"102":{"position":[[86,7]]},"104":{"position":[[105,7]]},"196":{"position":[[35,6]]},"208":{"position":[[1722,6]]},"233":{"position":[[35,6]]},"351":{"position":[[489,7]]},"354":{"position":[[22,6]]},"359":{"position":[[72,7],[467,7]]},"370":{"position":[[2190,7]]},"387":{"position":[[80,7],[350,7],[1490,7]]},"388":{"position":[[62,7]]},"408":{"position":[[699,7]]},"424":{"position":[[522,7]]},"429":{"position":[[406,7],[552,7],[812,8],[1432,7]]},"432":{"position":[[1311,7]]},"448":{"position":[[80,7],[321,6],[1375,7]]},"449":{"position":[[62,7]]},"454":{"position":[[711,7]]},"460":{"position":[[728,7]]},"466":{"position":[[435,7]]},"473":{"position":[[62,7]]},"496":{"position":[[705,7]]},"499":{"position":[[220,7],[326,7]]},"509":{"position":[[701,7]]},"513":{"position":[[242,6],[271,6]]},"517":{"position":[[4136,7]]},"518":{"position":[[62,7]]},"522":{"position":[[249,6],[278,6],[330,6]]},"527":{"position":[[62,7]]},"530":{"position":[[249,6],[278,6],[330,6]]},"534":{"position":[[80,7],[582,6],[1851,7]]},"535":{"position":[[62,7]]},"551":{"position":[[241,6],[270,6]]},"556":{"position":[[80,7],[2353,7]]},"557":{"position":[[62,7]]},"569":{"position":[[273,6],[302,6]]},"573":{"position":[[84,7],[362,7],[1422,7]]},"575":{"position":[[48,7]]},"581":{"position":[[498,7]]},"584":{"position":[[71,7],[330,6],[1485,7]]},"586":{"position":[[48,7]]},"607":{"position":[[272,6],[301,6]]},"611":{"position":[[80,7],[1354,7]]},"612":{"position":[[62,7]]},"614":{"position":[[256,6],[285,6]]},"619":{"position":[[84,7],[317,7],[731,7]]},"625":{"position":[[334,7]]},"631":{"position":[[662,7]]},"634":{"position":[[212,7],[318,7]]},"646":{"position":[[356,7]]},"650":{"position":[[222,6],[251,6]]},"654":{"position":[[77,7],[946,6]]},"670":{"position":[[822,7]]},"685":{"position":[[634,7]]},"700":{"position":[[473,7]]},"706":{"position":[[472,7]]},"712":{"position":[[664,7]]},"716":{"position":[[258,6],[287,6]]},"720":{"position":[[80,7],[496,6],[963,7]]},"721":{"position":[[62,7]]},"731":{"position":[[215,6],[244,6]]},"735":{"position":[[72,7],[537,7]]},"741":{"position":[[649,7]]},"747":{"position":[[1532,7]]},"757":{"position":[[2141,7]]},"770":{"position":[[2141,7]]},"797":{"position":[[2148,7]]},"812":{"position":[[2148,7]]},"828":{"position":[[2148,7]]},"851":{"position":[[753,7]]},"859":{"position":[[80,7],[295,7]]},"860":{"position":[[62,7]]},"879":{"position":[[467,6]]},"885":{"position":[[784,7]]},"895":{"position":[[412,6]]},"897":{"position":[[428,7]]},"907":{"position":[[1595,7]]},"923":{"position":[[1595,7]]},"934":{"position":[[1595,7]]},"943":{"position":[[825,6],[887,7]]},"950":{"position":[[1595,7]]},"959":{"position":[[529,7]]},"968":{"position":[[1595,7]]},"975":{"position":[[128,8]]},"982":{"position":[[531,7]]},"991":{"position":[[80,7]]},"997":{"position":[[497,7]]},"1009":{"position":[[80,7],[1794,7]]},"1010":{"position":[[62,7]]},"1015":{"position":[[584,7]]},"1028":{"position":[[534,7]]},"1070":{"position":[[80,7],[1145,7]]},"1071":{"position":[[62,7]]},"1076":{"position":[[927,7]]},"1085":{"position":[[80,6],[324,6],[346,6],[1513,7]]},"1086":{"position":[[53,6]]},"1094":{"position":[[599,7]]},"1101":{"position":[[439,7]]},"1107":{"position":[[554,7]]},"1113":{"position":[[628,7]]},"1129":{"position":[[180,7]]},"1133":{"position":[[97,6],[1350,7]]},"1140":{"position":[[2792,6]]},"1227":{"position":[[38,7]]},"1228":{"position":[[35,6]]},"1231":{"position":[[48,6]]},"1239":{"position":[[123,7],[136,6],[148,6]]},"1241":{"position":[[207,7]]},"1243":{"position":[[1382,6]]},"1247":{"position":[[71,7],[631,7]]},"1248":{"position":[[48,6]]},"1316":{"position":[[2792,6]]},"1340":{"position":[[2792,6]]},"1351":{"position":[[2792,6]]},"1379":{"position":[[2163,6]]},"1403":{"position":[[2163,6]]},"1414":{"position":[[2163,6]]},"1431":{"position":[[2815,6]]},"1456":{"position":[[371,7],[395,6]]},"1471":{"position":[[125,6]]},"1472":{"position":[[107,6]]}},"keywords":{}}],["method"authent",{"_index":4953,"title":{},"content":{"895":{"position":[[302,24]]}},"keywords":{}}],["methodsship",{"_index":5373,"title":{},"content":{"1096":{"position":[[354,15],[398,15]]}},"keywords":{}}],["metric",{"_index":1948,"title":{},"content":{"164":{"position":[[1422,6]]},"487":{"position":[[584,6]]},"556":{"position":[[1574,7]]},"574":{"position":[[424,7],[479,7],[585,8]]},"1128":{"position":[[368,6]]}},"keywords":{}}],["metrics.act",{"_index":3941,"title":{},"content":{"517":{"position":[[395,14]]}},"keywords":{}}],["metricschannelsemail",{"_index":4449,"title":{},"content":{"697":{"position":[[90,20]]}},"keywords":{}}],["metricsga:brows",{"_index":4167,"title":{},"content":{"574":{"position":[[693,17]]}},"keywords":{}}],["metricsticket",{"_index":5458,"title":{},"content":{"1128":{"position":[[354,13]]}},"keywords":{}}],["mib",{"_index":5021,"title":{},"content":{"912":{"position":[[939,3]]},"1170":{"position":[[1136,4]]},"1220":{"position":[[813,4]]}},"keywords":{}}],["micro",{"_index":1927,"title":{},"content":{"163":{"position":[[852,5]]},"331":{"position":[[315,5]]},"1391":{"position":[[173,5],[237,5],[432,5],[974,5],[1031,5]]}},"keywords":{}}],["microsecond",{"_index":5770,"title":{},"content":{"1164":{"position":[[390,11]]},"1172":{"position":[[575,11],[664,11]]},"1222":{"position":[[575,11],[664,11]]},"1292":{"position":[[4927,11]]},"1306":{"position":[[4927,11]]},"1329":{"position":[[4927,11]]}},"keywords":{}}],["microsoft",{"_index":1758,"title":{"436":{"position":[[8,9]]},"445":{"position":[[34,9]]},"1038":{"position":[[0,9]]},"1405":{"position":[[0,9]]}},"content":{"136":{"position":[[19,10]]},"363":{"position":[[1635,9]]},"444":{"position":[[49,10]]},"448":{"position":[[415,9],[543,9],[1074,9]]},"1282":{"position":[[253,9]]},"1288":{"position":[[227,9]]},"1310":{"position":[[268,9]]}},"keywords":{}}],["middl",{"_index":5737,"title":{},"content":{"1147":{"position":[[149,6]]},"1174":{"position":[[149,6]]},"1216":{"position":[[149,6]]},"1224":{"position":[[149,6]]}},"keywords":{}}],["middleint",{"_index":6173,"title":{},"content":{"1292":{"position":[[4978,9]]},"1306":{"position":[[4978,9]]},"1329":{"position":[[4978,9]]}},"keywords":{}}],["migrat",{"_index":1337,"title":{"100":{"position":[[0,11]]}},"content":{"94":{"position":[[448,10],[627,11]]},"97":{"position":[[312,11]]},"100":{"position":[[182,11],[203,10],[238,10],[374,11],[650,9],[707,9],[809,10],[1357,10]]},"105":{"position":[[1044,7]]},"183":{"position":[[1296,11],[3810,11]]},"268":{"position":[[398,10],[415,10],[928,11],[1722,9],[1752,10]]},"278":{"position":[[37,10],[501,10],[782,10],[975,11],[1641,9],[1658,10],[1680,10]]},"279":{"position":[[1238,11]]},"280":{"position":[[1488,11]]},"760":{"position":[[834,10]]},"773":{"position":[[834,10]]},"800":{"position":[[834,10]]},"815":{"position":[[834,10]]},"831":{"position":[[834,10]]},"1292":{"position":[[5022,7]]},"1306":{"position":[[5022,7]]},"1329":{"position":[[5022,7]]}},"keywords":{}}],["miibij",{"_index":6376,"title":{},"content":{"1384":{"position":[[517,9]]}},"keywords":{}}],["miicxaibaakbgqcjo7g6r+kv2mms8suw21sk2twhg8vog0fjimewjewyaffm/toi",{"_index":1242,"title":{},"content":{"83":{"position":[[1507,64]]},"371":{"position":[[426,64]]},"1139":{"position":[[313,64]]}},"keywords":{}}],["miiev",{"_index":6392,"title":{},"content":{"1387":{"position":[[875,9]]}},"keywords":{}}],["mileston",{"_index":4026,"title":{},"content":{"529":{"position":[[494,10]]}},"keywords":{}}],["milestonesgroup",{"_index":4006,"title":{},"content":{"521":{"position":[[118,15]]}},"keywords":{}}],["milestonesproject",{"_index":4004,"title":{},"content":{"521":{"position":[[69,17]]}},"keywords":{}}],["million",{"_index":2689,"title":{},"content":{"253":{"position":[[672,8]]},"313":{"position":[[672,8]]},"1243":{"position":[[346,7],[422,7]]}},"keywords":{}}],["millisecond",{"_index":673,"title":{},"content":{"34":{"position":[[428,13]]},"36":{"position":[[361,13]]},"77":{"position":[[554,12]]},"124":{"position":[[111,12]]}},"keywords":{}}],["mime",{"_index":3598,"title":{},"content":{"417":{"position":[[1781,4]]},"502":{"position":[[1429,4]]},"545":{"position":[[1383,4]]},"637":{"position":[[943,4]]},"1021":{"position":[[1940,4]]}},"keywords":{}}],["min",{"_index":5646,"title":{},"content":{"1140":{"position":[[2829,3]]},"1316":{"position":[[2829,3]]},"1340":{"position":[[2829,3]]},"1351":{"position":[[2829,3]]},"1379":{"position":[[2207,3]]},"1403":{"position":[[2207,3]]},"1414":{"position":[[2207,3]]},"1431":{"position":[[2852,3]]},"1476":{"position":[[242,4],[485,4],[543,4],[661,4],[1308,4],[1322,3],[1712,4],[1789,4],[1866,4],[1943,4],[2060,3],[2172,4]]}},"keywords":{}}],["min/max",{"_index":6710,"title":{},"content":{"1476":{"position":[[377,7],[1578,7]]}},"keywords":{}}],["min=1",{"_index":4161,"title":{},"content":{"573":{"position":[[1197,7]]}},"keywords":{}}],["min_row",{"_index":6182,"title":{},"content":{"1292":{"position":[[5185,8]]},"1306":{"position":[[5185,8]]},"1329":{"position":[[5185,8]]}},"keywords":{}}],["mind",{"_index":918,"title":{},"content":{"61":{"position":[[353,4]]},"72":{"position":[[445,4]]},"162":{"position":[[1133,5]]},"207":{"position":[[231,5]]},"227":{"position":[[338,7]]},"268":{"position":[[1217,5]]},"269":{"position":[[788,5]]},"270":{"position":[[1422,4]]},"489":{"position":[[315,4]]},"662":{"position":[[315,4]]},"677":{"position":[[315,4]]},"692":{"position":[[315,4]]},"1459":{"position":[[1628,4]]}},"keywords":{}}],["minim",{"_index":995,"title":{"1476":{"position":[[0,8]]}},"content":{"67":{"position":[[89,10]]},"157":{"position":[[355,7]]},"163":{"position":[[1188,10]]},"165":{"position":[[2143,9]]},"209":{"position":[[795,7]]},"290":{"position":[[1288,7]]},"330":{"position":[[97,8]]},"371":{"position":[[3,7]]},"393":{"position":[[3,7]]},"398":{"position":[[3,7]]},"758":{"position":[[3,7]]},"771":{"position":[[3,7]]},"798":{"position":[[3,7]]},"813":{"position":[[3,7]]},"821":{"position":[[882,8]]},"829":{"position":[[3,7]]},"908":{"position":[[3,7]]},"924":{"position":[[3,7]]},"935":{"position":[[3,7]]},"951":{"position":[[3,7]]},"969":{"position":[[3,7]]},"1388":{"position":[[274,8]]},"1476":{"position":[[0,8],[22,8],[269,8],[693,8],[839,8],[1429,8]]}},"keywords":{}}],["minimum",{"_index":554,"title":{},"content":{"20":{"position":[[1064,7]]},"156":{"position":[[346,7]]},"209":{"position":[[1632,7],[1672,7]]},"343":{"position":[[812,7]]},"377":{"position":[[885,7]]},"584":{"position":[[1218,7]]},"785":{"position":[[792,7],[884,7]]},"989":{"position":[[228,7]]},"1004":{"position":[[311,7]]},"1186":{"position":[[391,7]]},"1388":{"position":[[175,7]]},"1391":{"position":[[284,7]]},"1476":{"position":[[1008,7],[1114,7]]}},"keywords":{}}],["minitem",{"_index":1951,"title":{},"content":{"164":{"position":[[1903,9]]}},"keywords":{}}],["mintxndur",{"_index":3236,"title":{},"content":{"343":{"position":[[796,15]]},"344":{"position":[[380,15]]}},"keywords":{}}],["minu",{"_index":5817,"title":{},"content":{"1192":{"position":[[535,5]]},"1394":{"position":[[927,5]]}},"keywords":{}}],["minut",{"_index":860,"title":{},"content":{"56":{"position":[[2478,8],[2541,8],[2616,8],[2653,8]]},"110":{"position":[[174,7],[271,7]]},"124":{"position":[[171,7]]},"240":{"position":[[3081,7]]},"241":{"position":[[126,8]]},"296":{"position":[[7981,7]]},"343":{"position":[[759,7]]},"375":{"position":[[184,6]]},"377":{"position":[[605,8]]},"387":{"position":[[1126,7]]},"509":{"position":[[194,6],[228,6],[312,6]]},"595":{"position":[[1262,8]]},"642":{"position":[[234,7]]},"789":{"position":[[1065,7]]},"842":{"position":[[2845,8]]},"900":{"position":[[218,6]]},"912":{"position":[[884,8]]},"1036":{"position":[[309,7]]},"1068":{"position":[[69,7]]},"1113":{"position":[[412,8]]},"1140":{"position":[[2868,6]]},"1186":{"position":[[599,8]]},"1292":{"position":[[5068,6]]},"1306":{"position":[[5068,6]]},"1316":{"position":[[2868,6]]},"1329":{"position":[[5068,6]]},"1340":{"position":[[2868,6]]},"1351":{"position":[[2868,6]]},"1379":{"position":[[2255,6]]},"1388":{"position":[[524,6]]},"1403":{"position":[[2255,6]]},"1414":{"position":[[2255,6]]},"1431":{"position":[[2891,6]]},"1452":{"position":[[551,7],[2503,7],[2537,8]]},"1475":{"position":[[418,6]]}},"keywords":{}}],["minute_micro",{"_index":6178,"title":{},"content":{"1292":{"position":[[5108,13]]},"1306":{"position":[[5108,13]]},"1329":{"position":[[5108,13]]}},"keywords":{}}],["minute_second",{"_index":6181,"title":{},"content":{"1292":{"position":[[5147,13]]},"1306":{"position":[[5147,13]]},"1329":{"position":[[5147,13]]}},"keywords":{}}],["mirror",{"_index":1769,"title":{},"content":{"137":{"position":[[234,7]]},"1358":{"position":[[701,6]]}},"keywords":{}}],["mismatch",{"_index":395,"title":{},"content":{"13":{"position":[[704,10]]},"41":{"position":[[622,8]]},"158":{"position":[[778,10]]},"869":{"position":[[941,9]]}},"keywords":{}}],["miss",{"_index":1851,"title":{},"content":{"154":{"position":[[1955,8]]},"166":{"position":[[163,7],[250,7]]},"228":{"position":[[747,7]]},"229":{"position":[[441,7]]},"230":{"position":[[713,8],[1129,7]]},"281":{"position":[[1660,8]]},"1008":{"position":[[1792,8],[1866,7]]},"1047":{"position":[[946,7]]},"1055":{"position":[[946,7]]},"1063":{"position":[[946,7]]}},"keywords":{}}],["misspelt",{"_index":1872,"title":{},"content":{"158":{"position":[[864,8]]}},"keywords":{}}],["mistak",{"_index":1861,"title":{},"content":{"156":{"position":[[743,8]]},"329":{"position":[[915,8]]}},"keywords":{}}],["mix",{"_index":576,"title":{},"content":{"23":{"position":[[9,3]]},"33":{"position":[[371,3]]},"82":{"position":[[3489,3]]},"107":{"position":[[2071,6]]},"219":{"position":[[205,6]]},"286":{"position":[[386,3]]},"330":{"position":[[6,5]]}},"keywords":{}}],["mixpanel",{"_index":3365,"title":{"743":{"position":[[0,8]]}},"content":{"364":{"position":[[2632,8]]},"744":{"position":[[56,8]]},"745":{"position":[[15,8],[56,8]]},"746":{"position":[[250,8]]},"747":{"position":[[559,8],[1081,8],[1431,8]]}},"keywords":{}}],["mixpanel.dev",{"_index":3366,"title":{},"content":{"364":{"position":[[2687,12]]}},"keywords":{}}],["mixpanel:dev",{"_index":4566,"title":{},"content":{"748":{"position":[[90,12]]}},"keywords":{}}],["mm",{"_index":3493,"title":{},"content":{"387":{"position":[[1239,2]]},"448":{"position":[[987,2]]},"496":{"position":[[455,2]]},"517":{"position":[[1519,2],[2071,2],[2684,2],[3845,2]]},"534":{"position":[[1484,2]]},"573":{"position":[[752,2]]},"584":{"position":[[807,2]]},"670":{"position":[[545,2]]},"747":{"position":[[717,2],[934,2]]},"859":{"position":[[540,2]]},"891":{"position":[[207,2]]},"895":{"position":[[203,2]]},"897":{"position":[[109,2]]},"959":{"position":[[253,2]]},"982":{"position":[[255,2]]},"1009":{"position":[[877,2]]},"1085":{"position":[[811,2],[1215,2]]},"1094":{"position":[[381,2]]},"1107":{"position":[[180,2]]},"1133":{"position":[[874,2]]}},"keywords":{}}],["mobil",{"_index":499,"title":{},"content":{"17":{"position":[[666,6]]}},"keywords":{}}],["mobileavail",{"_index":5392,"title":{},"content":{"1110":{"position":[[190,15]]}},"keywords":{}}],["mock",{"_index":2500,"title":{},"content":{"236":{"position":[[422,4]]}},"keywords":{}}],["mod",{"_index":5649,"title":{},"content":{"1140":{"position":[[2907,3]]},"1292":{"position":[[5232,3]]},"1306":{"position":[[5232,3]]},"1316":{"position":[[2907,3]]},"1329":{"position":[[5232,3]]},"1340":{"position":[[2907,3]]},"1351":{"position":[[2907,3]]},"1379":{"position":[[2295,3]]},"1403":{"position":[[2295,3]]},"1414":{"position":[[2295,3]]},"1431":{"position":[[2930,3]]}},"keywords":{}}],["modal",{"_index":2310,"title":{},"content":{"210":{"position":[[1912,5]]}},"keywords":{}}],["mode",{"_index":1535,"title":{"595":{"position":[[9,5]]},"869":{"position":[[11,6]]},"1268":{"position":[[14,5]]}},"content":{"107":{"position":[[1155,5]]},"125":{"position":[[725,5]]},"138":{"position":[[1557,5],[1589,6]]},"141":{"position":[[1137,4],[1160,6],[1562,5],[1594,6]]},"142":{"position":[[1574,5],[1606,6]]},"307":{"position":[[1215,5],[2065,5]]},"351":{"position":[[473,4]]},"359":{"position":[[451,4]]},"370":{"position":[[2174,4]]},"379":{"position":[[1043,5],[1078,6]]},"387":{"position":[[1474,4]]},"408":{"position":[[683,4]]},"424":{"position":[[506,4]]},"432":{"position":[[1295,4]]},"448":{"position":[[1359,4]]},"454":{"position":[[695,4]]},"460":{"position":[[712,4]]},"466":{"position":[[419,4]]},"496":{"position":[[689,4]]},"509":{"position":[[685,4]]},"517":{"position":[[4120,4]]},"534":{"position":[[1835,4]]},"556":{"position":[[2337,4]]},"573":{"position":[[1406,4]]},"584":{"position":[[1469,4]]},"593":{"position":[[401,4]]},"595":{"position":[[454,4],[1052,4],[1528,4],[1873,4]]},"611":{"position":[[1338,4]]},"619":{"position":[[715,4]]},"625":{"position":[[318,4]]},"631":{"position":[[646,4]]},"654":{"position":[[930,4]]},"670":{"position":[[806,4]]},"685":{"position":[[618,4]]},"700":{"position":[[457,4]]},"706":{"position":[[456,4]]},"712":{"position":[[648,4]]},"720":{"position":[[947,4]]},"735":{"position":[[521,4]]},"741":{"position":[[633,4]]},"747":{"position":[[1516,4]]},"757":{"position":[[2125,4]]},"759":{"position":[[236,6]]},"770":{"position":[[2125,4]]},"772":{"position":[[247,6]]},"797":{"position":[[2132,4]]},"799":{"position":[[234,6]]},"812":{"position":[[2132,4]]},"814":{"position":[[234,6]]},"828":{"position":[[2132,4]]},"830":{"position":[[234,6]]},"845":{"position":[[32,5]]},"851":{"position":[[737,4]]},"859":{"position":[[866,4]]},"867":{"position":[[412,4],[1298,4],[1392,4],[1497,4]]},"869":{"position":[[1330,4],[1414,4],[1452,6],[1478,4],[1580,4],[1603,4],[1691,4]]},"885":{"position":[[768,4]]},"897":{"position":[[412,4]]},"907":{"position":[[1306,4],[1579,4],[1651,5],[1743,4],[1932,4]]},"923":{"position":[[1306,4],[1579,4],[1651,5],[1743,4],[1932,4]]},"934":{"position":[[1306,4],[1579,4]]},"950":{"position":[[1306,4],[1579,4]]},"959":{"position":[[513,4]]},"968":{"position":[[1306,4],[1579,4],[1651,5],[1743,4],[1932,4]]},"982":{"position":[[515,4]]},"997":{"position":[[481,4]]},"1009":{"position":[[1778,4]]},"1015":{"position":[[568,4]]},"1020":{"position":[[14,4],[748,4],[1137,4]]},"1028":{"position":[[518,4]]},"1070":{"position":[[1129,4]]},"1076":{"position":[[911,4]]},"1085":{"position":[[1497,4]]},"1094":{"position":[[583,4]]},"1101":{"position":[[423,4]]},"1107":{"position":[[538,4]]},"1113":{"position":[[612,4]]},"1133":{"position":[[1334,4]]},"1208":{"position":[[146,5]]},"1268":{"position":[[21,4],[133,5],[730,5]]},"1279":{"position":[[47,5]]},"1285":{"position":[[879,4],[1076,4],[1204,5],[1316,5]]},"1286":{"position":[[1625,5],[2153,5],[2347,5]]},"1292":{"position":[[5270,4]]},"1300":{"position":[[879,4],[1076,4],[1204,5],[1316,5]]},"1301":{"position":[[1461,5],[1989,5],[2183,5]]},"1306":{"position":[[5270,4]]},"1313":{"position":[[733,4],[1401,5],[1493,4],[1682,4]]},"1324":{"position":[[879,4],[1076,4],[1204,5],[1316,5]]},"1325":{"position":[[1625,5],[2153,5],[2347,5]]},"1329":{"position":[[5270,4]]},"1337":{"position":[[733,4],[1401,5],[1493,4],[1682,4]]},"1348":{"position":[[733,4]]},"1358":{"position":[[54,5]]},"1437":{"position":[[981,4]]},"1438":{"position":[[640,4]]},"1440":{"position":[[138,5],[905,5]]},"1443":{"position":[[1119,4]]}},"keywords":{}}],["mode.verify_ident",{"_index":5934,"title":{},"content":{"1268":{"position":[[550,21]]}},"keywords":{}}],["model",{"_index":638,"title":{"590":{"position":[[5,6]]},"779":{"position":[[5,6]]},"1250":{"position":[[5,6]]}},"content":{"27":{"position":[[712,6]]},"38":{"position":[[169,6]]},"158":{"position":[[30,5]]},"319":{"position":[[1396,8],[1513,6],[1557,5]]},"322":{"position":[[187,5]]},"323":{"position":[[117,5],[242,6],[280,8],[392,5]]},"324":{"position":[[391,5]]},"330":{"position":[[461,6]]},"331":{"position":[[136,5]]},"548":{"position":[[296,5]]},"590":{"position":[[41,5]]},"594":{"position":[[1059,5]]},"779":{"position":[[39,5]]},"1274":{"position":[[236,5]]},"1277":{"position":[[192,5],[537,5],[556,5]]}},"keywords":{}}],["modelconsist",{"_index":5916,"title":{},"content":{"1250":{"position":[[39,13]]}},"keywords":{}}],["modeltag",{"_index":1855,"title":{},"content":{"156":{"position":[[217,11]]}},"keywords":{}}],["modern",{"_index":2620,"title":{},"content":{"241":{"position":[[416,6]]},"325":{"position":[[1,6]]}},"keywords":{}}],["modif",{"_index":2181,"title":{},"content":{"197":{"position":[[57,13],[939,13]]},"239":{"position":[[2513,13]]},"254":{"position":[[1836,14]]},"417":{"position":[[436,12]]},"438":{"position":[[436,12]]},"502":{"position":[[896,12]]},"545":{"position":[[436,12]]},"842":{"position":[[2168,14]]},"976":{"position":[[336,13]]},"1020":{"position":[[89,12],[320,12],[388,12],[501,12],[607,12],[1343,12]]},"1021":{"position":[[1482,12]]},"1118":{"position":[[1014,13]]}},"keywords":{}}],["modifi",{"_index":808,"title":{},"content":{"54":{"position":[[458,6]]},"67":{"position":[[911,8],[1527,9]]},"119":{"position":[[503,6]]},"150":{"position":[[193,6]]},"154":{"position":[[2145,6]]},"162":{"position":[[1236,9]]},"197":{"position":[[1316,6]]},"217":{"position":[[1514,6]]},"219":{"position":[[541,6]]},"236":{"position":[[1674,9]]},"253":{"position":[[3209,8]]},"290":{"position":[[1382,6]]},"296":{"position":[[4160,6],[5823,6]]},"307":{"position":[[2672,8]]},"315":{"position":[[639,6]]},"370":{"position":[[722,6]]},"377":{"position":[[148,6]]},"417":{"position":[[131,6]]},"427":{"position":[[145,6]]},"438":{"position":[[131,6]]},"483":{"position":[[311,6]]},"502":{"position":[[591,6]]},"545":{"position":[[131,6]]},"635":{"position":[[215,8]]},"752":{"position":[[175,8]]},"762":{"position":[[226,8]]},"767":{"position":[[69,6],[1002,6],[1443,6]]},"775":{"position":[[226,8]]},"791":{"position":[[128,8]]},"792":{"position":[[368,6],[1307,6],[1494,9]]},"794":{"position":[[641,6]]},"802":{"position":[[226,8]]},"809":{"position":[[641,6]]},"817":{"position":[[226,8]]},"824":{"position":[[182,6],[1068,6],[1507,6]]},"833":{"position":[[226,8]]},"904":{"position":[[182,6],[1068,6]]},"907":{"position":[[505,6]]},"918":{"position":[[368,6],[1359,6]]},"923":{"position":[[505,6]]},"934":{"position":[[505,6]]},"942":{"position":[[30,8]]},"950":{"position":[[505,6]]},"968":{"position":[[505,6]]},"1021":{"position":[[1153,6]]},"1032":{"position":[[149,6]]},"1034":{"position":[[732,6]]},"1045":{"position":[[490,6]]},"1051":{"position":[[182,6]]},"1053":{"position":[[490,6]]},"1061":{"position":[[490,6]]},"1140":{"position":[[2938,8]]},"1277":{"position":[[761,6]]},"1285":{"position":[[836,6]]},"1286":{"position":[[698,6]]},"1289":{"position":[[369,6]]},"1292":{"position":[[5310,8],[5351,6]]},"1300":{"position":[[836,6]]},"1306":{"position":[[5310,8],[5351,6]]},"1313":{"position":[[690,6]]},"1316":{"position":[[2938,8]]},"1321":{"position":[[149,6]]},"1324":{"position":[[836,6]]},"1325":{"position":[[698,6]]},"1329":{"position":[[5310,8],[5351,6]]},"1334":{"position":[[149,6]]},"1337":{"position":[[690,6]]},"1340":{"position":[[2938,8]]},"1348":{"position":[[690,6]]},"1351":{"position":[[2938,8]]},"1373":{"position":[[182,6]]},"1374":{"position":[[182,6]]},"1379":{"position":[[2335,8],[2384,6]]},"1403":{"position":[[2335,8],[2384,6]]},"1414":{"position":[[2335,8],[2384,6]]},"1417":{"position":[[386,7]]},"1431":{"position":[[2961,8]]},"1461":{"position":[[2967,6]]}},"keywords":{}}],["modul",{"_index":620,"title":{"103":{"position":[[0,8]]}},"content":{"26":{"position":[[644,8]]},"64":{"position":[[687,7],[714,6],[804,6],[919,6]]},"91":{"position":[[105,7],[230,7],[429,8]]},"94":{"position":[[827,6],[1007,7],[2503,7]]},"103":{"position":[[61,7],[223,7],[241,7],[489,7],[863,8]]},"104":{"position":[[64,6]]},"269":{"position":[[557,7]]},"271":{"position":[[320,7]]},"281":{"position":[[520,6],[577,6],[729,6],[816,7],[966,7],[1157,6],[1685,6],[2565,7]]},"296":{"position":[[704,7],[2705,7]]},"314":{"position":[[412,7],[2267,7]]},"848":{"position":[[209,7]]},"1140":{"position":[[2980,6]]},"1316":{"position":[[2980,6]]},"1340":{"position":[[2980,6]]},"1351":{"position":[[2980,6]]},"1379":{"position":[[2432,6]]},"1403":{"position":[[2432,6]]},"1414":{"position":[[2432,6]]},"1431":{"position":[[3003,6]]}},"keywords":{}}],["moment",{"_index":1004,"title":{},"content":{"67":{"position":[[806,6]]},"241":{"position":[[274,6]]},"373":{"position":[[738,6]]},"1036":{"position":[[1027,6]]},"1369":{"position":[[54,7]]}},"keywords":{}}],["monday",{"_index":6530,"title":{},"content":{"1452":{"position":[[1365,7],[1409,8],[4338,6],[4486,7]]}},"keywords":{}}],["mongodb",{"_index":1956,"title":{"194":{"position":[[19,7]]},"197":{"position":[[31,8]]},"200":{"position":[[11,8]]},"204":{"position":[[10,8]]},"206":{"position":[[0,7]]},"778":{"position":[[0,7]]},"1249":{"position":[[0,7]]}},"content":{"165":{"position":[[671,8],[680,7],[818,7],[891,7]]},"197":{"position":[[18,7],[185,7],[641,7],[1095,8],[1268,8],[1426,7]]},"198":{"position":[[59,8]]},"199":{"position":[[148,7],[209,7],[317,7]]},"200":{"position":[[12,7]]},"201":{"position":[[57,7]]},"202":{"position":[[41,7],[100,7],[234,7]]},"203":{"position":[[65,7],[165,7],[266,7],[485,7]]},"204":{"position":[[306,7]]},"205":{"position":[[183,10]]},"206":{"position":[[284,7],[382,7],[460,7]]},"207":{"position":[[301,8],[781,7],[1341,7],[1521,7]]},"208":{"position":[[171,8],[539,7]]},"209":{"position":[[701,7],[945,7]]},"210":{"position":[[106,7],[1704,8],[1730,7],[4045,7]]},"211":{"position":[[32,7],[211,7],[527,7],[819,7]]},"212":{"position":[[122,8]]},"363":{"position":[[1716,7]]},"779":{"position":[[1,7],[156,7]]},"780":{"position":[[50,7],[100,7],[259,7],[461,7],[484,7]]},"781":{"position":[[247,7]]},"784":{"position":[[41,7]]},"786":{"position":[[331,7],[415,7]]},"1120":{"position":[[1306,7]]},"1250":{"position":[[1,7],[157,7]]},"1251":{"position":[[50,7],[111,7],[222,7],[245,7]]},"1255":{"position":[[41,7]]}},"keywords":{}}],["mongodb'",{"_index":2416,"title":{},"content":{"211":{"position":[[281,9]]}},"keywords":{}}],["mongodb+srv://host",{"_index":4682,"title":{},"content":{"782":{"position":[[158,19]]},"1253":{"position":[[158,19]]}},"keywords":{}}],["mongodb:dev",{"_index":3307,"title":{},"content":{"363":{"position":[[1770,11]]},"783":{"position":[[89,11]]},"1120":{"position":[[1365,11]]},"1254":{"position":[[102,11]]}},"keywords":{}}],["mongosh",{"_index":2224,"title":{},"content":{"204":{"position":[[616,7],[764,7]]}},"keywords":{}}],["monitor",{"_index":643,"title":{},"content":{"30":{"position":[[62,8]]},"137":{"position":[[555,7]]},"138":{"position":[[150,7]]},"142":{"position":[[175,7]]},"180":{"position":[[122,8]]},"191":{"position":[[1807,8]]},"197":{"position":[[242,10]]},"209":{"position":[[433,10],[599,8],[1002,10]]},"211":{"position":[[810,8]]},"240":{"position":[[1768,8]]},"377":{"position":[[1637,8]]},"487":{"position":[[22,10],[519,10],[565,7]]},"1032":{"position":[[1426,8]]},"1077":{"position":[[793,7]]},"1363":{"position":[[356,7]]},"1383":{"position":[[1755,8]]},"1472":{"position":[[157,7]]}},"keywords":{}}],["monitorfor",{"_index":5822,"title":{},"content":{"1194":{"position":[[258,10]]}},"keywords":{}}],["monitors/new",{"_index":3860,"title":{},"content":{"487":{"position":[[552,12]]}},"keywords":{}}],["monkey",{"_index":5264,"title":{"1064":{"position":[[7,6]]}},"content":{"1070":{"position":[[798,6]]}},"keywords":{}}],["monoton",{"_index":5729,"title":{},"content":{"1146":{"position":[[35,13]]},"1173":{"position":[[35,13]]},"1215":{"position":[[35,13]]},"1223":{"position":[[35,13]]}},"keywords":{}}],["month",{"_index":1559,"title":{},"content":{"109":{"position":[[377,5]]},"138":{"position":[[2202,6],[2217,6]]},"141":{"position":[[2158,6],[2173,6]]},"142":{"position":[[2262,6],[2277,6]]},"560":{"position":[[281,6]]},"1140":{"position":[[3019,5]]},"1292":{"position":[[5403,5]]},"1306":{"position":[[5403,5]]},"1316":{"position":[[3019,5]]},"1329":{"position":[[5403,5]]},"1340":{"position":[[3019,5]]},"1351":{"position":[[3019,5]]},"1379":{"position":[[2489,5]]},"1403":{"position":[[2489,5]]},"1414":{"position":[[2489,5]]},"1431":{"position":[[3042,5]]}},"keywords":{}}],["monthli",{"_index":2107,"title":{},"content":{"189":{"position":[[239,7]]},"443":{"position":[[110,7],[200,7],[278,7],[390,7],[471,7]]}},"keywords":{}}],["monthly_active_us",{"_index":4203,"title":{},"content":{"575":{"position":[[710,20]]}},"keywords":{}}],["moral",{"_index":2325,"title":{},"content":{"210":{"position":[[2282,5]]}},"keywords":{}}],["more",{"_index":89,"title":{},"content":{"2":{"position":[[540,4]]},"4":{"position":[[758,4]]},"9":{"position":[[7,4]]},"13":{"position":[[1464,4]]},"16":{"position":[[652,4],[1364,4]]},"20":{"position":[[301,4],[825,4]]},"23":{"position":[[211,4]]},"27":{"position":[[496,4]]},"31":{"position":[[327,4]]},"33":{"position":[[147,5],[444,4]]},"34":{"position":[[894,4]]},"35":{"position":[[80,4],[348,4]]},"36":{"position":[[63,4],[479,4]]},"38":{"position":[[683,4]]},"39":{"position":[[104,4]]},"40":{"position":[[77,4],[388,4]]},"41":{"position":[[701,4]]},"42":{"position":[[360,4],[539,4],[737,4]]},"43":{"position":[[284,4],[437,4]]},"46":{"position":[[187,4]]},"47":{"position":[[79,4]]},"48":{"position":[[342,4]]},"49":{"position":[[157,4],[554,4]]},"50":{"position":[[313,4]]},"60":{"position":[[354,4],[857,4],[1026,4]]},"61":{"position":[[1030,4]]},"64":{"position":[[876,4]]},"69":{"position":[[539,4],[988,5]]},"70":{"position":[[780,4]]},"76":{"position":[[994,4]]},"77":{"position":[[600,4]]},"91":{"position":[[358,4]]},"92":{"position":[[343,4],[800,4]]},"97":{"position":[[30,4]]},"104":{"position":[[284,4]]},"105":{"position":[[678,4]]},"107":{"position":[[1700,4]]},"109":{"position":[[536,4],[677,4]]},"110":{"position":[[1234,4],[1505,4]]},"115":{"position":[[1252,4],[1572,4]]},"119":{"position":[[400,4],[474,4]]},"120":{"position":[[717,4]]},"123":{"position":[[821,4]]},"124":{"position":[[806,4]]},"130":{"position":[[401,4]]},"144":{"position":[[135,4]]},"150":{"position":[[141,4]]},"154":{"position":[[776,4],[1101,4],[1361,4],[1712,4]]},"157":{"position":[[117,4],[467,4]]},"160":{"position":[[908,4]]},"163":{"position":[[430,4],[798,4]]},"164":{"position":[[788,4]]},"169":{"position":[[163,4],[1754,4]]},"173":{"position":[[1220,4]]},"176":{"position":[[233,4]]},"177":{"position":[[309,4]]},"182":{"position":[[494,4]]},"183":{"position":[[2714,4]]},"189":{"position":[[1150,4]]},"190":{"position":[[561,4],[1497,4]]},"192":{"position":[[824,4],[1362,4],[1483,4]]},"193":{"position":[[444,6],[456,4],[686,4]]},"202":{"position":[[400,4]]},"203":{"position":[[420,4]]},"207":{"position":[[626,4]]},"208":{"position":[[358,4],[1013,4],[1732,4]]},"212":{"position":[[217,5],[350,4]]},"215":{"position":[[187,4]]},"216":{"position":[[213,4]]},"217":{"position":[[102,4],[1060,4],[1974,4]]},"218":{"position":[[43,4],[247,4],[1920,4]]},"219":{"position":[[64,4],[178,4]]},"230":{"position":[[893,4]]},"236":{"position":[[155,4]]},"237":{"position":[[578,4],[949,4],[987,4],[3411,4]]},"239":{"position":[[1067,4],[2719,4]]},"243":{"position":[[211,5],[344,4]]},"254":{"position":[[999,4],[1742,5],[2006,4]]},"257":{"position":[[169,5]]},"260":{"position":[[5,4]]},"267":{"position":[[527,4],[629,4]]},"268":{"position":[[553,5]]},"270":{"position":[[148,4]]},"273":{"position":[[91,4]]},"274":{"position":[[1320,4]]},"281":{"position":[[2187,4],[2358,4],[3360,4]]},"284":{"position":[[387,4]]},"285":{"position":[[478,4]]},"296":{"position":[[984,4],[2165,4],[3457,4]]},"301":{"position":[[85,4]]},"308":{"position":[[286,4]]},"314":{"position":[[720,4],[1559,5]]},"319":{"position":[[180,4],[1214,4],[1468,4]]},"320":{"position":[[455,4],[951,4],[1861,4],[1972,4],[2096,4]]},"321":{"position":[[762,4],[845,4]]},"322":{"position":[[1164,4]]},"323":{"position":[[1695,5]]},"324":{"position":[[94,4],[142,4],[1093,4]]},"329":{"position":[[1072,4]]},"338":{"position":[[512,4]]},"343":{"position":[[985,4],[1081,4]]},"345":{"position":[[191,4]]},"350":{"position":[[133,4]]},"358":{"position":[[133,4]]},"364":{"position":[[338,4]]},"366":{"position":[[601,4],[933,4]]},"369":{"position":[[133,4]]},"371":{"position":[[1455,4],[1540,4]]},"373":{"position":[[1029,4]]},"374":{"position":[[322,4]]},"376":{"position":[[133,4]]},"379":{"position":[[20,4],[123,4]]},"386":{"position":[[133,4]]},"387":{"position":[[1272,4]]},"390":{"position":[[45,4],[468,4]]},"391":{"position":[[133,4]]},"393":{"position":[[438,4],[509,4]]},"395":{"position":[[45,4],[638,4]]},"396":{"position":[[133,4]]},"398":{"position":[[429,4],[500,4]]},"401":{"position":[[137,4]]},"407":{"position":[[133,4]]},"416":{"position":[[133,4]]},"418":{"position":[[496,4],[592,4]]},"423":{"position":[[133,4]]},"427":{"position":[[401,4]]},"430":{"position":[[112,4]]},"431":{"position":[[133,4]]},"433":{"position":[[864,4],[932,4]]},"437":{"position":[[133,4]]},"447":{"position":[[133,4]]},"453":{"position":[[133,4]]},"459":{"position":[[133,4]]},"465":{"position":[[133,4]]},"472":{"position":[[133,4]]},"475":{"position":[[329,4]]},"481":{"position":[[133,4]]},"483":{"position":[[456,4]]},"495":{"position":[[133,4]]},"497":{"position":[[418,4]]},"501":{"position":[[89,4]]},"508":{"position":[[133,4]]},"516":{"position":[[133,4]]},"518":{"position":[[1680,4]]},"525":{"position":[[133,4]]},"533":{"position":[[133,4]]},"539":{"position":[[133,4]]},"544":{"position":[[133,4]]},"546":{"position":[[1203,4],[1300,4]]},"553":{"position":[[8,4]]},"554":{"position":[[8,4],[360,4]]},"555":{"position":[[130,4]]},"556":{"position":[[473,4],[1225,4],[1518,4]]},"560":{"position":[[336,4]]},"563":{"position":[[138,4]]},"572":{"position":[[133,4]]},"575":{"position":[[1276,4]]},"581":{"position":[[516,4]]},"583":{"position":[[123,4]]},"584":{"position":[[636,4]]},"590":{"position":[[488,4]]},"592":{"position":[[130,4]]},"597":{"position":[[292,4]]},"600":{"position":[[132,4]]},"602":{"position":[[414,4],[1028,4]]},"610":{"position":[[133,4]]},"616":{"position":[[7,4]]},"618":{"position":[[133,4]]},"620":{"position":[[346,4]]},"624":{"position":[[133,4]]},"630":{"position":[[133,4]]},"636":{"position":[[133,4]]},"646":{"position":[[133,4]]},"653":{"position":[[133,4]]},"655":{"position":[[329,4],[411,4]]},"667":{"position":[[77,4]]},"669":{"position":[[133,4]]},"684":{"position":[[133,4]]},"690":{"position":[[259,4],[364,4]]},"699":{"position":[[133,4]]},"705":{"position":[[133,4]]},"711":{"position":[[133,4]]},"717":{"position":[[8,4]]},"719":{"position":[[128,4]]},"724":{"position":[[265,4],[690,4]]},"727":{"position":[[133,4]]},"734":{"position":[[133,4]]},"736":{"position":[[451,4]]},"740":{"position":[[133,4]]},"746":{"position":[[133,4]]},"747":{"position":[[124,4]]},"750":{"position":[[1379,4]]},"752":{"position":[[1045,4]]},"754":{"position":[[966,4]]},"756":{"position":[[133,4]]},"758":{"position":[[439,4],[524,4]]},"769":{"position":[[133,4]]},"771":{"position":[[439,4],[524,4]]},"780":{"position":[[155,4]]},"781":{"position":[[130,4]]},"786":{"position":[[440,4]]},"789":{"position":[[1112,4],[1780,4]]},"791":{"position":[[1079,4]]},"794":{"position":[[1172,4]]},"796":{"position":[[134,4]]},"798":{"position":[[437,4],[522,4]]},"809":{"position":[[1172,4]]},"811":{"position":[[133,4]]},"813":{"position":[[437,4],[522,4]]},"825":{"position":[[1008,4]]},"827":{"position":[[133,4]]},"829":{"position":[[437,4],[522,4]]},"841":{"position":[[133,4]]},"850":{"position":[[133,4]]},"858":{"position":[[133,4]]},"864":{"position":[[523,4]]},"866":{"position":[[133,4]]},"867":{"position":[[1544,4]]},"869":{"position":[[1492,4],[1611,4]]},"876":{"position":[[523,4]]},"878":{"position":[[133,4]]},"884":{"position":[[133,4]]},"890":{"position":[[134,4]]},"896":{"position":[[133,4]]},"903":{"position":[[627,4],[959,4]]},"906":{"position":[[133,4]]},"908":{"position":[[483,4],[568,4]]},"915":{"position":[[627,4],[959,4],[1236,4]]},"917":{"position":[[138,4],[847,4]]},"919":{"position":[[1372,4]]},"921":{"position":[[133,4]]},"924":{"position":[[483,4],[568,4]]},"930":{"position":[[627,4],[959,4]]},"933":{"position":[[133,4]]},"935":{"position":[[483,4],[568,4]]},"945":{"position":[[1033,4],[1110,5]]},"947":{"position":[[1052,4]]},"949":{"position":[[133,4]]},"951":{"position":[[483,4],[568,4]]},"958":{"position":[[133,4]]},"963":{"position":[[781,4],[1113,4],[1390,4]]},"965":{"position":[[138,4],[847,4]]},"967":{"position":[[133,4]]},"969":{"position":[[483,4],[568,4]]},"981":{"position":[[133,4]]},"990":{"position":[[133,4]]},"996":{"position":[[133,4]]},"1005":{"position":[[130,4]]},"1007":{"position":[[128,4]]},"1008":{"position":[[1018,4]]},"1014":{"position":[[133,4]]},"1020":{"position":[[376,4],[1331,4]]},"1021":{"position":[[133,4]]},"1027":{"position":[[133,4]]},"1033":{"position":[[137,4]]},"1044":{"position":[[133,4]]},"1046":{"position":[[417,4],[502,4]]},"1052":{"position":[[133,4]]},"1054":{"position":[[417,4],[502,4]]},"1060":{"position":[[133,4]]},"1062":{"position":[[417,4],[502,4]]},"1069":{"position":[[133,4]]},"1075":{"position":[[133,4]]},"1082":{"position":[[188,4]]},"1084":{"position":[[133,4]]},"1093":{"position":[[133,4]]},"1100":{"position":[[133,4]]},"1106":{"position":[[134,4]]},"1112":{"position":[[133,4]]},"1122":{"position":[[265,4]]},"1123":{"position":[[704,4]]},"1124":{"position":[[133,4]]},"1132":{"position":[[134,4]]},"1137":{"position":[[50,4],[163,4]]},"1143":{"position":[[85,4]]},"1149":{"position":[[379,4]]},"1150":{"position":[[100,4]]},"1161":{"position":[[85,4]]},"1166":{"position":[[107,4]]},"1169":{"position":[[85,4]]},"1178":{"position":[[50,4],[164,4]]},"1179":{"position":[[919,4]]},"1187":{"position":[[50,4],[166,4]]},"1195":{"position":[[50,4]]},"1199":{"position":[[109,4]]},"1200":{"position":[[650,4]]},"1205":{"position":[[50,4]]},"1206":{"position":[[1147,4]]},"1212":{"position":[[85,4]]},"1219":{"position":[[85,4]]},"1229":{"position":[[50,4],[176,4]]},"1237":{"position":[[83,4]]},"1243":{"position":[[410,4]]},"1246":{"position":[[50,4]]},"1251":{"position":[[187,4]]},"1252":{"position":[[130,4]]},"1259":{"position":[[92,4]]},"1265":{"position":[[15,4]]},"1284":{"position":[[50,4],[161,4]]},"1286":{"position":[[1229,4]]},"1299":{"position":[[50,4],[161,4]]},"1301":{"position":[[1065,4]]},"1312":{"position":[[50,4],[164,4]]},"1317":{"position":[[402,4]]},"1323":{"position":[[50,4],[161,4]]},"1325":{"position":[[1229,4]]},"1336":{"position":[[50,4],[164,4]]},"1341":{"position":[[402,4]]},"1347":{"position":[[50,4],[164,4]]},"1352":{"position":[[402,4]]},"1355":{"position":[[50,4],[163,4]]},"1356":{"position":[[724,4]]},"1362":{"position":[[80,4]]},"1375":{"position":[[50,4],[165,4]]},"1385":{"position":[[50,4],[165,4]]},"1392":{"position":[[111,4]]},"1393":{"position":[[359,4]]},"1399":{"position":[[50,4],[165,4]]},"1410":{"position":[[50,4],[165,4]]},"1419":{"position":[[50,4],[165,4]]},"1426":{"position":[[50,4],[167,4]]},"1432":{"position":[[402,4]]},"1435":{"position":[[518,4]]},"1438":{"position":[[507,4]]},"1443":{"position":[[9,4]]},"1444":{"position":[[9,4]]},"1451":{"position":[[1074,4]]},"1452":{"position":[[883,4],[1098,4],[1317,4],[3827,4]]},"1459":{"position":[[1408,4],[1707,4]]},"1461":{"position":[[1742,4],[2320,4]]},"1462":{"position":[[732,4]]},"1467":{"position":[[1665,4]]},"1471":{"position":[[139,4]]},"1476":{"position":[[752,4]]},"1477":{"position":[[2701,4]]}},"keywords":{}}],["moreov",{"_index":2256,"title":{},"content":{"208":{"position":[[1538,9]]}},"keywords":{}}],["moreresourc",{"_index":806,"title":{},"content":{"54":{"position":[[305,13]]}},"keywords":{}}],["mostli",{"_index":6590,"title":{},"content":{"1459":{"position":[[333,8]]}},"keywords":{}}],["motherduck",{"_index":5425,"title":{"1257":{"position":[[0,10]]}},"content":{"1120":{"position":[[1377,10]]},"1258":{"position":[[40,10]]},"1259":{"position":[[39,10]]},"1260":{"position":[[67,10],[130,11]]},"1262":{"position":[[184,10],[499,10]]}},"keywords":{}}],["motherduck:dev",{"_index":5426,"title":{},"content":{"1120":{"position":[[1439,14]]}},"keywords":{}}],["motherduck:dev"",{"_index":5922,"title":{},"content":{"1261":{"position":[[104,20]]}},"keywords":{}}],["move",{"_index":319,"title":{},"content":{"11":{"position":[[776,5]]},"35":{"position":[[126,4]]},"36":{"position":[[131,5]]},"61":{"position":[[113,4]]},"190":{"position":[[1780,4]]},"192":{"position":[[2142,4]]},"213":{"position":[[309,6]]},"254":{"position":[[2083,6]]},"281":{"position":[[2192,6]]},"288":{"position":[[255,4]]},"299":{"position":[[247,4]]},"323":{"position":[[54,4]]},"1201":{"position":[[515,5]]}},"keywords":{}}],["movement",{"_index":1924,"title":{"1455":{"position":[[5,8]]}},"content":{"163":{"position":[[543,8]]},"1455":{"position":[[122,9]]}},"keywords":{}}],["movi",{"_index":2276,"title":{},"content":{"210":{"position":[[214,6],[584,6],[1782,6],[1870,6]]}},"keywords":{}}],["mozilla’",{"_index":1144,"title":{},"content":{"82":{"position":[[267,9]]}},"keywords":{}}],["msdb.dbo.gcloudsql_cdc_enable_db",{"_index":5261,"title":{},"content":{"1059":{"position":[[801,32]]}},"keywords":{}}],["msdb.dbo.rds_cdc_enable_db",{"_index":5260,"title":{},"content":{"1051":{"position":[[1037,27]]}},"keywords":{}}],["msg",{"_index":2670,"title":{},"content":{"250":{"position":[[988,3]]}},"keywords":{}}],["msg.value}"",{"_index":2672,"title":{},"content":{"250":{"position":[[1036,18]]}},"keywords":{}}],["msk",{"_index":3666,"title":{"430":{"position":[[28,6]]}},"content":{"430":{"position":[[49,6],[147,3]]}},"keywords":{}}],["much",{"_index":189,"title":{},"content":{"4":{"position":[[742,4]]},"163":{"position":[[1021,4]]},"240":{"position":[[4286,4]]},"281":{"position":[[3237,4]]},"319":{"position":[[1209,4]]},"320":{"position":[[1459,4]]},"323":{"position":[[1783,4]]},"330":{"position":[[599,4]]}},"keywords":{}}],["multi",{"_index":1494,"title":{},"content":{"105":{"position":[[1014,5]]}},"keywords":{}}],["multiarch",{"_index":889,"title":{},"content":{"58":{"position":[[604,9]]},"169":{"position":[[848,9]]}},"keywords":{}}],["multilin",{"_index":1231,"title":{},"content":{"83":{"position":[[1324,9]]}},"keywords":{}}],["multiline.info",{"_index":1239,"title":{},"content":{"83":{"position":[[1431,15]]}},"keywords":{}}],["multilinestri",{"_index":6188,"title":{},"content":{"1292":{"position":[[5446,13]]},"1306":{"position":[[5446,13]]},"1329":{"position":[[5446,13]]}},"keywords":{}}],["multipl",{"_index":579,"title":{},"content":{"23":{"position":[[235,8]]},"42":{"position":[[379,8]]},"45":{"position":[[497,8],[530,8]]},"56":{"position":[[1420,8]]},"60":{"position":[[111,8]]},"66":{"position":[[82,8]]},"69":{"position":[[588,8],[691,8]]},"72":{"position":[[474,8],[720,8]]},"73":{"position":[[23,8]]},"81":{"position":[[1833,8],[2850,8]]},"101":{"position":[[639,8]]},"107":{"position":[[248,8]]},"109":{"position":[[116,8]]},"122":{"position":[[1060,8]]},"124":{"position":[[624,8]]},"128":{"position":[[241,8]]},"132":{"position":[[207,8]]},"133":{"position":[[84,8]]},"138":{"position":[[840,8]]},"142":{"position":[[811,8]]},"154":{"position":[[529,8]]},"163":{"position":[[33,8]]},"164":{"position":[[352,8]]},"183":{"position":[[2653,8]]},"219":{"position":[[324,8],[369,8]]},"290":{"position":[[915,8]]},"295":{"position":[[743,8]]},"319":{"position":[[567,8]]},"326":{"position":[[1115,8],[1588,8]]},"366":{"position":[[321,8]]},"373":{"position":[[38,8]]},"374":{"position":[[343,8]]},"385":{"position":[[395,8],[523,8]]},"419":{"position":[[1155,8]]},"440":{"position":[[1171,8]]},"480":{"position":[[1197,8]]},"532":{"position":[[164,8]]},"534":{"position":[[764,8],[1342,8]]},"547":{"position":[[1157,8]]},"548":{"position":[[191,8]]},"552":{"position":[[576,8],[623,8]]},"657":{"position":[[637,8]]},"660":{"position":[[165,8]]},"842":{"position":[[1608,8]]},"903":{"position":[[347,8]]},"915":{"position":[[347,8]]},"930":{"position":[[347,8]]},"963":{"position":[[501,8]]},"1023":{"position":[[1138,8]]},"1156":{"position":[[554,8],[762,8]]},"1178":{"position":[[323,8]]},"1189":{"position":[[329,8]]},"1197":{"position":[[335,8]]},"1207":{"position":[[418,8]]},"1232":{"position":[[21,8]]},"1248":{"position":[[362,8]]},"1277":{"position":[[895,8]]},"1357":{"position":[[267,8]]},"1387":{"position":[[368,8],[994,8]]},"1421":{"position":[[355,8]]},"1439":{"position":[[886,8]]},"1453":{"position":[[588,8]]},"1461":{"position":[[881,8]]},"1474":{"position":[[228,8]]}},"keywords":{}}],["multiplex",{"_index":5892,"title":{"1232":{"position":[[0,9]]}},"content":{"1230":{"position":[[1181,9]]},"1232":{"position":[[93,9],[215,9],[519,9],[610,9]]}},"keywords":{}}],["multipoint",{"_index":6191,"title":{},"content":{"1292":{"position":[[5504,10]]},"1306":{"position":[[5504,10]]},"1329":{"position":[[5504,10]]}},"keywords":{}}],["multipolygon",{"_index":6192,"title":{},"content":{"1292":{"position":[[5553,12]]},"1306":{"position":[[5553,12]]},"1329":{"position":[[5553,12]]}},"keywords":{}}],["multiset",{"_index":5651,"title":{},"content":{"1140":{"position":[[3050,8]]},"1316":{"position":[[3050,8]]},"1340":{"position":[[3050,8]]},"1351":{"position":[[3050,8]]},"1379":{"position":[[2537,8]]},"1403":{"position":[[2537,8]]},"1414":{"position":[[2537,8]]},"1431":{"position":[[3073,8]]}},"keywords":{}}],["mutabl",{"_index":5292,"title":{},"content":{"1077":{"position":[[140,8]]}},"keywords":{}}],["mutex",{"_index":6195,"title":{},"content":{"1292":{"position":[[5607,5]]},"1306":{"position":[[5607,5]]},"1329":{"position":[[5607,5]]}},"keywords":{}}],["my.flow.yaml",{"_index":1136,"title":{},"content":{"81":{"position":[[2524,12]]}},"keywords":{}}],["my.hostnam",{"_index":1160,"title":{},"content":{"82":{"position":[[1392,11],[3822,11],[4334,11]]}},"keywords":{}}],["my.webhook.com",{"_index":6674,"title":{},"content":{"1472":{"position":[[739,14]]}},"keywords":{}}],["my/widget.schema.yaml#/path/to/schema",{"_index":1894,"title":{},"content":{"161":{"position":[[258,41]]}},"keywords":{}}],["my_bucket",{"_index":5925,"title":{},"content":{"1261":{"position":[[210,9]]}},"keywords":{}}],["my_db",{"_index":5924,"title":{},"content":{"1261":{"position":[[183,5]]}},"keywords":{}}],["my_field",{"_index":1403,"title":{},"content":{"98":{"position":[[269,10]]}},"keywords":{}}],["my_fold",{"_index":3903,"title":{},"content":{"503":{"position":[[202,10]]}},"keywords":{}}],["my_google_cloud_project",{"_index":5894,"title":{},"content":{"1231":{"position":[[212,23]]}},"keywords":{}}],["my_hosted_dataset.json.zip",{"_index":4367,"title":{},"content":{"638":{"position":[[405,26]]}},"keywords":{}}],["my_new_top",{"_index":5896,"title":{},"content":{"1231":{"position":[[299,12]]}},"keywords":{}}],["my_sheet",{"_index":5915,"title":{},"content":{"1248":{"position":[[503,8]]}},"keywords":{}}],["my_subdomain",{"_index":5388,"title":{},"content":{"1108":{"position":[[226,12]]},"1130":{"position":[[78,12]]},"1131":{"position":[[78,12]]},"1133":{"position":[[1110,12]]},"1134":{"position":[[246,12]]}},"keywords":{}}],["my_tabl",{"_index":431,"title":{},"content":{"14":{"position":[[671,8]]}},"keywords":{}}],["my_table_v2",{"_index":446,"title":{},"content":{"14":{"position":[[1175,11]]}},"keywords":{}}],["my_time_seri",{"_index":6425,"title":{},"content":{"1429":{"position":[[655,17],[882,14]]}},"keywords":{}}],["myfield",{"_index":1681,"title":{},"content":{"122":{"position":[[1740,9]]},"159":{"position":[[251,8],[306,7]]},"1155":{"position":[[515,7],[527,8]]}},"keywords":{}}],["myorg/market",{"_index":2819,"title":{},"content":{"274":{"position":[[1126,15],[1528,15]]}},"keywords":{}}],["myorg/marketing/contact",{"_index":2818,"title":{},"content":{"274":{"position":[[377,25],[1210,25]]}},"keywords":{}}],["myorg/marketing/emaillist",{"_index":2815,"title":{},"content":{"274":{"position":[[263,25],[1396,25]]}},"keywords":{}}],["myorg/marketing/lead",{"_index":2813,"title":{},"content":{"274":{"position":[[205,22]]},"284":{"position":[[207,22],[435,21],[561,21]]},"285":{"position":[[353,22]]}},"keywords":{}}],["myorg/marketing/socialmedia",{"_index":2816,"title":{},"content":{"274":{"position":[[293,28]]}},"keywords":{}}],["myorg/yourname/citibiketutori",{"_index":2119,"title":{},"content":{"190":{"position":[[767,32]]},"192":{"position":[[405,32]]}},"keywords":{}}],["mysecrettoken",{"_index":3881,"title":{},"content":{"489":{"position":[[646,14],[723,14]]},"662":{"position":[[646,14],[723,14]]},"677":{"position":[[646,14],[723,14]]},"692":{"position":[[646,14],[723,14]]}},"keywords":{}}],["myserver.com:22",{"_index":5202,"title":{},"content":{"1021":{"position":[[393,15]]},"1022":{"position":[[117,15]]}},"keywords":{}}],["mysetup",{"_index":1744,"title":{},"content":{"133":{"position":[[514,8]]}},"keywords":{}}],["mysql",{"_index":1824,"title":{"787":{"position":[[0,5]]},"791":{"position":[[12,6]]},"793":{"position":[[19,6]]},"794":{"position":[[12,5]]},"806":{"position":[[21,5]]},"809":{"position":[[12,5]]},"821":{"position":[[0,5]]},"822":{"position":[[15,5]]},"825":{"position":[[12,5]]},"1263":{"position":[[0,5]]},"1271":{"position":[[0,5]]},"1280":{"position":[[0,5]]},"1283":{"position":[[19,6]]},"1286":{"position":[[12,5]]},"1288":{"position":[[0,5]]},"1294":{"position":[[21,5]]},"1301":{"position":[[12,5]]},"1318":{"position":[[15,5]]},"1325":{"position":[[12,5]]}},"content":{"142":{"position":[[1020,6]]},"363":{"position":[[1782,5]]},"757":{"position":[[2434,6]]},"770":{"position":[[2434,6]]},"788":{"position":[[25,5],[229,5]]},"789":{"position":[[38,5],[895,5]]},"790":{"position":[[145,5]]},"791":{"position":[[670,5],[925,5]]},"792":{"position":[[1632,5],[1990,5]]},"793":{"position":[[681,5],[1344,5]]},"794":{"position":[[385,5],[481,5],[699,5],[1184,5]]},"795":{"position":[[12,5]]},"796":{"position":[[251,5]]},"797":{"position":[[2396,5],[2437,6]]},"799":{"position":[[12,5]]},"801":{"position":[[170,5]]},"803":{"position":[[238,5]]},"804":{"position":[[115,5]]},"807":{"position":[[38,5]]},"808":{"position":[[1290,5]]},"809":{"position":[[385,5],[481,5],[699,5],[1184,5]]},"810":{"position":[[12,5]]},"811":{"position":[[250,5]]},"812":{"position":[[2396,5],[2437,6]]},"814":{"position":[[12,5]]},"816":{"position":[[170,5]]},"818":{"position":[[238,5]]},"819":{"position":[[115,5]]},"821":{"position":[[0,5],[62,5],[196,5],[483,5]]},"823":{"position":[[38,5]]},"824":{"position":[[923,6],[1491,5],[1754,5],[2112,5],[2408,5]]},"825":{"position":[[385,5],[481,5],[1020,5]]},"826":{"position":[[12,5]]},"827":{"position":[[250,5]]},"828":{"position":[[2396,5],[2437,6]]},"830":{"position":[[12,5]]},"832":{"position":[[170,5]]},"834":{"position":[[238,5]]},"835":{"position":[[115,5]]},"1120":{"position":[[1454,5]]},"1264":{"position":[[70,5]]},"1265":{"position":[[172,5]]},"1268":{"position":[[80,5]]},"1270":{"position":[[98,5]]},"1271":{"position":[[37,5]]},"1281":{"position":[[40,5],[102,5]]},"1282":{"position":[[115,5],[146,6],[189,5]]},"1283":{"position":[[211,6]]},"1284":{"position":[[113,5]]},"1286":{"position":[[442,5],[538,5],[756,5],[1241,5]]},"1288":{"position":[[25,6],[68,5]]},"1291":{"position":[[169,6]]},"1292":{"position":[[1,5],[148,5]]},"1295":{"position":[[40,5],[102,5]]},"1299":{"position":[[113,5]]},"1301":{"position":[[442,5],[538,5],[1077,5]]},"1303":{"position":[[1514,5]]},"1305":{"position":[[169,6]]},"1306":{"position":[[1,5],[148,5]]},"1319":{"position":[[40,5],[102,5]]},"1323":{"position":[[113,5]]},"1325":{"position":[[442,5],[538,5],[756,5],[1241,5]]},"1328":{"position":[[169,6]]},"1329":{"position":[[1,5],[148,5]]}},"keywords":{}}],["mysql'",{"_index":4702,"title":{},"content":{"789":{"position":[[176,7]]},"794":{"position":[[1,7]]},"807":{"position":[[176,7]]},"809":{"position":[[1,7]]},"823":{"position":[[176,7]]},"825":{"position":[[1,7]]},"1286":{"position":[[1,7]]},"1301":{"position":[[1,7]]},"1325":{"position":[[1,7]]}},"keywords":{}}],["mysql.rds_set_configuration('binlog",{"_index":4675,"title":{},"content":{"767":{"position":[[2317,35]]},"792":{"position":[[2298,35]]},"824":{"position":[[2429,35]]}},"keywords":{}}],["mysql8.0typ",{"_index":4707,"title":{},"content":{"792":{"position":[[1267,13]]},"824":{"position":[[1035,13]]}},"keywords":{}}],["mysql:dev",{"_index":3308,"title":{},"content":{"363":{"position":[[1834,9]]},"798":{"position":[[149,9]]},"813":{"position":[[149,9]]},"829":{"position":[[149,9]]},"1120":{"position":[[1511,9]]},"1287":{"position":[[98,9]]},"1302":{"position":[[98,9]]},"1326":{"position":[[98,9]]},"1480":{"position":[[467,9]]}},"keywords":{}}],["mysql_errno",{"_index":6198,"title":{},"content":{"1292":{"position":[[5648,11]]},"1306":{"position":[[5648,11]]},"1329":{"position":[[5648,11]]}},"keywords":{}}],["mysqlamazon",{"_index":4697,"title":{},"content":{"788":{"position":[[166,11]]},"790":{"position":[[82,11]]}},"keywords":{}}],["mytransformnam",{"_index":1346,"title":{},"content":{"94":{"position":[[1242,15]]}},"keywords":{}}],["n",{"_index":2455,"title":{},"content":{"221":{"position":[[1372,1]]},"222":{"position":[[617,1]]},"223":{"position":[[583,1]]},"224":{"position":[[636,1]]},"236":{"position":[[1394,1]]},"517":{"position":[[2228,1],[2251,1]]},"868":{"position":[[393,5]]},"880":{"position":[[394,5]]},"1076":{"position":[[471,1],[485,1]]},"1298":{"position":[[583,1]]},"1322":{"position":[[617,1]]},"1335":{"position":[[617,1]]},"1346":{"position":[[583,1]]},"1437":{"position":[[1009,1]]}},"keywords":{}}],["n"",{"_index":4069,"title":{},"content":{"546":{"position":[[383,9]]},"594":{"position":[[371,9]]}},"keywords":{}}],["na",{"_index":3475,"title":{},"content":{"385":{"position":[[212,2]]},"388":{"position":[[336,2]]}},"keywords":{}}],["naiv",{"_index":5020,"title":{},"content":{"912":{"position":[[895,5]]}},"keywords":{}}],["name",{"_index":113,"title":{"1146":{"position":[[5,6]]},"1155":{"position":[[0,6]]},"1173":{"position":[[5,6]]},"1215":{"position":[[5,6]]},"1223":{"position":[[5,6]]},"1449":{"position":[[19,4]]}},"content":{"3":{"position":[[298,6]]},"6":{"position":[[133,4]]},"8":{"position":[[134,4]]},"13":{"position":[[1122,5],[1617,5],[1776,5]]},"14":{"position":[[1014,4],[1137,5]]},"26":{"position":[[355,5]]},"27":{"position":[[135,5],[180,4],[318,4]]},"56":{"position":[[165,4],[668,6]]},"62":{"position":[[296,4]]},"63":{"position":[[569,4]]},"66":{"position":[[816,4]]},"69":{"position":[[181,4]]},"70":{"position":[[572,4]]},"71":{"position":[[627,4],[667,8],[724,4]]},"74":{"position":[[716,6],[750,6]]},"76":{"position":[[17,5],[505,4]]},"81":{"position":[[287,4],[359,4]]},"82":{"position":[[1854,4],[2540,4],[4178,4],[4681,4]]},"94":{"position":[[111,4],[1116,4],[1236,5],[1353,4],[1400,5]]},"96":{"position":[[148,5]]},"98":{"position":[[21,5],[178,4],[229,4],[354,5],[438,5],[933,4]]},"105":{"position":[[561,5],[1254,4]]},"107":{"position":[[1444,5],[2624,5],[3278,5],[3996,5]]},"117":{"position":[[373,5]]},"120":{"position":[[189,4],[1016,4],[1063,5],[2140,5]]},"122":{"position":[[348,5]]},"123":{"position":[[649,5]]},"128":{"position":[[33,5],[530,5],[575,5]]},"129":{"position":[[775,5],[816,5],[903,5],[950,5]]},"138":{"position":[[676,5],[695,4],[751,5],[811,5],[917,5],[1711,5],[1726,4]]},"141":{"position":[[766,5],[813,4],[1719,5],[1734,4]]},"142":{"position":[[579,5],[631,5],[650,4],[722,5],[782,5],[896,5],[1736,5],[1751,4]]},"145":{"position":[[23,4]]},"146":{"position":[[15,4]]},"148":{"position":[[23,4]]},"149":{"position":[[15,4]]},"151":{"position":[[23,4]]},"152":{"position":[[15,4]]},"154":{"position":[[1455,5]]},"162":{"position":[[699,6]]},"172":{"position":[[237,4]]},"173":{"position":[[1069,4]]},"174":{"position":[[384,4]]},"182":{"position":[[107,5],[452,5]]},"183":{"position":[[340,5],[376,4],[424,5],[898,4],[1356,5],[2361,4],[2395,4],[2453,5],[3870,5]]},"184":{"position":[[262,4],[475,4],[698,4],[861,4]]},"190":{"position":[[387,4],[423,4],[434,5],[739,4]]},"192":{"position":[[311,4],[377,4],[1245,4],[1296,4]]},"206":{"position":[[50,4]]},"207":{"position":[[319,5]]},"208":{"position":[[1835,5],[1996,6]]},"217":{"position":[[637,4],[673,4],[736,4],[830,4],[866,5],[1482,6]]},"218":{"position":[[341,4],[389,6]]},"222":{"position":[[899,4]]},"228":{"position":[[443,6],[529,4],[609,4],[687,6],[893,5],[1077,5],[1110,5],[1195,5]]},"229":{"position":[[174,4],[426,6],[761,5],[794,5],[879,5]]},"230":{"position":[[1284,6]]},"238":{"position":[[1034,4]]},"239":{"position":[[2440,6]]},"240":{"position":[[3957,4]]},"254":{"position":[[592,5],[2649,5]]},"255":{"position":[[184,4]]},"263":{"position":[[356,4],[452,4],[1110,5]]},"264":{"position":[[741,5]]},"267":{"position":[[715,5],[751,4],[799,5],[1288,4]]},"268":{"position":[[248,4],[563,4],[985,5],[1360,4],[1387,4]]},"269":{"position":[[221,6],[595,5],[931,4],[958,4]]},"270":{"position":[[742,5],[777,4],[917,4],[1601,5]]},"271":{"position":[[217,4],[258,5]]},"274":{"position":[[121,4],[416,6],[1343,5],[1391,4],[1719,5]]},"277":{"position":[[667,5]]},"278":{"position":[[1111,5]]},"279":{"position":[[1452,5],[1569,5]]},"280":{"position":[[1608,5],[1762,5],[1939,5]]},"281":{"position":[[1000,5],[1027,5]]},"284":{"position":[[154,4]]},"290":{"position":[[462,4],[498,4],[561,4],[638,4],[674,5],[811,5],[957,4]]},"291":{"position":[[265,4],[313,6],[1073,4],[1136,5]]},"295":{"position":[[279,4],[1120,4]]},"296":{"position":[[477,5],[750,5],[775,5],[848,5],[876,5],[1448,5],[2751,5],[2776,5],[2849,5],[2877,5],[4646,6],[5035,6],[6434,5]]},"301":{"position":[[402,4],[438,4],[501,4],[578,4],[614,5]]},"302":{"position":[[265,4],[313,6],[1058,4],[1100,4]]},"307":{"position":[[740,5],[1830,5]]},"314":{"position":[[459,5],[2314,5],[2427,4],[2570,4]]},"316":{"position":[[186,4]]},"349":{"position":[[164,4]]},"366":{"position":[[448,4]]},"370":{"position":[[406,4],[933,4],[942,4],[1120,5],[1189,4],[1198,4],[1333,4],[2137,5]]},"377":{"position":[[1728,4],[1740,4]]},"378":{"position":[[332,5]]},"392":{"position":[[562,4],[743,5]]},"397":{"position":[[295,4],[876,4],[885,4]]},"402":{"position":[[211,4],[216,4],[700,4],[705,4]]},"417":{"position":[[1093,4],[2012,4],[2335,5]]},"432":{"position":[[1258,5]]},"436":{"position":[[405,4]]},"438":{"position":[[697,4],[706,4],[1566,4],[1575,4],[1968,4]]},"464":{"position":[[307,4]]},"469":{"position":[[74,4]]},"479":{"position":[[209,4],[293,4]]},"482":{"position":[[543,4],[550,4]]},"487":{"position":[[354,4]]},"492":{"position":[[456,4],[505,4]]},"517":{"position":[[866,4],[1903,5],[1909,4],[1918,4]]},"518":{"position":[[299,5]]},"540":{"position":[[361,4],[366,4]]},"541":{"position":[[182,5]]},"545":{"position":[[568,4],[1730,4]]},"556":{"position":[[1297,4],[1312,4]]},"590":{"position":[[726,6]]},"593":{"position":[[182,4]]},"601":{"position":[[374,6],[462,4]]},"616":{"position":[[154,5],[235,6],[249,5]]},"637":{"position":[[1203,4]]},"645":{"position":[[302,4],[359,4]]},"646":{"position":[[627,4],[788,4]]},"647":{"position":[[210,5]]},"652":{"position":[[302,4],[359,4]]},"654":{"position":[[348,4],[872,4]]},"665":{"position":[[456,4],[505,4]]},"680":{"position":[[456,4]]},"695":{"position":[[456,4],[505,4]]},"750":{"position":[[653,4],[1147,4]]},"752":{"position":[[101,4]]},"753":{"position":[[1558,5]]},"754":{"position":[[518,5]]},"757":{"position":[[635,4],[780,4],[789,4],[959,4],[968,4],[1465,5],[2042,4]]},"763":{"position":[[160,5]]},"766":{"position":[[653,4],[1147,4]]},"767":{"position":[[903,4]]},"770":{"position":[[635,4],[780,4],[789,4],[959,4],[968,4],[1465,5],[2042,4]]},"776":{"position":[[160,5]]},"782":{"position":[[573,4],[624,4]]},"789":{"position":[[641,4],[1548,4]]},"791":{"position":[[54,4]]},"792":{"position":[[1197,4]]},"793":{"position":[[1581,5]]},"794":{"position":[[560,5]]},"797":{"position":[[635,4],[780,4],[789,4],[959,4],[968,4],[1465,5],[2049,4]]},"803":{"position":[[160,5]]},"807":{"position":[[641,4],[1135,4]]},"809":{"position":[[560,5]]},"812":{"position":[[635,4],[780,4],[789,4],[959,4],[968,4],[1465,5],[2049,4]]},"818":{"position":[[160,5]]},"823":{"position":[[641,4],[1135,4]]},"824":{"position":[[972,4]]},"825":{"position":[[560,5]]},"828":{"position":[[635,4],[780,4],[789,4],[959,4],[968,4],[1465,5],[2049,4]]},"834":{"position":[[160,5]]},"840":{"position":[[590,5],[962,5],[1722,4],[1752,5],[2032,5],[2177,5],[2202,4]]},"842":{"position":[[1928,4],[1937,4],[3024,4],[3033,4],[3242,4],[3401,4]]},"843":{"position":[[692,5]]},"849":{"position":[[1061,5],[1575,5],[2763,4],[2793,5],[3152,4],[3317,5],[3342,4]]},"865":{"position":[[120,5]]},"867":{"position":[[335,4],[581,5],[673,4],[2235,5]]},"869":{"position":[[155,5],[183,5],[207,6],[366,5],[563,5],[674,5],[889,5]]},"872":{"position":[[18,5]]},"877":{"position":[[120,5]]},"879":{"position":[[1575,4],[1590,4]]},"880":{"position":[[466,5]]},"892":{"position":[[171,5],[223,5],[271,5],[317,5],[367,5],[425,5],[489,5],[549,5],[609,5]]},"903":{"position":[[474,4]]},"904":{"position":[[970,4],[2260,4]]},"907":{"position":[[189,4],[716,4],[725,4],[903,5],[972,4],[981,4],[1116,4],[1542,5]]},"915":{"position":[[474,4]]},"917":{"position":[[1769,4]]},"918":{"position":[[1173,4],[2552,4]]},"919":{"position":[[2488,5]]},"923":{"position":[[189,4],[716,4],[725,4],[903,5],[972,4],[981,4],[1116,4],[1542,5]]},"930":{"position":[[474,4]]},"931":{"position":[[1922,4]]},"934":{"position":[[189,4],[716,4],[725,4],[903,5],[972,4],[981,4],[1116,4],[1542,5]]},"943":{"position":[[782,4]]},"944":{"position":[[382,6]]},"945":{"position":[[31,4],[414,4],[782,4]]},"947":{"position":[[703,5],[709,4],[872,4],[1105,5],[1142,4],[1166,4]]},"950":{"position":[[189,4],[716,4],[725,4],[903,5],[972,4],[981,4],[1116,4],[1542,5]]},"963":{"position":[[628,4]]},"965":{"position":[[1769,4]]},"968":{"position":[[189,4],[716,4],[725,4],[903,5],[972,4],[981,4],[1116,4],[1542,5]]},"995":{"position":[[71,5]]},"997":{"position":[[245,4]]},"1008":{"position":[[438,5],[504,5],[1326,5],[1356,5],[1513,6]]},"1020":{"position":[[1774,4],[2040,6]]},"1021":{"position":[[889,5]]},"1031":{"position":[[295,4]]},"1032":{"position":[[254,5],[452,4]]},"1034":{"position":[[296,4],[395,4]]},"1035":{"position":[[66,4]]},"1043":{"position":[[1852,5]]},"1045":{"position":[[196,4],[751,5],[843,4],[1161,5]]},"1047":{"position":[[642,4]]},"1053":{"position":[[196,4],[751,5],[843,4],[1161,5]]},"1055":{"position":[[642,4]]},"1061":{"position":[[196,4],[751,5],[843,4],[1161,5]]},"1063":{"position":[[642,4]]},"1092":{"position":[[164,4],[451,4]]},"1094":{"position":[[253,4],[262,4]]},"1123":{"position":[[773,6]]},"1125":{"position":[[556,4],[565,4]]},"1138":{"position":[[296,4],[1727,4]]},"1140":{"position":[[3093,5]]},"1146":{"position":[[24,5],[653,5]]},"1147":{"position":[[93,4]]},"1151":{"position":[[354,4],[998,4],[1379,4]]},"1155":{"position":[[31,5],[342,5],[422,5],[461,5],[664,6]]},"1162":{"position":[[812,4]]},"1173":{"position":[[24,5],[665,5]]},"1174":{"position":[[93,4]]},"1179":{"position":[[554,4]]},"1183":{"position":[[1314,4]]},"1188":{"position":[[314,4],[319,4],[382,4],[768,4]]},"1195":{"position":[[553,4],[565,4],[617,4]]},"1196":{"position":[[920,4]]},"1206":{"position":[[304,4],[590,4],[884,4],[972,5]]},"1207":{"position":[[220,4],[565,4]]},"1209":{"position":[[100,5]]},"1215":{"position":[[24,5],[653,5]]},"1216":{"position":[[93,4]]},"1223":{"position":[[24,5],[665,5]]},"1224":{"position":[[93,4]]},"1230":{"position":[[490,4],[1299,4],[1304,4]]},"1247":{"position":[[1081,4],[1086,4]]},"1253":{"position":[[213,4],[490,4]]},"1260":{"position":[[452,4],[927,4]]},"1267":{"position":[[194,4]]},"1269":{"position":[[66,4]]},"1275":{"position":[[393,5]]},"1277":{"position":[[843,4],[1072,4]]},"1285":{"position":[[79,4],[647,4]]},"1286":{"position":[[617,5],[2562,4]]},"1289":{"position":[[1684,5]]},"1292":{"position":[[5693,4],[5739,5]]},"1300":{"position":[[79,4],[647,4]]},"1301":{"position":[[617,5],[2398,4]]},"1306":{"position":[[5693,4],[5739,5]]},"1310":{"position":[[1005,5]]},"1313":{"position":[[79,4],[1271,4]]},"1316":{"position":[[3093,5]]},"1317":{"position":[[425,5],[628,6],[718,5]]},"1322":{"position":[[899,4]]},"1324":{"position":[[79,4],[647,4]]},"1325":{"position":[[617,5],[2562,4]]},"1329":{"position":[[5693,4],[5739,5]]},"1335":{"position":[[899,4]]},"1337":{"position":[[79,4],[1271,4]]},"1340":{"position":[[3093,5]]},"1341":{"position":[[425,5],[628,6],[718,5]]},"1348":{"position":[[79,4],[1271,4]]},"1351":{"position":[[3093,5]]},"1352":{"position":[[425,5],[628,6],[718,5]]},"1356":{"position":[[1143,4],[1152,4],[1343,4],[1454,4]]},"1362":{"position":[[689,4],[706,4]]},"1367":{"position":[[79,4]]},"1376":{"position":[[79,4],[477,4]]},"1379":{"position":[[2590,5]]},"1383":{"position":[[118,5],[316,5]]},"1386":{"position":[[247,4],[530,4],[1171,4]]},"1388":{"position":[[655,5]]},"1400":{"position":[[79,4],[477,4]]},"1403":{"position":[[2590,5]]},"1409":{"position":[[1125,5]]},"1411":{"position":[[79,4],[477,4]]},"1414":{"position":[[2590,5]]},"1420":{"position":[[122,4],[181,4],[267,4],[527,4],[718,4]]},"1427":{"position":[[79,4],[1031,4]]},"1429":{"position":[[503,4]]},"1431":{"position":[[3116,5]]},"1432":{"position":[[425,5],[642,6],[732,5]]},"1434":{"position":[[77,5],[173,4]]},"1448":{"position":[[386,6],[481,5]]},"1449":{"position":[[31,4],[131,5],[201,5],[277,5],[538,4]]},"1452":{"position":[[684,4],[3209,4],[3255,4]]},"1461":{"position":[[1589,5],[1637,6],[5520,5]]},"1462":{"position":[[29,5],[44,4],[179,5],[296,6],[412,5],[581,4]]},"1463":{"position":[[260,5]]},"1464":{"position":[[117,5]]},"1465":{"position":[[437,5]]},"1466":{"position":[[79,5]]},"1467":{"position":[[420,5],[2087,5]]},"1470":{"position":[[563,4]]},"1472":{"position":[[920,5]]},"1474":{"position":[[150,5],[581,4]]},"1476":{"position":[[126,5],[1188,5]]},"1477":{"position":[[900,5],[3116,5]]},"1480":{"position":[[126,4],[722,4],[769,5]]}},"keywords":{}}],["name>",{"_index":945,"title":{},"content":{"63":{"position":[[509,10]]},"68":{"position":[[805,8]]},"284":{"position":[[345,9]]},"548":{"position":[[836,8]]}},"keywords":{}}],["name>"",{"_index":4224,"title":{},"content":{"585":{"position":[[299,15],[360,15],[421,15],[589,15],[680,15],[741,15]]},"606":{"position":[[227,15],[288,15]]}},"keywords":{}}],["name>.<organization>.<region>.app.firebolt.io",{"_index":5861,"title":{},"content":{"1206":{"position":[[437,61]]}},"keywords":{}}],["name>.iam.gserviceaccount.com.follow",{"_index":3818,"title":{},"content":{"477":{"position":[[759,39]]},"598":{"position":[[722,39]]}},"keywords":{}}],["name>/left",{"_index":6698,"title":{},"content":{"1475":{"position":[[990,14]]}},"keywords":{}}],["name>/out",{"_index":6699,"title":{},"content":{"1475":{"position":[[1153,13]]}},"keywords":{}}],["name>/right",{"_index":6697,"title":{},"content":{"1475":{"position":[[867,15]]}},"keywords":{}}],["name>@<project",{"_index":3817,"title":{},"content":{"477":{"position":[[738,20]]},"598":{"position":[[701,20]]}},"keywords":{}}],["name"",{"_index":3798,"title":{},"content":{"472":{"position":[[692,10]]},"1092":{"position":[[376,11]]}},"keywords":{}}],["name(",{"_index":3849,"title":{},"content":{"482":{"position":[[637,7]]}},"keywords":{}}],["name.account.u",{"_index":5742,"title":{},"content":{"1151":{"position":[[135,15]]}},"keywords":{}}],["name.click",{"_index":5086,"title":{},"content":{"943":{"position":[[547,10]]}},"keywords":{}}],["name.each",{"_index":5897,"title":{},"content":{"1232":{"position":[[299,9]]}},"keywords":{}}],["name.lambda.sourc",{"_index":2798,"title":{},"content":{"268":{"position":[[284,18]]}},"keywords":{}}],["name.mi",{"_index":5866,"title":{},"content":{"1207":{"position":[[115,7]]}},"keywords":{}}],["name.migration.0.sql",{"_index":2802,"title":{},"content":{"268":{"position":[[599,21]]}},"keywords":{}}],["name.sql",{"_index":2799,"title":{},"content":{"268":{"position":[[314,9]]}},"keywords":{}}],["name.t",{"_index":2808,"title":{},"content":{"269":{"position":[[250,8]]}},"keywords":{}}],["name/prefix",{"_index":3601,"title":{},"content":{"417":{"position":[[2323,11]]},"545":{"position":[[1718,11]]}},"keywords":{}}],["namein",{"_index":3793,"title":{},"content":{"472":{"position":[[602,6],[739,6]]}},"keywords":{}}],["namespac",{"_index":622,"title":{"27":{"position":[[0,10]]},"1462":{"position":[[7,10]]}},"content":{"27":{"position":[[439,10],[568,9],[623,10]]},"190":{"position":[[637,10]]},"307":{"position":[[1182,10],[2032,10]]},"370":{"position":[[2053,9]]},"371":{"position":[[1325,10]]},"757":{"position":[[1960,9]]},"758":{"position":[[287,10]]},"770":{"position":[[1960,9]]},"771":{"position":[[287,10]]},"797":{"position":[[1960,9]]},"798":{"position":[[285,10]]},"812":{"position":[[1960,9]]},"813":{"position":[[285,10]]},"828":{"position":[[1960,9]]},"829":{"position":[[285,10]]},"867":{"position":[[2157,9]]},"868":{"position":[[465,10]]},"907":{"position":[[1460,9]]},"908":{"position":[[353,10]]},"923":{"position":[[1460,9]]},"924":{"position":[[353,10]]},"934":{"position":[[1460,9]]},"935":{"position":[[353,10]]},"950":{"position":[[1460,9]]},"951":{"position":[[353,10]]},"968":{"position":[[1460,9]]},"969":{"position":[[353,10]]},"1008":{"position":[[333,9]]},"1045":{"position":[[1079,9]]},"1046":{"position":[[294,10]]},"1053":{"position":[[1079,9]]},"1054":{"position":[[294,10]]},"1061":{"position":[[1079,9]]},"1062":{"position":[[294,10]]},"1162":{"position":[[448,10],[459,9],[469,9],[856,10],[879,9],[901,9]]},"1163":{"position":[[256,10],[267,9]]},"1277":{"position":[[1062,9],[1093,9]]},"1278":{"position":[[288,10],[304,9]]},"1462":{"position":[[160,10],[752,10]]}},"keywords":{}}],["namespace/inst",{"_index":3424,"title":{},"content":{"370":{"position":[[2067,18]]}},"keywords":{}}],["namespace/schema",{"_index":5003,"title":{},"content":{"907":{"position":[[1474,16]]},"923":{"position":[[1474,16]]},"934":{"position":[[1474,16]]},"950":{"position":[[1474,16]]},"968":{"position":[[1474,16]]},"1045":{"position":[[1093,16]]},"1053":{"position":[[1093,16]]},"1061":{"position":[[1093,16]]}},"keywords":{}}],["namespace_nam",{"_index":6271,"title":{},"content":{"1357":{"position":[[412,17]]}},"keywords":{}}],["namesuch",{"_index":623,"title":{},"content":{"27":{"position":[[88,8]]}},"keywords":{}}],["nameyour",{"_index":3786,"title":{},"content":{"471":{"position":[[43,8]]}},"keywords":{}}],["narrow",{"_index":1034,"title":{},"content":{"68":{"position":[[1721,6]]},"180":{"position":[[56,6]]},"217":{"position":[[1544,6]]}},"keywords":{}}],["nation",{"_index":5655,"title":{},"content":{"1140":{"position":[[3133,8]]},"1292":{"position":[[5778,8]]},"1306":{"position":[[5778,8]]},"1316":{"position":[[3133,8]]},"1329":{"position":[[5778,8]]},"1340":{"position":[[3133,8]]},"1351":{"position":[[3133,8]]},"1379":{"position":[[2632,8]]},"1403":{"position":[[2632,8]]},"1414":{"position":[[2632,8]]},"1431":{"position":[[3156,8]]}},"keywords":{}}],["nativ",{"_index":796,"title":{},"content":{"53":{"position":[[127,8]]},"68":{"position":[[645,6]]},"102":{"position":[[306,6]]},"122":{"position":[[999,6]]},"281":{"position":[[2700,6]]},"320":{"position":[[840,6]]},"325":{"position":[[791,6]]},"330":{"position":[[407,6]]}},"keywords":{}}],["native:dev",{"_index":3304,"title":{},"content":{"363":{"position":[[1558,10]]},"647":{"position":[[97,10]]}},"keywords":{}}],["natur",{"_index":1594,"title":{},"content":{"112":{"position":[[603,6]]},"125":{"position":[[442,7]]},"129":{"position":[[202,7]]},"163":{"position":[[1110,7]]},"164":{"position":[[1109,7]]},"821":{"position":[[1048,7]]},"909":{"position":[[1003,6]]},"925":{"position":[[1003,6]]},"936":{"position":[[1003,6]]},"952":{"position":[[1003,6]]},"970":{"position":[[1003,6]]},"1140":{"position":[[3180,7]]},"1192":{"position":[[541,7]]},"1209":{"position":[[834,7]]},"1292":{"position":[[5821,7]]},"1306":{"position":[[5821,7]]},"1316":{"position":[[3180,7]]},"1329":{"position":[[5821,7]]},"1340":{"position":[[3180,7]]},"1351":{"position":[[3180,7]]},"1370":{"position":[[511,7]]},"1379":{"position":[[2679,7]]},"1394":{"position":[[949,7]]},"1403":{"position":[[2679,7]]},"1414":{"position":[[2679,7]]},"1423":{"position":[[874,7]]},"1431":{"position":[[3203,7]]},"1435":{"position":[[614,7]]},"1440":{"position":[[69,7]]},"1467":{"position":[[2007,7]]},"1477":{"position":[[2911,7]]}},"keywords":{}}],["navig",{"_index":1765,"title":{"137":{"position":[[0,10]]}},"content":{"137":{"position":[[122,11]]},"181":{"position":[[1,8]]},"204":{"position":[[368,8],[598,10]]},"205":{"position":[[43,10]]},"230":{"position":[[396,8]]},"240":{"position":[[2837,10]]},"267":{"position":[[109,8]]},"349":{"position":[[48,10]]},"479":{"position":[[48,10]]},"487":{"position":[[43,8],[540,8]]},"675":{"position":[[1,8]]},"709":{"position":[[222,9]]},"840":{"position":[[497,8]]},"849":{"position":[[394,8],[754,8],[968,8]]},"931":{"position":[[649,8]]},"943":{"position":[[377,8]]},"947":{"position":[[58,10]]},"964":{"position":[[366,10]]},"1092":{"position":[[48,10]]},"1455":{"position":[[6,10]]},"1479":{"position":[[29,8]]}},"keywords":{}}],["nchar",{"_index":5658,"title":{},"content":{"1140":{"position":[[3221,5]]},"1292":{"position":[[5871,5]]},"1306":{"position":[[5871,5]]},"1316":{"position":[[3221,5]]},"1329":{"position":[[5871,5]]},"1340":{"position":[[3221,5]]},"1351":{"position":[[3221,5]]},"1379":{"position":[[2725,5]]},"1403":{"position":[[2725,5]]},"1414":{"position":[[2725,5]]},"1431":{"position":[[3244,5]]}},"keywords":{}}],["nclob",{"_index":5659,"title":{},"content":{"1140":{"position":[[3256,5]]},"1316":{"position":[[3256,5]]},"1340":{"position":[[3256,5]]},"1351":{"position":[[3256,5]]},"1379":{"position":[[2772,5]]},"1403":{"position":[[2772,5]]},"1414":{"position":[[2772,5]]},"1431":{"position":[[3279,5]]}},"keywords":{}}],["ndb",{"_index":6209,"title":{},"content":{"1292":{"position":[[5911,3]]},"1306":{"position":[[5911,3]]},"1329":{"position":[[5911,3]]}},"keywords":{}}],["ndbcluster",{"_index":6212,"title":{},"content":{"1292":{"position":[[5960,10]]},"1306":{"position":[[5960,10]]},"1329":{"position":[[5960,10]]}},"keywords":{}}],["near",{"_index":1651,"title":{},"content":{"121":{"position":[[153,4]]},"193":{"position":[[220,4]]},"210":{"position":[[2021,4]]},"232":{"position":[[791,4]]}},"keywords":{}}],["nearest",{"_index":6693,"title":{},"content":{"1475":{"position":[[410,7]]}},"keywords":{}}],["nearli",{"_index":1814,"title":{},"content":{"141":{"position":[[101,6]]},"142":{"position":[[211,6]]}},"keywords":{}}],["necessari",{"_index":363,"title":{},"content":{"12":{"position":[[206,9]]},"13":{"position":[[1528,10]]},"56":{"position":[[678,10]]},"68":{"position":[[25,9]]},"90":{"position":[[87,9]]},"111":{"position":[[16,9]]},"137":{"position":[[410,10]]},"141":{"position":[[472,10]]},"201":{"position":[[12,9]]},"208":{"position":[[1279,10]]},"218":{"position":[[1521,9]]},"228":{"position":[[1470,10]]},"230":{"position":[[1244,10]]},"237":{"position":[[413,9]]},"240":{"position":[[2261,9]]},"268":{"position":[[1702,10]]},"309":{"position":[[1595,9]]},"400":{"position":[[142,9]]},"402":{"position":[[305,9]]},"477":{"position":[[173,9]]},"499":{"position":[[337,10]]},"548":{"position":[[248,10]]},"598":{"position":[[134,9]]},"634":{"position":[[329,10]]},"750":{"position":[[244,10]]},"766":{"position":[[244,10]]},"785":{"position":[[753,9]]},"789":{"position":[[278,10]]},"807":{"position":[[278,10]]},"823":{"position":[[278,10]]},"849":{"position":[[1837,10]]},"870":{"position":[[1030,10]]},"1047":{"position":[[857,9],[974,10]]},"1055":{"position":[[857,9],[974,10]]},"1063":{"position":[[857,9],[974,10]]},"1155":{"position":[[580,10]]},"1186":{"position":[[218,9]]},"1198":{"position":[[92,9]]},"1286":{"position":[[2448,9]]},"1301":{"position":[[2284,9]]},"1325":{"position":[[2448,9]]},"1473":{"position":[[297,9]]}},"keywords":{}}],["necessarili",{"_index":6614,"title":{},"content":{"1461":{"position":[[2734,11]]}},"keywords":{}}],["necessit",{"_index":2273,"title":{},"content":{"209":{"position":[[1483,11]]}},"keywords":{}}],["need",{"_index":340,"title":{},"content":{"11":{"position":[[1481,4],[1661,4],[1994,4]]},"17":{"position":[[1141,7]]},"19":{"position":[[427,6]]},"25":{"position":[[11,4]]},"50":{"position":[[71,7]]},"54":{"position":[[496,6]]},"61":{"position":[[105,4]]},"68":{"position":[[1627,4]]},"75":{"position":[[369,4]]},"81":{"position":[[227,5],[2332,5]]},"82":{"position":[[177,5],[2998,4]]},"89":{"position":[[414,6]]},"91":{"position":[[49,4]]},"100":{"position":[[1371,7]]},"107":{"position":[[533,4]]},"112":{"position":[[893,5]]},"119":{"position":[[541,6]]},"129":{"position":[[331,4],[547,4],[615,4]]},"136":{"position":[[262,4]]},"150":{"position":[[167,5],[185,4]]},"154":{"position":[[1947,4]]},"162":{"position":[[192,4],[496,4],[1606,4]]},"165":{"position":[[1642,4]]},"171":{"position":[[8,4]]},"172":{"position":[[8,4]]},"173":{"position":[[8,4],[93,4],[262,4]]},"179":{"position":[[332,4],[392,4]]},"180":{"position":[[314,4]]},"183":{"position":[[2782,5]]},"184":{"position":[[561,4]]},"188":{"position":[[8,5]]},"189":{"position":[[1485,4]]},"191":{"position":[[56,4],[1976,6]]},"199":{"position":[[43,4]]},"200":{"position":[[42,4]]},"202":{"position":[[312,5]]},"203":{"position":[[303,4]]},"204":{"position":[[198,4]]},"209":{"position":[[1083,4]]},"212":{"position":[[43,4]]},"216":{"position":[[495,4]]},"222":{"position":[[69,4]]},"224":{"position":[[71,4],[979,4]]},"228":{"position":[[673,4]]},"232":{"position":[[153,4]]},"234":{"position":[[359,4]]},"236":{"position":[[71,4],[526,4]]},"237":{"position":[[67,4],[1627,5]]},"240":{"position":[[37,4],[1937,6]]},"243":{"position":[[43,4]]},"247":{"position":[[43,4]]},"253":{"position":[[67,4],[119,4]]},"254":{"position":[[1042,5]]},"262":{"position":[[32,5]]},"266":{"position":[[227,4],[499,4]]},"267":{"position":[[1688,4]]},"273":{"position":[[32,5]]},"274":{"position":[[659,4],[1264,4]]},"277":{"position":[[339,4],[403,4]]},"278":{"position":[[90,5],[337,4],[570,5],[1584,7]]},"279":{"position":[[132,5]]},"280":{"position":[[396,4],[675,4],[1850,4]]},"283":{"position":[[32,5]]},"288":{"position":[[8,5]]},"291":{"position":[[759,6]]},"295":{"position":[[1496,4],[1548,4]]},"296":{"position":[[3337,4],[6544,4]]},"297":{"position":[[167,4]]},"299":{"position":[[8,5],[387,4]]},"301":{"position":[[1280,4]]},"302":{"position":[[759,6]]},"305":{"position":[[558,4]]},"307":{"position":[[277,4],[343,4],[805,4]]},"309":{"position":[[3465,4]]},"313":{"position":[[67,4],[119,4]]},"314":{"position":[[763,5]]},"320":{"position":[[1438,4]]},"322":{"position":[[948,4]]},"326":{"position":[[962,4],[1017,4]]},"329":{"position":[[304,6],[365,5]]},"330":{"position":[[570,4]]},"331":{"position":[[766,7]]},"343":{"position":[[1138,4]]},"347":{"position":[[38,4]]},"366":{"position":[[8,4],[1077,4]]},"370":{"position":[[714,4]]},"375":{"position":[[31,5],[108,4]]},"377":{"position":[[140,4]]},"379":{"position":[[98,4]]},"383":{"position":[[8,4]]},"390":{"position":[[31,5]]},"395":{"position":[[31,5]]},"400":{"position":[[31,5]]},"406":{"position":[[457,6]]},"413":{"position":[[253,4]]},"415":{"position":[[48,4],[120,4]]},"417":{"position":[[123,4]]},"419":{"position":[[337,4],[1561,4]]},"435":{"position":[[10,4]]},"438":{"position":[[123,4]]},"440":{"position":[[353,4]]},"441":{"position":[[170,4]]},"445":{"position":[[8,5]]},"446":{"position":[[8,5]]},"448":{"position":[[1158,4]]},"452":{"position":[[50,4]]},"458":{"position":[[50,4]]},"475":{"position":[[33,4]]},"477":{"position":[[33,4]]},"478":{"position":[[173,4],[612,4]]},"483":{"position":[[364,5]]},"502":{"position":[[583,4]]},"504":{"position":[[281,4],[1190,4]]},"507":{"position":[[31,5]]},"514":{"position":[[43,4]]},"515":{"position":[[52,5]]},"517":{"position":[[3321,4],[3369,4],[3620,4],[3668,4]]},"522":{"position":[[440,4]]},"530":{"position":[[440,4]]},"531":{"position":[[129,4]]},"532":{"position":[[228,4]]},"538":{"position":[[47,4]]},"545":{"position":[[123,4]]},"547":{"position":[[338,4],[1563,4]]},"581":{"position":[[31,5],[407,4]]},"582":{"position":[[48,4]]},"591":{"position":[[8,5]]},"597":{"position":[[33,4]]},"598":{"position":[[32,4]]},"599":{"position":[[173,4],[612,4]]},"602":{"position":[[993,4]]},"608":{"position":[[8,5]]},"609":{"position":[[8,5]]},"623":{"position":[[51,4]]},"629":{"position":[[48,4]]},"635":{"position":[[31,4]]},"639":{"position":[[279,4],[1188,4]]},"640":{"position":[[49,4]]},"659":{"position":[[88,4]]},"661":{"position":[[158,4]]},"683":{"position":[[102,4],[275,4]]},"685":{"position":[[146,4]]},"698":{"position":[[49,4]]},"704":{"position":[[48,4]]},"718":{"position":[[42,4]]},"724":{"position":[[648,4]]},"725":{"position":[[86,4]]},"726":{"position":[[504,4]]},"745":{"position":[[49,4]]},"750":{"position":[[31,4]]},"752":{"position":[[534,4]]},"753":{"position":[[1190,4]]},"754":{"position":[[1083,4]]},"757":{"position":[[1874,5]]},"762":{"position":[[482,4]]},"764":{"position":[[610,4]]},"766":{"position":[[31,4]]},"767":{"position":[[2445,4]]},"770":{"position":[[1874,5]]},"775":{"position":[[482,4]]},"777":{"position":[[610,4]]},"780":{"position":[[8,5],[535,4]]},"785":{"position":[[677,4]]},"789":{"position":[[31,4]]},"791":{"position":[[487,4]]},"792":{"position":[[2426,4]]},"793":{"position":[[1161,4]]},"794":{"position":[[1287,4]]},"797":{"position":[[1874,5]]},"802":{"position":[[482,4]]},"804":{"position":[[608,4]]},"805":{"position":[[185,4]]},"807":{"position":[[31,4]]},"808":{"position":[[1107,4]]},"809":{"position":[[1287,4]]},"812":{"position":[[1874,5]]},"817":{"position":[[482,4]]},"819":{"position":[[608,4]]},"820":{"position":[[185,4]]},"821":{"position":[[452,4],[556,4],[716,4]]},"823":{"position":[[31,4]]},"824":{"position":[[2557,4]]},"825":{"position":[[1123,4]]},"828":{"position":[[1874,5]]},"833":{"position":[[482,4]]},"835":{"position":[[608,4]]},"836":{"position":[[185,4]]},"840":{"position":[[2480,4]]},"842":{"position":[[2332,4]]},"849":{"position":[[2521,4],[3620,4]]},"855":{"position":[[31,4]]},"862":{"position":[[185,6]]},"864":{"position":[[935,4]]},"870":{"position":[[354,6]]},"874":{"position":[[185,6]]},"876":{"position":[[800,4]]},"894":{"position":[[50,4]]},"903":{"position":[[8,4]]},"904":{"position":[[2372,4]]},"907":{"position":[[497,4]]},"912":{"position":[[463,4],[572,4],[732,4],[1371,4]]},"915":{"position":[[8,4]]},"918":{"position":[[2664,4]]},"922":{"position":[[3116,5]]},"923":{"position":[[497,4]]},"930":{"position":[[8,4]]},"934":{"position":[[497,4]]},"945":{"position":[[494,4]]},"946":{"position":[[103,4],[232,4]]},"950":{"position":[[497,4]]},"963":{"position":[[8,4]]},"964":{"position":[[602,4]]},"968":{"position":[[497,4]]},"987":{"position":[[106,4]]},"988":{"position":[[102,4],[152,5]]},"989":{"position":[[655,4]]},"991":{"position":[[159,4]]},"995":{"position":[[47,4]]},"1002":{"position":[[106,4]]},"1003":{"position":[[102,4],[152,5]]},"1004":{"position":[[738,4]]},"1009":{"position":[[159,4]]},"1018":{"position":[[8,4]]},"1021":{"position":[[1145,4]]},"1023":{"position":[[318,4],[1544,4]]},"1031":{"position":[[31,5]]},"1034":{"position":[[724,4]]},"1040":{"position":[[75,5]]},"1045":{"position":[[482,4]]},"1050":{"position":[[75,5]]},"1051":{"position":[[2088,4]]},"1053":{"position":[[482,4]]},"1058":{"position":[[75,5]]},"1061":{"position":[[482,4]]},"1066":{"position":[[8,4]]},"1067":{"position":[[437,4]]},"1082":{"position":[[139,5]]},"1083":{"position":[[139,5]]},"1089":{"position":[[54,5]]},"1118":{"position":[[924,7]]},"1122":{"position":[[31,5]]},"1136":{"position":[[31,5]]},"1142":{"position":[[31,5],[229,4]]},"1149":{"position":[[31,5],[677,4]]},"1155":{"position":[[110,7]]},"1156":{"position":[[622,4]]},"1160":{"position":[[31,5],[392,4]]},"1168":{"position":[[31,5],[229,4]]},"1176":{"position":[[31,5]]},"1185":{"position":[[31,5]]},"1186":{"position":[[5,4],[618,4]]},"1189":{"position":[[354,4]]},"1194":{"position":[[31,5]]},"1197":{"position":[[360,4]]},"1203":{"position":[[31,5]]},"1204":{"position":[[32,4]]},"1207":{"position":[[443,4]]},"1211":{"position":[[31,5]]},"1218":{"position":[[31,5]]},"1226":{"position":[[31,5]]},"1227":{"position":[[91,5]]},"1228":{"position":[[98,5]]},"1230":{"position":[[615,4]]},"1236":{"position":[[47,4]]},"1243":{"position":[[31,5]]},"1244":{"position":[[8,5]]},"1245":{"position":[[8,5]]},"1248":{"position":[[387,4]]},"1251":{"position":[[8,5],[296,4]]},"1258":{"position":[[31,5],[271,4]]},"1264":{"position":[[47,4]]},"1274":{"position":[[31,5]]},"1277":{"position":[[753,4]]},"1281":{"position":[[31,5]]},"1285":{"position":[[828,4]]},"1286":{"position":[[1348,4]]},"1289":{"position":[[1607,4]]},"1295":{"position":[[31,5]]},"1300":{"position":[[828,4]]},"1301":{"position":[[1184,4]]},"1303":{"position":[[1211,4],[1345,4]]},"1309":{"position":[[31,5]]},"1310":{"position":[[928,4]]},"1313":{"position":[[682,4]]},"1319":{"position":[[31,5]]},"1322":{"position":[[69,4]]},"1324":{"position":[[828,4]]},"1325":{"position":[[1348,4]]},"1332":{"position":[[31,5]]},"1335":{"position":[[69,4]]},"1337":{"position":[[682,4]]},"1343":{"position":[[31,5]]},"1346":{"position":[[1333,4]]},"1348":{"position":[[682,4]]},"1354":{"position":[[31,5]]},"1357":{"position":[[292,4]]},"1365":{"position":[[31,5]]},"1366":{"position":[[61,4]]},"1372":{"position":[[31,5]]},"1373":{"position":[[1337,4]]},"1374":{"position":[[1341,4]]},"1382":{"position":[[31,5]]},"1383":{"position":[[1924,6]]},"1384":{"position":[[68,4]]},"1387":{"position":[[393,4],[1019,4]]},"1391":{"position":[[850,4]]},"1396":{"position":[[31,5]]},"1406":{"position":[[31,5]]},"1417":{"position":[[31,5]]},"1418":{"position":[[107,4]]},"1421":{"position":[[380,4]]},"1425":{"position":[[31,5]]},"1437":{"position":[[427,4]]},"1447":{"position":[[591,4]]},"1448":{"position":[[142,4],[229,4]]},"1451":{"position":[[364,5]]},"1455":{"position":[[244,4]]},"1459":{"position":[[1260,4]]},"1461":{"position":[[4774,5]]}},"keywords":{}}],["neededan",{"_index":4549,"title":{},"content":{"739":{"position":[[50,8]]}},"keywords":{}}],["neededclick",{"_index":3695,"title":{},"content":{"436":{"position":[[197,11]]}},"keywords":{}}],["neg",{"_index":1880,"title":{},"content":{"159":{"position":[[749,8],[878,8],[1027,9]]},"381":{"position":[[462,8]]}},"keywords":{}}],["negoti",{"_index":1676,"title":{},"content":{"122":{"position":[[691,9]]}},"keywords":{}}],["neon",{"_index":5004,"title":{"939":{"position":[[0,4]]},"942":{"position":[[33,5]]}},"content":{"907":{"position":[[1785,5]]},"923":{"position":[[1785,5]]},"940":{"position":[[64,4]]},"942":{"position":[[149,4],[300,4],[414,5],[448,4],[468,4],[656,4]]},"943":{"position":[[173,4],[214,4],[362,4],[393,4],[734,4],[762,4],[816,4],[908,4]]},"945":{"position":[[879,4]]},"946":{"position":[[88,5],[349,5]]},"947":{"position":[[129,4],[202,4],[253,4],[353,4]]},"968":{"position":[[1785,5]]},"1313":{"position":[[1535,5]]},"1337":{"position":[[1535,5]]}},"keywords":{}}],["neon'",{"_index":5107,"title":{},"content":{"946":{"position":[[18,6]]}},"keywords":{}}],["neon_api_key"",{"_index":5093,"title":{},"content":{"943":{"position":[[1098,19]]}},"keywords":{}}],["neon_superus",{"_index":5080,"title":{},"content":{"943":{"position":[[270,14]]}},"keywords":{}}],["nest",{"_index":631,"title":{},"content":{"27":{"position":[[381,8]]},"60":{"position":[[120,6]]},"73":{"position":[[117,6]]},"98":{"position":[[504,6]]},"99":{"position":[[447,6]]},"138":{"position":[[859,8]]},"142":{"position":[[830,8]]},"183":{"position":[[933,6]]},"227":{"position":[[115,6]]},"228":{"position":[[551,6]]},"267":{"position":[[1323,6]]},"270":{"position":[[952,6]]},"274":{"position":[[1907,6]]},"281":{"position":[[2772,6]]},"296":{"position":[[1909,6],[2109,6],[2485,6],[7749,6]]},"313":{"position":[[3223,6]]},"337":{"position":[[246,6]]},"593":{"position":[[595,6]]},"1164":{"position":[[740,6]]},"1279":{"position":[[268,6]]},"1292":{"position":[[6017,6]]},"1306":{"position":[[6017,6]]},"1329":{"position":[[6017,6]]},"1358":{"position":[[918,6]]}},"keywords":{}}],["netsuit",{"_index":3367,"title":{"837":{"position":[[0,8]]},"844":{"position":[[0,8]]}},"content":{"364":{"position":[[2700,8]]},"839":{"position":[[8,8]]},"840":{"position":[[10,8],[60,8],[118,8],[214,8],[430,8],[1563,8]]},"841":{"position":[[250,8]]},"842":{"position":[[70,8],[90,8],[358,8],[512,8],[1115,8],[1204,8]]},"843":{"position":[[90,8]]},"846":{"position":[[69,8]]},"848":{"position":[[8,8]]},"849":{"position":[[34,8],[157,8],[901,8],[1088,8],[2454,8]]},"850":{"position":[[250,8]]},"851":{"position":[[78,8],[652,8]]}},"keywords":{}}],["netsuite.com",{"_index":4751,"title":{},"content":{"842":{"position":[[399,13]]}},"keywords":{}}],["netsuite2.com",{"_index":4752,"title":{},"content":{"842":{"position":[[416,13]]},"843":{"position":[[328,13]]}},"keywords":{}}],["netsuite:dev",{"_index":3368,"title":{},"content":{"364":{"position":[[2755,12]]},"852":{"position":[[90,12]]}},"keywords":{}}],["network",{"_index":461,"title":{"83":{"position":[[34,9]]}},"content":{"16":{"position":[[325,8],[1189,7]]},"17":{"position":[[1001,8],[1010,8]]},"83":{"position":[[75,8],[598,7]]},"88":{"position":[[507,8]]},"204":{"position":[[384,8]]},"221":{"position":[[1593,7],[1754,7]]},"224":{"position":[[129,7],[714,8],[760,8],[790,7],[858,8],[1060,7]]},"370":{"position":[[1515,7],[1612,8]]},"750":{"position":[[1335,8]]},"784":{"position":[[409,8]]},"789":{"position":[[1736,8]]},"792":{"position":[[1031,8]]},"793":{"position":[[566,8]]},"808":{"position":[[582,8]]},"824":{"position":[[823,8]]},"866":{"position":[[583,8]]},"878":{"position":[[593,8]]},"904":{"position":[[822,8]]},"915":{"position":[[1192,8]]},"918":{"position":[[1031,8]]},"919":{"position":[[566,8]]},"931":{"position":[[586,8]]},"963":{"position":[[1346,8]]},"1043":{"position":[[566,8]]},"1051":{"position":[[822,8]]},"1059":{"position":[[586,8]]},"1138":{"position":[[806,7],[903,8]]},"1154":{"position":[[256,7],[777,8]]},"1198":{"position":[[498,8]]},"1255":{"position":[[409,8]]},"1303":{"position":[[586,8]]},"1373":{"position":[[804,8]]},"1374":{"position":[[804,8]]},"1397":{"position":[[583,8]]},"1398":{"position":[[582,8]]},"1409":{"position":[[566,8]]}},"keywords":{}}],["network'",{"_index":2460,"title":{},"content":{"221":{"position":[[2001,9]]}},"keywords":{}}],["network_nam",{"_index":6215,"title":{},"content":{"1292":{"position":[[6061,13]]},"1306":{"position":[[6061,13]]},"1329":{"position":[[6061,13]]}},"keywords":{}}],["networksfor",{"_index":4598,"title":{},"content":{"753":{"position":[[607,11]]},"767":{"position":[[753,11]]},"1042":{"position":[[1372,11]]},"1289":{"position":[[1117,11]]},"1303":{"position":[[828,11]]},"1322":{"position":[[1336,11]]},"1408":{"position":[[645,11]]}},"keywords":{}}],["networktunnel",{"_index":1222,"title":{},"content":{"83":{"position":[[802,13],[1091,14]]},"370":{"position":[[1501,13]]},"371":{"position":[[308,14]]},"753":{"position":[[515,13]]},"767":{"position":[[661,13]]},"784":{"position":[[314,13]]},"792":{"position":[[939,13]]},"793":{"position":[[474,13]]},"808":{"position":[[490,13]]},"824":{"position":[[731,13]]},"866":{"position":[[491,13]]},"868":{"position":[[320,14]]},"878":{"position":[[501,13]]},"880":{"position":[[321,14]]},"904":{"position":[[730,13]]},"918":{"position":[[939,13]]},"919":{"position":[[474,13]]},"931":{"position":[[494,13]]},"1042":{"position":[[1280,13]]},"1043":{"position":[[474,13]]},"1051":{"position":[[730,13]]},"1059":{"position":[[494,13]]},"1138":{"position":[[792,13]]},"1139":{"position":[[187,14]]},"1154":{"position":[[682,13]]},"1198":{"position":[[403,13]]},"1255":{"position":[[314,13]]},"1289":{"position":[[1022,13]]},"1303":{"position":[[494,13],[733,13]]},"1322":{"position":[[1241,13]]},"1373":{"position":[[712,13]]},"1374":{"position":[[712,13]]},"1397":{"position":[[491,13]]},"1398":{"position":[[490,13]]},"1408":{"position":[[553,13]]},"1409":{"position":[[474,13]]}},"keywords":{}}],["networktunnel/sshforward",{"_index":3419,"title":{},"content":{"370":{"position":[[1628,27]]},"1138":{"position":[[919,27]]}},"keywords":{}}],["networktunnel/sshforwarding/privatekey",{"_index":3422,"title":{},"content":{"370":{"position":[[1870,38]]},"1138":{"position":[[1160,38]]}},"keywords":{}}],["networktunnel/sshforwarding/sshendpoint",{"_index":3420,"title":{},"content":{"370":{"position":[[1678,39]]},"1138":{"position":[[969,39]]}},"keywords":{}}],["never",{"_index":349,"title":{},"content":{"11":{"position":[[1884,5]]},"64":{"position":[[947,5]]},"70":{"position":[[55,5]]},"136":{"position":[[80,5]]},"163":{"position":[[745,5]]},"322":{"position":[[940,5]]},"763":{"position":[[193,5]]},"764":{"position":[[510,5]]},"776":{"position":[[193,5]]},"777":{"position":[[510,5]]},"803":{"position":[[193,5]]},"804":{"position":[[508,5]]},"818":{"position":[[193,5]]},"819":{"position":[[508,5]]},"834":{"position":[[193,5]]},"835":{"position":[[508,5]]},"849":{"position":[[1341,5]]},"1147":{"position":[[295,5]]},"1174":{"position":[[295,5]]},"1216":{"position":[[295,5]]},"1224":{"position":[[295,5]]},"1292":{"position":[[2971,5]]},"1306":{"position":[[2971,5]]},"1329":{"position":[[2971,5]]},"1393":{"position":[[261,5]]},"1443":{"position":[[574,5],[1129,5]]}},"keywords":{}}],["new",{"_index":69,"title":{"278":{"position":[[8,3]]},"308":{"position":[[2,3]]}},"content":{"2":{"position":[[114,3],[257,3]]},"8":{"position":[[318,3]]},"13":{"position":[[757,3],[1118,3],[1163,3],[1398,3]]},"14":{"position":[[266,3]]},"19":{"position":[[375,4]]},"20":{"position":[[113,3],[175,3],[368,3]]},"32":{"position":[[84,3],[533,3]]},"35":{"position":[[161,3]]},"36":{"position":[[244,3]]},"38":{"position":[[322,3]]},"54":{"position":[[23,3],[638,3]]},"55":{"position":[[1010,3]]},"56":{"position":[[664,3],[732,3]]},"62":{"position":[[433,3],[608,3],[734,3]]},"63":{"position":[[327,3]]},"77":{"position":[[533,3]]},"100":{"position":[[703,3],[1121,3]]},"105":{"position":[[982,3],[1057,3],[1221,3],[1250,3]]},"109":{"position":[[393,3]]},"112":{"position":[[1007,3]]},"120":{"position":[[2721,3]]},"121":{"position":[[515,3],[710,3]]},"125":{"position":[[130,3]]},"136":{"position":[[321,3]]},"138":{"position":[[93,3]]},"142":{"position":[[109,3]]},"144":{"position":[[69,3]]},"170":{"position":[[1,3]]},"177":{"position":[[153,3]]},"182":{"position":[[587,3]]},"183":{"position":[[147,3],[600,3],[1659,3],[1987,3],[2357,3],[2873,3]]},"184":{"position":[[30,3],[181,3]]},"189":{"position":[[12,3],[230,3],[765,3]]},"190":{"position":[[95,3]]},"191":{"position":[[126,3],[188,3],[332,3]]},"192":{"position":[[219,3],[1802,3]]},"193":{"position":[[175,3]]},"197":{"position":[[864,3]]},"204":{"position":[[454,3]]},"205":{"position":[[28,3],[113,4]]},"208":{"position":[[535,3],[567,3],[635,3],[907,3],[1402,3],[1459,3],[1651,3]]},"210":{"position":[[1760,3]]},"215":{"position":[[28,3]]},"217":{"position":[[344,3]]},"218":{"position":[[903,3],[1779,3],[1857,3]]},"221":{"position":[[508,3]]},"222":{"position":[[694,3]]},"223":{"position":[[808,3]]},"224":{"position":[[778,3]]},"228":{"position":[[874,3],[1045,3]]},"237":{"position":[[2825,3]]},"239":{"position":[[6,5],[167,3],[384,3],[1801,3],[2436,3]]},"240":{"position":[[266,3],[331,3],[2521,3]]},"249":{"position":[[104,3]]},"259":{"position":[[1247,3],[1360,3],[2828,3],[2906,3]]},"267":{"position":[[164,3],[204,3],[570,3],[968,3]]},"268":{"position":[[1320,3]]},"269":{"position":[[891,3]]},"270":{"position":[[1492,3]]},"271":{"position":[[187,3],[254,3],[420,3]]},"278":{"position":[[119,3],[277,3]]},"290":{"position":[[321,3]]},"291":{"position":[[1712,3],[1790,3]]},"295":{"position":[[1084,3]]},"296":{"position":[[3803,3],[5548,3],[5661,3],[6924,3],[7285,3],[7839,3],[7905,3]]},"301":{"position":[[274,3]]},"302":{"position":[[1621,3],[1699,3]]},"306":{"position":[[283,3]]},"307":{"position":[[360,3],[736,3],[3165,3]]},"308":{"position":[[67,3],[385,3],[710,3],[1142,3]]},"309":{"position":[[598,3],[1203,3],[2011,3],[3408,3]]},"310":{"position":[[137,3]]},"315":{"position":[[237,3],[1668,3]]},"316":{"position":[[1057,3]]},"321":{"position":[[908,3],[2395,3]]},"322":{"position":[[761,3]]},"323":{"position":[[893,3]]},"324":{"position":[[214,3]]},"329":{"position":[[774,3]]},"331":{"position":[[732,3]]},"333":{"position":[[524,3]]},"339":{"position":[[29,3]]},"367":{"position":[[242,3]]},"373":{"position":[[932,3]]},"395":{"position":[[264,3]]},"436":{"position":[[353,3],[467,3],[595,3],[742,3]]},"477":{"position":[[866,3]]},"478":{"position":[[296,3],[372,3]]},"480":{"position":[[652,3]]},"483":{"position":[[402,3],[776,3]]},"487":{"position":[[256,3]]},"515":{"position":[[456,3],[494,3]]},"517":{"position":[[1157,3],[1371,3],[1860,3]]},"554":{"position":[[504,3]]},"556":{"position":[[972,3]]},"595":{"position":[[210,3],[360,3]]},"598":{"position":[[828,3]]},"599":{"position":[[296,3],[372,3]]},"616":{"position":[[475,3]]},"645":{"position":[[285,3],[400,3]]},"652":{"position":[[285,3],[400,3]]},"724":{"position":[[667,3]]},"753":{"position":[[198,3]]},"754":{"position":[[593,3]]},"763":{"position":[[427,3]]},"767":{"position":[[198,3],[314,3],[337,3],[1013,3],[1353,3],[1745,3]]},"776":{"position":[[427,3]]},"792":{"position":[[518,3],[627,3],[650,3],[1318,3],[1685,3]]},"793":{"position":[[191,3]]},"794":{"position":[[799,3]]},"803":{"position":[[433,3]]},"809":{"position":[[799,3]]},"818":{"position":[[433,3]]},"821":{"position":[[1100,3]]},"824":{"position":[[310,3],[419,3],[442,3],[1079,3],[1419,3],[1807,3]]},"825":{"position":[[635,3]]},"834":{"position":[[433,3]]},"839":{"position":[[75,3],[192,3]]},"840":{"position":[[562,4],[941,4],[2005,4]]},"848":{"position":[[75,3],[229,3]]},"849":{"position":[[1033,4],[1554,4],[3124,4]]},"856":{"position":[[43,3],[67,3]]},"857":{"position":[[43,3]]},"898":{"position":[[1201,3]]},"904":{"position":[[310,3],[418,3],[441,3],[1079,3],[1216,3],[1346,3]]},"912":{"position":[[1443,3]]},"917":{"position":[[170,3],[289,3]]},"918":{"position":[[518,3],[627,3],[650,3],[1370,3],[1508,3],[1638,3]]},"919":{"position":[[191,3],[820,3]]},"931":{"position":[[1003,3]]},"943":{"position":[[494,3]]},"947":{"position":[[83,3],[842,3]]},"965":{"position":[[170,3],[289,3]]},"989":{"position":[[192,3],[261,3],[390,3],[804,3]]},"1004":{"position":[[275,3],[344,3],[473,3],[887,3]]},"1008":{"position":[[190,3],[246,3]]},"1020":{"position":[[195,3],[262,3],[826,3]]},"1036":{"position":[[233,3]]},"1043":{"position":[[191,3]]},"1051":{"position":[[310,3],[418,3],[441,3]]},"1067":{"position":[[53,3]]},"1077":{"position":[[374,3]]},"1089":{"position":[[224,3]]},"1091":{"position":[[12,3]]},"1118":{"position":[[118,3],[257,3],[1126,3]]},"1123":{"position":[[809,3]]},"1131":{"position":[[233,3]]},"1136":{"position":[[131,3]]},"1140":{"position":[[3290,3]]},"1142":{"position":[[118,3]]},"1149":{"position":[[260,3],[573,3]]},"1160":{"position":[[118,3]]},"1168":{"position":[[118,3]]},"1176":{"position":[[40,3]]},"1177":{"position":[[318,3],[417,3]]},"1183":{"position":[[348,3],[756,3],[1286,3]]},"1187":{"position":[[199,3]]},"1196":{"position":[[780,3]]},"1201":{"position":[[570,3]]},"1204":{"position":[[192,3]]},"1211":{"position":[[118,3]]},"1218":{"position":[[118,3]]},"1228":{"position":[[357,3]]},"1243":{"position":[[883,3]]},"1258":{"position":[[167,3]]},"1281":{"position":[[170,3],[268,3]]},"1283":{"position":[[227,3]]},"1286":{"position":[[856,3]]},"1289":{"position":[[301,3],[501,3],[524,3]]},"1292":{"position":[[3020,3]]},"1295":{"position":[[170,3],[268,3]]},"1298":{"position":[[808,3]]},"1301":{"position":[[692,3]]},"1306":{"position":[[3020,3]]},"1309":{"position":[[131,3]]},"1311":{"position":[[63,3]]},"1316":{"position":[[3290,3]]},"1319":{"position":[[170,3],[268,3]]},"1321":{"position":[[81,3],[281,3],[304,3]]},"1322":{"position":[[694,3]]},"1325":{"position":[[856,3]]},"1329":{"position":[[3020,3]]},"1332":{"position":[[131,3]]},"1334":{"position":[[81,3],[369,3],[392,3]]},"1335":{"position":[[694,3]]},"1340":{"position":[[3290,3]]},"1343":{"position":[[131,3]]},"1346":{"position":[[808,3]]},"1351":{"position":[[3290,3]]},"1372":{"position":[[170,3],[268,3]]},"1373":{"position":[[310,3],[400,3],[423,3]]},"1374":{"position":[[310,3],[400,3],[423,3]]},"1379":{"position":[[2831,3]]},"1383":{"position":[[312,3]]},"1385":{"position":[[198,3]]},"1396":{"position":[[170,3],[268,3]]},"1403":{"position":[[2831,3]]},"1406":{"position":[[170,3],[268,3]]},"1409":{"position":[[191,3]]},"1414":{"position":[[2831,3]]},"1419":{"position":[[198,3]]},"1426":{"position":[[275,3]]},"1431":{"position":[[3313,3]]},"1437":{"position":[[994,3]]},"1439":{"position":[[747,3]]},"1440":{"position":[[757,3]]},"1444":{"position":[[484,3]]},"1448":{"position":[[277,3],[449,3],[880,3],[912,3]]},"1449":{"position":[[482,3],[515,3],[656,3]]},"1451":{"position":[[318,3],[937,3]]},"1455":{"position":[[527,3]]},"1470":{"position":[[116,3]]},"1475":{"position":[[1968,3]]},"1479":{"position":[[81,3],[217,3],[697,3]]}},"keywords":{}}],["newest",{"_index":2788,"title":{},"content":{"263":{"position":[[339,7]]}},"keywords":{}}],["newfound",{"_index":2621,"title":{},"content":{"241":{"position":[[461,8]]}},"keywords":{}}],["newli",{"_index":817,"title":{},"content":{"55":{"position":[[346,5]]},"56":{"position":[[469,5]]},"61":{"position":[[997,5]]},"308":{"position":[[1016,5]]},"480":{"position":[[448,5],[718,5],[881,5]]},"821":{"position":[[1425,5],[1557,5]]},"1008":{"position":[[1565,5]]},"1437":{"position":[[721,5]]}},"keywords":{}}],["newlin",{"_index":104,"title":{},"content":{"3":{"position":[[103,7]]},"1275":{"position":[[429,9]]}},"keywords":{}}],["next",{"_index":533,"title":{"176":{"position":[[7,6]]},"212":{"position":[[0,4]]},"219":{"position":[[7,6]]},"243":{"position":[[0,4]]},"292":{"position":[[7,6]]},"303":{"position":[[7,6]]}},"content":{"20":{"position":[[408,4]]},"56":{"position":[[2559,4]]},"82":{"position":[[3966,5]]},"173":{"position":[[942,4]]},"183":{"position":[[804,5],[2267,5]]},"184":{"position":[[929,4]]},"190":{"position":[[800,5],[1530,5],[1795,4]]},"191":{"position":[[2154,4]]},"192":{"position":[[438,5],[1952,5],[2157,4]]},"203":{"position":[[606,4]]},"204":{"position":[[561,5]]},"206":{"position":[[836,6],[961,4]]},"217":{"position":[[950,5],[2097,4]]},"218":{"position":[[524,5],[2069,4]]},"228":{"position":[[1226,5]]},"236":{"position":[[1802,4]]},"238":{"position":[[25,4]]},"239":{"position":[[508,5],[1614,4],[2897,4]]},"240":{"position":[[2148,4],[3744,4],[4099,5],[4769,4]]},"254":{"position":[[2098,4]]},"259":{"position":[[1443,5],[2989,5]]},"264":{"position":[[1,5]]},"267":{"position":[[1194,5]]},"275":{"position":[[1,5]]},"281":{"position":[[660,4],[1115,4]]},"290":{"position":[[1109,5],[1562,4]]},"291":{"position":[[1,5],[572,5],[776,4],[1840,4]]},"296":{"position":[[2650,4]]},"301":{"position":[[1318,5]]},"302":{"position":[[1,5],[572,5],[776,4],[1749,4]]},"314":{"position":[[1368,4],[1645,4]]},"315":{"position":[[5,4]]},"531":{"position":[[319,4]]},"864":{"position":[[306,5]]},"876":{"position":[[306,5]]},"947":{"position":[[942,5],[1091,4]]},"1047":{"position":[[403,5]]},"1055":{"position":[[403,5]]},"1063":{"position":[[403,5]]},"1118":{"position":[[724,4],[884,5]]},"1140":{"position":[[3327,4]]},"1209":{"position":[[865,4]]},"1292":{"position":[[3064,4]]},"1306":{"position":[[3064,4]]},"1316":{"position":[[3327,4]]},"1329":{"position":[[3064,4]]},"1340":{"position":[[3327,4]]},"1351":{"position":[[3327,4]]},"1379":{"position":[[2885,4]]},"1403":{"position":[[2885,4]]},"1414":{"position":[[2885,4]]},"1431":{"position":[[3350,4]]},"1440":{"position":[[672,4],[1001,4]]},"1442":{"position":[[1083,4]]},"1451":{"position":[[963,4]]},"1452":{"position":[[1989,4]]},"1453":{"position":[[281,4],[762,4]]}},"keywords":{}}],["next:dev",{"_index":3312,"title":{},"content":{"363":{"position":[[2065,8]]},"992":{"position":[[100,8]]}},"keywords":{}}],["ngrok",{"_index":2493,"title":{"238":{"position":[[40,6]]}},"content":{"234":{"position":[[236,6],[404,5]]},"238":{"position":[[133,6],[269,5]]},"242":{"position":[[231,5]]}},"keywords":{}}],["nice",{"_index":1740,"title":{},"content":{"133":{"position":[[216,4]]},"281":{"position":[[2583,6]]}},"keywords":{}}],["nintendo",{"_index":1730,"title":{},"content":{"130":{"position":[[215,8],[382,10]]}},"keywords":{}}],["no_wait",{"_index":6089,"title":{},"content":{"1292":{"position":[[3370,7]]},"1306":{"position":[[3370,7]]},"1329":{"position":[[3370,7]]}},"keywords":{}}],["no_write_to_b",{"_index":6093,"title":{},"content":{"1292":{"position":[[3420,13]]},"1306":{"position":[[3420,13]]},"1329":{"position":[[3420,13]]}},"keywords":{}}],["nocheck",{"_index":6334,"title":{},"content":{"1379":{"position":[[2981,7]]},"1403":{"position":[[2981,7]]},"1414":{"position":[[2981,7]]}},"keywords":{}}],["nocrypt",{"_index":6371,"title":{},"content":{"1384":{"position":[[343,7]]}},"keywords":{}}],["node",{"_index":3673,"title":{},"content":{"432":{"position":[[235,5],[271,6]]},"757":{"position":[[1162,4],[1170,4],[1200,4]]},"770":{"position":[[1162,4],[1170,4],[1200,4]]},"797":{"position":[[1162,4],[1170,4],[1200,4]]},"812":{"position":[[1162,4],[1170,4],[1200,4]]},"828":{"position":[[1162,4],[1170,4],[1200,4]]},"867":{"position":[[1870,4],[1878,4],[1908,4]]}},"keywords":{}}],["nodegroup",{"_index":6076,"title":{},"content":{"1292":{"position":[[3159,9]]},"1306":{"position":[[3159,9]]},"1329":{"position":[[3159,9]]}},"keywords":{}}],["nofitif",{"_index":6580,"title":{},"content":{"1455":{"position":[[142,14]]}},"keywords":{}}],["nolan"",{"_index":2368,"title":{},"content":{"210":{"position":[[3057,13]]}},"keywords":{}}],["nominations"",{"_index":2378,"title":{},"content":{"210":{"position":[[3214,17]]}},"keywords":{}}],["non",{"_index":232,"title":{"1438":{"position":[[18,3]]}},"content":{"7":{"position":[[194,3]]},"56":{"position":[[2193,3]]},"75":{"position":[[344,3]]},"82":{"position":[[3510,3],[3633,3]]},"114":{"position":[[568,3]]},"115":{"position":[[1096,3]]},"164":{"position":[[1859,3]]},"165":{"position":[[1945,3]]},"166":{"position":[[143,3]]},"210":{"position":[[1837,3]]},"253":{"position":[[3192,3]]},"254":{"position":[[3924,3]]},"323":{"position":[[1799,3],[1869,3]]},"379":{"position":[[832,4]]},"759":{"position":[[190,3]]},"772":{"position":[[201,3]]},"799":{"position":[[188,3]]},"814":{"position":[[188,3]]},"830":{"position":[[188,3]]},"842":{"position":[[2263,3]]},"1204":{"position":[[5,3]]},"1438":{"position":[[173,3]]}},"keywords":{}}],["nonc",{"_index":6483,"title":{},"content":{"1437":{"position":[[1284,5],[1345,5],[1439,5],[1520,6]]}},"keywords":{}}],["nonclust",{"_index":6335,"title":{},"content":{"1379":{"position":[[3041,12]]},"1403":{"position":[[3041,12]]},"1414":{"position":[[3041,12]]}},"keywords":{}}],["none",{"_index":29,"title":{},"content":{"1":{"position":[[350,5]]},"125":{"position":[[343,4]]},"366":{"position":[[253,4]]},"595":{"position":[[140,5],[383,5]]},"903":{"position":[[279,4]]},"915":{"position":[[279,4]]},"930":{"position":[[279,4]]},"963":{"position":[[433,4]]},"1140":{"position":[[3382,4]]},"1292":{"position":[[3223,4]]},"1306":{"position":[[3223,4]]},"1316":{"position":[[3382,4]]},"1329":{"position":[[3223,4]]},"1340":{"position":[[3382,4]]},"1351":{"position":[[3382,4]]},"1354":{"position":[[147,4],[231,4]]},"1379":{"position":[[3099,4]]},"1403":{"position":[[3099,4]]},"1414":{"position":[[3099,4]]},"1431":{"position":[[3405,4]]}},"keywords":{}}],["nontrivi",{"_index":4659,"title":{},"content":{"764":{"position":[[289,10]]},"777":{"position":[[289,10]]},"804":{"position":[[287,10]]},"819":{"position":[[287,10]]},"835":{"position":[[287,10]]}},"keywords":{}}],["normal",{"_index":519,"title":{},"content":{"19":{"position":[[295,6]]},"60":{"position":[[969,8]]},"307":{"position":[[1221,6],[2071,6]]},"309":{"position":[[1131,9]]},"548":{"position":[[1318,8]]},"757":{"position":[[415,8]]},"764":{"position":[[825,8]]},"770":{"position":[[415,8]]},"777":{"position":[[825,8]]},"797":{"position":[[415,8]]},"804":{"position":[[823,8]]},"812":{"position":[[415,8]]},"819":{"position":[[823,8]]},"828":{"position":[[415,8]]},"835":{"position":[[823,8]]},"864":{"position":[[1439,6]]},"1019":{"position":[[121,6]]},"1020":{"position":[[1130,6]]},"1140":{"position":[[3418,9]]},"1144":{"position":[[843,8]]},"1170":{"position":[[843,8]]},"1267":{"position":[[455,8]]},"1285":{"position":[[477,8]]},"1300":{"position":[[477,8]]},"1316":{"position":[[3418,9]]},"1324":{"position":[[477,8]]},"1340":{"position":[[3418,9]]},"1351":{"position":[[3418,9]]},"1379":{"position":[[3150,9]]},"1403":{"position":[[3150,9]]},"1414":{"position":[[3150,9]]},"1423":{"position":[[889,9]]},"1431":{"position":[[3441,9]]}},"keywords":{}}],["north",{"_index":496,"title":{},"content":{"17":{"position":[[605,5]]},"385":{"position":[[215,6]]}},"keywords":{}}],["nosql",{"_index":2243,"title":{},"content":{"208":{"position":[[139,5]]},"259":{"position":[[924,5],[2505,5]]},"289":{"position":[[173,5]]},"590":{"position":[[16,5]]},"779":{"position":[[14,5]]},"1250":{"position":[[14,5]]}},"keywords":{}}],["notabl",{"_index":3108,"title":{},"content":{"319":{"position":[[1380,8]]},"1358":{"position":[[444,7]]}},"keywords":{}}],["notaft",{"_index":1353,"title":{},"content":{"94":{"position":[[2053,10],[2227,9]]},"120":{"position":[[1605,10],[1779,9]]},"1479":{"position":[[394,9],[727,8]]},"1480":{"position":[[1311,10],[1485,9]]},"1481":{"position":[[99,9]]}},"keywords":{}}],["notbefor",{"_index":1349,"title":{},"content":{"94":{"position":[[1686,11],[1861,10],[2040,12]]},"120":{"position":[[1238,11],[1413,10],[1592,12]]},"1479":{"position":[[380,9],[755,9]]},"1480":{"position":[[944,11],[1119,10],[1298,12]]}},"keywords":{}}],["note",{"_index":297,"title":{},"content":{"11":{"position":[[246,4]]},"61":{"position":[[896,4]]},"125":{"position":[[1490,5]]},"138":{"position":[[2224,4]]},"141":{"position":[[2180,4]]},"142":{"position":[[2284,4]]},"144":{"position":[[654,4]]},"165":{"position":[[1157,4],[1446,4]]},"179":{"position":[[365,4]]},"185":{"position":[[36,4]]},"192":{"position":[[1837,4]]},"206":{"position":[[269,4]]},"222":{"position":[[926,4]]},"223":{"position":[[966,4]]},"224":{"position":[[947,4],[1146,4]]},"249":{"position":[[126,4]]},"253":{"position":[[564,6]]},"263":{"position":[[480,4]]},"268":{"position":[[1082,4]]},"269":{"position":[[653,4]]},"277":{"position":[[1,4]]},"278":{"position":[[1,4]]},"279":{"position":[[1,4]]},"280":{"position":[[1,4]]},"281":{"position":[[1,4]]},"288":{"position":[[897,6]]},"299":{"position":[[812,6]]},"307":{"position":[[1794,4],[2769,4]]},"309":{"position":[[190,4],[3167,4]]},"310":{"position":[[164,4]]},"313":{"position":[[564,6]]},"343":{"position":[[480,4]]},"406":{"position":[[164,4],[232,4]]},"415":{"position":[[277,4]]},"429":{"position":[[1125,4]]},"436":{"position":[[508,4]]},"446":{"position":[[255,4],[375,4]]},"494":{"position":[[161,4]]},"500":{"position":[[131,5]]},"553":{"position":[[34,4],[236,4]]},"554":{"position":[[34,4]]},"562":{"position":[[180,5]]},"753":{"position":[[1520,4]]},"767":{"position":[[2399,4]]},"792":{"position":[[144,4],[2380,4]]},"793":{"position":[[1543,4]]},"808":{"position":[[1511,4]]},"824":{"position":[[2511,4]]},"900":{"position":[[78,4],[295,4]]},"904":{"position":[[2326,4]]},"918":{"position":[[144,4],[2618,4]]},"919":{"position":[[2396,4]]},"931":{"position":[[1990,4]]},"1036":{"position":[[887,4]]},"1043":{"position":[[1760,4]]},"1051":{"position":[[2042,4]]},"1059":{"position":[[1837,4]]},"1067":{"position":[[592,4]]},"1082":{"position":[[211,4]]},"1083":{"position":[[272,4]]},"1204":{"position":[[554,4]]},"1247":{"position":[[886,4]]},"1298":{"position":[[966,4]]},"1303":{"position":[[1633,4]]},"1322":{"position":[[926,4]]},"1335":{"position":[[926,4]]},"1346":{"position":[[966,4]]},"1373":{"position":[[1291,4]]},"1374":{"position":[[1295,4]]},"1397":{"position":[[1072,4]]},"1398":{"position":[[1075,4]]},"1409":{"position":[[1033,4]]},"1434":{"position":[[265,4],[422,4],[521,4],[588,4],[700,4],[778,4],[855,4],[1002,4],[1084,4],[1175,4],[1277,4],[1521,4],[1625,4],[1696,4],[1906,4],[2007,4],[2114,4],[2178,4]]},"1438":{"position":[[233,4]]},"1439":{"position":[[1566,4]]},"1440":{"position":[[1299,4],[1411,4]]},"1447":{"position":[[679,4]]},"1448":{"position":[[1151,5]]},"1452":{"position":[[4494,4]]},"1467":{"position":[[1967,4]]}},"keywords":{}}],["notesengag",{"_index":4389,"title":{},"content":{"649":{"position":[[370,16]]}},"keywords":{}}],["notespay",{"_index":5362,"title":{},"content":{"1096":{"position":[[153,12]]}},"keywords":{}}],["noth",{"_index":2842,"title":{},"content":{"278":{"position":[[1289,7]]},"1370":{"position":[[547,7]]}},"keywords":{}}],["notic",{"_index":376,"title":{},"content":{"13":{"position":[[114,7]]},"81":{"position":[[337,6]]},"82":{"position":[[3896,6]]},"217":{"position":[[1885,6]]},"296":{"position":[[7021,6]]}},"keywords":{}}],["notif",{"_index":2130,"title":{"1454":{"position":[[0,13]]}},"content":{"190":{"position":[[1981,12]]},"197":{"position":[[30,13]]},"217":{"position":[[2192,12]]},"218":{"position":[[2118,12]]},"290":{"position":[[1672,12]]},"291":{"position":[[1928,12]]},"301":{"position":[[1646,12]]},"302":{"position":[[1840,12]]},"709":{"position":[[246,12]]},"1455":{"position":[[300,13],[391,14]]},"1456":{"position":[[101,13]]},"1457":{"position":[[67,13],[152,13]]}},"keywords":{}}],["notifi",{"_index":1104,"title":{},"content":{"77":{"position":[[517,8]]},"291":{"position":[[666,8]]},"302":{"position":[[666,8]]},"487":{"position":[[643,6]]}},"keywords":{}}],["notion",{"_index":3121,"title":{"853":{"position":[[0,6]]}},"content":{"320":{"position":[[847,6]]},"322":{"position":[[814,6]]},"364":{"position":[[2768,6]]},"855":{"position":[[38,6],[176,7]]},"857":{"position":[[69,6]]},"858":{"position":[[250,6]]},"859":{"position":[[449,6],[782,6]]}},"keywords":{}}],["notion:dev",{"_index":3369,"title":{},"content":{"364":{"position":[[2821,10]]},"860":{"position":[[159,10]]}},"keywords":{}}],["notnul",{"_index":5668,"title":{},"content":{"1140":{"position":[[3488,7]]},"1316":{"position":[[3488,7]]},"1340":{"position":[[3488,7]]},"1351":{"position":[[3488,7]]},"1370":{"position":[[558,7]]},"1431":{"position":[[3511,7]]}},"keywords":{}}],["now",{"_index":434,"title":{},"content":{"14":{"position":[[724,4]]},"162":{"position":[[221,3]]},"182":{"position":[[535,3]]},"183":{"position":[[2108,3],[2763,4]]},"184":{"position":[[1,4]]},"190":{"position":[[2113,4]]},"212":{"position":[[132,3]]},"218":{"position":[[1,3],[661,3]]},"219":{"position":[[1,3]]},"230":{"position":[[1,3]]},"236":{"position":[[2524,7],[3309,7]]},"240":{"position":[[4075,4]]},"243":{"position":[[124,3]]},"268":{"position":[[1972,3]]},"269":{"position":[[1434,3]]},"270":{"position":[[2050,3]]},"279":{"position":[[128,3]]},"296":{"position":[[5087,4]]},"315":{"position":[[1171,4]]},"419":{"position":[[1257,4]]},"429":{"position":[[1156,3]]},"436":{"position":[[928,3]]},"440":{"position":[[1273,4]]},"485":{"position":[[492,3]]},"547":{"position":[[1259,4]]},"657":{"position":[[677,3]]},"673":{"position":[[492,3]]},"688":{"position":[[492,3]]},"840":{"position":[[2384,3]]},"849":{"position":[[3524,3]]},"864":{"position":[[1683,3]]},"876":{"position":[[943,3]]},"947":{"position":[[966,3]]},"1023":{"position":[[1240,4]]},"1183":{"position":[[1737,3]]},"1201":{"position":[[338,3],[697,3]]},"1317":{"position":[[561,3],[804,3]]},"1341":{"position":[[561,3],[804,3]]},"1352":{"position":[[561,3],[804,3]]},"1359":{"position":[[351,3]]},"1384":{"position":[[1090,3]]},"1432":{"position":[[561,3],[818,3]]},"1434":{"position":[[1036,3]]},"1444":{"position":[[849,3]]},"1447":{"position":[[124,3]]},"1461":{"position":[[5453,3]]}},"keywords":{}}],["now'",{"_index":2434,"title":{},"content":{"218":{"position":[[938,5]]}},"keywords":{}}],["nowait",{"_index":6085,"title":{},"content":{"1292":{"position":[[3320,6]]},"1306":{"position":[[3320,6]]},"1329":{"position":[[3320,6]]}},"keywords":{}}],["npm",{"_index":950,"title":{},"content":{"63":{"position":[[742,3]]},"91":{"position":[[194,3]]}},"keywords":{}}],["nprivat",{"_index":4067,"title":{},"content":{"546":{"position":[[343,9]]},"594":{"position":[[331,9]]}},"keywords":{}}],["nth_valu",{"_index":5671,"title":{},"content":{"1140":{"position":[[3529,9]]},"1292":{"position":[[3478,9]]},"1306":{"position":[[3478,9]]},"1316":{"position":[[3529,9]]},"1329":{"position":[[3478,9]]},"1340":{"position":[[3529,9]]},"1351":{"position":[[3529,9]]},"1431":{"position":[[3552,9]]}},"keywords":{}}],["ntile",{"_index":5674,"title":{},"content":{"1140":{"position":[[3569,5]]},"1292":{"position":[[3525,5]]},"1306":{"position":[[3525,5]]},"1316":{"position":[[3569,5]]},"1329":{"position":[[3525,5]]},"1340":{"position":[[3569,5]]},"1351":{"position":[[3569,5]]},"1431":{"position":[[3592,5]]}},"keywords":{}}],["nuanc",{"_index":2414,"title":{},"content":{"211":{"position":[[154,7]]}},"keywords":{}}],["null",{"_index":835,"title":{},"content":{"56":{"position":[[432,7]]},"94":{"position":[[689,6]]},"100":{"position":[[424,6],[556,5]]},"158":{"position":[[853,4]]},"159":{"position":[[550,4]]},"166":{"position":[[44,4],[212,5]]},"183":{"position":[[3095,5],[3272,4]]},"236":{"position":[[2323,4],[3108,4]]},"254":{"position":[[850,4],[2907,4],[3568,4]]},"278":{"position":[[1031,5],[1056,5]]},"279":{"position":[[1304,5],[1326,5],[1351,5],[1373,4]]},"280":{"position":[[1563,5],[1586,4]]},"309":{"position":[[950,4],[1060,4]]},"310":{"position":[[315,4]]},"352":{"position":[[134,4]]},"417":{"position":[[1604,5],[1617,4]]},"432":{"position":[[471,5]]},"491":{"position":[[292,5],[305,4],[543,5],[556,4]]},"492":{"position":[[363,5],[480,5],[577,5]]},"502":{"position":[[1252,5],[1265,4]]},"545":{"position":[[1206,5],[1219,4]]},"637":{"position":[[766,5],[779,4]]},"664":{"position":[[313,5],[326,4],[564,5],[577,4]]},"665":{"position":[[363,5],[480,5],[577,5]]},"679":{"position":[[292,5],[305,4],[543,5],[556,4]]},"680":{"position":[[363,5],[480,5]]},"694":{"position":[[292,5],[305,4],[543,5],[556,4]]},"695":{"position":[[363,5],[480,5],[577,5]]},"842":{"position":[[2267,4]]},"843":{"position":[[453,4]]},"898":{"position":[[160,4]]},"1009":{"position":[[1672,4]]},"1021":{"position":[[1763,5],[1776,4]]},"1140":{"position":[[3617,4]]},"1144":{"position":[[1061,4],[1100,4]]},"1192":{"position":[[574,4]]},"1209":{"position":[[900,4]]},"1213":{"position":[[738,4],[777,4]]},"1230":{"position":[[150,5]]},"1247":{"position":[[321,5]]},"1292":{"position":[[3571,4],[3617,5]]},"1306":{"position":[[3571,4],[3617,5]]},"1316":{"position":[[3617,4]]},"1329":{"position":[[3571,4],[3617,5]]},"1340":{"position":[[3617,4]]},"1351":{"position":[[3617,4]]},"1370":{"position":[[574,4],[584,5]]},"1379":{"position":[[3251,4]]},"1394":{"position":[[990,4]]},"1403":{"position":[[3251,4]]},"1414":{"position":[[3251,4]]},"1423":{"position":[[918,4]]},"1431":{"position":[[3640,4]]},"1464":{"position":[[587,5],[714,5],[810,5],[889,5]]},"1467":{"position":[[2857,5],[2936,5]]}},"keywords":{}}],["nullabl",{"_index":5259,"title":{},"content":{"1047":{"position":[[808,9]]},"1055":{"position":[[808,9]]},"1063":{"position":[[808,9]]}},"keywords":{}}],["nullif",{"_index":5679,"title":{},"content":{"1140":{"position":[[3646,6]]},"1316":{"position":[[3646,6]]},"1340":{"position":[[3646,6]]},"1351":{"position":[[3646,6]]},"1379":{"position":[[3309,6]]},"1403":{"position":[[3309,6]]},"1414":{"position":[[3309,6]]},"1431":{"position":[[3669,6]]}},"keywords":{}}],["number",{"_index":551,"title":{},"content":{"20":{"position":[[931,6]]},"72":{"position":[[138,6]]},"94":{"position":[[1179,8]]},"97":{"position":[[216,6]]},"100":{"position":[[92,6]]},"107":{"position":[[1869,6],[2178,7]]},"110":{"position":[[1402,7]]},"137":{"position":[[590,6]]},"138":{"position":[[2400,6]]},"142":{"position":[[2478,6]]},"146":{"position":[[177,6]]},"149":{"position":[[186,6]]},"152":{"position":[[193,6]]},"159":{"position":[[758,7],[773,6],[833,7],[887,7]]},"161":{"position":[[1082,6]]},"162":{"position":[[1939,6],[2106,7],[2182,8],[2233,7],[2288,7]]},"183":{"position":[[2216,6],[4334,6]]},"193":{"position":[[397,6]]},"208":{"position":[[798,6]]},"240":{"position":[[3668,6]]},"254":{"position":[[418,6],[470,6],[1486,6],[1538,6],[1952,7],[3874,6]]},"263":{"position":[[607,6]]},"280":{"position":[[1445,6]]},"281":{"position":[[2135,6]]},"296":{"position":[[3626,6],[4865,7],[5074,7]]},"308":{"position":[[529,8]]},"315":{"position":[[1092,7]]},"323":{"position":[[811,6]]},"370":{"position":[[797,6]]},"379":{"position":[[216,6]]},"397":{"position":[[423,6],[728,6]]},"402":{"position":[[152,6]]},"410":{"position":[[78,6]]},"419":{"position":[[1978,6]]},"441":{"position":[[587,6]]},"504":{"position":[[1607,6]]},"509":{"position":[[205,6]]},"517":{"position":[[2260,6],[3545,6]]},"547":{"position":[[1980,6]]},"552":{"position":[[98,6],[374,6]]},"556":{"position":[[1495,6],[2020,6]]},"577":{"position":[[165,6]]},"588":{"position":[[160,6]]},"595":{"position":[[1448,6]]},"639":{"position":[[1605,6]]},"668":{"position":[[163,6]]},"747":{"position":[[99,7]]},"757":{"position":[[1564,6]]},"770":{"position":[[1564,6]]},"797":{"position":[[1564,6]]},"812":{"position":[[1564,6]]},"821":{"position":[[694,6]]},"828":{"position":[[1564,6]]},"842":{"position":[[1380,6],[1497,6],[2461,6],[2568,6]]},"867":{"position":[[889,6],[1048,6]]},"870":{"position":[[84,7]]},"879":{"position":[[1046,6]]},"907":{"position":[[580,6]]},"912":{"position":[[710,6]]},"922":{"position":[[630,6]]},"923":{"position":[[580,6]]},"934":{"position":[[580,6]]},"950":{"position":[[580,6]]},"968":{"position":[[580,6]]},"1023":{"position":[[1961,6]]},"1045":{"position":[[565,6]]},"1053":{"position":[[565,6]]},"1061":{"position":[[565,6]]},"1110":{"position":[[121,6],[153,7],[182,7],[212,7]]},"1164":{"position":[[281,6],[501,7]]},"1170":{"position":[[934,6],[1077,6]]},"1172":{"position":[[383,6]]},"1196":{"position":[[751,6],[1109,6],[1130,6]]},"1220":{"position":[[611,6],[754,6]]},"1222":{"position":[[383,6]]},"1230":{"position":[[156,7]]},"1243":{"position":[[532,6]]},"1247":{"position":[[327,7]]},"1275":{"position":[[222,8]]},"1292":{"position":[[3666,6]]},"1306":{"position":[[3666,6]]},"1329":{"position":[[3666,6]]},"1356":{"position":[[1235,6]]},"1461":{"position":[[157,6],[2067,6]]},"1465":{"position":[[542,6]]},"1466":{"position":[[20,7],[319,6]]},"1467":{"position":[[787,6],[848,6]]},"1475":{"position":[[521,6],[548,6],[1254,6],[1325,6],[1958,6]]},"1476":{"position":[[1141,6],[1378,6]]},"1477":{"position":[[1302,6],[3797,6]]}},"keywords":{}}],["number_of_shard",{"_index":5830,"title":{},"content":{"1196":{"position":[[1091,17]]}},"keywords":{}}],["numberfield",{"_index":5946,"title":{},"content":{"1275":{"position":[[477,12]]}},"keywords":{}}],["numbers"",{"_index":6652,"title":{},"content":{"1465":{"position":[[1128,14]]},"1466":{"position":[[415,14]]}},"keywords":{}}],["numbersexecutionsincom",{"_index":5398,"title":{},"content":{"1110":{"position":[[343,25]]}},"keywords":{}}],["numbersflowskeysmessag",{"_index":5399,"title":{},"content":{"1110":{"position":[[375,23]]}},"keywords":{}}],["numer",{"_index":405,"title":{},"content":{"13":{"position":[[1183,9]]},"208":{"position":[[1424,9]]},"321":{"position":[[1859,8]]},"750":{"position":[[1155,9]]},"754":{"position":[[481,9],[1288,9]]},"766":{"position":[[1155,9]]},"789":{"position":[[1556,9]]},"794":{"position":[[354,9],[1492,9]]},"807":{"position":[[1143,9]]},"809":{"position":[[354,9],[1492,9]]},"823":{"position":[[1143,9]]},"825":{"position":[[354,9],[1328,9]]},"1140":{"position":[[3681,7]]},"1209":{"position":[[918,7]]},"1286":{"position":[[411,9],[1578,9]]},"1292":{"position":[[3714,7]]},"1301":{"position":[[411,9],[1414,9]]},"1306":{"position":[[3714,7]]},"1316":{"position":[[3681,7]]},"1325":{"position":[[411,9],[1578,9]]},"1329":{"position":[[3714,7]]},"1340":{"position":[[3681,7]]},"1351":{"position":[[3681,7]]},"1379":{"position":[[3368,7]]},"1403":{"position":[[3368,7]]},"1414":{"position":[[3368,7]]},"1431":{"position":[[3704,7]]}},"keywords":{}}],["nutrit",{"_index":6518,"title":{},"content":{"1448":{"position":[[704,9]]}},"keywords":{}}],["nvarchar",{"_index":6107,"title":{},"content":{"1292":{"position":[[3764,8]]},"1306":{"position":[[3764,8]]},"1329":{"position":[[3764,8]]}},"keywords":{}}],["o",{"_index":880,"title":{},"content":{"58":{"position":[[334,1],[510,1]]},"169":{"position":[[575,1],[754,1]]},"250":{"position":[[1524,1]]}},"keywords":{}}],["o[deriv",{"_index":1503,"title":{},"content":{"105":{"position":[[1428,9]]}},"keywords":{}}],["oa2",{"_index":3498,"title":{},"content":{"388":{"position":[[244,3]]}},"keywords":{}}],["oauth",{"_index":3484,"title":{"726":{"position":[[0,5]]},"856":{"position":[[10,5]]},"1082":{"position":[[0,5]]},"1227":{"position":[[0,5]]},"1244":{"position":[[0,5]]}},"content":{"387":{"position":[[405,5]]},"446":{"position":[[357,5]]},"513":{"position":[[174,5]]},"522":{"position":[[175,5]]},"526":{"position":[[31,5]]},"530":{"position":[[175,5]]},"531":{"position":[[270,5]]},"551":{"position":[[173,5]]},"569":{"position":[[192,5]]},"573":{"position":[[418,5]]},"581":{"position":[[363,5]]},"609":{"position":[[498,5]]},"614":{"position":[[175,5]]},"643":{"position":[[149,5]]},"650":{"position":[[148,5]]},"668":{"position":[[125,5]]},"716":{"position":[[175,5]]},"718":{"position":[[28,6]]},"724":{"position":[[102,5],[135,5]]},"725":{"position":[[32,5]]},"726":{"position":[[19,5],[450,5]]},"728":{"position":[[209,5],[282,5],[410,5],[528,5]]},"731":{"position":[[146,5]]},"855":{"position":[[210,5],[288,5]]},"898":{"position":[[744,5],[971,5]]},"987":{"position":[[92,6]]},"988":{"position":[[126,5]]},"1002":{"position":[[92,6]]},"1003":{"position":[[126,5]]},"1016":{"position":[[132,5]]},"1067":{"position":[[322,5],[392,5]]},"1082":{"position":[[124,6]]},"1102":{"position":[[144,5]]},"1133":{"position":[[426,5],[446,5],[538,5],[562,5],[705,5]]},"1226":{"position":[[175,5]]},"1227":{"position":[[1,5]]},"1230":{"position":[[280,5]]},"1243":{"position":[[1130,5],[1212,5]]},"1247":{"position":[[130,6],[451,5]]},"1363":{"position":[[152,5]]}},"keywords":{}}],["oauth2",{"_index":3471,"title":{"383":{"position":[[6,6]]},"445":{"position":[[6,6]]},"514":{"position":[[16,7]]},"523":{"position":[[6,6]]},"531":{"position":[[6,6]]},"553":{"position":[[6,6]]},"570":{"position":[[6,6]]},"608":{"position":[[6,6]]},"615":{"position":[[6,6]]},"644":{"position":[[6,6]]},"651":{"position":[[6,6]]},"717":{"position":[[6,6]]},"732":{"position":[[6,6]]},"987":{"position":[[6,6]]},"1002":{"position":[[6,6]]},"1130":{"position":[[0,6]]}},"content":{"382":{"position":[[21,6]]},"384":{"position":[[83,6]]},"387":{"position":[[138,7]]},"438":{"position":[[891,6],[1038,6],[1189,6],[1355,6]]},"444":{"position":[[21,6]]},"448":{"position":[[138,7]]},"500":{"position":[[102,6]]},"502":{"position":[[416,6]]},"513":{"position":[[97,7]]},"514":{"position":[[8,6]]},"522":{"position":[[85,7]]},"530":{"position":[[85,7]]},"534":{"position":[[138,7]]},"551":{"position":[[85,7]]},"556":{"position":[[138,7]]},"569":{"position":[[104,7]]},"573":{"position":[[142,7]]},"607":{"position":[[102,7],[190,6]]},"611":{"position":[[138,7]]},"614":{"position":[[88,7]]},"643":{"position":[[76,7]]},"650":{"position":[[76,6]]},"716":{"position":[[87,7]]},"720":{"position":[[138,7]]},"731":{"position":[[78,7]]},"859":{"position":[[138,7]]},"898":{"position":[[387,6]]},"988":{"position":[[193,7]]},"991":{"position":[[138,7]]},"1003":{"position":[[193,7]]},"1009":{"position":[[138,7]]},"1070":{"position":[[138,7]]},"1085":{"position":[[158,6]]},"1129":{"position":[[104,6]]},"1133":{"position":[[489,6],[609,6],[736,6]]}},"keywords":{}}],["oauth2.0",{"_index":3483,"title":{},"content":{"387":{"position":[[309,8]]},"388":{"position":[[206,8]]},"448":{"position":[[335,8],[351,8]]},"449":{"position":[[204,8]]},"895":{"position":[[356,8],[389,8]]},"1133":{"position":[[150,9]]}},"keywords":{}}],["object",{"_index":20,"title":{"337":{"position":[[10,8]]}},"content":{"1":{"position":[[253,7]]},"14":{"position":[[455,6]]},"17":{"position":[[563,6],[948,6]]},"56":{"position":[[142,6],[1004,6],[1909,6]]},"66":{"position":[[106,8]]},"67":{"position":[[11,6],[1766,6],[1875,6]]},"69":{"position":[[148,6],[425,6],[834,6],[1012,6]]},"70":{"position":[[716,6]]},"73":{"position":[[124,7]]},"76":{"position":[[656,6]]},"94":{"position":[[268,6],[427,6],[795,6],[1325,6],[2835,7]]},"98":{"position":[[681,7]]},"120":{"position":[[158,6],[344,6],[910,6],[989,6],[2056,6]]},"121":{"position":[[948,6]]},"122":{"position":[[1425,6],[2234,6]]},"123":{"position":[[588,7]]},"154":{"position":[[299,7],[1086,7]]},"160":{"position":[[132,7],[260,7],[752,6]]},"162":{"position":[[2020,6],[2209,6]]},"164":{"position":[[613,6]]},"165":{"position":[[1018,6]]},"166":{"position":[[358,6]]},"183":{"position":[[1249,6],[1953,6],[3759,6]]},"207":{"position":[[413,6],[534,6],[919,6]]},"236":{"position":[[3755,7]]},"237":{"position":[[59,7],[108,7],[213,6],[2571,7],[2746,7]]},"239":{"position":[[854,6],[975,6]]},"254":{"position":[[304,6],[1372,6]]},"268":{"position":[[881,6]]},"269":{"position":[[506,6]]},"281":{"position":[[2024,6]]},"296":{"position":[[412,6],[1383,6],[2072,8]]},"301":{"position":[[1013,7]]},"307":{"position":[[1324,6],[2192,6]]},"309":{"position":[[2158,6],[2617,6],[2755,6],[2854,7]]},"313":{"position":[[3246,7]]},"314":{"position":[[1232,6],[1305,6]]},"337":{"position":[[125,7],[187,6]]},"341":{"position":[[226,6],[354,6]]},"370":{"position":[[736,6],[1621,6],[1671,6]]},"377":{"position":[[162,6]]},"387":{"position":[[253,6]]},"413":{"position":[[301,7]]},"417":{"position":[[145,6],[334,7],[1175,6],[1223,7],[1448,6],[1806,6]]},"432":{"position":[[477,6]]},"438":{"position":[[145,6],[334,7],[642,6],[1691,6],[1739,7]]},"448":{"position":[[265,6]]},"485":{"position":[[223,7]]},"491":{"position":[[69,6]]},"492":{"position":[[69,6]]},"502":{"position":[[213,6],[261,7],[384,6],[495,6],[605,6],[794,7],[1096,6],[1454,6]]},"534":{"position":[[525,6]]},"543":{"position":[[150,7]]},"545":{"position":[[145,6],[334,7],[784,6],[832,7],[1050,6],[1408,6]]},"556":{"position":[[553,6]]},"573":{"position":[[297,6]]},"584":{"position":[[285,6]]},"611":{"position":[[268,6]]},"619":{"position":[[243,6]]},"637":{"position":[[151,6],[345,6],[610,6],[968,6]]},"642":{"position":[[200,7]]},"646":{"position":[[491,6]]},"654":{"position":[[212,6]]},"657":{"position":[[223,7]]},"664":{"position":[[69,6]]},"665":{"position":[[69,6]]},"673":{"position":[[223,7]]},"679":{"position":[[69,6]]},"680":{"position":[[69,6]]},"688":{"position":[[223,7]]},"694":{"position":[[69,6]]},"695":{"position":[[69,6]]},"720":{"position":[[449,6]]},"735":{"position":[[189,6]]},"839":{"position":[[151,7]]},"840":{"position":[[1572,7]]},"842":{"position":[[529,6]]},"848":{"position":[[151,7]]},"849":{"position":[[2463,7]]},"859":{"position":[[303,6]]},"869":{"position":[[44,6],[60,6],[74,6],[112,7],[322,6],[381,8],[689,7],[865,6]]},"879":{"position":[[396,6]]},"907":{"position":[[519,6]]},"923":{"position":[[519,6]]},"934":{"position":[[519,6]]},"950":{"position":[[519,6]]},"968":{"position":[[519,6]]},"974":{"position":[[197,7]]},"975":{"position":[[75,7]]},"976":{"position":[[78,7],[364,7]]},"985":{"position":[[62,8],[461,8],[570,7],[673,7]]},"989":{"position":[[118,7],[340,7]]},"991":{"position":[[263,6],[847,6]]},"1000":{"position":[[62,8],[418,7],[444,8],[467,7],[639,8],[748,7],[884,7],[987,7]]},"1004":{"position":[[118,7],[423,7]]},"1008":{"position":[[1663,6]]},"1009":{"position":[[263,6],[1030,7],[1067,7],[1483,8],[1703,6]]},"1021":{"position":[[1167,6],[1607,6],[1965,6]]},"1034":{"position":[[746,6]]},"1045":{"position":[[504,6]]},"1053":{"position":[[504,6]]},"1061":{"position":[[504,6]]},"1070":{"position":[[293,6]]},"1085":{"position":[[353,6]]},"1138":{"position":[[912,6],[962,6]]},"1144":{"position":[[104,8],[541,8],[1320,7]]},"1151":{"position":[[1283,7]]},"1162":{"position":[[389,8]]},"1164":{"position":[[238,6]]},"1170":{"position":[[104,8],[541,8],[1245,7]]},"1172":{"position":[[320,6]]},"1188":{"position":[[502,6]]},"1192":{"position":[[275,7]]},"1196":{"position":[[267,6]]},"1213":{"position":[[104,8],[396,8],[997,7]]},"1220":{"position":[[104,8],[396,8],[922,7]]},"1222":{"position":[[320,6]]},"1230":{"position":[[164,7]]},"1239":{"position":[[272,6]]},"1247":{"position":[[335,7]]},"1260":{"position":[[831,7]]},"1275":{"position":[[281,6]]},"1277":{"position":[[775,6]]},"1285":{"position":[[850,6]]},"1300":{"position":[[850,6]]},"1313":{"position":[[704,6]]},"1324":{"position":[[850,6]]},"1337":{"position":[[704,6]]},"1348":{"position":[[704,6]]},"1356":{"position":[[984,6]]},"1379":{"position":[[3421,6]]},"1382":{"position":[[166,7]]},"1386":{"position":[[748,6]]},"1394":{"position":[[272,7]]},"1403":{"position":[[3421,6]]},"1414":{"position":[[3421,6]]},"1420":{"position":[[608,7]]},"1423":{"position":[[282,7]]},"1463":{"position":[[307,6]]},"1464":{"position":[[163,6]]},"1465":{"position":[[486,6]]},"1466":{"position":[[122,6]]},"1467":{"position":[[146,8],[192,8],[465,6],[670,7],[1239,7],[2136,6]]},"1474":{"position":[[422,6]]},"1475":{"position":[[687,6],[762,6],[815,6],[924,6],[1096,6],[1205,6],[1524,6],[1641,6],[1784,6],[1894,6]]},"1476":{"position":[[173,6],[1239,6]]},"1477":{"position":[[88,6],[814,8],[841,6],[943,6],[1055,7],[1069,6],[1267,6],[2963,6],[3165,6],[3277,7],[3291,6]]},"1480":{"position":[[281,6],[695,6]]}},"keywords":{}}],["object$foo",{"_index":1433,"title":{},"content":{"99":{"position":[[695,12]]}},"keywords":{}}],["objectsdealsengagementsemail",{"_index":4370,"title":{},"content":{"642":{"position":[[110,28]]}},"keywords":{}}],["observ",{"_index":1445,"title":{},"content":{"101":{"position":[[6,8],[336,8]]},"165":{"position":[[1735,8]]},"480":{"position":[[1145,8]]},"754":{"position":[[706,8]]},"794":{"position":[[912,8]]},"809":{"position":[[912,8]]},"825":{"position":[[748,8]]},"1020":{"position":[[426,9]]},"1286":{"position":[[969,8]]},"1301":{"position":[[805,8]]},"1325":{"position":[[969,8]]}},"keywords":{}}],["obtain",{"_index":2211,"title":{},"content":{"201":{"position":[[1,6]]},"348":{"position":[[58,6]]},"349":{"position":[[350,8]]},"384":{"position":[[193,6]]},"436":{"position":[[21,8]]},"556":{"position":[[960,9]]},"747":{"position":[[151,6]]},"840":{"position":[[454,6]]},"849":{"position":[[925,6]]},"898":{"position":[[1194,6]]},"989":{"position":[[738,6]]},"1004":{"position":[[821,6]]}},"keywords":{}}],["obviou",{"_index":3840,"title":{},"content":{"480":{"position":[[1332,7]]}},"keywords":{}}],["occasion",{"_index":2080,"title":{},"content":{"183":{"position":[[3290,12]]},"237":{"position":[[1425,12]]},"366":{"position":[[823,12]]},"602":{"position":[[351,12]]},"750":{"position":[[511,12]]},"766":{"position":[[511,12]]},"789":{"position":[[499,12]]},"807":{"position":[[499,12]]},"823":{"position":[[499,12]]},"903":{"position":[[849,12]]},"915":{"position":[[849,12]]},"930":{"position":[[849,12]]},"963":{"position":[[1003,12]]},"1040":{"position":[[565,12]]},"1050":{"position":[[565,12]]},"1058":{"position":[[565,12]]}},"keywords":{}}],["occur",{"_index":78,"title":{},"content":{"2":{"position":[[293,9]]},"6":{"position":[[251,5],[545,5]]},"19":{"position":[[335,6]]},"75":{"position":[[128,6]]},"110":{"position":[[576,6]]},"183":{"position":[[3303,5]]},"196":{"position":[[489,6]]},"197":{"position":[[472,6]]},"209":{"position":[[931,6]]},"233":{"position":[[496,6]]},"292":{"position":[[166,6]]},"303":{"position":[[157,6]]},"577":{"position":[[557,7]]},"595":{"position":[[263,5]]},"747":{"position":[[312,5]]},"754":{"position":[[867,5]]},"763":{"position":[[284,7]]},"776":{"position":[[284,7]]},"794":{"position":[[1073,5]]},"803":{"position":[[290,7]]},"809":{"position":[[1073,5]]},"818":{"position":[[290,7]]},"825":{"position":[[909,5]]},"834":{"position":[[290,7]]},"909":{"position":[[415,6]]},"925":{"position":[[415,6]]},"936":{"position":[[415,6]]},"952":{"position":[[415,6]]},"970":{"position":[[415,6]]},"1286":{"position":[[1130,5]]},"1301":{"position":[[966,5]]},"1325":{"position":[[1130,5]]},"1453":{"position":[[346,6],[1151,6]]},"1459":{"position":[[1098,7]]}},"keywords":{}}],["occurr",{"_index":2244,"title":{},"content":{"208":{"position":[[212,12]]}},"keywords":{}}],["occurrences_r",{"_index":6337,"title":{},"content":{"1379":{"position":[[3472,13]]},"1403":{"position":[[3472,13]]},"1414":{"position":[[3472,13]]}},"keywords":{}}],["occurrences_regex",{"_index":5684,"title":{},"content":{"1140":{"position":[[3719,17]]},"1316":{"position":[[3719,17]]},"1340":{"position":[[3719,17]]},"1351":{"position":[[3719,17]]},"1431":{"position":[[3742,17]]}},"keywords":{}}],["oci",{"_index":5936,"title":{},"content":{"1271":{"position":[[100,6]]}},"keywords":{}}],["octet_length",{"_index":5688,"title":{},"content":{"1140":{"position":[[3767,12]]},"1316":{"position":[[3767,12]]},"1340":{"position":[[3767,12]]},"1351":{"position":[[3767,12]]},"1379":{"position":[[3530,12]]},"1403":{"position":[[3530,12]]},"1414":{"position":[[3530,12]]},"1431":{"position":[[3790,12]]}},"keywords":{}}],["octob",{"_index":3954,"title":{},"content":{"517":{"position":[[2452,7],[2468,7]]}},"keywords":{}}],["of...a",{"_index":2817,"title":{},"content":{"274":{"position":[[353,6]]}},"keywords":{}}],["ofannot",{"_index":1873,"title":{},"content":{"159":{"position":[[49,14]]}},"keywords":{}}],["ofcaptur",{"_index":3157,"title":{},"content":{"323":{"position":[[415,10]]}},"keywords":{}}],["ofdocu",{"_index":4677,"title":{},"content":{"779":{"position":[[54,11]]}},"keywords":{}}],["off"",{"_index":6477,"title":{},"content":{"1437":{"position":[[858,9]]}},"keywords":{}}],["offend",{"_index":4633,"title":{},"content":{"760":{"position":[[340,9]]},"761":{"position":[[561,9]]},"763":{"position":[[327,9]]},"773":{"position":[[340,9]]},"774":{"position":[[561,9]]},"776":{"position":[[327,9]]},"800":{"position":[[340,9]]},"801":{"position":[[567,9]]},"803":{"position":[[333,9]]},"815":{"position":[[340,9]]},"816":{"position":[[567,9]]},"818":{"position":[[333,9]]},"831":{"position":[[340,9]]},"832":{"position":[[567,9]]},"834":{"position":[[333,9]]}},"keywords":{}}],["offer",{"_index":188,"title":{},"content":{"4":{"position":[[733,8]]},"53":{"position":[[220,5]]},"54":{"position":[[47,6]]},"67":{"position":[[854,8]]},"100":{"position":[[22,6]]},"107":{"position":[[1142,6]]},"112":{"position":[[495,5]]},"125":{"position":[[702,6]]},"154":{"position":[[1774,6]]},"240":{"position":[[3161,6]]},"285":{"position":[[82,6]]},"309":{"position":[[1572,5]]},"320":{"position":[[641,5]]},"323":{"position":[[1944,6]]},"324":{"position":[[1211,5]]},"1008":{"position":[[9,6]]}},"keywords":{}}],["offici",{"_index":3788,"title":{},"content":{"472":{"position":[[379,8]]},"786":{"position":[[406,8]]},"900":{"position":[[364,8]]},"1140":{"position":[[206,8]]},"1292":{"position":[[139,8]]},"1306":{"position":[[139,8]]},"1316":{"position":[[206,8]]},"1329":{"position":[[139,8]]},"1340":{"position":[[206,8]]},"1351":{"position":[[206,8]]},"1370":{"position":[[202,8]]},"1379":{"position":[[143,8]]},"1403":{"position":[[143,8]]},"1414":{"position":[[143,8]]},"1431":{"position":[[229,8]]}},"keywords":{}}],["offline_access",{"_index":5144,"title":{},"content":{"989":{"position":[[955,16]]},"1004":{"position":[[1038,16]]}},"keywords":{}}],["offset",{"_index":137,"title":{},"content":{"3":{"position":[[840,6],[879,6]]},"208":{"position":[[1252,7]]},"314":{"position":[[1159,7],[1219,6]]},"315":{"position":[[1084,7]]},"750":{"position":[[1165,6]]},"754":{"position":[[491,6],[776,7],[1298,6]]},"757":{"position":[[650,7]]},"766":{"position":[[1165,6]]},"770":{"position":[[650,7]]},"789":{"position":[[1566,6]]},"794":{"position":[[364,6],[982,7],[1502,6]]},"797":{"position":[[650,7]]},"807":{"position":[[1153,6]]},"809":{"position":[[364,6],[982,7],[1502,6]]},"812":{"position":[[650,7]]},"823":{"position":[[1153,6]]},"825":{"position":[[364,6],[818,7],[1338,6]]},"828":{"position":[[650,7]]},"1140":{"position":[[3854,6]]},"1209":{"position":[[939,6]]},"1285":{"position":[[662,7]]},"1286":{"position":[[421,6],[1039,7],[1588,6]]},"1292":{"position":[[3895,6]]},"1300":{"position":[[662,7]]},"1301":{"position":[[421,6],[875,7],[1424,6]]},"1306":{"position":[[3895,6]]},"1316":{"position":[[3854,6]]},"1324":{"position":[[662,7]]},"1325":{"position":[[421,6],[1039,7],[1588,6]]},"1329":{"position":[[3895,6]]},"1340":{"position":[[3854,6]]},"1351":{"position":[[3854,6]]},"1370":{"position":[[604,6]]},"1379":{"position":[[3681,7]]},"1403":{"position":[[3681,7]]},"1414":{"position":[[3681,7]]},"1431":{"position":[[3877,6]]},"1452":{"position":[[699,7],[3357,6]]}},"keywords":{}}],["ofjitt",{"_index":6574,"title":{},"content":{"1453":{"position":[[867,8]]}},"keywords":{}}],["oflastwritewin",{"_index":5964,"title":{},"content":{"1279":{"position":[[244,15]]}},"keywords":{}}],["ofmax_slot_wal_keep_s",{"_index":5066,"title":{},"content":{"922":{"position":[[3091,24]]}},"keywords":{}}],["ofmerg",{"_index":5963,"title":{},"content":{"1279":{"position":[[221,7]]}},"keywords":{}}],["oftentim",{"_index":3171,"title":{},"content":{"325":{"position":[[91,10]]}},"keywords":{}}],["oj",{"_index":6117,"title":{},"content":{"1292":{"position":[[3946,2]]},"1306":{"position":[[3946,2]]},"1329":{"position":[[3946,2]]}},"keywords":{}}],["ok",{"_index":2477,"title":{},"content":{"227":{"position":[[96,2]]}},"keywords":{}}],["okay",{"_index":5225,"title":{},"content":{"1036":{"position":[[818,4]]}},"keywords":{}}],["olap",{"_index":1670,"title":{"326":{"position":[[31,4]]}},"content":{"121":{"position":[[2057,4]]},"124":{"position":[[197,4]]},"325":{"position":[[858,4]]},"326":{"position":[[19,4],[245,4],[868,4]]}},"keywords":{}}],["old",{"_index":410,"title":{},"content":{"13":{"position":[[1358,3]]},"19":{"position":[[309,3]]},"62":{"position":[[483,3],[523,3],[616,3]]},"105":{"position":[[1185,3]]},"208":{"position":[[627,3],[1620,3]]},"209":{"position":[[1446,3]]},"271":{"position":[[393,3]]},"307":{"position":[[454,3],[712,3]]},"395":{"position":[[272,3]]},"785":{"position":[[639,3]]},"922":{"position":[[987,3]]},"1140":{"position":[[3900,3]]},"1292":{"position":[[3992,3]]},"1306":{"position":[[3992,3]]},"1316":{"position":[[3900,3]]},"1329":{"position":[[3992,3]]},"1340":{"position":[[3900,3]]},"1351":{"position":[[3900,3]]},"1379":{"position":[[3736,3]]},"1403":{"position":[[3736,3]]},"1414":{"position":[[3736,3]]},"1431":{"position":[[3923,3]]},"1449":{"position":[[567,3]]}},"keywords":{}}],["older",{"_index":2126,"title":{},"content":{"190":{"position":[[1154,5]]},"1437":{"position":[[871,5]]},"1439":{"position":[[1082,5]]}},"keywords":{}}],["oldest",{"_index":2787,"title":{},"content":{"263":{"position":[[329,6]]}},"keywords":{}}],["omit",{"_index":834,"title":{},"content":{"56":{"position":[[400,4]]},"82":{"position":[[2409,7],[4526,7]]},"92":{"position":[[224,4]]},"192":{"position":[[666,4]]},"228":{"position":[[617,4]]},"429":{"position":[[260,4]]},"867":{"position":[[1791,4]]},"909":{"position":[[511,7],[596,8],[942,7]]},"925":{"position":[[511,7],[596,8],[942,7]]},"936":{"position":[[511,7],[596,8],[942,7]]},"952":{"position":[[511,7],[596,8],[942,7]]},"970":{"position":[[511,7],[596,8],[942,7]]},"1140":{"position":[[3959,4]]},"1151":{"position":[[495,8]]},"1316":{"position":[[3959,4]]},"1340":{"position":[[3959,4]]},"1351":{"position":[[3959,4]]},"1431":{"position":[[3982,4]]},"1434":{"position":[[1543,5]]}},"keywords":{}}],["on",{"_index":25,"title":{},"content":{"1":{"position":[[315,3]]},"2":{"position":[[372,3],[502,3]]},"12":{"position":[[136,4]]},"13":{"position":[[127,3]]},"16":{"position":[[645,3]]},"26":{"position":[[212,3]]},"27":{"position":[[489,3]]},"35":{"position":[[73,3]]},"36":{"position":[[56,3]]},"40":{"position":[[70,3]]},"43":{"position":[[277,3]]},"54":{"position":[[298,3]]},"69":{"position":[[532,3]]},"79":{"position":[[58,3],[165,3]]},"90":{"position":[[350,3]]},"94":{"position":[[325,3]]},"97":{"position":[[23,3]]},"100":{"position":[[979,3]]},"105":{"position":[[688,3],[1481,3],[1502,3]]},"107":{"position":[[1710,3],[1786,3],[1924,3],[3561,3]]},"109":{"position":[[687,3]]},"119":{"position":[[393,3],[467,3]]},"120":{"position":[[710,3],[2388,3]]},"121":{"position":[[1825,3]]},"128":{"position":[[208,3],[458,3],[633,3]]},"129":{"position":[[144,3]]},"133":{"position":[[212,3]]},"144":{"position":[[128,3]]},"154":{"position":[[1354,3],[1425,3]]},"158":{"position":[[55,3]]},"179":{"position":[[44,4]]},"180":{"position":[[98,3]]},"183":{"position":[[557,3]]},"188":{"position":[[58,4]]},"189":{"position":[[1143,3]]},"190":{"position":[[554,3],[1711,3]]},"191":{"position":[[368,3]]},"192":{"position":[[1355,3]]},"193":{"position":[[645,3]]},"197":{"position":[[815,4]]},"207":{"position":[[293,4]]},"217":{"position":[[95,3],[1053,3],[1309,4]]},"218":{"position":[[36,3]]},"219":{"position":[[408,3]]},"221":{"position":[[63,3],[1205,3],[1859,3]]},"222":{"position":[[450,3]]},"223":{"position":[[416,3]]},"224":{"position":[[469,3]]},"230":{"position":[[100,4]]},"238":{"position":[[103,3]]},"254":{"position":[[900,3]]},"263":{"position":[[586,3]]},"267":{"position":[[925,3]]},"271":{"position":[[424,4]]},"273":{"position":[[84,3]]},"274":{"position":[[1313,3]]},"277":{"position":[[960,3]]},"281":{"position":[[1641,3]]},"288":{"position":[[152,4]]},"290":{"position":[[87,3]]},"295":{"position":[[81,3],[109,3],[721,3],[764,3],[793,3],[1133,3]]},"296":{"position":[[1020,3],[1852,3],[2158,3],[3151,3],[3467,3],[3543,3],[7170,3]]},"299":{"position":[[152,4]]},"301":{"position":[[78,3]]},"308":{"position":[[19,3]]},"309":{"position":[[19,3]]},"310":{"position":[[19,3]]},"313":{"position":[[3200,3]]},"314":{"position":[[578,3]]},"315":{"position":[[2490,4]]},"319":{"position":[[127,3]]},"320":{"position":[[1854,3],[2006,3],[2106,3]]},"321":{"position":[[69,4],[461,3],[755,3],[838,3],[981,4],[1620,3],[2183,3]]},"322":{"position":[[765,3]]},"323":{"position":[[69,3],[847,3]]},"324":{"position":[[250,3]]},"326":{"position":[[119,4]]},"329":{"position":[[146,3]]},"343":{"position":[[712,3]]},"366":{"position":[[265,3]]},"385":{"position":[[203,3]]},"390":{"position":[[38,3]]},"395":{"position":[[38,3]]},"415":{"position":[[255,3]]},"432":{"position":[[258,3],[527,3]]},"483":{"position":[[686,3],[731,3]]},"497":{"position":[[345,3]]},"548":{"position":[[64,3],[227,3]]},"552":{"position":[[73,3],[349,3]]},"553":{"position":[[1,3]]},"554":{"position":[[1,3],[353,3]]},"560":{"position":[[103,3]]},"571":{"position":[[544,3]]},"581":{"position":[[221,3]]},"584":{"position":[[732,3]]},"602":{"position":[[1038,3]]},"617":{"position":[[466,3]]},"635":{"position":[[83,3]]},"717":{"position":[[1,3]]},"747":{"position":[[846,3]]},"789":{"position":[[760,3],[1122,3]]},"821":{"position":[[701,3]]},"867":{"position":[[1348,3]]},"870":{"position":[[765,3]]},"879":{"position":[[482,3]]},"903":{"position":[[291,3]]},"907":{"position":[[1770,3]]},"912":{"position":[[717,3]]},"915":{"position":[[291,3]]},"923":{"position":[[1770,3]]},"930":{"position":[[291,3]]},"945":{"position":[[1043,3]]},"947":{"position":[[1045,3]]},"963":{"position":[[445,3]]},"964":{"position":[[751,3]]},"968":{"position":[[1770,3]]},"977":{"position":[[89,3]]},"1021":{"position":[[542,3],[642,3]]},"1082":{"position":[[181,3]]},"1087":{"position":[[290,3]]},"1137":{"position":[[43,3],[156,3]]},"1140":{"position":[[4033,3]]},"1143":{"position":[[78,3]]},"1150":{"position":[[93,3]]},"1156":{"position":[[43,3]]},"1161":{"position":[[78,3]]},"1169":{"position":[[78,3]]},"1178":{"position":[[43,3],[157,3]]},"1183":{"position":[[312,3],[611,3]]},"1185":{"position":[[255,3]]},"1186":{"position":[[68,3]]},"1187":{"position":[[43,3],[159,3]]},"1189":{"position":[[398,3]]},"1194":{"position":[[465,3]]},"1195":{"position":[[43,3]]},"1197":{"position":[[404,3]]},"1203":{"position":[[72,3],[626,3]]},"1205":{"position":[[43,3]]},"1207":{"position":[[487,3]]},"1212":{"position":[[78,3]]},"1219":{"position":[[78,3]]},"1226":{"position":[[250,3]]},"1229":{"position":[[43,3],[169,3]]},"1232":{"position":[[508,3]]},"1236":{"position":[[150,3]]},"1243":{"position":[[47,3]]},"1245":{"position":[[418,3]]},"1246":{"position":[[43,3]]},"1248":{"position":[[431,3]]},"1259":{"position":[[85,3]]},"1264":{"position":[[140,3]]},"1265":{"position":[[8,3]]},"1281":{"position":[[426,3]]},"1284":{"position":[[43,3],[154,3]]},"1292":{"position":[[4071,3]]},"1295":{"position":[[426,3]]},"1298":{"position":[[416,3]]},"1299":{"position":[[43,3],[154,3]]},"1306":{"position":[[4071,3]]},"1309":{"position":[[244,3]]},"1312":{"position":[[43,3],[157,3]]},"1313":{"position":[[1520,3]]},"1316":{"position":[[4033,3]]},"1319":{"position":[[426,3]]},"1322":{"position":[[450,3]]},"1323":{"position":[[43,3],[154,3]]},"1329":{"position":[[4071,3]]},"1332":{"position":[[244,3]]},"1335":{"position":[[450,3]]},"1336":{"position":[[43,3],[157,3]]},"1337":{"position":[[1520,3]]},"1340":{"position":[[4033,3]]},"1343":{"position":[[244,3]]},"1346":{"position":[[416,3]]},"1347":{"position":[[43,3],[157,3]]},"1351":{"position":[[4033,3]]},"1354":{"position":[[159,3],[243,3],[290,3]]},"1355":{"position":[[43,3],[156,3]]},"1357":{"position":[[336,3]]},"1361":{"position":[[174,3]]},"1365":{"position":[[47,3]]},"1372":{"position":[[289,3]]},"1375":{"position":[[43,3],[158,3]]},"1382":{"position":[[509,3]]},"1384":{"position":[[757,3]]},"1385":{"position":[[43,3],[158,3]]},"1386":{"position":[[807,3]]},"1387":{"position":[[437,3],[1063,3]]},"1388":{"position":[[520,3],[598,3]]},"1396":{"position":[[289,3]]},"1399":{"position":[[43,3],[158,3]]},"1406":{"position":[[289,3]]},"1410":{"position":[[43,3],[158,3]]},"1417":{"position":[[76,4],[446,3]]},"1419":{"position":[[43,3],[158,3]]},"1421":{"position":[[424,3]]},"1425":{"position":[[248,3]]},"1426":{"position":[[43,3],[160,3]]},"1431":{"position":[[4056,3]]},"1434":{"position":[[449,3]]},"1437":{"position":[[179,3]]},"1459":{"position":[[134,3],[731,3],[932,3],[1615,4]]},"1461":{"position":[[4295,3]]},"1467":{"position":[[1658,3]]},"1471":{"position":[[302,3],[349,3],[863,3]]},"1474":{"position":[[471,3]]},"1476":{"position":[[745,3]]},"1477":{"position":[[1418,3],[2694,3],[3584,3]]},"1479":{"position":[[85,4]]}},"keywords":{}}],["onboard",{"_index":3474,"title":{},"content":{"384":{"position":[[248,10]]}},"keywords":{}}],["onc",{"_index":1443,"title":{"602":{"position":[[9,4]]},"1166":{"position":[[9,4]]},"1435":{"position":[[8,4]]}},"content":{"100":{"position":[[660,4]]},"101":{"position":[[579,4]]},"114":{"position":[[736,4]]},"115":{"position":[[1052,5],[1167,5],[1262,5]]},"117":{"position":[[495,4]]},"121":{"position":[[486,4]]},"124":{"position":[[357,5]]},"165":{"position":[[2046,4]]},"169":{"position":[[1228,4]]},"170":{"position":[[233,4]]},"173":{"position":[[1152,4]]},"174":{"position":[[80,4]]},"185":{"position":[[192,4]]},"190":{"position":[[1743,4]]},"192":{"position":[[2105,4]]},"198":{"position":[[330,5],[828,5]]},"206":{"position":[[112,4]]},"207":{"position":[[438,4]]},"217":{"position":[[2109,4]]},"230":{"position":[[303,4]]},"239":{"position":[[879,4]]},"240":{"position":[[2342,4]]},"264":{"position":[[548,4]]},"275":{"position":[[569,4]]},"290":{"position":[[1575,4]]},"291":{"position":[[796,4]]},"302":{"position":[[796,4]]},"320":{"position":[[694,4]]},"323":{"position":[[1163,4]]},"325":{"position":[[679,4]]},"326":{"position":[[1844,4]]},"331":{"position":[[360,4],[607,4]]},"332":{"position":[[167,4]]},"377":{"position":[[1781,4]]},"478":{"position":[[525,4]]},"479":{"position":[[819,4]]},"480":{"position":[[180,4],[1382,4],[1584,4]]},"485":{"position":[[396,4]]},"515":{"position":[[924,4]]},"595":{"position":[[1338,4]]},"599":{"position":[[525,4]]},"602":{"position":[[269,4],[424,4],[765,4]]},"657":{"position":[[396,4]]},"673":{"position":[[396,4]]},"688":{"position":[[396,4]]},"789":{"position":[[823,4],[1056,4]]},"840":{"position":[[823,5],[2346,5]]},"842":{"position":[[1428,5],[1534,5]]},"849":{"position":[[1298,5],[3486,5]]},"942":{"position":[[163,4]]},"1006":{"position":[[429,4]]},"1067":{"position":[[235,4]]},"1147":{"position":[[397,5]]},"1156":{"position":[[299,4]]},"1166":{"position":[[117,5]]},"1174":{"position":[[397,5]]},"1216":{"position":[[397,5]]},"1224":{"position":[[397,5]]},"1384":{"position":[[1175,4]]},"1438":{"position":[[268,5],[517,4],[672,4]]},"1439":{"position":[[367,4],[855,5]]},"1442":{"position":[[1651,4],[1804,4]]},"1443":{"position":[[118,4]]},"1444":{"position":[[186,4]]},"1459":{"position":[[565,4],[1153,4]]},"1470":{"position":[[203,4]]}},"keywords":{}}],["once"",{"_index":1636,"title":{},"content":{"115":{"position":[[1512,10]]},"660":{"position":[[46,11]]},"1279":{"position":[[361,11]]}},"keywords":{}}],["one"",{"_index":1719,"title":{},"content":{"128":{"position":[[548,9]]}},"keywords":{}}],["one.cr",{"_index":4528,"title":{},"content":{"726":{"position":[[72,10]]}},"keywords":{}}],["onedelta",{"_index":1706,"title":{},"content":{"125":{"position":[[970,8]]}},"keywords":{}}],["oneof",{"_index":1881,"title":{},"content":{"159":{"position":[[780,6]]},"164":{"position":[[1834,6]]},"1465":{"position":[[218,5],[573,5],[630,6]]}},"keywords":{}}],["oner",{"_index":3187,"title":{},"content":{"329":{"position":[[753,7]]}},"keywords":{}}],["ongo",{"_index":242,"title":{},"content":{"7":{"position":[[426,7]]},"209":{"position":[[1040,7],[1119,7]]},"368":{"position":[[194,7]]},"755":{"position":[[194,7]]},"768":{"position":[[194,7]]},"795":{"position":[[192,7]]},"810":{"position":[[192,7]]},"826":{"position":[[192,7]]},"905":{"position":[[197,7]]},"920":{"position":[[197,7]]},"932":{"position":[[197,7]]},"948":{"position":[[197,7]]},"966":{"position":[[197,7]]}},"keywords":{}}],["onlin",{"_index":1600,"title":{},"content":{"112":{"position":[[944,6]]},"635":{"position":[[379,6]]},"867":{"position":[[1355,6],[1385,6]]},"869":{"position":[[437,6],[806,6],[1550,6],[1573,6]]}},"keywords":{}}],["onlyb",{"_index":3505,"title":{},"content":{"390":{"position":[[131,6]]}},"keywords":{}}],["onto",{"_index":1188,"title":{},"content":{"82":{"position":[[3218,4]]}},"keywords":{}}],["op",{"_index":200,"title":{},"content":{"6":{"position":[[73,3]]},"8":{"position":[[74,3]]},"338":{"position":[[269,4]]},"1464":{"position":[[863,2]]},"1467":{"position":[[2910,2]]}},"keywords":{}}],["opaqu",{"_index":1640,"title":{},"content":{"117":{"position":[[254,6]]},"1444":{"position":[[281,6]]}},"keywords":{}}],["open",{"_index":697,"title":{"84":{"position":[[7,4]]}},"content":{"38":{"position":[[147,4],[274,4]]},"81":{"position":[[28,4]]},"84":{"position":[[370,4],[505,4]]},"138":{"position":[[2752,4]]},"142":{"position":[[2837,4]]},"146":{"position":[[1092,4]]},"149":{"position":[[1086,4]]},"152":{"position":[[1076,4]]},"156":{"position":[[29,4]]},"169":{"position":[[1538,5]]},"183":{"position":[[712,6],[828,4],[924,4],[1011,4],[2930,4]]},"189":{"position":[[391,4]]},"191":{"position":[[115,5],[372,5]]},"240":{"position":[[250,4],[259,4]]},"259":{"position":[[175,6],[1864,6]]},"264":{"position":[[82,4]]},"267":{"position":[[1080,6],[1218,4],[1314,4],[1435,4],[1879,6]]},"268":{"position":[[692,4],[1713,4]]},"269":{"position":[[317,4]]},"270":{"position":[[943,4],[1064,4]]},"275":{"position":[[104,4]]},"340":{"position":[[398,5]]},"364":{"position":[[18,4]]},"486":{"position":[[87,4]]},"658":{"position":[[87,4]]},"674":{"position":[[87,4]]},"689":{"position":[[87,4]]},"922":{"position":[[1382,4],[3266,4]]},"1140":{"position":[[4129,4]]},"1292":{"position":[[4152,4]]},"1306":{"position":[[4152,4]]},"1316":{"position":[[4129,4]]},"1329":{"position":[[4152,4]]},"1340":{"position":[[4129,4]]},"1351":{"position":[[4129,4]]},"1379":{"position":[[547,4]]},"1403":{"position":[[547,4]]},"1414":{"position":[[547,4]]},"1431":{"position":[[4152,4]]},"1437":{"position":[[1370,4],[1498,5]]},"1444":{"position":[[474,4]]},"1475":{"position":[[490,4]]},"1479":{"position":[[429,4]]}},"keywords":{}}],["openai",{"_index":5939,"title":{},"content":{"1274":{"position":[[95,6]]},"1277":{"position":[[440,6],[455,6],[580,6],[801,6],[852,6]]}},"keywords":{}}],["openaiapikey",{"_index":5953,"title":{},"content":{"1277":{"position":[[426,13]]},"1278":{"position":[[224,13]]}},"keywords":{}}],["opendatasourc",{"_index":6299,"title":{},"content":{"1379":{"position":[[592,13]]},"1403":{"position":[[592,13]]},"1414":{"position":[[592,13]]}},"keywords":{}}],["opened{runtimecp",{"_index":6438,"title":{},"content":{"1434":{"position":[[404,17]]}},"keywords":{}}],["openemail",{"_index":4453,"title":{},"content":{"697":{"position":[[149,9]]}},"keywords":{}}],["openingsjob",{"_index":4330,"title":{},"content":{"622":{"position":[[252,12]]}},"keywords":{}}],["openqueri",{"_index":6302,"title":{},"content":{"1379":{"position":[[646,9]]},"1403":{"position":[[646,9]]},"1414":{"position":[[646,9]]}},"keywords":{}}],["openrowset",{"_index":6303,"title":{},"content":{"1379":{"position":[[700,10]]},"1403":{"position":[[700,10]]},"1414":{"position":[[700,10]]}},"keywords":{}}],["opensecondstot",{"_index":6694,"title":{},"content":{"1475":{"position":[[436,17]]}},"keywords":{}}],["openssh",{"_index":2453,"title":{},"content":{"221":{"position":[[1302,7]]},"222":{"position":[[547,7]]},"223":{"position":[[513,7]]},"224":{"position":[[566,7]]},"1298":{"position":[[513,7]]},"1322":{"position":[[547,7]]},"1335":{"position":[[547,7]]},"1346":{"position":[[513,7]]}},"keywords":{}}],["openssl",{"_index":6365,"title":{},"content":{"1384":{"position":[[271,7],[293,7],[375,7],[987,7],[1037,7],[1068,7]]}},"keywords":{}}],["openxml",{"_index":6305,"title":{},"content":{"1379":{"position":[[761,7]]},"1403":{"position":[[761,7]]},"1414":{"position":[[761,7]]}},"keywords":{}}],["open{materializationspec",{"_index":6433,"title":{},"content":{"1434":{"position":[[229,25]]}},"keywords":{}}],["oper",{"_index":387,"title":{"760":{"position":[[12,11]]},"773":{"position":[[12,11]]},"800":{"position":[[12,11]]},"815":{"position":[[12,11]]},"831":{"position":[[12,11]]}},"content":{"13":{"position":[[495,10]]},"19":{"position":[[158,8]]},"20":{"position":[[947,10]]},"34":{"position":[[682,10]]},"56":{"position":[[255,11]]},"63":{"position":[[274,10]]},"82":{"position":[[488,12]]},"121":{"position":[[1959,8]]},"197":{"position":[[628,11],[737,11],[1296,10],[1461,9]]},"210":{"position":[[1158,9]]},"221":{"position":[[120,9]]},"239":{"position":[[2141,10]]},"264":{"position":[[558,9]]},"278":{"position":[[699,9]]},"295":{"position":[[710,10]]},"319":{"position":[[1063,10],[1112,10]]},"324":{"position":[[614,11]]},"326":{"position":[[364,11]]},"329":{"position":[[269,7]]},"330":{"position":[[106,9]]},"331":{"position":[[487,11]]},"364":{"position":[[78,7]]},"480":{"position":[[16,8]]},"595":{"position":[[1463,10]]},"760":{"position":[[54,9],[137,9],[265,10]]},"762":{"position":[[364,10]]},"773":{"position":[[54,9],[137,9],[265,10]]},"775":{"position":[[364,10]]},"786":{"position":[[50,10],[232,10]]},"800":{"position":[[54,9],[137,9],[265,10]]},"802":{"position":[[364,10]]},"815":{"position":[[54,9],[137,9],[265,10]]},"817":{"position":[[364,10]]},"831":{"position":[[54,9],[137,9],[265,10]]},"833":{"position":[[364,10]]},"869":{"position":[[1199,9],[1338,7]]},"1020":{"position":[[22,9],[756,9],[1145,9]]},"1179":{"position":[[779,10]]},"1208":{"position":[[115,8]]},"1279":{"position":[[16,8]]},"1358":{"position":[[23,8]]},"1379":{"position":[[808,9]]},"1403":{"position":[[808,9]]},"1414":{"position":[[808,9]]},"1439":{"position":[[421,10]]},"1442":{"position":[[984,11]]},"1477":{"position":[[1603,10],[3921,10]]}},"keywords":{}}],["operation"",{"_index":2293,"title":{},"content":{"210":{"position":[[1103,16]]}},"keywords":{}}],["operationsa",{"_index":3198,"title":{},"content":{"330":{"position":[[389,11]]}},"keywords":{}}],["opinion",{"_index":3115,"title":{},"content":{"320":{"position":[[154,11],[252,11],[1977,12]]},"321":{"position":[[1244,11]]}},"keywords":{}}],["oplog",{"_index":2183,"title":{},"content":{"197":{"position":[[325,6],[1594,6]]},"209":{"position":[[1348,6],[1431,5],[1612,5]]},"785":{"position":[[536,6],[617,5],[825,5]]}},"keywords":{}}],["oplogor",{"_index":4690,"title":{},"content":{"785":{"position":[[778,7]]}},"keywords":{}}],["opportun",{"_index":1512,"title":{},"content":{"106":{"position":[[733,11]]},"163":{"position":[[1150,11]]},"211":{"position":[[368,13]]}},"keywords":{}}],["opportunist",{"_index":1075,"title":{},"content":{"74":{"position":[[150,13]]},"163":{"position":[[134,17]]}},"keywords":{}}],["ops/acmeco",{"_index":3220,"title":{},"content":{"338":{"position":[[495,12]]}},"keywords":{}}],["ops/acmeco/log",{"_index":203,"title":{},"content":{"6":{"position":[[138,16]]},"1472":{"position":[[813,15]]}},"keywords":{}}],["ops/acmeco/stat",{"_index":260,"title":{},"content":{"8":{"position":[[139,17]]}},"keywords":{}}],["opt",{"_index":1813,"title":{},"content":{"140":{"position":[[512,3]]},"208":{"position":[[434,3]]}},"keywords":{}}],["optim",{"_index":539,"title":{"1391":{"position":[[0,10]]}},"content":{"20":{"position":[[602,8]]},"325":{"position":[[529,7]]},"330":{"position":[[426,9]]},"1151":{"position":[[1119,7]]},"1165":{"position":[[11,7]]},"1292":{"position":[[4199,8]]},"1306":{"position":[[4199,8]]},"1329":{"position":[[4199,8]]},"1356":{"position":[[516,8],[665,8]]},"1429":{"position":[[50,9]]}},"keywords":{}}],["optimist",{"_index":1929,"title":{},"content":{"163":{"position":[[978,10]]},"1442":{"position":[[1055,14]]},"1443":{"position":[[707,11]]}},"keywords":{}}],["optimizer_co",{"_index":6132,"title":{},"content":{"1292":{"position":[[4253,13]]},"1306":{"position":[[4253,13]]},"1329":{"position":[[4253,13]]}},"keywords":{}}],["option",{"_index":30,"title":{},"content":{"1":{"position":[[358,9],[528,9],[681,9],[814,9]]},"13":{"position":[[229,6]]},"25":{"position":[[134,6]]},"39":{"position":[[58,8]]},"55":{"position":[[239,7],[313,6],[551,6]]},"56":{"position":[[126,9],[2629,9]]},"61":{"position":[[1046,8]]},"68":{"position":[[920,7],[1232,8]]},"69":{"position":[[132,9],[818,9],[996,9]]},"76":{"position":[[640,9]]},"81":{"position":[[2423,6]]},"94":{"position":[[411,9],[594,9],[779,9],[1483,9],[1814,9],[2180,9],[2819,9]]},"120":{"position":[[142,9],[1366,9],[1732,9],[2560,9],[2838,9]]},"122":{"position":[[1409,9]]},"138":{"position":[[2734,8]]},"140":{"position":[[412,6]]},"142":{"position":[[2819,8]]},"144":{"position":[[442,7]]},"165":{"position":[[2274,6]]},"183":{"position":[[643,6]]},"196":{"position":[[557,11]]},"204":{"position":[[728,7]]},"206":{"position":[[72,10],[654,7]]},"217":{"position":[[1958,6]]},"218":{"position":[[1021,10],[1240,10],[1574,6]]},"221":{"position":[[306,8]]},"228":{"position":[[183,7]]},"239":{"position":[[1670,7]]},"240":{"position":[[2935,7],[4058,8]]},"259":{"position":[[89,7],[852,6],[1770,7],[2316,10],[2407,6]]},"267":{"position":[[1011,6]]},"284":{"position":[[372,7]]},"290":{"position":[[829,10]]},"291":{"position":[[557,8],[1051,10]]},"302":{"position":[[557,8],[1036,10]]},"307":{"position":[[563,6],[3218,6]]},"309":{"position":[[1040,9],[3542,6]]},"319":{"position":[[1038,6]]},"325":{"position":[[626,7]]},"366":{"position":[[240,9]]},"370":{"position":[[653,7],[661,7]]},"375":{"position":[[279,6]]},"377":{"position":[[79,7],[87,7]]},"379":{"position":[[1200,7]]},"385":{"position":[[114,11]]},"387":{"position":[[784,10],[1181,10]]},"411":{"position":[[242,6]]},"417":{"position":[[70,7],[1426,10]]},"419":{"position":[[823,7],[925,7],[1633,7],[1895,11],[2104,7],[2178,11]]},"438":{"position":[[70,7]]},"440":{"position":[[839,7],[941,7]]},"441":{"position":[[242,7],[504,11],[713,7],[787,11]]},"479":{"position":[[218,8]]},"487":{"position":[[106,6]]},"489":{"position":[[19,10]]},"491":{"position":[[105,8]]},"499":{"position":[[442,8]]},"502":{"position":[[530,7],[1074,10]]},"504":{"position":[[755,7],[951,7],[1262,7],[1524,11],[1733,7],[1807,11]]},"517":{"position":[[170,8],[1629,6],[2790,6]]},"534":{"position":[[255,10],[871,10]]},"545":{"position":[[70,7]]},"547":{"position":[[824,7],[926,7],[1635,7],[1897,11],[2106,7],[2180,11]]},"556":{"position":[[282,10],[1042,10],[1689,10],[1849,10]]},"571":{"position":[[548,8]]},"573":{"position":[[614,10],[1068,10]]},"581":{"position":[[225,8]]},"584":{"position":[[536,10],[992,10]]},"593":{"position":[[173,8]]},"595":{"position":[[130,8]]},"611":{"position":[[672,10]]},"617":{"position":[[470,8]]},"634":{"position":[[434,8]]},"639":{"position":[[753,7],[949,7],[1260,7],[1522,11],[1731,7],[1805,11]]},"640":{"position":[[142,8]]},"660":{"position":[[673,6]]},"662":{"position":[[19,10]]},"664":{"position":[[126,8]]},"675":{"position":[[91,7],[335,11]]},"677":{"position":[[19,10]]},"679":{"position":[[105,8]]},"692":{"position":[[19,10]]},"694":{"position":[[105,8]]},"720":{"position":[[265,10]]},"739":{"position":[[1,10]]},"747":{"position":[[782,6]]},"764":{"position":[[1170,6]]},"777":{"position":[[1170,6]]},"782":{"position":[[108,10],[346,8]]},"804":{"position":[[1168,6]]},"819":{"position":[[1168,6]]},"835":{"position":[[1168,6]]},"840":{"position":[[655,6]]},"842":{"position":[[387,7],[1266,8]]},"849":{"position":[[1130,6]]},"870":{"position":[[320,6]]},"903":{"position":[[266,9]]},"907":{"position":[[436,7],[444,7]]},"915":{"position":[[266,9]]},"923":{"position":[[436,7],[444,7]]},"930":{"position":[[266,9]]},"934":{"position":[[436,7],[444,7]]},"947":{"position":[[1111,11]]},"950":{"position":[[436,7],[444,7]]},"963":{"position":[[420,9]]},"968":{"position":[[436,7],[444,7]]},"1009":{"position":[[1038,10]]},"1020":{"position":[[706,6]]},"1021":{"position":[[1092,7],[1585,10]]},"1023":{"position":[[804,7],[906,7],[1616,7],[1878,11],[2087,7],[2161,11]]},"1032":{"position":[[229,10],[1997,7]]},"1034":{"position":[[663,7],[671,7]]},"1045":{"position":[[421,7],[429,7]]},"1053":{"position":[[421,7],[429,7]]},"1061":{"position":[[421,7],[429,7]]},"1076":{"position":[[395,10]]},"1085":{"position":[[907,6]]},"1138":{"position":[[1641,11]]},"1140":{"position":[[4166,6]]},"1144":{"position":[[498,8]]},"1151":{"position":[[1600,11]]},"1154":{"position":[[399,7]]},"1162":{"position":[[346,8],[926,11]]},"1170":{"position":[[498,8]]},"1199":{"position":[[77,6]]},"1201":{"position":[[598,9],[701,9]]},"1213":{"position":[[353,8]]},"1220":{"position":[[353,8]]},"1230":{"position":[[1122,8]]},"1232":{"position":[[134,8]]},"1245":{"position":[[422,8]]},"1253":{"position":[[108,10]]},"1260":{"position":[[1124,11]]},"1277":{"position":[[700,7],[821,8]]},"1285":{"position":[[767,7],[775,7],[999,8],[1137,8],[1257,8]]},"1286":{"position":[[2028,6],[2323,7],[2386,11]]},"1292":{"position":[[4316,6],[4363,8],[4420,10],[4484,7]]},"1300":{"position":[[767,7],[775,7],[999,8],[1137,8],[1257,8]]},"1301":{"position":[[1864,6],[2159,7],[2222,11]]},"1306":{"position":[[4316,6],[4363,8],[4420,10],[4484,7]]},"1313":{"position":[[621,7],[629,7],[1185,11]]},"1316":{"position":[[4166,6]]},"1324":{"position":[[767,7],[775,7],[999,8],[1137,8],[1257,8]]},"1325":{"position":[[2028,6],[2323,7],[2386,11]]},"1329":{"position":[[4316,6],[4363,8],[4420,10],[4484,7]]},"1337":{"position":[[621,7],[629,7],[1185,11]]},"1340":{"position":[[4166,6]]},"1348":{"position":[[621,7],[629,7],[1185,11]]},"1351":{"position":[[4166,6]]},"1354":{"position":[[134,9],[218,9]]},"1356":{"position":[[347,7],[445,8]]},"1359":{"position":[[440,6]]},"1379":{"position":[[856,6]]},"1403":{"position":[[856,6]]},"1414":{"position":[[856,6]]},"1420":{"position":[[75,8]]},"1427":{"position":[[945,11]]},"1429":{"position":[[216,8]]},"1431":{"position":[[4189,6]]},"1452":{"position":[[186,7]]},"1471":{"position":[[1082,7]]},"1479":{"position":[[324,8]]},"1480":{"position":[[1072,9],[1438,9]]}},"keywords":{}}],["option(evolveincompatiblecollect",{"_index":371,"title":{},"content":{"12":{"position":[[498,38]]}},"keywords":{}}],["option_titl",{"_index":4017,"title":{},"content":{"527":{"position":[[191,13]]},"535":{"position":[[191,13]]}},"keywords":{}}],["optionalrol",{"_index":2932,"title":{},"content":{"291":{"position":[[543,13]]},"302":{"position":[[543,13]]}},"keywords":{}}],["optionsa",{"_index":4730,"title":{},"content":{"839":{"position":[[66,8]]},"848":{"position":[[66,8]]}},"keywords":{}}],["ora",{"_index":4898,"title":{},"content":{"871":{"position":[[57,3]]}},"keywords":{}}],["oracl",{"_index":4728,"title":{"1271":{"position":[[18,6]]}},"content":{"839":{"position":[[1,6]]},"840":{"position":[[53,6]]},"848":{"position":[[1,6]]},"862":{"position":[[1,6],[64,6]]},"865":{"position":[[9,6]]},"869":{"position":[[1,6],[1289,6]]},"874":{"position":[[1,6],[64,6]]},"877":{"position":[[9,6]]},"879":{"position":[[1629,6]]},"880":{"position":[[89,6]]},"1268":{"position":[[73,6]]},"1271":{"position":[[72,6]]}},"keywords":{}}],["oracle:dev",{"_index":4877,"title":{},"content":{"868":{"position":[[89,10]]}},"keywords":{}}],["oracledb",{"_index":4844,"title":{"861":{"position":[[0,8]]},"873":{"position":[[0,8]]}},"content":{"863":{"position":[[38,8]]},"866":{"position":[[250,8]]},"875":{"position":[[38,8]]},"878":{"position":[[250,8]]}},"keywords":{}}],["orchestr",{"_index":3150,"title":{},"content":{"322":{"position":[[345,13],[965,13]]},"326":{"position":[[1025,11]]}},"keywords":{}}],["orcl",{"_index":4863,"title":{},"content":{"867":{"position":[[369,5]]},"868":{"position":[[232,4]]}},"keywords":{}}],["order",{"_index":71,"title":{"109":{"position":[[11,6]]},"1020":{"position":[[15,6]]},"1234":{"position":[[8,9]]}},"content":{"2":{"position":[[151,5]]},"17":{"position":[[432,5]]},"54":{"position":[[625,5]]},"84":{"position":[[1271,5]]},"107":{"position":[[470,5],[654,5],[3071,5],[3125,5]]},"109":{"position":[[249,5],[470,5],[563,5],[667,6],[723,5]]},"110":{"position":[[410,8]]},"120":{"position":[[2327,5]]},"123":{"position":[[418,7]]},"129":{"position":[[178,7],[210,6]]},"137":{"position":[[216,5],[246,5]]},"161":{"position":[[338,5]]},"163":{"position":[[772,5]]},"183":{"position":[[1483,5]]},"203":{"position":[[122,5]]},"234":{"position":[[528,5]]},"237":{"position":[[2909,5]]},"253":{"position":[[4,5]]},"279":{"position":[[477,5],[769,6],[851,5]]},"280":{"position":[[717,5]]},"294":{"position":[[141,6]]},"295":{"position":[[93,6],[431,6],[752,7],[768,5],[849,7],[915,6],[1433,5]]},"296":{"position":[[373,6],[516,7],[1344,6],[1487,7],[1916,6],[2341,7],[2438,6],[2501,6],[3274,5],[4571,6],[4661,8],[6256,7],[7693,6],[7813,8],[7843,5],[7909,5],[7946,6],[8048,6]]},"313":{"position":[[4,5]]},"331":{"position":[[397,7]]},"417":{"position":[[369,6],[419,8],[454,9],[479,7]]},"438":{"position":[[369,6],[419,8],[454,9],[479,7]]},"480":{"position":[[379,7],[1068,5],[1263,7],[1360,8]]},"502":{"position":[[829,6],[879,8],[914,9],[939,7]]},"522":{"position":[[462,5]]},"530":{"position":[[462,5]]},"545":{"position":[[369,6],[419,8],[454,9],[479,7]]},"557":{"position":[[545,5]]},"595":{"position":[[1040,6]]},"660":{"position":[[184,5]]},"724":{"position":[[218,5]]},"842":{"position":[[2298,7]]},"922":{"position":[[171,5]]},"1006":{"position":[[105,5],[294,5]]},"1008":{"position":[[346,5]]},"1020":{"position":[[930,8],[1492,5],[1805,8],[1920,8],[2108,9]]},"1021":{"position":[[1406,6],[1465,8],[1500,9]]},"1140":{"position":[[64,5],[412,5]]},"1156":{"position":[[274,5]]},"1186":{"position":[[287,5]]},"1192":{"position":[[64,5]]},"1209":{"position":[[244,5]]},"1234":{"position":[[38,8],[53,8],[93,8],[223,6]]},"1292":{"position":[[59,5],[4585,5]]},"1306":{"position":[[59,5],[4585,5]]},"1316":{"position":[[64,5],[412,5]]},"1329":{"position":[[59,5],[4585,5]]},"1340":{"position":[[64,5],[412,5]]},"1351":{"position":[[64,5],[412,5]]},"1370":{"position":[[60,5],[639,5]]},"1379":{"position":[[63,5],[951,5]]},"1384":{"position":[[4,5]]},"1391":{"position":[[789,6]]},"1394":{"position":[[63,5],[1053,5]]},"1403":{"position":[[63,5],[951,5]]},"1414":{"position":[[63,5],[951,5]]},"1423":{"position":[[70,5]]},"1431":{"position":[[87,5],[435,5]]},"1439":{"position":[[1680,5]]},"1442":{"position":[[359,8]]},"1452":{"position":[[4543,6]]},"1455":{"position":[[317,5]]},"1459":{"position":[[114,6],[342,8],[399,8],[501,8],[807,6],[1135,5],[1712,7]]},"1467":{"position":[[1841,7],[2020,9]]},"1476":{"position":[[883,8]]},"1477":{"position":[[2637,7],[2919,8]]}},"keywords":{}}],["order/custom",{"_index":1690,"title":{},"content":{"123":{"position":[[309,15]]}},"keywords":{}}],["order_d",{"_index":2955,"title":{},"content":{"295":{"position":[[474,10]]},"296":{"position":[[4817,12]]}},"keywords":{}}],["order_id",{"_index":2954,"title":{},"content":{"295":{"position":[[453,8]]},"296":{"position":[[599,9],[1570,9],[2389,8],[4838,10]]}},"keywords":{}}],["orders.schema.yaml",{"_index":12,"title":{},"content":{"1":{"position":[[156,18]]},"123":{"position":[[257,18]]},"296":{"position":[[549,18],[1520,18],[2587,19],[4027,18]]}},"keywords":{}}],["orders/sheet1_v2",{"_index":2996,"title":{},"content":{"296":{"position":[[800,16],[2801,16]]}},"keywords":{}}],["ordin",{"_index":6155,"title":{},"content":{"1292":{"position":[[4634,10]]},"1306":{"position":[[4634,10]]},"1329":{"position":[[4634,10]]},"1379":{"position":[[992,10]]},"1403":{"position":[[992,10]]},"1414":{"position":[[992,10]]}},"keywords":{}}],["ordinair",{"_index":2707,"title":{},"content":{"253":{"position":[[1487,9],[2431,9],[2505,9]]},"313":{"position":[[1487,9],[2431,9],[2505,9]]}},"keywords":{}}],["ordinari",{"_index":5024,"title":{},"content":{"912":{"position":[[1074,8]]}},"keywords":{}}],["org",{"_index":4263,"title":{},"content":{"594":{"position":[[1408,4]]}},"keywords":{}}],["org/acmeco",{"_index":3218,"title":{},"content":{"337":{"position":[[475,10],[547,10]]},"341":{"position":[[374,10],[516,10]]}},"keywords":{}}],["organ",{"_index":160,"title":{"161":{"position":[[0,13]]},"1460":{"position":[[0,10]]}},"content":{"4":{"position":[[251,9]]},"6":{"position":[[6,12],[93,12],[392,12]]},"8":{"position":[[6,12],[94,12],[197,12]]},"27":{"position":[[258,8],[530,13]]},"34":{"position":[[876,10]]},"77":{"position":[[95,9]]},"83":{"position":[[213,13]]},"136":{"position":[[368,13]]},"149":{"position":[[1275,9]]},"154":{"position":[[1442,12]]},"161":{"position":[[347,8],[520,8]]},"190":{"position":[[484,9],[594,13],[1023,9]]},"196":{"position":[[430,13]]},"233":{"position":[[437,13]]},"241":{"position":[[562,13]]},"254":{"position":[[41,8]]},"267":{"position":[[355,12]]},"274":{"position":[[1699,9]]},"296":{"position":[[41,8]]},"301":{"position":[[847,8]]},"313":{"position":[[3457,13]]},"314":{"position":[[41,8]]},"338":{"position":[[42,12]]},"339":{"position":[[260,12]]},"522":{"position":[[380,13],[413,12],[525,13]]},"523":{"position":[[93,13]]},"529":{"position":[[64,13]]},"530":{"position":[[380,13],[413,12],[525,13]]},"531":{"position":[[93,13],[206,12],[432,12]]},"532":{"position":[[93,13]]},"534":{"position":[[1285,12]]},"540":{"position":[[74,12],[87,12]]},"541":{"position":[[109,13]]},"590":{"position":[[134,9],[177,9]]},"723":{"position":[[158,12]]},"728":{"position":[[66,12],[149,12]]},"729":{"position":[[1,12]]},"779":{"position":[[131,9]]},"987":{"position":[[140,12]]},"995":{"position":[[103,13]]},"997":{"position":[[130,13],[144,12],[173,12]]},"998":{"position":[[136,13]]},"1002":{"position":[[140,12]]},"1004":{"position":[[214,13]]},"1134":{"position":[[1080,13]]},"1178":{"position":[[467,12]]},"1250":{"position":[[131,9]]},"1277":{"position":[[808,12],[830,12],[904,13],[935,12]]},"1292":{"position":[[4693,12]]},"1306":{"position":[[4693,12]]},"1329":{"position":[[4693,12]]},"1394":{"position":[[1075,12]]},"1456":{"position":[[88,12]]},"1461":{"position":[[108,10],[590,10],[676,14],[765,10],[850,8]]},"1462":{"position":[[266,14],[710,14]]},"1475":{"position":[[663,9],[738,9]]}},"keywords":{}}],["organiz",{"_index":1763,"title":{},"content":{"136":{"position":[[270,14],[325,14]]},"154":{"position":[[1507,14]]}},"keywords":{}}],["organization>",{"_index":5155,"title":{},"content":{"998":{"position":[[159,16]]}},"keywords":{}}],["organization'",{"_index":903,"title":{},"content":{"60":{"position":[[418,14]]},"83":{"position":[[155,14]]},"154":{"position":[[60,14]]},"221":{"position":[[221,14],[1831,14]]},"340":{"position":[[47,14]]},"532":{"position":[[244,14]]},"723":{"position":[[284,14],[373,14]]},"728":{"position":[[94,14]]}},"keywords":{}}],["organization.u",{"_index":5867,"title":{},"content":{"1207":{"position":[[123,15]]}},"keywords":{}}],["organization_membership",{"_index":5482,"title":{},"content":{"1134":{"position":[[1194,24]]}},"keywords":{}}],["organizations/repositori",{"_index":4046,"title":{},"content":{"534":{"position":[[1168,27]]}},"keywords":{}}],["orgnam",{"_index":2161,"title":{},"content":{"192":{"position":[[774,7]]},"288":{"position":[[1006,7]]},"299":{"position":[[921,7]]},"1034":{"position":[[117,7]]},"1382":{"position":[[457,7]]},"1386":{"position":[[138,7]]},"1387":{"position":[[132,7],[686,7]]}},"keywords":{}}],["orgs/<orgid>/runs/<runid>/runresults/<runresultid>/queryresult",{"_index":4255,"title":{},"content":{"594":{"position":[[959,85]]}},"keywords":{}}],["orgs/*/run",{"_index":4261,"title":{},"content":{"594":{"position":[[1330,11]]}},"keywords":{}}],["orgs/*/runs/*/runresult",{"_index":4259,"title":{},"content":{"594":{"position":[[1228,24]]}},"keywords":{}}],["orgs/*/runs/*/runresults/*/queryresult",{"_index":4256,"title":{},"content":{"594":{"position":[[1098,39]]}},"keywords":{}}],["orgto",{"_index":3227,"title":{},"content":{"341":{"position":[[470,5]]}},"keywords":{}}],["orient",{"_index":1671,"title":{},"content":{"122":{"position":[[36,8],[120,8]]},"320":{"position":[[414,8]]}},"keywords":{}}],["origin",{"_index":444,"title":{},"content":{"14":{"position":[[1122,8]]},"109":{"position":[[290,10]]},"192":{"position":[[1879,8]]},"208":{"position":[[1987,8]]},"240":{"position":[[4546,8]]},"259":{"position":[[1592,8],[3150,8]]},"313":{"position":[[3585,9]]},"590":{"position":[[1087,8]]},"1183":{"position":[[1106,8],[1305,8]]}},"keywords":{}}],["ortimestamp_tz",{"_index":6401,"title":{},"content":{"1393":{"position":[[64,14]]}},"keywords":{}}],["os",{"_index":2472,"title":{},"content":{"223":{"position":[[855,2]]},"1298":{"position":[[855,2]]},"1346":{"position":[[855,2]]}},"keywords":{}}],["other",{"_index":608,"title":{},"content":{"26":{"position":[[292,7]]},"38":{"position":[[217,6]]},"69":{"position":[[900,6]]},"84":{"position":[[604,7]]},"100":{"position":[[1031,7]]},"113":{"position":[[230,6]]},"120":{"position":[[2427,7]]},"122":{"position":[[103,6]]},"125":{"position":[[1217,6],[1257,6]]},"792":{"position":[[74,6]]},"918":{"position":[[74,6]]},"1164":{"position":[[528,7]]},"1172":{"position":[[921,7]]},"1222":{"position":[[921,7]]},"1292":{"position":[[4747,6]]},"1306":{"position":[[4747,6]]},"1317":{"position":[[909,6]]},"1329":{"position":[[4747,6]]},"1341":{"position":[[909,6]]},"1352":{"position":[[909,6]]},"1370":{"position":[[654,6]]},"1432":{"position":[[937,6]]},"1459":{"position":[[1033,7]]},"1464":{"position":[[290,6]]},"1466":{"position":[[271,6]]},"1467":{"position":[[614,6]]}},"keywords":{}}],["other'",{"_index":6624,"title":{},"content":{"1461":{"position":[[4454,7]]}},"keywords":{}}],["other.flow.yaml",{"_index":1324,"title":{},"content":{"92":{"position":[[525,15]]}},"keywords":{}}],["other_th",{"_index":1440,"title":{},"content":{"100":{"position":[[535,11]]}},"keywords":{}}],["otherfield",{"_index":1682,"title":{},"content":{"122":{"position":[[1750,11]]}},"keywords":{}}],["othertransf",{"_index":2844,"title":{},"content":{"279":{"position":[[150,14]]}},"keywords":{}}],["otherwis",{"_index":323,"title":{},"content":{"11":{"position":[[1070,10]]},"74":{"position":[[830,9]]},"92":{"position":[[892,9]]},"125":{"position":[[1480,9]]},"158":{"position":[[903,9]]},"164":{"position":[[1946,10]]},"173":{"position":[[1094,9]]},"230":{"position":[[662,10]]},"310":{"position":[[378,9]]},"329":{"position":[[1129,9]]},"379":{"position":[[943,9]]},"479":{"position":[[733,9]]},"1067":{"position":[[187,10]]},"1192":{"position":[[383,10]]},"1230":{"position":[[644,10]]},"1394":{"position":[[380,10]]},"1423":{"position":[[390,10]]},"1442":{"position":[[801,9]]},"1452":{"position":[[504,9],[2949,9]]},"1472":{"position":[[468,10]]}},"keywords":{}}],["ourmaterializationendpoint",{"_index":6618,"title":{},"content":{"1461":{"position":[[3207,26],[3595,27]]}},"keywords":{}}],["ourselv",{"_index":2625,"title":{},"content":{"242":{"position":[[53,10]]},"280":{"position":[[1911,9]]}},"keywords":{}}],["out",{"_index":408,"title":{"182":{"position":[[6,3]]}},"content":{"13":{"position":[[1237,3]]},"104":{"position":[[255,3]]},"107":{"position":[[239,3]]},"112":{"position":[[912,4]]},"139":{"position":[[155,3]]},"141":{"position":[[208,3]]},"143":{"position":[[179,3]]},"144":{"position":[[494,3]]},"162":{"position":[[1924,3]]},"177":{"position":[[364,3]]},"183":{"position":[[729,3],[3268,3]]},"184":{"position":[[355,3]]},"190":{"position":[[811,3]]},"192":{"position":[[449,3]]},"210":{"position":[[447,3],[2104,3],[3917,3]]},"212":{"position":[[143,3]]},"213":{"position":[[512,3]]},"217":{"position":[[912,3]]},"218":{"position":[[459,3]]},"237":{"position":[[1006,3],[2847,3]]},"239":{"position":[[63,4],[2743,3]]},"240":{"position":[[2580,3],[4363,3]]},"243":{"position":[[135,3]]},"253":{"position":[[206,3]]},"254":{"position":[[2054,3],[3920,3]]},"266":{"position":[[459,3]]},"267":{"position":[[1097,3]]},"268":{"position":[[1099,3]]},"269":{"position":[[670,3]]},"270":{"position":[[1612,3]]},"277":{"position":[[125,4],[269,4],[418,3]]},"281":{"position":[[1125,3]]},"290":{"position":[[725,3]]},"291":{"position":[[387,3]]},"295":{"position":[[178,3],[1635,3]]},"296":{"position":[[7626,3]]},"301":{"position":[[658,3]]},"302":{"position":[[387,3]]},"306":{"position":[[716,3]]},"309":{"position":[[1236,3]]},"313":{"position":[[206,3]]},"320":{"position":[[598,3]]},"321":{"position":[[1389,3],[1898,3]]},"329":{"position":[[439,4]]},"349":{"position":[[249,3]]},"436":{"position":[[376,3]]},"485":{"position":[[294,3]]},"486":{"position":[[166,3]]},"574":{"position":[[182,3]]},"585":{"position":[[172,3]]},"603":{"position":[[181,3]]},"657":{"position":[[294,3]]},"658":{"position":[[166,3]]},"673":{"position":[[294,3]]},"674":{"position":[[166,3]]},"688":{"position":[[294,3]]},"689":{"position":[[166,3]]},"760":{"position":[[870,3]]},"773":{"position":[[870,3]]},"800":{"position":[[870,3]]},"815":{"position":[[870,3]]},"831":{"position":[[870,3]]},"1042":{"position":[[1225,3]]},"1140":{"position":[[461,3]]},"1292":{"position":[[4794,3]]},"1306":{"position":[[4794,3]]},"1316":{"position":[[461,3]]},"1329":{"position":[[4794,3]]},"1340":{"position":[[461,3]]},"1351":{"position":[[461,3]]},"1379":{"position":[[1039,3]]},"1384":{"position":[[327,3],[411,3]]},"1403":{"position":[[1039,3]]},"1408":{"position":[[498,3]]},"1414":{"position":[[1039,3]]},"1431":{"position":[[484,3]]},"1456":{"position":[[142,3]]}},"keywords":{}}],["out.a",{"_index":2878,"title":{},"content":{"281":{"position":[[757,5]]}},"keywords":{}}],["outbound",{"_index":3670,"title":{},"content":{"430":{"position":[[268,8]]},"767":{"position":[[341,8]]},"792":{"position":[[654,8]]},"824":{"position":[[446,8]]},"904":{"position":[[445,8]]},"918":{"position":[[654,8]]},"1051":{"position":[[445,8]]},"1289":{"position":[[528,8]]},"1321":{"position":[[308,8]]},"1334":{"position":[[396,8]]},"1373":{"position":[[427,8]]},"1374":{"position":[[427,8]]}},"keywords":{}}],["outcom",{"_index":2862,"title":{},"content":{"280":{"position":[[321,7],[705,8],[761,8],[1162,9],[1210,7],[1282,9],[1320,8],[1963,8],[1993,8],[2224,8],[2246,8],[2265,8]]},"281":{"position":[[1051,8],[1081,8]]},"331":{"position":[[351,8]]},"1459":{"position":[[472,8]]}},"keywords":{}}],["outcomes.flow.yamldebitsender.sqloutcom",{"_index":2869,"title":{},"content":{"280":{"position":[[1074,41]]}},"keywords":{}}],["outdat",{"_index":6515,"title":{},"content":{"1447":{"position":[[491,8]]}},"keywords":{}}],["outer",{"_index":2968,"title":{},"content":{"295":{"position":[[988,5]]},"296":{"position":[[717,5],[2718,5],[3039,5],[4004,5],[5161,5]]},"1140":{"position":[[496,5]]},"1209":{"position":[[260,5]]},"1292":{"position":[[4840,5]]},"1306":{"position":[[4840,5]]},"1316":{"position":[[496,5]]},"1329":{"position":[[4840,5]]},"1340":{"position":[[496,5]]},"1351":{"position":[[496,5]]},"1370":{"position":[[672,5]]},"1379":{"position":[[1087,5]]},"1403":{"position":[[1087,5]]},"1414":{"position":[[1087,5]]},"1431":{"position":[[519,5]]}},"keywords":{}}],["outfil",{"_index":6168,"title":{},"content":{"1292":{"position":[[4891,7]]},"1306":{"position":[[4891,7]]},"1329":{"position":[[4891,7]]}},"keywords":{}}],["outform",{"_index":6386,"title":{},"content":{"1384":{"position":[[1023,7]]}},"keywords":{}}],["output",{"_index":266,"title":{},"content":{"8":{"position":[[477,8]]},"60":{"position":[[758,6]]},"61":{"position":[[585,6]]},"68":{"position":[[1762,6]]},"96":{"position":[[532,6]]},"98":{"position":[[27,6],[1058,6]]},"102":{"position":[[426,6]]},"112":{"position":[[148,6]]},"183":{"position":[[4052,7]]},"217":{"position":[[1208,6],[1735,6],[2071,6]]},"218":{"position":[[1942,6]]},"221":{"position":[[354,7]]},"228":{"position":[[235,6]]},"230":{"position":[[495,6]]},"254":{"position":[[1231,7]]},"255":{"position":[[817,6]]},"259":{"position":[[528,6],[1057,6]]},"263":{"position":[[264,7]]},"268":{"position":[[1845,6]]},"269":{"position":[[1302,6]]},"270":{"position":[[1917,6]]},"277":{"position":[[1108,6]]},"280":{"position":[[2195,6]]},"284":{"position":[[652,6]]},"291":{"position":[[1149,6]]},"302":{"position":[[1112,6]]},"314":{"position":[[952,7]]},"316":{"position":[[1142,6]]},"323":{"position":[[637,6]]},"480":{"position":[[83,10]]},"517":{"position":[[378,6],[2506,6]]},"759":{"position":[[145,10]]},"772":{"position":[[156,10]]},"799":{"position":[[143,10]]},"814":{"position":[[143,10]]},"830":{"position":[[143,10]]},"1036":{"position":[[936,6]]},"1140":{"position":[[532,6]]},"1182":{"position":[[396,7]]},"1191":{"position":[[398,7]]},"1243":{"position":[[703,6],[814,6],[949,6]]},"1262":{"position":[[398,7]]},"1316":{"position":[[532,6]]},"1340":{"position":[[532,6]]},"1351":{"position":[[532,6]]},"1356":{"position":[[530,6]]},"1358":{"position":[[552,6]]},"1379":{"position":[[1134,6]]},"1389":{"position":[[397,7]]},"1403":{"position":[[1134,6]]},"1414":{"position":[[1134,6]]},"1431":{"position":[[555,6]]},"1471":{"position":[[717,7]]},"1473":{"position":[[81,7]]},"1475":{"position":[[73,8],[1167,6],[1709,7],[1853,7]]}},"keywords":{}}],["outsid",{"_index":662,"title":{},"content":{"32":{"position":[[220,7],[338,7]]},"137":{"position":[[459,7]]},"189":{"position":[[1508,7],[1704,7]]},"322":{"position":[[957,7]]},"337":{"position":[[467,7],[539,7]]},"341":{"position":[[462,7],[508,7]]},"1462":{"position":[[475,7]]},"1470":{"position":[[369,7]]}},"keywords":{}}],["outstand",{"_index":6540,"title":{},"content":{"1452":{"position":[[1711,11]]}},"keywords":{}}],["over",{"_index":181,"title":{},"content":{"4":{"position":[[600,4]]},"17":{"position":[[991,4]]},"41":{"position":[[430,4]]},"42":{"position":[[552,4]]},"64":{"position":[[388,4]]},"74":{"position":[[181,4]]},"92":{"position":[[356,4]]},"105":{"position":[[1318,4]]},"106":{"position":[[379,4],[558,4]]},"107":{"position":[[1389,4]]},"126":{"position":[[146,4]]},"138":{"position":[[2519,4],[2655,4]]},"141":{"position":[[2245,4]]},"142":{"position":[[2597,4],[2732,4]]},"146":{"position":[[569,4]]},"149":{"position":[[542,4]]},"152":{"position":[[545,4]]},"158":{"position":[[133,4]]},"164":{"position":[[1017,4]]},"196":{"position":[[639,4]]},"202":{"position":[[344,4]]},"204":{"position":[[912,4]]},"210":{"position":[[12,4],[1718,4]]},"217":{"position":[[1341,4]]},"218":{"position":[[1933,4]]},"233":{"position":[[824,4]]},"239":{"position":[[29,5],[73,4]]},"240":{"position":[[2467,4],[4623,4]]},"254":{"position":[[980,4]]},"255":{"position":[[1210,4]]},"260":{"position":[[29,4]]},"271":{"position":[[448,4]]},"281":{"position":[[2858,4]]},"295":{"position":[[1049,4]]},"296":{"position":[[6886,4],[7201,4],[7794,4]]},"307":{"position":[[3105,4]]},"314":{"position":[[701,4]]},"316":{"position":[[1535,4]]},"320":{"position":[[1545,4]]},"337":{"position":[[82,4]]},"374":{"position":[[17,4]]},"414":{"position":[[809,4]]},"485":{"position":[[342,5]]},"657":{"position":[[342,5]]},"673":{"position":[[342,5]]},"688":{"position":[[342,5]]},"757":{"position":[[675,4]]},"770":{"position":[[675,4]]},"797":{"position":[[675,4]]},"812":{"position":[[675,4]]},"821":{"position":[[816,4],[825,5]]},"828":{"position":[[675,4]]},"849":{"position":[[1443,4]]},"869":{"position":[[1261,4]]},"912":{"position":[[832,4],[841,5]]},"1020":{"position":[[2031,4]]},"1140":{"position":[[563,4]]},"1146":{"position":[[673,4]]},"1154":{"position":[[127,4],[284,4],[347,4],[437,4]]},"1173":{"position":[[685,4]]},"1209":{"position":[[278,4]]},"1215":{"position":[[673,4]]},"1223":{"position":[[685,4]]},"1285":{"position":[[687,4]]},"1292":{"position":[[4939,4]]},"1300":{"position":[[687,4]]},"1306":{"position":[[4939,4]]},"1316":{"position":[[563,4]]},"1324":{"position":[[687,4]]},"1329":{"position":[[4939,4]]},"1340":{"position":[[563,4]]},"1351":{"position":[[563,4]]},"1370":{"position":[[685,4]]},"1379":{"position":[[1173,4]]},"1391":{"position":[[712,4]]},"1403":{"position":[[1173,4]]},"1414":{"position":[[1173,4]]},"1431":{"position":[[586,4]]},"1434":{"position":[[427,4],[1089,4],[1701,4],[2183,4]]},"1440":{"position":[[1144,4],[1343,4]]},"1465":{"position":[[605,4]]},"1476":{"position":[[861,4],[892,4]]}},"keywords":{}}],["overal",{"_index":118,"title":{},"content":{"3":{"position":[[376,7]]},"49":{"position":[[280,7]]},"101":{"position":[[537,7]]},"121":{"position":[[1673,7]]},"163":{"position":[[535,7]]},"239":{"position":[[2594,8]]},"922":{"position":[[3202,7]]}},"keywords":{}}],["overdraft",{"_index":2860,"title":{},"content":{"280":{"position":[[194,10]]}},"keywords":{}}],["overlap",{"_index":3102,"title":{},"content":{"319":{"position":[[292,7]]},"325":{"position":[[222,7]]},"373":{"position":[[971,7]]},"379":{"position":[[548,7]]},"1140":{"position":[[589,8]]},"1316":{"position":[[589,8]]},"1340":{"position":[[589,8]]},"1351":{"position":[[589,8]]},"1379":{"position":[[1210,8]]},"1403":{"position":[[1210,8]]},"1414":{"position":[[1210,8]]},"1431":{"position":[[612,8]]}},"keywords":{}}],["overlay",{"_index":5534,"title":{},"content":{"1140":{"position":[[630,7]]},"1316":{"position":[[630,7]]},"1340":{"position":[[630,7]]},"1351":{"position":[[630,7]]},"1379":{"position":[[1263,7]]},"1403":{"position":[[1263,7]]},"1414":{"position":[[1263,7]]},"1431":{"position":[[653,7]]}},"keywords":{}}],["overrid",{"_index":3850,"title":{},"content":{"482":{"position":[[831,8]]},"907":{"position":[[1311,9]]},"923":{"position":[[1311,9]]},"934":{"position":[[1311,9]]},"950":{"position":[[1311,9]]},"968":{"position":[[1311,9]]},"1138":{"position":[[1653,9]]},"1285":{"position":[[884,9]]},"1300":{"position":[[884,9]]},"1313":{"position":[[738,9],[1197,9]]},"1324":{"position":[[884,9]]},"1337":{"position":[[738,9],[1197,9]]},"1348":{"position":[[738,9],[1197,9]]},"1427":{"position":[[957,9]]}},"keywords":{}}],["overridden",{"_index":3848,"title":{},"content":{"482":{"position":[[419,10]]},"750":{"position":[[706,10]]},"766":{"position":[[706,10]]},"789":{"position":[[694,10]]},"807":{"position":[[694,10]]},"823":{"position":[[694,10]]},"1031":{"position":[[342,10]]},"1138":{"position":[[602,10]]},"1151":{"position":[[587,10]]},"1162":{"position":[[515,10]]},"1179":{"position":[[414,10]]},"1260":{"position":[[301,10]]},"1313":{"position":[[412,10]]},"1337":{"position":[[412,10]]},"1348":{"position":[[412,10]]},"1386":{"position":[[385,10]]},"1427":{"position":[[353,10]]}},"keywords":{}}],["overs",{"_index":5010,"title":{},"content":{"909":{"position":[[198,9]]},"925":{"position":[[198,9]]},"936":{"position":[[198,9]]},"952":{"position":[[198,9]]},"970":{"position":[[198,9]]}},"keywords":{}}],["overview",{"_index":1831,"title":{"146":{"position":[[0,8]]},"149":{"position":[[0,8]]},"152":{"position":[[0,8]]},"245":{"position":[[0,9]]},"974":{"position":[[0,9]]}},"content":{"204":{"position":[[684,8]]},"210":{"position":[[1639,10]]},"436":{"position":[[836,8]]},"931":{"position":[[677,8]]}},"keywords":{}}],["overviewcopi",{"_index":3696,"title":{},"content":{"436":{"position":[[212,12]]}},"keywords":{}}],["overviewtraff",{"_index":4144,"title":{},"content":{"568":{"position":[[84,15]]}},"keywords":{}}],["overviewweekli",{"_index":4217,"title":{},"content":{"580":{"position":[[132,14]]}},"keywords":{}}],["overwhelm",{"_index":6575,"title":{},"content":{"1453":{"position":[[901,12]]}},"keywords":{}}],["overwrit",{"_index":972,"title":{},"content":{"64":{"position":[[953,9]]},"259":{"position":[[758,9]]}},"keywords":{}}],["overwritten",{"_index":952,"title":{},"content":{"63":{"position":[[889,11]]},"879":{"position":[[1466,11]]}},"keywords":{}}],["own",{"_index":4919,"title":{},"content":{"879":{"position":[[1691,4]]}},"keywords":{}}],["owner",{"_index":2022,"title":{},"content":{"173":{"position":[[786,5],[914,5]]},"238":{"position":[[1048,5]]},"608":{"position":[[39,5]]},"1292":{"position":[[4988,5]]},"1306":{"position":[[4988,5]]},"1329":{"position":[[4988,5]]}},"keywords":{}}],["owner/schema",{"_index":4876,"title":{},"content":{"867":{"position":[[2171,12]]}},"keywords":{}}],["ownership",{"_index":91,"title":{},"content":{"2":{"position":[[588,10]]}},"keywords":{}}],["p",{"_index":2454,"title":{},"content":{"221":{"position":[[1369,1]]},"222":{"position":[[614,1]]},"223":{"position":[[580,1]]},"224":{"position":[[633,1]]},"238":{"position":[[889,1]]},"250":{"position":[[1517,1]]},"1298":{"position":[[580,1]]},"1322":{"position":[[614,1]]},"1335":{"position":[[614,1]]},"1346":{"position":[[580,1]]}},"keywords":{}}],["p1",{"_index":1529,"title":{},"content":{"107":{"position":[[1018,2],[1047,2]]}},"keywords":{}}],["p1>acmebank/transfers/part",{"_index":1524,"title":{},"content":{"107":{"position":[[853,29]]}},"keywords":{}}],["p2",{"_index":1534,"title":{},"content":{"107":{"position":[[1077,2],[1109,2]]}},"keywords":{}}],["p2>acmebank/transfers/part",{"_index":1525,"title":{},"content":{"107":{"position":[[887,29]]}},"keywords":{}}],["p_type",{"_index":4862,"title":{},"content":{"864":{"position":[[1629,6]]}},"keywords":{}}],["pack_key",{"_index":6175,"title":{},"content":{"1292":{"position":[[5030,9]]},"1306":{"position":[[5030,9]]},"1329":{"position":[[5030,9]]}},"keywords":{}}],["packag",{"_index":948,"title":{},"content":{"63":{"position":[[709,7]]},"81":{"position":[[16,8]]},"236":{"position":[[506,8]]},"654":{"position":[[686,9]]}},"keywords":{}}],["package.json",{"_index":947,"title":{},"content":{"63":{"position":[[692,12],[839,13]]}},"keywords":{}}],["pad",{"_index":5537,"title":{},"content":{"1140":{"position":[[673,3]]},"1146":{"position":[[76,6]]},"1173":{"position":[[76,6]]},"1215":{"position":[[76,6]]},"1223":{"position":[[76,6]]},"1316":{"position":[[673,3]]},"1340":{"position":[[673,3]]},"1351":{"position":[[673,3]]},"1379":{"position":[[1317,3]]},"1403":{"position":[[1317,3]]},"1414":{"position":[[1317,3]]},"1431":{"position":[[696,3]]}},"keywords":{}}],["page",{"_index":1042,"title":{"138":{"position":[[9,5]]},"141":{"position":[[12,5]]},"142":{"position":[[17,5]]},"145":{"position":[[16,5]]},"148":{"position":[[19,5]]},"151":{"position":[[24,5]]},"154":{"position":[[6,5]]},"722":{"position":[[9,5]]}},"content":{"69":{"position":[[974,4]]},"137":{"position":[[56,5],[88,5],[531,5]]},"138":{"position":[[14,4],[526,5],[1798,4],[2606,4]]},"139":{"position":[[83,5],[95,4],[133,4]]},"140":{"position":[[67,5],[539,4]]},"141":{"position":[[17,4],[1806,4]]},"142":{"position":[[22,4],[257,5],[1823,4],[2684,4]]},"143":{"position":[[99,5],[111,4],[157,4]]},"144":{"position":[[167,4],[710,4]]},"145":{"position":[[57,4],[103,4]]},"146":{"position":[[891,4]]},"148":{"position":[[63,4],[112,4]]},"149":{"position":[[864,4]]},"151":{"position":[[73,4],[110,4]]},"152":{"position":[[867,4]]},"154":{"position":[[14,5]]},"168":{"position":[[105,5]]},"173":{"position":[[384,5],[468,5],[947,5]]},"181":{"position":[[27,4]]},"182":{"position":[[25,4],[139,5]]},"183":{"position":[[128,4]]},"184":{"position":[[149,4]]},"185":{"position":[[314,5]]},"192":{"position":[[43,5]]},"193":{"position":[[515,5]]},"204":{"position":[[401,4],[630,4]]},"205":{"position":[[286,5]]},"207":{"position":[[617,4]]},"210":{"position":[[36,4],[1650,4]]},"217":{"position":[[501,4]]},"218":{"position":[[183,4]]},"225":{"position":[[675,4]]},"228":{"position":[[95,4]]},"230":{"position":[[433,5]]},"239":{"position":[[298,4],[534,5],[1058,4],[2775,4]]},"240":{"position":[[2492,5],[4654,4]]},"253":{"position":[[219,4]]},"254":{"position":[[2076,5]]},"255":{"position":[[1234,4]]},"257":{"position":[[216,5]]},"259":{"position":[[19,4],[170,4],[1692,4],[1859,4]]},"267":{"position":[[137,4]]},"268":{"position":[[1613,4]]},"269":{"position":[[1134,4]]},"274":{"position":[[758,6]]},"284":{"position":[[281,5]]},"295":{"position":[[1363,4],[1648,4]]},"296":{"position":[[7005,5],[7238,5]]},"313":{"position":[[219,4],[3631,5]]},"316":{"position":[[1559,4]]},"345":{"position":[[107,6]]},"364":{"position":[[2421,5]]},"379":{"position":[[986,5]]},"436":{"position":[[845,4]]},"486":{"position":[[107,4],[342,4]]},"494":{"position":[[121,5]]},"517":{"position":[[3459,4],[3481,4],[3567,4]]},"531":{"position":[[533,5]]},"534":{"position":[[843,4],[968,4]]},"575":{"position":[[810,5]]},"586":{"position":[[732,5]]},"658":{"position":[[107,4],[342,4]]},"674":{"position":[[107,4],[342,4]]},"689":{"position":[[107,4],[342,4]]},"723":{"position":[[388,5]]},"726":{"position":[[49,4]]},"727":{"position":[[259,5]]},"728":{"position":[[162,4]]},"842":{"position":[[2239,4]]},"856":{"position":[[25,4],[93,5]]},"857":{"position":[[25,4]]},"892":{"position":[[277,4]]},"909":{"position":[[23,4]]},"925":{"position":[[23,4]]},"931":{"position":[[686,5]]},"936":{"position":[[23,4]]},"952":{"position":[[23,4]]},"970":{"position":[[23,4]]},"1067":{"position":[[35,4]]},"1204":{"position":[[397,5]]},"1292":{"position":[[5075,4]]},"1306":{"position":[[5075,4]]},"1329":{"position":[[5075,4]]},"1392":{"position":[[320,5]]}},"keywords":{}}],["page.select",{"_index":1827,"title":{},"content":{"144":{"position":[[113,14]]}},"keywords":{}}],["page_cursor",{"_index":4770,"title":{},"content":{"842":{"position":[[2226,12]]},"843":{"position":[[710,12]]}},"keywords":{}}],["page_s",{"_index":3971,"title":{},"content":{"517":{"position":[[3448,10]]}},"keywords":{}}],["page_size_for_large_stream",{"_index":4045,"title":{},"content":{"534":{"position":[[814,28]]},"535":{"position":[[253,28]]}},"keywords":{}}],["pageev",{"_index":4935,"title":{},"content":{"892":{"position":[[373,10]]}},"keywords":{}}],["pageinstagram",{"_index":4415,"title":{},"content":{"668":{"position":[[72,13]]}},"keywords":{}}],["pages:4985746",{"_index":3360,"title":{},"content":{"364":{"position":[[2482,13]]}},"keywords":{}}],["pages_read_engag",{"_index":4422,"title":{},"content":{"670":{"position":[[389,22]]}},"keywords":{}}],["pages_show_list",{"_index":4421,"title":{},"content":{"670":{"position":[[372,16]]}},"keywords":{}}],["pagesearch",{"_index":4300,"title":{},"content":{"605":{"position":[[326,10]]}},"keywords":{}}],["pagessurvey",{"_index":5266,"title":{},"content":{"1065":{"position":[[60,11]]}},"keywords":{}}],["pagin",{"_index":3972,"title":{},"content":{"517":{"position":[[3590,11]]},"1133":{"position":[[1429,10]]}},"keywords":{}}],["paid",{"_index":5270,"title":{},"content":{"1067":{"position":[[163,4]]}},"keywords":{}}],["painless",{"_index":3147,"title":{},"content":{"321":{"position":[[2336,8]]}},"keywords":{}}],["pair",{"_index":975,"title":{"278":{"position":[[20,6]]},"1384":{"position":[[4,4]]}},"content":{"66":{"position":[[101,4]]},"112":{"position":[[1027,6]]},"222":{"position":[[817,5]]},"278":{"position":[[289,4],[364,5]]},"322":{"position":[[330,6]]},"402":{"position":[[612,6]]},"631":{"position":[[140,4]]},"1322":{"position":[[817,5]]},"1335":{"position":[[817,5]]},"1384":{"position":[[99,4],[183,4],[225,4],[1193,4]]},"1387":{"position":[[568,4]]},"1392":{"position":[[279,4],[330,4]]}},"keywords":{}}],["palett",{"_index":6592,"title":{},"content":{"1459":{"position":[[1347,7]]}},"keywords":{}}],["pane",{"_index":6417,"title":{},"content":{"1425":{"position":[[233,5]]}},"keywords":{}}],["panel",{"_index":2427,"title":{},"content":{"217":{"position":[[560,6]]}},"keywords":{}}],["paradigm",{"_index":3106,"title":{},"content":{"319":{"position":[[906,9]]},"322":{"position":[[671,9]]}},"keywords":{}}],["parallel",{"_index":780,"title":{"977":{"position":[[27,9]]}},"content":{"49":{"position":[[177,12]]},"101":{"position":[[623,8]]},"107":{"position":[[281,8]]},"320":{"position":[[2157,8]]},"321":{"position":[[1936,11]]},"373":{"position":[[463,9]]},"595":{"position":[[667,8]]},"842":{"position":[[1627,9]]},"977":{"position":[[770,9]]}},"keywords":{}}],["param",{"_index":3542,"title":{},"content":{"402":{"position":[[495,6]]}},"keywords":{}}],["paramet",{"_index":1401,"title":{"99":{"position":[[0,11]]},"922":{"position":[[25,11]]}},"content":{"98":{"position":[[143,10]]},"99":{"position":[[143,10],[667,10],[744,9],[851,11]]},"206":{"position":[[511,9]]},"225":{"position":[[73,11]]},"240":{"position":[[3011,10],[3040,9],[3123,9],[4843,9]]},"277":{"position":[[72,12],[1217,10]]},"488":{"position":[[869,10]]},"491":{"position":[[519,10]]},"509":{"position":[[451,9]]},"571":{"position":[[759,9]]},"577":{"position":[[442,9]]},"582":{"position":[[372,9]]},"588":{"position":[[437,9]]},"609":{"position":[[316,9]]},"617":{"position":[[683,9]]},"635":{"position":[[293,10]]},"659":{"position":[[1026,10]]},"664":{"position":[[540,10],[775,10]]},"676":{"position":[[869,10]]},"679":{"position":[[519,10]]},"691":{"position":[[869,10]]},"694":{"position":[[519,10]]},"767":{"position":[[811,9],[870,9],[986,9],[1017,9],[1058,11],[1189,9],[1357,9],[1487,9],[1515,9]]},"780":{"position":[[310,9]]},"792":{"position":[[1090,9],[1164,9],[1322,9],[1363,11],[1445,9]]},"794":{"position":[[663,9],[732,9]]},"809":{"position":[[663,9],[732,9]]},"824":{"position":[[882,9],[939,9],[1052,9],[1083,9],[1124,11],[1255,9],[1423,9],[1551,9],[1579,9]]},"840":{"position":[[1513,10]]},"849":{"position":[[2404,10]]},"904":{"position":[[937,9],[1052,9],[1083,9],[1148,9],[1220,9]]},"907":{"position":[[1370,10]]},"918":{"position":[[1140,9],[1343,9],[1374,9],[1439,9],[1512,9]]},"919":{"position":[[656,11]]},"923":{"position":[[1370,10]]},"934":{"position":[[1370,10]]},"942":{"position":[[76,10]]},"950":{"position":[[1370,10]]},"968":{"position":[[1370,10]]},"1085":{"position":[[1280,9]]},"1140":{"position":[[705,9]]},"1186":{"position":[[351,9]]},"1245":{"position":[[628,9]]},"1285":{"position":[[943,10]]},"1286":{"position":[[720,9],[789,9]]},"1300":{"position":[[943,10]]},"1313":{"position":[[797,10]]},"1316":{"position":[[705,9]]},"1324":{"position":[[943,10]]},"1325":{"position":[[720,9],[789,9]]},"1337":{"position":[[797,10]]},"1340":{"position":[[705,9]]},"1348":{"position":[[797,10]]},"1351":{"position":[[705,9]]},"1379":{"position":[[1376,9],[1426,10]]},"1403":{"position":[[1376,9],[1426,10]]},"1414":{"position":[[1376,9],[1426,10]]},"1431":{"position":[[728,9]]}},"keywords":{}}],["parent",{"_index":1327,"title":{},"content":{"92":{"position":[[638,7]]},"842":{"position":[[3219,6]]},"1477":{"position":[[1360,7],[3526,7]]}},"keywords":{}}],["parent'",{"_index":4253,"title":{},"content":{"593":{"position":[[617,8]]}},"keywords":{}}],["parent.flow.yaml",{"_index":1328,"title":{},"content":{"92":{"position":[[687,16],[724,16]]}},"keywords":{}}],["parent/*/nest",{"_index":4252,"title":{},"content":{"593":{"position":[[564,15]]}},"keywords":{}}],["parent_join_column_nam",{"_index":4799,"title":{},"content":{"843":{"position":[[591,24]]}},"keywords":{}}],["parquet",{"_index":5415,"title":{"1167":{"position":[[7,7]]},"1172":{"position":[[0,7]]},"1217":{"position":[[7,7]]},"1222":{"position":[[0,7]]}},"content":{"1120":{"position":[[427,7],[522,7]]},"1172":{"position":[[39,7],[128,7],[165,7],[194,7],[228,7],[270,7]]},"1222":{"position":[[39,7],[128,7],[165,7],[194,7],[228,7],[270,7]]}},"keywords":{}}],["parquet:dev",{"_index":5416,"title":{},"content":{"1120":{"position":[[503,11],[596,11]]}},"keywords":{}}],["parquet:dev"",{"_index":5777,"title":{},"content":{"1171":{"position":[[107,17]]},"1221":{"position":[[108,17]]}},"keywords":{}}],["parquetconfig/rowgroupbytelimit",{"_index":5775,"title":{},"content":{"1170":{"position":[[1003,32]]},"1220":{"position":[[680,32]]}},"keywords":{}}],["parquetconfig/rowgrouprowlimit",{"_index":5773,"title":{},"content":{"1170":{"position":[[874,31]]},"1220":{"position":[[551,31]]}},"keywords":{}}],["pars",{"_index":1412,"title":{"419":{"position":[[10,7]]},"440":{"position":[[10,7]]},"504":{"position":[[10,7]]},"547":{"position":[[10,7]]},"639":{"position":[[10,7]]},"1023":{"position":[[10,7]]}},"content":{"98":{"position":[[654,6],[820,7]]},"207":{"position":[[677,6]]},"239":{"position":[[1482,6]]},"254":{"position":[[3611,5]]},"417":{"position":[[1419,6],[1662,5]]},"419":{"position":[[147,5],[917,7]]},"440":{"position":[[163,5],[933,7]]},"502":{"position":[[1067,6],[1310,5]]},"504":{"position":[[84,5],[849,7]]},"545":{"position":[[1043,6],[1264,5]]},"547":{"position":[[148,5],[918,7]]},"637":{"position":[[603,6],[824,5]]},"639":{"position":[[83,5],[847,7]]},"1021":{"position":[[1578,6],[1821,5]]},"1023":{"position":[[128,5],[898,7]]}},"keywords":{}}],["parser",{"_index":3034,"title":{},"content":{"301":{"position":[[1243,6]]},"417":{"position":[[1365,7],[1373,6]]},"418":{"position":[[134,7]]},"419":{"position":[[244,6],[356,6],[530,6],[621,6],[1466,7]]},"439":{"position":[[391,7]]},"440":{"position":[[260,6],[372,6],[546,6],[637,6]]},"441":{"position":[[75,7]]},"499":{"position":[[451,6]]},"502":{"position":[[1013,7],[1021,6]]},"504":{"position":[[181,6],[300,6],[474,6],[565,6],[1095,7]]},"545":{"position":[[989,7],[997,6]]},"546":{"position":[[871,7]]},"547":{"position":[[245,6],[357,6],[531,6],[622,6],[1468,7]]},"634":{"position":[[443,6]]},"637":{"position":[[549,7],[557,6]]},"638":{"position":[[163,7]]},"639":{"position":[[180,6],[298,6],[472,6],[563,6],[1093,7]]},"1021":{"position":[[1524,7],[1532,6]]},"1022":{"position":[[200,7]]},"1023":{"position":[[225,6],[337,6],[511,6],[602,6],[1449,7]]},"1292":{"position":[[5122,6]]},"1306":{"position":[[5122,6]]},"1329":{"position":[[5122,6]]}},"keywords":{}}],["parser/compress",{"_index":3595,"title":{},"content":{"417":{"position":[[1455,19]]},"502":{"position":[[1103,19]]},"545":{"position":[[1057,19]]},"637":{"position":[[617,19]]},"1021":{"position":[[1614,19]]}},"keywords":{}}],["parser/format",{"_index":3597,"title":{},"content":{"417":{"position":[[1622,14]]},"502":{"position":[[1270,14]]},"545":{"position":[[1224,14]]},"637":{"position":[[784,14]]},"1021":{"position":[[1781,14]]}},"keywords":{}}],["parser/format/typ",{"_index":3600,"title":{},"content":{"417":{"position":[[1849,19]]},"502":{"position":[[1497,19]]},"545":{"position":[[1451,19]]},"637":{"position":[[1011,19]]}},"keywords":{}}],["part",{"_index":321,"title":{},"content":{"11":{"position":[[941,5],[1209,5]]},"17":{"position":[[262,4]]},"43":{"position":[[27,4]]},"63":{"position":[[288,4]]},"64":{"position":[[55,4],[172,4],[517,4]]},"81":{"position":[[1941,4]]},"112":{"position":[[136,4]]},"129":{"position":[[651,4]]},"138":{"position":[[891,4]]},"142":{"position":[[862,4]]},"160":{"position":[[288,4]]},"192":{"position":[[912,4]]},"239":{"position":[[21,4]]},"274":{"position":[[348,4]]},"281":{"position":[[2199,5]]},"288":{"position":[[293,4]]},"307":{"position":[[308,5]]},"392":{"position":[[94,4],[260,4]]},"417":{"position":[[738,4],[929,4]]},"419":{"position":[[561,4]]},"440":{"position":[[577,4]]},"489":{"position":[[89,4]]},"504":{"position":[[505,4]]},"522":{"position":[[514,4]]},"530":{"position":[[514,4]]},"547":{"position":[[562,4]]},"548":{"position":[[4,4]]},"639":{"position":[[503,4]]},"640":{"position":[[73,4]]},"661":{"position":[[48,4]]},"662":{"position":[[89,4]]},"677":{"position":[[89,4]]},"692":{"position":[[89,4]]},"911":{"position":[[442,4]]},"927":{"position":[[442,4]]},"938":{"position":[[442,4]]},"954":{"position":[[442,4]]},"972":{"position":[[442,4]]},"1023":{"position":[[542,4]]},"1040":{"position":[[817,4]]},"1050":{"position":[[817,4]]},"1058":{"position":[[817,4]]},"1067":{"position":[[499,4]]},"1147":{"position":[[258,4]]},"1174":{"position":[[258,4]]},"1200":{"position":[[99,4],[170,4]]},"1209":{"position":[[167,4]]},"1216":{"position":[[258,4]]},"1224":{"position":[[258,4]]},"1291":{"position":[[31,4]]},"1305":{"position":[[31,4]]},"1328":{"position":[[31,4]]},"1359":{"position":[[367,4]]},"1438":{"position":[[297,4]]}},"keywords":{}}],["parti",{"_index":700,"title":{"241":{"position":[[0,5]]},"364":{"position":[[6,5]]}},"content":{"38":{"position":[[242,8]]},"53":{"position":[[44,5],[342,5]]},"88":{"position":[[447,5]]},"102":{"position":[[252,5]]},"161":{"position":[[1278,5]]},"242":{"position":[[13,6]]},"281":{"position":[[2667,5]]},"337":{"position":[[411,5]]},"364":{"position":[[52,8],[321,7],[378,5]]},"531":{"position":[[495,5]]},"532":{"position":[[307,5]]}},"keywords":{}}],["partial",{"_index":1280,"title":{},"content":{"87":{"position":[[47,7]]},"112":{"position":[[69,7]]},"1140":{"position":[[752,7]]},"1292":{"position":[[5161,7]]},"1306":{"position":[[5161,7]]},"1316":{"position":[[752,7]]},"1329":{"position":[[5161,7]]},"1340":{"position":[[752,7]]},"1351":{"position":[[752,7]]},"1379":{"position":[[1483,7]]},"1403":{"position":[[1483,7]]},"1414":{"position":[[1483,7]]},"1431":{"position":[[775,7]]},"1438":{"position":[[358,9],[531,9]]}},"keywords":{}}],["participantsconferencesconversationsconvers",{"_index":5395,"title":{},"content":{"1110":{"position":[[245,48]]}},"keywords":{}}],["participantsdepend",{"_index":5397,"title":{},"content":{"1110":{"position":[[315,21]]}},"keywords":{}}],["particular",{"_index":709,"title":{},"content":{"38":{"position":[[635,10]]},"107":{"position":[[439,10]]},"159":{"position":[[464,11]]},"296":{"position":[[3243,10]]},"308":{"position":[[454,10]]},"590":{"position":[[682,10]]},"764":{"position":[[485,10]]},"777":{"position":[[485,10]]},"804":{"position":[[483,10]]},"819":{"position":[[483,10]]},"835":{"position":[[483,10]]},"912":{"position":[[1115,10]]},"922":{"position":[[1146,10]]}},"keywords":{}}],["particularli",{"_index":1012,"title":{},"content":{"67":{"position":[[1545,12]]},"975":{"position":[[155,12]]}},"keywords":{}}],["partit",{"_index":64,"title":{"2":{"position":[[9,11]]},"16":{"position":[[8,11]]},"17":{"position":[[0,9]]},"123":{"position":[[0,9]]},"130":{"position":[[0,9]]},"1183":{"position":[[6,13]]}},"content":{"2":{"position":[[15,9],[80,10],[127,10],[224,9],[376,9],[447,9],[515,9],[545,10],[615,9],[654,10],[692,10],[794,9]]},"3":{"position":[[684,9],[778,10],[1017,10],[1044,11]]},"4":{"position":[[338,13]]},"6":{"position":[[487,11]]},"8":{"position":[[293,11]]},"11":{"position":[[884,10],[1783,11]]},"13":{"position":[[1574,12]]},"14":{"position":[[49,9]]},"16":{"position":[[43,9],[263,10],[309,10],[359,10],[385,10],[459,11],[493,11],[564,11],[605,10],[631,9],[1225,10],[1384,11]]},"17":{"position":[[115,9],[166,10],[226,9],[330,11],[362,11],[444,9],[532,10],[589,10],[726,11],[803,9],[892,10],[917,10],[1038,9]]},"48":{"position":[[88,9]]},"68":{"position":[[1092,9],[1156,10],[1595,9],[1647,11],[1685,9],[1708,9],[1745,10]]},"69":{"position":[[784,10]]},"76":{"position":[[91,12],[344,11],[466,10],[624,13],[900,9],[970,10]]},"94":{"position":[[1436,9],[1516,11],[1528,11]]},"106":{"position":[[171,9],[266,11],[308,10],[384,10]]},"107":{"position":[[841,11]]},"123":{"position":[[1,9],[87,11],[164,11],[325,10],[458,9],[619,9],[685,10],[738,11],[832,9]]},"130":{"position":[[28,9],[86,10],[351,11],[412,9]]},"162":{"position":[[1761,11]]},"208":{"position":[[1333,12]]},"237":{"position":[[2219,9],[2370,11],[2463,12]]},"239":{"position":[[2226,11]]},"280":{"position":[[1972,11],[2185,9],[2274,10]]},"281":{"position":[[1060,11]]},"306":{"position":[[182,12]]},"307":{"position":[[38,12],[193,13]]},"320":{"position":[[771,11],[1811,13],[1893,13]]},"321":{"position":[[1005,11]]},"333":{"position":[[365,12]]},"904":{"position":[[2217,11]]},"917":{"position":[[1726,11]]},"918":{"position":[[2509,11]]},"931":{"position":[[1879,11]]},"945":{"position":[[371,11]]},"965":{"position":[[1726,11]]},"1123":{"position":[[148,9]]},"1140":{"position":[[789,9]]},"1183":{"position":[[130,13],[161,11],[236,12],[321,12],[630,13],[775,12],[913,9],[1741,11]]},"1209":{"position":[[296,9]]},"1292":{"position":[[5194,9],[5236,12],[5275,10]]},"1306":{"position":[[5194,9],[5236,12],[5275,10]]},"1316":{"position":[[789,9]]},"1329":{"position":[[5194,9],[5236,12],[5275,10]]},"1340":{"position":[[789,9]]},"1351":{"position":[[789,9]]},"1370":{"position":[[696,9]]},"1379":{"position":[[1537,9]]},"1391":{"position":[[179,10],[243,9],[438,11],[980,11],[1037,10]]},"1403":{"position":[[1537,9]]},"1414":{"position":[[1537,9]]},"1431":{"position":[[812,9]]},"1459":{"position":[[91,9],[287,11]]},"1472":{"position":[[279,9],[334,11],[383,9],[899,11]]}},"keywords":{}}],["partition.utc_d",{"_index":486,"title":{},"content":{"16":{"position":[[1270,18]]}},"keywords":{}}],["partitionsinto",{"_index":470,"title":{},"content":{"16":{"position":[[666,14]]}},"keywords":{}}],["partli",{"_index":3141,"title":{},"content":{"321":{"position":[[1211,6]]}},"keywords":{}}],["partssegmentstagsteam",{"_index":4431,"title":{},"content":{"682":{"position":[[172,22]]}},"keywords":{}}],["pascal",{"_index":6311,"title":{},"content":{"1379":{"position":[[1589,6]]},"1403":{"position":[[1589,6]]},"1414":{"position":[[1589,6]]}},"keywords":{}}],["pass",{"_index":910,"title":{},"content":{"60":{"position":[[1125,7]]},"82":{"position":[[5052,7]]},"122":{"position":[[1998,6]]},"149":{"position":[[142,7]]},"240":{"position":[[4959,6]]},"250":{"position":[[1081,4]]},"275":{"position":[[587,7]]},"309":{"position":[[492,4]]},"402":{"position":[[527,4]]},"661":{"position":[[21,4]]},"724":{"position":[[61,7]]}},"keywords":{}}],["password",{"_index":1126,"title":{},"content":{"81":{"position":[[1386,9],[1396,8],[2679,9],[2689,8]]},"82":{"position":[[79,9],[1404,9],[2122,9],[3908,8]]},"83":{"position":[[1074,9]]},"184":{"position":[[397,8]]},"191":{"position":[[538,10],[1167,8]]},"192":{"position":[[1020,9],[1053,8]]},"201":{"position":[[168,9]]},"206":{"position":[[336,8]]},"236":{"position":[[2887,8]]},"237":{"position":[[307,8],[590,8]]},"238":{"position":[[921,8]]},"240":{"position":[[500,9],[1128,8]]},"247":{"position":[[236,9],[364,9]]},"344":{"position":[[118,9]]},"367":{"position":[[420,8]]},"370":{"position":[[557,9],[567,8],[576,8]]},"371":{"position":[[279,9]]},"402":{"position":[[344,9],[354,8],[363,8]]},"403":{"position":[[259,9]]},"429":{"position":[[859,9]]},"432":{"position":[[735,8],[744,9]]},"433":{"position":[[10,8],[292,9]]},"489":{"position":[[260,8]]},"570":{"position":[[137,9]]},"581":{"position":[[430,9]]},"615":{"position":[[106,9]]},"635":{"position":[[521,8]]},"637":{"position":[[180,8],[189,9]]},"662":{"position":[[260,8]]},"677":{"position":[[260,8]]},"683":{"position":[[124,8]]},"692":{"position":[[260,8]]},"757":{"position":[[257,9],[273,8],[282,8]]},"758":{"position":[[236,9]]},"770":{"position":[[257,9],[273,8],[282,8]]},"771":{"position":[[236,9]]},"782":{"position":[[250,9],[260,8],[269,8]]},"783":{"position":[[142,9]]},"797":{"position":[[257,9],[273,8],[282,8]]},"798":{"position":[[234,9]]},"812":{"position":[[257,9],[273,8],[282,8]]},"813":{"position":[[234,9]]},"828":{"position":[[257,9],[273,8],[282,8]]},"829":{"position":[[234,9]]},"840":{"position":[[2626,9]]},"842":{"position":[[1190,8],[1223,9]]},"867":{"position":[[222,9],[232,8],[241,8]]},"868":{"position":[[205,9]]},"879":{"position":[[357,8],[683,8],[696,8],[938,8],[947,8]]},"880":{"position":[[279,8],[304,9]]},"904":{"position":[[1481,8]]},"907":{"position":[[340,9],[350,8],[359,8]]},"908":{"position":[[280,9]]},"917":{"position":[[302,9],[343,8]]},"918":{"position":[[1773,8]]},"919":{"position":[[906,8]]},"923":{"position":[[340,9],[350,8],[359,8]]},"924":{"position":[[280,9]]},"931":{"position":[[1182,8]]},"934":{"position":[[340,9],[350,8],[359,8]]},"935":{"position":[[280,9]]},"943":{"position":[[616,8]]},"950":{"position":[[340,9],[350,8],[359,8]]},"951":{"position":[[280,9]]},"965":{"position":[[302,9],[343,8]]},"968":{"position":[[340,9],[350,8],[359,8]]},"969":{"position":[[280,9]]},"989":{"position":[[480,8]]},"1004":{"position":[[563,8]]},"1018":{"position":[[97,8]]},"1021":{"position":[[489,9],[499,8],[508,8],[549,8],[649,8]]},"1022":{"position":[[158,9]]},"1032":{"position":[[216,8],[517,8],[824,8]]},"1034":{"position":[[416,9],[426,8],[439,8]]},"1037":{"position":[[220,9]]},"1042":{"position":[[158,8],[226,8]]},"1043":{"position":[[822,8],[890,8]]},"1045":{"position":[[325,9],[335,8],[344,8]]},"1046":{"position":[[221,9]]},"1051":{"position":[[1084,8],[1152,8]]},"1053":{"position":[[325,9],[335,8],[344,8]]},"1054":{"position":[[221,9]]},"1059":{"position":[[873,8],[941,8]]},"1061":{"position":[[325,9],[335,8],[344,8]]},"1062":{"position":[[221,9]]},"1067":{"position":[[459,8]]},"1082":{"position":[[233,8]]},"1118":{"position":[[448,9],[663,11]]},"1138":{"position":[[446,9],[456,8],[465,8]]},"1139":{"position":[[161,9]]},"1151":{"position":[[258,9],[268,8],[277,8]]},"1152":{"position":[[226,9],[236,8]]},"1195":{"position":[[313,9]]},"1196":{"position":[[398,8],[407,8]]},"1197":{"position":[[304,9]]},"1206":{"position":[[515,9],[525,8],[543,9]]},"1207":{"position":[[162,9]]},"1227":{"position":[[299,8]]},"1244":{"position":[[32,8]]},"1253":{"position":[[323,9],[333,8],[342,8]]},"1254":{"position":[[182,9]]},"1267":{"position":[[312,9],[322,8],[331,8]]},"1270":{"position":[[164,9]]},"1285":{"position":[[265,9],[275,8],[284,8]]},"1287":{"position":[[155,9]]},"1292":{"position":[[5319,8]]},"1300":{"position":[[265,9],[275,8],[284,8]]},"1302":{"position":[[155,9]]},"1306":{"position":[[5319,8]]},"1313":{"position":[[256,9],[266,8],[275,8]]},"1314":{"position":[[158,9]]},"1324":{"position":[[265,9],[275,8],[284,8]]},"1326":{"position":[[155,9]]},"1329":{"position":[[5319,8]]},"1337":{"position":[[256,9],[266,8],[275,8]]},"1338":{"position":[[158,9]]},"1348":{"position":[[256,9],[266,8],[275,8]]},"1349":{"position":[[158,9]]},"1373":{"position":[[1001,8],[1073,8]]},"1374":{"position":[[1001,8],[1073,8]]},"1376":{"position":[[265,9],[275,8],[284,8]]},"1377":{"position":[[159,9]]},"1383":{"position":[[1115,8]]},"1386":{"position":[[931,8]]},"1387":{"position":[[10,8],[288,9]]},"1397":{"position":[[780,8],[852,8]]},"1398":{"position":[[779,8],[851,8]]},"1400":{"position":[[265,9],[275,8],[284,8]]},"1401":{"position":[[159,9]]},"1408":{"position":[[99,8],[171,8]]},"1409":{"position":[[763,8],[835,8]]},"1411":{"position":[[265,9],[275,8],[284,8]]},"1412":{"position":[[159,9]]},"1420":{"position":[[288,9],[298,8],[322,8]]},"1421":{"position":[[105,9],[115,8]]},"1427":{"position":[[197,9],[207,8],[216,8]]},"1428":{"position":[[199,9]]},"1461":{"position":[[3908,9]]}},"keywords":{}}],["password"",{"_index":4908,"title":{},"content":{"879":{"position":[[532,14]]}},"keywords":{}}],["password_lock",{"_index":6184,"title":{},"content":{"1292":{"position":[[5358,13]]},"1306":{"position":[[5358,13]]},"1329":{"position":[[5358,13]]}},"keywords":{}}],["password_sop",{"_index":1201,"title":{},"content":{"82":{"position":[[3834,14],[4346,14]]}},"keywords":{}}],["past",{"_index":872,"title":{},"content":{"58":{"position":[[184,5]]},"169":{"position":[[423,5],[1611,5]]},"172":{"position":[[161,7]]},"191":{"position":[[432,5]]},"210":{"position":[[1890,5]]},"236":{"position":[[1846,5]]},"240":{"position":[[399,5]]},"331":{"position":[[121,5]]},"340":{"position":[[471,5]]},"387":{"position":[[1297,5]]},"414":{"position":[[803,5]]},"479":{"position":[[335,5]]},"489":{"position":[[183,5]]},"548":{"position":[[1273,5]]},"659":{"position":[[96,5]]},"662":{"position":[[183,5]]},"677":{"position":[[183,5]]},"692":{"position":[[183,5]]},"1015":{"position":[[196,4]]},"1032":{"position":[[91,5]]},"1076":{"position":[[466,4]]},"1113":{"position":[[382,4]]},"1383":{"position":[[37,5]]},"1434":{"position":[[162,4]]},"1471":{"position":[[792,5]]}},"keywords":{}}],["pat",{"_index":3804,"title":{},"content":{"473":{"position":[[206,3]]},"527":{"position":[[205,3]]},"534":{"position":[[596,3]]},"535":{"position":[[205,3]]},"1188":{"position":[[565,3]]},"1189":{"position":[[231,3]]}},"keywords":{}}],["path",{"_index":120,"title":{"92":{"position":[[7,6]]}},"content":{"3":{"position":[[418,4],[604,4],[1092,4]]},"4":{"position":[[76,4]]},"58":{"position":[[306,5]]},"89":{"position":[[124,5]]},"92":{"position":[[146,4],[272,4],[372,5],[386,5],[600,4]]},"100":{"position":[[316,4]]},"103":{"position":[[503,5]]},"135":{"position":[[915,4]]},"169":{"position":[[545,5]]},"190":{"position":[[518,5]]},"275":{"position":[[862,4]]},"301":{"position":[[1077,4]]},"417":{"position":[[1246,4],[2272,4]]},"438":{"position":[[1762,4]]},"488":{"position":[[161,5],[172,4],[204,5],[385,5],[394,6],[470,4],[616,5],[730,4]]},"491":{"position":[[310,6],[321,5],[339,5],[427,5],[433,5]]},"492":{"position":[[376,5],[390,4]]},"502":{"position":[[66,4],[75,4],[284,4],[1598,4],[1607,4]]},"503":{"position":[[111,5]]},"545":{"position":[[1667,4]]},"565":{"position":[[126,5],[132,4],[137,4]]},"566":{"position":[[227,5]]},"590":{"position":[[847,4],[1096,5]]},"593":{"position":[[530,5],[536,4]]},"594":{"position":[[892,6],[1092,5],[1222,5],[1324,5],[1402,5]]},"657":{"position":[[610,5],[650,5]]},"659":{"position":[[318,5],[329,4],[361,5],[542,5],[551,6],[627,4],[773,5],[887,4]]},"664":{"position":[[331,6],[342,5],[360,5],[448,5],[454,5],[595,5],[683,5],[689,5]]},"665":{"position":[[376,5],[390,4]]},"676":{"position":[[161,5],[172,4],[204,5],[385,5],[394,6],[470,4],[616,5],[730,4]]},"679":{"position":[[310,6],[321,5],[339,5],[427,5],[433,5]]},"680":{"position":[[376,5],[390,4]]},"691":{"position":[[161,5],[172,4],[204,5],[385,5],[394,6],[470,4],[616,5],[730,4]]},"694":{"position":[[310,6],[321,5],[339,5],[427,5],[433,5]]},"695":{"position":[[376,5],[390,4]]},"1020":{"position":[[820,5],[864,4],[958,4],[1184,4],[1390,4]]},"1021":{"position":[[943,4],[1460,4],[2083,4]]},"1144":{"position":[[1301,4],[1310,4]]},"1145":{"position":[[287,5]]},"1146":{"position":[[468,4]]},"1151":{"position":[[1242,4]]},"1170":{"position":[[1226,4],[1235,4]]},"1171":{"position":[[291,5]]},"1173":{"position":[[480,4]]},"1179":{"position":[[614,4],[624,4]]},"1180":{"position":[[185,5]]},"1188":{"position":[[239,4],[249,4]]},"1197":{"position":[[59,4]]},"1207":{"position":[[284,4]]},"1213":{"position":[[978,4],[987,4]]},"1214":{"position":[[227,5]]},"1215":{"position":[[468,4]]},"1220":{"position":[[903,4],[912,4]]},"1221":{"position":[[231,5]]},"1223":{"position":[[480,4]]},"1240":{"position":[[72,4],[90,4]]},"1260":{"position":[[790,4]]},"1292":{"position":[[5409,4]]},"1306":{"position":[[5409,4]]},"1329":{"position":[[5409,4]]},"1357":{"position":[[134,4]]},"1379":{"position":[[1643,4]]},"1403":{"position":[[1643,4]]},"1414":{"position":[[1643,4]]},"1420":{"position":[[567,4]]},"1461":{"position":[[1605,4],[3647,5],[5264,4],[5284,4]]}},"keywords":{}}],["path/to//connector",{"_index":6727,"title":{},"content":{"1480":{"position":[[592,18]]}},"keywords":{}}],["path/to/another/migration.sql",{"_index":1439,"title":{},"content":{"100":{"position":[[473,32]]}},"keywords":{}}],["path/to/connector",{"_index":843,"title":{},"content":{"56":{"position":[[1299,17]]},"120":{"position":[[658,17]]}},"keywords":{}}],["path/to/key",{"_index":2457,"title":{},"content":{"221":{"position":[[1397,12]]},"222":{"position":[[642,12]]},"223":{"position":[[608,12]]},"224":{"position":[[661,12]]},"1298":{"position":[[608,12]]},"1322":{"position":[[642,12]]},"1335":{"position":[[642,12]]},"1346":{"position":[[608,12]]}},"keywords":{}}],["path/to/my/derivation.flow.yaml",{"_index":1474,"title":{},"content":{"103":{"position":[[421,31]]}},"keywords":{}}],["path/to/other/migration.sql",{"_index":1339,"title":{},"content":{"94":{"position":[[698,30]]}},"keywords":{}}],["path/to/source/catalog.flow.yaml",{"_index":1305,"title":{},"content":{"89":{"position":[[141,32],[266,32]]}},"keywords":{}}],["path/to/your/credentials.json",{"_index":4137,"title":{},"content":{"566":{"position":[[127,30]]}},"keywords":{}}],["patselect",{"_index":4014,"title":{},"content":{"526":{"position":[[42,9]]}},"keywords":{}}],["pattern",{"_index":1355,"title":{"1436":{"position":[[22,9]]}},"content":{"94":{"position":[[2706,8]]},"110":{"position":[[816,7]]},"115":{"position":[[1595,7]]},"133":{"position":[[221,7]]},"138":{"position":[[768,7]]},"142":{"position":[[739,7]]},"164":{"position":[[918,8]]},"268":{"position":[[265,7],[580,7]]},"326":{"position":[[1544,7]]},"590":{"position":[[859,7]]},"594":{"position":[[951,7]]},"1140":{"position":[[834,7]]},"1316":{"position":[[834,7]]},"1340":{"position":[[834,7]]},"1351":{"position":[[834,7]]},"1356":{"position":[[689,9]]},"1431":{"position":[[857,7]]},"1436":{"position":[[39,8],[84,7]]},"1437":{"position":[[9,8],[211,7]]},"1438":{"position":[[9,8],[248,7]]},"1439":{"position":[[9,7],[472,8],[931,7],[1310,7]]},"1442":{"position":[[1245,7]]},"1444":{"position":[[376,7],[519,8]]}},"keywords":{}}],["paus",{"_index":735,"title":{},"content":{"41":{"position":[[531,6]]},"106":{"position":[[711,5]]},"138":{"position":[[336,5]]},"141":{"position":[[646,5]]},"142":{"position":[[449,5]]},"209":{"position":[[1091,5],[1156,5],[1386,5]]},"230":{"position":[[297,5]]},"240":{"position":[[3402,5]]},"332":{"position":[[369,6]]},"764":{"position":[[243,6]]},"777":{"position":[[243,6]]},"785":{"position":[[361,6],[582,5]]},"804":{"position":[[241,6]]},"819":{"position":[[241,6]]},"835":{"position":[[241,6]]},"1183":{"position":[[645,5]]}},"keywords":{}}],["pay",{"_index":2999,"title":{},"content":{"296":{"position":[[1754,3]]},"480":{"position":[[303,4]]}},"keywords":{}}],["payload",{"_index":4409,"title":{},"content":{"661":{"position":[[371,7]]}},"keywords":{}}],["payment",{"_index":6587,"title":{},"content":{"1456":{"position":[[363,7],[387,7]]}},"keywords":{}}],["payment_int",{"_index":5319,"title":{},"content":{"1078":{"position":[[1387,15]]}},"keywords":{}}],["paymentsinvoicesinvoic",{"_index":4341,"title":{},"content":{"628":{"position":[[124,23]]}},"keywords":{}}],["payout",{"_index":5321,"title":{},"content":{"1078":{"position":[[1478,7]]}},"keywords":{}}],["paypal",{"_index":3370,"title":{"881":{"position":[[0,6]]}},"content":{"364":{"position":[[2832,6],[2897,6]]},"882":{"position":[[56,6]]},"883":{"position":[[5,6],[77,6]]},"884":{"position":[[250,6]]},"885":{"position":[[103,6],[204,6],[673,6]]},"886":{"position":[[90,6]]}},"keywords":{}}],["peek",{"_index":2583,"title":{},"content":{"238":{"position":[[810,7]]},"239":{"position":[[1419,4]]}},"keywords":{}}],["pem",{"_index":2450,"title":{},"content":{"221":{"position":[[1028,3],[1242,3],[1258,3],[1390,3]]},"222":{"position":[[273,3],[487,3],[503,3],[635,3]]},"223":{"position":[[239,3],[453,3],[469,3],[601,3],[759,3]]},"224":{"position":[[292,3],[506,3],[522,3],[654,3]]},"1298":{"position":[[239,3],[453,3],[469,3],[601,3],[759,3]]},"1322":{"position":[[273,3],[487,3],[503,3],[635,3]]},"1335":{"position":[[273,3],[487,3],[503,3],[635,3]]},"1346":{"position":[[239,3],[453,3],[469,3],[601,3],[759,3]]},"1384":{"position":[[322,3]]}},"keywords":{}}],["pendo",{"_index":3309,"title":{"887":{"position":[[0,5]]}},"content":{"363":{"position":[[1844,5]]},"888":{"position":[[56,5]]},"889":{"position":[[3,5],[56,5]]},"890":{"position":[[251,5]]},"891":{"position":[[99,5],[408,5]]}},"keywords":{}}],["pendo:dev",{"_index":3310,"title":{},"content":{"363":{"position":[[1896,9]]},"892":{"position":[[89,9]]}},"keywords":{}}],["per",{"_index":829,"title":{},"content":{"56":{"position":[[50,3]]},"69":{"position":[[53,3]]},"101":{"position":[[392,3]]},"120":{"position":[[58,3]]},"122":{"position":[[1970,3]]},"125":{"position":[[988,3]]},"146":{"position":[[163,3]]},"149":{"position":[[172,3]]},"152":{"position":[[179,3]]},"174":{"position":[[450,3]]},"180":{"position":[[648,3]]},"198":{"position":[[961,3],[976,3]]},"290":{"position":[[1080,3]]},"319":{"position":[[1424,3],[1494,3]]},"368":{"position":[[462,3]]},"419":{"position":[[1205,3]]},"440":{"position":[[1221,3]]},"479":{"position":[[824,3]]},"509":{"position":[[190,3],[224,3],[308,3],[319,3],[327,3]]},"517":{"position":[[3563,3]]},"547":{"position":[[1207,3]]},"755":{"position":[[462,3]]},"768":{"position":[[462,3]]},"789":{"position":[[768,3],[828,3],[1061,3]]},"795":{"position":[[460,3]]},"810":{"position":[[460,3]]},"826":{"position":[[460,3]]},"870":{"position":[[413,3],[938,3]]},"900":{"position":[[138,3],[146,3],[214,3],[225,3],[234,3],[266,3],[277,3],[286,3]]},"905":{"position":[[465,3]]},"920":{"position":[[465,3]]},"932":{"position":[[465,3]]},"948":{"position":[[465,3]]},"966":{"position":[[465,3]]},"1023":{"position":[[1188,3]]},"1068":{"position":[[49,3],[65,3]]},"1136":{"position":[[158,3]]},"1140":{"position":[[879,3]]},"1149":{"position":[[287,3]]},"1156":{"position":[[79,3]]},"1182":{"position":[[565,3]]},"1191":{"position":[[569,3]]},"1234":{"position":[[235,3]]},"1243":{"position":[[360,3]]},"1262":{"position":[[569,3]]},"1281":{"position":[[197,3]]},"1289":{"position":[[449,3]]},"1295":{"position":[[197,3]]},"1309":{"position":[[158,3]]},"1316":{"position":[[879,3]]},"1319":{"position":[[197,3]]},"1321":{"position":[[229,3]]},"1332":{"position":[[158,3]]},"1340":{"position":[[879,3]]},"1343":{"position":[[158,3]]},"1351":{"position":[[879,3]]},"1372":{"position":[[197,3]]},"1388":{"position":[[144,3]]},"1389":{"position":[[567,3]]},"1396":{"position":[[197,3]]},"1406":{"position":[[197,3]]},"1426":{"position":[[302,3]]},"1429":{"position":[[184,3]]},"1431":{"position":[[902,3]]},"1437":{"position":[[183,3]]},"1459":{"position":[[945,3]]}},"keywords":{}}],["perameterto",{"_index":4599,"title":{},"content":{"753":{"position":[[694,11]]},"793":{"position":[[654,11]]}},"keywords":{}}],["percent",{"_index":3887,"title":{},"content":{"491":{"position":[[468,7]]},"664":{"position":[[489,7],[724,7]]},"679":{"position":[[468,7]]},"694":{"position":[[468,7]]},"1140":{"position":[[914,7]]},"1316":{"position":[[914,7]]},"1340":{"position":[[914,7]]},"1351":{"position":[[914,7]]},"1379":{"position":[[1696,7]]},"1403":{"position":[[1696,7]]},"1414":{"position":[[1696,7]]},"1431":{"position":[[937,7]]}},"keywords":{}}],["percent_rank",{"_index":5556,"title":{},"content":{"1140":{"position":[[1053,12]]},"1292":{"position":[[5460,12]]},"1306":{"position":[[5460,12]]},"1316":{"position":[[1053,12]]},"1329":{"position":[[5460,12]]},"1340":{"position":[[1053,12]]},"1351":{"position":[[1053,12]]},"1379":{"position":[[1755,12]]},"1403":{"position":[[1755,12]]},"1414":{"position":[[1755,12]]},"1431":{"position":[[1076,12]]}},"keywords":{}}],["percentag",{"_index":3624,"title":{},"content":{"419":{"position":[[1944,10]]},"441":{"position":[[553,10]]},"504":{"position":[[1573,10]]},"547":{"position":[[1946,10]]},"639":{"position":[[1571,10]]},"1023":{"position":[[1927,10]]}},"keywords":{}}],["percentile_co",{"_index":6316,"title":{},"content":{"1379":{"position":[[1819,13]]},"1403":{"position":[[1819,13]]},"1414":{"position":[[1819,13]]}},"keywords":{}}],["percentile_cont",{"_index":5551,"title":{},"content":{"1140":{"position":[[948,15]]},"1316":{"position":[[948,15]]},"1340":{"position":[[948,15]]},"1351":{"position":[[948,15]]},"1431":{"position":[[971,15]]}},"keywords":{}}],["percentile_di",{"_index":6318,"title":{},"content":{"1379":{"position":[[1885,13]]},"1403":{"position":[[1885,13]]},"1414":{"position":[[1885,13]]}},"keywords":{}}],["percentile_disc",{"_index":5555,"title":{},"content":{"1140":{"position":[[1010,15]]},"1316":{"position":[[1010,15]]},"1340":{"position":[[1010,15]]},"1351":{"position":[[1010,15]]},"1431":{"position":[[1033,15]]}},"keywords":{}}],["perfectli",{"_index":2496,"title":{},"content":{"234":{"position":[[588,9]]},"240":{"position":[[4175,9]]},"321":{"position":[[1145,9]]}},"keywords":{}}],["perform",{"_index":546,"title":{"101":{"position":[[0,12]]},"124":{"position":[[21,12]]},"355":{"position":[[0,11]]},"368":{"position":[[14,11]]},"410":{"position":[[0,11]]},"576":{"position":[[0,11]]},"587":{"position":[[0,11]]},"755":{"position":[[14,11]]},"768":{"position":[[14,11]]},"795":{"position":[[14,11]]},"810":{"position":[[14,11]]},"826":{"position":[[14,11]]},"900":{"position":[[0,11]]},"905":{"position":[[14,11]]},"920":{"position":[[14,11]]},"932":{"position":[[14,11]]},"948":{"position":[[14,11]]},"966":{"position":[[14,11]]},"1068":{"position":[[0,11]]},"1156":{"position":[[0,11]]},"1390":{"position":[[0,11]]},"1391":{"position":[[11,11]]}},"content":{"20":{"position":[[814,10],[966,8]]},"34":{"position":[[697,7]]},"56":{"position":[[228,8]]},"60":{"position":[[978,7]]},"62":{"position":[[581,8]]},"67":{"position":[[1570,10]]},"72":{"position":[[212,8]]},"74":{"position":[[141,8],[222,11]]},"101":{"position":[[15,11],[224,10],[677,12]]},"107":{"position":[[2507,7]]},"112":{"position":[[933,7]]},"115":{"position":[[723,11]]},"125":{"position":[[1272,7]]},"135":{"position":[[198,7],[779,7]]},"158":{"position":[[154,7]]},"162":{"position":[[504,7],[862,7]]},"163":{"position":[[473,8]]},"164":{"position":[[1172,7]]},"180":{"position":[[322,7],[964,12]]},"182":{"position":[[312,12],[338,7]]},"184":{"position":[[112,12]]},"185":{"position":[[149,12]]},"206":{"position":[[580,9]]},"275":{"position":[[55,9]]},"278":{"position":[[1622,7]]},"281":{"position":[[3044,11]]},"307":{"position":[[3407,9]]},"309":{"position":[[3731,9]]},"319":{"position":[[674,8]]},"322":{"position":[[1288,7]]},"324":{"position":[[1074,7]]},"333":{"position":[[408,11]]},"339":{"position":[[124,7]]},"373":{"position":[[499,7]]},"410":{"position":[[24,11]]},"443":{"position":[[62,11],[152,11],[230,11],[342,11],[423,11]]},"483":{"position":[[445,8]]},"660":{"position":[[633,10]]},"760":{"position":[[819,7]]},"773":{"position":[[819,7]]},"785":{"position":[[6,10]]},"800":{"position":[[819,7]]},"815":{"position":[[819,7]]},"831":{"position":[[819,7]]},"909":{"position":[[58,11],[1227,7]]},"910":{"position":[[316,11]]},"925":{"position":[[58,11],[1227,7]]},"926":{"position":[[316,11]]},"936":{"position":[[58,11],[1227,7]]},"937":{"position":[[316,11]]},"952":{"position":[[58,11],[1227,7]]},"953":{"position":[[316,11]]},"970":{"position":[[58,11],[1227,7]]},"971":{"position":[[316,11]]},"989":{"position":[[910,7]]},"1004":{"position":[[993,7]]},"1085":{"position":[[1071,11]]},"1149":{"position":[[447,11]]},"1151":{"position":[[1127,11]]},"1156":{"position":[[10,11]]},"1165":{"position":[[25,12],[135,7]]},"1182":{"position":[[362,11]]},"1191":{"position":[[364,11]]},"1243":{"position":[[294,11]]},"1262":{"position":[[364,11]]},"1282":{"position":[[359,12]]},"1288":{"position":[[333,12]]},"1310":{"position":[[374,12]]},"1358":{"position":[[103,8]]},"1389":{"position":[[363,11]]},"1391":{"position":[[129,11],[481,12],[580,7]]},"1392":{"position":[[116,11]]},"1434":{"position":[[804,7]]},"1452":{"position":[[2973,9]]},"1467":{"position":[[207,8]]}},"keywords":{}}],["performance_schema",{"_index":4624,"title":{},"content":{"757":{"position":[[2445,18]]},"770":{"position":[[2445,18]]},"797":{"position":[[2444,19]]},"812":{"position":[[2444,19]]},"828":{"position":[[2444,19]]}},"keywords":{}}],["performingvector",{"_index":5949,"title":{},"content":{"1276":{"position":[[88,16]]}},"keywords":{}}],["perhap",{"_index":1591,"title":{},"content":{"112":{"position":[[51,7]]},"189":{"position":[[371,7],[628,7]]},"324":{"position":[[134,7]]},"821":{"position":[[440,7],[544,7]]},"912":{"position":[[451,7],[560,7]]},"1461":{"position":[[692,7]]}},"keywords":{}}],["period",{"_index":107,"title":{},"content":{"3":{"position":[[202,13]]},"55":{"position":[[23,8],[122,12]]},"56":{"position":[[237,8]]},"110":{"position":[[783,8]]},"121":{"position":[[1247,12]]},"154":{"position":[[1697,7]]},"164":{"position":[[1236,12]]},"209":{"position":[[1650,7],[1690,6]]},"373":{"position":[[862,6]]},"480":{"position":[[28,12]]},"556":{"position":[[320,6]]},"560":{"position":[[149,7]]},"747":{"position":[[222,6],[285,6]]},"750":{"position":[[144,6]]},"764":{"position":[[53,6],[140,6],[786,6]]},"766":{"position":[[144,6]]},"767":{"position":[[1247,6],[1570,7]]},"777":{"position":[[53,6],[140,6],[786,6]]},"785":{"position":[[902,6]]},"789":{"position":[[162,6]]},"792":{"position":[[1543,6]]},"804":{"position":[[53,6],[138,6],[784,6]]},"807":{"position":[[162,6]]},"819":{"position":[[53,6],[138,6],[784,6]]},"821":{"position":[[93,12],[778,12]]},"823":{"position":[[162,6]]},"824":{"position":[[1313,6],[1634,7]]},"835":{"position":[[53,6],[138,6],[784,6]]},"869":{"position":[[1169,6]]},"912":{"position":[[101,12],[794,12]]},"945":{"position":[[941,6]]},"1140":{"position":[[1098,6]]},"1316":{"position":[[1098,6]]},"1340":{"position":[[1098,6]]},"1351":{"position":[[1098,6]]},"1356":{"position":[[751,7],[1228,6]]},"1431":{"position":[[1121,6]]},"1448":{"position":[[24,13]]},"1452":{"position":[[454,7],[2866,7],[2941,7]]},"1471":{"position":[[1062,7]]}},"keywords":{}}],["periodfor",{"_index":4691,"title":{},"content":{"785":{"position":[[810,9]]}},"keywords":{}}],["permalink",{"_index":5347,"title":{},"content":{"1089":{"position":[[98,10],[126,10]]}},"keywords":{}}],["perman",{"_index":1159,"title":{},"content":{"82":{"position":[[984,11]]},"117":{"position":[[633,12]]},"138":{"position":[[392,11]]},"141":{"position":[[702,11]]},"142":{"position":[[505,11]]},"411":{"position":[[258,9]]},"764":{"position":[[459,11]]},"777":{"position":[[459,11]]},"804":{"position":[[457,11]]},"819":{"position":[[457,11]]},"835":{"position":[[457,11]]}},"keywords":{}}],["permiss",{"_index":731,"title":{},"content":{"41":{"position":[[471,11]]},"70":{"position":[[313,11]]},"135":{"position":[[538,11]]},"160":{"position":[[26,10]]},"162":{"position":[[418,10]]},"165":{"position":[[1244,11]]},"192":{"position":[[1458,11]]},"202":{"position":[[202,11],[332,11],[426,12]]},"207":{"position":[[1144,11]]},"217":{"position":[[1930,11]]},"218":{"position":[[1397,10]]},"237":{"position":[[423,11],[970,12]]},"259":{"position":[[896,10],[2477,10]]},"301":{"position":[[1410,10]]},"366":{"position":[[719,12],[1051,12]]},"367":{"position":[[284,12]]},"390":{"position":[[192,12],[380,11]]},"395":{"position":[[352,12],[549,11]]},"400":{"position":[[152,12]]},"402":{"position":[[315,12]]},"406":{"position":[[323,10],[441,11]]},"413":{"position":[[321,12]]},"477":{"position":[[183,11],[362,10],[462,12]]},"478":{"position":[[101,11]]},"515":{"position":[[650,11],[874,10],[898,10]]},"562":{"position":[[134,11]]},"571":{"position":[[882,11],[932,13]]},"582":{"position":[[499,12]]},"598":{"position":[[144,11],[326,10],[426,12]]},"599":{"position":[[101,11]]},"623":{"position":[[81,11]]},"670":{"position":[[444,12]]},"683":{"position":[[166,11]]},"698":{"position":[[101,12]]},"709":{"position":[[551,10]]},"723":{"position":[[104,11],[238,12]]},"750":{"position":[[766,12]]},"752":{"position":[[369,11],[481,10]]},"753":{"position":[[1025,11],[1137,10]]},"766":{"position":[[766,12]]},"767":{"position":[[1787,12]]},"789":{"position":[[1167,12]]},"791":{"position":[[322,11],[434,10]]},"792":{"position":[[1727,12]]},"793":{"position":[[996,11],[1108,10]]},"807":{"position":[[754,12]]},"808":{"position":[[942,11],[1054,10]]},"823":{"position":[[754,12]]},"824":{"position":[[1849,12]]},"839":{"position":[[54,11]]},"840":{"position":[[1021,11],[2440,11]]},"847":{"position":[[375,11]]},"848":{"position":[[54,11]]},"849":{"position":[[1736,11],[1821,11],[1924,11],[2004,13],[2032,11],[3580,11]]},"864":{"position":[[84,10]]},"876":{"position":[[84,10]]},"903":{"position":[[745,12],[1077,12]]},"904":{"position":[[1388,12]]},"915":{"position":[[745,12],[1077,12]]},"917":{"position":[[202,11],[870,11]]},"918":{"position":[[1680,12]]},"919":{"position":[[862,12],[1395,11]]},"930":{"position":[[745,12],[1077,12]]},"931":{"position":[[1045,12]]},"963":{"position":[[899,12],[1231,12]]},"965":{"position":[[202,11],[870,11]]},"989":{"position":[[275,12]]},"1004":{"position":[[358,12]]},"1026":{"position":[[35,10]]},"1032":{"position":[[614,11]]},"1040":{"position":[[697,11],[879,11]]},"1042":{"position":[[314,11],[664,12]]},"1043":{"position":[[978,11],[1328,12]]},"1050":{"position":[[697,11],[879,11]]},"1051":{"position":[[1240,11],[1590,12]]},"1058":{"position":[[697,11],[879,11]]},"1059":{"position":[[1033,11],[1383,12]]},"1089":{"position":[[246,11]]},"1105":{"position":[[24,10]]},"1122":{"position":[[176,11]]},"1142":{"position":[[177,10]]},"1149":{"position":[[195,11]]},"1160":{"position":[[231,11]]},"1168":{"position":[[177,10]]},"1204":{"position":[[385,11]]}},"keywords":{}}],["permissions"",{"_index":4819,"title":{},"content":{"849":{"position":[[1687,18]]}},"keywords":{}}],["permissions.gr",{"_index":1751,"title":{},"content":{"135":{"position":[[517,20]]}},"keywords":{}}],["permissions.slack",{"_index":6277,"title":{},"content":{"1361":{"position":[[99,17]]}},"keywords":{}}],["permissionsus",{"_index":4334,"title":{},"content":{"622":{"position":[[353,15]]}},"keywords":{}}],["permit",{"_index":350,"title":{},"content":{"11":{"position":[[1890,6]]},"83":{"position":[[195,9]]},"89":{"position":[[328,9]]},"221":{"position":[[1978,9]]},"767":{"position":[[2302,8]]},"792":{"position":[[2283,8]]},"794":{"position":[[540,9]]},"809":{"position":[[540,9]]},"824":{"position":[[2414,8]]},"825":{"position":[[540,9]]},"989":{"position":[[1045,9]]},"1004":{"position":[[1128,9]]},"1286":{"position":[[597,9]]},"1301":{"position":[[597,9]]},"1325":{"position":[[597,9]]}},"keywords":{}}],["permitted.prior",{"_index":4714,"title":{},"content":{"794":{"position":[[462,15]]},"809":{"position":[[462,15]]},"825":{"position":[[462,15]]},"1286":{"position":[[519,15]]},"1301":{"position":[[519,15]]},"1325":{"position":[[519,15]]}},"keywords":{}}],["permut",{"_index":5564,"title":{},"content":{"1140":{"position":[[1145,7]]},"1316":{"position":[[1145,7]]},"1340":{"position":[[1145,7]]},"1351":{"position":[[1145,7]]},"1431":{"position":[[1168,7]]}},"keywords":{}}],["perpetu",{"_index":2266,"title":{},"content":{"209":{"position":[[587,11]]}},"keywords":{}}],["persist",{"_index":40,"title":{},"content":{"1":{"position":[[483,10]]},"96":{"position":[[737,11]]},"100":{"position":[[40,10],[1252,11]]},"104":{"position":[[135,10]]},"232":{"position":[[518,7]]},"278":{"position":[[441,11]]},"411":{"position":[[181,9]]},"752":{"position":[[947,7],[1068,7]]},"791":{"position":[[981,7],[1102,7]]},"1291":{"position":[[140,9]]},"1292":{"position":[[5515,7]]},"1305":{"position":[[140,9]]},"1306":{"position":[[5515,7]]},"1328":{"position":[[140,9]]},"1329":{"position":[[5515,7]]},"1437":{"position":[[61,8]]},"1438":{"position":[[45,8]]},"1448":{"position":[[867,8]]}},"keywords":{}}],["persist_onli",{"_index":6193,"title":{},"content":{"1292":{"position":[[5566,12]]},"1306":{"position":[[5566,12]]},"1329":{"position":[[5566,12]]}},"keywords":{}}],["person",{"_index":3274,"title":{"524":{"position":[[55,8]]},"532":{"position":[[55,8]]}},"content":{"359":{"position":[[184,8],[210,8]]},"522":{"position":[[123,8]]},"524":{"position":[[73,8]]},"530":{"position":[[123,8]]},"531":{"position":[[179,8]]},"532":{"position":[[129,8]]},"534":{"position":[[693,8]]},"631":{"position":[[150,8]]},"1188":{"position":[[573,8],[651,8]]}},"keywords":{}}],["personal_access_token",{"_index":4018,"title":{},"content":{"527":{"position":[[221,22]]},"535":{"position":[[221,22]]},"1189":{"position":[[235,22]]}},"keywords":{}}],["perspect",{"_index":2596,"title":{},"content":{"239":{"position":[[1995,12]]},"271":{"position":[[345,12]]}},"keywords":{}}],["pertain",{"_index":2118,"title":{},"content":{"190":{"position":[[575,10]]}},"keywords":{}}],["pertin",{"_index":6521,"title":{},"content":{"1448":{"position":[[1120,9]]}},"keywords":{}}],["pg",{"_index":3044,"title":{},"content":{"307":{"position":[[1140,2],[1990,2]]}},"keywords":{}}],["pg_catalog",{"_index":5037,"title":{},"content":{"917":{"position":[[730,10],[1010,12]]},"919":{"position":[[1261,10],[1535,12]]},"965":{"position":[[730,10],[1010,12]]}},"keywords":{}}],["pg_catalog.pg_attribut",{"_index":5044,"title":{},"content":{"919":{"position":[[1921,24]]}},"keywords":{}}],["pg_catalog.pg_class",{"_index":5045,"title":{},"content":{"919":{"position":[[1946,20]]}},"keywords":{}}],["pg_catalog.pg_index",{"_index":5046,"title":{},"content":{"919":{"position":[[1967,20]]}},"keywords":{}}],["pg_catalog.pg_namespac",{"_index":5047,"title":{},"content":{"919":{"position":[[1988,23]]}},"keywords":{}}],["pg_drop_replication_slot('flow_slot",{"_index":5060,"title":{},"content":{"922":{"position":[[1889,38]]}},"keywords":{}}],["pg_isreadi",{"_index":2517,"title":{},"content":{"236":{"position":[[942,11]]}},"keywords":{}}],["pg_read_all_data",{"_index":2560,"title":{},"content":{"236":{"position":[[2924,16]]},"237":{"position":[[635,16],[684,16],[844,16]]},"917":{"position":[[445,16]]},"919":{"position":[[980,16]]},"965":{"position":[[445,16]]}},"keywords":{}}],["pg_replication_slot",{"_index":5059,"title":{},"content":{"922":{"position":[[1820,20]]}},"keywords":{}}],["pga",{"_index":4895,"title":{},"content":{"870":{"position":[[567,3]]}},"keywords":{}}],["pga_aggregate_limit",{"_index":4896,"title":{},"content":{"870":{"position":[[607,19]]}},"keywords":{}}],["phase",{"_index":2594,"title":{"1441":{"position":[[9,7]]}},"content":{"239":{"position":[[1325,5]]},"254":{"position":[[3768,6]]},"296":{"position":[[6671,5]]},"1292":{"position":[[5613,5]]},"1306":{"position":[[5613,5]]},"1329":{"position":[[5613,5]]},"1434":{"position":[[1130,6],[1735,6],[2218,6]]},"1437":{"position":[[460,5]]},"1438":{"position":[[131,7]]},"1439":{"position":[[656,6]]},"1440":{"position":[[261,6]]},"1442":{"position":[[1318,5]]},"1443":{"position":[[1048,6]]},"1444":{"position":[[1056,6]]}},"keywords":{}}],["phone",{"_index":500,"title":{},"content":{"17":{"position":[[673,6]]},"295":{"position":[[284,5]]},"296":{"position":[[496,6],[1467,6],[4681,7],[5050,7],[6456,6]]},"1110":{"position":[[115,5],[147,5],[176,5],[206,5],[337,5],[369,5]]}},"keywords":{}}],["physic",{"_index":63,"title":{"2":{"position":[[0,8]]}},"content":{"2":{"position":[[71,8],[118,8],[215,8],[506,8],[683,8]]},"3":{"position":[[675,8]]},"16":{"position":[[657,8],[1261,8],[1375,8]]},"48":{"position":[[79,8]]},"101":{"position":[[648,8]]},"107":{"position":[[303,8]]},"320":{"position":[[1802,8]]},"1391":{"position":[[193,10],[858,10]]}},"keywords":{}}],["pick",{"_index":4615,"title":{},"content":{"757":{"position":[[1355,4]]},"770":{"position":[[1355,4]]},"797":{"position":[[1355,4]]},"812":{"position":[[1355,4]]},"828":{"position":[[1355,4]]},"859":{"position":[[272,4]]},"867":{"position":[[2063,4]]}},"keywords":{}}],["picker",{"_index":6726,"title":{},"content":{"1479":{"position":[[446,6]]}},"keywords":{}}],["piec",{"_index":1836,"title":{},"content":{"146":{"position":[[365,6]]},"149":{"position":[[374,6]]},"152":{"position":[[381,6]]},"183":{"position":[[3374,6]]},"281":{"position":[[1645,5]]},"329":{"position":[[225,5]]}},"keywords":{}}],["pikachu"",{"_index":1729,"title":{},"content":{"129":{"position":[[1271,13]]},"130":{"position":[[335,13]]}},"keywords":{}}],["pinecon",{"_index":5427,"title":{"1273":{"position":[[0,8]]},"1276":{"position":[[0,8]]}},"content":{"1120":{"position":[[1521,8]]},"1274":{"position":[[40,8],[147,8]]},"1276":{"position":[[1,8],[288,8],[307,8]]},"1277":{"position":[[67,8],[82,8],[233,8],[276,8],[351,8],[368,8],[1053,8],[1084,8]]},"1279":{"position":[[54,8],[430,8]]}},"keywords":{}}],["pinecone:dev",{"_index":5428,"title":{},"content":{"1120":{"position":[[1581,12]]}},"keywords":{}}],["pinecone:dev"",{"_index":5958,"title":{},"content":{"1278":{"position":[[104,18]]}},"keywords":{}}],["pineconeapikey",{"_index":5952,"title":{},"content":{"1277":{"position":[[335,15]]},"1278":{"position":[[178,15]]}},"keywords":{}}],["pinterest",{"_index":4945,"title":{"893":{"position":[[0,9]]}},"content":{"894":{"position":[[15,9],[85,9]]},"895":{"position":[[38,9],[332,9],[511,9],[590,9]]},"896":{"position":[[250,9]]},"897":{"position":[[326,9]]},"899":{"position":[[5,9]]},"900":{"position":[[5,9],[373,9]]}},"keywords":{}}],["pipe",{"_index":3144,"title":{},"content":{"321":{"position":[[2157,6]]}},"keywords":{}}],["pipelin",{"_index":1930,"title":{"329":{"position":[[17,10]]}},"content":{"163":{"position":[[1001,10]]},"198":{"position":[[1132,9]]},"212":{"position":[[80,8]]},"232":{"position":[[48,8],[183,8],[321,8],[777,8]]},"240":{"position":[[4341,9]]},"241":{"position":[[54,8]]},"243":{"position":[[80,8]]},"295":{"position":[[186,8]]},"319":{"position":[[513,8]]},"324":{"position":[[871,8]]},"329":{"position":[[44,9]]},"330":{"position":[[314,10]]},"331":{"position":[[26,9]]},"332":{"position":[[87,10],[380,9]]},"649":{"position":[[493,9]]},"1434":{"position":[[1061,9]]},"1442":{"position":[[1070,8]]},"1443":{"position":[[719,9]]}},"keywords":{}}],["pipelinesdealsemail",{"_index":4384,"title":{},"content":{"649":{"position":[[266,19]]}},"keywords":{}}],["pivot",{"_index":85,"title":{},"content":{"2":{"position":[[436,5]]},"16":{"position":[[1242,5]]},"1379":{"position":[[1931,5]]},"1403":{"position":[[1931,5]]},"1414":{"position":[[1931,5]]}},"keywords":{}}],["pkcs8",{"_index":6368,"title":{},"content":{"1384":{"position":[[301,5]]}},"keywords":{}}],["place",{"_index":938,"title":{},"content":{"62":{"position":[[470,5]]},"82":{"position":[[1700,6],[1752,5],[4039,5]]},"121":{"position":[[1838,5]]},"183":{"position":[[3406,6]]},"240":{"position":[[3733,6]]},"267":{"position":[[545,5]]},"281":{"position":[[400,5]]},"307":{"position":[[2700,6]]},"310":{"position":[[399,6]]},"314":{"position":[[3006,6]]},"323":{"position":[[73,5]]},"329":{"position":[[993,6]]},"760":{"position":[[157,5],[672,5]]},"773":{"position":[[157,5],[672,5]]},"800":{"position":[[157,5],[672,5]]},"815":{"position":[[157,5],[672,5]]},"831":{"position":[[157,5],[672,5]]},"840":{"position":[[849,6],[2372,6]]},"849":{"position":[[1324,6],[3512,6]]},"1140":{"position":[[1183,7]]},"1316":{"position":[[1183,7]]},"1340":{"position":[[1183,7]]},"1351":{"position":[[1183,7]]},"1431":{"position":[[1206,7]]}},"keywords":{}}],["placehold",{"_index":1424,"title":{},"content":{"99":{"position":[[154,12]]},"165":{"position":[[1873,11],[1949,11]]},"183":{"position":[[1519,11]]},"267":{"position":[[1538,11]]}},"keywords":{}}],["plain",{"_index":670,"title":{},"content":{"34":{"position":[[280,5]]},"96":{"position":[[40,5]]},"250":{"position":[[360,8]]},"1286":{"position":[[1662,5]]},"1301":{"position":[[1498,5]]},"1325":{"position":[[1662,5]]}},"keywords":{}}],["plainsasl",{"_index":2639,"title":{},"content":{"247":{"position":[[209,9]]},"1118":{"position":[[421,9]]}},"keywords":{}}],["plaintext",{"_index":1232,"title":{},"content":{"83":{"position":[[1334,10]]},"429":{"position":[[667,9]]}},"keywords":{}}],["plan",{"_index":1755,"title":{},"content":{"135":{"position":[[771,4]]},"189":{"position":[[383,4],[552,4]]},"326":{"position":[[106,5]]},"375":{"position":[[127,5],[217,5],[274,4]]},"377":{"position":[[543,4],[581,5],[1388,5]]},"379":{"position":[[257,7],[778,4],[1129,4]]},"496":{"position":[[219,4]]},"603":{"position":[[165,7]]},"1067":{"position":[[181,5]]},"1078":{"position":[[1554,5]]},"1165":{"position":[[218,9]]},"1243":{"position":[[481,4]]},"1370":{"position":[[714,4]]},"1379":{"position":[[1977,4]]},"1403":{"position":[[1977,4]]},"1414":{"position":[[1977,4]]}},"keywords":{}}],["platform",{"_index":272,"title":{"788":{"position":[[10,10]]},"902":{"position":[[23,10]]},"914":{"position":[[23,10]]},"929":{"position":[[23,10]]},"962":{"position":[[23,10]]},"1039":{"position":[[23,10]]},"1049":{"position":[[23,10]]},"1057":{"position":[[23,10]]},"1288":{"position":[[23,10]]}},"content":{"8":{"position":[[684,10]]},"38":{"position":[[429,9]]},"82":{"position":[[622,8]]},"83":{"position":[[344,10]]},"84":{"position":[[20,9],[307,8],[850,8],[913,8],[1342,9]]},"130":{"position":[[372,9]]},"135":{"position":[[69,9]]},"180":{"position":[[628,8]]},"189":{"position":[[584,8]]},"210":{"position":[[2481,9]]},"240":{"position":[[366,8]]},"320":{"position":[[2389,9]]},"324":{"position":[[1040,9]]},"419":{"position":[[15,9]]},"440":{"position":[[15,9]]},"487":{"position":[[33,9],[530,9]]},"547":{"position":[[15,9]]},"764":{"position":[[970,8]]},"777":{"position":[[970,8]]},"784":{"position":[[190,8]]},"788":{"position":[[142,10]]},"804":{"position":[[968,8]]},"819":{"position":[[968,8]]},"835":{"position":[[968,8]]},"902":{"position":[[75,10]]},"914":{"position":[[75,10],[171,10]]},"1039":{"position":[[275,10]]},"1198":{"position":[[279,8]]},"1255":{"position":[[190,8]]},"1282":{"position":[[219,9],[318,10]]},"1288":{"position":[[193,9],[292,10]]},"1289":{"position":[[896,8]]},"1310":{"position":[[234,9],[333,10]]},"1322":{"position":[[1115,8]]}},"keywords":{}}],["platform'",{"_index":3814,"title":{},"content":{"477":{"position":[[565,10],[812,10]]},"478":{"position":[[423,10]]},"598":{"position":[[529,10],[775,10]]},"599":{"position":[[423,10]]},"1289":{"position":[[1451,10]]},"1298":{"position":[[1283,10]]},"1310":{"position":[[772,10]]},"1322":{"position":[[1670,10]]},"1335":{"position":[[1318,10]]}},"keywords":{}}],["play",{"_index":2901,"title":{},"content":{"281":{"position":[[2578,4]]},"296":{"position":[[7992,4]]}},"keywords":{}}],["pleas",{"_index":3787,"title":{},"content":{"472":{"position":[[359,6]]},"490":{"position":[[113,6]]},"663":{"position":[[113,6]]},"678":{"position":[[113,6]]},"693":{"position":[[113,6]]},"900":{"position":[[66,6]]},"945":{"position":[[1065,6]]},"1008":{"position":[[983,6],[1801,6]]}},"keywords":{}}],["plenti",{"_index":1933,"title":{},"content":{"163":{"position":[[1140,6]]}},"keywords":{}}],["plug",{"_index":1367,"title":{},"content":{"95":{"position":[[76,4]]},"189":{"position":[[1650,4]]},"216":{"position":[[419,4]]},"289":{"position":[[539,4]]},"300":{"position":[[486,4]]}},"keywords":{}}],["plugin",{"_index":695,"title":{},"content":{"38":{"position":[[16,6]]},"1292":{"position":[[5660,6],[5698,7]]},"1306":{"position":[[5660,6],[5698,7]]},"1329":{"position":[[5660,6],[5698,7]]}},"keywords":{}}],["plugin_dir",{"_index":6201,"title":{},"content":{"1292":{"position":[[5745,10]]},"1306":{"position":[[5745,10]]},"1329":{"position":[[5745,10]]}},"keywords":{}}],["point",{"_index":1455,"title":{},"content":{"101":{"position":[[481,5]]},"208":{"position":[[1638,5]]},"209":{"position":[[1234,5]]},"309":{"position":[[1865,8]]},"761":{"position":[[446,5]]},"762":{"position":[[565,5]]},"774":{"position":[[446,5]]},"775":{"position":[[565,5]]},"801":{"position":[[452,5]]},"802":{"position":[[565,5]]},"816":{"position":[[452,5]]},"817":{"position":[[565,5]]},"832":{"position":[[452,5]]},"833":{"position":[[565,5]]},"879":{"position":[[1667,6]]},"922":{"position":[[674,5],[833,5],[1157,5]]},"977":{"position":[[260,5]]},"1077":{"position":[[322,5]]},"1292":{"position":[[5787,5]]},"1306":{"position":[[5787,5]]},"1329":{"position":[[5787,5]]},"1453":{"position":[[835,6]]},"1461":{"position":[[3239,6],[4842,6]]}},"keywords":{}}],["pointer",{"_index":1038,"title":{},"content":{"69":{"position":[[520,8]]},"70":{"position":[[542,8],[662,7]]},"71":{"position":[[119,8]]},"76":{"position":[[563,7],[742,7],[859,7]]},"94":{"position":[[2925,8]]},"107":{"position":[[1279,8]]},"228":{"position":[[538,8],[558,9]]},"254":{"position":[[2307,8]]},"296":{"position":[[2175,8]]},"306":{"position":[[149,8]]},"307":{"position":[[19,7]]},"314":{"position":[[1848,8]]},"1047":{"position":[[709,8]]},"1055":{"position":[[709,8]]},"1063":{"position":[[709,8]]},"1467":{"position":[[1675,8]]},"1476":{"position":[[762,8]]},"1477":{"position":[[2711,9]]}},"keywords":{}}],["pointersfor",{"_index":1893,"title":{},"content":{"161":{"position":[[175,11]]}},"keywords":{}}],["polici",{"_index":675,"title":{},"content":{"34":{"position":[[575,10]]},"83":{"position":[[179,7]]},"171":{"position":[[175,7]]},"172":{"position":[[153,7],[173,6]]},"221":{"position":[[1849,9]]},"279":{"position":[[91,7],[467,6],[943,9]]},"299":{"position":[[309,6]]},"390":{"position":[[447,6]]},"395":{"position":[[617,6],[690,8]]},"406":{"position":[[479,7]]},"413":{"position":[[268,7],[276,8]]},"414":{"position":[[41,6],[134,6],[185,6],[221,6],[780,6],[827,6]]},"415":{"position":[[144,6],[394,6],[445,6],[481,6],[965,6],[991,6]]},"522":{"position":[[363,8]]},"530":{"position":[[363,8]]},"856":{"position":[[264,7]]},"1122":{"position":[[244,6],[317,8]]},"1204":{"position":[[121,6],[426,8],[459,6]]}},"keywords":{}}],["policiessolut",{"_index":3916,"title":{},"content":{"506":{"position":[[314,16]]}},"keywords":{}}],["policiestagsticket",{"_index":5453,"title":{},"content":{"1128":{"position":[[282,18]]}},"keywords":{}}],["policy"",{"_index":4037,"title":{},"content":{"531":{"position":[[520,12]]}},"keywords":{}}],["policy.if",{"_index":3561,"title":{},"content":{"406":{"position":[[349,9]]}},"keywords":{}}],["policy/term",{"_index":4838,"title":{},"content":{"856":{"position":[[304,12]]}},"keywords":{}}],["poll",{"_index":1928,"title":{"1036":{"position":[[0,7]]}},"content":{"163":{"position":[[881,9]]},"250":{"position":[[961,4]]},"410":{"position":[[180,4]]},"480":{"position":[[1175,7],[1471,7],[1518,7],[1652,8]]},"482":{"position":[[370,4],[397,4],[778,7],[811,5],[817,4],[851,7]]},"821":{"position":[[843,7]]},"912":{"position":[[862,7],[1492,7]]},"1036":{"position":[[144,4],[280,7],[915,7]]}},"keywords":{}}],["poll.max",{"_index":3575,"title":{},"content":{"410":{"position":[[120,8]]}},"keywords":{}}],["pollev",{"_index":4943,"title":{},"content":{"892":{"position":[[615,10]]}},"keywords":{}}],["polygon",{"_index":6204,"title":{},"content":{"1292":{"position":[[5829,7]]},"1306":{"position":[[5829,7]]},"1329":{"position":[[5829,7]]}},"keywords":{}}],["pooler",{"_index":5124,"title":{},"content":{"963":{"position":[[165,7]]},"964":{"position":[[89,7],[108,7],[173,6],[478,6]]}},"keywords":{}}],["poolsreject",{"_index":4332,"title":{},"content":{"622":{"position":[[293,14]]}},"keywords":{}}],["pop",{"_index":2057,"title":{},"content":{"181":{"position":[[82,3]]},"210":{"position":[[1905,3]]},"267":{"position":[[219,3]]},"436":{"position":[[713,3]]},"1455":{"position":[[408,3]]},"1470":{"position":[[150,3]]}},"keywords":{}}],["popul",{"_index":845,"title":{},"content":{"56":{"position":[[1367,9]]},"144":{"position":[[770,9]]},"181":{"position":[[103,8]]},"218":{"position":[[188,9]]}},"keywords":{}}],["popular",{"_index":2918,"title":{},"content":{"286":{"position":[[60,7]]},"319":{"position":[[143,8]]},"320":{"position":[[2363,7]]},"417":{"position":[[2094,7]]}},"keywords":{}}],["port",{"_index":1210,"title":{},"content":{"83":{"position":[[138,4],[428,4],[485,4]]},"184":{"position":[[456,5]]},"221":{"position":[[782,4],[873,5]]},"225":{"position":[[226,4],[317,5]]},"236":{"position":[[1088,6]]},"238":{"position":[[231,4]]},"402":{"position":[[136,5],[142,4],[147,4]]},"403":{"position":[[186,5]]},"753":{"position":[[1572,4]]},"767":{"position":[[2432,5]]},"782":{"position":[[86,4]]},"792":{"position":[[2413,5]]},"793":{"position":[[1595,4]]},"808":{"position":[[1565,4]]},"824":{"position":[[2544,5]]},"904":{"position":[[2359,5]]},"918":{"position":[[2651,5]]},"919":{"position":[[2502,4]]},"931":{"position":[[2044,4]]},"1021":{"position":[[359,4]]},"1043":{"position":[[1862,4]]},"1051":{"position":[[2075,5]]},"1059":{"position":[[1891,4]]},"1138":{"position":[[377,5]]},"1151":{"position":[[86,4]]},"1188":{"position":[[86,4],[142,4],[189,4]]},"1253":{"position":[[86,4]]},"1267":{"position":[[75,4],[132,4]]},"1285":{"position":[[169,4],[222,4]]},"1289":{"position":[[1330,4],[1411,4],[1519,4],[1578,4],[1690,4]]},"1292":{"position":[[5877,4]]},"1298":{"position":[[1162,4],[1243,4]]},"1300":{"position":[[169,4],[222,4]]},"1303":{"position":[[1041,4],[1687,4]]},"1306":{"position":[[5877,4]]},"1310":{"position":[[651,4],[732,4],[840,4],[899,4],[1011,4],[1083,4],[1091,5]]},"1313":{"position":[[160,4],[213,4]]},"1322":{"position":[[1549,4],[1630,4],[1720,4],[1728,5]]},"1324":{"position":[[169,4],[222,4]]},"1329":{"position":[[5877,4]]},"1335":{"position":[[1197,4],[1278,4],[1368,4],[1376,5]]},"1337":{"position":[[160,4],[213,4]]},"1346":{"position":[[1163,4],[1244,4],[1304,4]]},"1348":{"position":[[160,4],[213,4]]},"1373":{"position":[[1324,5]]},"1374":{"position":[[1328,5]]},"1376":{"position":[[169,4],[222,4]]},"1397":{"position":[[1126,4]]},"1398":{"position":[[1129,4]]},"1400":{"position":[[169,4],[222,4]]},"1409":{"position":[[1135,4]]},"1411":{"position":[[169,4],[222,4]]},"1420":{"position":[[84,4]]},"1425":{"position":[[131,5]]},"1427":{"position":[[160,4]]},"1447":{"position":[[157,5]]}},"keywords":{}}],["port.googl",{"_index":5979,"title":{},"content":{"1289":{"position":[[1527,11]]},"1310":{"position":[[848,11]]}},"keywords":{}}],["portal",{"_index":3694,"title":{},"content":{"436":{"position":[[39,7]]},"446":{"position":[[233,7]]},"840":{"position":[[69,7],[223,7]]},"849":{"position":[[166,7]]}},"keywords":{}}],["portal.ensur",{"_index":4529,"title":{},"content":{"726":{"position":[[131,13]]}},"keywords":{}}],["portan",{"_index":3653,"title":{},"content":{"428":{"position":[[105,6]]}},"keywords":{}}],["portion",{"_index":1194,"title":{},"content":{"82":{"position":[[3419,8]]},"1140":{"position":[[1234,7]]},"1316":{"position":[[1234,7]]},"1340":{"position":[[1234,7]]},"1351":{"position":[[1234,7]]},"1431":{"position":[[1257,7]]}},"keywords":{}}],["posit",{"_index":1879,"title":{},"content":{"159":{"position":[[737,8],[824,8],[1017,9]]},"161":{"position":[[895,9]]},"922":{"position":[[1065,8]]},"1140":{"position":[[1280,8]]},"1316":{"position":[[1280,8]]},"1340":{"position":[[1280,8]]},"1351":{"position":[[1280,8]]},"1379":{"position":[[2022,8]]},"1403":{"position":[[2022,8]]},"1414":{"position":[[2022,8]]},"1431":{"position":[[1303,8]]}},"keywords":{}}],["position_reg",{"_index":6320,"title":{},"content":{"1379":{"position":[[2076,13]]},"1403":{"position":[[2076,13]]},"1414":{"position":[[2076,13]]}},"keywords":{}}],["position_regex",{"_index":5576,"title":{},"content":{"1140":{"position":[[1326,14]]},"1316":{"position":[[1326,14]]},"1340":{"position":[[1326,14]]},"1351":{"position":[[1326,14]]},"1431":{"position":[[1349,14]]}},"keywords":{}}],["possibl",{"_index":1121,"title":{},"content":{"81":{"position":[[925,8]]},"82":{"position":[[924,8]]},"84":{"position":[[236,8]]},"87":{"position":[[183,8]]},"101":{"position":[[301,9]]},"105":{"position":[[950,8],[1157,9]]},"115":{"position":[[1189,8]]},"126":{"position":[[102,9]]},"163":{"position":[[933,9],[1041,9]]},"175":{"position":[[71,8]]},"190":{"position":[[166,8]]},"192":{"position":[[116,8]]},"213":{"position":[[340,9]]},"219":{"position":[[69,14],[161,9]]},"237":{"position":[[929,8]]},"259":{"position":[[684,8]]},"290":{"position":[[1244,8]]},"309":{"position":[[1070,8]]},"321":{"position":[[2285,9]]},"364":{"position":[[211,8]]},"373":{"position":[[912,8]]},"489":{"position":[[897,9]]},"662":{"position":[[897,9]]},"677":{"position":[[897,9]]},"692":{"position":[[897,9]]},"750":{"position":[[203,9]]},"766":{"position":[[203,9]]},"789":{"position":[[237,9]]},"807":{"position":[[237,9]]},"821":{"position":[[229,9]]},"823":{"position":[[237,9]]},"869":{"position":[[656,8],[981,8]]},"909":{"position":[[1047,8]]},"912":{"position":[[240,9]]},"925":{"position":[[1047,8]]},"936":{"position":[[1047,8]]},"952":{"position":[[1047,8]]},"970":{"position":[[1047,8]]},"1008":{"position":[[71,8]]},"1009":{"position":[[1139,8]]},"1147":{"position":[[432,8]]},"1166":{"position":[[26,8],[169,11]]},"1174":{"position":[[432,8]]},"1183":{"position":[[214,8]]},"1216":{"position":[[432,8]]},"1224":{"position":[[432,8]]},"1268":{"position":[[109,8]]},"1286":{"position":[[1632,8]]},"1301":{"position":[[1468,8]]},"1325":{"position":[[1632,8]]},"1449":{"position":[[245,8]]},"1451":{"position":[[841,9]]},"1452":{"position":[[2622,9],[2776,8],[3453,8]]},"1459":{"position":[[514,8]]},"1476":{"position":[[827,8]]}},"keywords":{}}],["post",{"_index":2096,"title":{"786":{"position":[[22,4]]}},"content":{"185":{"position":[[175,4]]},"322":{"position":[[224,4],[1100,4]]},"486":{"position":[[137,4]]},"658":{"position":[[137,4]]},"674":{"position":[[137,4]]},"689":{"position":[[137,4]]},"723":{"position":[[299,6]]},"786":{"position":[[88,4]]},"989":{"position":[[1266,4]]},"1004":{"position":[[1349,4]]},"1134":{"position":[[1329,5]]},"1239":{"position":[[169,4],[199,4]]},"1241":{"position":[[215,4]]}},"keywords":{}}],["post/fruity_pebbles/nutrit",{"_index":6519,"title":{},"content":{"1448":{"position":[[761,29]]}},"keywords":{}}],["post/fruity_pebbles/nutritionfact",{"_index":6517,"title":{},"content":{"1448":{"position":[[557,35]]}},"keywords":{}}],["post_com",{"_index":5485,"title":{},"content":{"1134":{"position":[[1427,13]]}},"keywords":{}}],["post_comment_vot",{"_index":5487,"title":{},"content":{"1134":{"position":[[1515,18]]}},"keywords":{}}],["post_vot",{"_index":5489,"title":{},"content":{"1134":{"position":[[1612,10]]}},"keywords":{}}],["postfix",{"_index":6321,"title":{},"content":{"1379":{"position":[[2125,7]]},"1403":{"position":[[2125,7]]},"1414":{"position":[[2125,7]]}},"keywords":{}}],["postgr",{"_index":415,"title":{"943":{"position":[[12,8]]},"944":{"position":[[31,8]]},"947":{"position":[[9,8]]}},"content":{"13":{"position":[[1708,8]]},"81":{"position":[[1415,8],[1430,8],[2708,8],[2723,8]]},"83":{"position":[[878,8]]},"120":{"position":[[2091,8]]},"138":{"position":[[1038,9],[1095,9]]},"179":{"position":[[456,8]]},"180":{"position":[[23,8],[707,8],[934,8]]},"182":{"position":[[287,9]]},"184":{"position":[[48,9],[414,8],[511,10],[721,8],[884,8]]},"185":{"position":[[9,8]]},"208":{"position":[[1919,8]]},"236":{"position":[[595,9],[710,8],[747,8],[769,8],[797,8],[1277,8],[1301,8],[1329,8],[1405,8],[1440,9]]},"237":{"position":[[2929,8]]},"238":{"position":[[515,8],[900,8],[912,8],[939,9],[993,10],[1135,8],[1172,8],[1190,10],[1259,10]]},"240":{"position":[[3858,9],[4564,9]]},"242":{"position":[[167,8]]},"307":{"position":[[1049,9],[1899,9]]},"912":{"position":[[67,8]]},"922":{"position":[[1,8],[331,8],[1512,8],[2416,8],[2564,8]]},"942":{"position":[[43,8]]},"943":{"position":[[47,8],[141,8]]},"945":{"position":[[473,8],[658,8],[761,9]]},"1139":{"position":[[128,8]]},"1309":{"position":[[40,8]]},"1312":{"position":[[113,8]]},"1317":{"position":[[612,8],[843,8]]},"1332":{"position":[[40,8]]},"1336":{"position":[[113,8]]},"1341":{"position":[[612,8],[843,8]]},"1343":{"position":[[40,8]]},"1347":{"position":[[113,8]]},"1352":{"position":[[612,8],[843,8]]},"1432":{"position":[[612,8],[857,8]]}},"keywords":{}}],["postgres'"",{"_index":2519,"title":{},"content":{"236":{"position":[[973,16]]}},"keywords":{}}],["postgres13typ",{"_index":4996,"title":{},"content":{"904":{"position":[[1033,15]]}},"keywords":{}}],["postgres://alex:abc123def@ep",{"_index":5109,"title":{},"content":{"947":{"position":[[411,28]]}},"keywords":{}}],["postgres:dev",{"_index":1118,"title":{},"content":{"81":{"position":[[323,13],[1276,12],[2634,12]]},"83":{"position":[[998,12]]},"120":{"position":[[530,12]]},"363":{"position":[[1963,12]]},"1120":{"position":[[1656,12]]},"1314":{"position":[[98,12]]},"1338":{"position":[[98,12]]},"1349":{"position":[[98,12]]}},"keywords":{}}],["postgres:dev"",{"_index":5006,"title":{},"content":{"908":{"position":[[155,18]]},"924":{"position":[[155,18]]},"935":{"position":[[155,18]]},"951":{"position":[[155,18]]},"969":{"position":[[155,18]]}},"keywords":{}}],["postgres:latest",{"_index":2503,"title":{},"content":{"236":{"position":[[612,15]]}},"keywords":{}}],["postgres:v1",{"_index":3043,"title":{},"content":{"307":{"position":[[1110,11],[1960,11]]}},"keywords":{}}],["postgres_cdc",{"_index":2505,"title":{},"content":{"236":{"position":[[644,12],[667,12],[1231,12]]},"237":{"position":[[3229,12],[3295,12]]}},"keywords":{}}],["postgres_db",{"_index":2507,"title":{},"content":{"236":{"position":[[756,12],[1264,12]]}},"keywords":{}}],["postgres_host",{"_index":2529,"title":{},"content":{"236":{"position":[[1216,14]]}},"keywords":{}}],["postgres_password",{"_index":2508,"title":{},"content":{"236":{"position":[[778,18],[1310,18]]}},"keywords":{}}],["postgres_port",{"_index":2530,"title":{},"content":{"236":{"position":[[1244,14]]}},"keywords":{}}],["postgres_us",{"_index":2506,"title":{},"content":{"236":{"position":[[732,14],[1286,14]]}},"keywords":{}}],["postgresql",{"_index":2041,"title":{"178":{"position":[[40,10]]},"231":{"position":[[0,10]]},"236":{"position":[[0,10]]},"237":{"position":[[12,10]]},"901":{"position":[[15,10]]},"912":{"position":[[0,10]]},"913":{"position":[[0,10]]},"917":{"position":[[12,11]]},"919":{"position":[[19,11]]},"928":{"position":[[21,10]]},"939":{"position":[[5,10]]},"1308":{"position":[[0,10]]},"1311":{"position":[[19,11]]},"1331":{"position":[[15,10]]},"1342":{"position":[[21,10]]}},"content":{"179":{"position":[[577,11]]},"184":{"position":[[211,10]]},"224":{"position":[[1116,10]]},"232":{"position":[[62,10],[224,10],[393,10],[831,10]]},"236":{"position":[[53,11],[394,10]]},"237":{"position":[[30,11]]},"241":{"position":[[68,10]]},"243":{"position":[[151,10]]},"363":{"position":[[1906,10]]},"366":{"position":[[175,10]]},"369":{"position":[[250,10]]},"370":{"position":[[954,10],[1210,10]]},"902":{"position":[[25,10]]},"903":{"position":[[15,10],[201,10]]},"904":{"position":[[907,10],[1259,10]]},"905":{"position":[[12,10]]},"906":{"position":[[250,10]]},"907":{"position":[[737,10],[993,10],[1674,10]]},"909":{"position":[[1,10],[171,10],[342,10],[704,10]]},"912":{"position":[[0,10],[204,10],[494,10]]},"914":{"position":[[25,10],[263,10]]},"915":{"position":[[15,10],[201,10]]},"917":{"position":[[414,10],[1890,10]]},"918":{"position":[[1293,10],[1551,10]]},"919":{"position":[[626,10],[733,10],[948,10]]},"920":{"position":[[12,10]]},"921":{"position":[[250,10]]},"923":{"position":[[737,10],[993,10],[1674,10]]},"925":{"position":[[1,10],[171,10],[342,10],[704,10]]},"929":{"position":[[25,10]]},"930":{"position":[[15,10],[201,10]]},"931":{"position":[[885,10],[914,10]]},"932":{"position":[[12,10]]},"933":{"position":[[250,10]]},"934":{"position":[[737,10],[993,10]]},"936":{"position":[[1,10],[171,10],[342,10],[704,10]]},"947":{"position":[[134,10]]},"948":{"position":[[12,10]]},"949":{"position":[[250,10]]},"950":{"position":[[737,10],[993,10]]},"952":{"position":[[1,10],[171,10],[342,10],[704,10]]},"962":{"position":[[38,10]]},"963":{"position":[[24,10],[355,10]]},"965":{"position":[[414,10],[1890,10]]},"966":{"position":[[12,10]]},"967":{"position":[[250,10]]},"968":{"position":[[737,10],[993,10],[1674,10]]},"970":{"position":[[1,10],[171,10],[342,10],[704,10]]},"1120":{"position":[[1594,10]]},"1140":{"position":[[1,10],[215,10]]},"1310":{"position":[[115,10],[151,11],[199,10]]},"1311":{"position":[[42,11]]},"1313":{"position":[[1424,10]]},"1316":{"position":[[1,10],[215,10]]},"1337":{"position":[[1424,10]]},"1340":{"position":[[1,10],[215,10]]},"1351":{"position":[[1,10],[215,10]]},"1429":{"position":[[17,10],[111,10]]},"1431":{"position":[[1,10],[238,10]]}},"keywords":{}}],["postgresql'",{"_index":5005,"title":{},"content":{"907":{"position":[[1850,12]]},"923":{"position":[[1850,12]]},"968":{"position":[[1850,12]]},"1313":{"position":[[1600,12]]},"1337":{"position":[[1600,12]]}},"keywords":{}}],["postgresql13",{"_index":5039,"title":{},"content":{"918":{"position":[[1243,13]]}},"keywords":{}}],["postgresqlamazon",{"_index":5032,"title":{},"content":{"914":{"position":[[195,16]]},"916":{"position":[[82,16]]}},"keywords":{}}],["postgresqlsupabas",{"_index":5033,"title":{},"content":{"916":{"position":[[150,18]]}},"keywords":{}}],["postsgrouppagesspac",{"_index":3783,"title":{},"content":{"470":{"position":[[11,20]]}},"keywords":{}}],["postsjob",{"_index":4328,"title":{},"content":{"622":{"position":[[229,8]]}},"keywords":{}}],["potenti",{"_index":561,"title":{},"content":{"21":{"position":[[184,11]]},"74":{"position":[[366,11]]},"102":{"position":[[581,9]]},"105":{"position":[[424,11]]},"158":{"position":[[234,9]]},"321":{"position":[[1847,11]]},"602":{"position":[[1014,9]]},"759":{"position":[[133,11],[218,9]]},"764":{"position":[[549,11]]},"772":{"position":[[144,11],[229,9]]},"777":{"position":[[549,11]]},"799":{"position":[[131,11],[216,9]]},"804":{"position":[[547,11]]},"814":{"position":[[131,11],[216,9]]},"819":{"position":[[547,11]]},"830":{"position":[[131,11],[216,9]]},"835":{"position":[[547,11]]}},"keywords":{}}],["power",{"_index":696,"title":{"331":{"position":[[0,8]]}},"content":{"38":{"position":[[96,5]]},"39":{"position":[[109,8]]},"132":{"position":[[42,9]]},"156":{"position":[[662,8]]},"159":{"position":[[624,8]]},"163":{"position":[[435,8]]},"180":{"position":[[43,8]]},"193":{"position":[[346,5]]},"319":{"position":[[1473,8]]},"329":{"position":[[164,5],[1057,8]]},"977":{"position":[[644,5]]},"1140":{"position":[[1379,5]]},"1316":{"position":[[1379,5]]},"1340":{"position":[[1379,5]]},"1351":{"position":[[1379,5]]},"1431":{"position":[[1402,5]]}},"keywords":{}}],["pport",{"_index":6251,"title":{},"content":{"1303":{"position":[[1181,5]]}},"keywords":{}}],["practic",{"_index":1086,"title":{},"content":{"74":{"position":[[873,8]]},"177":{"position":[[174,8]]},"241":{"position":[[440,10]]},"478":{"position":[[253,9]]},"599":{"position":[[253,9]]},"760":{"position":[[706,11]]},"773":{"position":[[706,11]]},"800":{"position":[[706,11]]},"815":{"position":[[706,11]]},"831":{"position":[[706,11]]},"1453":{"position":[[160,11]]}},"keywords":{}}],["pragma",{"_index":6290,"title":{},"content":{"1370":{"position":[[732,6]]}},"keywords":{}}],["pratic",{"_index":4133,"title":{},"content":{"560":{"position":[[201,8]]}},"keywords":{}}],["pre",{"_index":373,"title":{"786":{"position":[[13,3]]}},"content":{"13":{"position":[[83,3]]},"144":{"position":[[766,3]]},"209":{"position":[[517,3]]},"320":{"position":[[1321,3]]},"785":{"position":[[171,3]]},"786":{"position":[[189,3],[293,3]]},"1183":{"position":[[148,3]]},"1467":{"position":[[1876,3]]},"1477":{"position":[[2778,3]]}},"keywords":{}}],["preced",{"_index":4609,"title":{},"content":{"757":{"position":[[664,10]]},"770":{"position":[[664,10]]},"797":{"position":[[664,10]]},"812":{"position":[[664,10]]},"828":{"position":[[664,10]]},"1140":{"position":[[1419,8]]},"1285":{"position":[[676,10]]},"1292":{"position":[[5915,8],[5971,9]]},"1300":{"position":[[676,10]]},"1306":{"position":[[5915,8],[5971,9]]},"1316":{"position":[[1419,8]]},"1324":{"position":[[676,10]]},"1329":{"position":[[5915,8],[5971,9]]},"1340":{"position":[[1419,8]]},"1351":{"position":[[1419,8]]},"1370":{"position":[[752,9]]},"1431":{"position":[[1442,8]]},"1459":{"position":[[1547,9]]}},"keywords":{}}],["precis",{"_index":1561,"title":{},"content":{"109":{"position":[[541,10]]},"922":{"position":[[3173,7]]},"1140":{"position":[[1477,9]]},"1164":{"position":[[402,10]]},"1172":{"position":[[587,10],[676,10]]},"1209":{"position":[[318,9]]},"1222":{"position":[[587,10],[676,10]]},"1292":{"position":[[6024,9]]},"1306":{"position":[[6024,9]]},"1316":{"position":[[1477,9]]},"1329":{"position":[[6024,9]]},"1340":{"position":[[1477,9]]},"1351":{"position":[[1477,9]]},"1379":{"position":[[2172,9]]},"1403":{"position":[[2172,9]]},"1414":{"position":[[2172,9]]},"1431":{"position":[[1500,9]]},"1453":{"position":[[1096,9]]}},"keywords":{}}],["predetermin",{"_index":1987,"title":{},"content":{"169":{"position":[[1683,13]]},"340":{"position":[[543,13]]}},"keywords":{}}],["predic",{"_index":177,"title":{},"content":{"4":{"position":[[555,9],[589,10]]}},"keywords":{}}],["predict",{"_index":6566,"title":{},"content":{"1453":{"position":[[356,11],[1028,11]]}},"keywords":{}}],["predominantli",{"_index":3194,"title":{},"content":{"330":{"position":[[280,13]]}},"keywords":{}}],["preexist",{"_index":2573,"title":{},"content":{"237":{"position":[[1504,11]]},"366":{"position":[[902,11]]},"478":{"position":[[338,11]]},"480":{"position":[[797,11]]},"595":{"position":[[151,11]]},"599":{"position":[[338,11]]},"750":{"position":[[613,11]]},"766":{"position":[[613,11]]},"789":{"position":[[601,11]]},"807":{"position":[[601,11]]},"823":{"position":[[601,11]]},"903":{"position":[[928,11]]},"915":{"position":[[928,11]]},"930":{"position":[[928,11]]},"963":{"position":[[1082,11]]},"1040":{"position":[[644,11]]},"1050":{"position":[[644,11]]},"1058":{"position":[[644,11]]}},"keywords":{}}],["prefer",{"_index":600,"title":{},"content":{"26":{"position":[[8,6]]},"29":{"position":[[94,9]]},"82":{"position":[[3671,6]]},"135":{"position":[[154,11],[744,6]]},"154":{"position":[[220,12],[2084,12],[2117,11]]},"169":{"position":[[211,11]]},"213":{"position":[[450,6]]},"277":{"position":[[1308,9]]},"675":{"position":[[294,9]]},"753":{"position":[[726,9]]},"793":{"position":[[705,9]]},"808":{"position":[[723,9]]},"1472":{"position":[[97,9]]}},"keywords":{}}],["prefix",{"_index":130,"title":{},"content":{"3":{"position":[[665,6]]},"6":{"position":[[77,7]]},"8":{"position":[[78,7]]},"27":{"position":[[161,8],[323,8],[512,8],[583,8],[607,8]]},"46":{"position":[[170,9]]},"56":{"position":[[1947,6],[2122,6]]},"61":{"position":[[595,6],[654,6],[735,7],[850,6]]},"63":{"position":[[602,7]]},"117":{"position":[[340,8]]},"138":{"position":[[653,7],[822,6],[1755,9]]},"141":{"position":[[787,7],[1763,9]]},"142":{"position":[[600,7],[793,6],[1780,9]]},"154":{"position":[[361,8],[449,9],[513,6],[859,6],[925,8],[1075,7],[1334,6],[1429,7],[1560,6]]},"174":{"position":[[578,7]]},"183":{"position":[[397,6],[872,6]]},"190":{"position":[[497,9],[566,8],[614,8],[694,6],[990,7],[1036,9]]},"192":{"position":[[332,6]]},"217":{"position":[[696,6],[798,7]]},"263":{"position":[[1133,7]]},"264":{"position":[[749,7]]},"267":{"position":[[772,6],[1262,6]]},"270":{"position":[[673,7],[891,6]]},"274":{"position":[[979,6],[1119,6],[1456,6],[1521,6],[1762,6]]},"290":{"position":[[521,6],[606,7]]},"301":{"position":[[461,6],[546,7],[829,7],[877,9],[956,7]]},"337":{"position":[[171,7],[206,7],[366,7]]},"338":{"position":[[72,7],[129,7],[142,6],[248,6],[274,7],[527,8]]},"390":{"position":[[430,6]]},"395":{"position":[[600,6]]},"413":{"position":[[78,6],[117,6]]},"414":{"position":[[109,7],[239,6]]},"415":{"position":[[205,7],[499,6]]},"417":{"position":[[297,7],[1197,7],[1881,7],[1889,6],[1896,6],[2265,6]]},"418":{"position":[[552,8]]},"419":{"position":[[1268,6]]},"438":{"position":[[297,7],[1713,7]]},"440":{"position":[[1284,6]]},"460":{"position":[[137,6]]},"502":{"position":[[235,7],[757,7]]},"545":{"position":[[297,7],[806,7],[867,7],[1483,7],[1491,6],[1498,6],[1660,6]]},"546":{"position":[[1260,8]]},"547":{"position":[[1270,6]]},"601":{"position":[[315,6],[322,6]]},"945":{"position":[[795,8]]},"1008":{"position":[[1149,6]]},"1021":{"position":[[2076,6]]},"1023":{"position":[[1251,6]]},"1122":{"position":[[227,6]]},"1144":{"position":[[483,7],[491,6],[507,6]]},"1146":{"position":[[419,6]]},"1151":{"position":[[1249,6]]},"1162":{"position":[[331,7],[339,6],[355,6]]},"1170":{"position":[[483,7],[491,6],[507,6]]},"1173":{"position":[[431,6]]},"1206":{"position":[[702,6],[711,6]]},"1213":{"position":[[338,7],[346,6],[362,6]]},"1215":{"position":[[419,6]]},"1220":{"position":[[338,7],[346,6],[362,6]]},"1223":{"position":[[431,6]]},"1260":{"position":[[797,6]]},"1379":{"position":[[2213,6]]},"1403":{"position":[[2213,6]]},"1414":{"position":[[2213,6]]},"1420":{"position":[[574,6]]},"1457":{"position":[[47,6]]},"1474":{"position":[[629,7]]}},"keywords":{}}],["prefix.acmeco",{"_index":3219,"title":{},"content":{"338":{"position":[[423,15]]}},"keywords":{}}],["prefix/mat_nam",{"_index":5831,"title":{},"content":{"1197":{"position":[[19,16]]}},"keywords":{}}],["prefix/source_collect",{"_index":5834,"title":{},"content":{"1197":{"position":[[507,24]]}},"keywords":{}}],["prefix/uniqu",{"_index":1772,"title":{},"content":{"138":{"position":[[776,13]]},"142":{"position":[[747,13]]}},"keywords":{}}],["prefix}/${capture_nam",{"_index":3275,"title":{},"content":{"360":{"position":[[12,26]]},"371":{"position":[[71,26]]},"378":{"position":[[11,26]]},"388":{"position":[[81,26]]},"393":{"position":[[71,26]]},"398":{"position":[[71,26]]},"403":{"position":[[11,26]]},"418":{"position":[[11,26]]},"425":{"position":[[12,26]]},"433":{"position":[[53,26],[464,26]]},"439":{"position":[[11,26]]},"449":{"position":[[81,26]]},"455":{"position":[[12,26]]},"461":{"position":[[12,26]]},"467":{"position":[[12,26]]},"473":{"position":[[81,26]]},"497":{"position":[[11,26]]},"503":{"position":[[11,26]]},"510":{"position":[[11,26]]},"518":{"position":[[81,26]]},"527":{"position":[[81,26]]},"535":{"position":[[81,26]]},"541":{"position":[[12,26]]},"546":{"position":[[11,26]]},"557":{"position":[[81,26]]},"566":{"position":[[11,26]]},"575":{"position":[[67,26]]},"586":{"position":[[67,26]]},"594":{"position":[[11,26]]},"612":{"position":[[81,26]]},"620":{"position":[[11,26]]},"626":{"position":[[12,26]]},"632":{"position":[[12,26]]},"638":{"position":[[11,26]]},"647":{"position":[[11,26]]},"655":{"position":[[11,26]]},"671":{"position":[[12,26]]},"686":{"position":[[72,26]]},"701":{"position":[[12,26]]},"707":{"position":[[12,26]]},"713":{"position":[[12,26]]},"721":{"position":[[81,26]]},"736":{"position":[[11,26]]},"742":{"position":[[12,26]]},"748":{"position":[[12,26]]},"758":{"position":[[71,26]]},"771":{"position":[[71,26]]},"783":{"position":[[11,26]]},"798":{"position":[[71,26]]},"813":{"position":[[71,26]]},"829":{"position":[[71,26]]},"843":{"position":[[12,26]]},"852":{"position":[[12,26]]},"860":{"position":[[81,26]]},"868":{"position":[[11,26]]},"880":{"position":[[11,26]]},"886":{"position":[[12,26]]},"892":{"position":[[11,26]]},"908":{"position":[[71,26]]},"924":{"position":[[71,26]]},"935":{"position":[[71,26]]},"951":{"position":[[71,26]]},"960":{"position":[[12,26]]},"969":{"position":[[71,26]]},"983":{"position":[[12,26]]},"992":{"position":[[11,26]]},"998":{"position":[[12,26]]},"1010":{"position":[[81,26]]},"1016":{"position":[[12,26]]},"1029":{"position":[[12,26]]},"1046":{"position":[[11,26]]},"1054":{"position":[[11,26]]},"1062":{"position":[[11,26]]},"1071":{"position":[[81,26]]},"1078":{"position":[[11,26]]},"1086":{"position":[[93,26]]},"1102":{"position":[[12,26]]},"1108":{"position":[[11,26]]},"1114":{"position":[[12,26]]},"1134":{"position":[[11,26]]},"1254":{"position":[[19,26]]}},"keywords":{}}],["prefix}/${capture_name}/trad",{"_index":3461,"title":{},"content":{"378":{"position":[[353,32]]}},"keywords":{}}],["prefix}/${capture_name}/transact",{"_index":4805,"title":{},"content":{"843":{"position":[[819,37]]}},"keywords":{}}],["prefix}/${collection_nam",{"_index":3432,"title":{},"content":{"371":{"position":[[1385,28]]},"393":{"position":[[368,28]]},"398":{"position":[[367,28]]},"418":{"position":[[434,28]]},"433":{"position":[[398,28],[794,28]]},"439":{"position":[[649,28]]},"497":{"position":[[273,28]]},"503":{"position":[[221,28]]},"546":{"position":[[1141,28]]},"575":{"position":[[381,28],[468,28],[572,28],[661,28],[761,28],[846,28],[941,28],[1044,28],[1140,28],[1239,28]]},"586":{"position":[[403,28],[490,28],[594,28],[683,28],[768,28],[863,28],[959,28],[1058,28]]},"620":{"position":[[309,28]]},"638":{"position":[[440,28]]},"647":{"position":[[234,28]]},"655":{"position":[[264,28]]},"736":{"position":[[231,28],[320,28],[414,28]]},"758":{"position":[[369,28]]},"771":{"position":[[369,28]]},"798":{"position":[[367,28]]},"813":{"position":[[367,28]]},"829":{"position":[[367,28]]},"868":{"position":[[525,28]]},"880":{"position":[[536,28]]},"908":{"position":[[413,28]]},"924":{"position":[[413,28]]},"935":{"position":[[413,28]]},"951":{"position":[[413,28]]},"969":{"position":[[413,28]]},"1046":{"position":[[347,28]]},"1054":{"position":[[347,28]]},"1062":{"position":[[347,28]]},"1126":{"position":[[328,28]]},"1139":{"position":[[1219,28]]},"1145":{"position":[[320,28]]},"1152":{"position":[[413,28]]},"1163":{"position":[[375,28]]},"1171":{"position":[[324,28]]},"1214":{"position":[[260,28]]},"1221":{"position":[[264,28]]},"1261":{"position":[[355,28]]},"1262":{"position":[[661,28]]},"1270":{"position":[[243,28]]},"1278":{"position":[[322,28]]},"1287":{"position":[[232,28]]},"1302":{"position":[[232,28]]},"1314":{"position":[[235,28]]},"1326":{"position":[[232,28]]},"1338":{"position":[[235,28]]},"1349":{"position":[[235,28]]},"1368":{"position":[[171,28]]},"1377":{"position":[[236,28]]},"1401":{"position":[[236,28]]},"1412":{"position":[[236,28]]},"1428":{"position":[[276,28]]}},"keywords":{}}],["prefix}/${mat_nam",{"_index":5516,"title":{},"content":{"1139":{"position":[[19,22]]},"1145":{"position":[[19,22]]},"1152":{"position":[[19,22]]},"1163":{"position":[[19,22]]},"1171":{"position":[[19,22]]},"1180":{"position":[[19,22]]},"1189":{"position":[[20,22]]},"1207":{"position":[[19,22]]},"1214":{"position":[[19,22]]},"1221":{"position":[[19,22]]},"1231":{"position":[[89,22]]},"1248":{"position":[[89,22]]},"1261":{"position":[[19,22]]},"1270":{"position":[[19,22]]},"1278":{"position":[[19,22]]},"1287":{"position":[[19,22]]},"1302":{"position":[[19,22]]},"1314":{"position":[[19,22]]},"1326":{"position":[[19,22]]},"1338":{"position":[[19,22]]},"1349":{"position":[[19,22]]},"1357":{"position":[[19,22]]},"1368":{"position":[[19,22]]},"1377":{"position":[[19,22]]},"1387":{"position":[[54,22],[608,22]]},"1401":{"position":[[19,22]]},"1412":{"position":[[19,22]]},"1421":{"position":[[20,22]]},"1428":{"position":[[19,22]]}},"keywords":{}}],["prefix}/${materialization_nam",{"_index":5442,"title":{},"content":{"1126":{"position":[[19,34]]},"1363":{"position":[[19,34]]}},"keywords":{}}],["prefix}/${source_collect",{"_index":5795,"title":{},"content":{"1180":{"position":[[323,30]]},"1182":{"position":[[657,30]]},"1189":{"position":[[508,30]]},"1191":{"position":[[677,30]]},"1207":{"position":[[595,30]]},"1231":{"position":[[320,30]]},"1248":{"position":[[520,30]]},"1357":{"position":[[464,30]]},"1387":{"position":[[531,30],[1157,30]]},"1389":{"position":[[659,30]]},"1421":{"position":[[534,30]]}},"keywords":{}}],["prefix}/account",{"_index":3752,"title":{},"content":{"449":{"position":[[470,18]]},"1108":{"position":[[309,18]]},"1114":{"position":[[295,18]]}},"keywords":{}}],["prefix}/accountattribut",{"_index":5467,"title":{},"content":{"1134":{"position":[[339,27]]}},"keywords":{}}],["prefix}/act",{"_index":3998,"title":{},"content":{"518":{"position":[[1496,20]]}},"keywords":{}}],["prefix}/activeus",{"_index":3648,"title":{},"content":{"425":{"position":[[505,21]]}},"keywords":{}}],["prefix}/ad",{"_index":3999,"title":{},"content":{"518":{"position":[[1571,13]]}},"keywords":{}}],["prefix}/ad_account",{"_index":3980,"title":{},"content":{"518":{"position":[[524,20]]}},"keywords":{}}],["prefix}/ad_cr",{"_index":4001,"title":{},"content":{"518":{"position":[[1649,22]]}},"keywords":{}}],["prefix}/ad_set",{"_index":3982,"title":{},"content":{"518":{"position":[[603,17]]}},"keywords":{}}],["prefix}/address",{"_index":5121,"title":{},"content":{"960":{"position":[[244,19]]}},"keywords":{}}],["prefix}/admin",{"_index":4432,"title":{},"content":{"686":{"position":[[301,16]]}},"keywords":{}}],["prefix}/ads_insight",{"_index":3984,"title":{},"content":{"518":{"position":[[684,22]]}},"keywords":{}}],["prefix}/ads_insights_action_typ",{"_index":3996,"title":{},"content":{"518":{"position":[[1320,34]]}},"keywords":{}}],["prefix}/ads_insights_age_and_gend",{"_index":3986,"title":{},"content":{"518":{"position":[[785,37]]}},"keywords":{}}],["prefix}/ads_insights_countri",{"_index":3988,"title":{},"content":{"518":{"position":[[894,30]]}},"keywords":{}}],["prefix}/ads_insights_dma",{"_index":3992,"title":{},"content":{"518":{"position":[[1092,26]]}},"keywords":{}}],["prefix}/ads_insights_platform_and_devic",{"_index":3994,"title":{},"content":{"518":{"position":[[1202,42]]}},"keywords":{}}],["prefix}/ads_insights_region",{"_index":3990,"title":{},"content":{"518":{"position":[[995,29]]}},"keywords":{}}],["prefix}/ag",{"_index":3925,"title":{},"content":{"510":{"position":[[238,16]]}},"keywords":{}}],["prefix}/agentavailabilityev",{"_index":4056,"title":{},"content":{"541":{"position":[[236,33]]}},"keywords":{}}],["prefix}/annot",{"_index":3645,"title":{},"content":{"425":{"position":[[346,21]]},"748":{"position":[[468,21]]}},"keywords":{}}],["prefix}/appl",{"_index":4338,"title":{},"content":{"626":{"position":[[210,22]]}},"keywords":{}}],["prefix}/assigne",{"_index":4022,"title":{},"content":{"527":{"position":[[399,19]]},"535":{"position":[[414,19]]}},"keywords":{}}],["prefix}/attributedefinit",{"_index":5469,"title":{},"content":{"1134":{"position":[[440,30]]}},"keywords":{}}],["prefix}/audit",{"_index":3808,"title":{},"content":{"473":{"position":[[349,15]]}},"keywords":{}}],["prefix}/auditlog",{"_index":5471,"title":{},"content":{"1134":{"position":[[558,19]]}},"keywords":{}}],["prefix}/averagesessionlength",{"_index":3650,"title":{},"content":{"425":{"position":[[600,30]]}},"keywords":{}}],["prefix}/balancetransact",{"_index":5299,"title":{},"content":{"1078":{"position":[[273,29]]}},"keywords":{}}],["prefix}/bankaccount",{"_index":5301,"title":{},"content":{"1078":{"position":[[368,22]]}},"keywords":{}}],["prefix}/block",{"_index":4843,"title":{},"content":{"860":{"position":[[324,16]]},"983":{"position":[[234,16]]}},"keywords":{}}],["prefix}/brand",{"_index":5472,"title":{},"content":{"1134":{"position":[[636,16]]}},"keywords":{}}],["prefix}/campaign",{"_index":3997,"title":{},"content":{"518":{"position":[[1415,19]]},"557":{"position":[[664,18]]},"721":{"position":[[376,18]]},"1086":{"position":[[430,19]]}},"keywords":{}}],["prefix}/channel_annotations_a1",{"_index":5383,"title":{},"content":{"1102":{"position":[[233,32]]}},"keywords":{}}],["prefix}/channel_memb",{"_index":5187,"title":{},"content":{"1016":{"position":[[362,25]]}},"keywords":{}}],["prefix}/charg",{"_index":5303,"title":{},"content":{"1078":{"position":[[449,17]]}},"keywords":{}}],["prefix}/checkoutsess",{"_index":5305,"title":{},"content":{"1078":{"position":[[535,26]]}},"keywords":{}}],["prefix}/checkoutsessionslineitem",{"_index":5307,"title":{},"content":{"1078":{"position":[[641,35]]}},"keywords":{}}],["prefix}/cli",{"_index":4359,"title":{},"content":{"632":{"position":[[273,17]]}},"keywords":{}}],["prefix}/cohort",{"_index":3644,"title":{},"content":{"425":{"position":[[265,17]]}},"keywords":{}}],["prefix}/collection_nam",{"_index":5232,"title":{},"content":{"1037":{"position":[[311,25]]}},"keywords":{}}],["prefix}/compani",{"_index":4433,"title":{},"content":{"686":{"position":[[378,19]]}},"keywords":{}}],["prefix}/companyattribut",{"_index":4441,"title":{},"content":{"686":{"position":[[824,27]]}},"keywords":{}}],["prefix}/companyseg",{"_index":4435,"title":{},"content":{"686":{"position":[[465,25]]}},"keywords":{}}],["prefix}/contact",{"_index":4439,"title":{},"content":{"686":{"position":[[735,18]]}},"keywords":{}}],["prefix}/contactattribut",{"_index":4443,"title":{},"content":{"686":{"position":[[922,27]]}},"keywords":{}}],["prefix}/convers",{"_index":4436,"title":{},"content":{"686":{"position":[[555,23]]}},"keywords":{}}],["prefix}/conversationpart",{"_index":4438,"title":{},"content":{"686":{"position":[[648,27]]}},"keywords":{}}],["prefix}/coupon",{"_index":5309,"title":{},"content":{"1078":{"position":[[735,17]]}},"keywords":{}}],["prefix}/custom",{"_index":3767,"title":{},"content":{"455":{"position":[[314,19]]},"1078":{"position":[[932,19]]}},"keywords":{}}],["prefix}/customerbalancetransact",{"_index":5311,"title":{},"content":{"1078":{"position":[[834,37]]}},"keywords":{}}],["prefix}/customrol",{"_index":5474,"title":{},"content":{"1134":{"position":[[717,21]]}},"keywords":{}}],["prefix}/disput",{"_index":5313,"title":{},"content":{"1078":{"position":[[1011,18]]}},"keywords":{}}],["prefix}/ev",{"_index":3646,"title":{},"content":{"425":{"position":[[425,16]]},"467":{"position":[[247,16]]},"998":{"position":[[274,16]]},"1078":{"position":[[1087,16]]}},"keywords":{}}],["prefix}/featur",{"_index":4931,"title":{},"content":{"892":{"position":[[193,17]]}},"keywords":{}}],["prefix}/featureev",{"_index":4938,"title":{},"content":{"892":{"position":[[453,23]]}},"keywords":{}}],["prefix}/group",{"_index":5478,"title":{},"content":{"1134":{"position":[[943,16]]}},"keywords":{}}],["prefix}/groupmembership",{"_index":5477,"title":{},"content":{"1134":{"position":[[833,26]]}},"keywords":{}}],["prefix}/guid",{"_index":4932,"title":{},"content":{"892":{"position":[[243,15]]}},"keywords":{}}],["prefix}/guideev",{"_index":4942,"title":{},"content":{"892":{"position":[[575,21]]}},"keywords":{}}],["prefix}/invoic",{"_index":5318,"title":{},"content":{"1078":{"position":[[1348,18]]}},"keywords":{}}],["prefix}/invoice_item",{"_index":5315,"title":{},"content":{"1078":{"position":[[1168,23]]}},"keywords":{}}],["prefix}/invoicelineitem",{"_index":5317,"title":{},"content":{"1078":{"position":[[1262,26]]}},"keywords":{}}],["prefix}/issu",{"_index":4509,"title":{},"content":{"713":{"position":[[243,16]]}},"keywords":{}}],["prefix}/item",{"_index":3777,"title":{},"content":{"461":{"position":[[311,15]]}},"keywords":{}}],["prefix}/lead",{"_index":4557,"title":{},"content":{"742":{"position":[[302,15]]}},"keywords":{}}],["prefix}/list",{"_index":4464,"title":{},"content":{"707":{"position":[[234,15]]},"1029":{"position":[[242,15]]}},"keywords":{}}],["prefix}/macro",{"_index":5480,"title":{},"content":{"1134":{"position":[[1043,16]]}},"keywords":{}}],["prefix}/org",{"_index":4264,"title":{},"content":{"594":{"position":[[1441,14]]}},"keywords":{}}],["prefix}/organ",{"_index":5481,"title":{},"content":{"1134":{"position":[[1150,23]]}},"keywords":{}}],["prefix}/organizationmembership",{"_index":5483,"title":{},"content":{"1134":{"position":[[1275,33]]}},"keywords":{}}],["prefix}/orgs_run",{"_index":4262,"title":{},"content":{"594":{"position":[[1370,19]]}},"keywords":{}}],["prefix}/orgs_runs_runresult",{"_index":4260,"title":{},"content":{"594":{"position":[[1281,30]]}},"keywords":{}}],["prefix}/orgs_runs_runresults_queryresult",{"_index":4258,"title":{},"content":{"594":{"position":[[1166,43]]}},"keywords":{}}],["prefix}/pag",{"_index":4933,"title":{},"content":{"892":{"position":[[290,14]]}},"keywords":{}}],["prefix}/pageev",{"_index":4936,"title":{},"content":{"892":{"position":[[392,20]]}},"keywords":{}}],["prefix}/paymentint",{"_index":5320,"title":{},"content":{"1078":{"position":[[1433,24]]}},"keywords":{}}],["prefix}/payout",{"_index":5322,"title":{},"content":{"1078":{"position":[[1516,17]]}},"keywords":{}}],["prefix}/plan",{"_index":5323,"title":{},"content":{"1078":{"position":[[1590,15]]}},"keywords":{}}],["prefix}/pollev",{"_index":4944,"title":{},"content":{"892":{"position":[[634,20]]}},"keywords":{}}],["prefix}/post",{"_index":5484,"title":{},"content":{"1134":{"position":[[1391,15]]}},"keywords":{}}],["prefix}/postcom",{"_index":5486,"title":{},"content":{"1134":{"position":[[1472,22]]}},"keywords":{}}],["prefix}/postcommentvot",{"_index":5488,"title":{},"content":{"1134":{"position":[[1565,26]]}},"keywords":{}}],["prefix}/postvot",{"_index":5490,"title":{},"content":{"1134":{"position":[[1654,19]]}},"keywords":{}}],["prefix}/product",{"_index":5324,"title":{},"content":{"1078":{"position":[[1665,18]]}},"keywords":{}}],["prefix}/profil",{"_index":3504,"title":{},"content":{"388":{"position":[[489,18]]}},"keywords":{}}],["prefix}/promotioncod",{"_index":5326,"title":{},"content":{"1078":{"position":[[1750,24]]}},"keywords":{}}],["prefix}/purchas",{"_index":4461,"title":{},"content":{"701":{"position":[[237,18]]}},"keywords":{}}],["prefix}/refund",{"_index":5328,"title":{},"content":{"1078":{"position":[[1833,17]]}},"keywords":{}}],["prefix}/report",{"_index":4934,"title":{},"content":{"892":{"position":[[338,16]]}},"keywords":{}}],["prefix}/satisfactionr",{"_index":5492,"title":{},"content":{"1134":{"position":[[1771,29]]}},"keywords":{}}],["prefix}/schedul",{"_index":5493,"title":{},"content":{"1134":{"position":[[1862,19]]}},"keywords":{}}],["prefix}/seg",{"_index":4444,"title":{},"content":{"686":{"position":[[1009,18]]}},"keywords":{}}],["prefix}/sit",{"_index":4313,"title":{},"content":{"612":{"position":[[414,15]]}},"keywords":{}}],["prefix}/slapolicii",{"_index":5495,"title":{},"content":{"1134":{"position":[[1946,22]]}},"keywords":{}}],["prefix}/sourc",{"_index":5228,"title":{},"content":{"1037":{"position":[[11,16]]}},"keywords":{}}],["prefix}/source_collection_on",{"_index":5899,"title":{},"content":{"1232":{"position":[[543,31]]}},"keywords":{}}],["prefix}/source_collection_two",{"_index":5900,"title":{},"content":{"1232":{"position":[[634,31]]}},"keywords":{}}],["prefix}/source_nam",{"_index":6284,"title":{},"content":{"1363":{"position":[[253,21]]}},"keywords":{}}],["prefix}/stori",{"_index":4424,"title":{},"content":{"671":{"position":[[307,17]]}},"keywords":{}}],["prefix}/subscript",{"_index":5331,"title":{},"content":{"1078":{"position":[[2013,23]]}},"keywords":{}}],["prefix}/subscriptionitem",{"_index":5330,"title":{},"content":{"1078":{"position":[[1921,27]]}},"keywords":{}}],["prefix}/survey",{"_index":5275,"title":{},"content":{"1071":{"position":[[373,17]]}},"keywords":{}}],["prefix}/tag",{"_index":4445,"title":{},"content":{"686":{"position":[[1084,14]]},"1134":{"position":[[2025,14]]}},"keywords":{}}],["prefix}/target_nam",{"_index":4141,"title":{},"content":{"566":{"position":[[275,21]]}},"keywords":{}}],["prefix}/team",{"_index":4446,"title":{},"content":{"686":{"position":[[1156,15]]}},"keywords":{}}],["prefix}/ticket",{"_index":5512,"title":{},"content":{"1134":{"position":[[2926,17]]}},"keywords":{}}],["prefix}/ticketaudit",{"_index":5497,"title":{},"content":{"1134":{"position":[[2130,22]]}},"keywords":{}}],["prefix}/ticketcom",{"_index":5499,"title":{},"content":{"1134":{"position":[[2245,24]]}},"keywords":{}}],["prefix}/ticketfield",{"_index":5501,"title":{},"content":{"1134":{"position":[[2360,22]]}},"keywords":{}}],["prefix}/ticketform",{"_index":5503,"title":{},"content":{"1134":{"position":[[2472,21]]}},"keywords":{}}],["prefix}/ticketmetr",{"_index":5505,"title":{},"content":{"1134":{"position":[[2585,23]]}},"keywords":{}}],["prefix}/ticketmetricev",{"_index":5507,"title":{},"content":{"1134":{"position":[[2700,28]]}},"keywords":{}}],["prefix}/ticketskip",{"_index":5509,"title":{},"content":{"1134":{"position":[[2818,21]]}},"keywords":{}}],["prefix}/trackev",{"_index":4940,"title":{},"content":{"892":{"position":[[515,21]]}},"keywords":{}}],["prefix}/transact",{"_index":4830,"title":{},"content":{"852":{"position":[[352,21]]},"886":{"position":[[332,22]]}},"keywords":{}}],["prefix}/transf",{"_index":5332,"title":{},"content":{"1078":{"position":[[2097,19]]}},"keywords":{}}],["prefix}/us",{"_index":3280,"title":{},"content":{"360":{"position":[[231,15]]},"403":{"position":[[458,15]]},"783":{"position":[[255,15]]},"1134":{"position":[[3028,15]]},"1254":{"position":[[295,15]]}},"keywords":{}}],["prefix}/workord",{"_index":5148,"title":{},"content":{"992":{"position":[[274,19]]},"1010":{"position":[[510,19]]}},"keywords":{}}],["prefix}/workorderlineitem",{"_index":5150,"title":{},"content":{"992":{"position":[[340,27]]},"1010":{"position":[[628,27]]}},"keywords":{}}],["preorder",{"_index":6324,"title":{},"content":{"1379":{"position":[[2264,8]]},"1403":{"position":[[2264,8]]},"1414":{"position":[[2264,8]]}},"keywords":{}}],["prepar",{"_index":2131,"title":{"191":{"position":[[0,7]]}},"content":{"200":{"position":[[4,7]]},"240":{"position":[[148,9]]},"1140":{"position":[[1522,7]]},"1209":{"position":[[342,7]]},"1292":{"position":[[6075,7]]},"1306":{"position":[[6075,7]]},"1316":{"position":[[1522,7]]},"1329":{"position":[[6075,7]]},"1340":{"position":[[1522,7]]},"1351":{"position":[[1522,7]]},"1379":{"position":[[2301,7]]},"1403":{"position":[[2301,7]]},"1414":{"position":[[2301,7]]},"1431":{"position":[[1545,7]]},"1439":{"position":[[566,8]]},"1442":{"position":[[1126,9]]}},"keywords":{}}],["prepend",{"_index":4290,"title":{},"content":{"601":{"position":[[332,7]]}},"keywords":{}}],["prerequisit",{"_index":2042,"title":{"179":{"position":[[0,14]]},"188":{"position":[[0,14]]},"199":{"position":[[0,14]]},"215":{"position":[[0,14]]},"234":{"position":[[0,14]]},"262":{"position":[[0,14]]},"266":{"position":[[0,14]]},"273":{"position":[[0,14]]},"283":{"position":[[0,14]]},"288":{"position":[[0,14]]},"299":{"position":[[0,14]]},"347":{"position":[[0,14]]},"357":{"position":[[0,14]]},"366":{"position":[[0,14]]},"375":{"position":[[0,14]]},"382":{"position":[[0,14]]},"390":{"position":[[0,14]]},"395":{"position":[[0,14]]},"400":{"position":[[0,14]]},"405":{"position":[[0,14]]},"413":{"position":[[0,14]]},"422":{"position":[[0,14]]},"428":{"position":[[0,14]]},"435":{"position":[[0,14]]},"444":{"position":[[0,14]]},"452":{"position":[[0,14]]},"458":{"position":[[0,14]]},"464":{"position":[[0,14]]},"471":{"position":[[0,14]]},"475":{"position":[[0,14]]},"494":{"position":[[0,14]]},"500":{"position":[[0,14]]},"507":{"position":[[0,14]]},"513":{"position":[[0,14]]},"522":{"position":[[0,14]]},"530":{"position":[[0,14]]},"538":{"position":[[0,14]]},"543":{"position":[[0,14]]},"551":{"position":[[0,14]]},"562":{"position":[[0,14]]},"569":{"position":[[0,14]]},"581":{"position":[[0,14]]},"591":{"position":[[0,14]]},"597":{"position":[[0,14]]},"607":{"position":[[0,14]]},"614":{"position":[[0,14]]},"623":{"position":[[0,14]]},"629":{"position":[[0,14]]},"635":{"position":[[0,14]]},"643":{"position":[[0,14]]},"650":{"position":[[0,14]]},"668":{"position":[[0,14]]},"683":{"position":[[0,14]]},"698":{"position":[[0,14]]},"704":{"position":[[0,14]]},"710":{"position":[[0,14]]},"716":{"position":[[0,14]]},"723":{"position":[[0,14]]},"731":{"position":[[0,14]]},"739":{"position":[[0,14]]},"745":{"position":[[0,14]]},"750":{"position":[[0,14]]},"766":{"position":[[0,14]]},"780":{"position":[[0,14]]},"789":{"position":[[0,14]]},"807":{"position":[[0,14]]},"823":{"position":[[0,14]]},"839":{"position":[[0,14]]},"848":{"position":[[0,14]]},"855":{"position":[[0,14]]},"862":{"position":[[0,14]]},"874":{"position":[[0,14]]},"883":{"position":[[0,14]]},"889":{"position":[[0,14]]},"894":{"position":[[0,14]]},"903":{"position":[[0,14]]},"915":{"position":[[0,14]]},"930":{"position":[[0,14]]},"940":{"position":[[0,14]]},"957":{"position":[[0,14]]},"963":{"position":[[0,14]]},"980":{"position":[[0,14]]},"986":{"position":[[0,14]]},"995":{"position":[[0,14]]},"1001":{"position":[[0,14]]},"1013":{"position":[[0,14]]},"1018":{"position":[[0,14]]},"1026":{"position":[[0,14]]},"1031":{"position":[[0,14]]},"1040":{"position":[[0,14]]},"1050":{"position":[[0,14]]},"1058":{"position":[[0,14]]},"1066":{"position":[[0,14]]},"1074":{"position":[[0,14]]},"1081":{"position":[[0,14]]},"1089":{"position":[[0,14]]},"1105":{"position":[[0,14]]},"1111":{"position":[[0,14]]},"1118":{"position":[[0,14]]},"1122":{"position":[[0,14]]},"1129":{"position":[[0,14]]},"1136":{"position":[[0,14]]},"1142":{"position":[[0,14]]},"1149":{"position":[[0,14]]},"1160":{"position":[[0,14]]},"1168":{"position":[[0,14]]},"1176":{"position":[[0,14]]},"1185":{"position":[[0,14]]},"1194":{"position":[[0,14]]},"1203":{"position":[[0,14]]},"1211":{"position":[[0,14]]},"1218":{"position":[[0,14]]},"1226":{"position":[[0,14]]},"1236":{"position":[[0,14]]},"1243":{"position":[[0,14]]},"1251":{"position":[[0,14]]},"1258":{"position":[[0,14]]},"1264":{"position":[[0,14]]},"1274":{"position":[[0,14]]},"1281":{"position":[[0,14]]},"1295":{"position":[[0,14]]},"1309":{"position":[[0,14]]},"1319":{"position":[[0,14]]},"1332":{"position":[[0,14]]},"1343":{"position":[[0,14]]},"1354":{"position":[[0,14]]},"1361":{"position":[[0,14]]},"1365":{"position":[[0,14]]},"1372":{"position":[[0,14]]},"1382":{"position":[[0,14]]},"1396":{"position":[[0,14]]},"1406":{"position":[[0,14]]},"1417":{"position":[[0,14]]},"1425":{"position":[[0,14]]}},"content":{"200":{"position":[[71,13]]},"211":{"position":[[434,13]]},"225":{"position":[[28,14]]},"290":{"position":[[1088,14]]},"291":{"position":[[475,15]]},"302":{"position":[[475,15]]},"347":{"position":[[57,13]]},"367":{"position":[[13,14]]},"475":{"position":[[52,14]]},"513":{"position":[[151,13]]},"522":{"position":[[152,13]]},"530":{"position":[[152,13]]},"551":{"position":[[150,13]]},"569":{"position":[[169,13]]},"571":{"position":[[323,14]]},"581":{"position":[[521,14]]},"582":{"position":[[26,14]]},"597":{"position":[[52,14]]},"607":{"position":[[167,13]]},"609":{"position":[[163,14]]},"614":{"position":[[152,13]]},"617":{"position":[[265,14]]},"643":{"position":[[126,13]]},"650":{"position":[[125,13]]},"716":{"position":[[152,13]]},"731":{"position":[[123,13]]},"761":{"position":[[256,13]]},"764":{"position":[[911,13]]},"774":{"position":[[256,13]]},"777":{"position":[[911,13]]},"801":{"position":[[262,13]]},"804":{"position":[[909,13]]},"816":{"position":[[262,13]]},"819":{"position":[[909,13]]},"832":{"position":[[262,13]]},"835":{"position":[[909,13]]},"894":{"position":[[69,14]]},"917":{"position":[[36,13]]},"965":{"position":[[36,13]]},"1081":{"position":[[1,13]]},"1129":{"position":[[142,13]]},"1243":{"position":[[1339,13]]},"1245":{"position":[[217,14]]},"1383":{"position":[[13,14]]}},"keywords":{}}],["presenc",{"_index":1335,"title":{},"content":{"94":{"position":[[194,8]]},"922":{"position":[[2834,8]]}},"keywords":{}}],["present",{"_index":841,"title":{},"content":{"56":{"position":[[1273,9]]},"67":{"position":[[21,7]]},"95":{"position":[[256,8]]},"120":{"position":[[632,9]]},"129":{"position":[[428,7]]},"164":{"position":[[263,7]]},"166":{"position":[[241,8]]},"211":{"position":[[338,7]]},"228":{"position":[[421,7],[662,7]]},"229":{"position":[[306,8],[399,7]]},"230":{"position":[[30,7]]},"296":{"position":[[2271,8]]},"373":{"position":[[603,8],[730,7]]},"379":{"position":[[531,8]]},"489":{"position":[[54,7]]},"662":{"position":[[54,7]]},"677":{"position":[[54,7]]},"692":{"position":[[54,7]]},"761":{"position":[[155,7]]},"762":{"position":[[89,7]]},"774":{"position":[[155,7]]},"775":{"position":[[89,7]]},"801":{"position":[[155,7]]},"802":{"position":[[89,7]]},"816":{"position":[[155,7]]},"817":{"position":[[89,7]]},"832":{"position":[[155,7]]},"833":{"position":[[89,7]]},"859":{"position":[[685,7]]},"909":{"position":[[293,7]]},"925":{"position":[[293,7]]},"936":{"position":[[293,7]]},"952":{"position":[[293,7]]},"970":{"position":[[293,7]]},"985":{"position":[[74,7]]},"1000":{"position":[[74,7]]},"1467":{"position":[[1771,8]]},"1480":{"position":[[566,9]]}},"keywords":{}}],["preserv",{"_index":4266,"title":{},"content":{"595":{"position":[[758,9]]},"977":{"position":[[516,10]]},"1140":{"position":[[1569,8]]},"1292":{"position":[[2977,8]]},"1306":{"position":[[2977,8]]},"1316":{"position":[[1569,8]]},"1317":{"position":[[565,9]]},"1329":{"position":[[2977,8]]},"1340":{"position":[[1569,8]]},"1341":{"position":[[565,9]]},"1351":{"position":[[1569,8]]},"1352":{"position":[[565,9]]},"1379":{"position":[[2346,8]]},"1403":{"position":[[2346,8]]},"1414":{"position":[[2346,8]]},"1431":{"position":[[1592,8]]},"1432":{"position":[[565,9]]},"1444":{"position":[[912,9]]},"1465":{"position":[[864,10]]}},"keywords":{}}],["press",{"_index":1985,"title":{},"content":{"169":{"position":[[1639,5]]},"205":{"position":[[100,8],[199,5],[219,8]]},"206":{"position":[[821,5]]},"209":{"position":[[58,5]]},"239":{"position":[[502,5],[2891,5]]},"240":{"position":[[4002,8],[4093,5]]},"253":{"position":[[1051,8]]},"296":{"position":[[7496,5]]},"313":{"position":[[1051,8]]},"340":{"position":[[499,5]]},"690":{"position":[[36,5]]}},"keywords":{}}],["pressur",{"_index":1694,"title":{},"content":{"124":{"position":[[416,8]]},"163":{"position":[[1123,8]]}},"keywords":{}}],["pretti",{"_index":2611,"title":{},"content":{"240":{"position":[[4279,6]]},"323":{"position":[[1594,6]]}},"keywords":{}}],["prev",{"_index":6069,"title":{},"content":{"1292":{"position":[[3024,4]]},"1306":{"position":[[3024,4]]},"1329":{"position":[[3024,4]]}},"keywords":{}}],["prevent",{"_index":380,"title":{},"content":{"13":{"position":[[293,7],[674,7]]},"55":{"position":[[736,7]]},"166":{"position":[[36,7]]},"183":{"position":[[2626,7]]},"185":{"position":[[222,7]]},"208":{"position":[[727,7]]},"239":{"position":[[2447,10]]},"305":{"position":[[251,7]]},"419":{"position":[[472,7]]},"440":{"position":[[488,7]]},"504":{"position":[[416,7]]},"547":{"position":[[473,7]]},"639":{"position":[[414,7]]},"660":{"position":[[193,7]]},"945":{"position":[[856,7]]},"1023":{"position":[[453,7]]},"1156":{"position":[[686,8]]},"1182":{"position":[[135,7]]},"1191":{"position":[[135,7]]},"1262":{"position":[[135,7]]},"1389":{"position":[[135,7]]},"1437":{"position":[[911,9],[1577,8]]},"1447":{"position":[[176,7]]}},"keywords":{}}],["preview",{"_index":1025,"title":{},"content":{"68":{"position":[[627,7]]},"148":{"position":[[159,7]]},"149":{"position":[[1149,7]]},"183":{"position":[[4040,7],[4069,7]]},"210":{"position":[[409,7],[1605,7],[3936,7]]},"229":{"position":[[600,7]]},"255":{"position":[[85,7],[155,7]]},"268":{"position":[[1763,7],[1803,7],[1837,7]]},"269":{"position":[[1220,7],[1260,7],[1294,7]]},"270":{"position":[[1832,7],[1873,7],[1909,7]]},"295":{"position":[[1329,7]]},"296":{"position":[[6969,7]]},"316":{"position":[[85,7],[157,7]]},"486":{"position":[[452,8]]},"658":{"position":[[452,8]]},"674":{"position":[[452,8]]},"675":{"position":[[385,7]]},"689":{"position":[[452,8]]},"1118":{"position":[[957,7]]}},"keywords":{}}],["previou",{"_index":741,"title":{},"content":{"42":{"position":[[492,8]]},"163":{"position":[[1083,8]]},"192":{"position":[[944,8]]},"239":{"position":[[484,8]]},"240":{"position":[[2665,8]]},"268":{"position":[[127,8]]},"269":{"position":[[134,8]]},"281":{"position":[[219,8],[2214,8]]},"309":{"position":[[3239,8]]},"478":{"position":[[151,8]]},"554":{"position":[[540,8]]},"599":{"position":[[151,8]]},"789":{"position":[[940,8]]},"909":{"position":[[885,8]]},"925":{"position":[[885,8]]},"936":{"position":[[885,8]]},"952":{"position":[[885,8]]},"970":{"position":[[885,8]]},"1036":{"position":[[255,8]]},"1201":{"position":[[185,8]]},"1293":{"position":[[185,8]]},"1307":{"position":[[185,8]]},"1317":{"position":[[185,8],[466,8]]},"1330":{"position":[[185,8]]},"1341":{"position":[[185,8],[466,8]]},"1352":{"position":[[185,8],[466,8]]},"1359":{"position":[[185,8]]},"1380":{"position":[[185,8]]},"1404":{"position":[[185,8]]},"1415":{"position":[[185,8]]},"1432":{"position":[[185,8],[466,8]]},"1442":{"position":[[1425,8],[1745,9]]},"1443":{"position":[[371,8]]},"1471":{"position":[[981,8]]}},"keywords":{}}],["previous",{"_index":417,"title":{},"content":{"13":{"position":[[1791,11]]},"121":{"position":[[629,10]]},"218":{"position":[[714,11]]},"224":{"position":[[935,11]]},"291":{"position":[[953,11]]},"295":{"position":[[1144,10]]},"302":{"position":[[952,11]]},"574":{"position":[[494,10]]},"752":{"position":[[920,10]]},"791":{"position":[[954,10]]},"840":{"position":[[1856,11],[2088,11],[2153,11]]},"849":{"position":[[2904,10],[3228,11],[3293,11]]},"1020":{"position":[[415,10],[896,10]]},"1138":{"position":[[1813,10]]},"1201":{"position":[[406,10]]},"1286":{"position":[[2648,10]]},"1301":{"position":[[2484,10]]},"1313":{"position":[[1357,10]]},"1317":{"position":[[635,11],[859,11]]},"1325":{"position":[[2648,10]]},"1337":{"position":[[1357,10]]},"1341":{"position":[[635,11],[859,11]]},"1348":{"position":[[1357,10]]},"1352":{"position":[[635,11],[859,11]]},"1367":{"position":[[165,10]]},"1376":{"position":[[563,10]]},"1400":{"position":[[563,10]]},"1411":{"position":[[563,10]]},"1427":{"position":[[1117,10]]},"1432":{"position":[[649,11],[887,11]]}},"keywords":{}}],["previouslybackup",{"_index":4673,"title":{},"content":{"767":{"position":[[1543,16]]},"824":{"position":[[1607,16]]}},"keywords":{}}],["price",{"_index":1922,"title":{},"content":{"162":{"position":[[1873,6],[2040,5],[2082,6],[2159,6],[2223,6],[2274,6]]},"168":{"position":[[97,7]]},"320":{"position":[[2446,7],[2492,7]]},"323":{"position":[[2063,7]]},"330":{"position":[[453,7]]},"1388":{"position":[[137,6]]}},"keywords":{}}],["pricesattach",{"_index":3769,"title":{},"content":{"457":{"position":[[130,14]]}},"keywords":{}}],["primari",{"_index":432,"title":{},"content":{"14":{"position":[[692,7],[875,7],[1199,7]]},"42":{"position":[[225,7]]},"69":{"position":[[672,7]]},"72":{"position":[[741,7]]},"75":{"position":[[183,7]]},"94":{"position":[[673,7]]},"122":{"position":[[860,7]]},"138":{"position":[[1151,7],[1196,7]]},"141":{"position":[[1240,7],[1279,7]]},"142":{"position":[[1120,7],[1173,7]]},"236":{"position":[[2216,7],[3001,7],[3381,7]]},"237":{"position":[[1228,7]]},"278":{"position":[[1062,7]]},"279":{"position":[[1288,7]]},"280":{"position":[[1547,7]]},"319":{"position":[[439,7]]},"326":{"position":[[573,9]]},"367":{"position":[[643,7]]},"406":{"position":[[103,7]]},"752":{"position":[[291,7]]},"753":{"position":[[947,7]]},"767":{"position":[[1139,7],[1927,7]]},"791":{"position":[[244,7]]},"792":{"position":[[1867,7]]},"793":{"position":[[918,7]]},"808":{"position":[[864,7]]},"824":{"position":[[1205,7],[1989,7]]},"864":{"position":[[882,7]]},"904":{"position":[[1743,7]]},"911":{"position":[[520,7]]},"917":{"position":[[1252,7]]},"918":{"position":[[2035,7]]},"919":{"position":[[2090,7]]},"927":{"position":[[520,7]]},"931":{"position":[[1405,7]]},"938":{"position":[[520,7]]},"954":{"position":[[520,7]]},"965":{"position":[[1252,7]]},"972":{"position":[[520,7]]},"974":{"position":[[250,7]]},"1040":{"position":[[115,7],[190,7]]},"1042":{"position":[[723,7]]},"1043":{"position":[[1387,7]]},"1045":{"position":[[1196,7],[1258,7]]},"1047":{"position":[[81,7],[245,7]]},"1050":{"position":[[115,7],[190,7]]},"1051":{"position":[[1649,7]]},"1053":{"position":[[1196,7],[1258,7]]},"1055":{"position":[[81,7],[245,7]]},"1058":{"position":[[115,7],[190,7]]},"1059":{"position":[[1442,7]]},"1061":{"position":[[1196,7],[1258,7]]},"1063":{"position":[[81,7],[245,7]]},"1140":{"position":[[1624,7]]},"1183":{"position":[[78,7]]},"1209":{"position":[[364,7]]},"1292":{"position":[[3069,7]]},"1306":{"position":[[3069,7]]},"1316":{"position":[[1624,7]]},"1329":{"position":[[3069,7]]},"1340":{"position":[[1624,7]]},"1351":{"position":[[1624,7]]},"1370":{"position":[[780,7]]},"1379":{"position":[[2393,7]]},"1403":{"position":[[2393,7]]},"1414":{"position":[[2393,7]]},"1431":{"position":[[1647,7]]}},"keywords":{}}],["primarili",{"_index":3854,"title":{},"content":{"485":{"position":[[264,9]]},"657":{"position":[[264,9]]},"673":{"position":[[264,9]]},"688":{"position":[[264,9]]}},"keywords":{}}],["primary_key",{"_index":5254,"title":{},"content":{"1045":{"position":[[1183,12]]},"1046":{"position":[[309,12]]},"1053":{"position":[[1183,12]]},"1054":{"position":[[309,12]]},"1061":{"position":[[1183,12]]},"1062":{"position":[[309,12]]}},"keywords":{}}],["primit",{"_index":1936,"title":{},"content":{"164":{"position":[[252,10]]},"319":{"position":[[447,9]]},"321":{"position":[[1086,11]]},"1164":{"position":[[109,9]]},"1172":{"position":[[155,9],[184,9]]},"1222":{"position":[[155,9],[184,9]]}},"keywords":{}}],["princip",{"_index":1993,"title":{},"content":{"171":{"position":[[147,9],[205,10]]},"173":{"position":[[987,9]]},"436":{"position":[[915,9]]}},"keywords":{}}],["principl",{"_index":3852,"title":{},"content":{"483":{"position":[[285,9]]}},"keywords":{}}],["print",{"_index":2576,"title":{"284":{"position":[[0,5]]}},"content":{"237":{"position":[[3257,5],[3430,6]]},"284":{"position":[[508,5],[596,5]]},"1379":{"position":[[2441,5]]},"1403":{"position":[[2441,5]]},"1414":{"position":[[2441,5]]},"1471":{"position":[[61,5],[661,8]]}},"keywords":{}}],["print(f"receiv",{"_index":2671,"title":{},"content":{"250":{"position":[[1005,21]]}},"keywords":{}}],["printf('$%.2f",{"_index":1372,"title":{},"content":{"96":{"position":[[252,15]]}},"keywords":{}}],["prior",{"_index":2846,"title":{},"content":{"279":{"position":[[314,5]]},"483":{"position":[[170,5]]},"554":{"position":[[224,5]]},"578":{"position":[[226,5]]},"891":{"position":[[235,5]]},"922":{"position":[[660,5]]},"1140":{"position":[[1678,5]]},"1203":{"position":[[411,5]]},"1243":{"position":[[715,5],[959,5]]},"1316":{"position":[[1678,5]]},"1340":{"position":[[1678,5]]},"1351":{"position":[[1678,5]]},"1379":{"position":[[2497,5]]},"1403":{"position":[[2497,5]]},"1414":{"position":[[2497,5]]},"1431":{"position":[[1701,5]]},"1434":{"position":[[543,5],[610,5]]},"1442":{"position":[[1494,5],[1593,5]]},"1443":{"position":[[877,5]]},"1452":{"position":[[834,5]]},"1453":{"position":[[207,5]]}},"keywords":{}}],["priorit",{"_index":802,"title":{},"content":{"53":{"position":[[567,10]]},"84":{"position":[[336,11]]},"324":{"position":[[259,11]]},"363":{"position":[[45,10]]}},"keywords":{}}],["prioriti",{"_index":1362,"title":{"111":{"position":[[5,9]]}},"content":{"94":{"position":[[3023,8],[3161,9]]},"109":{"position":[[790,9]]},"111":{"position":[[369,10],[425,8],[482,10],[551,8],[628,8]]},"120":{"position":[[2198,8],[2288,9],[2413,8],[2598,9]]}},"keywords":{}}],["prioritiesissu",{"_index":4473,"title":{},"content":{"709":{"position":[[272,15]]}},"keywords":{}}],["priorto",{"_index":1713,"title":{},"content":{"128":{"position":[[295,7]]}},"keywords":{}}],["privat",{"_index":1230,"title":{},"content":{"83":{"position":[[1269,7],[1490,7],[2345,7]]},"88":{"position":[[499,7]]},"221":{"position":[[1055,7],[1113,7],[1310,7]]},"222":{"position":[[300,7],[358,7],[555,7]]},"223":{"position":[[266,7],[324,7],[521,7]]},"224":{"position":[[319,7],[377,7],[574,7]]},"225":{"position":[[404,7],[454,7]]},"301":{"position":[[752,7]]},"370":{"position":[[1913,7],[1925,7]]},"371":{"position":[[409,7],[1264,7]]},"454":{"position":[[263,7],[285,7]]},"546":{"position":[[327,7],[367,7]]},"594":{"position":[[315,7],[355,7]]},"643":{"position":[[94,7]]},"645":{"position":[[68,7],[125,7],[289,7]]},"646":{"position":[[426,7],[466,7]]},"647":{"position":[[135,7]]},"650":{"position":[[93,7]]},"652":{"position":[[68,7],[125,7],[289,7]]},"654":{"position":[[147,7],[187,7]]},"655":{"position":[[141,7]]},"704":{"position":[[65,7]]},"868":{"position":[[377,7]]},"880":{"position":[[378,7]]},"1066":{"position":[[41,7]]},"1067":{"position":[[57,7],[529,7],[645,7]]},"1070":{"position":[[383,7],[489,7],[607,7]]},"1138":{"position":[[1203,7],[1215,7]]},"1139":{"position":[[296,7],[1151,7]]},"1272":{"position":[[207,7],[239,7]]},"1289":{"position":[[1558,7],[1625,7]]},"1298":{"position":[[266,7],[324,7],[521,7]]},"1303":{"position":[[1229,7]]},"1310":{"position":[[879,7],[946,7]]},"1322":{"position":[[300,7],[358,7],[555,7]]},"1335":{"position":[[300,7],[358,7],[555,7]]},"1346":{"position":[[266,7],[324,7],[521,7],[1284,7],[1351,7]]},"1384":{"position":[[259,7],[1120,7]]},"1386":{"position":[[1027,7]]},"1387":{"position":[[858,7],[914,7]]},"1392":{"position":[[233,7]]}},"keywords":{}}],["private_key",{"_index":3762,"title":{},"content":{"454":{"position":[[250,12]]},"455":{"position":[[161,12]]}},"keywords":{}}],["privatekey",{"_index":1240,"title":{},"content":{"83":{"position":[[1460,11]]},"225":{"position":[[418,11]]},"371":{"position":[[379,11]]},"868":{"position":[[350,11]]},"880":{"position":[[351,11]]},"1139":{"position":[[266,11]]},"1387":{"position":[[833,11]]}},"keywords":{}}],["priveleg",{"_index":6253,"title":{},"content":{"1303":{"position":[[1553,10]]}},"keywords":{}}],["privileg",{"_index":2564,"title":{},"content":{"236":{"position":[[3421,10]]},"237":{"position":[[701,9],[1543,10],[1638,10]]},"242":{"position":[[455,10],[495,10],[566,10]]},"367":{"position":[[514,10],[683,10]]},"645":{"position":[[252,11]]},"652":{"position":[[252,11]]},"871":{"position":[[71,10]]},"904":{"position":[[1614,10],[1783,10]]},"917":{"position":[[522,10],[1154,11],[1292,10]]},"918":{"position":[[1906,10],[2075,10]]},"919":{"position":[[1059,10],[1705,10],[2130,10]]},"931":{"position":[[1276,10],[1445,10]]},"943":{"position":[[118,10],[326,10]]},"944":{"position":[[265,10],[430,10]]},"965":{"position":[[522,10],[1154,11],[1292,10]]},"1140":{"position":[[1726,10]]},"1194":{"position":[[153,10],[224,12],[245,9],[367,11],[429,10]]},"1292":{"position":[[3113,10]]},"1303":{"position":[[1301,10]]},"1306":{"position":[[3113,10]]},"1316":{"position":[[1726,10]]},"1329":{"position":[[3113,10]]},"1340":{"position":[[1726,10]]},"1351":{"position":[[1726,10]]},"1379":{"position":[[2548,10]]},"1403":{"position":[[2548,10]]},"1414":{"position":[[2548,10]]},"1418":{"position":[[160,10],[204,10],[225,9]]},"1431":{"position":[[1749,10]]}},"keywords":{}}],["privilege_ch",{"_index":6077,"title":{},"content":{"1292":{"position":[[3169,13]]},"1306":{"position":[[3169,13]]},"1329":{"position":[[3169,13]]}},"keywords":{}}],["privileges.permiss",{"_index":4585,"title":{},"content":{"750":{"position":[[820,21]]},"766":{"position":[[820,21]]},"789":{"position":[[1221,21]]},"807":{"position":[[808,21]]},"823":{"position":[[808,21]]}},"keywords":{}}],["pro",{"_index":4395,"title":{},"content":{"649":{"position":[[551,3],[590,3]]}},"keywords":{}}],["probabl",{"_index":2482,"title":{},"content":{"228":{"position":[[575,8]]}},"keywords":{}}],["problem",{"_index":738,"title":{},"content":{"41":{"position":[[685,8]]},"106":{"position":[[760,8]]},"158":{"position":[[244,8]]},"281":{"position":[[460,7]]},"328":{"position":[[51,8]]},"660":{"position":[[201,8]]},"910":{"position":[[225,7]]},"926":{"position":[[225,7]]},"937":{"position":[[225,7]]},"953":{"position":[[225,7]]},"971":{"position":[[225,7]]}},"keywords":{}}],["proc",{"_index":6325,"title":{},"content":{"1379":{"position":[[2598,4]]},"1403":{"position":[[2598,4]]},"1414":{"position":[[2598,4]]}},"keywords":{}}],["proce",{"_index":1812,"title":{},"content":{"140":{"position":[[477,7]]},"183":{"position":[[486,7]]},"267":{"position":[[854,7]]},"515":{"position":[[995,7]]},"762":{"position":[[460,8]]},"775":{"position":[[460,8]]},"802":{"position":[[460,8]]},"817":{"position":[[460,8]]},"833":{"position":[[460,8]]},"1201":{"position":[[121,7]]},"1293":{"position":[[121,7]]},"1307":{"position":[[121,7]]},"1317":{"position":[[121,7]]},"1330":{"position":[[121,7]]},"1341":{"position":[[121,7]]},"1352":{"position":[[121,7]]},"1359":{"position":[[121,7]]},"1380":{"position":[[121,7]]},"1404":{"position":[[121,7]]},"1415":{"position":[[121,7]]},"1432":{"position":[[121,7]]},"1443":{"position":[[1026,8]]}},"keywords":{}}],["procedur",{"_index":2170,"title":{},"content":{"193":{"position":[[703,10]]},"319":{"position":[[605,10]]},"330":{"position":[[362,9]]},"1140":{"position":[[1771,9]]},"1292":{"position":[[3228,9]]},"1306":{"position":[[3228,9]]},"1316":{"position":[[1771,9]]},"1329":{"position":[[3228,9]]},"1340":{"position":[[1771,9]]},"1351":{"position":[[1771,9]]},"1379":{"position":[[2643,9]]},"1403":{"position":[[2643,9]]},"1414":{"position":[[2643,9]]},"1431":{"position":[[1794,9]]}},"keywords":{}}],["process",{"_index":495,"title":{"109":{"position":[[0,10]]},"578":{"position":[[0,10]]}},"content":{"17":{"position":[[460,10],[824,10]]},"19":{"position":[[400,7]]},"20":{"position":[[8,7],[85,9],[281,11]]},"49":{"position":[[328,10],[514,10]]},"64":{"position":[[83,8],[200,8]]},"66":{"position":[[6,9],[212,7]]},"74":{"position":[[273,10]]},"82":{"position":[[737,8]]},"88":{"position":[[102,8]]},"94":{"position":[[1597,10],[1765,7],[1838,7],[1947,10],[2131,7],[2204,7],[2649,9]]},"101":{"position":[[348,7],[612,7]]},"105":{"position":[[98,9],[212,10],[290,9]]},"106":{"position":[[135,9],[209,7]]},"107":{"position":[[339,9],[429,7],[494,10],[663,7],[1573,7],[2303,9],[2419,9],[3421,7]]},"109":{"position":[[180,7],[440,7],[552,10],[646,7],[712,10]]},"110":{"position":[[68,10],[226,9]]},"111":{"position":[[73,9],[160,10],[342,10],[414,10],[579,9]]},"112":{"position":[[244,7]]},"115":{"position":[[957,10]]},"117":{"position":[[201,10],[608,10]]},"120":{"position":[[1149,10],[1317,7],[1390,7],[1499,10],[1683,7],[1756,7],[2228,9],[2312,9],[2468,9],[2545,10]]},"123":{"position":[[677,7]]},"124":{"position":[[6,9]]},"135":{"position":[[450,9]]},"159":{"position":[[450,10]]},"163":{"position":[[238,7],[758,10],[909,9]]},"169":{"position":[[1719,7]]},"183":{"position":[[2575,9]]},"190":{"position":[[1753,7]]},"192":{"position":[[2115,7]]},"193":{"position":[[630,7]]},"197":{"position":[[336,9]]},"206":{"position":[[724,7]]},"208":{"position":[[1164,7]]},"209":{"position":[[1181,8]]},"210":{"position":[[2148,9],[3996,7]]},"211":{"position":[[113,8],[867,9]]},"217":{"position":[[75,7]]},"230":{"position":[[288,8]]},"237":{"position":[[386,8],[1743,8],[3119,9]]},"240":{"position":[[2225,7],[2438,8],[3427,10]]},"242":{"position":[[237,8],[284,7]]},"253":{"position":[[806,9],[1040,7]]},"254":{"position":[[3255,11],[3333,9]]},"275":{"position":[[1136,7]]},"278":{"position":[[123,7]]},"279":{"position":[[404,11],[721,7]]},"286":{"position":[[125,7]]},"295":{"position":[[1213,7]]},"296":{"position":[[3233,7],[3298,10]]},"313":{"position":[[806,9],[1040,7]]},"314":{"position":[[2830,11],[2908,9]]},"319":{"position":[[80,11],[486,10]]},"320":{"position":[[2110,8],[2166,11],[2378,10]]},"321":{"position":[[54,10],[1075,10],[1868,9]]},"322":{"position":[[176,10]]},"323":{"position":[[1168,10]]},"326":{"position":[[1849,10]]},"330":{"position":[[225,10]]},"333":{"position":[[39,7],[120,10],[214,7]]},"340":{"position":[[579,7]]},"343":{"position":[[57,10],[428,7],[658,8],[919,7]]},"373":{"position":[[800,8]]},"379":{"position":[[927,8]]},"384":{"position":[[259,8]]},"595":{"position":[[1184,7]]},"602":{"position":[[686,10]]},"603":{"position":[[57,10],[234,10]]},"609":{"position":[[427,8]]},"660":{"position":[[227,10]]},"757":{"position":[[2280,7]]},"763":{"position":[[451,7]]},"770":{"position":[[2280,7]]},"776":{"position":[[451,7]]},"785":{"position":[[350,7]]},"797":{"position":[[2287,7]]},"803":{"position":[[457,7]]},"812":{"position":[[2287,7]]},"818":{"position":[[457,7]]},"821":{"position":[[979,9]]},"828":{"position":[[2287,7]]},"834":{"position":[[457,7]]},"867":{"position":[[1609,8]]},"870":{"position":[[378,9],[515,7],[752,9],[989,11]]},"911":{"position":[[563,7]]},"927":{"position":[[563,7]]},"938":{"position":[[563,7]]},"947":{"position":[[1362,8]]},"954":{"position":[[563,7]]},"972":{"position":[[563,7]]},"974":{"position":[[105,10]]},"975":{"position":[[117,10],[241,10],[390,10]]},"977":{"position":[[659,10]]},"989":{"position":[[722,8]]},"1004":{"position":[[805,8]]},"1006":{"position":[[164,10]]},"1020":{"position":[[780,9]]},"1147":{"position":[[159,10]]},"1156":{"position":[[304,10]]},"1174":{"position":[[159,10]]},"1216":{"position":[[159,10]]},"1224":{"position":[[159,10]]},"1292":{"position":[[3280,7]]},"1306":{"position":[[3280,7]]},"1329":{"position":[[3280,7]]},"1437":{"position":[[1104,10]]},"1440":{"position":[[359,9]]},"1442":{"position":[[661,7],[1101,10]]},"1443":{"position":[[774,7],[1091,10]]},"1444":{"position":[[633,10],[898,10]]},"1451":{"position":[[14,9],[108,7],[657,10]]},"1474":{"position":[[51,10],[84,10]]},"1475":{"position":[[101,10],[245,9]]},"1480":{"position":[[855,10],[1023,7],[1096,7],[1205,10],[1389,7],[1462,7]]}},"keywords":{}}],["process.select",{"_index":5240,"title":{},"content":{"1040":{"position":[[844,15]]},"1050":{"position":[[844,15]]},"1058":{"position":[[844,15]]}},"keywords":{}}],["processing.<br/>",{"_index":6461,"title":{},"content":{"1434":{"position":[[1950,23]]}},"keywords":{}}],["processlist",{"_index":6086,"title":{},"content":{"1292":{"position":[[3327,11]]},"1306":{"position":[[3327,11]]},"1329":{"position":[[3327,11]]}},"keywords":{}}],["processor",{"_index":3127,"title":{},"content":{"320":{"position":[[1952,11]]}},"keywords":{}}],["prod",{"_index":2026,"title":{},"content":{"173":{"position":[[1147,4]]}},"keywords":{}}],["prod.flow.yaml",{"_index":6616,"title":{},"content":{"1461":{"position":[[3049,14],[3713,14],[4035,15]]}},"keywords":{}}],["produc",{"_index":481,"title":{},"content":{"16":{"position":[[1000,7]]},"50":{"position":[[37,7]]},"96":{"position":[[521,7]]},"110":{"position":[[759,9],[1300,7]]},"113":{"position":[[927,7]]},"162":{"position":[[1195,8]]},"219":{"position":[[360,8]]},"228":{"position":[[148,8]]},"305":{"position":[[107,7],[152,10]]},"321":{"position":[[2102,7]]},"483":{"position":[[581,7]]},"595":{"position":[[886,8]]},"764":{"position":[[561,9]]},"777":{"position":[[561,9]]},"804":{"position":[[559,9]]},"819":{"position":[[559,9]]},"835":{"position":[[559,9]]},"912":{"position":[[953,7]]},"1008":{"position":[[769,8]]},"1429":{"position":[[632,7]]},"1459":{"position":[[451,8]]}},"keywords":{}}],["product",{"_index":692,"title":{"1082":{"position":[[36,11]]}},"content":{"37":{"position":[[240,9]]},"41":{"position":[[322,9]]},"70":{"position":[[162,8]]},"107":{"position":[[1633,8],[3056,7],[3481,8]]},"110":{"position":[[672,7]]},"136":{"position":[[200,10]]},"156":{"position":[[787,10],[803,9]]},"168":{"position":[[295,10]]},"177":{"position":[[204,10]]},"213":{"position":[[169,10]]},"232":{"position":[[460,7]]},"236":{"position":[[2971,8],[3719,8]]},"237":{"position":[[534,10],[1044,8],[1092,8]]},"238":{"position":[[827,8],[1153,8],[1222,9],[1291,9]]},"280":{"position":[[230,7]]},"281":{"position":[[86,7]]},"329":{"position":[[940,11]]},"333":{"position":[[96,10]]},"381":{"position":[[272,7],[353,7],[380,7],[401,7],[428,7],[454,7],[489,7],[517,7]]},"428":{"position":[[178,10],[263,10]]},"429":{"position":[[347,10]]},"458":{"position":[[85,7]]},"460":{"position":[[349,7],[365,7]]},"461":{"position":[[224,7]]},"726":{"position":[[280,8]]},"840":{"position":[[318,10]]},"842":{"position":[[137,10]]},"849":{"position":[[261,10]]},"851":{"position":[[114,10]]},"922":{"position":[[2144,10]]},"1078":{"position":[[1626,8]]},"1080":{"position":[[55,10]]},"1081":{"position":[[54,10]]},"1082":{"position":[[43,10]]},"1085":{"position":[[127,10]]},"1461":{"position":[[1274,8],[2256,7],[2697,11],[2857,10],[3685,10],[4183,10],[4322,7]]}},"keywords":{}}],["product/id",{"_index":1040,"title":{},"content":{"69":{"position":[[744,13]]},"76":{"position":[[426,13],[750,12]]}},"keywords":{}}],["product_catalog",{"_index":3771,"title":{},"content":{"460":{"position":[[332,16]]},"461":{"position":[[198,16]]}},"keywords":{}}],["product_id",{"_index":1096,"title":{},"content":{"76":{"position":[[763,11]]},"107":{"position":[[3341,12],[4059,12]]}},"keywords":{}}],["production",{"_index":3168,"title":{},"content":{"324":{"position":[[906,13]]}},"keywords":{}}],["production.flow'",{"_index":3208,"title":{},"content":{"332":{"position":[[715,17]]}},"keywords":{}}],["productiondata/orders/orderdetail",{"_index":5904,"title":{},"content":{"1241":{"position":[[21,34]]}},"keywords":{}}],["products.sql",{"_index":2544,"title":{},"content":{"236":{"position":[[1889,13],[2129,12]]}},"keywords":{}}],["products/flow.yaml",{"_index":6608,"title":{},"content":{"1461":{"position":[[2002,18],[3558,18],[3760,18]]}},"keywords":{}}],["profession",{"_index":3191,"title":{},"content":{"329":{"position":[[1086,13]]}},"keywords":{}}],["profil",{"_index":3221,"title":{"385":{"position":[[26,9]]}},"content":{"339":{"position":[[190,8]]},"385":{"position":[[146,8],[568,8],[628,8],[692,7],[729,8]]},"387":{"position":[[762,9],[772,7],[795,7]]},"388":{"position":[[449,8]]},"989":{"position":[[196,7],[243,8],[413,7]]},"1004":{"position":[[279,7],[326,8],[496,7]]},"1292":{"position":[[3378,7],[3434,8]]},"1306":{"position":[[3378,7],[3434,8]]},"1329":{"position":[[3378,7],[3434,8]]}},"keywords":{}}],["profile'",{"_index":5143,"title":{},"content":{"989":{"position":[[265,9]]},"1004":{"position":[[348,9]]}},"keywords":{}}],["profilessponsor",{"_index":3462,"title":{},"content":{"381":{"position":[[46,17]]}},"keywords":{}}],["program",{"_index":2103,"title":{},"content":{"189":{"position":[[70,8]]},"738":{"position":[[717,9]]}},"keywords":{}}],["program.gener",{"_index":4515,"title":{},"content":{"718":{"position":[[232,16]]}},"keywords":{}}],["programm",{"_index":2318,"title":{},"content":{"210":{"position":[[2088,11]]}},"keywords":{}}],["programmat",{"_index":5855,"title":{},"content":{"1204":{"position":[[227,12]]}},"keywords":{}}],["progress",{"_index":37,"title":{},"content":{"1":{"position":[[440,8]]},"105":{"position":[[668,9]]},"595":{"position":[[400,13]]},"764":{"position":[[532,8]]},"777":{"position":[[532,8]]},"804":{"position":[[530,8]]},"819":{"position":[[530,8]]},"835":{"position":[[530,8]]},"1435":{"position":[[155,11]]},"1442":{"position":[[1022,10]]}},"keywords":{}}],["prohibit",{"_index":1548,"title":{},"content":{"107":{"position":[[2135,10]]},"1036":{"position":[[58,13]]},"1477":{"position":[[606,11]]}},"keywords":{}}],["project",{"_index":447,"title":{"15":{"position":[[0,11]]},"50":{"position":[[0,12]]},"76":{"position":[[0,12]]},"122":{"position":[[0,9]]},"227":{"position":[[36,12]]}},"content":{"16":{"position":[[1,11],[107,10],[222,12]]},"50":{"position":[[158,11],[324,11]]},"63":{"position":[[812,8]]},"64":{"position":[[542,8]]},"67":{"position":[[1167,10],[1353,10]]},"69":{"position":[[760,11],[841,12]]},"76":{"position":[[1,11],[184,11],[255,11],[308,12],[442,11],[521,10],[663,12],[1005,12]]},"82":{"position":[[1782,7],[2468,7],[4106,7],[4609,7]]},"92":{"position":[[950,7]]},"98":{"position":[[207,10]]},"99":{"position":[[199,11],[265,11],[288,11],[384,9]]},"122":{"position":[[266,11],[421,9],[567,11],[1270,11]]},"123":{"position":[[276,12]]},"158":{"position":[[348,11],[446,11]]},"162":{"position":[[1661,12],[1737,11]]},"203":{"position":[[280,8]]},"210":{"position":[[2435,7]]},"227":{"position":[[179,12]]},"228":{"position":[[858,11],[1029,11],[1086,9],[1310,11],[1405,12]]},"229":{"position":[[563,11],[770,9]]},"230":{"position":[[66,12],[649,9],[684,9],[1137,12]]},"280":{"position":[[2233,12]]},"288":{"position":[[319,8]]},"290":{"position":[[933,9]]},"322":{"position":[[81,9]]},"332":{"position":[[578,7]]},"351":{"position":[[397,7]]},"359":{"position":[[375,7]]},"367":{"position":[[891,7]]},"408":{"position":[[607,7]]},"422":{"position":[[14,7]]},"424":{"position":[[430,7]]},"454":{"position":[[619,7]]},"460":{"position":[[636,7]]},"466":{"position":[[343,7]]},"475":{"position":[[83,7]]},"479":{"position":[[270,7],[525,7]]},"482":{"position":[[72,7],[91,7],[110,7]]},"520":{"position":[[70,8]]},"521":{"position":[[138,7]]},"526":{"position":[[130,8]]},"527":{"position":[[273,9]]},"529":{"position":[[534,7],[548,7],[564,8]]},"548":{"position":[[932,7]]},"571":{"position":[[418,7],[661,8]]},"581":{"position":[[91,7]]},"582":{"position":[[274,8]]},"597":{"position":[[83,7]]},"601":{"position":[[71,7],[95,7]]},"617":{"position":[[343,7],[585,8]]},"625":{"position":[[242,7]]},"628":{"position":[[356,7]]},"631":{"position":[[570,7]]},"670":{"position":[[730,7]]},"700":{"position":[[381,7]]},"706":{"position":[[380,7]]},"712":{"position":[[572,7]]},"741":{"position":[[557,7]]},"745":{"position":[[90,7],[106,7],[132,7]]},"747":{"position":[[72,7],[88,7],[427,7],[498,7],[535,7],[1440,7]]},"851":{"position":[[661,7]]},"885":{"position":[[692,7]]},"897":{"position":[[336,7]]},"942":{"position":[[154,8],[305,8],[433,7],[491,7]]},"943":{"position":[[178,7]]},"947":{"position":[[358,8]]},"959":{"position":[[437,7]]},"964":{"position":[[725,7]]},"982":{"position":[[439,7]]},"995":{"position":[[63,7]]},"997":{"position":[[224,8],[233,7],[264,7],[405,7]]},"998":{"position":[[176,8]]},"1015":{"position":[[492,7]]},"1028":{"position":[[442,7]]},"1094":{"position":[[507,7]]},"1101":{"position":[[347,7]]},"1113":{"position":[[536,7]]},"1123":{"position":[[282,10]]},"1136":{"position":[[445,7]]},"1155":{"position":[[603,11]]},"1176":{"position":[[292,7]]},"1178":{"position":[[300,8]]},"1179":{"position":[[72,7],[87,7],[738,7],[753,7],[930,7]]},"1180":{"position":[[96,7]]},"1226":{"position":[[53,7],[111,8]]},"1227":{"position":[[183,8]]},"1228":{"position":[[198,8]]},"1230":{"position":[[479,7],[502,7]]},"1245":{"position":[[295,7],[537,8]]},"1275":{"position":[[306,9]]},"1277":{"position":[[285,8]]}},"keywords":{}}],["project>",{"_index":5156,"title":{},"content":{"998":{"position":[[194,11]]}},"keywords":{}}],["project."",{"_index":2330,"title":{},"content":{"210":{"position":[[2338,15]]}},"keywords":{}}],["project.gr",{"_index":5789,"title":{},"content":{"1177":{"position":[[185,13]]}},"keywords":{}}],["project.select",{"_index":5082,"title":{},"content":{"943":{"position":[[415,14]]}},"keywords":{}}],["project_id",{"_index":4569,"title":{},"content":{"748":{"position":[[193,11]]},"1179":{"position":[[857,10],[898,10]]},"1180":{"position":[[71,11]]},"1230":{"position":[[454,11]]},"1231":{"position":[[200,11]]}},"keywords":{}}],["project_timezon",{"_index":4562,"title":{},"content":{"747":{"position":[[409,17]]},"748":{"position":[[235,17]]}},"keywords":{}}],["projecta",{"_index":3813,"title":{},"content":{"475":{"position":[[233,8]]},"597":{"position":[[196,8]]}},"keywords":{}}],["projects/$projectid/databases/(default",{"_index":2928,"title":{},"content":{"290":{"position":[[989,40]]}},"keywords":{}}],["projects/your",{"_index":1166,"title":{},"content":{"82":{"position":[[1768,13],[2454,13],[4092,13],[4595,13]]}},"keywords":{}}],["promin",{"_index":2433,"title":{},"content":{"218":{"position":[[665,10]]},"291":{"position":[[904,10]]},"302":{"position":[[904,10]]}},"keywords":{}}],["promot",{"_index":6474,"title":{},"content":{"1437":{"position":[[727,8]]}},"keywords":{}}],["promotion_cod",{"_index":5325,"title":{},"content":{"1078":{"position":[[1704,15]]}},"keywords":{}}],["prompt",{"_index":1759,"title":{},"content":{"136":{"position":[[114,8]]},"208":{"position":[[1134,9]]},"616":{"position":[[505,8]]},"987":{"position":[[45,8]]},"1002":{"position":[[45,8]]},"1268":{"position":[[252,8]]},"1455":{"position":[[427,9]]}},"keywords":{}}],["promptli",{"_index":2185,"title":{},"content":{"197":{"position":[[426,8]]},"976":{"position":[[376,8]]}},"keywords":{}}],["prong",{"_index":6394,"title":{},"content":{"1388":{"position":[[353,7]]}},"keywords":{}}],["proof",{"_index":2690,"title":{},"content":{"253":{"position":[[750,5]]},"313":{"position":[[750,5]]}},"keywords":{}}],["propag",{"_index":2186,"title":{},"content":{"197":{"position":[[517,11]]},"210":{"position":[[1689,9]]},"237":{"position":[[143,11]]}},"keywords":{}}],["proper",{"_index":4166,"title":{},"content":{"574":{"position":[[637,6]]}},"keywords":{}}],["properli",{"_index":2582,"title":{},"content":{"238":{"position":[[757,8]]},"240":{"position":[[4483,8]]},"840":{"position":[[2395,8]]},"846":{"position":[[327,8]]},"847":{"position":[[302,8]]},"849":{"position":[[1404,9],[3535,8]]},"1442":{"position":[[1271,8]]},"1465":{"position":[[919,8]]}},"keywords":{}}],["properti",{"_index":282,"title":{"343":{"position":[[0,11]]},"351":{"position":[[0,11]]},"359":{"position":[[0,11]]},"370":{"position":[[0,11]]},"377":{"position":[[0,11]]},"387":{"position":[[0,11]]},"392":{"position":[[0,11]]},"397":{"position":[[0,11]]},"402":{"position":[[0,11]]},"408":{"position":[[0,11]]},"417":{"position":[[0,11]]},"424":{"position":[[0,11]]},"432":{"position":[[0,11]]},"438":{"position":[[0,11]]},"448":{"position":[[0,11]]},"454":{"position":[[0,11]]},"460":{"position":[[0,11]]},"466":{"position":[[0,11]]},"482":{"position":[[0,11]]},"496":{"position":[[0,11]]},"502":{"position":[[0,11]]},"509":{"position":[[0,11]]},"517":{"position":[[0,11]]},"534":{"position":[[0,11]]},"540":{"position":[[0,11]]},"545":{"position":[[0,11]]},"556":{"position":[[0,11]]},"564":{"position":[[0,11]]},"573":{"position":[[0,11]]},"584":{"position":[[0,11]]},"593":{"position":[[0,11]]},"601":{"position":[[0,11]]},"611":{"position":[[0,11]]},"619":{"position":[[0,11]]},"625":{"position":[[0,11]]},"631":{"position":[[0,11]]},"637":{"position":[[0,11]]},"654":{"position":[[0,11]]},"670":{"position":[[0,11]]},"685":{"position":[[0,11]]},"700":{"position":[[0,11]]},"706":{"position":[[0,11]]},"712":{"position":[[0,11]]},"720":{"position":[[0,11]]},"728":{"position":[[0,11]]},"735":{"position":[[0,11]]},"741":{"position":[[0,11]]},"747":{"position":[[0,11]]},"757":{"position":[[0,11]]},"770":{"position":[[0,11]]},"782":{"position":[[0,11]]},"797":{"position":[[0,11]]},"812":{"position":[[0,11]]},"828":{"position":[[0,11]]},"842":{"position":[[0,11]]},"851":{"position":[[0,11]]},"859":{"position":[[0,11]]},"867":{"position":[[0,11]]},"879":{"position":[[0,11]]},"885":{"position":[[0,11]]},"891":{"position":[[0,11]]},"897":{"position":[[0,11]]},"907":{"position":[[0,11]]},"923":{"position":[[0,11]]},"934":{"position":[[0,11]]},"950":{"position":[[0,11]]},"959":{"position":[[0,11]]},"968":{"position":[[0,11]]},"982":{"position":[[0,11]]},"991":{"position":[[0,11]]},"997":{"position":[[0,11]]},"1009":{"position":[[0,11]]},"1015":{"position":[[0,11]]},"1028":{"position":[[0,11]]},"1034":{"position":[[9,11]]},"1035":{"position":[[8,11]]},"1045":{"position":[[0,11]]},"1053":{"position":[[0,11]]},"1061":{"position":[[0,11]]},"1070":{"position":[[0,11]]},"1076":{"position":[[0,11]]},"1085":{"position":[[0,11]]},"1094":{"position":[[0,11]]},"1101":{"position":[[0,11]]},"1107":{"position":[[0,11]]},"1113":{"position":[[0,11]]},"1125":{"position":[[0,11]]},"1133":{"position":[[0,11]]},"1138":{"position":[[0,11]]},"1144":{"position":[[0,11]]},"1151":{"position":[[0,11]]},"1162":{"position":[[0,11]]},"1170":{"position":[[0,11]]},"1179":{"position":[[0,11]]},"1188":{"position":[[0,11]]},"1196":{"position":[[0,11]]},"1206":{"position":[[0,11]]},"1213":{"position":[[0,11]]},"1220":{"position":[[0,11]]},"1230":{"position":[[0,11]]},"1238":{"position":[[0,11]]},"1247":{"position":[[0,11]]},"1253":{"position":[[0,11]]},"1260":{"position":[[0,11]]},"1266":{"position":[[0,11]]},"1277":{"position":[[0,11]]},"1285":{"position":[[0,11]]},"1300":{"position":[[0,11]]},"1313":{"position":[[0,11]]},"1324":{"position":[[0,11]]},"1337":{"position":[[0,11]]},"1348":{"position":[[0,11]]},"1356":{"position":[[0,11]]},"1367":{"position":[[0,11]]},"1376":{"position":[[0,11]]},"1386":{"position":[[0,11]]},"1400":{"position":[[0,11]]},"1411":{"position":[[0,11]]},"1420":{"position":[[0,11]]},"1427":{"position":[[0,11]]},"1457":{"position":[[0,11]]},"1481":{"position":[[0,11]]}},"content":{"8":{"position":[[920,10]]},"14":{"position":[[462,11]]},"55":{"position":[[87,8],[794,10],[897,10]]},"56":{"position":[[410,8]]},"67":{"position":[[238,10],[433,10]]},"70":{"position":[[738,11]]},"74":{"position":[[783,8]]},"83":{"position":[[712,10]]},"98":{"position":[[75,8],[410,8],[1253,11]]},"120":{"position":[[2824,8]]},"121":{"position":[[1006,11]]},"126":{"position":[[174,8]]},"159":{"position":[[239,11]]},"160":{"position":[[210,9],[777,11]]},"161":{"position":[[948,11]]},"162":{"position":[[2126,11],[2241,11]]},"165":{"position":[[1025,11],[1281,8]]},"166":{"position":[[380,11]]},"180":{"position":[[682,11]]},"183":{"position":[[1187,11],[1767,11],[3573,11]]},"184":{"position":[[585,11]]},"190":{"position":[[274,10],[348,10],[828,10]]},"192":{"position":[[245,10],[466,10]]},"207":{"position":[[926,11],[1181,8]]},"217":{"position":[[445,10],[929,10],[1527,11]]},"218":{"position":[[207,10],[476,10]]},"254":{"position":[[311,11],[1379,11],[3073,8]]},"268":{"position":[[819,11]]},"269":{"position":[[444,11]]},"279":{"position":[[1168,11]]},"280":{"position":[[1308,11]]},"281":{"position":[[2085,11]]},"290":{"position":[[409,10],[742,10]]},"291":{"position":[[195,10],[404,10]]},"296":{"position":[[419,11],[1390,11]]},"301":{"position":[[355,10],[675,10]]},"302":{"position":[[195,10],[404,10]]},"306":{"position":[[92,10],[399,10]]},"307":{"position":[[1331,11],[2199,11],[2803,9],[2829,8]]},"309":{"position":[[2165,11],[2762,11]]},"314":{"position":[[1109,11],[1128,11],[2648,8]]},"343":{"position":[[1,8]]},"351":{"position":[[12,8],[309,8]]},"359":{"position":[[26,10],[81,8],[286,8]]},"368":{"position":[[483,10]]},"370":{"position":[[229,8],[1994,8]]},"377":{"position":[[12,8],[1674,8]]},"379":{"position":[[671,10]]},"387":{"position":[[16,10],[163,10],[192,8],[1323,8]]},"392":{"position":[[12,8],[673,8]]},"397":{"position":[[12,8],[815,8]]},"402":{"position":[[12,8],[513,10],[639,8]]},"408":{"position":[[12,8],[516,8]]},"417":{"position":[[12,8],[2209,8]]},"419":{"position":[[1429,10],[1605,10]]},"424":{"position":[[12,8],[340,8]]},"432":{"position":[[12,8],[1183,8]]},"438":{"position":[[12,8],[1894,8]]},"441":{"position":[[38,10],[214,10]]},"448":{"position":[[16,10],[163,10],[192,8],[1210,8]]},"454":{"position":[[12,8],[529,8]]},"460":{"position":[[12,8],[546,8]]},"466":{"position":[[12,8],[257,8]]},"482":{"position":[[12,8],[489,8]]},"483":{"position":[[20,8]]},"491":{"position":[[1,8]]},"492":{"position":[[1,8]]},"496":{"position":[[12,8],[522,8]]},"499":{"position":[[410,10]]},"502":{"position":[[12,8],[1542,8]]},"504":{"position":[[1058,10],[1234,10]]},"509":{"position":[[12,8],[522,8]]},"517":{"position":[[483,8],[3945,8]]},"534":{"position":[[16,10],[163,10],[192,8],[1690,8]]},"540":{"position":[[12,8],[307,8]]},"545":{"position":[[12,8],[1604,8]]},"547":{"position":[[1431,10],[1607,10]]},"556":{"position":[[16,10],[163,10],[192,8],[2187,8]]},"564":{"position":[[12,8]]},"565":{"position":[[1,8]]},"573":{"position":[[26,10],[167,10],[196,8],[1266,8]]},"574":{"position":[[205,8]]},"581":{"position":[[125,8],[258,8]]},"582":{"position":[[140,9],[464,9]]},"584":{"position":[[26,10],[155,10],[184,8],[843,8],[878,8],[1338,8]]},"585":{"position":[[195,8]]},"590":{"position":[[1041,8]]},"593":{"position":[[12,8],[330,8]]},"601":{"position":[[12,8],[401,8]]},"608":{"position":[[81,9]]},"611":{"position":[[16,10],[163,10],[192,8],[985,10],[1177,8]]},"619":{"position":[[26,10],[93,8],[579,8]]},"625":{"position":[[12,8],[151,8]]},"631":{"position":[[12,8],[482,8]]},"634":{"position":[[402,10]]},"637":{"position":[[12,8],[1140,8]]},"639":{"position":[[1056,10],[1232,10]]},"646":{"position":[[305,10],[365,8],[720,8]]},"654":{"position":[[26,10],[86,8],[802,8]]},"660":{"position":[[812,9]]},"661":{"position":[[557,8]]},"664":{"position":[[1,8]]},"665":{"position":[[1,8]]},"670":{"position":[[12,8],[640,8]]},"679":{"position":[[1,8]]},"680":{"position":[[1,8]]},"685":{"position":[[16,10],[170,8],[464,8]]},"694":{"position":[[1,8]]},"695":{"position":[[1,8]]},"700":{"position":[[12,8],[292,8]]},"706":{"position":[[12,8],[292,8]]},"712":{"position":[[12,8],[487,8]]},"720":{"position":[[16,10],[163,10],[192,8],[796,8]]},"728":{"position":[[1,8]]},"735":{"position":[[26,10],[81,8],[379,8]]},"741":{"position":[[12,8],[469,8]]},"747":{"position":[[12,8],[628,10],[1351,8]]},"753":{"position":[[1668,8]]},"754":{"position":[[1214,8],[1263,8]]},"755":{"position":[[483,10]]},"757":{"position":[[12,8],[1901,8]]},"767":{"position":[[946,11],[2472,8]]},"768":{"position":[[483,10]]},"770":{"position":[[12,8],[1901,8]]},"782":{"position":[[12,8],[497,8]]},"792":{"position":[[1240,11],[2453,8]]},"793":{"position":[[1691,8]]},"794":{"position":[[1418,8],[1467,8]]},"795":{"position":[[481,10]]},"797":{"position":[[12,8],[1901,8]]},"808":{"position":[[1641,8]]},"809":{"position":[[1418,8],[1467,8]]},"810":{"position":[[481,10]]},"812":{"position":[[12,8],[1901,8]]},"821":{"position":[[1168,8]]},"824":{"position":[[1015,11],[2584,8]]},"825":{"position":[[1254,8],[1303,8]]},"826":{"position":[[481,10]]},"828":{"position":[[12,8],[1901,8]]},"842":{"position":[[12,8],[578,8],[1028,8],[1276,8],[1874,8]]},"851":{"position":[[12,8],[572,8]]},"859":{"position":[[16,10],[163,10],[192,8],[719,8]]},"867":{"position":[[12,8],[2098,8]]},"879":{"position":[[12,8],[1521,8]]},"885":{"position":[[12,8],[593,8]]},"891":{"position":[[12,8],[328,8]]},"897":{"position":[[12,8],[246,8]]},"904":{"position":[[1013,11],[2399,8]]},"905":{"position":[[486,10]]},"907":{"position":[[12,8],[1401,8]]},"918":{"position":[[1216,11],[2691,8]]},"919":{"position":[[2598,8]]},"920":{"position":[[486,10]]},"922":{"position":[[803,8]]},"923":{"position":[[12,8],[1401,8]]},"931":{"position":[[2120,8]]},"932":{"position":[[486,10]]},"934":{"position":[[12,8],[1401,8]]},"948":{"position":[[486,10]]},"950":{"position":[[12,8],[1401,8]]},"959":{"position":[[12,8],[348,8]]},"966":{"position":[[486,10]]},"968":{"position":[[12,8],[1401,8]]},"982":{"position":[[12,8],[350,8]]},"991":{"position":[[16,10],[202,8],[773,8]]},"997":{"position":[[12,8],[318,8]]},"1008":{"position":[[1697,11]]},"1009":{"position":[[16,10],[202,8],[1512,8]]},"1015":{"position":[[12,8],[406,8]]},"1021":{"position":[[285,8],[2020,8]]},"1023":{"position":[[1412,10],[1588,10]]},"1028":{"position":[[12,8],[353,8]]},"1034":{"position":[[1,8]]},"1035":{"position":[[1,8]]},"1036":{"position":[[536,8]]},"1043":{"position":[[1933,8]]},"1045":{"position":[[12,8],[1020,8]]},"1051":{"position":[[2115,8]]},"1053":{"position":[[12,8],[1020,8]]},"1059":{"position":[[1967,8]]},"1061":{"position":[[12,8],[1020,8]]},"1070":{"position":[[16,10],[163,10],[192,8],[976,8]]},"1076":{"position":[[12,8],[759,8]]},"1085":{"position":[[16,10],[219,10],[248,8],[1350,8]]},"1094":{"position":[[12,8],[415,8]]},"1101":{"position":[[12,8],[249,8]]},"1107":{"position":[[12,8],[387,8]]},"1113":{"position":[[12,8],[449,8]]},"1125":{"position":[[12,8],[495,8]]},"1133":{"position":[[12,8],[1183,8]]},"1137":{"position":[[87,10]]},"1138":{"position":[[229,8],[1284,8]]},"1143":{"position":[[15,10]]},"1144":{"position":[[12,8],[1247,8]]},"1150":{"position":[[15,10]]},"1151":{"position":[[12,8],[1318,8]]},"1156":{"position":[[449,9]]},"1161":{"position":[[15,10]]},"1162":{"position":[[12,8],[751,8]]},"1169":{"position":[[15,10]]},"1170":{"position":[[12,8],[1172,8]]},"1178":{"position":[[87,10]]},"1179":{"position":[[12,8],[982,8]]},"1187":{"position":[[87,10]]},"1188":{"position":[[12,8],[701,8]]},"1195":{"position":[[87,10],[651,8]]},"1196":{"position":[[12,8],[859,8]]},"1205":{"position":[[87,10]]},"1206":{"position":[[12,8],[823,8]]},"1212":{"position":[[15,10]]},"1213":{"position":[[12,8],[924,8]]},"1219":{"position":[[15,10]]},"1220":{"position":[[12,8],[849,8]]},"1229":{"position":[[87,10]]},"1230":{"position":[[12,8],[802,8]]},"1239":{"position":[[1,8]]},"1240":{"position":[[1,8]]},"1246":{"position":[[87,10]]},"1247":{"position":[[26,10],[154,10],[183,8],[1020,8]]},"1253":{"position":[[12,8],[412,8]]},"1259":{"position":[[15,10]]},"1260":{"position":[[12,8],[866,8]]},"1265":{"position":[[94,10]]},"1267":{"position":[[1,8]]},"1269":{"position":[[1,8]]},"1277":{"position":[[12,8],[994,8]]},"1284":{"position":[[87,10]]},"1285":{"position":[[12,8]]},"1286":{"position":[[1504,8],[1553,8],[2495,8]]},"1299":{"position":[[87,10]]},"1300":{"position":[[12,8]]},"1301":{"position":[[1340,8],[1389,8],[2331,8]]},"1303":{"position":[[1763,8]]},"1312":{"position":[[87,10]]},"1313":{"position":[[12,8],[828,8]]},"1323":{"position":[[87,10]]},"1324":{"position":[[12,8]]},"1325":{"position":[[1504,8],[1553,8],[2495,8]]},"1336":{"position":[[87,10]]},"1337":{"position":[[12,8],[828,8]]},"1347":{"position":[[87,10]]},"1348":{"position":[[12,8],[828,8]]},"1355":{"position":[[87,10]]},"1356":{"position":[[12,8],[879,8]]},"1362":{"position":[[174,8],[465,8]]},"1367":{"position":[[12,8]]},"1373":{"position":[[1364,8]]},"1374":{"position":[[1368,8]]},"1375":{"position":[[87,10]]},"1376":{"position":[[12,8],[410,8]]},"1385":{"position":[[87,10]]},"1386":{"position":[[12,8],[1104,8]]},"1397":{"position":[[1202,8]]},"1398":{"position":[[1205,8]]},"1399":{"position":[[87,10]]},"1400":{"position":[[12,8],[410,8]]},"1409":{"position":[[1206,8]]},"1410":{"position":[[87,10]]},"1411":{"position":[[12,8],[410,8]]},"1419":{"position":[[87,10]]},"1420":{"position":[[12,8],[651,8]]},"1426":{"position":[[87,10]]},"1427":{"position":[[12,8],[555,8]]},"1452":{"position":[[244,8]]},"1457":{"position":[[1,8]]},"1463":{"position":[[342,11]]},"1464":{"position":[[198,11]]},"1465":{"position":[[493,11],[694,11],[943,11]]},"1466":{"position":[[157,11]]},"1467":{"position":[[237,9],[500,11],[745,11],[2171,11]]},"1470":{"position":[[751,8],[840,8]]},"1473":{"position":[[399,11]]},"1474":{"position":[[341,8]]},"1475":{"position":[[283,8]]},"1476":{"position":[[208,11],[1274,11]]},"1477":{"position":[[150,11],[848,8],[978,11],[1178,10],[3200,11],[3408,10]]},"1481":{"position":[[1,8]]}},"keywords":{}}],["properties.your",{"_index":3703,"title":{},"content":{"436":{"position":[[891,15]]}},"keywords":{}}],["propertiesissu",{"_index":4474,"title":{},"content":{"709":{"position":[[288,15]]}},"keywords":{}}],["property"",{"_index":6658,"title":{},"content":{"1467":{"position":[[1250,15]]}},"keywords":{}}],["property'",{"_index":6516,"title":{},"content":{"1448":{"position":[[246,10]]}},"keywords":{}}],["property_id",{"_index":4220,"title":{},"content":{"584":{"position":[[830,12]]},"586":{"position":[[283,12]]}},"keywords":{}}],["protect",{"_index":1140,"title":{"82":{"position":[[0,10]]}},"content":{"81":{"position":[[2902,7]]},"82":{"position":[[122,9],[310,7],[348,9],[1018,9],[1109,10],[1299,7],[1469,7],[1707,10],[2847,9],[2897,9],[3411,7],[3563,8],[3782,7]]},"879":{"position":[[974,10]]},"922":{"position":[[2168,7]]}},"keywords":{}}],["protocol",{"_index":1368,"title":{"1433":{"position":[[16,8]]},"1441":{"position":[[0,8]]}},"content":{"95":{"position":[[242,9]]},"192":{"position":[[675,8]]},"238":{"position":[[258,9]]},"247":{"position":[[175,9]]},"323":{"position":[[1495,8]]},"429":{"position":[[688,9]]},"1034":{"position":[[180,10]]},"1356":{"position":[[322,10]]},"1386":{"position":[[201,10]]},"1435":{"position":[[802,8]]},"1437":{"position":[[507,8]]},"1444":{"position":[[1010,8]]},"1451":{"position":[[96,8]]}},"keywords":{}}],["protocolth",{"_index":1272,"title":{},"content":{"84":{"position":[[940,11]]}},"keywords":{}}],["provabl",{"_index":1887,"title":{},"content":{"160":{"position":[[322,8]]}},"keywords":{}}],["provid",{"_index":490,"title":{},"content":{"17":{"position":[[105,7]]},"48":{"position":[[10,7],[172,7]]},"50":{"position":[[170,7]]},"56":{"position":[[1054,8],[1196,8]]},"60":{"position":[[908,8]]},"67":{"position":[[1833,8]]},"70":{"position":[[474,8]]},"76":{"position":[[289,7]]},"77":{"position":[[627,7]]},"81":{"position":[[168,9],[1092,7],[1294,7],[1487,7],[1689,7]]},"82":{"position":[[1261,7],[3103,7]]},"83":{"position":[[445,8]]},"84":{"position":[[224,7]]},"94":{"position":[[2463,8]]},"97":{"position":[[122,8]]},"98":{"position":[[429,8]]},"106":{"position":[[197,8]]},"115":{"position":[[1142,7]]},"120":{"position":[[394,8],[555,8]]},"122":{"position":[[1340,9]]},"123":{"position":[[376,7]]},"125":{"position":[[367,7]]},"129":{"position":[[73,8]]},"135":{"position":[[885,8]]},"154":{"position":[[1471,8],[2011,8]]},"158":{"position":[[15,7],[294,7],[670,7]]},"159":{"position":[[384,7]]},"164":{"position":[[113,7]]},"165":{"position":[[328,7]]},"170":{"position":[[142,8]]},"173":{"position":[[101,7]]},"175":{"position":[[112,8]]},"190":{"position":[[1568,8]]},"191":{"position":[[383,8]]},"192":{"position":[[1990,8]]},"196":{"position":[[176,9]]},"208":{"position":[[70,8]]},"217":{"position":[[269,8],[971,8]]},"218":{"position":[[286,8]]},"221":{"position":[[158,9]]},"233":{"position":[[176,9],[567,8]]},"234":{"position":[[101,9]]},"240":{"position":[[355,8],[409,8]]},"245":{"position":[[250,9]]},"250":{"position":[[58,9]]},"267":{"position":[[621,7]]},"275":{"position":[[852,7]]},"285":{"position":[[21,9]]},"290":{"position":[[246,8],[1130,8]]},"291":{"position":[[593,8]]},"296":{"position":[[5726,8]]},"301":{"position":[[199,8],[1042,9],[1339,8]]},"302":{"position":[[593,8]]},"315":{"position":[[1733,8]]},"320":{"position":[[678,7],[1298,9],[1511,8]]},"350":{"position":[[204,7]]},"358":{"position":[[204,7]]},"369":{"position":[[204,7]]},"376":{"position":[[204,7]]},"384":{"position":[[49,7]]},"385":{"position":[[304,8]]},"386":{"position":[[204,7]]},"391":{"position":[[204,7]]},"392":{"position":[[515,8]]},"396":{"position":[[204,7]]},"397":{"position":[[664,8]]},"401":{"position":[[250,7]]},"407":{"position":[[204,7]]},"416":{"position":[[204,7]]},"417":{"position":[[681,8],[1208,9]]},"419":{"position":[[494,7],[2293,9],[2326,8],[2468,7]]},"423":{"position":[[204,7]]},"429":{"position":[[615,9]]},"431":{"position":[[204,7]]},"437":{"position":[[204,7]]},"438":{"position":[[1724,9]]},"440":{"position":[[510,7]]},"441":{"position":[[902,9],[935,8],[1077,7]]},"447":{"position":[[204,7]]},"453":{"position":[[204,7]]},"459":{"position":[[204,7]]},"464":{"position":[[47,7]]},"465":{"position":[[204,7]]},"472":{"position":[[204,7]]},"478":{"position":[[181,7]]},"481":{"position":[[204,7]]},"486":{"position":[[242,8]]},"491":{"position":[[447,8]]},"495":{"position":[[204,7]]},"501":{"position":[[160,7]]},"502":{"position":[[246,9]]},"504":{"position":[[438,7],[1922,9],[1955,8],[2097,7]]},"508":{"position":[[204,7]]},"516":{"position":[[204,7]]},"525":{"position":[[204,7]]},"533":{"position":[[204,7]]},"539":{"position":[[204,7]]},"544":{"position":[[204,7]]},"545":{"position":[[817,9]]},"547":{"position":[[495,7],[2295,9],[2328,8],[2470,7]]},"555":{"position":[[201,7]]},"563":{"position":[[268,7]]},"572":{"position":[[204,7]]},"583":{"position":[[194,7]]},"592":{"position":[[201,7]]},"595":{"position":[[519,8],[1057,8]]},"599":{"position":[[181,7]]},"602":{"position":[[731,7]]},"610":{"position":[[204,7]]},"618":{"position":[[204,7]]},"624":{"position":[[204,7]]},"630":{"position":[[204,7]]},"636":{"position":[[204,7]]},"639":{"position":[[436,7],[1920,9],[1953,8],[2095,7]]},"646":{"position":[[204,7]]},"653":{"position":[[204,7]]},"658":{"position":[[242,8]]},"660":{"position":[[276,7]]},"664":{"position":[[468,8],[703,8]]},"669":{"position":[[204,7]]},"674":{"position":[[242,8]]},"679":{"position":[[447,8]]},"684":{"position":[[204,7]]},"689":{"position":[[242,8]]},"694":{"position":[[447,8]]},"699":{"position":[[204,7]]},"705":{"position":[[204,7]]},"711":{"position":[[204,7]]},"719":{"position":[[199,7]]},"727":{"position":[[204,7]]},"734":{"position":[[204,7]]},"740":{"position":[[204,7]]},"746":{"position":[[204,7]]},"756":{"position":[[204,7]]},"769":{"position":[[204,7]]},"780":{"position":[[492,8]]},"781":{"position":[[201,7]]},"782":{"position":[[413,8]]},"788":{"position":[[46,10],[115,8]]},"796":{"position":[[205,7]]},"811":{"position":[[204,7]]},"821":{"position":[[249,8]]},"827":{"position":[[204,7]]},"841":{"position":[[204,7]]},"842":{"position":[[1805,9]]},"850":{"position":[[204,7]]},"858":{"position":[[204,7]]},"866":{"position":[[204,7]]},"878":{"position":[[204,7]]},"884":{"position":[[204,7]]},"890":{"position":[[205,7]]},"895":{"position":[[178,7]]},"896":{"position":[[204,7]]},"906":{"position":[[204,7]]},"912":{"position":[[260,8]]},"914":{"position":[[144,8]]},"921":{"position":[[204,7]]},"922":{"position":[[3326,8]]},"933":{"position":[[204,7]]},"943":{"position":[[598,8]]},"949":{"position":[[204,7]]},"958":{"position":[[204,7]]},"967":{"position":[[204,7]]},"976":{"position":[[25,8]]},"977":{"position":[[389,8]]},"981":{"position":[[204,7]]},"990":{"position":[[204,7]]},"996":{"position":[[204,7]]},"1005":{"position":[[201,7]]},"1014":{"position":[[204,7]]},"1021":{"position":[[204,7],[576,9],[676,9],[916,9]]},"1023":{"position":[[475,7],[2276,9],[2309,8],[2451,7]]},"1027":{"position":[[204,7]]},"1033":{"position":[[208,7]]},"1036":{"position":[[396,9],[599,7]]},"1039":{"position":[[73,10],[248,8]]},"1044":{"position":[[204,7]]},"1052":{"position":[[204,7]]},"1060":{"position":[[204,7]]},"1069":{"position":[[204,7]]},"1075":{"position":[[204,7]]},"1084":{"position":[[204,7]]},"1093":{"position":[[204,7]]},"1100":{"position":[[204,7]]},"1106":{"position":[[205,7]]},"1112":{"position":[[204,7]]},"1124":{"position":[[204,7]]},"1125":{"position":[[458,8]]},"1129":{"position":[[114,9]]},"1132":{"position":[[205,7]]},"1144":{"position":[[819,8]]},"1151":{"position":[[478,8]]},"1170":{"position":[[819,8]]},"1188":{"position":[[197,9]]},"1197":{"position":[[104,8]]},"1207":{"position":[[329,8]]},"1251":{"position":[[253,8]]},"1252":{"position":[[201,7]]},"1268":{"position":[[448,8]]},"1272":{"position":[[53,9]]},"1286":{"position":[[2375,9],[2436,8]]},"1301":{"position":[[2211,9],[2272,8]]},"1317":{"position":[[394,7]]},"1325":{"position":[[2375,9],[2436,8]]},"1341":{"position":[[394,7]]},"1352":{"position":[[394,7]]},"1357":{"position":[[179,8]]},"1432":{"position":[[394,7]]},"1438":{"position":[[651,8]]},"1439":{"position":[[1689,7]]},"1447":{"position":[[599,7]]},"1452":{"position":[[3098,7],[3233,9],[4031,7]]},"1456":{"position":[[411,8]]},"1461":{"position":[[4307,7],[4627,9],[4728,8]]},"1477":{"position":[[2653,7]]},"1480":{"position":[[331,8],[489,8]]}},"keywords":{}}],["provided.verify_ident",{"_index":5977,"title":{},"content":{"1286":{"position":[[2181,25]]},"1301":{"position":[[2017,25]]},"1325":{"position":[[2181,25]]}},"keywords":{}}],["provider"",{"_index":4968,"title":{},"content":{"898":{"position":[[394,15]]}},"keywords":{}}],["provis",{"_index":633,"title":{"341":{"position":[[0,12]]}},"content":{"27":{"position":[[477,11]]},"60":{"position":[[316,9]]},"154":{"position":[[270,11]]},"204":{"position":[[16,12],[178,13]]},"205":{"position":[[316,9]]},"296":{"position":[[7559,9]]},"338":{"position":[[58,11],[558,9]]},"339":{"position":[[240,11]]},"341":{"position":[[22,9],[174,11]]},"397":{"position":[[1100,11]]},"477":{"position":[[506,9]]},"598":{"position":[[470,9]]},"947":{"position":[[1302,9]]}},"keywords":{}}],["proxi",{"_index":1006,"title":{},"content":{"67":{"position":[[874,5],[1486,5]]},"1292":{"position":[[3488,5]]},"1306":{"position":[[3488,5]]},"1329":{"position":[[3488,5]]}},"keywords":{}}],["prune",{"_index":1645,"title":{},"content":{"117":{"position":[[464,6]]},"1391":{"position":[[415,5],[1025,5]]}},"keywords":{}}],["pseudo",{"_index":133,"title":{},"content":{"3":{"position":[[771,6],[1010,6]]}},"keywords":{}}],["psql",{"_index":2584,"title":{},"content":{"238":{"position":[[862,4],[949,4]]},"367":{"position":[[159,4]]}},"keywords":{}}],["pt10m",{"_index":4774,"title":{},"content":{"842":{"position":[[2835,5]]},"843":{"position":[[776,5]]}},"keywords":{}}],["pt1h",{"_index":4768,"title":{},"content":{"842":{"position":[[2078,4]]}},"keywords":{}}],["pt30",{"_index":4055,"title":{},"content":{"541":{"position":[[222,5]]}},"keywords":{}}],["pt5m",{"_index":4802,"title":{},"content":{"843":{"position":[[687,4]]},"879":{"position":[[1504,4],[1792,4]]},"880":{"position":[[523,4]]},"1162":{"position":[[734,4]]},"1163":{"position":[[294,4]]}},"keywords":{}}],["ptf",{"_index":5599,"title":{},"content":{"1140":{"position":[[1823,3]]},"1316":{"position":[[1823,3]]},"1340":{"position":[[1823,3]]},"1351":{"position":[[1823,3]]},"1431":{"position":[[1846,3]]}},"keywords":{}}],["pub",{"_index":1908,"title":{},"content":{"162":{"position":[[254,3],[1471,3]]}},"keywords":{}}],["pub/sub",{"_index":690,"title":{"596":{"position":[[13,7]]},"1225":{"position":[[13,7]]}},"content":{"37":{"position":[[218,7]]},"66":{"position":[[388,7]]},"114":{"position":[[844,7]]},"125":{"position":[[310,7]]},"320":{"position":[[423,7]]},"363":{"position":[[1158,7]]},"597":{"position":[[96,7]]},"598":{"position":[[19,8]]},"602":{"position":[[39,7],[117,7],[567,8],[714,7]]},"1120":{"position":[[1123,7]]},"1226":{"position":[[77,7]]},"1229":{"position":[[126,7],[222,7]]},"1232":{"position":[[59,7]]},"1233":{"position":[[22,7]]},"1234":{"position":[[14,7]]},"1440":{"position":[[43,8],[1290,8]]}},"keywords":{}}],["pubin",{"_index":6385,"title":{},"content":{"1384":{"position":[[1000,5]]}},"keywords":{}}],["public",{"_index":651,"title":{"414":{"position":[[7,6]]},"911":{"position":[[0,13]]},"927":{"position":[[0,13]]},"938":{"position":[[0,13]]},"945":{"position":[[12,12]]},"954":{"position":[[0,13]]},"972":{"position":[[0,13]]}},"content":{"31":{"position":[[61,6]]},"56":{"position":[[837,13]]},"81":{"position":[[146,6]]},"88":{"position":[[314,12]]},"180":{"position":[[453,6]]},"189":{"position":[[140,7]]},"190":{"position":[[906,7]]},"222":{"position":[[168,6],[946,6]]},"223":{"position":[[134,6],[874,6]]},"224":{"position":[[187,6],[885,6],[910,6],[961,6]]},"225":{"position":[[151,6]]},"236":{"position":[[3488,11],[3524,11],[3600,11]]},"237":{"position":[[1760,11],[1796,11],[1872,11],[1956,11],[2061,11],[2184,11],[2270,12],[2334,11],[2551,12]]},"238":{"position":[[354,6],[423,6],[1100,6],[1144,6]]},"275":{"position":[[1001,11]]},"299":{"position":[[270,6]]},"307":{"position":[[1193,6],[2043,6]]},"330":{"position":[[440,6]]},"366":{"position":[[509,12]]},"367":{"position":[[333,12],[476,6],[535,6],[750,11]]},"370":{"position":[[921,11],[965,11]]},"414":{"position":[[7,6],[907,6]]},"417":{"position":[[832,6],[1023,6]]},"452":{"position":[[69,6]]},"454":{"position":[[326,6],[347,6]]},"485":{"position":[[467,6]]},"543":{"position":[[55,7],[122,6]]},"657":{"position":[[467,6],[550,6]]},"670":{"position":[[422,6]]},"673":{"position":[[467,6]]},"688":{"position":[[467,6]]},"767":{"position":[[98,6]]},"808":{"position":[[189,6],[1542,6]]},"824":{"position":[[211,6]]},"856":{"position":[[130,7]]},"903":{"position":[[535,12]]},"904":{"position":[[211,6],[1437,12],[1576,6],[1635,6],[1850,11],[1886,11],[1962,11]]},"907":{"position":[[704,11],[748,11]]},"911":{"position":[[28,11],[156,11],[254,11],[379,11]]},"915":{"position":[[535,12]]},"917":{"position":[[543,6],[627,7],[1177,12],[1359,11],[1395,11],[1471,11]]},"918":{"position":[[1729,12],[1868,6],[1927,6],[2142,11],[2178,11],[2254,11]]},"919":{"position":[[1080,6],[1164,7],[1677,12],[1726,6],[1810,7],[2197,11],[2233,11],[2309,11]]},"923":{"position":[[704,11],[748,11]]},"927":{"position":[[28,11],[156,11],[254,11],[379,11]]},"930":{"position":[[535,12]]},"931":{"position":[[189,6],[1094,12],[1238,6],[1297,6],[1512,11],[1548,11],[1624,11],[2021,6]]},"934":{"position":[[704,11],[748,11]]},"938":{"position":[[28,11],[156,11],[254,11],[379,11]]},"944":{"position":[[174,6],[231,6],[286,6],[473,12]]},"945":{"position":[[10,11],[132,11],[203,11],[533,12],[583,11]]},"950":{"position":[[704,11],[748,11]]},"954":{"position":[[28,11],[156,11],[254,11],[379,11]]},"963":{"position":[[689,12]]},"965":{"position":[[543,6],[627,7],[1177,12],[1359,11],[1395,11],[1471,11]]},"968":{"position":[[704,11],[748,11]]},"972":{"position":[[28,11],[156,11],[254,11],[379,11]]},"1051":{"position":[[211,6]]},"1059":{"position":[[189,6],[1868,6]]},"1140":{"position":[[1870,6]]},"1203":{"position":[[523,7]]},"1204":{"position":[[9,6]]},"1207":{"position":[[185,6]]},"1289":{"position":[[638,6],[795,6]]},"1297":{"position":[[8,6]]},"1298":{"position":[[134,6],[874,6]]},"1303":{"position":[[189,6],[1664,6]]},"1316":{"position":[[1870,6]]},"1322":{"position":[[168,6],[946,6]]},"1334":{"position":[[297,6]]},"1335":{"position":[[168,6],[946,6]]},"1340":{"position":[[1870,6]]},"1345":{"position":[[8,6]]},"1346":{"position":[[134,6],[874,6]]},"1351":{"position":[[1870,6]]},"1373":{"position":[[211,6]]},"1374":{"position":[[211,6]]},"1379":{"position":[[2689,6]]},"1384":{"position":[[364,6],[438,6],[501,6],[536,6],[570,6],[709,6]]},"1397":{"position":[[190,6],[1103,6]]},"1398":{"position":[[189,6],[1106,6]]},"1403":{"position":[[2689,6]]},"1414":{"position":[[2689,6]]},"1431":{"position":[[1893,6]]}},"keywords":{}}],["public.flow_watermark",{"_index":2561,"title":{},"content":{"236":{"position":[[3347,22],[3441,22],[3639,23]]},"237":{"position":[[1318,22],[1563,22],[1911,23],[2086,22]]},"367":{"position":[[609,22],[703,22]]},"904":{"position":[[1709,22],[1803,22],[2001,23]]},"917":{"position":[[1218,22],[1312,22],[1510,23]]},"918":{"position":[[2001,22],[2095,22],[2293,23]]},"919":{"position":[[2056,22],[2150,22],[2348,23]]},"931":{"position":[[1371,22],[1465,22],[1663,23]]},"965":{"position":[[1218,22],[1312,22],[1510,23]]}},"keywords":{}}],["public.product",{"_index":2567,"title":{},"content":{"236":{"position":[[3663,16]]},"237":{"position":[[1935,16],[2113,15]]}},"keywords":{}}],["public_key",{"_index":3763,"title":{},"content":{"454":{"position":[[314,11]]},"455":{"position":[[186,11]]}},"keywords":{}}],["publicli",{"_index":3578,"title":{},"content":{"413":{"position":[[144,8]]},"543":{"position":[[176,8]]},"767":{"position":[[1599,8]]},"792":{"position":[[398,8]]},"824":{"position":[[1663,8]]},"918":{"position":[[398,8]]},"1289":{"position":[[399,8]]},"1321":{"position":[[179,8]]},"1334":{"position":[[179,8]]}},"keywords":{}}],["publish",{"_index":261,"title":{"209":{"position":[[0,10]]},"264":{"position":[[19,8]]},"275":{"position":[[25,7]]}},"content":{"8":{"position":[[334,9]]},"11":{"position":[[1904,7]]},"12":{"position":[[21,7],[283,7]]},"13":{"position":[[451,9]]},"24":{"position":[[204,7]]},"26":{"position":[[139,7]]},"31":{"position":[[128,7]]},"33":{"position":[[321,7]]},"54":{"position":[[510,10]]},"55":{"position":[[174,7]]},"60":{"position":[[558,7]]},"61":{"position":[[203,9],[1106,7],[1267,7]]},"63":{"position":[[1021,7]]},"67":{"position":[[827,9],[1119,9]]},"75":{"position":[[465,10]]},"77":{"position":[[582,10]]},"79":{"position":[[157,7]]},"80":{"position":[[642,7]]},"88":{"position":[[163,9]]},"94":{"position":[[1638,9],[1988,9]]},"97":{"position":[[586,9],[626,9]]},"100":{"position":[[677,10],[909,9]]},"105":{"position":[[1606,9]]},"106":{"position":[[66,9]]},"108":{"position":[[194,7]]},"110":{"position":[[249,9],[441,10]]},"111":{"position":[[200,10]]},"114":{"position":[[200,7]]},"115":{"position":[[145,7],[265,9]]},"119":{"position":[[555,10]]},"120":{"position":[[1190,9],[1540,9],[2353,10]]},"121":{"position":[[372,7]]},"138":{"position":[[2635,7],[2718,10]]},"139":{"position":[[187,10]]},"140":{"position":[[376,7]]},"141":{"position":[[2225,7],[2311,10]]},"142":{"position":[[2712,7],[2803,10]]},"143":{"position":[[219,10]]},"144":{"position":[[248,10],[724,10]]},"165":{"position":[[1429,10],[1781,7],[1986,9],[2254,10]]},"183":{"position":[[4385,8],[4434,7],[4475,7],[4516,7]]},"184":{"position":[[973,8]]},"190":{"position":[[1880,8],[1906,10]]},"192":{"position":[[2242,8],[2256,9]]},"207":{"position":[[1329,10]]},"209":{"position":[[78,8],[120,7]]},"217":{"position":[[2170,8],[2222,9]]},"218":{"position":[[857,7],[2096,8],[2155,9]]},"227":{"position":[[380,11]]},"228":{"position":[[1496,8]]},"229":{"position":[[907,7]]},"230":{"position":[[1270,8]]},"237":{"position":[[2199,7]]},"239":{"position":[[2923,7]]},"240":{"position":[[4119,7],[4315,9]]},"253":{"position":[[777,10]]},"255":{"position":[[62,10],[885,7],[956,10],[1129,7],[1177,10]]},"257":{"position":[[120,9]]},"259":{"position":[[1464,8],[3010,8]]},"264":{"position":[[62,7],[507,7],[540,7],[830,9]]},"268":{"position":[[1873,7],[1913,7]]},"269":{"position":[[1335,7],[1375,7]]},"270":{"position":[[446,9],[1950,7],[1991,7]]},"273":{"position":[[96,9]]},"274":{"position":[[769,9]]},"275":{"position":[[83,7],[603,7],[636,7],[695,7],[807,7],[984,10]]},"277":{"position":[[1118,9]]},"278":{"position":[[1458,7]]},"279":{"position":[[664,10]]},"281":{"position":[[1695,10]]},"285":{"position":[[450,10]]},"290":{"position":[[1649,8],[1702,9]]},"291":{"position":[[1906,8],[1965,9]]},"296":{"position":[[4432,9],[6762,7],[6817,7],[6870,10],[7516,8]]},"301":{"position":[[1623,8],[1676,9]]},"302":{"position":[[1818,8],[1877,9]]},"309":{"position":[[1324,8],[1352,7],[1482,7],[1728,8],[1782,7]]},"313":{"position":[[777,10]]},"315":{"position":[[922,9]]},"316":{"position":[[62,10],[1210,7],[1281,10],[1454,7],[1502,10]]},"485":{"position":[[401,10]]},"486":{"position":[[7,10]]},"489":{"position":[[821,7]]},"595":{"position":[[290,10]]},"657":{"position":[[401,10]]},"658":{"position":[[7,10]]},"662":{"position":[[821,7]]},"673":{"position":[[401,10]]},"674":{"position":[[7,10]]},"677":{"position":[[821,7]]},"688":{"position":[[401,10]]},"689":{"position":[[7,10]]},"690":{"position":[[190,10]]},"692":{"position":[[821,7]]},"805":{"position":[[327,10]]},"820":{"position":[[327,10]]},"836":{"position":[[327,10]]},"947":{"position":[[1291,7]]},"1008":{"position":[[1920,7],[1999,7]]},"1047":{"position":[[994,7]]},"1055":{"position":[[994,7]]},"1063":{"position":[[994,7]]},"1230":{"position":[[1246,9],[1325,7]]},"1234":{"position":[[109,9],[186,10],[210,9]]},"1446":{"position":[[391,11]]},"1448":{"position":[[817,7]]},"1461":{"position":[[4027,7],[5310,9]]},"1470":{"position":[[106,7],[515,9]]},"1471":{"position":[[225,9]]},"1475":{"position":[[1507,8],[1866,7]]},"1480":{"position":[[896,9],[1246,9]]}},"keywords":{}}],["publish"",{"_index":3802,"title":{},"content":{"472":{"position":[[829,13]]},"479":{"position":[[909,13]]}},"keywords":{}}],["publish_via_partition_root",{"_index":2566,"title":{},"content":{"236":{"position":[[3557,27]]},"237":{"position":[[1829,27],[2294,26],[2508,26]]},"904":{"position":[[1919,27]]},"911":{"position":[[303,27]]},"917":{"position":[[1428,27]]},"918":{"position":[[2211,27]]},"919":{"position":[[2266,27]]},"927":{"position":[[303,27]]},"931":{"position":[[1581,27]]},"938":{"position":[[303,27]]},"945":{"position":[[236,27]]},"954":{"position":[[303,27]]},"965":{"position":[[1428,27]]},"972":{"position":[[303,27]]}},"keywords":{}}],["publish_via_partition_rootset",{"_index":5000,"title":{},"content":{"904":{"position":[[2125,33]]},"917":{"position":[[1634,33]]},"918":{"position":[[2417,33]]},"931":{"position":[[1787,33]]},"945":{"position":[[279,33]]},"965":{"position":[[1634,33]]}},"keywords":{}}],["pubout",{"_index":6372,"title":{},"content":{"1384":{"position":[[403,6]]}},"keywords":{}}],["pubsub",{"_index":4287,"title":{},"content":{"601":{"position":[[124,6],[347,6],[474,6]]},"1230":{"position":[[525,6],[601,6]]}},"keywords":{}}],["pubsub:dev",{"_index":3299,"title":{},"content":{"363":{"position":[[1219,10]]},"1120":{"position":[[1189,10]]}},"keywords":{}}],["pull",{"_index":761,"title":{"263":{"position":[[23,4]]},"274":{"position":[[0,4]]}},"content":{"44":{"position":[[382,6]]},"54":{"position":[[27,4]]},"60":{"position":[[510,4]]},"61":{"position":[[532,4],[743,4],[1003,6],[1307,4]]},"62":{"position":[[10,4],[87,4],[194,5],[229,4],[340,5],[423,5]]},"63":{"position":[[129,4],[557,7]]},"81":{"position":[[83,6]]},"229":{"position":[[77,4],[161,4]]},"240":{"position":[[3501,6]]},"263":{"position":[[768,4]]},"270":{"position":[[681,4],[764,4]]},"274":{"position":[[443,4],[667,4],[1236,4],[1296,4],[1308,4],[1378,4],[1422,4],[1508,4],[1658,5],[1828,5]]},"275":{"position":[[671,7]]},"326":{"position":[[1734,4]]},"377":{"position":[[1317,4]]},"387":{"position":[[868,4]]},"408":{"position":[[264,7],[365,7]]},"485":{"position":[[91,4]]},"517":{"position":[[677,7]]},"529":{"position":[[370,4],[573,4],[604,4],[623,4]]},"534":{"position":[[320,4],[445,7]]},"654":{"position":[[747,4]]},"657":{"position":[[91,4]]},"673":{"position":[[91,4]]},"688":{"position":[[91,4]]},"1008":{"position":[[783,7],[1037,4],[1136,4]]},"1232":{"position":[[317,5]]},"1446":{"position":[[332,7]]},"1461":{"position":[[4783,4]]}},"keywords":{}}],["punctuat",{"_index":1345,"title":{},"content":{"94":{"position":[[1220,13]]}},"keywords":{}}],["purchas",{"_index":1921,"title":{},"content":{"162":{"position":[[1864,8],[1990,10]]},"556":{"position":[[432,9]]},"701":{"position":[[197,8]]},"846":{"position":[[51,9]]},"848":{"position":[[184,9]]}},"keywords":{}}],["purchase.a",{"_index":1576,"title":{},"content":{"110":{"position":[[723,10]]}},"keywords":{}}],["pure",{"_index":1472,"title":{},"content":{"103":{"position":[[277,6]]},"107":{"position":[[2701,4]]},"115":{"position":[[678,4]]}},"keywords":{}}],["purg",{"_index":2272,"title":{},"content":{"209":{"position":[[1440,5]]},"1292":{"position":[[3531,5]]},"1306":{"position":[[3531,5]]},"1329":{"position":[[3531,5]]},"1356":{"position":[[789,7],[1273,6]]}},"keywords":{}}],["purpl",{"_index":1663,"title":{},"content":{"121":{"position":[[1044,8]]}},"keywords":{}}],["purpos",{"_index":1137,"title":{},"content":{"81":{"position":[[2808,9]]},"190":{"position":[[1333,8]]},"201":{"position":[[133,9]]},"253":{"position":[[705,7]]},"313":{"position":[[705,7]]},"323":{"position":[[37,7]]}},"keywords":{}}],["push",{"_index":178,"title":{"1440":{"position":[[0,4]]}},"content":{"4":{"position":[[565,4],[641,7]]},"32":{"position":[[320,6]]},"36":{"position":[[39,6]]},"63":{"position":[[1091,4]]},"189":{"position":[[1257,4]]},"216":{"position":[[302,4]]},"289":{"position":[[462,6]]},"300":{"position":[[416,6]]},"321":{"position":[[592,4]]},"324":{"position":[[967,7]]},"1440":{"position":[[56,4]]},"1452":{"position":[[2593,4]]}},"keywords":{}}],["pushtop",{"_index":5133,"title":{},"content":{"976":{"position":[[149,9],[281,9]]}},"keywords":{}}],["put",{"_index":1888,"title":{},"content":{"160":{"position":[[388,3]]},"198":{"position":[[228,4]]},"277":{"position":[[459,7]]},"322":{"position":[[996,3]]},"324":{"position":[[1000,3]]},"417":{"position":[[2148,3]]},"486":{"position":[[145,3]]},"658":{"position":[[145,3]]},"674":{"position":[[145,3]]},"689":{"position":[[145,3]]},"1239":{"position":[[177,5]]}},"keywords":{}}],["python",{"_index":1937,"title":{},"content":{"164":{"position":[[274,7]]},"236":{"position":[[2641,6]]},"250":{"position":[[180,6]]}},"keywords":{}}],["python’",{"_index":2644,"title":{},"content":{"250":{"position":[[165,8]]}},"keywords":{}}],["qexrpbp3akealgx6wme1l9utaalkgcfybuxm+erd4gg5qlyfpknsoinxtnlfdry5",{"_index":1249,"title":{},"content":{"83":{"position":[[1962,64]]},"371":{"position":[[881,64]]},"1139":{"position":[[768,64]]}},"keywords":{}}],["qualifi",{"_index":3412,"title":{},"content":{"370":{"position":[[1104,9],[1409,9]]},"757":{"position":[[848,9],[1449,9]]},"770":{"position":[[848,9],[1449,9]]},"797":{"position":[[848,9],[1449,9]]},"812":{"position":[[848,9],[1449,9]]},"828":{"position":[[848,9],[1449,9]]},"867":{"position":[[565,9],[749,9]]},"907":{"position":[[887,9],[1192,9]]},"923":{"position":[[887,9],[1192,9]]},"934":{"position":[[887,9],[1192,9]]},"950":{"position":[[887,9],[1192,9]]},"968":{"position":[[887,9],[1192,9]]},"1045":{"position":[[735,9],[919,9]]},"1053":{"position":[[735,9],[919,9]]},"1061":{"position":[[735,9],[919,9]]},"1394":{"position":[[493,7]]}},"keywords":{}}],["qualiti",{"_index":1045,"title":{},"content":{"70":{"position":[[141,7]]},"84":{"position":[[810,9]]},"156":{"position":[[705,8]]}},"keywords":{}}],["quantiti",{"_index":264,"title":{},"content":{"8":{"position":[[449,8]]},"307":{"position":[[1396,9],[1454,9],[2264,9],[2322,9]]},"309":{"position":[[2199,9],[2273,9],[2796,9],[2880,9]]}},"keywords":{}}],["quarter",{"_index":5870,"title":{},"content":{"1209":{"position":[[384,7]]},"1292":{"position":[[3576,7]]},"1306":{"position":[[3576,7]]},"1329":{"position":[[3576,7]]}},"keywords":{}}],["queri",{"_index":173,"title":{"474":{"position":[[15,5]]},"483":{"position":[[0,5]]},"558":{"position":[[7,8]]},"761":{"position":[[18,8]]},"762":{"position":[[10,8]]},"774":{"position":[[18,8]]},"775":{"position":[[10,8]]},"801":{"position":[[18,8]]},"802":{"position":[[10,8]]},"816":{"position":[[18,8]]},"817":{"position":[[10,8]]},"821":{"position":[[12,5]]},"832":{"position":[[18,8]]},"833":{"position":[[10,8]]},"912":{"position":[[17,5]]}},"content":{"4":{"position":[[509,7],[583,5],[719,5],[773,5]]},"74":{"position":[[927,5]]},"98":{"position":[[49,5],[252,7],[894,5]]},"105":{"position":[[1585,7]]},"112":{"position":[[204,5]]},"113":{"position":[[569,5]]},"114":{"position":[[188,5]]},"125":{"position":[[72,8],[412,6]]},"138":{"position":[[735,6]]},"141":{"position":[[856,6]]},"142":{"position":[[698,6]]},"164":{"position":[[1180,5],[1295,8],[1554,7]]},"180":{"position":[[254,5],[776,6]]},"185":{"position":[[116,7]]},"191":{"position":[[423,8],[2220,7]]},"237":{"position":[[1701,5]]},"240":{"position":[[386,8],[2108,7],[2237,8]]},"277":{"position":[[1164,7]]},"278":{"position":[[669,5]]},"322":{"position":[[1341,8],[1688,5]]},"326":{"position":[[82,5],[160,5],[1208,7],[1711,7]]},"330":{"position":[[589,5]]},"370":{"position":[[875,6]]},"402":{"position":[[846,7]]},"480":{"position":[[73,5],[982,5]]},"482":{"position":[[732,5]]},"483":{"position":[[5,5],[55,5],[354,5],[420,7],[479,6]]},"488":{"position":[[863,5]]},"491":{"position":[[513,5]]},"550":{"position":[[548,8]]},"556":{"position":[[1034,7],[1076,6],[1090,5],[1118,5],[1207,5],[1357,6]]},"557":{"position":[[473,6]]},"558":{"position":[[56,5],[78,8],[176,6],[196,5],[231,5]]},"560":{"position":[[53,7]]},"577":{"position":[[75,7]]},"588":{"position":[[70,7]]},"605":{"position":[[196,7]]},"659":{"position":[[1020,5]]},"664":{"position":[[534,5],[769,5]]},"676":{"position":[[863,5]]},"679":{"position":[[513,5]]},"691":{"position":[[863,5]]},"694":{"position":[[513,5]]},"757":{"position":[[1642,6]]},"761":{"position":[[146,5],[502,5]]},"762":{"position":[[80,5],[270,6],[336,6]]},"770":{"position":[[1642,6]]},"774":{"position":[[146,5],[502,5]]},"775":{"position":[[80,5],[270,6],[336,6]]},"797":{"position":[[1642,6]]},"801":{"position":[[146,5],[508,5]]},"802":{"position":[[80,5],[270,6],[336,6]]},"812":{"position":[[1642,6]]},"816":{"position":[[146,5],[508,5]]},"817":{"position":[[80,5],[270,6],[336,6]]},"821":{"position":[[12,5],[116,7],[622,6],[810,5]]},"828":{"position":[[1642,6]]},"832":{"position":[[146,5],[508,5]]},"833":{"position":[[80,5],[270,6],[336,6]]},"842":{"position":[[2548,5],[2597,6],[2699,5],[2725,8]]},"867":{"position":[[967,6],[1129,6]]},"879":{"position":[[1124,6]]},"907":{"position":[[658,6]]},"912":{"position":[[17,5],[124,7],[638,6],[826,5],[919,5],[1287,7],[1358,8],[1419,5]]},"922":{"position":[[1800,5]]},"923":{"position":[[658,6]]},"934":{"position":[[658,6]]},"942":{"position":[[641,5]]},"950":{"position":[[658,6]]},"968":{"position":[[658,6]]},"1032":{"position":[[399,7]]},"1034":{"position":[[562,8]]},"1042":{"position":[[458,7],[857,5],[928,5]]},"1043":{"position":[[1122,7],[1521,5],[1592,5]]},"1045":{"position":[[643,6]]},"1051":{"position":[[1384,7],[1783,5],[1854,5]]},"1053":{"position":[[643,6]]},"1059":{"position":[[1177,7],[1576,5],[1647,5]]},"1061":{"position":[[643,6]]},"1165":{"position":[[19,5]]},"1166":{"position":[[205,8]]},"1182":{"position":[[153,8]]},"1191":{"position":[[153,8]]},"1192":{"position":[[413,7]]},"1262":{"position":[[153,8]]},"1276":{"position":[[105,8],[297,8]]},"1292":{"position":[[3623,5]]},"1306":{"position":[[3623,5]]},"1329":{"position":[[3623,5]]},"1356":{"position":[[683,5]]},"1370":{"position":[[797,5]]},"1383":{"position":[[463,7]]},"1388":{"position":[[583,5]]},"1389":{"position":[[153,8]]},"1394":{"position":[[410,7]]},"1423":{"position":[[420,7]]}},"keywords":{}}],["queries.a",{"_index":5211,"title":{},"content":{"1031":{"position":[[197,9]]}},"keywords":{}}],["query"",{"_index":4639,"title":{},"content":{"761":{"position":[[58,11]]},"762":{"position":[[52,11]]},"774":{"position":[[58,11]]},"775":{"position":[[52,11]]},"801":{"position":[[58,11]]},"802":{"position":[[52,11]]},"816":{"position":[[58,11]]},"817":{"position":[[52,11]]},"832":{"position":[[58,11]]},"833":{"position":[[52,11]]}},"keywords":{}}],["query_limit",{"_index":4771,"title":{},"content":{"842":{"position":[[2535,12]]},"843":{"position":[[726,12]]}},"keywords":{}}],["query_timeout",{"_index":4773,"title":{},"content":{"842":{"position":[[2684,14]]},"843":{"position":[[761,14]]}},"keywords":{}}],["querysitemapssit",{"_index":4301,"title":{},"content":{"605":{"position":[[350,18]]}},"keywords":{}}],["question",{"_index":524,"title":{},"content":{"19":{"position":[[490,9]]},"232":{"position":[[1050,9]]},"281":{"position":[[2284,9]]},"1435":{"position":[[677,8]]}},"keywords":{}}],["questionssurvey",{"_index":5267,"title":{},"content":{"1065":{"position":[[72,15]]}},"keywords":{}}],["queue",{"_index":3557,"title":{},"content":{"405":{"position":[[45,5]]},"408":{"position":[[71,5],[96,5],[159,5],[462,5]]},"411":{"position":[[77,5]]},"1443":{"position":[[252,5]]}},"keywords":{}}],["queueenter",{"_index":3559,"title":{},"content":{"406":{"position":[[90,10]]}},"keywords":{}}],["quick",{"_index":2542,"title":{},"content":{"236":{"position":[[1748,5]]},"238":{"position":[[107,5]]},"239":{"position":[[630,5],[1948,5]]},"1292":{"position":[[3673,5]]},"1306":{"position":[[3673,5]]},"1329":{"position":[[3673,5]]}},"keywords":{}}],["quicker",{"_index":1213,"title":{},"content":{"83":{"position":[[229,7]]},"135":{"position":[[896,7]]}},"keywords":{}}],["quickli",{"_index":327,"title":{},"content":{"11":{"position":[[1169,7]]},"38":{"position":[[364,8]]},"124":{"position":[[44,7]]},"163":{"position":[[922,7]]},"180":{"position":[[726,7]]},"185":{"position":[[77,7]]},"210":{"position":[[1658,7]]},"213":{"position":[[329,7]]},"238":{"position":[[727,7]]},"253":{"position":[[379,7]]},"255":{"position":[[24,7]]},"288":{"position":[[778,7]]},"299":{"position":[[693,7]]},"313":{"position":[[379,7]]},"316":{"position":[[24,7]]},"333":{"position":[[141,7]]},"1082":{"position":[[103,7]]}},"keywords":{}}],["quirk",{"_index":2547,"title":{},"content":{"236":{"position":[[2086,5]]}},"keywords":{}}],["quit",{"_index":1886,"title":{},"content":{"160":{"position":[[20,5]]},"180":{"position":[[583,5]]},"192":{"position":[[1452,5]]},"217":{"position":[[1924,5]]},"321":{"position":[[1530,5]]}},"keywords":{}}],["quot",{"_index":2510,"title":{},"content":{"236":{"position":[[840,6]]},"418":{"position":[[319,6]]},"419":{"position":[[2655,5],[2678,5],[2712,5],[2734,7]]},"439":{"position":[[576,6]]},"441":{"position":[[1264,5],[1287,5],[1321,5],[1343,7]]},"504":{"position":[[2284,5],[2307,5],[2341,5],[2363,7]]},"546":{"position":[[310,6],[1056,6]]},"547":{"position":[[2657,5],[2680,5],[2714,5],[2736,7]]},"594":{"position":[[298,6]]},"638":{"position":[[348,6]]},"639":{"position":[[2282,5],[2305,5],[2339,5],[2361,7]]},"1022":{"position":[[385,6],[392,8]]},"1023":{"position":[[2638,5],[2661,5],[2695,5],[2717,7]]},"1140":{"position":[[54,6],[312,6]]},"1155":{"position":[[97,7]]},"1192":{"position":[[54,6],[118,6],[296,6],[375,7]]},"1209":{"position":[[157,6]]},"1292":{"position":[[49,6],[241,6]]},"1306":{"position":[[49,6],[241,6]]},"1316":{"position":[[54,6],[312,6]]},"1329":{"position":[[49,6],[241,6]]},"1340":{"position":[[54,6],[312,6]]},"1351":{"position":[[54,6],[312,6]]},"1370":{"position":[[50,6],[304,6]]},"1379":{"position":[[53,6],[249,6]]},"1394":{"position":[[53,6],[117,6],[293,6],[372,7]]},"1403":{"position":[[53,6],[249,6]]},"1414":{"position":[[53,6],[249,6]]},"1423":{"position":[[60,6],[124,6],[303,6],[382,7]]},"1431":{"position":[[77,6],[335,6]]}},"keywords":{}}],["quot;#min",{"_index":6712,"title":{},"content":{"1476":{"position":[[1459,10]]}},"keywords":{}}],["quot;$12.30"",{"_index":1390,"title":{},"content":{"96":{"position":[[667,18]]}},"keywords":{}}],["quot;$ref"",{"_index":2302,"title":{},"content":{"210":{"position":[[1353,17],[1408,17]]}},"keywords":{}}],["quot;$schema"",{"_index":2284,"title":{},"content":{"210":{"position":[[846,20]]},"253":{"position":[[1195,20]]},"313":{"position":[[1195,20]]}},"keywords":{}}],["quot;<a",{"_index":2743,"title":{},"content":{"253":{"position":[[2305,11]]},"313":{"position":[[2305,11]]}},"keywords":{}}],["quot;<dimens",{"_index":4225,"title":{},"content":{"585":{"position":[[339,20]]},"606":{"position":[[267,20]]}},"keywords":{}}],["quot;<filt",{"_index":4234,"title":{},"content":{"585":{"position":[[837,16]]}},"keywords":{}}],["quot;<host>:1433"",{"_index":5256,"title":{},"content":{"1046":{"position":[[132,29]]},"1054":{"position":[[132,29]]},"1062":{"position":[[132,29]]}},"keywords":{}}],["quot;<metr",{"_index":4226,"title":{},"content":{"585":{"position":[[403,17],[723,17]]}},"keywords":{}}],["quot;<oth",{"_index":4229,"title":{},"content":{"585":{"position":[[654,15]]}},"keywords":{}}],["quot;<report",{"_index":4223,"title":{},"content":{"585":{"position":[[282,16],[572,16]]},"606":{"position":[[210,16]]}},"keywords":{}}],["quot;<schema_a>"."<table_1>"",{"_index":4850,"title":{},"content":{"864":{"position":[[612,56]]},"876":{"position":[[612,56]]}},"keywords":{}}],["quot;<schema_b>"."<table_2>"",{"_index":4851,"title":{},"content":{"864":{"position":[[707,56]]},"876":{"position":[[707,56]]}},"keywords":{}}],["quot;<seg",{"_index":4231,"title":{},"content":{"585":{"position":[[785,17]]}},"keywords":{}}],["quot;<topic>",{"_index":5890,"title":{},"content":{"1230":{"position":[[986,19]]}},"keywords":{}}],["quot;"",{"_index":2456,"title":{},"content":{"221":{"position":[[1374,12]]},"222":{"position":[[619,12]]},"223":{"position":[[585,12]]},"224":{"position":[[638,12]]},"296":{"position":[[6242,13],[6396,13]]},"482":{"position":[[893,12]]},"1298":{"position":[[585,12]]},"1322":{"position":[[619,12]]},"1335":{"position":[[619,12]]},"1346":{"position":[[585,12]]}},"keywords":{}}],["quot;")auto",{"_index":3629,"title":{},"content":{"419":{"position":[[2159,18],[2742,18]]},"441":{"position":[[768,18],[1351,18]]},"504":{"position":[[1788,18],[2371,18]]},"547":{"position":[[2161,18],[2744,18]]},"639":{"position":[[1786,18],[2369,18]]},"1023":{"position":[[2142,18],[2725,18]]}},"keywords":{}}],["quot;)dis",{"_index":3637,"title":{},"content":{"419":{"position":[[2718,15]]},"441":{"position":[[1327,15]]},"504":{"position":[[2347,15]]},"547":{"position":[[2720,15]]},"639":{"position":[[2345,15]]},"1023":{"position":[[2701,15]]}},"keywords":{}}],["quot;*"",{"_index":3582,"title":{},"content":{"414":{"position":[[432,14],[631,14]]},"1194":{"position":[[402,13]]}},"keywords":{}}],["quot;,"",{"_index":3602,"title":{},"content":{"418":{"position":[[196,13]]},"439":{"position":[[453,13]]},"546":{"position":[[933,13]]},"638":{"position":[[225,13]]},"1022":{"position":[[262,13]]}},"keywords":{}}],["quot;,")pip",{"_index":3615,"title":{},"content":{"419":{"position":[[1652,19]]},"441":{"position":[[261,19]]},"504":{"position":[[1281,19]]},"547":{"position":[[1654,19]]},"639":{"position":[[1279,19]]},"1023":{"position":[[1635,19]]}},"keywords":{}}],["quot;.*\\.json"",{"_index":3594,"title":{},"content":{"417":{"position":[[1309,20]]},"438":{"position":[[1825,20]]},"503":{"position":[[151,20]]},"545":{"position":[[933,20]]}},"keywords":{}}],["quot;..."",{"_index":3876,"title":{},"content":{"488":{"position":[[1138,16]]},"659":{"position":[[1295,16]]},"676":{"position":[[1138,16]]},"691":{"position":[[1138,16]]}},"keywords":{}}],["quot;/_id"",{"_index":2306,"title":{},"content":{"210":{"position":[[1485,18]]}},"keywords":{}}],["quot;/_meta/mtime"",{"_index":4269,"title":{},"content":{"595":{"position":[[831,27]]}},"keywords":{}}],["quot;/foo"",{"_index":5258,"title":{},"content":{"1047":{"position":[[747,19]]},"1055":{"position":[[747,19]]},"1063":{"position":[[747,19]]}},"keywords":{}}],["quot;/mediawiki/recentchange/1.0.0"",{"_index":2694,"title":{},"content":{"253":{"position":[[1216,42]]},"313":{"position":[[1216,42]]}},"keywords":{}}],["quot;/messageid"",{"_index":4410,"title":{},"content":{"661":{"position":[[490,25]]}},"keywords":{}}],["quot;/metal_type"",{"_index":1101,"title":{},"content":{"76":{"position":[[946,23]]}},"keywords":{}}],["quot;/my_folder"",{"_index":3902,"title":{},"content":{"502":{"position":[[129,23]]},"503":{"position":[[117,22]]}},"keywords":{}}],["quot;/path/dir/flow.yaml"",{"_index":1283,"title":{},"content":{"87":{"position":[[246,31]]}},"keywords":{}}],["quot;/path/in/google/drive"",{"_index":4140,"title":{},"content":{"566":{"position":[[233,33]]}},"keywords":{}}],["quot;/product/id"",{"_index":1097,"title":{},"content":{"76":{"position":[[775,23]]}},"keywords":{}}],["quot;/userprofile/schema"",{"_index":6629,"title":{},"content":{"1461":{"position":[[5017,31]]}},"keywords":{}}],["quot;/w"",{"_index":2751,"title":{},"content":{"253":{"position":[[2684,15]]},"313":{"position":[[2684,15]]}},"keywords":{}}],["quot;0x01")auto",{"_index":3622,"title":{},"content":{"419":{"position":[[1826,22]]},"441":{"position":[[435,22]]},"504":{"position":[[1455,22]]},"547":{"position":[[1828,22]]},"639":{"position":[[1453,22]]},"1023":{"position":[[1809,22]]}},"keywords":{}}],["quot;0x09")vert",{"_index":3619,"title":{},"content":{"419":{"position":[[1740,26]]},"441":{"position":[[349,26]]},"504":{"position":[[1369,26]]},"547":{"position":[[1742,26]]},"639":{"position":[[1367,26]]},"1023":{"position":[[1723,26]]}},"keywords":{}}],["quot;0x0b")unit",{"_index":3620,"title":{},"content":{"419":{"position":[[1771,22]]},"441":{"position":[[380,22]]},"504":{"position":[[1400,22]]},"547":{"position":[[1773,22]]},"639":{"position":[[1398,22]]},"1023":{"position":[[1754,22]]}},"keywords":{}}],["quot;0x1e")auto",{"_index":3635,"title":{},"content":{"419":{"position":[[2632,22]]},"441":{"position":[[1241,22]]},"504":{"position":[[2261,22]]},"547":{"position":[[2634,22]]},"639":{"position":[[2259,22]]},"1023":{"position":[[2615,22]]}},"keywords":{}}],["quot;0x1f")soh",{"_index":3621,"title":{},"content":{"419":{"position":[[1804,21]]},"441":{"position":[[413,21]]},"504":{"position":[[1433,21]]},"547":{"position":[[1806,21]]},"639":{"position":[[1431,21]]},"1023":{"position":[[1787,21]]}},"keywords":{}}],["quot;0x20")semicolon",{"_index":3617,"title":{},"content":{"419":{"position":[[1693,27]]},"441":{"position":[[302,27]]},"504":{"position":[[1322,27]]},"547":{"position":[[1695,27]]},"639":{"position":[[1320,27]]},"1023":{"position":[[1676,27]]}},"keywords":{}}],["quot;12345678"",{"_index":4785,"title":{},"content":{"843":{"position":[[122,20]]}},"keywords":{}}],["quot;127.0.0.1:3306"",{"_index":4625,"title":{},"content":{"758":{"position":[[178,26]]},"771":{"position":[[178,26]]},"798":{"position":[[176,26]]},"813":{"position":[[176,26]]},"829":{"position":[[176,26]]}},"keywords":{}}],["quot;127.0.0.1:5432"",{"_index":3427,"title":{},"content":{"371":{"position":[[190,26]]}},"keywords":{}}],["quot;2012",{"_index":1997,"title":{},"content":{"172":{"position":[[282,10]]},"414":{"position":[[269,10]]},"415":{"position":[[529,10]]}},"keywords":{}}],["quot;2022",{"_index":1180,"title":{},"content":{"82":{"position":[[2557,10],[2690,10],[4698,10],[4828,10]]}},"keywords":{}}],["quot;2023",{"_index":1380,"title":{},"content":{"96":{"position":[[406,10],[625,10]]},"352":{"position":[[76,10]]},"852":{"position":[[269,10]]}},"keywords":{}}],["quot;2024",{"_index":2380,"title":{},"content":{"210":{"position":[[3260,10]]},"253":{"position":[[1685,10]]},"313":{"position":[[1685,10]]}},"keywords":{}}],["quot;24h"",{"_index":3841,"title":{},"content":{"480":{"position":[[1538,15]]},"482":{"position":[[461,15]]}},"keywords":{}}],["quot;3",{"_index":2376,"title":{},"content":{"210":{"position":[[3198,7]]}},"keywords":{}}],["quot;3g"",{"_index":507,"title":{},"content":{"17":{"position":[[1019,16]]}},"keywords":{}}],["quot;48h"",{"_index":1358,"title":{},"content":{"94":{"position":[[2740,15]]}},"keywords":{}}],["quot;5432:5432"",{"_index":2526,"title":{},"content":{"236":{"position":[[1097,21]]}},"keywords":{}}],["quot;5m"",{"_index":3843,"title":{},"content":{"480":{"position":[[1702,14]]}},"keywords":{}}],["quot;5s"",{"_index":3844,"title":{},"content":{"480":{"position":[[1725,14]]}},"keywords":{}}],["quot;:eyes:"",{"_index":6288,"title":{},"content":{"1363":{"position":[[376,18]]}},"keywords":{}}],["quot;;")tab",{"_index":3618,"title":{},"content":{"419":{"position":[[1721,18]]},"441":{"position":[[330,18]]},"504":{"position":[[1350,18]]},"547":{"position":[[1723,18]]},"639":{"position":[[1348,18]]},"1023":{"position":[[1704,18]]}},"keywords":{}}],["quot;[[:file:jeton",{"_index":2706,"title":{},"content":{"253":{"position":[[1466,20]]},"313":{"position":[[1466,20]]}},"keywords":{}}],["quot;\\""",{"_index":3609,"title":{},"content":{"418":{"position":[[326,19]]},"439":{"position":[[583,19]]},"546":{"position":[[1063,19]]},"638":{"position":[[355,19]]}},"keywords":{}}],["quot;\\"")singl",{"_index":3636,"title":{},"content":{"419":{"position":[[2684,27]]},"441":{"position":[[1293,27]]},"504":{"position":[[2313,27]]},"547":{"position":[[2686,27]]},"639":{"position":[[2311,27]]},"1023":{"position":[[2667,27]]}},"keywords":{}}],["quot;\\\\")dis",{"_index":3628,"title":{},"content":{"419":{"position":[[2127,23]]},"441":{"position":[[736,23]]},"504":{"position":[[1756,23]]},"547":{"position":[[2129,23]]},"639":{"position":[[1754,23]]},"1023":{"position":[[2110,23]]}},"keywords":{}}],["quot;\\\\n")record",{"_index":3634,"title":{},"content":{"419":{"position":[[2598,23]]},"441":{"position":[[1207,23]]},"504":{"position":[[2227,23]]},"547":{"position":[[2600,23]]},"639":{"position":[[2225,23]]},"1023":{"position":[[2581,23]]}},"keywords":{}}],["quot;\\\\r"",{"_index":3608,"title":{},"content":{"418":{"position":[[303,15]]},"439":{"position":[[560,15]]},"546":{"position":[[1040,15]]},"638":{"position":[[332,15]]},"1022":{"position":[[369,15]]}},"keywords":{}}],["quot;\\\\r")lf",{"_index":3633,"title":{},"content":{"419":{"position":[[2578,19]]},"441":{"position":[[1187,19]]},"504":{"position":[[2207,19]]},"547":{"position":[[2580,19]]},"639":{"position":[[2205,19]]},"1023":{"position":[[2561,19]]}},"keywords":{}}],["quot;\\\\r\\\\n"",{"_index":3631,"title":{},"content":{"419":{"position":[[2545,20]]},"441":{"position":[[1154,20]]},"504":{"position":[[2174,20]]},"547":{"position":[[2547,20]]},"639":{"position":[[2172,20]]},"1023":{"position":[[2528,20]]}},"keywords":{}}],["quot;_id"",{"_index":2281,"title":{},"content":{"210":{"position":[[721,18],[766,16]]}},"keywords":{}}],["quot;_meta"",{"_index":983,"title":{},"content":{"66":{"position":[[850,18]]},"210":{"position":[[825,18]]},"253":{"position":[[1259,18]]},"313":{"position":[[1259,18]]},"315":{"position":[[1048,19],[2019,18]]},"488":{"position":[[1094,18]]},"659":{"position":[[1251,18]]},"676":{"position":[[1094,18]]},"691":{"position":[[1094,18]]}},"keywords":{}}],["quot;_meta":{"file":"recentchange","offset":13757,"uuid":"079296f",{"_index":3089,"title":{},"content":{"316":{"position":[[249,118]]}},"keywords":{}}],["quot;_meta":{"file":"recentchange","offset":13772,"uuid":"082ae4fc",{"_index":3092,"title":{},"content":{"316":{"position":[[531,118]]}},"keywords":{}}],["quot;_meta":{"file":"recentchange","offset":13774,"uuid":"082ae4fc",{"_index":3094,"title":{},"content":{"316":{"position":[[821,118]]}},"keywords":{}}],["quot;_meta":{"uuid":"9790e50",{"_index":2972,"title":{},"content":{"295":{"position":[[1909,51],[2189,51],[2472,51],[2757,51],[3041,51],[3324,51],[3607,51]]}},"keywords":{}}],["quot;_sops"",{"_index":1203,"title":{},"content":{"82":{"position":[[4064,17],[4252,17]]}},"keywords":{}}],["quot;a",{"_index":2332,"title":{},"content":{"210":{"position":[[2372,7]]}},"keywords":{}}],["quot;a"",{"_index":1422,"title":{},"content":{"98":{"position":[[1153,15]]},"164":{"position":[[650,15],[719,15]]},"1467":{"position":[[1359,14],[1433,14],[1565,14],[2489,14],[2581,14],[2735,14]]},"1476":{"position":[[1717,15],[1742,15],[1948,15],[1973,15],[2078,15],[2101,15],[2126,15],[2177,15]]},"1477":{"position":[[1771,14],[1964,14],[2115,14],[2290,14],[2385,14],[2536,14],[4115,16],[4312,16],[4471,16],[4656,16],[4753,16],[4912,16]]}},"keywords":{}}],["quot;abc"",{"_index":6648,"title":{},"content":{"1464":{"position":[[593,16],[720,16]]},"1476":{"position":[[499,15]]}},"keywords":{}}],["quot;access",{"_index":4979,"title":{},"content":{"898":{"position":[[1434,12],[1692,12]]}},"keywords":{}}],["quot;access_key"",{"_index":3571,"title":{},"content":{"409":{"position":[[124,23]]}},"keywords":{}}],["quot;access_token"",{"_index":4980,"title":{},"content":{"898":{"position":[[1524,25],[1804,25],[1911,24],[1990,24]]}},"keywords":{}}],["quot;account_name"",{"_index":6578,"title":{},"content":{"1453":{"position":[[1407,24]]}},"keywords":{}}],["quot;acmeco/us",{"_index":472,"title":{},"content":{"16":{"position":[[812,17]]}},"keywords":{}}],["quot;action"",{"_index":2007,"title":{},"content":{"172":{"position":[[536,19],[844,19],[1094,19]]},"414":{"position":[[447,19],[646,19]]},"415":{"position":[[670,19],[831,19]]},"1465":{"position":[[610,19],[842,19]]}},"keywords":{}}],["quot;active"",{"_index":754,"title":{},"content":{"44":{"position":[[105,18]]}},"keywords":{}}],["quot;add",{"_index":5070,"title":{},"content":{"931":{"position":[[770,9]]}},"keywords":{}}],["quot;add"",{"_index":6719,"title":{},"content":{"1477":{"position":[[1115,16],[1752,16],[1945,16],[2096,16],[2366,16],[2517,16],[3343,16],[4098,16],[4295,16],[4454,16],[4736,16],[4895,16]]}},"keywords":{}}],["quot;admin"",{"_index":2030,"title":{},"content":{"174":{"position":[[126,18]]}},"keywords":{}}],["quot;agent"",{"_index":476,"title":{},"content":{"16":{"position":[[890,18]]}},"keywords":{}}],["quot;airbyte_secret"",{"_index":4971,"title":{},"content":{"898":{"position":[[657,27],[880,27],[1112,27],[1552,27]]}},"keywords":{}}],["quot;aircall"",{"_index":3254,"title":{},"content":{"349":{"position":[[206,19]]}},"keywords":{}}],["quot;allof"",{"_index":2301,"title":{},"content":{"210":{"position":[[1330,18]]}},"keywords":{}}],["quot;allow"",{"_index":2002,"title":{},"content":{"172":{"position":[[420,18],[728,18],[978,18]]},"414":{"position":[[390,18],[589,18]]},"415":{"position":[[651,18],[812,18]]}},"keywords":{}}],["quot;allowuserstoaccessobjectsunderprefix"",{"_index":2000,"title":{},"content":{"172":{"position":[[350,49]]}},"keywords":{}}],["quot;api",{"_index":3794,"title":{},"content":{"472":{"position":[[613,9]]}},"keywords":{}}],["quot;arn:aws:iam::789740162118:user/flow",{"_index":2005,"title":{},"content":{"172":{"position":[[481,41],[789,41],[1039,41]]}},"keywords":{}}],["quot;arn:aws:s3:::example_bucket"",{"_index":3583,"title":{},"content":{"414":{"position":[[522,39]]},"415":{"position":[[745,39]]}},"keywords":{}}],["quot;arn:aws:s3:::example_bucket/*"",{"_index":3584,"title":{},"content":{"414":{"position":[[720,41]]},"415":{"position":[[905,41]]}},"keywords":{}}],["quot;arn:aws:s3:::your",{"_index":2012,"title":{},"content":{"172":{"position":[[661,23],[913,23],[1168,23]]}},"keywords":{}}],["quot;arr"",{"_index":1430,"title":{},"content":{"99":{"position":[[599,16]]}},"keywords":{}}],["quot;array"",{"_index":6646,"title":{},"content":{"1464":{"position":[[269,18]]},"1467":{"position":[[571,17]]}},"keywords":{}}],["quot;at",{"_index":1635,"title":{},"content":{"115":{"position":[[1497,8]]},"660":{"position":[[31,8]]}},"keywords":{}}],["quot;auth_method"",{"_index":4965,"title":{},"content":{"898":{"position":[[250,23],[459,24],[1357,24],[1758,24],[1965,24]]}},"keywords":{}}],["quot;auth_provider_x509_cert_url"",{"_index":4079,"title":{},"content":{"546":{"position":[[656,40]]},"594":{"position":[[644,40]]}},"keywords":{}}],["quot;auth_uri"",{"_index":4075,"title":{},"content":{"546":{"position":[[500,21]]},"594":{"position":[[488,21]]}},"keywords":{}}],["quot;author",{"_index":4952,"title":{},"content":{"895":{"position":[[282,19]]},"943":{"position":[[1070,20]]}},"keywords":{}}],["quot;automat",{"_index":824,"title":{},"content":{"55":{"position":[[916,19]]},"483":{"position":[[752,19]]}},"keywords":{}}],["quot;awards"",{"_index":2372,"title":{},"content":{"210":{"position":[[3109,19]]}},"keywords":{}}],["quot;aws"",{"_index":2004,"title":{},"content":{"172":{"position":[[464,16],[772,16],[1022,16]]}},"keywords":{}}],["quot;b"",{"_index":1423,"title":{},"content":{"98":{"position":[[1172,14]]},"164":{"position":[[666,15],[735,14]]},"1467":{"position":[[1377,14],[1583,14],[2517,14],[2763,14]]},"1476":{"position":[[1871,15],[1896,15]]},"1477":{"position":[[1789,14],[1887,14],[4136,15],[4235,16]]}},"keywords":{}}],["quot;b5372124",{"_index":2727,"title":{},"content":{"253":{"position":[[1867,14]]},"313":{"position":[[1867,14]]}},"keywords":{}}],["quot;bar"",{"_index":1431,"title":{},"content":{"99":{"position":[[616,18]]}},"keywords":{}}],["quot;bigqueri",{"_index":3810,"title":{},"content":{"475":{"position":[[152,14],[182,14]]},"477":{"position":[[81,14],[111,14],[1017,14],[1047,14]]}},"keywords":{}}],["quot;bigquery"",{"_index":3822,"title":{},"content":{"479":{"position":[[170,20]]}},"keywords":{}}],["quot;bindings"",{"_index":5840,"title":{},"content":{"1200":{"position":[[779,21]]}},"keywords":{}}],["quot;binlog",{"_index":4654,"title":{},"content":{"764":{"position":[[30,12],[763,12]]},"777":{"position":[[30,12],[763,12]]},"804":{"position":[[30,12],[761,12]]},"819":{"position":[[30,12],[761,12]]},"835":{"position":[[30,12],[761,12]]}},"keywords":{}}],["quot;blue"",{"_index":1667,"title":{},"content":{"121":{"position":[[1365,17],[1425,17]]}},"keywords":{}}],["quot;bot"",{"_index":2704,"title":{},"content":{"253":{"position":[[1421,16],[3273,16]]},"313":{"position":[[1421,16]]}},"keywords":{}}],["quot;bucketanonymousread"",{"_index":3581,"title":{},"content":{"414":{"position":[[337,32]]}},"keywords":{}}],["quot;c"",{"_index":1938,"title":{},"content":{"164":{"position":[[682,15],[750,14]]},"210":{"position":[[1024,15]]},"1467":{"position":[[1451,14],[1601,14],[2609,14],[2791,14]]},"1476":{"position":[[1794,15],[1819,15],[2202,15]]},"1477":{"position":[[1807,14],[2133,14],[4156,15],[4492,15]]}},"keywords":{}}],["quot;ca"",{"_index":475,"title":{},"content":{"16":{"position":[[874,15]]}},"keywords":{}}],["quot;capture"",{"_index":6684,"title":{},"content":{"1474":{"position":[[478,20]]}},"keywords":{}}],["quot;captures"",{"_index":3251,"title":{},"content":{"349":{"position":[[73,21]]},"895":{"position":[[118,20]]},"1092":{"position":[[73,21]]}},"keywords":{}}],["quot;captures".select",{"_index":3789,"title":{},"content":{"472":{"position":[[485,27]]}},"keywords":{}}],["quot;cast"",{"_index":2349,"title":{},"content":{"210":{"position":[[2694,17]]}},"keywords":{}}],["quot;categorize"",{"_index":2757,"title":{},"content":{"253":{"position":[[2955,23]]},"313":{"position":[[2955,23]]}},"keywords":{}}],["quot;category:jetons"",{"_index":2755,"title":{},"content":{"253":{"position":[[2821,28]]},"313":{"position":[[2821,28]]}},"keywords":{}}],["quot;cdc_role"",{"_index":5095,"title":{},"content":{"943":{"position":[[1202,20]]}},"keywords":{}}],["quot;chang",{"_index":2292,"title":{},"content":{"210":{"position":[[1090,12],[1145,12]]}},"keywords":{}}],["quot;christoph",{"_index":2367,"title":{},"content":{"210":{"position":[[3038,18]]}},"keywords":{}}],["quot;client",{"_index":4074,"title":{},"content":{"546":{"position":[[477,12]]},"594":{"position":[[465,12]]},"895":{"position":[[447,12],[473,12]]},"898":{"position":[[788,12],[1016,12]]}},"keywords":{}}],["quot;client_email"",{"_index":4070,"title":{},"content":{"546":{"position":[[393,25]]},"594":{"position":[[381,25]]}},"keywords":{}}],["quot;client_id"",{"_index":4073,"title":{},"content":{"546":{"position":[[454,22]]},"594":{"position":[[442,22]]},"898":{"position":[[632,22]]}},"keywords":{}}],["quot;client_secret"",{"_index":4974,"title":{},"content":{"898":{"position":[[851,26]]}},"keywords":{}}],["quot;client_x509_cert_url"",{"_index":4081,"title":{},"content":{"546":{"position":[[753,33]]},"594":{"position":[[741,33]]}},"keywords":{}}],["quot;cmd",{"_index":2514,"title":{},"content":{"236":{"position":[[906,10]]}},"keywords":{}}],["quot;collection."",{"_index":1816,"title":{},"content":{"141":{"position":[[998,23]]}},"keywords":{}}],["quot;color"",{"_index":1664,"title":{},"content":{"121":{"position":[[1286,19],[1345,19],[1405,19]]}},"keywords":{}}],["quot;combine"",{"_index":1705,"title":{},"content":{"125":{"position":[[926,21]]}},"keywords":{}}],["quot;comment"",{"_index":2705,"title":{},"content":{"253":{"position":[[1445,20]]},"313":{"position":[[1445,20]]}},"keywords":{}}],["quot;commons.wikimedia.org"",{"_index":2716,"title":{},"content":{"253":{"position":[[1634,34],[2617,34]]},"313":{"position":[[1634,34],[2617,34],[3305,34]]}},"keywords":{}}],["quot;commonswiki"",{"_index":2761,"title":{},"content":{"253":{"position":[[3040,23]]},"313":{"position":[[3040,23]]}},"keywords":{}}],["quot;configur",{"_index":2032,"title":{},"content":{"174":{"position":[[171,15]]}},"keywords":{}}],["quot;confluence"ent",{"_index":3792,"title":{},"content":{"472":{"position":[[564,27]]}},"keywords":{}}],["quot;connector",{"_index":3252,"title":{},"content":{"349":{"position":[[125,15]]},"1092":{"position":[[125,15]]}},"keywords":{}}],["quot;const"",{"_index":4970,"title":{},"content":{"898":{"position":[[486,18],[1785,18]]}},"keywords":{}}],["quot;contains"",{"_index":5167,"title":{},"content":{"1009":{"position":[[1209,21],[1368,20]]}},"keywords":{}}],["quot;cor",{"_index":4818,"title":{},"content":{"849":{"position":[[1661,10]]}},"keywords":{}}],["quot;cost"",{"_index":1389,"title":{},"content":{"96":{"position":[[649,17]]}},"keywords":{}}],["quot;count"",{"_index":988,"title":{},"content":{"66":{"position":[[941,18]]}},"keywords":{}}],["quot;countries"",{"_index":2391,"title":{},"content":{"210":{"position":[[3419,22]]}},"keywords":{}}],["quot;country"",{"_index":474,"title":{},"content":{"16":{"position":[[852,21]]}},"keywords":{}}],["quot;coyote"",{"_index":1691,"title":{},"content":{"123":{"position":[[702,18]]}},"keywords":{}}],["quot;creat",{"_index":3790,"title":{},"content":{"472":{"position":[[513,12]]},"1149":{"position":[[170,12]]},"1418":{"position":[[252,12]]}},"keywords":{}}],["quot;created_at"",{"_index":2557,"title":{},"content":{"236":{"position":[[2483,22],[3268,22]]}},"keywords":{}}],["quot;credentials"",{"_index":4961,"title":{},"content":{"898":{"position":[[50,25],[168,24]]}},"keywords":{}}],["quot;critic"",{"_index":2405,"title":{},"content":{"210":{"position":[[3675,19]]}},"keywords":{}}],["quot;current"",{"_index":6541,"title":{},"content":{"1452":{"position":[[1896,19]]}},"keywords":{}}],["quot;custom",{"_index":5351,"title":{},"content":{"1092":{"position":[[260,14],[289,14]]}},"keywords":{}}],["quot;customer"",{"_index":1375,"title":{},"content":{"96":{"position":[[333,21],[557,21]]}},"keywords":{}}],["quot;d"",{"_index":1939,"title":{},"content":{"164":{"position":[[698,14],[765,14]]},"210":{"position":[[1055,15]]},"1477":{"position":[[1982,14],[2151,14],[2308,14],[2554,14],[4333,15],[4512,15],[4677,15],[4933,15]]}},"keywords":{}}],["quot;d9e8698f",{"_index":2719,"title":{},"content":{"253":{"position":[[1735,14]]},"313":{"position":[[1735,14]]}},"keywords":{}}],["quot;data",{"_index":4823,"title":{},"content":{"849":{"position":[[2574,10]]}},"keywords":{}}],["quot;databas",{"_index":4921,"title":{},"content":{"880":{"position":[[127,14]]}},"keywords":{}}],["quot;database"",{"_index":2232,"title":{},"content":{"206":{"position":[[633,20]]}},"keywords":{}}],["quot;dataflow"",{"_index":2313,"title":{},"content":{"210":{"position":[[1966,21]]}},"keywords":{}}],["quot;datagen",{"_index":2532,"title":{},"content":{"236":{"position":[[1350,13]]}},"keywords":{}}],["quot;date"",{"_index":1387,"title":{},"content":{"96":{"position":[[607,17]]}},"keywords":{}}],["quot;date":"2023",{"_index":2083,"title":{},"content":{"183":{"position":[[4159,28]]}},"keywords":{}}],["quot;date":"2024",{"_index":2778,"title":{},"content":{"255":{"position":[[229,28],[370,28],[515,28],[654,28]]}},"keywords":{}}],["quot;dbo.flow_watermarks"",{"_index":5253,"title":{},"content":{"1045":{"position":[[976,31]]},"1053":{"position":[[976,31]]},"1061":{"position":[[976,31]]}},"keywords":{}}],["quot;debug"",{"_index":3233,"title":{},"content":{"343":{"position":[[201,18]]}},"keywords":{}}],["quot;def"",{"_index":6711,"title":{},"content":{"1476":{"position":[[557,15],[675,15]]}},"keywords":{}}],["quot;default"",{"_index":3265,"title":{},"content":{"352":{"position":[[55,20]]},"898":{"position":[[587,20],[1890,20]]}},"keywords":{}}],["quot;delete_messages"",{"_index":3573,"title":{},"content":{"409":{"position":[[224,28]]}},"keywords":{}}],["quot;delta",{"_index":6493,"title":{},"content":{"1440":{"position":[[112,11]]}},"keywords":{}}],["quot;denghiùcomm"",{"_index":2759,"title":{},"content":{"253":{"position":[[2997,24]]},"313":{"position":[[2997,24]]}},"keywords":{}}],["quot;derivation"",{"_index":6685,"title":{},"content":{"1474":{"position":[[499,23]]}},"keywords":{}}],["quot;derivations"",{"_index":1041,"title":{},"content":{"69":{"position":[[942,23]]}},"keywords":{}}],["quot;description"",{"_index":2294,"title":{},"content":{"210":{"position":[[1120,24]]},"898":{"position":[[691,24],[914,24],[1146,24],[1586,24]]}},"keywords":{}}],["quot;dictionary"",{"_index":4885,"title":{},"content":{"869":{"position":[[274,22]]}},"keywords":{}}],["quot;dimensions"",{"_index":4163,"title":{},"content":{"574":{"position":[[300,23]]},"585":{"position":[[315,23],[605,23]]},"606":{"position":[[243,23]]}},"keywords":{}}],["quot;directors"",{"_index":2366,"title":{},"content":{"210":{"position":[[3015,22]]}},"keywords":{}}],["quot;discovers"",{"_index":1111,"title":{},"content":{"80":{"position":[[477,21]]}},"keywords":{}}],["quot;discriminator"",{"_index":4963,"title":{},"content":{"898":{"position":[[195,26]]}},"keywords":{}}],["quot;domain",{"_index":3797,"title":{},"content":{"472":{"position":[[679,12]]}},"keywords":{}}],["quot;domain"",{"_index":2715,"title":{},"content":{"253":{"position":[[1614,19]]},"313":{"position":[[1614,19],[3285,19]]},"315":{"position":[[2167,19]]}},"keywords":{}}],["quot;drama"",{"_index":2343,"title":{},"content":{"210":{"position":[[2605,19]]}},"keywords":{}}],["quot;dt"",{"_index":2717,"title":{},"content":{"253":{"position":[[1669,15]]},"313":{"position":[[1669,15]]}},"keywords":{}}],["quot;e"",{"_index":6723,"title":{},"content":{"1477":{"position":[[2403,14],[2572,14],[4774,15],[4953,15]]}},"keywords":{}}],["quot;edit",{"_index":5068,"title":{},"content":{"931":{"position":[[698,10]]}},"keywords":{}}],["quot;effect",{"_index":5965,"title":{},"content":{"1279":{"position":[[343,17]]}},"keywords":{}}],["quot;effect"",{"_index":2001,"title":{},"content":{"172":{"position":[[400,19],[708,19],[958,19]]},"414":{"position":[[370,19],[569,19]]},"415":{"position":[[631,19],[792,19]]}},"keywords":{}}],["quot;email"",{"_index":3799,"title":{},"content":{"472":{"position":[[750,17]]}},"keywords":{}}],["quot;emili",{"_index":2350,"title":{},"content":{"210":{"position":[[2714,11]]}},"keywords":{}}],["quot;end",{"_index":5166,"title":{},"content":{"1009":{"position":[[1186,10],[1280,10]]}},"keywords":{}}],["quot;english"",{"_index":2363,"title":{},"content":{"210":{"position":[[2955,22]]}},"keywords":{}}],["quot;enum"",{"_index":2289,"title":{},"content":{"210":{"position":[[1006,17]]}},"keywords":{}}],["quot;eqiad.mediawiki.recentchange"",{"_index":2735,"title":{},"content":{"253":{"position":[[1992,41]]},"313":{"position":[[1992,41]]}},"keywords":{}}],["quot;error"",{"_index":3230,"title":{},"content":{"343":{"position":[[146,18]]}},"keywords":{}}],["quot;estuari",{"_index":4373,"title":{},"content":{"645":{"position":[[315,13]]},"652":{"position":[[315,13]]}},"keywords":{}}],["quot;exactli",{"_index":4293,"title":{},"content":{"602":{"position":[[255,13]]}},"keywords":{}}],["quot;exacts"",{"_index":5168,"title":{},"content":{"1009":{"position":[[1231,19]]}},"keywords":{}}],["quot;exampl",{"_index":3512,"title":{},"content":{"392":{"position":[[180,13],[346,13]]},"393":{"position":[[185,13],[243,13]]},"398":{"position":[[186,13],[244,13]]},"403":{"position":[[116,13]]},"1126":{"position":[[147,13],[205,13]]}},"keywords":{}}],["quot;expect",{"_index":6642,"title":{},"content":{"1463":{"position":[[502,12]]},"1464":{"position":[[408,12]]},"1465":{"position":[[1095,12]]},"1466":{"position":[[387,12]]},"1467":{"position":[[916,12],[1213,12],[2341,12]]},"1476":{"position":[[357,12],[1558,12]]},"1477":{"position":[[1573,12],[3895,12]]}},"keywords":{}}],["quot;f8f07d87",{"_index":2699,"title":{},"content":{"253":{"position":[[1369,14]]},"313":{"position":[[1369,14]]}},"keywords":{}}],["quot;fenc",{"_index":6476,"title":{},"content":{"1437":{"position":[[846,11]]}},"keywords":{}}],["quot;fields"",{"_index":5845,"title":{},"content":{"1200":{"position":[[944,19]]}},"keywords":{}}],["quot;file"",{"_index":2695,"title":{},"content":{"253":{"position":[[1280,17]]},"313":{"position":[[1280,17]]},"315":{"position":[[2040,17]]}},"keywords":{}}],["quot;file:///path/dir/sub/directory/flow.yaml"",{"_index":1286,"title":{},"content":{"87":{"position":[[326,53]]}},"keywords":{}}],["quot;file:///path/sibling/directory/flow.yaml"",{"_index":1288,"title":{},"content":{"87":{"position":[[427,53]]}},"keywords":{}}],["quot;filter"",{"_index":4233,"title":{},"content":{"585":{"position":[[817,19]]}},"keywords":{}}],["quot;flow"",{"_index":4685,"title":{},"content":{"783":{"position":[[152,16],[175,16]]},"1254":{"position":[[192,16],[215,16]]}},"keywords":{}}],["quot;flow.watermarks"",{"_index":4582,"title":{},"content":{"750":{"position":[[661,28]]},"757":{"position":[[905,27]]},"766":{"position":[[661,28]]},"770":{"position":[[905,27]]},"789":{"position":[[649,28]]},"797":{"position":[[905,27]]},"807":{"position":[[649,28]]},"812":{"position":[[905,27]]},"823":{"position":[[649,28]]},"828":{"position":[[905,27]]}},"keywords":{}}],["quot;flow://inf",{"_index":2304,"title":{},"content":{"210":{"position":[[1426,21]]}},"keywords":{}}],["quot;flow://writ",{"_index":2303,"title":{},"content":{"210":{"position":[[1371,18]]}},"keywords":{}}],["quot;flow_capture"",{"_index":3405,"title":{},"content":{"370":{"position":[[532,24]]},"371":{"position":[[254,24]]},"757":{"position":[[232,24]]},"758":{"position":[[211,24]]},"770":{"position":[[232,24]]},"771":{"position":[[211,24]]},"797":{"position":[[232,24]]},"798":{"position":[[209,24]]},"812":{"position":[[232,24]]},"813":{"position":[[209,24]]},"828":{"position":[[232,24]]},"829":{"position":[[209,24]]},"868":{"position":[[180,24]]},"880":{"position":[[207,24]]},"907":{"position":[[315,24]]},"908":{"position":[[255,24]]},"923":{"position":[[315,24]]},"924":{"position":[[255,24]]},"934":{"position":[[315,24]]},"935":{"position":[[255,24]]},"950":{"position":[[315,24]]},"951":{"position":[[255,24]]},"968":{"position":[[315,24]]},"969":{"position":[[255,24]]},"1045":{"position":[[300,24]]},"1046":{"position":[[196,24]]},"1053":{"position":[[300,24]]},"1054":{"position":[[196,24]]},"1061":{"position":[[300,24]]},"1062":{"position":[[196,24]]}},"keywords":{}}],["quot;flow_document"",{"_index":5438,"title":{},"content":{"1123":{"position":[[236,25]]}},"keywords":{}}],["quot;flow_publication"",{"_index":3409,"title":{},"content":{"370":{"position":[[1003,28]]},"907":{"position":[[786,28]]},"923":{"position":[[786,28]]},"934":{"position":[[786,28]]},"950":{"position":[[786,28]]},"968":{"position":[[786,28]]}},"keywords":{}}],["quot;flow_slot"",{"_index":3414,"title":{},"content":{"370":{"position":[[1264,21]]},"907":{"position":[[1047,21]]},"923":{"position":[[1047,21]]},"934":{"position":[[1047,21]]},"950":{"position":[[1047,21]]},"968":{"position":[[1047,21]]}},"keywords":{}}],["quot;folder"",{"_index":5793,"title":{},"content":{"1179":{"position":[[664,18]]}},"keywords":{}}],["quot;foo"",{"_index":1407,"title":{},"content":{"98":{"position":[[444,17]]},"99":{"position":[[576,17]]}},"keywords":{}}],["quot;foreign"",{"_index":4778,"title":{},"content":{"842":{"position":[[3045,19],[3427,19]]}},"keywords":{}}],["quot;format"",{"_index":3267,"title":{},"content":{"352":{"position":[[114,19]]}},"keywords":{}}],["quot;fresh"",{"_index":2403,"title":{},"content":{"210":{"position":[[3652,18]]}},"keywords":{}}],["quot;full/nameof/estuarycolletion"",{"_index":2683,"title":{},"content":{"250":{"position":[[1473,40]]}},"keywords":{}}],["quot;fullplot"",{"_index":2314,"title":{},"content":{"210":{"position":[[1988,21]]}},"keywords":{}}],["quot;ga:segment"",{"_index":4228,"title":{},"content":{"585":{"position":[[629,24]]}},"keywords":{}}],["quot;genres"",{"_index":2342,"title":{},"content":{"210":{"position":[[2585,19]]}},"keywords":{}}],["quot;ghcr.io/estuary/materi",{"_index":5725,"title":{},"content":{"1145":{"position":[[70,33]]},"1152":{"position":[[70,33]]},"1163":{"position":[[70,33]]},"1171":{"position":[[70,33]]},"1214":{"position":[[70,33]]},"1221":{"position":[[70,33]]},"1261":{"position":[[70,33]]},"1278":{"position":[[70,33]]}},"keywords":{}}],["quot;ghcr.io/estuary/sourc",{"_index":3425,"title":{},"content":{"371":{"position":[[126,28]]},"378":{"position":[[66,28]]},"439":{"position":[[66,28]]},"908":{"position":[[126,28]]},"924":{"position":[[126,28]]},"935":{"position":[[126,28]]},"951":{"position":[[126,28]]},"969":{"position":[[126,28]]},"1022":{"position":[[56,28]]},"1046":{"position":[[66,28]]},"1054":{"position":[[66,28]]},"1062":{"position":[[66,28]]}},"keywords":{}}],["quot;good",{"_index":5223,"title":{},"content":{"1036":{"position":[[406,10]]}},"keywords":{}}],["quot;hello",{"_index":991,"title":{},"content":{"66":{"position":[[987,11]]},"128":{"position":[[720,11]]},"129":{"position":[[1120,11],[1168,11],[1259,11]]},"130":{"position":[[272,11],[323,11]]}},"keywords":{}}],["quot;hello"",{"_index":1415,"title":{},"content":{"98":{"position":[[753,18]]}},"keywords":{}}],["quot;help"",{"_index":2588,"title":{},"content":{"238":{"position":[[966,16]]}},"keywords":{}}],["quot;http://json",{"_index":2285,"title":{},"content":{"210":{"position":[[867,17]]},"314":{"position":[[1057,17]]}},"keywords":{}}],["quot;https://accounts.google.com/o/oauth2/auth"",{"_index":4076,"title":{},"content":{"546":{"position":[[522,54]]},"594":{"position":[[510,54]]}},"keywords":{}}],["quot;https://accounts.google.com/o/oauth2/token"",{"_index":4078,"title":{},"content":{"546":{"position":[[600,55]]},"594":{"position":[[588,55]]}},"keywords":{}}],["quot;https://commons.wikimedia.org"",{"_index":2753,"title":{},"content":{"253":{"position":[[2724,42]]},"313":{"position":[[2724,42]]}},"keywords":{}}],["quot;https://commons.wikimedia.org/w/index.php?diff=866807860&oldid=861559382&rcid=2468434138"",{"_index":2741,"title":{},"content":{"253":{"position":[[2168,109]]},"313":{"position":[[2168,109]]}},"keywords":{}}],["quot;https://commons.wikimedia.org/wiki/category:jetons"",{"_index":2737,"title":{},"content":{"253":{"position":[[2051,62],[2873,63]]},"313":{"position":[[2051,62],[2873,63]]}},"keywords":{}}],["quot;https://example.com/posters/r",{"_index":2360,"title":{},"content":{"210":{"position":[[2862,38]]}},"keywords":{}}],["quot;https://www.googleapis.com/oauth2/v1/certs"",{"_index":4080,"title":{},"content":{"546":{"position":[[697,55]]},"594":{"position":[[685,55]]}},"keywords":{}}],["quot;https://www.googleapis.com/robot/v1/metadata/x509/servic",{"_index":4082,"title":{},"content":{"546":{"position":[[787,63]]},"594":{"position":[[775,63]]}},"keywords":{}}],["quot;id",{"_index":6285,"title":{},"content":{"1363":{"position":[[294,9]]}},"keywords":{}}],["quot;id"",{"_index":2389,"title":{},"content":{"210":{"position":[[3395,15]]},"236":{"position":[[2197,14],[2982,14]]},"253":{"position":[[1566,15],[1719,15]]},"313":{"position":[[1566,15],[1719,15]]},"1046":{"position":[[322,16]]},"1054":{"position":[[322,16]]},"1062":{"position":[[322,16]]}},"keywords":{}}],["quot;identifier"",{"_index":5893,"title":{},"content":{"1230":{"position":[[1210,22]]}},"keywords":{}}],["quot;idl",{"_index":1587,"title":{},"content":{"110":{"position":[[1529,10]]}},"keywords":{}}],["quot;idri",{"_index":2354,"title":{},"content":{"210":{"position":[[2770,11]]}},"keywords":{}}],["quot;imdb"",{"_index":2384,"title":{},"content":{"210":{"position":[[3324,17]]}},"keywords":{}}],["quot;in",{"_index":2315,"title":{},"content":{"210":{"position":[[2010,8]]}},"keywords":{}}],["quot;include"",{"_index":5846,"title":{},"content":{"1200":{"position":[[966,20]]}},"keywords":{}}],["quot;index"",{"_index":5841,"title":{},"content":{"1200":{"position":[[829,18]]}},"keywords":{}}],["quot;info"",{"_index":3232,"title":{},"content":{"343":{"position":[[183,17],[281,17]]}},"keywords":{}}],["quot;integer"",{"_index":6656,"title":{},"content":{"1466":{"position":[[248,20]]}},"keywords":{}}],["quot;intersect"",{"_index":6720,"title":{},"content":{"1477":{"position":[[1132,22],[2265,22],[3360,22],[4633,22]]}},"keywords":{}}],["quot;iphone"",{"_index":478,"title":{},"content":{"16":{"position":[[928,19]]}},"keywords":{}}],["quot;item_price"",{"_index":1383,"title":{},"content":{"96":{"position":[[440,23]]}},"keywords":{}}],["quot;items"",{"_index":1416,"title":{},"content":{"98":{"position":[[772,18]]}},"keywords":{}}],["quot;just",{"_index":5027,"title":{},"content":{"912":{"position":[[1428,10]]}},"keywords":{}}],["quot;key",{"_index":4065,"title":{},"content":{"546":{"position":[[265,9]]},"594":{"position":[[253,9]]}},"keywords":{}}],["quot;key"",{"_index":2305,"title":{},"content":{"210":{"position":[[1468,16]]},"595":{"position":[[814,16]]},"1047":{"position":[[549,16],[730,16]]},"1055":{"position":[[549,16],[730,16]]},"1063":{"position":[[549,16],[730,16]]},"1463":{"position":[[635,16],[706,16],[837,16]]},"1464":{"position":[[517,16],[559,16],[680,16]]},"1465":{"position":[[1214,16],[1264,16],[1379,16],[1480,16],[1532,16],[1646,16]]},"1466":{"position":[[495,16],[532,16],[628,16]]},"1467":{"position":[[1032,16],[1074,16],[1177,16],[1333,16],[1407,16],[1539,16],[2459,16],[2551,16],[2705,16]]},"1476":{"position":[[468,16],[526,16],[644,16],[1695,16],[1772,16],[1849,16],[1926,16],[2155,16]]},"1477":{"position":[[1726,16],[1839,16],[1919,16],[2070,16],[2239,16],[2340,16],[2491,16],[4072,16],[4189,16],[4269,16],[4428,16],[4607,16],[4710,16],[4869,16]]}},"keywords":{}}],["quot;key1=value1&key2=value2&key3=value3"",{"_index":3554,"title":{},"content":{"403":{"position":[[338,55]]}},"keywords":{}}],["quot;keyword"",{"_index":5837,"title":{},"content":{"1200":{"position":[[444,20],[1016,20]]}},"keywords":{}}],["quot;languages"",{"_index":2362,"title":{},"content":{"210":{"position":[[2932,22]]}},"keywords":{}}],["quot;lastupdated"",{"_index":2379,"title":{},"content":{"210":{"position":[[3235,24],[3798,24]]}},"keywords":{}}],["quot;length"",{"_index":2766,"title":{},"content":{"253":{"position":[[3292,19]]}},"keywords":{}}],["quot;link"",{"_index":1725,"title":{},"content":{"129":{"position":[[822,16]]}},"keywords":{}}],["quot;lives"",{"_index":1668,"title":{},"content":{"121":{"position":[[1856,17]]}},"keywords":{}}],["quot;localhost:5432"",{"_index":5007,"title":{},"content":{"908":{"position":[[191,26]]},"924":{"position":[[191,26]]},"935":{"position":[[191,26]]},"951":{"position":[[191,26]]},"969":{"position":[[191,26]]}},"keywords":{}}],["quot;lte"",{"_index":480,"title":{},"content":{"16":{"position":[[969,17]]}},"keywords":{}}],["quot;mappers,"",{"_index":1606,"title":{},"content":{"113":{"position":[[336,20]]}},"keywords":{}}],["quot;materialization"",{"_index":6686,"title":{},"content":{"1474":{"position":[[526,27]]}},"keywords":{}}],["quot;maximize"",{"_index":4268,"title":{},"content":{"595":{"position":[[792,21]]}},"keywords":{}}],["quot;mediawiki.recentchange"",{"_index":2733,"title":{},"content":{"253":{"position":[[1937,35]]},"313":{"position":[[1937,35]]}},"keywords":{}}],["quot;merchant_id"",{"_index":2552,"title":{},"content":{"236":{"position":[[2291,23],[3076,23]]}},"keywords":{}}],["quot;message"",{"_index":990,"title":{},"content":{"66":{"position":[[966,20]]}},"keywords":{}}],["quot;meta"",{"_index":2714,"title":{},"content":{"253":{"position":[[1594,17]]},"313":{"position":[[1594,17],[3261,17]]}},"keywords":{}}],["quot;metadata",{"_index":4648,"title":{},"content":{"763":{"position":[[35,14]]},"776":{"position":[[35,14]]},"803":{"position":[[35,14]]},"818":{"position":[[35,14]]},"834":{"position":[[35,14]]}},"keywords":{}}],["quot;metal"",{"_index":1098,"title":{},"content":{"76":{"position":[[827,17]]}},"keywords":{}}],["quot;meter"",{"_index":2401,"title":{},"content":{"210":{"position":[[3627,18],[3750,18]]}},"keywords":{}}],["quot;metrics"",{"_index":4164,"title":{},"content":{"574":{"position":[[334,20]]},"585":{"position":[[382,20],[702,20]]}},"keywords":{}}],["quot;mi",{"_index":1404,"title":{},"content":{"98":{"position":[[309,9]]},"418":{"position":[[112,8]]},"1200":{"position":[[848,8]]}},"keywords":{}}],["quot;michael",{"_index":2352,"title":{},"content":{"210":{"position":[[2739,13]]}},"keywords":{}}],["quot;mongo:27017"",{"_index":4684,"title":{},"content":{"783":{"position":[[118,23]]},"1254":{"position":[[131,23]]}},"keywords":{}}],["quot;movie"",{"_index":2395,"title":{},"content":{"210":{"position":[[3507,18]]}},"keywords":{}}],["quot;my_db"",{"_index":5257,"title":{},"content":{"1046":{"position":[[172,17]]},"1054":{"position":[[172,17]]},"1062":{"position":[[172,17]]}},"keywords":{}}],["quot;mysql"",{"_index":4612,"title":{},"content":{"757":{"position":[[1126,17]]},"770":{"position":[[1126,17]]},"797":{"position":[[1126,17]]},"812":{"position":[[1126,17]]},"828":{"position":[[1126,17]]}},"keywords":{}}],["quot;na"",{"_index":3489,"title":{},"content":{"387":{"position":[[902,14]]}},"keywords":{}}],["quot;name"",{"_index":1059,"title":{},"content":{"71":{"position":[[344,17],[404,17],[467,17]]},"236":{"position":[[2229,16],[3014,16]]},"574":{"position":[[272,19]]},"585":{"position":[[262,19],[552,19]]},"606":{"position":[[191,18]]},"943":{"position":[[1184,17]]}},"keywords":{}}],["quot;namespace"",{"_index":2738,"title":{},"content":{"253":{"position":[[2117,22]]},"313":{"position":[[2117,22]]}},"keywords":{}}],["quot;network"",{"_index":479,"title":{},"content":{"16":{"position":[[948,20]]}},"keywords":{}}],["quot;new",{"_index":3820,"title":{},"content":{"479":{"position":[[124,9]]}},"keywords":{}}],["quot;next"",{"_index":3826,"title":{},"content":{"479":{"position":[[410,16]]}},"keywords":{}}],["quot;nominations"",{"_index":2374,"title":{},"content":{"210":{"position":[[3152,24]]}},"keywords":{}}],["quot;not",{"_index":5169,"title":{},"content":{"1009":{"position":[[1307,9],[1337,9]]}},"keywords":{}}],["quot;notify_url"",{"_index":2740,"title":{},"content":{"253":{"position":[[2144,23]]},"313":{"position":[[2144,23]]}},"keywords":{}}],["quot;num_mflix_comments"",{"_index":2411,"title":{},"content":{"210":{"position":[[3840,31]]}},"keywords":{}}],["quot;numb",{"_index":5850,"title":{},"content":{"1201":{"position":[[521,12],[642,12]]}},"keywords":{}}],["quot;number"",{"_index":6655,"title":{},"content":{"1466":{"position":[[226,18]]}},"keywords":{}}],["quot;numreviews"",{"_index":2399,"title":{},"content":{"210":{"position":[[3597,23],[3722,23]]}},"keywords":{}}],["quot;oauth2.0"",{"_index":4967,"title":{},"content":{"898":{"position":[[319,21],[505,21],[608,20]]}},"keywords":{}}],["quot;object"",{"_index":1428,"title":{},"content":{"99":{"position":[[556,19]]},"210":{"position":[[679,19],[1244,18]]},"898":{"position":[[359,19],[1478,19]]},"1467":{"position":[[592,19]]}},"keywords":{}}],["quot;offset"",{"_index":2697,"title":{},"content":{"253":{"position":[[1324,19],[1785,19]]},"313":{"position":[[1324,19],[1785,19]]},"315":{"position":[[2080,19]]}},"keywords":{}}],["quot;one"",{"_index":6644,"title":{},"content":{"1463":{"position":[[657,16],[679,15],[859,16]]}},"keywords":{}}],["quot;oneof"",{"_index":4966,"title":{},"content":{"898":{"position":[[277,18]]}},"keywords":{}}],["quot;op"",{"_index":2288,"title":{},"content":{"210":{"position":[[950,15]]}},"keywords":{}}],["quot;order"",{"_index":3569,"title":{},"content":{"409":{"position":[[54,18],[100,18],[150,18],[200,18],[255,18]]},"898":{"position":[[527,18],[1830,18]]}},"keywords":{}}],["quot;organ",{"_index":4033,"title":{},"content":{"531":{"position":[[360,18]]}},"keywords":{}}],["quot;oscar",{"_index":2357,"title":{},"content":{"210":{"position":[[2815,11]]}},"keywords":{}}],["quot;parent"",{"_index":4779,"title":{},"content":{"842":{"position":[[3106,18],[3268,18]]}},"keywords":{}}],["quot;parsedcomment"",{"_index":2742,"title":{},"content":{"253":{"position":[[2278,26]]},"313":{"position":[[2278,26]]}},"keywords":{}}],["quot;partition"",{"_index":2725,"title":{},"content":{"253":{"position":[[1817,22]]},"313":{"position":[[1817,22]]}},"keywords":{}}],["quot;pattern_descriptor"",{"_index":4962,"title":{},"content":{"898":{"position":[[128,31]]}},"keywords":{}}],["quot;person",{"_index":4039,"title":{},"content":{"532":{"position":[[331,14]]}},"keywords":{}}],["quot;pg",{"_index":2370,"title":{},"content":{"210":{"position":[[3090,8]]}},"keywords":{}}],["quot;pikachu"",{"_index":1727,"title":{},"content":{"129":{"position":[[956,19]]}},"keywords":{}}],["quot;pinterest"",{"_index":4969,"title":{},"content":{"898":{"position":[[410,22]]}},"keywords":{}}],["quot;pipelined"",{"_index":6542,"title":{},"content":{"1452":{"position":[[1994,21]]}},"keywords":{}}],["quot;plot"",{"_index":2331,"title":{},"content":{"210":{"position":[[2354,17]]}},"keywords":{}}],["quot;pol",{"_index":3829,"title":{},"content":{"479":{"position":[[698,10]]}},"keywords":{}}],["quot;poster"",{"_index":2359,"title":{},"content":{"210":{"position":[[2842,19]]}},"keywords":{}}],["quot;postgres"",{"_index":2509,"title":{},"content":{"236":{"position":[[817,20]]},"370":{"position":[[445,20]]},"371":{"position":[[227,20]]},"907":{"position":[[228,20]]},"908":{"position":[[228,20]]},"923":{"position":[[228,20]]},"924":{"position":[[228,20]]},"934":{"position":[[228,20]]},"935":{"position":[[228,20]]},"950":{"position":[[228,20]]},"951":{"position":[[228,20]]},"968":{"position":[[228,20]]},"969":{"position":[[228,20]]}},"keywords":{}}],["quot;prefix/source_collection"",{"_index":5844,"title":{},"content":{"1200":{"position":[[906,37]]}},"keywords":{}}],["quot;price"",{"_index":2554,"title":{},"content":{"236":{"position":[[2363,17],[3148,17]]}},"keywords":{}}],["quot;principal"",{"_index":2003,"title":{},"content":{"172":{"position":[[439,22],[747,22],[997,22]]},"414":{"position":[[409,22],[608,22]]},"477":{"position":[[891,21]]},"598":{"position":[[853,21]]}},"keywords":{}}],["quot;priv",{"_index":4378,"title":{},"content":{"646":{"position":[[672,13]]},"654":{"position":[[393,13]]},"1303":{"position":[[1145,13]]}},"keywords":{}}],["quot;private_key"",{"_index":4066,"title":{},"content":{"546":{"position":[[285,24]]},"594":{"position":[[273,24]]}},"keywords":{}}],["quot;private_key_id"",{"_index":4064,"title":{},"content":{"546":{"position":[[237,27]]},"594":{"position":[[225,27]]}},"keywords":{}}],["quot;product_id"",{"_index":1095,"title":{},"content":{"76":{"position":[[705,22]]}},"keywords":{}}],["quot;project",{"_index":4063,"title":{},"content":{"546":{"position":[[213,13]]},"594":{"position":[[201,13]]}},"keywords":{}}],["quot;project_id"",{"_index":4062,"title":{},"content":{"546":{"position":[[189,23]]},"594":{"position":[[177,23]]}},"keywords":{}}],["quot;projects/$projectid/databases/(default)"",{"_index":4248,"title":{},"content":{"593":{"position":[[257,52]]}},"keywords":{}}],["quot;properties"",{"_index":2282,"title":{},"content":{"210":{"position":[[740,23],[924,23]]},"352":{"position":[[3,23]]},"409":{"position":[[3,23]]},"898":{"position":[[76,23],[433,23],[1498,23]]},"1095":{"position":[[3,23]]}},"keywords":{}}],["quot;property"",{"_index":6382,"title":{},"content":{"1384":{"position":[[890,20]]}},"keywords":{}}],["quot;propertyname"",{"_index":4964,"title":{},"content":{"898":{"position":[[224,25]]}},"keywords":{}}],["quot;pub/sub",{"_index":4281,"title":{},"content":{"597":{"position":[[151,13]]},"598":{"position":[[80,13],[978,13]]}},"keywords":{}}],["quot;public"",{"_index":3553,"title":{},"content":{"403":{"position":[[306,18]]},"1138":{"position":[[717,18]]},"1151":{"position":[[703,18]]},"1313":{"position":[[527,18]]},"1337":{"position":[[527,18]]},"1348":{"position":[[527,18]]},"1427":{"position":[[468,18]]}},"keywords":{}}],["quot;public"."products"",{"_index":2548,"title":{},"content":{"236":{"position":[[2155,39]]}},"keywords":{}}],["quot;public.flow_watermarks"",{"_index":3417,"title":{},"content":{"370":{"position":[[1466,34]]},"907":{"position":[[1249,34]]},"923":{"position":[[1249,34]]},"934":{"position":[[1249,34]]},"950":{"position":[[1249,34]]},"968":{"position":[[1249,34]]}},"keywords":{}}],["quot;query"",{"_index":3877,"title":{},"content":{"488":{"position":[[1155,18]]},"659":{"position":[[1312,18]]},"676":{"position":[[1155,18]]},"691":{"position":[[1155,18]]}},"keywords":{}}],["quot;queue_url"",{"_index":3568,"title":{},"content":{"409":{"position":[[29,22]]}},"keywords":{}}],["quot;r",{"_index":3867,"title":{},"content":{"488":{"position":[[566,8]]},"659":{"position":[[723,8]]},"676":{"position":[[566,8]]},"691":{"position":[[566,8]]}},"keywords":{}}],["quot;rated"",{"_index":2369,"title":{},"content":{"210":{"position":[[3071,18]]}},"keywords":{}}],["quot;rating"",{"_index":2385,"title":{},"content":{"210":{"position":[[3344,19],[3572,19],[3697,19]]}},"keywords":{}}],["quot;readschema"",{"_index":2300,"title":{},"content":{"210":{"position":[[1304,23]]}},"keywords":{}}],["quot;realm"",{"_index":4816,"title":{},"content":{"849":{"position":[[91,19]]}},"keywords":{}}],["quot;recentchange"",{"_index":2696,"title":{},"content":{"253":{"position":[[1298,25]]},"313":{"position":[[1298,25]]}},"keywords":{}}],["quot;recommended"",{"_index":3055,"title":{},"content":{"308":{"position":[[567,23]]},"1200":{"position":[[1047,24]]}},"keywords":{}}],["quot;recoveri",{"_index":6499,"title":{},"content":{"1442":{"position":[[1198,14]]}},"keywords":{}}],["quot;red"",{"_index":1665,"title":{},"content":{"121":{"position":[[1306,16]]}},"keywords":{}}],["quot;redshift",{"_index":5746,"title":{},"content":{"1152":{"position":[[140,14]]}},"keywords":{}}],["quot;refresh",{"_index":4955,"title":{},"content":{"895":{"position":[[552,13]]},"898":{"position":[[1171,13],[1264,13]]}},"keywords":{}}],["quot;refresh_token"",{"_index":4977,"title":{},"content":{"898":{"position":[[1083,26],[1382,25]]}},"keywords":{}}],["quot;region"",{"_index":3570,"title":{},"content":{"409":{"position":[[78,19]]}},"keywords":{}}],["quot;released"",{"_index":2364,"title":{},"content":{"210":{"position":[[2978,21]]}},"keywords":{}}],["quot;remot",{"_index":6508,"title":{},"content":{"1444":{"position":[[334,12]]}},"keywords":{}}],["quot;remove"",{"_index":6721,"title":{},"content":{"1477":{"position":[[1159,18],[1865,19],[3389,18],[4215,19]]}},"keywords":{}}],["quot;rename"",{"_index":5802,"title":{},"content":{"1183":{"position":[[1197,18]]}},"keywords":{}}],["quot;request",{"_index":4527,"title":{},"content":{"725":{"position":[[156,13]]},"726":{"position":[[574,13]]}},"keywords":{}}],["quot;request_id"",{"_index":2726,"title":{},"content":{"253":{"position":[[1843,23]]},"313":{"position":[[1843,23]]}},"keywords":{}}],["quot;requir",{"_index":3880,"title":{},"content":{"489":{"position":[[201,13]]},"662":{"position":[[201,13]]},"677":{"position":[[201,13]]},"692":{"position":[[201,13]]}},"keywords":{}}],["quot;required"",{"_index":2280,"title":{},"content":{"210":{"position":[[699,21]]},"898":{"position":[[3,21],[1333,21],[1941,21]]}},"keywords":{}}],["quot;reserved"",{"_index":5520,"title":{},"content":{"1140":{"position":[[156,20]]},"1316":{"position":[[156,20]]},"1340":{"position":[[156,20]]},"1351":{"position":[[156,20]]},"1370":{"position":[[152,20]]},"1431":{"position":[[179,20]]}},"keywords":{}}],["quot;reset"",{"_index":6651,"title":{},"content":{"1465":{"position":[[881,18]]}},"keywords":{}}],["quot;resource"",{"_index":2011,"title":{},"content":{"172":{"position":[[639,21],[891,21],[1146,21]]},"414":{"position":[[498,21],[696,21]]},"415":{"position":[[721,21],[881,21]]},"1200":{"position":[[805,21]]}},"keywords":{}}],["quot;right",{"_index":6496,"title":{},"content":{"1440":{"position":[[1530,11]]}},"keywords":{}}],["quot;role"",{"_index":5094,"title":{},"content":{"943":{"position":[[1164,17]]}},"keywords":{}}],["quot;rotten"",{"_index":2409,"title":{},"content":{"210":{"position":[[3775,19]]}},"keywords":{}}],["quot;run",{"_index":2601,"title":{},"content":{"240":{"position":[[2185,9]]},"1032":{"position":[[1977,9]]}},"keywords":{}}],["quot;runtime"",{"_index":2347,"title":{},"content":{"210":{"position":[[2668,20]]}},"keywords":{}}],["quot;s3:deleteobject"",{"_index":2010,"title":{},"content":{"172":{"position":[[609,29]]}},"keywords":{}}],["quot;s3:getbucketpolicy"",{"_index":2016,"title":{},"content":{"172":{"position":[[1114,31]]}},"keywords":{}}],["quot;s3:getobject"",{"_index":2008,"title":{},"content":{"172":{"position":[[556,26]]},"414":{"position":[[668,24]]},"415":{"position":[[853,24]]}},"keywords":{}}],["quot;s3:listbucket"",{"_index":2014,"title":{},"content":{"172":{"position":[[864,26]]},"414":{"position":[[469,25]]},"415":{"position":[[692,25]]}},"keywords":{}}],["quot;s3:putobject"",{"_index":2009,"title":{},"content":{"172":{"position":[[583,25]]}},"keywords":{}}],["quot;sales_tax"",{"_index":1385,"title":{},"content":{"96":{"position":[[470,22]]}},"keywords":{}}],["quot;sample_db"",{"_index":3550,"title":{},"content":{"403":{"position":[[207,21]]}},"keywords":{}}],["quot;sample_password"",{"_index":3552,"title":{},"content":{"403":{"position":[[269,27]]}},"keywords":{}}],["quot;sample_user"",{"_index":3551,"title":{},"content":{"403":{"position":[[235,23]]}},"keywords":{}}],["quot;sav",{"_index":3801,"title":{},"content":{"472":{"position":[[814,10]]},"479":{"position":[[894,10]]}},"keywords":{}}],["quot;sci",{"_index":2344,"title":{},"content":{"210":{"position":[[2625,9]]}},"keywords":{}}],["quot;scratch",{"_index":4580,"title":{},"content":{"750":{"position":[[462,13]]},"766":{"position":[[462,13]]},"789":{"position":[[450,13]]},"807":{"position":[[450,13]]},"823":{"position":[[450,13]]}},"keywords":{}}],["quot;secret"",{"_index":3428,"title":{},"content":{"371":{"position":[[289,18]]},"758":{"position":[[246,18]]},"771":{"position":[[246,18]]},"798":{"position":[[244,18]]},"813":{"position":[[244,18]]},"829":{"position":[[244,18]]},"908":{"position":[[290,18]]},"924":{"position":[[290,18]]},"935":{"position":[[290,18]]},"951":{"position":[[290,18]]},"969":{"position":[[290,18]]},"1046":{"position":[[231,18]]},"1054":{"position":[[231,18]]},"1062":{"position":[[231,18]]}},"keywords":{}}],["quot;secret_key"",{"_index":3572,"title":{},"content":{"409":{"position":[[174,23]]}},"keywords":{}}],["quot;segments"",{"_index":4230,"title":{},"content":{"585":{"position":[[763,21]]}},"keywords":{}}],["quot;serializ",{"_index":5758,"title":{},"content":{"1156":{"position":[[695,18]]}},"keywords":{}}],["quot;server_name"",{"_index":2749,"title":{},"content":{"253":{"position":[[2592,24]]},"313":{"position":[[2592,24]]}},"keywords":{}}],["quot;server_script_path"",{"_index":2750,"title":{},"content":{"253":{"position":[[2652,31]]},"313":{"position":[[2652,31]]}},"keywords":{}}],["quot;server_url"",{"_index":2752,"title":{},"content":{"253":{"position":[[2700,23]]},"313":{"position":[[2700,23]]}},"keywords":{}}],["quot;serverless"",{"_index":1557,"title":{},"content":{"108":{"position":[[263,23]]}},"keywords":{}}],["quot;servic",{"_index":4071,"title":{},"content":{"546":{"position":[[419,13]]},"594":{"position":[[407,13]]}},"keywords":{}}],["quot;service_account"",{"_index":4061,"title":{},"content":{"546":{"position":[[160,28]]},"594":{"position":[[148,28]]}},"keywords":{}}],["quot;set",{"_index":4957,"title":{},"content":{"895":{"position":[[621,9]]}},"keywords":{}}],["quot;settings"",{"_index":2031,"title":{},"content":{"174":{"position":[[145,20]]}},"keywords":{}}],["quot;sh",{"_index":2516,"title":{},"content":{"236":{"position":[[930,8]]}},"keywords":{}}],["quot;shop",{"_index":5353,"title":{},"content":{"1092":{"position":[[365,10]]}},"keywords":{}}],["quot;sid",{"_index":4295,"title":{},"content":{"602":{"position":[[659,10]]}},"keywords":{}}],["quot;sid"",{"_index":1999,"title":{},"content":{"172":{"position":[[333,16]]},"414":{"position":[[320,16]]},"415":{"position":[[580,16]]}},"keywords":{}}],["quot;source"",{"_index":5843,"title":{},"content":{"1200":{"position":[[886,19]]}},"keywords":{}}],["quot;sources"",{"_index":3819,"title":{},"content":{"479":{"position":[[73,20]]}},"keywords":{}}],["quot;ssl"",{"_index":3665,"title":{},"content":{"429":{"position":[[1216,15]]}},"keywords":{}}],["quot;start",{"_index":4949,"title":{},"content":{"895":{"position":[[154,11]]},"1009":{"position":[[1161,12],[1251,12]]},"1010":{"position":[[362,12]]}},"keywords":{}}],["quot;start_date"",{"_index":3264,"title":{},"content":{"352":{"position":[[29,23]]},"898":{"position":[[25,24],[102,23]]}},"keywords":{}}],["quot;starter"",{"_index":4400,"title":{},"content":{"654":{"position":[[770,19]]}},"keywords":{}}],["quot;statement"",{"_index":1998,"title":{},"content":{"172":{"position":[[306,22]]},"414":{"position":[[293,22]]},"415":{"position":[[553,22]]}},"keywords":{}}],["quot;status"",{"_index":2555,"title":{},"content":{"236":{"position":[[2420,18],[3205,18]]}},"keywords":{}}],["quot;store"",{"_index":6487,"title":{},"content":{"1439":{"position":[[638,17]]}},"keywords":{}}],["quot;strategy"",{"_index":4267,"title":{},"content":{"595":{"position":[[768,23]]}},"keywords":{}}],["quot;stream"",{"_index":2732,"title":{},"content":{"253":{"position":[[1917,19]]},"313":{"position":[[1917,19]]}},"keywords":{}}],["quot;string"",{"_index":2283,"title":{},"content":{"210":{"position":[[803,18],[986,19]]},"898":{"position":[[567,19],[829,18],[1061,18],[1309,18],[1736,18],[1870,19]]}},"keywords":{}}],["quot;stringfield"",{"_index":5847,"title":{},"content":{"1200":{"position":[[989,24]]}},"keywords":{}}],["quot;system_certificates"",{"_index":3674,"title":{},"content":{"432":{"position":[[335,31]]}},"keywords":{}}],["quot;test"",{"_index":5919,"title":{},"content":{"1254":{"position":[[165,16]]}},"keywords":{}}],["quot;testkey"",{"_index":3878,"title":{},"content":{"488":{"position":[[1176,20]]},"659":{"position":[[1333,20]]},"676":{"position":[[1176,20]]},"691":{"position":[[1176,20]]}},"keywords":{}}],["quot;testvalue"",{"_index":3879,"title":{},"content":{"488":{"position":[[1197,21]]},"659":{"position":[[1354,21]]},"676":{"position":[[1197,21]]},"691":{"position":[[1197,21]]}},"keywords":{}}],["quot;text",{"_index":5955,"title":{},"content":{"1277":{"position":[[655,10]]}},"keywords":{}}],["quot;text"",{"_index":2375,"title":{},"content":{"210":{"position":[[3180,17]]}},"keywords":{}}],["quot;th",{"_index":4972,"title":{},"content":{"898":{"position":[[716,9],[939,9],[1611,9]]}},"keywords":{}}],["quot;thi",{"_index":1161,"title":{},"content":{"82":{"position":[[1414,10],[3849,10]]}},"keywords":{}}],["quot;third",{"_index":4036,"title":{},"content":{"531":{"position":[[483,11]]},"532":{"position":[[295,11]]}},"keywords":{}}],["quot;thriller"",{"_index":2346,"title":{},"content":{"210":{"position":[[2645,22]]}},"keywords":{}}],["quot;timestamp"",{"_index":1379,"title":{},"content":{"96":{"position":[[383,22]]},"253":{"position":[[2767,22]]},"313":{"position":[[2767,22]]}},"keywords":{}}],["quot;title"",{"_index":2291,"title":{},"content":{"210":{"position":[[1071,18],[1947,18]]},"253":{"position":[[2802,18]]},"313":{"position":[[2802,18]]},"315":{"position":[[2210,18]]},"898":{"position":[[300,18],[769,18],[997,18],[1245,18],[1415,18],[1673,18]]}},"keywords":{}}],["quot;title_url"",{"_index":2756,"title":{},"content":{"253":{"position":[[2850,22]]},"313":{"position":[[2850,22]]}},"keywords":{}}],["quot;token_uri"",{"_index":4077,"title":{},"content":{"546":{"position":[[577,22]]},"594":{"position":[[565,22]]}},"keywords":{}}],["quot;tomatoes"",{"_index":2396,"title":{},"content":{"210":{"position":[[3526,21]]}},"keywords":{}}],["quot;top",{"_index":1426,"title":{},"content":{"99":{"position":[[526,10]]}},"keywords":{}}],["quot;topic"",{"_index":2734,"title":{},"content":{"253":{"position":[[1973,18]]},"313":{"position":[[1973,18]]}},"keywords":{}}],["quot;total"",{"_index":1666,"title":{},"content":{"121":{"position":[[1323,18],[1383,18],[1443,18]]}},"keywords":{}}],["quot;trace"",{"_index":3234,"title":{},"content":{"343":{"position":[[223,18]]}},"keywords":{}}],["quot;two"",{"_index":1417,"title":{},"content":{"98":{"position":[[795,16]]},"1463":{"position":[[728,16],[750,15],[881,15]]}},"keywords":{}}],["quot;type"",{"_index":477,"title":{},"content":{"16":{"position":[[909,18]]},"210":{"position":[[661,17],[785,17],[968,17],[1226,17],[3489,17]]},"253":{"position":[[2937,17]]},"313":{"position":[[2937,17]]},"546":{"position":[[142,17]]},"594":{"position":[[130,17]]},"898":{"position":[[341,17],[549,17],[811,17],[1043,17],[1291,17],[1460,17],[1718,17],[1852,17]]}},"keywords":{}}],["quot;type":"auto"",{"_index":3599,"title":{},"content":{"417":{"position":[[1813,35]]},"502":{"position":[[1461,35]]},"545":{"position":[[1415,35]]},"637":{"position":[[975,35]]},"1021":{"position":[[1972,35]]}},"keywords":{}}],["quot;u",{"_index":3516,"title":{},"content":{"392":{"position":[[639,8]]},"393":{"position":[[293,8]]},"398":{"position":[[294,8]]},"417":{"position":[[2067,8],[2175,8]]},"418":{"position":[[354,8]]},"1126":{"position":[[255,8]]}},"keywords":{}}],["quot;u"",{"_index":2290,"title":{},"content":{"210":{"position":[[1040,14]]}},"keywords":{}}],["quot;unhandl",{"_index":4645,"title":{},"content":{"762":{"position":[[36,15]]},"775":{"position":[[36,15]]},"802":{"position":[[36,15]]},"817":{"position":[[36,15]]},"833":{"position":[[36,15]]}},"keywords":{}}],["quot;unit",{"_index":2393,"title":{},"content":{"210":{"position":[[3460,12]]}},"keywords":{}}],["quot;unknown"",{"_index":1817,"title":{},"content":{"141":{"position":[[1094,19]]}},"keywords":{}}],["quot;unsupport",{"_index":4629,"title":{},"content":{"760":{"position":[[36,17]]},"761":{"position":[[36,17]]},"773":{"position":[[36,17]]},"774":{"position":[[36,17]]},"800":{"position":[[36,17]]},"801":{"position":[[36,17]]},"815":{"position":[[36,17]]},"816":{"position":[[36,17]]},"831":{"position":[[36,17]]},"832":{"position":[[36,17]]}},"keywords":{}}],["quot;upd",{"_index":2604,"title":{},"content":{"240":{"position":[[2986,12],[4818,12]]}},"keywords":{}}],["quot;update"",{"_index":2191,"title":{},"content":{"197":{"position":[[1194,18],[1546,18]]}},"keywords":{}}],["quot;uri"",{"_index":2736,"title":{},"content":{"253":{"position":[[2034,16]]},"313":{"position":[[2034,16]]}},"keywords":{}}],["quot;usa"",{"_index":2392,"title":{},"content":{"210":{"position":[[3442,17]]}},"keywords":{}}],["quot;user"",{"_index":2758,"title":{},"content":{"253":{"position":[[2979,17],[3256,16]]},"313":{"position":[[2979,17]]},"315":{"position":[[2246,17]]}},"keywords":{}}],["quot;user_id"",{"_index":2765,"title":{},"content":{"253":{"position":[[3235,20]]}},"keywords":{}}],["quot;useraccessfullbucket"",{"_index":3586,"title":{},"content":{"415":{"position":[[597,33]]}},"keywords":{}}],["quot;userid"",{"_index":1058,"title":{},"content":{"71":{"position":[[320,20],[380,20],[443,20]]}},"keywords":{}}],["quot;usernam",{"_index":4907,"title":{},"content":{"879":{"position":[[511,14]]}},"keywords":{}}],["quot;uuid"",{"_index":984,"title":{},"content":{"66":{"position":[[871,17]]},"253":{"position":[[1351,17]]},"313":{"position":[[1351,17]]},"315":{"position":[[2124,17]]}},"keywords":{}}],["quot;value"",{"_index":6380,"title":{},"content":{"1384":{"position":[[825,17]]},"1465":{"position":[[810,18]]}},"keywords":{}}],["quot;version"",{"_index":1996,"title":{},"content":{"172":{"position":[[261,20]]},"414":{"position":[[248,20]]},"415":{"position":[[508,20]]}},"keywords":{}}],["quot;viewer"",{"_index":2397,"title":{},"content":{"210":{"position":[[3550,19]]}},"keywords":{}}],["quot;votes"",{"_index":2387,"title":{},"content":{"210":{"position":[[3369,18]]}},"keywords":{}}],["quot;wal_level=logical"",{"_index":2512,"title":{},"content":{"236":{"position":[[857,29]]}},"keywords":{}}],["quot;wallet"",{"_index":4906,"title":{},"content":{"879":{"position":[[489,18]]}},"keywords":{}}],["quot;warehouse_name"",{"_index":6579,"title":{},"content":{"1453":{"position":[[1434,27]]}},"keywords":{}}],["quot;warn"",{"_index":3231,"title":{},"content":{"343":{"position":[[165,17]]}},"keywords":{}}],["quot;webhookid"",{"_index":3875,"title":{},"content":{"488":{"position":[[1115,22]]},"659":{"position":[[1272,22]]},"676":{"position":[[1115,22]]},"691":{"position":[[1115,22]]}},"keywords":{}}],["quot;wher",{"_index":2907,"title":{},"content":{"281":{"position":[[3323,11]]}},"keywords":{}}],["quot;wiki"",{"_index":2760,"title":{},"content":{"253":{"position":[[3022,17]]},"313":{"position":[[3022,17]]}},"keywords":{}}],["quot;wil",{"_index":1376,"title":{},"content":{"96":{"position":[[355,10],[579,10]]}},"keywords":{}}],["quot;will"",{"_index":1060,"title":{},"content":{"71":{"position":[[362,17],[485,17]]},"74":{"position":[[458,16]]}},"keywords":{}}],["quot;william"",{"_index":1061,"title":{},"content":{"71":{"position":[[422,20]]},"74":{"position":[[478,19]]}},"keywords":{}}],["quot;windowing"",{"_index":2848,"title":{},"content":{"279":{"position":[[356,21]]}},"keywords":{}}],["quot;wins"",{"_index":2373,"title":{},"content":{"210":{"position":[[3131,17]]}},"keywords":{}}],["quot;woocommerce"",{"_index":5350,"title":{},"content":{"1092":{"position":[[210,23]]}},"keywords":{}}],["quot;work"",{"_index":5174,"title":{},"content":{"1010":{"position":[[393,16]]}},"keywords":{}}],["quot;writeschema"",{"_index":2279,"title":{},"content":{"210":{"position":[[634,24]]}},"keywords":{}}],["quot;x",{"_index":2298,"title":{},"content":{"210":{"position":[[1268,7]]},"898":{"position":[[379,7]]}},"keywords":{}}],["quot;xxxxxxxx",{"_index":985,"title":{},"content":{"66":{"position":[[889,14]]}},"keywords":{}}],["quot;year"",{"_index":2382,"title":{},"content":{"210":{"position":[[3300,17]]}},"keywords":{}}],["quot;your_google_drive_file_id"",{"_index":4139,"title":{},"content":{"566":{"position":[[189,37]]}},"keywords":{}}],["quot;yyyi",{"_index":4929,"title":{},"content":{"891":{"position":[[196,10]]}},"keywords":{}}],["quot;zelda",{"_index":1718,"title":{},"content":{"128":{"position":[[536,11],[581,11]]},"129":{"position":[[909,11]]}},"keywords":{}}],["quot;zelda"",{"_index":1724,"title":{},"content":{"129":{"position":[[781,17]]}},"keywords":{}}],["quot;zendaya"",{"_index":2356,"title":{},"content":{"210":{"position":[[2794,20]]}},"keywords":{}}],["quot;zombie"",{"_index":6472,"title":{},"content":{"1437":{"position":[[647,18]]}},"keywords":{}}],["quot;|")spac",{"_index":3616,"title":{},"content":{"419":{"position":[[1672,20]]},"441":{"position":[[281,20]]},"504":{"position":[[1301,20]]},"547":{"position":[[1674,20]]},"639":{"position":[[1299,20]]},"1023":{"position":[[1655,20]]}},"keywords":{}}],["quota",{"_index":4038,"title":{},"content":{"532":{"position":[[212,6]]},"871":{"position":[[181,5]]}},"keywords":{}}],["r",{"_index":2685,"title":{},"content":{"250":{"position":[[1549,1]]}},"keywords":{}}],["r_organization_soci",{"_index":4520,"title":{},"content":{"723":{"position":[[252,22]]},"725":{"position":[[95,21]]},"726":{"position":[[513,21]]}},"keywords":{}}],["race",{"_index":6473,"title":{},"content":{"1437":{"position":[[714,4]]}},"keywords":{}}],["rais",{"_index":6291,"title":{},"content":{"1370":{"position":[[811,5]]}},"keywords":{}}],["raiserror",{"_index":6327,"title":{},"content":{"1379":{"position":[[2733,9]]},"1403":{"position":[[2733,9]]},"1414":{"position":[[2733,9]]}},"keywords":{}}],["ram",{"_index":4890,"title":{},"content":{"869":{"position":[[1230,4],[1518,3]]}},"keywords":{}}],["ran",{"_index":337,"title":{},"content":{"11":{"position":[[1424,3]]},"192":{"position":[[536,5]]}},"keywords":{}}],["random",{"_index":3891,"title":{},"content":{"492":{"position":[[187,6]]},"665":{"position":[[187,6]]},"680":{"position":[[187,6]]},"695":{"position":[[187,6]]},"1292":{"position":[[3722,6]]},"1306":{"position":[[3722,6]]},"1329":{"position":[[3722,6]]}},"keywords":{}}],["rang",{"_index":77,"title":{"870":{"position":[[16,5]]}},"content":{"2":{"position":[[279,5],[350,5],[495,6],[575,5]]},"560":{"position":[[86,5]]},"577":{"position":[[216,6]]},"584":{"position":[[699,5]]},"588":{"position":[[211,6]]},"867":{"position":[[1198,5],[1212,5]]},"870":{"position":[[92,6],[145,6],[247,5],[825,5]]},"1140":{"position":[[1917,5]]},"1292":{"position":[[3773,5]]},"1306":{"position":[[3773,5]]},"1316":{"position":[[1917,5]]},"1329":{"position":[[3773,5]]},"1340":{"position":[[1917,5]]},"1351":{"position":[[1917,5]]},"1370":{"position":[[828,5]]},"1379":{"position":[[2780,5]]},"1403":{"position":[[2780,5]]},"1414":{"position":[[2780,5]]},"1431":{"position":[[1940,5]]},"1452":{"position":[[4104,5]]},"1474":{"position":[[763,6],[899,6]]}},"keywords":{}}],["rank",{"_index":5605,"title":{},"content":{"1140":{"position":[[1954,4]]},"1292":{"position":[[3818,4]]},"1306":{"position":[[3818,4]]},"1316":{"position":[[1954,4]]},"1329":{"position":[[3818,4]]},"1340":{"position":[[1954,4]]},"1351":{"position":[[1954,4]]},"1431":{"position":[[1977,4]]}},"keywords":{}}],["rare",{"_index":980,"title":{},"content":{"66":{"position":[[718,4]]},"309":{"position":[[1631,4]]},"1147":{"position":[[4,4]]},"1166":{"position":[[4,4]]},"1174":{"position":[[4,4]]},"1216":{"position":[[4,4]]},"1224":{"position":[[4,4]]}},"keywords":{}}],["rate",{"_index":276,"title":{"493":{"position":[[9,5]]},"870":{"position":[[33,5]]}},"content":{"8":{"position":[[765,4]]},"124":{"position":[[1006,4]]},"198":{"position":[[997,6]]},"364":{"position":[[1003,5]]},"480":{"position":[[283,4]]},"494":{"position":[[42,4]]},"495":{"position":[[259,5]]},"509":{"position":[[282,4]]},"515":{"position":[[291,4],[981,4]]},"900":{"position":[[35,4]]},"922":{"position":[[3217,4]]},"1096":{"position":[[453,5]]}},"keywords":{}}],["rate<datasetsize>",{"_index":5029,"title":{},"content":{"912":{"position":[[1539,23]]}},"keywords":{}}],["rates:dev",{"_index":3331,"title":{},"content":{"364":{"position":[[1068,9]]},"497":{"position":[[98,9]]}},"keywords":{}}],["ratesus",{"_index":4350,"title":{},"content":{"628":{"position":[[331,9],[346,9]]}},"keywords":{}}],["ratingsscenario",{"_index":3914,"title":{},"content":{"506":{"position":[[269,15]]}},"keywords":{}}],["ratingsschedulessla",{"_index":5452,"title":{},"content":{"1128":{"position":[[262,19]]}},"keywords":{}}],["raw",{"_index":1418,"title":{},"content":{"98":{"position":[[839,3]]},"180":{"position":[[568,3],[808,3],[897,3]]},"183":{"position":[[207,3],[4617,3]]}},"keywords":{}}],["rbac",{"_index":2213,"title":{},"content":{"202":{"position":[[143,7]]}},"keywords":{}}],["rclock",{"_index":6690,"title":{},"content":{"1474":{"position":[[892,6]]}},"keywords":{}}],["rclockbegin",{"_index":6679,"title":{},"content":{"1474":{"position":[[170,12],[669,12]]}},"keywords":{}}],["rcu",{"_index":3535,"title":{},"content":{"397":{"position":[[950,3]]}},"keywords":{}}],["rcualloc",{"_index":3534,"title":{},"content":{"397":{"position":[[935,14]]}},"keywords":{}}],["rd",{"_index":2046,"title":{"765":{"position":[[7,3]]},"822":{"position":[[7,3]]},"901":{"position":[[7,3]]},"1048":{"position":[[7,3]]},"1318":{"position":[[7,3]]},"1321":{"position":[[32,4]]},"1331":{"position":[[7,3]]},"1334":{"position":[[29,3]]},"1371":{"position":[[7,3]]},"1373":{"position":[[13,3]]}},"content":{"179":{"position":[[520,4]]},"363":{"position":[[475,3],[543,3]]},"767":{"position":[[807,3],[2290,3],[2386,3]]},"772":{"position":[[19,3]]},"792":{"position":[[1086,3],[2367,3]]},"824":{"position":[[878,3],[2404,3],[2498,3]]},"864":{"position":[[1531,3]]},"904":{"position":[[903,3],[2313,3]]},"918":{"position":[[2605,3]]},"1039":{"position":[[334,3]]},"1041":{"position":[[117,3]]},"1050":{"position":[[1032,3]]},"1051":{"position":[[2029,3]]},"1120":{"position":[[308,3]]},"1289":{"position":[[199,3],[1478,3]]},"1310":{"position":[[799,3]]},"1322":{"position":[[1697,4]]},"1335":{"position":[[1345,4]]},"1373":{"position":[[1278,3]]},"1374":{"position":[[1282,3]]},"1407":{"position":[[117,3]]}},"keywords":{}}],["rdd",{"_index":3135,"title":{},"content":{"321":{"position":[[222,4],[286,3],[429,4],[465,3],[801,5]]}},"keywords":{}}],["rds.logical_replication=1",{"_index":4997,"title":{},"content":{"904":{"position":[[1107,26]]},"918":{"position":[[1398,26]]}},"keywords":{}}],["rds_replic",{"_index":4998,"title":{},"content":{"904":{"position":[[1506,15]]},"918":{"position":[[1798,15]]}},"keywords":{}}],["rdsadmin.rdsadmin_util.alter_supplemental_logging(p_act",{"_index":4861,"title":{},"content":{"864":{"position":[[1557,58]]}},"keywords":{}}],["rdsamazon",{"_index":4698,"title":{},"content":{"788":{"position":[[178,9]]},"790":{"position":[[94,9]]},"914":{"position":[[212,9]]},"916":{"position":[[99,9]]}},"keywords":{}}],["rdsgoogl",{"_index":5970,"title":{},"content":{"1282":{"position":[[77,9]]},"1310":{"position":[[77,9]]}},"keywords":{}}],["re",{"_index":237,"title":{"275":{"position":[[22,2]]},"307":{"position":[[0,2]]}},"content":{"7":{"position":[[308,2]]},"11":{"position":[[1248,2]]},"12":{"position":[[474,2]]},"13":{"position":[[927,2],[1081,2],[1732,2],[1951,2]]},"55":{"position":[[171,2],[1084,2]]},"56":{"position":[[648,2]]},"74":{"position":[[681,2]]},"81":{"position":[[2819,2]]},"82":{"position":[[1661,2],[1878,2],[4202,2]]},"94":{"position":[[1762,2],[2128,2]]},"106":{"position":[[420,2]]},"111":{"position":[[339,2]]},"112":{"position":[[823,2],[1053,2]]},"120":{"position":[[1314,2],[1680,2]]},"133":{"position":[[165,2],[306,2],[579,2]]},"138":{"position":[[1305,2],[1350,2]]},"141":{"position":[[1394,2]]},"142":{"position":[[1298,2],[1343,2]]},"162":{"position":[[696,2]]},"169":{"position":[[1730,2]]},"198":{"position":[[497,2]]},"208":{"position":[[940,2],[976,2],[1943,2]]},"228":{"position":[[684,2]]},"229":{"position":[[904,2]]},"239":{"position":[[1841,2]]},"259":{"position":[[392,2],[2081,2]]},"275":{"position":[[80,2],[633,2]]},"277":{"position":[[347,2]]},"285":{"position":[[447,2]]},"307":{"position":[[573,2],[647,2],[813,2],[2979,2],[3310,2]]},"308":{"position":[[1224,2]]},"309":{"position":[[1321,2],[1646,2],[3473,2],[3634,2]]},"324":{"position":[[348,2]]},"331":{"position":[[394,2],[777,2]]},"340":{"position":[[590,2]]},"387":{"position":[[365,2]]},"602":{"position":[[186,2]]},"761":{"position":[[586,2]]},"763":{"position":[[486,2]]},"764":{"position":[[673,2]]},"774":{"position":[[586,2]]},"776":{"position":[[486,2]]},"777":{"position":[[673,2]]},"785":{"position":[[685,2]]},"801":{"position":[[592,2]]},"803":{"position":[[492,2]]},"804":{"position":[[671,2]]},"816":{"position":[[592,2]]},"818":{"position":[[492,2]]},"819":{"position":[[671,2]]},"832":{"position":[[592,2]]},"834":{"position":[[492,2]]},"835":{"position":[[671,2]]},"922":{"position":[[2718,2]]},"1020":{"position":[[562,2]]},"1076":{"position":[[442,2]]},"1146":{"position":[[618,2]]},"1147":{"position":[[59,2],[217,2],[304,2]]},"1173":{"position":[[630,2]]},"1174":{"position":[[59,2],[217,2],[304,2]]},"1183":{"position":[[1669,2]]},"1215":{"position":[[618,2]]},"1216":{"position":[[59,2],[217,2],[304,2]]},"1223":{"position":[[630,2]]},"1224":{"position":[[59,2],[217,2],[304,2]]},"1440":{"position":[[1567,2]]},"1442":{"position":[[1564,2]]},"1446":{"position":[[388,2]]},"1447":{"position":[[468,2],[571,2]]},"1452":{"position":[[2216,2]]},"1459":{"position":[[498,2]]},"1480":{"position":[[1020,2],[1386,2]]}},"keywords":{}}],["reach",{"_index":109,"title":{},"content":{"3":{"position":[[237,5]]},"104":{"position":[[249,5]]},"141":{"position":[[1061,8]]},"277":{"position":[[117,7]]},"370":{"position":[[345,8]]},"373":{"position":[[591,7]]},"603":{"position":[[175,5]]},"757":{"position":[[135,8]]},"760":{"position":[[861,8]]},"770":{"position":[[135,8]]},"773":{"position":[[861,8]]},"797":{"position":[[135,8]]},"800":{"position":[[861,8]]},"812":{"position":[[135,8]]},"815":{"position":[[861,8]]},"828":{"position":[[135,8]]},"831":{"position":[[861,8]]},"867":{"position":[[128,8]]},"907":{"position":[[128,8]]},"923":{"position":[[128,8]]},"934":{"position":[[128,8]]},"950":{"position":[[128,8]]},"968":{"position":[[128,8]]},"1045":{"position":[[135,8]]},"1053":{"position":[[135,8]]},"1061":{"position":[[135,8]]}},"keywords":{}}],["react",{"_index":755,"title":{},"content":{"44":{"position":[[181,8],[513,6]]},"110":{"position":[[549,8]]},"196":{"position":[[459,5]]},"233":{"position":[[466,5]]}},"keywords":{}}],["reaction",{"_index":4024,"title":{},"content":{"529":{"position":[[309,9],[442,9],[517,9],[594,9]]},"723":{"position":[[316,10]]}},"keywords":{}}],["read",{"_index":186,"title":{"110":{"position":[[0,4]]},"111":{"position":[[0,4]]},"162":{"position":[[10,4]]},"202":{"position":[[0,4]]}},"content":{"4":{"position":[[700,4],[819,5]]},"6":{"position":[[463,4]]},"8":{"position":[[269,4]]},"11":{"position":[[157,4],[272,4],[1000,7]]},"17":{"position":[[6,7],[192,4],[1111,7]]},"21":{"position":[[238,4],[379,4]]},"34":{"position":[[132,4]]},"39":{"position":[[84,4]]},"41":{"position":[[122,5]]},"60":{"position":[[720,4],[868,7]]},"68":{"position":[[767,4],[862,4],[945,4],[1068,4],[1116,4],[1191,4],[1438,5],[1522,5],[1577,5],[1635,4],[1828,4]]},"77":{"position":[[164,5],[209,7],[403,4]]},"94":{"position":[[1278,4],[1382,5],[1507,4],[1806,5],[2172,5]]},"105":{"position":[[89,4],[138,4],[601,5],[663,4],[711,4],[1284,7],[1519,5]]},"106":{"position":[[126,4],[347,5],[506,5]]},"107":{"position":[[28,5]]},"109":{"position":[[36,4],[79,4],[757,4],[785,4]]},"110":{"position":[[31,4],[157,4],[499,5],[867,4],[944,4],[969,4],[1090,8],[1190,4],[1270,8],[1329,4],[1489,4]]},"120":{"position":[[949,4],[1045,5],[1358,5],[1724,5]]},"121":{"position":[[623,5],[735,4]]},"124":{"position":[[683,4],[869,4]]},"141":{"position":[[30,4]]},"142":{"position":[[1990,4],[2090,4],[2357,5],[2432,5]]},"150":{"position":[[89,4]]},"152":{"position":[[152,4]]},"154":{"position":[[569,4],[882,4],[1009,4]]},"162":{"position":[[142,5],[465,4],[580,4],[932,4],[1097,4],[1286,4],[1308,4],[1623,4],[1707,4]]},"165":{"position":[[849,4],[1191,4]]},"166":{"position":[[634,4],[688,4]]},"196":{"position":[[792,8]]},"202":{"position":[[22,4],[217,4],[327,4]]},"207":{"position":[[1091,4],[1552,4]]},"212":{"position":[[237,4]]},"215":{"position":[[140,4]]},"219":{"position":[[85,4]]},"233":{"position":[[977,8]]},"237":{"position":[[438,4],[767,4]]},"243":{"position":[[231,4]]},"245":{"position":[[140,4]]},"250":{"position":[[1173,7]]},"253":{"position":[[872,4]]},"254":{"position":[[1252,6]]},"279":{"position":[[38,6],[817,4],[887,5]]},"280":{"position":[[1021,5],[1882,4]]},"288":{"position":[[359,4]]},"295":{"position":[[1850,4]]},"296":{"position":[[4717,4],[4916,4]]},"299":{"position":[[333,6]]},"313":{"position":[[872,4]]},"314":{"position":[[973,6]]},"320":{"position":[[1270,5]]},"321":{"position":[[1317,4]]},"323":{"position":[[426,6],[609,4]]},"325":{"position":[[832,4]]},"337":{"position":[[437,4],[524,4]]},"338":{"position":[[187,4],[480,4]]},"341":{"position":[[493,4]]},"366":{"position":[[234,5]]},"397":{"position":[[965,4]]},"406":{"position":[[262,4],[381,4]]},"408":{"position":[[428,4],[474,7]]},"410":{"position":[[331,5]]},"411":{"position":[[37,5],[95,5]]},"413":{"position":[[187,6]]},"414":{"position":[[69,5],[179,5],[215,5]]},"417":{"position":[[873,6],[1064,6],[1278,5]]},"430":{"position":[[107,4]]},"438":{"position":[[1619,4],[1794,5]]},"452":{"position":[[150,4]]},"477":{"position":[[257,4]]},"502":{"position":[[105,4],[316,5]]},"543":{"position":[[295,4]]},"545":{"position":[[902,5]]},"571":{"position":[[913,4]]},"578":{"position":[[132,5],[244,5]]},"591":{"position":[[46,4]]},"595":{"position":[[1458,4]]},"598":{"position":[[218,4]]},"645":{"position":[[408,4]]},"652":{"position":[[408,4]]},"723":{"position":[[275,4],[364,4],[398,4]]},"750":{"position":[[910,4],[955,4]]},"752":{"position":[[396,4],[432,4]]},"753":{"position":[[1052,4],[1088,4]]},"757":{"position":[[548,4]]},"764":{"position":[[391,7]]},"766":{"position":[[910,4],[955,4]]},"767":{"position":[[1331,4],[1405,4]]},"770":{"position":[[548,4]]},"777":{"position":[[391,7]]},"780":{"position":[[80,4]]},"785":{"position":[[75,5],[250,4]]},"789":{"position":[[1311,4],[1356,4]]},"791":{"position":[[349,4],[385,4]]},"793":{"position":[[1023,4],[1059,4]]},"797":{"position":[[548,4]]},"804":{"position":[[389,7]]},"807":{"position":[[898,4],[943,4]]},"808":{"position":[[969,4],[1005,4]]},"812":{"position":[[548,4]]},"819":{"position":[[389,7]]},"823":{"position":[[898,4],[943,4]]},"824":{"position":[[1397,4],[1471,4]]},"828":{"position":[[548,4]]},"835":{"position":[[389,7]]},"857":{"position":[[194,4]]},"862":{"position":[[131,4]]},"864":{"position":[[41,4],[327,4],[397,4],[982,4]]},"869":{"position":[[219,7]]},"874":{"position":[[131,4]]},"876":{"position":[[41,4],[327,4],[397,4],[833,4]]},"903":{"position":[[260,5]]},"915":{"position":[[260,5]]},"922":{"position":[[39,7]]},"930":{"position":[[260,5]]},"963":{"position":[[414,5]]},"987":{"position":[[286,4]]},"989":{"position":[[10,4],[59,4],[297,4]]},"1002":{"position":[[286,4]]},"1004":{"position":[[10,4],[59,4],[380,4]]},"1007":{"position":[[123,4]]},"1008":{"position":[[601,4]]},"1031":{"position":[[468,4]]},"1032":{"position":[[1337,4]]},"1040":{"position":[[466,7]]},"1050":{"position":[[466,7]]},"1058":{"position":[[466,7]]},"1089":{"position":[[241,4]]},"1105":{"position":[[134,4]]},"1140":{"position":[[1988,4],[2012,5]]},"1149":{"position":[[616,4]]},"1151":{"position":[[774,7],[905,7]]},"1153":{"position":[[76,4]]},"1160":{"position":[[294,4]]},"1181":{"position":[[76,4]]},"1190":{"position":[[76,4]]},"1194":{"position":[[295,5]]},"1251":{"position":[[81,4]]},"1258":{"position":[[210,4]]},"1260":{"position":[[573,7],[704,7]]},"1267":{"position":[[588,5]]},"1285":{"position":[[610,5]]},"1292":{"position":[[3859,4],[3902,5]]},"1300":{"position":[[610,5]]},"1306":{"position":[[3859,4],[3902,5]]},"1316":{"position":[[1988,4],[2012,5]]},"1324":{"position":[[610,5]]},"1329":{"position":[[3859,4],[3902,5]]},"1340":{"position":[[1988,4],[2012,5]]},"1351":{"position":[[1988,4],[2012,5]]},"1362":{"position":[[126,4]]},"1379":{"position":[[2837,4],[2892,5]]},"1384":{"position":[[429,4]]},"1388":{"position":[[76,4]]},"1391":{"position":[[869,4]]},"1403":{"position":[[2837,4],[2892,5]]},"1414":{"position":[[2837,4],[2892,5]]},"1422":{"position":[[76,4]]},"1431":{"position":[[2011,4],[2035,5]]},"1437":{"position":[[530,4]]},"1439":{"position":[[1709,4]]},"1442":{"position":[[545,4],[732,7],[829,4]]},"1443":{"position":[[746,7]]},"1444":{"position":[[560,7]]},"1451":{"position":[[1022,4]]},"1461":{"position":[[2391,4]]},"1470":{"position":[[710,5],[800,5],[1241,4],[1255,4],[1285,4]]},"1471":{"position":[[473,5],[633,5]]},"1480":{"position":[[655,4],[751,5],[1064,5],[1430,5]]}},"keywords":{}}],["read.doc",{"_index":2890,"title":{},"content":{"281":{"position":[[1477,9]]}},"keywords":{}}],["read_insight",{"_index":3938,"title":{},"content":{"515":{"position":[[689,14]]}},"keywords":{}}],["read_onli",{"_index":6118,"title":{},"content":{"1292":{"position":[[3949,9]]},"1306":{"position":[[3949,9]]},"1329":{"position":[[3949,9]]}},"keywords":{}}],["read_writ",{"_index":6122,"title":{},"content":{"1292":{"position":[[3996,10]]},"1306":{"position":[[3996,10]]},"1329":{"position":[[3996,10]]}},"keywords":{}}],["readabl",{"_index":962,"title":{},"content":{"64":{"position":[[465,8]]},"1461":{"position":[[1747,8]]}},"keywords":{}}],["readable.for",{"_index":4057,"title":{},"content":{"543":{"position":[[185,12]]}},"keywords":{}}],["readdelay",{"_index":1357,"title":{},"content":{"94":{"position":[[2729,10]]},"279":{"position":[[1647,10]]}},"keywords":{}}],["reader",{"_index":3125,"title":{},"content":{"320":{"position":[[1383,7]]}},"keywords":{}}],["readi",{"_index":529,"title":{},"content":{"20":{"position":[[73,5]]},"38":{"position":[[503,5]]},"120":{"position":[[2448,5]]},"169":{"position":[[1266,5]]},"183":{"position":[[4376,5]]},"191":{"position":[[2235,5]]},"199":{"position":[[177,5]]},"206":{"position":[[783,5]]},"232":{"position":[[674,5]]},"237":{"position":[[2870,5],[3334,5]]},"266":{"position":[[416,5]]},"268":{"position":[[1985,5]]},"269":{"position":[[1447,5]]},"270":{"position":[[2063,5]]},"343":{"position":[[632,5]]},"485":{"position":[[496,5]]},"635":{"position":[[530,6]]},"657":{"position":[[681,5]]},"673":{"position":[[496,5]]},"688":{"position":[[496,5]]},"864":{"position":[[1690,5]]},"876":{"position":[[950,5]]}},"keywords":{}}],["readschema",{"_index":1915,"title":{},"content":{"162":{"position":[[754,11],[2191,11]]},"165":{"position":[[1077,11],[1315,10],[2199,10]]},"192":{"position":[[1806,11]]},"207":{"position":[[978,11],[1215,10]]},"210":{"position":[[1533,10]]},"218":{"position":[[1802,11]]},"259":{"position":[[1270,11],[2851,11]]},"291":{"position":[[1735,11]]},"302":{"position":[[1644,11]]},"306":{"position":[[235,10]]}},"keywords":{}}],["readtext",{"_index":6332,"title":{},"content":{"1379":{"position":[[2938,8]]},"1403":{"position":[[2938,8]]},"1414":{"position":[[2938,8]]}},"keywords":{}}],["real",{"_index":287,"title":{"178":{"position":[[9,4]]},"194":{"position":[[0,4]]},"210":{"position":[[0,4]]},"325":{"position":[[40,4]]},"373":{"position":[[0,4]]},"641":{"position":[[10,4]]},"785":{"position":[[13,4]]},"976":{"position":[[11,4]]},"984":{"position":[[13,4]]},"1008":{"position":[[8,4]]}},"content":{"11":{"position":[[18,4]]},"34":{"position":[[175,4]]},"52":{"position":[[93,4]]},"53":{"position":[[226,4]]},"77":{"position":[[17,4]]},"101":{"position":[[311,4]]},"119":{"position":[[22,4]]},"121":{"position":[[158,4]]},"156":{"position":[[267,4]]},"180":{"position":[[163,4],[332,4]]},"183":{"position":[[4594,4],[4656,4]]},"189":{"position":[[719,4]]},"190":{"position":[[1366,4]]},"193":{"position":[[225,4]]},"196":{"position":[[119,4],[351,4]]},"197":{"position":[[232,4]]},"198":{"position":[[601,4],[687,4],[731,4],[1118,4]]},"205":{"position":[[345,4]]},"207":{"position":[[165,4]]},"209":{"position":[[660,4]]},"210":{"position":[[2221,4],[2456,4]]},"211":{"position":[[234,4]]},"232":{"position":[[796,4]]},"233":{"position":[[119,4],[358,4]]},"236":{"position":[[3781,4]]},"239":{"position":[[768,4]]},"240":{"position":[[4327,4]]},"252":{"position":[[166,4]]},"255":{"position":[[1030,4]]},"279":{"position":[[1364,4]]},"280":{"position":[[1577,4]]},"289":{"position":[[103,4]]},"292":{"position":[[245,4]]},"294":{"position":[[164,4]]},"300":{"position":[[103,4]]},"303":{"position":[[236,4]]},"305":{"position":[[41,4]]},"312":{"position":[[170,4]]},"316":{"position":[[1355,4]]},"320":{"position":[[193,4]]},"322":{"position":[[918,4],[1620,4],[1925,4]]},"323":{"position":[[878,4]]},"325":{"position":[[8,4],[159,4],[177,4],[397,4],[583,4],[644,4],[737,4]]},"363":{"position":[[143,4],[1492,5],[1992,4]]},"364":{"position":[[198,4]]},"373":{"position":[[171,4],[445,4],[683,4],[1067,4]]},"375":{"position":[[90,4]]},"377":{"position":[[379,4],[408,4]]},"379":{"position":[[312,4],[442,4],[582,4]]},"529":{"position":[[235,5]]},"646":{"position":[[258,4]]},"976":{"position":[[5,4],[111,4],[251,4]]},"977":{"position":[[206,4],[330,4],[588,4],[674,4]]},"990":{"position":[[250,4]]},"1008":{"position":[[46,4],[130,4],[268,4],[486,4],[546,4]]},"1118":{"position":[[1212,4]]},"1140":{"position":[[2044,4]]},"1292":{"position":[[4042,4]]},"1306":{"position":[[4042,4]]},"1316":{"position":[[2044,4]]},"1329":{"position":[[4042,4]]},"1340":{"position":[[2044,4]]},"1351":{"position":[[2044,4]]},"1379":{"position":[[2991,4]]},"1403":{"position":[[2991,4]]},"1414":{"position":[[2991,4]]},"1431":{"position":[[2067,4]]}},"keywords":{}}],["realist",{"_index":2488,"title":{},"content":{"232":{"position":[[450,9]]}},"keywords":{}}],["realm",{"_index":4734,"title":{},"content":{"840":{"position":[[146,6],[2508,5]]},"851":{"position":[[72,5],[87,5]]}},"keywords":{}}],["realm)consum",{"_index":4825,"title":{},"content":{"849":{"position":[[3659,15]]}},"keywords":{}}],["realm."",{"_index":2341,"title":{},"content":{"210":{"position":[[2571,13]]}},"keywords":{}}],["realm/account",{"_index":4746,"title":{},"content":{"842":{"position":[[99,13]]}},"keywords":{}}],["realtim",{"_index":5132,"title":{},"content":{"974":{"position":[[293,8]]},"977":{"position":[[176,8]]}},"keywords":{}}],["reason",{"_index":333,"title":{},"content":{"11":{"position":[[1360,8]]},"124":{"position":[[1101,10]]},"198":{"position":[[83,7]]},"207":{"position":[[1583,7]]},"305":{"position":[[451,7]]},"306":{"position":[[381,7]]},"909":{"position":[[70,8]]},"922":{"position":[[1245,8],[2282,7]]},"925":{"position":[[70,8]]},"936":{"position":[[70,8]]},"952":{"position":[[70,8]]},"970":{"position":[[70,8]]},"1230":{"position":[[780,6]]},"1243":{"position":[[306,8]]},"1435":{"position":[[477,11]]},"1447":{"position":[[10,6]]}},"keywords":{}}],["reasonscustom",{"_index":4325,"title":{},"content":{"622":{"position":[[147,13]]}},"keywords":{}}],["reasonsschoolsscorecardssourcestagsusersus",{"_index":4333,"title":{},"content":{"622":{"position":[[308,44]]}},"keywords":{}}],["reassign",{"_index":3210,"title":{},"content":{"333":{"position":[[149,10]]}},"keywords":{}}],["reauthent",{"_index":2797,"title":{},"content":{"267":{"position":[[1916,14]]}},"keywords":{}}],["reboot",{"_index":4670,"title":{},"content":{"767":{"position":[[1265,6],[1619,6]]},"792":{"position":[[1561,6]]},"824":{"position":[[1331,6],[1683,6]]},"904":{"position":[[1183,6]]},"918":{"position":[[1476,6]]}},"keywords":{}}],["rebuild",{"_index":6126,"title":{},"content":{"1292":{"position":[[4075,7]]},"1306":{"position":[[4075,7]]},"1329":{"position":[[4075,7]]}},"keywords":{}}],["recap",{"_index":2593,"title":{},"content":{"239":{"position":[[653,5]]}},"keywords":{}}],["recaptur",{"_index":3831,"title":{},"content":{"479":{"position":[[775,9]]},"760":{"position":[[488,10]]},"773":{"position":[[488,10]]},"800":{"position":[[488,10]]},"815":{"position":[[488,10]]},"831":{"position":[[488,10]]}},"keywords":{}}],["receipt",{"_index":6511,"title":{},"content":{"1444":{"position":[[811,7]]}},"keywords":{}}],["receiv",{"_index":1842,"title":{},"content":{"154":{"position":[[374,7]]},"191":{"position":[[220,8]]},"278":{"position":[[198,9]]},"280":{"position":[[544,8],[624,8]]},"602":{"position":[[1,8],[125,8]]},"724":{"position":[[553,7]]},"922":{"position":[[2904,9]]},"1133":{"position":[[687,8]]},"1443":{"position":[[608,9],[1135,7],[1168,7]]},"1455":{"position":[[515,7]]}},"keywords":{}}],["recent",{"_index":739,"title":{},"content":{"42":{"position":[[461,6]]},"81":{"position":[[1181,6]]},"110":{"position":[[1239,6]]},"146":{"position":[[649,6],[724,6]]},"149":{"position":[[622,6],[697,6]]},"152":{"position":[[625,6],[700,6]]},"163":{"position":[[311,6]]},"180":{"position":[[479,6]]},"192":{"position":[[606,8]]},"279":{"position":[[574,6]]},"595":{"position":[[711,6]]},"747":{"position":[[1024,6]]},"1020":{"position":[[381,6],[1336,6]]},"1147":{"position":[[24,8],[465,8]]},"1174":{"position":[[24,8],[465,8]]},"1216":{"position":[[24,8],[465,8]]},"1224":{"position":[[24,8],[465,8]]},"1439":{"position":[[1136,6]]},"1440":{"position":[[1606,6]]}},"keywords":{}}],["recentchang",{"_index":2071,"title":{},"content":{"183":{"position":[[1362,12]]},"314":{"position":[[316,12],[420,12],[1334,12],[2275,12]]},"315":{"position":[[422,12],[462,12],[500,12],[1240,12]]}},"keywords":{}}],["recharg",{"_index":3372,"title":{"955":{"position":[[0,8]]}},"content":{"364":{"position":[[2920,8]]},"956":{"position":[[56,8]]},"957":{"position":[[1,8]]},"958":{"position":[[250,8]]},"959":{"position":[[220,8],[428,8]]}},"keywords":{}}],["recharge:dev",{"_index":3373,"title":{},"content":{"364":{"position":[[2975,12]]},"960":{"position":[[90,12]]}},"keywords":{}}],["recipi",{"_index":1519,"title":{},"content":{"107":{"position":[[640,10],[1052,10],[1082,10]]},"277":{"position":[[758,11]]},"278":{"position":[[306,11],[1037,9],[1083,10],[1182,11],[1234,10],[1262,11],[1321,11]]},"279":{"position":[[1332,9]]},"280":{"position":[[1871,10],[2028,12],[2106,12]]},"281":{"position":[[1575,10]]}},"keywords":{}}],["recipient]i",{"_index":1547,"title":{},"content":{"107":{"position":[[2121,13]]}},"keywords":{}}],["recogn",{"_index":4646,"title":{},"content":{"762":{"position":[[247,9]]},"775":{"position":[[247,9]]},"802":{"position":[[247,9]]},"817":{"position":[[247,9]]},"833":{"position":[[247,9]]}},"keywords":{}}],["recommend",{"_index":921,"title":{},"content":{"61":{"position":[[423,9]]},"81":{"position":[[1002,11]]},"88":{"position":[[358,11]]},"122":{"position":[[703,11],[894,9],[1354,9],[1477,11],[1602,12],[1684,11],[1803,11],[1868,11]]},"135":{"position":[[836,9]]},"161":{"position":[[305,11]]},"169":{"position":[[1085,9]]},"175":{"position":[[256,9]]},"176":{"position":[[29,11]]},"209":{"position":[[1586,11],[1660,11]]},"221":{"position":[[886,9],[1863,11]]},"225":{"position":[[330,9]]},"230":{"position":[[992,11],[1030,11]]},"236":{"position":[[91,9]]},"237":{"position":[[1195,11],[2483,9]]},"288":{"position":[[15,13]]},"299":{"position":[[15,13]]},"308":{"position":[[174,11],[194,11],[327,11],[353,11],[680,12],[727,12]]},"309":{"position":[[366,12]]},"379":{"position":[[148,9]]},"428":{"position":[[162,11],[247,11]]},"429":{"position":[[773,10],[999,10]]},"452":{"position":[[117,9]]},"477":{"position":[[298,11]]},"489":{"position":[[242,9],[857,9]]},"513":{"position":[[183,11]]},"522":{"position":[[184,11]]},"530":{"position":[[184,11]]},"534":{"position":[[1039,11]]},"551":{"position":[[182,11]]},"569":{"position":[[201,11]]},"584":{"position":[[1099,9]]},"598":{"position":[[262,11]]},"607":{"position":[[200,11]]},"614":{"position":[[184,11]]},"643":{"position":[[158,11]]},"650":{"position":[[157,11]]},"662":{"position":[[242,9],[857,9]]},"677":{"position":[[242,9],[857,9]]},"692":{"position":[[242,9],[857,9]]},"716":{"position":[[184,11]]},"731":{"position":[[155,11]]},"767":{"position":[[1161,13],[1381,14]]},"785":{"position":[[872,11],[938,9]]},"821":{"position":[[176,9]]},"824":{"position":[[1227,13],[1447,14]]},"840":{"position":[[2660,11]]},"855":{"position":[[297,11]]},"864":{"position":[[61,11]]},"870":{"position":[[798,9]]},"876":{"position":[[61,11]]},"904":{"position":[[2162,11]]},"911":{"position":[[7,11]]},"912":{"position":[[184,9]]},"917":{"position":[[1671,11]]},"918":{"position":[[2454,11]]},"927":{"position":[[7,11]]},"931":{"position":[[1824,11]]},"938":{"position":[[7,11]]},"943":{"position":[[7,11]]},"945":{"position":[[316,11]]},"954":{"position":[[7,11]]},"965":{"position":[[1671,11]]},"972":{"position":[[7,11]]},"987":{"position":[[255,9]]},"1002":{"position":[[255,9]]},"1006":{"position":[[332,11]]},"1020":{"position":[[1992,11]]},"1105":{"position":[[101,9]]},"1186":{"position":[[314,9]]},"1226":{"position":[[201,14]]},"1243":{"position":[[1237,11]]},"1274":{"position":[[265,14]]},"1277":{"position":[[635,12]]},"1388":{"position":[[337,9]]},"1442":{"position":[[910,11]]},"1461":{"position":[[1700,12]]}},"keywords":{}}],["reconcil",{"_index":927,"title":{"62":{"position":[[0,11]]}},"content":{"61":{"position":[[973,9]]},"190":{"position":[[1400,9]]},"373":{"position":[[1040,11]]},"595":{"position":[[615,9]]}},"keywords":{}}],["reconcili",{"_index":3186,"title":{},"content":{"329":{"position":[[691,14]]}},"keywords":{}}],["reconfigur",{"_index":6336,"title":{},"content":{"1379":{"position":[[3056,11]]},"1403":{"position":[[3056,11]]},"1414":{"position":[[3056,11]]}},"keywords":{}}],["reconnect",{"_index":5076,"title":{},"content":{"942":{"position":[[369,10]]}},"keywords":{}}],["reconstruct",{"_index":2253,"title":{},"content":{"208":{"position":[[1175,11]]}},"keywords":{}}],["record",{"_index":998,"title":{"1157":{"position":[[8,6]]},"1276":{"position":[[9,6]]}},"content":{"67":{"position":[[284,6]]},"207":{"position":[[697,8]]},"237":{"position":[[3443,6]]},"239":{"position":[[1502,8]]},"295":{"position":[[226,8]]},"315":{"position":[[2461,7]]},"322":{"position":[[293,6]]},"517":{"position":[[2515,8],[3555,7]]},"556":{"position":[[445,8]]},"590":{"position":[[82,7]]},"779":{"position":[[79,7]]},"789":{"position":[[959,6],[1022,7],[1126,7]]},"849":{"position":[[1972,6]]},"910":{"position":[[255,6]]},"926":{"position":[[255,6]]},"937":{"position":[[255,6]]},"953":{"position":[[255,6]]},"971":{"position":[[255,6]]},"1113":{"position":[[399,8]]},"1250":{"position":[[79,7]]},"1453":{"position":[[263,9]]}},"keywords":{}}],["recordsusag",{"_index":5403,"title":{},"content":{"1110":{"position":[[467,12]]}},"keywords":{}}],["recov",{"_index":1486,"title":{},"content":{"104":{"position":[[150,10]]},"1292":{"position":[[4117,7]]},"1306":{"position":[[4117,7]]},"1329":{"position":[[4117,7]]},"1437":{"position":[[1011,8]]},"1440":{"position":[[1369,7]]}},"keywords":{}}],["recover",{"_index":233,"title":{},"content":{"7":{"position":[[198,11]]}},"keywords":{}}],["recoveri",{"_index":212,"title":{"21":{"position":[[0,8]]},"117":{"position":[[0,8]]},"1438":{"position":[[0,8]]},"1439":{"position":[[0,8]]}},"content":{"6":{"position":[[291,8]]},"21":{"position":[[517,8],[650,8],[718,8]]},"48":{"position":[[251,8]]},"112":{"position":[[441,8],[568,8]]},"117":{"position":[[85,8],[164,8],[233,8],[305,8],[352,10],[411,8],[481,8],[554,8]]},"1434":{"position":[[574,8],[2164,8]]},"1435":{"position":[[384,8],[755,8]]},"1437":{"position":[[228,8]]},"1438":{"position":[[32,8]]},"1439":{"position":[[21,8],[613,8],[1171,8]]},"1442":{"position":[[220,8]]},"1444":{"position":[[959,8]]}},"keywords":{}}],["recovery/acmeco/roduc",{"_index":1644,"title":{},"content":{"117":{"position":[[431,22]]}},"keywords":{}}],["recreat",{"_index":2598,"title":{},"content":{"239":{"position":[[2408,10]]},"760":{"position":[[411,8]]},"761":{"position":[[385,10]]},"762":{"position":[[504,8]]},"763":{"position":[[386,10]]},"764":{"position":[[635,9]]},"773":{"position":[[411,8]]},"774":{"position":[[385,10]]},"775":{"position":[[504,8]]},"776":{"position":[[386,10]]},"777":{"position":[[635,9]]},"800":{"position":[[411,8]]},"801":{"position":[[391,10]]},"802":{"position":[[504,8]]},"803":{"position":[[392,10]]},"804":{"position":[[633,9]]},"815":{"position":[[411,8]]},"816":{"position":[[391,10]]},"817":{"position":[[504,8]]},"818":{"position":[[392,10]]},"819":{"position":[[633,9]]},"831":{"position":[[411,8]]},"832":{"position":[[391,10]]},"833":{"position":[[504,8]]},"834":{"position":[[392,10]]},"835":{"position":[[633,9]]}},"keywords":{}}],["recur",{"_index":4271,"title":{},"content":{"595":{"position":[[1359,5]]}},"keywords":{}}],["recurs",{"_index":1857,"title":{},"content":{"156":{"position":[[237,10]]},"280":{"position":[[72,9],[817,9]]},"281":{"position":[[3190,9]]},"296":{"position":[[1988,11]]},"1140":{"position":[[2077,9]]},"1292":{"position":[[4157,9]]},"1306":{"position":[[4157,9]]},"1316":{"position":[[2077,9]]},"1329":{"position":[[4157,9]]},"1340":{"position":[[2077,9]]},"1351":{"position":[[2077,9]]},"1370":{"position":[[843,9]]},"1379":{"position":[[3106,9]]},"1403":{"position":[[3106,9]]},"1414":{"position":[[3106,9]]},"1431":{"position":[[2100,9]]},"1467":{"position":[[62,11]]}},"keywords":{}}],["red",{"_index":1661,"title":{},"content":{"121":{"position":[[1032,5]]},"138":{"position":[[1413,6]]},"141":{"position":[[1412,6]]},"142":{"position":[[1414,6]]},"1151":{"position":[[117,3]]}},"keywords":{}}],["redeem",{"_index":3738,"title":{},"content":{"446":{"position":[[318,6]]}},"keywords":{}}],["redirect",{"_index":4833,"title":{},"content":{"856":{"position":[[167,8]]}},"keywords":{}}],["redistribut",{"_index":3100,"title":{},"content":{"319":{"position":[[192,14]]}},"keywords":{}}],["redo",{"_index":2274,"title":{},"content":{"209":{"position":[[1495,7]]},"869":{"position":[[15,4],[241,4],[1023,4],[1386,4]]}},"keywords":{}}],["redo_buffer_",{"_index":6133,"title":{},"content":{"1292":{"position":[[4267,13]]},"1306":{"position":[[4267,13]]},"1329":{"position":[[4267,13]]}},"keywords":{}}],["redofil",{"_index":6129,"title":{},"content":{"1292":{"position":[[4208,8]]},"1306":{"position":[[4208,8]]},"1329":{"position":[[4208,8]]}},"keywords":{}}],["redshift",{"_index":3537,"title":{"399":{"position":[[7,8]]},"1148":{"position":[[7,8]]}},"content":{"400":{"position":[[87,8]]},"401":{"position":[[23,8],[312,8]]},"402":{"position":[[102,8]]},"403":{"position":[[130,8]]},"1120":{"position":[[159,8]]},"1149":{"position":[[40,8],[142,8],[507,8]]},"1150":{"position":[[49,8]]},"1151":{"position":[[1180,8]]},"1155":{"position":[[1,8]]},"1156":{"position":[[47,8],[83,8]]}},"keywords":{}}],["redshift:dev",{"_index":3546,"title":{},"content":{"403":{"position":[[89,12]]},"1120":{"position":[[219,12]]}},"keywords":{}}],["redshift:dev"",{"_index":5745,"title":{},"content":{"1152":{"position":[[104,18]]}},"keywords":{}}],["reduc",{"_index":544,"title":{"164":{"position":[[0,6]]}},"content":{"20":{"position":[[799,6]]},"42":{"position":[[291,6]]},"67":{"position":[[1949,7]]},"71":{"position":[[593,6]]},"74":{"position":[[73,8],[238,6]]},"113":{"position":[[160,6],[769,7],[882,6]]},"115":{"position":[[100,9],[398,6],[450,7]]},"121":{"position":[[980,7],[1074,7]]},"124":{"position":[[570,7]]},"125":{"position":[[121,8],[507,6],[860,7],[1183,6]]},"129":{"position":[[130,8]]},"159":{"position":[[480,6]]},"163":{"position":[[397,6],[524,6],[661,7]]},"164":{"position":[[245,6],[417,7],[459,6],[535,7],[620,7],[1388,6],[1769,6],[1870,6],[1915,7],[1990,7],[2031,7]]},"166":{"position":[[444,7]]},"183":{"position":[[1795,7],[1882,7],[3601,7],[3688,7]]},"240":{"position":[[3657,6]]},"254":{"position":[[390,7],[442,7],[477,7],[1458,7],[1510,7],[1545,7],[1940,7],[2453,8]]},"281":{"position":[[1965,6],[2057,7],[2142,7]]},"296":{"position":[[568,7],[633,7],[1539,7],[1604,7],[1938,7],[2000,8],[2209,7],[7075,7]]},"314":{"position":[[1994,8]]},"330":{"position":[[164,6]]},"747":{"position":[[1246,6]]},"867":{"position":[[447,8]]},"1008":{"position":[[1818,7]]},"1036":{"position":[[726,6]]},"1182":{"position":[[210,6],[521,8]]},"1191":{"position":[[212,6],[525,8]]},"1262":{"position":[[212,6],[525,8]]},"1358":{"position":[[421,6]]},"1389":{"position":[[211,6],[523,8]]},"1434":{"position":[[24,6]]},"1440":{"position":[[216,7],[589,6],[715,7],[1336,6],[1387,7]]},"1459":{"position":[[785,7]]},"1463":{"position":[[192,6],[314,7],[383,7],[429,7]]},"1464":{"position":[[170,7],[344,7]]},"1465":{"position":[[660,6],[735,7],[792,6],[974,7],[1020,7],[1048,7]]},"1466":{"position":[[8,7],[129,7],[326,7]]},"1467":{"position":[[12,7],[74,8],[472,7],[678,7],[794,7],[855,7],[1709,7],[2143,7],[2224,7],[2267,7]]},"1475":{"position":[[1060,7]]},"1476":{"position":[[44,6],[180,7],[249,7],[289,7],[796,7],[1246,7],[1385,7],[1411,7],[1486,7]]},"1477":{"position":[[784,9],[950,7],[1076,7],[1309,7],[1388,6],[1502,7],[3172,7],[3298,7],[3554,6],[3668,7],[3804,7],[3830,7]]}},"keywords":{}}],["reducejson",{"_index":1934,"title":{},"content":{"164":{"position":[[36,10]]}},"keywords":{}}],["reduct",{"_index":547,"title":{"42":{"position":[[0,11]]},"132":{"position":[[8,11]]},"163":{"position":[[0,11]]},"1358":{"position":[[18,9]]},"1458":{"position":[[0,9]]},"1459":{"position":[[0,9]]}},"content":{"20":{"position":[[835,9]]},"42":{"position":[[591,9],[748,10]]},"43":{"position":[[91,9]]},"74":{"position":[[170,10]]},"113":{"position":[[95,10],[361,10],[791,9]]},"115":{"position":[[218,9],[355,9],[1333,10]]},"121":{"position":[[296,10],[1752,9]]},"124":{"position":[[811,9]]},"125":{"position":[[796,10],[1121,9],[1280,10]]},"132":{"position":[[1,9],[120,9],[359,10],[395,11]]},"163":{"position":[[255,10],[482,10],[1171,10]]},"164":{"position":[[1,9],[144,9],[845,10],[878,9]]},"183":{"position":[[2007,9]]},"219":{"position":[[579,11]]},"254":{"position":[[1880,9],[2021,9],[3758,9]]},"281":{"position":[[57,9],[1909,9],[2812,9],[3064,9],[3269,9]]},"296":{"position":[[1776,9],[2413,9],[6661,9],[7115,9]]},"330":{"position":[[150,10]]},"379":{"position":[[1281,11]]},"595":{"position":[[602,9]]},"910":{"position":[[141,9]]},"926":{"position":[[141,9]]},"937":{"position":[[141,9]]},"953":{"position":[[141,9]]},"971":{"position":[[141,9]]},"1008":{"position":[[886,9],[1632,9]]},"1279":{"position":[[202,9]]},"1358":{"position":[[487,9],[671,9],[808,10],[855,9]]},"1438":{"position":[[438,9],[481,10]]},"1440":{"position":[[534,9],[818,9],[1230,9],[1463,9]]},"1459":{"position":[[697,9],[1065,9],[1179,9],[1752,10]]},"1464":{"position":[[834,9],[959,9],[969,9]]},"1465":{"position":[[28,9],[359,9]]},"1467":{"position":[[2881,9]]},"1475":{"position":[[616,10]]},"1477":{"position":[[2827,10],[3090,10]]}},"keywords":{}}],["reductionsto",{"_index":5014,"title":{},"content":{"909":{"position":[[860,12]]},"925":{"position":[[860,12]]},"936":{"position":[[860,12]]},"952":{"position":[[860,12]]},"970":{"position":[[860,12]]}},"keywords":{}}],["redund",{"_index":6136,"title":{},"content":{"1292":{"position":[[4323,9]]},"1306":{"position":[[4323,9]]},"1329":{"position":[[4323,9]]}},"keywords":{}}],["ref",{"_index":1308,"title":{"90":{"position":[[12,5]]}},"content":{"90":{"position":[[256,4]]},"161":{"position":[[19,4],[100,4],[381,4],[905,5]]},"165":{"position":[[1098,5],[1126,5],[1456,5],[1535,5]]},"207":{"position":[[999,5],[1027,5]]},"279":{"position":[[1121,5]]},"280":{"position":[[1244,5]]},"296":{"position":[[543,5],[1514,5],[2581,5]]},"1140":{"position":[[2114,3]]},"1316":{"position":[[2114,3]]},"1340":{"position":[[2114,3]]},"1351":{"position":[[2114,3]]},"1379":{"position":[[3162,3]]},"1403":{"position":[[3162,3]]},"1414":{"position":[[3162,3]]},"1431":{"position":[[2137,3]]},"1476":{"position":[[1453,5]]}},"keywords":{}}],["refactor",{"_index":1330,"title":{},"content":{"92":{"position":[[840,11]]}},"keywords":{}}],["refer",{"_index":303,"title":{},"content":{"11":{"position":[[366,9]]},"13":{"position":[[1344,9],[1384,9]]},"44":{"position":[[62,8]]},"52":{"position":[[227,9]]},"62":{"position":[[694,10],[759,10],[815,9]]},"64":{"position":[[699,9]]},"69":{"position":[[366,10]]},"70":{"position":[[488,9],[509,10]]},"82":{"position":[[1278,10]]},"85":{"position":[[41,9]]},"88":{"position":[[382,9]]},"90":{"position":[[54,9],[287,9]]},"92":{"position":[[42,10]]},"94":{"position":[[490,11],[906,10],[2561,10]]},"97":{"position":[[150,9]]},"133":{"position":[[126,11]]},"161":{"position":[[49,9],[324,10],[506,10],[1163,10]]},"165":{"position":[[1326,10]]},"175":{"position":[[358,5]]},"179":{"position":[[424,5]]},"207":{"position":[[1226,10]]},"217":{"position":[[602,9]]},"218":{"position":[[313,10]]},"221":{"position":[[250,9]]},"225":{"position":[[650,9]]},"228":{"position":[[1345,5]]},"270":{"position":[[1368,9]]},"296":{"position":[[2566,5]]},"307":{"position":[[440,9],[698,9],[930,9]]},"429":{"position":[[1235,5]]},"472":{"position":[[366,5]]},"496":{"position":[[171,9]]},"552":{"position":[[31,6],[297,6]]},"563":{"position":[[185,5]]},"764":{"position":[[1013,5]]},"767":{"position":[[257,5]]},"777":{"position":[[1013,5]]},"784":{"position":[[131,5]]},"804":{"position":[[1011,5]]},"819":{"position":[[1011,5]]},"835":{"position":[[1011,5]]},"842":{"position":[[1968,6]]},"900":{"position":[[351,5]]},"943":{"position":[[895,5],[917,10]]},"945":{"position":[[460,5]]},"946":{"position":[[167,5]]},"1019":{"position":[[219,8]]},"1020":{"position":[[628,8]]},"1140":{"position":[[2154,10]]},"1154":{"position":[[505,5]]},"1176":{"position":[[612,8]]},"1185":{"position":[[412,8]]},"1194":{"position":[[622,8]]},"1198":{"position":[[220,5]]},"1203":{"position":[[783,8]]},"1226":{"position":[[423,8]]},"1243":{"position":[[200,8]]},"1255":{"position":[[131,5]]},"1289":{"position":[[837,5]]},"1292":{"position":[[4372,9],[4431,10]]},"1306":{"position":[[4372,9],[4431,10]]},"1316":{"position":[[2154,10]]},"1322":{"position":[[1056,5]]},"1329":{"position":[[4372,9],[4431,10]]},"1334":{"position":[[312,5]]},"1340":{"position":[[2154,10]]},"1351":{"position":[[2154,10]]},"1354":{"position":[[447,8]]},"1370":{"position":[[860,10]]},"1379":{"position":[[3205,10]]},"1382":{"position":[[666,8]]},"1403":{"position":[[3205,10]]},"1414":{"position":[[3205,10]]},"1431":{"position":[[2177,10]]},"1439":{"position":[[546,9]]},"1459":{"position":[[1504,5]]},"1461":{"position":[[200,5],[3430,9],[4345,9],[4439,9],[4948,11],[5072,10]]}},"keywords":{}}],["referenc",{"_index":1315,"title":{},"content":{"90":{"position":[[487,10]]},"92":{"position":[[613,10]]},"94":{"position":[[509,10],[924,10]]},"161":{"position":[[187,11],[1103,10]]},"183":{"position":[[3142,10]]},"208":{"position":[[1604,11]]},"221":{"position":[[315,11]]},"1140":{"position":[[2187,11]]},"1192":{"position":[[330,10]]},"1316":{"position":[[2187,11]]},"1340":{"position":[[2187,11]]},"1351":{"position":[[2187,11]]},"1379":{"position":[[3258,11]]},"1394":{"position":[[327,10]]},"1403":{"position":[[3258,11]]},"1414":{"position":[[3258,11]]},"1423":{"position":[[337,10]]},"1431":{"position":[[2210,11]]},"1461":{"position":[[5499,11]]}},"keywords":{}}],["referencefacebook",{"_index":4417,"title":{},"content":{"668":{"position":[[131,17]]}},"keywords":{}}],["referencerefer",{"_index":1052,"title":{},"content":{"70":{"position":[[638,18]]}},"keywords":{}}],["referenceto",{"_index":2919,"title":{},"content":{"286":{"position":[[374,11]]}},"keywords":{}}],["referenti",{"_index":2866,"title":{},"content":{"280":{"position":[[804,12]]}},"keywords":{}}],["refin",{"_index":924,"title":{},"content":{"61":{"position":[[832,6]]},"80":{"position":[[606,6]]},"81":{"position":[[878,6]]},"161":{"position":[[456,6]]},"270":{"position":[[648,6]]},"274":{"position":[[954,6]]},"279":{"position":[[831,6]]},"517":{"position":[[108,6]]}},"keywords":{}}],["reflect",{"_index":86,"title":{},"content":{"2":{"position":[[457,8]]},"34":{"position":[[383,9]]},"44":{"position":[[281,7]]},"55":{"position":[[197,7]]},"56":{"position":[[299,7]]},"74":{"position":[[902,8]]},"84":{"position":[[1283,9]]},"121":{"position":[[311,9],[1660,8]]},"126":{"position":[[61,8]]},"193":{"position":[[194,9]]},"230":{"position":[[1315,9]]},"259":{"position":[[1580,7],[3138,7]]},"275":{"position":[[1037,7]]},"278":{"position":[[267,7]]},"292":{"position":[[124,9]]},"303":{"position":[[115,9]]},"359":{"position":[[37,7]]},"387":{"position":[[46,7]]},"388":{"position":[[27,8]]},"427":{"position":[[206,7]]},"448":{"position":[[46,7]]},"449":{"position":[[27,8]]},"473":{"position":[[27,8]]},"518":{"position":[[27,8]]},"527":{"position":[[27,8]]},"534":{"position":[[46,7]]},"535":{"position":[[27,8]]},"556":{"position":[[46,7]]},"557":{"position":[[27,8]]},"573":{"position":[[37,7]]},"575":{"position":[[13,8]]},"584":{"position":[[37,7]]},"586":{"position":[[13,8]]},"611":{"position":[[46,7]]},"612":{"position":[[27,8]]},"619":{"position":[[37,7]]},"646":{"position":[[316,7]]},"654":{"position":[[37,7]]},"685":{"position":[[46,7]]},"686":{"position":[[18,8]]},"720":{"position":[[46,7]]},"721":{"position":[[27,8]]},"735":{"position":[[37,7]]},"840":{"position":[[1467,7]]},"849":{"position":[[2358,7]]},"859":{"position":[[46,7]]},"860":{"position":[[27,8]]},"976":{"position":[[385,9]]},"991":{"position":[[46,7]]},"1006":{"position":[[506,9]]},"1008":{"position":[[107,7]]},"1009":{"position":[[46,7]]},"1010":{"position":[[27,8]]},"1070":{"position":[[46,7]]},"1071":{"position":[[27,8]]},"1085":{"position":[[46,7]]},"1086":{"position":[[27,8]]},"1231":{"position":[[13,8]]},"1247":{"position":[[37,7]]},"1248":{"position":[[13,8]]},"1437":{"position":[[137,8]]},"1440":{"position":[[306,7]]}},"keywords":{}}],["refresh",{"_index":1945,"title":{"249":{"position":[[23,7]]}},"content":{"164":{"position":[[1249,7]]},"239":{"position":[[636,10]]},"247":{"position":[[254,7],[391,7]]},"249":{"position":[[108,7]]},"259":{"position":[[617,7],[716,7]]},"384":{"position":[[322,7]]},"387":{"position":[[706,7],[731,7]]},"446":{"position":[[115,7]]},"448":{"position":[[631,7],[645,7]]},"529":{"position":[[197,7]]},"554":{"position":[[473,7]]},"556":{"position":[[932,7]]},"724":{"position":[[483,7]]},"726":{"position":[[403,7]]},"728":{"position":[[340,7]]},"859":{"position":[[914,7]]},"885":{"position":[[363,7],[388,7]]},"895":{"position":[[600,7]]},"988":{"position":[[283,7]]},"989":{"position":[[779,7],[1298,7]]},"991":{"position":[[595,7],[613,7]]},"1003":{"position":[[283,7]]},"1004":{"position":[[862,7],[1381,7]]},"1006":{"position":[[403,9]]},"1009":{"position":[[658,7],[676,7]]},"1101":{"position":[[188,7],[207,7]]},"1118":{"position":[[466,7],[692,7]]}},"keywords":{}}],["refresh_token",{"_index":3501,"title":{},"content":{"388":{"position":[[295,14]]},"446":{"position":[[384,14]]},"449":{"position":[[291,14]]},"557":{"position":[[314,14],[329,15]]},"728":{"position":[[325,14]]},"885":{"position":[[348,14]]},"886":{"position":[[195,14]]},"989":{"position":[[939,15]]},"992":{"position":[[182,14]]},"1004":{"position":[[1022,15]]},"1010":{"position":[[265,14]]},"1101":{"position":[[173,14]]}},"keywords":{}}],["refund",{"_index":5327,"title":{},"content":{"1078":{"position":[[1795,7]]}},"keywords":{}}],["regain",{"_index":6661,"title":{},"content":{"1470":{"position":[[240,6]]}},"keywords":{}}],["regardless",{"_index":218,"title":{},"content":{"6":{"position":[[353,10]]},"8":{"position":[[158,10]]},"11":{"position":[[1796,10]]},"68":{"position":[[1444,10]]},"88":{"position":[[635,10]]},"111":{"position":[[171,10]]},"126":{"position":[[503,10]]},"263":{"position":[[972,11]]},"274":{"position":[[1805,10]]},"305":{"position":[[539,11]]},"309":{"position":[[422,10]]},"319":{"position":[[232,10]]},"325":{"position":[[357,10]]},"590":{"position":[[733,10]]},"910":{"position":[[273,10]]},"926":{"position":[[273,10]]},"937":{"position":[[273,10]]},"953":{"position":[[273,10]]},"971":{"position":[[273,10]]},"1036":{"position":[[897,10]]},"1471":{"position":[[479,10]]}},"keywords":{}}],["regex",{"_index":3593,"title":{},"content":{"417":{"position":[[1264,5]]},"438":{"position":[[1780,5]]},"502":{"position":[[302,5]]},"545":{"position":[[888,5]]},"1021":{"position":[[856,5],[989,5]]}},"keywords":{}}],["regexp",{"_index":6145,"title":{},"content":{"1292":{"position":[[4492,6]]},"1306":{"position":[[4492,6]]},"1329":{"position":[[4492,6]]},"1370":{"position":[[876,6]]},"1394":{"position":[[510,6]]}},"keywords":{}}],["region",{"_index":2122,"title":{"385":{"position":[[15,6]]}},"content":{"190":{"position":[[955,7]]},"301":{"position":[[773,6]]},"344":{"position":[[155,7]]},"385":{"position":[[79,6],[188,6],[376,6],[781,6]]},"387":{"position":[[841,7],[849,6],[858,6]]},"388":{"position":[[328,7]]},"390":{"position":[[154,6]]},"392":{"position":[[539,7],[551,6],[578,6]]},"393":{"position":[[285,7]]},"397":{"position":[[272,7],[284,6],[311,6]]},"398":{"position":[[286,7]]},"408":{"position":[[118,7],[130,6],[141,6]]},"417":{"position":[[1989,7],[2001,6],[2028,6]]},"418":{"position":[[346,7]]},"432":{"position":[[1125,6]]},"433":{"position":[[702,7]]},"745":{"position":[[140,6]]},"747":{"position":[[1052,7],[1060,6],[1071,6]]},"748":{"position":[[363,7]]},"754":{"position":[[699,6]]},"794":{"position":[[905,6]]},"809":{"position":[[905,6]]},"825":{"position":[[741,6]]},"946":{"position":[[276,6]]},"1125":{"position":[[262,7],[274,6],[281,6]]},"1126":{"position":[[247,7]]},"1144":{"position":[[333,7],[341,6],[348,6]]},"1145":{"position":[[228,7]]},"1149":{"position":[[492,6]]},"1151":{"position":[[1067,7],[1075,6],[1082,6],[1166,6]]},"1152":{"position":[[344,7]]},"1162":{"position":[[405,7],[413,6],[424,7]]},"1163":{"position":[[238,7]]},"1170":{"position":[[333,7],[341,6],[348,6]]},"1171":{"position":[[232,7]]},"1176":{"position":[[84,6]]},"1179":{"position":[[297,7],[305,6],[320,7],[1196,6]]},"1180":{"position":[[131,7]]},"1203":{"position":[[466,6]]},"1206":{"position":[[153,6],[164,6]]},"1277":{"position":[[260,6]]},"1286":{"position":[[962,6]]},"1301":{"position":[[798,6]]},"1325":{"position":[[962,6]]},"1356":{"position":[[202,6]]},"1359":{"position":[[318,6]]},"1420":{"position":[[455,7],[467,6],[474,6]]},"1421":{"position":[[238,7],[246,6]]}},"keywords":{}}],["region_base_url",{"_index":6262,"title":{},"content":{"1356":{"position":[[185,16]]},"1357":{"position":[[71,16]]}},"keywords":{}}],["regist",{"_index":564,"title":{},"content":{"21":{"position":[[216,10],[700,8]]},"110":{"position":[[1209,8]]},"136":{"position":[[126,8]]},"168":{"position":[[121,8]]},"179":{"position":[[75,8]]},"188":{"position":[[89,8]]},"239":{"position":[[117,10]]},"266":{"position":[[98,8]]},"288":{"position":[[178,8]]},"299":{"position":[[178,8]]},"319":{"position":[[1432,8],[1533,9]]},"436":{"position":[[444,8]]},"446":{"position":[[17,10],[185,8]]},"1118":{"position":[[576,8]]},"1475":{"position":[[1774,9],[1972,8]]}},"keywords":{}}],["registr",{"_index":1970,"title":{"167":{"position":[[0,12]]}},"content":{"436":{"position":[[357,13],[494,13]]},"1292":{"position":[[4533,12]]},"1306":{"position":[[4533,12]]},"1329":{"position":[[4533,12]]}},"keywords":{}}],["registration.aft",{"_index":3699,"title":{},"content":{"436":{"position":[[475,18]]}},"keywords":{}}],["registrations.click",{"_index":3697,"title":{},"content":{"436":{"position":[[333,19]]}},"keywords":{}}],["registri",{"_index":1117,"title":{},"content":{"81":{"position":[[123,9],[159,8],[396,8]]},"84":{"position":[[1251,10]]},"246":{"position":[[92,8],[207,9]]},"247":{"position":[[123,8],[327,8],[355,8]]}},"keywords":{}}],["regr_avgi",{"_index":5617,"title":{},"content":{"1140":{"position":[[2267,9]]},"1316":{"position":[[2267,9]]},"1340":{"position":[[2267,9]]},"1351":{"position":[[2267,9]]},"1379":{"position":[[3378,9]]},"1403":{"position":[[3378,9]]},"1414":{"position":[[3378,9]]},"1431":{"position":[[2290,9]]}},"keywords":{}}],["regr_avgx",{"_index":5615,"title":{},"content":{"1140":{"position":[[2229,9]]},"1316":{"position":[[2229,9]]},"1340":{"position":[[2229,9]]},"1351":{"position":[[2229,9]]},"1379":{"position":[[3318,9]]},"1403":{"position":[[3318,9]]},"1414":{"position":[[3318,9]]},"1431":{"position":[[2252,9]]}},"keywords":{}}],["regr_count",{"_index":5621,"title":{},"content":{"1140":{"position":[[2313,10]]},"1316":{"position":[[2313,10]]},"1340":{"position":[[2313,10]]},"1351":{"position":[[2313,10]]},"1379":{"position":[[3430,10]]},"1403":{"position":[[3430,10]]},"1414":{"position":[[3430,10]]},"1431":{"position":[[2336,10]]}},"keywords":{}}],["regr_intercep",{"_index":6338,"title":{},"content":{"1379":{"position":[[3488,13]]},"1403":{"position":[[3488,13]]},"1414":{"position":[[3488,13]]}},"keywords":{}}],["regr_intercept",{"_index":5623,"title":{},"content":{"1140":{"position":[[2347,14]]},"1316":{"position":[[2347,14]]},"1340":{"position":[[2347,14]]},"1351":{"position":[[2347,14]]},"1431":{"position":[[2370,14]]}},"keywords":{}}],["regr_r2",{"_index":5626,"title":{},"content":{"1140":{"position":[[2389,7]]},"1316":{"position":[[2389,7]]},"1340":{"position":[[2389,7]]},"1351":{"position":[[2389,7]]},"1379":{"position":[[3545,7]]},"1403":{"position":[[3545,7]]},"1414":{"position":[[3545,7]]},"1431":{"position":[[2412,7]]}},"keywords":{}}],["regr_slop",{"_index":5628,"title":{},"content":{"1140":{"position":[[2427,10]]},"1316":{"position":[[2427,10]]},"1340":{"position":[[2427,10]]},"1351":{"position":[[2427,10]]},"1379":{"position":[[3592,10]]},"1403":{"position":[[3592,10]]},"1414":{"position":[[3592,10]]},"1431":{"position":[[2450,10]]}},"keywords":{}}],["regr_sxi",{"_index":5632,"title":{},"content":{"1140":{"position":[[2508,8]]},"1316":{"position":[[2508,8]]},"1340":{"position":[[2508,8]]},"1351":{"position":[[2508,8]]},"1379":{"position":[[3691,8]]},"1403":{"position":[[3691,8]]},"1414":{"position":[[3691,8]]},"1431":{"position":[[2531,8]]}},"keywords":{}}],["regr_sxx",{"_index":5631,"title":{},"content":{"1140":{"position":[[2469,8]]},"1316":{"position":[[2469,8]]},"1340":{"position":[[2469,8]]},"1351":{"position":[[2469,8]]},"1379":{"position":[[3645,8]]},"1403":{"position":[[3645,8]]},"1414":{"position":[[3645,8]]},"1431":{"position":[[2492,8]]}},"keywords":{}}],["regr_syi",{"_index":5635,"title":{},"content":{"1140":{"position":[[2560,8]]},"1316":{"position":[[2560,8]]},"1340":{"position":[[2560,8]]},"1351":{"position":[[2560,8]]},"1379":{"position":[[3742,8]]},"1403":{"position":[[3742,8]]},"1414":{"position":[[3742,8]]},"1431":{"position":[[2583,8]]}},"keywords":{}}],["regular",{"_index":571,"title":{},"content":{"21":{"position":[[535,7]]},"34":{"position":[[550,7]]},"53":{"position":[[287,7]]},"77":{"position":[[115,7]]},"94":{"position":[[32,7]]},"97":{"position":[[328,7]]},"156":{"position":[[374,7]]},"1006":{"position":[[64,7]]},"1165":{"position":[[57,7]]},"1429":{"position":[[103,7]]}},"keywords":{}}],["regularli",{"_index":3156,"title":{},"content":{"323":{"position":[[157,9]]},"1006":{"position":[[379,9]]},"1039":{"position":[[175,9]]},"1049":{"position":[[101,9]]},"1057":{"position":[[104,9]]}},"keywords":{}}],["reindex",{"_index":6293,"title":{},"content":{"1370":{"position":[[890,7]]}},"keywords":{}}],["reject",{"_index":1962,"title":{},"content":{"165":{"position":[[1897,7]]}},"keywords":{}}],["rel",{"_index":858,"title":{},"content":{"56":{"position":[[2376,8]]},"69":{"position":[[351,8],[402,9]]},"87":{"position":[[101,8]]},"94":{"position":[[892,8],[2547,8],[3078,8]]},"97":{"position":[[136,8]]},"100":{"position":[[307,8]]},"110":{"position":[[425,8]]},"111":{"position":[[191,8],[405,8]]},"161":{"position":[[110,8],[1202,8]]},"279":{"position":[[842,8]]},"296":{"position":[[2193,8]]},"545":{"position":[[850,9]]},"595":{"position":[[1676,10]]},"1021":{"position":[[948,9]]},"1140":{"position":[[2609,8]]},"1240":{"position":[[63,8],[81,8]]},"1316":{"position":[[2609,8]]},"1340":{"position":[[2609,8]]},"1351":{"position":[[2609,8]]},"1379":{"position":[[3755,8]]},"1403":{"position":[[3755,8]]},"1414":{"position":[[3755,8]]},"1431":{"position":[[2632,8]]},"1452":{"position":[[3383,8]]},"1453":{"position":[[619,8]]},"1459":{"position":[[390,8]]},"1461":{"position":[[216,8],[806,10],[5255,8]]},"1467":{"position":[[1693,8]]},"1476":{"position":[[780,8]]},"1477":{"position":[[2726,8]]}},"keywords":{}}],["relat",{"_index":429,"title":{},"content":{"14":{"position":[[608,10]]},"122":{"position":[[281,6]]},"125":{"position":[[246,10]]},"157":{"position":[[163,10]]},"165":{"position":[[154,10]]},"237":{"position":[[1716,7]]},"238":{"position":[[1015,9]]},"239":{"position":[[1887,6]]},"319":{"position":[[558,8]]},"322":{"position":[[73,7]]},"738":{"position":[[249,7]]},"842":{"position":[[2917,7]]},"907":{"position":[[1913,7]]},"923":{"position":[[1913,7]]},"968":{"position":[[1913,7]]},"1178":{"position":[[406,10]]},"1313":{"position":[[1663,7]]},"1337":{"position":[[1663,7]]},"1439":{"position":[[905,7]]},"1461":{"position":[[2264,7]]}},"keywords":{}}],["relationship",{"_index":96,"title":{},"content":{"2":{"position":[[721,12]]}},"keywords":{}}],["relativepath",{"_index":5905,"title":{},"content":{"1241":{"position":[[66,13]]},"1472":{"position":[[776,13]]}},"keywords":{}}],["relay",{"_index":6151,"title":{},"content":{"1292":{"position":[[4591,5]]},"1306":{"position":[[4591,5]]},"1329":{"position":[[4591,5]]}},"keywords":{}}],["relay_log_fil",{"_index":6160,"title":{},"content":{"1292":{"position":[[4706,13]]},"1306":{"position":[[4706,13]]},"1329":{"position":[[4706,13]]}},"keywords":{}}],["relay_log_po",{"_index":6162,"title":{},"content":{"1292":{"position":[[4754,13]]},"1306":{"position":[[4754,13]]},"1329":{"position":[[4754,13]]}},"keywords":{}}],["relay_thread",{"_index":6164,"title":{},"content":{"1292":{"position":[[4798,12]]},"1306":{"position":[[4798,12]]},"1329":{"position":[[4798,12]]}},"keywords":{}}],["relaylog",{"_index":6156,"title":{},"content":{"1292":{"position":[[4645,8]]},"1306":{"position":[[4645,8]]},"1329":{"position":[[4645,8]]}},"keywords":{}}],["releas",{"_index":1032,"title":{},"content":{"68":{"position":[[1348,8]]},"379":{"position":[[278,8]]},"529":{"position":[[637,8]]},"1140":{"position":[[2642,7]]},"1292":{"position":[[4846,7]]},"1306":{"position":[[4846,7]]},"1316":{"position":[[2642,7]]},"1329":{"position":[[4846,7]]},"1340":{"position":[[2642,7]]},"1351":{"position":[[2642,7]]},"1370":{"position":[[907,7]]},"1379":{"position":[[3816,7]]},"1403":{"position":[[3816,7]]},"1414":{"position":[[3816,7]]},"1431":{"position":[[2665,7]]}},"keywords":{}}],["relev",{"_index":1654,"title":{},"content":{"121":{"position":[[689,8]]},"174":{"position":[[221,8]]},"274":{"position":[[452,8]]},"864":{"position":[[351,8]]},"876":{"position":[[351,8]]},"922":{"position":[[707,8]]},"1391":{"position":[[1060,8]]}},"keywords":{}}],["reli",{"_index":1549,"title":{},"content":{"107":{"position":[[2240,4]]},"157":{"position":[[380,4]]},"216":{"position":[[381,4]]},"289":{"position":[[531,4]]},"300":{"position":[[478,4]]},"578":{"position":[[372,6]]},"909":{"position":[[330,4]]},"925":{"position":[[330,4]]},"936":{"position":[[330,4]]},"952":{"position":[[330,4]]},"964":{"position":[[246,6]]},"970":{"position":[[330,4]]}},"keywords":{}}],["reliabl",{"_index":1005,"title":{},"content":{"67":{"position":[[865,8]]},"70":{"position":[[179,11]]},"209":{"position":[[1557,8]]},"595":{"position":[[467,8]]},"785":{"position":[[845,8],[973,12]]}},"keywords":{}}],["reload",{"_index":6169,"title":{},"content":{"1292":{"position":[[4899,6]]},"1306":{"position":[[4899,6]]},"1329":{"position":[[4899,6]]}},"keywords":{}}],["remain",{"_index":414,"title":{},"content":{"13":{"position":[[1657,6],[1920,6]]},"208":{"position":[[1866,6]]},"307":{"position":[[2690,6]]},"309":{"position":[[572,7]]},"922":{"position":[[3031,6]]},"1077":{"position":[[666,7]]},"1146":{"position":[[108,6]]},"1173":{"position":[[108,6]]},"1215":{"position":[[108,6]]},"1223":{"position":[[108,6]]},"1443":{"position":[[786,9]]},"1456":{"position":[[271,9]]},"1464":{"position":[[881,7]]},"1467":{"position":[[2928,7]]}},"keywords":{}}],["remaind",{"_index":6617,"title":{},"content":{"1461":{"position":[[3072,9]]}},"keywords":{}}],["remot",{"_index":870,"title":{"1437":{"position":[[0,6]]}},"content":{"58":{"position":[[142,6]]},"83":{"position":[[1139,6]]},"87":{"position":[[682,6]]},"169":{"position":[[1144,6]]},"225":{"position":[[118,6]]},"330":{"position":[[355,6]]},"370":{"position":[[1747,6],[1955,6]]},"709":{"position":[[304,6]]},"1138":{"position":[[1038,6],[1245,6]]},"1272":{"position":[[119,6]]},"1292":{"position":[[4944,6]]},"1306":{"position":[[4944,6]]},"1329":{"position":[[4944,6]]},"1436":{"position":[[139,6]]},"1437":{"position":[[22,6],[1179,6]]}},"keywords":{}}],["remov",{"_index":435,"title":{"310":{"position":[[12,8]]}},"content":{"14":{"position":[[765,6]]},"68":{"position":[[1329,7]]},"82":{"position":[[996,7],[5002,6]]},"84":{"position":[[398,7]]},"105":{"position":[[897,7]]},"126":{"position":[[609,7],[642,7]]},"138":{"position":[[404,6]]},"141":{"position":[[714,6]]},"142":{"position":[[517,6]]},"197":{"position":[[1064,7],[1368,8],[1521,8]]},"217":{"position":[[1418,6],[1688,7]]},"218":{"position":[[1032,6],[1147,6],[1221,6]]},"230":{"position":[[1164,6]]},"242":{"position":[[116,6]]},"259":{"position":[[565,6],[2259,6]]},"290":{"position":[[1372,6]]},"295":{"position":[[217,8]]},"306":{"position":[[344,7]]},"310":{"position":[[60,8],[340,7]]},"760":{"position":[[327,8]]},"761":{"position":[[526,6]]},"763":{"position":[[314,8]]},"773":{"position":[[327,8]]},"774":{"position":[[526,6]]},"776":{"position":[[314,8]]},"800":{"position":[[327,8]]},"801":{"position":[[532,6]]},"803":{"position":[[320,8]]},"815":{"position":[[327,8]]},"816":{"position":[[532,6]]},"818":{"position":[[320,8]]},"831":{"position":[[327,8]]},"832":{"position":[[532,6]]},"834":{"position":[[320,8]]},"945":{"position":[[509,6],[898,7]]},"985":{"position":[[649,6]]},"1000":{"position":[[963,6]]},"1292":{"position":[[4994,6]]},"1306":{"position":[[4994,6]]},"1329":{"position":[[4994,6]]},"1359":{"position":[[452,7]]},"1448":{"position":[[82,8]]},"1477":{"position":[[141,8],[206,8],[415,8],[486,8],[552,8],[3054,8]]}},"keywords":{}}],["removefromwindow",{"_index":2858,"title":{},"content":{"279":{"position":[[1575,16]]}},"keywords":{}}],["renam",{"_index":1497,"title":{},"content":{"105":{"position":[[1116,8]]},"192":{"position":[[1896,7]]},"840":{"position":[[1539,6]]},"849":{"position":[[2430,6]]},"1292":{"position":[[5040,6]]},"1306":{"position":[[5040,6]]},"1329":{"position":[[5040,6]]},"1370":{"position":[[918,6]]}},"keywords":{}}],["renew",{"_index":3741,"title":{},"content":{"448":{"position":[[662,5]]}},"keywords":{}}],["renter",{"_index":2113,"title":{},"content":{"189":{"position":[[430,7]]}},"keywords":{}}],["reorder",{"_index":5052,"title":{},"content":{"922":{"position":[[86,10],[340,8]]}},"keywords":{}}],["reorgan",{"_index":1331,"title":{},"content":{"92":{"position":[[856,15]]},"1292":{"position":[[5080,10]]},"1306":{"position":[[5080,10]]},"1329":{"position":[[5080,10]]}},"keywords":{}}],["repair",{"_index":6179,"title":{},"content":{"1292":{"position":[[5129,6]]},"1306":{"position":[[5129,6]]},"1329":{"position":[[5129,6]]}},"keywords":{}}],["repeat",{"_index":522,"title":{},"content":{"19":{"position":[[415,8]]},"109":{"position":[[523,11]]},"133":{"position":[[53,6]]},"165":{"position":[[1650,6]]},"169":{"position":[[1707,6]]},"228":{"position":[[1418,6]]},"230":{"position":[[1192,6]]},"275":{"position":[[1125,6]]},"295":{"position":[[1201,6]]},"340":{"position":[[567,6]]},"1047":{"position":[[928,6]]},"1055":{"position":[[928,6]]},"1063":{"position":[[928,6]]},"1292":{"position":[[5169,6],[5204,10]]},"1306":{"position":[[5169,6],[5204,10]]},"1329":{"position":[[5169,6],[5204,10]]},"1434":{"position":[[491,7]]},"1443":{"position":[[157,8]]}},"keywords":{}}],["repeatedli",{"_index":782,"title":{},"content":{"49":{"position":[[443,10]]},"115":{"position":[[1370,10]]},"330":{"position":[[578,10]]},"333":{"position":[[483,10]]},"922":{"position":[[1216,10]]}},"keywords":{}}],["repetit",{"_index":393,"title":{},"content":{"13":{"position":[[646,11]]}},"keywords":{}}],["replac",{"_index":1995,"title":{},"content":{"172":{"position":[[198,7]]},"183":{"position":[[1507,7],[1695,7],[2992,7]]},"197":{"position":[[1004,13]]},"325":{"position":[[473,7]]},"429":{"position":[[1147,8]]},"786":{"position":[[212,8]]},"789":{"position":[[974,9]]},"1279":{"position":[[405,9]]},"1292":{"position":[[5249,7]]},"1306":{"position":[[5249,7]]},"1329":{"position":[[5249,7]]},"1370":{"position":[[930,7]]},"1383":{"position":[[95,9]]}},"keywords":{}}],["replay",{"_index":2198,"title":{},"content":{"198":{"position":[[462,7]]},"207":{"position":[[525,6]]},"239":{"position":[[966,6]]},"1438":{"position":[[377,9]]}},"keywords":{}}],["repli",{"_index":6502,"title":{},"content":{"1442":{"position":[[1622,5]]}},"keywords":{}}],["replic",{"_index":568,"title":{"942":{"position":[[18,11]]},"943":{"position":[[30,12]]}},"content":{"21":{"position":[[461,9]]},"100":{"position":[[1268,11]]},"112":{"position":[[679,10]]},"196":{"position":[[372,12]]},"203":{"position":[[453,11]]},"209":{"position":[[1097,11]]},"210":{"position":[[142,10]]},"232":{"position":[[806,11]]},"233":{"position":[[379,12]]},"236":{"position":[[36,11],[2905,12]]},"237":{"position":[[15,11],[263,12],[325,12],[374,11],[1178,10],[1731,11],[2014,11],[2416,11],[2613,11]]},"238":{"position":[[706,12]]},"241":{"position":[[181,12]]},"366":{"position":[[98,11],[121,11]]},"367":{"position":[[113,11],[377,11]]},"370":{"position":[[980,9],[1221,11],[1241,9]]},"424":{"position":[[185,11],[300,11]]},"448":{"position":[[864,11],[937,10]]},"454":{"position":[[490,11]]},"460":{"position":[[304,11]]},"509":{"position":[[431,11],[490,11]]},"517":{"position":[[1468,9],[1600,11],[2020,9],[2761,11],[3905,11]]},"534":{"position":[[1438,9],[1607,11]]},"556":{"position":[[1772,11],[2147,11]]},"573":{"position":[[797,11]]},"574":{"position":[[83,9]]},"585":{"position":[[83,9]]},"611":{"position":[[869,11],[1137,11]]},"631":{"position":[[304,11],[443,11]]},"654":{"position":[[544,11]]},"670":{"position":[[485,11],[600,11]]},"685":{"position":[[424,11]]},"700":{"position":[[252,11]]},"706":{"position":[[252,11]]},"720":{"position":[[756,11]]},"741":{"position":[[367,11]]},"747":{"position":[[762,11],[820,9],[978,11]]},"750":{"position":[[779,11],[802,11]]},"752":{"position":[[357,11],[692,11],[712,11]]},"753":{"position":[[1013,11],[1348,11],[1368,11]]},"757":{"position":[[1210,11]]},"766":{"position":[[779,11],[802,11]]},"767":{"position":[[837,11],[2025,11],[2045,11]]},"770":{"position":[[1210,11]]},"789":{"position":[[1180,11],[1203,11]]},"791":{"position":[[310,11],[697,11],[717,11]]},"792":{"position":[[1116,11],[2017,11],[2037,11]]},"793":{"position":[[984,11],[1371,11],[1391,11]]},"797":{"position":[[1210,11]]},"807":{"position":[[767,11],[790,11]]},"808":{"position":[[930,11],[1317,11],[1337,11]]},"812":{"position":[[1210,11]]},"821":{"position":[[528,12]]},"823":{"position":[[767,11],[790,11]]},"824":{"position":[[908,11],[2139,11],[2159,11]]},"828":{"position":[[1210,11]]},"859":{"position":[[609,11]]},"862":{"position":[[196,11]]},"867":{"position":[[1918,11]]},"874":{"position":[[196,11]]},"885":{"position":[[553,11]]},"891":{"position":[[141,11],[266,11]]},"903":{"position":[[70,11],[124,11],[147,11]]},"904":{"position":[[883,11]]},"907":{"position":[[763,9],[1004,11],[1024,9]]},"912":{"position":[[544,12]]},"915":{"position":[[70,11],[124,11],[147,11]]},"917":{"position":[[361,12]]},"918":{"position":[[1092,11]]},"919":{"position":[[672,11],[713,12],[924,12]]},"922":{"position":[[18,11],[215,11],[496,11],[911,11],[1029,11],[1422,11],[1598,11],[1713,11],[1773,11],[1858,11],[2032,11],[2451,11],[2510,11],[2589,11],[2932,11],[3011,11]]},"923":{"position":[[763,9],[1004,11],[1024,9]]},"930":{"position":[[70,11],[124,11],[147,11]]},"931":{"position":[[855,11],[1138,11]]},"934":{"position":[[763,9],[1004,11],[1024,9]]},"942":{"position":[[18,11],[253,11],[399,11],[551,12],[593,11]]},"943":{"position":[[65,11],[106,11],[314,11]]},"944":{"position":[[9,11],[70,11]]},"945":{"position":[[697,11],[915,11],[982,11],[1047,11],[1083,11]]},"947":{"position":[[1026,11]]},"950":{"position":[[763,9],[1004,11],[1024,9]]},"959":{"position":[[201,9],[308,11]]},"963":{"position":[[224,11],[278,11],[301,11]]},"964":{"position":[[205,11]]},"965":{"position":[[361,12]]},"968":{"position":[[763,9],[1004,11],[1024,9]]},"982":{"position":[[203,9],[310,11]]},"1009":{"position":[[1623,12]]},"1015":{"position":[[366,11]]},"1028":{"position":[[175,11],[313,11]]},"1070":{"position":[[751,11],[860,9],[945,11]]},"1076":{"position":[[598,11],[719,11]]},"1077":{"position":[[62,11]]},"1085":{"position":[[748,9],[878,11],[1161,11],[1260,11],[1319,11]]},"1094":{"position":[[347,9]]},"1107":{"position":[[121,9],[240,11]]},"1113":{"position":[[189,11],[304,11]]},"1133":{"position":[[815,9],[934,11]]},"1292":{"position":[[5706,11]]},"1306":{"position":[[5706,11]]},"1329":{"position":[[5706,11]]},"1379":{"position":[[3879,11]]},"1403":{"position":[[3879,11]]},"1414":{"position":[[3879,11]]}},"keywords":{}}],["replica",{"_index":2216,"title":{},"content":{"203":{"position":[[48,7],[107,7],[139,7],[401,9],[431,7]]},"209":{"position":[[1336,7]]},"767":{"position":[[1336,7],[1630,7]]},"780":{"position":[[431,7]]},"824":{"position":[[1402,7],[1694,7]]},"910":{"position":[[164,7]]},"926":{"position":[[164,7]]},"937":{"position":[[164,7]]},"942":{"position":[[104,7]]},"953":{"position":[[164,7]]},"971":{"position":[[164,7]]},"1196":{"position":[[738,8],[761,8]]},"1292":{"position":[[5286,7],[5328,8]]},"1306":{"position":[[5286,7],[5328,8]]},"1329":{"position":[[5286,7],[5328,8]]}},"keywords":{}}],["replicaand",{"_index":4672,"title":{},"content":{"767":{"position":[[1454,10]]},"824":{"position":[[1518,10]]}},"keywords":{}}],["replicaof",{"_index":4671,"title":{},"content":{"767":{"position":[[1410,9]]},"824":{"position":[[1476,9]]}},"keywords":{}}],["replicas"",{"_index":5851,"title":{},"content":{"1201":{"position":[[537,14]]}},"keywords":{}}],["replicaset",{"_index":4680,"title":{},"content":{"780":{"position":[[381,10]]}},"keywords":{}}],["replicate_ign",{"_index":6189,"title":{},"content":{"1292":{"position":[[5473,13],[5523,13]]},"1306":{"position":[[5473,13],[5523,13]]},"1329":{"position":[[5473,13],[5523,13]]}},"keywords":{}}],["replicate_rew",{"_index":6194,"title":{},"content":{"1292":{"position":[[5579,13]]},"1306":{"position":[[5579,13]]},"1329":{"position":[[5579,13]]}},"keywords":{}}],["replicate_wil",{"_index":6196,"title":{},"content":{"1292":{"position":[[5619,13],[5667,13]]},"1306":{"position":[[5619,13],[5667,13]]},"1329":{"position":[[5619,13],[5667,13]]}},"keywords":{}}],["replicated.next",{"_index":4951,"title":{},"content":{"895":{"position":[[259,16]]}},"keywords":{}}],["replicatedo",{"_index":6185,"title":{},"content":{"1292":{"position":[[5372,11],[5414,11]]},"1306":{"position":[[5372,11],[5414,11]]},"1329":{"position":[[5372,11],[5414,11]]}},"keywords":{}}],["replies)us",{"_index":5181,"title":{},"content":{"1012":{"position":[[189,12]]}},"keywords":{}}],["repo",{"_index":656,"title":{},"content":{"31":{"position":[[314,5]]},"522":{"position":[[499,5]]},"530":{"position":[[499,5]]},"534":{"position":[[1332,5]]}},"keywords":{}}],["report",{"_index":274,"title":{"574":{"position":[[7,8]]},"585":{"position":[[7,8]]},"606":{"position":[[7,8]]},"1087":{"position":[[0,6]]}},"content":{"8":{"position":[[716,8]]},"72":{"position":[[339,6]]},"128":{"position":[[144,9]]},"164":{"position":[[996,9]]},"366":{"position":[[588,9]]},"381":{"position":[[148,6],[184,6],[302,6],[525,6]]},"387":{"position":[[948,6],[1040,6],[1084,6],[1138,8],[1222,8]]},"443":{"position":[[74,8],[164,8],[242,8],[354,8],[435,8]]},"448":{"position":[[876,6],[951,8]]},"517":{"position":[[2359,8]]},"556":{"position":[[1141,7]]},"568":{"position":[[338,8]]},"571":{"position":[[142,9],[388,9]]},"573":{"position":[[606,7],[660,7]]},"574":{"position":[[68,8],[121,7],[197,7],[526,6]]},"577":{"position":[[22,9],[87,8]]},"578":{"position":[[26,7],[312,7],[428,9]]},"580":{"position":[[182,6],[278,8]]},"584":{"position":[[528,7],[582,7],[654,8]]},"585":{"position":[[68,8],[121,7],[187,7]]},"588":{"position":[[82,8]]},"606":{"position":[[63,7],[316,6],[383,7]]},"611":{"position":[[664,7],[718,7]]},"723":{"position":[[403,9]]},"838":{"position":[[98,8]]},"840":{"position":[[1164,7]]},"892":{"position":[[323,6]]},"903":{"position":[[614,9]]},"915":{"position":[[614,9]]},"930":{"position":[[614,9]]},"963":{"position":[[768,9]]},"979":{"position":[[233,7]]},"1080":{"position":[[129,7],[152,7],[174,7],[207,7],[236,7],[264,7],[293,7],[322,7],[350,7],[381,7],[410,7],[438,7],[480,7],[518,7],[555,7],[592,7],[629,7],[660,7],[692,7],[729,7],[778,7]]},"1085":{"position":[[1003,6],[1091,8]]},"1087":{"position":[[51,8],[74,7],[270,6]]}},"keywords":{}}],["report_generation_max_retri",{"_index":3490,"title":{},"content":{"387":{"position":[[917,30]]},"388":{"position":[[339,30]]}},"keywords":{}}],["report_granular",{"_index":5342,"title":{},"content":{"1085":{"position":[[983,19]]},"1086":{"position":[[313,19]]}},"keywords":{}}],["report_wait_timeout",{"_index":3491,"title":{},"content":{"387":{"position":[[1063,20]]},"388":{"position":[[372,20]]}},"keywords":{}}],["reportbi",{"_index":4356,"title":{},"content":{"628":{"position":[[434,8]]}},"keywords":{}}],["reportcampaignscampaign",{"_index":3736,"title":{},"content":{"443":{"position":[[318,23]]}},"keywords":{}}],["reports_start_d",{"_index":3743,"title":{},"content":{"448":{"position":[[797,19]]},"449":{"position":[[351,19]]}},"keywords":{}}],["reportsproject",{"_index":4354,"title":{},"content":{"628":{"position":[[412,14]]}},"keywords":{}}],["reportsuninvo",{"_index":4352,"title":{},"content":{"628":{"position":[[383,17]]}},"keywords":{}}],["reporttim",{"_index":4353,"title":{},"content":{"628":{"position":[[401,10]]}},"keywords":{}}],["repositori",{"_index":1294,"title":{},"content":{"87":{"position":[[731,11]]},"115":{"position":[[1622,10]]},"175":{"position":[[378,10]]},"523":{"position":[[42,12]]},"529":{"position":[[85,12],[646,12]]},"531":{"position":[[42,12]]},"532":{"position":[[42,12]]},"534":{"position":[[297,10],[406,11],[1024,11],[1105,11],[1124,12],[1229,11],[1264,12],[1351,13]]},"535":{"position":[[285,11]]}},"keywords":{}}],["repres",{"_index":527,"title":{},"content":{"19":{"position":[[572,15]]},"34":{"position":[[13,9]]},"41":{"position":[[372,12]]},"49":{"position":[[254,10]]},"60":{"position":[[48,12]]},"67":{"position":[[1049,10]]},"74":{"position":[[517,11]]},"154":{"position":[[792,12]]},"156":{"position":[[488,9]]},"163":{"position":[[191,14]]},"190":{"position":[[149,12],[623,9]]},"192":{"position":[[99,12]]},"207":{"position":[[88,11]]},"210":{"position":[[537,12]]},"239":{"position":[[589,11],[668,10]]},"240":{"position":[[3221,10]]},"245":{"position":[[13,9]]},"296":{"position":[[341,10],[1312,10],[4539,10]]},"321":{"position":[[534,9],[1833,9]]},"326":{"position":[[689,10]]},"366":{"position":[[144,10],[527,10]]},"385":{"position":[[270,9]]},"550":{"position":[[73,9]]},"655":{"position":[[343,12]]},"847":{"position":[[172,11]]},"903":{"position":[[170,10],[553,10]]},"915":{"position":[[170,10],[553,10]]},"922":{"position":[[513,10],[818,10]]},"930":{"position":[[170,10],[553,10]]},"963":{"position":[[324,10],[707,10]]},"1144":{"position":[[1090,9]]},"1146":{"position":[[527,10]]},"1173":{"position":[[539,10]]},"1213":{"position":[[767,9]]},"1215":{"position":[[527,10]]},"1223":{"position":[[539,10]]},"1440":{"position":[[798,10]]},"1459":{"position":[[1674,9]]},"1470":{"position":[[994,9],[1126,9],[1260,9]]},"1475":{"position":[[571,11],[1341,12]]},"1477":{"position":[[1037,11],[3259,11]]}},"keywords":{}}],["represent",{"_index":1650,"title":{},"content":{"121":{"position":[[74,14]]},"122":{"position":[[1010,16]]},"125":{"position":[[383,14]]},"158":{"position":[[480,15]]},"239":{"position":[[1187,15]]},"977":{"position":[[465,14]]},"1036":{"position":[[980,14]]},"1196":{"position":[[637,14]]}},"keywords":{}}],["representedy",{"_index":4813,"title":{},"content":{"847":{"position":[[311,14]]}},"keywords":{}}],["reproduc",{"_index":2541,"title":{},"content":{"236":{"position":[[1612,12]]}},"keywords":{}}],["repsons",{"_index":4814,"title":{},"content":{"847":{"position":[[330,11]]}},"keywords":{}}],["request",{"_index":1155,"title":{},"content":{"82":{"position":[[867,7]]},"154":{"position":[[1972,7]]},"331":{"position":[[580,8]]},"377":{"position":[[719,9],[951,9]]},"397":{"position":[[785,8]]},"430":{"position":[[277,8]]},"488":{"position":[[439,8],[901,7],[1003,7]]},"489":{"position":[[43,7],[527,7],[685,7]]},"491":{"position":[[151,9],[355,8]]},"492":{"position":[[159,8],[248,7]]},"509":{"position":[[181,8],[215,8],[299,8]]},"515":{"position":[[730,7],[781,7],[934,7]]},"517":{"position":[[3225,8],[3277,8],[3472,8],[3509,8]]},"529":{"position":[[375,7],[578,7],[609,7],[628,8],[926,7],[946,7]]},"531":{"position":[[137,7],[339,7],[419,8]]},"540":{"position":[[103,7]]},"556":{"position":[[1621,9]]},"560":{"position":[[135,9],[188,8]]},"584":{"position":[[961,7],[1049,10]]},"595":{"position":[[957,7]]},"631":{"position":[[128,8]]},"635":{"position":[[152,9],[187,7],[262,7]]},"637":{"position":[[420,10]]},"640":{"position":[[91,8]]},"657":{"position":[[521,8]]},"659":{"position":[[596,8],[1058,7],[1160,7]]},"662":{"position":[[43,7],[527,7],[685,7]]},"664":{"position":[[172,9],[376,8],[611,8]]},"665":{"position":[[159,8],[248,7]]},"675":{"position":[[374,7]]},"676":{"position":[[439,8],[901,7],[1003,7]]},"677":{"position":[[43,7],[527,7],[685,7]]},"679":{"position":[[151,9],[355,8]]},"680":{"position":[[159,8],[248,7]]},"685":{"position":[[283,9]]},"691":{"position":[[439,8],[901,7],[1003,7]]},"692":{"position":[[43,7],[527,7],[685,7]]},"694":{"position":[[151,9],[355,8]]},"695":{"position":[[159,8],[248,7]]},"987":{"position":[[203,7]]},"989":{"position":[[918,8]]},"1002":{"position":[[203,7]]},"1004":{"position":[[1001,8]]},"1236":{"position":[[109,8]]},"1239":{"position":[[263,8]]},"1277":{"position":[[859,9],[964,9]]},"1443":{"position":[[350,9]]},"1471":{"position":[[1047,9]]}},"keywords":{}}],["requests."",{"_index":4981,"title":{},"content":{"898":{"position":[[1656,16]]}},"keywords":{}}],["requests_per_minut",{"_index":3922,"title":{},"content":{"509":{"position":[[160,20]]}},"keywords":{}}],["requestsusersgroupsgroup",{"_index":4005,"title":{},"content":{"521":{"position":[[93,24]]}},"keywords":{}}],["requir",{"_index":18,"title":{"1123":{"position":[[11,13]]},"1272":{"position":[[14,11]]}},"content":{"1":{"position":[[237,9]]},"2":{"position":[[104,9]]},"7":{"position":[[329,7]]},"14":{"position":[[195,7],[537,9]]},"19":{"position":[[83,9],[243,7],[445,8]]},"24":{"position":[[140,9]]},"56":{"position":[[988,9],[1221,8],[1467,9],[1610,9],[1710,8],[1893,9]]},"64":{"position":[[147,8],[566,9],[1030,8]]},"68":{"position":[[1383,9]]},"69":{"position":[[379,9],[717,9]]},"70":{"position":[[723,9]]},"72":{"position":[[652,8]]},"80":{"position":[[339,8]]},"81":{"position":[[1344,9],[2163,8]]},"82":{"position":[[23,7],[749,8],[839,8],[3091,8]]},"94":{"position":[[1309,9],[1390,9]]},"97":{"position":[[431,9]]},"107":{"position":[[2578,7]]},"112":{"position":[[24,7]]},"117":{"position":[[516,9]]},"120":{"position":[[328,9],[580,8],[894,9],[973,9],[1053,9],[1853,8],[2040,9]]},"121":{"position":[[955,9]]},"122":{"position":[[133,7],[825,7],[1578,9]]},"154":{"position":[[2037,8]]},"160":{"position":[[650,9],[759,9],[876,8]]},"165":{"position":[[759,12],[1059,9],[1265,8]]},"166":{"position":[[147,8],[365,9]]},"169":{"position":[[138,9]]},"183":{"position":[[1222,9],[1906,9],[3712,9]]},"190":{"position":[[285,8],[329,8],[819,8]]},"192":{"position":[[256,8],[457,8]]},"196":{"position":[[715,11]]},"198":{"position":[[482,7]]},"203":{"position":[[97,7]]},"204":{"position":[[289,11]]},"207":{"position":[[960,9],[1165,8],[1462,12]]},"208":{"position":[[932,7]]},"211":{"position":[[475,8]]},"215":{"position":[[103,9]]},"217":{"position":[[456,8],[920,8]]},"218":{"position":[[218,8],[467,8]]},"221":{"position":[[851,8]]},"225":{"position":[[295,8]]},"233":{"position":[[900,11]]},"236":{"position":[[2799,12],[3768,8]]},"237":{"position":[[904,12],[1269,11]]},"238":{"position":[[600,8]]},"239":{"position":[[2556,7]]},"254":{"position":[[64,8],[501,9],[1569,9]]},"268":{"position":[[854,9],[1274,8]]},"269":{"position":[[479,9],[845,8]]},"270":{"position":[[1446,8]]},"277":{"position":[[139,7]]},"279":{"position":[[434,7],[1149,9]]},"280":{"position":[[868,7],[940,7],[1272,9]]},"281":{"position":[[510,7],[2031,9],[3036,7],[3106,7]]},"286":{"position":[[405,8]]},"290":{"position":[[420,8],[733,8]]},"291":{"position":[[206,8],[395,8]]},"296":{"position":[[64,8],[609,9],[1580,9],[6585,8]]},"301":{"position":[[366,8],[666,8],[739,8]]},"302":{"position":[[206,8],[395,8]]},"307":{"position":[[1424,9],[2292,9]]},"309":{"position":[[1025,8],[1174,7],[2257,9],[2864,9]]},"310":{"position":[[129,7]]},"314":{"position":[[64,8],[1200,9],[2972,8]]},"329":{"position":[[203,8],[1139,7]]},"331":{"position":[[691,12]]},"332":{"position":[[213,8]]},"333":{"position":[[334,7]]},"347":{"position":[[130,8]]},"351":{"position":[[107,8],[172,8],[288,8],[449,8],[504,8]]},"359":{"position":[[161,8],[265,8],[427,8],[482,8]]},"370":{"position":[[38,8],[361,8],[435,9],[522,9],[625,8],[2107,8],[2150,8],[2232,8]]},"373":{"position":[[319,8]]},"377":{"position":[[1203,8],[1285,8],[1401,8],[1576,8],[1653,8],[1798,8]]},"387":{"position":[[181,9],[260,8],[553,8],[670,8],[753,8],[1450,8],[1505,8]]},"392":{"position":[[170,9],[336,9],[629,9],[756,8]]},"397":{"position":[[151,8],[263,8],[364,8],[926,8]]},"402":{"position":[[127,8],[266,8],[335,8],[412,8],[742,8],[888,8]]},"406":{"position":[[295,8]]},"408":{"position":[[109,8],[172,8],[495,8],[659,8],[714,8]]},"417":{"position":[[310,8],[802,8],[993,8],[1122,8],[2165,9],[2348,8]]},"424":{"position":[[103,8],[164,8],[319,8],[482,8],[537,8]]},"429":{"position":[[184,7]]},"432":{"position":[[285,8],[1271,8],[1352,8]]},"436":{"position":[[384,8],[1130,7]]},"438":{"position":[[310,8],[753,9],[873,8],[1020,8],[1171,8],[1337,8],[1485,8],[1637,9],[1980,8]]},"448":{"position":[[181,9],[272,8],[467,8],[595,8],[701,8],[788,8],[1008,9],[1189,8],[1335,8],[1390,8]]},"454":{"position":[[145,8],[241,8],[305,8],[366,8],[671,8],[726,8]]},"460":{"position":[[108,8],[180,8],[323,8],[525,8],[688,8],[743,8]]},"464":{"position":[[7,8]]},"466":{"position":[[110,8],[186,8],[236,8],[395,8],[450,8]]},"475":{"position":[[370,8]]},"478":{"position":[[274,9]]},"482":{"position":[[164,8],[244,8],[346,8],[602,8],[802,8]]},"485":{"position":[[140,8]]},"489":{"position":[[30,7]]},"490":{"position":[[82,11]]},"491":{"position":[[76,8]]},"492":{"position":[[76,8],[264,8]]},"496":{"position":[[138,8],[501,8],[665,8],[747,8]]},"502":{"position":[[160,8],[502,8],[770,8],[1642,8]]},"509":{"position":[[103,8],[151,8],[661,8],[716,8]]},"515":{"position":[[366,13]]},"517":{"position":[[606,8],[730,8],[3924,8],[4096,8],[4151,8]]},"534":{"position":[[181,9],[532,8],[1372,8],[1669,8],[1811,8],[1866,8]]},"540":{"position":[[128,8],[214,8],[286,8],[395,8]]},"545":{"position":[[310,8],[615,8],[1742,8]]},"554":{"position":[[423,12]]},"556":{"position":[[181,9],[560,8],[665,8],[782,8],[896,8],[997,8],[1661,8],[1943,8],[2166,8],[2313,8],[2368,8]]},"564":{"position":[[156,8]]},"565":{"position":[[117,8],[191,8]]},"573":{"position":[[185,9],[447,8],[574,8],[816,8],[1028,8],[1382,8],[1464,8]]},"584":{"position":[[173,9],[821,8],[931,8],[1150,11],[1445,8],[1527,8]]},"593":{"position":[[145,8],[521,8],[642,8]]},"597":{"position":[[333,8]]},"599":{"position":[[274,9]]},"601":{"position":[[146,8],[273,8],[511,8]]},"603":{"position":[[225,8]]},"611":{"position":[[181,9],[275,8],[375,8],[505,8],[1032,8],[1156,8],[1314,8],[1369,8]]},"619":{"position":[[250,8],[348,8],[479,8],[558,8],[691,8],[774,8]]},"625":{"position":[[130,8],[294,8],[349,8]]},"631":{"position":[[103,8],[180,8],[323,8],[622,8],[677,8]]},"635":{"position":[[445,7]]},"637":{"position":[[106,8],[202,8],[283,8],[1119,8],[1230,8]]},"640":{"position":[[344,8]]},"646":{"position":[[498,8],[575,8],[662,9],[822,8]]},"654":{"position":[[219,8],[296,8],[383,9],[563,8],[906,8],[960,8]]},"657":{"position":[[140,8]]},"661":{"position":[[543,8]]},"662":{"position":[[30,7]]},"663":{"position":[[82,11]]},"664":{"position":[[76,8]]},"665":{"position":[[76,8],[264,8]]},"670":{"position":[[143,8],[247,8],[464,8],[619,8],[782,8],[837,8]]},"673":{"position":[[140,8]]},"677":{"position":[[30,7]]},"678":{"position":[[82,11]]},"679":{"position":[[76,8]]},"680":{"position":[[76,8],[264,8]]},"685":{"position":[[300,8],[443,8],[594,8],[649,8]]},"688":{"position":[[140,8]]},"692":{"position":[[30,7]]},"693":{"position":[[82,11]]},"694":{"position":[[76,8]]},"695":{"position":[[76,8],[264,8]]},"700":{"position":[[128,8],[271,8],[433,8],[488,8]]},"706":{"position":[[128,8],[271,8],[432,8],[487,8]]},"712":{"position":[[159,8],[291,8],[466,8],[624,8],[679,8]]},"720":{"position":[[181,9],[775,8],[923,8],[978,8]]},"723":{"position":[[224,7]]},"724":{"position":[[141,8],[235,8]]},"728":{"position":[[174,8],[239,8],[316,8],[436,8],[554,8]]},"735":{"position":[[196,8],[291,8],[358,8],[497,8],[579,8]]},"741":{"position":[[141,8],[243,8],[386,8],[448,8],[609,8],[664,8]]},"747":{"position":[[172,8],[878,8],[1492,8],[1547,8]]},"752":{"position":[[15,13],[579,8]]},"753":{"position":[[1235,8]]},"757":{"position":[[151,8],[222,9],[331,8],[494,8],[2018,8],[2101,8],[2183,8]]},"761":{"position":[[301,8]]},"764":{"position":[[1003,9]]},"770":{"position":[[151,8],[222,9],[331,8],[494,8],[2018,8],[2101,8],[2183,8]]},"774":{"position":[[301,8]]},"777":{"position":[[1003,9]]},"780":{"position":[[501,8]]},"782":{"position":[[185,8],[241,8],[318,8],[585,8],[636,8]]},"790":{"position":[[15,13]]},"791":{"position":[[532,8]]},"793":{"position":[[1206,8]]},"797":{"position":[[151,8],[222,9],[331,8],[494,8],[2025,8],[2108,8],[2190,8]]},"801":{"position":[[307,8]]},"804":{"position":[[1001,9]]},"808":{"position":[[1152,8]]},"812":{"position":[[151,8],[222,9],[331,8],[494,8],[2025,8],[2108,8],[2190,8]]},"816":{"position":[[307,8]]},"819":{"position":[[1001,9]]},"828":{"position":[[151,8],[222,9],[331,8],[494,8],[2025,8],[2108,8],[2190,8]]},"832":{"position":[[307,8]]},"835":{"position":[[1001,9]]},"842":{"position":[[190,8],[437,8],[536,8],[722,8],[836,8],[905,8],[983,8],[1156,8],[1240,8],[1853,8],[1985,8],[2190,8],[2392,8],[3168,8],[3327,8],[3487,8]]},"846":{"position":[[1,8]]},"847":{"position":[[107,7]]},"849":{"position":[[8,8],[375,8],[1915,8],[1985,7]]},"851":{"position":[[167,8],[245,8],[335,8],[434,8],[488,8],[551,8],[713,8],[768,8]]},"856":{"position":[[150,8]]},"859":{"position":[[181,9],[310,8],[408,8],[842,8],[942,8]]},"867":{"position":[[144,8],[213,8],[290,8],[382,8],[2205,8],[2248,8]]},"879":{"position":[[247,8],[554,8],[652,8],[742,8],[1602,8],[1714,8]]},"885":{"position":[[140,8],[241,8],[429,8],[572,8],[744,8],[799,8]]},"891":{"position":[[121,8],[458,8]]},"897":{"position":[[225,8],[388,8],[443,8]]},"904":{"position":[[2295,9]]},"907":{"position":[[144,8],[218,9],[305,9],[408,8],[1512,8],[1555,8],[1637,8],[1705,7],[1797,8]]},"909":{"position":[[1196,8]]},"916":{"position":[[15,13]]},"917":{"position":[[193,8],[1033,8],[1804,9]]},"918":{"position":[[2587,9]]},"919":{"position":[[1558,8]]},"922":{"position":[[1074,8],[2682,8]]},"923":{"position":[[144,8],[218,9],[305,9],[408,8],[1512,8],[1555,8],[1637,8],[1705,7],[1797,8]]},"925":{"position":[[1196,8]]},"931":{"position":[[1957,9]]},"934":{"position":[[144,8],[218,9],[305,9],[408,8],[1512,8],[1555,8],[1637,8]]},"936":{"position":[[1196,8]]},"943":{"position":[[305,8]]},"945":{"position":[[449,9],[714,8]]},"950":{"position":[[144,8],[218,9],[305,9],[408,8],[1512,8],[1555,8],[1637,8]]},"952":{"position":[[1196,8]]},"959":{"position":[[135,8],[327,8],[489,8],[544,8]]},"964":{"position":[[281,8]]},"965":{"position":[[193,8],[1033,8],[1804,9]]},"968":{"position":[[144,8],[218,9],[305,9],[408,8],[1512,8],[1555,8],[1637,8],[1705,7],[1797,8]]},"970":{"position":[[1196,8]]},"982":{"position":[[137,8],[329,8],[491,8],[546,8]]},"988":{"position":[[169,8]]},"991":{"position":[[270,8],[407,8],[559,8],[675,8],[898,8]]},"997":{"position":[[121,8],[215,8],[297,8],[457,8],[512,8]]},"1003":{"position":[[169,8]]},"1008":{"position":[[959,8],[1732,9]]},"1009":{"position":[[270,8],[470,8],[622,8],[738,8],[1754,8],[1809,8]]},"1015":{"position":[[242,8],[385,8],[544,8],[599,8]]},"1021":{"position":[[416,8],[480,8],[823,8],[1349,8],[2122,8]]},"1028":{"position":[[332,8],[494,8],[549,8]]},"1034":{"position":[[198,8],[264,8],[350,8],[407,8],[484,8]]},"1035":{"position":[[102,8],[171,8]]},"1041":{"position":[[15,13]]},"1045":{"position":[[151,8],[225,8],[290,9],[393,8],[1131,8],[1174,8]]},"1047":{"position":[[794,9]]},"1050":{"position":[[930,13]]},"1053":{"position":[[151,8],[225,8],[290,9],[393,8],[1131,8],[1174,8]]},"1055":{"position":[[794,9]]},"1061":{"position":[[151,8],[225,8],[290,9],[393,8],[1131,8],[1174,8]]},"1063":{"position":[[794,9]]},"1067":{"position":[[87,8],[152,8]]},"1070":{"position":[[181,9],[300,8],[403,8],[509,8],[627,8],[770,8],[1105,8],[1160,8]]},"1076":{"position":[[197,8],[340,8],[738,8],[887,8],[942,8]]},"1085":{"position":[[237,9],[360,8],[483,8],[1473,8],[1528,8]]},"1094":{"position":[[135,8],[228,8],[288,8],[394,8],[559,8],[614,8]]},"1101":{"position":[[103,8],[164,8],[228,8],[399,8],[454,8]]},"1107":{"position":[[259,8],[366,8],[514,8],[569,8]]},"1113":{"position":[[110,8],[168,8],[323,8],[588,8],[643,8]]},"1118":{"position":[[1031,9]]},"1125":{"position":[[146,8],[253,8],[323,8],[613,8]]},"1133":{"position":[[167,8],[254,8],[365,8],[476,8],[596,8],[723,8],[953,8],[1162,8],[1310,8],[1365,8],[1457,8]]},"1138":{"position":[[38,8],[437,8],[514,8],[783,8],[1843,8]]},"1144":{"position":[[120,8],[216,8],[324,8],[389,8],[1360,8]]},"1151":{"position":[[193,8],[249,8],[326,8],[832,8],[963,8],[1058,8],[1214,8],[1414,8]]},"1155":{"position":[[14,12]]},"1162":{"position":[[146,8],[253,8],[322,8],[439,8],[577,8],[847,8]]},"1170":{"position":[[120,8],[216,8],[324,8],[389,8],[1285,8]]},"1179":{"position":[[163,8],[288,8],[335,8],[530,8],[585,8],[1113,8]]},"1188":{"position":[[214,8],[283,8],[353,8],[602,8],[680,8],[780,8],[857,8]]},"1196":{"position":[[245,8],[274,8],[997,8]]},"1206":{"position":[[342,8],[506,8],[560,8],[679,8],[802,8],[1028,8],[1168,8]]},"1207":{"position":[[228,8]]},"1213":{"position":[[120,8],[244,8],[1037,8]]},"1220":{"position":[[120,8],[244,8],[962,8]]},"1226":{"position":[[140,8]]},"1230":{"position":[[179,8],[572,8],[1068,9],[1365,8]]},"1239":{"position":[[114,8]]},"1240":{"position":[[141,8]]},"1247":{"position":[[172,9],[350,8],[646,8],[780,8],[1143,8]]},"1251":{"position":[[262,8]]},"1253":{"position":[[185,8],[258,8],[314,8],[391,8],[502,8]]},"1260":{"position":[[149,8],[216,8],[417,8],[512,8],[631,8],[762,8],[962,8]]},"1267":{"position":[[166,8],[247,8],[303,8],[367,8],[534,8]]},"1268":{"position":[[712,8]]},"1269":{"position":[[108,8]]},"1272":{"position":[[14,8]]},"1277":{"position":[[211,8],[326,8],[417,8],[502,8],[1162,8]]},"1282":{"position":[[15,13]]},"1285":{"position":[[134,8],[256,8],[333,8],[389,8],[556,8]]},"1286":{"position":[[2678,8]]},"1292":{"position":[[5756,7]]},"1300":{"position":[[134,8],[256,8],[333,8],[389,8],[556,8]]},"1301":{"position":[[2514,8]]},"1306":{"position":[[5756,7]]},"1310":{"position":[[15,13]]},"1313":{"position":[[247,8],[324,8],[593,8],[1387,8],[1455,7],[1547,8]]},"1324":{"position":[[134,8],[256,8],[333,8],[389,8],[556,8]]},"1325":{"position":[[2678,8]]},"1329":{"position":[[5756,7]]},"1337":{"position":[[247,8],[324,8],[593,8],[1387,8],[1455,7],[1547,8]]},"1348":{"position":[[247,8],[324,8],[593,8],[1387,8]]},"1356":{"position":[[176,8],[385,8],[1420,8],[1530,8]]},"1359":{"position":[[355,8]]},"1362":{"position":[[303,8],[370,8],[444,8],[576,8],[658,8]]},"1366":{"position":[[22,8]]},"1367":{"position":[[195,8]]},"1376":{"position":[[134,8],[256,8],[333,8],[389,8],[593,8]]},"1386":{"position":[[219,8],[309,8],[500,8],[755,8],[842,8],[900,8],[940,8],[994,8],[1039,8],[1083,8],[1183,8]]},"1388":{"position":[[771,12]]},"1392":{"position":[[184,8]]},"1400":{"position":[[134,8],[256,8],[333,8],[389,8],[593,8]]},"1407":{"position":[[15,13]]},"1411":{"position":[[134,8],[256,8],[333,8],[389,8],[593,8]]},"1420":{"position":[[96,8],[157,8],[226,8],[279,8],[338,8],[388,8],[446,8],[503,8],[539,8],[630,8],[730,8]]},"1427":{"position":[[188,8],[265,8],[534,8],[1147,8]]},"1437":{"position":[[516,8]]},"1439":{"position":[[1734,8]]},"1440":{"position":[[1436,7]]},"1444":{"position":[[142,8]]},"1447":{"position":[[550,8]]},"1448":{"position":[[53,8]]},"1461":{"position":[[1656,8]]},"1463":{"position":[[467,9]]},"1464":{"position":[[373,9]]},"1465":{"position":[[551,9]]},"1466":{"position":[[352,9]]},"1467":{"position":[[881,9],[2306,9]]},"1471":{"position":[[410,8]]},"1476":{"position":[[322,9],[1523,9]]},"1477":{"position":[[1342,8],[1538,9],[3508,8],[3858,9]]},"1480":{"position":[[265,9],[514,8],[679,9],[759,9]]}},"keywords":{}}],["require_auth_token",{"_index":3886,"title":{},"content":{"491":{"position":[[85,19]]},"664":{"position":[[85,19]]},"679":{"position":[[85,19]]},"694":{"position":[[85,19]]}},"keywords":{}}],["require_row_f",{"_index":6203,"title":{},"content":{"1292":{"position":[[5793,13]]},"1306":{"position":[[5793,13]]},"1329":{"position":[[5793,13]]}},"keywords":{}}],["required)a",{"_index":5074,"title":{},"content":{"940":{"position":[[53,10]]}},"keywords":{}}],["required/default",{"_index":3884,"title":{},"content":{"491":{"position":[[33,20]]},"492":{"position":[[33,20]]},"664":{"position":[[33,20]]},"665":{"position":[[33,20]]},"679":{"position":[[33,20]]},"680":{"position":[[33,20]]},"694":{"position":[[33,20]]},"695":{"position":[[33,20]]}},"keywords":{}}],["required/default/access_key",{"_index":3894,"title":{},"content":{"496":{"position":[[44,27]]}},"keywords":{}}],["required/default/access_token",{"_index":3943,"title":{},"content":{"517":{"position":[[515,29]]},"685":{"position":[[202,29]]},"959":{"position":[[44,29]]},"1362":{"position":[[206,29]]}},"keywords":{}}],["required/default/account_id",{"_index":4357,"title":{},"content":{"631":{"position":[[44,27]]},"720":{"position":[[224,28]]},"851":{"position":[[44,27]]},"1076":{"position":[[44,27]]}},"keywords":{}}],["required/default/account_sid",{"_index":5404,"title":{},"content":{"1113":{"position":[[44,28]]}},"keywords":{}}],["required/default/additional_table_create_sql",{"_index":5514,"title":{},"content":{"1138":{"position":[[1316,44]]},"1313":{"position":[[860,44]]},"1337":{"position":[[860,44]]},"1348":{"position":[[860,44]]},"1427":{"position":[[587,44]]}},"keywords":{}}],["required/default/address",{"_index":3403,"title":{},"content":{"370":{"position":[[261,24]]},"757":{"position":[[44,24]]},"770":{"position":[[44,24]]},"782":{"position":[[44,24]]},"797":{"position":[[44,24]]},"812":{"position":[[44,24]]},"828":{"position":[[44,24]]},"867":{"position":[[44,24]]},"879":{"position":[[44,24]]},"907":{"position":[[44,24]]},"923":{"position":[[44,24]]},"934":{"position":[[44,24]]},"950":{"position":[[44,24]]},"968":{"position":[[44,24]]},"1021":{"position":[[317,24]]},"1045":{"position":[[44,24]]},"1053":{"position":[[44,24]]},"1061":{"position":[[44,24]]},"1151":{"position":[[44,24]]},"1188":{"position":[[44,24]]},"1239":{"position":[[33,24]]},"1253":{"position":[[44,24]]},"1267":{"position":[[33,24]]}},"keywords":{}}],["required/default/advanc",{"_index":3445,"title":{},"content":{"377":{"position":[[44,25]]},"417":{"position":[[44,25]]},"438":{"position":[[44,25]]},"545":{"position":[[44,25]]}},"keywords":{}}],["required/default/advanced/connection_limit",{"_index":4762,"title":{},"content":{"842":{"position":[[1308,42]]}},"keywords":{}}],["required/default/advancedcollectionset",{"_index":6266,"title":{},"content":{"1356":{"position":[[911,43]]}},"keywords":{}}],["required/default/api_id",{"_index":3260,"title":{},"content":{"351":{"position":[[44,23]]}},"keywords":{}}],["required/default/api_key",{"_index":3272,"title":{},"content":{"359":{"position":[[113,24]]},"424":{"position":[[44,24]]},"466":{"position":[[44,24]]},"509":{"position":[[44,24]]},"706":{"position":[[44,24]]},"1356":{"position":[[44,24]]}},"keywords":{}}],["required/default/api_token",{"_index":4500,"title":{},"content":{"712":{"position":[[44,26]]}},"keywords":{}}],["required/default/apikey",{"_index":4335,"title":{},"content":{"625":{"position":[[44,23]]},"700":{"position":[[44,23]]},"982":{"position":[[44,23]]}},"keywords":{}}],["required/default/auth_token",{"_index":5152,"title":{},"content":{"997":{"position":[[44,27]]}},"keywords":{}}],["required/default/authentication/consumer_key",{"_index":4754,"title":{},"content":{"842":{"position":[[610,44]]}},"keywords":{}}],["required/default/authentication/usernam",{"_index":4759,"title":{},"content":{"842":{"position":[[1060,40]]}},"keywords":{}}],["required/default/aws_access_key_id",{"_index":5763,"title":{},"content":{"1162":{"position":[[44,34]]}},"keywords":{}}],["required/default/aws_key_id",{"_index":5856,"title":{},"content":{"1206":{"position":[[44,27]]}},"keywords":{}}],["required/default/awsaccesskeyid",{"_index":3511,"title":{},"content":{"392":{"position":[[44,31]]},"397":{"position":[[44,31]]},"1125":{"position":[[44,31]]}},"keywords":{}}],["required/default/backfillmod",{"_index":4249,"title":{},"content":{"593":{"position":[[362,29]]}},"keywords":{}}],["required/default/bootstrap_serv",{"_index":3671,"title":{},"content":{"432":{"position":[[44,34]]}},"keywords":{}}],["required/default/branch",{"_index":4041,"title":{},"content":{"534":{"position":[[224,23]]}},"keywords":{}}],["required/default/bucket",{"_index":5716,"title":{},"content":{"1144":{"position":[[44,23]]},"1170":{"position":[[44,23]]},"1213":{"position":[[44,23]]},"1220":{"position":[[44,23]]}},"keywords":{}}],["required/default/client_id",{"_index":4418,"title":{},"content":{"670":{"position":[[44,26]]},"741":{"position":[[44,26]]},"885":{"position":[[44,26]]},"1101":{"position":[[44,26]]}},"keywords":{}}],["required/default/collect",{"_index":5918,"title":{},"content":{"1253":{"position":[[444,27]]}},"keywords":{}}],["required/default/conversion_window_day",{"_index":4114,"title":{},"content":{"556":{"position":[[224,39]]}},"keywords":{}}],["required/default/create_default_subscript",{"_index":5889,"title":{},"content":{"1230":{"position":[[834,44]]}},"keywords":{}}],["required/default/credenti",{"_index":3481,"title":{},"content":{"387":{"position":[[224,28]]},"448":{"position":[[224,28]]},"564":{"position":[[44,28]]},"573":{"position":[[228,28]]},"584":{"position":[[216,28]]},"611":{"position":[[224,28]]},"619":{"position":[[125,28]]},"637":{"position":[[44,28]]},"646":{"position":[[397,28]]},"654":{"position":[[118,28]]},"735":{"position":[[113,28]]},"859":{"position":[[224,28]]},"991":{"position":[[234,28]]},"1009":{"position":[[234,28]]},"1070":{"position":[[224,28]]},"1085":{"position":[[280,28]]},"1230":{"position":[[44,28]]},"1247":{"position":[[215,28]]}},"keywords":{}}],["required/default/credentials/access_token",{"_index":4927,"title":{},"content":{"891":{"position":[[44,41]]}},"keywords":{}}],["required/default/credentials/credenti",{"_index":5464,"title":{},"content":{"1133":{"position":[[44,40]]}},"keywords":{}}],["required/default/cursorfield",{"_index":5173,"title":{},"content":{"1009":{"position":[[1544,28]]}},"keywords":{}}],["required/default/customer_key",{"_index":5357,"title":{},"content":{"1094":{"position":[[44,29]]}},"keywords":{}}],["required/default/databas",{"_index":4683,"title":{},"content":{"782":{"position":[[529,25]]},"1138":{"position":[[261,25]]},"1285":{"position":[[44,25]]},"1300":{"position":[[44,25]]},"1313":{"position":[[44,25]]},"1324":{"position":[[44,25]]},"1337":{"position":[[44,25]]},"1348":{"position":[[44,25]]},"1376":{"position":[[44,25]]},"1400":{"position":[[44,25]]},"1411":{"position":[[44,25]]},"1427":{"position":[[44,25]]}},"keywords":{}}],["required/default/endpoint",{"_index":5825,"title":{},"content":{"1196":{"position":[[44,25]]}},"keywords":{}}],["required/default/environ",{"_index":3758,"title":{},"content":{"454":{"position":[[44,28]]}},"keywords":{}}],["required/default/file_id",{"_index":4135,"title":{},"content":{"565":{"position":[[33,24]]}},"keywords":{}}],["required/default/googlecredenti",{"_index":4247,"title":{},"content":{"593":{"position":[[44,34]]}},"keywords":{}}],["required/default/host",{"_index":3539,"title":{},"content":{"402":{"position":[[44,21]]},"1034":{"position":[[33,21]]},"1386":{"position":[[44,21]]},"1420":{"position":[[44,21]]}},"keywords":{}}],["required/default/index",{"_index":5829,"title":{},"content":{"1196":{"position":[[891,22]]},"1277":{"position":[[44,22]]}},"keywords":{}}],["required/default/join_channel",{"_index":5183,"title":{},"content":{"1015":{"position":[[44,30]]}},"keywords":{}}],["required/default/nam",{"_index":3457,"title":{},"content":{"377":{"position":[[1706,21]]},"482":{"position":[[521,21]]},"540":{"position":[[339,21]]},"646":{"position":[[752,21]]},"842":{"position":[[1906,21]]},"879":{"position":[[1553,21]]},"891":{"position":[[360,21]]}},"keywords":{}}],["required/default/namespac",{"_index":3423,"title":{},"content":{"370":{"position":[[2026,26]]},"757":{"position":[[1933,26]]},"770":{"position":[[1933,26]]},"797":{"position":[[1933,26]]},"812":{"position":[[1933,26]]},"828":{"position":[[1933,26]]},"867":{"position":[[2130,26]]},"907":{"position":[[1433,26]]},"923":{"position":[[1433,26]]},"934":{"position":[[1433,26]]},"950":{"position":[[1433,26]]},"968":{"position":[[1433,26]]},"1045":{"position":[[1052,26]]},"1053":{"position":[[1052,26]]},"1061":{"position":[[1052,26]]},"1277":{"position":[[1026,26]]}},"keywords":{}}],["required/default/organ",{"_index":4050,"title":{},"content":{"540":{"position":[[44,29]]}},"keywords":{}}],["required/default/organization_id",{"_index":4533,"title":{},"content":{"728":{"position":[[33,32]]}},"keywords":{}}],["required/default/path",{"_index":3901,"title":{},"content":{"502":{"position":[[44,21]]},"1144":{"position":[[1279,21]]},"1170":{"position":[[1204,21]]},"1213":{"position":[[956,21]]},"1220":{"position":[[881,21]]}},"keywords":{}}],["required/default/project_id",{"_index":3845,"title":{},"content":{"482":{"position":[[44,27]]},"747":{"position":[[44,27]]},"1179":{"position":[[44,27]]}},"keywords":{}}],["required/default/projectid",{"_index":4286,"title":{},"content":{"601":{"position":[[44,26]]}},"keywords":{}}],["required/default/queue_url",{"_index":3564,"title":{},"content":{"408":{"position":[[44,26]]}},"keywords":{}}],["required/default/relativepath",{"_index":5903,"title":{},"content":{"1240":{"position":[[33,29]]}},"keywords":{}}],["required/default/sheet",{"_index":5913,"title":{},"content":{"1247":{"position":[[1052,22]]}},"keywords":{}}],["required/default/site_api_key",{"_index":3770,"title":{},"content":{"460":{"position":[[44,29]]}},"keywords":{}}],["required/default/sourc",{"_index":6279,"title":{},"content":{"1362":{"position":[[497,23]]}},"keywords":{}}],["required/default/start_d",{"_index":4959,"title":{},"content":{"897":{"position":[[44,27]]},"1028":{"position":[[44,27]]},"1107":{"position":[[44,27]]}},"keywords":{}}],["required/default/stream",{"_index":3263,"title":{},"content":{"351":{"position":[[341,23]]},"359":{"position":[[318,23]]},"387":{"position":[[1355,23]]},"392":{"position":[[705,23]]},"408":{"position":[[548,23]]},"417":{"position":[[2241,23]]},"424":{"position":[[372,23]]},"432":{"position":[[1215,23]]},"438":{"position":[[1920,23]]},"448":{"position":[[1242,23]]},"454":{"position":[[561,23]]},"460":{"position":[[578,23]]},"466":{"position":[[289,23]]},"496":{"position":[[554,23]]},"502":{"position":[[1574,23]]},"509":{"position":[[554,23]]},"517":{"position":[[3977,23]]},"534":{"position":[[1722,23]]},"545":{"position":[[1636,23]]},"556":{"position":[[2219,23]]},"573":{"position":[[1298,23]]},"584":{"position":[[1370,23]]},"611":{"position":[[1209,23]]},"619":{"position":[[611,23]]},"625":{"position":[[183,23]]},"631":{"position":[[514,23]]},"637":{"position":[[1172,23]]},"654":{"position":[[834,23]]},"670":{"position":[[672,23]]},"685":{"position":[[496,23]]},"700":{"position":[[324,23]]},"706":{"position":[[324,23]]},"712":{"position":[[519,23]]},"720":{"position":[[828,23]]},"735":{"position":[[411,23]]},"741":{"position":[[501,23]]},"747":{"position":[[1383,23]]},"851":{"position":[[604,23]]},"859":{"position":[[751,23]]},"885":{"position":[[625,23]]},"897":{"position":[[278,23]]},"959":{"position":[[380,23]]},"982":{"position":[[382,23]]},"991":{"position":[[805,23]]},"997":{"position":[[350,23]]},"1015":{"position":[[438,23]]},"1021":{"position":[[2052,23]]},"1028":{"position":[[385,23]]},"1070":{"position":[[1008,23]]},"1076":{"position":[[791,23]]},"1085":{"position":[[1382,23]]},"1094":{"position":[[447,23]]},"1101":{"position":[[281,23]]},"1107":{"position":[[419,23]]},"1113":{"position":[[481,23]]},"1133":{"position":[[1215,23]]}},"keywords":{}}],["required/default/t",{"_index":3533,"title":{},"content":{"397":{"position":[[847,22]]},"402":{"position":[[671,22]]},"1035":{"position":[[33,22]]},"1125":{"position":[[527,22]]},"1151":{"position":[[1350,22]]},"1162":{"position":[[783,22]]},"1179":{"position":[[1014,22]]},"1188":{"position":[[733,22]]},"1206":{"position":[[855,22]]},"1260":{"position":[[898,22]]},"1269":{"position":[[33,22]]},"1286":{"position":[[2527,22]]},"1301":{"position":[[2363,22]]},"1325":{"position":[[2527,22]]},"1367":{"position":[[44,22]]},"1376":{"position":[[442,22]]},"1386":{"position":[[1136,22]]},"1400":{"position":[[442,22]]},"1411":{"position":[[442,22]]},"1420":{"position":[[683,22]]}},"keywords":{}}],["required/default/token",{"_index":5921,"title":{},"content":{"1260":{"position":[[44,22]]}},"keywords":{}}],["required/default/top",{"_index":4291,"title":{},"content":{"601":{"position":[[433,22]]}},"keywords":{}}],["required/default`/account",{"_index":4745,"title":{},"content":{"842":{"position":[[44,25]]}},"keywords":{}}],["resend",{"_index":2199,"title":{},"content":{"198":{"position":[[530,6]]}},"keywords":{}}],["reserv",{"_index":2473,"title":{"1140":{"position":[[0,8]]},"1192":{"position":[[0,8]]},"1209":{"position":[[0,8]]},"1292":{"position":[[0,8]]},"1306":{"position":[[0,8]]},"1316":{"position":[[0,8]]},"1329":{"position":[[0,8]]},"1340":{"position":[[0,8]]},"1351":{"position":[[0,8]]},"1370":{"position":[[0,8]]},"1379":{"position":[[0,8]]},"1394":{"position":[[0,8]]},"1403":{"position":[[0,8]]},"1414":{"position":[[0,8]]},"1423":{"position":[[0,8]]},"1431":{"position":[[0,8]]}},"content":{"223":{"position":[[896,7]]},"1140":{"position":[[26,8],[122,8],[248,7],[350,8]]},"1192":{"position":[[26,8],[148,8],[469,8]]},"1209":{"position":[[24,8],[121,8],[204,8]]},"1292":{"position":[[21,8],[117,8],[176,8],[279,8]]},"1298":{"position":[[896,7]]},"1306":{"position":[[21,8],[117,8],[176,8],[279,8]]},"1316":{"position":[[26,8],[122,8],[248,7],[350,8]]},"1329":{"position":[[21,8],[117,8],[176,8],[279,8]]},"1340":{"position":[[26,8],[122,8],[248,7],[350,8]]},"1346":{"position":[[896,7]]},"1351":{"position":[[26,8],[122,8],[248,7],[350,8]]},"1370":{"position":[[22,8],[118,8],[240,7],[342,8]]},"1379":{"position":[[25,8],[121,8],[184,8],[289,8]]},"1394":{"position":[[25,8],[147,8],[465,8]]},"1403":{"position":[[25,8],[121,8],[184,8],[289,8]]},"1414":{"position":[[25,8],[121,8],[184,8],[289,8]]},"1423":{"position":[[32,8],[154,8],[471,8]]},"1431":{"position":[[49,8],[145,8],[271,7],[373,8]]}},"keywords":{}}],["reset",{"_index":1952,"title":{},"content":{"164":{"position":[[1980,5]]},"1292":{"position":[[5837,5]]},"1306":{"position":[[5837,5]]},"1329":{"position":[[5837,5]]},"1465":{"position":[[402,5],[466,5],[653,6],[725,5],[908,6],[1122,5],[1188,5],[1353,5],[1454,5],[1505,6],[1620,5]]}},"keywords":{}}],["reshap",{"_index":716,"title":{},"content":{"40":{"position":[[203,8]]},"213":{"position":[[350,7]]}},"keywords":{}}],["resid",{"_index":4623,"title":{},"content":{"757":{"position":[[2002,8]]},"770":{"position":[[2002,8]]},"797":{"position":[[2009,8]]},"812":{"position":[[2009,8]]},"828":{"position":[[2009,8]]},"879":{"position":[[1643,6]]},"1035":{"position":[[156,7]]}},"keywords":{}}],["resign",{"_index":6207,"title":{},"content":{"1292":{"position":[[5882,8]]},"1306":{"position":[[5882,8]]},"1329":{"position":[[5882,8]]}},"keywords":{}}],["resili",{"_index":2795,"title":{},"content":{"267":{"position":[[634,10]]}},"keywords":{}}],["resiz",{"_index":4689,"title":{},"content":{"785":{"position":[[766,6]]}},"keywords":{}}],["resolut",{"_index":4635,"title":{},"content":{"760":{"position":[[741,10]]},"773":{"position":[[741,10]]},"800":{"position":[[741,10]]},"815":{"position":[[741,10]]},"831":{"position":[[741,10]]}},"keywords":{}}],["resolutionsissu",{"_index":4476,"title":{},"content":{"709":{"position":[[322,16]]}},"keywords":{}}],["resolv",{"_index":1285,"title":{},"content":{"87":{"position":[[314,8],[415,8]]},"88":{"position":[[6,9]]},"90":{"position":[[167,8]]},"161":{"position":[[91,8],[1185,8]]},"379":{"position":[[756,7],[877,7]]},"414":{"position":[[838,7]]},"760":{"position":[[315,8]]},"761":{"position":[[280,9]]},"763":{"position":[[302,8]]},"773":{"position":[[315,8]]},"774":{"position":[[280,9]]},"776":{"position":[[302,8]]},"800":{"position":[[315,8]]},"801":{"position":[[286,9]]},"803":{"position":[[308,8]]},"815":{"position":[[315,8]]},"816":{"position":[[286,9]]},"818":{"position":[[308,8]]},"831":{"position":[[315,8]]},"832":{"position":[[286,9]]},"834":{"position":[[308,8]]},"869":{"position":[[955,7]]},"871":{"position":[[132,7]]},"1123":{"position":[[667,7]]}},"keywords":{}}],["resourc",{"_index":397,"title":{"45":{"position":[[0,9]]},"91":{"position":[[21,10]]},"186":{"position":[[0,10]]},"374":{"position":[[15,10]]},"381":{"position":[[15,10]]},"421":{"position":[[15,10]]},"443":{"position":[[15,10]]},"451":{"position":[[15,10]]},"457":{"position":[[15,10]]},"463":{"position":[[15,10]]},"469":{"position":[[15,10]]},"470":{"position":[[0,10]]},"492":{"position":[[0,8]]},"506":{"position":[[15,10]]},"512":{"position":[[15,10]]},"520":{"position":[[15,10]]},"521":{"position":[[0,10]]},"529":{"position":[[15,10]]},"537":{"position":[[15,10]]},"550":{"position":[[15,10]]},"568":{"position":[[15,10]]},"580":{"position":[[15,10]]},"605":{"position":[[15,10]]},"622":{"position":[[15,10]]},"628":{"position":[[15,10]]},"642":{"position":[[18,10]]},"649":{"position":[[15,10]]},"665":{"position":[[0,8]]},"667":{"position":[[15,10]]},"680":{"position":[[0,8]]},"682":{"position":[[15,10]]},"695":{"position":[[0,8]]},"697":{"position":[[15,10]]},"703":{"position":[[15,10]]},"709":{"position":[[15,10]]},"715":{"position":[[15,10]]},"738":{"position":[[15,10]]},"744":{"position":[[15,10]]},"838":{"position":[[15,10]]},"854":{"position":[[15,10]]},"882":{"position":[[15,10]]},"888":{"position":[[15,10]]},"956":{"position":[[15,10]]},"979":{"position":[[15,10]]},"985":{"position":[[15,10]]},"994":{"position":[[15,10]]},"1000":{"position":[[15,10]]},"1012":{"position":[[15,10]]},"1025":{"position":[[15,10]]},"1065":{"position":[[15,10]]},"1073":{"position":[[15,10]]},"1080":{"position":[[15,10]]},"1099":{"position":[[15,10]]},"1104":{"position":[[15,10]]},"1110":{"position":[[15,10]]},"1128":{"position":[[15,10]]}},"content":{"13":{"position":[[761,8],[941,8],[1642,9]]},"45":{"position":[[3,8],[111,8],[175,9],[425,8],[564,10]]},"55":{"position":[[363,10]]},"56":{"position":[[1429,9],[1673,8],[1791,9],[1916,9],[2087,9]]},"80":{"position":[[537,9]]},"81":{"position":[[540,8],[1495,8],[1581,9],[1647,9],[1799,9],[1842,9],[2004,9],[2061,9]]},"88":{"position":[[421,9],[477,9]]},"89":{"position":[[240,9]]},"91":{"position":[[64,10]]},"119":{"position":[[405,9]]},"120":{"position":[[763,10],[843,10],[1816,8],[1938,9],[2063,9]]},"121":{"position":[[346,9],[428,8],[797,9],[1195,9],[1809,8]]},"122":{"position":[[1213,9]]},"123":{"position":[[778,9]]},"144":{"position":[[616,9]]},"173":{"position":[[600,9]]},"176":{"position":[[41,10]]},"185":{"position":[[240,8]]},"206":{"position":[[950,10]]},"208":{"position":[[1191,8],[1856,9]]},"210":{"position":[[565,9]]},"217":{"position":[[1070,9]]},"218":{"position":[[758,8],[907,9]]},"242":{"position":[[127,9],[365,9],[924,9]]},"254":{"position":[[54,9]]},"267":{"position":[[1472,9]]},"270":{"position":[[1101,9]]},"296":{"position":[[54,9]]},"297":{"position":[[147,9]]},"307":{"position":[[1172,9],[1685,9],[2022,9],[2568,9]]},"309":{"position":[[2516,9],[3123,9]]},"314":{"position":[[54,9]]},"344":{"position":[[310,9]]},"351":{"position":[[372,8]]},"359":{"position":[[349,8]]},"360":{"position":[[176,9]]},"371":{"position":[[1293,9]]},"378":{"position":[[322,9]]},"381":{"position":[[20,9],[557,8]]},"387":{"position":[[1397,8]]},"388":{"position":[[431,9]]},"393":{"position":[[327,9]]},"398":{"position":[[328,9]]},"403":{"position":[[406,9]]},"408":{"position":[[579,8]]},"413":{"position":[[353,10]]},"418":{"position":[[388,9]]},"421":{"position":[[20,9],[156,8]]},"424":{"position":[[403,8]]},"425":{"position":[[208,9],[285,9],[370,9],[444,9],[529,9]]},"433":{"position":[[336,9],[732,9]]},"439":{"position":[[615,9]]},"443":{"position":[[20,9],[485,11],[515,8]]},"448":{"position":[[1282,8]]},"449":{"position":[[412,9]]},"451":{"position":[[20,9],[165,8]]},"452":{"position":[[234,9]]},"454":{"position":[[592,8]]},"455":{"position":[[255,9]]},"457":{"position":[[20,9],[169,8]]},"460":{"position":[[609,8]]},"461":{"position":[[256,9]]},"463":{"position":[[20,9],[275,8]]},"466":{"position":[[320,8]]},"467":{"position":[[191,9]]},"469":{"position":[[120,9]]},"470":{"position":[[38,8]]},"473":{"position":[[294,9]]},"475":{"position":[[379,10]]},"497":{"position":[[210,9]]},"503":{"position":[[184,9]]},"506":{"position":[[20,9],[432,8]]},"509":{"position":[[585,8]]},"510":{"position":[[183,9]]},"512":{"position":[[20,9],[145,8]]},"517":{"position":[[4008,8]]},"518":{"position":[[465,9],[547,9],[623,9],[709,9],[825,9],[927,9],[1027,9],[1121,9],[1247,9],[1357,9],[1437,9],[1519,9],[1587,9]]},"520":{"position":[[148,9]]},"521":{"position":[[345,8]]},"527":{"position":[[341,9]]},"529":{"position":[[167,9],[213,9],[724,8],[855,10]]},"534":{"position":[[925,9],[986,9],[1509,9],[1651,10],[1760,8]]},"535":{"position":[[355,9]]},"540":{"position":[[379,8],[457,8]]},"541":{"position":[[172,9]]},"546":{"position":[[1095,9]]},"550":{"position":[[20,9],[45,9],[90,9],[429,8],[527,9]]},"556":{"position":[[2260,8]]},"557":{"position":[[607,9]]},"558":{"position":[[23,9],[102,8]]},"562":{"position":[[168,10]]},"566":{"position":[[170,9]]},"568":{"position":[[20,9],[239,8]]},"573":{"position":[[1334,8]]},"574":{"position":[[46,9]]},"575":{"position":[[314,9],[412,9],[499,9],[603,9],[692,9],[792,9],[877,9],[972,9],[1075,9],[1171,9]]},"580":{"position":[[20,9]]},"584":{"position":[[1406,8]]},"585":{"position":[[46,9]]},"586":{"position":[[336,9],[434,9],[521,9],[625,9],[714,9],[799,9],[894,9],[990,9]]},"594":{"position":[[871,9],[1212,9],[1314,9],[1392,9]]},"597":{"position":[[342,10]]},"605":{"position":[[20,9],[80,8],[387,8]]},"606":{"position":[[20,9]]},"611":{"position":[[1261,8]]},"612":{"position":[[359,9]]},"620":{"position":[[253,9]]},"622":{"position":[[20,9],[393,8]]},"623":{"position":[[100,9]]},"625":{"position":[[214,8]]},"626":{"position":[[148,9]]},"628":{"position":[[20,9],[457,8]]},"631":{"position":[[545,8]]},"632":{"position":[[217,9]]},"638":{"position":[[387,9]]},"642":{"position":[[74,10]]},"646":{"position":[[779,8],[805,9]]},"647":{"position":[[200,9]]},"649":{"position":[[18,8],[143,9],[523,9]]},"654":{"position":[[863,8],[889,9]]},"655":{"position":[[206,9]]},"660":{"position":[[687,8]]},"667":{"position":[[20,9],[242,8]]},"670":{"position":[[703,8]]},"671":{"position":[[250,9]]},"682":{"position":[[20,9],[213,8]]},"685":{"position":[[527,8]]},"686":{"position":[[245,9],[320,9],[400,9],[493,9],[581,9],[678,9],[756,9],[854,9],[952,9],[1030,9],[1101,9]]},"697":{"position":[[20,9],[582,8]]},"700":{"position":[[355,8]]},"701":{"position":[[179,9]]},"703":{"position":[[147,8]]},"706":{"position":[[355,8]]},"707":{"position":[[179,9]]},"709":{"position":[[20,9],[835,8]]},"712":{"position":[[550,8]]},"713":{"position":[[188,9]]},"715":{"position":[[20,9],[204,8]]},"721":{"position":[[318,9]]},"735":{"position":[[435,8]]},"736":{"position":[[177,9],[262,9],[351,9]]},"738":{"position":[[759,8]]},"741":{"position":[[532,8]]},"742":{"position":[[247,9]]},"744":{"position":[[20,9],[149,8]]},"747":{"position":[[1414,8]]},"748":{"position":[[407,9]]},"758":{"position":[[277,9]]},"771":{"position":[[277,9]]},"783":{"position":[[204,9]]},"798":{"position":[[275,9]]},"813":{"position":[[275,9]]},"829":{"position":[[275,9]]},"843":{"position":[[485,9]]},"851":{"position":[[635,8]]},"852":{"position":[[314,9]]},"854":{"position":[[20,9],[98,8]]},"859":{"position":[[789,8],[881,8]]},"860":{"position":[[269,9]]},"867":{"position":[[1451,8],[1549,9]]},"868":{"position":[[455,9]]},"869":{"position":[[1497,8]]},"870":{"position":[[480,8]]},"879":{"position":[[1448,10],[1486,9],[1776,8]]},"880":{"position":[[456,9]]},"882":{"position":[[20,9],[109,8]]},"885":{"position":[[656,8]]},"886":{"position":[[270,9]]},"888":{"position":[[20,9],[164,8]]},"891":{"position":[[387,8],[396,8]]},"892":{"position":[[161,9],[213,9],[261,9],[307,9],[357,9],[415,9],[479,9],[539,9],[599,9]]},"897":{"position":[[309,8]]},"908":{"position":[[321,9]]},"924":{"position":[[321,9]]},"935":{"position":[[321,9]]},"951":{"position":[[321,9]]},"956":{"position":[[20,9],[185,8]]},"959":{"position":[[411,8]]},"960":{"position":[[185,9]]},"969":{"position":[[321,9]]},"979":{"position":[[20,9],[259,8]]},"982":{"position":[[413,8]]},"983":{"position":[[179,9]]},"992":{"position":[[238,9],[296,9]]},"994":{"position":[[20,9],[117,8]]},"997":{"position":[[381,8]]},"998":{"position":[[218,9]]},"1010":{"position":[[422,9],[532,9]]},"1012":{"position":[[20,9],[244,8]]},"1015":{"position":[[469,8]]},"1016":{"position":[[297,9]]},"1022":{"position":[[413,9]]},"1025":{"position":[[391,8]]},"1028":{"position":[[416,8]]},"1029":{"position":[[187,9]]},"1031":{"position":[[429,10]]},"1037":{"position":[[249,9]]},"1046":{"position":[[262,9]]},"1054":{"position":[[262,9]]},"1062":{"position":[[262,9]]},"1065":{"position":[[20,9],[116,8]]},"1070":{"position":[[1052,8]]},"1071":{"position":[[317,9]]},"1073":{"position":[[20,9],[368,8]]},"1076":{"position":[[822,8]]},"1078":{"position":[[204,9],[305,9],[393,9],[469,9],[564,9],[679,9],[755,9],[874,9],[954,9],[1032,9],[1106,9],[1194,9],[1291,9],[1369,9],[1460,9],[1536,9],[1608,9],[1686,9],[1777,9],[1853,9],[1951,9],[2039,9]]},"1080":{"position":[[20,9],[46,8],[825,8]]},"1085":{"position":[[1420,8]]},"1086":{"position":[[372,9]]},"1087":{"position":[[13,9]]},"1094":{"position":[[478,8]]},"1099":{"position":[[20,9],[489,8]]},"1101":{"position":[[312,8]]},"1102":{"position":[[162,9]]},"1104":{"position":[[20,9],[187,8]]},"1105":{"position":[[210,9]]},"1107":{"position":[[450,8]]},"1108":{"position":[[251,9]]},"1110":{"position":[[20,9],[507,8]]},"1113":{"position":[[512,8]]},"1114":{"position":[[237,9]]},"1122":{"position":[[160,9]]},"1126":{"position":[[289,9]]},"1128":{"position":[[20,9],[424,8]]},"1133":{"position":[[1246,8]]},"1134":{"position":[[271,9],[369,9],[473,9],[580,9],[655,9],[741,9],[862,9],[962,9],[1062,9],[1176,9],[1311,9],[1409,9],[1497,9],[1594,9],[1676,9],[1803,9],[1884,9],[1971,9],[2042,9],[2155,9],[2272,9],[2385,9],[2496,9],[2611,9],[2731,9],[2842,9],[2946,9]]},"1138":{"position":[[632,8]]},"1139":{"position":[[1180,9]]},"1145":{"position":[[277,9]]},"1151":{"position":[[617,8]]},"1152":{"position":[[374,9]]},"1162":{"position":[[545,8]]},"1163":{"position":[[311,9]]},"1171":{"position":[[281,9]]},"1178":{"position":[[458,8]]},"1179":{"position":[[444,8]]},"1180":{"position":[[284,9]]},"1182":{"position":[[598,9]]},"1185":{"position":[[235,10]]},"1189":{"position":[[453,9]]},"1191":{"position":[[602,9]]},"1195":{"position":[[667,8]]},"1197":{"position":[[459,9]]},"1201":{"position":[[671,8]]},"1207":{"position":[[542,9]]},"1214":{"position":[[217,9]]},"1221":{"position":[[221,9]]},"1230":{"position":[[1094,8],[1150,8]]},"1231":{"position":[[248,9]]},"1232":{"position":[[486,9],[577,9]]},"1241":{"position":[[56,9]]},"1248":{"position":[[486,9]]},"1254":{"position":[[244,9]]},"1260":{"position":[[331,8]]},"1261":{"position":[[316,9]]},"1262":{"position":[[602,9]]},"1270":{"position":[[204,9]]},"1278":{"position":[[278,9]]},"1287":{"position":[[193,9]]},"1292":{"position":[[5924,8]]},"1302":{"position":[[193,9]]},"1306":{"position":[[5924,8]]},"1313":{"position":[[442,8]]},"1314":{"position":[[196,9]]},"1326":{"position":[[193,9]]},"1329":{"position":[[5924,8]]},"1337":{"position":[[442,8]]},"1338":{"position":[[196,9]]},"1348":{"position":[[442,8]]},"1349":{"position":[[196,9]]},"1357":{"position":[[391,9]]},"1363":{"position":[[275,9]]},"1368":{"position":[[132,9]]},"1377":{"position":[[197,9]]},"1382":{"position":[[300,10]]},"1386":{"position":[[415,8]]},"1387":{"position":[[492,9],[1118,9]]},"1389":{"position":[[600,9]]},"1401":{"position":[[197,9]]},"1412":{"position":[[197,9]]},"1421":{"position":[[479,9]]},"1427":{"position":[[383,8]]},"1428":{"position":[[237,9]]},"1429":{"position":[[782,9]]},"1448":{"position":[[437,8]]},"1449":{"position":[[298,9],[519,8],[571,8],[660,9]]},"1453":{"position":[[1219,8],[1323,8],[1524,8],[1578,8]]},"1472":{"position":[[766,9]]},"1479":{"position":[[141,8]]}},"keywords":{}}],["resource_id",{"_index":1178,"title":{},"content":{"82":{"position":[[2441,12],[4582,12]]}},"keywords":{}}],["resource_trac",{"_index":4794,"title":{},"content":{"843":{"position":[[417,17]]}},"keywords":{}}],["resourceconfig",{"_index":3888,"title":{},"content":{"492":{"position":[[54,14]]},"665":{"position":[[54,14]]},"680":{"position":[[54,14]]},"695":{"position":[[54,14]]}},"keywords":{}}],["resources).budget",{"_index":3734,"title":{},"content":{"443":{"position":[[292,17]]}},"keywords":{}}],["resources).keyword",{"_index":3737,"title":{},"content":{"443":{"position":[[404,18]]}},"keywords":{}}],["resources)ad",{"_index":3731,"title":{},"content":{"443":{"position":[[124,12]]}},"keywords":{}}],["resources)adsad",{"_index":3733,"title":{},"content":{"443":{"position":[[214,15]]}},"keywords":{}}],["resources.y",{"_index":2923,"title":{},"content":{"288":{"position":[[744,13]]},"299":{"position":[[659,13]]}},"keywords":{}}],["resourcesa",{"_index":1301,"title":{},"content":{"88":{"position":[[277,11]]}},"keywords":{}}],["resourcesassigne",{"_index":4023,"title":{},"content":{"529":{"position":[[257,18]]}},"keywords":{}}],["resourcesbatchwriteitem",{"_index":5435,"title":{},"content":{"1122":{"position":[[101,23]]}},"keywords":{}}],["resourcescreatet",{"_index":5436,"title":{},"content":{"1122":{"position":[[132,20]]}},"keywords":{}}],["resourcesdescribestream",{"_index":3526,"title":{},"content":{"395":{"position":[[413,23]]}},"keywords":{}}],["resourcesdescribet",{"_index":3525,"title":{},"content":{"395":{"position":[[383,22]]}},"keywords":{}}],["resourcesgetrecord",{"_index":3507,"title":{},"content":{"390":{"position":[[223,19]]}},"keywords":{}}],["resourcesin",{"_index":4401,"title":{},"content":{"655":{"position":[[370,11]]}},"keywords":{}}],["resourcesscan",{"_index":3527,"title":{},"content":{"395":{"position":[[444,13]]}},"keywords":{}}],["respect",{"_index":1569,"title":{},"content":{"110":{"position":[[398,7]]},"159":{"position":[[591,13]]},"296":{"position":[[2312,10],[7722,10]]},"989":{"position":[[1203,13]]},"1004":{"position":[[1286,13]]},"1186":{"position":[[690,10]]},"1292":{"position":[[5981,7]]},"1306":{"position":[[5981,7]]},"1329":{"position":[[5981,7]]},"1467":{"position":[[1812,10]]},"1471":{"position":[[83,13]]},"1476":{"position":[[97,13]]}},"keywords":{}}],["respond",{"_index":821,"title":{},"content":{"55":{"position":[[576,7]]},"159":{"position":[[664,7]]},"164":{"position":[[1682,7]]},"842":{"position":[[2809,8]]},"1443":{"position":[[236,8],[1199,7]]},"1444":{"position":[[713,8]]}},"keywords":{}}],["respons",{"_index":75,"title":{},"content":{"2":{"position":[[237,11]]},"66":{"position":[[415,9]]},"100":{"position":[[1232,11]]},"105":{"position":[[410,9]]},"107":{"position":[[750,11]]},"108":{"position":[[144,9]]},"506":{"position":[[73,8]]},"517":{"position":[[3577,8]]},"635":{"position":[[170,8]]},"724":{"position":[[581,8]]},"754":{"position":[[747,11]]},"794":{"position":[[953,11]]},"809":{"position":[[953,11]]},"825":{"position":[[789,11]]},"989":{"position":[[1271,8]]},"1004":{"position":[[1354,8]]},"1065":{"position":[[88,9]]},"1067":{"position":[[121,9]]},"1286":{"position":[[1010,11]]},"1301":{"position":[[846,11]]},"1325":{"position":[[1010,11]]},"1434":{"position":[[122,9]]},"1439":{"position":[[1666,10]]},"1443":{"position":[[867,9],[910,9]]},"1444":{"position":[[130,8]]},"1461":{"position":[[4562,11],[4611,11],[4707,10]]}},"keywords":{}}],["responsescompaniescontactsconversationsdiscuss",{"_index":3907,"title":{},"content":{"506":{"position":[[96,49]]}},"keywords":{}}],["rest",{"_index":758,"title":{"844":{"position":[[19,4]]},"845":{"position":[[30,4]]},"847":{"position":[[12,4]]}},"content":{"44":{"position":[[297,5]]},"254":{"position":[[1330,4]]},"373":{"position":[[91,4]]},"432":{"position":[[215,4]]},"464":{"position":[[71,4],[100,4],[200,4]]},"466":{"position":[[75,4],[210,4]]},"548":{"position":[[1283,4]]},"840":{"position":[[617,4],[2258,4]]},"847":{"position":[[253,4]]},"849":{"position":[[675,4],[1448,4],[3398,4]]},"1091":{"position":[[16,4]]},"1097":{"position":[[28,4]]}},"keywords":{}}],["restart",{"_index":856,"title":{},"content":{"56":{"position":[[2295,7]]},"198":{"position":[[549,7]]},"236":{"position":[[680,8],[1179,8]]},"595":{"position":[[1294,7]]},"602":{"position":[[449,9]]},"761":{"position":[[426,8]]},"762":{"position":[[543,8]]},"774":{"position":[[426,8]]},"775":{"position":[[543,8]]},"801":{"position":[[432,8]]},"802":{"position":[[543,8]]},"816":{"position":[[432,8]]},"817":{"position":[[543,8]]},"832":{"position":[[432,8]]},"833":{"position":[[543,8]]},"917":{"position":[[1882,7]]},"922":{"position":[[948,10],[2694,7]]},"942":{"position":[[270,8]]},"965":{"position":[[1882,7]]},"1292":{"position":[[6034,7]]},"1306":{"position":[[6034,7]]},"1329":{"position":[[6034,7]]},"1438":{"position":[[321,10]]},"1439":{"position":[[1066,7]]},"1453":{"position":[[691,8]]}},"keywords":{}}],["restart_lsn",{"_index":5055,"title":{},"content":{"922":{"position":[[791,11],[1053,11],[1113,11],[1313,11],[1405,11]]}},"keywords":{}}],["restart_lsnof",{"_index":5065,"title":{},"content":{"922":{"position":[[2993,13]]}},"keywords":{}}],["restor",{"_index":6216,"title":{},"content":{"1292":{"position":[[6083,7]]},"1306":{"position":[[6083,7]]},"1329":{"position":[[6083,7]]},"1379":{"position":[[3946,7]]},"1403":{"position":[[3946,7]]},"1414":{"position":[[3946,7]]}},"keywords":{}}],["restrict",{"_index":1063,"title":{"72":{"position":[[7,13]]}},"content":{"72":{"position":[[636,12]]},"161":{"position":[[856,11]]},"202":{"position":[[415,10]]},"217":{"position":[[1979,11]]},"309":{"position":[[206,12],[870,11]]},"366":{"position":[[606,10],[938,10]]},"452":{"position":[[138,11]]},"726":{"position":[[180,10]]},"752":{"position":[[499,10]]},"753":{"position":[[1155,10]]},"791":{"position":[[452,10]]},"793":{"position":[[1126,10]]},"808":{"position":[[1072,10]]},"903":{"position":[[632,10],[964,10]]},"912":{"position":[[1403,11]]},"915":{"position":[[632,10],[964,10]]},"917":{"position":[[143,10],[852,10]]},"919":{"position":[[1377,10]]},"930":{"position":[[632,10],[964,10]]},"963":{"position":[[786,10],[1118,10]]},"965":{"position":[[143,10],[852,10]]},"1105":{"position":[[122,11]]},"1140":{"position":[[2689,8]]},"1292":{"position":[[2986,8]]},"1306":{"position":[[2986,8]]},"1316":{"position":[[2689,8]]},"1329":{"position":[[2986,8]]},"1340":{"position":[[2689,8]]},"1351":{"position":[[2689,8]]},"1370":{"position":[[943,8]]},"1379":{"position":[[4004,8]]},"1403":{"position":[[4004,8]]},"1414":{"position":[[4004,8]]},"1431":{"position":[[2712,8]]}},"keywords":{}}],["result",{"_index":394,"title":{"185":{"position":[[12,8]]}},"content":{"13":{"position":[[689,9]]},"32":{"position":[[518,9]]},"40":{"position":[[35,7]]},"56":{"position":[[820,6]]},"61":{"position":[[791,9],[839,7]]},"80":{"position":[[654,9]]},"88":{"position":[[209,9]]},"109":{"position":[[499,7]]},"112":{"position":[[97,7]]},"113":{"position":[[946,8]]},"115":{"position":[[1402,7],[1557,7]]},"124":{"position":[[655,6]]},"132":{"position":[[266,7]]},"197":{"position":[[1530,9]]},"254":{"position":[[3897,7]]},"255":{"position":[[123,9]]},"275":{"position":[[1102,7]]},"295":{"position":[[929,8]]},"296":{"position":[[363,6],[1071,6],[1184,6],[1334,6],[4561,6],[7186,8],[7665,8]]},"316":{"position":[[123,9]]},"321":{"position":[[1381,7],[1687,7]]},"322":{"position":[[1867,7]]},"373":{"position":[[815,7]]},"379":{"position":[[67,6],[340,6],[605,9]]},"480":{"position":[[98,9]]},"483":{"position":[[611,8]]},"488":{"position":[[656,9],[1064,6]]},"517":{"position":[[1641,6],[2802,6],[2957,6]]},"578":{"position":[[320,9]]},"595":{"position":[[1428,6]]},"659":{"position":[[813,9],[1221,6]]},"676":{"position":[[656,9],[1064,6]]},"691":{"position":[[656,9],[1064,6]]},"747":{"position":[[253,7],[334,7]]},"821":{"position":[[144,7],[602,6]]},"909":{"position":[[538,7],[634,7],[1074,7]]},"912":{"position":[[152,7],[618,6]]},"925":{"position":[[538,7],[634,7],[1074,7]]},"936":{"position":[[538,7],[634,7],[1074,7]]},"952":{"position":[[538,7],[634,7],[1074,7]]},"970":{"position":[[538,7],[634,7],[1074,7]]},"1085":{"position":[[919,6]]},"1133":{"position":[[1448,8]]},"1140":{"position":[[2725,6]]},"1157":{"position":[[129,6]]},"1179":{"position":[[1095,6]]},"1182":{"position":[[478,9]]},"1191":{"position":[[480,9]]},"1192":{"position":[[425,6]]},"1196":{"position":[[981,8]]},"1206":{"position":[[933,7],[1109,7]]},"1230":{"position":[[1346,7]]},"1243":{"position":[[857,6]]},"1262":{"position":[[480,9]]},"1316":{"position":[[2725,6]]},"1340":{"position":[[2725,6]]},"1351":{"position":[[2725,6]]},"1379":{"position":[[4051,6]]},"1389":{"position":[[479,9]]},"1394":{"position":[[422,6]]},"1403":{"position":[[4051,6]]},"1414":{"position":[[4051,6]]},"1423":{"position":[[432,6]]},"1431":{"position":[[2748,6]]},"1464":{"position":[[874,6]]},"1467":{"position":[[2921,6]]}},"keywords":{}}],["resum",{"_index":1770,"title":{},"content":{"138":{"position":[[370,7]]},"141":{"position":[[680,7]]},"142":{"position":[[483,7]]},"209":{"position":[[1193,7]]},"785":{"position":[[400,6]]},"922":{"position":[[883,6]]},"1292":{"position":[[3029,6]]},"1306":{"position":[[3029,6]]},"1329":{"position":[[3029,6]]}},"keywords":{}}],["retain",{"_index":1081,"title":{},"content":{"74":{"position":[[378,6]]},"163":{"position":[[295,6]]},"752":{"position":[[892,6]]},"791":{"position":[[897,6]]},"922":{"position":[[1526,6],[2075,7]]},"1292":{"position":[[3077,6]]},"1306":{"position":[[3077,6]]},"1329":{"position":[[3077,6]]}},"keywords":{}}],["retent",{"_index":57,"title":{"764":{"position":[[20,10]]},"777":{"position":[[20,10]]},"804":{"position":[[20,10]]},"819":{"position":[[20,10]]},"835":{"position":[[20,10]]},"922":{"position":[[4,9]]}},"content":{"1":{"position":[[850,10]]},"209":{"position":[[1640,9],[1680,9]]},"323":{"position":[[732,9]]},"757":{"position":[[1714,9],[1776,10]]},"764":{"position":[[43,9],[130,9],[776,9]]},"767":{"position":[[1237,9],[1560,9],[2245,9],[2353,9]]},"770":{"position":[[1714,9],[1776,10]]},"777":{"position":[[43,9],[130,9],[776,9]]},"785":{"position":[[800,9],[892,9]]},"792":{"position":[[1533,9],[2237,9],[2334,9]]},"797":{"position":[[1714,9],[1776,10]]},"804":{"position":[[43,9],[128,9],[774,9]]},"812":{"position":[[1714,9],[1776,10]]},"819":{"position":[[43,9],[128,9],[774,9]]},"824":{"position":[[1303,9],[1624,9],[2359,9],[2465,9]]},"828":{"position":[[1714,9],[1776,10]]},"835":{"position":[[43,9],[128,9],[774,9]]},"879":{"position":[[1202,9],[1234,9],[1320,9]]},"922":{"position":[[448,10],[2200,9]]},"1356":{"position":[[1218,9]]}},"keywords":{}}],["retri",{"_index":2522,"title":{},"content":{"236":{"position":[[1016,8]]},"387":{"position":[[974,7],[992,7]]},"1439":{"position":[[1539,7]]}},"keywords":{}}],["retriev",{"_index":2633,"title":{},"content":{"246":{"position":[[123,8]]},"384":{"position":[[268,8],[311,8]]},"446":{"position":[[80,10]]},"975":{"position":[[281,9]]},"1276":{"position":[[237,9]]},"1434":{"position":[[1362,10],[1685,10]]},"1444":{"position":[[452,9]]},"1471":{"position":[[193,8],[733,8],[888,8]]}},"keywords":{}}],["return",{"_index":1393,"title":{},"content":{"97":{"position":[[461,8],[540,10]]},"105":{"position":[[390,6]]},"107":{"position":[[3546,6]]},"108":{"position":[[112,6]]},"112":{"position":[[273,6]]},"115":{"position":[[736,9]]},"138":{"position":[[703,6]]},"141":{"position":[[821,6]]},"142":{"position":[[658,6]]},"169":{"position":[[1587,6]]},"191":{"position":[[2260,6]]},"192":{"position":[[2287,6]]},"240":{"position":[[2370,6]]},"270":{"position":[[575,7]]},"274":{"position":[[884,7]]},"275":{"position":[[889,6]]},"278":{"position":[[1297,9]]},"281":{"position":[[1487,6]]},"296":{"position":[[6194,6],[6348,6],[6523,6]]},"315":{"position":[[2009,6],[2292,6],[2395,9]]},"340":{"position":[[447,6]]},"341":{"position":[[142,7]]},"491":{"position":[[383,6]]},"560":{"position":[[321,9]]},"664":{"position":[[404,6],[639,6]]},"679":{"position":[[383,6]]},"694":{"position":[[383,6]]},"912":{"position":[[1066,7]]},"1140":{"position":[[2760,6],[2799,9],[2833,7]]},"1276":{"position":[[276,8]]},"1292":{"position":[[3124,6],[3238,9],[3288,7]]},"1306":{"position":[[3124,6],[3238,9],[3288,7]]},"1316":{"position":[[2760,6],[2799,9],[2833,7]]},"1329":{"position":[[3124,6],[3238,9],[3288,7]]},"1340":{"position":[[2760,6],[2799,9],[2833,7]]},"1351":{"position":[[2760,6],[2799,9],[2833,7]]},"1370":{"position":[[957,9]]},"1379":{"position":[[4104,6],[4147,7]]},"1403":{"position":[[4104,6],[4147,7]]},"1414":{"position":[[4104,6],[4147,7]]},"1431":{"position":[[2783,6],[2822,9],[2856,7]]},"1439":{"position":[[1649,9]]}},"keywords":{}}],["returned_sql",{"_index":6078,"title":{},"content":{"1292":{"position":[[3183,13]]},"1306":{"position":[[3183,13]]},"1329":{"position":[[3183,13]]}},"keywords":{}}],["returningsyntax",{"_index":2843,"title":{},"content":{"278":{"position":[[1434,15]]}},"keywords":{}}],["returnmyorg/marketing/lead",{"_index":2820,"title":{},"content":{"274":{"position":[[1178,27]]}},"keywords":{}}],["reus",{"_index":1736,"title":{"133":{"position":[[0,7]]}},"content":{"161":{"position":[[373,6],[570,6]]},"198":{"position":[[421,6]]},"314":{"position":[[2093,5]]},"478":{"position":[[328,7]]},"599":{"position":[[328,7]]},"1292":{"position":[[3339,5]]},"1306":{"position":[[3339,5]]},"1329":{"position":[[3339,5]]}},"keywords":{}}],["reveal",{"_index":1829,"title":{},"content":{"144":{"position":[[402,6]]}},"keywords":{}}],["revers",{"_index":6090,"title":{},"content":{"1292":{"position":[[3386,7]]},"1306":{"position":[[3386,7]]},"1329":{"position":[[3386,7]]}},"keywords":{}}],["revert",{"_index":5075,"title":{},"content":{"942":{"position":[[226,9]]},"1379":{"position":[[4202,6]]},"1403":{"position":[[4202,6]]},"1414":{"position":[[4202,6]]}},"keywords":{}}],["review",{"_index":365,"title":{},"content":{"12":{"position":[[272,6]]},"25":{"position":[[144,6]]},"53":{"position":[[384,8]]},"84":{"position":[[1371,8]]},"218":{"position":[[1846,6]]},"229":{"position":[[217,6],[714,6]]},"230":{"position":[[555,6]]},"259":{"position":[[1349,6],[2895,6]]},"291":{"position":[[1779,6]]},"302":{"position":[[1688,6]]},"529":{"position":[[659,6],[675,7]]},"554":{"position":[[321,8],[407,6]]},"690":{"position":[[307,6]]},"724":{"position":[[313,6]]},"1096":{"position":[[241,7]]}},"keywords":{}}],["revok",{"_index":1158,"title":{},"content":{"82":{"position":[[936,6]]},"242":{"position":[[444,6],[484,6],[555,6]]},"341":{"position":[[345,6],[476,6]]},"1140":{"position":[[2875,6]]},"1292":{"position":[[3443,6]]},"1306":{"position":[[3443,6]]},"1316":{"position":[[2875,6]]},"1329":{"position":[[3443,6]]},"1340":{"position":[[2875,6]]},"1351":{"position":[[2875,6]]},"1379":{"position":[[4249,6]]},"1394":{"position":[[529,6]]},"1403":{"position":[[4249,6]]},"1414":{"position":[[4249,6]]},"1431":{"position":[[2898,6]]}},"keywords":{}}],["revolution",{"_index":2319,"title":{},"content":{"210":{"position":[[2111,13]]}},"keywords":{}}],["rfc",{"_index":3590,"title":{},"content":{"417":{"position":[[387,3]]},"438":{"position":[[387,3]]},"502":{"position":[[847,3]]},"545":{"position":[[387,3]]},"1021":{"position":[[1424,3]]},"1358":{"position":[[365,3]]}},"keywords":{}}],["rfc3339",{"_index":4602,"title":{},"content":{"754":{"position":[[372,7]]},"794":{"position":[[245,7]]},"809":{"position":[[245,7]]},"825":{"position":[[245,7]]}},"keywords":{}}],["rh",{"_index":3003,"title":{},"content":{"296":{"position":[[2048,3]]},"1459":{"position":[[1592,5],[1655,3]]},"1467":{"position":[[122,3],[258,3]]}},"keywords":{}}],["rich",{"_index":1858,"title":{},"content":{"156":{"position":[[319,4]]}},"keywords":{}}],["ride",{"_index":2104,"title":{},"content":{"189":{"position":[[107,4],[212,5]]}},"keywords":{}}],["right",{"_index":2086,"title":{},"content":{"183":{"position":[[4281,6]]},"206":{"position":[[861,5]]},"240":{"position":[[4138,5]]},"296":{"position":[[1969,5],[7543,5]]},"552":{"position":[[165,5]]},"847":{"position":[[362,5]]},"1140":{"position":[[2911,5]]},"1192":{"position":[[552,5]]},"1209":{"position":[[400,5]]},"1292":{"position":[[3494,5]]},"1306":{"position":[[3494,5]]},"1316":{"position":[[2911,5]]},"1329":{"position":[[3494,5]]},"1340":{"position":[[2911,5]]},"1351":{"position":[[2911,5]]},"1370":{"position":[[971,5]]},"1379":{"position":[[4311,5]]},"1394":{"position":[[546,5]]},"1403":{"position":[[4311,5]]},"1414":{"position":[[4311,5]]},"1431":{"position":[[2934,5]]},"1434":{"position":[[270,5],[593,5],[705,5],[783,5],[1282,5],[1526,5],[1911,5],[2012,5]]},"1459":{"position":[[1574,6]]},"1464":{"position":[[85,5],[743,5]]},"1467":{"position":[[43,5]]},"1476":{"position":[[945,5]]}},"keywords":{}}],["ring/cryptokeys/your",{"_index":1169,"title":{},"content":{"82":{"position":[[1829,20],[2515,20],[4153,20],[4656,20]]}},"keywords":{}}],["risk",{"_index":4656,"title":{},"content":{"764":{"position":[[205,4],[1110,5]]},"777":{"position":[[205,4],[1110,5]]},"804":{"position":[[203,4],[1108,5]]},"819":{"position":[[203,4],[1108,5]]},"835":{"position":[[203,4],[1108,5]]}},"keywords":{}}],["rlike",{"_index":6097,"title":{},"content":{"1292":{"position":[[3537,5]]},"1306":{"position":[[3537,5]]},"1329":{"position":[[3537,5]]},"1394":{"position":[[566,5]]}},"keywords":{}}],["robust",{"_index":2187,"title":{},"content":{"197":{"position":[[602,6]]},"232":{"position":[[751,6]]},"237":{"position":[[2602,6]]},"241":{"position":[[232,6]]},"319":{"position":[[185,6]]}},"keywords":{}}],["rocksdb",{"_index":1597,"title":{},"content":{"112":{"position":[[699,7]]}},"keywords":{}}],["rockset",{"_index":3169,"title":{"325":{"position":[[13,8]]},"1353":{"position":[[0,7]]}},"content":{"325":{"position":[[46,8]]},"1120":{"position":[[1669,7]]},"1354":{"position":[[40,7],[116,7],[199,7]]},"1355":{"position":[[113,7],[209,7]]},"1356":{"position":[[69,7],[121,7],[250,7],[537,7],[621,7],[707,7],[861,7],[1320,7],[1355,7],[1466,7]]},"1358":{"position":[[5,7],[76,8],[195,7],[257,7],[460,7],[588,7]]}},"keywords":{}}],["rockset'",{"_index":6274,"title":{},"content":{"1358":{"position":[[708,9]]}},"keywords":{}}],["rockset:dev",{"_index":5429,"title":{},"content":{"1120":{"position":[[1728,11]]},"1357":{"position":[[241,11]]}},"keywords":{}}],["role",{"_index":902,"title":{"943":{"position":[[21,4]]},"944":{"position":[[40,5]]}},"content":{"60":{"position":[[331,5]]},"171":{"position":[[309,5]]},"173":{"position":[[796,5],[868,4],[1210,5]]},"191":{"position":[[771,4],[806,4],[858,4],[892,4],[1268,4],[1637,4],[1718,4],[1864,4],[1906,4],[2009,4],[2067,4],[2103,4]]},"192":{"position":[[1152,5]]},"202":{"position":[[117,4],[269,5]]},"240":{"position":[[732,4],[767,4],[819,4],[853,4],[1229,4],[1598,4],[1679,4],[1825,4],[1867,4],[1970,4],[2028,4],[2064,4],[2271,6]]},"242":{"position":[[479,4],[536,4],[605,4],[695,4],[748,4]]},"288":{"position":[[447,4],[679,4]]},"299":{"position":[[594,4]]},"341":{"position":[[96,6],[131,5],[212,5],[339,5]]},"366":{"position":[[88,4]]},"367":{"position":[[392,4]]},"400":{"position":[[128,5]]},"408":{"position":[[248,4],[349,4]]},"475":{"position":[[215,5]]},"477":{"position":[[144,6],[157,5],[853,5],[993,5]]},"543":{"position":[[285,4]]},"571":{"position":[[648,4]]},"582":{"position":[[261,4]]},"591":{"position":[[134,4]]},"597":{"position":[[178,5]]},"598":{"position":[[107,5],[118,4],[955,4]]},"617":{"position":[[572,4]]},"622":{"position":[[369,5]]},"723":{"position":[[81,4]]},"780":{"position":[[125,4]]},"839":{"position":[[131,4],[266,4]]},"840":{"position":[[865,4],[930,5],[955,4],[1001,5],[1459,4],[1839,4],[1901,5],[2083,4],[2106,5],[2123,4]]},"842":{"position":[[208,4],[230,4],[300,5]]},"848":{"position":[[131,4],[303,4]]},"849":{"position":[[1478,4],[1543,5],[1568,4],[1614,5],[2350,4],[2535,5],[2887,4],[2941,5],[2980,4],[3223,4],[3246,5],[3263,4]]},"903":{"position":[[114,4]]},"915":{"position":[[114,4]]},"917":{"position":[[125,5],[399,5]]},"930":{"position":[[114,4]]},"931":{"position":[[1153,4]]},"943":{"position":[[56,4],[87,4],[150,4],[190,5],[285,5],[350,4],[510,4],[542,4],[570,4],[633,5],[676,5],[754,6],[767,5],[842,5]]},"944":{"position":[[21,4]]},"963":{"position":[[268,4]]},"965":{"position":[[125,5],[399,5]]},"1032":{"position":[[586,4],[638,4],[671,4],[723,4],[757,4],[925,4],[1278,4],[1483,4],[1587,4],[1688,4],[1792,4],[1893,4]]},"1040":{"position":[[679,4]]},"1050":{"position":[[679,4]]},"1058":{"position":[[679,4]]},"1176":{"position":[[203,6]]},"1177":{"position":[[208,5]]},"1185":{"position":[[170,4]]},"1188":{"position":[[532,4],[646,4]]},"1194":{"position":[[82,4],[205,5]]},"1204":{"position":[[132,5]]},"1227":{"position":[[124,4],[249,6]]},"1228":{"position":[[139,4],[264,6]]},"1245":{"position":[[524,4]]},"1251":{"position":[[157,4]]},"1292":{"position":[[3584,4]]},"1306":{"position":[[3584,4]]},"1329":{"position":[[3584,4]]},"1354":{"position":[[108,5]]},"1356":{"position":[[144,4]]},"1379":{"position":[[4364,4]]},"1382":{"position":[[235,4]]},"1383":{"position":[[719,4],[754,4],[806,4],[840,4],[1216,4],[1585,4],[1666,4],[1812,4],[1854,4],[1957,4],[2015,4],[2051,4]]},"1386":{"position":[[591,5],[597,4],[602,4]]},"1403":{"position":[[4364,4]]},"1414":{"position":[[4364,4]]},"1417":{"position":[[342,4]]},"1418":{"position":[[149,6],[193,4]]},"1461":{"position":[[3844,5]]}},"keywords":{}}],["role.click",{"_index":5084,"title":{},"content":{"943":{"position":[[483,10]]}},"keywords":{}}],["role.in",{"_index":5085,"title":{},"content":{"943":{"position":[[498,7]]}},"keywords":{}}],["role=acmeco",{"_index":3222,"title":{},"content":{"341":{"position":[[233,12],[420,12]]}},"keywords":{}}],["role=outsid",{"_index":3225,"title":{},"content":{"341":{"position":[[361,12]]}},"keywords":{}}],["role_id",{"_index":4749,"title":{},"content":{"842":{"position":[[199,8]]},"843":{"position":[[289,8]]}},"keywords":{}}],["role_nam",{"_index":5251,"title":{},"content":{"1042":{"position":[[1065,10]]},"1043":{"position":[[1729,10]]},"1051":{"position":[[1991,10]]},"1059":{"position":[[1784,10]]}},"keywords":{}}],["roleaccess",{"_index":4733,"title":{},"content":{"839":{"position":[[224,10]]},"848":{"position":[[261,10]]}},"keywords":{}}],["rolean",{"_index":4550,"title":{},"content":{"739":{"position":[[81,6]]}},"keywords":{}}],["roles.select",{"_index":5083,"title":{},"content":{"943":{"position":[[430,12]]}},"keywords":{}}],["roles/bigquery.dataeditor",{"_index":5786,"title":{},"content":{"1176":{"position":[[210,25]]},"1177":{"position":[[214,26]]}},"keywords":{}}],["roles/bigquery.jobus",{"_index":5790,"title":{},"content":{"1177":{"position":[[241,23]]}},"keywords":{}}],["roles/datastore.view",{"_index":2922,"title":{},"content":{"288":{"position":[[403,23]]},"591":{"position":[[90,23]]}},"keywords":{}}],["roles/pubsub.editoror",{"_index":5888,"title":{},"content":{"1227":{"position":[[129,21]]},"1228":{"position":[[144,21]]}},"keywords":{}}],["roles/storage.admin",{"_index":1994,"title":{},"content":{"171":{"position":[[289,19]]}},"keywords":{}}],["roles/storage.objectadmin.click",{"_index":5791,"title":{},"content":{"1177":{"position":[[269,31]]}},"keywords":{}}],["roles/storage.objectcreatorfor",{"_index":5883,"title":{},"content":{"1211":{"position":[[168,30]]},"1218":{"position":[[168,30]]}},"keywords":{}}],["rolesavatarsboardsdashboardsfiltersfilt",{"_index":4465,"title":{},"content":{"709":{"position":[[80,41]]}},"keywords":{}}],["rolesgroup",{"_index":5446,"title":{},"content":{"1128":{"position":[[132,10]]}},"keywords":{}}],["rolesto",{"_index":4284,"title":{},"content":{"598":{"position":[[816,7]]}},"keywords":{}}],["roll",{"_index":5296,"title":{},"content":{"1077":{"position":[[702,5]]},"1440":{"position":[[327,4]]},"1471":{"position":[[580,6]]}},"keywords":{}}],["rollback",{"_index":1400,"title":{},"content":{"97":{"position":[[908,8]]},"1140":{"position":[[2947,8]]},"1292":{"position":[[3629,8]]},"1306":{"position":[[3629,8]]},"1316":{"position":[[2947,8]]},"1329":{"position":[[3629,8]]},"1340":{"position":[[2947,8]]},"1351":{"position":[[2947,8]]},"1370":{"position":[[984,8]]},"1379":{"position":[[4415,8]]},"1403":{"position":[[4415,8]]},"1414":{"position":[[4415,8]]},"1431":{"position":[[2970,8]]}},"keywords":{}}],["rollup",{"_index":5650,"title":{},"content":{"1140":{"position":[[2987,6]]},"1292":{"position":[[3679,6]]},"1306":{"position":[[3679,6]]},"1316":{"position":[[2987,6]]},"1329":{"position":[[3679,6]]},"1340":{"position":[[2987,6]]},"1351":{"position":[[2987,6]]},"1379":{"position":[[4471,6]]},"1403":{"position":[[4471,6]]},"1414":{"position":[[4471,6]]},"1431":{"position":[[3010,6]]}},"keywords":{}}],["root",{"_index":1313,"title":{},"content":{"90":{"position":[[409,4]]},"237":{"position":[[2229,4]]},"413":{"position":[[211,4]]},"904":{"position":[[2272,4]]},"917":{"position":[[1781,4]]},"918":{"position":[[2564,4]]},"931":{"position":[[1934,4]]},"945":{"position":[[426,4]]},"965":{"position":[[1781,4]]},"1008":{"position":[[1954,4]]},"1020":{"position":[[1097,6]]},"1123":{"position":[[184,4],[203,4],[545,4]]},"1142":{"position":[[139,4]]},"1149":{"position":[[594,4]]},"1160":{"position":[[139,4]]},"1168":{"position":[[139,4]]},"1201":{"position":[[476,4]]},"1258":{"position":[[188,4]]}},"keywords":{}}],["root/a",{"_index":5196,"title":{},"content":{"1020":{"position":[[1548,8],[1587,8]]}},"keywords":{}}],["root/b",{"_index":5191,"title":{},"content":{"1020":{"position":[[1086,9],[1742,8]]}},"keywords":{}}],["root/b/.a",{"_index":5200,"title":{},"content":{"1020":{"position":[[1703,10]]}},"keywords":{}}],["root/b/.ani",{"_index":5198,"title":{},"content":{"1020":{"position":[[1609,12]]}},"keywords":{}}],["root/b/data.csv",{"_index":5193,"title":{},"content":{"1020":{"position":[[1189,16],[1395,16]]}},"keywords":{}}],["root/c",{"_index":5199,"title":{},"content":{"1020":{"position":[[1650,8],[1682,8],[1866,9]]}},"keywords":{}}],["rotat",{"_index":6104,"title":{},"content":{"1292":{"position":[[3729,6]]},"1306":{"position":[[3729,6]]},"1329":{"position":[[3729,6]]}},"keywords":{}}],["roughli",{"_index":1558,"title":{},"content":{"109":{"position":[[133,7]]},"320":{"position":[[744,7]]},"870":{"position":[[107,7]]},"1391":{"position":[[690,7],[775,7]]}},"keywords":{}}],["round",{"_index":6692,"title":{},"content":{"1475":{"position":[[395,7]]}},"keywords":{}}],["rout",{"_index":6522,"title":{},"content":{"1449":{"position":[[459,5]]}},"keywords":{}}],["routin",{"_index":6108,"title":{},"content":{"1292":{"position":[[3779,7]]},"1306":{"position":[[3779,7]]},"1329":{"position":[[3779,7]]},"1379":{"position":[[4516,7]]},"1403":{"position":[[4516,7]]},"1414":{"position":[[4516,7]]}},"keywords":{}}],["row",{"_index":976,"title":{},"content":{"66":{"position":[[381,4]]},"71":{"position":[[612,4],[695,4]]},"97":{"position":[[446,4]]},"107":{"position":[[3565,4]]},"121":{"position":[[1528,3],[1598,3]]},"138":{"position":[[300,5]]},"141":{"position":[[610,5]]},"142":{"position":[[413,5]]},"154":{"position":[[489,4],[538,5],[643,3],[787,4]]},"218":{"position":[[1193,4]]},"238":{"position":[[1184,5],[1254,4],[1323,4]]},"259":{"position":[[117,4],[1798,4]]},"278":{"position":[[1480,4]]},"308":{"position":[[1055,4],[1128,4]]},"370":{"position":[[807,4]]},"419":{"position":[[2014,4],[2253,3],[2392,3]]},"441":{"position":[[623,4],[862,3],[1001,3]]},"466":{"position":[[142,4]]},"480":{"position":[[108,4],[471,5],[636,4],[730,4],[893,4]]},"504":{"position":[[1643,4],[1882,3],[2021,3]]},"547":{"position":[[2016,4],[2255,3],[2394,3]]},"616":{"position":[[116,3],[190,3]]},"639":{"position":[[1641,4],[1880,3],[2019,3]]},"757":{"position":[[1574,4]]},"761":{"position":[[230,5]]},"770":{"position":[[1574,4]]},"774":{"position":[[230,5]]},"789":{"position":[[116,3],[764,3],[808,3],[836,4]]},"797":{"position":[[1574,4]]},"801":{"position":[[236,5]]},"807":{"position":[[116,3]]},"812":{"position":[[1574,4]]},"816":{"position":[[236,5]]},"821":{"position":[[1115,5],[1351,5],[1437,4],[1569,5]]},"823":{"position":[[116,3]]},"828":{"position":[[1574,4]]},"832":{"position":[[236,5]]},"842":{"position":[[2578,4],[2679,4]]},"867":{"position":[[899,4],[1058,4]]},"879":{"position":[[1056,4]]},"907":{"position":[[590,4]]},"909":{"position":[[427,3],[568,3],[957,3]]},"912":{"position":[[1447,4]]},"923":{"position":[[590,4]]},"925":{"position":[[427,3],[568,3],[957,3]]},"934":{"position":[[590,4]]},"936":{"position":[[427,3],[568,3],[957,3]]},"950":{"position":[[590,4]]},"952":{"position":[[427,3],[568,3],[957,3]]},"968":{"position":[[590,4]]},"970":{"position":[[427,3],[568,3],[957,3]]},"1023":{"position":[[1997,4],[2236,3],[2375,3]]},"1045":{"position":[[575,4]]},"1053":{"position":[[575,4]]},"1061":{"position":[[575,4]]},"1087":{"position":[[101,4],[294,3]]},"1123":{"position":[[422,3],[517,3]]},"1140":{"position":[[3025,3],[3059,4]]},"1144":{"position":[[944,4]]},"1170":{"position":[[906,3],[916,3],[944,4],[954,3],[1036,3],[1098,3]]},"1209":{"position":[[417,3],[429,4]]},"1213":{"position":[[621,4]]},"1220":{"position":[[583,3],[593,3],[621,4],[631,3],[713,3],[775,3]]},"1292":{"position":[[3823,3],[3864,4]]},"1306":{"position":[[3823,3],[3864,4]]},"1316":{"position":[[3025,3],[3059,4]]},"1329":{"position":[[3823,3],[3864,4]]},"1340":{"position":[[3025,3],[3059,4]]},"1351":{"position":[[3025,3],[3059,4]]},"1370":{"position":[[1000,3],[1012,4]]},"1379":{"position":[[4563,3],[4726,4]]},"1391":{"position":[[884,4],[939,4]]},"1394":{"position":[[582,3],[600,4]]},"1403":{"position":[[4563,3],[4726,4]]},"1414":{"position":[[4563,3],[4726,4]]},"1431":{"position":[[3048,3],[3082,4]]}},"keywords":{}}],["row.binari",{"_index":4575,"title":{},"content":{"750":{"position":[[118,10]]},"766":{"position":[[118,10]]}},"keywords":{}}],["row_count",{"_index":6114,"title":{},"content":{"1292":{"position":[[3908,9]]},"1306":{"position":[[3908,9]]},"1329":{"position":[[3908,9]]}},"keywords":{}}],["row_format",{"_index":6119,"title":{},"content":{"1292":{"position":[[3959,10]]},"1306":{"position":[[3959,10]]},"1329":{"position":[[3959,10]]}},"keywords":{}}],["row_id",{"_index":3012,"title":{},"content":{"296":{"position":[[4857,7],[5066,7]]}},"keywords":{}}],["row_numb",{"_index":5653,"title":{},"content":{"1140":{"position":[[3099,10]]},"1292":{"position":[[4007,10]]},"1306":{"position":[[4007,10]]},"1316":{"position":[[3099,10]]},"1329":{"position":[[4007,10]]},"1340":{"position":[[3099,10]]},"1351":{"position":[[3099,10]]},"1431":{"position":[[3122,10]]}},"keywords":{}}],["rowbinlog_row_metadata",{"_index":4667,"title":{},"content":{"767":{"position":[[1085,23]]},"792":{"position":[[1390,23]]},"824":{"position":[[1151,23]]}},"keywords":{}}],["rowcount",{"_index":6349,"title":{},"content":{"1379":{"position":[[4609,8]]},"1403":{"position":[[4609,8]]},"1414":{"position":[[4609,8]]}},"keywords":{}}],["rowguidcol",{"_index":6350,"title":{},"content":{"1379":{"position":[[4669,10]]},"1403":{"position":[[4669,10]]},"1414":{"position":[[4669,10]]}},"keywords":{}}],["rows.monoton",{"_index":3835,"title":{},"content":{"480":{"position":[[809,18]]}},"keywords":{}}],["rpc",{"_index":3197,"title":{},"content":{"330":{"position":[[378,6]]},"1437":{"position":[[1383,4],[1494,3]]},"1442":{"position":[[127,4],[1330,4],[1434,3]]},"1444":{"position":[[501,4]]}},"keywords":{}}],["rsa",{"_index":1241,"title":{},"content":{"83":{"position":[[1486,3],[2341,3]]},"221":{"position":[[1109,3],[1156,3],[1249,3]]},"222":{"position":[[354,3],[401,3],[494,3]]},"223":{"position":[[320,3],[367,3],[460,3],[766,3]]},"224":{"position":[[373,3],[420,3],[513,3]]},"371":{"position":[[405,3],[1260,3]]},"868":{"position":[[373,3]]},"880":{"position":[[374,3]]},"1139":{"position":[[292,3],[1147,3]]},"1272":{"position":[[235,3]]},"1298":{"position":[[320,3],[367,3],[460,3],[766,3]]},"1322":{"position":[[354,3],[401,3],[494,3]]},"1335":{"position":[[354,3],[401,3],[494,3]]},"1346":{"position":[[320,3],[367,3],[460,3],[766,3]]},"1384":{"position":[[383,3],[995,3]]}},"keywords":{}}],["rsa_key.p8",{"_index":6370,"title":{},"content":{"1384":{"position":[[331,10],[391,10]]}},"keywords":{}}],["rsa_key.pub",{"_index":6373,"title":{},"content":{"1384":{"position":[[415,11],[478,11],[1010,11]]}},"keywords":{}}],["rsa_public_key='miibijanbgkqh",{"_index":6377,"title":{},"content":{"1384":{"position":[[662,33]]}},"keywords":{}}],["rsa_public_key_fp",{"_index":6383,"title":{},"content":{"1384":{"position":[[913,21]]}},"keywords":{}}],["rtree",{"_index":6124,"title":{},"content":{"1292":{"position":[[4047,5]]},"1306":{"position":[[4047,5]]},"1329":{"position":[[4047,5]]}},"keywords":{}}],["rule",{"_index":1290,"title":{},"content":{"87":{"position":[[552,4]]},"92":{"position":[[768,5]]},"616":{"position":[[74,5]]},"767":{"position":[[326,4],[350,4]]},"792":{"position":[[639,4],[663,4]]},"793":{"position":[[204,4]]},"824":{"position":[[431,4],[455,4]]},"904":{"position":[[430,4],[454,4]]},"918":{"position":[[639,4],[663,4]]},"919":{"position":[[204,4]]},"1042":{"position":[[1469,6]]},"1043":{"position":[[204,4]]},"1051":{"position":[[430,4],[454,4]]},"1283":{"position":[[240,4]]},"1289":{"position":[[513,4],[537,4]]},"1311":{"position":[[76,4]]},"1321":{"position":[[293,4],[317,4]]},"1334":{"position":[[381,4],[405,4]]},"1373":{"position":[[412,4],[436,4]]},"1374":{"position":[[412,4],[436,4]]},"1379":{"position":[[4781,4]]},"1403":{"position":[[4781,4]]},"1408":{"position":[[742,6]]},"1409":{"position":[[204,4]]},"1414":{"position":[[4781,4]]},"1439":{"position":[[1299,5]]}},"keywords":{}}],["rulethat",{"_index":4596,"title":{},"content":{"753":{"position":[[211,8]]}},"keywords":{}}],["run",{"_index":518,"title":{"977":{"position":[[0,7]]}},"content":{"19":{"position":[[288,3]]},"42":{"position":[[665,7]]},"44":{"position":[[156,7]]},"53":{"position":[[15,7],[265,4]]},"54":{"position":[[562,3]]},"55":{"position":[[19,3]]},"56":{"position":[[2236,4]]},"58":{"position":[[111,3]]},"63":{"position":[[84,3],[987,3]]},"84":{"position":[[1002,3]]},"96":{"position":[[709,3]]},"105":{"position":[[1127,7]]},"107":{"position":[[270,7]]},"121":{"position":[[227,5]]},"169":{"position":[[1095,7],[1481,4]]},"180":{"position":[[263,3]]},"183":{"position":[[4009,3]]},"185":{"position":[[97,7]]},"191":{"position":[[419,3],[2166,3],[2187,3],[2207,4]]},"234":{"position":[[327,7]]},"237":{"position":[[3088,3],[3216,8],[3539,8]]},"240":{"position":[[2160,3]]},"263":{"position":[[176,3],[232,3]]},"264":{"position":[[700,3]]},"267":{"position":[[2014,3]]},"270":{"position":[[276,3],[522,3]]},"274":{"position":[[574,3],[845,3],[1272,7]]},"278":{"position":[[141,3],[413,3]]},"281":{"position":[[665,3]]},"284":{"position":[[85,3],[312,3]]},"292":{"position":[[44,3]]},"303":{"position":[[44,3]]},"309":{"position":[[1298,3],[1400,8]]},"313":{"position":[[3646,7]]},"320":{"position":[[124,7]]},"322":{"position":[[509,7],[788,4],[866,3],[1327,3],[1420,4]]},"323":{"position":[[153,3]]},"326":{"position":[[1228,4]]},"333":{"position":[[502,7]]},"340":{"position":[[341,4]]},"343":{"position":[[587,3],[977,3]]},"364":{"position":[[145,3]]},"366":{"position":[[317,3]]},"379":{"position":[[1019,3]]},"385":{"position":[[500,3]]},"477":{"position":[[198,3]]},"496":{"position":[[374,3]]},"515":{"position":[[1008,7]]},"529":{"position":[[703,4]]},"577":{"position":[[328,3]]},"588":{"position":[[323,3]]},"764":{"position":[[943,7]]},"767":{"position":[[1706,3],[2197,3]]},"777":{"position":[[943,7]]},"792":{"position":[[1646,3],[2189,3]]},"804":{"position":[[941,7]]},"819":{"position":[[941,7]]},"824":{"position":[[1768,3],[2311,3]]},"835":{"position":[[941,7]]},"842":{"position":[[1527,3]]},"859":{"position":[[931,3]]},"864":{"position":[[138,3]]},"876":{"position":[[138,3]]},"903":{"position":[[343,3]]},"904":{"position":[[1307,3]]},"912":{"position":[[1347,3]]},"915":{"position":[[343,3]]},"918":{"position":[[1599,3]]},"919":{"position":[[781,3]]},"922":{"position":[[1359,7],[2851,7],[2959,7]]},"930":{"position":[[343,3]]},"942":{"position":[[619,7]]},"944":{"position":[[115,3]]},"963":{"position":[[497,3]]},"1008":{"position":[[1888,3]]},"1032":{"position":[[1946,3]]},"1138":{"position":[[1423,3]]},"1140":{"position":[[3142,7]]},"1281":{"position":[[360,7]]},"1295":{"position":[[360,7]]},"1313":{"position":[[967,3]]},"1316":{"position":[[3142,7]]},"1319":{"position":[[360,7]]},"1337":{"position":[[967,3]]},"1340":{"position":[[3142,7]]},"1348":{"position":[[967,3]]},"1351":{"position":[[3142,7]]},"1383":{"position":[[492,4]]},"1417":{"position":[[120,7]]},"1427":{"position":[[694,3]]},"1431":{"position":[[3165,7]]},"1437":{"position":[[290,4]]},"1440":{"position":[[103,3]]},"1447":{"position":[[420,3],[738,7]]},"1451":{"position":[[230,4],[448,4],[826,3]]},"1452":{"position":[[40,3],[1766,7]]},"1453":{"position":[[754,3]]},"1461":{"position":[[2233,3]]},"1462":{"position":[[73,7]]},"1475":{"position":[[196,7]]}},"keywords":{}}],["runner",{"_index":3099,"title":{},"content":{"319":{"position":[[72,7]]}},"keywords":{}}],["runtim",{"_index":209,"title":{},"content":{"6":{"position":[[260,8],[567,8]]},"7":{"position":[[231,7]]},"49":{"position":[[234,8]]},"67":{"position":[[763,7],[990,7]]},"81":{"position":[[219,7]]},"82":{"position":[[785,7],[2811,7],[3240,8],[3311,7]]},"95":{"position":[[217,7]]},"113":{"position":[[400,7]]},"115":{"position":[[195,7]]},"158":{"position":[[921,8]]},"163":{"position":[[465,7]]},"175":{"position":[[10,7]]},"296":{"position":[[6712,7]]},"319":{"position":[[666,7],[1081,7]]},"333":{"position":[[10,7]]},"1201":{"position":[[430,7]]},"1434":{"position":[[65,7],[205,7],[432,8],[534,8],[664,7],[714,8],[868,8],[877,7],[1015,8],[1024,7],[1094,8],[1137,7],[1188,8],[1239,7],[1413,7],[1451,7],[1638,8],[1706,8],[1742,7],[1781,7],[1820,7],[1859,7],[2127,8],[2188,8]]},"1439":{"position":[[1755,8]]},"1440":{"position":[[272,7]]},"1442":{"position":[[136,7],[433,7],[1042,7]]},"1443":{"position":[[44,7],[308,7],[456,8],[514,7],[674,7],[941,7]]},"1444":{"position":[[45,7],[227,7],[288,7],[401,7],[841,7]]},"1453":{"position":[[134,7]]}},"keywords":{}}],["runtime'",{"_index":6484,"title":{},"content":{"1438":{"position":[[22,9]]},"1444":{"position":[[801,9]]}},"keywords":{}}],["runtimecp",{"_index":6462,"title":{},"content":{"1434":{"position":[[1986,9]]}},"keywords":{}}],["rw_organization_admin",{"_index":4525,"title":{},"content":{"725":{"position":[[121,21]]},"726":{"position":[[539,21]]}},"keywords":{}}],["s",{"_index":1509,"title":{},"content":{"105":{"position":[[1581,1]]},"236":{"position":[[1365,1]]},"250":{"position":[[1539,1]]},"1452":{"position":[[1451,2],[4371,1],[4444,1]]},"1459":{"position":[[1318,1],[1322,1],[1326,1]]}},"keywords":{}}],["s)aturday",{"_index":6561,"title":{},"content":{"1452":{"position":[[4230,11]]}},"keywords":{}}],["s1",{"_index":1523,"title":{},"content":{"107":{"position":[[830,2]]}},"keywords":{}}],["s2",{"_index":1526,"title":{},"content":{"107":{"position":[[934,2]]}},"keywords":{}}],["s3",{"_index":831,"title":{"172":{"position":[[7,2]]},"187":{"position":[[39,2]]},"190":{"position":[[28,3]]},"298":{"position":[[7,2]]},"301":{"position":[[13,3]]},"412":{"position":[[7,2]]},"1141":{"position":[[20,2]]},"1159":{"position":[[32,2]]},"1167":{"position":[[31,2]]}},"content":{"56":{"position":[[208,3]]},"170":{"position":[[210,2]]},"172":{"position":[[50,2],[211,2],[685,2],[937,2],[1192,2]]},"174":{"position":[[51,3]]},"189":{"position":[[263,2],[1139,3],[1539,2],[1745,2]]},"190":{"position":[[223,2],[301,2],[843,3],[1607,3]]},"192":{"position":[[1384,2]]},"193":{"position":[[89,2],[524,2]]},"207":{"position":[[556,2]]},"239":{"position":[[997,2]]},"299":{"position":[[200,2]]},"300":{"position":[[157,2],[564,2]]},"301":{"position":[[50,2],[303,2],[382,2],[690,3],[817,2],[861,2],[1028,2],[1177,2],[1390,3],[1493,3],[1728,2]]},"302":{"position":[[1247,2]]},"303":{"position":[[97,2]]},"363":{"position":[[564,2]]},"413":{"position":[[59,2],[397,2]]},"416":{"position":[[250,2]]},"417":{"position":[[652,2],[798,3],[989,3],[1105,2],[2045,2]]},"418":{"position":[[549,2]]},"419":{"position":[[30,2],[1098,2]]},"440":{"position":[[1114,2]]},"1120":{"position":[[351,2],[405,2],[539,2],[593,2],[732,2],[786,2]]},"1142":{"position":[[41,2],[122,2],[196,2]]},"1144":{"position":[[713,2],[729,2]]},"1145":{"position":[[104,2]]},"1149":{"position":[[399,2],[577,2],[644,2]]},"1151":{"position":[[806,2],[937,2],[980,2],[1010,2],[1096,2],[1294,3]]},"1154":{"position":[[221,2]]},"1160":{"position":[[41,2],[122,2]]},"1162":{"position":[[281,2]]},"1163":{"position":[[104,2]]},"1168":{"position":[[41,2],[122,2],[196,2]]},"1170":{"position":[[713,2],[729,2]]},"1171":{"position":[[104,2]]},"1203":{"position":[[365,2]]},"1206":{"position":[[119,2],[267,2],[580,2],[598,2],[699,2]]},"1207":{"position":[[192,2]]},"1258":{"position":[[80,2],[171,2],[238,2]]},"1260":{"position":[[434,2],[464,2],[605,2],[736,2],[842,3]]},"1417":{"position":[[157,2],[224,2],[426,2]]},"1420":{"position":[[619,3]]},"1439":{"position":[[539,2],[681,2]]}},"keywords":{}}],["s3://acmeco",{"_index":121,"title":{},"content":{"3":{"position":[[430,11],[694,11]]}},"keywords":{}}],["s3://bucket/example/sessions/country=ca/device=iphone/network=lte/pivot=00/utc_date=2020",{"_index":482,"title":{},"content":{"16":{"position":[[1038,88]]}},"keywords":{}}],["s3:dev",{"_index":839,"title":{},"content":{"56":{"position":[[1177,6]]},"363":{"position":[[613,6]]},"418":{"position":[[89,6]]}},"keywords":{}}],["s3_bucket",{"_index":5862,"title":{},"content":{"1206":{"position":[[569,10]]},"1207":{"position":[[237,10]]}},"keywords":{}}],["s3_prefix",{"_index":5863,"title":{},"content":{"1206":{"position":[[688,10]]}},"keywords":{}}],["s3a",{"_index":3032,"title":{},"content":{"300":{"position":[[324,3]]}},"keywords":{}}],["s3custom",{"_index":3182,"title":{},"content":{"329":{"position":[[472,8]]}},"keywords":{}}],["s[intern",{"_index":1500,"title":{},"content":{"105":{"position":[[1375,10]]}},"keywords":{}}],["saa",{"_index":691,"title":{},"content":{"37":{"position":[[235,4]]},"45":{"position":[[303,4]]},"53":{"position":[[198,4]]},"162":{"position":[[1532,4]]},"218":{"position":[[1548,4]]},"364":{"position":[[294,4]]}},"keywords":{}}],["safe",{"_index":1302,"title":{},"content":{"88":{"position":[[349,4]]},"124":{"position":[[962,6]]},"162":{"position":[[553,6]]},"309":{"position":[[992,6]]},"595":{"position":[[1753,5]]},"640":{"position":[[237,6]]},"762":{"position":[[397,6]]},"775":{"position":[[397,6]]},"802":{"position":[[397,6]]},"817":{"position":[[397,6]]},"833":{"position":[[397,6]]},"840":{"position":[[844,4],[2367,4]]},"849":{"position":[[1319,4],[3507,4]]}},"keywords":{}}],["safeti",{"_index":786,"title":{},"content":{"50":{"position":[[208,6]]},"189":{"position":[[360,7]]},"764":{"position":[[1193,7]]},"777":{"position":[[1193,7]]},"804":{"position":[[1191,7]]},"819":{"position":[[1191,7]]},"835":{"position":[[1191,7]]}},"keywords":{}}],["sail",{"_index":2592,"title":{},"content":{"239":{"position":[[42,7]]}},"keywords":{}}],["sake",{"_index":2600,"title":{},"content":{"239":{"position":[[2811,4]]}},"keywords":{}}],["sale",{"_index":6603,"title":{},"content":{"1461":{"position":[[1447,5],[2382,5]]},"1462":{"position":[[379,5],[483,5]]}},"keywords":{}}],["sales/custom",{"_index":6637,"title":{},"content":{"1462":{"position":[[607,16]]}},"keywords":{}}],["sales/flow.yaml",{"_index":6609,"title":{},"content":{"1461":{"position":[[2023,15],[3579,15],[3781,15]]}},"keywords":{}}],["sales_tax",{"_index":1374,"title":{},"content":{"96":{"position":[[282,11]]}},"keywords":{}}],["salesforc",{"_index":3311,"title":{"973":{"position":[[0,10]]},"975":{"position":[[0,10]]},"976":{"position":[[0,10]]},"984":{"position":[[0,10]]},"987":{"position":[[34,10]]},"999":{"position":[[0,10]]},"1002":{"position":[[34,10]]}},"content":{"363":{"position":[[1976,10],[2054,10]]},"364":{"position":[[2988,10]]},"974":{"position":[[13,10],[75,10],[186,10]]},"975":{"position":[[64,10],[204,10]]},"976":{"position":[[67,10],[138,10],[213,10],[353,10]]},"977":{"position":[[489,10]]},"985":{"position":[[42,10],[355,10],[530,10]]},"987":{"position":[[75,10],[129,10],[223,10],[296,10]]},"988":{"position":[[203,10]]},"989":{"position":[[20,10],[69,10],[505,10],[639,11],[1228,10]]},"990":{"position":[[260,10]]},"991":{"position":[[316,10],[461,10],[727,10],[836,10]]},"992":{"position":[[89,10]]},"1000":{"position":[[42,10],[346,10],[407,10],[507,11],[533,10],[708,10]]},"1002":{"position":[[75,10],[129,10],[223,10],[296,10]]},"1003":{"position":[[203,10]]},"1004":{"position":[[20,10],[69,10],[203,10],[588,10],[722,11],[1311,10]]},"1005":{"position":[[253,10]]},"1006":{"position":[[28,10]]},"1007":{"position":[[50,10]]},"1008":{"position":[[469,10],[535,10],[1362,11],[1405,10]]},"1009":{"position":[[379,10],[524,10],[790,10],[1019,10],[1056,10],[1692,10]]}},"keywords":{}}],["salesforce:dev",{"_index":3374,"title":{},"content":{"364":{"position":[[3067,14]]},"1010":{"position":[[159,14]]}},"keywords":{}}],["same",{"_index":220,"title":{},"content":{"6":{"position":[[437,4]]},"8":{"position":[[243,4],[800,4]]},"11":{"position":[[1868,5]]},"13":{"position":[[1668,5],[1771,4]]},"14":{"position":[[359,4]]},"62":{"position":[[291,4]]},"105":{"position":[[725,4]]},"107":{"position":[[1557,4],[3405,4]]},"109":{"position":[[93,4],[465,4],[494,4]]},"110":{"position":[[1161,4]]},"132":{"position":[[235,4]]},"141":{"position":[[119,4]]},"182":{"position":[[482,5]]},"183":{"position":[[2592,4]]},"203":{"position":[[203,4]]},"207":{"position":[[255,4]]},"219":{"position":[[305,4],[504,4]]},"221":{"position":[[1562,5]]},"224":{"position":[[116,4],[1047,4]]},"247":{"position":[[378,4]]},"267":{"position":[[1613,4]]},"270":{"position":[[46,4],[1741,4]]},"271":{"position":[[275,4]]},"274":{"position":[[1788,4]]},"281":{"position":[[1770,4]]},"296":{"position":[[3399,4]]},"307":{"position":[[165,4]]},"323":{"position":[[1925,4]]},"325":{"position":[[298,4]]},"338":{"position":[[293,4]]},"366":{"position":[[348,4]]},"367":{"position":[[873,4]]},"373":{"position":[[619,4]]},"384":{"position":[[61,4]]},"387":{"position":[[381,4]]},"390":{"position":[[145,4]]},"418":{"position":[[572,4]]},"483":{"position":[[671,4]]},"546":{"position":[[1280,4]]},"595":{"position":[[640,4]]},"602":{"position":[[1060,4]]},"760":{"position":[[759,4]]},"773":{"position":[[759,4]]},"800":{"position":[[759,4]]},"815":{"position":[[759,4]]},"831":{"position":[[759,4]]},"903":{"position":[[374,4]]},"915":{"position":[[374,4]]},"930":{"position":[[374,4]]},"963":{"position":[[528,4]]},"977":{"position":[[273,4],[356,4]]},"1008":{"position":[[328,4],[368,4],[620,4],[818,4]]},"1118":{"position":[[679,4]]},"1136":{"position":[[427,4]]},"1138":{"position":[[1434,4]]},"1147":{"position":[[88,4]]},"1149":{"position":[[487,4]]},"1151":{"position":[[1161,4]]},"1156":{"position":[[590,4],[800,4]]},"1174":{"position":[[88,4]]},"1176":{"position":[[79,4]]},"1179":{"position":[[849,4],[890,4]]},"1216":{"position":[[88,4]]},"1224":{"position":[[88,4]]},"1232":{"position":[[54,4],[288,4]]},"1279":{"position":[[462,4]]},"1313":{"position":[[978,4]]},"1337":{"position":[[978,4]]},"1348":{"position":[[978,4]]},"1391":{"position":[[969,4]]},"1427":{"position":[[705,4]]},"1435":{"position":[[309,4]]},"1437":{"position":[[755,4]]},"1448":{"position":[[692,4]]},"1452":{"position":[[2300,4]]},"1453":{"position":[[1511,4],[1604,4]]},"1459":{"position":[[35,4],[78,4],[249,4]]},"1461":{"position":[[3089,4],[3299,4]]},"1477":{"position":[[588,4]]}},"keywords":{}}],["sampl",{"_index":1023,"title":{"344":{"position":[[0,7]]},"352":{"position":[[0,7]]},"360":{"position":[[0,7]]},"371":{"position":[[0,7]]},"378":{"position":[[0,7]]},"388":{"position":[[0,7]]},"393":{"position":[[0,7]]},"398":{"position":[[0,7]]},"403":{"position":[[0,7]]},"409":{"position":[[0,7]]},"418":{"position":[[0,7]]},"425":{"position":[[0,7]]},"433":{"position":[[0,7]]},"439":{"position":[[0,7]]},"449":{"position":[[0,7]]},"455":{"position":[[0,7]]},"461":{"position":[[0,7]]},"467":{"position":[[0,7]]},"473":{"position":[[0,7]]},"486":{"position":[[5,6]]},"497":{"position":[[0,7]]},"503":{"position":[[0,7]]},"510":{"position":[[0,7]]},"518":{"position":[[0,7]]},"527":{"position":[[0,7]]},"535":{"position":[[0,7]]},"541":{"position":[[0,7]]},"546":{"position":[[0,7]]},"557":{"position":[[0,7]]},"566":{"position":[[0,7]]},"575":{"position":[[0,7]]},"577":{"position":[[5,9]]},"586":{"position":[[0,7]]},"588":{"position":[[5,9]]},"594":{"position":[[0,7]]},"612":{"position":[[0,7]]},"620":{"position":[[0,7]]},"626":{"position":[[0,7]]},"632":{"position":[[0,7]]},"638":{"position":[[0,7]]},"647":{"position":[[0,7]]},"655":{"position":[[0,7]]},"658":{"position":[[5,6]]},"671":{"position":[[0,7]]},"674":{"position":[[5,6]]},"686":{"position":[[0,7]]},"689":{"position":[[5,6]]},"701":{"position":[[0,7]]},"707":{"position":[[0,7]]},"713":{"position":[[0,7]]},"721":{"position":[[0,7]]},"736":{"position":[[0,7]]},"742":{"position":[[0,7]]},"748":{"position":[[0,7]]},"758":{"position":[[0,7]]},"771":{"position":[[0,7]]},"783":{"position":[[0,7]]},"798":{"position":[[0,7]]},"813":{"position":[[0,7]]},"829":{"position":[[0,7]]},"843":{"position":[[0,7]]},"852":{"position":[[0,7]]},"860":{"position":[[0,7]]},"868":{"position":[[0,7]]},"880":{"position":[[0,7]]},"886":{"position":[[0,7]]},"892":{"position":[[0,7]]},"898":{"position":[[0,7]]},"908":{"position":[[0,7]]},"924":{"position":[[0,7]]},"935":{"position":[[0,7]]},"951":{"position":[[0,7]]},"960":{"position":[[0,7]]},"969":{"position":[[0,7]]},"983":{"position":[[0,7]]},"992":{"position":[[0,7]]},"998":{"position":[[0,7]]},"1010":{"position":[[0,7]]},"1016":{"position":[[0,7]]},"1022":{"position":[[0,7]]},"1029":{"position":[[0,7]]},"1037":{"position":[[0,6]]},"1046":{"position":[[0,7]]},"1054":{"position":[[0,7]]},"1062":{"position":[[0,7]]},"1071":{"position":[[0,7]]},"1078":{"position":[[0,7]]},"1086":{"position":[[0,7]]},"1095":{"position":[[0,7]]},"1102":{"position":[[0,7]]},"1108":{"position":[[0,7]]},"1114":{"position":[[0,7]]},"1126":{"position":[[0,7]]},"1134":{"position":[[0,7]]},"1139":{"position":[[0,7]]},"1145":{"position":[[0,7]]},"1152":{"position":[[0,7]]},"1163":{"position":[[0,7]]},"1171":{"position":[[0,7]]},"1180":{"position":[[0,7]]},"1189":{"position":[[0,7]]},"1197":{"position":[[0,7]]},"1207":{"position":[[0,7]]},"1214":{"position":[[0,7]]},"1221":{"position":[[0,7]]},"1231":{"position":[[0,7]]},"1241":{"position":[[0,7]]},"1248":{"position":[[0,7]]},"1254":{"position":[[0,7]]},"1261":{"position":[[0,7]]},"1270":{"position":[[0,7]]},"1278":{"position":[[0,7]]},"1287":{"position":[[0,7]]},"1302":{"position":[[0,7]]},"1314":{"position":[[0,7]]},"1326":{"position":[[0,7]]},"1338":{"position":[[0,7]]},"1349":{"position":[[0,7]]},"1357":{"position":[[0,7]]},"1363":{"position":[[0,7]]},"1368":{"position":[[0,7]]},"1377":{"position":[[0,7]]},"1387":{"position":[[0,7]]},"1401":{"position":[[0,7]]},"1412":{"position":[[0,7]]},"1421":{"position":[[0,7]]},"1428":{"position":[[0,7]]}},"content":{"68":{"position":[[482,6]]},"83":{"position":[[862,7]]},"141":{"position":[[305,6]]},"149":{"position":[[1173,6]]},"177":{"position":[[101,6]]},"182":{"position":[[406,7]]},"183":{"position":[[3451,8]]},"210":{"position":[[1813,6]]},"213":{"position":[[493,6]]},"225":{"position":[[691,7]]},"230":{"position":[[934,6]]},"253":{"position":[[543,7],[595,6],[918,7],[1076,6]]},"254":{"position":[[649,7],[2706,7],[3065,7]]},"295":{"position":[[252,6],[444,6],[1387,6]]},"313":{"position":[[543,7],[595,6],[918,7],[1076,6]]},"314":{"position":[[526,7],[2381,7],[2640,7]]},"350":{"position":[[191,6]]},"358":{"position":[[191,6]]},"369":{"position":[[191,6]]},"370":{"position":[[213,6]]},"375":{"position":[[153,6]]},"376":{"position":[[191,6]]},"386":{"position":[[191,6]]},"388":{"position":[[6,6]]},"391":{"position":[[191,6]]},"396":{"position":[[191,6]]},"401":{"position":[[237,6]]},"407":{"position":[[191,6]]},"416":{"position":[[191,6]]},"419":{"position":[[2766,6]]},"423":{"position":[[191,6]]},"431":{"position":[[191,6]]},"437":{"position":[[191,6]]},"441":{"position":[[1375,6]]},"447":{"position":[[191,6]]},"449":{"position":[[6,6]]},"453":{"position":[[191,6]]},"459":{"position":[[191,6]]},"465":{"position":[[191,6]]},"472":{"position":[[191,6]]},"473":{"position":[[6,6]]},"481":{"position":[[191,6]]},"495":{"position":[[191,6]]},"501":{"position":[[147,6]]},"508":{"position":[[191,6]]},"516":{"position":[[191,6]]},"518":{"position":[[6,6]]},"525":{"position":[[191,6]]},"527":{"position":[[6,6]]},"533":{"position":[[191,6]]},"535":{"position":[[6,6]]},"539":{"position":[[191,6]]},"544":{"position":[[191,6]]},"547":{"position":[[2768,6]]},"548":{"position":[[569,6],[660,6]]},"555":{"position":[[188,6]]},"557":{"position":[[6,6]]},"563":{"position":[[255,6]]},"572":{"position":[[191,6]]},"575":{"position":[[6,6]]},"577":{"position":[[143,8],[403,8],[548,8]]},"583":{"position":[[181,6]]},"584":{"position":[[1294,8]]},"586":{"position":[[6,6]]},"588":{"position":[[138,8],[398,8]]},"592":{"position":[[188,6]]},"610":{"position":[[191,6]]},"612":{"position":[[6,6]]},"618":{"position":[[191,6]]},"624":{"position":[[191,6]]},"630":{"position":[[191,6]]},"636":{"position":[[191,6]]},"639":{"position":[[2393,6]]},"646":{"position":[[191,6]]},"653":{"position":[[191,6]]},"669":{"position":[[191,6]]},"684":{"position":[[191,6]]},"686":{"position":[[5,6]]},"699":{"position":[[191,6]]},"705":{"position":[[191,6]]},"711":{"position":[[191,6]]},"719":{"position":[[186,6]]},"721":{"position":[[6,6]]},"727":{"position":[[191,6]]},"734":{"position":[[191,6]]},"740":{"position":[[191,6]]},"746":{"position":[[191,6]]},"753":{"position":[[644,7]]},"756":{"position":[[191,6]]},"767":{"position":[[790,7]]},"769":{"position":[[191,6]]},"781":{"position":[[188,6]]},"784":{"position":[[447,7]]},"792":{"position":[[1069,7]]},"793":{"position":[[604,7]]},"796":{"position":[[192,6]]},"808":{"position":[[620,7]]},"811":{"position":[[191,6]]},"824":{"position":[[861,7]]},"827":{"position":[[191,6]]},"841":{"position":[[191,6]]},"850":{"position":[[191,6]]},"858":{"position":[[191,6]]},"860":{"position":[[6,6]]},"866":{"position":[[191,6],[621,7]]},"878":{"position":[[191,6],[631,7]]},"884":{"position":[[191,6]]},"890":{"position":[[192,6]]},"896":{"position":[[191,6]]},"904":{"position":[[860,7]]},"906":{"position":[[191,6]]},"918":{"position":[[1069,7]]},"919":{"position":[[604,7]]},"921":{"position":[[191,6]]},"931":{"position":[[624,7]]},"933":{"position":[[191,6]]},"947":{"position":[[600,6]]},"949":{"position":[[191,6]]},"958":{"position":[[191,6]]},"967":{"position":[[191,6]]},"981":{"position":[[191,6]]},"990":{"position":[[191,6]]},"996":{"position":[[191,6]]},"1005":{"position":[[188,6]]},"1010":{"position":[[6,6]]},"1014":{"position":[[191,6]]},"1021":{"position":[[191,6]]},"1023":{"position":[[2749,6]]},"1027":{"position":[[191,6]]},"1033":{"position":[[195,6]]},"1042":{"position":[[1409,7]]},"1043":{"position":[[604,7]]},"1044":{"position":[[191,6]]},"1051":{"position":[[860,7]]},"1052":{"position":[[191,6]]},"1059":{"position":[[624,7]]},"1060":{"position":[[191,6]]},"1069":{"position":[[191,6]]},"1071":{"position":[[6,6]]},"1075":{"position":[[191,6]]},"1084":{"position":[[191,6]]},"1086":{"position":[[6,6]]},"1093":{"position":[[191,6]]},"1100":{"position":[[191,6]]},"1106":{"position":[[192,6]]},"1112":{"position":[[191,6]]},"1124":{"position":[[191,6]]},"1132":{"position":[[192,6]]},"1138":{"position":[[213,6]]},"1154":{"position":[[815,7]]},"1198":{"position":[[536,7]]},"1209":{"position":[[447,6]]},"1231":{"position":[[6,6]]},"1248":{"position":[[6,6]]},"1252":{"position":[[188,6]]},"1255":{"position":[[447,7]]},"1289":{"position":[[1154,7]]},"1303":{"position":[[624,7],[865,7]]},"1322":{"position":[[1373,7]]},"1373":{"position":[[842,7]]},"1374":{"position":[[842,7]]},"1394":{"position":[[611,6]]},"1397":{"position":[[621,7]]},"1398":{"position":[[620,7]]},"1408":{"position":[[682,7]]},"1409":{"position":[[604,7]]}},"keywords":{}}],["sandbox",{"_index":4736,"title":{"1083":{"position":[[0,7]]}},"content":{"840":{"position":[[383,8]]},"842":{"position":[[175,7]]},"849":{"position":[[326,8]]},"851":{"position":[[152,7]]},"885":{"position":[[262,7],[307,7]]},"991":{"position":[[696,7],[738,8]]},"1009":{"position":[[759,7],[801,8]]},"1083":{"position":[[24,7],[179,7],[303,8]]},"1085":{"position":[[91,7],[467,8],[581,7]]},"1086":{"position":[[64,7]]}},"keywords":{}}],["sandbox_access_token",{"_index":5338,"title":{},"content":{"1085":{"position":[[419,20]]},"1086":{"position":[[224,20]]}},"keywords":{}}],["sandboxadvertis",{"_index":5334,"title":{},"content":{"1080":{"position":[[66,18]]}},"keywords":{}}],["sandboxtiktok",{"_index":5336,"title":{},"content":{"1081":{"position":[[68,13]]}},"keywords":{}}],["saniti",{"_index":4619,"title":{},"content":{"757":{"position":[[1724,6],[1787,6]]},"770":{"position":[[1724,6],[1787,6]]},"797":{"position":[[1724,6],[1787,6]]},"812":{"position":[[1724,6],[1787,6]]},"828":{"position":[[1724,6],[1787,6]]}},"keywords":{}}],["sasl",{"_index":2640,"title":{},"content":{"247":{"position":[[229,6]]},"429":{"position":[[1050,4]]},"432":{"position":[[465,5],[551,4],[616,4],[631,4]]},"433":{"position":[[34,7]]},"1118":{"position":[[441,6]]}},"keywords":{}}],["sasl.mechanism=plain",{"_index":2680,"title":{},"content":{"250":{"position":[[1327,20]]}},"keywords":{}}],["sasl.password="your_estuary_refresh_token"",{"_index":2682,"title":{},"content":{"250":{"position":[[1387,52]]}},"keywords":{}}],["sasl.username="{}"",{"_index":2681,"title":{},"content":{"250":{"position":[[1353,28]]}},"keywords":{}}],["sasl/plain",{"_index":3659,"title":{},"content":{"429":{"position":[[504,11]]}},"keywords":{}}],["sasl/scram",{"_index":3657,"title":{},"content":{"429":{"position":[[460,10],[480,10],[801,10]]}},"keywords":{}}],["sasl_mechan",{"_index":2651,"title":{},"content":{"250":{"position":[[342,17]]}},"keywords":{}}],["sasl_mechanism=conf['sasl_mechan",{"_index":2662,"title":{},"content":{"250":{"position":[[676,38]]}},"keywords":{}}],["sasl_plain_password",{"_index":2653,"title":{},"content":{"250":{"position":[[398,22]]}},"keywords":{}}],["sasl_plain_password=conf['sasl_plain_password",{"_index":2664,"title":{},"content":{"250":{"position":[[764,48]]}},"keywords":{}}],["sasl_plain_usernam",{"_index":2652,"title":{},"content":{"250":{"position":[[369,22]]}},"keywords":{}}],["sasl_plain_username=conf['sasl_plain_usernam",{"_index":2663,"title":{},"content":{"250":{"position":[[715,48]]}},"keywords":{}}],["sasl_ssl",{"_index":2650,"title":{},"content":{"250":{"position":[[330,11]]}},"keywords":{}}],["sasl_sslsasl",{"_index":2638,"title":{},"content":{"247":{"position":[[185,12]]}},"keywords":{}}],["satisfaction_r",{"_index":5491,"title":{},"content":{"1134":{"position":[[1694,20]]}},"keywords":{}}],["satisfi",{"_index":2098,"title":{},"content":{"185":{"position":[[204,10]]},"217":{"position":[[2121,9]]},"264":{"position":[[811,9]]},"275":{"position":[[1083,9]]},"290":{"position":[[1587,9]]},"479":{"position":[[845,9]]}},"keywords":{}}],["saturday",{"_index":6539,"title":{},"content":{"1452":{"position":[[1507,9]]}},"keywords":{}}],["saturday.su",{"_index":6564,"title":{},"content":{"1452":{"position":[[4427,11]]}},"keywords":{}}],["save",{"_index":1113,"title":{},"content":{"80":{"position":[[632,5]]},"182":{"position":[[304,4]]},"184":{"position":[[964,4]]},"190":{"position":[[1871,4]]},"192":{"position":[[2233,4]]},"209":{"position":[[68,5],[111,4]]},"217":{"position":[[2161,4]]},"218":{"position":[[2087,4]]},"228":{"position":[[1487,4]]},"230":{"position":[[1261,4]]},"236":{"position":[[259,4]]},"239":{"position":[[2914,4]]},"240":{"position":[[4110,4]]},"259":{"position":[[1455,4],[3001,4]]},"290":{"position":[[1640,4]]},"291":{"position":[[1897,4]]},"296":{"position":[[7506,5]]},"301":{"position":[[1614,4]]},"302":{"position":[[1809,4]]},"314":{"position":[[1314,4]]},"321":{"position":[[278,4]]},"329":{"position":[[881,5]]},"414":{"position":[[876,7]]},"436":{"position":[[694,4]]},"675":{"position":[[329,5]]},"725":{"position":[[193,4]]},"726":{"position":[[611,4]]},"754":{"position":[[724,7]]},"794":{"position":[[930,7]]},"809":{"position":[[930,7]]},"825":{"position":[[766,7]]},"840":{"position":[[752,4],[1907,4],[2282,4]]},"849":{"position":[[694,4],[873,4],[1227,4],[3026,4],[3422,4]]},"947":{"position":[[1282,4]]},"1036":{"position":[[376,7]]},"1047":{"position":[[985,4]]},"1055":{"position":[[985,4]]},"1063":{"position":[[985,4]]},"1186":{"position":[[296,4]]},"1286":{"position":[[987,7]]},"1301":{"position":[[823,7]]},"1325":{"position":[[987,7]]},"1379":{"position":[[4831,4]]},"1403":{"position":[[4831,4]]},"1414":{"position":[[4831,4]]},"1452":{"position":[[3300,7]]},"1455":{"position":[[252,5]]}},"keywords":{}}],["savepoint",{"_index":1399,"title":{},"content":{"97":{"position":[[895,9]]},"1140":{"position":[[3188,9]]},"1292":{"position":[[4083,9]]},"1306":{"position":[[4083,9]]},"1316":{"position":[[3188,9]]},"1329":{"position":[[4083,9]]},"1340":{"position":[[3188,9]]},"1351":{"position":[[3188,9]]},"1370":{"position":[[1027,9]]},"1379":{"position":[[4879,9]]},"1403":{"position":[[4879,9]]},"1414":{"position":[[4879,9]]},"1431":{"position":[[3211,9]]}},"keywords":{}}],["saw",{"_index":2073,"title":{},"content":{"183":{"position":[[1564,3]]}},"keywords":{}}],["scaffold",{"_index":3005,"title":{},"content":{"296":{"position":[[3687,11]]}},"keywords":{}}],["scalabl",{"_index":1669,"title":{},"content":{"121":{"position":[[1947,8]]},"197":{"position":[[552,11]]},"320":{"position":[[373,8]]}},"keywords":{}}],["scalar",{"_index":1678,"title":{},"content":{"122":{"position":[[909,6]]},"308":{"position":[[505,6]]},"1275":{"position":[[159,6]]},"1467":{"position":[[2063,8]]},"1477":{"position":[[2931,6]]}},"keywords":{}}],["scale",{"_index":722,"title":{"333":{"position":[[8,8]]}},"content":{"40":{"position":[[360,7]]},"49":{"position":[[119,5]]},"101":{"position":[[436,5]]},"107":{"position":[[233,5]]},"108":{"position":[[318,7]]},"110":{"position":[[1364,5]]},"112":{"position":[[905,6]]},"121":{"position":[[2029,6]]},"198":{"position":[[1057,6]]},"281":{"position":[[3019,6]]},"319":{"position":[[748,8]]},"320":{"position":[[592,5],[2328,8]]},"321":{"position":[[1999,8]]},"333":{"position":[[18,6],[234,6]]},"363":{"position":[[61,5]]}},"keywords":{}}],["scan",{"_index":2265,"title":{},"content":{"209":{"position":[[499,5]]},"218":{"position":[[1732,5]]},"259":{"position":[[1200,5],[2781,5]]},"291":{"position":[[1665,5]]},"302":{"position":[[1574,5]]},"397":{"position":[[468,6],[707,4],[780,4]]},"785":{"position":[[153,5]]},"789":{"position":[[841,7]]},"947":{"position":[[970,4]]}},"keywords":{}}],["scenario",{"_index":1626,"title":{"306":{"position":[[17,10]]}},"content":{"115":{"position":[[610,9]]},"165":{"position":[[620,10]]},"189":{"position":[[304,9]]},"208":{"position":[[1026,10],[1820,10]]},"209":{"position":[[1366,9]]},"306":{"position":[[62,10],[636,9]]},"307":{"position":[[1,9]]},"308":{"position":[[1,9]]},"309":{"position":[[1,9]]},"310":{"position":[[1,9]]},"1461":{"position":[[65,9]]}},"keywords":{}}],["scene",{"_index":2278,"title":{},"content":{"210":{"position":[[511,6]]}},"keywords":{}}],["schedul",{"_index":2607,"title":{"1153":{"position":[[5,9]]},"1181":{"position":[[5,9]]},"1190":{"position":[[5,9]]},"1388":{"position":[[5,9]]},"1422":{"position":[[5,9]]},"1450":{"position":[[21,8]]},"1452":{"position":[[19,9]]}},"content":{"240":{"position":[[3206,11]]},"323":{"position":[[167,9],[323,9]]},"326":{"position":[[970,8]]},"1134":{"position":[[1821,9]]},"1153":{"position":[[39,8]]},"1181":{"position":[[39,8]]},"1186":{"position":[[522,8]]},"1190":{"position":[[39,8]]},"1292":{"position":[[4125,8]]},"1306":{"position":[[4125,8]]},"1329":{"position":[[4125,8]]},"1388":{"position":[[39,8],[748,8]]},"1422":{"position":[[39,8]]},"1451":{"position":[[575,8]]},"1452":{"position":[[55,8],[98,8],[233,9],[2278,9],[2305,8],[3336,9]]},"1453":{"position":[[1614,8]]}},"keywords":{}}],["scheduleconfigur",{"_index":6543,"title":{},"content":{"1452":{"position":[[2115,18]]}},"keywords":{}}],["schema",{"_index":11,"title":{"10":{"position":[[0,6]]},"13":{"position":[[8,6]]},"14":{"position":[[21,6]]},"41":{"position":[[0,8]]},"70":{"position":[[0,8]]},"72":{"position":[[0,6]]},"90":{"position":[[5,6]]},"155":{"position":[[0,7]]},"156":{"position":[[5,7]]},"160":{"position":[[8,8]]},"162":{"position":[[15,8]]},"165":{"position":[[11,6]]},"208":{"position":[[11,6]]},"304":{"position":[[0,6]]},"306":{"position":[[0,6]]},"865":{"position":[[8,7]]},"877":{"position":[[8,7]]},"944":{"position":[[9,6]]}},"content":{"1":{"position":[[148,7]]},"11":{"position":[[864,7],[1140,6],[1511,6],[1691,6]]},"12":{"position":[[412,6]]},"13":{"position":[[5,6]]},"14":{"position":[[144,7],[230,6],[411,6],[441,7]]},"16":{"position":[[166,7]]},"26":{"position":[[658,8]]},"27":{"position":[[247,7],[358,7]]},"33":{"position":[[127,8]]},"34":{"position":[[778,6]]},"35":{"position":[[228,6]]},"41":{"position":[[128,7],[338,6],[451,7],[594,7],[712,7]]},"42":{"position":[[23,6]]},"50":{"position":[[26,7],[60,7]]},"54":{"position":[[687,7]]},"55":{"position":[[941,7]]},"56":{"position":[[357,8]]},"66":{"position":[[508,6]]},"68":{"position":[[284,6]]},"69":{"position":[[235,6],[446,7]]},"70":{"position":[[38,7],[111,7],[233,6],[406,6],[432,7],[588,6],[607,6],[702,7],[791,7]]},"71":{"position":[[213,7]]},"72":{"position":[[256,6]]},"73":{"position":[[200,7]]},"76":{"position":[[243,7],[394,7]]},"88":{"position":[[458,7]]},"90":{"position":[[69,8],[249,6],[299,6],[367,7],[472,6]]},"94":{"position":[[157,7]]},"97":{"position":[[678,6],[730,6]]},"99":{"position":[[360,7]]},"100":{"position":[[146,7],[744,7],[774,6]]},"102":{"position":[[399,7]]},"106":{"position":[[487,6],[539,7],[677,6]]},"113":{"position":[[23,7],[419,6]]},"115":{"position":[[110,6]]},"121":{"position":[[934,7]]},"123":{"position":[[249,7]]},"129":{"position":[[589,7]]},"150":{"position":[[67,6]]},"156":{"position":[[60,6],[116,7],[162,6],[295,7],[480,7]]},"157":{"position":[[86,7],[230,6],[363,7],[388,6],[445,6]]},"158":{"position":[[75,7],[143,7],[261,6],[326,6],[412,7],[659,7]]},"159":{"position":[[10,6],[213,6],[334,6],[698,7],[717,6],[967,6]]},"160":{"position":[[6,6],[380,7],[504,6],[571,6],[738,7],[861,7],[920,7]]},"161":{"position":[[6,6],[61,6],[210,6],[233,6],[361,7],[429,6],[470,7],[582,7],[659,7],[743,7],[836,7],[1040,7],[1147,8],[1156,6],[1284,6]]},"162":{"position":[[378,7],[435,7],[470,6],[585,6],[719,6],[837,8],[899,6],[937,7],[945,6],[1102,8],[1150,6],[1264,6],[1291,7],[1323,7],[1628,7],[1712,7],[1802,8]]},"163":{"position":[[390,6]]},"164":{"position":[[47,6],[86,8],[1645,6],[1693,6],[2200,6]]},"165":{"position":[[34,6],[77,6],[218,6],[515,6],[579,6],[1117,6],[1148,6],[1206,8],[1353,7],[1399,6],[1475,6],[1557,7],[1608,6],[1747,6],[1821,7],[1845,6],[1885,6],[1970,6],[2100,6],[2312,6]]},"166":{"position":[[344,7],[639,7],[693,7]]},"182":{"position":[[180,6],[526,8],[676,7],[748,7]]},"183":{"position":[[1179,7],[1531,6],[1601,6],[1716,6],[1759,7],[1991,6],[2877,7],[3361,8],[3565,7]]},"190":{"position":[[1424,7],[1960,7]]},"191":{"position":[[780,6],[1036,6],[1347,6],[1799,7]]},"192":{"position":[[1107,7],[1367,8],[1418,6],[1497,6],[1731,6],[1888,7],[1938,7]]},"207":{"position":[[1018,6],[1049,6],[1106,8],[1253,7],[1299,6],[1649,6]]},"208":{"position":[[116,6],[180,6],[271,7],[377,6],[519,6],[547,7],[639,8],[676,6],[700,6],[877,6]]},"211":{"position":[[319,6],[611,6],[669,6],[946,6]]},"217":{"position":[[1718,8],[1824,6],[1912,7],[1991,7]]},"218":{"position":[[1268,6],[1408,7],[1439,6],[1672,6],[1694,6],[1783,7],[1861,6],[1893,7]]},"219":{"position":[[559,8]]},"227":{"position":[[83,7]]},"228":{"position":[[714,6],[769,6],[931,6],[960,6],[1013,6],[1237,6]]},"229":{"position":[[241,6],[463,6],[534,6],[616,6],[733,7]]},"230":{"position":[[56,6]]},"236":{"position":[[1834,7],[1926,6],[1974,6],[2570,6]]},"238":{"position":[[1025,6]]},"239":{"position":[[1086,7],[1152,6],[1282,6],[1563,6],[1764,7],[1914,6],[2024,6],[2214,7],[2257,6],[2541,8],[2603,6],[2784,6]]},"240":{"position":[[741,6],[997,6],[1308,6],[1760,7],[2289,8],[4460,6]]},"241":{"position":[[201,6]]},"242":{"position":[[509,6],[789,6],[814,6]]},"246":{"position":[[132,7],[200,6]]},"247":{"position":[[346,8]]},"254":{"position":[[290,7],[1050,7],[1062,6],[1115,7],[1183,6],[1259,7],[1295,6],[1358,7],[1619,6]]},"255":{"position":[[851,7]]},"259":{"position":[[812,6],[907,8],[992,6],[1141,6],[1162,6],[1251,7],[1364,6],[1396,7],[2344,6],[2488,8],[2573,6],[2722,6],[2743,6],[2832,7],[2910,6],[2942,7]]},"267":{"position":[[1579,6]]},"268":{"position":[[811,7],[1103,6],[1129,6],[1247,7],[1306,6],[1324,7]]},"269":{"position":[[436,7],[674,6],[700,6],[818,7],[877,6],[895,7]]},"270":{"position":[[1205,7],[1288,6],[1402,7],[1478,6],[1496,7]]},"277":{"position":[[582,7]]},"278":{"position":[[751,6],[911,7]]},"279":{"position":[[1059,7]]},"280":{"position":[[1172,7],[1198,6]]},"281":{"position":[[897,7],[1952,7]]},"288":{"position":[[630,7]]},"290":{"position":[[1296,7],[1462,6]]},"291":{"position":[[1271,6],[1432,6],[1482,6],[1606,6],[1627,6],[1716,7],[1794,6],[1826,7]]},"296":{"position":[[298,7],[1110,6],[1269,7],[2527,6],[6733,6]]},"299":{"position":[[545,7]]},"301":{"position":[[1421,6],[1558,6]]},"302":{"position":[[1196,6],[1347,6],[1402,6],[1515,6],[1536,6],[1625,7],[1703,6],[1735,7]]},"306":{"position":[[224,6]]},"307":{"position":[[1310,7],[1709,7],[2178,7],[2592,7],[3247,7]]},"308":{"position":[[40,6],[103,7]]},"309":{"position":[[40,6],[497,6],[602,7],[779,6],[1008,6],[2144,7],[2540,7],[2741,7],[3147,7],[3412,7],[3571,7]]},"310":{"position":[[40,6]]},"314":{"position":[[308,7],[771,7],[783,6],[836,7],[904,6],[980,7],[1048,8],[1324,6],[1419,6]]},"315":{"position":[[2521,7]]},"316":{"position":[[1176,7]]},"319":{"position":[[801,8],[1186,7]]},"320":{"position":[[1747,7]]},"323":{"position":[[1018,7]]},"326":{"position":[[399,7]]},"332":{"position":[[227,7],[356,7],[591,6]]},"344":{"position":[[173,7]]},"367":{"position":[[469,6],[528,6]]},"402":{"position":[[421,8],[430,7],[446,7]]},"403":{"position":[[297,8]]},"419":{"position":[[218,8]]},"440":{"position":[[234,8]]},"504":{"position":[[155,8]]},"547":{"position":[[219,8]]},"574":{"position":[[263,7]]},"585":{"position":[[253,7]]},"616":{"position":[[535,6]]},"639":{"position":[[154,8]]},"661":{"position":[[180,6],[303,6],[536,6]]},"760":{"position":[[827,6]]},"773":{"position":[[827,6]]},"797":{"position":[[2409,7]]},"800":{"position":[[827,6]]},"812":{"position":[[2409,7]]},"815":{"position":[[827,6]]},"828":{"position":[[2409,7]]},"831":{"position":[[827,6]]},"864":{"position":[[430,6],[586,8]]},"865":{"position":[[51,7],[113,6],[192,7],[220,6]]},"867":{"position":[[1397,6],[1502,6],[1690,7],[1836,8]]},"869":{"position":[[1073,6],[1648,6],[1724,7]]},"876":{"position":[[430,6],[586,8]]},"877":{"position":[[51,7],[113,6],[247,8]]},"879":{"position":[[1611,7],[1619,6],[1655,6]]},"880":{"position":[[486,7]]},"904":{"position":[[1569,6],[1628,6]]},"910":{"position":[[115,6]]},"917":{"position":[[536,6],[620,6],[703,6],[795,7]]},"918":{"position":[[1861,6],[1920,6]]},"919":{"position":[[1073,6],[1157,6],[1234,6],[1320,7],[1719,6],[1803,6]]},"926":{"position":[[115,6]]},"931":{"position":[[1231,6],[1290,6]]},"937":{"position":[[115,6]]},"944":{"position":[[43,7],[143,7],[167,6],[224,6],[279,6],[364,6]]},"947":{"position":[[1219,6]]},"953":{"position":[[115,6]]},"965":{"position":[[536,6],[620,6],[703,6],[795,7]]},"971":{"position":[[115,6]]},"1023":{"position":[[199,8]]},"1031":{"position":[[207,6],[309,6],[563,6]]},"1032":{"position":[[1398,6],[1418,7],[1537,7],[1638,7]]},"1034":{"position":[[779,6],[790,6]]},"1035":{"position":[[111,7],[119,6],[130,6]]},"1037":{"position":[[259,7]]},"1040":{"position":[[720,6],[735,7]]},"1042":{"position":[[337,6],[348,7],[428,7],[480,7],[545,6],[592,6]]},"1043":{"position":[[1001,6],[1012,7],[1092,7],[1144,7],[1209,6],[1256,6]]},"1050":{"position":[[720,6],[735,7]]},"1051":{"position":[[1263,6],[1274,7],[1354,7],[1406,7],[1471,6],[1518,6]]},"1058":{"position":[[720,6],[735,7]]},"1059":{"position":[[1056,6],[1067,7],[1147,7],[1199,7],[1264,6],[1311,6]]},"1118":{"position":[[569,6],[984,7]]},"1138":{"position":[[523,7],[540,6],[556,6],[1580,7],[1600,6],[1619,6],[1663,6]]},"1140":{"position":[[3227,6]]},"1149":{"position":[[226,7]]},"1151":{"position":[[511,7],[528,6],[544,6],[1539,7],[1559,6],[1578,6]]},"1156":{"position":[[92,7],[408,6],[442,6]]},"1178":{"position":[[394,6]]},"1185":{"position":[[106,6]]},"1188":{"position":[[375,6],[395,6],[435,6],[789,7],[809,6],[828,6]]},"1189":{"position":[[484,7]]},"1191":{"position":[[633,7]]},"1260":{"position":[[225,7],[242,6],[258,6],[1063,7],[1083,6],[1102,6]]},"1261":{"position":[[189,7]]},"1292":{"position":[[4167,6],[4217,7]]},"1306":{"position":[[4167,6],[4217,7]]},"1313":{"position":[[333,7],[350,6],[366,6],[1124,7],[1144,6],[1163,6],[1207,6]]},"1316":{"position":[[3227,6]]},"1329":{"position":[[4167,6],[4217,7]]},"1337":{"position":[[333,7],[350,6],[366,6],[1124,7],[1144,6],[1163,6],[1207,6]]},"1340":{"position":[[3227,6]]},"1348":{"position":[[333,7],[350,6],[366,6],[1124,7],[1144,6],[1163,6],[1207,6]]},"1351":{"position":[[3227,6]]},"1358":{"position":[[324,7],[529,7],[778,6],[834,7]]},"1379":{"position":[[4937,6]]},"1382":{"position":[[126,6]]},"1383":{"position":[[210,7],[728,6],[984,6],[1295,6],[1747,7]]},"1386":{"position":[[318,7],[326,6],[342,6],[1192,7],[1212,6],[1231,6]]},"1387":{"position":[[175,7],[729,7]]},"1394":{"position":[[633,6]]},"1403":{"position":[[4937,6]]},"1414":{"position":[[4937,6]]},"1417":{"position":[[169,6]]},"1418":{"position":[[265,6]]},"1420":{"position":[[166,7],[174,6],[194,6],[739,7],[759,6],[778,6]]},"1421":{"position":[[146,7],[510,7]]},"1427":{"position":[[274,7],[291,6],[307,6],[884,7],[904,6],[923,6],[967,6]]},"1431":{"position":[[3250,6]]},"1438":{"position":[[427,6],[608,6]]},"1440":{"position":[[511,6]]},"1446":{"position":[[78,6],[119,8]]},"1461":{"position":[[363,7],[3856,7],[4478,7],[5008,7],[5161,6],[5596,8],[5647,7]]},"1463":{"position":[[156,7],[293,7]]},"1464":{"position":[[149,7],[921,6]]},"1465":{"position":[[58,6],[205,7],[300,6],[472,7]]},"1466":{"position":[[108,7]]},"1467":{"position":[[451,7],[2122,7]]},"1476":{"position":[[159,7],[1225,7]]},"1477":{"position":[[929,7],[1104,6],[3151,7],[3332,6],[3706,6]]}},"keywords":{}}],["schema"",{"_index":2299,"title":{},"content":{"210":{"position":[[1282,13],[1390,12],[1448,12]]}},"keywords":{}}],["schema(",{"_index":4875,"title":{},"content":{"867":{"position":[[1747,9]]}},"keywords":{}}],["schema(s)of",{"_index":3651,"title":{},"content":{"427":{"position":[[152,11]]}},"keywords":{}}],["schema.org/draft",{"_index":3073,"title":{},"content":{"314":{"position":[[1075,16]]}},"keywords":{}}],["schema.org/draft/2020",{"_index":2286,"title":{},"content":{"210":{"position":[[885,21]]}},"keywords":{}}],["schema.yaml",{"_index":1055,"title":{},"content":{"71":{"position":[[221,11]]},"73":{"position":[[208,11]]},"94":{"position":[[168,11]]}},"keywords":{}}],["schema_nam",{"_index":5231,"title":{},"content":{"1037":{"position":[[267,14]]},"1188":{"position":[[362,12]]},"1189":{"position":[[186,12]]},"1292":{"position":[[4281,11]]},"1306":{"position":[[4281,11]]},"1329":{"position":[[4281,11]]},"1421":{"position":[[154,11]]}},"keywords":{}}],["schemaagainst",{"_index":724,"title":{},"content":{"41":{"position":[[48,13]]}},"keywords":{}}],["schemai",{"_index":1852,"title":{},"content":{"156":{"position":[[6,8]]}},"keywords":{}}],["schemas.yaml",{"_index":6602,"title":{},"content":{"1461":{"position":[[1257,12],[1352,12],[1417,12],[1430,12],[1483,12]]}},"keywords":{}}],["schemas.yaml#/definitions/coordin",{"_index":1899,"title":{},"content":{"161":{"position":[[667,36],[911,36]]}},"keywords":{}}],["schemas.yaml#/definitions/integ",{"_index":1902,"title":{},"content":{"161":{"position":[[751,33]]}},"keywords":{}}],["schemas/products.sql:/app/schemas/products.sql",{"_index":2539,"title":{},"content":{"236":{"position":[[1488,48]]}},"keywords":{}}],["schemat",{"_index":1425,"title":{},"content":{"99":{"position":[[503,11]]},"332":{"position":[[117,15]]}},"keywords":{}}],["schemath",{"_index":3036,"title":{},"content":{"305":{"position":[[391,9]]}},"keywords":{}}],["scheme",{"_index":114,"title":{},"content":{"3":{"position":[[305,6]]},"782":{"position":[[131,6]]},"1253":{"position":[[131,6]]}},"keywords":{}}],["schemesissu",{"_index":4472,"title":{},"content":{"709":{"position":[[259,12],[348,12],[366,12],[391,12]]}},"keywords":{}}],["schemesproject",{"_index":4485,"title":{},"content":{"709":{"position":[[562,14]]}},"keywords":{}}],["schemesprojectsproject",{"_index":4480,"title":{},"content":{"709":{"position":[[464,22]]}},"keywords":{}}],["schemessprintstim",{"_index":4490,"title":{},"content":{"709":{"position":[[640,18]]}},"keywords":{}}],["schemesworkflow",{"_index":4492,"title":{},"content":{"709":{"position":[[709,15]]}},"keywords":{}}],["scn",{"_index":4870,"title":{"870":{"position":[[12,3]]}},"content":{"867":{"position":[[1194,3],[1208,3]]},"870":{"position":[[65,3],[821,3]]}},"keywords":{}}],["scope",{"_index":2055,"title":{},"content":{"180":{"position":[[798,5]]},"313":{"position":[[3135,5]]},"419":{"position":[[1318,5]]},"440":{"position":[[1334,5]]},"547":{"position":[[1320,5]]},"609":{"position":[[504,6]]},"645":{"position":[[438,7]]},"652":{"position":[[438,7]]},"724":{"position":[[244,7]]},"849":{"position":[[1721,5]]},"989":{"position":[[849,6]]},"1004":{"position":[[932,6]]},"1023":{"position":[[1301,5]]},"1067":{"position":[[96,7]]},"1140":{"position":[[3262,5]]},"1316":{"position":[[3262,5]]},"1340":{"position":[[3262,5]]},"1351":{"position":[[3262,5]]},"1379":{"position":[[4988,5]]},"1403":{"position":[[4988,5]]},"1414":{"position":[[4988,5]]},"1431":{"position":[[3285,5]]},"1437":{"position":[[435,6]]}},"keywords":{}}],["scopes:click",{"_index":4526,"title":{},"content":{"725":{"position":[[143,12]]},"726":{"position":[[561,12]]}},"keywords":{}}],["scram",{"_index":3661,"title":{},"content":{"429":{"position":[[826,6]]},"433":{"position":[[256,5]]}},"keywords":{}}],["scratch",{"_index":2572,"title":{},"content":{"237":{"position":[[1386,8]]},"331":{"position":[[793,8]]},"366":{"position":[[784,8]]},"903":{"position":[[810,8]]},"915":{"position":[[810,8]]},"930":{"position":[[810,8]]},"963":{"position":[[964,8]]},"1040":{"position":[[526,8]]},"1050":{"position":[[526,8]]},"1058":{"position":[[526,8]]}},"keywords":{}}],["screen",{"_index":2065,"title":{},"content":{"183":{"position":[[614,7]]},"209":{"position":[[163,6]]},"238":{"position":[[329,6]]},"239":{"position":[[360,7]]},"267":{"position":[[982,7]]},"552":{"position":[[187,7],[462,7]]},"709":{"position":[[384,6]]}},"keywords":{}}],["script",{"_index":874,"title":{},"content":{"58":{"position":[[206,6]]},"169":{"position":[[445,6]]},"191":{"position":[[449,6]]},"192":{"position":[[520,6],[1077,8]]},"240":{"position":[[418,6],[2638,6]]},"242":{"position":[[410,7]]},"288":{"position":[[768,6]]},"299":{"position":[[683,6]]},"849":{"position":[[1960,6]]},"1031":{"position":[[819,6]]},"1032":{"position":[[111,6],[1961,6]]},"1382":{"position":[[319,6]]},"1383":{"position":[[57,6],[326,6]]}},"keywords":{}}],["scroll",{"_index":1808,"title":{},"content":{"138":{"position":[[2540,6]]},"142":{"position":[[2618,6]]},"192":{"position":[[1171,6],[1818,6]]},"240":{"position":[[2907,6]]},"840":{"position":[[1007,6]]},"849":{"position":[[2018,6]]},"931":{"position":[[730,6]]},"1140":{"position":[[3294,6]]},"1316":{"position":[[3294,6]]},"1340":{"position":[[3294,6]]},"1351":{"position":[[3294,6]]},"1379":{"position":[[5050,6]]},"1403":{"position":[[5050,6]]},"1414":{"position":[[5050,6]]},"1431":{"position":[[3317,6]]},"1479":{"position":[[115,6]]}},"keywords":{}}],["sdk",{"_index":3101,"title":{},"content":{"319":{"position":[[227,4]]},"464":{"position":[[318,3]]}},"keywords":{}}],["seamless",{"_index":2417,"title":{},"content":{"211":{"position":[[499,8]]},"245":{"position":[[260,8]]},"974":{"position":[[46,8]]}},"keywords":{}}],["seamlessli",{"_index":388,"title":{},"content":{"13":{"position":[[519,11]]},"19":{"position":[[357,10]]},"209":{"position":[[383,10]]},"239":{"position":[[2049,10]]},"319":{"position":[[967,10]]},"977":{"position":[[550,10]]}},"keywords":{}}],["search",{"_index":1775,"title":{"604":{"position":[[7,6]]}},"content":{"138":{"position":[[876,6]]},"142":{"position":[[847,6]]},"154":{"position":[[1039,6]]},"173":{"position":[[885,6],[1048,6]]},"182":{"position":[[51,6]]},"183":{"position":[[227,6]]},"184":{"position":[[632,6],[756,6]]},"205":{"position":[[172,6]]},"217":{"position":[[1611,6]]},"218":{"position":[[1099,6]]},"270":{"position":[[512,9]]},"274":{"position":[[835,9]]},"296":{"position":[[7244,6]]},"364":{"position":[[1635,6],[1703,6]]},"472":{"position":[[540,6]]},"487":{"position":[[140,6],[152,6]]},"560":{"position":[[246,6]]},"605":{"position":[[46,6],[119,6],[229,6]]},"606":{"position":[[105,6]]},"607":{"position":[[80,6]]},"608":{"position":[[66,6]]},"609":{"position":[[88,6]]},"610":{"position":[[257,6]]},"611":{"position":[[755,6],[1247,6]]},"612":{"position":[[166,6]]},"690":{"position":[[71,7],[79,6]]},"1009":{"position":[[1123,6],[1415,6],[1428,6]]},"1140":{"position":[[3332,6]]},"1316":{"position":[[3332,6]]},"1340":{"position":[[3332,6]]},"1351":{"position":[[3332,6]]},"1379":{"position":[[5099,6]]},"1403":{"position":[[5099,6]]},"1414":{"position":[[5099,6]]},"1431":{"position":[[3355,6]]}},"keywords":{}}],["search".ent",{"_index":3253,"title":{},"content":{"349":{"position":[[141,18]]},"1092":{"position":[[141,18]]}},"keywords":{}}],["second",{"_index":1453,"title":{},"content":{"101":{"position":[[396,6]]},"129":{"position":[[1070,6]]},"146":{"position":[[702,7]]},"149":{"position":[[675,7]]},"152":{"position":[[678,7]]},"180":{"position":[[652,6]]},"206":{"position":[[152,6]]},"234":{"position":[[227,8]]},"237":{"position":[[3162,8]]},"238":{"position":[[1370,7]]},"270":{"position":[[1237,6]]},"296":{"position":[[7877,8]]},"343":{"position":[[716,6],[1060,8]]},"410":{"position":[[168,8]]},"595":{"position":[[393,6]]},"750":{"position":[[184,8]]},"766":{"position":[[184,8]]},"789":{"position":[[218,8]]},"807":{"position":[[218,8]]},"823":{"position":[[218,8]]},"900":{"position":[[270,6]]},"1140":{"position":[[3357,6]]},"1292":{"position":[[4333,6]]},"1306":{"position":[[4333,6]]},"1316":{"position":[[3357,6]]},"1329":{"position":[[4333,6]]},"1340":{"position":[[3357,6]]},"1351":{"position":[[3357,6]]},"1356":{"position":[[800,8],[1245,7]]},"1379":{"position":[[5154,6]]},"1388":{"position":[[148,6],[189,8],[432,8]]},"1403":{"position":[[5154,6]]},"1414":{"position":[[5154,6]]},"1431":{"position":[[3380,6]]}},"keywords":{}}],["second_micro",{"_index":6157,"title":{},"content":{"1292":{"position":[[4654,13]]},"1306":{"position":[[4654,13]]},"1329":{"position":[[4654,13]]}},"keywords":{}}],["secondari",{"_index":6139,"title":{},"content":{"1292":{"position":[[4382,9]]},"1306":{"position":[[4382,9]]},"1329":{"position":[[4382,9]]}},"keywords":{}}],["secondary_eng",{"_index":6142,"title":{},"content":{"1292":{"position":[[4442,13],[4499,13]]},"1306":{"position":[[4442,13],[4499,13]]},"1329":{"position":[[4442,13],[4499,13]]}},"keywords":{}}],["secondary_loa",{"_index":6148,"title":{},"content":{"1292":{"position":[[4546,13]]},"1306":{"position":[[4546,13]]},"1329":{"position":[[4546,13]]}},"keywords":{}}],["secondary_unl",{"_index":6152,"title":{},"content":{"1292":{"position":[[4597,13]]},"1306":{"position":[[4597,13]]},"1329":{"position":[[4597,13]]}},"keywords":{}}],["secret",{"_index":1142,"title":{"82":{"position":[[11,8]]}},"content":{"82":{"position":[[479,8]]},"83":{"position":[[1084,6]]},"190":{"position":[[873,6]]},"191":{"position":[[519,6],[712,9]]},"192":{"position":[[1030,6]]},"210":{"position":[[2265,7]]},"236":{"position":[[2896,8]]},"237":{"position":[[316,8]]},"240":{"position":[[673,9]]},"299":{"position":[[415,6]]},"301":{"position":[[720,6]]},"344":{"position":[[128,6]]},"367":{"position":[[429,9]]},"375":{"position":[[345,6]]},"377":{"position":[[1239,6],[1266,6]]},"384":{"position":[[303,7]]},"387":{"position":[[596,6],[614,6]]},"390":{"position":[[584,6]]},"392":{"position":[[242,6],[364,6]]},"393":{"position":[[261,6]]},"395":{"position":[[763,6]]},"397":{"position":[[180,6],[202,6]]},"398":{"position":[[262,6]]},"405":{"position":[[27,6]]},"408":{"position":[[308,6],[323,6]]},"415":{"position":[[76,6],[308,6]]},"417":{"position":[[911,6]]},"422":{"position":[[42,6]]},"424":{"position":[[124,6],[145,6]]},"432":{"position":[[1045,6]]},"433":{"position":[[695,6]]},"436":{"position":[[268,6],[577,7],[606,7],[646,6],[703,7],[753,6],[1019,6]]},"438":{"position":[[942,6],[960,6]]},"439":{"position":[[246,6]]},"446":{"position":[[108,6]]},"448":{"position":[[510,6],[528,6]]},"489":{"position":[[172,6],[470,7]]},"527":{"position":[[244,8]]},"535":{"position":[[244,8]]},"551":{"position":[[124,6]]},"554":{"position":[[597,7]]},"556":{"position":[[708,6],[726,6]]},"640":{"position":[[252,8]]},"662":{"position":[[172,6],[470,7]]},"670":{"position":[[174,6],[192,6]]},"677":{"position":[[172,6],[470,7]]},"692":{"position":[[172,6],[470,7]]},"721":{"position":[[274,8]]},"728":{"position":[[270,6],[301,7]]},"741":{"position":[[172,6],[190,6]]},"748":{"position":[[150,7],[158,8]]},"752":{"position":[[677,8]]},"753":{"position":[[1333,8]]},"767":{"position":[[2010,8]]},"791":{"position":[[630,8]]},"792":{"position":[[1950,8]]},"793":{"position":[[1304,8]]},"808":{"position":[[1250,8]]},"824":{"position":[[2072,8]]},"840":{"position":[[489,7],[802,6],[2325,6],[2567,6]]},"842":{"position":[[772,6],[788,6],[949,6],[969,6]]},"849":{"position":[[960,7],[1277,6],[3465,6],[3707,6]]},"851":{"position":[[194,6],[370,6],[386,6],[517,6],[537,6]]},"856":{"position":[[85,7]]},"860":{"position":[[215,8]]},"868":{"position":[[215,6]]},"880":{"position":[[314,6]]},"885":{"position":[[171,6],[189,6]]},"894":{"position":[[106,6]]},"895":{"position":[[532,6]]},"898":{"position":[[956,6]]},"904":{"position":[[1490,9]]},"917":{"position":[[352,8]]},"918":{"position":[[1782,9]]},"919":{"position":[[915,8]]},"931":{"position":[[1191,9]]},"947":{"position":[[846,10],[886,6]]},"965":{"position":[[352,8]]},"988":{"position":[[271,7]]},"989":{"position":[[767,7],[1138,7],[1195,7]]},"991":{"position":[[450,6],[479,7],[512,7]]},"992":{"position":[[173,8]]},"1003":{"position":[[271,7]]},"1004":{"position":[[850,7],[1221,7],[1278,7]]},"1009":{"position":[[513,6],[542,7],[575,7]]},"1010":{"position":[[256,8]]},"1016":{"position":[[152,8],[204,8]]},"1032":{"position":[[500,9]]},"1037":{"position":[[230,6]]},"1042":{"position":[[237,9]]},"1043":{"position":[[901,9]]},"1051":{"position":[[1163,9]]},"1067":{"position":[[612,7]]},"1070":{"position":[[552,6],[566,6]]},"1071":{"position":[[211,8],[263,8]]},"1076":{"position":[[221,6]]},"1086":{"position":[[259,8],[283,8]]},"1089":{"position":[[298,7]]},"1091":{"position":[[62,7]]},"1094":{"position":[[170,6],[186,6]]},"1101":{"position":[[127,6],[150,6]]},"1122":{"position":[[389,6]]},"1125":{"position":[[175,6],[197,6]]},"1126":{"position":[[223,6]]},"1133":{"position":[[551,6],[581,7]]},"1142":{"position":[[253,6]]},"1144":{"position":[[249,6],[267,6]]},"1149":{"position":[[701,6]]},"1151":{"position":[[861,6],[883,6]]},"1160":{"position":[[416,6]]},"1162":{"position":[[182,6],[200,6]]},"1168":{"position":[[253,6]]},"1170":{"position":[[249,6],[267,6]]},"1189":{"position":[[258,6]]},"1197":{"position":[[314,6]]},"1204":{"position":[[300,6],[584,6]]},"1206":{"position":[[216,6],[238,6]]},"1207":{"position":[[172,6]]},"1231":{"position":[[191,8]]},"1258":{"position":[[295,6]]},"1260":{"position":[[660,6],[682,6]]},"1270":{"position":[[174,6]]},"1303":{"position":[[1474,8]]},"1362":{"position":[[401,6],[429,7]]},"1363":{"position":[[172,8],[224,8]]},"1373":{"position":[[1084,9]]},"1383":{"position":[[660,9]]},"1387":{"position":[[298,6]]},"1397":{"position":[[863,9]]},"1408":{"position":[[182,9]]},"1409":{"position":[[846,9]]},"1420":{"position":[[421,6]]}},"keywords":{}}],["secret"",{"_index":4976,"title":{},"content":{"898":{"position":[[1029,13]]},"1092":{"position":[[304,12]]}},"keywords":{}}],["secret,"",{"_index":4954,"title":{},"content":{"895":{"position":[[486,13]]}},"keywords":{}}],["secret123",{"_index":5262,"title":{},"content":{"1059":{"position":[[952,13]]},"1374":{"position":[[1084,13]]},"1398":{"position":[[862,13]]}},"keywords":{}}],["secret_access_key",{"_index":5750,"title":{},"content":{"1152":{"position":[[308,17]]}},"keywords":{}}],["secret_client_id",{"_index":4124,"title":{},"content":{"557":{"position":[[232,18]]}},"keywords":{}}],["secret_key",{"_index":3566,"title":{},"content":{"408":{"position":[[288,11]]},"424":{"position":[[112,11]]},"425":{"position":[[136,11]]}},"keywords":{}}],["secret_secret",{"_index":4125,"title":{},"content":{"557":{"position":[[266,15]]}},"keywords":{}}],["secretmarketo",{"_index":4553,"title":{},"content":{"739":{"position":[[176,13]]}},"keywords":{}}],["secretrefresh",{"_index":3473,"title":{},"content":{"384":{"position":[[169,13]]}},"keywords":{}}],["secretten",{"_index":3692,"title":{},"content":{"435":{"position":[[120,12]]}},"keywords":{}}],["secrettoken",{"_index":4742,"title":{},"content":{"840":{"position":[[2547,11]]},"849":{"position":[[3687,11]]}},"keywords":{}}],["section",{"_index":658,"title":{},"content":{"32":{"position":[[9,8]]},"39":{"position":[[9,8]]},"47":{"position":[[6,7]]},"82":{"position":[[1970,8],[3174,8],[4306,8]]},"85":{"position":[[51,7]]},"87":{"position":[[12,7]]},"90":{"position":[[135,8],[565,7]]},"91":{"position":[[318,7]]},"92":{"position":[[240,8],[325,8]]},"144":{"position":[[553,7]]},"146":{"position":[[70,7],[341,7],[576,7],[922,7]]},"149":{"position":[[76,7],[350,7],[549,7],[895,7],[1157,7]]},"152":{"position":[[86,7],[357,7],[552,7],[898,7]]},"191":{"position":[[280,8]]},"192":{"position":[[1214,7]]},"203":{"position":[[611,8]]},"204":{"position":[[693,8]]},"206":{"position":[[41,8],[173,8],[298,8],[1016,8]]},"213":{"position":[[25,8]]},"240":{"position":[[2943,8]]},"249":{"position":[[55,7]]},"254":{"position":[[2103,7],[2522,7]]},"257":{"position":[[34,7]]},"259":{"position":[[293,7],[1982,7]]},"270":{"position":[[175,8]]},"277":{"position":[[11,7]]},"278":{"position":[[11,7]]},"279":{"position":[[11,7]]},"280":{"position":[[11,7]]},"281":{"position":[[11,7],[228,8],[2175,7]]},"286":{"position":[[46,7]]},"296":{"position":[[2655,7]]},"306":{"position":[[32,8],[731,8]]},"314":{"position":[[1650,7],[2153,7]]},"325":{"position":[[841,7]]},"370":{"position":[[27,7]]},"460":{"position":[[487,7]]},"594":{"position":[[1065,7]]},"640":{"position":[[194,7]]},"675":{"position":[[267,7]]},"690":{"position":[[143,7],[241,7]]},"753":{"position":[[475,7]]},"761":{"position":[[270,8]]},"764":{"position":[[925,7]]},"767":{"position":[[621,7]]},"774":{"position":[[270,8]]},"777":{"position":[[925,7]]},"784":{"position":[[274,7]]},"792":{"position":[[899,7]]},"793":{"position":[[434,7]]},"801":{"position":[[276,8]]},"804":{"position":[[923,7]]},"808":{"position":[[450,7]]},"816":{"position":[[276,8]]},"819":{"position":[[923,7]]},"824":{"position":[[691,7]]},"832":{"position":[[276,8]]},"835":{"position":[[923,7]]},"840":{"position":[[696,8],[1033,8]]},"849":{"position":[[502,8],[639,8],[1171,8],[2044,8]]},"866":{"position":[[451,7]]},"878":{"position":[[461,7]]},"899":{"position":[[121,8],[156,7]]},"904":{"position":[[690,7]]},"918":{"position":[[899,7]]},"919":{"position":[[434,7]]},"931":{"position":[[454,7],[755,8]]},"1043":{"position":[[434,7]]},"1051":{"position":[[690,7]]},"1059":{"position":[[454,7]]},"1138":{"position":[[27,7]]},"1140":{"position":[[3387,7]]},"1154":{"position":[[640,7]]},"1198":{"position":[[363,7]]},"1255":{"position":[[274,7]]},"1289":{"position":[[980,7]]},"1303":{"position":[[454,7],[691,7]]},"1316":{"position":[[3387,7]]},"1322":{"position":[[1199,7]]},"1340":{"position":[[3387,7]]},"1351":{"position":[[3387,7]]},"1356":{"position":[[483,8]]},"1373":{"position":[[672,7]]},"1374":{"position":[[672,7]]},"1379":{"position":[[5212,7]]},"1397":{"position":[[451,7]]},"1398":{"position":[[450,7]]},"1403":{"position":[[5212,7]]},"1409":{"position":[[434,7]]},"1414":{"position":[[5212,7]]},"1431":{"position":[[3410,7]]},"1448":{"position":[[1174,8]]},"1461":{"position":[[5168,9]]}},"keywords":{}}],["sectionfor",{"_index":4948,"title":{},"content":{"895":{"position":[[139,10]]}},"keywords":{}}],["sectionselect",{"_index":3522,"title":{},"content":{"395":{"position":[[250,13]]}},"keywords":{}}],["secur",{"_index":646,"title":{"83":{"position":[[27,6]]},"429":{"position":[[30,9]]}},"content":{"30":{"position":[[162,7]]},"83":{"position":[[68,6],[170,8]]},"168":{"position":[[169,6]]},"170":{"position":[[43,6]]},"213":{"position":[[405,6]]},"221":{"position":[[2023,8]]},"222":{"position":[[743,8]]},"237":{"position":[[583,6]]},"249":{"position":[[139,9]]},"366":{"position":[[1111,8]]},"428":{"position":[[213,8]]},"429":{"position":[[39,8],[221,8],[981,9],[1367,8],[1423,8]]},"709":{"position":[[339,8]]},"753":{"position":[[302,6],[600,6]]},"767":{"position":[[140,8],[206,8],[448,6],[746,6]]},"784":{"position":[[82,6],[402,6]]},"792":{"position":[[460,8],[526,8],[736,6],[1024,6]]},"793":{"position":[[271,6],[559,6]]},"808":{"position":[[287,6],[575,6]]},"824":{"position":[[252,8],[318,8],[528,6],[816,6]]},"840":{"position":[[2676,9]]},"866":{"position":[[287,6],[576,6]]},"878":{"position":[[297,6],[586,6]]},"904":{"position":[[252,8],[318,8],[527,6],[815,6]]},"918":{"position":[[460,8],[526,8],[736,6],[1024,6]]},"919":{"position":[[271,6],[559,6]]},"931":{"position":[[291,6],[579,6]]},"1042":{"position":[[1102,6],[1365,6]]},"1043":{"position":[[271,6],[559,6]]},"1051":{"position":[[252,8],[318,8],[527,6],[815,6]]},"1059":{"position":[[291,6],[579,6]]},"1136":{"position":[[264,8]]},"1154":{"position":[[466,6],[770,6]]},"1194":{"position":[[215,8]]},"1198":{"position":[[171,6],[491,6]]},"1255":{"position":[[82,6],[402,6]]},"1268":{"position":[[38,8],[685,9]]},"1282":{"position":[[384,9]]},"1286":{"position":[[2316,6]]},"1288":{"position":[[96,9]]},"1289":{"position":[[234,8],[309,8],[1110,6]]},"1292":{"position":[[4720,8]]},"1301":{"position":[[2152,6]]},"1303":{"position":[[291,6],[579,6],[821,6]]},"1306":{"position":[[4720,8]]},"1310":{"position":[[399,9]]},"1321":{"position":[[14,8],[89,8]]},"1322":{"position":[[743,8],[1329,6]]},"1325":{"position":[[2316,6]]},"1329":{"position":[[4720,8]]},"1334":{"position":[[14,8],[89,8]]},"1335":{"position":[[743,8]]},"1373":{"position":[[252,8],[318,8],[509,6],[797,6]]},"1374":{"position":[[252,8],[318,8],[509,6],[797,6]]},"1397":{"position":[[288,6],[576,6]]},"1398":{"position":[[287,6],[575,6]]},"1408":{"position":[[375,6],[638,6]]},"1409":{"position":[[271,6],[559,6]]}},"keywords":{}}],["security.protocol=sasl_ssl",{"_index":2679,"title":{},"content":{"250":{"position":[[1295,26]]}},"keywords":{}}],["security_protocol",{"_index":2649,"title":{},"content":{"250":{"position":[[309,20]]}},"keywords":{}}],["security_protocol=conf['security_protocol",{"_index":2661,"title":{},"content":{"250":{"position":[[631,44]]}},"keywords":{}}],["securityaudit",{"_index":6356,"title":{},"content":{"1379":{"position":[[5259,13]]},"1403":{"position":[[5259,13]]},"1414":{"position":[[5259,13]]}},"keywords":{}}],["see",{"_index":281,"title":{},"content":{"8":{"position":[[892,3]]},"52":{"position":[[202,3]]},"53":{"position":[[537,3]]},"63":{"position":[[466,3]]},"68":{"position":[[1206,3]]},"69":{"position":[[934,3]]},"83":{"position":[[355,3],[671,3],[1414,3]]},"91":{"position":[[376,3]]},"103":{"position":[[795,3]]},"110":{"position":[[1433,3]]},"138":{"position":[[1331,3],[2674,3]]},"139":{"position":[[237,3]]},"140":{"position":[[337,3]]},"141":{"position":[[299,3],[2264,3]]},"142":{"position":[[1324,3],[2751,3]]},"143":{"position":[[277,3]]},"144":{"position":[[838,3]]},"146":{"position":[[600,3],[1024,3]]},"149":{"position":[[573,3],[1018,3]]},"152":{"position":[[576,3],[1008,3]]},"154":{"position":[[766,3],[909,3]]},"157":{"position":[[430,3]]},"168":{"position":[[58,3]]},"173":{"position":[[1231,3]]},"181":{"position":[[45,3]]},"182":{"position":[[222,4]]},"183":{"position":[[4123,3]]},"184":{"position":[[522,3]]},"185":{"position":[[162,3]]},"190":{"position":[[550,3],[1975,3]]},"191":{"position":[[289,3]]},"193":{"position":[[507,3],[714,3]]},"203":{"position":[[445,3]]},"204":{"position":[[54,4]]},"206":{"position":[[977,3]]},"207":{"position":[[608,3],[664,3]]},"209":{"position":[[149,3],[255,3]]},"210":{"position":[[44,3],[235,3],[298,3],[1516,3]]},"217":{"position":[[2186,3]]},"218":{"position":[[2112,3]]},"229":{"position":[[251,3]]},"232":{"position":[[602,3]]},"236":{"position":[[2597,3]]},"237":{"position":[[3182,3],[3554,3]]},"239":{"position":[[1049,3],[1469,3],[1699,3]]},"240":{"position":[[3812,3],[4380,3],[4681,3]]},"253":{"position":[[949,3]]},"254":{"position":[[1609,4]]},"255":{"position":[[808,4],[1277,3]]},"257":{"position":[[199,3]]},"259":{"position":[[661,3]]},"264":{"position":[[219,3],[881,3]]},"266":{"position":[[238,3]]},"270":{"position":[[1527,3]]},"275":{"position":[[241,3]]},"278":{"position":[[236,3]]},"281":{"position":[[3318,4]]},"286":{"position":[[306,3]]},"290":{"position":[[1666,3]]},"291":{"position":[[1922,3]]},"292":{"position":[[277,3]]},"295":{"position":[[602,4],[880,3],[1739,3],[3898,3]]},"296":{"position":[[4355,3],[6500,3],[6916,3],[7685,3],[7897,3]]},"299":{"position":[[447,3]]},"301":{"position":[[1169,3],[1640,3]]},"302":{"position":[[1834,3]]},"303":{"position":[[268,3]]},"307":{"position":[[535,3]]},"308":{"position":[[253,3]]},"309":{"position":[[1544,3],[1844,3]]},"313":{"position":[[949,3]]},"314":{"position":[[1409,4]]},"315":{"position":[[222,3],[845,3],[2321,4]]},"316":{"position":[[1133,4],[1602,3]]},"320":{"position":[[2338,3]]},"322":{"position":[[210,3]]},"343":{"position":[[1156,4]]},"350":{"position":[[109,3]]},"358":{"position":[[109,3]]},"368":{"position":[[479,3]]},"369":{"position":[[109,3]]},"370":{"position":[[185,3]]},"373":{"position":[[1004,3]]},"376":{"position":[[109,3]]},"385":{"position":[[459,3]]},"386":{"position":[[109,3]]},"390":{"position":[[495,3],[616,3]]},"391":{"position":[[109,3]]},"395":{"position":[[665,3],[795,3]]},"396":{"position":[[109,3]]},"401":{"position":[[179,3]]},"407":{"position":[[109,3]]},"413":{"position":[[410,3]]},"415":{"position":[[327,3]]},"416":{"position":[[109,3]]},"417":{"position":[[1437,3]]},"423":{"position":[[109,3]]},"429":{"position":[[1260,3]]},"431":{"position":[[109,3]]},"437":{"position":[[109,3]]},"447":{"position":[[109,3]]},"453":{"position":[[109,3]]},"459":{"position":[[109,3]]},"465":{"position":[[109,3]]},"472":{"position":[[109,3]]},"475":{"position":[[305,3]]},"481":{"position":[[109,3]]},"485":{"position":[[306,3]]},"488":{"position":[[648,3]]},"495":{"position":[[109,3]]},"496":{"position":[[191,3]]},"501":{"position":[[65,3]]},"502":{"position":[[1085,3]]},"508":{"position":[[109,3]]},"516":{"position":[[109,3]]},"525":{"position":[[109,3]]},"531":{"position":[[539,3]]},"533":{"position":[[109,3]]},"539":{"position":[[109,3]]},"544":{"position":[[109,3]]},"555":{"position":[[106,3]]},"556":{"position":[[491,3],[1194,3]]},"558":{"position":[[183,3]]},"572":{"position":[[109,3]]},"583":{"position":[[99,3]]},"584":{"position":[[1285,3]]},"592":{"position":[[106,3]]},"593":{"position":[[465,3]]},"594":{"position":[[1045,4]]},"597":{"position":[[268,3]]},"610":{"position":[[109,3]]},"618":{"position":[[109,3]]},"624":{"position":[[109,3]]},"630":{"position":[[109,3]]},"636":{"position":[[109,3]]},"640":{"position":[[280,3]]},"646":{"position":[[109,3]]},"653":{"position":[[109,3]]},"657":{"position":[[306,3]]},"659":{"position":[[805,3]]},"667":{"position":[[95,3]]},"669":{"position":[[109,3]]},"673":{"position":[[306,3]]},"676":{"position":[[648,3]]},"684":{"position":[[109,3]]},"688":{"position":[[306,3]]},"690":{"position":[[220,3]]},"691":{"position":[[648,3]]},"699":{"position":[[109,3]]},"705":{"position":[[109,3]]},"711":{"position":[[109,3]]},"719":{"position":[[104,3]]},"724":{"position":[[261,3],[686,3]]},"727":{"position":[[109,3]]},"734":{"position":[[109,3]]},"738":{"position":[[290,3],[420,3]]},"740":{"position":[[109,3]]},"746":{"position":[[109,3]]},"747":{"position":[[107,3]]},"750":{"position":[[1416,3]]},"752":{"position":[[1031,3]]},"753":{"position":[[569,3]]},"754":{"position":[[1223,4]]},"755":{"position":[[479,3]]},"756":{"position":[[109,3]]},"760":{"position":[[877,3]]},"767":{"position":[[715,3]]},"768":{"position":[[479,3]]},"769":{"position":[[109,3]]},"773":{"position":[[877,3]]},"780":{"position":[[121,3],[418,3]]},"781":{"position":[[106,3]]},"784":{"position":[[371,3]]},"786":{"position":[[398,3]]},"789":{"position":[[1817,3]]},"791":{"position":[[1065,3]]},"792":{"position":[[993,3]]},"793":{"position":[[528,3]]},"794":{"position":[[1427,4]]},"795":{"position":[[477,3]]},"796":{"position":[[110,3]]},"800":{"position":[[877,3]]},"808":{"position":[[544,3]]},"809":{"position":[[1427,4]]},"810":{"position":[[477,3]]},"811":{"position":[[109,3]]},"815":{"position":[[877,3]]},"824":{"position":[[785,3]]},"825":{"position":[[1263,4]]},"826":{"position":[[477,3]]},"827":{"position":[[109,3]]},"831":{"position":[[877,3]]},"839":{"position":[[180,3]]},"841":{"position":[[109,3]]},"848":{"position":[[217,3]]},"850":{"position":[[109,3]]},"858":{"position":[[109,3]]},"866":{"position":[[109,3],[545,3]]},"870":{"position":[[553,3]]},"871":{"position":[[8,3]]},"878":{"position":[[109,3],[555,3]]},"884":{"position":[[109,3]]},"890":{"position":[[110,3]]},"896":{"position":[[109,3]]},"904":{"position":[[784,3]]},"905":{"position":[[482,3]]},"906":{"position":[[109,3]]},"909":{"position":[[1059,3]]},"915":{"position":[[1273,3]]},"918":{"position":[[993,3]]},"919":{"position":[[528,3]]},"920":{"position":[[482,3]]},"921":{"position":[[109,3]]},"925":{"position":[[1059,3]]},"931":{"position":[[548,3]]},"932":{"position":[[482,3]]},"933":{"position":[[109,3]]},"936":{"position":[[1059,3]]},"943":{"position":[[730,3]]},"945":{"position":[[1072,3]]},"946":{"position":[[355,3]]},"948":{"position":[[482,3]]},"949":{"position":[[109,3]]},"952":{"position":[[1059,3]]},"958":{"position":[[109,3]]},"963":{"position":[[173,3],[1427,3]]},"966":{"position":[[482,3]]},"967":{"position":[[109,3]]},"970":{"position":[[1059,3]]},"981":{"position":[[109,3]]},"988":{"position":[[298,3]]},"990":{"position":[[109,3]]},"996":{"position":[[109,3]]},"1003":{"position":[[298,3]]},"1005":{"position":[[106,3]]},"1014":{"position":[[109,3]]},"1021":{"position":[[109,3],[1596,3]]},"1027":{"position":[[109,3]]},"1031":{"position":[[811,3]]},"1033":{"position":[[113,3]]},"1042":{"position":[[1334,3]]},"1043":{"position":[[528,3]]},"1044":{"position":[[109,3]]},"1051":{"position":[[784,3]]},"1052":{"position":[[109,3]]},"1059":{"position":[[548,3]]},"1060":{"position":[[109,3]]},"1069":{"position":[[109,3]]},"1075":{"position":[[109,3]]},"1084":{"position":[[109,3]]},"1093":{"position":[[109,3]]},"1100":{"position":[[109,3]]},"1106":{"position":[[110,3]]},"1112":{"position":[[109,3]]},"1118":{"position":[[742,3],[951,3]]},"1122":{"position":[[292,3],[421,3]]},"1124":{"position":[[109,3]]},"1131":{"position":[[180,3]]},"1132":{"position":[[110,3]]},"1138":{"position":[[185,3]]},"1142":{"position":[[70,3],[272,3]]},"1149":{"position":[[365,3],[525,3],[720,3]]},"1154":{"position":[[739,3]]},"1160":{"position":[[70,3],[181,3],[435,3]]},"1168":{"position":[[70,3],[272,3]]},"1176":{"position":[[414,3]]},"1178":{"position":[[493,3]]},"1179":{"position":[[947,3]]},"1186":{"position":[[89,3],[531,4],[682,3]]},"1192":{"position":[[443,3]]},"1194":{"position":[[164,4]]},"1198":{"position":[[460,3]]},"1203":{"position":[[596,3]]},"1204":{"position":[[643,3]]},"1206":{"position":[[1121,3]]},"1211":{"position":[[70,3]]},"1218":{"position":[[70,3]]},"1227":{"position":[[192,3]]},"1228":{"position":[[207,3],[308,3]]},"1251":{"position":[[153,3]]},"1252":{"position":[[106,3]]},"1255":{"position":[[371,3]]},"1258":{"position":[[119,3],[314,3]]},"1286":{"position":[[1513,4]]},"1289":{"position":[[727,3],[1079,3]]},"1301":{"position":[[1349,4]]},"1303":{"position":[[548,3],[790,3]]},"1322":{"position":[[1298,3]]},"1325":{"position":[[1513,4]]},"1334":{"position":[[229,3]]},"1356":{"position":[[333,3],[699,3]]},"1373":{"position":[[766,3]]},"1374":{"position":[[766,3]]},"1382":{"position":[[311,3]]},"1391":{"position":[[457,3]]},"1393":{"position":[[301,3]]},"1394":{"position":[[440,3]]},"1397":{"position":[[545,3]]},"1398":{"position":[[544,3]]},"1408":{"position":[[607,3]]},"1409":{"position":[[528,3]]},"1423":{"position":[[450,3]]}},"keywords":{}}],["seeconnector",{"_index":4285,"title":{},"content":{"600":{"position":[[109,13]]}},"keywords":{}}],["seeedit",{"_index":5838,"title":{},"content":{"1200":{"position":[[620,7]]}},"keywords":{}}],["seek",{"_index":5664,"title":{},"content":{"1140":{"position":[[3428,4]]},"1316":{"position":[[3428,4]]},"1340":{"position":[[3428,4]]},"1351":{"position":[[3428,4]]},"1431":{"position":[[3451,4]]}},"keywords":{}}],["seem",{"_index":2192,"title":{},"content":{"197":{"position":[[1229,4]]}},"keywords":{}}],["seemingli",{"_index":6491,"title":{},"content":{"1439":{"position":[[1276,9]]}},"keywords":{}}],["seen",{"_index":151,"title":{},"content":{"4":{"position":[[10,5]]},"74":{"position":[[757,4]]},"278":{"position":[[380,4]]},"1440":{"position":[[1159,4]]},"1463":{"position":[[77,4]]},"1476":{"position":[[85,4],[1167,5]]}},"keywords":{}}],["seen_pair",{"_index":2840,"title":{},"content":{"278":{"position":[[1002,10],[1214,10],[1398,10]]}},"keywords":{}}],["segment",{"_index":3530,"title":{},"content":{"397":{"position":[[414,8],[433,8]]},"585":{"position":[[446,8],[498,9]]},"659":{"position":[[72,8]]},"660":{"position":[[120,8]]},"661":{"position":[[451,8]]},"686":{"position":[[970,8]]},"764":{"position":[[356,7]]},"777":{"position":[[356,7]]},"804":{"position":[[354,7]]},"819":{"position":[[354,7]]},"835":{"position":[[354,7]]},"1461":{"position":[[1610,8]]}},"keywords":{}}],["segments.d",{"_index":4118,"title":{},"content":{"556":{"position":[[1168,13]]}},"keywords":{}}],["segmentscontactscontact",{"_index":4429,"title":{},"content":{"682":{"position":[[112,23]]}},"keywords":{}}],["select",{"_index":185,"title":{"385":{"position":[[0,9]]}},"content":{"4":{"position":[[668,9]]},"12":{"position":[[445,8]]},"17":{"position":[[354,7],[718,7]]},"82":{"position":[[3770,11]]},"94":{"position":[[2580,6]]},"96":{"position":[[208,6]]},"97":{"position":[[497,6]]},"98":{"position":[[134,6],[375,6],[474,8],[535,6],[900,7],[1087,6]]},"107":{"position":[[2768,6],[3334,6],[4052,6]]},"114":{"position":[[350,6],[391,6],[432,6]]},"115":{"position":[[808,6],[825,6],[844,6]]},"122":{"position":[[392,6],[721,9],[1250,6]]},"138":{"position":[[179,6],[285,8],[559,8],[2145,6]]},"140":{"position":[[141,6]]},"141":{"position":[[489,6],[595,8],[2101,6]]},"142":{"position":[[292,6],[398,8],[2205,6]]},"144":{"position":[[380,6]]},"146":{"position":[[284,6]]},"149":{"position":[[293,6]]},"152":{"position":[[300,6]]},"171":{"position":[[278,6]]},"173":{"position":[[924,6],[1000,9],[1023,6],[1164,8]]},"183":{"position":[[242,6],[650,8],[3018,6]]},"190":{"position":[[1241,9]]},"192":{"position":[[1683,9]]},"208":{"position":[[16,9]]},"210":{"position":[[97,8]]},"217":{"position":[[778,6],[1389,8],[1763,6]]},"222":{"position":[[801,9]]},"230":{"position":[[315,8]]},"238":{"position":[[1201,6],[1270,6]]},"240":{"position":[[2175,9],[3943,9]]},"254":{"position":[[680,6],[2737,6],[3398,6],[3591,6],[3682,6],[3789,8]]},"259":{"position":[[792,11]]},"263":{"position":[[701,6],[733,6]]},"267":{"position":[[281,6],[1018,8]]},"277":{"position":[[737,6],[1101,6]]},"281":{"position":[[315,6]]},"290":{"position":[[594,6]]},"296":{"position":[[7404,6]]},"301":{"position":[[534,6]]},"307":{"position":[[3285,8]]},"309":{"position":[[3609,8]]},"320":{"position":[[899,9]]},"349":{"position":[[199,6]]},"367":{"position":[[445,6],[548,6]]},"385":{"position":[[139,6]]},"395":{"position":[[137,6]]},"436":{"position":[[123,6],[164,6],[322,6]]},"469":{"position":[[90,10]]},"479":{"position":[[159,6],[627,9],[873,10]]},"480":{"position":[[53,6],[1007,6]]},"487":{"position":[[249,6],[577,6],[660,6]]},"520":{"position":[[118,10]]},"526":{"position":[[112,6]]},"529":{"position":[[137,10]]},"552":{"position":[[476,9],[651,9]]},"557":{"position":[[480,6]]},"654":{"position":[[723,6]]},"675":{"position":[[48,6],[355,6]]},"747":{"position":[[621,6]]},"752":{"position":[[474,6],[762,6]]},"753":{"position":[[1130,6],[1418,6]]},"767":{"position":[[2095,6]]},"791":{"position":[[427,6],[767,6]]},"792":{"position":[[2087,6]]},"793":{"position":[[1101,6],[1441,6]]},"808":{"position":[[1047,6],[1387,6]]},"824":{"position":[[2209,6]]},"840":{"position":[[1832,6],[2010,6],[2050,6],[2112,6]]},"849":{"position":[[2873,6],[3129,6],[3190,6],[3252,6]]},"864":{"position":[[456,6],[602,6],[697,6],[1153,6],[1202,6],[1247,6]]},"867":{"position":[[1738,8]]},"876":{"position":[[456,6],[602,6],[697,6]]},"895":{"position":[[422,8]]},"904":{"position":[[1545,6],[1648,6]]},"912":{"position":[[901,6],[1201,6]]},"917":{"position":[[556,6],[596,6],[679,6],[913,6]]},"918":{"position":[[1837,6],[1940,6]]},"919":{"position":[[1093,6],[1133,6],[1210,6],[1438,6],[1739,6],[1779,6],[1856,6]]},"922":{"position":[[1806,6]]},"931":{"position":[[1207,6],[1310,6]]},"942":{"position":[[421,6],[484,6]]},"944":{"position":[[200,6],[299,6],[340,6]]},"947":{"position":[[29,6],[1038,6]]},"965":{"position":[[556,6],[596,6],[679,6],[913,6]]},"989":{"position":[[839,9],[870,6]]},"1004":{"position":[[922,9],[953,6]]},"1009":{"position":[[1454,8]]},"1032":{"position":[[1726,6],[1830,6]]},"1040":{"position":[[690,6]]},"1042":{"position":[[535,6],[582,6],[759,7]]},"1043":{"position":[[1199,6],[1246,6],[1423,7]]},"1050":{"position":[[690,6]]},"1051":{"position":[[1461,6],[1508,6],[1685,7]]},"1058":{"position":[[690,6]]},"1059":{"position":[[1254,6],[1301,6],[1478,7]]},"1087":{"position":[[135,6]]},"1092":{"position":[[203,6]]},"1118":{"position":[[818,6]]},"1123":{"position":[[429,9]]},"1140":{"position":[[3453,6]]},"1160":{"position":[[287,6]]},"1177":{"position":[[307,6]]},"1183":{"position":[[955,6]]},"1195":{"position":[[477,8]]},"1200":{"position":[[318,9]]},"1201":{"position":[[366,8]]},"1203":{"position":[[262,6]]},"1209":{"position":[[466,6]]},"1265":{"position":[[1,6]]},"1276":{"position":[[397,9]]},"1292":{"position":[[4768,6]]},"1306":{"position":[[4768,6]]},"1316":{"position":[[3453,6]]},"1322":{"position":[[801,9]]},"1329":{"position":[[4768,6]]},"1335":{"position":[[801,9]]},"1340":{"position":[[3453,6]]},"1351":{"position":[[3453,6]]},"1370":{"position":[[1044,6]]},"1379":{"position":[[5315,6]]},"1384":{"position":[[805,6]]},"1394":{"position":[[651,6]]},"1403":{"position":[[5315,6]]},"1414":{"position":[[5315,6]]},"1418":{"position":[[177,6],[310,9]]},"1429":{"position":[[346,6],[821,7]]},"1431":{"position":[[3476,6]]},"1455":{"position":[[80,6],[173,6],[550,8]]},"1472":{"position":[[246,6]]},"1479":{"position":[[511,6],[582,9]]}},"keywords":{}}],["select_catalog_rol",{"_index":4856,"title":{},"content":{"864":{"position":[[1056,19]]},"876":{"position":[[873,19]]}},"keywords":{}}],["select_properties_by_default",{"_index":4564,"title":{},"content":{"747":{"position":[[591,29]]},"748":{"position":[[264,29]]}},"keywords":{}}],["selector",{"_index":488,"title":{"17":{"position":[[10,10]]},"123":{"position":[[10,10]]},"130":{"position":[[10,10]]}},"content":{"17":{"position":[[125,9],[236,9],[1048,9]]},"94":{"position":[[1446,8]]},"106":{"position":[[181,8],[278,9],[334,8]]},"123":{"position":[[11,9],[468,9],[629,9],[842,10]]},"130":{"position":[[38,8],[422,10]]},"144":{"position":[[580,8]]},"218":{"position":[[1980,8]]},"230":{"position":[[457,9]]},"302":{"position":[[1026,9]]},"1472":{"position":[[289,8],[393,8]]}},"keywords":{}}],["self",{"_index":1299,"title":{"175":{"position":[[0,4]]},"752":{"position":[[0,4]]},"791":{"position":[[0,4]]},"917":{"position":[[0,4]]},"1042":{"position":[[0,4]]},"1408":{"position":[[0,4]]}},"content":{"88":{"position":[[245,4]]},"92":{"position":[[805,4]]},"175":{"position":[[83,4],[153,4],[347,4]]},"179":{"position":[[593,4]]},"280":{"position":[[799,4]]},"329":{"position":[[647,4]]},"788":{"position":[[68,4],[154,4]]},"790":{"position":[[70,4]]},"914":{"position":[[97,4],[183,4]]},"916":{"position":[[70,4]]},"989":{"position":[[1085,4]]},"1004":{"position":[[1168,4]]},"1039":{"position":[[287,4]]},"1041":{"position":[[70,4]]},"1050":{"position":[[985,4]]},"1407":{"position":[[70,4]]}},"keywords":{}}],["semant",{"_index":570,"title":{"1166":{"position":[[14,10]]},"1435":{"position":[[13,10]]}},"content":{"21":{"position":[[505,10]]},"114":{"position":[[741,10]]},"115":{"position":[[1058,10],[1173,10],[1523,9]]},"124":{"position":[[363,10]]},"319":{"position":[[1158,9],[1353,9]]},"320":{"position":[[699,10]]},"332":{"position":[[172,10]]},"1358":{"position":[[352,9],[718,10]]},"1437":{"position":[[555,10]]},"1438":{"position":[[94,10]]},"1439":{"position":[[1364,8],[1724,9]]},"1442":{"position":[[844,10],[1690,9],[1809,9]]},"1459":{"position":[[570,9]]}},"keywords":{}}],["semantickeyph",{"_index":6357,"title":{},"content":{"1379":{"position":[[5354,13]]},"1403":{"position":[[5354,13]]},"1414":{"position":[[5354,13]]}},"keywords":{}}],["semanticsimil",{"_index":6340,"title":{},"content":{"1379":{"position":[[3766,13],[3826,13]]},"1403":{"position":[[3766,13],[3826,13]]},"1414":{"position":[[3766,13],[3826,13]]}},"keywords":{}}],["semi",{"_index":5818,"title":{},"content":{"1192":{"position":[[558,4],[563,4]]}},"keywords":{}}],["send",{"_index":1707,"title":{"486":{"position":[[0,4]]},"658":{"position":[[0,4]]},"674":{"position":[[0,4]]},"689":{"position":[[0,4]]}},"content":{"125":{"position":[[1064,5]]},"174":{"position":[[341,4]]},"277":{"position":[[523,4],[576,5],[876,4]]},"278":{"position":[[165,7],[181,5],[857,4],[905,5]]},"280":{"position":[[504,5]]},"485":{"position":[[505,4]]},"486":{"position":[[173,4],[268,4],[306,7]]},"489":{"position":[[357,4]]},"517":{"position":[[3263,7],[3501,7]]},"635":{"position":[[245,4]]},"640":{"position":[[57,4]]},"657":{"position":[[690,4]]},"658":{"position":[[173,4],[268,4],[306,7]]},"662":{"position":[[357,4]]},"673":{"position":[[505,4]]},"674":{"position":[[173,4],[268,4],[306,7]]},"675":{"position":[[362,4]]},"677":{"position":[[357,4]]},"688":{"position":[[505,4]]},"689":{"position":[[173,4],[268,4],[306,7]]},"692":{"position":[[357,4]]},"697":{"position":[[169,4]]},"922":{"position":[[137,7]]},"1239":{"position":[[93,4]]},"1267":{"position":[[226,4]]},"1269":{"position":[[87,4]]},"1362":{"position":[[633,4]]},"1434":{"position":[[954,4]]},"1440":{"position":[[280,5]]},"1442":{"position":[[245,5],[479,7],[1707,4],[1826,4],[1862,7]]},"1443":{"position":[[540,7],[851,4],[886,7]]},"1444":{"position":[[235,5]]},"1453":{"position":[[84,7]]}},"keywords":{}}],["send.flow.yamlfirst",{"_index":2838,"title":{},"content":{"278":{"position":[[837,19]]}},"keywords":{}}],["send.flow.yamllast",{"_index":2827,"title":{},"content":{"277":{"position":[[498,18]]}},"keywords":{}}],["send_email",{"_index":4543,"title":{},"content":{"738":{"position":[[278,11]]}},"keywords":{}}],["sendemail",{"_index":4454,"title":{},"content":{"697":{"position":[[159,9]]}},"keywords":{}}],["sender",{"_index":1518,"title":{},"content":{"107":{"position":[[629,7],[1023,7],[1114,7],[2004,10],[2023,6],[2091,9],[2111,9]]},"277":{"position":[[377,7],[617,9],[749,8]]},"278":{"position":[[297,8],[1015,6],[1074,8],[1172,9],[1225,8],[1252,9],[1312,8]]},"279":{"position":[[1310,6],[1428,9],[1522,9],[1635,9]]},"280":{"position":[[365,7],[1670,7],[1724,9],[1833,6]]},"281":{"position":[[1509,7]]},"1362":{"position":[[719,6]]}},"keywords":{}}],["sender'",{"_index":2863,"title":{},"content":{"280":{"position":[[414,8],[1226,8]]}},"keywords":{}}],["sender_bal",{"_index":2870,"title":{},"content":{"280":{"position":[[1292,15],[1421,15]]}},"keywords":{}}],["sender_config",{"_index":6287,"title":{},"content":{"1363":{"position":[[322,14]]}},"keywords":{}}],["sendgrid",{"_index":3375,"title":{"978":{"position":[[0,8]]}},"content":{"364":{"position":[[3082,8]]},"979":{"position":[[56,8]]},"980":{"position":[[1,8]]},"981":{"position":[[250,8]]},"982":{"position":[[68,8],[102,8],[222,8],[430,8]]}},"keywords":{}}],["sendgrid:dev",{"_index":3376,"title":{},"content":{"364":{"position":[[3137,12]]},"983":{"position":[[90,12]]}},"keywords":{}}],["sendsacknowledg",{"_index":6498,"title":{},"content":{"1442":{"position":[[144,16],[1156,18]]}},"keywords":{}}],["sendstemplatesglob",{"_index":5136,"title":{},"content":{"979":{"position":[[126,20]]}},"keywords":{}}],["sens",{"_index":3166,"title":{},"content":{"324":{"position":[[705,5]]},"326":{"position":[[514,5]]}},"keywords":{}}],["sensit",{"_index":1141,"title":{},"content":{"81":{"position":[[2910,9]]},"82":{"position":[[90,9],[1123,9],[3496,9],[3514,9],[3637,9]]},"124":{"position":[[398,9]]},"496":{"position":[[120,10]]},"548":{"position":[[729,9]]},"865":{"position":[[135,10]]},"877":{"position":[[135,9]]},"1140":{"position":[[3496,9]]},"1292":{"position":[[4811,9]]},"1306":{"position":[[4811,9]]},"1316":{"position":[[3496,9]]},"1329":{"position":[[4811,9]]},"1340":{"position":[[3496,9]]},"1351":{"position":[[3496,9]]},"1379":{"position":[[3893,9]]},"1403":{"position":[[3893,9]]},"1414":{"position":[[3893,9]]},"1431":{"position":[[3519,9]]}},"keywords":{}}],["sensitive!"",{"_index":1162,"title":{},"content":{"82":{"position":[[1428,16],[3863,16]]}},"keywords":{}}],["sensor",{"_index":1578,"title":{},"content":{"110":{"position":[[746,6],[1083,6],[1136,7],[1283,6]]}},"keywords":{}}],["sent",{"_index":3871,"title":{},"content":{"488":{"position":[[889,4],[1018,4]]},"659":{"position":[[1046,4],[1175,4]]},"660":{"position":[[160,4]]},"676":{"position":[[889,4],[1018,4]]},"691":{"position":[[889,4],[1018,4]]},"922":{"position":[[567,4],[728,4]]},"1240":{"position":[[128,5]]},"1362":{"position":[[554,4]]},"1442":{"position":[[60,4],[388,4],[612,4]]},"1443":{"position":[[32,4],[580,4]]},"1444":{"position":[[33,4]]},"1453":{"position":[[492,4],[578,4]]},"1455":{"position":[[587,4]]},"1456":{"position":[[137,4]]}},"keywords":{}}],["sent<br/>befor",{"_index":6443,"title":{},"content":{"1434":{"position":[[743,21]]}},"keywords":{}}],["sentacknowledg",{"_index":6505,"title":{},"content":{"1443":{"position":[[432,16]]}},"keywords":{}}],["sentri",{"_index":3377,"title":{"993":{"position":[[0,6]]}},"content":{"364":{"position":[[3150,6]]},"994":{"position":[[56,6]]},"995":{"position":[[15,6],[56,6]]},"996":{"position":[[250,6]]},"997":{"position":[[107,6],[398,6]]}},"keywords":{}}],["sentry:dev",{"_index":3378,"title":{},"content":{"364":{"position":[[3203,10]]},"998":{"position":[[90,10]]}},"keywords":{}}],["separ",{"_index":469,"title":{},"content":{"16":{"position":[[588,8]]},"38":{"position":[[295,8]]},"56":{"position":[[1569,9]]},"81":{"position":[[2485,8],[2772,8]]},"120":{"position":[[874,8]]},"121":{"position":[[1710,8]]},"154":{"position":[[628,8]]},"162":{"position":[[1071,10],[1299,8]]},"165":{"position":[[1182,8]]},"207":{"position":[[363,8],[1082,8]]},"208":{"position":[[608,10]]},"236":{"position":[[547,8]]},"296":{"position":[[2539,8]]},"306":{"position":[[257,11]]},"320":{"position":[[1102,8]]},"324":{"position":[[1127,9]]},"370":{"position":[[1080,9]]},"377":{"position":[[1608,9]]},"379":{"position":[[288,8]]},"381":{"position":[[607,8]]},"385":{"position":[[559,8]]},"419":{"position":[[1794,9],[2622,9]]},"421":{"position":[[206,8]]},"432":{"position":[[153,9]]},"441":{"position":[[403,9],[1231,9]]},"443":{"position":[[565,8]]},"451":{"position":[[215,8]]},"457":{"position":[[219,8]]},"463":{"position":[[325,8]]},"470":{"position":[[88,8]]},"483":{"position":[[639,8],[722,8]]},"488":{"position":[[496,8]]},"491":{"position":[[392,8]]},"504":{"position":[[1423,9],[2251,9]]},"506":{"position":[[482,8]]},"512":{"position":[[242,8]]},"517":{"position":[[470,11]]},"521":{"position":[[395,8]]},"529":{"position":[[774,8]]},"534":{"position":[[798,9]]},"537":{"position":[[231,8]]},"547":{"position":[[1796,9],[2624,9]]},"550":{"position":[[479,8]]},"556":{"position":[[1405,9]]},"568":{"position":[[289,8]]},"580":{"position":[[231,8]]},"605":{"position":[[437,8]]},"622":{"position":[[443,8]]},"628":{"position":[[507,8]]},"639":{"position":[[1421,9],[2249,9]]},"649":{"position":[[105,8]]},"659":{"position":[[653,8]]},"664":{"position":[[413,8],[648,8]]},"667":{"position":[[292,8]]},"676":{"position":[[496,8]]},"679":{"position":[[392,8]]},"682":{"position":[[263,8]]},"691":{"position":[[496,8]]},"694":{"position":[[392,8]]},"697":{"position":[[632,8]]},"703":{"position":[[197,8]]},"709":{"position":[[885,8]]},"715":{"position":[[254,8]]},"720":{"position":[[284,9]]},"738":{"position":[[809,8]]},"744":{"position":[[199,8]]},"757":{"position":[[1425,9]]},"770":{"position":[[1425,9]]},"782":{"position":[[361,9]]},"797":{"position":[[1425,9]]},"812":{"position":[[1425,9]]},"828":{"position":[[1425,9]]},"854":{"position":[[148,8]]},"862":{"position":[[98,8]]},"867":{"position":[[541,9]]},"874":{"position":[[98,8]]},"882":{"position":[[159,8]]},"888":{"position":[[214,8]]},"907":{"position":[[863,9]]},"909":{"position":[[251,11]]},"923":{"position":[[863,9]]},"925":{"position":[[251,11]]},"934":{"position":[[863,9]]},"936":{"position":[[251,11]]},"950":{"position":[[863,9]]},"952":{"position":[[251,11]]},"956":{"position":[[235,8]]},"968":{"position":[[863,9]]},"970":{"position":[[251,11]]},"977":{"position":[[70,8]]},"979":{"position":[[309,8]]},"994":{"position":[[167,8]]},"1012":{"position":[[294,8]]},"1023":{"position":[[1777,9],[2605,9]]},"1025":{"position":[[441,8]]},"1045":{"position":[[711,9]]},"1053":{"position":[[711,9]]},"1061":{"position":[[711,9]]},"1065":{"position":[[166,8]]},"1073":{"position":[[418,8]]},"1080":{"position":[[875,8]]},"1099":{"position":[[539,8]]},"1104":{"position":[[237,8]]},"1110":{"position":[[557,8]]},"1128":{"position":[[474,8]]},"1144":{"position":[[918,8]]},"1156":{"position":[[224,8]]},"1213":{"position":[[595,8]]},"1247":{"position":[[813,8]]},"1275":{"position":[[416,9]]},"1292":{"position":[[4854,9]]},"1306":{"position":[[4854,9]]},"1329":{"position":[[4854,9]]},"1453":{"position":[[1478,8]]},"1461":{"position":[[657,8],[2438,8],[2591,8],[2634,8]]},"1462":{"position":[[676,8],[701,8]]}},"keywords":{}}],["sequenc",{"_index":750,"title":{"1434":{"position":[[0,8]]}},"content":{"43":{"position":[[209,8]]},"137":{"position":[[391,9]]},"590":{"position":[[693,8]]},"922":{"position":[[294,8]]},"1379":{"position":[[3956,8]]},"1403":{"position":[[3956,8]]},"1414":{"position":[[3956,8]]}},"keywords":{}}],["sequencediagram",{"_index":6431,"title":{},"content":{"1434":{"position":[[189,15]]}},"keywords":{}}],["sequenti",{"_index":3545,"title":{},"content":{"402":{"position":[[858,11]]},"1459":{"position":[[796,10]]}},"keywords":{}}],["seri",{"_index":6420,"title":{},"content":{"1429":{"position":[[69,6]]}},"keywords":{}}],["serial",{"_index":3872,"title":{},"content":{"488":{"position":[[930,10]]},"659":{"position":[[1087,10]]},"676":{"position":[[930,10]]},"691":{"position":[[930,10]]},"1292":{"position":[[4906,6]]},"1306":{"position":[[4906,6]]},"1329":{"position":[[4906,6]]}},"keywords":{}}],["serializ",{"_index":6171,"title":{},"content":{"1292":{"position":[[4951,12]]},"1306":{"position":[[4951,12]]},"1329":{"position":[[4951,12]]}},"keywords":{}}],["serv",{"_index":313,"title":{},"content":{"11":{"position":[[660,6]]},"77":{"position":[[190,6]]},"81":{"position":[[2787,6]]},"208":{"position":[[718,5]]},"305":{"position":[[18,5]]},"313":{"position":[[3428,5]]},"320":{"position":[[1264,5],[1372,5]]},"660":{"position":[[343,6]]},"1477":{"position":[[857,6]]}},"keywords":{}}],["server",{"_index":1221,"title":{"1038":{"position":[[14,6]]},"1042":{"position":[[16,7]]},"1048":{"position":[[19,6]]},"1056":{"position":[[25,6]]},"1371":{"position":[[19,6]]},"1373":{"position":[[25,7]]},"1397":{"position":[[31,7]]},"1408":{"position":[[16,7]]}},"content":{"83":{"position":[[516,7],[663,7],[1150,6],[1303,7]]},"88":{"position":[[196,8]]},"141":{"position":[[1044,6]]},"221":{"position":[[37,7],[206,6],[451,7],[564,7],[818,6],[1492,6],[1618,6],[1713,7]]},"225":{"position":[[262,6]]},"363":{"position":[[483,6],[780,6],[1247,6],[1649,6]]},"370":{"position":[[1568,6],[1758,6],[1966,7]]},"432":{"position":[[89,7],[109,7],[697,8]]},"698":{"position":[[67,6]]},"753":{"position":[[387,6],[687,6],[1551,6]]},"754":{"position":[[21,6]]},"757":{"position":[[69,6]]},"764":{"position":[[257,6]]},"767":{"position":[[533,6]]},"770":{"position":[[69,6]]},"777":{"position":[[257,6]]},"784":{"position":[[170,6]]},"792":{"position":[[811,6]]},"793":{"position":[[346,6],[647,6],[1574,6]]},"794":{"position":[[19,6]]},"797":{"position":[[69,6]]},"804":{"position":[[255,6]]},"808":{"position":[[362,6]]},"809":{"position":[[19,6]]},"812":{"position":[[69,6]]},"819":{"position":[[255,6]]},"824":{"position":[[603,6]]},"825":{"position":[[19,6]]},"828":{"position":[[69,6]]},"835":{"position":[[255,6]]},"866":{"position":[[363,6]]},"878":{"position":[[373,6]]},"904":{"position":[[602,6]]},"918":{"position":[[811,6]]},"919":{"position":[[346,6],[2481,6]]},"922":{"position":[[125,7],[964,6],[1394,6]]},"931":{"position":[[366,6]]},"989":{"position":[[1243,6]]},"1004":{"position":[[1326,6]]},"1018":{"position":[[21,6]]},"1020":{"position":[[135,6],[227,6],[285,6],[536,6]]},"1021":{"position":[[376,7]]},"1023":{"position":[[6,7]]},"1039":{"position":[[138,6],[204,6],[377,6]]},"1040":{"position":[[35,6],[833,6]]},"1041":{"position":[[161,6]]},"1042":{"position":[[16,6],[1189,6]]},"1043":{"position":[[346,6],[1845,6]]},"1044":{"position":[[254,6]]},"1045":{"position":[[69,6]]},"1047":{"position":[[60,6],[197,6]]},"1049":{"position":[[64,6],[130,6]]},"1050":{"position":[[35,6],[833,6],[1075,6]]},"1051":{"position":[[602,6]]},"1052":{"position":[[254,6]]},"1053":{"position":[[69,6]]},"1055":{"position":[[60,6],[197,6]]},"1057":{"position":[[67,6],[133,6]]},"1058":{"position":[[35,6],[833,6]]},"1059":{"position":[[366,6]]},"1060":{"position":[[254,6]]},"1061":{"position":[[69,6]]},"1063":{"position":[[60,6],[197,6]]},"1118":{"position":[[379,8]]},"1120":{"position":[[243,6],[618,6],[1217,6],[1888,6]]},"1138":{"position":[[859,6],[1049,6],[1256,7]]},"1154":{"position":[[544,6]]},"1198":{"position":[[259,6]]},"1236":{"position":[[70,6]]},"1240":{"position":[[102,6]]},"1255":{"position":[[170,6]]},"1268":{"position":[[461,6],[518,6],[699,6]]},"1272":{"position":[[130,6]]},"1285":{"position":[[989,6],[1008,6]]},"1286":{"position":[[19,6],[1763,6],[1969,6],[2163,6],[2357,6]]},"1289":{"position":[[876,6],[1677,6]]},"1292":{"position":[[5001,6]]},"1300":{"position":[[989,6],[1008,6]]},"1301":{"position":[[19,6],[1599,6],[1805,6],[1999,6],[2193,6]]},"1303":{"position":[[366,6]]},"1306":{"position":[[5001,6]]},"1310":{"position":[[998,6]]},"1322":{"position":[[1095,6]]},"1324":{"position":[[989,6],[1008,6]]},"1325":{"position":[[19,6],[1763,6],[1969,6],[2163,6],[2357,6]]},"1329":{"position":[[5001,6]]},"1373":{"position":[[584,6]]},"1374":{"position":[[584,6]]},"1397":{"position":[[363,6]]},"1398":{"position":[[362,6]]},"1407":{"position":[[160,6]]},"1408":{"position":[[16,6],[462,6]]},"1409":{"position":[[346,6],[1118,6]]}},"keywords":{}}],["server'",{"_index":2438,"title":{},"content":{"221":{"position":[[111,8]]},"225":{"position":[[129,8]]},"1268":{"position":[[495,8],[621,8]]},"1286":{"position":[[1846,8],[1926,8],[2004,8],[2251,8],[2280,8]]},"1301":{"position":[[1682,8],[1762,8],[1840,8],[2087,8],[2116,8]]},"1325":{"position":[[1846,8],[1926,8],[2004,8],[2251,8],[2280,8]]}},"keywords":{}}],["server)googl",{"_index":5241,"title":{},"content":{"1041":{"position":[[129,13]]}},"keywords":{}}],["server.pref",{"_index":5930,"title":{},"content":{"1268":{"position":[[197,17]]}},"keywords":{}}],["server.requir",{"_index":5931,"title":{},"content":{"1268":{"position":[[268,16]]}},"keywords":{}}],["serverazur",{"_index":5234,"title":{},"content":{"1039":{"position":[[303,11]]},"1041":{"position":[[86,11]]},"1050":{"position":[[1001,11]]},"1407":{"position":[[86,11]]}},"keywords":{}}],["servergoogl",{"_index":5236,"title":{},"content":{"1039":{"position":[[346,12]]},"1050":{"position":[[1044,12]]},"1407":{"position":[[129,12]]}},"keywords":{}}],["serverpref",{"_index":5975,"title":{},"content":{"1286":{"position":[[1715,16]]},"1301":{"position":[[1551,16]]},"1325":{"position":[[1715,16]]}},"keywords":{}}],["server’",{"_index":5932,"title":{},"content":{"1268":{"position":[[338,8],[415,8]]}},"keywords":{}}],["servic",{"_index":513,"title":{"477":{"position":[[0,7]]},"478":{"position":[[0,7]]},"548":{"position":[[27,7]]},"571":{"position":[[31,7]]},"582":{"position":[[31,7]]},"598":{"position":[[0,7]]},"599":{"position":[[0,7]]},"609":{"position":[[31,7]]}},"content":{"19":{"position":[[150,7]]},"82":{"position":[[3319,7]]},"173":{"position":[[979,7]]},"204":{"position":[[548,9]]},"221":{"position":[[150,7]]},"224":{"position":[[1005,7]]},"234":{"position":[[208,7],[267,8]]},"236":{"position":[[366,7],[442,8],[585,9]]},"237":{"position":[[2966,8],[3196,8],[3242,7],[3382,7]]},"238":{"position":[[79,9],[182,9]]},"288":{"position":[[337,7],[472,7],[514,7],[548,7]]},"290":{"position":[[880,7],[1052,7]]},"329":{"position":[[240,9]]},"436":{"position":[[907,7],[1085,7],[1116,8]]},"475":{"position":[[127,7],[242,7],[288,7]]},"477":{"position":[[56,7],[332,7],[429,7],[527,7],[604,7],[644,7],[678,7],[870,7],[951,7]]},"478":{"position":[[1,7],[57,7],[128,7],[193,7],[386,7],[462,7]]},"479":{"position":[[355,7]]},"482":{"position":[[309,7]]},"543":{"position":[[100,7],[227,7],[321,7]]},"545":{"position":[[650,7],[666,7]]},"548":{"position":[[68,7],[107,7],[200,7]]},"569":{"position":[[142,7],[253,7]]},"571":{"position":[[198,7],[566,7],[731,7],[811,7]]},"573":{"position":[[49,7],[289,7],[377,7],[485,7]]},"575":{"position":[[243,7]]},"581":{"position":[[466,7]]},"582":{"position":[[62,7],[177,7],[344,7],[424,7]]},"584":{"position":[[277,7],[344,7],[416,7]]},"586":{"position":[[207,7]]},"591":{"position":[[24,7],[159,7],[201,7],[235,7]]},"593":{"position":[[104,7]]},"597":{"position":[[126,7],[205,7],[251,7]]},"598":{"position":[[55,7],[296,7],[393,7],[491,7],[568,7],[608,7],[642,7],[832,7],[913,7]]},"599":{"position":[[1,7],[57,7],[128,7],[193,7],[386,7],[462,7]]},"601":{"position":[[172,7],[206,7]]},"607":{"position":[[140,7],[252,7]]},"608":{"position":[[123,7]]},"609":{"position":[[24,7],[188,7],[288,7],[398,7]]},"611":{"position":[[334,7],[418,7],[463,7]]},"612":{"position":[[217,7]]},"614":{"position":[[125,7],[236,7]]},"617":{"position":[[150,7],[488,7],[655,7],[766,7],[885,7]]},"619":{"position":[[49,7],[332,8],[390,7]]},"620":{"position":[[139,7]]},"659":{"position":[[35,8],[148,8]]},"660":{"position":[[95,8],[257,8],[983,8],[1020,7]]},"745":{"position":[[65,7]]},"849":{"position":[[629,9],[684,9]]},"1070":{"position":[[285,7]]},"1162":{"position":[[129,9],[236,9]]},"1176":{"position":[[143,7],[458,7]]},"1177":{"position":[[19,7],[114,7],[322,7],[355,7]]},"1179":{"position":[[190,7],[239,7]]},"1211":{"position":[[148,7],[247,7]]},"1213":{"position":[[146,7],[195,7]]},"1218":{"position":[[148,7],[247,7]]},"1220":{"position":[[146,7],[195,7]]},"1228":{"position":[[114,7],[290,7],[361,7]]},"1230":{"position":[[238,7],[339,7],[380,7]]},"1231":{"position":[[165,7]]},"1236":{"position":[[80,7]]},"1243":{"position":[[1191,7]]},"1245":{"position":[[92,7],[440,7],[607,7],[711,7]]},"1247":{"position":[[409,7],[510,7],[551,7],[608,7],[756,7]]},"1248":{"position":[[165,7]]},"1258":{"position":[[63,7]]},"1260":{"position":[[78,7],[92,7]]},"1282":{"position":[[240,8]]},"1288":{"position":[[214,8]]},"1310":{"position":[[255,8]]}},"keywords":{}}],["service_account",{"_index":4097,"title":{},"content":{"548":{"position":[[1506,15]]}},"keywords":{}}],["service_account_impersonation_url",{"_index":4087,"title":{},"content":{"548":{"position":[[940,34]]}},"keywords":{}}],["service_account_info",{"_index":4310,"title":{},"content":{"612":{"position":[[225,21]]},"620":{"position":[[147,21]]}},"keywords":{}}],["service_healthi",{"_index":2538,"title":{},"content":{"236":{"position":[[1461,15]]}},"keywords":{}}],["serviceaccount",{"_index":4567,"title":{},"content":{"748":{"position":[[135,14]]}},"keywords":{}}],["serviceaccounts/<target",{"_index":4089,"title":{},"content":{"548":{"position":[[1026,27]]}},"keywords":{}}],["servicemarketo",{"_index":4552,"title":{},"content":{"739":{"position":[[138,14]]}},"keywords":{}}],["servicesus",{"_index":4822,"title":{},"content":{"849":{"position":[[2302,12]]}},"keywords":{}}],["session",{"_index":452,"title":{},"content":{"16":{"position":[[156,9]]},"17":{"position":[[971,8]]},"58":{"position":[[862,8]]},"60":{"position":[[251,7]]},"68":{"position":[[720,8]]},"169":{"position":[[1308,7]]},"339":{"position":[[33,7],[97,8]]},"340":{"position":[[158,7]]},"421":{"position":[[110,7]]},"577":{"position":[[175,8]]},"588":{"position":[[170,8]]},"864":{"position":[[274,7]]},"876":{"position":[[274,7]]},"1073":{"position":[[135,8]]},"1140":{"position":[[3539,7]]},"1292":{"position":[[5047,7]]},"1306":{"position":[[5047,7]]},"1316":{"position":[[3539,7]]},"1329":{"position":[[5047,7]]},"1340":{"position":[[3539,7]]},"1351":{"position":[[3539,7]]},"1379":{"position":[[4015,7]]},"1403":{"position":[[4015,7]]},"1414":{"position":[[4015,7]]},"1431":{"position":[[3562,7]]}},"keywords":{}}],["session.schema.yaml",{"_index":453,"title":{},"content":{"16":{"position":[[174,19]]}},"keywords":{}}],["session_us",{"_index":5675,"title":{},"content":{"1140":{"position":[[3575,12]]},"1316":{"position":[[3575,12]]},"1340":{"position":[[3575,12]]},"1351":{"position":[[3575,12]]},"1379":{"position":[[4060,12]]},"1403":{"position":[[4060,12]]},"1414":{"position":[[4060,12]]},"1431":{"position":[[3598,12]]}},"keywords":{}}],["sessions"",{"_index":473,"title":{},"content":{"16":{"position":[[830,14]]}},"keywords":{}}],["sessionscheckout",{"_index":5278,"title":{},"content":{"1073":{"position":[[118,16]]}},"keywords":{}}],["set",{"_index":226,"title":{"200":{"position":[[0,7]]},"205":{"position":[[0,7]]},"235":{"position":[[8,3]]},"239":{"position":[[8,3]]},"240":{"position":[[8,3]]},"250":{"position":[[3,3]]},"253":{"position":[[0,7]]},"295":{"position":[[0,7]]},"313":{"position":[[0,7]]},"338":{"position":[[22,9]]},"349":{"position":[[0,3]]},"479":{"position":[[0,3]]},"754":{"position":[[0,7]]},"794":{"position":[[0,7]]},"809":{"position":[[0,7]]},"825":{"position":[[0,7]]},"1091":{"position":[[0,3]]},"1092":{"position":[[0,3]]},"1286":{"position":[[0,7]]},"1301":{"position":[[0,7]]},"1325":{"position":[[0,7]]},"1477":{"position":[[0,3]]}},"content":{"7":{"position":[[9,3]]},"20":{"position":[[1056,3]]},"33":{"position":[[20,3]]},"55":{"position":[[430,3],[784,3]]},"56":{"position":[[81,3],[422,3],[1975,3]]},"69":{"position":[[84,3]]},"72":{"position":[[46,3]]},"83":{"position":[[634,3]]},"94":{"position":[[2852,4]]},"120":{"position":[[89,3]]},"123":{"position":[[609,7]]},"126":{"position":[[242,3]]},"154":{"position":[[2159,9]]},"165":{"position":[[869,3]]},"177":{"position":[[278,8]]},"179":{"position":[[474,3]]},"180":{"position":[[272,3]]},"183":{"position":[[174,3],[278,3],[4552,4]]},"191":{"position":[[550,3],[584,3],[619,3],[654,3],[689,3],[722,3]]},"192":{"position":[[1066,3]]},"202":{"position":[[393,3]]},"203":{"position":[[56,3],[115,3],[147,3],[213,4],[439,5]]},"204":{"position":[[757,3]]},"206":{"position":[[371,7]]},"207":{"position":[[759,3]]},"208":{"position":[[95,8]]},"209":{"position":[[222,7],[1344,3],[1626,3]]},"210":{"position":[[2100,3]]},"211":{"position":[[23,3],[466,8]]},"221":{"position":[[1762,8]]},"222":{"position":[[882,7]]},"223":{"position":[[80,3]]},"230":{"position":[[1026,3]]},"232":{"position":[[25,3],[296,3]]},"236":{"position":[[3553,3]]},"237":{"position":[[963,3],[1825,3],[1978,3],[2286,7],[2500,7]]},"238":{"position":[[691,7]]},"239":{"position":[[1878,8],[2879,7]]},"240":{"position":[[45,3],[511,3],[545,3],[580,3],[615,3],[650,3],[683,3],[2246,7],[3356,3],[4858,7]]},"241":{"position":[[41,3]]},"253":{"position":[[75,3]]},"254":{"position":[[1,3],[3289,3]]},"267":{"position":[[436,3]]},"280":{"position":[[2150,3]]},"295":{"position":[[1504,3]]},"296":{"position":[[1,3],[2375,7]]},"301":{"position":[[1250,9]]},"308":{"position":[[673,3],[1047,3]]},"313":{"position":[[75,3]]},"314":{"position":[[1,3],[2864,3]]},"321":{"position":[[215,3]]},"329":{"position":[[1168,3]]},"343":{"position":[[249,4],[674,4]]},"347":{"position":[[4,3],[203,8]]},"348":{"position":[[27,3],[106,9]]},"351":{"position":[[91,8],[156,8]]},"364":{"position":[[243,3]]},"366":{"position":[[542,3]]},"367":{"position":[[51,3],[301,3]]},"370":{"position":[[2205,3]]},"374":{"position":[[336,3]]},"375":{"position":[[238,3]]},"377":{"position":[[548,3],[1364,3],[1786,4]]},"387":{"position":[[302,3]]},"406":{"position":[[23,3]]},"410":{"position":[[62,3]]},"413":{"position":[[433,3]]},"414":{"position":[[921,7]]},"419":{"position":[[1969,3]]},"428":{"position":[[147,3]]},"429":{"position":[[837,3]]},"432":{"position":[[318,9],[1326,3]]},"441":{"position":[[578,3]]},"446":{"position":[[133,3]]},"448":{"position":[[328,3],[1119,3]]},"452":{"position":[[4,3]]},"458":{"position":[[4,3]]},"464":{"position":[[91,3],[185,8],[264,8],[279,8]]},"472":{"position":[[404,3]]},"476":{"position":[[27,3]]},"478":{"position":[[645,7]]},"479":{"position":[[724,8]]},"483":{"position":[[744,7]]},"488":{"position":[[722,3]]},"492":{"position":[[99,3],[175,4],[233,4]]},"496":{"position":[[635,3],[720,3]]},"504":{"position":[[1598,3]]},"509":{"position":[[468,4]]},"515":{"position":[[535,3]]},"517":{"position":[[1616,7],[2310,3],[2777,7],[3329,3],[3628,3]]},"522":{"position":[[426,8]]},"530":{"position":[[426,8]]},"531":{"position":[[188,8],[219,9]]},"534":{"position":[[589,3]]},"538":{"position":[[4,3]]},"547":{"position":[[1971,3]]},"548":{"position":[[231,3]]},"552":{"position":[[23,7],[289,7]]},"556":{"position":[[1964,3]]},"563":{"position":[[9,3],[158,7]]},"573":{"position":[[370,3],[1437,3]]},"577":{"position":[[452,3]]},"582":{"position":[[154,3]]},"584":{"position":[[337,3],[1109,7],[1500,3]]},"588":{"position":[[447,3]]},"599":{"position":[[645,7]]},"602":{"position":[[316,3]]},"609":{"position":[[360,3]]},"611":{"position":[[327,3]]},"616":{"position":[[263,3]]},"619":{"position":[[325,3],[746,3]]},"623":{"position":[[4,3]]},"629":{"position":[[4,3]]},"639":{"position":[[1596,3]]},"646":{"position":[[651,3]]},"649":{"position":[[564,4]]},"654":{"position":[[372,3]]},"659":{"position":[[879,3]]},"660":{"position":[[652,3]]},"661":{"position":[[324,3],[475,3]]},"665":{"position":[[99,3],[175,4],[233,4]]},"676":{"position":[[722,3]]},"680":{"position":[[99,3],[175,4],[233,4]]},"691":{"position":[[722,3]]},"695":{"position":[[99,3],[175,4],[233,4]]},"698":{"position":[[4,3]]},"704":{"position":[[4,3]]},"720":{"position":[[503,3]]},"735":{"position":[[269,3],[552,3]]},"745":{"position":[[4,3]]},"747":{"position":[[543,8],[796,4]]},"750":{"position":[[111,3],[151,3],[231,3],[1127,3],[1353,3]]},"752":{"position":[[931,3],[943,3],[1064,3]]},"753":{"position":[[652,3]]},"754":{"position":[[47,3],[125,3],[162,3],[288,3],[423,3],[620,3],[809,3],[1045,3],[1279,3]]},"757":{"position":[[724,4],[2156,3],[2288,4]]},"764":{"position":[[150,3],[846,7]]},"766":{"position":[[111,3],[151,3],[231,3],[1127,3]]},"767":{"position":[[90,7],[928,3],[1226,3],[1465,3],[1804,3],[2226,3]]},"770":{"position":[[724,4],[2156,3],[2288,4]]},"777":{"position":[[150,3],[846,7]]},"780":{"position":[[439,4]]},"785":{"position":[[532,3],[786,3]]},"786":{"position":[[178,9],[479,8]]},"789":{"position":[[109,3],[169,3],[265,3],[1528,3],[1754,3]]},"791":{"position":[[931,7],[965,3],[977,3],[1098,3]]},"792":{"position":[[28,8],[1222,3],[1522,3],[1744,3],[2218,3]]},"793":{"position":[[612,3]]},"794":{"position":[[45,3],[161,3],[296,3],[826,3],[1015,3],[1249,3],[1483,3]]},"797":{"position":[[724,4],[2163,3],[2295,4]]},"804":{"position":[[148,3],[844,7]]},"807":{"position":[[109,3],[169,3],[265,3],[1115,3]]},"808":{"position":[[628,3]]},"809":{"position":[[45,3],[161,3],[296,3],[826,3],[1015,3],[1249,3],[1483,3]]},"812":{"position":[[724,4],[2163,3],[2295,4]]},"819":{"position":[[148,3],[844,7]]},"821":{"position":[[863,3]]},"823":{"position":[[109,3],[169,3],[265,3],[1115,3]]},"824":{"position":[[203,7],[997,3],[1292,3],[1529,3],[1866,3],[2340,3]]},"825":{"position":[[45,3],[161,3],[296,3],[662,3],[851,3],[1085,3],[1319,3]]},"828":{"position":[[724,4],[2163,3],[2295,4]]},"835":{"position":[[148,3],[844,7]]},"840":{"position":[[106,3],[856,3],[1580,3]]},"847":{"position":[[368,3]]},"849":{"position":[[1,3],[1469,3],[1891,8],[2612,3]]},"859":{"position":[[362,3],[659,3]]},"863":{"position":[[27,3]]},"875":{"position":[[27,3]]},"894":{"position":[[4,3]]},"895":{"position":[[27,3]]},"897":{"position":[[132,3]]},"903":{"position":[[568,3]]},"904":{"position":[[203,7],[995,3],[1103,3],[1405,3],[1915,3]]},"907":{"position":[[1348,7],[1610,3],[1731,3],[1810,7]]},"912":{"position":[[1509,3]]},"915":{"position":[[568,3],[1210,3]]},"917":{"position":[[863,3],[1424,3],[1815,3],[1855,3]]},"918":{"position":[[28,8],[1198,3],[1394,3],[1697,3],[2207,3]]},"919":{"position":[[668,3],[1388,3],[1645,3],[2262,3]]},"922":{"position":[[1941,7],[2088,7],[2137,3],[2259,7],[2743,7],[3128,3]]},"923":{"position":[[1348,7],[1610,3],[1731,3],[1810,7]]},"930":{"position":[[568,3]]},"931":{"position":[[792,3],[1062,3],[1577,3]]},"934":{"position":[[1348,7],[1610,3]]},"942":{"position":[[182,7]]},"945":{"position":[[232,3]]},"950":{"position":[[1348,7],[1610,3]]},"963":{"position":[[722,3],[1364,3]]},"964":{"position":[[380,8],[733,8]]},"965":{"position":[[863,3],[1424,3],[1815,3],[1855,3]]},"968":{"position":[[1348,7],[1610,3],[1731,3],[1810,7]]},"988":{"position":[[181,3]]},"989":{"position":[[1064,3]]},"995":{"position":[[4,3]]},"1003":{"position":[[181,3]]},"1004":{"position":[[1147,3]]},"1009":{"position":[[321,3]]},"1020":{"position":[[735,4],[1175,4],[1382,3],[1961,7]]},"1023":{"position":[[1952,3]]},"1032":{"position":[[4,3],[208,3],[271,3],[336,3],[410,3],[477,3],[546,3]]},"1036":{"position":[[300,3]]},"1042":{"position":[[1175,3]]},"1047":{"position":[[123,3]]},"1051":{"position":[[203,7]]},"1055":{"position":[[123,3]]},"1063":{"position":[[123,3]]},"1067":{"position":[[251,3]]},"1076":{"position":[[411,4],[500,3]]},"1077":{"position":[[268,3],[306,4]]},"1085":{"position":[[412,3],[894,7],[1297,4]]},"1089":{"position":[[4,3],[112,8]]},"1090":{"position":[[27,3]]},"1104":{"position":[[160,8]]},"1118":{"position":[[358,9],[612,9]]},"1133":{"position":[[130,3]]},"1138":{"position":[[383,3],[1670,3]]},"1140":{"position":[[3622,3]]},"1142":{"position":[[105,7]]},"1146":{"position":[[150,3]]},"1149":{"position":[[560,7]]},"1160":{"position":[[105,7],[216,7]]},"1168":{"position":[[105,7]]},"1173":{"position":[[150,3]]},"1176":{"position":[[446,3]]},"1179":{"position":[[1203,3]]},"1186":{"position":[[333,3]]},"1188":{"position":[[558,3]]},"1203":{"position":[[311,9],[321,3]]},"1204":{"position":[[107,3]]},"1209":{"position":[[484,3]]},"1211":{"position":[[105,7]]},"1215":{"position":[[150,3]]},"1218":{"position":[[105,7]]},"1223":{"position":[[150,3]]},"1230":{"position":[[231,3],[727,3]]},"1234":{"position":[[84,4]]},"1237":{"position":[[109,7]]},"1243":{"position":[[631,3]]},"1247":{"position":[[402,3]]},"1258":{"position":[[154,7]]},"1274":{"position":[[311,3]]},"1281":{"position":[[349,7],[368,3]]},"1283":{"position":[[353,7]]},"1285":{"position":[[736,4],[921,7]]},"1286":{"position":[[45,3],[190,3],[353,3],[883,3],[1072,3],[1310,3],[1569,3]]},"1289":{"position":[[439,9]]},"1292":{"position":[[5091,3]]},"1295":{"position":[[349,7],[368,3]]},"1298":{"position":[[80,3]]},"1300":{"position":[[736,4],[921,7]]},"1301":{"position":[[45,3],[190,3],[353,3],[719,3],[908,3],[1146,3],[1405,3]]},"1306":{"position":[[5091,3]]},"1311":{"position":[[190,7]]},"1313":{"position":[[775,7],[1214,3],[1481,3],[1560,7]]},"1316":{"position":[[3622,3]]},"1319":{"position":[[349,7],[368,3]]},"1321":{"position":[[219,9]]},"1322":{"position":[[882,7]]},"1324":{"position":[[736,4],[921,7]]},"1325":{"position":[[45,3],[190,3],[353,3],[883,3],[1072,3],[1310,3],[1569,3]]},"1329":{"position":[[5091,3]]},"1334":{"position":[[219,9]]},"1335":{"position":[[882,7]]},"1337":{"position":[[775,7],[1214,3],[1481,3],[1560,7]]},"1340":{"position":[[3622,3]]},"1346":{"position":[[80,3]]},"1348":{"position":[[775,7],[1214,3]]},"1351":{"position":[[3622,3]]},"1356":{"position":[[474,8],[498,8],[975,8]]},"1359":{"position":[[489,9]]},"1362":{"position":[[113,3]]},"1370":{"position":[[1059,3]]},"1373":{"position":[[203,7]]},"1374":{"position":[[203,7]]},"1379":{"position":[[4113,3],[4157,4]]},"1383":{"position":[[371,3],[498,3],[532,3],[567,3],[602,3],[637,3],[670,3]]},"1384":{"position":[[158,3],[658,3]]},"1388":{"position":[[688,3]]},"1393":{"position":[[184,3]]},"1394":{"position":[[671,3]]},"1403":{"position":[[4113,3],[4157,4]]},"1408":{"position":[[448,3]]},"1414":{"position":[[4113,3],[4157,4]]},"1427":{"position":[[974,3]]},"1431":{"position":[[3645,3]]},"1448":{"position":[[697,3]]},"1452":{"position":[[2337,3],[2431,3],[2826,3],[2888,3],[3063,3],[3729,3],[3865,3]]},"1453":{"position":[[425,3],[949,7]]},"1455":{"position":[[444,3]]},"1477":{"position":[[0,3],[4,3],[59,4],[354,4],[507,4],[618,3],[662,4],[720,3],[766,3],[802,4],[871,3],[1021,4],[1096,3],[1599,3],[2595,4],[2823,3],[3243,4],[3316,3],[3948,4]]},"1479":{"position":[[473,3]]}},"keywords":{}}],["setdatabase_nam",{"_index":6362,"title":{},"content":{"1383":{"position":[[229,17]]}},"keywords":{}}],["setti",{"_index":6581,"title":{},"content":{"1455":{"position":[[157,9]]}},"keywords":{}}],["settings.edit",{"_index":4706,"title":{},"content":{"792":{"position":[[438,13]]},"918":{"position":[[438,13]]}},"keywords":{}}],["settings.select",{"_index":5078,"title":{},"content":{"942":{"position":[[499,15]]}},"keywords":{}}],["settings.start_d",{"_index":3258,"title":{},"content":{"349":{"position":[[372,20]]}},"keywords":{}}],["settingsissu",{"_index":4471,"title":{},"content":{"709":{"position":[[232,13]]}},"keywords":{}}],["settingslabelspermissionspermiss",{"_index":4479,"title":{},"content":{"709":{"position":[[428,35]]}},"keywords":{}}],["setup",{"_index":864,"title":{"58":{"position":[[17,6]]},"167":{"position":[[17,5]]},"221":{"position":[[8,6]]},"222":{"position":[[0,5]]},"223":{"position":[[0,5]]},"224":{"position":[[0,5]]},"236":{"position":[[11,6]]},"348":{"position":[[0,6]]},"367":{"position":[[0,6]]},"406":{"position":[[0,6]]},"414":{"position":[[0,6]]},"415":{"position":[[0,6]]},"436":{"position":[[0,5]]},"476":{"position":[[0,6]]},"526":{"position":[[0,6]]},"751":{"position":[[0,6]]},"767":{"position":[[0,6]]},"790":{"position":[[0,6]]},"808":{"position":[[0,6]]},"824":{"position":[[0,6]]},"840":{"position":[[0,6]]},"849":{"position":[[8,6]]},"856":{"position":[[0,5]]},"857":{"position":[[0,5]]},"863":{"position":[[0,6]]},"875":{"position":[[0,6]]},"895":{"position":[[0,6]]},"904":{"position":[[0,6]]},"916":{"position":[[0,6]]},"931":{"position":[[0,6]]},"941":{"position":[[0,6]]},"965":{"position":[[0,6]]},"989":{"position":[[0,6]]},"1004":{"position":[[0,6]]},"1032":{"position":[[0,6]]},"1041":{"position":[[0,6]]},"1051":{"position":[[0,6]]},"1059":{"position":[[0,6]]},"1067":{"position":[[0,6]]},"1090":{"position":[[0,6]]},"1154":{"position":[[0,6]]},"1177":{"position":[[0,6]]},"1186":{"position":[[0,6]]},"1198":{"position":[[0,6]]},"1204":{"position":[[0,6]]},"1282":{"position":[[0,6]]},"1289":{"position":[[0,6]]},"1296":{"position":[[0,6]]},"1303":{"position":[[0,6]]},"1310":{"position":[[0,6]]},"1320":{"position":[[0,6]]},"1333":{"position":[[0,6]]},"1344":{"position":[[0,6]]},"1373":{"position":[[0,5]]},"1383":{"position":[[0,6]]},"1397":{"position":[[0,5]]},"1407":{"position":[[0,6]]},"1418":{"position":[[0,6]]}},"content":{"170":{"position":[[168,5]]},"173":{"position":[[304,6]]},"175":{"position":[[143,5]]},"191":{"position":[[78,5]]},"204":{"position":[[624,5]]},"206":{"position":[[292,5]]},"222":{"position":[[722,6]]},"223":{"position":[[959,6]]},"237":{"position":[[2625,6],[2706,6]]},"240":{"position":[[2351,5]]},"288":{"position":[[844,5]]},"291":{"position":[[750,5]]},"299":{"position":[[759,5]]},"302":{"position":[[750,5]]},"366":{"position":[[32,5],[617,7],[949,7]]},"446":{"position":[[248,6]]},"475":{"position":[[313,5]]},"515":{"position":[[381,6]]},"571":{"position":[[612,6]]},"573":{"position":[[560,6]]},"582":{"position":[[225,6]]},"584":{"position":[[491,6]]},"597":{"position":[[276,5]]},"611":{"position":[[634,6]]},"617":{"position":[[536,6]]},"619":{"position":[[465,6]]},"645":{"position":[[105,6]]},"652":{"position":[[105,6]]},"718":{"position":[[138,6]]},"724":{"position":[[165,5]]},"750":{"position":[[55,5],[1409,6]]},"753":{"position":[[100,5]]},"764":{"position":[[1040,5]]},"766":{"position":[[55,5]]},"777":{"position":[[1040,5]]},"788":{"position":[[92,5]]},"789":{"position":[[53,5],[1810,6]]},"804":{"position":[[1038,5]]},"807":{"position":[[53,5]]},"819":{"position":[[1038,5]]},"823":{"position":[[53,5]]},"835":{"position":[[1038,5]]},"838":{"position":[[67,6],[118,6]]},"840":{"position":[[237,5],[509,5],[895,5],[1360,5],[1617,5],[1958,5]]},"849":{"position":[[180,5],[406,5],[766,5],[980,5],[1508,5],[2192,5],[2658,5],[3077,5]]},"857":{"position":[[121,6]]},"903":{"position":[[35,5],[643,7],[975,7]]},"914":{"position":[[121,5]]},"915":{"position":[[35,5],[643,7],[975,7],[1266,6]]},"917":{"position":[[154,6]]},"930":{"position":[[35,5],[643,7],[975,7]]},"963":{"position":[[44,5],[797,7],[1129,7],[1420,6]]},"965":{"position":[[154,6]]},"988":{"position":[[302,5]]},"1003":{"position":[[302,5]]},"1039":{"position":[[225,5]]},"1149":{"position":[[369,5]]},"1176":{"position":[[418,5]]},"1204":{"position":[[213,6]]},"1245":{"position":[[488,6]]},"1298":{"position":[[959,6]]},"1322":{"position":[[722,6]]},"1335":{"position":[[722,6]]},"1346":{"position":[[959,6]]}},"keywords":{}}],["setup.a",{"_index":4732,"title":{},"content":{"839":{"position":[[184,7]]},"848":{"position":[[221,7]]}},"keywords":{}}],["setus",{"_index":6345,"title":{},"content":{"1379":{"position":[[4211,7]]},"1403":{"position":[[4211,7]]},"1414":{"position":[[4211,7]]}},"keywords":{}}],["sever",{"_index":814,"title":{},"content":{"55":{"position":[[231,7]]},"60":{"position":[[18,7]]},"141":{"position":[[161,7]]},"237":{"position":[[42,7]]},"284":{"position":[[364,7]]},"285":{"position":[[89,7]]},"320":{"position":[[276,7]]},"322":{"position":[[91,7]]},"379":{"position":[[740,7]]},"419":{"position":[[1410,7]]},"441":{"position":[[19,7]]},"504":{"position":[[1039,7]]},"534":{"position":[[917,7]]},"547":{"position":[[1412,7]]},"639":{"position":[[1037,7]]},"985":{"position":[[480,7]]},"1000":{"position":[[658,7]]},"1023":{"position":[[1393,7]]}},"keywords":{}}],["sftp",{"_index":3313,"title":{"1017":{"position":[[0,4]]},"1023":{"position":[[18,4]]}},"content":{"363":{"position":[[2074,4]]},"1018":{"position":[[16,4]]},"1021":{"position":[[250,4],[371,4]]},"1023":{"position":[[1,4],[1079,4]]}},"keywords":{}}],["sftp:dev",{"_index":3314,"title":{},"content":{"363":{"position":[[2125,8]]}},"keywords":{}}],["sftp:dev"",{"_index":5206,"title":{},"content":{"1022":{"position":[[85,14]]}},"keywords":{}}],["sg31386.snowflakecomputing.com",{"_index":5215,"title":{},"content":{"1031":{"position":[[728,30]]}},"keywords":{}}],["sha",{"_index":140,"title":{},"content":{"3":{"position":[[903,3]]},"429":{"position":[[471,3],[491,3]]},"433":{"position":[[262,3]]}},"keywords":{}}],["sha256",{"_index":6384,"title":{},"content":{"1384":{"position":[[935,11],[1051,6]]}},"keywords":{}}],["shape",{"_index":318,"title":{},"content":{"11":{"position":[[765,6],[1630,5]]},"68":{"position":[[137,5]]},"182":{"position":[[725,5]]},"183":{"position":[[2840,5]]},"218":{"position":[[1502,6]]},"419":{"position":[[290,5]]},"440":{"position":[[306,5]]},"504":{"position":[[227,5]]},"547":{"position":[[291,5]]},"639":{"position":[[226,5]]},"1023":{"position":[[271,5]]}},"keywords":{}}],["shard",{"_index":217,"title":{"18":{"position":[[5,6]]},"19":{"position":[[0,5]]},"49":{"position":[[5,7]]},"342":{"position":[[17,6]]},"1474":{"position":[[0,5]]}},"content":{"6":{"position":[[344,7]]},"7":{"position":[[639,6],[741,7]]},"19":{"position":[[63,6],[93,6],[122,7],[219,5],[313,5],[386,7],[510,6]]},"20":{"position":[[1,6],[1117,6]]},"21":{"position":[[10,6],[429,5]]},"48":{"position":[[144,6],[227,5]]},"49":{"position":[[6,6],[87,7],[191,6],[248,5],[423,6],[565,6]]},"94":{"position":[[2809,7]]},"107":{"position":[[257,7],[333,5],[411,5],[727,5],[954,7],[1562,5],[2297,5],[2451,6],[2753,6],[3410,5]]},"109":{"position":[[696,5]]},"112":{"position":[[750,5],[887,5],[1034,6]]},"138":{"position":[[1164,5],[1631,5]]},"141":{"position":[[1253,5],[1636,5]]},"142":{"position":[[1133,5],[1648,5]]},"145":{"position":[[128,8]]},"146":{"position":[[904,5]]},"148":{"position":[[137,8]]},"149":{"position":[[877,5]]},"151":{"position":[[135,8]]},"152":{"position":[[880,5]]},"183":{"position":[[2602,6]]},"285":{"position":[[290,6],[376,7]]},"296":{"position":[[3215,5]]},"320":{"position":[[2136,7],[2188,6],[2298,7]]},"321":{"position":[[1772,6],[1826,6],[1913,6],[2187,5]]},"343":{"position":[[82,7],[577,5]]},"344":{"position":[[356,7]]},"1147":{"position":[[121,5]]},"1174":{"position":[[121,5]]},"1196":{"position":[[1119,6],[1140,6]]},"1216":{"position":[[121,5]]},"1224":{"position":[[121,5]]},"1453":{"position":[[685,5]]},"1470":{"position":[[575,5]]},"1474":{"position":[[45,5],[95,5],[237,7],[332,7],[404,5],[701,5],[834,5]]}},"keywords":{}}],["shard'",{"_index":558,"title":{},"content":{"21":{"position":[[64,7]]},"146":{"position":[[1128,7]]},"149":{"position":[[1122,7]]},"152":{"position":[[1112,7]]},"1474":{"position":[[742,7],[875,7]]}},"keywords":{}}],["shard(",{"_index":1838,"title":{},"content":{"146":{"position":[[963,8],[1061,9]]},"149":{"position":[[954,8],[1055,9]]},"152":{"position":[[939,8],[1045,9]]}},"keywords":{}}],["shard/keybegin",{"_index":6688,"title":{},"content":{"1474":{"position":[[648,15]]}},"keywords":{}}],["shard/kind",{"_index":6683,"title":{},"content":{"1474":{"position":[[433,11]]}},"keywords":{}}],["shard/nam",{"_index":6687,"title":{},"content":{"1474":{"position":[[565,11]]}},"keywords":{}}],["shard/rclockbegin",{"_index":6689,"title":{},"content":{"1474":{"position":[[781,18]]}},"keywords":{}}],["shards"",{"_index":5852,"title":{},"content":{"1201":{"position":[[658,12]]}},"keywords":{}}],["share",{"_index":1923,"title":{},"content":{"163":{"position":[[85,5]]},"189":{"position":[[64,5],[100,6]]},"274":{"position":[[1744,7]]},"296":{"position":[[2009,6]]},"337":{"position":[[452,6],[486,7],[558,7]]},"341":{"position":[[385,6],[527,7]]},"617":{"position":[[727,5],[798,5],[859,5]]},"723":{"position":[[207,5]]},"1008":{"position":[[318,5]]},"1156":{"position":[[788,7]]},"1245":{"position":[[672,5]]},"1247":{"position":[[740,6]]},"1292":{"position":[[5136,5]]},"1306":{"position":[[5136,5]]},"1329":{"position":[[5136,5]]},"1459":{"position":[[25,5]]},"1467":{"position":[[83,6]]}},"keywords":{}}],["sharinggroupsissu",{"_index":4466,"title":{},"content":{"709":{"position":[[122,18]]}},"keywords":{}}],["sheet",{"_index":2933,"title":{"613":{"position":[[7,6]]},"1242":{"position":[[7,6]]}},"content":{"295":{"position":[[68,7],[1095,5],[1235,6]]},"296":{"position":[[7262,6],[7322,5],[7634,5],[7822,6]]},"364":{"position":[[1729,6]]},"614":{"position":[[75,6]]},"616":{"position":[[315,5],[336,5],[386,5],[463,6],[551,5]]},"617":{"position":[[80,6],[299,6],[808,5]]},"618":{"position":[[257,6]]},"619":{"position":[[214,6],[635,5],[646,5],[667,6]]},"1243":{"position":[[377,6]]},"1245":{"position":[[22,6],[251,6]]},"1246":{"position":[[120,6]]},"1247":{"position":[[879,6],[963,6],[1075,5],[1110,5]]},"1248":{"position":[[496,6]]}},"keywords":{}}],["sheet1",{"_index":3010,"title":{},"content":{"296":{"position":[[4754,7],[4953,7]]},"620":{"position":[[271,6]]}},"keywords":{}}],["sheets:dev",{"_index":3344,"title":{},"content":{"364":{"position":[[1789,10]]},"620":{"position":[[96,10]]},"1248":{"position":[[337,10]]}},"keywords":{}}],["sheet’",{"_index":2969,"title":{},"content":{"295":{"position":[[1162,7]]}},"keywords":{}}],["shell",{"_index":2225,"title":{},"content":{"204":{"position":[[720,7]]},"221":{"position":[[348,5]]},"808":{"position":[[709,5]]},"1384":{"position":[[238,6]]}},"keywords":{}}],["shell"",{"_index":2515,"title":{},"content":{"236":{"position":[[917,12]]}},"keywords":{}}],["shh",{"_index":1216,"title":{},"content":{"83":{"position":[[410,3]]}},"keywords":{}}],["shift",{"_index":521,"title":{},"content":{"19":{"position":[[351,5]]},"1151":{"position":[[121,5]]}},"keywords":{}}],["ship",{"_index":5368,"title":{},"content":{"1096":{"position":[[270,8]]}},"keywords":{}}],["shop",{"_index":5354,"title":{},"content":{"1092":{"position":[[409,4],[446,4]]},"1094":{"position":[[123,4],[216,4],[248,4]]}},"keywords":{}}],["shop_nam",{"_index":5359,"title":{},"content":{"1094":{"position":[[237,10]]}},"keywords":{}}],["shopifi",{"_index":4403,"title":{},"content":{"659":{"position":[[60,8]]},"660":{"position":[[129,8],[1079,7],[1089,7]]}},"keywords":{}}],["short",{"_index":1094,"title":{},"content":{"76":{"position":[[678,5]]},"82":{"position":[[469,5]]},"162":{"position":[[274,5]]},"757":{"position":[[1763,5]]},"770":{"position":[[1763,5]]},"797":{"position":[[1763,5]]},"812":{"position":[[1763,5]]},"828":{"position":[[1763,5]]}},"keywords":{}}],["short"",{"_index":4655,"title":{},"content":{"764":{"position":[[67,11],[800,11]]},"777":{"position":[[67,11],[800,11]]},"804":{"position":[[67,11],[798,11]]},"819":{"position":[[67,11],[798,11]]},"835":{"position":[[67,11],[798,11]]}},"keywords":{}}],["shortag",{"_index":4894,"title":{},"content":{"870":{"position":[[489,9]]}},"keywords":{}}],["shorter",{"_index":534,"title":{},"content":{"20":{"position":[[448,7]]},"479":{"position":[[690,7]]},"1467":{"position":[[348,7]]}},"keywords":{}}],["shouldn't",{"_index":1918,"title":{},"content":{"162":{"position":[[1223,9],[1596,9]]},"757":{"position":[[1016,9]]},"770":{"position":[[1016,9]]},"797":{"position":[[1016,9]]},"812":{"position":[[1016,9]]},"828":{"position":[[1016,9]]}},"keywords":{}}],["shouldn’t",{"_index":2218,"title":{},"content":{"203":{"position":[[293,9]]}},"keywords":{}}],["show",{"_index":1022,"title":{},"content":{"68":{"position":[[475,4]]},"138":{"position":[[19,5],[1127,5],[1846,5],[1949,5],[2314,5]]},"140":{"position":[[210,4]]},"141":{"position":[[22,5],[962,4],[1089,4],[1881,5]]},"142":{"position":[[27,5],[1096,5],[1887,5],[2002,5],[2375,5]]},"146":{"position":[[349,5],[774,5],[930,5]]},"149":{"position":[[84,5],[358,5],[747,5],[921,5],[1165,5]]},"152":{"position":[[94,5],[365,5],[750,5],[906,5]]},"154":{"position":[[256,5]]},"173":{"position":[[1113,4]]},"203":{"position":[[575,4]]},"217":{"position":[[1244,7]]},"218":{"position":[[679,5]]},"252":{"position":[[20,4]]},"291":{"position":[[918,5]]},"294":{"position":[[20,4]]},"296":{"position":[[7177,4]]},"302":{"position":[[918,5]]},"308":{"position":[[899,4]]},"312":{"position":[[20,4]]},"849":{"position":[[1347,4]]},"942":{"position":[[674,4]]},"1140":{"position":[[3653,4]]},"1209":{"position":[[502,4]]},"1292":{"position":[[5176,4]]},"1306":{"position":[[5176,4]]},"1316":{"position":[[3653,4]]},"1329":{"position":[[5176,4]]},"1340":{"position":[[3653,4]]},"1351":{"position":[[3653,4]]},"1431":{"position":[[3676,4]]},"1448":{"position":[[1048,5]]}},"keywords":{}}],["shown",{"_index":982,"title":{},"content":{"66":{"position":[[834,5]]},"83":{"position":[[848,5]]},"138":{"position":[[1734,6]]},"141":{"position":[[1742,6]]},"142":{"position":[[1759,6]]},"192":{"position":[[149,5]]},"228":{"position":[[1156,5]]},"229":{"position":[[840,5]]},"238":{"position":[[846,5]]},"281":{"position":[[206,5]]},"307":{"position":[[601,5]]},"308":{"position":[[998,5]]},"840":{"position":[[817,5],[2340,5]]},"849":{"position":[[1292,5],[3480,5]]},"947":{"position":[[665,5]]},"964":{"position":[[556,5]]},"1200":{"position":[[763,5]]},"1388":{"position":[[602,5]]},"1470":{"position":[[635,5]]}},"keywords":{}}],["shuffl",{"_index":1359,"title":{"107":{"position":[[0,9]]}},"content":{"94":{"position":[[2792,8],[2892,8]]},"96":{"position":[[187,8]]},"105":{"position":[[170,8],[184,7],[252,7]]},"107":{"position":[[39,8],[127,8],[380,8],[1186,9],[1219,8],[1234,7],[1419,9],[1483,8],[1734,7],[1952,7],[1992,8],[2080,7],[2202,8],[2369,8],[2663,8],[2831,8],[2866,8],[2999,7],[3045,7],[3161,8],[3250,7],[3317,8],[3526,7],[3622,8],[3711,7],[3773,8],[3828,8],[3905,7],[4035,8]]},"109":{"position":[[599,7],[629,7]]},"183":{"position":[[1411,8],[2489,7],[2725,9],[2735,8],[3931,8]]},"254":{"position":[[657,8],[2714,8],[3204,7]]},"268":{"position":[[1030,8]]},"269":{"position":[[640,8]]},"277":{"position":[[716,8]]},"278":{"position":[[1158,8]]},"279":{"position":[[1506,8],[1619,8]]},"280":{"position":[[1655,7],[1708,8],[2012,8]]},"281":{"position":[[1100,8]]},"296":{"position":[[817,8],[918,8],[2818,8],[2919,8],[3184,8],[3379,7],[3491,7]]},"314":{"position":[[534,8],[2389,8],[2779,7]]},"319":{"position":[[698,8]]}},"keywords":{}}],["shuffle/key/on",{"_index":1360,"title":{},"content":{"94":{"position":[[2984,18]]}},"keywords":{}}],["shuffle/key/two",{"_index":1361,"title":{},"content":{"94":{"position":[[3003,17]]}},"keywords":{}}],["shufflekeytyp",{"_index":1556,"title":{},"content":{"107":{"position":[[3947,16]]}},"keywords":{}}],["shut",{"_index":4277,"title":{},"content":{"595":{"position":[[1603,4]]}},"keywords":{}}],["shutdown",{"_index":6183,"title":{},"content":{"1292":{"position":[[5215,8]]},"1306":{"position":[[5215,8]]},"1329":{"position":[[5215,8]]},"1379":{"position":[[4258,8]]},"1403":{"position":[[4258,8]]},"1414":{"position":[[4258,8]]}},"keywords":{}}],["sibling/directory/flow.yaml",{"_index":1287,"title":{},"content":{"87":{"position":[[382,30]]}},"keywords":{}}],["sid",{"_index":5405,"title":{},"content":{"1113":{"position":[[99,3]]}},"keywords":{}}],["side",{"_index":1018,"title":{},"content":{"67":{"position":[[2016,5]]},"137":{"position":[[117,4]]},"217":{"position":[[555,4]]},"239":{"position":[[347,4]]},"240":{"position":[[25,5]]},"296":{"position":[[1960,4],[1980,4],[2235,5]]},"602":{"position":[[770,4]]},"698":{"position":[[74,4]]},"1459":{"position":[[1528,5],[1586,5]]},"1464":{"position":[[96,5],[754,4],[798,4]]},"1467":{"position":[[34,4],[54,4],[182,5],[307,5],[367,5],[1735,5]]},"1476":{"position":[[956,4],[1003,4]]},"1477":{"position":[[349,4],[3077,5]]}},"keywords":{}}],["sidebar",{"_index":2222,"title":{},"content":{"204":{"position":[[426,8]]},"205":{"position":[[86,8]]},"436":{"position":[[156,7]]}},"keywords":{}}],["sign",{"_index":1020,"title":{"136":{"position":[[0,7]]},"514":{"position":[[0,7]]}},"content":{"68":{"position":[[325,4]]},"136":{"position":[[51,4]]},"169":{"position":[[1389,6]]},"183":{"position":[[544,4]]},"190":{"position":[[53,4]]},"192":{"position":[[615,6]]},"199":{"position":[[109,4]]},"217":{"position":[[239,4]]},"232":{"position":[[911,4]]},"253":{"position":[[274,4]]},"267":{"position":[[912,4]]},"290":{"position":[[216,4]]},"301":{"position":[[169,4]]},"313":{"position":[[274,4]]},"320":{"position":[[1325,6]]},"338":{"position":[[16,4],[318,5]]},"339":{"position":[[10,4]]},"340":{"position":[[249,6]]},"383":{"position":[[144,4]]},"494":{"position":[[70,4]]},"513":{"position":[[81,7]]},"683":{"position":[[77,4]]},"685":{"position":[[119,4]]},"855":{"position":[[219,4]]},"989":{"position":[[152,6]]},"1004":{"position":[[235,6]]},"1082":{"position":[[250,4]]},"1243":{"position":[[1099,7]]},"1292":{"position":[[5294,6]]},"1306":{"position":[[5294,6]]},"1329":{"position":[[5294,6]]}},"keywords":{}}],["signal",{"_index":2190,"title":{},"content":{"197":{"position":[[1036,8]]},"1292":{"position":[[5257,6]]},"1306":{"position":[[5257,6]]},"1329":{"position":[[5257,6]]},"1443":{"position":[[652,6],[926,7]]}},"keywords":{}}],["signatur",{"_index":3883,"title":{"490":{"position":[[8,9]]},"663":{"position":[[8,9]]},"678":{"position":[[8,9]]},"693":{"position":[[8,9]]}},"content":{"490":{"position":[[45,9]]},"663":{"position":[[45,9]]},"678":{"position":[[45,9]]},"693":{"position":[[45,9]]}},"keywords":{}}],["signifi",{"_index":1847,"title":{},"content":{"154":{"position":[[950,7]]}},"keywords":{}}],["signific",{"_index":2270,"title":{},"content":{"209":{"position":[[1404,11]]},"237":{"position":[[228,12]]},"1391":{"position":[[91,11]]}},"keywords":{}}],["significantli",{"_index":2610,"title":{},"content":{"240":{"position":[[3643,13]]},"1471":{"position":[[1022,13]]}},"keywords":{}}],["silent",{"_index":3199,"title":{},"content":{"331":{"position":[[385,8]]}},"keywords":{}}],["similar",{"_index":358,"title":{},"content":{"12":{"position":[[120,7]]},"107":{"position":[[205,8]]},"125":{"position":[[1200,7]]},"139":{"position":[[103,7]]},"143":{"position":[[119,7]]},"190":{"position":[[507,7]]},"193":{"position":[[622,7]]},"207":{"position":[[329,8]]},"209":{"position":[[155,7]]},"295":{"position":[[3912,8]]},"320":{"position":[[399,7],[547,12],[1621,7],[1928,7]]},"321":{"position":[[513,7]]},"323":{"position":[[1601,8]]},"324":{"position":[[418,12]]},"326":{"position":[[234,7],[480,7]]},"1042":{"position":[[450,7],[920,7]]},"1043":{"position":[[1114,7],[1584,7]]},"1051":{"position":[[1376,7],[1846,7]]},"1059":{"position":[[1169,7],[1639,7]]},"1140":{"position":[[3689,7]]},"1232":{"position":[[461,7]]},"1316":{"position":[[3689,7]]},"1340":{"position":[[3689,7]]},"1351":{"position":[[3689,7]]},"1379":{"position":[[4319,7]]},"1403":{"position":[[4319,7]]},"1414":{"position":[[4319,7]]},"1431":{"position":[[3712,7]]}},"keywords":{}}],["similarli",{"_index":1545,"title":{},"content":{"107":{"position":[[2061,9]]},"210":{"position":[[4059,10]]},"240":{"position":[[1,9]]},"307":{"position":[[3076,9]]},"429":{"position":[[133,10]]}},"keywords":{}}],["simpl",{"_index":300,"title":{},"content":{"11":{"position":[[333,6]]},"62":{"position":[[592,6]]},"132":{"position":[[348,6]]},"162":{"position":[[1821,6]]},"232":{"position":[[947,7]]},"989":{"position":[[90,6]]},"1004":{"position":[[90,6]]},"1182":{"position":[[340,6]]},"1191":{"position":[[342,6]]},"1262":{"position":[[342,6]]},"1292":{"position":[[5337,6]]},"1306":{"position":[[5337,6]]},"1329":{"position":[[5337,6]]},"1389":{"position":[[341,6]]},"1440":{"position":[[474,6]]},"1461":{"position":[[817,6]]}},"keywords":{}}],["simpler",{"_index":403,"title":{},"content":{"13":{"position":[[1026,7]]},"281":{"position":[[3242,7]]},"1243":{"position":[[1221,8]]}},"keywords":{}}],["simplest",{"_index":577,"title":{},"content":{"23":{"position":[[80,8]]},"189":{"position":[[991,8]]},"216":{"position":[[93,8]]},"864":{"position":[[372,8]]},"876":{"position":[[372,8]]},"917":{"position":[[5,8]]},"965":{"position":[[5,8]]},"1227":{"position":[[14,8]]}},"keywords":{}}],["simpli",{"_index":611,"title":{},"content":{"26":{"position":[[348,6]]},"56":{"position":[[813,6]]},"64":{"position":[[837,6]]},"84":{"position":[[132,6]]},"100":{"position":[[214,6]]},"163":{"position":[[285,6]]},"169":{"position":[[196,6]]},"242":{"position":[[177,6]]},"321":{"position":[[951,6]]},"322":{"position":[[1000,7]]},"374":{"position":[[48,6]]},"552":{"position":[[676,6]]},"615":{"position":[[33,6]]},"617":{"position":[[33,6]]},"1442":{"position":[[534,6]]}},"keywords":{}}],["simplic",{"_index":3931,"title":{},"content":{"513":{"position":[[199,10]]},"522":{"position":[[200,10]]},"530":{"position":[[200,10]]},"551":{"position":[[198,10]]},"569":{"position":[[217,10]]},"607":{"position":[[216,10]]},"614":{"position":[[200,10]]},"643":{"position":[[174,10]]},"650":{"position":[[173,10]]},"716":{"position":[[200,10]]},"731":{"position":[[171,10]]}},"keywords":{}}],["simplifi",{"_index":2079,"title":{},"content":{"183":{"position":[[3224,10]]},"329":{"position":[[841,10]]}},"keywords":{}}],["simultan",{"_index":328,"title":{},"content":{"11":{"position":[[1181,14]]},"109":{"position":[[21,14]]}},"keywords":{}}],["sin",{"_index":5685,"title":{},"content":{"1140":{"position":[[3737,3]]},"1316":{"position":[[3737,3]]},"1340":{"position":[[3737,3]]},"1351":{"position":[[3737,3]]},"1431":{"position":[[3760,3]]}},"keywords":{}}],["singer",{"_index":793,"title":{},"content":{"53":{"position":[[88,7]]}},"keywords":{}}],["singl",{"_index":67,"title":{},"content":{"2":{"position":[[64,6]]},"19":{"position":[[56,6]]},"27":{"position":[[432,6]]},"49":{"position":[[61,6],[416,6]]},"61":{"position":[[374,7]]},"63":{"position":[[267,6]]},"68":{"position":[[1588,6],[1738,6]]},"71":{"position":[[605,6]]},"81":{"position":[[1880,6]]},"84":{"position":[[1209,6]]},"98":{"position":[[910,6]]},"101":{"position":[[408,6]]},"120":{"position":[[778,6]]},"121":{"position":[[1521,6]]},"124":{"position":[[667,6]]},"128":{"position":[[176,6]]},"163":{"position":[[184,6]]},"169":{"position":[[235,6]]},"319":{"position":[[924,6]]},"320":{"position":[[801,6]]},"333":{"position":[[32,6]]},"370":{"position":[[859,6]]},"374":{"position":[[299,6],[423,6]]},"379":{"position":[[46,6],[239,6]]},"410":{"position":[[113,6]]},"419":{"position":[[1125,6],[1353,6]]},"440":{"position":[[1141,6],[1369,6]]},"483":{"position":[[553,6]]},"499":{"position":[[91,6]]},"534":{"position":[[1222,6]]},"547":{"position":[[1127,6],[1355,6]]},"634":{"position":[[83,6]]},"757":{"position":[[1626,6]]},"770":{"position":[[1626,6]]},"797":{"position":[[1626,6]]},"812":{"position":[[1626,6]]},"828":{"position":[[1626,6]]},"867":{"position":[[951,6],[1110,6]]},"879":{"position":[[1108,6]]},"907":{"position":[[642,6]]},"923":{"position":[[642,6]]},"934":{"position":[[642,6]]},"950":{"position":[[642,6]]},"968":{"position":[[642,6]]},"1023":{"position":[[1108,6],[1336,6]]},"1045":{"position":[[627,6]]},"1053":{"position":[[627,6]]},"1061":{"position":[[627,6]]},"1144":{"position":[[989,6]]},"1156":{"position":[[178,6],[855,6]]},"1157":{"position":[[23,6]]},"1213":{"position":[[666,6]]},"1275":{"position":[[152,6]]},"1459":{"position":[[873,6]]},"1477":{"position":[[166,6]]}},"keywords":{}}],["sinh",{"_index":5689,"title":{},"content":{"1140":{"position":[[3780,4]]},"1316":{"position":[[3780,4]]},"1340":{"position":[[3780,4]]},"1351":{"position":[[3780,4]]},"1431":{"position":[[3803,4]]}},"keywords":{}}],["sip",{"_index":3455,"title":{},"content":{"377":{"position":[[1359,4]]}},"keywords":{}}],["site",{"_index":3065,"title":{},"content":{"313":{"position":[[3444,5]]},"460":{"position":[[117,5],[123,4],[132,4],[407,5]]},"461":{"position":[[141,5]]},"612":{"position":[[377,5]]},"1461":{"position":[[4718,4]]}},"keywords":{}}],["site>",{"_index":3775,"title":{},"content":{"461":{"position":[[156,8]]}},"keywords":{}}],["site.com/my_hosted_dataset.json.zip",{"_index":4366,"title":{},"content":{"638":{"position":[[127,35]]}},"keywords":{}}],["site.com/my_hosted_dataset.json.zipus",{"_index":4362,"title":{},"content":{"635":{"position":[[335,38]]}},"keywords":{}}],["site_api_key",{"_index":3773,"title":{},"content":{"461":{"position":[[112,13]]}},"keywords":{}}],["site_url",{"_index":4308,"title":{},"content":{"611":{"position":[[938,10]]},"612":{"position":[[290,10]]}},"keywords":{}}],["situat",{"_index":4627,"title":{},"content":{"759":{"position":[[288,11]]},"772":{"position":[[299,11]]},"799":{"position":[[286,11]]},"814":{"position":[[286,11]]},"821":{"position":[[648,9]]},"830":{"position":[[286,11]]},"912":{"position":[[664,9]]}},"keywords":{}}],["six",{"_index":6361,"title":{},"content":{"1383":{"position":[[137,3]]}},"keywords":{}}],["size",{"_index":110,"title":{"1157":{"position":[[15,5]]}},"content":{"3":{"position":[[253,4]]},"19":{"position":[[200,4]]},"66":{"position":[[601,4],[703,5]]},"101":{"position":[[98,4]]},"124":{"position":[[1112,5]]},"180":{"position":[[746,4]]},"185":{"position":[[45,4]]},"209":{"position":[[1324,4],[1618,4]]},"333":{"position":[[549,5]]},"370":{"position":[[788,4]]},"410":{"position":[[56,5]]},"517":{"position":[[3209,4],[3248,4],[3464,4],[3486,4]]},"534":{"position":[[848,4],[973,4],[1011,4]]},"595":{"position":[[509,5],[1816,4]]},"747":{"position":[[1191,4]]},"757":{"position":[[1555,4]]},"770":{"position":[[1555,4]]},"785":{"position":[[513,4]]},"797":{"position":[[1555,4]]},"812":{"position":[[1555,4]]},"821":{"position":[[1006,4]]},"828":{"position":[[1555,4]]},"867":{"position":[[880,4],[1039,4]]},"879":{"position":[[1037,4]]},"907":{"position":[[571,4]]},"909":{"position":[[28,4]]},"910":{"position":[[287,5]]},"922":{"position":[[2244,6]]},"923":{"position":[[571,4]]},"925":{"position":[[28,4]]},"926":{"position":[[287,5]]},"934":{"position":[[571,4]]},"936":{"position":[[28,4]]},"937":{"position":[[287,5]]},"950":{"position":[[571,4]]},"952":{"position":[[28,4]]},"953":{"position":[[287,5]]},"968":{"position":[[571,4]]},"970":{"position":[[28,4]]},"971":{"position":[[287,5]]},"1045":{"position":[[556,4]]},"1053":{"position":[[556,4]]},"1061":{"position":[[556,4]]},"1123":{"position":[[394,4],[521,4]]},"1140":{"position":[[3815,4]]},"1144":{"position":[[577,4],[608,4]]},"1157":{"position":[[13,4]]},"1170":{"position":[[577,4],[608,4]]},"1213":{"position":[[432,4],[463,4]]},"1220":{"position":[[432,4],[463,4]]},"1316":{"position":[[3815,4]]},"1340":{"position":[[3815,4]]},"1351":{"position":[[3815,4]]},"1379":{"position":[[4371,4]]},"1403":{"position":[[4371,4]]},"1414":{"position":[[4371,4]]},"1431":{"position":[[3838,4]]}},"keywords":{}}],["sk_live_",{"_index":5289,"title":{},"content":{"1076":{"position":[[268,11]]}},"keywords":{}}],["skeleton",{"_index":3022,"title":{},"content":{"296":{"position":[[5739,8]]},"315":{"position":[[1744,8]]}},"keywords":{}}],["sketch",{"_index":6482,"title":{},"content":{"1437":{"position":[[1251,7]]}},"keywords":{}}],["skill",{"_index":2129,"title":{},"content":{"190":{"position":[[1516,7]]},"241":{"position":[[470,7]]},"329":{"position":[[1185,7]]}},"keywords":{}}],["skip",{"_index":505,"title":{},"content":{"17":{"position":[[966,4]]},"106":{"position":[[374,4]]},"228":{"position":[[458,4]]},"229":{"position":[[323,4]]},"368":{"position":[[356,4]]},"370":{"position":[[1057,4]]},"558":{"position":[[302,8]]},"595":{"position":[[146,4]]},"755":{"position":[[356,4]]},"757":{"position":[[1402,4],[1702,4]]},"768":{"position":[[356,4]]},"770":{"position":[[1402,4],[1702,4]]},"795":{"position":[[354,4]]},"797":{"position":[[1402,4],[1702,4]]},"810":{"position":[[354,4]]},"812":{"position":[[1402,4],[1702,4]]},"826":{"position":[[354,4]]},"828":{"position":[[1402,4],[1702,4]]},"867":{"position":[[518,4]]},"879":{"position":[[1187,4],[1219,4]]},"905":{"position":[[359,4]]},"907":{"position":[[840,4]]},"920":{"position":[[359,4]]},"923":{"position":[[840,4]]},"932":{"position":[[359,4]]},"934":{"position":[[840,4]]},"948":{"position":[[359,4]]},"950":{"position":[[840,4]]},"966":{"position":[[359,4]]},"968":{"position":[[840,4]]},"1045":{"position":[[688,4]]},"1053":{"position":[[688,4]]},"1061":{"position":[[688,4]]},"1140":{"position":[[3861,4]]},"1144":{"position":[[1182,4]]},"1213":{"position":[[859,4]]},"1292":{"position":[[5384,4]]},"1306":{"position":[[5384,4]]},"1316":{"position":[[3861,4]]},"1329":{"position":[[5384,4]]},"1340":{"position":[[3861,4]]},"1351":{"position":[[3861,4]]},"1431":{"position":[[3884,4]]},"1440":{"position":[[167,7]]}},"keywords":{}}],["skip_binlog_retention_check",{"_index":4662,"title":{},"content":{"764":{"position":[[1128,27]]},"777":{"position":[[1128,27]]},"804":{"position":[[1126,27]]},"819":{"position":[[1126,27]]},"835":{"position":[[1126,27]]}},"keywords":{}}],["skipemail",{"_index":4455,"title":{},"content":{"697":{"position":[[174,9]]}},"keywords":{}}],["skipsticketsus",{"_index":5460,"title":{},"content":{"1128":{"position":[[388,17]]}},"keywords":{}}],["sku",{"_index":3046,"title":{},"content":{"307":{"position":[[1303,6],[1343,4],[1434,5],[2171,6],[2211,4],[2302,5]]},"309":{"position":[[2137,6],[2177,4],[2267,5],[2734,6],[2774,4],[2874,5]]}},"keywords":{}}],["sla_polici",{"_index":5494,"title":{},"content":{"1134":{"position":[[1902,12]]}},"keywords":{}}],["slack",{"_index":2038,"title":{"1011":{"position":[[0,5]]},"1360":{"position":[[0,5]]}},"content":{"175":{"position":[[404,6]]},"212":{"position":[[411,5]]},"232":{"position":[[1006,5]]},"243":{"position":[[406,5]]},"364":{"position":[[3214,5]]},"1012":{"position":[[56,5]]},"1013":{"position":[[1,5]]},"1014":{"position":[[250,5]]},"1015":{"position":[[486,5]]},"1361":{"position":[[66,5]]},"1362":{"position":[[5,5],[253,5],[412,5],[562,6],[616,5],[729,6]]}},"keywords":{}}],["slack:dev",{"_index":3379,"title":{},"content":{"364":{"position":[[3266,9]]},"1016":{"position":[[90,9]]},"1363":{"position":[[110,9]]}},"keywords":{}}],["slash",{"_index":2066,"title":{},"content":{"183":{"position":[[856,5]]},"228":{"position":[[622,8]]},"267":{"position":[[1246,5]]},"270":{"position":[[875,5]]}},"keywords":{}}],["slave",{"_index":4584,"title":{},"content":{"750":{"position":[[814,5]]},"752":{"position":[[724,5]]},"753":{"position":[[1380,5]]},"766":{"position":[[814,5]]},"767":{"position":[[2057,5]]},"789":{"position":[[1215,5]]},"791":{"position":[[729,5]]},"792":{"position":[[2049,5]]},"793":{"position":[[1403,5]]},"807":{"position":[[802,5]]},"808":{"position":[[1349,5]]},"823":{"position":[[802,5]]},"824":{"position":[[2171,5]]},"1292":{"position":[[5426,5]]},"1306":{"position":[[5426,5]]},"1329":{"position":[[5426,5]]}},"keywords":{}}],["slice",{"_index":101,"title":{},"content":{"3":{"position":[[36,5]]},"49":{"position":[[267,5]]},"573":{"position":[[1110,5]]},"747":{"position":[[1161,7],[1218,5]]}},"keywords":{}}],["slightli",{"_index":1131,"title":{},"content":{"81":{"position":[[2174,8]]},"263":{"position":[[929,8]]},"595":{"position":[[528,8]]},"1461":{"position":[[2991,8]]},"1470":{"position":[[893,8]]}},"keywords":{}}],["slot",{"_index":2562,"title":{},"content":{"236":{"position":[[3370,5]]},"366":{"position":[[133,5],[386,5],[413,5]]},"367":{"position":[[632,5]]},"370":{"position":[[1184,4],[1233,4]]},"752":{"position":[[277,5]]},"753":{"position":[[933,5]]},"767":{"position":[[1913,5]]},"791":{"position":[[230,5]]},"792":{"position":[[1853,5]]},"793":{"position":[[904,5]]},"808":{"position":[[850,5]]},"824":{"position":[[1975,5]]},"903":{"position":[[159,5],[412,5],[439,5]]},"904":{"position":[[1732,5]]},"907":{"position":[[967,4],[1016,4]]},"915":{"position":[[159,5],[412,5],[439,5]]},"917":{"position":[[1241,5]]},"918":{"position":[[2024,5]]},"919":{"position":[[2079,5]]},"922":{"position":[[227,4],[508,4],[1041,5],[1434,4],[1610,4],[1725,4],[1785,5],[1870,4],[2044,4],[2486,4],[2522,4],[2601,5],[2635,4],[3023,4]]},"923":{"position":[[967,4],[1016,4]]},"930":{"position":[[159,5],[412,5],[439,5]]},"931":{"position":[[1394,5]]},"934":{"position":[[967,4],[1016,4]]},"945":{"position":[[709,4],[927,5],[994,6],[1059,5],[1095,5]]},"950":{"position":[[967,4],[1016,4]]},"963":{"position":[[313,5],[566,5],[593,5]]},"965":{"position":[[1241,5]]},"968":{"position":[[967,4],[1016,4]]}},"keywords":{}}],["slot'",{"_index":5102,"title":{},"content":{"945":{"position":[[775,6]]}},"keywords":{}}],["slow",{"_index":1944,"title":{},"content":{"164":{"position":[[1226,5]]},"1292":{"position":[[5487,4]]},"1306":{"position":[[5487,4]]},"1329":{"position":[[5487,4]]}},"keywords":{}}],["slower",{"_index":1701,"title":{},"content":{"124":{"position":[[760,7]]}},"keywords":{}}],["slowli",{"_index":2203,"title":{"1007":{"position":[[0,6]]}},"content":{"198":{"position":[[879,6]]},"1452":{"position":[[888,7],[1103,7],[1322,6],[3832,6]]}},"keywords":{}}],["slug",{"_index":5153,"title":{},"content":{"997":{"position":[[161,4],[250,6]]}},"keywords":{}}],["small",{"_index":1702,"title":{},"content":{"124":{"position":[[1029,5]]},"180":{"position":[[827,5]]},"237":{"position":[[1380,5],[1447,5]]},"366":{"position":[[778,5],[845,5]]},"595":{"position":[[1687,5]]},"750":{"position":[[456,5],[533,5]]},"766":{"position":[[456,5],[533,5]]},"789":{"position":[[444,5],[521,5]]},"807":{"position":[[444,5],[521,5]]},"823":{"position":[[444,5],[521,5]]},"903":{"position":[[804,5],[871,5]]},"915":{"position":[[804,5],[871,5]]},"930":{"position":[[804,5],[871,5]]},"963":{"position":[[958,5],[1025,5]]},"1040":{"position":[[520,5],[587,5]]},"1050":{"position":[[520,5],[587,5]]},"1058":{"position":[[520,5],[587,5]]},"1435":{"position":[[489,6]]},"1451":{"position":[[244,5]]},"1459":{"position":[[481,5]]}},"keywords":{}}],["smaller",{"_index":2060,"title":{},"content":{"182":{"position":[[370,7]]},"375":{"position":[[145,7]]},"377":{"position":[[750,7]]},"821":{"position":[[330,7]]},"912":{"position":[[341,7]]},"1036":{"position":[[578,7]]},"1157":{"position":[[234,7]]},"1356":{"position":[[869,8]]}},"keywords":{}}],["smallest",{"_index":3451,"title":{},"content":{"377":{"position":[[915,8]]},"1388":{"position":[[555,8]]},"1476":{"position":[[65,8]]}},"keywords":{}}],["smallint",{"_index":5695,"title":{},"content":{"1140":{"position":[[3904,8]]},"1292":{"position":[[5537,8]]},"1306":{"position":[[5537,8]]},"1316":{"position":[[3904,8]]},"1329":{"position":[[5537,8]]},"1340":{"position":[[3904,8]]},"1351":{"position":[[3904,8]]},"1379":{"position":[[4426,8]]},"1403":{"position":[[4426,8]]},"1414":{"position":[[4426,8]]},"1431":{"position":[[3927,8]]}},"keywords":{}}],["smith",{"_index":2944,"title":{},"content":{"295":{"position":[[365,5]]}},"keywords":{}}],["smooth",{"_index":2591,"title":{},"content":{"239":{"position":[[35,6],[2678,6]]}},"keywords":{}}],["snapchat",{"_index":3380,"title":{"1024":{"position":[[0,8]]}},"content":{"364":{"position":[[3276,8]]},"1025":{"position":[[62,9]]},"1026":{"position":[[3,8]]},"1027":{"position":[[250,8]]},"1028":{"position":[[433,8]]}},"keywords":{}}],["snapchat:dev",{"_index":3381,"title":{},"content":{"364":{"position":[[3331,12]]},"1029":{"position":[[90,12]]}},"keywords":{}}],["snappi",{"_index":27,"title":{},"content":{"1":{"position":[[333,7]]}},"keywords":{}}],["snapshot",{"_index":1300,"title":{},"content":{"88":{"position":[[260,9]]},"112":{"position":[[555,8]]},"198":{"position":[[160,10],[180,9],[350,9]]},"209":{"position":[[323,8],[563,9]]},"785":{"position":[[38,9],[213,9]]},"1292":{"position":[[5593,8]]},"1306":{"position":[[5593,8]]},"1329":{"position":[[5593,8]]}},"keywords":{}}],["snippet",{"_index":2498,"title":{},"content":{"236":{"position":[[279,7],[2648,8]]}},"keywords":{}}],["snowflak",{"_index":2100,"title":{"187":{"position":[[46,9]]},"191":{"position":[[8,9]]},"192":{"position":[[36,10]]},"231":{"position":[[28,9]]},"287":{"position":[[26,9]]},"291":{"position":[[15,10]]},"298":{"position":[[13,9]]},"302":{"position":[[15,10]]},"326":{"position":[[0,10]]},"1030":{"position":[[0,9]]},"1381":{"position":[[0,9]]}},"content":{"188":{"position":[[110,9],[160,9]]},"189":{"position":[[510,9],[1337,9],[1546,10],[1770,9]]},"190":{"position":[[2151,10]]},"191":{"position":[[41,10],[156,9],[297,9],[917,9],[1987,9],[2197,9]]},"192":{"position":[[175,9],[283,10],[481,9],[588,10],[1547,10],[1640,9],[2029,9],[2301,9]]},"193":{"position":[[131,9],[207,9],[320,9],[531,10]]},"232":{"position":[[76,9],[257,9],[651,9],[845,10]]},"234":{"position":[[453,9],[514,10]]},"240":{"position":[[82,9],[158,9],[299,9],[878,9],[1948,9],[2210,9],[2552,9],[2792,9],[2883,9],[3565,9],[4367,9],[4718,9],[4873,9]]},"241":{"position":[[82,9]]},"242":{"position":[[342,9],[378,9]]},"243":{"position":[[111,10]]},"288":{"position":[[263,10],[587,9]]},"289":{"position":[[214,9],[488,9],[631,9]]},"290":{"position":[[1500,10]]},"291":{"position":[[20,9],[128,9],[221,9],[419,9],[644,10],[740,9],[998,9],[1166,10],[1402,10]]},"292":{"position":[[142,9]]},"299":{"position":[[255,10],[502,9]]},"300":{"position":[[193,9],[435,9],[571,9]]},"301":{"position":[[1596,10]]},"302":{"position":[[20,9],[128,9],[221,9],[419,9],[644,10],[740,9],[990,9],[1128,10],[1317,10]]},"303":{"position":[[133,9]]},"307":{"position":[[1516,10],[1614,9],[2384,10],[2482,9],[2952,9]]},"309":{"position":[[2335,10],[2433,9],[2942,10],[3040,9]]},"326":{"position":[[816,9],[1239,10]]},"363":{"position":[[2134,9]]},"1031":{"position":[[40,9],[620,9],[668,9]]},"1032":{"position":[[57,9],[127,9]]},"1033":{"position":[[254,9]]},"1034":{"position":[[68,9],[228,9],[308,9],[374,9],[518,9]]},"1036":{"position":[[11,9],[105,9],[676,9],[733,9]]},"1037":{"position":[[28,10]]},"1120":{"position":[[1740,9]]},"1382":{"position":[[40,9],[355,9],[414,9]]},"1383":{"position":[[73,9],[865,9],[1935,9]]},"1384":{"position":[[591,9],[735,9],[1154,9]]},"1385":{"position":[[113,9],[202,9]]},"1386":{"position":[[89,9],[259,9],[656,9],[874,9]]},"1388":{"position":[[116,9],[387,9]]},"1389":{"position":[[184,9],[498,9]]},"1391":{"position":[[158,9],[405,9],[762,9],[996,9]]},"1393":{"position":[[90,10],[134,9],[305,9]]},"1394":{"position":[[1,9],[261,10],[448,9]]},"1461":{"position":[[2904,10],[3808,10],[4204,10]]}},"keywords":{}}],["snowflake'",{"_index":2117,"title":{},"content":{"189":{"position":[[826,11]]},"1388":{"position":[[543,11]]},"1394":{"position":[[194,11]]}},"keywords":{}}],["snowflake.com/acmeprod",{"_index":6621,"title":{},"content":{"1461":{"position":[[3864,22]]}},"keywords":{}}],["snowflake:dev",{"_index":3244,"title":{},"content":{"344":{"position":[[284,13]]},"363":{"position":[[2190,13]]},"1120":{"position":[[1801,13]]},"1387":{"position":[[340,13],[966,13]]}},"keywords":{}}],["snowflake:v1",{"_index":3050,"title":{},"content":{"307":{"position":[[1583,12],[2451,12]]},"309":{"position":[[2402,12],[3009,12]]},"1037":{"position":[[90,12]]}},"keywords":{}}],["snowflake_cleanup.sql",{"_index":2627,"title":{},"content":{"242":{"position":[[419,21]]}},"keywords":{}}],["snowflake_us",{"_index":3242,"title":{},"content":{"344":{"position":[[206,14]]},"1387":{"position":[[273,14],[818,14]]}},"keywords":{}}],["snowpip",{"_index":6363,"title":{"1384":{"position":[[26,9]]},"1392":{"position":[[0,9]]}},"content":{"1384":{"position":[[27,8],[1254,8]]},"1392":{"position":[[1,8],[128,8],[356,8]]}},"keywords":{}}],["socket",{"_index":6197,"title":{},"content":{"1292":{"position":[[5633,6]]},"1306":{"position":[[5633,6]]},"1329":{"position":[[5633,6]]}},"keywords":{}}],["solut",{"_index":442,"title":{"323":{"position":[[33,10]]}},"content":{"14":{"position":[[969,8]]},"83":{"position":[[237,8]]},"84":{"position":[[1034,9]]},"114":{"position":[[500,8]]},"241":{"position":[[256,9]]},"309":{"position":[[1703,8]]},"977":{"position":[[414,9]]}},"keywords":{}}],["solv",{"_index":2876,"title":{},"content":{"281":{"position":[[449,5]]},"328":{"position":[[41,5]]}},"keywords":{}}],["somebodi",{"_index":4275,"title":{},"content":{"595":{"position":[[1558,8]]}},"keywords":{}}],["someon",{"_index":336,"title":{},"content":{"11":{"position":[[1416,7]]}},"keywords":{}}],["someth",{"_index":430,"title":{},"content":{"14":{"position":[[656,9]]},"99":{"position":[[791,9]]},"110":{"position":[[630,9]]},"165":{"position":[[963,9]]},"207":{"position":[[864,9]]},"217":{"position":[[1120,9]]},"218":{"position":[[832,9]]},"234":{"position":[[364,9]]},"240":{"position":[[4244,9]]},"268":{"position":[[746,9]]},"269":{"position":[[371,9]]},"295":{"position":[[3902,9]]},"759":{"position":[[65,9]]},"762":{"position":[[378,9]]},"763":{"position":[[67,9]]},"772":{"position":[[76,9]]},"775":{"position":[[378,9]]},"776":{"position":[[67,9]]},"799":{"position":[[63,9]]},"802":{"position":[[378,9]]},"803":{"position":[[67,9]]},"814":{"position":[[63,9]]},"817":{"position":[[378,9]]},"818":{"position":[[67,9]]},"830":{"position":[[63,9]]},"833":{"position":[[378,9]]},"834":{"position":[[67,9]]},"1031":{"position":[[713,9]]},"1453":{"position":[[1392,9]]},"1461":{"position":[[1948,9]]}},"keywords":{}}],["sometim",{"_index":800,"title":{},"content":{"53":{"position":[[397,9]]},"111":{"position":[[1,9]]},"279":{"position":[[527,9]]},"322":{"position":[[263,9]]},"660":{"position":[[147,9]]},"909":{"position":[[283,9]]},"925":{"position":[[283,9]]},"936":{"position":[[283,9]]},"952":{"position":[[283,9]]},"970":{"position":[[283,9]]}},"keywords":{}}],["somewhat",{"_index":2777,"title":{},"content":{"254":{"position":[[3989,8]]},"284":{"position":[[689,8]]},"309":{"position":[[861,8]]},"320":{"position":[[1612,8]]},"1178":{"position":[[370,8]]}},"keywords":{}}],["somewher",{"_index":734,"title":{},"content":{"41":{"position":[[503,9]]},"70":{"position":[[328,9]]}},"keywords":{}}],["sonam",{"_index":6199,"title":{},"content":{"1292":{"position":[[5718,6]]},"1306":{"position":[[5718,6]]},"1329":{"position":[[5718,6]]}},"keywords":{}}],["soon",{"_index":2116,"title":{},"content":{"189":{"position":[[792,4]]},"210":{"position":[[2500,4]]},"427":{"position":[[391,5]]}},"keywords":{}}],["sop",{"_index":1145,"title":{},"content":{"82":{"position":[[277,4],[343,4],[463,5],[719,4],[1104,4],[1179,4],[1597,7],[1651,6],[1732,4],[1873,4],[1956,4],[2390,5],[3064,4],[3140,4],[3558,4],[3762,4],[4019,4],[4197,4],[4292,4],[4507,5]]},"548":{"position":[[379,4],[544,5],[704,4]]},"640":{"position":[[220,5]]}},"keywords":{}}],["sophist",{"_index":2246,"title":{},"content":{"208":{"position":[[363,13]]}},"keywords":{}}],["sopswil",{"_index":1186,"title":{},"content":{"82":{"position":[[2860,8]]}},"keywords":{}}],["sort",{"_index":1839,"title":{},"content":{"150":{"position":[[131,6]]},"296":{"position":[[2292,6]]},"821":{"position":[[640,4]]},"912":{"position":[[656,4]]},"1123":{"position":[[166,4]]},"1467":{"position":[[1792,6],[1880,6],[2046,6],[2367,6]]},"1477":{"position":[[2612,6],[2782,6],[3429,6],[3935,6]]}},"keywords":{}}],["sortabl",{"_index":5731,"title":{},"content":{"1146":{"position":[[125,9]]},"1173":{"position":[[125,9]]},"1215":{"position":[[125,9]]},"1223":{"position":[[125,9]]}},"keywords":{}}],["sound",{"_index":6202,"title":{},"content":{"1292":{"position":[[5764,6]]},"1306":{"position":[[5764,6]]},"1329":{"position":[[5764,6]]}},"keywords":{}}],["sourc",{"_index":277,"title":{"53":{"position":[[6,8]]},"106":{"position":[[0,8]]},"182":{"position":[[14,6]]},"235":{"position":[[15,6]]},"275":{"position":[[5,6]]},"947":{"position":[[18,6]]}},"content":{"8":{"position":[[775,6]]},"11":{"position":[[1383,6],[1557,6]]},"13":{"position":[[1270,7]]},"14":{"position":[[319,7]]},"17":{"position":[[204,6]]},"20":{"position":[[141,6]]},"21":{"position":[[258,7],[399,7]]},"34":{"position":[[741,7]]},"35":{"position":[[61,6],[140,6],[199,7],[308,6]]},"37":{"position":[[19,6]]},"38":{"position":[[152,6],[279,6],[646,6]]},"40":{"position":[[148,6]]},"44":{"position":[[396,6]]},"45":{"position":[[58,6]]},"52":{"position":[[210,6]]},"53":{"position":[[70,7],[348,6],[454,6]]},"55":{"position":[[160,6]]},"56":{"position":[[321,7],[963,6],[1391,7]]},"58":{"position":[[789,6]]},"61":{"position":[[810,6]]},"63":{"position":[[949,6],[1072,6],[1207,6]]},"66":{"position":[[653,6]]},"67":{"position":[[302,6],[934,7]]},"68":{"position":[[234,6]]},"70":{"position":[[359,6]]},"77":{"position":[[488,6]]},"81":{"position":[[1451,7],[1780,6],[1976,7],[2036,7]]},"83":{"position":[[21,6],[871,6]]},"84":{"position":[[510,6],[1155,7]]},"87":{"position":[[147,6],[689,8],[766,6]]},"88":{"position":[[409,6]]},"92":{"position":[[16,6],[566,7],[792,7]]},"94":{"position":[[1260,6],[1343,7],[1462,6],[1610,6],[1960,6],[2618,7],[2771,6],[2861,6],[2961,6]]},"96":{"position":[[79,6],[165,7]]},"99":{"position":[[41,6],[218,6],[340,6],[463,6]]},"101":{"position":[[150,6]]},"102":{"position":[[56,6],[415,6]]},"103":{"position":[[91,6],[414,6],[602,6]]},"105":{"position":[[26,6],[143,6],[626,6],[730,6],[778,6],[1061,6],[1296,6]]},"106":{"position":[[5,6],[85,6],[238,6],[438,6],[467,6],[651,6]]},"107":{"position":[[9,6],[361,6],[450,6],[833,7],[1336,6],[1461,7],[2321,6],[2396,6],[2545,6],[2641,7],[2935,6],[3092,6],[3213,6],[3295,7],[4013,7]]},"109":{"position":[[51,6],[98,6],[214,6],[268,6],[318,6]]},"110":{"position":[[86,6],[200,6],[345,6],[874,6],[1055,6],[1150,6],[1263,6]]},"111":{"position":[[49,6],[138,6],[522,6],[600,6]]},"112":{"position":[[252,6]]},"120":{"position":[[931,6],[1006,7],[1162,6],[1512,6]]},"121":{"position":[[1173,7]]},"122":{"position":[[1179,7]]},"123":{"position":[[558,6],[641,7]]},"126":{"position":[[74,6],[124,6]]},"135":{"position":[[293,6]]},"137":{"position":[[134,7]]},"138":{"position":[[1864,6]]},"144":{"position":[[534,6]]},"162":{"position":[[232,6],[1385,6],[1500,7]]},"165":{"position":[[434,6]]},"169":{"position":[[1189,6]]},"175":{"position":[[50,6]]},"181":{"position":[[117,8]]},"183":{"position":[[182,6],[837,6],[1375,7],[1581,6],[2407,6],[2850,6],[3895,7],[4079,6],[4485,6]]},"184":{"position":[[86,6],[604,6]]},"189":{"position":[[954,6],[1090,7]]},"190":{"position":[[72,7],[180,7]]},"192":{"position":[[1195,6],[1600,6]]},"196":{"position":[[321,6]]},"198":{"position":[[255,6]]},"199":{"position":[[264,6]]},"205":{"position":[[61,9]]},"208":{"position":[[248,6],[1530,7]]},"211":{"position":[[744,6]]},"212":{"position":[[186,8]]},"213":{"position":[[242,6]]},"216":{"position":[[56,6]]},"217":{"position":[[55,6],[321,7],[412,7],[1024,6],[1862,6]]},"218":{"position":[[631,6],[1348,7],[1558,8],[2048,6]]},"219":{"position":[[489,7]]},"224":{"position":[[896,6]]},"228":{"position":[[813,6]]},"229":{"position":[[507,6],[625,6]]},"233":{"position":[[328,6]]},"237":{"position":[[1065,6],[2889,6]]},"239":{"position":[[232,7],[290,7],[322,7],[1805,6]]},"240":{"position":[[18,6],[3909,7]]},"243":{"position":[[180,8]]},"254":{"position":[[613,7],[2670,7],[3005,6],[3029,7],[3106,6],[3309,6]]},"255":{"position":[[165,6],[1139,6]]},"259":{"position":[[11,7],[417,6],[650,6],[876,6],[2222,6],[2457,6],[2638,6]]},"263":{"position":[[783,6],[857,6],[876,6]]},"264":{"position":[[380,6],[446,6]]},"267":{"position":[[326,7],[1227,6]]},"268":{"position":[[998,7],[1227,6],[1299,6],[1399,6],[1813,6],[1923,6]]},"269":{"position":[[608,7],[798,6],[870,6],[970,6],[1270,6],[1385,6]]},"270":{"position":[[370,6],[690,6],[810,6],[1169,6],[1382,6],[1471,6],[1683,6],[1883,6],[2001,6]]},"271":{"position":[[457,6]]},"274":{"position":[[719,8],[1563,6],[1635,6]]},"275":{"position":[[401,6],[480,6],[705,6]]},"277":{"position":[[689,7],[981,7],[1023,6],[1192,6]]},"278":{"position":[[1131,7]]},"279":{"position":[[729,6],[866,6],[1479,7],[1592,7]]},"280":{"position":[[1626,7],[1931,7]]},"281":{"position":[[1019,7]]},"286":{"position":[[167,6],[414,6]]},"289":{"position":[[62,6],[137,6]]},"290":{"position":[[298,7],[1342,6]]},"291":{"position":[[869,6],[1023,6],[1522,6]]},"295":{"position":[[10,7]]},"296":{"position":[[767,7],[868,7],[1716,6],[2768,7],[2869,7],[3164,6],[3254,6],[3753,6],[4735,7],[4934,7],[6827,6],[7445,6],[7806,6]]},"300":{"position":[[62,6],[137,6]]},"301":{"position":[[251,7]]},"302":{"position":[[869,6],[1442,6]]},"305":{"position":[[526,6]]},"306":{"position":[[477,6]]},"307":{"position":[[1653,7],[1856,7],[2521,7]]},"309":{"position":[[2472,7],[3079,7]]},"314":{"position":[[490,7],[2345,7],[2604,7],[2681,6],[2884,6]]},"315":{"position":[[171,6]]},"316":{"position":[[167,6],[1464,6]]},"321":{"position":[[767,6]]},"322":{"position":[[439,6],[1273,6],[1406,7],[1502,7]]},"323":{"position":[[123,7],[201,6],[358,6],[626,6],[1414,6]]},"326":{"position":[[282,6],[1455,6],[1607,7]]},"330":{"position":[[611,6]]},"335":{"position":[[68,6]]},"344":{"position":[[334,7]]},"350":{"position":[[258,6]]},"358":{"position":[[259,6]]},"363":{"position":[[175,6]]},"364":{"position":[[23,6]]},"369":{"position":[[261,6]]},"371":{"position":[[1516,6]]},"376":{"position":[[257,6]]},"386":{"position":[[261,6]]},"391":{"position":[[265,6]]},"396":{"position":[[259,6]]},"401":{"position":[[32,6],[321,6]]},"407":{"position":[[260,6]]},"416":{"position":[[253,6]]},"419":{"position":[[91,6]]},"423":{"position":[[260,6]]},"431":{"position":[[263,6]]},"437":{"position":[[269,6]]},"440":{"position":[[107,6]]},"447":{"position":[[259,6]]},"452":{"position":[[25,6]]},"453":{"position":[[260,6]]},"458":{"position":[[25,6]]},"459":{"position":[[260,6]]},"465":{"position":[[256,6]]},"472":{"position":[[257,6]]},"481":{"position":[[259,6]]},"482":{"position":[[133,6]]},"485":{"position":[[240,7]]},"495":{"position":[[265,6]]},"496":{"position":[[240,6]]},"501":{"position":[[27,6],[214,6]]},"508":{"position":[[260,6]]},"509":{"position":[[245,6]]},"516":{"position":[[269,6]]},"525":{"position":[[257,6]]},"533":{"position":[[257,6]]},"538":{"position":[[22,6]]},"539":{"position":[[257,6]]},"544":{"position":[[254,6]]},"547":{"position":[[92,6]]},"552":{"position":[[605,6]]},"555":{"position":[[258,6]]},"563":{"position":[[33,6]]},"571":{"position":[[255,6]]},"572":{"position":[[267,6]]},"583":{"position":[[259,6]]},"592":{"position":[[257,6]]},"610":{"position":[[272,6]]},"617":{"position":[[207,6]]},"618":{"position":[[264,6]]},"623":{"position":[[26,6]]},"624":{"position":[[261,6]]},"629":{"position":[[23,6]]},"630":{"position":[[258,6]]},"636":{"position":[[260,6]]},"637":{"position":[[1099,6]]},"640":{"position":[[288,6]]},"653":{"position":[[258,6]]},"657":{"position":[[240,7]]},"669":{"position":[[260,6]]},"673":{"position":[[240,7]]},"684":{"position":[[259,6]]},"688":{"position":[[240,7]]},"698":{"position":[[24,6]]},"699":{"position":[[259,6]]},"704":{"position":[[23,6]]},"705":{"position":[[258,6]]},"711":{"position":[[255,6]]},"719":{"position":[[258,6]]},"724":{"position":[[127,7]]},"727":{"position":[[265,6]]},"734":{"position":[[260,6]]},"740":{"position":[[258,6]]},"745":{"position":[[24,6]]},"746":{"position":[[259,6]]},"756":{"position":[[258,6]]},"758":{"position":[[500,6]]},"759":{"position":[[5,6]]},"769":{"position":[[258,6]]},"771":{"position":[[500,6]]},"772":{"position":[[5,6]]},"781":{"position":[[255,6]]},"786":{"position":[[324,6]]},"796":{"position":[[257,6]]},"798":{"position":[[498,6]]},"799":{"position":[[5,6]]},"805":{"position":[[231,7]]},"811":{"position":[[256,6]]},"813":{"position":[[498,6]]},"814":{"position":[[5,6]]},"820":{"position":[[231,7]]},"821":{"position":[[352,6]]},"827":{"position":[[256,6]]},"829":{"position":[[498,6]]},"830":{"position":[[5,6]]},"836":{"position":[[231,7]]},"841":{"position":[[259,6]]},"842":{"position":[[345,6],[372,6]]},"850":{"position":[[259,6]]},"858":{"position":[[257,6]]},"866":{"position":[[259,6]]},"878":{"position":[[269,6]]},"884":{"position":[[269,6]]},"890":{"position":[[257,6]]},"894":{"position":[[25,6]]},"895":{"position":[[48,6]]},"896":{"position":[[260,6]]},"899":{"position":[[15,6]]},"906":{"position":[[261,6]]},"908":{"position":[[544,6]]},"912":{"position":[[363,6]]},"921":{"position":[[261,6]]},"924":{"position":[[544,6]]},"933":{"position":[[261,6]]},"935":{"position":[[544,6]]},"947":{"position":[[36,7],[562,6],[979,6]]},"949":{"position":[[261,6]]},"951":{"position":[[544,6]]},"958":{"position":[[259,6]]},"967":{"position":[[261,6]]},"969":{"position":[[544,6]]},"981":{"position":[[259,6]]},"990":{"position":[[271,6]]},"995":{"position":[[22,6]]},"996":{"position":[[257,6]]},"1005":{"position":[[264,6]]},"1006":{"position":[[421,7]]},"1008":{"position":[[823,7],[1930,6]]},"1014":{"position":[[256,6]]},"1021":{"position":[[255,6]]},"1023":{"position":[[72,6]]},"1027":{"position":[[259,6]]},"1031":{"position":[[490,6],[583,6]]},"1033":{"position":[[268,6]]},"1036":{"position":[[856,6],[1002,6]]},"1044":{"position":[[261,6]]},"1046":{"position":[[478,6]]},"1052":{"position":[[261,6]]},"1054":{"position":[[478,6]]},"1060":{"position":[[261,6]]},"1062":{"position":[[478,6]]},"1069":{"position":[[263,6]]},"1075":{"position":[[257,6]]},"1084":{"position":[[267,6]]},"1089":{"position":[[27,6]]},"1090":{"position":[[50,6]]},"1093":{"position":[[262,6]]},"1096":{"position":[[17,6]]},"1100":{"position":[[268,6]]},"1106":{"position":[[264,6]]},"1112":{"position":[[257,6]]},"1118":{"position":[[266,6],[977,6],[1064,7],[1202,6]]},"1123":{"position":[[315,6]]},"1126":{"position":[[320,7]]},"1132":{"position":[[267,6]]},"1139":{"position":[[1211,7]]},"1145":{"position":[[312,7]]},"1152":{"position":[[405,7]]},"1155":{"position":[[435,6]]},"1163":{"position":[[367,7]]},"1166":{"position":[[56,6]]},"1171":{"position":[[316,7]]},"1176":{"position":[[536,7]]},"1180":{"position":[[315,7]]},"1182":{"position":[[649,7]]},"1185":{"position":[[336,7]]},"1189":{"position":[[500,7]]},"1191":{"position":[[669,7]]},"1194":{"position":[[546,7]]},"1197":{"position":[[499,7]]},"1203":{"position":[[707,7]]},"1207":{"position":[[587,7]]},"1214":{"position":[[252,7]]},"1221":{"position":[[256,7]]},"1226":{"position":[[347,7]]},"1231":{"position":[[312,7]]},"1232":{"position":[[535,7],[626,7]]},"1241":{"position":[[13,7]]},"1243":{"position":[[124,7]]},"1248":{"position":[[512,7]]},"1252":{"position":[[257,6]]},"1254":{"position":[[287,7]]},"1261":{"position":[[347,7]]},"1262":{"position":[[653,7]]},"1270":{"position":[[235,7]]},"1278":{"position":[[314,7]]},"1287":{"position":[[224,7]]},"1292":{"position":[[5807,6]]},"1302":{"position":[[224,7]]},"1306":{"position":[[5807,6]]},"1314":{"position":[[227,7]]},"1326":{"position":[[224,7]]},"1329":{"position":[[5807,6]]},"1338":{"position":[[227,7]]},"1349":{"position":[[227,7]]},"1354":{"position":[[371,7]]},"1357":{"position":[[456,7]]},"1362":{"position":[[521,6],[528,6]]},"1363":{"position":[[245,7]]},"1368":{"position":[[163,7]]},"1377":{"position":[[228,7]]},"1382":{"position":[[590,7]]},"1387":{"position":[[523,7],[1149,7]]},"1389":{"position":[[651,7]]},"1401":{"position":[[228,7]]},"1412":{"position":[[228,7]]},"1421":{"position":[[526,7]]},"1428":{"position":[[268,7]]},"1429":{"position":[[897,7]]},"1447":{"position":[[206,6]]},"1451":{"position":[[207,6],[425,6]]},"1461":{"position":[[2199,6]]},"1472":{"position":[[805,7]]},"1475":{"position":[[917,6]]},"1479":{"position":[[96,6]]},"1480":{"position":[[637,6],[712,7],[868,6],[1218,6]]}},"keywords":{}}],["source."",{"_index":4958,"title":{},"content":{"895":{"position":[[634,13]]}},"keywords":{}}],["source.collect",{"_index":663,"title":{},"content":{"32":{"position":[[228,19]]}},"keywords":{}}],["source[sourc",{"_index":306,"title":{},"content":{"11":{"position":[[428,13]]}},"keywords":{}}],["source_auto_p",{"_index":6205,"title":{},"content":{"1292":{"position":[[5843,13]]},"1306":{"position":[[5843,13]]},"1329":{"position":[[5843,13]]}},"keywords":{}}],["source_bind",{"_index":6208,"title":{},"content":{"1292":{"position":[[5891,11]]},"1306":{"position":[[5891,11]]},"1329":{"position":[[5891,11]]}},"keywords":{}}],["source_compr",{"_index":6210,"title":{},"content":{"1292":{"position":[[5933,13]]},"1306":{"position":[[5933,13]]},"1329":{"position":[[5933,13]]}},"keywords":{}}],["source_connec",{"_index":6213,"title":{},"content":{"1292":{"position":[[5989,13]]},"1306":{"position":[[5989,13]]},"1329":{"position":[[5989,13]]}},"keywords":{}}],["source_credenti",{"_index":4091,"title":{},"content":{"548":{"position":[[1208,19]]}},"keywords":{}}],["source_db",{"_index":5218,"title":{},"content":{"1032":{"position":[[291,12]]},"1037":{"position":[[191,9]]}},"keywords":{}}],["source_delay",{"_index":6214,"title":{},"content":{"1292":{"position":[[6042,12]]},"1306":{"position":[[6042,12]]},"1329":{"position":[[6042,12]]}},"keywords":{}}],["source_heartb",{"_index":6217,"title":{},"content":{"1292":{"position":[[6091,13]]},"1306":{"position":[[6091,13]]},"1329":{"position":[[6091,13]]}},"keywords":{}}],["source_host",{"_index":6067,"title":{},"content":{"1292":{"position":[[2995,11]]},"1306":{"position":[[2995,11]]},"1329":{"position":[[2995,11]]}},"keywords":{}}],["source_log_fi",{"_index":6070,"title":{},"content":{"1292":{"position":[[3036,13]]},"1306":{"position":[[3036,13]]},"1329":{"position":[[3036,13]]}},"keywords":{}}],["source_log_po",{"_index":6072,"title":{},"content":{"1292":{"position":[[3084,13]]},"1306":{"position":[[3084,13]]},"1329":{"position":[[3084,13]]}},"keywords":{}}],["source_nam",{"_index":5250,"title":{},"content":{"1042":{"position":[[1031,12]]},"1043":{"position":[[1695,12]]},"1051":{"position":[[1957,12]]},"1059":{"position":[[1750,12]]}},"keywords":{}}],["source_passwo",{"_index":6074,"title":{},"content":{"1292":{"position":[[3131,13]]},"1306":{"position":[[3131,13]]},"1329":{"position":[[3131,13]]}},"keywords":{}}],["source_port",{"_index":6079,"title":{},"content":{"1292":{"position":[[3197,11]]},"1306":{"position":[[3197,11]]},"1329":{"position":[[3197,11]]}},"keywords":{}}],["source_publ",{"_index":6081,"title":{},"content":{"1292":{"position":[[3248,13]]},"1306":{"position":[[3248,13]]},"1329":{"position":[[3248,13]]}},"keywords":{}}],["source_schema",{"_index":5249,"title":{},"content":{"1042":{"position":[[1007,14]]},"1043":{"position":[[1671,14]]},"1051":{"position":[[1933,14]]},"1059":{"position":[[1726,14]]}},"keywords":{}}],["source_ssl",{"_index":6087,"title":{},"content":{"1292":{"position":[[3345,10]]},"1306":{"position":[[3345,10]]},"1329":{"position":[[3345,10]]}},"keywords":{}}],["source_ssl_c",{"_index":6095,"title":{},"content":{"1292":{"position":[[3500,13]]},"1306":{"position":[[3500,13]]},"1329":{"position":[[3500,13]]}},"keywords":{}}],["source_ssl_ca",{"_index":6091,"title":{},"content":{"1292":{"position":[[3394,13],[3450,13]]},"1306":{"position":[[3394,13],[3450,13]]},"1329":{"position":[[3394,13],[3450,13]]}},"keywords":{}}],["source_ssl_ci",{"_index":6098,"title":{},"content":{"1292":{"position":[[3543,13]]},"1306":{"position":[[3543,13]]},"1329":{"position":[[3543,13]]}},"keywords":{}}],["source_ssl_cr",{"_index":6100,"title":{},"content":{"1292":{"position":[[3589,13],[3638,13]]},"1306":{"position":[[3589,13],[3638,13]]},"1329":{"position":[[3589,13],[3638,13]]}},"keywords":{}}],["source_ssl_k",{"_index":6102,"title":{},"content":{"1292":{"position":[[3686,13]]},"1306":{"position":[[3686,13]]},"1329":{"position":[[3686,13]]}},"keywords":{}}],["source_ssl_v",{"_index":6105,"title":{},"content":{"1292":{"position":[[3736,13]]},"1306":{"position":[[3736,13]]},"1329":{"position":[[3736,13]]}},"keywords":{}}],["source_tls_ci",{"_index":6109,"title":{},"content":{"1292":{"position":[[3787,13]]},"1306":{"position":[[3787,13]]},"1329":{"position":[[3787,13]]}},"keywords":{}}],["source_tls_v",{"_index":6110,"title":{},"content":{"1292":{"position":[[3827,13]]},"1306":{"position":[[3827,13]]},"1329":{"position":[[3827,13]]}},"keywords":{}}],["source_us",{"_index":6112,"title":{},"content":{"1292":{"position":[[3869,11]]},"1306":{"position":[[3869,11]]},"1329":{"position":[[3869,11]]}},"keywords":{}}],["source_zstd_c",{"_index":6115,"title":{},"content":{"1292":{"position":[[3918,13]]},"1306":{"position":[[3918,13]]},"1329":{"position":[[3918,13]]}},"keywords":{}}],["sourcecaptur",{"_index":1648,"title":{"126":{"position":[[6,13]]}},"content":{"120":{"position":[[2614,13],[2848,14]]},"126":{"position":[[248,13]]}},"keywords":{}}],["sourcefiltervaluestypescript",{"_index":3078,"title":{},"content":{"315":{"position":[[1336,28],[1616,28],[1911,28]]}},"keywords":{}}],["sourcefromcustom",{"_index":3013,"title":{},"content":{"296":{"position":[[4973,19],[5261,19],[5618,19],[5913,19],[6311,19]]}},"keywords":{}}],["sourcefromord",{"_index":3011,"title":{},"content":{"296":{"position":[[4774,16],[5243,17],[5508,16],[5895,17],[6160,16]]}},"keywords":{}}],["sourcefromoutcom",{"_index":2887,"title":{},"content":{"281":{"position":[[1250,18],[1429,18]]}},"keywords":{}}],["sourceon",{"_index":2425,"title":{},"content":{"216":{"position":[[200,9]]}},"keywords":{}}],["sourceretri",{"_index":6083,"title":{},"content":{"1292":{"position":[[3296,11]]},"1306":{"position":[[3296,11]]},"1329":{"position":[[3296,11]]}},"keywords":{}}],["sources),deriv",{"_index":3158,"title":{},"content":{"323":{"position":[[438,20]]}},"keywords":{}}],["sourcespageslocationsmonthli",{"_index":4145,"title":{},"content":{"568":{"position":[[100,28]]}},"keywords":{}}],["sourceswebsit",{"_index":4216,"title":{},"content":{"580":{"position":[[117,14]]}},"keywords":{}}],["space",{"_index":1344,"title":{},"content":{"94":{"position":[[1204,6]]},"237":{"position":[[1395,6]]},"320":{"position":[[27,5]]},"366":{"position":[[793,6]]},"534":{"position":[[266,5],[1137,5]]},"720":{"position":[[278,5]]},"903":{"position":[[819,6]]},"915":{"position":[[819,6]]},"922":{"position":[[3361,6]]},"930":{"position":[[819,6]]},"963":{"position":[[973,6]]},"1040":{"position":[[535,6]]},"1050":{"position":[[535,6]]},"1058":{"position":[[535,6]]},"1140":{"position":[[3996,5]]},"1316":{"position":[[3996,5]]},"1340":{"position":[[3996,5]]},"1351":{"position":[[3996,5]]},"1379":{"position":[[4526,5]]},"1403":{"position":[[4526,5]]},"1414":{"position":[[4526,5]]},"1431":{"position":[[4019,5]]}},"keywords":{}}],["space"",{"_index":4581,"title":{},"content":{"750":{"position":[[476,11]]},"766":{"position":[[476,11]]},"789":{"position":[[464,11]]},"807":{"position":[[464,11]]},"823":{"position":[[464,11]]}},"keywords":{}}],["spammi",{"_index":2577,"title":{},"content":{"237":{"position":[[3416,7]]}},"keywords":{}}],["spare",{"_index":2311,"title":{},"content":{"210":{"position":[[1921,5]]}},"keywords":{}}],["spark",{"_index":165,"title":{"321":{"position":[[0,6]]}},"content":{"4":{"position":[[357,5]]},"107":{"position":[[168,6]]},"113":{"position":[[274,6]]},"321":{"position":[[1,5],[263,6],[795,5],[1226,5],[1293,5],[1432,5],[1560,6],[1724,5],[2072,5]]},"329":{"position":[[518,6]]},"1164":{"position":[[733,6]]}},"keywords":{}}],["spark'",{"_index":3139,"title":{},"content":{"321":{"position":[[1067,7]]}},"keywords":{}}],["spatial",{"_index":6120,"title":{},"content":{"1292":{"position":[[3970,7]]},"1306":{"position":[[3970,7]]},"1329":{"position":[[3970,7]]}},"keywords":{}}],["speak",{"_index":1447,"title":{},"content":{"101":{"position":[[199,9]]},"109":{"position":[[141,9]]},"760":{"position":[[718,8]]},"773":{"position":[[718,8]]},"800":{"position":[[718,8]]},"815":{"position":[[718,8]]},"831":{"position":[[718,8]]}},"keywords":{}}],["spec",{"_index":255,"title":{"147":{"position":[[0,4]]},"150":{"position":[[0,4]]},"153":{"position":[[0,4]]}},"content":{"7":{"position":[[687,5]]},"11":{"position":[[645,5],[655,4],[824,4],[1326,5],[1823,4]]},"13":{"position":[[264,5],[581,5],[715,5]]},"14":{"position":[[281,5],[757,4]]},"54":{"position":[[677,5]]},"55":{"position":[[488,5]]},"61":{"position":[[1312,5]]},"62":{"position":[[92,6],[234,5],[575,5]]},"63":{"position":[[134,6]]},"147":{"position":[[10,4]]},"153":{"position":[[10,4]]},"165":{"position":[[1172,4]]},"182":{"position":[[155,4]]},"229":{"position":[[166,5]]},"239":{"position":[[2243,5]]},"263":{"position":[[494,5]]},"270":{"position":[[769,5]]},"274":{"position":[[1301,6],[1383,5],[1513,5]]},"305":{"position":[[359,5],[472,4]]},"306":{"position":[[121,4],[539,4]]},"307":{"position":[[330,5],[1007,6]]},"309":{"position":[[2086,6],[2672,5],[3256,4]]},"323":{"position":[[1545,5]]},"1008":{"position":[[1141,5]]},"1036":{"position":[[522,4]]},"1461":{"position":[[132,4],[279,5],[1808,4],[1915,5],[2455,5],[2722,5],[3135,5]]}},"keywords":{}}],["special",{"_index":1293,"title":{},"content":{"87":{"position":[[611,7]]},"98":{"position":[[873,7]]},"165":{"position":[[1865,7]]},"329":{"position":[[1156,11]]},"489":{"position":[[382,7],[429,7]]},"522":{"position":[[405,7]]},"530":{"position":[[405,7]]},"662":{"position":[[382,7],[429,7]]},"677":{"position":[[382,7],[429,7]]},"692":{"position":[[382,7],[429,7]]}},"keywords":{}}],["specif",{"_index":1,"title":{"1":{"position":[[0,14]]},"24":{"position":[[5,13]]},"56":{"position":[[0,14]]},"62":{"position":[[12,14]]},"69":{"position":[[0,14]]},"87":{"position":[[0,14]]},"94":{"position":[[0,14]]},"120":{"position":[[0,14]]},"124":{"position":[[12,8]]},"272":{"position":[[12,13]]},"274":{"position":[[5,14]]},"275":{"position":[[33,15]]},"286":{"position":[[7,8]]},"524":{"position":[[26,13]]},"532":{"position":[[26,13]]},"554":{"position":[[26,13]]},"617":{"position":[[26,13]]},"645":{"position":[[26,13]]},"652":{"position":[[26,13]]},"718":{"position":[[26,13]]},"733":{"position":[[26,13]]},"988":{"position":[[26,13]]},"1003":{"position":[[26,13]]},"1097":{"position":[[10,8]]},"1480":{"position":[[0,14]]}},"content":{"2":{"position":[[762,8],[834,14]]},"11":{"position":[[627,14]]},"12":{"position":[[216,13]]},"13":{"position":[[1834,8]]},"24":{"position":[[52,13],[163,13],[275,13]]},"25":{"position":[[37,13],[174,13]]},"26":{"position":[[60,13],[216,13]]},"33":{"position":[[195,13],[291,14]]},"56":{"position":[[30,13],[1588,13],[1773,8],[1871,8]]},"60":{"position":[[515,14],[566,14]]},"61":{"position":[[43,13],[124,14],[482,14],[766,14],[1086,14],[1120,14]]},"62":{"position":[[15,14],[175,14],[306,13]]},"63":{"position":[[6,14],[187,13],[234,13],[331,14],[533,14],[935,13],[1096,14]]},"64":{"position":[[1001,14]]},"67":{"position":[[275,8]]},"68":{"position":[[539,14]]},"69":{"position":[[33,13]]},"70":{"position":[[240,14],[579,8]]},"75":{"position":[[8,13],[254,13],[405,13]]},"79":{"position":[[132,15]]},"80":{"position":[[669,14]]},"81":{"position":[[247,8],[381,8],[513,8],[573,8],[623,8],[750,14],[828,14],[962,13],[2313,8],[2389,13]]},"82":{"position":[[1219,13],[2787,14],[4925,14]]},"84":{"position":[[773,13]]},"89":{"position":[[63,13]]},"91":{"position":[[285,14],[333,13],[391,13]]},"97":{"position":[[92,14]]},"101":{"position":[[56,9]]},"107":{"position":[[718,8],[1624,8],[3472,8]]},"120":{"position":[[38,13],[1920,8],[2018,8]]},"130":{"position":[[77,8]]},"138":{"position":[[2774,14]]},"139":{"position":[[21,13]]},"140":{"position":[[259,8]]},"141":{"position":[[281,13]]},"142":{"position":[[2859,14]]},"143":{"position":[[21,13]]},"144":{"position":[[450,8]]},"146":{"position":[[608,8]]},"147":{"position":[[37,13]]},"149":{"position":[[581,8]]},"152":{"position":[[584,8]]},"153":{"position":[[37,13]]},"156":{"position":[[140,15]]},"161":{"position":[[201,8]]},"164":{"position":[[135,8]]},"165":{"position":[[938,14]]},"174":{"position":[[569,8]]},"192":{"position":[[2054,13]]},"197":{"position":[[1323,8],[1481,8]]},"207":{"position":[[839,14],[1063,13]]},"208":{"position":[[778,14]]},"210":{"position":[[465,14]]},"221":{"position":[[1962,8]]},"228":{"position":[[214,14]]},"229":{"position":[[107,13],[930,14]]},"230":{"position":[[872,14],[941,14]]},"239":{"position":[[2163,14]]},"259":{"position":[[138,14],[345,13],[1819,14],[2034,13]]},"260":{"position":[[84,13]]},"263":{"position":[[590,14],[1169,14]]},"264":{"position":[[119,13],[203,15]]},"267":{"position":[[1385,14],[1561,13]]},"270":{"position":[[1014,14],[1187,13]]},"274":{"position":[[461,14],[1245,14],[1325,14],[1438,14],[1664,14],[1729,14],[1964,15]]},"275":{"position":[[141,13],[225,15],[526,14],[616,15],[652,14],[828,15]]},"281":{"position":[[623,13]]},"284":{"position":[[392,9]]},"285":{"position":[[212,13],[262,13],[338,14]]},"286":{"position":[[7,8],[158,8],[207,8]]},"301":{"position":[[947,8]]},"305":{"position":[[341,14]]},"308":{"position":[[981,13]]},"309":{"position":[[148,8]]},"323":{"position":[[1384,14]]},"350":{"position":[[89,13],[177,13],[234,8]]},"358":{"position":[[89,13],[177,13],[234,8]]},"369":{"position":[[89,13],[177,13],[234,8]]},"376":{"position":[[89,13],[177,13],[234,8]]},"386":{"position":[[89,13],[177,13],[234,8]]},"388":{"position":[[13,13]]},"391":{"position":[[89,13],[177,13],[234,8]]},"396":{"position":[[89,13],[177,13],[234,8]]},"401":{"position":[[113,13],[223,13],[289,8]]},"407":{"position":[[89,13],[177,13],[234,8]]},"414":{"position":[[100,8],[230,8]]},"415":{"position":[[186,8],[490,8]]},"416":{"position":[[89,13],[177,13],[234,8]]},"419":{"position":[[2773,13]]},"423":{"position":[[89,13],[177,13],[234,8]]},"431":{"position":[[89,13],[177,13],[234,8]]},"437":{"position":[[89,13],[177,13],[234,8]]},"441":{"position":[[1382,13]]},"447":{"position":[[89,13],[177,13],[234,8]]},"449":{"position":[[13,13]]},"452":{"position":[[164,12]]},"453":{"position":[[89,13],[177,13],[234,8]]},"459":{"position":[[89,13],[177,13],[234,8]]},"465":{"position":[[89,13],[177,13],[234,8]]},"472":{"position":[[89,13],[177,13],[234,8]]},"473":{"position":[[13,13]]},"481":{"position":[[89,13],[177,13],[234,8]]},"482":{"position":[[436,8]]},"485":{"position":[[108,8],[161,8]]},"495":{"position":[[89,13],[177,13],[234,8]]},"500":{"position":[[187,8]]},"501":{"position":[[133,13],[190,8]]},"508":{"position":[[89,13],[177,13],[234,8]]},"515":{"position":[[768,12]]},"516":{"position":[[89,13],[177,13],[234,8]]},"517":{"position":[[3356,12],[3407,8],[3655,12],[3706,8]]},"518":{"position":[[13,13]]},"525":{"position":[[89,13],[177,13],[234,8]]},"527":{"position":[[13,13]]},"533":{"position":[[89,13],[177,13],[234,8]]},"535":{"position":[[13,13]]},"539":{"position":[[89,13],[177,13],[234,8]]},"544":{"position":[[89,13],[177,13],[234,8]]},"547":{"position":[[2775,13]]},"555":{"position":[[86,13],[174,13],[231,8]]},"557":{"position":[[13,13]]},"562":{"position":[[213,12]]},"563":{"position":[[105,13],[241,13],[298,8]]},"572":{"position":[[89,13],[177,13],[234,8]]},"583":{"position":[[79,13],[167,13],[224,8]]},"592":{"position":[[86,13],[174,13],[231,8]]},"600":{"position":[[89,13]]},"610":{"position":[[89,13],[177,13],[234,8]]},"612":{"position":[[13,13]]},"618":{"position":[[89,13],[177,13],[234,8]]},"624":{"position":[[89,13],[177,13],[234,8]]},"630":{"position":[[89,13],[177,13],[234,8]]},"636":{"position":[[89,13],[177,13],[234,8]]},"639":{"position":[[2400,13]]},"646":{"position":[[89,13],[177,13],[234,8]]},"653":{"position":[[89,13],[177,13],[234,8]]},"657":{"position":[[108,8],[161,8]]},"669":{"position":[[89,13],[177,13],[234,8]]},"673":{"position":[[108,8],[161,8]]},"684":{"position":[[89,13],[177,13],[234,8]]},"688":{"position":[[108,8],[161,8]]},"699":{"position":[[89,13],[177,13],[234,8]]},"705":{"position":[[89,13],[177,13],[234,8]]},"711":{"position":[[89,13],[177,13],[234,8]]},"719":{"position":[[89,14],[172,13],[229,8]]},"721":{"position":[[13,13]]},"727":{"position":[[89,13],[177,13],[234,8]]},"734":{"position":[[89,13],[177,13],[234,8]]},"740":{"position":[[89,13],[177,13],[234,8]]},"746":{"position":[[89,13],[177,13],[234,8]]},"750":{"position":[[563,13],[1384,8]]},"756":{"position":[[89,13],[177,13],[234,8]]},"757":{"position":[[1264,8],[1865,8]]},"766":{"position":[[563,13]]},"769":{"position":[[89,13],[177,13],[234,8]]},"770":{"position":[[1264,8],[1865,8]]},"781":{"position":[[86,13],[174,13],[231,8]]},"789":{"position":[[551,13],[1785,8]]},"796":{"position":[[89,13],[178,13],[235,8]]},"797":{"position":[[1264,8],[1865,8]]},"805":{"position":[[270,13]]},"807":{"position":[[551,13]]},"811":{"position":[[89,13],[177,13],[234,8]]},"812":{"position":[[1264,8],[1865,8]]},"820":{"position":[[270,13]]},"823":{"position":[[551,13]]},"827":{"position":[[89,13],[177,13],[234,8]]},"828":{"position":[[1264,8],[1865,8]]},"836":{"position":[[270,13]]},"841":{"position":[[89,13],[177,13],[234,8]]},"847":{"position":[[210,13]]},"850":{"position":[[89,13],[177,13],[234,8]]},"858":{"position":[[89,13],[177,13],[234,8]]},"860":{"position":[[13,13]]},"864":{"position":[[557,8]]},"866":{"position":[[89,13],[177,13],[234,8]]},"867":{"position":[[1972,8]]},"870":{"position":[[56,8],[131,8]]},"876":{"position":[[557,8]]},"878":{"position":[[89,13],[177,13],[234,8]]},"884":{"position":[[89,13],[177,13],[234,8]]},"890":{"position":[[89,13],[178,13],[235,8]]},"896":{"position":[[89,13],[177,13],[234,8]]},"906":{"position":[[89,13],[177,13],[234,8]]},"909":{"position":[[1101,13]]},"911":{"position":[[210,8]]},"915":{"position":[[1241,8]]},"917":{"position":[[932,8]]},"919":{"position":[[1457,8]]},"921":{"position":[[89,13],[177,13],[234,8]]},"925":{"position":[[1101,13]]},"927":{"position":[[210,8]]},"933":{"position":[[89,13],[177,13],[234,8]]},"936":{"position":[[1101,13]]},"938":{"position":[[210,8]]},"944":{"position":[[393,8]]},"949":{"position":[[89,13],[177,13],[234,8]]},"952":{"position":[[1101,13]]},"954":{"position":[[210,8]]},"958":{"position":[[89,13],[177,13],[234,8]]},"963":{"position":[[1395,8]]},"965":{"position":[[932,8]]},"967":{"position":[[89,13],[177,13],[234,8]]},"970":{"position":[[1101,13]]},"972":{"position":[[210,8]]},"981":{"position":[[89,13],[177,13],[234,8]]},"988":{"position":[[44,14]]},"989":{"position":[[621,13]]},"990":{"position":[[89,13],[177,13],[234,8]]},"996":{"position":[[89,13],[177,13],[234,8]]},"1003":{"position":[[44,14]]},"1004":{"position":[[704,13]]},"1005":{"position":[[86,13],[174,13],[231,8]]},"1008":{"position":[[1059,14],[1443,13]]},"1010":{"position":[[13,13]]},"1014":{"position":[[89,13],[177,13],[234,8]]},"1021":{"position":[[89,13],[177,13],[234,8]]},"1023":{"position":[[2756,13]]},"1027":{"position":[[89,13],[177,13],[234,8]]},"1033":{"position":[[93,13],[181,13],[238,8]]},"1044":{"position":[[89,13],[177,13],[234,8]]},"1047":{"position":[[499,13],[893,13]]},"1052":{"position":[[89,13],[177,13],[234,8]]},"1055":{"position":[[499,13],[893,13]]},"1060":{"position":[[89,13],[177,13],[234,8]]},"1063":{"position":[[499,13],[893,13]]},"1069":{"position":[[89,13],[177,13],[234,8]]},"1071":{"position":[[13,13]]},"1075":{"position":[[89,13],[177,13],[234,8]]},"1084":{"position":[[89,13],[177,13],[234,8]]},"1086":{"position":[[13,13]]},"1093":{"position":[[89,13],[177,13],[234,8]]},"1100":{"position":[[89,13],[177,13],[234,8]]},"1105":{"position":[[148,12]]},"1106":{"position":[[89,13],[178,13],[235,8]]},"1112":{"position":[[89,13],[177,13],[234,8]]},"1124":{"position":[[89,13],[177,13],[234,8]]},"1132":{"position":[[89,13],[178,13],[235,8]]},"1136":{"position":[[167,14]]},"1140":{"position":[[4037,8]]},"1146":{"position":[[476,8]]},"1149":{"position":[[296,14]]},"1155":{"position":[[634,13]]},"1173":{"position":[[488,8]]},"1176":{"position":[[644,8]]},"1183":{"position":[[720,13]]},"1185":{"position":[[444,8]]},"1188":{"position":[[180,8]]},"1194":{"position":[[654,8]]},"1200":{"position":[[528,13],[596,13]]},"1203":{"position":[[815,8]]},"1215":{"position":[[476,8]]},"1223":{"position":[[488,8]]},"1226":{"position":[[455,8]]},"1230":{"position":[[771,8]]},"1243":{"position":[[232,8]]},"1252":{"position":[[86,13],[174,13],[231,8]]},"1281":{"position":[[206,14]]},"1292":{"position":[[4018,8]]},"1295":{"position":[[206,14]]},"1306":{"position":[[4018,8]]},"1309":{"position":[[167,14]]},"1316":{"position":[[4037,8]]},"1319":{"position":[[206,14]]},"1329":{"position":[[4018,8]]},"1332":{"position":[[167,14]]},"1340":{"position":[[4037,8]]},"1343":{"position":[[167,14]]},"1351":{"position":[[4037,8]]},"1354":{"position":[[479,8]]},"1356":{"position":[[674,8]]},"1372":{"position":[[206,14]]},"1379":{"position":[[4569,8]]},"1382":{"position":[[698,8]]},"1396":{"position":[[206,14]]},"1403":{"position":[[4569,8]]},"1406":{"position":[[206,14]]},"1414":{"position":[[4569,8]]},"1418":{"position":[[184,8]]},"1426":{"position":[[311,14]]},"1431":{"position":[[4060,8]]},"1446":{"position":[[352,13]]},"1452":{"position":[[1607,13],[1850,13]]},"1453":{"position":[[979,8]]},"1471":{"position":[[692,8],[771,8]]},"1475":{"position":[[1444,8]]},"1479":{"position":[[170,8]]},"1480":{"position":[[55,13]]}},"keywords":{}}],["specifi",{"_index":448,"title":{"480":{"position":[[0,10]]},"1047":{"position":[[0,10]]},"1055":{"position":[[0,10]]},"1063":{"position":[[0,10]]}},"content":{"16":{"position":[[67,9]]},"68":{"position":[[1020,7],[1138,9]]},"69":{"position":[[502,9]]},"71":{"position":[[89,9]]},"75":{"position":[[423,7]]},"81":{"position":[[2226,7]]},"91":{"position":[[257,9]]},"94":{"position":[[17,9]]},"123":{"position":[[572,9]]},"206":{"position":[[481,7]]},"221":{"position":[[863,7],[896,10]]},"225":{"position":[[307,7],[340,10]]},"237":{"position":[[2246,9]]},"254":{"position":[[2277,9],[2543,7]]},"264":{"position":[[399,10]]},"268":{"position":[[1181,7]]},"269":{"position":[[752,7]]},"270":{"position":[[658,10],[1340,7]]},"274":{"position":[[964,10]]},"290":{"position":[[840,7]]},"296":{"position":[[1132,7]]},"309":{"position":[[3269,7]]},"314":{"position":[[1818,9],[2174,7]]},"351":{"position":[[245,7]]},"366":{"position":[[435,10]]},"370":{"position":[[136,7],[593,9]]},"373":{"position":[[562,7],[873,8]]},"379":{"position":[[953,9]]},"385":{"position":[[616,7],[716,7]]},"390":{"position":[[402,9]]},"395":{"position":[[571,9]]},"402":{"position":[[380,9]]},"419":{"position":[[666,7],[740,10],[860,7],[960,10],[1569,7],[1864,9]]},"440":{"position":[[682,7],[756,10],[876,7],[976,10]]},"441":{"position":[[178,7],[473,9]]},"454":{"position":[[97,9]]},"469":{"position":[[39,7]]},"479":{"position":[[515,9],[661,7]]},"480":{"position":[[960,10],[1225,10],[1396,9],[1601,9]]},"499":{"position":[[59,9],[356,7]]},"504":{"position":[[610,7],[672,10],[792,7],[876,10],[1198,7],[1493,9]]},"517":{"position":[[225,7],[460,9],[2279,10],[3537,7]]},"529":{"position":[[39,7]]},"534":{"position":[[390,9],[1060,7]]},"547":{"position":[[667,7],[741,10],[861,7],[961,10],[1571,7],[1866,9]]},"556":{"position":[[1471,9]]},"562":{"position":[[254,9]]},"574":{"position":[[376,7]]},"577":{"position":[[201,9]]},"588":{"position":[[196,9]]},"634":{"position":[[62,9],[348,7]]},"639":{"position":[[608,7],[670,10],[790,7],[874,10],[1196,7],[1491,9]]},"753":{"position":[[808,9]]},"754":{"position":[[471,7],[508,7]]},"757":{"position":[[299,9]]},"770":{"position":[[299,9]]},"782":{"position":[[123,7],[286,9]]},"793":{"position":[[779,9]]},"794":{"position":[[344,7],[550,7]]},"797":{"position":[[299,9]]},"805":{"position":[[288,7]]},"809":{"position":[[344,7],[550,7]]},"812":{"position":[[299,9]]},"820":{"position":[[288,7]]},"821":{"position":[[1136,9]]},"825":{"position":[[344,7],[550,7]]},"828":{"position":[[299,9]]},"836":{"position":[[288,7]]},"846":{"position":[[188,9]]},"865":{"position":[[39,7]]},"867":{"position":[[258,9],[1709,9]]},"877":{"position":[[39,7]]},"903":{"position":[[461,10]]},"907":{"position":[[376,9]]},"915":{"position":[[461,10]]},"923":{"position":[[376,9]]},"930":{"position":[[461,10]]},"934":{"position":[[376,9]]},"943":{"position":[[532,7]]},"947":{"position":[[652,9],[862,7]]},"950":{"position":[[376,9]]},"963":{"position":[[615,10]]},"968":{"position":[[376,9]]},"989":{"position":[[104,7]]},"1004":{"position":[[104,7]]},"1023":{"position":[[647,7],[721,10],[841,7],[941,10],[1552,7],[1847,9]]},"1034":{"position":[[456,9]]},"1036":{"position":[[565,10]]},"1040":{"position":[[137,9],[221,7]]},"1045":{"position":[[361,9]]},"1047":{"position":[[93,10]]},"1050":{"position":[[137,9],[221,7]]},"1053":{"position":[[361,9]]},"1055":{"position":[[93,10]]},"1058":{"position":[[137,9],[221,7]]},"1061":{"position":[[361,9]]},"1063":{"position":[[93,10]]},"1122":{"position":[[198,9]]},"1138":{"position":[[136,7],[482,9]]},"1151":{"position":[[294,9]]},"1230":{"position":[[1268,10]]},"1253":{"position":[[123,7],[359,9]]},"1267":{"position":[[117,10]]},"1277":{"position":[[921,7]]},"1285":{"position":[[211,10],[301,9]]},"1286":{"position":[[401,7],[607,7]]},"1289":{"position":[[1218,7]]},"1291":{"position":[[58,7]]},"1298":{"position":[[1050,7]]},"1300":{"position":[[211,10],[301,9]]},"1301":{"position":[[401,7],[607,7]]},"1303":{"position":[[929,7]]},"1305":{"position":[[58,7]]},"1310":{"position":[[538,7]]},"1313":{"position":[[202,10],[292,9]]},"1322":{"position":[[1437,7]]},"1324":{"position":[[211,10],[301,9]]},"1325":{"position":[[401,7],[607,7]]},"1328":{"position":[[58,7]]},"1335":{"position":[[1084,7]]},"1337":{"position":[[202,10],[292,9]]},"1346":{"position":[[1050,7]]},"1348":{"position":[[202,10],[292,9]]},"1356":{"position":[[586,7]]},"1376":{"position":[[211,10],[301,9]]},"1383":{"position":[[302,7]]},"1400":{"position":[[211,10],[301,9]]},"1411":{"position":[[211,10],[301,9]]},"1417":{"position":[[409,9]]},"1427":{"position":[[233,9]]}},"keywords":{}}],["specification(",{"_index":2789,"title":{},"content":{"264":{"position":[[34,17]]}},"keywords":{}}],["specification.learn",{"_index":928,"title":{},"content":{"61":{"position":[[1010,19]]}},"keywords":{}}],["specifictyp",{"_index":5705,"title":{},"content":{"1140":{"position":[[4082,12]]},"1316":{"position":[[4082,12]]},"1340":{"position":[[4082,12]]},"1351":{"position":[[4082,12]]},"1379":{"position":[[4620,12]]},"1403":{"position":[[4620,12]]},"1414":{"position":[[4620,12]]},"1431":{"position":[[4105,12]]}},"keywords":{}}],["specify?authsource=admin",{"_index":4679,"title":{},"content":{"780":{"position":[[285,24]]}},"keywords":{}}],["speed",{"_index":3588,"title":{},"content":{"417":{"position":[[204,6]]},"438":{"position":[[204,6]]},"502":{"position":[[664,6]]},"545":{"position":[[204,6]]},"1021":{"position":[[1230,6]]}},"keywords":{}}],["spin",{"_index":2491,"title":{},"content":{"234":{"position":[[163,4]]},"236":{"position":[[1713,4]]}},"keywords":{}}],["split",{"_index":93,"title":{"19":{"position":[[6,7]]}},"content":{"2":{"position":[[643,5]]},"19":{"position":[[107,5],[225,9],[329,5],[380,5],[521,5]]},"112":{"position":[[951,6]]},"154":{"position":[[407,5]]},"320":{"position":[[2285,9]]},"321":{"position":[[1976,5]]},"333":{"position":[[494,5]]},"379":{"position":[[158,9]]},"590":{"position":[[762,5]]},"1437":{"position":[[192,6],[1334,6],[1567,5]]}},"keywords":{}}],["sponsor",{"_index":3468,"title":{},"content":{"381":{"position":[[284,9]]}},"keywords":{}}],["spreadsheet",{"_index":2970,"title":{"616":{"position":[[0,11]]}},"content":{"295":{"position":[[1181,12]]},"296":{"position":[[7352,11]]},"615":{"position":[[20,12]]},"616":{"position":[[92,12]]},"617":{"position":[[20,12],[214,12],[367,11],[745,11]]},"619":{"position":[[504,11],[538,12]]},"1243":{"position":[[665,11],[776,11],[887,11],[991,11]]},"1244":{"position":[[97,12]]},"1245":{"position":[[166,12],[319,11],[690,11]]},"1247":{"position":[[671,11],[698,11],[1098,11]]}},"keywords":{}}],["spreadsheet_id",{"_index":4321,"title":{},"content":{"619":{"position":[[488,15]]},"620":{"position":[[184,15]]}},"keywords":{}}],["spreadsheeturl",{"_index":5912,"title":{},"content":{"1247":{"position":[[655,15]]},"1248":{"position":[[206,15]]}},"keywords":{}}],["sq",{"_index":3555,"title":{"404":{"position":[[7,3]]}},"content":{"405":{"position":[[41,3]]},"406":{"position":[[41,3],[86,3]]},"408":{"position":[[92,3],[155,3],[458,3],[603,3]]},"411":{"position":[[73,3]]}},"keywords":{}}],["sql",{"_index":172,"title":{"97":{"position":[[0,3]]},"251":{"position":[[28,3]]},"268":{"position":[[6,3]]},"806":{"position":[[13,3]]},"928":{"position":[[13,3]]},"1038":{"position":[[10,3]]},"1042":{"position":[[12,3]]},"1043":{"position":[[6,3]]},"1048":{"position":[[15,3]]},"1056":{"position":[[13,3],[21,3]]},"1294":{"position":[[13,3]]},"1297":{"position":[[37,4]]},"1342":{"position":[[13,3]]},"1345":{"position":[[37,4]]},"1371":{"position":[[15,3]]},"1373":{"position":[[21,3]]},"1395":{"position":[[13,3]]},"1397":{"position":[[19,3],[27,3]]},"1408":{"position":[[12,3]]},"1409":{"position":[[6,3]]}},"content":{"4":{"position":[[505,3]]},"42":{"position":[[221,3]]},"50":{"position":[[108,3]]},"69":{"position":[[662,3]]},"72":{"position":[[691,3]]},"75":{"position":[[155,3]]},"81":{"position":[[1626,3]]},"94":{"position":[[444,3],[478,3],[2390,3]]},"95":{"position":[[298,3]]},"96":{"position":[[46,3]]},"97":{"position":[[35,3],[173,4],[184,3],[382,3],[473,3]]},"99":{"position":[[6,3],[175,3],[645,3]]},"100":{"position":[[284,3],[334,3],[983,3]]},"122":{"position":[[215,3],[491,3],[787,3],[1006,3]]},"158":{"position":[[523,3]]},"179":{"position":[[553,4]]},"183":{"position":[[313,4],[751,3],[2795,3]]},"191":{"position":[[336,3]]},"236":{"position":[[1862,3]]},"240":{"position":[[335,3],[434,3]]},"242":{"position":[[406,3]]},"252":{"position":[[79,4]]},"254":{"position":[[2948,3],[3374,3]]},"256":{"position":[[61,3]]},"267":{"position":[[478,3],[498,3],[1671,3],[1733,3]]},"268":{"position":[[14,3],[224,3],[1450,3]]},"270":{"position":[[1544,3],[1620,3]]},"271":{"position":[[498,3]]},"277":{"position":[[50,3],[241,3],[1083,3],[1160,3]]},"278":{"position":[[605,3],[1605,3]]},"281":{"position":[[2223,3]]},"325":{"position":[[135,3],[747,3]]},"332":{"position":[[643,3]]},"363":{"position":[[479,3],[776,3],[1243,3],[1313,3],[1645,3]]},"762":{"position":[[76,3]]},"775":{"position":[[76,3]]},"802":{"position":[[76,3]]},"817":{"position":[[76,3]]},"833":{"position":[[76,3]]},"871":{"position":[[110,3]]},"931":{"position":[[881,3]]},"942":{"position":[[661,3]]},"1032":{"position":[[137,3]]},"1039":{"position":[[134,3],[200,3],[299,3],[315,3],[342,3],[365,3],[373,3]]},"1040":{"position":[[31,3],[829,3]]},"1041":{"position":[[82,3],[98,3],[125,3],[149,3],[157,3]]},"1043":{"position":[[620,3]]},"1044":{"position":[[250,3]]},"1047":{"position":[[56,3],[193,3]]},"1049":{"position":[[60,3],[126,3]]},"1050":{"position":[[31,3],[829,3],[997,3],[1013,3],[1040,3],[1063,3],[1071,3]]},"1051":{"position":[[876,3]]},"1052":{"position":[[250,3]]},"1055":{"position":[[56,3],[193,3]]},"1057":{"position":[[63,3],[129,3]]},"1058":{"position":[[31,3],[829,3]]},"1059":{"position":[[640,3]]},"1060":{"position":[[250,3]]},"1063":{"position":[[56,3],[193,3]]},"1120":{"position":[[239,3],[614,3],[1213,3],[1288,3],[1884,3]]},"1138":{"position":[[1385,3],[1400,3]]},"1140":{"position":[[4134,3]]},"1185":{"position":[[91,3]]},"1186":{"position":[[28,3],[146,3],[178,3],[370,3]]},"1188":{"position":[[98,3],[262,3]]},"1192":{"position":[[394,3]]},"1289":{"position":[[626,4],[1545,4]]},"1292":{"position":[[4053,3]]},"1306":{"position":[[4053,3]]},"1310":{"position":[[866,4]]},"1313":{"position":[[929,3],[944,3]]},"1316":{"position":[[4134,3]]},"1329":{"position":[[4053,3]]},"1337":{"position":[[929,3],[944,3]]},"1340":{"position":[[4134,3]]},"1348":{"position":[[929,3],[944,3]]},"1351":{"position":[[4134,3]]},"1373":{"position":[[858,3]]},"1374":{"position":[[858,3]]},"1379":{"position":[[4682,3]]},"1383":{"position":[[83,3]]},"1384":{"position":[[618,3]]},"1394":{"position":[[391,3]]},"1397":{"position":[[637,3]]},"1398":{"position":[[636,3]]},"1403":{"position":[[4682,3]]},"1407":{"position":[[82,3],[98,3],[125,3],[148,3],[156,3]]},"1409":{"position":[[620,3]]},"1414":{"position":[[4682,3]]},"1423":{"position":[[401,3]]},"1427":{"position":[[656,3],[671,3]]},"1429":{"position":[[297,3]]},"1431":{"position":[[4157,3]]}},"keywords":{}}],["sql/1.0/warehouses/abcd123efgh4567",{"_index":5814,"title":{},"content":{"1189":{"position":[[150,35]]}},"keywords":{}}],["sql_after_gti",{"_index":6130,"title":{},"content":{"1292":{"position":[[4225,13]]},"1306":{"position":[[4225,13]]},"1329":{"position":[[4225,13]]}},"keywords":{}}],["sql_after_mt",{"_index":6134,"title":{},"content":{"1292":{"position":[[4293,13]]},"1306":{"position":[[4293,13]]},"1329":{"position":[[4293,13]]}},"keywords":{}}],["sql_before_gt",{"_index":6137,"title":{},"content":{"1292":{"position":[[4340,13]]},"1306":{"position":[[4340,13]]},"1329":{"position":[[4340,13]]}},"keywords":{}}],["sql_big_resul",{"_index":6140,"title":{},"content":{"1292":{"position":[[4392,13]]},"1306":{"position":[[4392,13]]},"1329":{"position":[[4392,13]]}},"keywords":{}}],["sql_buffer_r",{"_index":6143,"title":{},"content":{"1292":{"position":[[4456,13]]},"1306":{"position":[[4456,13]]},"1329":{"position":[[4456,13]]}},"keywords":{}}],["sql_cach",{"_index":6146,"title":{},"content":{"1292":{"position":[[4513,9]]},"1306":{"position":[[4513,9]]},"1329":{"position":[[4513,9]]}},"keywords":{}}],["sql_calc_foun",{"_index":6149,"title":{},"content":{"1292":{"position":[[4560,13]]},"1306":{"position":[[4560,13]]},"1329":{"position":[[4560,13]]}},"keywords":{}}],["sql_no_cach",{"_index":6153,"title":{},"content":{"1292":{"position":[[4611,12]]},"1306":{"position":[[4611,12]]},"1329":{"position":[[4611,12]]}},"keywords":{}}],["sql_small_r",{"_index":6158,"title":{},"content":{"1292":{"position":[[4668,13]]},"1306":{"position":[[4668,13]]},"1329":{"position":[[4668,13]]}},"keywords":{}}],["sql_thread",{"_index":6161,"title":{},"content":{"1292":{"position":[[4729,10]]},"1306":{"position":[[4729,10]]},"1329":{"position":[[4729,10]]}},"keywords":{}}],["sql_tsi_day",{"_index":6163,"title":{},"content":{"1292":{"position":[[4775,11]]},"1306":{"position":[[4775,11]]},"1329":{"position":[[4775,11]]}},"keywords":{}}],["sql_tsi_hour",{"_index":6165,"title":{},"content":{"1292":{"position":[[4821,12]]},"1306":{"position":[[4821,12]]},"1329":{"position":[[4821,12]]}},"keywords":{}}],["sql_tsi_minut",{"_index":6166,"title":{},"content":{"1292":{"position":[[4864,13]]},"1306":{"position":[[4864,13]]},"1329":{"position":[[4864,13]]}},"keywords":{}}],["sql_tsi_month",{"_index":6170,"title":{},"content":{"1292":{"position":[[4913,13]]},"1306":{"position":[[4913,13]]},"1329":{"position":[[4913,13]]}},"keywords":{}}],["sql_tsi_quart",{"_index":6172,"title":{},"content":{"1292":{"position":[[4964,13]]},"1306":{"position":[[4964,13]]},"1329":{"position":[[4964,13]]}},"keywords":{}}],["sql_tsi_secon",{"_index":6174,"title":{},"content":{"1292":{"position":[[5008,13]]},"1306":{"position":[[5008,13]]},"1329":{"position":[[5008,13]]}},"keywords":{}}],["sql_tsi_week",{"_index":6176,"title":{},"content":{"1292":{"position":[[5055,12]]},"1306":{"position":[[5055,12]]},"1329":{"position":[[5055,12]]}},"keywords":{}}],["sql_tsi_year",{"_index":6177,"title":{},"content":{"1292":{"position":[[5095,12]]},"1306":{"position":[[5095,12]]},"1329":{"position":[[5095,12]]}},"keywords":{}}],["sqlazur",{"_index":4700,"title":{},"content":{"788":{"position":[[207,8]]},"790":{"position":[[123,8]]},"914":{"position":[[241,8]]},"916":{"position":[[128,8]]},"1282":{"position":[[93,8]]},"1310":{"position":[[93,8]]}},"keywords":{}}],["sqlca",{"_index":6351,"title":{},"content":{"1379":{"position":[[4733,5]]},"1403":{"position":[[4733,5]]},"1414":{"position":[[4733,5]]}},"keywords":{}}],["sqlcode",{"_index":5710,"title":{},"content":{"1140":{"position":[[4173,7]]},"1316":{"position":[[4173,7]]},"1340":{"position":[[4173,7]]},"1351":{"position":[[4173,7]]},"1379":{"position":[[4788,7]]},"1403":{"position":[[4788,7]]},"1414":{"position":[[4788,7]]},"1431":{"position":[[4196,7]]}},"keywords":{}}],["sqlerror",{"_index":5713,"title":{},"content":{"1140":{"position":[[4217,8]]},"1316":{"position":[[4217,8]]},"1340":{"position":[[4217,8]]},"1351":{"position":[[4217,8]]},"1379":{"position":[[4838,8]]},"1403":{"position":[[4838,8]]},"1414":{"position":[[4838,8]]},"1431":{"position":[[4240,8]]}},"keywords":{}}],["sqlexcept",{"_index":5523,"title":{},"content":{"1140":{"position":[[418,12]]},"1292":{"position":[[4093,12]]},"1306":{"position":[[4093,12]]},"1316":{"position":[[418,12]]},"1329":{"position":[[4093,12]]},"1340":{"position":[[418,12]]},"1351":{"position":[[418,12]]},"1379":{"position":[[4891,12]]},"1403":{"position":[[4891,12]]},"1414":{"position":[[4891,12]]},"1431":{"position":[[441,12]]}},"keywords":{}}],["sqlite",{"_index":1336,"title":{"96":{"position":[[0,7]]},"1364":{"position":[[0,6]]}},"content":{"94":{"position":[[348,9],[391,6],[434,7],[2350,6]]},"95":{"position":[[308,7]]},"96":{"position":[[8,6],[123,7],[690,6],[757,6],[806,7],[834,6]]},"97":{"position":[[757,6]]},"98":{"position":[[622,6]]},"100":{"position":[[5,6],[51,6],[366,7],[1288,6],[1313,6]]},"101":{"position":[[209,6],[246,6]]},"107":{"position":[[3936,7]]},"112":{"position":[[304,6],[335,6]]},"113":{"position":[[687,6]]},"114":{"position":[[118,6]]},"183":{"position":[[1288,7],[3802,7]]},"254":{"position":[[567,7],[2624,7]]},"268":{"position":[[470,6],[920,7]]},"277":{"position":[[30,6],[642,7],[819,7],[905,6]]},"278":{"position":[[30,6],[394,6],[461,6],[722,7],[967,7],[1548,6]]},"279":{"position":[[1230,7]]},"280":{"position":[[36,6],[1480,7]]},"281":{"position":[[2880,6]]},"1120":{"position":[[1815,6]]},"1370":{"position":[[1,6],[211,6]]},"1461":{"position":[[2950,7],[3639,7],[4166,6]]}},"keywords":{}}],["sqlite'",{"_index":1419,"title":{},"content":{"98":{"position":[[1000,8]]},"278":{"position":[[1425,8]]}},"keywords":{}}],["sqlite:dev",{"_index":5430,"title":{},"content":{"1120":{"position":[[1873,10]]},"1368":{"position":[[98,10]]}},"keywords":{}}],["sqlserver",{"_index":3289,"title":{"1374":{"position":[[14,10]]},"1395":{"position":[[21,9]]},"1398":{"position":[[14,10]]},"1405":{"position":[[10,9]]}},"content":{"363":{"position":[[547,9]]},"1043":{"position":[[672,9]]},"1051":{"position":[[928,9]]},"1059":{"position":[[692,9]]},"1372":{"position":[[40,9],[106,9]]},"1373":{"position":[[910,9]]},"1374":{"position":[[910,9]]},"1375":{"position":[[113,9]]},"1379":{"position":[[1,9],[152,9]]},"1396":{"position":[[40,9],[106,9]]},"1397":{"position":[[689,9]]},"1398":{"position":[[688,9]]},"1399":{"position":[[113,9]]},"1403":{"position":[[1,9],[152,9]]},"1406":{"position":[[40,9],[106,9]]},"1409":{"position":[[672,9]]},"1410":{"position":[[113,9]]},"1414":{"position":[[1,9],[152,9]]}},"keywords":{}}],["sqlserver:dev",{"_index":3293,"title":{},"content":{"363":{"position":[[839,13],[1702,13]]},"1120":{"position":[[312,13],[1292,13],[1946,13]]},"1377":{"position":[[98,13]]},"1401":{"position":[[98,13]]},"1412":{"position":[[98,13]]}},"keywords":{}}],["sqlserver:dev"",{"_index":5255,"title":{},"content":{"1046":{"position":[[95,19]]},"1054":{"position":[[95,19]]},"1062":{"position":[[95,19]]}},"keywords":{}}],["sqlserver:md",{"_index":3300,"title":{},"content":{"363":{"position":[[1317,12]]}},"keywords":{}}],["sqlstate",{"_index":5525,"title":{},"content":{"1140":{"position":[[465,8]]},"1292":{"position":[[4134,8]]},"1306":{"position":[[4134,8]]},"1316":{"position":[[465,8]]},"1329":{"position":[[4134,8]]},"1340":{"position":[[465,8]]},"1351":{"position":[[465,8]]},"1379":{"position":[[4946,8]]},"1403":{"position":[[4946,8]]},"1414":{"position":[[4946,8]]},"1431":{"position":[[488,8]]}},"keywords":{}}],["sqlwarn",{"_index":5527,"title":{},"content":{"1140":{"position":[[502,10]]},"1292":{"position":[[4174,10]]},"1306":{"position":[[4174,10]]},"1316":{"position":[[502,10]]},"1329":{"position":[[4174,10]]},"1340":{"position":[[502,10]]},"1351":{"position":[[502,10]]},"1379":{"position":[[4996,10]]},"1403":{"position":[[4996,10]]},"1414":{"position":[[4996,10]]},"1431":{"position":[[525,10]]}},"keywords":{}}],["sqrt",{"_index":5530,"title":{},"content":{"1140":{"position":[[539,4]]},"1316":{"position":[[539,4]]},"1340":{"position":[[539,4]]},"1351":{"position":[[539,4]]},"1431":{"position":[[562,4]]}},"keywords":{}}],["sqs:deletemessag",{"_index":3562,"title":{},"content":{"406":{"position":[[423,17]]}},"keywords":{}}],["sqs:receivemessag",{"_index":3560,"title":{},"content":{"406":{"position":[[304,18],[400,18]]}},"keywords":{}}],["srid",{"_index":6180,"title":{},"content":{"1292":{"position":[[5142,4]]},"1306":{"position":[[5142,4]]},"1329":{"position":[[5142,4]]}},"keywords":{}}],["ssh",{"_index":1220,"title":{"220":{"position":[[27,3]]},"784":{"position":[[0,3]]},"1255":{"position":[[0,3]]},"1272":{"position":[[0,3]]},"1298":{"position":[[13,3]]},"1322":{"position":[[13,3]]},"1335":{"position":[[13,3]]},"1346":{"position":[[13,3]]}},"content":{"83":{"position":[[512,3],[524,3],[659,3],[887,3],[942,4],[1146,3],[1299,3]]},"221":{"position":[[13,3],[264,3],[402,3],[447,3],[539,3],[560,3],[770,3],[968,4],[1063,3],[1228,3],[1357,3],[1488,3],[1614,3],[1709,3]]},"222":{"position":[[10,3],[175,3],[213,4],[308,3],[473,3],[602,3],[667,3],[767,3]]},"223":{"position":[[10,3],[141,3],[179,4],[274,3],[439,3],[568,3],[745,3]]},"224":{"position":[[10,3],[194,3],[232,4],[327,3],[492,3],[621,3],[881,3]]},"225":{"position":[[86,3],[125,3],[214,3],[450,3],[489,3]]},"366":{"position":[[1140,3]]},"367":{"position":[[853,3]]},"370":{"position":[[16,3],[172,3],[1564,3],[1656,3],[1718,3],[1754,3],[1909,3],[1962,3]]},"750":{"position":[[1360,3],[1447,3]]},"753":{"position":[[325,3],[383,3],[557,3]]},"767":{"position":[[471,3],[529,3],[703,3]]},"784":{"position":[[105,3],[166,3],[349,3]]},"789":{"position":[[1761,3],[1848,3]]},"792":{"position":[[332,3],[759,3],[807,3],[981,3]]},"793":{"position":[[146,3],[294,3],[342,3],[516,3]]},"808":{"position":[[146,3],[310,3],[358,3],[532,3]]},"824":{"position":[[146,3],[551,3],[599,3],[773,3]]},"866":{"position":[[310,3],[359,3],[533,3]]},"878":{"position":[[320,3],[369,3],[543,3]]},"904":{"position":[[146,3],[550,3],[598,3],[772,3]]},"915":{"position":[[1217,3],[1304,3]]},"918":{"position":[[332,3],[759,3],[807,3],[981,3]]},"919":{"position":[[146,3],[294,3],[342,3],[516,3]]},"931":{"position":[[146,3],[314,3],[362,3],[536,3]]},"963":{"position":[[1371,3],[1458,3]]},"1021":{"position":[[601,3],[609,3]]},"1042":{"position":[[1185,3],[1322,3]]},"1043":{"position":[[146,3],[294,3],[342,3],[516,3]]},"1051":{"position":[[146,3],[550,3],[598,3],[772,3]]},"1059":{"position":[[146,3],[314,3],[362,3],[536,3]]},"1136":{"position":[[293,3],[407,3]]},"1138":{"position":[[16,3],[172,3],[415,3],[855,3],[947,3],[1009,3],[1045,3],[1199,3],[1252,3]]},"1149":{"position":[[96,3]]},"1154":{"position":[[191,3],[489,3],[540,3],[717,3]]},"1198":{"position":[[194,3],[255,3],[438,3]]},"1255":{"position":[[105,3],[166,3],[349,3]]},"1272":{"position":[[36,3],[79,3],[126,3],[255,3]]},"1282":{"position":[[455,3]]},"1283":{"position":[[157,3],[310,3],[367,3]]},"1288":{"position":[[167,3]]},"1289":{"position":[[157,3],[761,3],[823,3],[872,3],[1057,3]]},"1298":{"position":[[10,3],[141,3],[179,4],[274,3],[439,3],[568,3],[745,3]]},"1303":{"position":[[146,3],[314,3],[362,3],[536,3],[768,3]]},"1310":{"position":[[470,3]]},"1311":{"position":[[147,3],[204,3]]},"1320":{"position":[[157,3]]},"1322":{"position":[[10,3],[175,3],[213,4],[308,3],[473,3],[602,3],[667,3],[767,3],[1042,3],[1091,3],[1276,3]]},"1333":{"position":[[157,3]]},"1334":{"position":[[263,3]]},"1335":{"position":[[10,3],[175,3],[213,4],[308,3],[473,3],[602,3],[667,3],[767,3]]},"1344":{"position":[[157,3]]},"1346":{"position":[[10,3],[141,3],[179,4],[274,3],[439,3],[568,3],[745,3]]},"1373":{"position":[[146,3],[532,3],[580,3],[754,3]]},"1374":{"position":[[146,3],[532,3],[580,3],[754,3]]},"1397":{"position":[[146,3],[311,3],[359,3],[533,3]]},"1398":{"position":[[146,3],[310,3],[358,3],[532,3]]},"1408":{"position":[[458,3],[595,3]]},"1409":{"position":[[146,3],[294,3],[342,3],[516,3]]}},"keywords":{}}],["ssh://ec2",{"_index":4882,"title":{},"content":{"868":{"position":[[412,9]]},"880":{"position":[[413,9]]}},"keywords":{}}],["ssh://sshuser@<vm",{"_index":5517,"title":{},"content":{"1139":{"position":[[230,20]]}},"keywords":{}}],["ssh://sshuser@198.21.98.1:22",{"_index":1229,"title":{},"content":{"83":{"position":[[1238,28]]}},"keywords":{}}],["ssh://sshuser@ec2",{"_index":2442,"title":{},"content":{"221":{"position":[[654,17]]}},"keywords":{}}],["ssh://sshuser@vm",{"_index":3429,"title":{},"content":{"371":{"position":[[351,16]]}},"keywords":{}}],["ssh://user@address",{"_index":3421,"title":{},"content":{"370":{"position":[[1842,20]]},"1138":{"position":[[1133,19]]}},"keywords":{}}],["ssh://user@hostname[:port",{"_index":1227,"title":{},"content":{"83":{"position":[[1197,27]]},"221":{"position":[[585,27]]},"225":{"position":[[183,26]]}},"keywords":{}}],["ssh://user@hostname[:port]).ssh",{"_index":5937,"title":{},"content":{"1272":{"position":[[175,31]]}},"keywords":{}}],["sshendpoint",{"_index":1228,"title":{},"content":{"83":{"position":[[1225,12]]},"225":{"position":[[101,12]]},"371":{"position":[[338,12]]},"868":{"position":[[399,12]]},"880":{"position":[[400,12]]},"1139":{"position":[[217,12]]}},"keywords":{}}],["sshforward",{"_index":1226,"title":{},"content":{"83":{"position":[[1106,14]]},"371":{"position":[[323,14]]},"868":{"position":[[335,14]]},"880":{"position":[[336,14]]},"1139":{"position":[[202,14]]}},"keywords":{}}],["sshkey",{"_index":5203,"title":{},"content":{"1021":{"position":[[561,6],[593,7],[661,6]]}},"keywords":{}}],["sshuser",{"_index":2440,"title":{},"content":{"221":{"position":[[472,8]]}},"keywords":{}}],["ssl",{"_index":3663,"title":{"1268":{"position":[[10,3]]}},"content":{"429":{"position":[[1171,3]]},"907":{"position":[[1302,3],[1321,3],[1647,3],[1739,3],[1928,3]]},"923":{"position":[[1302,3],[1321,3],[1647,3],[1739,3],[1928,3]]},"934":{"position":[[1302,3],[1321,3]]},"950":{"position":[[1302,3],[1321,3]]},"968":{"position":[[1302,3],[1321,3],[1647,3],[1739,3],[1928,3]]},"1154":{"position":[[442,3]]},"1268":{"position":[[17,3],[129,3],[229,3],[300,3],[383,3],[457,3],[514,3],[583,3],[695,3]]},"1285":{"position":[[875,3],[894,3],[985,3],[1072,3],[1114,3],[1200,3],[1242,3],[1312,3]]},"1286":{"position":[[1621,3],[1741,3],[1808,3],[1895,3],[1965,3],[2159,3],[2224,3],[2353,3],[2398,3]]},"1292":{"position":[[5181,3]]},"1300":{"position":[[875,3],[894,3],[985,3],[1072,3],[1114,3],[1200,3],[1242,3],[1312,3]]},"1301":{"position":[[1457,3],[1577,3],[1644,3],[1731,3],[1801,3],[1995,3],[2060,3],[2189,3],[2234,3]]},"1306":{"position":[[5181,3]]},"1313":{"position":[[729,3],[748,3],[1397,3],[1489,3],[1678,3]]},"1324":{"position":[[875,3],[894,3],[985,3],[1072,3],[1114,3],[1200,3],[1242,3],[1312,3]]},"1325":{"position":[[1621,3],[1741,3],[1808,3],[1895,3],[1965,3],[2159,3],[2224,3],[2353,3],[2398,3]]},"1329":{"position":[[5181,3]]},"1337":{"position":[[729,3],[748,3],[1397,3],[1489,3],[1678,3]]},"1348":{"position":[[729,3],[748,3]]}},"keywords":{}}],["sslmode",{"_index":5002,"title":{},"content":{"907":{"position":[[1360,9]]},"923":{"position":[[1360,9]]},"934":{"position":[[1360,9]]},"950":{"position":[[1360,9]]},"968":{"position":[[1360,9]]},"1285":{"position":[[933,9]]},"1300":{"position":[[933,9]]},"1313":{"position":[[787,9]]},"1324":{"position":[[933,9]]},"1337":{"position":[[787,9]]},"1348":{"position":[[787,9]]}},"keywords":{}}],["stabl",{"_index":963,"title":{},"content":{"64":{"position":[[478,7]]},"105":{"position":[[554,6]]},"109":{"position":[[572,6]]},"1439":{"position":[[81,6]]}},"keywords":{}}],["staburst",{"_index":6409,"title":{},"content":{"1417":{"position":[[81,8]]}},"keywords":{}}],["stack",{"_index":3173,"title":{},"content":{"325":{"position":[[503,6]]},"1292":{"position":[[5224,7]]},"1306":{"position":[[5224,7]]},"1329":{"position":[[5224,7]]}},"keywords":{}}],["stage",{"_index":1078,"title":{},"content":{"74":{"position":[[284,6]]},"1031":{"position":[[242,7],[555,7]]},"1032":{"position":[[1390,7]]},"1034":{"position":[[850,7]]},"1149":{"position":[[413,7]]},"1151":{"position":[[809,7],[940,7],[983,7],[1031,7],[1099,7]]},"1154":{"position":[[224,7]]},"1258":{"position":[[94,7]]},"1260":{"position":[[437,7],[485,7],[608,7],[739,7]]},"1434":{"position":[[1343,5]]},"1439":{"position":[[99,5],[1439,6],[1609,6]]},"1442":{"position":[[866,5],[1581,6]]},"1461":{"position":[[2684,8]]}},"keywords":{}}],["stagesjobsjob",{"_index":4329,"title":{},"content":{"622":{"position":[[238,13]]}},"keywords":{}}],["stagesoffersofficesprospect",{"_index":4331,"title":{},"content":{"622":{"position":[[265,27]]}},"keywords":{}}],["stale",{"_index":1946,"title":{},"content":{"164":{"position":[[1289,5]]}},"keywords":{}}],["standard",{"_index":205,"title":{"1391":{"position":[[27,8]]}},"content":{"6":{"position":[[183,8]]},"41":{"position":[[359,8]]},"125":{"position":[[28,8],[173,8],[606,8],[1329,8],[1451,8]]},"156":{"position":[[34,8]]},"159":{"position":[[17,8]]},"162":{"position":[[710,8],[1652,8]]},"191":{"position":[[1546,8]]},"221":{"position":[[236,10]]},"240":{"position":[[1507,8]]},"379":{"position":[[823,8],[1026,8],[1104,8]]},"406":{"position":[[142,8]]},"515":{"position":[[216,8],[854,8]]},"577":{"position":[[370,8]]},"588":{"position":[[365,8]]},"602":{"position":[[826,8]]},"698":{"position":[[92,8]]},"846":{"position":[[110,9]]},"847":{"position":[[57,8]]},"909":{"position":[[776,8]]},"925":{"position":[[776,8]]},"936":{"position":[[776,8]]},"952":{"position":[[776,8]]},"970":{"position":[[776,8]]},"985":{"position":[[53,8]]},"989":{"position":[[219,8],[320,8]]},"1000":{"position":[[53,8],[398,8]]},"1004":{"position":[[302,8],[403,8]]},"1020":{"position":[[5,8]]},"1032":{"position":[[1148,8]]},"1158":{"position":[[30,8],[88,8]]},"1179":{"position":[[1290,8]]},"1182":{"position":[[30,8],[88,8]]},"1188":{"position":[[910,8]]},"1191":{"position":[[30,8],[88,8]]},"1196":{"position":[[1050,8]]},"1199":{"position":[[30,8]]},"1208":{"position":[[335,8]]},"1256":{"position":[[30,8],[88,8]]},"1262":{"position":[[30,8],[88,8]]},"1282":{"position":[[137,8]]},"1288":{"position":[[16,8]]},"1290":{"position":[[30,8],[88,8]]},"1304":{"position":[[30,8],[88,8]]},"1310":{"position":[[142,8]]},"1315":{"position":[[30,8],[89,8]]},"1327":{"position":[[30,8],[88,8]]},"1339":{"position":[[30,8],[88,8]]},"1350":{"position":[[30,8],[88,8]]},"1358":{"position":[[238,8]]},"1378":{"position":[[30,8],[88,8]]},"1383":{"position":[[1494,8]]},"1386":{"position":[[1304,8]]},"1389":{"position":[[30,8],[88,8]]},"1391":{"position":[[12,8]]},"1402":{"position":[[30,8],[88,8]]},"1413":{"position":[[30,8],[88,8]]},"1430":{"position":[[30,8],[88,8]]}},"keywords":{}}],["stanza",{"_index":9,"title":{},"content":{"1":{"position":[[111,7]]},"63":{"position":[[874,6]]},"76":{"position":[[267,6]]},"83":{"position":[[816,6]]},"89":{"position":[[27,6]]},"94":{"position":[[76,7],[217,6]]},"183":{"position":[[1731,7],[2323,7]]},"230":{"position":[[837,6]]},"270":{"position":[[1519,7]]},"285":{"position":[[297,6]]},"784":{"position":[[328,6]]},"1154":{"position":[[696,6]]},"1198":{"position":[[417,6]]},"1255":{"position":[[328,6]]},"1289":{"position":[[1036,6]]},"1303":{"position":[[747,6]]},"1322":{"position":[[1255,6]]}},"keywords":{}}],["starburst",{"_index":6407,"title":{"1416":{"position":[[0,9]]}},"content":{"1417":{"position":[[40,9]]},"1419":{"position":[[113,9],[202,9]]},"1423":{"position":[[1,9],[264,9]]}},"keywords":{}}],["starburst:dev",{"_index":6413,"title":{},"content":{"1421":{"position":[[327,13]]}},"keywords":{}}],["stargaz",{"_index":4028,"title":{},"content":{"529":{"position":[[683,10]]}},"keywords":{}}],["start",{"_index":330,"title":{"168":{"position":[[4,7]]},"169":{"position":[[4,7]]},"267":{"position":[[4,7]]},"1077":{"position":[[14,5]]}},"content":{"11":{"position":[[1251,5]]},"13":{"position":[[1230,6]]},"20":{"position":[[387,7]]},"32":{"position":[[97,5]]},"56":{"position":[[2392,5],[2583,7]]},"58":{"position":[[854,5]]},"61":{"position":[[452,8]]},"68":{"position":[[1043,5]]},"109":{"position":[[367,7],[420,7]]},"162":{"position":[[200,5]]},"165":{"position":[[267,8]]},"168":{"position":[[4,5]]},"174":{"position":[[258,5]]},"176":{"position":[[1,5],[213,5]]},"183":{"position":[[3166,6]]},"189":{"position":[[162,8],[1815,5]]},"199":{"position":[[198,8]]},"204":{"position":[[7,5]]},"207":{"position":[[447,5]]},"221":{"position":[[1086,6],[1279,6]]},"222":{"position":[[331,6],[524,6]]},"223":{"position":[[297,6],[490,6],[800,5]]},"224":{"position":[[350,6],[543,6]]},"230":{"position":[[974,5]]},"232":{"position":[[872,8]]},"237":{"position":[[2788,5],[2879,5]]},"238":{"position":[[388,8]]},"239":{"position":[[256,6],[888,5]]},"240":{"position":[[2566,5]]},"267":{"position":[[554,5]]},"268":{"position":[[1509,5]]},"269":{"position":[[1088,5]]},"280":{"position":[[161,8]]},"281":{"position":[[409,6]]},"307":{"position":[[3099,5]]},"308":{"position":[[1227,5]]},"349":{"position":[[445,5]]},"351":{"position":[[193,5]]},"373":{"position":[[261,8],[330,5],[529,8],[547,5],[714,8]]},"377":{"position":[[1422,5],[1444,8],[1514,8]]},"387":{"position":[[1170,5],[1196,5]]},"397":{"position":[[523,8]]},"424":{"position":[[197,5]]},"448":{"position":[[833,5]]},"454":{"position":[[387,5]]},"460":{"position":[[201,5]]},"466":{"position":[[131,5]]},"488":{"position":[[28,5]]},"496":{"position":[[416,5]]},"509":{"position":[[360,5]]},"517":{"position":[[1567,5],[1975,5],[2391,8],[2428,5],[3759,5]]},"526":{"position":[[57,5]]},"534":{"position":[[1393,5],[1588,5]]},"556":{"position":[[2063,5]]},"573":{"position":[[713,5]]},"584":{"position":[[705,5],[720,5]]},"611":{"position":[[913,5],[1053,5]]},"631":{"position":[[201,5]]},"654":{"position":[[441,5]]},"659":{"position":[[185,5]]},"670":{"position":[[497,5]]},"676":{"position":[[28,5]]},"685":{"position":[[321,5]]},"691":{"position":[[28,5]]},"700":{"position":[[149,5]]},"706":{"position":[[149,5]]},"720":{"position":[[672,5]]},"741":{"position":[[264,5]]},"747":{"position":[[678,5]]},"764":{"position":[[702,8]]},"777":{"position":[[702,8]]},"804":{"position":[[700,8]]},"819":{"position":[[700,8]]},"835":{"position":[[700,8]]},"842":{"position":[[1728,5],[1774,5]]},"851":{"position":[[213,5]]},"859":{"position":[[492,5],[640,5]]},"885":{"position":[[450,5]]},"891":{"position":[[153,5]]},"897":{"position":[[72,5]]},"912":{"position":[[1267,5]]},"940":{"position":[[25,6]]},"945":{"position":[[617,5]]},"959":{"position":[[156,5]]},"982":{"position":[[158,5]]},"1009":{"position":[[836,5],[847,5]]},"1015":{"position":[[263,5]]},"1028":{"position":[[72,5]]},"1070":{"position":[[648,5]]},"1076":{"position":[[106,7],[256,6],[610,5]]},"1077":{"position":[[74,5],[466,5],[495,5],[610,8],[806,8]]},"1085":{"position":[[1150,5],[1173,5],[1188,5]]},"1092":{"position":[[484,5],[507,5]]},"1094":{"position":[[309,5]]},"1107":{"position":[[72,5]]},"1113":{"position":[[201,5]]},"1133":{"position":[[770,5]]},"1140":{"position":[[568,5]]},"1146":{"position":[[659,8]]},"1147":{"position":[[220,8]]},"1173":{"position":[[671,8]]},"1174":{"position":[[220,8]]},"1176":{"position":[[544,5]]},"1185":{"position":[[344,5]]},"1194":{"position":[[554,5]]},"1196":{"position":[[106,5]]},"1203":{"position":[[102,7],[715,5]]},"1215":{"position":[[659,8]]},"1216":{"position":[[220,8]]},"1223":{"position":[[671,8]]},"1224":{"position":[[220,8]]},"1226":{"position":[[355,5]]},"1243":{"position":[[132,5]]},"1265":{"position":[[48,5]]},"1292":{"position":[[5264,5],[5301,8],[5344,6]]},"1298":{"position":[[297,6],[490,6],[800,5]]},"1306":{"position":[[5264,5],[5301,8],[5344,6]]},"1316":{"position":[[568,5]]},"1322":{"position":[[331,6],[524,6]]},"1329":{"position":[[5264,5],[5301,8],[5344,6]]},"1335":{"position":[[331,6],[524,6]]},"1340":{"position":[[568,5]]},"1346":{"position":[[297,6],[490,6],[800,5]]},"1351":{"position":[[568,5]]},"1354":{"position":[[379,5]]},"1379":{"position":[[5059,5]]},"1382":{"position":[[598,5]]},"1394":{"position":[[710,5]]},"1403":{"position":[[5059,5]]},"1414":{"position":[[5059,5]]},"1417":{"position":[[97,5]]},"1431":{"position":[[591,5]]},"1440":{"position":[[1018,6]]},"1442":{"position":[[1755,7]]},"1447":{"position":[[574,6]]},"1452":{"position":[[743,5],[2832,5],[3013,5],[3610,5],[3916,5]]},"1456":{"position":[[183,8]]},"1461":{"position":[[979,5]]},"1471":{"position":[[757,8],[948,5]]},"1475":{"position":[[369,5],[502,8]]}},"keywords":{}}],["start_dat",{"_index":3262,"title":{},"content":{"351":{"position":[[181,11]]},"377":{"position":[[1410,11]]},"378":{"position":[[188,11]]},"387":{"position":[[1158,11]]},"388":{"position":[[396,11]]},"424":{"position":[[173,11]]},"425":{"position":[[163,11]]},"454":{"position":[[375,11]]},"455":{"position":[[210,11]]},"460":{"position":[[189,11]]},"461":{"position":[[165,11]]},"466":{"position":[[119,11]]},"467":{"position":[[129,11]]},"496":{"position":[[404,11]]},"497":{"position":[[153,11]]},"509":{"position":[[348,11]]},"517":{"position":[[1963,11],[2409,11],[2728,10],[3747,11]]},"518":{"position":[[247,11],[420,11]]},"527":{"position":[[296,11]]},"529":{"position":[[802,11]]},"534":{"position":[[1381,11]]},"535":{"position":[[310,11]]},"556":{"position":[[2051,11]]},"557":{"position":[[432,11]]},"573":{"position":[[701,11],[1148,11]]},"575":{"position":[[196,11]]},"611":{"position":[[1041,11]]},"612":{"position":[[324,11]]},"631":{"position":[[189,11]]},"632":{"position":[[141,11]]},"654":{"position":[[429,11]]},"670":{"position":[[473,11]]},"671":{"position":[[205,11]]},"685":{"position":[[309,11]]},"686":{"position":[[200,11]]},"700":{"position":[[137,11]]},"701":{"position":[[134,11]]},"706":{"position":[[137,11]]},"707":{"position":[[134,11]]},"720":{"position":[[660,11]]},"721":{"position":[[283,11]]},"741":{"position":[[252,11]]},"742":{"position":[[166,11]]},"747":{"position":[[666,11]]},"748":{"position":[[299,11]]},"843":{"position":[[441,11]]},"851":{"position":[[176,11]]},"852":{"position":[[257,11]]},"859":{"position":[[480,11]]},"860":{"position":[[224,11]]},"885":{"position":[[438,11]]},"886":{"position":[[225,11]]},"959":{"position":[[144,11]]},"960":{"position":[[140,11]]},"982":{"position":[[146,11]]},"983":{"position":[[134,11]]},"1009":{"position":[[824,11]]},"1010":{"position":[[309,11]]},"1015":{"position":[[251,11]]},"1016":{"position":[[252,11]]},"1029":{"position":[[111,11]]},"1070":{"position":[[636,11]]},"1071":{"position":[[272,11]]},"1076":{"position":[[586,11]]},"1078":{"position":[[159,11]]},"1085":{"position":[[845,10],[1138,11]]},"1086":{"position":[[337,11]]},"1094":{"position":[[297,11]]},"1108":{"position":[[182,11]]},"1113":{"position":[[177,11]]},"1114":{"position":[[173,11]]},"1133":{"position":[[758,11]]},"1134":{"position":[[202,11]]}},"keywords":{}}],["startcommit",{"_index":6507,"title":{},"content":{"1444":{"position":[[243,11],[568,11]]}},"keywords":{}}],["startcommit{runtimecp",{"_index":6460,"title":{},"content":{"1434":{"position":[[1883,22]]}},"keywords":{}}],["startdat",{"_index":4928,"title":{},"content":{"891":{"position":[[130,10]]}},"keywords":{}}],["startedcommit",{"_index":6503,"title":{},"content":{"1442":{"position":[[1870,14]]},"1444":{"position":[[727,13],[822,14]]}},"keywords":{}}],["startedcommit{drivercp",{"_index":6465,"title":{},"content":{"1434":{"position":[[2090,23]]}},"keywords":{}}],["startup",{"_index":4622,"title":{},"content":{"757":{"position":[[1803,8]]},"770":{"position":[[1803,8]]},"797":{"position":[[1803,8]]},"812":{"position":[[1803,8]]},"828":{"position":[[1803,8]]},"1442":{"position":[[1338,8]]}},"keywords":{}}],["stat",{"_index":259,"title":{"1472":{"position":[[18,5]]}},"content":{"8":{"position":[[40,5],[219,5],[351,5],[563,5],[943,5]]},"145":{"position":[[121,6]]},"148":{"position":[[130,6]]},"151":{"position":[[128,6]]},"529":{"position":[[617,5]]},"1470":{"position":[[767,5],[856,5]]},"1471":{"position":[[30,5],[76,6],[211,5],[314,5],[431,6],[678,5],[751,5],[820,5],[897,5],[1119,5]]},"1472":{"position":[[34,5],[312,5]]},"1473":{"position":[[350,5]]},"1474":{"position":[[3,5]]},"1475":{"position":[[1,5],[591,5],[656,6],[731,6],[1432,5]]}},"keywords":{}}],["state",{"_index":214,"title":{"104":{"position":[[0,6]]},"112":{"position":[[9,6]]},"114":{"position":[[28,6]]}},"content":{"6":{"position":[[322,5]]},"13":{"position":[[358,6]]},"21":{"position":[[33,6]]},"40":{"position":[[274,8]]},"48":{"position":[[315,6]]},"100":{"position":[[837,5]]},"101":{"position":[[116,6]]},"104":{"position":[[170,5],[313,8]]},"105":{"position":[[457,6],[1386,7]]},"107":{"position":[[2257,5],[2602,6]]},"108":{"position":[[187,6]]},"110":{"position":[[931,6]]},"112":{"position":[[44,6],[114,5],[230,5],[367,5],[427,6],[549,5],[627,6],[842,5],[983,5]]},"114":{"position":[[39,5],[178,6],[293,5],[483,5],[826,9]]},"115":{"position":[[586,8]]},"121":{"position":[[1762,7],[1850,5]]},"125":{"position":[[108,5],[222,8],[377,5],[484,5],[560,8]]},"138":{"position":[[2439,7]]},"142":{"position":[[2517,7]]},"189":{"position":[[43,7]]},"278":{"position":[[810,5]]},"281":{"position":[[2868,5],[2911,5],[3126,5]]},"319":{"position":[[1299,8],[1408,5]]},"320":{"position":[[2250,5]]},"321":{"position":[[727,8]]},"368":{"position":[[134,6]]},"483":{"position":[[183,5]]},"755":{"position":[[134,6]]},"760":{"position":[[463,5]]},"768":{"position":[[134,6]]},"773":{"position":[[463,5]]},"795":{"position":[[132,6]]},"800":{"position":[[463,5]]},"810":{"position":[[132,6]]},"815":{"position":[[463,5]]},"826":{"position":[[132,6]]},"831":{"position":[[463,5]]},"840":{"position":[[649,5]]},"849":{"position":[[1124,5]]},"867":{"position":[[472,6]]},"905":{"position":[[137,6]]},"920":{"position":[[137,6]]},"932":{"position":[[137,6]]},"948":{"position":[[137,6]]},"966":{"position":[[137,6]]},"1247":{"position":[[1000,5]]},"1379":{"position":[[5108,5]]},"1403":{"position":[[5108,5]]},"1414":{"position":[[5108,5]]},"1435":{"position":[[113,5],[200,5],[261,5],[511,6],[533,6]]},"1437":{"position":[[75,6],[372,6]]},"1439":{"position":[[1230,6],[1417,6]]}},"keywords":{}}],["state.approv",{"_index":1607,"title":{},"content":{"113":{"position":[[610,15]]}},"keywords":{}}],["stateless",{"_index":1627,"title":{},"content":{"115":{"position":[[645,10]]},"252":{"position":[[48,9]]},"256":{"position":[[51,9]]},"294":{"position":[[48,9]]},"312":{"position":[[48,9]]},"317":{"position":[[51,9]]}},"keywords":{}}],["statement",{"_index":339,"title":{},"content":{"11":{"position":[[1443,9]]},"50":{"position":[[125,11]]},"97":{"position":[[39,11],[226,11],[247,10],[363,10],[477,11],[853,10]]},"100":{"position":[[288,10],[338,11]]},"114":{"position":[[635,10]]},"236":{"position":[[2000,10]]},"238":{"position":[[1354,9]]},"254":{"position":[[2952,9]]},"271":{"position":[[502,10]]},"278":{"position":[[586,10]]},"869":{"position":[[759,9]]},"1192":{"position":[[398,10]]},"1379":{"position":[[5163,9]]},"1394":{"position":[[395,10]]},"1403":{"position":[[5163,9]]},"1414":{"position":[[5163,9]]},"1423":{"position":[[405,10]]},"1429":{"position":[[301,9]]}},"keywords":{}}],["statement(",{"_index":5515,"title":{},"content":{"1138":{"position":[[1404,12]]},"1313":{"position":[[948,12]]},"1337":{"position":[[948,12]]},"1348":{"position":[[948,12]]},"1427":{"position":[[675,12]]}},"keywords":{}}],["statesetl",{"_index":3184,"title":{},"content":{"329":{"position":[[597,9]]}},"keywords":{}}],["static",{"_index":787,"title":{},"content":{"50":{"position":[[271,10]]},"72":{"position":[[221,6]]},"99":{"position":[[310,10]]},"158":{"position":[[116,6]]},"267":{"position":[[670,6]]},"274":{"position":[[79,6]]},"738":{"position":[[647,6]]},"1140":{"position":[[598,6]]},"1316":{"position":[[598,6]]},"1340":{"position":[[598,6]]},"1351":{"position":[[598,6]]},"1379":{"position":[[5222,6]]},"1403":{"position":[[5222,6]]},"1414":{"position":[[5222,6]]},"1431":{"position":[[621,6]]}},"keywords":{}}],["statist",{"_index":197,"title":{"5":{"position":[[9,10]]},"8":{"position":[[0,11]]},"9":{"position":[[22,11]]},"1468":{"position":[[22,10]]},"1469":{"position":[[19,11]]},"1470":{"position":[[9,10]]},"1471":{"position":[[19,10]]},"1473":{"position":[[10,11]]}},"content":{"8":{"position":[[486,10]]},"9":{"position":[[40,10]]},"138":{"position":[[1913,11]]},"141":{"position":[[1845,11]]},"142":{"position":[[1969,11]]},"146":{"position":[[48,11]]},"149":{"position":[[54,11]]},"152":{"position":[[64,11]]},"210":{"position":[[307,10]]},"517":{"position":[[2186,11],[2340,10]]},"723":{"position":[[192,10],[213,10]]},"1379":{"position":[[5275,10]]},"1403":{"position":[[5275,10]]},"1414":{"position":[[5275,10]]},"1453":{"position":[[252,10]]},"1469":{"position":[[25,10]]},"1470":{"position":[[35,10],[603,11],[620,10]]},"1471":{"position":[[458,10]]},"1472":{"position":[[173,11],[217,10],[426,10],[567,11],[597,9]]},"1473":{"position":[[11,10],[172,10],[337,11]]},"1475":{"position":[[804,10]]}},"keywords":{}}],["statisticsshar",{"_index":4536,"title":{},"content":{"729":{"position":[[29,15]]}},"keywords":{}}],["statisticstot",{"_index":4537,"title":{},"content":{"729":{"position":[[45,15]]}},"keywords":{}}],["stats_auto_r",{"_index":6186,"title":{},"content":{"1292":{"position":[[5389,13]]},"1306":{"position":[[5389,13]]},"1329":{"position":[[5389,13]]}},"keywords":{}}],["stats_persist",{"_index":6187,"title":{},"content":{"1292":{"position":[[5432,13]]},"1306":{"position":[[5432,13]]},"1329":{"position":[[5432,13]]}},"keywords":{}}],["statsrepositoriestagsteamsus",{"_index":4032,"title":{},"content":{"529":{"position":[[954,31]]}},"keywords":{}}],["statssampl",{"_index":6190,"title":{},"content":{"1292":{"position":[[5492,11]]},"1306":{"position":[[5492,11]]},"1329":{"position":[[5492,11]]}},"keywords":{}}],["statu",{"_index":781,"title":{},"content":{"49":{"position":[[339,6]]},"138":{"position":[[1109,6],[1137,6],[1637,7]]},"141":{"position":[[867,6],[1114,6],[1213,6],[1642,7]]},"142":{"position":[[1078,6],[1106,6],[1654,7]]},"267":{"position":[[840,7]]},"268":{"position":[[803,7]]},"269":{"position":[[428,7]]},"275":{"position":[[952,6]]},"709":{"position":[[742,6]]},"1096":{"position":[[426,6]]},"1292":{"position":[[5546,6]]},"1306":{"position":[[5546,6]]},"1329":{"position":[[5546,6]]}},"keywords":{}}],["status.lambda.anvils.sql",{"_index":2801,"title":{},"content":{"268":{"position":[[370,25],[1057,24]]}},"keywords":{}}],["status.migration.0.sql",{"_index":2803,"title":{},"content":{"268":{"position":[[667,23],[948,22]]}},"keywords":{}}],["status.t",{"_index":2809,"title":{},"content":{"269":{"position":[[305,10],[571,9]]}},"keywords":{}}],["statusesworkflow",{"_index":4493,"title":{},"content":{"709":{"position":[[725,16]]}},"keywords":{}}],["stay",{"_index":3151,"title":{},"content":{"322":{"position":[[898,5]]},"1203":{"position":[[177,5]]}},"keywords":{}}],["stddev_pop",{"_index":5535,"title":{},"content":{"1140":{"position":[[638,10]]},"1316":{"position":[[638,10]]},"1340":{"position":[[638,10]]},"1351":{"position":[[638,10]]},"1379":{"position":[[5324,10]]},"1403":{"position":[[5324,10]]},"1414":{"position":[[5324,10]]},"1431":{"position":[[661,10]]}},"keywords":{}}],["stddev_samp",{"_index":5538,"title":{},"content":{"1140":{"position":[[677,11]]},"1316":{"position":[[677,11]]},"1340":{"position":[[677,11]]},"1351":{"position":[[677,11]]},"1379":{"position":[[5370,11]]},"1403":{"position":[[5370,11]]},"1414":{"position":[[5370,11]]},"1431":{"position":[[700,11]]}},"keywords":{}}],["stdout",{"_index":907,"title":{},"content":{"60":{"position":[[771,7]]}},"keywords":{}}],["stem",{"_index":2249,"title":{},"content":{"208":{"position":[[742,8]]}},"keywords":{}}],["step",{"_index":752,"title":{"212":{"position":[[5,6]]},"235":{"position":[[0,4]]},"239":{"position":[[0,4]]},"240":{"position":[[0,4]]},"243":{"position":[[5,6]]}},"content":{"43":{"position":[[247,6],[264,5],[343,5]]},"60":{"position":[[1031,6]]},"61":{"position":[[234,5],[1337,4],[1345,4]]},"128":{"position":[[8,5],[190,4]]},"129":{"position":[[8,5],[318,5]]},"130":{"position":[[8,5]]},"132":{"position":[[184,4]]},"133":{"position":[[268,5],[622,4]]},"139":{"position":[[212,5]]},"140":{"position":[[310,5]]},"143":{"position":[[244,5]]},"144":{"position":[[803,5]]},"154":{"position":[[841,4]]},"170":{"position":[[174,6]]},"171":{"position":[[132,5]]},"172":{"position":[[131,5]]},"174":{"position":[[111,6],[458,5]]},"179":{"position":[[379,5]]},"182":{"position":[[468,5]]},"190":{"position":[[1800,5]]},"191":{"position":[[84,6]]},"192":{"position":[[2162,5]]},"206":{"position":[[12,5],[135,4]]},"213":{"position":[[46,4],[54,4]]},"221":{"position":[[175,5],[1875,4]]},"228":{"position":[[68,6],[1425,5]]},"229":{"position":[[69,6]]},"230":{"position":[[1199,5]]},"232":{"position":[[339,6]]},"236":{"position":[[183,5]]},"238":{"position":[[30,4]]},"239":{"position":[[493,4],[1619,5]]},"240":{"position":[[217,6],[2674,5],[3749,4]]},"255":{"position":[[868,4]]},"268":{"position":[[64,6],[136,6]]},"269":{"position":[[71,6],[143,6]]},"270":{"position":[[87,6],[106,5]]},"296":{"position":[[7398,5]]},"315":{"position":[[10,4]]},"316":{"position":[[1193,4]]},"348":{"position":[[12,5]]},"367":{"position":[[43,6]]},"406":{"position":[[14,5]]},"413":{"position":[[418,5]]},"446":{"position":[[177,6]]},"476":{"position":[[12,5]]},"478":{"position":[[160,5]]},"515":{"position":[[340,5]]},"571":{"position":[[297,5]]},"599":{"position":[[160,5]]},"609":{"position":[[137,5]]},"617":{"position":[[239,5]]},"710":{"position":[[56,5]]},"764":{"position":[[990,5]]},"767":{"position":[[270,5]]},"777":{"position":[[990,5]]},"790":{"position":[[40,5]]},"792":{"position":[[133,5]]},"804":{"position":[[988,5]]},"819":{"position":[[988,5]]},"835":{"position":[[988,5]]},"863":{"position":[[12,5]]},"875":{"position":[[12,5]]},"895":{"position":[[12,5]]},"916":{"position":[[40,5]]},"917":{"position":[[243,6]]},"918":{"position":[[133,5]]},"965":{"position":[[243,6]]},"988":{"position":[[308,6]]},"1003":{"position":[[308,6]]},"1008":{"position":[[173,6],[954,4]]},"1040":{"position":[[320,6]]},"1041":{"position":[[40,5]]},"1050":{"position":[[320,6],[955,5]]},"1058":{"position":[[320,6]]},"1090":{"position":[[12,5]]},"1092":{"position":[[336,4]]},"1176":{"position":[[437,5],[686,6]]},"1177":{"position":[[59,6]]},"1185":{"position":[[486,6]]},"1194":{"position":[[696,6]]},"1203":{"position":[[604,5],[857,6]]},"1204":{"position":[[481,4]]},"1226":{"position":[[497,6]]},"1243":{"position":[[274,6]]},"1245":{"position":[[191,5]]},"1282":{"position":[[40,5]]},"1289":{"position":[[457,5]]},"1310":{"position":[[40,5]]},"1321":{"position":[[237,5]]},"1334":{"position":[[325,5]]},"1354":{"position":[[521,6]]},"1382":{"position":[[740,6]]},"1407":{"position":[[40,5]]}},"keywords":{}}],["stick",{"_index":4250,"title":{},"content":{"593":{"position":[[495,5]]}},"keywords":{}}],["still",{"_index":1326,"title":{},"content":{"92":{"position":[[579,5]]},"117":{"position":[[580,5]]},"122":{"position":[[1544,5]]},"125":{"position":[[1251,5]]},"175":{"position":[[333,5]]},"192":{"position":[[1677,5]]},"230":{"position":[[704,5]]},"280":{"position":[[1844,5]]},"281":{"position":[[1654,5]]},"309":{"position":[[486,5],[542,5],[3381,5]]},"429":{"position":[[1193,5]]},"590":{"position":[[1110,5]]},"661":{"position":[[99,5]]},"764":{"position":[[385,5]]},"777":{"position":[[385,5]]},"804":{"position":[[383,5]]},"819":{"position":[[383,5]]},"835":{"position":[[383,5]]},"909":{"position":[[1041,5]]},"922":{"position":[[701,5]]},"925":{"position":[[1041,5]]},"936":{"position":[[1041,5]]},"952":{"position":[[1041,5]]},"970":{"position":[[1041,5]]},"1036":{"position":[[390,5]]},"1438":{"position":[[645,5]]},"1439":{"position":[[339,5]]},"1443":{"position":[[1193,5]]},"1447":{"position":[[732,5]]},"1459":{"position":[[1027,5],[1701,5]]}},"keywords":{}}],["stitch",{"_index":117,"title":{},"content":{"3":{"position":[[358,8]]}},"keywords":{}}],["stock",{"_index":3434,"title":{},"content":{"373":{"position":[[56,5]]},"374":{"position":[[27,6],[258,5]]},"375":{"position":[[76,5]]}},"keywords":{}}],["stop",{"_index":1396,"title":{},"content":{"97":{"position":[[714,4]]},"110":{"position":[[753,5]]},"183":{"position":[[4395,4]]},"236":{"position":[[696,7],[1195,7]]},"242":{"position":[[184,4]]},"292":{"position":[[72,8]]},"303":{"position":[[72,8]]},"333":{"position":[[563,8]]},"373":{"position":[[574,8],[783,4]]},"377":{"position":[[1078,4],[1088,4]]},"922":{"position":[[1615,5]]},"1186":{"position":[[346,4]]},"1203":{"position":[[330,4]]},"1292":{"position":[[5602,4]]},"1306":{"position":[[5602,4]]},"1329":{"position":[[5602,4]]},"1452":{"position":[[963,4],[1003,4],[2842,4],[3038,4],[3637,4],[3942,4]]}},"keywords":{}}],["storag",{"_index":59,"title":{"46":{"position":[[0,7]]},"77":{"position":[[0,8]]},"116":{"position":[[0,7]]},"170":{"position":[[23,7]]},"171":{"position":[[13,7]]},"173":{"position":[[11,8]]},"419":{"position":[[24,7]]},"434":{"position":[[11,7]]},"440":{"position":[[24,7]]},"542":{"position":[[13,7]]},"547":{"position":[[24,7]]}},"content":{"1":{"position":[[873,7],[920,7],[948,7]]},"3":{"position":[[150,7],[194,7]]},"4":{"position":[[63,7]]},"16":{"position":[[408,7],[775,8],[1023,7]]},"21":{"position":[[757,7],[800,7]]},"34":{"position":[[305,7],[506,7]]},"37":{"position":[[260,7]]},"42":{"position":[[331,7]]},"46":{"position":[[28,7],[60,7],[77,7],[150,7],[198,7]]},"48":{"position":[[32,7]]},"67":{"position":[[357,7],[505,7]]},"74":{"position":[[337,7],[549,7]]},"77":{"position":[[148,7],[247,7],[321,7],[635,7]]},"101":{"position":[[558,7]]},"117":{"position":[[48,7]]},"121":{"position":[[2036,7]]},"154":{"position":[[81,7],[1138,7],[1161,7],[1212,7],[1372,7],[1667,7],[1723,7]]},"162":{"position":[[1460,7]]},"163":{"position":[[582,8]]},"168":{"position":[[182,7],[238,7],[353,7]]},"170":{"position":[[56,7],[195,7],[224,7]]},"173":{"position":[[50,7],[161,7],[406,7],[451,7],[490,7],[542,7],[592,7],[745,7],[814,7],[896,7],[1130,7]]},"174":{"position":[[36,7],[396,7],[512,7]]},"190":{"position":[[1002,7],[1098,7]]},"191":{"position":[[1931,7]]},"192":{"position":[[1398,7]]},"207":{"position":[[213,8],[420,7]]},"239":{"position":[[816,8],[861,7]]},"240":{"position":[[1892,7]]},"259":{"position":[[950,8],[2531,8]]},"305":{"position":[[56,8]]},"320":{"position":[[1063,8],[1111,7],[1195,7],[1338,7]]},"321":{"position":[[335,7],[643,7],[1338,8]]},"322":{"position":[[1762,7]]},"323":{"position":[[705,8]]},"326":{"position":[[1278,7],[1343,7]]},"363":{"position":[[700,7],[1006,7]]},"419":{"position":[[7,7]]},"437":{"position":[[261,7]]},"438":{"position":[[633,8],[681,7],[729,7],[857,8],[1004,8],[1136,7],[1313,7],[1469,8],[1598,7]]},"440":{"position":[[7,7],[41,7]]},"545":{"position":[[593,7]]},"547":{"position":[[7,7]]},"909":{"position":[[218,7]]},"925":{"position":[[218,7]]},"936":{"position":[[218,7]]},"945":{"position":[[864,7]]},"952":{"position":[[218,7]]},"970":{"position":[[218,7]]},"1176":{"position":[[57,7]]},"1179":{"position":[[119,7]]},"1292":{"position":[[5640,7]]},"1306":{"position":[[5640,7]]},"1329":{"position":[[5640,7]]},"1383":{"position":[[1879,7]]},"1418":{"position":[[141,7]]},"1420":{"position":[[488,7]]},"1439":{"position":[[88,7]]},"1449":{"position":[[334,7]]}},"keywords":{}}],["storage"",{"_index":2033,"title":{},"content":{"174":{"position":[[193,13]]}},"keywords":{}}],["storage.materi",{"_index":665,"title":{},"content":{"32":{"position":[[290,24]]}},"keywords":{}}],["storage:dev",{"_index":3292,"title":{},"content":{"363":{"position":[[758,11]]}},"keywords":{}}],["storage:dev"",{"_index":3712,"title":{},"content":{"439":{"position":[[106,17]]}},"keywords":{}}],["storageaccountnam",{"_index":3726,"title":{},"content":{"439":{"position":[[363,19]]}},"keywords":{}}],["store",{"_index":103,"title":{"1437":{"position":[[7,5]]},"1438":{"position":[[36,6]]},"1444":{"position":[[0,6]]}},"content":{"3":{"position":[[72,6]]},"6":{"position":[[215,5],[423,6]]},"8":{"position":[[229,6]]},"11":{"position":[[6,6]]},"21":{"position":[[72,6],[435,6],[736,6]]},"34":{"position":[[270,6],[472,6]]},"37":{"position":[[200,7]]},"66":{"position":[[20,6]]},"77":{"position":[[82,6]]},"81":{"position":[[2471,7],[2747,7]]},"82":{"position":[[334,6],[2881,5],[3681,5]]},"113":{"position":[[586,6]]},"114":{"position":[[586,6]]},"115":{"position":[[1114,6]]},"117":{"position":[[79,5],[189,5]]},"121":{"position":[[2012,6]]},"124":{"position":[[156,6]]},"154":{"position":[[1629,6]]},"157":{"position":[[294,5]]},"161":{"position":[[68,6]]},"162":{"position":[[2034,5]]},"163":{"position":[[690,6]]},"168":{"position":[[200,5]]},"170":{"position":[[74,5]]},"189":{"position":[[403,5],[1187,5]]},"190":{"position":[[1656,5]]},"198":{"position":[[385,6]]},"207":{"position":[[142,6],[400,6],[541,6],[588,5]]},"216":{"position":[[237,5]]},"239":{"position":[[745,6],[982,6],[1029,5]]},"296":{"position":[[7655,5]]},"301":{"position":[[1473,5]]},"320":{"position":[[666,7],[983,5],[1703,5]]},"322":{"position":[[1067,5]]},"323":{"position":[[677,5]]},"329":{"position":[[558,6]]},"330":{"position":[[213,7]]},"338":{"position":[[222,6]]},"427":{"position":[[81,5]]},"517":{"position":[[2947,5]]},"747":{"position":[[486,7]]},"909":{"position":[[154,6],[240,5]]},"925":{"position":[[154,6],[240,5]]},"936":{"position":[[154,6],[240,5]]},"952":{"position":[[154,6],[240,5]]},"970":{"position":[[154,6],[240,5]]},"1094":{"position":[[274,6]]},"1144":{"position":[[85,5],[535,5]]},"1151":{"position":[[1277,5]]},"1162":{"position":[[383,5]]},"1170":{"position":[[85,5],[535,5]]},"1179":{"position":[[1076,5]]},"1196":{"position":[[955,5]]},"1203":{"position":[[404,6]]},"1206":{"position":[[664,7],[728,6],[914,5],[1090,5]]},"1208":{"position":[[161,6]]},"1213":{"position":[[85,5],[390,5]]},"1220":{"position":[[85,5],[390,5]]},"1260":{"position":[[825,5]]},"1274":{"position":[[173,5]]},"1276":{"position":[[51,6]]},"1292":{"position":[[5686,6]]},"1306":{"position":[[5686,6]]},"1329":{"position":[[5686,6]]},"1420":{"position":[[602,5]]},"1434":{"position":[[1944,5],[2212,5]]},"1437":{"position":[[29,5],[454,5],[837,5],[1186,5],[1263,5]]},"1438":{"position":[[125,5],[191,5],[225,6]]},"1439":{"position":[[179,5],[284,6],[734,5],[776,5],[1224,5],[1389,5],[1469,5]]},"1440":{"position":[[204,5],[255,5],[660,7],[761,6],[961,5]]},"1443":{"position":[[1042,5]]},"1444":{"position":[[14,5],[120,6],[215,7],[347,5],[608,5]]}},"keywords":{}}],["store<x>",{"_index":6457,"title":{},"content":{"1434":{"position":[[1766,14]]}},"keywords":{}}],["store<y>",{"_index":6458,"title":{},"content":{"1434":{"position":[[1805,14]]}},"keywords":{}}],["store<z>",{"_index":6459,"title":{},"content":{"1434":{"position":[[1844,14]]}},"keywords":{}}],["stori",{"_index":4423,"title":{},"content":{"671":{"position":[[268,7]]}},"keywords":{}}],["straight_join",{"_index":6200,"title":{},"content":{"1292":{"position":[[5725,13]]},"1306":{"position":[[5725,13]]},"1329":{"position":[[5725,13]]}},"keywords":{}}],["straightforward",{"_index":2267,"title":{},"content":{"209":{"position":[[728,15]]},"254":{"position":[[3381,15]]}},"keywords":{}}],["strategi",{"_index":743,"title":{"1358":{"position":[[28,11]]},"1458":{"position":[[10,10]]}},"content":{"42":{"position":[[601,9]]},"67":{"position":[[1964,8]]},"121":{"position":[[988,10],[1082,10]]},"164":{"position":[[154,10],[545,9],[630,9],[1755,10],[1925,9],[2041,9]]},"166":{"position":[[452,10]]},"183":{"position":[[1803,9],[1890,9],[3609,9],[3696,9]]},"208":{"position":[[394,9]]},"254":{"position":[[398,9],[450,9],[485,9],[1466,9],[1518,9],[1553,9],[1890,8],[1931,8],[2031,10],[3809,9]]},"281":{"position":[[2067,9],[2152,9]]},"296":{"position":[[576,9],[641,9],[1547,9],[1612,9],[1786,8],[1827,10]]},"1008":{"position":[[896,8],[1642,9],[1826,9]]},"1279":{"position":[[212,8],[235,8]]},"1358":{"position":[[497,10],[865,8],[884,8]]},"1440":{"position":[[544,9]]},"1459":{"position":[[1189,10],[1358,10]]},"1463":{"position":[[324,9],[393,9],[439,9]]},"1464":{"position":[[180,9],[354,9]]},"1465":{"position":[[38,10],[268,10],[745,9],[984,9],[1030,9],[1058,9]]},"1466":{"position":[[139,9],[336,9]]},"1467":{"position":[[482,9],[688,9],[804,9],[865,9],[2153,9],[2232,9],[2277,9]]},"1476":{"position":[[190,9],[259,9],[299,9],[1256,9],[1395,9],[1419,9],[1494,9]]},"1477":{"position":[[960,9],[1086,9],[1319,9],[1441,8],[1512,9],[3182,9],[3306,9],[3607,8],[3678,9],[3814,9],[3840,9]]}},"keywords":{}}],["strategiesrefer",{"_index":1941,"title":{},"content":{"164":{"position":[[809,19]]}},"keywords":{}}],["strategy.set",{"_index":5017,"title":{},"content":{"910":{"position":[[151,12]]},"926":{"position":[[151,12]]},"937":{"position":[[151,12]]},"953":{"position":[[151,12]]},"971":{"position":[[151,12]]}},"keywords":{}}],["stream",{"_index":689,"title":{"231":{"position":[[15,9]]},"353":{"position":[[10,8]]},"430":{"position":[[12,9]]},"559":{"position":[[0,6]]},"729":{"position":[[10,8]]},"899":{"position":[[10,8]]},"1096":{"position":[[10,8]]}},"content":{"37":{"position":[[208,9]]},"40":{"position":[[283,9]]},"53":{"position":[[236,9]]},"54":{"position":[[334,8]]},"56":{"position":[[1926,7],[2097,7],[2197,9]]},"80":{"position":[[508,7]]},"119":{"position":[[430,8]]},"180":{"position":[[555,7]]},"183":{"position":[[3331,6]]},"196":{"position":[[199,6],[224,6]]},"197":{"position":[[157,8],[174,7],[362,7]]},"198":{"position":[[46,7],[130,9],[342,7],[455,6],[571,7],[626,9],[938,9]]},"203":{"position":[[89,7]]},"209":{"position":[[451,7],[615,7],[842,7],[1024,7]]},"210":{"position":[[2236,10],[2471,9]]},"211":{"position":[[834,7]]},"217":{"position":[[1108,8]]},"218":{"position":[[820,8]]},"232":{"position":[[34,9]]},"233":{"position":[[199,6],[224,6]]},"236":{"position":[[2830,6],[3795,10]]},"253":{"position":[[955,6]]},"255":{"position":[[1050,7]]},"279":{"position":[[397,6]]},"307":{"position":[[1200,7],[2050,7]]},"313":{"position":[[955,6]]},"316":{"position":[[1375,7]]},"319":{"position":[[867,9],[1261,9],[1308,6],[1318,6]]},"320":{"position":[[101,9],[382,9],[1638,8],[1945,6],[2371,6]]},"321":{"position":[[47,6],[104,9]]},"325":{"position":[[74,7]]},"329":{"position":[[386,9],[723,9],[778,9]]},"331":{"position":[[152,6],[162,6],[570,6]]},"349":{"position":[[418,8]]},"351":{"position":[[365,6]]},"353":{"position":[[46,8]]},"359":{"position":[[342,6]]},"360":{"position":[[186,7]]},"370":{"position":[[2116,7],[2124,6]]},"371":{"position":[[1303,7]]},"373":{"position":[[140,9],[659,9],[693,6],[995,8]]},"377":{"position":[[324,10],[389,9],[418,9]]},"379":{"position":[[327,7],[474,8],[506,6],[597,7]]},"381":{"position":[[532,6]]},"387":{"position":[[1379,6]]},"388":{"position":[[441,7]]},"390":{"position":[[65,8],[99,7],[250,7],[286,7],[320,7],[361,7]]},"392":{"position":[[603,6],[729,6],[736,6]]},"393":{"position":[[337,7],[494,7]]},"395":{"position":[[80,7],[116,7],[194,7],[235,6],[314,6],[494,7],[530,7]]},"408":{"position":[[572,6]]},"418":{"position":[[398,7]]},"424":{"position":[[396,6]]},"425":{"position":[[218,7],[295,7],[380,7],[454,7],[539,7]]},"430":{"position":[[22,9]]},"432":{"position":[[1239,6]]},"433":{"position":[[346,7],[742,7]]},"439":{"position":[[625,7]]},"448":{"position":[[1266,6]]},"449":{"position":[[422,7]]},"454":{"position":[[585,6]]},"455":{"position":[[265,7]]},"460":{"position":[[602,6]]},"461":{"position":[[266,7]]},"466":{"position":[[313,6]]},"467":{"position":[[201,7]]},"473":{"position":[[304,7]]},"492":{"position":[[493,7]]},"496":{"position":[[578,6],[590,6]]},"497":{"position":[[220,7],[403,7]]},"503":{"position":[[194,7]]},"509":{"position":[[578,6]]},"510":{"position":[[193,7]]},"517":{"position":[[1492,7],[2044,7],[4001,6]]},"518":{"position":[[475,7],[557,7],[633,7],[719,7],[835,7],[937,7],[1037,7],[1131,7],[1257,7],[1367,7],[1447,7],[1529,7],[1597,7]]},"527":{"position":[[351,7]]},"534":{"position":[[863,7],[1746,6]]},"535":{"position":[[365,7]]},"546":{"position":[[1105,7]]},"556":{"position":[[1582,7],[2243,6]]},"557":{"position":[[617,7]]},"560":{"position":[[46,6]]},"573":{"position":[[1103,6],[1322,6]]},"575":{"position":[[324,7],[422,7],[509,7],[613,7],[702,7],[802,7],[887,7],[982,7],[1085,7],[1181,7]]},"584":{"position":[[1394,6]]},"586":{"position":[[346,7],[444,7],[531,7],[635,7],[724,7],[809,7],[904,7],[1000,7]]},"595":{"position":[[980,6]]},"611":{"position":[[1233,6]]},"612":{"position":[[369,7]]},"620":{"position":[[263,7]]},"625":{"position":[[207,6]]},"626":{"position":[[158,7]]},"631":{"position":[[538,6]]},"632":{"position":[[227,7]]},"637":{"position":[[1196,6]]},"638":{"position":[[397,7]]},"654":{"position":[[635,7],[736,7]]},"655":{"position":[[216,7]]},"665":{"position":[[493,7]]},"670":{"position":[[696,6]]},"671":{"position":[[260,7]]},"685":{"position":[[520,6]]},"686":{"position":[[255,7],[330,7],[410,7],[503,7],[591,7],[688,7],[766,7],[864,7],[962,7],[1040,7],[1111,7]]},"695":{"position":[[493,7]]},"700":{"position":[[348,6]]},"701":{"position":[[189,7]]},"706":{"position":[[348,6]]},"707":{"position":[[189,7]]},"712":{"position":[[543,6]]},"713":{"position":[[198,7]]},"720":{"position":[[852,6],[872,6]]},"721":{"position":[[328,7]]},"736":{"position":[[187,7],[272,7],[361,7]]},"741":{"position":[[525,6]]},"742":{"position":[[257,7]]},"747":{"position":[[1407,6]]},"748":{"position":[[417,7]]},"757":{"position":[[2027,7],[2035,6]]},"758":{"position":[[317,7]]},"770":{"position":[[2027,7],[2035,6]]},"771":{"position":[[317,7]]},"782":{"position":[[606,6]]},"785":{"position":[[93,7],[271,7]]},"786":{"position":[[117,6]]},"797":{"position":[[2034,7],[2042,6]]},"798":{"position":[[315,7]]},"812":{"position":[[2034,7],[2042,6]]},"813":{"position":[[315,7]]},"828":{"position":[[2034,7],[2042,6]]},"829":{"position":[[315,7]]},"842":{"position":[[1406,7]]},"851":{"position":[[628,6]]},"852":{"position":[[324,7]]},"859":{"position":[[775,6]]},"860":{"position":[[279,7]]},"867":{"position":[[2214,7],[2222,6]]},"868":{"position":[[495,7]]},"885":{"position":[[649,6]]},"886":{"position":[[280,7]]},"897":{"position":[[302,6]]},"899":{"position":[[55,8]]},"900":{"position":[[119,8],[166,7],[248,8]]},"907":{"position":[[1521,7],[1529,6]]},"908":{"position":[[331,7]]},"917":{"position":[[1046,6],[1110,8]]},"919":{"position":[[1571,6],[1635,8]]},"923":{"position":[[1521,7],[1529,6]]},"924":{"position":[[331,7]]},"934":{"position":[[1521,7],[1529,6]]},"935":{"position":[[331,7]]},"947":{"position":[[1234,6]]},"950":{"position":[[1521,7],[1529,6]]},"951":{"position":[[331,7]]},"959":{"position":[[404,6]]},"960":{"position":[[195,7]]},"965":{"position":[[1046,6],[1110,8]]},"968":{"position":[[1521,7],[1529,6]]},"969":{"position":[[331,7]]},"976":{"position":[[182,9]]},"977":{"position":[[684,9]]},"982":{"position":[[406,6]]},"983":{"position":[[189,7]]},"991":{"position":[[829,6]]},"992":{"position":[[248,7],[306,7]]},"997":{"position":[[374,6]]},"998":{"position":[[228,7]]},"1007":{"position":[[35,6]]},"1008":{"position":[[676,7]]},"1009":{"position":[[1677,7],[1685,6]]},"1010":{"position":[[462,7],[572,7]]},"1015":{"position":[[462,6]]},"1016":{"position":[[307,7]]},"1022":{"position":[[423,7]]},"1028":{"position":[[409,6]]},"1029":{"position":[[197,7]]},"1031":{"position":[[230,7],[519,7]]},"1034":{"position":[[838,7]]},"1036":{"position":[[455,9]]},"1045":{"position":[[1140,7],[1148,6]]},"1046":{"position":[[272,7]]},"1053":{"position":[[1140,7],[1148,6]]},"1054":{"position":[[272,7]]},"1061":{"position":[[1140,7],[1148,6]]},"1062":{"position":[[272,7]]},"1070":{"position":[[1032,6]]},"1071":{"position":[[327,7]]},"1076":{"position":[[815,6]]},"1078":{"position":[[214,7],[315,7],[403,7],[479,7],[574,7],[689,7],[765,7],[884,7],[964,7],[1042,7],[1116,7],[1204,7],[1301,7],[1379,7],[1470,7],[1546,7],[1618,7],[1696,7],[1787,7],[1863,7],[1961,7],[2049,7]]},"1085":{"position":[[783,8],[1406,6]]},"1086":{"position":[[382,7]]},"1094":{"position":[[471,6]]},"1096":{"position":[[73,8]]},"1101":{"position":[[305,6]]},"1102":{"position":[[172,7]]},"1107":{"position":[[443,6]]},"1108":{"position":[[261,7]]},"1113":{"position":[[505,6]]},"1114":{"position":[[247,7]]},"1133":{"position":[[1239,6]]},"1134":{"position":[[281,7],[379,7],[483,7],[590,7],[665,7],[751,7],[872,7],[972,7],[1072,7],[1186,7],[1321,7],[1419,7],[1507,7],[1604,7],[1686,7],[1813,7],[1894,7],[1981,7],[2052,7],[2165,7],[2282,7],[2395,7],[2506,7],[2621,7],[2741,7],[2852,7],[2956,7]]},"1233":{"position":[[52,9]]},"1253":{"position":[[472,6]]},"1292":{"position":[[5771,6]]},"1306":{"position":[[5771,6]]},"1329":{"position":[[5771,6]]},"1452":{"position":[[398,9]]}},"keywords":{}}],["stream_nam",{"_index":3519,"title":{},"content":{"393":{"position":[[345,14]]}},"keywords":{}}],["streaming.jpg"",{"_index":2361,"title":{},"content":{"210":{"position":[[2911,20]]}},"keywords":{}}],["streamlin",{"_index":2039,"title":{},"content":{"177":{"position":[[314,11]]},"239":{"position":[[2620,11]]}},"keywords":{}}],["streams_criteria",{"_index":5164,"title":{},"content":{"1009":{"position":[[994,17],[1094,18],[1389,18]]},"1010":{"position":[[332,17]]}},"keywords":{}}],["streamsponsor",{"_index":3467,"title":{},"content":{"381":{"position":[[155,15],[191,15],[309,15]]}},"keywords":{}}],["strengthen",{"_index":5928,"title":{},"content":{"1268":{"position":[[26,11]]}},"keywords":{}}],["strict",{"_index":1048,"title":{},"content":{"70":{"position":[[295,7]]},"160":{"position":[[43,6]]},"1020":{"position":[[2016,6]]}},"keywords":{}}],["stricter",{"_index":1912,"title":{},"content":{"162":{"position":[[456,8]]},"218":{"position":[[1259,8]]},"259":{"position":[[2335,8]]},"291":{"position":[[1262,8]]},"302":{"position":[[1187,8]]}},"keywords":{}}],["strictli",{"_index":1963,"title":{},"content":{"165":{"position":[[2130,8]]},"429":{"position":[[175,8]]},"480":{"position":[[426,8]]},"842":{"position":[[1653,8]]},"1020":{"position":[[796,8]]}},"keywords":{}}],["strike",{"_index":5222,"title":{},"content":{"1036":{"position":[[346,6]]}},"keywords":{}}],["string",{"_index":426,"title":{},"content":{"14":{"position":[[509,7]]},"56":{"position":[[1626,6]]},"69":{"position":[[395,6]]},"70":{"position":[[754,6]]},"72":{"position":[[550,6]]},"89":{"position":[[117,6]]},"94":{"position":[[619,7],[1335,7]]},"98":{"position":[[843,6]]},"107":{"position":[[1834,7],[2035,6],[3974,7]]},"120":{"position":[[999,6]]},"160":{"position":[[823,7]]},"162":{"position":[[2049,7],[2117,8],[2173,8]]},"165":{"position":[[1050,6],[1297,6]]},"183":{"position":[[1215,6],[1856,6],[1875,6],[3662,6],[3681,6]]},"204":{"position":[[588,6],[850,6],[896,6]]},"207":{"position":[[951,6],[1197,6]]},"254":{"position":[[338,6],[370,6],[1406,6],[1438,6]]},"268":{"position":[[847,6]]},"269":{"position":[[472,6]]},"281":{"position":[[2111,6]]},"296":{"position":[[450,6],[470,6],[489,6],[509,6],[1421,6],[1441,6],[1460,6],[1480,6],[3591,7],[4622,7],[4638,7],[4653,7],[4689,7],[4809,7],[4830,7],[4849,7],[4888,7],[5011,7],[5027,7],[5042,7],[5058,7]]},"307":{"position":[[1356,6],[1387,6],[2224,6],[2255,6]]},"308":{"position":[[519,9]]},"309":{"position":[[662,6],[723,6],[2190,6],[2248,6],[2646,7],[2787,6],[2845,8]]},"314":{"position":[[1152,6],[1193,6],[1253,6],[1273,6],[1292,6]]},"315":{"position":[[1076,7],[1107,7],[1127,7],[1143,7],[1158,7]]},"343":{"position":[[299,6],[789,6],[1069,6]]},"351":{"position":[[100,6],[165,6],[281,6],[442,6],[497,6]]},"359":{"position":[[154,6],[258,6],[420,6],[475,6]]},"370":{"position":[[354,6],[428,6],[515,6],[618,6],[996,6],[1158,6],[1257,6],[1459,6],[1863,6],[1974,6],[2100,6],[2143,6],[2225,6]]},"377":{"position":[[838,7],[846,6],[1043,7],[1051,6],[1135,6],[1196,6],[1278,6],[1394,6],[1569,6],[1646,6],[1791,6]]},"387":{"position":[[450,6],[546,6],[663,6],[746,6],[895,6],[1303,6],[1443,6],[1498,6]]},"392":{"position":[[163,6],[329,6],[532,6],[622,6],[749,6]]},"397":{"position":[[144,6],[256,6],[357,6],[681,6],[919,6]]},"402":{"position":[[120,6],[259,6],[328,6],[405,6],[466,6],[548,6],[619,6],[735,6],[870,6]]},"406":{"position":[[210,6]]},"408":{"position":[[102,6],[165,6],[281,6],[382,6],[652,6],[707,6]]},"417":{"position":[[697,6],[880,6],[1071,6],[1115,6],[1358,6],[1610,6],[1874,6],[1982,6],[2158,6],[2341,6]]},"424":{"position":[[96,6],[157,6],[312,6],[475,6],[530,6]]},"432":{"position":[[278,6],[328,6],[586,6],[706,6],[809,6],[912,6],[999,6],[1094,6],[1163,6],[1264,6],[1345,6]]},"438":{"position":[[746,6],[866,6],[1013,6],[1164,6],[1330,6],[1403,6],[1425,6],[1478,6],[1518,6],[1630,6],[1874,6],[1973,6]]},"448":{"position":[[344,6],[460,6],[588,6],[694,6],[781,6],[1001,6],[1182,6],[1328,6],[1383,6]]},"454":{"position":[[138,6],[234,6],[298,6],[359,6],[502,6],[664,6],[719,6]]},"460":{"position":[[101,6],[173,6],[316,6],[518,6],[681,6],[736,6]]},"466":{"position":[[103,6],[179,6],[229,6],[388,6],[443,6]]},"482":{"position":[[157,6],[237,6],[339,6],[454,6],[595,6],[795,6],[886,6]]},"491":{"position":[[298,6],[549,6]]},"492":{"position":[[369,6],[486,6],[583,6]]},"496":{"position":[[131,6],[296,6],[494,6],[658,6],[740,6]]},"502":{"position":[[153,6],[1258,6],[1522,6],[1635,6]]},"509":{"position":[[96,6],[144,6],[502,6],[654,6],[709,6]]},"517":{"position":[[599,6],[723,6],[1175,6],[1389,6],[1683,6],[1878,6],[1938,6],[2088,6],[2844,6],[3917,6],[4089,6],[4144,6]]},"534":{"position":[[453,6],[638,6],[1365,6],[1662,6],[1804,6],[1859,6]]},"540":{"position":[[121,6],[207,6],[279,6],[388,6],[466,6]]},"545":{"position":[[608,6],[733,6],[982,6],[1212,6],[1476,6],[1584,6],[1735,6]]},"556":{"position":[[658,6],[775,6],[889,6],[990,6],[1243,6],[1364,6],[1654,6],[1784,6],[2044,6],[2159,6],[2306,6],[2361,6]]},"565":{"position":[[110,6],[184,6]]},"573":{"position":[[440,6],[567,6],[694,6],[809,6],[1021,6],[1375,6],[1457,6]]},"574":{"position":[[237,6],[292,7],[324,9],[355,10]]},"584":{"position":[[379,6],[498,6],[663,6],[814,6],[924,6],[1438,6],[1520,6]]},"585":{"position":[[227,6]]},"593":{"position":[[138,6],[310,6],[514,6],[635,6]]},"601":{"position":[[139,6],[266,6],[381,6],[504,6]]},"611":{"position":[[368,6],[771,6],[931,6],[1149,6],[1307,6],[1362,6]]},"619":{"position":[[341,6],[472,6],[551,6],[684,6],[767,6]]},"625":{"position":[[123,6],[287,6],[342,6]]},"631":{"position":[[173,6],[316,6],[455,6],[615,6],[670,6]]},"637":{"position":[[240,6],[321,6],[499,6],[542,6],[772,6],[1036,6],[1112,6],[1223,6]]},"646":{"position":[[568,6],[655,6],[815,6],[878,6]]},"654":{"position":[[289,6],[376,6],[556,6],[763,6],[899,6],[953,6]]},"661":{"position":[[584,7]]},"664":{"position":[[319,6],[570,6]]},"665":{"position":[[369,6],[486,6],[583,6]]},"670":{"position":[[136,6],[240,6],[457,6],[612,6],[775,6],[830,6]]},"679":{"position":[[298,6],[549,6]]},"680":{"position":[[369,6],[486,6]]},"685":{"position":[[293,6],[436,6],[587,6],[642,6]]},"694":{"position":[[298,6],[549,6]]},"695":{"position":[[369,6],[486,6],[583,6]]},"700":{"position":[[121,6],[264,6],[426,6],[481,6]]},"706":{"position":[[121,6],[264,6],[425,6],[480,6]]},"712":{"position":[[152,6],[284,6],[459,6],[617,6],[672,6]]},"720":{"position":[[549,6],[653,6],[768,6],[916,6],[971,6]]},"728":{"position":[[167,6],[232,6],[309,6],[429,6],[547,6]]},"735":{"position":[[284,6],[351,6],[490,6],[572,6]]},"741":{"position":[[134,6],[236,6],[379,6],[441,6],[602,6],[657,6]]},"747":{"position":[[576,6],[871,6],[1037,6],[1123,6],[1485,6],[1540,6]]},"753":{"position":[[1594,7]]},"757":{"position":[[144,6],[215,6],[324,6],[729,6],[898,6],[1119,6],[1503,6],[2011,6],[2094,6],[2176,6]]},"770":{"position":[[144,6],[215,6],[324,6],[729,6],[898,6],[1119,6],[1503,6],[2011,6],[2094,6],[2176,6]]},"782":{"position":[[178,6],[234,6],[311,6],[477,6],[578,6],[629,6]]},"793":{"position":[[1617,7]]},"797":{"position":[[144,6],[215,6],[324,6],[729,6],[898,6],[1119,6],[1503,6],[2018,6],[2101,6],[2183,6]]},"812":{"position":[[144,6],[215,6],[324,6],[729,6],[898,6],[1119,6],[1503,6],[2018,6],[2101,6],[2183,6]]},"828":{"position":[[144,6],[215,6],[324,6],[729,6],[898,6],[1119,6],[1503,6],[2018,6],[2101,6],[2183,6]]},"842":{"position":[[183,6],[430,6],[715,6],[829,6],[898,6],[976,6],[1149,6],[1233,6],[1978,6],[2183,6],[2385,6],[3161,6],[3320,6],[3480,6]]},"851":{"position":[[160,6],[328,6],[427,6],[481,6],[544,6],[706,6],[761,6]]},"859":{"position":[[401,6],[473,6],[699,6],[835,6],[935,6]]},"867":{"position":[[137,6],[206,6],[283,6],[375,6],[619,6],[791,6],[1639,6],[1845,6],[2198,6],[2241,6]]},"879":{"position":[[92,6],[240,6],[547,6],[645,6],[735,6],[821,6],[895,6],[985,6],[1595,6],[1707,6],[1785,6]]},"885":{"position":[[133,6],[234,6],[422,6],[565,6],[737,6],[792,6]]},"891":{"position":[[114,6],[278,6],[451,6]]},"897":{"position":[[218,6],[381,6],[436,6]]},"907":{"position":[[137,6],[211,6],[298,6],[401,6],[779,6],[941,6],[1040,6],[1242,6],[1381,6],[1505,6],[1548,6],[1630,6]]},"919":{"position":[[2524,7]]},"923":{"position":[[137,6],[211,6],[298,6],[401,6],[779,6],[941,6],[1040,6],[1242,6],[1381,6],[1505,6],[1548,6],[1630,6]]},"934":{"position":[[137,6],[211,6],[298,6],[401,6],[779,6],[941,6],[1040,6],[1242,6],[1381,6],[1505,6],[1548,6],[1630,6]]},"947":{"position":[[269,7],[383,6],[546,6],[618,6]]},"950":{"position":[[137,6],[211,6],[298,6],[401,6],[779,6],[941,6],[1040,6],[1242,6],[1381,6],[1505,6],[1548,6],[1630,6]]},"959":{"position":[[128,6],[320,6],[482,6],[537,6]]},"968":{"position":[[137,6],[211,6],[298,6],[401,6],[779,6],[941,6],[1040,6],[1242,6],[1381,6],[1505,6],[1548,6],[1630,6]]},"982":{"position":[[130,6],[322,6],[484,6],[539,6]]},"991":{"position":[[400,6],[552,6],[668,6],[891,6]]},"997":{"position":[[114,6],[208,6],[290,6],[450,6],[505,6]]},"1008":{"position":[[1721,6]]},"1009":{"position":[[335,6],[463,6],[615,6],[731,6],[987,6],[1361,6],[1492,6],[1747,6],[1802,6]]},"1015":{"position":[[378,6],[537,6],[592,6]]},"1021":{"position":[[409,6],[473,6],[586,6],[686,6],[816,6],[1075,6],[1769,6],[2115,6]]},"1028":{"position":[[187,6],[325,6],[487,6],[542,6]]},"1034":{"position":[[191,6],[257,6],[343,6],[400,6],[477,6],[637,6],[866,6]]},"1035":{"position":[[95,6],[164,6]]},"1045":{"position":[[144,6],[218,6],[283,6],[386,6],[789,6],[969,6],[1124,6],[1167,6]]},"1053":{"position":[[144,6],[218,6],[283,6],[386,6],[789,6],[969,6],[1124,6],[1167,6]]},"1061":{"position":[[144,6],[218,6],[283,6],[386,6],[789,6],[969,6],[1124,6],[1167,6]]},"1070":{"position":[[396,6],[502,6],[620,6],[763,6],[1098,6],[1153,6]]},"1076":{"position":[[190,6],[333,6],[731,6],[880,6],[935,6]]},"1085":{"position":[[476,6],[602,6],[687,6],[976,6],[1131,6],[1331,6],[1466,6],[1521,6]]},"1094":{"position":[[128,6],[221,6],[281,6],[387,6],[552,6],[607,6]]},"1101":{"position":[[96,6],[157,6],[221,6],[392,6],[447,6]]},"1107":{"position":[[252,6],[359,6],[507,6],[562,6]]},"1113":{"position":[[103,6],[161,6],[316,6],[581,6],[636,6]]},"1125":{"position":[[139,6],[246,6],[316,6],[475,6],[606,6]]},"1133":{"position":[[160,6],[247,6],[358,6],[469,6],[589,6],[716,6],[946,6],[1155,6],[1303,6],[1358,6],[1496,6]]},"1138":{"position":[[344,6],[430,6],[507,6],[710,6],[776,6],[1153,6],[1264,6],[1475,6],[1701,6],[1836,6]]},"1144":{"position":[[113,6],[209,6],[317,6],[382,6],[473,6],[550,6],[867,6],[1066,6],[1073,6],[1134,6],[1353,6]]},"1151":{"position":[[186,6],[242,6],[319,6],[504,6],[696,6],[825,6],[956,6],[1051,6],[1207,6],[1298,6],[1407,6],[1612,6]]},"1162":{"position":[[139,6],[246,6],[315,6],[398,6],[432,6],[570,6],[695,6],[727,6],[840,6],[938,6]]},"1164":{"position":[[231,6],[245,6],[295,6],[340,6],[413,6],[445,6],[480,6],[516,6],[536,6],[579,7],[612,7],[654,6]]},"1170":{"position":[[113,6],[209,6],[317,6],[382,6],[473,6],[550,6],[867,6],[1278,6]]},"1172":{"position":[[397,6],[446,6],[499,6],[598,6],[687,6],[735,6],[826,6],[909,6],[929,6]]},"1179":{"position":[[156,6],[281,6],[328,6],[523,6],[578,6],[703,6],[883,6],[1106,6],[1238,6]]},"1188":{"position":[[207,6],[276,6],[346,6],[420,6],[595,6],[673,6],[773,6],[850,6]]},"1196":{"position":[[238,6],[369,6],[462,6],[697,6],[990,6]]},"1200":{"position":[[30,6],[244,6]]},"1206":{"position":[[130,6],[189,6],[278,6],[335,6],[499,6],[553,6],[672,6],[750,6],[795,6],[1021,6],[1161,6]]},"1213":{"position":[[113,6],[237,6],[328,6],[405,6],[743,6],[750,6],[811,6],[1030,6]]},"1220":{"position":[[113,6],[237,6],[328,6],[405,6],[955,6]]},"1222":{"position":[[397,6],[446,6],[499,6],[598,6],[687,6],[735,6],[826,6],[909,6],[929,6]]},"1230":{"position":[[172,6],[302,6],[447,6],[565,6],[1279,6],[1358,6]]},"1239":{"position":[[107,6],[183,6]]},"1240":{"position":[[134,6]]},"1247":{"position":[[343,6],[473,6],[639,6],[773,6],[1136,6]]},"1253":{"position":[[178,6],[251,6],[307,6],[384,6],[495,6]]},"1260":{"position":[[142,6],[209,6],[410,6],[505,6],[624,6],[755,6],[846,6],[955,6],[1136,6]]},"1267":{"position":[[159,6],[240,6],[296,6],[360,6],[594,6]]},"1269":{"position":[[101,6]]},"1275":{"position":[[203,8]]},"1276":{"position":[[184,6]]},"1277":{"position":[[204,6],[319,6],[410,6],[495,6],[648,6],[974,6],[1155,6]]},"1285":{"position":[[127,6],[249,6],[326,6],[382,6],[741,6],[954,6],[1081,6],[1210,6],[1322,6]]},"1286":{"position":[[2671,6]]},"1289":{"position":[[1712,7]]},"1292":{"position":[[5814,6]]},"1300":{"position":[[127,6],[249,6],[326,6],[382,6],[741,6],[954,6],[1081,6],[1210,6],[1322,6]]},"1301":{"position":[[2507,6]]},"1306":{"position":[[5814,6]]},"1310":{"position":[[1033,7]]},"1313":{"position":[[127,6],[240,6],[317,6],[520,6],[586,6],[808,6],[1019,6],[1245,6],[1380,6]]},"1317":{"position":[[937,8]]},"1324":{"position":[[127,6],[249,6],[326,6],[382,6],[741,6],[954,6],[1081,6],[1210,6],[1322,6]]},"1325":{"position":[[2671,6]]},"1329":{"position":[[5814,6]]},"1337":{"position":[[127,6],[240,6],[317,6],[520,6],[586,6],[808,6],[1019,6],[1245,6],[1380,6]]},"1341":{"position":[[937,8]]},"1348":{"position":[[127,6],[240,6],[317,6],[520,6],[586,6],[808,6],[1019,6],[1245,6],[1380,6]]},"1352":{"position":[[937,8]]},"1356":{"position":[[169,6],[378,6],[1168,6],[1413,6],[1523,6]]},"1362":{"position":[[296,6],[363,6],[437,6],[569,6],[651,6],[736,6],[788,6]]},"1367":{"position":[[188,6]]},"1376":{"position":[[127,6],[249,6],[326,6],[382,6],[586,6]]},"1386":{"position":[[212,6],[302,6],[493,6],[584,6],[628,6],[685,6],[835,6],[893,6],[987,6],[1076,6],[1176,6],[1253,6]]},"1400":{"position":[[127,6],[249,6],[326,6],[382,6],[586,6]]},"1411":{"position":[[127,6],[249,6],[326,6],[382,6],[586,6]]},"1420":{"position":[[89,6],[150,6],[219,6],[272,6],[331,6],[381,6],[439,6],[496,6],[532,6],[623,6],[723,6],[800,6]]},"1427":{"position":[[127,6],[181,6],[258,6],[461,6],[527,6],[779,6],[1005,6],[1140,6]]},"1432":{"position":[[965,8]]},"1452":{"position":[[569,6],[707,6],[928,6],[1143,6],[1560,6]]},"1457":{"position":[[97,6],[166,6]]},"1463":{"position":[[367,6]]},"1464":{"position":[[223,6]]},"1465":{"position":[[518,6]]},"1466":{"position":[[182,6]]},"1467":{"position":[[525,6],[2196,6]]},"1474":{"position":[[554,6],[637,6],[770,6],[906,6]]},"1475":{"position":[[425,6]]},"1476":{"position":[[233,6],[1299,6],[1363,6]]},"1477":{"position":[[1003,6],[3225,6],[3782,6]]},"1480":{"position":[[705,6]]}},"keywords":{}}],["stringfield",{"_index":5839,"title":{},"content":{"1200":{"position":[[727,11]]},"1275":{"position":[[440,12]]}},"keywords":{}}],["stringvalu",{"_index":5944,"title":{},"content":{"1275":{"position":[[453,11]]}},"keywords":{}}],["stripe",{"_index":3382,"title":{"1072":{"position":[[0,6]]}},"content":{"364":{"position":[[3344,6]]},"1073":{"position":[[56,6]]},"1074":{"position":[[20,6],[54,6]]},"1075":{"position":[[250,6]]},"1076":{"position":[[88,6],[232,6],[836,6]]},"1077":{"position":[[126,6]]}},"keywords":{}}],["stripe:dev",{"_index":3383,"title":{},"content":{"364":{"position":[[3397,10]]},"1078":{"position":[[89,10]]}},"keywords":{}}],["strive",{"_index":1448,"title":{},"content":{"101":{"position":[[263,7]]}},"keywords":{}}],["strong",{"_index":2135,"title":{},"content":{"191":{"position":[[531,6]]},"240":{"position":[[493,6]]},"332":{"position":[[110,6],[655,6]]}},"keywords":{}}],["strongest",{"_index":4270,"title":{},"content":{"595":{"position":[[1070,9]]}},"keywords":{}}],["strongli",{"_index":1466,"title":{},"content":{"102":{"position":[[364,8]]},"281":{"position":[[2451,8]]},"429":{"position":[[323,8]]},"750":{"position":[[262,8]]},"766":{"position":[[262,8]]},"789":{"position":[[296,8]]},"807":{"position":[[296,8]]},"823":{"position":[[296,8]]},"1461":{"position":[[1691,8]]}},"keywords":{}}],["structur",{"_index":728,"title":{},"content":{"41":{"position":[[385,10]]},"56":{"position":[[1807,9]]},"66":{"position":[[429,9]]},"87":{"position":[[23,10]]},"120":{"position":[[1954,9]]},"156":{"position":[[71,9],[498,9]]},"162":{"position":[[1435,10],[1582,9]]},"165":{"position":[[480,11]]},"197":{"position":[[113,9]]},"218":{"position":[[1954,9]]},"227":{"position":[[134,10],[164,9]]},"228":{"position":[[825,10]]},"229":{"position":[[519,10]]},"239":{"position":[[1176,10],[1433,9],[2087,10],[2646,10]]},"254":{"position":[[20,9]]},"263":{"position":[[909,9]]},"281":{"position":[[2799,11],[3221,11]]},"291":{"position":[[1341,10],[1464,10]]},"296":{"position":[[20,9],[1145,9]]},"301":{"position":[[913,10]]},"302":{"position":[[1266,10],[1384,10]]},"314":{"position":[[20,9]]},"427":{"position":[[218,9]]},"690":{"position":[[283,9]]},"1008":{"position":[[1316,9],[1986,9]]},"1020":{"position":[[1013,9]]},"1275":{"position":[[82,9],[371,10]]},"1379":{"position":[[3782,9]]},"1403":{"position":[[3782,9]]},"1414":{"position":[[3782,9]]},"1461":{"position":[[1020,9]]}},"keywords":{}}],["struggl",{"_index":2489,"title":{},"content":{"232":{"position":[[1029,9]]}},"keywords":{}}],["stub",{"_index":969,"title":{},"content":{"64":{"position":[[792,4]]},"94":{"position":[[544,4],[959,4]]},"183":{"position":[[721,7]]},"266":{"position":[[451,7]]},"267":{"position":[[1089,7]]},"268":{"position":[[1091,7]]},"269":{"position":[[662,7]]},"270":{"position":[[1607,4]]},"281":{"position":[[736,4]]},"315":{"position":[[56,5]]}},"keywords":{}}],["stubinterfac",{"_index":2880,"title":{},"content":{"281":{"position":[[850,14]]}},"keywords":{}}],["stuck",{"_index":5056,"title":{},"content":{"922":{"position":[[1135,5],[3038,5]]}},"keywords":{}}],["style",{"_index":1235,"title":{},"content":{"83":{"position":[[1374,5]]}},"keywords":{}}],["su",{"_index":6534,"title":{},"content":{"1452":{"position":[[1442,3]]}},"keywords":{}}],["su)nday",{"_index":6556,"title":{},"content":{"1452":{"position":[[4165,9]]}},"keywords":{}}],["sub",{"_index":1909,"title":{},"content":{"162":{"position":[[258,3],[1475,3]]},"338":{"position":[[244,3]]},"1008":{"position":[[1345,3],[1385,3]]},"1467":{"position":[[721,3]]}},"keywords":{}}],["sub"",{"_index":5891,"title":{},"content":{"1230":{"position":[[1006,10]]}},"keywords":{}}],["sub/directory/flow.yaml",{"_index":1284,"title":{},"content":{"87":{"position":[[288,23]]}},"keywords":{}}],["subclass_orig",{"_index":6206,"title":{},"content":{"1292":{"position":[[5857,13]]},"1306":{"position":[[5857,13]]},"1329":{"position":[[5857,13]]}},"keywords":{}}],["subcollect",{"_index":4236,"title":{},"content":{"590":{"position":[[271,14],[407,13]]}},"keywords":{}}],["subcommand",{"_index":898,"title":{"60":{"position":[[8,12]]}},"content":{"60":{"position":[[36,11],[127,12],[168,11],[1088,11],[1209,12],[1251,11]]},"61":{"position":[[303,11]]},"341":{"position":[[68,11],[571,11]]},"1471":{"position":[[36,11]]}},"keywords":{}}],["subdirectori",{"_index":946,"title":{"1019":{"position":[[0,14]]}},"content":{"63":{"position":[[676,15]]},"64":{"position":[[442,12]]},"221":{"position":[[973,12]]},"222":{"position":[[218,12]]},"223":{"position":[[184,12]]},"224":{"position":[[237,12]]},"263":{"position":[[1097,12]]},"270":{"position":[[1746,12]]},"274":{"position":[[1684,14]]},"1019":{"position":[[128,14],[253,14]]},"1021":{"position":[[783,14]]},"1298":{"position":[[184,12]]},"1322":{"position":[[218,12]]},"1335":{"position":[[218,12]]},"1346":{"position":[[184,12]]}},"keywords":{}}],["subdivid",{"_index":90,"title":{},"content":{"2":{"position":[[559,11]]},"49":{"position":[[454,10]]},"101":{"position":[[523,9]]}},"keywords":{}}],["subdivis",{"_index":1458,"title":{},"content":{"101":{"position":[[599,12]]}},"keywords":{}}],["subdomain",{"_index":5387,"title":{},"content":{"1107":{"position":[[268,10],[279,9],[310,9]]},"1108":{"position":[[215,10]]},"1130":{"position":[[1,9],[98,10]]},"1131":{"position":[[1,9]]},"1133":{"position":[[962,10],[973,9],[1004,9],[1144,10]]},"1134":{"position":[[235,10]]}},"keywords":{}}],["subdomain.email",{"_index":5462,"title":{},"content":{"1131":{"position":[[98,15]]}},"keywords":{}}],["subgraph",{"_index":1522,"title":{},"content":{"107":{"position":[[821,8],[925,8]]}},"keywords":{}}],["subject",{"_index":3217,"title":{"337":{"position":[[0,9]]}},"content":{"337":{"position":[[58,8],[137,7],[226,8]]},"341":{"position":[[267,7],[412,7]]},"1292":{"position":[[5903,7]]},"1306":{"position":[[5903,7]]},"1329":{"position":[[5903,7]]}},"keywords":{}}],["submissionslin",{"_index":4391,"title":{},"content":{"649":{"position":[[402,15]]}},"keywords":{}}],["submissionsmarket",{"_index":4397,"title":{},"content":{"649":{"position":[[627,20]]}},"keywords":{}}],["submit",{"_index":4113,"title":{},"content":{"554":{"position":[[443,10]]}},"keywords":{}}],["submultiset",{"_index":5541,"title":{},"content":{"1140":{"position":[[715,11]]},"1316":{"position":[[715,11]]},"1340":{"position":[[715,11]]},"1351":{"position":[[715,11]]},"1379":{"position":[[3842,11]]},"1403":{"position":[[3842,11]]},"1414":{"position":[[3842,11]]},"1431":{"position":[[738,11]]}},"keywords":{}}],["subnet",{"_index":2474,"title":{},"content":{"224":{"position":[[802,7]]}},"keywords":{}}],["subpartit",{"_index":6211,"title":{},"content":{"1292":{"position":[[5947,12],[6003,13]]},"1306":{"position":[[5947,12],[6003,13]]},"1329":{"position":[[5947,12],[6003,13]]}},"keywords":{}}],["subscrib",{"_index":2184,"title":{},"content":{"197":{"position":[[373,9]]},"601":{"position":[[490,9]]},"602":{"position":[[209,11]]},"1440":{"position":[[1311,10]]},"1455":{"position":[[377,10],[453,11],[624,10]]},"1456":{"position":[[34,10]]},"1457":{"position":[[54,9]]}},"keywords":{}}],["subscribeemail",{"_index":4456,"title":{},"content":{"697":{"position":[[184,14]]}},"keywords":{}}],["subscript",{"_index":3691,"title":{},"content":{"435":{"position":[[75,12],[89,12]]},"436":{"position":[[77,12],[130,13],[181,12],[229,12]]},"438":{"position":[[1235,12],[1271,12]]},"598":{"position":[[183,13],[241,14]]},"601":{"position":[[302,12],[361,12]]},"602":{"position":[[224,13],[336,14]]},"649":{"position":[[175,12],[569,12]]},"654":{"position":[[612,12],[673,12]]},"1078":{"position":[[1969,13]]},"1230":{"position":[[630,13],[714,12],[899,12],[929,12]]}},"keywords":{}}],["subscription_item",{"_index":5329,"title":{},"content":{"1078":{"position":[[1871,18]]}},"keywords":{}}],["subscription_typ",{"_index":4399,"title":{},"content":{"654":{"position":[[572,18]]}},"keywords":{}}],["subscriptionprefix",{"_index":4289,"title":{},"content":{"601":{"position":[[282,19]]}},"keywords":{}}],["subscriptionscustomersinvoicesordersplansaddonsitemsitem",{"_index":3768,"title":{},"content":{"457":{"position":[[73,56]]}},"keywords":{}}],["subsequ",{"_index":1010,"title":{},"content":{"67":{"position":[[1106,12]]},"133":{"position":[[317,10],[559,10]]},"209":{"position":[[638,10]]}},"keywords":{}}],["subset",{"_index":491,"title":{},"content":{"17":{"position":[[156,6]]},"68":{"position":[[952,6]]},"106":{"position":[[224,6]]},"107":{"position":[[351,6]]},"122":{"position":[[401,6],[1674,6]]},"123":{"position":[[48,6]]},"190":{"position":[[1253,6],[2023,6]]},"320":{"position":[[912,7]]},"517":{"position":[[426,6]]},"985":{"position":[[437,6]]},"1000":{"position":[[615,6]]},"1140":{"position":[[760,6]]},"1316":{"position":[[760,6]]},"1340":{"position":[[760,6]]},"1351":{"position":[[760,6]]},"1431":{"position":[[783,6]]},"1461":{"position":[[2142,6]]},"1470":{"position":[[16,6]]},"1472":{"position":[[255,6]]}},"keywords":{}}],["substanti",{"_index":3109,"title":{},"content":{"319":{"position":[[1454,13]]}},"keywords":{}}],["substitut",{"_index":2165,"title":{},"content":{"192":{"position":[[1037,11]]},"918":{"position":[[1260,10]]},"1388":{"position":[[629,10]]}},"keywords":{}}],["substr",{"_index":5545,"title":{},"content":{"1140":{"position":[[799,9]]},"1316":{"position":[[799,9]]},"1340":{"position":[[799,9]]},"1351":{"position":[[799,9]]},"1379":{"position":[[3905,9]]},"1403":{"position":[[3905,9]]},"1414":{"position":[[3905,9]]},"1431":{"position":[[822,9]]}},"keywords":{}}],["substr($meta$dt,1,10",{"_index":2773,"title":{},"content":{"254":{"position":[[705,21],[2762,21],[3423,21]]}},"keywords":{}}],["substring_reg",{"_index":6343,"title":{},"content":{"1379":{"position":[[3967,13]]},"1403":{"position":[[3967,13]]},"1414":{"position":[[3967,13]]}},"keywords":{}}],["substring_regex",{"_index":5546,"title":{},"content":{"1140":{"position":[[842,15]]},"1316":{"position":[[842,15]]},"1340":{"position":[[842,15]]},"1351":{"position":[[842,15]]},"1431":{"position":[[865,15]]}},"keywords":{}}],["subsystem",{"_index":868,"title":{},"content":{"58":{"position":[[82,9]]}},"keywords":{}}],["subtleti",{"_index":1079,"title":{},"content":{"74":{"position":[[305,8]]}},"keywords":{}}],["subtre",{"_index":5161,"title":{},"content":{"1008":{"position":[[1219,7]]}},"keywords":{}}],["succe",{"_index":5547,"title":{},"content":{"1140":{"position":[[883,8]]},"1316":{"position":[[883,8]]},"1340":{"position":[[883,8]]},"1351":{"position":[[883,8]]},"1431":{"position":[[906,8]]}},"keywords":{}}],["success",{"_index":2088,"title":{},"content":{"183":{"position":[[4524,10]]},"240":{"position":[[4212,10]]},"291":{"position":[[819,11]]},"302":{"position":[[819,11]]}},"keywords":{}}],["successfulli",{"_index":1033,"title":{},"content":{"68":{"position":[[1476,12]]},"140":{"position":[[363,12]]},"217":{"position":[[2232,13]]},"218":{"position":[[2165,13]]},"240":{"position":[[4302,12]]},"241":{"position":[[28,12]]},"255":{"position":[[1164,12]]},"264":{"position":[[578,13]]},"278":{"position":[[1496,12]]},"290":{"position":[[1712,13]]},"291":{"position":[[1975,13]]},"295":{"position":[[1777,12]]},"296":{"position":[[6857,12]]},"301":{"position":[[1686,13]]},"302":{"position":[[1887,13]]},"316":{"position":[[1489,12]]},"922":{"position":[[1738,12]]},"1447":{"position":[[746,13]]},"1471":{"position":[[518,12]]}},"keywords":{}}],["such",{"_index":334,"title":{},"content":{"11":{"position":[[1369,4]]},"13":{"position":[[1201,4]]},"17":{"position":[[289,4]]},"50":{"position":[[79,4]]},"52":{"position":[[146,4]]},"55":{"position":[[374,4]]},"64":{"position":[[1016,4]]},"67":{"position":[[1621,4]]},"74":{"position":[[82,4]]},"81":{"position":[[292,4],[452,4],[563,4],[2246,4]]},"82":{"position":[[57,4],[601,4]]},"88":{"position":[[431,4]]},"97":{"position":[[489,4]]},"98":{"position":[[367,4],[527,4]]},"114":{"position":[[836,4]]},"115":{"position":[[49,4]]},"122":{"position":[[205,4],[1027,4]]},"161":{"position":[[250,4]]},"162":{"position":[[1446,4]]},"163":{"position":[[162,4]]},"198":{"position":[[428,4]]},"207":{"position":[[548,4]]},"208":{"position":[[1200,5],[1290,4]]},"221":{"position":[[1178,4]]},"222":{"position":[[423,4]]},"223":{"position":[[389,4]]},"224":{"position":[[442,4]]},"237":{"position":[[1080,4]]},"239":{"position":[[989,4]]},"254":{"position":[[2462,4]]},"259":{"position":[[916,4],[2497,4]]},"281":{"position":[[3182,4]]},"314":{"position":[[2003,4]]},"326":{"position":[[808,4]]},"329":{"position":[[404,4],[444,4],[510,4],[637,4]]},"373":{"position":[[285,5]]},"417":{"position":[[376,4]]},"438":{"position":[[376,4]]},"502":{"position":[[836,4]]},"534":{"position":[[981,4]]},"545":{"position":[[376,4]]},"556":{"position":[[359,5],[422,4]]},"640":{"position":[[261,4]]},"659":{"position":[[44,4]]},"660":{"position":[[104,4]]},"723":{"position":[[149,4]]},"757":{"position":[[2513,4]]},"760":{"position":[[129,4]]},"762":{"position":[[422,4]]},"763":{"position":[[145,4]]},"764":{"position":[[316,4]]},"770":{"position":[[2513,4]]},"773":{"position":[[129,4]]},"775":{"position":[[422,4]]},"776":{"position":[[145,4]]},"777":{"position":[[316,4]]},"782":{"position":[[150,4]]},"797":{"position":[[2521,4]]},"800":{"position":[[129,4]]},"802":{"position":[[422,4]]},"803":{"position":[[145,4]]},"804":{"position":[[314,4]]},"812":{"position":[[2521,4]]},"815":{"position":[[129,4]]},"817":{"position":[[422,4]]},"818":{"position":[[145,4]]},"819":{"position":[[314,4]]},"828":{"position":[[2521,4]]},"831":{"position":[[129,4]]},"833":{"position":[[422,4]]},"834":{"position":[[145,4]]},"835":{"position":[[314,4]]},"879":{"position":[[193,4]]},"1021":{"position":[[1413,4]]},"1253":{"position":[[150,4]]},"1298":{"position":[[389,4]]},"1322":{"position":[[423,4]]},"1335":{"position":[[423,4]]},"1346":{"position":[[389,4]]},"1391":{"position":[[272,4]]},"1437":{"position":[[161,4],[896,4]]},"1438":{"position":[[205,4],[460,4]]},"1439":{"position":[[188,4]]},"1440":{"position":[[15,4]]},"1465":{"position":[[81,5]]},"1467":{"position":[[2030,4]]}},"keywords":{}}],["sudo",{"_index":878,"title":{},"content":{"58":{"position":[[323,4],[453,4],[499,4],[632,4]]},"169":{"position":[[564,4],[694,4],[743,4],[876,4]]}},"keywords":{}}],["suffic",{"_index":4643,"title":{},"content":{"761":{"position":[[515,7]]},"774":{"position":[[515,7]]},"801":{"position":[[521,7]]},"816":{"position":[[521,7]]},"832":{"position":[[521,7]]}},"keywords":{}}],["suffici",{"_index":2275,"title":{},"content":{"209":{"position":[[1721,10]]},"280":{"position":[[137,10]]},"480":{"position":[[212,11]]},"515":{"position":[[280,10]]},"879":{"position":[[1337,11]]}},"keywords":{}}],["suffix",{"_index":406,"title":{},"content":{"13":{"position":[[1193,7]]},"14":{"position":[[1108,6]]},"82":{"position":[[3744,6],[3958,7],[4008,7],[4057,6],[4270,6],[5014,6]]},"208":{"position":[[1434,6]]},"548":{"position":[[686,6]]},"1206":{"position":[[1013,7]]}},"keywords":{}}],["suggest",{"_index":1436,"title":{},"content":{"99":{"position":[[827,7]]},"762":{"position":[[188,8]]},"775":{"position":[[188,8]]},"802":{"position":[[188,8]]},"817":{"position":[[188,8]]},"833":{"position":[[188,8]]}},"keywords":{}}],["suit",{"_index":1620,"title":{},"content":{"114":{"position":[[771,6]]},"324":{"position":[[896,6]]},"331":{"position":[[476,6]]},"975":{"position":[[168,6]]}},"keywords":{}}],["suitabl",{"_index":1864,"title":{},"content":{"157":{"position":[[72,8]]},"366":{"position":[[710,8],[1042,8]]},"477":{"position":[[518,8]]},"480":{"position":[[496,8],[1408,8]]},"598":{"position":[[482,8]]},"821":{"position":[[1212,8]]},"903":{"position":[[736,8],[1068,8]]},"915":{"position":[[736,8],[1068,8]]},"930":{"position":[[736,8],[1068,8]]},"963":{"position":[[890,8],[1222,8]]},"1182":{"position":[[443,8]]},"1191":{"position":[[445,8]]},"1262":{"position":[[445,8]]},"1389":{"position":[[444,8]]}},"keywords":{}}],["suiteanalyt",{"_index":4727,"title":{"837":{"position":[[9,14]]},"845":{"position":[[0,14]]},"846":{"position":[[0,14]]}},"content":{"843":{"position":[[274,14]]},"846":{"position":[[14,14]]},"848":{"position":[[194,14]]},"849":{"position":[[730,14],[849,14],[2488,14],[3002,14]]}},"keywords":{}}],["suiteanalytics_data_sourc",{"_index":4750,"title":{},"content":{"842":{"position":[[312,27]]},"843":{"position":[[300,27]]}},"keywords":{}}],["suitecloud",{"_index":4817,"title":{},"content":{"849":{"position":[[457,10]]}},"keywords":{}}],["suiteql",{"_index":4807,"title":{"845":{"position":[[18,7]]},"847":{"position":[[0,7]]}},"content":{"849":{"position":[[587,7],[1435,7]]}},"keywords":{}}],["suitetalk",{"_index":4806,"title":{"844":{"position":[[9,9]]}},"content":{"849":{"position":[[614,9]]}},"keywords":{}}],["sum",{"_index":1611,"title":{"1466":{"position":[[0,3]]}},"content":{"114":{"position":[[270,7]]},"115":{"position":[[753,7],[1474,7]]},"121":{"position":[[1093,4]]},"132":{"position":[[355,3],[453,7],[613,7]]},"164":{"position":[[503,4],[555,3]]},"166":{"position":[[463,3]]},"183":{"position":[[1813,3],[2036,3],[3619,3]]},"254":{"position":[[408,3],[460,3],[1476,3],[1528,3],[1921,4],[3798,3]]},"281":{"position":[[1843,3],[1988,7],[2162,3]]},"1140":{"position":[[922,3]]},"1316":{"position":[[922,3]]},"1340":{"position":[[922,3]]},"1351":{"position":[[922,3]]},"1379":{"position":[[4025,3]]},"1403":{"position":[[4025,3]]},"1414":{"position":[[4025,3]]},"1431":{"position":[[945,3]]},"1440":{"position":[[530,3],[622,3]]},"1465":{"position":[[787,4],[802,7],[970,3],[1040,3],[1115,3],[1239,4],[1289,4],[1557,4]]},"1466":{"position":[[0,3],[4,3],[200,3],[346,3],[407,3]]},"1467":{"position":[[760,7],[814,3],[875,3]]},"1476":{"position":[[1405,3]]},"1477":{"position":[[1232,6],[1329,3],[3451,4],[3733,4],[3824,3]]}},"keywords":{}}],["summar",{"_index":5910,"title":{},"content":{"1243":{"position":[[585,9]]}},"keywords":{}}],["summari",{"_index":3735,"title":{},"content":{"443":{"position":[[310,7]]}},"keywords":{}}],["sunday",{"_index":6536,"title":{},"content":{"1452":{"position":[[1454,7],[4396,7]]}},"keywords":{}}],["supabas",{"_index":5122,"title":{"961":{"position":[[0,8]]}},"content":{"962":{"position":[[29,8]]},"963":{"position":[[15,8],[73,8],[145,8]]},"964":{"position":[[13,8],[410,8],[789,8]]}},"keywords":{}}],["super",{"_index":4372,"title":{},"content":{"645":{"position":[[240,5]]},"652":{"position":[[240,5]]},"1292":{"position":[[6055,5]]},"1306":{"position":[[6055,5]]},"1329":{"position":[[6055,5]]}},"keywords":{}}],["supersecret",{"_index":6270,"title":{},"content":{"1357":{"position":[[120,11]]}},"keywords":{}}],["supersed",{"_index":740,"title":{},"content":{"42":{"position":[[477,10]]}},"keywords":{}}],["superus",{"_index":5034,"title":{},"content":{"917":{"position":[[115,9]]},"965":{"position":[[115,9]]}},"keywords":{}}],["supplement",{"_index":132,"title":{},"content":{"3":{"position":[[753,12],[992,12]]},"122":{"position":[[1792,10]]},"286":{"position":[[239,12]]},"329":{"position":[[539,13]]},"864":{"position":[[1412,12],[1481,12]]}},"keywords":{}}],["supplementari",{"_index":2796,"title":{},"content":{"267":{"position":[[1643,13]]}},"keywords":{}}],["suppli",{"_index":3440,"title":{},"content":{"374":{"position":[[55,6]]},"385":{"position":[[676,9]]},"432":{"position":[[968,6],[1063,6],[1132,6]]},"513":{"position":[[118,9]]},"988":{"position":[[119,6]]},"1003":{"position":[[119,6]]},"1227":{"position":[[264,6]]},"1289":{"position":[[1285,6]]},"1298":{"position":[[1117,6]]},"1303":{"position":[[996,6]]},"1310":{"position":[[606,6]]},"1322":{"position":[[1504,6]]},"1335":{"position":[[1152,6]]},"1346":{"position":[[1118,6]]}},"keywords":{}}],["support",{"_index":616,"title":{"95":{"position":[[0,9]]},"353":{"position":[[0,9]]},"374":{"position":[[0,9]]},"381":{"position":[[0,9]]},"421":{"position":[[0,9]]},"427":{"position":[[0,9]]},"443":{"position":[[0,9]]},"451":{"position":[[0,9]]},"457":{"position":[[0,9]]},"463":{"position":[[0,9]]},"469":{"position":[[0,9]]},"499":{"position":[[0,9]]},"506":{"position":[[0,9]]},"512":{"position":[[0,9]]},"520":{"position":[[0,9]]},"529":{"position":[[0,9]]},"537":{"position":[[0,9]]},"550":{"position":[[0,9]]},"568":{"position":[[0,9]]},"580":{"position":[[0,9]]},"605":{"position":[[0,9]]},"622":{"position":[[0,9]]},"628":{"position":[[0,9]]},"634":{"position":[[0,9]]},"642":{"position":[[0,9]]},"649":{"position":[[0,9]]},"667":{"position":[[0,9]]},"682":{"position":[[0,9]]},"697":{"position":[[0,9]]},"703":{"position":[[0,9]]},"709":{"position":[[0,9]]},"715":{"position":[[0,9]]},"729":{"position":[[0,9]]},"738":{"position":[[0,9]]},"744":{"position":[[0,9]]},"788":{"position":[[0,9]]},"838":{"position":[[0,9]]},"854":{"position":[[0,9]]},"882":{"position":[[0,9]]},"888":{"position":[[0,9]]},"899":{"position":[[0,9]]},"902":{"position":[[0,9]]},"914":{"position":[[0,9]]},"929":{"position":[[0,9]]},"956":{"position":[[0,9]]},"962":{"position":[[0,9]]},"979":{"position":[[0,9]]},"985":{"position":[[0,9]]},"994":{"position":[[0,9]]},"1000":{"position":[[0,9]]},"1012":{"position":[[0,9]]},"1025":{"position":[[0,9]]},"1039":{"position":[[0,9]]},"1049":{"position":[[0,9]]},"1057":{"position":[[0,9]]},"1065":{"position":[[0,9]]},"1073":{"position":[[0,9]]},"1080":{"position":[[0,9]]},"1096":{"position":[[0,9]]},"1099":{"position":[[0,9]]},"1104":{"position":[[0,9]]},"1110":{"position":[[0,9]]},"1127":{"position":[[8,7]]},"1128":{"position":[[0,9]]}},"content":{"26":{"position":[[520,8]]},"34":{"position":[[662,7]]},"38":{"position":[[478,9]]},"53":{"position":[[6,8],[508,9]]},"68":{"position":[[1609,10]]},"72":{"position":[[712,7]]},"83":{"position":[[1162,8]]},"84":{"position":[[927,8]]},"95":{"position":[[270,8]]},"104":{"position":[[262,7]]},"114":{"position":[[714,7]]},"125":{"position":[[1321,7]]},"133":{"position":[[105,8]]},"138":{"position":[[829,10]]},"142":{"position":[[800,10]]},"162":{"position":[[302,7]]},"169":{"position":[[390,10]]},"175":{"position":[[213,7]]},"179":{"position":[[619,10]]},"191":{"position":[[1951,7]]},"193":{"position":[[594,9]]},"197":{"position":[[649,8]]},"198":{"position":[[587,8],[705,8]]},"199":{"position":[[293,8]]},"223":{"position":[[846,8]]},"240":{"position":[[1912,7]]},"278":{"position":[[709,9]]},"280":{"position":[[994,8]]},"320":{"position":[[92,8],[878,8],[1772,7]]},"321":{"position":[[1025,7]]},"325":{"position":[[670,8]]},"332":{"position":[[101,8]]},"353":{"position":[[23,8]]},"364":{"position":[[9,8],[3632,7]]},"366":{"position":[[1172,7]]},"370":{"position":[[1807,8]]},"374":{"position":[[8,8],[146,8]]},"379":{"position":[[195,7],[856,10],[1064,8],[1240,8]]},"381":{"position":[[34,10]]},"419":{"position":[[37,7],[1089,8],[1143,7]]},"421":{"position":[[34,9]]},"427":{"position":[[16,8],[295,7],[345,7]]},"429":{"position":[[451,8],[1346,9]]},"436":{"position":[[414,9]]},"440":{"position":[[53,7],[1105,8],[1159,7]]},"443":{"position":[[34,10]]},"451":{"position":[[34,9]]},"457":{"position":[[34,9]]},"463":{"position":[[34,9]]},"490":{"position":[[29,7]]},"496":{"position":[[232,7]]},"499":{"position":[[145,10],[232,10]]},"506":{"position":[[34,10]]},"512":{"position":[[34,10]]},"513":{"position":[[261,9]]},"515":{"position":[[305,7]]},"522":{"position":[[268,9]]},"529":{"position":[[246,10]]},"530":{"position":[[268,9]]},"534":{"position":[[1524,7]]},"547":{"position":[[38,7],[1090,8],[1145,7]]},"550":{"position":[[34,10]]},"551":{"position":[[260,9]]},"569":{"position":[[292,9]]},"574":{"position":[[656,9],[680,9]]},"580":{"position":[[34,10]]},"585":{"position":[[476,10]]},"593":{"position":[[555,8]]},"603":{"position":[[136,7]]},"605":{"position":[[34,10]]},"607":{"position":[[291,9]]},"614":{"position":[[275,9]]},"622":{"position":[[34,9]]},"628":{"position":[[34,9]]},"634":{"position":[[137,10],[224,10]]},"635":{"position":[[94,9],[134,7]]},"639":{"position":[[20,7]]},"640":{"position":[[125,9]]},"649":{"position":[[157,9],[537,9]]},"650":{"position":[[241,9]]},"655":{"position":[[360,9]]},"663":{"position":[[29,7]]},"667":{"position":[[34,9]]},"678":{"position":[[29,7]]},"682":{"position":[[34,9]]},"693":{"position":[[29,7]]},"697":{"position":[[34,9]]},"709":{"position":[[34,9]]},"715":{"position":[[34,10]]},"716":{"position":[[277,9]]},"731":{"position":[[234,9]]},"744":{"position":[[34,9]]},"760":{"position":[[288,10],[558,7],[695,10],[895,7]]},"773":{"position":[[288,10],[558,7],[695,10],[895,7]]},"788":{"position":[[16,8]]},"800":{"position":[[288,10],[558,7],[695,10],[895,7]]},"815":{"position":[[288,10],[558,7],[695,10],[895,7]]},"821":{"position":[[512,7]]},"831":{"position":[[288,10],[558,7],[695,10],[895,7]]},"847":{"position":[[23,9],[88,9]]},"854":{"position":[[34,10]]},"855":{"position":[[354,9]]},"872":{"position":[[58,9],[108,9]]},"879":{"position":[[385,10]]},"882":{"position":[[34,9]]},"888":{"position":[[34,9]]},"899":{"position":[[32,8]]},"902":{"position":[[16,8]]},"910":{"position":[[401,7]]},"912":{"position":[[528,7]]},"914":{"position":[[16,8]]},"919":{"position":[[648,7]]},"926":{"position":[[401,7]]},"929":{"position":[[16,8]]},"937":{"position":[[401,7]]},"953":{"position":[[401,7]]},"956":{"position":[[34,9]]},"962":{"position":[[16,8]]},"964":{"position":[[189,7]]},"971":{"position":[[401,7]]},"977":{"position":[[798,7]]},"979":{"position":[[34,9]]},"994":{"position":[[34,9]]},"1012":{"position":[[34,9]]},"1023":{"position":[[18,7],[1070,8],[1126,7]]},"1039":{"position":[[159,8]]},"1049":{"position":[[85,8]]},"1057":{"position":[[88,8]]},"1065":{"position":[[34,10]]},"1073":{"position":[[34,9]]},"1080":{"position":[[34,10]]},"1087":{"position":[[38,8]]},"1089":{"position":[[170,10]]},"1096":{"position":[[50,8]]},"1099":{"position":[[34,9]]},"1104":{"position":[[34,9]]},"1107":{"position":[[148,7]]},"1110":{"position":[[34,9]]},"1128":{"position":[[34,9]]},"1129":{"position":[[59,7]]},"1132":{"position":[[259,7]]},"1133":{"position":[[842,7]]},"1136":{"position":[[325,7]]},"1138":{"position":[[1098,8]]},"1149":{"position":[[354,10]]},"1153":{"position":[[16,8]]},"1158":{"position":[[16,8]]},"1162":{"position":[[1060,8]]},"1164":{"position":[[771,10]]},"1165":{"position":[[174,8]]},"1181":{"position":[[16,8]]},"1182":{"position":[[16,8]]},"1190":{"position":[[16,8]]},"1191":{"position":[[16,8]]},"1199":{"position":[[16,8]]},"1203":{"position":[[452,9]]},"1208":{"position":[[47,7]]},"1227":{"position":[[53,9]]},"1228":{"position":[[42,9]]},"1243":{"position":[[1302,9]]},"1256":{"position":[[16,8]]},"1262":{"position":[[16,8]]},"1271":{"position":[[16,8]]},"1272":{"position":[[142,8]]},"1276":{"position":[[10,8]]},"1282":{"position":[[168,8],[283,10]]},"1288":{"position":[[47,8],[257,10]]},"1290":{"position":[[16,8]]},"1298":{"position":[[846,8]]},"1304":{"position":[[16,8]]},"1310":{"position":[[178,8],[298,10]]},"1315":{"position":[[16,8]]},"1327":{"position":[[16,8]]},"1339":{"position":[[16,8]]},"1346":{"position":[[846,8]]},"1350":{"position":[[16,8]]},"1356":{"position":[[337,9]]},"1369":{"position":[[25,7]]},"1378":{"position":[[16,8]]},"1383":{"position":[[1899,7]]},"1388":{"position":[[16,8]]},"1389":{"position":[[16,8]]},"1402":{"position":[[16,8]]},"1413":{"position":[[16,8]]},"1422":{"position":[[16,8]]},"1426":{"position":[[369,10]]},"1430":{"position":[[16,8]]},"1435":{"position":[[811,8]]},"1439":{"position":[[393,7]]},"1459":{"position":[[658,8]]},"1461":{"position":[[627,7]]}},"keywords":{}}],["support:dev",{"_index":3391,"title":{},"content":{"364":{"position":[[3694,11]]},"1134":{"position":[[97,11]]}},"keywords":{}}],["support@estuary.dev",{"_index":2034,"title":{},"content":{"174":{"position":[[346,19]]},"490":{"position":[[128,19]]},"603":{"position":[[188,19]]},"663":{"position":[[128,19]]},"678":{"position":[[128,19]]},"693":{"position":[[128,19]]}},"keywords":{}}],["supported.a",{"_index":5513,"title":{},"content":{"1136":{"position":[[225,11]]}},"keywords":{}}],["supported.at",{"_index":6254,"title":{},"content":{"1309":{"position":[[225,12]]},"1332":{"position":[[225,12]]},"1343":{"position":[[225,12]]}},"keywords":{}}],["supported.maco",{"_index":1978,"title":{},"content":{"169":{"position":[[323,15]]}},"keywords":{}}],["supportedth",{"_index":5967,"title":{},"content":{"1281":{"position":[[135,12]]},"1295":{"position":[[135,12]]},"1319":{"position":[[135,12]]},"1372":{"position":[[135,12]]},"1396":{"position":[[135,12]]},"1406":{"position":[[135,12]]}},"keywords":{}}],["supportsjson",{"_index":1892,"title":{},"content":{"161":{"position":[[153,12]]}},"keywords":{}}],["suppos",{"_index":1057,"title":{},"content":{"71":{"position":[[250,7]]},"82":{"position":[[1325,7]]},"87":{"position":[[224,7]]},"121":{"position":[[1225,7]]},"128":{"position":[[343,7]]},"164":{"position":[[969,7]]}},"keywords":{}}],["suppressionsuppress",{"_index":5137,"title":{},"content":{"979":{"position":[[147,22]]}},"keywords":{}}],["sur",{"_index":1980,"title":{},"content":{"169":{"position":[[347,4]]}},"keywords":{}}],["sure",{"_index":1916,"title":{},"content":{"162":{"position":[[771,4],[2074,4]]},"166":{"position":[[652,4]]},"172":{"position":[[190,4]]},"173":{"position":[[958,4]]},"202":{"position":[[159,4]]},"203":{"position":[[30,4]]},"204":{"position":[[211,4]]},"206":{"position":[[750,4]]},"212":{"position":[[228,4]]},"232":{"position":[[886,4],[975,4]]},"237":{"position":[[563,4]]},"242":{"position":[[108,4]]},"243":{"position":[[222,4]]},"253":{"position":[[318,4]]},"255":{"position":[[1063,4]]},"259":{"position":[[435,4],[2129,4]]},"309":{"position":[[553,4]]},"313":{"position":[[318,4]]},"316":{"position":[[1388,4]]},"375":{"position":[[230,4]]},"385":{"position":[[708,4]]},"430":{"position":[[216,4]]},"478":{"position":[[486,4]]},"500":{"position":[[29,4]]},"548":{"position":[[477,4]]},"554":{"position":[[389,4]]},"562":{"position":[[29,4]]},"599":{"position":[[486,4]]},"840":{"position":[[640,4],[1494,4]]},"849":{"position":[[1115,4],[2385,4]]},"922":{"position":[[1699,4]]},"944":{"position":[[93,4]]},"964":{"position":[[445,4]]},"1008":{"position":[[874,4],[1596,4]]},"1032":{"position":[[1938,4]]},"1047":{"position":[[772,4]]},"1055":{"position":[[772,4]]},"1063":{"position":[[772,4]]},"1160":{"position":[[279,4]]},"1383":{"position":[[221,4]]},"1388":{"position":[[621,4]]},"1472":{"position":[[369,4]]}},"keywords":{}}],["surfac",{"_index":1871,"title":{},"content":{"158":{"position":[[768,9]]}},"keywords":{}}],["survey",{"_index":5263,"title":{"1064":{"position":[[0,6]]}},"content":{"1070":{"position":[[791,6],[805,6],[827,7]]},"1071":{"position":[[335,7]]}},"keywords":{}}],["survey_id",{"_index":5274,"title":{},"content":{"1070":{"position":[[779,11]]}},"keywords":{}}],["surveymonkey",{"_index":3384,"title":{},"content":{"364":{"position":[[3408,12]]},"1066":{"position":[[28,12]]},"1067":{"position":[[17,12],[168,12],[294,12],[473,12]]},"1068":{"position":[[5,12]]},"1069":{"position":[[250,12]]},"1070":{"position":[[370,12],[476,12],[594,12],[1039,12]]}},"keywords":{}}],["surveymonkey:dev",{"_index":3385,"title":{},"content":{"364":{"position":[[3467,16]]},"1071":{"position":[[159,16]]}},"keywords":{}}],["surveyssurvey",{"_index":5265,"title":{},"content":{"1065":{"position":[[46,13]]}},"keywords":{}}],["surveysview",{"_index":5269,"title":{},"content":{"1067":{"position":[[109,11]]}},"keywords":{}}],["suspect",{"_index":5016,"title":{},"content":{"910":{"position":[[36,7]]},"926":{"position":[[36,7]]},"937":{"position":[[36,7]]},"953":{"position":[[36,7]]},"971":{"position":[[36,7]]}},"keywords":{}}],["suspend",{"_index":2247,"title":{},"content":{"208":{"position":[[441,7]]},"240":{"position":[[3603,9]]},"1292":{"position":[[6105,7]]},"1306":{"position":[[6105,7]]},"1329":{"position":[[6105,7]]},"1388":{"position":[[415,7]]}},"keywords":{}}],["swagger",{"_index":3856,"title":{},"content":{"486":{"position":[[96,7]]},"658":{"position":[[96,7]]},"674":{"position":[[96,7]]},"689":{"position":[[96,7]]}},"keywords":{}}],["swap",{"_index":6218,"title":{},"content":{"1292":{"position":[[6113,5]]},"1306":{"position":[[6113,5]]},"1329":{"position":[[6113,5]]}},"keywords":{}}],["switch",{"_index":1757,"title":{},"content":{"135":{"position":[[974,6]]},"170":{"position":[[100,6]]},"496":{"position":[[256,10]]},"767":{"position":[[1675,6]]},"792":{"position":[[1617,6]]},"824":{"position":[[1739,6]]},"1292":{"position":[[6161,8]]},"1306":{"position":[[6161,8]]},"1329":{"position":[[6161,8]]}},"keywords":{}}],["sy",{"_index":4720,"title":{},"content":{"797":{"position":[[2468,3]]},"812":{"position":[[2468,3]]},"828":{"position":[[2468,3]]}},"keywords":{}}],["symbol",{"_index":3441,"title":{"1019":{"position":[[19,8]]}},"content":{"374":{"position":[[72,7],[157,7],[264,7],[398,7]]},"377":{"position":[[801,8],[1585,8],[1594,7],[1626,7]]},"378":{"position":[[221,8]]},"379":{"position":[[33,7],[136,8],[226,7]]},"1019":{"position":[[173,8],[235,8],[336,8]]},"1020":{"position":[[579,8],[662,8]]}},"keywords":{}}],["symmetr",{"_index":5552,"title":{},"content":{"1140":{"position":[[964,9]]},"1316":{"position":[[964,9]]},"1340":{"position":[[964,9]]},"1351":{"position":[[964,9]]},"1379":{"position":[[4075,9]]},"1403":{"position":[[4075,9]]},"1414":{"position":[[4075,9]]},"1431":{"position":[[987,9]]}},"keywords":{}}],["sync",{"_index":714,"title":{"1153":{"position":[[0,4]]},"1181":{"position":[[0,4]]},"1190":{"position":[[0,4]]},"1388":{"position":[[0,4]]},"1422":{"position":[[0,4]]},"1450":{"position":[[16,4]]},"1451":{"position":[[29,4]]},"1452":{"position":[[14,4]]},"1453":{"position":[[10,6]]}},"content":{"40":{"position":[[134,4]]},"126":{"position":[[358,4]]},"264":{"position":[[316,4]]},"351":{"position":[[468,4]]},"359":{"position":[[446,4]]},"370":{"position":[[2169,4]]},"387":{"position":[[1469,4]]},"402":{"position":[[807,6]]},"408":{"position":[[678,4]]},"417":{"position":[[199,4],[253,5]]},"424":{"position":[[501,4]]},"432":{"position":[[1290,4]]},"438":{"position":[[199,4],[253,5]]},"448":{"position":[[1354,4]]},"454":{"position":[[690,4]]},"460":{"position":[[707,4]]},"466":{"position":[[171,7],[414,4]]},"477":{"position":[[4,4]]},"496":{"position":[[684,4]]},"502":{"position":[[659,4],[713,5]]},"509":{"position":[[680,4]]},"517":{"position":[[1658,7],[2202,4],[2819,7],[4115,4]]},"534":{"position":[[1830,4]]},"537":{"position":[[31,4]]},"545":{"position":[[199,4],[253,5]]},"556":{"position":[[2332,4]]},"573":{"position":[[680,4],[1401,4]]},"584":{"position":[[602,4],[1174,4],[1464,4]]},"595":{"position":[[951,5]]},"598":{"position":[[4,4]]},"611":{"position":[[738,4],[1333,4]]},"619":{"position":[[710,4]]},"625":{"position":[[313,4]]},"631":{"position":[[641,4]]},"646":{"position":[[872,5]]},"654":{"position":[[925,4]]},"670":{"position":[[801,4]]},"685":{"position":[[613,4]]},"700":{"position":[[452,4]]},"703":{"position":[[31,4]]},"706":{"position":[[451,4]]},"712":{"position":[[643,4]]},"720":{"position":[[942,4]]},"735":{"position":[[516,4]]},"738":{"position":[[31,4]]},"741":{"position":[[628,4]]},"747":{"position":[[1011,4],[1511,4]]},"757":{"position":[[2120,4]]},"770":{"position":[[2120,4]]},"797":{"position":[[2127,4]]},"812":{"position":[[2127,4]]},"828":{"position":[[2127,4]]},"851":{"position":[[732,4]]},"859":{"position":[[861,4],[871,4]]},"885":{"position":[[763,4]]},"897":{"position":[[407,4]]},"907":{"position":[[1574,4]]},"923":{"position":[[1574,4]]},"934":{"position":[[1574,4]]},"950":{"position":[[1574,4]]},"959":{"position":[[508,4]]},"968":{"position":[[1574,4]]},"974":{"position":[[171,4]]},"975":{"position":[[295,5]]},"982":{"position":[[510,4]]},"997":{"position":[[284,5],[476,4]]},"1006":{"position":[[77,5],[241,6]]},"1009":{"position":[[1773,4]]},"1015":{"position":[[563,4]]},"1021":{"position":[[1225,4],[1279,5]]},"1025":{"position":[[31,4]]},"1026":{"position":[[87,5]]},"1028":{"position":[[513,4]]},"1070":{"position":[[1124,4]]},"1076":{"position":[[906,4]]},"1085":{"position":[[936,7],[1492,4]]},"1092":{"position":[[513,7]]},"1094":{"position":[[578,4]]},"1101":{"position":[[418,4]]},"1107":{"position":[[533,4]]},"1113":{"position":[[607,4]]},"1133":{"position":[[1329,4]]},"1153":{"position":[[52,4]]},"1181":{"position":[[52,4]]},"1186":{"position":[[517,4]]},"1190":{"position":[[52,4]]},"1388":{"position":[[52,4],[743,4]]},"1422":{"position":[[52,4]]},"1451":{"position":[[133,4],[570,4]]},"1452":{"position":[[93,4],[228,4],[290,4],[618,4],[738,4],[818,4],[958,4],[1036,4],[1176,4],[1231,4],[1788,4],[2110,4],[2257,4],[2318,7],[2354,4],[2489,4],[2638,4],[2670,4],[2896,4],[2959,5],[3008,4],[3033,4],[3431,5],[3556,4],[3605,4],[3632,4],[3664,4],[3772,4],[3880,4],[3911,4],[3937,4],[3969,7],[4056,4],[4081,4],[4291,4],[4330,4],[4388,4],[4461,4]]},"1453":{"position":[[31,5],[431,4],[604,4],[959,4],[1609,4]]}},"keywords":{}}],["sync'd",{"_index":6554,"title":{},"content":{"1452":{"position":[[3820,6]]}},"keywords":{}}],["sync.an",{"_index":5386,"title":{},"content":{"1105":{"position":[[76,7]]}},"keywords":{}}],["synchron",{"_index":1710,"title":{"126":{"position":[[23,11]]}},"content":{"196":{"position":[[284,12]]},"197":{"position":[[758,16]]},"208":{"position":[[234,13]]},"209":{"position":[[854,12]]},"211":{"position":[[179,13],[584,16]]},"233":{"position":[[291,12]]},"975":{"position":[[179,13]]},"1437":{"position":[[315,11]]},"1453":{"position":[[1538,11]]}},"keywords":{}}],["syncmod",{"_index":851,"title":{},"content":{"56":{"position":[[1956,8],[2021,9],[2129,9]]},"351":{"position":[[458,9]]},"359":{"position":[[436,9]]},"360":{"position":[[200,9]]},"370":{"position":[[2159,9]]},"371":{"position":[[1355,9]]},"387":{"position":[[1459,9]]},"388":{"position":[[458,9]]},"408":{"position":[[668,9]]},"424":{"position":[[491,9]]},"425":{"position":[[234,9],[315,9],[395,9],[475,9],[570,9]]},"432":{"position":[[1280,9]]},"433":{"position":[[368,9],[764,9]]},"448":{"position":[[1344,9]]},"449":{"position":[[439,9]]},"454":{"position":[[680,9]]},"455":{"position":[[283,9]]},"460":{"position":[[697,9]]},"461":{"position":[[280,9]]},"466":{"position":[[404,9]]},"467":{"position":[[216,9]]},"473":{"position":[[318,9]]},"496":{"position":[[674,9]]},"497":{"position":[[243,9]]},"509":{"position":[[670,9]]},"510":{"position":[[208,9]]},"517":{"position":[[4105,9]]},"518":{"position":[[494,9],[573,9],[654,9],[755,9],[864,9],[965,9],[1062,9],[1172,9],[1290,9],[1385,9],[1466,9],[1541,9],[1618,9]]},"527":{"position":[[368,9]]},"534":{"position":[[1820,9]]},"535":{"position":[[383,9]]},"556":{"position":[[2322,9]]},"557":{"position":[[634,9]]},"573":{"position":[[1391,9]]},"575":{"position":[[351,9],[438,9],[542,9],[631,9],[731,9],[816,9],[911,9],[1014,9],[1110,9],[1209,9]]},"584":{"position":[[1454,9]]},"586":{"position":[[373,9],[460,9],[564,9],[653,9],[738,9],[833,9],[929,9],[1028,9]]},"611":{"position":[[1323,9]]},"612":{"position":[[383,9]]},"619":{"position":[[700,9]]},"620":{"position":[[278,9]]},"625":{"position":[[303,9]]},"626":{"position":[[179,9]]},"631":{"position":[[631,9]]},"632":{"position":[[243,9]]},"654":{"position":[[915,9]]},"655":{"position":[[234,9]]},"670":{"position":[[791,9]]},"671":{"position":[[276,9]]},"685":{"position":[[603,9]]},"686":{"position":[[270,9],[348,9],[435,9],[525,9],[618,9],[705,9],[793,9],[891,9],[979,9],[1053,9],[1125,9]]},"700":{"position":[[442,9]]},"701":{"position":[[206,9]]},"706":{"position":[[441,9]]},"707":{"position":[[203,9]]},"712":{"position":[[633,9]]},"713":{"position":[[213,9]]},"720":{"position":[[932,9]]},"721":{"position":[[346,9]]},"735":{"position":[[506,9]]},"736":{"position":[[201,9],[290,9],[384,9]]},"741":{"position":[[618,9]]},"742":{"position":[[271,9]]},"747":{"position":[[1501,9]]},"748":{"position":[[437,9]]},"757":{"position":[[2110,9]]},"758":{"position":[[339,9]]},"770":{"position":[[2110,9]]},"771":{"position":[[339,9]]},"797":{"position":[[2117,9]]},"798":{"position":[[337,9]]},"812":{"position":[[2117,9]]},"813":{"position":[[337,9]]},"828":{"position":[[2117,9]]},"829":{"position":[[337,9]]},"851":{"position":[[722,9]]},"859":{"position":[[851,9]]},"860":{"position":[[294,9]]},"885":{"position":[[753,9]]},"886":{"position":[[301,9]]},"897":{"position":[[397,9]]},"907":{"position":[[1564,9]]},"908":{"position":[[383,9]]},"923":{"position":[[1564,9]]},"924":{"position":[[383,9]]},"934":{"position":[[1564,9]]},"935":{"position":[[383,9]]},"950":{"position":[[1564,9]]},"951":{"position":[[383,9]]},"959":{"position":[[498,9]]},"960":{"position":[[213,9]]},"968":{"position":[[1564,9]]},"969":{"position":[[383,9]]},"982":{"position":[[500,9]]},"983":{"position":[[204,9]]},"997":{"position":[[466,9]]},"998":{"position":[[243,9]]},"1009":{"position":[[1763,9]]},"1010":{"position":[[480,9],[598,9]]},"1015":{"position":[[553,9]]},"1016":{"position":[[331,9]]},"1028":{"position":[[503,9]]},"1029":{"position":[[211,9]]},"1070":{"position":[[1114,9]]},"1071":{"position":[[343,9]]},"1076":{"position":[[896,9]]},"1078":{"position":[[243,9],[337,9],[419,9],[505,9],[611,9],[705,9],[803,9],[902,9],[981,9],[1057,9],[1138,9],[1231,9],[1318,9],[1403,9],[1486,9],[1560,9],[1635,9],[1720,9],[1803,9],[1890,9],[1983,9],[2067,9]]},"1085":{"position":[[1482,9]]},"1086":{"position":[[400,9]]},"1094":{"position":[[568,9]]},"1101":{"position":[[408,9]]},"1102":{"position":[[203,9]]},"1107":{"position":[[523,9]]},"1108":{"position":[[278,9]]},"1113":{"position":[[597,9]]},"1114":{"position":[[264,9]]},"1133":{"position":[[1319,9],[1471,8]]},"1134":{"position":[[308,9],[409,9],[502,9],[605,9],[686,9],[777,9],[887,9],[987,9],[1094,9],[1219,9],[1335,9],[1441,9],[1534,9],[1623,9],[1715,9],[1831,9],[1915,9],[1994,9],[2074,9],[2189,9],[2304,9],[2416,9],[2529,9],[2650,9],[2762,9],[2868,9],[2970,9]]}},"keywords":{}}],["sys.sp_cdc_enable_db",{"_index":5244,"title":{},"content":{"1042":{"position":[[117,21]]},"1043":{"position":[[781,21]]}},"keywords":{}}],["sys.sp_cdc_enable_t",{"_index":5248,"title":{},"content":{"1042":{"position":[[983,23]]},"1043":{"position":[[1647,23]]},"1051":{"position":[[1909,23]]},"1059":{"position":[[1702,23]]}},"keywords":{}}],["sysadmin",{"_index":2144,"title":{},"content":{"191":{"position":[[897,9],[2108,9]]},"240":{"position":[[858,9],[2069,9]]},"1032":{"position":[[762,9]]},"1383":{"position":[[845,9],[2056,9]]}},"keywords":{}}],["system",{"_index":307,"title":{"67":{"position":[[0,6]]},"286":{"position":[[0,6]]}},"content":{"11":{"position":[[442,7],[560,8],[1390,6],[1564,6]]},"13":{"position":[[786,7]]},"20":{"position":[[897,8]]},"32":{"position":[[154,7]]},"35":{"position":[[315,7]]},"36":{"position":[[394,6]]},"37":{"position":[[26,7],[84,7],[143,7],[226,8]]},"38":{"position":[[82,8],[417,7],[668,7]]},"45":{"position":[[80,7]]},"52":{"position":[[137,8]]},"66":{"position":[[335,8]]},"67":{"position":[[309,7],[561,6],[698,6]]},"80":{"position":[[292,6],[578,7]]},"81":{"position":[[2149,8]]},"82":{"position":[[15,7],[588,6]]},"84":{"position":[[81,7],[147,7],[675,7]]},"114":{"position":[[701,7],[852,7]]},"115":{"position":[[595,6]]},"121":{"position":[[127,6],[1784,7],[2044,7]]},"122":{"position":[[15,7]]},"125":{"position":[[92,6],[231,7],[282,7],[569,7],[1158,7],[1171,7]]},"126":{"position":[[44,6],[81,6],[131,6]]},"135":{"position":[[300,7]]},"138":{"position":[[1871,6]]},"140":{"position":[[164,6]]},"142":{"position":[[1917,6]]},"144":{"position":[[645,7]]},"157":{"position":[[38,7],[150,7],[281,7]]},"158":{"position":[[513,7]]},"159":{"position":[[582,8]]},"162":{"position":[[239,7],[262,6],[1392,6],[1479,8],[1537,7]]},"163":{"position":[[822,7]]},"165":{"position":[[140,8],[304,7],[441,6],[502,8]]},"166":{"position":[[97,7]]},"189":{"position":[[977,8],[1516,8],[1572,7],[1712,7]]},"190":{"position":[[534,7]]},"196":{"position":[[276,7],[547,8]]},"197":{"position":[[543,8]]},"207":{"position":[[372,8]]},"211":{"position":[[767,8]]},"213":{"position":[[265,8]]},"216":{"position":[[79,8],[484,6]]},"217":{"position":[[62,7],[170,7],[1031,7],[1869,8]]},"218":{"position":[[580,7]]},"221":{"position":[[130,6]]},"228":{"position":[[1178,6]]},"229":{"position":[[862,6]]},"230":{"position":[[225,7],[1341,7]]},"233":{"position":[[283,7],[554,8]]},"237":{"position":[[185,8],[2679,8],[3324,6]]},"239":{"position":[[2706,7]]},"240":{"position":[[3255,6]]},"259":{"position":[[221,7],[424,7],[883,7],[1910,7],[2118,7],[2464,7]]},"279":{"position":[[421,7]]},"286":{"position":[[0,6],[174,6],[437,8]]},"289":{"position":[[69,7],[92,7],[671,7]]},"300":{"position":[[69,7],[92,7],[611,7]]},"320":{"position":[[431,8]]},"321":{"position":[[114,6],[165,8],[315,8],[408,7],[625,6],[1710,8]]},"322":{"position":[[283,6],[359,6],[446,7],[566,7],[1280,7]]},"323":{"position":[[833,8],[1204,6],[1300,7]]},"325":{"position":[[487,7]]},"326":{"position":[[799,8],[996,8],[1136,8],[1177,6],[1462,8]]},"329":{"position":[[132,8],[396,7]]},"331":{"position":[[226,8]]},"332":{"position":[[320,8]]},"333":{"position":[[326,7]]},"335":{"position":[[91,7]]},"363":{"position":[[78,7],[182,6]]},"370":{"position":[[1546,6]]},"379":{"position":[[1233,6]]},"419":{"position":[[98,8]]},"440":{"position":[[114,8]]},"485":{"position":[[117,6]]},"489":{"position":[[333,7]]},"547":{"position":[[99,8]]},"657":{"position":[[117,6]]},"662":{"position":[[333,7]]},"673":{"position":[[117,6]]},"677":{"position":[[333,7]]},"688":{"position":[[117,6]]},"692":{"position":[[333,7]]},"750":{"position":[[1103,6]]},"754":{"position":[[28,6],[54,6],[295,7]]},"757":{"position":[[472,6],[522,6],[696,6],[2397,6]]},"761":{"position":[[335,6]]},"766":{"position":[[1103,6]]},"770":{"position":[[472,6],[522,6],[696,6],[2397,6]]},"774":{"position":[[335,6]]},"789":{"position":[[1504,6]]},"794":{"position":[[26,6],[52,6],[168,7]]},"797":{"position":[[472,6],[522,6],[696,6],[2402,6]]},"801":{"position":[[341,6]]},"807":{"position":[[1091,6]]},"809":{"position":[[26,6],[52,6],[168,7]]},"812":{"position":[[472,6],[522,6],[696,6],[2402,6]]},"816":{"position":[[341,6]]},"823":{"position":[[1091,6]]},"825":{"position":[[26,6],[52,6],[168,7]]},"828":{"position":[[472,6],[522,6],[696,6],[2402,6]]},"832":{"position":[[341,6]]},"870":{"position":[[69,7]]},"909":{"position":[[317,7],[1166,6]]},"912":{"position":[[1151,6]]},"917":{"position":[[1848,6]]},"925":{"position":[[317,7],[1166,6]]},"936":{"position":[[317,7],[1166,6]]},"952":{"position":[[317,7],[1166,6]]},"965":{"position":[[1848,6]]},"970":{"position":[[317,7],[1166,6]]},"1023":{"position":[[79,8]]},"1138":{"position":[[837,6]]},"1140":{"position":[[1026,6]]},"1208":{"position":[[28,7],[318,7]]},"1233":{"position":[[62,7]]},"1267":{"position":[[512,6],[562,6]]},"1285":{"position":[[534,6],[584,6],[708,6]]},"1286":{"position":[[26,6],[52,6],[197,7]]},"1292":{"position":[[6202,6]]},"1300":{"position":[[534,6],[584,6],[708,6]]},"1301":{"position":[[26,6],[52,6],[197,7]]},"1306":{"position":[[6202,6]]},"1316":{"position":[[1026,6]]},"1324":{"position":[[534,6],[584,6],[708,6]]},"1325":{"position":[[26,6],[52,6],[197,7]]},"1329":{"position":[[6202,6]]},"1340":{"position":[[1026,6]]},"1351":{"position":[[1026,6]]},"1358":{"position":[[221,7]]},"1379":{"position":[[4119,6]]},"1403":{"position":[[4119,6]]},"1414":{"position":[[4119,6]]},"1431":{"position":[[1049,6]]},"1435":{"position":[[574,7],[789,7]]},"1437":{"position":[[589,7]]},"1440":{"position":[[6,8]]},"1447":{"position":[[213,6]]},"1453":{"position":[[918,6],[1248,6],[1368,8]]},"1459":{"position":[[651,6]]},"1461":{"position":[[2790,7],[3261,7],[3313,7]]},"1462":{"position":[[86,7]]},"1470":{"position":[[377,7]]},"1472":{"position":[[67,7]]}},"keywords":{}}],["system.access",{"_index":278,"title":{},"content":{"8":{"position":[[782,13]]}},"keywords":{}}],["system.view",{"_index":1749,"title":{},"content":{"135":{"position":[[467,14]]}},"keywords":{}}],["system_certif",{"_index":3684,"title":{},"content":{"433":{"position":[[188,19],[599,19]]}},"keywords":{}}],["system_tim",{"_index":5557,"title":{},"content":{"1140":{"position":[[1066,11]]},"1316":{"position":[[1066,11]]},"1340":{"position":[[1066,11]]},"1351":{"position":[[1066,11]]},"1431":{"position":[[1089,11]]}},"keywords":{}}],["system_us",{"_index":5560,"title":{},"content":{"1140":{"position":[[1105,11]]},"1316":{"position":[[1105,11]]},"1340":{"position":[[1105,11]]},"1351":{"position":[[1105,11]]},"1379":{"position":[[4164,11]]},"1403":{"position":[[4164,11]]},"1414":{"position":[[4164,11]]},"1431":{"position":[[1128,11]]}},"keywords":{}}],["systema",{"_index":2925,"title":{},"content":{"289":{"position":[[431,7]]},"300":{"position":[[385,7]]}},"keywords":{}}],["systemmodstamp",{"_index":5176,"title":{},"content":{"1010":{"position":[[445,16],[555,16]]}},"keywords":{}}],["t",{"_index":1507,"title":{},"content":{"105":{"position":[[1539,1]]},"221":{"position":[[1247,1]]},"222":{"position":[[492,1]]},"223":{"position":[[458,1],[764,1]]},"224":{"position":[[511,1]]},"250":{"position":[[1471,1]]},"1298":{"position":[[458,1],[764,1]]},"1322":{"position":[[492,1]]},"1335":{"position":[[492,1]]},"1346":{"position":[[458,1],[764,1]]},"1452":{"position":[[4364,2]]}},"keywords":{}}],["t)uesday",{"_index":6558,"title":{},"content":{"1452":{"position":[[4185,10]]}},"keywords":{}}],["t,th",{"_index":6535,"title":{},"content":{"1452":{"position":[[1446,4]]}},"keywords":{}}],["t1",{"_index":1615,"title":{},"content":{"114":{"position":[[364,2]]},"115":{"position":[[820,2]]}},"keywords":{}}],["t1([derivation/shard",{"_index":1527,"title":{},"content":{"107":{"position":[[962,20]]}},"keywords":{}}],["t2",{"_index":1617,"title":{},"content":{"114":{"position":[[405,2]]},"115":{"position":[[839,2]]}},"keywords":{}}],["t2([derivation/shard",{"_index":1528,"title":{},"content":{"107":{"position":[[988,20]]}},"keywords":{}}],["t3",{"_index":1619,"title":{},"content":{"114":{"position":[[446,2]]},"115":{"position":[[856,2]]}},"keywords":{}}],["t[transform",{"_index":1499,"title":{},"content":{"105":{"position":[[1356,18]]}},"keywords":{}}],["tab",{"_index":1021,"title":{"146":{"position":[[9,4]]},"147":{"position":[[5,4]]},"149":{"position":[[9,4]]},"150":{"position":[[5,4]]},"152":{"position":[[9,4]]},"153":{"position":[[5,4]]}},"content":{"68":{"position":[[386,4]]},"137":{"position":[[105,4],[229,4],[378,4]]},"147":{"position":[[15,4]]},"153":{"position":[[15,4]]},"154":{"position":[[252,3],[1178,3],[1587,3],[1770,3],[2007,3],[2129,3]]},"169":{"position":[[1559,4]]},"173":{"position":[[853,4]]},"182":{"position":[[160,4]]},"190":{"position":[[80,3]]},"191":{"position":[[140,4]]},"192":{"position":[[1714,4]]},"207":{"position":[[732,3],[1656,4]]},"217":{"position":[[329,3],[1808,3]]},"218":{"position":[[1661,4]]},"228":{"position":[[337,4]]},"230":{"position":[[550,4]]},"239":{"position":[[1535,3]]},"240":{"position":[[270,3]]},"259":{"position":[[1130,4],[2711,4]]},"263":{"position":[[129,3]]},"264":{"position":[[675,3]]},"267":{"position":[[1967,3]]},"270":{"position":[[229,3]]},"274":{"position":[[527,3]]},"284":{"position":[[38,3]]},"290":{"position":[[306,3]]},"291":{"position":[[1595,4]]},"301":{"position":[[259,3]]},"302":{"position":[[1504,4]]},"339":{"position":[[286,4]]},"340":{"position":[[419,4]]},"419":{"position":[[1767,3]]},"441":{"position":[[376,3]]},"464":{"position":[[171,3],[288,3]]},"487":{"position":[[72,3]]},"504":{"position":[[1396,3]]},"515":{"position":[[588,4]]},"547":{"position":[[1769,3]]},"639":{"position":[[1394,3]]},"709":{"position":[[623,3]]},"726":{"position":[[289,3],[388,4]]},"840":{"position":[[1803,4]]},"849":{"position":[[468,4],[2844,4]]},"947":{"position":[[1271,4]]},"1023":{"position":[[1750,3]]},"1047":{"position":[[513,3]]},"1055":{"position":[[513,3]]},"1063":{"position":[[513,3]]},"1177":{"position":[[385,4]]},"1186":{"position":[[278,4]]},"1448":{"position":[[1001,3]]}},"keywords":{}}],["tab.learn",{"_index":2437,"title":{},"content":{"218":{"position":[[2003,9]]}},"keywords":{}}],["tabclick",{"_index":3521,"title":{},"content":{"395":{"position":[[202,8]]}},"keywords":{}}],["tabl",{"_index":168,"title":{"1159":{"position":[[15,6]]},"1165":{"position":[[0,5]]},"1183":{"position":[[0,5]]}},"content":{"4":{"position":[[443,6],[531,6]]},"8":{"position":[[907,5]]},"11":{"position":[[1437,5],[1467,6]]},"13":{"position":[[960,6],[1755,6]]},"14":{"position":[[628,6],[639,5],[839,5],[1026,5],[1131,5]]},"20":{"position":[[941,5]]},"27":{"position":[[272,6]]},"42":{"position":[[181,6],[257,6]]},"50":{"position":[[119,5]]},"54":{"position":[[321,7]]},"55":{"position":[[391,7]]},"66":{"position":[[375,5]]},"69":{"position":[[666,5],[700,5]]},"71":{"position":[[582,5],[707,6]]},"75":{"position":[[212,6]]},"80":{"position":[[519,6]]},"81":{"position":[[591,5],[1670,7],[1699,5],[1809,6],[1931,6],[2014,6],[2071,6]]},"94":{"position":[[648,5]]},"97":{"position":[[421,6]]},"100":{"position":[[102,7],[395,5],[514,5],[757,6],[969,6],[1215,7]]},"114":{"position":[[100,5]]},"115":{"position":[[531,6]]},"119":{"position":[[417,7]]},"120":{"position":[[2120,7],[2148,5],[2175,6]]},"121":{"position":[[1207,6],[1503,5],[1643,5],[2005,6]]},"122":{"position":[[114,5],[226,5],[495,5],[1225,6]]},"123":{"position":[[790,6]]},"138":{"position":[[31,5],[141,5],[294,5]]},"141":{"position":[[40,5],[91,5],[149,6],[249,5],[604,5]]},"142":{"position":[[39,5],[166,5],[235,5],[407,5]]},"150":{"position":[[99,6],[110,5]]},"154":{"position":[[425,6],[637,5],[660,5],[781,5],[934,6],[1193,5],[1287,5]]},"157":{"position":[[258,5]]},"158":{"position":[[549,5]]},"164":{"position":[[1011,5],[1362,5],[1505,5]]},"180":{"position":[[716,6],[838,5]]},"182":{"position":[[278,5]]},"183":{"position":[[473,6],[1172,6],[3558,6]]},"184":{"position":[[39,5],[730,5],[853,7],[893,5]]},"185":{"position":[[58,5]]},"192":{"position":[[1257,5],[1650,6],[2390,5]]},"198":{"position":[[980,5]]},"208":{"position":[[571,5],[966,6],[1220,6],[1969,6]]},"217":{"position":[[1095,7]]},"218":{"position":[[807,7],[1187,5]]},"230":{"position":[[182,5]]},"232":{"position":[[422,5]]},"236":{"position":[[1994,5],[2026,5],[2149,5],[2965,5],[3327,5],[3435,5],[3633,5],[3728,5]]},"237":{"position":[[509,6],[786,6],[1038,5],[1072,7],[1101,5],[1211,6],[1298,5],[1369,5],[1516,5],[1557,5],[1672,5],[1905,5],[1985,6],[2129,7],[2256,6],[2382,6],[2433,5],[2829,6]]},"238":{"position":[[836,6],[1127,5],[1164,5],[1451,6]]},"240":{"position":[[140,6],[3986,6],[4474,5],[4555,5]]},"259":{"position":[[111,5],[1792,5]]},"263":{"position":[[274,5]]},"268":{"position":[[525,7]]},"278":{"position":[[66,7],[533,7],[661,7],[734,6],[996,5],[1409,6],[1555,6]]},"279":{"position":[[1259,5]]},"280":{"position":[[48,6],[1509,5]]},"281":{"position":[[133,5],[261,5],[2887,8]]},"284":{"position":[[238,6]]},"291":{"position":[[1008,6],[1085,5],[1156,6],[1186,6],[1458,5]]},"292":{"position":[[152,5]]},"295":{"position":[[246,5],[438,5],[612,6]]},"302":{"position":[[1000,6],[1070,5],[1119,5],[1378,5]]},"303":{"position":[[143,5]]},"307":{"position":[[1695,6],[2578,6],[2943,5]]},"308":{"position":[[629,7]]},"309":{"position":[[1207,6],[2015,6],[2526,6],[3133,6]]},"310":{"position":[[141,6]]},"322":{"position":[[1073,5]]},"326":{"position":[[411,7],[500,6],[854,5]]},"332":{"position":[[647,7]]},"344":{"position":[[320,6]]},"366":{"position":[[549,6],[745,6],[767,5],[914,5]]},"367":{"position":[[323,5],[459,6],[558,6],[589,5],[697,5],[787,7]]},"368":{"position":[[110,6],[286,6],[406,7],[466,5]]},"370":{"position":[[193,5],[1114,5],[1323,5],[1345,5],[2093,6],[2131,5]]},"371":{"position":[[1503,5]]},"387":{"position":[[34,5]]},"395":{"position":[[59,6],[130,6],[148,5],[465,6]]},"397":{"position":[[136,7],[248,7],[337,6],[408,5],[462,5],[765,5],[870,5],[897,5],[1032,5],[1128,6]]},"398":{"position":[[338,6],[486,6]]},"402":{"position":[[694,5],[717,5]]},"403":{"position":[[416,6]]},"448":{"position":[[34,5]]},"477":{"position":[[226,6],[284,7]]},"479":{"position":[[501,6],[556,6],[812,6]]},"480":{"position":[[67,5],[253,6],[1021,6],[1430,6],[1749,6]]},"482":{"position":[[223,6]]},"483":{"position":[[527,5],[709,6]]},"534":{"position":[[34,5]]},"556":{"position":[[34,5],[1291,5],[1306,5]]},"574":{"position":[[441,5]]},"611":{"position":[[34,5]]},"660":{"position":[[952,5]]},"685":{"position":[[34,5]]},"703":{"position":[[50,6]]},"720":{"position":[[34,5]]},"738":{"position":[[50,6]]},"750":{"position":[[423,6],[445,5],[625,5],[919,6],[984,7]]},"752":{"position":[[70,6],[82,5],[241,5],[405,7],[462,6],[522,6]]},"753":{"position":[[774,6],[897,5],[1061,7],[1118,6],[1178,6]]},"754":{"position":[[224,6],[952,7],[1099,6]]},"755":{"position":[[110,6],[286,6],[406,7],[466,5]]},"757":{"position":[[774,5],[801,5],[1459,5],[1996,5],[2054,5],[2315,6],[2375,6],[2518,6]]},"758":{"position":[[487,5]]},"760":{"position":[[175,5],[237,5],[476,5],[539,5],[566,5],[614,6],[790,6],[916,5]]},"761":{"position":[[571,5]]},"762":{"position":[[358,5]]},"763":{"position":[[129,5],[474,5]]},"764":{"position":[[658,5]]},"766":{"position":[[423,6],[445,5],[625,5],[919,6],[984,7]]},"767":{"position":[[1826,6],[1877,5]]},"768":{"position":[[110,6],[286,6],[406,7],[466,5]]},"770":{"position":[[774,5],[801,5],[1459,5],[1996,5],[2054,5],[2315,6],[2375,6],[2518,6]]},"771":{"position":[[487,5]]},"773":{"position":[[175,5],[237,5],[476,5],[539,5],[566,5],[614,6],[790,6],[916,5]]},"774":{"position":[[571,5]]},"775":{"position":[[358,5]]},"776":{"position":[[129,5],[474,5]]},"777":{"position":[[658,5]]},"789":{"position":[[411,6],[433,5],[613,5],[734,5],[857,5],[919,5],[1101,5],[1320,6],[1385,7]]},"791":{"position":[[23,6],[35,5],[194,5],[358,7],[415,6],[475,6]]},"792":{"position":[[1766,6],[1817,5]]},"793":{"position":[[745,6],[868,5],[1032,7],[1089,6],[1149,6]]},"794":{"position":[[97,6],[1158,7],[1303,6]]},"795":{"position":[[108,6],[284,6],[404,7],[464,5]]},"797":{"position":[[774,5],[801,5],[1459,5],[2003,5],[2061,5],[2322,6],[2382,6],[2526,6]]},"798":{"position":[[485,5]]},"800":{"position":[[175,5],[237,5],[476,5],[539,5],[566,5],[614,6],[790,6],[916,5]]},"801":{"position":[[577,5]]},"802":{"position":[[358,5]]},"803":{"position":[[129,5],[480,5]]},"804":{"position":[[656,5]]},"805":{"position":[[217,5]]},"807":{"position":[[411,6],[433,5],[613,5],[907,6],[972,7]]},"808":{"position":[[763,6],[814,5],[978,7],[1035,6],[1095,6]]},"809":{"position":[[97,6],[1158,7],[1303,6]]},"810":{"position":[[108,6],[284,6],[404,7],[464,5]]},"812":{"position":[[774,5],[801,5],[1459,5],[2003,5],[2061,5],[2322,6],[2382,6],[2526,6]]},"813":{"position":[[485,5]]},"815":{"position":[[175,5],[237,5],[476,5],[539,5],[566,5],[614,6],[790,6],[916,5]]},"816":{"position":[[577,5]]},"817":{"position":[[358,5]]},"818":{"position":[[129,5],[480,5]]},"819":{"position":[[656,5]]},"820":{"position":[[217,5]]},"821":{"position":[[1019,7]]},"823":{"position":[[411,6],[433,5],[613,5],[907,6],[972,7]]},"824":{"position":[[1888,6],[1939,5]]},"825":{"position":[[97,6],[994,7],[1139,6]]},"826":{"position":[[108,6],[284,6],[404,7],[464,5]]},"828":{"position":[[774,5],[801,5],[1459,5],[2003,5],[2061,5],[2322,6],[2382,6],[2526,6]]},"829":{"position":[[485,5]]},"831":{"position":[[175,5],[237,5],[476,5],[539,5],[566,5],[614,6],[790,6],[916,5]]},"832":{"position":[[577,5]]},"833":{"position":[[358,5]]},"834":{"position":[[129,5],[480,5]]},"835":{"position":[[656,5]]},"836":{"position":[[217,5]]},"838":{"position":[[27,6]]},"842":{"position":[[1949,5],[2306,5],[2772,6],[2900,6],[3018,5],[3065,5],[3287,5],[3447,5]]},"846":{"position":[[103,6],[207,5],[254,5]]},"847":{"position":[[8,6],[66,6]]},"859":{"position":[[34,5]]},"862":{"position":[[178,6]]},"864":{"position":[[360,7],[416,6],[467,5],[566,6],[808,6],[823,5],[1042,6],[1213,5]]},"865":{"position":[[101,7],[203,6]]},"867":{"position":[[575,5],[663,5],[685,5],[1419,5],[1724,6],[1820,6],[2191,6],[2229,5]]},"869":{"position":[[177,5],[546,5],[753,5],[1666,7],[1718,5]]},"870":{"position":[[204,6]]},"872":{"position":[[1,5]]},"874":{"position":[[178,6]]},"876":{"position":[[360,7],[416,6],[467,5],[566,6]]},"877":{"position":[[101,7],[259,6]]},"879":{"position":[[1584,5],[1636,6],[1700,6]]},"903":{"position":[[575,6],[771,6],[793,5],[940,5]]},"904":{"position":[[1427,5],[1559,6],[1658,6],[1689,5],[1797,5],[1995,5],[2086,6],[2229,5],[2277,6]]},"905":{"position":[[113,6],[289,6],[409,7],[469,5]]},"907":{"position":[[897,5],[1106,5],[1128,5],[1498,6],[1536,5]]},"908":{"position":[[531,5]]},"909":{"position":[[87,6]]},"910":{"position":[[197,6]]},"911":{"position":[[77,6],[176,6],[219,7],[291,6],[419,6]]},"912":{"position":[[1083,6]]},"915":{"position":[[575,6],[771,6],[793,5],[940,5]]},"917":{"position":[[566,6],[610,6],[693,6],[1141,6],[1198,5],[1306,5],[1504,5],[1595,6],[1738,5],[1786,6]]},"918":{"position":[[1719,5],[1851,6],[1950,6],[1981,5],[2089,5],[2287,5],[2378,6],[2521,5],[2569,6]]},"919":{"position":[[1103,6],[1147,6],[1224,6],[1667,5],[1749,6],[1793,6],[2036,5],[2144,5],[2342,5]]},"920":{"position":[[113,6],[289,6],[409,7],[469,5]]},"922":{"position":[[2734,7]]},"923":{"position":[[897,5],[1106,5],[1128,5],[1498,6],[1536,5]]},"924":{"position":[[531,5]]},"925":{"position":[[87,6]]},"926":{"position":[[197,6]]},"927":{"position":[[77,6],[176,6],[219,7],[291,6],[419,6]]},"930":{"position":[[575,6],[771,6],[793,5],[940,5]]},"931":{"position":[[1084,5],[1221,6],[1320,6],[1351,5],[1459,5],[1657,5],[1748,6],[1891,5],[1939,6]]},"932":{"position":[[113,6],[289,6],[409,7],[469,5]]},"934":{"position":[[897,5],[1106,5],[1128,5],[1498,6],[1536,5]]},"935":{"position":[[531,5]]},"936":{"position":[[87,6]]},"937":{"position":[[197,6]]},"938":{"position":[[77,6],[176,6],[219,7],[291,6],[419,6]]},"944":{"position":[[55,6],[214,6],[309,6],[354,6],[402,6],[458,6]]},"945":{"position":[[73,6],[165,5],[383,5],[431,6],[516,6],[603,7]]},"947":{"position":[[1007,6],[1180,6]]},"948":{"position":[[113,6],[289,6],[409,7],[469,5]]},"950":{"position":[[897,5],[1106,5],[1128,5],[1498,6],[1536,5]]},"951":{"position":[[531,5]]},"952":{"position":[[87,6]]},"953":{"position":[[197,6]]},"954":{"position":[[77,6],[176,6],[219,7],[291,6],[419,6]]},"963":{"position":[[729,6],[925,6],[947,5],[1094,5]]},"965":{"position":[[566,6],[610,6],[693,6],[1141,6],[1198,5],[1306,5],[1504,5],[1595,6],[1738,5],[1786,6]]},"966":{"position":[[113,6],[289,6],[409,7],[469,5]]},"968":{"position":[[897,5],[1106,5],[1128,5],[1498,6],[1536,5]]},"969":{"position":[[531,5]]},"970":{"position":[[87,6]]},"971":{"position":[[197,6]]},"972":{"position":[[77,6],[176,6],[219,7],[291,6],[419,6]]},"991":{"position":[[34,5]]},"1009":{"position":[[34,5]]},"1025":{"position":[[50,6]]},"1031":{"position":[[106,6],[250,6],[497,7],[541,6],[590,7]]},"1032":{"position":[[1351,6],[1743,6],[1844,6]]},"1034":{"position":[[858,7]]},"1035":{"position":[[56,5],[78,5],[150,5]]},"1036":{"position":[[1009,6]]},"1037":{"position":[[282,6]]},"1040":{"position":[[42,6],[91,5],[169,5],[373,6],[417,6],[487,6],[509,5],[656,5],[756,6],[799,6],[909,5]]},"1042":{"position":[[387,6],[501,6],[648,5],[684,5],[839,7],[890,5],[948,6]]},"1043":{"position":[[1051,6],[1165,6],[1312,5],[1348,5],[1503,7],[1554,5],[1612,6]]},"1045":{"position":[[745,5],[833,5],[855,5],[1117,6],[1155,5],[1277,6]]},"1046":{"position":[[465,5]]},"1047":{"position":[[67,6],[204,5],[413,6],[664,5]]},"1050":{"position":[[42,6],[91,5],[169,5],[373,6],[417,6],[487,6],[509,5],[656,5],[756,6],[799,6],[909,5]]},"1051":{"position":[[1313,6],[1427,6],[1574,5],[1610,5],[1765,7],[1816,5],[1874,6]]},"1053":{"position":[[745,5],[833,5],[855,5],[1117,6],[1155,5],[1277,6]]},"1054":{"position":[[465,5]]},"1055":{"position":[[67,6],[204,5],[413,6],[664,5]]},"1058":{"position":[[42,6],[91,5],[169,5],[373,6],[417,6],[487,6],[509,5],[656,5],[756,6],[799,6],[909,5]]},"1059":{"position":[[1106,6],[1220,6],[1367,5],[1403,5],[1558,7],[1609,5],[1667,6]]},"1061":{"position":[[745,5],[833,5],[855,5],[1117,6],[1155,5],[1277,6]]},"1062":{"position":[[465,5]]},"1063":{"position":[[67,6],[204,5],[413,6],[664,5]]},"1070":{"position":[[34,5]]},"1085":{"position":[[34,5]]},"1120":{"position":[[341,6]]},"1123":{"position":[[92,6]]},"1125":{"position":[[308,7],[550,5],[577,5],[673,5]]},"1126":{"position":[[299,6]]},"1136":{"position":[[135,6],[182,6]]},"1137":{"position":[[209,7]]},"1138":{"position":[[193,5],[587,6],[703,6],[1372,5],[1468,6],[1533,5],[1635,5],[1708,6],[1715,5],[1721,5]]},"1139":{"position":[[1190,6]]},"1140":{"position":[[280,5],[1153,5]]},"1149":{"position":[[264,6],[311,6]]},"1150":{"position":[[146,6]]},"1151":{"position":[[572,6],[688,7],[1373,5],[1400,6],[1474,5],[1594,5]]},"1152":{"position":[[384,6]]},"1155":{"position":[[122,5],[336,5]]},"1156":{"position":[[386,6],[486,5],[533,7],[604,7],[814,6]]},"1161":{"position":[[123,7]]},"1162":{"position":[[500,6],[806,5],[833,6],[920,5],[997,5]]},"1163":{"position":[[321,6]]},"1164":{"position":[[47,5]]},"1165":{"position":[[99,6],[197,5]]},"1166":{"position":[[101,5],[145,6],[220,7]]},"1178":{"position":[[210,6],[332,7]]},"1179":{"position":[[399,6],[515,7],[1037,5],[1043,5],[1131,5],[1166,6]]},"1180":{"position":[[294,6]]},"1182":{"position":[[193,6],[488,5],[608,6]]},"1183":{"position":[[1,6],[92,6],[173,6],[264,6],[303,5],[352,5],[397,5],[432,6],[602,5],[760,5],[827,6],[842,5],[1115,6],[1128,5],[1290,5],[1350,5],[1582,6],[1595,5],[1753,6]]},"1185":{"position":[[137,6]]},"1187":{"position":[[214,7]]},"1188":{"position":[[756,5],[762,5],[844,5]]},"1189":{"position":[[463,6]]},"1191":{"position":[[195,6],[490,5],[612,6]]},"1192":{"position":[[238,5]]},"1204":{"position":[[165,5]]},"1205":{"position":[[192,6],[215,6]]},"1206":{"position":[[650,5],[878,5],[905,5],[958,5],[989,5],[1049,5],[1081,5]]},"1207":{"position":[[552,6],[559,5]]},"1253":{"position":[[562,5]]},"1259":{"position":[[138,6]]},"1260":{"position":[[286,6],[402,7],[921,5],[948,6],[1022,5],[1118,5]]},"1261":{"position":[[326,6]]},"1262":{"position":[[195,6],[490,5],[612,6]]},"1265":{"position":[[162,6]]},"1269":{"position":[[56,5],[78,5]]},"1270":{"position":[[214,6]]},"1281":{"position":[[174,6]]},"1284":{"position":[[207,7]]},"1286":{"position":[[1215,7],[2550,5],[2556,5],[2738,5]]},"1287":{"position":[[203,6]]},"1292":{"position":[[209,5],[6247,5],[6286,6]]},"1295":{"position":[[174,6]]},"1299":{"position":[[207,7]]},"1301":{"position":[[1051,7],[2386,5],[2392,5],[2574,5]]},"1302":{"position":[[203,6]]},"1303":{"position":[[1409,6]]},"1306":{"position":[[209,5],[6247,5],[6286,6]]},"1309":{"position":[[135,6],[182,6]]},"1312":{"position":[[210,7]]},"1313":{"position":[[397,6],[513,6],[916,5],[1012,6],[1077,5],[1179,5],[1252,6],[1259,5],[1265,5]]},"1314":{"position":[[206,6]]},"1316":{"position":[[280,5],[1153,5]]},"1317":{"position":[[373,5],[446,6]]},"1319":{"position":[[174,6]]},"1323":{"position":[[207,7]]},"1325":{"position":[[1215,7],[2550,5],[2556,5],[2738,5]]},"1326":{"position":[[203,6]]},"1329":{"position":[[209,5],[6247,5],[6286,6]]},"1332":{"position":[[135,6],[182,6]]},"1336":{"position":[[210,7]]},"1337":{"position":[[397,6],[513,6],[916,5],[1012,6],[1077,5],[1179,5],[1252,6],[1259,5],[1265,5]]},"1338":{"position":[[206,6]]},"1340":{"position":[[280,5],[1153,5]]},"1341":{"position":[[373,5],[446,6]]},"1343":{"position":[[135,6],[182,6]]},"1347":{"position":[[210,7]]},"1348":{"position":[[397,6],[513,6],[916,5],[1012,6],[1077,5],[1179,5],[1252,6],[1259,5],[1265,5]]},"1349":{"position":[[206,6]]},"1351":{"position":[[280,5],[1153,5]]},"1352":{"position":[[373,5],[446,6]]},"1367":{"position":[[67,5],[73,5]]},"1368":{"position":[[142,6]]},"1370":{"position":[[272,5],[1068,5]]},"1372":{"position":[[174,6],[272,7]]},"1375":{"position":[[211,7]]},"1376":{"position":[[465,5],[471,5],[653,5]]},"1377":{"position":[[207,6]]},"1379":{"position":[[217,5],[4221,5]]},"1385":{"position":[[212,7]]},"1386":{"position":[[370,6],[486,6],[1159,5],[1165,5],[1247,5]]},"1387":{"position":[[502,6],[1128,6]]},"1389":{"position":[[194,6],[489,5],[610,6]]},"1391":{"position":[[224,7]]},"1392":{"position":[[46,6]]},"1394":{"position":[[236,5],[730,5]]},"1396":{"position":[[174,6],[272,7]]},"1399":{"position":[[211,7]]},"1400":{"position":[[465,5],[471,5],[653,5]]},"1401":{"position":[[207,6]]},"1403":{"position":[[217,5],[4221,5]]},"1406":{"position":[[174,6],[272,7]]},"1410":{"position":[[211,7]]},"1411":{"position":[[465,5],[471,5],[653,5]]},"1412":{"position":[[207,6]]},"1414":{"position":[[217,5],[4221,5]]},"1417":{"position":[[399,6]]},"1418":{"position":[[276,5]]},"1419":{"position":[[212,7]]},"1420":{"position":[[706,5],[712,5],[794,5]]},"1421":{"position":[[489,6]]},"1423":{"position":[[239,5],[498,5]]},"1426":{"position":[[213,7],[279,6],[326,6]]},"1427":{"position":[[338,6],[454,6],[643,5],[739,6],[837,5],[939,5],[1012,6],[1019,5],[1025,5]]},"1428":{"position":[[247,6]]},"1429":{"position":[[28,6],[122,7],[409,7],[449,6],[515,5],[642,5],[875,6]]},"1431":{"position":[[303,5],[1176,5]]},"1432":{"position":[[373,5],[446,6]]},"1437":{"position":[[366,5]]},"1449":{"position":[[308,7]]},"1456":{"position":[[115,6]]}},"keywords":{}}],["table"",{"_index":4631,"title":{},"content":{"760":{"position":[[90,11]]},"773":{"position":[[90,11]]},"800":{"position":[[90,11]]},"815":{"position":[[90,11]]},"831":{"position":[[90,11]]},"1149":{"position":[[183,11]]}},"keywords":{}}],["table(",{"_index":4589,"title":{},"content":{"750":{"position":[[1031,8]]},"760":{"position":[[350,8]]},"763":{"position":[[337,8]]},"766":{"position":[[1031,8]]},"773":{"position":[[350,8]]},"776":{"position":[[337,8]]},"789":{"position":[[1432,8]]},"800":{"position":[[350,8]]},"803":{"position":[[343,8]]},"807":{"position":[[1019,8]]},"815":{"position":[[350,8]]},"818":{"position":[[343,8]]},"823":{"position":[[1019,8]]},"831":{"position":[[350,8]]},"834":{"position":[[343,8]]},"917":{"position":[[941,8]]},"919":{"position":[[1466,8]]},"947":{"position":[[1057,8]]},"965":{"position":[[941,8]]}},"keywords":{}}],["table(result_scan(last_query_id",{"_index":6381,"title":{},"content":{"1384":{"position":[[848,35]]}},"keywords":{}}],["table)ad",{"_index":4986,"title":{},"content":{"899":{"position":[[196,8],[220,8]]}},"keywords":{}}],["table)board",{"_index":4983,"title":{},"content":{"899":{"position":[[109,11]]}},"keywords":{}}],["table)pin",{"_index":4984,"title":{},"content":{"899":{"position":[[136,10],[170,10]]}},"keywords":{}}],["table.lambda.recentchange.sql",{"_index":2072,"title":{},"content":{"183":{"position":[[1442,29],[2961,30],[3480,29],[3977,29]]}},"keywords":{}}],["table.migration.0.sql",{"_index":2070,"title":{},"content":{"183":{"position":[[1320,21],[3834,21]]}},"keywords":{}}],["table.or",{"_index":1608,"title":{},"content":{"113":{"position":[[694,9]]}},"keywords":{}}],["table.permiss",{"_index":4586,"title":{},"content":{"750":{"position":[[890,16]]},"766":{"position":[[890,16]]},"789":{"position":[[1291,16]]},"807":{"position":[[878,16]]},"823":{"position":[[878,16]]}},"keywords":{}}],["table_checksu",{"_index":6227,"title":{},"content":{"1292":{"position":[[6352,13]]},"1306":{"position":[[6352,13]]},"1329":{"position":[[6352,13]]}},"keywords":{}}],["table_nam",{"_index":3430,"title":{},"content":{"371":{"position":[[1311,13]]},"398":{"position":[[345,13]]},"556":{"position":[[1267,11]]},"557":{"position":[[566,11]]},"758":{"position":[[325,13]]},"771":{"position":[[325,13]]},"798":{"position":[[323,13]]},"813":{"position":[[323,13]]},"829":{"position":[[323,13]]},"868":{"position":[[503,13]]},"880":{"position":[[472,13]]},"908":{"position":[[339,13]]},"924":{"position":[[339,13]]},"935":{"position":[[339,13]]},"951":{"position":[[339,13]]},"969":{"position":[[339,13]]},"1037":{"position":[[289,13]]},"1046":{"position":[[280,13]]},"1054":{"position":[[280,13]]},"1062":{"position":[[280,13]]},"1126":{"position":[[306,13]]},"1139":{"position":[[1197,13]]},"1152":{"position":[[391,13]]},"1180":{"position":[[301,13]]},"1182":{"position":[[615,13]]},"1189":{"position":[[470,13]]},"1191":{"position":[[619,13]]},"1261":{"position":[[333,13]]},"1262":{"position":[[619,13]]},"1270":{"position":[[221,13]]},"1287":{"position":[[210,13]]},"1292":{"position":[[6397,10]]},"1302":{"position":[[210,13]]},"1306":{"position":[[6397,10]]},"1314":{"position":[[213,13]]},"1326":{"position":[[210,13]]},"1329":{"position":[[6397,10]]},"1338":{"position":[[213,13]]},"1349":{"position":[[213,13]]},"1357":{"position":[[442,13]]},"1368":{"position":[[149,13]]},"1377":{"position":[[214,13]]},"1387":{"position":[[509,13],[1135,13]]},"1389":{"position":[[617,13]]},"1401":{"position":[[214,13]]},"1412":{"position":[[214,13]]},"1421":{"position":[[496,13]]},"1428":{"position":[[254,13]]}},"keywords":{}}],["table_namespac",{"_index":3431,"title":{},"content":{"371":{"position":[[1336,18]]},"758":{"position":[[298,18]]},"771":{"position":[[298,18]]},"798":{"position":[[296,18]]},"813":{"position":[[296,18]]},"829":{"position":[[296,18]]},"868":{"position":[[476,18]]},"880":{"position":[[494,18]]},"908":{"position":[[364,18]]},"924":{"position":[[364,18]]},"935":{"position":[[364,18]]},"951":{"position":[[364,18]]},"969":{"position":[[364,18]]}},"keywords":{}}],["table_typ",{"_index":5865,"title":{},"content":{"1206":{"position":[[1037,11]]},"1207":{"position":[[570,11]]}},"keywords":{}}],["tables.resourc",{"_index":765,"title":{},"content":{"45":{"position":[[232,16]]}},"keywords":{}}],["tables.th",{"_index":5968,"title":{},"content":{"1281":{"position":[[272,10]]},"1295":{"position":[[272,10]]},"1319":{"position":[[272,10]]}},"keywords":{}}],["tablesampl",{"_index":5568,"title":{},"content":{"1140":{"position":[[1191,11]]},"1316":{"position":[[1191,11]]},"1340":{"position":[[1191,11]]},"1351":{"position":[[1191,11]]},"1379":{"position":[[4269,11]]},"1394":{"position":[[753,11]]},"1403":{"position":[[4269,11]]},"1414":{"position":[[4269,11]]},"1431":{"position":[[1214,11]]}},"keywords":{}}],["tablespac",{"_index":4900,"title":{},"content":{"871":{"position":[[85,10]]},"1292":{"position":[[6315,10]]},"1306":{"position":[[6315,10]]},"1329":{"position":[[6315,10]]}},"keywords":{}}],["tablesstorag",{"_index":6410,"title":{},"content":{"1417":{"position":[[207,13]]}},"keywords":{}}],["tabsscreen",{"_index":4488,"title":{},"content":{"709":{"position":[[612,10]]}},"keywords":{}}],["tackl",{"_index":718,"title":{},"content":{"40":{"position":[[259,6]]},"110":{"position":[[828,8]]},"241":{"position":[[502,6]]},"278":{"position":[[321,6]]},"280":{"position":[[1055,6]]}},"keywords":{}}],["tag",{"_index":1114,"title":{},"content":{"81":{"position":[[71,7],[417,3],[1163,3],[1222,3]]},"84":{"position":[[1082,5]]},"529":{"position":[[403,4]]},"686":{"position":[[1048,4]]},"1134":{"position":[[1989,4]]},"1465":{"position":[[592,6]]}},"keywords":{}}],["tagsproduct",{"_index":5370,"title":{},"content":{"1096":{"position":[[294,11]]}},"keywords":{}}],["tailor",{"_index":2423,"title":{},"content":{"213":{"position":[[459,8]]}},"keywords":{}}],["take",{"_index":180,"title":{},"content":{"4":{"position":[[576,6]]},"30":{"position":[[221,4]]},"102":{"position":[[195,4]]},"110":{"position":[[611,6]]},"146":{"position":[[855,4]]},"149":{"position":[[828,4]]},"152":{"position":[[831,4]]},"154":{"position":[[827,6]]},"179":{"position":[[400,4]]},"210":{"position":[[195,4],[368,4]]},"221":{"position":[[1801,4]]},"236":{"position":[[217,4],[1741,4],[2544,4]]},"239":{"position":[[1412,4],[1631,4],[1941,4]]},"241":{"position":[[267,4]]},"295":{"position":[[1294,4]]},"296":{"position":[[955,4],[1205,4],[4196,4],[5181,4],[6950,4],[7970,4]]},"315":{"position":[[675,4],[1266,4]]},"343":{"position":[[497,4]]},"480":{"position":[[993,4]]},"554":{"position":[[348,4]]},"757":{"position":[[658,5]]},"767":{"position":[[1309,4],[1662,4]]},"770":{"position":[[658,5]]},"792":{"position":[[139,4],[1604,4]]},"797":{"position":[[658,5]]},"812":{"position":[[658,5]]},"824":{"position":[[1375,4],[1726,4]]},"828":{"position":[[658,5]]},"842":{"position":[[2784,4]]},"900":{"position":[[73,4]]},"904":{"position":[[1239,4]]},"917":{"position":[[1934,4]]},"918":{"position":[[139,4],[1531,4]]},"947":{"position":[[1200,4]]},"965":{"position":[[1934,4]]},"1156":{"position":[[630,4]]},"1166":{"position":[[159,4]]},"1204":{"position":[[549,4]]},"1285":{"position":[[670,5]]},"1300":{"position":[[670,5]]},"1324":{"position":[[670,5]]},"1391":{"position":[[364,5]]},"1429":{"position":[[318,4]]},"1442":{"position":[[1258,4]]},"1447":{"position":[[674,4]]},"1452":{"position":[[1811,4],[1867,4],[2166,4]]},"1455":{"position":[[340,4]]},"1463":{"position":[[55,5],[140,5]]},"1465":{"position":[[670,6]]},"1467":{"position":[[376,6],[1637,4]]},"1476":{"position":[[54,6],[724,4]]},"1479":{"position":[[560,4]]}},"keywords":{}}],["takeaway",{"_index":2415,"title":{},"content":{"211":{"position":[[250,9]]}},"keywords":{}}],["taken",{"_index":1810,"title":{},"content":{"139":{"position":[[57,5]]},"140":{"position":[[39,5]]},"143":{"position":[[65,5]]},"145":{"position":[[74,5]]},"148":{"position":[[80,5]]},"151":{"position":[[90,5]]},"221":{"position":[[1412,5]]},"759":{"position":[[269,5]]},"760":{"position":[[151,5]]},"772":{"position":[[280,5]]},"773":{"position":[[151,5]]},"799":{"position":[[267,5]]},"800":{"position":[[151,5]]},"814":{"position":[[267,5]]},"815":{"position":[[151,5]]},"830":{"position":[[267,5]]},"831":{"position":[[151,5]]},"1438":{"position":[[401,5]]},"1459":{"position":[[1107,5]]},"1475":{"position":[[125,6]]}},"keywords":{}}],["talk",{"_index":2236,"title":{},"content":{"207":{"position":[[43,4],[349,7]]}},"keywords":{}}],["tan",{"_index":5570,"title":{},"content":{"1140":{"position":[[1242,3]]},"1316":{"position":[[1242,3]]},"1340":{"position":[[1242,3]]},"1351":{"position":[[1242,3]]},"1431":{"position":[[1265,3]]}},"keywords":{}}],["tanh",{"_index":5573,"title":{},"content":{"1140":{"position":[[1289,4]]},"1316":{"position":[[1289,4]]},"1340":{"position":[[1289,4]]},"1351":{"position":[[1289,4]]},"1431":{"position":[[1312,4]]}},"keywords":{}}],["tap",{"_index":892,"title":{},"content":{"58":{"position":[[726,3]]},"169":{"position":[[973,3]]},"280":{"position":[[247,6]]}},"keywords":{}}],["target",{"_index":847,"title":{},"content":{"56":{"position":[[1507,6],[1633,7],[2045,7]]},"92":{"position":[[101,6]]},"124":{"position":[[726,6]]},"125":{"position":[[85,6]]},"198":{"position":[[922,7]]},"208":{"position":[[512,6],[959,6]]},"209":{"position":[[903,8]]},"234":{"position":[[476,6]]},"288":{"position":[[613,6]]},"299":{"position":[[528,6]]},"307":{"position":[[1228,7],[1811,7],[2090,7]]},"360":{"position":[[223,7]]},"368":{"position":[[101,8]]},"371":{"position":[[1377,7]]},"378":{"position":[[345,7]]},"388":{"position":[[481,7]]},"393":{"position":[[360,7]]},"398":{"position":[[359,7]]},"403":{"position":[[450,7]]},"418":{"position":[[426,7]]},"425":{"position":[[257,7],[338,7],[417,7],[497,7],[592,7]]},"433":{"position":[[390,7],[786,7]]},"439":{"position":[[641,7]]},"449":{"position":[[462,7]]},"455":{"position":[[306,7]]},"461":{"position":[[303,7]]},"467":{"position":[[239,7]]},"473":{"position":[[341,7]]},"497":{"position":[[265,7]]},"503":{"position":[[213,7]]},"510":{"position":[[230,7]]},"518":{"position":[[516,7],[595,7],[676,7],[777,7],[886,7],[987,7],[1084,7],[1194,7],[1312,7],[1407,7],[1488,7],[1563,7],[1641,7]]},"527":{"position":[[391,7]]},"535":{"position":[[406,7]]},"541":{"position":[[228,7]]},"546":{"position":[[1133,7]]},"548":{"position":[[415,6],[1200,7]]},"557":{"position":[[656,7]]},"566":{"position":[[267,7]]},"575":{"position":[[373,7],[460,7],[564,7],[653,7],[753,7],[838,7],[933,7],[1036,7],[1132,7],[1231,7]]},"586":{"position":[[395,7],[482,7],[586,7],[675,7],[760,7],[855,7],[951,7],[1050,7]]},"594":{"position":[[1158,7],[1273,7],[1362,7],[1433,7]]},"612":{"position":[[406,7]]},"620":{"position":[[301,7]]},"626":{"position":[[202,7]]},"632":{"position":[[265,7]]},"638":{"position":[[432,7]]},"647":{"position":[[226,7]]},"655":{"position":[[256,7]]},"671":{"position":[[299,7]]},"686":{"position":[[293,7],[370,7],[457,7],[547,7],[640,7],[727,7],[816,7],[914,7],[1001,7],[1076,7],[1148,7]]},"701":{"position":[[229,7]]},"707":{"position":[[226,7]]},"713":{"position":[[235,7]]},"721":{"position":[[368,7]]},"736":{"position":[[223,7],[312,7],[406,7]]},"742":{"position":[[294,7]]},"748":{"position":[[460,7]]},"755":{"position":[[101,8]]},"758":{"position":[[361,7]]},"768":{"position":[[101,8]]},"771":{"position":[[361,7]]},"783":{"position":[[247,7]]},"795":{"position":[[99,8]]},"798":{"position":[[359,7]]},"810":{"position":[[99,8]]},"813":{"position":[[359,7]]},"826":{"position":[[99,8]]},"829":{"position":[[359,7]]},"843":{"position":[[811,7]]},"852":{"position":[[344,7]]},"860":{"position":[[316,7]]},"868":{"position":[[517,7]]},"880":{"position":[[528,7]]},"886":{"position":[[324,7]]},"892":{"position":[[185,7],[235,7],[282,7],[330,7],[384,7],[445,7],[507,7],[567,7],[626,7]]},"905":{"position":[[104,8]]},"908":{"position":[[405,7]]},"920":{"position":[[104,8]]},"924":{"position":[[405,7]]},"932":{"position":[[104,8]]},"935":{"position":[[405,7]]},"948":{"position":[[104,8]]},"951":{"position":[[405,7]]},"960":{"position":[[236,7]]},"966":{"position":[[104,8]]},"969":{"position":[[405,7]]},"983":{"position":[[226,7]]},"992":{"position":[[266,7],[332,7]]},"998":{"position":[[266,7]]},"1010":{"position":[[502,7],[620,7]]},"1016":{"position":[[354,7]]},"1022":{"position":[[437,7]]},"1029":{"position":[[234,7]]},"1031":{"position":[[75,6]]},"1037":{"position":[[303,7]]},"1046":{"position":[[339,7]]},"1054":{"position":[[339,7]]},"1062":{"position":[[339,7]]},"1071":{"position":[[365,7]]},"1078":{"position":[[265,7],[360,7],[441,7],[527,7],[633,7],[727,7],[826,7],[924,7],[1003,7],[1079,7],[1160,7],[1254,7],[1340,7],[1425,7],[1508,7],[1582,7],[1657,7],[1742,7],[1825,7],[1913,7],[2005,7],[2089,7]]},"1086":{"position":[[422,7]]},"1102":{"position":[[225,7]]},"1108":{"position":[[301,7]]},"1114":{"position":[[287,7]]},"1134":{"position":[[331,7],[432,7],[550,7],[628,7],[709,7],[825,7],[935,7],[1035,7],[1142,7],[1267,7],[1383,7],[1464,7],[1557,7],[1646,7],[1763,7],[1854,7],[1938,7],[2017,7],[2122,7],[2237,7],[2352,7],[2464,7],[2577,7],[2692,7],[2810,7],[2918,7],[3020,7]]},"1166":{"position":[[94,6]]},"1236":{"position":[[125,6]]},"1382":{"position":[[75,6],[187,6]]},"1392":{"position":[[39,6]]},"1459":{"position":[[644,6]]}},"keywords":{}}],["targetingssponsor",{"_index":3469,"title":{},"content":{"381":{"position":[[333,19],[497,19]]}},"keywords":{}}],["task",{"_index":216,"title":{"18":{"position":[[0,4]]},"44":{"position":[[0,6]]},"49":{"position":[[0,4]]},"114":{"position":[[23,4]]},"282":{"position":[[15,4]]},"284":{"position":[[6,4]]},"342":{"position":[[12,4]]}},"content":{"6":{"position":[[339,4],[502,6]]},"7":{"position":[[44,4],[117,5],[356,4]]},"8":{"position":[[308,6],[377,4],[505,4],[608,5],[671,4],[859,5]]},"19":{"position":[[8,4],[213,5],[266,4],[536,6]]},"20":{"position":[[102,4],[616,5]]},"21":{"position":[[5,4],[88,5],[169,5],[302,5]]},"35":{"position":[[21,4]]},"36":{"position":[[29,4]]},"41":{"position":[[546,5]]},"44":{"position":[[85,6],[333,6]]},"48":{"position":[[139,4]]},"49":{"position":[[1,4],[53,5],[68,4],[111,4],[308,5],[391,5],[541,5]]},"56":{"position":[[2283,4]]},"66":{"position":[[160,5],[536,5]]},"83":{"position":[[312,4]]},"94":{"position":[[2804,4]]},"97":{"position":[[704,4]]},"100":{"position":[[1210,4]]},"101":{"position":[[111,4],[447,4],[573,5]]},"105":{"position":[[452,4]]},"107":{"position":[[227,5],[949,4],[2252,4],[2292,4],[2446,4],[2597,4]]},"108":{"position":[[182,4]]},"109":{"position":[[691,4]]},"112":{"position":[[12,5],[380,5],[622,4],[745,4],[882,4]]},"113":{"position":[[605,4]]},"115":{"position":[[1314,4]]},"117":{"position":[[106,5],[324,4],[368,4],[619,5]]},"135":{"position":[[789,4]]},"138":{"position":[[1159,4]]},"141":{"position":[[1248,4]]},"142":{"position":[[1128,4]]},"181":{"position":[[179,6]]},"183":{"position":[[2597,4]]},"213":{"position":[[100,6]]},"240":{"position":[[3392,4]]},"259":{"position":[[1025,5],[1304,5],[2606,5]]},"274":{"position":[[32,6]]},"275":{"position":[[271,4]]},"278":{"position":[[61,4],[824,5]]},"280":{"position":[[43,4],[1067,5]]},"281":{"position":[[256,4],[2863,4],[2906,4],[3006,4]]},"284":{"position":[[174,4],[331,4],[430,4],[475,4],[556,4]]},"285":{"position":[[465,5]]},"305":{"position":[[96,5],[593,5]]},"307":{"position":[[687,5]]},"309":{"position":[[1377,5]]},"320":{"position":[[634,6],[661,4],[1913,5],[1990,5],[2076,5],[2178,5]]},"321":{"position":[[1122,6],[1513,6],[1551,5],[1579,4],[1738,4],[1790,4],[2024,5],[2089,5],[2227,4]]},"322":{"position":[[860,5]]},"323":{"position":[[550,6],[558,5],[1091,5]]},"333":{"position":[[131,5],[510,4],[528,6]]},"483":{"position":[[656,5]]},"628":{"position":[[288,4]]},"842":{"position":[[1474,4],[1518,5],[1542,4],[1701,5]]},"909":{"position":[[664,5],[1021,5]]},"925":{"position":[[664,5],[1021,5]]},"936":{"position":[[664,5],[1021,5]]},"952":{"position":[[664,5],[1021,5]]},"970":{"position":[[664,5],[1021,5]]},"1036":{"position":[[517,4]]},"1183":{"position":[[508,4],[715,4]]},"1363":{"position":[[351,4]]},"1435":{"position":[[349,5]]},"1437":{"position":[[187,4],[698,5],[760,5],[1329,4],[1562,4]]},"1447":{"position":[[414,5],[563,4],[724,4]]},"1452":{"position":[[1664,4],[1758,4]]},"1453":{"position":[[680,4]]},"1455":{"position":[[501,4]]},"1470":{"position":[[61,5],[400,4]]},"1471":{"position":[[240,5],[275,4],[322,4],[828,4]]},"1472":{"position":[[236,6],[265,5],[349,7]]},"1473":{"position":[[191,4]]},"1474":{"position":[[217,5],[383,4],[465,5],[601,4],[619,4]]},"1475":{"position":[[186,5],[325,4]]}},"keywords":{}}],["task'",{"_index":555,"title":{},"content":{"20":{"position":[[1110,6]]},"343":{"position":[[75,6]]},"1470":{"position":[[190,6]]},"1475":{"position":[[910,6]]}},"keywords":{}}],["task.ent",{"_index":3824,"title":{},"content":{"479":{"position":[[255,10]]}},"keywords":{}}],["task_limit",{"_index":4795,"title":{},"content":{"843":{"position":[[458,11]]}},"keywords":{}}],["tasksformsform",{"_index":4390,"title":{},"content":{"649":{"position":[[387,14]]}},"keywords":{}}],["tasktrac",{"_index":247,"title":{},"content":{"7":{"position":[[491,10]]}},"keywords":{}}],["task’",{"_index":252,"title":{},"content":{"7":{"position":[[608,6]]}},"keywords":{}}],["tbl2",{"_index":5100,"title":{},"content":{"945":{"position":[[181,5]]}},"keywords":{}}],["tbl3>",{"_index":5101,"title":{},"content":{"945":{"position":[[187,9]]}},"keywords":{}}],["tcp",{"_index":2578,"title":{},"content":{"238":{"position":[[254,3],[275,3]]}},"keywords":{}}],["team",{"_index":1278,"title":{},"content":{"84":{"position":[[1405,5]]},"136":{"position":[[241,4]]},"208":{"position":[[424,5]]},"210":{"position":[[2057,4],[2380,4]]},"211":{"position":[[653,5]]},"278":{"position":[[85,4]]},"279":{"position":[[110,4]]},"280":{"position":[[238,4]]},"281":{"position":[[94,4]]},"427":{"position":[[439,5]]},"487":{"position":[[655,4]]},"529":{"position":[[415,4],[452,4],[482,5]]},"686":{"position":[[1119,5]]},"977":{"position":[[806,5]]},"1461":{"position":[[666,5],[939,4],[4231,4],[4272,6],[4299,4],[4391,4],[4420,5],[4543,6],[4550,4],[4598,4],[4765,4],[4825,4],[4863,4],[5062,4],[5181,4],[5300,4],[5457,4]]},"1462":{"position":[[245,6],[385,4],[489,4],[685,6]]}},"keywords":{}}],["teamdatetim",{"_index":4811,"title":{},"content":{"847":{"position":[[148,12]]}},"keywords":{}}],["teamfor",{"_index":5271,"title":{},"content":{"1067":{"position":[[511,7]]}},"keywords":{}}],["teamuser.flow.yaml",{"_index":6626,"title":{},"content":{"1461":{"position":[[4889,18]]}},"keywords":{}}],["teamweb.flow.yaml",{"_index":6630,"title":{},"content":{"1461":{"position":[[5353,17]]}},"keywords":{}}],["tear",{"_index":4641,"title":{},"content":{"761":{"position":[[368,7]]},"762":{"position":[[490,4]]},"774":{"position":[[368,7]]},"775":{"position":[[490,4]]},"801":{"position":[[374,7]]},"802":{"position":[[490,4]]},"816":{"position":[[374,7]]},"817":{"position":[[490,4]]},"832":{"position":[[374,7]]},"833":{"position":[[490,4]]}},"keywords":{}}],["technic",{"_index":773,"title":{},"content":{"47":{"position":[[84,9]]},"211":{"position":[[144,9]]},"241":{"position":[[344,9]]},"323":{"position":[[1623,9],[1803,9],[1873,9]]},"329":{"position":[[1175,9]]},"1453":{"position":[[4,9]]}},"keywords":{}}],["techniqu",{"_index":3192,"title":{},"content":{"330":{"position":[[39,10]]},"909":{"position":[[226,10]]},"925":{"position":[[226,10]]},"936":{"position":[[226,10]]},"952":{"position":[[226,10]]},"970":{"position":[[226,10]]},"1437":{"position":[[780,9]]}},"keywords":{}}],["technolog",{"_index":789,"title":{},"content":{"52":{"position":[[126,10]]},"319":{"position":[[375,13]]},"363":{"position":[[67,10]]}},"keywords":{}}],["tediou",{"_index":1674,"title":{},"content":{"122":{"position":[[540,7]]},"133":{"position":[[42,7]]}},"keywords":{}}],["tell",{"_index":805,"title":{},"content":{"54":{"position":[[138,4]]},"67":{"position":[[449,4]]},"107":{"position":[[3892,4]]},"119":{"position":[[226,4]]},"210":{"position":[[261,4]]},"236":{"position":[[2672,4]]},"254":{"position":[[3212,5]]},"277":{"position":[[830,5]]},"296":{"position":[[2955,5]]},"314":{"position":[[2787,5]]},"1439":{"position":[[724,5]]}},"keywords":{}}],["temp",{"_index":6295,"title":{},"content":{"1370":{"position":[[1081,4]]}},"keywords":{}}],["temperatur",{"_index":1577,"title":{},"content":{"110":{"position":[[734,11]]}},"keywords":{}}],["templat",{"_index":3579,"title":{"483":{"position":[[6,10]]}},"content":{"414":{"position":[[151,9]]},"415":{"position":[[411,9]]},"482":{"position":[[709,9],[719,8],[738,10]]},"483":{"position":[[11,8],[209,8],[323,8]]}},"keywords":{}}],["template/main/word",{"_index":1296,"title":{},"content":{"87":{"position":[[820,18]]}},"keywords":{}}],["templatesinterviewsjob",{"_index":4327,"title":{},"content":{"622":{"position":[[206,22]]}},"keywords":{}}],["tempor",{"_index":6676,"title":{},"content":{"1473":{"position":[[128,8]]}},"keywords":{}}],["temporari",{"_index":1794,"title":{},"content":{"138":{"position":[[1671,9]]},"141":{"position":[[1676,9]]},"142":{"position":[[1688,9]]},"1140":{"position":[[1341,9]]},"1149":{"position":[[421,9]]},"1258":{"position":[[102,9]]},"1292":{"position":[[6447,9]]},"1306":{"position":[[6447,9]]},"1316":{"position":[[1341,9]]},"1329":{"position":[[6447,9]]},"1340":{"position":[[1341,9]]},"1351":{"position":[[1341,9]]},"1370":{"position":[[1092,9]]},"1379":{"position":[[4329,9]]},"1403":{"position":[[4329,9]]},"1414":{"position":[[4329,9]]},"1417":{"position":[[231,9]]},"1418":{"position":[[131,9]]},"1431":{"position":[[1364,9]]}},"keywords":{}}],["temporarili",{"_index":1638,"title":{},"content":{"117":{"position":[[67,11]]},"138":{"position":[[324,11]]},"141":{"position":[[634,11]]},"142":{"position":[[437,11]]},"154":{"position":[[1636,11]]},"1183":{"position":[[516,11]]}},"keywords":{}}],["temptabl",{"_index":6232,"title":{},"content":{"1292":{"position":[[6493,9]]},"1306":{"position":[[6493,9]]},"1329":{"position":[[6493,9]]}},"keywords":{}}],["ten",{"_index":1451,"title":{},"content":{"101":{"position":[[361,4]]},"595":{"position":[[1258,3]]}},"keywords":{}}],["tenant",{"_index":2018,"title":{},"content":{"173":{"position":[[325,6],[695,7]]},"436":{"position":[[277,6],[873,8],[993,8]]},"438":{"position":[[1078,6],[1108,6]]},"448":{"position":[[1056,6]]},"1008":{"position":[[1235,7],[1267,7],[1332,6]]},"1435":{"position":[[13,6]]},"1455":{"position":[[643,7]]},"1456":{"position":[[426,6]]},"1457":{"position":[[90,6]]}},"keywords":{}}],["tenant'",{"_index":6585,"title":{},"content":{"1456":{"position":[[286,8],[325,8]]}},"keywords":{}}],["tenant/salesforc",{"_index":5160,"title":{},"content":{"1008":{"position":[[1156,17]]}},"keywords":{}}],["tenant/salesforce/sourc",{"_index":5158,"title":{},"content":{"1008":{"position":[[444,24],[510,24]]}},"keywords":{}}],["tenant/salesforce/your",{"_index":5159,"title":{},"content":{"1008":{"position":[[653,22]]}},"keywords":{}}],["tenant_id",{"_index":3745,"title":{},"content":{"448":{"position":[[1029,10]]},"449":{"position":[[382,10]]}},"keywords":{}}],["tend",{"_index":797,"title":{},"content":{"53":{"position":[[181,4]]},"309":{"position":[[850,4]]},"320":{"position":[[939,5]]},"1391":{"position":[[572,4],[679,4],[949,4]]}},"keywords":{}}],["tenenat",{"_index":6583,"title":{},"content":{"1456":{"position":[[194,7]]}},"keywords":{}}],["tens",{"_index":6430,"title":{},"content":{"1434":{"position":[[167,5]]}},"keywords":{}}],["term",{"_index":659,"title":{},"content":{"32":{"position":[[54,5]]},"66":{"position":[[35,5],[228,5]]},"107":{"position":[[1801,5]]},"113":{"position":[[295,6]]},"176":{"position":[[259,6]]},"296":{"position":[[3558,5]]},"305":{"position":[[317,5]]},"323":{"position":[[302,5],[1614,5]]},"560":{"position":[[210,6]]},"1009":{"position":[[1435,4]]},"1085":{"position":[[657,4]]},"1451":{"position":[[601,5]]},"1453":{"position":[[14,6]]},"1477":{"position":[[3063,5]]}},"keywords":{}}],["termin",{"_index":876,"title":{},"content":{"58":{"position":[[229,9]]},"169":{"position":[[468,9],[1433,8],[1601,9]]},"183":{"position":[[4106,9]]},"237":{"position":[[3044,9],[3284,9]]},"242":{"position":[[217,9],[256,9]]},"253":{"position":[[988,9]]},"267":{"position":[[2084,9]]},"313":{"position":[[988,9]]},"340":{"position":[[293,8],[461,9]]},"595":{"position":[[1170,9]]},"922":{"position":[[2430,9]]},"1292":{"position":[[6533,10]]},"1306":{"position":[[6533,10]]},"1329":{"position":[[6533,10]]},"1379":{"position":[[4378,9]]},"1403":{"position":[[4378,9]]},"1414":{"position":[[4378,9]]}},"keywords":{}}],["termsproduct",{"_index":5364,"title":{},"content":{"1096":{"position":[[192,12]]}},"keywords":{}}],["terribl",{"_index":1573,"title":{},"content":{"110":{"position":[[594,8]]}},"keywords":{}}],["test",{"_index":489,"title":{"43":{"position":[[0,6]]},"127":{"position":[[0,5]]},"132":{"position":[[0,7]]}},"content":{"17":{"position":[[95,5]]},"26":{"position":[[670,4]]},"31":{"position":[[118,5]]},"33":{"position":[[136,6]]},"43":{"position":[[1,5],[119,5],[199,4],[412,4],[448,5]]},"60":{"position":[[549,4]]},"61":{"position":[[1075,4],[1230,4]]},"87":{"position":[[701,4],[759,4]]},"102":{"position":[[524,4]]},"128":{"position":[[381,6]]},"129":{"position":[[682,6]]},"130":{"position":[[98,6]]},"131":{"position":[[31,7]]},"132":{"position":[[81,6],[115,4],[189,4],[301,4],[371,6]]},"133":{"position":[[25,6],[205,6],[287,5],[328,6],[349,6],[570,5]]},"184":{"position":[[937,4]]},"209":{"position":[[105,5]]},"210":{"position":[[1666,4]]},"236":{"position":[[900,5]]},"250":{"position":[[1168,4]]},"264":{"position":[[52,5]]},"274":{"position":[[1065,6]]},"275":{"position":[[35,4],[360,4],[394,4],[578,4]]},"281":{"position":[[1176,5]]},"295":{"position":[[173,4]]},"296":{"position":[[7769,4]]},"309":{"position":[[515,6],[1302,4],[1763,4]]},"324":{"position":[[288,8]]},"329":{"position":[[27,5]]},"332":{"position":[[203,8],[745,5]]},"429":{"position":[[296,8]]},"485":{"position":[[289,4]]},"635":{"position":[[252,4]]},"657":{"position":[[289,4]]},"673":{"position":[[289,4]]},"675":{"position":[[369,4]]},"688":{"position":[[289,4]]},"783":{"position":[[242,4]]},"805":{"position":[[85,7]]},"820":{"position":[[85,7]]},"836":{"position":[[85,7]]},"1039":{"position":[[185,6]]},"1049":{"position":[[111,6]]},"1057":{"position":[[114,6]]},"1254":{"position":[[282,4]]},"1446":{"position":[[310,6]]},"1461":{"position":[[2192,4],[2246,5],[3962,4]]},"1463":{"position":[[495,6]]},"1464":{"position":[[401,6]]},"1465":{"position":[[1088,6]]},"1466":{"position":[[380,6]]},"1467":{"position":[[909,6],[2334,6]]},"1476":{"position":[[350,6],[1551,6]]},"1477":{"position":[[1566,6],[3886,6]]}},"keywords":{}}],["test.flow.yaml",{"_index":2828,"title":{},"content":{"277":{"position":[[528,14]]},"278":{"position":[[862,14]]},"279":{"position":[[1003,14]]},"280":{"position":[[1116,14]]},"281":{"position":[[1203,14]]}},"keywords":{}}],["text",{"_index":439,"title":{},"content":{"14":{"position":[[892,6],[1216,6]]},"98":{"position":[[629,4]]},"100":{"position":[[547,4]]},"141":{"position":[[984,4]]},"236":{"position":[[3376,4],[3404,6]]},"253":{"position":[[126,4]]},"278":{"position":[[1022,4],[1047,4]]},"279":{"position":[[1317,4],[1342,4]]},"280":{"position":[[1542,4]]},"295":{"position":[[1555,4]]},"313":{"position":[[126,4]]},"367":{"position":[[638,4],[666,6]]},"752":{"position":[[314,6]]},"753":{"position":[[970,6]]},"767":{"position":[[1950,6]]},"791":{"position":[[267,6]]},"792":{"position":[[1890,6]]},"793":{"position":[[941,6]]},"808":{"position":[[887,6]]},"824":{"position":[[2012,6]]},"904":{"position":[[1738,4],[1766,6]]},"917":{"position":[[1247,4],[1275,6]]},"918":{"position":[[2030,4],[2058,6]]},"919":{"position":[[2085,4],[2113,6]]},"931":{"position":[[1400,4],[1428,6]]},"965":{"position":[[1247,4],[1275,6]]},"1042":{"position":[[746,6]]},"1043":{"position":[[1410,6]]},"1051":{"position":[[1672,6]]},"1059":{"position":[[1465,6]]},"1200":{"position":[[131,4]]},"1209":{"position":[[530,4]]},"1274":{"position":[[242,4]]},"1275":{"position":[[329,4]]},"1277":{"position":[[609,4]]},"1292":{"position":[[6567,4]]},"1306":{"position":[[6567,4]]},"1329":{"position":[[6567,4]]}},"keywords":{}}],["textmap",{"_index":5836,"title":{},"content":{"1200":{"position":[[285,12]]}},"keywords":{}}],["textsiz",{"_index":6348,"title":{},"content":{"1379":{"position":[[4437,8]]},"1403":{"position":[[4437,8]]},"1414":{"position":[[4437,8]]}},"keywords":{}}],["th",{"_index":6563,"title":{},"content":{"1452":{"position":[[4367,3],[4553,2]]}},"keywords":{}}],["th)ursday,(f)riday",{"_index":6560,"title":{},"content":{"1452":{"position":[[4209,20]]}},"keywords":{}}],["than00:28",{"_index":6573,"title":{},"content":{"1453":{"position":[[795,10]]}},"keywords":{}}],["thank",{"_index":1277,"title":{},"content":{"84":{"position":[[1225,6]]}},"keywords":{}}],["that'",{"_index":1090,"title":{},"content":{"74":{"position":[[977,6]]},"114":{"position":[[593,6]]},"115":{"position":[[488,6]]},"135":{"position":[[794,6]]},"180":{"position":[[751,6]]},"182":{"position":[[602,6]]},"281":{"position":[[1755,6]]},"309":{"position":[[1499,6],[1799,6],[1887,6]]},"333":{"position":[[425,6]]},"488":{"position":[[1011,6]]},"659":{"position":[[1168,6]]},"661":{"position":[[74,6]]},"676":{"position":[[1011,6]]},"691":{"position":[[1011,6]]},"821":{"position":[[629,6]]},"912":{"position":[[645,6]]},"1461":{"position":[[944,6],[4662,6]]}},"keywords":{}}],["that’",{"_index":1610,"title":{},"content":{"114":{"position":[[263,6]]},"115":{"position":[[1276,6]]},"212":{"position":[[1,6]]},"239":{"position":[[1386,6]]},"240":{"position":[[4272,6]]},"243":{"position":[[1,6]]},"296":{"position":[[7606,6]]},"314":{"position":[[3017,6]]}},"keywords":{}}],["theacmeco/sal",{"_index":923,"title":{},"content":{"61":{"position":[[718,16]]}},"keywords":{}}],["theapprov",{"_index":1515,"title":{},"content":{"107":{"position":[[581,12]]}},"keywords":{}}],["theaw",{"_index":5741,"title":{},"content":{"1149":{"position":[[724,6]]},"1258":{"position":[[318,6]]}},"keywords":{}}],["thecollect",{"_index":1652,"title":{},"content":{"121":{"position":[[185,13]]}},"keywords":{}}],["thedestin",{"_index":2099,"title":{},"content":{"185":{"position":[[298,15]]}},"keywords":{}}],["theenable_case_sensitive_identifierconfigur",{"_index":5754,"title":{},"content":{"1155":{"position":[[238,48]]}},"keywords":{}}],["theestuari",{"_index":5751,"title":{},"content":{"1154":{"position":[[149,10]]}},"keywords":{}}],["theflowctl",{"_index":6604,"title":{},"content":{"1461":{"position":[[1668,10]]}},"keywords":{}}],["themselv",{"_index":4888,"title":{},"content":{"869":{"position":[[1038,11]]},"1459":{"position":[[1663,10]]},"1477":{"position":[[1422,11],[3588,11]]}},"keywords":{}}],["thenpmdependenciesof",{"_index":953,"title":{},"content":{"63":{"position":[[904,20]]}},"keywords":{}}],["theori",{"_index":2178,"title":{},"content":{"196":{"position":[[682,6]]},"233":{"position":[[867,6]]}},"keywords":{}}],["there'",{"_index":919,"title":{},"content":{"61":{"position":[[363,7]]},"146":{"position":[[999,7]]},"149":{"position":[[993,7]]},"152":{"position":[[983,7]]},"190":{"position":[[1698,7],[1809,7]]},"192":{"position":[[2171,7]]},"269":{"position":[[150,7]]},"280":{"position":[[565,7]]},"291":{"position":[[678,7]]},"302":{"position":[[678,7]]},"322":{"position":[[932,7]]},"326":{"position":[[951,7]]},"1462":{"position":[[540,7]]}},"keywords":{}}],["thereaft",{"_index":1304,"title":{},"content":{"88":{"position":[[575,10]]}},"keywords":{}}],["thereduct",{"_index":1940,"title":{},"content":{"164":{"position":[[796,12]]}},"keywords":{}}],["therefor",{"_index":3058,"title":{},"content":{"309":{"position":[[522,10]]},"321":{"position":[[878,10]]},"1439":{"position":[[1587,9]]},"1477":{"position":[[1450,9],[3616,9]]}},"keywords":{}}],["thereplica",{"_index":4686,"title":{},"content":{"785":{"position":[[521,10]]}},"keywords":{}}],["there’",{"_index":2502,"title":{},"content":{"236":{"position":[[515,7]]},"296":{"position":[[6569,7]]},"313":{"position":[[3068,7]]},"319":{"position":[[264,7]]}},"keywords":{}}],["thes3:putobject",{"_index":5715,"title":{},"content":{"1142":{"position":[[161,15]]},"1168":{"position":[[161,15]]}},"keywords":{}}],["thesourcecaptur",{"_index":1711,"title":{},"content":{"126":{"position":[[157,16]]}},"keywords":{}}],["thestorag",{"_index":2021,"title":{},"content":{"173":{"position":[[765,10]]}},"keywords":{}}],["they'll",{"_index":2458,"title":{},"content":{"221":{"position":[[1524,7]]}},"keywords":{}}],["they'r",{"_index":705,"title":{},"content":{"38":{"position":[[545,7]]},"41":{"position":[[103,7]]},"72":{"position":[[501,7]]},"103":{"position":[[294,7]]},"112":{"position":[[659,7]]},"166":{"position":[[549,7]]},"180":{"position":[[224,7]]},"190":{"position":[[476,7]]},"228":{"position":[[413,7]]},"229":{"position":[[298,7]]},"277":{"position":[[1058,7]]},"281":{"position":[[2350,7],[2531,7]]},"284":{"position":[[522,7]]},"332":{"position":[[696,7]]}},"keywords":{}}],["they’r",{"_index":210,"title":{},"content":{"6":{"position":[[269,7]]},"114":{"position":[[753,7]]},"156":{"position":[[652,7]]}},"keywords":{}}],["thing",{"_index":299,"title":{},"content":{"11":{"position":[[326,6]]},"100":{"position":[[405,6],[462,8]]},"160":{"position":[[79,6]]},"190":{"position":[[1301,6]]},"232":{"position":[[902,7]]},"234":{"position":[[60,7]]},"281":{"position":[[1775,5]]},"296":{"position":[[4135,6]]},"315":{"position":[[614,6]]},"323":{"position":[[249,6]]},"849":{"position":[[1632,5]]}},"keywords":{}}],["thing"",{"_index":6497,"title":{},"content":{"1440":{"position":[[1542,11]]}},"keywords":{}}],["think",{"_index":628,"title":{},"content":{"27":{"position":[[309,5]]},"90":{"position":[[210,5]]},"164":{"position":[[939,5]]},"320":{"position":[[219,5]]},"321":{"position":[[183,5]]},"1178":{"position":[[348,5]]}},"keywords":{}}],["third",{"_index":699,"title":{"364":{"position":[[0,5]]}},"content":{"38":{"position":[[236,5]]},"53":{"position":[[38,5],[336,5]]},"88":{"position":[[441,5]]},"102":{"position":[[246,5]]},"161":{"position":[[1272,5]]},"206":{"position":[[985,6]]},"281":{"position":[[2661,5]]},"296":{"position":[[7378,5]]},"337":{"position":[[405,5]]},"364":{"position":[[46,5],[315,5],[372,5]]}},"keywords":{}}],["thorough",{"_index":6677,"title":{},"content":{"1473":{"position":[[247,8]]}},"keywords":{}}],["thoroughli",{"_index":1734,"title":{},"content":{"132":{"position":[[88,11]]}},"keywords":{}}],["those",{"_index":813,"title":{},"content":{"55":{"position":[[205,5]]},"75":{"position":[[440,5]]},"99":{"position":[[431,5]]},"124":{"position":[[300,5]]},"165":{"position":[[1716,5]]},"236":{"position":[[2715,5]]},"270":{"position":[[94,5]]},"278":{"position":[[245,5],[655,5]]},"281":{"position":[[2471,5]]},"307":{"position":[[302,5]]},"322":{"position":[[1114,5]]},"326":{"position":[[1051,5]]},"477":{"position":[[278,5]]},"598":{"position":[[200,5]]},"747":{"position":[[298,5]]},"869":{"position":[[375,5]]},"909":{"position":[[132,5]]},"911":{"position":[[432,5]]},"925":{"position":[[132,5]]},"927":{"position":[[432,5]]},"936":{"position":[[132,5]]},"938":{"position":[[432,5]]},"952":{"position":[[132,5]]},"954":{"position":[[432,5]]},"970":{"position":[[132,5]]},"972":{"position":[[432,5]]},"1391":{"position":[[933,5]]},"1437":{"position":[[125,5]]},"1438":{"position":[[475,5]]},"1439":{"position":[[198,5]]},"1452":{"position":[[2149,5]]},"1474":{"position":[[326,5]]}},"keywords":{}}],["though",{"_index":420,"title":{},"content":{"14":{"position":[[1,6]]},"109":{"position":[[612,6]]},"122":{"position":[[606,6]]},"215":{"position":[[87,6]]},"245":{"position":[[219,6]]},"326":{"position":[[321,7]]},"478":{"position":[[263,6]]},"599":{"position":[[263,6]]},"922":{"position":[[1469,6]]}},"keywords":{}}],["thought",{"_index":204,"title":{},"content":{"6":{"position":[[169,7]]},"1462":{"position":[[121,7]]}},"keywords":{}}],["thousand",{"_index":1452,"title":{},"content":{"101":{"position":[[369,9]]}},"keywords":{}}],["thread",{"_index":4265,"title":{},"content":{"595":{"position":[[316,7],[676,8]]},"1015":{"position":[[148,7],[225,8]]}},"keywords":{}}],["thread_priori",{"_index":6238,"title":{},"content":{"1292":{"position":[[6650,13]]},"1306":{"position":[[6650,13]]},"1329":{"position":[[6650,13]]}},"keywords":{}}],["threat",{"_index":2338,"title":{},"content":{"210":{"position":[[2540,7]]}},"keywords":{}}],["threaten",{"_index":2327,"title":{},"content":{"210":{"position":[[2302,8]]}},"keywords":{}}],["three",{"_index":294,"title":{},"content":{"11":{"position":[[201,5]]},"23":{"position":[[108,5]]},"32":{"position":[[166,5]]},"56":{"position":[[2599,5]]},"81":{"position":[[716,5]]},"107":{"position":[[1149,5]]},"144":{"position":[[11,5]]},"154":{"position":[[770,5]]},"183":{"position":[[2178,5]]},"189":{"position":[[1020,5]]},"197":{"position":[[789,5]]},"207":{"position":[[1596,5]]},"208":{"position":[[89,5]]},"216":{"position":[[122,5]]},"232":{"position":[[333,5]]},"239":{"position":[[1703,5]]},"320":{"position":[[2013,5]]},"385":{"position":[[284,5]]},"595":{"position":[[124,5]]}},"keywords":{}}],["threshold",{"_index":111,"title":{},"content":{"3":{"position":[[258,10]]},"419":{"position":[[1916,10],[2040,9]]},"441":{"position":[[525,10],[649,9]]},"504":{"position":[[1545,10],[1669,9]]},"547":{"position":[[1918,10],[2042,9]]},"577":{"position":[[53,10],[101,9],[229,10],[532,10]]},"588":{"position":[[48,10],[96,9],[224,10],[527,10]]},"639":{"position":[[1543,10],[1667,9]]},"1023":{"position":[[1899,10],[2023,9]]}},"keywords":{}}],["through",{"_index":8,"title":{},"content":{"1":{"position":[[90,7]]},"11":{"position":[[782,7],[1518,8],[1698,8]]},"45":{"position":[[434,7]]},"69":{"position":[[907,7]]},"81":{"position":[[270,7],[1870,7]]},"83":{"position":[[501,7]]},"84":{"position":[[322,7],[1067,8]]},"90":{"position":[[498,7]]},"95":{"position":[[225,7]]},"100":{"position":[[792,7]]},"109":{"position":[[747,7]]},"110":{"position":[[313,7]]},"119":{"position":[[169,7],[459,7]]},"120":{"position":[[2478,7]]},"135":{"position":[[816,7]]},"138":{"position":[[1238,7]]},"141":{"position":[[1321,7]]},"142":{"position":[[1215,7]]},"149":{"position":[[150,7]]},"154":{"position":[[1844,7]]},"163":{"position":[[228,7]]},"169":{"position":[[39,7]]},"192":{"position":[[1825,7]]},"197":{"position":[[123,7]]},"206":{"position":[[590,7],[905,7]]},"212":{"position":[[242,7]]},"213":{"position":[[80,7]]},"216":{"position":[[532,7]]},"221":{"position":[[1988,7]]},"228":{"position":[[1433,7]]},"230":{"position":[[1207,7]]},"243":{"position":[[236,7]]},"253":{"position":[[39,7]]},"266":{"position":[[173,7]]},"267":{"position":[[662,7]]},"277":{"position":[[1209,7]]},"278":{"position":[[769,7]]},"281":{"position":[[1901,7],[3261,7]]},"286":{"position":[[113,7]]},"288":{"position":[[106,7]]},"289":{"position":[[588,7]]},"295":{"position":[[1468,7]]},"299":{"position":[[106,7]]},"300":{"position":[[535,7]]},"313":{"position":[[39,7]]},"319":{"position":[[597,7]]},"322":{"position":[[558,7]]},"323":{"position":[[1889,7]]},"324":{"position":[[1234,7]]},"370":{"position":[[1553,7]]},"381":{"position":[[597,7]]},"385":{"position":[[323,7]]},"401":{"position":[[56,7]]},"421":{"position":[[44,7],[196,7]]},"436":{"position":[[1153,7]]},"443":{"position":[[555,7]]},"451":{"position":[[44,7],[205,7]]},"457":{"position":[[44,7],[209,7]]},"463":{"position":[[44,7],[315,7]]},"470":{"position":[[78,7]]},"494":{"position":[[22,7]]},"506":{"position":[[472,7]]},"512":{"position":[[232,7]]},"521":{"position":[[385,7]]},"529":{"position":[[764,7]]},"537":{"position":[[221,7]]},"550":{"position":[[469,7]]},"556":{"position":[[1902,7]]},"563":{"position":[[57,7]]},"568":{"position":[[279,7]]},"580":{"position":[[221,7]]},"581":{"position":[[369,7]]},"605":{"position":[[427,7]]},"609":{"position":[[108,7]]},"622":{"position":[[44,7],[433,7]]},"628":{"position":[[44,7],[497,7]]},"640":{"position":[[19,7]]},"649":{"position":[[95,7]]},"667":{"position":[[44,7],[282,7]]},"682":{"position":[[44,7],[253,7]]},"697":{"position":[[44,7],[622,7]]},"703":{"position":[[187,7]]},"709":{"position":[[44,7],[875,7]]},"715":{"position":[[244,7]]},"738":{"position":[[799,7]]},"744":{"position":[[44,7],[189,7]]},"747":{"position":[[1224,7]]},"780":{"position":[[351,7]]},"854":{"position":[[138,7]]},"882":{"position":[[44,7],[149,7]]},"888":{"position":[[44,7],[204,7]]},"956":{"position":[[44,7],[225,7]]},"964":{"position":[[69,7]]},"979":{"position":[[44,7],[299,7]]},"989":{"position":[[709,7]]},"994":{"position":[[44,7],[157,7]]},"1004":{"position":[[792,7]]},"1007":{"position":[[80,7]]},"1012":{"position":[[44,7],[284,7]]},"1025":{"position":[[431,7]]},"1065":{"position":[[156,7]]},"1073":{"position":[[44,7],[408,7]]},"1080":{"position":[[865,7]]},"1099":{"position":[[44,7],[529,7]]},"1104":{"position":[[44,7],[227,7]]},"1110":{"position":[[44,7],[547,7]]},"1128":{"position":[[44,7],[464,7]]},"1133":{"position":[[1440,7]]},"1138":{"position":[[844,7]]},"1189":{"position":[[433,7]]},"1197":{"position":[[439,7]]},"1207":{"position":[[522,7]]},"1243":{"position":[[1122,7]]},"1248":{"position":[[466,7]]},"1357":{"position":[[371,7]]},"1387":{"position":[[472,7],[1098,7]]},"1421":{"position":[[459,7]]},"1438":{"position":[[306,7],[763,7]]},"1447":{"position":[[137,7]]},"1452":{"position":[[1373,7],[1462,7],[1499,7],[4345,7],[4478,7]]},"1465":{"position":[[154,7]]},"1471":{"position":[[1141,7]]}},"keywords":{}}],["throughout",{"_index":1739,"title":{},"content":{"133":{"position":[[189,10]]},"211":{"position":[[98,10]]},"1203":{"position":[[186,10]]}},"keywords":{}}],["throughput",{"_index":74,"title":{},"content":{"2":{"position":[[179,10]]},"8":{"position":[[592,10],[655,10]]},"19":{"position":[[454,10]]},"49":{"position":[[162,10]]},"197":{"position":[[573,10]]},"198":{"position":[[986,10],[1089,11]]},"210":{"position":[[340,10]]},"330":{"position":[[66,11]]},"1474":{"position":[[285,10]]}},"keywords":{}}],["throw",{"_index":3017,"title":{},"content":{"296":{"position":[[5542,5],[5655,5]]},"315":{"position":[[1662,5]]},"1464":{"position":[[302,5]]},"1466":{"position":[[283,5]]},"1467":{"position":[[626,5]]}},"keywords":{}}],["thu",{"_index":1298,"title":{},"content":{"88":{"position":[[240,4]]},"132":{"position":[[73,4]]},"320":{"position":[[440,5]]},"326":{"position":[[1009,4]]},"764":{"position":[[587,4]]},"777":{"position":[[587,4]]},"804":{"position":[[585,4]]},"819":{"position":[[585,4]]},"835":{"position":[[585,4]]},"872":{"position":[[85,4]]},"922":{"position":[[770,4],[1308,4],[3076,4]]},"1431":{"position":[[17,4]]},"1440":{"position":[[869,4]]},"1442":{"position":[[1536,4]]},"1443":{"position":[[634,4]]}},"keywords":{}}],["thumbnail",{"_index":3961,"title":{},"content":{"517":{"position":[[2881,9]]}},"keywords":{}}],["thumbnail_data_url",{"_index":3964,"title":{},"content":{"517":{"position":[[2967,18]]}},"keywords":{}}],["thumbnail_url",{"_index":3963,"title":{},"content":{"517":{"position":[[2929,13]]}},"keywords":{}}],["thursday",{"_index":6538,"title":{},"content":{"1452":{"position":[[1490,8],[4413,9],[4469,8]]}},"keywords":{}}],["ti",{"_index":6239,"title":{},"content":{"1292":{"position":[[6691,4]]},"1306":{"position":[[6691,4]]},"1329":{"position":[[6691,4]]},"1370":{"position":[[1121,4]]},"1437":{"position":[[1120,3]]}},"keywords":{}}],["ti+1",{"_index":6481,"title":{},"content":{"1437":{"position":[[1165,5]]}},"keywords":{}}],["ti+1.n",{"_index":6480,"title":{},"content":{"1437":{"position":[[1090,6]]}},"keywords":{}}],["ti.zombi",{"_index":6479,"title":{},"content":{"1437":{"position":[[1036,9]]}},"keywords":{}}],["tick",{"_index":5411,"title":{},"content":{"1118":{"position":[[534,4]]}},"keywords":{}}],["ticket",{"_index":5510,"title":{},"content":{"1134":{"position":[[2860,7]]}},"keywords":{}}],["ticket_audit",{"_index":5496,"title":{},"content":{"1134":{"position":[[2060,13]]}},"keywords":{}}],["ticket_com",{"_index":5498,"title":{},"content":{"1134":{"position":[[2173,15]]}},"keywords":{}}],["ticket_field",{"_index":5500,"title":{},"content":{"1134":{"position":[[2290,13]]}},"keywords":{}}],["ticket_form",{"_index":5502,"title":{},"content":{"1134":{"position":[[2403,12]]}},"keywords":{}}],["ticket_metr",{"_index":5504,"title":{},"content":{"1134":{"position":[[2514,14]]}},"keywords":{}}],["ticket_metric_ev",{"_index":5506,"title":{},"content":{"1134":{"position":[[2629,20]]}},"keywords":{}}],["ticket_skip",{"_index":5508,"title":{},"content":{"1134":{"position":[[2749,12]]}},"keywords":{}}],["tie",{"_index":997,"title":{},"content":{"67":{"position":[[252,3]]}},"keywords":{}}],["tier",{"_index":1972,"title":{},"content":{"168":{"position":[[76,4]]},"203":{"position":[[369,4]]},"577":{"position":[[300,5]]},"588":{"position":[[295,5]]},"987":{"position":[[171,5]]},"1002":{"position":[[171,5]]},"1456":{"position":[[178,4]]},"1461":{"position":[[2660,5]]}},"keywords":{}}],["tighten",{"_index":1896,"title":{},"content":{"161":{"position":[[541,7]]},"218":{"position":[[1424,7]]},"259":{"position":[[977,7],[2558,7]]},"290":{"position":[[1428,7]]},"301":{"position":[[1524,7]]}},"keywords":{}}],["tiktok",{"_index":5333,"title":{"1079":{"position":[[0,6]]}},"content":{"1082":{"position":[[15,6],[148,6]]},"1083":{"position":[[32,6],[148,6]]},"1084":{"position":[[250,6]]},"1085":{"position":[[1413,6]]},"1086":{"position":[[171,6]]}},"keywords":{}}],["tile",{"_index":1811,"title":{},"content":{"140":{"position":[[152,4]]},"190":{"position":[[200,6],[226,4]]},"192":{"position":[[158,6],[185,4]]},"218":{"position":[[112,4]]},"290":{"position":[[360,4]]},"291":{"position":[[138,4]]},"301":{"position":[[306,4]]},"302":{"position":[[138,4]]},"1448":{"position":[[1043,4]]}},"keywords":{}}],["till",{"_index":5341,"title":{},"content":{"1085":{"position":[[953,4]]}},"keywords":{}}],["time",{"_index":43,"title":{"178":{"position":[[14,4]]},"194":{"position":[[5,4]]},"210":{"position":[[5,4]]},"241":{"position":[[6,6]]},"325":{"position":[[45,4]]},"373":{"position":[[5,4]]},"641":{"position":[[15,4]]},"754":{"position":[[20,4]]},"785":{"position":[[18,4]]},"794":{"position":[[18,4]]},"809":{"position":[[18,4]]},"825":{"position":[[18,4]]},"976":{"position":[[16,4]]},"984":{"position":[[18,4]]},"1008":{"position":[[13,4]]},"1286":{"position":[[18,4]]},"1291":{"position":[[7,6]]},"1301":{"position":[[18,4]]},"1305":{"position":[[7,6]]},"1325":{"position":[[18,4]]},"1328":{"position":[[7,6]]},"1453":{"position":[[0,6]]},"1478":{"position":[[0,4]]},"1479":{"position":[[17,4]]}},"content":{"1":{"position":[[549,4],[835,4]]},"3":{"position":[[766,4],[1005,4]]},"8":{"position":[[440,4]]},"11":{"position":[[23,5]]},"13":{"position":[[627,4]]},"14":{"position":[[364,4],[530,4],[785,4]]},"16":{"position":[[1309,4]]},"34":{"position":[[180,4]]},"41":{"position":[[98,4]]},"49":{"position":[[472,4]]},"50":{"position":[[300,5]]},"52":{"position":[[98,4]]},"53":{"position":[[231,4]]},"56":{"position":[[2165,4],[2340,4]]},"67":{"position":[[1505,4]]},"68":{"position":[[1049,4]]},"77":{"position":[[22,4]]},"82":{"position":[[159,4]]},"88":{"position":[[306,4],[565,5]]},"94":{"position":[[1562,4],[1665,4],[1912,4],[2014,4]]},"101":{"position":[[490,4]]},"105":{"position":[[930,5]]},"106":{"position":[[563,5]]},"109":{"position":[[125,6],[238,4]]},"110":{"position":[[113,4],[452,5]]},"111":{"position":[[211,5]]},"114":{"position":[[288,4]]},"115":{"position":[[771,4]]},"119":{"position":[[27,4]]},"120":{"position":[[1114,4],[1217,4],[1464,4],[1566,4],[2364,5]]},"121":{"position":[[163,5]]},"126":{"position":[[151,5]]},"133":{"position":[[93,6]]},"138":{"position":[[2089,4],[2114,4],[2238,4],[2643,5],[2692,4]]},"141":{"position":[[2045,4],[2070,4],[2194,4],[2233,5],[2282,4]]},"142":{"position":[[2149,4],[2174,4],[2298,4],[2720,5],[2769,4]]},"146":{"position":[[253,4]]},"149":{"position":[[262,4]]},"152":{"position":[[269,4]]},"158":{"position":[[59,5],[173,4],[686,4]]},"163":{"position":[[870,4]]},"164":{"position":[[1186,4]]},"175":{"position":[[247,5]]},"180":{"position":[[168,5],[337,4]]},"183":{"position":[[4599,4],[4661,5]]},"189":{"position":[[182,5],[724,4]]},"193":{"position":[[230,5]]},"196":{"position":[[124,4],[356,4]]},"197":{"position":[[237,4]]},"198":{"position":[[514,4],[606,4],[692,5],[736,4],[1102,4],[1123,4]]},"205":{"position":[[350,4]]},"207":{"position":[[170,4]]},"209":{"position":[[665,5]]},"210":{"position":[[2226,4],[2461,4],[2901,4]]},"211":{"position":[[239,5]]},"232":{"position":[[801,4]]},"233":{"position":[[124,4],[363,4]]},"236":{"position":[[3786,4]]},"239":{"position":[[773,4]]},"240":{"position":[[3246,4],[4332,4],[4954,4]]},"252":{"position":[[171,4]]},"255":{"position":[[1035,4]]},"271":{"position":[[280,4]]},"275":{"position":[[1013,4]]},"278":{"position":[[155,4],[1349,5]]},"279":{"position":[[551,4],[764,4]]},"284":{"position":[[710,4],[741,5]]},"289":{"position":[[108,5]]},"292":{"position":[[250,4]]},"294":{"position":[[169,5]]},"300":{"position":[[108,5]]},"303":{"position":[[241,4]]},"305":{"position":[[46,4]]},"312":{"position":[[175,4]]},"316":{"position":[[1360,4]]},"320":{"position":[[198,4]]},"321":{"position":[[928,4]]},"322":{"position":[[774,4],[923,5],[1625,5],[1930,5]]},"323":{"position":[[883,5],[1930,5]]},"324":{"position":[[747,7]]},"325":{"position":[[13,4],[164,5],[182,4],[402,4],[588,4],[649,4],[742,4]]},"326":{"position":[[1041,6]]},"329":{"position":[[891,4]]},"331":{"position":[[263,4]]},"333":{"position":[[263,5]]},"343":{"position":[[392,4],[518,4],[600,4],[882,4],[990,4]]},"351":{"position":[[209,4]]},"363":{"position":[[148,5],[1498,5],[1997,4]]},"364":{"position":[[203,4]]},"373":{"position":[[176,4],[450,4],[624,5],[688,4],[857,4],[1072,4]]},"375":{"position":[[95,5]]},"377":{"position":[[384,4],[413,4],[692,4],[924,4]]},"379":{"position":[[317,4],[447,4],[587,4]]},"410":{"position":[[134,5],[159,4]]},"417":{"position":[[449,4]]},"419":{"position":[[1073,5]]},"424":{"position":[[221,4]]},"427":{"position":[[266,5]]},"438":{"position":[[449,4]]},"440":{"position":[[1089,5]]},"454":{"position":[[411,4]]},"460":{"position":[[225,4]]},"502":{"position":[[909,4]]},"509":{"position":[[384,5]]},"517":{"position":[[2129,4],[2144,4]]},"529":{"position":[[241,4]]},"545":{"position":[[449,4]]},"547":{"position":[[1074,5]]},"556":{"position":[[330,4]]},"560":{"position":[[81,4],[176,4]]},"577":{"position":[[211,4]]},"578":{"position":[[124,4]]},"584":{"position":[[969,4],[1007,4]]},"588":{"position":[[206,4]]},"595":{"position":[[1414,4]]},"631":{"position":[[225,4],[364,4]]},"646":{"position":[[263,4]]},"654":{"position":[[465,4]]},"660":{"position":[[174,6]]},"670":{"position":[[521,4]]},"685":{"position":[[345,4]]},"700":{"position":[[173,4]]},"706":{"position":[[173,4]]},"741":{"position":[[288,4]]},"747":{"position":[[232,4],[444,4],[476,5]]},"752":{"position":[[1020,4]]},"754":{"position":[[105,4],[336,4],[431,4],[672,4],[732,5],[848,4],[903,4],[942,4],[1171,4]]},"757":{"position":[[625,4]]},"764":{"position":[[310,5]]},"770":{"position":[[625,4]]},"777":{"position":[[310,5]]},"789":{"position":[[1079,4]]},"791":{"position":[[1054,4]]},"794":{"position":[[209,4],[304,4],[878,4],[938,5],[1054,4],[1109,4],[1148,4],[1375,4]]},"797":{"position":[[625,4]]},"804":{"position":[[308,5]]},"809":{"position":[[209,4],[304,4],[878,4],[938,5],[1054,4],[1109,4],[1148,4],[1375,4]]},"812":{"position":[[625,4]]},"819":{"position":[[308,5]]},"825":{"position":[[209,4],[304,4],[714,4],[774,5],[890,4],[945,4],[984,4],[1211,4]]},"828":{"position":[[625,4]]},"835":{"position":[[308,5]]},"842":{"position":[[2122,4],[2801,4]]},"847":{"position":[[205,4]]},"859":{"position":[[516,4]]},"869":{"position":[[1164,4],[1266,5]]},"870":{"position":[[140,4],[425,5],[942,4]]},"885":{"position":[[474,4]]},"891":{"position":[[177,4],[311,4]]},"922":{"position":[[3271,5]]},"945":{"position":[[951,4]]},"976":{"position":[[10,4],[116,5],[256,4]]},"977":{"position":[[211,4],[335,4],[593,4],[679,4]]},"989":{"position":[[934,4]]},"990":{"position":[[255,4]]},"1004":{"position":[[1017,4]]},"1008":{"position":[[51,4],[135,4],[273,4],[491,4],[551,5]]},"1015":{"position":[[287,4]]},"1020":{"position":[[102,5],[333,5],[401,4],[514,4],[620,4]]},"1021":{"position":[[1495,4]]},"1023":{"position":[[1054,5]]},"1028":{"position":[[96,4],[234,4]]},"1036":{"position":[[198,4],[1037,5]]},"1070":{"position":[[672,4]]},"1076":{"position":[[634,4]]},"1077":{"position":[[331,5],[635,4]]},"1113":{"position":[[225,4]]},"1118":{"position":[[1217,5]]},"1134":{"position":[[2687,4]]},"1140":{"position":[[1428,4]]},"1164":{"position":[[366,5],[595,5],[681,4]]},"1172":{"position":[[525,5],[619,5],[625,4]]},"1209":{"position":[[562,4]]},"1222":{"position":[[525,5],[619,5],[625,4]]},"1285":{"position":[[637,4]]},"1286":{"position":[[151,4],[167,5],[238,4],[361,4],[935,4],[995,5],[1111,4],[1166,4],[1205,4],[1390,4],[1398,4],[1461,4]]},"1291":{"position":[[10,4],[81,4]]},"1292":{"position":[[6729,4]]},"1300":{"position":[[637,4]]},"1301":{"position":[[151,4],[167,5],[238,4],[361,4],[771,4],[831,5],[947,4],[1002,4],[1041,4],[1226,4],[1234,4],[1297,4]]},"1305":{"position":[[10,4],[81,4]]},"1306":{"position":[[6729,4]]},"1316":{"position":[[1428,4]]},"1317":{"position":[[795,4],[881,4]]},"1324":{"position":[[637,4]]},"1325":{"position":[[151,4],[167,5],[238,4],[361,4],[935,4],[995,5],[1111,4],[1166,4],[1205,4],[1390,4],[1398,4],[1461,4]]},"1328":{"position":[[10,4],[81,4]]},"1329":{"position":[[6729,4]]},"1340":{"position":[[1428,4]]},"1341":{"position":[[795,4],[881,4]]},"1351":{"position":[[1428,4]]},"1352":{"position":[[795,4],[881,4]]},"1356":{"position":[[769,4],[1295,4]]},"1359":{"position":[[408,4]]},"1379":{"position":[[4580,4]]},"1388":{"position":[[307,5]]},"1391":{"position":[[717,5]]},"1403":{"position":[[4580,4]]},"1414":{"position":[[4580,4]]},"1429":{"position":[[64,4],[543,4],[718,7],[865,9]]},"1431":{"position":[[1451,4]]},"1432":{"position":[[809,4],[909,4]]},"1434":{"position":[[453,4]]},"1439":{"position":[[895,6]]},"1451":{"position":[[724,5]]},"1452":{"position":[[122,5],[449,4],[623,4],[674,4],[749,4],[754,4],[848,4],[968,4],[973,4],[1063,4],[2702,5],[2800,5],[2847,4],[2861,4],[2936,4],[3019,4],[3043,4],[3078,6],[3137,4],[3199,4],[3245,4],[3308,4],[3516,4],[3616,5],[3642,5],[3922,5],[3947,4],[4004,5]]},"1453":{"position":[[21,6],[153,6],[197,5],[316,6],[380,5],[500,5],[845,4],[1111,4]]},"1455":{"position":[[182,4]]},"1459":{"position":[[735,5],[975,4]]},"1464":{"position":[[326,5]]},"1466":{"position":[[307,5]]},"1467":{"position":[[650,5]]},"1471":{"position":[[701,5],[780,4],[954,4],[1057,4]]},"1475":{"position":[[120,4],[460,4]]},"1476":{"position":[[1151,5]]},"1479":{"position":[[338,4],[367,4],[545,4]]},"1480":{"position":[[820,4],[923,4],[1170,4],[1272,4]]},"1481":{"position":[[84,4],[94,4],[148,4],[158,4]]}},"keywords":{}}],["time"",{"_index":5028,"title":{},"content":{"912":{"position":[[1463,10]]}},"keywords":{}}],["time_incr",{"_index":3953,"title":{},"content":{"517":{"position":[[2113,15]]}},"keywords":{}}],["time_zon",{"_index":4591,"title":{},"content":{"750":{"position":[[1093,9]]},"752":{"position":[[1076,9]]},"754":{"position":[[11,9],[275,9],[624,9],[813,9],[1053,9]]},"757":{"position":[[460,11],[510,11],[684,11]]},"766":{"position":[[1093,9]]},"770":{"position":[[460,11],[510,11],[684,11]]},"789":{"position":[[1494,9]]},"791":{"position":[[1110,9]]},"794":{"position":[[9,9],[148,9],[722,9],[830,9],[1019,9],[1257,9]]},"797":{"position":[[460,11],[510,11],[684,11]]},"807":{"position":[[1081,9]]},"809":{"position":[[9,9],[148,9],[722,9],[830,9],[1019,9],[1257,9]]},"812":{"position":[[460,11],[510,11],[684,11]]},"823":{"position":[[1081,9]]},"825":{"position":[[9,9],[148,9],[666,9],[855,9],[1093,9]]},"828":{"position":[[460,11],[510,11],[684,11]]},"1267":{"position":[[500,11],[550,11]]},"1285":{"position":[[522,11],[572,11],[696,11]]},"1286":{"position":[[9,9],[177,9],[779,9],[887,9],[1076,9],[1318,9]]},"1300":{"position":[[522,11],[572,11],[696,11]]},"1301":{"position":[[9,9],[177,9],[723,9],[912,9],[1154,9]]},"1324":{"position":[[522,11],[572,11],[696,11]]},"1325":{"position":[[9,9],[177,9],[779,9],[887,9],[1076,9],[1318,9]]}},"keywords":{}}],["timefram",{"_index":6582,"title":{},"content":{"1455":{"position":[[559,10]]}},"keywords":{}}],["timeli",{"_index":2175,"title":{},"content":{"196":{"position":[[523,10]]},"233":{"position":[[530,10]]}},"keywords":{}}],["timelineschatsshortcutstriggersbansdepartmentsgoalsskillsrolesrout",{"_index":5385,"title":{},"content":{"1104":{"position":[[90,69]]}},"keywords":{}}],["timeout",{"_index":2521,"title":{},"content":{"236":{"position":[[1003,8]]},"387":{"position":[[1096,7],[1106,7]]},"410":{"position":[[243,8]]},"842":{"position":[[2705,7],[2713,7]]}},"keywords":{}}],["timer",{"_index":1583,"title":{},"content":{"110":{"position":[[1424,7]]}},"keywords":{}}],["times.with",{"_index":5195,"title":{},"content":{"1020":{"position":[[1356,10]]}},"keywords":{}}],["timescal",{"_index":6416,"title":{},"content":{"1425":{"position":[[146,9]]}},"keywords":{}}],["timescaledb",{"_index":5431,"title":{"1424":{"position":[[0,11]]},"1429":{"position":[[9,11]]}},"content":{"1120":{"position":[[1960,11]]},"1425":{"position":[[40,11]]},"1426":{"position":[[113,11]]},"1429":{"position":[[38,11]]},"1431":{"position":[[22,12]]},"1432":{"position":[[621,13],[866,13]]}},"keywords":{}}],["timescaledb:dev",{"_index":5432,"title":{},"content":{"1120":{"position":[[2023,15]]},"1428":{"position":[[98,15]]}},"keywords":{}}],["timestamp",{"_index":455,"title":{"1393":{"position":[[0,9]]}},"content":{"16":{"position":[[210,11]]},"67":{"position":[[715,9],[1064,9],[1238,9],[1846,9],[2052,9]]},"107":{"position":[[3131,9]]},"110":{"position":[[1118,9],[1218,9]]},"156":{"position":[[402,11]]},"183":{"position":[[3207,9]]},"236":{"position":[[2506,9],[3291,9]]},"263":{"position":[[365,9]]},"279":{"position":[[636,9]]},"406":{"position":[[220,10]]},"417":{"position":[[396,10]]},"438":{"position":[[396,10]]},"480":{"position":[[530,11],[676,11]]},"502":{"position":[[856,10]]},"545":{"position":[[396,10]]},"595":{"position":[[718,9]]},"821":{"position":[[1245,11],[1383,11]]},"1009":{"position":[[1648,9]]},"1021":{"position":[[1433,10]]},"1077":{"position":[[739,10]]},"1140":{"position":[[1487,9]]},"1172":{"position":[[531,9]]},"1209":{"position":[[579,9]]},"1222":{"position":[[531,9]]},"1292":{"position":[[6776,9]]},"1306":{"position":[[6776,9]]},"1316":{"position":[[1487,9]]},"1329":{"position":[[6776,9]]},"1340":{"position":[[1487,9]]},"1351":{"position":[[1487,9]]},"1379":{"position":[[4635,9]]},"1393":{"position":[[19,9]]},"1403":{"position":[[4635,9]]},"1414":{"position":[[4635,9]]},"1429":{"position":[[686,9]]},"1431":{"position":[[1510,9]]},"1459":{"position":[[361,10]]},"1475":{"position":[[338,9]]}},"keywords":{}}],["timestamp_column",{"_index":6423,"title":{},"content":{"1429":{"position":[[380,20],[477,18]]}},"keywords":{}}],["timestamp_ltz",{"_index":6400,"title":{},"content":{"1393":{"position":[[50,13],[101,13]]}},"keywords":{}}],["timestamp_ntz",{"_index":6404,"title":{},"content":{"1393":{"position":[[286,14]]}},"keywords":{}}],["timestamp_type_map",{"_index":6402,"title":{},"content":{"1393":{"position":[[144,22],[332,22]]}},"keywords":{}}],["timestamp_tz",{"_index":6403,"title":{},"content":{"1393":{"position":[[191,13],[234,12]]}},"keywords":{}}],["timestampadd",{"_index":6246,"title":{},"content":{"1292":{"position":[[6809,12]]},"1306":{"position":[[6809,12]]},"1329":{"position":[[6809,12]]}},"keywords":{}}],["timestampdiff",{"_index":6219,"title":{},"content":{"1292":{"position":[[6119,13]]},"1306":{"position":[[6119,13]]},"1329":{"position":[[6119,13]]}},"keywords":{}}],["timestamptz",{"_index":433,"title":{},"content":{"14":{"position":[[709,13]]},"1164":{"position":[[372,11]]}},"keywords":{}}],["timezon",{"_index":4559,"title":{},"content":{"745":{"position":[[114,9]]},"747":{"position":[[435,8],[506,8]]},"750":{"position":[[1205,8]]},"754":{"position":[[524,8],[541,8],[1001,8],[1191,8],[1240,8],[1313,8]]},"757":{"position":[[340,9],[350,8],[359,8]]},"766":{"position":[[1205,8]]},"770":{"position":[[340,9],[350,8],[359,8]]},"789":{"position":[[1606,8]]},"794":{"position":[[566,8],[583,8],[1205,8],[1395,8],[1444,8],[1517,8]]},"797":{"position":[[340,9],[350,8],[359,8]]},"807":{"position":[[1193,8]]},"809":{"position":[[566,8],[583,8],[1205,8],[1395,8],[1444,8],[1517,8]]},"812":{"position":[[340,9],[350,8],[359,8]]},"823":{"position":[[1193,8]]},"825":{"position":[[566,8],[583,8],[1041,8],[1231,8],[1280,8],[1353,8]]},"828":{"position":[[340,9],[350,8],[359,8]]},"1267":{"position":[[376,9],[386,8],[395,8]]},"1285":{"position":[[398,9],[408,8],[417,8]]},"1286":{"position":[[289,8],[623,8],[640,8],[1266,8],[1481,8],[1530,8],[1603,8]]},"1300":{"position":[[398,9],[408,8],[417,8]]},"1301":{"position":[[289,8],[623,8],[640,8],[1102,8],[1317,8],[1366,8],[1439,8]]},"1324":{"position":[[398,9],[408,8],[417,8]]},"1325":{"position":[[289,8],[623,8],[640,8],[1266,8],[1481,8],[1530,8],[1603,8]]},"1452":{"position":[[576,9],[586,8],[595,8],[3118,8],[3161,9],[3364,8],[3896,9]]}},"keywords":{}}],["timezone_hour",{"_index":5586,"title":{},"content":{"1140":{"position":[[1530,13]]},"1316":{"position":[[1530,13]]},"1340":{"position":[[1530,13]]},"1351":{"position":[[1530,13]]},"1379":{"position":[[4688,13]]},"1403":{"position":[[4688,13]]},"1414":{"position":[[4688,13]]},"1431":{"position":[[1553,13]]}},"keywords":{}}],["timezone_minu",{"_index":6352,"title":{},"content":{"1379":{"position":[[4741,13]]},"1403":{"position":[[4741,13]]},"1414":{"position":[[4741,13]]}},"keywords":{}}],["timezone_minut",{"_index":5588,"title":{},"content":{"1140":{"position":[[1578,15]]},"1316":{"position":[[1578,15]]},"1340":{"position":[[1578,15]]},"1351":{"position":[[1578,15]]},"1431":{"position":[[1601,15]]}},"keywords":{}}],["tinybird",{"_index":5407,"title":{"1117":{"position":[[0,8]]}},"content":{"1116":{"position":[[1,8]]},"1118":{"position":[[38,8],[99,8],[150,8],[228,8],[864,9],[1112,9],[1188,8]]}},"keywords":{}}],["tinyblob",{"_index":6221,"title":{},"content":{"1292":{"position":[[6170,8]]},"1306":{"position":[[6170,8]]},"1329":{"position":[[6170,8]]}},"keywords":{}}],["tinyint",{"_index":6223,"title":{},"content":{"1292":{"position":[[6209,7]]},"1306":{"position":[[6209,7]]},"1329":{"position":[[6209,7]]}},"keywords":{}}],["tinytext",{"_index":6226,"title":{},"content":{"1292":{"position":[[6253,8]]},"1306":{"position":[[6253,8]]},"1329":{"position":[[6253,8]]}},"keywords":{}}],["tip",{"_index":1212,"title":{"131":{"position":[[0,5]]}},"content":{"83":{"position":[[188,3]]},"97":{"position":[[749,3]]},"131":{"position":[[15,4]]},"150":{"position":[[174,3]]},"161":{"position":[[1012,3]]},"182":{"position":[[297,3]]},"217":{"position":[[1540,3]]},"268":{"position":[[1471,3]]},"269":{"position":[[1042,3]]},"290":{"position":[[1512,3]]},"635":{"position":[[233,3]]},"750":{"position":[[1248,3]]},"753":{"position":[[782,3]]},"780":{"position":[[188,3]]},"789":{"position":[[1649,3]]},"793":{"position":[[753,3]]},"915":{"position":[[1105,3]]},"963":{"position":[[1259,3]]},"1176":{"position":[[476,3]]},"1185":{"position":[[276,3]]},"1194":{"position":[[486,3]]},"1203":{"position":[[647,3]]},"1226":{"position":[[287,3]]},"1289":{"position":[[1177,3]]},"1298":{"position":[[1009,3]]},"1303":{"position":[[888,3]]},"1310":{"position":[[497,3]]},"1322":{"position":[[1396,3]]},"1335":{"position":[[1043,3]]},"1346":{"position":[[1009,3]]},"1354":{"position":[[311,3]]},"1382":{"position":[[530,3]]},"1452":{"position":[[2547,3]]}},"keywords":{}}],["titl",{"_index":1875,"title":{},"content":{"159":{"position":[[165,5],[260,6]]},"162":{"position":[[2027,6],[2216,6]]},"314":{"position":[[1260,6]]},"315":{"position":[[1135,7]]},"343":{"position":[[10,5]]},"351":{"position":[[21,5],[318,5]]},"359":{"position":[[90,5],[295,5]]},"370":{"position":[[238,5],[2003,5]]},"377":{"position":[[21,5],[1683,5]]},"387":{"position":[[201,5],[1332,5]]},"392":{"position":[[21,5],[682,5]]},"397":{"position":[[21,5],[824,5]]},"402":{"position":[[21,5],[648,5]]},"408":{"position":[[21,5],[525,5]]},"417":{"position":[[21,5],[2218,5]]},"424":{"position":[[21,5],[349,5]]},"432":{"position":[[21,5],[1192,5]]},"438":{"position":[[21,5],[1903,5],[1909,5]]},"448":{"position":[[201,5],[1219,5]]},"454":{"position":[[21,5],[538,5]]},"460":{"position":[[21,5],[555,5]]},"466":{"position":[[21,5],[266,5]]},"482":{"position":[[21,5],[498,5]]},"491":{"position":[[10,5]]},"492":{"position":[[10,5]]},"496":{"position":[[21,5],[531,5]]},"502":{"position":[[21,5],[1551,5]]},"509":{"position":[[21,5],[531,5]]},"517":{"position":[[492,5],[3954,5]]},"534":{"position":[[201,5],[1699,5]]},"540":{"position":[[21,5],[316,5]]},"545":{"position":[[21,5],[1613,5]]},"556":{"position":[[201,5],[2196,5]]},"564":{"position":[[21,5]]},"565":{"position":[[10,5]]},"573":{"position":[[205,5],[1275,5]]},"584":{"position":[[193,5],[1347,5]]},"593":{"position":[[21,5],[339,5]]},"601":{"position":[[21,5],[410,5]]},"611":{"position":[[201,5],[1186,5]]},"619":{"position":[[102,5],[588,5]]},"625":{"position":[[21,5],[160,5]]},"631":{"position":[[21,5],[491,5]]},"637":{"position":[[21,5],[1149,5]]},"646":{"position":[[374,5],[729,5]]},"654":{"position":[[95,5],[811,5]]},"664":{"position":[[10,5]]},"665":{"position":[[10,5]]},"670":{"position":[[21,5],[649,5]]},"679":{"position":[[10,5]]},"680":{"position":[[10,5]]},"685":{"position":[[179,5],[473,5]]},"694":{"position":[[10,5]]},"695":{"position":[[10,5]]},"700":{"position":[[21,5],[301,5]]},"706":{"position":[[21,5],[301,5]]},"712":{"position":[[21,5],[496,5]]},"720":{"position":[[201,5],[805,5]]},"728":{"position":[[10,5]]},"735":{"position":[[90,5],[388,5]]},"741":{"position":[[21,5],[478,5]]},"747":{"position":[[21,5],[1360,5]]},"757":{"position":[[21,5],[1910,5]]},"770":{"position":[[21,5],[1910,5]]},"782":{"position":[[21,5],[506,5]]},"797":{"position":[[21,5],[1910,5]]},"812":{"position":[[21,5],[1910,5]]},"828":{"position":[[21,5],[1910,5]]},"842":{"position":[[21,5],[587,5],[1037,5],[1285,5],[1883,5]]},"851":{"position":[[21,5],[581,5]]},"859":{"position":[[201,5],[728,5]]},"867":{"position":[[21,5],[2107,5]]},"879":{"position":[[21,5],[446,5],[1530,5]]},"885":{"position":[[21,5],[602,5]]},"891":{"position":[[21,5],[337,5]]},"897":{"position":[[21,5],[255,5]]},"907":{"position":[[21,5],[1410,5]]},"923":{"position":[[21,5],[1410,5]]},"934":{"position":[[21,5],[1410,5]]},"950":{"position":[[21,5],[1410,5]]},"959":{"position":[[21,5],[357,5]]},"968":{"position":[[21,5],[1410,5]]},"982":{"position":[[21,5],[359,5]]},"991":{"position":[[211,5],[782,5]]},"997":{"position":[[21,5],[327,5]]},"1008":{"position":[[646,6]]},"1009":{"position":[[211,5],[1521,5]]},"1015":{"position":[[21,5],[415,5]]},"1021":{"position":[[294,5],[2029,5]]},"1028":{"position":[[21,5],[362,5]]},"1034":{"position":[[10,5]]},"1035":{"position":[[10,5]]},"1045":{"position":[[21,5],[1029,5]]},"1053":{"position":[[21,5],[1029,5]]},"1061":{"position":[[21,5],[1029,5]]},"1070":{"position":[[201,5],[985,5]]},"1076":{"position":[[21,5],[768,5]]},"1085":{"position":[[257,5],[1359,5]]},"1094":{"position":[[21,5],[424,5]]},"1101":{"position":[[21,5],[258,5]]},"1107":{"position":[[21,5],[396,5]]},"1113":{"position":[[21,5],[458,5]]},"1125":{"position":[[21,5],[504,5]]},"1133":{"position":[[21,5],[1192,5]]},"1138":{"position":[[238,5],[1293,5]]},"1144":{"position":[[21,5],[1256,5]]},"1151":{"position":[[21,5],[1327,5]]},"1162":{"position":[[21,5],[760,5]]},"1170":{"position":[[21,5],[1181,5]]},"1179":{"position":[[21,5],[991,5]]},"1188":{"position":[[21,5],[710,5]]},"1196":{"position":[[21,5],[868,5]]},"1206":{"position":[[21,5],[832,5]]},"1213":{"position":[[21,5],[933,5]]},"1220":{"position":[[21,5],[858,5]]},"1230":{"position":[[21,5],[811,5]]},"1239":{"position":[[10,5]]},"1240":{"position":[[10,5]]},"1247":{"position":[[192,5],[1029,5]]},"1253":{"position":[[21,5],[421,5]]},"1260":{"position":[[21,5],[875,5]]},"1267":{"position":[[10,5]]},"1269":{"position":[[10,5]]},"1277":{"position":[[21,5],[1003,5]]},"1285":{"position":[[21,5]]},"1286":{"position":[[2504,5]]},"1300":{"position":[[21,5]]},"1301":{"position":[[2340,5]]},"1313":{"position":[[21,5],[837,5]]},"1324":{"position":[[21,5]]},"1325":{"position":[[2504,5]]},"1337":{"position":[[21,5],[837,5]]},"1348":{"position":[[21,5],[837,5]]},"1356":{"position":[[21,5],[888,5]]},"1362":{"position":[[183,5],[474,5]]},"1367":{"position":[[21,5]]},"1376":{"position":[[21,5],[419,5]]},"1386":{"position":[[21,5],[1113,5]]},"1400":{"position":[[21,5],[419,5]]},"1411":{"position":[[21,5],[419,5]]},"1420":{"position":[[21,5],[660,5]]},"1427":{"position":[[21,5],[564,5]]},"1452":{"position":[[253,5]]},"1457":{"position":[[10,5]]},"1481":{"position":[[10,5]]}},"keywords":{}}],["title=\\"file:jeton",{"_index":2746,"title":{},"content":{"253":{"position":[[2406,24]]},"313":{"position":[[2406,24]]}},"keywords":{}}],["tl",{"_index":3655,"title":{},"content":{"428":{"position":[[235,3]]},"429":{"position":[[1026,3],[1143,3],[1244,3],[1309,3]]},"432":{"position":[[294,4],[299,3],[303,3]]},"433":{"position":[[183,4],[594,4]]},"1292":{"position":[[6293,3]]},"1306":{"position":[[6293,3]]},"1329":{"position":[[6293,3]]}},"keywords":{}}],["tnsname",{"_index":4910,"title":{},"content":{"879":{"position":[[773,8]]}},"keywords":{}}],["tnsnames.ora",{"_index":4911,"title":{},"content":{"879":{"position":[[786,12]]}},"keywords":{}}],["tnt",{"_index":1642,"title":{},"content":{"117":{"position":[[394,3],[454,3]]}},"keywords":{}}],["tnt_product",{"_index":1129,"title":{},"content":{"81":{"position":[[2021,12]]}},"keywords":{}}],["to<br/>",{"_index":6466,"title":{},"content":{"1434":{"position":[[2150,13]]}},"keywords":{}}],["to...two",{"_index":2814,"title":{},"content":{"274":{"position":[[241,8]]}},"keywords":{}}],["toallowlist",{"_index":4681,"title":{},"content":{"780":{"position":[[540,11]]}},"keywords":{}}],["toast",{"_index":5008,"title":{"909":{"position":[[0,7]]},"925":{"position":[[0,7]]},"936":{"position":[[0,7]]},"952":{"position":[[0,7]]},"970":{"position":[[0,7]]}},"content":{"909":{"position":[[187,5],[264,7],[447,7],[470,7],[733,7],[900,7],[1258,7]]},"910":{"position":[[54,7]]},"925":{"position":[[187,5],[264,7],[447,7],[470,7],[733,7],[900,7],[1258,7]]},"926":{"position":[[54,7]]},"936":{"position":[[187,5],[264,7],[447,7],[470,7],[733,7],[900,7],[1258,7]]},"937":{"position":[[54,7]]},"952":{"position":[[187,5],[264,7],[447,7],[470,7],[733,7],[900,7],[1258,7]]},"953":{"position":[[54,7]]},"970":{"position":[[187,5],[264,7],[447,7],[470,7],[733,7],[900,7],[1258,7]]},"971":{"position":[[54,7]]}},"keywords":{}}],["tocondit",{"_index":1878,"title":{},"content":{"159":{"position":[[672,14]]}},"keywords":{}}],["today",{"_index":1256,"title":{},"content":{"84":{"position":[[115,6]]},"109":{"position":[[428,6]]},"138":{"position":[[2157,6]]},"141":{"position":[[2113,6]]},"142":{"position":[[2217,6]]},"164":{"position":[[1047,5]]},"189":{"position":[[1720,6]]},"193":{"position":[[500,6]]},"584":{"position":[[779,5]]},"897":{"position":[[210,7]]}},"keywords":{}}],["togeth",{"_index":293,"title":{},"content":{"11":{"position":[[185,9]]},"16":{"position":[[1197,8]]},"27":{"position":[[418,8]]},"74":{"position":[[600,8]]},"135":{"position":[[46,8]]},"156":{"position":[[451,9]]},"221":{"position":[[1418,9]]},"254":{"position":[[3847,8]]},"277":{"position":[[476,9]]},"319":{"position":[[588,8]]},"324":{"position":[[718,9]]},"329":{"position":[[231,8]]},"753":{"position":[[1618,9]]},"793":{"position":[[1641,9]]},"808":{"position":[[1591,9]]},"919":{"position":[[2548,9]]},"931":{"position":[[2070,9]]},"1043":{"position":[[1883,9]]},"1045":{"position":[[1240,8]]},"1053":{"position":[[1240,8]]},"1059":{"position":[[1917,9]]},"1061":{"position":[[1240,8]]},"1303":{"position":[[1713,9]]},"1397":{"position":[[1152,9]]},"1398":{"position":[[1155,9]]},"1409":{"position":[[1156,9]]},"1435":{"position":[[286,9]]},"1437":{"position":[[401,9]]},"1439":{"position":[[1260,9]]},"1459":{"position":[[918,8],[1113,9]]},"1467":{"position":[[324,9]]}},"keywords":{}}],["toggl",{"_index":822,"title":{},"content":{"55":{"position":[[847,7]]},"239":{"position":[[1709,8]]},"1464":{"position":[[944,6]]}},"keywords":{}}],["toinclud",{"_index":2481,"title":{},"content":{"228":{"position":[[463,11]]},"229":{"position":[[328,11]]}},"keywords":{}}],["token",{"_index":896,"title":{"249":{"position":[[31,7]]},"515":{"position":[[36,6]]},"524":{"position":[[71,6]]},"532":{"position":[[71,6]]},"725":{"position":[[7,5]]},"1083":{"position":[[15,5]]},"1131":{"position":[[4,5]]}},"content":{"58":{"position":[[893,5]]},"154":{"position":[[162,5],[2031,5]]},"169":{"position":[[1332,6],[1580,6],[1628,6],[1657,5]]},"247":{"position":[[262,5],[283,5],[399,5]]},"249":{"position":[[116,5]]},"263":{"position":[[169,6],[193,5],[201,5],[217,5]]},"267":{"position":[[2007,6],[2031,5],[2039,5],[2055,5]]},"270":{"position":[[269,6],[293,5],[301,5],[317,5]]},"274":{"position":[[567,6],[591,5],[599,5],[615,5]]},"284":{"position":[[78,6],[102,5],[110,5],[126,5]]},"340":{"position":[[440,6],[488,6],[517,5]]},"347":{"position":[[79,6],[96,5],[121,5],[190,5]]},"348":{"position":[[83,5]]},"349":{"position":[[344,5]]},"351":{"position":[[131,5],[141,5]]},"359":{"position":[[200,5],[226,5]]},"384":{"position":[[183,5],[330,6]]},"387":{"position":[[714,5],[739,6]]},"445":{"position":[[81,5]]},"446":{"position":[[123,5],[311,6],[363,7]]},"448":{"position":[[639,5],[653,5],[687,6],[737,5],[753,5]]},"472":{"position":[[290,5],[352,6]]},"489":{"position":[[80,5],[592,6],[631,5]]},"491":{"position":[[121,5]]},"513":{"position":[[138,6]]},"515":{"position":[[38,6],[180,5],[625,5]]},"517":{"position":[[552,5],[582,5]]},"522":{"position":[[139,6],[243,5]]},"524":{"position":[[89,7]]},"530":{"position":[[139,6],[243,5]]},"532":{"position":[[145,6],[173,6]]},"534":{"position":[[687,5],[709,6],[780,6]]},"538":{"position":[[81,6]]},"540":{"position":[[237,5],[247,5]]},"551":{"position":[[113,6]]},"554":{"position":[[166,6],[258,6],[284,5],[481,6],[518,6],[549,5]]},"556":{"position":[[830,5],[846,5],[940,5],[950,5],[983,6]]},"631":{"position":[[166,6]]},"643":{"position":[[113,6]]},"645":{"position":[[30,5],[172,6],[462,5]]},"646":{"position":[[335,5],[485,5],[540,5],[561,6]]},"650":{"position":[[112,6],[216,5]]},"652":{"position":[[30,5],[172,6],[462,5]]},"654":{"position":[[56,5],[206,5],[261,5],[282,6]]},"662":{"position":[[80,5],[592,6],[631,5]]},"664":{"position":[[120,5],[142,5]]},"670":{"position":[[277,5],[307,5]]},"677":{"position":[[80,5],[592,6],[631,5]]},"679":{"position":[[121,5]]},"683":{"position":[[291,5]]},"685":{"position":[[162,6],[239,5],[252,5]]},"692":{"position":[[80,5],[592,6],[631,5]]},"694":{"position":[[121,5]]},"710":{"position":[[5,6],[34,5]]},"712":{"position":[[75,5],[90,5],[385,6]]},"718":{"position":[[130,6],[261,6],[293,6]]},"720":{"position":[[589,5],[602,5]]},"724":{"position":[[87,5],[362,6],[491,6],[575,5],[622,5],[671,6]]},"725":{"position":[[38,5],[202,6]]},"726":{"position":[[411,6],[456,5],[620,6]]},"728":{"position":[[348,5],[358,5],[416,5],[466,5],[476,5],[534,5]]},"839":{"position":[[96,5],[235,5]]},"840":{"position":[[715,5],[1945,6],[1993,6],[2171,5],[2214,5],[2275,6],[2306,5],[2319,5]]},"842":{"position":[[871,5],[888,5],[943,5],[963,5]]},"843":{"position":[[170,5]]},"848":{"position":[[96,5],[272,5]]},"849":{"position":[[538,5],[1190,5],[2322,6],[3064,6],[3112,6],[3311,5],[3354,5],[3415,6],[3446,5],[3459,5]]},"851":{"position":[[188,5],[454,5],[471,5],[511,5],[531,5]]},"855":{"position":[[281,6]]},"857":{"position":[[258,5]]},"859":{"position":[[369,5],[443,5],[467,5]]},"860":{"position":[[202,5],[208,6]]},"885":{"position":[[371,5],[415,6]]},"894":{"position":[[124,5]]},"895":{"position":[[378,6],[608,6]]},"898":{"position":[[1185,5],[1212,6],[1628,5]]},"957":{"position":[[17,5]]},"959":{"position":[[81,5],[111,5]]},"988":{"position":[[291,6]]},"989":{"position":[[584,7],[787,6],[1306,6]]},"991":{"position":[[603,5],[621,5]]},"995":{"position":[[92,6]]},"997":{"position":[[77,5],[88,5]]},"1003":{"position":[[291,6]]},"1004":{"position":[[667,7],[870,6],[1389,6]]},"1009":{"position":[[666,5],[684,5]]},"1013":{"position":[[28,5]]},"1067":{"position":[[363,5],[631,5]]},"1070":{"position":[[342,5],[355,5]]},"1083":{"position":[[96,5],[262,5]]},"1085":{"position":[[642,5],[680,6]]},"1086":{"position":[[47,5]]},"1101":{"position":[[196,5],[215,5]]},"1105":{"position":[[91,6]]},"1111":{"position":[[13,5]]},"1113":{"position":[[136,5],[154,6]]},"1118":{"position":[[129,5],[474,5],[495,5],[700,5]]},"1129":{"position":[[131,6]]},"1131":{"position":[[173,6],[211,6],[237,6]]},"1133":{"position":[[203,5],[230,5],[271,5],[382,5],[664,5],[681,5]]},"1186":{"position":[[633,5],[758,6]]},"1188":{"position":[[589,5],[667,5]]},"1260":{"position":[[86,5],[100,5]]},"1261":{"position":[[133,6]]},"1361":{"position":[[140,5]]},"1362":{"position":[[243,5],[270,5]]}},"keywords":{}}],["token"",{"_index":3795,"title":{},"content":{"472":{"position":[[623,11]]},"489":{"position":[[220,11]]},"662":{"position":[[220,11]]},"677":{"position":[[220,11]]},"692":{"position":[[220,11]]},"725":{"position":[[177,11]]},"726":{"position":[[595,11]]},"898":{"position":[[1278,12],[1447,12],[1705,12]]}},"keywords":{}}],["token,"",{"_index":4956,"title":{},"content":{"895":{"position":[[566,12]]}},"keywords":{}}],["token.an",{"_index":5920,"title":{},"content":{"1258":{"position":[[71,8]]}},"keywords":{}}],["token/consum",{"_index":4753,"title":{},"content":{"842":{"position":[[546,14]]}},"keywords":{}}],["token_id",{"_index":4789,"title":{},"content":{"843":{"position":[[220,9]]}},"keywords":{}}],["token_key",{"_index":4827,"title":{},"content":{"851":{"position":[[443,10]]},"852":{"position":[[205,10]]}},"keywords":{}}],["token_secret",{"_index":4828,"title":{},"content":{"851":{"position":[[497,13]]},"852":{"position":[[228,13]]}},"keywords":{}}],["token_secret_sop",{"_index":4790,"title":{},"content":{"843":{"position":[[234,18]]}},"keywords":{}}],["token_uri",{"_index":4095,"title":{},"content":{"548":{"position":[[1453,10]]}},"keywords":{}}],["tokenin",{"_index":3796,"title":{},"content":{"472":{"position":[[667,7]]}},"keywords":{}}],["tokens"",{"_index":4040,"title":{},"content":{"532":{"position":[[353,13]]}},"keywords":{}}],["tokens.gener",{"_index":2643,"title":{},"content":{"249":{"position":[[86,15]]}},"keywords":{}}],["tokensrest",{"_index":4821,"title":{},"content":{"849":{"position":[[2287,10]]}},"keywords":{}}],["tokenyour",{"_index":3785,"title":{},"content":{"471":{"position":[[15,9]]},"725":{"position":[[67,9]]},"726":{"position":[[485,9]]}},"keywords":{}}],["told",{"_index":6489,"title":{},"content":{"1439":{"position":[[869,4]]}},"keywords":{}}],["toler",{"_index":776,"title":{},"content":{"48":{"position":[[211,10]]},"321":{"position":[[2301,9]]},"326":{"position":[[1939,9]]}},"keywords":{}}],["toll",{"_index":5393,"title":{},"content":{"1110":{"position":[[220,4]]}},"keywords":{}}],["took",{"_index":2230,"title":{},"content":{"206":{"position":[[262,4]]},"760":{"position":[[667,4]]},"773":{"position":[[667,4]]},"800":{"position":[[667,4]]},"815":{"position":[[667,4]]},"831":{"position":[[667,4]]}},"keywords":{}}],["tool",{"_index":147,"title":{},"content":{"3":{"position":[[1137,5]]},"4":{"position":[[172,5],[311,5],[453,5]]},"29":{"position":[[153,5]]},"80":{"position":[[180,6]]},"82":{"position":[[282,5],[506,4]]},"103":{"position":[[757,7]]},"107":{"position":[[139,5]]},"113":{"position":[[250,5]]},"156":{"position":[[671,4]]},"162":{"position":[[916,4]]},"198":{"position":[[21,4]]},"234":{"position":[[427,4]]},"236":{"position":[[556,8],[2122,5]]},"238":{"position":[[151,4]]},"245":{"position":[[307,5]]},"253":{"position":[[159,4]]},"259":{"position":[[829,5]]},"279":{"position":[[387,5]]},"280":{"position":[[856,5]]},"291":{"position":[[1499,4]]},"295":{"position":[[1588,4]]},"302":{"position":[[1419,4]]},"313":{"position":[[159,4]]},"322":{"position":[[490,4],[1660,5]]},"323":{"position":[[1,5],[101,5],[1681,5]]},"324":{"position":[[10,4],[401,8],[451,4],[548,4],[682,5],[826,5],[1147,4]]},"325":{"position":[[781,5]]},"329":{"position":[[150,5]]},"515":{"position":[[582,5]]},"570":{"position":[[98,5]]},"571":{"position":[[98,5]]},"635":{"position":[[386,4]]},"725":{"position":[[44,5]]},"726":{"position":[[462,5]]},"728":{"position":[[422,6],[540,6]]},"1446":{"position":[[95,4]]}},"keywords":{}}],["tooling.typescript",{"_index":2903,"title":{},"content":{"281":{"position":[[2622,18]]}},"keywords":{}}],["tools.appspot.com/account",{"_index":4159,"title":{},"content":{"573":{"position":[[985,25]]}},"keywords":{}}],["toolstax",{"_index":5376,"title":{},"content":{"1096":{"position":[[433,8]]}},"keywords":{}}],["tooltip",{"_index":617,"title":{},"content":{"26":{"position":[[549,9]]},"146":{"position":[[546,8]]},"149":{"position":[[519,8]]},"152":{"position":[[522,8]]}},"keywords":{}}],["tooth",{"_index":5090,"title":{},"content":{"943":{"position":[[1013,5]]}},"keywords":{}}],["top",{"_index":606,"title":{},"content":{"26":{"position":[[261,3]]},"60":{"position":[[26,3],[150,3],[1191,3]]},"98":{"position":[[65,3],[1243,3]]},"99":{"position":[[410,3]]},"103":{"position":[[574,3],[695,3]]},"154":{"position":[[1319,3]]},"160":{"position":[[109,3],[250,3]]},"206":{"position":[[857,3]]},"240":{"position":[[4134,3]]},"263":{"position":[[1007,3]]},"264":{"position":[[414,3]]},"274":{"position":[[1852,3]]},"275":{"position":[[448,3],[766,3]]},"296":{"position":[[7539,3]]},"349":{"position":[[102,3]]},"479":{"position":[[101,3]]},"1008":{"position":[[1299,3]]},"1092":{"position":[[102,3]]},"1178":{"position":[[271,3]]},"1209":{"position":[[601,3]]},"1279":{"position":[[192,3]]},"1358":{"position":[[845,3]]},"1379":{"position":[[4849,3]]},"1403":{"position":[[4849,3]]},"1414":{"position":[[4849,3]]},"1461":{"position":[[1897,3],[3117,3],[5558,3]]}},"keywords":{}}],["top_level",{"_index":1432,"title":{},"content":{"99":{"position":[[683,11]]}},"keywords":{}}],["topic",{"_index":2630,"title":{"1232":{"position":[[10,7]]}},"content":{"245":{"position":[[242,7]]},"246":{"position":[[7,5]]},"250":{"position":[[1244,6]]},"320":{"position":[[859,6]]},"432":{"position":[[1252,5]]},"433":{"position":[[918,6]]},"598":{"position":[[168,7],[206,7]]},"601":{"position":[[131,7],[354,6],[456,5],[481,5]]},"675":{"position":[[260,6]]},"1118":{"position":[[756,7],[770,6]]},"1229":{"position":[[230,7]]},"1230":{"position":[[532,6],[608,6],[960,6],[1038,5],[1191,6],[1286,6],[1293,5],[1316,5]]},"1231":{"position":[[292,6]]},"1232":{"position":[[67,6],[103,6],[225,6],[293,5],[512,6],[529,5],[603,6],[620,5]]}},"keywords":{}}],["topic_nam",{"_index":3687,"title":{},"content":{"433":{"position":[[354,13],[750,13]]}},"keywords":{}}],["topics.resourc",{"_index":768,"title":{},"content":{"45":{"position":[[281,16]]}},"keywords":{}}],["topics.schema",{"_index":2632,"title":{},"content":{"246":{"position":[[78,13]]}},"keywords":{}}],["topicsemail",{"_index":3911,"title":{},"content":{"506":{"position":[[203,11]]}},"keywords":{}}],["topk8",{"_index":6369,"title":{},"content":{"1384":{"position":[[308,5]]}},"keywords":{}}],["torn",{"_index":4661,"title":{},"content":{"764":{"position":[[621,4]]},"777":{"position":[[621,4]]},"804":{"position":[[619,4]]},"819":{"position":[[619,4]]},"835":{"position":[[619,4]]}},"keywords":{}}],["torrent",{"_index":1925,"title":{},"content":{"163":{"position":[[593,7]]}},"keywords":{}}],["total",{"_index":1659,"title":{},"content":{"121":{"position":[[973,6],[1053,6],[1602,5]]},"138":{"position":[[1959,5]]},"141":{"position":[[1891,5]]},"142":{"position":[[2012,5]]},"146":{"position":[[91,5]]},"149":{"position":[[94,5]]},"152":{"position":[[104,5]]},"254":{"position":[[3868,5]]},"1459":{"position":[[108,5],[1129,5]]},"1470":{"position":[[1008,5],[1274,5]]},"1475":{"position":[[454,5],[542,5],[1248,5],[1319,5],[1952,5]]}},"keywords":{}}],["total_amount",{"_index":2956,"title":{},"content":{"295":{"position":[[485,12]]},"296":{"position":[[4873,14]]}},"keywords":{}}],["total_edit",{"_index":2770,"title":{},"content":{"254":{"position":[[377,12],[741,12],[1445,12],[2798,12],[3459,12],[3708,12]]}},"keywords":{}}],["total_new_lin",{"_index":2771,"title":{},"content":{"254":{"position":[[425,16],[796,15],[1493,16],[2853,15],[3514,15]]}},"keywords":{}}],["touch",{"_index":1990,"title":{},"content":{"170":{"position":[[258,6]]},"174":{"position":[[598,5]]},"237":{"position":[[2734,5]]}},"keywords":{}}],["tour",{"_index":649,"title":{},"content":{"30":{"position":[[228,4]]}},"keywords":{}}],["trace",{"_index":1156,"title":{},"content":{"82":{"position":[[875,5]]}},"keywords":{}}],["track",{"_index":213,"title":{},"content":{"6":{"position":[[312,5]]},"21":{"position":[[99,5],[308,5]]},"100":{"position":[[1330,6]]},"105":{"position":[[648,6]]},"196":{"position":[[50,5]]},"209":{"position":[[827,7]]},"233":{"position":[[50,5],[718,5]]},"280":{"position":[[404,5]]},"377":{"position":[[787,8]]},"480":{"position":[[1124,5]]},"584":{"position":[[915,8]]},"763":{"position":[[117,8]]},"776":{"position":[[117,8]]},"803":{"position":[[117,8]]},"818":{"position":[[117,8]]},"834":{"position":[[117,8]]},"1009":{"position":[[1612,5]]},"1247":{"position":[[981,5]]},"1455":{"position":[[103,8]]},"1463":{"position":[[522,5]]},"1476":{"position":[[1095,5]]}},"keywords":{}}],["trackev",{"_index":4939,"title":{},"content":{"892":{"position":[[495,11]]}},"keywords":{}}],["trackingusersusersgroupsdetailedworkflowsworkflow",{"_index":4491,"title":{},"content":{"709":{"position":[[659,49]]}},"keywords":{}}],["trade",{"_index":3433,"title":{"373":{"position":[[25,5]]}},"content":{"373":{"position":[[62,7],[84,6],[115,5],[181,5],[205,5],[485,6],[703,5],[936,5]]},"375":{"position":[[163,5]]},"377":{"position":[[1437,6]]},"378":{"position":[[338,6]]},"379":{"position":[[365,5]]}},"keywords":{}}],["tradit",{"_index":669,"title":{},"content":{"34":{"position":[[203,11],[330,11]]},"77":{"position":[[348,11]]},"180":{"position":[[174,11]]},"429":{"position":[[896,11]]}},"keywords":{}}],["traffic",{"_index":4664,"title":{"946":{"position":[[14,8]]}},"content":{"767":{"position":[[370,7]]},"792":{"position":[[683,7]]},"824":{"position":[[475,7]]},"904":{"position":[[474,7]]},"918":{"position":[[683,7]]},"946":{"position":[[125,7]]},"1051":{"position":[[474,7]]},"1289":{"position":[[557,7]]},"1321":{"position":[[337,7]]},"1334":{"position":[[425,7]]},"1373":{"position":[[456,7]]},"1374":{"position":[[456,7]]}},"keywords":{}}],["traffic_sourc",{"_index":4204,"title":{},"content":{"575":{"position":[[895,15]]},"586":{"position":[[817,15]]}},"keywords":{}}],["trail",{"_index":5593,"title":{},"content":{"1140":{"position":[[1684,8]]},"1209":{"position":[[619,8]]},"1292":{"position":[[6366,8]]},"1306":{"position":[[6366,8]]},"1316":{"position":[[1684,8]]},"1329":{"position":[[6366,8]]},"1340":{"position":[[1684,8]]},"1351":{"position":[[1684,8]]},"1379":{"position":[[4906,8]]},"1403":{"position":[[4906,8]]},"1414":{"position":[[4906,8]]},"1431":{"position":[[1707,8]]}},"keywords":{}}],["tran",{"_index":6353,"title":{},"content":{"1379":{"position":[[4957,4]]},"1403":{"position":[[4957,4]]},"1414":{"position":[[4957,4]]}},"keywords":{}}],["transact",{"_index":262,"title":{"20":{"position":[[0,13]]},"881":{"position":[[7,11]]},"1438":{"position":[[22,13]]},"1451":{"position":[[4,12]]},"1475":{"position":[[0,11]]}},"content":{"8":{"position":[[382,12]]},"20":{"position":[[36,13],[179,11],[209,11],[346,11],[372,11],[456,11],[509,11],[668,11],[775,13],[982,11],[1084,11]]},"21":{"position":[[493,11]]},"97":{"position":[[809,12]]},"100":{"position":[[1068,14],[1101,11]]},"114":{"position":[[572,13]]},"115":{"position":[[916,13],[968,12],[1009,13],[1100,13]]},"124":{"position":[[27,13],[238,14],[282,12],[552,12],[768,12],[838,12]]},"125":{"position":[[890,11]]},"128":{"position":[[212,12]]},"163":{"position":[[989,11],[1092,12]]},"320":{"position":[[2236,13]]},"321":{"position":[[2243,13]]},"323":{"position":[[1106,13]]},"331":{"position":[[321,13]]},"332":{"position":[[141,12]]},"343":{"position":[[330,11],[412,11],[820,11],[902,11]]},"364":{"position":[[2839,11]]},"838":{"position":[[84,13]]},"840":{"position":[[1060,12]]},"843":{"position":[[535,11],[698,11]]},"849":{"position":[[2071,12],[2162,11]]},"852":{"position":[[332,11]]},"883":{"position":[[12,11],[58,12]]},"884":{"position":[[257,11]]},"885":{"position":[[680,11]]},"886":{"position":[[288,12]]},"922":{"position":[[182,12],[372,13],[756,13],[1367,11],[2859,13],[2967,11],[3055,11],[3254,11]]},"1138":{"position":[[1439,11]]},"1140":{"position":[[1737,11]]},"1147":{"position":[[177,11],[197,11],[278,11]]},"1156":{"position":[[471,12],[906,12]]},"1174":{"position":[[177,11],[197,11],[278,11]]},"1216":{"position":[[177,11],[197,11],[278,11]]},"1224":{"position":[[177,11],[197,11],[278,11]]},"1292":{"position":[[6408,11]]},"1306":{"position":[[6408,11]]},"1313":{"position":[[983,11]]},"1316":{"position":[[1737,11]]},"1329":{"position":[[6408,11]]},"1337":{"position":[[983,11]]},"1340":{"position":[[1737,11]]},"1348":{"position":[[983,11]]},"1351":{"position":[[1737,11]]},"1370":{"position":[[1142,11]]},"1379":{"position":[[5009,11]]},"1388":{"position":[[470,11]]},"1391":{"position":[[1076,12]]},"1403":{"position":[[5009,11]]},"1414":{"position":[[5009,11]]},"1427":{"position":[[710,11]]},"1431":{"position":[[1760,11]]},"1434":{"position":[[508,12],[1071,12]]},"1435":{"position":[[23,13],[314,12],[370,13],[597,13]]},"1436":{"position":[[107,11]]},"1437":{"position":[[415,11],[805,13],[945,13],[1075,11],[1404,11],[1613,13]]},"1438":{"position":[[177,13],[276,11],[574,12]]},"1439":{"position":[[122,11],[250,11],[314,11],[700,11]]},"1440":{"position":[[386,12],[677,12],[1006,11],[1179,11]]},"1442":{"position":[[71,12],[109,11],[187,11],[294,11],[1088,12],[1676,13]]},"1443":{"position":[[128,12],[380,11],[477,11],[729,12],[1014,11]]},"1444":{"position":[[435,12],[488,12],[672,11]]},"1451":{"position":[[116,12],[250,12],[322,11],[460,12],[616,13],[682,12],[863,11],[968,11]]},"1452":{"position":[[324,12],[771,12],[853,12],[990,12],[1068,12],[1287,12],[1723,13],[1916,11]]},"1453":{"position":[[94,11],[213,11],[286,11],[454,11],[724,11],[767,11],[1011,12]]},"1459":{"position":[[667,14],[893,11]]},"1471":{"position":[[541,12],[559,11]]},"1473":{"position":[[97,12],[159,12]]},"1474":{"position":[[66,12]]},"1475":{"position":[[45,12],[382,12],[474,11],[558,12],[1193,11]]}},"keywords":{}}],["transaction.a",{"_index":1699,"title":{},"content":{"124":{"position":[[709,14]]}},"keywords":{}}],["transaction.dev",{"_index":3371,"title":{},"content":{"364":{"position":[[2904,15]]}},"keywords":{}}],["transaction:dev",{"_index":4925,"title":{},"content":{"886":{"position":[[97,15]]}},"keywords":{}}],["transactionaccountinglin",{"_index":4798,"title":{},"content":{"843":{"position":[[565,25]]}},"keywords":{}}],["transactionsbal",{"_index":4923,"title":{},"content":{"882":{"position":[[70,20]]}},"keywords":{}}],["transactionsbank",{"_index":5276,"title":{},"content":{"1073":{"position":[[77,16]]}},"keywords":{}}],["transactionscustomersdisputeseventsinvoic",{"_index":5280,"title":{},"content":{"1073":{"position":[[178,42]]}},"keywords":{}}],["transactionslog",{"_index":3237,"title":{},"content":{"343":{"position":[[1162,15]]}},"keywords":{}}],["transfer",{"_index":1516,"title":{"277":{"position":[[16,10]]},"279":{"position":[[19,10]]},"280":{"position":[[10,10]]}},"content":{"107":{"position":[[594,9],[1960,9]]},"110":{"position":[[1456,9]]},"113":{"position":[[626,9]]},"163":{"position":[[569,8]]},"277":{"position":[[182,8],[278,9],[315,8],[422,9],[998,9]]},"278":{"position":[[251,9]]},"279":{"position":[[237,8],[271,9],[1048,10],[1076,8],[1110,10],[1265,9],[1418,9],[1682,9]]},"280":{"position":[[172,9],[288,8],[647,10],[696,8],[752,8],[1189,8],[1342,8],[1793,8],[1896,9],[2215,8]]},"281":{"position":[[354,9],[1745,9]]},"289":{"position":[[43,8]]},"300":{"position":[[43,8]]},"1078":{"position":[[2057,9]]},"1268":{"position":[[52,12]]}},"keywords":{}}],["transfers.schema.yaml",{"_index":2830,"title":{},"content":{"277":{"position":[[590,21]]},"278":{"position":[[919,21]]},"279":{"position":[[1127,21]]},"280":{"position":[[1250,21]]}},"keywords":{}}],["transform",{"_index":666,"title":{"105":{"position":[[0,16]]},"183":{"position":[[20,9]]},"251":{"position":[[7,9]]},"311":{"position":[[7,9]]},"315":{"position":[[4,14]]},"331":{"position":[[9,16]]}},"content":{"32":{"position":[[478,14]]},"40":{"position":[[52,14]]},"44":{"position":[[458,15]]},"50":{"position":[[250,16]]},"67":{"position":[[1604,16]]},"69":{"position":[[915,16]]},"91":{"position":[[151,15]]},"94":{"position":[[1044,15],[1096,10],[1128,15],[1291,15],[2275,10],[2669,15],[3061,14],[3096,15]]},"95":{"position":[[178,12],[279,15]]},"96":{"position":[[134,11]]},"99":{"position":[[78,11]]},"101":{"position":[[171,16]]},"102":{"position":[[40,10]]},"105":{"position":[[3,14],[270,14],[492,16],[518,14],[572,14],[692,14],[753,15],[862,15],[1135,14],[1189,14],[1225,14]]},"106":{"position":[[17,14],[152,15]]},"107":{"position":[[567,10],[1430,11],[1714,15],[1754,15],[1928,14],[2478,14],[2610,11],[3264,11],[3650,16],[3797,15],[3841,16],[3982,11]]},"108":{"position":[[56,16],[119,11],[334,14]]},"109":{"position":[[1,15],[188,15]]},"110":{"position":[[3,14],[378,14]]},"111":{"position":[[88,14],[354,14],[460,16],[560,14],[637,15]]},"112":{"position":[[181,14]]},"135":{"position":[[656,12]]},"180":{"position":[[342,14],[905,11]]},"182":{"position":[[622,15],[707,14]]},"183":{"position":[[151,14],[286,14],[755,14],[1342,11],[2288,15],[2312,10],[2340,14],[2439,11],[2772,9],[3856,11],[4562,14]]},"219":{"position":[[594,9]]},"252":{"position":[[58,14],[126,10]]},"253":{"position":[[23,15],[3072,14]]},"254":{"position":[[578,11],[1211,14],[2635,11]]},"255":{"position":[[1002,14]]},"267":{"position":[[168,14],[444,14],[502,15],[601,15],[1119,14],[1702,15]]},"268":{"position":[[26,14],[228,15],[971,11],[1259,14],[1341,9],[1454,15]]},"269":{"position":[[33,14],[190,15],[581,11],[830,14],[912,9],[1025,15]]},"270":{"position":[[1431,14],[1580,9],[1653,10],[1816,15]]},"271":{"position":[[191,9],[239,9],[397,9]]},"277":{"position":[[653,11],[964,10]]},"278":{"position":[[1097,11]]},"279":{"position":[[679,10],[1438,11]]},"280":{"position":[[1594,11]]},"281":{"position":[[986,11]]},"292":{"position":[[260,16]]},"294":{"position":[[58,14]]},"295":{"position":[[1452,15]]},"296":{"position":[[736,11],[1085,16],[2737,11],[2975,14],[3118,15],[3363,15],[3471,15],[3511,15],[4397,16],[5103,14]]},"303":{"position":[[251,16]]},"312":{"position":[[58,14]]},"313":{"position":[[23,15],[3148,14]]},"314":{"position":[[445,11],[932,14],[2300,11],[2497,14],[2582,15]]},"315":{"position":[[98,14],[887,16],[1187,14]]},"316":{"position":[[1327,14]]},"319":{"position":[[616,16]]},"321":{"position":[[451,9],[736,15],[1352,9],[1652,12],[2399,15]]},"322":{"position":[[1301,16],[1519,9],[1583,15],[1852,14]]},"323":{"position":[[459,13]]},"324":{"position":[[59,9],[168,9],[469,16],[626,10],[1106,15]]},"329":{"position":[[81,10],[582,14]]},"330":{"position":[[264,15]]},"331":{"position":[[288,10],[663,15]]},"1475":{"position":[[1453,9],[1631,9]]}},"keywords":{}}],["transient",{"_index":5214,"title":{},"content":{"1031":{"position":[[531,9]]}},"keywords":{}}],["transit",{"_index":3401,"title":{},"content":{"368":{"position":[[149,11]]},"755":{"position":[[149,11]]},"768":{"position":[[149,11]]},"795":{"position":[[147,11]]},"810":{"position":[[147,11]]},"826":{"position":[[147,11]]},"905":{"position":[[152,11]]},"920":{"position":[[152,11]]},"932":{"position":[[152,11]]},"948":{"position":[[152,11]]},"966":{"position":[[152,11]]},"1456":{"position":[[206,12]]},"1461":{"position":[[438,11]]}},"keywords":{}}],["translat",{"_index":957,"title":{"158":{"position":[[0,13]]}},"content":{"64":{"position":[[214,10]]},"158":{"position":[[302,12]]},"291":{"position":[[1443,9]]},"302":{"position":[[1363,9]]},"321":{"position":[[1135,9]]},"419":{"position":[[157,9]]},"440":{"position":[[173,9]]},"504":{"position":[[94,9]]},"547":{"position":[[158,9]]},"639":{"position":[[93,9]]},"821":{"position":[[128,11]]},"869":{"position":[[308,9],[517,9],[849,11]]},"912":{"position":[[136,11]]},"1023":{"position":[[138,9]]},"1140":{"position":[[1781,9],[1877,11]]},"1316":{"position":[[1781,9],[1877,11]]},"1340":{"position":[[1781,9],[1877,11]]},"1351":{"position":[[1781,9],[1877,11]]},"1379":{"position":[[5067,9],[5175,11]]},"1403":{"position":[[5067,9],[5175,11]]},"1414":{"position":[[5067,9],[5175,11]]},"1431":{"position":[[1804,9],[1900,11]]}},"keywords":{}}],["translate_reg",{"_index":6354,"title":{},"content":{"1379":{"position":[[5116,13]]},"1403":{"position":[[5116,13]]},"1414":{"position":[[5116,13]]}},"keywords":{}}],["translate_regex",{"_index":5600,"title":{},"content":{"1140":{"position":[[1827,15]]},"1316":{"position":[[1827,15]]},"1340":{"position":[[1827,15]]},"1351":{"position":[[1827,15]]},"1431":{"position":[[1850,15]]}},"keywords":{}}],["transmit",{"_index":2320,"title":{},"content":{"210":{"position":[[2162,12]]}},"keywords":{}}],["travel",{"_index":1599,"title":{"1478":{"position":[[5,6]]},"1479":{"position":[[22,7]]}},"content":{"112":{"position":[[858,6]]},"1479":{"position":[[372,7],[550,6]]}},"keywords":{}}],["treat",{"_index":1310,"title":{},"content":{"90":{"position":[[180,7]]},"480":{"position":[[1249,7]]},"1140":{"position":[[1923,5]]},"1155":{"position":[[209,7]]},"1316":{"position":[[1923,5]]},"1340":{"position":[[1923,5]]},"1351":{"position":[[1923,5]]},"1379":{"position":[[5231,5]]},"1403":{"position":[[5231,5]]},"1414":{"position":[[5231,5]]},"1431":{"position":[[1946,5]]},"1464":{"position":[[847,7]]},"1467":{"position":[[2894,7]]}},"keywords":{}}],["tree",{"_index":2906,"title":{},"content":{"281":{"position":[[3211,4]]},"296":{"position":[[3851,4]]},"315":{"position":[[308,4]]}},"keywords":{}}],["tri",{"_index":238,"title":{},"content":{"7":{"position":[[311,6]]},"99":{"position":[[780,3]]},"185":{"position":[[93,3]]},"212":{"position":[[136,3]]},"236":{"position":[[173,3]]},"243":{"position":[[128,3]]},"250":{"position":[[979,4]]},"291":{"position":[[784,3]]},"302":{"position":[[784,3]]},"417":{"position":[[1556,3],[1708,3],[2118,4]]},"419":{"position":[[770,3],[990,3]]},"440":{"position":[[786,3],[1006,3]]},"486":{"position":[[159,3]]},"502":{"position":[[1204,3],[1356,3]]},"504":{"position":[[702,3],[906,3]]},"545":{"position":[[1158,3],[1310,3]]},"547":{"position":[[771,3],[991,3]]},"637":{"position":[[718,3],[870,3]]},"639":{"position":[[700,3],[904,3]]},"658":{"position":[[159,3]]},"674":{"position":[[159,3]]},"689":{"position":[[159,3]]},"870":{"position":[[505,6]]},"871":{"position":[[37,6]]},"910":{"position":[[70,3]]},"926":{"position":[[70,3]]},"937":{"position":[[70,3]]},"953":{"position":[[70,3]]},"971":{"position":[[70,3]]},"1021":{"position":[[1715,3],[1867,3]]},"1023":{"position":[[751,3],[971,3]]},"1462":{"position":[[442,3]]}},"keywords":{}}],["trial",{"_index":1760,"title":{},"content":{"136":{"position":[[157,5]]},"154":{"position":[[1543,5],[1570,7],[1691,5]]},"188":{"position":[[125,5],[170,6]]},"191":{"position":[[192,5]]},"192":{"position":[[631,6]]},"234":{"position":[[571,5]]},"1456":{"position":[[243,5],[310,5],[339,5]]}},"keywords":{}}],["trialfre",{"_index":6584,"title":{},"content":{"1456":{"position":[[233,9],[300,9]]}},"keywords":{}}],["tricki",{"_index":4820,"title":{},"content":{"849":{"position":[[1861,6]]}},"keywords":{}}],["trickl",{"_index":1926,"title":{},"content":{"163":{"position":[[650,7]]}},"keywords":{}}],["trigger",{"_index":362,"title":{},"content":{"12":{"position":[[170,7],[391,7]]},"55":{"position":[[678,7]]},"100":{"position":[[126,9]]},"197":{"position":[[44,9],[849,9]]},"209":{"position":[[343,9]]},"278":{"position":[[541,9]]},"675":{"position":[[278,7]]},"1110":{"position":[[480,8]]},"1140":{"position":[[1959,7]]},"1292":{"position":[[6457,7],[6503,8]]},"1306":{"position":[[6457,7],[6503,8]]},"1316":{"position":[[1959,7]]},"1329":{"position":[[6457,7],[6503,8]]},"1340":{"position":[[1959,7]]},"1351":{"position":[[1959,7]]},"1370":{"position":[[1159,7]]},"1379":{"position":[[5288,7]]},"1394":{"position":[[812,7]]},"1403":{"position":[[5288,7]]},"1414":{"position":[[5288,7]]},"1431":{"position":[[1982,7]]},"1472":{"position":[[489,7]]}},"keywords":{}}],["trim",{"_index":5607,"title":{},"content":{"1140":{"position":[[1993,4]]},"1209":{"position":[[646,4]]},"1316":{"position":[[1993,4]]},"1340":{"position":[[1993,4]]},"1351":{"position":[[1993,4]]},"1379":{"position":[[5337,4]]},"1403":{"position":[[5337,4]]},"1414":{"position":[[5337,4]]},"1423":{"position":[[553,4]]},"1431":{"position":[[2016,4]]}},"keywords":{}}],["trim((select",{"_index":6379,"title":{},"content":{"1384":{"position":[[812,12]]}},"keywords":{}}],["trim_array",{"_index":5608,"title":{},"content":{"1140":{"position":[[2018,10]]},"1316":{"position":[[2018,10]]},"1340":{"position":[[2018,10]]},"1351":{"position":[[2018,10]]},"1431":{"position":[[2041,10]]}},"keywords":{}}],["trino",{"_index":6415,"title":{},"content":{"1423":{"position":[[458,5]]}},"keywords":{}}],["trino'",{"_index":6414,"title":{},"content":{"1423":{"position":[[201,7]]}},"keywords":{}}],["tripdata",{"_index":2124,"title":{},"content":{"190":{"position":[[981,8],[2057,8]]}},"keywords":{}}],["triplet",{"_index":4884,"title":{},"content":{"869":{"position":[[36,7]]}},"keywords":{}}],["trivial",{"_index":3111,"title":{},"content":{"319":{"position":[[1547,9]]},"1440":{"position":[[1557,9]]}},"keywords":{}}],["troubl",{"_index":2312,"title":{},"content":{"210":{"position":[[1935,8]]}},"keywords":{}}],["troubleshoot",{"_index":1815,"title":{"282":{"position":[[0,12]]},"759":{"position":[[0,15]]},"772":{"position":[[0,15]]},"799":{"position":[[0,15]]},"814":{"position":[[0,15]]},"830":{"position":[[0,15]]},"871":{"position":[[0,16]]},"910":{"position":[[0,16]]},"926":{"position":[[0,16]]},"937":{"position":[[0,16]]},"953":{"position":[[0,16]]},"971":{"position":[[0,16]]}},"content":{"141":{"position":[[456,12]]},"900":{"position":[[334,16]]}},"keywords":{}}],["true",{"_index":458,"title":{},"content":{"16":{"position":[[274,4],[320,4],[370,4]]},"55":{"position":[[664,5]]},"56":{"position":[[525,4],[593,5],[917,4]]},"76":{"position":[[981,4]]},"98":{"position":[[1187,6]]},"99":{"position":[[550,5]]},"122":{"position":[[1615,4]]},"123":{"position":[[336,4]]},"156":{"position":[[580,4]]},"191":{"position":[[1587,4],[1614,5]]},"210":{"position":[[1296,4]]},"230":{"position":[[1045,4],[1074,5]]},"236":{"position":[[3587,6]]},"237":{"position":[[1859,6],[2324,5]]},"240":{"position":[[1548,4],[1575,5]]},"280":{"position":[[2285,4]]},"307":{"position":[[173,4]]},"378":{"position":[[305,4]]},"406":{"position":[[389,5]]},"496":{"position":[[399,4]]},"497":{"position":[[193,4]]},"748":{"position":[[294,4]]},"842":{"position":[[3773,4]]},"843":{"position":[[672,4]]},"898":{"position":[[685,5],[908,5],[1140,5],[1580,5]]},"904":{"position":[[1949,6]]},"911":{"position":[[333,6]]},"917":{"position":[[1458,6]]},"918":{"position":[[2241,6]]},"919":{"position":[[2296,6]]},"927":{"position":[[333,6]]},"931":{"position":[[1611,6]]},"938":{"position":[[333,6]]},"945":{"position":[[266,6]]},"954":{"position":[[333,6]]},"965":{"position":[[1458,6]]},"972":{"position":[[333,6]]},"1008":{"position":[[1692,4]]},"1015":{"position":[[126,4]]},"1016":{"position":[[228,4]]},"1032":{"position":[[1189,4],[1216,5]]},"1140":{"position":[[2049,4]]},"1162":{"position":[[1089,4]]},"1163":{"position":[[362,4]]},"1182":{"position":[[644,4]]},"1191":{"position":[[664,4]]},"1192":{"position":[[587,4]]},"1200":{"position":[[465,5],[1037,4],[1072,4]]},"1209":{"position":[[666,4]]},"1230":{"position":[[747,5],[1078,4]]},"1231":{"position":[[287,4]]},"1262":{"position":[[648,4]]},"1281":{"position":[[394,4]]},"1292":{"position":[[6544,4]]},"1295":{"position":[[394,4]]},"1306":{"position":[[6544,4]]},"1316":{"position":[[2049,4]]},"1319":{"position":[[394,4]]},"1329":{"position":[[6544,4]]},"1340":{"position":[[2049,4]]},"1351":{"position":[[2049,4]]},"1379":{"position":[[5384,4]]},"1383":{"position":[[1535,4],[1562,5]]},"1389":{"position":[[646,4]]},"1394":{"position":[[838,4]]},"1403":{"position":[[5384,4]]},"1414":{"position":[[5384,4]]},"1423":{"position":[[574,4]]},"1431":{"position":[[2072,4]]},"1459":{"position":[[224,4]]}},"keywords":{}}],["truncat",{"_index":4636,"title":{},"content":{"760":{"position":[[781,8]]},"773":{"position":[[781,8]]},"800":{"position":[[781,8]]},"815":{"position":[[781,8]]},"831":{"position":[[781,8]]},"1140":{"position":[[2087,8]]},"1209":{"position":[[685,8]]},"1292":{"position":[[6572,8]]},"1306":{"position":[[6572,8]]},"1316":{"position":[[2087,8]]},"1329":{"position":[[6572,8]]},"1340":{"position":[[2087,8]]},"1351":{"position":[[2087,8]]},"1379":{"position":[[3794,8]]},"1403":{"position":[[3794,8]]},"1414":{"position":[[3794,8]]},"1431":{"position":[[2110,8]]}},"keywords":{}}],["truth",{"_index":3175,"title":{},"content":{"326":{"position":[[292,5]]}},"keywords":{}}],["try_cast",{"_index":6406,"title":{},"content":{"1394":{"position":[[866,8]]}},"keywords":{}}],["try_convert",{"_index":6341,"title":{},"content":{"1379":{"position":[[3856,11]]},"1403":{"position":[[3856,11]]},"1414":{"position":[[3856,11]]}},"keywords":{}}],["tsequal",{"_index":6342,"title":{},"content":{"1379":{"position":[[3917,7]]},"1403":{"position":[[3917,7]]},"1414":{"position":[[3917,7]]}},"keywords":{}}],["tuesday",{"_index":6537,"title":{},"content":{"1452":{"position":[[1470,8],[4404,8]]}},"keywords":{}}],["tune",{"_index":1677,"title":{"922":{"position":[[18,6]]}},"content":{"122":{"position":[[765,6]]},"281":{"position":[[3056,7]]},"517":{"position":[[3377,4],[3676,4]]}},"keywords":{}}],["tunnel",{"_index":1217,"title":{"220":{"position":[[31,9]]},"784":{"position":[[4,10]]},"1255":{"position":[[4,10]]},"1272":{"position":[[4,9]]},"1298":{"position":[[17,10]]},"1322":{"position":[[17,10]]},"1335":{"position":[[17,10]]},"1346":{"position":[[17,10]]}},"content":{"83":{"position":[[414,10],[528,9],[1171,10]]},"222":{"position":[[14,9]]},"223":{"position":[[14,9]]},"224":{"position":[[14,9]]},"225":{"position":[[493,9]]},"238":{"position":[[169,9],[373,6]]},"242":{"position":[[300,6]]},"366":{"position":[[1144,10]]},"370":{"position":[[1523,6],[1816,9]]},"750":{"position":[[1364,10],[1451,10]]},"753":{"position":[[329,10],[561,7]]},"767":{"position":[[475,10],[707,7]]},"784":{"position":[[109,10],[353,7]]},"789":{"position":[[1765,10],[1852,10]]},"792":{"position":[[336,7],[763,10],[985,7]]},"793":{"position":[[150,7],[298,10],[520,7]]},"808":{"position":[[150,7],[314,10],[536,7]]},"824":{"position":[[150,7],[555,10],[777,7]]},"866":{"position":[[314,10],[537,7]]},"878":{"position":[[324,10],[547,7]]},"904":{"position":[[150,7],[554,10],[776,7]]},"915":{"position":[[1221,10],[1308,10]]},"918":{"position":[[336,7],[763,10],[985,7]]},"919":{"position":[[150,7],[298,10],[520,7]]},"931":{"position":[[150,7],[318,10],[540,7]]},"963":{"position":[[1375,10],[1462,10]]},"1042":{"position":[[1200,10],[1326,7]]},"1043":{"position":[[150,7],[298,10],[520,7]]},"1051":{"position":[[150,7],[554,10],[776,7]]},"1059":{"position":[[150,7],[318,10],[540,7]]},"1136":{"position":[[297,10]]},"1138":{"position":[[419,10],[814,6],[1107,9]]},"1149":{"position":[[100,7]]},"1154":{"position":[[195,7],[264,6],[493,10],[721,7]]},"1198":{"position":[[198,10],[442,7]]},"1255":{"position":[[109,10],[353,7]]},"1272":{"position":[[40,9],[151,9]]},"1282":{"position":[[459,7]]},"1283":{"position":[[161,7],[314,10]]},"1288":{"position":[[171,7]]},"1289":{"position":[[161,7],[765,9],[827,9],[1061,7]]},"1298":{"position":[[14,9]]},"1303":{"position":[[150,7],[318,10],[540,7],[772,7]]},"1310":{"position":[[474,7]]},"1311":{"position":[[151,10]]},"1320":{"position":[[161,7]]},"1322":{"position":[[14,9],[1046,9],[1280,7]]},"1333":{"position":[[161,7]]},"1334":{"position":[[267,9]]},"1335":{"position":[[14,9]]},"1344":{"position":[[161,7]]},"1346":{"position":[[14,9]]},"1373":{"position":[[150,7],[536,10],[758,7]]},"1374":{"position":[[150,7],[536,10],[758,7]]},"1397":{"position":[[150,7],[315,10],[537,7]]},"1398":{"position":[[150,7],[314,10],[536,7]]},"1408":{"position":[[473,10],[599,7]]},"1409":{"position":[[150,7],[298,10],[520,7]]}},"keywords":{}}],["tunnel.flow.yaml",{"_index":1223,"title":{},"content":{"83":{"position":[[891,16]]}},"keywords":{}}],["tunnelingin",{"_index":3400,"title":{},"content":{"367":{"position":[[857,11]]},"1136":{"position":[[411,11]]}},"keywords":{}}],["tunnelingwhen",{"_index":4597,"title":{},"content":{"753":{"position":[[398,13]]},"767":{"position":[[544,13]]},"792":{"position":[[822,13]]},"793":{"position":[[357,13]]},"808":{"position":[[373,13]]},"824":{"position":[[614,13]]},"866":{"position":[[374,13]]},"878":{"position":[[384,13]]},"904":{"position":[[613,13]]},"918":{"position":[[822,13]]},"919":{"position":[[357,13]]},"931":{"position":[[377,13]]},"1043":{"position":[[357,13]]},"1051":{"position":[[613,13]]},"1059":{"position":[[377,13]]},"1303":{"position":[[377,13]]},"1373":{"position":[[595,13]]},"1374":{"position":[[595,13]]},"1397":{"position":[[374,13]]},"1398":{"position":[[373,13]]},"1409":{"position":[[357,13]]}},"keywords":{}}],["tupl",{"_index":1540,"title":{},"content":{"107":{"position":[[1659,6],[3500,6]]},"480":{"position":[[387,5],[1271,5],[1354,5]]},"1477":{"position":[[3458,8],[3740,7]]}},"keywords":{}}],["turn",{"_index":88,"title":{},"content":{"2":{"position":[[528,6]]},"16":{"position":[[725,4]]},"84":{"position":[[553,4]]},"122":{"position":[[387,4]]},"239":{"position":[[1722,6]]},"263":{"position":[[1151,5]]},"274":{"position":[[1936,5]]},"338":{"position":[[442,5]]},"368":{"position":[[437,4]]},"395":{"position":[[211,4],[306,4]]},"590":{"position":[[244,5]]},"755":{"position":[[437,4]]},"768":{"position":[[437,4]]},"795":{"position":[[435,4]]},"810":{"position":[[435,4]]},"826":{"position":[[435,4]]},"905":{"position":[[440,4]]},"920":{"position":[[440,4]]},"932":{"position":[[440,4]]},"948":{"position":[[440,4]]},"966":{"position":[[440,4]]},"1156":{"position":[[635,5]]},"1438":{"position":[[735,6]]}},"keywords":{}}],["turnkey",{"_index":3129,"title":{},"content":{"320":{"position":[[2320,7]]},"321":{"position":[[1991,7]]}},"keywords":{}}],["tutori",{"_index":1481,"title":{"177":{"position":[[5,9]]},"195":{"position":[[6,9]]}},"content":{"103":{"position":[[828,8]]},"177":{"position":[[5,9],[20,9]]},"179":{"position":[[263,8]]},"182":{"position":[[351,8]]},"190":{"position":[[1350,9]]},"193":{"position":[[670,9]]},"196":{"position":[[736,9]]},"199":{"position":[[26,9],[237,8]]},"202":{"position":[[293,9]]},"204":{"position":[[68,9],[781,9],[964,9]]},"211":{"position":[[9,9],[270,9]]},"212":{"position":[[355,9]]},"213":{"position":[[525,10]]},"232":{"position":[[9,9],[715,9]]},"233":{"position":[[921,9]]},"234":{"position":[[6,8],[310,8],[559,9]]},"236":{"position":[[9,8]]},"237":{"position":[[2447,8]]},"238":{"position":[[580,8]]},"239":{"position":[[2824,9]]},"240":{"position":[[4199,9]]},"243":{"position":[[349,9]]},"252":{"position":[[6,8]]},"253":{"position":[[721,8],[3095,8]]},"254":{"position":[[3189,8]]},"255":{"position":[[1102,9]]},"260":{"position":[[139,9]]},"294":{"position":[[6,8]]},"295":{"position":[[31,8]]},"296":{"position":[[255,8],[791,8],[892,8],[1226,8],[2792,8],[2893,8],[3944,8],[4179,9],[5304,8],[5394,8],[5956,8],[6046,8]]},"297":{"position":[[114,9]]},"312":{"position":[[6,8]]},"313":{"position":[[721,8],[3172,8]]},"314":{"position":[[2061,9],[2764,8]]},"315":{"position":[[407,8],[658,9]]},"316":{"position":[[1427,9]]}},"keywords":{}}],["tutorial/edit",{"_index":2769,"title":{},"content":{"254":{"position":[[265,14]]},"255":{"position":[[205,14]]}},"keywords":{}}],["tutorial/recentchang",{"_index":3069,"title":{},"content":{"314":{"position":[[265,21],[648,21]]},"315":{"position":[[980,21],[1394,21],[1490,21]]},"316":{"position":[[207,21]]}},"keywords":{}}],["tutorialacm",{"_index":2804,"title":{},"content":{"268":{"position":[[1565,12]]}},"keywords":{}}],["twice",{"_index":3833,"title":{},"content":{"480":{"position":[[188,5]]}},"keywords":{}}],["twilio",{"_index":3386,"title":{"1109":{"position":[[0,6]]}},"content":{"364":{"position":[[3484,6]]},"1110":{"position":[[56,6]]},"1111":{"position":[[1,6]]},"1112":{"position":[[250,6]]},"1113":{"position":[[84,6],[142,6],[529,6]]}},"keywords":{}}],["twilio:dev",{"_index":3387,"title":{},"content":{"364":{"position":[[3537,10]]},"1114":{"position":[[90,10]]}},"keywords":{}}],["two",{"_index":396,"title":{"293":{"position":[[12,3]]}},"content":{"13":{"position":[[724,3]]},"19":{"position":[[118,3]]},"20":{"position":[[586,3]]},"24":{"position":[[242,3]]},"29":{"position":[[11,3]]},"32":{"position":[[150,3]]},"56":{"position":[[2537,3]]},"66":{"position":[[804,3]]},"71":{"position":[[691,3]]},"81":{"position":[[2794,3]]},"98":{"position":[[577,6]]},"112":{"position":[[1003,3]]},"113":{"position":[[908,3]]},"132":{"position":[[180,3]]},"154":{"position":[[421,3]]},"204":{"position":[[544,3]]},"232":{"position":[[898,3]]},"240":{"position":[[2857,3]]},"254":{"position":[[1865,3],[1948,3]]},"268":{"position":[[153,3]]},"281":{"position":[[715,3]]},"295":{"position":[[57,3]]},"296":{"position":[[1081,3],[1712,3],[1817,3],[3114,3],[4131,3],[5735,3]]},"297":{"position":[[72,3]]},"315":{"position":[[610,3]]},"324":{"position":[[678,3]]},"333":{"position":[[520,3]]},"373":{"position":[[986,3]]},"379":{"position":[[181,3],[460,3]]},"483":{"position":[[635,3]]},"513":{"position":[[11,3]]},"522":{"position":[[11,3]]},"530":{"position":[[11,3]]},"551":{"position":[[11,3]]},"569":{"position":[[11,3]]},"581":{"position":[[282,3]]},"590":{"position":[[357,3]]},"595":{"position":[[312,3]]},"607":{"position":[[11,3]]},"614":{"position":[[11,3]]},"643":{"position":[[11,3]]},"650":{"position":[[11,3]]},"683":{"position":[[11,3]]},"716":{"position":[[11,3]]},"731":{"position":[[11,3]]},"792":{"position":[[254,3]]},"793":{"position":[[68,3]]},"808":{"position":[[68,3]]},"824":{"position":[[68,3]]},"845":{"position":[[7,3]]},"855":{"position":[[194,3]]},"904":{"position":[[68,3]]},"918":{"position":[[254,3]]},"919":{"position":[[68,3]]},"922":{"position":[[396,3],[1099,3],[1642,3]]},"931":{"position":[[68,3]]},"974":{"position":[[246,3]]},"977":{"position":[[66,3]]},"1008":{"position":[[796,3]]},"1043":{"position":[[68,3]]},"1051":{"position":[[68,3]]},"1059":{"position":[[68,3]]},"1067":{"position":[[269,3]]},"1129":{"position":[[11,3]]},"1232":{"position":[[599,3]]},"1243":{"position":[[1035,3]]},"1283":{"position":[[79,3]]},"1289":{"position":[[79,3]]},"1303":{"position":[[68,3]]},"1320":{"position":[[79,3]]},"1333":{"position":[[79,3]]},"1344":{"position":[[79,3]]},"1373":{"position":[[68,3]]},"1374":{"position":[[68,3]]},"1388":{"position":[[349,3]]},"1397":{"position":[[68,3]]},"1398":{"position":[[68,3]]},"1409":{"position":[[68,3]]},"1461":{"position":[[4539,3]]},"1466":{"position":[[16,3],[411,3]]},"1467":{"position":[[363,3]]},"1470":{"position":[[616,3]]},"1479":{"position":[[320,3]]}},"keywords":{}}],["two"",{"_index":1720,"title":{},"content":{"128":{"position":[[593,9],[738,9]]}},"keywords":{}}],["two_weekly_active_us",{"_index":4205,"title":{},"content":{"575":{"position":[[990,23]]}},"keywords":{}}],["txn",{"_index":6440,"title":{},"content":{"1434":{"position":[[549,3],[616,3],[850,4],[2002,4]]}},"keywords":{}}],["txncount",{"_index":6695,"title":{},"content":{"1475":{"position":[[532,9]]}},"keywords":{}}],["type",{"_index":19,"title":{"89":{"position":[[7,6]]},"309":{"position":[[15,4]]},"427":{"position":[[15,6]]},"499":{"position":[[15,6]]},"634":{"position":[[15,6]]},"1007":{"position":[[27,4]]},"1164":{"position":[[15,6]]},"1172":{"position":[[13,6]]},"1222":{"position":[[13,6]]},"1393":{"position":[[15,4]]}},"content":{"1":{"position":[[247,5],[691,5]]},"8":{"position":[[510,4]]},"14":{"position":[[449,5],[480,5],[503,5],[920,4]]},"17":{"position":[[557,5],[942,5]]},"23":{"position":[[261,5]]},"50":{"position":[[51,5],[98,5],[203,4]]},"56":{"position":[[136,5],[998,5],[1477,5],[1620,5],[1903,5]]},"61":{"position":[[612,5],[867,4]]},"64":{"position":[[263,5]]},"66":{"position":[[317,5]]},"69":{"position":[[142,5],[389,5],[727,5],[828,5],[1006,5]]},"70":{"position":[[366,6],[710,5]]},"72":{"position":[[61,6],[100,5],[291,5],[418,5],[483,6],[529,6],[631,4],[729,5]]},"76":{"position":[[650,5]]},"89":{"position":[[219,4],[346,5]]},"90":{"position":[[598,5]]},"94":{"position":[[262,5],[421,5],[604,5],[789,5],[1319,5],[2829,5]]},"99":{"position":[[784,6]]},"102":{"position":[[373,6],[475,6],[492,4]]},"107":{"position":[[1828,5],[3590,5],[3687,5],[3758,5],[3913,6]]},"119":{"position":[[71,6]]},"120":{"position":[[152,5],[338,5],[904,5],[983,5],[2050,5]]},"121":{"position":[[942,5],[1060,5]]},"122":{"position":[[180,5],[1074,5],[1419,5],[1588,5],[1719,5],[2228,5]]},"138":{"position":[[638,4],[1831,5],[1856,4]]},"141":{"position":[[772,4]]},"142":{"position":[[585,4],[1872,5],[1897,4]]},"156":{"position":[[192,4],[288,6]]},"158":{"position":[[593,6],[691,4]]},"159":{"position":[[767,5]]},"160":{"position":[[119,4],[746,5],[793,6],[816,6]]},"162":{"position":[[1970,5],[2014,5],[2144,5],[2166,6],[2203,5],[2259,5],[2281,6]]},"164":{"position":[[521,5],[607,5],[1822,5]]},"165":{"position":[[1012,5],[1044,5]]},"166":{"position":[[352,5],[396,6],[428,6]]},"183":{"position":[[586,6],[1209,5],[1243,5],[1817,5],[1850,5],[1869,5],[1947,5],[3623,5],[3656,5],[3675,5],[3753,5]]},"189":{"position":[[1026,5]]},"197":{"position":[[666,5]]},"198":{"position":[[860,4],[871,4]]},"199":{"position":[[308,5]]},"203":{"position":[[60,4]]},"207":{"position":[[913,5],[945,5]]},"210":{"position":[[1168,5]]},"216":{"position":[[128,5]]},"217":{"position":[[630,4],[1597,6]]},"218":{"position":[[1087,4]]},"228":{"position":[[1286,6]]},"238":{"position":[[961,4],[1041,4]]},"240":{"position":[[4533,5]]},"254":{"position":[[298,5],[332,5],[364,5],[412,5],[464,5],[818,5],[1366,5],[1400,5],[1432,5],[1480,5],[1532,5],[2875,5],[3536,5]]},"264":{"position":[[256,5],[767,5]]},"267":{"position":[[677,4],[954,6]]},"268":{"position":[[841,5],[875,5]]},"269":{"position":[[466,5],[500,5]]},"274":{"position":[[1007,5],[1466,4]]},"275":{"position":[[276,5]]},"279":{"position":[[1190,5]]},"280":{"position":[[1439,5]]},"281":{"position":[[2018,5],[2105,5],[2129,5],[2460,6]]},"290":{"position":[[455,4]]},"296":{"position":[[406,5],[444,5],[464,5],[483,5],[503,5],[524,5],[1377,5],[1415,5],[1435,5],[1454,5],[1474,5],[1495,5],[3585,5],[4363,5],[4504,4],[4769,4],[4968,4]]},"301":{"position":[[395,4]]},"306":{"position":[[316,4]]},"307":{"position":[[1318,5],[1350,5],[1381,5],[1408,5],[2186,5],[2218,5],[2249,5],[2276,5]]},"309":{"position":[[80,4],[393,5],[656,5],[674,5],[904,6],[1079,5],[1152,5],[2152,5],[2184,5],[2211,5],[2242,5],[2574,4],[2749,5],[2781,5],[2808,5],[2839,5],[3338,4]]},"314":{"position":[[1146,5],[1167,5],[1187,5],[1226,5],[1247,5],[1267,5],[1286,5],[1299,5]]},"315":{"position":[[853,5],[1030,4]]},"319":{"position":[[998,6]]},"325":{"position":[[303,4]]},"326":{"position":[[1200,4]]},"329":{"position":[[1077,5]]},"332":{"position":[[634,5],[662,4]]},"351":{"position":[[39,4],[336,4]]},"359":{"position":[[108,4],[313,4]]},"370":{"position":[[256,4],[2021,4]]},"377":{"position":[[39,4],[1701,4]]},"387":{"position":[[219,4],[297,4],[1350,4]]},"392":{"position":[[39,4],[700,4]]},"397":{"position":[[39,4],[842,4]]},"402":{"position":[[39,4],[666,4]]},"408":{"position":[[39,4],[543,4]]},"417":{"position":[[39,4],[1786,5],[1869,4],[2236,4]]},"418":{"position":[[167,5]]},"419":{"position":[[69,5],[130,6],[281,4],[732,4],[803,4],[1137,5],[1169,6],[1365,5],[1858,5]]},"424":{"position":[[39,4],[367,4]]},"427":{"position":[[314,5]]},"432":{"position":[[39,4],[522,4],[1210,4]]},"436":{"position":[[659,4]]},"438":{"position":[[39,4],[1915,4]]},"439":{"position":[[424,5]]},"440":{"position":[[85,5],[146,6],[297,4],[748,4],[819,4],[1153,5],[1185,6],[1381,5]]},"441":{"position":[[467,5]]},"448":{"position":[[219,4],[1237,4]]},"454":{"position":[[39,4],[556,4]]},"460":{"position":[[39,4],[573,4]]},"466":{"position":[[39,4],[284,4]]},"482":{"position":[[39,4],[516,4]]},"487":{"position":[[599,5]]},"491":{"position":[[28,4]]},"492":{"position":[[28,4]]},"496":{"position":[[39,4],[549,4]]},"499":{"position":[[135,5],[305,4],[381,5]]},"502":{"position":[[39,4],[1434,5],[1517,4],[1569,4]]},"504":{"position":[[47,6],[68,5],[218,4],[664,4],[735,4],[868,4],[932,4],[1487,5]]},"509":{"position":[[39,4],[549,4]]},"515":{"position":[[471,4]]},"517":{"position":[[510,4],[3972,4]]},"534":{"position":[[219,4],[1717,4]]},"537":{"position":[[63,5],[185,4]]},"540":{"position":[[39,4],[334,4]]},"545":{"position":[[39,4],[1388,5],[1471,4],[1631,4]]},"546":{"position":[[904,5]]},"547":{"position":[[70,5],[131,6],[282,4],[733,4],[804,4],[1139,5],[1171,6],[1367,5],[1860,5]]},"548":{"position":[[1500,5],[1522,5]]},"556":{"position":[[219,4],[2214,4]]},"564":{"position":[[39,4]]},"565":{"position":[[28,4]]},"573":{"position":[[223,4],[342,4],[1293,4]]},"584":{"position":[[211,4],[1365,4]]},"593":{"position":[[39,4],[357,4]]},"601":{"position":[[39,4],[428,4]]},"611":{"position":[[219,4],[322,4],[1204,4]]},"619":{"position":[[120,4],[297,4],[606,4]]},"625":{"position":[[39,4],[178,4]]},"631":{"position":[[39,4],[509,4]]},"634":{"position":[[127,5],[297,4],[373,5]]},"635":{"position":[[104,6]]},"637":{"position":[[39,4],[948,5],[1031,4],[1167,4]]},"638":{"position":[[196,5]]},"639":{"position":[[46,6],[67,5],[217,4],[662,4],[733,4],[866,4],[930,4],[1485,5]]},"646":{"position":[[392,4],[747,4]]},"649":{"position":[[582,4]]},"654":{"position":[[113,4],[625,4],[829,4]]},"664":{"position":[[28,4]]},"665":{"position":[[28,4]]},"670":{"position":[[39,4],[667,4]]},"679":{"position":[[28,4]]},"680":{"position":[[28,4]]},"685":{"position":[[197,4],[491,4]]},"694":{"position":[[28,4]]},"695":{"position":[[28,4]]},"700":{"position":[[39,4],[319,4]]},"706":{"position":[[39,4],[319,4]]},"709":{"position":[[361,4],[379,4]]},"712":{"position":[[39,4],[514,4]]},"720":{"position":[[219,4],[823,4]]},"728":{"position":[[28,4]]},"735":{"position":[[108,4],[172,4],[243,4],[263,5],[406,4]]},"738":{"position":[[108,4],[163,4],[273,4],[413,6]]},"741":{"position":[[39,4],[496,4]]},"747":{"position":[[39,4],[1378,4]]},"750":{"position":[[1074,4]]},"754":{"position":[[256,4]]},"757":{"position":[[39,4],[570,4],[1928,4]]},"762":{"position":[[262,4]]},"766":{"position":[[1074,4]]},"770":{"position":[[39,4],[570,4],[1928,4]]},"775":{"position":[[262,4]]},"782":{"position":[[39,4],[524,4]]},"789":{"position":[[1475,4]]},"790":{"position":[[63,5]]},"794":{"position":[[129,4]]},"797":{"position":[[39,4],[570,4],[1928,4]]},"802":{"position":[[262,4]]},"807":{"position":[[1062,4]]},"809":{"position":[[129,4]]},"812":{"position":[[39,4],[570,4],[1928,4]]},"817":{"position":[[262,4]]},"823":{"position":[[1062,4]]},"825":{"position":[[129,4]]},"828":{"position":[[39,4],[570,4],[1928,4]]},"833":{"position":[[262,4]]},"842":{"position":[[39,4],[605,4],[1055,4],[1303,4],[1901,4]]},"846":{"position":[[182,5]]},"847":{"position":[[267,5]]},"851":{"position":[[39,4],[599,4]]},"856":{"position":[[122,4]]},"859":{"position":[[219,4],[357,4],[746,4]]},"867":{"position":[[39,4],[2125,4]]},"879":{"position":[[39,4],[1548,4]]},"885":{"position":[[39,4],[620,4]]},"891":{"position":[[39,4],[355,4]]},"897":{"position":[[39,4],[273,4]]},"907":{"position":[[39,4],[1428,4]]},"916":{"position":[[63,5]]},"923":{"position":[[39,4],[1428,4]]},"934":{"position":[[39,4],[1428,4]]},"943":{"position":[[1132,5]]},"950":{"position":[[39,4],[1428,4]]},"959":{"position":[[39,4],[375,4]]},"968":{"position":[[39,4],[1428,4]]},"974":{"position":[[258,5]]},"982":{"position":[[39,4],[377,4]]},"991":{"position":[[229,4],[800,4]]},"997":{"position":[[39,4],[345,4]]},"1008":{"position":[[1657,5],[1713,5]]},"1009":{"position":[[229,4],[316,4],[1539,4]]},"1015":{"position":[[39,4],[433,4]]},"1021":{"position":[[312,4],[1945,5],[2047,4]]},"1022":{"position":[[233,5]]},"1023":{"position":[[50,5],[111,6],[262,4],[713,4],[784,4],[1120,5],[1152,6],[1348,5],[1841,5]]},"1028":{"position":[[39,4],[380,4]]},"1034":{"position":[[28,4]]},"1035":{"position":[[28,4]]},"1041":{"position":[[63,5]]},"1045":{"position":[[39,4],[1047,4]]},"1047":{"position":[[836,5]]},"1050":{"position":[[978,5]]},"1053":{"position":[[39,4],[1047,4]]},"1055":{"position":[[836,5]]},"1061":{"position":[[39,4],[1047,4]]},"1063":{"position":[[836,5]]},"1070":{"position":[[219,4],[1003,4]]},"1076":{"position":[[39,4],[786,4]]},"1085":{"position":[[275,4],[407,4],[1377,4]]},"1094":{"position":[[39,4],[442,4]]},"1101":{"position":[[39,4],[276,4]]},"1107":{"position":[[39,4],[414,4]]},"1113":{"position":[[39,4],[476,4]]},"1123":{"position":[[593,5]]},"1125":{"position":[[39,4],[522,4]]},"1133":{"position":[[39,4],[104,4],[1210,4]]},"1138":{"position":[[256,4],[1311,4]]},"1144":{"position":[[39,4],[1274,4]]},"1151":{"position":[[39,4],[1345,4]]},"1162":{"position":[[39,4],[778,4]]},"1164":{"position":[[79,4],[119,4],[201,4],[572,6],[605,6],[747,5]]},"1170":{"position":[[39,4],[1199,4]]},"1172":{"position":[[71,4],[118,5],[141,4],[173,5],[202,4],[236,5],[265,4],[283,4]]},"1179":{"position":[[39,4],[1009,4]]},"1188":{"position":[[39,4],[552,5],[728,4]]},"1196":{"position":[[39,4],[886,4]]},"1199":{"position":[[176,5]]},"1200":{"position":[[24,5],[238,5]]},"1206":{"position":[[39,4],[850,4],[1055,4],[1060,4]]},"1213":{"position":[[39,4],[951,4]]},"1220":{"position":[[39,4],[876,4]]},"1222":{"position":[[71,4],[118,5],[141,4],[173,5],[202,4],[236,5],[265,4],[283,4]]},"1230":{"position":[[39,4],[226,4],[829,4]]},"1239":{"position":[[28,4]]},"1240":{"position":[[28,4]]},"1241":{"position":[[237,5]]},"1247":{"position":[[210,4],[397,4],[1047,4]]},"1253":{"position":[[39,4],[439,4]]},"1260":{"position":[[39,4],[893,4]]},"1267":{"position":[[28,4]]},"1269":{"position":[[28,4]]},"1275":{"position":[[166,4],[288,4]]},"1277":{"position":[[39,4],[1021,4]]},"1282":{"position":[[63,5]]},"1285":{"position":[[39,4]]},"1286":{"position":[[2522,4]]},"1292":{"position":[[6603,4],[6626,5]]},"1300":{"position":[[39,4]]},"1301":{"position":[[2358,4]]},"1306":{"position":[[6603,4],[6626,5]]},"1310":{"position":[[63,5]]},"1313":{"position":[[39,4],[855,4]]},"1317":{"position":[[435,6],[738,5],[852,6]]},"1324":{"position":[[39,4]]},"1325":{"position":[[2522,4]]},"1329":{"position":[[6603,4],[6626,5]]},"1337":{"position":[[39,4],[855,4]]},"1341":{"position":[[435,6],[738,5],[852,6]]},"1348":{"position":[[39,4],[855,4]]},"1352":{"position":[[435,6],[738,5],[852,6]]},"1356":{"position":[[39,4],[906,4]]},"1362":{"position":[[201,4],[492,4]]},"1367":{"position":[[39,4]]},"1376":{"position":[[39,4],[437,4]]},"1386":{"position":[[39,4],[802,4],[1131,4]]},"1393":{"position":[[34,5]]},"1400":{"position":[[39,4],[437,4]]},"1407":{"position":[[63,5]]},"1411":{"position":[[39,4],[437,4]]},"1420":{"position":[[39,4],[678,4]]},"1427":{"position":[[39,4],[582,4]]},"1432":{"position":[[435,6],[752,5],[880,6]]},"1434":{"position":[[50,5]]},"1461":{"position":[[2046,4]]},"1463":{"position":[[301,5],[361,5]]},"1464":{"position":[[157,5],[217,5],[264,4],[332,5]]},"1465":{"position":[[480,5],[512,5],[536,5]]},"1466":{"position":[[116,5],[176,5],[220,5],[313,5]]},"1467":{"position":[[459,5],[519,5],[565,5],[656,5],[781,5],[842,5],[2130,5],[2190,5],[2212,5]]},"1470":{"position":[[942,5]]},"1473":{"position":[[196,4]]},"1474":{"position":[[367,4],[449,4],[624,4]]},"1475":{"position":[[309,4]]},"1476":{"position":[[167,5],[227,5],[874,5],[1233,5],[1293,5],[1336,5],[1357,5],[1372,5]]},"1477":{"position":[[937,5],[997,5],[1063,5],[1261,5],[1296,5],[2970,5],[2990,4],[3159,5],[3219,5],[3285,5],[3489,5],[3755,5],[3776,5],[3791,5]]},"1480":{"position":[[275,5],[689,5]]}},"keywords":{}}],["type>/<collect",{"_index":6696,"title":{},"content":{"1475":{"position":[[843,23],[966,23],[1129,23]]}},"keywords":{}}],["type>/{}/bytestot",{"_index":6701,"title":{},"content":{"1475":{"position":[[1296,22]]}},"keywords":{}}],["type>/{}/docstot",{"_index":6700,"title":{},"content":{"1475":{"position":[[1226,21]]}},"keywords":{}}],["type/catalogprefix",{"_index":6588,"title":{},"content":{"1457":{"position":[[28,18]]}},"keywords":{}}],["type/dis",{"_index":3229,"title":{},"content":{"343":{"position":[[28,12]]}},"keywords":{}}],["type/notbefor",{"_index":6728,"title":{},"content":{"1481":{"position":[[28,14]]}},"keywords":{}}],["type/shard",{"_index":6682,"title":{},"content":{"1474":{"position":[[388,10]]}},"keywords":{}}],["type/syncfrequ",{"_index":6524,"title":{},"content":{"1452":{"position":[[271,18]]}},"keywords":{}}],["type/t",{"_index":6691,"title":{},"content":{"1475":{"position":[[330,7]]}},"keywords":{}}],["typearray",{"_index":5767,"title":{},"content":{"1164":{"position":[[221,9]]}},"keywords":{}}],["typeclick",{"_index":3523,"title":{},"content":{"395":{"position":[[296,9]]}},"keywords":{}}],["types.click",{"_index":3698,"title":{},"content":{"436":{"position":[[432,11]]}},"keywords":{}}],["typescript",{"_index":619,"title":{"64":{"position":[[0,10]]},"102":{"position":[[0,11]]},"269":{"position":[[6,10]]},"293":{"position":[[28,12]]},"311":{"position":[[28,10]]}},"content":{"26":{"position":[[633,10]]},"50":{"position":[[87,10],[239,10]]},"63":{"position":[[431,10],[470,10]]},"64":{"position":[[1,10],[252,10],[676,10],[908,10]]},"91":{"position":[[94,10],[219,10],[418,10]]},"94":{"position":[[332,12],[755,10],[802,11],[816,10],[876,10],[2404,10],[2492,10]]},"95":{"position":[[320,11]]},"102":{"position":[[8,10],[99,10],[137,10],[273,10],[337,10],[464,10]]},"103":{"position":[[15,10],[80,10]]},"104":{"position":[[322,10]]},"112":{"position":[[386,10]]},"158":{"position":[[631,10]]},"267":{"position":[[486,11],[590,10],[1657,10],[1752,10]]},"269":{"position":[[14,10],[179,10],[545,11],[997,10],[1065,10]]},"270":{"position":[[1552,10],[1627,10]]},"271":{"position":[[309,10]]},"281":{"position":[[30,10],[474,11],[487,10],[771,10],[954,11],[1146,10],[1674,10],[2372,10],[2424,10]]},"294":{"position":[[79,11]]},"296":{"position":[[692,11],[2693,11],[3011,10],[3911,10],[3953,10]]},"297":{"position":[[42,10]]},"312":{"position":[[79,11]]},"314":{"position":[[296,11],[400,11],[679,11],[2255,11],[2439,10],[3046,11]]},"315":{"position":[[45,10],[368,10],[1011,11],[1521,11]]},"316":{"position":[[238,10]]},"317":{"position":[[61,10]]},"332":{"position":[[623,10]]},"1461":{"position":[[375,10]]}},"keywords":{}}],["typescript.t",{"_index":3076,"title":{},"content":{"315":{"position":[[444,13],[823,13],[1425,15]]}},"keywords":{}}],["typescript/customers_with_ord",{"_index":2994,"title":{},"content":{"296":{"position":[[264,33],[1235,33],[5403,33],[6055,33]]}},"keywords":{}}],["typescript/customers_with_orders.t",{"_index":3015,"title":{},"content":{"296":{"position":[[5313,37],[5965,37]]}},"keywords":{}}],["typesissu",{"_index":4470,"title":{},"content":{"709":{"position":[[211,10]]}},"keywords":{}}],["typesmetadatatemplatesuserspushsendpushsendskippushopenpushuninstallpushbouncewebpushsendwebpushclickwebpushsendskipinappsendinappopeninappclickinappcloseinappdeleteinappdeliveryinappsendskipinboxsessioninboxmessageimpressionsmssendsmsbouncesmsclicksmsreceivedsmssendskipsmsusageinfopurchasecustomeventhostedunsubscribeclick",{"_index":4459,"title":{},"content":{"697":{"position":[[239,324]]}},"keywords":{}}],["typesproject",{"_index":4486,"title":{},"content":{"709":{"position":[[577,12]]}},"keywords":{}}],["typic",{"_index":108,"title":{},"content":{"3":{"position":[[216,9]]},"63":{"position":[[147,9]]},"82":{"position":[[3477,9]]},"89":{"position":[[391,9]]},"115":{"position":[[703,9]]},"122":{"position":[[815,9]]},"125":{"position":[[357,9]]},"154":{"position":[[1405,9]]},"157":{"position":[[195,9],[329,9]]},"162":{"position":[[1335,9]]},"201":{"position":[[143,9]]},"266":{"position":[[146,10]]},"309":{"position":[[916,9]]},"320":{"position":[[1039,9]]},"322":{"position":[[320,9],[1057,9]]},"323":{"position":[[107,9]]},"364":{"position":[[273,10]]},"370":{"position":[[704,9]]},"377":{"position":[[130,9]]},"417":{"position":[[113,9]]},"438":{"position":[[113,9]]},"477":{"position":[[698,9]]},"502":{"position":[[573,9]]},"545":{"position":[[113,9]]},"593":{"position":[[247,9]]},"598":{"position":[[662,9]]},"660":{"position":[[21,9],[266,9]]},"842":{"position":[[2734,9]]},"907":{"position":[[487,9]]},"923":{"position":[[487,9]]},"934":{"position":[[487,9]]},"950":{"position":[[487,9]]},"968":{"position":[[487,9]]},"1009":{"position":[[1636,9]]},"1021":{"position":[[1135,9]]},"1034":{"position":[[714,9]]},"1045":{"position":[[472,9]]},"1053":{"position":[[472,9]]},"1061":{"position":[[472,9]]},"1179":{"position":[[814,10]]},"1277":{"position":[[743,9]]},"1285":{"position":[[818,9]]},"1300":{"position":[[818,9]]},"1313":{"position":[[672,9]]},"1324":{"position":[[818,9]]},"1337":{"position":[[672,9]]},"1348":{"position":[[672,9]]},"1437":{"position":[[266,9]]},"1472":{"position":[[83,9]]}},"keywords":{}}],["u",{"_index":2296,"title":{},"content":{"210":{"position":[[1192,3]]},"236":{"position":[[955,1]]},"238":{"position":[[898,1]]},"1459":{"position":[[1320,1]]}},"keywords":{}}],["ua",{"_index":4142,"title":{"567":{"position":[[17,2]]}},"content":{},"keywords":{}}],["ua:dev",{"_index":3342,"title":{},"content":{"364":{"position":[[1621,6]]}},"keywords":{}}],["uescap",{"_index":5610,"title":{},"content":{"1140":{"position":[[2118,7]]},"1316":{"position":[[2118,7]]},"1340":{"position":[[2118,7]]},"1351":{"position":[[2118,7]]},"1379":{"position":[[3983,7]]},"1403":{"position":[[3983,7]]},"1414":{"position":[[3983,7]]},"1423":{"position":[[597,7]]},"1431":{"position":[[2141,7]]}},"keywords":{}}],["ui",{"_index":2240,"title":{},"content":{"207":{"position":[[743,3],[1570,3]]},"210":{"position":[[1744,2],[3956,2]]},"240":{"position":[[2893,3],[4675,2]]},"242":{"position":[[898,3]]},"255":{"position":[[1250,2]]},"316":{"position":[[1575,2]]},"329":{"position":[[1024,2]]},"486":{"position":[[104,2],[216,3]]},"488":{"position":[[552,3]]},"502":{"position":[[491,3]]},"658":{"position":[[104,2],[216,3]]},"659":{"position":[[709,3]]},"674":{"position":[[104,2],[216,3]]},"676":{"position":[[552,3]]},"689":{"position":[[104,2],[216,3]]},"691":{"position":[[552,3]]},"909":{"position":[[819,2]]},"925":{"position":[[819,2]]},"936":{"position":[[819,2]]},"947":{"position":[[25,3]]},"952":{"position":[[819,2]]},"970":{"position":[[819,2]]},"1183":{"position":[[697,2]]}},"keywords":{}}],["ultim",{"_index":4010,"title":{},"content":{"521":{"position":[[223,8],[300,8]]},"1438":{"position":[[556,10]]}},"keywords":{}}],["unabl",{"_index":1793,"title":{},"content":{"138":{"position":[[1611,6]]},"141":{"position":[[1616,6]]},"142":{"position":[[1628,6]]},"754":{"position":[[1035,6]]},"794":{"position":[[1239,6]]},"809":{"position":[[1239,6]]},"825":{"position":[[1075,6]]},"922":{"position":[[1446,6]]},"1286":{"position":[[1300,6]]},"1301":{"position":[[1136,6]]},"1325":{"position":[[1300,6]]},"1449":{"position":[[101,6]]}},"keywords":{}}],["unaccept",{"_index":3060,"title":{},"content":{"309":{"position":[[1506,12],[1806,12]]}},"keywords":{}}],["unalt",{"_index":2259,"title":{},"content":{"208":{"position":[[1873,10]]}},"keywords":{}}],["unambigu",{"_index":1092,"title":{},"content":{"75":{"position":[[70,13]]}},"keywords":{}}],["unattend",{"_index":4272,"title":{},"content":{"595":{"position":[[1387,10]]}},"keywords":{}}],["unbound",{"_index":3138,"title":{},"content":{"321":{"position":[[850,9]]},"922":{"position":[[1536,9],[2186,9]]},"1243":{"position":[[522,9]]},"1292":{"position":[[6664,9]]},"1306":{"position":[[6664,9]]},"1329":{"position":[[6664,9]]},"1370":{"position":[[1177,9]]}},"keywords":{}}],["unchang",{"_index":5012,"title":{},"content":{"909":{"position":[[494,10]]},"925":{"position":[[494,10]]},"936":{"position":[[494,10]]},"952":{"position":[[494,10]]},"970":{"position":[[494,10]]}},"keywords":{}}],["uncommit",{"_index":1028,"title":{},"content":{"68":{"position":[[816,12],[906,12],[1363,11]]},"253":{"position":[[928,11]]},"295":{"position":[[1897,11]]},"313":{"position":[[928,11]]},"922":{"position":[[640,11]]},"1292":{"position":[[6696,11]]},"1306":{"position":[[6696,11]]},"1329":{"position":[[6696,11]]},"1471":{"position":[[355,11],[380,11],[595,12]]}},"keywords":{}}],["uncommon",{"_index":4365,"title":{},"content":{"637":{"position":[[451,9]]},"640":{"position":[[108,9]]}},"keywords":{}}],["uncov",{"_index":2323,"title":{},"content":{"210":{"position":[[2252,7]]}},"keywords":{}}],["undefin",{"_index":6241,"title":{},"content":{"1292":{"position":[[6734,9]]},"1306":{"position":[[6734,9]]},"1329":{"position":[[6734,9]]}},"keywords":{}}],["under",{"_index":198,"title":{},"content":{"6":{"position":[[56,5]]},"8":{"position":[[57,5]]},"61":{"position":[[712,5]]},"103":{"position":[[497,5],[564,5],[594,5]]},"105":{"position":[[1240,5]]},"112":{"position":[[644,5]]},"129":{"position":[[186,5]]},"160":{"position":[[194,5]]},"175":{"position":[[31,5]]},"228":{"position":[[229,5]]},"230":{"position":[[1012,5]]},"296":{"position":[[4239,5]]},"306":{"position":[[720,5]]},"313":{"position":[[3654,5]]},"315":{"position":[[718,5]]},"319":{"position":[[207,5],[916,5]]},"326":{"position":[[588,5]]},"338":{"position":[[229,5]]},"417":{"position":[[1187,5]]},"436":{"position":[[885,5]]},"438":{"position":[[1703,5]]},"460":{"position":[[467,5]]},"487":{"position":[[637,5]]},"488":{"position":[[941,5]]},"502":{"position":[[225,5]]},"531":{"position":[[162,5],[354,5]]},"532":{"position":[[289,5]]},"545":{"position":[[796,5]]},"552":{"position":[[328,5]]},"659":{"position":[[1098,5]]},"675":{"position":[[99,5]]},"676":{"position":[[941,5]]},"691":{"position":[[941,5]]},"726":{"position":[[270,5]]},"753":{"position":[[1545,5],[1577,5]]},"793":{"position":[[1568,5],[1600,5]]},"808":{"position":[[1536,5]]},"840":{"position":[[2038,5],[2100,5],[2165,5]]},"849":{"position":[[3178,5],[3240,5],[3305,5]]},"904":{"position":[[2250,5]]},"917":{"position":[[1759,5]]},"918":{"position":[[2542,5]]},"919":{"position":[[2475,5],[2507,5]]},"931":{"position":[[1912,5],[2015,5]]},"945":{"position":[[404,5]]},"964":{"position":[[719,5]]},"965":{"position":[[1759,5]]},"1043":{"position":[[1839,5]]},"1059":{"position":[[1862,5]]},"1083":{"position":[[203,5]]},"1186":{"position":[[249,5]]},"1289":{"position":[[1695,5]]},"1303":{"position":[[1658,5]]},"1310":{"position":[[1016,5]]},"1379":{"position":[[4031,5]]},"1397":{"position":[[1097,5]]},"1398":{"position":[[1100,5]]},"1403":{"position":[[4031,5]]},"1409":{"position":[[1112,5]]},"1414":{"position":[[4031,5]]},"1455":{"position":[[132,5]]},"1461":{"position":[[2376,5]]},"1479":{"position":[[90,5]]}},"keywords":{}}],["undergo",{"_index":2254,"title":{},"content":{"208":{"position":[[1346,9],[1499,9]]}},"keywords":{}}],["underli",{"_index":1080,"title":{},"content":{"74":{"position":[[326,10]]},"197":{"position":[[314,10]]},"207":{"position":[[817,10]]}},"keywords":{}}],["understand",{"_index":116,"title":{"197":{"position":[[0,13]]}},"content":{"3":{"position":[[333,10],[1148,10]]},"4":{"position":[[322,10]]},"47":{"position":[[94,13]]},"82":{"position":[[4959,11]]},"219":{"position":[[124,10]]},"277":{"position":[[150,13]]},"288":{"position":[[29,13]]},"299":{"position":[[29,13]]},"322":{"position":[[152,13]]},"757":{"position":[[1832,10]]},"762":{"position":[[152,11]]},"764":{"position":[[1095,10]]},"770":{"position":[[1832,10]]},"775":{"position":[[152,11]]},"777":{"position":[[1095,10]]},"797":{"position":[[1832,10]]},"802":{"position":[[152,11]]},"804":{"position":[[1093,10]]},"812":{"position":[[1832,10]]},"817":{"position":[[152,11]]},"819":{"position":[[1093,10]]},"828":{"position":[[1832,10]]},"833":{"position":[[152,11]]},"835":{"position":[[1093,10]]},"1459":{"position":[[375,10]]}},"keywords":{}}],["understood",{"_index":6589,"title":{},"content":{"1459":{"position":[[162,10]]}},"keywords":{}}],["underway",{"_index":6464,"title":{},"content":{"1434":{"position":[[2056,9]]}},"keywords":{}}],["undo",{"_index":6244,"title":{},"content":{"1292":{"position":[[6786,4]]},"1306":{"position":[[6786,4]]},"1329":{"position":[[6786,4]]}},"keywords":{}}],["undo_buffer_",{"_index":6220,"title":{},"content":{"1292":{"position":[[6133,13]]},"1306":{"position":[[6133,13]]},"1329":{"position":[[6133,13]]}},"keywords":{}}],["undofil",{"_index":6247,"title":{},"content":{"1292":{"position":[[6822,8]]},"1306":{"position":[[6822,8]]},"1329":{"position":[[6822,8]]}},"keywords":{}}],["unencrypt",{"_index":5929,"title":{},"content":{"1268":{"position":[[165,11]]},"1286":{"position":[[1668,11]]},"1301":{"position":[[1504,11]]},"1325":{"position":[[1668,11]]}},"keywords":{}}],["unexpect",{"_index":2336,"title":{},"content":{"210":{"position":[[2514,10]]},"759":{"position":[[84,10]]},"772":{"position":[[95,10]]},"799":{"position":[[82,10]]},"814":{"position":[[82,10]]},"830":{"position":[[82,10]]},"909":{"position":[[623,10],[1063,10]]},"925":{"position":[[623,10],[1063,10]]},"936":{"position":[[623,10],[1063,10]]},"952":{"position":[[623,10],[1063,10]]},"970":{"position":[[623,10],[1063,10]]}},"keywords":{}}],["unfortun",{"_index":5127,"title":{},"content":{"964":{"position":[[155,13]]}},"keywords":{}}],["unhandl",{"_index":4644,"title":{"762":{"position":[[0,9]]},"775":{"position":[[0,9]]},"802":{"position":[[0,9]]},"817":{"position":[[0,9]]},"833":{"position":[[0,9]]}},"content":{},"keywords":{}}],["unicod",{"_index":1341,"title":{},"content":{"94":{"position":[[1160,7]]},"1292":{"position":[[6179,7]]},"1306":{"position":[[6179,7]]},"1329":{"position":[[6179,7]]}},"keywords":{}}],["unifi",{"_index":3105,"title":{},"content":{"319":{"position":[[892,7]]}},"keywords":{}}],["uninstal",{"_index":6224,"title":{},"content":{"1292":{"position":[[6217,9]]},"1306":{"position":[[6217,9]]},"1329":{"position":[[6217,9]]}},"keywords":{}}],["uninterrupt",{"_index":2597,"title":{},"content":{"239":{"position":[[2127,13]]}},"keywords":{}}],["unintuit",{"_index":4815,"title":{},"content":{"847":{"position":[[446,11]]}},"keywords":{}}],["union",{"_index":1856,"title":{},"content":{"156":{"position":[[229,7]]},"1140":{"position":[[2165,5]]},"1209":{"position":[[708,5]]},"1292":{"position":[[6262,5]]},"1306":{"position":[[6262,5]]},"1316":{"position":[[2165,5]]},"1329":{"position":[[6262,5]]},"1340":{"position":[[2165,5]]},"1351":{"position":[[2165,5]]},"1370":{"position":[[1192,5]]},"1379":{"position":[[4087,5]]},"1394":{"position":[[908,5]]},"1403":{"position":[[4087,5]]},"1414":{"position":[[4087,5]]},"1423":{"position":[[631,5]]},"1431":{"position":[[2188,5]]},"1465":{"position":[[599,5]]},"1477":{"position":[[373,5],[526,5]]}},"keywords":{}}],["union)f",{"_index":3478,"title":{},"content":{"385":{"position":[[243,8]]}},"keywords":{}}],["uniqu",{"_index":467,"title":{},"content":{"16":{"position":[[542,6]]},"27":{"position":[[209,7]]},"67":{"position":[[160,6],[587,6],[1429,6]]},"69":{"position":[[174,6]]},"74":{"position":[[998,6]]},"76":{"position":[[514,6]]},"94":{"position":[[104,6],[1109,6]]},"107":{"position":[[741,8]]},"121":{"position":[[1541,6]]},"125":{"position":[[636,6],[815,6]]},"129":{"position":[[166,6]]},"138":{"position":[[661,6]]},"141":{"position":[[795,6]]},"142":{"position":[[608,6]]},"164":{"position":[[1083,6]]},"183":{"position":[[417,6],[2126,6]]},"184":{"position":[[255,6]]},"190":{"position":[[468,7],[732,6]]},"192":{"position":[[370,6]]},"211":{"position":[[346,6]]},"217":{"position":[[815,6]]},"218":{"position":[[334,6]]},"267":{"position":[[792,6]]},"268":{"position":[[1353,6]]},"269":{"position":[[924,6]]},"270":{"position":[[1594,6]]},"274":{"position":[[114,6]]},"290":{"position":[[623,6]]},"291":{"position":[[258,6]]},"301":{"position":[[563,6]]},"302":{"position":[[258,6]]},"320":{"position":[[1220,6]]},"328":{"position":[[7,6]]},"331":{"position":[[467,8]]},"333":{"position":[[299,6]]},"338":{"position":[[237,6]]},"377":{"position":[[1733,6]]},"454":{"position":[[183,6]]},"482":{"position":[[561,8]]},"485":{"position":[[447,6]]},"487":{"position":[[407,6],[443,6]]},"488":{"position":[[328,6],[817,6]]},"565":{"position":[[66,6]]},"574":{"position":[[553,6],[578,6]]},"657":{"position":[[447,6]]},"659":{"position":[[485,6],[974,6]]},"660":{"position":[[355,6]]},"661":{"position":[[384,8]]},"673":{"position":[[447,6]]},"675":{"position":[[131,6]]},"676":{"position":[[328,6],[817,6]]},"688":{"position":[[447,6]]},"691":{"position":[[328,6],[817,6]]},"728":{"position":[[87,6]]},"757":{"position":[[1242,6],[1311,7]]},"767":{"position":[[896,6]]},"770":{"position":[[1242,6],[1311,7]]},"792":{"position":[[1190,6]]},"797":{"position":[[1242,6],[1311,7]]},"812":{"position":[[1242,6],[1311,7]]},"824":{"position":[[965,6]]},"828":{"position":[[1242,6],[1311,7]]},"842":{"position":[[2343,7]]},"867":{"position":[[1950,6],[2019,7]]},"904":{"position":[[963,6]]},"918":{"position":[[1166,6]]},"945":{"position":[[833,6]]},"1140":{"position":[[2199,6]]},"1155":{"position":[[369,6],[475,6]]},"1182":{"position":[[299,6]]},"1191":{"position":[[301,6]]},"1232":{"position":[[374,6]]},"1243":{"position":[[430,6]]},"1262":{"position":[[301,6]]},"1292":{"position":[[6297,6]]},"1306":{"position":[[6297,6]]},"1316":{"position":[[2199,6]]},"1329":{"position":[[6297,6]]},"1340":{"position":[[2199,6]]},"1351":{"position":[[2199,6]]},"1370":{"position":[[1204,6]]},"1379":{"position":[[4128,6]]},"1389":{"position":[[300,6]]},"1394":{"position":[[933,6]]},"1403":{"position":[[4128,6]]},"1414":{"position":[[4128,6]]},"1431":{"position":[[2222,6]]},"1439":{"position":[[520,6],[838,6]]},"1462":{"position":[[57,6],[194,6]]},"1474":{"position":[[104,8]]}},"keywords":{}}],["unit",{"_index":778,"title":{},"content":{"49":{"position":[[21,4]]},"66":{"position":[[290,5]]},"189":{"position":[[36,6]]},"321":{"position":[[1597,4],[1808,4],[1928,4]]},"397":{"position":[[979,5]]},"870":{"position":[[417,4],[947,5]]},"1449":{"position":[[342,5]]}},"keywords":{}}],["uniti",{"_index":5804,"title":{},"content":{"1185":{"position":[[76,5]]},"1188":{"position":[[332,5]]}},"keywords":{}}],["univers",{"_index":3341,"title":{},"content":{"364":{"position":[[1538,9]]},"606":{"position":[[426,9]]},"1459":{"position":[[150,11]]}},"keywords":{}}],["unknown",{"_index":3009,"title":{},"content":{"296":{"position":[[4670,10]]},"1140":{"position":[[2239,7]]},"1292":{"position":[[6329,7]]},"1306":{"position":[[6329,7]]},"1316":{"position":[[2239,7]]},"1329":{"position":[[6329,7]]},"1340":{"position":[[2239,7]]},"1351":{"position":[[2239,7]]},"1379":{"position":[[4178,7]]},"1403":{"position":[[4178,7]]},"1414":{"position":[[4178,7]]},"1431":{"position":[[2262,7]]}},"keywords":{}}],["unknown_char",{"_index":5873,"title":{},"content":{"1209":{"position":[[727,12]]}},"keywords":{}}],["unless",{"_index":1709,"title":{},"content":{"125":{"position":[[1473,6]]},"236":{"position":[[689,6],[1188,6]]},"237":{"position":[[2769,6]]},"379":{"position":[[936,6]]},"417":{"position":[[811,6],[1002,6]]},"448":{"position":[[1138,6]]},"517":{"position":[[3344,6],[3643,6]]},"571":{"position":[[472,7]]},"581":{"position":[[149,7]]},"584":{"position":[[1127,6]]},"617":{"position":[[394,7]]},"1031":{"position":[[335,6]]},"1123":{"position":[[262,6]]},"1138":{"position":[[594,7],[1788,6]]},"1151":{"position":[[579,7]]},"1155":{"position":[[231,6]]},"1162":{"position":[[507,7]]},"1179":{"position":[[406,7]]},"1230":{"position":[[753,6]]},"1245":{"position":[[346,7]]},"1260":{"position":[[293,7]]},"1286":{"position":[[2623,6]]},"1301":{"position":[[2459,6]]},"1313":{"position":[[404,7],[1332,6]]},"1325":{"position":[[2623,6]]},"1337":{"position":[[404,7],[1332,6]]},"1348":{"position":[[404,7],[1332,6]]},"1367":{"position":[[140,6]]},"1376":{"position":[[538,6]]},"1386":{"position":[[377,7]]},"1393":{"position":[[123,6]]},"1400":{"position":[[538,6]]},"1411":{"position":[[538,6]]},"1427":{"position":[[345,7],[1092,6]]},"1447":{"position":[[342,6]]},"1449":{"position":[[440,6]]}},"keywords":{}}],["unlik",{"_index":671,"title":{},"content":{"34":{"position":[[321,6]]},"77":{"position":[[339,6]]},"198":{"position":[[97,6]]},"301":{"position":[[1268,8]]},"319":{"position":[[811,6]]},"321":{"position":[[788,6]]},"326":{"position":[[1388,6]]},"1440":{"position":[[1201,6]]}},"keywords":{}}],["unlimit",{"_index":3443,"title":{},"content":{"375":{"position":[[117,9]]},"871":{"position":[[187,9]]},"922":{"position":[[2111,11]]}},"keywords":{}}],["unlock",{"_index":713,"title":{},"content":{"39":{"position":[[97,6]]},"47":{"position":[[69,7]]},"1292":{"position":[[6375,6]]},"1306":{"position":[[6375,6]]},"1329":{"position":[[6375,6]]}},"keywords":{}}],["unmatch",{"_index":5618,"title":{},"content":{"1140":{"position":[[2277,9]]},"1316":{"position":[[2277,9]]},"1340":{"position":[[2277,9]]},"1351":{"position":[[2277,9]]},"1431":{"position":[[2300,9]]}},"keywords":{}}],["unmerg",{"_index":5869,"title":{},"content":{"1208":{"position":[[185,8]]}},"keywords":{}}],["unnest",{"_index":5622,"title":{},"content":{"1140":{"position":[[2324,6]]},"1209":{"position":[[767,6]]},"1316":{"position":[[2324,6]]},"1340":{"position":[[2324,6]]},"1351":{"position":[[2324,6]]},"1379":{"position":[[4229,6]]},"1403":{"position":[[4229,6]]},"1414":{"position":[[4229,6]]},"1423":{"position":[[662,6]]},"1431":{"position":[[2347,6]]}},"keywords":{}}],["unpivot",{"_index":6346,"title":{},"content":{"1379":{"position":[[4283,7]]},"1403":{"position":[[4283,7]]},"1414":{"position":[[4283,7]]}},"keywords":{}}],["unpublish",{"_index":2812,"title":{},"content":{"273":{"position":[[130,11]]}},"keywords":{}}],["unravel",{"_index":2328,"title":{},"content":{"210":{"position":[[2314,7]]}},"keywords":{}}],["unreach",{"_index":4658,"title":{},"content":{"764":{"position":[[271,11]]},"777":{"position":[[271,11]]},"804":{"position":[[269,11]]},"819":{"position":[[269,11]]},"835":{"position":[[269,11]]}},"keywords":{}}],["unrecover",{"_index":1784,"title":{},"content":{"138":{"position":[[1451,13]]},"141":{"position":[[1453,13]]},"142":{"position":[[1460,13]]},"750":{"position":[[340,13]]},"764":{"position":[[210,13]]},"766":{"position":[[340,13]]},"777":{"position":[[210,13]]},"789":{"position":[[374,13]]},"804":{"position":[[208,13]]},"807":{"position":[[374,13]]},"819":{"position":[[208,13]]},"823":{"position":[[374,13]]},"835":{"position":[[208,13]]}},"keywords":{}}],["unregist",{"_index":6228,"title":{},"content":{"1292":{"position":[[6420,10]]},"1306":{"position":[[6420,10]]},"1329":{"position":[[6420,10]]}},"keywords":{}}],["unset",{"_index":2606,"title":{},"content":{"240":{"position":[[3050,6]]},"491":{"position":[[190,6]]},"664":{"position":[[211,6]]},"679":{"position":[[190,6]]},"694":{"position":[[190,6]]},"757":{"position":[[1322,5]]},"770":{"position":[[1322,5]]},"797":{"position":[[1322,5]]},"812":{"position":[[1322,5]]},"828":{"position":[[1322,5]]},"867":{"position":[[2030,5]]},"1452":{"position":[[562,6],[1553,6]]}},"keywords":{}}],["unsign",{"_index":6230,"title":{},"content":{"1292":{"position":[[6465,8]]},"1306":{"position":[[6465,8]]},"1329":{"position":[[6465,8]]}},"keywords":{}}],["unstructur",{"_index":344,"title":{},"content":{"11":{"position":[[1580,12]]},"157":{"position":[[300,12]]},"165":{"position":[[456,12]]}},"keywords":{}}],["unsubscribeeventslistslist",{"_index":4457,"title":{},"content":{"697":{"position":[[199,26]]}},"keywords":{}}],["unsupport",{"_index":4628,"title":{"760":{"position":[[0,11]]},"773":{"position":[[0,11]]},"800":{"position":[[0,11]]},"815":{"position":[[0,11]]},"831":{"position":[[0,11]]}},"content":{"762":{"position":[[320,11],[346,11]]},"775":{"position":[[320,11],[346,11]]},"802":{"position":[[320,11],[346,11]]},"817":{"position":[[320,11],[346,11]]},"833":{"position":[[320,11],[346,11]]}},"keywords":{}}],["unsur",{"_index":1435,"title":{},"content":{"99":{"position":[[729,6]]},"217":{"position":[[1643,6]]},"417":{"position":[[2133,6]]},"595":{"position":[[1851,6]]}},"keywords":{}}],["unterminated_str",{"_index":5877,"title":{},"content":{"1209":{"position":[[793,19]]}},"keywords":{}}],["until",{"_index":520,"title":{},"content":{"19":{"position":[[319,5],[434,5]]},"110":{"position":[[103,5],[236,5]]},"165":{"position":[[836,5]]},"207":{"position":[[1539,5]]},"209":{"position":[[965,5]]},"240":{"position":[[4923,5]]},"275":{"position":[[1156,5]]},"292":{"position":[[61,5]]},"303":{"position":[[61,5]]},"373":{"position":[[773,5]]},"517":{"position":[[1442,5],[2625,5]]},"762":{"position":[[416,5]]},"775":{"position":[[416,5]]},"802":{"position":[[416,5]]},"817":{"position":[[416,5]]},"833":{"position":[[416,5]]},"870":{"position":[[831,5]]},"922":{"position":[[3044,5]]},"1085":{"position":[[722,5]]},"1292":{"position":[[6512,5]]},"1306":{"position":[[6512,5]]},"1329":{"position":[[6512,5]]},"1442":{"position":[[570,5]]},"1459":{"position":[[1051,5]]}},"keywords":{}}],["untouch",{"_index":419,"title":{},"content":{"13":{"position":[[1927,10]]}},"keywords":{}}],["unus",{"_index":5106,"title":{},"content":{"945":{"position":[[1076,6]]}},"keywords":{}}],["unusu",{"_index":3614,"title":{},"content":{"419":{"position":[[1581,7]]},"441":{"position":[[190,7]]},"504":{"position":[[1210,7]]},"547":{"position":[[1583,7]]},"639":{"position":[[1208,7]]},"1023":{"position":[[1564,7]]}},"keywords":{}}],["unwieldi",{"_index":2059,"title":{},"content":{"182":{"position":[[269,8]]}},"keywords":{}}],["up",{"_index":445,"title":{"200":{"position":[[8,2]]},"205":{"position":[[8,2]]},"211":{"position":[[9,3]]},"235":{"position":[[12,2]]},"239":{"position":[[12,2]]},"240":{"position":[[12,2]]},"242":{"position":[[6,3]]},"250":{"position":[[7,2]]},"253":{"position":[[8,2]]},"256":{"position":[[9,3]]},"295":{"position":[[8,2]]},"297":{"position":[[9,3]]},"313":{"position":[[8,2]]},"317":{"position":[[9,3]]},"349":{"position":[[4,2]]},"479":{"position":[[4,2]]},"1091":{"position":[[4,2]]},"1092":{"position":[[4,2]]}},"content":{"14":{"position":[[1167,2]]},"27":{"position":[[595,2]]},"34":{"position":[[250,2]]},"36":{"position":[[343,2]]},"45":{"position":[[123,2]]},"55":{"position":[[949,2]]},"66":{"position":[[688,2]]},"83":{"position":[[638,2]]},"115":{"position":[[500,2]]},"121":{"position":[[498,3]]},"122":{"position":[[144,2]]},"123":{"position":[[387,2]]},"125":{"position":[[1139,2]]},"154":{"position":[[413,2]]},"164":{"position":[[1580,2]]},"165":{"position":[[245,2],[873,2]]},"173":{"position":[[1118,3]]},"179":{"position":[[478,2]]},"181":{"position":[[86,3]]},"192":{"position":[[622,2]]},"196":{"position":[[301,2]]},"199":{"position":[[114,2]]},"202":{"position":[[397,2]]},"204":{"position":[[761,2]]},"206":{"position":[[379,2],[966,3]]},"207":{"position":[[763,2]]},"208":{"position":[[287,2]]},"209":{"position":[[230,2],[979,2]]},"210":{"position":[[1909,2]]},"211":{"position":[[27,2]]},"218":{"position":[[1432,2]]},"223":{"position":[[84,2]]},"228":{"position":[[1005,2]]},"232":{"position":[[29,2],[300,2],[916,2]]},"233":{"position":[[308,2]]},"234":{"position":[[168,2]]},"236":{"position":[[1718,2],[1807,3]]},"237":{"position":[[3028,2],[3145,2],[3209,2],[3532,2]]},"238":{"position":[[699,2]]},"239":{"position":[[1772,2]]},"240":{"position":[[49,2],[2254,2],[4866,2]]},"241":{"position":[[45,2]]},"242":{"position":[[44,2],[362,2]]},"253":{"position":[[79,2]]},"254":{"position":[[5,2]]},"259":{"position":[[985,2],[2566,2]]},"267":{"position":[[223,2]]},"277":{"position":[[1345,2]]},"281":{"position":[[174,2],[1847,2]]},"290":{"position":[[1436,2]]},"295":{"position":[[1508,2]]},"296":{"position":[[5,2]]},"301":{"position":[[1532,2]]},"307":{"position":[[3255,2]]},"309":{"position":[[3579,2]]},"313":{"position":[[79,2]]},"314":{"position":[[5,2]]},"322":{"position":[[904,2],[1461,2],[1911,2]]},"323":{"position":[[864,2]]},"325":{"position":[[145,2]]},"326":{"position":[[908,2],[1522,2],[1775,2]]},"333":{"position":[[47,2]]},"338":{"position":[[21,2],[324,2]]},"347":{"position":[[8,2]]},"348":{"position":[[31,2]]},"367":{"position":[[305,2]]},"374":{"position":[[249,2],[340,2]]},"379":{"position":[[521,2]]},"406":{"position":[[27,2]]},"413":{"position":[[437,2]]},"428":{"position":[[151,2]]},"429":{"position":[[841,2]]},"436":{"position":[[717,2]]},"452":{"position":[[8,2]]},"458":{"position":[[8,2]]},"464":{"position":[[95,3]]},"472":{"position":[[408,2]]},"476":{"position":[[31,2]]},"478":{"position":[[653,2]]},"494":{"position":[[75,3]]},"515":{"position":[[539,2]]},"538":{"position":[[8,2]]},"563":{"position":[[13,2],[166,2]]},"574":{"position":[[545,2]]},"578":{"position":[[57,2]]},"582":{"position":[[163,3]]},"590":{"position":[[922,2]]},"599":{"position":[[653,2]]},"609":{"position":[[364,2]]},"623":{"position":[[8,2]]},"629":{"position":[[8,2]]},"642":{"position":[[226,2]]},"690":{"position":[[61,2]]},"698":{"position":[[8,2]]},"704":{"position":[[8,2]]},"745":{"position":[[8,2]]},"747":{"position":[[840,2]]},"750":{"position":[[1357,2]]},"757":{"position":[[2293,2]]},"767":{"position":[[1808,2]]},"770":{"position":[[2293,2]]},"789":{"position":[[1758,2]]},"792":{"position":[[1748,2]]},"797":{"position":[[2300,2]]},"812":{"position":[[2300,2]]},"824":{"position":[[1870,2]]},"828":{"position":[[2300,2]]},"840":{"position":[[110,2],[860,2],[1584,2]]},"849":{"position":[[5,2],[1352,2],[1473,2],[2616,2]]},"863":{"position":[[31,2]]},"875":{"position":[[31,2]]},"894":{"position":[[8,2]]},"895":{"position":[[31,2],[631,2]]},"904":{"position":[[1409,2]]},"915":{"position":[[1214,2]]},"918":{"position":[[1701,2]]},"919":{"position":[[1649,2]]},"922":{"position":[[984,2],[1574,2],[2218,2]]},"931":{"position":[[1066,2]]},"945":{"position":[[623,3]]},"963":{"position":[[1368,2]]},"977":{"position":[[454,2]]},"988":{"position":[[185,2]]},"995":{"position":[[8,2]]},"1003":{"position":[[185,2]]},"1006":{"position":[[121,2]]},"1008":{"position":[[412,2],[1289,2]]},"1032":{"position":[[8,2]]},"1036":{"position":[[1016,2]]},"1039":{"position":[[220,3]]},"1042":{"position":[[1179,2]]},"1049":{"position":[[146,3]]},"1057":{"position":[[149,3]]},"1067":{"position":[[255,3]]},"1089":{"position":[[8,2]]},"1090":{"position":[[31,2]]},"1142":{"position":[[113,2]]},"1149":{"position":[[568,2]]},"1160":{"position":[[113,2],[224,2]]},"1168":{"position":[[113,2]]},"1176":{"position":[[450,2]]},"1203":{"position":[[183,2]]},"1204":{"position":[[111,2]]},"1211":{"position":[[113,2]]},"1218":{"position":[[113,2]]},"1237":{"position":[[122,3]]},"1258":{"position":[[162,2]]},"1283":{"position":[[361,2]]},"1298":{"position":[[84,2]]},"1311":{"position":[[198,2]]},"1346":{"position":[[84,2]]},"1362":{"position":[[122,3]]},"1384":{"position":[[162,2]]},"1392":{"position":[[68,2]]},"1408":{"position":[[452,2]]},"1440":{"position":[[332,2]]},"1451":{"position":[[197,2],[287,2],[539,2],[804,2]]},"1452":{"position":[[391,2],[1816,2],[2760,2]]},"1455":{"position":[[412,2],[448,2]]},"1461":{"position":[[4676,2],[4797,2]]},"1470":{"position":[[154,2]]}},"keywords":{}}],["updat",{"_index":291,"title":{"55":{"position":[[14,6]]},"125":{"position":[[6,8]]},"271":{"position":[[0,8]]},"785":{"position":[[23,8]]},"1158":{"position":[[6,8]]},"1182":{"position":[[6,8]]},"1191":{"position":[[6,8]]},"1199":{"position":[[6,8]]},"1208":{"position":[[6,8]]},"1233":{"position":[[6,8]]},"1256":{"position":[[6,8]]},"1262":{"position":[[6,8]]},"1279":{"position":[[6,8]]},"1290":{"position":[[6,8]]},"1304":{"position":[[6,8]]},"1315":{"position":[[6,8]]},"1327":{"position":[[6,8]]},"1339":{"position":[[6,8]]},"1350":{"position":[[6,8]]},"1358":{"position":[[6,7]]},"1369":{"position":[[6,8]]},"1378":{"position":[[6,8]]},"1389":{"position":[[6,8]]},"1391":{"position":[[36,8]]},"1402":{"position":[[6,8]]},"1413":{"position":[[6,8]]},"1430":{"position":[[6,8]]},"1440":{"position":[[28,8]]},"1448":{"position":[[19,8]]}},"content":{"11":{"position":[[76,8],[1036,7],[1196,6],[1489,6],[1669,6],[2002,6]]},"12":{"position":[[195,6]]},"13":{"position":[[253,6],[465,7],[566,6],[808,7],[1297,7]]},"14":{"position":[[203,7]]},"21":{"position":[[471,7]]},"30":{"position":[[75,6]]},"34":{"position":[[353,7]]},"38":{"position":[[356,7]]},"40":{"position":[[123,7]]},"44":{"position":[[425,7],[550,6]]},"53":{"position":[[316,7],[407,7]]},"54":{"position":[[655,6]]},"55":{"position":[[466,6],[604,7]]},"56":{"position":[[273,7],[338,7]]},"64":{"position":[[979,6]]},"67":{"position":[[1593,7],[1717,8],[2086,7]]},"94":{"position":[[1718,8],[2084,8]]},"97":{"position":[[344,7]]},"105":{"position":[[436,6],[1564,7]]},"108":{"position":[[166,6]]},"110":{"position":[[912,6]]},"112":{"position":[[214,6]]},"113":{"position":[[558,6]]},"114":{"position":[[166,6],[328,6],[369,6],[410,6]]},"120":{"position":[[1270,8],[1636,8]]},"121":{"position":[[142,7],[574,8],[756,7],[1611,7]]},"124":{"position":[[16,7],[531,8]]},"125":{"position":[[182,7],[615,7],[717,7],[748,8],[1041,7],[1338,8],[1353,8],[1460,7]]},"146":{"position":[[423,8],[686,6]]},"149":{"position":[[435,8],[659,6]]},"152":{"position":[[447,8],[662,6]]},"154":{"position":[[201,6]]},"163":{"position":[[669,7]]},"165":{"position":[[87,7],[2119,7],[2223,7]]},"180":{"position":[[151,8]]},"183":{"position":[[2478,6],[4644,8]]},"196":{"position":[[152,8]]},"197":{"position":[[450,8],[913,6],[992,7],[1277,7],[1454,6]]},"208":{"position":[[498,6],[1562,7]]},"210":{"position":[[1196,6],[4008,8]]},"229":{"position":[[725,7]]},"233":{"position":[[152,8]]},"237":{"position":[[1689,7],[2359,7]]},"239":{"position":[[2068,7],[2288,7],[2379,8],[2564,7]]},"240":{"position":[[3110,6],[3340,6],[3624,8],[4774,7]]},"259":{"position":[[256,6],[313,6],[668,7],[1945,6],[2002,6]]},"271":{"position":[[83,6],[285,8],[490,7]]},"275":{"position":[[1026,7]]},"278":{"position":[[633,7]]},"280":{"position":[[2143,6]]},"290":{"position":[[1803,7]]},"291":{"position":[[1224,8]]},"292":{"position":[[81,7]]},"296":{"position":[[5759,6]]},"301":{"position":[[1768,7]]},"302":{"position":[[1170,8]]},"303":{"position":[[81,7]]},"307":{"position":[[379,6],[676,6],[885,6],[1769,6],[2717,6]]},"309":{"position":[[1960,8],[2660,6]]},"315":{"position":[[1763,6]]},"325":{"position":[[325,7]]},"326":{"position":[[708,6]]},"373":{"position":[[921,7]]},"379":{"position":[[844,7],[1035,7],[1113,8],[1180,7]]},"480":{"position":[[276,6],[463,7],[523,6],[924,6],[975,6]]},"540":{"position":[[440,7]]},"578":{"position":[[50,6],[347,8]]},"602":{"position":[[835,8],[985,7]]},"642":{"position":[[164,7]]},"718":{"position":[[337,6]]},"724":{"position":[[406,6]]},"750":{"position":[[853,7]]},"752":{"position":[[809,7]]},"753":{"position":[[1465,7]]},"761":{"position":[[104,7]]},"766":{"position":[[853,7]]},"767":{"position":[[1037,6],[2142,7]]},"774":{"position":[[104,7]]},"786":{"position":[[43,6],[204,7]]},"789":{"position":[[815,7],[1034,7],[1254,7]]},"791":{"position":[[814,7]]},"792":{"position":[[1342,6],[2134,7]]},"793":{"position":[[1488,7]]},"801":{"position":[[104,7]]},"807":{"position":[[841,7]]},"808":{"position":[[1434,7]]},"816":{"position":[[104,7]]},"821":{"position":[[297,6],[803,6],[1107,7],[1238,6]]},"823":{"position":[[841,7]]},"824":{"position":[[1103,6],[2256,7]]},"832":{"position":[[104,7]]},"864":{"position":[[1337,6]]},"870":{"position":[[334,7]]},"879":{"position":[[1432,7],[1759,7]]},"909":{"position":[[572,6],[961,7]]},"911":{"position":[[571,7]]},"912":{"position":[[308,6],[819,6]]},"925":{"position":[[572,6],[961,7]]},"927":{"position":[[571,7]]},"936":{"position":[[572,6],[961,7]]},"938":{"position":[[571,7]]},"952":{"position":[[572,6],[961,7]]},"954":{"position":[[571,7]]},"970":{"position":[[572,6],[961,7]]},"972":{"position":[[571,7]]},"976":{"position":[[324,7]]},"977":{"position":[[216,8],[603,8]]},"1006":{"position":[[222,7],[469,7]]},"1007":{"position":[[111,8],[149,7]]},"1020":{"position":[[490,6]]},"1036":{"position":[[1106,7]]},"1040":{"position":[[872,6]]},"1042":{"position":[[775,6]]},"1043":{"position":[[1439,6]]},"1050":{"position":[[872,6]]},"1051":{"position":[[1701,6]]},"1058":{"position":[[872,6]]},"1059":{"position":[[1494,6]]},"1076":{"position":[[552,7]]},"1125":{"position":[[643,6],[657,7],[697,8]]},"1138":{"position":[[1503,6],[1517,7],[1557,8]]},"1140":{"position":[[2362,6]]},"1151":{"position":[[1444,6],[1458,7],[1498,8]]},"1158":{"position":[[57,8],[97,8]]},"1162":{"position":[[966,7],[981,7],[1021,8],[1075,8]]},"1179":{"position":[[1266,8],[1308,7]]},"1182":{"position":[[57,8],[97,8],[122,7],[327,7],[428,7],[552,7]]},"1186":{"position":[[462,7]]},"1188":{"position":[[887,7],[928,7]]},"1191":{"position":[[57,8],[97,8],[122,7],[329,7],[430,7],[556,7]]},"1196":{"position":[[1027,7],[1068,8]]},"1199":{"position":[[49,8],[126,7],[169,6]]},"1200":{"position":[[494,8]]},"1208":{"position":[[55,7],[138,7],[344,8]]},"1209":{"position":[[822,6]]},"1233":{"position":[[101,8]]},"1253":{"position":[[532,6],[546,7],[586,8]]},"1256":{"position":[[57,8],[97,8]]},"1260":{"position":[[992,6],[1006,7],[1046,8]]},"1262":{"position":[[57,8],[97,8],[122,7],[329,7],[430,7],[556,7]]},"1279":{"position":[[39,7],[382,7]]},"1286":{"position":[[2708,6],[2722,7],[2762,8]]},"1290":{"position":[[57,8],[97,8]]},"1292":{"position":[[6549,6]]},"1301":{"position":[[2544,6],[2558,7],[2598,8]]},"1303":{"position":[[1376,6]]},"1304":{"position":[[57,8],[97,8]]},"1306":{"position":[[6549,6]]},"1313":{"position":[[1047,6],[1061,7],[1101,8]]},"1315":{"position":[[57,8],[98,8]]},"1316":{"position":[[2362,6]]},"1325":{"position":[[2708,6],[2722,7],[2762,8]]},"1327":{"position":[[57,8],[97,8]]},"1329":{"position":[[6549,6]]},"1337":{"position":[[1047,6],[1061,7],[1101,8]]},"1339":{"position":[[57,8],[97,8]]},"1340":{"position":[[2362,6]]},"1348":{"position":[[1047,6],[1061,7],[1101,8]]},"1350":{"position":[[57,8],[97,8]]},"1351":{"position":[[2362,6]]},"1358":{"position":[[46,7],[247,8]]},"1369":{"position":[[39,7]]},"1370":{"position":[[1218,6]]},"1376":{"position":[[623,6],[637,7],[677,8]]},"1378":{"position":[[57,8],[97,8]]},"1379":{"position":[[4341,6]]},"1384":{"position":[[46,7],[1228,7]]},"1386":{"position":[[1281,7],[1322,7]]},"1389":{"position":[[57,8],[97,8],[122,7],[328,7],[429,7],[554,7]]},"1391":{"position":[[21,7],[813,7]]},"1392":{"position":[[159,7]]},"1394":{"position":[[957,6]]},"1400":{"position":[[623,6],[637,7],[677,8]]},"1402":{"position":[[57,8],[97,8]]},"1403":{"position":[[4341,6]]},"1411":{"position":[[623,6],[637,7],[677,8]]},"1413":{"position":[[57,8],[97,8]]},"1414":{"position":[[4341,6]]},"1427":{"position":[[807,6],[821,7],[861,8]]},"1430":{"position":[[57,8],[97,8]]},"1431":{"position":[[2385,6]]},"1435":{"position":[[219,7],[439,6]]},"1437":{"position":[[358,7],[1354,7],[1508,7]]},"1439":{"position":[[1457,7],[1616,7]]},"1440":{"position":[[292,7],[437,7],[569,8],[897,7],[975,6],[1078,6],[1113,7],[1266,7],[1359,6],[1513,7]]},"1443":{"position":[[1111,7]]},"1444":{"position":[[758,6],[926,7]]},"1448":{"position":[[16,7],[150,6],[311,7],[975,8],[1130,8]]},"1449":{"position":[[172,7]]},"1451":{"position":[[370,8],[648,8]]},"1452":{"position":[[2598,7]]},"1475":{"position":[[1068,7],[1499,7],[1722,6]]},"1477":{"position":[[47,6],[738,7],[794,7]]},"1480":{"position":[[976,8],[1342,8]]}},"keywords":{}}],["updated.check",{"_index":6520,"title":{},"content":{"1448":{"position":[[1075,13]]}},"keywords":{}}],["updated_at",{"_index":5476,"title":{},"content":{"1134":{"position":[[814,10],[924,10],[1024,10],[1131,10],[1256,10],[1372,10],[1752,10],[2341,10],[2453,10],[2566,10],[2799,10]]}},"keywords":{}}],["updatelookup",{"_index":4693,"title":{},"content":{"786":{"position":[[163,14]]}},"keywords":{}}],["updates"",{"_index":6494,"title":{},"content":{"1440":{"position":[[124,13]]}},"keywords":{}}],["updates.cr",{"_index":4724,"title":{},"content":{"821":{"position":[[1366,16]]}},"keywords":{}}],["updates.seri",{"_index":4725,"title":{},"content":{"821":{"position":[[1496,16]]}},"keywords":{}}],["updateswhen",{"_index":5015,"title":{},"content":{"909":{"position":[[1211,11]]},"925":{"position":[[1211,11]]},"936":{"position":[[1211,11]]},"952":{"position":[[1211,11]]},"970":{"position":[[1211,11]]}},"keywords":{}}],["updatetext",{"_index":6347,"title":{},"content":{"1379":{"position":[[4390,10]]},"1403":{"position":[[4390,10]]},"1414":{"position":[[4390,10]]}},"keywords":{}}],["upfront",{"_index":3211,"title":{},"content":{"333":{"position":[[389,8]]}},"keywords":{}}],["upgrad",{"_index":3935,"title":{},"content":{"515":{"position":[[203,7]]},"1201":{"position":[[237,8]]},"1292":{"position":[[6581,7]]},"1293":{"position":[[237,8]]},"1306":{"position":[[6581,7]]},"1307":{"position":[[237,8]]},"1317":{"position":[[237,8]]},"1329":{"position":[[6581,7]]},"1330":{"position":[[237,8]]},"1341":{"position":[[237,8]]},"1352":{"position":[[237,8]]},"1359":{"position":[[237,8]]},"1380":{"position":[[237,8]]},"1404":{"position":[[237,8]]},"1415":{"position":[[237,8]]},"1432":{"position":[[237,8]]}},"keywords":{}}],["upload",{"_index":2106,"title":{},"content":{"189":{"position":[[223,6]]},"193":{"position":[[167,7]]},"478":{"position":[[623,8]]},"479":{"position":[[344,6]]},"599":{"position":[[623,8]]},"1144":{"position":[[414,6],[463,9]]},"1162":{"position":[[603,6],[652,9]]},"1170":{"position":[[414,6],[463,9]]},"1213":{"position":[[269,6],[318,9]]},"1220":{"position":[[269,6],[318,9]]}},"keywords":{}}],["upload_interv",{"_index":5764,"title":{},"content":{"1162":{"position":[[586,16]]},"1163":{"position":[[277,16]]}},"keywords":{}}],["uploadinterv",{"_index":5717,"title":{},"content":{"1144":{"position":[[398,15]]},"1145":{"position":[[246,15]]},"1170":{"position":[[398,15]]},"1171":{"position":[[250,15]]},"1213":{"position":[[253,15]]},"1214":{"position":[[186,15]]},"1220":{"position":[[253,15]]},"1221":{"position":[[190,15]]}},"keywords":{}}],["upon",{"_index":760,"title":{},"content":{"44":{"position":[[317,4]]},"106":{"position":[[670,4]]},"107":{"position":[[3007,5]]},"197":{"position":[[934,4]]},"333":{"position":[[160,4]]},"945":{"position":[[612,4]]}},"keywords":{}}],["upper",{"_index":1352,"title":{},"content":{"94":{"position":[[1895,5]]},"120":{"position":[[1447,5]]},"343":{"position":[[365,5]]},"877":{"position":[[169,5]]},"1140":{"position":[[2397,5]]},"1316":{"position":[[2397,5]]},"1340":{"position":[[2397,5]]},"1351":{"position":[[2397,5]]},"1379":{"position":[[4448,5]]},"1403":{"position":[[4448,5]]},"1414":{"position":[[4448,5]]},"1431":{"position":[[2420,5]]},"1480":{"position":[[1153,5]]}},"keywords":{}}],["uppercas",{"_index":6258,"title":{},"content":{"1317":{"position":[[665,9]]},"1341":{"position":[[665,9]]},"1352":{"position":[[665,9]]},"1432":{"position":[[679,9]]}},"keywords":{}}],["upsert",{"_index":5961,"title":{},"content":{"1279":{"position":[[63,7]]}},"keywords":{}}],["urban",{"_index":2111,"title":{},"content":{"189":{"position":[[349,5]]}},"keywords":{}}],["uri",{"_index":1036,"title":{},"content":{"69":{"position":[[360,3],[412,3]]},"87":{"position":[[67,5]]},"392":{"position":[[428,3]]},"397":{"position":[[588,3]]},"417":{"position":[[602,3]]},"856":{"position":[[176,5]]},"1125":{"position":[[380,3]]},"1144":{"position":[[741,3]]},"1170":{"position":[[741,3]]}},"keywords":{}}],["url",{"_index":1050,"title":{"488":{"position":[[8,5]]},"659":{"position":[[8,5]]},"676":{"position":[[8,5]]},"691":{"position":[[8,5]]}},"content":{"70":{"position":[[556,3]]},"87":{"position":[[534,4]]},"88":{"position":[[671,3]]},"89":{"position":[[261,4]]},"90":{"position":[[449,4],[520,4]]},"161":{"position":[[119,3],[1197,4],[1262,4]]},"183":{"position":[[639,3]]},"192":{"position":[[547,4],[564,3],[864,5],[929,4]]},"238":{"position":[[361,3],[430,3]]},"240":{"position":[[2807,3]]},"267":{"position":[[1007,3]]},"288":{"position":[[893,3],[908,3]]},"295":{"position":[[1170,3]]},"296":{"position":[[7341,3]]},"299":{"position":[[808,3],[823,3]]},"320":{"position":[[1346,5]]},"385":{"position":[[290,3]]},"402":{"position":[[491,3],[544,3]]},"408":{"position":[[77,3],[81,3]]},"464":{"position":[[63,3]]},"466":{"position":[[195,4],[200,3]]},"467":{"position":[[162,4]]},"485":{"position":[[454,3]]},"487":{"position":[[390,3],[458,3]]},"488":{"position":[[23,4],[48,3],[298,3],[612,3],[770,3],[859,3]]},"489":{"position":[[801,3]]},"491":{"position":[[223,3],[317,3],[335,3]]},"492":{"position":[[386,3]]},"548":{"position":[[871,3]]},"611":{"position":[[957,3],[965,4]]},"634":{"position":[[72,3]]},"635":{"position":[[40,3]]},"637":{"position":[[146,4],[1043,4],[1058,3],[1075,3]]},"638":{"position":[[111,4]]},"657":{"position":[[454,3],[646,3]]},"659":{"position":[[112,3],[180,4],[205,3],[455,3],[769,3],[927,3],[1016,3]]},"662":{"position":[[801,3]]},"664":{"position":[[244,3],[338,3],[356,3],[591,3]]},"665":{"position":[[386,3]]},"673":{"position":[[454,3]]},"675":{"position":[[114,3],[138,3]]},"676":{"position":[[23,4],[48,3],[298,3],[612,3],[770,3],[859,3]]},"677":{"position":[[801,3]]},"679":{"position":[[223,3],[317,3],[335,3]]},"680":{"position":[[386,3]]},"688":{"position":[[454,3]]},"690":{"position":[[139,3],[161,3],[236,4],[301,4]]},"691":{"position":[[23,4],[48,3],[298,3],[612,3],[770,3],[859,3]]},"692":{"position":[[801,3]]},"694":{"position":[[223,3],[317,3],[335,3]]},"695":{"position":[[386,3]]},"728":{"position":[[126,3]]},"739":{"position":[[195,3]]},"741":{"position":[[414,3],[436,4]]},"782":{"position":[[146,3]]},"1013":{"position":[[17,3]]},"1031":{"position":[[607,3]]},"1034":{"position":[[60,3]]},"1092":{"position":[[414,3]]},"1107":{"position":[[354,4]]},"1118":{"position":[[623,4]]},"1130":{"position":[[27,4],[39,3]]},"1131":{"position":[[27,4],[39,3]]},"1133":{"position":[[1048,4]]},"1196":{"position":[[96,4]]},"1206":{"position":[[370,3],[381,3]]},"1239":{"position":[[70,3]]},"1243":{"position":[[649,3]]},"1247":{"position":[[683,3],[687,3]]},"1253":{"position":[[146,3]]},"1292":{"position":[[6608,3]]},"1306":{"position":[[6608,3]]},"1329":{"position":[[6608,3]]},"1356":{"position":[[214,3],[227,3]]},"1359":{"position":[[330,3]]},"1382":{"position":[[380,4]]},"1386":{"position":[[80,4]]},"1461":{"position":[[240,4],[5274,3],[5336,3]]}},"keywords":{}}],["url>",{"_index":4556,"title":{},"content":{"742":{"position":[[227,7]]}},"keywords":{}}],["url>/webhook",{"_index":4426,"title":{},"content":{"675":{"position":[[225,15]]}},"keywords":{}}],["url/webhook",{"_index":3859,"title":{},"content":{"487":{"position":[[422,11]]}},"keywords":{}}],["urlaccountuserpassworddatabaseschemawarehous",{"_index":2931,"title":{},"content":{"291":{"position":[[496,46]]},"302":{"position":[[496,46]]}},"keywords":{}}],["urlyour",{"_index":3921,"title":{},"content":{"507":{"position":[[61,7]]}},"keywords":{}}],["us",{"_index":22,"title":{"12":{"position":[[0,5]]},"79":{"position":[[0,5]]},"126":{"position":[[0,5]]},"135":{"position":[[8,3]]},"170":{"position":[[42,3]]},"191":{"position":[[21,3]]},"244":{"position":[[38,5]]},"251":{"position":[[22,5]]},"311":{"position":[[22,5]]},"327":{"position":[[11,3]]},"340":{"position":[[20,5]]},"383":{"position":[[0,5]]},"384":{"position":[[24,5]]},"445":{"position":[[0,5]]},"446":{"position":[[24,5]]},"523":{"position":[[0,5]]},"524":{"position":[[49,5]]},"531":{"position":[[0,5]]},"532":{"position":[[49,5]]},"553":{"position":[[0,5]]},"570":{"position":[[0,5]]},"608":{"position":[[0,5]]},"615":{"position":[[0,5]]},"640":{"position":[[10,5]]},"644":{"position":[[0,5]]},"651":{"position":[[0,5]]},"717":{"position":[[0,5]]},"732":{"position":[[0,5]]},"987":{"position":[[0,5]]},"1002":{"position":[[0,5]]},"1227":{"position":[[21,5]]},"1244":{"position":[[21,5]]},"1451":{"position":[[21,4]]}},"content":{"1":{"position":[[280,4],[502,4],[939,4]]},"3":{"position":[[274,3]]},"4":{"position":[[167,4]]},"6":{"position":[[24,4],[648,6]]},"8":{"position":[[24,4],[559,3],[817,4]]},"11":{"position":[[1129,3]]},"16":{"position":[[25,4]]},"20":{"position":[[636,6]]},"21":{"position":[[606,4]]},"25":{"position":[[232,5]]},"26":{"position":[[115,5],[311,3],[386,5]]},"27":{"position":[[233,4]]},"29":{"position":[[122,5]]},"31":{"position":[[73,5],[250,3]]},"35":{"position":[[323,5]]},"36":{"position":[[454,5]]},"37":{"position":[[328,5]]},"38":{"position":[[139,4],[512,3]]},"40":{"position":[[179,3],[251,4]]},"42":{"position":[[57,4],[275,4]]},"43":{"position":[[115,3]]},"46":{"position":[[18,3]]},"47":{"position":[[158,3]]},"48":{"position":[[156,3]]},"52":{"position":[[40,5]]},"54":{"position":[[176,3]]},"56":{"position":[[1037,4]]},"58":{"position":[[136,3],[871,3]]},"61":{"position":[[321,3]]},"62":{"position":[[65,5]]},"63":{"position":[[734,4],[1062,3]]},"64":{"position":[[22,4],[615,4],[811,5]]},"67":{"position":[[1476,4],[1558,6]]},"68":{"position":[[143,5],[666,5],[1167,3],[1671,3]]},"71":{"position":[[51,4]]},"76":{"position":[[74,4],[281,4]]},"79":{"position":[[45,3],[232,5],[272,5]]},"81":{"position":[[265,4],[424,4],[863,3],[1167,4],[2822,3]]},"82":{"position":[[145,4],[1050,3],[1271,6],[1480,5],[1589,4],[1647,3],[2749,3],[3058,5],[3126,3],[3712,4],[3726,3],[4887,3]]},"83":{"position":[[402,6],[592,3],[1347,3]]},"84":{"position":[[179,4],[1317,4]]},"87":{"position":[[516,4]]},"88":{"position":[[615,4]]},"89":{"position":[[37,4],[401,4],[439,3]]},"90":{"position":[[279,4],[380,3]]},"94":{"position":[[317,5],[358,6],[381,5],[566,5],[745,5],[981,5],[2424,3],[2886,5]]},"95":{"position":[[302,5]]},"96":{"position":[[116,6]]},"97":{"position":[[324,3],[889,3]]},"98":{"position":[[186,5],[419,5],[853,4],[1206,4]]},"99":{"position":[[243,3],[663,3],[757,3]]},"100":{"position":[[359,6]]},"101":{"position":[[74,3],[322,3]]},"102":{"position":[[173,5]]},"104":{"position":[[126,4]]},"107":{"position":[[2365,3],[3157,3],[3929,6]]},"109":{"position":[[705,5]]},"110":{"position":[[1481,5]]},"112":{"position":[[413,3]]},"113":{"position":[[245,4],[408,5],[785,5]]},"114":{"position":[[20,5],[82,5],[453,5]]},"115":{"position":[[208,4],[1425,3]]},"117":{"position":[[38,4],[160,3],[589,3]]},"119":{"position":[[18,3],[88,3],[264,4]]},"120":{"position":[[377,4]]},"121":{"position":[[540,5]]},"122":{"position":[[197,7],[250,4],[1401,5],[1559,5],[1649,6],[1861,3],[1928,4],[2205,5]]},"125":{"position":[[465,3],[736,5],[1053,5],[1224,3],[1447,3]]},"132":{"position":[[62,3],[315,4]]},"133":{"position":[[79,4],[168,3],[309,4],[582,3]]},"135":{"position":[[87,3]]},"136":{"position":[[5,3],[86,4],[187,3]]},"137":{"position":[[370,3],[513,3]]},"138":{"position":[[133,3],[936,3]]},"141":{"position":[[241,3]]},"142":{"position":[[158,3],[915,3]]},"144":{"position":[[561,3]]},"146":{"position":[[473,5],[1071,3]]},"149":{"position":[[1065,3]]},"152":{"position":[[1055,3]]},"154":{"position":[[1031,3],[2102,3]]},"156":{"position":[[100,4]]},"157":{"position":[[128,5]]},"158":{"position":[[286,4],[437,3]]},"159":{"position":[[194,4]]},"160":{"position":[[626,4]]},"161":{"position":[[41,4],[320,3],[398,4],[501,4],[1249,3]]},"162":{"position":[[791,4],[888,3],[1345,6],[1646,5]]},"163":{"position":[[973,4],[1026,6]]},"164":{"position":[[168,3],[448,5],[1328,3],[1384,3]]},"165":{"position":[[604,6],[899,5],[1177,4],[1531,3],[1802,5],[2295,3]]},"166":{"position":[[9,3],[522,4]]},"168":{"position":[[10,5],[158,3],[306,3],[371,3]]},"169":{"position":[[1136,5],[1316,5],[1765,5]]},"171":{"position":[[82,3]]},"172":{"position":[[81,3]]},"173":{"position":[[182,3]]},"174":{"position":[[267,3],[503,3]]},"175":{"position":[[98,5],[266,5]]},"176":{"position":[[7,5]]},"177":{"position":[[95,5],[348,3]]},"179":{"position":[[141,3],[272,5]]},"180":{"position":[[439,3]]},"182":{"position":[[360,5]]},"183":{"position":[[30,5],[1281,6],[3795,6]]},"184":{"position":[[494,3]]},"185":{"position":[[249,4]]},"189":{"position":[[560,3],[691,3],[1179,4],[1587,5],[1618,4],[1734,3]]},"190":{"position":[[1377,3],[1460,5],[1541,4]]},"191":{"position":[[988,3],[2005,3],[2099,3],[2244,3]]},"192":{"position":[[572,3],[934,5],[1425,4],[1516,3],[1963,4]]},"193":{"position":[[495,4],[569,5]]},"196":{"position":[[42,4]]},"199":{"position":[[246,4]]},"204":{"position":[[139,4],[406,5],[439,5],[866,6]]},"205":{"position":[[76,5]]},"206":{"position":[[225,3]]},"207":{"position":[[789,5],[1077,4],[1394,4]]},"208":{"position":[[463,5]]},"210":{"position":[[1597,3]]},"211":{"position":[[78,5]]},"212":{"position":[[313,3]]},"217":{"position":[[247,5],[962,4]]},"218":{"position":[[1297,3],[1817,3],[1964,5]]},"221":{"position":[[426,4],[1209,5]]},"222":{"position":[[454,5]]},"223":{"position":[[420,5]]},"224":{"position":[[473,5]]},"225":{"position":[[472,3]]},"227":{"position":[[319,3]]},"228":{"position":[[26,5],[1124,4]]},"229":{"position":[[26,5],[129,5],[530,3],[808,4]]},"230":{"position":[[804,3],[1110,3]]},"232":{"position":[[86,5],[213,3],[414,5]]},"233":{"position":[[42,4]]},"234":{"position":[[297,4]]},"237":{"position":[[572,3],[864,4],[3054,3]]},"238":{"position":[[129,3]]},"240":{"position":[[172,3],[949,3],[1966,3],[2060,3],[3097,5]]},"241":{"position":[[92,5]]},"242":{"position":[[153,3],[388,3]]},"243":{"position":[[307,3]]},"250":{"position":[[29,5],[159,5],[1127,3]]},"252":{"position":[[73,5]]},"253":{"position":[[364,5],[436,4],[1153,5],[3114,3]]},"254":{"position":[[560,6],[2239,4],[2617,6]]},"255":{"position":[[9,3],[77,3],[940,5]]},"257":{"position":[[65,5]]},"259":{"position":[[520,3],[804,3],[1005,4],[1285,3],[2214,3],[2373,3],[2586,4],[2866,3]]},"260":{"position":[[51,3]]},"263":{"position":[[348,3]]},"267":{"position":[[30,5],[315,3]]},"268":{"position":[[324,5],[621,5],[913,6],[2003,4]]},"269":{"position":[[259,5],[538,6],[1465,4]]},"270":{"position":[[54,5],[153,6],[716,5],[2081,4]]},"273":{"position":[[150,3]]},"274":{"position":[[404,5]]},"275":{"position":[[440,3],[758,3],[914,3]]},"277":{"position":[[635,6],[812,6],[892,5]]},"278":{"position":[[960,6],[1420,4]]},"279":{"position":[[510,3],[809,5],[902,6],[1223,6]]},"280":{"position":[[496,4],[851,4],[1473,6]]},"281":{"position":[[373,3],[468,5],[803,4],[947,6],[2657,3]]},"284":{"position":[[230,3],[733,3]]},"286":{"position":[[81,3],[337,3]]},"288":{"position":[[762,3],[925,5]]},"289":{"position":[[122,3]]},"290":{"position":[[224,5],[573,3],[896,4],[1121,4],[1334,3]]},"291":{"position":[[584,4],[1284,4],[1750,3]]},"294":{"position":[[73,5]]},"295":{"position":[[18,4],[683,3]]},"296":{"position":[[685,6],[1702,5],[1800,5],[2575,5],[2686,6],[3718,5],[4385,3],[6785,5]]},"299":{"position":[[677,3],[840,5]]},"300":{"position":[[122,3]]},"301":{"position":[[177,5],[513,3],[871,5],[1300,3],[1330,4]]},"302":{"position":[[584,4],[1659,3]]},"308":{"position":[[170,3]]},"309":{"position":[[174,6]]},"312":{"position":[[73,5]]},"313":{"position":[[364,5],[436,4],[1153,5],[3420,4],[3491,3]]},"314":{"position":[[393,6],[1780,4],[2248,6]]},"315":{"position":[[21,3],[70,3],[875,3]]},"316":{"position":[[9,3],[77,3],[1265,5]]},"319":{"position":[[55,3],[254,3],[1139,5]]},"320":{"position":[[502,4],[2404,3]]},"321":{"position":[[487,3],[1185,6]]},"322":{"position":[[34,3],[112,6],[273,4],[475,3],[595,3],[1656,3]]},"323":{"position":[[1035,3],[1254,4],[1439,4],[1482,4]]},"324":{"position":[[351,4],[372,4],[714,3],[822,3]]},"325":{"position":[[540,3]]},"326":{"position":[[152,3],[1163,3],[1255,4],[1558,3]]},"329":{"position":[[1004,3]]},"333":{"position":[[603,5]]},"338":{"position":[[27,3],[283,5],[581,5]]},"339":{"position":[[41,5]]},"340":{"position":[[9,3],[166,5]]},"341":{"position":[[45,5],[442,4],[583,5]]},"343":{"position":[[1146,3]]},"345":{"position":[[233,3]]},"350":{"position":[[144,5]]},"355":{"position":[[27,4],[62,5]]},"358":{"position":[[144,5]]},"369":{"position":[[144,5]]},"370":{"position":[[1351,4]]},"373":{"position":[[404,4],[476,4],[644,4]]},"374":{"position":[[173,3],[209,3]]},"375":{"position":[[4,3],[206,3]]},"376":{"position":[[144,5]]},"377":{"position":[[568,5],[744,5],[775,6],[1375,5]]},"382":{"position":[[16,4],[126,5]]},"383":{"position":[[119,3]]},"384":{"position":[[123,4]]},"386":{"position":[[144,5]]},"387":{"position":[[134,3]]},"390":{"position":[[4,3],[369,4]]},"391":{"position":[[144,5]]},"392":{"position":[[135,4],[301,4],[447,6]]},"395":{"position":[[4,3],[538,4],[669,5]]},"396":{"position":[[144,5]]},"397":{"position":[[445,3],[607,3]]},"400":{"position":[[4,3]]},"401":{"position":[[157,5]]},"402":{"position":[[814,4]]},"406":{"position":[[132,5]]},"407":{"position":[[144,5]]},"408":{"position":[[256,3],[357,3]]},"413":{"position":[[9,3]]},"414":{"position":[[141,5]]},"415":{"position":[[262,3],[401,5]]},"416":{"position":[[144,5]]},"417":{"position":[[498,5],[621,3],[779,4],[970,4],[1305,3],[1938,3]]},"419":{"position":[[1262,3]]},"423":{"position":[[144,5]]},"429":{"position":[[525,5],[663,3],[938,3],[1199,4]]},"430":{"position":[[4,5],[64,3]]},"431":{"position":[[144,5]]},"432":{"position":[[411,4],[978,5],[1073,5],[1142,5]]},"436":{"position":[[1031,3]]},"437":{"position":[[144,5]]},"438":{"position":[[498,5],[596,4],[820,4],[885,5],[967,4],[1032,5],[1183,5],[1349,5],[1432,4],[1497,5],[1821,3]]},"440":{"position":[[1278,3]]},"444":{"position":[[16,4],[129,5]]},"447":{"position":[[144,5]]},"448":{"position":[[134,3]]},"453":{"position":[[144,5]]},"459":{"position":[[144,5]]},"465":{"position":[[144,5]]},"472":{"position":[[144,5]]},"475":{"position":[[4,3]]},"477":{"position":[[483,3]]},"478":{"position":[[26,4]]},"480":{"position":[[611,4],[701,4]]},"481":{"position":[[144,5]]},"482":{"position":[[661,4]]},"485":{"position":[[257,6],[359,3]]},"486":{"position":[[206,5]]},"487":{"position":[[130,5]]},"489":{"position":[[252,5],[619,3],[867,5]]},"490":{"position":[[103,3]]},"492":{"position":[[322,4],[398,3],[535,4]]},"494":{"position":[[135,3]]},"495":{"position":[[144,5]]},"499":{"position":[[432,5]]},"500":{"position":[[4,3],[96,5]]},"501":{"position":[[100,5]]},"502":{"position":[[343,3],[958,5]]},"507":{"position":[[4,3]]},"508":{"position":[[144,5]]},"509":{"position":[[266,4]]},"513":{"position":[[278,5]]},"514":{"position":[[4,3]]},"516":{"position":[[144,5]]},"517":{"position":[[160,5],[668,3],[3253,4],[3426,3],[3491,4],[3725,3]]},"522":{"position":[[79,5],[285,5]]},"525":{"position":[[144,5]]},"526":{"position":[[25,5]]},"530":{"position":[[79,5],[285,5]]},"532":{"position":[[160,3]]},"533":{"position":[[144,5]]},"534":{"position":[[134,3],[716,4]]},"537":{"position":[[23,4]]},"539":{"position":[[144,5]]},"540":{"position":[[184,3],[256,3]]},"543":{"position":[[4,3],[388,3]]},"544":{"position":[[144,5]]},"545":{"position":[[498,5],[694,3],[929,3],[1540,3]]},"547":{"position":[[1264,3]]},"548":{"position":[[142,6],[328,5],[538,5],[551,3],[667,4]]},"550":{"position":[[537,5]]},"551":{"position":[[79,5],[107,5],[277,5]]},"554":{"position":[[605,4]]},"555":{"position":[[141,5]]},"556":{"position":[[134,3],[873,3]]},"558":{"position":[[33,5]]},"562":{"position":[[4,3]]},"563":{"position":[[207,5]]},"569":{"position":[[98,5],[309,5]]},"570":{"position":[[66,5]]},"571":{"position":[[66,5]]},"572":{"position":[[144,5]]},"573":{"position":[[138,3],[414,3]]},"581":{"position":[[4,3],[357,5],[487,5]]},"583":{"position":[[134,5]]},"584":{"position":[[1022,4]]},"585":{"position":[[492,5]]},"590":{"position":[[839,5]]},"592":{"position":[[141,5]]},"595":{"position":[[308,3],[595,4],[1548,4],[1881,4]]},"597":{"position":[[4,3]]},"598":{"position":[[447,3]]},"599":{"position":[[26,4]]},"600":{"position":[[143,5]]},"601":{"position":[[242,3]]},"602":{"position":[[820,5],[975,3]]},"603":{"position":[[216,3]]},"607":{"position":[[96,5],[308,5]]},"608":{"position":[[148,3]]},"610":{"position":[[144,5]]},"611":{"position":[[134,3],[482,3],[622,4]]},"614":{"position":[[82,5],[292,5]]},"616":{"position":[[267,5]]},"618":{"position":[[144,5]]},"624":{"position":[[144,5]]},"630":{"position":[[144,5]]},"634":{"position":[[424,5]]},"635":{"position":[[4,3],[270,5]]},"636":{"position":[[144,5]]},"643":{"position":[[70,5]]},"645":{"position":[[472,3]]},"646":{"position":[[144,5]]},"650":{"position":[[70,5],[258,5]]},"652":{"position":[[472,3]]},"653":{"position":[[144,5]]},"654":{"position":[[699,3]]},"657":{"position":[[257,6],[359,3]]},"658":{"position":[[206,5]]},"660":{"position":[[401,4],[1014,4],[1037,3]]},"662":{"position":[[252,5],[619,3],[867,5]]},"663":{"position":[[103,3]]},"665":{"position":[[322,4],[398,3],[535,4]]},"669":{"position":[[144,5]]},"673":{"position":[[257,6],[359,3]]},"674":{"position":[[206,5]]},"677":{"position":[[252,5],[619,3],[867,5]]},"678":{"position":[[103,3]]},"680":{"position":[[322,4],[398,3]]},"683":{"position":[[206,5]]},"684":{"position":[[144,5]]},"685":{"position":[[76,5]]},"688":{"position":[[257,6],[359,3]]},"689":{"position":[[206,5]]},"692":{"position":[[252,5],[619,3],[867,5]]},"693":{"position":[[103,3]]},"695":{"position":[[322,4],[398,3],[535,4]]},"699":{"position":[[144,5]]},"703":{"position":[[23,4]]},"705":{"position":[[144,5]]},"711":{"position":[[144,5]]},"712":{"position":[[99,4],[360,4],[406,4]]},"716":{"position":[[81,5],[294,5]]},"718":{"position":[[22,5],[72,5]]},"719":{"position":[[139,5]]},"720":{"position":[[134,3]]},"724":{"position":[[96,5],[227,3]]},"726":{"position":[[191,4]]},"727":{"position":[[144,5]]},"728":{"position":[[380,5],[498,5]]},"731":{"position":[[72,5],[251,5]]},"734":{"position":[[144,5]]},"738":{"position":[[23,4]]},"740":{"position":[[144,5]]},"746":{"position":[[144,5]]},"747":{"position":[[1210,4]]},"750":{"position":[[4,3],[1018,5],[1217,3]]},"753":{"position":[[9,3],[80,5],[715,5],[1635,3]]},"754":{"position":[[892,5],[1181,5]]},"756":{"position":[[144,5]]},"757":{"position":[[371,3],[441,3],[807,4]]},"764":{"position":[[1120,3]]},"766":{"position":[[4,3],[1018,5],[1217,3]]},"767":{"position":[[1129,5]]},"769":{"position":[[144,5]]},"770":{"position":[[371,3],[441,3],[807,4]]},"777":{"position":[[1120,3]]},"779":{"position":[[209,4]]},"780":{"position":[[203,5],[455,5]]},"781":{"position":[[141,5]]},"784":{"position":[[364,6]]},"789":{"position":[[4,3],[1419,5],[1618,3]]},"793":{"position":[[675,5],[1658,3]]},"794":{"position":[[610,5],[1098,5],[1385,5]]},"796":{"position":[[145,5]]},"797":{"position":[[371,3],[441,3],[807,4]]},"804":{"position":[[1118,3]]},"805":{"position":[[51,4]]},"807":{"position":[[4,3],[1006,5],[1205,3]]},"808":{"position":[[690,5],[1608,3]]},"809":{"position":[[610,5],[1098,5],[1385,5]]},"811":{"position":[[144,5]]},"812":{"position":[[371,3],[441,3],[807,4]]},"819":{"position":[[1118,3]]},"820":{"position":[[51,4]]},"821":{"position":[[186,5],[239,5],[741,5],[1078,4],[1322,4],[1408,4],[1479,4],[1540,4]]},"823":{"position":[[4,3],[1006,5],[1205,3]]},"824":{"position":[[1195,5]]},"825":{"position":[[934,5],[1221,5]]},"827":{"position":[[144,5]]},"828":{"position":[[371,3],[441,3],[807,4]]},"835":{"position":[[1118,3]]},"836":{"position":[[51,4]]},"840":{"position":[[175,3],[375,5],[874,3],[1596,3],[1700,3]]},"841":{"position":[[144,5]]},"842":{"position":[[382,4],[2137,3],[2290,3],[2497,3],[3299,4],[3459,4]]},"849":{"position":[[118,3],[318,5],[577,5],[724,5],[1425,5],[1487,3],[2274,5],[2482,5],[2558,3],[2628,3],[2741,3],[2996,5]]},"850":{"position":[[144,5]]},"855":{"position":[[4,3],[204,5],[265,5],[369,5]]},"856":{"position":[[320,4]]},"857":{"position":[[268,3]]},"858":{"position":[[144,5]]},"859":{"position":[[134,3],[266,5]]},"864":{"position":[[968,3],[1456,4],[1545,4],[1700,3]]},"866":{"position":[[144,5]]},"867":{"position":[[691,4],[1330,4],[1379,5],[1483,5],[1597,4]]},"869":{"position":[[30,5],[256,5],[300,4],[572,4],[1123,5],[1217,4],[1273,5],[1426,4],[1542,3],[1592,5],[1682,3]]},"870":{"position":[[578,4]]},"876":{"position":[[960,3]]},"878":{"position":[[144,5]]},"879":{"position":[[477,4],[616,4],[1252,3]]},"883":{"position":[[31,4]]},"884":{"position":[[144,5]]},"890":{"position":[[145,5]]},"895":{"position":[[350,5]]},"896":{"position":[[144,5]]},"906":{"position":[[144,5]]},"907":{"position":[[1134,4]]},"909":{"position":[[182,4],[806,3],[849,4],[1173,5],[1253,4]]},"910":{"position":[[125,5]]},"911":{"position":[[40,4],[239,6],[358,4]]},"912":{"position":[[194,5],[250,5],[757,5],[1138,3]]},"917":{"position":[[100,3],[408,5],[482,5]]},"918":{"position":[[1304,4]]},"919":{"position":[[942,5],[1019,5],[2565,3]]},"921":{"position":[[144,5]]},"922":{"position":[[232,4],[1979,4],[2475,5],[2555,5],[2624,5],[3305,5]]},"923":{"position":[[1134,4]]},"925":{"position":[[182,4],[806,3],[849,4],[1173,5],[1253,4]]},"926":{"position":[[125,5]]},"927":{"position":[[40,4],[239,6],[358,4]]},"931":{"position":[[2087,3]]},"933":{"position":[[144,5]]},"934":{"position":[[1134,4]]},"936":{"position":[[182,4],[806,3],[849,4],[1173,5],[1253,4]]},"937":{"position":[[125,5]]},"938":{"position":[[40,4],[239,6],[358,4]]},"943":{"position":[[204,5]]},"946":{"position":[[12,5]]},"949":{"position":[[144,5]]},"950":{"position":[[1134,4]]},"952":{"position":[[182,4],[806,3],[849,4],[1173,5],[1253,4]]},"953":{"position":[[125,5]]},"954":{"position":[[40,4],[239,6],[358,4]]},"958":{"position":[[144,5]]},"965":{"position":[[100,3],[408,5],[482,5]]},"967":{"position":[[144,5]]},"968":{"position":[[1134,4]]},"970":{"position":[[182,4],[806,3],[849,4],[1173,5],[1253,4]]},"971":{"position":[[125,5]]},"972":{"position":[[40,4],[239,6],[358,4]]},"975":{"position":[[105,5]]},"977":{"position":[[93,5],[166,5],[745,5]]},"981":{"position":[[144,5]]},"987":{"position":[[11,5],[86,5]]},"989":{"position":[[446,3]]},"990":{"position":[[144,5]]},"991":{"position":[[134,3],[719,5]]},"996":{"position":[[144,5]]},"1002":{"position":[[11,5],[86,5]]},"1004":{"position":[[153,6],[529,3]]},"1005":{"position":[[141,5]]},"1008":{"position":[[153,5],[202,5],[258,5],[968,5],[1102,5],[1243,5]]},"1009":{"position":[[134,3],[782,5],[1440,4],[1592,4]]},"1014":{"position":[[144,5]]},"1018":{"position":[[91,5]]},"1020":{"position":[[645,5]]},"1021":{"position":[[144,5],[1034,3]]},"1023":{"position":[[1245,3]]},"1025":{"position":[[23,4]]},"1027":{"position":[[144,5]]},"1031":{"position":[[4,3],[182,3],[657,5]]},"1032":{"position":[[44,3]]},"1033":{"position":[[148,5]]},"1034":{"position":[[83,4],[546,4],[614,4]]},"1036":{"position":[[465,5]]},"1039":{"position":[[113,5]]},"1040":{"position":[[49,5]]},"1042":{"position":[[58,3],[171,3]]},"1043":{"position":[[722,3],[835,3],[1900,3]]},"1044":{"position":[[144,5]]},"1045":{"position":[[861,4]]},"1047":{"position":[[673,3]]},"1049":{"position":[[39,5]]},"1050":{"position":[[49,5]]},"1051":{"position":[[978,3],[1097,3]]},"1052":{"position":[[144,5]]},"1053":{"position":[[861,4]]},"1055":{"position":[[673,3]]},"1057":{"position":[[42,5]]},"1058":{"position":[[49,5]]},"1059":{"position":[[742,3],[886,3],[1934,3]]},"1060":{"position":[[144,5]]},"1061":{"position":[[861,4]]},"1063":{"position":[[673,3]]},"1067":{"position":[[316,5],[347,5],[677,3]]},"1068":{"position":[[93,4]]},"1069":{"position":[[144,5]]},"1070":{"position":[[134,3]]},"1075":{"position":[[144,5]]},"1076":{"position":[[518,6]]},"1077":{"position":[[258,6]]},"1081":{"position":[[126,3]]},"1082":{"position":[[63,3],[118,5],[242,4]]},"1084":{"position":[[144,5]]},"1085":{"position":[[119,5],[154,3],[1050,4]]},"1093":{"position":[[144,5]]},"1097":{"position":[[1,6]]},"1100":{"position":[[144,5]]},"1106":{"position":[[145,5]]},"1112":{"position":[[144,5]]},"1118":{"position":[[138,3],[277,3],[340,3],[594,3]]},"1122":{"position":[[4,3],[296,5]]},"1123":{"position":[[780,3]]},"1124":{"position":[[144,5]]},"1125":{"position":[[399,3]]},"1129":{"position":[[98,5]]},"1132":{"position":[[145,5]]},"1133":{"position":[[124,5],[1408,3]]},"1136":{"position":[[4,3]]},"1137":{"position":[[4,3],[73,3]]},"1138":{"position":[[566,3]]},"1140":{"position":[[76,4],[2517,5]]},"1142":{"position":[[4,3]]},"1143":{"position":[[1,3]]},"1144":{"position":[[527,4],[760,3],[1083,3]]},"1149":{"position":[[4,3],[87,5]]},"1150":{"position":[[1,3]]},"1151":{"position":[[1023,3],[1269,4]]},"1154":{"position":[[182,5],[248,3],[388,5],[554,5],[732,6]]},"1156":{"position":[[372,4],[580,5]]},"1157":{"position":[[182,3]]},"1158":{"position":[[84,3]]},"1160":{"position":[[4,3]]},"1161":{"position":[[1,3]]},"1162":{"position":[[375,4]]},"1165":{"position":[[239,5]]},"1168":{"position":[[4,3]]},"1169":{"position":[[1,3]]},"1170":{"position":[[527,4],[760,3]]},"1176":{"position":[[4,3]]},"1177":{"position":[[475,3]]},"1178":{"position":[[4,3],[73,3]]},"1179":{"position":[[258,3],[1286,3]]},"1182":{"position":[[84,3]]},"1185":{"position":[[4,3]]},"1186":{"position":[[659,4]]},"1187":{"position":[[4,3],[73,3]]},"1188":{"position":[[154,4],[445,4],[906,3]]},"1191":{"position":[[84,3]]},"1192":{"position":[[76,4],[568,5]]},"1194":{"position":[[4,3],[87,4],[387,3]]},"1195":{"position":[[4,3],[73,3],[285,5],[326,5],[511,4],[635,5]]},"1196":{"position":[[141,5],[326,3],[419,3],[813,3],[1046,3],[1188,3]]},"1198":{"position":[[453,6]]},"1199":{"position":[[158,5]]},"1200":{"position":[[417,5],[570,5]]},"1203":{"position":[[4,3]]},"1204":{"position":[[340,3],[606,3]]},"1205":{"position":[[4,3],[73,3]]},"1208":{"position":[[331,3]]},"1209":{"position":[[56,4],[842,5]]},"1211":{"position":[[4,3]]},"1212":{"position":[[1,3]]},"1213":{"position":[[214,3],[382,4],[760,3]]},"1218":{"position":[[4,3]]},"1219":{"position":[[1,3]]},"1220":{"position":[[214,3],[382,4]]},"1226":{"position":[[4,3],[169,5]]},"1228":{"position":[[57,5]]},"1229":{"position":[[4,3],[73,3]]},"1230":{"position":[[100,4],[276,3],[399,3]]},"1231":{"position":[[55,5]]},"1233":{"position":[[85,4]]},"1234":{"position":[[47,5],[128,5]]},"1236":{"position":[[4,3]]},"1237":{"position":[[41,3],[145,5]]},"1239":{"position":[[158,3]]},"1243":{"position":[[4,3],[565,3],[877,3],[1077,5],[1254,5],[1312,5]]},"1246":{"position":[[4,3],[73,3]]},"1247":{"position":[[126,3],[271,4],[447,3],[570,3],[598,5]]},"1248":{"position":[[55,5]]},"1250":{"position":[[209,4]]},"1251":{"position":[[216,5]]},"1252":{"position":[[141,5]]},"1255":{"position":[[364,6]]},"1256":{"position":[[84,3]]},"1258":{"position":[[4,3]]},"1259":{"position":[[1,3]]},"1260":{"position":[[477,3],[817,4]]},"1262":{"position":[[84,3]]},"1264":{"position":[[4,3]]},"1265":{"position":[[54,5]]},"1267":{"position":[[407,3],[481,3]]},"1274":{"position":[[4,3],[216,5]]},"1275":{"position":[[300,5]]},"1276":{"position":[[78,4],[393,3]]},"1277":{"position":[[198,5],[385,4],[470,4],[869,3],[951,4]]},"1281":{"position":[[4,3]]},"1282":{"position":[[302,3],[448,3]]},"1284":{"position":[[4,3],[73,3]]},"1285":{"position":[[429,3],[503,3],[1040,3],[1168,3],[1280,3]]},"1286":{"position":[[667,5],[1155,5],[1471,5],[1737,3],[1799,5],[1886,5],[2052,4],[2142,5],[2215,5],[2336,5]]},"1288":{"position":[[160,3],[276,3]]},"1289":{"position":[[757,3],[1072,6],[1322,3]]},"1290":{"position":[[84,3]]},"1292":{"position":[[71,4],[6674,3],[6831,5]]},"1295":{"position":[[4,3]]},"1298":{"position":[[420,5],[1154,3]]},"1299":{"position":[[4,3],[73,3]]},"1300":{"position":[[429,3],[503,3],[1040,3],[1168,3],[1280,3]]},"1301":{"position":[[991,5],[1307,5],[1573,3],[1635,5],[1722,5],[1888,4],[1978,5],[2051,5],[2172,5]]},"1303":{"position":[[783,6],[1033,3],[1730,3]]},"1304":{"position":[[84,3]]},"1306":{"position":[[71,4],[6674,3],[6831,5]]},"1309":{"position":[[4,3]]},"1310":{"position":[[317,3],[463,3],[643,3]]},"1312":{"position":[[4,3],[73,3]]},"1313":{"position":[[376,3]]},"1315":{"position":[[85,3]]},"1316":{"position":[[76,4],[2517,5]]},"1319":{"position":[[4,3]]},"1322":{"position":[[454,5],[1291,6],[1541,3]]},"1323":{"position":[[4,3],[73,3]]},"1324":{"position":[[429,3],[503,3],[1040,3],[1168,3],[1280,3]]},"1325":{"position":[[667,5],[1155,5],[1471,5],[1737,3],[1799,5],[1886,5],[2052,4],[2142,5],[2215,5],[2336,5]]},"1327":{"position":[[84,3]]},"1329":{"position":[[71,4],[6674,3],[6831,5]]},"1332":{"position":[[4,3]]},"1334":{"position":[[259,3]]},"1335":{"position":[[454,5],[1189,3]]},"1336":{"position":[[4,3],[73,3]]},"1337":{"position":[[376,3]]},"1339":{"position":[[84,3]]},"1340":{"position":[[76,4],[2517,5]]},"1343":{"position":[[4,3]]},"1346":{"position":[[420,5],[1155,3]]},"1347":{"position":[[4,3],[73,3]]},"1348":{"position":[[376,3]]},"1350":{"position":[[84,3]]},"1351":{"position":[[76,4],[2517,5]]},"1354":{"position":[[4,3]]},"1355":{"position":[[4,3],[73,3]]},"1356":{"position":[[93,4]]},"1358":{"position":[[234,3],[343,4]]},"1361":{"position":[[4,3]]},"1362":{"position":[[38,3],[144,5],[782,5]]},"1365":{"position":[[4,3]]},"1370":{"position":[[72,4],[1232,5]]},"1372":{"position":[[4,3]]},"1373":{"position":[[960,3],[1014,3]]},"1374":{"position":[[960,3],[1014,3]]},"1375":{"position":[[4,3],[73,3]]},"1378":{"position":[[84,3]]},"1379":{"position":[[75,4],[4541,3],[4647,5]]},"1382":{"position":[[4,3],[403,5]]},"1383":{"position":[[166,3],[936,3],[1953,3],[2047,3]]},"1384":{"position":[[20,3],[89,5],[606,5],[1102,3],[1250,3]]},"1385":{"position":[[4,3],[73,3]]},"1386":{"position":[[104,4],[952,5],[1051,5],[1300,3]]},"1388":{"position":[[577,3]]},"1389":{"position":[[84,3]]},"1391":{"position":[[6,5],[168,4]]},"1392":{"position":[[144,4],[225,5]]},"1393":{"position":[[118,4],[230,3]]},"1394":{"position":[[75,4],[975,5]]},"1396":{"position":[[4,3]]},"1397":{"position":[[739,3],[793,3],[1169,3]]},"1398":{"position":[[738,3],[792,3],[1172,3]]},"1399":{"position":[[4,3],[73,3]]},"1402":{"position":[[84,3]]},"1403":{"position":[[75,4],[4541,3],[4647,5]]},"1406":{"position":[[4,3]]},"1408":{"position":[[58,3],[112,3]]},"1409":{"position":[[722,3],[776,3],[1173,3]]},"1410":{"position":[[4,3],[73,3]]},"1413":{"position":[[84,3]]},"1414":{"position":[[75,4],[4541,3],[4647,5]]},"1417":{"position":[[4,3],[316,4]]},"1419":{"position":[[4,3],[73,3]]},"1420":{"position":[[594,4]]},"1423":{"position":[[82,4],[699,5]]},"1425":{"position":[[4,3],[140,5]]},"1426":{"position":[[4,3],[73,3]]},"1427":{"position":[[317,3],[746,6]]},"1430":{"position":[[84,3]]},"1431":{"position":[[99,4],[2540,5]]},"1437":{"position":[[796,4]]},"1438":{"position":[[775,3]]},"1439":{"position":[[67,4],[348,4]]},"1440":{"position":[[523,4],[1426,3],[1497,3]]},"1446":{"position":[[70,3]]},"1448":{"position":[[623,5]]},"1449":{"position":[[697,5]]},"1451":{"position":[[72,3]]},"1452":{"position":[[2292,3],[2632,3],[2919,4],[3156,4],[3537,3]]},"1453":{"position":[[1503,3]]},"1459":{"position":[[356,4]]},"1461":{"position":[[255,3],[395,4],[2164,6],[2630,3],[3339,3],[3396,4],[4200,3],[4359,4],[4493,5],[5249,3]]},"1465":{"position":[[166,3],[569,3]]},"1467":{"position":[[1985,3]]},"1470":{"position":[[316,3]]},"1472":{"position":[[271,5]]},"1475":{"position":[[140,3],[607,4],[1051,4]]},"1476":{"position":[[1073,4],[1593,5]]},"1477":{"position":[[2645,5],[2870,3],[2980,5]]},"1479":{"position":[[466,3]]},"1480":{"position":[[314,4]]}},"keywords":{}}],["us/pacif",{"_index":4571,"title":{},"content":{"748":{"position":[[253,10]]}},"keywords":{}}],["usa",{"_index":4604,"title":{},"content":{"754":{"position":[[605,4]]},"794":{"position":[[811,4]]},"809":{"position":[[811,4]]},"825":{"position":[[647,4]]},"1286":{"position":[[868,4]]},"1301":{"position":[[704,4]]},"1325":{"position":[[868,4]]}},"keywords":{}}],["usabl",{"_index":164,"title":{},"content":{"4":{"position":[[301,6]]},"68":{"position":[[1781,6]]}},"keywords":{}}],["usag",{"_index":712,"title":{"485":{"position":[[0,6]]},"657":{"position":[[0,6]]},"673":{"position":[[0,6]]},"688":{"position":[[0,6]]}},"content":{"39":{"position":[[77,6]]},"146":{"position":[[64,5]]},"149":{"position":[[70,5]]},"152":{"position":[[80,5]]},"191":{"position":[[1668,5],[1816,5]]},"240":{"position":[[1629,5],[1777,5]]},"280":{"position":[[27,5]]},"323":{"position":[[1571,5]]},"616":{"position":[[22,6]]},"867":{"position":[[1460,5]]},"869":{"position":[[1506,5]]},"870":{"position":[[659,5]]},"944":{"position":[[158,5]]},"1032":{"position":[[1228,5],[1435,5],[1521,5],[1625,5]]},"1036":{"position":[[696,6]]},"1140":{"position":[[2438,5]]},"1276":{"position":[[373,5]]},"1292":{"position":[[6632,5]]},"1306":{"position":[[6632,5]]},"1316":{"position":[[2438,5]]},"1329":{"position":[[6632,5]]},"1340":{"position":[[2438,5]]},"1351":{"position":[[2438,5]]},"1379":{"position":[[4494,5]]},"1383":{"position":[[1616,5],[1764,5]]},"1403":{"position":[[4494,5]]},"1414":{"position":[[4494,5]]},"1431":{"position":[[2461,5]]},"1453":{"position":[[1556,5]]}},"keywords":{}}],["use_frm",{"_index":6245,"title":{},"content":{"1292":{"position":[[6791,7]]},"1306":{"position":[[6791,7]]},"1329":{"position":[[6791,7]]}},"keywords":{}}],["useddescribestream",{"_index":3509,"title":{},"content":{"390":{"position":[[294,18]]}},"keywords":{}}],["useddescribestreamsummari",{"_index":3510,"title":{},"content":{"390":{"position":[[328,25]]}},"keywords":{}}],["usedgetrecord",{"_index":3528,"title":{},"content":{"395":{"position":[[472,14]]}},"keywords":{}}],["usedgetsharditer",{"_index":3508,"title":{},"content":{"390":{"position":[[258,20]]},"395":{"position":[[502,20]]}},"keywords":{}}],["user",{"_index":575,"title":{"59":{"position":[[0,4]]},"213":{"position":[[5,4]]},"336":{"position":[[12,5]]},"415":{"position":[[24,4]]},"864":{"position":[[19,5]]},"876":{"position":[[19,5]]}},"content":{"21":{"position":[[639,4]]},"58":{"position":[[688,5]]},"60":{"position":[[341,6]]},"81":{"position":[[1424,5],[2717,5]]},"82":{"position":[[767,4],[1445,5],[1454,4],[2264,5],[3880,5],[3889,4],[4493,5],[4502,4]]},"83":{"position":[[1058,5]]},"84":{"position":[[259,5],[612,5]]},"105":{"position":[[331,4]]},"108":{"position":[[13,4]]},"110":{"position":[[660,4]]},"117":{"position":[[289,4]]},"135":{"position":[[507,5]]},"154":{"position":[[33,6],[234,6],[246,5],[343,5],[439,5],[505,4],[654,5],[701,5],[1549,5]]},"158":{"position":[[706,4]]},"169":{"position":[[934,5],[1075,6]]},"173":{"position":[[963,5]]},"177":{"position":[[157,4],[372,4]]},"183":{"position":[[1310,4],[1432,4],[1863,5],[1918,4],[1967,5],[2068,4],[2148,4],[2196,5],[2247,4],[2567,4],[2681,4],[2753,5],[2951,4],[3025,6],[3082,5],[3277,5],[3669,5],[3724,4],[3773,5],[3824,4],[3949,5],[3967,4]]},"191":{"position":[[198,5],[1098,4],[1122,4],[1302,4]]},"192":{"position":[[1001,5]]},"202":{"position":[[169,4]]},"206":{"position":[[406,4]]},"213":{"position":[[5,4]]},"215":{"position":[[37,5]]},"219":{"position":[[531,5]]},"221":{"position":[[406,5],[512,4],[994,4]]},"222":{"position":[[239,4],[894,4],[911,5]]},"223":{"position":[[205,4]]},"224":{"position":[[258,4]]},"236":{"position":[[704,5],[2864,4]]},"237":{"position":[[284,4],[345,4],[731,4],[1622,4]]},"238":{"position":[[934,4]]},"240":{"position":[[1059,4],[1083,4],[1263,4],[2298,6]]},"242":{"position":[[704,4],[714,4]]},"253":{"position":[[3200,4]]},"254":{"position":[[283,6],[687,5],[837,5],[963,6],[2744,5],[2894,5],[3405,5],[3555,5],[3945,5]]},"255":{"position":[[223,5]]},"277":{"position":[[213,4]]},"280":{"position":[[99,5]]},"281":{"position":[[931,7],[1519,5],[1588,5],[2041,6],[2097,5]]},"288":{"position":[[667,4]]},"299":{"position":[[366,4],[441,5],[582,4]]},"314":{"position":[[1280,5]]},"315":{"position":[[1151,6]]},"320":{"position":[[1164,5],[1426,5]]},"323":{"position":[[1813,5],[1883,5]]},"337":{"position":[[161,4],[316,4],[378,4],[494,4],[570,4]]},"338":{"position":[[311,4],[363,4],[517,5]]},"339":{"position":[[185,4]]},"341":{"position":[[275,4],[296,4]]},"344":{"position":[[200,5]]},"360":{"position":[[194,5]]},"367":{"position":[[246,4],[354,4]]},"370":{"position":[[466,5],[472,4],[490,4],[612,5],[682,6]]},"371":{"position":[[248,5]]},"377":{"position":[[108,6]]},"383":{"position":[[23,4]]},"387":{"position":[[411,4]]},"390":{"position":[[168,4],[610,5]]},"395":{"position":[[328,4],[789,5]]},"402":{"position":[[275,5],[281,4],[295,4],[399,5],[765,4]]},"403":{"position":[[229,5],[423,5]]},"406":{"position":[[285,4]]},"413":{"position":[[223,5],[387,5]]},"415":{"position":[[27,4],[102,5],[158,4],[228,4],[433,4],[469,4],[1009,5]]},"417":{"position":[[91,6]]},"421":{"position":[[80,4]]},"433":{"position":[[1,4]]},"438":{"position":[[91,6]]},"445":{"position":[[15,4],[107,5]]},"446":{"position":[[299,4],[329,4]]},"448":{"position":[[775,5]]},"502":{"position":[[551,6]]},"517":{"position":[[3308,5],[3607,5]]},"522":{"position":[[472,5]]},"523":{"position":[[10,4]]},"524":{"position":[[10,4]]},"529":{"position":[[505,5]]},"530":{"position":[[472,5]]},"531":{"position":[[10,4],[120,4],[401,4]]},"532":{"position":[[10,4],[219,4]]},"543":{"position":[[260,4]]},"545":{"position":[[91,6]]},"580":{"position":[[154,5]]},"590":{"position":[[335,6],[543,5],[930,5],[1018,6]]},"608":{"position":[[105,4]]},"628":{"position":[[264,4]]},"637":{"position":[[85,4],[265,4]]},"645":{"position":[[223,4]]},"652":{"position":[[223,4]]},"683":{"position":[[151,4]]},"712":{"position":[[317,4]]},"717":{"position":[[68,4]]},"723":{"position":[[39,4]]},"739":{"position":[[76,4]]},"750":{"position":[[744,4]]},"752":{"position":[[347,4],[631,4]]},"753":{"position":[[1003,4],[1287,4]]},"757":{"position":[[160,5],[172,4],[190,4],[318,5]]},"758":{"position":[[205,5]]},"764":{"position":[[1085,5]]},"766":{"position":[[744,4]]},"767":{"position":[[1749,4],[1964,4]]},"770":{"position":[[160,5],[172,4],[190,4],[318,5]]},"771":{"position":[[205,5]]},"777":{"position":[[1085,5]]},"780":{"position":[[211,4]]},"782":{"position":[[194,5],[200,4],[214,4],[305,5]]},"783":{"position":[[169,5],[226,5]]},"789":{"position":[[1145,4]]},"791":{"position":[[300,4],[584,4],[647,5]]},"792":{"position":[[1689,4],[1904,4],[1967,5]]},"793":{"position":[[974,4],[1258,4],[1321,5]]},"797":{"position":[[160,5],[172,4],[190,4],[318,5]]},"798":{"position":[[203,5]]},"804":{"position":[[1083,5]]},"807":{"position":[[732,4]]},"808":{"position":[[920,4],[1204,4],[1267,5]]},"812":{"position":[[160,5],[172,4],[190,4],[318,5]]},"813":{"position":[[203,5]]},"819":{"position":[[1083,5]]},"823":{"position":[[732,4]]},"824":{"position":[[1811,4],[2026,4],[2089,5]]},"828":{"position":[[160,5],[172,4],[190,4],[318,5]]},"829":{"position":[[203,5]]},"835":{"position":[[1083,5]]},"839":{"position":[[196,4]]},"840":{"position":[[1587,4],[1652,6],[1668,4],[2044,5],[2061,4],[2148,4]]},"848":{"position":[[233,4]]},"849":{"position":[[2619,4],[2693,6],[2709,4],[3184,5],[3201,4],[3288,4]]},"857":{"position":[[135,4],[160,4],[199,4]]},"862":{"position":[[154,4]]},"864":{"position":[[31,4],[132,5],[196,4],[322,4],[953,4],[1671,4]]},"865":{"position":[[153,4]]},"867":{"position":[[153,5],[181,4],[277,5]]},"868":{"position":[[174,5]]},"869":{"position":[[354,4]]},"871":{"position":[[96,7],[158,4],[200,6]]},"874":{"position":[[154,4]]},"876":{"position":[[31,4],[132,5],[196,4],[322,4],[818,4],[931,4]]},"877":{"position":[[181,4],[203,4]]},"879":{"position":[[1681,4]]},"880":{"position":[[201,5]]},"900":{"position":[[229,4],[281,4]]},"904":{"position":[[1350,4],[1458,4],[2188,5]]},"907":{"position":[[249,5],[255,4],[273,4],[395,5],[465,6]]},"908":{"position":[[249,5]]},"917":{"position":[[174,4],[293,4],[320,4],[1697,5]]},"918":{"position":[[1642,4],[1750,4],[2480,5]]},"919":{"position":[[824,4],[883,4],[2647,4]]},"923":{"position":[[249,5],[255,4],[273,4],[395,5],[465,6]]},"924":{"position":[[249,5]]},"931":{"position":[[1007,4],[1115,4],[1850,5]]},"934":{"position":[[249,5],[255,4],[273,4],[395,5],[465,6]]},"935":{"position":[[249,5]]},"945":{"position":[[342,5]]},"950":{"position":[[249,5],[255,4],[273,4],[395,5],[465,6]]},"951":{"position":[[249,5]]},"964":{"position":[[29,5]]},"965":{"position":[[174,4],[293,4],[320,4],[1697,5]]},"968":{"position":[[249,5],[255,4],[273,4],[395,5],[465,6]]},"969":{"position":[[249,5]]},"974":{"position":[[148,5]]},"977":{"position":[[49,5],[433,5],[612,5]]},"985":{"position":[[541,4]]},"987":{"position":[[234,4],[307,5]]},"989":{"position":[[31,5],[80,4],[394,5],[884,4],[983,4],[1055,5],[1075,5]]},"1000":{"position":[[719,4],[909,5]]},"1002":{"position":[[234,4],[307,5]]},"1004":{"position":[[31,5],[80,4],[477,5],[967,4],[1066,4],[1138,5],[1158,5]]},"1021":{"position":[[1113,6]]},"1031":{"position":[[395,4]]},"1032":{"position":[[13,4],[472,4],[541,4],[647,4],[779,4],[959,4]]},"1034":{"position":[[359,5],[365,4],[384,4],[472,4],[601,4],[692,6]]},"1036":{"position":[[91,6]]},"1037":{"position":[[201,5]]},"1040":{"position":[[674,4]]},"1042":{"position":[[149,4],[254,4],[309,4]]},"1043":{"position":[[682,4],[813,4],[918,4],[973,4]]},"1045":{"position":[[234,5],[240,4],[258,4],[380,5],[450,6]]},"1046":{"position":[[190,5]]},"1050":{"position":[[674,4]]},"1051":{"position":[[938,4],[1075,4],[1180,4],[1235,4]]},"1053":{"position":[[234,5],[240,4],[258,4],[380,5],[450,6]]},"1054":{"position":[[190,5]]},"1058":{"position":[[674,4]]},"1059":{"position":[[702,4],[864,4],[973,4],[1028,4]]},"1061":{"position":[[234,5],[240,4],[258,4],[380,5],[450,6]]},"1062":{"position":[[190,5]]},"1067":{"position":[[486,4]]},"1122":{"position":[[45,4],[415,5]]},"1133":{"position":[[321,4]]},"1134":{"position":[[2964,5]]},"1136":{"position":[[87,4]]},"1138":{"position":[[501,5],[736,5],[742,4],[756,4]]},"1139":{"position":[[176,5]]},"1140":{"position":[[2478,4]]},"1142":{"position":[[151,4],[216,5]]},"1149":{"position":[[112,4],[606,4],[664,5]]},"1151":{"position":[[202,5],[208,4],[222,4],[313,5],[487,4]]},"1152":{"position":[[215,5],[221,4]]},"1160":{"position":[[151,4],[249,4],[379,5]]},"1166":{"position":[[123,5]]},"1168":{"position":[[151,4],[216,5]]},"1177":{"position":[[166,4],[203,4]]},"1185":{"position":[[158,4]]},"1186":{"position":[[648,4]]},"1203":{"position":[[562,5],[590,5]]},"1204":{"position":[[200,5],[508,5]]},"1207":{"position":[[277,4]]},"1253":{"position":[[267,5],[273,4],[287,4],[378,5]]},"1254":{"position":[[209,5],[266,5]]},"1258":{"position":[[200,4],[258,5]]},"1264":{"position":[[114,4]]},"1267":{"position":[[256,5],[262,4]]},"1270":{"position":[[181,5]]},"1277":{"position":[[721,6]]},"1281":{"position":[[84,4],[224,4]]},"1285":{"position":[[320,5],[342,5],[348,4],[362,4],[796,6]]},"1287":{"position":[[170,5]]},"1292":{"position":[[6708,4]]},"1295":{"position":[[84,4],[224,4]]},"1298":{"position":[[205,4]]},"1300":{"position":[[320,5],[342,5],[348,4],[362,4],[796,6]]},"1302":{"position":[[170,5]]},"1303":{"position":[[1287,4],[1335,4],[1424,4],[1491,5]]},"1306":{"position":[[6708,4]]},"1309":{"position":[[87,4]]},"1313":{"position":[[311,5],[546,5],[552,4],[566,4],[650,6]]},"1314":{"position":[[173,5]]},"1316":{"position":[[2478,4]]},"1319":{"position":[[84,4],[224,4]]},"1322":{"position":[[239,4],[894,4],[911,5]]},"1324":{"position":[[320,5],[342,5],[348,4],[362,4],[796,6]]},"1326":{"position":[[170,5]]},"1329":{"position":[[6708,4]]},"1332":{"position":[[87,4]]},"1335":{"position":[[239,4],[894,4],[911,5]]},"1337":{"position":[[311,5],[546,5],[552,4],[566,4],[650,6]]},"1338":{"position":[[173,5]]},"1340":{"position":[[2478,4]]},"1343":{"position":[[87,4]]},"1346":{"position":[[205,4]]},"1348":{"position":[[311,5],[546,5],[552,4],[566,4],[650,6]]},"1349":{"position":[[173,5]]},"1351":{"position":[[2478,4]]},"1372":{"position":[[88,4],[224,4]]},"1373":{"position":[[920,4],[992,4],[1101,4]]},"1374":{"position":[[920,4],[992,4],[1105,4]]},"1376":{"position":[[320,5],[342,5],[348,4],[362,4]]},"1377":{"position":[[174,5]]},"1379":{"position":[[4587,4]]},"1382":{"position":[[223,4]]},"1383":{"position":[[1046,4],[1070,4],[1250,4]]},"1384":{"position":[[170,4],[601,4],[639,4],[785,4]]},"1386":{"position":[[623,4],[869,4]]},"1387":{"position":[[1,4],[267,5],[812,5]]},"1396":{"position":[[88,4],[224,4]]},"1397":{"position":[[699,4],[771,4],[880,4]]},"1398":{"position":[[698,4],[770,4],[883,4]]},"1400":{"position":[[320,5],[342,5],[348,4],[362,4]]},"1401":{"position":[[174,5]]},"1403":{"position":[[4587,4]]},"1406":{"position":[[88,4],[224,4]]},"1408":{"position":[[90,4],[199,4]]},"1409":{"position":[[682,4],[754,4],[863,4]]},"1411":{"position":[[320,5],[342,5],[348,4],[362,4]]},"1412":{"position":[[174,5]]},"1414":{"position":[[4587,4]]},"1417":{"position":[[330,4]]},"1425":{"position":[[96,4]]},"1427":{"position":[[252,5],[487,5],[493,4],[507,4]]},"1428":{"position":[[214,5]]},"1431":{"position":[[2501,4]]},"1455":{"position":[[71,4]]},"1456":{"position":[[55,4]]},"1461":{"position":[[3887,5],[4430,5],[4603,4],[4830,4],[5067,4],[5206,4],[5305,4]]}},"keywords":{}}],["user"",{"_index":3811,"title":{},"content":{"475":{"position":[[167,10]]},"477":{"position":[[96,10],[1032,10]]}},"keywords":{}}],["user'",{"_index":1539,"title":{},"content":{"107":{"position":[[1585,6],[2682,6],[3433,6]]},"415":{"position":[[286,6]]},"531":{"position":[[172,6]]},"840":{"position":[[1745,6]]},"849":{"position":[[2786,6]]},"989":{"position":[[455,6]]},"1004":{"position":[[538,6]]},"1032":{"position":[[607,6]]},"1461":{"position":[[4868,6]]}},"keywords":{}}],["user/id",{"_index":454,"title":{},"content":{"16":{"position":[[199,10]]}},"keywords":{}}],["user@19.220.21.33:22",{"_index":4883,"title":{},"content":{"868":{"position":[[422,20]]},"880":{"position":[[423,20]]}},"keywords":{}}],["user@domain.com",{"_index":2471,"title":{},"content":{"223":{"position":[[773,15]]},"1134":{"position":[[186,15]]},"1298":{"position":[[773,15]]},"1346":{"position":[[773,15]]}},"keywords":{}}],["user_id",{"_index":2763,"title":{},"content":{"253":{"position":[[3141,7]]},"254":{"position":[[323,8],[520,7],[543,8],[696,8],[1391,8],[1588,7],[1793,7],[2178,8],[2753,8],[3414,8],[3602,8],[3971,7]]},"1391":{"position":[[554,9],[631,9],[836,8],[915,9]]}},"keywords":{}}],["user_password",{"_index":6389,"title":{},"content":{"1386":{"position":[[814,13],[958,13]]}},"keywords":{}}],["user_pasword",{"_index":6391,"title":{},"content":{"1387":{"position":[[254,12]]}},"keywords":{}}],["user_resourc",{"_index":6242,"title":{},"content":{"1292":{"position":[[6744,13]]},"1306":{"position":[[6744,13]]},"1329":{"position":[[6744,13]]}},"keywords":{}}],["usera",{"_index":4551,"title":{},"content":{"739":{"position":[[113,5]]}},"keywords":{}}],["userad",{"_index":4990,"title":{},"content":{"900":{"position":[[150,6]]}},"keywords":{}}],["userecoveri",{"_index":566,"title":{},"content":{"21":{"position":[[442,11]]}},"keywords":{}}],["userid",{"_index":1056,"title":{},"content":{"71":{"position":[[238,9],[519,10],[618,6],[715,6]]},"74":{"position":[[706,9],[768,8]]},"128":{"position":[[519,7],[564,7],[699,7]]},"129":{"position":[[764,7],[805,7],[892,7],[939,7],[1053,8],[1099,7],[1222,7],[1238,7]]},"130":{"position":[[251,7],[302,7]]}},"keywords":{}}],["usernam",{"_index":1143,"title":{},"content":{"82":{"position":[[67,8]]},"154":{"position":[[1065,9]]},"183":{"position":[[4359,9]]},"184":{"position":[[384,8]]},"201":{"position":[[155,8]]},"206":{"position":[[323,8]]},"223":{"position":[[666,9]]},"247":{"position":[[219,9],[336,9]]},"338":{"position":[[89,8]]},"418":{"position":[[258,9]]},"429":{"position":[[846,8]]},"432":{"position":[[838,8],[847,9]]},"433":{"position":[[270,9]]},"439":{"position":[[515,9]]},"546":{"position":[[995,9]]},"570":{"position":[[124,8]]},"581":{"position":[[417,8]]},"615":{"position":[[93,8]]},"635":{"position":[[508,8]]},"637":{"position":[[270,9]]},"638":{"position":[[287,9]]},"683":{"position":[[111,8]]},"748":{"position":[[167,9]]},"753":{"position":[[791,8]]},"793":{"position":[[762,8]]},"840":{"position":[[2613,8]]},"842":{"position":[[1101,8]]},"867":{"position":[[159,8]]},"879":{"position":[[342,8],[585,8],[598,8],[725,9]]},"880":{"position":[[264,8],[288,9]]},"1021":{"position":[[425,9],[435,8],[444,8]]},"1022":{"position":[[133,9],[324,9]]},"1067":{"position":[[446,8]]},"1082":{"position":[[220,8]]},"1118":{"position":[[431,9]]},"1195":{"position":[[300,8]]},"1196":{"position":[[305,8],[314,8]]},"1197":{"position":[[284,9]]},"1206":{"position":[[757,9],[767,8],[785,9]]},"1207":{"position":[[258,9]]},"1227":{"position":[[286,8]]},"1244":{"position":[[19,8]]},"1267":{"position":[[267,8]]},"1298":{"position":[[666,9]]},"1346":{"position":[[666,9]]},"1386":{"position":[[884,8]]}},"keywords":{}}],["username/password",{"_index":4758,"title":{},"content":{"842":{"position":[[993,17]]}},"keywords":{}}],["username@databasenam",{"_index":5049,"title":{},"content":{"919":{"position":[[2655,22]]}},"keywords":{}}],["username@servernam",{"_index":4600,"title":{},"content":{"753":{"position":[[832,20]]},"793":{"position":[[803,20]]}},"keywords":{}}],["userpassword",{"_index":3675,"title":{},"content":{"432":{"position":[[534,12]]},"433":{"position":[[232,12]]}},"keywords":{}}],["userprofil",{"_index":6628,"title":{},"content":{"1461":{"position":[[4995,12]]}},"keywords":{}}],["userprofile.flow.yaml",{"_index":6627,"title":{},"content":{"1461":{"position":[[4918,21],[4961,21]]}},"keywords":{}}],["users.authent",{"_index":1752,"title":{},"content":{"135":{"position":[[559,20]]}},"keywords":{}}],["users/*/messag",{"_index":4242,"title":{},"content":{"590":{"position":[[940,16]]}},"keywords":{}}],["users/alice/messag",{"_index":4237,"title":{},"content":{"590":{"position":[[451,22]]}},"keywords":{}}],["users/alice/messages/1",{"_index":4238,"title":{},"content":{"590":{"position":[[517,24]]}},"keywords":{}}],["users/rol",{"_index":4739,"title":{},"content":{"840":{"position":[[906,11],[1628,11],[1969,11]]},"849":{"position":[[1519,11],[2669,11],[3088,11]]}},"keywords":{}}],["userscampaign",{"_index":4510,"title":{},"content":{"715":{"position":[[62,13]]}},"keywords":{}}],["usersdaili",{"_index":4149,"title":{},"content":{"568":{"position":[[202,10]]}},"keywords":{}}],["usersdevic",{"_index":4150,"title":{},"content":{"568":{"position":[[220,12]]}},"keywords":{}}],["usersdevicesfour",{"_index":4214,"title":{},"content":{"580":{"position":[[59,16]]}},"keywords":{}}],["usersfour",{"_index":4146,"title":{},"content":{"568":{"position":[[136,9]]}},"keywords":{}}],["userslocationspagestraff",{"_index":4215,"title":{},"content":{"580":{"position":[[90,26]]}},"keywords":{}}],["usersmessag",{"_index":4458,"title":{},"content":{"697":{"position":[[226,12]]}},"keywords":{}}],["userstwo",{"_index":4147,"title":{},"content":{"568":{"position":[[160,8]]}},"keywords":{}}],["usersweekli",{"_index":4148,"title":{},"content":{"568":{"position":[[183,11]]}},"keywords":{}}],["userus",{"_index":4411,"title":{},"content":{"667":{"position":[[166,8]]}},"keywords":{}}],["usingdock",{"_index":1115,"title":{},"content":{"81":{"position":[[90,11]]}},"keywords":{}}],["usr/local/bin/flowctl",{"_index":881,"title":{},"content":{"58":{"position":[[336,22],[467,22],[512,22],[646,22]]},"169":{"position":[[577,22],[708,22],[756,22],[890,22]]}},"keywords":{}}],["usual",{"_index":423,"title":{},"content":{"14":{"position":[[291,7]]},"91":{"position":[[75,8]]},"138":{"position":[[1645,8]]},"141":{"position":[[1650,8]]},"142":{"position":[[1662,8]]},"157":{"position":[[55,7]]},"165":{"position":[[2284,7]]},"290":{"position":[[962,7]]},"480":{"position":[[1620,7]]},"753":{"position":[[1602,8]]},"793":{"position":[[1625,8]]},"821":{"position":[[316,7],[1267,7]]},"870":{"position":[[1018,7]]},"909":{"position":[[40,7]]},"912":{"position":[[327,7]]},"919":{"position":[[2532,8]]},"925":{"position":[[40,7]]},"936":{"position":[[40,7]]},"952":{"position":[[40,7]]},"970":{"position":[[40,7]]},"1047":{"position":[[1017,6]]},"1055":{"position":[[1017,6]]},"1063":{"position":[[1017,6]]},"1076":{"position":[[247,8]]},"1289":{"position":[[1720,8]]},"1310":{"position":[[1041,8]]},"1453":{"position":[[1384,7]]}},"keywords":{}}],["utc",{"_index":1803,"title":{},"content":{"138":{"position":[[2260,4],[2688,3]]},"141":{"position":[[2216,4],[2278,3]]},"142":{"position":[[2320,4],[2765,3]]},"424":{"position":[[208,3]]},"448":{"position":[[970,3]]},"454":{"position":[[398,3]]},"460":{"position":[[212,3]]},"509":{"position":[[371,3]]},"556":{"position":[[1700,3],[2074,3]]},"611":{"position":[[797,3],[1064,3]]},"631":{"position":[[212,3],[351,3]]},"654":{"position":[[452,3]]},"670":{"position":[[508,3]]},"685":{"position":[[332,3]]},"700":{"position":[[160,3]]},"706":{"position":[[160,3]]},"720":{"position":[[683,3]]},"741":{"position":[[275,3]]},"754":{"position":[[503,4]]},"794":{"position":[[376,4]]},"809":{"position":[[376,4]]},"825":{"position":[[376,4]]},"859":{"position":[[503,3]]},"885":{"position":[[461,3]]},"891":{"position":[[164,3]]},"1015":{"position":[[274,3]]},"1028":{"position":[[83,3],[221,3]]},"1070":{"position":[[659,3]]},"1076":{"position":[[621,3]]},"1113":{"position":[[212,3]]},"1172":{"position":[[557,3],[646,3]]},"1222":{"position":[[557,3],[646,3]]},"1286":{"position":[[433,4]]},"1291":{"position":[[132,3],[153,3]]},"1301":{"position":[[433,4]]},"1305":{"position":[[132,3],[153,3]]},"1325":{"position":[[433,4]]},"1328":{"position":[[132,3],[153,3]]},"1452":{"position":[[3395,4]]}},"keywords":{}}],["utc_dat",{"_index":183,"title":{},"content":{"4":{"position":[[615,9]]},"1292":{"position":[[6147,8]]},"1306":{"position":[[6147,8]]},"1329":{"position":[[6147,8]]}},"keywords":{}}],["utc_date=2022",{"_index":134,"title":{},"content":{"3":{"position":[[789,13]]}},"keywords":{}}],["utc_hour",{"_index":487,"title":{},"content":{"16":{"position":[[1293,8]]}},"keywords":{}}],["utc_hourand",{"_index":184,"title":{},"content":{"4":{"position":[[629,11]]}},"keywords":{}}],["utc_tim",{"_index":6222,"title":{},"content":{"1292":{"position":[[6187,8]]},"1306":{"position":[[6187,8]]},"1329":{"position":[[6187,8]]}},"keywords":{}}],["utc_timestamp",{"_index":6225,"title":{},"content":{"1292":{"position":[[6227,13]]},"1306":{"position":[[6227,13]]},"1329":{"position":[[6227,13]]}},"keywords":{}}],["utf",{"_index":3603,"title":{},"content":{"418":{"position":[[220,3]]},"439":{"position":[[477,3]]},"546":{"position":[[957,3]]},"638":{"position":[[249,3]]},"1022":{"position":[[286,3]]},"1196":{"position":[[631,3]]}},"keywords":{}}],["util",{"_index":176,"title":{},"content":{"4":{"position":[[547,7]]},"99":{"position":[[135,7]]},"202":{"position":[[108,8]]},"478":{"position":[[89,7]]},"599":{"position":[[89,7]]},"976":{"position":[[125,8]]}},"keywords":{}}],["uuid",{"_index":996,"title":{},"content":{"67":{"position":[[134,5],[1213,4]]},"314":{"position":[[1181,5]]},"315":{"position":[[1100,6]]},"750":{"position":[[557,5]]},"766":{"position":[[557,5]]},"789":{"position":[[545,5]]},"807":{"position":[[545,5]]},"823":{"position":[[545,5]]},"1164":{"position":[[628,5],[690,4]]},"1172":{"position":[[847,5],[853,4]]},"1222":{"position":[[847,5],[853,4]]}},"keywords":{}}],["v",{"_index":6660,"title":{},"content":{"1467":{"position":[[2504,2],[2532,2],[2596,2],[2624,2],[2750,2],[2778,2],[2806,2]]}},"keywords":{}}],["v$databas",{"_index":4858,"title":{},"content":{"864":{"position":[[1163,10]]}},"keywords":{}}],["v$log",{"_index":4859,"title":{},"content":{"864":{"position":[[1257,5]]}},"keywords":{}}],["v/tn1a2oyu0qay1dowknee0i+/bvf8lms7vdjhmwrabtred/+iaqhf128qidaqab",{"_index":1244,"title":{},"content":{"83":{"position":[[1637,64]]},"371":{"position":[[556,64]]},"1139":{"position":[[443,64]]}},"keywords":{}}],["v0000000000",{"_index":5735,"title":{},"content":{"1146":{"position":[[515,11]]},"1173":{"position":[[527,11]]},"1215":{"position":[[515,11]]},"1223":{"position":[[527,11]]}},"keywords":{}}],["v1",{"_index":3270,"title":{},"content":{"355":{"position":[[32,3],[68,3]]},"1293":{"position":[[301,3]]},"1307":{"position":[[301,3]]},"1330":{"position":[[301,3]]},"1380":{"position":[[301,3]]},"1404":{"position":[[301,3]]},"1415":{"position":[[301,3]]}},"keywords":{}}],["v14",{"_index":5035,"title":{},"content":{"917":{"position":[[425,3]]},"919":{"position":[[959,3]]},"965":{"position":[[425,3]]}},"keywords":{}}],["v2",{"_index":2501,"title":{},"content":{"236":{"position":[[458,3]]},"1164":{"position":[[106,2]]},"1359":{"position":[[301,3]]}},"keywords":{}}],["v2:v3",{"_index":4784,"title":{},"content":{"843":{"position":[[99,5]]}},"keywords":{}}],["v3",{"_index":5849,"title":{},"content":{"1201":{"position":[[301,3]]}},"keywords":{}}],["v4",{"_index":6256,"title":{},"content":{"1317":{"position":[[301,3]]},"1341":{"position":[[301,3]]},"1352":{"position":[[301,3]]},"1432":{"position":[[301,3]]}},"keywords":{}}],["v4:dev",{"_index":4199,"title":{},"content":{"575":{"position":[[162,6]]}},"keywords":{}}],["vacuum",{"_index":6297,"title":{},"content":{"1370":{"position":[[1241,6]]}},"keywords":{}}],["val",{"_index":1613,"title":{},"content":{"114":{"position":[[335,3],[341,3],[357,4],[376,3],[382,3],[398,4],[417,3],[423,3],[439,4]]}},"keywords":{}}],["valid",{"_index":681,"title":{},"content":{"34":{"position":[[822,10]]},"35":{"position":[[212,9]]},"41":{"position":[[82,9],[202,9]]},"69":{"position":[[302,10]]},"70":{"position":[[90,8]]},"88":{"position":[[29,9]]},"106":{"position":[[423,8]]},"128":{"position":[[70,8]]},"129":{"position":[[555,8]]},"156":{"position":[[329,11]]},"158":{"position":[[178,11]]},"159":{"position":[[127,9],[724,10]]},"160":{"position":[[358,9]]},"188":{"position":[[181,5]]},"309":{"position":[[504,10],[580,5],[786,10],[3387,8]]},"323":{"position":[[1058,8]]},"332":{"position":[[549,5]]},"377":{"position":[[820,5],[1025,5]]},"485":{"position":[[212,5]]},"558":{"position":[[170,5],[246,8]]},"637":{"position":[[1064,5]]},"657":{"position":[[212,5]]},"673":{"position":[[212,5]]},"688":{"position":[[212,5]]},"757":{"position":[[614,5]]},"770":{"position":[[614,5]]},"797":{"position":[[614,5]]},"812":{"position":[[614,5]]},"828":{"position":[[614,5]]},"1123":{"position":[[638,5]]},"1162":{"position":[[672,5]]},"1268":{"position":[[480,10]]},"1285":{"position":[[626,5]]},"1292":{"position":[[6268,10]]},"1300":{"position":[[626,5]]},"1306":{"position":[[6268,10]]},"1324":{"position":[[626,5]]},"1329":{"position":[[6268,10]]},"1452":{"position":[[663,5],[3188,5],[4269,5]]},"1456":{"position":[[381,5]]}},"keywords":{}}],["validactionbreakdown",{"_index":3947,"title":{},"content":{"517":{"position":[[1081,21]]}},"keywords":{}}],["validbreakdown",{"_index":3949,"title":{},"content":{"517":{"position":[[1301,15]]}},"keywords":{}}],["validenum",{"_index":3952,"title":{},"content":{"517":{"position":[[1795,10]]}},"keywords":{}}],["valu",{"_index":464,"title":{"909":{"position":[[8,7]]},"925":{"position":[[8,7]]},"936":{"position":[[8,7]]},"952":{"position":[[8,7]]},"970":{"position":[[8,7]]}},"content":{"16":{"position":[[448,6]]},"17":{"position":[[399,6],[763,6]]},"21":{"position":[[709,7]]},"66":{"position":[[95,5]]},"76":{"position":[[543,6]]},"82":{"position":[[529,6],[1722,7],[1912,5],[3524,7],[3647,7],[3985,6],[4236,6]]},"94":{"position":[[1731,5],[2097,5]]},"98":{"position":[[634,6]]},"107":{"position":[[2990,5]]},"114":{"position":[[280,6]]},"115":{"position":[[458,5],[1246,5]]},"120":{"position":[[1283,5],[1649,5]]},"122":{"position":[[916,6],[1905,6]]},"132":{"position":[[512,6],[532,6],[552,6],[593,5],[672,6]]},"138":{"position":[[2665,5]]},"141":{"position":[[2255,5]]},"142":{"position":[[2742,5]]},"149":{"position":[[1309,6]]},"156":{"position":[[366,7]]},"159":{"position":[[555,6]]},"160":{"position":[[769,7],[809,6],[893,7]]},"165":{"position":[[1304,6]]},"166":{"position":[[49,6],[171,6],[258,6],[307,6]]},"191":{"position":[[487,5]]},"207":{"position":[[1204,6]]},"240":{"position":[[461,5],[2620,6],[3069,5]]},"254":{"position":[[1988,7],[3699,5],[3825,6]]},"278":{"position":[[1245,6]]},"280":{"position":[[2099,6]]},"307":{"position":[[2873,6]]},"309":{"position":[[730,7],[2624,6],[3369,6]]},"319":{"position":[[1587,5]]},"332":{"position":[[480,5]]},"343":{"position":[[1046,5]]},"350":{"position":[[166,6]]},"358":{"position":[[166,6]]},"369":{"position":[[166,6]]},"376":{"position":[[166,6]]},"386":{"position":[[166,6]]},"391":{"position":[[166,6]]},"396":{"position":[[166,6]]},"401":{"position":[[212,6]]},"402":{"position":[[829,6]]},"406":{"position":[[180,6]]},"407":{"position":[[166,6]]},"416":{"position":[[166,6]]},"419":{"position":[[1541,7],[2485,5],[2533,6]]},"423":{"position":[[166,6]]},"431":{"position":[[166,6]]},"435":{"position":[[29,6]]},"436":{"position":[[7,6],[653,5],[760,6],[1041,6]]},"437":{"position":[[166,6]]},"441":{"position":[[150,7],[1094,5],[1142,6]]},"447":{"position":[[166,6]]},"448":{"position":[[1175,6]]},"453":{"position":[[166,6]]},"459":{"position":[[166,6]]},"465":{"position":[[166,6]]},"472":{"position":[[166,6]]},"480":{"position":[[1161,5]]},"481":{"position":[[166,6]]},"487":{"position":[[315,5]]},"489":{"position":[[295,7],[362,6],[578,5],[637,5]]},"492":{"position":[[308,5],[334,5]]},"495":{"position":[[166,6]]},"501":{"position":[[122,6]]},"504":{"position":[[1170,7],[2114,5],[2162,6]]},"508":{"position":[[166,6]]},"516":{"position":[[166,6]]},"517":{"position":[[562,5],[2319,5]]},"525":{"position":[[166,6]]},"533":{"position":[[166,6]]},"534":{"position":[[1068,6]]},"539":{"position":[[166,6]]},"544":{"position":[[166,6]]},"547":{"position":[[1543,7],[2487,5],[2535,6]]},"555":{"position":[[163,6]]},"556":{"position":[[1555,5]]},"563":{"position":[[230,6]]},"572":{"position":[[166,6]]},"573":{"position":[[1171,5]]},"577":{"position":[[471,6]]},"583":{"position":[[156,6]]},"584":{"position":[[743,6],[1234,5]]},"588":{"position":[[466,6]]},"590":{"position":[[126,7]]},"592":{"position":[[163,6]]},"610":{"position":[[166,6]]},"618":{"position":[[166,6]]},"624":{"position":[[166,6]]},"625":{"position":[[80,5]]},"630":{"position":[[166,6]]},"636":{"position":[[166,6]]},"637":{"position":[[522,6],[536,5]]},"639":{"position":[[1168,7],[2112,5],[2160,6]]},"646":{"position":[[166,6]]},"653":{"position":[[166,6]]},"660":{"position":[[553,5],[757,5],[1028,5]]},"662":{"position":[[295,7],[362,6],[578,5],[637,5]]},"665":{"position":[[308,5],[334,5]]},"669":{"position":[[166,6]]},"670":{"position":[[287,5]]},"677":{"position":[[295,7],[362,6],[578,5],[637,5]]},"680":{"position":[[308,5],[334,5]]},"684":{"position":[[166,6]]},"692":{"position":[[295,7],[362,6],[578,5],[637,5]]},"695":{"position":[[308,5],[334,5]]},"699":{"position":[[166,6]]},"700":{"position":[[80,5]]},"705":{"position":[[166,6]]},"706":{"position":[[81,5]]},"711":{"position":[[166,6]]},"719":{"position":[[161,6]]},"727":{"position":[[166,6]]},"728":{"position":[[364,5],[482,5]]},"734":{"position":[[166,6]]},"740":{"position":[[166,6]]},"746":{"position":[[166,6]]},"750":{"position":[[218,5],[382,5]]},"756":{"position":[[166,6]]},"757":{"position":[[1273,5],[1362,6]]},"764":{"position":[[175,6]]},"766":{"position":[[218,5],[382,5]]},"767":{"position":[[2278,5]]},"769":{"position":[[166,6]]},"770":{"position":[[1273,5],[1362,6]]},"777":{"position":[[175,6]]},"779":{"position":[[123,7]]},"781":{"position":[[163,6]]},"785":{"position":[[955,6]]},"789":{"position":[[192,5],[252,5]]},"792":{"position":[[2270,5]]},"794":{"position":[[417,6],[495,6],[757,6]]},"796":{"position":[[167,6]]},"797":{"position":[[1273,5],[1362,6]]},"804":{"position":[[173,6]]},"807":{"position":[[192,5],[252,5]]},"809":{"position":[[417,6],[495,6],[757,6]]},"811":{"position":[[166,6]]},"812":{"position":[[1273,5],[1362,6]]},"819":{"position":[[173,6]]},"823":{"position":[[192,5],[252,5]]},"824":{"position":[[2392,5]]},"825":{"position":[[417,6],[495,6]]},"827":{"position":[[166,6]]},"828":{"position":[[1273,5],[1362,6]]},"835":{"position":[[173,6]]},"841":{"position":[[166,6]]},"847":{"position":[[161,6]]},"850":{"position":[[166,6]]},"858":{"position":[[166,6]]},"866":{"position":[[166,6]]},"867":{"position":[[1981,5],[2070,6]]},"870":{"position":[[962,5]]},"878":{"position":[[166,6]]},"884":{"position":[[166,6]]},"890":{"position":[[167,6]]},"896":{"position":[[166,6]]},"906":{"position":[[166,6]]},"909":{"position":[[102,6],[138,6],[272,6],[455,6],[478,5],[590,5],[741,6],[908,5],[933,5],[1266,6]]},"910":{"position":[[62,7],[266,6]]},"921":{"position":[[166,6]]},"922":{"position":[[2313,5],[3085,5],[3181,5],[3320,5]]},"925":{"position":[[102,6],[138,6],[272,6],[455,6],[478,5],[590,5],[741,6],[908,5],[933,5],[1266,6]]},"926":{"position":[[62,7],[266,6]]},"933":{"position":[[166,6]]},"936":{"position":[[102,6],[138,6],[272,6],[455,6],[478,5],[590,5],[741,6],[908,5],[933,5],[1266,6]]},"937":{"position":[[62,7],[266,6]]},"947":{"position":[[636,6],[683,6]]},"949":{"position":[[166,6]]},"952":{"position":[[102,6],[138,6],[272,6],[455,6],[478,5],[590,5],[741,6],[908,5],[933,5],[1266,6]]},"953":{"position":[[62,7],[266,6]]},"958":{"position":[[166,6]]},"959":{"position":[[91,5]]},"967":{"position":[[166,6]]},"970":{"position":[[102,6],[138,6],[272,6],[455,6],[478,5],[590,5],[741,6],[908,5],[933,5],[1266,6]]},"971":{"position":[[62,7],[266,6]]},"981":{"position":[[166,6]]},"982":{"position":[[89,5]]},"990":{"position":[[166,6]]},"991":{"position":[[181,6]]},"996":{"position":[[166,6]]},"1005":{"position":[[163,6]]},"1006":{"position":[[211,6],[491,6]]},"1009":{"position":[[181,6],[1408,6],[1422,5]]},"1010":{"position":[[386,6]]},"1014":{"position":[[166,6]]},"1021":{"position":[[166,6]]},"1023":{"position":[[1524,7],[2468,5],[2516,6]]},"1027":{"position":[[166,6]]},"1033":{"position":[[170,6]]},"1044":{"position":[[166,6]]},"1047":{"position":[[608,5]]},"1052":{"position":[[166,6]]},"1055":{"position":[[608,5]]},"1060":{"position":[[166,6]]},"1063":{"position":[[608,5]]},"1069":{"position":[[166,6]]},"1075":{"position":[[166,6]]},"1076":{"position":[[494,5]]},"1084":{"position":[[166,6]]},"1093":{"position":[[166,6]]},"1100":{"position":[[166,6]]},"1106":{"position":[[167,6]]},"1112":{"position":[[166,6]]},"1124":{"position":[[166,6]]},"1132":{"position":[[167,6]]},"1133":{"position":[[213,5],[1130,5]]},"1140":{"position":[[2569,5],[2618,6]]},"1144":{"position":[[1105,7]]},"1146":{"position":[[68,7],[397,6]]},"1173":{"position":[[68,7],[409,6]]},"1186":{"position":[[587,5]]},"1200":{"position":[[435,5]]},"1213":{"position":[[782,7]]},"1215":{"position":[[68,7],[397,6]]},"1223":{"position":[[68,7],[409,6]]},"1250":{"position":[[123,7]]},"1252":{"position":[[163,6]]},"1268":{"position":[[118,6]]},"1275":{"position":[[409,6]]},"1279":{"position":[[275,6]]},"1286":{"position":[[474,6],[552,6],[814,6],[1641,7]]},"1292":{"position":[[6304,5],[6337,6]]},"1301":{"position":[[474,6],[552,6],[1477,7]]},"1306":{"position":[[6304,5],[6337,6]]},"1316":{"position":[[2569,5],[2618,6]]},"1317":{"position":[[728,6]]},"1325":{"position":[[474,6],[552,6],[814,6],[1641,7]]},"1329":{"position":[[6304,5],[6337,6]]},"1340":{"position":[[2569,5],[2618,6]]},"1341":{"position":[[728,6]]},"1351":{"position":[[2569,5],[2618,6]]},"1352":{"position":[[728,6]]},"1356":{"position":[[815,5]]},"1358":{"position":[[925,6]]},"1370":{"position":[[1255,6]]},"1379":{"position":[[4704,5],[4757,6]]},"1391":{"position":[[304,6]]},"1394":{"position":[[995,6]]},"1403":{"position":[[4704,5],[4757,6]]},"1414":{"position":[[4704,5],[4757,6]]},"1423":{"position":[[729,6]]},"1429":{"position":[[429,5],[548,7],[696,5]]},"1431":{"position":[[2592,5],[2641,6]]},"1432":{"position":[[742,6]]},"1437":{"position":[[1290,5]]},"1452":{"position":[[2345,5],[2878,5],[3048,6],[3108,5],[3547,7],[3869,6],[4041,5]]},"1453":{"position":[[988,5],[1175,5]]},"1463":{"position":[[71,5]]},"1464":{"position":[[232,6],[534,6],[576,6],[697,6]]},"1465":{"position":[[527,6],[1011,6],[1244,6],[1294,6],[1396,6],[1512,6],[1562,6],[1663,6]]},"1466":{"position":[[56,7],[191,6],[512,6],[549,6],[645,6]]},"1467":{"position":[[534,6],[1049,6],[1091,6],[1194,6],[1350,6],[1424,6],[1556,6],[2205,6],[2476,6],[2568,6],[2722,6]]},"1476":{"position":[[90,6],[1122,5],[1330,5],[1586,6]]},"1477":{"position":[[707,7],[1012,6],[1743,6],[1856,6],[1936,6],[2087,6],[2256,6],[2357,6],[2508,6],[2938,7],[3234,6],[4089,6],[4206,6],[4286,6],[4445,6],[4624,6],[4727,6],[4886,6]]},"1479":{"position":[[481,7],[518,6],[592,6]]},"1480":{"position":[[989,5],[1355,5]]}},"keywords":{}}],["valuabl",{"_index":2616,"title":{},"content":{"241":{"position":[[335,8]]}},"keywords":{}}],["value"",{"_index":6713,"title":{},"content":{"1476":{"position":[[1474,11]]}},"keywords":{}}],["value).binari",{"_index":4701,"title":{},"content":{"789":{"position":[[133,13]]},"807":{"position":[[133,13]]},"823":{"position":[[133,13]]}},"keywords":{}}],["value.go",{"_index":3700,"title":{},"content":{"436":{"position":[[546,8]]}},"keywords":{}}],["value_deserializer=lambda",{"_index":2668,"title":{},"content":{"250":{"position":[[910,25]]}},"keywords":{}}],["value_of",{"_index":5638,"title":{},"content":{"1140":{"position":[[2650,8]]},"1316":{"position":[[2650,8]]},"1340":{"position":[[2650,8]]},"1351":{"position":[[2650,8]]},"1431":{"position":[[2673,8]]}},"keywords":{}}],["valuedatabas",{"_index":5118,"title":{},"content":{"947":{"position":[[914,14]]}},"keywords":{}}],["values"",{"_index":6643,"title":{},"content":{"1463":{"position":[[552,13]]},"1476":{"position":[[385,13]]}},"keywords":{}}],["var_pop",{"_index":5647,"title":{},"content":{"1140":{"position":[[2841,7]]},"1316":{"position":[[2841,7]]},"1340":{"position":[[2841,7]]},"1351":{"position":[[2841,7]]},"1379":{"position":[[4803,7]]},"1403":{"position":[[4803,7]]},"1414":{"position":[[4803,7]]},"1431":{"position":[[2864,7]]}},"keywords":{}}],["var_samp",{"_index":5648,"title":{},"content":{"1140":{"position":[[2882,8]]},"1316":{"position":[[2882,8]]},"1340":{"position":[[2882,8]]},"1351":{"position":[[2882,8]]},"1379":{"position":[[4855,8]]},"1403":{"position":[[4855,8]]},"1414":{"position":[[4855,8]]},"1431":{"position":[[2905,8]]}},"keywords":{}}],["varbinari",{"_index":5640,"title":{},"content":{"1140":{"position":[[2698,9]]},"1292":{"position":[[6382,9]]},"1306":{"position":[[6382,9]]},"1316":{"position":[[2698,9]]},"1329":{"position":[[6382,9]]},"1340":{"position":[[2698,9]]},"1351":{"position":[[2698,9]]},"1431":{"position":[[2721,9]]}},"keywords":{}}],["varchar",{"_index":2550,"title":{},"content":{"236":{"position":[[2246,7],[2439,7],[3031,7],[3224,7]]},"1140":{"position":[[2732,7]]},"1209":{"position":[[870,7]]},"1292":{"position":[[6431,7]]},"1306":{"position":[[6431,7]]},"1316":{"position":[[2732,7]]},"1329":{"position":[[6431,7]]},"1340":{"position":[[2732,7]]},"1351":{"position":[[2732,7]]},"1379":{"position":[[4917,7]]},"1403":{"position":[[4917,7]]},"1414":{"position":[[4917,7]]},"1431":{"position":[[2755,7]]}},"keywords":{}}],["varchar(1000",{"_index":4853,"title":{},"content":{"864":{"position":[[868,13]]}},"keywords":{}}],["varchar(4000",{"_index":4854,"title":{},"content":{"864":{"position":[[905,15]]}},"keywords":{}}],["varcharact",{"_index":6231,"title":{},"content":{"1292":{"position":[[6474,12]]},"1306":{"position":[[6474,12]]},"1329":{"position":[[6474,12]]}},"keywords":{}}],["vari",{"_index":267,"title":{},"content":{"8":{"position":[[497,4]]},"63":{"position":[[628,5]]},"112":{"position":[[634,5]]},"221":{"position":[[186,5]]},"595":{"position":[[1777,4]]},"1140":{"position":[[2809,7]]},"1292":{"position":[[6556,7]]},"1306":{"position":[[6556,7]]},"1316":{"position":[[2809,7]]},"1329":{"position":[[6556,7]]},"1340":{"position":[[2809,7]]},"1351":{"position":[[2809,7]]},"1379":{"position":[[5023,7]]},"1403":{"position":[[5023,7]]},"1414":{"position":[[5023,7]]},"1431":{"position":[[2832,7]]},"1473":{"position":[[183,4]]}},"keywords":{}}],["variabl",{"_index":4574,"title":{},"content":{"750":{"position":[[102,8],[1110,8]]},"754":{"position":[[35,8],[170,8]]},"757":{"position":[[479,9],[529,8],[703,8]]},"761":{"position":[[342,9]]},"766":{"position":[[102,8],[1110,8]]},"770":{"position":[[479,9],[529,8],[703,8]]},"774":{"position":[[342,9]]},"789":{"position":[[100,8],[1511,8]]},"794":{"position":[[33,8]]},"797":{"position":[[479,9],[529,8],[703,8]]},"801":{"position":[[348,9]]},"807":{"position":[[100,8],[1098,8]]},"809":{"position":[[33,8]]},"812":{"position":[[479,9],[529,8],[703,8]]},"816":{"position":[[348,9]]},"823":{"position":[[100,8],[1098,8]]},"825":{"position":[[33,8]]},"828":{"position":[[479,9],[529,8],[703,8]]},"832":{"position":[[348,9]]},"1032":{"position":[[160,8]]},"1267":{"position":[[519,9],[569,8]]},"1281":{"position":[[303,8]]},"1285":{"position":[[541,9],[591,8],[715,8]]},"1286":{"position":[[33,8]]},"1292":{"position":[[6518,9]]},"1295":{"position":[[303,8]]},"1300":{"position":[[541,9],[591,8],[715,8]]},"1301":{"position":[[33,8]]},"1306":{"position":[[6518,9]]},"1319":{"position":[[303,8]]},"1324":{"position":[[541,9],[591,8],[715,8]]},"1325":{"position":[[33,8]]},"1329":{"position":[[6518,9]]},"1379":{"position":[[4964,8]]},"1383":{"position":[[109,8]]},"1403":{"position":[[4964,8]]},"1414":{"position":[[4964,8]]}},"keywords":{}}],["variad",{"_index":5642,"title":{},"content":{"1140":{"position":[[2767,8]]},"1316":{"position":[[2767,8]]},"1340":{"position":[[2767,8]]},"1351":{"position":[[2767,8]]},"1431":{"position":[[2790,8]]}},"keywords":{}}],["variant",{"_index":450,"title":{},"content":{"16":{"position":[[94,7]]},"74":{"position":[[498,8]]},"89":{"position":[[188,7]]}},"keywords":{}}],["variat",{"_index":1394,"title":{},"content":{"97":{"position":[[513,10]]}},"keywords":{}}],["variationsproduct",{"_index":5371,"title":{},"content":{"1096":{"position":[[306,18]]}},"keywords":{}}],["varieti",{"_index":332,"title":{},"content":{"11":{"position":[[1349,7]]},"23":{"position":[[52,7]]},"33":{"position":[[414,7]]},"37":{"position":[[307,7]]},"102":{"position":[[570,7]]},"281":{"position":[[433,8]]},"306":{"position":[[370,7]]},"319":{"position":[[61,7]]},"321":{"position":[[295,7],[388,7]]},"326":{"position":[[779,7]]},"330":{"position":[[14,7]]},"419":{"position":[[53,7]]},"429":{"position":[[380,7]]},"440":{"position":[[69,7]]},"504":{"position":[[31,7]]},"547":{"position":[[54,7]]},"639":{"position":[[30,7]]},"1023":{"position":[[34,7]]},"1465":{"position":[[341,7]]}},"keywords":{}}],["variou",{"_index":215,"title":{},"content":{"6":{"position":[[331,7]]},"45":{"position":[[331,7]]},"46":{"position":[[120,7]]},"52":{"position":[[118,7]]},"63":{"position":[[653,7]]},"74":{"position":[[742,7]]},"111":{"position":[[452,7]]},"164":{"position":[[180,7]]},"180":{"position":[[674,7]]},"190":{"position":[[1439,7]]},"197":{"position":[[658,7]]},"216":{"position":[[556,7]]},"313":{"position":[[3385,7]]},"322":{"position":[[517,7]]},"1453":{"position":[[1346,7]]}},"keywords":{}}],["vault",{"_index":1152,"title":{},"content":{"82":{"position":[[646,6],[666,6]]}},"keywords":{}}],["vcpu",{"_index":6235,"title":{},"content":{"1292":{"position":[[6589,4]]},"1306":{"position":[[6589,4]]},"1329":{"position":[[6589,4]]}},"keywords":{}}],["vector",{"_index":3196,"title":{},"content":{"330":{"position":[[329,13]]},"1274":{"position":[[192,6]]},"1275":{"position":[[31,6]]},"1276":{"position":[[58,7],[268,7]]},"1277":{"position":[[1141,7]]},"1279":{"position":[[71,7],[121,7],[415,7]]}},"keywords":{}}],["vendor",{"_index":2197,"title":{},"content":{"198":{"position":[[108,8],[474,7]]}},"keywords":{}}],["verbos",{"_index":2898,"title":{},"content":{"281":{"position":[[2363,8]]},"1140":{"position":[[2917,7]]},"1316":{"position":[[2917,7]]},"1340":{"position":[[2917,7]]},"1351":{"position":[[2917,7]]},"1431":{"position":[[2940,7]]}},"keywords":{}}],["veri",{"_index":562,"title":{},"content":{"21":{"position":[[196,4]]},"41":{"position":[[466,4]]},"77":{"position":[[385,4]]},"101":{"position":[[219,4]]},"107":{"position":[[200,4]]},"110":{"position":[[1345,4],[1391,4]]},"113":{"position":[[973,4]]},"121":{"position":[[1928,4],[1994,4]]},"157":{"position":[[350,4]]},"180":{"position":[[758,4]]},"210":{"position":[[1854,4]]},"320":{"position":[[1391,4]]},"321":{"position":[[1239,4]]},"842":{"position":[[2791,4]]},"1442":{"position":[[98,4],[944,4],[1291,4]]}},"keywords":{}}],["verif",{"_index":751,"title":{"490":{"position":[[18,13]]},"663":{"position":[[18,13]]},"678":{"position":[[18,13]]},"693":{"position":[[18,13]]}},"content":{"43":{"position":[[234,12],[330,12]]},"490":{"position":[[55,13]]},"663":{"position":[[55,13]]},"678":{"position":[[55,13]]},"693":{"position":[[55,13]]}},"keywords":{}}],["verifi",{"_index":749,"title":{"129":{"position":[[0,7]]},"255":{"position":[[0,7]]},"316":{"position":[[0,7]]}},"content":{"43":{"position":[[128,6]]},"50":{"position":[[282,8]]},"68":{"position":[[275,6]]},"72":{"position":[[266,6]]},"88":{"position":[[539,8]]},"128":{"position":[[607,7]]},"129":{"position":[[1,6],[101,8],[226,6],[311,6],[455,7],[516,8],[980,7]]},"130":{"position":[[1,6],[50,6],[131,7],[181,6]]},"132":{"position":[[253,8],[323,6],[565,7],[586,6]]},"133":{"position":[[474,7],[525,7]]},"141":{"position":[[343,6]]},"210":{"position":[[3962,6]]},"237":{"position":[[3511,6]]},"238":{"position":[[735,6],[1400,6]]},"239":{"position":[[1543,6]]},"253":{"position":[[387,6]]},"255":{"position":[[32,6]]},"264":{"position":[[601,6]]},"295":{"position":[[1371,6],[1687,6]]},"299":{"position":[[286,6]]},"313":{"position":[[387,6]]},"316":{"position":[[32,6]]},"332":{"position":[[751,6]]},"543":{"position":[[138,6]]},"724":{"position":[[174,9]]},"907":{"position":[[1818,6]]},"923":{"position":[[1818,6]]},"942":{"position":[[573,6]]},"968":{"position":[[1818,6]]},"1183":{"position":[[1032,6],[1489,6]]},"1268":{"position":[[327,6],[402,8],[603,8]]},"1286":{"position":[[1835,6],[1915,6],[1993,6],[2127,9],[2240,6]]},"1301":{"position":[[1671,6],[1751,6],[1829,6],[1963,9],[2076,6]]},"1313":{"position":[[1568,6]]},"1325":{"position":[[1835,6],[1915,6],[1993,6],[2127,9],[2240,6]]},"1337":{"position":[[1568,6]]},"1384":{"position":[[698,6]]},"1437":{"position":[[1421,8]]},"1463":{"position":[[770,7]]},"1464":{"position":[[614,7]]},"1465":{"position":[[1310,7],[1577,7]]},"1466":{"position":[[565,7]]},"1467":{"position":[[1112,7],[1474,7],[2636,7]]},"1476":{"position":[[577,7],[1996,7]]},"1477":{"position":[[2007,7],[2428,7],[4359,7],[4800,7]]}},"keywords":{}}],["versa",{"_index":1320,"title":{},"content":{"92":{"position":[[207,6]]},"1442":{"position":[[421,6]]}},"keywords":{}}],["version",{"_index":370,"title":{"902":{"position":[[10,8]]},"914":{"position":[[10,8]]},"929":{"position":[[10,8]]},"962":{"position":[[10,8]]},"1039":{"position":[[10,8]]},"1049":{"position":[[10,8]]},"1057":{"position":[[10,8]]}},"content":{"12":{"position":[[477,8]]},"55":{"position":[[1087,8]]},"62":{"position":[[437,8],[487,9],[527,8],[620,8],[738,7],[802,7]]},"81":{"position":[[409,7],[1188,7]]},"82":{"position":[[2723,8],[4861,8]]},"84":{"position":[[1048,7]]},"88":{"position":[[599,7]]},"169":{"position":[[1113,7]]},"175":{"position":[[283,7]]},"239":{"position":[[1844,7]]},"307":{"position":[[3313,8]]},"309":{"position":[[3637,8]]},"324":{"position":[[271,7]]},"364":{"position":[[444,8]]},"458":{"position":[[101,8]]},"460":{"position":[[381,7],[446,7],[478,8]]},"595":{"position":[[689,7]]},"794":{"position":[[391,7]]},"809":{"position":[[391,7]]},"825":{"position":[[391,7]]},"869":{"position":[[81,8]]},"902":{"position":[[36,8]]},"914":{"position":[[36,8]]},"917":{"position":[[499,8]]},"918":{"position":[[1275,7]]},"919":{"position":[[1036,8]]},"929":{"position":[[36,8]]},"965":{"position":[[499,8]]},"1039":{"position":[[123,7]]},"1049":{"position":[[49,7]]},"1057":{"position":[[52,7]]},"1140":{"position":[[2956,10]]},"1197":{"position":[[78,7]]},"1201":{"position":[[194,8],[291,8]]},"1207":{"position":[[303,7]]},"1281":{"position":[[108,8]]},"1286":{"position":[[448,7]]},"1293":{"position":[[194,8],[291,8],[324,7]]},"1295":{"position":[[108,8]]},"1301":{"position":[[448,7]]},"1307":{"position":[[194,8],[291,8],[324,7]]},"1316":{"position":[[2956,10]]},"1317":{"position":[[194,8],[291,8],[323,7],[475,8],[533,8]]},"1319":{"position":[[108,8]]},"1325":{"position":[[448,7]]},"1330":{"position":[[194,8],[291,8],[324,7]]},"1340":{"position":[[2956,10]]},"1341":{"position":[[194,8],[291,8],[323,7],[475,8],[533,8]]},"1351":{"position":[[2956,10]]},"1352":{"position":[[194,8],[291,8],[323,7],[475,8],[533,8]]},"1357":{"position":[[153,7]]},"1359":{"position":[[194,8],[291,8]]},"1380":{"position":[[194,8],[291,8],[324,7]]},"1384":{"position":[[977,8]]},"1404":{"position":[[194,8],[291,8],[324,7]]},"1415":{"position":[[194,8],[291,8],[324,7]]},"1431":{"position":[[2979,10]]},"1432":{"position":[[194,8],[291,8],[323,7],[475,8],[533,8]]},"1440":{"position":[[1613,8]]},"1448":{"position":[[212,8],[640,7]]}},"keywords":{}}],["versionsscreensscreen",{"_index":4487,"title":{},"content":{"709":{"position":[[590,21]]}},"keywords":{}}],["via",{"_index":2020,"title":{"238":{"position":[[36,3]]},"845":{"position":[[26,3]]},"847":{"position":[[8,3]]}},"content":{"173":{"position":[[761,3]]},"209":{"position":[[1013,3]]},"236":{"position":[[1981,3]]},"237":{"position":[[2215,3]]},"247":{"position":[[28,3]]},"288":{"position":[[399,3]]},"295":{"position":[[1316,3],[1726,3]]},"319":{"position":[[1416,3]]},"366":{"position":[[1136,3]]},"373":{"position":[[150,3]]},"377":{"position":[[263,3],[320,3],[428,3],[479,3]]},"413":{"position":[[205,3]]},"428":{"position":[[80,3]]},"432":{"position":[[461,3]]},"486":{"position":[[278,3]]},"488":{"position":[[544,3]]},"543":{"position":[[87,3]]},"591":{"position":[[86,3]]},"658":{"position":[[278,3]]},"659":{"position":[[701,3]]},"674":{"position":[[278,3]]},"676":{"position":[[544,3]]},"689":{"position":[[278,3]]},"691":{"position":[[544,3]]},"753":{"position":[[321,3]]},"767":{"position":[[467,3]]},"784":{"position":[[101,3]]},"792":{"position":[[755,3]]},"793":{"position":[[290,3]]},"808":{"position":[[306,3]]},"824":{"position":[[547,3]]},"866":{"position":[[306,3]]},"878":{"position":[[316,3]]},"904":{"position":[[546,3]]},"918":{"position":[[755,3]]},"919":{"position":[[290,3]]},"931":{"position":[[310,3]]},"989":{"position":[[894,3],[993,3]]},"1004":{"position":[[977,3],[1076,3]]},"1043":{"position":[[290,3]]},"1051":{"position":[[546,3]]},"1059":{"position":[[310,3]]},"1125":{"position":[[687,3]]},"1136":{"position":[[289,3]]},"1138":{"position":[[1547,3]]},"1151":{"position":[[1488,3]]},"1154":{"position":[[485,3]]},"1162":{"position":[[1011,3]]},"1198":{"position":[[190,3]]},"1205":{"position":[[199,3]]},"1253":{"position":[[576,3]]},"1255":{"position":[[101,3]]},"1260":{"position":[[1036,3]]},"1268":{"position":[[379,3]]},"1286":{"position":[[2752,3]]},"1301":{"position":[[2588,3]]},"1303":{"position":[[310,3]]},"1313":{"position":[[1091,3]]},"1325":{"position":[[2752,3]]},"1337":{"position":[[1091,3]]},"1348":{"position":[[1091,3]]},"1373":{"position":[[528,3]]},"1374":{"position":[[528,3]]},"1376":{"position":[[667,3]]},"1397":{"position":[[307,3]]},"1398":{"position":[[306,3]]},"1400":{"position":[[667,3]]},"1409":{"position":[[290,3]]},"1411":{"position":[[667,3]]},"1427":{"position":[[851,3]]}},"keywords":{}}],["vice",{"_index":1319,"title":{},"content":{"92":{"position":[[202,4]]},"1442":{"position":[[416,4]]}},"keywords":{}}],["video",{"_index":2171,"title":{"195":{"position":[[0,5]]}},"content":{"381":{"position":[[178,5]]},"556":{"position":[[383,5]]},"715":{"position":[[126,6]]}},"keywords":{}}],["view",{"_index":897,"title":{"68":{"position":[[0,7]]},"178":{"position":[[32,4]]},"184":{"position":[[35,5]]}},"content":{"59":{"position":[[1,4]]},"61":{"position":[[1328,4]]},"68":{"position":[[38,4],[193,4]]},"81":{"position":[[1059,6],[2571,6]]},"100":{"position":[[119,6]]},"120":{"position":[[242,6]]},"121":{"position":[[51,6],[1140,6]]},"122":{"position":[[1146,6]]},"123":{"position":[[521,6]]},"135":{"position":[[355,8]]},"138":{"position":[[2550,4]]},"140":{"position":[[86,5]]},"141":{"position":[[258,4]]},"142":{"position":[[2628,4]]},"145":{"position":[[111,4]]},"146":{"position":[[1109,4]]},"147":{"position":[[28,4]]},"148":{"position":[[120,4]]},"149":{"position":[[1103,4],[1345,4]]},"151":{"position":[[118,4]]},"152":{"position":[[1093,4]]},"153":{"position":[[28,4]]},"154":{"position":[[28,4],[1278,4],[1792,4],[2136,4]]},"164":{"position":[[1270,5]]},"180":{"position":[[14,5],[199,5]]},"184":{"position":[[338,5]]},"192":{"position":[[1186,4]]},"206":{"position":[[1047,4]]},"217":{"position":[[1815,4]]},"230":{"position":[[927,4]]},"253":{"position":[[410,4]]},"268":{"position":[[542,6],[1560,4]]},"277":{"position":[[1356,4]]},"278":{"position":[[554,5]]},"295":{"position":[[1793,4]]},"313":{"position":[[410,4]]},"322":{"position":[[1839,4]]},"324":{"position":[[955,5]]},"325":{"position":[[139,5],[333,4]]},"326":{"position":[[210,5],[1786,4],[1891,5]]},"330":{"position":[[521,5]]},"339":{"position":[[208,4]]},"368":{"position":[[273,4]]},"395":{"position":[[291,4]]},"436":{"position":[[811,4]]},"483":{"position":[[430,5]]},"486":{"position":[[438,4]]},"556":{"position":[[389,5]]},"569":{"position":[[92,5]]},"570":{"position":[[5,4]]},"571":{"position":[[5,4],[279,5],[452,4],[851,5]]},"573":{"position":[[834,4],[874,4],[1369,5]]},"609":{"position":[[103,4]]},"617":{"position":[[847,4]]},"658":{"position":[[438,4]]},"674":{"position":[[438,4]]},"689":{"position":[[438,4]]},"755":{"position":[[273,4]]},"768":{"position":[[273,4]]},"795":{"position":[[271,4]]},"810":{"position":[[271,4]]},"821":{"position":[[590,4]]},"826":{"position":[[271,4]]},"840":{"position":[[1127,4],[1226,4],[1323,4],[1419,4]]},"849":{"position":[[2138,4],[2248,4]]},"905":{"position":[[276,4]]},"912":{"position":[[606,4],[943,4],[1335,5]]},"920":{"position":[[276,4]]},"932":{"position":[[276,4]]},"943":{"position":[[685,4],[851,4]]},"948":{"position":[[276,4]]},"966":{"position":[[276,4]]},"1067":{"position":[[104,4]]},"1137":{"position":[[220,6]]},"1140":{"position":[[2994,4]]},"1208":{"position":[[277,5]]},"1284":{"position":[[218,6]]},"1292":{"position":[[6612,4]]},"1299":{"position":[[218,6]]},"1306":{"position":[[6612,4]]},"1312":{"position":[[221,6]]},"1316":{"position":[[2994,4]]},"1323":{"position":[[218,6]]},"1329":{"position":[[6612,4]]},"1336":{"position":[[221,6]]},"1340":{"position":[[2994,4]]},"1347":{"position":[[221,6]]},"1351":{"position":[[2994,4]]},"1358":{"position":[[181,5]]},"1370":{"position":[[1272,4]]},"1375":{"position":[[222,6]]},"1379":{"position":[[5079,4]]},"1394":{"position":[[1010,4]]},"1399":{"position":[[222,6]]},"1403":{"position":[[5079,4]]},"1410":{"position":[[222,6]]},"1414":{"position":[[5079,4]]},"1426":{"position":[[224,6]]},"1431":{"position":[[3017,4]]},"1435":{"position":[[126,5],[195,4],[256,4]]},"1437":{"position":[[70,4],[131,5]]},"1448":{"position":[[1009,4]]},"1455":{"position":[[29,4]]},"1461":{"position":[[2826,6],[2895,5],[4639,4]]},"1470":{"position":[[9,4],[302,4],[420,4],[503,4]]},"1480":{"position":[[179,6]]}},"keywords":{}}],["view_id",{"_index":4157,"title":{},"content":{"573":{"position":[[825,8]]},"575":{"position":[[177,8]]}},"keywords":{}}],["view_index_metadata",{"_index":5823,"title":{},"content":{"1194":{"position":[[308,20]]}},"keywords":{}}],["viewer",{"_index":4152,"title":{},"content":{"571":{"position":[[641,6],[875,6]]},"582":{"position":[[254,6],[492,6]]},"617":{"position":[[565,6]]}},"keywords":{}}],["viewer"",{"_index":3812,"title":{},"content":{"475":{"position":[[202,12]]},"477":{"position":[[131,12],[1067,13]]}},"keywords":{}}],["violat",{"_index":1397,"title":{},"content":{"97":{"position":[[737,10]]},"102":{"position":[[617,10]]},"183":{"position":[[3348,7]]},"332":{"position":[[343,8]]},"1442":{"position":[[816,9]]}},"keywords":{}}],["violation"",{"_index":5759,"title":{},"content":{"1156":{"position":[[724,15]]}},"keywords":{}}],["virtual",{"_index":2462,"title":{},"content":{"222":{"position":[[86,7]]},"223":{"position":[[89,7]]},"224":{"position":[[88,7],[121,7],[706,7],[782,7],[850,7],[1052,7]]},"288":{"position":[[642,7]]},"299":{"position":[[557,7]]},"366":{"position":[[1084,7]]},"367":{"position":[[833,7]]},"1031":{"position":[[140,7]]},"1034":{"position":[[528,7]]},"1136":{"position":[[237,7],[387,7]]},"1292":{"position":[[6638,7]]},"1298":{"position":[[89,7]]},"1306":{"position":[[6638,7]]},"1322":{"position":[[86,7]]},"1329":{"position":[[6638,7]]},"1335":{"position":[[86,7]]},"1346":{"position":[[89,7]]},"1370":{"position":[[1280,7]]},"1382":{"position":[[204,7]]}},"keywords":{}}],["visibl",{"_index":1198,"title":{},"content":{"82":{"position":[[3617,10]]},"100":{"position":[[1020,7]]},"137":{"position":[[94,7]]},"138":{"position":[[120,8]]},"142":{"position":[[144,8]]},"207":{"position":[[1613,7]]},"263":{"position":[[25,7]]},"410":{"position":[[232,10]]},"1292":{"position":[[6678,7]]},"1306":{"position":[[6678,7]]},"1329":{"position":[[6678,7]]}},"keywords":{}}],["visit",{"_index":1971,"title":{},"content":{"168":{"position":[[31,5]]},"179":{"position":[[49,5]]},"188":{"position":[[63,5]]},"288":{"position":[[157,5]]},"299":{"position":[[157,5]]},"1007":{"position":[[163,5]]},"1008":{"position":[[990,5]]},"1237":{"position":[[126,5]]}},"keywords":{}}],["vm",{"_index":2469,"title":{},"content":{"223":{"position":[[105,5],[812,2],[892,3],[949,2]]},"224":{"position":[[104,4],[698,2],[836,2],[1076,3]]},"370":{"position":[[1798,3]]},"1138":{"position":[[1089,3]]},"1298":{"position":[[105,5],[812,2],[892,3],[949,2]]},"1346":{"position":[[105,5],[812,2],[892,3],[949,2]]}},"keywords":{}}],["vm'",{"_index":2475,"title":{},"content":{"224":{"position":[[956,4]]},"370":{"position":[[149,4]]},"1138":{"position":[[149,4]]}},"keywords":{}}],["volum",{"_index":1077,"title":{},"content":{"74":{"position":[[249,7]]},"124":{"position":[[910,6]]},"236":{"position":[[1029,8],[1477,8]]},"321":{"position":[[1049,7]]},"333":{"position":[[89,6]]},"480":{"position":[[1567,7]]},"975":{"position":[[307,7]]},"985":{"position":[[389,7]]},"1000":{"position":[[567,7]]}},"keywords":{}}],["votesissu",{"_index":4477,"title":{},"content":{"709":{"position":[[404,10]]}},"keywords":{}}],["votespost",{"_index":5450,"title":{},"content":{"1128":{"position":[[234,9]]}},"keywords":{}}],["votessatisfact",{"_index":5451,"title":{},"content":{"1128":{"position":[[244,17]]}},"keywords":{}}],["vpc",{"_index":3668,"title":{},"content":{"430":{"position":[[231,3]]},"767":{"position":[[136,3],[202,3]]},"792":{"position":[[456,3],[522,3]]},"824":{"position":[[248,3],[314,3]]},"904":{"position":[[248,3],[314,3]]},"918":{"position":[[456,3],[522,3]]},"1051":{"position":[[248,3],[314,3]]},"1289":{"position":[[230,3],[305,3]]},"1321":{"position":[[10,3],[85,3]]},"1334":{"position":[[10,3],[85,3]]},"1373":{"position":[[248,3],[314,3]]},"1374":{"position":[[248,3],[314,3]]}},"keywords":{}}],["vpcs)creat",{"_index":4847,"title":{},"content":{"862":{"position":[[107,11]]},"874":{"position":[[107,11]]}},"keywords":{}}],["vs",{"_index":613,"title":{"845":{"position":[[15,2]]}},"content":{"26":{"position":[[424,2],[484,2]]},"107":{"position":[[1842,2]]},"281":{"position":[[3291,2]]},"296":{"position":[[3599,2]]},"320":{"position":[[2421,2],[2468,2]]},"323":{"position":[[2039,2]]},"329":{"position":[[720,2]]},"1155":{"position":[[523,3]]}},"keywords":{}}],["vscode",{"_index":2902,"title":{},"content":{"281":{"position":[[2595,6]]}},"keywords":{}}],["w",{"_index":2535,"title":{},"content":{"236":{"position":[[1415,1]]}},"keywords":{}}],["w)ednesday",{"_index":6559,"title":{},"content":{"1452":{"position":[[4196,12]]}},"keywords":{}}],["wait",{"_index":1261,"title":{},"content":{"84":{"position":[[279,4]]},"165":{"position":[[1707,4]]},"240":{"position":[[3267,4],[4918,4]]},"387":{"position":[[1091,4]]},"410":{"position":[[129,4]]},"479":{"position":[[438,4]]},"616":{"position":[[435,4]]},"1292":{"position":[[6713,4]]},"1306":{"position":[[6713,4]]},"1329":{"position":[[6713,4]]},"1442":{"position":[[450,4]]}},"keywords":{}}],["waitfor",{"_index":6355,"title":{},"content":{"1379":{"position":[[5132,7]]},"1403":{"position":[[5132,7]]},"1414":{"position":[[5132,7]]}},"keywords":{}}],["wake",{"_index":6398,"title":{},"content":{"1392":{"position":[[61,6]]}},"keywords":{}}],["wal",{"_index":5011,"title":{"922":{"position":[[0,3]]}},"content":{"909":{"position":[[369,6],[528,4]]},"910":{"position":[[248,3]]},"917":{"position":[[67,3],[1819,3],[1914,3]]},"922":{"position":[[97,3],[349,3],[444,3],[548,3],[687,3],[846,3],[991,3],[1170,4],[1556,3],[2015,3],[2196,3]]},"925":{"position":[[369,6],[528,4]]},"926":{"position":[[248,3]]},"936":{"position":[[369,6],[528,4]]},"937":{"position":[[248,3]]},"952":{"position":[[369,6],[528,4]]},"953":{"position":[[248,3]]},"965":{"position":[[67,3],[1819,3],[1914,3]]},"970":{"position":[[369,6],[528,4]]},"971":{"position":[[248,3]]}},"keywords":{}}],["wal_level",{"_index":5038,"title":{},"content":{"917":{"position":[[1859,9]]},"942":{"position":[[52,9],[172,9],[679,10],[690,9]]},"965":{"position":[[1859,9]]}},"keywords":{}}],["wal_level=logicalus",{"_index":4994,"title":{},"content":{"903":{"position":[[92,21]]},"915":{"position":[[92,21]]},"930":{"position":[[92,21]]},"963":{"position":[[246,21]]}},"keywords":{}}],["walk",{"_index":2421,"title":{},"content":{"213":{"position":[[71,4]]},"216":{"position":[[527,4]]},"286":{"position":[[103,5]]},"289":{"position":[[583,4]]},"300":{"position":[[530,4]]}},"keywords":{}}],["wall",{"_index":2849,"title":{},"content":{"279":{"position":[[625,4],[759,4]]}},"keywords":{}}],["wallet",{"_index":4905,"title":{},"content":{"879":{"position":[[331,6],[813,7],[887,7],[931,6],[963,7]]}},"keywords":{}}],["want",{"_index":241,"title":{},"content":{"7":{"position":[[404,4]]},"64":{"position":[[494,4]]},"107":{"position":[[3037,4]]},"126":{"position":[[25,4]]},"136":{"position":[[179,4]]},"140":{"position":[[186,4]]},"141":{"position":[[446,5]]},"162":{"position":[[24,4]]},"174":{"position":[[495,4]]},"193":{"position":[[430,4]]},"196":{"position":[[756,4]]},"198":{"position":[[522,4]]},"212":{"position":[[203,4]]},"217":{"position":[[1318,4],[1447,4],[1672,4]]},"227":{"position":[[26,4]]},"228":{"position":[[389,4],[584,4]]},"230":{"position":[[513,4],[733,4],[770,4]]},"233":{"position":[[941,4]]},"237":{"position":[[1158,4]]},"238":{"position":[[212,4]]},"243":{"position":[[197,4]]},"263":{"position":[[1191,4]]},"264":{"position":[[137,4]]},"267":{"position":[[307,4]]},"275":{"position":[[159,4],[750,4],[799,4]]},"279":{"position":[[213,4],[544,4]]},"281":{"position":[[117,4]]},"295":{"position":[[872,4]]},"296":{"position":[[1158,4]]},"308":{"position":[[1104,4]]},"321":{"position":[[2383,4]]},"326":{"position":[[1220,4],[1809,4]]},"387":{"position":[[811,4]]},"430":{"position":[[203,4]]},"480":{"position":[[1453,4]]},"485":{"position":[[281,4]]},"489":{"position":[[413,4]]},"548":{"position":[[158,4]]},"573":{"position":[[672,4],[883,4]]},"584":{"position":[[594,4]]},"611":{"position":[[730,4]]},"657":{"position":[[281,4]]},"661":{"position":[[467,4]]},"662":{"position":[[413,4]]},"673":{"position":[[281,4]]},"677":{"position":[[413,4]]},"688":{"position":[[281,4]]},"692":{"position":[[413,4]]},"717":{"position":[[119,4]]},"720":{"position":[[365,4]]},"839":{"position":[[163,4]]},"840":{"position":[[1677,4]]},"848":{"position":[[163,4]]},"849":{"position":[[1713,4],[2718,4]]},"904":{"position":[[2199,4]]},"917":{"position":[[1708,4]]},"918":{"position":[[2491,4]]},"931":{"position":[[1861,4]]},"943":{"position":[[464,4]]},"945":{"position":[[353,4]]},"965":{"position":[[1708,4]]},"985":{"position":[[419,4],[691,4]]},"997":{"position":[[276,4]]},"1000":{"position":[[597,4],[1005,4]]},"1026":{"position":[[79,4]]},"1031":{"position":[[117,4]]},"1042":{"position":[[512,4]]},"1043":{"position":[[1176,4]]},"1047":{"position":[[214,4]]},"1051":{"position":[[1438,4]]},"1055":{"position":[[214,4]]},"1059":{"position":[[1231,4]]},"1063":{"position":[[214,4]]},"1092":{"position":[[499,4]]},"1105":{"position":[[68,4]]},"1118":{"position":[[844,4]]},"1179":{"position":[[829,4]]},"1183":{"position":[[792,4]]},"1232":{"position":[[263,4]]},"1247":{"position":[[854,4]]},"1388":{"position":[[266,4]]},"1449":{"position":[[451,4]]},"1452":{"position":[[2558,4]]},"1461":{"position":[[842,4],[2358,4],[2847,4],[2923,4]]}},"keywords":{}}],["warehous",{"_index":542,"title":{},"content":{"20":{"position":[[740,10],[872,10]]},"67":{"position":[[1639,9]]},"121":{"position":[[2067,11]]},"124":{"position":[[202,10]]},"164":{"position":[[1158,9]]},"189":{"position":[[525,10],[872,10],[1352,10]]},"191":{"position":[[1424,9],[1453,9],[1652,9],[1677,9]]},"192":{"position":[[1130,10]]},"193":{"position":[[304,10]]},"234":{"position":[[488,9]]},"240":{"position":[[1385,9],[1414,9],[1613,9],[1638,9],[2309,10],[3575,9]]},"242":{"position":[[636,9],[651,9]]},"288":{"position":[[650,10]]},"289":{"position":[[229,10]]},"291":{"position":[[105,10]]},"299":{"position":[[565,10]]},"300":{"position":[[208,10]]},"302":{"position":[[105,10]]},"309":{"position":[[823,9]]},"324":{"position":[[83,10],[527,10],[581,10],[776,10],[798,10],[1252,10]]},"326":{"position":[[1400,11],[1646,10],[1751,9]]},"330":{"position":[[546,10],[656,9]]},"344":{"position":[[221,10]]},"849":{"position":[[2585,9],[2959,9]]},"1031":{"position":[[148,9]]},"1032":{"position":[[30,9],[378,9],[1003,9],[1055,9],[1237,9]]},"1034":{"position":[[493,10],[504,9],[536,9],[583,9]]},"1036":{"position":[[29,9],[686,9],[765,9]]},"1186":{"position":[[32,9],[150,10],[182,10],[374,9]]},"1188":{"position":[[102,9],[266,9]]},"1383":{"position":[[192,10],[1372,9],[1401,9],[1600,9],[1625,9]]},"1386":{"position":[[509,10],[520,9],[547,9]]},"1387":{"position":[[202,10],[756,10]]},"1388":{"position":[[207,10],[397,9],[645,9],[667,9]]},"1392":{"position":[[75,10]]},"1461":{"position":[[3925,10]]}},"keywords":{}}],["warehouse'",{"_index":6393,"title":{},"content":{"1388":{"position":[[288,11]]}},"keywords":{}}],["warehouse/materi",{"_index":3049,"title":{},"content":{"307":{"position":[[1494,21],[2362,21]]},"309":{"position":[[2313,21],[2920,21]]}},"keywords":{}}],["warehouse_id",{"_index":3047,"title":{},"content":{"307":{"position":[[1365,13],[1440,13],[2233,13],[2308,13]]}},"keywords":{}}],["warehouse_nam",{"_index":2138,"title":{},"content":{"191":{"position":[[588,14],[1245,16]]},"240":{"position":[[549,14],[1206,16]]},"1032":{"position":[[340,14],[902,16]]},"1383":{"position":[[247,15],[536,14],[1193,16]]}},"keywords":{}}],["warehouse_s",{"_index":2151,"title":{},"content":{"191":{"position":[[1505,14]]},"240":{"position":[[1466,14]]},"1032":{"position":[[1107,14]]},"1383":{"position":[[1453,14]]}},"keywords":{}}],["warehouse_typ",{"_index":2153,"title":{},"content":{"191":{"position":[[1529,14]]},"240":{"position":[[1490,14]]},"1032":{"position":[[1131,14]]},"1383":{"position":[[1477,14]]}},"keywords":{}}],["warehousea",{"_index":5806,"title":{},"content":{"1185":{"position":[[95,10]]},"1382":{"position":[[212,10]]}},"keywords":{}}],["warn",{"_index":1551,"title":{"411":{"position":[[10,8]]}},"content":{"107":{"position":[[2849,7]]},"117":{"position":[[527,7]]},"309":{"position":[[182,7]]},"414":{"position":[[860,8]]},"491":{"position":[[161,8]]},"577":{"position":[[567,7]]},"664":{"position":[[182,8]]},"679":{"position":[[161,8]]},"694":{"position":[[161,8]]},"1292":{"position":[[6758,8]]},"1306":{"position":[[6758,8]]},"1329":{"position":[[6758,8]]},"1452":{"position":[[1568,7]]}},"keywords":{}}],["wasm",{"_index":1465,"title":{},"content":{"102":{"position":[[330,5]]}},"keywords":{}}],["wasm.typescript",{"_index":2904,"title":{},"content":{"281":{"position":[[2724,15]]}},"keywords":{}}],["watchersjira",{"_index":4478,"title":{},"content":{"709":{"position":[[415,12]]}},"keywords":{}}],["watermark",{"_index":2563,"title":{},"content":{"236":{"position":[[3394,9]]},"366":{"position":[[734,10],[756,10]]},"367":{"position":[[312,10],[656,9]]},"370":{"position":[[1312,10],[1360,9]]},"750":{"position":[[412,10],[434,10],[879,10]]},"752":{"position":[[59,10],[304,9],[451,10]]},"753":{"position":[[763,10],[960,9],[1107,10]]},"757":{"position":[[763,10],[816,9]]},"766":{"position":[[412,10],[434,10],[879,10]]},"767":{"position":[[1815,10],[1940,9]]},"770":{"position":[[763,10],[816,9]]},"789":{"position":[[400,10],[422,10],[724,9],[949,9],[1012,9],[1091,9],[1280,10]]},"791":{"position":[[12,10],[257,9],[404,10]]},"792":{"position":[[1755,10],[1880,9]]},"793":{"position":[[734,10],[931,9],[1078,10]]},"797":{"position":[[763,10],[816,9]]},"807":{"position":[[400,10],[422,10],[867,10]]},"808":{"position":[[752,10],[877,9],[1024,10]]},"812":{"position":[[763,10],[816,9]]},"823":{"position":[[400,10],[422,10],[867,10]]},"824":{"position":[[1877,10],[2002,9]]},"828":{"position":[[763,10],[816,9]]},"864":{"position":[[797,10],[895,9],[1031,10]]},"867":{"position":[[652,10],[700,9]]},"903":{"position":[[760,10],[782,10]]},"904":{"position":[[1416,10],[1756,9]]},"907":{"position":[[1095,10],[1143,9]]},"915":{"position":[[760,10],[782,10]]},"917":{"position":[[1130,10],[1265,9]]},"918":{"position":[[1708,10],[2048,9]]},"919":{"position":[[1656,10],[2103,9]]},"923":{"position":[[1095,10],[1143,9]]},"930":{"position":[[760,10],[782,10]]},"931":{"position":[[1073,10],[1418,9]]},"934":{"position":[[1095,10],[1143,9]]},"950":{"position":[[1095,10],[1143,9]]},"963":{"position":[[914,10],[936,10]]},"965":{"position":[[1130,10],[1265,9]]},"968":{"position":[[1095,10],[1143,9]]},"1040":{"position":[[476,10],[498,10],[898,10]]},"1042":{"position":[[637,10],[736,9],[879,10]]},"1043":{"position":[[1301,10],[1400,9],[1543,10]]},"1045":{"position":[[822,10],[870,9]]},"1050":{"position":[[476,10],[498,10],[898,10]]},"1051":{"position":[[1563,10],[1662,9],[1805,10]]},"1053":{"position":[[822,10],[870,9]]},"1058":{"position":[[476,10],[498,10],[898,10]]},"1059":{"position":[[1356,10],[1455,9],[1598,10]]},"1061":{"position":[[822,10],[870,9]]}},"keywords":{}}],["way",{"_index":161,"title":{},"content":{"4":{"position":[[275,3]]},"13":{"position":[[728,5],[1519,3]]},"24":{"position":[[246,4]]},"44":{"position":[[246,3]]},"61":{"position":[[390,3]]},"66":{"position":[[523,3]]},"105":{"position":[[1020,3]]},"113":{"position":[[121,5],[988,5]]},"132":{"position":[[108,3]]},"137":{"position":[[606,5]]},"144":{"position":[[17,4],[318,5]]},"160":{"position":[[400,4]]},"180":{"position":[[52,3],[397,3]]},"183":{"position":[[2614,4]]},"197":{"position":[[210,3]]},"204":{"position":[[815,3]]},"206":{"position":[[696,3]]},"208":{"position":[[808,5]]},"210":{"position":[[530,3],[2129,3]]},"233":{"position":[[604,3],[650,3]]},"237":{"position":[[2858,4]]},"308":{"position":[[23,3]]},"309":{"position":[[23,3],[417,4],[1224,3]]},"310":{"position":[[23,3]]},"322":{"position":[[26,4],[614,3]]},"324":{"position":[[1012,4]]},"379":{"position":[[748,4]]},"480":{"position":[[862,3]]},"513":{"position":[[15,4]]},"522":{"position":[[15,4]]},"530":{"position":[[15,4]]},"551":{"position":[[15,4]]},"569":{"position":[[15,4]]},"581":{"position":[[286,4]]},"602":{"position":[[585,3]]},"607":{"position":[[15,4]]},"614":{"position":[[15,4]]},"643":{"position":[[15,4]]},"650":{"position":[[15,4]]},"683":{"position":[[15,4]]},"716":{"position":[[15,4]]},"731":{"position":[[15,4]]},"754":{"position":[[134,4]]},"763":{"position":[[271,4]]},"776":{"position":[[271,4]]},"792":{"position":[[258,4]]},"793":{"position":[[72,4]]},"803":{"position":[[277,4]]},"808":{"position":[[72,4]]},"818":{"position":[[277,4]]},"824":{"position":[[72,4]]},"834":{"position":[[277,4]]},"855":{"position":[[198,5]]},"864":{"position":[[381,3]]},"876":{"position":[[381,3]]},"904":{"position":[[72,4]]},"911":{"position":[[399,3]]},"912":{"position":[[1396,3]]},"917":{"position":[[14,3]]},"918":{"position":[[258,4]]},"919":{"position":[[72,4]]},"922":{"position":[[1103,4],[1646,4]]},"927":{"position":[[399,3]]},"931":{"position":[[72,4]]},"938":{"position":[[399,3]]},"954":{"position":[[399,3]]},"965":{"position":[[14,3]]},"972":{"position":[[399,3]]},"985":{"position":[[488,4]]},"989":{"position":[[97,3]]},"1000":{"position":[[666,4]]},"1004":{"position":[[97,3]]},"1043":{"position":[[72,4]]},"1051":{"position":[[72,4]]},"1059":{"position":[[72,4]]},"1067":{"position":[[273,4]]},"1129":{"position":[[25,4]]},"1147":{"position":[[324,4]]},"1174":{"position":[[324,4]]},"1182":{"position":[[347,3]]},"1191":{"position":[[349,3]]},"1216":{"position":[[324,4]]},"1224":{"position":[[324,4]]},"1243":{"position":[[1039,4]]},"1262":{"position":[[349,3]]},"1283":{"position":[[83,4]]},"1289":{"position":[[83,4]]},"1303":{"position":[[72,4]]},"1320":{"position":[[83,4]]},"1333":{"position":[[83,4]]},"1344":{"position":[[83,4]]},"1373":{"position":[[72,4]]},"1374":{"position":[[72,4]]},"1389":{"position":[[348,3]]},"1397":{"position":[[72,4]]},"1398":{"position":[[72,4]]},"1409":{"position":[[72,4]]},"1438":{"position":[[302,3]]},"1439":{"position":[[372,4]]},"1448":{"position":[[356,3]]},"1461":{"position":[[709,3]]}},"keywords":{}}],["we'd",{"_index":4241,"title":{},"content":{"590":{"position":[[913,4],[1105,4]]}},"keywords":{}}],["we'll",{"_index":302,"title":{},"content":{"11":{"position":[[357,5]]},"174":{"position":[[252,5],[586,5]]},"216":{"position":[[521,5]]},"232":{"position":[[19,5]]},"280":{"position":[[1681,5]]},"289":{"position":[[577,5]]},"300":{"position":[[524,5]]},"1461":{"position":[[3986,5],[4021,5],[4124,5],[4194,5]]}},"keywords":{}}],["we'r",{"_index":1282,"title":{},"content":{"87":{"position":[[232,5]]},"183":{"position":[[2508,5]]}},"keywords":{}}],["we'v",{"_index":150,"title":{},"content":{"4":{"position":[[4,5]]},"280":{"position":[[1815,5]]}},"keywords":{}}],["weaker",{"_index":1631,"title":{},"content":{"115":{"position":[[1150,6]]},"595":{"position":[[537,6]]},"1439":{"position":[[307,6]]}},"keywords":{}}],["web",{"_index":354,"title":{"25":{"position":[[12,3]]},"30":{"position":[[0,3]]},"80":{"position":[[5,3]]},"134":{"position":[[0,3]]},"135":{"position":[[16,3]]},"137":{"position":[[15,3]]},"168":{"position":[[26,3]]},"258":{"position":[[23,3]]},"261":{"position":[[28,3]]},"339":{"position":[[27,3]]},"383":{"position":[[53,3]]},"445":{"position":[[56,3]]},"523":{"position":[[53,3]]},"531":{"position":[[53,3]]},"553":{"position":[[53,3]]},"570":{"position":[[53,3]]},"608":{"position":[[53,3]]},"615":{"position":[[53,3]]},"644":{"position":[[54,3]]},"651":{"position":[[54,3]]},"717":{"position":[[55,3]]},"732":{"position":[[56,3]]},"987":{"position":[[57,3]]},"1002":{"position":[[57,3]]},"1082":{"position":[[28,3]]},"1083":{"position":[[43,3]]},"1227":{"position":[[36,3]]},"1244":{"position":[[36,3]]},"1470":{"position":[[32,3]]}},"content":{"12":{"position":[[75,3]]},"13":{"position":[[55,3]]},"25":{"position":[[72,3]]},"29":{"position":[[70,3]]},"30":{"position":[[10,3],[240,3],[287,3]]},"31":{"position":[[166,3],[232,3]]},"33":{"position":[[267,3]]},"38":{"position":[[528,3]]},"53":{"position":[[601,3]]},"54":{"position":[[96,3]]},"55":{"position":[[767,3],[862,3]]},"58":{"position":[[908,3]]},"68":{"position":[[307,3],[344,3]]},"79":{"position":[[294,3]]},"80":{"position":[[10,3],[259,3]]},"81":{"position":[[770,3],[1201,3]]},"82":{"position":[[1063,3]]},"83":{"position":[[782,3]]},"84":{"position":[[1305,3]]},"119":{"position":[[132,3]]},"135":{"position":[[5,3],[181,3],[722,3],[873,3]]},"137":{"position":[[23,3],[544,3]]},"138":{"position":[[1600,3]]},"140":{"position":[[551,3]]},"141":{"position":[[1605,3]]},"142":{"position":[[1617,3]]},"154":{"position":[[1856,3]]},"162":{"position":[[982,3]]},"165":{"position":[[914,3]]},"168":{"position":[[41,3]]},"169":{"position":[[51,3],[1410,3],[1530,3]]},"176":{"position":[[143,3]]},"179":{"position":[[64,3]]},"182":{"position":[[42,3]]},"183":{"position":[[91,3]]},"184":{"position":[[166,3]]},"188":{"position":[[78,3]]},"190":{"position":[[16,3]]},"191":{"position":[[107,3],[2279,3]]},"207":{"position":[[804,3]]},"217":{"position":[[194,3]]},"225":{"position":[[603,3]]},"228":{"position":[[112,3]]},"240":{"position":[[242,3],[2389,3],[4671,3]]},"255":{"position":[[1246,3]]},"259":{"position":[[31,3],[1704,3]]},"263":{"position":[[45,3],[140,3],[534,3]]},"264":{"position":[[691,3],[925,3]]},"266":{"position":[[34,3],[87,3],[203,3]]},"267":{"position":[[99,3],[1978,3]]},"268":{"position":[[2035,3]]},"269":{"position":[[1497,3]]},"270":{"position":[[240,3],[419,3],[2113,3]]},"274":{"position":[[538,3],[709,3]]},"275":{"position":[[903,3]]},"284":{"position":[[49,3],[186,3],[294,3]]},"288":{"position":[[90,3],[167,3]]},"290":{"position":[[171,3]]},"299":{"position":[[90,3],[167,3]]},"301":{"position":[[124,3]]},"307":{"position":[[471,3],[519,3]]},"308":{"position":[[827,3]]},"309":{"position":[[1410,3],[1458,3]]},"316":{"position":[[1571,3]]},"323":{"position":[[1901,3]]},"329":{"position":[[1035,3]]},"339":{"position":[[56,3]]},"340":{"position":[[270,3],[390,3]]},"350":{"position":[[45,3]]},"358":{"position":[[45,3]]},"369":{"position":[[45,3]]},"376":{"position":[[45,3]]},"382":{"position":[[85,3]]},"384":{"position":[[132,3]]},"386":{"position":[[45,3]]},"387":{"position":[[118,3]]},"391":{"position":[[45,3]]},"396":{"position":[[45,3]]},"401":{"position":[[73,3]]},"407":{"position":[[45,3]]},"416":{"position":[[45,3]]},"423":{"position":[[45,3]]},"431":{"position":[[45,3]]},"437":{"position":[[45,3]]},"444":{"position":[[88,3]]},"447":{"position":[[45,3]]},"448":{"position":[[118,3]]},"453":{"position":[[45,3]]},"459":{"position":[[45,3]]},"465":{"position":[[45,3]]},"472":{"position":[[45,3]]},"481":{"position":[[45,3]]},"485":{"position":[[367,3]]},"486":{"position":[[359,3]]},"488":{"position":[[66,3]]},"495":{"position":[[45,3]]},"500":{"position":[[121,3]]},"501":{"position":[[56,3]]},"502":{"position":[[487,3]]},"508":{"position":[[45,3]]},"513":{"position":[[222,3]]},"514":{"position":[[27,3]]},"516":{"position":[[45,3]]},"522":{"position":[[223,3]]},"525":{"position":[[45,3]]},"530":{"position":[[223,3]]},"533":{"position":[[45,3]]},"534":{"position":[[118,3]]},"539":{"position":[[45,3]]},"544":{"position":[[45,3]]},"551":{"position":[[221,3]]},"555":{"position":[[45,3]]},"556":{"position":[[118,3]]},"563":{"position":[[74,3]]},"569":{"position":[[240,3]]},"572":{"position":[[45,3]]},"573":{"position":[[122,3],[431,3]]},"574":{"position":[[153,3]]},"581":{"position":[[386,3]]},"583":{"position":[[45,3]]},"584":{"position":[[132,3]]},"585":{"position":[[153,3]]},"592":{"position":[[45,3]]},"600":{"position":[[45,3]]},"607":{"position":[[239,3]]},"608":{"position":[[202,3]]},"610":{"position":[[45,3]]},"611":{"position":[[118,3]]},"614":{"position":[[223,3]]},"618":{"position":[[45,3]]},"624":{"position":[[45,3]]},"630":{"position":[[45,3]]},"636":{"position":[[45,3]]},"643":{"position":[[197,3]]},"646":{"position":[[45,3]]},"650":{"position":[[196,3]]},"653":{"position":[[45,3]]},"657":{"position":[[367,3]]},"658":{"position":[[359,3]]},"659":{"position":[[223,3]]},"669":{"position":[[45,3]]},"673":{"position":[[367,3]]},"674":{"position":[[359,3]]},"676":{"position":[[66,3]]},"683":{"position":[[64,3]]},"684":{"position":[[45,3]]},"685":{"position":[[103,3]]},"688":{"position":[[367,3]]},"689":{"position":[[359,3]]},"691":{"position":[[66,3]]},"699":{"position":[[45,3]]},"705":{"position":[[45,3]]},"711":{"position":[[45,3]]},"716":{"position":[[223,3]]},"719":{"position":[[45,3]]},"720":{"position":[[118,3]]},"727":{"position":[[45,3]]},"731":{"position":[[194,3]]},"734":{"position":[[45,3]]},"740":{"position":[[45,3]]},"746":{"position":[[45,3]]},"756":{"position":[[45,3]]},"757":{"position":[[2239,3]]},"769":{"position":[[45,3]]},"770":{"position":[[2239,3]]},"781":{"position":[[45,3]]},"796":{"position":[[45,3]]},"797":{"position":[[2246,3]]},"811":{"position":[[45,3]]},"812":{"position":[[2246,3]]},"827":{"position":[[45,3]]},"828":{"position":[[2246,3]]},"841":{"position":[[45,3]]},"849":{"position":[[624,4],[680,3],[2298,3]]},"850":{"position":[[45,3]]},"855":{"position":[[243,3],[316,3]]},"858":{"position":[[45,3]]},"859":{"position":[[118,3]]},"866":{"position":[[45,3]]},"878":{"position":[[45,3]]},"884":{"position":[[45,3]]},"890":{"position":[[45,3]]},"896":{"position":[[45,3]]},"906":{"position":[[45,3]]},"921":{"position":[[45,3]]},"933":{"position":[[45,3]]},"947":{"position":[[21,3]]},"949":{"position":[[45,3]]},"958":{"position":[[45,3]]},"967":{"position":[[45,3]]},"981":{"position":[[45,3]]},"985":{"position":[[632,3]]},"987":{"position":[[26,3]]},"989":{"position":[[997,3],[1010,6],[1239,3]]},"990":{"position":[[45,3]]},"991":{"position":[[118,3]]},"996":{"position":[[45,3]]},"1000":{"position":[[946,3]]},"1002":{"position":[[26,3]]},"1004":{"position":[[1080,3],[1093,6],[1322,3]]},"1005":{"position":[[45,3]]},"1009":{"position":[[118,3]]},"1014":{"position":[[45,3]]},"1021":{"position":[[45,3]]},"1027":{"position":[[45,3]]},"1033":{"position":[[49,3]]},"1044":{"position":[[45,3]]},"1052":{"position":[[45,3]]},"1060":{"position":[[45,3]]},"1067":{"position":[[335,3],[420,3]]},"1069":{"position":[[45,3]]},"1070":{"position":[[118,3]]},"1075":{"position":[[45,3]]},"1081":{"position":[[139,3]]},"1082":{"position":[[76,3]]},"1083":{"position":[[114,3]]},"1084":{"position":[[45,3]]},"1085":{"position":[[193,3]]},"1093":{"position":[[45,3]]},"1100":{"position":[[45,3]]},"1106":{"position":[[45,3]]},"1112":{"position":[[45,3]]},"1124":{"position":[[45,3]]},"1132":{"position":[[45,3]]},"1200":{"position":[[556,3]]},"1226":{"position":[[193,3]]},"1227":{"position":[[75,3]]},"1230":{"position":[[293,3]]},"1237":{"position":[[57,3]]},"1243":{"position":[[1143,3],[1264,3]]},"1247":{"position":[[109,3],[464,3]]},"1252":{"position":[[45,3]]},"1282":{"position":[[236,3]]},"1288":{"position":[[210,3]]},"1310":{"position":[[251,3]]},"1362":{"position":[[54,3]]},"1446":{"position":[[13,3]]},"1461":{"position":[[4555,3],[4770,3],[5186,3],[5462,3]]},"1469":{"position":[[48,3]]},"1470":{"position":[[79,3],[278,3]]},"1479":{"position":[[13,3]]}},"keywords":{}}],["webhook",{"_index":1622,"title":{"484":{"position":[[20,9]]},"487":{"position":[[20,8]]},"488":{"position":[[0,7]]},"490":{"position":[[0,7]]},"656":{"position":[[12,9]]},"659":{"position":[[0,7]]},"660":{"position":[[0,7]]},"663":{"position":[[0,7]]},"672":{"position":[[21,9]]},"675":{"position":[[21,8]]},"676":{"position":[[0,7]]},"678":{"position":[[0,7]]},"687":{"position":[[17,9]]},"690":{"position":[[17,8]]},"691":{"position":[[0,7]]},"693":{"position":[[0,7]]},"1235":{"position":[[5,7]]}},"content":{"114":{"position":[[863,9]]},"125":{"position":[[297,8]]},"363":{"position":[[1412,9]]},"485":{"position":[[319,7]]},"487":{"position":[[167,7],[214,7],[260,7],[342,7],[367,7],[414,7],[484,7],[673,7]]},"488":{"position":[[239,9],[290,7],[431,7],[995,7],[1026,8]]},"490":{"position":[[37,7]]},"491":{"position":[[143,7]]},"657":{"position":[[319,7],[513,7]]},"659":{"position":[[16,7],[104,7],[396,9],[447,7],[588,7],[1152,7],[1183,8]]},"660":{"position":[[1,7],[74,8],[241,9],[374,7],[440,7],[491,7],[867,7],[926,7],[975,7],[1097,7],[1126,7],[1154,7]]},"661":{"position":[[6,8],[203,7],[240,7],[363,7],[437,8]]},"663":{"position":[[37,7]]},"664":{"position":[[164,7]]},"673":{"position":[[319,7]]},"675":{"position":[[59,8],[169,7],[217,7],[304,7]]},"676":{"position":[[239,9],[290,7],[431,7],[995,7],[1026,8]]},"678":{"position":[[37,7]]},"679":{"position":[[143,7]]},"688":{"position":[[319,7]]},"690":{"position":[[90,9],[120,7],[228,7],[352,7]]},"691":{"position":[[239,9],[290,7],[431,7],[995,7],[1026,8]]},"693":{"position":[[37,7]]},"694":{"position":[[143,7]]},"1237":{"position":[[5,8]]},"1440":{"position":[[29,9]]}},"keywords":{}}],["webhook.json",{"_index":3869,"title":{},"content":{"488":{"position":[[742,13],[840,13]]},"659":{"position":[[899,13],[997,13]]},"676":{"position":[[742,13],[840,13]]},"691":{"position":[[742,13],[840,13]]}},"keywords":{}}],["webhook/estuari",{"_index":5906,"title":{},"content":{"1241":{"position":[[80,15]]}},"keywords":{}}],["webhook:dev",{"_index":6673,"title":{},"content":{"1472":{"position":[[710,11]]}},"keywords":{}}],["webhook:v1",{"_index":5907,"title":{},"content":{"1241":{"position":[[152,10]]}},"keywords":{}}],["websit",{"_index":4143,"title":{},"content":{"568":{"position":[[76,7]]},"611":{"position":[[949,7],[977,7]]},"1461":{"position":[[4585,8]]}},"keywords":{}}],["website_overview",{"_index":4206,"title":{},"content":{"575":{"position":[[1093,16]]},"586":{"position":[[912,16]]}},"keywords":{}}],["websocket",{"_index":3435,"title":{},"content":{"373":{"position":[[130,9],[649,9]]},"377":{"position":[[436,9]]}},"keywords":{}}],["webstuff",{"_index":6633,"title":{},"content":{"1461":{"position":[[5637,9]]}},"keywords":{}}],["webstuff.flow.yaml",{"_index":6632,"title":{},"content":{"1461":{"position":[[5432,18],[5606,18]]}},"keywords":{}}],["wednesday",{"_index":6533,"title":{},"content":{"1452":{"position":[[1418,10]]}},"keywords":{}}],["week",{"_index":1802,"title":{},"content":{"138":{"position":[[2180,5],[2191,5]]},"141":{"position":[[2136,5],[2147,5]]},"142":{"position":[[2240,5],[2251,5]]},"331":{"position":[[96,6]]},"1209":{"position":[[888,4]]},"1292":{"position":[[6799,4]]},"1306":{"position":[[6799,4]]},"1329":{"position":[[6799,4]]},"1452":{"position":[[166,5],[478,4],[1206,4],[3709,5],[3753,4],[4141,4],[4520,4]]}},"keywords":{}}],["weekend",{"_index":3897,"title":{},"content":{"496":{"position":[[331,8],[347,9],[381,9]]}},"keywords":{}}],["weekli",{"_index":3730,"title":{},"content":{"443":{"position":[[98,7],[188,7],[266,7],[378,7],[459,7]]},"568":{"position":[[146,6],[169,6]]},"580":{"position":[[76,6]]}},"keywords":{}}],["weekly_active_us",{"_index":4207,"title":{},"content":{"575":{"position":[[1189,19]]},"586":{"position":[[1008,19]]}},"keywords":{}}],["weight_str",{"_index":6248,"title":{},"content":{"1292":{"position":[[6837,13]]},"1306":{"position":[[6837,13]]},"1329":{"position":[[6837,13]]}},"keywords":{}}],["welcom",{"_index":1766,"title":{},"content":{"137":{"position":[[48,7]]}},"keywords":{}}],["well",{"_index":221,"title":{},"content":{"6":{"position":[[579,4]]},"21":{"position":[[230,4],[371,4]]},"53":{"position":[[119,4]]},"68":{"position":[[516,4]]},"88":{"position":[[469,4]]},"99":{"position":[[280,4],[423,4]]},"102":{"position":[[298,4]]},"107":{"position":[[1857,4]]},"114":{"position":[[766,4]]},"115":{"position":[[885,4]]},"156":{"position":[[174,4],[511,4]]},"165":{"position":[[1618,5]]},"199":{"position":[[340,5]]},"209":{"position":[[189,4]]},"233":{"position":[[681,4]]},"241":{"position":[[485,4]]},"254":{"position":[[1910,4]]},"281":{"position":[[2687,4]]},"296":{"position":[[3614,4],[8030,5]]},"315":{"position":[[209,5]]},"324":{"position":[[595,4]]},"373":{"position":[[885,4]]},"429":{"position":[[1079,4]]},"480":{"position":[[644,4]]},"752":{"position":[[617,5]]},"753":{"position":[[1273,5]]},"788":{"position":[[60,4]]},"791":{"position":[[570,5]]},"793":{"position":[[1244,5]]},"808":{"position":[[1190,5]]},"869":{"position":[[192,4],[1238,4]]},"914":{"position":[[89,4]]},"1000":{"position":[[429,4]]},"1031":{"position":[[443,4]]},"1138":{"position":[[659,4]]},"1151":{"position":[[644,4]]},"1155":{"position":[[408,4]]},"1179":{"position":[[471,4]]},"1260":{"position":[[358,4]]},"1313":{"position":[[469,4]]},"1337":{"position":[[469,4]]},"1348":{"position":[[469,4]]},"1386":{"position":[[442,4]]},"1427":{"position":[[410,4]]},"1439":{"position":[[1427,4]]},"1461":{"position":[[103,4],[351,4]]}},"keywords":{}}],["went",{"_index":2263,"title":{},"content":{"209":{"position":[[184,4]]},"315":{"position":[[204,4]]}},"keywords":{}}],["we’ll",{"_index":2219,"title":{},"content":{"203":{"position":[[569,5]]},"204":{"position":[[192,5],[857,5]]},"236":{"position":[[65,5]]},"240":{"position":[[31,5]]},"1459":{"position":[[1498,5]]}},"keywords":{}}],["we’r",{"_index":2966,"title":{},"content":{"295":{"position":[[668,5]]}},"keywords":{}}],["what'",{"_index":832,"title":{"176":{"position":[[0,6]]},"219":{"position":[[0,6]]},"292":{"position":[[0,6]]},"303":{"position":[[0,6]]}},"content":{"56":{"position":[[307,6]]},"219":{"position":[[154,6]]}},"keywords":{}}],["whatev",{"_index":1134,"title":{},"content":{"81":{"position":[[2299,8]]},"216":{"position":[[470,8]]},"278":{"position":[[524,8]]},"483":{"position":[[345,8]]},"488":{"position":[[185,8]]},"659":{"position":[[342,8]]},"676":{"position":[[185,8]]},"691":{"position":[[185,8]]},"760":{"position":[[647,8],[907,8]]},"773":{"position":[[647,8],[907,8]]},"800":{"position":[[647,8],[907,8]]},"815":{"position":[[647,8],[907,8]]},"831":{"position":[[647,8],[907,8]]},"1383":{"position":[[427,8]]}},"keywords":{}}],["whatwg",{"_index":3623,"title":{},"content":{"419":{"position":[[1881,6]]},"441":{"position":[[490,6]]},"504":{"position":[[1510,6]]},"547":{"position":[[1883,6]]},"639":{"position":[[1508,6]]},"1023":{"position":[[1864,6]]}},"keywords":{}}],["what’",{"_index":1877,"title":{},"content":{"159":{"position":[[606,6]]}},"keywords":{}}],["whenev",{"_index":384,"title":{},"content":{"13":{"position":[[365,8]]},"20":{"position":[[51,8],[395,8]]},"64":{"position":[[577,8]]},"165":{"position":[[1518,8]]},"489":{"position":[[888,8]]},"662":{"position":[[888,8]]},"677":{"position":[[888,8]]},"692":{"position":[[888,8]]},"1140":{"position":[[3064,8]]},"1316":{"position":[[3064,8]]},"1340":{"position":[[3064,8]]},"1351":{"position":[[3064,8]]},"1379":{"position":[[5239,8]]},"1394":{"position":[[1038,8]]},"1403":{"position":[[5239,8]]},"1414":{"position":[[5239,8]]},"1431":{"position":[[3087,8]]}},"keywords":{}}],["wherea",{"_index":6546,"title":{},"content":{"1452":{"position":[[3346,7]]}},"keywords":{}}],["whether",{"_index":816,"title":{},"content":{"55":{"position":[[331,7]]},"68":{"position":[[1458,7]]},"88":{"position":[[649,7]]},"110":{"position":[[994,7]]},"115":{"position":[[1268,7]]},"122":{"position":[[1442,7]]},"126":{"position":[[517,7]]},"158":{"position":[[823,7]]},"159":{"position":[[994,7]]},"174":{"position":[[483,7]]},"230":{"position":[[963,7]]},"291":{"position":[[1200,7]]},"302":{"position":[[1146,7]]},"309":{"position":[[436,7],[1240,7]]},"325":{"position":[[371,7]]},"374":{"position":[[131,7]]},"483":{"position":[[158,7]]},"595":{"position":[[69,7]]},"842":{"position":[[3556,7],[3696,7]]},"885":{"position":[[291,7]]},"991":{"position":[[704,7]]},"1009":{"position":[[767,7]]},"1015":{"position":[[89,7]]},"1081":{"position":[[35,7],[111,7]]},"1179":{"position":[[1275,7]]},"1188":{"position":[[895,7]]},"1196":{"position":[[1035,7]]},"1386":{"position":[[1289,7]]},"1464":{"position":[[951,7]]},"1471":{"position":[[493,7]]},"1474":{"position":[[272,7]]},"1477":{"position":[[2946,7]]}},"keywords":{}}],["whichev",{"_index":3176,"title":{},"content":{"326":{"position":[[1167,9]]},"436":{"position":[[171,9]]}},"keywords":{}}],["white",{"_index":1791,"title":{},"content":{"138":{"position":[[1563,5]]},"141":{"position":[[1146,5],[1568,5]]},"142":{"position":[[1580,5]]}},"keywords":{}}],["whole",{"_index":2035,"title":{},"content":{"174":{"position":[[539,5]]},"309":{"position":[[3487,5]]},"414":{"position":[[82,5]]}},"keywords":{}}],["whose",{"_index":2487,"title":{},"content":{"230":{"position":[[489,5]]},"237":{"position":[[1141,5],[1992,5]]},"301":{"position":[[1062,5]]},"417":{"position":[[1231,5]]},"438":{"position":[[1747,5]]},"502":{"position":[[269,5]]},"545":{"position":[[840,5]]},"584":{"position":[[898,5]]},"922":{"position":[[1047,5]]},"1021":{"position":[[937,5]]},"1435":{"position":[[717,5]]}},"keywords":{}}],["wide",{"_index":694,"title":{},"content":{"37":{"position":[[302,4]]},"102":{"position":[[565,4]]},"429":{"position":[[375,4]]},"609":{"position":[[374,4]]}},"keywords":{}}],["wider",{"_index":3611,"title":{},"content":{"419":{"position":[[47,5]]},"440":{"position":[[63,5]]},"547":{"position":[[48,5]]},"1023":{"position":[[28,5]]},"1465":{"position":[[335,5]]}},"keywords":{}}],["widget",{"_index":5108,"title":{},"content":{"947":{"position":[[321,6]]}},"keywords":{}}],["width_bucket",{"_index":5656,"title":{},"content":{"1140":{"position":[[3150,12]]},"1316":{"position":[[3150,12]]},"1340":{"position":[[3150,12]]},"1351":{"position":[[3150,12]]},"1379":{"position":[[5391,12]]},"1403":{"position":[[5391,12]]},"1414":{"position":[[5391,12]]},"1431":{"position":[[3173,12]]}},"keywords":{}}],["wikimedia",{"_index":2051,"title":{},"content":{"180":{"position":[[526,9]]}},"keywords":{}}],["wikipedia",{"_index":2050,"title":{"181":{"position":[[12,9]]}},"content":{"180":{"position":[[497,10]]},"181":{"position":[[164,9]]},"182":{"position":[[212,9]]},"183":{"position":[[211,9],[1052,10],[1629,9],[3316,9]]},"252":{"position":[[176,9]]},"253":{"position":[[348,9]]},"255":{"position":[[1040,9]]},"312":{"position":[[180,9]]},"313":{"position":[[348,9],[3393,9],[3621,9]]},"316":{"position":[[1365,9]]}},"keywords":{}}],["wikipedia_data_by_us",{"_index":2092,"title":{},"content":{"184":{"position":[[899,23]]}},"keywords":{}}],["wikipedia_raw",{"_index":2091,"title":{},"content":{"184":{"position":[[736,14]]}},"keywords":{}}],["wildcard",{"_index":1776,"title":{},"content":{"138":{"position":[[946,9]]},"142":{"position":[[925,9]]},"1194":{"position":[[393,8]]}},"keywords":{}}],["will",{"_index":5031,"title":{},"content":{"912":{"position":[[1617,7]]}},"keywords":{}}],["william",{"_index":1062,"title":{},"content":{"71":{"position":[[742,7]]}},"keywords":{}}],["win",{"_index":2377,"title":{},"content":{"210":{"position":[[3206,5]]},"1438":{"position":[[629,5],[723,4],[758,4]]}},"keywords":{}}],["window",{"_index":721,"title":{"279":{"position":[[8,7]]},"1077":{"position":[[38,7]]}},"content":{"40":{"position":[[346,9]]},"58":{"position":[[57,8],[74,7],[124,8]]},"74":{"position":[[186,7]]},"110":{"position":[[1445,7]]},"169":{"position":[[1054,8],[1067,7],[1518,7]]},"191":{"position":[[130,6]]},"210":{"position":[[417,7],[1613,6]]},"218":{"position":[[1711,6]]},"224":{"position":[[828,7]]},"228":{"position":[[977,6]]},"238":{"position":[[552,6]]},"240":{"position":[[277,6]]},"259":{"position":[[1179,6],[2760,6]]},"267":{"position":[[226,6]]},"279":{"position":[[84,6],[460,6],[514,8],[936,6],[1092,6],[1159,8],[1180,7]]},"284":{"position":[[659,6]]},"291":{"position":[[1644,6]]},"295":{"position":[[1337,6]]},"296":{"position":[[6977,6]]},"302":{"position":[[1553,6]]},"319":{"position":[[1343,9],[1506,6]]},"331":{"position":[[187,9]]},"340":{"position":[[378,7]]},"517":{"position":[[2149,6],[3144,6],[3167,6]]},"556":{"position":[[275,6],[306,6]]},"573":{"position":[[1053,6]]},"578":{"position":[[209,6]]},"747":{"position":[[213,6],[375,6],[1169,6],[1184,6],[1283,6]]},"1015":{"position":[[165,6]]},"1076":{"position":[[380,6]]},"1077":{"position":[[285,7],[437,7],[556,6],[695,6]]},"1113":{"position":[[358,6]]},"1140":{"position":[[3198,6]]},"1292":{"position":[[6279,6]]},"1306":{"position":[[6279,6]]},"1316":{"position":[[3198,6]]},"1329":{"position":[[6279,6]]},"1340":{"position":[[3198,6]]},"1351":{"position":[[3198,6]]},"1370":{"position":[[1323,6]]},"1379":{"position":[[3805,6]]},"1403":{"position":[[3805,6]]},"1414":{"position":[[3805,6]]},"1431":{"position":[[3221,6]]},"1440":{"position":[[1127,8]]},"1452":{"position":[[628,7],[3142,6]]},"1470":{"position":[[157,6],[222,7]]}},"keywords":{}}],["window_in_day",{"_index":4160,"title":{},"content":{"573":{"position":[[1037,15]]},"575":{"position":[[284,15]]},"577":{"position":[[427,14]]},"584":{"position":[[940,15]]},"586":{"position":[[306,15]]},"588":{"position":[[422,14]]}},"keywords":{}}],["windows)cr",{"_index":3632,"title":{},"content":{"419":{"position":[[2566,11]]},"441":{"position":[[1175,11]]},"504":{"position":[[2195,11]]},"547":{"position":[[2568,11]]},"639":{"position":[[2193,11]]},"1023":{"position":[[2549,11]]}},"keywords":{}}],["wish",{"_index":1088,"title":{},"content":{"74":{"position":[[919,4]]},"160":{"position":[[57,5]]},"202":{"position":[[362,4],[385,4]]},"237":{"position":[[2780,4]]},"242":{"position":[[944,4]]},"254":{"position":[[1726,4]]},"314":{"position":[[1543,4]]},"366":{"position":[[309,4]]},"383":{"position":[[89,4]]},"385":{"position":[[652,4]]},"479":{"position":[[567,4],[653,4]]},"480":{"position":[[1672,4]]},"903":{"position":[[335,4]]},"915":{"position":[[335,4]]},"930":{"position":[[335,4]]},"963":{"position":[[489,4]]}},"keywords":{}}],["with"",{"_index":5165,"title":{},"content":{"1009":{"position":[[1174,11],[1197,11],[1268,11],[1295,11]]},"1010":{"position":[[375,10]]}},"keywords":{}}],["withclust",{"_index":5796,"title":{},"content":{"1183":{"position":[[34,14]]}},"keywords":{}}],["withflush",{"_index":6506,"title":{},"content":{"1443":{"position":[[1207,12]]}},"keywords":{}}],["within",{"_index":155,"title":{},"content":{"4":{"position":[[178,6]]},"6":{"position":[[551,6]]},"16":{"position":[[762,6]]},"27":{"position":[[185,6]]},"31":{"position":[[301,6]]},"34":{"position":[[32,6],[421,6]]},"36":{"position":[[275,6],[354,6]]},"45":{"position":[[49,6]]},"64":{"position":[[308,6]]},"67":{"position":[[291,6],[487,6],[623,6],[725,6]]},"69":{"position":[[556,6]]},"73":{"position":[[110,6]]},"76":{"position":[[33,6],[582,6]]},"77":{"position":[[547,6]]},"79":{"position":[[98,6]]},"81":{"position":[[733,6]]},"82":{"position":[[2770,6],[3154,6],[4908,6]]},"83":{"position":[[59,6]]},"87":{"position":[[200,6]]},"88":{"position":[[152,6],[487,6]]},"96":{"position":[[713,6],[799,6],[825,6]]},"97":{"position":[[78,6]]},"99":{"position":[[110,6],[454,6]]},"104":{"position":[[42,6]]},"113":{"position":[[320,6]]},"114":{"position":[[106,6]]},"121":{"position":[[107,6],[1619,6],[1874,6]]},"122":{"position":[[298,6]]},"124":{"position":[[826,6]]},"125":{"position":[[878,6]]},"138":{"position":[[2067,6]]},"141":{"position":[[2023,6]]},"142":{"position":[[2127,6]]},"159":{"position":[[118,6],[687,6]]},"160":{"position":[[420,6],[945,6]]},"161":{"position":[[217,6]]},"197":{"position":[[1339,6]]},"198":{"position":[[647,6]]},"224":{"position":[[839,6]]},"239":{"position":[[2098,6],[2695,6]]},"245":{"position":[[32,6]]},"278":{"position":[[417,6]]},"324":{"position":[[505,6],[787,6]]},"364":{"position":[[220,6]]},"385":{"position":[[770,6]]},"413":{"position":[[85,6]]},"417":{"position":[[1903,6]]},"418":{"position":[[561,6]]},"419":{"position":[[2029,6]]},"441":{"position":[[638,6]]},"477":{"position":[[233,6]]},"482":{"position":[[230,6]]},"487":{"position":[[203,6],[375,6]]},"499":{"position":[[48,6]]},"504":{"position":[[1658,6]]},"545":{"position":[[1505,6]]},"546":{"position":[[1269,6]]},"547":{"position":[[2031,6]]},"595":{"position":[[1245,6],[1640,6]]},"639":{"position":[[1656,6]]},"660":{"position":[[317,6]]},"661":{"position":[[352,6]]},"792":{"position":[[104,6]]},"918":{"position":[[104,6]]},"977":{"position":[[345,6]]},"1006":{"position":[[516,6]]},"1008":{"position":[[1374,6]]},"1023":{"position":[[2012,6]]},"1077":{"position":[[426,6]]},"1138":{"position":[[613,6]]},"1140":{"position":[[3268,6]]},"1144":{"position":[[935,6]]},"1151":{"position":[[598,6]]},"1162":{"position":[[526,6]]},"1178":{"position":[[217,6],[291,6]]},"1179":{"position":[[425,6],[629,6]]},"1213":{"position":[[612,6]]},"1260":{"position":[[312,6]]},"1313":{"position":[[423,6]]},"1316":{"position":[[3268,6]]},"1337":{"position":[[423,6]]},"1340":{"position":[[3268,6]]},"1348":{"position":[[423,6]]},"1351":{"position":[[3268,6]]},"1379":{"position":[[3927,6],[3993,6]]},"1382":{"position":[[176,6]]},"1386":{"position":[[396,6]]},"1391":{"position":[[217,6]]},"1403":{"position":[[3927,6],[3993,6]]},"1414":{"position":[[3927,6],[3993,6]]},"1427":{"position":[[364,6]]},"1431":{"position":[[3291,6]]},"1440":{"position":[[374,6]]},"1459":{"position":[[580,6]]},"1462":{"position":[[64,6],[144,6]]},"1465":{"position":[[194,6]]},"1477":{"position":[[577,6]]}},"keywords":{}}],["withinit",{"_index":99,"title":{},"content":{"2":{"position":[[816,9]]}},"keywords":{}}],["without",{"_index":320,"title":{},"content":{"11":{"position":[[804,7],[1260,7]]},"34":{"position":[[715,7]]},"40":{"position":[[338,7]]},"84":{"position":[[1172,7]]},"92":{"position":[[958,7]]},"101":{"position":[[452,7]]},"105":{"position":[[1079,7]]},"110":{"position":[[892,7]]},"115":{"position":[[1381,7]]},"133":{"position":[[627,7]]},"197":{"position":[[269,7]]},"254":{"position":[[3961,7]]},"295":{"position":[[837,7]]},"319":{"position":[[1331,7]]},"331":{"position":[[175,7],[758,7]]},"333":{"position":[[273,7],[555,7]]},"491":{"position":[[456,7]]},"556":{"position":[[1502,7],[2027,7]]},"664":{"position":[[477,7],[712,7]]},"679":{"position":[[456,7]]},"694":{"position":[[456,7]]},"718":{"position":[[14,7]]},"764":{"position":[[541,7]]},"777":{"position":[[541,7]]},"804":{"position":[[539,7]]},"819":{"position":[[539,7]]},"835":{"position":[[539,7]]},"847":{"position":[[33,7],[193,7]]},"857":{"position":[[216,7]]},"867":{"position":[[439,7]]},"1140":{"position":[[3301,7]]},"1268":{"position":[[472,7]]},"1292":{"position":[[6344,7]]},"1306":{"position":[[6344,7]]},"1316":{"position":[[3301,7]]},"1329":{"position":[[6344,7]]},"1340":{"position":[[3301,7]]},"1351":{"position":[[3301,7]]},"1370":{"position":[[1348,7]]},"1379":{"position":[[4039,7]]},"1392":{"position":[[53,7]]},"1403":{"position":[[4039,7]]},"1414":{"position":[[4039,7]]},"1431":{"position":[[3324,7]]},"1440":{"position":[[555,7]]},"1461":{"position":[[2522,7]]},"1462":{"position":[[281,7]]},"1474":{"position":[[606,8]]}},"keywords":{}}],["won't",{"_index":2025,"title":{},"content":{"173":{"position":[[1107,5]]},"218":{"position":[[1581,5]]},"307":{"position":[[2711,5]]},"309":{"position":[[1360,5]]},"331":{"position":[[376,5]]},"419":{"position":[[331,5]]},"436":{"position":[[794,5]]},"440":{"position":[[347,5]]},"480":{"position":[[763,5]]},"504":{"position":[[275,5]]},"547":{"position":[[332,5]]},"639":{"position":[[273,5]]},"685":{"position":[[140,5]]},"754":{"position":[[308,5]]},"794":{"position":[[181,5]]},"809":{"position":[[181,5]]},"825":{"position":[[181,5]]},"991":{"position":[[153,5]]},"1009":{"position":[[153,5]]},"1023":{"position":[[312,5]]},"1182":{"position":[[506,5]]},"1191":{"position":[[510,5]]},"1262":{"position":[[510,5]]},"1286":{"position":[[210,5]]},"1301":{"position":[[210,5]]},"1325":{"position":[[210,5]]},"1389":{"position":[[508,5]]},"1447":{"position":[[511,5]]}},"keywords":{}}],["wonder",{"_index":2894,"title":{},"content":{"281":{"position":[[2256,10]]}},"keywords":{}}],["won’t",{"_index":2238,"title":{},"content":{"207":{"position":[[473,5]]},"239":{"position":[[914,5]]},"242":{"position":[[147,5]]},"296":{"position":[[4146,5]]},"315":{"position":[[625,5]]}},"keywords":{}}],["woocommerc",{"_index":5344,"title":{"1088":{"position":[[0,11]]},"1091":{"position":[[7,12]]},"1092":{"position":[[11,11]]}},"content":{"1089":{"position":[[15,11],[61,11]]},"1090":{"position":[[38,11]]},"1092":{"position":[[177,11]]},"1093":{"position":[[250,11]]},"1094":{"position":[[111,11],[204,11],[495,11]]},"1096":{"position":[[5,11]]},"1097":{"position":[[16,11]]}},"keywords":{}}],["word",{"_index":382,"title":{"1140":{"position":[[9,6]]},"1192":{"position":[[9,6]]},"1209":{"position":[[9,6]]},"1292":{"position":[[9,6]]},"1306":{"position":[[9,6]]},"1316":{"position":[[9,6]]},"1329":{"position":[[9,6]]},"1340":{"position":[[9,6]]},"1351":{"position":[[9,6]]},"1370":{"position":[[9,6]]},"1379":{"position":[[9,6]]},"1394":{"position":[[9,6]]},"1403":{"position":[[9,6]]},"1414":{"position":[[9,6]]},"1423":{"position":[[9,6]]},"1431":{"position":[[9,6]]}},"content":{"13":{"position":[[320,6]]},"125":{"position":[[1023,6]]},"1140":{"position":[[35,5],[131,5],[256,5],[359,5]]},"1192":{"position":[[35,5],[157,5],[478,5]]},"1209":{"position":[[33,6],[130,4],[213,5]]},"1292":{"position":[[30,5],[126,5],[185,5],[288,5]]},"1306":{"position":[[30,5],[126,5],[185,5],[288,5]]},"1316":{"position":[[35,5],[131,5],[256,5],[359,5]]},"1329":{"position":[[30,5],[126,5],[185,5],[288,5]]},"1340":{"position":[[35,5],[131,5],[256,5],[359,5]]},"1351":{"position":[[35,5],[131,5],[256,5],[359,5]]},"1370":{"position":[[31,5],[127,5],[248,5],[351,5]]},"1379":{"position":[[34,5],[130,5],[193,5],[298,5]]},"1394":{"position":[[34,5],[156,5],[474,5]]},"1403":{"position":[[34,5],[130,5],[193,5],[298,5]]},"1414":{"position":[[34,5],[130,5],[193,5],[298,5]]},"1423":{"position":[[41,5],[163,5],[480,5]]},"1431":{"position":[[58,5],[154,5],[279,5],[382,5]]},"1479":{"position":[[690,6]]}},"keywords":{}}],["work",{"_index":283,"title":{"9":{"position":[[0,7]]},"29":{"position":[[0,7]]},"121":{"position":[[31,6]]},"1468":{"position":[[0,7]]}},"content":{"9":{"position":[[18,7]]},"13":{"position":[[1061,4],[1509,4]]},"24":{"position":[[155,4],[265,4]]},"26":{"position":[[50,4]]},"29":{"position":[[50,4]]},"31":{"position":[[41,7]]},"38":{"position":[[620,7]]},"47":{"position":[[120,6]]},"49":{"position":[[288,4]]},"60":{"position":[[403,4],[679,4]]},"61":{"position":[[23,4],[397,4],[941,7]]},"62":{"position":[[38,7]]},"63":{"position":[[57,7],[1152,7]]},"81":{"position":[[2362,7]]},"84":{"position":[[316,5]]},"92":{"position":[[670,5]]},"98":{"position":[[987,7]]},"103":{"position":[[737,4]]},"110":{"position":[[305,7]]},"115":{"position":[[868,5]]},"122":{"position":[[62,4]]},"124":{"position":[[821,4]]},"125":{"position":[[193,5]]},"126":{"position":[[497,5]]},"135":{"position":[[41,4],[111,4],[861,4],[1004,8]]},"163":{"position":[[1033,4]]},"169":{"position":[[77,4],[1281,8]]},"183":{"position":[[2514,7]]},"189":{"position":[[1474,5]]},"202":{"position":[[280,4]]},"203":{"position":[[131,5],[229,7]]},"210":{"position":[[4053,5]]},"213":{"position":[[145,4]]},"219":{"position":[[144,5]]},"225":{"position":[[618,7]]},"236":{"position":[[244,7]]},"238":{"position":[[565,7]]},"240":{"position":[[4170,4],[4611,6]]},"254":{"position":[[102,7],[2042,5]]},"259":{"position":[[1517,4],[3071,4]]},"260":{"position":[[67,4]]},"263":{"position":[[804,7]]},"264":{"position":[[331,4]]},"266":{"position":[[304,4]]},"268":{"position":[[1692,5]]},"269":{"position":[[1213,5]]},"270":{"position":[[851,7],[1793,7]]},"274":{"position":[[1604,7]]},"275":{"position":[[549,7],[1049,4]]},"281":{"position":[[2759,7]]},"285":{"position":[[240,7],[489,7]]},"296":{"position":[[102,7],[3829,7]]},"307":{"position":[[499,7],[776,7]]},"309":{"position":[[1126,4],[1438,7],[1926,4],[3320,5]]},"314":{"position":[[102,7]]},"315":{"position":[[286,7]]},"319":{"position":[[978,4],[1251,4]]},"320":{"position":[[180,7]]},"321":{"position":[[1605,4],[1816,5],[1907,5]]},"323":{"position":[[1993,5]]},"324":{"position":[[231,7]]},"340":{"position":[[32,4]]},"345":{"position":[[217,4]]},"347":{"position":[[160,5]]},"387":{"position":[[98,7]]},"448":{"position":[[98,7]]},"480":{"position":[[233,7]]},"534":{"position":[[98,7]]},"556":{"position":[[98,7]]},"573":{"position":[[102,7]]},"590":{"position":[[633,5]]},"611":{"position":[[98,7]]},"720":{"position":[[98,7]]},"792":{"position":[[172,7]]},"847":{"position":[[126,4]]},"849":{"position":[[1396,7]]},"859":{"position":[[98,7]]},"918":{"position":[[172,7]]},"922":{"position":[[30,5]]},"988":{"position":[[11,7]]},"991":{"position":[[98,7]]},"1003":{"position":[[11,7]]},"1007":{"position":[[157,5]]},"1009":{"position":[[98,7]]},"1039":{"position":[[21,4]]},"1070":{"position":[[98,7]]},"1083":{"position":[[11,7]]},"1140":{"position":[[3339,4]]},"1247":{"position":[[89,7]]},"1292":{"position":[[6392,4]]},"1306":{"position":[[6392,4]]},"1316":{"position":[[3339,4]]},"1329":{"position":[[6392,4]]},"1340":{"position":[[3339,4]]},"1351":{"position":[[3339,4]]},"1379":{"position":[[4095,4]]},"1403":{"position":[[4095,4]]},"1414":{"position":[[4095,4]]},"1431":{"position":[[3362,4]]},"1451":{"position":[[1064,5]]},"1452":{"position":[[4567,5]]},"1461":{"position":[[913,4],[2130,4],[3992,4],[4080,4],[4257,7]]},"1464":{"position":[[14,5],[253,5]]},"1466":{"position":[[209,5]]},"1467":{"position":[[554,5]]},"1472":{"position":[[144,4]]},"1479":{"position":[[202,7]]}},"keywords":{}}],["workbench",{"_index":4709,"title":{},"content":{"793":{"position":[[687,9]]}},"keywords":{}}],["workflow",{"_index":602,"title":{},"content":{"26":{"position":[[27,9]]},"39":{"position":[[118,10]]},"40":{"position":[[293,10]]},"54":{"position":[[75,8]]},"59":{"position":[[32,10]]},"60":{"position":[[1011,9]]},"61":{"position":[[248,8]]},"64":{"position":[[892,9]]},"81":{"position":[[1014,9]]},"110":{"position":[[519,9],[843,9]]},"119":{"position":[[191,9]]},"135":{"position":[[218,10],[640,10]]},"136":{"position":[[211,9]]},"144":{"position":[[293,8],[683,8]]},"169":{"position":[[177,9]]},"180":{"position":[[238,9]]},"193":{"position":[[418,10]]},"211":{"position":[[406,10]]},"227":{"position":[[209,9]]},"245":{"position":[[317,10]]},"257":{"position":[[55,9]]},"262":{"position":[[18,9]]},"273":{"position":[[18,9]]},"283":{"position":[[18,9]]},"285":{"position":[[424,8]]},"307":{"position":[[479,8],[755,9]]},"309":{"position":[[1418,8],[1746,8]]},"322":{"position":[[1215,8]]},"323":{"position":[[2023,9]]},"324":{"position":[[218,8]]},"329":{"position":[[170,9]]},"331":{"position":[[499,10]]},"529":{"position":[[694,8],[708,9]]},"548":{"position":[[345,9]]},"975":{"position":[[401,10]]},"1047":{"position":[[339,9]]},"1055":{"position":[[339,9]]},"1063":{"position":[[339,9]]},"1182":{"position":[[460,10]]},"1191":{"position":[[462,10]]},"1262":{"position":[[462,10]]},"1389":{"position":[[461,10]]},"1437":{"position":[[281,8],[474,9]]}},"keywords":{}}],["workflow.th",{"_index":2441,"title":{},"content":{"221":{"position":[[526,12]]}},"keywords":{}}],["workflowor",{"_index":5013,"title":{},"content":{"909":{"position":[[795,10]]},"925":{"position":[[795,10]]},"936":{"position":[[795,10]]},"952":{"position":[[795,10]]},"970":{"position":[[795,10]]}},"keywords":{}}],["workload",{"_index":1457,"title":{},"content":{"101":{"position":[[545,8]]},"326":{"position":[[376,11]]}},"keywords":{}}],["worklogsissuessprint",{"_index":4497,"title":{},"content":{"709":{"position":[[791,20]]}},"keywords":{}}],["workord",{"_index":5147,"title":{},"content":{"992":{"position":[[256,9]]},"1010":{"position":[[470,9]]}},"keywords":{}}],["workorderlineitem",{"_index":5149,"title":{},"content":{"992":{"position":[[314,17]]},"1010":{"position":[[580,17]]}},"keywords":{}}],["worksheet",{"_index":2133,"title":{},"content":{"191":{"position":[[340,9]]},"240":{"position":[[339,10]]}},"keywords":{}}],["worksom",{"_index":4810,"title":{},"content":{"847":{"position":[[48,8]]}},"keywords":{}}],["workspac",{"_index":2064,"title":{},"content":{"183":{"position":[[604,9]]},"267":{"position":[[972,9]]},"611":{"position":[[570,9]]},"683":{"position":[[195,10]]},"1013":{"position":[[7,9]]},"1118":{"position":[[61,9],[237,10]]},"1354":{"position":[[124,9]]},"1356":{"position":[[1429,10],[1440,9],[1474,9]]},"1357":{"position":[[401,10]]},"1361":{"position":[[72,9]]}},"keywords":{}}],["world",{"_index":1450,"title":{},"content":{"101":{"position":[[316,5]]},"156":{"position":[[272,5]]},"190":{"position":[[1371,5]]},"210":{"position":[[2033,5]]},"322":{"position":[[1238,5]]},"323":{"position":[[293,5]]}},"keywords":{}}],["worri",{"_index":2239,"title":{},"content":{"207":{"position":[[487,5]]},"236":{"position":[[1662,5]]},"239":{"position":[[928,5]]},"314":{"position":[[2519,5]]}},"keywords":{}}],["wors",{"_index":726,"title":{},"content":{"41":{"position":[[294,6]]},"1391":{"position":[[592,5]]}},"keywords":{}}],["worst",{"_index":5067,"title":{},"content":{"922":{"position":[[3243,5]]}},"keywords":{}}],["worth",{"_index":4637,"title":{},"content":{"760":{"position":[[855,5]]},"773":{"position":[[855,5]]},"800":{"position":[[855,5]]},"815":{"position":[[855,5]]},"831":{"position":[[855,5]]}},"keywords":{}}],["wrap",{"_index":1170,"title":{"211":{"position":[[0,8]]},"256":{"position":[[0,8]]},"297":{"position":[[0,8]]},"317":{"position":[[0,8]]}},"content":{"82":{"position":[[1898,8],[4222,8]]},"97":{"position":[[774,5]]}},"keywords":{}}],["wrapper",{"_index":6229,"title":{},"content":{"1292":{"position":[[6439,7]]},"1306":{"position":[[6439,7]]},"1329":{"position":[[6439,7]]}},"keywords":{}}],["write",{"_index":73,"title":{"160":{"position":[[0,7]]},"162":{"position":[[0,5]]},"254":{"position":[[0,7]]},"296":{"position":[[0,7]]},"314":{"position":[[0,7]]}},"content":{"2":{"position":[[173,5],[261,6]]},"11":{"position":[[109,5],[291,5],[986,7]]},"25":{"position":[[19,5]]},"64":{"position":[[844,5]]},"81":{"position":[[946,5]]},"82":{"position":[[1204,7],[1664,5],[1881,6],[4205,6]]},"84":{"position":[[635,5],[965,5]]},"96":{"position":[[34,5]]},"113":{"position":[[314,5]]},"114":{"position":[[146,5]]},"124":{"position":[[692,5],[877,5]]},"125":{"position":[[428,5]]},"132":{"position":[[172,5]]},"133":{"position":[[10,5]]},"138":{"position":[[2297,6],[2361,6]]},"146":{"position":[[520,6],[821,6]]},"149":{"position":[[794,6]]},"152":{"position":[[797,6]]},"154":{"position":[[593,5],[738,5]]},"161":{"position":[[1024,5]]},"162":{"position":[[429,5],[1087,5],[1144,5],[1317,5]]},"165":{"position":[[1200,5]]},"166":{"position":[[624,5]]},"182":{"position":[[697,5]]},"183":{"position":[[8,5]]},"207":{"position":[[1100,5]]},"237":{"position":[[1438,6]]},"254":{"position":[[1107,7]]},"256":{"position":[[34,5]]},"266":{"position":[[437,8]]},"267":{"position":[[8,5]]},"268":{"position":[[207,5],[1119,5],[1439,5],[1484,7],[1741,5]]},"269":{"position":[[690,5],[1014,5],[1055,7]]},"270":{"position":[[1278,5],[1805,5]]},"274":{"position":[[234,6]]},"281":{"position":[[537,6],[566,5],[1168,5]]},"297":{"position":[[34,5]]},"307":{"position":[[2748,7],[3130,7]]},"314":{"position":[[828,7],[3035,5]]},"315":{"position":[[86,7]]},"317":{"position":[[34,5]]},"321":{"position":[[1371,5],[1680,6]]},"323":{"position":[[493,7]]},"337":{"position":[[389,5]]},"338":{"position":[[160,5],[452,5]]},"366":{"position":[[186,5],[836,6]]},"370":{"position":[[1370,6]]},"417":{"position":[[328,5]]},"438":{"position":[[328,5]]},"491":{"position":[[260,5]]},"502":{"position":[[788,5]]},"545":{"position":[[328,5]]},"664":{"position":[[281,5]]},"679":{"position":[[260,5]]},"694":{"position":[[260,5]]},"723":{"position":[[354,5]]},"750":{"position":[[524,6]]},"752":{"position":[[441,5]]},"753":{"position":[[1097,5]]},"757":{"position":[[826,7]]},"766":{"position":[[524,6]]},"770":{"position":[[826,7]]},"789":{"position":[[512,6]]},"791":{"position":[[394,5]]},"793":{"position":[[1068,5]]},"797":{"position":[[826,7]]},"807":{"position":[[512,6]]},"808":{"position":[[1014,5]]},"812":{"position":[[826,7]]},"823":{"position":[[512,6]]},"828":{"position":[[826,7]]},"864":{"position":[[1018,5]]},"867":{"position":[[710,6]]},"869":{"position":[[8,6]]},"903":{"position":[[212,5],[862,6]]},"907":{"position":[[1153,6]]},"909":{"position":[[353,5]]},"915":{"position":[[212,5],[862,6]]},"923":{"position":[[1153,6]]},"925":{"position":[[353,5]]},"930":{"position":[[212,5],[862,6]]},"934":{"position":[[1153,6]]},"936":{"position":[[353,5]]},"950":{"position":[[1153,6]]},"952":{"position":[[353,5]]},"963":{"position":[[366,5],[1016,6]]},"968":{"position":[[1153,6]]},"970":{"position":[[353,5]]},"988":{"position":[[36,7]]},"989":{"position":[[605,5]]},"1003":{"position":[[36,7]]},"1004":{"position":[[688,5]]},"1008":{"position":[[355,5]]},"1021":{"position":[[1367,5]]},"1040":{"position":[[578,6]]},"1045":{"position":[[880,6]]},"1050":{"position":[[578,6]]},"1053":{"position":[[880,6]]},"1058":{"position":[[578,6]]},"1061":{"position":[[880,6]]},"1140":{"position":[[3364,5]]},"1142":{"position":[[54,5]]},"1144":{"position":[[181,7],[289,7],[372,5],[1202,5]]},"1149":{"position":[[625,5]]},"1151":{"position":[[786,7],[917,7]]},"1160":{"position":[[54,5],[303,5],[359,5]]},"1162":{"position":[[294,5]]},"1168":{"position":[[54,5]]},"1170":{"position":[[181,7],[289,7],[372,5]]},"1194":{"position":[[301,6]]},"1211":{"position":[[54,5]]},"1213":{"position":[[879,5]]},"1218":{"position":[[54,5]]},"1233":{"position":[[35,5]]},"1251":{"position":[[90,5]]},"1258":{"position":[[219,5]]},"1260":{"position":[[585,7],[716,7]]},"1292":{"position":[[6487,5]]},"1306":{"position":[[6487,5]]},"1316":{"position":[[3364,5]]},"1329":{"position":[[6487,5]]},"1340":{"position":[[3364,5]]},"1351":{"position":[[3364,5]]},"1379":{"position":[[4137,5]]},"1403":{"position":[[4137,5]]},"1414":{"position":[[4137,5]]},"1431":{"position":[[3387,5]]},"1438":{"position":[[623,5],[717,5],[752,5]]},"1439":{"position":[[666,6]]},"1440":{"position":[[1570,7]]},"1448":{"position":[[527,6]]}},"keywords":{}}],["writeahead",{"_index":5051,"title":{},"content":{"922":{"position":[[70,10]]}},"keywords":{}}],["writeschema",{"_index":1914,"title":{},"content":{"162":{"position":[[729,11],[2001,12]]},"165":{"position":[[999,12],[1219,11],[1505,12],[1692,11]]},"192":{"position":[[1904,12]]},"207":{"position":[[900,12],[1119,11]]}},"keywords":{}}],["writetext",{"_index":6344,"title":{},"content":{"1379":{"position":[[4188,9]]},"1403":{"position":[[4188,9]]},"1414":{"position":[[4188,9]]}},"keywords":{}}],["written",{"_index":152,"title":{},"content":{"4":{"position":[[46,7]]},"16":{"position":[[707,8]]},"34":{"position":[[72,7]]},"41":{"position":[[111,7]]},"48":{"position":[[326,8]]},"53":{"position":[[136,7]]},"63":{"position":[[41,7]]},"64":{"position":[[393,7]]},"77":{"position":[[441,8]]},"109":{"position":[[301,7]]},"138":{"position":[[1934,7],[2029,7]]},"141":{"position":[[1866,7],[1954,7]]},"146":{"position":[[139,7]]},"162":{"position":[[89,9]]},"180":{"position":[[694,7]]},"238":{"position":[[1434,7]]},"245":{"position":[[80,7]]},"270":{"position":[[827,7]]},"274":{"position":[[1580,7],[1773,7]]},"332":{"position":[[300,7]]},"577":{"position":[[578,7]]},"1147":{"position":[[62,7],[307,8],[368,7],[474,7]]},"1164":{"position":[[28,7]]},"1172":{"position":[[28,7]]},"1174":{"position":[[62,7],[307,8],[368,7],[474,7]]},"1216":{"position":[[62,7],[307,8],[368,7],[474,7]]},"1222":{"position":[[28,7]]},"1224":{"position":[[62,7],[307,8],[368,7],[474,7]]},"1391":{"position":[[751,7]]},"1440":{"position":[[1279,7]]},"1448":{"position":[[897,7]]},"1449":{"position":[[373,8]]},"1459":{"position":[[63,7],[186,7],[258,7]]},"1463":{"position":[[544,7]]},"1470":{"position":[[699,7],[789,7],[969,7],[986,7],[1019,7],[1101,7],[1118,7],[1145,7]]}},"keywords":{}}],["wrong",{"_index":1067,"title":{},"content":{"72":{"position":[[412,5]]},"759":{"position":[[75,5]]},"763":{"position":[[92,5]]},"772":{"position":[[86,5]]},"776":{"position":[[92,5]]},"799":{"position":[[73,5]]},"803":{"position":[[92,5]]},"814":{"position":[[73,5]]},"818":{"position":[[92,5]]},"830":{"position":[[73,5]]},"834":{"position":[[92,5]]}},"keywords":{}}],["wrote",{"_index":905,"title":{},"content":{"60":{"position":[[590,5]]}},"keywords":{}}],["wsl",{"_index":869,"title":{},"content":{"58":{"position":[[102,5]]},"169":{"position":[[1128,4]]}},"keywords":{}}],["x",{"_index":887,"title":{},"content":{"58":{"position":[[464,2],[643,2]]},"98":{"position":[[382,2]]},"161":{"position":[[873,3],[960,2]]},"169":{"position":[[705,2],[887,2]]},"218":{"position":[[1178,1]]},"250":{"position":[[936,2],[1263,1],[1293,1],[1325,1],[1351,1],[1385,1]]},"337":{"position":[[321,1],[499,1]]},"338":{"position":[[316,1],[368,1]]},"660":{"position":[[1064,1],[1087,1],[1116,1],[1142,1]]},"738":{"position":[[91,1],[168,2]]},"1080":{"position":[[85,1],[87,1],[99,1],[101,1],[107,1],[109,1],[121,1],[123,1],[144,1],[146,1],[166,1],[168,1],[191,1],[193,1],[222,1],[250,1],[281,1],[308,1],[310,1],[336,1],[338,1],[367,1],[369,1],[396,1],[398,1],[424,1],[426,1],[455,1],[457,1],[495,1],[532,1],[572,1],[607,1],[609,1],[643,1],[645,1],[675,1],[677,1],[706,1],[708,1],[755,1],[757,1],[803,1],[805,1]]}},"keywords":{}}],["x.decode('utf",{"_index":2669,"title":{},"content":{"250":{"position":[[939,13]]}},"keywords":{}}],["x509",{"_index":6233,"title":{},"content":{"1292":{"position":[[6528,4]]},"1306":{"position":[[6528,4]]},"1329":{"position":[[6528,4]]}},"keywords":{}}],["x86",{"_index":1975,"title":{},"content":{"169":{"position":[[293,3]]}},"keywords":{}}],["x86_64",{"_index":884,"title":{},"content":{"58":{"position":[[428,6]]},"169":{"position":[[669,6]]}},"keywords":{}}],["xa",{"_index":6234,"title":{},"content":{"1292":{"position":[[6564,2]]},"1306":{"position":[[6564,2]]},"1329":{"position":[[6564,2]]}},"keywords":{}}],["xid",{"_index":6236,"title":{},"content":{"1292":{"position":[[6594,3]]},"1306":{"position":[[6594,3]]},"1329":{"position":[[6594,3]]}},"keywords":{}}],["xmin",{"_index":5025,"title":{},"content":{"912":{"position":[[1146,4],[1208,5]]}},"keywords":{}}],["xmin::text::bigint",{"_index":5026,"title":{},"content":{"912":{"position":[[1231,18]]}},"keywords":{}}],["xml",{"_index":5663,"title":{},"content":{"1140":{"position":[[3395,3]]},"1292":{"position":[[6617,3]]},"1306":{"position":[[6617,3]]},"1316":{"position":[[3395,3]]},"1329":{"position":[[6617,3]]},"1340":{"position":[[3395,3]]},"1351":{"position":[[3395,3]]},"1431":{"position":[[3418,3]]}},"keywords":{}}],["xmlagg",{"_index":5665,"title":{},"content":{"1140":{"position":[[3433,6]]},"1316":{"position":[[3433,6]]},"1340":{"position":[[3433,6]]},"1351":{"position":[[3433,6]]},"1379":{"position":[[4238,6]]},"1403":{"position":[[4238,6]]},"1414":{"position":[[4238,6]]},"1431":{"position":[[3456,6]]}},"keywords":{}}],["xmlattribut",{"_index":5666,"title":{},"content":{"1140":{"position":[[3460,13]]},"1316":{"position":[[3460,13]]},"1340":{"position":[[3460,13]]},"1351":{"position":[[3460,13]]},"1379":{"position":[[4293,13]]},"1403":{"position":[[4293,13]]},"1414":{"position":[[4293,13]]},"1431":{"position":[[3483,13]]}},"keywords":{}}],["xmlbinari",{"_index":5669,"title":{},"content":{"1140":{"position":[[3506,9]]},"1316":{"position":[[3506,9]]},"1340":{"position":[[3506,9]]},"1351":{"position":[[3506,9]]},"1379":{"position":[[4350,9]]},"1403":{"position":[[4350,9]]},"1414":{"position":[[4350,9]]},"1431":{"position":[[3529,9]]}},"keywords":{}}],["xmlcast",{"_index":5672,"title":{},"content":{"1140":{"position":[[3547,7]]},"1316":{"position":[[3547,7]]},"1340":{"position":[[3547,7]]},"1351":{"position":[[3547,7]]},"1379":{"position":[[4403,7]]},"1403":{"position":[[4403,7]]},"1414":{"position":[[4403,7]]},"1431":{"position":[[3570,7]]}},"keywords":{}}],["xmlcomment",{"_index":5676,"title":{},"content":{"1140":{"position":[[3588,10]]},"1316":{"position":[[3588,10]]},"1340":{"position":[[3588,10]]},"1351":{"position":[[3588,10]]},"1379":{"position":[[4456,10]]},"1403":{"position":[[4456,10]]},"1414":{"position":[[4456,10]]},"1431":{"position":[[3611,10]]}},"keywords":{}}],["xmlconcat",{"_index":5678,"title":{},"content":{"1140":{"position":[[3626,9]]},"1316":{"position":[[3626,9]]},"1340":{"position":[[3626,9]]},"1351":{"position":[[3626,9]]},"1379":{"position":[[4502,9]]},"1403":{"position":[[4502,9]]},"1414":{"position":[[4502,9]]},"1431":{"position":[[3649,9]]}},"keywords":{}}],["xmldocument",{"_index":5680,"title":{},"content":{"1140":{"position":[[3658,11]]},"1316":{"position":[[3658,11]]},"1340":{"position":[[3658,11]]},"1351":{"position":[[3658,11]]},"1379":{"position":[[4547,11]]},"1403":{"position":[[4547,11]]},"1414":{"position":[[4547,11]]},"1431":{"position":[[3681,11]]}},"keywords":{}}],["xmlelement",{"_index":5682,"title":{},"content":{"1140":{"position":[[3697,10]]},"1316":{"position":[[3697,10]]},"1340":{"position":[[3697,10]]},"1351":{"position":[[3697,10]]},"1379":{"position":[[4594,10]]},"1403":{"position":[[4594,10]]},"1414":{"position":[[4594,10]]},"1431":{"position":[[3720,10]]}},"keywords":{}}],["xmlexist",{"_index":5686,"title":{},"content":{"1140":{"position":[[3741,9]]},"1316":{"position":[[3741,9]]},"1340":{"position":[[3741,9]]},"1351":{"position":[[3741,9]]},"1379":{"position":[[4655,9]]},"1403":{"position":[[4655,9]]},"1414":{"position":[[4655,9]]},"1431":{"position":[[3764,9]]}},"keywords":{}}],["xmlforest",{"_index":5690,"title":{},"content":{"1140":{"position":[[3785,9]]},"1316":{"position":[[3785,9]]},"1340":{"position":[[3785,9]]},"1351":{"position":[[3785,9]]},"1379":{"position":[[4712,9]]},"1403":{"position":[[4712,9]]},"1414":{"position":[[4712,9]]},"1431":{"position":[[3808,9]]}},"keywords":{}}],["xmliter",{"_index":5691,"title":{},"content":{"1140":{"position":[[3820,10]]},"1316":{"position":[[3820,10]]},"1340":{"position":[[3820,10]]},"1351":{"position":[[3820,10]]},"1379":{"position":[[4766,10]]},"1403":{"position":[[4766,10]]},"1414":{"position":[[4766,10]]},"1431":{"position":[[3843,10]]}},"keywords":{}}],["xmlnamespac",{"_index":5693,"title":{},"content":{"1140":{"position":[[3866,13]]},"1316":{"position":[[3866,13]]},"1340":{"position":[[3866,13]]},"1351":{"position":[[3866,13]]},"1379":{"position":[[4813,13]]},"1403":{"position":[[4813,13]]},"1414":{"position":[[4813,13]]},"1431":{"position":[[3889,13]]}},"keywords":{}}],["xmlpars",{"_index":5696,"title":{},"content":{"1140":{"position":[[3913,8]]},"1316":{"position":[[3913,8]]},"1340":{"position":[[3913,8]]},"1351":{"position":[[3913,8]]},"1379":{"position":[[4866,8]]},"1403":{"position":[[4866,8]]},"1414":{"position":[[4866,8]]},"1431":{"position":[[3936,8]]}},"keywords":{}}],["xmlpi",{"_index":5698,"title":{},"content":{"1140":{"position":[[3969,5]]},"1316":{"position":[[3969,5]]},"1340":{"position":[[3969,5]]},"1351":{"position":[[3969,5]]},"1379":{"position":[[4927,5]]},"1403":{"position":[[4927,5]]},"1414":{"position":[[4927,5]]},"1431":{"position":[[3992,5]]}},"keywords":{}}],["xmlqueri",{"_index":5700,"title":{},"content":{"1140":{"position":[[4002,8]]},"1316":{"position":[[4002,8]]},"1340":{"position":[[4002,8]]},"1351":{"position":[[4002,8]]},"1379":{"position":[[4975,8]]},"1403":{"position":[[4975,8]]},"1414":{"position":[[4975,8]]},"1431":{"position":[[4025,8]]}},"keywords":{}}],["xmlserial",{"_index":5702,"title":{},"content":{"1140":{"position":[[4046,12]]},"1316":{"position":[[4046,12]]},"1340":{"position":[[4046,12]]},"1351":{"position":[[4046,12]]},"1379":{"position":[[5033,12]]},"1403":{"position":[[5033,12]]},"1414":{"position":[[5033,12]]},"1431":{"position":[[4069,12]]}},"keywords":{}}],["xmltabl",{"_index":5706,"title":{},"content":{"1140":{"position":[[4095,8]]},"1316":{"position":[[4095,8]]},"1340":{"position":[[4095,8]]},"1351":{"position":[[4095,8]]},"1379":{"position":[[5086,8]]},"1403":{"position":[[5086,8]]},"1414":{"position":[[5086,8]]},"1431":{"position":[[4118,8]]}},"keywords":{}}],["xmltext",{"_index":5708,"title":{},"content":{"1140":{"position":[[4138,7]]},"1316":{"position":[[4138,7]]},"1340":{"position":[[4138,7]]},"1351":{"position":[[4138,7]]},"1379":{"position":[[5142,7]]},"1403":{"position":[[5142,7]]},"1414":{"position":[[5142,7]]},"1431":{"position":[[4161,7]]}},"keywords":{}}],["xmlvalid",{"_index":5711,"title":{},"content":{"1140":{"position":[[4181,11]]},"1316":{"position":[[4181,11]]},"1340":{"position":[[4181,11]]},"1351":{"position":[[4181,11]]},"1379":{"position":[[5196,11]]},"1403":{"position":[[5196,11]]},"1414":{"position":[[5196,11]]},"1431":{"position":[[4204,11]]}},"keywords":{}}],["xor",{"_index":6237,"title":{},"content":{"1292":{"position":[[6646,3]]},"1306":{"position":[[6646,3]]},"1329":{"position":[[6646,3]]}},"keywords":{}}],["xr9mfitngpwyj9d/pto7u9zupheoat8ave4wab08dsi",{"_index":1254,"title":{},"content":{"83":{"position":[[2287,44]]},"371":{"position":[[1206,44]]},"1139":{"position":[[1093,44]]}},"keywords":{}}],["xsmall",{"_index":2152,"title":{},"content":{"191":{"position":[[1522,6]]},"240":{"position":[[1483,6]]},"1032":{"position":[[1124,6]]},"1383":{"position":[[1470,6]]}},"keywords":{}}],["xxx",{"_index":4787,"title":{},"content":{"843":{"position":[[190,3],[216,3],[230,3],[253,3]]}},"keywords":{}}],["xxxx",{"_index":986,"title":{},"content":{"66":{"position":[[904,4],[909,4],[914,4]]}},"keywords":{}}],["xxxxxxxx",{"_index":5146,"title":{},"content":{"992":{"position":[[197,10]]},"1010":{"position":[[280,10]]}},"keywords":{}}],["xxxxxxxxxx.xxxxxxxxxx.tsdb.cloud.timescale.com:01234",{"_index":6419,"title":{},"content":{"1428":{"position":[[146,52]]}},"keywords":{}}],["xxxxxxxxxxxx"",{"_index":987,"title":{},"content":{"66":{"position":[[919,18]]}},"keywords":{}}],["xxxxxxxxxxxxxxxx",{"_index":3923,"title":{},"content":{"510":{"position":[[120,16]]},"1071":{"position":[[231,16]]}},"keywords":{}}],["y",{"_index":1906,"title":{},"content":{"161":{"position":[[883,3],[985,2]]},"337":{"position":[[383,1],[575,1]]}},"keywords":{}}],["yaml",{"_index":596,"title":{},"content":{"24":{"position":[[78,4]]},"63":{"position":[[661,4]]},"82":{"position":[[549,4]]},"83":{"position":[[839,5],[1355,4]]},"133":{"position":[[100,4]]},"161":{"position":[[1058,4]]},"225":{"position":[[635,4],[686,4]]},"236":{"position":[[274,4]]},"254":{"position":[[2118,4]]},"263":{"position":[[1062,4]]},"264":{"position":[[91,4]]},"274":{"position":[[1793,4],[1914,4]]},"275":{"position":[[113,4]]},"296":{"position":[[2670,5]]},"307":{"position":[[1780,4]]},"314":{"position":[[1624,4]]},"323":{"position":[[1963,4]]},"1008":{"position":[[1438,4]]}},"keywords":{}}],["ye",{"_index":4663,"title":{},"content":{"767":{"position":[[122,4]]}},"keywords":{}}],["year",{"_index":2127,"title":{},"content":{"190":{"position":[[1278,4]]},"331":{"position":[[108,5]]},"573":{"position":[[1237,6]]},"747":{"position":[[850,4]]},"754":{"position":[[680,5]]},"794":{"position":[[886,5]]},"809":{"position":[[886,5]]},"825":{"position":[[722,5]]},"859":{"position":[[668,5]]},"1140":{"position":[[4226,4]]},"1286":{"position":[[943,5]]},"1292":{"position":[[6686,4]]},"1301":{"position":[[779,5]]},"1306":{"position":[[6686,4]]},"1316":{"position":[[4226,4]]},"1325":{"position":[[943,5]]},"1329":{"position":[[6686,4]]},"1340":{"position":[[4226,4]]},"1351":{"position":[[4226,4]]},"1379":{"position":[[5250,4]]},"1403":{"position":[[5250,4]]},"1414":{"position":[[5250,4]]},"1431":{"position":[[4249,4]]}},"keywords":{}}],["year%/%monthnum%/%day%/%postname%/a",{"_index":5348,"title":{},"content":{"1089":{"position":[[186,37]]}},"keywords":{}}],["year_month",{"_index":6240,"title":{},"content":{"1292":{"position":[[6718,10]]},"1306":{"position":[[6718,10]]},"1329":{"position":[[6718,10]]}},"keywords":{}}],["yellow",{"_index":1782,"title":{},"content":{"138":{"position":[[1266,9]]},"141":{"position":[[1352,9]]},"142":{"position":[[1251,9]]}},"keywords":{}}],["yes.edit",{"_index":4726,"title":{},"content":{"824":{"position":[[235,8]]},"904":{"position":[[235,8]]},"1051":{"position":[[235,8]]},"1373":{"position":[[235,8]]},"1374":{"position":[[235,8]]}},"keywords":{}}],["yesterday",{"_index":1801,"title":{},"content":{"138":{"position":[[2164,10]]},"141":{"position":[[2120,10]]},"142":{"position":[[2224,10]]},"584":{"position":[[768,10]]}},"keywords":{}}],["yield",{"_index":248,"title":{},"content":{"7":{"position":[[535,5]]},"182":{"position":[[254,5]]},"290":{"position":[[81,5]]},"301":{"position":[[72,5]]}},"keywords":{}}],["york",{"_index":2101,"title":{},"content":{"189":{"position":[[16,4]]}},"keywords":{}}],["york","user":"204.116.28.102"",{"_index":3096,"title":{},"content":{"316":{"position":[[1061,55]]}},"keywords":{}}],["you'd",{"_index":437,"title":{},"content":{"14":{"position":[[800,5],[1157,5]]},"53":{"position":[[553,5]]},"54":{"position":[[162,5]]},"60":{"position":[[963,5]]},"61":{"position":[[315,5]]},"84":{"position":[[1428,5]]},"104":{"position":[[273,5]]},"119":{"position":[[250,5],[329,5]]},"154":{"position":[[615,5],[760,5],[903,5]]},"175":{"position":[[327,5]]},"177":{"position":[[227,5]]},"183":{"position":[[1005,5]]},"189":{"position":[[462,5]]},"190":{"position":[[1387,5]]},"213":{"position":[[444,5]]},"259":{"position":[[59,5],[1740,5]]},"267":{"position":[[1429,5]]},"268":{"position":[[1136,5]]},"269":{"position":[[707,5],[1321,5]]},"270":{"position":[[1058,5],[1295,5],[1936,5]]},"288":{"position":[[241,5]]},"299":{"position":[[233,5]]},"309":{"position":[[2654,5],[3452,5]]},"517":{"position":[[1454,5],[2006,5],[2637,5],[3790,5]]},"534":{"position":[[1424,5]]},"754":{"position":[[738,5]]},"794":{"position":[[944,5]]},"809":{"position":[[944,5]]},"825":{"position":[[780,5]]},"959":{"position":[[187,5]]},"982":{"position":[[189,5]]},"985":{"position":[[578,5]]},"989":{"position":[[348,5]]},"1000":{"position":[[756,5]]},"1004":{"position":[[431,5]]},"1070":{"position":[[846,5]]},"1085":{"position":[[734,5]]},"1133":{"position":[[801,5]]},"1232":{"position":[[412,5]]},"1286":{"position":[[1001,5]]},"1301":{"position":[[837,5]]},"1325":{"position":[[1001,5]]},"1383":{"position":[[152,5],[436,5]]}},"keywords":{}}],["you'll",{"_index":352,"title":{},"content":{"11":{"position":[[1987,6]]},"30":{"position":[[35,6]]},"32":{"position":[[18,6]]},"39":{"position":[[18,6]]},"61":{"position":[[92,6]]},"75":{"position":[[362,6]]},"136":{"position":[[104,6],[255,6]]},"138":{"position":[[1324,6]]},"141":{"position":[[405,6]]},"142":{"position":[[1317,6]]},"146":{"position":[[1017,6]]},"149":{"position":[[1011,6]]},"152":{"position":[[1001,6]]},"171":{"position":[[1,6]]},"172":{"position":[[1,6]]},"173":{"position":[[1,6],[81,6],[255,6],[559,6]]},"177":{"position":[[114,6]]},"179":{"position":[[134,6],[325,6],[385,6]]},"180":{"position":[[307,6],[432,6],[791,6],[864,6]]},"182":{"position":[[539,6],[645,6],[690,6]]},"183":{"position":[[1,6],[810,6],[1673,6],[2273,6],[2619,6],[4116,6]]},"184":{"position":[[6,6],[58,6]]},"188":{"position":[[1,6]]},"189":{"position":[[1112,6],[1313,6],[1727,6],[1808,6]]},"190":{"position":[[380,6],[543,6],[1289,6],[1968,6]]},"192":{"position":[[1470,6],[2361,6]]},"213":{"position":[[34,6]]},"217":{"position":[[1,6],[1878,6],[1942,6],[2179,6]]},"218":{"position":[[2105,6]]},"222":{"position":[[62,6]]},"224":{"position":[[64,6],[972,6]]},"227":{"position":[[145,6],[219,6]]},"228":{"position":[[568,6]]},"232":{"position":[[206,6],[725,6]]},"263":{"position":[[1080,6],[1184,6]]},"264":{"position":[[7,6]]},"266":{"position":[[492,6]]},"267":{"position":[[1,6],[1200,6],[1626,6],[1681,6]]},"268":{"position":[[200,6]]},"270":{"position":[[136,6]]},"274":{"position":[[423,6]]},"275":{"position":[[7,6],[419,6],[729,6]]},"277":{"position":[[332,6]]},"281":{"position":[[442,6]]},"288":{"position":[[1,6]]},"289":{"position":[[269,6]]},"290":{"position":[[1,6],[1402,6],[1659,6]]},"291":{"position":[[7,6],[656,6],[1915,6]]},"299":{"position":[[1,6],[380,6]]},"300":{"position":[[248,6]]},"301":{"position":[[1,6],[1498,6],[1633,6]]},"302":{"position":[[7,6],[656,6],[1827,6]]},"305":{"position":[[551,6]]},"307":{"position":[[336,6],[528,6],[798,6]]},"309":{"position":[[1537,6],[1837,6]]},"339":{"position":[[106,6]]},"364":{"position":[[175,6]]},"366":{"position":[[1,6],[1065,6]]},"370":{"position":[[67,6]]},"373":{"position":[[823,6]]},"375":{"position":[[24,6],[101,6]]},"383":{"position":[[1,6],[112,6]]},"387":{"position":[[127,6]]},"390":{"position":[[24,6]]},"395":{"position":[[24,6]]},"400":{"position":[[24,6]]},"413":{"position":[[246,6]]},"415":{"position":[[41,6],[108,6]]},"445":{"position":[[1,6]]},"446":{"position":[[1,6]]},"448":{"position":[[127,6]]},"452":{"position":[[43,6]]},"458":{"position":[[43,6]]},"478":{"position":[[166,6]]},"494":{"position":[[171,6]]},"507":{"position":[[24,6]]},"514":{"position":[[36,6]]},"515":{"position":[[45,6],[955,6]]},"534":{"position":[[127,6]]},"538":{"position":[[40,6]]},"548":{"position":[[365,6]]},"556":{"position":[[127,6]]},"571":{"position":[[520,6],[670,6]]},"573":{"position":[[131,6]]},"581":{"position":[[24,6],[197,6],[395,6]]},"582":{"position":[[41,6],[283,6]]},"591":{"position":[[1,6]]},"599":{"position":[[166,6]]},"608":{"position":[[1,6],[141,6]]},"609":{"position":[[1,6]]},"611":{"position":[[127,6]]},"617":{"position":[[442,6],[594,6]]},"623":{"position":[[44,6]]},"629":{"position":[[41,6]]},"635":{"position":[[24,6]]},"659":{"position":[[81,6]]},"661":{"position":[[146,6],[460,6]]},"683":{"position":[[95,6],[268,6]]},"685":{"position":[[112,6]]},"698":{"position":[[42,6]]},"704":{"position":[[41,6]]},"718":{"position":[[35,6]]},"720":{"position":[[127,6]]},"745":{"position":[[42,6]]},"750":{"position":[[24,6]]},"753":{"position":[[1628,6]]},"766":{"position":[[24,6]]},"767":{"position":[[2438,6]]},"780":{"position":[[1,6]]},"789":{"position":[[24,6]]},"792":{"position":[[2419,6]]},"793":{"position":[[1651,6]]},"807":{"position":[[24,6]]},"808":{"position":[[1601,6]]},"823":{"position":[[24,6]]},"824":{"position":[[2550,6]]},"840":{"position":[[168,6]]},"849":{"position":[[111,6],[1790,6]]},"855":{"position":[[24,6],[151,6]]},"859":{"position":[[127,6]]},"894":{"position":[[43,6]]},"903":{"position":[[1,6]]},"904":{"position":[[2365,6]]},"915":{"position":[[1,6]]},"918":{"position":[[2657,6]]},"919":{"position":[[2558,6]]},"930":{"position":[[1,6]]},"931":{"position":[[2080,6]]},"947":{"position":[[283,6]]},"963":{"position":[[1,6]]},"987":{"position":[[35,6],[99,6]]},"988":{"position":[[95,6],[145,6]]},"989":{"position":[[439,6],[731,6]]},"991":{"position":[[127,6]]},"995":{"position":[[40,6]]},"1002":{"position":[[35,6],[99,6]]},"1003":{"position":[[95,6],[145,6]]},"1004":{"position":[[522,6],[814,6]]},"1009":{"position":[[127,6]]},"1018":{"position":[[1,6]]},"1031":{"position":[[24,6]]},"1043":{"position":[[1893,6]]},"1051":{"position":[[2081,6]]},"1059":{"position":[[1927,6]]},"1066":{"position":[[1,6]]},"1067":{"position":[[430,6],[670,6]]},"1070":{"position":[[127,6]]},"1081":{"position":[[119,6]]},"1082":{"position":[[85,6],[132,6]]},"1083":{"position":[[61,6],[132,6]]},"1085":{"position":[[147,6]]},"1122":{"position":[[24,6]]},"1136":{"position":[[24,6]]},"1138":{"position":[[67,6]]},"1142":{"position":[[24,6],[222,6]]},"1149":{"position":[[24,6],[670,6]]},"1160":{"position":[[24,6],[385,6]]},"1168":{"position":[[24,6],[222,6]]},"1176":{"position":[[24,6],[602,6]]},"1177":{"position":[[468,6]]},"1185":{"position":[[24,6],[402,6]]},"1194":{"position":[[24,6],[612,6]]},"1203":{"position":[[24,6],[773,6]]},"1204":{"position":[[25,6],[333,6]]},"1211":{"position":[[24,6]]},"1218":{"position":[[24,6]]},"1226":{"position":[[24,6],[413,6]]},"1227":{"position":[[84,6],[257,6]]},"1228":{"position":[[91,6]]},"1243":{"position":[[24,6],[190,6]]},"1244":{"position":[[1,6]]},"1245":{"position":[[1,6],[394,6],[546,6]]},"1251":{"position":[[1,6]]},"1258":{"position":[[24,6],[264,6]]},"1274":{"position":[[24,6]]},"1281":{"position":[[24,6]]},"1295":{"position":[[24,6]]},"1303":{"position":[[1723,6]]},"1309":{"position":[[24,6]]},"1319":{"position":[[24,6]]},"1322":{"position":[[62,6]]},"1332":{"position":[[24,6]]},"1335":{"position":[[62,6]]},"1343":{"position":[[24,6]]},"1354":{"position":[[24,6],[437,6]]},"1365":{"position":[[24,6]]},"1372":{"position":[[24,6]]},"1373":{"position":[[1330,6]]},"1374":{"position":[[1334,6]]},"1382":{"position":[[24,6],[101,6],[656,6]]},"1388":{"position":[[259,6],[493,6]]},"1391":{"position":[[450,6]]},"1396":{"position":[[24,6]]},"1397":{"position":[[1162,6]]},"1398":{"position":[[1165,6]]},"1406":{"position":[[24,6]]},"1409":{"position":[[1166,6]]},"1417":{"position":[[24,6]]},"1425":{"position":[[24,6]]},"1447":{"position":[[584,6]]},"1448":{"position":[[135,6]]},"1479":{"position":[[308,6]]}},"keywords":{}}],["you'r",{"_index":329,"title":{},"content":{"11":{"position":[[1233,6]]},"13":{"position":[[68,6]]},"27":{"position":[[470,6]]},"32":{"position":[[77,6]]},"68":{"position":[[66,6]]},"79":{"position":[[188,6]]},"81":{"position":[[2355,6]]},"82":{"position":[[1333,6]]},"83":{"position":[[395,6]]},"99":{"position":[[722,6]]},"107":{"position":[[101,6]]},"138":{"position":[[479,6]]},"139":{"position":[[50,6]]},"140":{"position":[[32,6],[395,6]]},"143":{"position":[[58,6]]},"154":{"position":[[1263,6],[1296,6],[1534,6]]},"162":{"position":[[1639,6]]},"163":{"position":[[376,6]]},"164":{"position":[[212,6]]},"165":{"position":[[649,6]]},"170":{"position":[[238,6]]},"177":{"position":[[144,6],[290,6]]},"183":{"position":[[4369,6],[4541,6],[4667,6]]},"185":{"position":[[197,6]]},"189":{"position":[[328,6]]},"191":{"position":[[179,6]]},"217":{"position":[[1636,6],[2114,6]]},"228":{"position":[[19,6]]},"229":{"position":[[19,6]]},"241":{"position":[[478,6]]},"259":{"position":[[1409,6],[2955,6]]},"263":{"position":[[393,6]]},"264":{"position":[[303,6],[800,6]]},"267":{"position":[[563,6]]},"275":{"position":[[339,6],[1072,6]]},"290":{"position":[[1580,6]]},"301":{"position":[[1260,7]]},"307":{"position":[[492,6],[769,6]]},"309":{"position":[[167,6],[1431,6]]},"326":{"position":[[1362,6]]},"382":{"position":[[119,6]]},"387":{"position":[[91,6],[358,6]]},"392":{"position":[[457,6]]},"397":{"position":[[614,6]]},"417":{"position":[[628,6],[2126,6]]},"427":{"position":[[187,6]]},"444":{"position":[[122,6]]},"448":{"position":[[91,6]]},"478":{"position":[[321,6]]},"485":{"position":[[485,6]]},"488":{"position":[[517,6]]},"517":{"position":[[210,6]]},"534":{"position":[[91,6]]},"548":{"position":[[482,6]]},"556":{"position":[[91,6]]},"573":{"position":[[95,6]]},"577":{"position":[[306,6]]},"588":{"position":[[301,6]]},"595":{"position":[[1844,6]]},"599":{"position":[[321,6]]},"611":{"position":[[91,6]]},"657":{"position":[[670,6]]},"659":{"position":[[674,6]]},"673":{"position":[[485,6]]},"676":{"position":[[517,6]]},"688":{"position":[[485,6]]},"691":{"position":[[517,6]]},"720":{"position":[[91,6]]},"754":{"position":[[575,6]]},"792":{"position":[[165,6],[1487,6]]},"794":{"position":[[603,6],[781,6]]},"809":{"position":[[603,6],[781,6]]},"825":{"position":[[617,6]]},"840":{"position":[[368,6]]},"849":{"position":[[311,6]]},"859":{"position":[[91,6]]},"912":{"position":[[1610,6]]},"918":{"position":[[165,6]]},"987":{"position":[[4,6]]},"988":{"position":[[4,6]]},"991":{"position":[[91,6],[712,6]]},"1002":{"position":[[4,6]]},"1003":{"position":[[4,6]]},"1009":{"position":[[91,6],[775,6]]},"1070":{"position":[[91,6]]},"1083":{"position":[[4,6]]},"1085":{"position":[[112,6]]},"1125":{"position":[[406,6]]},"1144":{"position":[[767,6]]},"1165":{"position":[[232,6]]},"1170":{"position":[[767,6]]},"1182":{"position":[[258,6]]},"1191":{"position":[[260,6]]},"1247":{"position":[[82,6]]},"1262":{"position":[[260,6]]},"1286":{"position":[[660,6],[838,6]]},"1301":{"position":[[674,6]]},"1325":{"position":[[660,6],[838,6]]},"1389":{"position":[[259,6]]},"1449":{"position":[[1,6],[89,6]]},"1461":{"position":[[285,6],[486,6]]}},"keywords":{}}],["you'v",{"_index":154,"title":{},"content":{"4":{"position":[[160,6]]},"27":{"position":[[221,6]]},"136":{"position":[[73,6]]},"165":{"position":[[842,6]]},"169":{"position":[[1233,6]]},"173":{"position":[[1157,6]]},"174":{"position":[[85,6]]},"193":{"position":[[1,6]]},"207":{"position":[[1545,6]]},"218":{"position":[[10,6],[2021,6]]},"219":{"position":[[10,6]]},"225":{"position":[[7,6]]},"230":{"position":[[308,6]]},"241":{"position":[[21,6],[135,6],[312,6]]},"270":{"position":[[1781,6]]},"574":{"position":[[487,6]]}},"keywords":{}}],["your",{"_index":1046,"title":{},"content":{"70":{"position":[[269,5]]},"1076":{"position":[[133,5],[285,5]]},"1356":{"position":[[371,6]]}},"keywords":{}}],["your_client_id",{"_index":5145,"title":{},"content":{"992":{"position":[[141,16]]},"1010":{"position":[[224,16]]},"1016":{"position":[[172,16]]},"1363":{"position":[[192,16]]}},"keywords":{}}],["your_estuary_refresh_token",{"_index":2654,"title":{},"content":{"250":{"position":[[421,29]]}},"keywords":{}}],["your_group_id",{"_index":2656,"title":{},"content":{"250":{"position":[[463,16]]}},"keywords":{}}],["your_key",{"_index":2069,"title":{},"content":{"183":{"position":[[1199,9],[1234,8],[1263,9]]},"268":{"position":[[831,9],[866,8],[895,9]]},"269":{"position":[[456,9],[491,8],[520,9]]}},"keywords":{}}],["your_topic_nam",{"_index":2659,"title":{},"content":{"250":{"position":[[567,18]]}},"keywords":{}}],["your_usernam",{"_index":4568,"title":{},"content":{"748":{"position":[[177,15]]}},"keywords":{}}],["yourprefix",{"_index":2068,"title":{},"content":{"183":{"position":[[1035,11]]}},"keywords":{}}],["yourprefix/wikipedia/us",{"_index":2063,"title":{},"content":{"183":{"position":[[442,25],[1141,25],[3527,25]]},"184":{"position":[[822,25]]}},"keywords":{}}],["yourprefix/yournam",{"_index":2089,"title":{},"content":{"184":{"position":[[305,19]]}},"keywords":{}}],["yourschemasinto",{"_index":958,"title":{},"content":{"64":{"position":[[225,15]]}},"keywords":{}}],["yourself",{"_index":2028,"title":{},"content":{"174":{"position":[[70,9]]},"281":{"position":[[3307,9]]},"366":{"position":[[419,9]]},"903":{"position":[[445,9]]},"915":{"position":[[445,9]]},"930":{"position":[[445,9]]},"963":{"position":[[599,9]]}},"keywords":{}}],["youtub",{"_index":5379,"title":{"1098":{"position":[[0,7]]}},"content":{"1099":{"position":[[56,7]]},"1100":{"position":[[250,7]]},"1101":{"position":[[329,7]]},"1102":{"position":[[90,7]]}},"keywords":{}}],["you’d",{"_index":6670,"title":{},"content":{"1472":{"position":[[117,5]]}},"keywords":{}}],["you’ll",{"_index":2208,"title":{},"content":{"199":{"position":[[36,6]]},"205":{"position":[[298,6]]},"206":{"position":[[970,6]]},"209":{"position":[[142,6],[248,6]]},"212":{"position":[[278,6]]},"232":{"position":[[118,6],[354,6],[480,6]]},"234":{"position":[[352,6]]},"239":{"position":[[1692,6]]},"243":{"position":[[272,6]]},"252":{"position":[[84,6]]},"253":{"position":[[60,6],[112,6],[1143,6]]},"294":{"position":[[91,6]]},"295":{"position":[[155,6],[950,6],[1489,6],[1541,6]]},"312":{"position":[[91,6]]},"313":{"position":[[60,6],[112,6],[1143,6],[3484,6]]},"315":{"position":[[215,6]]},"1236":{"position":[[40,6]]},"1264":{"position":[[40,6]]}},"keywords":{}}],["you’r",{"_index":2226,"title":{},"content":{"204":{"position":[[737,6]]},"237":{"position":[[2863,6]]},"239":{"position":[[1397,6]]},"253":{"position":[[998,6]]},"295":{"position":[[1699,6],[3921,6]]},"313":{"position":[[998,6]]}},"keywords":{}}],["you’v",{"_index":2612,"title":{},"content":{"240":{"position":[[4295,6]]}},"keywords":{}}],["ywp8mdvkqwpouzw6wneitcgduacx5u/1jeggmuirgx2st5kcqqdsstfwdcyqbdhr",{"_index":1247,"title":{},"content":{"83":{"position":[[1832,64]]},"371":{"position":[[751,64]]},"1139":{"position":[[638,64]]}},"keywords":{}}],["yyyi",{"_index":3492,"title":{},"content":{"387":{"position":[[1234,4]]},"448":{"position":[[982,4]]},"496":{"position":[[450,4]]},"517":{"position":[[1514,4],[2066,4],[2679,4],[3840,4]]},"534":{"position":[[1479,4]]},"573":{"position":[[747,4]]},"584":{"position":[[802,4]]},"670":{"position":[[540,4]]},"747":{"position":[[712,4],[929,4]]},"859":{"position":[[535,4]]},"895":{"position":[[198,4]]},"897":{"position":[[104,4]]},"959":{"position":[[248,4]]},"982":{"position":[[250,4]]},"1009":{"position":[[872,4]]},"1085":{"position":[[806,4],[1210,4]]},"1094":{"position":[[376,4]]},"1107":{"position":[[175,4]]},"1133":{"position":[[869,4]]}},"keywords":{}}],["z",{"_index":81,"title":{},"content":{"2":{"position":[[364,2],[428,3]]},"341":{"position":[[301,1]]},"1437":{"position":[[1057,1]]}},"keywords":{}}],["zelda",{"_index":1717,"title":{},"content":{"128":{"position":[[435,6],[637,5],[732,5]]},"129":{"position":[[1132,5]]}},"keywords":{}}],["zelda"",{"_index":1732,"title":{},"content":{"130":{"position":[[284,11]]}},"keywords":{}}],["zendesk",{"_index":3388,"title":{"1103":{"position":[[0,7]]},"1127":{"position":[[0,7]]}},"content":{"364":{"position":[[3548,7],[3607,7],[3624,7],[3686,7]]},"660":{"position":[[1108,7],[1118,7]]},"1104":{"position":[[56,7]]},"1105":{"position":[[3,7]]},"1106":{"position":[[251,7]]},"1107":{"position":[[140,7],[302,7],[462,7]]},"1108":{"position":[[89,7]]},"1128":{"position":[[56,7]]},"1129":{"position":[[51,7]]},"1130":{"position":[[19,7]]},"1131":{"position":[[19,7],[143,7],[161,7],[188,7]]},"1132":{"position":[[251,7]]},"1133":{"position":[[341,7],[834,7],[996,7],[1258,7]]},"1134":{"position":[[89,7]]}},"keywords":{}}],["zero",{"_index":1885,"title":{},"content":{"159":{"position":[[919,5],[1040,5]]},"320":{"position":[[2271,4]]},"343":{"position":[[1055,4]]},"419":{"position":[[1998,5]]},"441":{"position":[[607,5]]},"504":{"position":[[1627,5]]},"547":{"position":[[2000,5]]},"639":{"position":[[1625,5]]},"757":{"position":[[1331,4]]},"770":{"position":[[1331,4]]},"797":{"position":[[1331,4]]},"812":{"position":[[1331,4]]},"828":{"position":[[1331,4]]},"867":{"position":[[2039,4]]},"1023":{"position":[[1981,5]]},"1443":{"position":[[1,4]]},"1444":{"position":[[1,4]]},"1455":{"position":[[112,4]]}},"keywords":{}}],["zerofil",{"_index":6243,"title":{},"content":{"1292":{"position":[[6767,8]]},"1306":{"position":[[6767,8]]},"1329":{"position":[[6767,8]]}},"keywords":{}}],["zip",{"_index":2108,"title":{},"content":{"189":{"position":[[278,6]]},"418":{"position":[[155,3]]},"439":{"position":[[412,3]]},"546":{"position":[[892,3]]},"638":{"position":[[184,3]]},"1022":{"position":[[221,3]]}},"keywords":{}}],["zipgzipzstd",{"_index":3900,"title":{},"content":{"499":{"position":[[244,11]]},"634":{"position":[[236,11]]}},"keywords":{}}],["zipgzipzstdnon",{"_index":3612,"title":{},"content":{"419":{"position":[[836,15]]},"440":{"position":[[852,15]]},"504":{"position":[[768,15]]},"547":{"position":[[837,15]]},"639":{"position":[[766,15]]},"1023":{"position":[[817,15]]}},"keywords":{}}],["zombi",{"_index":6478,"title":{},"content":{"1437":{"position":[[877,6]]}},"keywords":{}}],["zone",{"_index":4563,"title":{"754":{"position":[[25,5]]},"794":{"position":[[23,5]]},"809":{"position":[[23,5]]},"825":{"position":[[23,5]]},"1286":{"position":[[23,5]]},"1301":{"position":[[23,5]]},"1325":{"position":[[23,5]]}},"content":{"747":{"position":[[449,4]]},"750":{"position":[[1142,4]]},"752":{"position":[[1025,5]]},"754":{"position":[[110,4],[341,4],[436,4],[908,6],[947,4],[1176,4]]},"757":{"position":[[630,4]]},"766":{"position":[[1142,4]]},"770":{"position":[[630,4]]},"789":{"position":[[1543,4]]},"791":{"position":[[1059,5]]},"794":{"position":[[214,4],[309,4],[1114,6],[1153,4],[1380,4]]},"797":{"position":[[630,4]]},"807":{"position":[[1130,4]]},"809":{"position":[[214,4],[309,4],[1114,6],[1153,4],[1380,4]]},"812":{"position":[[630,4]]},"823":{"position":[[1130,4]]},"825":{"position":[[214,4],[309,4],[950,6],[989,4],[1216,4]]},"828":{"position":[[630,4]]},"1096":{"position":[[370,4],[393,4]]},"1285":{"position":[[642,4]]},"1286":{"position":[[243,4],[366,4],[1171,6],[1210,4],[1466,4]]},"1292":{"position":[[6804,4]]},"1300":{"position":[[642,4]]},"1301":{"position":[[243,4],[366,4],[1007,6],[1046,4],[1302,4]]},"1306":{"position":[[6804,4]]},"1324":{"position":[[642,4]]},"1325":{"position":[[243,4],[366,4],[1171,6],[1210,4],[1466,4]]},"1329":{"position":[[6804,4]]},"1379":{"position":[[5306,4]]},"1403":{"position":[[5306,4]]},"1414":{"position":[[5306,4]]},"1452":{"position":[[679,4],[3204,4],[3250,4],[3521,4]]}},"keywords":{}}],["zonessystem",{"_index":5375,"title":{},"content":{"1096":{"position":[[414,11]]}},"keywords":{}}],["zstandard",{"_index":26,"title":{},"content":{"1":{"position":[[322,10]]}},"keywords":{}}]],"pipeline":["stemmer"]} \ No newline at end of file diff --git a/pr-preview/pr-1594/overview/comparisons/index.html b/pr-preview/pr-1594/overview/comparisons/index.html deleted file mode 100644 index 32e7c37d57..0000000000 --- a/pr-preview/pr-1594/overview/comparisons/index.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -Comparisons | Estuary Flow - - - - - - - - - -

      Comparisons

      -

      Because Flow combines many functionalities, it's related to many types of data systems. Choose a familiar system from the list below to jump to an explanation of how it compares with Flow (or how you can use the two together).

      - -

      Apache Beam and Google Cloud Dataflow

      -

      Flow’s most apt comparison is to Apache Beam. You may use a variety of runners (processing engines) for your Beam deployment. One of the most popular, Google Cloud Dataflow, is a more robust redistribution under an additional SDK. Regardless of how you use Beam, there’s a lot of conceptual overlap with Flow. This makes Beam and Flow alternatives rather than complementary technologies, but there are key differences.

      -

      Like Beam, Flow’s primary primitive is a collection. You build a processing graph (called a pipeline in Beam and a Data Flow in Flow) by relating multiple collections together through procedural transformations, or lambdas. As with Beam, Flow’s runtime performs automatic data shuffles and is designed to allow fully automatic scaling. Also like Beam, collections have associated schemas.

      -

      Unlike Beam, Flow doesn’t distinguish between batch and streaming contexts. Flow unifies these paradigms under a single collection concept, allowing you to seamlessly work with both data types.

      -

      Also, while Beam allows you the option to define combine operators, Flow’s runtime always applies combine operators. These are built using the declared semantics of the document’s schema, which makes it much more efficient and cost-effective to work with streaming data.

      -

      Finally, Flow allows stateful stream-to-stream joins without the windowing semantics imposed by Beam. Notably, Flow’s modeling of state – via its per-key register concept – is substantially more powerful than Beam's per-key-and-window model. For example, registers can trivially model the cumulative lifetime value of a customer.

      -

      Kafka

      -

      Flow inhabits a different space than Kafka does by itself. Kafka is an infrastructure that supports streaming applications running elsewhere. Flow is an opinionated framework for working with real-time data. You might think of Flow as an analog to an opinionated bundling of several important features from the broader Kafka ecosystem.

      -

      Flow is built on Gazette, a highly-scalable streaming broker similar to log-oriented pub/sub systems. Thus, Kafka is more directly comparable to Gazette. Flow also uses Gazette’s consumer framework, which has similarities to Kafka consumers. Both manage scale-out execution contexts for consumer tasks, offer durable local task stores, and provide exactly-once semantics.

      -

      Journals in Gazette and Flow are roughly analogous to Kafka partitions. Each journal is a single append-only log. Gazette has no native notion of a topic, but instead supports label-based selection of subsets of journals, which tends to be more flexible. Gazette journals store data in contiguous chunks called fragments, which typically live in cloud storage. Each journal can have its own separate storage configuration, which Flow leverages to allow users to bring their own cloud storage buckets. Another unique feature of Gazette is its ability to serve reads of historical data by providing clients with pre-signed cloud storage URLs, which enables it to serve many readers very efficiently.

      -

      Generally, Flow users don't need to know or care much about Gazette and its architecture, since Flow provides a higher-level interface over groups of journals, called collections.

      -

      Flow collections are somewhat similar to Kafka streams, but with some important differences. Collections always store JSON and must have an associated JSON schema. Collections also support automatic logical and physical partitioning. Each collection is backed by one or more journals, depending on the partitioning.

      -

      Flow tasks are most similar to Kafka stream processors, but are more opinionated. Tasks fall into one of three categories: captures, derivations, and materializations. Tasks may also have more than one process, which Flow calls shards, to allow for parallel processing. Tasks and shards are fully managed by Flow. This includes transactional state management and zero-downtime splitting of shards, which enables turnkey scaling.

      -

      See how Flow compares to popular stream processing platforms that use Kafka:

      - -

      Spark

      -

      Spark can be described as a batch engine with stream processing add-ons, where Flow is fundamentally a streaming system that is able to easily integrate with batch systems.

      -

      You can think of a Flow collection as a set of RDDs with common associated metadata. In Spark, you can save an RDD to a variety of external systems, like cloud storage or a database. Likewise, you can load from a variety of external systems to create an RDD. Finally, you can transform one RDD into another. You use Flow collections in a similar manner. They represent a logical dataset, which you can materialize to push the data into some external system like cloud storage or a database. You can also create a collection that is derived by applying stateful transformations to one or more source collections.

      -

      Unlike Spark RDDs, Flow collections are backed by one or more unbounded append-only logs. Therefore, you don't create a new collection each time data arrives; you simply append to the existing one. Collections can be partitioned and can support extremely large volumes of data.

      -

      Spark's processing primitives, applications, jobs, and tasks, don't translate perfectly to Flow, but we can make some useful analogies. This is partly because Spark is not very opinionated about what an application does. Your Spark application could read data from cloud storage, then transform it, then write the results out to a database. The closest analog to a Spark application in Flow is the Data Flow. A Data Flow is a composition of Flow tasks, which are quite different from tasks in Spark.

      -

      In Flow, a task is a logical unit of work that does one of capture (ingest), derive (transform), or materialize (write results to an external system). What Spark calls a task is actually closer to a Flow shard. In Flow, a task is a logical unit of work, and shards represent the potentially numerous processes that actually carry out that work. Shards are the unit of parallelism in Flow, and you can easily split them for turnkey scaling.

      -

      Composing Flow tasks is also a little different than composing Spark jobs. Flow tasks always produce and/or consume data in collections, instead of piping data directly from one shard to another. This is because every task in Flow is transactional and, to the greatest degree possible, fault-tolerant. This design also affords painless backfills of historical data when you want to add new transformations or materializations.

      -

      Hadoop, HDFS, and Hive

      -

      There are many different ways to use Hadoop, HDFS, and the ecosystem of related projects, several of which are useful comparisons to Flow.

      -

      To gain an understanding of Flow's processing model for derivations, see this blog post about MapReduce in Flow.

      -

      HDFS is sometimes used as a system of record for analytics data, typically paired with an orchestration system for analytics jobs. If you do this, you likely export datasets from your source systems into HDFS. Then, you use some other tool to coordinate running various MapReduce jobs, often indirectly through systems like Hive.

      -

      For this use case, the best way of describing Flow is that it completely changes the paradigm. In Flow, you always append data to existing collections, rather than creating a new one each time a job is run. In fact, Flow has no notion of a job like there is in Hadoop. Flow tasks run continuously and everything stays up to date in real time, so there's never a need for outside orchestration or coordination. Put simply, Flow collections are log-like, and files in HDFS typically store table-like data. This blog post explores those differences in greater depth.

      -

      To make this more concrete, imagine a hypothetical example of a workflow in the Hadoop world where you export data from a source system, perform some transformations, and then run some Hive queries.

      -

      In Flow, you instead define a capture of data from the source, which runs continuously and keeps a collection up to date with the latest data from the source. Then you transform the data with Flow derivations, which again apply the transformations incrementally and in real time. While you could actually use tools like Hive to directly query data from Flow collections — the layout of collection data in cloud storage is intentionally compatible with this — you could also materialize a view of your transformation results to any database, which is also kept up to date in real time.

      -

      Fivetran, Airbyte, and other ELT solutions

      -

      Tools like Fivetran and Airbyte are purpose-built to move data from one place to another. These ELT tools typically model sources and destinations, and run regularly scheduled jobs to export from the source directly to the destination. Flow models things differently. Instead of modeling the world in terms of independent scheduled jobs that copy data from source to destination, Data Flows model a directed graph of -captures (reads from sources), -derivations (transforms), and -materializations (writes to destinations). -Collectively, these are called tasks.

      -

      Tasks in Flow are only indirectly linked. Captures read data from a source and output to collections. Flow collections store all the data in cloud storage, with configurable retention for historical data. You can then materialize each collection to any number of destination systems. Each one will be kept up to date in real time, and new materializations can automatically backfill all your historical data. Collections in Flow always have an associated JSON schema, and they use that to ensure the validity of all collection data. Tasks are also transactional and generally guarantee end-to-end exactly-once processing (so long as the endpoint system can accommodate them).

      -

      Like Airbyte, Flow uses connectors for interacting with external systems in captures and materializations. For captures, -Flow integrates the Airbyte specification, -so all Airbyte source connectors can be used with Flow. -For materializations, Flow uses its own protocol which is not compatible with the Airbyte spec. -In either case, the usage of connectors is pretty similar.

      -

      In terms of technical capabilities, Flow can do everything that these tools can and more. -Both Fivetran and Airbyte both currently have graphical interfaces that make them much easier for -non-technical users to configure. Flow, too, is focused on empowering non-technical users through its web application. -At the same time, it Flow offers declarative YAML for configuration, which works excellently in a GitOps workflow.

      -

      Flow vs Fivetran feature and pricing breakdown.

      -

      dbt

      -

      dbt is a tool that enables data analysts and engineers to transform data in their warehouses more effectively.

      -

      In addition to – and perhaps more important than – its transform capability, dbt brought an entirely new workflow for working with data: -one that prioritizes version control, testing, local development, documentation, composition, and re-use.

      -

      Like dbt, Flow uses a declarative model and tooling, but the similarities end there. dbt is a tool for defining transformations, which are executed within your analytics warehouse. -Flow is a tool for delivering data to that warehouse, as well as continuous operational transforms that are applied everywhere else.

      -

      These two tools can make lots of sense to use together. First, Flow brings timely, accurate data to the warehouse. -Within the warehouse, analysts can use tools like dbt to explore the data. The Flow pipeline is then ideally suited to -productionize important insights as materialized views or by pushing to another destination.

      -

      Put another way, Flow is a complete ELT platform, but you might choose to perform and manage more complex transformations in -a separate, dedicated tool like dbt. While Flow and dbt don’t interact directly, both offer easy integration through your data warehouse.

      -

      Materialize, Rockset, ksqlDB, and other real-time databases

      -

      Modern real-time databases like Materialize, Rockset, and ksqlDB consume streams of data, oftentimes from Kafka brokers, -and can keep SQL views up to date in real time.

      -

      These real-time databases have a lot of conceptual overlap with Flow. The biggest difference is that Flow can materialize this same type of incrementally updated view into any database, regardless of whether that database has real-time capabilities or not.

      -

      However, this doesn't mean that Flow should replace these systems in your stack. In fact, it can be optimal to use Flow to feed data into them. -Flow adds real-time data capture and materialization options that many real-time databases don't support. -Once data has arrived in the database, you have access to real-time SQL analysis and other analytical tools not native to Flow. -For further explanation, read the section below on OLAP databases.

      -

      Snowflake, BigQuery, and other OLAP databases

      -

      Flow differs from OLAP databases mainly in that it's not a database. Flow has no query interface, and no plans to add one. Instead, Flow allows you to use the query interfaces of any database by materializing views into it.

      -

      Flow is similar to OLAP databases in that it can be the source of truth for all analytics data (though it's also capable enough to handle operational workloads). Instead of schemas and tables, Flow defines collections. These collections are conceptually similar to database tables in the sense that they are containers for data with an associated (primary) key. Under the hood, Flow collections are each backed by append-only logs, where each document in the log represents a delta update for a given key.

      -

      Collections can be easily materialized into a variety of external systems, such as Snowflake or BigQuery. This creates a table in your OLAP database that is continuously kept up to date with the collection. With Flow, there's no need to schedule exports to these systems, and thus no need to orchestrate the timing of those exports. You can also materialize a given collection into multiple destination systems, so you can always use whichever system is best for the type of queries you want to run.

      -

      Like Snowflake, Flow uses inexpensive cloud storage for all collection data. It even lets you bring your own storage bucket, so you're always in control. Unlike data warehouses, Flow is able to directly capture data from source systems, and continuously and incrementally keep everything up to date.

      -

      A common pattern is to use Flow to capture data from multiple different sources and materialize it into a data warehouse. Flow can also help you avoid expenses associated with queries you frequently pull from a data warehouse by keeping an up-to-date view of them where you want it. Because of Flow’s exactly-once processing guarantees, these materialized views are always correct, consistent, and fault-tolerant.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/overview/who-should-use-flow/index.html b/pr-preview/pr-1594/overview/who-should-use-flow/index.html deleted file mode 100644 index 29a1936654..0000000000 --- a/pr-preview/pr-1594/overview/who-should-use-flow/index.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - -Who should use Flow? | Estuary Flow - - - - - - - - - -

      Who should use Flow?

      -

      Flow is a data movement and transformation platform designed for all members of your data team. Its powerful command-line interface gives backend engineers data integration superpowers. -At the same time, Flow allows data analysts and other user cohorts to meaningfully contribute to and manage the same data pipelines, or data flows, using the web application.

      -

      If you answer "yes" to any of the following questions, Flow can help:

      -
        -
      • Do you work with multiple databases and struggle to keep them in sync with one another?
      • -
      • Do you issue repeated OLAP queries to your warehouse that are expensive to execute? -
          -
        • Or do you need instant metrics for specific events like Black Friday?
        • -
        -
      • -
      • Do you operate separate batch and streaming systems, and grapple with reconciling them?
      • -
      • Do you manage continuous processing workflows with tools like Spark, -Flink, or Google Cloud Dataflow, and want a faster, easier-to-evolve alternative?
      • -
      • Is your organization held back by a data engineering bottleneck, -while less-technical stakeholders are blocked from contributing by a high barrier to entry?
      • -
      • Are you implementing a new data architecture framework, like a -distributed data mesh -and are seeking a tool to help with orchestration?
      • -
      -

      How Flow can help

      -

      These unique Flow features can help you solve the problems listed above.

      -

      Fully integrated pipelines

      -

      With Flow, you can build, test, and evolve pipelines that continuously capture, transform, and materialize data across all of your systems. With one tool, you can power workflows that have historically required you to first piece together services, then integrate and operate them in-house to meet your needs.

      -

      To achieve comparable capabilities to Flow you would need:

      -
        -
      • A low-latency streaming system, such as AWS Kinesis
      • -
      • Data lake build-out, such as Kinesis Firehose to S3
      • -
      • Custom ETL application development, such as Spark, Flink, or AWS λ
      • -
      • Supplemental data stores for intermediate transformation states
      • -
      • ETL job management and execution, such as a self-hosting or Google Cloud Dataflow
      • -
      • Custom reconciliation of historical vs streaming datasets, including onerous backfills of new streaming applications from historical data
      • -
      -

      Flow dramatically simplifies this inherent complexity. It saves you time and costs, catches mistakes before they hit production, and keeps your data fresh across all the places you use it. -With both a UI-forward web application and a powerful CLI , -more types of professionals can contribute to what would otherwise require a -highly specialized set of technical skills.

      -

      Efficient architecture

      -

      Flow mixes a variety of architectural techniques to deliver high throughput, avoid latency, and minimize operating costs. These include:

      -
        -
      • Leveraging reductions to reduce the amount of data that must be ingested, stored, and processed, often dramatically
      • -
      • Executing transformations predominantly in-memory
      • -
      • Optimistic pipelining and vectorization of internal remote procedure calls (RPCs) and operations
      • -
      • A cloud-native design that optimizes for public cloud pricing models
      • -
      -

      Flow also makes it easy to materialize focused data views directly into your warehouse, so you don't need to repeatedly query the much larger source datasets. This can dramatically lower warehouse costs.

      -

      Powerful transformations

      -

      With Flow, you can build pipelines that join a current event with an event that happened days, weeks, even years in the past. Flow can model arbitrary stream-to-stream joins without the windowing constraints imposed by other systems, which limit how far back in time you can join.

      -

      Flow transforms data in durable micro-transactions, meaning that an outcome, once committed, won't be silently re-ordered or changed due to a crash or machine failure. This makes Flow uniquely suited for operational workflows, like assigning a dynamic amount of available inventory to a stream of requests — decisions that, once made, should not be forgotten. You can also evolve transformations as business requirements change, enriching them with new datasets or behaviors without needing to re-compute from scratch.

      -

      Data integrity

      -

      Flow is architected to ensure that your data is accurate and that changes don't break pipelines. -It supports strong schematization, durable transactions with exactly-once semantics, and easy end-to-end testing.

      -
        -
      • Required JSON schemas ensure that only clean, consistent data is ingested into Flow or written to external systems. If a document violates its schema, Flow pauses the pipeline, giving you a chance to fix the error.
      • -
      • Schemas can encode constraints, like that a latitude value must be between +90 and -90 degrees, or that a field must be a valid email address.
      • -
      • Flow can project JSON schema into other flavors, like TypeScript types or SQL tables. Strong type checking catches bugs before they're applied to production.
      • -
      • Flow's declarative tests verify the integrated, end-to-end behavior of data flows.
      • -
      -

      Dynamic scaling

      -

      The Flow runtime scales from a single process up to a large Kubernetes cluster for high-volume production deployments. Processing tasks are quickly reassigned upon any machine failure for high availability.

      -

      Each process can also be scaled independently, at any time, and without downtime. This is unique to Flow. Comparable systems require that an arbitrary data partitioning be decided upfront, a crucial performance knob that's awkward and expensive to change. Instead, Flow can repeatedly split a running task into two new tasks, each half the size, without stopping it or impacting its downstream uses.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Configuring-task-shards/index.html b/pr-preview/pr-1594/reference/Configuring-task-shards/index.html deleted file mode 100644 index ee9f079619..0000000000 --- a/pr-preview/pr-1594/reference/Configuring-task-shards/index.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - -Configuring task shards | Estuary Flow - - - - - - - - - -

      Configuring task shards

      -

      For some catalog tasks, it's helpful to control the behavior of shards -You do this by adding the shards configuration to the capture or materialization configuration.

      -

      Properties

      -
      PropertyTitleDescriptionType
      /disableDisableDisable processing of the task's shards.Boolean
      /logLevelLog levelLog levels may currently be "error", "warn", "info", "debug", or "trace". If not set, the effective log level is "info".String
      /maxTxnDurationMaximum transaction durationThis duration upper-bounds the amount of time during which a transaction may process documents before it must initiate a commit. Note that it may take some additional time for the commit to complete after it is initiated. The shard may run for less time if there aren't additional ready documents for it to process. If not set, the maximum duration defaults to one second for captures and derivations, and 5 minutes for materializations.String
      /minTxnDurationMinimum transaction durationThis duration lower-bounds the amount of time during which a transaction must process documents before it must flush and commit. It may run for more time if additional documents are available. The default value is zero seconds.String
      -

      For more information about these controls and when you might need to use them, see:

      - -

      Sample

      -
      materializations:
      acmeCo/snowflake-materialization:
      endpoint:
      connector:
      config:
      account: acmeCo
      database: acmeCo_db
      password: secret
      cloud_provider: aws
      region: us-east-1
      schema: acmeCo_flow_schema
      user: snowflake_user
      warehouse: acmeCo_warehouse
      image: ghcr.io/estuary/materialize-snowflake:dev
      bindings:
      - resource:
      table: anvils
      source: acmeCo/anvils
      shards:
      logLevel: debug
      minTxnDuration: 30s
      maxTxnDuration: 4m
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/index.html deleted file mode 100644 index 8a52cc1f6c..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/index.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - -Amazon RDS for MariaDB | Estuary Flow - - - - - - - - - -

      Amazon RDS for MariaDB

      -

      This is a change data capture (CDC) connector that captures change events from a MariaDB database via the Binary Log. -It's derived from the MySQL capture connector, -so the same configuration applies, but the setup steps look somewhat different.

      -

      This connector is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-mariadb:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need a MariaDB database setup with the following.

      -
        -
      • binlog_format -system variable set to ROW.
      • -
      • Binary log expiration period set to at least 30 days (2592000 seconds) if at all possible. -
          -
        • This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures. -MariaDB's default value is 0 (no expiration).
        • -
        -
      • -
      • A watermarks table. The watermarks table is a small "scratch space" -to which the connector occasionally writes a small amount of data (a UUID, -specifically) to ensure accuracy when backfilling preexisting table contents. -
          -
        • The default name is "flow.watermarks", but this can be overridden in config.json.
        • -
        -
      • -
      • A database user with appropriate permissions: -
          -
        • REPLICATION CLIENT and REPLICATION SLAVE privileges.
        • -
        • Permission to insert, update, and delete on the watermarks table.
        • -
        • Permission to read the tables being captured.
        • -
        • Permission to read from information_schema tables, if automatic discovery is used.
        • -
        -
      • -
      • If the table(s) to be captured include columns of type DATETIME, the time_zone system variable -must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default.
      • -
      -

      Setup

      -
        -
      1. -

        Allow connections to the database from the Estuary Flow IP address.

        -
          -
        1. -

          Modify the database, setting Public accessibility to Yes.

          -
        2. -
        3. -

          Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database. -Refer to the steps in the Amazon documentation. -Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses.

          -
        4. -
        -
        info

        Alternatively, you can allow secure connections via SSH tunneling. To do so:

        -
      2. -
      3. -

        Create a RDS parameter group to enable replication in MariaDB.

        -
          -
        1. -

          Create a parameter group. -Create a unique name and description and set the following properties:

          -
            -
          • Family: mariadb10.6
          • -
          • Type: DB Parameter group
          • -
          -
        2. -
        3. -

          Modify the new parameter group and update the following parameters:

          -
            -
          • binlog_format: ROW
          • -
          • binlog_row_metadata: FULL
          • -
          • read_only: 0
          • -
          -
        4. -
        5. -

          If using the primary instance (not recommended), associate the parameter group -with the database and set Backup Retention Period to 7 days. -Reboot the database to allow the changes to take effect.

          -
        6. -
        -
      4. -
      5. -

        Create a read replica with the new parameter group applied (recommended).

        -
          -
        1. -

          Create a read replica -of your MariaDB database.

          -
        2. -
        3. -

          Modify the replica -and set the following:

          -
            -
          • DB parameter group: choose the parameter group you created previously
          • -
          • Backup retention period: 7 days
          • -
          • Public access: Publicly accessible
          • -
          -
        4. -
        5. -

          Reboot the replica to allow the changes to take effect.

          -
        6. -
        -
      6. -
      7. -

        Switch to your MariaDB client. Run the following commands to create a new user for the capture with appropriate permissions, -and set up the watermarks table:

        -
      8. -
      -
      CREATE DATABASE IF NOT EXISTS flow;
      CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);
      CREATE USER IF NOT EXISTS flow_capture
      IDENTIFIED BY 'secret'
      GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';
      GRANT SELECT ON *.* TO 'flow_capture';
      GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';
      -
        -
      1. Run the following command to set the binary log retention to 7 days, the maximum value which RDS MariaDB permits:
      2. -
      -
      CALL mysql.rds_set_configuration('binlog retention hours', 168);
      -
        -
      1. In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector.
      2. -
      -

      Backfills and performance considerations

      -

      When the a MariaDB capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis.

      -

      This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. -However, you may find it appropriate to skip the backfill, especially for extremely large tables.

      -

      In this case, you may turn of backfilling on a per-table basis. See properties for details.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MariaDB source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressServer AddressThe host or host:port at which the database can be reached.stringRequired
      /userLogin UserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordLogin PasswordPassword for the specified database user.stringRequired
      /timezoneTimezoneTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.string
      /advanced/watermarks_tableWatermarks Table NameThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.string"flow.watermarks"
      /advanced/dbnameDatabase NameThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.string"mysql"
      /advanced/node_idNode IDNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.integer
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer131072
      /advanced/skip_binlog_retention_checkSkip Binlog Retention Sanity CheckBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.boolean
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe database in which the table resides.stringRequired
      /streamStreamName of the table to be captured from the database.stringRequired
      /syncModeSync modeConnection method. Always set to incremental.stringRequired
      -
      info

      When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions.

      Tables in the MariaDB system databases information_schema, mysql, and performance_schema will not be discovered. -You can add bindings for such tables manually.

      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-mariadb:dev
      config:
      address: "127.0.0.1:3306"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      namespace: ${TABLE_NAMESPACE}
      stream: ${TABLE_NAME}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      Troubleshooting Capture Errors

      -

      The source-amazon-rds-mariadb connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations:

      -

      Unsupported Operations

      -

      If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured.

      -

      In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety).

      -

      In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did.

      -

      Data Manipulation Queries

      -

      If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section.

      -

      Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it.

      -

      Unhandled Queries

      -

      If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand.

      -

      In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog.

      -

      Metadata Errors

      -

      If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes.

      -

      This should never happen, and most likely means that the binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety).

      -

      Insufficient Binlog Retention

      -

      If your capture fails with a "binlog retention period is too short" error, it is informing you that the MariaDB binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from.

      -

      (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.)

      -

      The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/index.html deleted file mode 100644 index f4f61655a9..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/index.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - -MariaDB | Estuary Flow - - - - - - - - - -

      MariaDB

      -

      This is a change data capture (CDC) connector that captures change events from a MariaDB database via the Binary Log. -It's derived from the MySQL capture connector, -so the same configuration applies, but the setup steps look somewhat different.

      -

      This connector is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-mariadb:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need a MariaDB database setup with the following.

      -
        -
      • binlog_format -system variable set to ROW.
      • -
      • Binary log expiration period set to at least 30 days (2592000 seconds) if at all possible. -
          -
        • This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures. -MariaDB's default value is 0 (no expiration).
        • -
        -
      • -
      • A watermarks table. The watermarks table is a small "scratch space" -to which the connector occasionally writes a small amount of data (a UUID, -specifically) to ensure accuracy when backfilling preexisting table contents. -
          -
        • The default name is "flow.watermarks", but this can be overridden in config.json.
        • -
        -
      • -
      • A database user with appropriate permissions: -
          -
        • REPLICATION CLIENT and REPLICATION SLAVE privileges.
        • -
        • Permission to insert, update, and delete on the watermarks table.
        • -
        • Permission to read the tables being captured.
        • -
        • Permission to read from information_schema tables, if automatic discovery is used.
        • -
        -
      • -
      • If the table(s) to be captured include columns of type DATETIME, the time_zone system variable -must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default.
      • -
      -
      Configuration Tip

      To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see configure connections with SSH tunneling.

      -

      Setup

      -

      Self Hosted MariaDB

      -

      To meet these requirements, do the following:

      -
        -
      1. Create the watermarks table. This table can have any name and be in any database, so long as the capture's config.json file is modified accordingly.
      2. -
      -
      CREATE DATABASE IF NOT EXISTS flow;
      CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);
      -
        -
      1. Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table.
      2. -
      -

      The SELECT permission can be restricted to just the tables that need to be -captured, but automatic discovery requires information_schema access as well.

      -
      CREATE USER IF NOT EXISTS flow_capture
      IDENTIFIED BY 'secret'
      GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';
      GRANT SELECT ON *.* TO 'flow_capture';
      GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';
      -
        -
      1. Configure the binary log to retain data for 30 days, if previously set lower.
      2. -
      -
      SET PERSIST binlog_expire_logs_seconds = 2592000;
      -
        -
      1. Configure the database's time zone. See below for more information.
      2. -
      -
      SET PERSIST time_zone = '-05:00'
      -

      Azure Database for MariaDB

      -

      You can use this connector for MariaDB instances on Azure Database for MariaDB using the following setup instructions.

      -
        -
      1. -

        Allow connections to the database from the Estuary Flow IP address.

        -
          -
        1. Create a new firewall rule -that grants access to the Estuary Flow IP addresses.
        2. -
        -
        info

        Alternatively, you can allow secure connections via SSH tunneling. To do so:

        -
      2. -
      3. -

        Set the binlog_expire_logs_seconds server perameter -to 2592000.

        -
      4. -
      5. -

        Using your preferred MariaDB client, create the watermarks table.

        -
      6. -
      -
      tip

      Your username must be specified in the format username@servername.

      -
      CREATE DATABASE IF NOT EXISTS flow;
      CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);
      -
        -
      1. Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table.
      2. -
      -

      The SELECT permission can be restricted to just the tables that need to be -captured, but automatic discovery requires information_schema access as well.

      -
      CREATE USER IF NOT EXISTS flow_capture
      IDENTIFIED BY 'secret'
      GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';
      GRANT SELECT ON *.* TO 'flow_capture';
      GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';
      -
        -
      1. Note the instance's host under Server name, and the port under Connection Strings (usually 3306). -Together, you'll use the host:port as the address property when you configure the connector.
      2. -
      -

      Setting the MariaDB time zone

      -

      MariaDB's time_zone server system variable is set to SYSTEM by default. -Flow is not able to detect your time zone when it's set this way, so you must explicitly set the variable for your database.

      -

      If you intend to capture tables including columns of the type DATETIME, -and time_zone is set to SYSTEM, -Flow won't be able to detect the time zone and convert the column to RFC3339 format. -To avoid this, you must explicitly set the time zone for your database.

      -

      You can:

      - -

      For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. -Because this region observes daylight savings time, you'd be responsible for changing the offset. -Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically.

      -

      If using IANA time zones, your database must include time zone tables. Learn more in the MariaDB docs.

      -
      Capture Timezone Configuration

      If you are unable to set the time_zone in the database and need to capture tables with DATETIME columns, the capture can be configured to assume a time zone using the timezone configuration property (see below). The timezone configuration property can be set as a numerical offset or IANA timezone format.

      -

      Backfills and performance considerations

      -

      When the a MariaDB capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis.

      -

      This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. -However, you may find it appropriate to skip the backfill, especially for extremely large tables.

      -

      In this case, you may turn of backfilling on a per-table basis. See properties for details.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MariaDB source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressServer AddressThe host or host:port at which the database can be reached.stringRequired
      /userLogin UserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordLogin PasswordPassword for the specified database user.stringRequired
      /timezoneTimezoneTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.string
      /advanced/watermarks_tableWatermarks Table NameThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.string"flow.watermarks"
      /advanced/dbnameDatabase NameThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.string"mysql"
      /advanced/node_idNode IDNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.integer
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer131072
      /advanced/skip_binlog_retention_checkSkip Binlog Retention Sanity CheckBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.boolean
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe database in which the table resides.stringRequired
      /streamStreamName of the table to be captured from the database.stringRequired
      /syncModeSync modeConnection method. Always set to incremental.stringRequired
      -
      info

      When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions.

      Tables in the MariaDB system databases information_schema, mysql, and performance_schema will not be discovered. -You can add bindings for such tables manually.

      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-mariadb:dev
      config:
      address: "127.0.0.1:3306"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      namespace: ${TABLE_NAMESPACE}
      stream: ${TABLE_NAME}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      Troubleshooting Capture Errors

      -

      The source-mariadb connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations:

      -

      Unsupported Operations

      -

      If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured.

      -

      In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety).

      -

      In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did.

      -

      Data Manipulation Queries

      -

      If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section.

      -

      Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it.

      -

      Unhandled Queries

      -

      If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand.

      -

      In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog.

      -

      Metadata Errors

      -

      If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes.

      -

      This should never happen, and most likely means that the binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety).

      -

      Insufficient Binlog Retention

      -

      If your capture fails with a "binlog retention period is too short" error, it is informing you that the MariaDB binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from.

      -

      (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.)

      -

      The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/index.html deleted file mode 100644 index 507ddbb0d3..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/index.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - -Amazon RDS for MySQL | Estuary Flow - - - - - - - - - -

      Amazon RDS for MySQL

      -

      This is a change data capture (CDC) connector that captures change events from a MySQL database via the Binary Log.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-mysql:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need a MySQL database setup with the following.

      -
        -
      • binlog_format -system variable set to ROW (the default value).
      • -
      • Binary log expiration period set to MySQL's default value of 30 days (2592000 seconds) if at all possible. -
          -
        • This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures.
        • -
        -
      • -
      • A watermarks table. The watermarks table is a small "scratch space" -to which the connector occasionally writes a small amount of data (a UUID, -specifically) to ensure accuracy when backfilling preexisting table contents. -
          -
        • The default name is "flow.watermarks", but this can be overridden in config.json.
        • -
        -
      • -
      • A database user with appropriate permissions: -
          -
        • REPLICATION CLIENT and REPLICATION SLAVE privileges.
        • -
        • Permission to insert, update, and delete on the watermarks table.
        • -
        • Permission to read the tables being captured.
        • -
        • Permission to read from information_schema tables, if automatic discovery is used.
        • -
        -
      • -
      • If the table(s) to be captured include columns of type DATETIME, the time_zone system variable -must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default.
      • -
      -

      Setup

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          -
            -
          • Modify the database, setting Public accessibility to Yes.
          • -
          • Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database as described in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses.
          • -
          -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        Create a RDS parameter group to enable replication in MySQL.

        -
          -
        1. -

          Create a parameter group. -Create a unique name and description and set the following properties:

          -
            -
          • Family: mysql8.0
          • -
          • Type: DB Parameter group
          • -
          -
        2. -
        3. -

          Modify the new parameter group and update the following parameters:

          -
            -
          • binlog_format: ROW
          • -
          • binlog_row_metadata: FULL
          • -
          • read_only: 0
          • -
          -
        4. -
        5. -

          If using the primary instance (not recommended), associate the parameter group -with the database and set Backup Retention Period to 7 days. -Reboot the database to allow the changes to take effect.

          -
        6. -
        -
      4. -
      5. -

        Create a read replica with the new parameter group applied (recommended).

        -
          -
        1. -

          Create a read replica -of your MySQL database.

          -
        2. -
        3. -

          Modify the replica -and set the following:

          -
            -
          • DB parameter group: choose the parameter group you created previously
          • -
          • Backup retention period: 7 days
          • -
          • Public access: Publicly accessible
          • -
          -
        4. -
        5. -

          Reboot the replica to allow the changes to take effect.

          -
        6. -
        -
      6. -
      7. -

        Switch to your MySQL client. Run the following commands to create a new user for the capture with appropriate permissions, -and set up the watermarks table:

        -
      8. -
      -
      CREATE DATABASE IF NOT EXISTS flow;
      CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);
      CREATE USER IF NOT EXISTS flow_capture
      IDENTIFIED BY 'secret'
      COMMENT 'User account for Flow MySQL data capture';
      GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';
      GRANT SELECT ON *.* TO 'flow_capture';
      GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';
      -
        -
      1. Run the following command to set the binary log retention to 7 days, the maximum value which RDS MySQL permits:
      2. -
      -
      CALL mysql.rds_set_configuration('binlog retention hours', 168);
      -
        -
      1. In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector.
      2. -
      -

      Setting the MySQL time zone

      -

      MySQL's time_zone server system variable is set to SYSTEM by default.

      -

      If you intend to capture tables including columns of the type DATETIME, -and time_zone is set to SYSTEM, -Flow won't be able to detect the time zone and convert the column to RFC3339 format. -To avoid this, you must explicitly set the time zone for your database.

      -

      You can:

      -
        -
      • -

        Specify a numerical offset from UTC.

        -
          -
        • For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.
        • -
        • Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted
        • -
        -
      • -
      • -

        Specify a named timezone in IANA timezone format.

        -
      • -
      -

      For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. -Because this region observes daylight savings time, you'd be responsible for changing the offset. -Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically.

      -

      If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs.

      -
      Capture Timezone Configuration

      If you are unable to set the time_zone in the database and need to capture tables with DATETIME columns, the capture can be configured to assume a time zone using the timezone configuration property (see below). The timezone configuration property can be set as a numerical offset or IANA timezone format.

      -

      Backfills and performance considerations

      -

      When the a MySQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis.

      -

      This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. -However, you may find it appropriate to skip the backfill, especially for extremely large tables.

      -

      In this case, you may turn of backfilling on a per-table basis. See properties for details.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MySQL source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressServer AddressThe host or host:port at which the database can be reached.stringRequired
      /userLogin UserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordLogin PasswordPassword for the specified database user.stringRequired
      /timezoneTimezoneTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.string
      /advanced/watermarks_tableWatermarks Table NameThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.string"flow.watermarks"
      /advanced/dbnameDatabase NameThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.string"mysql"
      /advanced/node_idNode IDNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.integer
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer131072
      /advanced/skip_binlog_retention_checkSkip Binlog Retention Sanity CheckBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.boolean
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe database/schema in which the table resides.stringRequired
      /streamStreamName of the table to be captured from the database.stringRequired
      /syncModeSync modeConnection method. Always set to incremental.stringRequired
      -
      info

      When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions.

      Tables in the MySQL system schemas information_schema, mysql, performance_schema, and sys will not be discovered. -You can add bindings for such tables manually.

      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-mysql:dev
      config:
      address: "127.0.0.1:3306"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      namespace: ${TABLE_NAMESPACE}
      stream: ${TABLE_NAME}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      Troubleshooting Capture Errors

      -

      The source-mysql connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations:

      -

      Unsupported Operations

      -

      If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured.

      -

      In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety).

      -

      In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did.

      -

      Data Manipulation Queries

      -

      If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the MySQL binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section.

      -

      Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it.

      -

      Unhandled Queries

      -

      If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand.

      -

      In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog.

      -

      Metadata Errors

      -

      If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes.

      -

      This should never happen, and most likely means that the MySQL binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety).

      -

      Insufficient Binlog Retention

      -

      If your capture fails with a "binlog retention period is too short" error, it is informing you that the MySQL binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from.

      -

      (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.)

      -

      The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety.

      -

      Empty Collection Key

      -

      Every Flow collection must declare a key which is used to group its documents. When testing your capture, if you encounter an error indicating collection key cannot be empty, you will need to either add a key to the table in your source, or manually edit the generated specification and specify keys for the collection before publishing to the catalog as documented here.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/index.html deleted file mode 100644 index d610ab407a..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/index.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Google Cloud SQL for MySQL | Estuary Flow - - - - - - - - - -

      Google Cloud SQL for MySQL

      -

      This is a change data capture (CDC) connector that captures change events from a MySQL database via the Binary Log.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-mysql:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need a MySQL database setup with the following.

      -
        -
      • binlog_format -system variable set to ROW (the default value).
      • -
      • Binary log expiration period set to MySQL's default value of 30 days (2592000 seconds) if at all possible. -
          -
        • This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures.
        • -
        -
      • -
      • A watermarks table. The watermarks table is a small "scratch space" -to which the connector occasionally writes a small amount of data (a UUID, -specifically) to ensure accuracy when backfilling preexisting table contents. -
          -
        • The default name is "flow.watermarks", but this can be overridden in config.json.
        • -
        -
      • -
      • A database user with appropriate permissions: -
          -
        • REPLICATION CLIENT and REPLICATION SLAVE privileges.
        • -
        • Permission to insert, update, and delete on the watermarks table.
        • -
        • Permission to read the tables being captured.
        • -
        • Permission to read from information_schema tables, if automatic discovery is used.
        • -
        -
      • -
      • If the table(s) to be captured include columns of type DATETIME, the time_zone system variable -must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default.
      • -
      -

      Setup

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          - -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        Set the instance's binlog_expire_logs_seconds flag -to 2592000.

        -
      4. -
      5. -

        Using Google Cloud Shell or your preferred client, create the watermarks table.

        -
      6. -
      -
      CREATE DATABASE IF NOT EXISTS flow;
      CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);
      -
        -
      1. Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table.
      2. -
      -

      The SELECT permission can be restricted to just the tables that need to be -captured, but automatic discovery requires information_schema access as well.

      -
      CREATE USER IF NOT EXISTS flow_capture
      IDENTIFIED BY 'secret'
      COMMENT 'User account for Flow MySQL data capture';
      GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';
      GRANT SELECT ON *.* TO 'flow_capture';
      GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';
      -
        -
      1. In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 3306. -Together, you'll use the host:port as the address property when you configure the connector.
      2. -
      -

      Setting the MySQL time zone

      -

      MySQL's time_zone server system variable is set to SYSTEM by default.

      -

      If you intend to capture tables including columns of the type DATETIME, -and time_zone is set to SYSTEM, -Flow won't be able to detect the time zone and convert the column to RFC3339 format. -To avoid this, you must explicitly set the time zone for your database.

      -

      You can:

      -
        -
      • -

        Specify a numerical offset from UTC.

        -
          -
        • For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.
        • -
        • Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted
        • -
        -
      • -
      • -

        Specify a named timezone in IANA timezone format.

        -
      • -
      • -

        If you're using Amazon Aurora, create or modify the DB cluster parameter group -associated with your MySQL database. -Set the time_zone parameter to the correct value.

        -
      • -
      -

      For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. -Because this region observes daylight savings time, you'd be responsible for changing the offset. -Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically.

      -

      If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs.

      -
      Capture Timezone Configuration

      If you are unable to set the time_zone in the database and need to capture tables with DATETIME columns, the capture can be configured to assume a time zone using the timezone configuration property (see below). The timezone configuration property can be set as a numerical offset or IANA timezone format.

      -

      Backfills and performance considerations

      -

      When the a MySQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis.

      -

      This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. -However, you may find it appropriate to skip the backfill, especially for extremely large tables.

      -

      In this case, you may turn of backfilling on a per-table basis. See properties for details.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MySQL source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressServer AddressThe host or host:port at which the database can be reached.stringRequired
      /userLogin UserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordLogin PasswordPassword for the specified database user.stringRequired
      /timezoneTimezoneTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.string
      /advanced/watermarks_tableWatermarks Table NameThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.string"flow.watermarks"
      /advanced/dbnameDatabase NameThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.string"mysql"
      /advanced/node_idNode IDNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.integer
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer131072
      /advanced/skip_binlog_retention_checkSkip Binlog Retention Sanity CheckBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.boolean
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe database/schema in which the table resides.stringRequired
      /streamStreamName of the table to be captured from the database.stringRequired
      /syncModeSync modeConnection method. Always set to incremental.stringRequired
      -
      info

      When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions.

      Tables in the MySQL system schemas information_schema, mysql, performance_schema, and sys will not be discovered. -You can add bindings for such tables manually.

      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-mysql:dev
      config:
      address: "127.0.0.1:3306"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      namespace: ${TABLE_NAMESPACE}
      stream: ${TABLE_NAME}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      Troubleshooting Capture Errors

      -

      The source-mysql connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations:

      -

      Unsupported Operations

      -

      If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured.

      -

      In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety).

      -

      In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did.

      -

      Data Manipulation Queries

      -

      If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the MySQL binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section.

      -

      Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it.

      -

      Unhandled Queries

      -

      If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand.

      -

      In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog.

      -

      Metadata Errors

      -

      If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes.

      -

      This should never happen, and most likely means that the MySQL binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety).

      -

      Insufficient Binlog Retention

      -

      If your capture fails with a "binlog retention period is too short" error, it is informing you that the MySQL binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from.

      -

      (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.)

      -

      The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety.

      -

      Empty Collection Key

      -

      Every Flow collection must declare a key which is used to group its documents. When testing your capture, if you encounter an error indicating collection key cannot be empty, you will need to either add a key to the table in your source, or manually edit the generated specification and specify keys for the collection before publishing to the catalog as documented here.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/index.html deleted file mode 100644 index df9a903639..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/index.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - -MySQL | Estuary Flow - - - - - - - - - -

      MySQL

      -

      This is a change data capture (CDC) connector that captures change events from a MySQL database via the Binary Log.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-mysql:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported platforms

      -

      This connector supports MySQL on major cloud providers, as well as self-hosted instances.

      -

      Setup instructions are provided for the following platforms:

      - -

      Prerequisites

      -

      To use this connector, you'll need a MySQL database setup with the following.

      -
        -
      • binlog_format -system variable set to ROW (the default value).
      • -
      • Binary log expiration period set to MySQL's default value of 30 days (2592000 seconds) if at all possible. -
          -
        • This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures.
        • -
        -
      • -
      • A watermarks table. The watermarks table is a small "scratch space" -to which the connector occasionally writes a small amount of data (a UUID, -specifically) to ensure accuracy when backfilling preexisting table contents. -
          -
        • The default name is "flow.watermarks", but this can be overridden in config.json.
        • -
        • The watermark table will only ever have one row per capture from that database and that row is updated once per 50k rows scanned in each table during the initial backfill for MySQL databases.
        • -
        • As each table backfills, the previous watermark record will be replaced. After the initial backfill, watermark records are updated approximately once per minute. At no time does a watermark table have more than one record.
        • -
        -
      • -
      • A database user with appropriate permissions: -
          -
        • REPLICATION CLIENT and REPLICATION SLAVE privileges.
        • -
        • Permission to insert, update, and delete on the watermarks table.
        • -
        • Permission to read the tables being captured.
        • -
        • Permission to read from information_schema tables, if automatic discovery is used.
        • -
        -
      • -
      • If the table(s) to be captured include columns of type DATETIME, the time_zone system variable -must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default.
      • -
      -
      Configuration Tip

      To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see configure connections with SSH tunneling.

      -

      Setup

      -

      To meet these requirements, follow the steps for your hosting type.

      - -

      Self-hosted MySQL

      -
        -
      1. Create the watermarks table. This table can have any name and be in any database, so long as the capture's config.json file is modified accordingly.
      2. -
      -
      CREATE DATABASE IF NOT EXISTS flow;
      CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);
      -
        -
      1. Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table.
      2. -
      -

      The SELECT permission can be restricted to just the tables that need to be -captured, but automatic discovery requires information_schema access as well.

      -
      CREATE USER IF NOT EXISTS flow_capture
      IDENTIFIED BY 'secret'
      COMMENT 'User account for Flow MySQL data capture';
      GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';
      GRANT SELECT ON *.* TO 'flow_capture';
      GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';
      -
        -
      1. Configure the binary log to retain data for the default MySQL setting of 30 days, if previously set lower.
      2. -
      -
      SET PERSIST binlog_expire_logs_seconds = 2592000;
      -
        -
      1. Configure the database's time zone. See below for more information.
      2. -
      -
      SET PERSIST time_zone = '-05:00'
      -

      Amazon Aurora

      -

      You must apply some of the settings to the entire Aurora DB cluster, and others to a database instance within the cluster. -For each step, take note of which entity you're working with.

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          -
            -
          • Modify the instance, choosing Publicly accessible in the Connectivity settings.
          • -
          • Edit the VPC security group associated with your instance, or create a new VPC security group and associate it with the instance as described in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses.
          • -
          -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        Create a RDS parameter group to enable replication on your Aurora DB cluster.

        -
          -
        1. -

          Create a parameter group. -Create a unique name and description and set the following properties:

          -
            -
          • Family: aurora-mysql8.0
          • -
          • Type: DB ClusterParameter group
          • -
          -
        2. -
        3. -

          Modify the new parameter group and update the following parameters:

          -
            -
          • binlog_format: ROW
          • -
          • binlog_row_metadata: FULL
          • -
          • read_only: 0
          • -
          -
        4. -
        5. -

          Associate the parameter group -with the DB cluster. -While you're modifying the cluster, also set Backup Retention Period to 7 days.

          -
        6. -
        7. -

          Reboot the cluster to allow the changes to take effect.

          -
        8. -
        -
      4. -
      5. -

        Switch to your MySQL client. Run the following commands to create a new user for the capture with appropriate permissions, -and set up the watermarks table:

        -
      6. -
      -
      CREATE DATABASE IF NOT EXISTS flow;
      CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);
      CREATE USER IF NOT EXISTS flow_capture
      IDENTIFIED BY 'secret'
      COMMENT 'User account for Flow MySQL data capture';
      GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';
      GRANT SELECT ON *.* TO 'flow_capture';
      GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';
      -
        -
      1. Run the following command to set the binary log retention to 7 days, the maximum value Aurora permits:
      2. -
      -
      CALL mysql.rds_set_configuration('binlog retention hours', 168);
      -
        -
      1. In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector.
      2. -
      -

      Azure Database for MySQL

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          - -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        Set the binlog_expire_logs_seconds server perameter -to 2592000.

        -
      4. -
      5. -

        Using MySQL workbench or your preferred client, create the watermarks table.

        -
      6. -
      -
      tip

      Your username must be specified in the format username@servername.

      -
      CREATE DATABASE IF NOT EXISTS flow;
      CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT);
      -
        -
      1. Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table.
      2. -
      -

      The SELECT permission can be restricted to just the tables that need to be -captured, but automatic discovery requires information_schema access as well.

      -
      CREATE USER IF NOT EXISTS flow_capture
      IDENTIFIED BY 'secret'
      COMMENT 'User account for Flow MySQL data capture';
      GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture';
      GRANT SELECT ON *.* TO 'flow_capture';
      GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture';
      -
        -
      1. Note the instance's host under Server name, and the port under Connection Strings (usually 3306). -Together, you'll use the host:port as the address property when you configure the connector.
      2. -
      -

      Setting the MySQL time zone

      -

      MySQL's time_zone server system variable is set to SYSTEM by default.

      -

      If you intend to capture tables including columns of the type DATETIME, -and time_zone is set to SYSTEM, -Flow won't be able to detect the time zone and convert the column to RFC3339 format. -To avoid this, you must explicitly set the time zone for your database.

      -

      You can:

      -
        -
      • -

        Specify a numerical offset from UTC.

        -
          -
        • For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.
        • -
        • Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted
        • -
        -
      • -
      • -

        Specify a named timezone in IANA timezone format.

        -
      • -
      • -

        If you're using Amazon Aurora, create or modify the DB cluster parameter group -associated with your MySQL database. -Set the time_zone parameter to the correct value.

        -
      • -
      -

      For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. -Because this region observes daylight savings time, you'd be responsible for changing the offset. -Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically.

      -

      If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs.

      -
      Capture Timezone Configuration

      If you are unable to set the time_zone in the database and need to capture tables with DATETIME columns, the capture can be configured to assume a time zone using the timezone configuration property (see below). The timezone configuration property can be set as a numerical offset or IANA timezone format.

      -

      Backfills and performance considerations

      -

      When the a MySQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis.

      -

      This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. -However, you may find it appropriate to skip the backfill, especially for extremely large tables.

      -

      In this case, you may turn of backfilling on a per-table basis. See properties for details.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file.

      -

      See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MySQL source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressServer AddressThe host or host:port at which the database can be reached.stringRequired
      /userLogin UserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordLogin PasswordPassword for the specified database user.stringRequired
      /timezoneTimezoneTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.string
      /advanced/watermarks_tableWatermarks Table NameThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.string"flow.watermarks"
      /advanced/dbnameDatabase NameThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.string"mysql"
      /advanced/node_idNode IDNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.integer
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer131072
      /advanced/skip_binlog_retention_checkSkip Binlog Retention Sanity CheckBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.boolean
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe database/schema in which the table resides.stringRequired
      /streamStreamName of the table to be captured from the database.stringRequired
      /syncModeSync modeConnection method. Always set to incremental.stringRequired
      -
      info

      When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions.

      Tables in the MySQL system schemas information_schema, mysql, performance_schema, and sys will not be discovered. -You can add bindings for such tables manually.

      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-mysql:dev
      config:
      address: "127.0.0.1:3306"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      namespace: ${TABLE_NAMESPACE}
      stream: ${TABLE_NAME}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      Troubleshooting Capture Errors

      -

      The source-mysql connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations:

      -

      Unsupported Operations

      -

      If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured.

      -

      In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety).

      -

      In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did.

      -

      Data Manipulation Queries

      -

      If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the MySQL binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section.

      -

      Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it.

      -

      Unhandled Queries

      -

      If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand.

      -

      In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog.

      -

      Metadata Errors

      -

      If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes.

      -

      This should never happen, and most likely means that the MySQL binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety).

      -

      Insufficient Binlog Retention

      -

      If your capture fails with a "binlog retention period is too short" error, it is informing you that the MySQL binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from.

      -

      (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.)

      -

      The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety.

      -

      Empty Collection Key

      -

      Every Flow collection must declare a key which is used to group its documents. When testing your capture, if you encounter an error indicating collection key cannot be empty, you will need to either add a key to the table in your source, or manually edit the generated specification and specify keys for the collection before publishing to the catalog as documented here.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch/index.html deleted file mode 100644 index 177d86b9f9..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch/index.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - -MySQL Batch Query Connector | Estuary Flow - - - - - - - - - -

      MySQL Batch Query Connector

      -

      This connector captures data from MySQL into Flow collections by periodically -executing queries and translating the results into JSON documents.

      -

      We recommend using our MySQL CDC Connector -instead where possible. Using CDC provides lower latency data capture, delete and -update events, and usually has a smaller impact on the source database.

      -

      However there are some circumstances where this might not be feasible. Perhaps you need -to capture from a managed MySQL instance which doesn't support logical replication. Or -perhaps you need to capture the contents of a view or the result of an ad-hoc query. -That's the sort of situation this connector is intended for.

      -

      The number one caveat you need to be aware of when using this connector is that it will -periodically execute its update query over and over. The default polling interval is set -to 24 hours to minimize the impact of this behavior, but even then it could mean a lot of -duplicated data being processed depending on the size of your tables.

      -

      If the dataset has a natural cursor which could be used to identify only new or updated -rows, this should be specified by editing the Cursor property of the binding. Common -examples of suitable cursors include:

      -
        -
      • Update timestamps, which are usually the best choice if available since they -can be used to identify all changed rows, not just updates.
      • -
      • Creation timestamps, which can be used to identify newly added rows in append-only -datasets but can't be used to identify updates.
      • -
      • Serially increasing IDs can also be used to identify newly added rows.
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/index.html deleted file mode 100644 index 3a242d3bae..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - -OracleDB (Flashback) | Estuary Flow - - - - - - - - - -

      OracleDB (Flashback)

      -

      This connector captures data from OracleDB into Flow collections using Oracle Flashback.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-oracle-flashback:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -
        -
      • Oracle 11g or above
      • -
      • Allow connections from Estuary Flow to your Oracle database (if they exist in separate VPCs)
      • -
      • Create a dedicated read-only Estuary Flow user with access to all tables needed for replication
      • -
      -

      Setup

      -

      Follow the steps below to set up the OracleDB connector.

      -

      Create a Dedicated User

      -

      Creating a dedicated database user with read-only access is recommended for better permission control and auditing.

      -
        -
      1. To create the user, run the following commands against your database:
      2. -
      -
      CREATE USER estuary_flow_user IDENTIFIED BY <your_password_here>;
      GRANT CREATE SESSION TO estuary_flow_user;
      -
        -
      1. Next, grant the user read-only access to the relevant tables. The simplest way is to grant read access to all tables in the schema as follows:
      2. -
      -
      GRANT SELECT ANY TABLE TO estuary_flow_user;
      -
        -
      1. Alternatively, you can be more granular and grant access to specific tables in different schemas:
      2. -
      -
      GRANT SELECT ON "<schema_a>"."<table_1>" TO estuary_flow_user;
      GRANT SELECT ON "<schema_b>"."<table_2>" TO estuary_flow_user;
      -
        -
      1. Finally you need to grant the user access to read metadata from the database:
      2. -
      -
      GRANT SELECT_CATALOG_ROLE TO estuary_flow_user;
      -
        -
      1. Your database user should now be ready for use with Estuary Flow.
      2. -
      -

      Include Schemas for Discovery

      -

      In your Oracle configuration, you can specify the schemas that Flow should look at when discovering tables. The schema names are case-sensitive and will default to the upper-cased user if empty. If the user does not have access to the configured schemas, no tables will be discovered.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the OracleDB Flashback source connector.

      -

      To allow secure connections via SSH tunneling:

      - -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressThe connection string for connecting to the database, either in the format of host:port/SID or a connect descriptor such as (address=(protocol=tcps)(host=...)...)stringRequired
      /credentialsCredentialsCredentials for authenticating with the database. Wallet and Username & Password authentication are supported.object
      /credentials/credentials_titleCredentials TitleAuthentication method to use, one of "Wallet" or "Username & Password"stringRequired
      /credentials/usernameUsernameThe username which is used to access the database.stringRequired
      /credentials/passwordPasswordThe password associated with the username.stringRequired
      /credentials/tnsnamestnsnamesThe tnsnames.ora file from the wallet.string
      /credentials/ewalletewalletThe ewallet.pem file from the wallet.string
      /credentials/wallet_passwordWallet PasswordPassword of the wallet, if protected.string
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer50000
      /advanced/skip_flashback_retention_checksSkip Flashback Retention ChecksSkip Flashback retention checks. Use this cautiously as we cannot guarantee consistency if Flashback retention is not sufficient.integerfalse
      /advanced/default_intervalDefault IntervalDefault interval between updates for all resources. Can be overwritten by each resource.integerPT5M
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /nameNameThe table namestringRequired
      /schemaSchemaIn Oracle tables reside in a schema that points to the user that owns the table.stringRequired
      /intervalIntervalInterval between updates for this resourcestringPT5M
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-oracle-flashback:dev
      config:
      address: "database-1.ukqdmzdqvvsz.us-east-2.rds.amazonaws.com:1521/ORCL"
      user: "flow_capture"
      credentials:
      credentials_title: Username & Password
      username: ADMIN
      password: secret
      networkTunnel:
      sshForwarding:
      privateKey: -----BEGIN RSA PRIVATE KEY-----\n...
      sshEndpoint: ssh://ec2-user@19.220.21.33:22

      bindings:
      - resource:
      name: ${TABLE_NAME}
      schema: ${TABLE_NAMESPACE}
      interval: PT5M
      target: ${PREFIX}/${COLLECTION_NAME}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/index.html deleted file mode 100644 index e2c9d6f38c..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/index.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - -OracleDB | Estuary Flow - - - - - - - - - -

      OracleDB

      -

      This connector captures data from OracleDB into Flow collections using Oracle Logminer.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-oracle:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -
        -
      • Oracle 11g or above
      • -
      • Allow connections from Estuary Flow to your Oracle database (if they exist in separate VPCs)
      • -
      • Create a dedicated read-only Estuary Flow user with access to all tables needed for replication
      • -
      -

      Setup

      -

      Follow the steps below to set up the OracleDB connector.

      -

      Create a Dedicated User

      -

      Creating a dedicated database user with read-only access is recommended for better permission control and auditing.

      -
        -
      1. To create the user, run the following commands against your database:
      2. -
      -
      CREATE USER estuary_flow_user IDENTIFIED BY <your_password_here>;
      GRANT CREATE SESSION TO estuary_flow_user;
      -
        -
      1. Next, grant the user read-only access to the relevant tables. The simplest way is to grant read access to all tables in the schema as follows:
      2. -
      -
      GRANT SELECT ANY TABLE TO estuary_flow_user;
      -
        -
      1. Alternatively, you can be more granular and grant access to specific tables in different schemas:
      2. -
      -
      GRANT SELECT ON "<schema_a>"."<table_1>" TO estuary_flow_user;
      GRANT SELECT ON "<schema_b>"."<table_2>" TO estuary_flow_user;
      -
        -
      1. Create a watermarks table:
      2. -
      -
      CREATE TABLE estuary_flow_user.FLOW_WATERMARKS(SLOT varchar(1000) PRIMARY KEY, WATERMARK varchar(4000));
      -
        -
      1. Finally you need to grant the user access to use logminer, read metadata from the database and write to the watermarks table:
      2. -
      -
      GRANT SELECT_CATALOG_ROLE TO estuary_flow_user;
      GRANT EXECUTE_CATALOG_ROLE TO estuary_flow_user;
      GRANT SELECT ON V$DATABASE TO estuary_flow_user;
      GRANT SELECT ANY TABLE TO estuary_flow_user;
      GRANT SELECT ON V$LOG TO estuary_flow_user;
      GRANT LOGMINING TO estuary_flow_user;

      GRANT INSERT, UPDATE ON estuary_flow_user.FLOW_WATERMARKS TO estuary_flow_user;
      -
        -
      1. Enable supplemental logging:
      2. -
      -

      For normal instances use:

      -
      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
      -

      For Amazon RDS instances use:

      -
      BEGIN rdsadmin.rdsadmin_util.alter_supplemental_logging(p_action => 'ADD', p_type   => 'ALL'); end;
      -
        -
      1. Your database user should now be ready for use with Estuary Flow.
      2. -
      -

      Include Schemas for Discovery

      -

      In your Oracle configuration, you can specify the schemas that Flow should look at when discovering tables. The schema names are case-sensitive. If the user does not have access to a certain schema, no tables from that schema will be discovered.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the OracleDB source connector.

      -

      To allow secure connections via SSH tunneling:

      - -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressThe host or host:port at which the database can be reached.stringRequired
      /userUsernameThe database user to authenticate as.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /databaseDatabaseLogical database name to capture from. Defaults to ORCL.stringRequired
      /historyModeHistory ModeCapture change events without reducing them to a final state.booleanfalse
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/watermarksTableWatermarks TableThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.table' form.string&lt;USER&gt;.FLOW_WATERMARKS
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer50000
      /advanced/incremental_chunk_sizeIncremental Chunk SizeThe number of rows which should be fetched from the database in a single incremental query.integer10000
      /advanced/incremental_scn_rangeIncremental SCN RangeThe SCN range captured at every iteration.integer50000
      /advanced/dictionary_modeDictionary ModeHow should dictionaries be used in Logminer: one of online or extract. When using online mode schema changes to the table may break the capture but resource usage is limited. When using extract mode schema changes are handled gracefully but more resources of your database (including disk) are used by the process. Defaults to extract.stringextract
      /advanced/discover_schemasDiscover SchemasIf this is specified only tables in the selected schema(s) will be automatically discovered. Omit all entries to discover tables from all schemas.string
      /advanced/node_idNode IDNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.integer
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe owner/schema of the table.stringRequired
      /streamStreamTable name.stringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-oracle:dev
      config:
      address: database-1.ukqdmzdqvvsz.us-east-2.rds.amazonaws.com:1521
      user: "flow_capture"
      password: secret
      database: ORCL
      historyMode: false
      advanced:
      incremental_scn_range: 50000
      dictionary_mode: extract
      networkTunnel:
      sshForwarding:
      privateKey: -----BEGIN RSA PRIVATE KEY-----\n...
      sshEndpoint: ssh://ec2-user@19.220.21.33:22

      bindings:
      - resource:
      namespace: ${TABLE_NAMESPACE}
      stream: ${TABLE_NAME}
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Dictionary Modes

      -

      Oracle writes redo log files using triplet object ID, data object ID and object versions to identify different objects in the database, rather than their name. This applies to table names as well as column names. When reading data from the redo log files using Logminer, a "dictionary" is used to translate the object identification data into user-facing names of those objects. When interacting with the database directly an online dictionary, which is essentially the latest dictionary that knows how to translate currently existing table and column names is used by the database and by Logminer, however when capturing historical data, it is possible that the names of these objects or even their identifiers have changed (due to an ALTER TABLE statement for example). In these instances the online dictionary will be insufficient for translating the object identifiers into names and Logminer will complain about a dictionary mismatch.

      -

      To resolve this issue, it is possible to extract a dictionary into the redo log files themselves, so that when there are schema changes, Logminer can automatically handle using the appropriate dictionary for the time period an event is from. This operation however uses CPU and RAM, as well as consuming disk over time.

      -

      Using Estuary's Oracle connector you get to choose which mode to operate it:

      -
        -
      1. To extract the dictionary into the redo log files, the extract mode can be used (this is the default mode). Be aware that this mode leads to more resource usage (CPU, RAM and disk).
      2. -
      3. To always use the online dictionary, the online mode can be used. This mode is more efficient, but it cannot handle schema changes in tables, so only use this mode with caution and when table schemas are known not to change.
      4. -
      -

      Incremental SCN Range and Events Rate

      -

      At every iteration, the connector fetches changes in a specific SCN (System Change Number) range, this is roughly equivalent to a specific time range. Depending on how many events happen on the captured tables in a database (by default, a 50,000 range is captured in each iteration), the advanced.incremental_scn_range option can be updated to fit your needs:

      -
        -
      1. If the database processes a large amount of events per unit of time, the connector and/or the database may experience resource shortages while trying to process the data. For example you may see the error PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT which indicates that the memory usage of the database instance has hit a limit. This can happen if too many events are being processed in one iteration. In these cases we recommend lowering the SCN range until the database and the connector are able to handle the load.
      2. -
      3. If the database does not have many events per time unit, a higher value can help with faster processing, although this is usually not necessary.
      4. -
      -

      Troubleshooting

      -
        -
      1. If you see the following error when trying to connect:
      2. -
      -
      ORA-01950: no privileges on tablespace 'USERS'
      -

      The SQL command below may resolve the issue:

      -
      ALTER USER estuary_flow_user QUOTA UNLIMITED ON USERS;
      -

      Known Limitations

      -
        -
      1. Table and column names longer than 30 characters are not supported by Logminer, and thus they are also not supported by this connector.
      2. -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/index.html deleted file mode 100644 index 914c2a3f2b..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/index.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Supabase | Estuary Flow - - - - - - - - - -

      Supabase

      -

      This connector uses change data capture (CDC) to continuously capture updates in a Supabase PostgreSQL database into one or more Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-postgres:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported versions and platforms

      -

      This connector supports all Supabase PostgreSQL instances.

      -

      Prerequisites

      -

      You'll need a Supabase PostgreSQL database setup with the following:

      -
        -
      • A Supabase IPv4 address and direct connection hostname which bypasses the Supabase connection pooler. -See Direct Database Connection for details.
      • -
      • Logical replication enabledwal_level=logical
      • -
      • User role with REPLICATION attribute
      • -
      • A replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. -
          -
        • Optional; if none exist, one will be created by the connector.
        • -
        • If you wish to run multiple captures from the same database, each must have its own slot. -You can create these slots yourself, or by specifying a name other than the default in the advanced configuration.
        • -
        -
      • -
      • A publication. This represents the set of tables for which change events will be reported. -
          -
        • In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions.
        • -
        -
      • -
      • A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. -
          -
        • In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions.
        • -
        -
      • -
      -
      Configuration Tip

      To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see configure connections with SSH tunneling.

      -

      Direct Database Connection

      -

      By default, Supabase guides users into connecting to their database through a -Connection Pooler. -Connection poolers are helpful for many applications, but unfortunately the pooler -does not support the CDC replication features that this connector relies on.

      -

      This capture connector requires a direct connection address for your database. -This address can be found by navigating to Settings > Database in the Supabase -dashboard and then making sure that the Display connection pooler checkbox is -unchecked so that the appropriate connection information is shown for a direct -connection.

      -

      You will also need to configure a dedicated IPv4 address -for your database, if you have not already done so. This can be configured under Project Settings > Add Ons > Dedicated IPv4 address -in the Supabase dashboard.

      -

      Setup

      -

      The simplest way to meet the above prerequisites is to change the WAL level and have the connector use a database superuser role.

      -

      For a more restricted setup, create a new user with just the required permissions as detailed in the following steps:

      -
        -
      1. Connect to your instance and create a new user and password:
      2. -
      -
      CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION;
      -
        -
      1. -

        Assign the appropriate role.

        -
          -
        1. If using PostgreSQL v14 or later:
        2. -
        -
        GRANT pg_read_all_data TO flow_capture;
        -
          -
        1. If using an earlier version:
        2. -
        -
        ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture;
        GRANT SELECT ON ALL TABLES IN SCHEMA public, <other_schema> TO flow_capture;
        GRANT SELECT ON ALL TABLES IN SCHEMA information_schema, pg_catalog TO flow_capture;
        -

        where <other_schema> lists all schemas that will be captured from.

        -
        info

        If an even more restricted set of permissions is desired, you can also grant SELECT on -just the specific table(s) which should be captured from. The ‘information_schema’ and -‘pg_catalog’ access is required for stream auto-discovery, but not for capturing already -configured streams.

        -
      2. -
      3. -

        Create the watermarks table, grant privileges, and create publication:

        -
      4. -
      -
      CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);
      GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;
      CREATE PUBLICATION flow_publication;
      ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);
      ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>;
      -

      where <other_tables> lists all tables that will be captured from. The publish_via_partition_root -setting is recommended (because most users will want changes to a partitioned table to be captured -under the name of the root table) but is not required.

      -
        -
      1. Set WAL level to logical:
      2. -
      -
      ALTER SYSTEM SET wal_level = logical;
      -
        -
      1. Restart PostgreSQL to allow the WAL level change to take effect.
      2. -
      -

      Backfills and performance considerations

      -

      When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis.

      -

      This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. -However, you may find it appropriate to skip the backfill, especially for extremely large tables.

      -

      In this case, you may turn of backfilling on a per-table basis. See properties for details.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressThe host or host:port at which the database can be reached.stringRequired
      /databaseDatabaseLogical database name to capture from.stringRequired, "postgres"
      /userUserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordPasswordPassword for the specified database user.stringRequired
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer4096
      /advanced/publicationNamePublication NameThe name of the PostgreSQL publication to replicate from.string"flow_publication"
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/slotNameSlot NameThe name of the PostgreSQL replication slot to replicate from.string"flow_slot"
      /advanced/watermarksTableWatermarks TableThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.string"public.flow_watermarks"
      /advanced/sslmodeSSL ModeOverrides SSL connection behavior by setting the 'sslmode' parameter.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe namespace/schema of the table.stringRequired
      /streamStreamTable name.stringRequired
      /syncModeSync modeConnection method. Always set to incremental.stringRequired
      -

      SSL Mode

      -

      Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration.

      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/source-postgres:dev"
      config:
      address: "localhost:5432"
      database: "postgres"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      stream: ${TABLE_NAME}
      namespace: ${TABLE_NAMESPACE}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      TOASTed values

      -

      PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. -If your tables contain values that exceed the limit, those values can't be stored directly. -PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to -store them separately.

      -

      TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. -If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. -As a result, the connector emits a row update with the a value omitted, which might cause -unexpected results in downstream catalog tasks if adjustments are not made.

      -

      The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflow -or use the Flow UI to create your capture. -It uses merge reductions -to fill in the previous known TOASTed value in cases when that value is omitted from a row update.

      -

      However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically:

      -
        -
      • When you materialize the captured data to another system using a connector that requires delta updates
      • -
      • When you perform a derivation that uses TOASTed values
      • -
      -

      Troubleshooting

      -

      If you encounter an issue that you suspect is due to TOASTed values, try the following:

      - -

      Publications

      -

      It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using:

      -
      CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true);
      -

      Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/index.html deleted file mode 100644 index 4301847d89..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/index.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Amazon RDS for PostgreSQL | Estuary Flow - - - - - - - - - -

      Amazon RDS for PostgreSQL

      -

      This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-postgres:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported versions and platforms

      -

      This connector supports PostgreSQL versions 10.0 and later on major cloud platforms.

      -

      Prerequisites

      -

      You'll need a PostgreSQL database setup with the following:

      -
        -
      • Logical replication enabledwal_level=logical
      • -
      • User role with REPLICATION attribute
      • -
      • A replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. -
          -
        • Optional; if none exist, one will be created by the connector.
        • -
        • If you wish to run multiple captures from the same database, each must have its own slot. -You can create these slots yourself, or by specifying a name other than the default in the advanced configuration.
        • -
        -
      • -
      • A publication. This represents the set of tables for which change events will be reported. -
          -
        • In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions.
        • -
        -
      • -
      • A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. -
          -
        • In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions.
        • -
        -
      • -
      -

      Setup

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          -
            -
          • Modify the database, setting Public accessibility to Yes.
          • -
          • Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database as described in the Amazon documentation.Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses.
          • -
          -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        Enable logical replication on your RDS PostgreSQL instance.

        -
          -
        1. -

          Create a parameter group. -Create a unique name and description and set the following properties:

          -
            -
          • Family: postgres13
          • -
          • Type: DB Parameter group
          • -
          -
        2. -
        3. -

          Modify the new parameter group and set rds.logical_replication=1.

          -
        4. -
        5. -

          Associate the parameter group with the database.

          -
        6. -
        7. -

          Reboot the database to allow the new parameter group to take effect.

          -
        8. -
        -
      4. -
      5. -

        In the PostgreSQL client, connect to your instance and run the following commands to create a new user for the capture with appropriate permissions, -and set up the watermarks table and publication.

        -
      6. -
      -
      CREATE USER flow_capture WITH PASSWORD 'secret';
      GRANT rds_replication TO flow_capture;
      GRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture;
      ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture;
      CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);
      GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;
      CREATE PUBLICATION flow_publication;
      ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);
      ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>;
      -

      where <other_tables> lists all tables that will be captured from. The publish_via_partition_root -setting is recommended (because most users will want changes to a partitioned table to be captured -under the name of the root table) but is not required.

      -
        -
      1. In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector.
      2. -
      -

      Backfills and performance considerations

      -

      When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis.

      -

      This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. -However, you may find it appropriate to skip the backfill, especially for extremely large tables.

      -

      In this case, you may turn of backfilling on a per-table basis. See properties for details.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressThe host or host:port at which the database can be reached.stringRequired
      /databaseDatabaseLogical database name to capture from.stringRequired, "postgres"
      /userUserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordPasswordPassword for the specified database user.stringRequired
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer4096
      /advanced/publicationNamePublication NameThe name of the PostgreSQL publication to replicate from.string"flow_publication"
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/slotNameSlot NameThe name of the PostgreSQL replication slot to replicate from.string"flow_slot"
      /advanced/watermarksTableWatermarks TableThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.string"public.flow_watermarks"
      /advanced/sslmodeSSL ModeOverrides SSL connection behavior by setting the 'sslmode' parameter.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe namespace/schema of the table.stringRequired
      /streamStreamTable name.stringRequired
      /syncModeSync modeConnection method. Always set to incremental.stringRequired
      -

      SSL Mode

      -

      Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration.

      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/source-postgres:dev"
      config:
      address: "localhost:5432"
      database: "postgres"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      stream: ${TABLE_NAME}
      namespace: ${TABLE_NAMESPACE}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      TOASTed values

      -

      PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. -If your tables contain values that exceed the limit, those values can't be stored directly. -PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to -store them separately.

      -

      TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. -If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. -As a result, the connector emits a row update with the a value omitted, which might cause -unexpected results in downstream catalog tasks if adjustments are not made.

      -

      The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflow -or use the Flow UI to create your capture. -It uses merge reductions -to fill in the previous known TOASTed value in cases when that value is omitted from a row update.

      -

      However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically:

      -
        -
      • When you materialize the captured data to another system using a connector that requires delta updates
      • -
      • When you perform a derivation that uses TOASTed values
      • -
      -

      Troubleshooting

      -

      If you encounter an issue that you suspect is due to TOASTed values, try the following:

      - -

      Publications

      -

      It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using:

      -
      CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true);
      -

      Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/index.html deleted file mode 100644 index 4255339709..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/index.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - -Google Cloud SQL for PostgreSQL | Estuary Flow - - - - - - - - - -

      Google Cloud SQL for PostgreSQL

      -

      This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-postgres:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported versions and platforms

      -

      This connector supports PostgreSQL versions 10.0 and later.

      -

      Prerequisites

      -

      You'll need a PostgreSQL database setup with the following:

      -
        -
      • Logical replication enabledwal_level=logical
      • -
      • User role with REPLICATION attribute
      • -
      • A replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. -
          -
        • Optional; if none exist, one will be created by the connector.
        • -
        • If you wish to run multiple captures from the same database, each must have its own slot. -You can create these slots yourself, or by specifying a name other than the default in the advanced configuration.
        • -
        -
      • -
      • A publication. This represents the set of tables for which change events will be reported. -
          -
        • In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions.
        • -
        -
      • -
      • A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. -
          -
        • In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions.
        • -
        -
      • -
      -

      Setup

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          - -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        On Google Cloud, navigate to your instance's Overview page. Click "Edit configuration". Scroll down to the Flags section. Click "ADD FLAG". Set the cloudsql.logical_decoding flag to on to enable logical replication on your Cloud SQL PostgreSQL instance.

        -
      4. -
      5. -

        In your PostgreSQL client, connect to your instance and issue the following commands to create a new user for the capture with appropriate permissions, -and set up the watermarks table and publication.

        -
      6. -
      -
      CREATE USER flow_capture WITH REPLICATION
      IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'secret';
      GRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture;
      ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture;
      CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);
      GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;
      CREATE PUBLICATION flow_publication;
      ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);
      ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>;
      -

      where <other_tables> lists all tables that will be captured from. The publish_via_partition_root -setting is recommended (because most users will want changes to a partitioned table to be captured -under the name of the root table) but is not required.

      -
        -
      1. In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 5432. -Together, you'll use the host:port as the address property when you configure the connector.
      2. -
      -

      Backfills and performance considerations

      -

      When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis.

      -

      This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. -However, you may find it appropriate to skip the backfill, especially for extremely large tables.

      -

      In this case, you may turn of backfilling on a per-table basis. See properties for details.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressThe host or host:port at which the database can be reached.stringRequired
      /databaseDatabaseLogical database name to capture from.stringRequired, "postgres"
      /userUserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordPasswordPassword for the specified database user.stringRequired
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer4096
      /advanced/publicationNamePublication NameThe name of the PostgreSQL publication to replicate from.string"flow_publication"
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/slotNameSlot NameThe name of the PostgreSQL replication slot to replicate from.string"flow_slot"
      /advanced/watermarksTableWatermarks TableThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.string"public.flow_watermarks"
      /advanced/sslmodeSSL ModeOverrides SSL connection behavior by setting the 'sslmode' parameter.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe namespace/schema of the table.stringRequired
      /streamStreamTable name.stringRequired
      /syncModeSync modeConnection method. Always set to incremental.stringRequired
      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/source-postgres:dev"
      config:
      address: "localhost:5432"
      database: "postgres"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      stream: ${TABLE_NAME}
      namespace: ${TABLE_NAMESPACE}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      TOASTed values

      -

      PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. -If your tables contain values that exceed the limit, those values can't be stored directly. -PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to -store them separately.

      -

      TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. -If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. -As a result, the connector emits a row update with the a value omitted, which might cause -unexpected results in downstream catalog tasks if adjustments are not made.

      -

      The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflow -or use the Flow UI to create your capture. -It uses merge reductions -to fill in the previous known TOASTed value in cases when that value is omitted from a row update.

      -

      However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically:

      -
        -
      • When you materialize the captured data to another system using a connector that requires delta updates
      • -
      • When you perform a derivation that uses TOASTed values
      • -
      -

      Troubleshooting

      -

      If you encounter an issue that you suspect is due to TOASTed values, try the following:

      - -

      Publications

      -

      It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using:

      -
      CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true);
      -

      Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/index.html deleted file mode 100644 index 32240e572d..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/index.html +++ /dev/null @@ -1,321 +0,0 @@ - - - - - -PostgreSQL | Estuary Flow - - - - - - - - - -

      PostgreSQL

      -

      This connector uses change data capture (CDC) to continuously capture updates in a PostgreSQL database into one or more Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-postgres:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      For managed PostgreSQL insteances that do not support logical replication, we offer a PostgreSQL Batch Connector as an alternative.

      -

      Supported versions and platforms

      -

      This connector supports PostgreSQL versions 10.0 and later on major cloud platforms, as well as self-hosted instances.

      -

      Setup instructions are provided for the following platforms:

      - -

      Prerequisites

      -

      You'll need a PostgreSQL database setup with the following:

      -
        -
      • Logical replication enabledwal_level=logical
      • -
      • User role with REPLICATION attribute
      • -
      • A replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. -
          -
        • Optional; if none exist, one will be created by the connector.
        • -
        • If you wish to run multiple captures from the same database, each must have its own slot. -You can create these slots yourself, or by specifying a name other than the default in the advanced configuration.
        • -
        -
      • -
      • A publication. This represents the set of tables for which change events will be reported. -
          -
        • In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions.
        • -
        -
      • -
      • A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. -
          -
        • In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions.
        • -
        -
      • -
      -
      Configuration Tip

      To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see configure connections with SSH tunneling.

      -

      Setup

      -

      To meet these requirements, follow the steps for your hosting type.

      - -

      Self-hosted PostgreSQL

      -

      The simplest way to meet the above prerequisites is to change the WAL level and have the connector use a database superuser role.

      -

      For a more restricted setup, create a new user with just the required permissions as detailed in the following steps:

      -
        -
      1. Connect to your instance and create a new user and password:
      2. -
      -
      CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION;
      -
        -
      1. -

        Assign the appropriate role.

        -
          -
        1. If using PostgreSQL v14 or later:
        2. -
        -
        GRANT pg_read_all_data TO flow_capture;
        -
          -
        1. If using an earlier version:
        2. -
        -
        ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture;
        GRANT SELECT ON ALL TABLES IN SCHEMA public, <other_schema> TO flow_capture;
        GRANT SELECT ON ALL TABLES IN SCHEMA information_schema, pg_catalog TO flow_capture;
        -

        where <other_schema> lists all schemas that will be captured from.

        -
        info

        If an even more restricted set of permissions is desired, you can also grant SELECT on -just the specific table(s) which should be captured from. The ‘information_schema’ and -‘pg_catalog’ access is required for stream auto-discovery, but not for capturing already -configured streams.

        -
      2. -
      3. -

        Create the watermarks table, grant privileges, and create publication:

        -
      4. -
      -
      CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);
      GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;
      CREATE PUBLICATION flow_publication;
      ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);
      ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>;
      -

      where <other_tables> lists all tables that will be captured from. The publish_via_partition_root -setting is recommended (because most users will want changes to a partitioned table to be captured -under the name of the root table) but is not required.

      -
        -
      1. Set WAL level to logical:
      2. -
      -
      ALTER SYSTEM SET wal_level = logical;
      -
        -
      1. Restart PostgreSQL to allow the WAL level change to take effect.
      2. -
      -

      Amazon Aurora

      -

      You must apply some of the settings to the entire Aurora DB cluster, and others to a database instance within the cluster. -For each step, take note of which entity you're working with.

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          -
            -
          • Modify the instance, choosing Publicly accessible in the Connectivity settings.
          • -
          • Edit the VPC security group associated with your instance, or create a new VPC security group and associate it with the instance as described in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses.
          • -
          -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        Enable logical replication on your Aurora DB cluster.

        -
          -
        1. -

          Create a parameter group. -Create a unique name and description and set the following properties:

          -
            -
          • Family: aurora-postgresql13, or substitute the version of Aurora PostgreSQL used for your cluster.
          • -
          • Type: DB Cluster Parameter group
          • -
          -
        2. -
        3. -

          Modify the new parameter group and set rds.logical_replication=1.

          -
        4. -
        5. -

          Associate the parameter group with the DB cluster.

          -
        6. -
        7. -

          Reboot the cluster to allow the new parameter group to take effect.

          -
        8. -
        -
      4. -
      5. -

        In the PostgreSQL client, connect to your instance and run the following commands to create a new user for the capture with appropriate permissions, -and set up the watermarks table and publication.

        -
      6. -
      -
      CREATE USER flow_capture WITH PASSWORD 'secret';
      GRANT rds_replication TO flow_capture;
      GRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture;
      ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture;
      CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);
      GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;
      CREATE PUBLICATION flow_publication;
      ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);
      ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>;
      -

      where <other_tables> lists all tables that will be captured from. The publish_via_partition_root -setting is recommended (because most users will want changes to a partitioned table to be captured -under the name of the root table) but is not required.

      -
        -
      1. In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector.
      2. -
      -

      Azure Database for PostgreSQL

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          - -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        In your Azure PostgreSQL instance's support parameters, set replication to logical to enable logical replication.

        -
      4. -
      5. -

        In the PostgreSQL client, connect to your instance and run the following commands to create a new user for the capture with appropriate permissions.

        -
      6. -
      -
      CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION;
      -
        -
      • If using PostgreSQL v14 or later:
      • -
      -
      GRANT pg_read_all_data TO flow_capture;
      -
        -
      • -

        If using an earlier version:

        -
        ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture;
        GRANT SELECT ON ALL TABLES IN SCHEMA public, <others> TO flow_capture;
        GRANT SELECT ON ALL TABLES IN SCHEMA information_schema, pg_catalog TO flow_capture;
        -

        where <others> lists all schemas that will be captured from.

        -
        info

        If an even more restricted set of permissions is desired, you can also grant SELECT on -just the specific table(s) which should be captured from. The ‘information_schema’ and ‘pg_catalog’ access is required for stream auto-discovery, but not for capturing already -configured streams.

        -
      • -
      -
        -
      1. Set up the watermarks table and publication.
      2. -
      -
      ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture;
      GRANT SELECT ON ALL TABLES IN SCHEMA public, <others> TO flow_capture;
      GRANT SELECT ON information_schema.columns, information_schema.tables, pg_catalog.pg_attribute, pg_catalog.pg_class, pg_catalog.pg_index, pg_catalog.pg_namespace TO flow_capture;
      CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);
      GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;
      CREATE PUBLICATION flow_publication;
      ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);
      ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>;
      -
        -
      1. -

        Note the following important items for configuration:

        -
          -
        • Find the instance's host under Server Name, and the port under Connection Strings (usually 5432). Together, you'll use the host:port as the address property when you configure the connector.
        • -
        • Format user as username@databasename; for example, flow_capture@myazuredb.
        • -
        -
      2. -
      -

      Backfills and performance considerations

      -

      When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis.

      -

      This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. -However, you may find it appropriate to skip the backfill, especially for extremely large tables.

      -

      In this case, you may turn of backfilling on a per-table basis. See properties for details.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector.

      -

      WAL Retention and Tuning Parameters

      -

      Postgres logical replication works by reading change events from the writeahead log, -reordering WAL events in memory on the server, and sending them to the client in the -order that transactions were committed. The replication slot used by the capture is -essentially a cursor into that logical sequence of changes.

      -

      Because of how Postgres reorders WAL events into atomic transactions, there are two -distinct LSNs which matter when it comes to WAL retention. The confirmed_flush_lsn -property of a replication slot represents the latest event in the WAL which has been -sent to and confirmed by the client. However there may be some number of uncommitted -changes prior to this point in the WAL which are still relevant and will be sent to -the client in later transactions. Thus there is also a restart_lsn property which -represents the point in the WAL from which logical decoding must resume in the future -if the replication connection is closed and restarted.

      -

      The server cannot clean up old WAL files so long as there are active replication slots -whose restart_lsn position requires them. There are two ways that restart_lsn might -get stuck at a particular point in the WAL:

      -
        -
      1. When a capture is deleted, disabled, or repeatedly failing for other reasons, -it is not able to advance the confirmed_flush_lsn and thus restart_lsn cannot -advance either.
      2. -
      3. When a long-running transaction is open on the server the restart_lsn of a -replication slot may be unable to advance even though confirmed_flush_lsn is.
      4. -
      -

      By default Postgres will retain an unbounded amount of WAL data and fill up the entire -disk if a replication slot stops advancing. There are two ways to address this:

      -
        -
      1. When deleting a capture, make sure that the replication slot is also successfully deleted. -
          -
        • You can list replication slots with the query SELECT * FROM pg_replication_slots and -can drop the replication slot manually with pg_drop_replication_slot('flow_slot').
        • -
        -
      2. -
      3. The database setting max_slot_wal_keep_size can be used to bound the maximum amount of -WAL data which a replication slot can force the database to retain. -
          -
        • This setting defaults to -1 (unlimited) but should be set on production databases -to protect them from unbounded WAL retention filling up the entire disk.
        • -
        • Proper sizing of this setting is complex for reasons discussed below, but a value -of 50GB should be enough for many databases.
        • -
        -
      4. -
      -

      When the max_slot_wal_keep_size limit is exceeded, Postgres will terminate any active -replication connections using that slot and invalidate the replication slot so that it -can no longer be used. If Postgres invalidates the replication slot, the Flow capture -using that slot will fail and manual intervention will be required to restart the capture -and re-backfill all tables.

      -

      Setting too low of a limit for max_slot_wal_keep_size can cause additional failures -in the presence of long-running transactions. Even when a client is actively receiving -and acknowledging replication events, a long-running transaction can cause the restart_lsn -of the replication slot to remain stuck until that transaction commits. Thus the value of -max_slot_wal_keep_size needs to be set high enough to avoid this happening. The precise -value depends on the overall change rate of your database and worst-case transaction open -time, but there is no downside to using a larger value provided you have enough free disk -space.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressThe host or host:port at which the database can be reached.stringRequired
      /databaseDatabaseLogical database name to capture from.stringRequired, "postgres"
      /userUserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordPasswordPassword for the specified database user.stringRequired
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer4096
      /advanced/publicationNamePublication NameThe name of the PostgreSQL publication to replicate from.string"flow_publication"
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/slotNameSlot NameThe name of the PostgreSQL replication slot to replicate from.string"flow_slot"
      /advanced/watermarksTableWatermarks TableThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.string"public.flow_watermarks"
      /advanced/sslmodeSSL ModeOverrides SSL connection behavior by setting the 'sslmode' parameter.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe namespace/schema of the table.stringRequired
      /streamStreamTable name.stringRequired
      /syncModeSync modeConnection method. Always set to incremental.stringRequired
      -

      SSL Mode

      -

      Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration.

      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/source-postgres:dev"
      config:
      address: "localhost:5432"
      database: "postgres"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      stream: ${TABLE_NAME}
      namespace: ${TABLE_NAMESPACE}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      TOASTed values

      -

      PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. -If your tables contain values that exceed the limit, those values can't be stored directly. -PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to -store them separately.

      -

      TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. -If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. -As a result, the connector emits a row update with the a value omitted, which might cause -unexpected results in downstream catalog tasks if adjustments are not made.

      -

      The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflow -or use the Flow UI to create your capture. -It uses merge reductions -to fill in the previous known TOASTed value in cases when that value is omitted from a row update.

      -

      However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically:

      -
        -
      • When you materialize the captured data to another system using a connector that requires delta updates
      • -
      • When you perform a derivation that uses TOASTed values
      • -
      -

      Troubleshooting

      -

      If you encounter an issue that you suspect is due to TOASTed values, try the following:

      - -

      Publications

      -

      It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using:

      -
      CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true);
      -

      Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/index.html deleted file mode 100644 index 89fbe6d64d..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/index.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - -Neon PostgreSQL | Estuary Flow - - - - - - - - - -

      Neon PostgreSQL

      -

      Neon's logical replication feature allows you to replicate data from your Neon Postgres database to external destinations.

      -

      Prerequisites

      - -

      Setup

      -

      1. Enable Logical Replication in Neon

      -

      Enabling logical replication modifies the Postgres wal_level configuration parameter, changing it from replica to logical for all databases in your Neon project. Once the wal_level setting is changed to logical, it cannot be reverted. Enabling logical replication also restarts all computes in your Neon project, meaning active connections will be dropped and have to reconnect.

      -

      To enable logical replication in Neon:

      -
        -
      1. Select your project in the Neon Console.
      2. -
      3. On the Neon Dashboard, select Project settings.
      4. -
      5. Select Beta.
      6. -
      7. Click Enable to enable logical replication.
      8. -
      -

      You can verify that logical replication is enabled by running the following query from the Neon SQL Editor:

      -
      SHOW wal_level;
      wal_level
      -----------
      logical
      -

      2. Create a Postgres Role for Replication

      -

      It is recommended that you create a dedicated Postgres role for replicating data. The role must have the REPLICATION privilege. -The default Postgres role created with your Neon project and roles created using the Neon Console, CLI, or API are granted membership in the neon_superuser role, which has the required REPLICATION privilege.

      -

      To create a role in the Neon Console:

      -
        -
      1. Navigate to the Neon Console.
      2. -
      3. Select a project.
      4. -
      5. Select Roles.
      6. -
      7. Select the branch where you want to create the role.
      8. -
      9. Click New Role.
      10. -
      11. In the role creation dialog, specify a role name.
      12. -
      13. Click Create. The role is created and you are provided with the password for the role.
      14. -
      -

      The following CLI command creates a role. To view the CLI documentation for this command, see Neon CLI commands — roles.

      -
      neon roles create --name <role>
      -

      The following Neon API method creates a role. To view the API documentation for this method, refer to the Neon API reference.

      -
      curl 'https://console.neon.tech/api/v2/projects/hidden-cell-763301/branches/br-blue-tooth-671580/roles' \
      -H 'Accept: application/json' \
      -H "Authorization: Bearer $NEON_API_KEY" \
      -H 'Content-Type: application/json' \
      -d '{
      "role": {
      "name": "cdc_role"
      }
      }' | jq
      -

      3. Grant Schema Access to Your Postgres Role

      -

      If your replication role does not own the schemas and tables you are replicating from, make sure to grant access. Run these commands for each schema:

      -
      GRANT USAGE ON SCHEMA public TO cdc_role;
      GRANT SELECT ON ALL TABLES IN SCHEMA public TO cdc_role;
      ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO cdc_role;
      -

      Granting SELECT ON ALL TABLES IN SCHEMA instead of naming the specific tables avoids having to add privileges later if you add tables to your publication.

      -

      4. Create a Publication

      -

      Create a publication with the name estuary_publication. Include all the tables you would like to ingest into Estuary Flow.

      -
      CREATE PUBLICATION flow_publication FOR TABLE <tbl1, tbl2, tbl3>;
      ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true);
      -

      The publish_via_partition_root -setting is recommended (because most users will want changes to a partitioned table to be captured -under the name of the root table) but is not required.

      -

      Refer to the Postgres docs if you need to add or remove tables from your publication. Alternatively, you also can create a publication FOR ALL TABLES.

      -

      Upon start-up, the Estuary Flow connector for Postgres will automatically create the replication slot required for ingesting data change events from Postgres. The slot's name will be prefixed with estuary_, followed by a unique identifier.

      -

      To prevent storage bloat, Neon automatically removes inactive replication slots after a period of time if there are other active replication slots. If you have or intend on having more than one replication slot, please see Unused replication slots to learn more.

      -

      Allow Inbound Traffic

      -

      If you are using Neon's IP Allow feature to limit the IP addresses that can connect to Neon, you will need to allow inbound traffic from Estuary Flow's IP addresses. -Refer to the Estuary Flow documentation for the list of IPs that need to be allowlisted for the Estuary Flow region of your account. -For information about configuring allowed IPs in Neon, see Configure IP Allow.

      -

      Create a Postgres Source Connector in Estuary Flow

      -
        -
      1. -

        In the Estuary Flow web UI, select Sources from the left navigation bar and click New Capture.

        -
      2. -
      3. -

        In the connector catalog, choose Neon PostgreSQL and click Connect.

        -
      4. -
      5. -

        Enter the connection details for your Neon database. You can get these details from your Neon connection string, which you'll find in the Connection Details widget on the Dashboard of your Neon project. Your connection string will look like this:

        -
        postgres://alex:AbC123dEf@ep-cool-darkness-123456.us-east-2.aws.neon.tech/dbname?sslmode=require
        -

        Enter the details for your connection string into the source connector fields. Based on the sample connection string above, the values would be specified as shown below. Your values will differ.

        -
          -
        • Name: Name of the Capture connector
        • -
        • Server Address: ep-cool-darkness-123456.us-east-2.aws.neon.tech:5432
        • -
        • User: cdc_role
        • -
        • Password: Click Add a new secret..., then specify a name for that secret and AbC123dEf as its value
        • -
        • Database: dbname
        • -
        -
      6. -
      7. -

        Click Next. Estuary Flow will now scan the source database for all the tables that can be replicated. Select one or more table(s) by checking the checkbox next to their name. -Optionally, you can change the name of the destination name for each table. You can also take a look at the schema of each stream by clicking on the Collection tab.

        -
      8. -
      9. -

        Click Save and Publish to provision the connector and kick off the automated backfill process.

        -
      10. -
      -

      Backfills and performance considerations

      -

      When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis.

      -

      This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. -However, you may find it appropriate to skip the backfill, especially for extremely large tables.

      -

      In this case, you may turn of backfilling on a per-table basis. See properties for details.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressThe host or host:port at which the database can be reached.stringRequired
      /databaseDatabaseLogical database name to capture from.stringRequired, "postgres"
      /userUserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordPasswordPassword for the specified database user.stringRequired
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer4096
      /advanced/publicationNamePublication NameThe name of the PostgreSQL publication to replicate from.string"flow_publication"
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/slotNameSlot NameThe name of the PostgreSQL replication slot to replicate from.string"flow_slot"
      /advanced/watermarksTableWatermarks TableThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.string"public.flow_watermarks"
      /advanced/sslmodeSSL ModeOverrides SSL connection behavior by setting the 'sslmode' parameter.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe namespace/schema of the table.stringRequired
      /streamStreamTable name.stringRequired
      /syncModeSync modeConnection method. Always set to incremental.stringRequired
      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/source-postgres:dev"
      config:
      address: "localhost:5432"
      database: "postgres"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      stream: ${TABLE_NAME}
      namespace: ${TABLE_NAMESPACE}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      TOASTed values

      -

      PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. -If your tables contain values that exceed the limit, those values can't be stored directly. -PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to -store them separately.

      -

      TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. -If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. -As a result, the connector emits a row update with the a value omitted, which might cause -unexpected results in downstream catalog tasks if adjustments are not made.

      -

      The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflow -or use the Flow UI to create your capture. -It uses merge reductions -to fill in the previous known TOASTed value in cases when that value is omitted from a row update.

      -

      However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically:

      -
        -
      • When you materialize the captured data to another system using a connector that requires delta updates
      • -
      • When you perform a derivation that uses TOASTed values
      • -
      -

      Troubleshooting

      -

      If you encounter an issue that you suspect is due to TOASTed values, try the following:

      - -

      Publications

      -

      It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using:

      -
      CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true);
      -

      Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch/index.html deleted file mode 100644 index 60e173901d..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - -PostgreSQL Batch Query Connector | Estuary Flow - - - - - - - - - -

      PostgreSQL Batch Query Connector

      -

      This connector captures data from Postgres into Flow collections by periodically -executing queries and translating the results into JSON documents.

      -

      We recommend using our PostgreSQL CDC Connector instead -if possible. Using CDC provides lower latency data capture, delete and update events, and usually -has a smaller impact on the source database.

      -

      However there are some circumstances where this might not be feasible. Perhaps you need -to capture from a managed PostgreSQL instance which doesn't support logical replication. -Or perhaps you need to capture the contents of a view or the result of an ad-hoc query. -That's the sort of situation this connector is intended for.

      -

      The number one caveat you need to be aware of when using this connector is that it will -periodically execute its update query over and over. At the default polling interval of -5 minutes, a naive SELECT * FROM foo query against a 100 MiB view will produce 30 GiB/day -of ingested data, most of it duplicated.

      -

      This is why the connector's autodiscovery logic only returns ordinary tables of data, because -in that particular case we can use the xmin system column as a cursor and ask the database -to SELECT xmin, * FROM foo WHERE xmin::text::bigint > $1;.

      -

      If you start editing these queries or manually adding capture bindings for views or to run -ad-hoc queries, you need to either have some way of restricting the query to "just the new -rows since last time" or else have your polling interval set high enough that the data rate -<DatasetSize> / <PollingInterval> is an amount of data you're willing to deal with.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/index.html deleted file mode 100644 index 193b169778..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/index.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - -Amazon RDS for SQL Server | Estuary Flow - - - - - - - - - -

      Amazon RDS for SQL Server

      -

      This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections.

      -

      It’s available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-sqlserver:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported versions and platforms

      -

      This connector designed for databases using any version of SQL Server which has CDC support, and is regularly tested against SQL Server 2017 and up.

      -

      Prerequisites

      -

      To capture change events from SQL Server tables using this connector, you need:

      -
        -
      • -

        For each table to be captured, a primary key should be specified in the database. -If a table doesn't have a primary key, you must manually specify a key in the associated Flow collection definition while creating the capture. -See detailed steps.

        -
      • -
      • -

        CDC enabled -on the database and the individual tables to be captured. -(This creates change tables in the database, from which the connector reads.)

        -
      • -
      • -

        A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents.

        -
      • -
      • -

        A user role with:

        -
          -
        • SELECT permissions on the CDC schema and the schemas that contain tables to be captured.
        • -
        • Access to the change tables created as part of the SQL Server CDC process.
        • -
        • SELECT, INSERT, and UPDATE permissions on the watermarks table
        • -
        -
      • -
      -

      To meet these requirements, follow the steps for your hosting type.

      - -

      Setup

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          -
            -
          • Modify the database, setting Public accessibility to Yes.
          • -
          • Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database as described in the Amazon documentation.Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses.
          • -
          -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        In your SQL client, connect to your instance as the default sqlserver user and issue the following commands.

        -
      4. -
      -
      USE <database>;
      -- Enable CDC for the database.
      EXEC msdb.dbo.rds_cdc_enable_db;
      -- Create user and password for use with the connector.
      CREATE LOGIN flow_capture WITH PASSWORD = 'secret';
      CREATE USER flow_capture FOR LOGIN flow_capture;
      -- Grant the user permissions on the CDC schema and schemas with data.
      -- This assumes all tables to be captured are in the default schema, `dbo`.
      -- Add similar queries for any other schemas that contain tables you want to capture.
      GRANT SELECT ON SCHEMA :: dbo TO flow_capture;
      GRANT SELECT ON SCHEMA :: cdc TO flow_capture;
      -- Create the watermarks table and grant permissions.
      CREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT);
      GRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture;
      -- Enable CDC on tables. The below query enables CDC the watermarks table ONLY.
      -- You should add similar query for all other tables you intend to capture.
      EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture';
      -
        -
      1. In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector.
      2. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SQL Server source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressServer AddressThe host or host:port at which the database can be reached.stringRequired
      /databaseDatabaseLogical database name to capture from.stringRequired
      /userUserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordPasswordPassword for the specified database user.stringRequired
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer4096
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/watermarksTableWatermarks TableThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.string"dbo.flow_watermarks"
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe namespace/schema of the table.stringRequired
      /streamStreamTable name.stringRequired
      /primary_keyPrimary Key ColumnsarrayThe columns which together form the primary key of the table.
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/source-sqlserver:dev"
      config:
      address: "<host>:1433"
      database: "my_db"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      stream: ${TABLE_NAME}
      namespace: dbo
      primary_key: ["id"]
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      Specifying Flow collection keys

      -

      Every Flow collection must have a key. -As long as your SQL Server tables have a primary key specified, the connector will set the -corresponding collection's key accordingly.

      -

      In cases where a SQL Server table you want to capture doesn't have a primary key, -you can manually add it to the collection definition during the capture creation workflow.

      -
        -
      1. -

        After you input the endpoint configuration and click Next, -the tables in your database have been mapped to Flow collections. -Click each collection's Specification tab and identify a collection where "key": [ ], is empty.

        -
      2. -
      3. -

        Click inside the empty key value in the editor and input the name of column in the table to use as the key, formatted as a JSON pointer. For example "key": ["/foo"],

        -

        Make sure the key field is required, not nullable, and of an allowed type. -Make any other necessary changes to the collection specification to accommodate this.

        -
      4. -
      5. -

        Repeat with other missing collection keys, if necessary.

        -
      6. -
      7. -

        Save and publish the capture as usual.

        -
      8. -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/index.html deleted file mode 100644 index fb3676d8b3..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/index.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - -Google Cloud SQL for SQL Server | Estuary Flow - - - - - - - - - -

      Google Cloud SQL for SQL Server

      -

      This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections.

      -

      It’s available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-sqlserver:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported versions and platforms

      -

      This connector is designed for databases using any version of SQL Server which has CDC support, and is regularly tested against SQL Server 2017 and up.

      -

      Prerequisites

      -

      To capture change events from SQL Server tables using this connector, you need:

      -
        -
      • -

        For each table to be captured, a primary key should be specified in the database. -If a table doesn't have a primary key, you must manually specify a key in the associated Flow collection definition while creating the capture. -See detailed steps.

        -
      • -
      • -

        CDC enabled -on the database and the individual tables to be captured. -(This creates change tables in the database, from which the connector reads.)

        -
      • -
      • -

        A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents.

        -
      • -
      • -

        A user role with:

        -
          -
        • SELECT permissions on the CDC schema and the schemas that contain tables to be captured.
        • -
        • Access to the change tables created as part of the SQL Server CDC process.
        • -
        • SELECT, INSERT, and UPDATE permissions on the watermarks table
        • -
        -
      • -
      -

      Setup

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          - -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        In your SQL client, connect to your instance as the default sqlserver user and issue the following commands.

        -
      4. -
      -
      USE <database>;
      -- Enable CDC for the database.
      EXEC msdb.dbo.gcloudsql_cdc_enable_db '<database>';
      -- Create user and password for use with the connector.
      CREATE LOGIN flow_capture WITH PASSWORD = 'Secret123!';
      CREATE USER flow_capture FOR LOGIN flow_capture;
      -- Grant the user permissions on the CDC schema and schemas with data.
      -- This assumes all tables to be captured are in the default schema, `dbo`.
      -- Add similar queries for any other schemas that contain tables you want to capture.
      GRANT SELECT ON SCHEMA :: dbo TO flow_capture;
      GRANT SELECT ON SCHEMA :: cdc TO flow_capture;
      -- Create the watermarks table and grant permissions.
      CREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT);
      GRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture;
      -- Enable CDC on tables. The below query enables CDC the watermarks table ONLY.
      -- You should add similar query for all other tables you intend to capture.
      EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture';
      -
        -
      1. In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 1433. -Together, you'll use the host:port as the address property when you configure the connector.
      2. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SQL Server source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressServer AddressThe host or host:port at which the database can be reached.stringRequired
      /databaseDatabaseLogical database name to capture from.stringRequired
      /userUserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordPasswordPassword for the specified database user.stringRequired
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer4096
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/watermarksTableWatermarks TableThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.string"dbo.flow_watermarks"
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe namespace/schema of the table.stringRequired
      /streamStreamTable name.stringRequired
      /primary_keyPrimary Key ColumnsarrayThe columns which together form the primary key of the table.
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/source-sqlserver:dev"
      config:
      address: "<host>:1433"
      database: "my_db"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      stream: ${TABLE_NAME}
      namespace: dbo
      primary_key: ["id"]
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      Specifying Flow collection keys

      -

      Every Flow collection must have a key. -As long as your SQL Server tables have a primary key specified, the connector will set the -corresponding collection's key accordingly.

      -

      In cases where a SQL Server table you want to capture doesn't have a primary key, -you can manually add it to the collection definition during the capture creation workflow.

      -
        -
      1. -

        After you input the endpoint configuration and click Next, -the tables in your database have been mapped to Flow collections. -Click each collection's Specification tab and identify a collection where "key": [ ], is empty.

        -
      2. -
      3. -

        Click inside the empty key value in the editor and input the name of column in the table to use as the key, formatted as a JSON pointer. For example "key": ["/foo"],

        -

        Make sure the key field is required, not nullable, and of an allowed type. -Make any other necessary changes to the collection specification to accommodate this.

        -
      4. -
      5. -

        Repeat with other missing collection keys, if necessary.

        -
      6. -
      7. -

        Save and publish the capture as usual.

        -
      8. -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/index.html deleted file mode 100644 index 08f6a343f2..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/index.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - -Microsoft SQL Server | Estuary Flow - - - - - - - - - -

      Microsoft SQL Server

      -

      This connector uses change data capture (CDC) to continuously capture updates in a Microsoft SQL Server database into one or more Flow collections.

      -

      It’s available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-sqlserver:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported versions and platforms

      -

      This connector will work on both hosted deployments and all major cloud providers. It is designed for databases using any version of SQL Server which has CDC support, and is regularly tested against SQL Server 2017 and up.

      -

      Setup instructions are provided for the following platforms:

      - -

      Prerequisites

      -

      To capture change events from SQL Server tables using this connector, you need:

      -
        -
      • -

        For each table to be captured, a primary key should be specified in the database. -If a table doesn't have a primary key, you must manually specify a key in the associated Flow collection definition while creating the capture. -See detailed steps.

        -
      • -
      • -

        CDC enabled -on the database and the individual tables to be captured. -(This creates change tables in the database, from which the connector reads.)

        -
      • -
      • -

        A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents.

        -
      • -
      • -

        A user role with:

        -
          -
        • SELECT permissions on the CDC schema and the schemas that contain tables to be captured.
        • -
        • Access to the change tables created as part of the SQL Server CDC process.
        • -
        • SELECT, INSERT, and UPDATE permissions on the watermarks table
        • -
        -
      • -
      -

      Setup

      -

      To meet these requirements, follow the steps for your hosting type.

      - -

      Self-hosted SQL Server

      -
        -
      1. Connect to the server and issue the following commands:
      2. -
      -
      USE <database>;
      -- Enable CDC for the database.
      EXEC sys.sp_cdc_enable_db;
      -- Create user and password for use with the connector.
      CREATE LOGIN flow_capture WITH PASSWORD = 'secret';
      CREATE USER flow_capture FOR LOGIN flow_capture;
      -- Grant the user permissions on the CDC schema and schemas with data.
      -- This assumes all tables to be captured are in the default schema, `dbo`.
      -- Add similar queries for any other schemas that contain tables you want to capture.
      GRANT SELECT ON SCHEMA :: dbo TO flow_capture;
      GRANT SELECT ON SCHEMA :: cdc TO flow_capture;
      -- Create the watermarks table and grant permissions.
      CREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT);
      GRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture;
      -- Enable CDC on tables. The below query enables CDC the watermarks table ONLY.
      -- You should add similar query for all other tables you intend to capture.
      EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture';
      -
        -
      1. -

        Allow secure connection to Estuary Flow from your hosting environment. Either:

        - -
      2. -
      -

      Azure SQL Database

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          - -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        In your SQL client, connect to your instance as the default sqlserver user and issue the following commands.

        -
      4. -
      -
      USE <database>;
      -- Enable CDC for the database.
      EXEC sys.sp_cdc_enable_db;
      -- Create user and password for use with the connector.
      CREATE LOGIN flow_capture WITH PASSWORD = 'secret';
      CREATE USER flow_capture FOR LOGIN flow_capture;
      -- Grant the user permissions on the CDC schema and schemas with data.
      -- This assumes all tables to be captured are in the default schema, `dbo`.
      -- Add similar queries for any other schemas that contain tables you want to capture.
      GRANT SELECT ON SCHEMA :: dbo TO flow_capture;
      GRANT SELECT ON SCHEMA :: cdc TO flow_capture;
      -- Create the watermarks table and grant permissions.
      CREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT);
      GRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture;
      -- Enable CDC on tables. The below query enables CDC the watermarks table ONLY.
      -- You should add similar query for all other tables you intend to capture.
      EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture';
      -
        -
      1. -

        Note the following important items for configuration:

        -
          -
        • Find the instance's host under Server Name. The port is always 1433. Together, you'll use the host:port as the address property when you configure the connector.
        • -
        -
      2. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SQL Server source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressServer AddressThe host or host:port at which the database can be reached.stringRequired
      /databaseDatabaseLogical database name to capture from.stringRequired
      /userUserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordPasswordPassword for the specified database user.stringRequired
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer4096
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/watermarksTableWatermarks TableThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.string"dbo.flow_watermarks"
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe namespace/schema of the table.stringRequired
      /streamStreamTable name.stringRequired
      /primary_keyPrimary Key ColumnsarrayThe columns which together form the primary key of the table.
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/source-sqlserver:dev"
      config:
      address: "<host>:1433"
      database: "my_db"
      user: "flow_capture"
      password: "secret"
      bindings:
      - resource:
      stream: ${TABLE_NAME}
      namespace: dbo
      primary_key: ["id"]
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      -

      Specifying Flow collection keys

      -

      Every Flow collection must have a key. -As long as your SQL Server tables have a primary key specified, the connector will set the -corresponding collection's key accordingly.

      -

      In cases where a SQL Server table you want to capture doesn't have a primary key, -you can manually add it to the collection definition during the capture creation workflow.

      -
        -
      1. -

        After you input the endpoint configuration and click Next, -the tables in your database have been mapped to Flow collections. -Click each collection's Specification tab and identify a collection where "key": [ ], is empty.

        -
      2. -
      3. -

        Click inside the empty key value in the editor and input the name of column in the table to use as the key, formatted as a JSON pointer. For example "key": ["/foo"],

        -

        Make sure the key field is required, not nullable, and of an allowed type. -Make any other necessary changes to the collection specification to accommodate this.

        -
      4. -
      5. -

        Repeat with other missing collection keys, if necessary.

        -
      6. -
      7. -

        Save and publish the capture as usual.

        -
      8. -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/index.html deleted file mode 100644 index a4ddd0b3e0..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/index.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - -Salesforce | Estuary Flow - - - - - - - - - -

      Salesforce

      -

      Overview

      -

      The Estuary Salesforce Connector facilitates seamless integration between Salesforce and Estuary's data processing framework. With this connector, users can effortlessly sync data from Salesforce objects into Estuary Flow collections. There are two primary types of connectors available: the Realtime Connector and the Historical Connector.

      -

      Salesforce Historical Data

      -

      The Historical Data Connector is designed to capture data from Salesforce objects into Flow collections using batch processing methods. This connector is particularly suited for synchronizing historical Salesforce data. By leveraging batch processing capabilities, it efficiently retrieves and syncs large volumes of historical data, ensuring comprehensive integration with Estuary's data processing workflows.

      -

      Salesforce Real Time Data

      -

      The Real-time Connector provides a mechanism to capture data from Salesforce objects into Flow collections in real time. It utilizes the Salesforce PushTopic API, which enables the streaming of data changes from Salesforce to Estuary. Leveraging the real-time capabilities of the PushTopic API, this connector ensures that updates and modifications in Salesforce objects are promptly reflected in the corresponding Estuary Flow collections.

      -

      Running Both Connectors in Parallel

      -

      To combine the capabilities of both connectors, users can create two separate captures: one using the Historical Connector to capture historical data, and the other using the Realtime Connector to capture real-time updates. Both captures can be configured to point to the same Flow collection, effectively merging historical and real-time data within the same destination.

      -

      This approach provides a comprehensive solution, allowing users to maintain an up-to-date representation of their Salesforce data while also preserving historical context. By seamlessly integrating historical and real-time data updates, users can leverage the combined power of batch processing and real-time streaming for enhanced data analysis and insights.

      -

      For help using both connectors in parallel, contact Estuary's support team.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/index.html deleted file mode 100644 index 13b159a476..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/index.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - -Salesforce — Historical data | Estuary Flow - - - - - - - - - -

      Salesforce — Historical data

      -

      This connector captures data from Salesforce objects into Flow collections. -It uses batch processing and is ideal for syncing your historical Salesforce data.

      -

      A separate connector is available for real-time Salesforce data capture. -For help using both connectors in parallel, contact your Estuary account manager.

      -

      This connector is available for use in the Flow web application. -For local development or open-source workflows, ghcr.io/estuary/source-salesforce:dev provides the latest connector image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      This connector can capture the following Salesforce standard objects, if present in your account:

      -
        -
      • Account
      • -
      • Contact
      • -
      • User
      • -
      • OpportunityFilledHistory
      • -
      • LeadHistory
      • -
      • Opportunity
      • -
      • Campaign
      • -
      • Case
      • -
      • ContactLineItem
      • -
      • Entitlement
      • -
      • Lead
      • -
      • LiveChatTranscript
      • -
      • MessagingSession
      • -
      • Quote
      • -
      • QuoteLineItem
      • -
      • ServiceAppointment
      • -
      • ServiceContract
      • -
      • Task
      • -
      • UserServicePresence
      • -
      • WorkOrder
      • -
      • WorkOrderLineItem
      • -
      -

      The Salesforce connector has the ability to capture all standard Salesforce objects as well as custom objects. All available objects will appear after connecting to Salesforce.

      -

      Because most Salesforce accounts contain large volumes of data, you may only want to capture a subset of the available objects. -There are several ways to control this:

      - -

      Prerequisites

      -

      Using OAuth2 to authenticate with Salesforce in the Flow web app

      -

      If you're using the Flow web app, you'll be prompted to authenticate with Salesforce using OAuth. You'll need the following:

      -
        -
      • -

        A Salesforce organization on the Enterprise tier, or with an equivalent API request allocation.

        -
      • -
      • -

        Salesforce user credentials. We recommend creating a dedicated read-only Salesforce user.

        -
      • -
      -

      Configuring the connector specification manually

      -

      If you're working with flowctl and writing specifications in a local development environment, -you'll need to manually supply OAuth credentials. You'll need:

      - -

      Setup

      -

      Create a read-only Salesforce user

      -

      Creating a dedicated read-only Salesforce user is a simple way to specify which objects Flow will capture. -This is useful if you have a large amount of data in your Salesforce organization.

      -
        -
      1. -

        While signed in as an administrator, create a new profile by cloning the standard Minimum Access profile.

        -
      2. -
      3. -

        Edit the new profile's permissions. Grant it read access to all the standard and custom objects you'd like to capture with Flow.

        -
      4. -
      5. -

        Create a new user, applying the profile you just created. -You'll use this user's email address and password to authenticate Salesforce in Flow.

        -
      6. -
      -

      Create a developer application and generate authorization tokens

      -

      To manually write a capture specification for Salesforce, you need to create and configure a developer application. -Through this process, you'll obtain the client ID, client secret, and refresh token.

      -
        -
      1. -

        Create a new developer application.

        -

        a. When selecting Scopes for your app, select Manage user data via APIs (api), Perform requests at any time (refresh_token, offline_access), and Manage user data via Web browsers (web).

        -
      2. -
      3. -

        Edit the app to ensure that Permitted users is set to All users may self-authorize.

        -
      4. -
      5. -

        Locate the Consumer Key and Consumer Secret. These are equivalent to the client id and client secret, respectively.

        -
      6. -
      7. -

        Follow the Salesforce Web Server Flow. The final POST response will include your refresh token.

        -
      8. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the Flow specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the batch Salesforce source connector.

      -

      Formula Fields

      -

      Estuary is able to capture Salesforce formula fields, however, regular full syncs must be configured in order to ensure up to date formula fields. Given the batch processing of this connector, if formula field values are updated in between syncs, Estuary will not be aware of any changes.

      -

      In order to ensure data freshness, it is recommended that you configure your capture to regularly initiate full refreshes of your source. Once a historical backfill is complete, updated formula field values will be reflected within Estuary.

      -

      Slowly Changing Dimensions Type 2

      -

      Estuary is capable of capturing a stream of your Salesforce data as it changes through a feature called Delta Updates. To read more about how Delta Updates works visit our docs.

      -

      Merging Real Time and Batch Data

      -

      Estuary offers connectors for both batch and real time capture. It is possible to create collections that reflect both batch and real time data capture using the following steps:

      -
        -
      1. -

        Create a new capture using the batch capture connector.

        -
      2. -
      3. -

        Create a new capture using the real time capture connector.

        -
      4. -
      5. -

        Both captures should share the same namespace in order to write to the same collection. For example, you would end up with a batch connector named Tenant/Salesforce/source-salesforce and a real time capture named Tenant/Salesforce/source-salesforce-real-time.

        -
      6. -
      7. -

        If configured correctly, both captures will read data into the same collections that are titled Tenant/Salesforce/your-stream.

        -
      8. -
      -

      Estuary should automatically merge your documents, ensuring that duplicates are not produced when pulling from two captures with the same source. Before continuing, it is important to make sure that a reduction strategy has been implemented for your collections.

      -

      This step requires using flowctl, please visit our documentation for more information.

      -
        -
      1. -

        Pull down your active specifications into your local environment using the command flowctl catalog pull-specs --prefix Tenant/Salesforce

        -
      2. -
      3. -

        This command will generate a folder for each subtree of your tenant. Using the above example tenant, you would end up with a top level folder structure named Tenant and a sub folder named Salesforce.

        -
      4. -
      5. -

        Within the sub folder for your Salesforce capture you will find yaml specification files for your each of your collections that follow the naming convention BindingName.schema.yaml.

        -
      6. -
      7. -

        For each newly created collection, make sure that it contains the following reduction strategy:

        -
      8. -
      -
      ---
      type: object
      additionalProperties: true
      properties:
      Id:
      type:
      - string
      ...
      required:
      - Id
      # Your collection must include this line. If missing, please add below
      reduce:
      strategy: merge
      -
        -
      1. If the above line was missing you must also run the command flowctl catalog publish --source flow.yaml at the root level of your local folder structure to publish the changes to Flow.
      2. -
      -

      Properties

      -

      Endpoint

      -

      The properties in the table below reflect the manual authentication method. -If you're working in the Flow web app, you'll use OAuth2, -so you won't need the /credentials values listed here.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsobjectRequired
      /credentials/auth_typeAuthorization typeSet to Clientstring
      /credentials/client_idClient IDThe Salesforce Client ID, also known as a Consumer Key, for your developer application.stringRequired
      /credentials/client_secretClient SecretThe Salesforce Client Secret, also known as a Consumer Secret, for your developer application.stringRequired
      /credentials/refresh_tokenRefresh TokenThe refresh token generated by your developer application.stringRequired
      /is_sandboxSandboxWhether you're using a Salesforce Sandbox.booleanfalse
      /start_dateStart DateStart date in the format YYYY-MM-DD. Data added on and after this date will be captured. If this field is blank, all data will be captured.string
      /streams_criteriaFilter Salesforce Objects (Optional)Filter Salesforce objects for capture.array
      /streams_criteria/-/criteriaSearch criteriaPossible criteria are "starts with", "ends with", "contains", "exacts", "starts not with", "ends not with", "not contains", and "not exacts".string"contains"
      /streams_criteria/-/valueSearch valueSearch term used with the selected criterion to filter objects.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /cursorFieldCursor fieldField used as a cursor to track data replication; typically a timestamp field.array, null
      /streamStreamSalesforce object from which a collection is captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      This sample specification reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-salesforce:dev
      config:
      credentials:
      auth_type: Client
      client_id: {your_client_id}
      client_secret: {secret}
      refresh_token: {XXXXXXXX}
      is_sandbox: false
      start_date: 2022-01-01
      streams_criteria:
      - criteria: "starts with"
      value: "Work"
      bindings:
      - resource:
      cursorField: [SystemModstamp]
      stream: WorkOrder
      syncMode: incremental
      target: ${PREFIX}/WorkOrder
      - resource:
      cursorField: [SystemModstamp]
      stream: WorkOrderLineItem
      syncMode: incremental
      target: ${PREFIX}/WorkOrderLineItem
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/index.html deleted file mode 100644 index 36121acea7..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/index.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - -Salesforce — Real-time data | Estuary Flow - - - - - - - - - -

      Salesforce — Real-time data

      -

      This connector captures data from Salesforce objects into Flow collections in real time via the Salesforce PushTopic API.

      -

      A separate connector is available for syncing historical Salesforce data. -For help using both connectors in parallel, contact your Estuary account manager.

      -

      This connector is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-salesforce-next:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported data resources

      -

      This connector can capture the following Salesforce standard objects, if present in your account:

      -
        -
      • Account
      • -
      • Contact
      • -
      • User
      • -
      • OpportunityFilledHistory
      • -
      • LeadHistory
      • -
      • Opportunity
      • -
      • Campaign
      • -
      • Case
      • -
      • ContactLineItem
      • -
      • Entitlement
      • -
      • Lead
      • -
      • LiveChatTranscript
      • -
      • MessagingSession
      • -
      • Quote
      • -
      • QuoteLineItem
      • -
      • ServiceAppointment
      • -
      • ServiceContract
      • -
      • Task
      • -
      • UserServicePresence
      • -
      • WorkOrder
      • -
      • WorkOrderLineItem
      • -
      -

      Because most Salesforce accounts contain large volumes of data, you may only want to capture a subset of the available objects. -There are several ways to control this:

      - -

      Prerequisites

      -

      Using OAuth2 to authenticate with Salesforce in the Flow web app

      -

      If you're using the Flow web app, you'll be prompted to authenticate with Salesforce using OAuth. You'll need the following:

      -
        -
      • -

        A Salesforce organization on the Enterprise tier, or with an equivalent API request allocation.

        -
      • -
      • -

        Salesforce user credentials. We recommend creating a dedicated read-only Salesforce user.

        -
      • -
      -

      Configuring the connector specification manually

      -

      If you're working with flowctl and writing specifications in a local development environment, -you'll need to manually supply OAuth credentials. You'll need:

      - -

      Setup

      -

      Create a read-only Salesforce user

      -

      Creating a dedicated read-only Salesforce user is a simple way to specify which objects Flow will capture.

      -
        -
      1. -

        While signed in as an administrator, create a new profile by cloning the standard Minimum Access profile.

        -
      2. -
      3. -

        Edit the new profile's permissions. Grant it read access to all the standard and custom objects you'd like to capture with Flow.

        -
      4. -
      5. -

        Create a new user, applying the profile you just created. -You'll use this user's email address and password to authenticate Salesforce in Flow.

        -
      6. -
      -

      Create a developer application and generate authorization tokens

      -

      To manually write a capture specification for Salesforce, you need to create and configure a developer application. -Through this process, you'll obtain the client ID, client secret, and refresh token.

      -
        -
      1. -

        Create a new developer application.

        -

        a. When selecting Scopes for your app, select Manage user data via APIs (api), Perform requests at any time (refresh_token, offline_access), and Manage user data via Web browsers (web).

        -
      2. -
      3. -

        Edit the app to ensure that Permitted users is set to All users may self-authorize.

        -
      4. -
      5. -

        Locate the Consumer Key and Consumer Secret. These are equivalent to the client id and client secret, respectively.

        -
      6. -
      7. -

        Follow the Salesforce Web Server Flow. The final POST response will include your refresh token.

        -
      8. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the real-time Salesforce source connector.

      -

      Properties

      -

      Endpoint

      -

      The properties in the table below reflect the manual authentication method. -If you're working in the Flow web app, you'll use OAuth2, -so you won't need the /credentials values listed here.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsobjectRequired
      /credentials/client_idClient IDThe Salesforce Client ID, also known as a Consumer Key, for your developer application.stringRequired
      /credentials/client_secretClient SecretThe Salesforce Client Secret, also known as a Consumer Secret, for your developer application.stringRequired
      /credentials/refresh_tokenRefresh TokenThe refresh token generated by your developer application.stringRequired
      /is_sandboxSandboxWhether you're using a Salesforce Sandbox.booleanfalse
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamSalesforce object from which a collection is captured.stringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-salesforce-next:dev
      config:
      credentials:
      client_id: {your_client_id}
      client_secret: {secret}
      refresh_token: {XXXXXXXX}
      is_sandbox: false
      bindings:
      - resource:
      stream: WorkOrder
      target: ${PREFIX}/WorkOrder
      - resource:
      stream: WorkOrderLineItem
      target: ${PREFIX}/WorkOrderLineItem
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/index.html deleted file mode 100644 index e432300ce7..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/index.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - -Aircall | Estuary Flow - - - - - - - - - -

      Aircall

      -

      This connector captures data from Aircall into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-aircall:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To set up the Aircall connector, you need the following prerequisite:

      -
        -
      • Access Token: An access token acting as a bearer token is required for the connector to work. You can find the access token in the settings of Aircall.
      • -
      -

      Setup

      -

      Follow the steps below to set up the Aircall connector.

      -
        -
      1. Obtain an Aircall access token from the Aircall settings.
      2. -
      -

      Set up the Aircall connector in Estuary Flow

      -
        -
      1. Log into your Estuary Flow account.
      2. -
      3. In the left navigation bar, click on "Captures". In the top-left corner, click "Connector Search".
      4. -
      5. Enter the name for the Aircall connector and select "Aircall" from the dropdown.
      6. -
      7. Fill out the following endpoint configurations: -
          -
        • api_id: The auto-generated ID.
        • -
        • api_token: The access token obtained from Aircall settings.
        • -
        • start_date: Date filter for eligible streams. Enter the desired start date.
        • -
        -
      8. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Aircall source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /api_idAPI IDApp ID found at settingsstringRequired
      /api_tokenAPI TokenApp token found at settingsstringRequired
      /start_dateStart DateDate time filter for incremental filter, Specify which date to extract from.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Aircall project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -
      {
      "properties": {
      "start_date": {
      "default": "2023-01-01T00:00:00.000Z",
      "format": null
      }
      }
      }
      -

      Supported Streams

      -

      The Aircall connector supports the following streams:

      -
        -
      • calls
      • -
      • company
      • -
      • contacts
      • -
      • numbers
      • -
      • tags
      • -
      • user_availablity
      • -
      • users
      • -
      • teams
      • -
      • webhooks
      • -
      -

      API Method Example

      -

      An example of an API method call for Aircall:

      -

      GET https://api.aircall.io/v1/numbers

      -

      Performance Considerations

      -

      The Aircall API currently uses v1. The connector defaults to using v1.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/index.html deleted file mode 100644 index bc1df207da..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - -Airtable | Estuary Flow - - - - - - - - - -

      Airtable

      -

      This connector captures data from Airtable into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-airtable:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Prerequisites

      -
        -
      • An active Airtable account
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Airtable source connector.

      -

      Properties

      -

      Endpoint

      -

      The following properties reflect the API Key authentication method.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /api_keyAPI KeyAPI KeystringRequired
      /access_tokenPersonal Access TokenThe Personal Access Token for the Airtable account.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Airtable project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-airtable:dev
      config:
      access_token: <secret>
      api_key: <secret>
      bindings:
      - resource:
      stream: users
      syncMode: full_refresh
      target: ${PREFIX}/users
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/index.html deleted file mode 100644 index db188eb32d..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - -AlloyDB | Estuary Flow - - - - - - - - - -

      AlloyDB

      -

      This connector uses change data capture (CDC) to continuously capture table updates in an AlloyDB database into one or more Flow collections.

      -

      AlloyDB is a fully managed, PostgreSQL-compatible database available in the Google Cloud platform. -This connector is derived from the PostgreSQL capture connector, -so the same configuration applies, but the setup steps look somewhat different.

      -

      It's available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-alloydb:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      You'll need a AlloyDB database setup with the following:

      -
        -
      • Logical decoding enabled
      • -
      • User role with REPLICATION attribute
      • -
      • A replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. -
          -
        • Optional; if none exist, one will be created by the connector.
        • -
        • If you wish to run multiple captures from the same database, each must have its own slot. -You can create these slots yourself, or by specifying a name other than the default in the advanced configuration.
        • -
        -
      • -
      • A publication. This represents the set of tables for which change events will be reported. -
          -
        • In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions.
        • -
        -
      • -
      • A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. -
          -
        • In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions.
        • -
        -
      • -
      -

      You'll also need a virtual machine to connect securely to the instance via SSH tunnelling (AlloyDB doesn't support IP allowlisting).

      -

      Setup

      -

      To meet the prerequisites, complete these steps.

      -
        -
      1. -

        Set the alloydb.logical_decoding flag to on to enable logical replication on your AlloyDB instance.

        -
      2. -
      3. -

        In your psql client, connect to your instance and issue the following commands to create a new user for the capture with appropriate permissions, -and set up the watermarks table and publication.

        -
      4. -
      -
      CREATE USER flow_capture WITH REPLICATION
      IN ROLE alloydbsuperuser LOGIN PASSWORD 'secret';
      GRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture;
      ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture;
      CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT);
      GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture;
      CREATE PUBLICATION flow_publication FOR ALL TABLES;
      -
        -
      1. Follow the instructions to create a virtual machine for SSH tunneling -in the same Google Cloud project as your instance.
      2. -
      -

      Backfills and performance considerations

      -

      When the a AlloyDB capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis.

      -

      This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. -However, you may find it appropriate to skip the backfill, especially for extremely large tables.

      -

      In this case, you may turn of backfilling on a per-table basis. See properties for details.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector.

      -

      Properties

      -

      Endpoint

      -

      The SSH config section is required for this connector. -You'll fill in the database address with a localhost IP address, -and specify your VM's IP address as the SSH address. -See the table below and the sample config.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressThe host or host:port at which the database can be reached.stringRequired
      /databaseDatabaseLogical database name to capture from.stringRequired, "postgres"
      /userUserThe database user to authenticate as.stringRequired, "flow_capture"
      /passwordPasswordPassword for the specified database user.stringRequired
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/backfill_chunk_sizeBackfill Chunk SizeThe number of rows which should be fetched from the database in a single backfill query.integer4096
      /advanced/publicationNamePublication NameThe name of the PostgreSQL publication to replicate from.string"flow_publication"
      /advanced/skip_backfillsSkip BackfillsA comma-separated list of fully-qualified table names which should not be backfilled.string
      /advanced/slotNameSlot NameThe name of the PostgreSQL replication slot to replicate from.string"flow_slot"
      /advanced/watermarksTableWatermarks TableThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.string"public.flow_watermarks"
      networkTunnelNetwork TunnelConnect to your system through an SSH server that acts as a bastion host for your network.Object
      networkTunnel/sshForwardingSSH ForwardingObject
      networkTunnel/sshForwarding/sshEndpointSSH EndpointEndpoint of the remote SSH server (in this case, your Google Cloud VM) that supports tunneling (in the form of ssh://user@address).String
      networkTunnel/sshForwarding/privateKeySSH Private KeyPrivate key to connect to the remote SSH server.String
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespaceNamespaceThe namespace/instance of the table.stringRequired
      /streamStreamTable name.stringRequired
      /syncModeSync modeConnection method. Always set to incremental.stringRequired
      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/source-alloydb:dev"
      config:
      address: "127.0.0.1:5432"
      database: "postgres"
      user: "flow_capture"
      password: "secret"
      networkTunnel:
      sshForwarding:
      sshEndpoint: ssh://sshUser@vm-ip-address
      privateKey: |2
      -----BEGIN RSA PRIVATE KEY-----
      MIICXAIBAAKBgQCJO7G6R+kv2MMS8Suw21sk2twHg8Vog0fjimEWJEwyAfFM/Toi
      EJ6r5RTaSvN++/+MPWUll7sUdOOBZr6ErLKLHEt7uXxusAzOjMxFKZpEARMcjwHY
      v/tN1A2OYU0qay1DOwknEE0i+/Bvf8lMS7VDjHmwRaBtRed/+iAQHf128QIDAQAB
      AoGAGoOUBP+byAjDN8esv1DCPU6jsDf/Tf//RbEYrOR6bDb/3fYW4zn+zgtGih5t
      CR268+dwwWCdXohu5DNrn8qV/Awk7hWp18mlcNyO0skT84zvippe+juQMK4hDQNi
      ywp8mDvKQwpOuzw6wNEitcGDuACx5U/1JEGGmuIRGx2ST5kCQQDsstfWDcYqbdhr
      5KemOPpu80OtBYzlgpN0iVP/6XW1e5FCRp2ofQKZYXVwu5txKIakjYRruUiiZTza
      QeXRPbp3AkEAlGx6wMe1l9UtAAlkgCFYbuxM+eRD4Gg5qLYFpKNsoINXTnlfDry5
      +1NkuyiQDjzOSPiLZ4Abpf+a+myjOuNL1wJBAOwkdM6aCVT1J9BkW5mrCLY+PgtV
      GT80KTY/d6091fBMKhxL5SheJ4SsRYVFtguL2eA7S5xJSpyxkadRzR0Wj3sCQAvA
      bxO2fE1SRqbbF4cBnOPjd9DNXwZ0miQejWHUwrQO0inXeExNaxhYKQCcnJNUAy1J
      6JfAT/AbxeSQF3iBKK8CQAt5r/LLEM1/8ekGOvBh8MAQpWBW771QzHUN84SiUd/q
      xR9mfItngPwYJ9d/pTO7u9ZUPHEoat8Ave4waB08DsI=
      -----END RSA PRIVATE KEY-----
      bindings:
      - resource:
      stream: ${TABLE_NAME}
      namespace: ${TABLE_NAMESPACE}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each table in the source database.

      -

      Learn more about capture definitions.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/index.html deleted file mode 100644 index 4d08f8ab84..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/index.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - -Alpaca | Estuary Flow - - - - - - - - - -

      Alpaca

      -

      This connector captures stock trade data from the Alpaca Market Data API into a Flow collection.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-alpaca:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Real-time and historical trade data

      -

      The Alpaca Market Data API comprises multiple APIs for stock trades, including -the Trades REST API for historical trade data -and websocket streaming via the Data API for real-time trade data.

      -

      Historical trade data is available from the Alpaca Market Data API starting 01-01-2016. As such, the -connector configuration requires a start date for the backfill to be on or after 01-01-2016.

      -

      This connector uses both APIs to capture historical and real-time data in parallel. -It uses the Trades API to perform a historical backfill starting from the start date you specify and stopping when it reaches the present. -At the same time, the connector uses websocket streaming to initiate a real-time stream of trade data starting at the present moment and continuing indefinitely until you stop the capture process.

      -

      As a result, you'll get data from a historical time period you specify, as well as the lowest-latency -possible updates of new trade data, but there will be some overlap in the two data streams. -See limitations to learn more about reconciling historical and real-time data.

      -

      Supported data resources

      -

      Alpaca supports over 8000 stocks and EFTs. You simply supply a list of symbols to Flow when you configure the connector. -To check whether Alpaca supports a symbol, you can use the Alpaca Broker API.

      -

      You can use this connector to capture data from up to 20 stock symbols into Flow collections in a single capture -(to add more than 20, set up multiple captures). -For a given capture, data from all symbols is captured to a single collection.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • -

        An Alpaca account.

        -
          -
        • To access complete stock data in real-time, you'll need the Unlimited plan. -To access a smaller sample of trade data with a 15-minute delay, you can use a Free plan, making sure to set Feed to iex and choose the Free Plan option when configuring the connector.
        • -
        -
      • -
      • -

        Your Alpaca API Key ID and Secret Key.

        -
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Alpaca source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/disable_backfillDisable Historical Data BackfillDisables historical data backfill via the historical data API. Data will only be collected via streaming.boolean
      /advanced/disable_real_timeDisable Real-Time StreamingDisables real-time streaming via the websocket API. Data will only be collected via the backfill mechanism.boolean
      /advanced/is_free_planFree PlanSet this if you are using a free plan. Delays data by 15 minutes.boolean
      /advanced/max_backfill_intervalMaximum Backfill IntervalThe largest time interval that will be requested for backfills. Using smaller intervals may be useful when tracking many symbols. Must be a valid Go duration string.string
      /advanced/min_backfill_intervalMinimum Backfill IntervalThe smallest time interval that will be requested for backfills after the initial backfill is complete. Must be a valid Go duration string.string
      /advanced/stop_dateStop DateStop backfilling historical data at this date.string
      /api_key_idAlpaca API Key IDYour Alpaca API key ID.stringRequired
      /api_secret_keyAlpaca API Secret KeyYour Alpaca API Secret key.stringRequired
      /feedFeedThe feed to pull market data from. Choose from iex or sip; set iex if using a free plan.stringRequired
      /start_dateStart DateGet trades starting at this date. Has no effect if changed after the capture has started. Must be no earlier than 2016-01-01T00:00:00Z.stringRequired
      /symbolsSymbolsComma separated list of symbols to monitor.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /nameNameUnique name for this binding. Cannot be changed once set.stringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/source-alpaca:dev"
      config:
      api_key_id: <SECRET>
      api_secret_key: <SECRET>
      feed: iex
      start_date: 2022-11-01T00:00:00Z
      symbols: AAPL,MSFT,AMZN,TSLA,GOOGL,GOOG,NVDA,BRK.B,META,UNH
      advanced:
      is_free_plan: true
      bindings:
      - resource:
      name: trades
      target: ${PREFIX}/${CAPTURE_NAME}/trades
      -

      Limitations

      -

      Capturing data for more than 20 symbols in a single capture could result in API errors.

      -

      If you need to capture data for more than 20 symbols, we recommend splitting them between two captures. -Support for a larger number of symbols in a single capture is planned for a future release.

      -

      Separate historical and real-time data streams will result in some duplicate trade documents.

      -

      As discussed above, the connector captures historical and real-time data in two different streams. -As the historical data stream catches up to the present, it will overlap with the beginning of the real-time data stream, resulting in some duplicated documents. -These will have identical properties from Alpaca, but different metadata from Flow.

      -

      There are several ways to resolve this:

      -
        -
      • -

        If you plan to materialize to an endpoint for which standard (non-delta) updates are supported, Flow will resolve the duplicates during the materialization process. -Unless otherwise specified in their documentation page, materialization connectors run in standard updates mode. -If a connector supports both modes, it will default to standard updates.

        -
      • -
      • -

        If you plan to materialize to an endpoint for which delta updates is the only option, -ensure that the endpoint system supports the equivalent of lastWriteWins reductions.

        -
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/index.html deleted file mode 100644 index f29bf70ac6..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/index.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - -Amazon Ads | Estuary Flow - - - - - - - - - -

      Amazon Ads

      -

      This connector captures data from Amazon Ads into Flow collections via the Amazon Ads API.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-amazon-ads:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      This connector uses OAuth2 to authenticate with Amazon. You can do this in the Flow web app, or configure manually if you're using the flowctl CLI.

      -

      Using OAuth2 to authenticate with Amazon in the Flow web app

      -

      You'll need an Amazon user account with access to the Amazon Ads account from which you wish to capture data.

      -

      You'll use these credentials to sign in.

      -

      Authenticating manually using the CLI

      -

      When you configure this connector manually, you provide the same credentials that OAuth2 would automatically -fetch if you used the web app. These are:

      -
        -
      • Client ID
      • -
      • Client secret
      • -
      • Refresh token
      • -
      -

      To obtain these credentials:

      -
        -
      1. -

        Complete the Amazon Ads API onboarding process.

        -
      2. -
      3. -

        Retrieve your client ID and client secret.

        -
      4. -
      5. -

        Retrieve a refresh token.

        -
      6. -
      -

      Selecting data region and profiles

      -

      When you configure the endpoint for this connector, you must choose an Amazon region from which to capture data. -Optionally, you may also select profiles from which to capture data.

      -

      The region must be one of:

      -
        -
      • NA (North America)
      • -
      • EU (European Union)
      • -
      • FE (Far East)
      • -
      -

      These represent the three URL endpoints provided by Amazon through which you can access the marketing API. -Each region encompasses multiple Amazon marketplaces, which are broken down by country. -See the Amazon docs for details.

      -

      If you run your Amazon ads in multiple marketplaces, you may have separate profiles for each. -If this is the case, you can specify the profiles from which you wish to capture data -by supplying their profile IDs. -Be sure to specify only profiles that correspond to marketplaces within the region you chose.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Amazon Ads source connector.

      -

      Properties

      -

      Endpoint

      -

      The properties in the table below reflect the manual authentication method. -If you're working in the Flow web app, you'll use OAuth2, -so many of these properties aren't required.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsobjectRequired
      /credentials/auth_typeAuth TypeSet to oauth2.0 for manual integration (in this method, you're re-creating the same credentials of the OAuth user interface, but doing so manually)string
      /credentials/client_idClient IDThe client ID of your Amazon Ads developer application.stringRequired
      /credentials/client_secretClient SecretThe client secret of your Amazon Ads developer application.stringRequired
      /credentials/refresh_tokenRefresh TokenAmazon Ads refresh token.stringRequired
      /profilesProfile IDs (Optional)Profile IDs you want to fetch data for.array
      /regionRegion *Region to pull data from (EU/NA/FE).string"NA"
      /report_generation_max_retriesReport Generation Maximum Retries *Maximum retries the connector will attempt for fetching report data.integer5
      /report_wait_timeoutReport Wait Timeout *Timeout duration in minutes for reports.integer60
      /start_dateStart Date (Optional)The start date for collecting reports, in YYYY-MM-DD format. This should not be more than 60 days in the past.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamAmazon Ads resource from which a collection is captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      This sample specification reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-amazon-ads:dev
      config:
      credentials:
      auth_type: oauth2.0
      client_id: amzn1.application-oa2-client.XXXXXXXXX
      client_secret: <secret>
      refresh_token: Atzr|XXXXXXXXXXXX
      region: NA
      report_generation_max_retries: 5
      report_wait_timeout: 60
      start_date: 2022-03-01

      bindings:
      - resource:
      stream: profiles
      syncMode: full_refresh
      target: ${PREFIX}/profiles
      {}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/index.html deleted file mode 100644 index 0788e58727..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/index.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - -Amazon DynamoDB | Estuary Flow - - - - - - - - - -

      Amazon DynamoDB

      -

      This connector uses DynamoDB streams to continuously capture updates from DynamoDB tables into one or more Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-dynamodb:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • -

        One or more DynamoDB tables with DynamoDB streams enabled. To enable DynamoDB streams for a table:

        -
          -
        1. Select the table in the AWS console
        2. -
        3. Go to the Exports and streams tab
        4. -
        5. Click Turn on in the DynamoDB stream details section
        6. -
        7. Select New and old images for the View type
        8. -
        9. Click Turn on stream
        10. -
        -
      • -
      • -

        An IAM user with the following permissions:

        -
          -
        • ListTables on all resources
        • -
        • DescribeTable on all resources
        • -
        • DescribeStream on all resources
        • -
        • Scan on all tables used
        • -
        • GetRecords on all streams used
        • -
        • GetShardIterator on all streams used
        • -
        -

        These permissions should be specified with the dynamodb: prefix in an IAM policy document. For more details and examples, see Using identity-based policies with Amazon DynamoDB in the Amazon docs.

        -
      • -
      • -

        The AWS access key and secret access key for the user. See the AWS blog for help finding these credentials.

        -
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the DynamoDB source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /awsAccessKeyIdAccess Key IDAWS Access Key ID for capturing from DynamoDB tables.stringRequired
      /awsSecretAccessKeySecret Access KeyAWS Secret Access Key for capturing from DynamoDB tables.stringRequired
      /regionAWS RegionThe name of the AWS region where the DynamoDB tables are located.stringRequired
      advanced/backfillSegmentsBackfill Table SegmentsNumber of segments to use for backfill table scans. Has no effect if changed after the backfill has started.integer
      advanced/endpointAWS EndpointThe AWS endpoint URI to connect to. Use if you're capturing from a compatible API that isn't provided by AWS.string
      advanced/scanLimitScan LimitLimit the number of items to evaluate for each table backfill scan request.integer
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTable NameThe name of the table to be captured.stringRequired
      /rcuAllocationRCU AllocationRead capacity units the capture will attempt to consume during the table backfill. Leave blank to automatically determine based on the provisioned capacity of the table.integer
      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-dynamodb:dev
      config:
      awsAccessKeyId: "example-aws-access-key-id"
      awsSecretAccessKey: "example-aws-secret-access-key"
      region: "us-east-1"
      bindings:
      - resource:
      table: ${TABLE_NAME}
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition may be more complex, with additional bindings for each DynamoDB table.

      -

      Learn more about capture definitions.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/index.html deleted file mode 100644 index dd19a2da22..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/index.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - -Amazon Kinesis | Estuary Flow - - - - - - - - - -

      Amazon Kinesis

      -

      This connector captures data from Amazon Kinesis streams.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-kinesis:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • -

        One or more Amazon Kinesis streams. For a given capture, all streams must:

        -
          -
        • Contain JSON data only
        • -
        • Be in the same AWS region
        • -
        -
      • -
      • -

        An IAM user with the following permissions:

        -
          -
        • ListShards on all resources
        • -
        • GetRecords on all streams used
        • -
        • GetShardIterator on all streams used
        • -
        • DescribeStream on all streams used
        • -
        • DescribeStreamSummary on all streams used
        • -
        -

        These permissions should be specified with the kinesis: prefix in an IAM policy document. -For more details and examples, see Controlling Access to Amazon Kinesis Data in the Amazon docs.

        -
      • -
      • -

        The AWS access key and secret access key for the user. -See the AWS blog for help finding these credentials.

        -
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Amazon Kinesis source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /awsAccessKeyIdAWS access key IDPart of the AWS credentials that will be used to connect to Kinesis.stringRequired, "example-aws-access-key-id"
      /awsSecretAccessKeyAWS secret access keyPart of the AWS credentials that will be used to connect to Kinesis.stringRequired, "example-aws-secret-access-key"
      /endpointAWS endpointThe AWS endpoint URI to connect to, useful if you're capturing from a kinesis-compatible API that isn't provided by AWS.string
      /regionAWS regionThe name of the AWS region where the Kinesis stream is located.stringRequired, "us-east-1"
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamStream name.stringRequired
      -

      Sample

      -

      A minimal capture definition will look like the following:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-kinesis:dev
      config:
      awsAccessKeyId: "example-aws-access-key-id"
      awsSecretAccessKey: "example-aws-secret-access-key"
      region: "us-east-1"
      bindings:
      - resource:
      stream: ${STREAM_NAME}
      target: ${PREFIX}/${COLLECTION_NAME}

      -

      Your capture definition will likely be more complex, with additional bindings for each Kinesis stream.

      -

      Learn more about capture definitions..

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/index.html deleted file mode 100644 index c27dc354a8..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - -Amazon Redshift | Estuary Flow - - - - - - - - - -

      Amazon Redshift

      -

      This connector captures data from your Amazon Redshift cluster into Flow collections.

      -

      ghcr.io/estuary/source-redshift:dev provides the latest connector image. You can access past image versions by following the link in your browser.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • Access credentials for connecting to your Amazon Redshift cluster.
      • -
      • Properly configured IAM roles for the necessary permissions.
      • -
      -

      Configuration

      -

      You can configure the Redshift source connector either through the Flow web app or by directly editing the Flow specification file. For more information on using this connector, see our guide on connectors. The values and specification sample below provide configuration details that are specific to the Amazon Redshift source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /hostHostHostname or IP address of your Redshift cluster.stringRequired
      /portPortPort number for the cluster.integerDefault
      /databaseDatabase NameName of the database to capture data from.stringRequired
      /userUserDatabase user with necessary permissions.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /schemasSchemasList of schemas to include.string
      /jdbc_paramsJDBC URL ParamsAdditional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTable NameName of the table to capture.stringRequired
      /cursor_fieldUser-defined CursorField for incremental syncs. Uses ascending values to ensure queries are sequential.string or integerRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-redshift:dev
      config:
      host: "example-redshift-cluster.us-east-2.redshift.amazonaws.com"
      port: 5439
      database: "sample_db"
      user: "sample_user"
      password: "sample_password"
      schemas: "public"
      jdbc_params: "key1=value1&key2=value2&key3=value3"
      bindings:
      - resource:
      table: users
      cursor_field: cursor
      target: ${PREFIX}/users
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/index.html deleted file mode 100644 index 5a61d3cb42..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/index.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - -Amazon S3 | Estuary Flow - - - - - - - - - -

      Amazon S3

      -

      This connector captures data from an Amazon S3 bucket.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-s3:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      You can use this connector to capture data from an entire S3 bucket or for a prefix within a bucket. -This bucket or prefix must be either be:

      -
        -
      • -

        Publicly accessible and allowing anonymous reads.

        -
      • -
      • -

        Accessible via a root or IAM user.

        -
      • -
      -

      In either case, you'll need an access policy. -Policies in AWS are JSON objects that define permissions. You attach them to resources, which include both IAM users and S3 buckets.

      -

      See the steps below to set up access.

      -

      Setup: Public buckets

      -

      For a public buckets, the bucket access policy must allow anonymous reads on the whole bucket or a specific prefix.

      -
        -
      1. Create a bucket policy using the templates below.
      2. -
      -
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "BucketAnonymousRead",
      "Effect": "Allow",
      "Principal": "*",
      "Action": [
      "s3:ListBucket"
      ],
      "Resource": [
      "arn:aws:s3:::EXAMPLE_BUCKET"
      ]
      },
      {
      "Effect": "Allow",
      "Principal": "*",
      "Action": [
      "s3:GetObject"
      ],
      "Resource": [
      "arn:aws:s3:::EXAMPLE_BUCKET/*"
      ]
      }
      ]
      }
      -
        -
      1. -

        Add the policy to your bucket. Paste over the existing policy and resolve any errors or warnings before saving.

        -
      2. -
      3. -

        Confirm that the Block public access setting on the bucket is disabled.

        -
      4. -
      -

      Setup: Accessing with a user account

      -

      For buckets accessed by a user account, you'll need the AWS access key and secret access key for the user. -You'll also need to apply an access policy to the user to grant access to the specific bucket or prefix.

      -
        -
      1. -

        Create an IAM user if you don't yet have one to use with Flow.

        -
      2. -
      3. -

        Note the user's access key and secret access key. -See the AWS blog for help finding these credentials.

        -
      4. -
      5. -

        Create an IAM policy using the templates below.

        -
      6. -
      -
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "UserAccessFullBucket",
      "Effect": "Allow",
      "Action": [
      "s3:ListBucket"
      ],
      "Resource": [
      "arn:aws:s3:::EXAMPLE_BUCKET"
      ]
      },
      {
      "Effect": "Allow",
      "Action": [
      "s3:GetObject"
      ],
      "Resource": [
      "arn:aws:s3:::EXAMPLE_BUCKET/*"
      ]
      }
      ]
      }
      -
        -
      1. -

        Add the policy to AWS.

        -
      2. -
      3. -

        Attach the policy to the IAM user.

        -
      4. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the S3 source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /advancedOptions for advanced users. You should not typically need to modify these.object
      /advanced/ascendingKeysAscending KeysImprove sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors.booleanfalse
      /advanced/endpointAWS EndpointThe AWS endpoint URI to connect to. Use if you're capturing from a S3-compatible API that isn't provided by AWSstring
      /awsAccessKeyIdAWS Access Key IDPart of the AWS credentials that will be used to connect to S3. Required unless the bucket is public and allows anonymous listings and reads.string
      /awsSecretAccessKeyAWS Secret Access KeyPart of the AWS credentials that will be used to connect to S3. Required unless the bucket is public and allows anonymous listings and reads.string
      /bucketBucketName of the S3 bucketstringRequired
      /matchKeysMatch KeysFilter applied to all object keys under the prefix. If provided, only objects whose absolute path matches this regex will be read. For example, you can use ".*\.json" to only capture json files.string
      /parserParser ConfigurationConfigures how files are parsed (optional, see below)object
      /parser/compressionCompressionDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.null, stringnull
      /parser/formatFormatDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.object{"type":"auto"}
      /parser/format/typeTypestring
      /prefixPrefixPrefix within the bucket to capture from. Use this to limit the data in your capture.string
      /regionAWS RegionThe name of the AWS region where the S3 bucket is located. "us-east-1" is a popular default you can try, if you're unsure what to put here.stringRequired, "us-east-1"
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamPrefixPath to dataset in the bucket, formatted as bucket-name/prefix-name.stringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-s3:dev
      config:
      bucket: "my-bucket"
      parser:
      compression: zip
      format:
      type: csv
      config:
      delimiter: ","
      encoding: UTF-8
      errorThreshold: 5
      headers: [ID, username, first_name, last_name]
      lineEnding: "\\r"
      quote: "\""
      region: "us-east-1"
      bindings:
      - resource:
      stream: my-bucket/${PREFIX}
      target: ${PREFIX}/${COLLECTION_NAME}

      -

      Your capture definition may be more complex, with additional bindings for different S3 prefixes within the same bucket.

      -

      Learn more about capture definitions.

      -

      Advanced: Parsing cloud storage data

      -

      Cloud storage platforms like S3 can support a wider variety of file types -than other data source systems. For each of these file types, Flow must parse -and translate data into collections with defined fields and JSON schemas.

      -

      By default, the parser will automatically detect the type and shape of the data in your bucket, -so you won't need to change the parser configuration for most captures.

      -

      However, the automatic detection may be incorrect in some cases. -To fix or prevent this, you can provide explicit information in the parser configuration, -which is part of the endpoint configuration for this connector.

      -

      The parser configuration includes:

      -
        -
      • -

        Compression: Specify how the bucket contents are compressed. -If no compression type is specified, the connector will try to determine the compression type automatically. -Options are:

        -
          -
        • zip
        • -
        • gzip
        • -
        • zstd
        • -
        • none
        • -
        -
      • -
      • -

        Format: Specify the data format, which determines how it will be parsed. -Options are:

        -
          -
        • Auto: If no format is specified, the connector will try to determine it automatically.
        • -
        • Avro
        • -
        • CSV
        • -
        • JSON
        • -
        • Protobuf
        • -
        • W3C Extended Log
        • -
        -
        info

        At this time, Flow only supports S3 captures with data of a single file type. -Support for multiple file types, which can be configured on a per-binding basis, -will be added in the future.

        For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type.

        -
      • -
      -

      CSV configuration

      -

      CSV files include several additional properties that are important to the parser. -In most cases, Flow is able to automatically determine the correct values, -but you may need to specify for unusual datasets. These properties are:

      -
        -
      • -

        Delimiter. Options are:

        -
          -
        • Comma (",")
        • -
        • Pipe ("|")
        • -
        • Space ("0x20")
        • -
        • Semicolon (";")
        • -
        • Tab ("0x09")
        • -
        • Vertical tab ("0x0B")
        • -
        • Unit separator ("0x1F")
        • -
        • SOH ("0x01")
        • -
        • Auto
        • -
        -
      • -
      • -

        Encoding type, specified by its WHATWG label.

        -
      • -
      • -

        Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture.

        -
      • -
      • -

        Escape characters. Options are:

        -
          -
        • Backslash ("\\")
        • -
        • Disable escapes ("")
        • -
        • Auto
        • -
        -
      • -
      • -

        Optionally, a list of column Headers, if not already included in the first row of the CSV file.

        -

        If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. -The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file.

        -
      • -
      • -

        Line ending values

        -
          -
        • CRLF ("\\r\\n") (Windows)
        • -
        • CR ("\\r")
        • -
        • LF ("\\n")
        • -
        • Record Separator ("0x1E")
        • -
        • Auto
        • -
        -
      • -
      • -

        Quote character

        -
          -
        • Double Quote ("\"")
        • -
        • Single Quote (")
        • -
        • Disable Quoting ("")
        • -
        • Auto
        • -
        -
      • -
      -

      The sample specification above includes these fields.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/index.html deleted file mode 100644 index 4a1a425be9..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - -Amazon SQS | Estuary Flow - - - - - - - - - -

      Amazon SQS

      -

      This connector captures data from Amazon Simple Queue Service (SQS) into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-amazon-sqs:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -
        -
      • AWS IAM Access Key
      • -
      • AWS IAM Secret Key
      • -
      • AWS SQS Queue
      • -
      -

      Setup

      -

      Follow these steps to set up the Amazon SQS connector:

      -
        -
      1. Create AWS IAM Keys
      2. -
      3. Create an SQS Queue
      4. -
      5. Enter a Primary Key and Cursor Field using the standard form editor. Note that these values currently have to be a string or timestamp.
      6. -
      -
      note

      If Delete Messages After Read is false, the IAM User only requires sqs:ReceiveMessage permission in the AWS IAM Policy. -If Delete Messages After Read is true, both sqs:ReceiveMessage and sqs:DeleteMessage permissions are needed in the AWS IAM Policy.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the AmazonSQS source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /queue_urlQueue URLURL of the SQS QueuestringRequired
      /regionAWS RegionAWS Region of the SQS QueuestringRequired
      /access_keyAWS IAM Access Key IDThe Access Key ID of the AWS IAM Role to use for pulling messagesstring
      /secret_keyAWS IAM Secret KeyThe Secret Key of the AWS IAM Role to use for pulling messagesstring
      /delete_messagesDelete Messages After ReadDelete messages from the SQS Queue after reading thembooleanRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Amazon SQS project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -
      {
      "properties": {
      "queue_url": {
      "order": 0
      },
      "region": {
      "order": 1
      },
      "access_key": {
      "order": 2
      },
      "secret_key": {
      "order": 3
      },
      "delete_messages": {
      "order": 4
      }
      }
      }
      -

      Performance Considerations

      -

      Consider the following performance aspects:

      -
        -
      • Max Batch Size: Set the maximum number of messages to consume in a single poll.
      • -
      • Max Wait Time: Define the maximum time (in seconds) to poll for messages before committing a batch.
      • -
      • Message Visibility Timeout: Determine how long a message should be hidden from other consumers after being read.
      • -
      -

      Data Loss Warning

      -

      When enabling Delete Messages After Read, messages are deleted from the SQS Queue after being read. However, there is no guarantee that the downstream destination has committed or persisted the message. Exercise caution before enabling this option to avoid permanent message loss.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/index.html deleted file mode 100644 index 053f557fa2..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - -Amplitude | Estuary Flow - - - - - - - - - -

      Amplitude

      -

      This connector captures data from Amplitude into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-amplitude:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Amplitude APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Amplitude source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /api_keyAPI KeyAmplitude API Key.stringRequired
      /secret_keySecret KeyAmplitude Secret Key.stringRequired
      /start_dateReplication Start DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Amplitude project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-amplitude:dev
      config:
      api_key: <secret>
      secret_key: <secret>
      start_date: 2022-06-18T00:00:00Z
      bindings:
      - resource:
      stream: cohorts
      syncMode: full_refresh
      target: ${PREFIX}/cohorts
      - resource:
      stream: annotations
      syncMode: full_refresh
      target: ${PREFIX}/annotations
      - resource:
      stream: events
      syncMode: incremental
      target: ${PREFIX}/events
      - resource:
      stream: active_users
      syncMode: incremental
      target: ${PREFIX}/activeusers
      - resource:
      stream: average_session_length
      syncMode: incremental
      target: ${PREFIX}/averagesessionlength
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/index.html deleted file mode 100644 index 88e57ea470..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - -Apache Kafka | Estuary Flow - - - - - - - - - -

      Apache Kafka

      -

      This connector captures streaming data from Apache Kafka topics.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-kafka:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported data types

      -

      This connector supports Kafka messages that contain JSON data. -Flow collections store data as JSON. -Before deploying this connector, you should modify schema(s) -of the Flow collection(s) you're creating to reflect the structure of your JSON Kafka messages.

      -

      At this time, the connector does not support other data types in Kafka messages.

      -
      Beta

      Support for Avro Kafka messages will be added soon. For more information, contact the Estuary team.

      -

      Prerequisites

      -
        -
      • A Kafka cluster with: -
          -
        • bootstrap.servers configured so that clients may connect via the desired host and port
        • -
        • An authentication mechanism of choice set up (highly recommended for production environments)
        • -
        • Connection security enabled with TLS (highly recommended for production environments)
        • -
        -
      • -
      -

      Authentication and connection security

      -

      Neither authentication nor connection security are enabled by default in your Kafka cluster, but both are important considerations. -Similarly, Flow's Kafka connectors do not strictly require authentication or connection security mechanisms. -You may choose to omit them for local development and testing; however, both are strongly encouraged for production environments.

      -

      A wide variety of authentication methods is available in Kafka clusters. -Flow supports SASL/SCRAM-SHA-256, SASL/SCRAM-SHA-512, and SASL/PLAIN. Behavior using other authentication methods is not guaranteed. -When authentication details are not provided, the client connection will attempt to use PLAINTEXT (insecure) protocol.

      -

      If you don't already have authentication enabled on your cluster, Estuary recommends either of listed SASL/SCRAM methods. -With SCRAM, you set up a username and password, making it analogous to the traditional authentication mechanisms -you use in other applications.

      -

      For connection security, Estuary recommends that you enable TLS encryption for your SASL mechanism of choice, -as well as all other components of your cluster. -Note that because TLS replaced now-deprecated SSL encryption, Kafka still uses the acronym "SSL" to refer to TLS encryption. -See Confluent's documentation for details.

      -
      Beta

      TLS encryption is currently the only supported connection security mechanism for this connector. -Other connection security methods may be enabled in the future.

      -

      AWS Managed Streaming Kafka (MSK)

      -

      If using AWS Managed Streaming for Apache Kafka (MSK), you can use IAM authentication with our connector. Read more about IAM authentication with MSK in AWS docs: IAM access control.

      -

      Additionally, you want to make sure that your VPC configuration allows inbound and outbound requests to Estuary Flow IP addresses.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Apache Kafka source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /bootstrap_serversBootstrap serversThe initial servers in the Kafka cluster to connect to, separated by commas. The Kafka client will be informed of the rest of the cluster nodes by connecting to one of these nodes.stringRequired
      /tlsTLSTLS connection settings.string"system_certificates"
      /credentialsCredentialsConnection details used to authenticate a client connection to Kafka via SASL.null, object
      /credentials/auth_typeAuthentication typeOne of UserPassword for SASL or AWS for IAM authenticationstring
      /credentials/mechanismSASL MechanismSASL mechanism describing how to exchange and authenticate client servers.string
      /credentials/passwordPasswordPassword, if applicable for the authentication mechanism chosen.string
      /credentials/usernameUsernameUsername, if applicable for the authentication mechanism chosen.string
      /credentials/aws_access_key_idAWS Access Key IDSupply if using auth_type: AWSstring
      /credentials/aws_secret_access_keyAWS Secret Access KeySupply if using auth_type: AWSstring
      /credentials/regionAWS RegionSupply if using auth_type: AWSstring
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamKafka topic name.stringRequired
      /syncModeSync modeConnection method. Always set to incrementalstringRequired
      -

      Sample

      -

      User and password authentication (SASL):

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-kafka:dev
      config:
      bootstrap_servers: localhost:9093
      tls: system_certificates
      credentials:
      auth_type: UserPassword
      mechanism: SCRAM-SHA-512
      username: bruce.wayne
      password: definitely-not-batman
      bindings:
      - resource:
      stream: ${TOPIC_NAME}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      AWS IAM authentication:

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-kafka:dev
      config:
      bootstrap_servers: localhost:9093
      tls: system_certificates
      credentials:
      auth_type: AWS
      aws_access_key_id: AK...
      aws_secret_access_key: secret
      region: us-east-1
      bindings:
      - resource:
      stream: ${TOPIC_NAME}
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your capture definition will likely be more complex, with additional bindings for each Kafka topic.

      -

      Learn more about capture definitions..

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/index.html deleted file mode 100644 index 8de5fa729b..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/index.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - -Azure Blob Storage | Estuary Flow - - - - - - - - - -

      Azure Blob Storage

      -

      This connector captures data from an Azure Blob Storage Account.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, [ghcr.io/estuary/source-azure-blob-storage:dev](https://ghcr.io/estuary/source-s3:dev) provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      You will need the following values to authenticate to Azure and an active subscription

      -
        -
      • Subscription ID
      • -
      • Client ID
      • -
      • Client Secret
      • -
      • Tenant ID
      • -
      -

      Setup a Microsoft Entra application

      -

      These values can be obtained from the portal, here's the instructions:

      -
        -
      • Get Subscription ID -
          -
        1. Login into your Azure account -
            -
          1. Select Subscriptions in the left sidebar
          2. -
          -
        2. -
        3. Select whichever subscription is needed
        4. -
        5. Click on Overview
        6. -
        7. Copy the Subscription ID
        8. -
        -
      • -
      • Get Client ID / Client Secret / Tenant ID -
          -
        1. Go to Azure Active Directory, then select App registrations.
        2. -
        3. Click New registration, fill out the required fields like Name and Supported account types.
        4. -
        5. Click Register to create the new app registration.
        6. -
        7. After registration, note down the Application (client) ID value.
        8. -
        9. Go to Certificates & secrets and click New client secret. Fill in a Description, choose a Secret value type and length, then click Add to save the secret. A pop-up will appear with your new client secret value; copy it immediately as you won't be able to view it again.
        10. -
        11. Go back to Overview page and copy the Directory (tenant) ID under Properties.
        12. -
        13. Your service principal is now created, and you have its Application (client) ID, Directory (tenant) ID, and a client secret key. Use these values when configuring your application or service to interact with Azure services that require authentication through AAD.
        14. -
        -
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Azure Blob Storage source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /advancedOptions for advanced users. You should not typically need to modify these.object
      /advanced/ascendingKeysAscending KeysImprove sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors.booleanfalse
      /credentialsCredentialsAzure credentials used to authenticate with Azure Blob Storage.object
      /credentials/storageAccountNameStorage Account NameThe name of the Azure Blob Storage account.stringRequired.
      /credentials/azureClientIDAzure Client IDThe client ID used to authenticate with Azure Blob Storage.stringRequired if using OAuth2
      /credentials/azureClientSecretAzure Client SecretThe client secret used to authenticate with Azure Blob Storage.stringRequired if using OAuth2
      /credentials/azureTenantIDAzure Tenant IDThe ID of the Azure tenant where the Azure Blob Storage account is located.stringRequired if using OAuth2
      /credentials/azureSubscriptionIDAzure Subscription IDThe ID of the Azure subscription that contains the Azure Blob Storage account.stringRequired if using OAuth2
      /credentials/ConnectionStringConnection StringThe connection string used to authenticate with Azure Blob Storage.stringRequired if using the Connection String authentication.
      /containerNameContainer NameThe name of the Azure Blob Storage container to read from.stringRequired.
      /matchKeysMatch KeysFilter applied to all object keys under the prefix. If provided, only objects whose absolute path matches this regex will be read. For example, you can use ".*\.json" to only capture json files.string
      -

      Bindings

      -
      PropertyTitleTitleTypeRequired/Default
      /streamContainerThe container namestringrequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/source-azure-blob-storage:dev"
      config:
      containerName: example
      credentials:
      azureClientID: e2889d31-aaaa-bbbb-cccc-85bb5a33d7a5
      azureClientSecret: just-a-secret
      azureSubscriptionID: f1a5bc81-aaaa-bbbb-cccc-b926c154ecc7
      azureTenantID: d494a2c6-aaaa-bbbb-cccc-ef1e5eaa64a6
      storageAccountName: example
      parser:
      compression: zip
      format:
      type: csv
      config:
      delimiter: ","
      encoding: UTF-8
      errorThreshold: 5
      headers: [ID, username, first_name, last_name]
      lineEnding: "\\r"
      quote: "\""
      bindings:
      - resource:
      stream: example
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Advanced: Parsing cloud storage data

      -

      Cloud storage platforms like Azure Blob Storage can support a wider variety of file types than other data source systems. For each of these file types, Flow must parse and translate data into collections with defined fields and JSON schemas.

      -

      By default, the parser will automatically detect the type and shape of the data in your bucket, so you won't need to change the parser configuration for most captures.

      -

      However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector.

      -

      The parser configuration includes:

      -
        -
      • -

        Compression: Specify how the bucket contents are compressed. -If no compression type is specified, the connector will try to determine the compression type automatically. -Options are:

        -
          -
        • zip
        • -
        • gzip
        • -
        • zstd
        • -
        • none
        • -
        -
      • -
      • -

        Format: Specify the data format, which determines how it will be parsed. -Options are:

        -
          -
        • Auto: If no format is specified, the connector will try to determine it automatically.
        • -
        • Avro
        • -
        • CSV
        • -
        • JSON
        • -
        • Protobuf
        • -
        • W3C Extended Log
        • -
        -
      • -
      • -

        info

        -

        At this time, Flow only supports S3 captures with data of a single file type. -Support for multiple file types, which can be configured on a per-binding basis, -will be added in the future.

        -

        For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type.

        -
      • -
      -

      CSV configuration

      -

      CSV files include several additional properties that are important to the parser. -In most cases, Flow is able to automatically determine the correct values, -but you may need to specify for unusual datasets. These properties are:

      -
        -
      • -

        Delimiter. Options are:

        -
          -
        • Comma (",")
        • -
        • Pipe ("|")
        • -
        • Space ("0x20")
        • -
        • Semicolon (";")
        • -
        • Tab ("0x09")
        • -
        • Vertical tab ("0x0B")
        • -
        • Unit separator ("0x1F")
        • -
        • SOH ("0x01")
        • -
        • Auto
        • -
        -
      • -
      • -

        Encoding type, specified by its WHATWG label.

        -
      • -
      • -

        Optionally, an Error threshold, as an acceptable -percentage of errors. If set to a number greater than zero, malformed -rows that fall within the threshold will be excluded from the capture.

        -
      • -
      • -

        Escape characters. Options are:

        -
          -
        • Backslash ("\\")
        • -
        • Disable escapes ("")
        • -
        • Auto
        • -
        -
      • -
      • -

        Optionally, a list of column Headers, if not already included in the first row of the CSV file.

        -

        If any headers are provided, it is assumed that the provided list of -headers is complete and authoritative. -The first row of your CSV file will be assumed to be data (not headers), -and you must provide a header value for every column in the file.

        -
      • -
      • -

        Line ending values

        -
          -
        • CRLF ("\\r\\n") (Windows)
        • -
        • CR ("\\r")
        • -
        • LF ("\\n")
        • -
        • Record Separator ("0x1E")
        • -
        • Auto
        • -
        -
      • -
      • -

        Quote character

        -
          -
        • Double Quote ("\"")
        • -
        • Single Quote (")
        • -
        • Disable Quoting ("")
        • -
        • Auto
        • -
        -
      • -
      -

      The sample specification above includes these fields.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/index.html deleted file mode 100644 index 961af9d32f..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/index.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - -BigQuery Batch Query Connector | Estuary Flow - - - - - - - - - -

      BigQuery Batch Query Connector

      -

      This connector captures data from BigQuery into Flow collections by periodically -executing queries and translating the results into JSON documents.

      -

      Prerequisites

      -

      To use this connector, you will need the following prerequisites:

      -
        -
      • A Google Cloud Project with BigQuery enabled
      • -
      • A Google Cloud Service Account with the "BigQuery User" and "BigQuery Data Viewer" roles in your GCP project
      • -
      • A Service Account Key to authenticate into your Service Account
      • -
      -

      See the setup guide for more information about how to create the required resources.

      -

      Setup

      -

      Follow the steps below to set up the BigQuery connector.

      -

      Service Account

      -

      To sync data from BigQuery, you need credentials for a Service Account with the "BigQuery User" and "BigQuery Data Viewer" roles. These roles grant the necessary permissions to run BigQuery jobs, discover tables within the dataset, and read the contents of those tables. It is recommended to create a dedicated Service Account to facilitate permission management and auditing. However, if you already have a Service Account with the correct permissions, you can use it.

      -

      Here's how to provision a suitable service account:

      -
        -
      1. Follow Google Cloud Platform's instructions for Creating a Service Account.
      2. -
      3. Note down the ID of the service account you just created. Service Account IDs typically follow the format <account-name>@<project-name>.iam.gserviceaccount.com.
      4. -
      5. Follow Google Cloud Platform's instructions for Granting IAM Roles to the new service account. The "principal" email address should be the ID of the service account you just created, and the roles granted should be "BigQuery User" and "BigQuery Data Viewer".
      6. -
      -

      Service Account Key

      -

      Service Account Keys are used to authenticate as Google Service Accounts. To be able to utilize the permissions granted to the Service Account in the previous step, you'll need to provide its Service Account Key when creating the capture. It is a good practice, though not required, to create a new key for Flow even if you're reusing a preexisting account.

      -

      To create a new key for a service account, follow Google Cloud Platform's instructions for Creating a Service Account Key. Be sure to create the key in JSON format. Once the linked instructions have been followed you should have a key file, which will need to be uploaded to Flow when setting up your capture.

      -

      Set up the BigQuery connector in Estuary Flow

      -
        -
      1. Log into your Estuary Flow account.
      2. -
      3. In the left navigation bar, click on "Sources". In the top-left corner, click "New Capture".
      4. -
      5. Locate and select the "BigQuery" connector.
      6. -
      7. Enter a name and optional description for the capture task.
      8. -
      9. Enter the Project ID and Dataset name that you intend to capture from, and paste or upload the service account key in the appropriate field.
      10. -
      11. Click the "Next" button and wait while the connector automatically discovers the available tables in the specified project and dataset.
      12. -
      13. Select the tables you wish to capture from the bindings list.
      14. -
      15. For each binding you selected, you will likely wish to specify cursor columns and a shorter "Poll Interval" setting. Otherwise the default behavior will be to recapture the entire contents of the table, once per day.
      16. -
      17. Once you are satisfied with your binding selection, click the "Save and Publish" button.
      18. -
      -

      Specifying Cursor Columns

      -

      This connector operates by periodically executing a SELECT * FROM table query and -outputting the resulting rows as JSON documents into a Flow collection. In some cases -doing this once or twice a day is entirely sufficient, but when working with larger -tables (or if a faster update rate is desired) it pays to manually configure cursor -columns.

      -

      The cursor must be a column (or ordered tuple of columns) which is expected to strictly -increase for newly added or updated rows. Common examples of suitable cursors include:

      -
        -
      • Update timestamps, which are often the best choice if available since they can -often be used to identify changed rows as well as new insertions.
      • -
      • Creation timestamps, which can be used to identify newly added rows in append-only -datasets but won't help to identify changes to preexisting rows.
      • -
      • Monotonically increasing IDs, which are another way of identifying newly added rows -but often don't help with update detection.
      • -
      -

      When a cursor is specified, the update query will take the form SELECT * FROM $table WHERE $cursorName > $lastCursorValue ORDER BY $cursorName -and the capture connector will keep track of the highest observed cursor value between polling intervals. -If multiple cursor columns are specified, they will be treated as an ordered tuple of columns which -collectively form the cursor, and the obvious lexicographic tuple ordering will apply.

      -

      Once you have specified a suitable cursor for a table, you will likely want to lower the -polling interval for that binding. The default polling interval is "24h" to keep data -volumes low, but once a cursor is specified there is usually no downside to frequent -polling, so you may wish to lower the interval to "5m" or even "5s" for that table.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the BigQuery source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /project_idProject IDThe GCP project ID for the project containing the source BigQuery datasetstringRequired
      /datasetDatasetThe BigQuery dataset to discover tables withinstringRequired
      /credentials_jsonCredentials JSONThe contents of your Service Account Key JSON filestringRequired
      /advanced/pollPoll IntervalHow often to poll bindings (may be overridden for a specific binding)string"24h"
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /nameNameA name which uniquely identifies this binding.stringRequired
      /cursorCursorThe column name(s) which should be used as the incremental capture cursorarray[]
      /templateTemplateThe query (template) which will be executed every polling intervalstringRequired
      /pollPoll IntervalOverride the global polling interval for this binding.string""
      -

      Query Templates

      -

      The query template property of a binding defines what query will be executed against -the database, given inputs describing the configured cursor columns and whether any prior -cursor state exists. The default template implements the behavior described in -specifying cursor columns.

      -

      In principle you are free to modify this template to implement whatever query you need. -You could for instance create a new binding which queries a view, or which performs a -more complex analytics query. However this should not be combined with table auto-discovery -in a single capture, as this can produce some counterintuitive results. Instead create two -separate capture tasks from the same database, one for autodiscovered tables and a separate -one with the setting "Automatically Add New Collections" disabled for your custom bindings.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/index.html deleted file mode 100644 index 7193107ead..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/index.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - -Bing Ads | Estuary Flow - - - - - - - - - -

      Bing Ads

      -

      This connector captures data from Bing Ads into Flow collections via the Bing Ads API.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-bing-ads:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      This connector uses OAuth2 to authenticate with Microsoft. You can do this in the Flow web app, or configure manually if you're using the flowctl CLI.

      -

      Using OAuth2 to authenticate with Microsoft in the Flow web app

      -

      You'll need:

      -
        -
      • -

        User credentials with access to the Bing Ads account.

        -
      • -
      • -

        A developer token associated with the user.

        -
      • -
      -

      Authenticating manually using the CLI

      -

      You'll need:

      -
        -
      • -

        A registered Bing Ads application with the following credentials retrieved:

        -
          -
        • -

          Client ID

          -
        • -
        • -

          Client Secret

          -
        • -
        • -

          Refresh Token

          -
        • -
        -
      • -
      -

      To set get these items, complete the following steps:

      -
        -
      1. -

        Register your Bing Ads Application in the Azure Portal.

        -
          -
        1. During setup, note the client_id and client_secret.
        2. -
        -
      2. -
      3. -

        Get a user access token.

        -
          -
        1. Redeem the user authorization code for OAuth tokens, and note the refresh_token.
        2. -
        -
      4. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Bing Ads source connector.

      -

      Properties

      -

      Endpoint

      -

      The properties in the table below reflect the manual authentication method. -If you're working in the Flow web app, you'll use OAuth2, -so many of these properties aren't required.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsCredentialsobjectRequired
      /credentials/auth_methodAuthentication methodSet to oauth2.0Stringoauth2.0
      /credentials/client_idClient IDThe Client ID of your Microsoft Advertising developer application.StringRequired
      /credentials/client_secretClient SecretThe Client Secret of your Microsoft Advertising developer application.StringRequired
      /credentials/refresh_tokenRefresh TokenRefresh Token to renew the expired Access Token.StringRequired
      /developer_tokenDeveloper TokenDeveloper token associated with user.StringRequired
      /reports_start_dateCredentialsThe start date from which to begin replicating report data. Any data generated before this date will not be replicated in reports. This is a UTC date in YYYY-MM-DD format.StringRequired, 2020-01-01
      /tenant_idCredentialsThe Tenant ID of your Microsoft Advertising developer application. Set this to common unless you know you need a different value.StringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamBing Ads resource from which a collection is captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      This sample specification reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-bing-ads:dev
      config:
      credentials:
      auth_type: oauth2.0
      client_id: 6731de76-14a6-49ae-97bc-6eba6914391e
      client_secret: <secret>
      refresh_token: <token>
      developer_token: <token>
      reports_start_date: 2020-01-01
      tenant_id: common

      bindings:
      - resource:
      stream: accounts
      syncMode: full_refresh
      target: ${PREFIX}/accounts
      {}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/index.html deleted file mode 100644 index 5883fa645d..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - -Braintree | Estuary Flow - - - - - - - - - -

      Braintree

      -

      This connector captures data from Braintree into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-braintree:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Braintree APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      To set up the Braintree source connector, you'll need Braintree's:

      -
        -
      1. Public Key
      2. -
      3. Environment
      4. -
      5. Merchant ID
      6. -
      7. Private Key
      8. -
      -

      We recommend creating a restricted, read-only key specifically for Estuary access. This will allow you to control which resources Estuary should be able to access.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Braintree source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /environmentEnvironmentEnvironment specifies where the data will come from.stringRequired
      /merchant_idMerchant IDThe unique identifier for your entire gateway account.stringRequired
      /private_keyPrivate KeyBraintree Private Key.stringRequired
      /public_keyPublic KeyBraintree Public Key.stringRequired
      /start_dateStart DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringDefault
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Braintree project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-braintree:dev
      config:
      environment: Development
      merchant_id: <id>
      private_key: <key>
      public_key: <key>
      start_date: 2017-01-25T00:00:00Z
      bindings:
      - resource:
      stream: customers
      syncMode: full_refresh
      target: ${PREFIX}/customers
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/index.html deleted file mode 100644 index 1cb24a9baf..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - -Braze | Estuary Flow - - - - - - - - - -

      Braze

      -

      This connector captures data from Braze into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-braze:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Braze APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      It is required to have an account on Braze to provide us with URL and Rest API Key during set up.

      -
        -
      • Rest API Key could be found on Braze Dashboard -> Developer Console tab -> API Settings -> Rest API Keys
      • -
      • URL could be found on Braze Dashboard -> Manage Settings -> Settings tab -> Your App name -> SDK Endpoint
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Braze source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /api_keyBraze REST API KeyBraze API Key.stringRequired
      /start_dateStart DateRows after this date will be synced.stringRequired
      /urlURLBraze REST API endpoint.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Braze project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-braze:dev
      config:
      api_key: <key>
      start_date: 2017-01-25T00:00:00Z
      url: <url>
      bindings:
      - resource:
      stream: events
      syncMode: full_refresh
      target: ${PREFIX}/events
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/index.html deleted file mode 100644 index 4ff8720b1b..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/index.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - -Chargebee | Estuary Flow - - - - - - - - - -

      Chargebee

      -

      This connector captures data from Chargebee into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-chargebee:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Chargebee APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Chargebee source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /site_api_keyAPI KeyChargebee API Key.stringRequired
      /siteSiteThe site prefix for your Chargebee instance.stringRequired
      /start_dateStart DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      /product_catalogProduct CatalogProduct Catalog version of your Chargebee site. Instructions on how to find your version you may find under 'API Version' section in the Chargebee docs.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Chargebee project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-chargebee:dev
      config:
      site_api_key: <secret>
      site: <your site>
      start_date: 2017-01-25T00:00:00Z
      product_catalog: <your product catalog>
      bindings:
      - resource:
      stream: items
      syncMode: full_refresh
      target: ${PREFIX}/items
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/index.html deleted file mode 100644 index 878ffdf310..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - -Confluence | Estuary Flow - - - - - - - - - -

      Confluence

      -

      This connector captures data from Confluence into Flow collections via the Confluence Cloud REST API.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-confluence:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      When you configure the connector, you specify your email, api and domain name

      -

      From your selection, the following data resources are captured:

      -

      resources

      - -

      Each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -
        -
      • Atlassian API Token
      • -
      • Your Confluence domain name
      • -
      • Your Confluence login email
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector.

      -
        -
      1. Create an API Token
      2. -
      - -
        -
      1. Set up the Confluence connector in Estuary Flow
      2. -
      -
        -
      • Log into Estuary Flow and click "Captures".
      • -
      • Select "Create Capture" search for and click on "Confluence"
      • -
      • Enter a Capture Name
      • -
      • In the "API Token" field, enter your Atlassian API Token
      • -
      • In the "Domain Name" field, enter your Confluence Domain name
      • -
      • In the "Email" field, enter your Confluence login email
      • -
      • Click "Save and Publish"
      • -
      -

      Sample

      -

      This sample specification reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-confluence:dev
      config:
      credentials:
      api_token: PAT Credentials
      domain_name: estuary1.atlassian.net
      email: dave@estuary.dev
      bindings:
      - resource:
      stream: audit
      syncMode: full_refresh
      target: ${PREFIX}/audit
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/index.html deleted file mode 100644 index 1f6542ab1d..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/index.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - -Datadog HTTP Ingest (Webhook) | Estuary Flow - - - - - - - - - -

      Datadog HTTP Ingest (Webhook)

      -

      The Datadog HTTP Ingest connector allows you to capture data from incoming HTTP requests from Datadog. -A common use case is to capture webhook deliveries, turning them into a Flow collection.

      -

      The connector is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-http-ingest:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Usage

      -

      This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific -system or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source.

      -

      This is useful primarily if you want to test out Flow or see how your webhook data will come over.

      -

      To begin, use the web app to create a capture. Once published, the confirmation dialog displays -a unique URL for your public endpoint.

      -

      You're now ready to send data to Flow.

      -

      Send sample data to Flow

      -
        -
      1. -

        After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture.

        -
      2. -
      3. -

        Expand POST or PUT and click Try it out to send some example JSON documents using the UI. You can also copy the provided curl commands to send data via the command line.

        -
      4. -
      5. -

        After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture. -Click Details to view the data preview.

        -
      6. -
      -

      Configure a Datadog webhook

      -
        -
      1. -

        In the Datadog Cloud Monitoring Platform, navigate to the Integrations tab and click on the Integrations option in the dropdown.

        -
      2. -
      3. -

        Using the search bar, search for the Webhook Integration and install it.

        -
      4. -
      5. -

        Within the Webhook Integration configuration, select new Webhook and enter in the following information:

        -
      6. -
      -
      FieldValueDescription
      Nameyour-webhookThe name of your webhook within Datadog
      URLhttps://your-unique-webhook-url/webhook-dataThe unique Estuary URL created for ingesting webhook data
      -
        -
      1. -

        In the Datadog Cloud Monitoring Platform, navigate to Monitors/New Monitor and select Metric for the type.

        -
      2. -
      3. -

        Define the alert conditions and under Notify your team select @your-webhook from the dropdown.

        -
      4. -
      -

      Webhook URLs

      -

      To determine the full URL, start with the base URL from the Flow web app (for example https://abc123-8080.us-central1.v1.estuary-data.dev), and then append the path.

      -

      The path will be whatever is in the paths endpoint configuration field (/webhook-data by default). For example, your full webhook URL would be https://<your-unique-hostname>/webhook-data. You can add additional paths to paths, and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you're editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to /my-webhook.json, then the full URL for that binding would be https://<your-unique-hostname>/my-webhook.json.

      -

      Any URL query parameters that are sent on the request will be captured and serialized under /_meta/query/* the in documents. For example, a webhook request that's sent to /webhook-data?testKey=testValue would result in a document like:

      -
      {
      "_meta": {
      "webhookId": "...",
      "query": {
      "testKey": "testValue"
      },
      ...
      }
      ...
      }
      -

      Authentication

      -

      The connector can optionally require each request to present an authentication token as part of an Authorization: Bearer HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an Authorization header with the value of your token. For example, if you use an auth token value of mySecretToken, then the header on each request must be Authorization: Bearer mySecretToken.

      -

      If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection. We recommend using authentication whenever possible.

      -

      Webhook signature verification

      -

      This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact support@estuary.dev and let us know.

      -

      Endpoint Configuration

      -
      PropertyTitleDescriptionTypeRequired/Default
      ****EndpointConfigobjectRequired
      /require_auth_tokenOptional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections.null, stringnull
      /pathsURL PathsList of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.null, stringnull
      -

      Resource configuration

      -
      PropertyTitleDescriptionTypeRequired/Default
      ****ResourceConfigobjectRequired
      /idFromHeaderSet the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`.null, string
      /pathThe URL path to use for adding documents to this binding. Defaults to the name of the collection.null, string
      /streamThe name of the binding, which is used as a merge key when doing Discovers.null, string
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/index.html deleted file mode 100644 index 2cf5be790d..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/index.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - -Dropbox | Estuary Flow - - - - - - - - - -

      Dropbox

      -

      This connector captures data from a Dropbox account into a Flow collection.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-dropbox:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported data types

      -

      This connector automatically captures the data within the specified Dropbox folder into a single Flow collection.

      -

      The following file types are supported:

      -
        -
      • Avro
      • -
      • CSV
      • -
      • JSON
      • -
      • Protobuf
      • -
      • W3C Extended Log
      • -
      -

      The following compression methods are supported:

      -
        -
      • ZIP
      • -
      • GZIP
      • -
      • ZSTD
      • -
      -

      By default, Flow automatically detects the file type and compression method. -If necessary, you can specify the correct file type, compression, and other properties (CSV only) using the optional parser configuration.

      -

      Prerequisites

      -

      To use this connector, make sure you have an active Dropbox account. Authentication is handled using OAuth2 in the Flow web app.

      -

      Note: This connector is designed for files located in a specific Dropbox folder.

      -

      Configuration

      -

      You configure the Dropbox source connector in the Flow web app. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Dropbox source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /pathPathThe path to the Dropbox folder to read from. For example, "/my_folder".stringRequired
      /matchKeysMatch KeysFilter applied to all object keys under the prefix. If provided, only objects whose absolute path matches this regex will be read. For example, you can use .*\.json to only capture JSON files.object
      /credentialsCredentialsOAuth2 credentials for Dropbox. These are automatically handled by the Web UI.objectRequired
      /advancedAdvancedOptions for advanced users. You should not typically need to modify these.object
      /advanced/ascendingKeysAscending KeysImprove sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors.booleanfalse
      /parserParser ConfigurationConfigures how files are parsed (optional, see below)object
      /parser/compressionCompressionDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.null, stringnull
      /parser/formatFormatDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.object{"type":"auto"}
      /parser/format/typeTypestring
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamPathThe path to the Dropbox folder.stringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-http-file:dev
      config:
      path: "/my_folder"
      matchKeys: ".*\.json"
      bindings:
      - resource:
      stream: /my_folder
      target: ${PREFIX}/${COLLECTION_NAME}

      -

      Advanced: Parsing Dropbox files

      -

      Dropbox folders can contain a variety of file types. -For each file type, Flow must parse -and translate data into collections with defined fields and JSON schemas.

      -

      By default, the parser will automatically detect the type and shape of the data in the Dropbox folder, -so you won't need to change the parser configuration for most captures.

      -

      However, the automatic detection may be incorrect in some cases. -To fix or prevent this, you can provide explicit information in the parser configuration, -which is part of the endpoint configuration for this connector.

      -

      The parser configuration includes:

      -
        -
      • -

        Compression: Specify how the data is compressed. -If no compression type is specified, the connector will try to determine the compression type automatically. -Options are:

        -
          -
        • zip
        • -
        • gzip
        • -
        • zstd
        • -
        • none
        • -
        -
      • -
      • -

        Format: Specify the data format, which determines how it will be parsed. -If no file type is specified, the connector will try to determine the file type automatically -Options are:

        -
          -
        • Avro
        • -
        • CSV
        • -
        • JSON
        • -
        • Protobuf
        • -
        • W3C Extended Log
        • -
        -
      • -
      -

      CSV configuration

      -

      CSV files include several additional properties that are important to the parser. -In most cases, Flow is able to automatically determine the correct values, -but you may need to specify for unusual datasets. These properties are:

      -
        -
      • -

        Delimiter. Options are:

        -
          -
        • Comma (",")
        • -
        • Pipe ("|")
        • -
        • Space ("0x20")
        • -
        • Semicolon (";")
        • -
        • Tab ("0x09")
        • -
        • Vertical tab ("0x0B")
        • -
        • Unit separator ("0x1F")
        • -
        • SOH ("0x01")
        • -
        • Auto
        • -
        -
      • -
      • -

        Encoding type, specified by its WHATWG label.

        -
      • -
      • -

        Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture.

        -
      • -
      • -

        Escape characters. Options are:

        -
          -
        • Backslash ("\\")
        • -
        • Disable escapes ("")
        • -
        • Auto
        • -
        -
      • -
      • -

        Optionally, a list of column Headers, if not already included in the first row of the CSV file.

        -

        If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. -The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file.

        -
      • -
      • -

        Line ending values

        -
          -
        • CRLF ("\\r\\n") (Windows)
        • -
        • CR ("\\r")
        • -
        • LF ("\\n")
        • -
        • Record Separator ("0x1E")
        • -
        • Auto
        • -
        -
      • -
      • -

        Quote character

        -
          -
        • Double Quote ("\"")
        • -
        • Single Quote (")
        • -
        • Disable Quoting ("")
        • -
        • Auto
        • -
        -
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/index.html deleted file mode 100644 index 812ce345a7..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/index.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - -Exchange Rates API | Estuary Flow - - - - - - - - - -

      Exchange Rates API

      -

      This connector captures data from the Exchange Rates API. -It creates a Flow collection with daily exchange rate data for a variety of supported currencies. -This simple connector is useful for educational and demonstration purposes.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-exchange-rates:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions differ.

      -

      Prerequisites

      -
        -
      • An API key generated through an Exchange Rate API account. -After you sign up, your API key can be found on your account page. -
          -
        • You may use the free account, but note that you'll be limited to the default base currency, EUR.
        • -
        -
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Exchange Rates source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /access_keyAccess keyYour API access key. The key is case sensitive.stringRequired
      /baseBase currencyISO reference currency. See the documentation. Free plan doesn't support Source Currency Switching, default base currency is EURstringEUR
      /ignore_weekendsIgnore weekendsIgnore weekends? (Exchanges don't run on weekends)booleantrue
      /start_dateStart dateThe date in the format YYYY-MM-DD. Data will begin from this date.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamData stream from which Flow captures data. Always set to exchange_rates.stringRequired
      /syncModeSync modeConnection method. Always set to incremental.stringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-exchange-rates:dev
      config:
      base: EUR
      access_key: <secret>
      start_date: 2022-01-01
      ignore_weekends: true
      bindings:
      - resource:
      stream: exchange_rates
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      This capture definition should only have one binding, as exchange_rates is the only available data stream.

      -

      Learn more about capture definitions.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/index.html deleted file mode 100644 index 96deffca17..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/index.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - -Facebook Marketing | Estuary Flow - - - - - - - - - -

      Facebook Marketing

      -

      This connector captures data from the Facebook Marketing API into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-facebook-marketing:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported:

      - -

      By default, each resource associated with your Facebook Business account is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      There are two ways to authenticate with Facebook when capturing data into Flow: signing in with OAuth2, and manually supplying an access token. -Their prerequisites differ.

      -

      OAuth is recommended for simplicity in the Flow web app; -the manual method is the only supported method using the command line.

      -

      Signing in with OAuth2

      -

      To use OAuth2 in the Flow web app, you'll need A Facebook Business account and its Ad Account ID.

      -

      Configuring manually with an access token

      -

      To configure manually with an access token, you'll need:

      -
        -
      • A Facebook Business account, and its Ad Account ID.
      • -
      • A Facebook app with: -
          -
        • The Marketing API enabled.
        • -
        • A Marketing API access token generated.
        • -
        • Access upgrade from Standard Access (the default) to Advanced Access. This allows a sufficient rate limit to support the connector.
        • -
        -
      • -
      -

      Follow the steps below to meet these requirements.

      -

      Setup

      -
        -
      1. -

        Find your Facebook Ad Account ID.

        -
      2. -
      3. -

        In Meta for Developers, create a new app of the type Business.

        -
      4. -
      5. -

        On your new app's dashboard, click the button to set up the Marketing API.

        -
      6. -
      7. -

        On the Marketing API Tools tab, generate a Marketing API access token with all available permissions (ads_management, ads_read, read_insights, and business_management).

        -
      8. -
      9. -

        Request Advanced Access for your app. Specifically request the Advanced Access to the following:

        -
          -
        • -

          The feature Ads Management Standard Access

          -
        • -
        • -

          The permission ads_read

          -
        • -
        • -

          The permission ads_management

          -
        • -
        -

        Once your request is approved, you'll have a high enough rate limit to proceed with running the connector.

        -
      10. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Facebook Marketing source connector.

      -

      Properties

      -

      Endpoint

      -

      By default, this connector captures all data associated with your Business Ad Account.

      -

      You can refine the data you capture from Facebook Marketing using the optional Custom Insights configuration. -You're able to specify certain fields to capture and apply data breakdowns. -Breakdowns are a feature of the Facebook Marketing Insights API that allows you to group API output by common metrics. -Action breakdowns -are a subset of breakdowns that must be specified separately.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /access_tokenAccess TokenThe value of the access token generated.stringRequired
      /account_idAccount IDThe Facebook Ad account ID to use when pulling data from the Facebook Marketing API.stringRequired for manual authentication only
      /custom_insightsCustom InsightsA list which contains insights entries. Each entry must have a name and can contains fields, breakdowns or action_breakdownsarray
      /custom_insights/-/action_breakdownsAction BreakdownsA list of chosen action_breakdowns to applyarray[]
      /custom_insights/-/action_breakdowns/-ValidActionBreakdownsGeneric enumeration. Derive from this class to define new enumerations.string
      /custom_insights/-/breakdownsBreakdownsA list of chosen breakdowns to applyarray[]
      /custom_insights/-/breakdowns/-ValidBreakdownsGeneric enumeration. Derive from this class to define new enumerations.string
      /custom_insights/-/end_dateEnd DateThe date until which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this date will be replicated. Not setting this option will result in always syncing the latest data.string
      /custom_insights/-/fieldsFieldsA list of chosen fields to capturearray[]
      /custom_insights/-/fields/-ValidEnumsGeneric enumeration. Derive from this class to define new enumerations.string
      /custom_insights/-/nameNameThe name of the insightstring
      /custom_insights/-/start_dateStart DateThe date from which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z.string
      /custom_insights/-/time_incrementTime IncrementTime window in days by which to aggregate statistics. The sync will be chunked into N day intervals, where N is the number of days you specified. For example, if you set this value to 7, then all statistics will be reported as 7-day aggregates by starting from the start_date. If the start and end dates are October 1st and October 30th, then the connector will output 5 records: 01 - 06, 07 - 13, 14 - 20, 21 - 27, and 28 - 30 (3 days only).integer1
      /end_dateEnd DateThe date until which you'd like to capture data, in the format YYYY-MM-DDT00:00:00Z. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the latest data.string
      /fetch_thumbnail_imagesFetch Thumbnail ImagesIn each Ad Creative, fetch the thumbnail_url and store the result in thumbnail_data_urlbooleanfalse
      /include_deletedInclude DeletedInclude data from deleted Campaigns, Ads, and AdSetsbooleanfalse
      /insights_lookback_windowInsights Lookback WindowThe attribution windowinteger28
      /max_batch_sizeMaximum size of Batched RequestsMaximum batch size used when sending batch requests to Facebook API. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.integer50
      /page_sizePage Size of RequestsPage size used when sending requests to Facebook API to specify number of records per page when response has pagination. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.integer25
      /start_dateStart DateThe date from which you'd like to begin capturing data, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Facebook Marketing account from which collections are captured.stringRequired
      /syncModeSync modeConnection method.stringRequired
      -

      Sample

      -

      This sample specification reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-facebook-marketing:dev
      config:
      access_token: <secret>
      account_id: 000000000000000
      start_date: 2022-03-01T00:00:00Z
      custom_insights:
      - name: my-custom-insight
      fields: [ad_id, account_currency]
      breakdowns: [device_platform]
      action_breakdowns: [action_type]
      start_date: 2022-03-01T00:00:00Z
      bindings:
      - resource:
      stream: ad_account
      syncMode: incremental
      target: ${PREFIX}/ad_account
      - resource:
      stream: ad_sets
      syncMode: incremental
      target: ${PREFIX}/ad_sets
      - resource:
      stream: ads_insights
      syncMode: incremental
      target: ${PREFIX}/ads_insights
      - resource:
      stream: ads_insights_age_and_gender
      syncMode: incremental
      target: ${PREFIX}/ads_insights_age_and_gender
      - resource:
      stream: ads_insights_country
      syncMode: incremental
      target: ${PREFIX}/ads_insights_country
      - resource:
      stream: ads_insights_region
      syncMode: incremental
      target: ${PREFIX}/ads_insights_region
      - resource:
      stream: ads_insights_dma
      syncMode: incremental
      target: ${PREFIX}/ads_insights_dma
      - resource:
      stream: ads_insights_platform_and_device
      syncMode: incremental
      target: ${PREFIX}/ads_insights_platform_and_device
      - resource:
      stream: ads_insights_action_type
      syncMode: incremental
      target: ${PREFIX}/ads_insights_action_type
      - resource:
      stream: campaigns
      syncMode: incremental
      target: ${PREFIX}/campaigns
      - resource:
      stream: activities
      syncMode: incremental
      target: ${PREFIX}/activities
      - resource:
      stream: ads
      syncMode: incremental
      target: ${PREFIX}/ads
      - resource:
      stream: ad_creatives
      syncMode: full_refresh
      target: ${PREFIX}/ad_creatives
      -

      Learn more about capture definitions.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/index.html deleted file mode 100644 index 676d860c06..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/index.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - -Freshdesk | Estuary Flow - - - - - - - - - -

      Freshdesk

      -

      This connector captures Freshdesk data into Flow collections via the Freshdesk API.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-freshdesk:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Freshdesk source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /api_keyAPI KeyFreshdesk API Key.stringRequired
      /domainDomainFreshdesk domainstringRequired
      /requests_per_minuteRequests per minuteThe number of requests per minute that this source is allowed to use. There is a rate limit of 50 requests per minute per app per account.integer
      /start_dateStart DateUTC date and time. Any data created after this date will be replicated. If this parameter is not set, all data will be replicated.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource from the Freshdesk API from which a collection is captured.stringRequired
      /syncModeSync modeConnection method.stringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-freshdesk:dev
      config:
      api_key: xxxxxxxxxxxxxxxx
      domain: acmesupport.freshdesk.com
      bindings:
      - resource:
      stream: agents
      syncMode: incremental
      target: ${PREFIX}/agents
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/index.html deleted file mode 100644 index 1eddb2512c..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/index.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - -Google Cloud Storage | Estuary Flow - - - - - - - - - -

      Google Cloud Storage

      -

      This connector captures data from a Google Cloud Storage (GCS) bucket.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-gcs:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, either your GCS bucket must be public, or you must have access via a Google service account.

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the GCS source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /advancedOptions for advanced users. You should not typically need to modify these.object
      /advanced/ascendingKeysAscending KeysImprove sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors.booleanfalse
      /bucketBucketName of the Google Cloud Storage bucketstringRequired
      /googleCredentialsGoogle Service AccountService account JSON key to use as Application Default Credentialsstring
      /matchKeysMatch KeysFilter applied to all object keys under the prefix. If provided, only objects whose key (relative to the prefix) matches this regex will be read. For example, you can use ".*\.json" to only capture json files.string
      /parserParser ConfigurationConfigures how files are parsedobject
      /parser/compressionCompressionDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.null, stringnull
      /parser/formatFormatDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.object{"type":"auto"}
      /parser/format/typeTypestring
      /prefixPrefixPrefix within the bucket to capture from. Use this to limit the data in your capture.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamPrefixPath to dataset in the bucket, formatted as bucket-name/prefix-namestringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-gcs:dev
      config:
      bucket: my-bucket
      googleCredentials:
      "type": "service_account",
      "project_id": "project-id",
      "private_key_id": "key-id",
      "private_key": "-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n",
      "client_email": "service-account-email",
      "client_id": "client-id",
      "auth_uri": "https://accounts.google.com/o/oauth2/auth",
      "token_uri": "https://accounts.google.com/o/oauth2/token",
      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
      "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email"
      parser:
      compression: zip
      format:
      type: csv
      config:
      delimiter: ","
      encoding: UTF-8
      errorThreshold: 5
      headers: [ID, username, first_name, last_name]
      lineEnding: "\\r"
      quote: "\""
      bindings:
      - resource:
      stream: my-bucket/${PREFIX}
      target: ${PREFIX}/${COLLECTION_NAME}

      -

      Your capture definition may be more complex, with additional bindings for different GCS prefixes within the same bucket.

      -

      Learn more about capture definitions.

      -

      Advanced: Parsing cloud storage data

      -

      Cloud storage platforms like GCS can support a wider variety of file types -than other data source systems. For each of these file types, Flow must parse -and translate data into collections with defined fields and JSON schemas.

      -

      By default, the parser will automatically detect the type and shape of the data in your bucket, -so you won't need to change the parser configuration for most captures.

      -

      However, the automatic detection may be incorrect in some cases. -To fix or prevent this, you can provide explicit information in the parser configuration, -which is part of the endpoint configuration for this connector.

      -

      The parser configuration includes:

      -
        -
      • -

        Compression: Specify how the bucket contents are compressed. -If no compression type is specified, the connector will try to determine the compression type automatically. -Options are:

        -
          -
        • zip
        • -
        • gzip
        • -
        • zstd
        • -
        • none
        • -
        -
      • -
      • -

        Format: Specify the data format, which determines how it will be parsed. -Options are:

        -
          -
        • Auto: If no format is specified, the connector will try to determine it automatically.
        • -
        • Avro
        • -
        • CSV
        • -
        • JSON
        • -
        • Protobuf
        • -
        • W3C Extended Log
        • -
        -
        info

        At this time, Flow only supports GCS captures with data of a single file type. -Support for multiple file types, which can be configured on a per-binding basis, -will be added in the future.

        For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type.

        -
      • -
      -

      CSV configuration

      -

      CSV files include several additional properties that are important to the parser. -In most cases, Flow is able to automatically determine the correct values, -but you may need to specify for unusual datasets. These properties are:

      -
        -
      • -

        Delimiter. Options are:

        -
          -
        • Comma (",")
        • -
        • Pipe ("|")
        • -
        • Space ("0x20")
        • -
        • Semicolon (";")
        • -
        • Tab ("0x09")
        • -
        • Vertical tab ("0x0B")
        • -
        • Unit separator ("0x1F")
        • -
        • SOH ("0x01")
        • -
        • Auto
        • -
        -
      • -
      • -

        Encoding type, specified by its WHATWG label.

        -
      • -
      • -

        Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture.

        -
      • -
      • -

        Escape characters. Options are:

        -
          -
        • Backslash ("\\")
        • -
        • Disable escapes ("")
        • -
        • Auto
        • -
        -
      • -
      • -

        Optionally, a list of column Headers, if not already included in the first row of the CSV file.

        -

        If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. -The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file.

        -
      • -
      • -

        Line ending values

        -
          -
        • CRLF ("\\r\\n") (Windows)
        • -
        • CR ("\\r")
        • -
        • LF ("\\n")
        • -
        • Record Separator ("0x1E")
        • -
        • Auto
        • -
        -
      • -
      • -

        Quote character

        -
          -
        • Double Quote ("\"")
        • -
        • Single Quote (")
        • -
        • Disable Quoting ("")
        • -
        • Auto
        • -
        -
      • -
      -

      The sample specification above includes these fields.

      -

      Advanced: Configure Google service account impersonation

      -

      As part of your Google IAM management, you may have configured one service account to impersonate another service account. -You may find this useful when you want to easily control access to multiple service accounts with only one set of keys.

      -

      If necessary, you can configure this authorization model for a GCS capture in Flow using the GitOps workflow. -To do so, you'll enable sops encryption and impersonate the target account with JSON credentials.

      -

      Before you begin, make sure you're familiar with how to encrypt credentials in Flow using sops.

      -

      Use the following sample as a guide to add the credentials JSON to the capture's endpoint configuration. -The sample uses the encrypted suffix feature of sops to encrypt only the sensitive credentials, but you may choose to encrypt the entire configuration.

      -
      config:
      bucket: <bucket-name>
      googleCredentials_sops:
      # URL containing the account to impersonate and the associated project
      service_account_impersonation_url: https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<target-account>@<project>.iam.gserviceaccount.com:generateAccessToken
      # Credentials for the account that has been configured to impersonate the target.
      source_credentials:
      # In addition to the listed fields, copy and paste the rest of your JSON key file as your normally would
      # for the `googleCredentials` field
      client_email: <origin-account>@<anotherproject>.iam.gserviceaccount.com
      token_uri: https://oauth2.googleapis.com/token
      type: service_account
      type: impersonated_service_account
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/index.html deleted file mode 100644 index 478256f07f..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/index.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - -GitHub | Estuary Flow - - - - - - - - - -

      GitHub

      -

      This connector captures data from GitHub repositories and organizations into Flow collections via GitHub's REST API.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-github:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      When you configure the connector, you specify a list of GitHub organizations and/or repositories -from which to capture data.

      -

      From your selection, the following data resources are captured:

      -
      Full refresh (batch) resourcesIncremental (real-time supported) resources
      AssigneesComments
      BranchesCommit comment reactions
      CollaboratorsCommit comments
      Issue labelsCommits
      Pull request commitsDeployments
      TagsEvents
      Team membersIssue comment reactions
      Team membershipsIssue events
      TeamsIssue milestones
      UsersIssue reactions
      Issues
      Project cards
      Project columns
      Projects
      Pull request comment reactions
      Pull request stats
      Pull requests
      Releases
      Repositories
      Review comments
      Reviews
      Stargazers
      Workflow runs
      Workflows
      -

      Each resource is mapped to a Flow collection through a separate binding.

      -
      info

      The /start_date field is not applicable to the following resources:

        -
      • Assignees
      • -
      • Branches
      • -
      • Collaborators
      • -
      • Issue labels
      • -
      • Organizations
      • -
      • Pull request commits
      • -
      • Pull request stats
      • -
      • Repositories
      • -
      • Tags
      • -
      • Teams
      • -
      • Users
      • -
      -

      Prerequisites

      -

      There are two ways to authenticate with GitHub when capturing data into Flow: using OAuth2, and manually, by generating a personal access token. -Their prerequisites differ.

      -

      OAuth is recommended for simplicity in the Flow web app; -the access token method is the only supported method using the command line. Which authentication method you choose depends on the policies of your organization. Github has special organization settings that need to be enabled in order for users to be able to access repos that are part of an organization.

      -

      Using OAuth2 to authenticate with GitHub in the Flow web app

      -
        -
      • -

        A GitHub user account with access to the repositories of interest, and which is a member of organizations of interest.

        -
      • -
      • -

        User may need to request access in Github under the user's personal settings (not the organization settings) by going to Applications then Authorized OAuth Apps on Github. Click the app or the image next to the app and request access under "Organization access". After a user has made the request, the organization administrator can grant access on the "Third-party application access policy" page. See additional details on this Github doc.

        -
      • -
      -

      Configuring the connector specification manually using personal access token

      -
        -
      • -

        A GitHub user account with access to the repositories of interest, and which is a member of organizations of interest.

        -
      • -
      • -

        A GitHub personal access token. -You may use multiple tokens to balance the load on your API quota.

        -
      • -
      • -

        User may need to get the organization's administrator to grant access under "Third-party Access" then "Personal access tokens".

        -
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector.

      -

      Properties

      -

      Endpoint

      -

      The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so some of these properties aren't required.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /branchBranch (Optional)Space-delimited list of GitHub repository branches to pull commits for, e.g. `estuary/flow/your-branch`. If no branches are specified for a repository, the default branch will be pulled.string
      /credentialsAuthenticationChoose how to authenticate to GitHubobjectRequired
      /credentials/option_titleAuthentication methodSet to PAT Credentials for manual authenticationstring
      /credentials/personal_access_tokenAccess tokenPersonal access token, used for manual authentication. You may include multiple access tokens as a comma separated list.
      /page_size_for_large_streamsPage size for large streams (Optional)The Github connector captures from several resources with a large amount of data. The page size of such resources depends on the size of your repository. We recommended that you specify values between 10 and 30.integer10
      /repositoryGitHub RepositoriesSpace-delimited list of GitHub organizations/repositories, e.g. `estuary/flow` for a single repository, `estuary/*` to get all repositories from an organization and `estuary/flow estuary/another-repo` for multiple repositories.stringRequired
      /start_dateStart dateThe date from which you'd like to replicate data from GitHub in the format YYYY-MM-DDT00:00:00Z. For the resources that support this configuration, only data generated on or after the start date will be replicated. This field doesn't apply to all resources.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamGitHub resource from which collection is captured.stringRequired
      /syncModeSync modeConnection method.stringRequired
      -

      Sample

      -

      This sample specification reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-github:dev
      config:
      credentials:
      option_title: PAT Credentials
      personal_access_token: {secret}
      page_size_for_large_streams: 10
      repository: estuary/flow
      start_date: 2022-01-01T00:00:00Z
      bindings:
      - resource:
      stream: assignees
      syncMode: full_refresh
      target: ${PREFIX}/assignees
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/index.html deleted file mode 100644 index 935ede6510..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/index.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - -GitLab | Estuary Flow - - - - - - - - - -

      GitLab

      -

      This connector captures data from GitLab repositories and organizations into Flow collections via GitLabs's API V4. It can also work with self-hosted GitLab.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-gitlab:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      When you configure the connector, you may a list of GitLab Groups or Projects from which to capture data.

      -

      From your selection, the following data resources are captured:

      -

      Resources

      - -

      Each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      There are two ways to authenticate with GitLab when capturing data into Flow: using OAuth2, and manually, by generating a personal access token. -Their prerequisites differ.

      -

      OAuth is recommended for simplicity in the Flow web app; -the access token method is the only supported method using the command line. Which authentication method you choose depends on the policies of your organization. Github has special organization settings that need to be enabled in order for users to be able to access repos that are part of an organization.

      -

      Using OAuth2 to authenticate with GitLab in the Flow web app

      -
        -
      • A GitLab user account with access to the repositories of interest, and which is a member of organizations of interest. How to add a member.
      • -
      -

      Configuring the connector specification manually using personal access token

      -
        -
      • -

        A GitLab user account with access to all entities of interest.

        -
      • -
      • -

        A GitLab personal access token).

        -
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector.

      -

      Setup

      -
        -
      1. Complete authentication using Oauth or a PAT
      2. -
      3. Select your start date in the format 2023-08-31T00:00:00
      4. -
      5. Optionally select Groups and Projects
      6. -
      -

      Sample

      -

      This sample specification reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-gitlab:dev
      config:
      credentials:
      option_title: PAT Credentials
      personal_access_token: {secret}
      groups: estuary.dev
      projects: estuary/flow
      start_date: 2022-01-01T00:00:00Z
      bindings:
      - resource:
      stream: branches
      syncMode: full_refresh
      target: ${PREFIX}/assignees
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/index.html deleted file mode 100644 index 0cad71c93c..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - -Gladly | Estuary Flow - - - - - - - - - -

      Gladly

      -

      This connector captures data from Gladly into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-gladly:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported data resources

      -

      This connector can be used to sync the following Event entity types from Gladly:

      -
        -
      • AGENT_AVAILABILITY
      • -
      • AGENT_STATUS
      • -
      • CONTACT
      • -
      • CONVERSATION
      • -
      • CUSTOMER
      • -
      • PAYMENT_REQUEST
      • -
      • TASK
      • -
      -

      By default, each entity type is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      To set up the Gladly source connector, you'll need a Gladly account with an API token.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Gladly source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /organizationOrganizationOrganization to Request Data FromstringRequired
      /agentEmailAgent EmailAgent Email Address to use for AuthenticationstringRequired
      /apiTokenAPI TokenAPI Token to use for AuthenticationstringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /nameNameName of this resourcestringRequired
      /intervalIntervalInterval between updates for this resourcestring
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-gladly:dev
      config:
      organization:
      agentEmail:
      apiToken: <secret>
      bindings:
      - resource:
      name: AgentAvailabilityEvents
      interval: PT30S
      target: ${PREFIX}/AgentAvailabilityEvents
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/index.html deleted file mode 100644 index 3fc1f31f9c..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/index.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - -Google Ads | Estuary Flow - - - - - - - - - -

      Google Ads

      -

      This connector captures data from resources in one or more Google Ads accounts into Flow collections via the Google Ads API.

      -

      ghcr.io/estuary/source-google-ads:dev provides the latest connector image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported. -Resources ending in _report represent legacy resources from the Google Adwords API.

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      You may also generate custom resources using GAQL queries.

      -

      Prerequisites

      -

      There are two ways to authenticate with Google when capturing data into Flow: using OAuth2, and manually, using tokens and secret credentials. -Their prerequisites differ.

      -

      OAuth is recommended for simplicity in the Flow web app; -the manual method is the only supported method using the command line.

      -

      Customer Id & Login Customer Id

      -

      The Login Customer Id setting refers to your MCC Google Ads account Id. -One can easily find this number by accessing their Google Ads Dashboard and look to the far right corner of their screen.

      -

      Example:

      -

      Screenshot from 2024-02-19 05-10-29

      -

      In the above example, my login_customer_id would be 1234567890.

      -

      The Customer Id setting refers to your Client Accounts under a MCC account. -One can easily find this number by accessing their Google Ads Dashboard and look to the far left corner of their screen, -after selecting a client account.

      -

      Example:

      -

      Screenshot from 2024-02-19 05-10-16

      -

      In the above example, my customer_id would be 9876543210.

      -

      Multiple Customer Ids

      -

      This Source allows for multiple Customer Ids to be selected. -To allow this, simply add your customer_id followed by a comma.

      -

      Example:

      -

      Customer1 = 1234567890 -Customer2 = 9876543210

      -

      customer_id = 1234567890,9876543210

      -

      Using OAuth2 to authenticate with Google in the Flow web app

      - -

      Configuring the connector specification manually

      - -
      caution

      Developer token applications are independently reviewed by Google and may take one or more days to be approved. -Be sure to carefully review Google's requirements before submitting an application.

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the Flow specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Ads source connector.

      -

      Properties

      -

      Endpoint

      -

      The properties in the table below reflect the manual authentication method. -If you're working in the Flow web app, you'll use OAuth2, -so many of these properties aren't required.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /conversion_window_daysConversion Window (Optional)A conversion window is the period of time after an ad interaction (such as an ad click or video view) during which a conversion, such as a purchase, is recorded in Google Ads. For more information, see Google's docs.integer14
      /credentialsGoogle CredentialsobjectRequired
      /credentials/client_idClient IDThe Client ID of your Google Ads developer application.stringRequired
      /credentials/client_secretClient SecretThe Client Secret of your Google Ads developer application.stringRequired
      /credentials/developer_tokenDeveloper TokenDeveloper token granted by Google to use their APIs.stringRequired
      /credentials/refresh_tokenRefresh TokenThe token for obtaining a new access token.stringRequired
      /custom_queriesCustom GAQL Queries (Optional)array
      /custom_queries/-/queryCustom QueryA custom defined GAQL query for building the report. Should not contain segments.date expression. See Google's query builder for more information.string
      /custom_queries/-/table_nameDestination Table NameThe table name in your destination database for chosen query.string
      /customer_idCustomer ID(s)Comma separated list of (client) customer IDs. Each customer ID must be specified as a 10-digit number without dashes. More instruction on how to find this value in our docs. Metrics streams like AdGroupAdReport cannot be requested for a manager account.stringRequired
      /end_dateEnd Date (Optional)UTC date in the format 2017-01-25. Any data after this date will not be replicated.string
      /login_customer_idLogin Customer ID for Managed Accounts (Optional)If your access to the customer account is through a manager account, this field is required and must be set to the customer ID of the manager account (10-digit number without dashes).string
      /start_dateStart DateUTC date in the format 2017-01-25. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamGoogle Ad resource from which a collection is captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      This sample specification reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-google-ads:dev
      config:
      conversion_window_days: 7
      credentials:
      client_id: {secret_client_ID}
      client_secret: {secret_secret}
      developer_token: {access_token}
      refresh_token: {refresh_token}
      customer_id: 0123456789, 1234567890
      login_customer_id: 0987654321
      end_date: 2022-01-01
      start_date: 2020-01-01
      custom_queries:
      - query:
      SELECT
      campaign.id,
      campaign.name,
      campaign.status
      FROM campaign
      ORDER BY campaign.id
      table_name: campaigns_custom
      bindings:
      - resource:
      stream: campaign
      syncMode: incremental
      target: ${PREFIX}/campaign
      {...}
      -

      Custom queries

      -

      You can create custom resources using Google Analytics Query Language (GAQL) queries. -Each generated resource will be mapped to a Flow collection. -For help generating a valid query, see Google's query builder documentation.

      -

      If a query fails to validate against a given Google Ads account, it will be skipped.

      -

      Stream Limitations

      -

      ClickView

      -

      Due to Google Ads API limitations, ClickView stream queries are executed with a time range limited to one day. -Also, data can only be requested for periods 90 days before the time of the request.

      -

      In pratical terms, this means that you can only search ClickView data limited to 3 months ago, anything before this is not returned.

      -

      For more information, check Google's Ads API documentation

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/index.html deleted file mode 100644 index 86f8800e64..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/index.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - -Google Analytics 4 | Estuary Flow - - - - - - - - - -

      Google Analytics 4

      -

      This connector captures data from Google Analytics 4 properties into Flow collections via the -Google Analytics Data API.

      -
      info

      This connector supports Google Analytics 4, not Universal Analytics.

      Universal Analytics is supported by a separate connector.

      -

      It’s available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-google-analytics-data-api:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported:

      -
        -
      • Daily active users
      • -
      • Devices
      • -
      • Four-weekly active users
      • -
      • Locations
      • -
      • Pages
      • -
      • Traffic sources
      • -
      • Website overview
      • -
      • Weekly active users
      • -
      -

      Each is fetched as a report and mapped to a Flow collection through a separate binding.

      -

      You can also capture custom reports.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • -

        The Google Analytics Data API enabled on your Google project with which your Analytics property is associated. -(Unless you actively develop with Google Cloud, you'll likely just have one option).

        -
      • -
      • -

        Your Google Analytics 4 property ID.

        -
      • -
      -

      There are two ways to authenticate this connector with Google:

      -
        -
      • -

        Directly with Google using OAuth through the Flow web app. You'll only need your username and password.

        -
      • -
      • -

        Manually, by generating a service account key. Using this method, there are more prerequisites.

        -
      • -
      -

      Authenticating manually with a service account key

      -

      In addition to the above prerequisites, you'll need a Google service account with:

      -
        -
      • -

        A JSON key generated.

        -
      • -
      • -

        Access to the Google Analytics 4 property.

        -
      • -
      -

      To set this up:

      -
        -
      1. -

        Create a service account and generate a JSON key. -During setup, grant the account the Viewer role on your project. -You'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector.

        -
      2. -
      3. -

        Add the service account to the Google Analytics property.

        -
          -
        1. Grant the account Viewer permissions.
        2. -
        -
      4. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing a specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Analytics 4 source connector.

      -

      Properties

      -

      Endpoint

      -

      The following properties reflect the manual authentication method. If you authenticate directly with Google in the Flow web app, some of these properties aren't required.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsCredentialsCredentials for the serviceobject
      /credentials/auth_typeAuthentication MethodSet to Service for manual authentication.string
      /credentials/credentials_jsonService Account CredentialsContents of the JSON key file generated during setup.string
      /custom_reportsCustom Reports (Optional)A JSON array describing the custom reports you want to sync from Google Analytics. Learn more about custom reports.string
      /date_ranges_start_dateDate Range Start DateThe start date. One of the values <N>daysago, yesterday, today or in the format YYYY-MM-DD.stringRequired
      /property_idProperty IDA Google Analytics GA4 property identifier whose events are tracked.stringRequired
      /window_in_daysData request time increment in days (Optional)The time increment used by the connector when requesting data from the Google Analytics API. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364. See data sampling for details.integer1
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamData resource from Google Analytics.stringRequired
      /syncModeSync ModeConnection method. Always set to incremental.stringRequired
      -

      Custom reports

      -

      You can include data beyond the default data resources with Custom Reports. -These replicate the functionality of Custom Reports in the Google Analytics Web console.

      -

      Fill out the Custom Reports property with a JSON array as a string with the following schema:

      -
      [{"name": "<report-name>", "dimensions": ["<dimension-name>", ...], "metrics": ["<metric-name>", ...]}]
      -

      Segments and filters are also supported. -When using segments, you must include the ga:segment dimension:

      -
      [{"name": "<report-name>", "dimensions": ["ga:segment", "<other-dimension-name>", ...], "metrics": ["<metric-name>", ...], "segments": "<segment-id>", "filter": "<filter-expression>"}]
      -

      Sample

      -

      This sample reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-google-analytics-data-api:dev
      config:
      credentials:
      auth_type: Service
      credentials_json: <secret>
      date_ranges_start_date: 2023-01-01
      property_id: 000000000
      window_in_days: 1

      bindings:
      - resource:
      stream: daily_active_users
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: devices
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: four_weekly_active_users
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: locations
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: pages
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: traffic_sources
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: website_overview
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: weekly_active_users
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Performance considerations

      -

      Data sampling

      -

      The Google Analytics Data API enforces compute thresholds for ad-hoc queries and reports. -If a threshold is exceeded, the API will apply sampling to limit the number of sessions analyzed for the specified time range. -These thresholds can be found here.

      -

      If your account is on the Analytics 360 tier, you're less likely to run into these limitations. -For Analytics Standard accounts, you can avoid sampling by keeping the window_in_days parameter set to its default value, 1. -This makes it less likely that you will exceed the threshold.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/index.html deleted file mode 100644 index 8e985116b6..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/index.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - -Google Analytics UA | Estuary Flow - - - - - - - - - -

      Google Analytics UA

      -

      This connector captures data from a view in Google Universal Analytics.

      -
      info

      This connector supports Universal Analytics, not Google Analytics 4.

      Google Analytics 4 is supported by a separate connector.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-google-analytics-ua:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are captured to Flow collections by default:

      -
        -
      • Website overview
      • -
      • Traffic sources
      • -
      • Pages
      • -
      • Locations
      • -
      • Monthly active users
      • -
      • Four weekly active users
      • -
      • Two weekly active users
      • -
      • Weekly active users
      • -
      • Daily active users
      • -
      • Devices
      • -
      -

      Each resource is mapped to a Flow collection through a separate binding.

      -

      You can also configure custom reports.

      -

      Prerequisites

      -

      There are two ways to authenticate with Google when capturing data from a Google Analytics view: using OAuth2, and manually, by generating a service account key. -Their prerequisites differ.

      -

      OAuth is recommended for simplicity in the Flow web app; -the service account key method is the only supported method using the command line.

      -

      Using OAuth2 to authenticate with Google in the Flow web app

      -
        -
      • -

        The View ID for your Google Analytics account. -You can find this using Google's Account Explorer tool.

        -
      • -
      • -

        Your Google account username and password.

        -
      • -
      -

      Authenticating manually with a service account key

      -
        -
      • -

        The View ID for your Google Analytics account. -You can find this using Google's Account Explorer tool.

        -
      • -
      • -

        Google Analytics and Google Analytics Reporting APIs enabled on your Google account.

        -
      • -
      • -

        A Google service account with:

        -
          -
        • A JSON key generated.
        • -
        • Access to the source Google Analytics view.
        • -
        -
      • -
      -

      Follow the steps below to meet these prerequisites:

      -
        -
      1. -

        Enable the Google Analytics and Google Analytics Reporting APIs -for the Google project with which your Analytics view is associated. -(Unless you actively develop with Google Cloud, you'll likely just have one option).

        -
      2. -
      3. -

        Create a service account and generate a JSON key -During setup, grant the account the Viewer role on your project. -You'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector.

        -
      4. -
      5. -

        Add the service account to the Google Analytics view.

        -
          -
        1. Grant the account Viewer permissions (formerly known as Read & Analyze permissions).
        2. -
        -
      6. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. -The values and specification sample below provide configuration details specific to the Google Analytics source connector.

      -

      Properties

      -

      Endpoint

      -

      The following properties reflect the Service Account Key authentication method. If you're working in the Flow web app, you'll use OAuth2, so some of these properties aren't required.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsCredentialsCredentials for the serviceobject
      /credentials/auth_typeAuthentication TypeAuthentication method. Set to Service for manual configuration, or use OAuth in the web app.stringRequired
      credentials/credentials_jsonService Account CredentialsContents of the JSON key file generated during setup.stringRequired
      /custom_reportsCustom Reports (Optional)A JSON array describing the custom reports you want to sync from GA.string
      /start_dateStart DateThe date in the format YYYY-MM-DD. Any data before this date will not be replicated.stringRequired
      /view_idView IDThe ID for the Google Analytics View you want to fetch data from. This can be found from the Google Analytics Account Explorer: https://ga-dev-tools.appspot.com/account-explorer/stringRequired
      /window_in_daysWindow in days (Optional)The amount of days each stream slice would consist of beginning from start_date. Bigger the value - faster the fetch. (Min=1, as for a Day; Max=364, as for a Year).integer1
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamData resource from the Google Analytics view.stringRequired
      /syncModeSync ModeConnection method. Always set to incremental.stringRequired
      -

      Custom reports

      -

      You can include data beyond the default data resources with Custom Reports. -These replicate the functionality of Custom Reports in the Google Analytics Web console.

      -

      To do so, fill out the Custom Reports property with a JSON array as a string with the following schema:

      -
      [{"name": string, "dimensions": [string], "metrics": [string]}]
      -

      You may specify default Google Analytics dimensions and metrics from the table below, -or custom dimensions and metrics you've previously defined. -Each custom report may contain up to 7 unique dimensions and 10 unique metrics. -You must include the ga:date dimension for proper data flow.

      -
      Supported GA dimensionsSupported GA metrics
      ga:browserga:14dayUsers
      ga:cityga:1dayUsers
      ga:continentga:28dayUsers
      ga:countryga:30dayUsers
      ga:datega:7dayUsers
      ga:deviceCategoryga:avgSessionDuration
      ga:hostnamega:avgTimeOnPage
      ga:mediumga:bounceRate
      ga:metroga:entranceRate
      ga:operatingSystemga:entrances
      ga:pagePathga:exits
      ga:regionga:newUsers
      ga:socialNetworkga:pageviews
      ga:sourcega:pageviewsPerSession
      ga:subContinentga:sessions
      ga:sessionsPerUser
      ga:uniquePageviews
      ga:users
      -

      Sample

      -

      This sample reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-google-analytics-v4:dev
      config:
      view_id: 000000000
      start_date: 2022-03-01
      credentials:
      auth_type: service
      credentials_json: <secret>
      window_in_days: 1

      bindings:
      - resource:
      stream: daily_active_users
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: devices
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: four_weekly_active_users
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: locations
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: monthly_active_users
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: pages
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: traffic_sources
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: two_weekly_active_users
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: website_overview
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: weekly_active_users
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Learn more about capture definitions.

      -

      Performance considerations

      -

      Data sampling

      -

      The Google Analytics Reporting API enforces compute thresholds for ad-hoc queries and reports. -If a threshold is exceeded, the API will apply sampling to limit the number of sessions analyzed for the specified time range. -These thresholds can be found here.

      -

      If your account is on the Analytics 360 tier, you're less likely to run into these limitations. -For Analytics Standard accounts, you can avoid sampling by keeping the window_in_days parameter set to its default value, 1. -This makes it less likely that you will exceed the threshold. -When sampling occurs, a warning is written to the capture log.

      -

      Processing latency

      -

      Data in Google Analytics reports may continue to update up to 48 hours after it appears.

      -

      To ensure data correctness, each time it reads from Google Analytics, -this connector automatically applies a lookback window of 2 days prior to its last read. -This allows it to double-check and correct for any changes in reports resulting from latent data updates.

      -

      This mechanism relies on the isDataGolden flag in the Google Analytics Reporting API.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/index.html deleted file mode 100644 index 977a998bea..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/index.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - -Google Drive | Estuary Flow - - - - - - - - - -

      Google Drive

      -

      This connector lets you capture data from your Google Drive account into Flow collections.

      -

      ghcr.io/estuary/source-google-drive:dev provides the latest connector image. For access to previous image versions, follow the link in your browser.

      -

      Prerequisites

      -

      To use this connector, make sure you have the following:

      -
        -
      • An active Google Drive account with access credentials.
      • -
      • Properly configured permissions for your Google Drive resources.
      • -
      -

      Note: This connector is designed specifically for .csv files located in a specified Google Drive folder.

      -

      Configuration

      -

      You can set up the Google Drive source connector either through the Flow web app or by editing the Flow specification file directly. For more information on setting up this connector, refer to our guide on using connectors.

      -

      The values and specification sample below provide configuration details specific to the Google Drive connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsCredentialsJSON file containing authentication credentials for Google Drive.fileRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /file_idFile IDUnique identifier of the Google Drive file.stringRequired
      /pathPathPath to the file or directory in Google Drive.stringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-google-drive:dev
      config:
      credentials: /path/to/your/credentials.json
      bindings:
      - resource:
      file_id: "your_google_drive_file_id"
      path: "/path/in/google/drive"
      target: ${PREFIX}/target_name
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/index.html deleted file mode 100644 index 999a85ca9c..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - -Google Firestore | Estuary Flow - - - - - - - - - -

      Google Firestore

      -

      This connector captures data from your Google Firestore collections into Flow collections.

      -

      ghcr.io/estuary/source-firestore:dev provides the latest connector image. You can also follow the link in your browser to see past image versions.

      -

      Data model

      -

      Firestore is a NoSQL database. Its data model consists of documents (lightweight records that contain mappings of fields and values) organized in collections.

      -

      Collections are organized hierarchically. A given document in a collection can, in turn, be associated with a subcollection.

      -

      For example, you might have a collection called users, which contains two documents, alice and bob. -Each document has a subcollection called messages (for example, users/alice/messages), which contain more documents (for example, users/alice/messages/1).

      -
      users
      ├── alice
      │ └── messages
      │ ├── 1
      │ └── 2
      └── bob
      └── messages
      └── 1
      -

      The connector works by identifying documents associated with a particular sequence of Firestore collection names, -regardless of documents that split the hierarchy. -These document groupings are mapped to Flow collections using a path in the pattern collection/*/subcollection.

      -

      In this example, we'd end up with users and users/*/messages Flow collections, with the latter contain messages from both users. -The /_meta/path property for each document contains its full, original path, so we'd still know which messages were Alice's and which were Bob's.

      -

      Prerequisites

      -

      You'll need:

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the Flow specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Firestore source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /googleCredentialsCredentialsGoogle Cloud Service Account JSON credentials.stringRequired
      /databaseDatabaseOptional name of the database to capture from. Leave blank to autodetect. Typically "projects/$PROJECTID/databases/(default)".string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /backfillModeBackfill ModeConfigures the handling of data already in the collection. See below for details or just stick with 'async'stringRequired
      /pathPath to CollectionSupports parent/*/nested to capture all nested collections of parent's childrenstringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-firestore:dev
      config:
      googleCredentials:
      "type": "service_account",
      "project_id": "project-id",
      "private_key_id": "key-id",
      "private_key": "-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n",
      "client_email": "service-account-email",
      "client_id": "client-id",
      "auth_uri": "https://accounts.google.com/o/oauth2/auth",
      "token_uri": "https://accounts.google.com/o/oauth2/token",
      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
      "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email"
      bindings:
      - resource:
      #The below `path` will capture all Firestore documents that match the pattern
      #`orgs/<orgID>/runs/<runID>/runResults/<runResultID>/queryResults`.
      #See the Data Model section above for details.
      path: orgs/*/runs/*/runResults/*/queryResults
      backfillMode: async
      target: ${PREFIX}/orgs_runs_runResults_queryResults
      - resource:
      path: orgs/*/runs/*/runResults
      backfillMode: async
      target: ${PREFIX}/orgs_runs_runResults
      - resource:
      path: orgs/*/runs
      backfillMode: async
      target: ${PREFIX}/orgs_runs
      - resource:
      path: orgs
      backfillMode: async
      target: ${PREFIX}/orgs
      -

      Backfill mode

      -

      In each captured collection's binding configuration, you can choose whether and how to backfill historical data. -There are three options:

      -
        -
      • -

        none: Skip preexisting data in the Firestore collection. Capture only new documents and changes to existing documents that occur after the capture is published.

        -
      • -
      • -

        async: Use two threads to capture data. The first captures new documents, as with none. -The second progressively ingests historical data in chunks. This mode is most reliable for Firestore collections of all sizes but provides slightly weaker guarantees against data duplication.

        -

        The connector uses a reduction to reconcile changes to the same document found on the parallel threads. -The version with the most recent timestamp the document metadata will be preserved ({"strategy": "maximize", "key": "/_meta/mtime"}). For most collections, this produces an accurate copy of your Firestore collections in Flow.

        -
      • -
      • -

        sync: Request that Firestore stream all changes to the collection since its creation, in order.

        -

        This mode provides the strongest guarantee against duplicated data, but can cause errors for large datasets. -Firestore may terminate the process if the backfill of historical data has not completed within about ten minutes, forcing the capture to restart from the beginning. -If this happens once it is likely to recur continuously. If left unattended for an extended time this can result in a massive number of read operations and a correspondingly large bill from Firestore.

        -

        This mode should only be used when somebody can keep an eye on the backfill and shut it down if it has not completed within half an hour at most, and on relatively small collections. -100,000 documents or fewer should generally be safe, although this can vary depending on the average document size in the collection.

        -
      • -
      -

      If you're unsure which backfill mode to use, choose async.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/index.html deleted file mode 100644 index f82718b743..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/index.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - -Google Cloud Pub/Sub | Estuary Flow - - - - - - - - - -

      Google Cloud Pub/Sub

      -

      This connector captures messages in JSON format into Flow collections from -Google Cloud Pub/Sub topics.

      -

      During setup, this connect will discover all topics it has access to. Each -capture binding that is -enabled for a topic will automatically create a new subscription, and the -connector will read messages from that subscription.

      -

      Prerequisites

      -

      To use this connector, you will need the following prerequisites:

      -
        -
      • A Google Cloud Project with Pub/Sub enabled
      • -
      • A Google Cloud Service Account with the "Pub/Sub Editor" roles in your GCP project
      • -
      • A Service Account Key to authenticate into your Service Account
      • -
      -

      See the setup guide for more information about how to create the required resources.

      -

      Service Account

      -

      To sync data from Pub/Sub, you need credentials for a Service Account with the -"Pub/Sub Editor" role. This role grants the necessary permissions to discover -topics, create subscriptions to those topics, and read messages from the -subscriptions. It is recommended to create a dedicated Service Account to -facilitate permission management and auditing. However, if you already have a -Service Account with the correct permissions, you can use it.

      -

      Here's how to provision a suitable service account:

      -
        -
      1. Follow Google Cloud Platform's instructions for Creating a Service -Account.
      2. -
      3. Note down the ID of the service account you just created. Service Account IDs -typically follow the format -<account-name>@<project-name>.iam.gserviceaccount.com.
      4. -
      5. Follow Google Cloud Platform's instructions for Granting IAM -Roles -to the new service account. The "principal" email address should be the ID of -the service account you just created, and the role granted should be "Pub/Sub -Editor".
      6. -
      -

      Service Account Key

      -

      Service Account Keys are used to authenticate as Google Service Accounts. To be -able to utilize the permissions granted to the Service Account in the previous -step, you'll need to provide its Service Account Key when creating the capture. -It is a good practice, though not required, to create a new key for Flow even if -you're reusing a preexisting account.

      -

      To create a new key for a service account, follow Google Cloud Platform's -instructions for Creating a Service Account -Key. Be sure to -create the key in JSON format. Once the linked instructions have been followed -you should have a key file, which will need to be uploaded to Flow when setting -up your capture.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the -catalog specification file. See -connectors to learn more -about using connectors.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /projectIdProject IDGoogle Cloud Project ID that contains the PubSub topics.stringRequired
      /credentialsJsonService Account JSONGoogle Cloud Service Account JSON credentials to use for authentication.stringRequired
      /subscriptionPrefixSubscription PrefixPrefix to prepend to the PubSub topics subscription names.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /topicTopicName of the PubSub topic to subscribe to.stringRequired
      -

      At-Least-Once Message Capture

      -

      Received messages are acknowledged to Pub/Sub after they have been durably -committed to your Flow collection. After Pub/Sub receives acknowledgement of -messages, it will not attempt to re-deliver messages to subscribers if -subscriptions are created with "exactly-once delivery", which this connector -does set when it creates subscriptions. Occasionally messages will be captured -to your Flow collection more than once if the connector is restarted after it -has durably committed the document to the collection but before it has -acknowledged the message to Pub/Sub.

      -

      In this way the committing of the message to your Flow collection is considered -a "side effect" of processing the message, and Pub/Sub does not provide -guarantees around exactly-once side -effects.

      -

      If you materialize the collections using standard updates, duplicate documents -will automatically be de-duplicated in the destination based on the ID of the -documents. Materializations that use delta -updates need to consider -the potential for more than one document with the same ID.

      -

      Message Format

      -

      Currently only messages with data in JSON format can be processed. Data in other -formats will cause errors with the capture connector. Support for other formats -is planned - reach out to support@estuary.dev if your use case requires -processing data in a different format.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/index.html deleted file mode 100644 index ddc0b021ee..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - -Google Search Console | Estuary Flow - - - - - - - - - -

      Google Search Console

      -

      This connector captures data from Google Search Console into Flow collections via the Google Search Console API.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-google-search-console:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported:

      -
        -
      • Search analytics: all fields -
          -
        • This resource contains all data in for your search analytics, and can be large. The following five collections come from queries applied to this dataset.
        • -
        -
      • -
      • Search analytics by country
      • -
      • Search analytics by date
      • -
      • Search analytics by device
      • -
      • Search analytics by page
      • -
      • Search analytics by query
      • -
      • Sitemaps
      • -
      • Sites
      • -
      -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Custom reports

      -

      In addition to the resources listed above, you can add custom reports created with the Google Analytics Search Console integration. -You add these to the endpoint configuration in the format {"name": "<report-name>", "dimensions": ["<dimension-name>", ...]}. -Each report is mapped to an additional Flow collection.

      -
      caution

      Custom reports involve an integration with Google Universal Analytics, which Google will deprecate in July 2023.

      -

      Prerequisites

      -

      There are two ways to authenticate with Google when capturing data from Google Search Console: using OAuth2, and manually, by generating a service account key. -Their prerequisites differ.

      -

      OAuth2 is recommended for simplicity in the Flow web app; -the service account key method is the only supported method using the command line.

      -

      Using OAuth2 to authenticate with Google in the Flow web app

      -

      You'll need:

      - -

      You'll use these credentials to log in to Google in the Flow web app.

      -

      Authenticating manually with a service account key

      -

      You'll need:

      -
        -
      • A Google service account with: -
          -
        • A JSON key generated.
        • -
        • Access to the Google Search Console view through the API.
        • -
        -
      • -
      -

      Follow the steps below to meet these prerequisites:

      -
        -
      1. -

        Create a service account and generate a JSON key -You'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector.

        -
      2. -
      3. -

        Set up domain-wide delegation for the service account.

        -
          -
        1. During this process, grant the https://www.googleapis.com/auth/webmasters.readonly OAuth scope.
        2. -
        -
      4. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Search Console source connector.

      -

      Properties

      -

      Endpoint

      -

      The properties in the table below reflect the manual authentication method. -If you're working in the Flow web app, you'll use OAuth2, -so many of these properties aren't required.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsAuthenticationobjectRequired
      /credentials/auth_typeAuthentication TypeSet to Service for manual authenticationstringRequired
      /credentials/service_account_infoService Account JSON KeyThe JSON key of the service account to use for authorization.Required
      /credentials/emailAdmin EmailThe email of your Google Workspace administrator. This is likely the account used during setup.
      /custom_reportsCustom Reports (Optional)A JSON array describing the custom reports you want to sync from Google Search Console.string
      /end_dateEnd DateUTC date in the format 2017-01-25. Any data after this date will not be replicated. Must be greater or equal to the start date field.string
      /site_urlsWebsite URLThe URLs of the website properties attached to your GSC account.arrayRequired
      /start_dateStart DateUTC date in the format 2017-01-25. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamGoogle Search Consol resource from which a collection is captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      This sample specification reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-google-search-console:dev
      config:
      credentials:
      auth_type: Service
      service_account_info: <secret>
      email: admin@yourdomain.com
      site_urls: https://yourdomain.com
      start_date: 2022-03-01

      bindings:
      - resource:
      stream: sites
      syncMode: full_refresh
      target: ${PREFIX}/sites
      {}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/index.html deleted file mode 100644 index e7578c97c4..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/index.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -Google Sheets | Estuary Flow - - - - - - - - - -

      Google Sheets

      -

      This connector captures data from a Google Sheets spreadsheet.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-google-sheets:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Prerequisites

      -

      There are two ways to authenticate with Google when capturing data from a Sheet: using OAuth2, and manually,by generating a service account key. -Their prerequisites differ.

      -

      OAuth is recommended for simplicity in the Flow web app; -the service account key method is the only supported method using the command line.

      -

      Using OAuth2 to authenticate with Google in the Flow web app

      -
        -
      • -

        A link to a Google spreadsheet. Simply copy the link from your browser.

        -
      • -
      • -

        Your Google account username and password.

        -
      • -
      -

      Spreadsheet Formatting

      -

      For a more efficient usage, the connector expects a few basic formatting rules inside each -spreadsheet:

      -
        -
      1. The first row must be frozen and contain header names for each column. -
          -
        1. If the first row is not frozen or does not contain header names, header names will -be set using high-case alphabet letters (A,B,C,D...Z).
        2. -
        -
      2. -
      3. Sheet is not a image sheet or contains images.
      4. -
      5. Sheet is not empty. -
          -
        1. If a Sheet is empty, the connector will not break and wait for changes -inside the Sheet. When new data arrives, you will be prompted by flow to allow -for schema changes.
        2. -
        -
      6. -
      7. Sheet does not contain formulaValue inside any cell.
      8. -
      -

      Configuring the connector specification manually

      -
        -
      • -

        A link to a Google spreadsheet. Simply copy the link from your browser.

        -
      • -
      • -

        Google Sheets and Google Drive APIs enabled on your Google account.

        -
      • -
      • -

        A Google service account with:

        -
          -
        • A JSON key generated.
        • -
        • Access to the source spreadsheet.
        • -
        -
      • -
      -

      Follow the steps below to meet these prerequisites:

      -
        -
      1. -

        Enable the Google Sheets and Google Drive APIs -for the Google project with which your spreadsheet is associated. -(Unless you actively develop with Google Cloud, you'll likely just have one option).

        -
      2. -
      3. -

        Create a service account and generate a JSON key. -During setup, grant the account the Viewer role on your project. -You'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector.

        -
      4. -
      5. -

        Share your Google spreadsheet with the service account. You may either share the sheet so that anyone with the link can view it, -or share explicitly with the service account's email address.

        -
      6. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. -The values and specification sample below provide configuration details specific to the Google Sheets source connector.

      -

      Properties

      -

      Endpoint

      -

      The following properties reflect the Service Account Key authentication method.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsCredentialsGoogle API Credentials for connecting to Google Sheets and Google Drive APIsobjectRequired
      /credentials/auth_typeAuthentication TypeAuthentication method. Set to Service.stringRequired
      credentials/service_account_infoService Account CredentialsContents of the JSON key file generated during setup.stringRequired
      /spreadsheet_idSpreadsheet LinkThe link to your spreadsheet.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamSheetEach sheet in your Google Sheets document.stringRequired
      /syncModeSync modeConnection method. Always set to full_refresh.stringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-google-sheets:dev
      config:
      credentials:
      auth_type: Service
      service_account_info: <secret>
      spreadsheet_id: https://docs.google.com/spreadsheets/...
      bindings:
      - resource:
      stream: Sheet1
      syncMode: full_refresh
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Learn more about capture definitions.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/index.html deleted file mode 100644 index 189f3790d4..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - -Greenhouse | Estuary Flow - - - - - - - - - -

      Greenhouse

      -

      This connector captures data from Greenhouse into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-greenhouse:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.

      -

      You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Greenhouse APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -
        -
      • To set up the Greenhouse source connector, you'll need the Harvest API key with permissions to the resources Estuary Flow should be able to access.
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Greenhouse source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /apikeyAPI KeyThe value of the Greenhouse API Key generated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Greenhouse project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-greenhouse:dev
      config:
      apikey: <secret>
      bindings:
      - resource:
      stream: applications
      syncMode: full_refresh
      target: ${PREFIX}/applications
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/index.html deleted file mode 100644 index 5125f932b8..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/index.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - -Harvest | Estuary Flow - - - - - - - - - -

      Harvest

      -

      This connector captures data from Harvest into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-harvest:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Harvest APIs:

      - -

      Prerequisites

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Harvest source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /account_idAccount IDHarvest account ID. Required for all Harvest requests in pair with Personal Access Token.stringRequired
      /start_dateStart DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      /end_dateEnd DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringDefault
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Harvest project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-harvest:dev
      config:
      account_id: <account id>
      start_date: 2017-01-25T00:00:00Z
      end_date: 2020-01-25T00:00:00Z
      bindings:
      - resource:
      stream: clients
      syncMode: incremental
      target: ${PREFIX}/clients
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/index.html deleted file mode 100644 index fbe6d7377e..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/index.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - -HTTP File | Estuary Flow - - - - - - - - - -

      HTTP File

      -

      This connector captures data from an HTTP endpoint into a Flow collection.

      -

      To capture data from an incoming HTTP request, see the HTTP Ingest connector.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-http-file:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported data types

      -

      This connector automatically captures the data hosted at the specified URL into a single Flow collection.

      -

      The following file types are supported:

      -
        -
      • Avro
      • -
      • CSV
      • -
      • JSON
      • -
      • Protobuf
      • -
      • W3C Extended Log
      • -
      -

      The following compression methods are supported:

      -
        -
      • ZIP
      • -
      • GZIP
      • -
      • ZSTD
      • -
      -

      By default, Flow automatically detects the file type and compression method. -If necessary, you can specify the correct file type, compression, and other properties (CSV only) using the optional parser configuration.

      -

      Prerequisites

      -

      To use this connector, you'll need the URL to an HTTP endpoint that hosts data of one of the supported types. -The HTTP endpoint must support HEAD HTTP requests, and the response to this request must include a Last-Modified header.

      -
      tip

      You can send a test HEAD request using Curl with the -I parameter, for example: -curl -I https://my-site.com/my_hosted_dataset.json.zip -Use this online tool to easily do so in your browser.

      -

      Some HTTP endpoints require credentials for access. -If this is the case, have your username and password ready.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the HTTP file source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsCredentialsUser credentials, if required to access the data at the HTTP URL.object
      /credentials/passwordPasswordPassword, if required to access the HTTP endpoint.string
      /credentials/userUserUsername, if required to access the HTTP endpoint.string
      /headersHeadersobject
      /headers/itemsAdditional HTTP HeadersAdditional HTTP headers when requesting the file. These are uncommon.array
      /headers/items/-/keyHeader Keystring
      /headers/items/-/valueHeader Valuestring
      /parserParser ConfigurationConfigures how files are parsedobject
      /parser/compressionCompressionDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.null, stringnull
      /parser/formatFormatDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.object{"type":"auto"}
      /parser/format/typeTypestring
      /urlHTTP File URLA valid HTTP url for downloading the source file.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamName of the datasetstringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-http-file:dev
      config:
      url: https://my-site.com/my_hosted_dataset.json.zip
      parser:
      compression: zip
      format:
      type: csv
      config:
      delimiter: ","
      encoding: UTF-8
      errorThreshold: 5
      headers: [ID, username, first_name, last_name]
      lineEnding: "\\r"
      quote: "\""
      bindings:
      - resource:
      stream: my_hosted_dataset.json.zip
      target: ${PREFIX}/${COLLECTION_NAME}

      -

      Advanced: Parsing HTTP-hosted data

      -

      HTTP endpoints can support a variety of file types. -For each file type, Flow must parse -and translate data into collections with defined fields and JSON schemas.

      -

      By default, the parser will automatically detect the type and shape of the data at the HTTP endpoint, -so you won't need to change the parser configuration for most captures.

      -

      However, the automatic detection may be incorrect in some cases. -To fix or prevent this, you can provide explicit information in the parser configuration, -which is part of the endpoint configuration for this connector.

      -

      The parser configuration includes:

      -
        -
      • -

        Compression: Specify how the data is compressed. -If no compression type is specified, the connector will try to determine the compression type automatically. -Options are:

        -
          -
        • zip
        • -
        • gzip
        • -
        • zstd
        • -
        • none
        • -
        -
      • -
      • -

        Format: Specify the data format, which determines how it will be parsed. -If no file type is specified, the connector will try to determine the file type automatically -Options are:

        -
          -
        • Avro
        • -
        • CSV
        • -
        • JSON
        • -
        • Protobuf
        • -
        • W3C Extended Log
        • -
        -
      • -
      -

      CSV configuration

      -

      CSV files include several additional properties that are important to the parser. -In most cases, Flow is able to automatically determine the correct values, -but you may need to specify for unusual datasets. These properties are:

      -
        -
      • -

        Delimiter. Options are:

        -
          -
        • Comma (",")
        • -
        • Pipe ("|")
        • -
        • Space ("0x20")
        • -
        • Semicolon (";")
        • -
        • Tab ("0x09")
        • -
        • Vertical tab ("0x0B")
        • -
        • Unit separator ("0x1F")
        • -
        • SOH ("0x01")
        • -
        • Auto
        • -
        -
      • -
      • -

        Encoding type, specified by its WHATWG label.

        -
      • -
      • -

        Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture.

        -
      • -
      • -

        Escape characters. Options are:

        -
          -
        • Backslash ("\\")
        • -
        • Disable escapes ("")
        • -
        • Auto
        • -
        -
      • -
      • -

        Optionally, a list of column Headers, if not already included in the first row of the CSV file.

        -

        If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. -The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file.

        -
      • -
      • -

        Line ending values

        -
          -
        • CRLF ("\\r\\n") (Windows)
        • -
        • CR ("\\r")
        • -
        • LF ("\\n")
        • -
        • Record Separator ("0x1E")
        • -
        • Auto
        • -
        -
      • -
      • -

        Quote character

        -
          -
        • Double Quote ("\"")
        • -
        • Single Quote (")
        • -
        • Disable Quoting ("")
        • -
        • Auto
        • -
        -
      • -
      -

      The sample specification above includes these fields.

      -

      Advanced: Using HTTP headers

      -

      For data accessed through certain APIs, you may need to send headers as part of your HTTP request. -This is uncommon, and is supported by the optional Headers configuration.

      -

      This configuration section is encrypted with sops, so you can safely include secretes such as API keys.

      -

      See the source data's API documentation for headers that may be required for your capture.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/index.html deleted file mode 100644 index 9f32804b27..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/index.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - -HTTP Ingest (Webhook) | Estuary Flow - - - - - - - - - -

      HTTP Ingest (Webhook)

      -

      The HTTP Ingest connector allows you to capture data from incoming HTTP requests. -A common use case is to capture webhook deliveries, turning them into a Flow collection.

      -

      If you need to capture a dataset hosted at at HTTP endpoint, see the HTTP File connector.

      -

      The connector is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-http-ingest:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Usage

      -

      This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific -system or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source.

      -

      This is useful primarily if you want to test out Flow or see how your webhook data will come over.

      -

      To begin, use the web app to create a capture. Once published, the confirmation dialog displays -a unique URL for your public endpoint. By default, this will accept webhook requests at https://<your-public-endpoint>/webhook-data, but you can customize the path, or even capture from multiple URL paths if you like.

      -

      You're now ready to send data to Flow.

      -

      Send sample data to Flow

      -
        -
      1. -

        After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture.

        -
      2. -
      3. -

        Expand POST or PUT and click Try it out to send some example JSON documents using the UI. You can also copy the provided curl commands to send data via the command line.

        -
      4. -
      5. -

        After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture. -Click Details to view the data preview.

        -
      6. -
      -

      Webhook URLs

      -

      To configure a webhook in another service, such as Github, Shopify, or Segment, you'll need to paste a webhook URL into the configuration of their service.

      -

      To determine the full URL, start with the base URL from the Flow web app (for example https://abc123-8080.us-central1.v1.estuary-data.dev), and then append the path.

      -

      The path will be whatever is in the paths endpoint configuration field (/webhook-data by default). For example, your full webhook URL would be https://<your-unique-hostname>/webhook-data. You can add additional paths to paths, and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you're editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to /my-webhook.json, then the full URL for that binding would be https://<your-unique-hostname>/my-webhook.json.

      -

      Any URL query parameters that are sent on the request will be captured and serialized under /_meta/query/* the in documents. For example, a webhook request that's sent to /webhook-data?testKey=testValue would result in a document like:

      -
      {
      "_meta": {
      "webhookId": "...",
      "query": {
      "testKey": "testValue"
      },
      ...
      }
      ...
      }
      -

      Webhook IDs

      -

      Webhook delivery is typically "at least once". This means that webhooks from common services such as Github, Segment, Shopify, etc. may sometimes be sent multiple times. -In order to prevent problems due to duplicate processing of webhooks, these services typically provide either an HTTP header or a field within each document that serves -as a unique ID for each webhook event. This can be used to deduplicate the events in your webhook-data collection. The key of the discovered webhook-data collection is /_meta/webhookId. -By default, this value is generated automatically by the connector, and no-deduplication will be performed. -You can set the idFromHeader option in the resource configuration to have the connector automatically assign the value of the given HTTP header to the /_meta/webhookId property. -Doing so means that a materialization of the webhook-data collection will automatically deduplicate the webhook events.

      -

      Here's a table with some common webhook services and headers that they use:

      -
      ServiceValue to use for idFromHeader
      GithubX-Github-Event
      ShopifyX-Shopify-Webhook-Id
      Zendeskx-zendesk-webhook-id
      JiraX-Atlassian-Webhook-Identifier
      -

      Custom collection IDs

      -

      Some webhooks don't pass a deduplication ID as part of the HTTP headers. That's fine, and you can still easily deduplicate the events. -To do so, you'll just need to customize the schema and key of your webhook-data collection, or bind the webhook to an existing collection that already has the correct schema and key. -Just set the key to the field(s) within the webhook payload that uniquely identify the event. -For example, to capture webhooks from Segment, you'll want to set the key to ["/messageId"], and ensure that the schema requires that property to exist and be a string.

      -

      Authentication

      -

      The connector can optionally require each request to present an authentication token as part of an Authorization: Bearer HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an Authorization header with the value of your token. For example, if you use an auth token value of mySecretToken, then the header on each request must be Authorization: Bearer mySecretToken.

      -

      If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection. We recommend using authentication whenever possible.

      -

      Webhook signature verification

      -

      This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact support@estuary.dev and let us know.

      -

      Endpoint Configuration

      -
      PropertyTitleDescriptionTypeRequired/Default
      ****EndpointConfigobjectRequired
      /require_auth_tokenAuthentication tokenOptional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections.null, stringnull
      /pathsURL PathsList of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.null, stringnull
      -

      List of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.

      -

      Resource configuration

      -
      PropertyTitleDescriptionTypeRequired/Default
      ****ResourceConfigobjectRequired
      /idFromHeaderSet the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`.null, string
      /pathThe URL path to use for adding documents to this binding. Defaults to the name of the collection.null, string
      /streamThe name of the binding, which is used as a merge key when doing Discovers.null, string
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/index.html deleted file mode 100644 index b7b500af55..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/index.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - -HubSpot ( Real-Time ) | Estuary Flow - - - - - - - - - -

      HubSpot ( Real-Time )

      -

      This connector captures data from HubSpot into Flow collections.

      -

      Supported HubSpot Resources

      -

      The connector automatically discovers bindings for the following HubSpot resources:

      - -

      Updates for Email Events and Custom Objects may be delayed by up to 5 minutes due to -eventual consistency of the HubSpot API.

      -

      Prerequisites

      -

      There are two ways to authenticate with HubSpot when capturing data: using OAuth2, or with a private app access token. -Their prerequisites differ.

      -

      OAuth is recommended for simplicity in the Flow web app.

      -

      Using OAuth2 to authenticate with HubSpot in the Flow web app

      -
        -
      • A HubSpot account
      • -
      -

      Configuring the connector specification manually

      -
        -
      • -

        A HubSpot account

        -
      • -
      • -

        The access token for an appropriately configured private app on the Hubspot account.

        -
      • -
      -

      Setup

      -

      To create a private app in HubSpot and generate its access token, do the following.

      -
        -
      1. -

        Ensure that your HubSpot user account has super admin privileges.

        -
      2. -
      3. -

        In HubSpot, create a new private app.

        -
          -
        1. -

          Name the app "Estuary Flow," or choose another name that is memorable to you.

          -
        2. -
        3. -

          Grant the new app Read access for all available scopes.

          -
        4. -
        5. -

          Copy the access token for use in the connector configuration.

          -
        6. -
        -
      4. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the HubSpot Real-Time connector.

      -

      Endpoint

      -

      The following properties reflect the access token authentication method.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsPrivate ApplicationAuthenticate with a private app access tokenobjectRequired
      /credentials/access_tokenAccess TokenHubSpot Access token.stringRequired
      /credentials/credentials_titleCredentialsName of the credentials setstringRequired, "Private App Credentials"
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /nameData resourceName of the data resource.stringRequired
      /intervalIntervalInterval between data syncsstring
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-hubspot-native:dev
      config:
      credentials_title: Private App Credentials
      access_token: <secret>
      bindings:
      - resource:
      name: companies
      target: ${PREFIX}/${COLLECTION_NAME}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/index.html deleted file mode 100644 index e2eb792818..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/index.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - -Hubspot | Estuary Flow - - - - - - - - - -

      Hubspot

      -

      This connector captures data from a Hubspot account.

      -

      Estuary offers a in-house real time version of this connector. For more information take a look at our HubSpot Real-Time docs.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-hubspot:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      By default, each resource associated with your Hubspot account is mapped to a Flow collection through a separate binding.

      -

      The following data resources are supported for all subscription levels:

      - -

      The following data resources are supported for pro accounts (set Subscription type to pro in the configuration):

      - -

      Prerequisites

      -

      There are two ways to authenticate with Hubspot when capturing data: using OAuth2 or with a private app access token. -Their prerequisites differ.

      -

      OAuth is recommended for simplicity in the Flow web app; -the access token method is the only supported method using the command line.

      -

      Using OAuth2 to authenticate with Hubspot in the Flow web app

      -
        -
      • A Hubspot account
      • -
      -

      Configuring the connector specification manually

      -
        -
      • -

        A Hubspot account

        -
      • -
      • -

        The access token for an appropriately configured private app on the Hubspot account.

        -
      • -
      -

      Setup

      -

      To create a private app in Hubspot and generate its access token, do the following.

      -
        -
      1. -

        Ensure that your Hubspot user account has super admin privileges.

        -
      2. -
      3. -

        In Hubspot, create a new private app.

        -
          -
        1. -

          Name the app "Estuary Flow," or choose another name that is memorable to you.

          -
        2. -
        3. -

          Grant the new app Read access for all available scopes.

          -
        4. -
        5. -

          Copy the access token for use in the connector configuration.

          -
        6. -
        -
      4. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Hubspot source connector.

      -

      Properties

      -

      Endpoint

      -

      The following properties reflect the access token authentication method.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsPrivate ApplicationAuthenticate with a private app access tokenobjectRequired
      /credentials/access_tokenAccess TokenHubSpot Access token.stringRequired
      /credentials/credentials_titleCredentialsName of the credentials setstringRequired, "Private App Credentials"
      /start_dateStart DateUTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      /subscription_typeYour HubSpot account subscription typeSome streams are only available to certain subscription packages, we use this information to select which streams to pull data from.string"starter"
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamData resourceName of the data resource.stringRequired
      /syncModeSync ModeConnection methodstringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-hubspot:dev
      config:
      credentials:
      credentials_title: Private App Credentials
      access_token: <secret>
      bindings:
      - resource:
      stream: companies
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Your configuration will have many more bindings representing all supported resources -in your Hubspot account.

      -

      Learn more about capture definitions.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/index.html deleted file mode 100644 index 7deb17e395..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/index.html +++ /dev/null @@ -1,462 +0,0 @@ - - - - - -Capture connectors | Estuary Flow - - - - - - - - - -

      Capture connectors

      -

      Estuary's available capture connectors are listed in this section. Each connector has a unique set of requirements for configuration; these are linked below the connector name.

      -

      Also listed are links to the most recent Docker images for each connector. You'll need these to write Flow specifications manually (if you're developing locally). If you're using the Flow web app, they aren't necessary.

      -

      Estuary is actively developing new connectors, so check back regularly for the latest additions. We’re prioritizing the development of high-scale technological systems, as well as client needs.

      -

      Available capture connectors

      -

      Estuary connectors

      -

      These connectors are created by Estuary. We prioritize high-scale technology systems for development.

      -

      All Estuary connectors capture data in real time, as it appears in the source system

      -
        -
      • AlloyDB - -
      • -
      • Alpaca - -
      • -
      • Amazon Dynamodb - -
      • -
      • Amazon Kinesis -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/source-kinesis:dev
        • -
        -
      • -
      • Amazon RDS SQL Server -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-amazon-rds-sqlserver
        • -
        -
      • -
      • Amazon S3 - -
      • -
      • Apache Kafka - -
      • -
      • Azure Blob Storage -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/azure-blob-storage:dev
        • -
        -
      • -
      • Azure SQL Server -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-azure-sqlserver:dev
        • -
        -
      • -
      • BigQuery -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/source-bigquery-batch:dev
        • -
        -
      • -
      • Dropbox - -
      • -
      • Google Cloud Storage - -
      • -
      • Google Firestore -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-firestore:dev
        • -
        -
      • -
      • Google Cloud Pub/Sub -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/source-google-pubsub:dev
        • -
        -
      • -
      • Google Cloud SQL Server -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-google-cloud-sql-sqlserver:md
        • -
        -
      • -
      • HTTP file -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-http-file:dev
        • -
        -
      • -
      • HTTP ingest (webhook) -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-http-ingest:dev
        • -
        -
      • -
      • Hubspot (Real-Time) -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-hubspot-native:dev
        • -
        -
      • -
      • MariaDB - -
      • -
      • Microsoft SQL Server -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-sqlserver:dev
        • -
        -
      • -
      • MongoDB - -
      • -
      • MySQL - -
      • -
      • Pendo - -
      • -
      • PostgreSQL -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/source-postgres:dev
        • -
        -
      • -
      • Salesforce (for real-time data) -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-salesforce-next:dev
        • -
        -
      • -
      • SFTP - -
      • -
      • Snowflake -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-snowflake:dev
        • -
        -
      • -
      -

      Third party connectors

      -

      Estuary supports open-source connectors from third parties. These connectors operate in a batch fashion, -capturing data in increments. When you run these connectors in Flow, you'll get as close to real time as possible -within the limitations set by the connector itself.

      -

      Typically, we enable SaaS connectors from third parties to allow more diverse data flows.

      -

      All the third-party connectors available currently were created by Airbyte. -The versions made available in Flow have been adapted for compatibility.

      -
        -
      • Airtable - -
      • -
      • Amazon Ads -
          -
        • Configuration
        • -
        • Package - ghrc.io/estuary/source-amazon-ads.dev
        • -
        -
      • -
      • Amplitude -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-amplitude:dev
        • -
        -
      • -
      • Bing Ads - -
      • -
      • Braintree -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-braintree:dev
        • -
        -
      • -
      • Braze - -
      • -
      • Chargebee -
          -
        • Configuration
        • -
        • Package - ghrc.io/estuary/source-chargebee.dev
        • -
        -
      • -
      • Exchange Rates API -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-exchange-rates:dev
        • -
        -
      • -
      • Facebook Marketing -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-facebook-marketing:dev
        • -
        -
      • -
      • Freshdesk -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-freshdesk:dev
        • -
        -
      • -
      • GitHub - -
      • -
      • Gladly - -
      • -
      • Google Ads -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-google-ads:dev
        • -
        -
      • -
      • Google Analytics 4 -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-google-analytics-data-api:dev
        • -
        -
      • -
      • Google Universal Analytics -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-google-analytics-ua:dev
        • -
        -
      • -
      • Google Search Console -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-google-search-console:dev
        • -
        -
      • -
      • Google Sheets -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-google-sheets:dev
        • -
        -
      • -
      • Greenhouse -
          -
        • Configuration
        • -
        • Package - ghrc.io/estuary/source-greenhouse.dev
        • -
        -
      • -
      • Harvest - -
      • -
      • Hubspot - -
      • -
      • Instagram -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-instagram:dev
        • -
        -
      • -
      • Intercom - -
      • -
      • Iterable - -
      • -
      • Jira - -
      • -
      • Klaviyo - -
      • -
      • LinkedIn Ads -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-linkedin-ads:dev
        • -
        -
      • -
      • LinkedIn Pages -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-linkedin-pages:4985746
        • -
        -
      • -
      • Mailchimp -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-mailchimp:dev
        • -
        -
      • -
      • Marketo - -
      • -
      • MixPanel - -
      • -
      • NetSuite - -
      • -
      • Notion - -
      • -
      • Paypal Transaction -
          -
        • Configuration
        • -
        • Package - ghrc.io/estuary/source-paypal-transaction.dev
        • -
        -
      • -
      • Recharge - -
      • -
      • Salesforce (For historical data) -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-salesforce:dev
        • -
        -
      • -
      • SendGrid - -
      • -
      • Sentry - -
      • -
      • Slack - -
      • -
      • Snapchat - -
      • -
      • Stripe - -
      • -
      • SurveyMonkey -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-surveymonkey:dev
        • -
        -
      • -
      • Twilio - -
      • -
      • Zendesk Chat -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-zendesk-chat:dev
        • -
        -
      • -
      • Zendesk Support -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/source-zendesk-support:dev
        • -
        -
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/index.html deleted file mode 100644 index a9dce90344..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - -Instagram | Estuary Flow - - - - - - - - - -

      Instagram

      -

      This connector captures data from Instagram into Flow collections.

      -

      This Instagram article talks about how to connect a Facebook page to your Instagram business account.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-instagram:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.

      -

      You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Instagram APIs:

      -

      For more information, see the Instagram Graph API and Instagram Insights API documentation.

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Instagram source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /client_idClient IDThe Client ID of your Instagram developer application.stringRequired
      /client_secretClient SecretThe Client Secret of your Instagram developer application.stringRequired
      /access_tokenAccess TokenThe value of the access token generated with instagram_basic, instagram_manage_insights, pages_show_list, pages_read_engagement, Instagram Public Content Access permissions.stringRequired
      /start_dateReplication Start DateUTC date and time in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Instagram project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-instagram:dev
      config:
      client_id: <your client ID>
      client_secret: <secret>
      access_token: <secret>
      start_date: 2017-01-25T00:00:00Z
      bindings:
      - resource:
      stream: stories
      syncMode: full_refresh
      target: ${PREFIX}/stories
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/index.html deleted file mode 100644 index de365c820d..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/index.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - -Intercom HTTP Ingest (Webhook) | Estuary Flow - - - - - - - - - -

      Intercom HTTP Ingest (Webhook)

      -

      The Intercom HTTP Ingest connector allows you to capture data from incoming HTTP requests from Intercom. -A common use case is to capture webhook deliveries, turning them into a Flow collection.

      -

      The connector is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-http-ingest:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Usage

      -

      This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific -system or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source.

      -

      This is useful primarily if you want to test out Flow or see how your webhook data will come over.

      -

      To begin, use the web app to create a capture. Once published, the confirmation dialog displays -a unique URL for your public endpoint.

      -

      You're now ready to send data to Flow.

      -

      Send sample data to Flow

      -
        -
      1. -

        After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture.

        -
      2. -
      3. -

        Expand POST or PUT and click Try it out to send some example JSON documents using the UI. You can also copy the provided curl commands to send data via the command line.

        -
      4. -
      5. -

        After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture. -Click Details to view the data preview.

        -
      6. -
      -

      Configure a Intercom webhook

      -
        -
      1. -

        Navigate to your App in your Developer Hub and select the Webhooks from the configuration options

        -
      2. -
      3. -

        Under Endpoint URL enter in the unique URL generated for your Estuary Webhook endpoint in the format https://<your-webhook-url>/webhook-data

        -
      4. -
      5. -

        Configure the Topics section to trigger on your preferred webhook events and click save. Optionally, you can select Send a test request to preview how the data would be ingested into Estuary.

        -
      6. -
      -

      Webhook URLs

      -

      To determine the full URL, start with the base URL from the Flow web app (for example https://abc123-8080.us-central1.v1.estuary-data.dev), and then append the path.

      -

      The path will be whatever is in the paths endpoint configuration field (/webhook-data by default). For example, your full webhook URL would be https://<your-unique-hostname>/webhook-data. You can add additional paths to paths, and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you're editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to /my-webhook.json, then the full URL for that binding would be https://<your-unique-hostname>/my-webhook.json.

      -

      Any URL query parameters that are sent on the request will be captured and serialized under /_meta/query/* the in documents. For example, a webhook request that's sent to /webhook-data?testKey=testValue would result in a document like:

      -
      {
      "_meta": {
      "webhookId": "...",
      "query": {
      "testKey": "testValue"
      },
      ...
      }
      ...
      }
      -

      Authentication

      -

      The connector can optionally require each request to present an authentication token as part of an Authorization: Bearer HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an Authorization header with the value of your token. For example, if you use an auth token value of mySecretToken, then the header on each request must be Authorization: Bearer mySecretToken.

      -

      If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection. We recommend using authentication whenever possible.

      -

      Webhook signature verification

      -

      This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact support@estuary.dev and let us know.

      -

      Endpoint Configuration

      -
      PropertyTitleDescriptionTypeRequired/Default
      ****EndpointConfigobjectRequired
      /require_auth_tokenOptional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections.null, stringnull
      /pathsURL PathsList of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.null, stringnull
      -

      Resource configuration

      -
      PropertyTitleDescriptionTypeRequired/Default
      ****ResourceConfigobjectRequired
      /idFromHeaderSet the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`.null, string
      /pathThe URL path to use for adding documents to this binding. Defaults to the name of the collection.null, string
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/index.html deleted file mode 100644 index 4a03ea41da..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/index.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - -Intercom | Estuary Flow - - - - - - - - - -

      Intercom

      -

      This connector captures data from Intercom into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-intercom:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Intercom API:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      There are two ways to authenticate with Intercom:

      -
        -
      • -

        In the Flow web app, you sign in directly. You'll need the username and password associated with a user with full permissions on your Intercom workspace.

        -
      • -
      • -

        Using the flowctl CLI, you configure authentication manually. You'll need the access token for you Intercom account.

        -
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Intercom source connector.

      -

      Properties

      -

      Endpoint

      -

      The properties in the table below reflect manual authentication using the CLI. In the Flow web app, -you'll sign in directly and won't need the access token.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /access_tokenAccess tokenAccess token for making authenticated requests.stringRequired
      /start_dateStart dateUTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource from Intercom from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      The sample below reflects manual authentication in the CLI.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-intercom:dev
      config:
      access_token: <secret>
      start_date: 2022-06-18T00:00:00Z
      bindings:
      - resource:
      stream: admins
      syncMode: full_refresh
      target: ${PREFIX}/admins
      - resource:
      stream: companies
      syncMode: incremental
      target: ${PREFIX}/companies
      - resource:
      stream: company_segments
      syncMode: incremental
      target: ${PREFIX}/companysegments
      - resource:
      stream: conversations
      syncMode: incremental
      target: ${PREFIX}/conversations
      - resource:
      stream: conversation_parts
      syncMode: incremental
      target: ${PREFIX}/conversationparts
      - resource:
      stream: contacts
      syncMode: incremental
      target: ${PREFIX}/contacts
      - resource:
      stream: company_attributes
      syncMode: full_refresh
      target: ${PREFIX}/companyattributes
      - resource:
      stream: contact_attributes
      syncMode: full_refresh
      target: ${PREFIX}/contactattributes
      - resource:
      stream: segments
      syncMode: incremental
      target: ${PREFIX}/segments
      - resource:
      stream: tags
      syncMode: full_refresh
      target: ${PREFIX}/tags
      - resource:
      stream: teams
      syncMode: full_refresh
      target: ${PREFIX}/teams
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/index.html deleted file mode 100644 index a0047f004c..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/index.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - -Iterable | Estuary Flow - - - - - - - - - -

      Iterable

      -

      This connector captures data from Iterable into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-iterable:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.

      -

      You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Iterable APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Iterable source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /apikeyAPI KeyThe value of the Iterable API Key generated.stringRequired
      /start_dateStart DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Iterable project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-iterable:dev
      config:
      apikey: <secret>
      start_date: 2017-01-25T00:00:00Z
      bindings:
      - resource:
      stream: purchase
      syncMode: full_refresh
      target: ${PREFIX}/purchase
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/index.html deleted file mode 100644 index 699261ddb0..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - -Jira HTTP Ingest (Webhook) | Estuary Flow - - - - - - - - - -

      Jira HTTP Ingest (Webhook)

      -

      The Jira HTTP Ingest connector allows you to capture data from incoming HTTP requests from Jira. -A common use case is to capture webhook deliveries, turning them into a Flow collection.

      -

      The connector is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-http-ingest:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Usage

      -

      This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific -system or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source.

      -

      This is useful primarily if you want to test out Flow or see how your webhook data will come over.

      -

      To begin, use the web app to create a capture. Once published, the confirmation dialog displays -a unique URL for your public endpoint.

      -

      You're now ready to send data to Flow.

      -

      Send sample data to Flow

      -
        -
      1. -

        After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture.

        -
      2. -
      3. -

        Expand POST or PUT and click Try it out to send some example JSON documents using the UI. You can also copy the provided curl commands to send data via the command line.

        -
      4. -
      5. -

        After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture. -Click Details to view the data preview.

        -
      6. -
      -

      Configure a Jira webhook

      -
        -
      1. -

        In the Jira Administration console press the . key to bring up Jira's search. Search for Webhooks.

        -
      2. -
      3. -

        Click on a Create a WebHook and in the url section input the url that was generated after publishing a capture in Flow. See the Webhook URLs section below for more information on the structure of your URL.

        -
      4. -
      -

      Review Jira's documentation on configuring a webhook for more information.

      -

      Webhook URLs

      -

      To determine the full URL, start with the base URL from the Flow web app (for example https://abc123-8080.us-central1.v1.estuary-data.dev), and then append the path.

      -

      The path will be whatever is in the paths endpoint configuration field (/webhook-data by default). For example, your full webhook URL would be https://<your-unique-hostname>/webhook-data. You can add additional paths to paths, and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you're editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to /my-webhook.json, then the full URL for that binding would be https://<your-unique-hostname>/my-webhook.json.

      -

      Any URL query parameters that are sent on the request will be captured and serialized under /_meta/query/* the in documents. For example, a webhook request that's sent to /webhook-data?testKey=testValue would result in a document like:

      -
      {
      "_meta": {
      "webhookId": "...",
      "query": {
      "testKey": "testValue"
      },
      ...
      }
      ...
      }
      -

      Authentication

      -

      The connector can optionally require each request to present an authentication token as part of an Authorization: Bearer HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an Authorization header with the value of your token. For example, if you use an auth token value of mySecretToken, then the header on each request must be Authorization: Bearer mySecretToken.

      -

      If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection. We recommend using authentication whenever possible.

      -

      Webhook signature verification

      -

      This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact support@estuary.dev and let us know.

      -

      Endpoint Configuration

      -
      PropertyTitleDescriptionTypeRequired/Default
      ****EndpointConfigobjectRequired
      /require_auth_tokenOptional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections.null, stringnull
      /pathsURL PathsList of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.null, stringnull
      -

      Resource configuration

      -
      PropertyTitleDescriptionTypeRequired/Default
      ****ResourceConfigobjectRequired
      /idFromHeaderSet the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`.null, string
      /pathThe URL path to use for adding documents to this binding. Defaults to the name of the collection.null, string
      /streamThe name of the binding, which is used as a merge key when doing Discovers.null, string
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/index.html deleted file mode 100644 index 991544eab3..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/index.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - -Jira | Estuary Flow - - - - - - - - - -

      Jira

      -

      This connector captures data from Jira into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-jira:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.

      -

      You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Jira APIs:

      - -

      Prerequisites

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Jira source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /api_tokenAPI TokenJira API Token is used for Authorization to your account by BasicAuth.stringRequired
      /domainDomainThe Domain for your Jira account, e.g. estuary.atlassian.net, estuary.jira.com, jira.your-domain.comstringRequired
      /emailEmailThe user email for your Jira account which you used to generate the API token. This field is used for Authorization to your account by BasicAuth.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Jira project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-jira:dev
      config:
      api_token: <token>
      domain: <domain>
      email: <email>
      bindings:
      - resource:
      stream: issues
      syncMode: incremental
      target: ${PREFIX}/issues
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/index.html deleted file mode 100644 index 87c5dd6b59..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/index.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - -Klaviyo | Estuary Flow - - - - - - - - - -

      Klaviyo

      -

      This connector captures data from Klaviyo into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-klaviyo:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.

      -

      You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      This connector can be used to sync the following tables from Klaviyo:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Klaviyo source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /api_keyAPI KeyThe value of the Klaviyo API Key generated.stringRequired
      /start_dateStart DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Klaviyo project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-klaviyo:dev
      config:
      api_key: <secret>
      start_date: 2017-01-25T00:00:00Z
      bindings:
      - resource:
      stream: lists
      syncMode: full_refresh
      target: ${PREFIX}/lists
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/index.html deleted file mode 100644 index c5c7973268..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/index.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - -LinkedIn Ads | Estuary Flow - - - - - - - - - -

      LinkedIn Ads

      -

      This connector captures data from LinkedIn Ads into Flow collections through the LinkedIn Marketing API.

      -

      ghcr.io/estuary/source-linkedin-ads:dev provides the latest connector image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      There are two ways to authenticate with LinkedIn when capturing data into Flow: using OAuth2, and manually, by creating a developer application. -Their prerequisites differ.

      -

      OAuth is recommended for simplicity in the Flow web app; -the developer application method is the only supported method using the command line.

      -

      Using OAuth2 to authenticate with LinkedIn in the Flow web app

      - -

      Configuring the connector specification manually

      -

      To configure without using OAuth, you'll need to create an application using the LinkedIn Marketing API, -and generate its access token.

      -

      Setup

      -
        -
      1. Create a marketing application on LinkedIn Developers.
      2. -
      3. Apply to the LinkedIn Developer Program.
      4. -
      5. Generate your access token.
      6. -
      -
      caution

      LinkedIn access tokens expire in 60 days. -You must manually update your capture configuration to continue to capture data from LinkedIn.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the capture specification. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the LinkedIn Ads source connector.

      -

      Properties

      -

      Endpoint

      -

      The properties in the table below reflect the manual authentication method. -If you're working in the Flow web app, you'll use OAuth2, -so some of these properties aren't required.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /account_idsAccount IDs (Optional)A space-separated list of the account IDs from which to capture data. Leave empty if you want to capture data from all linked accounts.array[]
      /credentialsAuthenticationobject
      /credentials/auth_methodAuthentication methodSet to access_token to authenticate manually.string
      /credentials/access_tokenAccess tokenAccess token generated from your LinkedIn Developers app.string
      /start_dateStart dateUTC date in the format 2020-09-17. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamLinkedIn Ads stream from which a collection is captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      This sample specification reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-linkedin-ads:dev
      config:
      account_ids:
      - 000000000
      - 111111111
      credentials:
      auth_method: access_token
      access_token: {secret}
      start_date: 2022-01-01
      bindings:
      - resource:
      stream: campaigns
      syncMode: incremental
      target: ${PREFIX}/campaign
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/index.html deleted file mode 100644 index b0cd911e3c..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - -LinkedIn Pages | Estuary Flow - - - - - - - - - -

      LinkedIn Pages

      -

      This connector captures data from one LinkedIn Page into Flow collections via the LinkedIn Marketing API.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, but keep in mind that the two versions may be significantly different.

      -

      Prerequisites

      -
        -
      • An existing LinkedIn Account
      • -
      -

      The API user account should be assigned the ADMIN role and the following permissions for the API endpoints. -Endpoints such as: Organization Lookup API, Follower Statistics and Share Statistics require these permissions:

      -
        -
      • r_organization_social: Read the organization's posts, comments, reactions, etc.
      • -
      • rw_organization_admin: Write and read the organization's pages and read reporting data.
      • -
      -

      Authentication

      -

      This connector's authentication can be configured by either passing a LinkedIn access token or using Oauth to connect to your source. Oauth requires the additional setup of verifying your application with LinkedIn in order to use the required scopes.

      -

      You can see more details about the Community Management App Review in LinkedIn's Docs.

      -
      info

      LinkedIn access tokens expire in 60 days. -You must manually update your capture configuration to continue to capture data from LinkedIn.

      Refresh tokens expire after 365 days from their creation date. If you receive a 401 invalid token response error, it means that the access token has expired and you need to generate a new token. You can see more details about it in LinkedIn's Docs.

      -

      Access Token Authentication

      -
        -
      1. Go to the LinkedIn Developers' OAuth Token Tools and click Create token
      2. -
      3. Your app will need the r_organization_social and rw_organization_admin scopes:
      4. -
      5. Click "Request access token" and save the token.
      6. -
      -

      Oauth Authentication

      -

      Create a LinkedIn OAuth App

      -
        -
      1. Create a LinkedIn Page if you don't have one.
      2. -
      3. Create a developer application in LinkedIn's Developer Portal.
      4. -
      5. Ensure your application complies with the Restricted Uses of LinkedIn Marketing APIs and Data.
      6. -
      7. Apply to the Community Management API under the Products tab of your LinkedIn app and complete the form.
      8. -
      9. Save your client_id and client_secret from the Auth tab.
      10. -
      -

      Create a Refresh Token

      -
        -
      1. Go to the LinkedIn Developers' OAuth Token Tools and click Create token
      2. -
      3. Your app will need the r_organization_social and rw_organization_admin scopes:
      4. -
      5. Click "Request access token" and save the token.
      6. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the LinkedIn Pages source connector.

      -

      Properties

      -
      PropertyTitleDescriptionTypeRequired/Default
      /organization_idOrganization IDYour unique organization's id, found in the url of your bussiness' Organization PagestringRequired
      /client_idClient IDYour Oauth app's client id.stringRequired
      /client_secretClient SecretYour Oauth app's client secret.stringRequired
      /refresh_tokenRefresh TokenThe token value generated using the LinkedIn Developers OAuth Token Tools.stringRequired
      /access_tokenAccess TokenThe token value generated using the LinkedIn Developers OAuth Token Tools.stringRequired
      -

      Supported Streams

      -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/index.html deleted file mode 100644 index 209e2f1fd2..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - -Mailchimp | Estuary Flow - - - - - - - - - -

      Mailchimp

      -

      This connector captures data from a Mailchimp account.

      -

      Three data resources are supported, each of which is mapped to a Flow collection: lists, campaigns, and email activity.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-mailchimp:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Prerequisites

      -

      There are two ways to authenticate with MailChimp when capturing data: using OAuth2, and manually, with an API key. -Their prerequisites differ.

      -

      OAuth is recommended for simplicity in the Flow web app; -the API key method is the only supported method using the command line.

      -

      Using OAuth2 to authenticate with Mailchimp in the Flow web app

      -
        -
      • A Mailchimp account
      • -
      -

      Configuring the connector specification manually

      -
        -
      • -

        A Mailchimp account

        -
      • -
      • -

        A Mailchimp API key

        -
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Mailchimp source connector.

      -

      Properties

      -

      Endpoint

      -

      The following properties reflect the API Key authentication method.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsAuthenticationAuthentication Type and DetailsobjectRequired
      /credentials/auth_typeAuthentication TypeAuthentication type. Set to apikey.stringRequired
      /credentials/apikeyAPI KeyYour Mailchimp API keystringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamResourceMailchimp lists, campaigns, or email_activitystringRequired
      /syncModeSync ModeConnection method. Always set to incremental.stringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-mailchimp:dev
      config:
      credentials:
      auth_type: apikey
      apikey: <secret>
      bindings:
      - resource:
      stream: lists
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: campaigns
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}

      - resource:
      stream: email_activity
      syncMode: incremental
      target: ${PREFIX}/${COLLECTION_NAME}
      -

      Learn more about capture definitions.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/index.html deleted file mode 100644 index a1d392b09e..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - -Marketo | Estuary Flow - - - - - - - - - -

      Marketo

      -

      This connector captures data from Marketo into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-marketo:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.

      -

      You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      This connector can be used to sync the following tables from Marketo:

      -
        -
      • activities_X where X is an activity type contains information about lead activities of the type X. For example, activities_send_email contains information about lead activities related to the activity type send_email. See the Marketo docs for a detailed explanation of what each column means.
      • -
      • activity_types. Contains metadata about activity types. See the Marketo docs for a detailed explanation of columns.
      • -
      • campaigns. Contains info about your Marketo campaigns. Marketo docs.
      • -
      • leads. Contains info about your Marketo leads. Marketo docs.
      • -
      • lists. Contains info about your Marketo static lists. Marketo docs.
      • -
      • programs. Contains info about your Marketo programs. Marketo docs.
      • -
      -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -
        -
      • (Optional) allowlist the Estuary IP addresses if needed
      • -
      • An API-only Marketo User Role
      • -
      • An Estuary Marketo API-only user
      • -
      • A Marketo API Custom Service
      • -
      • Marketo Client ID & Client Secret
      • -
      • Marketo Base URL
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Marketo source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /client_idClient IDThe Client ID of your Marketo developer application.stringRequired
      /client_secretClient SecretThe Client Secret of your Marketo developer application.stringRequired
      /start_dateStart DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      /domain_urlDomain URLYour Marketo Base URL.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Marketo project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-marketo:dev
      config:
      client_id: <secret>
      client_secret: <secret>
      start_date: 2017-01-25T00:00:00Z
      domain_url: <your domain URL>
      bindings:
      - resource:
      stream: leads
      syncMode: full_refresh
      target: ${PREFIX}/leads
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/index.html deleted file mode 100644 index e2c1c7a748..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/index.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - -MixPanel | Estuary Flow - - - - - - - - - -

      MixPanel

      -

      This connector captures data from MixPanel into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-mixpanel:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.

      -

      You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the MixPanel APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MixPanel source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /project_idProject IDYour project ID number. See the docs for more information on how to obtain this.integerRequired
      /attribution_windowAttribution WindowA period of time for attributing results to ads and the lookback period after those actions occur during which ad results are counted. Default attribution window is 5 days.integerDefault
      /project_timezoneProject TimezoneTime zone in which integer date times are stored. The project timezone may be found in the project settings in the Mixpanel consolestringDefault
      /select_properties_by_defaultSelect Properties By DefaultbooleanDefault
      /start_dateStart DateThe date in the format YYYY-MM-DD. Any data before this date will not be replicated. If this option is not set, the connector will replicate data from up to one year ago by default.stringRequired
      /end_dateEnd DateThe date in the format YYYY-MM-DD. Any data after this date will not be replicated. Left empty to always sync to most recent date.stringDefault
      /regionRegionThe region of mixpanel domain instance either US or EU.stringDefault
      /date_window_sizeDate slicing windowDefines window size in days, that used to slice through data. You can reduce it, if amount of data in each window is too big for your environment.integerDefault
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your MixPanel project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-mixpanel:dev
      config:
      credentials:
      auth_type: ServiceAccount
      secret: {secret}
      username: {your_username}
      project_id: 1234567
      attribution_window: 5
      project_timezone: US/Pacific
      select_properties_by_default: true
      start_date: 2017-01-25T00:00:00Z
      end_date: 2019-01-25T00:00:00Z
      region: US
      date_window_size: 30
      bindings:
      - resource:
      stream: annotations
      syncMode: full_refresh
      target: ${PREFIX}/annotations
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/index.html deleted file mode 100644 index 09d978cba4..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - -MongoDB | Estuary Flow - - - - - - - - - -

      MongoDB

      -

      This connector captures data from your MongoDB collections into Flow collections.

      -

      ghcr.io/estuary/source-mongodb:dev provides the -latest connector image. You can also follow the link in your browser to see past image versions.

      -

      Data model

      -

      MongoDB is a NoSQL database. Its data -model consists of -documents (lightweight records that contain mappings of fields and values) organized in -collections. MongoDB documents have a mandatory _id field that is used as the key of the -collection.

      -

      Prerequisites

      -

      You'll need:

      -
        -
      • -

        Credentials for connecting to your MongoDB instance and database

        -
      • -
      • -

        Read access to your MongoDB database(s), see Role-Based Access -Control for more information.

        -
      • -
      -
      Configuration Tip

      If you are using a user with access to all databases, then in your mongodb address, you must specify -?authSource=admin parameter so that authentication is done through your admin database.

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the Flow specification -file. See connectors to learn more about using -connectors. The values and specification sample below provide configuration details specific to the -MongoDB source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressHost and port of the database. Optionally can specify scheme for the URL such as mongodb+srv://host.stringRequired
      /userUserDatabase user to connect as.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /databaseDatabaseOptional comma-separated list of the databases to discover. If not provided will discover all available databases in the instance.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /databaseDatabaseDatabase namestringRequired
      /collectionStreamCollection namestringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-mongodb:dev
      config:
      address: "mongo:27017"
      password: "flow"
      user: "flow"
      bindings:
      - resource:
      collection: users
      database: test
      target: ${PREFIX}/users
      -

      SSH Tunneling

      -

      As an alternative to connecting to your MongoDB instance directly, you can allow secure connections via SSH tunneling. To do so:

      -
        -
      1. -

        Refer to the guide to configure an SSH server on the cloud platform of your choice.

        -
      2. -
      3. -

        Configure your connector as described in the configuration section above, with the addition of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networks for additional details and a sample.

        -
      4. -
      -

      Backfill and real-time updates

      -

      When performing the initial database snapshot, the connector continuously reads from change -streams to capture change events while -executing collection scans to backfill pre-existing documents. After the initial snapshot, the -connector continues to read from the change streams indefinitely to capture all changes going -forward.

      -

      If the connector's process is paused for a while, it will attempt to resume capturing change events -from where it left off, however the connector's ability to do this depends on the size of the -replica set oplog, and in certain -circumstances, when the pause has been long enough for the oplog to have evicted old change events, -the connector will need to re-do the backfill to ensure data consistency. In these cases it is -necessary to resize your -oplog -or set a minimum retention -period -for your oplog to be able to reliably capture data. The recommended minimum retention period is at -least 24 hours, but we recommend higher values to improve reliability.

      -

      Change Event Pre- and Post-Images

      -

      Captured documents for change events from update operations will always -include a full post-image, since the change stream is configured with the { fullDocument: 'updateLookup' } -setting.

      -

      Pre-images for update, replace, and delete operations will be captured if -they are available. For these pre-images to be captured, the source MongoDB -collection must have changeStreamPreAndPostImages enabled. See the official -MongoDB -documentation -for more information on how to enable this setting.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/index.html deleted file mode 100644 index 05eba0e6b7..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/index.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - -NetSuite SuiteAnalytics Connect | Estuary Flow - - - - - - - - - -

      NetSuite SuiteAnalytics Connect

      -

      This connector captures data from Oracle NetSuite into Flow collections. It relies on the SuiteAnalytics Connect feature in order to both load large amounts of data quickly, as well as introspect the available tables, their schemas, keys, and cursor fields.

      -

      If you don't have SuiteAnalytics Connect, check out our SuiteTalk REST connector.

      -

      Supported data resources

      -

      Flow discovers all of the tables to which you grant access during setup, including Transactions, Reports, Lists, and Setup.

      -

      Prerequisites

      -
        -
      • Oracle NetSuite account
      • -
      • Allowed access to all Account permissions options
      • -
      • A new integration with token-based authentication
      • -
      • A custom role with access to objects you want to capture. See setup.
      • -
      • A new user assigned to the custom role
      • -
      • Access token generated for the custom role
      • -
      -

      Setup

      -

      Create a NetSuite account

      -
        -
      1. -

        Create an account on the Oracle NetSuite portal.

        -
      2. -
      3. -

        Confirm your email address.

        -
      4. -
      -

      Set up your NetSuite account

      -
        -
      1. -

        Find your Realm, or Account ID. You'll use this to connect with Flow.

        -
          -
        1. -

          In your NetSuite portal, go to Setup > Company > Company Information.

          -
        2. -
        3. -

          Copy your Account ID.

          -

          If you have a production account, it will look like 2345678. If you're using a sandbox, it'll look like 2345678_SB2.

          -
        4. -
        -
      2. -
      3. -

        Create a NetSuite integration to obtain a Consumer Key and Consumer Secret.

        -
          -
        1. -

          Navigate to Setup > Integration > Manage Integrations > New.

          -
        2. -
        3. -

          Give the integration a name, for example, estuary-rest-integration.

          -
        4. -
        5. -

          Make sure the State option is enabled.

          -
        6. -
        7. -

          In the Authentication section, check the Token-Based Authentication checkbox.

          -
        8. -
        9. -

          Save your changes.

          -
        10. -
        -

        Your Consumer Key and Consumer Secret will be shown once. Copy them to a safe place.

        -
      4. -
      5. -

        Set up a role for use with Flow.

        -
          -
        1. -

          Go to Setup > Users/Roles > Manage Roles > New.

          -
        2. -
        3. -

          Give the role a name, for example, estuary-integration-role.

          -
        4. -
        5. -

          Scroll to the Permissions section.

          -
        6. -
        7. -

          (IMPORTANT) Click Transactions and add all the dropdown entities with either full or view access level.

          -
        8. -
        9. -

          (IMPORTANT) Click Reports and add all the dropdown entities with either full or view access level.

          -
        10. -
        11. -

          (IMPORTANT) Click Lists and add all the dropdown entities with either full or view access level.

          -
        12. -
        13. -

          (IMPORTANT) Click Setup an add all the dropdown entities with either full or view access level.

          -
        14. -
        -

        To allow your custom role to reflect future changes, be sure to edit these parameters again when you rename or customize any NetSuite object.

        -
      6. -
      7. -

        Set up user for use with Flow.

        -
          -
        1. -

          Go to Setup > Users/Roles > Manage Users.

          -
        2. -
        3. -

          Find the user you want to give access to use with Flow. In the Name column, click the user's name. Then, click the Edit button.

          -
        4. -
        5. -

          Find the Access tab.

          -
        6. -
        7. -

          From the dropdown list, select role you created previously; for example, estuary-integration-role.

          -
        8. -
        9. -

          Save your changes.

          -
        10. -
        -
      8. -
      9. -

        Generate an access token.

        -
          -
        1. -

          Go to Setup > Users/Roles > Access Tokens > New.

          -
        2. -
        3. -

          Select an Application Name.

          -
        4. -
        5. -

          Under User, select the user you assigned the role previously.

          -
        6. -
        7. -

          Under Role, select the role you assigned to the user previously.

          -
        8. -
        9. -

          Under Token Name, give a descriptive name to the token you are creating, for example estuary-rest-integration-token.

          -
        10. -
        11. -

          Save your changes.

          -
        12. -
        -

        Your Token ID and Token Secret will be shown once. Copy them to a safe place.

        -
      10. -
      -

      You now have a properly configured account with the correct permissions and all the information you need to connect with Flow:

      -
        -
      • Realm (Account ID)
      • -
      • Consumer Key
      • -
      • Consumer Secret
      • -
      • Token ID
      • -
      • Token Secret
      • -
      -
      info

      You can also authenticate with a username and password, but a consumer/token is recommended for security.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the NetSuite source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      `/accountNetsuite Account IDNetsuite realm/Account ID e.g. 2344535, as for production or 2344535_SB1, as for the sandboxstringRequired
      /role_idRole IDThe ID of the role you created. Defaults to 3, which is the ID of the administrator role.int3
      /suiteanalytics_data_sourceData SourceWhich NetSuite data source to use. Options are NetSuite.com, or NetSuite2.comstringRequired
      /authenticationAuthentication DetailsCredentials to access your NetSuite accountobjectRequired
      -

      Token/Consumer Authentication

      -
      PropertyTitleDescriptionTypeRequired/Default
      /authentication/consumer_keyConsumer KeyConsumer key associated with your integration.stringRequired
      /authentication/consumer_secretConsumer SecretConsumer secret associated with your integration.stringRequired
      /authentication/token_keyToken KeyAccess token keystringRequired
      /authentication/token_secretToken SecretAccess token secretstringRequired
      -

      Username/Password Authentication

      -
      PropertyTitleDescriptionTypeRequired/Default
      /authentication/usernameUsernameYour NetSuite account's email/usernamestringRequired
      /authentication/passwordPasswordYour NetSuite account's password.stringRequired
      -

      Advanced Config options

      -
      PropertyTitleDescriptionTypeRequired/Default
      /advanced/connection_limitConnection LimitThe maximum number of concurrent data streams to attempt at once.int10 Connections
      /advanced/task_limitTask LimitThe maximum number of concurrent tasks to run at once. A task is either a backfill or incremental load. Backfills can load multiple chunks in parallel, so this must be strictly <= /advanced/connection_limitint5 Tasks
      /advanced/start_dateStart DateThe date that we should attempt to start backfilling from. If not provided, backfill from the beginning.dateNot Required
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /nameNameThe name of the table this binding refers tostringRequired
      /intervalIntervalHow frequently to check for incremental changesISO8601 DurationPT1H (1 Hour)
      /log_cursorLog CursorA date-time column to use for incremental capture of modifications.StringRequired (Automatically Discovered)
      /page_cursorPage CursorAn indexed, non-NULL integer column to use for ordered table backfills. Does not need to be unique, but should have high cardinality.StringRequired (Automatically Discovered)
      /concurrencyConcurrencyMaximum number of concurrent connections to use for backfilling.int1 Connection
      /query_limitQuery LimitMaximum number of rows to fetch in a query. Will be divided between all connections if /concurrency > 1int100,000 Rows
      /query_timeoutQuery TimeoutTimeout for queries. Typically left as the default as some tables just take a very long time to respond.ISO8601 DurationPT10M (10 Minutes)
      /associationsAssociationsList of associated tables for which related data should be loaded.Array[TableAssociation][]
      /associations/[n]/child_table_nameForeign Table NameThe name of the "foreign" table that should be associated with the "parent" binding containing this associationStringRequired
      /associations/[n]/parent_join_column_nameParent Join ColumnThe name of the column on the "parent" table to be used as the join keyStringRequired
      /associations/[n]/child_join_column_nameForeign Join ColumnThe name of the column on the "foreign" table to be used as the join keyStringRequired
      /associations/[n]/load_during_backfillLoad During BackfillWhether or not to load associated documents during backfillBooleanFalse
      /associations/[n]/load_during_incrementalLoad During IncrementalWhether or not to load associated documents during incremental loadsBooleanTrue
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-netsuite-v2:v3
      config:
      account: "12345678"
      authentication:
      auth_type: token
      consumer_key: xxx
      consumer_secret_sops: xxx
      token_id: xxx
      token_secret_sops: xxx
      connection_type: suiteanalytics
      role_id: 3
      suiteanalytics_data_source: NetSuite2.com
      advanced:
      connection_limit: 20
      cursor_fields: []
      enable_auto_cursor: false
      resource_tracing: false
      start_date: null
      task_limit: 10
      bindings:
      - resource:
      associations:
      - child_join_column_name: transaction
      child_table_name: TransactionAccountingLine
      parent_join_column_name: id
      load_during_backfill: false
      load_during_incremental: true
      interval: PT5M
      name: transaction
      page_cursor: id
      query_limit: 100000
      concurrency: 1
      query_timeout: PT10M
      log_cursor: lastmodifieddate
      target: ${PREFIX}/${CAPTURE_NAME}/transaction
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/index.html deleted file mode 100644 index ded8b2d145..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/index.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - -NetSuite SuiteTalk REST | Estuary Flow - - - - - - - - - -

      NetSuite SuiteTalk REST

      -

      This connector captures data from Oracle NetSuite into Flow collections. It connects to the NetSuite Analytics Data Warehouse using the SuiteQL REST endpoint and a custom role.

      -

      It is available for use in the Flow web application.

      -

      SuiteAnalytics vs SuiteQL via REST API

      -

      These two different connection modes have some key differences:

      -

      SuiteAnalytics Connect

      -
        -
      • Requires the SuiteAnalytics Connect feature to be purchased on your NetSuite account
      • -
      • Can inspect which tables (standard & custom) exist in your account
      • -
      • Can inspect the exact data types specified on these table columns
      • -
      • This means you can connect to any table in your account and all fields (booleans, date, and datetimes) are properly formatted in Estuary
      • -
      -

      SuiteQL via REST API

      -
        -
      • Custom tables are not supported without manual work
      • -
      • Some standard tables may not yet be supported and will require additional work from the Estuary team
      • -
      • Datetime values are represented as dates without the time specification (this is a limitation of the REST API)
      • -
      • Data types on custom columns may not be properly represented
      • -
      • You are repsonsible for determining the right set of permissions to grant the connector, which can often be complicated and unintuitive
      • -
      -

      Prerequisites

      -
        -
      • Oracle NetSuite account
      • -
      • Allowed access to all Account permissions options
      • -
      • A new integration with token-based authentication
      • -
      • A custom role with access to objects you want to capture or a purchased SuiteAnalytics Module. See setup.
      • -
      • A new user assigned to the custom role
      • -
      • Access token generated for the custom role
      • -
      -

      General Setup

      -

      Set up required features on your NetSuite account

      -
        -
      1. -

        Find your Account ID (also know as the "Realm"). You'll use this to connect with Flow.

        -
          -
        1. -

          In your NetSuite portal, go to Setup > Company > Company Information.

          -
        2. -
        3. -

          Copy your Account ID.

          -

          If you have a production account, it will look like 2345678. If you're using a sandbox, it'll look like 2345678_SB2.

          -
        4. -
        -
      2. -
      3. -

        Enable the required features.

        -
          -
        1. -

          Navigate to Setup > Company > Enable Features.

          -
        2. -
        3. -

          Click the SuiteCloud tab.

          -
        4. -
        5. -

          In the Manage Authentication section, check the checkbox labeled TOKEN-BASED AUTHENTICATION.

          -
        6. -
        7. -

          If you are using the SuiteQL connection, in the SuiteTalk (Web Services) section, check the checkbox labeled REST WEB SERVICES.

          -
        8. -
        9. -

          Save your changes.

          -
        10. -
        11. -

          If you are using SuiteAnalytics Connect, navigate to Setup > Company > Analytics > Connectivity and check the checkbox labeled SuiteAnalytics Connect.

          -
        12. -
        13. -

          Save your changes.

          -
        14. -
        -
      4. -
      5. -

        Create a NetSuite integration to obtain a Consumer Key and Consumer Secret.

        -
          -
        1. -

          Navigate to Setup > Integration > Manage Integrations > New.

          -
        2. -
        3. -

          Give the integration a name, for example, estuary-netsuite-integration.

          -
        4. -
        5. -

          Make sure the State option is enabled.

          -
        6. -
        7. -

          In the Authentication section, check the Token-Based Authentication checkbox.

          -
        8. -
        9. -

          Save your changes.

          -
        10. -
        -

        Your Consumer Key and Consumer Secret will be shown once. Copy them to a safe place. They will never show up again -and will be key to the integration working properly.

        -
      6. -
      7. -

        If you are using the SuiteQL over REST API connection, Set up a role for use with Flow.

        -
          -
        1. -

          Go to Setup > Users/Roles > Manage Roles > New.

          -
        2. -
        3. -

          Give the role a name, for example, estuary-integration-role.

          -
        4. -
        5. -

          The easiest thing to do here is to click "Core Administrative Permissions". If you want to scope down the permissions given to the connector (which you should) you'll have to determine which permissions are necessary. This can get tricky because many different settings can expand the required permissions (for instance, a custom script on a record could require additional permissions).

          -
        6. -
        7. -

          Scroll to the Permissions section.

          -
        8. -
        9. -

          (IMPORTANT) Click Transactions and add all the dropdown entities with either full or view access level.

          -
        10. -
        -
          -
        • -

          Find Transaction

          -
        • -
        -
          -
        1. -

          (IMPORTANT) Click Setup an add the following entities with either full or view access level.

          -
        2. -
        -
          -
        • Log in using Access Tokens
        • -
        • REST Web Services
        • -
        • User Access Tokens
        • -
        -

        To allow your custom role to reflect future changes, be sure to edit these parameters again when you rename or customize any NetSuite object.

        -
      8. -
      9. -

        If you are using SuiteAnalytics Connect you don't need a custom role. Instead, you can use the bundled "Data Warehouse Integrator"

        -
      10. -
      11. -

        Set up user for use with the connector.

        -
          -
        1. -

          Go to Setup > Users/Roles > Manage Users.

          -
        2. -
        3. -

          Find the user you want to give access to use with Flow. In the Name column, click the user's name. Then, click the Edit button.

          -
        4. -
        5. -

          Find the Access tab.

          -
        6. -
        7. -

          From the dropdown list, select either role you created previously (e.g. estuary-integration-role) or the Data Warehouse Integrator role if you are using SuiteAnalytics Connect.

          -
        8. -
        9. -

          Save your changes.

          -
        10. -
        -
      12. -
      13. -

        Generate an access token.

        -
          -
        1. -

          Go to Setup > Users/Roles > Access Tokens > New.

          -
        2. -
        3. -

          Select the Application Name you created earlier.

          -
        4. -
        5. -

          Under User, select the user you assigned the role previously.

          -
        6. -
        7. -

          Under Role, select the role you assigned to the user previously.

          -
        8. -
        9. -

          Under Token Name, give a descriptive name to the token you are creating, for example estuary-rest-integration-token.

          -
        10. -
        11. -

          Save your changes.

          -
        12. -
        -

        Your Token ID and Token Secret will be shown once. Copy them to a safe place.

        -
      14. -
      -

      You now have a properly configured account with the correct permissions and all the information you need to connect with Flow:

      -
        -
      • Account ID (Realm)
      • -
      • Consumer Key
      • -
      • Consumer Secret
      • -
      • Token ID
      • -
      • Token Secret
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the NetSuite source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /account_idRealmNetsuite realm e.g. 2344535, as for production or 2344535_SB1, as for the sandboxstringRequired
      /start_dateToken SecretThe date to start collecting data fromdateRequired
      /consumer_keyConsumer KeyConsumer key associated with your integration.stringRequired
      /consumer_secretConsumer SecretConsumer secret associated with your integration.stringRequired
      /token_keyToken KeyAccess token keystringRequired
      /token_secretToken SecretAccess token secretstringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your NetSuite project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-netsuite:dev
      config:
      account_id: <your account id>
      consumer_key: <key>
      consumer_secret: <secret>
      token_key: <key>
      token_secret: <secret>
      start_date: "2023-11-01T00:00:00Z"
      bindings:
      - resource:
      stream: Transaction
      target: ${PREFIX}/Transaction
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/index.html deleted file mode 100644 index 28e28d96e6..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/index.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - -Notion | Estuary Flow - - - - - - - - - -

      Notion

      -

      This connector captures data from Notion into Flow collections via the Notion API.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-notion:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      To use this connector, you'll need a Notion account with an integration created to connect with Flow.

      -

      Before you create your integration, choose how you'll authenticate with Notion. -There are two ways: using OAuth to sign in directly in the web app, -or manually, using an access token. -OAuth is recommended in the web app; only manual configuration is supported when using the CLI.

      -

      Setup for OAuth authentication

      -
        -
      1. -

        Go to your integrations page and create a new integration.

        -
      2. -
      3. -

        On the new integration's Secrets page, change the integration type to Public. Fill in the required fields.

        - -
      4. -
      -

      Setup for manual authentication

      -
        -
      1. -

        Go to your integrations page and create a new internal integration. Notion integrations are internal by default.

        -
          -
        1. During setup, change User Capabilities -from No user information (the default) to Read user information without email address.
        2. -
        -
      2. -
      3. -

        Copy the generated token for use in the connector configuration.

        -
      4. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Notion source connector.

      -

      Properties

      -

      Endpoint

      -

      The properties in the table below reflect the manual authentication method. -If you're working in the Flow web app, you'll use OAuth2, -so many of these properties aren't required.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsAuthenticate usingPick an authentication method.objectRequired
      /credentials/auth_typeAuthentication typeSet to token for manual authenticationstringRequired
      /credentials/tokenAccess TokenNotion API access tokenstring
      /start_dateStart DateUTC date and time in the format YYYY-MM-DDTHH:MM:SS.000Z. Any data generated before this date will not be replicated. If left blank, the start date will be set to 2 years before the present date.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamNotion resource from which a collection is captured.stringRequired
      /syncModeSync ModeSync this resource incrementally, or fully refresh it every runstringRequired
      -

      Sample

      -

      This sample specification reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-notion:dev
      config:
      credentials:
      auth_type: token
      token: {secret}
      start_date: 2021-01-25T00:00:00Z
      bindings:
      - resource:
      stream: blocks
      syncMode: incremental
      target: ${PREFIX}/blocks
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/index.html deleted file mode 100644 index b204e963cc..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - -Paypal Transaction | Estuary Flow - - - - - - - - - -

      Paypal Transaction

      -

      This connector captures data from Paypal Transaction into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-paypal-transaction:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.

      -

      You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Paypal APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Paypal Transaction source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /client_idClient IDThe Client ID of your Paypal developer application.stringRequired
      /client_secretClient SecretThe Client Secret of your Paypal developer application.stringRequired
      /is_sandboxSandboxCheckbox to indicate whether it is a sandbox environment or notbooleanfalse
      /refresh_tokenRefresh tokenThe key to refresh the expired access token.stringRequired
      /start_dateStart DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Paypal Transaction project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-paypal-transaction:dev
      config:
      client_id: <secret>
      client_secret: <secret>
      is_sandbox: false
      refresh_token: <secret>
      start_date: 2017-01-25T00:00:00Z
      bindings:
      - resource:
      stream: transactions
      syncMode: full_refresh
      target: ${PREFIX}/transactions
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/index.html deleted file mode 100644 index 89c9545df7..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/index.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - -Pendo | Estuary Flow - - - - - - - - - -

      Pendo

      -

      This connector captures data from Pendo into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-pendo:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Supported data resources

      -

      The following data resources are supported through the Pendo API:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -
        -
      • A Pendo account with the integration feature enabled.
      • -
      • A Pendo API key
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification files. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Pendo source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentials/access_tokenAPI KeyYour Pendo API key.stringRequired
      /startDateReplication Start DateUTC date and time in the format "YYYY-MM-DDTHH:MM:SSZ". Data prior to this date will not be replicated.string1 hour before the current time
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /nameData resourceResource in Pendo from which collections are captured.stringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-pendo:dev
      config:
      credentials:
      access_token: <secret>
      bindings:
      - resource:
      name: Feature
      target: ${PREFIX}/Feature
      - resource:
      name: Guide
      target: ${PREFIX}/Guide
      - resource:
      name: Page
      target: ${PREFIX}/Page
      - resource:
      name: Report
      target: ${PREFIX}/Report
      - resource:
      name: PageEvents
      target: ${PREFIX}/PageEvents
      - resource:
      name: FeatureEvents
      target: ${PREFIX}/FeatureEvents
      - resource:
      name: TrackEvents
      target: ${PREFIX}/TrackEvents
      - resource:
      name: GuideEvents
      target: ${PREFIX}/GuideEvents
      - resource:
      name: PollEvents
      target: ${PREFIX}/PollEvents
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/index.html deleted file mode 100644 index 3544a6333e..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/index.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - -Pinterest | Estuary Flow - - - - - - - - - -

      Pinterest

      -

      This connector captures data from Pinterest into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-pinterest:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To set up the Pinterest source connector, you'll need the following prerequisites:

      -
        -
      • Pinterest App ID and secret key
      • -
      • Refresh Token
      • -
      -

      Setup

      -

      Follow the steps below to set up the Pinterest source connector.

      -
        -
      1. Log into your Estuary Flow account.
      2. -
      3. Navigate to the "Captures" section
      4. -
      5. For the "Start Date," provide the date in YYYY-MM-DD format. Data added on and after this date will be replicated.
      6. -
      7. Next, go to "Authorization Method"
      8. -
      9. Authenticate your Pinterest account using OAuth2.0 or an Access Token. The OAuth2.0 authorization method is selected by default. For "Client ID" and "Client Secret," enter your Pinterest App ID and secret key. For the "Refresh Token," enter your Pinterest Refresh Token. -Click "Set up source."
      10. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Pinterest source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /start_dateStart DateA date in the format YYYY-MM-DD. If you have not set a date, it would be defaulted to latest allowed date by api (89 days from today).stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Pinterest project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -
      {
      "required": ["start_date", "credentials"],
      "properties": {
      "start_date": {
      "pattern_descriptor": null
      },
      "credentials": {
      "discriminator": {
      "propertyName": "auth_method"
      },
      "oneOf": [
      {
      "title": "OAuth2.0",
      "type": "object",
      "x-oauth2-provider": "pinterest",
      "properties": {
      "auth_method": {
      "const": "oauth2.0",
      "order": 0,
      "type": "string",
      "default": "oauth2.0"
      },
      "client_id": {
      "airbyte_secret": true,
      "description": "The Client ID of your OAuth application",
      "title": "Client ID",
      "type": "string"
      },
      "client_secret": {
      "airbyte_secret": true,
      "description": "The Client Secret of your OAuth application.",
      "title": "Client Secret",
      "type": "string"
      },
      "refresh_token": {
      "airbyte_secret": true,
      "description": "Refresh Token to obtain new Access Token, when it's expired.",
      "title": "Refresh Token",
      "type": "string"
      }
      },
      "required": [
      "auth_method",
      "refresh_token"
      ]
      },
      {
      "title": "Access Token",
      "type": "object",
      "properties": {
      "access_token": {
      "airbyte_secret": true,
      "description": "The Access Token to make authenticated requests.",
      "title": "Access Token",
      "type": "string"
      },
      "auth_method": {
      "const": "access_token",
      "order": 0,
      "type": "string",
      "default": "access_token"
      }
      },
      "required": [
      "auth_method",
      "access_token"
      ]
      }
      ]
      }
      }
      }
      -

      Supported Streams

      -

      The Pinterest source connector supports the following streams:

      -
        -
      • Account analytics (Incremental)
      • -
      • Boards (Full table)
      • -
      • Board sections (Full table)
      • -
      • Pins on board section (Full table)
      • -
      • Pins on board (Full table)
      • -
      • Ad accounts (Full table)
      • -
      • Ad account analytics (Incremental)
      • -
      • Campaigns (Incremental)
      • -
      • Campaign analytics (Incremental)
      • -
      • Ad groups (Incremental)
      • -
      • Ad group analytics (Incremental)
      • -
      • Ads (Incremental)
      • -
      • Ad analytics (Incremental)
      • -
      -

      Performance Considerations

      -

      The Pinterest API imposes certain rate limits for the connector. Please take note of the following limits:

      -
        -
      • Analytics streams: 300 calls per day per user
      • -
      • Ad accounts streams (Campaigns, Ad groups, Ads): 1000 calls per minute per user per app
      • -
      • Boards streams: 10 calls per second per user per app
      • -
      -
      note

      For any additional information or troubleshooting, refer to the official Pinterest API documentation.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/index.html deleted file mode 100644 index 08cf521ee7..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - -Recharge | Estuary Flow - - - - - - - - - -

      Recharge

      -

      This connector captures data from Recharge into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-recharge:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Recharge APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -
        -
      • Recharge Access Token for authentication.
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Recharge source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /access_tokenAccess TokenThe value of the Access Token generated.stringRequired
      /start_dateStart DateThe date from which you'd like to replicate data for Recharge API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Recharge project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-recharge:dev
      config:
      access_token: <secret>
      start_date: 2017-01-25T00:00:00Z
      bindings:
      - resource:
      stream: addresses
      syncMode: full_refresh
      target: ${PREFIX}/addresses
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/index.html deleted file mode 100644 index 7f702d46e3..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - -SendGrid | Estuary Flow - - - - - - - - - -

      SendGrid

      -

      This connector captures data from SendGrid into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-sendgrid:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the SendGrid APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -
        -
      • SendGrid API Key for authentication.
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SendGrid source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /apikeySendgrid API keyThe value of the SendGrid API Key generated.stringRequired
      /start_dateStart DateThe date from which you'd like to replicate data for SendGrid API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your SendGrid project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-sendgrid:dev
      config:
      apikey: <secret>
      start_date: 2017-01-25T00:00:00Z
      bindings:
      - resource:
      stream: blocks
      syncMode: incremental
      target: ${PREFIX}/blocks
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/index.html deleted file mode 100644 index a9f0e2d27b..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/index.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - -Sentry | Estuary Flow - - - - - - - - - -

      Sentry

      -

      This connector captures data from Sentry into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-sentry:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Sentry APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Sentry source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /auth_tokenAuth TokenAuth Token generated in SentrystringRequired
      /organizationOrganizationThe slug of the organization the groups belong to.stringRequired
      /projectProjectThe name (slug) of the Project you want to sync.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Sentry project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-sentry:dev
      config:
      auth_token: <secret>
      organization: <your organization>
      project: <your project>
      bindings:
      - resource:
      stream: events
      syncMode: full_refresh
      target: ${PREFIX}/events
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/index.html deleted file mode 100644 index 7b30e67b96..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/index.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - -SFTP | Estuary Flow - - - - - - - - - -

      SFTP

      -

      This connector captures data from an SFTP server.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-sftp:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      You'll need an SFTP server that can accept connections from the Estuary Flow IP addresses using password authentication.

      - -

      The connector must be configured with a Directory to capture files from. It will also descend into and capture files in normal subdirectories of the configured Directory.

      -

      Symbolic links to files are captured from the referent files. Symbolic links to subdirectories are not captured, although the configured Directory may itself be a symbolic link.

      -

      File Capturing Order

      -

      The standard mode of operation for the connector is to capture files according to their modification time. All files available on the server will initially be captured, and on an on-going basis new files that are added to the server are captured incrementally. New files added to the server are captured based on their modification time: If the connector finds a file with a more recent modification time than any previously observed, it will be captured. This means that any actions that update the modification time of a file on the server may cause it to be re-captured. For symbolic links to files the modification time of referent file is used, not of the symbolic link.

      -

      Alternatively, the advanced option Ascending Keys may be set. In this mode of operation the connector processes files strictly based on their path. New files are captured if they have a path lexically greater than any previously captured file. Lexical ordering considers the full path of the file.

      -

      As an example, consider a directory structure like the following with a data file initially in the directory /root/b/:

      -
      /root/
      a/
      b/data.csv
      c/
      -
        -
      • In the normal mode of operation (Ascending Keys not set) the path /root/b/data.csv will initially be captured. Any added files will be captured by the connector on an on-going basis as they have increasingly more recent modification times.
      • -
      • With Ascending Keys set the path /root/b/data.csv will initially be captured, but after that only added files in a higher lexical order will be captured: -
          -
        • Any file added to the directory /root/a/ will not be captured, becuase /root/a/ comes before /root/b/.
        • -
        • Any file added to the directory /root/c/ will captured, because /root/c/ comes after /root/b/.
        • -
        • A file added to the directory /root/b/ may be captured if its name comes after data.csv.
        • -
        • This ordering applies on an on-going basis. If a file is added to /root/c/, after that only files with a higher lexical ordering than that file to be captured.
        • -
        -
      • -
      -

      Setting Ascending Keys is only recommended if you have strict control over the naming of files and can ensure they are added in increasing lexical ordering.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SFTP source connector.

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressHost and port of the SFTP server. Example: myserver.com:22stringRequired
      /usernameUsernameUsername for authentication.stringRequired
      /passwordPasswordPassword for authentication. Only one of Password or SSHKey must be provided.string
      /sshKeySSH KeySSH Key for authentication. Only one of Password or SSHKey must be provided.string
      /directoryDirectoryDirectory to capture files from. All files in this directory and any subdirectories will be included.stringRequired
      /matchFilesMatch Files RegexFilter applied to all file names in the directory. If provided, only files whose path (relative to the directory) matches this regex will be captured. For example, you can use .*\.json to only capture json files.string
      /advancedOptions for advanced users. You should not typically need to modify these.object
      /advanced/ascendingKeysAscending KeysMay improve sync speeds by listing files from the end of the last sync, rather than listing all files in the configured directory. This requires that you write files in ascending lexicographic order, such as an RFC-3339 timestamp, so that lexical path ordering matches modification time ordering.booleanfalse
      /parserParser ConfigurationConfigures how files are parsed (optional, see below)object
      /parser/compressionCompressionDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.null, stringnull
      /parser/formatFormatDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.object{"type":"auto"}
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamPrefixPath to the captured directory.stringRequired
      -

      Sample

      -
      captures:
      ${CAPTURE_NAME}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/source-sftp:dev"
      config:
      address: myserver.com:22
      username: <SECRET>
      password: <SECRET>
      directory: /data
      parser:
      compression: zip
      format:
      type: csv
      config:
      delimiter: ","
      encoding: UTF-8
      errorThreshold: 5
      headers: [ID, username, first_name, last_name]
      lineEnding: "\\r"
      quote: '"'
      bindings:
      - resource:
      stream: /data
      target: ${COLLECTION_NAME}
      -

      Advanced: Parsing SFTP Files

      -

      SFTP servers can support a wider variety of file types than other data source systems. For each of -these file types, Flow must parse and translate data into collections with defined fields and JSON -schemas.

      -

      By default, the parser will automatically detect the type and shape of the data in your bucket, -so you won't need to change the parser configuration for most captures.

      -

      However, the automatic detection may be incorrect in some cases. -To fix or prevent this, you can provide explicit information in the parser configuration, -which is part of the endpoint configuration for this connector.

      -

      The parser configuration includes:

      -
        -
      • -

        Compression: Specify how the bucket contents are compressed. -If no compression type is specified, the connector will try to determine the compression type automatically. -Options are:

        -
          -
        • zip
        • -
        • gzip
        • -
        • zstd
        • -
        • none
        • -
        -
      • -
      • -

        Format: Specify the data format, which determines how it will be parsed. -Options are:

        -
          -
        • Auto: If no format is specified, the connector will try to determine it automatically.
        • -
        • Avro
        • -
        • CSV
        • -
        • JSON
        • -
        • Protobuf
        • -
        • W3C Extended Log
        • -
        -
        info

        At this time, Flow only supports SFTP captures with data of a single file type. -Support for multiple file types, which can be configured on a per-binding basis, -will be added in the future.

        For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type.

        -
      • -
      -

      CSV configuration

      -

      CSV files include several additional properties that are important to the parser. -In most cases, Flow is able to automatically determine the correct values, -but you may need to specify for unusual datasets. These properties are:

      -
        -
      • -

        Delimiter. Options are:

        -
          -
        • Comma (",")
        • -
        • Pipe ("|")
        • -
        • Space ("0x20")
        • -
        • Semicolon (";")
        • -
        • Tab ("0x09")
        • -
        • Vertical tab ("0x0B")
        • -
        • Unit separator ("0x1F")
        • -
        • SOH ("0x01")
        • -
        • Auto
        • -
        -
      • -
      • -

        Encoding type, specified by its WHATWG label.

        -
      • -
      • -

        Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture.

        -
      • -
      • -

        Escape characters. Options are:

        -
          -
        • Backslash ("\\")
        • -
        • Disable escapes ("")
        • -
        • Auto
        • -
        -
      • -
      • -

        Optionally, a list of column Headers, if not already included in the first row of the CSV file.

        -

        If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. -The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file.

        -
      • -
      • -

        Line ending values

        -
          -
        • CRLF ("\\r\\n") (Windows)
        • -
        • CR ("\\r")
        • -
        • LF ("\\n")
        • -
        • Record Separator ("0x1E")
        • -
        • Auto
        • -
        -
      • -
      • -

        Quote character

        -
          -
        • Double Quote ("\"")
        • -
        • Single Quote (")
        • -
        • Disable Quoting ("")
        • -
        • Auto
        • -
        -
      • -
      -

      The sample specification above includes these fields.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/index.html deleted file mode 100644 index a24e5cefbd..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/index.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - -Slack | Estuary Flow - - - - - - - - - -

      Slack

      -

      This connector captures data from Slack into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-slack:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Slack APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -
        -
      • Slack workspace URL or API token for authentication.
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Slack source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /join_channelsJoin ChannelsWhether to join all channelsbooleantrue
      /lookback_windowThreads Lookback window (Days)How far into the past to look for messages in threads.integerRequired
      /start_dateStart DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Slack project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-slack:dev
      config:
      credentials:
      auth_type: OAuth
      access_token: {secret}
      client_id: {your_client_id}
      client_secret: {secret}
      join_channels: true
      lookback_window: 7
      start_date: 2017-01-25T00:00:00Z
      bindings:
      - resource:
      stream: channel_members
      syncMode: full_refresh
      target: ${PREFIX}/channel_members
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/index.html deleted file mode 100644 index 7662d24dc1..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - -Snapchat Marketing | Estuary Flow - - - - - - - - - -

      Snapchat Marketing

      -

      This connector captures data from Snapchat Marketing into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-snapchat:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      This connector can be used to sync the following tables from Snapchat:

      -
        -
      • Adaccounts
      • -
      • Ads
      • -
      • Adsquads
      • -
      • Campaigns
      • -
      • Creatives
      • -
      • Media
      • -
      • Organizations
      • -
      • Segments
      • -
      • AdaccountsStatsHourly
      • -
      • AdaccountsStatsDaily
      • -
      • AdaccountsStatsLifetime
      • -
      • AdsStatsHourly
      • -
      • AdsStatsDaily
      • -
      • AdsStatsHourly
      • -
      • AdsStatsDaily
      • -
      • AdsStatsLifetime
      • -
      • AdsquadsStatsDaily
      • -
      • AdsquadsStatsLifetime
      • -
      • CampaignsStatsHourly
      • -
      • CampaignsStatsDaily
      • -
      • CampaignsStatsLifetime
      • -
      -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -
        -
      • A Snapchat Marketing account with permission to access data from accounts you want to sync.
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Snapchat source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /start_dateStart DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringDefault
      /end_dateEnd DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Snapchat project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-snapchat:dev
      config:
      start_date: 2017-01-25T00:00:00Z
      end_date: 2018-01-25T00:00:00Z
      bindings:
      - resource:
      stream: lists
      syncMode: full_refresh
      target: ${PREFIX}/lists
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/index.html deleted file mode 100644 index b5f5498cb7..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/index.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - -Snowflake CDC Connector | Estuary Flow - - - - - - - - - -

      Snowflake CDC Connector

      -

      This connector captures change events from source tables in a Snowflake database.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A Snowflake account that includes: -
          -
        • A target database containing the tables you want to capture from.
        • -
        • A virtual warehouse which the connector can use to execute queries.
        • -
        • A schema which will hold streams and staging tables managed by the connector. The default name for this schema is ESTUARY_STAGING unless overridden in the capture's advanced configuration.
        • -
        • A user with access grants for these resources, as well as authorization to read from the desired source tables, and to create streams and transient tables in the staging schema based on the source tables.
        • -
        -
      • -
      • The host URL for your Snowflake account. This is formatted using your Snowflake account identifier, and might look something like sg31386.snowflakecomputing.com or df98701.us-central1.gcp.snowflakecomputing.com.
      • -
      -

      See the script below for details.

      -

      Setup

      -

      To set up a user account and warehouse for use with the Snowflake CDC connector, -copy and paste the following script into the Snowflake SQL editor. Modify the -variable declarations in the first few lines to set the password and optionally -customize the names involved.

      -
      set database_name = 'SOURCE_DB';         -- The database to capture from
      set warehouse_name = 'ESTUARY_WH'; -- The warehouse to execute queries in
      set estuary_user = 'ESTUARY_USER'; -- The name of the capture user
      set estuary_password = 'secret'; -- The password of the capture user
      set estuary_role = 'ESTUARY_ROLE'; -- A role for the capture user's permissions

      -- Create a role and user for Estuary
      create role if not exists identifier($estuary_role);
      grant role identifier($estuary_role) to role SYSADMIN;
      create user if not exists identifier($estuary_user)
      password = $estuary_password
      default_role = $estuary_role
      default_warehouse = $warehouse_name;
      grant role identifier($estuary_role) to user identifier($estuary_user);

      -- Create a warehouse for Estuary and grant access to it
      create warehouse if not exists identifier($warehouse_name)
      warehouse_size = xsmall
      warehouse_type = standard
      auto_suspend = 60
      auto_resume = true
      initially_suspended = true;
      grant USAGE
      on warehouse identifier($warehouse_name)
      to role identifier($estuary_role);

      -- Grant Estuary access to read from all tables in the database and to create a staging schema
      grant CREATE SCHEMA, MONITOR, USAGE
      on database identifier($database_name)
      to role identifier($estuary_role);
      grant USAGE
      on future schemas in database identifier($database_name)
      to role identifier($estuary_role);
      grant USAGE
      on all schemas in database identifier($database_name)
      to role identifier($estuary_role);
      grant SELECT
      on future tables in database identifier($database_name)
      to role identifier($estuary_role);
      grant SELECT
      on all tables in database identifier($database_name)
      to role identifier($estuary_role);

      commit;
      -

      Be sure to run the entire script with the "Run All" option.

      -

      Configuration

      -

      You can configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Snowflake CDC source connector.

      -

      Endpoint Properties

      -
      PropertyTitleDescriptionTypeRequired/Default
      /hostHost URLThe Snowflake Host used for the connection. Example: orgname-accountname.snowflakecomputing.com (do not include the protocol).stringRequired
      /accountAccountThe Snowflake account identifierstringRequired
      /databaseDatabaseThe name of the Snowflake database to capture fromstringRequired
      /userUserThe Snowflake user login namestringRequired
      /passwordPasswordThe password for the specified login userstringRequired
      /warehouseWarehouseThe Snowflake virtual warehouse used to execute queries. The default warehouse for the user will be used if this is blank.string
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/flowSchemaFlow SchemaThe schema in which Flow will create and manage its streams and staging tables.stringESTUARY_STAGING
      -

      Binding Properties

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableThe name of the table to capturestringRequired
      /schemaSchemaThe schema in which the table residesstringRequired
      -

      Polling Interval

      -

      Keeping a Snowflake compute warehouse active 24/7 can be prohibitively expensive for many users, -so the Snowflake CDC connector is designed to poll for changes at a configurable interval, at -which time it will capture into Flow all new changes since the previous execution. This polling -interval is set to 5 minutes by default, in an attempt to strike a balance between cost savings -while still providing "good enough" capture latency for most streaming uses. The interval may -be configured by editing the task spec interval property as described here.

      -

      Specifying a smaller interval can provide even lower capture latencies but is likely to incur -higher costs for Snowflake warehouse usage. A higher interval will reduce Snowflake costs by -allowing the warehouse to be idle for longer, in cases where it's okay for the captured data -to lag the source dataset by a few hours. Note that regardless of the polling interval the -output collections will contain an accurate representation of the source tables up to some -moment in time, the interval merely controls how frequent and fine-grained the updates are.

      -

      Sample Configuration

      -
      captures:
      ${prefix}/source-snowflake:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-snowflake:v1
      config:
      host: cf22902.us-central1.gcp.snowflakecomputing.com
      account: cf22902
      database: SOURCE_DB
      user: ESTUARY_USER
      password: secret
      bindings:
      - resource:
      schema: ${schema_name}
      table: ${table_name}
      target: ${prefix}/collection_name
      interval: 30m
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/index.html deleted file mode 100644 index ba586f4bf8..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - -Stripe | Estuary Flow - - - - - - - - - -

      Stripe

      -

      This connector captures data from Stripe into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-stripe:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Stripe API:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Stripe source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /account_idAccount IDYour Stripe account ID (starts with 'acct_', find yours here https://dashboard.stripe.com/settings/accountstringRequired
      /client_secretSecret KeyStripe API key (usually starts with 'sk_live_'; find yours here https://dashboard.stripe.com/apikeysstringRequired
      /lookback_window_daysLookback Window in days (Optional)When set, the connector will always re-export data from the past N days, where N is the value set here. This is useful if your data is frequently updated after creation.integer0
      /start_dateReplication start dateUTC date and time in the format 2017-01-25T00:00:00Z. Only data generated after this date will be replicated.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource from Stripe from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Choosing your start date and lookback window

      -

      The connector will continually capture data beginning on the Replication start date you choose.

      -

      However, some data from the Stripe API is mutable; for example, a draft invoice can be completed at a later date than it was created. -To account for this, it's useful to set the Lookback Window. When this is set, at a given point in time, the connector will not only look for new data; -it will also capture changes made to data within the window.

      -

      For example, if you start the connector with the start date of 2022-06-06T00:00:00Z (June 6) and the lookback window of 3, the connector will begin to capture data starting from June 3. -As time goes on while the capture remains active, the lookback window rolls forward along with the current timestamp. -On June 10, the connector will continue to monitor data starting from June 7 and capture any changes to that data, and so on.

      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-stripe:dev
      config:
      account_id: 00000000
      client_secret: <secret>
      start_date: 2022-06-18T00:00:00Z
      bindings:
      - resource:
      stream: balance_transactions
      syncMode: incremental
      target: ${PREFIX}/balancetransactions
      - resource:
      stream: bank_accounts
      syncMode: full_refresh
      target: ${PREFIX}/bankaccounts
      - resource:
      stream: charges
      syncMode: incremental
      target: ${PREFIX}/charges
      - resource:
      stream: checkout_sessions
      syncMode: incremental
      target: ${PREFIX}/checkoutsessions
      - resource:
      stream: checkout_sessions_line_items
      syncMode: incremental
      target: ${PREFIX}/checkoutsessionslineitems
      - resource:
      stream: coupons
      syncMode: incremental
      target: ${PREFIX}/coupons
      - resource:
      stream: customer_balance_transactions
      syncMode: full_refresh
      target: ${PREFIX}/customerbalancetransactions
      - resource:
      stream: customers
      syncMode: incremental
      target: ${PREFIX}/customers
      - resource:
      stream: disputes
      syncMode: incremental
      target: ${PREFIX}/disputes
      - resource:
      stream: events
      syncMode: incremental
      target: ${PREFIX}/events
      - resource:
      stream: invoice_items
      syncMode: incremental
      target: ${PREFIX}/invoice_items
      - resource:
      stream: invoice_line_items
      syncMode: full_refresh
      target: ${PREFIX}/invoicelineitems
      - resource:
      stream: invoices
      syncMode: incremental
      target: ${PREFIX}/invoices
      - resource:
      stream: payment_intents
      syncMode: incremental
      target: ${PREFIX}/paymentintents
      - resource:
      stream: payouts
      syncMode: incremental
      target: ${PREFIX}/payouts
      - resource:
      stream: plans
      syncMode: incremental
      target: ${PREFIX}/plans
      - resource:
      stream: products
      syncMode: incremental
      target: ${PREFIX}/products
      - resource:
      stream: promotion_codes
      syncMode: incremental
      target: ${PREFIX}/promotioncodes
      - resource:
      stream: refunds
      syncMode: incremental
      target: ${PREFIX}/refunds
      - resource:
      stream: subscription_items
      syncMode: full_refresh
      target: ${PREFIX}/subscriptionitems
      - resource:
      stream: subscriptions
      syncMode: incremental
      target: ${PREFIX}/subscriptions
      - resource:
      stream: transfers
      syncMode: incremental
      target: ${PREFIX}/transfers
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/index.html deleted file mode 100644 index e81dd53390..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - -Survey Monkey | Estuary Flow - - - - - - - - - -

      Survey Monkey

      -

      This connector captures data from SurveyMonkey surveys into Flow collections via the SurveyMonkey API.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-surveymonkey:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      You'll need to configure a SurveyMonkey private app to integrate with Flow.

      -

      Setup

      -
        -
      1. Go to your your SurveyMonkey apps page and create a new private app.
      2. -
      3. Set the following required scopes: -
          -
        • View surveys
        • -
        • View responses
        • -
        -
      4. -
      5. Deploy the app. This requires a paid SurveyMonkey plan; otherwise, the app will be deleted in 90 days.
      6. -
      -

      Once the app is set up, there are two ways to authenticate SurveyMonkey in Flow: using OAuth in the web app, or using an access token with the flowctl CLI.

      -

      OAuth authentication in the web app

      -

      You'll need the username and password of a SurveyMonkey user that is part of the team -for which the private app was created.

      -

      Manual authentication with flowctl

      -

      Note the client ID, secret, and access token for the private app you created. You'll use these in the connector configuration.

      -

      Performance considerations

      -

      The SurveyMonkey API imposes call limits of 500 per day -and 120 per minute.

      -

      This connector uses caching to avoid exceeding these limits.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SurveyMonkey source connector.

      -

      Properties

      -

      Endpoint

      -

      The properties in the table below reflect the manual authentication method. -If you're working in the Flow web app, you'll use OAuth2, -so many of these properties aren't required.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsCredentialsCredentials for the serviceobjectRequired
      /credentials/access_tokenAccess TokenAccess Token for your SurveyMonkey private app.stringRequired
      /credentials/client_idClient IDClient ID associated with your SurveyMonkey private app.stringRequired
      /credentials/client_secretClient SecretClient secret associated with your SurveyMonkey private app.stringRequired
      /start_dateStart DateUTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      /survey_idsSurvey Monkey survey IDsIDs of the surveys from which you'd like to replicate data. If left empty, data from all boards to which you have access will be replicated.array
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamSurveyMonkey resource from which a collection is captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      This sample specification reflects the manual authentication method.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-surveymonkey:dev
      config:
      credentials:
      access_token: {secret}
      client_id: XXXXXXXXXXXXXXXX
      client_secret: {secret}
      start_date: 2021-01-25T00:00:00Z
      bindings:
      - resource:
      stream: surveys
      syncMode: incremental
      target: ${PREFIX}/surveys
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/index.html deleted file mode 100644 index 0ea5f58837..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/index.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - -TikTok Marketing | Estuary Flow - - - - - - - - - -

      TikTok Marketing

      -

      This connector captures data from TikTok marketing campaigns and ads into Flow collections via the TikTok API for Business. It supports production as well as sandbox accounts.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-tiktok-marketing:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported:

      -
      ResourceProductionSandbox
      AdvertisersXX
      Ad GroupsXX
      AdsXX
      CampaignsXX
      Ads Reports HourlyXX
      Ads Reports DailyXX
      Ads Reports LifetimeXX
      Advertisers Reports HourlyX
      Advertisers Reports DailyX
      Advertisers Reports LifetimeX
      Ad Groups Reports HourlyXX
      Ad Groups Reports DailyXX
      Ad Groups Reports LifetimeXX
      Campaigns Reports HourlyXX
      Campaigns Reports DailyXX
      Campaigns Reports LifetimeXX
      Advertisers Audience Reports HourlyX
      Advertisers Audience Reports DailyX
      Advertisers Audience Reports LifetimeX
      Ad Group Audience Reports HourlyXX
      Ad Group Audience Reports DailyXX
      Ads Audience Reports HourlyXX
      Ads Audience Reports DailyXX
      Campaigns Audience Reports By Country HourlyXX
      Campaigns Audience Reports By Country DailyXX
      -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      Prerequisites differ depending on whether you have a production or sandbox -TikTok for Business account, and on whether you'll use the Flow web app or the flowctl CLI.

      -

      OAuth authentication in the web app (production accounts)

      -

      If you have a TikTok marketing account in production and will use the Flow web app, you'll be able to quickly log in using OAuth.

      -

      You'll need:

      -
        -
      • -

        A TikTok for Business account with one or more active campaigns.

        -
          -
        • Note the username and password used to sign into this account
        • -
        -
      • -
      -

      Sandbox access token authentication in the web app or CLI

      -

      If you're working in a Sandbox TikTok for Business account, you'll authenticate with an access token in both the web app and CLI.

      -

      You'll need:

      - -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the TikTok Marketing source connector.

      -

      Properties

      -

      Endpoint

      -

      The properties in the table below reflect the manual authentication method for Sandbox accounts. -If you're using a production account, you'll use OAuth2 to authenticate in the Flow web app, -so many of these properties aren't required.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsAuthentication MethodAuthentication methodobjectRequired
      /credentials/auth_typeAuthentication typeSet to sandbox_access_token to manually authenticate a Sandbox.stringRequired
      /credentials/advertiser_idAdvertiser IDThe Advertiser ID generated for the developer's Sandbox application.string
      /credentials/access_tokenAccess TokenThe long-term authorized access token.string
      /end_dateEnd DateThe date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DD. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the data till the current date.string
      /report_granularityReport Aggregation GranularityThe granularity used for aggregating performance data in reports. Choose DAY, LIFETIME, or HOUR.string
      /start_dateStart DateReplication Start DateThe Start Date in format: YYYY-MM-DD. Any data before this date will not be replicated. If this parameter is not set, all data will be replicated.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamTikTok resource from which a collection is captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      This sample specification reflects the access token method for Sandbox accounts.

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-tiktok-marketing:dev
      config:
      credentials:
      auth_type: sandbox_access_token
      access_token: {secret}
      advertiser_id: {secret}
      end_date: 2022-01-01
      report_granularity: DAY
      start_date: 2020-01-01
      bindings:
      - resource:
      stream: campaigns
      syncMode: incremental
      target: ${PREFIX}/campaigns
      {...}
      -

      Report aggregation

      -

      Many of the resources this connector supports are reports. -Data in these reports is aggregated into rows based on the granularity you select in the configuration.

      -

      You can choose hourly, daily, or lifetime granularity. For example, if you choose daily granularity, the report will contain one row for each day.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/index.html deleted file mode 100644 index 02cff66d28..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - -Twilio | Estuary Flow - - - - - - - - - -

      Twilio

      -

      This connector captures data from Twilio into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-twilio:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Twilio APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -
        -
      • Twilio Auth Token for authentication.
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Twilio source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /account_sidAccount IDTwilio account SIDstringRequired
      /auth_tokenAuth TokenTwilio Auth Token.stringRequired
      /start_dateReplication Start DateUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.stringRequired
      /lookback_windowLookback windowHow far into the past to look for records. (in minutes)integerDefault
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your Twilio project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-twilio:dev
      config:
      account_sid: <your account ID>
      auth_token: <secret>
      start_date: 2017-01-25T00:00:00Z
      lookback_window: 7
      bindings:
      - resource:
      stream: accounts
      syncMode: full_refresh
      target: ${PREFIX}/accounts
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/index.html deleted file mode 100644 index 8b3e81932e..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/index.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - -WooCommerce | Estuary Flow - - - - - - - - - -

      WooCommerce

      -

      This connector captures data from WooCommerce into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-woocommerce:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To set up the WooCommerce source connector with: you need:

      -
        -
      • WooCommerce 3.5+
      • -
      • WordPress 4.4+
      • -
      • Pretty permalinks in Settings > Permalinks so that the custom endpoints are supported. e.g. /%year%/%monthnum%/%day%/%postname%/
      • -
      • A new API key with read permissions and access to Customer key and Customer Secret.
      • -
      -

      Setup

      -

      Follow the steps below to set up the WooCommerce source connector.

      -

      Set up WooCommerce

      -
        -
      1. Generate a new Rest API key.
      2. -
      3. Obtain Customer key and Customer Secret.
      4. -
      -

      Set up the WooCommerce connector in Estuary Flow

      -
        -
      1. Log into your Estuary Flow account.
      2. -
      3. In the left navigation bar, click on "Captures". In the top-left corner, click "Connector Search".
      4. -
      5. Enter the name for the WooCommerce connector and select "WooCommerce" from the dropdown.
      6. -
      7. Fill in "Customer key" and "Customer Secret" with the data from Step 1 of this guide.
      8. -
      9. Fill in "Shop Name". For example, if your shop URL is https://EXAMPLE.com, the shop name is 'EXAMPLE.com'.
      10. -
      11. Choose the start date you want to start syncing data from.
      12. -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the WooCommerce source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /customer_keyCustomer KeyCustomer Key for API in WooCommerce shopstringRequired
      /customer_secretCustomer SecretCustomer Secret for API in WooCommerce shopstringRequired
      /shop_nameShop NameThe name of the store.stringRequired
      /start_dateStart DateThe date you would like to replicate data from. Format: YYYY-MM-DDstringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your WooCommerce project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -
      {
      "properties": {

      }
      }
      -

      Supported Streams

      -

      The WooCommerce source connector in Estuary Flow supports the following streams:

      -
        -
      • Coupons (Incremental)
      • -
      • Customers (Incremental)
      • -
      • Orders (Incremental)
      • -
      • Order notes
      • -
      • Payment gateways
      • -
      • Product attribute terms
      • -
      • Product attributes
      • -
      • Product categories
      • -
      • Product reviews (Incremental)
      • -
      • Product shipping classes
      • -
      • Product tags
      • -
      • Product variations
      • -
      • Products (Incremental)
      • -
      • Refunds
      • -
      • Shipping methods
      • -
      • Shipping zone locations
      • -
      • Shipping zone methods
      • -
      • Shipping zones
      • -
      • System status tools
      • -
      • Tax classes
      • -
      • Tax rates
      • -
      -

      Connector-Specific Features & Highlights

      -

      Useful links:

      -

      WooCommerce Rest API Docs.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/index.html deleted file mode 100644 index 70c70f2eae..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - -YouTube Analytics | Estuary Flow - - - - - - - - - -

      YouTube Analytics

      -

      This connector captures data from YouTube Analytics into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-youtube-analytics:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system.

      -

      You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the YouTube Analytics APIs:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the YouTube Analytics source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /client_idClient IDYour Client IDstringRequired
      /client_secretSecret KeyYour Client SecretstringRequired
      /refresh_tokenRefresh TokenYour Refresh TokenstringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource of your YouTube Analytics project from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -

      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-youtube-analytics:dev
      config:
      credentials:
      auth_type: OAuth
      bindings:
      - resource:
      stream: channel_annotations_a1
      syncMode: incremental
      target: ${PREFIX}/channel_annotations_a1
      {...}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/index.html deleted file mode 100644 index 386bec9c69..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/index.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - -Zendesk Chat | Estuary Flow - - - - - - - - - -

      Zendesk Chat

      -

      This connector captures data from Zendesk into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-zendesk-chat:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Zendesk API:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -
        -
      • A Zendesk Account with permission to access data from accounts you want to sync.
      • -
      • An Access Token. We recommend creating a restricted, read-only key specifically for Estuary access to allow you to control which resources Estuary should be able to access.
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification files. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Zendesk Chat source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /start_dateStart DateThe date from which you would like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.stringRequired
      /subdomainSubdomainThis is your Zendesk subdomain that can be found in your account URL.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource in Zendesk from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-zendesk-chat:dev
      config:
      credentials:
      access_token: <secret>
      credentials: access_token
      start_date: 2022-03-01T00:00:00Z
      subdomain: my_subdomain
      bindings:
      - resource:
      stream: accounts
      syncMode: full_refresh
      target: ${PREFIX}/accounts
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/index.html b/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/index.html deleted file mode 100644 index 440119c01c..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/index.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - -Zendesk Support | Estuary Flow - - - - - - - - - -

      Zendesk Support

      -

      This connector captures data from Zendesk into Flow collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-zendesk-support:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      This connector is based on an open-source connector from a third party, with modifications for performance in the Flow system. -You can find their documentation here, -but keep in mind that the two versions may be significantly different.

      -

      Supported data resources

      -

      The following data resources are supported through the Zendesk API:

      - -

      By default, each resource is mapped to a Flow collection through a separate binding.

      -

      Prerequisites

      -

      There are two different ways to authenticate with Zendesk Support when capturing data into Flow: using OAuth2 or providing an API token. The prerequisites for both authentication methods are listed below.

      -

      OAuth2 authentication

      -
        -
      • Subdomain of your Zendesk URL. In the URL https://MY_SUBDOMAIN.zendesk.com/, MY_SUBDOMAIN is the subdomain.
      • -
      -

      API token authentication

      -
        -
      • Subdomain of your Zendesk URL. In the URL https://MY_SUBDOMAIN.zendesk.com/, MY_SUBDOMAIN is the subdomain.
      • -
      • Email address associated with your Zendesk account.
      • -
      • A Zendesk API token. See the Zendesk docs to enable tokens and generate a new token.
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog specification files. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Zendesk Support source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentials/credentialsCredentials methodType of credentials used. Set to api_token or oauth2.0.stringRequired
      /credentials/api_tokenAPI TokenThe value of the API token generated.stringRequired for API token authentication
      /credentials/emailEmailThe user email for your Zendesk account.stringRequired for API token authentication
      /credentials/client_idOAuth Client IDThe OAuth app's client ID.stringRequired for OAuth2 authentication
      /credentials/client_secretOAuth Client SecretThe OAuth app's client secret.stringRequired for OAuth2 authentication
      /credentials/access_tokenAccess TokenThe access token received from the OAuth app.stringRequired for OAuth2 authentication
      /start_dateStart DateThe date from which you'd like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.stringRequired
      /subdomainSubdomainThis is your Zendesk subdomain that can be found in your account URL. For example, in https://MY_SUBDOMAIN.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /streamStreamResource in Zendesk from which collections are captured.stringRequired
      /syncModeSync ModeConnection method.stringRequired
      cursorFieldCursor FieldField to use as a cursor when paginating through results. Required when syncMode is incremental.string
      -

      Sample

      -
      captures:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/source-zendesk-support:dev
      config:
      credentials:
      api_token: <secret>
      credentials: api_token
      email: user@domain.com
      start_date: 2022-03-01T00:00:00Z
      subdomain: my_subdomain
      bindings:
      - resource:
      stream: account_attributes
      syncMode: full_refresh
      target: ${PREFIX}/accountattributes
      - resource:
      stream: attribute_definitions
      syncMode: full_refresh
      target: ${PREFIX}/attributedefinitions
      - resource:
      stream: audit_logs
      syncMode: incremental
      cursorField:
      - created_at
      target: ${PREFIX}/auditlogs
      - resource:
      stream: brands
      syncMode: full_refresh
      target: ${PREFIX}/brands
      - resource:
      stream: custom_roles
      syncMode: full_refresh
      target: ${PREFIX}/customroles
      - resource:
      stream: group_memberships
      syncMode: incremental
      cursorField:
      - updated_at
      target: ${PREFIX}/groupmemberships
      - resource:
      stream: groups
      syncMode: incremental
      cursorField:
      - updated_at
      target: ${PREFIX}/groups
      - resource:
      stream: macros
      syncMode: incremental
      cursorField:
      - updated_at
      target: ${PREFIX}/macros
      - resource:
      stream: organizations
      syncMode: incremental
      cursorField:
      - updated_at
      target: ${PREFIX}/organizations
      - resource:
      stream: organization_memberships
      syncMode: incremental
      cursorField:
      - updated_at
      target: ${PREFIX}/organizationmemberships
      - resource:
      stream: posts
      syncMode: incremental
      cursorField:
      - updated_at
      target: ${PREFIX}/posts
      - resource:
      stream: post_comments
      syncMode: full_refresh
      target: ${PREFIX}/postcomments
      - resource:
      stream: post_comment_votes
      syncMode: full_refresh
      target: ${PREFIX}/postcommentvotes
      - resource:
      stream: post_votes
      syncMode: full_refresh
      target: ${PREFIX}/postvotes
      - resource:
      stream: satisfaction_ratings
      syncMode: incremental
      cursorField:
      - updated_at
      target: ${PREFIX}/satisfactionratings
      - resource:
      stream: schedules
      syncMode: full_refresh
      target: ${PREFIX}/schedules
      - resource:
      stream: sla_policies
      syncMode: full_refresh
      target: ${PREFIX}/slapoliciies
      - resource:
      stream: tags
      syncMode: full_refresh
      target: ${PREFIX}/tags
      - resource:
      stream: ticket_audits
      syncMode: incremental
      cursorField:
      - created_at
      target: ${PREFIX}/ticketaudits
      - resource:
      stream: ticket_comments
      syncMode: incremental
      cursorField:
      - created_at
      target: ${PREFIX}/ticketcomments
      - resource:
      stream: ticket_fields
      syncMode: incremental
      cursorField:
      - updated_at
      target: ${PREFIX}/ticketfields
      - resource:
      stream: ticket_forms
      syncMode: incremental
      cursorField:
      - updated_at
      target: ${PREFIX}/ticketforms
      - resource:
      stream: ticket_metrics
      syncMode: incremental
      cursorField:
      - updated_at
      target: ${PREFIX}/ticketmetrics
      - resource:
      stream: ticket_metric_events
      syncMode: incremental
      cursorField:
      - time
      target: ${PREFIX}/ticketmetricevents
      - resource:
      stream: ticket_skips
      syncMode: incremental
      cursorField:
      - updated_at
      target: ${PREFIX}/ticketskips
      - resource:
      stream: tickets
      syncMode: incremental
      cursorField:
      - after_cursor
      target: ${PREFIX}/tickets
      - resource:
      stream: users
      syncMode: incremental
      cursorField:
      - after_cursor
      target: ${PREFIX}/users
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird/index.html b/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird/index.html deleted file mode 100644 index ee46fbdee4..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird/index.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - -Tinybird | Estuary Flow - - - - - - - - - -

      Tinybird

      -

      In this guide, you'll learn how to use Estuary Flow to push data streams to Tinybird.

      -

      Tinybird is a data platform for user-facing analytics.

      -

      Prerequisites

      -
        -
      • An Estuary account & collection
      • -
      • A Tinybird account & Workspace
      • -
      -

      Connecting Estuary Flow to Tinybird

      -
        -
      1. Create a new access token to use for the Tinybird connection. You can do this from the Estuary Admin Dashboard. -Export Dekaf Access Token
      2. -
      3. In your Tinybird Workspace, create a new Data Source and use the Kafka Connector. -Configure Estuary Flow Data Source
      4. -
      -

      To configure the connection details, use the following settings.

      -

      Bootstrap servers: dekaf.estuary.dev -SASL Mechanism: PLAIN -SASL Username: {} -SASL Password: Estuary Refresh Token (Generate your token in the Estuary Admin Dashboard)

      -

      Tick the Decode Avro messages with Schema Register box, and use the following settings:

      -
        -
      • URL: https://dekaf.estuary.dev
      • -
      • Username: {}
      • -
      • Password: The same Estuary Refresh Token as above
      • -
      -

      Configure Estuary Flow Schema Registry

      -

      Click Next and you will see a list of topics. These topics are the collections you have in Estuary. -Select the collection you want to ingest into Tinybird, and click Next.

      -

      Configure your consumer group as needed.

      -

      Finally, you will see a preview of the Data Source schema. Feel free to make any modifications as required, then click -Create Data Source.

      -

      This will complete the connection with Tinybird, and new data from the Estuary Flow collection will arrive in your -Tinybird Data Source in real-time.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/dekaf/index.html b/pr-preview/pr-1594/reference/Connectors/dekaf/index.html deleted file mode 100644 index 517d5321fc..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/dekaf/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - -Dekaf integrations | Estuary Flow - - - - - - - - - - - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/index.html b/pr-preview/pr-1594/reference/Connectors/index.html deleted file mode 100644 index d7a96321f2..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - -Connectors | Estuary Flow - - - - - - - - - - - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/index.html deleted file mode 100644 index 5cd0d57df7..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/index.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - -Google BigQuery | Estuary Flow - - - - - - - - - -

      Google BigQuery

      -

      This Flow connector materializes Flow collections into tables within a Google BigQuery dataset. -It allows both standard and delta updates.

      -

      The connector uses your Google Cloud service account to materialize to BigQuery tables by way of files in a Google Cloud Storage (GCS) bucket. -The tables in the bucket act as a temporary staging area for data storage and retrieval.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/materialize-bigquery:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      - -
      tip

      If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps.

      -

      Setup

      -

      To configure your service account, complete the following steps.

      -
        -
      1. -

        Log into the Google Cloud console and create a service account. -During account creation:

        -
          -
        1. Grant the user access to the project.
        2. -
        3. Grant the user roles roles/bigquery.dataEditor, roles/bigquery.jobUser, and roles/storage.objectAdmin.
        4. -
        5. Click Done.
        6. -
        -
      2. -
      3. -

        Select the new service account from the list of service accounts. On the Keys tab, click Add key and create a new JSON key.

        -

        The key is automatically downloaded. You'll use it to configure the connector.

        -
      4. -
      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a BigQuery materialization, which will direct one or more of your Flow collections to your desired tables within a BigQuery dataset.

      -

      A BigQuery dataset is the top-level container within a project, and comprises multiple tables. -You can think of a dataset as somewhat analogous to a schema in a relational database. -For a complete introduction to resource organization in Bigquery, see the BigQuery docs.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /project_idProject IDThe project ID for the Google Cloud Storage bucket and BigQuery dataset.StringRequired
      /credentials_jsonService Account JSONThe JSON credentials of the service account to use for authorization.StringRequired
      /regionRegionThe GCS region.StringRequired
      /datasetDatasetBigQuery dataset for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables.StringRequired
      /bucketBucketName of the GCS bucket.StringRequired
      /bucket_pathBucket pathBase path within the GCS bucket. Also called "Folder" in the GCS console.String
      /billing_project_idBilling project IDThe project ID to which these operations are billed in BigQuery. Typically, you want this to be the same as project_id (the default).StringSame as project_id
      -

      To learn more about project billing, see the BigQuery docs.

      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableTable in the BigQuery dataset to store materialized result in.stringRequired
      /datasetTableAlternative dataset for this table. Must be located in the region set in the endpoint configuration.string
      /delta_updatesDelta updates.Whether to use standard or delta updatesbooleanfalse
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      config:
      project_id: our-bigquery-project
      dataset: materialized-data
      region: US
      bucket: our-gcs-bucket
      bucket_path: bucket-path/
      credentials_json: <secret>
      image: ghcr.io/estuary/materialize-bigquery:dev
      bindings:
      - resource:
      table: ${table_name}
      source: ${PREFIX}/${source_collection}
      -

      Sync Schedule

      -

      This connector supports configuring a schedule for sync frequency. You can read -about how to configure this here.

      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      -

      Enabling delta updates will prevent Flow from querying for documents in your BigQuery table, which can reduce latency and costs for large datasets. -If you're certain that all events will have unique keys, enabling delta updates is a simple way to improve -performance with no effect on the output. -However, enabling delta updates is not suitable for all workflows, as the resulting table in BigQuery won't be fully reduced.

      -

      You can enable delta updates on a per-binding basis:

      -
          bindings:
      - resource:
      table: ${table_name}
      delta_updates: true
      source: ${PREFIX}/${source_collection}
      -

      Table Partitioning

      -

      Tables are automatically created with -clustering based on the Flow collection -primary keys. Tables are not created with any other partitioning, but pre-existing partitioned tables can be materialized to.

      -

      It isn't possible to alter the partitioning of an existing table, but you can convert an existing table to one with partitioning by creating a new table and copying the data from the existing table into it. This can be done to tables that the connector is materializing to, as long as the materializing task is temporarily disabled while doing the conversion.

      -

      To convert an existing materialized table to one with different partitioning:

      -
        -
      1. Pause your materialization by disabling it from the UI or editing the task specification with the CLI.
      2. -
      3. Create a new table with the partitioning you want from the data in the existing table:
      4. -
      -
      create table <your_dataset>.<your_schema>.<your_table>_copy
      partition by <your_partitioning>
      as select * from <your_dataset>.<your_schema>.<your_table>;
      -
        -
      1. Verify that the data in <your_table>_copy looks good, then drop the original table:
      2. -
      -
      drop table <your_dataset>.<your_schema>.<your_table>;
      -
        -
      1. "Rename" <your_table>_copy back to <your_table> by copying it as a new table with the original name of <your_table>:
      2. -
      -
      create table <your_dataset>.<your_schema>.<your_table> copy <your_dataset>.<your_schema>.<your_table>_copy;
      -
        -
      1. Verify that the data in <your_table> looks good, then drop the <your_table>_copy table:
      2. -
      -
      drop table <your_dataset>.<your_schema>.<your_table>_copy;
      -
        -
      1. Re-enable the materialization to continue materializing data to the now partitioned table.
      2. -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/index.html deleted file mode 100644 index be7c38e90f..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/index.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - -Elasticsearch | Estuary Flow - - - - - - - - - -

      Elasticsearch

      -

      This connector materializes Flow collections into indices in an Elasticsearch cluster.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/materialize-elasticsearch:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • An Elastic cluster with a known endpoint
      • -
      • The role used to connect to Elasticsearch must have at least the following privileges (see Elastic's documentation on defining roles and security privileges): -
          -
        • Cluster privilege of monitor
        • -
        • For each index to be created: read, write, view_index_metadata, and create_index. When creating Index privileges, you can use a wildcard "*" to grant the privileges to all indices.
        • -
        -
      • -
      • At least one Flow collection
      • -
      -
      tip

      If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps.

      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure an Elasticsearch materialization, which will direct the contents of these Flow collections into Elasticsearch indices.

      -

      Authentication

      -

      You can authenticate to Elasticsearch using either a username and password, or using an API key.

      -

      The connector will automatically create an Elasticsearch index for each binding of the materialization with index mappings for each selected field of the binding. It uses the last component of the collection name as the name of the index by default. You can customize the name of the index using the index property in the resource configuration for each binding.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /endpointEndpointEndpoint host or URL. Must start with http:// or https://. If using Elastic Cloud this follows the format https://CLUSTER_ID.REGION.CLOUD_PLATFORM.DOMAIN:PORTstringRequired
      /credentialsobjectRequired
      /credentials/usernameUsernameUsername to use for authenticating with Elasticsearch.string
      /credentials/passwordPasswordPassword to use for authenticating with Elasticsearch.string
      /credentials/apiKeyAPI KeyAPI key for authenticating with the Elasticsearch API. Must be the 'encoded' API key credentials, which is the Base64-encoding of the UTF-8 representation of the id and api_key joined by a colon (:).string
      advanced/number_of_replicasIndex ReplicasThe number of replicas to create new indices with. Leave blank to use the cluster default.integer
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /indexindexName of the Elasticsearch index to store the materialization results.stringRequired
      /delta_updatesDelta updatesWhether to use standard or delta updates.booleanfalse
      /number_of_shardsNumber of shardsThe number of shards to create the index with. Leave blank to use the cluster default.integer1
      -

      Sample

      -
      materializations:
      PREFIX/mat_name:
      endpoint:
      connector:
      # Path to the latest version of the connector, provided as a Docker image
      image: ghcr.io/estuary/materialize-elasticsearch:dev
      config:
      endpoint: https://ec47fc4d2c53414e1307e85726d4b9bb.us-east-1.aws.found.io:9243
      credentials:
      username: flow_user
      password: secret
      # If you have multiple collections you need to materialize, add a binding for each one
      # to ensure complete data flow-through
      bindings:
      - resource:
      index: my-elasticsearch-index
      source: PREFIX/source_collection
      -

      Setup

      -

      You must configure your Elasticsearch cluster to allow connections from Estuary. It may be necessary to allowlist the Estuary IP addresses.

      -

      Alternatively, you can allow secure connections via SSH tunneling. To do so:

      -
        -
      1. -

        Refer to the guide to configure an SSH server on the cloud platform of your choice.

        -
      2. -
      3. -

        Configure your connector as described in the configuration section above, with the addition of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networks for additional details and a sample.

        -
      4. -
      -

      Delta updates

      -

      This connector supports both standard and delta updates. You must choose an option for each binding.

      -

      Learn more about delta updates and the implications of using each update type.

      -

      Keyword Fields

      -

      Collection fields with type: string will have keyword index mappings created for them if they -are part of the collection key, and text mappings for them if they are not part of the collection -key.

      -

      To materialize a collection field with type: string as a keyword mapping instead of a text -mapping, configure the field selection for -the binding to indicate which fields should having keyword mappings created for them using the key -and value of "keyword": true. This can be changed by updating the JSON in the Advanced -Specification Editor in the web app or by using flowctl to edit the specification directly, see -edit a materialization for more details.

      -

      An example JSON configuration for a binding that materializes stringField as a keyword mapping -is shown below:

      -
      {
      "bindings": [
      {
      "resource": {
      "index": "my-elasticsearch-index"
      },
      "source": "PREFIX/source_collection",
      "fields": {
      "include": {
      "stringField": {
      "keyword": true
      }
      },
      "recommended": true
      }
      }
      ]
      }
      -

      Changelog

      -

      The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed.

      -

      Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version.

      -

      V3: 2023-08-21

      -
        -
      • -

        Index mappings will now be created based on the selected fields of the materialization. Previously only dynamic runtime mappings were created, and the entire root document was always materialized.

        -
      • -
      • -

        Moved "number of replicas" configuration for new indices to an advanced, optional, endpoint-level configuration.

        -
      • -
      • -

        The "number of shards" resource configuration is now optional.

        -
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/index.html deleted file mode 100644 index 466716381d..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/index.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - -Firebolt | Estuary Flow - - - - - - - - - -

      Firebolt

      -

      This Flow connector materializes delta updates of Flow collections into Firebolt FACT or DIMENSION tables.

      -

      To interface between Flow and Firebolt, the connector uses Firebolt's method for loading data: -First, it stores data as JSON documents in an S3 bucket. -It then references the S3 bucket to create a Firebolt external table, -which acts as a SQL interface between the JSON documents and the destination table in Firebolt.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/materialize-firebolt:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A Firebolt database with at least one engine -
          -
        • The engine must be started before creating the materialization.
        • -
        • It's important that the engine stays up throughout the lifetime of the materialization. To ensure this is the case, select Edit Engine on your engine. In the engine settings, set Auto-stop engine after to Always On.
        • -
        -
      • -
      • An S3 bucket where JSON documents will be stored prior to loading -
          -
        • The bucket must be in a supported AWS region matching your Firebolt database.
        • -
        • The bucket may be public, or may be accessible by an IAM user. To configure your IAM user, see the steps below.
        • -
        -
      • -
      • At least one Flow collection
      • -
      -
      tip

      If you haven't yet captured your data from its external source, -start at the beginning of the guide to create a dataflow. -You'll be referred back to this connector-specific documentation at the appropriate steps.

      -

      Setup

      -

      For non-public buckets, you'll need to configure access in AWS IAM.

      -
        -
      1. -

        Follow the Firebolt documentation to set up an IAM policy and role, and add it to the external table definition.

        -
      2. -
      3. -

        Create a new IAM user. During setup:

        -
          -
        1. -

          Choose Programmatic (access key) access. This ensures that an access key ID and secret access key are generated. You'll use these to configure the connector.

          -
        2. -
        3. -

          On the Permissions page, choose Attach existing policies directly and attach the policy you created in step 1.

          -
        4. -
        -
      4. -
      5. -

        After creating the user, download the IAM credentials file. -Take note of the access key ID and secret access key and use them to configure the connector. -See the Amazon docs if you lose your credentials.

        -
      6. -
      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a Firebolt materialization, which will direct Flow data to your desired Firebolt tables via an external table.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /aws_key_idAWS key IDAWS access key ID for accessing the S3 bucket.string
      /aws_regionAWS regionAWS region the bucket is in.string
      /aws_secret_keyAWS secret access keyAWS secret key for accessing the S3 bucket.string
      /databaseDatabaseName of the Firebolt database.stringRequired
      /engine_urlEngine URLEngine URL of the Firebolt database, in the format: <engine-name>.<organization>.<region>.app.firebolt.io.stringRequired
      /passwordPasswordFirebolt password.stringRequired
      /s3_bucketS3 bucketName of S3 bucket where the intermediate files for external table will be stored.stringRequired
      /s3_prefixS3 prefixA prefix for files stored in the bucket.string
      /usernameUsernameFirebolt username.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableName of the Firebolt table to store materialized results in. The external table will be named after this table with an _external suffix.stringRequired
      /table_typeTable typeType of the Firebolt table to store materialized results in. See the Firebolt docs for more details.stringRequired
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      config:
      database: my-db
      engine_url: my-db-my-engine-name.my-organization.us-east-1.app.firebolt.io
      password: secret
      # For public S3 buckets, only the bucket name is required
      s3_bucket: my-bucket
      username: firebolt-user
      # Path to the latest version of the connector, provided as a Docker image
      image: ghcr.io/estuary/materialize-firebolt:dev
      # If you have multiple collections you need to materialize, add a binding for each one
      # to ensure complete data flow-through
      bindings:
      - resource:
      table: table-name
      table_type: fact
      source: ${PREFIX}/${source_collection}
      -

      Delta updates

      -

      Firebolt is an insert-only system; it doesn't support updates or deletes. -Because of this, the Firebolt connector operates only in delta updates mode. -Firebolt stores all deltas — the unmerged collection documents — directly.

      -

      In some cases, this will affect how materialized views look in Firebolt compared to other systems that use standard updates.

      -

      Reserved words

      -

      Firebolt has a list of reserved words, which my not be used in identifiers. -Collections with field names that include a reserved word will automatically be quoted as part of a Firebolt materialization.

      -
      Reserved words
      allfalseor
      alterfetchorder
      andfirstouter
      arrayfloatover
      betweenfrompartition
      bigintfullprecision
      boolgenerateprepare
      booleangroupprimary
      bothhavingquarter
      caseifright
      castilikerow
      charinrows
      concatinnersample
      copyinsertselect
      createintset
      crossintegershow
      current_dateintersecttext
      current_timestampintervaltime
      databaseistimestamp
      dateisnulltop
      datetimejointrailing
      decimaljoin_typetrim
      deleteleadingtrue
      describelefttruncate
      distinctlikeunion
      doublelimitunknown_char
      doublecolonlimit_distinctunnest
      dowlocaltimestampunterminated_string
      doylongupdate
      dropnaturalusing
      empty_identifiernextvarchar
      epochnotweek
      exceptnullwhen
      executenumericwhere
      existsoffsetwith
      explainon
      extractonly
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/index.html deleted file mode 100644 index 9ba7c45764..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/index.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - -Google Sheets | Estuary Flow - - - - - - - - - -

      Google Sheets

      -

      This connector materializes Flow collections into sheets in a Google Sheets spreadsheet.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/materialize-google-sheets:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • -

        At least one Flow collection.

        -

        If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps.

        -
      • -
      -
      caution

      For performance reasons, this connector is limited to 1 million cells per materialized sheet. -If a bound collection has more than 1 million unique keys, the materialization will fail.

      If you plan to materialize a collection with an unbounded number of keys, -you should first use a derivation to summarize it -into a collection with a bounded set of keys.

      -
        -
      • The URL of a Google spreadsheet that does not contain the output of a prior Flow materialization.
      • -
      -
      caution

      Materializing data to a spreadsheet that already contains the output of another Flow materialization can result in an error. -Use a new spreadsheet for each materialization, or completely clear the output of prior materializations from the spreadsheet before you continue.

      -

      There are two ways to authenticate with Google when using this connector: -signing in with Google through OAuth in the web app, and configuring manually with a Google service account key. -OAuth is simpler, and is recommended when using the web app. -Only manual configuration is supported using the CLI.

      -

      Additional prerequisites depend on the authentication method you choose.

      -

      OAuth authentication using the Flow web app

      -

      You'll need:

      -
        -
      • The username and password of a Google account with edit access to the destination spreadsheet.
      • -
      -

      Manual authentication

      -

      You'll need:

      -
        -
      • -

        Google Sheets and Google Drive APIs enabled on your Google account.

        -
      • -
      • -

        A Google service account with:

        -
          -
        • A JSON key generated.
        • -
        • Edit access to the destination spreadsheet.
        • -
        -
      • -
      -

      Follow the steps below to meet these prerequisites:

      -
        -
      1. -

        Enable the Google Sheets and Google Drive APIs -for the Google project with which your spreadsheet is associated. -(Unless you actively develop with Google Cloud, you'll likely just have one option).

        -
      2. -
      3. -

        Create a service account and generate a JSON key. -During setup, grant the account the Editor role on your project. -You'll copy the contents of the downloaded key file into the Service Account JSON parameter when you configure the connector.

        -
      4. -
      5. -

        Share your Google spreadsheet with the service account, granting edit access.

        -
      6. -
      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a Google Sheets materialization.

      -

      Properties

      -

      Endpoint

      -

      The following properties reflect the manual authentication method. If you're working in the Flow web app, you can use OAuth, so some of these properties aren't required.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsAuthenticationCredentials used to authenticate with Google.array, boolean, null, number, object, stringRequired
      /credentials/auth_typeAuthentication typeSet to Service for manual authentication, or use OAuth in the web app.string
      /credentials/credentials_jsonService Account JSONThe JSON key of the service account to use for authorization, when using the Service authentication method.stringRequired
      /spreadsheetURLSpreadsheet URLURL of the spreadsheet to materialize into, which is shared with the service account.stringRequired
      -

      Bindings

      -

      Configure a separate binding for each collection you want to materialize to a sheet. -Note that the connector will add an addition column to the beginning of each sheet; -this is to track the internal state of the data.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /sheetSheet NameName of the spreadsheet sheet to materialize intostringRequired
      -

      Sample

      -

      This sample reflects the manual authentication method using the CLI.

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      config:
      credentials:
      auth_type: Service
      credentials_json: <secret>
      spreadsheetURL: `https://docs.google.com/spreadsheets/d/<your_spreadsheet_ID>/edit
      image: ghcr.io/estuary/materialize-google-sheets:dev
      # If you have multiple collections you need to materialize, add a binding for each one
      # to ensure complete data flow-through
      bindings:
      - resource:
      sheet: my_sheet
      source: ${PREFIX}/${source_collection}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/index.html deleted file mode 100644 index 3759641509..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/index.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - -Amazon RDS for MySQL | Estuary Flow - - - - - - - - - -

      Amazon RDS for MySQL

      -

      This connector materializes Flow collections into tables in a MySQL database.

      -

      It is available for use in the Flow web application. For local development or -open-source workflows, -ghcr.io/estuary/materialize-mysql:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A MySQL database to which to materialize, and user credentials. -
          -
        • MySQL versions 5.7 and later are supported
        • -
        • The connector will create new tables in the database per your specification, -so user credentials must have access to create new tables.
        • -
        • The local_infile global variable must be enabled. You can enable this -setting by running SET GLOBAL local_infile = true in your database.
        • -
        -
      • -
      • At least one Flow collection
      • -
      -

      Setup

      -

      You must configure your database to allow connections from Estuary. -There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

      -

      Connecting Directly With Amazon RDS

      -
        -
      1. -

        Edit the VPC security group associated with your database instance, or create a new VPC security group and associate it with the database instance.

        -
          -
        1. -

          Modify the instance, choosing Publicly accessible in the Connectivity settings.

          -
        2. -
        3. -

          Per the steps in the Amazon documentation, -create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses.

          -
        4. -
        -
      2. -
      -

      Connect With SSH Tunneling

      -

      To allow SSH tunneling to a database instance hosted on AWS, you'll need to create a virtual computing environment, or instance, in Amazon EC2.

      -
        -
      1. -

        Begin by finding your public SSH key on your local machine. -In the .ssh subdirectory of your user home directory, -look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, -which indicates it is an RSA-based file.

        -
          -
        • If no such file exists, generate one using the command:
        • -
        -
           ssh-keygen -m PEM -t rsa
        -
          -
        • If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command:
        • -
        -
           ssh-keygen -p -N "" -m pem -f /path/to/key
        -
      2. -
      3. -

        Import your SSH key into AWS.

        -
      4. -
      5. -

        Launch a new instance in EC2. During setup:

        -
          -
        • Configure the security group to allow SSH connection from anywhere.
        • -
        • When selecting a key pair, choose the key you just imported.
        • -
        -
      6. -
      7. -

        Connect to the instance, -setting the user name to ec2-user.

        -
      8. -
      9. -

        Find and note the instance's public DNS. This will be formatted like: ec2-198-21-98-1.compute-1.amazonaws.com.

        -
      10. -
      -
        -
      • -

        Connect with SSH tunneling

        -
          -
        1. -

          Refer to the guide to configure an SSH server on the cloud platform of your choice.

          -
        2. -
        3. -

          Configure your connector as described in the configuration section above, -with the additional of the networkTunnel stanza to enable the SSH tunnel, if using. -See Connecting to endpoints on secure networks -for additional details and a sample.

          -
        4. -
        -
      • -
      -
      Configuration Tip

      To configure the connector, you must specify the database address in the format -host:port. (You can also supply host only; the connector will use the port 3306 by default, which is correct in many cases.) -You can find the host and port in the following locations in each platform's console:

        -
      • Amazon RDS: host as Endpoint; port as Port.
      • -
      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a MySQL materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /databaseDatabaseName of the logical database to materialize to.stringRequired
      /addressAddressHost and port of the database. If only the host is specified, port will default to 3306.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /userUserDatabase user to connect as.stringRequired
      /timezoneTimezoneTimezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.string
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/sslmodeSSL ModeOverrides SSL connection behavior by setting the 'sslmode' parameter.string
      /advanced/ssl_server_caSSL Server CAOptional server certificate authority to use when connecting with custom SSL modestring
      /advanced/ssl_client_certSSL Client CertificateOptional client certificate to use when connecting with custom SSL mode.string
      /advanced/ssl_client_keySSL Client KeyOptional client key to use when connecting with custom SSL mode.string
      -

      Setting the MySQL time zone

      -

      MySQL's time_zone server system variable is set to SYSTEM by default.

      -

      If you intend to materialize collections including fields of with format: date-time or format: time, -and time_zone is set to SYSTEM, -Flow won't be able to detect the time zone and convert datetimes to the -appropriate timezone when materializing. -To avoid this, you must explicitly set the time zone for your database.

      -

      You can:

      -
        -
      • -

        Specify a numerical offset from UTC.

        -
          -
        • For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.
        • -
        • Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted
        • -
        -
      • -
      • -

        Specify a named timezone in IANA timezone format.

        -
      • -
      • -

        If you're using Amazon Aurora, create or modify the DB cluster parameter group -associated with your MySQL database. -Set the time_zone parameter to the correct value.

        -
      • -
      -

      For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. -Because this region observes daylight savings time, you'd be responsible for changing the offset. -Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically.

      -

      If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs.

      -
      Materialize Timezone Configuration

      If you are unable to set the time_zone in the database and need to materialize -collections with date-time or time fields, the materialization can be configured -to assume a time zone using the timezone configuration property (see above). The timezone configuration property can be set as a numerical offset or IANA timezone format.

      -

      SSL Mode

      -

      Possible values:

      -
        -
      • disabled: A plain unencrypted connection is established with the server
      • -
      • preferred: Only use SSL connection if the server asks for it
      • -
      • required: Connect using an SSL connection, but do not verify the server's -certificate.
      • -
      • verify_ca: Connect using an SSL connection, and verify the server's -certificate against the given SSL Server CA, but does not verify the server's -hostname. This option is most commonly used when connecting to an -IP address which does not have a hostname to be verified. When using this mode, SSL Server -CA must be provided.
      • -
      • verify_identity: Connect using an SSL connection, verify the server's -certificate and the server's hostname. This is the most secure option. When using this mode, SSL Server -CA must be provided.
      • -
      -

      Optionally, SSL Client Certificate and Key can be provided if necessary to -authorize the client.

      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableTable name to materialize to. It will be created by the connector, unless the connector has previously created it.stringRequired
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.booleanfalse
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-mysql:dev
      config:
      database: flow
      address: localhost:5432
      password: flow
      user: flow
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      -

      Date & times

      -

      Date and time fields that are part of collections, which specify a format: date-time for the field, are automatically converted to UTC and -persisted as UTC DATETIME in MySQL.

      -

      Reserved words

      -

      MySQL has a list of reserved words that must be quoted in order to be used as an identifier. -Flow considers all the reserved words in the official MySQL documentation.

      -

      These reserved words are listed in the table below. Flow automatically quotes fields that are in this list.

      -
      Reserved words
      accessibleclonedescribefloatint
      accountclosedescriptionfloat4int1
      actioncoalescedes_key_filefloat8int2
      activecodedeterministicflushint3
      addcollatediagnosticsfollowingint4
      admincollationdirectoryfollowsint8
      aftercolumndisableforinteger
      againstcolumnsdiscardforceintersect
      aggregatecolumn_formatdiskforeigninterval
      algorithmcolumn_namedistinctformatinto
      allcommentdistinctrowfoundinvisible
      altercommitdivfrominvoker
      alwayscommitteddofullio
      analysecompactdoublefulltextio_after_gtid
      analyzecompletiondropfunctionio_before_gti
      andcomponentdualgeneralio_thread
      anycompresseddumpfilegenerateipc
      arraycompressionduplicategeneratedis
      asconcurrentdynamicgeomcollectioisolation
      ascconditioneachgeometryissuer
      asciiconnectionelsegeometrycolleiterate
      asensitiveconsistentelseifgetjoin
      atconstraintemptyget_formatjson
      attributeconstraint_caenableget_master_pujson_table
      authenticatioconstraint_naenclosedget_source_pujson_value
      autoextend_siconstraint_scencryptionglobalkey
      auto_incremencontainsendgrantkeyring
      avgcontextendsgrantskeys
      avg_row_lengtcontinueenforcedgroupkey_block_siz
      backupconvertenginegroupingkill
      beforecpuenginesgroupslag
      begincreateengine_attribgroup_replicalanguage
      betweencrossenumgtid_onlylast
      bigintcubeerrorhandlerlast_value
      binarycume_disterrorshashlateral
      binlogcurrentescapehavinglead
      bitcurrent_dateescapedhelpleading
      blobcurrent_timeeventhigh_priorityleave
      blockcurrent_timeseventshistogramleaves
      boolcurrent_usereveryhistoryleft
      booleancursorexcepthostless
      bothcursor_nameexchangehostslevel
      btreedataexcludehourlike
      bucketsdatabaseexecutehour_microseclimit
      bulkdatabasesexistshour_minutelinear
      bydatafileexithour_secondlines
      bytedateexpansionidentifiedlinestring
      cachedatetimeexpireiflist
      calldayexplainignoreload
      cascadeday_hourexportignore_serverlocal
      cascadedday_microsecoextendedimportlocaltime
      caseday_minuteextent_sizeinlocaltimestam
      catalog_nameday_secondfactorinactivelock
      chaindeallocatefailedloginindexlocked
      challenge_resdecfalseindexeslocks
      changedecimalfastinfilelogfile
      changeddeclarefaultsinitiallogs
      channeldefaultfetchinitial_sizelong
      chardefault_authfieldsinitiatelongblob
      characterdefinerfileinnerlongtext
      charsetdefinitionfile_block_siinoutloop
      checkdelayedfilterinsensitivelow_priority
      checksumdelay_key_wrifinishinsertmaster
      cipherdeletefirstinsert_methodmaster_auto_p
      class_origindense_rankfirst_valueinstallmaster_bind
      clientdescfixedinstancemaster_compre
      master_connecneverpreserverestrictsource_host
      master_delaynewprevresumesource_log_fi
      master_heartbnextprimaryretainsource_log_po
      master_hostnoprivilegesreturnsource_passwo
      master_log_finodegroupprivilege_chereturned_sqlssource_port
      master_log_pononeprocedurereturningsource_public
      master_passwonotprocessreturnssourceretry
      master_portnowaitprocesslistreusesource_ssl
      master_publicno_waitprofilereversesource_ssl_ca
      masterretryno_write_to_bprofilesrevokesource_ssl_ca
      master_servernth_valueproxyrightsource_ssl_ce
      master_sslntilepurgerlikesource_ssl_ci
      master_ssl_canullquarterrolesource_ssl_cr
      master_ssl_canullsqueryrollbacksource_ssl_cr
      master_ssl_cenumberquickrollupsource_ssl_ke
      master_ssl_cinumericrandomrotatesource_ssl_ve
      master_ssl_crnvarcharrangeroutinesource_tls_ci
      master_ssl_crofrankrowsource_tls_ve
      master_ssl_keoffreadrowssource_user
      master_ssl_veoffsetreadsrow_countsource_zstd_c
      master_tls_ciojread_onlyrow_formatspatial
      master_tls_veoldread_writerow_numberspecific
      master_useronrealrtreesql
      master_zstd_conerebuildsavepointsqlexception
      matchonlyrecoverschedulesqlstate
      maxvalueopenrecursiveschemasqlwarning
      max_connectiooptimizeredofileschemassql_after_gti
      max_queries_poptimizer_cosredo_buffer_sschema_namesql_after_mts
      max_rowsoptionredundantsecondsql_before_gt
      max_sizeoptionalreferencesecondarysql_big_resul
      max_updates_poptionallyreferencessecondary_engsql_buffer_re
      max_user_connoptionsregexpsecondary_engsql_cache
      mediumorregistrationsecondary_loasql_calc_foun
      mediumbloborderrelaysecondary_unlsql_no_cache
      mediumintordinalityrelaylogsecond_microssql_small_res
      mediumtextorganizationrelay_log_filsecuritysql_thread
      memberothersrelay_log_posselectsql_tsi_day
      memoryoutrelay_threadsensitivesql_tsi_hour
      mergeouterreleaseseparatorsql_tsi_minut
      message_textoutfilereloadserialsql_tsi_month
      microsecondoverremoteserializablesql_tsi_quart
      middleintownerremoveserversql_tsi_secon
      migratepack_keysrenamesessionsql_tsi_week
      minutepagereorganizesetsql_tsi_year
      minute_microsparserrepairsharesrid
      minute_secondpartialrepeatshowssl
      min_rowspartitionrepeatableshutdownstacked
      modpartitioningreplacesignalstart
      modepartitionsreplicasignedstarting
      modifiespasswordreplicassimplestarts
      modifypassword_lockreplicatedoskipstats_auto_re
      monthpathreplicatedoslavestats_persist
      multilinestripercent_rankreplicate_ignslowstatssample
      multipointpersistreplicate_ignsmallintstatus
      multipolygonpersist_onlyreplicate_rewsnapshotstop
      mutexphasereplicate_wilsocketstorage
      mysql_errnopluginreplicate_wilsomestored
      namepluginsreplicationsonamestraight_join
      namesplugin_dirrequiresoundsstream
      nationalpointrequire_row_fsourcestring
      naturalpolygonresetsource_auto_psubclass_orig
      ncharportresignalsource_bindsubject
      ndbprecedesresourcesource_compresubpartition
      ndbclusterprecedingrespectsource_connecsubpartitions
      nestedprecisionrestartsource_delaysuper
      network_namespreparerestoresource_heartbsuspend
      swapstimestampdiffundo_buffer_sutc_datewhen
      switchestinyblobunicodeutc_timewhere
      systemtinyintuninstallutc_timestampwhile
      tabletinytextunionvalidationwindow
      tablestlsuniquevaluewith
      tablespacetounknownvalueswithout
      table_checksutrailingunlockvarbinarywork
      table_nametransactionunregistervarcharwrapper
      temporarytriggerunsignedvarcharacterwrite
      temptabletriggersuntilvariablesx509
      terminatedtrueupdatevaryingxa
      texttruncateupgradevcpuxid
      thantypeurlviewxml
      thentypesusagevirtualxor
      thread_prioriunboundedusevisibleyear
      tiesuncommitteduserwaityear_month
      timeundefineduser_resourcewarningszerofill
      timestampundouse_frmweekzone
      timestampaddundofileusingweight_string
      -

      Changelog

      -

      The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed.

      -

      Proceed with caution when editing materializations created with previous versions of this connector; -editing always upgrades your materialization to the latest connector version.

      -

      V1: 2023-08-21

      -
        -
      • First version
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/index.html deleted file mode 100644 index 7e8e1202b2..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/index.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - -Google Cloud SQL for MySQL | Estuary Flow - - - - - - - - - -

      Google Cloud SQL for MySQL

      -

      This connector materializes Flow collections into tables in a MySQL database.

      -

      It is available for use in the Flow web application. For local development or -open-source workflows, -ghcr.io/estuary/materialize-mysql:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A MySQL database to which to materialize, and user credentials. -
          -
        • MySQL versions 5.7 and later are supported
        • -
        • The connector will create new tables in the database per your specification, -so user credentials must have access to create new tables.
        • -
        • The local_infile global variable must be enabled. You can enable this -setting by running SET GLOBAL local_infile = true in your database.
        • -
        -
      • -
      • At least one Flow collection
      • -
      -

      Setup

      -

      Conenecting Directly to Google Cloud SQL

      -
        -
      1. Enable public IP on your database and add the Estuary Flow IP addresses as authorized IP addresses.
      2. -
      -

      Connect With SSH Tunneling

      -

      To allow SSH tunneling to a database instance hosted on Google Cloud, you must set up a virtual machine (VM).

      -
        -
      1. -

        Begin by finding your public SSH key on your local machine. -In the .ssh subdirectory of your user home directory, -look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, -which indicates it is an RSA-based file.

        -
          -
        • If no such file exists, generate one using the command:
        • -
        -
           ssh-keygen -m PEM -t rsa
        -
          -
        • If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command:
        • -
        -
           ssh-keygen -p -N "" -m pem -f /path/to/key
        -
          -
        • If your Google login differs from your local username, generate a key that includes your Google email address as a comment:
        • -
        -
           ssh-keygen -m PEM -t rsa -C user@domain.com
        -
      2. -
      3. -

        Create and start a new VM in GCP, choosing an image that supports OS Login.

        -
      4. -
      5. -

        Add your public key to the VM.

        -
      6. -
      7. -

        Reserve an external IP address and connect it to the VM during setup. -Note the generated address.

        -
      8. -
      -
      Configuration Tip

      To configure the connector, you must specify the database address in the format -host:port. (You can also supply host only; the connector will use the port 3306 by default, which is correct in many cases.) -You can find the host and port in the following locations in each platform's console:

      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a MySQL materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /databaseDatabaseName of the logical database to materialize to.stringRequired
      /addressAddressHost and port of the database. If only the host is specified, port will default to 3306.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /userUserDatabase user to connect as.stringRequired
      /timezoneTimezoneTimezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.string
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/sslmodeSSL ModeOverrides SSL connection behavior by setting the 'sslmode' parameter.string
      /advanced/ssl_server_caSSL Server CAOptional server certificate authority to use when connecting with custom SSL modestring
      /advanced/ssl_client_certSSL Client CertificateOptional client certificate to use when connecting with custom SSL mode.string
      /advanced/ssl_client_keySSL Client KeyOptional client key to use when connecting with custom SSL mode.string
      -

      Setting the MySQL time zone

      -

      MySQL's time_zone server system variable is set to SYSTEM by default.

      -

      If you intend to materialize collections including fields of with format: date-time or format: time, -and time_zone is set to SYSTEM, -Flow won't be able to detect the time zone and convert datetimes to the -appropriate timezone when materializing. -To avoid this, you must explicitly set the time zone for your database.

      -

      You can:

      -
        -
      • -

        Specify a numerical offset from UTC.

        -
          -
        • For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.
        • -
        • Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted
        • -
        -
      • -
      • -

        Specify a named timezone in IANA timezone format.

        -
      • -
      -

      For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. -Because this region observes daylight savings time, you'd be responsible for changing the offset. -Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically.

      -

      If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs.

      -
      Materialize Timezone Configuration

      If you are unable to set the time_zone in the database and need to materialize -collections with date-time or time fields, the materialization can be configured -to assume a time zone using the timezone configuration property (see above). The timezone configuration property can be set as a numerical offset or IANA timezone format.

      -

      SSL Mode

      -

      Possible values:

      -
        -
      • disabled: A plain unencrypted connection is established with the server
      • -
      • preferred: Only use SSL connection if the server asks for it
      • -
      • required: Connect using an SSL connection, but do not verify the server's -certificate.
      • -
      • verify_ca: Connect using an SSL connection, and verify the server's -certificate against the given SSL Server CA, but does not verify the server's -hostname. This option is most commonly used when connecting to an -IP address which does not have a hostname to be verified. When using this mode, SSL Server -CA must be provided.
      • -
      • verify_identity: Connect using an SSL connection, verify the server's -certificate and the server's hostname. This is the most secure option. When using this mode, SSL Server -CA must be provided.
      • -
      -

      Optionally, SSL Client Certificate and Key can be provided if necessary to -authorize the client.

      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableTable name to materialize to. It will be created by the connector, unless the connector has previously created it.stringRequired
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.booleanfalse
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-mysql:dev
      config:
      database: flow
      address: localhost:5432
      password: flow
      user: flow
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Setup

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          - -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        Configure your connector as described in the configuration section above, -with the additional of the networkTunnel stanza to enable the SSH tunnel, if using. -See Connecting to endpoints on secure networks -for additional details and a sample.

        -
      4. -
      -
      Configuration Tip

      To configure the connector, you must specify the database address in the format -host:port. (You can also supply host only; the connector will use the port 3306 by default, which is correct in many cases.) -You can find the host host in the GCP console as "Private IP Address". The pport is always 3306. You may need to configure private IP on your database.

      -
        -
      1. Create the flow_materialize user with All privileges on your database. This user will need the ability to create and update the flow_materializations table.
      2. -
      -
      CREATE USER IF NOT EXISTS flow_materialize
      IDENTIFIED BY 'secret'
      COMMENT 'User account for Flow MySQL data materialization';
      GRANT ALL PRIVELEGES ON <database>.* TO 'flow_materialize';
      -
        -
      1. In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 3306. -Together, you'll use the host:port as the address property when you configure the connector.
      2. -
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      -

      Date & times

      -

      Date and time fields that are part of collections, which specify a format: date-time for the field, are automatically converted to UTC and -persisted as UTC DATETIME in MySQL.

      -

      Reserved words

      -

      MySQL has a list of reserved words that must be quoted in order to be used as an identifier. -Flow considers all the reserved words in the official MySQL documentation.

      -

      These reserved words are listed in the table below. Flow automatically quotes fields that are in this list.

      -
      Reserved words
      accessibleclonedescribefloatint
      accountclosedescriptionfloat4int1
      actioncoalescedes_key_filefloat8int2
      activecodedeterministicflushint3
      addcollatediagnosticsfollowingint4
      admincollationdirectoryfollowsint8
      aftercolumndisableforinteger
      againstcolumnsdiscardforceintersect
      aggregatecolumn_formatdiskforeigninterval
      algorithmcolumn_namedistinctformatinto
      allcommentdistinctrowfoundinvisible
      altercommitdivfrominvoker
      alwayscommitteddofullio
      analysecompactdoublefulltextio_after_gtid
      analyzecompletiondropfunctionio_before_gti
      andcomponentdualgeneralio_thread
      anycompresseddumpfilegenerateipc
      arraycompressionduplicategeneratedis
      asconcurrentdynamicgeomcollectioisolation
      ascconditioneachgeometryissuer
      asciiconnectionelsegeometrycolleiterate
      asensitiveconsistentelseifgetjoin
      atconstraintemptyget_formatjson
      attributeconstraint_caenableget_master_pujson_table
      authenticatioconstraint_naenclosedget_source_pujson_value
      autoextend_siconstraint_scencryptionglobalkey
      auto_incremencontainsendgrantkeyring
      avgcontextendsgrantskeys
      avg_row_lengtcontinueenforcedgroupkey_block_siz
      backupconvertenginegroupingkill
      beforecpuenginesgroupslag
      begincreateengine_attribgroup_replicalanguage
      betweencrossenumgtid_onlylast
      bigintcubeerrorhandlerlast_value
      binarycume_disterrorshashlateral
      binlogcurrentescapehavinglead
      bitcurrent_dateescapedhelpleading
      blobcurrent_timeeventhigh_priorityleave
      blockcurrent_timeseventshistogramleaves
      boolcurrent_usereveryhistoryleft
      booleancursorexcepthostless
      bothcursor_nameexchangehostslevel
      btreedataexcludehourlike
      bucketsdatabaseexecutehour_microseclimit
      bulkdatabasesexistshour_minutelinear
      bydatafileexithour_secondlines
      bytedateexpansionidentifiedlinestring
      cachedatetimeexpireiflist
      calldayexplainignoreload
      cascadeday_hourexportignore_serverlocal
      cascadedday_microsecoextendedimportlocaltime
      caseday_minuteextent_sizeinlocaltimestam
      catalog_nameday_secondfactorinactivelock
      chaindeallocatefailedloginindexlocked
      challenge_resdecfalseindexeslocks
      changedecimalfastinfilelogfile
      changeddeclarefaultsinitiallogs
      channeldefaultfetchinitial_sizelong
      chardefault_authfieldsinitiatelongblob
      characterdefinerfileinnerlongtext
      charsetdefinitionfile_block_siinoutloop
      checkdelayedfilterinsensitivelow_priority
      checksumdelay_key_wrifinishinsertmaster
      cipherdeletefirstinsert_methodmaster_auto_p
      class_origindense_rankfirst_valueinstallmaster_bind
      clientdescfixedinstancemaster_compre
      master_connecneverpreserverestrictsource_host
      master_delaynewprevresumesource_log_fi
      master_heartbnextprimaryretainsource_log_po
      master_hostnoprivilegesreturnsource_passwo
      master_log_finodegroupprivilege_chereturned_sqlssource_port
      master_log_pononeprocedurereturningsource_public
      master_passwonotprocessreturnssourceretry
      master_portnowaitprocesslistreusesource_ssl
      master_publicno_waitprofilereversesource_ssl_ca
      masterretryno_write_to_bprofilesrevokesource_ssl_ca
      master_servernth_valueproxyrightsource_ssl_ce
      master_sslntilepurgerlikesource_ssl_ci
      master_ssl_canullquarterrolesource_ssl_cr
      master_ssl_canullsqueryrollbacksource_ssl_cr
      master_ssl_cenumberquickrollupsource_ssl_ke
      master_ssl_cinumericrandomrotatesource_ssl_ve
      master_ssl_crnvarcharrangeroutinesource_tls_ci
      master_ssl_crofrankrowsource_tls_ve
      master_ssl_keoffreadrowssource_user
      master_ssl_veoffsetreadsrow_countsource_zstd_c
      master_tls_ciojread_onlyrow_formatspatial
      master_tls_veoldread_writerow_numberspecific
      master_useronrealrtreesql
      master_zstd_conerebuildsavepointsqlexception
      matchonlyrecoverschedulesqlstate
      maxvalueopenrecursiveschemasqlwarning
      max_connectiooptimizeredofileschemassql_after_gti
      max_queries_poptimizer_cosredo_buffer_sschema_namesql_after_mts
      max_rowsoptionredundantsecondsql_before_gt
      max_sizeoptionalreferencesecondarysql_big_resul
      max_updates_poptionallyreferencessecondary_engsql_buffer_re
      max_user_connoptionsregexpsecondary_engsql_cache
      mediumorregistrationsecondary_loasql_calc_foun
      mediumbloborderrelaysecondary_unlsql_no_cache
      mediumintordinalityrelaylogsecond_microssql_small_res
      mediumtextorganizationrelay_log_filsecuritysql_thread
      memberothersrelay_log_posselectsql_tsi_day
      memoryoutrelay_threadsensitivesql_tsi_hour
      mergeouterreleaseseparatorsql_tsi_minut
      message_textoutfilereloadserialsql_tsi_month
      microsecondoverremoteserializablesql_tsi_quart
      middleintownerremoveserversql_tsi_secon
      migratepack_keysrenamesessionsql_tsi_week
      minutepagereorganizesetsql_tsi_year
      minute_microsparserrepairsharesrid
      minute_secondpartialrepeatshowssl
      min_rowspartitionrepeatableshutdownstacked
      modpartitioningreplacesignalstart
      modepartitionsreplicasignedstarting
      modifiespasswordreplicassimplestarts
      modifypassword_lockreplicatedoskipstats_auto_re
      monthpathreplicatedoslavestats_persist
      multilinestripercent_rankreplicate_ignslowstatssample
      multipointpersistreplicate_ignsmallintstatus
      multipolygonpersist_onlyreplicate_rewsnapshotstop
      mutexphasereplicate_wilsocketstorage
      mysql_errnopluginreplicate_wilsomestored
      namepluginsreplicationsonamestraight_join
      namesplugin_dirrequiresoundsstream
      nationalpointrequire_row_fsourcestring
      naturalpolygonresetsource_auto_psubclass_orig
      ncharportresignalsource_bindsubject
      ndbprecedesresourcesource_compresubpartition
      ndbclusterprecedingrespectsource_connecsubpartitions
      nestedprecisionrestartsource_delaysuper
      network_namespreparerestoresource_heartbsuspend
      swapstimestampdiffundo_buffer_sutc_datewhen
      switchestinyblobunicodeutc_timewhere
      systemtinyintuninstallutc_timestampwhile
      tabletinytextunionvalidationwindow
      tablestlsuniquevaluewith
      tablespacetounknownvalueswithout
      table_checksutrailingunlockvarbinarywork
      table_nametransactionunregistervarcharwrapper
      temporarytriggerunsignedvarcharacterwrite
      temptabletriggersuntilvariablesx509
      terminatedtrueupdatevaryingxa
      texttruncateupgradevcpuxid
      thantypeurlviewxml
      thentypesusagevirtualxor
      thread_prioriunboundedusevisibleyear
      tiesuncommitteduserwaityear_month
      timeundefineduser_resourcewarningszerofill
      timestampundouse_frmweekzone
      timestampaddundofileusingweight_string
      -

      Changelog

      -

      The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed.

      -

      Proceed with caution when editing materializations created with previous versions of this connector; -editing always upgrades your materialization to the latest connector version.

      -

      V1: 2023-08-21

      -
        -
      • First version
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/index.html deleted file mode 100644 index 194b642beb..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/index.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - -MySQL | Estuary Flow - - - - - - - - - -

      MySQL

      -

      This connector materializes Flow collections into tables in a MySQL database.

      -

      It is available for use in the Flow web application. For local development or -open-source workflows, -ghcr.io/estuary/materialize-mysql:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A MySQL database to which to materialize, and user credentials. -
          -
        • MySQL versions 5.7 and later are supported
        • -
        • The connector will create new tables in the database per your specification, -so user credentials must have access to create new tables.
        • -
        • The local_infile global variable must be enabled. You can enable this -setting by running SET GLOBAL local_infile = true in your database.
        • -
        -
      • -
      • At least one Flow collection
      • -
      -

      Setup

      -

      To meet these requirements, follow the steps for your hosting type.

      - -

      In addition to standard MySQL, this connector supports cloud-based MySQL instances. Google Cloud Platform, Amazon Web Service, and Microsoft Azure are currently supported. You may use other cloud platforms, but Estuary doesn't guarantee performance.

      -

      To connect securely, you can either enable direct access for Flows's IP or use an SSH tunnel.

      -

      Azure Database for MySQL

      -

      You must configure your database to allow connections from Estuary. -There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

      - -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a MySQL materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /databaseDatabaseName of the logical database to materialize to.stringRequired
      /addressAddressHost and port of the database. If only the host is specified, port will default to 3306.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /userUserDatabase user to connect as.stringRequired
      /timezoneTimezoneTimezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.string
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/sslmodeSSL ModeOverrides SSL connection behavior by setting the 'sslmode' parameter.string
      /advanced/ssl_server_caSSL Server CAOptional server certificate authority to use when connecting with custom SSL modestring
      /advanced/ssl_client_certSSL Client CertificateOptional client certificate to use when connecting with custom SSL mode.string
      /advanced/ssl_client_keySSL Client KeyOptional client key to use when connecting with custom SSL mode.string
      -

      Setting the MySQL time zone

      -

      MySQL's time_zone server system variable is set to SYSTEM by default.

      -

      If you intend to materialize collections including fields of with format: date-time or format: time, -and time_zone is set to SYSTEM, -Flow won't be able to detect the time zone and convert datetimes to the -appropriate timezone when materializing. -To avoid this, you must explicitly set the time zone for your database.

      -

      You can:

      -
        -
      • -

        Specify a numerical offset from UTC.

        -
          -
        • For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.
        • -
        • Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted
        • -
        -
      • -
      • -

        Specify a named timezone in IANA timezone format.

        -
      • -
      • -

        If you're using Amazon Aurora, create or modify the DB cluster parameter group -associated with your MySQL database. -Set the time_zone parameter to the correct value.

        -
      • -
      -

      For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. -Because this region observes daylight savings time, you'd be responsible for changing the offset. -Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically.

      -

      If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs.

      -
      Materialize Timezone Configuration

      If you are unable to set the time_zone in the database and need to materialize -collections with date-time or time fields, the materialization can be configured -to assume a time zone using the timezone configuration property (see above). The timezone configuration property can be set as a numerical offset or IANA timezone format.

      -

      SSL Mode

      -

      Possible values:

      -
        -
      • disabled: A plain unencrypted connection is established with the server
      • -
      • preferred: Only use SSL connection if the server asks for it
      • -
      • required: Connect using an SSL connection, but do not verify the server's -certificate.
      • -
      • verify_ca: Connect using an SSL connection, and verify the server's -certificate against the given SSL Server CA, but does not verify the server's -hostname. This option is most commonly used when connecting to an -IP address which does not have a hostname to be verified. When using this mode, SSL Server -CA must be provided.
      • -
      • verify_identity: Connect using an SSL connection, verify the server's -certificate and the server's hostname. This is the most secure option. When using this mode, SSL Server -CA must be provided.
      • -
      -

      Optionally, SSL Client Certificate and Key can be provided if necessary to -authorize the client.

      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableTable name to materialize to. It will be created by the connector, unless the connector has previously created it.stringRequired
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.booleanfalse
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-mysql:dev
      config:
      database: flow
      address: localhost:5432
      password: flow
      user: flow
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      MySQL on managed cloud platforms

      -

      In addition to standard MySQL, this connector supports cloud-based MySQL instances. -To connect securely, you can either enable direct access for Flows's IP or use an SSH tunnel.

      -

      Google Cloud Platform, Amazon Web Service, and Microsoft Azure are currently supported. -You may use other cloud platforms, but Estuary doesn't guarantee performance.

      -

      Setup

      -

      You must configure your database to allow connections from Estuary. -There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

      -
        -
      • -

        Connect directly with Amazon RDS or Amazon Aurora: Edit the VPC security group associated with your database instance, or create a new VPC security group and associate it with the database instance.

        -
          -
        1. -

          Modify the instance, choosing Publicly accessible in the Connectivity settings.

          -
        2. -
        3. -

          Per the steps in the Amazon documentation, -create a new inbound rule and a new outbound rule that allow all traffic from the IP addresses ``.

          -
        4. -
        -
      • -
      • -

        Connect directly with Google Cloud SQL: Enable public IP on your database and add Estuary Flow IP addresses as authorized IP addresses. See the instructions below to use SSH Tunneling instead of enabling public access.

        -
      • -
      • -

        Connect with SSH tunneling

        -
          -
        1. -

          Refer to the guide to configure an SSH server on the cloud platform of your choice.

          -
        2. -
        3. -

          Configure your connector as described in the configuration section above, -with the additional of the networkTunnel stanza to enable the SSH tunnel, if using. -See Connecting to endpoints on secure networks -for additional details and a sample.

          -
        4. -
        -
      • -
      -
      Configuration Tip

      To configure the connector, you must specify the database address in the format -host:port. (You can also supply host only; the connector will use the port 3306 by default, which is correct in many cases.) -You can find the host and port in the following locations in each platform's console:

        -
      • Amazon RDS and Amazon Aurora: host as Endpoint; port as Port.
      • -
      • Google Cloud SQL: host as Private IP Address; port is always 3306. You may need to configure private IP on your database.
      • -
      • Azure Database: host as Server Name; port under Connection Strings (usually 3306).
      • -
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      -

      Date & times

      -

      Date and time fields that are part of collections, which specify a format: date-time for the field, are automatically converted to UTC and -persisted as UTC DATETIME in MySQL.

      -

      Reserved words

      -

      MySQL has a list of reserved words that must be quoted in order to be used as an identifier. -Flow considers all the reserved words in the official MySQL documentation.

      -

      These reserved words are listed in the table below. Flow automatically quotes fields that are in this list.

      -
      Reserved words
      accessibleclonedescribefloatint
      accountclosedescriptionfloat4int1
      actioncoalescedes_key_filefloat8int2
      activecodedeterministicflushint3
      addcollatediagnosticsfollowingint4
      admincollationdirectoryfollowsint8
      aftercolumndisableforinteger
      againstcolumnsdiscardforceintersect
      aggregatecolumn_formatdiskforeigninterval
      algorithmcolumn_namedistinctformatinto
      allcommentdistinctrowfoundinvisible
      altercommitdivfrominvoker
      alwayscommitteddofullio
      analysecompactdoublefulltextio_after_gtid
      analyzecompletiondropfunctionio_before_gti
      andcomponentdualgeneralio_thread
      anycompresseddumpfilegenerateipc
      arraycompressionduplicategeneratedis
      asconcurrentdynamicgeomcollectioisolation
      ascconditioneachgeometryissuer
      asciiconnectionelsegeometrycolleiterate
      asensitiveconsistentelseifgetjoin
      atconstraintemptyget_formatjson
      attributeconstraint_caenableget_master_pujson_table
      authenticatioconstraint_naenclosedget_source_pujson_value
      autoextend_siconstraint_scencryptionglobalkey
      auto_incremencontainsendgrantkeyring
      avgcontextendsgrantskeys
      avg_row_lengtcontinueenforcedgroupkey_block_siz
      backupconvertenginegroupingkill
      beforecpuenginesgroupslag
      begincreateengine_attribgroup_replicalanguage
      betweencrossenumgtid_onlylast
      bigintcubeerrorhandlerlast_value
      binarycume_disterrorshashlateral
      binlogcurrentescapehavinglead
      bitcurrent_dateescapedhelpleading
      blobcurrent_timeeventhigh_priorityleave
      blockcurrent_timeseventshistogramleaves
      boolcurrent_usereveryhistoryleft
      booleancursorexcepthostless
      bothcursor_nameexchangehostslevel
      btreedataexcludehourlike
      bucketsdatabaseexecutehour_microseclimit
      bulkdatabasesexistshour_minutelinear
      bydatafileexithour_secondlines
      bytedateexpansionidentifiedlinestring
      cachedatetimeexpireiflist
      calldayexplainignoreload
      cascadeday_hourexportignore_serverlocal
      cascadedday_microsecoextendedimportlocaltime
      caseday_minuteextent_sizeinlocaltimestam
      catalog_nameday_secondfactorinactivelock
      chaindeallocatefailedloginindexlocked
      challenge_resdecfalseindexeslocks
      changedecimalfastinfilelogfile
      changeddeclarefaultsinitiallogs
      channeldefaultfetchinitial_sizelong
      chardefault_authfieldsinitiatelongblob
      characterdefinerfileinnerlongtext
      charsetdefinitionfile_block_siinoutloop
      checkdelayedfilterinsensitivelow_priority
      checksumdelay_key_wrifinishinsertmaster
      cipherdeletefirstinsert_methodmaster_auto_p
      class_origindense_rankfirst_valueinstallmaster_bind
      clientdescfixedinstancemaster_compre
      master_connecneverpreserverestrictsource_host
      master_delaynewprevresumesource_log_fi
      master_heartbnextprimaryretainsource_log_po
      master_hostnoprivilegesreturnsource_passwo
      master_log_finodegroupprivilege_chereturned_sqlssource_port
      master_log_pononeprocedurereturningsource_public
      master_passwonotprocessreturnssourceretry
      master_portnowaitprocesslistreusesource_ssl
      master_publicno_waitprofilereversesource_ssl_ca
      masterretryno_write_to_bprofilesrevokesource_ssl_ca
      master_servernth_valueproxyrightsource_ssl_ce
      master_sslntilepurgerlikesource_ssl_ci
      master_ssl_canullquarterrolesource_ssl_cr
      master_ssl_canullsqueryrollbacksource_ssl_cr
      master_ssl_cenumberquickrollupsource_ssl_ke
      master_ssl_cinumericrandomrotatesource_ssl_ve
      master_ssl_crnvarcharrangeroutinesource_tls_ci
      master_ssl_crofrankrowsource_tls_ve
      master_ssl_keoffreadrowssource_user
      master_ssl_veoffsetreadsrow_countsource_zstd_c
      master_tls_ciojread_onlyrow_formatspatial
      master_tls_veoldread_writerow_numberspecific
      master_useronrealrtreesql
      master_zstd_conerebuildsavepointsqlexception
      matchonlyrecoverschedulesqlstate
      maxvalueopenrecursiveschemasqlwarning
      max_connectiooptimizeredofileschemassql_after_gti
      max_queries_poptimizer_cosredo_buffer_sschema_namesql_after_mts
      max_rowsoptionredundantsecondsql_before_gt
      max_sizeoptionalreferencesecondarysql_big_resul
      max_updates_poptionallyreferencessecondary_engsql_buffer_re
      max_user_connoptionsregexpsecondary_engsql_cache
      mediumorregistrationsecondary_loasql_calc_foun
      mediumbloborderrelaysecondary_unlsql_no_cache
      mediumintordinalityrelaylogsecond_microssql_small_res
      mediumtextorganizationrelay_log_filsecuritysql_thread
      memberothersrelay_log_posselectsql_tsi_day
      memoryoutrelay_threadsensitivesql_tsi_hour
      mergeouterreleaseseparatorsql_tsi_minut
      message_textoutfilereloadserialsql_tsi_month
      microsecondoverremoteserializablesql_tsi_quart
      middleintownerremoveserversql_tsi_secon
      migratepack_keysrenamesessionsql_tsi_week
      minutepagereorganizesetsql_tsi_year
      minute_microsparserrepairsharesrid
      minute_secondpartialrepeatshowssl
      min_rowspartitionrepeatableshutdownstacked
      modpartitioningreplacesignalstart
      modepartitionsreplicasignedstarting
      modifiespasswordreplicassimplestarts
      modifypassword_lockreplicatedoskipstats_auto_re
      monthpathreplicatedoslavestats_persist
      multilinestripercent_rankreplicate_ignslowstatssample
      multipointpersistreplicate_ignsmallintstatus
      multipolygonpersist_onlyreplicate_rewsnapshotstop
      mutexphasereplicate_wilsocketstorage
      mysql_errnopluginreplicate_wilsomestored
      namepluginsreplicationsonamestraight_join
      namesplugin_dirrequiresoundsstream
      nationalpointrequire_row_fsourcestring
      naturalpolygonresetsource_auto_psubclass_orig
      ncharportresignalsource_bindsubject
      ndbprecedesresourcesource_compresubpartition
      ndbclusterprecedingrespectsource_connecsubpartitions
      nestedprecisionrestartsource_delaysuper
      network_namespreparerestoresource_heartbsuspend
      swapstimestampdiffundo_buffer_sutc_datewhen
      switchestinyblobunicodeutc_timewhere
      systemtinyintuninstallutc_timestampwhile
      tabletinytextunionvalidationwindow
      tablestlsuniquevaluewith
      tablespacetounknownvalueswithout
      table_checksutrailingunlockvarbinarywork
      table_nametransactionunregistervarcharwrapper
      temporarytriggerunsignedvarcharacterwrite
      temptabletriggersuntilvariablesx509
      terminatedtrueupdatevaryingxa
      texttruncateupgradevcpuxid
      thantypeurlviewxml
      thentypesusagevirtualxor
      thread_prioriunboundedusevisibleyear
      tiesuncommitteduserwaityear_month
      timeundefineduser_resourcewarningszerofill
      timestampundouse_frmweekzone
      timestampaddundofileusingweight_string
      -

      Changelog

      -

      The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed.

      -

      Proceed with caution when editing materializations created with previous versions of this connector; -editing always upgrades your materialization to the latest connector version.

      -

      V1: 2023-08-21

      -
        -
      • First version
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/index.html deleted file mode 100644 index e8c155e3e4..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/index.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - -Amazon RDS for PostgreSQL | Estuary Flow - - - - - - - - - -

      Amazon RDS for PostgreSQL

      -

      This connector materializes Flow collections into tables in a PostgreSQL database.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/materialize-postgres:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A Postgres database to which to materialize, and user credentials. -The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.
      • -
      • At least one Flow collection
      • -
      -

      Setup

      -

      You must configure your database to allow connections from Estuary. -There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

      -

      Connect Directly With Amazon RDS or Amazon Aurora

      -
        -
      1. -

        Edit the VPC security group associated with your database instance, or create a new VPC security group and associate it with the database instance.

        -
          -
        1. -

          Modify the instance, choosing Publicly accessible in the Connectivity settings. See the instructions below to use SSH Tunneling instead of enabling public access.

          -
        2. -
        3. -

          Refer to the steps in the Amazon documentation. -Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses.

          -
        4. -
        -
      2. -
      -

      Connect With SSH Tunneling

      -

      To allow SSH tunneling to a database instance hosted on AWS, you'll need to create a virtual computing environment, or instance, in Amazon EC2.

      -
        -
      1. -

        Begin by finding your public SSH key on your local machine. -In the .ssh subdirectory of your user home directory, -look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, -which indicates it is an RSA-based file.

        -
          -
        • If no such file exists, generate one using the command:
        • -
        -
           ssh-keygen -m PEM -t rsa
        -
          -
        • If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command:
        • -
        -
           ssh-keygen -p -N "" -m pem -f /path/to/key
        -
      2. -
      3. -

        Import your SSH key into AWS.

        -
      4. -
      5. -

        Launch a new instance in EC2. During setup:

        -
          -
        • Configure the security group to allow SSH connection from anywhere.
        • -
        • When selecting a key pair, choose the key you just imported.
        • -
        -
      6. -
      7. -

        Connect to the instance, -setting the user name to ec2-user.

        -
      8. -
      9. -

        Find and note the instance's public DNS. This will be formatted like: ec2-198-21-98-1.compute-1.amazonaws.com.

        -
      10. -
      -
      Configuration Tip

      To configure the connector, you must specify the database address in the format host:port. (You can also supply host only; the connector will use the port 5432 by default, which is correct in many cases.) -You can find the host and port in the following locations in each platform's console:

        -
      • Amazon RDS: host as Endpoint; port as Port.
      • -
      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a Postgres materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /databaseDatabaseName of the logical database to materialize to.string
      /addressAddressHost and port of the database. If only the host is specified, port will default to 5432.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /schemaDatabase SchemaDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tablesstring"public"
      /userUserDatabase user to connect as.stringRequired
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/sslmodeSSL ModeOverrides SSL connection behavior by setting the 'sslmode' parameter.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /additional_table_create_sqlAdditional Table Create SQLAdditional SQL statement(s) to be run in the same transaction that creates the table.string
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.booleanfalse
      /schemaAlternative SchemaAlternative schema for this table (optional). Overrides schema set in endpoint configuration.string
      /tableTableTable name to materialize to. It will be created by the connector, unless the connector has previously created it.stringRequired
      -

      SSL Mode

      -

      Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration.

      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-postgres:dev
      config:
      database: flow
      address: localhost:5432
      password: flow
      user: flow
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      -

      Reserved words

      -

      PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier. -Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation.

      -

      These reserve words are listed in the table below. Flow automatically quotes fields that are in this list.

      -
      Reserved words
      abscurrent_transform_group_for_typeindicatorordersqlexception
      absolutecurrent_userinitialoutsqlstate
      acoscursorinitiallyoutersqlwarning
      actioncycleinneroutputsqrt
      adddatalinkinoutoverstart
      alldateinputoverlapsstatic
      allocatedayinsensitiveoverlaystddev_pop
      alterdeallocateinsertpadstddev_samp
      analysedecintparametersubmultiset
      analyzedecfloatintegerpartialsubset
      anddecimalintersectpartitionsubstring
      anydeclareintersectionpatternsubstring_regex
      aredefaultintervalpersucceeds
      arraydeferrableintopercentsum
      array_aggdeferredispercentile_contsymmetric
      array_max_cardinalitydefineisnullpercentile_discsystem
      asdeleteisolationpercent_ranksystem_time
      ascdense_rankjoinperiodsystem_user
      asensitivederefjson_arraypermutetable
      asindescjson_arrayaggplacingtablesample
      assertiondescribejson_existsportiontan
      asymmetricdescriptorjson_objectpositiontanh
      atdeterministicjson_objectaggposition_regextemporary
      atandiagnosticsjson_querypowerthen
      atomicdisconnectjson_tableprecedestime
      authorizationdistinctjson_table_primitiveprecisiontimestamp
      avgdlnewcopyjson_valuepreparetimezone_hour
      begindlpreviouscopykeypreservetimezone_minute
      begin_framedlurlcompletelagprimaryto
      begin_partitiondlurlcompleteonlylanguagepriortrailing
      betweendlurlcompletewritelargeprivilegestransaction
      bigintdlurlpathlastproceduretranslate
      binarydlurlpathonlylast_valueptftranslate_regex
      bitdlurlpathwritelateralpublictranslation
      bit_lengthdlurlschemeleadrangetreat
      blobdlurlserverleadingranktrigger
      booleandlvalueleftreadtrim
      bothdolevelreadstrim_array
      bydomainlikerealtrue
      calldoublelike_regexrecursivetruncate
      calleddroplimitrefuescape
      cardinalitydynamiclistaggreferencesunion
      cascadeeachlnreferencingunique
      cascadedelementlocalregr_avgxunknown
      caseelselocaltimeregr_avgyunmatched
      castemptylocaltimestampregr_countunnest
      catalogendlogregr_interceptupdate
      ceilend-execlog10regr_r2upper
      ceilingend_framelowerregr_slopeusage
      charend_partitionmatchregr_sxxuser
      characterequalsmatchesregr_sxyusing
      character_lengthescapematch_numberregr_syyvalue
      char_lengtheverymatch_recognizerelativevalues
      checkexceptmaxreleasevalue_of
      classifierexceptionmeasuresrestrictvarbinary
      clobexecmemberresultvarchar
      closeexecutemergereturnvariadic
      coalesceexistsmethodreturningvarying
      collateexpminreturnsvar_pop
      collationexternalminuterevokevar_samp
      collectextractmodrightverbose
      columnfalsemodifiesrollbackversioning
      commitfetchmodulerollupview
      concurrentlyfiltermonthrowwhen
      conditionfirstmultisetrowswhenever
      connectfirst_valuenamesrow_numberwhere
      connectionfloatnationalrunningwidth_bucket
      constraintfloornaturalsavepointwindow
      constraintsforncharschemawith
      containsforeignnclobscopewithin
      continuefoundnewscrollwithout
      convertframe_rownextsearchwork
      copyfreenosecondwrite
      corrfreezenonesectionxml
      correspondingfromnormalizeseekxmlagg
      cosfullnotselectxmlattributes
      coshfunctionnotnullsensitivexmlbinary
      countfusionnth_valuesessionxmlcast
      covar_popgetntilesession_userxmlcomment
      covar_sampglobalnullsetxmlconcat
      creategonullifshowxmldocument
      crossgotonumericsimilarxmlelement
      cubegrantoccurrences_regexsinxmlexists
      cume_distgroupoctet_lengthsinhxmlforest
      currentgroupingofsizexmliterate
      current_cataloggroupsoffsetskipxmlnamespaces
      current_datehavingoldsmallintxmlparse
      current_default_transform_groupholdomitsomexmlpi
      current_pathhouronspacexmlquery
      current_roleidentityonespecificxmlserialize
      current_rowilikeonlyspecifictypexmltable
      current_schemaimmediateopensqlxmltext
      current_timeimportoptionsqlcodexmlvalidate
      current_timestampinorsqlerroryear
      -

      Changelog

      -

      The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed.

      -

      Proceed with caution when editing materializations created with previous versions of this connector; -editing always upgrades your materialization to the latest connector version.

      -

      V4: 2022-11-30

      -

      This version includes breaking changes to materialized table columns. -These provide more consistent column names and types, but tables created from previous versions of the connector may -not be compatible with this version.

      -
        -
      • -

        Capitalization is now preserved when fields in Flow are converted to Postgres column names. -Previously, fields containing uppercase letters were converted to lowercase.

        -
      • -
      • -

        Field names and values of types date, duration, ipv4, ipv6, macaddr, macaddr8, and time are now converted into -their corresponding Postgres types. -Previously, only date-time was converted, and all others were materialized as strings.

        -
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/index.html deleted file mode 100644 index 12c085408d..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - -Google Cloud SQL for PostgreSQL | Estuary Flow - - - - - - - - - -

      Google Cloud SQL for PostgreSQL

      -

      This connector materializes Flow collections into tables in a Google Cloud SQL for PostgreSQL database.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/materialize-postgres:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A Postgres database to which to materialize, and user credentials. -The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.
      • -
      • At least one Flow collection
      • -
      -

      Setup

      -

      You must configure your database to allow connections from Estuary. -There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

      -

      Conenecting Directly to Google Cloud SQL

      -
        -
      1. Enable public IP on your database and add the Estuary Flow IP addresses as authorized IP addresses.
      2. -
      -

      Connect With SSH Tunneling

      -

      To allow SSH tunneling to a database instance hosted on Google Cloud, you must set up a virtual machine (VM).

      -
        -
      1. -

        Begin by finding your public SSH key on your local machine. -In the .ssh subdirectory of your user home directory, -look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, -which indicates it is an RSA-based file.

        -
          -
        • If no such file exists, generate one using the command:
        • -
        -
           ssh-keygen -m PEM -t rsa
        -
          -
        • If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command:
        • -
        -
           ssh-keygen -p -N "" -m pem -f /path/to/key
        -
          -
        • If your Google login differs from your local username, generate a key that includes your Google email address as a comment:
        • -
        -
           ssh-keygen -m PEM -t rsa -C user@domain.com
        -
      2. -
      3. -

        Create and start a new VM in GCP, choosing an image that supports OS Login.

        -
      4. -
      5. -

        Add your public key to the VM.

        -
      6. -
      7. -

        Reserve an external IP address and connect it to the VM during setup. -Note the generated address.

        -
      8. -
      -
      Configuration Tip

      To configure the connector, you must specify the database address in the format host:port. (You can also supply host only; the connector will use the port 5432 by default, which is correct in many cases.) -You can find the host and port in the following location:

        -
      • Host as Private IP Address; port is always 5432. You may need to configure private IP on your database.
      • -
      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a Postgres materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /databaseDatabaseName of the logical database to materialize to.string
      /addressAddressHost and port of the database. If only the host is specified, port will default to 5432.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /schemaDatabase SchemaDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tablesstring"public"
      /userUserDatabase user to connect as.stringRequired
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/sslmodeSSL ModeOverrides SSL connection behavior by setting the 'sslmode' parameter.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /additional_table_create_sqlAdditional Table Create SQLAdditional SQL statement(s) to be run in the same transaction that creates the table.string
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.booleanfalse
      /schemaAlternative SchemaAlternative schema for this table (optional). Overrides schema set in endpoint configuration.string
      /tableTableTable name to materialize to. It will be created by the connector, unless the connector has previously created it.stringRequired
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-postgres:dev
      config:
      database: flow
      address: localhost:5432
      password: flow
      user: flow
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      -

      Reserved words

      -

      PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier. -Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation.

      -

      These reserve words are listed in the table below. Flow automatically quotes fields that are in this list.

      -
      Reserved words
      abscurrent_transform_group_for_typeindicatorordersqlexception
      absolutecurrent_userinitialoutsqlstate
      acoscursorinitiallyoutersqlwarning
      actioncycleinneroutputsqrt
      adddatalinkinoutoverstart
      alldateinputoverlapsstatic
      allocatedayinsensitiveoverlaystddev_pop
      alterdeallocateinsertpadstddev_samp
      analysedecintparametersubmultiset
      analyzedecfloatintegerpartialsubset
      anddecimalintersectpartitionsubstring
      anydeclareintersectionpatternsubstring_regex
      aredefaultintervalpersucceeds
      arraydeferrableintopercentsum
      array_aggdeferredispercentile_contsymmetric
      array_max_cardinalitydefineisnullpercentile_discsystem
      asdeleteisolationpercent_ranksystem_time
      ascdense_rankjoinperiodsystem_user
      asensitivederefjson_arraypermutetable
      asindescjson_arrayaggplacingtablesample
      assertiondescribejson_existsportiontan
      asymmetricdescriptorjson_objectpositiontanh
      atdeterministicjson_objectaggposition_regextemporary
      atandiagnosticsjson_querypowerthen
      atomicdisconnectjson_tableprecedestime
      authorizationdistinctjson_table_primitiveprecisiontimestamp
      avgdlnewcopyjson_valuepreparetimezone_hour
      begindlpreviouscopykeypreservetimezone_minute
      begin_framedlurlcompletelagprimaryto
      begin_partitiondlurlcompleteonlylanguagepriortrailing
      betweendlurlcompletewritelargeprivilegestransaction
      bigintdlurlpathlastproceduretranslate
      binarydlurlpathonlylast_valueptftranslate_regex
      bitdlurlpathwritelateralpublictranslation
      bit_lengthdlurlschemeleadrangetreat
      blobdlurlserverleadingranktrigger
      booleandlvalueleftreadtrim
      bothdolevelreadstrim_array
      bydomainlikerealtrue
      calldoublelike_regexrecursivetruncate
      calleddroplimitrefuescape
      cardinalitydynamiclistaggreferencesunion
      cascadeeachlnreferencingunique
      cascadedelementlocalregr_avgxunknown
      caseelselocaltimeregr_avgyunmatched
      castemptylocaltimestampregr_countunnest
      catalogendlogregr_interceptupdate
      ceilend-execlog10regr_r2upper
      ceilingend_framelowerregr_slopeusage
      charend_partitionmatchregr_sxxuser
      characterequalsmatchesregr_sxyusing
      character_lengthescapematch_numberregr_syyvalue
      char_lengtheverymatch_recognizerelativevalues
      checkexceptmaxreleasevalue_of
      classifierexceptionmeasuresrestrictvarbinary
      clobexecmemberresultvarchar
      closeexecutemergereturnvariadic
      coalesceexistsmethodreturningvarying
      collateexpminreturnsvar_pop
      collationexternalminuterevokevar_samp
      collectextractmodrightverbose
      columnfalsemodifiesrollbackversioning
      commitfetchmodulerollupview
      concurrentlyfiltermonthrowwhen
      conditionfirstmultisetrowswhenever
      connectfirst_valuenamesrow_numberwhere
      connectionfloatnationalrunningwidth_bucket
      constraintfloornaturalsavepointwindow
      constraintsforncharschemawith
      containsforeignnclobscopewithin
      continuefoundnewscrollwithout
      convertframe_rownextsearchwork
      copyfreenosecondwrite
      corrfreezenonesectionxml
      correspondingfromnormalizeseekxmlagg
      cosfullnotselectxmlattributes
      coshfunctionnotnullsensitivexmlbinary
      countfusionnth_valuesessionxmlcast
      covar_popgetntilesession_userxmlcomment
      covar_sampglobalnullsetxmlconcat
      creategonullifshowxmldocument
      crossgotonumericsimilarxmlelement
      cubegrantoccurrences_regexsinxmlexists
      cume_distgroupoctet_lengthsinhxmlforest
      currentgroupingofsizexmliterate
      current_cataloggroupsoffsetskipxmlnamespaces
      current_datehavingoldsmallintxmlparse
      current_default_transform_groupholdomitsomexmlpi
      current_pathhouronspacexmlquery
      current_roleidentityonespecificxmlserialize
      current_rowilikeonlyspecifictypexmltable
      current_schemaimmediateopensqlxmltext
      current_timeimportoptionsqlcodexmlvalidate
      current_timestampinorsqlerroryear
      -

      Changelog

      -

      The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed.

      -

      Proceed with caution when editing materializations created with previous versions of this connector; -editing always upgrades your materialization to the latest connector version.

      -

      V4: 2022-11-30

      -

      This version includes breaking changes to materialized table columns. -These provide more consistent column names and types, but tables created from previous versions of the connector may -not be compatible with this version.

      -
        -
      • -

        Capitalization is now preserved when fields in Flow are converted to Postgres column names. -Previously, fields containing uppercase letters were converted to lowercase.

        -
      • -
      • -

        Field names and values of types date, duration, ipv4, ipv6, macaddr, macaddr8, and time are now converted into -their corresponding Postgres types. -Previously, only date-time was converted, and all others were materialized as strings.

        -
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/index.html deleted file mode 100644 index 79869839b8..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/index.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - -PostgreSQL | Estuary Flow - - - - - - - - - -

      PostgreSQL

      This connector materializes Flow collections into tables in a PostgreSQL database.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/materialize-postgres:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A Postgres database to which to materialize, and user credentials. -The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.
      • -
      • At least one Flow collection
      • -
      -

      Setup

      -

      To meet these requirements, follow the steps for your hosting type.

      - -

      In addition to standard PostgreSQL, this connector supports cloud-based PostgreSQL instances. Google Cloud Platform, Amazon Web Service, and Microsoft Azure are currently supported. You may use other cloud platforms, but Estuary doesn't guarantee performance.

      -

      To connect securely, you can either enable direct access for Flows's IP or use an SSH tunnel.

      -
      Configuration Tip

      To configure the connector, you must specify the database address in the format host:port. (You can also supply host only; the connector will use the port 5432 by default, which is correct in many cases.) -You can find the host and port in the following locations in each platform's console:

        -
      • Amazon RDS and Amazon Aurora: host as Endpoint; port as Port.
      • -
      • Google Cloud SQL: host as Private IP Address; port is always 5432. You may need to configure private IP on your database.
      • -
      • Azure Database: host as Server Name; port under Connection Strings (usually 5432).
      • -
      • TimescaleDB: host as Host; port as Port.
      • -
      -

      Azure Database for PostgreSQL

      - -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a Postgres materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /databaseDatabaseName of the logical database to materialize to.string
      /addressAddressHost and port of the database. If only the host is specified, port will default to 5432.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /schemaDatabase SchemaDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tablesstring"public"
      /userUserDatabase user to connect as.stringRequired
      /advancedAdvanced OptionsOptions for advanced users. You should not typically need to modify these.object
      /advanced/sslmodeSSL ModeOverrides SSL connection behavior by setting the 'sslmode' parameter.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /additional_table_create_sqlAdditional Table Create SQLAdditional SQL statement(s) to be run in the same transaction that creates the table.string
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.booleanfalse
      /schemaAlternative SchemaAlternative schema for this table (optional). Overrides schema set in endpoint configuration.string
      /tableTableTable name to materialize to. It will be created by the connector, unless the connector has previously created it.stringRequired
      -

      SSL Mode

      -

      Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration.

      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-postgres:dev
      config:
      database: flow
      address: localhost:5432
      password: flow
      user: flow
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates.

      -

      The default is to use standard updates.

      -

      Reserved words

      -

      PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier. -Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation.

      -

      These reserve words are listed in the table below. Flow automatically quotes fields that are in this list.

      -
      Reserved words
      abscurrent_transform_group_for_typeindicatorordersqlexception
      absolutecurrent_userinitialoutsqlstate
      acoscursorinitiallyoutersqlwarning
      actioncycleinneroutputsqrt
      adddatalinkinoutoverstart
      alldateinputoverlapsstatic
      allocatedayinsensitiveoverlaystddev_pop
      alterdeallocateinsertpadstddev_samp
      analysedecintparametersubmultiset
      analyzedecfloatintegerpartialsubset
      anddecimalintersectpartitionsubstring
      anydeclareintersectionpatternsubstring_regex
      aredefaultintervalpersucceeds
      arraydeferrableintopercentsum
      array_aggdeferredispercentile_contsymmetric
      array_max_cardinalitydefineisnullpercentile_discsystem
      asdeleteisolationpercent_ranksystem_time
      ascdense_rankjoinperiodsystem_user
      asensitivederefjson_arraypermutetable
      asindescjson_arrayaggplacingtablesample
      assertiondescribejson_existsportiontan
      asymmetricdescriptorjson_objectpositiontanh
      atdeterministicjson_objectaggposition_regextemporary
      atandiagnosticsjson_querypowerthen
      atomicdisconnectjson_tableprecedestime
      authorizationdistinctjson_table_primitiveprecisiontimestamp
      avgdlnewcopyjson_valuepreparetimezone_hour
      begindlpreviouscopykeypreservetimezone_minute
      begin_framedlurlcompletelagprimaryto
      begin_partitiondlurlcompleteonlylanguagepriortrailing
      betweendlurlcompletewritelargeprivilegestransaction
      bigintdlurlpathlastproceduretranslate
      binarydlurlpathonlylast_valueptftranslate_regex
      bitdlurlpathwritelateralpublictranslation
      bit_lengthdlurlschemeleadrangetreat
      blobdlurlserverleadingranktrigger
      booleandlvalueleftreadtrim
      bothdolevelreadstrim_array
      bydomainlikerealtrue
      calldoublelike_regexrecursivetruncate
      calleddroplimitrefuescape
      cardinalitydynamiclistaggreferencesunion
      cascadeeachlnreferencingunique
      cascadedelementlocalregr_avgxunknown
      caseelselocaltimeregr_avgyunmatched
      castemptylocaltimestampregr_countunnest
      catalogendlogregr_interceptupdate
      ceilend-execlog10regr_r2upper
      ceilingend_framelowerregr_slopeusage
      charend_partitionmatchregr_sxxuser
      characterequalsmatchesregr_sxyusing
      character_lengthescapematch_numberregr_syyvalue
      char_lengtheverymatch_recognizerelativevalues
      checkexceptmaxreleasevalue_of
      classifierexceptionmeasuresrestrictvarbinary
      clobexecmemberresultvarchar
      closeexecutemergereturnvariadic
      coalesceexistsmethodreturningvarying
      collateexpminreturnsvar_pop
      collationexternalminuterevokevar_samp
      collectextractmodrightverbose
      columnfalsemodifiesrollbackversioning
      commitfetchmodulerollupview
      concurrentlyfiltermonthrowwhen
      conditionfirstmultisetrowswhenever
      connectfirst_valuenamesrow_numberwhere
      connectionfloatnationalrunningwidth_bucket
      constraintfloornaturalsavepointwindow
      constraintsforncharschemawith
      containsforeignnclobscopewithin
      continuefoundnewscrollwithout
      convertframe_rownextsearchwork
      copyfreenosecondwrite
      corrfreezenonesectionxml
      correspondingfromnormalizeseekxmlagg
      cosfullnotselectxmlattributes
      coshfunctionnotnullsensitivexmlbinary
      countfusionnth_valuesessionxmlcast
      covar_popgetntilesession_userxmlcomment
      covar_sampglobalnullsetxmlconcat
      creategonullifshowxmldocument
      crossgotonumericsimilarxmlelement
      cubegrantoccurrences_regexsinxmlexists
      cume_distgroupoctet_lengthsinhxmlforest
      currentgroupingofsizexmliterate
      current_cataloggroupsoffsetskipxmlnamespaces
      current_datehavingoldsmallintxmlparse
      current_default_transform_groupholdomitsomexmlpi
      current_pathhouronspacexmlquery
      current_roleidentityonespecificxmlserialize
      current_rowilikeonlyspecifictypexmltable
      current_schemaimmediateopensqlxmltext
      current_timeimportoptionsqlcodexmlvalidate
      current_timestampinorsqlerroryear
      -

      Changelog

      -

      The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed.

      -

      Proceed with caution when editing materializations created with previous versions of this connector; -editing always upgrades your materialization to the latest connector version.

      -

      V4: 2022-11-30

      -

      This version includes breaking changes to materialized table columns. -These provide more consistent column names and types, but tables created from previous versions of the connector may -not be compatible with this version.

      -
        -
      • -

        Capitalization is now preserved when fields in Flow are converted to Postgres column names. -Previously, fields containing uppercase letters were converted to lowercase.

        -
      • -
      • -

        Field names and values of types date, duration, ipv4, ipv6, macaddr, macaddr8, and time are now converted into -their corresponding Postgres types. -Previously, only date-time was converted, and all others were materialized as strings.

        -
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/index.html deleted file mode 100644 index 2d13ce2a25..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/index.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - -Rockset | Estuary Flow - - - - - - - - - -

      Rockset

      This Flow connector materializes delta updates of your Flow collections into Rockset collections.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/materialize-rockset:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A Rockset API key generated -
          -
        • The API key must have the Member or Admin role.
        • -
        -
      • -
      • A Rockset workspace -
          -
        • Optional; if none exist, one will be created by the connector.
        • -
        -
      • -
      • A Rockset collection -
          -
        • Optional; if none exist, one will be created by the connector.
        • -
        -
      • -
      • At least one Flow collection
      • -
      -
      tip

      If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps.

      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a Rockset materialization, which will direct one or more of your Flow collections to your desired Rockset collections.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /api_keyRockset API KeyThe key used to authenticate to the Rockset API. Must have role of admin or member.stringRequired
      /region_base_urlRegion Base URLThe base URL to connect to your Rockset deployment. Example: api.usw2a1.rockset.com (do not include the protocol). See supported options and how to find yours.stringRequired
      -

      Bindings

      -

      The binding configuration includes the optional Advanced collection settings section. -These settings can help optimize your output Rockset collections:

      -
        -
      • Clustering fields: You can specify clustering fields -for your Rockset collection's columnar index to help optimize specific query patterns. -See the Rockset docs for more information.
      • -
      • Retention period: Amount of time before data is purged, in seconds. -A low value will keep the amount of data indexed in Rockset smaller.
      • -
      -
      PropertyTitleDescriptionTypeRequired/Default
      /advancedCollectionSettingsAdvanced Collection Settingsobject
      /advancedCollectionSettings/clustering_keyClustering KeyList of clustering fieldsarray
      /advancedCollectionSettings/clustering_key/-/field_nameField NameThe name of a fieldstring
      /advancedCollectionSettings/retention_secsRetention PeriodNumber of seconds after which data is purged based on event timeinteger
      /collectionRockset CollectionThe name of the Rockset collection (will be created if it does not exist)stringRequired
      /workspaceWorkspaceThe name of the Rockset workspace (will be created if it does not exist)stringRequired
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      config:
      region_base_url: api.usw2a1.rockset.com
      api_key: supersecret
      # Path to the latest version of the connector, provided as a Docker image
      image: ghcr.io/estuary/materialize-rockset:dev
      # If you have multiple collections you need to materialize, add a binding for each one
      # to ensure complete data flow-through
      bindings:
      - resource:
      workspace: ${namespace_name}
      collection: ${table_name}
      source: ${PREFIX}/${source_collection}
      -

      Delta updates and reduction strategies

      -

      The Rockset connector operates only in delta updates mode. -This means that Rockset, rather than Flow, performs the document merge. -In some cases, this will affect how materialized views look in Rockset compared to other systems that use standard updates.

      -

      Rockset merges documents by the key defined in the Flow collection schema, and always uses the semantics of RFC 7396 - JSON merge. -This differs from how Flow would reduce documents, most notably in that Rockset will not honor any reduction strategies defined in your Flow schema. -For consistent output of a given collection across Rockset and other materialization endpoints, it's important that that collection's reduction annotations -in Flow mirror Rockset's semantics.

      -

      To accomplish this, ensure that your collection schema has the following data reductions defined in its schema:

      -
        -
      • A top-level reduction strategy of merge
      • -
      • A strategy of lastWriteWins for all nested values (this is the default)
      • -
      -

      Changelog

      -

      The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed.

      -

      Proceed with caution when editing materializations created with previous versions of this connector; -editing always upgrades your materialization to the latest connector version.

      -

      V2: 2022-12-06

      -
        -
      • Region Base URL was added and is now required as part of the endpoint configuration.
      • -
      • Event Time fields and the Insert Only option were removed from the advanced collection settings.
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/index.html deleted file mode 100644 index 952b0c54ce..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/index.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - -Amazon RDS for SQL Server | Estuary Flow - - - - - - - - - -

      Amazon RDS for SQL Server

      -

      This connector materializes Flow collections into tables in a Microsoft SQLServer database.

      -

      It is available for use in the Flow web application. For local development or -open-source workflows, -ghcr.io/estuary/materialize-sqlserver:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A SQLServer database to which to materialize, and user credentials. -
          -
        • SQLServer 2017 and later are supported
        • -
        • The connector will create new tables in the database per your specification, -so user credentials must have access to create new tables.
        • -
        -
      • -
      • At least one Flow collection
      • -
      -

      Setup Amazon RDS for SQL Server

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          - -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        In your SQL client, connect to your instance as the default sqlserver user and issue the following commands.

        -
      4. -
      -
      USE <database>;
      -- Create user and password for use with the connector.
      CREATE LOGIN flow_materialize WITH PASSWORD = 'secret';
      CREATE USER flow_materialize FOR LOGIN flow_materialize;
      -- Grant control on the database to flow_materialize
      GRANT CONTROL ON DATABASE::<database> TO flow_materialize;
      -
        -
      1. In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector.
      2. -
      -

      Connecting to SQLServer

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          - -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        In your SQL client, connect to your instance as the default sqlserver user and issue the following commands.

        -
      4. -
      -
      USE <database>;
      -- Create user and password for use with the connector.
      CREATE LOGIN flow_materialize WITH PASSWORD = 'Secret123!';
      CREATE USER flow_materialize FOR LOGIN flow_materialize;
      -- Grant control on the database to flow_materialize
      GRANT CONTROL ON DATABASE::<database> TO flow_materialize;
      -
        -
      1. In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector.
      2. -
      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a SQLServer materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /databaseDatabaseName of the logical database to materialize to.stringRequired
      /addressAddressHost and port of the database. If only the host is specified, port will default to 3306.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /userUserDatabase user to connect as.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableTable name to materialize to. It will be created by the connector, unless the connector has previously created it.stringRequired
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.booleanfalse
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-sqlserver:dev
      config:
      database: flow
      address: localhost:5432
      password: flow
      user: flow
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      -

      Reserved words

      -

      SQLServer has a list of reserved words that must be quoted in order to be used as an identifier. -Flow considers all the reserved words in the official SQLServer documentation.

      -

      These reserved words are listed in the table below. Flow automatically quotes fields that are in this list.

      -

      | Reserved words | | | | | -| -------------- | ------------- | ------------- | ------------- | ------------- | ----- | -| absolute | connect | else | intersect | on | -| action | connection | end | intersection | only | -| ada | constraint | end-exec | interval | open | -| add | constraints | equals | into | opendatasourc | -| admin | constructor | errlvl | is | openquery | -| after | contains | escape | isolation | openrowset | -| aggregate | containstable | every | iterate | openxml | -| alias | continue | except | join | operation | -| all | convert | exception | key | option | -| allocate | corr | exec | kill | or | -| alter | corresponding | execute | language | order | -| and | count | exists | large | ordinality | -| any | covar_pop | exit | last | out | -| are | covar_samp | external | lateral | outer | -| array | create | extract | leading | output | -| as | cross | false | left | over | -| asc | cube | fetch | less | overlaps | -| asensitive | cume_dist | file | level | overlay | -| assertion | current | fillfactor | like | pad | -| asymmetric | current_catal | filter | like_regex | parameter | -| at | current_date | first | limit | parameters | -| atomic | current_defau | float | lineno | partial | -| authorization | current_path | for | ln | partition | -| avg | current_role | foreign | load | pascal | -| backup | current_schem | fortran | local | path | -| before | current_time | found | localtime | percent | -| begin | current_times | free | localtimestam | percent_rank | -| between | current_trans | freetext | locator | percentile_co | -| binary | current_user | freetexttable | lower | percentile_di | -| bit | cursor | from | map | pivot | -| bit_length | cycle | full | match | plan | -| blob | data | fulltexttable | max | position | -| boolean | database | function | member | position_rege | -| both | date | fusion | merge | postfix | -| breadth | day | general | method | precision | -| break | dbcc | get | min | prefix | -| browse | deallocate | global | minute | preorder | -| bulk | dec | go | mod | prepare | -| by | decimal | goto | modifies | preserve | -| call | declare | grant | modify | primary | -| called | default | group | module | print | -| cardinality | deferrable | grouping | month | prior | -| cascade | deferred | having | multiset | privileges | -| cascaded | delete | hold | names | proc | -| case | deny | holdlock | national | procedure | -| cast | depth | host | natural | public | -| catalog | deref | hour | nchar | raiserror | -| char | desc | identity | nclob | range | -| char_length | describe | identity_inse | new | read | -| character | descriptor | identitycol | next | reads | -| character_len | destroy | if | no | readtext | -| check | destructor | ignore | nocheck | real | -| checkpoint | deterministic | immediate | nonclustered | reconfigure | -| class | diagnostics | in | none | recursive | -| clob | dictionary | include | normalize | ref | -| close | disconnect | index | not | references | -| clustered | disk | indicator | null | referencing | -| coalesce | distinct | initialize | nullif | regr_avgx | -| collate | distributed | initially | numeric | regr_avgy | -| collation | domain | inner | object | regr_count | -| collect | double | inout | occurrences_r | regr_intercep | -| column | drop | input | octet_length | regr_r2 | -| commit | dump | insensitive | of | regr_slope | -| completion | dynamic | insert | off | regr_sxx | -| compute | each | int | offsets | regr_sxy | -| condition | element | integer | old | regr_syy | -| relative | semanticsimil | structure | truncate | window | -| release | semanticsimil | submultiset | try_convert | with | -| replication | sensitive | substring | tsequal | within | group | -| restore | sequence | substring_reg | uescape | within | -| restrict | session | sum | under | without | -| result | session_user | symmetric | union | work | -| return | set | system | unique | write | -| returns | sets | system_user | unknown | writetext | -| revert | setuser | table | unnest | xmlagg | -| revoke | shutdown | tablesample | unpivot | xmlattributes | -| right | similar | temporary | update | xmlbinary | -| role | size | terminate | updatetext | xmlcast | -| rollback | smallint | textsize | upper | xmlcomment | -| rollup | some | than | usage | xmlconcat | -| routine | space | then | use | xmldocument | -| row | specific | time | user | xmlelement | -| rowcount | specifictype | timestamp | using | xmlexists | -| rowguidcol | sql | timezone_hour | value | xmlforest | -| rows | sqlca | timezone_minu | values | xmliterate | -| rule | sqlcode | to | var_pop | xmlnamespaces | -| save | sqlerror | top | var_samp | xmlparse | -| savepoint | sqlexception | trailing | varchar | xmlpi | -| schema | sqlstate | tran | variable | xmlquery | -| scope | sqlwarning | transaction | varying | xmlserialize | -| scroll | start | translate | view | xmltable | -| search | state | translate_reg | waitfor | xmltext | -| second | statement | translation | when | xmlvalidate | -| section | static | treat | whenever | year | -| securityaudit | statistics | trigger | where | zone | -| select | stddev_pop | trim | while | -| semantickeyph | stddev_samp | true | width_bucket |

      -

      Changelog

      -

      The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed.

      -

      Proceed with caution when editing materializations created with previous versions of this connector; -editing always upgrades your materialization to the latest connector version.

      -

      V1: 2023-09-01

      -
        -
      • First version
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/index.html deleted file mode 100644 index 5777e4c0c5..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/index.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - -Google Cloud SQL for SQLServer | Estuary Flow - - - - - - - - - -

      Google Cloud SQL for SQLServer

      -

      This connector materializes Flow collections into tables in a Microsoft SQLServer database.

      -

      It is available for use in the Flow web application. For local development or -open-source workflows, -ghcr.io/estuary/materialize-sqlserver:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A SQLServer database to which to materialize, and user credentials. -
          -
        • SQLServer 2017 and later are supported
        • -
        • The connector will create new tables in the database per your specification, -so user credentials must have access to create new tables.
        • -
        -
      • -
      • At least one Flow collection
      • -
      -

      Setup Google Cloud SQL for SQL Server

      -

      Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

      -
        -
      1. -

        To allow direct access:

        - -
      2. -
      3. -

        To allow secure connections via SSH tunneling:

        - -
      4. -
      5. -

        In your SQL client, connect to your instance as the default sqlserver user and issue the following commands.

        -
      6. -
      -
      USE <database>;
      -- Create user and password for use with the connector.
      CREATE LOGIN flow_materialize WITH PASSWORD = 'secret';
      CREATE USER flow_materialize FOR LOGIN flow_materialize;
      -- Grant control on the database to flow_materialize
      GRANT CONTROL ON DATABASE::<database> TO flow_materialize;
      -
        -
      1. In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 1433. -Together, you'll use the host:port as the address property when you configure the connector.
      2. -
      -

      Connecting to SQLServer

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          - -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        In your SQL client, connect to your instance as the default sqlserver user and issue the following commands.

        -
      4. -
      -
      USE <database>;
      -- Create user and password for use with the connector.
      CREATE LOGIN flow_materialize WITH PASSWORD = 'Secret123!';
      CREATE USER flow_materialize FOR LOGIN flow_materialize;
      -- Grant control on the database to flow_materialize
      GRANT CONTROL ON DATABASE::<database> TO flow_materialize;
      -
        -
      1. In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 1433. -Together, you'll use the host:port as the address property when you configure the connector.
      2. -
      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a SQLServer materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /databaseDatabaseName of the logical database to materialize to.stringRequired
      /addressAddressHost and port of the database. If only the host is specified, port will default to 1433.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /userUserDatabase user to connect as.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableTable name to materialize to. It will be created by the connector, unless the connector has previously created it.stringRequired
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.booleanfalse
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-sqlserver:dev
      config:
      database: flow
      address: localhost:5432
      password: flow
      user: flow
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      -

      Reserved words

      -

      SQLServer has a list of reserved words that must be quoted in order to be used as an identifier. -Flow considers all the reserved words in the official SQLServer documentation.

      -

      These reserved words are listed in the table below. Flow automatically quotes fields that are in this list.

      -

      | Reserved words | | | | | -| -------------- | ------------- | ------------- | ------------- | ------------- | ----- | -| absolute | connect | else | intersect | on | -| action | connection | end | intersection | only | -| ada | constraint | end-exec | interval | open | -| add | constraints | equals | into | opendatasourc | -| admin | constructor | errlvl | is | openquery | -| after | contains | escape | isolation | openrowset | -| aggregate | containstable | every | iterate | openxml | -| alias | continue | except | join | operation | -| all | convert | exception | key | option | -| allocate | corr | exec | kill | or | -| alter | corresponding | execute | language | order | -| and | count | exists | large | ordinality | -| any | covar_pop | exit | last | out | -| are | covar_samp | external | lateral | outer | -| array | create | extract | leading | output | -| as | cross | false | left | over | -| asc | cube | fetch | less | overlaps | -| asensitive | cume_dist | file | level | overlay | -| assertion | current | fillfactor | like | pad | -| asymmetric | current_catal | filter | like_regex | parameter | -| at | current_date | first | limit | parameters | -| atomic | current_defau | float | lineno | partial | -| authorization | current_path | for | ln | partition | -| avg | current_role | foreign | load | pascal | -| backup | current_schem | fortran | local | path | -| before | current_time | found | localtime | percent | -| begin | current_times | free | localtimestam | percent_rank | -| between | current_trans | freetext | locator | percentile_co | -| binary | current_user | freetexttable | lower | percentile_di | -| bit | cursor | from | map | pivot | -| bit_length | cycle | full | match | plan | -| blob | data | fulltexttable | max | position | -| boolean | database | function | member | position_rege | -| both | date | fusion | merge | postfix | -| breadth | day | general | method | precision | -| break | dbcc | get | min | prefix | -| browse | deallocate | global | minute | preorder | -| bulk | dec | go | mod | prepare | -| by | decimal | goto | modifies | preserve | -| call | declare | grant | modify | primary | -| called | default | group | module | print | -| cardinality | deferrable | grouping | month | prior | -| cascade | deferred | having | multiset | privileges | -| cascaded | delete | hold | names | proc | -| case | deny | holdlock | national | procedure | -| cast | depth | host | natural | public | -| catalog | deref | hour | nchar | raiserror | -| char | desc | identity | nclob | range | -| char_length | describe | identity_inse | new | read | -| character | descriptor | identitycol | next | reads | -| character_len | destroy | if | no | readtext | -| check | destructor | ignore | nocheck | real | -| checkpoint | deterministic | immediate | nonclustered | reconfigure | -| class | diagnostics | in | none | recursive | -| clob | dictionary | include | normalize | ref | -| close | disconnect | index | not | references | -| clustered | disk | indicator | null | referencing | -| coalesce | distinct | initialize | nullif | regr_avgx | -| collate | distributed | initially | numeric | regr_avgy | -| collation | domain | inner | object | regr_count | -| collect | double | inout | occurrences_r | regr_intercep | -| column | drop | input | octet_length | regr_r2 | -| commit | dump | insensitive | of | regr_slope | -| completion | dynamic | insert | off | regr_sxx | -| compute | each | int | offsets | regr_sxy | -| condition | element | integer | old | regr_syy | -| relative | semanticsimil | structure | truncate | window | -| release | semanticsimil | submultiset | try_convert | with | -| replication | sensitive | substring | tsequal | within | group | -| restore | sequence | substring_reg | uescape | within | -| restrict | session | sum | under | without | -| result | session_user | symmetric | union | work | -| return | set | system | unique | write | -| returns | sets | system_user | unknown | writetext | -| revert | setuser | table | unnest | xmlagg | -| revoke | shutdown | tablesample | unpivot | xmlattributes | -| right | similar | temporary | update | xmlbinary | -| role | size | terminate | updatetext | xmlcast | -| rollback | smallint | textsize | upper | xmlcomment | -| rollup | some | than | usage | xmlconcat | -| routine | space | then | use | xmldocument | -| row | specific | time | user | xmlelement | -| rowcount | specifictype | timestamp | using | xmlexists | -| rowguidcol | sql | timezone_hour | value | xmlforest | -| rows | sqlca | timezone_minu | values | xmliterate | -| rule | sqlcode | to | var_pop | xmlnamespaces | -| save | sqlerror | top | var_samp | xmlparse | -| savepoint | sqlexception | trailing | varchar | xmlpi | -| schema | sqlstate | tran | variable | xmlquery | -| scope | sqlwarning | transaction | varying | xmlserialize | -| scroll | start | translate | view | xmltable | -| search | state | translate_reg | waitfor | xmltext | -| second | statement | translation | when | xmlvalidate | -| section | static | treat | whenever | year | -| securityaudit | statistics | trigger | where | zone | -| select | stddev_pop | trim | while | -| semantickeyph | stddev_samp | true | width_bucket |

      -

      Changelog

      -

      The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed.

      -

      Proceed with caution when editing materializations created with previous versions of this connector; -editing always upgrades your materialization to the latest connector version.

      -

      V1: 2023-09-01

      -
        -
      • First version
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/index.html deleted file mode 100644 index b90da9fac7..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/index.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - -Microsoft SQLServer | Estuary Flow - - - - - - - - - -

      Microsoft SQLServer

      -

      This connector materializes Flow collections into tables in a Microsoft SQLServer database.

      -

      It is available for use in the Flow web application. For local development or -open-source workflows, -ghcr.io/estuary/materialize-sqlserver:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A SQLServer database to which to materialize, and user credentials. -
          -
        • SQLServer 2017 and later are supported
        • -
        • The connector will create new tables in the database per your specification, -so user credentials must have access to create new tables.
        • -
        -
      • -
      • At least one Flow collection
      • -
      -

      Setup

      -

      To meet these requirements, follow the steps for your hosting type.

      - -

      Self-hosted SQL Server

      -
        -
      1. Connect to the server and issue the following commands:
      2. -
      -
      USE <database>;
      -- Create user and password for use with the connector.
      CREATE LOGIN flow_materialize WITH PASSWORD = 'secret';
      CREATE USER flow_materialize FOR LOGIN flow_materialize;
      -- Grant control on the database to flow_materialize
      GRANT CONTROL ON DATABASE::<database> TO flow_materialize;
      -
        -
      1. -

        Allow secure connection to Estuary Flow from your hosting environment. Either:

        - -
      2. -
      -

      Azure SQL Database

      -
        -
      1. -

        Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel.

        -
          -
        1. -

          To allow direct access:

          - -
        2. -
        3. -

          To allow secure connections via SSH tunneling:

          - -
        4. -
        -
      2. -
      3. -

        In your SQL client, connect to your instance as the default sqlserver user and issue the following commands.

        -
      4. -
      -
      USE <database>;
      -- Create user and password for use with the connector.
      CREATE LOGIN flow_materialize WITH PASSWORD = 'secret';
      CREATE USER flow_materialize FOR LOGIN flow_materialize;
      -- Grant control on the database to flow_materialize
      GRANT CONTROL ON DATABASE::<database> TO flow_materialize;
      -
        -
      1. -

        Note the following important items for configuration:

        -
          -
        • Find the instance's host under Server Name. The port is always 1433. Together, you'll use the host:port as the address property when you configure the connector.
        • -
        -
      2. -
      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a SQLServer materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /databaseDatabaseName of the logical database to materialize to.stringRequired
      /addressAddressHost and port of the database. If only the host is specified, port will default to 3306.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /userUserDatabase user to connect as.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableTable name to materialize to. It will be created by the connector, unless the connector has previously created it.stringRequired
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.booleanfalse
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-sqlserver:dev
      config:
      database: flow
      address: localhost:5432
      password: flow
      user: flow
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      -

      Reserved words

      -

      SQLServer has a list of reserved words that must be quoted in order to be used as an identifier. -Flow considers all the reserved words in the official SQLServer documentation.

      -

      These reserved words are listed in the table below. Flow automatically quotes fields that are in this list.

      -

      | Reserved words | | | | | -| -------------- | ------------- | ------------- | ------------- | ------------- | ----- | -| absolute | connect | else | intersect | on | -| action | connection | end | intersection | only | -| ada | constraint | end-exec | interval | open | -| add | constraints | equals | into | opendatasourc | -| admin | constructor | errlvl | is | openquery | -| after | contains | escape | isolation | openrowset | -| aggregate | containstable | every | iterate | openxml | -| alias | continue | except | join | operation | -| all | convert | exception | key | option | -| allocate | corr | exec | kill | or | -| alter | corresponding | execute | language | order | -| and | count | exists | large | ordinality | -| any | covar_pop | exit | last | out | -| are | covar_samp | external | lateral | outer | -| array | create | extract | leading | output | -| as | cross | false | left | over | -| asc | cube | fetch | less | overlaps | -| asensitive | cume_dist | file | level | overlay | -| assertion | current | fillfactor | like | pad | -| asymmetric | current_catal | filter | like_regex | parameter | -| at | current_date | first | limit | parameters | -| atomic | current_defau | float | lineno | partial | -| authorization | current_path | for | ln | partition | -| avg | current_role | foreign | load | pascal | -| backup | current_schem | fortran | local | path | -| before | current_time | found | localtime | percent | -| begin | current_times | free | localtimestam | percent_rank | -| between | current_trans | freetext | locator | percentile_co | -| binary | current_user | freetexttable | lower | percentile_di | -| bit | cursor | from | map | pivot | -| bit_length | cycle | full | match | plan | -| blob | data | fulltexttable | max | position | -| boolean | database | function | member | position_rege | -| both | date | fusion | merge | postfix | -| breadth | day | general | method | precision | -| break | dbcc | get | min | prefix | -| browse | deallocate | global | minute | preorder | -| bulk | dec | go | mod | prepare | -| by | decimal | goto | modifies | preserve | -| call | declare | grant | modify | primary | -| called | default | group | module | print | -| cardinality | deferrable | grouping | month | prior | -| cascade | deferred | having | multiset | privileges | -| cascaded | delete | hold | names | proc | -| case | deny | holdlock | national | procedure | -| cast | depth | host | natural | public | -| catalog | deref | hour | nchar | raiserror | -| char | desc | identity | nclob | range | -| char_length | describe | identity_inse | new | read | -| character | descriptor | identitycol | next | reads | -| character_len | destroy | if | no | readtext | -| check | destructor | ignore | nocheck | real | -| checkpoint | deterministic | immediate | nonclustered | reconfigure | -| class | diagnostics | in | none | recursive | -| clob | dictionary | include | normalize | ref | -| close | disconnect | index | not | references | -| clustered | disk | indicator | null | referencing | -| coalesce | distinct | initialize | nullif | regr_avgx | -| collate | distributed | initially | numeric | regr_avgy | -| collation | domain | inner | object | regr_count | -| collect | double | inout | occurrences_r | regr_intercep | -| column | drop | input | octet_length | regr_r2 | -| commit | dump | insensitive | of | regr_slope | -| completion | dynamic | insert | off | regr_sxx | -| compute | each | int | offsets | regr_sxy | -| condition | element | integer | old | regr_syy | -| relative | semanticsimil | structure | truncate | window | -| release | semanticsimil | submultiset | try_convert | with | -| replication | sensitive | substring | tsequal | within | group | -| restore | sequence | substring_reg | uescape | within | -| restrict | session | sum | under | without | -| result | session_user | symmetric | union | work | -| return | set | system | unique | write | -| returns | sets | system_user | unknown | writetext | -| revert | setuser | table | unnest | xmlagg | -| revoke | shutdown | tablesample | unpivot | xmlattributes | -| right | similar | temporary | update | xmlbinary | -| role | size | terminate | updatetext | xmlcast | -| rollback | smallint | textsize | upper | xmlcomment | -| rollup | some | than | usage | xmlconcat | -| routine | space | then | use | xmldocument | -| row | specific | time | user | xmlelement | -| rowcount | specifictype | timestamp | using | xmlexists | -| rowguidcol | sql | timezone_hour | value | xmlforest | -| rows | sqlca | timezone_minu | values | xmliterate | -| rule | sqlcode | to | var_pop | xmlnamespaces | -| save | sqlerror | top | var_samp | xmlparse | -| savepoint | sqlexception | trailing | varchar | xmlpi | -| schema | sqlstate | tran | variable | xmlquery | -| scope | sqlwarning | transaction | varying | xmlserialize | -| scroll | start | translate | view | xmltable | -| search | state | translate_reg | waitfor | xmltext | -| second | statement | translation | when | xmlvalidate | -| section | static | treat | whenever | year | -| securityaudit | statistics | trigger | where | zone | -| select | stddev_pop | trim | while | -| semantickeyph | stddev_samp | true | width_bucket |

      -

      Changelog

      -

      The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed.

      -

      Proceed with caution when editing materializations created with previous versions of this connector; -editing always upgrades your materialization to the latest connector version.

      -

      V1: 2023-09-01

      -
        -
      • First version
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/index.html deleted file mode 100644 index 3784174047..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/index.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - -SQLite | Estuary Flow - - - - - - - - - -

      SQLite

      This connector materializes Flow collections into an ephemeral SQLite database. -Note that this connector is for demo and sandbox purposes, and if the connector is restarted for any -reason, the data materialized up to that point will be lost in the -materialization (your collection will stay in-tact and your other -materializations will have the data as normal).

      -

      It is available for use in the Flow web application. For local development or -open-source workflows, -ghcr.io/estuary/materialize-sqlite:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • At least one Flow collection
      • -
      -

      Configuration

      -

      This materialization requires no configuration, and all you need to do is choose -a collection to materialize.

      -

      Properties

      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableTable name to materialize to. It will be created by the connector, unless the connector has previously created it.stringRequired
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-sqlite:dev
      config: {}
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Delta updates

      -

      This connector does not support delta updates at the moment.

      -

      Reserved words

      -

      SQLite has a list of reserved words that must be quoted in order to be used as an identifier. -Flow considers all the reserved words that are marked as "reserved" in any of -the columns in the official SQlite documentation.

      -

      These reserve words are listed in the table below. Flow automatically quotes fields that are in this list.

      -
      Reserved words
      abortintersect
      actioninto
      addis
      afterisnull
      alljoin
      alterkey
      alwayslast
      analyzeleft
      andlike
      aslimit
      ascmatch
      attachmaterialized
      autoincrementnatural
      beforeno
      beginnot
      betweennothing
      bynotnull
      cascadenull
      casenulls
      castof
      checkoffset
      collateon
      columnor
      commitorder
      conflictothers
      constraintouter
      createover
      crosspartition
      currentplan
      current_datepragma
      current_timepreceding
      current_timestampprimary
      databasequery
      defaultraise
      deferrablerange
      deferredrecursive
      deletereferences
      descregexp
      detachreindex
      distinctrelease
      dorename
      dropreplace
      eachrestrict
      elsereturning
      endright
      escaperollback
      exceptrow
      excluderows
      exclusivesavepoint
      existsselect
      explainset
      failtable
      filtertemp
      firsttemporary
      followingthen
      forties
      foreignto
      fromtransaction
      fulltrigger
      generatedunbounded
      globunion
      groupunique
      groupsupdate
      havingusing
      ifvacuum
      ignorevalues
      immediateview
      invirtual
      indexwhen
      indexedwhere
      initiallywindow
      innerwith
      insertwithout
      instead
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/index.html deleted file mode 100644 index 714d4892ad..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/index.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - -Snowflake | Estuary Flow - - - - - - - - - -

      Snowflake

      -

      This connector materializes Flow collections into tables in a Snowflake database. -It allows both standard and delta updates. Snowpipe is additionally available for delta update bindings.

      -

      The connector first uploads data changes to a Snowflake table stage. -From there, it transactionally applies the changes to the Snowflake table.

      -

      ghcr.io/estuary/materialize-snowflake:dev provides the latest connector image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A Snowflake account that includes: -
          -
        • A target database, to which you'll materialize data
        • -
        • A schema — a logical grouping of database objects — within the target database
        • -
        • A virtual warehouse
        • -
        • A user with a role assigned that grants the appropriate access levels to these resources. -See the script below for details.
        • -
        -
      • -
      • Know your Snowflake account's host URL. This is formatted using your Snowflake account identifier, -for example, orgname-accountname.snowflakecomputing.com.
      • -
      • At least one Flow collection
      • -
      -
      tip

      If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps.

      -

      Setup

      -

      To meet the prerequisites, copy and paste the following script into the Snowflake SQL editor, replacing the variable names in the first six lines.

      -

      If you'd like to use an existing database, warehouse, and/or schema, be sure to set -database_name, warehouse_name, and estuary_schema accordingly. If you specify a new name, the script will create the item for you. You can set estuary_role, estuary_user, and estuary_password to whatever you'd like.

      -

      Check the All Queries check box, and click Run.

      -
      set database_name = 'ESTUARY_DB';
      set warehouse_name = 'ESTUARY_WH';
      set estuary_role = 'ESTUARY_ROLE';
      set estuary_user = 'ESTUARY_USER';
      set estuary_password = 'secret';
      set estuary_schema = 'ESTUARY_SCHEMA';
      -- create role and schema for Estuary
      create role if not exists identifier($estuary_role);
      grant role identifier($estuary_role) to role SYSADMIN;
      -- Create snowflake DB
      create database if not exists identifier($database_name);
      use database identifier($database_name);
      create schema if not exists identifier($estuary_schema);
      -- create a user for Estuary
      create user if not exists identifier($estuary_user)
      password = $estuary_password
      default_role = $estuary_role
      default_warehouse = $warehouse_name;
      grant role identifier($estuary_role) to user identifier($estuary_user);
      grant all on schema identifier($estuary_schema) to identifier($estuary_role);
      -- create a warehouse for estuary
      create warehouse if not exists identifier($warehouse_name)
      warehouse_size = xsmall
      warehouse_type = standard
      auto_suspend = 60
      auto_resume = true
      initially_suspended = true;
      -- grant Estuary role access to warehouse
      grant USAGE
      on warehouse identifier($warehouse_name)
      to role identifier($estuary_role);
      -- grant Estuary access to database
      grant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role);
      -- change role to ACCOUNTADMIN for STORAGE INTEGRATION support to Estuary (only needed for Snowflake on GCP)
      use role ACCOUNTADMIN;
      grant CREATE INTEGRATION on account to role identifier($estuary_role);
      use role sysadmin;
      COMMIT;
      -

      Key-pair Authentication & Snowpipe

      -

      In order to enable use of Snowpipe for delta updates bindings, you need to authenticate -using key-pair authentication, also known as JWT authentication.

      -

      To set up your user for key-pair authentication, first generate a key-pair in your shell:

      -
      # generate a private key
      openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
      # generate a public key
      openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
      # read the public key and copy it to clipboard
      cat rsa_key.pub

      -----BEGIN PUBLIC KEY-----
      MIIBIj...
      -----END PUBLIC KEY-----
      -

      Then assign the public key with your Snowflake user using these SQL commands:

      -
      ALTER USER $estuary_user SET RSA_PUBLIC_KEY='MIIBIjANBgkqh...'
      -

      Verify the public key fingerprint in Snowflake matches the one you have locally:

      -
      DESC USER $estuary_user;
      SELECT TRIM((SELECT "value" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
      WHERE "property" = 'RSA_PUBLIC_KEY_FP'), 'SHA256:');
      -

      Then compare with the local version:

      -
      openssl rsa -pubin -in rsa_key.pub -outform DER | openssl dgst -sha256 -binary | openssl enc -base64
      -

      Now you can use the generated private key when configuring your Snowflake connector. Once you have key-pair authentication enabled, delta updates bindings will use Snowpipe for loading data.

      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a Snowflake materialization, which will direct one or more of your Flow collections to new Snowflake tables.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /hostHost (Account URL)The Snowflake Host used for the connection. Example: orgname-accountname.snowflakecomputing.com (do not include the protocol).stringRequired
      /databaseDatabaseName of the Snowflake database to which to materializestringRequired
      /schemaSchemaDatabase schema for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tablesstringRequired
      /warehouseWarehouseName of the data warehouse that contains the databasestring
      /roleRoleRole assigned to the userstring
      /accountAccountThe Snowflake account identifierstring
      /credentialsCredentialsCredentials for authenticationobjectRequired
      /credentials/auth_typeAuthentication typeOne of user_password or jwtstringRequired
      /credentials/userUserSnowflake usernamestringRequired
      /credentials/passwordPasswordRequired if using user_password authenticationstringRequired
      /credentials/privateKeyPrivate KeyRequired if using jwt authenticationstringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableTable namestringRequired
      /schemaAlternative SchemaAlternative schema for this tablestring
      /delta_updatesDelta updatesWhether to use standard or delta updatesboolean
      -

      Sample

      -

      User and password authentication:

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      config:
      database: acmeCo_db
      host: orgname-accountname.snowflakecomputing.com
      schema: acmeCo_flow_schema
      warehouse: acmeCo_warehouse
      credentials:
      auth_type: user_pasword
      user: snowflake_user
      password: secret
      image: ghcr.io/estuary/materialize-snowflake:dev
      # If you have multiple collections you need to materialize, add a binding for each one
      # to ensure complete data flow-through
      bindings:
      - resource:
      table: ${table_name}
      source: ${PREFIX}/${source_collection}
      -

      Key-pair authentication:

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      config:
      database: acmeCo_db
      host: orgname-accountname.snowflakecomputing.com
      schema: acmeCo_flow_schema
      warehouse: acmeCo_warehouse
      credentials:
      auth_type: jwt
      user: snowflake_user
      privateKey: |
      -----BEGIN PRIVATE KEY-----
      MIIEv....
      ...
      ...
      ...
      ...
      ...
      -----END PRIVATE KEY-----
      image: ghcr.io/estuary/materialize-snowflake:dev
      # If you have multiple collections you need to materialize, add a binding for each one
      # to ensure complete data flow-through
      bindings:
      - resource:
      table: ${table_name}
      source: ${PREFIX}/${source_collection}
      -

      Sync Schedule

      -

      This connector supports configuring a schedule for sync frequency. You can read -about how to configure this here.

      -

      Snowflake compute is priced per second of -activity, with a minimum of 60 seconds. Inactive warehouses don't incur charges. -To keep costs down, you'll want to minimize your warehouse's active time.

      -

      To accomplish this, we recommend a two-pronged approach:

      -
        -
      • -

        Configure your Snowflake warehouse to auto-suspend after 60 seconds.

        -

        This ensures that after each transaction completes, you'll only be charged for one minute of compute, Snowflake's smallest granularity.

        -

        Use a query like the one shown below, being sure to substitute your warehouse name:

        -
        ALTER WAREHOUSE ESTUARY_WH SET auto_suspend = 60;
        -
      • -
      • -

        Configure the materialization's Sync Schedule based on your requirements for data freshness.

        -
      • -
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      -

      Enabling delta updates will prevent Flow from querying for documents in your Snowflake table, which can reduce latency and costs for large datasets. -If you're certain that all events will have unique keys, enabling delta updates is a simple way to improve -performance with no effect on the output. -However, enabling delta updates is not suitable for all workflows, as the resulting table in Snowflake won't be fully reduced.

      -

      You can enable delta updates on a per-binding basis:

      -
          bindings:
      - resource:
      table: ${table_name}
      delta_updates: true
      source: ${PREFIX}/${source_collection}
      -

      Performance considerations

      -

      Optimizing performance for standard updates

      -

      When using standard updates for a large dataset, the collection key you choose can have a significant impact on materialization performance and efficiency.

      -

      Snowflake uses micro partitions to physically arrange data within tables. -Each micro partition includes metadata, such as the minimum and maximum values for each column. -If you choose a collection key that takes advantage of this metadata to help Snowflake prune irrelevant micro partitions, -you'll see dramatically better performance.

      -

      For example, if you materialize a collection with a key of /user_id, it will tend to perform far worse than a materialization of /date, /user_id. -This is because most materializations tend to be roughly chronological over time, and that means that data is written to Snowflake in roughly /date order.

      -

      This means that updates of keys /date, /user_id will need to physically read far fewer rows as compared to a key like /user_id, -because those rows will tend to live in the same micro-partitions, and Snowflake is able to cheaply prune micro-partitions that aren't relevant to the transaction.

      -

      Snowpipe

      -

      Snowpipe allows for loading data into target tables without waking up the warehouse, which can be cheaper and more performant. Snowpipe can be used for delta updates bindings, and it requires configuring your authentication using a private key. Instructions for configuring key-pair authentication can be found in this page: Key-pair Authentication & Snowpipe

      -

      Timestamp Data Type Mapping

      -

      Flow materializes timestamp data types as either TIMESTAMP_LTZ or -TIMESTAMP_TZ columns in Snowflake. TIMESTAMP_LTZ is used unless the -Snowflake TIMESTAMP_TYPE_MAPPING configuration is set to TIMESTAMP_TZ, -which will cause Flow to use TIMESTAMP_TZ columns. Flow never creates columns -as TIMESTAMP_NTZ. See Snowflake documentation on TIMESTAMP_TYPE_MAPPING for -more -information.

      -

      Reserved words

      -

      Snowflake has a list of reserved words that must be quoted in order to be used as an identifier. Flow automatically quotes fields that are in the reserved words list. You can find this list in Snowflake's documentation here and in the table below.

      -
      caution

      In Snowflake, objects created with quoted identifiers must always be referenced exactly as created, including the quotes. Otherwise, SQL statements and queries can result in errors. See the Snowflake docs.

      -
      Reserved words
      accountfromqualify
      allfullregexp
      altergrantrevoke
      andgroupright
      anygsclusterrlike
      ashavingrow
      betweenilikerows
      byinsample
      caseincrementschema
      castinnerselect
      checkinsertset
      columnintersectsome
      connectintostart
      connectionistable
      constraintissuetablesample
      createjointhen
      crosslateralto
      currentlefttrigger
      current_dateliketrue
      current_timelocaltimetry_cast
      current_timestamplocaltimestampunion
      current_userminusunique
      databasenaturalupdate
      deletenotusing
      distinctnullvalues
      dropofview
      elseonwhen
      existsorwhenever
      falseorderwhere
      followingorganizationwith
      for
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/index.html deleted file mode 100644 index 3d2c948572..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/index.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - -AlloyDB | Estuary Flow - - - - - - - - - -

      AlloyDB

      -

      This connector materializes Flow collections into tables in an AlloyDB database.

      -

      AlloyDB is a fully managed, PostgreSQL-compatible database available in the Google Cloud platform. -This connector is derived from the PostgreSQL materialization connector, -so the same configuration applies, but the setup steps look somewhat different.

      -

      It's available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/materialize-alloydb:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • An AlloyDB database to which to materialize, and user credentials. -The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.
      • -
      • A virtual machine to connect securely to the instance via SSH tunneling. (AlloyDB doesn't support IP allowlisting.) -Follow the instructions to create a virtual machine for SSH tunneling -in the same Google Cloud project as your instance.
      • -
      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a AlloyDB materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database.

      -

      Properties

      -

      Endpoint

      -

      The SSH config section is required for this connector. -You'll fill in the database address with a localhost IP address, -and specify your VM's IP address as the SSH address. -See the table below and the sample config.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /databaseDatabaseName of the logical database to materialize to.string
      /addressAddressHost and port. Set to 127.0.0.1:5432 to enable SSH tunneling.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /schemaDatabase SchemaDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tablesstring"public"
      /userUserDatabase user to connect as.stringRequired
      networkTunnelNetwork TunnelConnect to your system through an SSH server that acts as a bastion host for your network.Object
      networkTunnel/sshForwardingSSH ForwardingObject
      networkTunnel/sshForwarding/sshEndpointSSH EndpointEndpoint of the remote SSH server (in this case, your Google Cloud VM) that supports tunneling (in the form of ssh://user@address.String
      networkTunnel/sshForwarding/privateKeySSH Private KeyPrivate key to connect to the remote SSH server.String
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /additional_table_create_sqlAdditional Table Create SQLAdditional SQL statement(s) to be run in the same transaction that creates the table.string
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.booleanfalse
      /schemaAlternative SchemaAlternative schema for this table (optional). Overrides schema set in endpoint configuration.string
      /tableTableTable name to materialize to. It will be created by the connector, unless the connector has previously created it.stringRequired
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-alloydb:dev
      config:
      database: postgres
      address: 127.0.0.1:5432
      password: flow
      user: flow
      networkTunnel:
      sshForwarding:
      sshEndpoint: ssh://sshUser@<vm-ip-address>
      privateKey: |2
      -----BEGIN RSA PRIVATE KEY-----
      MIICXAIBAAKBgQCJO7G6R+kv2MMS8Suw21sk2twHg8Vog0fjimEWJEwyAfFM/Toi
      EJ6r5RTaSvN++/+MPWUll7sUdOOBZr6ErLKLHEt7uXxusAzOjMxFKZpEARMcjwHY
      v/tN1A2OYU0qay1DOwknEE0i+/Bvf8lMS7VDjHmwRaBtRed/+iAQHf128QIDAQAB
      AoGAGoOUBP+byAjDN8esv1DCPU6jsDf/Tf//RbEYrOR6bDb/3fYW4zn+zgtGih5t
      CR268+dwwWCdXohu5DNrn8qV/Awk7hWp18mlcNyO0skT84zvippe+juQMK4hDQNi
      ywp8mDvKQwpOuzw6wNEitcGDuACx5U/1JEGGmuIRGx2ST5kCQQDsstfWDcYqbdhr
      5KemOPpu80OtBYzlgpN0iVP/6XW1e5FCRp2ofQKZYXVwu5txKIakjYRruUiiZTza
      QeXRPbp3AkEAlGx6wMe1l9UtAAlkgCFYbuxM+eRD4Gg5qLYFpKNsoINXTnlfDry5
      +1NkuyiQDjzOSPiLZ4Abpf+a+myjOuNL1wJBAOwkdM6aCVT1J9BkW5mrCLY+PgtV
      GT80KTY/d6091fBMKhxL5SheJ4SsRYVFtguL2eA7S5xJSpyxkadRzR0Wj3sCQAvA
      bxO2fE1SRqbbF4cBnOPjd9DNXwZ0miQejWHUwrQO0inXeExNaxhYKQCcnJNUAy1J
      6JfAT/AbxeSQF3iBKK8CQAt5r/LLEM1/8ekGOvBh8MAQpWBW771QzHUN84SiUd/q
      xR9mfItngPwYJ9d/pTO7u9ZUPHEoat8Ave4waB08DsI=
      -----END RSA PRIVATE KEY-----
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Reserved words

      -

      PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier. -Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation.

      -

      These reserve words are listed in the table below. Flow automatically quotes fields that are in this list.

      -
      Reserved words
      abscurrent_transform_group_for_typeindicatorordersqlexception
      absolutecurrent_userinitialoutsqlstate
      acoscursorinitiallyoutersqlwarning
      actioncycleinneroutputsqrt
      adddatalinkinoutoverstart
      alldateinputoverlapsstatic
      allocatedayinsensitiveoverlaystddev_pop
      alterdeallocateinsertpadstddev_samp
      analysedecintparametersubmultiset
      analyzedecfloatintegerpartialsubset
      anddecimalintersectpartitionsubstring
      anydeclareintersectionpatternsubstring_regex
      aredefaultintervalpersucceeds
      arraydeferrableintopercentsum
      array_aggdeferredispercentile_contsymmetric
      array_max_cardinalitydefineisnullpercentile_discsystem
      asdeleteisolationpercent_ranksystem_time
      ascdense_rankjoinperiodsystem_user
      asensitivederefjson_arraypermutetable
      asindescjson_arrayaggplacingtablesample
      assertiondescribejson_existsportiontan
      asymmetricdescriptorjson_objectpositiontanh
      atdeterministicjson_objectaggposition_regextemporary
      atandiagnosticsjson_querypowerthen
      atomicdisconnectjson_tableprecedestime
      authorizationdistinctjson_table_primitiveprecisiontimestamp
      avgdlnewcopyjson_valuepreparetimezone_hour
      begindlpreviouscopykeypreservetimezone_minute
      begin_framedlurlcompletelagprimaryto
      begin_partitiondlurlcompleteonlylanguagepriortrailing
      betweendlurlcompletewritelargeprivilegestransaction
      bigintdlurlpathlastproceduretranslate
      binarydlurlpathonlylast_valueptftranslate_regex
      bitdlurlpathwritelateralpublictranslation
      bit_lengthdlurlschemeleadrangetreat
      blobdlurlserverleadingranktrigger
      booleandlvalueleftreadtrim
      bothdolevelreadstrim_array
      bydomainlikerealtrue
      calldoublelike_regexrecursivetruncate
      calleddroplimitrefuescape
      cardinalitydynamiclistaggreferencesunion
      cascadeeachlnreferencingunique
      cascadedelementlocalregr_avgxunknown
      caseelselocaltimeregr_avgyunmatched
      castemptylocaltimestampregr_countunnest
      catalogendlogregr_interceptupdate
      ceilend-execlog10regr_r2upper
      ceilingend_framelowerregr_slopeusage
      charend_partitionmatchregr_sxxuser
      characterequalsmatchesregr_sxyusing
      character_lengthescapematch_numberregr_syyvalue
      char_lengtheverymatch_recognizerelativevalues
      checkexceptmaxreleasevalue_of
      classifierexceptionmeasuresrestrictvarbinary
      clobexecmemberresultvarchar
      closeexecutemergereturnvariadic
      coalesceexistsmethodreturningvarying
      collateexpminreturnsvar_pop
      collationexternalminuterevokevar_samp
      collectextractmodrightverbose
      columnfalsemodifiesrollbackversioning
      commitfetchmodulerollupview
      concurrentlyfiltermonthrowwhen
      conditionfirstmultisetrowswhenever
      connectfirst_valuenamesrow_numberwhere
      connectionfloatnationalrunningwidth_bucket
      constraintfloornaturalsavepointwindow
      constraintsforncharschemawith
      containsforeignnclobscopewithin
      continuefoundnewscrollwithout
      convertframe_rownextsearchwork
      copyfreenosecondwrite
      corrfreezenonesectionxml
      correspondingfromnormalizeseekxmlagg
      cosfullnotselectxmlattributes
      coshfunctionnotnullsensitivexmlbinary
      countfusionnth_valuesessionxmlcast
      covar_popgetntilesession_userxmlcomment
      covar_sampglobalnullsetxmlconcat
      creategonullifshowxmldocument
      crossgotonumericsimilarxmlelement
      cubegrantoccurrences_regexsinxmlexists
      cume_distgroupoctet_lengthsinhxmlforest
      currentgroupingofsizexmliterate
      current_cataloggroupsoffsetskipxmlnamespaces
      current_datehavingoldsmallintxmlparse
      current_default_transform_groupholdomitsomexmlpi
      current_pathhouronspacexmlquery
      current_roleidentityonespecificxmlserialize
      current_rowilikeonlyspecifictypexmltable
      current_schemaimmediateopensqlxmltext
      current_timeimportoptionsqlcodexmlvalidate
      current_timestampinorsqlerroryear
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/index.html deleted file mode 100644 index a8f4f7784a..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/index.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - -Amazon DynamoDB | Estuary Flow - - - - - - - - - -

      Amazon DynamoDB

      -

      This connector materializes Flow collections into tables in an Amazon DynamoDB.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, -ghcr.io/estuary/materialize-dynamodb:dev -provides the latest version of the connector as a Docker image. You can also follow the link in your -browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • -

        An IAM user with the following -permissions:

        -
          -
        • BatchGetItem on all resources
        • -
        • BatchWriteItem on all resources
        • -
        • CreateTable on all resources
        • -
        -

        These permissions should be specified with the dynamodb: prefix in an IAM policy document. For -more details and examples, see Using identity-based policies with Amazon -DynamoDB -in the Amazon docs.

        -
      • -
      • -

        The AWS access key and secret access key for the user. See the AWS -blog for help finding these -credentials.

        -
      • -
      -

      Collection Requirements

      -

      Materialized collections can have at most 2 collection keys.

      -

      By default, the materialized tables will include the collection keys as the DynamoDB partition key -and sort key, and the root document. The root document is materialized as "flow_document" unless -an alternate projection is configured for the source -collection. Additional fields may be included, but DynamoDB has a 400KB size limit on an individual -row so selecting too many fields of a collection with large documents will cause errors if the row -size exceeds that.

      -

      The root document is materialized as a DynamoDB Map type, and the fields of the document must be -valid DynamoDB Map keys.

      -

      To resolve issues with collections with more than 2 keys, excessively large documents, or -incompatible field names, use a derivation to derive a new -collection and materialize that collection instead.

      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the catalog -specification file. See connectors to learn more -about using connectors. The values and specification sample below provide configuration details -specific to the DynamoDB materialization connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /awsAccessKeyIdAccess Key IDAWS Access Key ID for materializing to DynamoDB.stringRequired
      /awsSecretAccessKeySecret Access KeyAWS Secret Access Key for materializing to DynamoDB.stringRequired
      /regionAWS RegionRegion of the materialized tables.stringRequired
      advanced/endpointAWS EndpointThe AWS endpoint URI to connect to. Use if you're materializing to a compatible API that isn't provided by AWS.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTable NameThe name of the table to be materialized to.stringRequired
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates. Default is false.booleanfalse
      -

      Sample

      -
      materializations:
      ${PREFIX}/${MATERIALIZATION_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-dynamodb:dev
      config:
      awsAccessKeyId: "example-aws-access-key-id"
      awsSecretAccessKey: "example-aws-secret-access-key"
      region: "us-east-1"
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/index.html deleted file mode 100644 index efb107113e..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/index.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - -Amazon Redshift | Estuary Flow - - - - - - - - - -

      Amazon Redshift

      -

      This connector materializes Flow collections into tables in an Amazon Redshift database.

      -

      The connector uses your AWS account to materialize to Redshift tables by way of files in an S3 -bucket. The files in the bucket as as a temporary staging area for data storage and retrieval.

      -

      ghcr.io/estuary/materialize-redshift:dev -provides the latest connector image. You can also follow the link in your browser to see past image -versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A Redshift cluster accessible either directly or using an SSH tunnel. The user configured to -connect to Redshift must have at least "create table" permissions for the configured schema. The -connector will create new tables in the database per your specification. Tables created manually -in advance are not supported. See setup for more information.
      • -
      • An S3 bucket for staging temporary files. For best performance the bucket should be in the same -region as your Redshift cluster. See this -guide for -instructions on setting up a new S3 bucket.
      • -
      • An AWS root or IAM user with read and write -access -to the S3 bucket. For this user, you'll need the access key and secret access key. See the -AWS blog for help finding -these credentials.
      • -
      -

      Configuration

      -

      Use the below properties to configure an Amazon Redshift materialization, which will direct one or -more of your Flow collections to your desired tables in the database.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressHost and port of the database. Example: red-shift-cluster-name.account.us-east-2.redshift.amazonaws.com:5439stringRequired
      /userUserDatabase user to connect as.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /databaseDatabaseName of the logical database to materialize to. The materialization will attempt to connect to the default database for the provided user if omitted.string
      /schemaDatabase SchemaDatabase schema for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables.string"public"
      /awsAccessKeyIdAccess Key IDAWS Access Key ID for reading and writing data to the S3 staging bucket.stringRequired
      /awsSecretAccessKeySecret Access KeyAWS Secret Access Key for reading and writing data to the S3 staging bucket.stringRequired
      /bucketS3 Staging BucketName of the S3 bucket to use for staging data loads.stringRequired
      /regionRegionRegion of the S3 staging bucket. For optimal performance this should be in the same region as the Redshift database cluster.stringRequired
      /bucketPathBucket PathA prefix that will be used to store objects in S3.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableName of the database table.stringRequired
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates. Default is false.booleanfalse
      /schemaAlternative SchemaAlternative schema for this table (optional).string
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/materialize-redshift:dev"
      config:
      address: "redshift-cluster.account.us-east-2.redshift.amazonaws.com:5439"
      user: user
      password: password
      database: db
      awsAccessKeyId: access_key_id
      awsSecretAccessKey: secret_access_key
      bucket: my-bucket
      region: us-east-2
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Sync Schedule

      -

      This connector supports configuring a schedule for sync frequency. You can read -about how to configure this here.

      -

      Setup

      -

      You must configure your cluster to allow connections from Estuary. This can be accomplished by -making your cluster accessible over the internet for the -Estuary Flow IP addresses, or using an SSH tunnel. Connecting to the S3 -staging bucket does not use the network tunnel and connects over HTTPS only.

      -

      Instructions for making a cluster accessible over the internet can be found -here. -When using this option, database connections are made over SSL only.

      -

      For allowing secure connections via SSH tunneling:

      -
        -
      1. -

        Refer to the guide to configure an SSH server on using an -AWS EC2 instance.

        -
      2. -
      3. -

        Configure your connector as described in the configuration section above, with -the additional of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to -endpoints on secure -networks for additional -details and a sample.

        -
      4. -
      -

      Naming Conventions

      -

      Redshift has requirements for names and -identifiers and this connector will -automatically apply quoting when needed. All table identifiers and column identifiers (corresponding -to Flow collection fields) are treated as lowercase, unless the -enable_case_sensitive_identifier -configuration is enabled on the cluster being materialized to. Table names for bindings must be -unique on a case-insensitive basis, as well as field names of the source collection. If any names -are not unique on a case-insensitive basis (ex: myField vs. MyField) the materialization will -fail to apply.

      -

      If necessary, you can add projections to your -collection specification to change field names.

      -

      Performance considerations

      -

      For best performance there should at most one Redshift materialization active per Redshift schema. -Additional collections to be materialized should be added as bindings to this single materialization -rather than creating a separate materialization for each collection.

      -

      In order to achieve exactly-once processing of collection documents, the materialization creates and -uses metadata tables located in the schema configured by the endpoint schema property. To commit a -transaction, a table-level lock is acquired on these metadata tables. If there are multiple -materializations using the same metadata tables, they will need to take turns acquiring these locks. -This locking behavior prevents "serializable isolation violation" errors in the case of multiple -materializations sharing the same metadata tables at the expense of allowing only a single -materialization to be actively committing a transaction.

      -

      Maximum record size

      -

      The maximum size of a single input document is 4 MB. Attempting to materialize collections with -documents larger than 4 MB will result in an error. To materialize this data you can use a -derivation to create a derived collection with smaller -documents, or exclude fields containing excessive amounts of data by customizing the materialized -fields.

      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/index.html deleted file mode 100644 index 1f4da72bdf..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - -CSV Files in Amazon S3 | Estuary Flow - - - - - - - - - -

      CSV Files in Amazon S3

      -

      This connector materializes delta updates of -Flow collections into files in an S3 bucket per the CSV format described in -RFC-4180. The CSV files are compressed using Gzip -compression.

      -

      The delta updates are batched within Flow, converted to CSV files, and then pushed to the S3 bucket -at a time interval that you set. Files are limited to a configurable maximum size. Each materialized -Flow collection will produce many separate files.

      -

      ghcr.io/estuary/materialize-s3-csv:dev provides -the latest connector image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • An S3 bucket to write files to. See this -guide for -instructions on setting up a new S3 bucket.
      • -
      • An AWS root or IAM user with the -s3:PutObject permission -for the S3 bucket. For this user, you'll need the access key and secret access key. See -the AWS blog for help -finding these credentials.
      • -
      -

      Configuration

      -

      Use the below properties to configure the materialization, which will direct one or more of your -Flow collections to your bucket.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /bucketBucketBucket to store materialized objects.stringRequired
      /awsAccessKeyIdAWS Access Key IDAccess Key ID for writing data to the bucket.stringRequired
      /awsSecretAccessKeyAWS Secret Access keySecret Access Key for writing data to the bucket.stringRequired
      /regionRegionRegion of the bucket to write to.stringRequired
      /uploadIntervalUpload IntervalFrequency at which files will be uploaded.string5m
      /prefixPrefixOptional prefix that will be used to store objects.string
      /fileSizeLimitFile Size LimitApproximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank.integer
      /endpointCustom S3 EndpointThe S3 endpoint URI to connect to. Use if you're materializing to a compatible API that isn't provided by AWS. Should normally be left blank.string
      /csvConfig/delimiterDelimiterCharacter to separate columns within a row. Defaults to a comma if blank. Must be a single character with a byte length of 1.integer
      /csvConfig/nullStringNull StringString to use to represent NULL values. Defaults to an empty string if blank.integer
      /csvConfig/skipHeadersSkip HeadersDo not write headers to files.integer
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /pathPathThe path that objects will be materialized to.stringRequired
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/materialize-s3-csv:dev"
      config:
      bucket: bucket
      awsAccessKeyId: <access_key_id>
      awsSecretAccessKey: <secret_access_key>
      region: us-east-2
      uploadInterval: 5m
      bindings:
      - resource:
      path: ${COLLECTION_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      File Names

      -

      Materialized files are named with monotonically increasing integer values, padded with leading 0's -so they remain lexically sortable. For example, a set of files may be materialized like this for a -given collection:

      -
      bucket/prefix/path/v0000000000/00000000000000000000.csv
      bucket/prefix/path/v0000000000/00000000000000000001.csv
      bucket/prefix/path/v0000000000/00000000000000000002.csv
      -

      Here the values for bucket and prefix are from your endpoint configuration. The path is -specific to the binding configuration. v0000000000 represents the current backfill counter -for binding and will be increased if the binding is re-backfilled, along with the file names -starting back over from 0.

      -

      Eventual Consistency

      -

      In rare circumstances, recently materialized files may be re-written by files with the same name if -the materialization shard is interrupted in the middle of processing a Flow transaction and the -transaction must be re-started. Files that were committed as part of a completed transaction will -never be re-written. In this way, eventually all collection data will be written to files -effectively-once, although inconsistencies are possible when accessing the most recently written -data.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/index.html deleted file mode 100644 index cbd57c8bc9..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - -Apache Iceberg Tables in Amazon S3 | Estuary Flow - - - - - - - - - -

      Apache Iceberg Tables in Amazon S3

      -

      This connector materializes delta updates of -Flow collections into Apache Iceberg tables using Amazon S3 for object storage and AWS -Glue as -the Iceberg catalog.

      -

      The delta updates are batched within Flow, converted to parquet files, and then append to Iceberg -tables at a time interval that you set.

      -

      ghcr.io/estuary/materialize-s3-iceberg:dev -provides the latest connector image. You can also follow the link in your browser to see past image -versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • An S3 bucket to write files to. See this -guide for -instructions on setting up a new S3 bucket.
      • -
      • An AWS root or IAM user with access to AWS Glue. See this -guide for instructions on setting up -IAM permissions for a user to access AWS Glue. Make sure to select Read and write access for -your bucket to enable the connector to write data.
      • -
      • For this user, you'll need the access key and secret access key. See the AWS -blog for help finding these -credentials.
      • -
      -

      Configuration

      -

      Use the below properties to configure the materialization, which will direct one or more of your -Flow collections to your tables.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /aws_access_key_idAWS Access Key IDAccess Key ID for accessing AWS services.stringRequired
      /aws_secret_access_keyAWS Secret Access keySecret Access Key for accessing AWS services.stringRequired
      /bucketBucketThe S3 bucket to write data files to.stringRequired
      /prefixPrefixOptional prefix that will be used to store objects.string
      /regionRegionAWS Region.stringRequired
      /namespaceNamespaceNamespace for bound collection tables (unless overridden within the binding resource configuration).stringRequired
      /upload_intervalUpload IntervalFrequency at which files will be uploaded. Must be a valid ISO8601 duration string no greater than 4 hours.stringPT5M
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableName of the database table.stringRequired
      /namespaceAlternative NamespaceAlternative namespace for this table (optional).string
      /delta_updatesDelta UpdatesShould updates to this table be done via delta updates. Currently this connector only supports delta updates.booltrue
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/materialize-s3-iceberg:dev"
      config:
      aws_access_key_id: <access_key_id>
      aws_secret_access_key: <secret_access_key>
      bucket: bucket
      region: us-east-2
      namespace: namespace
      upload_interval: PT5M
      bindings:
      - resource:
      table: ${COLLECTION_NAME}
      delta_updates: true
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Iceberg Column Types

      -

      Flow collection fields are written to Iceberg table columns based on the data type of the field. -Iceberg V2 primitive type columns are created -for these Flow collection fields:

      -
      Collection Field Data TypeIceberg Column Type
      arraystring
      objectstring
      booleanboolean
      integerlong
      numberdouble
      string with {contentEncoding: base64}binary
      string with {format: date-time}timestamptz (with microsecond precision)
      string with {format: date}date
      string with {format: integer}long
      string with {format: number}double
      string (all others)string
      -

      Flow collection fields with {type: string, format: time} and {type: string, format: uuid} are -materialized as string columns rather than time and uuid columns for compatibility with -Apache Spark. Nested types are not currently -supported.

      -

      Table Maintenance

      -

      To ensure optimal query performance, you should conduct regular -maintenance for your materialized tables since -the connector will not perform this maintenance automatically (support for automatic table -maintenance is planned).

      -

      If you're using the AWS Glue catalog, you can enable automatic data file compaction by following -this guide.

      -

      At-Least-Once Semantics

      -

      In rare cases, it may be possible for documents from a source collection to be appended to a target -table more than once. Users of materialized tables should take this possibility into consideration -when querying these tables.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/index.html deleted file mode 100644 index 414a0928f7..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/index.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - -Apache Parquet Files in Amazon S3 | Estuary Flow - - - - - - - - - -

      Apache Parquet Files in Amazon S3

      -

      This connector materializes delta updates of -Flow collections into an S3 bucket in the Apache Parquet format.

      -

      The delta updates are batched within Flow, converted to CSV files, and then pushed to the S3 bucket -at a time interval that you set. Files are limited to a configurable maximum size. Each materialized -Flow collection will produce many separate files.

      -

      ghcr.io/estuary/materialize-s3-parquet:dev -provides the latest connector image. You can also follow the link in your browser to see past image -versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • An S3 bucket to write files to. See this -guide for -instructions on setting up a new S3 bucket.
      • -
      • An AWS root or IAM user with the -s3:PutObject permission -for the S3 bucket. For this user, you'll need the access key and secret access key. See -the AWS blog for help -finding these credentials.
      • -
      -

      Configuration

      -

      Use the below properties to configure the materialization, which will direct one or more of your -Flow collections to your bucket.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /bucketBucketBucket to store materialized objects.stringRequired
      /awsAccessKeyIdAWS Access Key IDAccess Key ID for writing data to the bucket.stringRequired
      /awsSecretAccessKeyAWS Secret Access keySecret Access Key for writing data to the bucket.stringRequired
      /regionRegionRegion of the bucket to write to.stringRequired
      /uploadIntervalUpload IntervalFrequency at which files will be uploaded.string5m
      /prefixPrefixOptional prefix that will be used to store objects.string
      /fileSizeLimitFile Size LimitApproximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank.integer
      /endpointCustom S3 EndpointThe S3 endpoint URI to connect to. Use if you're materializing to a compatible API that isn't provided by AWS. Should normally be left blank.string
      /parquetConfig/rowGroupRowLimitRow Group Row LimitMaximum number of rows in a row group. Defaults to 1000000 if blank.integer
      /parquetConfig/rowGroupByteLimitRow Group Byte LimitApproximate maximum number of bytes in a row group. Defaults to 536870912 (512 MiB) if blank.integer
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /pathPathThe path that objects will be materialized to.stringRequired
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/materialize-s3-parquet:dev"
      config:
      bucket: bucket
      awsAccessKeyId: <access_key_id>
      awsSecretAccessKey: <secret_access_key>
      region: us-east-2
      uploadInterval: 5m
      bindings:
      - resource:
      path: ${COLLECTION_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Parquet Data Types

      -

      Flow collection fields are written to Parquet files based on the data type of the field. Depending -on the field data type, the Parquet data type may be a primitive Parquet -type, or a primitive Parquet type extended by a -logical Parquet type.

      -
      Collection Field Data TypeParquet Data Type
      arrayJSON (extends BYTE_ARRAY)
      objectJSON (extends BYTE_ARRAY)
      booleanBOOLEAN
      integerINT64
      numberDOUBLE
      string with {contentEncoding: base64}BYTE_ARRAY
      string with {format: date}DATE (extends BYTE_ARRAY)
      string with {format: date-time}TIMESTAMP (extends INT64, UTC adjusted with microsecond precision)
      string with {format: time}TIME (extends INT64, UTC adjusted with microsecond precision)
      string with {format: date}DATE (extends INT32)
      string with {format: duration}INTERVAL (extends FIXED_LEN_BYTE_ARRAY with a length of 12)
      string with {format: uuid}UUID (extends FIXED_LEN_BYTE_ARRAY with a length of 16)
      string (all others)STRING (extends BYTE_ARRAY)
      -

      File Names

      -

      Materialized files are named with monotonically increasing integer values, padded with leading 0's -so they remain lexically sortable. For example, a set of files may be materialized like this for a -given collection:

      -
      bucket/prefix/path/v0000000000/00000000000000000000.parquet
      bucket/prefix/path/v0000000000/00000000000000000001.parquet
      bucket/prefix/path/v0000000000/00000000000000000002.parquet
      -

      Here the values for bucket and prefix are from your endpoint configuration. The path is -specific to the binding configuration. v0000000000 represents the current backfill counter -for binding and will be increased if the binding is re-backfilled, along with the file names -starting back over from 0.

      -

      Eventual Consistency

      -

      In rare circumstances, recently materialized files may be re-written by files with the same name if -the materialization shard is interrupted in the middle of processing a Flow transaction and the -transaction must be re-started. Files that were committed as part of a completed transaction will -never be re-written. In this way, eventually all collection data will be written to files -effectively-once, although inconsistencies are possible when accessing the most recently written -data.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/index.html deleted file mode 100644 index 4acc03502f..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/index.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - -Databricks | Estuary Flow - - - - - - - - - -

      Databricks

      -

      This connector materializes Flow collections into tables in a Databricks SQL Warehouse. -It allows both standard and delta updates.

      -

      The connector first uploads data changes to a Databricks Unity Catalog Volume. -From there, it transactionally applies the changes to the Databricks tables.

      -

      ghcr.io/estuary/materialize-databricks:dev provides the latest connector image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A Databricks account that includes: -
          -
        • A unity catalog
        • -
        • A SQL Warehouse
        • -
        • A schema — a logical grouping of tables in a catalog
        • -
        • A user with a role assigned that grants the appropriate access levels to these resources.
        • -
        -
      • -
      • At least one Flow collection
      • -
      -
      tip

      If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps.

      -

      Setup

      -

      You need to first create a SQL Warehouse if you don't already have one in your account. See Databricks documentation on configuring a Databricks SQL Warehouse. After creating a SQL Warehouse, you can find the details necessary for connecting to it under the Connection Details tab.

      -

      In order to save on costs, we recommend that you set the Auto Stop parameter for your SQL warehouse to the minimum available. Estuary's Databricks connector automatically delays updates to the destination according to the configured Sync Schedule (see configuration details below), with a default delay value of 30 minutes.

      -

      You also need an access token for your user to be used by our connector, see the respective documentation from Databricks on how to create an access token.

      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a Databricks materialization, which will direct one or more of your Flow collections to new Databricks tables.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressHost and port of the SQL warehouse (in the form of host[:port]). Port 443 is used as the default if no specific port is provided.stringRequired
      /http_pathHTTP PathHTTP path of your SQL warehousestringRequired
      /catalog_nameCatalog NameName of your Unity CatalogstringRequired
      /schema_nameSchema NameDefault schema to materialize tostringdefault schema is used
      /credentialsCredentialsAuthentication credentialsobject
      /credentials/auth_typeRoleAuthentication type, set to PAT for personal access tokenstringRequired
      /credentials/personal_access_tokenRolePersonal Access TokenstringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableTable namestringRequired
      /schemaAlternative SchemaAlternative schema for this tablestringRequired
      /delta_updatesDelta updatesWhether to use standard or delta updatesbooleanfalse
      -

      Sample

      -

      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      config:
      address: dbc-abcdefgh-a12b.cloud.databricks.com
      catalog_name: main
      http_path: /sql/1.0/warehouses/abcd123efgh4567
      schema_name: default
      credentials:
      auth_type: PAT
      personal_access_token: secret
      image: ghcr.io/estuary/materialize-databricks:dev
      # If you have multiple collections you need to materialize, add a binding for each one
      # to ensure complete data flow-through
      bindings:
      - resource:
      table: ${table_name}
      schema: default
      source: ${PREFIX}/${source_collection}
      -

      Sync Schedule

      -

      This connector supports configuring a schedule for sync frequency. You can read -about how to configure this here.

      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      -

      Enabling delta updates will prevent Flow from querying for documents in your Databricks table, which can reduce latency and costs for large datasets. -If you're certain that all events will have unique keys, enabling delta updates is a simple way to improve -performance with no effect on the output. -However, enabling delta updates is not suitable for all workflows, as the resulting table in Databricks won't be fully reduced.

      -

      You can enable delta updates on a per-binding basis:

      -
          bindings:
      - resource:
      table: ${table_name}
      schema: default
      delta_updates: true
      source: ${PREFIX}/${source_collection}
      -

      Reserved words

      -

      Databricks has a list of reserved words that must be quoted in order to be used as an identifier. Flow automatically quotes fields that are in the reserved words list. You can find this list in Databricks's documentation here and in the table below.

      -
      caution

      In Databricks, objects created with quoted identifiers must always be referenced exactly as created, including the quotes. Otherwise, SQL statements and queries can result in errors. See the Databricks docs.

      -
      Reserved words
      ANTI
      EXCEPTFULL
      INNERINTERSECT
      JOINLATERAL
      LEFTMINUS
      NATURALON
      RIGHTSEMI
      SEMIUSING
      NULLDEFAULT
      TRUEFALSE
      CROSS
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/index.html deleted file mode 100644 index 7d25cd850f..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - -CSV Files in Google GCS | Estuary Flow - - - - - - - - - -

      CSV Files in Google GCS

      -

      This connector materializes delta updates of -Flow collections into files in a GCS bucket per the CSV format described in -RFC-4180. The CSV files are compressed using Gzip -compression.

      -

      The delta updates are batched within Flow, converted to CSV files, and then pushed to the S3 bucket -at a time interval that you set. Files are limited to a configurable maximum size. Each materialized -Flow collection will produce many separate files.

      -

      ghcr.io/estuary/materialize-gcs-csv:dev -provides the latest connector image. You can also follow the link in your browser to see past image -versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      - -

      Configuration

      -

      Use the below properties to configure the materialization, which will direct one or more of your -Flow collections to your bucket.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /bucketBucketBucket to store materialized objects.stringRequired
      /credentialsJsonService Account JSONThe JSON credentials of the service account to use for authorization.stringRequired
      /uploadIntervalUpload IntervalFrequency at which files will be uploaded.string5m
      /prefixPrefixOptional prefix that will be used to store objects.string
      /fileSizeLimitFile Size LimitApproximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank.integer
      /csvConfig/delimiterDelimiterCharacter to separate columns within a row. Defaults to a comma if blank. Must be a single character with a byte length of 1.integer
      /csvConfig/nullStringNull StringString to use to represent NULL values. Defaults to an empty string if blank.integer
      /csvConfig/skipHeadersSkip HeadersDo not write headers to files.integer
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /pathPathThe path that objects will be materialized to.stringRequired
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/materialize-gcs-csv:dev"
      config:
      bucket: bucket
      credentialsJson: <credentialsJson>
      uploadInterval: 5m
      bindings:
      - resource:
      path: ${COLLECTION_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      File Names

      -

      Materialized files are named with monotonically increasing integer values, padded with leading 0's -so they remain lexically sortable. For example, a set of files may be materialized like this for a -given collection:

      -
      bucket/prefix/path/v0000000000/00000000000000000000.csv
      bucket/prefix/path/v0000000000/00000000000000000001.csv
      bucket/prefix/path/v0000000000/00000000000000000002.csv
      -

      Here the values for bucket and prefix are from your endpoint configuration. The path is -specific to the binding configuration. v0000000000 represents the current backfill counter -for binding and will be increased if the binding is re-backfilled, along with the file names -starting back over from 0.

      -

      Eventual Consistency

      -

      In rare circumstances, recently materialized files may be re-written by files with the same name if -the materialization shard is interrupted in the middle of processing a Flow transaction and the -transaction must be re-started. Files that were committed as part of a completed transaction will -never be re-written. In this way, eventually all collection data will be written to files -effectively-once, although inconsistencies are possible when accessing the most recently written -data.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/index.html deleted file mode 100644 index 8b82be6fe0..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - -Apache Parquet Files in Google GCS | Estuary Flow - - - - - - - - - -

      Apache Parquet Files in Google GCS

      -

      This connector materializes delta updates of -Flow collections into a GCS bucket in the Apache Parquet format.

      -

      The delta updates are batched within Flow, converted to CSV files, and then pushed to the S3 bucket -at a time interval that you set. Files are limited to a configurable maximum size. Each materialized -Flow collection will produce many separate files.

      -

      ghcr.io/estuary/materialize-gcs-parquet:dev -provides the latest connector image. You can also follow the link in your browser to see past image -versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      - -

      Configuration

      -

      Use the below properties to configure the materialization, which will direct one or more of your -Flow collections to your bucket.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /bucketBucketBucket to store materialized objects.stringRequired
      /credentialsJsonService Account JSONThe JSON credentials of the service account to use for authorization.stringRequired
      /uploadIntervalUpload IntervalFrequency at which files will be uploaded.string5m
      /prefixPrefixOptional prefix that will be used to store objects.string
      /fileSizeLimitFile Size LimitApproximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank.integer
      /parquetConfig/rowGroupRowLimitRow Group Row LimitMaximum number of rows in a row group. Defaults to 1000000 if blank.integer
      /parquetConfig/rowGroupByteLimitRow Group Byte LimitApproximate maximum number of bytes in a row group. Defaults to 536870912 (512 MiB) if blank.integer
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /pathPathThe path that objects will be materialized to.stringRequired
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/materialize-gcs-parquet:dev"
      config:
      bucket: bucket
      credentialsJson: <credentialsJson>
      uploadInterval: 5m
      bindings:
      - resource:
      path: ${COLLECTION_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Parquet Data Types

      -

      Flow collection fields are written to Parquet files based on the data type of the field. Depending -on the field data type, the Parquet data type may be a primitive Parquet -type, or a primitive Parquet type extended by a -logical Parquet type.

      -
      Collection Field Data TypeParquet Data Type
      arrayJSON (extends BYTE_ARRAY)
      objectJSON (extends BYTE_ARRAY)
      booleanBOOLEAN
      integerINT64
      numberDOUBLE
      string with {contentEncoding: base64}BYTE_ARRAY
      string with {format: date}DATE (extends BYTE_ARRAY)
      string with {format: date-time}TIMESTAMP (extends INT64, UTC adjusted with microsecond precision)
      string with {format: time}TIME (extends INT64, UTC adjusted with microsecond precision)
      string with {format: date}DATE (extends INT32)
      string with {format: duration}INTERVAL (extends FIXED_LEN_BYTE_ARRAY with a length of 12)
      string with {format: uuid}UUID (extends FIXED_LEN_BYTE_ARRAY with a length of 16)
      string (all others)STRING (extends BYTE_ARRAY)
      -

      File Names

      -

      Materialized files are named with monotonically increasing integer values, padded with leading 0's -so they remain lexically sortable. For example, a set of files may be materialized like this for a -given collection:

      -
      bucket/prefix/path/v0000000000/00000000000000000000.parquet
      bucket/prefix/path/v0000000000/00000000000000000001.parquet
      bucket/prefix/path/v0000000000/00000000000000000002.parquet
      -

      Here the values for bucket and prefix are from your endpoint configuration. The path is -specific to the binding configuration. v0000000000 represents the current backfill counter -for binding and will be increased if the binding is re-backfilled, along with the file names -starting back over from 0.

      -

      Eventual Consistency

      -

      In rare circumstances, recently materialized files may be re-written by files with the same name if -the materialization shard is interrupted in the middle of processing a Flow transaction and the -transaction must be re-started. Files that were committed as part of a completed transaction will -never be re-written. In this way, eventually all collection data will be written to files -effectively-once, although inconsistencies are possible when accessing the most recently written -data.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/index.html deleted file mode 100644 index f5b819be1f..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/index.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - -Google Cloud Pub/Sub | Estuary Flow - - - - - - - - - -

      Google Cloud Pub/Sub

      -

      This connector materializes Flow collections into topics in Google Cloud Pub/Sub.

      -

      It is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/materialize-google-pubsub:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      - -
      tip

      If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps.

      -

      OAuth authentication using the Flow web app

      -

      OAuth is the simplest authentication method, and is supported in the Flow web app. You'll need:

      - -

      You'll supply this account's username and password to authenticate.

      -

      Manual authentication

      -

      Manual authentication is the only method supported when using flowctl to develop locally. You'll need:

      -
        -
      • -

        A Google service account with the role roles/pubsub.editor -or equivalent for the Google Cloud project. -See the Google IAM documentation to learn about granting roles.

        -
      • -
      • -

        A JSON key for the service account.

        -
      • -
      -

      See the Google documentation for help creating a new service account and generating its key.

      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a Google Cloud Pub/Sub materialization, which will direct one or more of your Flow collections to your desired Pub/Sub topics.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /credentialsAuthenticationCredentials used to authenticate with Google.array, boolean, null, number, object, stringRequired
      /credentials/auth_typeAuthentication typeSet to Service for manual authentication, or use OAuth in the web app.string
      /credentials/credentials_jsonService Account JSONThe JSON key of the service account to use for authorization, if configuring manually.string
      /project_idGoogle Cloud Project IDName of the project containing the PubSub topics for this materialization.stringRequired
      -

      Bindings

      -
      caution

      PubSub topics need a default subscription; -otherwise, delivered messages will be lost. Leave Create with Default Subscription set to the default, true, -unless you have a specific reason not to do so.

      -
      PropertyTitleDescriptionTypeRequired/Default
      /create_default_subscriptionCreate with Default SubscriptionCreate a default subscription when creating the topic. Will be created as "<topic>-sub". Has no effect if the topic already exists.booleanRequired, true
      identifierResource Binding IdentifierOptional identifier for the resource binding if creating a multiplex topic. Included as "identifier" attribute in published messages if specified.string
      /topicTopic NameName of the topic to publish materialized results to.stringRequired
      -

      Sample

      -

      This sample reflects the manual authentication method using the CLI.

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      config:
      credentials:
      auth_type: Service
      credentials_json: {secret}
      project_id: my_google_cloud_project
      bindings:
      - resource:
      create_default_subscription: true
      topic: my_new_topic
      source: ${PREFIX}/${source_collection}
      -

      Multiplex topics

      -

      You can materialize multiple Flow collections to the same Pub/Sub topic. This is known as a multiplex topic. -You do so by adding the optional identifier field to the binding configuration.

      -

      When materializing to a multiplex topic, ensure that:

      -
        -
      • The bindings you want to combine have the same topic name.
      • -
      • Each binding pulls from a different Flow collection
      • -
      • Each binding has a unique identifier. It can be anything you'd like.
      • -
      -

      The binding configuration will look similar to:

      -
      bindings:
      - resource:
      identifier: one
      topic: multiplex-topic
      source: ${PREFIX}/source_collection_one
      - resource:
      identifier: two
      topic: multiplex-topic
      source: ${PREFIX}/source_collection_two
      -

      Delta updates

      -

      Because Google Cloud Pub/Sub is a write-only event-streaming system, this connector uses only delta updates.

      -

      Message ordering

      -

      Google Cloud Pub/Sub manages message ordering using ordering keys.

      -

      This connector sets the ordering key of published messages using the Flow collection key -of the documents being being published. -Messages are published in order, on a per-key basis.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/index.html deleted file mode 100644 index 410f1dd807..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - -HTTP Webhook | Estuary Flow - - - - - - - - - -

      HTTP Webhook

      -

      This connector lets you materialize data from Estuary Flow directly to specified HTTP endpoints via webhooks.

      -

      ghcr.io/estuary/materialize-webhook:v1 provides the latest connector image. For earlier versions, please follow the link in your browser.

      -

      Prerequisites

      -

      To use this materialization connector, you’ll need the following:

      -
        -
      • A server or service that can accept HTTP requests at the target endpoint.
      • -
      • At least one Flow collection.
      • -
      -

      Configuration

      -

      The Webhooks connector is available for use in the Flow web application. To learn more about connectors and setting them up, visit our guide on using connectors.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressThe URL of the endpoint to send data to.stringRequired
      /methodHTTP MethodHTTP method to use (e.g., POST or PUT).stringdefault: POST
      /headersHeadersAdditional headers to include in the HTTP request.object
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /relativePathRelative PathThe relative path on the server where data will be sent.stringRequired
      -

      Sample

      -
      bindings:
      - source: ProductionData/orders/orderDetails
      resource:
      relativePath: webhook/estuary
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-webhook:v1
      config:
      address: http://192.168.1.100:3000/
      method: POST
      headers:
      Content-Type: application/json
      Authorization: Bearer <your_token>
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/index.html deleted file mode 100644 index 44ab703a28..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/index.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - -Materialization connectors | Estuary Flow - - - - - - - - - -

      Materialization connectors

      -

      Estuary's available materialization connectors are listed in this section. Each connector has a unique set of requirements for configuration; these are linked below the connector name.

      -

      Also listed are links to the most recent Docker images for each connector. You'll need these to write Flow specifications manually (if you're developing locally). If you're using the Flow web app, they aren't necessary.

      -

      Estuary is actively developing new connectors, so check back regularly for the latest additions. We’re prioritizing the development of high-scale technological systems, as well as client needs.

      -

      At this time, all the available materialization connectors are created by Estuary. -In the future, other open-source materialization connectors from third parties could be supported.

      -

      Available materialization connectors

      -
        -
      • AlloyDB -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/materialize-alloydb:dev
        • -
        -
      • -
      • Amazon DynamoDB -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/materialize-dynamodb:dev
        • -
        -
      • -
      • Amazon Redshift -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/materialize-redshift:dev
        • -
        -
      • -
      • Amazon SQL Server -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/materialize-amazon-rds-sqlserver:dev
        • -
        -
      • -
      • Apache Iceberg Tables in S3 -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-s3-iceberg:dev
        • -
        -
      • -
      • Apache Parquet Files in GCS -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-gcs-parquet:dev
        • -
        -
      • -
      • Apache Parquet Files in S3 -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-s3-parquet:dev
        • -
        -
      • -
      • Azure SQL Server - -
      • -
      • CSV Files in GCS -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-gcs-csv:dev
        • -
        -
      • -
      • CSV Files in S3 -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-s3-csv:dev
        • -
        -
      • -
      • Databricks -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-databricks:dev
        • -
        -
      • -
      • Elasticsearch -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-elasticsearch:dev
        • -
        -
      • -
      • Firebolt -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/materialize-firebolt:dev
        • -
        -
      • -
      • Google BigQuery -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-bigquery:dev
        • -
        -
      • -
      • Google Cloud Pub/Sub -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/materialize-google-pubsub:dev
        • -
        -
      • -
      • Google Cloud SQL Server -
          -
        • Configuration
        • -
        • Package = ghcr.io/estuary/materialize-google-cloud-sql-sqlserver:dev
        • -
        -
      • -
      • MongoDB -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/materialize-mongodb:dev
        • -
        -
      • -
      • MotherDuck -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/materialize-motherduck:dev
        • -
        -
      • -
      • MySQL -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/materialize-mysql:dev
        • -
        -
      • -
      • Pinecone -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-pinecone:dev
        • -
        -
      • -
      • PostgreSQL -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-postgres:dev
        • -
        -
      • -
      • Rockset -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-rockset:dev
        • -
        -
      • -
      • Snowflake -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-snowflake:dev
        • -
        -
      • -
      • SQLite -
          -
        • Configuration
        • -
        • Package — ghcr.io/estuary/materialize-sqlite:dev
        • -
        -
      • -
      • SQL Server -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/materialize-sqlserver:dev
        • -
        -
      • -
      • TimescaleDB -
          -
        • Configuration
        • -
        • Package - ghcr.io/estuary/materialize-timescaledb:dev
        • -
        -
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/index.html deleted file mode 100644 index 9e48b75ca5..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/index.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - -MongoDB | Estuary Flow - - - - - - - - - -

      MongoDB

      -

      This connector materializes data from your Flow collections to your MongoDB collections.

      -

      ghcr.io/estuary/materialize-mongodb:dev provides the latest connector image. You can also follow the link in your browser to see past image versions.

      -

      Data model

      -

      MongoDB is a NoSQL database. Its data -model -consists of documents (lightweight records that contain mappings of fields -and values) organized in collections. MongoDB documents have a mandatory -_id field that is used as the key of the collection.

      -

      Prerequisites

      -

      You'll need:

      -
        -
      • -

        Credentials for connecting to your MongoDB instance and database.

        -
      • -
      • -

        Read and write access to your MongoDB database and desired collections. See Role-Based Access -Control for more information.

        -
      • -
      • -

        If you are using MongoDB Atlas, or your MongoDB provider requires allowlisting -of IPs, you need to allowlist the Estuary IP addresses.

        -
      • -
      -

      Configuration

      -

      You configure connectors either in the Flow web app, or by directly editing the Flow specification file. -See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Firestore source connector.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressHost and port of the database. Optionally can specify scheme for the URL such as mongodb+srv://host.stringRequired
      /databaseDatabaseName of the database to capture from.stringRequired
      /userUserDatabase user to connect as.stringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /collectionStreamCollection namestringRequired
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.booleanfalse
      -

      Sample

      -
      materializations:
      ${PREFIX}/${CAPTURE_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-mongodb:dev
      config:
      address: "mongo:27017"
      database: "test"
      password: "flow"
      user: "flow"
      bindings:
      - resource:
      collection: users
      database: test
      source: ${PREFIX}/users
      -

      SSH Tunneling

      -

      As an alternative to connecting to your MongoDB instance directly, you can allow secure connections via SSH tunneling. To do so:

      -
        -
      1. -

        Refer to the guide to configure an SSH server on the cloud platform of your choice.

        -
      2. -
      3. -

        Configure your connector as described in the configuration section above, with the addition of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networks for additional details and a sample.

        -
      4. -
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/index.html deleted file mode 100644 index 4cd916757b..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/index.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - -MotherDuck | Estuary Flow - - - - - - - - - -

      MotherDuck

      -

      This connector materializes Flow collections into tables in a MotherDuck database.

      -

      The connector uses your AWS account to materialize to MotherDuck tables by way of files in an S3 -bucket. The files in the bucket as as a temporary staging area for data storage and retrieval.

      -

      ghcr.io/estuary/materialize-motherduck:dev -provides the latest connector image. You can also follow the link in your browser to see past image -versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A MotherDuck account and Service -Token.
      • -
      • An S3 bucket for staging temporary files. See this -guide for -instructions on setting up a new S3 bucket.
      • -
      • An AWS root or IAM user with read and write -access -to the S3 bucket. For this user, you'll need the access key and secret access key. See the -AWS blog for help finding -these credentials.
      • -
      -

      Configuration

      -

      Use the below properties to configure MotherDuck materialization, which will direct one or -more of your Flow collections to your desired tables in the database.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tokenMotherDuck Service TokenService token for authenticating with MotherDuck.stringRequired
      /databaseDatabaseThe database to materialize to.stringRequired
      /schemaDatabase SchemaDatabase schema for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables.stringRequired
      /bucketS3 Staging BucketName of the S3 bucket to use for staging data loads.stringRequired
      /awsAccessKeyIdAccess Key IDAWS Access Key ID for reading and writing data to the S3 staging bucket.stringRequired
      /awsSecretAccessKeySecret Access KeyAWS Secret Access Key for reading and writing data to the S3 staging bucket.stringRequired
      /bucketPathBucket PathA prefix that will be used to store objects in S3.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableName of the database table.stringRequired
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.boolean
      /schemaAlternative SchemaAlternative schema for this table (optional).string
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/materialize-motherduck:dev"
      config:
      token: <motherduck_service_token>
      database: my_db
      schema: main
      bucket: my_bucket
      awsAccessKeyId: <access_key_id>
      awsSecretAccessKey: <secret_access_key>
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta -updates. The default is to -use standard updates.

      -

      Enabling delta updates will prevent Flow from querying for documents in your -MotherDuck table, which can reduce latency and costs for large datasets. If you're -certain that all events will have unique keys, enabling delta updates is a -simple way to improve performance with no effect on the output. However, -enabling delta updates is not suitable for all workflows, as the resulting table -in MotherDuck won't be fully reduced.

      -

      You can enable delta updates on a per-binding basis:

      -
          bindings:
      - resource:
      table: ${table_name}
      delta_updates: true
      source: ${PREFIX}/${COLLECTION_NAME}
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/index.html deleted file mode 100644 index d53982c384..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - -MySQL HeatWave | Estuary Flow - - - - - - - - - -

      MySQL HeatWave

      -

      This connector lets you materialize data from your Flow collections directly into Oracle MySQL HeatWave instances.

      -

      ghcr.io/estuary/materialize-mysql-heatwave:dev provides the latest connector image. For earlier versions, please follow the link in your browser.

      -

      Prerequisites

      -

      To use this materialization connector, you’ll need the following:

      -
        -
      • A MySQL HeatWave database and the appropriate user credentials.
      • -
      • At least one Flow collection.
      • -
      -

      Configuration

      -

      Select one or more of your Flow collections to start using this connector. The configuration properties below will help you to materialize your collections into tables in MySQL HeatWave.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /addressAddressHost and port of the database. If only the host is specified, the port will default to 3306.stringRequired
      /databaseDatabaseName of the logical database to send data to.stringRequired
      /userUserUsername for authentication.stringRequired
      /passwordPasswordPassword for authentication.stringRequired
      /timezoneTimezoneTimezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read.string
      -

      Advanced: SSL Mode

      -

      Configuring the SSL mode strengthens security when transferring data to Oracle MySQL HeatWave. Here are the possible values for SSL mode:

      -
        -
      • disabled: Establishes an unencrypted connection with the server.
      • -
      • preferred: Initiates the SSL connection only if prompted by the server.
      • -
      • required: Establishes an SSL connection but doesn’t verify the server’s certificate.
      • -
      • verify_ca: Connects via SSL connection and verifies the server’s certificate against the provided SSL Server CA, without validating the server's hostname. SSL Server CA is mandatory for this mode.
      • -
      • verify_identity: Ensures an SSL connection, and verifies both the server's certificate and hostname. This is the highest level of security. SSL Server CA is required for this mode.
      • -
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableThe name of the table to send data to.stringRequired
      -

      Sample

      -
      materializations:
      ${PREFIX}/${MAT_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-mysql-heatwave:dev
      config:
      database: flow
      address: localhost:5432
      password: secret
      user: flow
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      MySQL HeatWave on Oracle Cloud Infrastructure

      -

      This connector supports cloud-based MySQL HeatWave instances hosted on Oracle Cloud Infrastructure (OCI).

      -

      SSH Tunneling (Required)

      -

      You are also required to configure SSH tunneling by providing the following:

      -
        -
      • SSH Endpoint: Enter the endpoint of the remote SSH server that supports tunneling (formatted as ssh://user@hostname[:port]).
      • -
      • SSH Private Key: Input the full RSA Private Key for SSH connection.
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/index.html deleted file mode 100644 index a672076e92..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/index.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - -Pinecone | Estuary Flow - - - - - - - - - -

      Pinecone

      -

      This connector materializes Flow collections into namespaces in a Pinecone index.

      -

      The connector uses the OpenAI Embedding API to -create vector embeddings based on the documents in your collections and inserts these vector -embeddings and associated metadata into Pinecone for storage and retrieval.

      -

      ghcr.io/estuary/materialize-pinecone:dev -provides the latest connector image. You can also follow the link in your browser to see past image -versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A Pinecone account with an API -Key for -authentication.
      • -
      • An OpenAI account with an API -Key for authentication.
      • -
      • A Pinecone Index created to store materialized vector -embeddings. When using the embedding model text-embedding-ada-002 (recommended), the index must -have Dimensions set to 1536.
      • -
      -

      Embedding Input

      -

      The materialization creates a vector embedding for each collection document. Its structure is based -on the collection fields.

      -

      By default, fields of a single scalar type are including in the embedding: strings, integers, -numbers, and booleans. You can include additional array or object type fields using projected -fields.

      -

      The text generated for the embedding has this structure, with field names and their values separated -by newlines:

      -
      stringField: stringValue
      intField: 3
      numberField: 1.2
      boolField: false
      -

      Pinecone Record Metadata

      -

      Pinecone supports metadata fields associated with stored vectors that can be used when performing -vector queries. This materialization will -include the materialized document as a JSON string in the metadata field flow_document to enable -retrieval of the document from vectors returned by Pinecone queries.

      -

      Pinecone indexes all metadata fields by default. To manage memory usage of the index, use selective -metadata indexing to -exclude the flow_document metadata field.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /indexPinecone IndexPinecone index for this materialization. Must already exist and have appropriate dimensions for the embedding model used.stringRequired
      /environmentPinecone EnvironmentCloud region for your Pinecone project. Example: us-central1-gcpstringRequired
      /pineconeApiKeyPinecone API KeyPinecone API key used for authentication.stringRequired
      /openAiApiKeyOpenAI API KeyOpenAI API key used for authentication.stringRequired
      /embeddingModelEmbedding Model IDEmbedding model ID for generating OpenAI bindings. The default text-embedding-ada-002 is recommended.string"text-embedding-ada-002"
      /advancedOptions for advanced users. You should not typically need to modify these.object
      /advaned/openAiOrgOpenAI OrganizationOptional organization name for OpenAI requests. Use this if you belong to multiple organizations to specify which organization is used for API requests.string
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /namespacePinecone NamespaceName of the Pinecone namespace that this collection will materialize vectors into.stringRequired
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: "ghcr.io/estuary/materialize-pinecone:dev"
      config:
      index: your-index
      environment: us-central1-gcp
      pineconeApiKey: <YOUR_PINECONE_API_KEY>
      openAiApiKey: <YOUR_OPENAI_API_KEY>
      bindings:
      - resource:
      namespace: your-namespace
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Delta Updates

      -

      This connector operates only in delta updates mode.

      -

      Pinecone upserts vectors based on their id. The id -for materialized vectors is based on the Flow Collection key.

      -

      For collections with a a top-level reduction strategy of -merge and a strategy of -lastWriteWins for all nested -values (this is also the default), collections will be materialized "effectively once", with any -updated Flow documents replacing vectors in the Pinecone index if they have the same key.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/index.html deleted file mode 100644 index 0b0d7f77f6..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - -Slack | Estuary Flow - - - - - - - - - -

      Slack

      -

      This connector lets you materialize data from Estuary Flow directly into Slack channels.

      -

      ghcr.io/estuary/materialize-slack:dev provides the latest connector image. For earlier versions, visit the GitHub Container Registry page.

      -

      Prerequisites

      -

      To use this connector, ensure you have the following:

      -
        -
      1. An active Slack workspace with appropriate permissions.
      2. -
      3. Slack credentials and access token for authentication.
      4. -
      5. At least one Flow collection.
      6. -
      -

      Configuration

      -

      The Slack connector is available for use in the Flow web application. To learn more about connectors and how to set them up, read our guide on using connectors.

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /access_tokenAccess TokenThe Slack API access token for authentication.stringRequired
      /client_idClient IDClient ID for authentication.stringRequired
      /client_secretClient SecretThe Slack API client secret.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /sourceSourceSource data in Flow to be sent to Slack.stringRequired
      /channelChannelThe ID of the Slack channel to send messages to.stringRequired
      /display_nameDisplay NameThe display name for the sender in Slack.string
      /logo_emojiLogo EmojiThe emoji to be used.string
      -

      Sample

      -
      materializations:
      ${PREFIX}/${MATERIALIZATION_NAME}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-slack:dev
      config:
      credentials:
      auth_type: OAuth
      access_token: {secret}
      client_id: {your_client_id}
      client_secret: {secret}
      bindings:
      - source: ${PREFIX}/source_name
      resource:
      channel: "id: C05A95LJHSL"
      sender_config:
      display_name: Task Monitor
      logo_emoji: ":eyes:"
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/index.html deleted file mode 100644 index a990d6017a..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/index.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - -Starburst | Estuary Flow - - - - - - - - - -

      Starburst

      -

      This connector materializes transactionally Flow collections into Iceberg or Delta Lake tables using AWS S3 storage in Starburst Galaxy. -Starburst Galaxy connector supports only standard(merge) updates.

      -

      The connector makes use of S3 AWS storage for storing temporarily data during the materialization process.

      -

      ghcr.io/estuary/materialize-starburst:dev provides the latest connector image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • A Starburst Galaxy account (To create one: Staburst Galaxy start that includes: -
          -
        • A running cluster containing an Amazon S3 catalog
        • -
        • A schema which is a logical grouping of tables
        • -
        • Storage on S3 for temporary data with awsAccessKeyId and awsSecretAccessKey which should correspond to used catalog
        • -
        • A user with a role assigned that grants access to create, modify, drop tables in specified Amazon S3 catalog
        • -
        -
      • -
      • At least one Flow collection
      • -
      -

      Setup

      -

      To get host go to your Cluster -> Connection info -> Other clients (Connect clients)

      -

      There is also need to grant access to temporary storage (Roles and privileges -> Select specific role -> Privileges -> Add privilege -> Location). "Create schema and table in location" should be selected. Doc

      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a Starburst materialization, which will direct one or more of your Flow collections to new Starburst tables.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /hostHost and optional portstringRequired
      /catalogCatalog NameGalaxy catalog CatalogstringRequired
      /schemaSchema NameDefault schema to materialize tostringRequired
      /accountAccountGalaxy account namestringRequired
      /passwordPasswordGalaxy account passwordstringRequired
      /awsAccessKeyIdAWS Access Key IDstringRequired
      /awsSecretAccessKeyAWS Secret Access KeystringRequired
      /regionAWS RegionRegion of AWS storagestringRequired
      /bucketBucket namestringRequired
      /bucketPathBucket pathA prefix that will be used to store objects in S3.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /tableTableTable namestringRequired
      /schemaAlternative SchemaAlternative schema for this tablestring
      -

      Sample

      -

      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      config:
      host: HOST:PORT
      account: ACCOUNT
      password: PASSWORD
      catalog: CATALOG_NAME
      schema: SCHEMA_NAME
      awsAccessKeyId: AWS_ACCESS_KEY_ID
      awsSecretAccessKey: AWS_SECRET_KEY_ID
      region: REGION
      bucket: BUCKET
      bucketPath: BUCKET_PATH
      image: ghcr.io/estuary/materialize-starburst:dev
      # If you have multiple collections you need to materialize, add a binding for each one
      # to ensure complete data flow-through
      bindings:
      - resource:
      table: ${table_name}
      schema: default
      source: ${PREFIX}/${source_collection}
      -

      Sync Schedule

      -

      This connector supports configuring a schedule for sync frequency. You can read -about how to configure this here.

      -

      Reserved words

      -

      Starburst Galaxy has a list of reserved words that must be quoted in order to be used as an identifier. Flow automatically quotes fields that are in the reserved words list. You can find this list in Trino's documentation here and in the table below.

      -
      caution

      In Starburst Galaxy, objects created with quoted identifiers must always be referenced exactly as created, including the quotes. Otherwise, SQL statements and queries can result in errors. See the Trino docs.

      -
      Reserved words
      CUBEINSERTTABLE
      CURRENT_CATALOGINTERSECTTHEN
      CURRENT_DATEINTOTRIM
      CURRENT_PATHISTRUE
      CURRENT_ROLEJOINUESCAPE
      CURRENT_SCHEMAJSON_ARRAYUNION
      CURRENT_TIMEJSON_EXISTSUNNEST
      CURRENT_TIMESTAMPJSON_OBJECTUSING
      CURRENT_USERJSON_QUERYVALUES
      DEALLOCATEJSON_TABLEWHEN
      DELETEJSON_VALUEWHERE
      DESCRIBELEFTWITH
      DISTINCTLIKE
      DROPLISTAGG
      ELSELOCALTIME
      ENDLOCALTIMESTAMP
      ESCAPENATURAL
      EXCEPTNORMALIZE
      EXECUTENOT
      EXISTSNULL
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/index.html deleted file mode 100644 index 0ad357f680..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - -TimescaleDB | Estuary Flow - - - - - - - - - -

      TimescaleDB

      -

      This connector materializes Flow collections into tables in a TimescaleDB database. -TimescaleDB provides managed PostgreSQL instances for real-time data. -The connector is derived from the main PostgreSQL materialization connector -and has the same configuration.

      -

      By default, the connector only materializes regular PostgreSQL tables in TimescaleDB. -You can materialize an accompanying Hypertable by adding a SQL statement to a binding's configuration.

      -

      The connector is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/materialize-timescaledb:dev provides the latest version of the connector as a Docker image. You can also follow the link in your browser to see past image versions.

      -

      Prerequisites

      -

      To use this connector, you'll need:

      -
        -
      • -

        A TimescaleDB database to which to materialize. Know your user credentials, and the host and port. -If using Timescale Cloud, this information is available on your console, on the Connection info pane.

        -
      • -
      • -

        At least one Flow collection.

        -
      • -
      -

      Configuration

      -

      To use this connector, begin with data in one or more Flow collections. -Use the below properties to configure a TimescaleDB materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database.

      -

      The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.

      -

      Properties

      -

      Endpoint

      -
      PropertyTitleDescriptionTypeRequired/Default
      /databaseDatabaseName of the logical database to materialize to.string
      /addressAddressHost and port of the databasestringRequired
      /passwordPasswordPassword for the specified database user.stringRequired
      /schemaDatabase SchemaDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tablesstring"public"
      /userUserDatabase user to connect as.stringRequired
      -

      Bindings

      -
      PropertyTitleDescriptionTypeRequired/Default
      /additional_table_create_sqlAdditional Table Create SQLAdditional SQL statement(s) to be run in the same transaction that creates the table. Useful for creating Hypertables.string
      /delta_updatesDelta UpdateShould updates to this table be done via delta updates.booleanfalse
      /schemaAlternative SchemaAlternative schema for this table (optional). Overrides schema set in endpoint configuration.string
      /tableTableTable name to materialize to. It will be created by the connector, unless the connector has previously created it.stringRequired
      -

      Sample

      -
      materializations:
      ${PREFIX}/${mat_name}:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-timescaledb:dev
      config:
      database: flow
      address: xxxxxxxxxx.xxxxxxxxxx.tsdb.cloud.timescale.com:01234
      password: flow
      user: flow
      bindings:
      - resource:
      table: ${TABLE_NAME}
      source: ${PREFIX}/${COLLECTION_NAME}
      -

      Creating TimescaleDB hypertables

      -

      Hypertables are PostgreSQL tables in TimescaleDB optimized for time-series data. -They exist alongside regular PostgreSQL tables.

      -

      You can add Hypertables to your materialization on a per-binding basis by adding the optional /additional_table_create_sql field to each binding configuration.

      -

      Your SQL statement should take the following format:

      -
      SELECT create_hypertable('table', 'timestamp_column');
      -

      Where 'table' matches the value for the field /table in that binding, and -'timestamp_column' is the name of the table column containing its time values.

      -

      For example, materializing the Flow collection acmeCo/my_time_series would produce a table called 'my_time_series'. -Assuming its timestamp value is in the field 'time', the binding configuration would look like:

      -
      bindings:
      - resource:
      additional_table_create_sql: 'SELECT create_hypertable('my_time_series', 'time');'
      table: my_time_series
      source: acmeCo/my_time_series
      -

      Delta updates

      -

      This connector supports both standard (merge) and delta updates. -The default is to use standard updates.

      -

      Reserved words

      -

      PostgreSQL (and thus TimescaleDB) has a list of reserved words that must be quoted in order to be used as an identifier. -Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation.

      -

      These reserve words are listed in the table below. Flow automatically quotes fields that are in this list.

      -
      Reserved words
      abscurrent_transform_group_for_typeindicatorordersqlexception
      absolutecurrent_userinitialoutsqlstate
      acoscursorinitiallyoutersqlwarning
      actioncycleinneroutputsqrt
      adddatalinkinoutoverstart
      alldateinputoverlapsstatic
      allocatedayinsensitiveoverlaystddev_pop
      alterdeallocateinsertpadstddev_samp
      analysedecintparametersubmultiset
      analyzedecfloatintegerpartialsubset
      anddecimalintersectpartitionsubstring
      anydeclareintersectionpatternsubstring_regex
      aredefaultintervalpersucceeds
      arraydeferrableintopercentsum
      array_aggdeferredispercentile_contsymmetric
      array_max_cardinalitydefineisnullpercentile_discsystem
      asdeleteisolationpercent_ranksystem_time
      ascdense_rankjoinperiodsystem_user
      asensitivederefjson_arraypermutetable
      asindescjson_arrayaggplacingtablesample
      assertiondescribejson_existsportiontan
      asymmetricdescriptorjson_objectpositiontanh
      atdeterministicjson_objectaggposition_regextemporary
      atandiagnosticsjson_querypowerthen
      atomicdisconnectjson_tableprecedestime
      authorizationdistinctjson_table_primitiveprecisiontimestamp
      avgdlnewcopyjson_valuepreparetimezone_hour
      begindlpreviouscopykeypreservetimezone_minute
      begin_framedlurlcompletelagprimaryto
      begin_partitiondlurlcompleteonlylanguagepriortrailing
      betweendlurlcompletewritelargeprivilegestransaction
      bigintdlurlpathlastproceduretranslate
      binarydlurlpathonlylast_valueptftranslate_regex
      bitdlurlpathwritelateralpublictranslation
      bit_lengthdlurlschemeleadrangetreat
      blobdlurlserverleadingranktrigger
      booleandlvalueleftreadtrim
      bothdolevelreadstrim_array
      bydomainlikerealtrue
      calldoublelike_regexrecursivetruncate
      calleddroplimitrefuescape
      cardinalitydynamiclistaggreferencesunion
      cascadeeachlnreferencingunique
      cascadedelementlocalregr_avgxunknown
      caseelselocaltimeregr_avgyunmatched
      castemptylocaltimestampregr_countunnest
      catalogendlogregr_interceptupdate
      ceilend-execlog10regr_r2upper
      ceilingend_framelowerregr_slopeusage
      charend_partitionmatchregr_sxxuser
      characterequalsmatchesregr_sxyusing
      character_lengthescapematch_numberregr_syyvalue
      char_lengtheverymatch_recognizerelativevalues
      checkexceptmaxreleasevalue_of
      classifierexceptionmeasuresrestrictvarbinary
      clobexecmemberresultvarchar
      closeexecutemergereturnvariadic
      coalesceexistsmethodreturningvarying
      collateexpminreturnsvar_pop
      collationexternalminuterevokevar_samp
      collectextractmodrightverbose
      columnfalsemodifiesrollbackversioning
      commitfetchmodulerollupview
      concurrentlyfiltermonthrowwhen
      conditionfirstmultisetrowswhenever
      connectfirst_valuenamesrow_numberwhere
      connectionfloatnationalrunningwidth_bucket
      constraintfloornaturalsavepointwindow
      constraintsforncharschemawith
      containsforeignnclobscopewithin
      continuefoundnewscrollwithout
      convertframe_rownextsearchwork
      copyfreenosecondwrite
      corrfreezenonesectionxml
      correspondingfromnormalizeseekxmlagg
      cosfullnotselectxmlattributes
      coshfunctionnotnullsensitivexmlbinary
      countfusionnth_valuesessionxmlcast
      covar_popgetntilesession_userxmlcomment
      covar_sampglobalnullsetxmlconcat
      creategonullifshowxmldocument
      crossgotonumericsimilarxmlelement
      cubegrantoccurrences_regexsinxmlexists
      cume_distgroupoctet_lengthsinhxmlforest
      currentgroupingofsizexmliterate
      current_cataloggroupsoffsetskipxmlnamespaces
      current_datehavingoldsmallintxmlparse
      current_default_transform_groupholdomitsomexmlpi
      current_pathhouronspacexmlquery
      current_roleidentityonespecificxmlserialize
      current_rowilikeonlyspecifictypexmltable
      current_schemaimmediateopensqlxmltext
      current_timeimportoptionsqlcodexmlvalidate
      current_timestampinorsqlerroryear
      -

      Changelog

      -

      The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed.

      -

      Proceed with caution when editing materializations created with previous versions of this connector; -editing always upgrades your materialization to the latest connector version.

      -

      V4: 2022-11-30

      -

      This version includes breaking changes to materialized table columns. -These provide more consistent column names and types, but tables created from previous versions of the connector may -not be compatible with this version.

      -
        -
      • -

        Capitalization is now preserved when fields in Flow are converted to Postgres (TimescaleDB) column names. -Previously, fields containing uppercase letters were converted to lowercase.

        -
      • -
      • -

        Field names and values of types date, duration, ipv4, ipv6, macaddr, macaddr8, and time are now converted into -their corresponding Postgres (TimescaleDB) types. -Previously, only date-time was converted, and all others were materialized as strings.

        -
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/Connectors/materialization-protocol/index.html b/pr-preview/pr-1594/reference/Connectors/materialization-protocol/index.html deleted file mode 100644 index b85affcad1..0000000000 --- a/pr-preview/pr-1594/reference/Connectors/materialization-protocol/index.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - -Materialization Protocol | Estuary Flow - - - - - - - - - -

      Materialization Protocol

      -

      Materializations are processed as cooperative transactions between the Flow -Runtime and a connector Driver, over a long-lived RPC through which the Runtime -and Driver exchange messages.

      -

      This RPC workflow maintains a materialized view of a Flow collection in an -external system. It has distinct acknowledge, load, and store phases. -The Flow runtime and driver cooperatively maintain a fully-reduced view of each -document by loading current states from the store, reducing in a number of -updates, and then storing updated documents and checkpoints.

      -

      Sequence Diagram

      -

      As a convention and to reduce ambiguity, message types from the Runtime are -named in an imperative fashion (Load), while responses from the driver always -have a past-tense name (Loaded):

      -
      - sequenceDiagram - Runtime->>Driver: Open{MaterializationSpec, driverCP} - Note right of Driver: Connect to endpoint.<br/>Optionally fetch last-committed<br/>runtime checkpoint. - Driver->>Runtime: Opened{runtimeCP} - Note over Runtime, Driver: One-time initialization ☝️.<br/> 👇 Repeats for each transaction. - Note left of Runtime: Prior txn commits<br/>to recovery log. - Note right of Driver: Prior txn commits to DB<br/>(where applicable). - Runtime->>Driver: Acknowledge - Note right of Runtime: Acknowledged MAY be sent<br/>before Acknowledge. - Note right of Driver: MAY perform an idempotent<br/>apply of last txn. - Note left of Runtime: Runtime does NOT await<br/>Acknowledged before<br/>proceeding to send Load. - Driver->>Runtime: Acknowledged - Note left of Runtime: Runtime may now finalize<br/>a pipelined transaction. - Note over Runtime, Driver: End of Acknowledge phase. - Runtime->>Driver: Load<A> - Note left of Runtime: Load keys may<br/> not exist (yet). - Runtime->>Driver: Load<B> - Note right of Driver: MAY evaluate Load immediately,<br/>or stage for deferred retrieval. - Driver->>Runtime: Loaded<A> - Runtime->>Driver: Load<C> - Runtime->>Driver: Flush - Driver->>Runtime: Loaded<C> - Note right of Driver: Omits Loaded for keys<br/>that don't exist. - Driver->>Runtime: Flushed - Note left of Runtime: All existing keys<br/>have been retrieved. - Note over Runtime, Driver: End of Load phase. - Runtime->>Driver: Store<X> - Runtime->>Driver: Store<Y> - Runtime->>Driver: Store<Z> - Runtime->>Driver: StartCommit{runtimeCP} - Note right of Driver: * Completes all Store processing.<br/>* MAY include runtimeCP in DB txn. - Note right of Driver: Commit to DB<br/>now underway. - Driver->>Runtime: StartedCommit{driverCP} - Note left of Runtime: Begins commit to<br/> recovery log. - Note over Runtime, Driver: End of Store phase. Loops around<br/>to Acknowledge <=> Acknowledged. -
      -

      Exactly-Once Semantics

      -

      The central tenant of transactional materializations is this: -there is a consumption checkpoint, and there is a state of the view. -As the materialization progresses, both the checkpoint and the view state will change. -Updates to the checkpoint and to the view state MUST always commit together, -in the exact same transaction.

      -

      Flow materialization tasks have a backing transactional recovery log, -which is capable of durable commits that update both the checkpoint and also a -(reasonably small) driver-defined state. More on driver states later.

      -

      Many interesting endpoint systems are also fully transactional in nature.

      -

      When implementing a materialization driver, the first question an implementor -must answer is: whose commit is authoritative? -Flow's recovery log, or the materialized system? -This protocol supports either.

      -

      Common Implementation Patterns

      -

      There are a few common implementation patterns for materializations. The choice -of pattern depends on the transaction capabilities of the remote endpoint.

      -

      Remote Store is Authoritative

      -

      In this pattern, the remote store (for example, a database) persists view states -and the Flow consumption checkpoints which those views reflect. There are many -such checkpoints: one per task split, and in this pattern the Flow recovery log -is effectively ignored.

      -

      Typically this workflow runs in the context of a synchronous BEGIN/COMMIT -transaction, which updates table states and a Flow checkpoint together. The -transaction need be scoped only to the store phase of this workflow, as the -materialization protocol requires only read-committed isolation semantics.

      -

      Flow is a distributed system, and an important consideration is the effect of a -"zombie" assignment of a materialization task, which can race a newly-promoted -assignment of that same task.

      -

      Fencing is a technique which uses the transactional capabilities of a store to -"fence off" an older zombie assignment, such that it's prevented from committing -further transactions. This avoids a failure mode where:

      -
        -
      • New assignment N recovers a checkpoint at Ti.
      • -
      • Zombie assignment Z commits another transaction at Ti+1.
      • -
      • N beings processing from Ti, inadvertently duplicating the effects of Ti+1.
      • -
      -

      When a remote store is authoritative, it must implement fencing behavior. As a -sketch, the store can maintain a nonce value alongside the checkpoint of each -task split. The nonce is updated on each open of this RPC, and each commit -transaction then verifies that the nonce has not been changed.

      -

      In the future, if another RPC opens and updates the nonce, it fences off this -instance of the task split and prevents it from committing further transactions.

      -

      Recovery Log with Non-Transactional Store

      -

      In this pattern, the runtime's recovery log persists the Flow checkpoint and -handles fencing semantics. During the Load and Store phases, the driver directly -manipulates a non-transactional store or API, such as a key/value store.

      -

      Note that this pattern is at-least-once. A transaction may fail part-way through -and be restarted, causing its effects to be partially or fully replayed.

      -

      Care must be taken if the collection's schema has reduction annotations such as -sum, as those reductions may be applied more than once due to a partially -completed, but ultimately failed transaction.

      -

      If the collection's schema is last-write-wins, this mode still provides -effectively-once behavior. Collections which aren't last-write-wins can be -turned into last-write-wins through the use of derivations.

      -

      Recovery Log with Idempotent Apply

      -

      In this pattern the recovery log is authoritative, but the driver uses external -stable storage to stage the effects of a transaction -- rather than directly -applying them to the store -- such that those effects can be idempotently -applied after the transaction commits.

      -

      This allows stores which feature a weaker transaction guarantee to still be -used in an exactly-once way, so long as they support an idempotent apply -operation.

      -

      Driver checkpoints can facilitate this pattern. For example, a driver might -generate a unique filename in S3 and reference it in its prepared checkpoint, -which is committed to the recovery log. During the "store" phase, it writes to -this S3 file. After the transaction commits, it tells the store of the new file -to incorporate. The store must handle idempotency, by applying the effects of -the unique file just once, even if told of the file multiple times.

      -

      A related extension of this pattern is for the driver to embed a Flow checkpoint -into its driver checkpoint. Doing so allows the driver to express an intention -to restart from an older alternative checkpoint, as compared to the most recent -committed checkpoint of the recovery log.

      -

      As mentioned above, it's crucial that store states and checkpoints commit -together. While seemingly bending that rule, this pattern is consistent with it -because, on commit, the semantic contents of the store include BOTH its base -state, as well as the staged idempotent update. The store just may not know it -yet, but eventually it must because of the retried idempotent apply.

      -

      Note the driver must therefore ensure that staged updates are fully applied -before returning Loaded responses, in order to provide the correct -read-committed semantics required by the Flow runtime.

      -

      Push-only Endpoints & Delta Updates

      -

      Some systems, such as APIs, Webhooks, and Pub/Sub, are push-only in nature. Flow -materializations can run in a "delta updates" mode, where loads are always -skipped and Flow does not attempt to store fully-reduced documents. Instead, -during the store phase, the runtime sends delta updates which reflect the -combined roll-up of collection documents processed only within this transaction.

      -

      To illustrate the meaning of a delta update, consider documents which are simple -counters, having a collection schema that uses a sum reduction strategy.

      -

      Without delta updates, Flow would reduce documents -1, 3, and 2 by sum to -arrive at document 4, which is stored. The next transaction, document 4 is -loaded and reduced with 6, -7, and -1 to arrive at a new stored document 2. This -document, 2, represents the full reduction of the collection documents -materialized thus far.

      -

      Compare to delta updates mode: collection documents -1, 3, and 2 are combined to -store a delta-update document of 4. The next transaction starts anew, and 6, -7, -and -1 combine to arrive at a delta-update document of -2. These delta updates -are a windowed combine over documents seen in the current transaction only, and -unlike before are not a full reduction of the document. If delta updates were -written to pub/sub, note that a subscriber could further reduce over each delta -update to recover the fully reduced document of 2.

      -

      Note that many use cases require only lastWriteWins reduction behavior, and -for these use cases delta updates does the "right thing" by trivially re-writing -each document with its most recent version. This matches the behavior of Kafka -Connect, for example.

      -

      Protocol Phases

      -

      Acknowledge

      -

      Acknowledge and Acknowledged are always the first messages sent every -transaction, including the very first transaction of an RPC. The Runtime sends -Acknowledge to indicate that the last transaction has committed to the -recovery log. The Driver sends Acknowledged to indicate that its endpoint -transaction has committed.

      -

      Acknowledge and Acknowledged are not ordered. Acknowledged may be sent before -Acknowledge and vice versa.

      -

      The Runtime does not wait for Acknowledged before sending Load messages. -In most cases the Driver should simply not read these Load messages until it -has completed its own commit and sent its own Acknowledged.

      -

      A Driver MAY instead process its commit and acknowledgment in the background -while actively reading Load messages. It MUST NOT evaluate Loads yet, as -this could otherwise be a violation of read-committed semantics, but it MAY -stage them for deferred evaluation. This is recommended for Drivers that -have very long commit and/or acknowledgement operations. While a background -commit progresses the Flow runtime will optimistically pipeline the next -transaction, processing documents and preparing for when the Driver sends -Acknowledged.

      -

      Drivers following the "Recovery Log with Idempotent Apply" pattern must take -care to properly handle the very first acknowledgement phase of an RPC. At -startup, a driver cannot know if the last commit has been acknowledged. For -example, a previous RPC invocation may have failed immediately after commit but -prior to acknowledgement. The Driver must thus idempotent-ly apply or re-apply -changes staged by a prior Driver invocation, and reply with Acknowledged only -once done.

      -

      Drivers with transactional semantics SHOULD send Acknowledged immediately after -a previous, started commit completes.

      -

      Drivers with at-least-once semantics SHOULD send Acknowledged immediately after -sending StartedCommit.

      -

      Load

      -

      Zero or more Load messages are sent by the Runtime with documents to fetch. A -given document key will appear at most once in a transaction, and will not be -repeated across Load messages.

      -

      Drivers may immediately evaluate each Load and respond, or may queue many keys -to load and defer their evaluation. The Runtime does not await any individual -Load requests.

      -

      After the previous transaction has fully completed, and the driver has sent -Acknowledged to the Runtime, the current transaction may begin to close.

      -

      The Runtime indicates this by sending a Flush message, which is NEVER sent -before Acknowledged is received. Acknowledged is thus an important signal as -to when the Runtime may begin to finalize an optimistic, pipelined transaction.

      -

      On reading Flush, Drivers must process all remaining Load messages, -including any deferred evaluations, and send all Loaded responses prior to -sending its own Flushed response.

      -

      This signals to the Runtime that all documents which can be loaded have been -loaded, and the transaction proceeds to the Store phase.

      -

      Materialization bindings which are processing in delta-updates mode will never -receive a Load message, but will receive a Flush and must still respond with -Flushed.

      -

      Store

      -

      Zero or more Store messages are sent by the Runtime to the Driver, indicating -keys, documents, and extracted fields to store. No response is required of the -Driver for these messages.

      -

      Once all documents have been stored, the Runtime sends a StartCommit message -which carries its opaque runtime checkpoint.

      -

      Drivers implementing the "Remote Store is Authoritative" pattern must include -the runtime checkpoint in its current transaction, for retrieval in a future -Open of a new transactions RPC. Other driver patterns MAY ignore this -checkpoint.

      -

      On reading StartCommit the driver ensures that all Store messages have been -processed. It begins to commit its own transaction (where applicable), and then -responds with StartedCommit which contain an update to the driver's -checkpoint.

      -

      On the Runtime's receipt of StartedCommit, the Runtime now knows that all -Store messages have been fully processed. It preserves the updated Driver -checkpoint in its recovery log and begins to commit.

      -

      From here, the protocol loops back around to the Acknowledge phase.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/allow-ip-addresses/index.html b/pr-preview/pr-1594/reference/allow-ip-addresses/index.html deleted file mode 100644 index 7a047a87da..0000000000 --- a/pr-preview/pr-1594/reference/allow-ip-addresses/index.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - -Allowlisting IP Addresses for Estuary Flow | Estuary Flow - - - - - - - - - -

      Allowlisting IP Addresses for Estuary Flow

      -

      When configuring systems that interact with Estuary Flow, it's crucial to ensure that the necessary IP addresses are -allowlisted. This allows communication between Estuary Flow and your data systems. Below are the IP addresses that must -be allowlisted:

      -

      IP Addresses to Allowlist

      -

      Ensure that the following IP addresses are allowlisted on both the source and destination systems that interact with -Estuary Flow:

      -
        -
      • 34.121.207.128
      • -
      • 35.226.75.135
      • -
      • 34.68.62.148
      • -
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/authentication/index.html b/pr-preview/pr-1594/reference/authentication/index.html deleted file mode 100644 index c25f46cfb4..0000000000 --- a/pr-preview/pr-1594/reference/authentication/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - -Authorizing users and authenticating with Flow | Estuary Flow - - - - - - - - - -

      Authorizing users and authenticating with Flow

      -

      Read, write, and admin capabilities over Flow catalogs and the collections that comprise them -are granted to Flow users through capabilities.

      -

      Capabilities are granted in terms of prefixes within the Flow namespace. -By default, each organization has a unique top-level prefix. -For example, if you worked for Acme Co, your assigned organization prefix would be acmeCo/. -You may further divide your namespace however you'd like; for example acmeCo/anvils and acmeCo/roadrunners. -When you name a collection, you can customize the prefix, and capabilities can be configured at any prefix level. -This allows you to flexibly control access to your Flow data.

      -

      The available capabilities are:

      -
        -
      • -

        read: Allows the subject to read data from collections of the given prefix.

        -
      • -
      • -

        write: Allows the subject to read and write data from collections of the given prefix.

        -
      • -
      • -

        admin: Allows the subject to read and write data from collections of the given prefix, -and to manage storage mappings, catalog specifications, and capability grants within the prefix. -The admin capability also inherits capabilities granted to the prefix, as discussed below.

        -
      • -
      -

      Subjects, objects, and inherited capabilities

      -

      The entity to which you grant a capability is called the subject, and the entity over which access is granted is called the object. -The subject can be either a user or a prefix, and the object is always a prefix. This allows subjects to inherit nested capabilities, -so long as they are granted admin.

      -

      For example, user X of Acme Co has admin access to the acmeCo/ prefix, and user Y has write access. -A third party has granted acmeCo/ read access to shared data at outside-org/acmeCo-share/. -User X automatically inherits read access to outside-org/acmeCo-share/, but user Y does not.

      -

      Default authorization settings

      -

      When you first sign up to use Flow, your organization is provisioned a prefix, and your username is granted admin access to the prefix. -Your prefix is granted write access to itself and read access to its logs, which are stored under a unique sub-prefix of the global ops/ prefix.

      -

      Using the same example, say user X signs up on behalf of their company, AcmeCo. User X is automatically granted admin access to the acmeCo/ prefix. -acmeCo/, in turn, has write access to acmeCo/ and read access to ops/acmeCo/.

      -

      As more users and prefixes are added, admins can provision capabilities using the CLI.

      -

      Authenticating Flow in the web app

      -

      You must sign in to begin a new session using the Flow web application. -For the duration of the session, you'll be able to perform actions depending on the capabilities granted to the user profile.

      -

      You can view the capabilities currently provisioned in your organization on the Admin tab.

      -

      Authenticating Flow using the CLI

      -

      You can use the flowctl CLI to work with your organization's catalogs and drafts in your local development environment.

      -

      To authenticate a local development session using the CLI, do the following:

      -
        -
      1. -

        Ensure that you have an Estuary account and have signed into the Flow web app before.

        -
      2. -
      3. -

        In the terminal of your local development environment, run:

        -
        flowctl auth login
        -

        In a browser window, the web app opens to the CLI-API tab.

        -
      4. -
      5. -

        Copy the access token.

        -
      6. -
      7. -

        Return to the terminal, paste the access token, and press Enter.

        -
      8. -
      -

      The token will expire after a predetermined duration. Repeat this process to re-authenticate.

      -

      Provisioning capabilities

      -

      As an admin, you can provision capabilities using the CLI with the subcommands of flowctl auth roles.

      -

      For example:

      -
        -
      • -

        flowctl auth roles list returns a list of all currently provisioned capabilities

        -
      • -
      • -

        flowctl auth roles grant --object-role=acmeCo/ --capability=admin --subject-user-id=userZ grants user Z admin access to acmeCo

        -
      • -
      • -

        flowctl auth roles revoke --object-role=outside-org/acmeCo-share/ --capability=read --subject-role=acmeCo/ would be used by an admin of outside-org -to revoke acmeCo/'s read access to outside-org/acmeCo-share/.

        -
      • -
      -

      You can find detailed help for all subcommands using the --help or -h flag.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/editing/index.html b/pr-preview/pr-1594/reference/editing/index.html deleted file mode 100644 index 5d66180d72..0000000000 --- a/pr-preview/pr-1594/reference/editing/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - -Editing considerations | Estuary Flow - - - - - - - - - -

      Editing considerations

      -

      You can edit the components of your Data Flows in the Flow web app and with flowctl, but before you do so, it's important to consider the implications of your changes.

      -

      Though Flow entities like captures, collections, and materializations are discrete components, they depend on one another to form complete Data Flows. Changing a configuration or a name can have adverse effects downstream.

      -

      As you edit, you'll also have to account for any updates to the configuration for the connector used.

      -

      How to edit Flow entities

      -

      In the Flow web app, you can edit captures and materializations, and use the Schema Inference tool to edit collection schemas.

      - -

      With flowctl, you can edit captures, materializations, collections, derivations, and tests. -You do this by pulling the desired specification locally, editing, and re-publishing.

      - -

      Endpoint configuration changes

      -

      A common reason to edit a capture or materialization to fix a broken endpoint configuration: -for example, if a database is now accessed through a different port. -Changes that prevent Flow from finding the source system immediately cause the capture or materialization to fail.

      -

      By contrast, certain credential changes might not cause issues unless you attempt to edit the capture or materialization. -Because Flow tasks run continuously, the connector doesn't have to re-authenticate and an outdated credential won't cause failure. -Editing, however, requires the task to re-start, so you'll need to provide current credentials to the endpoint configuration. -Before editing, take note of any changed credentials, even if the task is still running successfully.

      -

      Managing connector updates

      -

      Connectors are updated periodically. In some cases, required fields are added or removed. -When you edit a capture or materialization, you'll need to update the configuration to comply with the current connector version. -You may need to change a property's formatting or add a new field.

      -

      Additionally, certain updates to capture connectors can affect the way available collections are named. -After editing, the connector may map a data resource to new collection with a different name.

      -

      For example, say you have capture that writes to a collection called post/fruity_pebbles/nutritionFacts. -You begin to edit the capture using the latest version of the connector. -The connector detects the same set of nutrition facts data, -but maps it to a collection called post/fruity_pebbles/nutrition-facts. -If you continue to publish the edited capture, both collections will persist, -but new data will be written to the new collection.

      -

      Before editing, check if a connector has been updated:

      -
        -
      • Go to the Admin tab and view the list of connectors. Each tile shows the date it was last updated.
      • -
      • Check the connector's documentation. Pertinent updates, if any, are noted in the Changelog section.
      • -
      -

      Considerations for name changes

      -

      You're not able to change the name of a capture or materialization after you create it. -You're also unable to manually change the names of collections; -however, connector updates can cause collection names to change, as discussed above.

      -

      It is possible to manually change the names of destination resources (tables or analogous data storage units to which collections are written) when editing a materialization. -You should avoid doing so unless you want to route future data to a new location.

      -

      If you do this, a new resource with that name will be created and the old resource will continue to exist. -Historical data will may not be backfilled into the new resource, depending on the connector used.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/materialization-sync-schedule/index.html b/pr-preview/pr-1594/reference/materialization-sync-schedule/index.html deleted file mode 100644 index c39057caaf..0000000000 --- a/pr-preview/pr-1594/reference/materialization-sync-schedule/index.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - -Materialization sync schedule | Estuary Flow - - - - - - - - - -

      Materialization sync schedule

      -

      For some systems you might prefer to have data sync'd less frequently to reduce -compute costs in the destination if some delay in new data is acceptable. For -example, if the destination system has a minimum compute charge per-query, you -could reduce your compute charges by running a single large query every 30 -minutes rather than many smaller queries every few seconds.

      -
      note

      Syncing data less frequently to your destination system does not effect the -cost for running the materialization connector within Estuary Flow. But it can -reduce the costs incurred in the destination from the actions the connector -takes to load data to it.

      -

      These materialization connectors support configuring a sync schedule:

      - -

      How transactions are used to sync data to a destination

      -

      Estuary Flow processes data in -transactions. Materialization -connectors use the materialization -protocol to process transactions and -sync data to the destination.

      -

      When a materialization is caught up to its source collections, it runs frequent -small transactions to keep the destination up to date. In this case every new -transaction contains the latest data that needs updated. But when a -materialization is backfilling its source collections, it runs larger -transactions to efficiently load the data in bulk to the destination and catch -up to the latest changes.

      -

      The sync schedule is configured in terms of these transactions: For less -frequent updates, processing of additional transactions is delayed by some -amount of time. This extra delay is only applied when the materialization is -fully caught up - backfills always run as fast as possible. And while a -transaction is delayed, Estuary Flow will continue batching and combining new -documents so that the next transaction contains all of the latest data.

      -

      You can read about how continuous materialization -works for -more background information.

      -

      Configuring a sync schedule

      -

      A materialization can be configured to run on a fixed schedule 24/7 or it can -have a faster sync schedule during certain times of the day and on certain days -of the week. The following options are available for configuring the sync -schedule:

      -
      PropertyTitleDescriptionType
      /syncFrequencySync FrequencyFrequency at which transactions are executed when the materialization is fully caught up and streaming changes. May be enabled only for certain time periods and days of the week if configured below; otherwise it is effective 24/7. Defaults to 30 minutes if unset.string
      /timezoneTimezoneTimezone applicable to sync time windows and active days. Must be a valid IANA time zone name or +HH:MM offset.string
      /fastSyncStartTimeFast Sync Start TimeTime of day that transactions begin executing at the configured Sync Frequency. Prior to this time transactions will be executed more slowly. Must be in the form of '09:00'.string
      /fastSyncStopTimeFast Sync Stop TimeTime of day that transactions stop executing at the configured Sync Frequency. After this time transactions will be executed more slowly. Must be in the form of '17:00'.string
      /fastSyncEnabledDaysFast Sync Enabled DaysDays of the week that the configured Sync Frequency is active. On days that are not enabled, transactions will be executed more slowly for the entire day. Examples: 'M-F' (Monday through Friday, inclusive), 'M,W,F' (Monday, Wednesday, and Friday), 'Su-T,Th-S' (Sunday through Tuesday, inclusive; Thursday through Saturday, inclusive). All days are enabled if unset.string
      -
      warning

      Changes to a materialization's -specification are only applied -after the materialization task has completed and acknowledged all of its -outstanding transactions. This means that if a task is running with a 4 hour -sync frequency, it may take up to 8 hours for a change to the specification to -take effect: 4 hours for the "current" transaction to complete and be -acknowledged, and another 4 hours for the next "pipelined" commit to complete -and be acknowledged.

      If you are making changes to a materialization with a Sync Schedule -configured and would like those changes to take effect immediately, you can -disable and then re-enable the materialization.

      -

      Example: Sync data on a fixed schedule

      -

      To use the same schedule for syncing data 24/7, set the value of Sync -Frequency only and leave the other inputs empty. For example, you might set a -Sync Frequency of 15m to always have you destination sync every 15 minutes -instead of the default 30 minutes.

      -
      tip

      If you want the materialization to always push updated data as fast as possible, -use a Sync Frequency of 0s.

      -

      Example: Sync data faster during certain times of the day

      -

      If you only care about having the most-up-to-date data possible during certain -times of the day, you can set a start and stop time for that time period. The -value you set for Sync Frequency will be used during that time period; -otherwise syncs will be performed every 4 hours.

      -

      The Fast Sync Start Time and Fast Sync Stop Time values must be set as -24-hour times, and you must provide a value for Timezone that this time -window should use. Timezones must either be a valid IANA time zone -name or a +HH:MM -offset. Providing a time zone name will ensure local factors like daylight -savings time are considered for the schedule, whereas an offset timezone is -always relative to UTC.

      -

      An example configuration data syncs data as fast as possible between the hours -of 9:00AM and 5:00PM in the Eastern Time Zone (ET) would use these values:

      -
        -
      • Sync Frequency: 0s
      • -
      • Timezone: America/New_York
      • -
      • Fast Sync Start Time: 09:00
      • -
      • Fast Sync Stop Time: 17:00
      • -
      -

      Example: Sync data faster only on certain days of the week

      -

      You can also set certain days of the week that the fast sync is active. On all -other days, data will be sync'd more slowly all day.

      -

      To enable this, set values for Sync Frequency, Timezone, Fast Sync -Start Time, and Fast Sync Stop Time as you would for syncing data faster -during certain times of the day, and also provide a value for Fast Sync -Enabled Days.

      -

      Fast Sync Enabled Days is a range of days, where the days of the week are -abbreviated as (Su)nday, (M)onday, (T)uesday, (W)ednesday, (Th)ursday, -(F)riday, (S)aturday.

      -

      Here are some examples of valid inputs for Fast Sync Enabled Days:

      -
        -
      • M-F to enable fast sync on Monday through Friday.
      • -
      • Su, T, Th, S to enable fast sync on Sunday, Tuesday, Thursday, and Saturday.
      • -
      • Su-M,Th-S to enable fast sync on Thursday through Monday. Note that the days -of the week must be listed in order, so Th-M will not work.
      • -
      -

      Timing of syncs

      -

      In technical terms, timing of syncs is controlled by the materialization -connector sending a transaction acknowledgement to the Flow runtime a computed -times. Practically this means that at these times the prior transaction will -complete and have its statistics recorded, and the next transaction will begin.

      -

      This timing is computed so that it occurs at predictable instants in time. As a -hypothetical example, if you have set a Sync Frequency of 15m, transaction -acknowledgements might be sent at times like 00:00, 00:15, 00:30, 00:45 -and so on, where each acknowledgement is sent at a multiple of the Sync -Frequency relative to the hour. This means that if the materialization task -shard restarts and completes its first -transaction at 00:13, it will run its next transaction at 00:15 rather than -00:28.

      -

      In actuality these computed points in time have some amount of -jitter applied to them to avoid -overwhelming the system at common intervals, so setting a Sync Frequency to -a specific value will ensure that transactions are predictably acknowledged that -often, but makes no assumptions about precisely what time instants the -acknowledgements will occur.

      -
      info

      The jitter value is deterministic based on the compute resource for the -destination system from the materialization's endpoint configuration. How this -compute resource is identified various for different systems, but is usually -something like "account_name" + "warehouse_Name".

      This means that separate materialization use the same compute resource will -synchronize their usage of that compute resource if they have the same Sync -Schedule configured.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/notifications/index.html b/pr-preview/pr-1594/reference/notifications/index.html deleted file mode 100644 index 47e06fe001..0000000000 --- a/pr-preview/pr-1594/reference/notifications/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - -Notifications | Estuary Flow - - - - - - - - - -

      Notifications

      -

      Estuary allows users to configure email notifications on specific tenants to send out alerts when a task hasn't received data within a time window and when billing information has been updated.

      -

      In the Admin section of the Flow Web Application, navigate to the the Settings tab. Here you will be able to input your email to receive notifications from your tenant.

      -

      Data Movement Alerts

      -

      When navigating to the main view of a capture or a materialization, a user can select an interval for tracking zero data movement. Under the Nofitification Settiings card, select a time interval from the dropdown labeled Interval. There is no need to save, but you must also have already configured notifications in order for the alert to take into effect. If you are not yet subscribed to notifications, a pop up will appear prompting you to set up a subscribing by clicking on CLICK HERE.

      -

      If your task does not receive any new documents with the selected timeframe, an email will be sent to any email addresses that are subscribed to this tenant.

      -

      Billing Alerts

      -

      Billing alerts are automatically subscribed to when a user inputs their email into the Organization Notifications table. Alerts will be sent out for the following events:

      -
        -
      • Free Tier Started: A tenenat has transitioned into the free trial
      • -
      • Free Trial Ending: Five days are remaining in a tenant's free trial
      • -
      • Free Trial Ended: A tenant's free trial has ended
      • -
      • Provided Payment Method: A valid payment method has been provided for a tenant
      • -
      -

      Properties

      -
      PropertyTitleDescriptionType
      /catalogPrefixPrefixSubscribe to notifications for this tenantstring
      /emailEmailAlert the following email with all notificationsstring
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/organizing-catalogs/index.html b/pr-preview/pr-1594/reference/organizing-catalogs/index.html deleted file mode 100644 index c4c3da4c1e..0000000000 --- a/pr-preview/pr-1594/reference/organizing-catalogs/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - -Organizing a Flow catalog | Estuary Flow - - - - - - - - - -

      Organizing a Flow catalog

      -
      Beta

      This page is outdated. It does not reflect the current state of the Flow web application and the -authorization model used to share -entities in Flow catalogs. Updates are coming soon.

      -

      It's not necessary to store the entire catalog spec in one YAML file, and Flow provides the flexibility to reference other files, which can be managed independently. -You can leverage this capability when you run Flow from the command line. You may want to do so if:

      -
        -
      • You want to ensure shared collections remain easy to find
      • -
      • You use group data that's managed by different teams
      • -
      • You could benefit from DRY factoring things that are different per environment
      • -
      • You need to manage sensitive credentials separately from materialization definitions
      • -
      -

      import

      -

      Flow's import directive can help you easily handle all of these scenarios while keeping your catalogs well organized. Each catalog spec file may import any number of other files, and each import may refer to either relative or an absolute URL.

      -

      When you use import in a catalog spec, you're conceptually bringing the entirety of another catalog — as well as the schemas and typescript files it uses — into your catalog. Imports are also transitive, so when you import another catalog, you're also importing everything that other catalog has imported. This allows you to keep your catalogs organized, and is flexible enough to support collaboration between separate teams and organizations.

      -

      Perhaps the best way of explaining this is with some examples.

      -

      Example: Organizing collections

      -

      Let's look at a relatively simple case in which you want to organize your collections into multiple catalog files. Say you work for Acme Corp on the team that's introducing Flow. You might start with the collections and directory structure below:

      -
      acme/customers/customerInfo
      acme/products/info/manufacturers
      acme/products/info/skus
      acme/products/inventory
      acme/sales/pending
      acme/sales/complete
      -
      acme
      ├── flow.yaml
      ├── customers
      │ ├── flow.ts
      │ ├── flow.yaml
      │ └── schemas.yaml
      ├── products
      │ ├── flow.yaml
      │ ├── info
      │ │ ├── flow.ts
      │ │ ├── flow.yaml
      │ │ └── schemas.yaml
      │ └── inventory
      │ ├── flow.ts
      │ ├── flow.yaml
      │ └── schemas.yaml
      schemas.yaml
      └── sales
      ├── flow.ts
      ├── flow.yaml
      └── schemas.yaml
      -

      It's immediately clear where each of the given collections is defined, since the directory names match the path segments in the collection names. This is not required by theflowctl CLI, but is strongly recommended, since it makes your catalogs more readable and maintainable. Each directory contains a catalog spec (flow.yaml), which will import all of the catalogs from child directories.

      -

      So, the top-level catalog spec, acme/flow.yaml, might look something like this:

      -
      import:
      - customers/flow.yaml
      - products/flow.yaml
      - sales/flow.yaml
      -

      This type of layout has a number of other advantages. During development, you can easily work with a subset of collections using, for example, flowctl test --source acme/products/flow.yaml to run only the tests for product-related collections. It also allows other imports to be more granular. For example, you might want a derivation under sales to read from acme/products/info. Since info has a separate catalog spec, acme/sales/flow.yaml can import acme/products/info/flow.yaml without creating a dependency on the inventory collection.

      -

      Example: Separate environments

      -

      It's common to use separate environments for tiers like development, staging, and production. Flow catalog specs often necessarily include endpoint configuration for external systems that will hold materialized views. Let's say you want your production environment to materialize views to Snowflake, but you want to develop locally on SQLite. We might modify the Acme example slightly to account for this.

      -
      acme
      ├── dev.flow.yaml
      ├── prod.flow.yaml
      ... the remainder is the same as above
      -

      Each of the top-level catalog specs might import all of the collections and define an endpoint called ourMaterializationEndpoint that points to the desired system. The import block might be the same for each system, but each file may use a different configuration for the endpoint, which is used by any materializations that reference it.

      -

      Our configuration for our development environment will look like:

      -
      dev.flow.yaml
        import:
      - customers/flow.yaml
      - products/flow.yaml
      - sales/flow.yaml

      ourMaterializationEndpoint:
      # dev.flow.yaml
      sqlite:
      path: dev-materializations.db
      -

      While production will look like:

      -
      prod.flow.yaml
      import:
      - customers/flow.yaml
      - products/flow.yaml
      - sales/flow.yaml

      endpoints:
      snowflake:
      account: acme_production
      role: admin
      schema: snowflake.com/acmeProd
      user: importantAdmin
      password: abc123
      warehouse: acme_production
      -

      When we test the draft locally, we'll work with dev.flow.yaml, but we'll publish prod.flow.yaml.

      -

      Everything will continue to work because in our development environment we'll be binding collections to our local SQLite DB and in production we'll use Snowflake.

      -

      Example: Cross-team collaboration

      -

      When working across teams, it's common for one team to provide a data product for another to reference and use. Flow is designed for cross-team collaboration, allowing teams and users to reference each other's full catalog or schema.

      -

      Again using the Acme example, let's imagine we have two teams. Team Web is responsible for Acme's website, and Team User is responsible for providing a view of Acme customers that's always up to date. Since Acme wants a responsive site that provides a good customer experience, Team Web needs to pull the most up-to-date information from Team User at any point. Let's look at Team User's collections:

      -
      teamUser.flow.yaml
      import:
      - userProfile.flow.yaml
      -

      Which references:

      -
      userProfile.flow.yaml
      collection:
      userProfile:
      schema:
      -"/userProfile/schema"
      key:
      [/id]
      -

      Team User references files in their directory, which they actively manage in both their import and schema sections. If Team Web wants to access user data (and they have access), they can use a relative path or a URL-based path given that Team User publishes their data to a URL for access:

      -
      teamWeb.flow.yaml
      import:
      -http://www.acme.com/teamUser#userProfile.flow.yaml
      -webStuff.flow.yaml
      -

      Now Team Web has direct access to collections (referenced by their name) to build derived collections on top of. They can also directly import schemas:

      -
      webStuff.flow.yaml
      collection:
      webStuff:
      schema:
      -http://acme.com/teamUser#userProfile/#schema
      key:
      [/id]
      -

      Global namespace

      -

      Every Flow collection has a name, and that name must be unique within a running Flow system. Flow collections should be thought of as existing within a global namespace. Keeping names globally unique makes it easy to import catalogs from other teams, or even other organizations, without having naming conflicts or ambiguities.

      -

      For example, imagine your catalog for the inside sales team has a collection just named customers. If you later try to import a catalog from the outside sales team that also contains a customers collection, 💥 there's a collision. A better collection name would be acme/inside-sales/customers. This allows a catalog to include customer data from separate teams, and also separate organizations.

      -

      Learn more about the Flow namespace.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/reduction-strategies/append/index.html b/pr-preview/pr-1594/reference/reduction-strategies/append/index.html deleted file mode 100644 index b3dfa21320..0000000000 --- a/pr-preview/pr-1594/reference/reduction-strategies/append/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - -append | Estuary Flow - - - - - - - - - -

      append

      -

      append works with arrays, and extends the left-hand array with items from the right-hand side.

      -
      collections:
      - name: example/reductions/append
      schema:
      type: object
      reduce: { strategy: merge }
      properties:
      key: { type: string }
      value:
      # Append only works with type "array".
      # Others will throw an error at build time.
      type: array
      reduce: { strategy: append }
      required: [key]
      key: [/key]

      tests:
      "Expect we can append arrays":
      - ingest:
      collection: example/reductions/append
      documents:
      - { key: "key", value: [1, 2] }
      - { key: "key", value: [3, null, "abc"] }
      - verify:
      collection: example/reductions/append
      documents:
      - { key: "key", value: [1, 2, 3, null, "abc"] }
      -

      The right-hand side must always be an array. The left-hand side may be null, in which case the reduction is treated as a no-op and its result remains null. This can be combined with schema conditionals to toggle whether reduction-reduction should be done or not.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals/index.html b/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals/index.html deleted file mode 100644 index ff0b57ebaa..0000000000 --- a/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - -Composing with conditionals | Estuary Flow - - - - - - - - - -

      Composing with conditionals

      -

      Reduction strategies are JSON Schema annotations. As such, their applicability at a given document location can be controlled through the use of conditional keywords within the schema, like oneOf or if/then/else. This means Flow’s built-in strategies can be combined with schema conditionals to construct a wider variety of custom reduction behaviors.

      -

      For example, here’s a reset-able counter:

      -
      collections:
      - name: example/reductions/sum-reset
      schema:
      type: object
      properties:
      key: { type: string }
      value: { type: number }
      required: [key]
      # Use oneOf to express a tagged union over "action".
      oneOf:
      # When action = reset, reduce by taking this document.
      - properties: { action: { const: reset } }
      reduce: { strategy: lastWriteWins }
      # When action = sum, reduce by summing "value". Keep the LHS "action",
      # preserving a LHS "reset", so that resets are properly associative.
      - properties:
      action:
      const: sum
      reduce: { strategy: firstWriteWins }
      value: { reduce: { strategy: sum } }
      reduce: { strategy: merge }
      key: [/key]

      tests:
      "Expect we can sum or reset numbers":
      - ingest:
      collection: example/reductions/sum-reset
      documents:
      - { key: "key", action: sum, value: 5 }
      - { key: "key", action: sum, value: -1.2 }
      - verify:
      collection: example/reductions/sum-reset
      documents:
      - { key: "key", value: 3.8 }
      - ingest:
      collection: example/reductions/sum-reset
      documents:
      - { key: "key", action: reset, value: 0 }
      - { key: "key", action: sum, value: 1.3 }
      - verify:
      collection: example/reductions/sum-reset
      documents:
      - { key: "key", value: 1.3 }
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins/index.html b/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins/index.html deleted file mode 100644 index ff38d1f550..0000000000 --- a/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - -firstWriteWins and lastWriteWins | Estuary Flow - - - - - - - - - -

      firstWriteWins and lastWriteWins

      -

      firstWriteWins always takes the first value seen at the annotated location. Likewise, lastWriteWins always takes the last. Schemas that don’t have an explicit reduce annotation default to lastWriteWins behavior.

      -
      collections:
      - name: example/reductions/fww-lww
      schema:
      type: object
      reduce: { strategy: merge }
      properties:
      key: { type: string }
      fww: { reduce: { strategy: firstWriteWins } }
      lww: { reduce: { strategy: lastWriteWins } }
      required: [key]
      key: [/key]

      tests:
      "Expect we can track first- and list-written values":
      - ingest:
      collection: example/reductions/fww-lww
      documents:
      - { key: "key", fww: "one", lww: "one" }
      - { key: "key", fww: "two", lww: "two" }
      - verify:
      collection: example/reductions/fww-lww
      documents:
      - { key: "key", fww: "one", lww: "two" }
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/reduction-strategies/index.html b/pr-preview/pr-1594/reference/reduction-strategies/index.html deleted file mode 100644 index 65938b145d..0000000000 --- a/pr-preview/pr-1594/reference/reduction-strategies/index.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - -Reduction strategies | Estuary Flow - - - - - - - - - -

      Reduction strategies

      -

      Flow uses reductions -to aggregate data in the runtime in order to improve endpoint performance. -Reductions tell Flow how two versions of a document can be meaningfully combined. Guarantees that underlie all Flow reduction behavior are explained in depth below.

      -

      Some reductions occur automatically during captures and materializations to optimize performance, but you can define more advanced behavior using reduction annotations in collection schemas.

      -

      The available strategies are:

      - -

      When no other strategy is specified in a schema, Flow defaults to lastWriteWins. For even more customization, you can use conditional statements.

      -
      info

      Estuary has many future plans for reduction annotations:

      -
        -
      • More strategies, including data sketches like HyperLogLogs, T-Digests, and others.
      • -
      • Eviction policies and constraints, for bounding the sizes of objects and arrays with fine-grained removal ordering.
      • -
      -

      What’s here today can be considered a minimal, useful proof-of-concept.

      -

      Reduction guarantees

      -

      In Flow, documents that share the same collection key and are written to the same logical partition have a total order, meaning that one document is universally understood to have been written before the other.

      -

      This isn't true of documents of the same key written to different logical partitions. These documents can be considered “mostly” ordered: Flow uses timestamps to understand the relative ordering of these documents, and while this largely produces the desired outcome, small amounts of re-ordering are possible and even likely.

      -

      Flow guarantees exactly-once semantics within derived collections and materializations (so long as the target system supports transactions), and a document reduction will be applied exactly one time.

      -

      Flow does not guarantee that documents are reduced in sequential order, directly into a base document. For example, documents of a single Flow capture transaction are combined together into one document per collection key at capture time – and that document may be again combined with still others, and so on until a final reduction into the base document occurs.

      -

      Taken together, these total-order and exactly-once guarantees mean that reduction strategies must be associative [as in (2 + 3) + 4 = 2 + (3 + 4) ], but need not be commutative [ 2 + 3 = 3 + 2 ] or idempotent [ S u S = S ]. They expand the palette of strategies that can be implemented, and allow for more efficient implementations as compared to, for example CRDTs.

      -

      In this documentation, we’ll refer to the “left-hand side” (LHS) as the preceding document and the “right-hand side” (RHS) as the following one. Keep in mind that both the LHS and RHS may themselves represent a combination of still more ordered documents because, for example, reductions are applied associatively.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/reduction-strategies/merge/index.html b/pr-preview/pr-1594/reference/reduction-strategies/merge/index.html deleted file mode 100644 index e558f17831..0000000000 --- a/pr-preview/pr-1594/reference/reduction-strategies/merge/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - -merge | Estuary Flow - - - - - - - - - -

      merge

      -

      merge reduces the left-hand side and right-hand side by recursively reducing shared document locations. The LHS and RHS must either both be objects, or both be arrays.

      -

      If both sides are objects, merge performs a deep merge of each property. If LHS and RHS are both arrays, items at each index of both sides are merged together, extending the shorter of the two sides by taking items off the longer:

      -
      collections:
      - name: example/reductions/merge
      schema:
      type: object
      reduce: { strategy: merge }
      properties:
      key: { type: string }
      value:
      # Merge only works with types "array" or "object".
      # Others will throw an error at build time.
      type: [array, object]
      reduce: { strategy: merge }
      # Deeply merge sub-locations (items or properties) by summing them.
      items:
      type: number
      reduce: { strategy: sum }
      additionalProperties:
      type: number
      reduce: { strategy: sum }
      required: [key]
      key: [/key]

      tests:
      "Expect we can merge arrays by index":
      - ingest:
      collection: example/reductions/merge
      documents:
      - { key: "key", value: [1, 1] }
      - { key: "key", value: [2, 2, 2] }
      - verify:
      collection: example/reductions/merge
      documents:
      - { key: "key", value: [3, 3, 2] }

      "Expect we can merge objects by property":
      - ingest:
      collection: example/reductions/merge
      documents:
      - { key: "key", value: { "a": 1, "b": 1 } }
      - { key: "key", value: { "a": 1, "c": 1 } }
      - verify:
      collection: example/reductions/merge
      documents:
      - { key: "key", value: { "a": 2, "b": 1, "c": 1 } }
      -

      Merge may also take a key, which is one or more JSON pointers that are relative to the reduced location. If both sides are arrays and a merge key is present, then a deep sorted merge of the respective items is done, as ordered by the key. Arrays must be pre-sorted and de-duplicated by the key, and merge itself always maintains this invariant.

      -

      Note that you can use a key of [“”] for natural item ordering, such as merging sorted arrays of scalars.

      -
      collections:
      - name: example/reductions/merge-key
      schema:
      type: object
      reduce: { strategy: merge }
      properties:
      key: { type: string }
      value:
      type: array
      reduce:
      strategy: merge
      key: [/k]
      items: { reduce: { strategy: firstWriteWins } }
      required: [key]
      key: [/key]

      tests:
      "Expect we can merge sorted arrays":
      - ingest:
      collection: example/reductions/merge-key
      documents:
      - { key: "key", value: [{ k: "a", v: 1 }, { k: "b", v: 1 }] }
      - { key: "key", value: [{ k: "a", v: 2 }, { k: "c", v: 2 }] }
      - verify:
      collection: example/reductions/merge-key
      documents:
      - {
      key: "key",
      value: [{ k: "a", v: 1 }, { k: "b", v: 1 }, { k: "c", v: 2 }],
      }
      -

      As with append, the LHS of merge may be null, in which case the reduction is treated as a no-op and its result remains null.

      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize/index.html b/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize/index.html deleted file mode 100644 index c1188dec7d..0000000000 --- a/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - -minimize and maximize | Estuary Flow - - - - - - - - - -

      minimize and maximize

      -

      minimize and maximize reduce by taking the smallest or largest seen value, respectively.

      -
      collections:
      - name: example/reductions/min-max
      schema:
      type: object
      reduce: { strategy: merge }
      properties:
      key: { type: string }
      min: { reduce: { strategy: minimize } }
      max: { reduce: { strategy: maximize } }
      required: [key]
      key: [/key]

      tests:
      "Expect we can min/max values":
      - ingest:
      collection: example/reductions/min-max
      documents:
      - { key: "key", min: 32, max: "abc" }
      - { key: "key", min: 42, max: "def" }
      - verify:
      collection: example/reductions/min-max
      documents:
      - { key: "key", min: 32, max: "def" }
      -

      minimize and maximize can also take a key, which is one or more JSON pointers that are relative to the reduced location. Keys make it possible to minimize and maximize over complex types by ordering over an extracted composite key.

      -

      In the event that a right-hand side document key equals the current left-hand side minimum or maximum, the documents are deeply merged. This can be used to, for example, track not just the minimum value but also the number of times it’s been seen:

      -
      collections:
      - name: example/reductions/min-max-key
      schema:
      type: object
      reduce: { strategy: merge }
      properties:
      key: { type: string }
      min:
      $anchor: min-max-value
      type: array
      items:
      - type: string
      - type: number
      reduce: { strategy: sum }
      reduce:
      strategy: minimize
      key: [/0]
      max:
      $ref: "#min-max-value"
      reduce:
      strategy: maximize
      key: [/0]
      required: [key]
      key: [/key]

      tests:
      "Expect we can min/max values using a key extractor":
      - ingest:
      collection: example/reductions/min-max-key
      documents:
      - { key: "key", min: ["a", 1], max: ["a", 1] }
      - { key: "key", min: ["c", 2], max: ["c", 2] }
      - { key: "key", min: ["b", 3], max: ["b", 3] }
      - { key: "key", min: ["a", 4], max: ["a", 4] }
      - verify:
      collection: example/reductions/min-max-key
      documents:
      # Min of equal keys ["a", 1] and ["a", 4] => ["a", 5].
      - { key: "key", min: ["a", 5], max: ["c", 2] }
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/reduction-strategies/set/index.html b/pr-preview/pr-1594/reference/reduction-strategies/set/index.html deleted file mode 100644 index 4c2d52d608..0000000000 --- a/pr-preview/pr-1594/reference/reduction-strategies/set/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - -set | Estuary Flow - - - - - - - - - -

      set

      -

      set interprets the document location as an update to a set.

      -

      The location must be an object having only “add", “intersect", and “remove” properties. Any single “add", “intersect", or “remove” is always allowed.

      -

      A document with “intersect” and “add” is allowed, and is interpreted as applying the intersection to the left-hand side set, followed by a union with the additions.

      -

      A document with “remove” and “add” is also allowed, and is interpreted as applying the removals to the base set, followed by a union with the additions.

      -

      “remove” and “intersect” within the same document are prohibited.

      -

      Set additions are deeply merged. This makes sets behave like associative maps, where the “value” of a set member can be updated by adding it to the set again, with a reducible update.

      -

      Sets may be objects, in which case the object property serves as the set item key:

      -
      collections:
      - name: example/reductions/set
      schema:
      type: object
      reduce: { strategy: merge }
      properties:
      key: { type: string }
      value:
      # Sets are always represented as an object.
      type: object
      reduce: { strategy: set }
      # Schema for "add", "intersect", and "remove" properties
      # (each a map of keys and their associated sums):
      additionalProperties:
      type: object
      additionalProperties:
      type: number
      reduce: { strategy: sum }
      # Flow requires that all parents of locations with a reduce
      # annotation also have one themselves.
      # This strategy therefore must (currently) be here, but is ignored.
      reduce: { strategy: lastWriteWins }

      required: [key]
      key: [/key]

      tests:
      "Expect we can apply set operations to incrementally build associative maps":
      - ingest:
      collection: example/reductions/set
      documents:
      - { key: "key", value: { "add": { "a": 1, "b": 1, "c": 1 } } }
      - { key: "key", value: { "remove": { "b": 0 } } }
      - { key: "key", value: { "add": { "a": 1, "d": 1 } } }
      - verify:
      collection: example/reductions/set
      documents:
      - { key: "key", value: { "add": { "a": 2, "c": 1, "d": 1 } } }
      - ingest:
      collection: example/reductions/set
      documents:
      - { key: "key", value: { "intersect": { "a": 0, "d": 0 } } }
      - { key: "key", value: { "add": { "a": 1, "e": 1 } } }
      - verify:
      collection: example/reductions/set
      documents:
      - { key: "key", value: { "add": { "a": 3, "d": 1, "e": 1 } } }
      -

      Sets can also be sorted arrays, which are ordered using a provide key extractor. Keys are given as one or more JSON pointers, each relative to the item. As with merge, arrays must be pre-sorted and de-duplicated by the key, and set reductions always maintain this invariant.

      -

      Use a key extractor of [“”] to apply the natural ordering of scalar values.

      -

      Whether array or object types are used, the type must always be consistent across the “add” / “intersect” / “remove” terms of both sides of the reduction.

      -
      collections:
      - name: example/reductions/set-array
      schema:
      type: object
      reduce: { strategy: merge }
      properties:
      key: { type: string }
      value:
      # Sets are always represented as an object.
      type: object
      reduce:
      strategy: set
      key: [/0]
      # Schema for "add", "intersect", & "remove" properties
      # (each a sorted array of [key, sum] 2-tuples):
      additionalProperties:
      type: array
      # Flow requires that all parents of locations with a reduce
      # annotation also have one themselves.
      # This strategy therefore must (currently) be here, but is ignored.
      reduce: { strategy: lastWriteWins }
      # Schema for contained [key, sum] 2-tuples:
      items:
      type: array
      items:
      - type: string
      - type: number
      reduce: { strategy: sum }
      reduce: { strategy: merge }

      required: [key]
      key: [/key]

      tests:
      ? "Expect we can apply operations of sorted-array sets to incrementally build associative maps"
      : - ingest:
      collection: example/reductions/set-array
      documents:
      - { key: "key", value: { "add": [["a", 1], ["b", 1], ["c", 1]] } }
      - { key: "key", value: { "remove": [["b", 0]] } }
      - { key: "key", value: { "add": [["a", 1], ["d", 1]] } }
      - verify:
      collection: example/reductions/set-array
      documents:
      - { key: "key", value: { "add": [["a", 2], ["c", 1], ["d", 1]] } }
      - ingest:
      collection: example/reductions/set-array
      documents:
      - { key: "key", value: { "intersect": [["a", 0], ["d", 0]] } }
      - { key: "key", value: { "add": [["a", 1], ["e", 1]] } }
      - verify:
      collection: example/reductions/set-array
      documents:
      - { key: "key", value: { "add": [["a", 3], ["d", 1], ["e", 1]] } }
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/reduction-strategies/sum/index.html b/pr-preview/pr-1594/reference/reduction-strategies/sum/index.html deleted file mode 100644 index 90119137aa..0000000000 --- a/pr-preview/pr-1594/reference/reduction-strategies/sum/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - -sum | Estuary Flow - - - - - - - - - -

      sum

      -

      sum reduces two numbers or integers by adding their values.

      -
      collections:
      - name: example/reductions/sum
      schema:
      type: object
      reduce: { strategy: merge }
      properties:
      key: { type: string }
      value:
      # Sum only works with types "number" or "integer".
      # Others will throw an error at build time.
      type: number
      reduce: { strategy: sum }
      required: [key]
      key: [/key]

      tests:
      "Expect we can sum two numbers":
      - ingest:
      collection: example/reductions/sum
      documents:
      - { key: "key", value: 5 }
      - { key: "key", value: -1.2 }
      - verify:
      collection: example/reductions/sum
      documents:
      - { key: "key", value: 3.8 }
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/time-travel/index.html b/pr-preview/pr-1594/reference/time-travel/index.html deleted file mode 100644 index 866739a2cb..0000000000 --- a/pr-preview/pr-1594/reference/time-travel/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - -Time Travel | Estuary Flow - - - - - - - - - -

      Time Travel

      -

      Time travel functionality allows you to restrict the data materialization process to a specific date range. When applying time travel to an existing materialization, it's important to note that it won't remove any existing documents. Instead, it will only materialize new data that falls within the specified date and time window. New data will not be included in your materialization destination unless it conforms to the specified date range criteria. Consequently, setting a lower boundary in the future date will delay the materialization of data until that future date is reached.

      -

      How to configure time travel

      -

      In the Flow web app, either navigate to an existing materialization or create a new one. Under Source Collections scroll to the bottom of a Resource Configuration for a specific collection. If you are working with a new materialization, you must link a collection to the materialization before continuing.

      -

      You'll find two optional date-time fields for implementing time travel: notBefore and notAfter. Click on either field to open a date/time picker that you can use to set the values. It's not mandatory to select values for both fields for time travel to take effect. However, selecting values for both fields will ensure that only data meeting both criteria is materialized. In other words, new data must fall before the notAfter date and after the notBefore date to be included in the materialization.

      -

      Specification

      -

      Alternatively, both fields can be defined in the Flow specification file with the following format:

      -
      materializations:
      # The name of the materialization.
      acmeCo/example/database-views:
      # Endpoint defines how to connect to the destination of the materialization.
      # Required, type: object
      endpoint:
      # This endpoint uses a connector provided as a Docker image.
      connector:
      # Docker image that implements the materialization connector.
      image: ghcr.io/estuary/materialize-mysql:dev
      # File that provides the connector's required configuration.
      # Configuration may also be presented inline.
      config: path/to//connector-config.yaml
      bindings:
      - # Source collection read by this binding.
      # Required, type: object or string
      source:
      # Name of the collection to be read.
      # Required.
      name: acmeCo/example/collection
      # Lower bound date-time for documents which should be processed.
      # Source collection documents published before this date-time are filtered.
      # `notBefore` is *only* a filter. Updating its value will not cause Flow
      # to re-process documents that have already been read.
      # Optional. Default is to process all documents.
      notBefore: 2023-01-23T01:00:00Z
      # Upper bound date-time for documents which should be processed.
      # Source collection documents published after this date-time are filtered.
      # Like `notBefore`, `notAfter` is *only* a filter. Updating its value will
      # not cause Flow to re-process documents that have already been read.
      # Optional. Default is to process all documents.
      notAfter: 2023-01-23T02:00:00Z
      -

      Properties

      -
      PropertyTitleDescriptionType
      /notBeforeNot BeforeOnly include date before this timedate-time
      /notAfterNot AfterOnly include data after this timedate-time
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/reference/working-logs-stats/index.html b/pr-preview/pr-1594/reference/working-logs-stats/index.html deleted file mode 100644 index a44f823cf7..0000000000 --- a/pr-preview/pr-1594/reference/working-logs-stats/index.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - -Working with logs and statistics | Estuary Flow - - - - - - - - - -

      Working with logs and statistics

      -

      Your logs and stats collections -are useful for debugging and monitoring catalog tasks.

      -

      Accessing logs and statistics

      -

      You can access logs and statistics in the Flow web app, by materializing them to an external endpoint, or from the command line.

      -

      Logs and statistics in the Flow web app

      -

      You can view a subset of logs and statistics for individual tasks in the Flow web app.

      -

      Logs

      -

      After you publish a new capture or materialization, a pop-up window appears that displays the task's logs. -Once you close the window, you can't regain access to the full logs in the web app. -For a complete view of logs, use flowctl or materialize the logs collection to an outside system.

      -

      However, if a task fails, you can view the logs associated with the error(s) that caused the failure. -In the Details view of the published capture or materialization, click the name of its shard to display the logs.

      -

      Statistics

      -

      Two statistics are shown for each capture, collection, and materialization:

      - -

      These fields have slightly different meanings for each Flow entity type:

      -
        -
      • For captures, Bytes Written and Docs Written represent the total data written across all of the -capture's associated collections.
      • -
      • For collections, Bytes Written and Docs Written represent the data written to the collection from -its associated capture or derivation.
      • -
      • For materializations, Bytes Read and Docs Read represent the total data read from all of the -materialization's associated collections.
      • -
      -

      Accessing logs and statistics from the command line

      -

      The flowctl logs and flowctl stats subcommands allow you to print logs and stats, respectively, from the command line. -This method allows more flexibility and is ideal for debugging.

      -

      You can retrieve logs and stats for any published Flow task. For example:

      -
      flowctl logs --task acmeCo/anvils/capture-one

      flowctl stats --task acmeCo/anvils/capture-one --uncommitted
      -
      Beta

      The --uncommitted flag is currently required for flowctl stats. This means that all statistics are read, regardless of whether they are about a successfully committed transaction, or a transaction that was rolled back or uncommitted. -In the future, committed reads will be the default.

      -

      Printing logs or stats since a specific time

      -

      To limit output, you can retrieve logs are stats starting at a specific time in the past. For example:

      -
      flowctl stats --task acmeCo/anvils/materialization-one --since 1h
      -

      ...will retrieve stats from approximately the last hour. The actual start time will always be at the previous fragment boundary, so it can be significantly before the requested time period.

      -

      Additional options for flowctl logs and flowctl stats can be accessed through command-line help.

      -

      Accessing logs or stats by materialization

      -

      You can materialize your logs or stats collections to an external system. -This is typically the preferred method if you’d like to continuously work with or monitor logs or statistics. -You can materialize the logs or statistics for all tasks, or select a subset of tasks using a partition selector (the logs and stats collections are partitioned on tasks).

      -
      caution

      Be sure to add a partition selector to exclude the logs and statistics of the materialization -itself. Otherwise, you could trigger an infinite loop in which the connector -materializes its own logs and statistics, collects logs and statistic on that event, and so on.

      -
      acmeCo/anvils/logs:
      endpoint:
      connector:
      image: ghcr.io/estuary/materialize-webhook:dev
      config:
      address: my.webhook.com
      bindings:
      - resource:
      relativePath: /log/wordcount
      source: ops/acmeCo/logs
      # Exclude the logs of this materialization to avoid an infinite loop.
      partitions:
      exclude:
      name: ['acmeCo/anvils/logs']
      -

      Available statistics

      -

      Available statistics include information about the amount of data in inputs and outputs of each transaction. They also include temporal information about the transaction. Statistics vary by task type (capture, materialization, or derivation).

      -

      A thorough knowledge of Flow's advanced concepts is necessary to effectively leverage these statistics.

      -

      stats collection documents include the following properties.

      -

      Shard information

      -

      A stats document begins with data about the shard processing the transaction. -Each processing shard is uniquely identified by the combination of its name, keyBegin, and rClockBegin. -This information is important for tasks with multiple shards: it allows you to determine whether data throughput is -evenly distributed amongst those shards.

      -
      PropertyDescriptionData TypeApplicable Task Type
      /shardFlow shard informationobjectAll
      /shard/kindThe type of catalog task. One of "capture", "derivation", or "materialization"stringAll
      /shard/nameThe name of the catalog task (without the task type prefix)stringAll
      /shard/keyBeginWith rClockBegin, this comprises the shard ID. The inclusive beginning of the shard's assigned key range.stringAll
      /shard/rClockBeginWith keyBegin, this comprises the shard ID. The inclusive beginning of the shard's assigned rClock range.stringAll
      -

      Transaction information

      -

      stats documents include information about a transaction: its inputs and outputs, -the amount of data processed, and the time taken. -You can use this information to ensure that your Flow tasks are running efficiently, -and that the amount of data processed matches your expectations.

      -
      PropertyDescriptionData TypeApplicable Task Type
      /tsTimestamp corresponding to the start of the transaction, rounded to the nearest minutestringAll
      /openSecondsTotalTotal time that the transaction was open before starting to commitnumberAll
      /txnCountTotal number of transactions represented by this stats document. Used for reduction.integerAll
      /captureCapture stats, organized by collectionobjectCapture
      /materializeMaterialization stats, organized by collectionobjectMaterialization
      /deriveDerivation statisticsobjectDerivation
      /<task-type>/<collection-name>/right/Input documents from a the task's sourceobjectCapture, materialization
      /<task-type>/<collection-name>/left/Input documents from an external destination; used for reduced updates in materializationsobjectMaterialization
      /<task-type>/<collection-name>/out/Output documents from the transactionobjectAll
      /<task-type>/{}/docsTotalTotal number of documentsintegerAll
      /<task-type>/{}/bytesTotalTotal number of bytes representing the JSON encoded documentsintegerAll
      /derivations/transforms/transformStatsStats for a specific transform of a derivation, which will have an update, publish, or bothobjectDerivation
      /derivations/transforms/transformStats/inputThe input documents that were fed into this transformobjectDerivation
      /derivations/transforms/transformStats/updateThe outputs from update lambda invocations, which were combined into registersobjectDerivation
      /derivations/transforms/transformStats/publishThe outputs from publish lambda invocations.objectDerivation
      /derivations/registers/createdTotalThe total number of new register keys that were createdintegerDerivation
      - - \ No newline at end of file diff --git a/pr-preview/pr-1594/search-doc-1724944510578.json b/pr-preview/pr-1594/search-doc-1724944510578.json deleted file mode 100644 index c0825781b3..0000000000 --- a/pr-preview/pr-1594/search-doc-1724944510578.json +++ /dev/null @@ -1 +0,0 @@ -{"searchDocs":[{"title":"Journals","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/advanced/journals/","content":"","keywords":"","version":"Next"},{"title":"Specification​","type":1,"pageTitle":"Journals","url":"/pr-preview/pr-1594/concepts/advanced/journals/#specification","content":" Flow collections can control some aspects of how their contents are mapped into journals through the journals stanza: collections: acmeCo/orders: schema: orders.schema.yaml key: [/id] journals: # Configuration for journal fragments. # Required, type: object. fragments: # Codec used to compress fragment files. # One of ZSTANDARD, SNAPPY, GZIP, or NONE. # Optional. Default is GZIP. compressionCodec: GZIP # Maximum flush delay before in-progress fragment buffers are closed # and persisted. Default uses no flush interval. # Optional. Given as a time duration. flushInterval: 15m # Desired content length of each fragment, in megabytes before compression. # Default is 512MB. # Optional, type: integer. length: 512 # Duration for which historical files of the collection should be kept. # Default is forever. # Optional. Given as a time duration. retention: 720h Your storage mappings determine which of your cloud storage buckets is used for storage of collection fragment files. ","version":"Next","tagName":"h2"},{"title":"Physical partitions​","type":1,"pageTitle":"Journals","url":"/pr-preview/pr-1594/concepts/advanced/journals/#physical-partitions","content":" Every logical partition of a Flow collection is created with a single physical partition. Later and as required, new physical partitions are added in order to increase the write throughput of the collection. Each physical partition is responsible for all new writes covering a range of keys occurring in collection documents. Conceptually, if keys range from [A-Z] then one partition might cover [A-F] while another covers [G-Z]. The pivot of a partition reflects the first key in its covered range. One physical partition is turned into more partitions by subdividing its range of key ownership. For instance, a partition covering [A-F] is split into partitions [A-C] and [D-F]. Physical partitions are journals. The relationship between the journal and its specific collection and logical partition are encoded withinits journal specification. ","version":"Next","tagName":"h2"},{"title":"Fragment files​","type":1,"pageTitle":"Journals","url":"/pr-preview/pr-1594/concepts/advanced/journals/#fragment-files","content":" Journal fragment files each hold a slice of your collection's content, stored as a compressed file of newline-delimited JSON documents in your cloud storage bucket. Files are flushed to cloud storage periodically, typically after they reach a desired size threshold. They use a content-addressed naming scheme which allows Flow to understand how each file stitches into the overall journal. Consider a fragment file path like: s3://acmeCo-bucket/acmeCo/orders/category=Anvils/pivot=00/utc_date=2022-01-07/utc_hour=19/0000000000000000-00000000201a3f27-1ec69e2de187b7720fb864a8cd6d50bb69cc7f26.gz This path has the following components: Component\tExampleStorage prefix of physical partition\ts3://acmeCo-bucket/acmeCo/orders/category=Anvils/pivot=00/ Supplemental time pseudo-partitions\tutc_date=2022-01-07/utc_hour=19/ Beginning content offset\t0000000000000000 Ending content offset\t00000000201a3f27 SHA content checksum\t1ec69e2de187b7720fb864a8cd6d50bb69cc7f26 Compression codec\t.gz The supplemental time pseudo-partitions are not logical partitions, but are added to each fragment file path to facilitate integration with external tools that understand Hive layouts. ","version":"Next","tagName":"h2"},{"title":"Hive layouts​","type":1,"pageTitle":"Journals","url":"/pr-preview/pr-1594/concepts/advanced/journals/#hive-layouts","content":" As we've seen, collection fragment files are written to cloud storage with path components like/category=Anvils/pivot=00/utc_date=2022-01-07/utc_hour=19/. If you've used tools within the Apache Hive ecosystem, this layout should feel familiar. Flow organizes files in this way to make them directly usable by tools that understand Hive partitioning, like Spark and Hive itself. Collections can also be integrated as Hive-compatible external tables in tools likeSnowflakeandBigQueryfor ad-hoc analysis. SQL queries against these tables can even utilize predicate push-down, taking query predicates over category, utc_date, and utc_hourand pushing them down into the selection of files that must be read to answer the query — often offering much faster and more efficient query execution because far less data must be read. ","version":"Next","tagName":"h2"},{"title":"Logs and statistics","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/advanced/logs-stats/","content":"","keywords":"","version":"Next"},{"title":"Logs​","type":1,"pageTitle":"Logs and statistics","url":"/pr-preview/pr-1594/concepts/advanced/logs-stats/#logs","content":" Each organization that uses Flow has a logs collection under the global ops prefix. For the organization Acme Co, it would have the name ops/acmeCo/logs. These can be thought of as standard application logs: they store information about events that occur at runtime. They’re distinct from recovery logs, which track the state of various task shards. Regardless of how many Data Flows your organization has, all logs are stored in the same collection, which is read-only and logically partitioned on tasks. Logs are collected from events that occur within the Flow runtime, as well as the capture and materialization connectors your Data Flow is using. ","version":"Next","tagName":"h2"},{"title":"Log level​","type":1,"pageTitle":"Logs and statistics","url":"/pr-preview/pr-1594/concepts/advanced/logs-stats/#log-level","content":" You can set the log level for each catalog task to control the level of detail at which logs are collected for that task. The available levels, listed from least to most detailed, are: error: Non-recoverable errors from the Flow runtime or connector that are critical to know aboutwarn: Errors that can be re-tried, but likely require investigationinfo: Task lifecycle events, or information you might want to collect on an ongoing basisdebug: Details that will help debug an issue with a tasktrace: Maximum level of detail that may yield gigabytes of logs The default log level is info. You can change a task’s log level by adding the shards keyword to its definition in the catalog spec: materializations: acmeCo/debugMaterialization: shards: logLevel: debug endpoint: {} ","version":"Next","tagName":"h3"},{"title":"Statistics​","type":1,"pageTitle":"Logs and statistics","url":"/pr-preview/pr-1594/concepts/advanced/logs-stats/#statistics","content":" Each organization that uses Flow has a stats collection under the global ops prefix. For the organization Acme Co, it would have the name ops/acmeCo/stats. Regardless of how many Data Flows your organization has, all stats are stored in the same collection, which is read-only and logically partitioned on tasks. A new document is published to the stats collection for each task transaction. Each document includes information about the time and quantity of data inputs and outputs. Statistics vary by task type (capture, materialization, or derivation). Use stats to: Evaluate the data throughput of a task; for example, a derivation.Compare a data throughput of a task between platforms; for example, compare reported data capture by Flow to detected change rate in a source system.Access the same information used by Estuary for billing.Optimize your tasks for increased efficiency. See a detailed table of the properties included in stats documents. ","version":"Next","tagName":"h2"},{"title":"Working with logs and statistics​","type":1,"pageTitle":"Logs and statistics","url":"/pr-preview/pr-1594/concepts/advanced/logs-stats/#working-with-logs-and-statistics","content":" Learn more about working with logs and statistics ","version":"Next","tagName":"h2"},{"title":"Schema evolution","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/advanced/evolutions/","content":"","keywords":"","version":"Next"},{"title":"Introduction​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/concepts/advanced/evolutions/#introduction","content":" Flow stores your real-times datasets as collections, groups of continually updating JSON documents.Captures write data to collections, and materializations read data from collections. Together, these three components form a complete Data Flow. Note Derivations can also read data from and write data to collections. To keep things simple in this article, we'll be referring only to captures and materializations. graph LR; Source[Source System]-->Capture; Capture-->Collection; Collection-->Materialization; Materialization-->Dest[Destination System]; Each collection and its data are defined by a collection specification, or spec. The spec serves as a formal contract between the capture and the materialization, ensuring that data is correctly shaped and moves through the Data Flow without error. The spec includes the collection's key, its schema, and logical partitions of the collection, if any. When any of these parts change, any capture or materialization writing to or reading from the collection must be updated to approve of the change, otherwise, the Data Flow will fail with an error. You can use Flow's schema evolutions feature to quickly and simultaneously update other parts of a Data Flow so you're able to re-start it without error when you introduce a collection change. Collection specs may change for a variety of reasons, such as: The source system is a database, and someone ran an ALTER TABLE statement on a captured table, so you need to update the collection schema (through AutoDiscover or manually).The source system contains unstructured data, and some data with a different shape was just captured so you need to update the collection schema (through AutoDiscover or manually).Someone manually changed the collection's logical partitions. Regardless of why or how a spec change is introduced, the effect is the same. Flow will never permit you to publish changes that break this contract between captures and materializations, so you'll need to update the contract. ","version":"Next","tagName":"h2"},{"title":"Using evolutions​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/concepts/advanced/evolutions/#using-evolutions","content":" When you attempt to publish a breaking change to a collection in the Flow web app, you get an error message that looks similar to this one: Click the Apply button to trigger an evolution and update all necessary specification to keep your Data Flow functioning. Then, review and publish your draft. If you enabled AutoDiscover on a capture, any breaking changes that it introduces will trigger an automatic schema evolution, so long as you selected the Breaking change re-versions collections option(evolveIncompatibleCollections). ","version":"Next","tagName":"h2"},{"title":"What do schema evolutions do?​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/concepts/advanced/evolutions/#what-do-schema-evolutions-do","content":" The schema evolution feature is available in the Flow web app when you're editing pre-existing Flow entities. It notices when one of your edit would cause other components of the Data Flow to fail, alerts you, and gives you the option to automatically update the specs of these components to prevent failure. In other words, evolutions happen in the draft state. Whenever you edit, you create a draft. Evolutions add to the draft so that when it is published and updates the active data flow, operations can continue seamlessly. Alternatively, you could manually update all the specs to agree to your edit, but this becomes time-consuming and repetitive. Evolutions can prevent errors resulting from mismatched specs in two ways: Materialize data to a new resource in the endpoint system: The evolution updates the affected materialization bindings to increment their backfill counter, which causes the materialization to re-create the resource (database table, for example) and backfill it from the beginning. This is a simpler change, and how evolutions work in most cases. Re-create the Flow collection with a new name: The evolution creates a completely new collection with numerical suffix, such as _v2. This collection starts out empty and backfills from the source. The evolution also updates all captures and materializations that reference the old collection to instead reference the new collection, and increments their backfill counters. This is a more complicated change, and evolutions only work this way when necessary: when the collection key or logical partitioning changes. In either case, the names of the destination resources will remain the same. For example, a materialization to Postgres would drop and re-create the affected tables with the same names they had previously. Also in either case, only the specific bindings that had incompatible changes will be affected. Other bindings will remain untouched, and will not re-backfill. ","version":"Next","tagName":"h2"},{"title":"What causes breaking schema changes?​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/concepts/advanced/evolutions/#what-causes-breaking-schema-changes","content":" Though changes to the collection key or logical partition can happen, the most common cause of a breaking change is a change to the collection schema. Generally materializations, not captures, require updates following breaking schema changes. This is because the new collection specs are usually discovered from the source, so the capture is edited at the same time as the collection. Consider a collection schema that looks like this: schema: type: object properties: id: { type: integer } foo: { type: string, format: date-time } required: [id] key: [/id] If you materialized that collection into a relational database table, the table would look something like my_table (id integer primary key, foo timestamptz). Now, say you edit the collection spec to remove format: date-time from bar. You'd expect the materialized database table to then look like (id integer primary key, foo text). But since the column type of foo has changed, this will fail. An easy solution in this case would be to change the name of the table that the collection is materialized into. Evolutions do this by appending a suffix to the original table name. In this case, you'd end up with my_table_v2 (id integer primary key, foo text). ","version":"Next","tagName":"h2"},{"title":"Projections","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/advanced/projections/","content":"","keywords":"","version":"Next"},{"title":"Logical partitions​","type":1,"pageTitle":"Projections","url":"/pr-preview/pr-1594/concepts/advanced/projections/#logical-partitions","content":" Projections can also be used to logically partition a collection, specified as a longer-form variant of a projection definition: collections: acmeCo/user-sessions: schema: session.schema.yaml key: [/user/id, /timestamp] projections: country: location: /country partition: true device: location: /agent/type partition: true network: location: /agent/network partition: true Logical partitions isolate the storage of documents by their differing values for partitioned fields. Flow extracts partitioned fields from each document, and every unique combination of partitioned fields is a separate logical partition. Every logical partition has one or more physical partitionsinto which their documents are written, which in turn controls how files are arranged within cloud storage. For example, a document of "acmeCo/user-sessions" like: {"country": "CA", "agent": {"type": "iPhone", "network": "LTE"}, ...} Might produce files in cloud storage like: s3://bucket/example/sessions/country=CA/device=iPhone/network=LTE/pivot=00/utc_date=2020-11-04/utc_hour=16/<name>.gz info country, device, and network together identify a logical partition, while pivot identifies a physical partition.utc_date and utc_hour is the time at which the journal fragment was created. Learn more about physical partitions. ","version":"Next","tagName":"h2"},{"title":"Partition selectors​","type":1,"pageTitle":"Projections","url":"/pr-preview/pr-1594/concepts/advanced/projections/#partition-selectors","content":" When reading from a collection, Flow catalog entities like derivations, materializations, and tests can provide a partition selector, which identifies the subset of partitions that should be read from a source collection: # Partition selectors are included as part of a larger entity, # such as a derivation or materialization. partitions: # `include` selects partitioned fields and corresponding values that # must be matched in order for a partition to be processed. # All of the included fields must be matched. # Default: All partitions are included. type: object include: # Include partitions from North America. country: [US, CA] # AND where the device is a mobile phone. device: [iPhone, Android] # `exclude` selects partitioned fields and corresponding values which, # if matched, exclude the partition from being processed. # A match of any of the excluded fields will exclude the partition. # Default: No partitions are excluded. type: object exclude: # Skip sessions which were over a 3G network. network: ["3G"] Partition selectors are efficient as they allow Flow to altogether avoid reading documents that aren’t needed. ","version":"Next","tagName":"h3"},{"title":"Task shards","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/advanced/shards/","content":"","keywords":"","version":"Next"},{"title":"Shard splits​","type":1,"pageTitle":"Task shards","url":"/pr-preview/pr-1594/concepts/advanced/shards/#shard-splits","content":" When a task is first created, it is initialized with a single shard. Later and as required, shards may be split into two shards. This is done by the service operator on your behalf, depending on the size of your task. Shard splitting doesn't require downtime; your task will continue to run as normal on the old shard until the split occurs and then shift seamlessly to the new, split shards. This process can be repeated as needed until your required throughput is achieved. If you have questions about how shards are split for your tasks, contact your Estuary account representative. ","version":"Next","tagName":"h2"},{"title":"Transactions​","type":1,"pageTitle":"Task shards","url":"/pr-preview/pr-1594/concepts/advanced/shards/#transactions","content":" Shards process messages in dynamic transactions. Whenever a message is ready to be processed by the task (when new documents appear at the source endpoint or collection), a new transaction is initiated. The transaction will continue so long as further messages are available for processing. When no more messages are immediately available, the transaction closes. A new transaction is started whenever the next message is available. In general, shorter transaction durations decrease latency, while longer transaction durations increase efficiency. Flow automatically balances these two extremes to optimize each task, but it may be useful in some cases to control transaction duration. For example, materializations to large analytical warehouses may benefit from longer transactions, which can reduce cost by performing more data reduction before landing data in the warehouse. Some endpoint systems, like BigQuery, limit the number of table operations you can perform. Longer transaction durations ensure that you don't exceed these limits. You can set the minimum and maximum transaction duration in a task's shards configuration. ","version":"Next","tagName":"h2"},{"title":"Recovery logs​","type":1,"pageTitle":"Task shards","url":"/pr-preview/pr-1594/concepts/advanced/shards/#recovery-logs","content":" All task shards have associated state, which is managed in the shard's store. Capture tasks must track incremental checkpoints of their endpoint connectors.Derivation tasks manage a potentially very large index of registers, as well as read checkpoints of sourced collection journals.Materialization tasks track incremental checkpoints of their endpoint connectors, as well as read checkpoints of sourced collection journals. Shard stores userecovery logsto replicate updates and implement transaction semantics. Recovery logs are regular journals, but hold binary data and are not intended for direct use. However, they can hold your user data. Recovery logs of derivations hold your derivation register values. Recovery logs are stored in your cloud storage bucket, and must have a configured storage mapping. ","version":"Next","tagName":"h2"},{"title":"Catalog","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/catalogs/","content":"","keywords":"","version":"Next"},{"title":"Data Flows​","type":1,"pageTitle":"Catalog","url":"/pr-preview/pr-1594/concepts/catalogs/#data-flows","content":" You can mix and match catalog entities to create a variety of Data Flows. The simplest Data Flow has just three entities. graph LR; Capture-->Collection; Collection-->Materialization; It may also be more complex, combining multiple entities of each type. graph LR; capture/two-->collection/D; capture/one-->collection/C; capture/one-->collection/A; collection/A-->derivation/B; collection/D-->derivation/E; collection/C-->derivation/E; derivation/B-->derivation/E; collection/D-->materialization/one; derivation/E-->materialization/two; ","version":"Next","tagName":"h2"},{"title":"Flow specification files​","type":1,"pageTitle":"Catalog","url":"/pr-preview/pr-1594/concepts/catalogs/#flow-specification-files","content":" Catalog entities are defined and described in Flow specification files.These YAML files contain the configuration details that each entity requires. You work on specification files as drafts before you publish them to a catalog. There are two ways to create and work with specification files. ","version":"Next","tagName":"h2"},{"title":"In the Flow web app​","type":1,"pageTitle":"Catalog","url":"/pr-preview/pr-1594/concepts/catalogs/#in-the-flow-web-app","content":" You don't need to write or edit the specification files directly — the web app is designed to generate them for you. You do have the option to review and edit the generated specification as you create captures and materializations using the Catalog Editor. ","version":"Next","tagName":"h3"},{"title":"With flowctl​","type":1,"pageTitle":"Catalog","url":"/pr-preview/pr-1594/concepts/catalogs/#with-flowctl","content":" If you prefer a developer workflow, you can also work with specification files directly in your local environment using flowctl. You then publish them back to the catalog. A given Data Flow may be described by one specification file, or by many, so long as a top-level file imports all the others. The files use the extension *.flow.yaml or are simply named flow.yaml by convention. Using this extension activates Flow's VS Code integration and auto-complete. Flow integrates with VS Code for development environment support, like auto-complete, tooltips, and inline documentation. Depending on your Data Flow, you may also have TypeScript modules, JSON schemas, or test fixtures. ","version":"Next","tagName":"h3"},{"title":"Namespace​","type":1,"pageTitle":"Catalog","url":"/pr-preview/pr-1594/concepts/catalogs/#namespace","content":" All catalog entities (captures, materializations, and collections) are identified by a namesuch as acmeCo/teams/manufacturing/anvils. Names have directory-like prefixes and every name within Flow is globally unique. If you've ever used database schemas to organize your tables and authorize access, you can think of name prefixes as being akin to database schemas with arbitrary nesting. All catalog entities exist together in a single namespace. As a Flow customer, you're provisioned one or more high-level prefixes for your organization. Further division of the namespace into prefixes is up to you. Prefixes of the namespace, like acmeCo/teams/manufacturing/, are the foundation for Flow's authorization model. ","version":"Next","tagName":"h2"},{"title":"Concepts","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/","content":"","keywords":"","version":"Next"},{"title":"Working with Flow​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#working-with-flow","content":" There are two main environments in which you can work with Flow: the web application or your preferred local environment using the flowctl command-line tool. ","version":"Next","tagName":"h2"},{"title":"Web application​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#web-application","content":" The Flow web application is where you'll most likely create, monitor, and update your Data Flows. You can find it at dashboard.estuary.dev. The app is backed by secure, cloud-hosted infrastructure that Estuary manages. Take a tour of the web app. Create your first Data Flow with the web app. ","version":"Next","tagName":"h3"},{"title":"flowctl​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#flowctl","content":" flowctl is a command-line interface for working with Flow's public API. Using flowctl, developers can inspect, edit, test, and publish Data Flows — just as with the web application. For example, you can create a Data Flow with the web app, and then use flowctl to fetch it into files that you manage within a Git repo. Learn more about flowctl ","version":"Next","tagName":"h3"},{"title":"Essential concepts​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#essential-concepts","content":" In this section, you'll find the most important Flow terms and concepts. If you're new to Flow, start here. A complete end-to-end Data Flow between two systems has three components: Capture: Flow ingests data from an outside source.Collections: Flow maintains the captured data in cloud storage.Materialization: Flow pushes data to an outside destination. graph LR; Capture-->Collection; Collection-->Materialization; It may also include: Derivations: You apply a transformation to data in a collection, resulting in a new collection. All of these entities are described in the catalog. ","version":"Next","tagName":"h2"},{"title":"Catalog​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#catalog","content":" The catalog is the set of active entities that comprise all Data Flows: captures, materializations, derivations, collections, schemas, tests, and more. All catalog entities are defined in Flow specification files — either manually, by you, or generated by the Flow web app. You create the specifications as drafts, and publish them to add them to the catalog. You can mix and match catalog entities to create a variety of Data Flows. Learn more about the catalog ","version":"Next","tagName":"h3"},{"title":"Collections​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#collections","content":" Collections represent datasets within Flow. All captured documents are written to a collection, and all materialized documents are read from a collection. Collections are a real-time data lake. Like a traditional data lake, the documents that make up a collection are stored as plain JSON in your cloud storage bucket. Unlike a traditional data lake, updates to the collection are reflected downstream in the data flow within milliseconds. Documents in collections are stored indefinitely in your cloud storage bucket (or may be managed with your regular bucket lifecycle policies). This means that the full historical content of a collection is available to support future data operations and perform backfills without going back to the source. Each collection has a keyed schema against which incoming documents are validated. This ensures that data is always clean and organized. Learn more about collections ","version":"Next","tagName":"h3"},{"title":"Captures​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#captures","content":" A capture is a Flow task that ingests data from an external source into one or more Flow collections. Documents continuously move from the source into Flow; as new documents become available at the source, Flow validates their schema and adds them to their corresponding collection. Captures interface with source systems using connectors. Learn more about captures ","version":"Next","tagName":"h3"},{"title":"Materializations​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#materializations","content":" A materialization is a Flow task that pushes data from one or more collections to an external destination. Documents continuously moves from each Flow collection to the destination. Materializations are the conceptual inverse of captures. As new documents become available within bound collections, the materialization keeps the destination up to date within milliseconds, or as fast as that system allows. Materializations interface with destinations using connectors. Learn more about materializations ","version":"Next","tagName":"h3"},{"title":"Endpoints​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#endpoints","content":" Endpoints are the source systems from which Flow captures data and the destination systems to which Flow materializes data. All kinds of data systems can be endpoints, including databases, key/value stores, streaming pub/sub systems, SaaS products, and cloud storage locations. Flow connects to this wide variety of endpoints using connectors. ","version":"Next","tagName":"h3"},{"title":"Connectors​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#connectors","content":" Connectors are plugin components that allow Flow to interface with endpoint data systems. They power captures and materializations. Flow uses an open-source connector model. Many connectors are made by Estuary, and others are made by third parties. Because connectors are open-source and kept separate from Flow itself, new integrations can be added and updated quickly. This is important, as the landscape of data systems and platforms is constantly evolving. All currently supported connectors are ready to use in the Flow web application. They're also available as Docker images, each encapsulating the details of working with a particular source or destination system. Learn more about connectors ","version":"Next","tagName":"h3"},{"title":"Intermediate concepts​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#intermediate-concepts","content":" In this section, you'll find important concepts that are optional for basic usage. Read this to unlock more powerful workflows. ","version":"Next","tagName":"h2"},{"title":"Derivations​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#derivations","content":" A derivation is a collection that results from the transformation of one or more other collections, which is continuously updated in sync with its source collection(s). You can use derivations to map, reshape, and filter documents. They can also be used to tackle complex stateful streaming workflows, including joins and aggregations, without windowing and scaling limitations. Learn more about derivations ","version":"Next","tagName":"h3"},{"title":"Schemas​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#schemas","content":" All collections in Flow have an associatedJSON schemaagainst which documents are validated every time they're written or read. Schemas are critical to how Flow ensures the integrity of your data. Flow validates your documents to ensure that bad data doesn't make it into your collections — or worse, into downstream data products! JSON schema is a flexible standard for representing structure, invariants, and other constraints over your documents. Schemas can be very permissive, highly exacting, or somewhere in between. Flow pauses catalog tasks when documents don't match the collection schema, alerting you to the mismatch and allowing you to fix it before it creates a bigger problem. Learn more about schemas ","version":"Next","tagName":"h3"},{"title":"Reductions​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#reductions","content":" Every Flow collection schema includes a key. The key is used to identify collection documents and determine how they are grouped. When a collection is materialized into a database table, for example, its key becomes the SQL primary key of the materialized table. Flow also uses the key to reduce documents in collections, making storage and materializations more efficient. If multiple documents of a given key are added to a collection, by default, the most recent document supersedes all previous documents of that key. You can exert more control over your data by changing the default reduction strategy. By doing so, you can deeply merge documents, maintain running counts, and achieve other complex aggregation behaviors. Learn more about reductions ","version":"Next","tagName":"h3"},{"title":"Tests​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#tests","content":" Tests become an important part of your Data Flows when you add derivations and customized reduction behavior. You use tests to verify the end-to-end behavior of your collections and derivations. A test is a sequence of ingestion or verification steps. Ingestion steps ingest one or more document fixtures into a collection, and verification steps assert that the contents of another derived collection match a test expectation. Learn more about tests ","version":"Next","tagName":"h3"},{"title":"Tasks​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#tasks","content":" Captures, derivations, and materializations are collectively referred to as catalog tasks. They are the "active" components of a Data Flow, each running continuously and reacting to documents as they become available. Collections, by way of comparison, are inert. They reflect data at rest, and are acted upon by catalog tasks: A capture adds documents to a collection pulled from a source endpoint.A derivation updates a collection by applying transformations to other collections.A materialization reacts to changes of a collection to update a destination endpoint. ","version":"Next","tagName":"h3"},{"title":"Resources and bindings​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#resources-and-bindings","content":" A resource is an addressable collection of data within a source or destination system. The exact meaning of a resource is up to the endpoint and its connector. For example: Resources of a database endpoint might be its individual tables.Resources of a Kafka cluster might be its topics.Resources of a SaaS connector might be its various API feeds. When you create capture or materialization, it connects a collection to a resource through a binding. A given capture or materialization may have multiple bindings, which connect multiple collections to different resources. ","version":"Next","tagName":"h3"},{"title":"Storage mappings​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#storage-mappings","content":" Flow collections use cloud storage buckets for the durable storage of data. Storage mappings define how Flow maps your various collections into your storage buckets and prefixes. Learn more about storage mappings ","version":"Next","tagName":"h3"},{"title":"Advanced concepts​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#advanced-concepts","content":" This section discusses advanced Flow concepts. The information here unlocks a more technical understanding of how Flow works, and may be helpful in advanced use cases. ","version":"Next","tagName":"h2"},{"title":"Journals​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#journals","content":" Journals provide the low-level storage for Flow collections. Each logical and physical partition of a collection is backed by a journal. Task shards also use journals to provide for their durability and fault tolerance. Each shard has an associated recovery log, which is a journal into which internal checkpoint states are written. Learn more about journals ","version":"Next","tagName":"h3"},{"title":"Task shards​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#task-shards","content":" Task shards are the unit of execution for a catalog task. A single task can have many shards, which allow the task to scale across many machines to achieve more throughput and parallelism. Shards are created and managed by the Flow runtime. Each shard represents a slice of the overall work of the catalog task, including its processing status and associated internal checkpoints. Catalog tasks are created with a single shard, which can be repeatedly subdivided at any time — with no downtime — to increase the processing capacity of the task. Learn more about shards ","version":"Next","tagName":"h3"},{"title":"Projections​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#projections","content":" Flow leverages your JSON schemas to produce other types of schemas as needed, such as TypeScript types and SQL CREATE TABLE statements. In many cases these projections provide comprehensive end-to-end type safety of Data Flows and their TypeScript transformations, all statically verified at build time. Learn more about projections ","version":"Next","tagName":"h3"},{"title":"Captures","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/captures/","content":"","keywords":"","version":"Next"},{"title":"Connectors​","type":1,"pageTitle":"Captures","url":"/pr-preview/pr-1594/concepts/captures/#connectors","content":" Captures extract data from an endpoint using a connector. Estuary builds and maintains many real-time connectors for various technology systems, such as database change data capture (CDC) connectors. See the source connector reference documentation. ","version":"Next","tagName":"h2"},{"title":"Batch sources​","type":1,"pageTitle":"Captures","url":"/pr-preview/pr-1594/concepts/captures/#batch-sources","content":" Flow supports running both first and third party connectors to batch sources including Singer, Meltano and Airbyte as well as natively-written Estuary connectors. These connectors tend to focus on SaaS APIs, and do not offer real-time streaming integrations. Flow runs the connector at regular intervals to capture updated documents. Third-party source connectors are independently reviewed and sometimes updated for compatibility with Flow. Estuary's source connectors documentation includes all actively supported connectors. If you see a connector you'd like to prioritize for access in the Flow web app, contact us. ","version":"Next","tagName":"h3"},{"title":"Discovery​","type":1,"pageTitle":"Captures","url":"/pr-preview/pr-1594/concepts/captures/#discovery","content":" To help you configure new pull captures, Flow offers the guided discovery workflow in the Flow web application. To begin discovery, you tell Flow the connector you'd like to use and basic information about the endpoint. Flow automatically generates a capture configuration for you. It identifies one or moreresources — tables, data streams, or the equivalent — and generates bindings so that each will be mapped to a data collection in Flow. You may then modify the generated configuration as needed before publishing the capture. info Discovers can also be run when editing an existing capture. This is commonly done in order to add new bindings, or update the collection specs and schemas associated with existing bindings. ","version":"Next","tagName":"h2"},{"title":"Automatically update captures​","type":1,"pageTitle":"Captures","url":"/pr-preview/pr-1594/concepts/captures/#automatically-update-captures","content":" You can choose to run periodic discovers in the background by adding the autoDiscover property to the capture. Flow will periodically check for changes to the source and re-publish the capture to reflect those changes. There are several options for controlling the behavior of autoDiscover: The addNewBindings option determines whether to add newly discovered resources, such as database tables, to the capture as bindings. If set to false, autoCapture will only update the collection specs for existing bindings. The evolveIncompatibleCollections option determines how to respond when the discovered updates would cause a breaking change to the collection. If true, it will trigger an evolution of the incompatible collection(s) to prevent failures. In the Flow web app, you can set these properties when you create or edit a capture. The toggles in the web app correspond directly to the properties above: "Automatically keep schemas up to date" enables autoDiscover"Automatically add new collections" corresponds to addNewBindings"Breaking changes re-versions collections" corresponds to evolveIncompatibleCollections ","version":"Next","tagName":"h2"},{"title":"Specification​","type":1,"pageTitle":"Captures","url":"/pr-preview/pr-1594/concepts/captures/#specification","content":" Captures are defined in Flow specification files per the following format: # A set of captures to include in the catalog. # Optional, type: object captures: # The name of the capture. acmeCo/example/source-s3: # Automatically performs periodic discover operations, which updates the bindings # to reflect what's in the source, and also updates collection schemas. # To disable autoDiscover, either omit this property or set it to `null`. autoDiscover: # Also add any newly discovered bindings automatically addNewBindings: true # How to handle breaking changes to discovered collections. If true, then existing # materialization bindings will be re-created with new names, as necessary. Or if # collection keys have changed, then new Flow collections will be created. If false, # then incompatible changes will simply result in failed publications, and will # effectively be ignored. evolveIncompatibleCollections: true # Endpoint defines how to connect to the source of the capture. # Required, type: object endpoint: # This endpoint uses a connector provided as a Docker image. connector: # Docker image that implements the capture connector. image: ghcr.io/estuary/source-s3:dev # File that provides the connector's required configuration. # Configuration may also be presented inline. config: path/to/connector-config.yaml # Bindings define how collections are populated from the data source. # A capture may bind multiple resources to different collections. # Required, type: array bindings: - # The target collection to capture into. # This may be defined in a separate, imported specification file. # Required, type: string target: acmeCo/example/collection # The resource is additional configuration required by the endpoint # connector to identify and capture a specific endpoint resource. # The structure and meaning of this configuration is defined by # the specific connector. # Required, type: object resource: stream: a-bucket/and-prefix # syncMode should be set to incremental for all Estuary connectors syncMode: incremental - target: acmeCo/example/another-collection resource: stream: a-bucket/another-prefix syncMode: incremental # Interval of time between invocations of non-streaming connectors. # If a connector runs to completion and then exits, the capture task will # restart the connector after this interval of time has elapsed. # # Intervals are relative to the start of an invocation and not its completion. # For example, if the interval is five minutes, and an invocation of the # capture finishes after two minutes, then the next invocation will be started # after three additional minutes. # # Optional. Default: Five minutes. interval: 5m ","version":"Next","tagName":"h2"},{"title":"flowctl","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/flowctl/","content":"","keywords":"","version":"Next"},{"title":"Installation and setup​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#installation-and-setup","content":" flowctl binaries for MacOS and Linux are available. Fow Windows, install Windows Subsystem for Linux (WSL) to run Linux on Windows, or use a remote development environment. Copy and paste the appropriate script below into your terminal. This will download flowctl, make it executable, and add it to your PATH. For Linux: sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-x86_64-linux' && sudo chmod +x /usr/local/bin/flowctl For Mac: sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-multiarch-macos' && sudo chmod +x /usr/local/bin/flowctl Alternatively, Mac users can install with Homebrew: brew tap estuary/flowctl brew install flowctl You can also find the source files on GitHub here. To connect to your Flow account and start a session, use an authentication token from the web app. ","version":"Next","tagName":"h2"},{"title":"User guides​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#user-guides","content":" View guides for common flowctl workflows. ","version":"Next","tagName":"h2"},{"title":"flowctl subcommands​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#flowctl-subcommands","content":" flowctl includes several top-level subcommands representing different functional areas. Each of these include multiple nested subcommands. Important top-level flowctl subcommands are described below. auth allows you to authenticate your development session in your local development environment. It's also how you provision Flow roles and users. Learn more about authentication. catalog allows you to work with your organization's current active catalog entities. You can investigate the current Data Flows, pull specifications for local editing, test and publish specifications that you wrote or edited locally, and delete entities from the catalog. collections allows you to work with your Flow collections. You can read the data from the collection and output it to stdout, or list the journals or journal fragments that comprise the collection. Learn more about reading collections with flowctl. draft provides an alternative method for many of the actions you'd normally perform with catalog, but common workflows have more steps. You can access full documentation of all flowctl subcommands from the command line by passing the --help or -h flag, for example: flowctl --help lists top-level flowctl subcommands. flowctl catalog --help lists subcommands of catalog. ","version":"Next","tagName":"h2"},{"title":"Editing Data Flows with flowctl​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#editing-data-flows-with-flowctl","content":" flowctl allows you to work locally on the specification files that define your Data Flows. You'll often need to move these specifications back and forth between your local environment and the catalogof published entities. The basic steps of this workflow are listed below, along with a diagram of the subcommands you'd use to accomplish them. Keep in mind that there's no single, correct way to work with flowctl, but we recommend this method to get started. List all the active specifications in the catalog, which you can then pull into your local environment. You can filter the output by prefix or entity type. For example, flowctl catalog list --prefix acmeCo/sales/ --collections only lists collections under theacmeCo/sales/ prefix. Pull a group of active specifications directly, resulting in local source files. You can refine results by prefix or entity type as described above (1). Note that if there are already files in your working directory, flowctl must reconcile them with the newly pulled specification.Learn more about your options. Make edits locally. Test local specifications (2). Publish local specifications to the catalog (3). graph LR; d[Local environment]; c[Active catalog]; d-- 2: flowctl catalog test -->d; d-- 3: flowctl catalog publish -->c; c-- 1: flowctl catalog pull-specs -->d; View the step-by-step guide. ","version":"Next","tagName":"h2"},{"title":"Reconciling specifications in local drafts​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#reconciling-specifications-in-local-drafts","content":" When you pull specifications to your working directory directly using flowctl catalog pull-specs, there may be conflicts between the existing files in that directory and the specifications you pull. By default, flowctl catalog pull-specs will abort if it detects an existing file with the same name as a specification it is attempting to pull. You can change this behavior with the --existing flag: --existing=overwrite pulls the new versions of conflicting files in place of the old versions. --existing=keep keeps the old versions of conflicting files. --existing=merge-specs performs a simple merge of new and old versions of conflicting files. For example, if an existing flow.yaml file references collections a and b, and the new version of flow.yaml references collections a and c, the merged version will reference collections a, b, and c. ","version":"Next","tagName":"h3"},{"title":"Development directories​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#development-directories","content":" Flow specifications and other files are written to your working directory when you run flowctl draft develop or flowctl catalog pull-specs. They typically include: flow.yaml: The main specification file that imports all other Flow specification files created in a single operation. As part of local development, you may add new specifications that you create as imports. flow_generated/: Directory of generated files, including TypeScript classes and interfaces. See TypeScript code generation. <prefix-name>/: Directory of specifications that you pulled. Its name corresponds to your catalog prefix. Its contents will vary, but it may contain various YAML files and subdirectories. package.json and package-lock.json: Files used by npm to manage dependencies and your Data Flow's associated JavaScript project. You may customize package.json, but its dependencies stanza will be overwritten by thenpmDependenciesof your Flow specification source files, if any exist. When you run commands like flowctl catalog publish or flowctl draft author, you can use the --source-dir flag to push specifications from a directory other than your current working directory, for example, flowctl draft author --source-dir ../AcmeCoNew/marketing. ","version":"Next","tagName":"h2"},{"title":"TypeScript code generation​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#typescript-code-generation","content":" TypeScript files are used in the Flow catalog both as part of the automatic build process, and to define lambdas functions for derivations, which requires your input. As part of the Data Flow build process, Flow translates yourschemasinto equivalent TypeScript types on your behalf. These definitions live within flow_generated/ in your Data Flow's build directory , and are frequently over-written by invocations of flowctl. Files in this subdirectory are human-readable and stable. You may want to commit them as part of a GitOps-managed project, but this isn't required. Whenever you define a derivation that uses a lambda, you must define the lambda in an accompanying TypeScript module, and reference that module in the derivation's definition. To facilitate this, you can generate a stub of the module using flowctl generateand simply write the function bodies.Learn more about this workflow. If a TypeScript module exists, flowctl will never overwrite it, even if you update or expand your specifications such that the required interfaces have changed. ","version":"Next","tagName":"h3"},{"title":"Collections","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/collections/","content":"","keywords":"","version":"Next"},{"title":"Documents​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#documents","content":" Flow processes and stores data in terms of documents: JSON files that consist of multiple key-value pair objects. Collections are comprised of documents; Flow tasks (captures, materializations, and derivations) process data in terms of documents. A Flow document corresponds to different units of data in different types of endpoint systems. For example, it might map to a table row, a pub/sub message, or an API response. The structure of a given collection’s documents is determined by that collection’s schema and the way in which tasks handle documents is determined by the collection key. The size of a document depends on the complexity of the source data. Flow allows documents up to 16 MB in size, but it's rare for documents to approach this limit. An example document for a collection with two fields, name and count is shown below. { "_meta": { "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, "count": 5954, "message": "Hello #5954" } ","version":"Next","tagName":"h2"},{"title":"System Fields and Metadata​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#system-fields-and-metadata","content":" The _meta object is present in all Flow documents, and contains metadata added by Flow. Minimally, every document _meta always has a uuid, which is a globally unique id for each document. Some capture connectors may add additional _meta properties to tie each document to a specific record within the source system. Documents that were captured from cloud storage connectors, for example, will contain /_meta/file and /_meta/offset properties that tell you where the document came from within your cloud storage bucket. _meta/uuid​ The _meta/uuid field is a system-generated globally unique identifier for each document within Estuary Flow. flow_published_at​ The flow_published_at field is a system-generated timestamp within Estuary Flow, derived from the runtime environment. It captures the exact moment a document is published to a collection, offering a reliable proxy for when the document was last modified or inserted. Source: The flow_published_at field is generated by the runtime environment of Estuary Flow.Definition: This field represents the timestamp when a document is captured and subsequently published to a collection. Essentially, it is a projection of the _meta/uuid field, where the UUID contains an encoded timestamp component.Availability: The flow_published_at field is available in every collection, as it is a derived projection from the _meta/uuid field. For a given document identified by a unique key, the flow_published_at field can be used as a proxy for the last time the document was modified. This is particularly useful when performing incremental updates or transformations, such as in a data warehouse environment. When dealing with materializations that are not delta updates: A document in Estuary Flow is any JSON object emitted by a capture connector. The flow_published_at field provides the timestamp for when this JSON object was captured and inserted into the collection.If the collection is reduced with a strategy like lastWriteWins or merge on the capture side, flow_published_at becomes the timestamp for the last event that updated the document. ","version":"Next","tagName":"h3"},{"title":"Viewing collection documents​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#viewing-collection-documents","content":" In many cases, it's not necessary to view your collection data — you're able to materialize it directly to a destination in the correct shape using a connector. However, it can be helpful to view collection documents to confirm the source data was captured as expected, or verify a schema change. In the web application​ Sign into the Flow web application and click the Collections tab. The collections to which you have access are listed. Click the Details drop down to show a sample of collection documents as well as the collection specification. The collection documents are displayed by key. Click the desired key to preview it in its native JSON format. Using the flowctl CLI​ In your authenticated flowctl session, issue the command flowctl collections read --collection <full/collection-name> --uncommitted. For example, flowctl collections read --collection acmeCo/inventory/anvils --uncommitted. Options are available to read a subset of data from collections. For example, --since allows you to specify an approximate start time from which to read data, and--include-partition allows you to read only data from a specified logical partition. Use flowctl collections read --help to see documentation for all options. Beta While in beta, this command currently has the following limitations. They will be removed in a later release: The --uncommitted flag is required. This means that all collection documents are read, regardless of whether they were successfully committed or not. In the future, reads of committed documents will be the default. Only reads of a single partition are supported. If you need to read from a partitioned collection, use --include-partition or --exclude-partition to narrow down to a single partition. The --output flag is not usable for this command. Only JSON data can be read from collections. ","version":"Next","tagName":"h2"},{"title":"Specification​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#specification","content":" Collections are defined in Flow specification files per the following format: # A set of collections to include in the catalog. # Optional, type: object collections: # The unique name of the collection. acmeCo/products/anvils: # The schema of the collection, against which collection documents # are validated. This may be an inline definition or a relative URI # reference. # Required, type: string (relative URI form) or object (inline form) schema: anvils.schema.yaml # The key of the collection, specified as JSON pointers of one or more # locations within collection documents. If multiple fields are given, # they act as a composite key, equivalent to a SQL table PRIMARY KEY # with multiple table columns. # Required, type: array key: [/product/id] # Projections and logical partitions for this collection. # Optional, type: object projections: # Derivation that builds this collection from others through transformations. # See the "Derivations" concept page to learn more. # Optional, type: object derive: ~ ","version":"Next","tagName":"h2"},{"title":"Schemas​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#schemas","content":" Every Flow collection must declare a schema, and will never accept documents that do not validate against the schema. This helps ensure the quality of your data products and the reliability of your derivations and materializations. Schema specifications are flexible: yours could be exactingly strict, extremely permissive, or somewhere in between. For many source types, Flow is able to generate a basic schema during discovery. Schemas may either be declared inline, or provided as a reference to a file. References can also include JSON pointers as a URL fragment to name a specific schema of a larger schema document: InlineFile referenceReference with pointer collections: acmeCo/collection: schema: type: object required: [id] properties: id: string key: [/id] Learn more about schemas ","version":"Next","tagName":"h2"},{"title":"Keys​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#keys","content":" Every Flow collection must declare a key which is used to group its documents. Keys are specified as an array of JSON pointers to document locations. For example: flow.yamlschema.yaml collections: acmeCo/users: schema: schema.yaml key: [/userId] Suppose the following JSON documents are captured into acmeCo/users: {"userId": 1, "name": "Will"} {"userId": 1, "name": "William"} {"userId": 1, "name": "Will"} As its key is [/userId], a materialization of the collection into a database table will reduce to a single row: userId | name 1 | Will If its key were instead [/name], there would be two rows in the table: userId | name 1 | Will 1 | William ","version":"Next","tagName":"h2"},{"title":"Schema restrictions​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#schema-restrictions","content":" Keyed document locations may be of a limited set of allowed types: booleanintegerstring Excluded types are: arraynullobjectFractional number Keyed fields also must always exist in collection documents. Flow performs static inference of the collection schema to verify the existence and types of all keyed document locations, and will report an error if the location could not exist, or could exist with the wrong type. Flow itself doesn't mind if a keyed location has multiple types, so long as they're each of the allowed types: an integer or string for example. Some materialization connectors, however, may impose further type restrictions as required by the endpoint. For example, SQL databases do not support multiple types for a primary key. ","version":"Next","tagName":"h3"},{"title":"Composite Keys​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#composite-keys","content":" A collection may have multiple locations which collectively form a composite key. This can include locations within nested objects and arrays: flow.yamlschema.yaml collections: acmeCo/compound-key: schema: schema.yaml key: [/foo/a, /foo/b, /foo/c/0, /foo/c/1] ","version":"Next","tagName":"h3"},{"title":"Key behaviors​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#key-behaviors","content":" A collection key instructs Flow how documents of a collection are to be reduced, such as while being materialized to an endpoint. Flow also performs opportunistic local reductions over windows of documents to improve its performance and reduce the volumes of data at each processing stage. An important subtlety is that the underlying storage of a collection will potentially retain many documents of a given key. In the acmeCo/users example, each of the "Will" or "William" variants is likely represented in the collection's storage — so long as they didn't arrive so closely together that they were locally combined by Flow. If desired, a derivation could re-key the collection on [/userId, /name] to materialize the various /names seen for a /userId. This property makes keys less lossy than they might otherwise appear, and it is generally good practice to chose a key that reflects how you wish to query a collection, rather than an exhaustive key that's certain to be unique for every document. ","version":"Next","tagName":"h3"},{"title":"Empty keys​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#empty-keys","content":" When a specification is automatically generated, there may not be an unambiguously correct key for all collections. This could occur, for example, when a SQL database doesn't have a primary key defined for some table. In cases like this, the generated specification will contain an empty collection key. However, every collection must have a non-empty key, so you'll need to manually edit the generated specification and specify keys for those collections before publishing to the catalog. ","version":"Next","tagName":"h3"},{"title":"Projections​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#projections","content":" Projections are named locations within a collection document that may be used for logical partitioning or directly exposed to databases into which collections are materialized. Many projections are automatically inferred from the collection schema. The projections stanza can be used to provide additional projections, and to declare logical partitions: collections: acmeCo/products/anvils: schema: anvils.schema.yaml key: [/product/id] # Projections and logical partitions for this collection. # Keys name the unique projection field, and values are its JSON Pointer # location within the document and configure logical partitioning. # Optional, type: object projections: # Short form: define a field "product_id" with document pointer /product/id. product_id: "/product/id" # Long form: define a field "metal" with document pointer /metal_type # which is a logical partition of the collection. metal: location: "/metal_type" partition: true Learn more about projections. ","version":"Next","tagName":"h2"},{"title":"Storage​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#storage","content":" Collections are real-time data lakes. Historical documents of the collection are stored as an organized layout of regular JSON files in your cloud storage bucket. Reads of that history are served by directly reading files from your bucket. Your storage mappingsdetermine how Flow collections are mapped into your cloud storage buckets. Unlike a traditional data lake, however, it's very efficient to read collection documents as they are written. Derivations and materializations that source from a collection are notified of its new documents within milliseconds of their being published. Learn more about journals, which provide storage for collections ","version":"Next","tagName":"h2"},{"title":"Connectors","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/connectors/","content":"","keywords":"","version":"Next"},{"title":"Using connectors​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#using-connectors","content":" Most — if not all — of your Data Flows will use at least one connector. You configure connectors within capture or materialization specifications. When you publish one of these entities, you're also deploying all the connectors it uses. You can interact with connectors using either the Flow web application or the flowctl CLI. ","version":"Next","tagName":"h2"},{"title":"Flow web application​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#flow-web-application","content":" The Flow web application is designed to assist you with connector configuration and deployment. It's a completely no-code experience, but it's compatible with Flow's command line tools, discussed below. When you add a capture or materialization in the Flow web app, choose the desired data system from the Connector drop-down menu. The required fields for the connector appear below the drop-down. When you fill in the fields and click Discover Endpoint, Flow automatically "discovers" the data streams or tables — known as resources — associated with the endpoint system. From there, you can refine the configuration, save, and publish the resulting Flow specification. ","version":"Next","tagName":"h3"},{"title":"GitOps and flowctl​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#gitops-and-flowctl","content":" Connectors are packaged as Open Container (Docker) images, and can be tagged, and pulled usingDocker Hub,GitHub Container registry, or any other public image registry provider. To interface with a connector, the Flow runtime needs to know: The specific image to use, through an image name such as ghcr.io/estuary/source-postgres:dev. Notice that the image name also conveys the specific image registry and version tag to use. Endpoint configuration such as a database address and account, with meaning that is specific to the connector. Resource configuration such as a specific database table to capture, which is also specific to the connector. To integrate a connector into your dataflow, you must define all three components within your Flow specification. The web application is intended to help you generate the Flow specification. From there, you can use flowctl to refine it in your local environment. It's also possible to manually write your Flow specification files, but this isn't the recommended workflow. materializations: acmeCo/postgres-views: endpoint: connector: # 1: Provide the image that implements your endpoint connector. # The `dev` tag uses the most recent version (the web app chooses this tag automatically) image: ghcr.io/estuary/materialize-postgres:dev # 2: Provide endpoint configuration that the connector requires. config: address: localhost:5432 password: password database: postgres user: postgres bindings: - source: acmeCo/products/anvils # 3: Provide resource configuration for the binding between the Flow # collection and the endpoint resource. This connector interfaces # with a SQL database and its resources are database tables. Here, # we provide a table to create and materialize which is bound to the # `acmeCo/products/anvils` source collection. resource: table: anvil_products # Multiple resources can be configured through a single connector. # Bind additional collections to tables as part of this connector instance: - source: acmeCo/products/TNT resource: table: tnt_products - source: acmeCo/customers resource: table: customers Configuration​ Because connectors interface with external systems, each requires a slightly different endpoint configuration. Here you specify information such as a database hostname or account credentials — whatever that specific connector needs to function. If you're working directly with Flow specification files, you have the option of including the configuration inline or storing it in separate files: InlineReferenced file my.flow.yaml materializations: acmeCo/postgres-views: endpoint: connector: image: ghcr.io/estuary/materialize-postgres:dev config: address: localhost:5432 password: password database: postgres user: postgres bindings: [] Storing configuration in separate files serves two important purposes: Re-use of configuration across multiple captures or materializationsThe ability to protect sensitive credentials ","version":"Next","tagName":"h3"},{"title":"Protecting secrets​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#protecting-secrets","content":" Most endpoint systems require credentials of some kind, such as a username or password. Sensitive credentials should be protected while not in use. The only time a credential needs to be directly accessed is when Flow initiates the connector. Flow integrates with Mozilla’s sops tool, which can encrypt and protect credentials. It stores a sops-protected configuration in its encrypted form, and decrypts it only when invoking a connector on the your behalf. sops, short for “Secrets Operations,” is a tool that encrypts the values of a JSON or YAML document against a key management system (KMS) such as Google Cloud Platform KMS, Azure Key Vault, or Hashicorp Vault. Encryption or decryption of a credential with sops is an active process: it requires that the user (or the Flow runtime identity) have a current authorization to the required KMS, and creates a request trace which can be logged and audited. It's also possible to revoke access to the KMS, which immediately and permanently removes access to the protected credential. When you use the Flow web application, Flow automatically adds sops protection to sensitive fields on your behalf. You can also implement sops manually if you are writing a Flow specification locally. The examples below provide a useful reference. Example: Protect a configuration​ Suppose you're given a connector configuration: config.yaml host: my.hostname password: "this is sensitive!" user: my-user You can protect it using a Google KMS key that you own: # Login to Google Cloud and initialize application default credentials used by `sops`. $ gcloud auth application-default login # Use `sops` to re-write the configuration document in place, protecting its values. $ sops --encrypt --in-place --gcp-kms projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name config.yaml sops re-writes the file, wrapping each value in an encrypted envelope and adding a sops metadata section: config.yaml host: ENC[AES256_GCM,data:K/clly65pThTg2U=,iv:1bNmY8wjtjHFBcXLR1KFcsNMGVXRl5LGTdREUZIgcEU=,tag:5GKcguVPihXXDIM7HHuNnA==,type:str] password: ENC[AES256_GCM,data:IDDY+fl0/gAcsH+6tjRdww+G,iv:Ye8st7zJ9wsMRMs6BoAyWlaJeNc9qeNjkkjo6BPp/tE=,tag:EPS9Unkdg4eAFICGujlTfQ==,type:str] user: ENC[AES256_GCM,data:w+F7MMwQhw==,iv:amHhNCJWAJnJaGujZgjhzVzUZAeSchEpUpBau7RVeCg=,tag:62HguhnnSDqJdKdwYnj7mQ==,type:str] sops: # Some items omitted for brevity: gcp_kms: - resource_id: projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name created_at: "2022-01-05T15:49:45Z" enc: CiQAW8BC2GDYWrJTp3ikVGkTI2XaZc6F4p/d/PCBlczCz8BZiUISSQCnySJKIptagFkIl01uiBQp056c lastmodified: "2022-01-05T15:49:45Z" version: 3.7.1 You then use this config.yaml within your Flow specification. The Flow runtime knows that this document is protected by sopswill continue to store it in its protected form, and will attempt a decryption only when invoking a connector on your behalf. If you need to make further changes to your configuration, edit it using sops config.yaml. It's not required to provide the KMS key to use again, as sops finds it within its metadata section. important When deploying catalogs onto the managed Flow runtime, you must grant access to decrypt your GCP KMS key to the Flow runtime service agent, which is: flow-258@helpful-kingdom-273219.iam.gserviceaccount.com Example: Protect portions of a configuration​ Endpoint configurations are typically a mix of sensitive and non-sensitive values. It can be cumbersome when sops protects an entire configuration document as you lose visibility into non-sensitive values, which you might prefer to store as cleartext for ease of use. You can use the encrypted-suffix feature of sops to selectively protect credentials: config.yaml host: my.hostname password_sops: "this is sensitive!" user: my-user Notice that password in this configuration has an added _sops suffix. Next, encrypt only values which have that suffix: $ sops --encrypt --in-place --encrypted-suffix "_sops" --gcp-kms projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name config.yaml sops re-writes the file, wrapping only values having a "_sops" suffix and adding its sops metadata section: config.yaml host: my.hostname password_sops: ENC[AES256_GCM,data:dlfidMrHfDxN//nWQTPCsjoG,iv:DHQ5dXhyOOSKI6ZIzcUM67R6DD/2MSE4LENRgOt6GPY=,tag:FNs2pTlzYlagvz7vP/YcIQ==,type:str] user: my-user sops: # Some items omitted for brevity: encrypted_suffix: _sops gcp_kms: - resource_id: projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name created_at: "2022-01-05T16:06:36Z" enc: CiQAW8BC2Au779CGdMFUjWPhNleCTAj9rL949sBvPQ6eyAC3EdESSQCnySJKD3eWX8XrtrgHqx327 lastmodified: "2022-01-05T16:06:37Z" version: 3.7.1 You then use this config.yaml within your Flow specification. Flow looks for and understands the encrypted_suffix, and will remove this suffix from configuration keys before passing them to the connector. ","version":"Next","tagName":"h3"},{"title":"Connecting to endpoints on secure networks​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#connecting-to-endpoints-on-secure-networks","content":" In some cases, your source or destination endpoint may be within a secure network, and you may not be able to allow direct access to its port due to your organization's security policy. tip If permitted by your organization, a quicker solution is to allowlist the Estuary IP addresses For help completing this task on different cloud hosting platforms, see the documentation for the connector you're using. SHH tunneling, or port forwarding, provides a means for Flow to access the port indirectly through an SSH server. SSH tunneling is available in Estuary connectors for endpoints that use a network address for connection. To set up and configure the SSH server, see the guide. Then, add the appropriate properties when you define the capture or materialization in the Flow web app, or add the networkTunnel stanza directly to the YAML, as shown below. Sample​ source-postgres-ssh-tunnel.flow.yaml captures: acmeCo/postgres-capture-ssh: endpoint: connector: image: ghcr.io/estuary/source-postgres:dev config: address: 127.0.0.1:5432 database: flow user: flow_user password: secret networkTunnel: sshForwarding: # Location of the remote SSH server that supports tunneling. # Formatted as ssh://user@hostname[:port]. sshEndpoint: ssh://sshUser@198.21.98.1:22 # Private key to connect to the SSH server, formatted as multiline plaintext. # Use the YAML literal block style with the indentation indicator. # See https://yaml-multiline.info/ for details. privateKey: |2 -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCJO7G6R+kv2MMS8Suw21sk2twHg8Vog0fjimEWJEwyAfFM/Toi EJ6r5RTaSvN++/+MPWUll7sUdOOBZr6ErLKLHEt7uXxusAzOjMxFKZpEARMcjwHY v/tN1A2OYU0qay1DOwknEE0i+/Bvf8lMS7VDjHmwRaBtRed/+iAQHf128QIDAQAB AoGAGoOUBP+byAjDN8esv1DCPU6jsDf/Tf//RbEYrOR6bDb/3fYW4zn+zgtGih5t CR268+dwwWCdXohu5DNrn8qV/Awk7hWp18mlcNyO0skT84zvippe+juQMK4hDQNi ywp8mDvKQwpOuzw6wNEitcGDuACx5U/1JEGGmuIRGx2ST5kCQQDsstfWDcYqbdhr 5KemOPpu80OtBYzlgpN0iVP/6XW1e5FCRp2ofQKZYXVwu5txKIakjYRruUiiZTza QeXRPbp3AkEAlGx6wMe1l9UtAAlkgCFYbuxM+eRD4Gg5qLYFpKNsoINXTnlfDry5 +1NkuyiQDjzOSPiLZ4Abpf+a+myjOuNL1wJBAOwkdM6aCVT1J9BkW5mrCLY+PgtV GT80KTY/d6091fBMKhxL5SheJ4SsRYVFtguL2eA7S5xJSpyxkadRzR0Wj3sCQAvA bxO2fE1SRqbbF4cBnOPjd9DNXwZ0miQejWHUwrQO0inXeExNaxhYKQCcnJNUAy1J 6JfAT/AbxeSQF3iBKK8CQAt5r/LLEM1/8ekGOvBh8MAQpWBW771QzHUN84SiUd/q xR9mfItngPwYJ9d/pTO7u9ZUPHEoat8Ave4waB08DsI= -----END RSA PRIVATE KEY----- bindings: [] ","version":"Next","tagName":"h3"},{"title":"Why an open connector architecture?​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#why-an-open-connector-architecture","content":" Historically, data platforms have directly implemented integrations to external systems with which they interact. Today, there are simply so many systems and APIs that companies use, that it’s not feasible for a company to provide all possible integrations. Users are forced to wait indefinitely while the platform works through their prioritized integration list. An open connector architecture removes Estuary — or any company — as a bottleneck in the development of integrations. Estuary contributes open-source connectors to the ecosystem, and in turn is able to leverage connectors implemented by others. Users are empowered to write their own connectors for esoteric systems not already covered by the ecosystem. Furthermore, implementing a Docker-based community specification brings other important qualities to Estuary connectors: Cross-platform interoperability between Flow, Airbyte, and any other platform that supports the protocolThe abilities to write connectors in any language and run them on any machineBuilt-in solutions for version management (through image tags) and distributionThe ability to integrate connectors from different sources at will, without the centralized control of a single company, thanks to container image registries info In order to be reflected in the Flow web app and used on the managed Flow platform, connectors must be reviewed and added by the Estuary team. Have a connector you'd like to add?Contact us. ","version":"Next","tagName":"h2"},{"title":"Available connectors​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#available-connectors","content":" Learn about available connectors in the reference section ","version":"Next","tagName":"h2"},{"title":"Imports","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/import/","content":"","keywords":"","version":"Next"},{"title":"Specification​","type":1,"pageTitle":"Imports","url":"/pr-preview/pr-1594/concepts/import/#specification","content":" The import section is structured as a list of partial or absolute URIs, which Flow always evaluates relative to the base directory of the current source file. For example, these are possible imports within a collection: # Suppose we're in file "/path/dir/flow.yaml" import: - sub/directory/flow.yaml # Resolves to "file:///path/dir/sub/directory/flow.yaml". - ../sibling/directory/flow.yaml # Resolves to "file:///path/sibling/directory/flow.yaml". - https://example/path/flow.yaml # Uses the absolute url. The import rule is flexible; a collection doesn’t have to do anything special to be imported by another, and flowctl can even directly build remote sources: # Test an example from a GitHub repository. $ flowctl draft test --source https://raw.githubusercontent.com/estuary/flow-template/main/word-counts.flow.yaml ","version":"Next","tagName":"h2"},{"title":"Fetch behavior​","type":1,"pageTitle":"Imports","url":"/pr-preview/pr-1594/concepts/import/#fetch-behavior","content":" Flow resolves, fetches, and validates all imports in your local environment during the catalog build process, and then includes their fetched contents within the published catalog on the Estuary servers. The resulting catalog entities are thus self-contained snapshots of all resourcesas they were at the time of publication. This means it's both safe and recommended to directly reference an authoritative source of a resource, such as a third-party JSON schema, as well as resources within your private network. It will be fetched and verified locally at build time, and thereafter that fetched version will be used for execution, regardless of whether the authority URL itself later changes or errors. ","version":"Next","tagName":"h2"},{"title":"Import types​","type":1,"pageTitle":"Imports","url":"/pr-preview/pr-1594/concepts/import/#import-types","content":" Almost always, the import stanza is used to import other Flow specification files. This is the default when given a string path: import: - path/to/source/catalog.flow.yaml A long-form variant also accepts a content type of the imported resource: import: - url: path/to/source/catalog.flow.yaml contentType: CATALOG Other permitted content types include JSON_SCHEMA, but these are not typically used and are needed only for advanced use cases. ","version":"Next","tagName":"h2"},{"title":"JSON Schema $ref​","type":1,"pageTitle":"Imports","url":"/pr-preview/pr-1594/concepts/import/#json-schema-ref","content":" Certain catalog entities, like collections, commonly reference JSON schemas. It's not necessary to explicitly add these to the import section; they are automatically resolved and treated as an import. You can think of this as an analog to the JSON Schema $ref keyword, which is used to reference a schema that may be contained in another file. The one exception is schemas that use the $id keyword at their root to define an alternative canonical URL. In this case, the schema must be referenced through its canonical URL, and then explicitly added to the import section with JSON_SCHEMA content type. ","version":"Next","tagName":"h2"},{"title":"Importing derivation resources​","type":1,"pageTitle":"Imports","url":"/pr-preview/pr-1594/concepts/import/#importing-derivation-resources","content":" In many cases, derivations in your catalog will need to import resources. Usually, these are TypeScript modules that define the lambda functions of a transformation, and, in certain cases, the NPM dependencies of that TypeScript module. These imports are specified in the derivation specification, not in the import section of the specification file. For more information, see Derivation specification and creating TypeScript modules. ","version":"Next","tagName":"h2"},{"title":"Import paths​","type":1,"pageTitle":"Imports","url":"/pr-preview/pr-1594/concepts/import/#import-paths","content":" If a catalog source file foo.flow.yaml references a collection in bar.flow.yaml, for example as a target of a capture, there must be an import path where either foo.flow.yamlimports bar.flow.yaml or vice versa. When you omit the import section, Flow chooses an import path for you. When you explicitly include the import section, you have more control over the import path. Import paths can be direct: graph LR; foo.flow.yaml-->bar.flow.yaml; Or they can be indirect: graph LR; bar.flow.yaml-->other.flow.yaml; other.flow.yaml-->foo.flow.yaml; The sources must still have an import path even if referenced from a common parent. The following would not work: graph LR; parent.flow.yaml-->foo.flow.yaml; parent.flow.yaml-->bar.flow.yaml; These rules make your catalog sources more self-contained and less brittle to refactoring and reorganization. Consider what might otherwise happen if foo.flow.yamlwere imported in another project without bar.flow.yaml. ","version":"Next","tagName":"h2"},{"title":"Derivations","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/derivations/","content":"","keywords":"","version":"Next"},{"title":"Specification​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#specification","content":" A derivation is specified as a regular collectionwith an additional derive stanza: collections: # The unique name of the derivation. acmeCo/my/derivation: schema: my-schema.yaml key: [/key] # Presence of a `derive` stanza makes this collection a derivation. # Type: object derive: # Connector which this derivation uses. # One of `typescript` or `sqlite`. using: # Derivation is using the SQLite connector. # Optional, type: object sqlite: # SQL migrations to apply as inline SQL or file references. # If a referenced file does not exist # a stub can be generated using `flowctl generate`. # Optional, type: array of strings migrations: - CREATE TABLE foobar (id INTEGER PRIMARY KEY NOT NULL); - ../path/to/other/migration.sql # Derivation is using the TypeScript connector. # Optional, type: object typescript: # TypeScript module implementing this derivation, # as inline TypeScript or a relative file reference. # If a referenced file does not exist # a stub can be generated using `flowctl generate`. module: acmeModule.ts # The array of transformations that build this derived collection. transform: # Unique name of the transformation, containing only Unicode # Letters, Numbers, `-`, or `_` (no spaces or other punctuation). - name: myTransformName # Source collection read by this transformation. # Required, type: object or string. source: # Name of the collection to be read. # Required. name: acmeCo/my/source/collection # Partition selector of the source collection. # Optional. Default is to read all partitions. partitions: {} # Lower bound date-time for documents which should be processed. # Source collection documents published before this date-time are filtered. # `notBefore` is *only* a filter. Updating its value will not cause Flow # to re-process documents that have already been read. # Optional. Default is to process all documents. notBefore: 2023-01-23T01:00:00Z # Upper bound date-time for documents which should be processed. # Source collection documents published after this date-time are filtered. # Like `notBefore`, `notAfter` is *only* a filter. Updating its value will # not cause Flow to re-process documents that have already been read. # Optional. Default is to process all documents. notAfter: 2023-01-23T02:00:00Z # Lambda of this transform, with a meaning which depends # on the derivation connector: # * SQLite derivation lambdas are blocks of SQL code. # * TypeScript does not use `lambda`, as implementations # are provided by the derivation's TypeScript module. # Lambdas can be either inline or a relative file reference. lambda: SELECT $foo, $bar; # Delay applied to sourced documents before being processed # by this transformation. # Default: No delay, pattern: ^\\\\d+(s|m|h)$ readDelay: "48h" # Key by which source documents are shuffled to task shards. # Optional, type: object. # If not set, the source collection key is used. shuffle: # Composite key of JSON pointers which are extracted from # source documents. key: [/shuffle/key/one, /shuffle/key/two] # Priority applied to documents of this transformation # relative to other transformations of the derivation. # Default: 0, integer >= 0 priority: 0 ","version":"Next","tagName":"h2"},{"title":"Supported Languages​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#supported-languages","content":" As with captures and materializations, Flow derivations are built around a plug-able connectors architecture. Derivation connectors encapsulate the details of how documents are transformed, and integrate with Flow's runtime through a common protocol. At present, Flow supports transformations in SQL using SQLite, and TypeScript. ","version":"Next","tagName":"h2"},{"title":"SQLite​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#sqlite","content":" Flow's SQLite connector lets you write plain SQL which is evaluated with each source collection document: derive: using: sqlite: {} transforms: - name: fromOrders source: acmeCo/orders shuffle: any lambda: SELECT $customer, DATE($timestamp) AS date, PRINTF('$%.2f', $item_price + $sales_tax) AS cost; Given an input document: { "customer": "Wile E. Coyote", "timestamp": "2023-04-17T16:45:31Z", "item_price": 11.5, "sales_tax": 0.8 } The derivation will produce an output document like: { "customer": "Wile E. Coyote", "date": "2023-04-17", "cost": "$12.30" } SQLite derivations run within the context of a persistent, managed SQLite database. Most anything you can do within SQLite, you can do within a SQLite derivation. ","version":"Next","tagName":"h2"},{"title":"SQL Lambdas​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#sql-lambdas","content":" Lambdas are blocks of one or more SQL statements. They can be defined inline within a Flow specification, or they can be provided as a relative file reference to a file of SQL. Your SQL lambda code can include any number of statements, and your statements are evaluated in the context of your applied database migrations. Use regular INSERT, UPDATE, and DELETE statements in your SQL blocks to manipulate your internal tables as required. Any rows which are returned by SQL statements, such as SELECT and also variations like INSERT ... RETURNING, are mapped into documents that are published into your derived collection. Published documents must conform to your collection schema or your derivation task will stop due to the schema violation. tip The SQLite connector wraps your lambdas in an enclosing transaction. Do not include BEGIN or COMMIT statements in your lambdas. You may use a SAVEPOINT or ROLLBACK TO. ","version":"Next","tagName":"h3"},{"title":"Document Mapping​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#document-mapping","content":" In most cases, each named output column of your query becomes a top-level property of its corresponding document. When you directly select a $parameter its corresponding field name is used. For example, a projection with field name my-field would be queried asSELECT $my_field; and map into a document like {"my-field":"value"}. A named column such as SELECT $x * 100 AS foo;, maps to a property using the provided name: {"foo": 200}. Your selected columns may included nested JSON documents, such as SELECT 'hello' AS greeting, JSON_ARRAY(1, 'two', 3) AS items;. The connector looks for SQLite TEXT values which can be parsed into JSON arrays or objects and embeds them into the mapped document:{"greeting": "hello", "items": [1, "two", 3]}. If parsing fails, the raw string is used instead. As a special case if your query selects a single column having a name that begins with json or JSON, as is common when working with SQLite's JSON functions, then that column will become the output document. For example SELECT JSON_OBJECT('a', 1, 'b', JSON('true')); maps into document {"a": 1, "b": true}. This can be used to build documents with dynamic top-level properties. ","version":"Next","tagName":"h3"},{"title":"Parameters​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#parameters","content":" Your SQL lambda will execute with every source document of the collection it transforms. To access locations within the document, you utilize $parameter placeholders in your SQL code, which bind to projections of the source document. You can use both your defined projections as well as projections which are statically inferred from your source collection's schema. You can access projected fields that are top-level as well as those which are nested within a source document. Consider the following schematized document: {"top-level": true, "object": {"foo": 42}, "arr": ["bar"]} In your SQL code, you can use parameters like $top_level, $object$foo, or $arr$0. If you're unsure of what parameter to use for a given field, try typing something approximate and Flow will suggest the appropriate $parameter. ","version":"Next","tagName":"h3"},{"title":"Migrations​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#migrations","content":" The SQLite connector offers a managed, persistent SQLite database that can accommodate any number of tables, indices, views, triggers, and other schema, as defined by your database migrations. To add a migration, simply append it to the migrations array, either as a block of inline SQL statements or as a relative path to a file of SQL statements: derive: using: sqlite: migrations: - CREATE TABLE foo (thing INTEGER NOT NULL); CREATE INDEX idx_foo_thing foo (thing); - ../path/to/another/migration.sql - ALTER TABLE foo ADD COLUMN other_thing TEXT NOT NULL; - https://example.com/yet/another/migration.sql caution You cannot change an existing migration once it has been published. Instead, add a new migration which applies your desired schema. The tables and other schema you create through database migrations are the internal state of your derivation. They don't directly cause any documents to be published into your derived collection, but changes made to tables in one SQL lambda execution are immediately visible to others. Changes are also durable and transactional: a Flow derivation transaction commits new documents to the derived collection in lockstep with committing changes made to your task tables. Flow is responsible for the persistence and replication of your SQLite database, and the SQLite connector tracks and will apply your migrations as needed. ","version":"Next","tagName":"h3"},{"title":"Performance​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#performance","content":" Your observed performance will of course depend on the specifics of your use case, including the size of your task states and the complexity of your source documents and transformations. Generally speaking, SQLite is very performant and Flow's SQLite connector strives to drive it as efficiently as possible. Real-world use cases are observed to process many tens of thousands of documents per second on a single core. Flow can also scale your task without downtime by creating point-in-time clones of the database that subdivide the overall workload and storage of the task. Once created, these subdivisions process in parallel across multiple physical machines to enhance performance. ","version":"Next","tagName":"h3"},{"title":"TypeScript​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#typescript","content":" Flow's TypeScript derivation connector transforms your source documents by executing methods of a TypeScript class which you implement. TypeScript derivations are executed using Denoand let you take advantage of the broad ecosystem of available third-party JavaScript and TypeScript libraries, as well as native code compiled to WASM. TypeScript derivations are strongly typed: Flow maps the JSON schemas of your source and output collections into corresponding TypeScript types, which are type-checked as you develop and test your derivation. This helps catch a wide variety of potential bugs and avoid accidental violations of your collection data contracts. ","version":"Next","tagName":"h2"},{"title":"Modules​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#modules","content":" The bulk of a TypeScript derivation lives in its associated module, which is a TypeScript source file that exports the class that implements your derivation. Each derivation also has an accompanying, generated interfaces module. Interface modules are managed by Flow and are purely advisory: they're generated to improve your development experience, but any changes you make are ignored. The flowctl generate --source path/to/my/derivation.flow.yaml CLI command will generate interface modules under paths likeflow_generated/typescript/acmeCo/my-derivation.ts, under the top-level directory under --source having a flow.yaml or flow.json file. It will also generate a deno.json file in your top-level directory, which is designed to work with developer tooling likeVSCode's Deno extension. See the Current Account Balances tutorial for a concrete example of modules. ","version":"Next","tagName":"h3"},{"title":"State​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#state","content":" The abstract IDerivation class generated within the interfaces module includes additional, experimental methods which can be used for persisting and recovering internal state of the connector. Consult the generated implementation and feel free to reach out to support if you'd like more information on building stateful TypeScript derivations. ","version":"Next","tagName":"h3"},{"title":"Transformations​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#transformations","content":" A transformation binds a source collection to a derivation, causing its documents to be read and processed by the derivation connector. Read source documents are first shuffled on a shuffle keyto co-locate the processing of documents that have equal shuffle keys. The transformation then processes documents by invoking lambdas: user-defined functions that accept documents as arguments, return documents in response, and potentially update internal task state. A derivation may have many transformations, and each transformation has a long-lived and stable name. Each transformation independently reads documents from its source collection and tracks its own read progress. More than one transformation can read from the same source collection, and transformations may also source from their own derivation, enabling cyclic data-flows and graph algorithms. Transformations may be added to or removed from a derivation at any time. This makes it possible to, for example, add a new collection into an existing multi-way join, or gracefully migrate to a new source collection without incurring downtime. However, renaming a running transformation is not possible. If attempted, the old transformation is dropped and a new transformation under the new name is created, which begins reading its source collection all over again. graph LR; d[Derivation]; t[Transformation]; s[Internal State]; l[Lambda]; c[Sourced Collection]; o[Derived Collection]; d-- has many -->t; d-- has one -->s; d-- has one -->o; c-- reads from -->t; t-- invokes -->l; l-- updates -->s; s-- queries -->l; l-- publishes to -->o; ","version":"Next","tagName":"h2"},{"title":"Sources​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#sources","content":" The source of a transformation is a collection. As documents are published into the source collection, they are continuously read and processed by the transformation. A partition selector may be provided to process only a subset of the source collection's logical partitions. Selectors are efficient: only partitions that match the selector are read, and Flow can cheaply skip over partitions that don't. Derivations re-validate their source documents against the source collection's schema as they are read. This is because collection schemas may evolve over time, and could have inadvertently become incompatible with historical documents of the source collection. Upon a schema error, the derivation will pause and give you an opportunity to correct the problem. ","version":"Next","tagName":"h3"},{"title":"Shuffles​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#shuffles","content":" As each source document is read, it's shuffled — or equivalently, mapped — on an extracted key. If you're familiar with data shuffles in tools like MapReduce, Apache Spark, or Flink, the concept is very similar. Flow catalog tasks scale out into multiple shards, each running in parallel on different physical machines, where each shard processes a subset of source documents. Shuffles let Flow identify the shard that should process a particular source document, in order to co-locate that processing with other documents it may need to know about. For example, transforms of theApproving Transfers exampleshuffle on either /sender or /recipient in order to process documents that debit or credit accounts on the specific shard that is uniquely responsible for maintaining the balance of a given account. graph LR; subgraph s1 [Source Partitions] p1>acmeBank/transfers/part-1]; p2>acmeBank/transfers/part-2]; end subgraph s2 [Derivation Task Shards] t1([derivation/shard-1]); t2([derivation/shard-2]); end p1-- sender: alice -->t1; p1-- recipient: bob -->t2; p2-- recipient: alice -->t1; p2-- sender: bob -->t2; Flow offers three modes for configuring document shuffles: key, any, and lambda. shuffle: key​ Shuffle keys are defined as an array of JSON pointers to locations that should be extracted from your source documents. This array forms the composite key over which your documents are shuffled: transforms: - name: fromOrders source: acmeCo/orders shuffle: key: [/item/product_id, /customer_id] # Flow guarantees that the same shard will process the user's lambda # for all instances of a specific (product ID, customer ID) tuple. lambda: ... If a derivation has more than one transformation, the shuffle keys of all transformations must align with one another in terms of the extracted key types (string vs integer) as well as the number of components in a composite key. For example, one transformation couldn't shuffle transfers on [/id]while another shuffles on [/sender], because sender is a string andid an integer. Similarly mixing a shuffle of [/sender] alongside [/sender, /recipient]is prohibited because the keys have different numbers of components. shuffle: any​ If your lambda doesn't rely on any task state then it may not matter which task shard processes a given source document. In these instances you can use shuffle: any, which allows source documents to be processed by any available task shard. This is common for transformation lambdas which perform basic filtering or mapping of source documents and which don't require any joined task state. transforms: - name: fromOrders source: acmeCo/orders shuffle: any # The user's lambda is a pure function and can be evaluated by any available shard. lambda: SELECT $customer_id, $item_price WHERE $item_price > 100; shuffle: lambda​ Warning Computed shuffles are in active development and are not yet functional. Your source documents may not always contain an appropriate value to shuffle upon. For instance, you might want to shuffle on product ID and order date, but your source documents contain only an order timestamp field. You can use shuffle: lambda to define a function that maps your source document into the appropriate shuffle key: transforms: - name: fromOrders source: acmeCo/orders shuffle: lambda: SELECT $product_id, DATE($order_timestamp); # Flow guarantees that the same shard will process the user's lambda # for all instances of a specific (product ID, date) tuple. lambda: ... Your shuffle lambda must return exactly one row, and its columns and types must align with the other shuffles of your derivation transformations. Flow must know the types of your composite shuffle key. In most cases it will infer these types from the shuffle: key of another transformation. If you have no shuffle: key transformations, Flow will ask that you explicitly tell it your shuffle types: derive: using: sqlite: {} shuffleKeyTypes: [integer, string] transforms: - name: fromOrders source: acmeCo/orders shuffle: lambda: SELECT $product_id, DATE($order_timestamp); lambda: ... ","version":"Next","tagName":"h3"},{"title":"Lambdas​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#lambdas","content":" Lambdas are user-defined functions that are invoked by transformations. They accept documents as arguments and return transformed documents in response. Lambdas can update internal task state, publish documents into the derived collection, or both. Lambdas are "serverless": Flow manages the execution and scaling of your transformation lambdas on your behalf. ","version":"Next","tagName":"h3"},{"title":"Processing order​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#processing-order","content":" Transformations may simultaneously read from many source collections, or even read from the same source collection multiple times. Roughly speaking, the derivation will globally process transformations and their source documents in the time-based order in which the source documents were originally written to their source collections. This means that a derivation started a month ago and a new copy of the derivation started today, will process documents in the same order and arrive at the same result. Derivations are repeatable. More precisely, processing order is stable for each individual shuffle key, though different shuffle keys may process in different orders if more than one task shard is used. Processing order can be attenuated through a read delayor differentiated read priority. ","version":"Next","tagName":"h3"},{"title":"Read delay​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#read-delay","content":" A transformation can define a read delay, which will hold back the processing of its source documents until the time delay condition is met. For example, a read delay of 15 minutes would mean that a source document cannot be processed until it was published at least 15 minutes ago. If the derivation is working through a historical backlog of source documents, than a delayed transformation will respect its ordering delay relative to the publishing times of other historical documents also being read. Event-driven workflows are a great fit for reacting to events as they occur, but aren’t terribly good at taking action when something hasn’t happened: A user adds a product to their cart, but then doesn’t complete a purchase.A temperature sensor stops producing its expected, periodic measurements. A common pattern for tackling these workflows in Flow is to read a source collection without a delay and update an internal state. Then, read a collection with a read delay and determine whether the desired action has happened or not. For example, source from a collection of sensor readings and index the last timestamp of each sensor. Then, source the same collection again with a read delay: if the register timestamp isn't more recent than the delayed source reading, the sensor failed to produce a measurement. Flow read delays are very efficient and scale better than managing very large numbers of fine-grain timers. See Grouped Windows of Transfers for an example using a read delayLearn more from the Citi Bike "idle bikes" example ","version":"Next","tagName":"h3"},{"title":"Read priority​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#read-priority","content":" Sometimes it's necessary for all documents of a source collection to be processed by a transformation before any documents of some other source collection are processed, regardless of their relative publishing time. For example, a collection may have corrections that should be applied before the historical data of another collection is re-processed. Transformation priorities allow you to express the relative processing priority of a derivation's various transformations. When priorities are not equal, all available source documents of a higher-priority transformation are processed before any source documents of a lower-priority transformation. ","version":"Next","tagName":"h3"},{"title":"Internal State​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#internal-state","content":" Derivation tasks often require an internal state, perhaps to hold a partial aggregation or join result. Internal state is not a direct part of the output of a derivation. Instead, transformation lambdas query and update internal state as they process source documents and return derived documents. For SQLite derivations, the entire SQLite database is the internal state of the task. TypeScript derivations can use in-memory states with a recovery and checkpoint mechanism. Estuary intends to offer an additional mechanisms for automatic internal state snapshot and recovery in the future. The exact nature of internal task states vary, but under the hood they're backed by a replicated embedded RocksDB instance which is co-located with the task shard execution contexts that Flow manages. As contexts are assigned and re-assigned, their state databases travel with them. If a task shard needs to be scaled out, Flow is able to perform an online split, which cheaply clones its state database into two new databases — and paired shards — which are re-assigned to other machines. ","version":"Next","tagName":"h2"},{"title":"Where to accumulate?​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#where-to-accumulate","content":" Derivation collection schemas may havereduction annotations, and lambdas can be combined with reductions in interesting ways. You may be familiar with map and reduce functions built into languages likePython,JavaScript, and many others or have used tools like MapReduce or Spark. In functional terms, lambdas you write within Flow are "mappers," and reductions are always done by the Flow runtime using your schema annotations. This means that, when you implement a derivation, you get to choose where accumulation will happen: Your lambdas can update and query aggregates stored in internal task state.Approving Transfers is an example that maintains account balances in a SQLite table.Or, your lambdas can compute changes of an aggregate, which are then reduced by Flow using reduction annotations.Current Account Balances is an example that combines a lambda with a reduce annotation. These two approaches can produce equivalent results, but they do so in very different ways. ","version":"Next","tagName":"h2"},{"title":"Accumulate in Internal Task State​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#accumulate-in-internal-task-state","content":" You can accumulate using the internal state of your derivation: for instance, by using an internal table within your SQLite derivation. You then write lambdas which update that state, or query it to publish derived documents. For example, consider a collection that’s summing a value: Time\tState\tLambdas\tDerived DocumentT0\t0\tUPDATE val = val + 5; SELECT val;\t5 T1\t5\tUPDATE val = val - 1; SELECT val;\t4 T2\t4\tUPDATE val = val + 2; SELECT val;\t6 T3\t6 Using a derivation's internal state is a great solution if you expect to materialize the derived collection into a non-transactional store. That's because its documents are complete statements of the current answer, and can be correctly applied to systems that support only at-least-once semantics. They’re also well-suited for materializations into endpoints that aren't stateful, such as Pub/Sub systems or Webhooks. ","version":"Next","tagName":"h3"},{"title":"Accumulate in a Database​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#accumulate-in-a-database","content":" To accumulate in your materialization endpoint, such as a database, you define a derivation with a reducible schema and implement lambdas which publish the changes to a current answer. The Flow runtime then uses your reduction annotations to combine the documents published into your derived collection. Later, when the collection is materialized, your reduction annotations are applied again to reduce each collection document into a final, fully-reduced value for each collection key that's kept up to date in the materialized table. A key insight is that the database is the only stateful system in this scenario. The derivation itself is stateless, with lambdas that are pure functions, which is typically extremely performant. Returning to our summing example: Time\tDB\tLambdas\tDerived DocumentT0\t0\tSELECT 5;\t5 T1\t5\tSELECT -1;\t-1 T2\t4\tSELECT 2;\t2 T3\t6 This works especially well when materializing into a transactional database. Flow couples its processing transactions with corresponding database transactions, ensuring end-to-end “exactly once” semantics. When materializing into a non-transactional store, Flow is only able to provide weaker “at least once” semantics; it’s possible that a document may be combined into a database value more than once. Whether that’s a concern depends a bit on the task at hand. Some reductions like merge can be applied repeatedly without changing the result, while in other use cases approximations are acceptable. For the summing example above, "at-least-once" semantics could give an incorrect result. Learn more in the derivation pattern examples of Flow's repository ","version":"Next","tagName":"h3"},{"title":"Storage mappings","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/storage-mappings/","content":"","keywords":"","version":"Next"},{"title":"Recovery logs​","type":1,"pageTitle":"Storage mappings","url":"/pr-preview/pr-1594/concepts/storage-mappings/#recovery-logs","content":" In addition to collection data, Flow uses your storage mapping to temporarily store recovery logs. Flow tasks — captures, derivations, and materializations — use recovery logs to durably store their processing context as a backup. Recovery logs are an opaque binary log, but may contain user data. The recovery logs of a task are always prefixed by recovery/, so a task named acmeCo/produce-TNT would have a recovery log called recovery/acmeCo/roduce-TNT Flow prunes data from recovery logs once it is no longer required. warning Deleting data from recovery logs while it is still in use can cause Flow processing tasks to fail permanently. ","version":"Next","tagName":"h2"},{"title":"Materializations","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/materialization/","content":"","keywords":"","version":"Next"},{"title":"Discovery​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#discovery","content":" Materializations use real-time connectors to connect to many endpoint types. When you use a materialization connector in the Flow web app, flow helps you configure it through the discovery workflow. To begin discovery, you tell Flow the connector you'd like to use, basic information about the endpoint, and the collection(s) you'd like to materialize there. Flow maps the collection(s) to one or more resources — tables, data streams, or the equivalent — through one or more bindings. You may then modify the generated configuration as needed before publishing the materialization. ","version":"Next","tagName":"h2"},{"title":"Specification​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#specification","content":" Materializations are defined in Flow specification files per the following format: # A set of materializations to include in the catalog. # Optional, type: object materializations: # The name of the materialization. acmeCo/example/database-views: # Endpoint defines how to connect to the destination of the materialization. # Required, type: object endpoint: # This endpoint uses a connector provided as a Docker image. connector: # Docker image that implements the materialization connector. image: ghcr.io/estuary/materialize-postgres:dev # File that provides the connector's required configuration. # Configuration may also be presented inline. config: path/to/connector-config.yaml # Bindings define how one or more collections map to materialized endpoint resources. # A single materialization may include many collections and endpoint resources, # each defined as a separate binding. # Required, type: object bindings: - # Source collection read by this binding. # Required, type: object or string source: # Name of the collection to be read. # Required. name: acmeCo/example/collection # Lower bound date-time for documents which should be processed. # Source collection documents published before this date-time are filtered. # `notBefore` is *only* a filter. Updating its value will not cause Flow # to re-process documents that have already been read. # Optional. Default is to process all documents. notBefore: 2023-01-23T01:00:00Z # Upper bound date-time for documents which should be processed. # Source collection documents published after this date-time are filtered. # Like `notBefore`, `notAfter` is *only* a filter. Updating its value will # not cause Flow to re-process documents that have already been read. # Optional. Default is to process all documents. notAfter: 2023-01-23T02:00:00Z # The resource is additional configuration required by the endpoint # connector to identify and materialize a specific endpoint resource. # The structure and meaning of this configuration is defined by # the specific connector. # Required, type: object resource: # The materialize-postgres connector expects a `table` key # which names a table to materialize into. table: example_table # Priority applied to documents processed by this binding. # When all bindings are of equal priority, documents are processed # in order of their associated publishing time. # # However, when one binding has a higher priority than others, # then *all* ready documents are processed through the binding # before *any* documents of other bindings are processed. # # Optional. Default: 0, integer >= 0 priority: 0 # A sourceCapture allows bindings to be managed automatically based on the # bindings of the given capture. As new bindings are added to the capture, # they will automatically be added to the materialization. This property # is optional. sourceCapture: acmeCo/example/a-capture ","version":"Next","tagName":"h2"},{"title":"How continuous materialization works​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#how-continuous-materialization-works","content":" Flow materializations are continuous materialized views. They maintain a representation of the collection within the endpoint system that is updated in near real-time. It's indexed on thecollection key. As the materialization runs, it ensures that all collection documents and their accumulated reductions are reflected in this managed endpoint resource. When you first publish a materialization, Flow back-fills the endpoint resource with the historical documents of the collection. Once caught up, Flow applies new collection documents using incremental and low-latency updates. As collection documents arrive, Flow: Reads previously materialized documents from the endpoint for the relevant keysReduces new documents into these read documentsWrites updated documents back into the endpoint resource, indexed by their keys For example, consider a collection and its materialization: collections: acmeCo/colors: key: [/color] schema: type: object required: [color, total] reduce: {strategy: merge} properties: color: {enum: [red, blue, purple]} total: type: integer reduce: {strategy: sum} materializations: acmeCo/example/database-views: endpoint: ... bindings: - source: acmeCo/colors resource: { table: colors } Suppose documents are periodically added to the collection: {"color": "red", "total": 1} {"color": "blue", "total": 2} {"color": "blue", "total": 3} Its materialization into a database table will have a single row for each unique color. As documents arrive in the collection, the row total is updated within the materialized table so that it reflects the overall count: Flow does not keep separate internal copies of collection or reduction states, as some other systems do. The endpoint resource is the one and only place where state "lives" within a materialization. This makes materializations very efficient and scalable to operate. They are able to maintain very large tables stored in highly scaled storage systems like OLAP data warehouses. ","version":"Next","tagName":"h2"},{"title":"Projected fields​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#projected-fields","content":" Many endpoint systems are document-oriented and can directly work with collections of JSON documents. Others are table-oriented and require an up-front declaration of columns and types to be most useful, such as a SQL CREATE TABLE definition. Flow uses collection projections to relate locations within a hierarchical JSON document to equivalent named fields. A materialization can in turn select a subset of available projected fields where, for example, each field becomes a column in a SQL table created by the connector. It would be tedious to explicitly list projections for every materialization, though you certainly can if desired. Instead, Flow and the materialization connector negotiate a recommended field selection on your behalf, which can be fine-tuned. For example, a SQL database connector will typically require that fields comprising the primary key be included, and will recommend that scalar values be included, but will by default exclude document locations that don't have native SQL representations, such as locations which can have multiple JSON types or are arrays or maps. materializations: acmeCo/example/database-views: endpoint: ... bindings: - source: acmeCo/example/collection resource: { table: example_table } # Select (or exclude) projections of the collection for materialization as fields. # If not provided, the recommend fields of the endpoint connector are used. # Optional, type: object fields: # Whether to include fields that are recommended by the endpoint connector. # If false, then fields can still be added using `include`. # Required, type: boolean recommended: true # Fields to exclude. This is useful for deselecting a subset of recommended fields. # Default: [], type: array exclude: [myField, otherField] # Fields to include. This can supplement recommended fields, or can # designate explicit fields to use if recommended fields are disabled. # # Values of this map are used to customize connector behavior on a per-field basis. # They are passed directly to the connector and are not interpreted by Flow. # Consult your connector's documentation for details of what customizations are available. # This is an advanced feature and is not commonly used. # # default: {}, type: object include: {goodField: {}, greatField: {}} ","version":"Next","tagName":"h2"},{"title":"Partition selectors​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#partition-selectors","content":" Partition selectors let you materialize only a subset of a collection that haslogical partitions. For example, you might have a large collection that is logically partitioned on each of your customers: collections: acmeCo/anvil/orders: key: [/id] schema: orders.schema.yaml projections: customer: location: /order/customer partition: true A large customer asks if you can provide an up-to-date accounting of their orders. This can be accomplished with a partition selector: materializations: acmeCo/example/database-views: endpoint: ... bindings: # The source can be specified as an object, which allows setting a partition selector. - source: name: acmeCo/anvil/orders # Process partitions where "Coyote" is the customer. partitions: include: customer: [Coyote] resource: { table: coyote_orders } Learn more about partition selectors. ","version":"Next","tagName":"h2"},{"title":"Destination-specific performance​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#destination-specific-performance","content":" Flow processes updates in transactions, as quickly as the destination endpoint can handle them. This might be milliseconds in the case of a fast key/value store, or many minutes in the case of an OLAP warehouse. If the endpoint is also transactional, Flow integrates its internal transactions with those of the endpoint for integrated end-to-end “exactly once” semantics. The materialization is sensitive to back pressure from the endpoint. As a database gets busy, Flow adaptively batches and combines documents to consolidate updates: In a given transaction, Flow reduces all incoming documents on the collection key. Multiple documents combine and result in a single endpoint read and write during the transaction.As a target database becomes busier or slower, transactions become larger. Flow does more reduction work within each transaction, and each endpoint read or write accounts for an increasing volume of collection documents. This allows you to safely materialize a collection with a high rate of changes into a small database, so long as the cardinality of the materialization is of reasonable size. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#delta-updates","content":" As described above, Flow's standard materialization mechanism involves querying the target system for data state before reducing new documents directly into it. For these standard updates to work, the endpoint must be a stateful system, like a relational database. However, other systems — like Webhooks and Pub/Sub — may also be endpoints. None of these typically provide a state representation that Flow can query. They are write-only in nature, so Flow cannot use their endpoint state to help it fully reduce collection documents on their keys. Even some stateful systems are incompatible with Flow's standard updates due to their unique design and architecture. For all of these endpoints, Flow offers a delta-updates mode. When using delta updates, Flow does not attempt to maintain full reductions of each unique collection key. Instead, Flow locally reduces documents within each transaction (this is often called a "combine"), and then materializes onedelta document per key to the endpoint. In other words, when delta updates are used, Flow sends information about data changes by key, and further reduction is left up to the endpoint system. Some systems may reduce documents similar to Flow; others use a different mechanism; still others may not perform reductions at all. A given endpoint may support standard updates, delta updates, or both. This depends on the materialization connector. Expect that a connector will use standard updates only unless otherwise noted in its documentation. ","version":"Next","tagName":"h2"},{"title":"Using sourceCapture to synchronize capture and materialization bindings​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#using-sourcecapture-to-synchronize-capture-and-materialization-bindings","content":" In some cases, you just want a destination system to always reflects the source system as closely as possible, even as the source system changes over time. ThesourceCapture property of a materialization allows you to do exactly that. If you set a sourceCapture on your materialization, then the bindings of the materialization will be automatically kept in sync with the bindings of the capture. As bindings are added to the capture, they will be automatically added to the materialization. This works regardless of whether the bindings were added to the capture manually or automatically. Bindings that are removed from the capture are not removed from the materialization. ","version":"Next","tagName":"h2"},{"title":"Tests","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/tests/","content":"","keywords":"","version":"Next"},{"title":"Ingest​","type":1,"pageTitle":"Tests","url":"/pr-preview/pr-1594/concepts/tests/#ingest","content":" ingest steps add documents to a named collection. All documents must validate against the collection'sschema, or a catalog build error will be reported. All documents from a single ingest step are added in one transaction. This means that multiple documents with a common key will be combined priorto their being appended to the collection. Suppose acmeCo/people had key [/id]: tests: acmeCo/tests/greetings: - ingest: description: Zeldas are combined to one added document. collection: acmeCo/people documents: - { userId: 1, name: "Zelda One" } - { userId: 1, name: "Zelda Two" } - verify: description: Only one Zelda is greeted. collection: acmeCo/greetings documents: - { userId: 1, greeting: "Hello Zelda Two" } ","version":"Next","tagName":"h2"},{"title":"Verify​","type":1,"pageTitle":"Tests","url":"/pr-preview/pr-1594/concepts/tests/#verify","content":" verify steps assert that the current contents of a collection match the provided document fixtures. Verified documents are fully reduced, with one document for each unique key, ordered under the key's natural order. You can verify the contents of both derivations and captured collections. Documents given in verify steps do not need to be comprehensive. It is not an error if the actual document has additional locations not present in the document to verify, so long as all matched document locations are equal. Verified documents also do not need to validate against the collection's schema. They do, however, need to include all fields that are part of the collection's key. tests: acmeCo/tests/greetings: - ingest: collection: acmeCo/people documents: - { userId: 1, name: "Zelda" } - { userId: 2, name: "Link" } - ingest: collection: acmeCo/people documents: - { userId: 1, name: "Zelda Again" } - { userId: 3, name: "Pikachu" } - verify: collection: acmeCo/greetings documents: # greetings are keyed on /userId, and the second greeting is kept. - { userId: 1, greeting: "Hello Zelda Again" } # `greeting` is "Hello Link", but is not asserted here. - { userId: 2 } - { userId: 3, greeting: "Hello Pikachu" } ","version":"Next","tagName":"h2"},{"title":"Partition selectors​","type":1,"pageTitle":"Tests","url":"/pr-preview/pr-1594/concepts/tests/#partition-selectors","content":" Verify steps may include a partition selector to verify only documents of a specific partition: tests: acmeCo/tests/greetings: - verify: collection: acmeCo/greetings description: Verify only documents which greet Nintendo characters. documents: - { userId: 1, greeting: "Hello Zelda" } - { userId: 3, greeting: "Hello Pikachu" } partitions: include: platform: [Nintendo] Learn more about partition selectors. ","version":"Next","tagName":"h3"},{"title":"Tips​","type":1,"pageTitle":"Tests","url":"/pr-preview/pr-1594/concepts/tests/#tips","content":" The following tips can aid in testing large or complex derivations. ","version":"Next","tagName":"h2"},{"title":"Testing reductions​","type":1,"pageTitle":"Tests","url":"/pr-preview/pr-1594/concepts/tests/#testing-reductions","content":" Reduction annotations are expressive and powerful, and their use should thus be tested thoroughly. An easy way to test reduction annotations on captured collections is to write a two-step test that ingests multiple documents with the same key and then verifies the result. For example, the following test might be used to verify the behavior of a simple sum reduction: tests: acmeCo/tests/sum-reductions: - ingest: description: Ingest documents to be summed. collection: acmeCo/collection documents: - {id: 1, value: 5} - {id: 1, value: 4} - {id: 1, value: -3} - verify: description: Verify value was correctly summed. collection: acmeCo/collection documents: - {id: 1, value: 6} ","version":"Next","tagName":"h3"},{"title":"Reusing common fixtures​","type":1,"pageTitle":"Tests","url":"/pr-preview/pr-1594/concepts/tests/#reusing-common-fixtures","content":" When you write a lot of tests, it can be tedious to repeat documents that are used multiple times. YAML supports anchors and references, which you can implement to re-use common documents throughout your tests. One nice pattern is to define anchors for common ingest steps in the first test, which can be re-used by subsequent tests. For example: tests: acmeCo/tests/one: - ingest: &mySetup collection: acmeCo/collection documents: - {id: 1, ...} - {id: 2, ...} ... - verify: ... acmeCo/tests/two: - ingest: *mySetup - verify: ... This allows all the subsequent tests to re-use the documents from the first ingest step without having to duplicate them. ","version":"Next","tagName":"h3"},{"title":"Web application","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/web-app/","content":"","keywords":"","version":"Next"},{"title":"When to use the web app​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#when-to-use-the-web-app","content":" The web app and flowctl are designed to work together as a complete platform. You can use either, or both, to work on your Data Flows, depending on your preference. With the Flow web app, you can perform most common workflows, including: Creating end-to-end Data Flows: capturing data from source systems and materializing it to destinations.Creating, viewing, and editing individual captures and materializations.Monitor the amount of data being processed by the system.Viewing data collections.Viewing users and permissions.Granting permissions to other users.Authenticating with the flowctl CLI.Manage billing details. Some advanced workflows, like transforming data with derivations, aren't fully available in the web app. Even if you prefer the command line or plan to perform a task that's only available through flowctl, we recommend you begin your work in the web app; it provides a quicker and easier path to create captures and materializations. You can then switch to flowctl to continue working. ","version":"Next","tagName":"h2"},{"title":"Signing in​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#signing-in","content":" You use a Google, Microsoft, or GitHub account to sign into Flow. If you've never used Flow before, you'll be prompted to register before being issued a trial account. If you want to use Flow for production workflows or collaborate with team members, you'll need an organizational account.Contact Estuary to create a new organizational account or join an existing organization. ","version":"Next","tagName":"h2"},{"title":"Navigating the web app​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#navigating-the-web-app","content":" When you log into the web app, you land on the Welcome page. There are four additional pages visible as tabs in the side navigation: Sources (captures), Collections, Destinations (materializations), and Admin. The order of the tabs mirrors the order of a basic Data Flow: graph LR; Capture-->Collection; Collection-->Materialization; While you may choose to use the tabs in this sequence, it's not necessary. All Flow entities exist individually, outside of the context of complete Data Flow. You can use the different pages in the web app to monitor and manage your items in a number of other ways, as described below. ","version":"Next","tagName":"h2"},{"title":"Captures page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#captures-page","content":" The Captures page shows you a table of existing Flow captures to which you have access. The New Capture button is also visible. You use the table to monitor your captures. 1: Select all or deselect all. 2: Enable, Disable, and Delete buttons. These actions will be applied to the selected table rows. Choose Disable to temporarily pause the flow of data, Enable to resume, and Delete to permanently remove the capture(s). 3: Materialize button. When you click this button, you're directed to the Create Materializations page. All the collections of the selected capture(s) will be added to the materialization. 4: Filter captures. Type a catalog prefix, unique capture name, or connector name to return captures that match your query. Capture names follow the pattern prefix/unique-identifier/connector-name, with prefix supporting multiple layers of nesting. You can search for any part of this full capture name. You can also use the * wildcard. For example, if you have a capture called acmeCo/logistics/anvil-locations/source-postgres, you can find it by filtering for acmeCo*source-postgres. 5: Status indicator. Shows the status of the primary task shard that backs this capture. Primary (Green): Data is actively flowing through the capture.Pending (Yellow): The capture is attempting to re-connect. Often, you'll see this after you re-enable the capture as Flow backfills historical data.Failed (Red): The capture has failed with an unrecoverable error.Disabled (Hollow circle): The capture is disabled.Unknown (Black when app is in light mode; white when app is in dark mode): The web app is unable to determine shard status. Usually, this is due to a temporary connection error. 6: Capture name. The full name is shown, including all prefixes. It is also a link to the details page of the capture. 7: Capture type. The icon shows the type of source system data is captured from. 8: Capture statistics. The Data Written column shows the total amount of data, in bytes and in documents, that the capture has written to its associated collections within a configurable time interval. Click the time interval in the header to select from Today, Yesterday, This Week, Last Week, This Month, or Last Month. Note that the time intervals are in UTC. 9: Associated collections. The Writes to column shows all the collections to which the capture writes data. For captures with a large number of collections, there is a chip stating how many collections are hidden. Clicking on this will all you to hover over this column and scroll to view the full list. These are also links to the details page of the collection. 10: Publish time. Hover over this value to see the exact UTC time the capture was last published. 11: Options. Click to open the menu to Edit Specification. ","version":"Next","tagName":"h2"},{"title":"Editing captures and collections​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#editing-captures-and-collections","content":" When you click Edit specification for a capture, you're taken to the Edit Capture page. This page is similar to the Create Capture page as it was filled out just before the capture was published. For detailed steps to edit a capture, see the guide. ","version":"Next","tagName":"h3"},{"title":"Creating a capture​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#creating-a-capture","content":" When you click Create Capture, you're taken to the Create Capture page. In the first view, all available capture connectors are displayed. Select the tile of the system from which you want to capture data to show the full capture form. The form details are specific to the connector you chose. For detailed steps to create a capture, see the guide. After you successfully publish a capture, you're given the option to materialize the collections you just captured. You can proceed to the materialization, or opt to exit to a different page of the web app. ","version":"Next","tagName":"h3"},{"title":"Collections page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#collections-page","content":" The Collections page shows a read-only table of collections to which you have access. The table has nearly all of the same features as the Captures table, with several important distinctions that are called out in the image below. You can use the table to view each collection's specification and see a sample of its data. This can help you verify that collection data was captured as expected and that you'll be able to materialize it how you want, and troubleshoot if necessary. 1: Select all or deselect all. 2: Enable, Disable, and Delete buttons. These actions will be applied to the selected table rows. Choose Disable to temporarily pause the flow of data, Enable to resume, and Delete to permanently remove the collection(s). 3: Filter collections by name. Type a catalog prefix, unique collection name to return collections that match your query. 4: Status indicator. If the collection does not contain a derivation, the indicator should always show green, and hover text will say "Collection." In the event that the server cannot be reached, the indicator will show "Unknown" status (black in light mode and white in dark mode). If the collection contains a derivation, the status of the derivation's primary task shard will be indicated: Primary (Green): Data is actively flowing through the derivation.Pending (Yellow): The derivation is attempting to re-connect.Failed (Red): The derivation has failed with an unrecoverable error.Disabled (Hollow circle): The derivation is disabled.Unknown (Black when app is in light mode; white when app is in dark mode): The web app is unable to determine shard status. Usually, this is due to a temporary connection error. 5: Collection name. The full name is shown, including all prefixes. It is also a link to the details page of the collection. 6: Collection statistics. The Data Written column shows the total amount of data, in bytes and in documents, that has been written to each collection from its associated capture or derivation within a configurable time interval. Click the time interval in the header to select from Today, Yesterday, This Week, Last Week, This Month, or Last Month. Note that the time intervals are in UTC. 7: Publish time. Hover over this value to see the exact UTC time the collection was last published. ","version":"Next","tagName":"h2"},{"title":"Materializations page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#materializations-page","content":" The Materializations page shows you a table of existing Flow materializations to which you have access. The New Materialization button is also visible. You use the table to monitor your materializations. It's nearly identical to the table on the Captures page, with a few exceptions. 1: Select all or deselect all. 2: Enable, Disable, and Delete buttons. These actions will be applied to the selected table rows. Choose Disable to temporarily pause the flow of data, Enable to resume, and Delete to permanently remove the materialization(s). 3: Filter materializations by name. Type a catalog prefix, unique materialization name, or connector name to return materializations that match your query. Materialization names follow the pattern prefix/unique-identifier/connector-name, with prefix supporting multiple layers of nesting. You can search for any part of this full materialization name. You can also use the * wildcard. For example, if you have a materialization called acmeCo/anvil-locations/materialize-mysql, you can find it by filtering for acmeCo*mysql. 4: Status indicator. Shows the status of the primary task shard that backs this materialization. Primary (Green): Data is actively flowing through the materialization.Pending (Yellow): The materialization is attempting to re-connect. Often, you'll see this after you re-enable the materialization as Flow backfills historical data.Failed (Red): The materialization has failed with an unrecoverable error.Disabled (Hollow circle): The materialization is disabled.Unknown (Black when app is in light mode; white when app is in dark mode): The web app is unable to determine shard status. Usually, this is due to a temporary connection error. 5: Materialization name. The full name is shown, including all prefixes. It is also a link to the details page of the materialization. 6: Materialization type. The icon shows the type of destination system data is materialized to. 7: Materialization statistics. The Data Read column shows the total amount of data, in bytes and in documents, that the materialization has read from its associated collections within a configurable time interval. Click the time interval in the header to select from Today, Yesterday, This Week, Last Week, This Month, or Last Month. Note that the time intervals are in UTC. 8: Associated collections. The Reads from column shows all the collections from which the materialization reads data. For materializations with a large number of collections, there is a chip stating how many collections are hidden. Clicking on this will all you to hover over this column and scroll to view the full list. These are also links to the details page of the collection. 9: Publish time. Hover over this value to see the exact UTC time the materialization was last published. 10: Options. Click to open the menu to Edit Specification. ","version":"Next","tagName":"h2"},{"title":"Editing materializations​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#editing-materializations","content":" When you click Edit specification for a materialization, you're taken to the Edit Materialization page. This page is similar to the Create Materialization page as it was filled out just before the materialization was published. For detailed steps to edit a materialization, see the guide. ","version":"Next","tagName":"h3"},{"title":"Creating a materialization​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#creating-a-materialization","content":" There are three ways to begin creating a materialization: Clicking New Materialization on the Materializations page.Selecting one or more captures from the Captures page and clicking Materialize.Clicking Materialize Collections immediately after publishing a capture. When you initiate the workflow in any of these ways, all available materialization connectors are displayed. Select a connector to reveal the full form with configuration options specific to your desired destination. Fill out the Endpoint Config form and in the Source Collections section use the Collection Selector to map Flow collections to resources in the destination system. Note that if you entered the workflow from the Captures page or after publishing a capture, collections will be pre-populated for you. For detailed steps to create a materialization, see the guide. ","version":"Next","tagName":"h3"},{"title":"Capture Details page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#capture-details-page","content":" When you click on the name of a capture on the captures page you will be taken to the capture details page to view data stats, sharding information, and general details. ","version":"Next","tagName":"h2"},{"title":"Overview Tab​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#overview-tab","content":" 1: The full name of the capture. 2: Capture statistics. The Usage section displays the total amount of data, in bytes and in documents written by the capture, per hour. The number of hours being displayed in the chart can be changed by clicking the time interval in the header to select from 6 hours, 12 hours, 24 hours. 3: The Details section shows different pieces of information about the capture. When it was last updated, when it was created, the connector being used, and the collections to which the capture writes data. 4: Detailed tooltip. You can hover over a section in the graph to see the specific data of that hour. 5: The most recent hour. This will automatically update every 15 seconds with the most recent data and docs. 6: Associated collections. Shows all the collections to which the capture writes data and when clicked will take you to the collection's detail page 7: The Shard Information section shows the full identifier of the shard(s) that back your capture. If there's an error, you'll see an alert identifying the failing shard(s). Use the drop-down to open an expanded view of the failed shard's logs. ","version":"Next","tagName":"h3"},{"title":"Spec Tab​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#spec-tab","content":" In the Spec tab, you can view the specification of the capture itself. ","version":"Next","tagName":"h3"},{"title":"Collection Details page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#collection-details-page","content":" When you click on the name of a collection on the collections page you will be taken to the collection details page to view data stats, sharding information, preview of data, and general details. ","version":"Next","tagName":"h2"},{"title":"Overview Tab​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#overview-tab-1","content":" 1: The full name of the collection. 2: Collection statistics. The Usage section shows the total amount of data, in bytes and in documents passing through a collection, per hour. The number of hours being displayed in the chart can be changed by clicking the time interval in the header to select from 6 hours, 12 hours, 24 hours. 3: The Details section shows different pieces of information about the collection. When it was last updated, when it was created, and the associated collections (if any). 4: Detailed tooltip. You can hover over a section in the graph to see the specific data of that hour. 5: The most recent hour. This will automatically update every 15 seconds with the most recent data and docs. 6: Associated collections. Shows all the collections to which the capture writes data and when clicked will take you to the collection's detail page 7: The Shard Information section (for derivations) shows the full identifier of the shard(s) that back your derivation. If there's an error, you'll see an alert identifying the failing shard(s). Use the drop-down to open an expanded view of the failed shard's logs. 8: The Data Preview section shows a sample of collection documents: the individual JSON files that comprise the collection. Documents are organized by their collection key value. Click a key from the list to view its document. ","version":"Next","tagName":"h3"},{"title":"Spec Tab​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#spec-tab-1","content":" 1: The collection's key of the collection. 2: The collection's schema displayed in a read only table. The table columns can be sorted to more easily find what you need. tip If you need to modify a collection, edit the capture that it came from. ","version":"Next","tagName":"h3"},{"title":"Materialization Details Page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#materialization-details-page","content":" When you click on the name of a materialization on the materializations page you will be taken to the detail page to view data stats, sharding information, and general details. ","version":"Next","tagName":"h2"},{"title":"Overview Tab​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#overview-tab-2","content":" 1: The full name of the materialization. 2: Materialization statistics. The Usage section shows the total amount of data, in bytes and in documents read by a materialization, per hour. The number of hours being displayed in the chart can be changed by clicking the time interval in the header to select from 6 hours, 12 hours, 24 hours. 3: The Details section shows different pieces of information about the materialization. When it was last updated, when it was created, and the associated collections. 4: Detailed tooltip. You can hover over a section in the graph to see the specific data of that hour. 5: The most recent hour. This will automatically update every 15 seconds with the most recent data and docs. 6: Associated collections. Shows all the collections to which the capture writes data and when clicked will take you to the collection's detail page 7: The Shard Information section shows the full identifier of the shard(s) that back your materialization. If there's an error, you'll see an alert identifying the failing shard(s). Use the drop-down to open an expanded view of the failed shard's logs. ","version":"Next","tagName":"h3"},{"title":"Spec Tab​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#spec-tab-2","content":" In the Spec tab, you can view the specification of the materialization itself. ","version":"Next","tagName":"h3"},{"title":"Admin page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#admin-page","content":" On the Admin page, you can view users' access grants, your organization's cloud storage locations, and a complete list of connectors. You can also get an access token to authenticate with flowctl and update your cookie preferences. Users​ The Users tab shows you all provisioned access grants on objects to which you also have access. Both users and catalog prefixes can receive access grants. These are split up into two tables called Users and Prefixes. Each access grant has its own row, so a given user or prefix may have multiple rows. For example, if you had read access to foo/ and write access to bar/, you'd have a separate table row in the Users table for each of these capabilities. If users Alice, Bob, and Carol each had write access on foo/, you'd see three more table rows representing these access grants. Taking this a step further, the prefix foo/ could have read access to buz/. You'd see this in the Prefixes table, and it'd signify that everyone who has access to foo/ also inherits read access to buz/. Use the search boxes to filter by username, prefix, or object. Learn more about capabilities and access. Storage Mappings​ The Storage Mappings tab includes a table of the cloud storage locations that back your Flow collections. You're able to view the table if you're an admin. Each top-level Flow prefix is backed by one or more cloud storage bucket that you own. You typically have just one prefix: your organization name, which you provided when configuring your Flow organizational account. If you're a trial user, your prefix is trial/, and this tab isn't applicable to you; your data is stored temporarily in Estuary's cloud storage bucket for your trial period. Learn more about storage mappings. Connectors​ The Connectors tab offers a complete view of all connectors that are currently available through the web application, including both capture and materialization connectors. If a connector you need is missing, you can request it. CLI-API​ The CLI-API tab provides the access token required to authenticate with flowctl. Cookie Preferences​ You use the Cookie Preferences tab to view and modify cookie settings. ","version":"Next","tagName":"h2"},{"title":"Schemas","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/schemas/","content":"","keywords":"","version":"Next"},{"title":"JSON Schema​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#json-schema","content":" JSON Schemais an expressive open standard for defining the schema and structure of documents. Flow uses it for all schemas defined in Flow specifications. JSON Schema goes well beyond basic type information and can modeltagged unions, recursion, and other complex, real-world composite types. Schemas can also define rich data validations like minimum and maximum values, regular expressions, dates, timestamps, email addresses, and other formats. Together, these features let schemas represent structure as well asexpectations and constraints that are evaluated and must hold true for every collection document before it’s added to the collection. They’re a powerful tool for ensuring end-to-end data quality: for catching data errors and mistakes early, before they can impact your production data products. ","version":"Next","tagName":"h2"},{"title":"Generation​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#generation","content":" When capturing data from an external system, Flow can usually generate suitable JSON schemas on your behalf. Learn more about using connectors For systems like relational databases, Flow will typically generate a complete JSON schema by introspecting the table definition. For systems that store unstructured data, Flow will typically generate a very minimal schema, and will rely on schema inferrence to fill in the details. See continuous schema inferenece for more information. ","version":"Next","tagName":"h3"},{"title":"Translations​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#translations","content":" You must only provide Flow a model of a given dataset one time, as a JSON schema. Having done that, Flow leverages static inference over your schemas to perform many build-time validations of your catalog entities, helping you catch potential problems early. Schema inference is also used to provide translations into other schema flavors: Most projections of a collection are automatically inferred from its schema. Materializations use your projections to create appropriate representations in your endpoint system. A SQL connector will create table definitions with appropriate columns, types, and constraints.Flow generates TypeScript definitions from schemas to provide compile-time type checks of user lambda functions. These checks are immensely helpful for surfacing mismatched expectations around, for example, whether a field could ever be null or is misspelt — which, if not caught, might otherwise fail at runtime. ","version":"Next","tagName":"h3"},{"title":"Annotations​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#annotations","content":" The JSON Schema standard introduces the concept ofannotations, which are keywords that attach metadata to a location within a validated JSON document. For example, title and description can be used to annotate a schema with its meaning: properties: myField: title: My Field description: A description of myField Flow extends JSON Schema with additional annotation keywords, which provide Flow with further instruction for how documents should be processed. In particular, the reduce and default keywords help you define merge behaviors and avoid null values at your destination systems, respectively. What’s especially powerful about annotations is that they respond toconditionals within the schema. Consider a schema validating a positive or negative number: type: number oneOf: - exclusiveMinimum: 0 description: A positive number. - exclusiveMaximum: 0 description: A negative number. - const: 0 description: Zero. Here, the activated description of this schema location depends on whether the integer is positive, negative, or zero. ","version":"Next","tagName":"h3"},{"title":"Writing schemas​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#writing-schemas","content":" Your schema can be quite permissive or as strict as you wish. There are a few things to know, however. The top-level type must be object. Flow adds a bit of metadata to each of your documents under the _meta property, which can only be done with a top-level object. Any fields that are part of the collection's key must provably exist in any document that validates against the schema. Put another way, every document within a collection must include all of the fields of the collection's key, and the schema must guarantee that. For example, the following collection schema would be invalid because the id field, which is used as its key, is not required, so it might not actually exist in all documents: collections: acmeCo/whoops: schema: type: object required: [value] properties: id: {type: integer} value: {type: string} key: [/id] To fix the above schema, change required to [id, value]. Learn more of how schemas can be expressed within collections. ","version":"Next","tagName":"h2"},{"title":"Organization​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#organization","content":" JSON schema has a $ref keyword which is used to reference a schema stored elsewhere. Flow resolves $ref as a relative URL of the current file, and also supportsJSON fragment pointersfor referencing a specific schema within a larger schema document, such as ../my/widget.schema.yaml#/path/to/schema. It's recommended to use references in order to organize your schemas for reuse. $ref can also be used in combination with other schema keywords to further refine a base schema. Here's an example that uses references to organize and further tighten the constraints of a reused base schema: flow.yamlschemas.yaml collections: acmeCo/coordinates: key: [/id] schema: schemas.yaml#/definitions/coordinate acmeCo/integer-coordinates: key: [/id] schema: schemas.yaml#/definitions/integer-coordinate acmeCo/positive-coordinates: key: [/id] schema: # Compose a restriction that `x` & `y` must be positive. $ref: schemas.yaml#/definitions/coordinate properties: x: {exclusiveMinimum: 0} y: {exclusiveMinimum: 0} tip You can write your JSON schemas as either YAML or JSON across any number of files, all referenced from Flow catalog files or other schemas. Schema references are always resolved as URLs relative to the current file, but you can also use absolute URLs to a third-party schema likeschemastore.org. ","version":"Next","tagName":"h3"},{"title":"Write and read schemas​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#write-and-read-schemas","content":" In some cases, you may want to impose different constraints to data that is being added (written) to the collection and data that is exiting (read from) the collection. For example, you may need to start capturing data now from a source system; say, a pub-sub system with short-lived historical data support or an HTTP endpoint, but don't know or don't control the endpoint's schema. You can capture the data with a permissive write schema, and impose a stricter read schema on the data as you need to perform a derivation or materialization. You can safely experiment with the read schema at your convenience, knowing the data has already been captured. To achieve this, edit the collection, re-naming the standard schema to writeSchema and adding a readSchema. Make sure that the field used as the collection key is defined in both schemas. You can either perform this manually, or use Flow's Schema Inference tool to infer a read schema. Schema Inference is available in the web app when you edit a capture or materialization and create a materialization. Before separating your write and read schemas, have the following in mind: The write schema comes from the capture connector that produced the collection and shouldn't be modified. Always apply your schema changes to the read schema. Separate read and write schemas are typically useful for collections that come from a source system with a flat or loosely defined data structure, such as cloud storage or pub-sub systems. Collections sourced from databases and most SaaS systems come with an explicitly defined data structure and shouldn't need a different read schema. If you're using standard projections, you must only define them in the read schema. However, if your projections are logical partitions, you must define them in both schemas. Here's a simple example in which you don't know how purchase prices are formatted when capturing them, but find out later that number is the appropriate data type: collections: purchases: writeSchema: type: object title: Store price as strings description: Not sure if prices are formatted as numbers or strings. properties: id: { type: integer} price: {type: [string, number]} readSchema: type: object title: Prices as numbers properties: id: { type: integer} price: {type: number} key: [/id] ","version":"Next","tagName":"h2"},{"title":"Reductions​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#reductions","content":" Flow collections have keys, and multiple documents may be added to collections that share a common key. When this happens, Flow will opportunistically merge all such documents into a single representative document for that key through a process known as reduction. Flow's default is simply to retain the most recent document of a given key, which is often the behavior that you're after. Schema reduce annotations allow for far more powerful behaviors. The Flow runtime performs reductions frequently and continuously to reduce the overall movement and cost of data transfer and storage. A torrent of input collection documents can often become a trickle of reduced updates that must be stored or materialized into your endpoints. info Flow never delays processing in order to batch or combine more documents, as some systems do (commonly known as micro-batches, or time-based polling). Every document is processed as quickly as possible, from end to end. Instead Flow uses optimistic transaction pipelining to do as much useful work as possible, while it awaits the commit of a previous transaction. This natural back-pressure affords plenty of opportunity for data reductions while minimizing latency. ","version":"Next","tagName":"h2"},{"title":"reduce annotations​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#reduce-annotations","content":" Reduction behaviors are defined by reduceJSON schema annotationswithin your document schemas. These annotations provide Flow with the specific reduction strategies to use at your various document locations. If you're familiar with the map and reduce primitives present in Python, Javascript, and many other languages, this should feel familiar. When multiple documents map into a collection with a common key, Flow reduces them on your behalf by using your reduce annotations. Here's an example that sums an integer: type: integer reduce: { strategy: sum } # 1, 2, -1 => 2 Or deeply merges a map: type: object reduce: { strategy: merge } # {"a": "b"}, {"c": "d"} => {"a": "b", "c": "d"} Learn more in thereduction strategiesreference documentation. Reductions and collection keys​ Reduction annotations change the common patterns for how you think about collection keys. Suppose you are building a reporting fact table over events of your business. Today you would commonly consider a unique event ID to be its natural key. You would load all events into your warehouse and perform query-time aggregation. When that becomes too slow, you periodically refresh materialized views for fast-but-stale queries. With Flow, you instead use a collection key of your fact table dimensions, and use reduce annotations to define your metric aggregations. A materialization of the collection then maintains a database table which is keyed on your dimensions, so that queries are both fast and up to date. Composition with conditionals​ Like any other JSON Schema annotation,reduce annotations respond to schema conditionals. Here we compose append and lastWriteWins strategies to reduce an appended array which can also be cleared: type: array oneOf: # If the array is non-empty, reduce by appending its items. - minItems: 1 reduce: { strategy: append } # Otherwise, if the array is empty, reset the reduced array to be empty. - maxItems: 0 reduce: { strategy: lastWriteWins } # [1, 2], [3, 4, 5] => [1, 2, 3, 4, 5] # [1, 2], [], [3, 4, 5] => [3, 4, 5] # [1, 2], [3, 4, 5], [] => [] You can combine schema conditionals with annotations to buildrich behaviors. ","version":"Next","tagName":"h3"},{"title":"Continuous schema inference​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#continuous-schema-inference","content":" Flow automatically infers a JSON schema for every captured collection. This schema is updated automatically as data is captured. For some systems, like relational databases, Flow is able to determine a complete JSON schema for each collection up front, before even starting the capture. But many other systems are not able to provide detailed and accurate information about the data before it's captured. Often, this is because the source system data is unstructured or loosely structured. For these systems, the schema can only be known after the data is captured. Continuous schema inference is most useful in these scenarios. For example, say you're capturing from MongoDB. MongoDB documents must all have an _id field, but that is essentially the only requirement. You can't know what other fields may exist on MongoDB documents until you've read them. When you set up a capture from MongoDB using the Flow web app, the collection specifications will look something like this: key: [ /_id ] writeSchema: type: object properties: _id: { type: string } required: [ _id ] readSchema: allOf: - $ref: flow://write-schema - $ref: flow://inferred-schema Note that this spec uses separate read and write schemas. The writeSchema is extremely permissive, and only requires an _id property with a string value. The readSchema references flow://inferred-schema, which expands to the current inferred schema when the collection is published. info Note that $ref: flow://write-schema expands to the current writeSchema. Whenever you use $ref: flow://inferred-schema, you should always include the flow://write-schema as well, so that you don't need to repeat any fields that are defined in the writeSchema or wait for those fields to be observed by schema inference. When you first publish a collection using the inferred schema, flow://inferred-schema expands to a special placeholder schema that rejects all documents. This is to ensure that a non-placeholder inferred schema has been published before allowing any documents to be materialized. Once data is captured to the collection, the inferred schema immediately updates to strictly and minimally describe the captured. Because the effective readSchema is only ever updated when the collection is published, the best option is usually to use the inferred schema in conjunction with autoDiscover. ","version":"Next","tagName":"h2"},{"title":"default annotations​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#default-annotations","content":" You can use default annotations to prevent null values from being materialized to your endpoint system. When this annotation is absent for a non-required field, missing values in that field are materialized as null. When the annotation is present, missing values are materialized with the field's default value: collections: acmeCo/coyotes: schema: type: object required: [id] properties: id: {type: integer} anvils_dropped: {type: integer} reduce: {strategy: sum } default: 0 key: [/id] default annotations are only used for materializations; they're ignored by captures and derivations. If your collection has both a write and read schema, make sure you add this annotation to the read schema. ","version":"Next","tagName":"h2"},{"title":"Registration and setup","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/installation/","content":"","keywords":"","version":"Next"},{"title":"Get started with the Flow web application​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#get-started-with-the-flow-web-application","content":" To start using Flow for free, visit the web application. See what the free tier includes on the Pricing page. When you register for Flow, your account will use Flow's secure cloud storage bucket to store your data. Data in Flow's cloud storage bucket is deleted 30 days after collection. For production use cases, you should configure your own cloud storage bucket to use with Flow. ","version":"Next","tagName":"h2"},{"title":"Get started with the Flow CLI​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#get-started-with-the-flow-cli","content":" After your account has been activated through the web app, you can begin to work with your data flows from the command line. This is not required, but it enables more advanced workflows or might simply be your preference. Flow has a single binary, flowctl. flowctl is available for: Linux x86-64. All distributions are supported.MacOS 11 (Big Sur) or later. Both Intel and M1 chips are supported. To install, copy and paste the appropriate script below into your terminal. This will download flowctl, make it executable, and add it to your PATH. For Linux: sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-x86_64-linux' && sudo chmod +x /usr/local/bin/flowctl For Mac: sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-multiarch-macos' && sudo chmod +x /usr/local/bin/flowctl Alternatively, Mac users can install with Homebrew: brew tap estuary/flowctl brew install flowctl flowctl isn't currently available for Windows. For Windows users, we recommend running the Linux version inside WSL, or using a remote development environment. The flowctl source files are also on GitHub here. Once you've installed flowctl and are ready to begin working, authenticate your session using an access token. Ensure that you have an Estuary account and have signed into the Flow web app before. In the terminal of your local development environment, run: flowctl auth login In a browser window, the web app opens to the CLI-API tab. Copy the access token. Return to the terminal, paste the access token, and press Enter. The token will expire after a predetermined duration. Repeat this process to re-authenticate. Learn more about using flowctl. ","version":"Next","tagName":"h2"},{"title":"Configuring your cloud storage bucket for use with Flow​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#configuring-your-cloud-storage-bucket-for-use-with-flow","content":" New Flow accounts are connected to Flow's secure cloud storage bucket to store collection data. To switch to your own bucket, choose a cloud provider and complete the setup steps: Google Cloud Storage Amazon S3 Azure Blob Storage Once you're done, get in touch. ","version":"Next","tagName":"h2"},{"title":"Google Cloud Storage buckets​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#google-cloud-storage-buckets","content":" You'll need to grant Estuary Flow access to your GCS bucket. Create a bucket to use with Flow, if you haven't already. Follow the steps to add a principal to a bucket level policy. As you do so: For the principal, enter flow-258@helpful-kingdom-273219.iam.gserviceaccount.com Select the roles/storage.admin role. ","version":"Next","tagName":"h3"},{"title":"Amazon S3 buckets​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#amazon-s3-buckets","content":" You'll need to grant Estuary Flow access to your S3 bucket. Create a bucket to use with Flow, if you haven't already. Follow the steps to add a bucket policy, pasting the policy below. Be sure to replace YOUR-S3-BUCKET with the actual name of your bucket. { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUsersToAccessObjectsUnderPrefix", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::789740162118:user/flow-aws" }, "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], "Resource": "arn:aws:s3:::YOUR-S3-BUCKET/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::789740162118:user/flow-aws" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::YOUR-S3-BUCKET" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::789740162118:user/flow-aws" }, "Action": "s3:GetBucketPolicy", "Resource": "arn:aws:s3:::YOUR-S3-BUCKET" } ] } ","version":"Next","tagName":"h3"},{"title":"Azure Blob Storage​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#azure-blob-storage","content":" You'll need to grant Estuary Flow access to your storage account and container. You'll also need to provide some identifying information. Create an Azure Blob Storage container to use with Flow, if you haven't already. Gather the following information. You'll need this when you contact us to complete setup. Your Azure AD tenant ID. You can find this in the Azure Active Directory page. Your Azure Blob Storage account ID. You can find this in the Storage Accounts page. Your Azure Blob Storage container ID. You can find this inside your storage account. You'll grant Flow access to your storage resources by connecting to Estuary'sAzure application. Add Estuary's Azure application to your tenant. Grant the application access to your storage account via theStorage Blob Data Owner IAM role. Inside your storage account's Access Control (IAM) tab, click Add Role Assignment. Search for Storage Blob Data Owner and select it. On the next page, make sure User, group, or service principal is selected, then click + Select Members. You must search for the exact name of the application, otherwise it won't show up: Estuary Storage Mappings Prod Once you've selected the application, finish granting the role. For more help, see the Azure docs. ","version":"Next","tagName":"h3"},{"title":"Add the Bucket​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#add-the-bucket","content":" If your bucket is for Google Cloud Storage or AWS S3, you can add it yourself. Once you've finished the above steps, head to "Admin", "Settings" then "Configure Cloud Storage" and enter the relevant information there and we'll start to use your bucket for all data going forward. If your bucket is for Azure, send support@estuary.dev an email with the name of the storage bucket and any other information you gathered per the steps above. Let us know whether you want to use this storage bucket to for your whole Flow account, or just a specific prefix. We'll be in touch when it's done! ","version":"Next","tagName":"h3"},{"title":"Self-hosting Flow​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#self-hosting-flow","content":" The Flow runtime is available under the Business Source License. It's possible to self-host Flow using a cloud provider of your choice. Beta Setup for self-hosting is not covered in this documentation, and full support is not guaranteed at this time. We recommend using the hosted version of Flow for the best experience. If you'd still like to self-host, refer to the GitHub repository or the Estuary Slack. ","version":"Next","tagName":"h2"},{"title":"What's next?​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#whats-next","content":" Start using Flow with these recommended resources. Create your first data flow: Follow this guide to create your first data flow in the Flow web app, while learning essential flow concepts. High level concepts: Start here to learn more about important Flow terms. ","version":"Next","tagName":"h2"},{"title":"Flow tutorials","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/tutorials/","content":"Flow tutorials Flow tutorials are complete learning experiences that help you get to know Flow using sample data. You'll find these helpful if: You're a new user looking for practice before you implement production Data Flows. You'd rather learn the Flow concepts in a hands-on setting. If you're looking for more streamlined guidance for your own use case, check out the user guides.","keywords":"","version":"Next"},{"title":"Create a real-time materialized view in PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#prerequisites","content":" An Estuary Flow account. If you don't have one, visit the Flow web app to register for free. A GitLab, GitHub, or BitBucket account. You'll use this to log into GitPod, the cloud development environment integrated with Flow. Alternatively, you can complete this tutorial using a local development environment. In that case, you'll need to install flowctl locally. Note that the steps you'll need to take will be different. Refer to this guide for help. A Postgres database set up to allow connections from Flow. Amazon RDS, Amazon Aurora, Google Cloud SQL, Azure Database for PostgreSQL, and self-hosted databases are supported. ","version":"Next","tagName":"h2"},{"title":"Introduction​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#introduction","content":" Materialized views in Postgres give you a powerful way narrow down a huge dataset into a compact one that you can easily monitor. But if your data is updating in real-time, traditional materialized views introduce latency. They're batch workflows — the query is run at a set interval. To get around this, you'll need to perform a real-time transformation elsewhere. Flow derivations are a great way to do this. For this example, you'll use Estuary's public data collection of recent changes to Wikipedia, captured from the Wikimedia Foundation's event stream. The raw dataset is quite large. It captures every change to the platform — about 30 per second — and includes various properties. Written to a Postgres table, it quickly grows to an size that's very expensive to query. First, you'll scope the raw data down to a small fact table with a derivation. You'll then materialize both the raw and transformed datasets to your Postgres instance and compare performance. ","version":"Next","tagName":"h2"},{"title":"Loading the Wikipedia Demo​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#loading-the-wikipedia-demo","content":" Navigate to the Live Demo page and click on See the capture. After accepting the pop up, Estuary will populate your Sources, Collections and Destinations with the Wikipedia Demo tasks. ","version":"Next","tagName":"h2"},{"title":"Check out the source data​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#check-out-the-source-data","content":" Got the the collections page of the Flow web app. Search for demo/wikipedia/recentchange and click on its name. On the Collection Details page, click the Spec tab. The collection schema has many fields. Because Wikipedia sees a lot of edits, this would yield a large, unwieldy table in Postgres. Tip To save on performance, you can also perform this tutorial using the smaller demo/wikipedia/recentchange-sampled collection. Apart from the collection name, all other steps are the same. Learn more about Flow collections and schemas. Now you'll create the derivation. A derivation is a new collection that's defined by a transformation. First, you'll define the collection's schema. Then, you'll write the transformation to shape the data to that schema. ","version":"Next","tagName":"h2"},{"title":"Add a derivation to transform data​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#add-a-derivation-to-transform-data","content":" You'll write your derivation using a cloud development environment integrated in the Flow web app. Go back to the collections page and click the New Transformation button. Set the source collection to the raw Wikipedia data. Search for and select demo/wikipedia/recentchange. Set the transformation language to SQL. Give the derivation a name. From the dropdown, choose the name of your catalog prefix and append a unique name, for example yourprefix/wikipedia/user-fact-table. Click Proceed to GitPod to create your development environment. Sign in with one of the available account types. On the New Workspace screen, keep the Context URL option selected and click Continue. A GitPod development environment opens. A stubbed-out derivation with a SQL transformation has already been created for you. Next, you'll locate and open the source files. Each slash-delimited prefix of your derivation name has become a folder. Open the nested folders to locate a flow.yaml file. Following the example above, you'd open the folders called yourprefix, then wikipedia, to find the correct flow.yaml file. Its contents look like this: collections: yourprefix/wikipedia/user-fact-table: schema: properties: your_key: type: string required: - your_key type: object key: - /your_key derive: using: sqlite: migrations: - user-fact-table.migration.0.sql transforms: - name: recentchange source: demo/wikipedia/recentchange shuffle: any lambda: user-fact-table.lambda.recentchange.sql Your first order of business is to replace the placeholder schema and collection key. As we saw earlier, the source collection's schema and key caused every Wikipedia event to generate a new document. You'll fix that here. Replace the existing schema and key stanzas with the following: schema: properties: edits_this_day: reduce: strategy: sum type: integer date: format: date type: string user: type: string reduce: strategy: merge required: - user - date - edits_this_day type: object key: - /user - /date The new schema contains reduction annotations. These sum the changes made by a given user on a given date. The collection is now keyed on each unique combination of user ID and date. It has just three fields: the user, date, and the number of changes made by that user on that date. Next, you'll add the transformation. In the transforms stanza, give the transformation a new name to differentiate it from the name of the source collection. For example: transforms: - name: dailychangesbyuser Update the shuffle key. Since we're working with a large dataset, this ensures that each user is processed by the same task shard. This way, you'll prevent Flow from creating multiple counts for a given user and date combination. Learn more about shuffles. shuffle: { key: [ /user ] } Now, the transform needs is the SQL lambda function — the function that will shape the source data to fit the new schema. Flow has created another file to contain it. Open the file called user-fact-table.lambda.recentchange.sql. Replace its contents with select $user, 1 as edits_this_day, date($meta$dt) as date where $user is not null; This creates the edits_this_day field we referenced earlier, and starts the counter at 1. It converts the timestamp into a simplified date format. Finally, it filters out null users (which occasionally occur in the Wikipedia data stream and would violate your schema). All pieces of the derivation are in place. Double check your files against these samples: flow.yamluser-fact-table.lambda.recentchange.sql --- collections: yourprefix/wikipedia/user-fact-table: schema: properties: edits_this_day: reduce: strategy: sum type: integer date: format: date type: string user: type: string reduce: strategy: merge required: - user - date - edits_this_day type: object key: - /user - /date derive: using: sqlite: migrations: - user-fact-table.migration.0.sql transforms: - name: dailychangesbyuser source: demo/wikipedia/recentchange shuffle: { key: [ /user ] } lambda: user-fact-table.lambda.recentchange.sql Run the derivation locally and preview its output: flowctl preview --source flow.yaml In your terminal, you'll see JSON documents that look like: {"date":"2023-07-18","edits_this_day":3,"user":"WMrapids"} This looks right: it includes the correctly formatted date, the number of edits, and the username. You're ready to publish. Stop the local derivation with Ctrl-C. Publish the derivation: flowctl catalog publish --source flow.yaml The message Publish successful means you're all set. Your transformation will continue in real time based on the raw dataset, which is also updating in real time. You're free to close your GitPod. ","version":"Next","tagName":"h2"},{"title":"Create the continuous materialized view​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#create-the-continuous-materialized-view","content":" Now, you'll materialize your new fact table to Postgres. You'll also materialize the source dataset to compare performance. Go to the Destinations page in the Flow web app. Click New Materialization. Find the PostgreSQL and click Materialization. Add a unique name for the materialization, for example, yourprefix/yourname-materialized-views-demo. Fill out the Basic Config with: A username and password for the Postgres instance. Your database host and port. The database name (if in doubt, use the default, postgres). See the connector documentation if you need help finding these properties. In the Source Collections browser, search for and add the collection demo/wikipedia/recentchange and name the corresponding Postgres Table wikipedia_raw. Also search for and add the collection you just derived, (for example, yourprefix/wikipedia/user-fact-table). Name the corresponding Postgres table wikipedia_data_by_user. Click Next to test the connection. Click Save and Publish. ","version":"Next","tagName":"h2"},{"title":"Explore the results​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#explore-the-results","content":" In your Postgres client of choice, note the size of each table and how they quickly change. Try running some basic queries against both and compare performance. See the blog post for ideas. Once you're satisfied, and to prevent continual resource use, disable or delete your materialization from theDestinations page. ","version":"Next","tagName":"h2"},{"title":"Resources​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#resources","content":" About derivations ","version":"Next","tagName":"h2"},{"title":"Create your first dataflow with Amazon S3 and Snowflake","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Create your first dataflow with Amazon S3 and Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/#prerequisites","content":" You'll need: An Estuary Flow account. If you don't have one, visit the Flow web app to register for free. A Snowflake free trial account (or a full account). Snowflake trials are valid for 30 days. ","version":"Next","tagName":"h2"},{"title":"Introduction​","type":1,"pageTitle":"Create your first dataflow with Amazon S3 and Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/#introduction","content":" The data​ New York City hosts the United States' largest bike share program, Citi Bike. Citi Bike shares ride data in CSV format with the public, including the starting and ending times and locations for every ride. They upload new data monthly to their Amazon S3 bucket as a zipped CSV file. In this scenario, let's imagine you're interested in urban bike safety, or perhaps you plan to open a bike store and entice Citi Bike renters to buy their own bikes. You'd like to access the Citi Bike data in your Snowflake data warehouse. From there, you plan to use your data analytics platform of choice to explore the data, and perhaps integrate it with business intelligence apps. You can use Estuary Flow to build a real-time Data Flow that will capture all the new data from Citi Bike as soon as it appears, convert it to Snowflake's format, and land the data in your warehouse. Estuary Flow​ In Estuary Flow, you create Data Flows to connect data source and destination systems. The simplest Data Flow comprises three types of entities: A data capture, which ingests data from the source. In this case, you'll capture from Amazon S3. One or more collections, which Flow uses to store that data inside a cloud-backed data lake A materialization, to push the data to an external destination. In this case, you'll materialize to a Snowflake data warehouse. graph LR; Capture-->Collection; Collection-->Materialization; For the capture and materialization to work, they need to integrate with outside systems: in this case, S3 and Snowflake, but many other systems can be used. To accomplish this, Flow uses connectors. Connectors are plug-in components that interface between Flow and an outside system. Today, you'll use Flow's S3 capture connector and Snowflake materialization connector. You'll start by creating your capture. ","version":"Next","tagName":"h2"},{"title":"Capture Citi Bike data from S3​","type":1,"pageTitle":"Create your first dataflow with Amazon S3 and Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/#capture-citi-bike-data-from-s3","content":" Go to the Flow web app at dashboard.estuary.dev and sign in. Click the Sources tab and choose New Capture All of the available capture connectors — representing the possible data sources — appear as tiles. Find the Amazon S3 tile and click Capture. A form appears with the properties required for an S3 capture. Every connector requires different properties to configure. First, you'll name your capture. Click inside the Name box. Names of entities in Flow must be unique. They're organized by prefixes, similar to paths in a file system. You'll see one or more prefixes pertaining to your organization. These prefixes represent the namespaces of Flow to which you have access. Click your prefix from the dropdown and append a unique name after it. For example, myOrg/yourname/citibiketutorial. Next, fill out the required properties for S3. AWS Access Key ID and AWS Secret Access Key: The bucket is public, so you can leave these fields blank. AWS Region: us-east-1 Bucket: tripdata Prefix: The storage bucket isn't organized by prefixes, so leave this blank. Match Keys: 2022 The Citi Bike storage bucket has been around for a while. Some of the older datasets have incorrect file extensions or contain data in different formats. By selecting a subset of files from the year 2022, you'll make things easier to manage for the purposes of this tutorial. (In a real-world use case, you'd likely reconcile the different schemas of the various data formats using a derivation.Derivations are a more advanced Flow skill.) Click Next. Flow uses the configuration you provided to initiate a connection with S3. It generates a list of collections that will store the data inside Flow. In this case, there's just one collection from the bucket. Once this process completes, you can move on to the next step. If there's an error, go back and check your configuration. Click Save and Publish. Flow deploys, or publishes, your capture, including your change to the schema. You'll see a notification when the this is complete. A subset of data from the Citi Bike tripdata bucket has been captured to a Flow collection. Now, you can materialize that data to Snowflake. Click Materialize Collections. ","version":"Next","tagName":"h2"},{"title":"Prepare Snowflake to use with Flow​","type":1,"pageTitle":"Create your first dataflow with Amazon S3 and Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/#prepare-snowflake-to-use-with-flow","content":" Before you can materialize from Flow to Snowflake, you need to complete some setup steps. Leave the Flow web app open. In a new window or tab, go to your Snowflake console. If you're a new trial user, you should have received instructions by email. For additional help in this section, see the Snowflake documentation. Create a new SQL worksheet if you don't have one open. This provides an interface where you can run queries. Paste the follow script into the console, changing the value for estuary_password from secret to a strong password): set database_name = 'ESTUARY_DB'; set warehouse_name = 'ESTUARY_WH'; set estuary_role = 'ESTUARY_ROLE'; set estuary_user = 'ESTUARY_USER'; set estuary_password = 'secret'; set estuary_schema = 'ESTUARY_SCHEMA'; -- create role and schema for Estuary create role if not exists identifier($estuary_role); grant role identifier($estuary_role) to role SYSADMIN; -- Create snowflake DB create database if not exists identifier($database_name); use database identifier($database_name); create schema if not exists identifier($estuary_schema); -- create a user for Estuary create user if not exists identifier($estuary_user) password = $estuary_password default_role = $estuary_role default_warehouse = $warehouse_name; grant role identifier($estuary_role) to user identifier($estuary_user); grant all on schema identifier($estuary_schema) to identifier($estuary_role); -- create a warehouse for estuary create warehouse if not exists identifier($warehouse_name) warehouse_size = xsmall warehouse_type = standard auto_suspend = 60 auto_resume = true initially_suspended = true; -- grant Estuary role access to warehouse grant USAGE on warehouse identifier($warehouse_name) to role identifier($estuary_role); -- grant Estuary access to database grant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role); -- change role to ACCOUNTADMIN for STORAGE INTEGRATION support to Estuary (only needed for Snowflake on GCP) use role ACCOUNTADMIN; grant CREATE INTEGRATION on account to role identifier($estuary_role); use role sysadmin; COMMIT; Click the drop-down arrow next to the Run button and click Run All. Snowflake runs all the queries and is ready to use with Flow. Return to the Flow web application. ","version":"Next","tagName":"h2"},{"title":"Materialize your Flow collection to Snowflake​","type":1,"pageTitle":"Create your first dataflow with Amazon S3 and Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/#materialize-your-flow-collection-to-snowflake","content":" You were directed to the Materializations page. All of the available materialization connectors — representing the possible data destinations — are shown as tiles. Find the Snowflake tile and click Materialization. A new form appears with the properties required to materialize to Snowflake. Click inside the Name box. Click your prefix from the dropdown and append a unique name after it. For example, myOrg/yourname/citibiketutorial. Next, fill out the required properties for Snowflake (most of these come from the script you just ran). Host URL: This is the URL you use to log into Snowflake. If you recently signed up for a trial, it should be in your email. Omit the protocol from the beginning. For example, ACCOUNTID.region.cloudprovider.snowflakecomputing.com or orgname-accountname.snowflakecomputing.com. Learn more about account identifiers and host URLs. Account: Your account identifier. This is part of the Host URL. Using the previous examples, it would be ACCOUNTID or accountname. User: ESTUARY_USER Password: secret (Substitute the password you set in the script.) Database: ESTUARY_DB Schema: ESTUARY_SCHEMA Warehouse: ESTUARY_WH Role: ESTUARY_ROLE Scroll down to view the Source Collections section and change the default name in the Table field to CitiBikeData or another name of your choosing. Every Flow collection is defined by one or more schemas. Because S3 is a cloud storage bucket, the schema used to ingest the data is quite permissive. You'll add a more detailed schema for Flow to use to materialize the data to Snowflake. This will ensure that each field from the source CSV is mapped to a column in the Snowflake table. With the collection still selected, click its Collection tab. Then, click Schema Inference. Flow examines the data and automatically generates a new readSchema. Scroll through and note the differences between this and the original schema, renamed writeSchema. Click Apply Inferred Schema. Click Next. Flow uses the configuration you provided to initiate a connection with Snowflake and generate a specification with details of the materialization. Once this process completes, you can move on to the next step. If there's an error, go back and check your configuration. Click Save and Publish. Flow publishes the materialization. Return to the Snowflake console and expand ESTUARY_DB and ESTUARY_SCHEMA. You'll find the materialized table there. ","version":"Next","tagName":"h2"},{"title":"Conclusion​","type":1,"pageTitle":"Create your first dataflow with Amazon S3 and Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/#conclusion","content":" You've created a complete Data Flow that ingests the Citi Bike CSV files from an Amazon S3 bucket and materializes them into your Snowflake database. When Citi Bike uploads new data, it'll be reflected in Snowflake in near-real-time, so long as you don't disable your capture or materialization. Data warehouses like Snowflake are designed to power data analytics. From here, you can begin any number of analytical workflows. Want to learn more?​ For more information on the connectors you used today, see the pages on S3 and Snowflake. You can create a Data Flow using any combination of supported connectors with a similar process to the one you followed in this tutorial. For a more generalized procedure, see the guide to create a Data Flow. ","version":"Next","tagName":"h2"},{"title":"Real-time CDC with MongoDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/","content":"","keywords":"","version":"Next"},{"title":"Video tutorial​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#video-tutorial","content":" ","version":"Next","tagName":"h2"},{"title":"What is CDC?​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#what-is-cdc","content":" CDC, or Change Data Capture, is a method used to track and capture changes made to data in a database. It enables the real-time capture of insertions, updates, and deletions, providing a continuous stream of changes. This stream of data is invaluable for keeping downstream systems synchronized and up-to-date with the source database, facilitating real-time analytics, replication, and data integration. In essence, CDC allows organizations to capture and react to data changes as they occur, ensuring data accuracy and timeliness across their systems. Optionally, if you are interested in the intricacies of change data capture, head over to this article, where we explain the theory behind it - this is not a requirement for this tutorial, so if you want to dive in head first, keep on reading! ","version":"Next","tagName":"h2"},{"title":"Understanding Change Events in MongoDB​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#understanding-change-events-in-mongodb","content":" Change events in MongoDB are notifications triggered by modifications to the database's data, configuration, or structure through a mechanism called change streams. Change Streams in MongoDB are a convenient way for CDC, enabling real-time monitoring of data changes without having to directly interact with the underlying oplog. CDC processes leverage Change Streams to subscribe to data changes, capturing detailed events promptly as insertions, updates, or deletions occur. This approach ensures efficient data propagation to downstream systems, scalability for high-throughput environments, and robust error handling for operations. MongoDB supports various types of change events, each catering to different aspects of database operations. For data synchronization, the following three events are the only ones that matter: Insert Events: Triggered when new documents are inserted into a collection. Update Events: Fired upon modifications to existing documents, including field updates and replacements. Delete Events: Signaled when documents are removed from a collection. In MongoDB, if you delete a key from a document, the corresponding change event that gets fired is an "update" event. This may seem counterintuitive at first, but in MongoDB, updates are atomic operations that can modify specific fields within a document, including removing keys. So, when a key is deleted from a document, MongoDB interprets it as an update operation where the specific field (i.e., the key) is being removed, resulting in an "update" event being generated in the oplog. ","version":"Next","tagName":"h2"},{"title":"Introduction to Estuary Flow​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#introduction-to-estuary-flow","content":" Estuary is the best tool for integrating CDC streams from MongoDB. Here are a few reasons why: Unlike ELT vendors, Estuary does streaming CDC and incremental snapshots, not full snapshots or batch change data extraction. This puts less of a load on the source database and lowers latency. Estuary also extracts exactly-and-only-once. As it streams snapshots and changes data it also stores it as a collection for later reuse, such as for backfilling or stream replay. ELT vendors require you to re-extract every time to want to resend the data or restart a change data stream. Estuary supports both real-time and batch. Its streaming latency is within 100ms, and it always extracts in real-time. But it supports any latency from real-time to hours or days for destinations. Estuary guarantees change data is delivered exactly once. Estuary can also maintain type I and type II slowly changing dimensions directly into a target. Estuary streaming has 50MB/sec per connection per table throughput rates, which is 5-10x any other benchmarks for CDC. It also scales horizontally to increase throughput. Time to build a real-time CDC pipeline! ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#prerequisites","content":" To follow along with the tutorial, you’ll need the following: An Estuary Flow account. If you haven’t yet, sign up for free here. A fully-managed MongoDB Capture connector is ready for you to get started. A MongoDB Atlas cluster: This tutorial uses Atlas as the source database, but Estuary supports other types of MongoDB deployments as well. ","version":"Next","tagName":"h2"},{"title":"Setting up MongoDB​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#setting-up-mongodb","content":" To prepare MongoDB for Estuary Flow, you need to ensure the following prerequisites are met: ","version":"Next","tagName":"h2"},{"title":"Credentials​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#credentials","content":" Obtain the necessary credentials for connecting to your MongoDB instance and database. This includes credentials for authentication purposes, typically a username and password. ","version":"Next","tagName":"h3"},{"title":"Read Access​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#read-access","content":" Ensure that you have read access to the MongoDB database(s) from which you intend to capture data. MongoDB utilizes Role-Based Access Control (RBAC), so make sure your user account has the appropriate permissions to read data. In MongoDB Atlas, any of the built-in Roles will work for the tutorial, but Flow needs at least read permissions over the data you wish to capture if you wish to set up more granular, restricted permissions. ","version":"Next","tagName":"h3"},{"title":"Configuration Considerations​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#configuration-considerations","content":" If you haven't already, make sure you deploy a Replica Set-type MongoDB cluster. Change streams require a replica set in order to work. A replica set is a group of MongoDB deployments that maintain the same data set. If you are working following along with a fresh MongoDB Atlas project, you shouldn’t need to configure anything manually for this, as the default free-tier instance is a cluster of 3 replicas. To learn more about replica sets, see the Replication Introduction in the MongoDB manual. Ensure that Estuary's IP addresses are allowlisted to allow access. We’ll show you how to do this in the next section. ","version":"Next","tagName":"h3"},{"title":"Configure MongoDB​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#configure-mongodb","content":" Let’s start by provisioning our database. As you can see, for this tutorial, you can just deploy an M0-category cluster, which is free to use. After the cluster has finished provisioning, we’ll need to make sure that Estuary Flow is able to connect to the database. For this, the only requirement with MongoDB Atlas is allowlisting the Estuary Flow IP addresses. Navigate to the “Network Access” page using the left hand sidebar, and using the “Add new IP address” button, create the list entry which enables the communication between the two services. Next, find your connection string by navigating to the mongosh setup page by clicking the “Connect” button on the database overview section, then choosing the “Shell” option. You’re not going to set up mongosh for this tutorial, but this is the easiest way to get ahold of the connection string we’ll be using. Copy the connection string and head over to your Estuary Flow dashboard to continue the tutorial. ","version":"Next","tagName":"h3"},{"title":"Setting up Estuary Flow​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#setting-up-estuary-flow","content":" On the dashboard, create a new capture by navigating to the “Sources” menu using the sidebar, then pressing the “New Capture” button. In the list of available connectors, search for “MongoDB”, then press “Capture”. Pressing this button will bring you to the connector configuration page, where you’ll be able to provision your fully managed real-time Data Flow. ","version":"Next","tagName":"h2"},{"title":"MongoDB Capture Configuration​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#mongodb-capture-configuration","content":" As a first step, in the Capture Details section, name your capture and optionally add a description for it. Once you are finished, step down to the second configuration section, called “Endpoint Config”. Here you have to use the address for the database you took a note of in the MongoDB setup section, along with your username and password which you configured when setting up MongoDB Atlas. If your user has access to all databases, ensure that in your MongoDB address, you specify the ?authSource=admin parameter in the connection address. In this case, authentication is performed through your admin database. As for the "Database" option, feel free to leave it empty, that way the automated discovery process of Flow will make sure every available database is ready for data extraction. After you press the blue “Next” button in the top right corner, Flow will automatically crawl through the connection to discover available resources. Next up, you’ll see the third, and final configuration section, where you are able to view and choose from all the databases and collections which are discovered by Flow. ","version":"Next","tagName":"h3"},{"title":"Documents and Collections​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#documents-and-collections","content":" Before we initialize the connector, let’s talk a little bit about how incoming data is represented in Flow. The documents of your flows are stored in collections: real-time data lakes of JSON documents in cloud storage. Keep in mind, these are not the same documents and collections as the ones in MongoDB, only the names are similar, but we are talking about separate systems. Collections being stored in an object storage mean that once you start capturing data, you won’t have to worry about it not being available to replay – object stores such as S3 can be configured to cheaply store data forever. See docs page for more information about documents. To see how Flow parsed the incoming records, click on the “Collection” tab on the UI. When you set up a capture from MongoDB using the Flow web app, the underlying collection specifications will look something like this: key: [ /_id ] writeSchema: type: object properties: _id: { type: string } required: [ _id ] readSchema: allOf: - $ref: flow://write-schema - $ref: flow://inferred-schema This specification uses separate read and write schemas. The writeSchema is extremely permissive, and only requires an _id property with a string value. The readSchema references flow://inferred-schema, which expands to the current inferred schema when the collection is published. MongoDB documents have a mandatory _id field that is used as the key of the collection. But that is essentially the only requirement. You can't know what other fields may exist on MongoDB documents until you've read them. On the UI, for this reason, only three fields are visible initially in the collection schema tab. ","version":"Next","tagName":"h3"},{"title":"Automating schema evolution​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#automating-schema-evolution","content":" In addition to selecting the collections for capture, this interface provides access to three settings that govern schema evolution. In a NoSQL database environment like MongoDB, schema alterations are frequent occurrences. Manually synchronizing source and destination schemas can end up being a lot of maintenance. To help with this, Estuary introduces a more sophisticated schema evolution strategy. With Estuary Flow, teams can opt to suspend the Data Flow using data contracts, automate the update of the target schema with the new MongoDB schema, or create a new table in the destination to maintain separation between old and new schemas. Details can be found in our schema evolution docs. Schema evolutions serve to prevent errors stemming from discrepancies between specifications in a number of ways: Materializations will automatically apply backward-compatible schema changes, like adding a new column. This doesn't require re-backfilling the target tables or re-creating the Flow collection. For more complex scenarios, the evolution adjusts the affected materialization bindings to increment their backfill counter, prompting the materialization process to reconstruct the resource (such as a database table) and backfill it from the offset. In instances where necessary, such as when the collection key or logical partitioning undergoes changes, the evolution generates a completely new collection with a numerical suffix (e.g., _v2). This new collection initializes as empty and undergoes backfilling from the source. Moreover, the evolution updates all captures and materializations referencing the old collection to point to the new collection, incrementing their backfill counters accordingly. This method is more intricate and is only invoked when essential alterations are identified. In these scenarios, the names of destination resources remain unaltered. For instance, a materialization to Postgres would drop and re-establish the affected tables with their original names. ","version":"Next","tagName":"h3"},{"title":"Publishing the Capture​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#publishing-the-capture","content":" To finalize the connector configuration and kick it off, press the “Save and Publish” button. Flow will test, save and publish your capture. You’ll see a similar screen if everything went well or if there were any issues setting up the connector, you’ll see detailed error messages instead. During the initial database snapshot – which is triggered automatically – the connector seamlessly captures change events by continuously monitoring change streams while concurrently executing collection scans to backfill pre-existing documents. Following the initial snapshot, the connector perpetually monitors change streams to capture all subsequent changes in real-time. Incremental backfills in the MongoDB connector follow a straightforward approach to ensure comprehensive data capture with minimal latency. Initially, all tracked change streams are synchronized to maintain data integrity. Then, a targeted backfilling effort occurs across MongoDB collections until all are up to date. Continuous monitoring via change streams ensures ongoing data capture and means there is no need to pause replication during an ongoing backfill. In the event of a pause in the connector's process, it resumes capturing change events from the point of interruption. However, the connector's ability to accomplish this depends on the size of the replica set oplog. In certain scenarios where the pause duration is significant enough for the oplog to purge old change events, the connector may necessitate redoing the backfill to maintain data consistency. To ensure reliable data capture, it is recommended to adjust the oplog size or set a minimum retention period. A recommended minimum retention period of at least 24 hours is sufficient for most cases. ","version":"Next","tagName":"h3"},{"title":"Real-time CDC​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#real-time-cdc","content":" Let’s head over to the collections page to see our arriving documents. Looks like all of the selected MongoDB collections have been fully replicated into Flow by the initial backfill. Let’s take a look at the movies collection to see what details Flow can tell us about the documents. You can see some statistics about the integration throughput and you can also take a look at the actual documents in a preview window. You can also check out the generated specification, which is the Flow’s behind-the-scenes declarative way of representing the Collection resource. For the movies collection, this is what it looks like: { "writeSchema": { "type": "object", "required": ["_id"], "properties": { "_id": { "type": "string" }, "_meta": { "$schema": "http://json-schema.org/draft/2020-12/schema", "properties": { "op": { "type": "string", "enum": ["c", "u", "d"], "title": "Change Operation", "description": "Change operation type: 'c' Create/Insert 'u' Update 'd' Delete." } }, "type": "object" } }, "x-infer-schema": true }, "readSchema": { "allOf": [ { "$ref": "flow://write-schema" }, { "$ref": "flow://inferred-schema" } ] }, "key": ["/_id"] } You can see the flexible readSchema configuration in action we mentioned above. You can use the preview window on the collections “Overview” page to quickly test how change events propagate from MongoDB. Head over to the MongoDB Atlas UI and insert a new document into the movies collection. Here’s a sample JSON (describing non-existent but very intriguing movie) you can copy paste into the pop-up modal to spare you the trouble. { "title": "Dataflow", "fullplot": "In a near-future world driven by data, a team of maverick engineers and programmers set out to revolutionize the way information is processed and transmitted. As they delve deeper into the complexities of real-time data streaming, they uncover dark secrets and face moral dilemmas that threaten to unravel their ambitious project.", "plot": "A team of brilliant engineers embark on a groundbreaking project to develop a real-time data streaming platform, but they soon discover unexpected challenges and threats lurking in the digital realm.", "genres": ["Drama", "Sci-Fi", "Thriller"], "runtime": 135, "cast": [ "Emily Blunt", "Michael B. Jordan", "Idris Elba", "Zendaya", "Oscar Isaac" ], "poster": "https://example.com/posters/real-time-data-streaming.jpg", "languages": ["English"], "released": 1739808000000, "directors": ["Christopher Nolan"], "rated": "PG-13", "awards": { "wins": 3, "nominations": 8, "text": "3 wins, 8 nominations" }, "lastupdated": "2024-04-30 10:15:00.000000", "year": 2024, "imdb": { "rating": 8.5, "votes": 15234, "id": 1001 }, "countries": ["USA", "United Kingdom"], "type": "movie", "tomatoes": { "viewer": { "rating": 4.2, "numReviews": 3856, "meter": 82 }, "fresh": 34, "critic": { "rating": 8.0, "numReviews": 22, "meter": 91 }, "rotten": 2, "lastUpdated": 1739894400000 }, "num_mflix_comments": 120 } After you insert the document, check out the collection preview on the Flow UI to verify it has indeed arrived. The process for updating and deleting collections in MongoDB works similarly. ","version":"Next","tagName":"h2"},{"title":"Wrapping up​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#wrapping-up","content":" In this tutorial, you set up a MongoDB Change Data Capture (CDC) integration using Estuary Flow. Throughout the process, you learned about the technical nuances of capturing and synchronizing data changes from MongoDB collections in real-time. Key takeaways from this tutorial: MongoDB's document-based approach and schema flexibility present unique challenges and opportunities for Change Data Capture workflows. You explored the prerequisites and configuration settings required to establish a seamless connection between MongoDB and Estuary, ensuring efficient data capture and synchronization. Estuary's schema evolution capabilities enable data teams to manage schema changes effectively, ensuring data consistency and integrity across source and destination systems. You learned how Flow continuously monitors MongoDB change streams and executes backfilling processes to capture changes accurately, even in the event of interruptions or schema alterations. ","version":"Next","tagName":"h2"},{"title":"Next Steps​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#next-steps","content":" That’s it! You should have everything you need to know to create your own data pipeline for capturing change events from MongoDB! Now try it out on your own CloudSQL database or other sources. If you want to learn more, make sure you read through the Estuary documentation. You’ll find instructions on how to use other connectors here. There are more tutorials here. Also, don’t forget to join the Estuary Slack Community! ","version":"Next","tagName":"h2"},{"title":"Flow user guides","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/","content":"Flow user guides In this section, you'll find step-by-step guides that walk you through common Flow tasks. These guides are designed to help you work with Data Flows in production — we assume you have your own data and are familiar with your source and destination systems. You might be here to get your data moving with Flow as quickly as possible, reshape your collection with a derivation, or create a secure connection to your database. If you'd prefer a tailored learning experience with sample data, check out the Flow tutorials.","keywords":"","version":"Next"},{"title":"Create a basic Data Flow","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/create-dataflow/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Create a basic Data Flow","url":"/pr-preview/pr-1594/guides/create-dataflow/#prerequisites","content":" This guide is intended for new Flow users and briefly introduces Flow's key concepts. Though it's not required, you may find it helpful to read the high level concepts documentation for more detail before you begin. ","version":"Next","tagName":"h2"},{"title":"Introduction​","type":1,"pageTitle":"Create a basic Data Flow","url":"/pr-preview/pr-1594/guides/create-dataflow/#introduction","content":" In Estuary Flow, you create Data Flows to connect data source and destination systems. The simplest Data Flow comprises three types of entities: A data capture, which ingests data from an external sourceOne or more collections, which store that data in a cloud-backed data lakeA materialization, to push the data to an external destination The capture and materialization each rely on a connector. A connector is a plug-in component that interfaces between Flow and whatever data system you need to connect to. Here, we'll walk through how to leverage various connectors, configure them, and deploy your Data Flow. ","version":"Next","tagName":"h2"},{"title":"Create a capture​","type":1,"pageTitle":"Create a basic Data Flow","url":"/pr-preview/pr-1594/guides/create-dataflow/#create-a-capture","content":" You'll first create a capture to connect to your data source system. This process will create one or more collections in Flow, which you can then materialize to another system. Go to the Flow web application at dashboard.estuary.dev and sign in using the credentials provided by your Estuary account manager. Click the Sources tab and choose New Capture. Choose the appropriate Connector for your desired data source. A form appears with the properties required for that connector. A documentation page with details about that connector appears in the side panel. You can also browse the connectors reference in your browser. Type a name for your capture. Your capture name must begin with a prefix to which you have access. In the Name field, click the drop-down arrow and select an available prefix. Append a unique capture name after the / to create the full name, for example acmeCo/myFirstCapture. Fill out the required properties and click Next. Flow uses the provided information to initiate a connection to the source system. It identifies one or more data resources — these may be tables, data streams, or something else, depending on the connector. These are each mapped to a collection. The Output Collections browser appears, showing this list of available collections. You can decide which ones you want to capture. Look over the list of available collections. All are selected by default. You can remove collections you don't want to capture, change collection names, and for some connectors, modify other properties. tip Narrow down a large list of available collections by typing in the Search Bindings box. If you're unsure which collections you want to keep or remove, you can look at their schemas. In the Output Collections browser, select a collection and click the Collection tab to view its schema and collection key. . For many source systems, you'll notice that the collection schemas are quite permissive. You'll have the option to apply more restrictive schemas later, when you materialize the collections. If you made any changes to output collections, click Next again. Once you're satisfied with the configuration, click Save and Publish. You'll see a notification when the capture publishes successfully. Click Materialize collections to continue. ","version":"Next","tagName":"h2"},{"title":"Create a materialization​","type":1,"pageTitle":"Create a basic Data Flow","url":"/pr-preview/pr-1594/guides/create-dataflow/#create-a-materialization","content":" Now that you've captured data into one or more collections, you can materialize it to a destination. Find the tile for your desired data destination and click Materialization. The page populates with the properties required for that connector. More details are on each connector are provided in the connectors reference. Choose a unique name for your materialization like you did when naming your capture; for example, acmeCo/myFirstMaterialization. Fill out the required properties in the Endpoint Configuration. Click Next. Flow initiates a connection with the destination system. The Endpoint Config has collapsed and the Source Collections browser is now prominent. It shows each collection you captured previously. All of them will be mapped to a resource in the destination. Again, these may be tables, data streams, or something else. When you publish the Data Flow, Flow will create these new resources in the destination. Now's your chance to make changes to the collections before you materialize them. Optionally remove some collections or add additional collections. Type in the Search Collections box to find a collection. To remove a collection, click the x in its table row. You can also click the Remove All button. Optionally apply a stricter schema to each collection to use for the materialization. Depending on the data source, you may have captured data with a fairly permissive schema. You can tighten up the schema so it'll materialize to your destination in the correct shape. (This isn't necessary for database and SaaS data sources, so the option won't be available.) Choose a collection from the list and click its Collection tab. Click Schema Inference. The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for the materialization. Review the new schema and click Apply Inferred Schema. You can exert even more control over the output data structure using the Field Selector on the Config tab.Learn how. If you've made any changes to source fields, click Next again. Click Save and publish. You'll see a notification when the full Data Flow publishes successfully. ","version":"Next","tagName":"h2"},{"title":"What's next?​","type":1,"pageTitle":"Create a basic Data Flow","url":"/pr-preview/pr-1594/guides/create-dataflow/#whats-next","content":" Now that you've deployed your first Data Flow, you can explore more possibilities. Read the high level concepts to better understand how Flow works and what's possible. Create more complex Data Flows by mixing and matching collections in your captures and materializations. For example: Materialize the same collection to multiple destinations. If a capture produces multiple collections, materialize each one to a different destination. Materialize collections that came from different sources to the same destination. Advanced users can modify collection schemas, apply data reductions, or transform data with a derivation ","version":"Next","tagName":"h2"},{"title":"Configure connections with SSH tunneling","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/connect-network/","content":"","keywords":"","version":"Next"},{"title":"General setup​","type":1,"pageTitle":"Configure connections with SSH tunneling","url":"/pr-preview/pr-1594/guides/connect-network/#general-setup","content":" Activate an SSH implementation on a server, if you don't have one already. Consult the documentation for your server's operating system and/or cloud service provider, as the steps will vary. Configure the server to your organization's standards, or reference the SSH documentation for basic configuration options. Referencing the config files and shell output, collect the following information: The SSH user, which will be used to log into the SSH server, for example, sshuser. You may choose to create a new user for this workflow.The SSH endpoint for the SSH server, formatted as ssh://user@hostname[:port]. This may look like the any of following: ssh://sshuser@ec2-198-21-98-1.compute-1.amazonaws.comssh://sshuser@198.21.98.1ssh://sshuser@198.21.98.1:22 Hint The SSH default port is 22. Depending on where your server is hosted, you may not be required to specify a port, but we recommend specifying :22 in all cases to ensure a connection can be made. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key Taken together, these configuration details would allow you to log into the SSH server from your local machine. They'll allow the connector to do the same. Configure your internal network to allow the SSH server to access your capture or materialization endpoint. To grant external access to the SSH server, it's essential to configure your network settings accordingly. The approach you take will be dictated by your organization's IT policies. One recommended step is to allowlist the Estuary IP addresses. This ensures that connections from this specific IP are permitted through your network's firewall or security measures. ","version":"Next","tagName":"h2"},{"title":"Setup for AWS​","type":1,"pageTitle":"Configure connections with SSH tunneling","url":"/pr-preview/pr-1594/guides/connect-network/#setup-for-aws","content":" To allow SSH tunneling to a database instance hosted on AWS, you'll need to create a virtual computing environment, or instance, in Amazon EC2. Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key Import your SSH key into AWS. Launch a new instance in EC2. During setup: Configure the security group to allow SSH connection from anywhere.When selecting a key pair, choose the key you just imported. Connect to the instance, setting the user name to ec2-user. Find and note the instance's public DNS. This will be formatted like: ec2-198-21-98-1.compute-1.amazonaws.com. ","version":"Next","tagName":"h2"},{"title":"Setup for Google Cloud​","type":1,"pageTitle":"Configure connections with SSH tunneling","url":"/pr-preview/pr-1594/guides/connect-network/#setup-for-google-cloud","content":" To allow SSH tunneling to a database instance hosted on Google Cloud, you must set up a virtual machine (VM). Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key If your Google login differs from your local username, generate a key that includes your Google email address as a comment: ssh-keygen -m PEM -t rsa -C user@domain.com Create and start a new VM in GCP, choosing an image that supports OS Login. Add your public key to the VM. Reserve an external IP address and connect it to the VM during setup. Note the generated address. ","version":"Next","tagName":"h2"},{"title":"Setup for Azure​","type":1,"pageTitle":"Configure connections with SSH tunneling","url":"/pr-preview/pr-1594/guides/connect-network/#setup-for-azure","content":" To allow SSH tunneling to a database instance hosted on Azure, you'll need to create a virtual machine (VM) in the same virtual network as your endpoint database. Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key Create and connect to a VM in a virtual network, and add the endpoint database to the network. Create a new virtual network and subnet. Create a Linux or Windows VM within the virtual network, directing the SSH public key source to the public key you generated previously. Note the VM's public IP; you'll need this later. Create a service endpoint for your database in the same virtual network as your VM. Instructions for Azure Database For PostgreSQL can be found here; note that instructions for other database engines may be different. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Configure connections with SSH tunneling","url":"/pr-preview/pr-1594/guides/connect-network/#configuration","content":" After you've completed the prerequisites, you should have the following parameters: SSH Endpoint / sshEndpoint: the remote SSH server's hostname, or public IP address, formatted as ssh://user@hostname[:port] The SSH default port is 22. Depending on where your server is hosted, you may not be required to specify a port, but we recommend specifying :22 in all cases to ensure a connection can be made. Private Key / privateKey: the contents of the SSH private key file Use these to add SSH tunneling to your capture or materialization definition, either by filling in the corresponding fields in the web app, or by working with the YAML directly. Reference the Connectors page for a YAML sample. ","version":"Next","tagName":"h2"},{"title":"Customize materialized fields","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/customize-materialization-fields/","content":"","keywords":"","version":"Next"},{"title":"Capture desired fields and generate projections​","type":1,"pageTitle":"Customize materialized fields","url":"/pr-preview/pr-1594/guides/customize-materialization-fields/#capture-desired-fields-and-generate-projections","content":" Any field you eventually want to materialize must be included in the collection's schema. It's ok if the field is nested in the JSON structure; you'll flatten the structure with projections. caution In this workflow, you'll edit a collection. This change can impact other downstream materializations and derivations. Use caution and be mindful of any edit's consequences before publishing. ","version":"Next","tagName":"h2"},{"title":"Captured collections​","type":1,"pageTitle":"Customize materialized fields","url":"/pr-preview/pr-1594/guides/customize-materialization-fields/#captured-collections","content":" If the collection you're using was captured directly, follow these steps. Go to the Captures page of the Flow web app and locate the capture that produced the collection. Click the Options button and choose Edit Specification. Under Output Collections, choose the binding that corresponds to the collection. Then, click the Collection tab. In the list of fields, look for the fields you want to materialize. If they're present and correctly named, you can skip toincluding them in the materialization. hint: Compare the field name and pointer. For nested pointers, you'll probably want to change the field name to omit slashes. If your desired fields aren't present or need to be re-named, edit the collection schema manually: Click Edit. Add missing fields to the schema in the correct location based on the source data structure. Click Close. Generate projections for new or incorrectly named fields. If available, click the Schema Inference button. The Schema Inference Window appears. Flow cleans up your schema and adds projections for new fields. Manually change the names of projected fields. These names will be used by the materialization and shown in the endpoint system as column names or the equivalent. Click Next. info Schema Inference isn't available for all capture types. You can also add projections manually with flowctl. Refer to the guide to editing with flowctl andhow to format projections. Repeat steps 3 through 6 with other collections, if necessary. Click Save and Publish. ","version":"Next","tagName":"h3"},{"title":"Derived collections​","type":1,"pageTitle":"Customize materialized fields","url":"/pr-preview/pr-1594/guides/customize-materialization-fields/#derived-collections","content":" If the collection you're using came from a derivation, follow these steps. Pull the derived collection's specification locally using flowctl. flowctl catalog pull-specs --name <yourOrg/full/collectionName> Review the collection's schema to see if the fields of interest are included. If they're present, you can skip toincluding them in the materialization. If your desired fields aren't present or are incorrectly named, add any missing fields to the schema in the correct location based on the source data structure. Use schema inference to generate projections for the fields. flowctl preview --infer-schema --source <full\\path\\to\\flow.yaml> --collection <yourOrg/full/collectionName> Review the updated schema. Manually change the names of projected fields. These names will be used by the materialization and shown in the endpoint system as column names or the equivalent. Re-publish the collection specification. ","version":"Next","tagName":"h3"},{"title":"Include desired fields in your materialization​","type":1,"pageTitle":"Customize materialized fields","url":"/pr-preview/pr-1594/guides/customize-materialization-fields/#include-desired-fields-in-your-materialization","content":" Now that all your fields are present in the collection schema as projections, you can choose which ones to include in the materialization. Every included field will be mapped to a table column or equivalent in the endpoint system. If you haven't created the materialization, begin the process. Pause once you've selected the collections to materialize. If your materialization already exists, navigate to the edit materialization page. In the Collection Selector, choose the collection whose output fields you want to change. Click its Collection tab. Review the listed field. In most cases, Flow automatically detects all fields to materialize, projected or otherwise. However, a projected field may still be missing, or you may want to exclude other fields. If you want to make changes, click Edit. Use the editor to add the fields stanza to the collection's binding specification. Learn more about configuring fields and view a sample specification. Choose whether to start with Flow's recommended fields. Under fields, set recommended to true or false. If you choose true, you can exclude fields later. Use include to add missing projections, or exclude to remove fields. Click Close. Repeat steps 2 through 8 with other collections, if necessary. Click Save and Publish. The named, included fields will be reflected in the endpoint system. ","version":"Next","tagName":"h2"},{"title":"PostgreSQL CDC streaming to Snowflake","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/","content":"","keywords":"","version":"Next"},{"title":"Introduction​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#introduction","content":" In this tutorial, we'll set up a streaming CDC pipeline from PostgreSQL to Snowflake using Estuary Flow. By the end, you’ll have learned everything you need to know about building a pipeline on your own. You'll use Flow's PostgreSQL capture connector and Snowflake materialization connector to set up an end-to-end CDC pipeline in three steps: First, you’ll ingest change event data from a PostgreSQL database, using a table filled with generated realistic product data. Then, you’ll learn how to configure Flow to persist data as collections while maintaining data integrity. And finally, you will see how you can materialize these collections in Snowflake to make them ready for analytics! By the end of this tutorial, you'll have established a robust and efficient data pipeline with near real-time replication of data from PostgreSQL to Snowflake. Before you get started, make sure you do two things. Sign up for Estuary Flow here. It’s simple, fast and free. Make sure you also join the Estuary Slack Community. Don’t struggle. Just ask a question. ","version":"Next","tagName":"h2"},{"title":"What is CDC?​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#what-is-cdc","content":" CDC, or Change Data Capture, is a method used to track and capture changes made to data in a database. It enables the real-time capture of insertions, updates, and deletions, providing a continuous stream of changes. This stream of change data is invaluable for keeping downstream systems synchronized and up-to-date with the source database, facilitating real-time analytics, replication, and data integration. In essence, CDC allows organizations to capture and react to data changes as they occur, ensuring data accuracy and timeliness across their systems. CDC provides a lower-latency, lower-load way to extract data. It’s also often the only way to capture every change as well as deletes, which are harder to track with batch-based extraction. If you are interested in the intricacies of change data capture, head over to this article, where we explain the theory behind it - this is not a requirement for this tutorial, so if you want to dive in head first, keep on reading! ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#prerequisites","content":" This tutorial will assume you have access to the following things: Docker: for convenience, we are providing a docker compose definition which will allow you to spin up a database and a fake data generator service in about 5 seconds! ngrok: Flow is a fully managed service. Because the database used in this tutorial will be running on your machine, you’ll need something to expose it to the internet. ngrok is a lightweight tool that does just that. Snowflake account: The target data warehouse for our flow is Snowflake. In order to follow along with the tutorial, a trial account is perfectly fine. ","version":"Next","tagName":"h2"},{"title":"Step 1. Set up source database​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#step-1-set-up-source-database","content":" ","version":"Next","tagName":"h2"},{"title":"PostgreSQL setup​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#postgresql-setup","content":" As this tutorial is focused on CDC replication from PostgreSQL, we’ll need a database. We recommend you create this database first, so you can learn Flow more easily. Then try these steps on your own database. Let’s take a look at what we are working with! Save the below yaml snippet as a file called docker-compose.yml. This docker-compose.yml file contains the service definitions for the PostgreSQL database and the mock data generator service. Since V2, compose is integrated into your base Docker package, there’s no need to download any separate tooling! docker-compose.yml services: postgres: image: postgres:latest container_name: postgres_cdc hostname: postgres_cdc restart: unless-stopped user: postgres environment: POSTGRES_USER: postgres POSTGRES_DB: postgres POSTGRES_PASSWORD: postgres command: - "postgres" - "-c" - "wal_level=logical" healthcheck: test: ["CMD-SHELL", "sh -c 'pg_isready -U flow_capture -d postgres'"] interval: 5s timeout: 10s retries: 120 volumes: - ./init.sql:/docker-entrypoint-initdb.d/init.sql ports: - "5432:5432" datagen: image: materialize/datagen container_name: datagen restart: unless-stopped environment: POSTGRES_HOST: postgres_cdc POSTGRES_PORT: 5432 POSTGRES_DB: postgres POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres entrypoint: "datagen -s /app/schemas/products.sql -n 10000 -f postgres -w 1000" depends_on: postgres: condition: service_healthy volumes: - ./schemas/products.sql:/app/schemas/products.sql Don’t be alarmed by all these Docker configurations, they are made to be reproducible on any machine, so you don’t have to worry about modifying anything in them! Before you spin up the database, let’s take a quick look at what exactly you can expect to happen. Next up, create a folder called schemas and paste the below SQL DDL into a file called products.sql. This file contains the schema of the demo data. This file defines the schema via a create table statement, but the actual table creation happens in the init.sql file, this is just a quirk of the Datagen data generator tool. products.sql CREATE TABLE "public"."products" ( "id" int PRIMARY KEY, "name" varchar COMMENT 'faker.internet.userName()', "merchant_id" int NOT NULL COMMENT 'faker.datatype.number()', "price" int COMMENT 'faker.datatype.number()', "status" varchar COMMENT 'faker.datatype.boolean()', "created_at" timestamp DEFAULT (now()) ); If you take a closer look at the schema definition, you can see that in the COMMENT attribute we define Python snippets which actually tell Datagen how to generate fake data for those fields! Finally, create the init.sql file, which contains the database-level requirements to enable Flow to stream CDC data. init.sql CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION; GRANT pg_read_all_data TO flow_capture; CREATE TABLE products ( "id" int PRIMARY KEY, "name" varchar COMMENT 'faker.internet.userName()', "merchant_id" int NOT NULL COMMENT 'faker.datatype.number()', "price" int COMMENT 'faker.datatype.number()', "status" varchar COMMENT 'faker.datatype.boolean()', "created_at" timestamp DEFAULT (now()) ); CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, public.products; In the init.sql file, you create the products table and all the database objects Flow requires for real-time CDC streaming. ","version":"Next","tagName":"h3"},{"title":"Configuring PostgreSQL for CDC​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#configuring-postgresql-for-cdc","content":" To enable CDC replication in PostgreSQL, several database objects need to be created and configured. These objects facilitate the capture and propagation of data changes to downstream systems. Let's examine each object and its significance in the context of CDC replication: CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION; This user is dedicated to the CDC replication process. It is granted the necessary permissions to read all data from the database, allowing it to capture changes across tables efficiently. In a production environment, make sure you use a more secure password than what is in the example. GRANT pg_read_all_data TO flow_capture; Granting the pg_read_all_data privilege to the flow_capture user ensures that it can access and read data from all tables in the database, essential for capturing changes. pg_read_all_data is used for convenience, but is not a hard requirement, since it is possible to grant a more granular set of permissions. For more details check out the connector docs. CREATE TABLE products (...) The source tables, such as the products table in this example, contain the data whose changes we want to capture and replicate. It is recommended for tables to have a primary key defined, although not a hard requirement for CDC. CREATE TABLE IF NOT EXISTS public.flow_watermarks (...) The flow_watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; The flow_capture user needs full privileges on the flow_watermarks table to insert, update, and query metadata related to the replication process. CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, public.products; A publication defines a set of tables whose changes will be replicated. In this case, the flow_publication publication includes the public.flow_watermarks and public.products tables. These commands configure the flow_publication publication to publish changes via partition root and add the specified tables to the publication. By setting publish_via_partition_root to true, the publication ensures that updates to partitioned tables are correctly captured and replicated. The table in this tutorial is not partitioned, but we recommend always setting publish_via_partition_root when creating a publication. These objects form the backbone of a robust CDC replication setup, ensuring data consistency and integrity across systems. After the initial setup, you will not have to touch these objects in the future, unless you wish to start ingesting change events from a new table. With that out of the way, you’re ready to start the source database. In order to initialize Postgres and the fake data generator service, all you have to do is execute the following (to free up your current terminal, use the -d flag so the containers run in a daemonized background process): docker compose up After a few seconds, you should see that both services are up and running. The postgres_cdc service should print the following on the terminal: postgres_cdc | LOG: database system is ready to accept connections While the datagen service will be a little bit more spammy, as it prints every record it generates, but don’t be alarmed, this is enough for us to verify that both are up and running. Let’s see how we can expose the database so Flow can connect to it. ","version":"Next","tagName":"h3"},{"title":"Expose the database to the internet via ngrok​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#expose-the-database-to-the-internet-via-ngrok","content":" As mentioned above, the next step is to make the database available for other services. To do this in one quick command, we can use ngrok, a free CLI tool that enables tunneling of services. In our case we only want to expose the port 5432 and only the tcp protocol. ngrok tcp 5432 You should immediately be greeted with a screen that contains the public URL for the tunnel we just started! In the example above, the public URL 5.tcp.eu.ngrok.io:14407 is mapped to localhost:5432, which is the address of the Postgres database. Don’t close this window while working on the tutorial as this is required to keep the connections between Flow and the database alive. Before we jump into setting up the replication, you can quickly verify the data being properly generated by connecting to the database and peeking into the products table, as shown below: ~ psql -h 5.tcp.eu.ngrok.io -p 14407 -U postgres -d postgres Password for user postgres: psql (16.2) Type "help" for help. postgres=# \\d List of relations Schema | Name | Type | Owner --------+-----------------+-------+---------- public | flow_watermarks | table | postgres public | products | table | postgres (2 rows) postgres=# select count(*) from products; count ------- 2637 (1 row) postgres=# select count(*) from products; count ------- 2642 (1 row) By executing a count(*) statement a few seconds apart you are able to verify that data is in fact being written into the table. ","version":"Next","tagName":"h3"},{"title":"Step 2. Set up a Capture​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#step-2-set-up-a-capture","content":" Good news, the hard part is over! Smooth sailing from here on out. Head over to your Flow dashboard (if you haven’t registered yet, you can do so here.) and create a new Capture. A capture is how Flow ingests data from an external source. Every Data Flow starts with a Capture. Go to the sources page by clicking on the Sources on the left hand side of your screen, then click on + New Capture Configure the connection to the database based on the information we gathered in the previous step and press Next. On the following page, we can configure how our incoming data should be represented in Flow as collections. As a quick refresher, let’s recap how Flow represents data on a high level. Documents The documents of your flows are stored in collections: real-time data lakes of JSON documents in cloud storage. Documents being backed by an object storage mean that once you start capturing data, you won’t have to worry about it not being available to replay – object stores such as S3 can be configured to cheaply store data forever. See docs page for more information. Schemas Flow documents and collections always have an associated schema that defines the structure, representation, and constraints of your documents. In most cases, Flow generates a functioning schema on your behalf during the discovery phase of capture, which has already automatically happened - that’s why you’re able to take a peek into the structure of the incoming data! To see how Flow parsed the incoming records, click on the Collection tab and verify the inferred schema looks correct. Before you advance to the next step, let’s take a look at the other configuration options we have here. You’ll see three toggles, all turned on by default: Automatically keep schemas up to date Automatically add new source collections Breaking changes re-version collections All of these settings relate to how Flow handles schema evolution, so let’s take a quick detour to explain them from a high-level perspective. Estuary Flow's schema evolution feature seamlessly handles updates to dataset structures within a Data Flow, ensuring uninterrupted operation. Collection specifications define each dataset, including key, schema, and partitions. When specs change, schema evolution automatically updates associated components to maintain compatibility. It addresses breaking changes by updating materializations or recreating collections with new names, preventing disruptions. Common causes of breaking changes include modifications to collection schemas, which require updates to materializations. Overall, schema evolution streamlines adaptation to structural changes, maintaining smooth data flow within the system. For more information, check out the dedicated documentation page for schema evolution. For the sake of this tutorial, feel free to leave everything at its default setting and press Next again, then Save and Publish to deploy the connector and kick off a backfill. ","version":"Next","tagName":"h2"},{"title":"Step 3. Set up a Materialization​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#step-3-set-up-a-materialization","content":" Similarly to the source side, we’ll need to set up some initial configuration in Snowflake to allow Flow to materialize collections into a table. Preparing Snowflake for use with Estuary Flow involves the following steps: 1. Keep the Flow web app open and open a new tab or window to access your Snowflake console. 3. Create a new SQL worksheet. This provides a platform to execute queries. 4. Paste the provided script into the SQL console, adjusting the value for estuary_password to a strong password. set database_name = 'ESTUARY_DB'; set warehouse_name = 'ESTUARY_WH'; set estuary_role = 'ESTUARY_ROLE'; set estuary_user = 'ESTUARY_USER'; set estuary_password = 'secret'; set estuary_schema = 'ESTUARY_SCHEMA'; -- create role and schema for Estuary create role if not exists identifier($estuary_role); grant role identifier($estuary_role) to role SYSADMIN; -- Create snowflake DB create database if not exists identifier($database_name); use database identifier($database_name); create schema if not exists identifier($estuary_schema); -- create a user for Estuary create user if not exists identifier($estuary_user) password = $estuary_password default_role = $estuary_role default_warehouse = $warehouse_name; grant role identifier($estuary_role) to user identifier($estuary_user); grant all on schema identifier($estuary_schema) to identifier($estuary_role); -- create a warehouse for estuary create warehouse if not exists identifier($warehouse_name) warehouse_size = xsmall warehouse_type = standard auto_suspend = 60 auto_resume = true initially_suspended = true; -- grant Estuary role access to warehouse grant USAGE on warehouse identifier($warehouse_name) to role identifier($estuary_role); -- grant Estuary access to database grant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role); -- change role to ACCOUNTADMIN for STORAGE INTEGRATION support to Estuary (only needed for Snowflake on GCP) use role ACCOUNTADMIN; grant CREATE INTEGRATION on account to role identifier($estuary_role); use role sysadmin; COMMIT; 5. Execute all the queries by clicking the drop-down arrow next to the Run button and selecting "Run All." 6. Snowflake will process the queries, setting up the necessary roles, databases, schemas, users, and warehouses for Estuary Flow. 7. Once the setup is complete, return to the Flow web application to continue with the integration process. Back in Flow, head over to the Destinations page, where you can create a new Materialization. Choose Snowflake and start filling out the connection details based on the values inside the script you executed in the previous step. If you haven’t changed anything, this is how the connector configuration should look like: You can grab your Snowflake host URL and account identifier by navigating to these two little buttons on the Snowflake UI. If you scroll down to the Advanced Options section, you will be able to configure the "Update Delay" parameter. If you leave this parameter unset, the default value of 30 minutes will be used. The Update Delay parameter in Estuary materializations offers a flexible approach to data ingestion scheduling. It represents the amount of time the system will wait before it begins materializing the latest data. For example, if an update delay is set to 2 hours, the materialization task will pause for 2 hours before processing the latest available data. This delay ensures that data is not pulled in immediately after it becomes available, allowing your Snowflake warehouse to go idle and be suspended in between updates, which can significantly reduce the number of credits consumed. After the connection details are in place, the next step is to link the capture we just created to Flow is able to see collections we are loading data into from Postgres. You can achieve this by clicking on the “Source from Capture” button, and selecting the name of the capture from the table. After pressing continue, you are met with a few configuration options, but for now, feel free to press Next, then Save and Publish in the top right corner, the defaults will work perfectly fine for this tutorial. A successful deployment will look something like this: And that’s pretty much it, you’ve successfully published a real-time CDC pipeline. Let’s check out Snowflake to see how the data looks. Looks like the data is arriving as expected, and the schema of the table is properly configured by the connector based on the types of the original table in Postgres. To get a feel for how the data flow works; head over to the collection details page on the Flow web UI to see your changes immediately. On the Snowflake end, they will be materialized after the next update. Based on your configuration of the "Update Delay" parameter when setting up the Snowflake Materialization, you might have to wait until the configured amount of time passes for your changes to make it to the destination. ","version":"Next","tagName":"h2"},{"title":"Party time!​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#party-time","content":" Congratulations! 🎉 You've successfully set up a CDC pipeline from PostgreSQL to Snowflake using Estuary Flow. In just a few minutes, you've learned how to configure log-based CDC replication, handle schema evolution, and deploy a robust data integration solution. Take a moment to celebrate your achievement! You've not only gained valuable technical knowledge but also demonstrated the agility and efficiency of modern data engineering practices. With your newfound skills, you're well-equipped to tackle complex data challenges and drive innovation in your organization. ","version":"Next","tagName":"h2"},{"title":"Clean up​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#clean-up","content":" After every party, it’s customary to clean up after ourselves. After you are done exploring the flow, make sure to remove any resources which you won’t use anymore! Postgres Simply stop the Docker containers & terminate the ngrok process. This will terminate both the database process and the tunnel which exposed it to the internet. Snowflake To clean up resources in Snowflake use the following SQL script. snowflake_cleanup.sql -- Revoke all privileges from Estuary role revoke all privileges on schema ESTUARY_SCHEMA from role ESTUARY_ROLE; revoke all privileges on database ESTUARY_DB from role ESTUARY_ROLE; -- Drop the warehouse drop warehouse if exists ESTUARY_WH; -- Drop the role and user drop user if exists ESTUARY_USER; drop role if exists ESTUARY_ROLE; -- Drop the schema and database drop schema if exists ESTUARY_SCHEMA; drop database if exists ESTUARY_DB; Flow In the UI, disable or delete any resources you don’t wish to keep. ","version":"Next","tagName":"h2"},{"title":"Next Steps​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#next-steps","content":" That’s it! You should have everything you need to know to create your own data pipeline for loading data into Snowflake!  Now try it out on your own PostgreSQL database or other sources. If you want to learn more, make sure you read through the Estuary documentation. You’ll find instructions on how to use other connectors here. There are more tutorials here.  Also, don’t forget to join the Estuary Slack Community! ","version":"Next","tagName":"h2"},{"title":"Connecting to Estuary Flow from Kafka using Dekaf","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/","content":"","keywords":"","version":"Next"},{"title":"Overview​","type":1,"pageTitle":"Connecting to Estuary Flow from Kafka using Dekaf","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/#overview","content":" Collections represent datasets within Estuary Flow. All captured documents are written to a collection, and all materialized documents are read from a collection.Dekaf enables you to interact with these collections as though they were Kafka topics, providing seamless integration with existing Kafka-based tools and workflows. ","version":"Next","tagName":"h2"},{"title":"Key Features​","type":1,"pageTitle":"Connecting to Estuary Flow from Kafka using Dekaf","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/#key-features","content":" Kafka Topic Emulation: Access Estuary Flow collections as if they were Kafka topics.Schema Registry Emulation: Manage and retrieve schemas assigned to Estuary Flow collections, emulating Confluent's Schema Registry. ","version":"Next","tagName":"h2"},{"title":"Connection Details​","type":1,"pageTitle":"Connecting to Estuary Flow from Kafka using Dekaf","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/#connection-details","content":" To connect to Estuary Flow via Dekaf, you need the following connection details: Broker Address: dekaf.estuary.devSchema Registry Address: https://dekaf.estuary.devSecurity Protocol: SASL_SSLSASL Mechanism: PLAINSASL Username: {}SASL Password: Estuary Refresh Token (Generate your token in the Estuary Admin Dashboard)Schema Registry Username: {}Schema Registry Password: The same Estuary Refresh Token as above ","version":"Next","tagName":"h2"},{"title":"How to Connect to Dekaf​","type":1,"pageTitle":"Connecting to Estuary Flow from Kafka using Dekaf","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/#how-to-connect-to-dekaf","content":" ","version":"Next","tagName":"h2"},{"title":"1. Generate an Estuary Refresh Token:​","type":1,"pageTitle":"Connecting to Estuary Flow from Kafka using Dekaf","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/#1-generate-an-estuary-refresh-token","content":" Log in to the Estuary Admin Dashboard.Navigate to the section where you can generate tokens.Generate a new refresh token and note it down securely. ","version":"Next","tagName":"h3"},{"title":"2. Set Up Your Kafka Client​","type":1,"pageTitle":"Connecting to Estuary Flow from Kafka using Dekaf","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/#2-set-up-your-kafka-client","content":" Configure your Kafka client using the connection details provided. Example Kafka Client Configuration​ Below is an example configuration for a Kafka client using Python’s kafka-python library: from kafka import KafkaConsumer # Configuration details conf = { 'bootstrap_servers': 'dekaf.estuary.dev:9092', 'security_protocol': 'SASL_SSL', 'sasl_mechanism': 'PLAIN', 'sasl_plain_username': '{}', 'sasl_plain_password': 'Your_Estuary_Refresh_Token', 'group_id': 'your_group_id', 'auto_offset_reset': 'earliest' } # Create Consumer instance consumer = KafkaConsumer( 'your_topic_name', bootstrap_servers=conf['bootstrap_servers'], security_protocol=conf['security_protocol'], sasl_mechanism=conf['sasl_mechanism'], sasl_plain_username=conf['sasl_plain_username'], sasl_plain_password=conf['sasl_plain_password'], group_id=conf['group_id'], auto_offset_reset=conf['auto_offset_reset'], enable_auto_commit=True, value_deserializer=lambda x: x.decode('utf-8') ) # Poll for messages try: for msg in consumer: print(f"Received message: {msg.value}") except KeyboardInterrupt: pass finally: consumer.close() You can also use kcat (formerly known as kafkacat) to test reading messages from an Estuary Flow collection as if it were a Kafka topic. kcat -C \\ -X broker.address.family=v4 \\ -X security.protocol=SASL_SSL \\ -X sasl.mechanism=PLAIN \\ -X sasl.username="{}" \\ -X sasl.password="Your_Estuary_Refresh_Token" \\ -b dekaf.estuary.dev:9092 \\ -t "full/nameof/estuarycolletion" \\ -p 0 \\ -o beginning \\ -s avro \\ -r https://{}:{Your_Estuary_Refresh_Token}@dekaf.estuary.dev ","version":"Next","tagName":"h3"},{"title":"How to transform data using SQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/derivation_tutorial_sql/","content":"","keywords":"","version":"Next"},{"title":"Introduction​","type":1,"pageTitle":"How to transform data using SQL","url":"/pr-preview/pr-1594/guides/derivation_tutorial_sql/#introduction","content":" This tutorial will show you how to implement a stateless transformation using SQL. You’ll learn how to implement a flow that transforms events coming from the live, real-time Wikipedia API. ","version":"Next","tagName":"h2"},{"title":"Setting up your development environment​","type":1,"pageTitle":"How to transform data using SQL","url":"/pr-preview/pr-1594/guides/derivation_tutorial_sql/#setting-up-your-development-environment","content":" In order to implement transformations through derivations, you’ll need to set up your development environment. You’ll need a text editor and flowtcl, the CLI-tool for Flow installed on your machine. Check out the docs page on installation instructions. Before continuing, sign in to the Estuary Flow dashboard, make sure you enable access to the Wikipedia demo. Using flowtcl, quickly verify you are able to view the demo collections used in this guide. Execute the below command to display the documents in the demo/wikipedia/recentchange-sampled collection: ::note This collection is a 3% sample of the enormous demo/wikipedia/recentchange collection which contains millions of documents. Since the purpose of this tutorial is to demonstrate a proof of concept, we avoid publishing a derivation that processes hundreds of gigabytes of data. ::: flowctl collections read --collection demo/wikipedia/recentchange-sampled --uncommitted If you see a stream of JSON documents on your terminal, you’re all good - feel free to cancel the process by pressing C^C. Examine a sample JSON that lives in the demo collection, as this is the data you’ll be using as the input for our derivation. { "$schema": "/mediawiki/recentchange/1.0.0", "_meta": { "file": "recentchange", "offset": 12837, "uuid": "f8f07d87-f5bf-11ee-8401-4fdf95f7b91a" }, "bot": false, "comment": "[[:File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg]] added to category", "id": 2468434138, "meta": { "domain": "commons.wikimedia.org", "dt": "2024-04-08T15:52:13Z", "id": "d9e8698f-4eac-4262-a451-b7ca247e401c", "offset": 5008568732, "partition": 0, "request_id": "b5372124-63fa-45e1-b35e-86784f1692bc", "stream": "mediawiki.recentchange", "topic": "eqiad.mediawiki.recentchange", "uri": "https://commons.wikimedia.org/wiki/Category:Jetons" }, "namespace": 14, "notify_url": "https://commons.wikimedia.org/w/index.php?diff=866807860&oldid=861559382&rcid=2468434138", "parsedcomment": "<a href=\\"/wiki/File:Jeton._Ordinaire_des_guerres_-_btv1b10405460g_(1_of_2).jpg\\" title=\\"File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg\\">File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg</a> added to category", "server_name": "commons.wikimedia.org", "server_script_path": "/w", "server_url": "https://commons.wikimedia.org", "timestamp": 1712591533, "title": "Category:Jetons", "title_url": "https://commons.wikimedia.org/wiki/Category:Jetons", "type": "categorize", "user": "DenghiùComm", "wiki": "commonswiki" } The transformation in this tutorial will make use of the length, bot and user_id fields to calculate how many lines a given non-bot user has modified on a day. { ... "user_id": "User" "bot": 0 "length": 1253 ... } ","version":"Next","tagName":"h2"},{"title":"Writing the derivation​","type":1,"pageTitle":"How to transform data using SQL","url":"/pr-preview/pr-1594/guides/derivation_tutorial_sql/#writing-the-derivation","content":" Set up your folder structure so you can organize the resources required for the derivation. Create a working directory to follow along, and inside, create a flow.yaml file. Inside your flow.yaml file, add the following contents: --- collections: Dani/derivation-tutorial/edits-by-users: schema: type: object properties: user_id: type: string date: format: date type: string total_edits: reduce: strategy: sum type: number total_new_lines: reduce: strategy: sum type: number reduce: strategy: merge required: - date - user_id key: - /date - /user_id derive: using: sqlite: {} transforms: - name: edits_by_users source: demo/wikipedia/recentchange-sampled shuffle: any lambda: | select $user as user_id, substr($meta$dt,1,10) as date, 1 as total_edits, coalesce($length$new - $length$old, 0) as total_new_lines where $type = 'edit' and $user is not null and $bot = 0;   The Flow consists of just one collection, which is what you define here, called edits-by-users. Let’s go over this in a bit more detail. First of all, the collection needs a schema. The schema of the incoming data (also called the “write” schema) is already defined by the demo, you only have to define the schema of the documents the transformation will output, which is the “read” schema. In the flow.yaml file, the schema is defined in-line with the rest of the configuration. schema: type: object properties: user_id: type: string date: format: date type: string total_edits: reduce: strategy: sum type: number total_new_lines: reduce: strategy: sum type: number reduce: strategy: merge required: - date - user_id As you can see, this schema includes less fields than what is available in the incoming documents, this is expected, but if you wish to include more, this is where you would add them first. The user_id and date fields do not contain any modifications, but the other two have their reduction strategy defined as well to be sum. This strategy reduces two numbers or integers by adding their values. To learn more about how reduction strategies work, check out the documentation page. Moving on, the next section in the yaml file defines the key of the documents. key: - /date - /user_id Every Flow collection must declare a key which is used to group its documents. Keys are specified as an array of JSON pointers to document locations. The important detail here is to know that a collection key instructs Flow how documents of a collection are to be reduced, such as while being materialized to an endpoint. The final section is where you specify that this collection is derived from another collection. derive: using: sqlite: {} transforms: - name: edits_by_users source: demo/wikipedia/recentchange-sampled shuffle: any lambda: | select $user as user_id, substr($meta$dt,1,10) as date, 1 as total_edits, coalesce($length$new - $length$old, 0) as total_new_lines where $type = 'edit' and $user is not null and $bot = 0; Here you define the SQL statement that gets executed on the documents of the source collection. The source: demo/wikipedia/recentchange-sampled property lets Flow know that the source collection is the demo collection from mentioned at in the beginning of the tutorial while shuffle tells Flow how to colocate documents while processing, which in this case is set to any, meaning source documents can be processed by any available compute. The SQL is straightforward select $user as user_id, substr($meta$dt,1,10) as date, 1 as total_edits, coalesce($length$new - $length$old, 0) as total_new_lines where $type = 'edit' and $user is not null and $bot = 0 We select the user_id, parse the event date and calculate the amount of line changes. We also select 1 for the value of total_edits, this is important because during the reduction phase, due to having selected sum as the strategy, these values will get added together to form the total number of edits in the result. We also filter out non-edit events, bot users or events without a user_id to have a somewhat clean dataset. ","version":"Next","tagName":"h2"},{"title":"Verify​","type":1,"pageTitle":"How to transform data using SQL","url":"/pr-preview/pr-1594/guides/derivation_tutorial_sql/#verify","content":" You can use flowctl to quickly verify your derivation before publishing it. Use the preview command to get an idea of the resulting collections. flowctl preview --source flow.yaml --name Dani/derivation-tutorial/edits-by-users {"date":"2024-04-08","total_edits":3,"total_new_lines":110,"user_id":"Renamerr"} {"date":"2024-04-08","total_edits":1,"total_new_lines":769,"user_id":"Sebring12Hrs"} {"date":"2024-04-08","total_edits":5,"total_new_lines":3360,"user_id":"Sic19"} {"date":"2024-04-08","total_edits":1,"total_new_lines":82,"user_id":"Simeon"} ^C As you can see, the output format matches the defined schema. The last step would be to publish your derivation to Flow, which you can also do using flowctl. Publishing the derivation will initialize the transformation on the live, real-time Wikipedia stream, make sure to delete it after completing the tutorial. flowctl catalog publish --source flow.yaml After successfully publishing your derivation, head over to the Collections page on the Web UI and you will be able to see your derivation in action! ","version":"Next","tagName":"h2"},{"title":"Wrapping up​","type":1,"pageTitle":"How to transform data using SQL","url":"/pr-preview/pr-1594/guides/derivation_tutorial_sql/#wrapping-up","content":" In this guide you learned how to write your first stateless SQL derivation to filter data in a collection. ","version":"Next","tagName":"h2"},{"title":"flowctl guides","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/flowctl/","content":"flowctl guides The guides in this section cover common workflows using the Estuary Flow CLI, flowctl. Learn how to edit published Flow entities, create derivations, and more. To get to know flowctl, see the concepts page.","keywords":"","version":"Next"},{"title":"Edit Data Flows in the web app","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/edit-data-flows/","content":"","keywords":"","version":"Next"},{"title":"Edit a capture​","type":1,"pageTitle":"Edit Data Flows in the web app","url":"/pr-preview/pr-1594/guides/edit-data-flows/#edit-a-capture","content":" Go to the Sources page of the web app. Locate the capture you'd like to edit. Click the Options button in its table row, then click Edit specification. The Edit Capture page opens. Edit the connection to the destination system, if desired. You can either update fields in the Endpoint Config section or manually update the JSON in the Advanced Specification Editor. caution You may have to re-authenticate with the source system. Be sure to have current credentials on hand before editing the endpoint configuration. Use the Output Collections browser to add or remove collections from the capture, if desired. To refresh your connection with the source and see an updated list of possible collections, click the Refresh button, but be aware that it will overwrite all existing collection selections. Use the Schema Inference tool, if desired. This option is available for source systems with permissive schemas, such as NoSQL databases and cloud storage. Flow can help you tighten up the schema to be used for downstream tasks in your Data Flow. In the Output Collections browser, choose a collection and click its Collection tab. Click Schema Inference The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for downstream tasks like materializations and derivations. Review the new schema and click Apply Inferred Schema. When you're done making changes, click Next. Click Save and Publish. Editing a capture only affects how it will work going forward. Data that was captured before editing will reflect the original configuration. Edit a materialization To edit a materialization: Go to the Destinations page of the web app. Locate the materialization you'd like to edit. Click the Options button in its table row, then click Edit specification. The Edit Materialization page opens. Edit the connection to the destination system, if desired. You can either update fields in the Endpoint Config section or manually update the JSON in the Advanced Specification Editor. caution You may have to re-authenticate with the destination system. Be sure to have current credentials on hand before editing the endpoint configuration. Use the Source Collections browser to add or remove collections from the materialization, if desired. Optionally apply a stricter schema to each collection to use for the materialization. This option is available for collections captured from source systems with permissive schemas, such as NoSQL databases and cloud storage. Flow can help you tighten up the schema to be used for downstream tasks in your Data Flow. In the Source Collections browser, choose a collection and click its Collection tab. Click Schema Inference The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for the materialization. Review the new schema and click Apply Inferred Schema. When you're done making changes, click Next. Click Save and Publish. Editing a materialization only affects how it will work going forward. Data that was materialized before editing will reflect the original configuration. ","version":"Next","tagName":"h2"},{"title":"Advanced editing​","type":1,"pageTitle":"Edit Data Flows in the web app","url":"/pr-preview/pr-1594/guides/edit-data-flows/#advanced-editing","content":" For more fine-grain control over editing, you can use flowctl and work directly on specification files in your local environment.View the tutorial. ","version":"Next","tagName":"h2"},{"title":"Edit a draft created in the web app","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Edit a draft created in the web app","url":"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/#prerequisites","content":" To complete this workflow, you need: An Estuary account flowctl installed locally ","version":"Next","tagName":"h2"},{"title":"Identify the draft and pull it locally​","type":1,"pageTitle":"Edit a draft created in the web app","url":"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/#identify-the-draft-and-pull-it-locally","content":" Drafts aren't currently visible in the Flow web app, but you can get a list with flowctl. Authorize flowctl. Go to the CLI-API tab of the web app and copy your access token. Run flowctl auth token --token <paste-token-here> Run flowctl draft list flowctl outputs a table of all the drafts to which you have access, from oldest to newest. Use the name and timestamp to find the draft you're looking for. Each draft has an ID, and most have a name in the Details column. Note the # of Specs column. For drafts created in the web app, materialization drafts will always contain one specification. A number higher than 1 indicates a capture with its associated collections. Copy the draft ID. Select the draft: flowctl draft select --id <paste-id-here>. Pull the draft source files to your working directory: flowctl draft develop. Browse the source files. The source files and their directory structure will look slightly different depending on the draft. Regardless, there will always be a top-level file called flow.yaml that imports all other YAML files, which you'll find in a subdirectory named for your catalog prefix. These, in turn, contain the specifications you'll want to edit. ","version":"Next","tagName":"h2"},{"title":"Edit the draft and publish​","type":1,"pageTitle":"Edit a draft created in the web app","url":"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/#edit-the-draft-and-publish","content":" Next, you'll make changes to the specification(s), test, and publish the draft. Open the YAML files that contain the specification you want to edit. Make changes. For guidance on how to construct Flow specifications, see the documentation for the entity type: CapturesCollectionsMaterializations When you're done, sync the local work to the global draft: flowctl draft author --source flow.yaml. Specifying the top-level flow.yaml file as the source ensures that all entities in the draft are imported. Publish the draft: flowctl draft publish Once this operation completes successfully, check to verify if the entity or entities are live. You can: Go to the appropriate tab in the Flow web app. Run flowctl catalog list, filtering by --name, --prefix, or entity type, for example --capture. If you're not satisfied with the published entities, you can continue to edit them. See the other guides for help: Edit in the web app.Edit with flowctl. ","version":"Next","tagName":"h2"},{"title":"Create a derivation with flowctl","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Create a derivation with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/#prerequisites","content":" A Flow account and access to the web app. If you don't have an account yet, go to the web app to register for free. An existing Flow collection. Typically, you create this through a capture in the Flow web application. If you need help, see the guide to create a Data Flow. A development environment to work with flowctl. Choose between: GitPod, the cloud development environment integrated with Flow. GitPod comes ready for derivation writing, with stubbed out files and flowctl installed. You'll need a GitLab, GitHub, or BitBucket account to log in. Your local development environment. Install flowctl locally ","version":"Next","tagName":"h2"},{"title":"Get started with GitPod​","type":1,"pageTitle":"Create a derivation with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/#get-started-with-gitpod","content":" You'll write your derivation using GitPod, a cloud development environment integrated in the Flow web app. Navigate to the Collections page in Flow. Click on the New Transformation button. The Derive A New Collection pop-up window appears. In the Available Collections dropdown, select the collection you want to use as the source. For example, if your organization is acmeCo, you might choose the acmeCo/resources/anvils collection. Set the transformation language to either SQL and TypeScript. SQL transformations can be a more approachable place to start if you're new to derivations. TypeScript transformations can provide more resiliency against failures through static type checking. Give your derivation a name. From the dropdown, choose the name of your catalog prefix and append a unique name, for example acmeCo/resources/anvil-status. Click Proceed to GitPod to create your development environment. Sign in with one of the available account types. On the New Workspace screen, keep the Context URL option selected and click Continue. A GitPod development environment opens. A stubbed-out derivation with a transformation has already been created for you in the language you chose. Next, you'll locate and open the source files. Each slash-delimited prefix of your derivation name has become a folder. Open the nested folders to find the flow.yaml file with the derivation specification. Following the example above, you'd open the folders called acmeCo, then resources to find the correct flow.yaml file. The file contains a placeholder collection specification and schema for the derivation. In the same folder, you'll also find supplementary TypeScript or SQL files you'll need for your transformation. Continue with SQL Continue with TypeScript Authentication When you first connect to GitPod, you will have already authenticated Flow, but if you leave GitPod opened for too long, you may have to reauthenticate Flow. To do this: Go to the CLI-API tab of the web app and copy your access token. Run flowctl auth token --token <paste-token-here> in the GitPod terminal. ","version":"Next","tagName":"h2"},{"title":"Add a SQL derivation in GitPod​","type":1,"pageTitle":"Create a derivation with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/#add-a-sql-derivation-in-gitpod","content":" If you chose SQL as your transformation language, follow these steps. Along with the derivation's flow.yaml you found in the previous steps, there are two other files: A lambda file. This is where you'll write your first SQL transformation. Its name follows the pattern derivation-name.lambda.source-collection-name.sql. Using the example above, it'd be called anvil-status.lambda.anvils.sql. A migrations file. Migrations allow you to leverage other features of the sqlite database that backs your derivation by creating tables, indices, views, and more. Its name follows the pattern derivation-name.migration.0.sql. Using the example above, it'd be called anvil-status.migration.0.sql. Open the flow.yaml file for your derivation. It looks something like this: collections: acmeCo/resources/anvil-status: schema: properties: your_key: type: string required: - your_key type: object key: - /your_key derive: using: sqlite: migrations: - anvil-status.migration.0.sql transforms: - name: anvils source: acmeCo/resources/anvils shuffle: any lambda: anvil-status.lambda.anvils.sql Note the stubbed out schema and key. Write the schema you'd like your derivation to conform to and specify its collection key. Keep in mind: The source collection's schema. The transformation required to get from the source schema to the new schema. Give the transform a unique name (by default, it's the name of the source collection). In the lambda file, write your SQL transformation. Tip For help writing your derivation, start with these examples: Continuous materialized view tutorialAcme Bank examples The main derivations page includes many other examples and in-depth explanations of how derivations work. If necessary, open the migration file and write your migration. Preview the derivation locally. flowctl preview --source flow.yaml If the preview output appears as expected, publish the derivation. flowctl catalog publish --source flow.yaml The derivation you created is now live and ready for further use. You can access it from the web application and materialize it to a destination, just as you would any other Flow collection. ","version":"Next","tagName":"h2"},{"title":"Add a TypeScript derivation in GitPod​","type":1,"pageTitle":"Create a derivation with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/#add-a-typescript-derivation-in-gitpod","content":" If you chose TypeScript as your transformation language, follow these steps. Along with the derivation's flow.yaml you found in the previous steps, there's another file for the TypeScript transformation. It follows the naming convention derivation-name.ts. Using the example above, it'd be called anvil-status.ts. Open the flow.yaml file for your derivation. It looks something like this: collections: acmeCo/resources/anvil-status: schema: properties: your_key: type: string required: - your_key type: object key: - /your_key derive: using: typescript: module: anvil-status.ts transforms: - name: anvils source: acmeCo/resources/anvils shuffle: any Note the stubbed out schema and key. Write the schema you'd like your derivation to conform to and specify the collection key. Keep in mind: The source collection's schema. The transformation required to get from the source schema to the new schema. Give the transform a unique name (by default, it's the name of the source collection). In the TypeScript file, write your transformation. Tip For help writing a TypeScript derivation, start with this example. The main derivations page includes many other examples and in-depth explanations of how derivations work. Preview the derivation locally. flowctl preview --source flow.yaml If the preview output appears how you'd expect, publish the derivation. flowctl catalog publish --source flow.yaml The derivation you created is now live and ready for further use. You can access it from the web application and materialize it to a destination, just as you would any other Flow collection. ","version":"Next","tagName":"h2"},{"title":"Create a derivation locally​","type":1,"pageTitle":"Create a derivation with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/#create-a-derivation-locally","content":" Creating a derivation locally is largely the same as using GitPod, but has some extra steps. Those extra steps are explained here, but you'll find more useful context in the sections above. Authorize flowctl. Go to the CLI-API tab of the web app and copy your access token. Run flowctl auth token --token <paste-token-here> in your local environment. Locate the source collection for your derivation. Check the web app's Collections. All published entities to which you have access are listed and can be searched. Run flowctl catalog list --collections. This command returns a complete list of collections to which you have access. You can refine by specifying a --prefix. Pull the source collection locally using the full collection name. flowctl catalog pull-specs --name acmeCo/resources/anvils The source files are written to your current working directory. Each slash-delimited prefix of your collection name has become a folder. Open the nested folders to find the flow.yaml file with the collection specification. Following the example above, you'd open the folders called acmeCo, then resources to find the correct flow.yaml file. The file contains the source collection specification and schema. Add the derivation as a second collection in the flow.yaml file. Write the schema you'd like your derivation to conform to and specify the collection key. Reference the source collection's schema, and keep in mind the transformation required to get from the source schema to the new schema. Add the derive stanza. See examples for SQL and TypeScript above. Give your transform a a unique name. Stub out the SQL or TypeScript files for your transform. flowctl generate --source flow.yaml Locate the generated file, likely in the same subdirectory as the flow.yaml file you've been working in. Write your transformation. Preview the derivation locally. flowctl preview --source flow.yaml If the preview output appears how you'd expect, publish the derivation. flowctl catalog publish --source flow.yaml The derivation you created is now live and ready for further use. You can access it from the web application and materialize it to a destination, just as you would any other Flow collection. ","version":"Next","tagName":"h2"},{"title":"Updating an existing derivation​","type":1,"pageTitle":"Create a derivation with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/#updating-an-existing-derivation","content":" Derivations are applied on a go-forward basis only. If you would like to make an update to an existing derivation (for example, adding columns to the derived collection), you can add a new transform by changing the name of your existing transform to a new name, and at the same time updating your lambda or TypeScript module. From the Flow's perspective, this is equivalent to deleting the old transform and adding a new one. This will backfill over the source collection again with the updated SQL statement. ","version":"Next","tagName":"h2"},{"title":"Edit a Flow specification locally","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Edit a Flow specification locally","url":"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/#prerequisites","content":" To complete this workflow, you need: An Estuary account flowctl installed locally One or more published Flow entities. (To edit unpublished drafts, use this guide.) ","version":"Next","tagName":"h2"},{"title":"Pull specifications locally​","type":1,"pageTitle":"Edit a Flow specification locally","url":"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/#pull-specifications-locally","content":" Every entity (including active tasks, like captures and materializations, and static collections) has a globally unique name in the Flow catalog. For example, a given Data Flow may comprise: A capture, myOrg/marketing/leads, which writes to...Two collections, myOrg/marketing/emailList and myOrg/marketing/socialMedia, which are materialized as part of...A materialization, myOrg/marketing/contacts. Using these names, you'll identify and pull the relevant specifications for editing. Authorize flowctl. Go to the CLI-API tab of the web app and copy your access token. Run flowctl auth token --token <paste-token-here> Determine which entities you need to pull from the catalog. You can: Check the web app's Sources, Collections, and Destinations pages. All published entities to which you have access are listed and can be searched. Run flowctl catalog list. This command returns a complete list of entities to which you have access. You can refine by specifying a --prefix and filter by entity type: --captures, --collections, --materializations, or --tests. From the above example, flowctl catalog list --prefix myOrg/marketing --captures --materializations would returnmyOrg/marketing/leads and myOrg/marketing/contacts. Pull the specifications you need by running flowctl catalog pull-specs: Pull one or more specifications by name, for example: flowctl catalog pull-specs --name myOrg/marketing/emailList Pull a group of specifications by prefix or type filter, for example: flowctl catalog pull-specs --prefix myOrg/marketing --collections The source files are written to your current working directory. Browse the source files. flowctl pulls specifications into subdirectories organized by entity name, and specifications sharing a catalog prefix are written to the same YAML file. Regardless of what you pull, there is always a top-level file called flow.yaml that imports all other nested YAML files. These, in turn, contain the entities' specifications. ","version":"Next","tagName":"h2"},{"title":"Edit source files and re-publish specifications​","type":1,"pageTitle":"Edit a Flow specification locally","url":"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/#edit-source-files-and-re-publish-specifications","content":" Next, you'll complete your edits, test that they were performed correctly, and re-publish everything. Open the YAML files that contain the specification you want to edit. Make changes. For guidance on how to construct Flow specifications, see the documentation for the task type: CapturesCollectionsMaterializationsDerivationsTests When you're done, you can test your changes:flowctl catalog test --source flow.yaml You'll almost always use the top-level flow.yaml file as the source here because it imports all other Flow specifications in your working directory. Once the test has passed, you can publish your specifications. Re-publish all the specifications you pulled: flowctl catalog publish --source flow.yaml Again you'll almost always want to use the top-level flow.yaml file. If you want to publish only certain specifications, you can provide a path to a different file. Return to the web app or use flowctl catalog list to check the status of the entities you just published. Their publication time will be updated to reflect the work you just did. If you're not satisfied with the results of your edits, repeat the process iteratively until you are. ","version":"Next","tagName":"h2"},{"title":"Implementing Derivations for AcmeBank","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/","content":"","keywords":"","version":"Next"},{"title":"Filtering Large Transfers​","type":1,"pageTitle":"Implementing Derivations for AcmeBank","url":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/#filtering-large-transfers","content":" note This section introduces SQLite derivations, SQL lambda blocks and $parameters. Your compliance department has reached out, and they require an understanding of the last large transfer (if any) made by each user account. You create a SQL derivation to help them out. The transfers collection is keyed on the transfer /id, so you'll need to re-key your derivation on the /sender account. You also need to filter out transfers that aren't large enough. Putting this all together: last-large-send.flow.yamllast-large-send-test.flow.yaml collections: acmeBank/last-large-send: schema: transfers.schema.yaml key: [/sender] derive: using: sqlite: {} transforms: - name: filterTransfers source: acmeBank/transfers shuffle: any lambda: SELECT $id, $sender, $recipient, $amount WHERE $amount > 100; derive: using: sqlite: {} tells Flow that collectionacmeBank/last-large-send is derived using Flow's SQLite derivation connector. This derivation has just one transform, which sources from the transfers collection. As source documents become available, they're evaluated by the SQL lambdaand its SELECT output is published to the derived collection. Your SQL queries access locations of source documents through $parameter bindings. The compliance department then materializes this collection to their preferred destination, for an always up-to-date view indexed by each account. ","version":"Next","tagName":"h2"},{"title":"Finding New Account Pairs​","type":1,"pageTitle":"Implementing Derivations for AcmeBank","url":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/#finding-new-account-pairs","content":" note This section introduces SQLite migrations and internal task tables. The fraud team needs your help: they have a new process they must run the first time some sending account sends funds to a receiving account. They would like to see only those transfers which reflect a new account pair of (sender, recipient). To tackle this you need to know which account pairs have been seen before. SQLite derivations run within the context of a persistent, managed SQLite database. You can apply database migrations that create whatever tables, triggers, or views you might need. Then, the statements of your SQL lambda code can INSERT, UPDATE, or DELETEfrom those tables, query from them, or any other operation supported by SQLite. The tables and other schema you create through your migrations are the internal state of your task. first-send.flow.yamlfirst-send-test.flow.yaml collections: acmeBank/first-send: schema: transfers.schema.yaml key: [/id] derive: using: sqlite: migrations: - CREATE TABLE seen_pairs ( sender TEXT NOT NULL, recipient TEXT NOT NULL, PRIMARY KEY (sender, recipient) ); transforms: - name: fromTransfers source: acmeBank/transfers shuffle: key: [/sender, /recipient] lambda: INSERT INTO seen_pairs (sender, recipient) VALUES ($sender, $recipient) ON CONFLICT DO NOTHING RETURNING $id, $sender, $recipient, $amount; This time, the derivation attempts to INSERT into the seen_pairs table, and uses SQLite's RETURNINGsyntax to only publish documents for rows which were successfully inserted. You can evolve the internal SQLite tables of your derivation as needed, by appending SQL blocks which perform a database migration to the migrations array. Any migrations appended to the list are automatically applied by Flow. ","version":"Next","tagName":"h2"},{"title":"Grouped Windows of Transfers​","type":1,"pageTitle":"Implementing Derivations for AcmeBank","url":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/#grouped-windows-of-transfers","content":" note This section introduces delayed reads, and applies them to implement a custom window policy. The fraud team is back, and now needs to know the othertransfers which an account has made in the last day. They want you to enrich each transfer with the grouping of all transfers initiated by that account in the prior 24 hours. You may have encountered "windowing" in other tools for stream processing. Some systems even require that you define a window policy in order to function. Flow does not use windows, but sometimes you do want a time-bound grouping of recent events. All collection documents contain a wall-clock timestamp of when they were published. The transforms of a derivation will generally process source documents in ascending wall-time order. You can augment this behavior by using a read delay to refine the relative order in which source documents are read, which is useful for implementing arbitrary window policies: grouped.flow.yamlenrichAndAddToWindow.sqlgrouped-test.flow.yaml collections: acmeBank/grouped-transfers: schema: # Enrich transfer with a window of *other* transfers. $ref: transfers.schema.yaml required: [window] properties: window: { type: array } key: [/id] derive: using: sqlite: migrations: - CREATE TABLE transfers ( id INTEGER PRIMARY KEY NOT NULL, sender TEXT NOT NULL, recipient TEXT NOT NULL, amount REAL NOT NULL ); CREATE INDEX idx_transfers_sender ON transfers (sender); transforms: - name: enrichAndAddToWindow source: acmeBank/transfers shuffle: { key: [/sender] } lambda: enrichAndAddToWindow.sql - name: removeFromWindow source: acmeBank/transfers shuffle: { key: [/sender] } readDelay: 24h lambda: DELETE FROM transfers WHERE id = $id; ","version":"Next","tagName":"h2"},{"title":"Approving Transfers​","type":1,"pageTitle":"Implementing Derivations for AcmeBank","url":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/#approving-transfers","content":" note This section expands usage of SQLite task tables and introduces a recursive data flow. Your users don't always check if they have sufficient funds before starting a transfer, and account overdrafts are becoming common. The product team has tapped you to fix this by enriching each transfer with an approve or deny outcome based on the account balance of the sender. To do this, you first need to track the sender's current account balance. Clearly an account balance is debited when it's used to sends funds. It's also credited when it receives funds. But there's a catch: an account can only be credited for funds received from approved transfers! This implies you need a collection of transfer outcomes in order to derive your collection of transfer outcomes 🤯. This is an example of a self-referential, recursive data-flow. You may have used tools which require that data flow in a Directed Acyclic Graph (DAG). Flow does not require that your data flows are acyclic, and it also supports a derivation that reads from itself, which lets you tackle this task: outcomes.flow.yamldebitSender.sqloutcomes-test.flow.yaml collections: acmeBank/transfer-outcomes: schema: # Enrich transfer schema with outcome and the sender's balance. $ref: transfers.schema.yaml required: [outcome, sender_balance] properties: outcome: description: Transfer was approved, or denied for insufficient funds. enum: [approve, deny] sender_balance: { type: number } key: [/id] derive: using: sqlite: migrations: - CREATE TABLE current_balances ( account TEXT PRIMARY KEY NOT NULL, balance REAL NOT NULL ); transforms: - name: debitSender source: acmeBank/transfers # Shuffle on the sender, as we'll debit their balance. shuffle: { key: [/sender] } lambda: debitSender.sql - name: creditRecipient # When a transfer is approved, we've debited the sender but still need to # credit the recipient. Read approved transfers from ourselves to do so. source: name: acmeBank/transfer-outcomes partitions: include: outcome: [approve] shuffle: { key: [/recipient] } lambda: INSERT INTO current_balances (account, balance) VALUES ($recipient, $amount) ON CONFLICT DO UPDATE SET balance = balance + $amount; # Partition output based on the transfer outcome. projections: outcome: location: /outcome partition: true ","version":"Next","tagName":"h2"},{"title":"Current Account Balances​","type":1,"pageTitle":"Implementing Derivations for AcmeBank","url":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/#current-account-balances","content":" note This section introduces TypeScript derivations and reduction annotations. Your product team is back, and they want a database table keyed by account that contains its up-to-date current balance. As shown in the previous section, you could create a task table which aggregates each account balance, and then SELECT the current balance after every transfer. For most use cases, this is a great place to start. For interest and variety, you'll solve this problem using TypeScript. TypeScript derivations require a module which you write. You don't know how to write that module yet, so first implement the derivation specification in balances.flow.yaml. Next run the flowctl generate command, which generates two files: A module stub for you to fill out.A file of TypeScript interfaces which are used by your module. balances.flow.yamlModule StubInterfaces collections: acmeBank/balances: schema: balances.schema.yaml key: [/user] derive: using: typescript: module: balances.ts transforms: - name: fromOutcomes source: name: acmeBank/transfer-outcomes partitions: include: outcome: [approve] shuffle: any Next fill out the body of your TypeScript module and write a test: balances.tsbalances-test.flow.yaml import { IDerivation, Document, SourceFromOutcomes } from 'flow/acmeBank/balances.ts'; // Implementation for derivation acmeBank/balances. export class Derivation extends IDerivation { fromOutcomes(read: { doc: SourceFromOutcomes }): Document[] { const doc = read.doc; return [ // Debit the sender. { user: doc.sender, balance: -doc.amount }, // Credit the recipient. { user: doc.recipient, balance: doc.amount }, ]; } } One piece is still missing. Your TypeScript module is publishing the change in account balance for each transfer. That's not the same thing as the current balance for each account. You can ask Flow to sum up the balance changes into a current account balance through reduction annotations. Here's the balances schema, with reduce annotations for summing the account balance: type: object required: [user, balance] reduce: { strategy: merge } properties: user: { type: string } balance: type: number reduce: { strategy: sum } This section has more moving parts that the previous SQL-based examples. You might be wondering, why bother? Fair question! This is just an illustrative example, after all. While they're more verbose, TypeScript derivations do have certain advantages: TypeScript derivations are strongly typed, and those checks often catch meaningful bugs and defects before they're deployed. Your derivation modules also play nicely with VSCode and other developer tooling.TypeScript derivations can use third-party libraries, as well as your native code compiled to WASM.TypeScript can be easier when working with nested or complex document structures. Reduction annotations also have some benefits over task state (like SQLite tables): Internal task state is managed by Flow. If it grows to be large (say, you have a lot of accounts), then your task must be scaled and could require performance tuning. Reduction annotations, on the other hand, require no internal state and are extremely efficient.Certain aggregations, such as recursive merging of tree-like structures, are much simpler to express through reduction annotations vs implementing yourself. [See "Where to Accumulate?" for more discussion]../../concepts/derivations.md(#where-to-accumulate). ","version":"Next","tagName":"h2"},{"title":"Troubleshoot a task with flowctl","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Troubleshoot a task with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/#prerequisites","content":" To complete this workflow, you need: An Estuary account flowctl installed locally ","version":"Next","tagName":"h2"},{"title":"Print task logs​","type":1,"pageTitle":"Troubleshoot a task with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/#print-task-logs","content":" Authorize flowctl. Go to the CLI-API tab of the web app and copy your access token. Run flowctl auth token --token <paste-token-here> Identify the name of the failing task in the web app; for example myOrg/marketing/leads. Use the tables on the Captures or Materializations pages of the web app to do so. Run flowctl logs --task <task-name>. You have several options to get more specific. For example: flowctl logs --task myOrg/marketing/leads --follow — If the task hasn't failed, continuously print logs as they're generated. flowctl logs --task myOrg/marketing/leads --since 1h — Print logs from approximately the last hour. The actual output window is approximate and may somewhat exceed this time boundary. You may use any time, for example 10m and 1d. ","version":"Next","tagName":"h2"},{"title":"Change log level​","type":1,"pageTitle":"Troubleshoot a task with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/#change-log-level","content":" If your logs aren't providing enough detail, you can change the log level. Flow offers several log levels. From least to most detailed, these are: errorwarninfo (default)debugtrace Follow the guide to edit a specification with flowctl. Working in your local specification file, add the shards stanza to the capture or materialization specification: myOrg/marketing/leads: shards: logLevel: debug endpoint: {} Finish the workflow as described, re-publishing the task. Learn more about working with logs ","version":"Next","tagName":"h2"},{"title":"System-specific Data Flows","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/","content":"System-specific Data Flows The guides in this section cover popular Estuary Flow use cases. Each guide walks you through the process of capturing data from a specific source system and materializing it to a specific destination. These are supplemental to the main guide to create a Data Flow. If you don't see your exact Data Flow here, use the main guide and the connector referenceto mix and match your required source and destination systems.","keywords":"","version":"Next"},{"title":"Google Cloud Firestore to Snowflake","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud Firestore to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/#prerequisites","content":" You'll need: (Recommended) understanding of the basic Flow concepts. Access to the Flow web application through an Estuary account. If you don't have one, visit the web app to register for free. A Firestore database that contains the data you'd like to move to Snowflake. You create this as part of a Google Firebase project. A Google service account with: Read access to your Firestore database, via roles/datastore.viewer. You can assign this role when you create the service account, or add it to an existing service account. A generated JSON service account key for the account. A Snowflake account with: A target database, schema, and virtual warehouse; and a user with a role assigned that grants the appropriate access levels to these resources.You can use a script to quickly create all of these items. Have these details on hand for setup with Flow. The account identifier and host URL noted. The URL is formatted using the account identifier. For example, you might have the account identifier orgname-accountname.snowflakecomputing.com. ","version":"Next","tagName":"h2"},{"title":"Introduction​","type":1,"pageTitle":"Google Cloud Firestore to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/#introduction","content":" In Estuary Flow, you create Data Flows to transfer data from source systems to destination systems in real time. In this use case, your source is an Google Cloud Firestore NoSQL database and your destination is a Snowflake data warehouse. After following this guide, you'll have a Data Flow that comprises: A capture, which ingests data from FirestoreSeveral collection, cloud-backed copies of Firestore collections in the Flow systemA materialization, which pushes the collections to Snowflake The capture and materialization rely on plug-in components called connectors. We'll walk through how to configure the Firestore and Snowflake connectors to integrate these systems with Flow. ","version":"Next","tagName":"h2"},{"title":"Capture from Firestore​","type":1,"pageTitle":"Google Cloud Firestore to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/#capture-from-firestore","content":" You'll first create a capture to connect to your Firestore database, which will yield one Flow collection for each Firestore collection in your database. Go to the Flow web application at dashboard.estuary.dev and sign in using the credentials provided by your Estuary account manager. Click the Sources tab and choose New Capture. Find the Google Firestore tile and click Capture. A form appears with the properties required for a Firestore capture. Type a name for your capture. Your capture name must begin with a prefix to which you have access. In the Name field, use the drop-down to select your prefix. Append a unique capture name after the / to create the full name, for example, acmeCo/myFirestoreCapture. Fill out the required properties for Firestore. Database: Flow can autodetect the database name, but you may optionally specify it here. This is helpful if the service account used has access to multiple Firebase projects. Your database name usually follows the format projects/$PROJECTID/databases/(default). Credentials: The JSON service account key created per the prerequisites. Click Next. Flow uses the provided configuration to initiate a connection with Firestore. It maps each available Firestore collection to a possible Flow collection. It also generates minimal schemas for each collection. You can use the Source Collections browser to remove or modify collections. You'll have the chance to tighten up each collection's JSON schema later, when you materialize to Snowflake. tip If you make any changes to collections, click Next again. Once you're satisfied with the collections to be captured, click Save and Publish. You'll see a notification when the capture publishes successfully. The data currently in your Firestore database has been captured, and future updates to it will be captured continuously. Click Materialize Collections to continue. ","version":"Next","tagName":"h2"},{"title":"Materialize to Snowflake​","type":1,"pageTitle":"Google Cloud Firestore to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/#materialize-to-snowflake","content":" Next, you'll add a Snowflake materialization to connect the captured data to its destination: your data warehouse. Locate the Snowflake tile and click Materialization. A form appears with the properties required for a Snowflake materialization. Choose a unique name for your materialization like you did when naming your capture; for example, acmeCo/mySnowflakeMaterialization. Fill out the required properties for Snowflake (you should have most of these handy from the prerequisites). Host URLAccountUserPasswordDatabaseSchemaWarehouse: optionalRole: optional Click Next. Flow uses the provided configuration to initiate a connection to Snowflake. You'll be notified if there's an error. In that case, fix the configuration form or Snowflake setup as needed and click Next to try again. Once the connection is successful, the Endpoint Config collapses and the Source Collections browser becomes prominent. It shows the collections you captured previously. Each of them will be mapped to a Snowflake table. In the Source Collections browser, optionally change the name in the Table field for each collection. These will be the names of the output tables in Snowflake. For each table, choose whether to enable delta updates. For each collection, apply a stricter schema to be used for the materialization. Firestore has a flat data structure. To materialize data effectively from Firestore to Snowflake, you should apply a schema can translate to a table structure. Flow's Schema Inference tool can help. In the Source Collections browser, choose a collection and click its Collection tab. Click Schema Inference The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for the materialization. Review the new schema and click Apply Inferred Schema. Click Next to apply the changes you made to collections. Click Save and Publish. You'll see a notification when the full Data Flow publishes successfully. ","version":"Next","tagName":"h2"},{"title":"What's next?​","type":1,"pageTitle":"Google Cloud Firestore to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/#whats-next","content":" Your Data Flow has been deployed, and will run continuously until it's stopped. Updates in your Firestore database will be reflected in your Snowflake table as they occur. You can advance your Data Flow by adding a derivation. Derivations are real-time data transformations. See the guide to create a derivation. ","version":"Next","tagName":"h2"},{"title":"How to join two collections (TypeScript)","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/","content":"","keywords":"","version":"Next"},{"title":"Introduction​","type":1,"pageTitle":"How to join two collections (TypeScript)","url":"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/#introduction","content":" This tutorial will show you how to implement a stateless transformation using TypeScript. You’ll learn how to implement a flow that matches orders to customers in real-time. ","version":"Next","tagName":"h2"},{"title":"Setting up your development environment​","type":1,"pageTitle":"How to join two collections (TypeScript)","url":"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/#setting-up-your-development-environment","content":" The data sources used in this tutorial are available in two Google Sheets. This one for the orders and this one for the customers. Make a copy of each so you’ll be able to test out the pipeline by adding, editing or removing records. Customers table sample customer_id\temail\tname\tphone 101\tcustomer1@email.com\tJohn Doe\t123-456-7890 102\tcustomer2@email.com\tJane Smith\t987-654-3210 103\tcustomer3@email.com\tAlex Lee\t555-123-4567 Orders table sample order_id\tcustomer_id\torder_date\ttotal_amount 1\t101\t2024-05-10 8:00:00\t50 2\t102\t2024-05-09 12:00:00\t75.5 3\t103\t2024-05-08 15:30:00\t100.25 As you can see, both tables contain a field called customer_id. This is what we’re going to use as the key in our join operation. One customer can have multiple orders, but one order can only belong to one customer. There are also some customers without any orders. Let’s say you want to see all customers and all of their orders in the results. This means, you’ll be looking to implement a full outer join. To create the collections in Estuary Flow, head over to the dashboard and create a new Google Sheet capture. Give it a name and add one of the previously copied sheet’s URL as the “Spreadsheet Link”. Repeat this process for the other sheet, which should leave you with 2 collections. You can take a look into each via the data preview window on the Collections page to verify that the sample data has already landed in Flow. In order to implement transformations through derivations, you’ll need to set up your development environment. You’ll need a text editor and flowtcl, the CLI-tool for Flow installed on your machine. Check out the docs page on installation instructions. To verify that you’re able to access Flow via flowctl, see if you can execute these commands successfully to view documents in your collections. flowctl collections read --collection <your_collection_id> --uncommitted {"_meta":{"uuid":"9790e50e-0ed3-11ef-8401-6d9be407e4b8"},"customer_id":"101","order_date":"2024-05-10 8:00:00","order_id":"1","row_id":203,"total_amount":"50"} {"_meta":{"uuid":"9790e50e-0ed3-11ef-8801-6d9be407e4b8"},"customer_id":"102","order_date":"2024-05-09 12:00:00","order_id":"2","row_id":204,"total_amount":"75.5"} {"_meta":{"uuid":"9790e50e-0ed3-11ef-8c01-6d9be407e4b8"},"customer_id":"103","order_date":"2024-05-08 15:30:00","order_id":"3","row_id":205,"total_amount":"100.25"} {"_meta":{"uuid":"9790e50e-0ed3-11ef-9001-6d9be407e4b8"},"customer_id":"101","order_date":"2024-05-07 10:00:00","order_id":"4","row_id":206,"total_amount":"25.75"} {"_meta":{"uuid":"9790e50e-0ed3-11ef-9401-6d9be407e4b8"},"customer_id":"103","order_date":"2024-05-06 14:45:00","order_id":"5","row_id":207,"total_amount":"60.2"} {"_meta":{"uuid":"9790e50e-0ed3-11ef-9801-6d9be407e4b8"},"customer_id":"102","order_date":"2024-05-05 11:20:00","order_id":"6","row_id":208,"total_amount":"45.9"} {"_meta":{"uuid":"9790e50e-0ed3-11ef-9c01-6d9be407e4b8"},"customer_id":"104","order_date":"2024-05-04 9:30:00","order_id":"7","row_id":209,"total_amount":"80.1"} If you see something similar, you’re good to continue! ","version":"Next","tagName":"h2"},{"title":"Writing the derivation​","type":1,"pageTitle":"How to join two collections (TypeScript)","url":"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/#writing-the-derivation","content":" Set up your folder structure so you can organize the resources required for the derivation. Create a working directory to follow along, and inside, create a flow.yaml file. Inside your flow.yaml file, add the following contents: collections: Dani/join-tutorial-typescript/customers_with_orders: schema: description: >- A document that represents the joined result of orders with customer information type: object properties: customer_id: type: string email: type: string name: type: string phone: type: string orders: type: array items: $ref: orders.schema.yaml reduce: strategy: merge key: - /order_id required: - customer_id reduce: strategy: merge key: - /customer_id derive: using: typescript: module: full-outer-join.flow.ts transforms: - name: fromOrders source: name: Dani/join-tutorial-orders/Sheet1_v2 shuffle: key: - /customer_id - name: fromCustomers source: name: Dani/join-tutorial-customers/Sheet1 shuffle: key: - /customer_id Let’s take a look at this in a bit more detail. Essentially, we define one collection which it’s a derivation that is the result of two transformations. In the schema definition, we specify what structure we want the documents of the result collection to take on. Dani/join-tutorial-typescript/customers_with_orders: schema: description: >- A document that represents the joined result of orders with customer information type: object properties: customer_id: type: string email: type: string name: type: string phone: type: string orders: type: array items: $ref: orders.schema.yaml reduce: strategy: merge key: - /order_id required: - customer_id reduce: strategy: merge key: - /customer_id Because you are going to implement a 1-to-many join using the two source collections, it’s important to pay attention to what reduction strategy Flow uses. There are two merge strategies defined here, one for the customers_with_orders collection and for the nested orders array.  Merge reduces the left-hand side and right-hand side by recursively reducing shared document locations. The LHS and RHS must either both be objects, or both be arrays. For the nested merge, you have to define a key, which is one or more JSON pointers that are relative to the reduced location. If both sides are arrays and a merge key is present, then a deep sorted merge of the respective items is done, as ordered by the key. In this case, setting it to order_id will cause the reduction to collect all orders for a given customer. The items in the nested array of orders are defined by the schema in a separate file, to which we refer to using $ref: orders.schema.yaml. The derivation details are defined in the next section of the yaml: derive: using: typescript: module: full-outer-join.flow.ts transforms: - name: fromOrders source: name: Dani/join-tutorial-orders/Sheet1_v2 shuffle: key: - /customer_id - name: fromCustomers source: name: Dani/join-tutorial-customers/Sheet1 shuffle: key: - /customer_id This tells flow that the transformation code is defined in a TypeScript file called full-outer-join.flow.ts (which doesn’t exist – yet!) and that there are in fact two transformations that it expects, one for each source collection. Shuffles let Flow identify the shard that should process a particular source document, in order to co-locate that processing with other documents it may need to know about. Both transformations shuffle data on the same key. An important detail is that if a derivation has more than one transformation, the shuffle keys of all transformations must align with one another in terms of the extracted key types (string vs integer) as well as the number of components in a composite key. Let’s generate the scaffolding for the derivation using flowctl. flowctl generate --source flow.yaml This command will create a few new files in your current working directory. ➜ tree . ├── deno.json ├── flow.yaml ├── flow_generated │ └── typescript │ └── Dani │ └── join-tutorial-typescript │ └── customers_with_orders.ts ├── full-outer-join.flow.ts └── orders.schema.yaml 5 directories, 5 files The folder flow_generated along with the deno.json file are two things you won’t have to modify during this tutorial. If you take a look at file that flowtcl generated under flow_generated/typescript/<your_working_directory>/<your_prefix>/customers_with_orders.ts you can see the types you are able to use in your transformations. // Generated for published documents of derived collection customers_with_orders. export type Document = /* A document that represents the joined result of orders with customer information */ { customer_id: string; email?: string; name?: string; orders?: unknown[]; phone?: string; }; // Generated for read documents of sourced collection Sheet1. export type SourceFromOrders = { customer_id?: string; order_date?: string; order_id?: string; row_id: number; total_amount?: string; }; // Generated for read documents of sourced collection Sheet1. export type SourceFromCustomers = { customer_id?: string; email?: string; name?: string; phone?: string; row_id: number; }; Now, the actual transformation code will live in the following file: full-outer-join.flow.ts. Take a look at its contents. import { IDerivation, Document, SourceFromOrders, SourceFromCustomers } from 'flow/Dani/join-tutorial-typescript/customers_with_orders.ts'; // Implementation for derivation Dani/join-tutorial-typescript/customers_with_orders. export class Derivation extends IDerivation { fromOrders(_read: { doc: SourceFromOrders }): Document[] { throw new Error("Not implemented"); } fromCustomers(_read: { doc: SourceFromCustomers }): Document[] { throw new Error("Not implemented"); } } Helpfully, flowctl provides two skeleton functions. Update the function body to implement the filter functionality. Modify the Derivation class like this: import { IDerivation, Document, SourceFromOrders, SourceFromCustomers } from 'flow/Dani/join-tutorial-typescript/customers_with_orders.ts'; // Implementation for derivation Dani/join-tutorial-typescript/customers_with_orders. export class Derivation extends IDerivation { fromOrders(_read: { doc: SourceFromOrders }): Document[] { return [{ customer_id: _read.doc.customer_id || "", orders: [_read.doc], }]; } fromCustomers(_read: { doc: SourceFromCustomers }): Document[] { return [{ customer_id: _read.doc.customer_id || "", email: _read.doc.email, name: _read.doc.name, phone: _read.doc.phone }]; } } As you can see here, all we do is return the fields we need from each document, there’s no code required to define the actual “join” – all the heavy lifting is done in the reduction phase during materialization by the Flow runtime based on the schema you defined earlier. Publish the derivation using flowctl: flowctl catalog publish --source flow.yaml After it’s successfully published, head over to the Flow dashboard to see the new collection. If you take a look at the preview window at the bottom of the page, you might notice that the documents are not yet in their final, reduced form. As mentioned earlier, the reduction happens during materialization. Let's create one to show the results! Head over to the materialization creation page, search for Google Sheets and configure a new connector. Create a fresh Google Sheet and copy its URL as the Spreadsheet Link. In the third configuration step, select the derivation you created as the source collection. After everything looks good, press the “Save and Publish” button in the top-right corner to provision your materialization connector. And that’s it! Go check out the sheet you created to store the results. You should see all orders associated with their respective customer in the nested array. To test the data flow, head over to the source “Orders” sheet, and add a new order for a customer. After a few seconds, you should see the new order added to the array of existing orders of the customer. Take a few minutes to play around with different actions as well; deleting an order, adding a customer, editing details of either entity. ","version":"Next","tagName":"h2"},{"title":"Wrapping up​","type":1,"pageTitle":"How to join two collections (TypeScript)","url":"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/#wrapping-up","content":" In this guide you learned how to write a TypeScript derivation to join two collections. After finishing with the tutorial, don’t forget to delete resources you don’t need anymore. ","version":"Next","tagName":"h2"},{"title":"Amazon S3 to Snowflake","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon S3 to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/#prerequisites","content":" You'll need: (Recommended) understanding of the basic Flow concepts. Access to the Flow web application through an Estuary account. If you don't have one, visit the web app to register for free. An S3 bucket that contains the data you'd like to move to Snowflake. For public buckets, verify that the access policy allows anonymous reads. For buckets accessed by a user account, you'll need the AWS access key and secret access key for the user. See the AWS blog for help finding these credentials. A Snowflake account with: A target database, schema, and virtual warehouse; and a user with a role assigned that grants the appropriate access levels to these resources.You can use a script to quickly create all of these items. Have these details on hand for setup with Flow. The account identifier and host URL noted. The URL is formatted using the account identifier. For example, you might have the account identifier orgname-accountname.snowflakecomputing.com. ","version":"Next","tagName":"h2"},{"title":"Introduction​","type":1,"pageTitle":"Amazon S3 to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/#introduction","content":" In Estuary Flow, you create Data Flows to transfer data from source systems to destination systems in real time. In this use case, your source is an Amazon S3 bucket and your destination is a Snowflake data warehouse. After following this guide, you'll have a Data Flow that comprises: A capture, which ingests data from S3A collection, a cloud-backed copy of that data in the Flow systemA materialization, which pushes the data to Snowflake The capture and materialization rely on plug-in components called connectors. We'll walk through how to configure the S3 and Snowflake connectors to integrate these systems with Flow. ","version":"Next","tagName":"h2"},{"title":"Capture from S3​","type":1,"pageTitle":"Amazon S3 to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/#capture-from-s3","content":" You'll first create a capture to connect to your S3 bucket, which will yield one or more Flow collections. Go to the Flow web application at dashboard.estuary.dev and sign in using the credentials provided by your Estuary account manager. Click the Sources tab and choose New Capture. Find the Amazon S3 tile and click Capture. A form appears with the properties required for an S3 capture. Type a name for your capture. Your capture name must begin with a prefix to which you have access. In the Name field, use the drop-down to select your prefix. Append a unique capture name after the / to create the full name, for example, acmeCo/myS3Capture. Fill out the required properties for S3. AWS Access Key ID and AWS Secret Access Key: Required for private buckets. AWS Region and Bucket: These are listed in your S3 console. Prefix: You might organize your S3 bucket using prefixes, which emulate a directory structure. To capture only from a specific prefix, add it here. Match Keys: Filters to apply to the objects in the S3 bucket. If provided, only data whose absolute path matches the filter will be captured. For example, *\\.json will only capture JSON file. See the S3 connector documentation for information on advanced fields and parser settings. (You're unlikely to need these for most use cases.) Click Next. Flow uses the provided configuration to initiate a connection to S3. It generates a permissive schema and details of the Flow collection that will store the data from S3. You'll have the chance to tighten up each collection's JSON schema later, when you materialize to Snowflake. Click Save and publish. You'll see a notification when the capture publishes successfully. The data currently in your S3 bucket has been captured, and future updates to it will be captured continuously. Click Materialize Collections to continue. ","version":"Next","tagName":"h2"},{"title":"Materialize to Snowflake​","type":1,"pageTitle":"Amazon S3 to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/#materialize-to-snowflake","content":" Next, you'll add a Snowflake materialization to connect the captured data to its destination: your data warehouse. Locate the Snowflake tile and click Materialization. A form appears with the properties required for a Snowflake materialization. Choose a unique name for your materialization like you did when naming your capture; for example, acmeCo/mySnowflakeMaterialization. Fill out the required properties for Snowflake (you should have most of these handy from the prerequisites). Host URLAccountUserPasswordDatabaseSchemaWarehouse: optionalRole: optional Click Next. Flow uses the provided configuration to initiate a connection to Snowflake. You'll be notified if there's an error. In that case, fix the configuration form or Snowflake setup as needed and click Next to try again. Once the connection is successful, the Endpoint Config collapses and the Source Collections browser becomes prominent. It shows the collection you captured previously, which will be mapped to a Snowflake table. In the Collection Selector, optionally change the name in the Table field. This will be the name of the output table in Snowflake. Choose whether to enable delta updates. Apply a stricter schema to the collection for the materialization. S3 has a flat data structure. To materialize this data effectively to Snowflake, you should apply a schema that can translate to a table structure. Flow's Schema Inference tool can help. In the Source Collections browser, click the collection's Collection tab. Click Schema Inference The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for the materialization. Review the new schema and click Apply Inferred Schema. Click Next to apply the changes you made to the collection. Click Save and Publish. You'll see a notification when the full Data Flow publishes successfully. ","version":"Next","tagName":"h2"},{"title":"What's next?​","type":1,"pageTitle":"Amazon S3 to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/#whats-next","content":" Your Data Flow has been deployed, and will run continuously until it's stopped. Updates in your S3 bucket will be reflected in your Snowflake table as they occur. You can advance your Data Flow by adding a derivation. Derivations are real-time data transformations. See the guide to create a derivation. ","version":"Next","tagName":"h2"},{"title":"Schema evolution","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/schema-evolution/","content":"","keywords":"","version":"Next"},{"title":"Introduction​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/guides/schema-evolution/#introduction","content":" Flow collections serve not only as your real-time data storage, but also as a contract between tasks that produce and consume their data. Captures are producers, materializations are consumers, and derivations can act as either. This contract helps prevent data loss and error in your Data Flows, and is defined in terms of the collection specification, or spec, which includes: The JSON schemaThe collection keyProjections, if any There are many reasons a collection spec might change. Often, it's due to a change in the source data. Regardless, you'll need to make changes to downstream tasks — most often, materializations — to avoid errors. ","version":"Next","tagName":"h2"},{"title":"Schema evolution scenarios​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/guides/schema-evolution/#schema-evolution-scenarios","content":" This guide is broken down into sections for different common scenarios, depending on which properties of the collection spec have changed. The key pointers have changedThe logical partitioning configuration has changedThe schema (or readSchema if defined separately) has changed A new field is addedA field's data type has changedA field was removed info There are a variety of reasons why these properties may change, and also different mechanisms for detecting changes in source data. In general, it doesn't matter why the collection spec has changed, only what has changed. However, AutoDiscovers are able to handle some of these scenarios automatically. Where applicable, AutoDiscover behavior will be called out under each section. ","version":"Next","tagName":"h2"},{"title":"Re-creating a collection​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/guides/schema-evolution/#re-creating-a-collection","content":" Scenario: the key pointer or logical partitioning configurations have changed. The key of a Flow collection cannot be changed after the collection is created. The same is true of the logical partitioning, which also cannot be changed after the collection is created. If you need to change either of those parts of a collection spec, you'll need to create a new collection and update the bindings of any captures or materializations that reference the old collection. Web app workflow If you're working in the Flow web app, you'll see an error message and an option to re-create the collection as shown in the example below. Click Apply to re-create the collection and update any tasks that reference the old collection with the new name. flowctl workflow: If you're working with flowctl, you'll need to re-create the collection manually in your flow.yaml file. You must also update any captures or materializations that reference it. For example, say you have a data flow defined by the following specs: captures: acmeCo/inventory/source-postgres: endpoint: connector: image: ghcr.io/estuary/source-postgres:v1 config: encrypted-pg-config.sops.yaml bindings: - resource: namespace: public stream: anvils mode: Normal target: acmeCo/inventory/anvils collections: acmeCo/inventory/anvils: key: [/sku] schema: type: object properties: sku: { type: string } warehouse_id: { type: string } quantity: { type: integer } required: [sku, warehouse_id, quantity] materializations: acmeCo/data-warehouse/materialize-snowflake: endpoint: connector: image: ghcr.io/estuary/materialize-snowflake:v1 config: encrypted-snowflake-config.sops.yaml bindings: - source: acmeCo/inventory/anvils resource: table: anvils schema: inventory To change the collection key, you would update the YAML like so. Note the capture target, collection name, and materialization source. captures: acmeCo/inventory/source-postgres: endpoint: connector: image: ghcr.io/estuary/source-postgres:v1 config: encrypted-pg-config.sops.yaml bindings: - resource: namespace: public stream: anvils mode: Normal backfill: 1 target: acmeCo/inventory/anvils_v2 collections: acmeCo/inventory/anvils_v2: key: [/sku] schema: type: object properties: sku: { type: string } warehouse_id: { type: string } quantity: { type: integer } required: [sku, warehouse_id, quantity] materializations: acmeCo/data-warehouse/materialize-snowflake: endpoint: connector: image: ghcr.io/estuary/materialize-snowflake:v1 config: encrypted-snowflake-config.sops.yaml bindings: - source: acmeCo/inventory/anvils_v2 backfill: 1 resource: table: anvils schema: inventory The existing acmeCo/inventory/anvils collection will not be modified and will remain in place, but won't update because no captures are writing to it. Also note the addition of the backfill property. If the backfill property already exists, just increment its value. For the materialization, this will ensure that the destination table in Snowflake gets dropped and re-created, and that the materialization will backfill it from the beginning. In the capture, it similarly causes it to start over from the beginning, writing the captured data into the new collection. Auto-Discovers: If you enabled the option to Automatically keep schemas up to date (autoDiscover) and selected Breaking change re-versions collections (evolveIncompatibleCollections) for the capture, this evolution would be performed automatically. ","version":"Next","tagName":"h3"},{"title":"A new field is added​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/guides/schema-evolution/#a-new-field-is-added","content":" Scenario: this is one way in which the schema can change. When a new field appears in the collection schema, it may automatically be added to any materializations that use recommended fields. Recommended fields are enabled by default in each binding. See the materialization docs for more info about how to enable or disable recommended fields. When recommended fields are enabled, new fields are added automatically if they meet the criteria for the particular materialization connector. For example, scalar fields (strings, numbers, and booleans) are considered "recommended" fields when materializing to database tables. If your materialization binding is set to recommended: false, or if the new field is not recommended, you can manually add it to the materialization. To manually add a field: In the Flow web app, edit the materialization, find the affected binding, and click Show Fields.Using flowctl, add the field to fields.include in the materialization specification as shown here. info Newly added fields will not be set for rows that have already been materialized. If you want to ensure that all rows have the new field, just increment the backfill counter in the affected binding to have it re-start from the beginning. ","version":"Next","tagName":"h3"},{"title":"A field's data type has changed​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/guides/schema-evolution/#a-fields-data-type-has-changed","content":" Scenario: this is one way in which the schema can change. When a field's data type has changed, the effect on your materialization depends on the specific connector you're using. warning Note that these restrictions only apply to fields that are actively being materialized. If a field is excluded from your materialization, either explicitly or because it's not recommended, then the data types may change in any way. Regardless of whether the field is materialized or not, it must still pass schema validation tests. Therefore, you must still make sure existing data remains valid against the new schema. For example, if you changed excluded_field: { type: string } to type: integer while there was existing data with string values, your materialization would fail due to a schema validation error. Database and data warehouse materializations tend to be somewhat restrictive about changing column types. They typically only allow dropping NOT NULL constraints. This means that you can safely change a schema to make a required field optional, or to add null as a possible type, and the materialization will continue to work normally. Most other types of changes will require materializing into a new table. The best way to find out whether a change is acceptable to a given connector is to run test or attempt to re-publish. Failed attempts to publish won't affect any tasks that are already running. Web app workflow If you're working in the Flow web app, and attempt to publish a change that's unacceptable to the connector, you'll see an error message and an offer to increment the necessary backfill counters, or, in rare cases, to re-create the collection. Click Apply to to accept this solution and continue to publish. flowctl workflow If you test or attempt to publish a change that's unacceptable to the connector, you'll see an error message pointing to the field that's changed. In most cases, you can work around the issue by manually updating the materialization to materialize into a new table. For example, say you have a data flow defined by the following specs: collections: acmeCo/inventory/anvils: key: [/sku] schema: type: object properties: sku: { type: string } quantity: { type: integer } description: { type: string } required: [sku, quantity] materializations: acmeCo/data-warehouse/materialize-snowflake: endpoint: connector: image: ghcr.io/estuary/materialize-snowflake:v1 config: encrypted-snowflake-config.sops.yaml bindings: - source: acmeCo/inventory/anvils backfill: 3 resource: table: anvils schema: inventory Let's say the type of description was broadened to allow object values in addition to string. You'd update your specs as follows: collections: acmeCo/inventory/anvils: key: [/sku] schema: type: object properties: sku: { type: string } quantity: { type: integer } description: { type: [string, object] } required: [sku, quantity] materializations: acmeCo/data-warehouse/materialize-snowflake: endpoint: connector: image: ghcr.io/estuary/materialize-snowflake:v1 config: encrypted-snowflake-config.sops.yaml bindings: - source: acmeCo/inventory/anvils backfill: 4 resource: table: anvils schema: inventory Note that the only change was to increment the backfill counter. If the previous binding spec did not specify backfill, then just add backfill: 1. This works because the type is broadened, so existing values will still validate against the new schema. If this were not the case, then you'd likely need to re-create the whole collection. Auto-Discovers: If you enabled the option to Automatically keep schemas up to date (autoDiscover) and selected Breaking change re-versions collections (evolveIncompatibleCollections) for the capture, this evolution would be performed automatically. ","version":"Next","tagName":"h3"},{"title":"A field was removed​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/guides/schema-evolution/#a-field-was-removed","content":" Scenario: this is one way in which the schema can change. Removing fields is generally allowed by all connectors, and does not require new tables or collections. Note that for database materializations, the existing column will not be dropped, and will just be ignored by the materialization going forward. A NOT NULL constraint would be removed from that column, but it will otherwise be left in place. ","version":"Next","tagName":"h3"},{"title":"How to transform data using TypeScript","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/","content":"","keywords":"","version":"Next"},{"title":"Introduction​","type":1,"pageTitle":"How to transform data using TypeScript","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/#introduction","content":" This tutorial will show you how to implement a stateless transformation using TypeScript. You’ll learn how to implement a flow that filters events coming from the live, real-time Wikipedia API. ","version":"Next","tagName":"h2"},{"title":"Setting up your development environment​","type":1,"pageTitle":"How to transform data using TypeScript","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/#setting-up-your-development-environment","content":" In order to implement transformations through derivations, you’ll need to set up your development environment. You’ll need a text editor and flowtcl, the CLI-tool for Flow installed on your machine. Check out the docs page on installation instructions. Before continuing, sign in to the Estuary Flow dashboard, make sure you enable access to the Wikipedia demo. Using flowtcl, quickly verify you are able to view the demo collections used in this guide. Execute the below command to display the documents in the demo/wikipedia/recentchange-sampled collection: ::note This collection is a 3% sample of the enormous demo/wikipedia/recentchange collection which contains millions of documents. Since the purpose of this tutorial is to demonstrate a proof of concept, we avoid publishing a derivation that processes hundreds of gigabytes of data. ::: flowctl collections read --collection demo/wikipedia/recentchange-sampled --uncommitted If you see a stream of JSON documents on your terminal, you’re all good - feel free to cancel the process by pressing C^C. Examine a sample JSON that lives in the demo collection, as this is the data you’ll be using as the input for our derivation. { "$schema": "/mediawiki/recentchange/1.0.0", "_meta": { "file": "recentchange", "offset": 12837, "uuid": "f8f07d87-f5bf-11ee-8401-4fdf95f7b91a" }, "bot": false, "comment": "[[:File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg]] added to category", "id": 2468434138, "meta": { "domain": "commons.wikimedia.org", "dt": "2024-04-08T15:52:13Z", "id": "d9e8698f-4eac-4262-a451-b7ca247e401c", "offset": 5008568732, "partition": 0, "request_id": "b5372124-63fa-45e1-b35e-86784f1692bc", "stream": "mediawiki.recentchange", "topic": "eqiad.mediawiki.recentchange", "uri": "https://commons.wikimedia.org/wiki/Category:Jetons" }, "namespace": 14, "notify_url": "https://commons.wikimedia.org/w/index.php?diff=866807860&oldid=861559382&rcid=2468434138", "parsedcomment": "<a href=\\"/wiki/File:Jeton._Ordinaire_des_guerres_-_btv1b10405460g_(1_of_2).jpg\\" title=\\"File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg\\">File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg</a> added to category", "server_name": "commons.wikimedia.org", "server_script_path": "/w", "server_url": "https://commons.wikimedia.org", "timestamp": 1712591533, "title": "Category:Jetons", "title_url": "https://commons.wikimedia.org/wiki/Category:Jetons", "type": "categorize", "user": "DenghiùComm", "wiki": "commonswiki" } There’s a bunch of fields available, but as mentioned earlier, the scope of the transformation for this tutorial is limited to only one field, which lives nested inside the meta object. { ... "meta": { ... "domain": "commons.wikimedia.org", ... }, ... } This field is composed of the various wikipedia domains that are used to serve different sites of the organization. This is what you’ll use as the base of the filter derivation. Let's say that the goal is to only keep events that originate from the English-language wikipedia page, which is running under the domain en.wikipedia.org. ","version":"Next","tagName":"h2"},{"title":"Writing the derivation​","type":1,"pageTitle":"How to transform data using TypeScript","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/#writing-the-derivation","content":" Set up your folder structure so you can organize the resources required for the derivation. Create a working directory to follow along, and inside, create a flow.yaml file. Inside your flow.yaml file, add the following contents: --- collections: Dani/derivation-tutorial/recentchange-filtered-typescript: schema: recentchange-filtered.schema.yaml key: - /_meta/file - /_meta/offset derive: using: typescript: module: recentchange-filtered.ts transforms: - name: filter_values_typescript source: demo/wikipedia/recentchange-sampled shuffle: any   The Flow consists of just one collection, which is what you define here, called Dani/derivation-tutorial/recentchange-filtered-typescript. Let’s go over this in a bit more detail. First of all, the collection needs a schema. The schema of the incoming data (also called the “write” schema) is already defined by the demo, you only have to define the schema of the documents the transformation will output, which is the “read” schema. Let’s define what the final documents will look like. --- $schema: "http://json-schema.org/draft-07/schema#" properties: _meta: properties: file: type: string offset: type: integer uuid: type: string required: - file - offset type: object domain: type: string title: type: string user: type: string type: object Save this schema as recentchange-filtered.schema.yaml next to your flow.yaml file. As you can see, this schema definition includes a lot less fields than what is available in the incoming documents, this is expected, but if you wish to include more, this is where you would add them first. In the collection yaml definition, the next section defines the key of the documents. key: - /_meta/file - /_meta/offset Every Flow collection must declare a key which is used to group its documents. Keys are specified as an array of JSON pointers to document locations. The important detail here is to know that a collection key instructs Flow how documents of a collection are to be reduced, such as while being materialized to an endpoint. For this tutorial, you are just going to reuse the key definition of the base collection. The final section is where you specify that this collection is derived from another collection. derive: using: typescript: module: recentchange-filtered.ts transforms: - name: filter_values_typescript source: demo/wikipedia/recentchange-sampled shuffle: any Here you configure the name of the Typescript file that will contain the code for the actual transformation (don’t worry about the file not existing yet!) and give a name to the transformation.  The source: demo/wikipedia/recentchange-sampled property lets Flow know that the source collection is the demo collection from mentioned at in the beginning of the tutorial while shuffle tells Flow how to colocate documents while processing, which in this case is set to any, meaning source documents can be processed by any available compute. Alright, the configuration required for the derivation is in place, all that’s left is to write some TypeScript! ","version":"Next","tagName":"h2"},{"title":"The transformation code​","type":1,"pageTitle":"How to transform data using TypeScript","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/#the-transformation-code","content":" The next step is to use flowctl to generate TypeScript stubs you can use as aid when writing the transformation code. Execute the following command: flowctl generate --source flow.yaml If everything went well, you’ll see a bunch of new files that flowctl generated for you in your working directory. ➜ tree . ├── deno.json ├── flow.yaml ├── flow_generated │ └── typescript │ └── Dani │ └── derivation-tutorial │ └── recentchange-filtered-typescript.ts ├── recentchange-filtered.schema.yaml └── recentchange-filtered.ts 5 directories, 5 files The folder flow_generated along with the deno.json file are two things you won’t have to modify during this tutorial. If you take a look at file that flowtcl generated under flow_generated/typescript/<your_working_directory>/<your_prefix>/recentchange-filtered-typescript.ts you can see the types you are able to use in your transformations. // Generated for published documents of derived collection Dani/derivation-tutorial/recentchange-filtered-typescript. export type Document = { "_meta"?: { file: string; offset: number; uuid?: string; }; domain?: string; title?: string; user?: string; }; Now, the actual transformation code will live in the following file: recentchange-filtered.ts. Take a look at the default contents. import { IDerivation, Document, SourceFilterValuesTypescript } from 'flow/Dani/derivation-tutorial/recentchange-filtered-typescript.ts'; // Implementation for derivation Dani/derivation-tutorial/recentchange-filtered-typescript. export class Derivation extends IDerivation { filterValuesTypescript(_read: { doc: SourceFilterValuesTypescript }): Document[] { throw new Error("Not implemented"); } } Helpfully, flowctl provides a skeleton function. Update the function body to implement the filter functionality. export class Derivation extends IDerivation { filterValuesTypescript(_read: { doc: SourceFilterValuesTypescript }): Document[] { if (_read.doc.meta?.domain == 'en.wikipedia.org') { return [{ "_meta": { "file": _read.doc._meta.file, "offset": _read.doc._meta.offset, "uuid": _read.doc._meta.uuid, }, "domain": _read.doc.meta.domain, "title": _read.doc.title, "user": _read.doc.user }]; } else { return [] } } } As you can see, only documents which contain the “en.wikipedia.org” domain are being returned, in addition to discarding most fields from the incoming record, and just keeping the ones defined in the collection schema. ","version":"Next","tagName":"h2"},{"title":"Verify​","type":1,"pageTitle":"How to transform data using TypeScript","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/#verify","content":" You can use flowctl to quickly verify your derivation before publishing it. Use the preview command to get an idea of the resulting collections. ➜ flowctl preview --source flow.yaml --name Dani/derivation-tutorial/recentchange-filtered-typescript {"_meta":{"file":"recentchange","offset":13757,"uuid":"079296fe-f5c0-11ee-9401-4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"Adoption","user":"JustBeCool"} {"_meta":{"file":"recentchange","offset":13772,"uuid":"082ae4fc-f5c0-11ee-8801-4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"Wikipedia:Teahouse","user":"Subanark"} {"_meta":{"file":"recentchange","offset":13774,"uuid":"082ae4fc-f5c0-11ee-9001-4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"Islandia, New York","user":"204.116.28.102"} ^C As you can see, the output format matches the defined schema. The last step would be to publish your derivation to Flow, which you can also do using flowctl. Publishing the derivation will initialize the transformation on the live, real-time Wikipedia stream, make sure to delete it after completing the tutorial. flowctl catalog publish --source flow.yaml After successfully publishing your derivation, head over to the Collections page on the Web UI and you will be able to see your derivation in action! ","version":"Next","tagName":"h2"},{"title":"Wrapping up​","type":1,"pageTitle":"How to transform data using TypeScript","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/#wrapping-up","content":" In this guide you learned how to write your first stateless TypeScript derivation to filter data in a collection. ","version":"Next","tagName":"h2"},{"title":"Comparisons","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/overview/comparisons/","content":"","keywords":"","version":"Next"},{"title":"Apache Beam and Google Cloud Dataflow​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#apache-beam-and-google-cloud-dataflow","content":" Flow’s most apt comparison is to Apache Beam. You may use a variety of runners (processing engines) for your Beam deployment. One of the most popular, Google Cloud Dataflow, is a more robust redistribution under an additional SDK. Regardless of how you use Beam, there’s a lot of conceptual overlap with Flow. This makes Beam and Flow alternatives rather than complementary technologies, but there are key differences. Like Beam, Flow’s primary primitive is a collection. You build a processing graph (called a pipeline in Beam and a Data Flow in Flow) by relating multiple collections together through procedural transformations, or lambdas. As with Beam, Flow’s runtime performs automatic data shuffles and is designed to allow fully automatic scaling. Also like Beam, collections have associated schemas. Unlike Beam, Flow doesn’t distinguish between batch and streaming contexts. Flow unifies these paradigms under a single collection concept, allowing you to seamlessly work with both data types. Also, while Beam allows you the option to define combine operators, Flow’s runtime always applies combine operators. These are built using the declared semantics of the document’s schema, which makes it much more efficient and cost-effective to work with streaming data. Finally, Flow allows stateful stream-to-stream joins without the windowing semantics imposed by Beam. Notably, Flow’s modeling of state – via its per-key register concept – is substantially more powerful than Beam's per-key-and-window model. For example, registers can trivially model the cumulative lifetime value of a customer. ","version":"Next","tagName":"h2"},{"title":"Kafka​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#kafka","content":" Flow inhabits a different space than Kafka does by itself. Kafka is an infrastructure that supports streaming applications running elsewhere. Flow is an opinionated framework for working with real-time data. You might think of Flow as an analog to an opinionated bundling of several important features from the broader Kafka ecosystem. Flow is built on Gazette, a highly-scalable streaming broker similar to log-oriented pub/sub systems. Thus, Kafka is more directly comparable to Gazette. Flow also uses Gazette’s consumer framework, which has similarities to Kafka consumers. Both manage scale-out execution contexts for consumer tasks, offer durable local task stores, and provide exactly-once semantics. Journals in Gazette and Flow are roughly analogous to Kafka partitions. Each journal is a single append-only log. Gazette has no native notion of a topic, but instead supports label-based selection of subsets of journals, which tends to be more flexible. Gazette journals store data in contiguous chunks called fragments, which typically live in cloud storage. Each journal can have its own separate storage configuration, which Flow leverages to allow users to bring their own cloud storage buckets. Another unique feature of Gazette is its ability to serve reads of historical data by providing clients with pre-signed cloud storage URLs, which enables it to serve many readers very efficiently. Generally, Flow users don't need to know or care much about Gazette and its architecture, since Flow provides a higher-level interface over groups of journals, called collections. Flow collections are somewhat similar to Kafka streams, but with some important differences. Collections always store JSON and must have an associated JSON schema. Collections also support automatic logical and physical partitioning. Each collection is backed by one or more journals, depending on the partitioning. Flow tasks are most similar to Kafka stream processors, but are more opinionated. Tasks fall into one of three categories: captures, derivations, and materializations. Tasks may also have more than one process, which Flow calls shards, to allow for parallel processing. Tasks and shards are fully managed by Flow. This includes transactional state management and zero-downtime splitting of shards, which enables turnkey scaling. See how Flow compares to popular stream processing platforms that use Kafka: Flow vs Confluent feature and pricing breakdownFlow vs Debezium feature and pricing breakdown ","version":"Next","tagName":"h2"},{"title":"Spark​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#spark","content":" Spark can be described as a batch engine with stream processing add-ons, where Flow is fundamentally a streaming system that is able to easily integrate with batch systems. You can think of a Flow collection as a set of RDDs with common associated metadata. In Spark, you can save an RDD to a variety of external systems, like cloud storage or a database. Likewise, you can load from a variety of external systems to create an RDD. Finally, you can transform one RDD into another. You use Flow collections in a similar manner. They represent a logical dataset, which you can materialize to push the data into some external system like cloud storage or a database. You can also create a collection that is derived by applying stateful transformations to one or more source collections. Unlike Spark RDDs, Flow collections are backed by one or more unbounded append-only logs. Therefore, you don't create a new collection each time data arrives; you simply append to the existing one. Collections can be partitioned and can support extremely large volumes of data. Spark's processing primitives, applications, jobs, and tasks, don't translate perfectly to Flow, but we can make some useful analogies. This is partly because Spark is not very opinionated about what an application does. Your Spark application could read data from cloud storage, then transform it, then write the results out to a database. The closest analog to a Spark application in Flow is the Data Flow. A Data Flow is a composition of Flow tasks, which are quite different from tasks in Spark. In Flow, a task is a logical unit of work that does one of capture (ingest), derive (transform), or materialize (write results to an external system). What Spark calls a task is actually closer to a Flow shard. In Flow, a task is a logical unit of work, and shards represent the potentially numerous processes that actually carry out that work. Shards are the unit of parallelism in Flow, and you can easily split them for turnkey scaling. Composing Flow tasks is also a little different than composing Spark jobs. Flow tasks always produce and/or consume data in collections, instead of piping data directly from one shard to another. This is because every task in Flow is transactional and, to the greatest degree possible, fault-tolerant. This design also affords painless backfills of historical data when you want to add new transformations or materializations. ","version":"Next","tagName":"h2"},{"title":"Hadoop, HDFS, and Hive​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#hadoop-hdfs-and-hive","content":" There are many different ways to use Hadoop, HDFS, and the ecosystem of related projects, several of which are useful comparisons to Flow. To gain an understanding of Flow's processing model for derivations, see this blog post about MapReduce in Flow. HDFS is sometimes used as a system of record for analytics data, typically paired with an orchestration system for analytics jobs. If you do this, you likely export datasets from your source systems into HDFS. Then, you use some other tool to coordinate running various MapReduce jobs, often indirectly through systems like Hive. For this use case, the best way of describing Flow is that it completely changes the paradigm. In Flow, you always append data to existing collections, rather than creating a new one each time a job is run. In fact, Flow has no notion of a job like there is in Hadoop. Flow tasks run continuously and everything stays up to date in real time, so there's never a need for outside orchestration or coordination. Put simply, Flow collections are log-like, and files in HDFS typically store table-like data. This blog post explores those differences in greater depth. To make this more concrete, imagine a hypothetical example of a workflow in the Hadoop world where you export data from a source system, perform some transformations, and then run some Hive queries. In Flow, you instead define a capture of data from the source, which runs continuously and keeps a collection up to date with the latest data from the source. Then you transform the data with Flow derivations, which again apply the transformations incrementally and in real time. While you could actually use tools like Hive to directly query data from Flow collections — the layout of collection data in cloud storage is intentionally compatible with this — you could also materialize a view of your transformation results to any database, which is also kept up to date in real time. ","version":"Next","tagName":"h2"},{"title":"Fivetran, Airbyte, and other ELT solutions​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#fivetran-airbyte-and-other-elt-solutions","content":" Tools like Fivetran and Airbyte are purpose-built to move data from one place to another. These ELT tools typically model sources and destinations, and run regularly scheduled jobs to export from the source directly to the destination. Flow models things differently. Instead of modeling the world in terms of independent scheduled jobs that copy data from source to destination, Data Flows model a directed graph ofcaptures (reads from sources),derivations (transforms), andmaterializations (writes to destinations). Collectively, these are called tasks. Tasks in Flow are only indirectly linked. Captures read data from a source and output to collections. Flow collections store all the data in cloud storage, with configurable retention for historical data. You can then materialize each collection to any number of destination systems. Each one will be kept up to date in real time, and new materializations can automatically backfill all your historical data. Collections in Flow always have an associated JSON schema, and they use that to ensure the validity of all collection data. Tasks are also transactional and generally guarantee end-to-end exactly-once processing (so long as the endpoint system can accommodate them). Like Airbyte, Flow uses connectors for interacting with external systems in captures and materializations. For captures, Flow integrates the Airbyte specification, so all Airbyte source connectors can be used with Flow. For materializations, Flow uses its own protocol which is not compatible with the Airbyte spec. In either case, the usage of connectors is pretty similar. In terms of technical capabilities, Flow can do everything that these tools can and more. Both Fivetran and Airbyte both currently have graphical interfaces that make them much easier for non-technical users to configure. Flow, too, is focused on empowering non-technical users through its web application. At the same time, it Flow offers declarative YAML for configuration, which works excellently in a GitOps workflow. Flow vs Fivetran feature and pricing breakdown. ","version":"Next","tagName":"h2"},{"title":"dbt​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#dbt","content":" dbt is a tool that enables data analysts and engineers to transform data in their warehouses more effectively. In addition to – and perhaps more important than – its transform capability, dbt brought an entirely new workflow for working with data: one that prioritizes version control, testing, local development, documentation, composition, and re-use. Like dbt, Flow uses a declarative model and tooling, but the similarities end there. dbt is a tool for defining transformations, which are executed within your analytics warehouse. Flow is a tool for delivering data to that warehouse, as well as continuous operational transforms that are applied everywhere else. These two tools can make lots of sense to use together. First, Flow brings timely, accurate data to the warehouse. Within the warehouse, analysts can use tools like dbt to explore the data. The Flow pipeline is then ideally suited to productionize important insights as materialized views or by pushing to another destination. Put another way, Flow is a complete ELT platform, but you might choose to perform and manage more complex transformations in a separate, dedicated tool like dbt. While Flow and dbt don’t interact directly, both offer easy integration through your data warehouse. ","version":"Next","tagName":"h2"},{"title":"Materialize, Rockset, ksqlDB, and other real-time databases​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#materialize-rockset-ksqldb-and-other-real-time-databases","content":" Modern real-time databases like Materialize, Rockset, and ksqlDB consume streams of data, oftentimes from Kafka brokers, and can keep SQL views up to date in real time. These real-time databases have a lot of conceptual overlap with Flow. The biggest difference is that Flow can materialize this same type of incrementally updated view into any database, regardless of whether that database has real-time capabilities or not. However, this doesn't mean that Flow should replace these systems in your stack. In fact, it can be optimal to use Flow to feed data into them. Flow adds real-time data capture and materialization options that many real-time databases don't support. Once data has arrived in the database, you have access to real-time SQL analysis and other analytical tools not native to Flow. For further explanation, read the section below on OLAP databases. ","version":"Next","tagName":"h2"},{"title":"Snowflake, BigQuery, and other OLAP databases​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#snowflake-bigquery-and-other-olap-databases","content":" Flow differs from OLAP databases mainly in that it's not a database. Flow has no query interface, and no plans to add one. Instead, Flow allows you to use the query interfaces of any database by materializing views into it. Flow is similar to OLAP databases in that it can be the source of truth for all analytics data (though it's also capable enough to handle operational workloads). Instead of schemas and tables, Flow defines collections. These collections are conceptually similar to database tables in the sense that they are containers for data with an associated (primary) key. Under the hood, Flow collections are each backed by append-only logs, where each document in the log represents a delta update for a given key. Collections can be easily materialized into a variety of external systems, such as Snowflake or BigQuery. This creates a table in your OLAP database that is continuously kept up to date with the collection. With Flow, there's no need to schedule exports to these systems, and thus no need to orchestrate the timing of those exports. You can also materialize a given collection into multiple destination systems, so you can always use whichever system is best for the type of queries you want to run. Like Snowflake, Flow uses inexpensive cloud storage for all collection data. It even lets you bring your own storage bucket, so you're always in control. Unlike data warehouses, Flow is able to directly capture data from source systems, and continuously and incrementally keep everything up to date. A common pattern is to use Flow to capture data from multiple different sources and materialize it into a data warehouse. Flow can also help you avoid expenses associated with queries you frequently pull from a data warehouse by keeping an up-to-date view of them where you want it. Because of Flow’s exactly-once processing guarantees, these materialized views are always correct, consistent, and fault-tolerant. ","version":"Next","tagName":"h2"},{"title":"Who should use Flow?","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/overview/who-should-use-flow/","content":"","keywords":"","version":"Next"},{"title":"How Flow can help​","type":1,"pageTitle":"Who should use Flow?","url":"/pr-preview/pr-1594/overview/who-should-use-flow/#how-flow-can-help","content":" These unique Flow features can help you solve the problems listed above. ","version":"Next","tagName":"h2"},{"title":"Fully integrated pipelines​","type":1,"pageTitle":"Who should use Flow?","url":"/pr-preview/pr-1594/overview/who-should-use-flow/#fully-integrated-pipelines","content":" With Flow, you can build, test, and evolve pipelines that continuously capture, transform, and materialize data across all of your systems. With one tool, you can power workflows that have historically required you to first piece together services, then integrate and operate them in-house to meet your needs. To achieve comparable capabilities to Flow you would need: A low-latency streaming system, such as AWS KinesisData lake build-out, such as Kinesis Firehose to S3Custom ETL application development, such as Spark, Flink, or AWS λSupplemental data stores for intermediate transformation statesETL job management and execution, such as a self-hosting or Google Cloud DataflowCustom reconciliation of historical vs streaming datasets, including onerous backfills of new streaming applications from historical data Flow dramatically simplifies this inherent complexity. It saves you time and costs, catches mistakes before they hit production, and keeps your data fresh across all the places you use it. With both a UI-forward web application and a powerful CLI , more types of professionals can contribute to what would otherwise require a highly specialized set of technical skills. ","version":"Next","tagName":"h3"},{"title":"Efficient architecture​","type":1,"pageTitle":"Who should use Flow?","url":"/pr-preview/pr-1594/overview/who-should-use-flow/#efficient-architecture","content":" Flow mixes a variety of architectural techniques to deliver high throughput, avoid latency, and minimize operating costs. These include: Leveraging reductions to reduce the amount of data that must be ingested, stored, and processed, often dramaticallyExecuting transformations predominantly in-memoryOptimistic pipelining and vectorization of internal remote procedure calls (RPCs) and operationsA cloud-native design that optimizes for public cloud pricing models Flow also makes it easy to materialize focused data views directly into your warehouse, so you don't need to repeatedly query the much larger source datasets. This can dramatically lower warehouse costs. ","version":"Next","tagName":"h3"},{"title":"Powerful transformations​","type":1,"pageTitle":"Who should use Flow?","url":"/pr-preview/pr-1594/overview/who-should-use-flow/#powerful-transformations","content":" With Flow, you can build pipelines that join a current event with an event that happened days, weeks, even years in the past. Flow can model arbitrary stream-to-stream joins without the windowing constraints imposed by other systems, which limit how far back in time you can join. Flow transforms data in durable micro-transactions, meaning that an outcome, once committed, won't be silently re-ordered or changed due to a crash or machine failure. This makes Flow uniquely suited for operational workflows, like assigning a dynamic amount of available inventory to a stream of requests — decisions that, once made, should not be forgotten. You can also evolve transformations as business requirements change, enriching them with new datasets or behaviors without needing to re-compute from scratch. ","version":"Next","tagName":"h3"},{"title":"Data integrity​","type":1,"pageTitle":"Who should use Flow?","url":"/pr-preview/pr-1594/overview/who-should-use-flow/#data-integrity","content":" Flow is architected to ensure that your data is accurate and that changes don't break pipelines. It supports strong schematization, durable transactions with exactly-once semantics, and easy end-to-end testing. Required JSON schemas ensure that only clean, consistent data is ingested into Flow or written to external systems. If a document violates its schema, Flow pauses the pipeline, giving you a chance to fix the error.Schemas can encode constraints, like that a latitude value must be between +90 and -90 degrees, or that a field must be a valid email address.Flow can project JSON schema into other flavors, like TypeScript types or SQL tables. Strong type checking catches bugs before they're applied to production.Flow's declarative tests verify the integrated, end-to-end behavior of data flows. ","version":"Next","tagName":"h3"},{"title":"Dynamic scaling​","type":1,"pageTitle":"Who should use Flow?","url":"/pr-preview/pr-1594/overview/who-should-use-flow/#dynamic-scaling","content":" The Flow runtime scales from a single process up to a large Kubernetes cluster for high-volume production deployments. Processing tasks are quickly reassigned upon any machine failure for high availability. Each process can also be scaled independently, at any time, and without downtime. This is unique to Flow. Comparable systems require that an arbitrary data partitioning be decided upfront, a crucial performance knob that's awkward and expensive to change. Instead, Flow can repeatedly split a running task into two new tasks, each half the size, without stopping it or impacting its downstream uses. ","version":"Next","tagName":"h3"},{"title":"Allowlisting IP Addresses for Estuary Flow","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/allow-ip-addresses/","content":"","keywords":"","version":"Next"},{"title":"IP Addresses to Allowlist​","type":1,"pageTitle":"Allowlisting IP Addresses for Estuary Flow","url":"/pr-preview/pr-1594/reference/allow-ip-addresses/#ip-addresses-to-allowlist","content":" Ensure that the following IP addresses are allowlisted on both the source and destination systems that interact with Estuary Flow: 34.121.207.12835.226.75.13534.68.62.148 ","version":"Next","tagName":"h2"},{"title":"Authorizing users and authenticating with Flow","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/authentication/","content":"","keywords":"","version":"Next"},{"title":"Subjects, objects, and inherited capabilities​","type":1,"pageTitle":"Authorizing users and authenticating with Flow","url":"/pr-preview/pr-1594/reference/authentication/#subjects-objects-and-inherited-capabilities","content":" The entity to which you grant a capability is called the subject, and the entity over which access is granted is called the object. The subject can be either a user or a prefix, and the object is always a prefix. This allows subjects to inherit nested capabilities, so long as they are granted admin. For example, user X of Acme Co has admin access to the acmeCo/ prefix, and user Y has write access. A third party has granted acmeCo/ read access to shared data at outside-org/acmeCo-share/. User X automatically inherits read access to outside-org/acmeCo-share/, but user Y does not. ","version":"Next","tagName":"h2"},{"title":"Default authorization settings​","type":1,"pageTitle":"Authorizing users and authenticating with Flow","url":"/pr-preview/pr-1594/reference/authentication/#default-authorization-settings","content":" When you first sign up to use Flow, your organization is provisioned a prefix, and your username is granted admin access to the prefix. Your prefix is granted write access to itself and read access to its logs, which are stored under a unique sub-prefix of the global ops/ prefix. Using the same example, say user X signs up on behalf of their company, AcmeCo. User X is automatically granted admin access to the acmeCo/ prefix.acmeCo/, in turn, has write access to acmeCo/ and read access to ops/acmeCo/. As more users and prefixes are added, admins can provision capabilities using the CLI. ","version":"Next","tagName":"h2"},{"title":"Authenticating Flow in the web app​","type":1,"pageTitle":"Authorizing users and authenticating with Flow","url":"/pr-preview/pr-1594/reference/authentication/#authenticating-flow-in-the-web-app","content":" You must sign in to begin a new session using the Flow web application. For the duration of the session, you'll be able to perform actions depending on the capabilities granted to the user profile. You can view the capabilities currently provisioned in your organization on the Admin tab. ","version":"Next","tagName":"h2"},{"title":"Authenticating Flow using the CLI​","type":1,"pageTitle":"Authorizing users and authenticating with Flow","url":"/pr-preview/pr-1594/reference/authentication/#authenticating-flow-using-the-cli","content":" You can use the flowctl CLI to work with your organization's catalogs and drafts in your local development environment. To authenticate a local development session using the CLI, do the following: Ensure that you have an Estuary account and have signed into the Flow web app before. In the terminal of your local development environment, run: flowctl auth login In a browser window, the web app opens to the CLI-API tab. Copy the access token. Return to the terminal, paste the access token, and press Enter. The token will expire after a predetermined duration. Repeat this process to re-authenticate. ","version":"Next","tagName":"h2"},{"title":"Provisioning capabilities​","type":1,"pageTitle":"Authorizing users and authenticating with Flow","url":"/pr-preview/pr-1594/reference/authentication/#provisioning-capabilities","content":" As an admin, you can provision capabilities using the CLI with the subcommands of flowctl auth roles. For example: flowctl auth roles list returns a list of all currently provisioned capabilities flowctl auth roles grant --object-role=acmeCo/ --capability=admin --subject-user-id=userZ grants user Z admin access to acmeCo flowctl auth roles revoke --object-role=outside-org/acmeCo-share/ --capability=read --subject-role=acmeCo/ would be used by an admin of outside-orgto revoke acmeCo/'s read access to outside-org/acmeCo-share/. You can find detailed help for all subcommands using the --help or -h flag. ","version":"Next","tagName":"h2"},{"title":"Configuring task shards","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Configuring-task-shards/","content":"","keywords":"","version":"Next"},{"title":"Properties​","type":1,"pageTitle":"Configuring task shards","url":"/pr-preview/pr-1594/reference/Configuring-task-shards/#properties","content":" Property\tTitle\tDescription\tType/disable\tDisable\tDisable processing of the task's shards.\tBoolean /logLevel\tLog level\tLog levels may currently be "error", "warn", "info", "debug", or "trace". If not set, the effective log level is "info".\tString /maxTxnDuration\tMaximum transaction duration\tThis duration upper-bounds the amount of time during which a transaction may process documents before it must initiate a commit. Note that it may take some additional time for the commit to complete after it is initiated. The shard may run for less time if there aren't additional ready documents for it to process. If not set, the maximum duration defaults to one second for captures and derivations, and 5 minutes for materializations.\tString /minTxnDuration\tMinimum transaction duration\tThis duration lower-bounds the amount of time during which a transaction must process documents before it must flush and commit. It may run for more time if additional documents are available. The default value is zero seconds.\tString For more information about these controls and when you might need to use them, see: TransactionsLog level ","version":"Next","tagName":"h2"},{"title":"Sample​","type":1,"pageTitle":"Configuring task shards","url":"/pr-preview/pr-1594/reference/Configuring-task-shards/#sample","content":" materializations: acmeCo/snowflake-materialization: endpoint: connector: config: account: acmeCo database: acmeCo_db password: secret cloud_provider: aws region: us-east-1 schema: acmeCo_flow_schema user: snowflake_user warehouse: acmeCo_warehouse image: ghcr.io/estuary/materialize-snowflake:dev bindings: - resource: table: anvils source: acmeCo/anvils shards: logLevel: debug minTxnDuration: 30s maxTxnDuration: 4m ","version":"Next","tagName":"h2"},{"title":"Connectors","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/","content":"Connectors A current list and configuration details for Estuary's connectors can be found on the following pages: Capture connectorsMaterialization connectorsDekaf integrations You can learn more about how connectors work and how to use them in their conceptual documentation.","keywords":"","version":"Next"},{"title":"Aircall","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#prerequisites","content":" To set up the Aircall connector, you need the following prerequisite: Access Token: An access token acting as a bearer token is required for the connector to work. You can find the access token in the settings of Aircall. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#setup","content":" Follow the steps below to set up the Aircall connector. Obtain an Aircall access token from the Aircall settings. ","version":"Next","tagName":"h2"},{"title":"Set up the Aircall connector in Estuary Flow​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#set-up-the-aircall-connector-in-estuary-flow","content":" Log into your Estuary Flow account.In the left navigation bar, click on "Captures". In the top-left corner, click "Connector Search".Enter the name for the Aircall connector and select "Aircall" from the dropdown.Fill out the following endpoint configurations: api_id: The auto-generated ID.api_token: The access token obtained from Aircall settings.start_date: Date filter for eligible streams. Enter the desired start date. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Aircall source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_id\tAPI ID\tApp ID found at settings\tstring\tRequired /api_token\tAPI Token\tApp token found at settings\tstring\tRequired /start_date\tStart Date\tDate time filter for incremental filter, Specify which date to extract from.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Aircall project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#sample","content":" { "properties": { "start_date": { "default": "2023-01-01T00:00:00.000Z", "format": null } } } ","version":"Next","tagName":"h3"},{"title":"Supported Streams​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#supported-streams","content":" The Aircall connector supports the following streams: callscompanycontactsnumberstagsuser_availablityusersteamswebhooks ","version":"Next","tagName":"h2"},{"title":"API Method Example​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#api-method-example","content":" An example of an API method call for Aircall: GET https://api.aircall.io/v1/numbers ","version":"Next","tagName":"h2"},{"title":"Performance Considerations​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#performance-considerations","content":" The Aircall API currently uses v1. The connector defaults to using v1. ","version":"Next","tagName":"h2"},{"title":"Airtable","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Airtable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/#prerequisites","content":" An active Airtable account ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Airtable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Airtable source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Airtable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/#properties","content":" Endpoint​ The following properties reflect the API Key authentication method. Property\tTitle\tDescription\tType\tRequired/Default/api_key\tAPI Key\tAPI Key\tstring\tRequired /access_token\tPersonal Access Token\tThe Personal Access Token for the Airtable account.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Airtable project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Airtable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-airtable:dev config: access_token: <secret> api_key: <secret> bindings: - resource: stream: users syncMode: full_refresh target: ${PREFIX}/users {...} ","version":"Next","tagName":"h3"},{"title":"Capture connectors","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/","content":"","keywords":"","version":"Next"},{"title":"Available capture connectors​","type":1,"pageTitle":"Capture connectors","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/#available-capture-connectors","content":" ","version":"Next","tagName":"h2"},{"title":"Estuary connectors​","type":1,"pageTitle":"Capture connectors","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/#estuary-connectors","content":" These connectors are created by Estuary. We prioritize high-scale technology systems for development. All Estuary connectors capture data in real time, as it appears in the source system AlloyDB ConfigurationPackage - ghcr.io/estuary/source-alloydb:dev Alpaca ConfigurationPackage - ghcr.io/estuary/source-alpaca:dev Amazon Dynamodb ConfigurationPackage - ghcr.io/estuary/source-dynamodb:dev Amazon Kinesis ConfigurationPackage — ghcr.io/estuary/source-kinesis:dev Amazon RDS SQL Server ConfigurationPackage - ghcr.io/estuary/source-amazon-rds-sqlserver Amazon S3 ConfigurationPackage — ghcr.io/estuary/source-s3:dev Apache Kafka ConfigurationPackage — ghcr.io/estuary/source-kafka:dev Azure Blob Storage ConfigurationPackage — ghcr.io/estuary/azure-blob-storage:dev Azure SQL Server ConfigurationPackage - ghcr.io/estuary/source-azure-sqlserver:dev BigQuery ConfigurationPackage — ghcr.io/estuary/source-bigquery-batch:dev Dropbox ConfigurationPackage - ghcr.io/estuary/source-dropbox:dev Google Cloud Storage ConfigurationPackage — ghcr.io/estuary/source-gcs:dev Google Firestore ConfigurationPackage - ghcr.io/estuary/source-firestore:dev Google Cloud Pub/Sub ConfigurationPackage — ghcr.io/estuary/source-google-pubsub:dev Google Cloud SQL Server ConfigurationPackage - ghcr.io/estuary/source-google-cloud-sql-sqlserver:md HTTP file ConfigurationPackage - ghcr.io/estuary/source-http-file:dev HTTP ingest (webhook) ConfigurationPackage - ghcr.io/estuary/source-http-ingest:dev Hubspot (Real-Time) ConfigurationPackage - ghcr.io/estuary/source-hubspot-native:dev MariaDB ConfigurationPackage - ghcr.io/estuary/source-mariadb:dev Microsoft SQL Server ConfigurationPackage - ghcr.io/estuary/source-sqlserver:dev MongoDB ConfigurationPackage - ghcr.io/estuary/source-mongodb:dev MySQL ConfigurationPackage - ghcr.io/estuary/source-mysql:dev Pendo ConfigurationPackage - ghcr.io/estuary/source-pendo:dev PostgreSQL ConfigurationPackage — ghcr.io/estuary/source-postgres:dev Salesforce (for real-time data) ConfigurationPackage - ghcr.io/estuary/source-salesforce-next:dev SFTP ConfigurationPackage - ghcr.io/estuary/source-sftp:dev Snowflake ConfigurationPackage - ghcr.io/estuary/source-snowflake:dev ","version":"Next","tagName":"h3"},{"title":"Third party connectors​","type":1,"pageTitle":"Capture connectors","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/#third-party-connectors","content":" Estuary supports open-source connectors from third parties. These connectors operate in a batch fashion, capturing data in increments. When you run these connectors in Flow, you'll get as close to real time as possible within the limitations set by the connector itself. Typically, we enable SaaS connectors from third parties to allow more diverse data flows. All the third-party connectors available currently were created by Airbyte. The versions made available in Flow have been adapted for compatibility. Airtable ConfigurationPackage - ghrc.io/estuary/source-airtable.dev Amazon Ads ConfigurationPackage - ghrc.io/estuary/source-amazon-ads.dev Amplitude ConfigurationPackage - ghcr.io/estuary/source-amplitude:dev Bing Ads ConfigurationPackage - ghcr.io/estuary/source-bing-ads:dev Braintree ConfigurationPackage - ghcr.io/estuary/source-braintree:dev Braze ConfigurationPackage - ghcr.io/estuary/source-braze:dev Chargebee ConfigurationPackage - ghrc.io/estuary/source-chargebee.dev Exchange Rates API ConfigurationPackage - ghcr.io/estuary/source-exchange-rates:dev Facebook Marketing ConfigurationPackage - ghcr.io/estuary/source-facebook-marketing:dev Freshdesk ConfigurationPackage - ghcr.io/estuary/source-freshdesk:dev GitHub ConfigurationPackage - ghcr.io/estuary/source-github:dev Gladly ConfigurationPackage - ghrc.io/estuary/source-gladly.dev Google Ads ConfigurationPackage - ghcr.io/estuary/source-google-ads:dev Google Analytics 4 ConfigurationPackage - ghcr.io/estuary/source-google-analytics-data-api:dev Google Universal Analytics ConfigurationPackage - ghcr.io/estuary/source-google-analytics-ua:dev Google Search Console ConfigurationPackage - ghcr.io/estuary/source-google-search-console:dev Google Sheets ConfigurationPackage - ghcr.io/estuary/source-google-sheets:dev Greenhouse ConfigurationPackage - ghrc.io/estuary/source-greenhouse.dev Harvest ConfigurationPackage - ghcr.io/estuary/source-harvest:dev Hubspot ConfigurationPackage - ghcr.io/estuary/source-hubspot:dev Instagram ConfigurationPackage - ghcr.io/estuary/source-instagram:dev Intercom ConfigurationPackage - ghcr.io/estuary/source-intercom:dev Iterable ConfigurationPackage - ghrc.io/estuary/source-iterable.dev Jira ConfigurationPackage - ghrc.io/estuary/source-jira.dev Klaviyo ConfigurationPackage - ghrc.io/estuary/source-klaviyo.dev LinkedIn Ads ConfigurationPackage - ghcr.io/estuary/source-linkedin-ads:dev LinkedIn Pages ConfigurationPackage - ghcr.io/estuary/source-linkedin-pages:4985746 Mailchimp ConfigurationPackage - ghcr.io/estuary/source-mailchimp:dev Marketo ConfigurationPackage - ghrc.io/estuary/source-marketo.dev MixPanel ConfigurationPackage - ghrc.io/estuary/source-mixpanel.dev NetSuite ConfigurationPackage - ghcr.io/estuary/source-netsuite:dev Notion ConfigurationPackage - ghcr.io/estuary/source-notion:dev Paypal Transaction ConfigurationPackage - ghrc.io/estuary/source-paypal-transaction.dev Recharge ConfigurationPackage - ghcr.io/estuary/source-recharge:dev Salesforce (For historical data) ConfigurationPackage - ghcr.io/estuary/source-salesforce:dev SendGrid ConfigurationPackage - ghcr.io/estuary/source-sendgrid:dev Sentry ConfigurationPackage - ghcr.io/estuary/source-sentry:dev Slack ConfigurationPackage - ghcr.io/estuary/source-slack:dev Snapchat ConfigurationPackage - ghcr.io/estuary/source-snapchat:dev Stripe ConfigurationPackage - ghcr.io/estuary/source-stripe:dev SurveyMonkey ConfigurationPackage - ghcr.io/estuary/source-surveymonkey:dev Twilio ConfigurationPackage - ghcr.io/estuary/source-twilio:dev Zendesk Chat ConfigurationPackage - ghcr.io/estuary/source-zendesk-chat:dev Zendesk Support ConfigurationPackage - ghcr.io/estuary/source-zendesk-support:dev ","version":"Next","tagName":"h3"},{"title":"AlloyDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/#prerequisites","content":" You'll need a AlloyDB database setup with the following: Logical decoding enabledUser role with REPLICATION attributeA replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. Optional; if none exist, one will be created by the connector.If you wish to run multiple captures from the same database, each must have its own slot. You can create these slots yourself, or by specifying a name other than the default in the advanced configuration. A publication. This represents the set of tables for which change events will be reported. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. You'll also need a virtual machine to connect securely to the instance via SSH tunnelling (AlloyDB doesn't support IP allowlisting). ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/#setup","content":" To meet the prerequisites, complete these steps. Set the alloydb.logical_decoding flag to on to enable logical replication on your AlloyDB instance. In your psql client, connect to your instance and issue the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table and publication. CREATE USER flow_capture WITH REPLICATION IN ROLE alloydbsuperuser LOGIN PASSWORD 'secret'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture; CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication FOR ALL TABLES; Follow the instructions to create a virtual machine for SSH tunnelingin the same Google Cloud project as your instance. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/#backfills-and-performance-considerations","content":" When the a AlloyDB capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/#properties","content":" Endpoint​ The SSH config section is required for this connector. You'll fill in the database address with a localhost IP address, and specify your VM's IP address as the SSH address. See the table below and the sample config. Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired, "postgres" /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/publicationName\tPublication Name\tThe name of the PostgreSQL publication to replicate from.\tstring\t"flow_publication" /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/slotName\tSlot Name\tThe name of the PostgreSQL replication slot to replicate from.\tstring\t"flow_slot" /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"public.flow_watermarks" networkTunnel\tNetwork Tunnel\tConnect to your system through an SSH server that acts as a bastion host for your network.\tObject networkTunnel/sshForwarding\tSSH Forwarding Object networkTunnel/sshForwarding/sshEndpoint\tSSH Endpoint\tEndpoint of the remote SSH server (in this case, your Google Cloud VM) that supports tunneling (in the form of ssh://user@address).\tString networkTunnel/sshForwarding/privateKey\tSSH Private Key\tPrivate key to connect to the remote SSH server.\tString\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/instance of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-alloydb:dev" config: address: "127.0.0.1:5432" database: "postgres" user: "flow_capture" password: "secret" networkTunnel: sshForwarding: sshEndpoint: ssh://sshUser@vm-ip-address privateKey: |2 -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCJO7G6R+kv2MMS8Suw21sk2twHg8Vog0fjimEWJEwyAfFM/Toi EJ6r5RTaSvN++/+MPWUll7sUdOOBZr6ErLKLHEt7uXxusAzOjMxFKZpEARMcjwHY v/tN1A2OYU0qay1DOwknEE0i+/Bvf8lMS7VDjHmwRaBtRed/+iAQHf128QIDAQAB AoGAGoOUBP+byAjDN8esv1DCPU6jsDf/Tf//RbEYrOR6bDb/3fYW4zn+zgtGih5t CR268+dwwWCdXohu5DNrn8qV/Awk7hWp18mlcNyO0skT84zvippe+juQMK4hDQNi ywp8mDvKQwpOuzw6wNEitcGDuACx5U/1JEGGmuIRGx2ST5kCQQDsstfWDcYqbdhr 5KemOPpu80OtBYzlgpN0iVP/6XW1e5FCRp2ofQKZYXVwu5txKIakjYRruUiiZTza QeXRPbp3AkEAlGx6wMe1l9UtAAlkgCFYbuxM+eRD4Gg5qLYFpKNsoINXTnlfDry5 +1NkuyiQDjzOSPiLZ4Abpf+a+myjOuNL1wJBAOwkdM6aCVT1J9BkW5mrCLY+PgtV GT80KTY/d6091fBMKhxL5SheJ4SsRYVFtguL2eA7S5xJSpyxkadRzR0Wj3sCQAvA bxO2fE1SRqbbF4cBnOPjd9DNXwZ0miQejWHUwrQO0inXeExNaxhYKQCcnJNUAy1J 6JfAT/AbxeSQF3iBKK8CQAt5r/LLEM1/8ekGOvBh8MAQpWBW771QzHUN84SiUd/q xR9mfItngPwYJ9d/pTO7u9ZUPHEoat8Ave4waB08DsI= -----END RSA PRIVATE KEY----- bindings: - resource: stream: ${TABLE_NAME} namespace: ${TABLE_NAMESPACE} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Alpaca","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/","content":"","keywords":"","version":"Next"},{"title":"Real-time and historical trade data​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#real-time-and-historical-trade-data","content":" The Alpaca Market Data API comprises multiple APIs for stock trades, including the Trades REST API for historical trade data and websocket streaming via the Data API for real-time trade data. Historical trade data is available from the Alpaca Market Data API starting 01-01-2016. As such, the connector configuration requires a start date for the backfill to be on or after 01-01-2016. This connector uses both APIs to capture historical and real-time data in parallel. It uses the Trades API to perform a historical backfill starting from the start date you specify and stopping when it reaches the present. At the same time, the connector uses websocket streaming to initiate a real-time stream of trade data starting at the present moment and continuing indefinitely until you stop the capture process. As a result, you'll get data from a historical time period you specify, as well as the lowest-latency possible updates of new trade data, but there will be some overlap in the two data streams. See limitations to learn more about reconciling historical and real-time data. ","version":"Next","tagName":"h2"},{"title":"Supported data resources​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#supported-data-resources","content":" Alpaca supports over 8000 stocks and EFTs. You simply supply a list of symbols to Flow when you configure the connector. To check whether Alpaca supports a symbol, you can use the Alpaca Broker API. You can use this connector to capture data from up to 20 stock symbols into Flow collections in a single capture (to add more than 20, set up multiple captures). For a given capture, data from all symbols is captured to a single collection. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#prerequisites","content":" To use this connector, you'll need: An Alpaca account. To access complete stock data in real-time, you'll need the Unlimited plan. To access a smaller sample of trade data with a 15-minute delay, you can use a Free plan, making sure to set Feed to iex and choose the Free Plan option when configuring the connector. Your Alpaca API Key ID and Secret Key. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Alpaca source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/disable_backfill\tDisable Historical Data Backfill\tDisables historical data backfill via the historical data API. Data will only be collected via streaming.\tboolean /advanced/disable_real_time\tDisable Real-Time Streaming\tDisables real-time streaming via the websocket API. Data will only be collected via the backfill mechanism.\tboolean /advanced/is_free_plan\tFree Plan\tSet this if you are using a free plan. Delays data by 15 minutes.\tboolean /advanced/max_backfill_interval\tMaximum Backfill Interval\tThe largest time interval that will be requested for backfills. Using smaller intervals may be useful when tracking many symbols. Must be a valid Go duration string.\tstring /advanced/min_backfill_interval\tMinimum Backfill Interval\tThe smallest time interval that will be requested for backfills after the initial backfill is complete. Must be a valid Go duration string.\tstring /advanced/stop_date\tStop Date\tStop backfilling historical data at this date.\tstring /api_key_id\tAlpaca API Key ID\tYour Alpaca API key ID.\tstring\tRequired /api_secret_key\tAlpaca API Secret Key\tYour Alpaca API Secret key.\tstring\tRequired /feed\tFeed\tThe feed to pull market data from. Choose from iex or sip; set iex if using a free plan.\tstring\tRequired /start_date\tStart Date\tGet trades starting at this date. Has no effect if changed after the capture has started. Must be no earlier than 2016-01-01T00:00:00Z.\tstring\tRequired /symbols\tSymbols\tComma separated list of symbols to monitor.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tName\tUnique name for this binding. Cannot be changed once set.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-alpaca:dev" config: api_key_id: <SECRET> api_secret_key: <SECRET> feed: iex start_date: 2022-11-01T00:00:00Z symbols: AAPL,MSFT,AMZN,TSLA,GOOGL,GOOG,NVDA,BRK.B,META,UNH advanced: is_free_plan: true bindings: - resource: name: trades target: ${PREFIX}/${CAPTURE_NAME}/trades ","version":"Next","tagName":"h3"},{"title":"Limitations​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#limitations","content":" Capturing data for more than 20 symbols in a single capture could result in API errors.​ If you need to capture data for more than 20 symbols, we recommend splitting them between two captures. Support for a larger number of symbols in a single capture is planned for a future release. Separate historical and real-time data streams will result in some duplicate trade documents.​ As discussed above, the connector captures historical and real-time data in two different streams. As the historical data stream catches up to the present, it will overlap with the beginning of the real-time data stream, resulting in some duplicated documents. These will have identical properties from Alpaca, but different metadata from Flow. There are several ways to resolve this: If you plan to materialize to an endpoint for which standard (non-delta) updates are supported, Flow will resolve the duplicates during the materialization process. Unless otherwise specified in their documentation page, materialization connectors run in standard updates mode. If a connector supports both modes, it will default to standard updates. If you plan to materialize to an endpoint for which delta updates is the only option, ensure that the endpoint system supports the equivalent of lastWriteWins reductions. ","version":"Next","tagName":"h2"},{"title":"Amazon Ads","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#supported-data-resources","content":" The following data resources are supported: ProfilesSponsored brands ad groupsSponsored brands campaignsSponsored brands keywordsSponsored brands report streamSponsored brands video report streamSponsored display ad groupsSponsored display ad campaignsSponsored display product ads Sponsored display report streamSponsored display targetingsSponsored product ad groupsSponsored product adsSponsored product campaignsSponsored product keywordsSponsored product negative keywordsSponsored product targetingsSponsored product report stream By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#prerequisites","content":" This connector uses OAuth2 to authenticate with Amazon. You can do this in the Flow web app, or configure manually if you're using the flowctl CLI. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Amazon in the Flow web app​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#using-oauth2-to-authenticate-with-amazon-in-the-flow-web-app","content":" You'll need an Amazon user account with access to the Amazon Ads account from which you wish to capture data. You'll use these credentials to sign in. ","version":"Next","tagName":"h3"},{"title":"Authenticating manually using the CLI​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#authenticating-manually-using-the-cli","content":" When you configure this connector manually, you provide the same credentials that OAuth2 would automatically fetch if you used the web app. These are: Client IDClient secretRefresh token To obtain these credentials: Complete the Amazon Ads API onboarding process. Retrieve your client ID and client secret. Retrieve a refresh token. ","version":"Next","tagName":"h3"},{"title":"Selecting data region and profiles​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#selecting-data-region-and-profiles","content":" When you configure the endpoint for this connector, you must choose an Amazon region from which to capture data. Optionally, you may also select profiles from which to capture data. The region must be one of: NA (North America)EU (European Union)FE (Far East) These represent the three URL endpoints provided by Amazon through which you can access the marketing API. Each region encompasses multiple Amazon marketplaces, which are broken down by country. See the Amazon docs for details. If you run your Amazon ads in multiple marketplaces, you may have separate profiles for each. If this is the case, you can specify the profiles from which you wish to capture data by supplying their profile IDs. Be sure to specify only profiles that correspond to marketplaces within the region you chose. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Amazon Ads source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials object\tRequired /credentials/auth_type\tAuth Type\tSet to oauth2.0 for manual integration (in this method, you're re-creating the same credentials of the OAuth user interface, but doing so manually)\tstring /credentials/client_id\tClient ID\tThe client ID of your Amazon Ads developer application.\tstring\tRequired /credentials/client_secret\tClient Secret\tThe client secret of your Amazon Ads developer application.\tstring\tRequired /credentials/refresh_token\tRefresh Token\tAmazon Ads refresh token.\tstring\tRequired /profiles\tProfile IDs (Optional)\tProfile IDs you want to fetch data for.\tarray /region\tRegion *\tRegion to pull data from (EU/NA/FE).\tstring\t"NA" /report_generation_max_retries\tReport Generation Maximum Retries *\tMaximum retries the connector will attempt for fetching report data.\tinteger\t5 /report_wait_timeout\tReport Wait Timeout *\tTimeout duration in minutes for reports.\tinteger\t60 /start_date\tStart Date (Optional)\tThe start date for collecting reports, in YYYY-MM-DD format. This should not be more than 60 days in the past.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tAmazon Ads resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-amazon-ads:dev config: credentials: auth_type: oauth2.0 client_id: amzn1.application-oa2-client.XXXXXXXXX client_secret: <secret> refresh_token: Atzr|XXXXXXXXXXXX region: NA report_generation_max_retries: 5 report_wait_timeout: 60 start_date: 2022-03-01 bindings: - resource: stream: profiles syncMode: full_refresh target: ${PREFIX}/profiles {} ","version":"Next","tagName":"h3"},{"title":"Amazon Kinesis","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon Kinesis","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/#prerequisites","content":" To use this connector, you'll need: One or more Amazon Kinesis streams. For a given capture, all streams must: Contain JSON data onlyBe in the same AWS region An IAM user with the following permissions: ListShards on all resourcesGetRecords on all streams usedGetShardIterator on all streams usedDescribeStream on all streams usedDescribeStreamSummary on all streams used These permissions should be specified with the kinesis: prefix in an IAM policy document. For more details and examples, see Controlling Access to Amazon Kinesis Data in the Amazon docs. The AWS access key and secret access key for the user. See the AWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon Kinesis","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Amazon Kinesis source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon Kinesis","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/awsAccessKeyId\tAWS access key ID\tPart of the AWS credentials that will be used to connect to Kinesis.\tstring\tRequired, "example-aws-access-key-id" /awsSecretAccessKey\tAWS secret access key\tPart of the AWS credentials that will be used to connect to Kinesis.\tstring\tRequired, "example-aws-secret-access-key" /endpoint\tAWS endpoint\tThe AWS endpoint URI to connect to, useful if you're capturing from a kinesis-compatible API that isn't provided by AWS.\tstring /region\tAWS region\tThe name of the AWS region where the Kinesis stream is located.\tstring\tRequired, "us-east-1" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tStream name.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon Kinesis","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-kinesis:dev config: awsAccessKeyId: "example-aws-access-key-id" awsSecretAccessKey: "example-aws-secret-access-key" region: "us-east-1" bindings: - resource: stream: ${STREAM_NAME} target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each Kinesis stream. Learn more about capture definitions.. ","version":"Next","tagName":"h3"},{"title":"Amazon DynamoDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/#prerequisites","content":" To use this connector, you'll need: One or more DynamoDB tables with DynamoDB streams enabled. To enable DynamoDB streams for a table: Select the table in the AWS consoleGo to the Exports and streams tabClick Turn on in the DynamoDB stream details sectionSelect New and old images for the View typeClick Turn on stream An IAM user with the following permissions: ListTables on all resourcesDescribeTable on all resourcesDescribeStream on all resourcesScan on all tables usedGetRecords on all streams usedGetShardIterator on all streams used These permissions should be specified with the dynamodb: prefix in an IAM policy document. For more details and examples, see Using identity-based policies with Amazon DynamoDB in the Amazon docs. The AWS access key and secret access key for the user. See the AWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the DynamoDB source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/awsAccessKeyId\tAccess Key ID\tAWS Access Key ID for capturing from DynamoDB tables.\tstring\tRequired /awsSecretAccessKey\tSecret Access Key\tAWS Secret Access Key for capturing from DynamoDB tables.\tstring\tRequired /region\tAWS Region\tThe name of the AWS region where the DynamoDB tables are located.\tstring\tRequired advanced/backfillSegments\tBackfill Table Segments\tNumber of segments to use for backfill table scans. Has no effect if changed after the backfill has started.\tinteger advanced/endpoint\tAWS Endpoint\tThe AWS endpoint URI to connect to. Use if you're capturing from a compatible API that isn't provided by AWS.\tstring advanced/scanLimit\tScan Limit\tLimit the number of items to evaluate for each table backfill scan request.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable Name\tThe name of the table to be captured.\tstring\tRequired /rcuAllocation\tRCU Allocation\tRead capacity units the capture will attempt to consume during the table backfill. Leave blank to automatically determine based on the provisioned capacity of the table.\tinteger\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-dynamodb:dev config: awsAccessKeyId: "example-aws-access-key-id" awsSecretAccessKey: "example-aws-secret-access-key" region: "us-east-1" bindings: - resource: table: ${TABLE_NAME} target: ${PREFIX}/${COLLECTION_NAME} Your capture definition may be more complex, with additional bindings for each DynamoDB table. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Amazon Redshift","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/#prerequisites","content":" To use this connector, you'll need: Access credentials for connecting to your Amazon Redshift cluster.Properly configured IAM roles for the necessary permissions. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/#configuration","content":" You can configure the Redshift source connector either through the Flow web app or by directly editing the Flow specification file. For more information on using this connector, see our guide on connectors. The values and specification sample below provide configuration details that are specific to the Amazon Redshift source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/host\tHost\tHostname or IP address of your Redshift cluster.\tstring\tRequired /port\tPort\tPort number for the cluster.\tinteger\tDefault /database\tDatabase Name\tName of the database to capture data from.\tstring\tRequired /user\tUser\tDatabase user with necessary permissions.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /schemas\tSchemas\tList of schemas to include.\tstring /jdbc_params\tJDBC URL Params\tAdditional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable Name\tName of the table to capture.\tstring\tRequired /cursor_field\tUser-defined Cursor\tField for incremental syncs. Uses ascending values to ensure queries are sequential.\tstring or integer\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-redshift:dev config: host: "example-redshift-cluster.us-east-2.redshift.amazonaws.com" port: 5439 database: "sample_db" user: "sample_user" password: "sample_password" schemas: "public" jdbc_params: "key1=value1&key2=value2&key3=value3" bindings: - resource: table: users cursor_field: cursor target: ${PREFIX}/users ","version":"Next","tagName":"h3"},{"title":"Amazon SQS","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#prerequisites","content":" AWS IAM Access KeyAWS IAM Secret KeyAWS SQS Queue ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#setup","content":" Follow these steps to set up the Amazon SQS connector: Create AWS IAM KeysCreate an SQS QueueEnter a Primary Key and Cursor Field using the standard form editor. Note that these values currently have to be a string or timestamp. note If Delete Messages After Read is false, the IAM User only requires sqs:ReceiveMessage permission in the AWS IAM Policy.If Delete Messages After Read is true, both sqs:ReceiveMessage and sqs:DeleteMessage permissions are needed in the AWS IAM Policy. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the AmazonSQS source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/queue_url\tQueue URL\tURL of the SQS Queue\tstring\tRequired /region\tAWS Region\tAWS Region of the SQS Queue\tstring\tRequired /access_key\tAWS IAM Access Key ID\tThe Access Key ID of the AWS IAM Role to use for pulling messages\tstring /secret_key\tAWS IAM Secret Key\tThe Secret Key of the AWS IAM Role to use for pulling messages\tstring /delete_messages\tDelete Messages After Read\tDelete messages from the SQS Queue after reading them\tboolean\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Amazon SQS project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#sample","content":" { "properties": { "queue_url": { "order": 0 }, "region": { "order": 1 }, "access_key": { "order": 2 }, "secret_key": { "order": 3 }, "delete_messages": { "order": 4 } } } ","version":"Next","tagName":"h3"},{"title":"Performance Considerations​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#performance-considerations","content":" Consider the following performance aspects: Max Batch Size: Set the maximum number of messages to consume in a single poll.Max Wait Time: Define the maximum time (in seconds) to poll for messages before committing a batch.Message Visibility Timeout: Determine how long a message should be hidden from other consumers after being read. ","version":"Next","tagName":"h3"},{"title":"Data Loss Warning​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#data-loss-warning","content":" When enabling Delete Messages After Read, messages are deleted from the SQS Queue after being read. However, there is no guarantee that the downstream destination has committed or persisted the message. Exercise caution before enabling this option to avoid permanent message loss. ","version":"Next","tagName":"h3"},{"title":"Amazon S3","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#prerequisites","content":" You can use this connector to capture data from an entire S3 bucket or for a prefix within a bucket. This bucket or prefix must be either be: Publicly accessible and allowing anonymous reads. Accessible via a root or IAM user. In either case, you'll need an access policy. Policies in AWS are JSON objects that define permissions. You attach them to resources, which include both IAM users and S3 buckets. See the steps below to set up access. ","version":"Next","tagName":"h2"},{"title":"Setup: Public buckets​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#setup-public-buckets","content":" For a public buckets, the bucket access policy must allow anonymous reads on the whole bucket or a specific prefix. Create a bucket policy using the templates below. Anonymous reads policy - Full bucketAnonymous reads policy - Specific prefix { "Version": "2012-10-17", "Statement": [ { "Sid": "BucketAnonymousRead", "Effect": "Allow", "Principal": "*", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::EXAMPLE_BUCKET" ] }, { "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::EXAMPLE_BUCKET/*" ] } ] } Add the policy to your bucket. Paste over the existing policy and resolve any errors or warnings before saving. Confirm that the Block public access setting on the bucket is disabled. ","version":"Next","tagName":"h3"},{"title":"Setup: Accessing with a user account​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#setup-accessing-with-a-user-account","content":" For buckets accessed by a user account, you'll need the AWS access key and secret access key for the user. You'll also need to apply an access policy to the user to grant access to the specific bucket or prefix. Create an IAM user if you don't yet have one to use with Flow. Note the user's access key and secret access key. See the AWS blog for help finding these credentials. Create an IAM policy using the templates below. IAM user access policy - Full bucketIAM user access policy - Specific prefix { "Version": "2012-10-17", "Statement": [ { "Sid": "UserAccessFullBucket", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::EXAMPLE_BUCKET" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::EXAMPLE_BUCKET/*" ] } ] } Add the policy to AWS. Attach the policy to the IAM user. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the S3 source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/advanced Options for advanced users. You should not typically need to modify these.\tobject /advanced/ascendingKeys\tAscending Keys\tImprove sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors.\tboolean\tfalse /advanced/endpoint\tAWS Endpoint\tThe AWS endpoint URI to connect to. Use if you're capturing from a S3-compatible API that isn't provided by AWS\tstring /awsAccessKeyId\tAWS Access Key ID\tPart of the AWS credentials that will be used to connect to S3. Required unless the bucket is public and allows anonymous listings and reads.\tstring /awsSecretAccessKey\tAWS Secret Access Key\tPart of the AWS credentials that will be used to connect to S3. Required unless the bucket is public and allows anonymous listings and reads.\tstring /bucket\tBucket\tName of the S3 bucket\tstring\tRequired /matchKeys\tMatch Keys\tFilter applied to all object keys under the prefix. If provided, only objects whose absolute path matches this regex will be read. For example, you can use ".*\\.json" to only capture json files.\tstring /parser\tParser Configuration\tConfigures how files are parsed (optional, see below)\tobject /parser/compression\tCompression\tDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.\tnull, string\tnull /parser/format\tFormat\tDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.\tobject\t{"type":"auto"} /parser/format/type\tType string /prefix\tPrefix\tPrefix within the bucket to capture from. Use this to limit the data in your capture.\tstring /region\tAWS Region\tThe name of the AWS region where the S3 bucket is located. "us-east-1" is a popular default you can try, if you're unsure what to put here.\tstring\tRequired, "us-east-1" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tPrefix\tPath to dataset in the bucket, formatted as bucket-name/prefix-name.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-s3:dev config: bucket: "my-bucket" parser: compression: zip format: type: csv config: delimiter: "," encoding: UTF-8 errorThreshold: 5 headers: [ID, username, first_name, last_name] lineEnding: "\\\\r" quote: "\\"" region: "us-east-1" bindings: - resource: stream: my-bucket/${PREFIX} target: ${PREFIX}/${COLLECTION_NAME} Your capture definition may be more complex, with additional bindings for different S3 prefixes within the same bucket. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Advanced: Parsing cloud storage data​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#advanced-parsing-cloud-storage-data","content":" Cloud storage platforms like S3 can support a wider variety of file types than other data source systems. For each of these file types, Flow must parse and translate data into collections with defined fields and JSON schemas. By default, the parser will automatically detect the type and shape of the data in your bucket, so you won't need to change the parser configuration for most captures. However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector. The parser configuration includes: Compression: Specify how the bucket contents are compressed. If no compression type is specified, the connector will try to determine the compression type automatically. Options are: zipgzipzstdnone Format: Specify the data format, which determines how it will be parsed. Options are: Auto: If no format is specified, the connector will try to determine it automatically.AvroCSVJSONProtobufW3C Extended Log info At this time, Flow only supports S3 captures with data of a single file type. Support for multiple file types, which can be configured on a per-binding basis, will be added in the future. For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type. CSV configuration​ CSV files include several additional properties that are important to the parser. In most cases, Flow is able to automatically determine the correct values, but you may need to specify for unusual datasets. These properties are: Delimiter. Options are: Comma (",")Pipe ("|")Space ("0x20")Semicolon (";")Tab ("0x09")Vertical tab ("0x0B")Unit separator ("0x1F")SOH ("0x01")Auto Encoding type, specified by its WHATWG label. Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture. Escape characters. Options are: Backslash ("\\\\")Disable escapes ("")Auto Optionally, a list of column Headers, if not already included in the first row of the CSV file. If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file. Line ending values CRLF ("\\\\r\\\\n") (Windows)CR ("\\\\r")LF ("\\\\n")Record Separator ("0x1E")Auto Quote character Double Quote ("\\"")Single Quote (")Disable Quoting ("")Auto The sample specification above includes these fields. ","version":"Next","tagName":"h3"},{"title":"Amplitude","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Amplitude","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/#supported-data-resources","content":" The following data resources are supported through the Amplitude APIs: Active User CountsAnnotationsAverage Session LengthCohortsEvents By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Amplitude","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/#prerequisites","content":" An Amplitude project with an API Key and Secret Key ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amplitude","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Amplitude source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amplitude","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_key\tAPI Key\tAmplitude API Key.\tstring\tRequired /secret_key\tSecret Key\tAmplitude Secret Key.\tstring\tRequired /start_date\tReplication Start Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Amplitude project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amplitude","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-amplitude:dev config: api_key: <secret> secret_key: <secret> start_date: 2022-06-18T00:00:00Z bindings: - resource: stream: cohorts syncMode: full_refresh target: ${PREFIX}/cohorts - resource: stream: annotations syncMode: full_refresh target: ${PREFIX}/annotations - resource: stream: events syncMode: incremental target: ${PREFIX}/events - resource: stream: active_users syncMode: incremental target: ${PREFIX}/activeusers - resource: stream: average_session_length syncMode: incremental target: ${PREFIX}/averagesessionlength ","version":"Next","tagName":"h3"},{"title":"Apache Kafka","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/","content":"","keywords":"","version":"Next"},{"title":"Supported data types​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#supported-data-types","content":" This connector supports Kafka messages that contain JSON data. Flow collections store data as JSON. Before deploying this connector, you should modify schema(s)of the Flow collection(s) you're creating to reflect the structure of your JSON Kafka messages. At this time, the connector does not support other data types in Kafka messages. Beta Support for Avro Kafka messages will be added soon. For more information, contact the Estuary team. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#prerequisites","content":" A Kafka cluster with: bootstrap.servers configured so that clients may connect via the desired host and portAn authentication mechanism of choice set up (highly recommended for production environments)Connection security enabled with TLS (highly recommended for production environments) ","version":"Next","tagName":"h2"},{"title":"Authentication and connection security​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#authentication-and-connection-security","content":" Neither authentication nor connection security are enabled by default in your Kafka cluster, but both are important considerations. Similarly, Flow's Kafka connectors do not strictly require authentication or connection security mechanisms. You may choose to omit them for local development and testing; however, both are strongly encouraged for production environments. A wide variety of authentication methods is available in Kafka clusters. Flow supports SASL/SCRAM-SHA-256, SASL/SCRAM-SHA-512, and SASL/PLAIN. Behavior using other authentication methods is not guaranteed. When authentication details are not provided, the client connection will attempt to use PLAINTEXT (insecure) protocol. If you don't already have authentication enabled on your cluster, Estuary recommends either of listed SASL/SCRAM methods. With SCRAM, you set up a username and password, making it analogous to the traditional authentication mechanisms you use in other applications. For connection security, Estuary recommends that you enable TLS encryption for your SASL mechanism of choice, as well as all other components of your cluster. Note that because TLS replaced now-deprecated SSL encryption, Kafka still uses the acronym "SSL" to refer to TLS encryption. See Confluent's documentation for details. Beta TLS encryption is currently the only supported connection security mechanism for this connector. Other connection security methods may be enabled in the future. ","version":"Next","tagName":"h3"},{"title":"AWS Managed Streaming Kafka (MSK)​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#aws-managed-streaming-kafka-msk","content":" If using AWS Managed Streaming for Apache Kafka (MSK), you can use IAM authentication with our connector. Read more about IAM authentication with MSK in AWS docs: IAM access control. Additionally, you want to make sure that your VPC configuration allows inbound and outbound requests to Estuary Flow IP addresses. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Apache Kafka source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/bootstrap_servers\tBootstrap servers\tThe initial servers in the Kafka cluster to connect to, separated by commas. The Kafka client will be informed of the rest of the cluster nodes by connecting to one of these nodes.\tstring\tRequired /tls\tTLS\tTLS connection settings.\tstring\t"system_certificates" /credentials\tCredentials\tConnection details used to authenticate a client connection to Kafka via SASL.\tnull, object /credentials/auth_type\tAuthentication type\tOne of UserPassword for SASL or AWS for IAM authentication\tstring /credentials/mechanism\tSASL Mechanism\tSASL mechanism describing how to exchange and authenticate client servers.\tstring /credentials/password\tPassword\tPassword, if applicable for the authentication mechanism chosen.\tstring /credentials/username\tUsername\tUsername, if applicable for the authentication mechanism chosen.\tstring /credentials/aws_access_key_id\tAWS Access Key ID\tSupply if using auth_type: AWS\tstring /credentials/aws_secret_access_key\tAWS Secret Access Key\tSupply if using auth_type: AWS\tstring /credentials/region\tAWS Region\tSupply if using auth_type: AWS\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tKafka topic name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#sample","content":" User and password authentication (SASL): captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-kafka:dev config: bootstrap_servers: localhost:9093 tls: system_certificates credentials: auth_type: UserPassword mechanism: SCRAM-SHA-512 username: bruce.wayne password: definitely-not-batman bindings: - resource: stream: ${TOPIC_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} AWS IAM authentication: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-kafka:dev config: bootstrap_servers: localhost:9093 tls: system_certificates credentials: auth_type: AWS aws_access_key_id: AK... aws_secret_access_key: secret region: us-east-1 bindings: - resource: stream: ${TOPIC_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each Kafka topic. Learn more about capture definitions.. ","version":"Next","tagName":"h3"},{"title":"Azure Blob Storage","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#prerequisites","content":" You will need the following values to authenticate to Azure and an active subscription Subscription IDClient IDClient SecretTenant ID ","version":"Next","tagName":"h2"},{"title":"Setup a Microsoft Entra application​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#setup-a-microsoft-entra-application","content":" These values can be obtained from the portal, here's the instructions: Get Subscription ID Login into your Azure account Select Subscriptions in the left sidebar Select whichever subscription is neededClick on OverviewCopy the Subscription ID Get Client ID / Client Secret / Tenant ID Go to Azure Active Directory, then select App registrations.Click New registration, fill out the required fields like Name and Supported account types.Click Register to create the new app registration.After registration, note down the Application (client) ID value.Go to Certificates & secrets and click New client secret. Fill in a Description, choose a Secret value type and length, then click Add to save the secret. A pop-up will appear with your new client secret value; copy it immediately as you won't be able to view it again.Go back to Overview page and copy the Directory (tenant) ID under Properties.Your service principal is now created, and you have its Application (client) ID, Directory (tenant) ID, and a client secret key. Use these values when configuring your application or service to interact with Azure services that require authentication through AAD. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Azure Blob Storage source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/advanced Options for advanced users. You should not typically need to modify these.\tobject /advanced/ascendingKeys\tAscending Keys\tImprove sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors.\tboolean\tfalse /credentials\tCredentials\tAzure credentials used to authenticate with Azure Blob Storage.\tobject /credentials/storageAccountName\tStorage Account Name\tThe name of the Azure Blob Storage account.\tstring\tRequired. /credentials/azureClientID\tAzure Client ID\tThe client ID used to authenticate with Azure Blob Storage.\tstring\tRequired if using OAuth2 /credentials/azureClientSecret\tAzure Client Secret\tThe client secret used to authenticate with Azure Blob Storage.\tstring\tRequired if using OAuth2 /credentials/azureTenantID\tAzure Tenant ID\tThe ID of the Azure tenant where the Azure Blob Storage account is located.\tstring\tRequired if using OAuth2 /credentials/azureSubscriptionID\tAzure Subscription ID\tThe ID of the Azure subscription that contains the Azure Blob Storage account.\tstring\tRequired if using OAuth2 /credentials/ConnectionString\tConnection String\tThe connection string used to authenticate with Azure Blob Storage.\tstring\tRequired if using the Connection String authentication. /containerName\tContainer Name\tThe name of the Azure Blob Storage container to read from.\tstring\tRequired. /matchKeys\tMatch Keys\tFilter applied to all object keys under the prefix. If provided, only objects whose absolute path matches this regex will be read. For example, you can use ".*\\.json" to only capture json files.\tstring\t Bindings​ Property\tTitle\tTitle\tType\tRequired/Default/stream\tContainer\tThe container name\tstring\trequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-azure-blob-storage:dev" config: containerName: example credentials: azureClientID: e2889d31-aaaa-bbbb-cccc-85bb5a33d7a5 azureClientSecret: just-a-secret azureSubscriptionID: f1a5bc81-aaaa-bbbb-cccc-b926c154ecc7 azureTenantID: d494a2c6-aaaa-bbbb-cccc-ef1e5eaa64a6 storageAccountName: example parser: compression: zip format: type: csv config: delimiter: "," encoding: UTF-8 errorThreshold: 5 headers: [ID, username, first_name, last_name] lineEnding: "\\\\r" quote: "\\"" bindings: - resource: stream: example target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Advanced: Parsing cloud storage data​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#advanced-parsing-cloud-storage-data","content":" Cloud storage platforms like Azure Blob Storage can support a wider variety of file types than other data source systems. For each of these file types, Flow must parse and translate data into collections with defined fields and JSON schemas. By default, the parser will automatically detect the type and shape of the data in your bucket, so you won't need to change the parser configuration for most captures. However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector. The parser configuration includes: Compression: Specify how the bucket contents are compressed. If no compression type is specified, the connector will try to determine the compression type automatically. Options are: zipgzipzstdnone Format: Specify the data format, which determines how it will be parsed. Options are: Auto: If no format is specified, the connector will try to determine it automatically.AvroCSVJSONProtobufW3C Extended Log info At this time, Flow only supports S3 captures with data of a single file type. Support for multiple file types, which can be configured on a per-binding basis, will be added in the future. For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type. ","version":"Next","tagName":"h3"},{"title":"CSV configuration​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#csv-configuration","content":" CSV files include several additional properties that are important to the parser. In most cases, Flow is able to automatically determine the correct values, but you may need to specify for unusual datasets. These properties are: Delimiter. Options are: Comma (",")Pipe ("|")Space ("0x20")Semicolon (";")Tab ("0x09")Vertical tab ("0x0B")Unit separator ("0x1F")SOH ("0x01")Auto Encoding type, specified by its WHATWG label. Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture. Escape characters. Options are: Backslash ("\\\\")Disable escapes ("")Auto Optionally, a list of column Headers, if not already included in the first row of the CSV file. If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file. Line ending values CRLF ("\\\\r\\\\n") (Windows)CR ("\\\\r")LF ("\\\\n")Record Separator ("0x1E")Auto Quote character Double Quote ("\\"")Single Quote (")Disable Quoting ("")Auto The sample specification above includes these fields. ","version":"Next","tagName":"h3"},{"title":"Bing Ads","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#supported-data-resources","content":" The following data resources are supported: AccountsAccount performance reports: hourly, daily, weekly, and monthly (four resources)Ad groupsAd group performance reports: hourly, daily, weekly, and monthly (four resources)AdsAd performance reports: hourly, daily, weekly, and monthly (four resources).Budget summary reportCampaignsCampaign performance reports: hourly, daily, weekly, and monthly (four resources).Keyword performance reports: hourly, daily, weekly, and monthly (four resources). By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#prerequisites","content":" This connector uses OAuth2 to authenticate with Microsoft. You can do this in the Flow web app, or configure manually if you're using the flowctl CLI. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Microsoft in the Flow web app​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#using-oauth2-to-authenticate-with-microsoft-in-the-flow-web-app","content":" You'll need: User credentials with access to the Bing Ads account. A developer token associated with the user. ","version":"Next","tagName":"h3"},{"title":"Authenticating manually using the CLI​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#authenticating-manually-using-the-cli","content":" You'll need: A registered Bing Ads application with the following credentials retrieved: Client ID Client Secret Refresh Token To set get these items, complete the following steps: Register your Bing Ads Application in the Azure Portal. During setup, note the client_id and client_secret. Get a user access token. Redeem the user authorization code for OAuth tokens, and note the refresh_token. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Bing Ads source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials object\tRequired /credentials/auth_method\tAuthentication method\tSet to oauth2.0\tString\toauth2.0 /credentials/client_id\tClient ID\tThe Client ID of your Microsoft Advertising developer application.\tString\tRequired /credentials/client_secret\tClient Secret\tThe Client Secret of your Microsoft Advertising developer application.\tString\tRequired /credentials/refresh_token\tRefresh Token\tRefresh Token to renew the expired Access Token.\tString\tRequired /developer_token\tDeveloper Token\tDeveloper token associated with user.\tString\tRequired /reports_start_date\tCredentials\tThe start date from which to begin replicating report data. Any data generated before this date will not be replicated in reports. This is a UTC date in YYYY-MM-DD format.\tString\tRequired, 2020-01-01 /tenant_id\tCredentials\tThe Tenant ID of your Microsoft Advertising developer application. Set this to common unless you know you need a different value.\tString\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tBing Ads resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-bing-ads:dev config: credentials: auth_type: oauth2.0 client_id: 6731de76-14a6-49ae-97bc-6eba6914391e client_secret: <secret> refresh_token: <token> developer_token: <token> reports_start_date: 2020-01-01 tenant_id: common bindings: - resource: stream: accounts syncMode: full_refresh target: ${PREFIX}/accounts {} ","version":"Next","tagName":"h3"},{"title":"Braintree","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Braintree","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/#supported-data-resources","content":" The following data resources are supported through the Braintree APIs: CustomersDiscountsDisputesTransactionsMerchant AccountsPlansSubscriptions By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Braintree","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/#prerequisites","content":" To set up the Braintree source connector, you'll need Braintree's: Public KeyEnvironmentMerchant IDPrivate Key We recommend creating a restricted, read-only key specifically for Estuary access. This will allow you to control which resources Estuary should be able to access. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Braintree","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Braintree source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Braintree","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/environment\tEnvironment\tEnvironment specifies where the data will come from.\tstring\tRequired /merchant_id\tMerchant ID\tThe unique identifier for your entire gateway account.\tstring\tRequired /private_key\tPrivate Key\tBraintree Private Key.\tstring\tRequired /public_key\tPublic Key\tBraintree Public Key.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tDefault Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Braintree project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Braintree","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-braintree:dev config: environment: Development merchant_id: <id> private_key: <key> public_key: <key> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: customers syncMode: full_refresh target: ${PREFIX}/customers {...} ","version":"Next","tagName":"h3"},{"title":"Chargebee","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Chargebee","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/#supported-data-resources","content":" The following data resources are supported through the Chargebee APIs: SubscriptionsCustomersInvoicesOrdersPlansAddonsItemsItem PricesAttached Items By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Chargebee","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/#prerequisites","content":" To set up the Chargebee source connector, you'll need the Chargebee API key and the Product Catalog version. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Chargebee","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Chargebee source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Chargebee","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/site_api_key\tAPI Key\tChargebee API Key.\tstring\tRequired /site\tSite\tThe site prefix for your Chargebee instance.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired /product_catalog\tProduct Catalog\tProduct Catalog version of your Chargebee site. Instructions on how to find your version you may find under 'API Version' section in the Chargebee docs.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Chargebee project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Chargebee","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-chargebee:dev config: site_api_key: <secret> site: <your site> start_date: 2017-01-25T00:00:00Z product_catalog: <your product catalog> bindings: - resource: stream: items syncMode: full_refresh target: ${PREFIX}/items {...} ","version":"Next","tagName":"h3"},{"title":"Braze","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Braze","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/#supported-data-resources","content":" The following data resources are supported through the Braze APIs: campaignscampaigns_analyticscanvasescanvases_analyticseventsevents_analyticskpi_daily_new_userskpi_daily_active_userskpi_daily_app_uninstallscardscards_analyticssegmentssegments_analytics By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Braze","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/#prerequisites","content":" It is required to have an account on Braze to provide us with URL and Rest API Key during set up. Rest API Key could be found on Braze Dashboard -> Developer Console tab -> API Settings -> Rest API KeysURL could be found on Braze Dashboard -> Manage Settings -> Settings tab -> Your App name -> SDK Endpoint ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Braze","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Braze source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Braze","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_key\tBraze REST API Key\tBraze API Key.\tstring\tRequired /start_date\tStart Date\tRows after this date will be synced.\tstring\tRequired /url\tURL\tBraze REST API endpoint.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Braze project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Braze","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-braze:dev config: api_key: <key> start_date: 2017-01-25T00:00:00Z url: <url> bindings: - resource: stream: events syncMode: full_refresh target: ${PREFIX}/events {...} ","version":"Next","tagName":"h3"},{"title":"Confluence","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Confluence","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/#supported-data-resources","content":" When you configure the connector, you specify your email, api and domain name From your selection, the following data resources are captured: ","version":"Next","tagName":"h2"},{"title":"resources​","type":1,"pageTitle":"Confluence","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/#resources","content":" AuditBlog PostsGroupPagesSpace Each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h3"},{"title":"Prerequisites​","type":1,"pageTitle":"Confluence","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/#prerequisites","content":" Atlassian API TokenYour Confluence domain nameYour Confluence login email ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Confluence","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector. Create an API Token For detailed instructions on creating an Atlassian API Token, please refer to the official documentation. Set up the Confluence connector in Estuary Flow Log into Estuary Flow and click "Captures".Select "Create Capture" search for and click on "Confluence"Enter a Capture NameIn the "API Token" field, enter your Atlassian API TokenIn the "Domain Name" field, enter your Confluence Domain nameIn the "Email" field, enter your Confluence login emailClick "Save and Publish" ","version":"Next","tagName":"h2"},{"title":"Sample​","type":1,"pageTitle":"Confluence","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-confluence:dev config: credentials: api_token: PAT Credentials domain_name: estuary1.atlassian.net email: dave@estuary.dev bindings: - resource: stream: audit syncMode: full_refresh target: ${PREFIX}/audit {...} ","version":"Next","tagName":"h3"},{"title":"BigQuery Batch Query Connector","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#prerequisites","content":" To use this connector, you will need the following prerequisites: A Google Cloud Project with BigQuery enabledA Google Cloud Service Account with the "BigQuery User" and "BigQuery Data Viewer" roles in your GCP projectA Service Account Key to authenticate into your Service Account See the setup guide for more information about how to create the required resources. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#setup","content":" Follow the steps below to set up the BigQuery connector. ","version":"Next","tagName":"h2"},{"title":"Service Account​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#service-account","content":" To sync data from BigQuery, you need credentials for a Service Account with the "BigQuery User" and "BigQuery Data Viewer" roles. These roles grant the necessary permissions to run BigQuery jobs, discover tables within the dataset, and read the contents of those tables. It is recommended to create a dedicated Service Account to facilitate permission management and auditing. However, if you already have a Service Account with the correct permissions, you can use it. Here's how to provision a suitable service account: Follow Google Cloud Platform's instructions for Creating a Service Account.Note down the ID of the service account you just created. Service Account IDs typically follow the format <account-name>@<project-name>.iam.gserviceaccount.com.Follow Google Cloud Platform's instructions for Granting IAM Roles to the new service account. The "principal" email address should be the ID of the service account you just created, and the roles granted should be "BigQuery User" and "BigQuery Data Viewer". ","version":"Next","tagName":"h3"},{"title":"Service Account Key​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#service-account-key","content":" Service Account Keys are used to authenticate as Google Service Accounts. To be able to utilize the permissions granted to the Service Account in the previous step, you'll need to provide its Service Account Key when creating the capture. It is a good practice, though not required, to create a new key for Flow even if you're reusing a preexisting account. To create a new key for a service account, follow Google Cloud Platform's instructions for Creating a Service Account Key. Be sure to create the key in JSON format. Once the linked instructions have been followed you should have a key file, which will need to be uploaded to Flow when setting up your capture. ","version":"Next","tagName":"h3"},{"title":"Set up the BigQuery connector in Estuary Flow​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#set-up-the-bigquery-connector-in-estuary-flow","content":" Log into your Estuary Flow account.In the left navigation bar, click on "Sources". In the top-left corner, click "New Capture".Locate and select the "BigQuery" connector.Enter a name and optional description for the capture task.Enter the Project ID and Dataset name that you intend to capture from, and paste or upload the service account key in the appropriate field.Click the "Next" button and wait while the connector automatically discovers the available tables in the specified project and dataset.Select the tables you wish to capture from the bindings list.For each binding you selected, you will likely wish to specify cursor columns and a shorter "Poll Interval" setting. Otherwise the default behavior will be to recapture the entire contents of the table, once per day.Once you are satisfied with your binding selection, click the "Save and Publish" button. ","version":"Next","tagName":"h3"},{"title":"Specifying Cursor Columns​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#specifying-cursor-columns","content":" This connector operates by periodically executing a SELECT * FROM table query and outputting the resulting rows as JSON documents into a Flow collection. In some cases doing this once or twice a day is entirely sufficient, but when working with larger tables (or if a faster update rate is desired) it pays to manually configure cursor columns. The cursor must be a column (or ordered tuple of columns) which is expected to strictly increase for newly added or updated rows. Common examples of suitable cursors include: Update timestamps, which are often the best choice if available since they can often be used to identify changed rows as well as new insertions.Creation timestamps, which can be used to identify newly added rows in append-only datasets but won't help to identify changes to preexisting rows.Monotonically increasing IDs, which are another way of identifying newly added rows but often don't help with update detection. When a cursor is specified, the update query will take the form SELECT * FROM $table WHERE $cursorName > $lastCursorValue ORDER BY $cursorNameand the capture connector will keep track of the highest observed cursor value between polling intervals. If multiple cursor columns are specified, they will be treated as an ordered tuple of columns which collectively form the cursor, and the obvious lexicographic tuple ordering will apply. Once you have specified a suitable cursor for a table, you will likely want to lower the polling interval for that binding. The default polling interval is "24h" to keep data volumes low, but once a cursor is specified there is usually no downside to frequent polling, so you may wish to lower the interval to "5m" or even "5s" for that table. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the BigQuery source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/project_id\tProject ID\tThe GCP project ID for the project containing the source BigQuery dataset\tstring\tRequired /dataset\tDataset\tThe BigQuery dataset to discover tables within\tstring\tRequired /credentials_json\tCredentials JSON\tThe contents of your Service Account Key JSON file\tstring\tRequired /advanced/poll\tPoll Interval\tHow often to poll bindings (may be overridden for a specific binding)\tstring\t"24h" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tName\tA name which uniquely identifies this binding.\tstring\tRequired /cursor\tCursor\tThe column name(s) which should be used as the incremental capture cursor\tarray\t[] /template\tTemplate\tThe query (template) which will be executed every polling interval\tstring\tRequired /poll\tPoll Interval\tOverride the global polling interval for this binding.\tstring\t"" ","version":"Next","tagName":"h3"},{"title":"Query Templates​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#query-templates","content":" The query template property of a binding defines what query will be executed against the database, given inputs describing the configured cursor columns and whether any prior cursor state exists. The default template implements the behavior described inspecifying cursor columns. In principle you are free to modify this template to implement whatever query you need. You could for instance create a new binding which queries a view, or which performs a more complex analytics query. However this should not be combined with table auto-discovery in a single capture, as this can produce some counterintuitive results. Instead create two separate capture tasks from the same database, one for autodiscovered tables and a separate one with the setting "Automatically Add New Collections" disabled for your custom bindings. ","version":"Next","tagName":"h3"},{"title":"Datadog HTTP Ingest (Webhook)","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/","content":"","keywords":"","version":"Next"},{"title":"Usage​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#usage","content":" This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific system or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source. This is useful primarily if you want to test out Flow or see how your webhook data will come over. To begin, use the web app to create a capture. Once published, the confirmation dialog displays a unique URL for your public endpoint. You're now ready to send data to Flow. ","version":"Next","tagName":"h2"},{"title":"Send sample data to Flow​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#send-sample-data-to-flow","content":" After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture. Expand POST or PUT and click Try it out to send some example JSON documents using the UI. You can also copy the provided curl commands to send data via the command line. After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture. Click Details to view the data preview. ","version":"Next","tagName":"h3"},{"title":"Configure a Datadog webhook​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#configure-a-datadog-webhook","content":" In the Datadog Cloud Monitoring Platform, navigate to the Integrations tab and click on the Integrations option in the dropdown. Using the search bar, search for the Webhook Integration and install it. Within the Webhook Integration configuration, select new Webhook and enter in the following information: Field\tValue\tDescriptionName\tyour-webhook\tThe name of your webhook within Datadog URL\thttps://your-unique-webhook-url/webhook-data\tThe unique Estuary URL created for ingesting webhook data In the Datadog Cloud Monitoring Platform, navigate to Monitors/New Monitor and select Metric for the type. Define the alert conditions and under Notify your team select @your-webhook from the dropdown. ","version":"Next","tagName":"h3"},{"title":"Webhook URLs​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#webhook-urls","content":" To determine the full URL, start with the base URL from the Flow web app (for example https://abc123-8080.us-central1.v1.estuary-data.dev), and then append the path. The path will be whatever is in the paths endpoint configuration field (/webhook-data by default). For example, your full webhook URL would be https://<your-unique-hostname>/webhook-data. You can add additional paths to paths, and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you're editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to /my-webhook.json, then the full URL for that binding would be https://<your-unique-hostname>/my-webhook.json. Any URL query parameters that are sent on the request will be captured and serialized under /_meta/query/* the in documents. For example, a webhook request that's sent to /webhook-data?testKey=testValue would result in a document like: { "_meta": { "webhookId": "...", "query": { "testKey": "testValue" }, ... } ... } ","version":"Next","tagName":"h3"},{"title":"Authentication​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#authentication","content":" The connector can optionally require each request to present an authentication token as part of an Authorization: Bearer HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an Authorization header with the value of your token. For example, if you use an auth token value of mySecretToken, then the header on each request must be Authorization: Bearer mySecretToken. If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection. We recommend using authentication whenever possible. ","version":"Next","tagName":"h3"},{"title":"Webhook signature verification​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#webhook-signature-verification","content":" This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact support@estuary.dev and let us know. ","version":"Next","tagName":"h3"},{"title":"Endpoint Configuration​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#endpoint-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tEndpointConfig object\tRequired /require_auth_token Optional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections.\tnull, string\tnull /paths\tURL Paths\tList of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.\tnull, string\tnull ","version":"Next","tagName":"h2"},{"title":"Resource configuration​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#resource-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tResourceConfig object\tRequired /idFromHeader Set the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`.\tnull, string /path The URL path to use for adding documents to this binding. Defaults to the name of the collection.\tnull, string /stream The name of the binding, which is used as a merge key when doing Discovers.\tnull, string\t ","version":"Next","tagName":"h2"},{"title":"Exchange Rates API","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Exchange Rates API","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/#prerequisites","content":" An API key generated through an Exchange Rate API account. After you sign up, your API key can be found on your account page. You may use the free account, but note that you'll be limited to the default base currency, EUR. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Exchange Rates API","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Exchange Rates source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Exchange Rates API","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/access_key\tAccess key\tYour API access key. The key is case sensitive.\tstring\tRequired /base\tBase currency\tISO reference currency. See the documentation. Free plan doesn't support Source Currency Switching, default base currency is EUR\tstring\tEUR /ignore_weekends\tIgnore weekends\tIgnore weekends? (Exchanges don't run on weekends)\tboolean\ttrue /start_date\tStart date\tThe date in the format YYYY-MM-DD. Data will begin from this date.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tData stream from which Flow captures data. Always set to exchange_rates.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Exchange Rates API","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-exchange-rates:dev config: base: EUR access_key: <secret> start_date: 2022-01-01 ignore_weekends: true bindings: - resource: stream: exchange_rates syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} This capture definition should only have one binding, as exchange_rates is the only available data stream. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Dropbox","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/","content":"","keywords":"","version":"Next"},{"title":"Supported data types​","type":1,"pageTitle":"Dropbox","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/#supported-data-types","content":" This connector automatically captures the data within the specified Dropbox folder into a single Flow collection. The following file types are supported: AvroCSVJSONProtobufW3C Extended Log The following compression methods are supported: ZIPGZIPZSTD By default, Flow automatically detects the file type and compression method. If necessary, you can specify the correct file type, compression, and other properties (CSV only) using the optional parser configuration. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Dropbox","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/#prerequisites","content":" To use this connector, make sure you have an active Dropbox account. Authentication is handled using OAuth2 in the Flow web app. Note: This connector is designed for files located in a specific Dropbox folder. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Dropbox","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/#configuration","content":" You configure the Dropbox source connector in the Flow web app. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Dropbox source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Dropbox","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/path\tPath\tThe path to the Dropbox folder to read from. For example, "/my_folder".\tstring\tRequired /matchKeys\tMatch Keys\tFilter applied to all object keys under the prefix. If provided, only objects whose absolute path matches this regex will be read. For example, you can use .*\\.json to only capture JSON files.\tobject /credentials\tCredentials\tOAuth2 credentials for Dropbox. These are automatically handled by the Web UI.\tobject\tRequired /advanced\tAdvanced\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/ascendingKeys\tAscending Keys\tImprove sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors.\tboolean\tfalse /parser\tParser Configuration\tConfigures how files are parsed (optional, see below)\tobject /parser/compression\tCompression\tDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.\tnull, string\tnull /parser/format\tFormat\tDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.\tobject\t{"type":"auto"} /parser/format/type\tType string\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tPath\tThe path to the Dropbox folder.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Dropbox","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-http-file:dev config: path: "/my_folder" matchKeys: ".*\\.json" bindings: - resource: stream: /my_folder target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Advanced: Parsing Dropbox files​","type":1,"pageTitle":"Dropbox","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/#advanced-parsing-dropbox-files","content":" Dropbox folders can contain a variety of file types. For each file type, Flow must parse and translate data into collections with defined fields and JSON schemas. By default, the parser will automatically detect the type and shape of the data in the Dropbox folder, so you won't need to change the parser configuration for most captures. However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector. The parser configuration includes: Compression: Specify how the data is compressed. If no compression type is specified, the connector will try to determine the compression type automatically. Options are: zipgzipzstdnone Format: Specify the data format, which determines how it will be parsed. If no file type is specified, the connector will try to determine the file type automatically Options are: AvroCSVJSONProtobufW3C Extended Log CSV configuration​ CSV files include several additional properties that are important to the parser. In most cases, Flow is able to automatically determine the correct values, but you may need to specify for unusual datasets. These properties are: Delimiter. Options are: Comma (",")Pipe ("|")Space ("0x20")Semicolon (";")Tab ("0x09")Vertical tab ("0x0B")Unit separator ("0x1F")SOH ("0x01")Auto Encoding type, specified by its WHATWG label. Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture. Escape characters. Options are: Backslash ("\\\\")Disable escapes ("")Auto Optionally, a list of column Headers, if not already included in the first row of the CSV file. If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file. Line ending values CRLF ("\\\\r\\\\n") (Windows)CR ("\\\\r")LF ("\\\\n")Record Separator ("0x1E")Auto Quote character Double Quote ("\\"")Single Quote (")Disable Quoting ("")Auto ","version":"Next","tagName":"h3"},{"title":"Freshdesk","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Freshdesk","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/#supported-data-resources","content":" The following data resources are supported: AgentsBusiness hoursCanned response foldersCanned responsesCompaniesContactsConversationsDiscussion categoriesDiscussion commentsDiscussion forumsDiscussion topicsEmail configsEmail mailboxesGroupsProductsRolesSatisfaction ratingsScenario automationsSettingsSkillsSLA policiesSolution articlesSolution categoriesSolution foldersSurveysTicket fieldsTicketsTime entries By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Freshdesk","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/#prerequisites","content":" To use this connector, you'll need: Your Freshdesk account URLYour Freshdesk API key ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Freshdesk","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Freshdesk source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Freshdesk","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_key\tAPI Key\tFreshdesk API Key.\tstring\tRequired /domain\tDomain\tFreshdesk domain\tstring\tRequired /requests_per_minute\tRequests per minute\tThe number of requests per minute that this source is allowed to use. There is a rate limit of 50 requests per minute per app per account.\tinteger /start_date\tStart Date\tUTC date and time. Any data created after this date will be replicated. If this parameter is not set, all data will be replicated.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource from the Freshdesk API from which a collection is captured.\tstring\tRequired /syncMode\tSync mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Freshdesk","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-freshdesk:dev config: api_key: xxxxxxxxxxxxxxxx domain: acmesupport.freshdesk.com bindings: - resource: stream: agents syncMode: incremental target: ${PREFIX}/agents {...} ","version":"Next","tagName":"h3"},{"title":"Facebook Marketing","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#supported-data-resources","content":" The following data resources are supported: AdsAd activitiesAd creativesAd insightsBusiness ad accountsCampaignsImagesVideos By default, each resource associated with your Facebook Business account is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#prerequisites","content":" There are two ways to authenticate with Facebook when capturing data into Flow: signing in with OAuth2, and manually supplying an access token. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the manual method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Signing in with OAuth2​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#signing-in-with-oauth2","content":" To use OAuth2 in the Flow web app, you'll need A Facebook Business account and its Ad Account ID. ","version":"Next","tagName":"h3"},{"title":"Configuring manually with an access token​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#configuring-manually-with-an-access-token","content":" To configure manually with an access token, you'll need: A Facebook Business account, and its Ad Account ID.A Facebook app with: The Marketing API enabled.A Marketing API access token generated.Access upgrade from Standard Access (the default) to Advanced Access. This allows a sufficient rate limit to support the connector. Follow the steps below to meet these requirements. Setup​ Find your Facebook Ad Account ID. In Meta for Developers, create a new app of the type Business. On your new app's dashboard, click the button to set up the Marketing API. On the Marketing API Tools tab, generate a Marketing API access token with all available permissions (ads_management, ads_read, read_insights, and business_management). Request Advanced Access for your app. Specifically request the Advanced Access to the following: The feature Ads Management Standard Access The permission ads_read The permission ads_management Once your request is approved, you'll have a high enough rate limit to proceed with running the connector. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Facebook Marketing source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#properties","content":" Endpoint​ By default, this connector captures all data associated with your Business Ad Account. You can refine the data you capture from Facebook Marketing using the optional Custom Insights configuration. You're able to specify certain fields to capture and apply data breakdowns.Breakdowns are a feature of the Facebook Marketing Insights API that allows you to group API output by common metrics.Action breakdownsare a subset of breakdowns that must be specified separately. Property\tTitle\tDescription\tType\tRequired/Default/access_token\tAccess Token\tThe value of the access token generated.\tstring\tRequired /account_id\tAccount ID\tThe Facebook Ad account ID to use when pulling data from the Facebook Marketing API.\tstring\tRequired for manual authentication only /custom_insights\tCustom Insights\tA list which contains insights entries. Each entry must have a name and can contains fields, breakdowns or action_breakdowns\tarray /custom_insights/-/action_breakdowns\tAction Breakdowns\tA list of chosen action_breakdowns to apply\tarray\t[] /custom_insights/-/action_breakdowns/-\tValidActionBreakdowns\tGeneric enumeration. Derive from this class to define new enumerations.\tstring /custom_insights/-/breakdowns\tBreakdowns\tA list of chosen breakdowns to apply\tarray\t[] /custom_insights/-/breakdowns/-\tValidBreakdowns\tGeneric enumeration. Derive from this class to define new enumerations.\tstring /custom_insights/-/end_date\tEnd Date\tThe date until which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this date will be replicated. Not setting this option will result in always syncing the latest data.\tstring /custom_insights/-/fields\tFields\tA list of chosen fields to capture\tarray\t[] /custom_insights/-/fields/-\tValidEnums\tGeneric enumeration. Derive from this class to define new enumerations.\tstring /custom_insights/-/name\tName\tThe name of the insight\tstring /custom_insights/-/start_date\tStart Date\tThe date from which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z.\tstring /custom_insights/-/time_increment\tTime Increment\tTime window in days by which to aggregate statistics. The sync will be chunked into N day intervals, where N is the number of days you specified. For example, if you set this value to 7, then all statistics will be reported as 7-day aggregates by starting from the start_date. If the start and end dates are October 1st and October 30th, then the connector will output 5 records: 01 - 06, 07 - 13, 14 - 20, 21 - 27, and 28 - 30 (3 days only).\tinteger\t1 /end_date\tEnd Date\tThe date until which you'd like to capture data, in the format YYYY-MM-DDT00:00:00Z. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the latest data.\tstring /fetch_thumbnail_images\tFetch Thumbnail Images\tIn each Ad Creative, fetch the thumbnail_url and store the result in thumbnail_data_url\tboolean\tfalse /include_deleted\tInclude Deleted\tInclude data from deleted Campaigns, Ads, and AdSets\tboolean\tfalse /insights_lookback_window\tInsights Lookback Window\tThe attribution window\tinteger\t28 /max_batch_size\tMaximum size of Batched Requests\tMaximum batch size used when sending batch requests to Facebook API. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.\tinteger\t50 /page_size\tPage Size of Requests\tPage size used when sending requests to Facebook API to specify number of records per page when response has pagination. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.\tinteger\t25 /start_date\tStart Date\tThe date from which you'd like to begin capturing data, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Facebook Marketing account from which collections are captured.\tstring\tRequired /syncMode\tSync mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-facebook-marketing:dev config: access_token: <secret> account_id: 000000000000000 start_date: 2022-03-01T00:00:00Z custom_insights: - name: my-custom-insight fields: [ad_id, account_currency] breakdowns: [device_platform] action_breakdowns: [action_type] start_date: 2022-03-01T00:00:00Z bindings: - resource: stream: ad_account syncMode: incremental target: ${PREFIX}/ad_account - resource: stream: ad_sets syncMode: incremental target: ${PREFIX}/ad_sets - resource: stream: ads_insights syncMode: incremental target: ${PREFIX}/ads_insights - resource: stream: ads_insights_age_and_gender syncMode: incremental target: ${PREFIX}/ads_insights_age_and_gender - resource: stream: ads_insights_country syncMode: incremental target: ${PREFIX}/ads_insights_country - resource: stream: ads_insights_region syncMode: incremental target: ${PREFIX}/ads_insights_region - resource: stream: ads_insights_dma syncMode: incremental target: ${PREFIX}/ads_insights_dma - resource: stream: ads_insights_platform_and_device syncMode: incremental target: ${PREFIX}/ads_insights_platform_and_device - resource: stream: ads_insights_action_type syncMode: incremental target: ${PREFIX}/ads_insights_action_type - resource: stream: campaigns syncMode: incremental target: ${PREFIX}/campaigns - resource: stream: activities syncMode: incremental target: ${PREFIX}/activities - resource: stream: ads syncMode: incremental target: ${PREFIX}/ads - resource: stream: ad_creatives syncMode: full_refresh target: ${PREFIX}/ad_creatives Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"GitLab","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#supported-data-resources","content":" When you configure the connector, you may a list of GitLab Groups or Projects from which to capture data. From your selection, the following data resources are captured: ","version":"Next","tagName":"h2"},{"title":"Resources​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#resources","content":" BranchesCommitsIssuesGroup Issue BoardsPipelinesJobsProjectsProject MilestonesProject Merge RequestsUsersGroupsGroup MilestonesGroup and Project MembersTagsReleasesGroup LabelsProject LabelsEpics(only available for GitLab Ultimate and GitLab.com Gold accounts)Epic Issues (only available for GitLab Ultimate and GitLab.com Gold accounts) Each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h3"},{"title":"Prerequisites​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#prerequisites","content":" There are two ways to authenticate with GitLab when capturing data into Flow: using OAuth2, and manually, by generating a personal access token. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the access token method is the only supported method using the command line. Which authentication method you choose depends on the policies of your organization. Github has special organization settings that need to be enabled in order for users to be able to access repos that are part of an organization. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with GitLab in the Flow web app​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#using-oauth2-to-authenticate-with-gitlab-in-the-flow-web-app","content":" A GitLab user account with access to the repositories of interest, and which is a member of organizations of interest. How to add a member. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually using personal access token​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#configuring-the-connector-specification-manually-using-personal-access-token","content":" A GitLab user account with access to all entities of interest. A GitLab personal access token). ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#setup","content":" Complete authentication using Oauth or a PATSelect your start date in the format 2023-08-31T00:00:00Optionally select Groups and Projects ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-gitlab:dev config: credentials: option_title: PAT Credentials personal_access_token: {secret} groups: estuary.dev projects: estuary/flow start_date: 2022-01-01T00:00:00Z bindings: - resource: stream: branches syncMode: full_refresh target: ${PREFIX}/assignees {...} ","version":"Next","tagName":"h3"},{"title":"GitHub","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#supported-data-resources","content":" When you configure the connector, you specify a list of GitHub organizations and/or repositories from which to capture data. From your selection, the following data resources are captured: Full refresh (batch) resources\tIncremental (real-time supported) resourcesAssignees\tComments Branches\tCommit comment reactions Collaborators\tCommit comments Issue labels\tCommits Pull request commits\tDeployments Tags\tEvents Team members\tIssue comment reactions Team memberships\tIssue events Teams\tIssue milestones Users\tIssue reactions Issues Project cards Project columns Projects Pull request comment reactions Pull request stats Pull requests Releases Repositories Review comments Reviews Stargazers Workflow runs Workflows Each resource is mapped to a Flow collection through a separate binding. info The /start_date field is not applicable to the following resources: AssigneesBranchesCollaboratorsIssue labelsOrganizationsPull request commitsPull request statsRepositoriesTagsTeamsUsers ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#prerequisites","content":" There are two ways to authenticate with GitHub when capturing data into Flow: using OAuth2, and manually, by generating a personal access token. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the access token method is the only supported method using the command line. Which authentication method you choose depends on the policies of your organization. Github has special organization settings that need to be enabled in order for users to be able to access repos that are part of an organization. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with GitHub in the Flow web app​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#using-oauth2-to-authenticate-with-github-in-the-flow-web-app","content":" A GitHub user account with access to the repositories of interest, and which is a member of organizations of interest. User may need to request access in Github under the user's personal settings (not the organization settings) by going to Applications then Authorized OAuth Apps on Github. Click the app or the image next to the app and request access under "Organization access". After a user has made the request, the organization administrator can grant access on the "Third-party application access policy" page. See additional details on this Github doc. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually using personal access token​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#configuring-the-connector-specification-manually-using-personal-access-token","content":" A GitHub user account with access to the repositories of interest, and which is a member of organizations of interest. A GitHub personal access token. You may use multiple tokens to balance the load on your API quota. User may need to get the organization's administrator to grant access under "Third-party Access" then "Personal access tokens". ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so some of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/branch\tBranch (Optional)\tSpace-delimited list of GitHub repository branches to pull commits for, e.g. `estuary/flow/your-branch`. If no branches are specified for a repository, the default branch will be pulled.\tstring /credentials\tAuthentication\tChoose how to authenticate to GitHub\tobject\tRequired /credentials/option_title\tAuthentication method\tSet to PAT Credentials for manual authentication\tstring /credentials/personal_access_token\tAccess token\tPersonal access token, used for manual authentication. You may include multiple access tokens as a comma separated list. /page_size_for_large_streams\tPage size for large streams (Optional)\tThe Github connector captures from several resources with a large amount of data. The page size of such resources depends on the size of your repository. We recommended that you specify values between 10 and 30.\tinteger\t10 /repository\tGitHub Repositories\tSpace-delimited list of GitHub organizations/repositories, e.g. `estuary/flow` for a single repository, `estuary/*` to get all repositories from an organization and `estuary/flow estuary/another-repo` for multiple repositories.\tstring\tRequired /start_date\tStart date\tThe date from which you'd like to replicate data from GitHub in the format YYYY-MM-DDT00:00:00Z. For the resources that support this configuration, only data generated on or after the start date will be replicated. This field doesn't apply to all resources.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tGitHub resource from which collection is captured.\tstring\tRequired /syncMode\tSync mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-github:dev config: credentials: option_title: PAT Credentials personal_access_token: {secret} page_size_for_large_streams: 10 repository: estuary/flow start_date: 2022-01-01T00:00:00Z bindings: - resource: stream: assignees syncMode: full_refresh target: ${PREFIX}/assignees {...} ","version":"Next","tagName":"h3"},{"title":"Gladly","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Gladly","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/#supported-data-resources","content":" This connector can be used to sync the following Event entity types from Gladly: AGENT_AVAILABILITYAGENT_STATUSCONTACTCONVERSATIONCUSTOMERPAYMENT_REQUESTTASK By default, each entity type is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Gladly","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/#prerequisites","content":" To set up the Gladly source connector, you'll need a Gladly account with an API token. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Gladly","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Gladly source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Gladly","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/organization\tOrganization\tOrganization to Request Data From\tstring\tRequired /agentEmail\tAgent Email\tAgent Email Address to use for Authentication\tstring\tRequired /apiToken\tAPI Token\tAPI Token to use for Authentication\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tName\tName of this resource\tstring\tRequired /interval\tInterval\tInterval between updates for this resource\tstring\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Gladly","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-gladly:dev config: organization: agentEmail: apiToken: <secret> bindings: - resource: name: AgentAvailabilityEvents interval: PT30S target: ${PREFIX}/AgentAvailabilityEvents {...} ","version":"Next","tagName":"h3"},{"title":"Google Cloud Storage","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/#prerequisites","content":" To use this connector, either your GCS bucket must be public, or you must have access via a Google service account. For public buckets, verify that objects in the bucket are publicly readable.For buckets accessed by a Google Service Account: Ensure that the user has been assigned a role with read access.Create a JSON service account key. Google's Application Default Credentials will use this file for authentication. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the GCS source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/advanced Options for advanced users. You should not typically need to modify these.\tobject /advanced/ascendingKeys\tAscending Keys\tImprove sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors.\tboolean\tfalse /bucket\tBucket\tName of the Google Cloud Storage bucket\tstring\tRequired /googleCredentials\tGoogle Service Account\tService account JSON key to use as Application Default Credentials\tstring /matchKeys\tMatch Keys\tFilter applied to all object keys under the prefix. If provided, only objects whose key (relative to the prefix) matches this regex will be read. For example, you can use ".*\\.json" to only capture json files.\tstring /parser\tParser Configuration\tConfigures how files are parsed\tobject /parser/compression\tCompression\tDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.\tnull, string\tnull /parser/format\tFormat\tDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.\tobject\t{"type":"auto"} /parser/format/type\tType string /prefix\tPrefix\tPrefix within the bucket to capture from. Use this to limit the data in your capture.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tPrefix\tPath to dataset in the bucket, formatted as bucket-name/prefix-name\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-gcs:dev config: bucket: my-bucket googleCredentials: "type": "service_account", "project_id": "project-id", "private_key_id": "key-id", "private_key": "-----BEGIN PRIVATE KEY-----\\nprivate-key\\n-----END PRIVATE KEY-----\\n", "client_email": "service-account-email", "client_id": "client-id", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email" parser: compression: zip format: type: csv config: delimiter: "," encoding: UTF-8 errorThreshold: 5 headers: [ID, username, first_name, last_name] lineEnding: "\\\\r" quote: "\\"" bindings: - resource: stream: my-bucket/${PREFIX} target: ${PREFIX}/${COLLECTION_NAME} Your capture definition may be more complex, with additional bindings for different GCS prefixes within the same bucket. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Advanced: Parsing cloud storage data​","type":1,"pageTitle":"Google Cloud Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/#advanced-parsing-cloud-storage-data","content":" Cloud storage platforms like GCS can support a wider variety of file types than other data source systems. For each of these file types, Flow must parse and translate data into collections with defined fields and JSON schemas. By default, the parser will automatically detect the type and shape of the data in your bucket, so you won't need to change the parser configuration for most captures. However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector. The parser configuration includes: Compression: Specify how the bucket contents are compressed. If no compression type is specified, the connector will try to determine the compression type automatically. Options are: zipgzipzstdnone Format: Specify the data format, which determines how it will be parsed. Options are: Auto: If no format is specified, the connector will try to determine it automatically.AvroCSVJSONProtobufW3C Extended Log info At this time, Flow only supports GCS captures with data of a single file type. Support for multiple file types, which can be configured on a per-binding basis, will be added in the future. For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type. CSV configuration​ CSV files include several additional properties that are important to the parser. In most cases, Flow is able to automatically determine the correct values, but you may need to specify for unusual datasets. These properties are: Delimiter. Options are: Comma (",")Pipe ("|")Space ("0x20")Semicolon (";")Tab ("0x09")Vertical tab ("0x0B")Unit separator ("0x1F")SOH ("0x01")Auto Encoding type, specified by its WHATWG label. Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture. Escape characters. Options are: Backslash ("\\\\")Disable escapes ("")Auto Optionally, a list of column Headers, if not already included in the first row of the CSV file. If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file. Line ending values CRLF ("\\\\r\\\\n") (Windows)CR ("\\\\r")LF ("\\\\n")Record Separator ("0x1E")Auto Quote character Double Quote ("\\"")Single Quote (")Disable Quoting ("")Auto The sample specification above includes these fields. ","version":"Next","tagName":"h3"},{"title":"Advanced: Configure Google service account impersonation​","type":1,"pageTitle":"Google Cloud Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/#advanced-configure-google-service-account-impersonation","content":" As part of your Google IAM management, you may have configured one service account to impersonate another service account. You may find this useful when you want to easily control access to multiple service accounts with only one set of keys. If necessary, you can configure this authorization model for a GCS capture in Flow using the GitOps workflow. To do so, you'll enable sops encryption and impersonate the target account with JSON credentials. Before you begin, make sure you're familiar with how to encrypt credentials in Flow using sops. Use the following sample as a guide to add the credentials JSON to the capture's endpoint configuration. The sample uses the encrypted suffix feature of sops to encrypt only the sensitive credentials, but you may choose to encrypt the entire configuration. config: bucket: <bucket-name> googleCredentials_sops: # URL containing the account to impersonate and the associated project service_account_impersonation_url: https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<target-account>@<project>.iam.gserviceaccount.com:generateAccessToken # Credentials for the account that has been configured to impersonate the target. source_credentials: # In addition to the listed fields, copy and paste the rest of your JSON key file as your normally would # for the `googleCredentials` field client_email: <origin-account>@<anotherproject>.iam.gserviceaccount.com token_uri: https://oauth2.googleapis.com/token type: service_account type: impersonated_service_account ","version":"Next","tagName":"h3"},{"title":"Google Ads","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#supported-data-resources","content":" The following data resources are supported. Resources ending in _report represent legacy resources from the Google Adwords API. ad_group_adsad_group_ad_labelad_groupsad_group_labelcampaignscampaign_labelsclick_viewcustomergeographic_viewkeyword_viewuser_location_viewaccount_performance_reportad_performance_reportdisplay_keyword_performance_reportdisplay_topics_performance_reportshopping_performance_report By default, each resource is mapped to a Flow collection through a separate binding. You may also generate custom resources using GAQL queries. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#prerequisites","content":" There are two ways to authenticate with Google when capturing data into Flow: using OAuth2, and manually, using tokens and secret credentials. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the manual method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Customer Id & Login Customer Id​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#customer-id--login-customer-id","content":" The Login Customer Id setting refers to your MCC Google Ads account Id. One can easily find this number by accessing their Google Ads Dashboard and look to the far right corner of their screen. Example: In the above example, my login_customer_id would be 1234567890. The Customer Id setting refers to your Client Accounts under a MCC account. One can easily find this number by accessing their Google Ads Dashboard and look to the far left corner of their screen, after selecting a client account. Example: In the above example, my customer_id would be 9876543210. Multiple Customer Ids​ This Source allows for multiple Customer Ids to be selected. To allow this, simply add your customer_id followed by a comma. Example: Customer1 = 1234567890 Customer2 = 9876543210 customer_id = 1234567890,9876543210 ","version":"Next","tagName":"h3"},{"title":"Using OAuth2 to authenticate with Google in the Flow web app​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#using-oauth2-to-authenticate-with-google-in-the-flow-web-app","content":" One or more Google Ads accounts. Note each account's customer ID A Google Account that has access to the Google Ads account(s). This account may be a manager account. If so, ensure that it is linked to each Google Ads account and make note of its customer ID. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#configuring-the-connector-specification-manually","content":" One or more Google Ads accounts. Note each account's customer ID A Google Ads manager account that has been linked to each Google Ads account A Google Ads developer token. Your Google Ads manager account must be configured prior to applying for a developer token. caution Developer token applications are independently reviewed by Google and may take one or more days to be approved. Be sure to carefully review Google's requirements before submitting an application. A refresh token, which fetches a new developer tokens for you as the previous token expires. A generated Client ID and Client Secret, used for authentication. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the Flow specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Ads source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/conversion_window_days\tConversion Window (Optional)\tA conversion window is the period of time after an ad interaction (such as an ad click or video view) during which a conversion, such as a purchase, is recorded in Google Ads. For more information, see Google's docs.\tinteger\t14 /credentials\tGoogle Credentials object\tRequired /credentials/client_id\tClient ID\tThe Client ID of your Google Ads developer application.\tstring\tRequired /credentials/client_secret\tClient Secret\tThe Client Secret of your Google Ads developer application.\tstring\tRequired /credentials/developer_token\tDeveloper Token\tDeveloper token granted by Google to use their APIs.\tstring\tRequired /credentials/refresh_token\tRefresh Token\tThe token for obtaining a new access token.\tstring\tRequired /custom_queries\tCustom GAQL Queries (Optional) array /custom_queries/-/query\tCustom Query\tA custom defined GAQL query for building the report. Should not contain segments.date expression. See Google's query builder for more information.\tstring /custom_queries/-/table_name\tDestination Table Name\tThe table name in your destination database for chosen query.\tstring /customer_id\tCustomer ID(s)\tComma separated list of (client) customer IDs. Each customer ID must be specified as a 10-digit number without dashes. More instruction on how to find this value in our docs. Metrics streams like AdGroupAdReport cannot be requested for a manager account.\tstring\tRequired /end_date\tEnd Date (Optional)\tUTC date in the format 2017-01-25. Any data after this date will not be replicated.\tstring /login_customer_id\tLogin Customer ID for Managed Accounts (Optional)\tIf your access to the customer account is through a manager account, this field is required and must be set to the customer ID of the manager account (10-digit number without dashes).\tstring /start_date\tStart Date\tUTC date in the format 2017-01-25. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tGoogle Ad resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-google-ads:dev config: conversion_window_days: 7 credentials: client_id: {secret_client_ID} client_secret: {secret_secret} developer_token: {access_token} refresh_token: {refresh_token} customer_id: 0123456789, 1234567890 login_customer_id: 0987654321 end_date: 2022-01-01 start_date: 2020-01-01 custom_queries: - query: SELECT campaign.id, campaign.name, campaign.status FROM campaign ORDER BY campaign.id table_name: campaigns_custom bindings: - resource: stream: campaign syncMode: incremental target: ${PREFIX}/campaign {...} ","version":"Next","tagName":"h3"},{"title":"Custom queries​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#custom-queries","content":" You can create custom resources using Google Analytics Query Language (GAQL) queries. Each generated resource will be mapped to a Flow collection. For help generating a valid query, see Google's query builder documentation. If a query fails to validate against a given Google Ads account, it will be skipped. ","version":"Next","tagName":"h2"},{"title":"Stream Limitations​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#stream-limitations","content":" ","version":"Next","tagName":"h2"},{"title":"ClickView​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#clickview","content":" Due to Google Ads API limitations, ClickView stream queries are executed with a time range limited to one day. Also, data can only be requested for periods 90 days before the time of the request. In pratical terms, this means that you can only search ClickView data limited to 3 months ago, anything before this is not returned. For more information, check Google's Ads API documentation ","version":"Next","tagName":"h3"},{"title":"Google Drive","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Drive","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/#prerequisites","content":" To use this connector, make sure you have the following: An active Google Drive account with access credentials.Properly configured permissions for your Google Drive resources. Note: This connector is designed specifically for .csv files located in a specified Google Drive folder. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Google Drive","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/#configuration","content":" You can set up the Google Drive source connector either through the Flow web app or by editing the Flow specification file directly. For more information on setting up this connector, refer to our guide on using connectors. The values and specification sample below provide configuration details specific to the Google Drive connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Drive","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials\tJSON file containing authentication credentials for Google Drive.\tfile\tRequired ","version":"Next","tagName":"h3"},{"title":"Bindings​","type":1,"pageTitle":"Google Drive","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/#bindings","content":" Property\tTitle\tDescription\tType\tRequired/Default/file_id\tFile ID\tUnique identifier of the Google Drive file.\tstring\tRequired /path\tPath\tPath to the file or directory in Google Drive.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Drive","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-google-drive:dev config: credentials: /path/to/your/credentials.json bindings: - resource: file_id: "your_google_drive_file_id" path: "/path/in/google/drive" target: ${PREFIX}/target_name ","version":"Next","tagName":"h3"},{"title":"Google Analytics UA","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#supported-data-resources","content":" The following data resources are captured to Flow collections by default: Website overviewTraffic sourcesPagesLocationsMonthly active usersFour weekly active usersTwo weekly active usersWeekly active usersDaily active usersDevices Each resource is mapped to a Flow collection through a separate binding. You can also configure custom reports. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#prerequisites","content":" There are two ways to authenticate with Google when capturing data from a Google Analytics view: using OAuth2, and manually, by generating a service account key. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the service account key method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Google in the Flow web app​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#using-oauth2-to-authenticate-with-google-in-the-flow-web-app","content":" The View ID for your Google Analytics account. You can find this using Google's Account Explorer tool. Your Google account username and password. ","version":"Next","tagName":"h3"},{"title":"Authenticating manually with a service account key​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#authenticating-manually-with-a-service-account-key","content":" The View ID for your Google Analytics account. You can find this using Google's Account Explorer tool. Google Analytics and Google Analytics Reporting APIs enabled on your Google account. A Google service account with: A JSON key generated.Access to the source Google Analytics view. Follow the steps below to meet these prerequisites: Enable the Google Analytics and Google Analytics Reporting APIs for the Google project with which your Analytics view is associated. (Unless you actively develop with Google Cloud, you'll likely just have one option). Create a service account and generate a JSON keyDuring setup, grant the account the Viewer role on your project. You'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector. Add the service account to the Google Analytics view. Grant the account Viewer permissions (formerly known as Read & Analyze permissions). ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Analytics source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#properties","content":" Endpoint​ The following properties reflect the Service Account Key authentication method. If you're working in the Flow web app, you'll use OAuth2, so some of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials\tCredentials for the service\tobject /credentials/auth_type\tAuthentication Type\tAuthentication method. Set to Service for manual configuration, or use OAuth in the web app.\tstring\tRequired credentials/credentials_json\tService Account Credentials\tContents of the JSON key file generated during setup.\tstring\tRequired /custom_reports\tCustom Reports (Optional)\tA JSON array describing the custom reports you want to sync from GA.\tstring /start_date\tStart Date\tThe date in the format YYYY-MM-DD. Any data before this date will not be replicated.\tstring\tRequired /view_id\tView ID\tThe ID for the Google Analytics View you want to fetch data from. This can be found from the Google Analytics Account Explorer: https://ga-dev-tools.appspot.com/account-explorer/\tstring\tRequired /window_in_days\tWindow in days (Optional)\tThe amount of days each stream slice would consist of beginning from start_date. Bigger the value - faster the fetch. (Min=1, as for a Day; Max=364, as for a Year).\tinteger\t1 Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tData resource from the Google Analytics view.\tstring\tRequired /syncMode\tSync Mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Custom reports​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#custom-reports","content":" You can include data beyond the default data resources with Custom Reports. These replicate the functionality of Custom Reports in the Google Analytics Web console. To do so, fill out the Custom Reports property with a JSON array as a string with the following schema: [{"name": string, "dimensions": [string], "metrics": [string]}] You may specify default Google Analytics dimensions and metrics from the table below, or custom dimensions and metrics you've previously defined. Each custom report may contain up to 7 unique dimensions and 10 unique metrics. You must include the ga:date dimension for proper data flow. Supported GA dimensions\tSupported GA metricsga:browser\tga:14dayUsers ga:city\tga:1dayUsers ga:continent\tga:28dayUsers ga:country\tga:30dayUsers ga:date\tga:7dayUsers ga:deviceCategory\tga:avgSessionDuration ga:hostname\tga:avgTimeOnPage ga:medium\tga:bounceRate ga:metro\tga:entranceRate ga:operatingSystem\tga:entrances ga:pagePath\tga:exits ga:region\tga:newUsers ga:socialNetwork\tga:pageviews ga:source\tga:pageviewsPerSession ga:subContinent\tga:sessions ga:sessionsPerUser ga:uniquePageviews ga:users ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#sample","content":" This sample reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-google-analytics-v4:dev config: view_id: 000000000 start_date: 2022-03-01 credentials: auth_type: service credentials_json: <secret> window_in_days: 1 bindings: - resource: stream: daily_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: devices syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: four_weekly_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: locations syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: monthly_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: pages syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: traffic_sources syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: two_weekly_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: website_overview syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: weekly_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Performance considerations​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#performance-considerations","content":" ","version":"Next","tagName":"h2"},{"title":"Data sampling​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#data-sampling","content":" The Google Analytics Reporting API enforces compute thresholds for ad-hoc queries and reports. If a threshold is exceeded, the API will apply sampling to limit the number of sessions analyzed for the specified time range. These thresholds can be found here. If your account is on the Analytics 360 tier, you're less likely to run into these limitations. For Analytics Standard accounts, you can avoid sampling by keeping the window_in_days parameter set to its default value, 1. This makes it less likely that you will exceed the threshold. When sampling occurs, a warning is written to the capture log. ","version":"Next","tagName":"h3"},{"title":"Processing latency​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#processing-latency","content":" Data in Google Analytics reports may continue to update up to 48 hours after it appears. To ensure data correctness, each time it reads from Google Analytics, this connector automatically applies a lookback window of 2 days prior to its last read. This allows it to double-check and correct for any changes in reports resulting from latent data updates. This mechanism relies on the isDataGolden flag in the Google Analytics Reporting API. ","version":"Next","tagName":"h3"},{"title":"Google Analytics 4","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#supported-data-resources","content":" The following data resources are supported: Daily active usersDevicesFour-weekly active usersLocationsPagesTraffic sourcesWebsite overviewWeekly active users Each is fetched as a report and mapped to a Flow collection through a separate binding. You can also capture custom reports. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#prerequisites","content":" To use this connector, you'll need: The Google Analytics Data API enabled on your Google project with which your Analytics property is associated. (Unless you actively develop with Google Cloud, you'll likely just have one option). Your Google Analytics 4 property ID. There are two ways to authenticate this connector with Google: Directly with Google using OAuth through the Flow web app. You'll only need your username and password. Manually, by generating a service account key. Using this method, there are more prerequisites. ","version":"Next","tagName":"h2"},{"title":"Authenticating manually with a service account key​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#authenticating-manually-with-a-service-account-key","content":" In addition to the above prerequisites, you'll need a Google service account with: A JSON key generated. Access to the Google Analytics 4 property. To set this up: Create a service account and generate a JSON key. During setup, grant the account the Viewer role on your project. You'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector. Add the service account to the Google Analytics property. Grant the account Viewer permissions. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing a specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Analytics 4 source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#properties","content":" Endpoint​ The following properties reflect the manual authentication method. If you authenticate directly with Google in the Flow web app, some of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials\tCredentials for the service\tobject /credentials/auth_type\tAuthentication Method\tSet to Service for manual authentication.\tstring /credentials/credentials_json\tService Account Credentials\tContents of the JSON key file generated during setup.\tstring /custom_reports\tCustom Reports (Optional)\tA JSON array describing the custom reports you want to sync from Google Analytics. Learn more about custom reports.\tstring /date_ranges_start_date\tDate Range Start Date\tThe start date. One of the values <N>daysago, yesterday, today or in the format YYYY-MM-DD.\tstring\tRequired /property_id\tProperty ID\tA Google Analytics GA4 property identifier whose events are tracked.\tstring\tRequired /window_in_days\tData request time increment in days (Optional)\tThe time increment used by the connector when requesting data from the Google Analytics API. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364. See data sampling for details.\tinteger\t1 Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tData resource from Google Analytics.\tstring\tRequired /syncMode\tSync Mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Custom reports​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#custom-reports","content":" You can include data beyond the default data resources with Custom Reports. These replicate the functionality of Custom Reports in the Google Analytics Web console. Fill out the Custom Reports property with a JSON array as a string with the following schema: [{"name": "<report-name>", "dimensions": ["<dimension-name>", ...], "metrics": ["<metric-name>", ...]}] Segments and filters are also supported. When using segments, you must include the ga:segment dimension: [{"name": "<report-name>", "dimensions": ["ga:segment", "<other-dimension-name>", ...], "metrics": ["<metric-name>", ...], "segments": "<segment-id>", "filter": "<filter-expression>"}] ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#sample","content":" This sample reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-google-analytics-data-api:dev config: credentials: auth_type: Service credentials_json: <secret> date_ranges_start_date: 2023-01-01 property_id: 000000000 window_in_days: 1 bindings: - resource: stream: daily_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: devices syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: four_weekly_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: locations syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: pages syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: traffic_sources syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: website_overview syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: weekly_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Performance considerations​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#performance-considerations","content":" ","version":"Next","tagName":"h2"},{"title":"Data sampling​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#data-sampling","content":" The Google Analytics Data API enforces compute thresholds for ad-hoc queries and reports. If a threshold is exceeded, the API will apply sampling to limit the number of sessions analyzed for the specified time range. These thresholds can be found here. If your account is on the Analytics 360 tier, you're less likely to run into these limitations. For Analytics Standard accounts, you can avoid sampling by keeping the window_in_days parameter set to its default value, 1. This makes it less likely that you will exceed the threshold. ","version":"Next","tagName":"h3"},{"title":"Google Firestore","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/","content":"","keywords":"","version":"Next"},{"title":"Data model​","type":1,"pageTitle":"Google Firestore","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/#data-model","content":" Firestore is a NoSQL database. Its data model consists of documents (lightweight records that contain mappings of fields and values) organized in collections. Collections are organized hierarchically. A given document in a collection can, in turn, be associated with a subcollection. For example, you might have a collection called users, which contains two documents, alice and bob. Each document has a subcollection called messages (for example, users/alice/messages), which contain more documents (for example, users/alice/messages/1). users ├── alice │ └── messages │ ├── 1 │ └── 2 └── bob └── messages └── 1 The connector works by identifying documents associated with a particular sequence of Firestore collection names, regardless of documents that split the hierarchy. These document groupings are mapped to Flow collections using a path in the pattern collection/*/subcollection. In this example, we'd end up with users and users/*/messages Flow collections, with the latter contain messages from both users. The /_meta/path property for each document contains its full, original path, so we'd still know which messages were Alice's and which were Bob's. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Firestore","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/#prerequisites","content":" You'll need: A Google service account with: Read access to your Firestore database, via roles/datastore.viewer. You can assign this role when you create the service account, or add it to an existing service account. A generated JSON service account key for the account. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Google Firestore","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the Flow specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Firestore source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Firestore","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/googleCredentials\tCredentials\tGoogle Cloud Service Account JSON credentials.\tstring\tRequired /database\tDatabase\tOptional name of the database to capture from. Leave blank to autodetect. Typically "projects/$PROJECTID/databases/(default)".\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/backfillMode\tBackfill Mode\tConfigures the handling of data already in the collection. See below for details or just stick with 'async'\tstring\tRequired /path\tPath to Collection\tSupports parent/*/nested to capture all nested collections of parent's children\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Firestore","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-firestore:dev config: googleCredentials: "type": "service_account", "project_id": "project-id", "private_key_id": "key-id", "private_key": "-----BEGIN PRIVATE KEY-----\\nprivate-key\\n-----END PRIVATE KEY-----\\n", "client_email": "service-account-email", "client_id": "client-id", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email" bindings: - resource: #The below `path` will capture all Firestore documents that match the pattern #`orgs/<orgID>/runs/<runID>/runResults/<runResultID>/queryResults`. #See the Data Model section above for details. path: orgs/*/runs/*/runResults/*/queryResults backfillMode: async target: ${PREFIX}/orgs_runs_runResults_queryResults - resource: path: orgs/*/runs/*/runResults backfillMode: async target: ${PREFIX}/orgs_runs_runResults - resource: path: orgs/*/runs backfillMode: async target: ${PREFIX}/orgs_runs - resource: path: orgs backfillMode: async target: ${PREFIX}/orgs ","version":"Next","tagName":"h3"},{"title":"Backfill mode​","type":1,"pageTitle":"Google Firestore","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/#backfill-mode","content":" In each captured collection's binding configuration, you can choose whether and how to backfill historical data. There are three options: none: Skip preexisting data in the Firestore collection. Capture only new documents and changes to existing documents that occur after the capture is published. async: Use two threads to capture data. The first captures new documents, as with none. The second progressively ingests historical data in chunks. This mode is most reliable for Firestore collections of all sizes but provides slightly weaker guarantees against data duplication. The connector uses a reduction to reconcile changes to the same document found on the parallel threads. The version with the most recent timestamp the document metadata will be preserved ({"strategy": "maximize", "key": "/_meta/mtime"}). For most collections, this produces an accurate copy of your Firestore collections in Flow. sync: Request that Firestore stream all changes to the collection since its creation, in order. This mode provides the strongest guarantee against duplicated data, but can cause errors for large datasets. Firestore may terminate the process if the backfill of historical data has not completed within about ten minutes, forcing the capture to restart from the beginning. If this happens once it is likely to recur continuously. If left unattended for an extended time this can result in a massive number of read operations and a correspondingly large bill from Firestore. This mode should only be used when somebody can keep an eye on the backfill and shut it down if it has not completed within half an hour at most, and on relatively small collections. 100,000 documents or fewer should generally be safe, although this can vary depending on the average document size in the collection. If you're unsure which backfill mode to use, choose async. ","version":"Next","tagName":"h2"},{"title":"Google Cloud Pub/Sub","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#prerequisites","content":" To use this connector, you will need the following prerequisites: A Google Cloud Project with Pub/Sub enabledA Google Cloud Service Account with the "Pub/Sub Editor" roles in your GCP projectA Service Account Key to authenticate into your Service Account See the setup guide for more information about how to create the required resources. ","version":"Next","tagName":"h2"},{"title":"Service Account​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#service-account","content":" To sync data from Pub/Sub, you need credentials for a Service Account with the "Pub/Sub Editor" role. This role grants the necessary permissions to discover topics, create subscriptions to those topics, and read messages from the subscriptions. It is recommended to create a dedicated Service Account to facilitate permission management and auditing. However, if you already have a Service Account with the correct permissions, you can use it. Here's how to provision a suitable service account: Follow Google Cloud Platform's instructions for Creating a Service Account.Note down the ID of the service account you just created. Service Account IDs typically follow the format<account-name>@<project-name>.iam.gserviceaccount.com.Follow Google Cloud Platform's instructions for Granting IAM Rolesto the new service account. The "principal" email address should be the ID of the service account you just created, and the role granted should be "Pub/Sub Editor". ","version":"Next","tagName":"h3"},{"title":"Service Account Key​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#service-account-key","content":" Service Account Keys are used to authenticate as Google Service Accounts. To be able to utilize the permissions granted to the Service Account in the previous step, you'll need to provide its Service Account Key when creating the capture. It is a good practice, though not required, to create a new key for Flow even if you're reusing a preexisting account. To create a new key for a service account, follow Google Cloud Platform's instructions for Creating a Service Account Key. Be sure to create the key in JSON format. Once the linked instructions have been followed you should have a key file, which will need to be uploaded to Flow when setting up your capture. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. Seeconnectors to learn more about using connectors. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/projectId\tProject ID\tGoogle Cloud Project ID that contains the PubSub topics.\tstring\tRequired /credentialsJson\tService Account JSON\tGoogle Cloud Service Account JSON credentials to use for authentication.\tstring\tRequired /subscriptionPrefix\tSubscription Prefix\tPrefix to prepend to the PubSub topics subscription names.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/topic\tTopic\tName of the PubSub topic to subscribe to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"At-Least-Once Message Capture​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#at-least-once-message-capture","content":" Received messages are acknowledged to Pub/Sub after they have been durably committed to your Flow collection. After Pub/Sub receives acknowledgement of messages, it will not attempt to re-deliver messages to subscribers if subscriptions are created with "exactly-once delivery", which this connector does set when it creates subscriptions. Occasionally messages will be captured to your Flow collection more than once if the connector is restarted after it has durably committed the document to the collection but before it has acknowledged the message to Pub/Sub. In this way the committing of the message to your Flow collection is considered a "side effect" of processing the message, and Pub/Sub does not provide guarantees around exactly-once side effects. If you materialize the collections using standard updates, duplicate documents will automatically be de-duplicated in the destination based on the ID of the documents. Materializations that use delta updates need to consider the potential for more than one document with the same ID. ","version":"Next","tagName":"h3"},{"title":"Message Format​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#message-format","content":" Currently only messages with data in JSON format can be processed. Data in other formats will cause errors with the capture connector. Support for other formats is planned - reach out to support@estuary.dev if your use case requires processing data in a different format. ","version":"Next","tagName":"h3"},{"title":"Google Search Console","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#supported-data-resources","content":" The following data resources are supported: Search analytics: all fields This resource contains all data in for your search analytics, and can be large. The following five collections come from queries applied to this dataset. Search analytics by countrySearch analytics by dateSearch analytics by deviceSearch analytics by pageSearch analytics by querySitemapsSites By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Custom reports​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#custom-reports","content":" In addition to the resources listed above, you can add custom reports created with the Google Analytics Search Console integration. You add these to the endpoint configuration in the format {"name": "<report-name>", "dimensions": ["<dimension-name>", ...]}. Each report is mapped to an additional Flow collection. caution Custom reports involve an integration with Google Universal Analytics, which Google will deprecate in July 2023. ","version":"Next","tagName":"h3"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#prerequisites","content":" There are two ways to authenticate with Google when capturing data from Google Search Console: using OAuth2, and manually, by generating a service account key. Their prerequisites differ. OAuth2 is recommended for simplicity in the Flow web app; the service account key method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Google in the Flow web app​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#using-oauth2-to-authenticate-with-google-in-the-flow-web-app","content":" You'll need: Google credentials with Owner access on the Google Search Console property. This can be a user account or a service account. You'll use these credentials to log in to Google in the Flow web app. ","version":"Next","tagName":"h3"},{"title":"Authenticating manually with a service account key​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#authenticating-manually-with-a-service-account-key","content":" You'll need: A Google service account with: A JSON key generated.Access to the Google Search Console view through the API. Follow the steps below to meet these prerequisites: Create a service account and generate a JSON keyYou'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector. Set up domain-wide delegation for the service account. During this process, grant the https://www.googleapis.com/auth/webmasters.readonly OAuth scope. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Search Console source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tAuthentication object\tRequired /credentials/auth_type\tAuthentication Type\tSet to Service for manual authentication\tstring\tRequired /credentials/service_account_info\tService Account JSON Key\tThe JSON key of the service account to use for authorization.\tRequired /credentials/email\tAdmin Email\tThe email of your Google Workspace administrator. This is likely the account used during setup. /custom_reports\tCustom Reports (Optional)\tA JSON array describing the custom reports you want to sync from Google Search Console.\tstring /end_date\tEnd Date\tUTC date in the format 2017-01-25. Any data after this date will not be replicated. Must be greater or equal to the start date field.\tstring /site_urls\tWebsite URL\tThe URLs of the website properties attached to your GSC account.\tarray\tRequired /start_date\tStart Date\tUTC date in the format 2017-01-25. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tGoogle Search Consol resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-google-search-console:dev config: credentials: auth_type: Service service_account_info: <secret> email: admin@yourdomain.com site_urls: https://yourdomain.com start_date: 2022-03-01 bindings: - resource: stream: sites syncMode: full_refresh target: ${PREFIX}/sites {} ","version":"Next","tagName":"h3"},{"title":"Google Sheets","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#prerequisites","content":" There are two ways to authenticate with Google when capturing data from a Sheet: using OAuth2, and manually,by generating a service account key. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the service account key method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Google in the Flow web app​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#using-oauth2-to-authenticate-with-google-in-the-flow-web-app","content":" A link to a Google spreadsheet. Simply copy the link from your browser. Your Google account username and password. ","version":"Next","tagName":"h3"},{"title":"Spreadsheet Formatting​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#spreadsheet-formatting","content":" For a more efficient usage, the connector expects a few basic formatting rules inside each spreadsheet: The first row must be frozen and contain header names for each column. If the first row is not frozen or does not contain header names, header names will be set using high-case alphabet letters (A,B,C,D...Z). Sheet is not a image sheet or contains images.Sheet is not empty. If a Sheet is empty, the connector will not break and wait for changes inside the Sheet. When new data arrives, you will be prompted by flow to allow for schema changes. Sheet does not contain formulaValue inside any cell. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#configuring-the-connector-specification-manually","content":" A link to a Google spreadsheet. Simply copy the link from your browser. Google Sheets and Google Drive APIs enabled on your Google account. A Google service account with: A JSON key generated.Access to the source spreadsheet. Follow the steps below to meet these prerequisites: Enable the Google Sheets and Google Drive APIs for the Google project with which your spreadsheet is associated. (Unless you actively develop with Google Cloud, you'll likely just have one option). Create a service account and generate a JSON key. During setup, grant the account the Viewer role on your project. You'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector. Share your Google spreadsheet with the service account. You may either share the sheet so that anyone with the link can view it, or share explicitly with the service account's email address. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Sheets source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#properties","content":" Endpoint​ The following properties reflect the Service Account Key authentication method. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials\tGoogle API Credentials for connecting to Google Sheets and Google Drive APIs\tobject\tRequired /credentials/auth_type\tAuthentication Type\tAuthentication method. Set to Service.\tstring\tRequired credentials/service_account_info\tService Account Credentials\tContents of the JSON key file generated during setup.\tstring\tRequired /spreadsheet_id\tSpreadsheet Link\tThe link to your spreadsheet.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tSheet\tEach sheet in your Google Sheets document.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to full_refresh.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-google-sheets:dev config: credentials: auth_type: Service service_account_info: <secret> spreadsheet_id: https://docs.google.com/spreadsheets/... bindings: - resource: stream: Sheet1 syncMode: full_refresh target: ${PREFIX}/${COLLECTION_NAME} Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Greenhouse","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Greenhouse","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/#supported-data-resources","content":" The following data resources are supported through the Greenhouse APIs: Activity FeedApplicationsApplications InterviewsApprovalsCandidatesClose ReasonsCustom FieldsDegreesDepartmentsDisciplinesEEOCEmail TemplatesInterviewsJob PostsJob StagesJobsJob OpeningsJobs StagesOffersOfficesProspect PoolsRejection ReasonsSchoolsScorecardsSourcesTagsUsersUser PermissionsUser Roles By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Greenhouse","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/#prerequisites","content":" To set up the Greenhouse source connector, you'll need the Harvest API key with permissions to the resources Estuary Flow should be able to access. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Greenhouse","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Greenhouse source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Greenhouse","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/apikey\tAPI Key\tThe value of the Greenhouse API Key generated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Greenhouse project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Greenhouse","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-greenhouse:dev config: apikey: <secret> bindings: - resource: stream: applications syncMode: full_refresh target: ${PREFIX}/applications {...} ","version":"Next","tagName":"h3"},{"title":"Harvest","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Harvest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/#supported-data-resources","content":" The following data resources are supported through the Harvest APIs: Client ContactsClientsCompanyInvoice MessagesInvoice PaymentsInvoicesInvoice Item CategoriesEstimate MessagesEstimatesEstimate Item CategoriesExpensesExpense CategoriesTasksTime EntriesProject User AssignmentsProject Task AssignmentsProjectsRolesUser Billable RatesUser Cost RatesUser Project AssignmentsExpense ReportsUninvoiced ReportTime ReportsProject Budget ReportBy default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Harvest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/#prerequisites","content":" To set up the Harvest source connector, you'll need the Harvest Account ID and API key. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Harvest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Harvest source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Harvest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/account_id\tAccount ID\tHarvest account ID. Required for all Harvest requests in pair with Personal Access Token.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired /end_date\tEnd Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tDefault Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Harvest project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Harvest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-harvest:dev config: account_id: <account id> start_date: 2017-01-25T00:00:00Z end_date: 2020-01-25T00:00:00Z bindings: - resource: stream: clients syncMode: incremental target: ${PREFIX}/clients {...} ","version":"Next","tagName":"h3"},{"title":"HTTP File","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/","content":"","keywords":"","version":"Next"},{"title":"Supported data types​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#supported-data-types","content":" This connector automatically captures the data hosted at the specified URL into a single Flow collection. The following file types are supported: AvroCSVJSONProtobufW3C Extended Log The following compression methods are supported: ZIPGZIPZSTD By default, Flow automatically detects the file type and compression method. If necessary, you can specify the correct file type, compression, and other properties (CSV only) using the optional parser configuration. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#prerequisites","content":" To use this connector, you'll need the URL to an HTTP endpoint that hosts data of one of the supported types. The HTTP endpoint must support HEAD HTTP requests, and the response to this request must include a Last-Modified header. tip You can send a test HEAD request using Curl with the -I parameter, for example:curl -I https://my-site.com/my_hosted_dataset.json.zipUse this online tool to easily do so in your browser. Some HTTP endpoints require credentials for access. If this is the case, have your username and password ready. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the HTTP file source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials\tUser credentials, if required to access the data at the HTTP URL.\tobject /credentials/password\tPassword\tPassword, if required to access the HTTP endpoint.\tstring /credentials/user\tUser\tUsername, if required to access the HTTP endpoint.\tstring /headers\tHeaders object /headers/items\tAdditional HTTP Headers\tAdditional HTTP headers when requesting the file. These are uncommon.\tarray /headers/items/-/key\tHeader Key string /headers/items/-/value\tHeader Value string /parser\tParser Configuration\tConfigures how files are parsed\tobject /parser/compression\tCompression\tDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.\tnull, string\tnull /parser/format\tFormat\tDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.\tobject\t{"type":"auto"} /parser/format/type\tType string /url\tHTTP File URL\tA valid HTTP url for downloading the source file.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tName of the dataset\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-http-file:dev config: url: https://my-site.com/my_hosted_dataset.json.zip parser: compression: zip format: type: csv config: delimiter: "," encoding: UTF-8 errorThreshold: 5 headers: [ID, username, first_name, last_name] lineEnding: "\\\\r" quote: "\\"" bindings: - resource: stream: my_hosted_dataset.json.zip target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Advanced: Parsing HTTP-hosted data​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#advanced-parsing-http-hosted-data","content":" HTTP endpoints can support a variety of file types. For each file type, Flow must parse and translate data into collections with defined fields and JSON schemas. By default, the parser will automatically detect the type and shape of the data at the HTTP endpoint, so you won't need to change the parser configuration for most captures. However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector. The parser configuration includes: Compression: Specify how the data is compressed. If no compression type is specified, the connector will try to determine the compression type automatically. Options are: zipgzipzstdnone Format: Specify the data format, which determines how it will be parsed. If no file type is specified, the connector will try to determine the file type automatically Options are: AvroCSVJSONProtobufW3C Extended Log CSV configuration​ CSV files include several additional properties that are important to the parser. In most cases, Flow is able to automatically determine the correct values, but you may need to specify for unusual datasets. These properties are: Delimiter. Options are: Comma (",")Pipe ("|")Space ("0x20")Semicolon (";")Tab ("0x09")Vertical tab ("0x0B")Unit separator ("0x1F")SOH ("0x01")Auto Encoding type, specified by its WHATWG label. Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture. Escape characters. Options are: Backslash ("\\\\")Disable escapes ("")Auto Optionally, a list of column Headers, if not already included in the first row of the CSV file. If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file. Line ending values CRLF ("\\\\r\\\\n") (Windows)CR ("\\\\r")LF ("\\\\n")Record Separator ("0x1E")Auto Quote character Double Quote ("\\"")Single Quote (")Disable Quoting ("")Auto The sample specification above includes these fields. ","version":"Next","tagName":"h3"},{"title":"Advanced: Using HTTP headers​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#advanced-using-http-headers","content":" For data accessed through certain APIs, you may need to send headers as part of your HTTP request. This is uncommon, and is supported by the optional Headers configuration. This configuration section is encrypted with sops, so you can safely include secretes such as API keys. See the source data's API documentation for headers that may be required for your capture. ","version":"Next","tagName":"h3"},{"title":"HubSpot ( Real-Time )","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/","content":"","keywords":"","version":"Next"},{"title":"Supported HubSpot Resources​","type":1,"pageTitle":"HubSpot ( Real-Time )","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/#supported-hubspot-resources","content":" The connector automatically discovers bindings for the following HubSpot resources: CompaniesContactsCustom ObjectsDealsEngagementsEmail EventsPropertiesTickets Updates for Email Events and Custom Objects may be delayed by up to 5 minutes due to eventual consistency of the HubSpot API. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"HubSpot ( Real-Time )","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/#prerequisites","content":" There are two ways to authenticate with HubSpot when capturing data: using OAuth2, or with a private app access token. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with HubSpot in the Flow web app​","type":1,"pageTitle":"HubSpot ( Real-Time )","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/#using-oauth2-to-authenticate-with-hubspot-in-the-flow-web-app","content":" A HubSpot account ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"HubSpot ( Real-Time )","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/#configuring-the-connector-specification-manually","content":" A HubSpot account The access token for an appropriately configured private app on the Hubspot account. Setup​ To create a private app in HubSpot and generate its access token, do the following. Ensure that your HubSpot user account has super admin privileges. In HubSpot, create a new private app. Name the app "Estuary Flow," or choose another name that is memorable to you. Grant the new app Read access for all available scopes. Copy the access token for use in the connector configuration. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"HubSpot ( Real-Time )","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the HubSpot Real-Time connector. Endpoint​ The following properties reflect the access token authentication method. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tPrivate Application\tAuthenticate with a private app access token\tobject\tRequired /credentials/access_token\tAccess Token\tHubSpot Access token.\tstring\tRequired /credentials/credentials_title\tCredentials\tName of the credentials set\tstring\tRequired, "Private App Credentials" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tData resource\tName of the data resource.\tstring\tRequired /interval\tInterval\tInterval between data syncs\tstring\t ","version":"Next","tagName":"h2"},{"title":"Sample​","type":1,"pageTitle":"HubSpot ( Real-Time )","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-hubspot-native:dev config: credentials_title: Private App Credentials access_token: <secret> bindings: - resource: name: companies target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Hubspot","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#supported-data-resources","content":" By default, each resource associated with your Hubspot account is mapped to a Flow collection through a separate binding. The following data resources are supported for all subscription levels: CampaignsCompaniesContact ListsContactsContacts List MembershipsDeal PipelinesDealsEmail EventsEngagementsEngagements CallsEngagements EmailsEngagements MeetingsEngagements NotesEngagements TasksFormsForm SubmissionsLine ItemsOwnersProductsProperty HistoryQuotesSubscription ChangesTicketsTicket Pipelines The following data resources are supported for pro accounts (set Subscription type to pro in the configuration): Feedback SubmissionsMarketing EmailsWorkflows ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#prerequisites","content":" There are two ways to authenticate with Hubspot when capturing data: using OAuth2 or with a private app access token. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the access token method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Hubspot in the Flow web app​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#using-oauth2-to-authenticate-with-hubspot-in-the-flow-web-app","content":" A Hubspot account ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#configuring-the-connector-specification-manually","content":" A Hubspot account The access token for an appropriately configured private app on the Hubspot account. Setup​ To create a private app in Hubspot and generate its access token, do the following. Ensure that your Hubspot user account has super admin privileges. In Hubspot, create a new private app. Name the app "Estuary Flow," or choose another name that is memorable to you. Grant the new app Read access for all available scopes. Copy the access token for use in the connector configuration. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Hubspot source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#properties","content":" Endpoint​ The following properties reflect the access token authentication method. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tPrivate Application\tAuthenticate with a private app access token\tobject\tRequired /credentials/access_token\tAccess Token\tHubSpot Access token.\tstring\tRequired /credentials/credentials_title\tCredentials\tName of the credentials set\tstring\tRequired, "Private App Credentials" /start_date\tStart Date\tUTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired /subscription_type\tYour HubSpot account subscription type\tSome streams are only available to certain subscription packages, we use this information to select which streams to pull data from.\tstring\t"starter" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tData resource\tName of the data resource.\tstring\tRequired /syncMode\tSync Mode\tConnection method\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-hubspot:dev config: credentials: credentials_title: Private App Credentials access_token: <secret> bindings: - resource: stream: companies syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your configuration will have many more bindings representing all supported resourcesin your Hubspot account. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"HTTP Ingest (Webhook)","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/","content":"","keywords":"","version":"Next"},{"title":"Usage​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#usage","content":" This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific system or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source. This is useful primarily if you want to test out Flow or see how your webhook data will come over. To begin, use the web app to create a capture. Once published, the confirmation dialog displays a unique URL for your public endpoint. By default, this will accept webhook requests at https://<your-public-endpoint>/webhook-data, but you can customize the path, or even capture from multiple URL paths if you like. You're now ready to send data to Flow. ","version":"Next","tagName":"h2"},{"title":"Send sample data to Flow​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#send-sample-data-to-flow","content":" After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture. Expand POST or PUT and click Try it out to send some example JSON documents using the UI. You can also copy the provided curl commands to send data via the command line. After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture. Click Details to view the data preview. ","version":"Next","tagName":"h3"},{"title":"Webhook URLs​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#webhook-urls","content":" To configure a webhook in another service, such as Github, Shopify, or Segment, you'll need to paste a webhook URL into the configuration of their service. To determine the full URL, start with the base URL from the Flow web app (for example https://abc123-8080.us-central1.v1.estuary-data.dev), and then append the path. The path will be whatever is in the paths endpoint configuration field (/webhook-data by default). For example, your full webhook URL would be https://<your-unique-hostname>/webhook-data. You can add additional paths to paths, and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you're editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to /my-webhook.json, then the full URL for that binding would be https://<your-unique-hostname>/my-webhook.json. Any URL query parameters that are sent on the request will be captured and serialized under /_meta/query/* the in documents. For example, a webhook request that's sent to /webhook-data?testKey=testValue would result in a document like: { "_meta": { "webhookId": "...", "query": { "testKey": "testValue" }, ... } ... } ","version":"Next","tagName":"h3"},{"title":"Webhook IDs​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#webhook-ids","content":" Webhook delivery is typically "at least once". This means that webhooks from common services such as Github, Segment, Shopify, etc. may sometimes be sent multiple times. In order to prevent problems due to duplicate processing of webhooks, these services typically provide either an HTTP header or a field within each document that serves as a unique ID for each webhook event. This can be used to deduplicate the events in your webhook-data collection. The key of the discovered webhook-data collection is /_meta/webhookId. By default, this value is generated automatically by the connector, and no-deduplication will be performed. You can set the idFromHeader option in the resource configuration to have the connector automatically assign the value of the given HTTP header to the /_meta/webhookId property. Doing so means that a materialization of the webhook-data collection will automatically deduplicate the webhook events. Here's a table with some common webhook services and headers that they use: Service\tValue to use for idFromHeaderGithub\tX-Github-Event Shopify\tX-Shopify-Webhook-Id Zendesk\tx-zendesk-webhook-id Jira\tX-Atlassian-Webhook-Identifier ","version":"Next","tagName":"h3"},{"title":"Custom collection IDs​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#custom-collection-ids","content":" Some webhooks don't pass a deduplication ID as part of the HTTP headers. That's fine, and you can still easily deduplicate the events. To do so, you'll just need to customize the schema and key of your webhook-data collection, or bind the webhook to an existing collection that already has the correct schema and key. Just set the key to the field(s) within the webhook payload that uniquely identify the event. For example, to capture webhooks from Segment, you'll want to set the key to ["/messageId"], and ensure that the schema requires that property to exist and be a string. ","version":"Next","tagName":"h3"},{"title":"Authentication​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#authentication","content":" The connector can optionally require each request to present an authentication token as part of an Authorization: Bearer HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an Authorization header with the value of your token. For example, if you use an auth token value of mySecretToken, then the header on each request must be Authorization: Bearer mySecretToken. If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection. We recommend using authentication whenever possible. ","version":"Next","tagName":"h3"},{"title":"Webhook signature verification​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#webhook-signature-verification","content":" This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact support@estuary.dev and let us know. ","version":"Next","tagName":"h3"},{"title":"Endpoint Configuration​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#endpoint-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tEndpointConfig object\tRequired /require_auth_token\tAuthentication token\tOptional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections.\tnull, string\tnull /paths\tURL Paths\tList of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.\tnull, string\tnull List of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment. ","version":"Next","tagName":"h2"},{"title":"Resource configuration​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#resource-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tResourceConfig object\tRequired /idFromHeader Set the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`.\tnull, string /path The URL path to use for adding documents to this binding. Defaults to the name of the collection.\tnull, string /stream The name of the binding, which is used as a merge key when doing Discovers.\tnull, string\t ","version":"Next","tagName":"h2"},{"title":"Instagram","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Instagram","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/#supported-data-resources","content":" The following data resources are supported through the Instagram APIs: For more information, see the Instagram Graph API and Instagram Insights API documentation. UserUser InsightsMediaMedia InsightsStoriesStory Insights By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Instagram","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/#prerequisites","content":" Meta for Developers accountInstagram business account to your Facebook pageInstagram Graph API to your Facebook appFacebook OAuth ReferenceFacebook ad account ID number ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Instagram","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Instagram source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Instagram","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/client_id\tClient ID\tThe Client ID of your Instagram developer application.\tstring\tRequired /client_secret\tClient Secret\tThe Client Secret of your Instagram developer application.\tstring\tRequired /access_token\tAccess Token\tThe value of the access token generated with instagram_basic, instagram_manage_insights, pages_show_list, pages_read_engagement, Instagram Public Content Access permissions.\tstring\tRequired /start_date\tReplication Start Date\tUTC date and time in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Instagram project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Instagram","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-instagram:dev config: client_id: <your client ID> client_secret: <secret> access_token: <secret> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: stories syncMode: full_refresh target: ${PREFIX}/stories {...} ","version":"Next","tagName":"h3"},{"title":"Intercom HTTP Ingest (Webhook)","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/","content":"","keywords":"","version":"Next"},{"title":"Usage​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#usage","content":" This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific system or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source. This is useful primarily if you want to test out Flow or see how your webhook data will come over. To begin, use the web app to create a capture. Once published, the confirmation dialog displays a unique URL for your public endpoint. You're now ready to send data to Flow. ","version":"Next","tagName":"h2"},{"title":"Send sample data to Flow​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#send-sample-data-to-flow","content":" After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture. Expand POST or PUT and click Try it out to send some example JSON documents using the UI. You can also copy the provided curl commands to send data via the command line. After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture. Click Details to view the data preview. ","version":"Next","tagName":"h3"},{"title":"Configure a Intercom webhook​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#configure-a-intercom-webhook","content":" Navigate to your App in your Developer Hub and select the Webhooks from the configuration options Under Endpoint URL enter in the unique URL generated for your Estuary Webhook endpoint in the format https://<your-webhook-url>/webhook-data Configure the Topics section to trigger on your preferred webhook events and click save. Optionally, you can select Send a test request to preview how the data would be ingested into Estuary. ","version":"Next","tagName":"h3"},{"title":"Webhook URLs​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#webhook-urls","content":" To determine the full URL, start with the base URL from the Flow web app (for example https://abc123-8080.us-central1.v1.estuary-data.dev), and then append the path. The path will be whatever is in the paths endpoint configuration field (/webhook-data by default). For example, your full webhook URL would be https://<your-unique-hostname>/webhook-data. You can add additional paths to paths, and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you're editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to /my-webhook.json, then the full URL for that binding would be https://<your-unique-hostname>/my-webhook.json. Any URL query parameters that are sent on the request will be captured and serialized under /_meta/query/* the in documents. For example, a webhook request that's sent to /webhook-data?testKey=testValue would result in a document like: { "_meta": { "webhookId": "...", "query": { "testKey": "testValue" }, ... } ... } ","version":"Next","tagName":"h3"},{"title":"Authentication​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#authentication","content":" The connector can optionally require each request to present an authentication token as part of an Authorization: Bearer HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an Authorization header with the value of your token. For example, if you use an auth token value of mySecretToken, then the header on each request must be Authorization: Bearer mySecretToken. If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection. We recommend using authentication whenever possible. ","version":"Next","tagName":"h3"},{"title":"Webhook signature verification​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#webhook-signature-verification","content":" This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact support@estuary.dev and let us know. ","version":"Next","tagName":"h3"},{"title":"Endpoint Configuration​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#endpoint-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tEndpointConfig object\tRequired /require_auth_token Optional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections.\tnull, string\tnull /paths\tURL Paths\tList of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.\tnull, string\tnull ","version":"Next","tagName":"h2"},{"title":"Resource configuration​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#resource-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tResourceConfig object\tRequired /idFromHeader Set the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`.\tnull, string /path The URL path to use for adding documents to this binding. Defaults to the name of the collection.\tnull, string\t ","version":"Next","tagName":"h2"},{"title":"Intercom","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Intercom","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/#supported-data-resources","content":" The following data resources are supported through the Intercom API: AdminsCompaniesCompany attributesCompany segmentsContactsContact attributesConversationsConversation partsSegmentsTagsTeams By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Intercom","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/#prerequisites","content":" There are two ways to authenticate with Intercom: In the Flow web app, you sign in directly. You'll need the username and password associated with a user with full permissions on your Intercom workspace. Using the flowctl CLI, you configure authentication manually. You'll need the access token for you Intercom account. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Intercom","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Intercom source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Intercom","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/#properties","content":" Endpoint​ The properties in the table below reflect manual authentication using the CLI. In the Flow web app, you'll sign in directly and won't need the access token. Property\tTitle\tDescription\tType\tRequired/Default/access_token\tAccess token\tAccess token for making authenticated requests.\tstring\tRequired /start_date\tStart date\tUTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource from Intercom from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Intercom","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/#sample","content":" The sample below reflects manual authentication in the CLI. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-intercom:dev config: access_token: <secret> start_date: 2022-06-18T00:00:00Z bindings: - resource: stream: admins syncMode: full_refresh target: ${PREFIX}/admins - resource: stream: companies syncMode: incremental target: ${PREFIX}/companies - resource: stream: company_segments syncMode: incremental target: ${PREFIX}/companysegments - resource: stream: conversations syncMode: incremental target: ${PREFIX}/conversations - resource: stream: conversation_parts syncMode: incremental target: ${PREFIX}/conversationparts - resource: stream: contacts syncMode: incremental target: ${PREFIX}/contacts - resource: stream: company_attributes syncMode: full_refresh target: ${PREFIX}/companyattributes - resource: stream: contact_attributes syncMode: full_refresh target: ${PREFIX}/contactattributes - resource: stream: segments syncMode: incremental target: ${PREFIX}/segments - resource: stream: tags syncMode: full_refresh target: ${PREFIX}/tags - resource: stream: teams syncMode: full_refresh target: ${PREFIX}/teams ","version":"Next","tagName":"h3"},{"title":"Jira HTTP Ingest (Webhook)","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/","content":"","keywords":"","version":"Next"},{"title":"Usage​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#usage","content":" This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific system or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source. This is useful primarily if you want to test out Flow or see how your webhook data will come over. To begin, use the web app to create a capture. Once published, the confirmation dialog displays a unique URL for your public endpoint. You're now ready to send data to Flow. ","version":"Next","tagName":"h2"},{"title":"Send sample data to Flow​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#send-sample-data-to-flow","content":" After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture. Expand POST or PUT and click Try it out to send some example JSON documents using the UI. You can also copy the provided curl commands to send data via the command line. After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture. Click Details to view the data preview. ","version":"Next","tagName":"h3"},{"title":"Configure a Jira webhook​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#configure-a-jira-webhook","content":" In the Jira Administration console press the . key to bring up Jira's search. Search for Webhooks. Click on a Create a WebHook and in the url section input the url that was generated after publishing a capture in Flow. See the Webhook URLs section below for more information on the structure of your URL. Review Jira's documentation on configuring a webhook for more information. ","version":"Next","tagName":"h3"},{"title":"Webhook URLs​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#webhook-urls","content":" To determine the full URL, start with the base URL from the Flow web app (for example https://abc123-8080.us-central1.v1.estuary-data.dev), and then append the path. The path will be whatever is in the paths endpoint configuration field (/webhook-data by default). For example, your full webhook URL would be https://<your-unique-hostname>/webhook-data. You can add additional paths to paths, and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you're editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to /my-webhook.json, then the full URL for that binding would be https://<your-unique-hostname>/my-webhook.json. Any URL query parameters that are sent on the request will be captured and serialized under /_meta/query/* the in documents. For example, a webhook request that's sent to /webhook-data?testKey=testValue would result in a document like: { "_meta": { "webhookId": "...", "query": { "testKey": "testValue" }, ... } ... } ","version":"Next","tagName":"h3"},{"title":"Authentication​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#authentication","content":" The connector can optionally require each request to present an authentication token as part of an Authorization: Bearer HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an Authorization header with the value of your token. For example, if you use an auth token value of mySecretToken, then the header on each request must be Authorization: Bearer mySecretToken. If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection. We recommend using authentication whenever possible. ","version":"Next","tagName":"h3"},{"title":"Webhook signature verification​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#webhook-signature-verification","content":" This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact support@estuary.dev and let us know. ","version":"Next","tagName":"h3"},{"title":"Endpoint Configuration​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#endpoint-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tEndpointConfig object\tRequired /require_auth_token Optional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections.\tnull, string\tnull /paths\tURL Paths\tList of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.\tnull, string\tnull ","version":"Next","tagName":"h2"},{"title":"Resource configuration​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#resource-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tResourceConfig object\tRequired /idFromHeader Set the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`.\tnull, string /path The URL path to use for adding documents to this binding. Defaults to the name of the collection.\tnull, string /stream The name of the binding, which is used as a merge key when doing Discovers.\tnull, string\t ","version":"Next","tagName":"h2"},{"title":"Iterable","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Iterable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/#supported-data-resources","content":" The following data resources are supported through the Iterable APIs: CampaignsCampaign MetricsChannelsEmail BounceEmail ClickEmail ComplaintEmail OpenEmail SendEmail Send SkipEmail SubscribeEmail UnsubscribeEventsListsList UsersMessage TypesMetadataTemplatesUsersPushSendPushSendSkipPushOpenPushUninstallPushBounceWebPushSendWebPushClickWebPushSendSkipInAppSendInAppOpenInAppClickInAppCloseInAppDeleteInAppDeliveryInAppSendSkipInboxSessionInboxMessageImpressionSmsSendSmsBounceSmsClickSmsReceivedSmsSendSkipSmsUsageInfoPurchaseCustomEventHostedUnsubscribeClick By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Iterable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/#prerequisites","content":" To set up the Iterable source connector, you'll need the Iterable Server-side API Key with standard permissions. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Iterable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Iterable source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Iterable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/apikey\tAPI Key\tThe value of the Iterable API Key generated.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Iterable project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Iterable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-iterable:dev config: apikey: <secret> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: purchase syncMode: full_refresh target: ${PREFIX}/purchase {...} ","version":"Next","tagName":"h3"},{"title":"Klaviyo","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Klaviyo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/#supported-data-resources","content":" This connector can be used to sync the following tables from Klaviyo: CampaignsEventsGlobalExclusionsListsMetricsFlowsProfiles By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Klaviyo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/#prerequisites","content":" To set up the Klaviyo source connector, you'll need the Klaviyo Private API key. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Klaviyo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Klaviyo source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Klaviyo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_key\tAPI Key\tThe value of the Klaviyo API Key generated.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Klaviyo project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Klaviyo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-klaviyo:dev config: api_key: <secret> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: lists syncMode: full_refresh target: ${PREFIX}/lists {...} ","version":"Next","tagName":"h3"},{"title":"Jira","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Jira","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/#supported-data-resources","content":" The following data resources are supported through the Jira APIs: Application rolesAvatarsBoardsDashboardsFiltersFilter sharingGroupsIssue fieldsIssue field configurationsIssue custom field contextsIssue link typesIssue navigator settingsIssue notification schemesIssue prioritiesIssue propertiesIssue remote linksIssue resolutionsIssue security schemesIssue type schemesIssue type screen schemesIssue votesIssue watchersJira settingsLabelsPermissionsPermission schemesProjectsProject avatarsProject categoriesProject componentsProject emailProject permission schemesProject typesProject versionsScreensScreen tabsScreen tab fieldsScreen schemesSprintsTime trackingUsersUsersGroupsDetailedWorkflowsWorkflow schemesWorkflow statusesWorkflow status categoriesBoard issuesIssue commentsIssue worklogsIssuesSprint issuesBy default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Jira","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/#prerequisites","content":" API Token: You can create an API token following these steps from JiraDomainEmail ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Jira","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Jira source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Jira","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_token\tAPI Token\tJira API Token is used for Authorization to your account by BasicAuth.\tstring\tRequired /domain\tDomain\tThe Domain for your Jira account, e.g. estuary.atlassian.net, estuary.jira.com, jira.your-domain.com\tstring\tRequired /email\tEmail\tThe user email for your Jira account which you used to generate the API token. This field is used for Authorization to your account by BasicAuth.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Jira project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Jira","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-jira:dev config: api_token: <token> domain: <domain> email: <email> bindings: - resource: stream: issues syncMode: incremental target: ${PREFIX}/issues {...} ","version":"Next","tagName":"h3"},{"title":"LinkedIn Ads","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#supported-data-resources","content":" The following data resources are supported: AccountsAccount usersCampaign groupsCampaignsCreativesAdDirectSponsoredContents (Video ads)Ad analytics by campaignAd analytics by creative By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#prerequisites","content":" There are two ways to authenticate with LinkedIn when capturing data into Flow: using OAuth2, and manually, by creating a developer application. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the developer application method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with LinkedIn in the Flow web app​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#using-oauth2-to-authenticate-with-linkedin-in-the-flow-web-app","content":" One or more LinkedIn Ad Accounts with active campaigns. A LinkedIn user with access to the Ad Accounts from which you want to capture data. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#configuring-the-connector-specification-manually","content":" To configure without using OAuth, you'll need to create an application using the LinkedIn Marketing API, and generate its access token. Setup​ Create a marketing application on LinkedIn Developers.Apply to the LinkedIn Developer Program.Generate your access token. caution LinkedIn access tokens expire in 60 days. You must manually update your capture configuration to continue to capture data from LinkedIn. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the capture specification. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the LinkedIn Ads source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so some of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/account_ids\tAccount IDs (Optional)\tA space-separated list of the account IDs from which to capture data. Leave empty if you want to capture data from all linked accounts.\tarray\t[] /credentials\tAuthentication object /credentials/auth_method\tAuthentication method\tSet to access_token to authenticate manually.\tstring /credentials/access_token\tAccess token\tAccess token generated from your LinkedIn Developers app.\tstring /start_date\tStart date\tUTC date in the format 2020-09-17. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tLinkedIn Ads stream from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-linkedin-ads:dev config: account_ids: - 000000000 - 111111111 credentials: auth_method: access_token access_token: {secret} start_date: 2022-01-01 bindings: - resource: stream: campaigns syncMode: incremental target: ${PREFIX}/campaign {...} ","version":"Next","tagName":"h3"},{"title":"LinkedIn Pages","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#prerequisites","content":" An existing LinkedIn Account The API user account should be assigned the ADMIN role and the following permissions for the API endpoints. Endpoints such as: Organization Lookup API, Follower Statistics and Share Statistics require these permissions: r_organization_social: Read the organization's posts, comments, reactions, etc.rw_organization_admin: Write and read the organization's pages and read reporting data. ","version":"Next","tagName":"h2"},{"title":"Authentication​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#authentication","content":" This connector's authentication can be configured by either passing a LinkedIn access token or using Oauth to connect to your source. Oauth requires the additional setup of verifying your application with LinkedIn in order to use the required scopes. You can see more details about the Community Management App Review in LinkedIn's Docs. info LinkedIn access tokens expire in 60 days. You must manually update your capture configuration to continue to capture data from LinkedIn. Refresh tokens expire after 365 days from their creation date. If you receive a 401 invalid token response error, it means that the access token has expired and you need to generate a new token. You can see more details about it in LinkedIn's Docs. ","version":"Next","tagName":"h3"},{"title":"Access Token Authentication​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#access-token-authentication","content":" Go to the LinkedIn Developers' OAuth Token Tools and click Create tokenYour app will need the r_organization_social and rw_organization_admin scopes:Click "Request access token" and save the token. ","version":"Next","tagName":"h3"},{"title":"Oauth Authentication​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#oauth-authentication","content":" Create a LinkedIn OAuth App​ Create a LinkedIn Page if you don't have one.Create a developer application in LinkedIn's Developer Portal.Ensure your application complies with the Restricted Uses of LinkedIn Marketing APIs and Data.Apply to the Community Management API under the Products tab of your LinkedIn app and complete the form.Save your client_id and client_secret from the Auth tab. Create a Refresh Token​ Go to the LinkedIn Developers' OAuth Token Tools and click Create tokenYour app will need the r_organization_social and rw_organization_admin scopes:Click "Request access token" and save the token. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the LinkedIn Pages source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#properties","content":" Property\tTitle\tDescription\tType\tRequired/Default/organization_id\tOrganization ID\tYour unique organization's id, found in the url of your bussiness' Organization Page\tstring\tRequired /client_id\tClient ID\tYour Oauth app's client id.\tstring\tRequired /client_secret\tClient Secret\tYour Oauth app's client secret.\tstring\tRequired /refresh_token\tRefresh Token\tThe token value generated using the LinkedIn Developers OAuth Token Tools.\tstring\tRequired /access_token\tAccess Token\tThe token value generated using the LinkedIn Developers OAuth Token Tools.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Supported Streams​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#supported-streams","content":" Organization LookupFollower StatisticsShare StatisticsTotal Follower Count ","version":"Next","tagName":"h2"},{"title":"Mailchimp","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Mailchimp","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/#prerequisites","content":" There are two ways to authenticate with MailChimp when capturing data: using OAuth2, and manually, with an API key. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the API key method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Mailchimp in the Flow web app​","type":1,"pageTitle":"Mailchimp","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/#using-oauth2-to-authenticate-with-mailchimp-in-the-flow-web-app","content":" A Mailchimp account ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"Mailchimp","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/#configuring-the-connector-specification-manually","content":" A Mailchimp account A Mailchimp API key ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Mailchimp","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Mailchimp source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Mailchimp","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/#properties","content":" Endpoint​ The following properties reflect the API Key authentication method. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tAuthentication\tAuthentication Type and Details\tobject\tRequired /credentials/auth_type\tAuthentication Type\tAuthentication type. Set to apikey.\tstring\tRequired /credentials/apikey\tAPI Key\tYour Mailchimp API key\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tResource\tMailchimp lists, campaigns, or email_activity\tstring\tRequired /syncMode\tSync Mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Mailchimp","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mailchimp:dev config: credentials: auth_type: apikey apikey: <secret> bindings: - resource: stream: lists syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: campaigns syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: email_activity syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Marketo","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Marketo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/#supported-data-resources","content":" This connector can be used to sync the following tables from Marketo: activities_X where X is an activity type contains information about lead activities of the type X. For example, activities_send_email contains information about lead activities related to the activity type send_email. See the Marketo docs for a detailed explanation of what each column means.activity_types. Contains metadata about activity types. See the Marketo docs for a detailed explanation of columns.campaigns. Contains info about your Marketo campaigns. Marketo docs.leads. Contains info about your Marketo leads. Marketo docs.lists. Contains info about your Marketo static lists. Marketo docs.programs. Contains info about your Marketo programs. Marketo docs. By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Marketo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/#prerequisites","content":" (Optional) allowlist the Estuary IP addresses if neededAn API-only Marketo User RoleAn Estuary Marketo API-only userA Marketo API Custom ServiceMarketo Client ID & Client SecretMarketo Base URL ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Marketo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Marketo source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Marketo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/client_id\tClient ID\tThe Client ID of your Marketo developer application.\tstring\tRequired /client_secret\tClient Secret\tThe Client Secret of your Marketo developer application.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired /domain_url\tDomain URL\tYour Marketo Base URL.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Marketo project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Marketo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-marketo:dev config: client_id: <secret> client_secret: <secret> start_date: 2017-01-25T00:00:00Z domain_url: <your domain URL> bindings: - resource: stream: leads syncMode: full_refresh target: ${PREFIX}/leads {...} ","version":"Next","tagName":"h3"},{"title":"MixPanel","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"MixPanel","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/#supported-data-resources","content":" The following data resources are supported through the MixPanel APIs: ExportEngageFunnelsRevenueAnnotationsCohortsCohort Members By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"MixPanel","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/#prerequisites","content":" To set up the Mixpanel source connector, you'll need a Mixpanel Service Account and it's Project ID, the Project Timezone, and the Project region (US or EU). ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MixPanel","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MixPanel source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MixPanel","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/project_id\tProject ID\tYour project ID number. See the docs for more information on how to obtain this.\tinteger\tRequired /attribution_window\tAttribution Window\tA period of time for attributing results to ads and the lookback period after those actions occur during which ad results are counted. Default attribution window is 5 days.\tinteger\tDefault /project_timezone\tProject Timezone\tTime zone in which integer date times are stored. The project timezone may be found in the project settings in the Mixpanel console\tstring\tDefault /select_properties_by_default\tSelect Properties By Default\tboolean\tDefault /start_date\tStart Date\tThe date in the format YYYY-MM-DD. Any data before this date will not be replicated. If this option is not set, the connector will replicate data from up to one year ago by default.\tstring\tRequired /end_date\tEnd Date\tThe date in the format YYYY-MM-DD. Any data after this date will not be replicated. Left empty to always sync to most recent date.\tstring\tDefault /region\tRegion\tThe region of mixpanel domain instance either US or EU.\tstring\tDefault /date_window_size\tDate slicing window\tDefines window size in days, that used to slice through data. You can reduce it, if amount of data in each window is too big for your environment.\tinteger\tDefault Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your MixPanel project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MixPanel","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mixpanel:dev config: credentials: auth_type: ServiceAccount secret: {secret} username: {your_username} project_id: 1234567 attribution_window: 5 project_timezone: US/Pacific select_properties_by_default: true start_date: 2017-01-25T00:00:00Z end_date: 2019-01-25T00:00:00Z region: US date_window_size: 30 bindings: - resource: stream: annotations syncMode: full_refresh target: ${PREFIX}/annotations {...} ","version":"Next","tagName":"h3"},{"title":"MariaDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#prerequisites","content":" To use this connector, you'll need a MariaDB database setup with the following. binlog_formatsystem variable set to ROW.Binary log expiration period set to at least 30 days (2592000 seconds) if at all possible. This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures. MariaDB's default value is 0 (no expiration). A watermarks table. The watermarks table is a small "scratch space" to which the connector occasionally writes a small amount of data (a UUID, specifically) to ensure accuracy when backfilling preexisting table contents. The default name is "flow.watermarks", but this can be overridden in config.json. A database user with appropriate permissions: REPLICATION CLIENT and REPLICATION SLAVE privileges.Permission to insert, update, and delete on the watermarks table.Permission to read the tables being captured.Permission to read from information_schema tables, if automatic discovery is used. If the table(s) to be captured include columns of type DATETIME, the time_zone system variable must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default. Configuration Tip To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see configure connections with SSH tunneling. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#setup","content":" ","version":"Next","tagName":"h2"},{"title":"Self Hosted MariaDB​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#self-hosted-mariadb","content":" To meet these requirements, do the following: Create the watermarks table. This table can have any name and be in any database, so long as the capture's config.json file is modified accordingly. CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table. The SELECT permission can be restricted to just the tables that need to be captured, but automatic discovery requires information_schema access as well. CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Configure the binary log to retain data for 30 days, if previously set lower. SET PERSIST binlog_expire_logs_seconds = 2592000; Configure the database's time zone. See below for more information. SET PERSIST time_zone = '-05:00' ","version":"Next","tagName":"h3"},{"title":"Azure Database for MariaDB​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#azure-database-for-mariadb","content":" You can use this connector for MariaDB instances on Azure Database for MariaDB using the following setup instructions. Allow connections to the database from the Estuary Flow IP address. Create a new firewall rulethat grants access to the Estuary Flow IP addresses. info Alternatively, you can allow secure connections via SSH tunneling. To do so: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networksfor additional details and a sample. Set the binlog_expire_logs_seconds server perameterto 2592000. Using your preferred MariaDB client, create the watermarks table. tip Your username must be specified in the format username@servername. CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table. The SELECT permission can be restricted to just the tables that need to be captured, but automatic discovery requires information_schema access as well. CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Note the instance's host under Server name, and the port under Connection Strings (usually 3306). Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Setting the MariaDB time zone​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#setting-the-mariadb-time-zone","content":" MariaDB's time_zone server system variable is set to SYSTEM by default. Flow is not able to detect your time zone when it's set this way, so you must explicitly set the variable for your database. If you intend to capture tables including columns of the type DATETIME, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert the column to RFC3339 format. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. Specify a named timezone in IANA timezone format. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MariaDB docs. Capture Timezone Configuration If you are unable to set the time_zone in the database and need to capture tables with DATETIME columns, the capture can be configured to assume a time zone using the timezone configuration property (see below). The timezone configuration property can be set as a numerical offset or IANA timezone format. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#backfills-and-performance-considerations","content":" When the a MariaDB capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MariaDB source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /user\tLogin User\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tLogin Password\tPassword for the specified database user.\tstring\tRequired /timezone\tTimezone\tTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced/watermarks_table\tWatermarks Table Name\tThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"flow.watermarks" /advanced/dbname\tDatabase Name\tThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.\tstring\t"mysql" /advanced/node_id\tNode ID\tNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.\tinteger /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t131072 /advanced/skip_binlog_retention_check\tSkip Binlog Retention Sanity Check\tBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.\tboolean\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe database in which the table resides.\tstring\tRequired /stream\tStream\tName of the table to be captured from the database.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired info When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions. Tables in the MariaDB system databases information_schema, mysql, and performance_schema will not be discovered. You can add bindings for such tables manually. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mariadb:dev config: address: "127.0.0.1:3306" user: "flow_capture" password: "secret" bindings: - resource: namespace: ${TABLE_NAMESPACE} stream: ${TABLE_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Troubleshooting Capture Errors​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#troubleshooting-capture-errors","content":" The source-mariadb connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations: ","version":"Next","tagName":"h2"},{"title":"Unsupported Operations​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#unsupported-operations","content":" If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured. In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety). In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did. ","version":"Next","tagName":"h3"},{"title":"Data Manipulation Queries​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#data-manipulation-queries","content":" If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section. Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it. ","version":"Next","tagName":"h3"},{"title":"Unhandled Queries​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#unhandled-queries","content":" If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand. In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog. ","version":"Next","tagName":"h3"},{"title":"Metadata Errors​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#metadata-errors","content":" If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes. This should never happen, and most likely means that the binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety). ","version":"Next","tagName":"h3"},{"title":"Insufficient Binlog Retention​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#insufficient-binlog-retention","content":" If your capture fails with a "binlog retention period is too short" error, it is informing you that the MariaDB binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from. (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.) The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety. ","version":"Next","tagName":"h3"},{"title":"Amazon RDS for MariaDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#prerequisites","content":" To use this connector, you'll need a MariaDB database setup with the following. binlog_formatsystem variable set to ROW.Binary log expiration period set to at least 30 days (2592000 seconds) if at all possible. This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures. MariaDB's default value is 0 (no expiration). A watermarks table. The watermarks table is a small "scratch space" to which the connector occasionally writes a small amount of data (a UUID, specifically) to ensure accuracy when backfilling preexisting table contents. The default name is "flow.watermarks", but this can be overridden in config.json. A database user with appropriate permissions: REPLICATION CLIENT and REPLICATION SLAVE privileges.Permission to insert, update, and delete on the watermarks table.Permission to read the tables being captured.Permission to read from information_schema tables, if automatic discovery is used. If the table(s) to be captured include columns of type DATETIME, the time_zone system variable must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#setup","content":" Allow connections to the database from the Estuary Flow IP address. Modify the database, setting Public accessibility to Yes. Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database. Refer to the steps in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. info Alternatively, you can allow secure connections via SSH tunneling. To do so: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networksfor additional details and a sample. Create a RDS parameter group to enable replication in MariaDB. Create a parameter group. Create a unique name and description and set the following properties: Family: mariadb10.6Type: DB Parameter group Modify the new parameter group and update the following parameters: binlog_format: ROWbinlog_row_metadata: FULLread_only: 0 If using the primary instance (not recommended), associate the parameter groupwith the database and set Backup Retention Period to 7 days. Reboot the database to allow the changes to take effect. Create a read replica with the new parameter group applied (recommended). Create a read replicaof your MariaDB database. Modify the replicaand set the following: DB parameter group: choose the parameter group you created previouslyBackup retention period: 7 daysPublic access: Publicly accessible Reboot the replica to allow the changes to take effect. Switch to your MariaDB client. Run the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table: CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Run the following command to set the binary log retention to 7 days, the maximum value which RDS MariaDB permits: CALL mysql.rds_set_configuration('binlog retention hours', 168); In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#backfills-and-performance-considerations","content":" When the a MariaDB capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MariaDB source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /user\tLogin User\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tLogin Password\tPassword for the specified database user.\tstring\tRequired /timezone\tTimezone\tTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced/watermarks_table\tWatermarks Table Name\tThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"flow.watermarks" /advanced/dbname\tDatabase Name\tThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.\tstring\t"mysql" /advanced/node_id\tNode ID\tNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.\tinteger /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t131072 /advanced/skip_binlog_retention_check\tSkip Binlog Retention Sanity Check\tBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.\tboolean\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe database in which the table resides.\tstring\tRequired /stream\tStream\tName of the table to be captured from the database.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired info When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions. Tables in the MariaDB system databases information_schema, mysql, and performance_schema will not be discovered. You can add bindings for such tables manually. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mariadb:dev config: address: "127.0.0.1:3306" user: "flow_capture" password: "secret" bindings: - resource: namespace: ${TABLE_NAMESPACE} stream: ${TABLE_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Troubleshooting Capture Errors​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#troubleshooting-capture-errors","content":" The source-amazon-rds-mariadb connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations: ","version":"Next","tagName":"h2"},{"title":"Unsupported Operations​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#unsupported-operations","content":" If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured. In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety). In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did. ","version":"Next","tagName":"h3"},{"title":"Data Manipulation Queries​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#data-manipulation-queries","content":" If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section. Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it. ","version":"Next","tagName":"h3"},{"title":"Unhandled Queries​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#unhandled-queries","content":" If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand. In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog. ","version":"Next","tagName":"h3"},{"title":"Metadata Errors​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#metadata-errors","content":" If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes. This should never happen, and most likely means that the binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety). ","version":"Next","tagName":"h3"},{"title":"Insufficient Binlog Retention​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#insufficient-binlog-retention","content":" If your capture fails with a "binlog retention period is too short" error, it is informing you that the MariaDB binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from. (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.) The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety. ","version":"Next","tagName":"h3"},{"title":"MongoDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/","content":"","keywords":"","version":"Next"},{"title":"Data model​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#data-model","content":" MongoDB is a NoSQL database. Its data model consists ofdocuments (lightweight records that contain mappings of fields and values) organized incollections. MongoDB documents have a mandatory _id field that is used as the key of the collection. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#prerequisites","content":" You'll need: Credentials for connecting to your MongoDB instance and database Read access to your MongoDB database(s), see Role-Based Access Control for more information. Configuration Tip If you are using a user with access to all databases, then in your mongodb address, you must specify?authSource=admin parameter so that authentication is done through your admin database. ReplicaSet enabled on your database, see Deploy a Replica Set. If you are using MongoDB Atlas, or your MongoDB provider requires allowlisting of IPs, you need toallowlist the Estuary IP addresses. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the Flow specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MongoDB source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tHost and port of the database. Optionally can specify scheme for the URL such as mongodb+srv://host.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /database\tDatabase\tOptional comma-separated list of the databases to discover. If not provided will discover all available databases in the instance.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tDatabase name\tstring\tRequired /collection\tStream\tCollection name\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mongodb:dev config: address: "mongo:27017" password: "flow" user: "flow" bindings: - resource: collection: users database: test target: ${PREFIX}/users ","version":"Next","tagName":"h3"},{"title":"SSH Tunneling​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#ssh-tunneling","content":" As an alternative to connecting to your MongoDB instance directly, you can allow secure connections via SSH tunneling. To do so: Refer to the guide to configure an SSH server on the cloud platform of your choice. Configure your connector as described in the configuration section above, with the addition of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networks for additional details and a sample. ","version":"Next","tagName":"h2"},{"title":"Backfill and real-time updates​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#backfill-and-real-time-updates","content":" When performing the initial database snapshot, the connector continuously reads from change streams to capture change events while executing collection scans to backfill pre-existing documents. After the initial snapshot, the connector continues to read from the change streams indefinitely to capture all changes going forward. If the connector's process is paused for a while, it will attempt to resume capturing change events from where it left off, however the connector's ability to do this depends on the size of thereplica set oplog, and in certain circumstances, when the pause has been long enough for the oplog to have evicted old change events, the connector will need to re-do the backfill to ensure data consistency. In these cases it is necessary to resize your oplogor set a minimum retention periodfor your oplog to be able to reliably capture data. The recommended minimum retention period is at least 24 hours, but we recommend higher values to improve reliability. ","version":"Next","tagName":"h2"},{"title":"Change Event Pre- and Post-Images​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#change-event-pre--and-post-images","content":" Captured documents for change events from update operations will always include a full post-image, since the change stream is configured with the { fullDocument: 'updateLookup' }setting. Pre-images for update, replace, and delete operations will be captured if they are available. For these pre-images to be captured, the source MongoDB collection must have changeStreamPreAndPostImages enabled. See the official MongoDB documentationfor more information on how to enable this setting. ","version":"Next","tagName":"h2"},{"title":"MySQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/","content":"","keywords":"","version":"Next"},{"title":"Supported platforms​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#supported-platforms","content":" This connector supports MySQL on major cloud providers, as well as self-hosted instances. Setup instructions are provided for the following platforms: Self-hosted MySQLAmazon RDSAmazon AuroraGoogle Cloud SQLAzure Database for MySQL ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#prerequisites","content":" To use this connector, you'll need a MySQL database setup with the following. binlog_formatsystem variable set to ROW (the default value).Binary log expiration period set to MySQL's default value of 30 days (2592000 seconds) if at all possible. This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures. A watermarks table. The watermarks table is a small "scratch space" to which the connector occasionally writes a small amount of data (a UUID, specifically) to ensure accuracy when backfilling preexisting table contents. The default name is "flow.watermarks", but this can be overridden in config.json.The watermark table will only ever have one row per capture from that database and that row is updated once per 50k rows scanned in each table during the initial backfill for MySQL databases.As each table backfills, the previous watermark record will be replaced. After the initial backfill, watermark records are updated approximately once per minute. At no time does a watermark table have more than one record. A database user with appropriate permissions: REPLICATION CLIENT and REPLICATION SLAVE privileges.Permission to insert, update, and delete on the watermarks table.Permission to read the tables being captured.Permission to read from information_schema tables, if automatic discovery is used. If the table(s) to be captured include columns of type DATETIME, the time_zone system variable must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default. Configuration Tip To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see configure connections with SSH tunneling. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#setup","content":" To meet these requirements, follow the steps for your hosting type. Self-hosted MySQLAmazon RDSAmazon AuroraGoogle Cloud SQLAzure Database for MySQL ","version":"Next","tagName":"h2"},{"title":"Self-hosted MySQL​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#self-hosted-mysql","content":" Create the watermarks table. This table can have any name and be in any database, so long as the capture's config.json file is modified accordingly. CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table. The SELECT permission can be restricted to just the tables that need to be captured, but automatic discovery requires information_schema access as well. CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' COMMENT 'User account for Flow MySQL data capture'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Configure the binary log to retain data for the default MySQL setting of 30 days, if previously set lower. SET PERSIST binlog_expire_logs_seconds = 2592000; Configure the database's time zone. See below for more information. SET PERSIST time_zone = '-05:00' ","version":"Next","tagName":"h3"},{"title":"Amazon Aurora​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#amazon-aurora","content":" You must apply some of the settings to the entire Aurora DB cluster, and others to a database instance within the cluster. For each step, take note of which entity you're working with. Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the instance, choosing Publicly accessible in the Connectivity settings.Edit the VPC security group associated with your instance, or create a new VPC security group and associate it with the instance as described in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Create a RDS parameter group to enable replication on your Aurora DB cluster. Create a parameter group. Create a unique name and description and set the following properties: Family: aurora-mysql8.0Type: DB ClusterParameter group Modify the new parameter group and update the following parameters: binlog_format: ROWbinlog_row_metadata: FULLread_only: 0 Associate the parameter groupwith the DB cluster. While you're modifying the cluster, also set Backup Retention Period to 7 days. Reboot the cluster to allow the changes to take effect. Switch to your MySQL client. Run the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table: CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' COMMENT 'User account for Flow MySQL data capture'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Run the following command to set the binary log retention to 7 days, the maximum value Aurora permits: CALL mysql.rds_set_configuration('binlog retention hours', 168); In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Azure Database for MySQL​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#azure-database-for-mysql","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Create a new firewall rule that grants access to the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Set the binlog_expire_logs_seconds server perameterto 2592000. Using MySQL workbench or your preferred client, create the watermarks table. tip Your username must be specified in the format username@servername. CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table. The SELECT permission can be restricted to just the tables that need to be captured, but automatic discovery requires information_schema access as well. CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' COMMENT 'User account for Flow MySQL data capture'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Note the instance's host under Server name, and the port under Connection Strings (usually 3306). Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Setting the MySQL time zone​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#setting-the-mysql-time-zone","content":" MySQL's time_zone server system variable is set to SYSTEM by default. If you intend to capture tables including columns of the type DATETIME, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert the column to RFC3339 format. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted Specify a named timezone in IANA timezone format. If you're using Amazon Aurora, create or modify the DB cluster parameter groupassociated with your MySQL database.Set the time_zone parameter to the correct value. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs. Capture Timezone Configuration If you are unable to set the time_zone in the database and need to capture tables with DATETIME columns, the capture can be configured to assume a time zone using the timezone configuration property (see below). The timezone configuration property can be set as a numerical offset or IANA timezone format. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#backfills-and-performance-considerations","content":" When the a MySQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MySQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /user\tLogin User\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tLogin Password\tPassword for the specified database user.\tstring\tRequired /timezone\tTimezone\tTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced/watermarks_table\tWatermarks Table Name\tThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"flow.watermarks" /advanced/dbname\tDatabase Name\tThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.\tstring\t"mysql" /advanced/node_id\tNode ID\tNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.\tinteger /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t131072 /advanced/skip_binlog_retention_check\tSkip Binlog Retention Sanity Check\tBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.\tboolean\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe database/schema in which the table resides.\tstring\tRequired /stream\tStream\tName of the table to be captured from the database.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired info When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions. Tables in the MySQL system schemas information_schema, mysql, performance_schema, and sys will not be discovered. You can add bindings for such tables manually. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mysql:dev config: address: "127.0.0.1:3306" user: "flow_capture" password: "secret" bindings: - resource: namespace: ${TABLE_NAMESPACE} stream: ${TABLE_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Troubleshooting Capture Errors​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#troubleshooting-capture-errors","content":" The source-mysql connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations: ","version":"Next","tagName":"h2"},{"title":"Unsupported Operations​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#unsupported-operations","content":" If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured. In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety). In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did. ","version":"Next","tagName":"h3"},{"title":"Data Manipulation Queries​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#data-manipulation-queries","content":" If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the MySQL binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section. Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it. ","version":"Next","tagName":"h3"},{"title":"Unhandled Queries​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#unhandled-queries","content":" If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand. In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog. ","version":"Next","tagName":"h3"},{"title":"Metadata Errors​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#metadata-errors","content":" If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes. This should never happen, and most likely means that the MySQL binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety). ","version":"Next","tagName":"h3"},{"title":"Insufficient Binlog Retention​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#insufficient-binlog-retention","content":" If your capture fails with a "binlog retention period is too short" error, it is informing you that the MySQL binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from. (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.) The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety. ","version":"Next","tagName":"h3"},{"title":"Empty Collection Key​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#empty-collection-key","content":" Every Flow collection must declare a key which is used to group its documents. When testing your capture, if you encounter an error indicating collection key cannot be empty, you will need to either add a key to the table in your source, or manually edit the generated specification and specify keys for the collection before publishing to the catalog as documented here. ","version":"Next","tagName":"h3"},{"title":"Google Cloud SQL for MySQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#prerequisites","content":" To use this connector, you'll need a MySQL database setup with the following. binlog_formatsystem variable set to ROW (the default value).Binary log expiration period set to MySQL's default value of 30 days (2592000 seconds) if at all possible. This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures. A watermarks table. The watermarks table is a small "scratch space" to which the connector occasionally writes a small amount of data (a UUID, specifically) to ensure accuracy when backfilling preexisting table contents. The default name is "flow.watermarks", but this can be overridden in config.json. A database user with appropriate permissions: REPLICATION CLIENT and REPLICATION SLAVE privileges.Permission to insert, update, and delete on the watermarks table.Permission to read the tables being captured.Permission to read from information_schema tables, if automatic discovery is used. If the table(s) to be captured include columns of type DATETIME, the time_zone system variable must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#setup","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Enable public IP on your database and add Estuary Flow IP addresses as authorized IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Set the instance's binlog_expire_logs_seconds flagto 2592000. Using Google Cloud Shell or your preferred client, create the watermarks table. CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table. The SELECT permission can be restricted to just the tables that need to be captured, but automatic discovery requires information_schema access as well. CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' COMMENT 'User account for Flow MySQL data capture'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 3306. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Setting the MySQL time zone​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#setting-the-mysql-time-zone","content":" MySQL's time_zone server system variable is set to SYSTEM by default. If you intend to capture tables including columns of the type DATETIME, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert the column to RFC3339 format. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted Specify a named timezone in IANA timezone format. If you're using Amazon Aurora, create or modify the DB cluster parameter groupassociated with your MySQL database.Set the time_zone parameter to the correct value. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs. Capture Timezone Configuration If you are unable to set the time_zone in the database and need to capture tables with DATETIME columns, the capture can be configured to assume a time zone using the timezone configuration property (see below). The timezone configuration property can be set as a numerical offset or IANA timezone format. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#backfills-and-performance-considerations","content":" When the a MySQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MySQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /user\tLogin User\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tLogin Password\tPassword for the specified database user.\tstring\tRequired /timezone\tTimezone\tTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced/watermarks_table\tWatermarks Table Name\tThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"flow.watermarks" /advanced/dbname\tDatabase Name\tThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.\tstring\t"mysql" /advanced/node_id\tNode ID\tNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.\tinteger /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t131072 /advanced/skip_binlog_retention_check\tSkip Binlog Retention Sanity Check\tBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.\tboolean\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe database/schema in which the table resides.\tstring\tRequired /stream\tStream\tName of the table to be captured from the database.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired info When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions. Tables in the MySQL system schemas information_schema, mysql, performance_schema, and sys will not be discovered. You can add bindings for such tables manually. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mysql:dev config: address: "127.0.0.1:3306" user: "flow_capture" password: "secret" bindings: - resource: namespace: ${TABLE_NAMESPACE} stream: ${TABLE_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Troubleshooting Capture Errors​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#troubleshooting-capture-errors","content":" The source-mysql connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations: ","version":"Next","tagName":"h2"},{"title":"Unsupported Operations​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#unsupported-operations","content":" If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured. In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety). In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did. ","version":"Next","tagName":"h3"},{"title":"Data Manipulation Queries​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#data-manipulation-queries","content":" If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the MySQL binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section. Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it. ","version":"Next","tagName":"h3"},{"title":"Unhandled Queries​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#unhandled-queries","content":" If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand. In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog. ","version":"Next","tagName":"h3"},{"title":"Metadata Errors​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#metadata-errors","content":" If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes. This should never happen, and most likely means that the MySQL binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety). ","version":"Next","tagName":"h3"},{"title":"Insufficient Binlog Retention​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#insufficient-binlog-retention","content":" If your capture fails with a "binlog retention period is too short" error, it is informing you that the MySQL binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from. (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.) The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety. ","version":"Next","tagName":"h3"},{"title":"Empty Collection Key​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#empty-collection-key","content":" Every Flow collection must declare a key which is used to group its documents. When testing your capture, if you encounter an error indicating collection key cannot be empty, you will need to either add a key to the table in your source, or manually edit the generated specification and specify keys for the collection before publishing to the catalog as documented here. ","version":"Next","tagName":"h3"},{"title":"MySQL Batch Query Connector","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch/","content":"MySQL Batch Query Connector This connector captures data from MySQL into Flow collections by periodically executing queries and translating the results into JSON documents. We recommend using our MySQL CDC Connectorinstead where possible. Using CDC provides lower latency data capture, delete and update events, and usually has a smaller impact on the source database. However there are some circumstances where this might not be feasible. Perhaps you need to capture from a managed MySQL instance which doesn't support logical replication. Or perhaps you need to capture the contents of a view or the result of an ad-hoc query. That's the sort of situation this connector is intended for. The number one caveat you need to be aware of when using this connector is that it will periodically execute its update query over and over. The default polling interval is set to 24 hours to minimize the impact of this behavior, but even then it could mean a lot of duplicated data being processed depending on the size of your tables. If the dataset has a natural cursor which could be used to identify only new or updated rows, this should be specified by editing the Cursor property of the binding. Common examples of suitable cursors include: Update timestamps, which are usually the best choice if available since they can be used to identify all changed rows, not just updates.Creation timestamps, which can be used to identify newly added rows in append-only datasets but can't be used to identify updates.Serially increasing IDs can also be used to identify newly added rows.","keywords":"","version":"Next"},{"title":"Amazon RDS for MySQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#prerequisites","content":" To use this connector, you'll need a MySQL database setup with the following. binlog_formatsystem variable set to ROW (the default value).Binary log expiration period set to MySQL's default value of 30 days (2592000 seconds) if at all possible. This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures. A watermarks table. The watermarks table is a small "scratch space" to which the connector occasionally writes a small amount of data (a UUID, specifically) to ensure accuracy when backfilling preexisting table contents. The default name is "flow.watermarks", but this can be overridden in config.json. A database user with appropriate permissions: REPLICATION CLIENT and REPLICATION SLAVE privileges.Permission to insert, update, and delete on the watermarks table.Permission to read the tables being captured.Permission to read from information_schema tables, if automatic discovery is used. If the table(s) to be captured include columns of type DATETIME, the time_zone system variable must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#setup","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the database, setting Public accessibility to Yes.Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database as described in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Create a RDS parameter group to enable replication in MySQL. Create a parameter group. Create a unique name and description and set the following properties: Family: mysql8.0Type: DB Parameter group Modify the new parameter group and update the following parameters: binlog_format: ROWbinlog_row_metadata: FULLread_only: 0 If using the primary instance (not recommended), associate the parameter groupwith the database and set Backup Retention Period to 7 days. Reboot the database to allow the changes to take effect. Create a read replica with the new parameter group applied (recommended). Create a read replicaof your MySQL database. Modify the replicaand set the following: DB parameter group: choose the parameter group you created previouslyBackup retention period: 7 daysPublic access: Publicly accessible Reboot the replica to allow the changes to take effect. Switch to your MySQL client. Run the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table: CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' COMMENT 'User account for Flow MySQL data capture'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Run the following command to set the binary log retention to 7 days, the maximum value which RDS MySQL permits: CALL mysql.rds_set_configuration('binlog retention hours', 168); In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Setting the MySQL time zone​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#setting-the-mysql-time-zone","content":" MySQL's time_zone server system variable is set to SYSTEM by default. If you intend to capture tables including columns of the type DATETIME, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert the column to RFC3339 format. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted Specify a named timezone in IANA timezone format. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs. Capture Timezone Configuration If you are unable to set the time_zone in the database and need to capture tables with DATETIME columns, the capture can be configured to assume a time zone using the timezone configuration property (see below). The timezone configuration property can be set as a numerical offset or IANA timezone format. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#backfills-and-performance-considerations","content":" When the a MySQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MySQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /user\tLogin User\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tLogin Password\tPassword for the specified database user.\tstring\tRequired /timezone\tTimezone\tTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced/watermarks_table\tWatermarks Table Name\tThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"flow.watermarks" /advanced/dbname\tDatabase Name\tThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.\tstring\t"mysql" /advanced/node_id\tNode ID\tNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.\tinteger /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t131072 /advanced/skip_binlog_retention_check\tSkip Binlog Retention Sanity Check\tBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.\tboolean\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe database/schema in which the table resides.\tstring\tRequired /stream\tStream\tName of the table to be captured from the database.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired info When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions. Tables in the MySQL system schemas information_schema, mysql, performance_schema, and sys will not be discovered. You can add bindings for such tables manually. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mysql:dev config: address: "127.0.0.1:3306" user: "flow_capture" password: "secret" bindings: - resource: namespace: ${TABLE_NAMESPACE} stream: ${TABLE_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Troubleshooting Capture Errors​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#troubleshooting-capture-errors","content":" The source-mysql connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations: ","version":"Next","tagName":"h2"},{"title":"Unsupported Operations​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#unsupported-operations","content":" If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured. In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety). In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did. ","version":"Next","tagName":"h3"},{"title":"Data Manipulation Queries​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#data-manipulation-queries","content":" If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the MySQL binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section. Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it. ","version":"Next","tagName":"h3"},{"title":"Unhandled Queries​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#unhandled-queries","content":" If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand. In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog. ","version":"Next","tagName":"h3"},{"title":"Metadata Errors​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#metadata-errors","content":" If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes. This should never happen, and most likely means that the MySQL binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety). ","version":"Next","tagName":"h3"},{"title":"Insufficient Binlog Retention​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#insufficient-binlog-retention","content":" If your capture fails with a "binlog retention period is too short" error, it is informing you that the MySQL binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from. (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.) The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety. ","version":"Next","tagName":"h3"},{"title":"Empty Collection Key​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#empty-collection-key","content":" Every Flow collection must declare a key which is used to group its documents. When testing your capture, if you encounter an error indicating collection key cannot be empty, you will need to either add a key to the table in your source, or manually edit the generated specification and specify keys for the collection before publishing to the catalog as documented here. ","version":"Next","tagName":"h3"},{"title":"NetSuite SuiteAnalytics Connect","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"NetSuite SuiteAnalytics Connect","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/#supported-data-resources","content":" Flow discovers all of the tables to which you grant access during setup, including Transactions, Reports, Lists, and Setup. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"NetSuite SuiteAnalytics Connect","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/#prerequisites","content":" Oracle NetSuite accountAllowed access to all Account permissions optionsA new integration with token-based authenticationA custom role with access to objects you want to capture. See setup.A new user assigned to the custom roleAccess token generated for the custom role ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"NetSuite SuiteAnalytics Connect","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/#setup","content":" Create a NetSuite account Create an account on the Oracle NetSuite portal. Confirm your email address. Set up your NetSuite account Find your Realm, or Account ID. You'll use this to connect with Flow. In your NetSuite portal, go to Setup > Company > Company Information. Copy your Account ID. If you have a production account, it will look like 2345678. If you're using a sandbox, it'll look like 2345678_SB2. Create a NetSuite integration to obtain a Consumer Key and Consumer Secret. Navigate to Setup > Integration > Manage Integrations > New. Give the integration a name, for example, estuary-rest-integration. Make sure the State option is enabled. In the Authentication section, check the Token-Based Authentication checkbox. Save your changes. Your Consumer Key and Consumer Secret will be shown once. Copy them to a safe place. Set up a role for use with Flow. Go to Setup > Users/Roles > Manage Roles > New. Give the role a name, for example, estuary-integration-role. Scroll to the Permissions section. (IMPORTANT) Click Transactions and add all the dropdown entities with either full or view access level. (IMPORTANT) Click Reports and add all the dropdown entities with either full or view access level. (IMPORTANT) Click Lists and add all the dropdown entities with either full or view access level. (IMPORTANT) Click Setup an add all the dropdown entities with either full or view access level. To allow your custom role to reflect future changes, be sure to edit these parameters again when you rename or customize any NetSuite object. Set up user for use with Flow. Go to Setup > Users/Roles > Manage Users. Find the user you want to give access to use with Flow. In the Name column, click the user's name. Then, click the Edit button. Find the Access tab. From the dropdown list, select role you created previously; for example, estuary-integration-role. Save your changes. Generate an access token. Go to Setup > Users/Roles > Access Tokens > New. Select an Application Name. Under User, select the user you assigned the role previously. Under Role, select the role you assigned to the user previously. Under Token Name, give a descriptive name to the token you are creating, for example estuary-rest-integration-token. Save your changes. Your Token ID and Token Secret will be shown once. Copy them to a safe place. You now have a properly configured account with the correct permissions and all the information you need to connect with Flow: Realm (Account ID)Consumer KeyConsumer SecretToken IDToken Secret info You can also authenticate with a username and password, but a consumer/token is recommended for security. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"NetSuite SuiteAnalytics Connect","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the NetSuite source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"NetSuite SuiteAnalytics Connect","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default`/account\tNetsuite Account ID\tNetsuite realm/Account ID e.g. 2344535, as for production or 2344535_SB1, as for the sandbox\tstring\tRequired /role_id\tRole ID\tThe ID of the role you created. Defaults to 3, which is the ID of the administrator role.\tint\t3 /suiteanalytics_data_source\tData Source\tWhich NetSuite data source to use. Options are NetSuite.com, or NetSuite2.com\tstring\tRequired /authentication\tAuthentication Details\tCredentials to access your NetSuite account\tobject\tRequired Token/Consumer Authentication​ Property\tTitle\tDescription\tType\tRequired/Default/authentication/consumer_key\tConsumer Key\tConsumer key associated with your integration.\tstring\tRequired /authentication/consumer_secret\tConsumer Secret\tConsumer secret associated with your integration.\tstring\tRequired /authentication/token_key\tToken Key\tAccess token key\tstring\tRequired /authentication/token_secret\tToken Secret\tAccess token secret\tstring\tRequired Username/Password Authentication​ Property\tTitle\tDescription\tType\tRequired/Default/authentication/username\tUsername\tYour NetSuite account's email/username\tstring\tRequired /authentication/password\tPassword\tYour NetSuite account's password.\tstring\tRequired Advanced Config options​ Property\tTitle\tDescription\tType\tRequired/Default/advanced/connection_limit\tConnection Limit\tThe maximum number of concurrent data streams to attempt at once.\tint\t10 Connections /advanced/task_limit\tTask Limit\tThe maximum number of concurrent tasks to run at once. A task is either a backfill or incremental load. Backfills can load multiple chunks in parallel, so this must be strictly <= /advanced/connection_limit\tint\t5 Tasks /advanced/start_date\tStart Date\tThe date that we should attempt to start backfilling from. If not provided, backfill from the beginning.\tdate\tNot Required Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tName\tThe name of the table this binding refers to\tstring\tRequired /interval\tInterval\tHow frequently to check for incremental changes\tISO8601 Duration\tPT1H (1 Hour) /log_cursor\tLog Cursor\tA date-time column to use for incremental capture of modifications.\tString\tRequired (Automatically Discovered) /page_cursor\tPage Cursor\tAn indexed, non-NULL integer column to use for ordered table backfills. Does not need to be unique, but should have high cardinality.\tString\tRequired (Automatically Discovered) /concurrency\tConcurrency\tMaximum number of concurrent connections to use for backfilling.\tint\t1 Connection /query_limit\tQuery Limit\tMaximum number of rows to fetch in a query. Will be divided between all connections if /concurrency > 1\tint\t100,000 Rows /query_timeout\tQuery Timeout\tTimeout for queries. Typically left as the default as some tables just take a very long time to respond.\tISO8601 Duration\tPT10M (10 Minutes) /associations\tAssociations\tList of associated tables for which related data should be loaded.\tArray[TableAssociation]\t[] /associations/[n]/child_table_name\tForeign Table Name\tThe name of the "foreign" table that should be associated with the "parent" binding containing this association\tString\tRequired /associations/[n]/parent_join_column_name\tParent Join Column\tThe name of the column on the "parent" table to be used as the join key\tString\tRequired /associations/[n]/child_join_column_name\tForeign Join Column\tThe name of the column on the "foreign" table to be used as the join key\tString\tRequired /associations/[n]/load_during_backfill\tLoad During Backfill\tWhether or not to load associated documents during backfill\tBoolean\tFalse /associations/[n]/load_during_incremental\tLoad During Incremental\tWhether or not to load associated documents during incremental loads\tBoolean\tTrue ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"NetSuite SuiteAnalytics Connect","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-netsuite-v2:v3 config: account: "12345678" authentication: auth_type: token consumer_key: xxx consumer_secret_sops: xxx token_id: xxx token_secret_sops: xxx connection_type: suiteanalytics role_id: 3 suiteanalytics_data_source: NetSuite2.com advanced: connection_limit: 20 cursor_fields: [] enable_auto_cursor: false resource_tracing: false start_date: null task_limit: 10 bindings: - resource: associations: - child_join_column_name: transaction child_table_name: TransactionAccountingLine parent_join_column_name: id load_during_backfill: false load_during_incremental: true interval: PT5M name: transaction page_cursor: id query_limit: 100000 concurrency: 1 query_timeout: PT10M log_cursor: lastmodifieddate target: ${PREFIX}/${CAPTURE_NAME}/transaction {...} ","version":"Next","tagName":"h3"},{"title":"NetSuite SuiteTalk REST","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/","content":"","keywords":"","version":"Next"},{"title":"SuiteAnalytics vs SuiteQL via REST API​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#suiteanalytics-vs-suiteql-via-rest-api","content":" These two different connection modes have some key differences: ","version":"Next","tagName":"h2"},{"title":"SuiteAnalytics Connect​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#suiteanalytics-connect","content":" Requires the SuiteAnalytics Connect feature to be purchased on your NetSuite accountCan inspect which tables (standard & custom) exist in your accountCan inspect the exact data types specified on these table columnsThis means you can connect to any table in your account and all fields (booleans, date, and datetimes) are properly formatted in Estuary ","version":"Next","tagName":"h3"},{"title":"SuiteQL via REST API​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#suiteql-via-rest-api","content":" Custom tables are not supported without manual workSome standard tables may not yet be supported and will require additional work from the Estuary teamDatetime values are represented as dates without the time specification (this is a limitation of the REST API)Data types on custom columns may not be properly representedYou are repsonsible for determining the right set of permissions to grant the connector, which can often be complicated and unintuitive ","version":"Next","tagName":"h3"},{"title":"Prerequisites​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#prerequisites","content":" Oracle NetSuite accountAllowed access to all Account permissions optionsA new integration with token-based authenticationA custom role with access to objects you want to capture or a purchased SuiteAnalytics Module. See setup.A new user assigned to the custom roleAccess token generated for the custom role ","version":"Next","tagName":"h2"},{"title":"General Setup​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#general-setup","content":" Set up required features on your NetSuite account Find your Account ID (also know as the "Realm"). You'll use this to connect with Flow. In your NetSuite portal, go to Setup > Company > Company Information. Copy your Account ID. If you have a production account, it will look like 2345678. If you're using a sandbox, it'll look like 2345678_SB2. Enable the required features. Navigate to Setup > Company > Enable Features. Click the SuiteCloud tab. In the Manage Authentication section, check the checkbox labeled TOKEN-BASED AUTHENTICATION. If you are using the SuiteQL connection, in the SuiteTalk (Web Services) section, check the checkbox labeled REST WEB SERVICES. Save your changes. If you are using SuiteAnalytics Connect, navigate to Setup > Company > Analytics > Connectivity and check the checkbox labeled SuiteAnalytics Connect. Save your changes. Create a NetSuite integration to obtain a Consumer Key and Consumer Secret. Navigate to Setup > Integration > Manage Integrations > New. Give the integration a name, for example, estuary-netsuite-integration. Make sure the State option is enabled. In the Authentication section, check the Token-Based Authentication checkbox. Save your changes. Your Consumer Key and Consumer Secret will be shown once. Copy them to a safe place. They will never show up again and will be key to the integration working properly. If you are using the SuiteQL over REST API connection, Set up a role for use with Flow. Go to Setup > Users/Roles > Manage Roles > New. Give the role a name, for example, estuary-integration-role. The easiest thing to do here is to click "Core Administrative Permissions". If you want to scope down the permissions given to the connector (which you should) you'll have to determine which permissions are necessary. This can get tricky because many different settings can expand the required permissions (for instance, a custom script on a record could require additional permissions). Scroll to the Permissions section. (IMPORTANT) Click Transactions and add all the dropdown entities with either full or view access level. Find Transaction (IMPORTANT) Click Setup an add the following entities with either full or view access level. Log in using Access TokensREST Web ServicesUser Access Tokens To allow your custom role to reflect future changes, be sure to edit these parameters again when you rename or customize any NetSuite object. If you are using SuiteAnalytics Connect you don't need a custom role. Instead, you can use the bundled "Data Warehouse Integrator" Set up user for use with the connector. Go to Setup > Users/Roles > Manage Users. Find the user you want to give access to use with Flow. In the Name column, click the user's name. Then, click the Edit button. Find the Access tab. From the dropdown list, select either role you created previously (e.g. estuary-integration-role) or the Data Warehouse Integrator role if you are using SuiteAnalytics Connect. Save your changes. Generate an access token. Go to Setup > Users/Roles > Access Tokens > New. Select the Application Name you created earlier. Under User, select the user you assigned the role previously. Under Role, select the role you assigned to the user previously. Under Token Name, give a descriptive name to the token you are creating, for example estuary-rest-integration-token. Save your changes. Your Token ID and Token Secret will be shown once. Copy them to a safe place. You now have a properly configured account with the correct permissions and all the information you need to connect with Flow: Account ID (Realm)Consumer KeyConsumer SecretToken IDToken Secret ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the NetSuite source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/account_id\tRealm\tNetsuite realm e.g. 2344535, as for production or 2344535_SB1, as for the sandbox\tstring\tRequired /start_date\tToken Secret\tThe date to start collecting data from\tdate\tRequired /consumer_key\tConsumer Key\tConsumer key associated with your integration.\tstring\tRequired /consumer_secret\tConsumer Secret\tConsumer secret associated with your integration.\tstring\tRequired /token_key\tToken Key\tAccess token key\tstring\tRequired /token_secret\tToken Secret\tAccess token secret\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your NetSuite project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-netsuite:dev config: account_id: <your account id> consumer_key: <key> consumer_secret: <secret> token_key: <key> token_secret: <secret> start_date: "2023-11-01T00:00:00Z" bindings: - resource: stream: Transaction target: ${PREFIX}/Transaction {...} ","version":"Next","tagName":"h3"},{"title":"Notion","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#supported-data-resources","content":" The following data resources are supported: BlocksCommentsDatabasesPagesUsers By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#prerequisites","content":" To use this connector, you'll need a Notion account with an integration created to connect with Flow. Before you create your integration, choose how you'll authenticate with Notion. There are two ways: using OAuth to sign in directly in the web app, or manually, using an access token. OAuth is recommended in the web app; only manual configuration is supported when using the CLI. ","version":"Next","tagName":"h2"},{"title":"Setup for OAuth authentication​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#setup-for-oauth-authentication","content":" Go to your integrations page and create a new integration. On the new integration's Secrets page, change the integration type to Public. Fill in the required fields. Redirect URIs: http://dashboard.estuary.devWebsite homepage: http://dashboard.estuary.devPrivacy policy: https://www.estuary.dev/privacy-policy/Terms of use: https://www.estuary.dev/terms/ ","version":"Next","tagName":"h3"},{"title":"Setup for manual authentication​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#setup-for-manual-authentication","content":" Go to your integrations page and create a new internal integration. Notion integrations are internal by default. During setup, change User Capabilitiesfrom No user information (the default) to Read user information without email address. Copy the generated token for use in the connector configuration. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Notion source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tAuthenticate using\tPick an authentication method.\tobject\tRequired /credentials/auth_type\tAuthentication type\tSet to token for manual authentication\tstring\tRequired /credentials/token\tAccess Token\tNotion API access token\tstring /start_date\tStart Date\tUTC date and time in the format YYYY-MM-DDTHH:MM:SS.000Z. Any data generated before this date will not be replicated. If left blank, the start date will be set to 2 years before the present date.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tNotion resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tSync this resource incrementally, or fully refresh it every run\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-notion:dev config: credentials: auth_type: token token: {secret} start_date: 2021-01-25T00:00:00Z bindings: - resource: stream: blocks syncMode: incremental target: ${PREFIX}/blocks {...} ","version":"Next","tagName":"h3"},{"title":"OracleDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#prerequisites","content":" Oracle 11g or aboveAllow connections from Estuary Flow to your Oracle database (if they exist in separate VPCs)Create a dedicated read-only Estuary Flow user with access to all tables needed for replication ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#setup","content":" Follow the steps below to set up the OracleDB connector. ","version":"Next","tagName":"h2"},{"title":"Create a Dedicated User​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#create-a-dedicated-user","content":" Creating a dedicated database user with read-only access is recommended for better permission control and auditing. To create the user, run the following commands against your database: CREATE USER estuary_flow_user IDENTIFIED BY <your_password_here>; GRANT CREATE SESSION TO estuary_flow_user; Next, grant the user read-only access to the relevant tables. The simplest way is to grant read access to all tables in the schema as follows: GRANT SELECT ANY TABLE TO estuary_flow_user; Alternatively, you can be more granular and grant access to specific tables in different schemas: GRANT SELECT ON "<schema_a>"."<table_1>" TO estuary_flow_user; GRANT SELECT ON "<schema_b>"."<table_2>" TO estuary_flow_user; Create a watermarks table: CREATE TABLE estuary_flow_user.FLOW_WATERMARKS(SLOT varchar(1000) PRIMARY KEY, WATERMARK varchar(4000)); Finally you need to grant the user access to use logminer, read metadata from the database and write to the watermarks table: GRANT SELECT_CATALOG_ROLE TO estuary_flow_user; GRANT EXECUTE_CATALOG_ROLE TO estuary_flow_user; GRANT SELECT ON V$DATABASE TO estuary_flow_user; GRANT SELECT ANY TABLE TO estuary_flow_user; GRANT SELECT ON V$LOG TO estuary_flow_user; GRANT LOGMINING TO estuary_flow_user; GRANT INSERT, UPDATE ON estuary_flow_user.FLOW_WATERMARKS TO estuary_flow_user; Enable supplemental logging: For normal instances use: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; For Amazon RDS instances use: BEGIN rdsadmin.rdsadmin_util.alter_supplemental_logging(p_action => 'ADD', p_type => 'ALL'); end; Your database user should now be ready for use with Estuary Flow. ","version":"Next","tagName":"h3"},{"title":"Include Schemas for Discovery​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#include-schemas-for-discovery","content":" In your Oracle configuration, you can specify the schemas that Flow should look at when discovering tables. The schema names are case-sensitive. If the user does not have access to a certain schema, no tables from that schema will be discovered. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the OracleDB source connector. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /user\tUsername\tThe database user to authenticate as.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /database\tDatabase\tLogical database name to capture from. Defaults to ORCL.\tstring\tRequired /historyMode\tHistory Mode\tCapture change events without reducing them to a final state.\tboolean\tfalse /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.table' form.\tstring\t&lt;USER&gt;.FLOW_WATERMARKS /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t50000 /advanced/incremental_chunk_size\tIncremental Chunk Size\tThe number of rows which should be fetched from the database in a single incremental query.\tinteger\t10000 /advanced/incremental_scn_range\tIncremental SCN Range\tThe SCN range captured at every iteration.\tinteger\t50000 /advanced/dictionary_mode\tDictionary Mode\tHow should dictionaries be used in Logminer: one of online or extract. When using online mode schema changes to the table may break the capture but resource usage is limited. When using extract mode schema changes are handled gracefully but more resources of your database (including disk) are used by the process. Defaults to extract.\tstring\textract /advanced/discover_schemas\tDiscover Schemas\tIf this is specified only tables in the selected schema(s) will be automatically discovered. Omit all entries to discover tables from all schemas.\tstring /advanced/node_id\tNode ID\tNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe owner/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-oracle:dev config: address: database-1.ukqdmzdqvvsz.us-east-2.rds.amazonaws.com:1521 user: "flow_capture" password: secret database: ORCL historyMode: false advanced: incremental_scn_range: 50000 dictionary_mode: extract networkTunnel: sshForwarding: privateKey: -----BEGIN RSA PRIVATE KEY-----\\n... sshEndpoint: ssh://ec2-user@19.220.21.33:22 bindings: - resource: namespace: ${TABLE_NAMESPACE} stream: ${TABLE_NAME} target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Dictionary Modes​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#dictionary-modes","content":" Oracle writes redo log files using triplet object ID, data object ID and object versions to identify different objects in the database, rather than their name. This applies to table names as well as column names. When reading data from the redo log files using Logminer, a "dictionary" is used to translate the object identification data into user-facing names of those objects. When interacting with the database directly an online dictionary, which is essentially the latest dictionary that knows how to translate currently existing table and column names is used by the database and by Logminer, however when capturing historical data, it is possible that the names of these objects or even their identifiers have changed (due to an ALTER TABLE statement for example). In these instances the online dictionary will be insufficient for translating the object identifiers into names and Logminer will complain about a dictionary mismatch. To resolve this issue, it is possible to extract a dictionary into the redo log files themselves, so that when there are schema changes, Logminer can automatically handle using the appropriate dictionary for the time period an event is from. This operation however uses CPU and RAM, as well as consuming disk over time. Using Estuary's Oracle connector you get to choose which mode to operate it: To extract the dictionary into the redo log files, the extract mode can be used (this is the default mode). Be aware that this mode leads to more resource usage (CPU, RAM and disk).To always use the online dictionary, the online mode can be used. This mode is more efficient, but it cannot handle schema changes in tables, so only use this mode with caution and when table schemas are known not to change. ","version":"Next","tagName":"h3"},{"title":"Incremental SCN Range and Events Rate​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#incremental-scn-range-and-events-rate","content":" At every iteration, the connector fetches changes in a specific SCN (System Change Number) range, this is roughly equivalent to a specific time range. Depending on how many events happen on the captured tables in a database (by default, a 50,000 range is captured in each iteration), the advanced.incremental_scn_range option can be updated to fit your needs: If the database processes a large amount of events per unit of time, the connector and/or the database may experience resource shortages while trying to process the data. For example you may see the error PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT which indicates that the memory usage of the database instance has hit a limit. This can happen if too many events are being processed in one iteration. In these cases we recommend lowering the SCN range until the database and the connector are able to handle the load.If the database does not have many events per time unit, a higher value can help with faster processing, although this is usually not necessary. ","version":"Next","tagName":"h3"},{"title":"Troubleshooting​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#troubleshooting","content":" If you see the following error when trying to connect: ORA-01950: no privileges on tablespace 'USERS' The SQL command below may resolve the issue: ALTER USER estuary_flow_user QUOTA UNLIMITED ON USERS; ","version":"Next","tagName":"h2"},{"title":"Known Limitations​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#known-limitations","content":" Table and column names longer than 30 characters are not supported by Logminer, and thus they are also not supported by this connector. ","version":"Next","tagName":"h2"},{"title":"OracleDB (Flashback)","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#prerequisites","content":" Oracle 11g or aboveAllow connections from Estuary Flow to your Oracle database (if they exist in separate VPCs)Create a dedicated read-only Estuary Flow user with access to all tables needed for replication ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#setup","content":" Follow the steps below to set up the OracleDB connector. ","version":"Next","tagName":"h2"},{"title":"Create a Dedicated User​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#create-a-dedicated-user","content":" Creating a dedicated database user with read-only access is recommended for better permission control and auditing. To create the user, run the following commands against your database: CREATE USER estuary_flow_user IDENTIFIED BY <your_password_here>; GRANT CREATE SESSION TO estuary_flow_user; Next, grant the user read-only access to the relevant tables. The simplest way is to grant read access to all tables in the schema as follows: GRANT SELECT ANY TABLE TO estuary_flow_user; Alternatively, you can be more granular and grant access to specific tables in different schemas: GRANT SELECT ON "<schema_a>"."<table_1>" TO estuary_flow_user; GRANT SELECT ON "<schema_b>"."<table_2>" TO estuary_flow_user; Finally you need to grant the user access to read metadata from the database: GRANT SELECT_CATALOG_ROLE TO estuary_flow_user; Your database user should now be ready for use with Estuary Flow. ","version":"Next","tagName":"h3"},{"title":"Include Schemas for Discovery​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#include-schemas-for-discovery","content":" In your Oracle configuration, you can specify the schemas that Flow should look at when discovering tables. The schema names are case-sensitive and will default to the upper-cased user if empty. If the user does not have access to the configured schemas, no tables will be discovered. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the OracleDB Flashback source connector. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe connection string for connecting to the database, either in the format of host:port/SID or a connect descriptor such as (address=(protocol=tcps)(host=...)...)\tstring\tRequired /credentials\tCredentials\tCredentials for authenticating with the database. Wallet and Username & Password authentication are supported.\tobject /credentials/credentials_title\tCredentials Title\tAuthentication method to use, one of "Wallet" or "Username & Password"\tstring\tRequired /credentials/username\tUsername\tThe username which is used to access the database.\tstring\tRequired /credentials/password\tPassword\tThe password associated with the username.\tstring\tRequired /credentials/tnsnames\ttnsnames\tThe tnsnames.ora file from the wallet.\tstring /credentials/ewallet\tewallet\tThe ewallet.pem file from the wallet.\tstring /credentials/wallet_password\tWallet Password\tPassword of the wallet, if protected.\tstring /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t50000 /advanced/skip_flashback_retention_checks\tSkip Flashback Retention Checks\tSkip Flashback retention checks. Use this cautiously as we cannot guarantee consistency if Flashback retention is not sufficient.\tinteger\tfalse /advanced/default_interval\tDefault Interval\tDefault interval between updates for all resources. Can be overwritten by each resource.\tinteger\tPT5M Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tName\tThe table name\tstring\tRequired /schema\tSchema\tIn Oracle tables reside in a schema that points to the user that owns the table.\tstring\tRequired /interval\tInterval\tInterval between updates for this resource\tstring\tPT5M ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-oracle-flashback:dev config: address: "database-1.ukqdmzdqvvsz.us-east-2.rds.amazonaws.com:1521/ORCL" user: "flow_capture" credentials: credentials_title: Username & Password username: ADMIN password: secret networkTunnel: sshForwarding: privateKey: -----BEGIN RSA PRIVATE KEY-----\\n... sshEndpoint: ssh://ec2-user@19.220.21.33:22 bindings: - resource: name: ${TABLE_NAME} schema: ${TABLE_NAMESPACE} interval: PT5M target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Paypal Transaction","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Paypal Transaction","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/#supported-data-resources","content":" The following data resources are supported through the Paypal APIs: TransactionsBalances By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Paypal Transaction","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/#prerequisites","content":" The Paypal Transaction API is used to get the history of transactions for a PayPal account. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Paypal Transaction","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Paypal Transaction source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Paypal Transaction","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/client_id\tClient ID\tThe Client ID of your Paypal developer application.\tstring\tRequired /client_secret\tClient Secret\tThe Client Secret of your Paypal developer application.\tstring\tRequired /is_sandbox\tSandbox\tCheckbox to indicate whether it is a sandbox environment or not\tboolean\tfalse /refresh_token\tRefresh token\tThe key to refresh the expired access token.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Paypal Transaction project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Paypal Transaction","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-paypal-transaction:dev config: client_id: <secret> client_secret: <secret> is_sandbox: false refresh_token: <secret> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: transactions syncMode: full_refresh target: ${PREFIX}/transactions {...} ","version":"Next","tagName":"h3"},{"title":"Pendo","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Pendo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/#supported-data-resources","content":" The following data resources are supported through the Pendo API: FeatureGuidePageReportPageEventsFeatureEventsTrackEventsGuideEventsPollEvents By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Pendo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/#prerequisites","content":" A Pendo account with the integration feature enabled.A Pendo API key ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Pendo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification files. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Pendo source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Pendo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/credentials/access_token\tAPI Key\tYour Pendo API key.\tstring\tRequired /startDate\tReplication Start Date\tUTC date and time in the format "YYYY-MM-DDTHH:MM:SSZ". Data prior to this date will not be replicated.\tstring\t1 hour before the current time Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tData resource\tResource in Pendo from which collections are captured.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Pendo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-pendo:dev config: credentials: access_token: <secret> bindings: - resource: name: Feature target: ${PREFIX}/Feature - resource: name: Guide target: ${PREFIX}/Guide - resource: name: Page target: ${PREFIX}/Page - resource: name: Report target: ${PREFIX}/Report - resource: name: PageEvents target: ${PREFIX}/PageEvents - resource: name: FeatureEvents target: ${PREFIX}/FeatureEvents - resource: name: TrackEvents target: ${PREFIX}/TrackEvents - resource: name: GuideEvents target: ${PREFIX}/GuideEvents - resource: name: PollEvents target: ${PREFIX}/PollEvents ","version":"Next","tagName":"h3"},{"title":"Pinterest","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#prerequisites","content":" To set up the Pinterest source connector, you'll need the following prerequisites: Pinterest App ID and secret keyRefresh Token ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#setup","content":" Follow the steps below to set up the Pinterest source connector. Log into your Estuary Flow account.Navigate to the "Captures" sectionFor the "Start Date," provide the date in YYYY-MM-DD format. Data added on and after this date will be replicated.Next, go to "Authorization Method"Authenticate your Pinterest account using OAuth2.0 or an Access Token. The OAuth2.0 authorization method is selected by default. For "Client ID" and "Client Secret," enter your Pinterest App ID and secret key. For the "Refresh Token," enter your Pinterest Refresh Token. Click "Set up source." ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Pinterest source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/start_date\tStart Date\tA date in the format YYYY-MM-DD. If you have not set a date, it would be defaulted to latest allowed date by api (89 days from today).\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Pinterest project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#sample","content":" { "required": ["start_date", "credentials"], "properties": { "start_date": { "pattern_descriptor": null }, "credentials": { "discriminator": { "propertyName": "auth_method" }, "oneOf": [ { "title": "OAuth2.0", "type": "object", "x-oauth2-provider": "pinterest", "properties": { "auth_method": { "const": "oauth2.0", "order": 0, "type": "string", "default": "oauth2.0" }, "client_id": { "airbyte_secret": true, "description": "The Client ID of your OAuth application", "title": "Client ID", "type": "string" }, "client_secret": { "airbyte_secret": true, "description": "The Client Secret of your OAuth application.", "title": "Client Secret", "type": "string" }, "refresh_token": { "airbyte_secret": true, "description": "Refresh Token to obtain new Access Token, when it's expired.", "title": "Refresh Token", "type": "string" } }, "required": [ "auth_method", "refresh_token" ] }, { "title": "Access Token", "type": "object", "properties": { "access_token": { "airbyte_secret": true, "description": "The Access Token to make authenticated requests.", "title": "Access Token", "type": "string" }, "auth_method": { "const": "access_token", "order": 0, "type": "string", "default": "access_token" } }, "required": [ "auth_method", "access_token" ] } ] } } } ","version":"Next","tagName":"h3"},{"title":"Supported Streams​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#supported-streams","content":" The Pinterest source connector supports the following streams: Account analytics (Incremental)Boards (Full table)Board sections (Full table)Pins on board section (Full table)Pins on board (Full table)Ad accounts (Full table)Ad account analytics (Incremental)Campaigns (Incremental)Campaign analytics (Incremental)Ad groups (Incremental)Ad group analytics (Incremental)Ads (Incremental)Ad analytics (Incremental) ","version":"Next","tagName":"h2"},{"title":"Performance Considerations​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#performance-considerations","content":" The Pinterest API imposes certain rate limits for the connector. Please take note of the following limits: Analytics streams: 300 calls per day per userAd accounts streams (Campaigns, Ad groups, Ads): 1000 calls per minute per user per appBoards streams: 10 calls per second per user per app note For any additional information or troubleshooting, refer to the official Pinterest API documentation. ","version":"Next","tagName":"h2"},{"title":"Amazon RDS for PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#supported-versions-and-platforms","content":" This connector supports PostgreSQL versions 10.0 and later on major cloud platforms. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#prerequisites","content":" You'll need a PostgreSQL database setup with the following: Logical replication enabled — wal_level=logicalUser role with REPLICATION attributeA replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. Optional; if none exist, one will be created by the connector.If you wish to run multiple captures from the same database, each must have its own slot. You can create these slots yourself, or by specifying a name other than the default in the advanced configuration. A publication. This represents the set of tables for which change events will be reported. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#setup","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the database, setting Public accessibility to Yes.Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database as described in the Amazon documentation.Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Enable logical replication on your RDS PostgreSQL instance. Create a parameter group. Create a unique name and description and set the following properties: Family: postgres13Type: DB Parameter group Modify the new parameter group and set rds.logical_replication=1. Associate the parameter group with the database. Reboot the database to allow the new parameter group to take effect. In the PostgreSQL client, connect to your instance and run the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table and publication. CREATE USER flow_capture WITH PASSWORD 'secret'; GRANT rds_replication TO flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture; CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>; where <other_tables> lists all tables that will be captured from. The publish_via_partition_rootsetting is recommended (because most users will want changes to a partitioned table to be captured under the name of the root table) but is not required. In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#backfills-and-performance-considerations","content":" When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired, "postgres" /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/publicationName\tPublication Name\tThe name of the PostgreSQL publication to replicate from.\tstring\t"flow_publication" /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/slotName\tSlot Name\tThe name of the PostgreSQL replication slot to replicate from.\tstring\t"flow_slot" /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"public.flow_watermarks" /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired SSL Mode​ Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-postgres:dev" config: address: "localhost:5432" database: "postgres" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: ${TABLE_NAMESPACE} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"TOASTed values​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#toasted-values","content":" PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. If your tables contain values that exceed the limit, those values can't be stored directly. PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to store them separately. TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. As a result, the connector emits a row update with the a value omitted, which might cause unexpected results in downstream catalog tasks if adjustments are not made. The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflowor use the Flow UI to create your capture. It uses merge reductionsto fill in the previous known TOASTed value in cases when that value is omitted from a row update. However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically: When you materialize the captured data to another system using a connector that requires delta updatesWhen you perform a derivation that uses TOASTed values ","version":"Next","tagName":"h2"},{"title":"Troubleshooting​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#troubleshooting","content":" If you encounter an issue that you suspect is due to TOASTed values, try the following: Ensure your collection's schema is using the merge reduction strategy.Set REPLICA IDENTITY to FULL for the table. This circumvents the problem by forcing the WAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated.Contact Estuary support for assistance. ","version":"Next","tagName":"h3"},{"title":"Publications​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#publications","content":" It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using: CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true); Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes. ","version":"Next","tagName":"h2"},{"title":"PostgreSQL Batch Query Connector","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch/","content":"PostgreSQL Batch Query Connector This connector captures data from Postgres into Flow collections by periodically executing queries and translating the results into JSON documents. We recommend using our PostgreSQL CDC Connector instead if possible. Using CDC provides lower latency data capture, delete and update events, and usually has a smaller impact on the source database. However there are some circumstances where this might not be feasible. Perhaps you need to capture from a managed PostgreSQL instance which doesn't support logical replication. Or perhaps you need to capture the contents of a view or the result of an ad-hoc query. That's the sort of situation this connector is intended for. The number one caveat you need to be aware of when using this connector is that it will periodically execute its update query over and over. At the default polling interval of 5 minutes, a naive SELECT * FROM foo query against a 100 MiB view will produce 30 GiB/day of ingested data, most of it duplicated. This is why the connector's autodiscovery logic only returns ordinary tables of data, because in that particular case we can use the xmin system column as a cursor and ask the database to SELECT xmin, * FROM foo WHERE xmin::text::bigint > $1;. If you start editing these queries or manually adding capture bindings for views or to run ad-hoc queries, you need to either have some way of restricting the query to "just the new rows since last time" or else have your polling interval set high enough that the data rate<DatasetSize> / <PollingInterval> is an amount of data you're willing to deal with.","keywords":"","version":"Next"},{"title":"PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#supported-versions-and-platforms","content":" This connector supports PostgreSQL versions 10.0 and later on major cloud platforms, as well as self-hosted instances. Setup instructions are provided for the following platforms: Self-hosted PostgreSQLAmazon RDSAmazon AuroraGoogle Cloud SQLAzure Database for PostgreSQL ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#prerequisites","content":" You'll need a PostgreSQL database setup with the following: Logical replication enabled — wal_level=logicalUser role with REPLICATION attributeA replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. Optional; if none exist, one will be created by the connector.If you wish to run multiple captures from the same database, each must have its own slot. You can create these slots yourself, or by specifying a name other than the default in the advanced configuration. A publication. This represents the set of tables for which change events will be reported. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. Configuration Tip To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see configure connections with SSH tunneling. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#setup","content":" To meet these requirements, follow the steps for your hosting type. Self-hosted PostgreSQLAmazon RDSAmazon AuroraGoogle Cloud SQLAzure Database for PostgreSQLSupabase ","version":"Next","tagName":"h2"},{"title":"Self-hosted PostgreSQL​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#self-hosted-postgresql","content":" The simplest way to meet the above prerequisites is to change the WAL level and have the connector use a database superuser role. For a more restricted setup, create a new user with just the required permissions as detailed in the following steps: Connect to your instance and create a new user and password: CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION; Assign the appropriate role. If using PostgreSQL v14 or later: GRANT pg_read_all_data TO flow_capture; If using an earlier version: ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA public, <other_schema> TO flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA information_schema, pg_catalog TO flow_capture; where <other_schema> lists all schemas that will be captured from. info If an even more restricted set of permissions is desired, you can also grant SELECT on just the specific table(s) which should be captured from. The ‘information_schema’ and ‘pg_catalog’ access is required for stream auto-discovery, but not for capturing already configured streams. Create the watermarks table, grant privileges, and create publication: CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>; where <other_tables> lists all tables that will be captured from. The publish_via_partition_rootsetting is recommended (because most users will want changes to a partitioned table to be captured under the name of the root table) but is not required. Set WAL level to logical: ALTER SYSTEM SET wal_level = logical; Restart PostgreSQL to allow the WAL level change to take effect. ","version":"Next","tagName":"h3"},{"title":"Amazon Aurora​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#amazon-aurora","content":" You must apply some of the settings to the entire Aurora DB cluster, and others to a database instance within the cluster. For each step, take note of which entity you're working with. Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the instance, choosing Publicly accessible in the Connectivity settings.Edit the VPC security group associated with your instance, or create a new VPC security group and associate it with the instance as described in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Enable logical replication on your Aurora DB cluster. Create a parameter group. Create a unique name and description and set the following properties: Family: aurora-postgresql13, or substitute the version of Aurora PostgreSQL used for your cluster.Type: DB Cluster Parameter group Modify the new parameter group and set rds.logical_replication=1. Associate the parameter group with the DB cluster. Reboot the cluster to allow the new parameter group to take effect. In the PostgreSQL client, connect to your instance and run the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table and publication. CREATE USER flow_capture WITH PASSWORD 'secret'; GRANT rds_replication TO flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture; CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>; where <other_tables> lists all tables that will be captured from. The publish_via_partition_rootsetting is recommended (because most users will want changes to a partitioned table to be captured under the name of the root table) but is not required. In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Azure Database for PostgreSQL​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#azure-database-for-postgresql","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Create a new firewall rule that grants access to the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your Azure PostgreSQL instance's support parameters, set replication to logical to enable logical replication. In the PostgreSQL client, connect to your instance and run the following commands to create a new user for the capture with appropriate permissions. CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION; If using PostgreSQL v14 or later: GRANT pg_read_all_data TO flow_capture; If using an earlier version: ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA public, <others> TO flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA information_schema, pg_catalog TO flow_capture; where <others> lists all schemas that will be captured from. info If an even more restricted set of permissions is desired, you can also grant SELECT on just the specific table(s) which should be captured from. The ‘information_schema’ and ‘pg_catalog’ access is required for stream auto-discovery, but not for capturing already configured streams. Set up the watermarks table and publication. ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA public, <others> TO flow_capture; GRANT SELECT ON information_schema.columns, information_schema.tables, pg_catalog.pg_attribute, pg_catalog.pg_class, pg_catalog.pg_index, pg_catalog.pg_namespace TO flow_capture; CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>; Note the following important items for configuration: Find the instance's host under Server Name, and the port under Connection Strings (usually 5432). Together, you'll use the host:port as the address property when you configure the connector.Format user as username@databasename; for example, flow_capture@myazuredb. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#backfills-and-performance-considerations","content":" When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector. ","version":"Next","tagName":"h2"},{"title":"WAL Retention and Tuning Parameters​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#wal-retention-and-tuning-parameters","content":" Postgres logical replication works by reading change events from the writeahead log, reordering WAL events in memory on the server, and sending them to the client in the order that transactions were committed. The replication slot used by the capture is essentially a cursor into that logical sequence of changes. Because of how Postgres reorders WAL events into atomic transactions, there are two distinct LSNs which matter when it comes to WAL retention. The confirmed_flush_lsnproperty of a replication slot represents the latest event in the WAL which has been sent to and confirmed by the client. However there may be some number of uncommitted changes prior to this point in the WAL which are still relevant and will be sent to the client in later transactions. Thus there is also a restart_lsn property which represents the point in the WAL from which logical decoding must resume in the future if the replication connection is closed and restarted. The server cannot clean up old WAL files so long as there are active replication slots whose restart_lsn position requires them. There are two ways that restart_lsn might get stuck at a particular point in the WAL: When a capture is deleted, disabled, or repeatedly failing for other reasons, it is not able to advance the confirmed_flush_lsn and thus restart_lsn cannot advance either.When a long-running transaction is open on the server the restart_lsn of a replication slot may be unable to advance even though confirmed_flush_lsn is. By default Postgres will retain an unbounded amount of WAL data and fill up the entire disk if a replication slot stops advancing. There are two ways to address this: When deleting a capture, make sure that the replication slot is also successfully deleted. You can list replication slots with the query SELECT * FROM pg_replication_slots and can drop the replication slot manually with pg_drop_replication_slot('flow_slot'). The database setting max_slot_wal_keep_size can be used to bound the maximum amount of WAL data which a replication slot can force the database to retain. This setting defaults to -1 (unlimited) but should be set on production databases to protect them from unbounded WAL retention filling up the entire disk.Proper sizing of this setting is complex for reasons discussed below, but a value of 50GB should be enough for many databases. When the max_slot_wal_keep_size limit is exceeded, Postgres will terminate any active replication connections using that slot and invalidate the replication slot so that it can no longer be used. If Postgres invalidates the replication slot, the Flow capture using that slot will fail and manual intervention will be required to restart the capture and re-backfill all tables. Setting too low of a limit for max_slot_wal_keep_size can cause additional failures in the presence of long-running transactions. Even when a client is actively receiving and acknowledging replication events, a long-running transaction can cause the restart_lsnof the replication slot to remain stuck until that transaction commits. Thus the value ofmax_slot_wal_keep_size needs to be set high enough to avoid this happening. The precise value depends on the overall change rate of your database and worst-case transaction open time, but there is no downside to using a larger value provided you have enough free disk space. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired, "postgres" /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/publicationName\tPublication Name\tThe name of the PostgreSQL publication to replicate from.\tstring\t"flow_publication" /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/slotName\tSlot Name\tThe name of the PostgreSQL replication slot to replicate from.\tstring\t"flow_slot" /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"public.flow_watermarks" /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired SSL Mode​ Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-postgres:dev" config: address: "localhost:5432" database: "postgres" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: ${TABLE_NAMESPACE} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"TOASTed values​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#toasted-values","content":" PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. If your tables contain values that exceed the limit, those values can't be stored directly. PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to store them separately. TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. As a result, the connector emits a row update with the a value omitted, which might cause unexpected results in downstream catalog tasks if adjustments are not made. The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflowor use the Flow UI to create your capture. It uses merge reductionsto fill in the previous known TOASTed value in cases when that value is omitted from a row update. However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically: When you materialize the captured data to another system using a connector that requires delta updatesWhen you perform a derivation that uses TOASTed values ","version":"Next","tagName":"h2"},{"title":"Troubleshooting​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#troubleshooting","content":" If you encounter an issue that you suspect is due to TOASTed values, try the following: Ensure your collection's schema is using the merge reduction strategy.Set REPLICA IDENTITY to FULL for the table. This circumvents the problem by forcing the WAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated.Contact Estuary support for assistance. ","version":"Next","tagName":"h3"},{"title":"Publications​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#publications","content":" It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using: CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true); Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes. ","version":"Next","tagName":"h2"},{"title":"Google Cloud SQL for PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#supported-versions-and-platforms","content":" This connector supports PostgreSQL versions 10.0 and later. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#prerequisites","content":" You'll need a PostgreSQL database setup with the following: Logical replication enabled — wal_level=logicalUser role with REPLICATION attributeA replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. Optional; if none exist, one will be created by the connector.If you wish to run multiple captures from the same database, each must have its own slot. You can create these slots yourself, or by specifying a name other than the default in the advanced configuration. A publication. This represents the set of tables for which change events will be reported. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#setup","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Enable public IP on your database and add the Estuary Flow IP addresses as authorized IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. On Google Cloud, navigate to your instance's Overview page. Click "Edit configuration". Scroll down to the Flags section. Click "ADD FLAG". Set the cloudsql.logical_decoding flag to on to enable logical replication on your Cloud SQL PostgreSQL instance. In your PostgreSQL client, connect to your instance and issue the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table and publication. CREATE USER flow_capture WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'secret'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture; CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>; where <other_tables> lists all tables that will be captured from. The publish_via_partition_rootsetting is recommended (because most users will want changes to a partitioned table to be captured under the name of the root table) but is not required. In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 5432. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#backfills-and-performance-considerations","content":" When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired, "postgres" /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/publicationName\tPublication Name\tThe name of the PostgreSQL publication to replicate from.\tstring\t"flow_publication" /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/slotName\tSlot Name\tThe name of the PostgreSQL replication slot to replicate from.\tstring\t"flow_slot" /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"public.flow_watermarks" /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-postgres:dev" config: address: "localhost:5432" database: "postgres" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: ${TABLE_NAMESPACE} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"TOASTed values​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#toasted-values","content":" PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. If your tables contain values that exceed the limit, those values can't be stored directly. PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to store them separately. TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. As a result, the connector emits a row update with the a value omitted, which might cause unexpected results in downstream catalog tasks if adjustments are not made. The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflowor use the Flow UI to create your capture. It uses merge reductionsto fill in the previous known TOASTed value in cases when that value is omitted from a row update. However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically: When you materialize the captured data to another system using a connector that requires delta updatesWhen you perform a derivation that uses TOASTed values ","version":"Next","tagName":"h2"},{"title":"Troubleshooting​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#troubleshooting","content":" If you encounter an issue that you suspect is due to TOASTed values, try the following: Ensure your collection's schema is using the merge reduction strategy.Set REPLICA IDENTITY to FULL for the table. This circumvents the problem by forcing the WAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated.Contact Estuary support for assistance. ","version":"Next","tagName":"h3"},{"title":"Publications​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#publications","content":" It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using: CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true); Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes. ","version":"Next","tagName":"h2"},{"title":"Neon PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#prerequisites","content":" An Estuary Flow account (start free, no credit card required)A Neon account ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#setup","content":" ","version":"Next","tagName":"h2"},{"title":"1. Enable Logical Replication in Neon​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#1-enable-logical-replication-in-neon","content":" Enabling logical replication modifies the Postgres wal_level configuration parameter, changing it from replica to logical for all databases in your Neon project. Once the wal_level setting is changed to logical, it cannot be reverted. Enabling logical replication also restarts all computes in your Neon project, meaning active connections will be dropped and have to reconnect. To enable logical replication in Neon: Select your project in the Neon Console.On the Neon Dashboard, select Project settings.Select Beta.Click Enable to enable logical replication. You can verify that logical replication is enabled by running the following query from the Neon SQL Editor: SHOW wal_level; wal_level ----------- logical ","version":"Next","tagName":"h3"},{"title":"2. Create a Postgres Role for Replication​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#2-create-a-postgres-role-for-replication","content":" It is recommended that you create a dedicated Postgres role for replicating data. The role must have the REPLICATION privilege. The default Postgres role created with your Neon project and roles created using the Neon Console, CLI, or API are granted membership in the neon_superuser role, which has the required REPLICATION privilege. To create a role in the Neon Console: Navigate to the Neon Console.Select a project.Select Roles.Select the branch where you want to create the role.Click New Role.In the role creation dialog, specify a role name.Click Create. The role is created and you are provided with the password for the role. The following CLI command creates a role. To view the CLI documentation for this command, see Neon CLI commands — roles. neon roles create --name <role> The following Neon API method creates a role. To view the API documentation for this method, refer to the Neon API reference. curl 'https://console.neon.tech/api/v2/projects/hidden-cell-763301/branches/br-blue-tooth-671580/roles' \\ -H 'Accept: application/json' \\ -H "Authorization: Bearer $NEON_API_KEY" \\ -H 'Content-Type: application/json' \\ -d '{ "role": { "name": "cdc_role" } }' | jq ","version":"Next","tagName":"h3"},{"title":"3. Grant Schema Access to Your Postgres Role​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#3-grant-schema-access-to-your-postgres-role","content":" If your replication role does not own the schemas and tables you are replicating from, make sure to grant access. Run these commands for each schema: GRANT USAGE ON SCHEMA public TO cdc_role; GRANT SELECT ON ALL TABLES IN SCHEMA public TO cdc_role; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO cdc_role; Granting SELECT ON ALL TABLES IN SCHEMA instead of naming the specific tables avoids having to add privileges later if you add tables to your publication. ","version":"Next","tagName":"h3"},{"title":"4. Create a Publication​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#4-create-a-publication","content":" Create a publication with the name estuary_publication. Include all the tables you would like to ingest into Estuary Flow. CREATE PUBLICATION flow_publication FOR TABLE <tbl1, tbl2, tbl3>; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); The publish_via_partition_rootsetting is recommended (because most users will want changes to a partitioned table to be captured under the name of the root table) but is not required. Refer to the Postgres docs if you need to add or remove tables from your publication. Alternatively, you also can create a publication FOR ALL TABLES. Upon start-up, the Estuary Flow connector for Postgres will automatically create the replication slot required for ingesting data change events from Postgres. The slot's name will be prefixed with estuary_, followed by a unique identifier. To prevent storage bloat, Neon automatically removes inactive replication slots after a period of time if there are other active replication slots. If you have or intend on having more than one replication slot, please see Unused replication slots to learn more. ","version":"Next","tagName":"h3"},{"title":"Allow Inbound Traffic​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#allow-inbound-traffic","content":" If you are using Neon's IP Allow feature to limit the IP addresses that can connect to Neon, you will need to allow inbound traffic from Estuary Flow's IP addresses. Refer to the Estuary Flow documentation for the list of IPs that need to be allowlisted for the Estuary Flow region of your account. For information about configuring allowed IPs in Neon, see Configure IP Allow. ","version":"Next","tagName":"h2"},{"title":"Create a Postgres Source Connector in Estuary Flow​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#create-a-postgres-source-connector-in-estuary-flow","content":" In the Estuary Flow web UI, select Sources from the left navigation bar and click New Capture. In the connector catalog, choose Neon PostgreSQL and click Connect. Enter the connection details for your Neon database. You can get these details from your Neon connection string, which you'll find in the Connection Details widget on the Dashboard of your Neon project. Your connection string will look like this: postgres://alex:AbC123dEf@ep-cool-darkness-123456.us-east-2.aws.neon.tech/dbname?sslmode=require Enter the details for your connection string into the source connector fields. Based on the sample connection string above, the values would be specified as shown below. Your values will differ. Name: Name of the Capture connectorServer Address: ep-cool-darkness-123456.us-east-2.aws.neon.tech:5432User: cdc_rolePassword: Click Add a new secret..., then specify a name for that secret and AbC123dEf as its valueDatabase: dbname Click Next. Estuary Flow will now scan the source database for all the tables that can be replicated. Select one or more table(s) by checking the checkbox next to their name. Optionally, you can change the name of the destination name for each table. You can also take a look at the schema of each stream by clicking on the Collection tab. Click Save and Publish to provision the connector and kick off the automated backfill process. ","version":"Next","tagName":"h2"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#backfills-and-performance-considerations","content":" When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired, "postgres" /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/publicationName\tPublication Name\tThe name of the PostgreSQL publication to replicate from.\tstring\t"flow_publication" /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/slotName\tSlot Name\tThe name of the PostgreSQL replication slot to replicate from.\tstring\t"flow_slot" /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"public.flow_watermarks" /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-postgres:dev" config: address: "localhost:5432" database: "postgres" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: ${TABLE_NAMESPACE} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"TOASTed values​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#toasted-values","content":" PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. If your tables contain values that exceed the limit, those values can't be stored directly. PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to store them separately. TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. As a result, the connector emits a row update with the a value omitted, which might cause unexpected results in downstream catalog tasks if adjustments are not made. The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflowor use the Flow UI to create your capture. It uses merge reductionsto fill in the previous known TOASTed value in cases when that value is omitted from a row update. However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically: When you materialize the captured data to another system using a connector that requires delta updatesWhen you perform a derivation that uses TOASTed values ","version":"Next","tagName":"h2"},{"title":"Troubleshooting​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#troubleshooting","content":" If you encounter an issue that you suspect is due to TOASTed values, try the following: Ensure your collection's schema is using the merge reduction strategy.Set REPLICA IDENTITY to FULL for the table. This circumvents the problem by forcing the WAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated.Contact Estuary support for assistance. ","version":"Next","tagName":"h3"},{"title":"Publications​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#publications","content":" It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using: CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true); Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes. ","version":"Next","tagName":"h2"},{"title":"Recharge","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Recharge","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/#supported-data-resources","content":" The following data resources are supported through the Recharge APIs: AddressesChargesCollectionsCustomersDiscountsMetafieldsOnetimesOrdersProductsShopSubscriptions By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Recharge","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/#prerequisites","content":" Recharge Access Token for authentication. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Recharge","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Recharge source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Recharge","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/access_token\tAccess Token\tThe value of the Access Token generated.\tstring\tRequired /start_date\tStart Date\tThe date from which you'd like to replicate data for Recharge API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Recharge project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Recharge","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-recharge:dev config: access_token: <secret> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: addresses syncMode: full_refresh target: ${PREFIX}/addresses {...} ","version":"Next","tagName":"h3"},{"title":"Supabase","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#supported-versions-and-platforms","content":" This connector supports all Supabase PostgreSQL instances. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#prerequisites","content":" You'll need a Supabase PostgreSQL database setup with the following: A Supabase IPv4 address and direct connection hostname which bypasses the Supabase connection pooler. See Direct Database Connection for details.Logical replication enabled — wal_level=logicalUser role with REPLICATION attributeA replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. Optional; if none exist, one will be created by the connector.If you wish to run multiple captures from the same database, each must have its own slot. You can create these slots yourself, or by specifying a name other than the default in the advanced configuration. A publication. This represents the set of tables for which change events will be reported. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. Configuration Tip To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see configure connections with SSH tunneling. ","version":"Next","tagName":"h2"},{"title":"Direct Database Connection​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#direct-database-connection","content":" By default, Supabase guides users into connecting to their database through aConnection Pooler. Connection poolers are helpful for many applications, but unfortunately the pooler does not support the CDC replication features that this connector relies on. This capture connector requires a direct connection address for your database. This address can be found by navigating to Settings > Database in the Supabase dashboard and then making sure that the Display connection pooler checkbox isunchecked so that the appropriate connection information is shown for a direct connection. You will also need to configure a dedicated IPv4 addressfor your database, if you have not already done so. This can be configured under Project Settings > Add Ons > Dedicated IPv4 addressin the Supabase dashboard. ","version":"Next","tagName":"h3"},{"title":"Setup​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#setup","content":" The simplest way to meet the above prerequisites is to change the WAL level and have the connector use a database superuser role. For a more restricted setup, create a new user with just the required permissions as detailed in the following steps: Connect to your instance and create a new user and password: CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION; Assign the appropriate role. If using PostgreSQL v14 or later: GRANT pg_read_all_data TO flow_capture; If using an earlier version: ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA public, <other_schema> TO flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA information_schema, pg_catalog TO flow_capture; where <other_schema> lists all schemas that will be captured from. info If an even more restricted set of permissions is desired, you can also grant SELECT on just the specific table(s) which should be captured from. The ‘information_schema’ and ‘pg_catalog’ access is required for stream auto-discovery, but not for capturing already configured streams. Create the watermarks table, grant privileges, and create publication: CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>; where <other_tables> lists all tables that will be captured from. The publish_via_partition_rootsetting is recommended (because most users will want changes to a partitioned table to be captured under the name of the root table) but is not required. Set WAL level to logical: ALTER SYSTEM SET wal_level = logical; Restart PostgreSQL to allow the WAL level change to take effect. ","version":"Next","tagName":"h2"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#backfills-and-performance-considerations","content":" When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired, "postgres" /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/publicationName\tPublication Name\tThe name of the PostgreSQL publication to replicate from.\tstring\t"flow_publication" /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/slotName\tSlot Name\tThe name of the PostgreSQL replication slot to replicate from.\tstring\t"flow_slot" /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"public.flow_watermarks" /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired SSL Mode​ Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-postgres:dev" config: address: "localhost:5432" database: "postgres" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: ${TABLE_NAMESPACE} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"TOASTed values​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#toasted-values","content":" PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. If your tables contain values that exceed the limit, those values can't be stored directly. PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to store them separately. TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. As a result, the connector emits a row update with the a value omitted, which might cause unexpected results in downstream catalog tasks if adjustments are not made. The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflowor use the Flow UI to create your capture. It uses merge reductionsto fill in the previous known TOASTed value in cases when that value is omitted from a row update. However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically: When you materialize the captured data to another system using a connector that requires delta updatesWhen you perform a derivation that uses TOASTed values ","version":"Next","tagName":"h2"},{"title":"Troubleshooting​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#troubleshooting","content":" If you encounter an issue that you suspect is due to TOASTed values, try the following: Ensure your collection's schema is using the merge reduction strategy.Set REPLICA IDENTITY to FULL for the table. This circumvents the problem by forcing the WAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated.Contact Estuary support for assistance. ","version":"Next","tagName":"h3"},{"title":"Publications​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#publications","content":" It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using: CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true); Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes. ","version":"Next","tagName":"h2"},{"title":"Salesforce","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/","content":"","keywords":"","version":"Next"},{"title":"Overview​","type":1,"pageTitle":"Salesforce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/#overview","content":" The Estuary Salesforce Connector facilitates seamless integration between Salesforce and Estuary's data processing framework. With this connector, users can effortlessly sync data from Salesforce objects into Estuary Flow collections. There are two primary types of connectors available: the Realtime Connector and the Historical Connector. ","version":"Next","tagName":"h2"},{"title":"Salesforce Historical Data​","type":1,"pageTitle":"Salesforce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/#salesforce-historical-data","content":" The Historical Data Connector is designed to capture data from Salesforce objects into Flow collections using batch processing methods. This connector is particularly suited for synchronizing historical Salesforce data. By leveraging batch processing capabilities, it efficiently retrieves and syncs large volumes of historical data, ensuring comprehensive integration with Estuary's data processing workflows. ","version":"Next","tagName":"h2"},{"title":"Salesforce Real Time Data​","type":1,"pageTitle":"Salesforce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/#salesforce-real-time-data","content":" The Real-time Connector provides a mechanism to capture data from Salesforce objects into Flow collections in real time. It utilizes the Salesforce PushTopic API, which enables the streaming of data changes from Salesforce to Estuary. Leveraging the real-time capabilities of the PushTopic API, this connector ensures that updates and modifications in Salesforce objects are promptly reflected in the corresponding Estuary Flow collections. ","version":"Next","tagName":"h2"},{"title":"Running Both Connectors in Parallel​","type":1,"pageTitle":"Salesforce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/#running-both-connectors-in-parallel","content":" To combine the capabilities of both connectors, users can create two separate captures: one using the Historical Connector to capture historical data, and the other using the Realtime Connector to capture real-time updates. Both captures can be configured to point to the same Flow collection, effectively merging historical and real-time data within the same destination. This approach provides a comprehensive solution, allowing users to maintain an up-to-date representation of their Salesforce data while also preserving historical context. By seamlessly integrating historical and real-time data updates, users can leverage the combined power of batch processing and real-time streaming for enhanced data analysis and insights. For help using both connectors in parallel, contact Estuary's support team. ","version":"Next","tagName":"h2"},{"title":"SendGrid","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"SendGrid","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/#supported-data-resources","content":" The following data resources are supported through the SendGrid APIs: CampaignsListsContactsStats automationsSegmentsSingle SendsTemplatesGlobal suppressionSuppression groupsSuppression group membersBlocksBouncesInvalid emailsSpam reports By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"SendGrid","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/#prerequisites","content":" SendGrid API Key for authentication. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"SendGrid","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SendGrid source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"SendGrid","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/apikey\tSendgrid API key\tThe value of the SendGrid API Key generated.\tstring\tRequired /start_date\tStart Date\tThe date from which you'd like to replicate data for SendGrid API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your SendGrid project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"SendGrid","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-sendgrid:dev config: apikey: <secret> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: blocks syncMode: incremental target: ${PREFIX}/blocks {...} ","version":"Next","tagName":"h3"},{"title":"Salesforce — Real-time data","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#supported-data-resources","content":" This connector can capture the following Salesforce standard objects, if present in your account: AccountContactUserOpportunityFilledHistoryLeadHistoryOpportunityCampaignCaseContactLineItemEntitlementLeadLiveChatTranscriptMessagingSessionQuoteQuoteLineItemServiceAppointmentServiceContractTaskUserServicePresenceWorkOrderWorkOrderLineItem Because most Salesforce accounts contain large volumes of data, you may only want to capture a subset of the available objects. There are several ways to control this: Create a dedicated Salesforce user with access only to the objects you'd like to capture. During capture creation in the web application, remove the bindings for objects you don't want to capture. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#prerequisites","content":" ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Salesforce in the Flow web app​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#using-oauth2-to-authenticate-with-salesforce-in-the-flow-web-app","content":" If you're using the Flow web app, you'll be prompted to authenticate with Salesforce using OAuth. You'll need the following: A Salesforce organization on the Enterprise tier, or with an equivalent API request allocation. Salesforce user credentials. We recommend creating a dedicated read-only Salesforce user. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#configuring-the-connector-specification-manually","content":" If you're working with flowctl and writing specifications in a local development environment, you'll need to manually supply OAuth credentials. You'll need: The items required to set up with OAuth2. A Salesforce developer application with a generated client ID, client secret, and refresh token. See setup steps. ","version":"Next","tagName":"h3"},{"title":"Setup​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#setup","content":" Create a read-only Salesforce user​ Creating a dedicated read-only Salesforce user is a simple way to specify which objects Flow will capture. While signed in as an administrator, create a new profile by cloning the standard Minimum Access profile. Edit the new profile's permissions. Grant it read access to all the standard and custom objects you'd like to capture with Flow. Create a new user, applying the profile you just created. You'll use this user's email address and password to authenticate Salesforce in Flow. Create a developer application and generate authorization tokens​ To manually write a capture specification for Salesforce, you need to create and configure a developer application. Through this process, you'll obtain the client ID, client secret, and refresh token. Create a new developer application. a. When selecting Scopes for your app, select Manage user data via APIs (api), Perform requests at any time (refresh_token, offline_access), and Manage user data via Web browsers (web). Edit the app to ensure that Permitted users is set to All users may self-authorize. Locate the Consumer Key and Consumer Secret. These are equivalent to the client id and client secret, respectively. Follow the Salesforce Web Server Flow. The final POST response will include your refresh token. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the real-time Salesforce source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so you won't need the /credentials values listed here. Property\tTitle\tDescription\tType\tRequired/Default/credentials object\tRequired /credentials/client_id\tClient ID\tThe Salesforce Client ID, also known as a Consumer Key, for your developer application.\tstring\tRequired /credentials/client_secret\tClient Secret\tThe Salesforce Client Secret, also known as a Consumer Secret, for your developer application.\tstring\tRequired /credentials/refresh_token\tRefresh Token\tThe refresh token generated by your developer application.\tstring\tRequired /is_sandbox\tSandbox\tWhether you're using a Salesforce Sandbox.\tboolean\tfalse Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tSalesforce object from which a collection is captured.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-salesforce-next:dev config: credentials: client_id: {your_client_id} client_secret: {secret} refresh_token: {XXXXXXXX} is_sandbox: false bindings: - resource: stream: WorkOrder target: ${PREFIX}/WorkOrder - resource: stream: WorkOrderLineItem target: ${PREFIX}/WorkOrderLineItem ","version":"Next","tagName":"h3"},{"title":"Sentry","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Sentry","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/#supported-data-resources","content":" The following data resources are supported through the Sentry APIs: EventsIssuesProjectsReleases By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Sentry","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/#prerequisites","content":" To set up the Sentry source connector, you'll need the Sentry project name, authentication token, and organization. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Sentry","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Sentry source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Sentry","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/auth_token\tAuth Token\tAuth Token generated in Sentry\tstring\tRequired /organization\tOrganization\tThe slug of the organization the groups belong to.\tstring\tRequired /project\tProject\tThe name (slug) of the Project you want to sync.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Sentry project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Sentry","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-sentry:dev config: auth_token: <secret> organization: <your organization> project: <your project> bindings: - resource: stream: events syncMode: full_refresh target: ${PREFIX}/events {...} ","version":"Next","tagName":"h3"},{"title":"Salesforce — Historical data","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#supported-data-resources","content":" This connector can capture the following Salesforce standard objects, if present in your account: AccountContactUserOpportunityFilledHistoryLeadHistoryOpportunityCampaignCaseContactLineItemEntitlementLeadLiveChatTranscriptMessagingSessionQuoteQuoteLineItemServiceAppointmentServiceContractTaskUserServicePresenceWorkOrderWorkOrderLineItem The Salesforce connector has the ability to capture all standard Salesforce objects as well as custom objects. All available objects will appear after connecting to Salesforce. Because most Salesforce accounts contain large volumes of data, you may only want to capture a subset of the available objects. There are several ways to control this: Create a dedicated Salesforce user with access only to the objects you'd like to capture. Apply a filter when you configure the connector. If you don't apply a filter, the connector captures all objects available to the user. During capture creation in the web application, remove the bindings for objects you don't want to capture. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#prerequisites","content":" ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Salesforce in the Flow web app​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#using-oauth2-to-authenticate-with-salesforce-in-the-flow-web-app","content":" If you're using the Flow web app, you'll be prompted to authenticate with Salesforce using OAuth. You'll need the following: A Salesforce organization on the Enterprise tier, or with an equivalent API request allocation. Salesforce user credentials. We recommend creating a dedicated read-only Salesforce user. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#configuring-the-connector-specification-manually","content":" If you're working with flowctl and writing specifications in a local development environment, you'll need to manually supply OAuth credentials. You'll need: The items required to set up with OAuth2. A Salesforce developer application with a generated client ID, client secret, and refresh token. See setup steps. ","version":"Next","tagName":"h3"},{"title":"Setup​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#setup","content":" Create a read-only Salesforce user​ Creating a dedicated read-only Salesforce user is a simple way to specify which objects Flow will capture. This is useful if you have a large amount of data in your Salesforce organization. While signed in as an administrator, create a new profile by cloning the standard Minimum Access profile. Edit the new profile's permissions. Grant it read access to all the standard and custom objects you'd like to capture with Flow. Create a new user, applying the profile you just created. You'll use this user's email address and password to authenticate Salesforce in Flow. Create a developer application and generate authorization tokens​ To manually write a capture specification for Salesforce, you need to create and configure a developer application. Through this process, you'll obtain the client ID, client secret, and refresh token. Create a new developer application. a. When selecting Scopes for your app, select Manage user data via APIs (api), Perform requests at any time (refresh_token, offline_access), and Manage user data via Web browsers (web). Edit the app to ensure that Permitted users is set to All users may self-authorize. Locate the Consumer Key and Consumer Secret. These are equivalent to the client id and client secret, respectively. Follow the Salesforce Web Server Flow. The final POST response will include your refresh token. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the Flow specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the batch Salesforce source connector. ","version":"Next","tagName":"h2"},{"title":"Formula Fields​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#formula-fields","content":" Estuary is able to capture Salesforce formula fields, however, regular full syncs must be configured in order to ensure up to date formula fields. Given the batch processing of this connector, if formula field values are updated in between syncs, Estuary will not be aware of any changes. In order to ensure data freshness, it is recommended that you configure your capture to regularly initiate full refreshes of your source. Once a historical backfill is complete, updated formula field values will be reflected within Estuary. ","version":"Next","tagName":"h3"},{"title":"Slowly Changing Dimensions Type 2​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#slowly-changing-dimensions-type-2","content":" Estuary is capable of capturing a stream of your Salesforce data as it changes through a feature called Delta Updates. To read more about how Delta Updates works visit our docs. ","version":"Next","tagName":"h3"},{"title":"Merging Real Time and Batch Data​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#merging-real-time-and-batch-data","content":" Estuary offers connectors for both batch and real time capture. It is possible to create collections that reflect both batch and real time data capture using the following steps: Create a new capture using the batch capture connector. Create a new capture using the real time capture connector. Both captures should share the same namespace in order to write to the same collection. For example, you would end up with a batch connector named Tenant/Salesforce/source-salesforce and a real time capture named Tenant/Salesforce/source-salesforce-real-time. If configured correctly, both captures will read data into the same collections that are titled Tenant/Salesforce/your-stream. Estuary should automatically merge your documents, ensuring that duplicates are not produced when pulling from two captures with the same source. Before continuing, it is important to make sure that a reduction strategy has been implemented for your collections. This step requires using flowctl, please visit our documentation for more information. Pull down your active specifications into your local environment using the command flowctl catalog pull-specs --prefix Tenant/Salesforce This command will generate a folder for each subtree of your tenant. Using the above example tenant, you would end up with a top level folder structure named Tenant and a sub folder named Salesforce. Within the sub folder for your Salesforce capture you will find yaml specification files for your each of your collections that follow the naming convention BindingName.schema.yaml. For each newly created collection, make sure that it contains the following reduction strategy: --- type: object additionalProperties: true properties: Id: type: - string ... required: - Id # Your collection must include this line. If missing, please add below reduce: strategy: merge If the above line was missing you must also run the command flowctl catalog publish --source flow.yaml at the root level of your local folder structure to publish the changes to Flow. ","version":"Next","tagName":"h3"},{"title":"Properties​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so you won't need the /credentials values listed here. Property\tTitle\tDescription\tType\tRequired/Default/credentials object\tRequired /credentials/auth_type\tAuthorization type\tSet to Client\tstring /credentials/client_id\tClient ID\tThe Salesforce Client ID, also known as a Consumer Key, for your developer application.\tstring\tRequired /credentials/client_secret\tClient Secret\tThe Salesforce Client Secret, also known as a Consumer Secret, for your developer application.\tstring\tRequired /credentials/refresh_token\tRefresh Token\tThe refresh token generated by your developer application.\tstring\tRequired /is_sandbox\tSandbox\tWhether you're using a Salesforce Sandbox.\tboolean\tfalse /start_date\tStart Date\tStart date in the format YYYY-MM-DD. Data added on and after this date will be captured. If this field is blank, all data will be captured.\tstring /streams_criteria\tFilter Salesforce Objects (Optional)\tFilter Salesforce objects for capture.\tarray /streams_criteria/-/criteria\tSearch criteria\tPossible criteria are "starts with", "ends with", "contains", "exacts", "starts not with", "ends not with", "not contains", and "not exacts".\tstring\t"contains" /streams_criteria/-/value\tSearch value\tSearch term used with the selected criterion to filter objects.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/cursorField\tCursor field\tField used as a cursor to track data replication; typically a timestamp field.\tarray, null /stream\tStream\tSalesforce object from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-salesforce:dev config: credentials: auth_type: Client client_id: {your_client_id} client_secret: {secret} refresh_token: {XXXXXXXX} is_sandbox: false start_date: 2022-01-01 streams_criteria: - criteria: "starts with" value: "Work" bindings: - resource: cursorField: [SystemModstamp] stream: WorkOrder syncMode: incremental target: ${PREFIX}/WorkOrder - resource: cursorField: [SystemModstamp] stream: WorkOrderLineItem syncMode: incremental target: ${PREFIX}/WorkOrderLineItem ","version":"Next","tagName":"h3"},{"title":"Slack","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/#supported-data-resources","content":" The following data resources are supported through the Slack APIs: Channels (Conversations)Channel Members (Conversation Members)Messages (Conversation History)UsersThreads (Conversation Replies)User GroupsFilesRemote Files By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/#prerequisites","content":" Slack workspace URL or API token for authentication. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Slack source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/join_channels\tJoin Channels\tWhether to join all channels\tboolean\ttrue /lookback_window\tThreads Lookback window (Days)\tHow far into the past to look for messages in threads.\tinteger\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Slack project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-slack:dev config: credentials: auth_type: OAuth access_token: {secret} client_id: {your_client_id} client_secret: {secret} join_channels: true lookback_window: 7 start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: channel_members syncMode: full_refresh target: ${PREFIX}/channel_members {...} ","version":"Next","tagName":"h3"},{"title":"SFTP","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"SFTP","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/#prerequisites","content":" You'll need an SFTP server that can accept connections from the Estuary Flow IP addresses using password authentication. ","version":"Next","tagName":"h2"},{"title":"Subdirectories and Symbolic Links​","type":1,"pageTitle":"SFTP","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/#subdirectories-and-symbolic-links","content":" The connector must be configured with a Directory to capture files from. It will also descend into and capture files in normal subdirectories of the configured Directory. Symbolic links to files are captured from the referent files. Symbolic links to subdirectories are not captured, although the configured Directory may itself be a symbolic link. ","version":"Next","tagName":"h2"},{"title":"File Capturing Order​","type":1,"pageTitle":"SFTP","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/#file-capturing-order","content":" The standard mode of operation for the connector is to capture files according to their modification time. All files available on the server will initially be captured, and on an on-going basis new files that are added to the server are captured incrementally. New files added to the server are captured based on their modification time: If the connector finds a file with a more recent modification time than any previously observed, it will be captured. This means that any actions that update the modification time of a file on the server may cause it to be re-captured. For symbolic links to files the modification time of referent file is used, not of the symbolic link. Alternatively, the advanced option Ascending Keys may be set. In this mode of operation the connector processes files strictly based on their path. New files are captured if they have a path lexically greater than any previously captured file. Lexical ordering considers the full path of the file. As an example, consider a directory structure like the following with a data file initially in the directory /root/b/: /root/ a/ b/data.csv c/ In the normal mode of operation (Ascending Keys not set) the path /root/b/data.csv will initially be captured. Any added files will be captured by the connector on an on-going basis as they have increasingly more recent modification times.With Ascending Keys set the path /root/b/data.csv will initially be captured, but after that only added files in a higher lexical order will be captured: Any file added to the directory /root/a/ will not be captured, becuase /root/a/ comes before /root/b/.Any file added to the directory /root/c/ will captured, because /root/c/ comes after /root/b/.A file added to the directory /root/b/ may be captured if its name comes after data.csv.This ordering applies on an on-going basis. If a file is added to /root/c/, after that only files with a higher lexical ordering than that file to be captured. Setting Ascending Keys is only recommended if you have strict control over the naming of files and can ensure they are added in increasing lexical ordering. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"SFTP","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SFTP source connector. Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tHost and port of the SFTP server. Example: myserver.com:22\tstring\tRequired /username\tUsername\tUsername for authentication.\tstring\tRequired /password\tPassword\tPassword for authentication. Only one of Password or SSHKey must be provided.\tstring /sshKey\tSSH Key\tSSH Key for authentication. Only one of Password or SSHKey must be provided.\tstring /directory\tDirectory\tDirectory to capture files from. All files in this directory and any subdirectories will be included.\tstring\tRequired /matchFiles\tMatch Files Regex\tFilter applied to all file names in the directory. If provided, only files whose path (relative to the directory) matches this regex will be captured. For example, you can use .*\\.json to only capture json files.\tstring /advanced Options for advanced users. You should not typically need to modify these.\tobject /advanced/ascendingKeys\tAscending Keys\tMay improve sync speeds by listing files from the end of the last sync, rather than listing all files in the configured directory. This requires that you write files in ascending lexicographic order, such as an RFC-3339 timestamp, so that lexical path ordering matches modification time ordering.\tboolean\tfalse /parser\tParser Configuration\tConfigures how files are parsed (optional, see below)\tobject /parser/compression\tCompression\tDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.\tnull, string\tnull /parser/format\tFormat\tDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.\tobject\t{"type":"auto"} Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tPrefix\tPath to the captured directory.\tstring\tRequired ","version":"Next","tagName":"h2"},{"title":"Sample​","type":1,"pageTitle":"SFTP","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/#sample","content":" captures: ${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-sftp:dev" config: address: myserver.com:22 username: <SECRET> password: <SECRET> directory: /data parser: compression: zip format: type: csv config: delimiter: "," encoding: UTF-8 errorThreshold: 5 headers: [ID, username, first_name, last_name] lineEnding: "\\\\r" quote: '"' bindings: - resource: stream: /data target: ${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Advanced: Parsing SFTP Files​","type":1,"pageTitle":"SFTP","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/#advanced-parsing-sftp-files","content":" SFTP servers can support a wider variety of file types than other data source systems. For each of these file types, Flow must parse and translate data into collections with defined fields and JSON schemas. By default, the parser will automatically detect the type and shape of the data in your bucket, so you won't need to change the parser configuration for most captures. However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector. The parser configuration includes: Compression: Specify how the bucket contents are compressed. If no compression type is specified, the connector will try to determine the compression type automatically. Options are: zipgzipzstdnone Format: Specify the data format, which determines how it will be parsed. Options are: Auto: If no format is specified, the connector will try to determine it automatically.AvroCSVJSONProtobufW3C Extended Log info At this time, Flow only supports SFTP captures with data of a single file type. Support for multiple file types, which can be configured on a per-binding basis, will be added in the future. For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type. CSV configuration​ CSV files include several additional properties that are important to the parser. In most cases, Flow is able to automatically determine the correct values, but you may need to specify for unusual datasets. These properties are: Delimiter. Options are: Comma (",")Pipe ("|")Space ("0x20")Semicolon (";")Tab ("0x09")Vertical tab ("0x0B")Unit separator ("0x1F")SOH ("0x01")Auto Encoding type, specified by its WHATWG label. Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture. Escape characters. Options are: Backslash ("\\\\")Disable escapes ("")Auto Optionally, a list of column Headers, if not already included in the first row of the CSV file. If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file. Line ending values CRLF ("\\\\r\\\\n") (Windows)CR ("\\\\r")LF ("\\\\n")Record Separator ("0x1E")Auto Quote character Double Quote ("\\"")Single Quote (")Disable Quoting ("")Auto The sample specification above includes these fields. ","version":"Next","tagName":"h3"},{"title":"Snapchat Marketing","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Snapchat Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/#supported-data-resources","content":" This connector can be used to sync the following tables from Snapchat: AdaccountsAdsAdsquadsCampaignsCreativesMediaOrganizationsSegmentsAdaccountsStatsHourlyAdaccountsStatsDailyAdaccountsStatsLifetimeAdsStatsHourlyAdsStatsDailyAdsStatsHourlyAdsStatsDailyAdsStatsLifetimeAdsquadsStatsDailyAdsquadsStatsLifetimeCampaignsStatsHourlyCampaignsStatsDailyCampaignsStatsLifetime By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Snapchat Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/#prerequisites","content":" A Snapchat Marketing account with permission to access data from accounts you want to sync. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Snapchat Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Snapchat source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Snapchat Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tDefault /end_date\tEnd Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Snapchat project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Snapchat Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-snapchat:dev config: start_date: 2017-01-25T00:00:00Z end_date: 2018-01-25T00:00:00Z bindings: - resource: stream: lists syncMode: full_refresh target: ${PREFIX}/lists {...} ","version":"Next","tagName":"h3"},{"title":"Snowflake CDC Connector","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#prerequisites","content":" To use this connector, you'll need: A Snowflake account that includes: A target database containing the tables you want to capture from.A virtual warehouse which the connector can use to execute queries.A schema which will hold streams and staging tables managed by the connector. The default name for this schema is ESTUARY_STAGING unless overridden in the capture's advanced configuration.A user with access grants for these resources, as well as authorization to read from the desired source tables, and to create streams and transient tables in the staging schema based on the source tables. The host URL for your Snowflake account. This is formatted using your Snowflake account identifier, and might look something like sg31386.snowflakecomputing.com or df98701.us-central1.gcp.snowflakecomputing.com. See the script below for details. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#setup","content":" To set up a user account and warehouse for use with the Snowflake CDC connector, copy and paste the following script into the Snowflake SQL editor. Modify the variable declarations in the first few lines to set the password and optionally customize the names involved. set database_name = 'SOURCE_DB'; -- The database to capture from set warehouse_name = 'ESTUARY_WH'; -- The warehouse to execute queries in set estuary_user = 'ESTUARY_USER'; -- The name of the capture user set estuary_password = 'secret'; -- The password of the capture user set estuary_role = 'ESTUARY_ROLE'; -- A role for the capture user's permissions -- Create a role and user for Estuary create role if not exists identifier($estuary_role); grant role identifier($estuary_role) to role SYSADMIN; create user if not exists identifier($estuary_user) password = $estuary_password default_role = $estuary_role default_warehouse = $warehouse_name; grant role identifier($estuary_role) to user identifier($estuary_user); -- Create a warehouse for Estuary and grant access to it create warehouse if not exists identifier($warehouse_name) warehouse_size = xsmall warehouse_type = standard auto_suspend = 60 auto_resume = true initially_suspended = true; grant USAGE on warehouse identifier($warehouse_name) to role identifier($estuary_role); -- Grant Estuary access to read from all tables in the database and to create a staging schema grant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role); grant USAGE on future schemas in database identifier($database_name) to role identifier($estuary_role); grant USAGE on all schemas in database identifier($database_name) to role identifier($estuary_role); grant SELECT on future tables in database identifier($database_name) to role identifier($estuary_role); grant SELECT on all tables in database identifier($database_name) to role identifier($estuary_role); commit; Be sure to run the entire script with the "Run All" option. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#configuration","content":" You can configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Snowflake CDC source connector. ","version":"Next","tagName":"h2"},{"title":"Endpoint Properties​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#endpoint-properties","content":" Property\tTitle\tDescription\tType\tRequired/Default/host\tHost URL\tThe Snowflake Host used for the connection. Example: orgname-accountname.snowflakecomputing.com (do not include the protocol).\tstring\tRequired /account\tAccount\tThe Snowflake account identifier\tstring\tRequired /database\tDatabase\tThe name of the Snowflake database to capture from\tstring\tRequired /user\tUser\tThe Snowflake user login name\tstring\tRequired /password\tPassword\tThe password for the specified login user\tstring\tRequired /warehouse\tWarehouse\tThe Snowflake virtual warehouse used to execute queries. The default warehouse for the user will be used if this is blank.\tstring /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/flowSchema\tFlow Schema\tThe schema in which Flow will create and manage its streams and staging tables.\tstring\tESTUARY_STAGING ","version":"Next","tagName":"h3"},{"title":"Binding Properties​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#binding-properties","content":" Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tThe name of the table to capture\tstring\tRequired /schema\tSchema\tThe schema in which the table resides\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Polling Interval​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#polling-interval","content":" Keeping a Snowflake compute warehouse active 24/7 can be prohibitively expensive for many users, so the Snowflake CDC connector is designed to poll for changes at a configurable interval, at which time it will capture into Flow all new changes since the previous execution. This polling interval is set to 5 minutes by default, in an attempt to strike a balance between cost savings while still providing "good enough" capture latency for most streaming uses. The interval may be configured by editing the task spec interval property as described here. Specifying a smaller interval can provide even lower capture latencies but is likely to incur higher costs for Snowflake warehouse usage. A higher interval will reduce Snowflake costs by allowing the warehouse to be idle for longer, in cases where it's okay for the captured data to lag the source dataset by a few hours. Note that regardless of the polling interval the output collections will contain an accurate representation of the source tables up to some moment in time, the interval merely controls how frequent and fine-grained the updates are. ","version":"Next","tagName":"h3"},{"title":"Sample Configuration​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#sample-configuration","content":" captures: ${prefix}/source-snowflake: endpoint: connector: image: ghcr.io/estuary/source-snowflake:v1 config: host: cf22902.us-central1.gcp.snowflakecomputing.com account: cf22902 database: SOURCE_DB user: ESTUARY_USER password: secret bindings: - resource: schema: ${schema_name} table: ${table_name} target: ${prefix}/collection_name interval: 30m ","version":"Next","tagName":"h3"},{"title":"Microsoft SQL Server","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#supported-versions-and-platforms","content":" This connector will work on both hosted deployments and all major cloud providers. It is designed for databases using any version of SQL Server which has CDC support, and is regularly tested against SQL Server 2017 and up. Setup instructions are provided for the following platforms: Self-hosted SQL ServerAzure SQL DatabaseAmazon RDS for SQL ServerGoogle Cloud SQL for SQL Server ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#prerequisites","content":" To capture change events from SQL Server tables using this connector, you need: For each table to be captured, a primary key should be specified in the database. If a table doesn't have a primary key, you must manually specify a key in the associated Flow collection definition while creating the capture.See detailed steps. CDC enabledon the database and the individual tables to be captured. (This creates change tables in the database, from which the connector reads.) A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. A user role with: SELECT permissions on the CDC schema and the schemas that contain tables to be captured.Access to the change tables created as part of the SQL Server CDC process.SELECT, INSERT, and UPDATE permissions on the watermarks table ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#setup","content":" To meet these requirements, follow the steps for your hosting type. Self-hosted SQL ServerAzure SQL DatabaseAmazon RDS for SQL Server)Google Cloud SQL for SQL Server ","version":"Next","tagName":"h2"},{"title":"Self-hosted SQL Server​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#self-hosted-sql-server","content":" Connect to the server and issue the following commands: USE <database>; -- Enable CDC for the database. EXEC sys.sp_cdc_enable_db; -- Create user and password for use with the connector. CREATE LOGIN flow_capture WITH PASSWORD = 'secret'; CREATE USER flow_capture FOR LOGIN flow_capture; -- Grant the user permissions on the CDC schema and schemas with data. -- This assumes all tables to be captured are in the default schema, `dbo`. -- Add similar queries for any other schemas that contain tables you want to capture. GRANT SELECT ON SCHEMA :: dbo TO flow_capture; GRANT SELECT ON SCHEMA :: cdc TO flow_capture; -- Create the watermarks table and grant permissions. CREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT); GRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture; -- Enable CDC on tables. The below query enables CDC the watermarks table ONLY. -- You should add similar query for all other tables you intend to capture. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture'; Allow secure connection to Estuary Flow from your hosting environment. Either: Set up an SSH server for tunneling. When you fill out the endpoint configuration, include the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networksfor additional details and a sample. Allowlist the Estuary IP addresses in your firewall rules. ","version":"Next","tagName":"h3"},{"title":"Azure SQL Database​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#azure-sql-database","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Create a new firewall rule that grants access to the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Enable CDC for the database. EXEC sys.sp_cdc_enable_db; -- Create user and password for use with the connector. CREATE LOGIN flow_capture WITH PASSWORD = 'secret'; CREATE USER flow_capture FOR LOGIN flow_capture; -- Grant the user permissions on the CDC schema and schemas with data. -- This assumes all tables to be captured are in the default schema, `dbo`. -- Add similar queries for any other schemas that contain tables you want to capture. GRANT SELECT ON SCHEMA :: dbo TO flow_capture; GRANT SELECT ON SCHEMA :: cdc TO flow_capture; -- Create the watermarks table and grant permissions. CREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT); GRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture; -- Enable CDC on tables. The below query enables CDC the watermarks table ONLY. -- You should add similar query for all other tables you intend to capture. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture'; Note the following important items for configuration: Find the instance's host under Server Name. The port is always 1433. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SQL Server source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"dbo.flow_watermarks" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /primary_key\tPrimary Key Columns\tarray\tThe columns which together form the primary key of the table.\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-sqlserver:dev" config: address: "<host>:1433" database: "my_db" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: dbo primary_key: ["id"] target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Specifying Flow collection keys​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#specifying-flow-collection-keys","content":" Every Flow collection must have a key. As long as your SQL Server tables have a primary key specified, the connector will set the corresponding collection's key accordingly. In cases where a SQL Server table you want to capture doesn't have a primary key, you can manually add it to the collection definition during the capture creation workflow. After you input the endpoint configuration and click Next, the tables in your database have been mapped to Flow collections. Click each collection's Specification tab and identify a collection where "key": [ ], is empty. Click inside the empty key value in the editor and input the name of column in the table to use as the key, formatted as a JSON pointer. For example "key": ["/foo"], Make sure the key field is required, not nullable, and of an allowed type. Make any other necessary changes to the collection specification to accommodate this. Repeat with other missing collection keys, if necessary. Save and publish the capture as usual. ","version":"Next","tagName":"h2"},{"title":"Amazon RDS for SQL Server","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#supported-versions-and-platforms","content":" This connector designed for databases using any version of SQL Server which has CDC support, and is regularly tested against SQL Server 2017 and up. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#prerequisites","content":" To capture change events from SQL Server tables using this connector, you need: For each table to be captured, a primary key should be specified in the database. If a table doesn't have a primary key, you must manually specify a key in the associated Flow collection definition while creating the capture.See detailed steps. CDC enabledon the database and the individual tables to be captured. (This creates change tables in the database, from which the connector reads.) A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. A user role with: SELECT permissions on the CDC schema and the schemas that contain tables to be captured.Access to the change tables created as part of the SQL Server CDC process.SELECT, INSERT, and UPDATE permissions on the watermarks table To meet these requirements, follow the steps for your hosting type. Self-hosted SQL ServerAzure SQL DatabaseAmazon RDS for SQL ServerGoogle Cloud SQL for SQL Server ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#setup","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the database, setting Public accessibility to Yes.Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database as described in the Amazon documentation.Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Enable CDC for the database. EXEC msdb.dbo.rds_cdc_enable_db; -- Create user and password for use with the connector. CREATE LOGIN flow_capture WITH PASSWORD = 'secret'; CREATE USER flow_capture FOR LOGIN flow_capture; -- Grant the user permissions on the CDC schema and schemas with data. -- This assumes all tables to be captured are in the default schema, `dbo`. -- Add similar queries for any other schemas that contain tables you want to capture. GRANT SELECT ON SCHEMA :: dbo TO flow_capture; GRANT SELECT ON SCHEMA :: cdc TO flow_capture; -- Create the watermarks table and grant permissions. CREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT); GRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture; -- Enable CDC on tables. The below query enables CDC the watermarks table ONLY. -- You should add similar query for all other tables you intend to capture. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture'; In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SQL Server source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"dbo.flow_watermarks" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /primary_key\tPrimary Key Columns\tarray\tThe columns which together form the primary key of the table.\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-sqlserver:dev" config: address: "<host>:1433" database: "my_db" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: dbo primary_key: ["id"] target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Specifying Flow collection keys​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#specifying-flow-collection-keys","content":" Every Flow collection must have a key. As long as your SQL Server tables have a primary key specified, the connector will set the corresponding collection's key accordingly. In cases where a SQL Server table you want to capture doesn't have a primary key, you can manually add it to the collection definition during the capture creation workflow. After you input the endpoint configuration and click Next, the tables in your database have been mapped to Flow collections. Click each collection's Specification tab and identify a collection where "key": [ ], is empty. Click inside the empty key value in the editor and input the name of column in the table to use as the key, formatted as a JSON pointer. For example "key": ["/foo"], Make sure the key field is required, not nullable, and of an allowed type. Make any other necessary changes to the collection specification to accommodate this. Repeat with other missing collection keys, if necessary. Save and publish the capture as usual. ","version":"Next","tagName":"h2"},{"title":"Google Cloud SQL for SQL Server","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#supported-versions-and-platforms","content":" This connector is designed for databases using any version of SQL Server which has CDC support, and is regularly tested against SQL Server 2017 and up. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#prerequisites","content":" To capture change events from SQL Server tables using this connector, you need: For each table to be captured, a primary key should be specified in the database. If a table doesn't have a primary key, you must manually specify a key in the associated Flow collection definition while creating the capture.See detailed steps. CDC enabledon the database and the individual tables to be captured. (This creates change tables in the database, from which the connector reads.) A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. A user role with: SELECT permissions on the CDC schema and the schemas that contain tables to be captured.Access to the change tables created as part of the SQL Server CDC process.SELECT, INSERT, and UPDATE permissions on the watermarks table ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#setup","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Enable public IP on your database and add the Estuary Flow IP addresses as authorized IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Enable CDC for the database. EXEC msdb.dbo.gcloudsql_cdc_enable_db '<database>'; -- Create user and password for use with the connector. CREATE LOGIN flow_capture WITH PASSWORD = 'Secret123!'; CREATE USER flow_capture FOR LOGIN flow_capture; -- Grant the user permissions on the CDC schema and schemas with data. -- This assumes all tables to be captured are in the default schema, `dbo`. -- Add similar queries for any other schemas that contain tables you want to capture. GRANT SELECT ON SCHEMA :: dbo TO flow_capture; GRANT SELECT ON SCHEMA :: cdc TO flow_capture; -- Create the watermarks table and grant permissions. CREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT); GRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture; -- Enable CDC on tables. The below query enables CDC the watermarks table ONLY. -- You should add similar query for all other tables you intend to capture. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture'; In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 1433. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SQL Server source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"dbo.flow_watermarks" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /primary_key\tPrimary Key Columns\tarray\tThe columns which together form the primary key of the table.\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-sqlserver:dev" config: address: "<host>:1433" database: "my_db" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: dbo primary_key: ["id"] target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Specifying Flow collection keys​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#specifying-flow-collection-keys","content":" Every Flow collection must have a key. As long as your SQL Server tables have a primary key specified, the connector will set the corresponding collection's key accordingly. In cases where a SQL Server table you want to capture doesn't have a primary key, you can manually add it to the collection definition during the capture creation workflow. After you input the endpoint configuration and click Next, the tables in your database have been mapped to Flow collections. Click each collection's Specification tab and identify a collection where "key": [ ], is empty. Click inside the empty key value in the editor and input the name of column in the table to use as the key, formatted as a JSON pointer. For example "key": ["/foo"], Make sure the key field is required, not nullable, and of an allowed type. Make any other necessary changes to the collection specification to accommodate this. Repeat with other missing collection keys, if necessary. Save and publish the capture as usual. ","version":"Next","tagName":"h2"},{"title":"Survey Monkey","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#supported-data-resources","content":" The following data resources are supported: SurveysSurvey pagesSurvey questionsSurvey responses By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#prerequisites","content":" You'll need to configure a SurveyMonkey private app to integrate with Flow. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#setup","content":" Go to your your SurveyMonkey apps page and create a new private app.Set the following required scopes: View surveysView responses Deploy the app. This requires a paid SurveyMonkey plan; otherwise, the app will be deleted in 90 days. Once the app is set up, there are two ways to authenticate SurveyMonkey in Flow: using OAuth in the web app, or using an access token with the flowctl CLI. OAuth authentication in the web app​ You'll need the username and password of a SurveyMonkey user that is part of the teamfor which the private app was created. Manual authentication with flowctl​ Note the client ID, secret, and access token for the private app you created. You'll use these in the connector configuration. ","version":"Next","tagName":"h3"},{"title":"Performance considerations​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#performance-considerations","content":" The SurveyMonkey API imposes call limits of 500 per day and 120 per minute. This connector uses caching to avoid exceeding these limits. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SurveyMonkey source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials\tCredentials for the service\tobject\tRequired /credentials/access_token\tAccess Token\tAccess Token for your SurveyMonkey private app.\tstring\tRequired /credentials/client_id\tClient ID\tClient ID associated with your SurveyMonkey private app.\tstring\tRequired /credentials/client_secret\tClient Secret\tClient secret associated with your SurveyMonkey private app.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired /survey_ids\tSurvey Monkey survey IDs\tIDs of the surveys from which you'd like to replicate data. If left empty, data from all boards to which you have access will be replicated.\tarray\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tSurveyMonkey resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-surveymonkey:dev config: credentials: access_token: {secret} client_id: XXXXXXXXXXXXXXXX client_secret: {secret} start_date: 2021-01-25T00:00:00Z bindings: - resource: stream: surveys syncMode: incremental target: ${PREFIX}/surveys {...} ","version":"Next","tagName":"h3"},{"title":"Stripe","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Stripe","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/#supported-data-resources","content":" The following data resources are supported through the Stripe API: Balance transactionsBank accountsChargesCheckout sessionsCheckout sessions line itemsCouponsCustomer balance transactionsCustomersDisputesEventsInvoice itemsInvoice line itemsInvoicesPayment intentsPayoutsPlansProductsPromotion codesRefundsSubscription itemsSubscriptionsTransfers By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Stripe","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/#prerequisites","content":" Account ID of your Stripe account.Secret key for the Stripe API. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Stripe","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Stripe source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Stripe","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/account_id\tAccount ID\tYour Stripe account ID (starts with 'acct_', find yours here https://dashboard.stripe.com/settings/account\tstring\tRequired /client_secret\tSecret Key\tStripe API key (usually starts with 'sk_live_'; find yours here https://dashboard.stripe.com/apikeys\tstring\tRequired /lookback_window_days\tLookback Window in days (Optional)\tWhen set, the connector will always re-export data from the past N days, where N is the value set here. This is useful if your data is frequently updated after creation.\tinteger\t0 /start_date\tReplication start date\tUTC date and time in the format 2017-01-25T00:00:00Z. Only data generated after this date will be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource from Stripe from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Choosing your start date and lookback window​","type":1,"pageTitle":"Stripe","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/#choosing-your-start-date-and-lookback-window","content":" The connector will continually capture data beginning on the Replication start date you choose. However, some data from the Stripe API is mutable; for example, a draft invoice can be completed at a later date than it was created. To account for this, it's useful to set the Lookback Window. When this is set, at a given point in time, the connector will not only look for new data; it will also capture changes made to data within the window. For example, if you start the connector with the start date of 2022-06-06T00:00:00Z (June 6) and the lookback window of 3, the connector will begin to capture data starting from June 3. As time goes on while the capture remains active, the lookback window rolls forward along with the current timestamp. On June 10, the connector will continue to monitor data starting from June 7 and capture any changes to that data, and so on. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Stripe","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-stripe:dev config: account_id: 00000000 client_secret: <secret> start_date: 2022-06-18T00:00:00Z bindings: - resource: stream: balance_transactions syncMode: incremental target: ${PREFIX}/balancetransactions - resource: stream: bank_accounts syncMode: full_refresh target: ${PREFIX}/bankaccounts - resource: stream: charges syncMode: incremental target: ${PREFIX}/charges - resource: stream: checkout_sessions syncMode: incremental target: ${PREFIX}/checkoutsessions - resource: stream: checkout_sessions_line_items syncMode: incremental target: ${PREFIX}/checkoutsessionslineitems - resource: stream: coupons syncMode: incremental target: ${PREFIX}/coupons - resource: stream: customer_balance_transactions syncMode: full_refresh target: ${PREFIX}/customerbalancetransactions - resource: stream: customers syncMode: incremental target: ${PREFIX}/customers - resource: stream: disputes syncMode: incremental target: ${PREFIX}/disputes - resource: stream: events syncMode: incremental target: ${PREFIX}/events - resource: stream: invoice_items syncMode: incremental target: ${PREFIX}/invoice_items - resource: stream: invoice_line_items syncMode: full_refresh target: ${PREFIX}/invoicelineitems - resource: stream: invoices syncMode: incremental target: ${PREFIX}/invoices - resource: stream: payment_intents syncMode: incremental target: ${PREFIX}/paymentintents - resource: stream: payouts syncMode: incremental target: ${PREFIX}/payouts - resource: stream: plans syncMode: incremental target: ${PREFIX}/plans - resource: stream: products syncMode: incremental target: ${PREFIX}/products - resource: stream: promotion_codes syncMode: incremental target: ${PREFIX}/promotioncodes - resource: stream: refunds syncMode: incremental target: ${PREFIX}/refunds - resource: stream: subscription_items syncMode: full_refresh target: ${PREFIX}/subscriptionitems - resource: stream: subscriptions syncMode: incremental target: ${PREFIX}/subscriptions - resource: stream: transfers syncMode: incremental target: ${PREFIX}/transfers ","version":"Next","tagName":"h3"},{"title":"TikTok Marketing","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#supported-data-resources","content":" The following data resources are supported: Resource\tProduction\tSandboxAdvertisers\tX\tX Ad Groups\tX\tX Ads\tX\tX Campaigns\tX\tX Ads Reports Hourly\tX\tX Ads Reports Daily\tX\tX Ads Reports Lifetime\tX\tX Advertisers Reports Hourly\tX Advertisers Reports Daily\tX Advertisers Reports Lifetime\tX Ad Groups Reports Hourly\tX\tX Ad Groups Reports Daily\tX\tX Ad Groups Reports Lifetime\tX\tX Campaigns Reports Hourly\tX\tX Campaigns Reports Daily\tX\tX Campaigns Reports Lifetime\tX\tX Advertisers Audience Reports Hourly\tX Advertisers Audience Reports Daily\tX Advertisers Audience Reports Lifetime\tX Ad Group Audience Reports Hourly\tX\tX Ad Group Audience Reports Daily\tX\tX Ads Audience Reports Hourly\tX\tX Ads Audience Reports Daily\tX\tX Campaigns Audience Reports By Country Hourly\tX\tX Campaigns Audience Reports By Country Daily\tX\tX By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#prerequisites","content":" Prerequisites differ depending on whether you have a production or sandboxTikTok for Business account, and on whether you'll use the Flow web app or the flowctl CLI. ","version":"Next","tagName":"h2"},{"title":"OAuth authentication in the web app (production accounts)​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#oauth-authentication-in-the-web-app-production-accounts","content":" If you have a TikTok marketing account in production and will use the Flow web app, you'll be able to quickly log in using OAuth. You'll need: A TikTok for Business account with one or more active campaigns. Note the username and password used to sign into this account ","version":"Next","tagName":"h3"},{"title":"Sandbox access token authentication in the web app or CLI​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#sandbox-access-token-authentication-in-the-web-app-or-cli","content":" If you're working in a Sandbox TikTok for Business account, you'll authenticate with an access token in both the web app and CLI. You'll need: A TikTok for Business account. A Sandbox account created under an existingdeveloper application. Generate an access token and note the advertiser ID for the Sandbox. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the TikTok Marketing source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method for Sandbox accounts. If you're using a production account, you'll use OAuth2 to authenticate in the Flow web app, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tAuthentication Method\tAuthentication method\tobject\tRequired /credentials/auth_type\tAuthentication type\tSet to sandbox_access_token to manually authenticate a Sandbox.\tstring\tRequired /credentials/advertiser_id\tAdvertiser ID\tThe Advertiser ID generated for the developer's Sandbox application.\tstring /credentials/access_token\tAccess Token\tThe long-term authorized access token.\tstring /end_date\tEnd Date\tThe date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DD. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the data till the current date.\tstring /report_granularity\tReport Aggregation Granularity\tThe granularity used for aggregating performance data in reports. Choose DAY, LIFETIME, or HOUR.\tstring /start_date\tStart Date\tReplication Start Date\tThe Start Date in format: YYYY-MM-DD. Any data before this date will not be replicated. If this parameter is not set, all data will be replicated.\tstring Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tTikTok resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#sample","content":" This sample specification reflects the access token method for Sandbox accounts. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-tiktok-marketing:dev config: credentials: auth_type: sandbox_access_token access_token: {secret} advertiser_id: {secret} end_date: 2022-01-01 report_granularity: DAY start_date: 2020-01-01 bindings: - resource: stream: campaigns syncMode: incremental target: ${PREFIX}/campaigns {...} ","version":"Next","tagName":"h3"},{"title":"Report aggregation​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#report-aggregation","content":" Many of the resources this connector supports are reports. Data in these reports is aggregated into rows based on the granularity you select in the configuration. You can choose hourly, daily, or lifetime granularity. For example, if you choose daily granularity, the report will contain one row for each day. ","version":"Next","tagName":"h2"},{"title":"WooCommerce","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#prerequisites","content":" To set up the WooCommerce source connector with: you need: WooCommerce 3.5+WordPress 4.4+Pretty permalinks in Settings > Permalinks so that the custom endpoints are supported. e.g. /%year%/%monthnum%/%day%/%postname%/A new API key with read permissions and access to Customer key and Customer Secret. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#setup","content":" Follow the steps below to set up the WooCommerce source connector. ","version":"Next","tagName":"h2"},{"title":"Set up WooCommerce​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#set-up-woocommerce","content":" Generate a new Rest API key.Obtain Customer key and Customer Secret. ","version":"Next","tagName":"h3"},{"title":"Set up the WooCommerce connector in Estuary Flow​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#set-up-the-woocommerce-connector-in-estuary-flow","content":" Log into your Estuary Flow account.In the left navigation bar, click on "Captures". In the top-left corner, click "Connector Search".Enter the name for the WooCommerce connector and select "WooCommerce" from the dropdown.Fill in "Customer key" and "Customer Secret" with the data from Step 1 of this guide.Fill in "Shop Name". For example, if your shop URL is https://EXAMPLE.com, the shop name is 'EXAMPLE.com'.Choose the start date you want to start syncing data from. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the WooCommerce source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/customer_key\tCustomer Key\tCustomer Key for API in WooCommerce shop\tstring\tRequired /customer_secret\tCustomer Secret\tCustomer Secret for API in WooCommerce shop\tstring\tRequired /shop_name\tShop Name\tThe name of the store.\tstring\tRequired /start_date\tStart Date\tThe date you would like to replicate data from. Format: YYYY-MM-DD\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your WooCommerce project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#sample","content":" { "properties": { } } ","version":"Next","tagName":"h3"},{"title":"Supported Streams​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#supported-streams","content":" The WooCommerce source connector in Estuary Flow supports the following streams: Coupons (Incremental)Customers (Incremental)Orders (Incremental)Order notesPayment gatewaysProduct attribute termsProduct attributesProduct categoriesProduct reviews (Incremental)Product shipping classesProduct tagsProduct variationsProducts (Incremental)RefundsShipping methodsShipping zone locationsShipping zone methodsShipping zonesSystem status toolsTax classesTax rates ","version":"Next","tagName":"h2"},{"title":"Connector-Specific Features & Highlights​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#connector-specific-features--highlights","content":" Useful links: WooCommerce Rest API Docs. ","version":"Next","tagName":"h2"},{"title":"YouTube Analytics","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"YouTube Analytics","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/#supported-data-resources","content":" The following data resources are supported through the YouTube Analytics APIs: channel_annotations_a1channel_basic_a2channel_cards_a1channel_combined_a2channel_demographics_a1channel_device_os_a2channel_end_screens_a1channel_playback_location_a2channel_province_a2channel_sharing_service_a1channel_subtitles_a2channel_traffic_source_a2playlist_basic_a1playlist_combined_a1playlist_device_os_a1playlist_playback_location_a1playlist_province_a1playlist_traffic_source_a1 By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"YouTube Analytics","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the YouTube Analytics source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"YouTube Analytics","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/client_id\tClient ID\tYour Client ID\tstring\tRequired /client_secret\tSecret Key\tYour Client Secret\tstring\tRequired /refresh_token\tRefresh Token\tYour Refresh Token\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your YouTube Analytics project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"YouTube Analytics","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-youtube-analytics:dev config: credentials: auth_type: OAuth bindings: - resource: stream: channel_annotations_a1 syncMode: incremental target: ${PREFIX}/channel_annotations_a1 {...} ","version":"Next","tagName":"h3"},{"title":"Zendesk Chat","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Zendesk Chat","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/#supported-data-resources","content":" The following data resources are supported through the Zendesk API: AccountsAgentsAgent TimelinesChatsShortcutsTriggersBansDepartmentsGoalsSkillsRolesRouting Settings By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Zendesk Chat","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/#prerequisites","content":" A Zendesk Account with permission to access data from accounts you want to sync.An Access Token. We recommend creating a restricted, read-only key specifically for Estuary access to allow you to control which resources Estuary should be able to access. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Zendesk Chat","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification files. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Zendesk Chat source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Zendesk Chat","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/start_date\tStart Date\tThe date from which you would like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.\tstring\tRequired /subdomain\tSubdomain\tThis is your Zendesk subdomain that can be found in your account URL.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource in Zendesk from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Zendesk Chat","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-zendesk-chat:dev config: credentials: access_token: <secret> credentials: access_token start_date: 2022-03-01T00:00:00Z subdomain: my_subdomain bindings: - resource: stream: accounts syncMode: full_refresh target: ${PREFIX}/accounts ","version":"Next","tagName":"h3"},{"title":"Twilio","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Twilio","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/#supported-data-resources","content":" The following data resources are supported through the Twilio APIs: AccountsAddressesAlertsApplicationsAvailable Phone Number CountriesAvailable Phone Numbers LocalAvailable Phone Numbers MobileAvailable Phone Numbers Toll FreeCallsConference ParticipantsConferencesConversationsConversation MessagesConversation ParticipantsDependent Phone NumbersExecutionsIncoming Phone NumbersFlowsKeysMessage MediaMessagesOutgoing Caller IdsQueuesRecordingsTranscriptionsUsage RecordsUsage Triggers By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Twilio","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/#prerequisites","content":" Twilio Auth Token for authentication. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Twilio","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Twilio source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Twilio","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/account_sid\tAccount ID\tTwilio account SID\tstring\tRequired /auth_token\tAuth Token\tTwilio Auth Token.\tstring\tRequired /start_date\tReplication Start Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired /lookback_window\tLookback window\tHow far into the past to look for records. (in minutes)\tinteger\tDefault Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Twilio project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Twilio","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-twilio:dev config: account_sid: <your account ID> auth_token: <secret> start_date: 2017-01-25T00:00:00Z lookback_window: 7 bindings: - resource: stream: accounts syncMode: full_refresh target: ${PREFIX}/accounts {...} ","version":"Next","tagName":"h3"},{"title":"Dekaf integrations","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/dekaf/","content":"","keywords":"","version":"Next"},{"title":"Available Dekaf integrations​","type":1,"pageTitle":"Dekaf integrations","url":"/pr-preview/pr-1594/reference/Connectors/dekaf/#available-dekaf-integrations","content":" Tinybird ","version":"Next","tagName":"h2"},{"title":"Tinybird","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Tinybird","url":"/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird/#prerequisites","content":" An Estuary account & collectionA Tinybird account & Workspace Connecting Estuary Flow to Tinybird Create a new access token to use for the Tinybird connection. You can do this from the Estuary Admin Dashboard.In your Tinybird Workspace, create a new Data Source and use the Kafka Connector. To configure the connection details, use the following settings. Bootstrap servers: dekaf.estuary.devSASL Mechanism: PLAINSASL Username: {}SASL Password: Estuary Refresh Token (Generate your token in the Estuary Admin Dashboard) Tick the Decode Avro messages with Schema Register box, and use the following settings: URL: https://dekaf.estuary.devUsername: {}Password: The same Estuary Refresh Token as above Click Next and you will see a list of topics. These topics are the collections you have in Estuary. Select the collection you want to ingest into Tinybird, and click Next. Configure your consumer group as needed. Finally, you will see a preview of the Data Source schema. Feel free to make any modifications as required, then click Create Data Source. This will complete the connection with Tinybird, and new data from the Estuary Flow collection will arrive in your Tinybird Data Source in real-time. ","version":"Next","tagName":"h2"},{"title":"Materialization connectors","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/","content":"","keywords":"","version":"Next"},{"title":"Available materialization connectors​","type":1,"pageTitle":"Materialization connectors","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/#available-materialization-connectors","content":" AlloyDB ConfigurationPackage - ghcr.io/estuary/materialize-alloydb:dev Amazon DynamoDB ConfigurationPackage - ghcr.io/estuary/materialize-dynamodb:dev Amazon Redshift ConfigurationPackage - ghcr.io/estuary/materialize-redshift:dev Amazon SQL Server ConfigurationPackage - ghcr.io/estuary/materialize-amazon-rds-sqlserver:dev Apache Iceberg Tables in S3 ConfigurationPackage — ghcr.io/estuary/materialize-s3-iceberg:dev Apache Parquet Files in GCS ConfigurationPackage — ghcr.io/estuary/materialize-gcs-parquet:dev Apache Parquet Files in S3 ConfigurationPackage — ghcr.io/estuary/materialize-s3-parquet:dev Azure SQL Server Configuration CSV Files in GCS ConfigurationPackage — ghcr.io/estuary/materialize-gcs-csv:dev CSV Files in S3 ConfigurationPackage — ghcr.io/estuary/materialize-s3-csv:dev Databricks ConfigurationPackage — ghcr.io/estuary/materialize-databricks:dev Elasticsearch ConfigurationPackage — ghcr.io/estuary/materialize-elasticsearch:dev Firebolt ConfigurationPackage - ghcr.io/estuary/materialize-firebolt:dev Google BigQuery ConfigurationPackage — ghcr.io/estuary/materialize-bigquery:dev Google Cloud Pub/Sub ConfigurationPackage - ghcr.io/estuary/materialize-google-pubsub:dev Google Cloud SQL Server ConfigurationPackage = ghcr.io/estuary/materialize-google-cloud-sql-sqlserver:dev MongoDB ConfigurationPackage - ghcr.io/estuary/materialize-mongodb:dev MotherDuck ConfigurationPackage - ghcr.io/estuary/materialize-motherduck:dev MySQL ConfigurationPackage - ghcr.io/estuary/materialize-mysql:dev Pinecone ConfigurationPackage — ghcr.io/estuary/materialize-pinecone:dev PostgreSQL ConfigurationPackage — ghcr.io/estuary/materialize-postgres:dev Rockset ConfigurationPackage — ghcr.io/estuary/materialize-rockset:dev Snowflake ConfigurationPackage — ghcr.io/estuary/materialize-snowflake:dev SQLite ConfigurationPackage — ghcr.io/estuary/materialize-sqlite:dev SQL Server ConfigurationPackage - ghcr.io/estuary/materialize-sqlserver:dev TimescaleDB ConfigurationPackage - ghcr.io/estuary/materialize-timescaledb:dev ","version":"Next","tagName":"h2"},{"title":"Amazon DynamoDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/#prerequisites","content":" To use this connector, you'll need: An IAM user with the followingpermissions: BatchGetItem on all resourcesBatchWriteItem on all resourcesCreateTable on all resources These permissions should be specified with the dynamodb: prefix in an IAM policy document. For more details and examples, see Using identity-based policies with Amazon DynamoDBin the Amazon docs. The AWS access key and secret access key for the user. See the AWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Collection Requirements​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/#collection-requirements","content":" Materialized collections can have at most 2 collection keys. By default, the materialized tables will include the collection keys as the DynamoDB partition key and sort key, and the root document. The root document is materialized as "flow_document" unless an alternate projection is configured for the source collection. Additional fields may be included, but DynamoDB has a 400KB size limit on an individual row so selecting too many fields of a collection with large documents will cause errors if the row size exceeds that. The root document is materialized as a DynamoDB Map type, and the fields of the document must be valid DynamoDB Map keys. To resolve issues with collections with more than 2 keys, excessively large documents, or incompatible field names, use a derivation to derive a new collection and materialize that collection instead. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the DynamoDB materialization connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/awsAccessKeyId\tAccess Key ID\tAWS Access Key ID for materializing to DynamoDB.\tstring\tRequired /awsSecretAccessKey\tSecret Access Key\tAWS Secret Access Key for materializing to DynamoDB.\tstring\tRequired /region\tAWS Region\tRegion of the materialized tables.\tstring\tRequired advanced/endpoint\tAWS Endpoint\tThe AWS endpoint URI to connect to. Use if you're materializing to a compatible API that isn't provided by AWS.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable Name\tThe name of the table to be materialized to.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates. Default is false.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/#sample","content":" materializations: ${PREFIX}/${MATERIALIZATION_NAME}: endpoint: connector: image: ghcr.io/estuary/materialize-dynamodb:dev config: awsAccessKeyId: "example-aws-access-key-id" awsSecretAccessKey: "example-aws-secret-access-key" region: "us-east-1" bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Zendesk Support","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#supported-data-resources","content":" The following data resources are supported through the Zendesk API: Account attributesAttribute definitionsAudit logsBrandsCustom rolesGroup membershipsGroupsMacrosOrganizationsOrganization membershipsPostsPost commentsPost comment votesPost votesSatisfaction ratingsSchedulesSLA policiesTagsTicket auditsTicket commentsTicket fieldsTicket formsTicket metricsTicket metric eventsTicket skipsTicketsUsers By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#prerequisites","content":" There are two different ways to authenticate with Zendesk Support when capturing data into Flow: using OAuth2 or providing an API token. The prerequisites for both authentication methods are listed below. ","version":"Next","tagName":"h2"},{"title":"OAuth2 authentication​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#oauth2-authentication","content":" Subdomain of your Zendesk URL. In the URL https://MY_SUBDOMAIN.zendesk.com/, MY_SUBDOMAIN is the subdomain. ","version":"Next","tagName":"h3"},{"title":"API token authentication​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#api-token-authentication","content":" Subdomain of your Zendesk URL. In the URL https://MY_SUBDOMAIN.zendesk.com/, MY_SUBDOMAIN is the subdomain.Email address associated with your Zendesk account.A Zendesk API token. See the Zendesk docs to enable tokens and generate a new token. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification files. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Zendesk Support source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/credentials/credentials\tCredentials method\tType of credentials used. Set to api_token or oauth2.0.\tstring\tRequired /credentials/api_token\tAPI Token\tThe value of the API token generated.\tstring\tRequired for API token authentication /credentials/email\tEmail\tThe user email for your Zendesk account.\tstring\tRequired for API token authentication /credentials/client_id\tOAuth Client ID\tThe OAuth app's client ID.\tstring\tRequired for OAuth2 authentication /credentials/client_secret\tOAuth Client Secret\tThe OAuth app's client secret.\tstring\tRequired for OAuth2 authentication /credentials/access_token\tAccess Token\tThe access token received from the OAuth app.\tstring\tRequired for OAuth2 authentication /start_date\tStart Date\tThe date from which you'd like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.\tstring\tRequired /subdomain\tSubdomain\tThis is your Zendesk subdomain that can be found in your account URL. For example, in https://MY_SUBDOMAIN.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource in Zendesk from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired cursorField\tCursor Field\tField to use as a cursor when paginating through results. Required when syncMode is incremental.\tstring\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-zendesk-support:dev config: credentials: api_token: <secret> credentials: api_token email: user@domain.com start_date: 2022-03-01T00:00:00Z subdomain: my_subdomain bindings: - resource: stream: account_attributes syncMode: full_refresh target: ${PREFIX}/accountattributes - resource: stream: attribute_definitions syncMode: full_refresh target: ${PREFIX}/attributedefinitions - resource: stream: audit_logs syncMode: incremental cursorField: - created_at target: ${PREFIX}/auditlogs - resource: stream: brands syncMode: full_refresh target: ${PREFIX}/brands - resource: stream: custom_roles syncMode: full_refresh target: ${PREFIX}/customroles - resource: stream: group_memberships syncMode: incremental cursorField: - updated_at target: ${PREFIX}/groupmemberships - resource: stream: groups syncMode: incremental cursorField: - updated_at target: ${PREFIX}/groups - resource: stream: macros syncMode: incremental cursorField: - updated_at target: ${PREFIX}/macros - resource: stream: organizations syncMode: incremental cursorField: - updated_at target: ${PREFIX}/organizations - resource: stream: organization_memberships syncMode: incremental cursorField: - updated_at target: ${PREFIX}/organizationmemberships - resource: stream: posts syncMode: incremental cursorField: - updated_at target: ${PREFIX}/posts - resource: stream: post_comments syncMode: full_refresh target: ${PREFIX}/postcomments - resource: stream: post_comment_votes syncMode: full_refresh target: ${PREFIX}/postcommentvotes - resource: stream: post_votes syncMode: full_refresh target: ${PREFIX}/postvotes - resource: stream: satisfaction_ratings syncMode: incremental cursorField: - updated_at target: ${PREFIX}/satisfactionratings - resource: stream: schedules syncMode: full_refresh target: ${PREFIX}/schedules - resource: stream: sla_policies syncMode: full_refresh target: ${PREFIX}/slapoliciies - resource: stream: tags syncMode: full_refresh target: ${PREFIX}/tags - resource: stream: ticket_audits syncMode: incremental cursorField: - created_at target: ${PREFIX}/ticketaudits - resource: stream: ticket_comments syncMode: incremental cursorField: - created_at target: ${PREFIX}/ticketcomments - resource: stream: ticket_fields syncMode: incremental cursorField: - updated_at target: ${PREFIX}/ticketfields - resource: stream: ticket_forms syncMode: incremental cursorField: - updated_at target: ${PREFIX}/ticketforms - resource: stream: ticket_metrics syncMode: incremental cursorField: - updated_at target: ${PREFIX}/ticketmetrics - resource: stream: ticket_metric_events syncMode: incremental cursorField: - time target: ${PREFIX}/ticketmetricevents - resource: stream: ticket_skips syncMode: incremental cursorField: - updated_at target: ${PREFIX}/ticketskips - resource: stream: tickets syncMode: incremental cursorField: - after_cursor target: ${PREFIX}/tickets - resource: stream: users syncMode: incremental cursorField: - after_cursor target: ${PREFIX}/users ","version":"Next","tagName":"h3"},{"title":"AlloyDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/#prerequisites","content":" To use this connector, you'll need: An AlloyDB database to which to materialize, and user credentials. The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.A virtual machine to connect securely to the instance via SSH tunneling. (AlloyDB doesn't support IP allowlisting.) Follow the instructions to create a virtual machine for SSH tunnelingin the same Google Cloud project as your instance. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a AlloyDB materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/#properties","content":" Endpoint​ The SSH config section is required for this connector. You'll fill in the database address with a localhost IP address, and specify your VM's IP address as the SSH address. See the table below and the sample config. Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring /address\tAddress\tHost and port. Set to 127.0.0.1:5432 to enable SSH tunneling.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /schema\tDatabase Schema\tDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables\tstring\t"public" /user\tUser\tDatabase user to connect as.\tstring\tRequired networkTunnel\tNetwork Tunnel\tConnect to your system through an SSH server that acts as a bastion host for your network.\tObject networkTunnel/sshForwarding\tSSH Forwarding Object networkTunnel/sshForwarding/sshEndpoint\tSSH Endpoint\tEndpoint of the remote SSH server (in this case, your Google Cloud VM) that supports tunneling (in the form of ssh://user@address.\tString networkTunnel/sshForwarding/privateKey\tSSH Private Key\tPrivate key to connect to the remote SSH server.\tString\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/additional_table_create_sql\tAdditional Table Create SQL\tAdditional SQL statement(s) to be run in the same transaction that creates the table.\tstring /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse /schema\tAlternative Schema\tAlternative schema for this table (optional). Overrides schema set in endpoint configuration.\tstring /table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-alloydb:dev config: database: postgres address: 127.0.0.1:5432 password: flow user: flow networkTunnel: sshForwarding: sshEndpoint: ssh://sshUser@<vm-ip-address> privateKey: |2 -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCJO7G6R+kv2MMS8Suw21sk2twHg8Vog0fjimEWJEwyAfFM/Toi EJ6r5RTaSvN++/+MPWUll7sUdOOBZr6ErLKLHEt7uXxusAzOjMxFKZpEARMcjwHY v/tN1A2OYU0qay1DOwknEE0i+/Bvf8lMS7VDjHmwRaBtRed/+iAQHf128QIDAQAB AoGAGoOUBP+byAjDN8esv1DCPU6jsDf/Tf//RbEYrOR6bDb/3fYW4zn+zgtGih5t CR268+dwwWCdXohu5DNrn8qV/Awk7hWp18mlcNyO0skT84zvippe+juQMK4hDQNi ywp8mDvKQwpOuzw6wNEitcGDuACx5U/1JEGGmuIRGx2ST5kCQQDsstfWDcYqbdhr 5KemOPpu80OtBYzlgpN0iVP/6XW1e5FCRp2ofQKZYXVwu5txKIakjYRruUiiZTza QeXRPbp3AkEAlGx6wMe1l9UtAAlkgCFYbuxM+eRD4Gg5qLYFpKNsoINXTnlfDry5 +1NkuyiQDjzOSPiLZ4Abpf+a+myjOuNL1wJBAOwkdM6aCVT1J9BkW5mrCLY+PgtV GT80KTY/d6091fBMKhxL5SheJ4SsRYVFtguL2eA7S5xJSpyxkadRzR0Wj3sCQAvA bxO2fE1SRqbbF4cBnOPjd9DNXwZ0miQejWHUwrQO0inXeExNaxhYKQCcnJNUAy1J 6JfAT/AbxeSQF3iBKK8CQAt5r/LLEM1/8ekGOvBh8MAQpWBW771QzHUN84SiUd/q xR9mfItngPwYJ9d/pTO7u9ZUPHEoat8Ave4waB08DsI= -----END RSA PRIVATE KEY----- bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Reserved words​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/#reserved-words","content":" PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation. These reserve words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words abs\tcurrent_transform_group_for_type\tindicator\torder\tsqlexception absolute\tcurrent_user\tinitial\tout\tsqlstate acos\tcursor\tinitially\touter\tsqlwarning action\tcycle\tinner\toutput\tsqrt add\tdatalink\tinout\tover\tstart all\tdate\tinput\toverlaps\tstatic allocate\tday\tinsensitive\toverlay\tstddev_pop alter\tdeallocate\tinsert\tpad\tstddev_samp analyse\tdec\tint\tparameter\tsubmultiset analyze\tdecfloat\tinteger\tpartial\tsubset and\tdecimal\tintersect\tpartition\tsubstring any\tdeclare\tintersection\tpattern\tsubstring_regex are\tdefault\tinterval\tper\tsucceeds array\tdeferrable\tinto\tpercent\tsum array_agg\tdeferred\tis\tpercentile_cont\tsymmetric array_max_cardinality\tdefine\tisnull\tpercentile_disc\tsystem as\tdelete\tisolation\tpercent_rank\tsystem_time asc\tdense_rank\tjoin\tperiod\tsystem_user asensitive\tderef\tjson_array\tpermute\ttable asin\tdesc\tjson_arrayagg\tplacing\ttablesample assertion\tdescribe\tjson_exists\tportion\ttan asymmetric\tdescriptor\tjson_object\tposition\ttanh at\tdeterministic\tjson_objectagg\tposition_regex\ttemporary atan\tdiagnostics\tjson_query\tpower\tthen atomic\tdisconnect\tjson_table\tprecedes\ttime authorization\tdistinct\tjson_table_primitive\tprecision\ttimestamp avg\tdlnewcopy\tjson_value\tprepare\ttimezone_hour begin\tdlpreviouscopy\tkey\tpreserve\ttimezone_minute begin_frame\tdlurlcomplete\tlag\tprimary\tto begin_partition\tdlurlcompleteonly\tlanguage\tprior\ttrailing between\tdlurlcompletewrite\tlarge\tprivileges\ttransaction bigint\tdlurlpath\tlast\tprocedure\ttranslate binary\tdlurlpathonly\tlast_value\tptf\ttranslate_regex bit\tdlurlpathwrite\tlateral\tpublic\ttranslation bit_length\tdlurlscheme\tlead\trange\ttreat blob\tdlurlserver\tleading\trank\ttrigger boolean\tdlvalue\tleft\tread\ttrim both\tdo\tlevel\treads\ttrim_array by\tdomain\tlike\treal\ttrue call\tdouble\tlike_regex\trecursive\ttruncate called\tdrop\tlimit\tref\tuescape cardinality\tdynamic\tlistagg\treferences\tunion cascade\teach\tln\treferencing\tunique cascaded\telement\tlocal\tregr_avgx\tunknown case\telse\tlocaltime\tregr_avgy\tunmatched cast\tempty\tlocaltimestamp\tregr_count\tunnest catalog\tend\tlog\tregr_intercept\tupdate ceil\tend-exec\tlog10\tregr_r2\tupper ceiling\tend_frame\tlower\tregr_slope\tusage char\tend_partition\tmatch\tregr_sxx\tuser character\tequals\tmatches\tregr_sxy\tusing character_length\tescape\tmatch_number\tregr_syy\tvalue char_length\tevery\tmatch_recognize\trelative\tvalues check\texcept\tmax\trelease\tvalue_of classifier\texception\tmeasures\trestrict\tvarbinary clob\texec\tmember\tresult\tvarchar close\texecute\tmerge\treturn\tvariadic coalesce\texists\tmethod\treturning\tvarying collate\texp\tmin\treturns\tvar_pop collation\texternal\tminute\trevoke\tvar_samp collect\textract\tmod\tright\tverbose column\tfalse\tmodifies\trollback\tversioning commit\tfetch\tmodule\trollup\tview concurrently\tfilter\tmonth\trow\twhen condition\tfirst\tmultiset\trows\twhenever connect\tfirst_value\tnames\trow_number\twhere connection\tfloat\tnational\trunning\twidth_bucket constraint\tfloor\tnatural\tsavepoint\twindow constraints\tfor\tnchar\tschema\twith contains\tforeign\tnclob\tscope\twithin continue\tfound\tnew\tscroll\twithout convert\tframe_row\tnext\tsearch\twork copy\tfree\tno\tsecond\twrite corr\tfreeze\tnone\tsection\txml corresponding\tfrom\tnormalize\tseek\txmlagg cos\tfull\tnot\tselect\txmlattributes cosh\tfunction\tnotnull\tsensitive\txmlbinary count\tfusion\tnth_value\tsession\txmlcast covar_pop\tget\tntile\tsession_user\txmlcomment covar_samp\tglobal\tnull\tset\txmlconcat create\tgo\tnullif\tshow\txmldocument cross\tgoto\tnumeric\tsimilar\txmlelement cube\tgrant\toccurrences_regex\tsin\txmlexists cume_dist\tgroup\toctet_length\tsinh\txmlforest current\tgrouping\tof\tsize\txmliterate current_catalog\tgroups\toffset\tskip\txmlnamespaces current_date\thaving\told\tsmallint\txmlparse current_default_transform_group\thold\tomit\tsome\txmlpi current_path\thour\ton\tspace\txmlquery current_role\tidentity\tone\tspecific\txmlserialize current_row\tilike\tonly\tspecifictype\txmltable current_schema\timmediate\topen\tsql\txmltext current_time\timport\toption\tsqlcode\txmlvalidate current_timestamp\tin\tor\tsqlerror\tyear ","version":"Next","tagName":"h2"},{"title":"CSV Files in Amazon S3","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"CSV Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/#prerequisites","content":" To use this connector, you'll need: An S3 bucket to write files to. See this guide for instructions on setting up a new S3 bucket.An AWS root or IAM user with thes3:PutObject permission for the S3 bucket. For this user, you'll need the access key and secret access key. See the AWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"CSV Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/#configuration","content":" Use the below properties to configure the materialization, which will direct one or more of your Flow collections to your bucket. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"CSV Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/bucket\tBucket\tBucket to store materialized objects.\tstring\tRequired /awsAccessKeyId\tAWS Access Key ID\tAccess Key ID for writing data to the bucket.\tstring\tRequired /awsSecretAccessKey\tAWS Secret Access key\tSecret Access Key for writing data to the bucket.\tstring\tRequired /region\tRegion\tRegion of the bucket to write to.\tstring\tRequired /uploadInterval\tUpload Interval\tFrequency at which files will be uploaded.\tstring\t5m /prefix\tPrefix\tOptional prefix that will be used to store objects.\tstring /fileSizeLimit\tFile Size Limit\tApproximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank.\tinteger /endpoint\tCustom S3 Endpoint\tThe S3 endpoint URI to connect to. Use if you're materializing to a compatible API that isn't provided by AWS. Should normally be left blank.\tstring /csvConfig/delimiter\tDelimiter\tCharacter to separate columns within a row. Defaults to a comma if blank. Must be a single character with a byte length of 1.\tinteger /csvConfig/nullString\tNull String\tString to use to represent NULL values. Defaults to an empty string if blank.\tinteger /csvConfig/skipHeaders\tSkip Headers\tDo not write headers to files.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/path\tPath\tThe path that objects will be materialized to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"CSV Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-s3-csv:dev" config: bucket: bucket awsAccessKeyId: <access_key_id> awsSecretAccessKey: <secret_access_key> region: us-east-2 uploadInterval: 5m bindings: - resource: path: ${COLLECTION_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"File Names​","type":1,"pageTitle":"CSV Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/#file-names","content":" Materialized files are named with monotonically increasing integer values, padded with leading 0's so they remain lexically sortable. For example, a set of files may be materialized like this for a given collection: bucket/prefix/path/v0000000000/00000000000000000000.csv bucket/prefix/path/v0000000000/00000000000000000001.csv bucket/prefix/path/v0000000000/00000000000000000002.csv Here the values for bucket and prefix are from your endpoint configuration. The path is specific to the binding configuration. v0000000000 represents the current backfill counterfor binding and will be increased if the binding is re-backfilled, along with the file names starting back over from 0. ","version":"Next","tagName":"h2"},{"title":"Eventual Consistency​","type":1,"pageTitle":"CSV Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/#eventual-consistency","content":" In rare circumstances, recently materialized files may be re-written by files with the same name if the materialization shard is interrupted in the middle of processing a Flow transaction and the transaction must be re-started. Files that were committed as part of a completed transaction will never be re-written. In this way, eventually all collection data will be written to files effectively-once, although inconsistencies are possible when accessing the most recently written data. ","version":"Next","tagName":"h2"},{"title":"Amazon Redshift","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#prerequisites","content":" To use this connector, you'll need: A Redshift cluster accessible either directly or using an SSH tunnel. The user configured to connect to Redshift must have at least "create table" permissions for the configured schema. The connector will create new tables in the database per your specification. Tables created manually in advance are not supported. See setup for more information.An S3 bucket for staging temporary files. For best performance the bucket should be in the same region as your Redshift cluster. See this guide for instructions on setting up a new S3 bucket.An AWS root or IAM user with read and write accessto the S3 bucket. For this user, you'll need the access key and secret access key. See theAWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#configuration","content":" Use the below properties to configure an Amazon Redshift materialization, which will direct one or more of your Flow collections to your desired tables in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tHost and port of the database. Example: red-shift-cluster-name.account.us-east-2.redshift.amazonaws.com:5439\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /database\tDatabase\tName of the logical database to materialize to. The materialization will attempt to connect to the default database for the provided user if omitted.\tstring /schema\tDatabase Schema\tDatabase schema for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables.\tstring\t"public" /awsAccessKeyId\tAccess Key ID\tAWS Access Key ID for reading and writing data to the S3 staging bucket.\tstring\tRequired /awsSecretAccessKey\tSecret Access Key\tAWS Secret Access Key for reading and writing data to the S3 staging bucket.\tstring\tRequired /bucket\tS3 Staging Bucket\tName of the S3 bucket to use for staging data loads.\tstring\tRequired /region\tRegion\tRegion of the S3 staging bucket. For optimal performance this should be in the same region as the Redshift database cluster.\tstring\tRequired /bucketPath\tBucket Path\tA prefix that will be used to store objects in S3.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tName of the database table.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates. Default is false.\tboolean\tfalse /schema\tAlternative Schema\tAlternative schema for this table (optional).\tstring\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-redshift:dev" config: address: "redshift-cluster.account.us-east-2.redshift.amazonaws.com:5439" user: user password: password database: db awsAccessKeyId: access_key_id awsSecretAccessKey: secret_access_key bucket: my-bucket region: us-east-2 bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Sync Schedule​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#sync-schedule","content":" This connector supports configuring a schedule for sync frequency. You can read about how to configure this here. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#setup","content":" You must configure your cluster to allow connections from Estuary. This can be accomplished by making your cluster accessible over the internet for theEstuary Flow IP addresses, or using an SSH tunnel. Connecting to the S3 staging bucket does not use the network tunnel and connects over HTTPS only. Instructions for making a cluster accessible over the internet can be foundhere. When using this option, database connections are made over SSL only. For allowing secure connections via SSH tunneling: Refer to the guide to configure an SSH server on using an AWS EC2 instance. Configure your connector as described in the configuration section above, with the additional of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networks for additional details and a sample. ","version":"Next","tagName":"h2"},{"title":"Naming Conventions​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#naming-conventions","content":" Redshift has requirements for names and identifiers and this connector will automatically apply quoting when needed. All table identifiers and column identifiers (corresponding to Flow collection fields) are treated as lowercase, unless theenable_case_sensitive_identifierconfiguration is enabled on the cluster being materialized to. Table names for bindings must be unique on a case-insensitive basis, as well as field names of the source collection. If any names are not unique on a case-insensitive basis (ex: myField vs. MyField) the materialization will fail to apply. If necessary, you can add projections to your collection specification to change field names. ","version":"Next","tagName":"h2"},{"title":"Performance considerations​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#performance-considerations","content":" For best performance there should at most one Redshift materialization active per Redshift schema. Additional collections to be materialized should be added as bindings to this single materialization rather than creating a separate materialization for each collection. In order to achieve exactly-once processing of collection documents, the materialization creates and uses metadata tables located in the schema configured by the endpoint schema property. To commit a transaction, a table-level lock is acquired on these metadata tables. If there are multiple materializations using the same metadata tables, they will need to take turns acquiring these locks. This locking behavior prevents "serializable isolation violation" errors in the case of multiple materializations sharing the same metadata tables at the expense of allowing only a single materialization to be actively committing a transaction. ","version":"Next","tagName":"h2"},{"title":"Maximum record size​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#maximum-record-size","content":" The maximum size of a single input document is 4 MB. Attempting to materialize collections with documents larger than 4 MB will result in an error. To materialize this data you can use aderivation to create a derived collection with smaller documents, or exclude fields containing excessive amounts of data by customizing the materialized fields. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Apache Iceberg Tables in Amazon S3","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#prerequisites","content":" To use this connector, you'll need: An S3 bucket to write files to. See this guide for instructions on setting up a new S3 bucket.An AWS root or IAM user with access to AWS Glue. See this guide for instructions on setting up IAM permissions for a user to access AWS Glue. Make sure to select Read and write access for your bucket to enable the connector to write data.For this user, you'll need the access key and secret access key. See the AWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#configuration","content":" Use the below properties to configure the materialization, which will direct one or more of your Flow collections to your tables. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/aws_access_key_id\tAWS Access Key ID\tAccess Key ID for accessing AWS services.\tstring\tRequired /aws_secret_access_key\tAWS Secret Access key\tSecret Access Key for accessing AWS services.\tstring\tRequired /bucket\tBucket\tThe S3 bucket to write data files to.\tstring\tRequired /prefix\tPrefix\tOptional prefix that will be used to store objects.\tstring /region\tRegion\tAWS Region.\tstring\tRequired /namespace\tNamespace\tNamespace for bound collection tables (unless overridden within the binding resource configuration).\tstring\tRequired /upload_interval\tUpload Interval\tFrequency at which files will be uploaded. Must be a valid ISO8601 duration string no greater than 4 hours.\tstring\tPT5M Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tName of the database table.\tstring\tRequired /namespace\tAlternative Namespace\tAlternative namespace for this table (optional).\tstring /delta_updates\tDelta Updates\tShould updates to this table be done via delta updates. Currently this connector only supports delta updates.\tbool\ttrue ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-s3-iceberg:dev" config: aws_access_key_id: <access_key_id> aws_secret_access_key: <secret_access_key> bucket: bucket region: us-east-2 namespace: namespace upload_interval: PT5M bindings: - resource: table: ${COLLECTION_NAME} delta_updates: true source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Iceberg Column Types​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#iceberg-column-types","content":" Flow collection fields are written to Iceberg table columns based on the data type of the field. Iceberg V2 primitive type columns are created for these Flow collection fields: Collection Field Data Type\tIceberg Column Typearray\tstring object\tstring boolean\tboolean integer\tlong number\tdouble string with {contentEncoding: base64}\tbinary string with {format: date-time}\ttimestamptz (with microsecond precision) string with {format: date}\tdate string with {format: integer}\tlong string with {format: number}\tdouble string (all others)\tstring Flow collection fields with {type: string, format: time} and {type: string, format: uuid} are materialized as string columns rather than time and uuid columns for compatibility with Apache Spark. Nested types are not currently supported. ","version":"Next","tagName":"h2"},{"title":"Table Maintenance​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#table-maintenance","content":" To ensure optimal query performance, you should conduct regular maintenance for your materialized tables since the connector will not perform this maintenance automatically (support for automatic table maintenance is planned). If you're using the AWS Glue catalog, you can enable automatic data file compaction by followingthis guide. ","version":"Next","tagName":"h2"},{"title":"At-Least-Once Semantics​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#at-least-once-semantics","content":" In rare cases, it may be possible for documents from a source collection to be appended to a target table more than once. Users of materialized tables should take this possibility into consideration when querying these tables. ","version":"Next","tagName":"h2"},{"title":"Apache Parquet Files in Amazon S3","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#prerequisites","content":" To use this connector, you'll need: An S3 bucket to write files to. See this guide for instructions on setting up a new S3 bucket.An AWS root or IAM user with thes3:PutObject permission for the S3 bucket. For this user, you'll need the access key and secret access key. See the AWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#configuration","content":" Use the below properties to configure the materialization, which will direct one or more of your Flow collections to your bucket. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/bucket\tBucket\tBucket to store materialized objects.\tstring\tRequired /awsAccessKeyId\tAWS Access Key ID\tAccess Key ID for writing data to the bucket.\tstring\tRequired /awsSecretAccessKey\tAWS Secret Access key\tSecret Access Key for writing data to the bucket.\tstring\tRequired /region\tRegion\tRegion of the bucket to write to.\tstring\tRequired /uploadInterval\tUpload Interval\tFrequency at which files will be uploaded.\tstring\t5m /prefix\tPrefix\tOptional prefix that will be used to store objects.\tstring /fileSizeLimit\tFile Size Limit\tApproximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank.\tinteger /endpoint\tCustom S3 Endpoint\tThe S3 endpoint URI to connect to. Use if you're materializing to a compatible API that isn't provided by AWS. Should normally be left blank.\tstring /parquetConfig/rowGroupRowLimit\tRow Group Row Limit\tMaximum number of rows in a row group. Defaults to 1000000 if blank.\tinteger /parquetConfig/rowGroupByteLimit\tRow Group Byte Limit\tApproximate maximum number of bytes in a row group. Defaults to 536870912 (512 MiB) if blank.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/path\tPath\tThe path that objects will be materialized to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-s3-parquet:dev" config: bucket: bucket awsAccessKeyId: <access_key_id> awsSecretAccessKey: <secret_access_key> region: us-east-2 uploadInterval: 5m bindings: - resource: path: ${COLLECTION_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Parquet Data Types​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#parquet-data-types","content":" Flow collection fields are written to Parquet files based on the data type of the field. Depending on the field data type, the Parquet data type may be a primitive Parquet type, or a primitive Parquet type extended by alogical Parquet type. Collection Field Data Type\tParquet Data Type\tarray\tJSON (extends BYTE_ARRAY) object\tJSON (extends BYTE_ARRAY) boolean\tBOOLEAN integer\tINT64 number\tDOUBLE string with {contentEncoding: base64}\tBYTE_ARRAY string with {format: date}\tDATE (extends BYTE_ARRAY) string with {format: date-time}\tTIMESTAMP (extends INT64, UTC adjusted with microsecond precision) string with {format: time}\tTIME (extends INT64, UTC adjusted with microsecond precision) string with {format: date}\tDATE (extends INT32) string with {format: duration}\tINTERVAL (extends FIXED_LEN_BYTE_ARRAY with a length of 12) string with {format: uuid}\tUUID (extends FIXED_LEN_BYTE_ARRAY with a length of 16) string (all others)\tSTRING (extends BYTE_ARRAY)\t ","version":"Next","tagName":"h2"},{"title":"File Names​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#file-names","content":" Materialized files are named with monotonically increasing integer values, padded with leading 0's so they remain lexically sortable. For example, a set of files may be materialized like this for a given collection: bucket/prefix/path/v0000000000/00000000000000000000.parquet bucket/prefix/path/v0000000000/00000000000000000001.parquet bucket/prefix/path/v0000000000/00000000000000000002.parquet Here the values for bucket and prefix are from your endpoint configuration. The path is specific to the binding configuration. v0000000000 represents the current backfill counterfor binding and will be increased if the binding is re-backfilled, along with the file names starting back over from 0. ","version":"Next","tagName":"h2"},{"title":"Eventual Consistency​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#eventual-consistency","content":" In rare circumstances, recently materialized files may be re-written by files with the same name if the materialization shard is interrupted in the middle of processing a Flow transaction and the transaction must be re-started. Files that were committed as part of a completed transaction will never be re-written. In this way, eventually all collection data will be written to files effectively-once, although inconsistencies are possible when accessing the most recently written data. ","version":"Next","tagName":"h2"},{"title":"Google BigQuery","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#prerequisites","content":" To use this connector, you'll need: A new Google Cloud Storage bucket in the same region as the BigQuery destination dataset. A Google Cloud service account with a key file generated and the following roles: roles/bigquery.dataEditor on the destination datasetroles/bigquery.jobUser on the project with which the BigQuery destination dataset is associatedroles/storage.objectAdminon the GCS bucket created above See Setup for detailed steps to set up your service account. tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#setup","content":" To configure your service account, complete the following steps. Log into the Google Cloud console and create a service account. During account creation: Grant the user access to the project.Grant the user roles roles/bigquery.dataEditor, roles/bigquery.jobUser, and roles/storage.objectAdmin.Click Done. Select the new service account from the list of service accounts. On the Keys tab, click Add key and create a new JSON key. The key is automatically downloaded. You'll use it to configure the connector. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a BigQuery materialization, which will direct one or more of your Flow collections to your desired tables within a BigQuery dataset. A BigQuery dataset is the top-level container within a project, and comprises multiple tables. You can think of a dataset as somewhat analogous to a schema in a relational database. For a complete introduction to resource organization in Bigquery, see the BigQuery docs. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/project_id\tProject ID\tThe project ID for the Google Cloud Storage bucket and BigQuery dataset.\tString\tRequired /credentials_json\tService Account JSON\tThe JSON credentials of the service account to use for authorization.\tString\tRequired /region\tRegion\tThe GCS region.\tString\tRequired /dataset\tDataset\tBigQuery dataset for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables.\tString\tRequired /bucket\tBucket\tName of the GCS bucket.\tString\tRequired /bucket_path\tBucket path\tBase path within the GCS bucket. Also called "Folder" in the GCS console.\tString /billing_project_id\tBilling project ID\tThe project ID to which these operations are billed in BigQuery. Typically, you want this to be the same as project_id (the default).\tString\tSame as project_id To learn more about project billing, see the BigQuery docs. Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable in the BigQuery dataset to store materialized result in.\tstring\tRequired /dataset\tTable\tAlternative dataset for this table. Must be located in the region set in the endpoint configuration.\tstring /delta_updates\tDelta updates.\tWhether to use standard or delta updates\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: project_id: our-bigquery-project dataset: materialized-data region: US bucket: our-gcs-bucket bucket_path: bucket-path/ credentials_json: <secret> image: ghcr.io/estuary/materialize-bigquery:dev bindings: - resource: table: ${table_name} source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Sync Schedule​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#sync-schedule","content":" This connector supports configuring a schedule for sync frequency. You can read about how to configure this here. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. Enabling delta updates will prevent Flow from querying for documents in your BigQuery table, which can reduce latency and costs for large datasets. If you're certain that all events will have unique keys, enabling delta updates is a simple way to improve performance with no effect on the output. However, enabling delta updates is not suitable for all workflows, as the resulting table in BigQuery won't be fully reduced. You can enable delta updates on a per-binding basis: bindings: - resource: table: ${table_name} delta_updates: true source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h2"},{"title":"Table Partitioning​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#table-partitioning","content":" Tables are automatically created withclustering based on the Flow collection primary keys. Tables are not created with any other partitioning, but pre-existing partitioned tables can be materialized to. It isn't possible to alter the partitioning of an existing table, but you can convert an existing table to one with partitioning by creating a new table and copying the data from the existing table into it. This can be done to tables that the connector is materializing to, as long as the materializing task is temporarily disabled while doing the conversion. To convert an existing materialized table to one with different partitioning: Pause your materialization by disabling it from the UI or editing the task specification with the CLI.Create a new table with the partitioning you want from the data in the existing table: create table <your_dataset>.<your_schema>.<your_table>_copy partition by <your_partitioning> as select * from <your_dataset>.<your_schema>.<your_table>; Verify that the data in <your_table>_copy looks good, then drop the original table: drop table <your_dataset>.<your_schema>.<your_table>; "Rename" <your_table>_copy back to <your_table> by copying it as a new table with the original name of <your_table>: create table <your_dataset>.<your_schema>.<your_table> copy <your_dataset>.<your_schema>.<your_table>_copy; Verify that the data in <your_table> looks good, then drop the <your_table>_copy table: drop table <your_dataset>.<your_schema>.<your_table>_copy; Re-enable the materialization to continue materializing data to the now partitioned table. ","version":"Next","tagName":"h2"},{"title":"Databricks","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#prerequisites","content":" To use this connector, you'll need: A Databricks account that includes: A unity catalogA SQL WarehouseA schema — a logical grouping of tables in a catalogA user with a role assigned that grants the appropriate access levels to these resources. At least one Flow collection tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#setup","content":" You need to first create a SQL Warehouse if you don't already have one in your account. See Databricks documentation on configuring a Databricks SQL Warehouse. After creating a SQL Warehouse, you can find the details necessary for connecting to it under the Connection Details tab. In order to save on costs, we recommend that you set the Auto Stop parameter for your SQL warehouse to the minimum available. Estuary's Databricks connector automatically delays updates to the destination according to the configured Sync Schedule (see configuration details below), with a default delay value of 30 minutes. You also need an access token for your user to be used by our connector, see the respective documentation from Databricks on how to create an access token. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Databricks materialization, which will direct one or more of your Flow collections to new Databricks tables. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tHost and port of the SQL warehouse (in the form of host[:port]). Port 443 is used as the default if no specific port is provided.\tstring\tRequired /http_path\tHTTP Path\tHTTP path of your SQL warehouse\tstring\tRequired /catalog_name\tCatalog Name\tName of your Unity Catalog\tstring\tRequired /schema_name\tSchema Name\tDefault schema to materialize to\tstring\tdefault schema is used /credentials\tCredentials\tAuthentication credentials\tobject /credentials/auth_type\tRole\tAuthentication type, set to PAT for personal access token\tstring\tRequired /credentials/personal_access_token\tRole\tPersonal Access Token\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name\tstring\tRequired /schema\tAlternative Schema\tAlternative schema for this table\tstring\tRequired /delta_updates\tDelta updates\tWhether to use standard or delta updates\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: address: dbc-abcdefgh-a12b.cloud.databricks.com catalog_name: main http_path: /sql/1.0/warehouses/abcd123efgh4567 schema_name: default credentials: auth_type: PAT personal_access_token: secret image: ghcr.io/estuary/materialize-databricks:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: table: ${table_name} schema: default source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Sync Schedule​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#sync-schedule","content":" This connector supports configuring a schedule for sync frequency. You can read about how to configure this here. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. Enabling delta updates will prevent Flow from querying for documents in your Databricks table, which can reduce latency and costs for large datasets. If you're certain that all events will have unique keys, enabling delta updates is a simple way to improve performance with no effect on the output. However, enabling delta updates is not suitable for all workflows, as the resulting table in Databricks won't be fully reduced. You can enable delta updates on a per-binding basis: bindings: - resource: table: ${table_name} schema: default delta_updates: true source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#reserved-words","content":" Databricks has a list of reserved words that must be quoted in order to be used as an identifier. Flow automatically quotes fields that are in the reserved words list. You can find this list in Databricks's documentation here and in the table below. caution In Databricks, objects created with quoted identifiers must always be referenced exactly as created, including the quotes. Otherwise, SQL statements and queries can result in errors. See the Databricks docs. Reserved words\tANTI EXCEPT\tFULL INNER\tINTERSECT JOIN\tLATERAL LEFT\tMINUS NATURAL\tON RIGHT\tSEMI SEMI\tUSING NULL\tDEFAULT TRUE\tFALSE CROSS\t ","version":"Next","tagName":"h2"},{"title":"Elasticsearch","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#prerequisites","content":" To use this connector, you'll need: An Elastic cluster with a known endpointThe role used to connect to Elasticsearch must have at least the following privileges (see Elastic's documentation on defining roles and security privileges): Cluster privilege of monitorFor each index to be created: read, write, view_index_metadata, and create_index. When creating Index privileges, you can use a wildcard "*" to grant the privileges to all indices. At least one Flow collection tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure an Elasticsearch materialization, which will direct the contents of these Flow collections into Elasticsearch indices. Authentication You can authenticate to Elasticsearch using either a username and password, or using an API key. The connector will automatically create an Elasticsearch index for each binding of the materialization with index mappings for each selected field of the binding. It uses the last component of the collection name as the name of the index by default. You can customize the name of the index using the index property in the resource configuration for each binding. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/endpoint\tEndpoint\tEndpoint host or URL. Must start with http:// or https://. If using Elastic Cloud this follows the format https://CLUSTER_ID.REGION.CLOUD_PLATFORM.DOMAIN:PORT\tstring\tRequired /credentials object\tRequired /credentials/username\tUsername\tUsername to use for authenticating with Elasticsearch.\tstring /credentials/password\tPassword\tPassword to use for authenticating with Elasticsearch.\tstring /credentials/apiKey\tAPI Key\tAPI key for authenticating with the Elasticsearch API. Must be the 'encoded' API key credentials, which is the Base64-encoding of the UTF-8 representation of the id and api_key joined by a colon (:).\tstring advanced/number_of_replicas\tIndex Replicas\tThe number of replicas to create new indices with. Leave blank to use the cluster default.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/index\tindex\tName of the Elasticsearch index to store the materialization results.\tstring\tRequired /delta_updates\tDelta updates\tWhether to use standard or delta updates.\tboolean\tfalse /number_of_shards\tNumber of shards\tThe number of shards to create the index with. Leave blank to use the cluster default.\tinteger\t1 ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#sample","content":" materializations: PREFIX/mat_name: endpoint: connector: # Path to the latest version of the connector, provided as a Docker image image: ghcr.io/estuary/materialize-elasticsearch:dev config: endpoint: https://ec47fc4d2c53414e1307e85726d4b9bb.us-east-1.aws.found.io:9243 credentials: username: flow_user password: secret # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: index: my-elasticsearch-index source: PREFIX/source_collection ","version":"Next","tagName":"h3"},{"title":"Setup​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#setup","content":" You must configure your Elasticsearch cluster to allow connections from Estuary. It may be necessary to allowlist the Estuary IP addresses. Alternatively, you can allow secure connections via SSH tunneling. To do so: Refer to the guide to configure an SSH server on the cloud platform of your choice. Configure your connector as described in the configuration section above, with the addition of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networks for additional details and a sample. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#delta-updates","content":" This connector supports both standard and delta updates. You must choose an option for each binding. Learn more about delta updates and the implications of using each update type. ","version":"Next","tagName":"h2"},{"title":"Keyword Fields​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#keyword-fields","content":" Collection fields with type: string will have keyword index mappings created for them if they are part of the collection key, and text mappings for them if they are not part of the collection key. To materialize a collection field with type: string as a keyword mapping instead of a textmapping, configure the field selection for the binding to indicate which fields should having keyword mappings created for them using the key and value of "keyword": true. This can be changed by updating the JSON in the Advanced Specification Editor in the web app or by using flowctl to edit the specification directly, seeedit a materialization for more details. An example JSON configuration for a binding that materializes stringField as a keyword mapping is shown below: { "bindings": [ { "resource": { "index": "my-elasticsearch-index" }, "source": "PREFIX/source_collection", "fields": { "include": { "stringField": { "keyword": true } }, "recommended": true } } ] } ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V3: 2023-08-21​ Index mappings will now be created based on the selected fields of the materialization. Previously only dynamic runtime mappings were created, and the entire root document was always materialized. Moved "number of replicas" configuration for new indices to an advanced, optional, endpoint-level configuration. The "number of shards" resource configuration is now optional. ","version":"Next","tagName":"h2"},{"title":"Firebolt","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#prerequisites","content":" To use this connector, you'll need: A Firebolt database with at least one engine The engine must be started before creating the materialization.It's important that the engine stays up throughout the lifetime of the materialization. To ensure this is the case, select Edit Engine on your engine. In the engine settings, set Auto-stop engine after to Always On. An S3 bucket where JSON documents will be stored prior to loading The bucket must be in a supported AWS region matching your Firebolt database.The bucket may be public, or may be accessible by an IAM user. To configure your IAM user, see the steps below. At least one Flow collection tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#setup","content":" For non-public buckets, you'll need to configure access in AWS IAM. Follow the Firebolt documentation to set up an IAM policy and role, and add it to the external table definition. Create a new IAM user. During setup: Choose Programmatic (access key) access. This ensures that an access key ID and secret access key are generated. You'll use these to configure the connector. On the Permissions page, choose Attach existing policies directly and attach the policy you created in step 1. After creating the user, download the IAM credentials file. Take note of the access key ID and secret access key and use them to configure the connector. See the Amazon docs if you lose your credentials. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Firebolt materialization, which will direct Flow data to your desired Firebolt tables via an external table. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/aws_key_id\tAWS key ID\tAWS access key ID for accessing the S3 bucket.\tstring /aws_region\tAWS region\tAWS region the bucket is in.\tstring /aws_secret_key\tAWS secret access key\tAWS secret key for accessing the S3 bucket.\tstring /database\tDatabase\tName of the Firebolt database.\tstring\tRequired /engine_url\tEngine URL\tEngine URL of the Firebolt database, in the format: <engine-name>.<organization>.<region>.app.firebolt.io.\tstring\tRequired /password\tPassword\tFirebolt password.\tstring\tRequired /s3_bucket\tS3 bucket\tName of S3 bucket where the intermediate files for external table will be stored.\tstring\tRequired /s3_prefix\tS3 prefix\tA prefix for files stored in the bucket.\tstring /username\tUsername\tFirebolt username.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tName of the Firebolt table to store materialized results in. The external table will be named after this table with an _external suffix.\tstring\tRequired /table_type\tTable type\tType of the Firebolt table to store materialized results in. See the Firebolt docs for more details.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: database: my-db engine_url: my-db-my-engine-name.my-organization.us-east-1.app.firebolt.io password: secret # For public S3 buckets, only the bucket name is required s3_bucket: my-bucket username: firebolt-user # Path to the latest version of the connector, provided as a Docker image image: ghcr.io/estuary/materialize-firebolt:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: table: table-name table_type: fact source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#delta-updates","content":" Firebolt is an insert-only system; it doesn't support updates or deletes. Because of this, the Firebolt connector operates only in delta updates mode. Firebolt stores all deltas — the unmerged collection documents — directly. In some cases, this will affect how materialized views look in Firebolt compared to other systems that use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#reserved-words","content":" Firebolt has a list of reserved words, which my not be used in identifiers. Collections with field names that include a reserved word will automatically be quoted as part of a Firebolt materialization. Reserved words all\tfalse\tor alter\tfetch\torder and\tfirst\touter array\tfloat\tover between\tfrom\tpartition bigint\tfull\tprecision bool\tgenerate\tprepare boolean\tgroup\tprimary both\thaving\tquarter case\tif\tright cast\tilike\trow char\tin\trows concat\tinner\tsample copy\tinsert\tselect create\tint\tset cross\tinteger\tshow current_date\tintersect\ttext current_timestamp\tinterval\ttime database\tis\ttimestamp date\tisnull\ttop datetime\tjoin\ttrailing decimal\tjoin_type\ttrim delete\tleading\ttrue describe\tleft\ttruncate distinct\tlike\tunion double\tlimit\tunknown_char doublecolon\tlimit_distinct\tunnest dow\tlocaltimestamp\tunterminated_string doy\tlong\tupdate drop\tnatural\tusing empty_identifier\tnext\tvarchar epoch\tnot\tweek except\tnull\twhen execute\tnumeric\twhere exists\toffset\twith explain\ton extract\tonly\t ","version":"Next","tagName":"h2"},{"title":"CSV Files in Google GCS","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"CSV Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/#prerequisites","content":" To use this connector, you'll need: A GCS bucket to write files to. See this guide for instructions on setting up a new GCS bucket.A Google Cloud service accountwith roles/storage.objectCreatorfor the GCS bucket created above.A key file for the service account. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"CSV Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/#configuration","content":" Use the below properties to configure the materialization, which will direct one or more of your Flow collections to your bucket. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"CSV Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/bucket\tBucket\tBucket to store materialized objects.\tstring\tRequired /credentialsJson\tService Account JSON\tThe JSON credentials of the service account to use for authorization.\tstring\tRequired /uploadInterval\tUpload Interval\tFrequency at which files will be uploaded.\tstring\t5m /prefix\tPrefix\tOptional prefix that will be used to store objects.\tstring /fileSizeLimit\tFile Size Limit\tApproximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank.\tinteger /csvConfig/delimiter\tDelimiter\tCharacter to separate columns within a row. Defaults to a comma if blank. Must be a single character with a byte length of 1.\tinteger /csvConfig/nullString\tNull String\tString to use to represent NULL values. Defaults to an empty string if blank.\tinteger /csvConfig/skipHeaders\tSkip Headers\tDo not write headers to files.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/path\tPath\tThe path that objects will be materialized to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"CSV Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-gcs-csv:dev" config: bucket: bucket credentialsJson: <credentialsJson> uploadInterval: 5m bindings: - resource: path: ${COLLECTION_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"File Names​","type":1,"pageTitle":"CSV Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/#file-names","content":" Materialized files are named with monotonically increasing integer values, padded with leading 0's so they remain lexically sortable. For example, a set of files may be materialized like this for a given collection: bucket/prefix/path/v0000000000/00000000000000000000.csv bucket/prefix/path/v0000000000/00000000000000000001.csv bucket/prefix/path/v0000000000/00000000000000000002.csv Here the values for bucket and prefix are from your endpoint configuration. The path is specific to the binding configuration. v0000000000 represents the current backfill counterfor binding and will be increased if the binding is re-backfilled, along with the file names starting back over from 0. ","version":"Next","tagName":"h2"},{"title":"Eventual Consistency​","type":1,"pageTitle":"CSV Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/#eventual-consistency","content":" In rare circumstances, recently materialized files may be re-written by files with the same name if the materialization shard is interrupted in the middle of processing a Flow transaction and the transaction must be re-started. Files that were committed as part of a completed transaction will never be re-written. In this way, eventually all collection data will be written to files effectively-once, although inconsistencies are possible when accessing the most recently written data. ","version":"Next","tagName":"h2"},{"title":"Apache Parquet Files in Google GCS","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#prerequisites","content":" To use this connector, you'll need: A GCS bucket to write files to. See this guide for instructions on setting up a new GCS bucket.A Google Cloud service accountwith roles/storage.objectCreatorfor the GCS bucket created above.A key file for the service account. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#configuration","content":" Use the below properties to configure the materialization, which will direct one or more of your Flow collections to your bucket. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/bucket\tBucket\tBucket to store materialized objects.\tstring\tRequired /credentialsJson\tService Account JSON\tThe JSON credentials of the service account to use for authorization.\tstring\tRequired /uploadInterval\tUpload Interval\tFrequency at which files will be uploaded.\tstring\t5m /prefix\tPrefix\tOptional prefix that will be used to store objects.\tstring /fileSizeLimit\tFile Size Limit\tApproximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank.\tinteger /parquetConfig/rowGroupRowLimit\tRow Group Row Limit\tMaximum number of rows in a row group. Defaults to 1000000 if blank.\tinteger /parquetConfig/rowGroupByteLimit\tRow Group Byte Limit\tApproximate maximum number of bytes in a row group. Defaults to 536870912 (512 MiB) if blank.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/path\tPath\tThe path that objects will be materialized to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-gcs-parquet:dev" config: bucket: bucket credentialsJson: <credentialsJson> uploadInterval: 5m bindings: - resource: path: ${COLLECTION_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Parquet Data Types​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#parquet-data-types","content":" Flow collection fields are written to Parquet files based on the data type of the field. Depending on the field data type, the Parquet data type may be a primitive Parquet type, or a primitive Parquet type extended by alogical Parquet type. Collection Field Data Type\tParquet Data Type\tarray\tJSON (extends BYTE_ARRAY) object\tJSON (extends BYTE_ARRAY) boolean\tBOOLEAN integer\tINT64 number\tDOUBLE string with {contentEncoding: base64}\tBYTE_ARRAY string with {format: date}\tDATE (extends BYTE_ARRAY) string with {format: date-time}\tTIMESTAMP (extends INT64, UTC adjusted with microsecond precision) string with {format: time}\tTIME (extends INT64, UTC adjusted with microsecond precision) string with {format: date}\tDATE (extends INT32) string with {format: duration}\tINTERVAL (extends FIXED_LEN_BYTE_ARRAY with a length of 12) string with {format: uuid}\tUUID (extends FIXED_LEN_BYTE_ARRAY with a length of 16) string (all others)\tSTRING (extends BYTE_ARRAY)\t ","version":"Next","tagName":"h2"},{"title":"File Names​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#file-names","content":" Materialized files are named with monotonically increasing integer values, padded with leading 0's so they remain lexically sortable. For example, a set of files may be materialized like this for a given collection: bucket/prefix/path/v0000000000/00000000000000000000.parquet bucket/prefix/path/v0000000000/00000000000000000001.parquet bucket/prefix/path/v0000000000/00000000000000000002.parquet Here the values for bucket and prefix are from your endpoint configuration. The path is specific to the binding configuration. v0000000000 represents the current backfill counterfor binding and will be increased if the binding is re-backfilled, along with the file names starting back over from 0. ","version":"Next","tagName":"h2"},{"title":"Eventual Consistency​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#eventual-consistency","content":" In rare circumstances, recently materialized files may be re-written by files with the same name if the materialization shard is interrupted in the middle of processing a Flow transaction and the transaction must be re-started. Files that were committed as part of a completed transaction will never be re-written. In this way, eventually all collection data will be written to files effectively-once, although inconsistencies are possible when accessing the most recently written data. ","version":"Next","tagName":"h2"},{"title":"Google Cloud Pub/Sub","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#prerequisites","content":" To use this connector, you'll need: A Google Cloud project with the Google Pub/Sub API enabled.Access to the project. Different items are required to configure access using OAuth in the Flow web app (recommended), and configuring manually.At least one Flow collection to materialize. tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"OAuth authentication using the Flow web app​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#oauth-authentication-using-the-flow-web-app","content":" OAuth is the simplest authentication method, and is supported in the Flow web app. You'll need: A Google account with the role roles/pubsub.editoror equivalent for the Google Cloud project. See the Google IAM documentation to learn about granting roles. You'll supply this account's username and password to authenticate. ","version":"Next","tagName":"h3"},{"title":"Manual authentication​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#manual-authentication","content":" Manual authentication is the only method supported when using flowctl to develop locally. You'll need: A Google service account with the role roles/pubsub.editoror equivalent for the Google Cloud project. See the Google IAM documentation to learn about granting roles. A JSON key for the service account. See the Google documentation for help creating a new service account and generating its key. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Google Cloud Pub/Sub materialization, which will direct one or more of your Flow collections to your desired Pub/Sub topics. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/credentials\tAuthentication\tCredentials used to authenticate with Google.\tarray, boolean, null, number, object, string\tRequired /credentials/auth_type\tAuthentication type\tSet to Service for manual authentication, or use OAuth in the web app.\tstring /credentials/credentials_json\tService Account JSON\tThe JSON key of the service account to use for authorization, if configuring manually.\tstring /project_id\tGoogle Cloud Project ID\tName of the project containing the PubSub topics for this materialization.\tstring\tRequired Bindings​ caution PubSub topics need a default subscription; otherwise, delivered messages will be lost. Leave Create with Default Subscription set to the default, true, unless you have a specific reason not to do so. Property\tTitle\tDescription\tType\tRequired/Default/create_default_subscription\tCreate with Default Subscription\tCreate a default subscription when creating the topic. Will be created as "<topic>-sub". Has no effect if the topic already exists.\tboolean\tRequired, true identifier\tResource Binding Identifier\tOptional identifier for the resource binding if creating a multiplex topic. Included as "identifier" attribute in published messages if specified.\tstring /topic\tTopic Name\tName of the topic to publish materialized results to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#sample","content":" This sample reflects the manual authentication method using the CLI. materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: credentials: auth_type: Service credentials_json: {secret} project_id: my_google_cloud_project bindings: - resource: create_default_subscription: true topic: my_new_topic source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Multiplex topics​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#multiplex-topics","content":" You can materialize multiple Flow collections to the same Pub/Sub topic. This is known as a multiplex topic. You do so by adding the optional identifier field to the binding configuration. When materializing to a multiplex topic, ensure that: The bindings you want to combine have the same topic name.Each binding pulls from a different Flow collectionEach binding has a unique identifier. It can be anything you'd like. The binding configuration will look similar to: bindings: - resource: identifier: one topic: multiplex-topic source: ${PREFIX}/source_collection_one - resource: identifier: two topic: multiplex-topic source: ${PREFIX}/source_collection_two ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#delta-updates","content":" Because Google Cloud Pub/Sub is a write-only event-streaming system, this connector uses only delta updates. ","version":"Next","tagName":"h2"},{"title":"Message ordering​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#message-ordering","content":" Google Cloud Pub/Sub manages message ordering using ordering keys. This connector sets the ordering key of published messages using the Flow collection keyof the documents being being published. Messages are published in order, on a per-key basis. ","version":"Next","tagName":"h2"},{"title":"HTTP Webhook","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"HTTP Webhook","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/#prerequisites","content":" To use this materialization connector, you’ll need the following: A server or service that can accept HTTP requests at the target endpoint.At least one Flow collection. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"HTTP Webhook","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/#configuration","content":" The Webhooks connector is available for use in the Flow web application. To learn more about connectors and setting them up, visit our guide on using connectors. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"HTTP Webhook","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/#properties","content":" ","version":"Next","tagName":"h2"},{"title":"Endpoint​","type":1,"pageTitle":"HTTP Webhook","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/#endpoint","content":" Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe URL of the endpoint to send data to.\tstring\tRequired /method\tHTTP Method\tHTTP method to use (e.g., POST or PUT).\tstring\tdefault: POST /headers\tHeaders\tAdditional headers to include in the HTTP request.\tobject\t ","version":"Next","tagName":"h3"},{"title":"Bindings​","type":1,"pageTitle":"HTTP Webhook","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/#bindings","content":" Property\tTitle\tDescription\tType\tRequired/Default/relativePath\tRelative Path\tThe relative path on the server where data will be sent.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"HTTP Webhook","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/#sample","content":" bindings: - source: ProductionData/orders/orderDetails resource: relativePath: webhook/estuary endpoint: connector: image: ghcr.io/estuary/materialize-webhook:v1 config: address: http://192.168.1.100:3000/ method: POST headers: Content-Type: application/json Authorization: Bearer <your_token> ","version":"Next","tagName":"h2"},{"title":"Google Sheets","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/#prerequisites","content":" To use this connector, you'll need: At least one Flow collection. If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. caution For performance reasons, this connector is limited to 1 million cells per materialized sheet. If a bound collection has more than 1 million unique keys, the materialization will fail. If you plan to materialize a collection with an unbounded number of keys, you should first use a derivation to summarize it into a collection with a bounded set of keys. The URL of a Google spreadsheet that does not contain the output of a prior Flow materialization. caution Materializing data to a spreadsheet that already contains the output of another Flow materialization can result in an error. Use a new spreadsheet for each materialization, or completely clear the output of prior materializations from the spreadsheet before you continue. There are two ways to authenticate with Google when using this connector: signing in with Google through OAuth in the web app, and configuring manually with a Google service account key. OAuth is simpler, and is recommended when using the web app. Only manual configuration is supported using the CLI. Additional prerequisites depend on the authentication method you choose. ","version":"Next","tagName":"h2"},{"title":"OAuth authentication using the Flow web app​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/#oauth-authentication-using-the-flow-web-app","content":" You'll need: The username and password of a Google account with edit access to the destination spreadsheet. ","version":"Next","tagName":"h3"},{"title":"Manual authentication​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/#manual-authentication","content":" You'll need: Google Sheets and Google Drive APIs enabled on your Google account. A Google service account with: A JSON key generated.Edit access to the destination spreadsheet. Follow the steps below to meet these prerequisites: Enable the Google Sheets and Google Drive APIs for the Google project with which your spreadsheet is associated. (Unless you actively develop with Google Cloud, you'll likely just have one option). Create a service account and generate a JSON key. During setup, grant the account the Editor role on your project. You'll copy the contents of the downloaded key file into the Service Account JSON parameter when you configure the connector. Share your Google spreadsheet with the service account, granting edit access. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Google Sheets materialization. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/#properties","content":" Endpoint​ The following properties reflect the manual authentication method. If you're working in the Flow web app, you can use OAuth, so some of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tAuthentication\tCredentials used to authenticate with Google.\tarray, boolean, null, number, object, string\tRequired /credentials/auth_type\tAuthentication type\tSet to Service for manual authentication, or use OAuth in the web app.\tstring /credentials/credentials_json\tService Account JSON\tThe JSON key of the service account to use for authorization, when using the Service authentication method.\tstring\tRequired /spreadsheetURL\tSpreadsheet URL\tURL of the spreadsheet to materialize into, which is shared with the service account.\tstring\tRequired Bindings​ Configure a separate binding for each collection you want to materialize to a sheet. Note that the connector will add an addition column to the beginning of each sheet; this is to track the internal state of the data. Property\tTitle\tDescription\tType\tRequired/Default/sheet\tSheet Name\tName of the spreadsheet sheet to materialize into\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/#sample","content":" This sample reflects the manual authentication method using the CLI. materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: credentials: auth_type: Service credentials_json: <secret> spreadsheetURL: `https://docs.google.com/spreadsheets/d/<your_spreadsheet_ID>/edit image: ghcr.io/estuary/materialize-google-sheets:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: sheet: my_sheet source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"MongoDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/","content":"","keywords":"","version":"Next"},{"title":"Data model​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#data-model","content":" MongoDB is a NoSQL database. Its data modelconsists of documents (lightweight records that contain mappings of fields and values) organized in collections. MongoDB documents have a mandatory_id field that is used as the key of the collection. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#prerequisites","content":" You'll need: Credentials for connecting to your MongoDB instance and database. Read and write access to your MongoDB database and desired collections. See Role-Based Access Control for more information. If you are using MongoDB Atlas, or your MongoDB provider requires allowlisting of IPs, you need to allowlist the Estuary IP addresses. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the Flow specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Firestore source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tHost and port of the database. Optionally can specify scheme for the URL such as mongodb+srv://host.\tstring\tRequired /database\tDatabase\tName of the database to capture from.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/collection\tStream\tCollection name\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#sample","content":" materializations: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/materialize-mongodb:dev config: address: "mongo:27017" database: "test" password: "flow" user: "flow" bindings: - resource: collection: users database: test source: ${PREFIX}/users ","version":"Next","tagName":"h3"},{"title":"SSH Tunneling​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#ssh-tunneling","content":" As an alternative to connecting to your MongoDB instance directly, you can allow secure connections via SSH tunneling. To do so: Refer to the guide to configure an SSH server on the cloud platform of your choice. Configure your connector as described in the configuration section above, with the addition of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networks for additional details and a sample. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"MotherDuck","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"MotherDuck","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/#prerequisites","content":" To use this connector, you'll need: A MotherDuck account and Service Token.An S3 bucket for staging temporary files. See this guide for instructions on setting up a new S3 bucket.An AWS root or IAM user with read and write accessto the S3 bucket. For this user, you'll need the access key and secret access key. See theAWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MotherDuck","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/#configuration","content":" Use the below properties to configure MotherDuck materialization, which will direct one or more of your Flow collections to your desired tables in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MotherDuck","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/token\tMotherDuck Service Token\tService token for authenticating with MotherDuck.\tstring\tRequired /database\tDatabase\tThe database to materialize to.\tstring\tRequired /schema\tDatabase Schema\tDatabase schema for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables.\tstring\tRequired /bucket\tS3 Staging Bucket\tName of the S3 bucket to use for staging data loads.\tstring\tRequired /awsAccessKeyId\tAccess Key ID\tAWS Access Key ID for reading and writing data to the S3 staging bucket.\tstring\tRequired /awsSecretAccessKey\tSecret Access Key\tAWS Secret Access Key for reading and writing data to the S3 staging bucket.\tstring\tRequired /bucketPath\tBucket Path\tA prefix that will be used to store objects in S3.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tName of the database table.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean /schema\tAlternative Schema\tAlternative schema for this table (optional).\tstring\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MotherDuck","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-motherduck:dev" config: token: <motherduck_service_token> database: my_db schema: main bucket: my_bucket awsAccessKeyId: <access_key_id> awsSecretAccessKey: <secret_access_key> bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"MotherDuck","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. Enabling delta updates will prevent Flow from querying for documents in your MotherDuck table, which can reduce latency and costs for large datasets. If you're certain that all events will have unique keys, enabling delta updates is a simple way to improve performance with no effect on the output. However, enabling delta updates is not suitable for all workflows, as the resulting table in MotherDuck won't be fully reduced. You can enable delta updates on a per-binding basis: bindings: - resource: table: ${table_name} delta_updates: true source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h2"},{"title":"MySQL HeatWave","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#prerequisites","content":" To use this materialization connector, you’ll need the following: A MySQL HeatWave database and the appropriate user credentials.At least one Flow collection. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#configuration","content":" Select one or more of your Flow collections to start using this connector. The configuration properties below will help you to materialize your collections into tables in MySQL HeatWave. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#properties","content":" ","version":"Next","tagName":"h2"},{"title":"Endpoint​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#endpoint","content":" Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tHost and port of the database. If only the host is specified, the port will default to 3306.\tstring\tRequired /database\tDatabase\tName of the logical database to send data to.\tstring\tRequired /user\tUser\tUsername for authentication.\tstring\tRequired /password\tPassword\tPassword for authentication.\tstring\tRequired /timezone\tTimezone\tTimezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read.\tstring\t ","version":"Next","tagName":"h3"},{"title":"Advanced: SSL Mode​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#advanced-ssl-mode","content":" Configuring the SSL mode strengthens security when transferring data to Oracle MySQL HeatWave. Here are the possible values for SSL mode: disabled: Establishes an unencrypted connection with the server.preferred: Initiates the SSL connection only if prompted by the server.required: Establishes an SSL connection but doesn’t verify the server’s certificate.verify_ca: Connects via SSL connection and verifies the server’s certificate against the provided SSL Server CA, without validating the server's hostname. SSL Server CA is mandatory for this mode.verify_identity: Ensures an SSL connection, and verifies both the server's certificate and hostname. This is the highest level of security. SSL Server CA is required for this mode. ","version":"Next","tagName":"h3"},{"title":"Bindings​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#bindings","content":" Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tThe name of the table to send data to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#sample","content":" materializations: ${PREFIX}/${MAT_NAME}: endpoint: connector: image: ghcr.io/estuary/materialize-mysql-heatwave:dev config: database: flow address: localhost:5432 password: secret user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h2"},{"title":"MySQL HeatWave on Oracle Cloud Infrastructure​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#mysql-heatwave-on-oracle-cloud-infrastructure","content":" This connector supports cloud-based MySQL HeatWave instances hosted on Oracle Cloud Infrastructure (OCI). ","version":"Next","tagName":"h2"},{"title":"SSH Tunneling (Required)​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#ssh-tunneling-required","content":" You are also required to configure SSH tunneling by providing the following: SSH Endpoint: Enter the endpoint of the remote SSH server that supports tunneling (formatted as ssh://user@hostname[:port]).SSH Private Key: Input the full RSA Private Key for SSH connection. ","version":"Next","tagName":"h3"},{"title":"Pinecone","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Pinecone","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/#prerequisites","content":" To use this connector, you'll need: A Pinecone account with an API Key for authentication.An OpenAI account with an API Key for authentication.A Pinecone Index created to store materialized vector embeddings. When using the embedding model text-embedding-ada-002 (recommended), the index must have Dimensions set to 1536. ","version":"Next","tagName":"h2"},{"title":"Embedding Input​","type":1,"pageTitle":"Pinecone","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/#embedding-input","content":" The materialization creates a vector embedding for each collection document. Its structure is based on the collection fields. By default, fields of a single scalar type are including in the embedding: strings, integers, numbers, and booleans. You can include additional array or object type fields using projected fields. The text generated for the embedding has this structure, with field names and their values separated by newlines: stringField: stringValue intField: 3 numberField: 1.2 boolField: false ","version":"Next","tagName":"h2"},{"title":"Pinecone Record Metadata​","type":1,"pageTitle":"Pinecone","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/#pinecone-record-metadata","content":" Pinecone supports metadata fields associated with stored vectors that can be used when performingvector queries. This materialization will include the materialized document as a JSON string in the metadata field flow_document to enable retrieval of the document from vectors returned by Pinecone queries. Pinecone indexes all metadata fields by default. To manage memory usage of the index, use selective metadata indexing to exclude the flow_document metadata field. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Pinecone","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/index\tPinecone Index\tPinecone index for this materialization. Must already exist and have appropriate dimensions for the embedding model used.\tstring\tRequired /environment\tPinecone Environment\tCloud region for your Pinecone project. Example: us-central1-gcp\tstring\tRequired /pineconeApiKey\tPinecone API Key\tPinecone API key used for authentication.\tstring\tRequired /openAiApiKey\tOpenAI API Key\tOpenAI API key used for authentication.\tstring\tRequired /embeddingModel\tEmbedding Model ID\tEmbedding model ID for generating OpenAI bindings. The default text-embedding-ada-002 is recommended.\tstring\t"text-embedding-ada-002" /advanced Options for advanced users. You should not typically need to modify these.\tobject /advaned/openAiOrg\tOpenAI Organization\tOptional organization name for OpenAI requests. Use this if you belong to multiple organizations to specify which organization is used for API requests.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tPinecone Namespace\tName of the Pinecone namespace that this collection will materialize vectors into.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Pinecone","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-pinecone:dev" config: index: your-index environment: us-central1-gcp pineconeApiKey: <YOUR_PINECONE_API_KEY> openAiApiKey: <YOUR_OPENAI_API_KEY> bindings: - resource: namespace: your-namespace source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta Updates​","type":1,"pageTitle":"Pinecone","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/#delta-updates","content":" This connector operates only in delta updates mode. Pinecone upserts vectors based on their id. The idfor materialized vectors is based on the Flow Collection key. For collections with a a top-level reduction strategy ofmerge and a strategy oflastWriteWins for all nested values (this is also the default), collections will be materialized "effectively once", with any updated Flow documents replacing vectors in the Pinecone index if they have the same key. ","version":"Next","tagName":"h2"},{"title":"MySQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#prerequisites","content":" To use this connector, you'll need: A MySQL database to which to materialize, and user credentials. MySQL versions 5.7 and later are supportedThe connector will create new tables in the database per your specification, so user credentials must have access to create new tables.The local_infile global variable must be enabled. You can enable this setting by running SET GLOBAL local_infile = true in your database. At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#setup","content":" To meet these requirements, follow the steps for your hosting type. Amazon RDSGoogle Cloud SQLAzure Database for MySQL In addition to standard MySQL, this connector supports cloud-based MySQL instances. Google Cloud Platform, Amazon Web Service, and Microsoft Azure are currently supported. You may use other cloud platforms, but Estuary doesn't guarantee performance. To connect securely, you can either enable direct access for Flows's IP or use an SSH tunnel. ","version":"Next","tagName":"h2"},{"title":"Azure Database for MySQL​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#azure-database-for-mysql","content":" You must configure your database to allow connections from Estuary. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. Connect Directly With Azure Database For MySQL: Create a new firewall rule that grants access to the Estuary Flow IP addresses Connect With SSH Tunneling: Follow the instructions for setting up an SSH connection to Azure Database. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a MySQL materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring\tRequired /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 3306.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired /timezone\tTimezone\tTimezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring /advanced/ssl_server_ca\tSSL Server CA\tOptional server certificate authority to use when connecting with custom SSL mode\tstring /advanced/ssl_client_cert\tSSL Client Certificate\tOptional client certificate to use when connecting with custom SSL mode.\tstring /advanced/ssl_client_key\tSSL Client Key\tOptional client key to use when connecting with custom SSL mode.\tstring\t ","version":"Next","tagName":"h3"},{"title":"Setting the MySQL time zone​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#setting-the-mysql-time-zone","content":" MySQL's time_zone server system variable is set to SYSTEM by default. If you intend to materialize collections including fields of with format: date-time or format: time, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert datetimes to the appropriate timezone when materializing. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted Specify a named timezone in IANA timezone format. If you're using Amazon Aurora, create or modify the DB cluster parameter groupassociated with your MySQL database.Set the time_zone parameter to the correct value. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs. Materialize Timezone Configuration If you are unable to set the time_zone in the database and need to materialize collections with date-time or time fields, the materialization can be configured to assume a time zone using the timezone configuration property (see above). The timezone configuration property can be set as a numerical offset or IANA timezone format. SSL Mode​ Possible values: disabled: A plain unencrypted connection is established with the serverpreferred: Only use SSL connection if the server asks for itrequired: Connect using an SSL connection, but do not verify the server's certificate.verify_ca: Connect using an SSL connection, and verify the server's certificate against the given SSL Server CA, but does not verify the server's hostname. This option is most commonly used when connecting to an IP address which does not have a hostname to be verified. When using this mode, SSL Server CA must be provided.verify_identity: Connect using an SSL connection, verify the server's certificate and the server's hostname. This is the most secure option. When using this mode, SSL Server CA must be provided. Optionally, SSL Client Certificate and Key can be provided if necessary to authorize the client. Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-mysql:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"MySQL on managed cloud platforms​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#mysql-on-managed-cloud-platforms","content":" In addition to standard MySQL, this connector supports cloud-based MySQL instances. To connect securely, you can either enable direct access for Flows's IP or use an SSH tunnel. Google Cloud Platform, Amazon Web Service, and Microsoft Azure are currently supported. You may use other cloud platforms, but Estuary doesn't guarantee performance. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#setup-1","content":" You must configure your database to allow connections from Estuary. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. Connect directly with Amazon RDS or Amazon Aurora: Edit the VPC security group associated with your database instance, or create a new VPC security group and associate it with the database instance. Modify the instance, choosing Publicly accessible in the Connectivity settings. Per the steps in the Amazon documentation, create a new inbound rule and a new outbound rule that allow all traffic from the IP addresses ``. Connect directly with Google Cloud SQL: Enable public IP on your database and add Estuary Flow IP addresses as authorized IP addresses. See the instructions below to use SSH Tunneling instead of enabling public access. Connect with SSH tunneling Refer to the guide to configure an SSH server on the cloud platform of your choice. Configure your connector as described in the configuration section above, with the additional of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networksfor additional details and a sample. Configuration Tip To configure the connector, you must specify the database address in the formathost:port. (You can also supply host only; the connector will use the port 3306 by default, which is correct in many cases.) You can find the host and port in the following locations in each platform's console: Amazon RDS and Amazon Aurora: host as Endpoint; port as Port.Google Cloud SQL: host as Private IP Address; port is always 3306. You may need to configure private IP on your database.Azure Database: host as Server Name; port under Connection Strings (usually 3306). ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Date & times​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#date--times","content":" Date and time fields that are part of collections, which specify a format: date-time for the field, are automatically converted to UTC and persisted as UTC DATETIME in MySQL. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#reserved-words","content":" MySQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words in the official MySQL documentation. These reserved words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words accessible\tclone\tdescribe\tfloat\tint account\tclose\tdescription\tfloat4\tint1 action\tcoalesce\tdes_key_file\tfloat8\tint2 active\tcode\tdeterministic\tflush\tint3 add\tcollate\tdiagnostics\tfollowing\tint4 admin\tcollation\tdirectory\tfollows\tint8 after\tcolumn\tdisable\tfor\tinteger against\tcolumns\tdiscard\tforce\tintersect aggregate\tcolumn_format\tdisk\tforeign\tinterval algorithm\tcolumn_name\tdistinct\tformat\tinto all\tcomment\tdistinctrow\tfound\tinvisible alter\tcommit\tdiv\tfrom\tinvoker always\tcommitted\tdo\tfull\tio analyse\tcompact\tdouble\tfulltext\tio_after_gtid analyze\tcompletion\tdrop\tfunction\tio_before_gti and\tcomponent\tdual\tgeneral\tio_thread any\tcompressed\tdumpfile\tgenerate\tipc array\tcompression\tduplicate\tgenerated\tis as\tconcurrent\tdynamic\tgeomcollectio\tisolation asc\tcondition\teach\tgeometry\tissuer ascii\tconnection\telse\tgeometrycolle\titerate asensitive\tconsistent\telseif\tget\tjoin at\tconstraint\tempty\tget_format\tjson attribute\tconstraint_ca\tenable\tget_master_pu\tjson_table authenticatio\tconstraint_na\tenclosed\tget_source_pu\tjson_value autoextend_si\tconstraint_sc\tencryption\tglobal\tkey auto_incremen\tcontains\tend\tgrant\tkeyring avg\tcontext\tends\tgrants\tkeys avg_row_lengt\tcontinue\tenforced\tgroup\tkey_block_siz backup\tconvert\tengine\tgrouping\tkill before\tcpu\tengines\tgroups\tlag begin\tcreate\tengine_attrib\tgroup_replica\tlanguage between\tcross\tenum\tgtid_only\tlast bigint\tcube\terror\thandler\tlast_value binary\tcume_dist\terrors\thash\tlateral binlog\tcurrent\tescape\thaving\tlead bit\tcurrent_date\tescaped\thelp\tleading blob\tcurrent_time\tevent\thigh_priority\tleave block\tcurrent_times\tevents\thistogram\tleaves bool\tcurrent_user\tevery\thistory\tleft boolean\tcursor\texcept\thost\tless both\tcursor_name\texchange\thosts\tlevel btree\tdata\texclude\thour\tlike buckets\tdatabase\texecute\thour_microsec\tlimit bulk\tdatabases\texists\thour_minute\tlinear by\tdatafile\texit\thour_second\tlines byte\tdate\texpansion\tidentified\tlinestring cache\tdatetime\texpire\tif\tlist call\tday\texplain\tignore\tload cascade\tday_hour\texport\tignore_server\tlocal cascaded\tday_microseco\textended\timport\tlocaltime case\tday_minute\textent_size\tin\tlocaltimestam catalog_name\tday_second\tfactor\tinactive\tlock chain\tdeallocate\tfailedlogin\tindex\tlocked challenge_res\tdec\tfalse\tindexes\tlocks change\tdecimal\tfast\tinfile\tlogfile changed\tdeclare\tfaults\tinitial\tlogs channel\tdefault\tfetch\tinitial_size\tlong char\tdefault_auth\tfields\tinitiate\tlongblob character\tdefiner\tfile\tinner\tlongtext charset\tdefinition\tfile_block_si\tinout\tloop check\tdelayed\tfilter\tinsensitive\tlow_priority checksum\tdelay_key_wri\tfinish\tinsert\tmaster cipher\tdelete\tfirst\tinsert_method\tmaster_auto_p class_origin\tdense_rank\tfirst_value\tinstall\tmaster_bind client\tdesc\tfixed\tinstance\tmaster_compre master_connec\tnever\tpreserve\trestrict\tsource_host master_delay\tnew\tprev\tresume\tsource_log_fi master_heartb\tnext\tprimary\tretain\tsource_log_po master_host\tno\tprivileges\treturn\tsource_passwo master_log_fi\tnodegroup\tprivilege_che\treturned_sqls\tsource_port master_log_po\tnone\tprocedure\treturning\tsource_public master_passwo\tnot\tprocess\treturns\tsourceretry master_port\tnowait\tprocesslist\treuse\tsource_ssl master_public\tno_wait\tprofile\treverse\tsource_ssl_ca masterretry\tno_write_to_b\tprofiles\trevoke\tsource_ssl_ca master_server\tnth_value\tproxy\tright\tsource_ssl_ce master_ssl\tntile\tpurge\trlike\tsource_ssl_ci master_ssl_ca\tnull\tquarter\trole\tsource_ssl_cr master_ssl_ca\tnulls\tquery\trollback\tsource_ssl_cr master_ssl_ce\tnumber\tquick\trollup\tsource_ssl_ke master_ssl_ci\tnumeric\trandom\trotate\tsource_ssl_ve master_ssl_cr\tnvarchar\trange\troutine\tsource_tls_ci master_ssl_cr\tof\trank\trow\tsource_tls_ve master_ssl_ke\toff\tread\trows\tsource_user master_ssl_ve\toffset\treads\trow_count\tsource_zstd_c master_tls_ci\toj\tread_only\trow_format\tspatial master_tls_ve\told\tread_write\trow_number\tspecific master_user\ton\treal\trtree\tsql master_zstd_c\tone\trebuild\tsavepoint\tsqlexception match\tonly\trecover\tschedule\tsqlstate maxvalue\topen\trecursive\tschema\tsqlwarning max_connectio\toptimize\tredofile\tschemas\tsql_after_gti max_queries_p\toptimizer_cos\tredo_buffer_s\tschema_name\tsql_after_mts max_rows\toption\tredundant\tsecond\tsql_before_gt max_size\toptional\treference\tsecondary\tsql_big_resul max_updates_p\toptionally\treferences\tsecondary_eng\tsql_buffer_re max_user_conn\toptions\tregexp\tsecondary_eng\tsql_cache medium\tor\tregistration\tsecondary_loa\tsql_calc_foun mediumblob\torder\trelay\tsecondary_unl\tsql_no_cache mediumint\tordinality\trelaylog\tsecond_micros\tsql_small_res mediumtext\torganization\trelay_log_fil\tsecurity\tsql_thread member\tothers\trelay_log_pos\tselect\tsql_tsi_day memory\tout\trelay_thread\tsensitive\tsql_tsi_hour merge\touter\trelease\tseparator\tsql_tsi_minut message_text\toutfile\treload\tserial\tsql_tsi_month microsecond\tover\tremote\tserializable\tsql_tsi_quart middleint\towner\tremove\tserver\tsql_tsi_secon migrate\tpack_keys\trename\tsession\tsql_tsi_week minute\tpage\treorganize\tset\tsql_tsi_year minute_micros\tparser\trepair\tshare\tsrid minute_second\tpartial\trepeat\tshow\tssl min_rows\tpartition\trepeatable\tshutdown\tstacked mod\tpartitioning\treplace\tsignal\tstart mode\tpartitions\treplica\tsigned\tstarting modifies\tpassword\treplicas\tsimple\tstarts modify\tpassword_lock\treplicatedo\tskip\tstats_auto_re month\tpath\treplicatedo\tslave\tstats_persist multilinestri\tpercent_rank\treplicate_ign\tslow\tstatssample multipoint\tpersist\treplicate_ign\tsmallint\tstatus multipolygon\tpersist_only\treplicate_rew\tsnapshot\tstop mutex\tphase\treplicate_wil\tsocket\tstorage mysql_errno\tplugin\treplicate_wil\tsome\tstored name\tplugins\treplication\tsoname\tstraight_join names\tplugin_dir\trequire\tsounds\tstream national\tpoint\trequire_row_f\tsource\tstring natural\tpolygon\treset\tsource_auto_p\tsubclass_orig nchar\tport\tresignal\tsource_bind\tsubject ndb\tprecedes\tresource\tsource_compre\tsubpartition ndbcluster\tpreceding\trespect\tsource_connec\tsubpartitions nested\tprecision\trestart\tsource_delay\tsuper network_names\tprepare\trestore\tsource_heartb\tsuspend swaps\ttimestampdiff\tundo_buffer_s\tutc_date\twhen switches\ttinyblob\tunicode\tutc_time\twhere system\ttinyint\tuninstall\tutc_timestamp\twhile table\ttinytext\tunion\tvalidation\twindow tables\ttls\tunique\tvalue\twith tablespace\tto\tunknown\tvalues\twithout table_checksu\ttrailing\tunlock\tvarbinary\twork table_name\ttransaction\tunregister\tvarchar\twrapper temporary\ttrigger\tunsigned\tvarcharacter\twrite temptable\ttriggers\tuntil\tvariables\tx509 terminated\ttrue\tupdate\tvarying\txa text\ttruncate\tupgrade\tvcpu\txid than\ttype\turl\tview\txml then\ttypes\tusage\tvirtual\txor thread_priori\tunbounded\tuse\tvisible\tyear ties\tuncommitted\tuser\twait\tyear_month time\tundefined\tuser_resource\twarnings\tzerofill timestamp\tundo\tuse_frm\tweek\tzone timestampadd\tundofile\tusing\tweight_string\t ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V1: 2023-08-21​ First version ","version":"Next","tagName":"h2"},{"title":"Google Cloud SQL for MySQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#prerequisites","content":" To use this connector, you'll need: A MySQL database to which to materialize, and user credentials. MySQL versions 5.7 and later are supportedThe connector will create new tables in the database per your specification, so user credentials must have access to create new tables.The local_infile global variable must be enabled. You can enable this setting by running SET GLOBAL local_infile = true in your database. At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#setup","content":" ","version":"Next","tagName":"h2"},{"title":"Conenecting Directly to Google Cloud SQL​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#conenecting-directly-to-google-cloud-sql","content":" Enable public IP on your database and add the Estuary Flow IP addresses as authorized IP addresses. ","version":"Next","tagName":"h3"},{"title":"Connect With SSH Tunneling​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#connect-with-ssh-tunneling","content":" To allow SSH tunneling to a database instance hosted on Google Cloud, you must set up a virtual machine (VM). Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key If your Google login differs from your local username, generate a key that includes your Google email address as a comment: ssh-keygen -m PEM -t rsa -C user@domain.com Create and start a new VM in GCP, choosing an image that supports OS Login. Add your public key to the VM. Reserve an external IP address and connect it to the VM during setup. Note the generated address. Configuration Tip To configure the connector, you must specify the database address in the formathost:port. (You can also supply host only; the connector will use the port 3306 by default, which is correct in many cases.) You can find the host and port in the following locations in each platform's console: ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a MySQL materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring\tRequired /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 3306.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired /timezone\tTimezone\tTimezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring /advanced/ssl_server_ca\tSSL Server CA\tOptional server certificate authority to use when connecting with custom SSL mode\tstring /advanced/ssl_client_cert\tSSL Client Certificate\tOptional client certificate to use when connecting with custom SSL mode.\tstring /advanced/ssl_client_key\tSSL Client Key\tOptional client key to use when connecting with custom SSL mode.\tstring\t ","version":"Next","tagName":"h3"},{"title":"Setting the MySQL time zone​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#setting-the-mysql-time-zone","content":" MySQL's time_zone server system variable is set to SYSTEM by default. If you intend to materialize collections including fields of with format: date-time or format: time, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert datetimes to the appropriate timezone when materializing. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted Specify a named timezone in IANA timezone format. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs. Materialize Timezone Configuration If you are unable to set the time_zone in the database and need to materialize collections with date-time or time fields, the materialization can be configured to assume a time zone using the timezone configuration property (see above). The timezone configuration property can be set as a numerical offset or IANA timezone format. SSL Mode​ Possible values: disabled: A plain unencrypted connection is established with the serverpreferred: Only use SSL connection if the server asks for itrequired: Connect using an SSL connection, but do not verify the server's certificate.verify_ca: Connect using an SSL connection, and verify the server's certificate against the given SSL Server CA, but does not verify the server's hostname. This option is most commonly used when connecting to an IP address which does not have a hostname to be verified. When using this mode, SSL Server CA must be provided.verify_identity: Connect using an SSL connection, verify the server's certificate and the server's hostname. This is the most secure option. When using this mode, SSL Server CA must be provided. Optionally, SSL Client Certificate and Key can be provided if necessary to authorize the client. Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-mysql:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Setup​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#setup-1","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Enable public IP on your database and add the Estuary Flow IP addresses as authorized IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Configure your connector as described in the configuration section above, with the additional of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networksfor additional details and a sample. Configuration Tip To configure the connector, you must specify the database address in the formathost:port. (You can also supply host only; the connector will use the port 3306 by default, which is correct in many cases.) You can find the host host in the GCP console as "Private IP Address". The pport is always 3306. You may need to configure private IP on your database. Create the flow_materialize user with All privileges on your database. This user will need the ability to create and update the flow_materializations table. CREATE USER IF NOT EXISTS flow_materialize IDENTIFIED BY 'secret' COMMENT 'User account for Flow MySQL data materialization'; GRANT ALL PRIVELEGES ON <database>.* TO 'flow_materialize'; In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 3306. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Date & times​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#date--times","content":" Date and time fields that are part of collections, which specify a format: date-time for the field, are automatically converted to UTC and persisted as UTC DATETIME in MySQL. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#reserved-words","content":" MySQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words in the official MySQL documentation. These reserved words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words accessible\tclone\tdescribe\tfloat\tint account\tclose\tdescription\tfloat4\tint1 action\tcoalesce\tdes_key_file\tfloat8\tint2 active\tcode\tdeterministic\tflush\tint3 add\tcollate\tdiagnostics\tfollowing\tint4 admin\tcollation\tdirectory\tfollows\tint8 after\tcolumn\tdisable\tfor\tinteger against\tcolumns\tdiscard\tforce\tintersect aggregate\tcolumn_format\tdisk\tforeign\tinterval algorithm\tcolumn_name\tdistinct\tformat\tinto all\tcomment\tdistinctrow\tfound\tinvisible alter\tcommit\tdiv\tfrom\tinvoker always\tcommitted\tdo\tfull\tio analyse\tcompact\tdouble\tfulltext\tio_after_gtid analyze\tcompletion\tdrop\tfunction\tio_before_gti and\tcomponent\tdual\tgeneral\tio_thread any\tcompressed\tdumpfile\tgenerate\tipc array\tcompression\tduplicate\tgenerated\tis as\tconcurrent\tdynamic\tgeomcollectio\tisolation asc\tcondition\teach\tgeometry\tissuer ascii\tconnection\telse\tgeometrycolle\titerate asensitive\tconsistent\telseif\tget\tjoin at\tconstraint\tempty\tget_format\tjson attribute\tconstraint_ca\tenable\tget_master_pu\tjson_table authenticatio\tconstraint_na\tenclosed\tget_source_pu\tjson_value autoextend_si\tconstraint_sc\tencryption\tglobal\tkey auto_incremen\tcontains\tend\tgrant\tkeyring avg\tcontext\tends\tgrants\tkeys avg_row_lengt\tcontinue\tenforced\tgroup\tkey_block_siz backup\tconvert\tengine\tgrouping\tkill before\tcpu\tengines\tgroups\tlag begin\tcreate\tengine_attrib\tgroup_replica\tlanguage between\tcross\tenum\tgtid_only\tlast bigint\tcube\terror\thandler\tlast_value binary\tcume_dist\terrors\thash\tlateral binlog\tcurrent\tescape\thaving\tlead bit\tcurrent_date\tescaped\thelp\tleading blob\tcurrent_time\tevent\thigh_priority\tleave block\tcurrent_times\tevents\thistogram\tleaves bool\tcurrent_user\tevery\thistory\tleft boolean\tcursor\texcept\thost\tless both\tcursor_name\texchange\thosts\tlevel btree\tdata\texclude\thour\tlike buckets\tdatabase\texecute\thour_microsec\tlimit bulk\tdatabases\texists\thour_minute\tlinear by\tdatafile\texit\thour_second\tlines byte\tdate\texpansion\tidentified\tlinestring cache\tdatetime\texpire\tif\tlist call\tday\texplain\tignore\tload cascade\tday_hour\texport\tignore_server\tlocal cascaded\tday_microseco\textended\timport\tlocaltime case\tday_minute\textent_size\tin\tlocaltimestam catalog_name\tday_second\tfactor\tinactive\tlock chain\tdeallocate\tfailedlogin\tindex\tlocked challenge_res\tdec\tfalse\tindexes\tlocks change\tdecimal\tfast\tinfile\tlogfile changed\tdeclare\tfaults\tinitial\tlogs channel\tdefault\tfetch\tinitial_size\tlong char\tdefault_auth\tfields\tinitiate\tlongblob character\tdefiner\tfile\tinner\tlongtext charset\tdefinition\tfile_block_si\tinout\tloop check\tdelayed\tfilter\tinsensitive\tlow_priority checksum\tdelay_key_wri\tfinish\tinsert\tmaster cipher\tdelete\tfirst\tinsert_method\tmaster_auto_p class_origin\tdense_rank\tfirst_value\tinstall\tmaster_bind client\tdesc\tfixed\tinstance\tmaster_compre master_connec\tnever\tpreserve\trestrict\tsource_host master_delay\tnew\tprev\tresume\tsource_log_fi master_heartb\tnext\tprimary\tretain\tsource_log_po master_host\tno\tprivileges\treturn\tsource_passwo master_log_fi\tnodegroup\tprivilege_che\treturned_sqls\tsource_port master_log_po\tnone\tprocedure\treturning\tsource_public master_passwo\tnot\tprocess\treturns\tsourceretry master_port\tnowait\tprocesslist\treuse\tsource_ssl master_public\tno_wait\tprofile\treverse\tsource_ssl_ca masterretry\tno_write_to_b\tprofiles\trevoke\tsource_ssl_ca master_server\tnth_value\tproxy\tright\tsource_ssl_ce master_ssl\tntile\tpurge\trlike\tsource_ssl_ci master_ssl_ca\tnull\tquarter\trole\tsource_ssl_cr master_ssl_ca\tnulls\tquery\trollback\tsource_ssl_cr master_ssl_ce\tnumber\tquick\trollup\tsource_ssl_ke master_ssl_ci\tnumeric\trandom\trotate\tsource_ssl_ve master_ssl_cr\tnvarchar\trange\troutine\tsource_tls_ci master_ssl_cr\tof\trank\trow\tsource_tls_ve master_ssl_ke\toff\tread\trows\tsource_user master_ssl_ve\toffset\treads\trow_count\tsource_zstd_c master_tls_ci\toj\tread_only\trow_format\tspatial master_tls_ve\told\tread_write\trow_number\tspecific master_user\ton\treal\trtree\tsql master_zstd_c\tone\trebuild\tsavepoint\tsqlexception match\tonly\trecover\tschedule\tsqlstate maxvalue\topen\trecursive\tschema\tsqlwarning max_connectio\toptimize\tredofile\tschemas\tsql_after_gti max_queries_p\toptimizer_cos\tredo_buffer_s\tschema_name\tsql_after_mts max_rows\toption\tredundant\tsecond\tsql_before_gt max_size\toptional\treference\tsecondary\tsql_big_resul max_updates_p\toptionally\treferences\tsecondary_eng\tsql_buffer_re max_user_conn\toptions\tregexp\tsecondary_eng\tsql_cache medium\tor\tregistration\tsecondary_loa\tsql_calc_foun mediumblob\torder\trelay\tsecondary_unl\tsql_no_cache mediumint\tordinality\trelaylog\tsecond_micros\tsql_small_res mediumtext\torganization\trelay_log_fil\tsecurity\tsql_thread member\tothers\trelay_log_pos\tselect\tsql_tsi_day memory\tout\trelay_thread\tsensitive\tsql_tsi_hour merge\touter\trelease\tseparator\tsql_tsi_minut message_text\toutfile\treload\tserial\tsql_tsi_month microsecond\tover\tremote\tserializable\tsql_tsi_quart middleint\towner\tremove\tserver\tsql_tsi_secon migrate\tpack_keys\trename\tsession\tsql_tsi_week minute\tpage\treorganize\tset\tsql_tsi_year minute_micros\tparser\trepair\tshare\tsrid minute_second\tpartial\trepeat\tshow\tssl min_rows\tpartition\trepeatable\tshutdown\tstacked mod\tpartitioning\treplace\tsignal\tstart mode\tpartitions\treplica\tsigned\tstarting modifies\tpassword\treplicas\tsimple\tstarts modify\tpassword_lock\treplicatedo\tskip\tstats_auto_re month\tpath\treplicatedo\tslave\tstats_persist multilinestri\tpercent_rank\treplicate_ign\tslow\tstatssample multipoint\tpersist\treplicate_ign\tsmallint\tstatus multipolygon\tpersist_only\treplicate_rew\tsnapshot\tstop mutex\tphase\treplicate_wil\tsocket\tstorage mysql_errno\tplugin\treplicate_wil\tsome\tstored name\tplugins\treplication\tsoname\tstraight_join names\tplugin_dir\trequire\tsounds\tstream national\tpoint\trequire_row_f\tsource\tstring natural\tpolygon\treset\tsource_auto_p\tsubclass_orig nchar\tport\tresignal\tsource_bind\tsubject ndb\tprecedes\tresource\tsource_compre\tsubpartition ndbcluster\tpreceding\trespect\tsource_connec\tsubpartitions nested\tprecision\trestart\tsource_delay\tsuper network_names\tprepare\trestore\tsource_heartb\tsuspend swaps\ttimestampdiff\tundo_buffer_s\tutc_date\twhen switches\ttinyblob\tunicode\tutc_time\twhere system\ttinyint\tuninstall\tutc_timestamp\twhile table\ttinytext\tunion\tvalidation\twindow tables\ttls\tunique\tvalue\twith tablespace\tto\tunknown\tvalues\twithout table_checksu\ttrailing\tunlock\tvarbinary\twork table_name\ttransaction\tunregister\tvarchar\twrapper temporary\ttrigger\tunsigned\tvarcharacter\twrite temptable\ttriggers\tuntil\tvariables\tx509 terminated\ttrue\tupdate\tvarying\txa text\ttruncate\tupgrade\tvcpu\txid than\ttype\turl\tview\txml then\ttypes\tusage\tvirtual\txor thread_priori\tunbounded\tuse\tvisible\tyear ties\tuncommitted\tuser\twait\tyear_month time\tundefined\tuser_resource\twarnings\tzerofill timestamp\tundo\tuse_frm\tweek\tzone timestampadd\tundofile\tusing\tweight_string\t ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V1: 2023-08-21​ First version ","version":"Next","tagName":"h2"},{"title":"PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#prerequisites","content":" To use this connector, you'll need: A Postgres database to which to materialize, and user credentials. The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#setup","content":" To meet these requirements, follow the steps for your hosting type. Amazon RDSGoogle Cloud SQLAzure Database for PostgreSQL In addition to standard PostgreSQL, this connector supports cloud-based PostgreSQL instances. Google Cloud Platform, Amazon Web Service, and Microsoft Azure are currently supported. You may use other cloud platforms, but Estuary doesn't guarantee performance. To connect securely, you can either enable direct access for Flows's IP or use an SSH tunnel. Configuration Tip To configure the connector, you must specify the database address in the format host:port. (You can also supply host only; the connector will use the port 5432 by default, which is correct in many cases.) You can find the host and port in the following locations in each platform's console: Amazon RDS and Amazon Aurora: host as Endpoint; port as Port.Google Cloud SQL: host as Private IP Address; port is always 5432. You may need to configure private IP on your database.Azure Database: host as Server Name; port under Connection Strings (usually 5432).TimescaleDB: host as Host; port as Port. ","version":"Next","tagName":"h2"},{"title":"Azure Database for PostgreSQL​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#azure-database-for-postgresql","content":" Connect Directly With Azure Database For PostgreSQL: Create a new firewall rule that grants access to the Estuary Flow IP addresses. Connect With SSH Tunneling: Follow the instructions for setting up an SSH connection to Azure Database. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Postgres materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 5432.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /schema\tDatabase Schema\tDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables\tstring\t"public" /user\tUser\tDatabase user to connect as.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/additional_table_create_sql\tAdditional Table Create SQL\tAdditional SQL statement(s) to be run in the same transaction that creates the table.\tstring /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse /schema\tAlternative Schema\tAlternative schema for this table (optional). Overrides schema set in endpoint configuration.\tstring /table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired SSL Mode​ Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-postgres:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#reserved-words","content":" PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation. These reserve words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words abs\tcurrent_transform_group_for_type\tindicator\torder\tsqlexception absolute\tcurrent_user\tinitial\tout\tsqlstate acos\tcursor\tinitially\touter\tsqlwarning action\tcycle\tinner\toutput\tsqrt add\tdatalink\tinout\tover\tstart all\tdate\tinput\toverlaps\tstatic allocate\tday\tinsensitive\toverlay\tstddev_pop alter\tdeallocate\tinsert\tpad\tstddev_samp analyse\tdec\tint\tparameter\tsubmultiset analyze\tdecfloat\tinteger\tpartial\tsubset and\tdecimal\tintersect\tpartition\tsubstring any\tdeclare\tintersection\tpattern\tsubstring_regex are\tdefault\tinterval\tper\tsucceeds array\tdeferrable\tinto\tpercent\tsum array_agg\tdeferred\tis\tpercentile_cont\tsymmetric array_max_cardinality\tdefine\tisnull\tpercentile_disc\tsystem as\tdelete\tisolation\tpercent_rank\tsystem_time asc\tdense_rank\tjoin\tperiod\tsystem_user asensitive\tderef\tjson_array\tpermute\ttable asin\tdesc\tjson_arrayagg\tplacing\ttablesample assertion\tdescribe\tjson_exists\tportion\ttan asymmetric\tdescriptor\tjson_object\tposition\ttanh at\tdeterministic\tjson_objectagg\tposition_regex\ttemporary atan\tdiagnostics\tjson_query\tpower\tthen atomic\tdisconnect\tjson_table\tprecedes\ttime authorization\tdistinct\tjson_table_primitive\tprecision\ttimestamp avg\tdlnewcopy\tjson_value\tprepare\ttimezone_hour begin\tdlpreviouscopy\tkey\tpreserve\ttimezone_minute begin_frame\tdlurlcomplete\tlag\tprimary\tto begin_partition\tdlurlcompleteonly\tlanguage\tprior\ttrailing between\tdlurlcompletewrite\tlarge\tprivileges\ttransaction bigint\tdlurlpath\tlast\tprocedure\ttranslate binary\tdlurlpathonly\tlast_value\tptf\ttranslate_regex bit\tdlurlpathwrite\tlateral\tpublic\ttranslation bit_length\tdlurlscheme\tlead\trange\ttreat blob\tdlurlserver\tleading\trank\ttrigger boolean\tdlvalue\tleft\tread\ttrim both\tdo\tlevel\treads\ttrim_array by\tdomain\tlike\treal\ttrue call\tdouble\tlike_regex\trecursive\ttruncate called\tdrop\tlimit\tref\tuescape cardinality\tdynamic\tlistagg\treferences\tunion cascade\teach\tln\treferencing\tunique cascaded\telement\tlocal\tregr_avgx\tunknown case\telse\tlocaltime\tregr_avgy\tunmatched cast\tempty\tlocaltimestamp\tregr_count\tunnest catalog\tend\tlog\tregr_intercept\tupdate ceil\tend-exec\tlog10\tregr_r2\tupper ceiling\tend_frame\tlower\tregr_slope\tusage char\tend_partition\tmatch\tregr_sxx\tuser character\tequals\tmatches\tregr_sxy\tusing character_length\tescape\tmatch_number\tregr_syy\tvalue char_length\tevery\tmatch_recognize\trelative\tvalues check\texcept\tmax\trelease\tvalue_of classifier\texception\tmeasures\trestrict\tvarbinary clob\texec\tmember\tresult\tvarchar close\texecute\tmerge\treturn\tvariadic coalesce\texists\tmethod\treturning\tvarying collate\texp\tmin\treturns\tvar_pop collation\texternal\tminute\trevoke\tvar_samp collect\textract\tmod\tright\tverbose column\tfalse\tmodifies\trollback\tversioning commit\tfetch\tmodule\trollup\tview concurrently\tfilter\tmonth\trow\twhen condition\tfirst\tmultiset\trows\twhenever connect\tfirst_value\tnames\trow_number\twhere connection\tfloat\tnational\trunning\twidth_bucket constraint\tfloor\tnatural\tsavepoint\twindow constraints\tfor\tnchar\tschema\twith contains\tforeign\tnclob\tscope\twithin continue\tfound\tnew\tscroll\twithout convert\tframe_row\tnext\tsearch\twork copy\tfree\tno\tsecond\twrite corr\tfreeze\tnone\tsection\txml corresponding\tfrom\tnormalize\tseek\txmlagg cos\tfull\tnot\tselect\txmlattributes cosh\tfunction\tnotnull\tsensitive\txmlbinary count\tfusion\tnth_value\tsession\txmlcast covar_pop\tget\tntile\tsession_user\txmlcomment covar_samp\tglobal\tnull\tset\txmlconcat create\tgo\tnullif\tshow\txmldocument cross\tgoto\tnumeric\tsimilar\txmlelement cube\tgrant\toccurrences_regex\tsin\txmlexists cume_dist\tgroup\toctet_length\tsinh\txmlforest current\tgrouping\tof\tsize\txmliterate current_catalog\tgroups\toffset\tskip\txmlnamespaces current_date\thaving\told\tsmallint\txmlparse current_default_transform_group\thold\tomit\tsome\txmlpi current_path\thour\ton\tspace\txmlquery current_role\tidentity\tone\tspecific\txmlserialize current_row\tilike\tonly\tspecifictype\txmltable current_schema\timmediate\topen\tsql\txmltext current_time\timport\toption\tsqlcode\txmlvalidate current_timestamp\tin\tor\tsqlerror\tyear ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V4: 2022-11-30​ This version includes breaking changes to materialized table columns. These provide more consistent column names and types, but tables created from previous versions of the connector may not be compatible with this version. Capitalization is now preserved when fields in Flow are converted to Postgres column names. Previously, fields containing uppercase letters were converted to lowercase. Field names and values of types date, duration, ipv4, ipv6, macaddr, macaddr8, and time are now converted into their corresponding Postgres types. Previously, only date-time was converted, and all others were materialized as strings. ","version":"Next","tagName":"h2"},{"title":"Amazon RDS for MySQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#prerequisites","content":" To use this connector, you'll need: A MySQL database to which to materialize, and user credentials. MySQL versions 5.7 and later are supportedThe connector will create new tables in the database per your specification, so user credentials must have access to create new tables.The local_infile global variable must be enabled. You can enable this setting by running SET GLOBAL local_infile = true in your database. At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#setup","content":" You must configure your database to allow connections from Estuary. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. ","version":"Next","tagName":"h2"},{"title":"Connecting Directly With Amazon RDS​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#connecting-directly-with-amazon-rds","content":" Edit the VPC security group associated with your database instance, or create a new VPC security group and associate it with the database instance. Modify the instance, choosing Publicly accessible in the Connectivity settings. Per the steps in the Amazon documentation, create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. ","version":"Next","tagName":"h3"},{"title":"Connect With SSH Tunneling​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#connect-with-ssh-tunneling","content":" To allow SSH tunneling to a database instance hosted on AWS, you'll need to create a virtual computing environment, or instance, in Amazon EC2. Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key Import your SSH key into AWS. Launch a new instance in EC2. During setup: Configure the security group to allow SSH connection from anywhere.When selecting a key pair, choose the key you just imported. Connect to the instance, setting the user name to ec2-user. Find and note the instance's public DNS. This will be formatted like: ec2-198-21-98-1.compute-1.amazonaws.com. Connect with SSH tunneling Refer to the guide to configure an SSH server on the cloud platform of your choice. Configure your connector as described in the configuration section above, with the additional of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networksfor additional details and a sample. Configuration Tip To configure the connector, you must specify the database address in the formathost:port. (You can also supply host only; the connector will use the port 3306 by default, which is correct in many cases.) You can find the host and port in the following locations in each platform's console: Amazon RDS: host as Endpoint; port as Port. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a MySQL materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring\tRequired /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 3306.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired /timezone\tTimezone\tTimezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring /advanced/ssl_server_ca\tSSL Server CA\tOptional server certificate authority to use when connecting with custom SSL mode\tstring /advanced/ssl_client_cert\tSSL Client Certificate\tOptional client certificate to use when connecting with custom SSL mode.\tstring /advanced/ssl_client_key\tSSL Client Key\tOptional client key to use when connecting with custom SSL mode.\tstring\t ","version":"Next","tagName":"h3"},{"title":"Setting the MySQL time zone​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#setting-the-mysql-time-zone","content":" MySQL's time_zone server system variable is set to SYSTEM by default. If you intend to materialize collections including fields of with format: date-time or format: time, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert datetimes to the appropriate timezone when materializing. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted Specify a named timezone in IANA timezone format. If you're using Amazon Aurora, create or modify the DB cluster parameter groupassociated with your MySQL database.Set the time_zone parameter to the correct value. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs. Materialize Timezone Configuration If you are unable to set the time_zone in the database and need to materialize collections with date-time or time fields, the materialization can be configured to assume a time zone using the timezone configuration property (see above). The timezone configuration property can be set as a numerical offset or IANA timezone format. SSL Mode​ Possible values: disabled: A plain unencrypted connection is established with the serverpreferred: Only use SSL connection if the server asks for itrequired: Connect using an SSL connection, but do not verify the server's certificate.verify_ca: Connect using an SSL connection, and verify the server's certificate against the given SSL Server CA, but does not verify the server's hostname. This option is most commonly used when connecting to an IP address which does not have a hostname to be verified. When using this mode, SSL Server CA must be provided.verify_identity: Connect using an SSL connection, verify the server's certificate and the server's hostname. This is the most secure option. When using this mode, SSL Server CA must be provided. Optionally, SSL Client Certificate and Key can be provided if necessary to authorize the client. Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-mysql:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Date & times​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#date--times","content":" Date and time fields that are part of collections, which specify a format: date-time for the field, are automatically converted to UTC and persisted as UTC DATETIME in MySQL. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#reserved-words","content":" MySQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words in the official MySQL documentation. These reserved words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words accessible\tclone\tdescribe\tfloat\tint account\tclose\tdescription\tfloat4\tint1 action\tcoalesce\tdes_key_file\tfloat8\tint2 active\tcode\tdeterministic\tflush\tint3 add\tcollate\tdiagnostics\tfollowing\tint4 admin\tcollation\tdirectory\tfollows\tint8 after\tcolumn\tdisable\tfor\tinteger against\tcolumns\tdiscard\tforce\tintersect aggregate\tcolumn_format\tdisk\tforeign\tinterval algorithm\tcolumn_name\tdistinct\tformat\tinto all\tcomment\tdistinctrow\tfound\tinvisible alter\tcommit\tdiv\tfrom\tinvoker always\tcommitted\tdo\tfull\tio analyse\tcompact\tdouble\tfulltext\tio_after_gtid analyze\tcompletion\tdrop\tfunction\tio_before_gti and\tcomponent\tdual\tgeneral\tio_thread any\tcompressed\tdumpfile\tgenerate\tipc array\tcompression\tduplicate\tgenerated\tis as\tconcurrent\tdynamic\tgeomcollectio\tisolation asc\tcondition\teach\tgeometry\tissuer ascii\tconnection\telse\tgeometrycolle\titerate asensitive\tconsistent\telseif\tget\tjoin at\tconstraint\tempty\tget_format\tjson attribute\tconstraint_ca\tenable\tget_master_pu\tjson_table authenticatio\tconstraint_na\tenclosed\tget_source_pu\tjson_value autoextend_si\tconstraint_sc\tencryption\tglobal\tkey auto_incremen\tcontains\tend\tgrant\tkeyring avg\tcontext\tends\tgrants\tkeys avg_row_lengt\tcontinue\tenforced\tgroup\tkey_block_siz backup\tconvert\tengine\tgrouping\tkill before\tcpu\tengines\tgroups\tlag begin\tcreate\tengine_attrib\tgroup_replica\tlanguage between\tcross\tenum\tgtid_only\tlast bigint\tcube\terror\thandler\tlast_value binary\tcume_dist\terrors\thash\tlateral binlog\tcurrent\tescape\thaving\tlead bit\tcurrent_date\tescaped\thelp\tleading blob\tcurrent_time\tevent\thigh_priority\tleave block\tcurrent_times\tevents\thistogram\tleaves bool\tcurrent_user\tevery\thistory\tleft boolean\tcursor\texcept\thost\tless both\tcursor_name\texchange\thosts\tlevel btree\tdata\texclude\thour\tlike buckets\tdatabase\texecute\thour_microsec\tlimit bulk\tdatabases\texists\thour_minute\tlinear by\tdatafile\texit\thour_second\tlines byte\tdate\texpansion\tidentified\tlinestring cache\tdatetime\texpire\tif\tlist call\tday\texplain\tignore\tload cascade\tday_hour\texport\tignore_server\tlocal cascaded\tday_microseco\textended\timport\tlocaltime case\tday_minute\textent_size\tin\tlocaltimestam catalog_name\tday_second\tfactor\tinactive\tlock chain\tdeallocate\tfailedlogin\tindex\tlocked challenge_res\tdec\tfalse\tindexes\tlocks change\tdecimal\tfast\tinfile\tlogfile changed\tdeclare\tfaults\tinitial\tlogs channel\tdefault\tfetch\tinitial_size\tlong char\tdefault_auth\tfields\tinitiate\tlongblob character\tdefiner\tfile\tinner\tlongtext charset\tdefinition\tfile_block_si\tinout\tloop check\tdelayed\tfilter\tinsensitive\tlow_priority checksum\tdelay_key_wri\tfinish\tinsert\tmaster cipher\tdelete\tfirst\tinsert_method\tmaster_auto_p class_origin\tdense_rank\tfirst_value\tinstall\tmaster_bind client\tdesc\tfixed\tinstance\tmaster_compre master_connec\tnever\tpreserve\trestrict\tsource_host master_delay\tnew\tprev\tresume\tsource_log_fi master_heartb\tnext\tprimary\tretain\tsource_log_po master_host\tno\tprivileges\treturn\tsource_passwo master_log_fi\tnodegroup\tprivilege_che\treturned_sqls\tsource_port master_log_po\tnone\tprocedure\treturning\tsource_public master_passwo\tnot\tprocess\treturns\tsourceretry master_port\tnowait\tprocesslist\treuse\tsource_ssl master_public\tno_wait\tprofile\treverse\tsource_ssl_ca masterretry\tno_write_to_b\tprofiles\trevoke\tsource_ssl_ca master_server\tnth_value\tproxy\tright\tsource_ssl_ce master_ssl\tntile\tpurge\trlike\tsource_ssl_ci master_ssl_ca\tnull\tquarter\trole\tsource_ssl_cr master_ssl_ca\tnulls\tquery\trollback\tsource_ssl_cr master_ssl_ce\tnumber\tquick\trollup\tsource_ssl_ke master_ssl_ci\tnumeric\trandom\trotate\tsource_ssl_ve master_ssl_cr\tnvarchar\trange\troutine\tsource_tls_ci master_ssl_cr\tof\trank\trow\tsource_tls_ve master_ssl_ke\toff\tread\trows\tsource_user master_ssl_ve\toffset\treads\trow_count\tsource_zstd_c master_tls_ci\toj\tread_only\trow_format\tspatial master_tls_ve\told\tread_write\trow_number\tspecific master_user\ton\treal\trtree\tsql master_zstd_c\tone\trebuild\tsavepoint\tsqlexception match\tonly\trecover\tschedule\tsqlstate maxvalue\topen\trecursive\tschema\tsqlwarning max_connectio\toptimize\tredofile\tschemas\tsql_after_gti max_queries_p\toptimizer_cos\tredo_buffer_s\tschema_name\tsql_after_mts max_rows\toption\tredundant\tsecond\tsql_before_gt max_size\toptional\treference\tsecondary\tsql_big_resul max_updates_p\toptionally\treferences\tsecondary_eng\tsql_buffer_re max_user_conn\toptions\tregexp\tsecondary_eng\tsql_cache medium\tor\tregistration\tsecondary_loa\tsql_calc_foun mediumblob\torder\trelay\tsecondary_unl\tsql_no_cache mediumint\tordinality\trelaylog\tsecond_micros\tsql_small_res mediumtext\torganization\trelay_log_fil\tsecurity\tsql_thread member\tothers\trelay_log_pos\tselect\tsql_tsi_day memory\tout\trelay_thread\tsensitive\tsql_tsi_hour merge\touter\trelease\tseparator\tsql_tsi_minut message_text\toutfile\treload\tserial\tsql_tsi_month microsecond\tover\tremote\tserializable\tsql_tsi_quart middleint\towner\tremove\tserver\tsql_tsi_secon migrate\tpack_keys\trename\tsession\tsql_tsi_week minute\tpage\treorganize\tset\tsql_tsi_year minute_micros\tparser\trepair\tshare\tsrid minute_second\tpartial\trepeat\tshow\tssl min_rows\tpartition\trepeatable\tshutdown\tstacked mod\tpartitioning\treplace\tsignal\tstart mode\tpartitions\treplica\tsigned\tstarting modifies\tpassword\treplicas\tsimple\tstarts modify\tpassword_lock\treplicatedo\tskip\tstats_auto_re month\tpath\treplicatedo\tslave\tstats_persist multilinestri\tpercent_rank\treplicate_ign\tslow\tstatssample multipoint\tpersist\treplicate_ign\tsmallint\tstatus multipolygon\tpersist_only\treplicate_rew\tsnapshot\tstop mutex\tphase\treplicate_wil\tsocket\tstorage mysql_errno\tplugin\treplicate_wil\tsome\tstored name\tplugins\treplication\tsoname\tstraight_join names\tplugin_dir\trequire\tsounds\tstream national\tpoint\trequire_row_f\tsource\tstring natural\tpolygon\treset\tsource_auto_p\tsubclass_orig nchar\tport\tresignal\tsource_bind\tsubject ndb\tprecedes\tresource\tsource_compre\tsubpartition ndbcluster\tpreceding\trespect\tsource_connec\tsubpartitions nested\tprecision\trestart\tsource_delay\tsuper network_names\tprepare\trestore\tsource_heartb\tsuspend swaps\ttimestampdiff\tundo_buffer_s\tutc_date\twhen switches\ttinyblob\tunicode\tutc_time\twhere system\ttinyint\tuninstall\tutc_timestamp\twhile table\ttinytext\tunion\tvalidation\twindow tables\ttls\tunique\tvalue\twith tablespace\tto\tunknown\tvalues\twithout table_checksu\ttrailing\tunlock\tvarbinary\twork table_name\ttransaction\tunregister\tvarchar\twrapper temporary\ttrigger\tunsigned\tvarcharacter\twrite temptable\ttriggers\tuntil\tvariables\tx509 terminated\ttrue\tupdate\tvarying\txa text\ttruncate\tupgrade\tvcpu\txid than\ttype\turl\tview\txml then\ttypes\tusage\tvirtual\txor thread_priori\tunbounded\tuse\tvisible\tyear ties\tuncommitted\tuser\twait\tyear_month time\tundefined\tuser_resource\twarnings\tzerofill timestamp\tundo\tuse_frm\tweek\tzone timestampadd\tundofile\tusing\tweight_string\t ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V1: 2023-08-21​ First version ","version":"Next","tagName":"h2"},{"title":"Amazon RDS for PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#prerequisites","content":" To use this connector, you'll need: A Postgres database to which to materialize, and user credentials. The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#setup","content":" You must configure your database to allow connections from Estuary. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. ","version":"Next","tagName":"h2"},{"title":"Connect Directly With Amazon RDS or Amazon Aurora​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#connect-directly-with-amazon-rds-or-amazon-aurora","content":" Edit the VPC security group associated with your database instance, or create a new VPC security group and associate it with the database instance. Modify the instance, choosing Publicly accessible in the Connectivity settings. See the instructions below to use SSH Tunneling instead of enabling public access. Refer to the steps in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. ","version":"Next","tagName":"h3"},{"title":"Connect With SSH Tunneling​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#connect-with-ssh-tunneling","content":" To allow SSH tunneling to a database instance hosted on AWS, you'll need to create a virtual computing environment, or instance, in Amazon EC2. Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key Import your SSH key into AWS. Launch a new instance in EC2. During setup: Configure the security group to allow SSH connection from anywhere.When selecting a key pair, choose the key you just imported. Connect to the instance, setting the user name to ec2-user. Find and note the instance's public DNS. This will be formatted like: ec2-198-21-98-1.compute-1.amazonaws.com. Configuration Tip To configure the connector, you must specify the database address in the format host:port. (You can also supply host only; the connector will use the port 5432 by default, which is correct in many cases.) You can find the host and port in the following locations in each platform's console: Amazon RDS: host as Endpoint; port as Port. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Postgres materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 5432.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /schema\tDatabase Schema\tDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables\tstring\t"public" /user\tUser\tDatabase user to connect as.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/additional_table_create_sql\tAdditional Table Create SQL\tAdditional SQL statement(s) to be run in the same transaction that creates the table.\tstring /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse /schema\tAlternative Schema\tAlternative schema for this table (optional). Overrides schema set in endpoint configuration.\tstring /table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired SSL Mode​ Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-postgres:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#reserved-words","content":" PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation. These reserve words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words abs\tcurrent_transform_group_for_type\tindicator\torder\tsqlexception absolute\tcurrent_user\tinitial\tout\tsqlstate acos\tcursor\tinitially\touter\tsqlwarning action\tcycle\tinner\toutput\tsqrt add\tdatalink\tinout\tover\tstart all\tdate\tinput\toverlaps\tstatic allocate\tday\tinsensitive\toverlay\tstddev_pop alter\tdeallocate\tinsert\tpad\tstddev_samp analyse\tdec\tint\tparameter\tsubmultiset analyze\tdecfloat\tinteger\tpartial\tsubset and\tdecimal\tintersect\tpartition\tsubstring any\tdeclare\tintersection\tpattern\tsubstring_regex are\tdefault\tinterval\tper\tsucceeds array\tdeferrable\tinto\tpercent\tsum array_agg\tdeferred\tis\tpercentile_cont\tsymmetric array_max_cardinality\tdefine\tisnull\tpercentile_disc\tsystem as\tdelete\tisolation\tpercent_rank\tsystem_time asc\tdense_rank\tjoin\tperiod\tsystem_user asensitive\tderef\tjson_array\tpermute\ttable asin\tdesc\tjson_arrayagg\tplacing\ttablesample assertion\tdescribe\tjson_exists\tportion\ttan asymmetric\tdescriptor\tjson_object\tposition\ttanh at\tdeterministic\tjson_objectagg\tposition_regex\ttemporary atan\tdiagnostics\tjson_query\tpower\tthen atomic\tdisconnect\tjson_table\tprecedes\ttime authorization\tdistinct\tjson_table_primitive\tprecision\ttimestamp avg\tdlnewcopy\tjson_value\tprepare\ttimezone_hour begin\tdlpreviouscopy\tkey\tpreserve\ttimezone_minute begin_frame\tdlurlcomplete\tlag\tprimary\tto begin_partition\tdlurlcompleteonly\tlanguage\tprior\ttrailing between\tdlurlcompletewrite\tlarge\tprivileges\ttransaction bigint\tdlurlpath\tlast\tprocedure\ttranslate binary\tdlurlpathonly\tlast_value\tptf\ttranslate_regex bit\tdlurlpathwrite\tlateral\tpublic\ttranslation bit_length\tdlurlscheme\tlead\trange\ttreat blob\tdlurlserver\tleading\trank\ttrigger boolean\tdlvalue\tleft\tread\ttrim both\tdo\tlevel\treads\ttrim_array by\tdomain\tlike\treal\ttrue call\tdouble\tlike_regex\trecursive\ttruncate called\tdrop\tlimit\tref\tuescape cardinality\tdynamic\tlistagg\treferences\tunion cascade\teach\tln\treferencing\tunique cascaded\telement\tlocal\tregr_avgx\tunknown case\telse\tlocaltime\tregr_avgy\tunmatched cast\tempty\tlocaltimestamp\tregr_count\tunnest catalog\tend\tlog\tregr_intercept\tupdate ceil\tend-exec\tlog10\tregr_r2\tupper ceiling\tend_frame\tlower\tregr_slope\tusage char\tend_partition\tmatch\tregr_sxx\tuser character\tequals\tmatches\tregr_sxy\tusing character_length\tescape\tmatch_number\tregr_syy\tvalue char_length\tevery\tmatch_recognize\trelative\tvalues check\texcept\tmax\trelease\tvalue_of classifier\texception\tmeasures\trestrict\tvarbinary clob\texec\tmember\tresult\tvarchar close\texecute\tmerge\treturn\tvariadic coalesce\texists\tmethod\treturning\tvarying collate\texp\tmin\treturns\tvar_pop collation\texternal\tminute\trevoke\tvar_samp collect\textract\tmod\tright\tverbose column\tfalse\tmodifies\trollback\tversioning commit\tfetch\tmodule\trollup\tview concurrently\tfilter\tmonth\trow\twhen condition\tfirst\tmultiset\trows\twhenever connect\tfirst_value\tnames\trow_number\twhere connection\tfloat\tnational\trunning\twidth_bucket constraint\tfloor\tnatural\tsavepoint\twindow constraints\tfor\tnchar\tschema\twith contains\tforeign\tnclob\tscope\twithin continue\tfound\tnew\tscroll\twithout convert\tframe_row\tnext\tsearch\twork copy\tfree\tno\tsecond\twrite corr\tfreeze\tnone\tsection\txml corresponding\tfrom\tnormalize\tseek\txmlagg cos\tfull\tnot\tselect\txmlattributes cosh\tfunction\tnotnull\tsensitive\txmlbinary count\tfusion\tnth_value\tsession\txmlcast covar_pop\tget\tntile\tsession_user\txmlcomment covar_samp\tglobal\tnull\tset\txmlconcat create\tgo\tnullif\tshow\txmldocument cross\tgoto\tnumeric\tsimilar\txmlelement cube\tgrant\toccurrences_regex\tsin\txmlexists cume_dist\tgroup\toctet_length\tsinh\txmlforest current\tgrouping\tof\tsize\txmliterate current_catalog\tgroups\toffset\tskip\txmlnamespaces current_date\thaving\told\tsmallint\txmlparse current_default_transform_group\thold\tomit\tsome\txmlpi current_path\thour\ton\tspace\txmlquery current_role\tidentity\tone\tspecific\txmlserialize current_row\tilike\tonly\tspecifictype\txmltable current_schema\timmediate\topen\tsql\txmltext current_time\timport\toption\tsqlcode\txmlvalidate current_timestamp\tin\tor\tsqlerror\tyear ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V4: 2022-11-30​ This version includes breaking changes to materialized table columns. These provide more consistent column names and types, but tables created from previous versions of the connector may not be compatible with this version. Capitalization is now preserved when fields in Flow are converted to Postgres column names. Previously, fields containing uppercase letters were converted to lowercase. Field names and values of types date, duration, ipv4, ipv6, macaddr, macaddr8, and time are now converted into their corresponding Postgres types. Previously, only date-time was converted, and all others were materialized as strings. ","version":"Next","tagName":"h2"},{"title":"Google Cloud SQL for PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#prerequisites","content":" To use this connector, you'll need: A Postgres database to which to materialize, and user credentials. The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#setup","content":" You must configure your database to allow connections from Estuary. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. ","version":"Next","tagName":"h2"},{"title":"Conenecting Directly to Google Cloud SQL​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#conenecting-directly-to-google-cloud-sql","content":" Enable public IP on your database and add the Estuary Flow IP addresses as authorized IP addresses. ","version":"Next","tagName":"h3"},{"title":"Connect With SSH Tunneling​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#connect-with-ssh-tunneling","content":" To allow SSH tunneling to a database instance hosted on Google Cloud, you must set up a virtual machine (VM). Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key If your Google login differs from your local username, generate a key that includes your Google email address as a comment: ssh-keygen -m PEM -t rsa -C user@domain.com Create and start a new VM in GCP, choosing an image that supports OS Login. Add your public key to the VM. Reserve an external IP address and connect it to the VM during setup. Note the generated address. Configuration Tip To configure the connector, you must specify the database address in the format host:port. (You can also supply host only; the connector will use the port 5432 by default, which is correct in many cases.) You can find the host and port in the following location: Host as Private IP Address; port is always 5432. You may need to configure private IP on your database. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Postgres materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 5432.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /schema\tDatabase Schema\tDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables\tstring\t"public" /user\tUser\tDatabase user to connect as.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/additional_table_create_sql\tAdditional Table Create SQL\tAdditional SQL statement(s) to be run in the same transaction that creates the table.\tstring /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse /schema\tAlternative Schema\tAlternative schema for this table (optional). Overrides schema set in endpoint configuration.\tstring /table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-postgres:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#reserved-words","content":" PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation. These reserve words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words abs\tcurrent_transform_group_for_type\tindicator\torder\tsqlexception absolute\tcurrent_user\tinitial\tout\tsqlstate acos\tcursor\tinitially\touter\tsqlwarning action\tcycle\tinner\toutput\tsqrt add\tdatalink\tinout\tover\tstart all\tdate\tinput\toverlaps\tstatic allocate\tday\tinsensitive\toverlay\tstddev_pop alter\tdeallocate\tinsert\tpad\tstddev_samp analyse\tdec\tint\tparameter\tsubmultiset analyze\tdecfloat\tinteger\tpartial\tsubset and\tdecimal\tintersect\tpartition\tsubstring any\tdeclare\tintersection\tpattern\tsubstring_regex are\tdefault\tinterval\tper\tsucceeds array\tdeferrable\tinto\tpercent\tsum array_agg\tdeferred\tis\tpercentile_cont\tsymmetric array_max_cardinality\tdefine\tisnull\tpercentile_disc\tsystem as\tdelete\tisolation\tpercent_rank\tsystem_time asc\tdense_rank\tjoin\tperiod\tsystem_user asensitive\tderef\tjson_array\tpermute\ttable asin\tdesc\tjson_arrayagg\tplacing\ttablesample assertion\tdescribe\tjson_exists\tportion\ttan asymmetric\tdescriptor\tjson_object\tposition\ttanh at\tdeterministic\tjson_objectagg\tposition_regex\ttemporary atan\tdiagnostics\tjson_query\tpower\tthen atomic\tdisconnect\tjson_table\tprecedes\ttime authorization\tdistinct\tjson_table_primitive\tprecision\ttimestamp avg\tdlnewcopy\tjson_value\tprepare\ttimezone_hour begin\tdlpreviouscopy\tkey\tpreserve\ttimezone_minute begin_frame\tdlurlcomplete\tlag\tprimary\tto begin_partition\tdlurlcompleteonly\tlanguage\tprior\ttrailing between\tdlurlcompletewrite\tlarge\tprivileges\ttransaction bigint\tdlurlpath\tlast\tprocedure\ttranslate binary\tdlurlpathonly\tlast_value\tptf\ttranslate_regex bit\tdlurlpathwrite\tlateral\tpublic\ttranslation bit_length\tdlurlscheme\tlead\trange\ttreat blob\tdlurlserver\tleading\trank\ttrigger boolean\tdlvalue\tleft\tread\ttrim both\tdo\tlevel\treads\ttrim_array by\tdomain\tlike\treal\ttrue call\tdouble\tlike_regex\trecursive\ttruncate called\tdrop\tlimit\tref\tuescape cardinality\tdynamic\tlistagg\treferences\tunion cascade\teach\tln\treferencing\tunique cascaded\telement\tlocal\tregr_avgx\tunknown case\telse\tlocaltime\tregr_avgy\tunmatched cast\tempty\tlocaltimestamp\tregr_count\tunnest catalog\tend\tlog\tregr_intercept\tupdate ceil\tend-exec\tlog10\tregr_r2\tupper ceiling\tend_frame\tlower\tregr_slope\tusage char\tend_partition\tmatch\tregr_sxx\tuser character\tequals\tmatches\tregr_sxy\tusing character_length\tescape\tmatch_number\tregr_syy\tvalue char_length\tevery\tmatch_recognize\trelative\tvalues check\texcept\tmax\trelease\tvalue_of classifier\texception\tmeasures\trestrict\tvarbinary clob\texec\tmember\tresult\tvarchar close\texecute\tmerge\treturn\tvariadic coalesce\texists\tmethod\treturning\tvarying collate\texp\tmin\treturns\tvar_pop collation\texternal\tminute\trevoke\tvar_samp collect\textract\tmod\tright\tverbose column\tfalse\tmodifies\trollback\tversioning commit\tfetch\tmodule\trollup\tview concurrently\tfilter\tmonth\trow\twhen condition\tfirst\tmultiset\trows\twhenever connect\tfirst_value\tnames\trow_number\twhere connection\tfloat\tnational\trunning\twidth_bucket constraint\tfloor\tnatural\tsavepoint\twindow constraints\tfor\tnchar\tschema\twith contains\tforeign\tnclob\tscope\twithin continue\tfound\tnew\tscroll\twithout convert\tframe_row\tnext\tsearch\twork copy\tfree\tno\tsecond\twrite corr\tfreeze\tnone\tsection\txml corresponding\tfrom\tnormalize\tseek\txmlagg cos\tfull\tnot\tselect\txmlattributes cosh\tfunction\tnotnull\tsensitive\txmlbinary count\tfusion\tnth_value\tsession\txmlcast covar_pop\tget\tntile\tsession_user\txmlcomment covar_samp\tglobal\tnull\tset\txmlconcat create\tgo\tnullif\tshow\txmldocument cross\tgoto\tnumeric\tsimilar\txmlelement cube\tgrant\toccurrences_regex\tsin\txmlexists cume_dist\tgroup\toctet_length\tsinh\txmlforest current\tgrouping\tof\tsize\txmliterate current_catalog\tgroups\toffset\tskip\txmlnamespaces current_date\thaving\told\tsmallint\txmlparse current_default_transform_group\thold\tomit\tsome\txmlpi current_path\thour\ton\tspace\txmlquery current_role\tidentity\tone\tspecific\txmlserialize current_row\tilike\tonly\tspecifictype\txmltable current_schema\timmediate\topen\tsql\txmltext current_time\timport\toption\tsqlcode\txmlvalidate current_timestamp\tin\tor\tsqlerror\tyear ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V4: 2022-11-30​ This version includes breaking changes to materialized table columns. These provide more consistent column names and types, but tables created from previous versions of the connector may not be compatible with this version. Capitalization is now preserved when fields in Flow are converted to Postgres column names. Previously, fields containing uppercase letters were converted to lowercase. Field names and values of types date, duration, ipv4, ipv6, macaddr, macaddr8, and time are now converted into their corresponding Postgres types. Previously, only date-time was converted, and all others were materialized as strings. ","version":"Next","tagName":"h2"},{"title":"Rockset","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Rockset","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/#prerequisites","content":" To use this connector, you'll need: A Rockset API key generated The API key must have the Member or Admin role. A Rockset workspace Optional; if none exist, one will be created by the connector. A Rockset collection Optional; if none exist, one will be created by the connector. At least one Flow collection tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Rockset","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Rockset materialization, which will direct one or more of your Flow collections to your desired Rockset collections. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Rockset","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_key\tRockset API Key\tThe key used to authenticate to the Rockset API. Must have role of admin or member.\tstring\tRequired /region_base_url\tRegion Base URL\tThe base URL to connect to your Rockset deployment. Example: api.usw2a1.rockset.com (do not include the protocol). See supported options and how to find yours.\tstring\tRequired Bindings​ The binding configuration includes the optional Advanced collection settings section. These settings can help optimize your output Rockset collections: Clustering fields: You can specify clustering fields for your Rockset collection's columnar index to help optimize specific query patterns. See the Rockset docs for more information.Retention period: Amount of time before data is purged, in seconds. A low value will keep the amount of data indexed in Rockset smaller. Property\tTitle\tDescription\tType\tRequired/Default/advancedCollectionSettings\tAdvanced Collection Settings object /advancedCollectionSettings/clustering_key\tClustering Key\tList of clustering fields\tarray /advancedCollectionSettings/clustering_key/-/field_name\tField Name\tThe name of a field\tstring /advancedCollectionSettings/retention_secs\tRetention Period\tNumber of seconds after which data is purged based on event time\tinteger /collection\tRockset Collection\tThe name of the Rockset collection (will be created if it does not exist)\tstring\tRequired /workspace\tWorkspace\tThe name of the Rockset workspace (will be created if it does not exist)\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Rockset","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: region_base_url: api.usw2a1.rockset.com api_key: supersecret # Path to the latest version of the connector, provided as a Docker image image: ghcr.io/estuary/materialize-rockset:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: workspace: ${namespace_name} collection: ${table_name} source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Delta updates and reduction strategies​","type":1,"pageTitle":"Rockset","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/#delta-updates-and-reduction-strategies","content":" The Rockset connector operates only in delta updates mode. This means that Rockset, rather than Flow, performs the document merge. In some cases, this will affect how materialized views look in Rockset compared to other systems that use standard updates. Rockset merges documents by the key defined in the Flow collection schema, and always uses the semantics of RFC 7396 - JSON merge. This differs from how Flow would reduce documents, most notably in that Rockset will not honor any reduction strategies defined in your Flow schema. For consistent output of a given collection across Rockset and other materialization endpoints, it's important that that collection's reduction annotations in Flow mirror Rockset's semantics. To accomplish this, ensure that your collection schema has the following data reductions defined in its schema: A top-level reduction strategy of mergeA strategy of lastWriteWins for all nested values (this is the default) ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Rockset","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V2: 2022-12-06​ Region Base URL was added and is now required as part of the endpoint configuration.Event Time fields and the Insert Only option were removed from the advanced collection settings. ","version":"Next","tagName":"h2"},{"title":"Slack","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/#prerequisites","content":" To use this connector, ensure you have the following: An active Slack workspace with appropriate permissions.Slack credentials and access token for authentication.At least one Flow collection. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/#configuration","content":" The Slack connector is available for use in the Flow web application. To learn more about connectors and how to set them up, read our guide on using connectors. Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/access_token\tAccess Token\tThe Slack API access token for authentication.\tstring\tRequired /client_id\tClient ID\tClient ID for authentication.\tstring\tRequired /client_secret\tClient Secret\tThe Slack API client secret.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/source\tSource\tSource data in Flow to be sent to Slack.\tstring\tRequired /channel\tChannel\tThe ID of the Slack channel to send messages to.\tstring\tRequired /display_name\tDisplay Name\tThe display name for the sender in Slack.\tstring /logo_emoji\tLogo Emoji\tThe emoji to be used.\tstring\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/#sample","content":" materializations: ${PREFIX}/${MATERIALIZATION_NAME}: endpoint: connector: image: ghcr.io/estuary/materialize-slack:dev config: credentials: auth_type: OAuth access_token: {secret} client_id: {your_client_id} client_secret: {secret} bindings: - source: ${PREFIX}/source_name resource: channel: "id: C05A95LJHSL" sender_config: display_name: Task Monitor logo_emoji: ":eyes:" ","version":"Next","tagName":"h3"},{"title":"SQLite","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"SQLite","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/#prerequisites","content":" To use this connector, you'll need: At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"SQLite","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/#configuration","content":" This materialization requires no configuration, and all you need to do is choose a collection to materialize. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"SQLite","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/#properties","content":" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"SQLite","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-sqlite:dev config: {} bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"SQLite","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/#delta-updates","content":" This connector does not support delta updates at the moment. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"SQLite","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/#reserved-words","content":" SQLite has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official SQlite documentation. These reserve words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words\tabort\tintersect action\tinto add\tis after\tisnull all\tjoin alter\tkey always\tlast analyze\tleft and\tlike as\tlimit asc\tmatch attach\tmaterialized autoincrement\tnatural before\tno begin\tnot between\tnothing by\tnotnull cascade\tnull case\tnulls cast\tof check\toffset collate\ton column\tor commit\torder conflict\tothers constraint\touter create\tover cross\tpartition current\tplan current_date\tpragma current_time\tpreceding current_timestamp\tprimary database\tquery default\traise deferrable\trange deferred\trecursive delete\treferences desc\tregexp detach\treindex distinct\trelease do\trename drop\treplace each\trestrict else\treturning end\tright escape\trollback except\trow exclude\trows exclusive\tsavepoint exists\tselect explain\tset fail\ttable filter\ttemp first\ttemporary following\tthen for\tties foreign\tto from\ttransaction full\ttrigger generated\tunbounded glob\tunion group\tunique groups\tupdate having\tusing if\tvacuum ignore\tvalues immediate\tview in\tvirtual index\twhen indexed\twhere initially\twindow inner\twith insert\twithout instead\t ","version":"Next","tagName":"h2"},{"title":"Amazon RDS for SQL Server","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#prerequisites","content":" To use this connector, you'll need: A SQLServer database to which to materialize, and user credentials. SQLServer 2017 and later are supportedThe connector will create new tables in the database per your specification, so user credentials must have access to create new tables. At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup Amazon RDS for SQL Server​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#setup-amazon-rds-for-sql-server","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the database, setting Public accessibility to Yes.Edit the VPC security group associated with your database, or create a new VPC security group and associate it as described in the Amazon documentation.Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Create user and password for use with the connector. CREATE LOGIN flow_materialize WITH PASSWORD = 'secret'; CREATE USER flow_materialize FOR LOGIN flow_materialize; -- Grant control on the database to flow_materialize GRANT CONTROL ON DATABASE::<database> TO flow_materialize; In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Connecting to SQLServer​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#connecting-to-sqlserver","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the database, setting Public accessibility to Yes.Edit the VPC security group associated with your database, or create a new VPC security group and associate it as described in the Amazon documentation.Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Create user and password for use with the connector. CREATE LOGIN flow_materialize WITH PASSWORD = 'Secret123!'; CREATE USER flow_materialize FOR LOGIN flow_materialize; -- Grant control on the database to flow_materialize GRANT CONTROL ON DATABASE::<database> TO flow_materialize; In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a SQLServer materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring\tRequired /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 3306.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-sqlserver:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#reserved-words","content":" SQLServer has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words in the official SQLServer documentation. These reserved words are listed in the table below. Flow automatically quotes fields that are in this list. | Reserved words | | | | | | -------------- | ------------- | ------------- | ------------- | ------------- | ----- | | absolute | connect | else | intersect | on | | action | connection | end | intersection | only | | ada | constraint | end-exec | interval | open | | add | constraints | equals | into | opendatasourc | | admin | constructor | errlvl | is | openquery | | after | contains | escape | isolation | openrowset | | aggregate | containstable | every | iterate | openxml | | alias | continue | except | join | operation | | all | convert | exception | key | option | | allocate | corr | exec | kill | or | | alter | corresponding | execute | language | order | | and | count | exists | large | ordinality | | any | covar_pop | exit | last | out | | are | covar_samp | external | lateral | outer | | array | create | extract | leading | output | | as | cross | false | left | over | | asc | cube | fetch | less | overlaps | | asensitive | cume_dist | file | level | overlay | | assertion | current | fillfactor | like | pad | | asymmetric | current_catal | filter | like_regex | parameter | | at | current_date | first | limit | parameters | | atomic | current_defau | float | lineno | partial | | authorization | current_path | for | ln | partition | | avg | current_role | foreign | load | pascal | | backup | current_schem | fortran | local | path | | before | current_time | found | localtime | percent | | begin | current_times | free | localtimestam | percent_rank | | between | current_trans | freetext | locator | percentile_co | | binary | current_user | freetexttable | lower | percentile_di | | bit | cursor | from | map | pivot | | bit_length | cycle | full | match | plan | | blob | data | fulltexttable | max | position | | boolean | database | function | member | position_rege | | both | date | fusion | merge | postfix | | breadth | day | general | method | precision | | break | dbcc | get | min | prefix | | browse | deallocate | global | minute | preorder | | bulk | dec | go | mod | prepare | | by | decimal | goto | modifies | preserve | | call | declare | grant | modify | primary | | called | default | group | module | print | | cardinality | deferrable | grouping | month | prior | | cascade | deferred | having | multiset | privileges | | cascaded | delete | hold | names | proc | | case | deny | holdlock | national | procedure | | cast | depth | host | natural | public | | catalog | deref | hour | nchar | raiserror | | char | desc | identity | nclob | range | | char_length | describe | identity_inse | new | read | | character | descriptor | identitycol | next | reads | | character_len | destroy | if | no | readtext | | check | destructor | ignore | nocheck | real | | checkpoint | deterministic | immediate | nonclustered | reconfigure | | class | diagnostics | in | none | recursive | | clob | dictionary | include | normalize | ref | | close | disconnect | index | not | references | | clustered | disk | indicator | null | referencing | | coalesce | distinct | initialize | nullif | regr_avgx | | collate | distributed | initially | numeric | regr_avgy | | collation | domain | inner | object | regr_count | | collect | double | inout | occurrences_r | regr_intercep | | column | drop | input | octet_length | regr_r2 | | commit | dump | insensitive | of | regr_slope | | completion | dynamic | insert | off | regr_sxx | | compute | each | int | offsets | regr_sxy | | condition | element | integer | old | regr_syy | | relative | semanticsimil | structure | truncate | window | | release | semanticsimil | submultiset | try_convert | with | | replication | sensitive | substring | tsequal | within | group | | restore | sequence | substring_reg | uescape | within | | restrict | session | sum | under | without | | result | session_user | symmetric | union | work | | return | set | system | unique | write | | returns | sets | system_user | unknown | writetext | | revert | setuser | table | unnest | xmlagg | | revoke | shutdown | tablesample | unpivot | xmlattributes | | right | similar | temporary | update | xmlbinary | | role | size | terminate | updatetext | xmlcast | | rollback | smallint | textsize | upper | xmlcomment | | rollup | some | than | usage | xmlconcat | | routine | space | then | use | xmldocument | | row | specific | time | user | xmlelement | | rowcount | specifictype | timestamp | using | xmlexists | | rowguidcol | sql | timezone_hour | value | xmlforest | | rows | sqlca | timezone_minu | values | xmliterate | | rule | sqlcode | to | var_pop | xmlnamespaces | | save | sqlerror | top | var_samp | xmlparse | | savepoint | sqlexception | trailing | varchar | xmlpi | | schema | sqlstate | tran | variable | xmlquery | | scope | sqlwarning | transaction | varying | xmlserialize | | scroll | start | translate | view | xmltable | | search | state | translate_reg | waitfor | xmltext | | second | statement | translation | when | xmlvalidate | | section | static | treat | whenever | year | | securityaudit | statistics | trigger | where | zone | | select | stddev_pop | trim | while | | semantickeyph | stddev_samp | true | width_bucket | ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V1: 2023-09-01​ First version ","version":"Next","tagName":"h2"},{"title":"Snowflake","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#prerequisites","content":" To use this connector, you'll need: A Snowflake account that includes: A target database, to which you'll materialize dataA schema — a logical grouping of database objects — within the target databaseA virtual warehouseA user with a role assigned that grants the appropriate access levels to these resources. See the script below for details. Know your Snowflake account's host URL. This is formatted using your Snowflake account identifier, for example, orgname-accountname.snowflakecomputing.com.At least one Flow collection tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#setup","content":" To meet the prerequisites, copy and paste the following script into the Snowflake SQL editor, replacing the variable names in the first six lines. If you'd like to use an existing database, warehouse, and/or schema, be sure to setdatabase_name, warehouse_name, and estuary_schema accordingly. If you specify a new name, the script will create the item for you. You can set estuary_role, estuary_user, and estuary_password to whatever you'd like. Check the All Queries check box, and click Run. set database_name = 'ESTUARY_DB'; set warehouse_name = 'ESTUARY_WH'; set estuary_role = 'ESTUARY_ROLE'; set estuary_user = 'ESTUARY_USER'; set estuary_password = 'secret'; set estuary_schema = 'ESTUARY_SCHEMA'; -- create role and schema for Estuary create role if not exists identifier($estuary_role); grant role identifier($estuary_role) to role SYSADMIN; -- Create snowflake DB create database if not exists identifier($database_name); use database identifier($database_name); create schema if not exists identifier($estuary_schema); -- create a user for Estuary create user if not exists identifier($estuary_user) password = $estuary_password default_role = $estuary_role default_warehouse = $warehouse_name; grant role identifier($estuary_role) to user identifier($estuary_user); grant all on schema identifier($estuary_schema) to identifier($estuary_role); -- create a warehouse for estuary create warehouse if not exists identifier($warehouse_name) warehouse_size = xsmall warehouse_type = standard auto_suspend = 60 auto_resume = true initially_suspended = true; -- grant Estuary role access to warehouse grant USAGE on warehouse identifier($warehouse_name) to role identifier($estuary_role); -- grant Estuary access to database grant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role); -- change role to ACCOUNTADMIN for STORAGE INTEGRATION support to Estuary (only needed for Snowflake on GCP) use role ACCOUNTADMIN; grant CREATE INTEGRATION on account to role identifier($estuary_role); use role sysadmin; COMMIT; ","version":"Next","tagName":"h3"},{"title":"Key-pair Authentication & Snowpipe​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#key-pair-authentication--snowpipe","content":" In order to enable use of Snowpipe for delta updates bindings, you need to authenticate using key-pair authentication, also known as JWT authentication. To set up your user for key-pair authentication, first generate a key-pair in your shell: # generate a private key openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt # generate a public key openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub # read the public key and copy it to clipboard cat rsa_key.pub -----BEGIN PUBLIC KEY----- MIIBIj... -----END PUBLIC KEY----- Then assign the public key with your Snowflake user using these SQL commands: ALTER USER $estuary_user SET RSA_PUBLIC_KEY='MIIBIjANBgkqh...' Verify the public key fingerprint in Snowflake matches the one you have locally: DESC USER $estuary_user; SELECT TRIM((SELECT "value" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE "property" = 'RSA_PUBLIC_KEY_FP'), 'SHA256:'); Then compare with the local version: openssl rsa -pubin -in rsa_key.pub -outform DER | openssl dgst -sha256 -binary | openssl enc -base64 Now you can use the generated private key when configuring your Snowflake connector. Once you have key-pair authentication enabled, delta updates bindings will use Snowpipe for loading data. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Snowflake materialization, which will direct one or more of your Flow collections to new Snowflake tables. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/host\tHost (Account URL)\tThe Snowflake Host used for the connection. Example: orgname-accountname.snowflakecomputing.com (do not include the protocol).\tstring\tRequired /database\tDatabase\tName of the Snowflake database to which to materialize\tstring\tRequired /schema\tSchema\tDatabase schema for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables\tstring\tRequired /warehouse\tWarehouse\tName of the data warehouse that contains the database\tstring /role\tRole\tRole assigned to the user\tstring /account\tAccount\tThe Snowflake account identifier\tstring /credentials\tCredentials\tCredentials for authentication\tobject\tRequired /credentials/auth_type\tAuthentication type\tOne of user_password or jwt\tstring\tRequired /credentials/user\tUser\tSnowflake username\tstring\tRequired /credentials/password\tPassword\tRequired if using user_password authentication\tstring\tRequired /credentials/privateKey\tPrivate Key\tRequired if using jwt authentication\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name\tstring\tRequired /schema\tAlternative Schema\tAlternative schema for this table\tstring /delta_updates\tDelta updates\tWhether to use standard or delta updates\tboolean\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#sample","content":" User and password authentication: materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: database: acmeCo_db host: orgname-accountname.snowflakecomputing.com schema: acmeCo_flow_schema warehouse: acmeCo_warehouse credentials: auth_type: user_pasword user: snowflake_user password: secret image: ghcr.io/estuary/materialize-snowflake:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: table: ${table_name} source: ${PREFIX}/${source_collection} Key-pair authentication: materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: database: acmeCo_db host: orgname-accountname.snowflakecomputing.com schema: acmeCo_flow_schema warehouse: acmeCo_warehouse credentials: auth_type: jwt user: snowflake_user privateKey: | -----BEGIN PRIVATE KEY----- MIIEv.... ... ... ... ... ... -----END PRIVATE KEY----- image: ghcr.io/estuary/materialize-snowflake:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: table: ${table_name} source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Sync Schedule​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#sync-schedule","content":" This connector supports configuring a schedule for sync frequency. You can read about how to configure this here. Snowflake compute is priced per second of activity, with a minimum of 60 seconds. Inactive warehouses don't incur charges. To keep costs down, you'll want to minimize your warehouse's active time. To accomplish this, we recommend a two-pronged approach: Configure your Snowflake warehouse to auto-suspend after 60 seconds. This ensures that after each transaction completes, you'll only be charged for one minute of compute, Snowflake's smallest granularity. Use a query like the one shown below, being sure to substitute your warehouse name: ALTER WAREHOUSE ESTUARY_WH SET auto_suspend = 60; Configure the materialization's Sync Schedule based on your requirements for data freshness. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. Enabling delta updates will prevent Flow from querying for documents in your Snowflake table, which can reduce latency and costs for large datasets. If you're certain that all events will have unique keys, enabling delta updates is a simple way to improve performance with no effect on the output. However, enabling delta updates is not suitable for all workflows, as the resulting table in Snowflake won't be fully reduced. You can enable delta updates on a per-binding basis: bindings: - resource: table: ${table_name} delta_updates: true source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h2"},{"title":"Performance considerations​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#performance-considerations","content":" ","version":"Next","tagName":"h2"},{"title":"Optimizing performance for standard updates​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#optimizing-performance-for-standard-updates","content":" When using standard updates for a large dataset, the collection key you choose can have a significant impact on materialization performance and efficiency. Snowflake uses micro partitions to physically arrange data within tables. Each micro partition includes metadata, such as the minimum and maximum values for each column. If you choose a collection key that takes advantage of this metadata to help Snowflake prune irrelevant micro partitions, you'll see dramatically better performance. For example, if you materialize a collection with a key of /user_id, it will tend to perform far worse than a materialization of /date, /user_id. This is because most materializations tend to be roughly chronological over time, and that means that data is written to Snowflake in roughly /date order. This means that updates of keys /date, /user_id will need to physically read far fewer rows as compared to a key like /user_id, because those rows will tend to live in the same micro-partitions, and Snowflake is able to cheaply prune micro-partitions that aren't relevant to the transaction. ","version":"Next","tagName":"h3"},{"title":"Snowpipe​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#snowpipe","content":" Snowpipe allows for loading data into target tables without waking up the warehouse, which can be cheaper and more performant. Snowpipe can be used for delta updates bindings, and it requires configuring your authentication using a private key. Instructions for configuring key-pair authentication can be found in this page: Key-pair Authentication & Snowpipe ","version":"Next","tagName":"h3"},{"title":"Timestamp Data Type Mapping​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#timestamp-data-type-mapping","content":" Flow materializes timestamp data types as either TIMESTAMP_LTZ orTIMESTAMP_TZ columns in Snowflake. TIMESTAMP_LTZ is used unless the Snowflake TIMESTAMP_TYPE_MAPPING configuration is set to TIMESTAMP_TZ, which will cause Flow to use TIMESTAMP_TZ columns. Flow never creates columns as TIMESTAMP_NTZ. See Snowflake documentation on TIMESTAMP_TYPE_MAPPING for more information. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#reserved-words","content":" Snowflake has a list of reserved words that must be quoted in order to be used as an identifier. Flow automatically quotes fields that are in the reserved words list. You can find this list in Snowflake's documentation here and in the table below. caution In Snowflake, objects created with quoted identifiers must always be referenced exactly as created, including the quotes. Otherwise, SQL statements and queries can result in errors. See the Snowflake docs. Reserved words account\tfrom\tqualify all\tfull\tregexp alter\tgrant\trevoke and\tgroup\tright any\tgscluster\trlike as\thaving\trow between\tilike\trows by\tin\tsample case\tincrement\tschema cast\tinner\tselect check\tinsert\tset column\tintersect\tsome connect\tinto\tstart connection\tis\ttable constraint\tissue\ttablesample create\tjoin\tthen cross\tlateral\tto current\tleft\ttrigger current_date\tlike\ttrue current_time\tlocaltime\ttry_cast current_timestamp\tlocaltimestamp\tunion current_user\tminus\tunique database\tnatural\tupdate delete\tnot\tusing distinct\tnull\tvalues drop\tof\tview else\ton\twhen exists\tor\twhenever false\torder\twhere following\torganization\twith for ","version":"Next","tagName":"h2"},{"title":"Google Cloud SQL for SQLServer","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#prerequisites","content":" To use this connector, you'll need: A SQLServer database to which to materialize, and user credentials. SQLServer 2017 and later are supportedThe connector will create new tables in the database per your specification, so user credentials must have access to create new tables. At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup Google Cloud SQL for SQL Server​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#setup-google-cloud-sql-for-sql-server","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Enable public IP on your database and add Estuary Flow IP addresses as authorized IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Create user and password for use with the connector. CREATE LOGIN flow_materialize WITH PASSWORD = 'secret'; CREATE USER flow_materialize FOR LOGIN flow_materialize; -- Grant control on the database to flow_materialize GRANT CONTROL ON DATABASE::<database> TO flow_materialize; In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 1433. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Connecting to SQLServer​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#connecting-to-sqlserver","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Enable public IP on your database and add Estuary Flow IP addresses as authorized IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Create user and password for use with the connector. CREATE LOGIN flow_materialize WITH PASSWORD = 'Secret123!'; CREATE USER flow_materialize FOR LOGIN flow_materialize; -- Grant control on the database to flow_materialize GRANT CONTROL ON DATABASE::<database> TO flow_materialize; In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 1433. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a SQLServer materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring\tRequired /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 1433.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-sqlserver:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#reserved-words","content":" SQLServer has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words in the official SQLServer documentation. These reserved words are listed in the table below. Flow automatically quotes fields that are in this list. | Reserved words | | | | | | -------------- | ------------- | ------------- | ------------- | ------------- | ----- | | absolute | connect | else | intersect | on | | action | connection | end | intersection | only | | ada | constraint | end-exec | interval | open | | add | constraints | equals | into | opendatasourc | | admin | constructor | errlvl | is | openquery | | after | contains | escape | isolation | openrowset | | aggregate | containstable | every | iterate | openxml | | alias | continue | except | join | operation | | all | convert | exception | key | option | | allocate | corr | exec | kill | or | | alter | corresponding | execute | language | order | | and | count | exists | large | ordinality | | any | covar_pop | exit | last | out | | are | covar_samp | external | lateral | outer | | array | create | extract | leading | output | | as | cross | false | left | over | | asc | cube | fetch | less | overlaps | | asensitive | cume_dist | file | level | overlay | | assertion | current | fillfactor | like | pad | | asymmetric | current_catal | filter | like_regex | parameter | | at | current_date | first | limit | parameters | | atomic | current_defau | float | lineno | partial | | authorization | current_path | for | ln | partition | | avg | current_role | foreign | load | pascal | | backup | current_schem | fortran | local | path | | before | current_time | found | localtime | percent | | begin | current_times | free | localtimestam | percent_rank | | between | current_trans | freetext | locator | percentile_co | | binary | current_user | freetexttable | lower | percentile_di | | bit | cursor | from | map | pivot | | bit_length | cycle | full | match | plan | | blob | data | fulltexttable | max | position | | boolean | database | function | member | position_rege | | both | date | fusion | merge | postfix | | breadth | day | general | method | precision | | break | dbcc | get | min | prefix | | browse | deallocate | global | minute | preorder | | bulk | dec | go | mod | prepare | | by | decimal | goto | modifies | preserve | | call | declare | grant | modify | primary | | called | default | group | module | print | | cardinality | deferrable | grouping | month | prior | | cascade | deferred | having | multiset | privileges | | cascaded | delete | hold | names | proc | | case | deny | holdlock | national | procedure | | cast | depth | host | natural | public | | catalog | deref | hour | nchar | raiserror | | char | desc | identity | nclob | range | | char_length | describe | identity_inse | new | read | | character | descriptor | identitycol | next | reads | | character_len | destroy | if | no | readtext | | check | destructor | ignore | nocheck | real | | checkpoint | deterministic | immediate | nonclustered | reconfigure | | class | diagnostics | in | none | recursive | | clob | dictionary | include | normalize | ref | | close | disconnect | index | not | references | | clustered | disk | indicator | null | referencing | | coalesce | distinct | initialize | nullif | regr_avgx | | collate | distributed | initially | numeric | regr_avgy | | collation | domain | inner | object | regr_count | | collect | double | inout | occurrences_r | regr_intercep | | column | drop | input | octet_length | regr_r2 | | commit | dump | insensitive | of | regr_slope | | completion | dynamic | insert | off | regr_sxx | | compute | each | int | offsets | regr_sxy | | condition | element | integer | old | regr_syy | | relative | semanticsimil | structure | truncate | window | | release | semanticsimil | submultiset | try_convert | with | | replication | sensitive | substring | tsequal | within | group | | restore | sequence | substring_reg | uescape | within | | restrict | session | sum | under | without | | result | session_user | symmetric | union | work | | return | set | system | unique | write | | returns | sets | system_user | unknown | writetext | | revert | setuser | table | unnest | xmlagg | | revoke | shutdown | tablesample | unpivot | xmlattributes | | right | similar | temporary | update | xmlbinary | | role | size | terminate | updatetext | xmlcast | | rollback | smallint | textsize | upper | xmlcomment | | rollup | some | than | usage | xmlconcat | | routine | space | then | use | xmldocument | | row | specific | time | user | xmlelement | | rowcount | specifictype | timestamp | using | xmlexists | | rowguidcol | sql | timezone_hour | value | xmlforest | | rows | sqlca | timezone_minu | values | xmliterate | | rule | sqlcode | to | var_pop | xmlnamespaces | | save | sqlerror | top | var_samp | xmlparse | | savepoint | sqlexception | trailing | varchar | xmlpi | | schema | sqlstate | tran | variable | xmlquery | | scope | sqlwarning | transaction | varying | xmlserialize | | scroll | start | translate | view | xmltable | | search | state | translate_reg | waitfor | xmltext | | second | statement | translation | when | xmlvalidate | | section | static | treat | whenever | year | | securityaudit | statistics | trigger | where | zone | | select | stddev_pop | trim | while | | semantickeyph | stddev_samp | true | width_bucket | ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V1: 2023-09-01​ First version ","version":"Next","tagName":"h2"},{"title":"Microsoft SQLServer","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#prerequisites","content":" To use this connector, you'll need: A SQLServer database to which to materialize, and user credentials. SQLServer 2017 and later are supportedThe connector will create new tables in the database per your specification, so user credentials must have access to create new tables. At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#setup","content":" To meet these requirements, follow the steps for your hosting type. Self-hosted SQL ServerAzure SQL DatabaseAmazon RDS for SQL ServerGoogle Cloud SQL for SQL Server ","version":"Next","tagName":"h2"},{"title":"Self-hosted SQL Server​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#self-hosted-sql-server","content":" Connect to the server and issue the following commands: USE <database>; -- Create user and password for use with the connector. CREATE LOGIN flow_materialize WITH PASSWORD = 'secret'; CREATE USER flow_materialize FOR LOGIN flow_materialize; -- Grant control on the database to flow_materialize GRANT CONTROL ON DATABASE::<database> TO flow_materialize; Allow secure connection to Estuary Flow from your hosting environment. Either: Set up an SSH server for tunneling. When you fill out the endpoint configuration, include the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networksfor additional details and a sample. Allowlist the Estuary IP addresses in your firewall rules. ","version":"Next","tagName":"h3"},{"title":"Azure SQL Database​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#azure-sql-database","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Create a new firewall rule that grants access to the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Create user and password for use with the connector. CREATE LOGIN flow_materialize WITH PASSWORD = 'secret'; CREATE USER flow_materialize FOR LOGIN flow_materialize; -- Grant control on the database to flow_materialize GRANT CONTROL ON DATABASE::<database> TO flow_materialize; Note the following important items for configuration: Find the instance's host under Server Name. The port is always 1433. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a SQLServer materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring\tRequired /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 3306.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-sqlserver:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#reserved-words","content":" SQLServer has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words in the official SQLServer documentation. These reserved words are listed in the table below. Flow automatically quotes fields that are in this list. | Reserved words | | | | | | -------------- | ------------- | ------------- | ------------- | ------------- | ----- | | absolute | connect | else | intersect | on | | action | connection | end | intersection | only | | ada | constraint | end-exec | interval | open | | add | constraints | equals | into | opendatasourc | | admin | constructor | errlvl | is | openquery | | after | contains | escape | isolation | openrowset | | aggregate | containstable | every | iterate | openxml | | alias | continue | except | join | operation | | all | convert | exception | key | option | | allocate | corr | exec | kill | or | | alter | corresponding | execute | language | order | | and | count | exists | large | ordinality | | any | covar_pop | exit | last | out | | are | covar_samp | external | lateral | outer | | array | create | extract | leading | output | | as | cross | false | left | over | | asc | cube | fetch | less | overlaps | | asensitive | cume_dist | file | level | overlay | | assertion | current | fillfactor | like | pad | | asymmetric | current_catal | filter | like_regex | parameter | | at | current_date | first | limit | parameters | | atomic | current_defau | float | lineno | partial | | authorization | current_path | for | ln | partition | | avg | current_role | foreign | load | pascal | | backup | current_schem | fortran | local | path | | before | current_time | found | localtime | percent | | begin | current_times | free | localtimestam | percent_rank | | between | current_trans | freetext | locator | percentile_co | | binary | current_user | freetexttable | lower | percentile_di | | bit | cursor | from | map | pivot | | bit_length | cycle | full | match | plan | | blob | data | fulltexttable | max | position | | boolean | database | function | member | position_rege | | both | date | fusion | merge | postfix | | breadth | day | general | method | precision | | break | dbcc | get | min | prefix | | browse | deallocate | global | minute | preorder | | bulk | dec | go | mod | prepare | | by | decimal | goto | modifies | preserve | | call | declare | grant | modify | primary | | called | default | group | module | print | | cardinality | deferrable | grouping | month | prior | | cascade | deferred | having | multiset | privileges | | cascaded | delete | hold | names | proc | | case | deny | holdlock | national | procedure | | cast | depth | host | natural | public | | catalog | deref | hour | nchar | raiserror | | char | desc | identity | nclob | range | | char_length | describe | identity_inse | new | read | | character | descriptor | identitycol | next | reads | | character_len | destroy | if | no | readtext | | check | destructor | ignore | nocheck | real | | checkpoint | deterministic | immediate | nonclustered | reconfigure | | class | diagnostics | in | none | recursive | | clob | dictionary | include | normalize | ref | | close | disconnect | index | not | references | | clustered | disk | indicator | null | referencing | | coalesce | distinct | initialize | nullif | regr_avgx | | collate | distributed | initially | numeric | regr_avgy | | collation | domain | inner | object | regr_count | | collect | double | inout | occurrences_r | regr_intercep | | column | drop | input | octet_length | regr_r2 | | commit | dump | insensitive | of | regr_slope | | completion | dynamic | insert | off | regr_sxx | | compute | each | int | offsets | regr_sxy | | condition | element | integer | old | regr_syy | | relative | semanticsimil | structure | truncate | window | | release | semanticsimil | submultiset | try_convert | with | | replication | sensitive | substring | tsequal | within | group | | restore | sequence | substring_reg | uescape | within | | restrict | session | sum | under | without | | result | session_user | symmetric | union | work | | return | set | system | unique | write | | returns | sets | system_user | unknown | writetext | | revert | setuser | table | unnest | xmlagg | | revoke | shutdown | tablesample | unpivot | xmlattributes | | right | similar | temporary | update | xmlbinary | | role | size | terminate | updatetext | xmlcast | | rollback | smallint | textsize | upper | xmlcomment | | rollup | some | than | usage | xmlconcat | | routine | space | then | use | xmldocument | | row | specific | time | user | xmlelement | | rowcount | specifictype | timestamp | using | xmlexists | | rowguidcol | sql | timezone_hour | value | xmlforest | | rows | sqlca | timezone_minu | values | xmliterate | | rule | sqlcode | to | var_pop | xmlnamespaces | | save | sqlerror | top | var_samp | xmlparse | | savepoint | sqlexception | trailing | varchar | xmlpi | | schema | sqlstate | tran | variable | xmlquery | | scope | sqlwarning | transaction | varying | xmlserialize | | scroll | start | translate | view | xmltable | | search | state | translate_reg | waitfor | xmltext | | second | statement | translation | when | xmlvalidate | | section | static | treat | whenever | year | | securityaudit | statistics | trigger | where | zone | | select | stddev_pop | trim | while | | semantickeyph | stddev_samp | true | width_bucket | ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V1: 2023-09-01​ First version ","version":"Next","tagName":"h2"},{"title":"Starburst","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#prerequisites","content":" To use this connector, you'll need: A Starburst Galaxy account (To create one: Staburst Galaxy start that includes: A running cluster containing an Amazon S3 catalogA schema which is a logical grouping of tablesStorage on S3 for temporary data with awsAccessKeyId and awsSecretAccessKey which should correspond to used catalogA user with a role assigned that grants access to create, modify, drop tables in specified Amazon S3 catalog At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#setup","content":" To get host go to your Cluster -> Connection info -> Other clients (Connect clients) There is also need to grant access to temporary storage (Roles and privileges -> Select specific role -> Privileges -> Add privilege -> Location). "Create schema and table in location" should be selected. Doc ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Starburst materialization, which will direct one or more of your Flow collections to new Starburst tables. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/host\tHost and optional port string\tRequired /catalog\tCatalog Name\tGalaxy catalog Catalog\tstring\tRequired /schema\tSchema Name\tDefault schema to materialize to\tstring\tRequired /account\tAccount\tGalaxy account name\tstring\tRequired /password\tPassword\tGalaxy account password\tstring\tRequired /awsAccessKeyId\tAWS Access Key ID string\tRequired /awsSecretAccessKey\tAWS Secret Access Key string\tRequired /region\tAWS Region\tRegion of AWS storage\tstring\tRequired /bucket\tBucket name string\tRequired /bucketPath\tBucket path\tA prefix that will be used to store objects in S3.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name\tstring\tRequired /schema\tAlternative Schema\tAlternative schema for this table\tstring\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: host: HOST:PORT account: ACCOUNT password: PASSWORD catalog: CATALOG_NAME schema: SCHEMA_NAME awsAccessKeyId: AWS_ACCESS_KEY_ID awsSecretAccessKey: AWS_SECRET_KEY_ID region: REGION bucket: BUCKET bucketPath: BUCKET_PATH image: ghcr.io/estuary/materialize-starburst:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: table: ${table_name} schema: default source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Sync Schedule​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#sync-schedule","content":" This connector supports configuring a schedule for sync frequency. You can read about how to configure this here. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#reserved-words","content":" Starburst Galaxy has a list of reserved words that must be quoted in order to be used as an identifier. Flow automatically quotes fields that are in the reserved words list. You can find this list in Trino's documentation here and in the table below. caution In Starburst Galaxy, objects created with quoted identifiers must always be referenced exactly as created, including the quotes. Otherwise, SQL statements and queries can result in errors. See the Trino docs. Reserved words CUBE\tINSERT\tTABLE CURRENT_CATALOG\tINTERSECT\tTHEN CURRENT_DATE\tINTO\tTRIM CURRENT_PATH\tIS\tTRUE CURRENT_ROLE\tJOIN\tUESCAPE CURRENT_SCHEMA\tJSON_ARRAY\tUNION CURRENT_TIME\tJSON_EXISTS\tUNNEST CURRENT_TIMESTAMP\tJSON_OBJECT\tUSING CURRENT_USER\tJSON_QUERY\tVALUES DEALLOCATE\tJSON_TABLE\tWHEN DELETE\tJSON_VALUE\tWHERE DESCRIBE\tLEFT\tWITH DISTINCT\tLIKE DROP\tLISTAGG ELSE\tLOCALTIME END\tLOCALTIMESTAMP ESCAPE\tNATURAL EXCEPT\tNORMALIZE EXECUTE\tNOT EXISTS\tNULL\t ","version":"Next","tagName":"h2"},{"title":"TimescaleDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#prerequisites","content":" To use this connector, you'll need: A TimescaleDB database to which to materialize. Know your user credentials, and the host and port. If using Timescale Cloud, this information is available on your console, on the Connection info pane. At least one Flow collection. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a TimescaleDB materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. The connector will create new tables in the database per your specification. Tables created manually in advance are not supported. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring /address\tAddress\tHost and port of the database\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /schema\tDatabase Schema\tDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables\tstring\t"public" /user\tUser\tDatabase user to connect as.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/additional_table_create_sql\tAdditional Table Create SQL\tAdditional SQL statement(s) to be run in the same transaction that creates the table. Useful for creating Hypertables.\tstring /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse /schema\tAlternative Schema\tAlternative schema for this table (optional). Overrides schema set in endpoint configuration.\tstring /table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-timescaledb:dev config: database: flow address: xxxxxxxxxx.xxxxxxxxxx.tsdb.cloud.timescale.com:01234 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Creating TimescaleDB hypertables​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#creating-timescaledb-hypertables","content":" Hypertables are PostgreSQL tables in TimescaleDB optimized for time-series data. They exist alongside regular PostgreSQL tables. You can add Hypertables to your materialization on a per-binding basis by adding the optional /additional_table_create_sql field to each binding configuration. Your SQL statement should take the following format: SELECT create_hypertable('table', 'timestamp_column'); Where 'table' matches the value for the field /table in that binding, and 'timestamp_column' is the name of the table column containing its time values. For example, materializing the Flow collection acmeCo/my_time_series would produce a table called 'my_time_series'. Assuming its timestamp value is in the field 'time', the binding configuration would look like: bindings: - resource: additional_table_create_sql: 'SELECT create_hypertable('my_time_series', 'time');' table: my_time_series source: acmeCo/my_time_series ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#reserved-words","content":" PostgreSQL (and thus TimescaleDB) has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation. These reserve words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words abs\tcurrent_transform_group_for_type\tindicator\torder\tsqlexception absolute\tcurrent_user\tinitial\tout\tsqlstate acos\tcursor\tinitially\touter\tsqlwarning action\tcycle\tinner\toutput\tsqrt add\tdatalink\tinout\tover\tstart all\tdate\tinput\toverlaps\tstatic allocate\tday\tinsensitive\toverlay\tstddev_pop alter\tdeallocate\tinsert\tpad\tstddev_samp analyse\tdec\tint\tparameter\tsubmultiset analyze\tdecfloat\tinteger\tpartial\tsubset and\tdecimal\tintersect\tpartition\tsubstring any\tdeclare\tintersection\tpattern\tsubstring_regex are\tdefault\tinterval\tper\tsucceeds array\tdeferrable\tinto\tpercent\tsum array_agg\tdeferred\tis\tpercentile_cont\tsymmetric array_max_cardinality\tdefine\tisnull\tpercentile_disc\tsystem as\tdelete\tisolation\tpercent_rank\tsystem_time asc\tdense_rank\tjoin\tperiod\tsystem_user asensitive\tderef\tjson_array\tpermute\ttable asin\tdesc\tjson_arrayagg\tplacing\ttablesample assertion\tdescribe\tjson_exists\tportion\ttan asymmetric\tdescriptor\tjson_object\tposition\ttanh at\tdeterministic\tjson_objectagg\tposition_regex\ttemporary atan\tdiagnostics\tjson_query\tpower\tthen atomic\tdisconnect\tjson_table\tprecedes\ttime authorization\tdistinct\tjson_table_primitive\tprecision\ttimestamp avg\tdlnewcopy\tjson_value\tprepare\ttimezone_hour begin\tdlpreviouscopy\tkey\tpreserve\ttimezone_minute begin_frame\tdlurlcomplete\tlag\tprimary\tto begin_partition\tdlurlcompleteonly\tlanguage\tprior\ttrailing between\tdlurlcompletewrite\tlarge\tprivileges\ttransaction bigint\tdlurlpath\tlast\tprocedure\ttranslate binary\tdlurlpathonly\tlast_value\tptf\ttranslate_regex bit\tdlurlpathwrite\tlateral\tpublic\ttranslation bit_length\tdlurlscheme\tlead\trange\ttreat blob\tdlurlserver\tleading\trank\ttrigger boolean\tdlvalue\tleft\tread\ttrim both\tdo\tlevel\treads\ttrim_array by\tdomain\tlike\treal\ttrue call\tdouble\tlike_regex\trecursive\ttruncate called\tdrop\tlimit\tref\tuescape cardinality\tdynamic\tlistagg\treferences\tunion cascade\teach\tln\treferencing\tunique cascaded\telement\tlocal\tregr_avgx\tunknown case\telse\tlocaltime\tregr_avgy\tunmatched cast\tempty\tlocaltimestamp\tregr_count\tunnest catalog\tend\tlog\tregr_intercept\tupdate ceil\tend-exec\tlog10\tregr_r2\tupper ceiling\tend_frame\tlower\tregr_slope\tusage char\tend_partition\tmatch\tregr_sxx\tuser character\tequals\tmatches\tregr_sxy\tusing character_length\tescape\tmatch_number\tregr_syy\tvalue char_length\tevery\tmatch_recognize\trelative\tvalues check\texcept\tmax\trelease\tvalue_of classifier\texception\tmeasures\trestrict\tvarbinary clob\texec\tmember\tresult\tvarchar close\texecute\tmerge\treturn\tvariadic coalesce\texists\tmethod\treturning\tvarying collate\texp\tmin\treturns\tvar_pop collation\texternal\tminute\trevoke\tvar_samp collect\textract\tmod\tright\tverbose column\tfalse\tmodifies\trollback\tversioning commit\tfetch\tmodule\trollup\tview concurrently\tfilter\tmonth\trow\twhen condition\tfirst\tmultiset\trows\twhenever connect\tfirst_value\tnames\trow_number\twhere connection\tfloat\tnational\trunning\twidth_bucket constraint\tfloor\tnatural\tsavepoint\twindow constraints\tfor\tnchar\tschema\twith contains\tforeign\tnclob\tscope\twithin continue\tfound\tnew\tscroll\twithout convert\tframe_row\tnext\tsearch\twork copy\tfree\tno\tsecond\twrite corr\tfreeze\tnone\tsection\txml corresponding\tfrom\tnormalize\tseek\txmlagg cos\tfull\tnot\tselect\txmlattributes cosh\tfunction\tnotnull\tsensitive\txmlbinary count\tfusion\tnth_value\tsession\txmlcast covar_pop\tget\tntile\tsession_user\txmlcomment covar_samp\tglobal\tnull\tset\txmlconcat create\tgo\tnullif\tshow\txmldocument cross\tgoto\tnumeric\tsimilar\txmlelement cube\tgrant\toccurrences_regex\tsin\txmlexists cume_dist\tgroup\toctet_length\tsinh\txmlforest current\tgrouping\tof\tsize\txmliterate current_catalog\tgroups\toffset\tskip\txmlnamespaces current_date\thaving\told\tsmallint\txmlparse current_default_transform_group\thold\tomit\tsome\txmlpi current_path\thour\ton\tspace\txmlquery current_role\tidentity\tone\tspecific\txmlserialize current_row\tilike\tonly\tspecifictype\txmltable current_schema\timmediate\topen\tsql\txmltext current_time\timport\toption\tsqlcode\txmlvalidate current_timestamp\tin\tor\tsqlerror\tyear ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V4: 2022-11-30​ This version includes breaking changes to materialized table columns. These provide more consistent column names and types, but tables created from previous versions of the connector may not be compatible with this version. Capitalization is now preserved when fields in Flow are converted to Postgres (TimescaleDB) column names. Previously, fields containing uppercase letters were converted to lowercase. Field names and values of types date, duration, ipv4, ipv6, macaddr, macaddr8, and time are now converted into their corresponding Postgres (TimescaleDB) types. Previously, only date-time was converted, and all others were materialized as strings. ","version":"Next","tagName":"h2"},{"title":"Materialization Protocol","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/","content":"","keywords":"","version":"Next"},{"title":"Sequence Diagram​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#sequence-diagram","content":" As a convention and to reduce ambiguity, message types from the Runtime are named in an imperative fashion (Load), while responses from the driver always have a past-tense name (Loaded): sequenceDiagram Runtime->>Driver: Open{MaterializationSpec, driverCP} Note right of Driver: Connect to endpoint.<br/>Optionally fetch last-committed<br/>runtime checkpoint. Driver->>Runtime: Opened{runtimeCP} Note over Runtime, Driver: One-time initialization ☝️.<br/> 👇 Repeats for each transaction. Note left of Runtime: Prior txn commits<br/>to recovery log. Note right of Driver: Prior txn commits to DB<br/>(where applicable). Runtime->>Driver: Acknowledge Note right of Runtime: Acknowledged MAY be sent<br/>before Acknowledge. Note right of Driver: MAY perform an idempotent<br/>apply of last txn. Note left of Runtime: Runtime does NOT await<br/>Acknowledged before<br/>proceeding to send Load. Driver->>Runtime: Acknowledged Note left of Runtime: Runtime may now finalize<br/>a pipelined transaction. Note over Runtime, Driver: End of Acknowledge phase. Runtime->>Driver: Load<A> Note left of Runtime: Load keys may<br/> not exist (yet). Runtime->>Driver: Load<B> Note right of Driver: MAY evaluate Load immediately,<br/>or stage for deferred retrieval. Driver->>Runtime: Loaded<A> Runtime->>Driver: Load<C> Runtime->>Driver: Flush Driver->>Runtime: Loaded<C> Note right of Driver: Omits Loaded for keys<br/>that don't exist. Driver->>Runtime: Flushed Note left of Runtime: All existing keys<br/>have been retrieved. Note over Runtime, Driver: End of Load phase. Runtime->>Driver: Store<X> Runtime->>Driver: Store<Y> Runtime->>Driver: Store<Z> Runtime->>Driver: StartCommit{runtimeCP} Note right of Driver: * Completes all Store processing.<br/>* MAY include runtimeCP in DB txn. Note right of Driver: Commit to DB<br/>now underway. Driver->>Runtime: StartedCommit{driverCP} Note left of Runtime: Begins commit to<br/> recovery log. Note over Runtime, Driver: End of Store phase. Loops around<br/>to Acknowledge <=> Acknowledged. ","version":"Next","tagName":"h2"},{"title":"Exactly-Once Semantics​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#exactly-once-semantics","content":" The central tenant of transactional materializations is this: there is a consumption checkpoint, and there is a state of the view. As the materialization progresses, both the checkpoint and the view state will change. Updates to the checkpoint and to the view state MUST always commit together, in the exact same transaction. Flow materialization tasks have a backing transactional recovery log, which is capable of durable commits that update both the checkpoint and also a (reasonably small) driver-defined state. More on driver states later. Many interesting endpoint systems are also fully transactional in nature. When implementing a materialization driver, the first question an implementor must answer is: whose commit is authoritative? Flow's recovery log, or the materialized system? This protocol supports either. ","version":"Next","tagName":"h2"},{"title":"Common Implementation Patterns​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#common-implementation-patterns","content":" There are a few common implementation patterns for materializations. The choice of pattern depends on the transaction capabilities of the remote endpoint. ","version":"Next","tagName":"h2"},{"title":"Remote Store is Authoritative​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#remote-store-is-authoritative","content":" In this pattern, the remote store (for example, a database) persists view states and the Flow consumption checkpoints which those views reflect. There are many such checkpoints: one per task split, and in this pattern the Flow recovery log is effectively ignored. Typically this workflow runs in the context of a synchronous BEGIN/COMMITtransaction, which updates table states and a Flow checkpoint together. The transaction need be scoped only to the store phase of this workflow, as the materialization protocol requires only read-committed isolation semantics. Flow is a distributed system, and an important consideration is the effect of a "zombie" assignment of a materialization task, which can race a newly-promoted assignment of that same task. Fencing is a technique which uses the transactional capabilities of a store to "fence off" an older zombie assignment, such that it's prevented from committing further transactions. This avoids a failure mode where: New assignment N recovers a checkpoint at Ti.Zombie assignment Z commits another transaction at Ti+1.N beings processing from Ti, inadvertently duplicating the effects of Ti+1. When a remote store is authoritative, it must implement fencing behavior. As a sketch, the store can maintain a nonce value alongside the checkpoint of each task split. The nonce is updated on each open of this RPC, and each commit transaction then verifies that the nonce has not been changed. In the future, if another RPC opens and updates the nonce, it fences off this instance of the task split and prevents it from committing further transactions. ","version":"Next","tagName":"h3"},{"title":"Recovery Log with Non-Transactional Store​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#recovery-log-with-non-transactional-store","content":" In this pattern, the runtime's recovery log persists the Flow checkpoint and handles fencing semantics. During the Load and Store phases, the driver directly manipulates a non-transactional store or API, such as a key/value store. Note that this pattern is at-least-once. A transaction may fail part-way through and be restarted, causing its effects to be partially or fully replayed. Care must be taken if the collection's schema has reduction annotations such assum, as those reductions may be applied more than once due to a partially completed, but ultimately failed transaction. If the collection's schema is last-write-wins, this mode still provides effectively-once behavior. Collections which aren't last-write-wins can be turned into last-write-wins through the use of derivations. ","version":"Next","tagName":"h3"},{"title":"Recovery Log with Idempotent Apply​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#recovery-log-with-idempotent-apply","content":" In this pattern the recovery log is authoritative, but the driver uses external stable storage to stage the effects of a transaction -- rather than directly applying them to the store -- such that those effects can be idempotently applied after the transaction commits. This allows stores which feature a weaker transaction guarantee to still be used in an exactly-once way, so long as they support an idempotent apply operation. Driver checkpoints can facilitate this pattern. For example, a driver might generate a unique filename in S3 and reference it in its prepared checkpoint, which is committed to the recovery log. During the "store" phase, it writes to this S3 file. After the transaction commits, it tells the store of the new file to incorporate. The store must handle idempotency, by applying the effects of the unique file just once, even if told of the file multiple times. A related extension of this pattern is for the driver to embed a Flow checkpoint into its driver checkpoint. Doing so allows the driver to express an intention to restart from an older alternative checkpoint, as compared to the most recent committed checkpoint of the recovery log. As mentioned above, it's crucial that store states and checkpoints commit together. While seemingly bending that rule, this pattern is consistent with it because, on commit, the semantic contents of the store include BOTH its base state, as well as the staged idempotent update. The store just may not know it yet, but eventually it must because of the retried idempotent apply. Note the driver must therefore ensure that staged updates are fully applied before returning Loaded responses, in order to provide the correct read-committed semantics required by the Flow runtime. ","version":"Next","tagName":"h3"},{"title":"Push-only Endpoints & Delta Updates​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#push-only-endpoints--delta-updates","content":" Some systems, such as APIs, Webhooks, and Pub/Sub, are push-only in nature. Flow materializations can run in a "delta updates" mode, where loads are always skipped and Flow does not attempt to store fully-reduced documents. Instead, during the store phase, the runtime sends delta updates which reflect the combined roll-up of collection documents processed only within this transaction. To illustrate the meaning of a delta update, consider documents which are simple counters, having a collection schema that uses a sum reduction strategy. Without delta updates, Flow would reduce documents -1, 3, and 2 by sum to arrive at document 4, which is stored. The next transaction, document 4 is loaded and reduced with 6, -7, and -1 to arrive at a new stored document 2. This document, 2, represents the full reduction of the collection documents materialized thus far. Compare to delta updates mode: collection documents -1, 3, and 2 are combined to store a delta-update document of 4. The next transaction starts anew, and 6, -7, and -1 combine to arrive at a delta-update document of -2. These delta updates are a windowed combine over documents seen in the current transaction only, and unlike before are not a full reduction of the document. If delta updates were written to pub/sub, note that a subscriber could further reduce over each delta update to recover the fully reduced document of 2. Note that many use cases require only lastWriteWins reduction behavior, and for these use cases delta updates does the "right thing" by trivially re-writing each document with its most recent version. This matches the behavior of Kafka Connect, for example. ","version":"Next","tagName":"h3"},{"title":"Protocol Phases​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#protocol-phases","content":" ","version":"Next","tagName":"h2"},{"title":"Acknowledge​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#acknowledge","content":" Acknowledge and Acknowledged are always the first messages sent every transaction, including the very first transaction of an RPC. The Runtime sendsAcknowledge to indicate that the last transaction has committed to the recovery log. The Driver sends Acknowledged to indicate that its endpoint transaction has committed. Acknowledge and Acknowledged are not ordered. Acknowledged may be sent before Acknowledge and vice versa. The Runtime does not wait for Acknowledged before sending Load messages. In most cases the Driver should simply not read these Load messages until it has completed its own commit and sent its own Acknowledged. A Driver MAY instead process its commit and acknowledgment in the background while actively reading Load messages. It MUST NOT evaluate Loads yet, as this could otherwise be a violation of read-committed semantics, but it MAY stage them for deferred evaluation. This is recommended for Drivers that have very long commit and/or acknowledgement operations. While a background commit progresses the Flow runtime will optimistically pipeline the next transaction, processing documents and preparing for when the Driver sendsAcknowledged. Drivers following the "Recovery Log with Idempotent Apply" pattern must take care to properly handle the very first acknowledgement phase of an RPC. At startup, a driver cannot know if the last commit has been acknowledged. For example, a previous RPC invocation may have failed immediately after commit but prior to acknowledgement. The Driver must thus idempotent-ly apply or re-apply changes staged by a prior Driver invocation, and reply with Acknowledged only once done. Drivers with transactional semantics SHOULD send Acknowledged immediately after a previous, started commit completes. Drivers with at-least-once semantics SHOULD send Acknowledged immediately after sending StartedCommit. ","version":"Next","tagName":"h3"},{"title":"Load​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#load","content":" Zero or more Load messages are sent by the Runtime with documents to fetch. A given document key will appear at most once in a transaction, and will not be repeated across Load messages. Drivers may immediately evaluate each Load and respond, or may queue many keys to load and defer their evaluation. The Runtime does not await any individualLoad requests. After the previous transaction has fully completed, and the driver has sentAcknowledged to the Runtime, the current transaction may begin to close. The Runtime indicates this by sending a Flush message, which is NEVER sent before Acknowledged is received. Acknowledged is thus an important signal as to when the Runtime may begin to finalize an optimistic, pipelined transaction. On reading Flush, Drivers must process all remaining Load messages, including any deferred evaluations, and send all Loaded responses prior to sending its own Flushed response. This signals to the Runtime that all documents which can be loaded have been loaded, and the transaction proceeds to the Store phase. Materialization bindings which are processing in delta-updates mode will never receive a Load message, but will receive a Flush and must still respond withFlushed. ","version":"Next","tagName":"h3"},{"title":"Store​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#store","content":" Zero or more Store messages are sent by the Runtime to the Driver, indicating keys, documents, and extracted fields to store. No response is required of the Driver for these messages. Once all documents have been stored, the Runtime sends a StartCommit message which carries its opaque runtime checkpoint. Drivers implementing the "Remote Store is Authoritative" pattern must include the runtime checkpoint in its current transaction, for retrieval in a future Open of a new transactions RPC. Other driver patterns MAY ignore this checkpoint. On reading StartCommit the driver ensures that all Store messages have been processed. It begins to commit its own transaction (where applicable), and then responds with StartedCommit which contain an update to the driver's checkpoint. On the Runtime's receipt of StartedCommit, the Runtime now knows that allStore messages have been fully processed. It preserves the updated Driver checkpoint in its recovery log and begins to commit. From here, the protocol loops back around to the Acknowledge phase. ","version":"Next","tagName":"h3"},{"title":"Editing considerations","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/editing/","content":"","keywords":"","version":"Next"},{"title":"How to edit Flow entities​","type":1,"pageTitle":"Editing considerations","url":"/pr-preview/pr-1594/reference/editing/#how-to-edit-flow-entities","content":" In the Flow web app, you can edit captures and materializations, and use the Schema Inference tool to edit collection schemas. Editing captures and associated collectionsEditing materializations and associated collections With flowctl, you can edit captures, materializations, collections, derivations, and tests. You do this by pulling the desired specification locally, editing, and re-publishing. Editing with flowctl ","version":"Next","tagName":"h2"},{"title":"Endpoint configuration changes​","type":1,"pageTitle":"Editing considerations","url":"/pr-preview/pr-1594/reference/editing/#endpoint-configuration-changes","content":" A common reason to edit a capture or materialization to fix a broken endpoint configuration: for example, if a database is now accessed through a different port. Changes that prevent Flow from finding the source system immediately cause the capture or materialization to fail. By contrast, certain credential changes might not cause issues unless you attempt to edit the capture or materialization. Because Flow tasks run continuously, the connector doesn't have to re-authenticate and an outdated credential won't cause failure. Editing, however, requires the task to re-start, so you'll need to provide current credentials to the endpoint configuration. Before editing, take note of any changed credentials, even if the task is still running successfully. ","version":"Next","tagName":"h2"},{"title":"Managing connector updates​","type":1,"pageTitle":"Editing considerations","url":"/pr-preview/pr-1594/reference/editing/#managing-connector-updates","content":" Connectors are updated periodically. In some cases, required fields are added or removed. When you edit a capture or materialization, you'll need to update the configuration to comply with the current connector version. You may need to change a property's formatting or add a new field. Additionally, certain updates to capture connectors can affect the way available collections are named. After editing, the connector may map a data resource to new collection with a different name. For example, say you have capture that writes to a collection called post/fruity_pebbles/nutritionFacts. You begin to edit the capture using the latest version of the connector. The connector detects the same set of nutrition facts data, but maps it to a collection called post/fruity_pebbles/nutrition-facts. If you continue to publish the edited capture, both collections will persist, but new data will be written to the new collection. Before editing, check if a connector has been updated: Go to the Admin tab and view the list of connectors. Each tile shows the date it was last updated.Check the connector's documentation. Pertinent updates, if any, are noted in the Changelog section. ","version":"Next","tagName":"h2"},{"title":"Considerations for name changes​","type":1,"pageTitle":"Editing considerations","url":"/pr-preview/pr-1594/reference/editing/#considerations-for-name-changes","content":" You're not able to change the name of a capture or materialization after you create it. You're also unable to manually change the names of collections; however, connector updates can cause collection names to change, as discussed above. It is possible to manually change the names of destination resources (tables or analogous data storage units to which collections are written) when editing a materialization. You should avoid doing so unless you want to route future data to a new location. If you do this, a new resource with that name will be created and the old resource will continue to exist. Historical data will may not be backfilled into the new resource, depending on the connector used. ","version":"Next","tagName":"h2"},{"title":"Materialization sync schedule","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/materialization-sync-schedule/","content":"","keywords":"","version":"Next"},{"title":"How transactions are used to sync data to a destination​","type":1,"pageTitle":"Materialization sync schedule","url":"/pr-preview/pr-1594/reference/materialization-sync-schedule/#how-transactions-are-used-to-sync-data-to-a-destination","content":" Estuary Flow processes data intransactions. Materialization connectors use the materialization protocol to process transactions and sync data to the destination. When a materialization is caught up to its source collections, it runs frequent small transactions to keep the destination up to date. In this case every new transaction contains the latest data that needs updated. But when a materialization is backfilling its source collections, it runs larger transactions to efficiently load the data in bulk to the destination and catch up to the latest changes. The sync schedule is configured in terms of these transactions: For less frequent updates, processing of additional transactions is delayed by some amount of time. This extra delay is only applied when the materialization is fully caught up - backfills always run as fast as possible. And while a transaction is delayed, Estuary Flow will continue batching and combining new documents so that the next transaction contains all of the latest data. You can read about how continuous materialization works for more background information. ","version":"Next","tagName":"h2"},{"title":"Configuring a sync schedule​","type":1,"pageTitle":"Materialization sync schedule","url":"/pr-preview/pr-1594/reference/materialization-sync-schedule/#configuring-a-sync-schedule","content":" A materialization can be configured to run on a fixed schedule 24/7 or it can have a faster sync schedule during certain times of the day and on certain days of the week. The following options are available for configuring the sync schedule: Property\tTitle\tDescription\tType/syncFrequency\tSync Frequency\tFrequency at which transactions are executed when the materialization is fully caught up and streaming changes. May be enabled only for certain time periods and days of the week if configured below; otherwise it is effective 24/7. Defaults to 30 minutes if unset.\tstring /timezone\tTimezone\tTimezone applicable to sync time windows and active days. Must be a valid IANA time zone name or +HH:MM offset.\tstring /fastSyncStartTime\tFast Sync Start Time\tTime of day that transactions begin executing at the configured Sync Frequency. Prior to this time transactions will be executed more slowly. Must be in the form of '09:00'.\tstring /fastSyncStopTime\tFast Sync Stop Time\tTime of day that transactions stop executing at the configured Sync Frequency. After this time transactions will be executed more slowly. Must be in the form of '17:00'.\tstring /fastSyncEnabledDays\tFast Sync Enabled Days\tDays of the week that the configured Sync Frequency is active. On days that are not enabled, transactions will be executed more slowly for the entire day. Examples: 'M-F' (Monday through Friday, inclusive), 'M,W,F' (Monday, Wednesday, and Friday), 'Su-T,Th-S' (Sunday through Tuesday, inclusive; Thursday through Saturday, inclusive). All days are enabled if unset.\tstring warning Changes to a materialization's specification are only applied after the materialization task has completed and acknowledged all of its outstanding transactions. This means that if a task is running with a 4 hour sync frequency, it may take up to 8 hours for a change to the specification to take effect: 4 hours for the "current" transaction to complete and be acknowledged, and another 4 hours for the next "pipelined" commit to complete and be acknowledged. If you are making changes to a materialization with a Sync Scheduleconfigured and would like those changes to take effect immediately, you can disable and then re-enable the materialization. Example: Sync data on a fixed schedule​ To use the same schedule for syncing data 24/7, set the value of Sync Frequency only and leave the other inputs empty. For example, you might set aSync Frequency of 15m to always have you destination sync every 15 minutes instead of the default 30 minutes. tip If you want the materialization to always push updated data as fast as possible, use a Sync Frequency of 0s. Example: Sync data faster during certain times of the day​ If you only care about having the most-up-to-date data possible during certain times of the day, you can set a start and stop time for that time period. The value you set for Sync Frequency will be used during that time period; otherwise syncs will be performed every 4 hours. The Fast Sync Start Time and Fast Sync Stop Time values must be set as 24-hour times, and you must provide a value for Timezone that this time window should use. Timezones must either be a valid IANA time zone name or a +HH:MMoffset. Providing a time zone name will ensure local factors like daylight savings time are considered for the schedule, whereas an offset timezone is always relative to UTC. An example configuration data syncs data as fast as possible between the hours of 9:00AM and 5:00PM in the Eastern Time Zone (ET) would use these values: Sync Frequency: 0sTimezone: America/New_YorkFast Sync Start Time: 09:00Fast Sync Stop Time: 17:00 Example: Sync data faster only on certain days of the week​ You can also set certain days of the week that the fast sync is active. On all other days, data will be sync'd more slowly all day. To enable this, set values for Sync Frequency, Timezone, Fast Sync Start Time, and Fast Sync Stop Time as you would for syncing data faster during certain times of the day, and also provide a value for Fast Sync Enabled Days. Fast Sync Enabled Days is a range of days, where the days of the week are abbreviated as (Su)nday, (M)onday, (T)uesday, (W)ednesday, (Th)ursday,(F)riday, (S)aturday. Here are some examples of valid inputs for Fast Sync Enabled Days: M-F to enable fast sync on Monday through Friday.Su, T, Th, S to enable fast sync on Sunday, Tuesday, Thursday, and Saturday.Su-M,Th-S to enable fast sync on Thursday through Monday. Note that the days of the week must be listed in order, so Th-M will not work. ","version":"Next","tagName":"h2"},{"title":"Timing of syncs​","type":1,"pageTitle":"Materialization sync schedule","url":"/pr-preview/pr-1594/reference/materialization-sync-schedule/#timing-of-syncs","content":" In technical terms, timing of syncs is controlled by the materialization connector sending a transaction acknowledgement to the Flow runtime a computed times. Practically this means that at these times the prior transaction will complete and have its statistics recorded, and the next transaction will begin. This timing is computed so that it occurs at predictable instants in time. As a hypothetical example, if you have set a Sync Frequency of 15m, transaction acknowledgements might be sent at times like 00:00, 00:15, 00:30, 00:45and so on, where each acknowledgement is sent at a multiple of the Sync Frequency relative to the hour. This means that if the materialization task shard restarts and completes its first transaction at 00:13, it will run its next transaction at 00:15 rather than00:28. In actuality these computed points in time have some amount ofjitter applied to them to avoid overwhelming the system at common intervals, so setting a Sync Frequency to a specific value will ensure that transactions are predictably acknowledged that often, but makes no assumptions about precisely what time instants the acknowledgements will occur. info The jitter value is deterministic based on the compute resource for the destination system from the materialization's endpoint configuration. How this compute resource is identified various for different systems, but is usually something like "account_name" + "warehouse_Name". This means that separate materialization use the same compute resource will synchronize their usage of that compute resource if they have the same Sync Schedule configured. ","version":"Next","tagName":"h2"},{"title":"Notifications","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/notifications/","content":"","keywords":"","version":"Next"},{"title":"Data Movement Alerts​","type":1,"pageTitle":"Notifications","url":"/pr-preview/pr-1594/reference/notifications/#data-movement-alerts","content":" When navigating to the main view of a capture or a materialization, a user can select an interval for tracking zero data movement. Under the Nofitification Settiings card, select a time interval from the dropdown labeled Interval. There is no need to save, but you must also have already configured notifications in order for the alert to take into effect. If you are not yet subscribed to notifications, a pop up will appear prompting you to set up a subscribing by clicking on CLICK HERE. If your task does not receive any new documents with the selected timeframe, an email will be sent to any email addresses that are subscribed to this tenant. ","version":"Next","tagName":"h2"},{"title":"Billing Alerts​","type":1,"pageTitle":"Notifications","url":"/pr-preview/pr-1594/reference/notifications/#billing-alerts","content":" Billing alerts are automatically subscribed to when a user inputs their email into the Organization Notifications table. Alerts will be sent out for the following events: Free Tier Started: A tenenat has transitioned into the free trialFree Trial Ending: Five days are remaining in a tenant's free trialFree Trial Ended: A tenant's free trial has endedProvided Payment Method: A valid payment method has been provided for a tenant ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Notifications","url":"/pr-preview/pr-1594/reference/notifications/#properties","content":" Property\tTitle\tDescription\tType/catalogPrefix\tPrefix\tSubscribe to notifications for this tenant\tstring /email\tEmail\tAlert the following email with all notifications\tstring ","version":"Next","tagName":"h2"},{"title":"Reduction strategies","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/","content":"","keywords":"","version":"Next"},{"title":"Reduction guarantees​","type":1,"pageTitle":"Reduction strategies","url":"/pr-preview/pr-1594/reference/reduction-strategies/#reduction-guarantees","content":" In Flow, documents that share the same collection key and are written to the same logical partition have a total order, meaning that one document is universally understood to have been written before the other. This isn't true of documents of the same key written to different logical partitions. These documents can be considered “mostly” ordered: Flow uses timestamps to understand the relative ordering of these documents, and while this largely produces the desired outcome, small amounts of re-ordering are possible and even likely. Flow guarantees exactly-once semantics within derived collections and materializations (so long as the target system supports transactions), and a document reduction will be applied exactly one time. Flow does not guarantee that documents are reduced in sequential order, directly into a base document. For example, documents of a single Flow capture transaction are combined together into one document per collection key at capture time – and that document may be again combined with still others, and so on until a final reduction into the base document occurs. Taken together, these total-order and exactly-once guarantees mean that reduction strategies must be associative [as in (2 + 3) + 4 = 2 + (3 + 4) ], but need not be commutative [ 2 + 3 = 3 + 2 ] or idempotent [ S u S = S ]. They expand the palette of strategies that can be implemented, and allow for more efficient implementations as compared to, for example CRDTs. In this documentation, we’ll refer to the “left-hand side” (LHS) as the preceding document and the “right-hand side” (RHS) as the following one. Keep in mind that both the LHS and RHS may themselves represent a combination of still more ordered documents because, for example, reductions are applied associatively. ","version":"Next","tagName":"h3"},{"title":"Organizing a Flow catalog","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/organizing-catalogs/","content":"","keywords":"","version":"Next"},{"title":"import​","type":1,"pageTitle":"Organizing a Flow catalog","url":"/pr-preview/pr-1594/reference/organizing-catalogs/#import","content":" Flow's import directive can help you easily handle all of these scenarios while keeping your catalogs well organized. Each catalog spec file may import any number of other files, and each import may refer to either relative or an absolute URL. When you use import in a catalog spec, you're conceptually bringing the entirety of another catalog — as well as the schemas and typescript files it uses — into your catalog. Imports are also transitive, so when you import another catalog, you're also importing everything that other catalog has imported. This allows you to keep your catalogs organized, and is flexible enough to support collaboration between separate teams and organizations. Perhaps the best way of explaining this is with some examples. Example: Organizing collections​ Let's look at a relatively simple case in which you want to organize your collections into multiple catalog files. Say you work for Acme Corp on the team that's introducing Flow. You might start with the collections and directory structure below: acme/customers/customerInfo acme/products/info/manufacturers acme/products/info/skus acme/products/inventory acme/sales/pending acme/sales/complete acme ├── flow.yaml ├── customers │ ├── flow.ts │ ├── flow.yaml │ └── schemas.yaml ├── products │ ├── flow.yaml │ ├── info │ │ ├── flow.ts │ │ ├── flow.yaml │ │ └── schemas.yaml │ └── inventory │ ├── flow.ts │ ├── flow.yaml │ └── schemas.yaml schemas.yaml └── sales ├── flow.ts ├── flow.yaml └── schemas.yaml It's immediately clear where each of the given collections is defined, since the directory names match the path segments in the collection names. This is not required by theflowctl CLI, but is strongly recommended, since it makes your catalogs more readable and maintainable. Each directory contains a catalog spec (flow.yaml), which will import all of the catalogs from child directories. So, the top-level catalog spec, acme/flow.yaml, might look something like this: import: - customers/flow.yaml - products/flow.yaml - sales/flow.yaml This type of layout has a number of other advantages. During development, you can easily work with a subset of collections using, for example, flowctl test --source acme/products/flow.yaml to run only the tests for product-related collections. It also allows other imports to be more granular. For example, you might want a derivation under sales to read from acme/products/info. Since info has a separate catalog spec, acme/sales/flow.yaml can import acme/products/info/flow.yaml without creating a dependency on the inventory collection. Example: Separate environments​ It's common to use separate environments for tiers like development, staging, and production. Flow catalog specs often necessarily include endpoint configuration for external systems that will hold materialized views. Let's say you want your production environment to materialize views to Snowflake, but you want to develop locally on SQLite. We might modify the Acme example slightly to account for this. acme ├── dev.flow.yaml ├── prod.flow.yaml ... the remainder is the same as above Each of the top-level catalog specs might import all of the collections and define an endpoint called ourMaterializationEndpoint that points to the desired system. The import block might be the same for each system, but each file may use a different configuration for the endpoint, which is used by any materializations that reference it. Our configuration for our development environment will look like: dev.flow.yaml import: - customers/flow.yaml - products/flow.yaml - sales/flow.yaml ourMaterializationEndpoint: # dev.flow.yaml sqlite: path: dev-materializations.db While production will look like: prod.flow.yaml import: - customers/flow.yaml - products/flow.yaml - sales/flow.yaml endpoints: snowflake: account: acme_production role: admin schema: snowflake.com/acmeProd user: importantAdmin password: abc123 warehouse: acme_production When we test the draft locally, we'll work with dev.flow.yaml, but we'll publish prod.flow.yaml. Everything will continue to work because in our development environment we'll be binding collections to our local SQLite DB and in production we'll use Snowflake. Example: Cross-team collaboration​ When working across teams, it's common for one team to provide a data product for another to reference and use. Flow is designed for cross-team collaboration, allowing teams and users to reference each other's full catalog or schema. Again using the Acme example, let's imagine we have two teams. Team Web is responsible for Acme's website, and Team User is responsible for providing a view of Acme customers that's always up to date. Since Acme wants a responsive site that provides a good customer experience, Team Web needs to pull the most up-to-date information from Team User at any point. Let's look at Team User's collections: teamUser.flow.yaml import: - userProfile.flow.yaml Which references: userProfile.flow.yaml collection: userProfile: schema: -"/userProfile/schema" key: [/id] Team User references files in their directory, which they actively manage in both their import and schema sections. If Team Web wants to access user data (and they have access), they can use a relative path or a URL-based path given that Team User publishes their data to a URL for access: teamWeb.flow.yaml import: -http://www.acme.com/teamUser#userProfile.flow.yaml -webStuff.flow.yaml Now Team Web has direct access to collections (referenced by their name) to build derived collections on top of. They can also directly import schemas: webStuff.flow.yaml collection: webStuff: schema: -http://acme.com/teamUser#userProfile/#schema key: [/id] ","version":"Next","tagName":"h3"},{"title":"Global namespace​","type":1,"pageTitle":"Organizing a Flow catalog","url":"/pr-preview/pr-1594/reference/organizing-catalogs/#global-namespace","content":" Every Flow collection has a name, and that name must be unique within a running Flow system. Flow collections should be thought of as existing within a global namespace. Keeping names globally unique makes it easy to import catalogs from other teams, or even other organizations, without having naming conflicts or ambiguities. For example, imagine your catalog for the inside sales team has a collection just named customers. If you later try to import a catalog from the outside sales team that also contains a customers collection, 💥 there's a collision. A better collection name would be acme/inside-sales/customers. This allows a catalog to include customer data from separate teams, and also separate organizations. Learn more about the Flow namespace. ","version":"Next","tagName":"h3"},{"title":"firstWriteWins and lastWriteWins","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins/","content":"firstWriteWins and lastWriteWins firstWriteWins always takes the first value seen at the annotated location. Likewise, lastWriteWins always takes the last. Schemas that don’t have an explicit reduce annotation default to lastWriteWins behavior. collections: - name: example/reductions/fww-lww schema: type: object reduce: { strategy: merge } properties: key: { type: string } fww: { reduce: { strategy: firstWriteWins } } lww: { reduce: { strategy: lastWriteWins } } required: [key] key: [/key] tests: "Expect we can track first- and list-written values": - ingest: collection: example/reductions/fww-lww documents: - { key: "key", fww: "one", lww: "one" } - { key: "key", fww: "two", lww: "two" } - verify: collection: example/reductions/fww-lww documents: - { key: "key", fww: "one", lww: "two" } ","keywords":"","version":"Next"},{"title":"append","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/append/","content":"append append works with arrays, and extends the left-hand array with items from the right-hand side. collections: - name: example/reductions/append schema: type: object reduce: { strategy: merge } properties: key: { type: string } value: # Append only works with type "array". # Others will throw an error at build time. type: array reduce: { strategy: append } required: [key] key: [/key] tests: "Expect we can append arrays": - ingest: collection: example/reductions/append documents: - { key: "key", value: [1, 2] } - { key: "key", value: [3, null, "abc"] } - verify: collection: example/reductions/append documents: - { key: "key", value: [1, 2, 3, null, "abc"] } The right-hand side must always be an array. The left-hand side may be null, in which case the reduction is treated as a no-op and its result remains null. This can be combined with schema conditionals to toggle whether reduction-reduction should be done or not.","keywords":"","version":"Next"},{"title":"Composing with conditionals","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals/","content":"Composing with conditionals Reduction strategies are JSON Schema annotations. As such, their applicability at a given document location can be controlled through the use of conditional keywords within the schema, like oneOf or if/then/else. This means Flow’s built-in strategies can be combined with schema conditionals to construct a wider variety of custom reduction behaviors. For example, here’s a reset-able counter: collections: - name: example/reductions/sum-reset schema: type: object properties: key: { type: string } value: { type: number } required: [key] # Use oneOf to express a tagged union over "action". oneOf: # When action = reset, reduce by taking this document. - properties: { action: { const: reset } } reduce: { strategy: lastWriteWins } # When action = sum, reduce by summing "value". Keep the LHS "action", # preserving a LHS "reset", so that resets are properly associative. - properties: action: const: sum reduce: { strategy: firstWriteWins } value: { reduce: { strategy: sum } } reduce: { strategy: merge } key: [/key] tests: "Expect we can sum or reset numbers": - ingest: collection: example/reductions/sum-reset documents: - { key: "key", action: sum, value: 5 } - { key: "key", action: sum, value: -1.2 } - verify: collection: example/reductions/sum-reset documents: - { key: "key", value: 3.8 } - ingest: collection: example/reductions/sum-reset documents: - { key: "key", action: reset, value: 0 } - { key: "key", action: sum, value: 1.3 } - verify: collection: example/reductions/sum-reset documents: - { key: "key", value: 1.3 } ","keywords":"","version":"Next"},{"title":"sum","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/sum/","content":"sum sum reduces two numbers or integers by adding their values. collections: - name: example/reductions/sum schema: type: object reduce: { strategy: merge } properties: key: { type: string } value: # Sum only works with types "number" or "integer". # Others will throw an error at build time. type: number reduce: { strategy: sum } required: [key] key: [/key] tests: "Expect we can sum two numbers": - ingest: collection: example/reductions/sum documents: - { key: "key", value: 5 } - { key: "key", value: -1.2 } - verify: collection: example/reductions/sum documents: - { key: "key", value: 3.8 } ","keywords":"","version":"Next"},{"title":"merge","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/merge/","content":"merge merge reduces the left-hand side and right-hand side by recursively reducing shared document locations. The LHS and RHS must either both be objects, or both be arrays. If both sides are objects, merge performs a deep merge of each property. If LHS and RHS are both arrays, items at each index of both sides are merged together, extending the shorter of the two sides by taking items off the longer: collections: - name: example/reductions/merge schema: type: object reduce: { strategy: merge } properties: key: { type: string } value: # Merge only works with types "array" or "object". # Others will throw an error at build time. type: [array, object] reduce: { strategy: merge } # Deeply merge sub-locations (items or properties) by summing them. items: type: number reduce: { strategy: sum } additionalProperties: type: number reduce: { strategy: sum } required: [key] key: [/key] tests: "Expect we can merge arrays by index": - ingest: collection: example/reductions/merge documents: - { key: "key", value: [1, 1] } - { key: "key", value: [2, 2, 2] } - verify: collection: example/reductions/merge documents: - { key: "key", value: [3, 3, 2] } "Expect we can merge objects by property": - ingest: collection: example/reductions/merge documents: - { key: "key", value: { "a": 1, "b": 1 } } - { key: "key", value: { "a": 1, "c": 1 } } - verify: collection: example/reductions/merge documents: - { key: "key", value: { "a": 2, "b": 1, "c": 1 } } Merge may also take a key, which is one or more JSON pointers that are relative to the reduced location. If both sides are arrays and a merge key is present, then a deep sorted merge of the respective items is done, as ordered by the key. Arrays must be pre-sorted and de-duplicated by the key, and merge itself always maintains this invariant. Note that you can use a key of [“”] for natural item ordering, such as merging sorted arrays of scalars. collections: - name: example/reductions/merge-key schema: type: object reduce: { strategy: merge } properties: key: { type: string } value: type: array reduce: strategy: merge key: [/k] items: { reduce: { strategy: firstWriteWins } } required: [key] key: [/key] tests: "Expect we can merge sorted arrays": - ingest: collection: example/reductions/merge-key documents: - { key: "key", value: [{ k: "a", v: 1 }, { k: "b", v: 1 }] } - { key: "key", value: [{ k: "a", v: 2 }, { k: "c", v: 2 }] } - verify: collection: example/reductions/merge-key documents: - { key: "key", value: [{ k: "a", v: 1 }, { k: "b", v: 1 }, { k: "c", v: 2 }], } As with append, the LHS of merge may be null, in which case the reduction is treated as a no-op and its result remains null.","keywords":"","version":"Next"},{"title":"Working with logs and statistics","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/working-logs-stats/","content":"","keywords":"","version":"Next"},{"title":"Accessing logs and statistics​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#accessing-logs-and-statistics","content":" You can access logs and statistics in the Flow web app, by materializing them to an external endpoint, or from the command line. ","version":"Next","tagName":"h2"},{"title":"Logs and statistics in the Flow web app​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#logs-and-statistics-in-the-flow-web-app","content":" You can view a subset of logs and statistics for individual tasks in the Flow web app. Logs​ After you publish a new capture or materialization, a pop-up window appears that displays the task's logs. Once you close the window, you can't regain access to the full logs in the web app. For a complete view of logs, use flowctl or materialize the logs collection to an outside system. However, if a task fails, you can view the logs associated with the error(s) that caused the failure. In the Details view of the published capture or materialization, click the name of its shard to display the logs. Statistics​ Two statistics are shown for each capture, collection, and materialization: Bytes Written or Read. This corresponds to the bytesTotal property of the stats collection.Docs Written or Read. This corresponds to the docsTotal property of the stats collection. These fields have slightly different meanings for each Flow entity type: For captures, Bytes Written and Docs Written represent the total data written across all of the capture's associated collections.For collections, Bytes Written and Docs Written represent the data written to the collection from its associated capture or derivation.For materializations, Bytes Read and Docs Read represent the total data read from all of the materialization's associated collections. ","version":"Next","tagName":"h3"},{"title":"Accessing logs and statistics from the command line​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#accessing-logs-and-statistics-from-the-command-line","content":" The flowctl logs and flowctl stats subcommands allow you to print logs and stats, respectively, from the command line. This method allows more flexibility and is ideal for debugging. You can retrieve logs and stats for any published Flow task. For example: flowctl logs --task acmeCo/anvils/capture-one flowctl stats --task acmeCo/anvils/capture-one --uncommitted Beta The --uncommitted flag is currently required for flowctl stats. This means that all statistics are read, regardless of whether they are about a successfully committed transaction, or a transaction that was rolled back or uncommitted. In the future, committed reads will be the default. Printing logs or stats since a specific time​ To limit output, you can retrieve logs are stats starting at a specific time in the past. For example: flowctl stats --task acmeCo/anvils/materialization-one --since 1h ...will retrieve stats from approximately the last hour. The actual start time will always be at the previous fragment boundary, so it can be significantly before the requested time period. Additional options for flowctl logs and flowctl stats can be accessed through command-line help. ","version":"Next","tagName":"h3"},{"title":"Accessing logs or stats by materialization​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#accessing-logs-or-stats-by-materialization","content":" You can materialize your logs or stats collections to an external system. This is typically the preferred method if you’d like to continuously work with or monitor logs or statistics. You can materialize the logs or statistics for all tasks, or select a subset of tasks using a partition selector (the logs and stats collections are partitioned on tasks). caution Be sure to add a partition selector to exclude the logs and statistics of the materialization itself. Otherwise, you could trigger an infinite loop in which the connector materializes its own logs and statistics, collects logs and statistic on that event, and so on. acmeCo/anvils/logs: endpoint: connector: image: ghcr.io/estuary/materialize-webhook:dev config: address: my.webhook.com bindings: - resource: relativePath: /log/wordcount source: ops/acmeCo/logs # Exclude the logs of this materialization to avoid an infinite loop. partitions: exclude: name: ['acmeCo/anvils/logs'] ","version":"Next","tagName":"h3"},{"title":"Available statistics​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#available-statistics","content":" Available statistics include information about the amount of data in inputs and outputs of each transaction. They also include temporal information about the transaction. Statistics vary by task type (capture, materialization, or derivation). A thorough knowledge of Flow's advanced concepts is necessary to effectively leverage these statistics. stats collection documents include the following properties. ","version":"Next","tagName":"h2"},{"title":"Shard information​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#shard-information","content":" A stats document begins with data about the shard processing the transaction. Each processing shard is uniquely identified by the combination of its name, keyBegin, and rClockBegin. This information is important for tasks with multiple shards: it allows you to determine whether data throughput is evenly distributed amongst those shards. Property\tDescription\tData Type\tApplicable Task Type/shard\tFlow shard information\tobject\tAll /shard/kind\tThe type of catalog task. One of "capture", "derivation", or "materialization"\tstring\tAll /shard/name\tThe name of the catalog task (without the task type prefix)\tstring\tAll /shard/keyBegin\tWith rClockBegin, this comprises the shard ID. The inclusive beginning of the shard's assigned key range.\tstring\tAll /shard/rClockBegin\tWith keyBegin, this comprises the shard ID. The inclusive beginning of the shard's assigned rClock range.\tstring\tAll ","version":"Next","tagName":"h3"},{"title":"Transaction information​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#transaction-information","content":" stats documents include information about a transaction: its inputs and outputs, the amount of data processed, and the time taken. You can use this information to ensure that your Flow tasks are running efficiently, and that the amount of data processed matches your expectations. Property\tDescription\tData Type\tApplicable Task Type/ts\tTimestamp corresponding to the start of the transaction, rounded to the nearest minute\tstring\tAll /openSecondsTotal\tTotal time that the transaction was open before starting to commit\tnumber\tAll /txnCount\tTotal number of transactions represented by this stats document. Used for reduction.\tinteger\tAll /capture\tCapture stats, organized by collection\tobject\tCapture /materialize\tMaterialization stats, organized by collection\tobject\tMaterialization /derive\tDerivation statistics\tobject\tDerivation /<task-type>/<collection-name>/right/\tInput documents from a the task's source\tobject\tCapture, materialization /<task-type>/<collection-name>/left/\tInput documents from an external destination; used for reduced updates in materializations\tobject\tMaterialization /<task-type>/<collection-name>/out/\tOutput documents from the transaction\tobject\tAll /<task-type>/{}/docsTotal\tTotal number of documents\tinteger\tAll /<task-type>/{}/bytesTotal\tTotal number of bytes representing the JSON encoded documents\tinteger\tAll /derivations/transforms/transformStats\tStats for a specific transform of a derivation, which will have an update, publish, or both\tobject\tDerivation /derivations/transforms/transformStats/input\tThe input documents that were fed into this transform\tobject\tDerivation /derivations/transforms/transformStats/update\tThe outputs from update lambda invocations, which were combined into registers\tobject\tDerivation /derivations/transforms/transformStats/publish\tThe outputs from publish lambda invocations.\tobject\tDerivation /derivations/registers/createdTotal\tThe total number of new register keys that were created\tinteger\tDerivation ","version":"Next","tagName":"h3"},{"title":"minimize and maximize","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize/","content":"minimize and maximize minimize and maximize reduce by taking the smallest or largest seen value, respectively. collections: - name: example/reductions/min-max schema: type: object reduce: { strategy: merge } properties: key: { type: string } min: { reduce: { strategy: minimize } } max: { reduce: { strategy: maximize } } required: [key] key: [/key] tests: "Expect we can min/max values": - ingest: collection: example/reductions/min-max documents: - { key: "key", min: 32, max: "abc" } - { key: "key", min: 42, max: "def" } - verify: collection: example/reductions/min-max documents: - { key: "key", min: 32, max: "def" } minimize and maximize can also take a key, which is one or more JSON pointers that are relative to the reduced location. Keys make it possible to minimize and maximize over complex types by ordering over an extracted composite key. In the event that a right-hand side document key equals the current left-hand side minimum or maximum, the documents are deeply merged. This can be used to, for example, track not just the minimum value but also the number of times it’s been seen: collections: - name: example/reductions/min-max-key schema: type: object reduce: { strategy: merge } properties: key: { type: string } min: $anchor: min-max-value type: array items: - type: string - type: number reduce: { strategy: sum } reduce: strategy: minimize key: [/0] max: $ref: "#min-max-value" reduce: strategy: maximize key: [/0] required: [key] key: [/key] tests: "Expect we can min/max values using a key extractor": - ingest: collection: example/reductions/min-max-key documents: - { key: "key", min: ["a", 1], max: ["a", 1] } - { key: "key", min: ["c", 2], max: ["c", 2] } - { key: "key", min: ["b", 3], max: ["b", 3] } - { key: "key", min: ["a", 4], max: ["a", 4] } - verify: collection: example/reductions/min-max-key documents: # Min of equal keys ["a", 1] and ["a", 4] => ["a", 5]. - { key: "key", min: ["a", 5], max: ["c", 2] } ","keywords":"","version":"Next"},{"title":"set","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/set/","content":"set set interprets the document location as an update to a set. The location must be an object having only “add", “intersect", and “remove” properties. Any single “add", “intersect", or “remove” is always allowed. A document with “intersect” and “add” is allowed, and is interpreted as applying the intersection to the left-hand side set, followed by a union with the additions. A document with “remove” and “add” is also allowed, and is interpreted as applying the removals to the base set, followed by a union with the additions. “remove” and “intersect” within the same document are prohibited. Set additions are deeply merged. This makes sets behave like associative maps, where the “value” of a set member can be updated by adding it to the set again, with a reducible update. Sets may be objects, in which case the object property serves as the set item key: collections: - name: example/reductions/set schema: type: object reduce: { strategy: merge } properties: key: { type: string } value: # Sets are always represented as an object. type: object reduce: { strategy: set } # Schema for "add", "intersect", and "remove" properties # (each a map of keys and their associated sums): additionalProperties: type: object additionalProperties: type: number reduce: { strategy: sum } # Flow requires that all parents of locations with a reduce # annotation also have one themselves. # This strategy therefore must (currently) be here, but is ignored. reduce: { strategy: lastWriteWins } required: [key] key: [/key] tests: "Expect we can apply set operations to incrementally build associative maps": - ingest: collection: example/reductions/set documents: - { key: "key", value: { "add": { "a": 1, "b": 1, "c": 1 } } } - { key: "key", value: { "remove": { "b": 0 } } } - { key: "key", value: { "add": { "a": 1, "d": 1 } } } - verify: collection: example/reductions/set documents: - { key: "key", value: { "add": { "a": 2, "c": 1, "d": 1 } } } - ingest: collection: example/reductions/set documents: - { key: "key", value: { "intersect": { "a": 0, "d": 0 } } } - { key: "key", value: { "add": { "a": 1, "e": 1 } } } - verify: collection: example/reductions/set documents: - { key: "key", value: { "add": { "a": 3, "d": 1, "e": 1 } } } Sets can also be sorted arrays, which are ordered using a provide key extractor. Keys are given as one or more JSON pointers, each relative to the item. As with merge, arrays must be pre-sorted and de-duplicated by the key, and set reductions always maintain this invariant. Use a key extractor of [“”] to apply the natural ordering of scalar values. Whether array or object types are used, the type must always be consistent across the “add” / “intersect” / “remove” terms of both sides of the reduction. collections: - name: example/reductions/set-array schema: type: object reduce: { strategy: merge } properties: key: { type: string } value: # Sets are always represented as an object. type: object reduce: strategy: set key: [/0] # Schema for "add", "intersect", & "remove" properties # (each a sorted array of [key, sum] 2-tuples): additionalProperties: type: array # Flow requires that all parents of locations with a reduce # annotation also have one themselves. # This strategy therefore must (currently) be here, but is ignored. reduce: { strategy: lastWriteWins } # Schema for contained [key, sum] 2-tuples: items: type: array items: - type: string - type: number reduce: { strategy: sum } reduce: { strategy: merge } required: [key] key: [/key] tests: ? "Expect we can apply operations of sorted-array sets to incrementally build associative maps" : - ingest: collection: example/reductions/set-array documents: - { key: "key", value: { "add": [["a", 1], ["b", 1], ["c", 1]] } } - { key: "key", value: { "remove": [["b", 0]] } } - { key: "key", value: { "add": [["a", 1], ["d", 1]] } } - verify: collection: example/reductions/set-array documents: - { key: "key", value: { "add": [["a", 2], ["c", 1], ["d", 1]] } } - ingest: collection: example/reductions/set-array documents: - { key: "key", value: { "intersect": [["a", 0], ["d", 0]] } } - { key: "key", value: { "add": [["a", 1], ["e", 1]] } } - verify: collection: example/reductions/set-array documents: - { key: "key", value: { "add": [["a", 3], ["d", 1], ["e", 1]] } } ","keywords":"","version":"Next"},{"title":"Time Travel","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/time-travel/","content":"","keywords":"","version":"Next"},{"title":"How to configure time travel​","type":1,"pageTitle":"Time Travel","url":"/pr-preview/pr-1594/reference/time-travel/#how-to-configure-time-travel","content":" In the Flow web app, either navigate to an existing materialization or create a new one. Under Source Collections scroll to the bottom of a Resource Configuration for a specific collection. If you are working with a new materialization, you must link a collection to the materialization before continuing. You'll find two optional date-time fields for implementing time travel: notBefore and notAfter. Click on either field to open a date/time picker that you can use to set the values. It's not mandatory to select values for both fields for time travel to take effect. However, selecting values for both fields will ensure that only data meeting both criteria is materialized. In other words, new data must fall before the notAfter date and after the notBefore date to be included in the materialization. ","version":"Next","tagName":"h2"},{"title":"Specification​","type":1,"pageTitle":"Time Travel","url":"/pr-preview/pr-1594/reference/time-travel/#specification","content":" Alternatively, both fields can be defined in the Flow specification file with the following format: materializations: # The name of the materialization. acmeCo/example/database-views: # Endpoint defines how to connect to the destination of the materialization. # Required, type: object endpoint: # This endpoint uses a connector provided as a Docker image. connector: # Docker image that implements the materialization connector. image: ghcr.io/estuary/materialize-mysql:dev # File that provides the connector's required configuration. # Configuration may also be presented inline. config: path/to//connector-config.yaml bindings: - # Source collection read by this binding. # Required, type: object or string source: # Name of the collection to be read. # Required. name: acmeCo/example/collection # Lower bound date-time for documents which should be processed. # Source collection documents published before this date-time are filtered. # `notBefore` is *only* a filter. Updating its value will not cause Flow # to re-process documents that have already been read. # Optional. Default is to process all documents. notBefore: 2023-01-23T01:00:00Z # Upper bound date-time for documents which should be processed. # Source collection documents published after this date-time are filtered. # Like `notBefore`, `notAfter` is *only* a filter. Updating its value will # not cause Flow to re-process documents that have already been read. # Optional. Default is to process all documents. notAfter: 2023-01-23T02:00:00Z ","version":"Next","tagName":"h3"},{"title":"Properties​","type":1,"pageTitle":"Time Travel","url":"/pr-preview/pr-1594/reference/time-travel/#properties","content":" Property\tTitle\tDescription\tType/notBefore\tNot Before\tOnly include date before this time\tdate-time /notAfter\tNot After\tOnly include data after this time\tdate-time ","version":"Next","tagName":"h2"}],"options":{"excludeRoutes":["blog/**/*"],"id":"default"}} \ No newline at end of file diff --git a/pr-preview/pr-1594/search-doc.json b/pr-preview/pr-1594/search-doc.json deleted file mode 100644 index c0825781b3..0000000000 --- a/pr-preview/pr-1594/search-doc.json +++ /dev/null @@ -1 +0,0 @@ -{"searchDocs":[{"title":"Journals","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/advanced/journals/","content":"","keywords":"","version":"Next"},{"title":"Specification​","type":1,"pageTitle":"Journals","url":"/pr-preview/pr-1594/concepts/advanced/journals/#specification","content":" Flow collections can control some aspects of how their contents are mapped into journals through the journals stanza: collections: acmeCo/orders: schema: orders.schema.yaml key: [/id] journals: # Configuration for journal fragments. # Required, type: object. fragments: # Codec used to compress fragment files. # One of ZSTANDARD, SNAPPY, GZIP, or NONE. # Optional. Default is GZIP. compressionCodec: GZIP # Maximum flush delay before in-progress fragment buffers are closed # and persisted. Default uses no flush interval. # Optional. Given as a time duration. flushInterval: 15m # Desired content length of each fragment, in megabytes before compression. # Default is 512MB. # Optional, type: integer. length: 512 # Duration for which historical files of the collection should be kept. # Default is forever. # Optional. Given as a time duration. retention: 720h Your storage mappings determine which of your cloud storage buckets is used for storage of collection fragment files. ","version":"Next","tagName":"h2"},{"title":"Physical partitions​","type":1,"pageTitle":"Journals","url":"/pr-preview/pr-1594/concepts/advanced/journals/#physical-partitions","content":" Every logical partition of a Flow collection is created with a single physical partition. Later and as required, new physical partitions are added in order to increase the write throughput of the collection. Each physical partition is responsible for all new writes covering a range of keys occurring in collection documents. Conceptually, if keys range from [A-Z] then one partition might cover [A-F] while another covers [G-Z]. The pivot of a partition reflects the first key in its covered range. One physical partition is turned into more partitions by subdividing its range of key ownership. For instance, a partition covering [A-F] is split into partitions [A-C] and [D-F]. Physical partitions are journals. The relationship between the journal and its specific collection and logical partition are encoded withinits journal specification. ","version":"Next","tagName":"h2"},{"title":"Fragment files​","type":1,"pageTitle":"Journals","url":"/pr-preview/pr-1594/concepts/advanced/journals/#fragment-files","content":" Journal fragment files each hold a slice of your collection's content, stored as a compressed file of newline-delimited JSON documents in your cloud storage bucket. Files are flushed to cloud storage periodically, typically after they reach a desired size threshold. They use a content-addressed naming scheme which allows Flow to understand how each file stitches into the overall journal. Consider a fragment file path like: s3://acmeCo-bucket/acmeCo/orders/category=Anvils/pivot=00/utc_date=2022-01-07/utc_hour=19/0000000000000000-00000000201a3f27-1ec69e2de187b7720fb864a8cd6d50bb69cc7f26.gz This path has the following components: Component\tExampleStorage prefix of physical partition\ts3://acmeCo-bucket/acmeCo/orders/category=Anvils/pivot=00/ Supplemental time pseudo-partitions\tutc_date=2022-01-07/utc_hour=19/ Beginning content offset\t0000000000000000 Ending content offset\t00000000201a3f27 SHA content checksum\t1ec69e2de187b7720fb864a8cd6d50bb69cc7f26 Compression codec\t.gz The supplemental time pseudo-partitions are not logical partitions, but are added to each fragment file path to facilitate integration with external tools that understand Hive layouts. ","version":"Next","tagName":"h2"},{"title":"Hive layouts​","type":1,"pageTitle":"Journals","url":"/pr-preview/pr-1594/concepts/advanced/journals/#hive-layouts","content":" As we've seen, collection fragment files are written to cloud storage with path components like/category=Anvils/pivot=00/utc_date=2022-01-07/utc_hour=19/. If you've used tools within the Apache Hive ecosystem, this layout should feel familiar. Flow organizes files in this way to make them directly usable by tools that understand Hive partitioning, like Spark and Hive itself. Collections can also be integrated as Hive-compatible external tables in tools likeSnowflakeandBigQueryfor ad-hoc analysis. SQL queries against these tables can even utilize predicate push-down, taking query predicates over category, utc_date, and utc_hourand pushing them down into the selection of files that must be read to answer the query — often offering much faster and more efficient query execution because far less data must be read. ","version":"Next","tagName":"h2"},{"title":"Logs and statistics","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/advanced/logs-stats/","content":"","keywords":"","version":"Next"},{"title":"Logs​","type":1,"pageTitle":"Logs and statistics","url":"/pr-preview/pr-1594/concepts/advanced/logs-stats/#logs","content":" Each organization that uses Flow has a logs collection under the global ops prefix. For the organization Acme Co, it would have the name ops/acmeCo/logs. These can be thought of as standard application logs: they store information about events that occur at runtime. They’re distinct from recovery logs, which track the state of various task shards. Regardless of how many Data Flows your organization has, all logs are stored in the same collection, which is read-only and logically partitioned on tasks. Logs are collected from events that occur within the Flow runtime, as well as the capture and materialization connectors your Data Flow is using. ","version":"Next","tagName":"h2"},{"title":"Log level​","type":1,"pageTitle":"Logs and statistics","url":"/pr-preview/pr-1594/concepts/advanced/logs-stats/#log-level","content":" You can set the log level for each catalog task to control the level of detail at which logs are collected for that task. The available levels, listed from least to most detailed, are: error: Non-recoverable errors from the Flow runtime or connector that are critical to know aboutwarn: Errors that can be re-tried, but likely require investigationinfo: Task lifecycle events, or information you might want to collect on an ongoing basisdebug: Details that will help debug an issue with a tasktrace: Maximum level of detail that may yield gigabytes of logs The default log level is info. You can change a task’s log level by adding the shards keyword to its definition in the catalog spec: materializations: acmeCo/debugMaterialization: shards: logLevel: debug endpoint: {} ","version":"Next","tagName":"h3"},{"title":"Statistics​","type":1,"pageTitle":"Logs and statistics","url":"/pr-preview/pr-1594/concepts/advanced/logs-stats/#statistics","content":" Each organization that uses Flow has a stats collection under the global ops prefix. For the organization Acme Co, it would have the name ops/acmeCo/stats. Regardless of how many Data Flows your organization has, all stats are stored in the same collection, which is read-only and logically partitioned on tasks. A new document is published to the stats collection for each task transaction. Each document includes information about the time and quantity of data inputs and outputs. Statistics vary by task type (capture, materialization, or derivation). Use stats to: Evaluate the data throughput of a task; for example, a derivation.Compare a data throughput of a task between platforms; for example, compare reported data capture by Flow to detected change rate in a source system.Access the same information used by Estuary for billing.Optimize your tasks for increased efficiency. See a detailed table of the properties included in stats documents. ","version":"Next","tagName":"h2"},{"title":"Working with logs and statistics​","type":1,"pageTitle":"Logs and statistics","url":"/pr-preview/pr-1594/concepts/advanced/logs-stats/#working-with-logs-and-statistics","content":" Learn more about working with logs and statistics ","version":"Next","tagName":"h2"},{"title":"Schema evolution","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/advanced/evolutions/","content":"","keywords":"","version":"Next"},{"title":"Introduction​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/concepts/advanced/evolutions/#introduction","content":" Flow stores your real-times datasets as collections, groups of continually updating JSON documents.Captures write data to collections, and materializations read data from collections. Together, these three components form a complete Data Flow. Note Derivations can also read data from and write data to collections. To keep things simple in this article, we'll be referring only to captures and materializations. graph LR; Source[Source System]-->Capture; Capture-->Collection; Collection-->Materialization; Materialization-->Dest[Destination System]; Each collection and its data are defined by a collection specification, or spec. The spec serves as a formal contract between the capture and the materialization, ensuring that data is correctly shaped and moves through the Data Flow without error. The spec includes the collection's key, its schema, and logical partitions of the collection, if any. When any of these parts change, any capture or materialization writing to or reading from the collection must be updated to approve of the change, otherwise, the Data Flow will fail with an error. You can use Flow's schema evolutions feature to quickly and simultaneously update other parts of a Data Flow so you're able to re-start it without error when you introduce a collection change. Collection specs may change for a variety of reasons, such as: The source system is a database, and someone ran an ALTER TABLE statement on a captured table, so you need to update the collection schema (through AutoDiscover or manually).The source system contains unstructured data, and some data with a different shape was just captured so you need to update the collection schema (through AutoDiscover or manually).Someone manually changed the collection's logical partitions. Regardless of why or how a spec change is introduced, the effect is the same. Flow will never permit you to publish changes that break this contract between captures and materializations, so you'll need to update the contract. ","version":"Next","tagName":"h2"},{"title":"Using evolutions​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/concepts/advanced/evolutions/#using-evolutions","content":" When you attempt to publish a breaking change to a collection in the Flow web app, you get an error message that looks similar to this one: Click the Apply button to trigger an evolution and update all necessary specification to keep your Data Flow functioning. Then, review and publish your draft. If you enabled AutoDiscover on a capture, any breaking changes that it introduces will trigger an automatic schema evolution, so long as you selected the Breaking change re-versions collections option(evolveIncompatibleCollections). ","version":"Next","tagName":"h2"},{"title":"What do schema evolutions do?​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/concepts/advanced/evolutions/#what-do-schema-evolutions-do","content":" The schema evolution feature is available in the Flow web app when you're editing pre-existing Flow entities. It notices when one of your edit would cause other components of the Data Flow to fail, alerts you, and gives you the option to automatically update the specs of these components to prevent failure. In other words, evolutions happen in the draft state. Whenever you edit, you create a draft. Evolutions add to the draft so that when it is published and updates the active data flow, operations can continue seamlessly. Alternatively, you could manually update all the specs to agree to your edit, but this becomes time-consuming and repetitive. Evolutions can prevent errors resulting from mismatched specs in two ways: Materialize data to a new resource in the endpoint system: The evolution updates the affected materialization bindings to increment their backfill counter, which causes the materialization to re-create the resource (database table, for example) and backfill it from the beginning. This is a simpler change, and how evolutions work in most cases. Re-create the Flow collection with a new name: The evolution creates a completely new collection with numerical suffix, such as _v2. This collection starts out empty and backfills from the source. The evolution also updates all captures and materializations that reference the old collection to instead reference the new collection, and increments their backfill counters. This is a more complicated change, and evolutions only work this way when necessary: when the collection key or logical partitioning changes. In either case, the names of the destination resources will remain the same. For example, a materialization to Postgres would drop and re-create the affected tables with the same names they had previously. Also in either case, only the specific bindings that had incompatible changes will be affected. Other bindings will remain untouched, and will not re-backfill. ","version":"Next","tagName":"h2"},{"title":"What causes breaking schema changes?​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/concepts/advanced/evolutions/#what-causes-breaking-schema-changes","content":" Though changes to the collection key or logical partition can happen, the most common cause of a breaking change is a change to the collection schema. Generally materializations, not captures, require updates following breaking schema changes. This is because the new collection specs are usually discovered from the source, so the capture is edited at the same time as the collection. Consider a collection schema that looks like this: schema: type: object properties: id: { type: integer } foo: { type: string, format: date-time } required: [id] key: [/id] If you materialized that collection into a relational database table, the table would look something like my_table (id integer primary key, foo timestamptz). Now, say you edit the collection spec to remove format: date-time from bar. You'd expect the materialized database table to then look like (id integer primary key, foo text). But since the column type of foo has changed, this will fail. An easy solution in this case would be to change the name of the table that the collection is materialized into. Evolutions do this by appending a suffix to the original table name. In this case, you'd end up with my_table_v2 (id integer primary key, foo text). ","version":"Next","tagName":"h2"},{"title":"Projections","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/advanced/projections/","content":"","keywords":"","version":"Next"},{"title":"Logical partitions​","type":1,"pageTitle":"Projections","url":"/pr-preview/pr-1594/concepts/advanced/projections/#logical-partitions","content":" Projections can also be used to logically partition a collection, specified as a longer-form variant of a projection definition: collections: acmeCo/user-sessions: schema: session.schema.yaml key: [/user/id, /timestamp] projections: country: location: /country partition: true device: location: /agent/type partition: true network: location: /agent/network partition: true Logical partitions isolate the storage of documents by their differing values for partitioned fields. Flow extracts partitioned fields from each document, and every unique combination of partitioned fields is a separate logical partition. Every logical partition has one or more physical partitionsinto which their documents are written, which in turn controls how files are arranged within cloud storage. For example, a document of "acmeCo/user-sessions" like: {"country": "CA", "agent": {"type": "iPhone", "network": "LTE"}, ...} Might produce files in cloud storage like: s3://bucket/example/sessions/country=CA/device=iPhone/network=LTE/pivot=00/utc_date=2020-11-04/utc_hour=16/<name>.gz info country, device, and network together identify a logical partition, while pivot identifies a physical partition.utc_date and utc_hour is the time at which the journal fragment was created. Learn more about physical partitions. ","version":"Next","tagName":"h2"},{"title":"Partition selectors​","type":1,"pageTitle":"Projections","url":"/pr-preview/pr-1594/concepts/advanced/projections/#partition-selectors","content":" When reading from a collection, Flow catalog entities like derivations, materializations, and tests can provide a partition selector, which identifies the subset of partitions that should be read from a source collection: # Partition selectors are included as part of a larger entity, # such as a derivation or materialization. partitions: # `include` selects partitioned fields and corresponding values that # must be matched in order for a partition to be processed. # All of the included fields must be matched. # Default: All partitions are included. type: object include: # Include partitions from North America. country: [US, CA] # AND where the device is a mobile phone. device: [iPhone, Android] # `exclude` selects partitioned fields and corresponding values which, # if matched, exclude the partition from being processed. # A match of any of the excluded fields will exclude the partition. # Default: No partitions are excluded. type: object exclude: # Skip sessions which were over a 3G network. network: ["3G"] Partition selectors are efficient as they allow Flow to altogether avoid reading documents that aren’t needed. ","version":"Next","tagName":"h3"},{"title":"Task shards","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/advanced/shards/","content":"","keywords":"","version":"Next"},{"title":"Shard splits​","type":1,"pageTitle":"Task shards","url":"/pr-preview/pr-1594/concepts/advanced/shards/#shard-splits","content":" When a task is first created, it is initialized with a single shard. Later and as required, shards may be split into two shards. This is done by the service operator on your behalf, depending on the size of your task. Shard splitting doesn't require downtime; your task will continue to run as normal on the old shard until the split occurs and then shift seamlessly to the new, split shards. This process can be repeated as needed until your required throughput is achieved. If you have questions about how shards are split for your tasks, contact your Estuary account representative. ","version":"Next","tagName":"h2"},{"title":"Transactions​","type":1,"pageTitle":"Task shards","url":"/pr-preview/pr-1594/concepts/advanced/shards/#transactions","content":" Shards process messages in dynamic transactions. Whenever a message is ready to be processed by the task (when new documents appear at the source endpoint or collection), a new transaction is initiated. The transaction will continue so long as further messages are available for processing. When no more messages are immediately available, the transaction closes. A new transaction is started whenever the next message is available. In general, shorter transaction durations decrease latency, while longer transaction durations increase efficiency. Flow automatically balances these two extremes to optimize each task, but it may be useful in some cases to control transaction duration. For example, materializations to large analytical warehouses may benefit from longer transactions, which can reduce cost by performing more data reduction before landing data in the warehouse. Some endpoint systems, like BigQuery, limit the number of table operations you can perform. Longer transaction durations ensure that you don't exceed these limits. You can set the minimum and maximum transaction duration in a task's shards configuration. ","version":"Next","tagName":"h2"},{"title":"Recovery logs​","type":1,"pageTitle":"Task shards","url":"/pr-preview/pr-1594/concepts/advanced/shards/#recovery-logs","content":" All task shards have associated state, which is managed in the shard's store. Capture tasks must track incremental checkpoints of their endpoint connectors.Derivation tasks manage a potentially very large index of registers, as well as read checkpoints of sourced collection journals.Materialization tasks track incremental checkpoints of their endpoint connectors, as well as read checkpoints of sourced collection journals. Shard stores userecovery logsto replicate updates and implement transaction semantics. Recovery logs are regular journals, but hold binary data and are not intended for direct use. However, they can hold your user data. Recovery logs of derivations hold your derivation register values. Recovery logs are stored in your cloud storage bucket, and must have a configured storage mapping. ","version":"Next","tagName":"h2"},{"title":"Catalog","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/catalogs/","content":"","keywords":"","version":"Next"},{"title":"Data Flows​","type":1,"pageTitle":"Catalog","url":"/pr-preview/pr-1594/concepts/catalogs/#data-flows","content":" You can mix and match catalog entities to create a variety of Data Flows. The simplest Data Flow has just three entities. graph LR; Capture-->Collection; Collection-->Materialization; It may also be more complex, combining multiple entities of each type. graph LR; capture/two-->collection/D; capture/one-->collection/C; capture/one-->collection/A; collection/A-->derivation/B; collection/D-->derivation/E; collection/C-->derivation/E; derivation/B-->derivation/E; collection/D-->materialization/one; derivation/E-->materialization/two; ","version":"Next","tagName":"h2"},{"title":"Flow specification files​","type":1,"pageTitle":"Catalog","url":"/pr-preview/pr-1594/concepts/catalogs/#flow-specification-files","content":" Catalog entities are defined and described in Flow specification files.These YAML files contain the configuration details that each entity requires. You work on specification files as drafts before you publish them to a catalog. There are two ways to create and work with specification files. ","version":"Next","tagName":"h2"},{"title":"In the Flow web app​","type":1,"pageTitle":"Catalog","url":"/pr-preview/pr-1594/concepts/catalogs/#in-the-flow-web-app","content":" You don't need to write or edit the specification files directly — the web app is designed to generate them for you. You do have the option to review and edit the generated specification as you create captures and materializations using the Catalog Editor. ","version":"Next","tagName":"h3"},{"title":"With flowctl​","type":1,"pageTitle":"Catalog","url":"/pr-preview/pr-1594/concepts/catalogs/#with-flowctl","content":" If you prefer a developer workflow, you can also work with specification files directly in your local environment using flowctl. You then publish them back to the catalog. A given Data Flow may be described by one specification file, or by many, so long as a top-level file imports all the others. The files use the extension *.flow.yaml or are simply named flow.yaml by convention. Using this extension activates Flow's VS Code integration and auto-complete. Flow integrates with VS Code for development environment support, like auto-complete, tooltips, and inline documentation. Depending on your Data Flow, you may also have TypeScript modules, JSON schemas, or test fixtures. ","version":"Next","tagName":"h3"},{"title":"Namespace​","type":1,"pageTitle":"Catalog","url":"/pr-preview/pr-1594/concepts/catalogs/#namespace","content":" All catalog entities (captures, materializations, and collections) are identified by a namesuch as acmeCo/teams/manufacturing/anvils. Names have directory-like prefixes and every name within Flow is globally unique. If you've ever used database schemas to organize your tables and authorize access, you can think of name prefixes as being akin to database schemas with arbitrary nesting. All catalog entities exist together in a single namespace. As a Flow customer, you're provisioned one or more high-level prefixes for your organization. Further division of the namespace into prefixes is up to you. Prefixes of the namespace, like acmeCo/teams/manufacturing/, are the foundation for Flow's authorization model. ","version":"Next","tagName":"h2"},{"title":"Concepts","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/","content":"","keywords":"","version":"Next"},{"title":"Working with Flow​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#working-with-flow","content":" There are two main environments in which you can work with Flow: the web application or your preferred local environment using the flowctl command-line tool. ","version":"Next","tagName":"h2"},{"title":"Web application​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#web-application","content":" The Flow web application is where you'll most likely create, monitor, and update your Data Flows. You can find it at dashboard.estuary.dev. The app is backed by secure, cloud-hosted infrastructure that Estuary manages. Take a tour of the web app. Create your first Data Flow with the web app. ","version":"Next","tagName":"h3"},{"title":"flowctl​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#flowctl","content":" flowctl is a command-line interface for working with Flow's public API. Using flowctl, developers can inspect, edit, test, and publish Data Flows — just as with the web application. For example, you can create a Data Flow with the web app, and then use flowctl to fetch it into files that you manage within a Git repo. Learn more about flowctl ","version":"Next","tagName":"h3"},{"title":"Essential concepts​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#essential-concepts","content":" In this section, you'll find the most important Flow terms and concepts. If you're new to Flow, start here. A complete end-to-end Data Flow between two systems has three components: Capture: Flow ingests data from an outside source.Collections: Flow maintains the captured data in cloud storage.Materialization: Flow pushes data to an outside destination. graph LR; Capture-->Collection; Collection-->Materialization; It may also include: Derivations: You apply a transformation to data in a collection, resulting in a new collection. All of these entities are described in the catalog. ","version":"Next","tagName":"h2"},{"title":"Catalog​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#catalog","content":" The catalog is the set of active entities that comprise all Data Flows: captures, materializations, derivations, collections, schemas, tests, and more. All catalog entities are defined in Flow specification files — either manually, by you, or generated by the Flow web app. You create the specifications as drafts, and publish them to add them to the catalog. You can mix and match catalog entities to create a variety of Data Flows. Learn more about the catalog ","version":"Next","tagName":"h3"},{"title":"Collections​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#collections","content":" Collections represent datasets within Flow. All captured documents are written to a collection, and all materialized documents are read from a collection. Collections are a real-time data lake. Like a traditional data lake, the documents that make up a collection are stored as plain JSON in your cloud storage bucket. Unlike a traditional data lake, updates to the collection are reflected downstream in the data flow within milliseconds. Documents in collections are stored indefinitely in your cloud storage bucket (or may be managed with your regular bucket lifecycle policies). This means that the full historical content of a collection is available to support future data operations and perform backfills without going back to the source. Each collection has a keyed schema against which incoming documents are validated. This ensures that data is always clean and organized. Learn more about collections ","version":"Next","tagName":"h3"},{"title":"Captures​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#captures","content":" A capture is a Flow task that ingests data from an external source into one or more Flow collections. Documents continuously move from the source into Flow; as new documents become available at the source, Flow validates their schema and adds them to their corresponding collection. Captures interface with source systems using connectors. Learn more about captures ","version":"Next","tagName":"h3"},{"title":"Materializations​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#materializations","content":" A materialization is a Flow task that pushes data from one or more collections to an external destination. Documents continuously moves from each Flow collection to the destination. Materializations are the conceptual inverse of captures. As new documents become available within bound collections, the materialization keeps the destination up to date within milliseconds, or as fast as that system allows. Materializations interface with destinations using connectors. Learn more about materializations ","version":"Next","tagName":"h3"},{"title":"Endpoints​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#endpoints","content":" Endpoints are the source systems from which Flow captures data and the destination systems to which Flow materializes data. All kinds of data systems can be endpoints, including databases, key/value stores, streaming pub/sub systems, SaaS products, and cloud storage locations. Flow connects to this wide variety of endpoints using connectors. ","version":"Next","tagName":"h3"},{"title":"Connectors​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#connectors","content":" Connectors are plugin components that allow Flow to interface with endpoint data systems. They power captures and materializations. Flow uses an open-source connector model. Many connectors are made by Estuary, and others are made by third parties. Because connectors are open-source and kept separate from Flow itself, new integrations can be added and updated quickly. This is important, as the landscape of data systems and platforms is constantly evolving. All currently supported connectors are ready to use in the Flow web application. They're also available as Docker images, each encapsulating the details of working with a particular source or destination system. Learn more about connectors ","version":"Next","tagName":"h3"},{"title":"Intermediate concepts​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#intermediate-concepts","content":" In this section, you'll find important concepts that are optional for basic usage. Read this to unlock more powerful workflows. ","version":"Next","tagName":"h2"},{"title":"Derivations​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#derivations","content":" A derivation is a collection that results from the transformation of one or more other collections, which is continuously updated in sync with its source collection(s). You can use derivations to map, reshape, and filter documents. They can also be used to tackle complex stateful streaming workflows, including joins and aggregations, without windowing and scaling limitations. Learn more about derivations ","version":"Next","tagName":"h3"},{"title":"Schemas​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#schemas","content":" All collections in Flow have an associatedJSON schemaagainst which documents are validated every time they're written or read. Schemas are critical to how Flow ensures the integrity of your data. Flow validates your documents to ensure that bad data doesn't make it into your collections — or worse, into downstream data products! JSON schema is a flexible standard for representing structure, invariants, and other constraints over your documents. Schemas can be very permissive, highly exacting, or somewhere in between. Flow pauses catalog tasks when documents don't match the collection schema, alerting you to the mismatch and allowing you to fix it before it creates a bigger problem. Learn more about schemas ","version":"Next","tagName":"h3"},{"title":"Reductions​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#reductions","content":" Every Flow collection schema includes a key. The key is used to identify collection documents and determine how they are grouped. When a collection is materialized into a database table, for example, its key becomes the SQL primary key of the materialized table. Flow also uses the key to reduce documents in collections, making storage and materializations more efficient. If multiple documents of a given key are added to a collection, by default, the most recent document supersedes all previous documents of that key. You can exert more control over your data by changing the default reduction strategy. By doing so, you can deeply merge documents, maintain running counts, and achieve other complex aggregation behaviors. Learn more about reductions ","version":"Next","tagName":"h3"},{"title":"Tests​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#tests","content":" Tests become an important part of your Data Flows when you add derivations and customized reduction behavior. You use tests to verify the end-to-end behavior of your collections and derivations. A test is a sequence of ingestion or verification steps. Ingestion steps ingest one or more document fixtures into a collection, and verification steps assert that the contents of another derived collection match a test expectation. Learn more about tests ","version":"Next","tagName":"h3"},{"title":"Tasks​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#tasks","content":" Captures, derivations, and materializations are collectively referred to as catalog tasks. They are the "active" components of a Data Flow, each running continuously and reacting to documents as they become available. Collections, by way of comparison, are inert. They reflect data at rest, and are acted upon by catalog tasks: A capture adds documents to a collection pulled from a source endpoint.A derivation updates a collection by applying transformations to other collections.A materialization reacts to changes of a collection to update a destination endpoint. ","version":"Next","tagName":"h3"},{"title":"Resources and bindings​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#resources-and-bindings","content":" A resource is an addressable collection of data within a source or destination system. The exact meaning of a resource is up to the endpoint and its connector. For example: Resources of a database endpoint might be its individual tables.Resources of a Kafka cluster might be its topics.Resources of a SaaS connector might be its various API feeds. When you create capture or materialization, it connects a collection to a resource through a binding. A given capture or materialization may have multiple bindings, which connect multiple collections to different resources. ","version":"Next","tagName":"h3"},{"title":"Storage mappings​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#storage-mappings","content":" Flow collections use cloud storage buckets for the durable storage of data. Storage mappings define how Flow maps your various collections into your storage buckets and prefixes. Learn more about storage mappings ","version":"Next","tagName":"h3"},{"title":"Advanced concepts​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#advanced-concepts","content":" This section discusses advanced Flow concepts. The information here unlocks a more technical understanding of how Flow works, and may be helpful in advanced use cases. ","version":"Next","tagName":"h2"},{"title":"Journals​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#journals","content":" Journals provide the low-level storage for Flow collections. Each logical and physical partition of a collection is backed by a journal. Task shards also use journals to provide for their durability and fault tolerance. Each shard has an associated recovery log, which is a journal into which internal checkpoint states are written. Learn more about journals ","version":"Next","tagName":"h3"},{"title":"Task shards​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#task-shards","content":" Task shards are the unit of execution for a catalog task. A single task can have many shards, which allow the task to scale across many machines to achieve more throughput and parallelism. Shards are created and managed by the Flow runtime. Each shard represents a slice of the overall work of the catalog task, including its processing status and associated internal checkpoints. Catalog tasks are created with a single shard, which can be repeatedly subdivided at any time — with no downtime — to increase the processing capacity of the task. Learn more about shards ","version":"Next","tagName":"h3"},{"title":"Projections​","type":1,"pageTitle":"Concepts","url":"/pr-preview/pr-1594/concepts/#projections","content":" Flow leverages your JSON schemas to produce other types of schemas as needed, such as TypeScript types and SQL CREATE TABLE statements. In many cases these projections provide comprehensive end-to-end type safety of Data Flows and their TypeScript transformations, all statically verified at build time. Learn more about projections ","version":"Next","tagName":"h3"},{"title":"Captures","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/captures/","content":"","keywords":"","version":"Next"},{"title":"Connectors​","type":1,"pageTitle":"Captures","url":"/pr-preview/pr-1594/concepts/captures/#connectors","content":" Captures extract data from an endpoint using a connector. Estuary builds and maintains many real-time connectors for various technology systems, such as database change data capture (CDC) connectors. See the source connector reference documentation. ","version":"Next","tagName":"h2"},{"title":"Batch sources​","type":1,"pageTitle":"Captures","url":"/pr-preview/pr-1594/concepts/captures/#batch-sources","content":" Flow supports running both first and third party connectors to batch sources including Singer, Meltano and Airbyte as well as natively-written Estuary connectors. These connectors tend to focus on SaaS APIs, and do not offer real-time streaming integrations. Flow runs the connector at regular intervals to capture updated documents. Third-party source connectors are independently reviewed and sometimes updated for compatibility with Flow. Estuary's source connectors documentation includes all actively supported connectors. If you see a connector you'd like to prioritize for access in the Flow web app, contact us. ","version":"Next","tagName":"h3"},{"title":"Discovery​","type":1,"pageTitle":"Captures","url":"/pr-preview/pr-1594/concepts/captures/#discovery","content":" To help you configure new pull captures, Flow offers the guided discovery workflow in the Flow web application. To begin discovery, you tell Flow the connector you'd like to use and basic information about the endpoint. Flow automatically generates a capture configuration for you. It identifies one or moreresources — tables, data streams, or the equivalent — and generates bindings so that each will be mapped to a data collection in Flow. You may then modify the generated configuration as needed before publishing the capture. info Discovers can also be run when editing an existing capture. This is commonly done in order to add new bindings, or update the collection specs and schemas associated with existing bindings. ","version":"Next","tagName":"h2"},{"title":"Automatically update captures​","type":1,"pageTitle":"Captures","url":"/pr-preview/pr-1594/concepts/captures/#automatically-update-captures","content":" You can choose to run periodic discovers in the background by adding the autoDiscover property to the capture. Flow will periodically check for changes to the source and re-publish the capture to reflect those changes. There are several options for controlling the behavior of autoDiscover: The addNewBindings option determines whether to add newly discovered resources, such as database tables, to the capture as bindings. If set to false, autoCapture will only update the collection specs for existing bindings. The evolveIncompatibleCollections option determines how to respond when the discovered updates would cause a breaking change to the collection. If true, it will trigger an evolution of the incompatible collection(s) to prevent failures. In the Flow web app, you can set these properties when you create or edit a capture. The toggles in the web app correspond directly to the properties above: "Automatically keep schemas up to date" enables autoDiscover"Automatically add new collections" corresponds to addNewBindings"Breaking changes re-versions collections" corresponds to evolveIncompatibleCollections ","version":"Next","tagName":"h2"},{"title":"Specification​","type":1,"pageTitle":"Captures","url":"/pr-preview/pr-1594/concepts/captures/#specification","content":" Captures are defined in Flow specification files per the following format: # A set of captures to include in the catalog. # Optional, type: object captures: # The name of the capture. acmeCo/example/source-s3: # Automatically performs periodic discover operations, which updates the bindings # to reflect what's in the source, and also updates collection schemas. # To disable autoDiscover, either omit this property or set it to `null`. autoDiscover: # Also add any newly discovered bindings automatically addNewBindings: true # How to handle breaking changes to discovered collections. If true, then existing # materialization bindings will be re-created with new names, as necessary. Or if # collection keys have changed, then new Flow collections will be created. If false, # then incompatible changes will simply result in failed publications, and will # effectively be ignored. evolveIncompatibleCollections: true # Endpoint defines how to connect to the source of the capture. # Required, type: object endpoint: # This endpoint uses a connector provided as a Docker image. connector: # Docker image that implements the capture connector. image: ghcr.io/estuary/source-s3:dev # File that provides the connector's required configuration. # Configuration may also be presented inline. config: path/to/connector-config.yaml # Bindings define how collections are populated from the data source. # A capture may bind multiple resources to different collections. # Required, type: array bindings: - # The target collection to capture into. # This may be defined in a separate, imported specification file. # Required, type: string target: acmeCo/example/collection # The resource is additional configuration required by the endpoint # connector to identify and capture a specific endpoint resource. # The structure and meaning of this configuration is defined by # the specific connector. # Required, type: object resource: stream: a-bucket/and-prefix # syncMode should be set to incremental for all Estuary connectors syncMode: incremental - target: acmeCo/example/another-collection resource: stream: a-bucket/another-prefix syncMode: incremental # Interval of time between invocations of non-streaming connectors. # If a connector runs to completion and then exits, the capture task will # restart the connector after this interval of time has elapsed. # # Intervals are relative to the start of an invocation and not its completion. # For example, if the interval is five minutes, and an invocation of the # capture finishes after two minutes, then the next invocation will be started # after three additional minutes. # # Optional. Default: Five minutes. interval: 5m ","version":"Next","tagName":"h2"},{"title":"flowctl","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/flowctl/","content":"","keywords":"","version":"Next"},{"title":"Installation and setup​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#installation-and-setup","content":" flowctl binaries for MacOS and Linux are available. Fow Windows, install Windows Subsystem for Linux (WSL) to run Linux on Windows, or use a remote development environment. Copy and paste the appropriate script below into your terminal. This will download flowctl, make it executable, and add it to your PATH. For Linux: sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-x86_64-linux' && sudo chmod +x /usr/local/bin/flowctl For Mac: sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-multiarch-macos' && sudo chmod +x /usr/local/bin/flowctl Alternatively, Mac users can install with Homebrew: brew tap estuary/flowctl brew install flowctl You can also find the source files on GitHub here. To connect to your Flow account and start a session, use an authentication token from the web app. ","version":"Next","tagName":"h2"},{"title":"User guides​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#user-guides","content":" View guides for common flowctl workflows. ","version":"Next","tagName":"h2"},{"title":"flowctl subcommands​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#flowctl-subcommands","content":" flowctl includes several top-level subcommands representing different functional areas. Each of these include multiple nested subcommands. Important top-level flowctl subcommands are described below. auth allows you to authenticate your development session in your local development environment. It's also how you provision Flow roles and users. Learn more about authentication. catalog allows you to work with your organization's current active catalog entities. You can investigate the current Data Flows, pull specifications for local editing, test and publish specifications that you wrote or edited locally, and delete entities from the catalog. collections allows you to work with your Flow collections. You can read the data from the collection and output it to stdout, or list the journals or journal fragments that comprise the collection. Learn more about reading collections with flowctl. draft provides an alternative method for many of the actions you'd normally perform with catalog, but common workflows have more steps. You can access full documentation of all flowctl subcommands from the command line by passing the --help or -h flag, for example: flowctl --help lists top-level flowctl subcommands. flowctl catalog --help lists subcommands of catalog. ","version":"Next","tagName":"h2"},{"title":"Editing Data Flows with flowctl​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#editing-data-flows-with-flowctl","content":" flowctl allows you to work locally on the specification files that define your Data Flows. You'll often need to move these specifications back and forth between your local environment and the catalogof published entities. The basic steps of this workflow are listed below, along with a diagram of the subcommands you'd use to accomplish them. Keep in mind that there's no single, correct way to work with flowctl, but we recommend this method to get started. List all the active specifications in the catalog, which you can then pull into your local environment. You can filter the output by prefix or entity type. For example, flowctl catalog list --prefix acmeCo/sales/ --collections only lists collections under theacmeCo/sales/ prefix. Pull a group of active specifications directly, resulting in local source files. You can refine results by prefix or entity type as described above (1). Note that if there are already files in your working directory, flowctl must reconcile them with the newly pulled specification.Learn more about your options. Make edits locally. Test local specifications (2). Publish local specifications to the catalog (3). graph LR; d[Local environment]; c[Active catalog]; d-- 2: flowctl catalog test -->d; d-- 3: flowctl catalog publish -->c; c-- 1: flowctl catalog pull-specs -->d; View the step-by-step guide. ","version":"Next","tagName":"h2"},{"title":"Reconciling specifications in local drafts​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#reconciling-specifications-in-local-drafts","content":" When you pull specifications to your working directory directly using flowctl catalog pull-specs, there may be conflicts between the existing files in that directory and the specifications you pull. By default, flowctl catalog pull-specs will abort if it detects an existing file with the same name as a specification it is attempting to pull. You can change this behavior with the --existing flag: --existing=overwrite pulls the new versions of conflicting files in place of the old versions. --existing=keep keeps the old versions of conflicting files. --existing=merge-specs performs a simple merge of new and old versions of conflicting files. For example, if an existing flow.yaml file references collections a and b, and the new version of flow.yaml references collections a and c, the merged version will reference collections a, b, and c. ","version":"Next","tagName":"h3"},{"title":"Development directories​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#development-directories","content":" Flow specifications and other files are written to your working directory when you run flowctl draft develop or flowctl catalog pull-specs. They typically include: flow.yaml: The main specification file that imports all other Flow specification files created in a single operation. As part of local development, you may add new specifications that you create as imports. flow_generated/: Directory of generated files, including TypeScript classes and interfaces. See TypeScript code generation. <prefix-name>/: Directory of specifications that you pulled. Its name corresponds to your catalog prefix. Its contents will vary, but it may contain various YAML files and subdirectories. package.json and package-lock.json: Files used by npm to manage dependencies and your Data Flow's associated JavaScript project. You may customize package.json, but its dependencies stanza will be overwritten by thenpmDependenciesof your Flow specification source files, if any exist. When you run commands like flowctl catalog publish or flowctl draft author, you can use the --source-dir flag to push specifications from a directory other than your current working directory, for example, flowctl draft author --source-dir ../AcmeCoNew/marketing. ","version":"Next","tagName":"h2"},{"title":"TypeScript code generation​","type":1,"pageTitle":"flowctl","url":"/pr-preview/pr-1594/concepts/flowctl/#typescript-code-generation","content":" TypeScript files are used in the Flow catalog both as part of the automatic build process, and to define lambdas functions for derivations, which requires your input. As part of the Data Flow build process, Flow translates yourschemasinto equivalent TypeScript types on your behalf. These definitions live within flow_generated/ in your Data Flow's build directory , and are frequently over-written by invocations of flowctl. Files in this subdirectory are human-readable and stable. You may want to commit them as part of a GitOps-managed project, but this isn't required. Whenever you define a derivation that uses a lambda, you must define the lambda in an accompanying TypeScript module, and reference that module in the derivation's definition. To facilitate this, you can generate a stub of the module using flowctl generateand simply write the function bodies.Learn more about this workflow. If a TypeScript module exists, flowctl will never overwrite it, even if you update or expand your specifications such that the required interfaces have changed. ","version":"Next","tagName":"h3"},{"title":"Collections","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/collections/","content":"","keywords":"","version":"Next"},{"title":"Documents​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#documents","content":" Flow processes and stores data in terms of documents: JSON files that consist of multiple key-value pair objects. Collections are comprised of documents; Flow tasks (captures, materializations, and derivations) process data in terms of documents. A Flow document corresponds to different units of data in different types of endpoint systems. For example, it might map to a table row, a pub/sub message, or an API response. The structure of a given collection’s documents is determined by that collection’s schema and the way in which tasks handle documents is determined by the collection key. The size of a document depends on the complexity of the source data. Flow allows documents up to 16 MB in size, but it's rare for documents to approach this limit. An example document for a collection with two fields, name and count is shown below. { "_meta": { "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, "count": 5954, "message": "Hello #5954" } ","version":"Next","tagName":"h2"},{"title":"System Fields and Metadata​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#system-fields-and-metadata","content":" The _meta object is present in all Flow documents, and contains metadata added by Flow. Minimally, every document _meta always has a uuid, which is a globally unique id for each document. Some capture connectors may add additional _meta properties to tie each document to a specific record within the source system. Documents that were captured from cloud storage connectors, for example, will contain /_meta/file and /_meta/offset properties that tell you where the document came from within your cloud storage bucket. _meta/uuid​ The _meta/uuid field is a system-generated globally unique identifier for each document within Estuary Flow. flow_published_at​ The flow_published_at field is a system-generated timestamp within Estuary Flow, derived from the runtime environment. It captures the exact moment a document is published to a collection, offering a reliable proxy for when the document was last modified or inserted. Source: The flow_published_at field is generated by the runtime environment of Estuary Flow.Definition: This field represents the timestamp when a document is captured and subsequently published to a collection. Essentially, it is a projection of the _meta/uuid field, where the UUID contains an encoded timestamp component.Availability: The flow_published_at field is available in every collection, as it is a derived projection from the _meta/uuid field. For a given document identified by a unique key, the flow_published_at field can be used as a proxy for the last time the document was modified. This is particularly useful when performing incremental updates or transformations, such as in a data warehouse environment. When dealing with materializations that are not delta updates: A document in Estuary Flow is any JSON object emitted by a capture connector. The flow_published_at field provides the timestamp for when this JSON object was captured and inserted into the collection.If the collection is reduced with a strategy like lastWriteWins or merge on the capture side, flow_published_at becomes the timestamp for the last event that updated the document. ","version":"Next","tagName":"h3"},{"title":"Viewing collection documents​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#viewing-collection-documents","content":" In many cases, it's not necessary to view your collection data — you're able to materialize it directly to a destination in the correct shape using a connector. However, it can be helpful to view collection documents to confirm the source data was captured as expected, or verify a schema change. In the web application​ Sign into the Flow web application and click the Collections tab. The collections to which you have access are listed. Click the Details drop down to show a sample of collection documents as well as the collection specification. The collection documents are displayed by key. Click the desired key to preview it in its native JSON format. Using the flowctl CLI​ In your authenticated flowctl session, issue the command flowctl collections read --collection <full/collection-name> --uncommitted. For example, flowctl collections read --collection acmeCo/inventory/anvils --uncommitted. Options are available to read a subset of data from collections. For example, --since allows you to specify an approximate start time from which to read data, and--include-partition allows you to read only data from a specified logical partition. Use flowctl collections read --help to see documentation for all options. Beta While in beta, this command currently has the following limitations. They will be removed in a later release: The --uncommitted flag is required. This means that all collection documents are read, regardless of whether they were successfully committed or not. In the future, reads of committed documents will be the default. Only reads of a single partition are supported. If you need to read from a partitioned collection, use --include-partition or --exclude-partition to narrow down to a single partition. The --output flag is not usable for this command. Only JSON data can be read from collections. ","version":"Next","tagName":"h2"},{"title":"Specification​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#specification","content":" Collections are defined in Flow specification files per the following format: # A set of collections to include in the catalog. # Optional, type: object collections: # The unique name of the collection. acmeCo/products/anvils: # The schema of the collection, against which collection documents # are validated. This may be an inline definition or a relative URI # reference. # Required, type: string (relative URI form) or object (inline form) schema: anvils.schema.yaml # The key of the collection, specified as JSON pointers of one or more # locations within collection documents. If multiple fields are given, # they act as a composite key, equivalent to a SQL table PRIMARY KEY # with multiple table columns. # Required, type: array key: [/product/id] # Projections and logical partitions for this collection. # Optional, type: object projections: # Derivation that builds this collection from others through transformations. # See the "Derivations" concept page to learn more. # Optional, type: object derive: ~ ","version":"Next","tagName":"h2"},{"title":"Schemas​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#schemas","content":" Every Flow collection must declare a schema, and will never accept documents that do not validate against the schema. This helps ensure the quality of your data products and the reliability of your derivations and materializations. Schema specifications are flexible: yours could be exactingly strict, extremely permissive, or somewhere in between. For many source types, Flow is able to generate a basic schema during discovery. Schemas may either be declared inline, or provided as a reference to a file. References can also include JSON pointers as a URL fragment to name a specific schema of a larger schema document: InlineFile referenceReference with pointer collections: acmeCo/collection: schema: type: object required: [id] properties: id: string key: [/id] Learn more about schemas ","version":"Next","tagName":"h2"},{"title":"Keys​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#keys","content":" Every Flow collection must declare a key which is used to group its documents. Keys are specified as an array of JSON pointers to document locations. For example: flow.yamlschema.yaml collections: acmeCo/users: schema: schema.yaml key: [/userId] Suppose the following JSON documents are captured into acmeCo/users: {"userId": 1, "name": "Will"} {"userId": 1, "name": "William"} {"userId": 1, "name": "Will"} As its key is [/userId], a materialization of the collection into a database table will reduce to a single row: userId | name 1 | Will If its key were instead [/name], there would be two rows in the table: userId | name 1 | Will 1 | William ","version":"Next","tagName":"h2"},{"title":"Schema restrictions​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#schema-restrictions","content":" Keyed document locations may be of a limited set of allowed types: booleanintegerstring Excluded types are: arraynullobjectFractional number Keyed fields also must always exist in collection documents. Flow performs static inference of the collection schema to verify the existence and types of all keyed document locations, and will report an error if the location could not exist, or could exist with the wrong type. Flow itself doesn't mind if a keyed location has multiple types, so long as they're each of the allowed types: an integer or string for example. Some materialization connectors, however, may impose further type restrictions as required by the endpoint. For example, SQL databases do not support multiple types for a primary key. ","version":"Next","tagName":"h3"},{"title":"Composite Keys​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#composite-keys","content":" A collection may have multiple locations which collectively form a composite key. This can include locations within nested objects and arrays: flow.yamlschema.yaml collections: acmeCo/compound-key: schema: schema.yaml key: [/foo/a, /foo/b, /foo/c/0, /foo/c/1] ","version":"Next","tagName":"h3"},{"title":"Key behaviors​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#key-behaviors","content":" A collection key instructs Flow how documents of a collection are to be reduced, such as while being materialized to an endpoint. Flow also performs opportunistic local reductions over windows of documents to improve its performance and reduce the volumes of data at each processing stage. An important subtlety is that the underlying storage of a collection will potentially retain many documents of a given key. In the acmeCo/users example, each of the "Will" or "William" variants is likely represented in the collection's storage — so long as they didn't arrive so closely together that they were locally combined by Flow. If desired, a derivation could re-key the collection on [/userId, /name] to materialize the various /names seen for a /userId. This property makes keys less lossy than they might otherwise appear, and it is generally good practice to chose a key that reflects how you wish to query a collection, rather than an exhaustive key that's certain to be unique for every document. ","version":"Next","tagName":"h3"},{"title":"Empty keys​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#empty-keys","content":" When a specification is automatically generated, there may not be an unambiguously correct key for all collections. This could occur, for example, when a SQL database doesn't have a primary key defined for some table. In cases like this, the generated specification will contain an empty collection key. However, every collection must have a non-empty key, so you'll need to manually edit the generated specification and specify keys for those collections before publishing to the catalog. ","version":"Next","tagName":"h3"},{"title":"Projections​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#projections","content":" Projections are named locations within a collection document that may be used for logical partitioning or directly exposed to databases into which collections are materialized. Many projections are automatically inferred from the collection schema. The projections stanza can be used to provide additional projections, and to declare logical partitions: collections: acmeCo/products/anvils: schema: anvils.schema.yaml key: [/product/id] # Projections and logical partitions for this collection. # Keys name the unique projection field, and values are its JSON Pointer # location within the document and configure logical partitioning. # Optional, type: object projections: # Short form: define a field "product_id" with document pointer /product/id. product_id: "/product/id" # Long form: define a field "metal" with document pointer /metal_type # which is a logical partition of the collection. metal: location: "/metal_type" partition: true Learn more about projections. ","version":"Next","tagName":"h2"},{"title":"Storage​","type":1,"pageTitle":"Collections","url":"/pr-preview/pr-1594/concepts/collections/#storage","content":" Collections are real-time data lakes. Historical documents of the collection are stored as an organized layout of regular JSON files in your cloud storage bucket. Reads of that history are served by directly reading files from your bucket. Your storage mappingsdetermine how Flow collections are mapped into your cloud storage buckets. Unlike a traditional data lake, however, it's very efficient to read collection documents as they are written. Derivations and materializations that source from a collection are notified of its new documents within milliseconds of their being published. Learn more about journals, which provide storage for collections ","version":"Next","tagName":"h2"},{"title":"Connectors","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/connectors/","content":"","keywords":"","version":"Next"},{"title":"Using connectors​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#using-connectors","content":" Most — if not all — of your Data Flows will use at least one connector. You configure connectors within capture or materialization specifications. When you publish one of these entities, you're also deploying all the connectors it uses. You can interact with connectors using either the Flow web application or the flowctl CLI. ","version":"Next","tagName":"h2"},{"title":"Flow web application​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#flow-web-application","content":" The Flow web application is designed to assist you with connector configuration and deployment. It's a completely no-code experience, but it's compatible with Flow's command line tools, discussed below. When you add a capture or materialization in the Flow web app, choose the desired data system from the Connector drop-down menu. The required fields for the connector appear below the drop-down. When you fill in the fields and click Discover Endpoint, Flow automatically "discovers" the data streams or tables — known as resources — associated with the endpoint system. From there, you can refine the configuration, save, and publish the resulting Flow specification. ","version":"Next","tagName":"h3"},{"title":"GitOps and flowctl​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#gitops-and-flowctl","content":" Connectors are packaged as Open Container (Docker) images, and can be tagged, and pulled usingDocker Hub,GitHub Container registry, or any other public image registry provider. To interface with a connector, the Flow runtime needs to know: The specific image to use, through an image name such as ghcr.io/estuary/source-postgres:dev. Notice that the image name also conveys the specific image registry and version tag to use. Endpoint configuration such as a database address and account, with meaning that is specific to the connector. Resource configuration such as a specific database table to capture, which is also specific to the connector. To integrate a connector into your dataflow, you must define all three components within your Flow specification. The web application is intended to help you generate the Flow specification. From there, you can use flowctl to refine it in your local environment. It's also possible to manually write your Flow specification files, but this isn't the recommended workflow. materializations: acmeCo/postgres-views: endpoint: connector: # 1: Provide the image that implements your endpoint connector. # The `dev` tag uses the most recent version (the web app chooses this tag automatically) image: ghcr.io/estuary/materialize-postgres:dev # 2: Provide endpoint configuration that the connector requires. config: address: localhost:5432 password: password database: postgres user: postgres bindings: - source: acmeCo/products/anvils # 3: Provide resource configuration for the binding between the Flow # collection and the endpoint resource. This connector interfaces # with a SQL database and its resources are database tables. Here, # we provide a table to create and materialize which is bound to the # `acmeCo/products/anvils` source collection. resource: table: anvil_products # Multiple resources can be configured through a single connector. # Bind additional collections to tables as part of this connector instance: - source: acmeCo/products/TNT resource: table: tnt_products - source: acmeCo/customers resource: table: customers Configuration​ Because connectors interface with external systems, each requires a slightly different endpoint configuration. Here you specify information such as a database hostname or account credentials — whatever that specific connector needs to function. If you're working directly with Flow specification files, you have the option of including the configuration inline or storing it in separate files: InlineReferenced file my.flow.yaml materializations: acmeCo/postgres-views: endpoint: connector: image: ghcr.io/estuary/materialize-postgres:dev config: address: localhost:5432 password: password database: postgres user: postgres bindings: [] Storing configuration in separate files serves two important purposes: Re-use of configuration across multiple captures or materializationsThe ability to protect sensitive credentials ","version":"Next","tagName":"h3"},{"title":"Protecting secrets​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#protecting-secrets","content":" Most endpoint systems require credentials of some kind, such as a username or password. Sensitive credentials should be protected while not in use. The only time a credential needs to be directly accessed is when Flow initiates the connector. Flow integrates with Mozilla’s sops tool, which can encrypt and protect credentials. It stores a sops-protected configuration in its encrypted form, and decrypts it only when invoking a connector on the your behalf. sops, short for “Secrets Operations,” is a tool that encrypts the values of a JSON or YAML document against a key management system (KMS) such as Google Cloud Platform KMS, Azure Key Vault, or Hashicorp Vault. Encryption or decryption of a credential with sops is an active process: it requires that the user (or the Flow runtime identity) have a current authorization to the required KMS, and creates a request trace which can be logged and audited. It's also possible to revoke access to the KMS, which immediately and permanently removes access to the protected credential. When you use the Flow web application, Flow automatically adds sops protection to sensitive fields on your behalf. You can also implement sops manually if you are writing a Flow specification locally. The examples below provide a useful reference. Example: Protect a configuration​ Suppose you're given a connector configuration: config.yaml host: my.hostname password: "this is sensitive!" user: my-user You can protect it using a Google KMS key that you own: # Login to Google Cloud and initialize application default credentials used by `sops`. $ gcloud auth application-default login # Use `sops` to re-write the configuration document in place, protecting its values. $ sops --encrypt --in-place --gcp-kms projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name config.yaml sops re-writes the file, wrapping each value in an encrypted envelope and adding a sops metadata section: config.yaml host: ENC[AES256_GCM,data:K/clly65pThTg2U=,iv:1bNmY8wjtjHFBcXLR1KFcsNMGVXRl5LGTdREUZIgcEU=,tag:5GKcguVPihXXDIM7HHuNnA==,type:str] password: ENC[AES256_GCM,data:IDDY+fl0/gAcsH+6tjRdww+G,iv:Ye8st7zJ9wsMRMs6BoAyWlaJeNc9qeNjkkjo6BPp/tE=,tag:EPS9Unkdg4eAFICGujlTfQ==,type:str] user: ENC[AES256_GCM,data:w+F7MMwQhw==,iv:amHhNCJWAJnJaGujZgjhzVzUZAeSchEpUpBau7RVeCg=,tag:62HguhnnSDqJdKdwYnj7mQ==,type:str] sops: # Some items omitted for brevity: gcp_kms: - resource_id: projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name created_at: "2022-01-05T15:49:45Z" enc: CiQAW8BC2GDYWrJTp3ikVGkTI2XaZc6F4p/d/PCBlczCz8BZiUISSQCnySJKIptagFkIl01uiBQp056c lastmodified: "2022-01-05T15:49:45Z" version: 3.7.1 You then use this config.yaml within your Flow specification. The Flow runtime knows that this document is protected by sopswill continue to store it in its protected form, and will attempt a decryption only when invoking a connector on your behalf. If you need to make further changes to your configuration, edit it using sops config.yaml. It's not required to provide the KMS key to use again, as sops finds it within its metadata section. important When deploying catalogs onto the managed Flow runtime, you must grant access to decrypt your GCP KMS key to the Flow runtime service agent, which is: flow-258@helpful-kingdom-273219.iam.gserviceaccount.com Example: Protect portions of a configuration​ Endpoint configurations are typically a mix of sensitive and non-sensitive values. It can be cumbersome when sops protects an entire configuration document as you lose visibility into non-sensitive values, which you might prefer to store as cleartext for ease of use. You can use the encrypted-suffix feature of sops to selectively protect credentials: config.yaml host: my.hostname password_sops: "this is sensitive!" user: my-user Notice that password in this configuration has an added _sops suffix. Next, encrypt only values which have that suffix: $ sops --encrypt --in-place --encrypted-suffix "_sops" --gcp-kms projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name config.yaml sops re-writes the file, wrapping only values having a "_sops" suffix and adding its sops metadata section: config.yaml host: my.hostname password_sops: ENC[AES256_GCM,data:dlfidMrHfDxN//nWQTPCsjoG,iv:DHQ5dXhyOOSKI6ZIzcUM67R6DD/2MSE4LENRgOt6GPY=,tag:FNs2pTlzYlagvz7vP/YcIQ==,type:str] user: my-user sops: # Some items omitted for brevity: encrypted_suffix: _sops gcp_kms: - resource_id: projects/your-project-id/locations/us-central1/keyRings/your-ring/cryptoKeys/your-key-name created_at: "2022-01-05T16:06:36Z" enc: CiQAW8BC2Au779CGdMFUjWPhNleCTAj9rL949sBvPQ6eyAC3EdESSQCnySJKD3eWX8XrtrgHqx327 lastmodified: "2022-01-05T16:06:37Z" version: 3.7.1 You then use this config.yaml within your Flow specification. Flow looks for and understands the encrypted_suffix, and will remove this suffix from configuration keys before passing them to the connector. ","version":"Next","tagName":"h3"},{"title":"Connecting to endpoints on secure networks​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#connecting-to-endpoints-on-secure-networks","content":" In some cases, your source or destination endpoint may be within a secure network, and you may not be able to allow direct access to its port due to your organization's security policy. tip If permitted by your organization, a quicker solution is to allowlist the Estuary IP addresses For help completing this task on different cloud hosting platforms, see the documentation for the connector you're using. SHH tunneling, or port forwarding, provides a means for Flow to access the port indirectly through an SSH server. SSH tunneling is available in Estuary connectors for endpoints that use a network address for connection. To set up and configure the SSH server, see the guide. Then, add the appropriate properties when you define the capture or materialization in the Flow web app, or add the networkTunnel stanza directly to the YAML, as shown below. Sample​ source-postgres-ssh-tunnel.flow.yaml captures: acmeCo/postgres-capture-ssh: endpoint: connector: image: ghcr.io/estuary/source-postgres:dev config: address: 127.0.0.1:5432 database: flow user: flow_user password: secret networkTunnel: sshForwarding: # Location of the remote SSH server that supports tunneling. # Formatted as ssh://user@hostname[:port]. sshEndpoint: ssh://sshUser@198.21.98.1:22 # Private key to connect to the SSH server, formatted as multiline plaintext. # Use the YAML literal block style with the indentation indicator. # See https://yaml-multiline.info/ for details. privateKey: |2 -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCJO7G6R+kv2MMS8Suw21sk2twHg8Vog0fjimEWJEwyAfFM/Toi EJ6r5RTaSvN++/+MPWUll7sUdOOBZr6ErLKLHEt7uXxusAzOjMxFKZpEARMcjwHY v/tN1A2OYU0qay1DOwknEE0i+/Bvf8lMS7VDjHmwRaBtRed/+iAQHf128QIDAQAB AoGAGoOUBP+byAjDN8esv1DCPU6jsDf/Tf//RbEYrOR6bDb/3fYW4zn+zgtGih5t CR268+dwwWCdXohu5DNrn8qV/Awk7hWp18mlcNyO0skT84zvippe+juQMK4hDQNi ywp8mDvKQwpOuzw6wNEitcGDuACx5U/1JEGGmuIRGx2ST5kCQQDsstfWDcYqbdhr 5KemOPpu80OtBYzlgpN0iVP/6XW1e5FCRp2ofQKZYXVwu5txKIakjYRruUiiZTza QeXRPbp3AkEAlGx6wMe1l9UtAAlkgCFYbuxM+eRD4Gg5qLYFpKNsoINXTnlfDry5 +1NkuyiQDjzOSPiLZ4Abpf+a+myjOuNL1wJBAOwkdM6aCVT1J9BkW5mrCLY+PgtV GT80KTY/d6091fBMKhxL5SheJ4SsRYVFtguL2eA7S5xJSpyxkadRzR0Wj3sCQAvA bxO2fE1SRqbbF4cBnOPjd9DNXwZ0miQejWHUwrQO0inXeExNaxhYKQCcnJNUAy1J 6JfAT/AbxeSQF3iBKK8CQAt5r/LLEM1/8ekGOvBh8MAQpWBW771QzHUN84SiUd/q xR9mfItngPwYJ9d/pTO7u9ZUPHEoat8Ave4waB08DsI= -----END RSA PRIVATE KEY----- bindings: [] ","version":"Next","tagName":"h3"},{"title":"Why an open connector architecture?​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#why-an-open-connector-architecture","content":" Historically, data platforms have directly implemented integrations to external systems with which they interact. Today, there are simply so many systems and APIs that companies use, that it’s not feasible for a company to provide all possible integrations. Users are forced to wait indefinitely while the platform works through their prioritized integration list. An open connector architecture removes Estuary — or any company — as a bottleneck in the development of integrations. Estuary contributes open-source connectors to the ecosystem, and in turn is able to leverage connectors implemented by others. Users are empowered to write their own connectors for esoteric systems not already covered by the ecosystem. Furthermore, implementing a Docker-based community specification brings other important qualities to Estuary connectors: Cross-platform interoperability between Flow, Airbyte, and any other platform that supports the protocolThe abilities to write connectors in any language and run them on any machineBuilt-in solutions for version management (through image tags) and distributionThe ability to integrate connectors from different sources at will, without the centralized control of a single company, thanks to container image registries info In order to be reflected in the Flow web app and used on the managed Flow platform, connectors must be reviewed and added by the Estuary team. Have a connector you'd like to add?Contact us. ","version":"Next","tagName":"h2"},{"title":"Available connectors​","type":1,"pageTitle":"Connectors","url":"/pr-preview/pr-1594/concepts/connectors/#available-connectors","content":" Learn about available connectors in the reference section ","version":"Next","tagName":"h2"},{"title":"Imports","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/import/","content":"","keywords":"","version":"Next"},{"title":"Specification​","type":1,"pageTitle":"Imports","url":"/pr-preview/pr-1594/concepts/import/#specification","content":" The import section is structured as a list of partial or absolute URIs, which Flow always evaluates relative to the base directory of the current source file. For example, these are possible imports within a collection: # Suppose we're in file "/path/dir/flow.yaml" import: - sub/directory/flow.yaml # Resolves to "file:///path/dir/sub/directory/flow.yaml". - ../sibling/directory/flow.yaml # Resolves to "file:///path/sibling/directory/flow.yaml". - https://example/path/flow.yaml # Uses the absolute url. The import rule is flexible; a collection doesn’t have to do anything special to be imported by another, and flowctl can even directly build remote sources: # Test an example from a GitHub repository. $ flowctl draft test --source https://raw.githubusercontent.com/estuary/flow-template/main/word-counts.flow.yaml ","version":"Next","tagName":"h2"},{"title":"Fetch behavior​","type":1,"pageTitle":"Imports","url":"/pr-preview/pr-1594/concepts/import/#fetch-behavior","content":" Flow resolves, fetches, and validates all imports in your local environment during the catalog build process, and then includes their fetched contents within the published catalog on the Estuary servers. The resulting catalog entities are thus self-contained snapshots of all resourcesas they were at the time of publication. This means it's both safe and recommended to directly reference an authoritative source of a resource, such as a third-party JSON schema, as well as resources within your private network. It will be fetched and verified locally at build time, and thereafter that fetched version will be used for execution, regardless of whether the authority URL itself later changes or errors. ","version":"Next","tagName":"h2"},{"title":"Import types​","type":1,"pageTitle":"Imports","url":"/pr-preview/pr-1594/concepts/import/#import-types","content":" Almost always, the import stanza is used to import other Flow specification files. This is the default when given a string path: import: - path/to/source/catalog.flow.yaml A long-form variant also accepts a content type of the imported resource: import: - url: path/to/source/catalog.flow.yaml contentType: CATALOG Other permitted content types include JSON_SCHEMA, but these are not typically used and are needed only for advanced use cases. ","version":"Next","tagName":"h2"},{"title":"JSON Schema $ref​","type":1,"pageTitle":"Imports","url":"/pr-preview/pr-1594/concepts/import/#json-schema-ref","content":" Certain catalog entities, like collections, commonly reference JSON schemas. It's not necessary to explicitly add these to the import section; they are automatically resolved and treated as an import. You can think of this as an analog to the JSON Schema $ref keyword, which is used to reference a schema that may be contained in another file. The one exception is schemas that use the $id keyword at their root to define an alternative canonical URL. In this case, the schema must be referenced through its canonical URL, and then explicitly added to the import section with JSON_SCHEMA content type. ","version":"Next","tagName":"h2"},{"title":"Importing derivation resources​","type":1,"pageTitle":"Imports","url":"/pr-preview/pr-1594/concepts/import/#importing-derivation-resources","content":" In many cases, derivations in your catalog will need to import resources. Usually, these are TypeScript modules that define the lambda functions of a transformation, and, in certain cases, the NPM dependencies of that TypeScript module. These imports are specified in the derivation specification, not in the import section of the specification file. For more information, see Derivation specification and creating TypeScript modules. ","version":"Next","tagName":"h2"},{"title":"Import paths​","type":1,"pageTitle":"Imports","url":"/pr-preview/pr-1594/concepts/import/#import-paths","content":" If a catalog source file foo.flow.yaml references a collection in bar.flow.yaml, for example as a target of a capture, there must be an import path where either foo.flow.yamlimports bar.flow.yaml or vice versa. When you omit the import section, Flow chooses an import path for you. When you explicitly include the import section, you have more control over the import path. Import paths can be direct: graph LR; foo.flow.yaml-->bar.flow.yaml; Or they can be indirect: graph LR; bar.flow.yaml-->other.flow.yaml; other.flow.yaml-->foo.flow.yaml; The sources must still have an import path even if referenced from a common parent. The following would not work: graph LR; parent.flow.yaml-->foo.flow.yaml; parent.flow.yaml-->bar.flow.yaml; These rules make your catalog sources more self-contained and less brittle to refactoring and reorganization. Consider what might otherwise happen if foo.flow.yamlwere imported in another project without bar.flow.yaml. ","version":"Next","tagName":"h2"},{"title":"Derivations","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/derivations/","content":"","keywords":"","version":"Next"},{"title":"Specification​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#specification","content":" A derivation is specified as a regular collectionwith an additional derive stanza: collections: # The unique name of the derivation. acmeCo/my/derivation: schema: my-schema.yaml key: [/key] # Presence of a `derive` stanza makes this collection a derivation. # Type: object derive: # Connector which this derivation uses. # One of `typescript` or `sqlite`. using: # Derivation is using the SQLite connector. # Optional, type: object sqlite: # SQL migrations to apply as inline SQL or file references. # If a referenced file does not exist # a stub can be generated using `flowctl generate`. # Optional, type: array of strings migrations: - CREATE TABLE foobar (id INTEGER PRIMARY KEY NOT NULL); - ../path/to/other/migration.sql # Derivation is using the TypeScript connector. # Optional, type: object typescript: # TypeScript module implementing this derivation, # as inline TypeScript or a relative file reference. # If a referenced file does not exist # a stub can be generated using `flowctl generate`. module: acmeModule.ts # The array of transformations that build this derived collection. transform: # Unique name of the transformation, containing only Unicode # Letters, Numbers, `-`, or `_` (no spaces or other punctuation). - name: myTransformName # Source collection read by this transformation. # Required, type: object or string. source: # Name of the collection to be read. # Required. name: acmeCo/my/source/collection # Partition selector of the source collection. # Optional. Default is to read all partitions. partitions: {} # Lower bound date-time for documents which should be processed. # Source collection documents published before this date-time are filtered. # `notBefore` is *only* a filter. Updating its value will not cause Flow # to re-process documents that have already been read. # Optional. Default is to process all documents. notBefore: 2023-01-23T01:00:00Z # Upper bound date-time for documents which should be processed. # Source collection documents published after this date-time are filtered. # Like `notBefore`, `notAfter` is *only* a filter. Updating its value will # not cause Flow to re-process documents that have already been read. # Optional. Default is to process all documents. notAfter: 2023-01-23T02:00:00Z # Lambda of this transform, with a meaning which depends # on the derivation connector: # * SQLite derivation lambdas are blocks of SQL code. # * TypeScript does not use `lambda`, as implementations # are provided by the derivation's TypeScript module. # Lambdas can be either inline or a relative file reference. lambda: SELECT $foo, $bar; # Delay applied to sourced documents before being processed # by this transformation. # Default: No delay, pattern: ^\\\\d+(s|m|h)$ readDelay: "48h" # Key by which source documents are shuffled to task shards. # Optional, type: object. # If not set, the source collection key is used. shuffle: # Composite key of JSON pointers which are extracted from # source documents. key: [/shuffle/key/one, /shuffle/key/two] # Priority applied to documents of this transformation # relative to other transformations of the derivation. # Default: 0, integer >= 0 priority: 0 ","version":"Next","tagName":"h2"},{"title":"Supported Languages​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#supported-languages","content":" As with captures and materializations, Flow derivations are built around a plug-able connectors architecture. Derivation connectors encapsulate the details of how documents are transformed, and integrate with Flow's runtime through a common protocol. At present, Flow supports transformations in SQL using SQLite, and TypeScript. ","version":"Next","tagName":"h2"},{"title":"SQLite​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#sqlite","content":" Flow's SQLite connector lets you write plain SQL which is evaluated with each source collection document: derive: using: sqlite: {} transforms: - name: fromOrders source: acmeCo/orders shuffle: any lambda: SELECT $customer, DATE($timestamp) AS date, PRINTF('$%.2f', $item_price + $sales_tax) AS cost; Given an input document: { "customer": "Wile E. Coyote", "timestamp": "2023-04-17T16:45:31Z", "item_price": 11.5, "sales_tax": 0.8 } The derivation will produce an output document like: { "customer": "Wile E. Coyote", "date": "2023-04-17", "cost": "$12.30" } SQLite derivations run within the context of a persistent, managed SQLite database. Most anything you can do within SQLite, you can do within a SQLite derivation. ","version":"Next","tagName":"h2"},{"title":"SQL Lambdas​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#sql-lambdas","content":" Lambdas are blocks of one or more SQL statements. They can be defined inline within a Flow specification, or they can be provided as a relative file reference to a file of SQL. Your SQL lambda code can include any number of statements, and your statements are evaluated in the context of your applied database migrations. Use regular INSERT, UPDATE, and DELETE statements in your SQL blocks to manipulate your internal tables as required. Any rows which are returned by SQL statements, such as SELECT and also variations like INSERT ... RETURNING, are mapped into documents that are published into your derived collection. Published documents must conform to your collection schema or your derivation task will stop due to the schema violation. tip The SQLite connector wraps your lambdas in an enclosing transaction. Do not include BEGIN or COMMIT statements in your lambdas. You may use a SAVEPOINT or ROLLBACK TO. ","version":"Next","tagName":"h3"},{"title":"Document Mapping​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#document-mapping","content":" In most cases, each named output column of your query becomes a top-level property of its corresponding document. When you directly select a $parameter its corresponding field name is used. For example, a projection with field name my-field would be queried asSELECT $my_field; and map into a document like {"my-field":"value"}. A named column such as SELECT $x * 100 AS foo;, maps to a property using the provided name: {"foo": 200}. Your selected columns may included nested JSON documents, such as SELECT 'hello' AS greeting, JSON_ARRAY(1, 'two', 3) AS items;. The connector looks for SQLite TEXT values which can be parsed into JSON arrays or objects and embeds them into the mapped document:{"greeting": "hello", "items": [1, "two", 3]}. If parsing fails, the raw string is used instead. As a special case if your query selects a single column having a name that begins with json or JSON, as is common when working with SQLite's JSON functions, then that column will become the output document. For example SELECT JSON_OBJECT('a', 1, 'b', JSON('true')); maps into document {"a": 1, "b": true}. This can be used to build documents with dynamic top-level properties. ","version":"Next","tagName":"h3"},{"title":"Parameters​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#parameters","content":" Your SQL lambda will execute with every source document of the collection it transforms. To access locations within the document, you utilize $parameter placeholders in your SQL code, which bind to projections of the source document. You can use both your defined projections as well as projections which are statically inferred from your source collection's schema. You can access projected fields that are top-level as well as those which are nested within a source document. Consider the following schematized document: {"top-level": true, "object": {"foo": 42}, "arr": ["bar"]} In your SQL code, you can use parameters like $top_level, $object$foo, or $arr$0. If you're unsure of what parameter to use for a given field, try typing something approximate and Flow will suggest the appropriate $parameter. ","version":"Next","tagName":"h3"},{"title":"Migrations​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#migrations","content":" The SQLite connector offers a managed, persistent SQLite database that can accommodate any number of tables, indices, views, triggers, and other schema, as defined by your database migrations. To add a migration, simply append it to the migrations array, either as a block of inline SQL statements or as a relative path to a file of SQL statements: derive: using: sqlite: migrations: - CREATE TABLE foo (thing INTEGER NOT NULL); CREATE INDEX idx_foo_thing foo (thing); - ../path/to/another/migration.sql - ALTER TABLE foo ADD COLUMN other_thing TEXT NOT NULL; - https://example.com/yet/another/migration.sql caution You cannot change an existing migration once it has been published. Instead, add a new migration which applies your desired schema. The tables and other schema you create through database migrations are the internal state of your derivation. They don't directly cause any documents to be published into your derived collection, but changes made to tables in one SQL lambda execution are immediately visible to others. Changes are also durable and transactional: a Flow derivation transaction commits new documents to the derived collection in lockstep with committing changes made to your task tables. Flow is responsible for the persistence and replication of your SQLite database, and the SQLite connector tracks and will apply your migrations as needed. ","version":"Next","tagName":"h3"},{"title":"Performance​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#performance","content":" Your observed performance will of course depend on the specifics of your use case, including the size of your task states and the complexity of your source documents and transformations. Generally speaking, SQLite is very performant and Flow's SQLite connector strives to drive it as efficiently as possible. Real-world use cases are observed to process many tens of thousands of documents per second on a single core. Flow can also scale your task without downtime by creating point-in-time clones of the database that subdivide the overall workload and storage of the task. Once created, these subdivisions process in parallel across multiple physical machines to enhance performance. ","version":"Next","tagName":"h3"},{"title":"TypeScript​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#typescript","content":" Flow's TypeScript derivation connector transforms your source documents by executing methods of a TypeScript class which you implement. TypeScript derivations are executed using Denoand let you take advantage of the broad ecosystem of available third-party JavaScript and TypeScript libraries, as well as native code compiled to WASM. TypeScript derivations are strongly typed: Flow maps the JSON schemas of your source and output collections into corresponding TypeScript types, which are type-checked as you develop and test your derivation. This helps catch a wide variety of potential bugs and avoid accidental violations of your collection data contracts. ","version":"Next","tagName":"h2"},{"title":"Modules​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#modules","content":" The bulk of a TypeScript derivation lives in its associated module, which is a TypeScript source file that exports the class that implements your derivation. Each derivation also has an accompanying, generated interfaces module. Interface modules are managed by Flow and are purely advisory: they're generated to improve your development experience, but any changes you make are ignored. The flowctl generate --source path/to/my/derivation.flow.yaml CLI command will generate interface modules under paths likeflow_generated/typescript/acmeCo/my-derivation.ts, under the top-level directory under --source having a flow.yaml or flow.json file. It will also generate a deno.json file in your top-level directory, which is designed to work with developer tooling likeVSCode's Deno extension. See the Current Account Balances tutorial for a concrete example of modules. ","version":"Next","tagName":"h3"},{"title":"State​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#state","content":" The abstract IDerivation class generated within the interfaces module includes additional, experimental methods which can be used for persisting and recovering internal state of the connector. Consult the generated implementation and feel free to reach out to support if you'd like more information on building stateful TypeScript derivations. ","version":"Next","tagName":"h3"},{"title":"Transformations​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#transformations","content":" A transformation binds a source collection to a derivation, causing its documents to be read and processed by the derivation connector. Read source documents are first shuffled on a shuffle keyto co-locate the processing of documents that have equal shuffle keys. The transformation then processes documents by invoking lambdas: user-defined functions that accept documents as arguments, return documents in response, and potentially update internal task state. A derivation may have many transformations, and each transformation has a long-lived and stable name. Each transformation independently reads documents from its source collection and tracks its own read progress. More than one transformation can read from the same source collection, and transformations may also source from their own derivation, enabling cyclic data-flows and graph algorithms. Transformations may be added to or removed from a derivation at any time. This makes it possible to, for example, add a new collection into an existing multi-way join, or gracefully migrate to a new source collection without incurring downtime. However, renaming a running transformation is not possible. If attempted, the old transformation is dropped and a new transformation under the new name is created, which begins reading its source collection all over again. graph LR; d[Derivation]; t[Transformation]; s[Internal State]; l[Lambda]; c[Sourced Collection]; o[Derived Collection]; d-- has many -->t; d-- has one -->s; d-- has one -->o; c-- reads from -->t; t-- invokes -->l; l-- updates -->s; s-- queries -->l; l-- publishes to -->o; ","version":"Next","tagName":"h2"},{"title":"Sources​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#sources","content":" The source of a transformation is a collection. As documents are published into the source collection, they are continuously read and processed by the transformation. A partition selector may be provided to process only a subset of the source collection's logical partitions. Selectors are efficient: only partitions that match the selector are read, and Flow can cheaply skip over partitions that don't. Derivations re-validate their source documents against the source collection's schema as they are read. This is because collection schemas may evolve over time, and could have inadvertently become incompatible with historical documents of the source collection. Upon a schema error, the derivation will pause and give you an opportunity to correct the problem. ","version":"Next","tagName":"h3"},{"title":"Shuffles​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#shuffles","content":" As each source document is read, it's shuffled — or equivalently, mapped — on an extracted key. If you're familiar with data shuffles in tools like MapReduce, Apache Spark, or Flink, the concept is very similar. Flow catalog tasks scale out into multiple shards, each running in parallel on different physical machines, where each shard processes a subset of source documents. Shuffles let Flow identify the shard that should process a particular source document, in order to co-locate that processing with other documents it may need to know about. For example, transforms of theApproving Transfers exampleshuffle on either /sender or /recipient in order to process documents that debit or credit accounts on the specific shard that is uniquely responsible for maintaining the balance of a given account. graph LR; subgraph s1 [Source Partitions] p1>acmeBank/transfers/part-1]; p2>acmeBank/transfers/part-2]; end subgraph s2 [Derivation Task Shards] t1([derivation/shard-1]); t2([derivation/shard-2]); end p1-- sender: alice -->t1; p1-- recipient: bob -->t2; p2-- recipient: alice -->t1; p2-- sender: bob -->t2; Flow offers three modes for configuring document shuffles: key, any, and lambda. shuffle: key​ Shuffle keys are defined as an array of JSON pointers to locations that should be extracted from your source documents. This array forms the composite key over which your documents are shuffled: transforms: - name: fromOrders source: acmeCo/orders shuffle: key: [/item/product_id, /customer_id] # Flow guarantees that the same shard will process the user's lambda # for all instances of a specific (product ID, customer ID) tuple. lambda: ... If a derivation has more than one transformation, the shuffle keys of all transformations must align with one another in terms of the extracted key types (string vs integer) as well as the number of components in a composite key. For example, one transformation couldn't shuffle transfers on [/id]while another shuffles on [/sender], because sender is a string andid an integer. Similarly mixing a shuffle of [/sender] alongside [/sender, /recipient]is prohibited because the keys have different numbers of components. shuffle: any​ If your lambda doesn't rely on any task state then it may not matter which task shard processes a given source document. In these instances you can use shuffle: any, which allows source documents to be processed by any available task shard. This is common for transformation lambdas which perform basic filtering or mapping of source documents and which don't require any joined task state. transforms: - name: fromOrders source: acmeCo/orders shuffle: any # The user's lambda is a pure function and can be evaluated by any available shard. lambda: SELECT $customer_id, $item_price WHERE $item_price > 100; shuffle: lambda​ Warning Computed shuffles are in active development and are not yet functional. Your source documents may not always contain an appropriate value to shuffle upon. For instance, you might want to shuffle on product ID and order date, but your source documents contain only an order timestamp field. You can use shuffle: lambda to define a function that maps your source document into the appropriate shuffle key: transforms: - name: fromOrders source: acmeCo/orders shuffle: lambda: SELECT $product_id, DATE($order_timestamp); # Flow guarantees that the same shard will process the user's lambda # for all instances of a specific (product ID, date) tuple. lambda: ... Your shuffle lambda must return exactly one row, and its columns and types must align with the other shuffles of your derivation transformations. Flow must know the types of your composite shuffle key. In most cases it will infer these types from the shuffle: key of another transformation. If you have no shuffle: key transformations, Flow will ask that you explicitly tell it your shuffle types: derive: using: sqlite: {} shuffleKeyTypes: [integer, string] transforms: - name: fromOrders source: acmeCo/orders shuffle: lambda: SELECT $product_id, DATE($order_timestamp); lambda: ... ","version":"Next","tagName":"h3"},{"title":"Lambdas​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#lambdas","content":" Lambdas are user-defined functions that are invoked by transformations. They accept documents as arguments and return transformed documents in response. Lambdas can update internal task state, publish documents into the derived collection, or both. Lambdas are "serverless": Flow manages the execution and scaling of your transformation lambdas on your behalf. ","version":"Next","tagName":"h3"},{"title":"Processing order​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#processing-order","content":" Transformations may simultaneously read from many source collections, or even read from the same source collection multiple times. Roughly speaking, the derivation will globally process transformations and their source documents in the time-based order in which the source documents were originally written to their source collections. This means that a derivation started a month ago and a new copy of the derivation started today, will process documents in the same order and arrive at the same result. Derivations are repeatable. More precisely, processing order is stable for each individual shuffle key, though different shuffle keys may process in different orders if more than one task shard is used. Processing order can be attenuated through a read delayor differentiated read priority. ","version":"Next","tagName":"h3"},{"title":"Read delay​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#read-delay","content":" A transformation can define a read delay, which will hold back the processing of its source documents until the time delay condition is met. For example, a read delay of 15 minutes would mean that a source document cannot be processed until it was published at least 15 minutes ago. If the derivation is working through a historical backlog of source documents, than a delayed transformation will respect its ordering delay relative to the publishing times of other historical documents also being read. Event-driven workflows are a great fit for reacting to events as they occur, but aren’t terribly good at taking action when something hasn’t happened: A user adds a product to their cart, but then doesn’t complete a purchase.A temperature sensor stops producing its expected, periodic measurements. A common pattern for tackling these workflows in Flow is to read a source collection without a delay and update an internal state. Then, read a collection with a read delay and determine whether the desired action has happened or not. For example, source from a collection of sensor readings and index the last timestamp of each sensor. Then, source the same collection again with a read delay: if the register timestamp isn't more recent than the delayed source reading, the sensor failed to produce a measurement. Flow read delays are very efficient and scale better than managing very large numbers of fine-grain timers. See Grouped Windows of Transfers for an example using a read delayLearn more from the Citi Bike "idle bikes" example ","version":"Next","tagName":"h3"},{"title":"Read priority​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#read-priority","content":" Sometimes it's necessary for all documents of a source collection to be processed by a transformation before any documents of some other source collection are processed, regardless of their relative publishing time. For example, a collection may have corrections that should be applied before the historical data of another collection is re-processed. Transformation priorities allow you to express the relative processing priority of a derivation's various transformations. When priorities are not equal, all available source documents of a higher-priority transformation are processed before any source documents of a lower-priority transformation. ","version":"Next","tagName":"h3"},{"title":"Internal State​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#internal-state","content":" Derivation tasks often require an internal state, perhaps to hold a partial aggregation or join result. Internal state is not a direct part of the output of a derivation. Instead, transformation lambdas query and update internal state as they process source documents and return derived documents. For SQLite derivations, the entire SQLite database is the internal state of the task. TypeScript derivations can use in-memory states with a recovery and checkpoint mechanism. Estuary intends to offer an additional mechanisms for automatic internal state snapshot and recovery in the future. The exact nature of internal task states vary, but under the hood they're backed by a replicated embedded RocksDB instance which is co-located with the task shard execution contexts that Flow manages. As contexts are assigned and re-assigned, their state databases travel with them. If a task shard needs to be scaled out, Flow is able to perform an online split, which cheaply clones its state database into two new databases — and paired shards — which are re-assigned to other machines. ","version":"Next","tagName":"h2"},{"title":"Where to accumulate?​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#where-to-accumulate","content":" Derivation collection schemas may havereduction annotations, and lambdas can be combined with reductions in interesting ways. You may be familiar with map and reduce functions built into languages likePython,JavaScript, and many others or have used tools like MapReduce or Spark. In functional terms, lambdas you write within Flow are "mappers," and reductions are always done by the Flow runtime using your schema annotations. This means that, when you implement a derivation, you get to choose where accumulation will happen: Your lambdas can update and query aggregates stored in internal task state.Approving Transfers is an example that maintains account balances in a SQLite table.Or, your lambdas can compute changes of an aggregate, which are then reduced by Flow using reduction annotations.Current Account Balances is an example that combines a lambda with a reduce annotation. These two approaches can produce equivalent results, but they do so in very different ways. ","version":"Next","tagName":"h2"},{"title":"Accumulate in Internal Task State​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#accumulate-in-internal-task-state","content":" You can accumulate using the internal state of your derivation: for instance, by using an internal table within your SQLite derivation. You then write lambdas which update that state, or query it to publish derived documents. For example, consider a collection that’s summing a value: Time\tState\tLambdas\tDerived DocumentT0\t0\tUPDATE val = val + 5; SELECT val;\t5 T1\t5\tUPDATE val = val - 1; SELECT val;\t4 T2\t4\tUPDATE val = val + 2; SELECT val;\t6 T3\t6 Using a derivation's internal state is a great solution if you expect to materialize the derived collection into a non-transactional store. That's because its documents are complete statements of the current answer, and can be correctly applied to systems that support only at-least-once semantics. They’re also well-suited for materializations into endpoints that aren't stateful, such as Pub/Sub systems or Webhooks. ","version":"Next","tagName":"h3"},{"title":"Accumulate in a Database​","type":1,"pageTitle":"Derivations","url":"/pr-preview/pr-1594/concepts/derivations/#accumulate-in-a-database","content":" To accumulate in your materialization endpoint, such as a database, you define a derivation with a reducible schema and implement lambdas which publish the changes to a current answer. The Flow runtime then uses your reduction annotations to combine the documents published into your derived collection. Later, when the collection is materialized, your reduction annotations are applied again to reduce each collection document into a final, fully-reduced value for each collection key that's kept up to date in the materialized table. A key insight is that the database is the only stateful system in this scenario. The derivation itself is stateless, with lambdas that are pure functions, which is typically extremely performant. Returning to our summing example: Time\tDB\tLambdas\tDerived DocumentT0\t0\tSELECT 5;\t5 T1\t5\tSELECT -1;\t-1 T2\t4\tSELECT 2;\t2 T3\t6 This works especially well when materializing into a transactional database. Flow couples its processing transactions with corresponding database transactions, ensuring end-to-end “exactly once” semantics. When materializing into a non-transactional store, Flow is only able to provide weaker “at least once” semantics; it’s possible that a document may be combined into a database value more than once. Whether that’s a concern depends a bit on the task at hand. Some reductions like merge can be applied repeatedly without changing the result, while in other use cases approximations are acceptable. For the summing example above, "at-least-once" semantics could give an incorrect result. Learn more in the derivation pattern examples of Flow's repository ","version":"Next","tagName":"h3"},{"title":"Storage mappings","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/storage-mappings/","content":"","keywords":"","version":"Next"},{"title":"Recovery logs​","type":1,"pageTitle":"Storage mappings","url":"/pr-preview/pr-1594/concepts/storage-mappings/#recovery-logs","content":" In addition to collection data, Flow uses your storage mapping to temporarily store recovery logs. Flow tasks — captures, derivations, and materializations — use recovery logs to durably store their processing context as a backup. Recovery logs are an opaque binary log, but may contain user data. The recovery logs of a task are always prefixed by recovery/, so a task named acmeCo/produce-TNT would have a recovery log called recovery/acmeCo/roduce-TNT Flow prunes data from recovery logs once it is no longer required. warning Deleting data from recovery logs while it is still in use can cause Flow processing tasks to fail permanently. ","version":"Next","tagName":"h2"},{"title":"Materializations","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/materialization/","content":"","keywords":"","version":"Next"},{"title":"Discovery​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#discovery","content":" Materializations use real-time connectors to connect to many endpoint types. When you use a materialization connector in the Flow web app, flow helps you configure it through the discovery workflow. To begin discovery, you tell Flow the connector you'd like to use, basic information about the endpoint, and the collection(s) you'd like to materialize there. Flow maps the collection(s) to one or more resources — tables, data streams, or the equivalent — through one or more bindings. You may then modify the generated configuration as needed before publishing the materialization. ","version":"Next","tagName":"h2"},{"title":"Specification​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#specification","content":" Materializations are defined in Flow specification files per the following format: # A set of materializations to include in the catalog. # Optional, type: object materializations: # The name of the materialization. acmeCo/example/database-views: # Endpoint defines how to connect to the destination of the materialization. # Required, type: object endpoint: # This endpoint uses a connector provided as a Docker image. connector: # Docker image that implements the materialization connector. image: ghcr.io/estuary/materialize-postgres:dev # File that provides the connector's required configuration. # Configuration may also be presented inline. config: path/to/connector-config.yaml # Bindings define how one or more collections map to materialized endpoint resources. # A single materialization may include many collections and endpoint resources, # each defined as a separate binding. # Required, type: object bindings: - # Source collection read by this binding. # Required, type: object or string source: # Name of the collection to be read. # Required. name: acmeCo/example/collection # Lower bound date-time for documents which should be processed. # Source collection documents published before this date-time are filtered. # `notBefore` is *only* a filter. Updating its value will not cause Flow # to re-process documents that have already been read. # Optional. Default is to process all documents. notBefore: 2023-01-23T01:00:00Z # Upper bound date-time for documents which should be processed. # Source collection documents published after this date-time are filtered. # Like `notBefore`, `notAfter` is *only* a filter. Updating its value will # not cause Flow to re-process documents that have already been read. # Optional. Default is to process all documents. notAfter: 2023-01-23T02:00:00Z # The resource is additional configuration required by the endpoint # connector to identify and materialize a specific endpoint resource. # The structure and meaning of this configuration is defined by # the specific connector. # Required, type: object resource: # The materialize-postgres connector expects a `table` key # which names a table to materialize into. table: example_table # Priority applied to documents processed by this binding. # When all bindings are of equal priority, documents are processed # in order of their associated publishing time. # # However, when one binding has a higher priority than others, # then *all* ready documents are processed through the binding # before *any* documents of other bindings are processed. # # Optional. Default: 0, integer >= 0 priority: 0 # A sourceCapture allows bindings to be managed automatically based on the # bindings of the given capture. As new bindings are added to the capture, # they will automatically be added to the materialization. This property # is optional. sourceCapture: acmeCo/example/a-capture ","version":"Next","tagName":"h2"},{"title":"How continuous materialization works​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#how-continuous-materialization-works","content":" Flow materializations are continuous materialized views. They maintain a representation of the collection within the endpoint system that is updated in near real-time. It's indexed on thecollection key. As the materialization runs, it ensures that all collection documents and their accumulated reductions are reflected in this managed endpoint resource. When you first publish a materialization, Flow back-fills the endpoint resource with the historical documents of the collection. Once caught up, Flow applies new collection documents using incremental and low-latency updates. As collection documents arrive, Flow: Reads previously materialized documents from the endpoint for the relevant keysReduces new documents into these read documentsWrites updated documents back into the endpoint resource, indexed by their keys For example, consider a collection and its materialization: collections: acmeCo/colors: key: [/color] schema: type: object required: [color, total] reduce: {strategy: merge} properties: color: {enum: [red, blue, purple]} total: type: integer reduce: {strategy: sum} materializations: acmeCo/example/database-views: endpoint: ... bindings: - source: acmeCo/colors resource: { table: colors } Suppose documents are periodically added to the collection: {"color": "red", "total": 1} {"color": "blue", "total": 2} {"color": "blue", "total": 3} Its materialization into a database table will have a single row for each unique color. As documents arrive in the collection, the row total is updated within the materialized table so that it reflects the overall count: Flow does not keep separate internal copies of collection or reduction states, as some other systems do. The endpoint resource is the one and only place where state "lives" within a materialization. This makes materializations very efficient and scalable to operate. They are able to maintain very large tables stored in highly scaled storage systems like OLAP data warehouses. ","version":"Next","tagName":"h2"},{"title":"Projected fields​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#projected-fields","content":" Many endpoint systems are document-oriented and can directly work with collections of JSON documents. Others are table-oriented and require an up-front declaration of columns and types to be most useful, such as a SQL CREATE TABLE definition. Flow uses collection projections to relate locations within a hierarchical JSON document to equivalent named fields. A materialization can in turn select a subset of available projected fields where, for example, each field becomes a column in a SQL table created by the connector. It would be tedious to explicitly list projections for every materialization, though you certainly can if desired. Instead, Flow and the materialization connector negotiate a recommended field selection on your behalf, which can be fine-tuned. For example, a SQL database connector will typically require that fields comprising the primary key be included, and will recommend that scalar values be included, but will by default exclude document locations that don't have native SQL representations, such as locations which can have multiple JSON types or are arrays or maps. materializations: acmeCo/example/database-views: endpoint: ... bindings: - source: acmeCo/example/collection resource: { table: example_table } # Select (or exclude) projections of the collection for materialization as fields. # If not provided, the recommend fields of the endpoint connector are used. # Optional, type: object fields: # Whether to include fields that are recommended by the endpoint connector. # If false, then fields can still be added using `include`. # Required, type: boolean recommended: true # Fields to exclude. This is useful for deselecting a subset of recommended fields. # Default: [], type: array exclude: [myField, otherField] # Fields to include. This can supplement recommended fields, or can # designate explicit fields to use if recommended fields are disabled. # # Values of this map are used to customize connector behavior on a per-field basis. # They are passed directly to the connector and are not interpreted by Flow. # Consult your connector's documentation for details of what customizations are available. # This is an advanced feature and is not commonly used. # # default: {}, type: object include: {goodField: {}, greatField: {}} ","version":"Next","tagName":"h2"},{"title":"Partition selectors​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#partition-selectors","content":" Partition selectors let you materialize only a subset of a collection that haslogical partitions. For example, you might have a large collection that is logically partitioned on each of your customers: collections: acmeCo/anvil/orders: key: [/id] schema: orders.schema.yaml projections: customer: location: /order/customer partition: true A large customer asks if you can provide an up-to-date accounting of their orders. This can be accomplished with a partition selector: materializations: acmeCo/example/database-views: endpoint: ... bindings: # The source can be specified as an object, which allows setting a partition selector. - source: name: acmeCo/anvil/orders # Process partitions where "Coyote" is the customer. partitions: include: customer: [Coyote] resource: { table: coyote_orders } Learn more about partition selectors. ","version":"Next","tagName":"h2"},{"title":"Destination-specific performance​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#destination-specific-performance","content":" Flow processes updates in transactions, as quickly as the destination endpoint can handle them. This might be milliseconds in the case of a fast key/value store, or many minutes in the case of an OLAP warehouse. If the endpoint is also transactional, Flow integrates its internal transactions with those of the endpoint for integrated end-to-end “exactly once” semantics. The materialization is sensitive to back pressure from the endpoint. As a database gets busy, Flow adaptively batches and combines documents to consolidate updates: In a given transaction, Flow reduces all incoming documents on the collection key. Multiple documents combine and result in a single endpoint read and write during the transaction.As a target database becomes busier or slower, transactions become larger. Flow does more reduction work within each transaction, and each endpoint read or write accounts for an increasing volume of collection documents. This allows you to safely materialize a collection with a high rate of changes into a small database, so long as the cardinality of the materialization is of reasonable size. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#delta-updates","content":" As described above, Flow's standard materialization mechanism involves querying the target system for data state before reducing new documents directly into it. For these standard updates to work, the endpoint must be a stateful system, like a relational database. However, other systems — like Webhooks and Pub/Sub — may also be endpoints. None of these typically provide a state representation that Flow can query. They are write-only in nature, so Flow cannot use their endpoint state to help it fully reduce collection documents on their keys. Even some stateful systems are incompatible with Flow's standard updates due to their unique design and architecture. For all of these endpoints, Flow offers a delta-updates mode. When using delta updates, Flow does not attempt to maintain full reductions of each unique collection key. Instead, Flow locally reduces documents within each transaction (this is often called a "combine"), and then materializes onedelta document per key to the endpoint. In other words, when delta updates are used, Flow sends information about data changes by key, and further reduction is left up to the endpoint system. Some systems may reduce documents similar to Flow; others use a different mechanism; still others may not perform reductions at all. A given endpoint may support standard updates, delta updates, or both. This depends on the materialization connector. Expect that a connector will use standard updates only unless otherwise noted in its documentation. ","version":"Next","tagName":"h2"},{"title":"Using sourceCapture to synchronize capture and materialization bindings​","type":1,"pageTitle":"Materializations","url":"/pr-preview/pr-1594/concepts/materialization/#using-sourcecapture-to-synchronize-capture-and-materialization-bindings","content":" In some cases, you just want a destination system to always reflects the source system as closely as possible, even as the source system changes over time. ThesourceCapture property of a materialization allows you to do exactly that. If you set a sourceCapture on your materialization, then the bindings of the materialization will be automatically kept in sync with the bindings of the capture. As bindings are added to the capture, they will be automatically added to the materialization. This works regardless of whether the bindings were added to the capture manually or automatically. Bindings that are removed from the capture are not removed from the materialization. ","version":"Next","tagName":"h2"},{"title":"Tests","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/tests/","content":"","keywords":"","version":"Next"},{"title":"Ingest​","type":1,"pageTitle":"Tests","url":"/pr-preview/pr-1594/concepts/tests/#ingest","content":" ingest steps add documents to a named collection. All documents must validate against the collection'sschema, or a catalog build error will be reported. All documents from a single ingest step are added in one transaction. This means that multiple documents with a common key will be combined priorto their being appended to the collection. Suppose acmeCo/people had key [/id]: tests: acmeCo/tests/greetings: - ingest: description: Zeldas are combined to one added document. collection: acmeCo/people documents: - { userId: 1, name: "Zelda One" } - { userId: 1, name: "Zelda Two" } - verify: description: Only one Zelda is greeted. collection: acmeCo/greetings documents: - { userId: 1, greeting: "Hello Zelda Two" } ","version":"Next","tagName":"h2"},{"title":"Verify​","type":1,"pageTitle":"Tests","url":"/pr-preview/pr-1594/concepts/tests/#verify","content":" verify steps assert that the current contents of a collection match the provided document fixtures. Verified documents are fully reduced, with one document for each unique key, ordered under the key's natural order. You can verify the contents of both derivations and captured collections. Documents given in verify steps do not need to be comprehensive. It is not an error if the actual document has additional locations not present in the document to verify, so long as all matched document locations are equal. Verified documents also do not need to validate against the collection's schema. They do, however, need to include all fields that are part of the collection's key. tests: acmeCo/tests/greetings: - ingest: collection: acmeCo/people documents: - { userId: 1, name: "Zelda" } - { userId: 2, name: "Link" } - ingest: collection: acmeCo/people documents: - { userId: 1, name: "Zelda Again" } - { userId: 3, name: "Pikachu" } - verify: collection: acmeCo/greetings documents: # greetings are keyed on /userId, and the second greeting is kept. - { userId: 1, greeting: "Hello Zelda Again" } # `greeting` is "Hello Link", but is not asserted here. - { userId: 2 } - { userId: 3, greeting: "Hello Pikachu" } ","version":"Next","tagName":"h2"},{"title":"Partition selectors​","type":1,"pageTitle":"Tests","url":"/pr-preview/pr-1594/concepts/tests/#partition-selectors","content":" Verify steps may include a partition selector to verify only documents of a specific partition: tests: acmeCo/tests/greetings: - verify: collection: acmeCo/greetings description: Verify only documents which greet Nintendo characters. documents: - { userId: 1, greeting: "Hello Zelda" } - { userId: 3, greeting: "Hello Pikachu" } partitions: include: platform: [Nintendo] Learn more about partition selectors. ","version":"Next","tagName":"h3"},{"title":"Tips​","type":1,"pageTitle":"Tests","url":"/pr-preview/pr-1594/concepts/tests/#tips","content":" The following tips can aid in testing large or complex derivations. ","version":"Next","tagName":"h2"},{"title":"Testing reductions​","type":1,"pageTitle":"Tests","url":"/pr-preview/pr-1594/concepts/tests/#testing-reductions","content":" Reduction annotations are expressive and powerful, and their use should thus be tested thoroughly. An easy way to test reduction annotations on captured collections is to write a two-step test that ingests multiple documents with the same key and then verifies the result. For example, the following test might be used to verify the behavior of a simple sum reduction: tests: acmeCo/tests/sum-reductions: - ingest: description: Ingest documents to be summed. collection: acmeCo/collection documents: - {id: 1, value: 5} - {id: 1, value: 4} - {id: 1, value: -3} - verify: description: Verify value was correctly summed. collection: acmeCo/collection documents: - {id: 1, value: 6} ","version":"Next","tagName":"h3"},{"title":"Reusing common fixtures​","type":1,"pageTitle":"Tests","url":"/pr-preview/pr-1594/concepts/tests/#reusing-common-fixtures","content":" When you write a lot of tests, it can be tedious to repeat documents that are used multiple times. YAML supports anchors and references, which you can implement to re-use common documents throughout your tests. One nice pattern is to define anchors for common ingest steps in the first test, which can be re-used by subsequent tests. For example: tests: acmeCo/tests/one: - ingest: &mySetup collection: acmeCo/collection documents: - {id: 1, ...} - {id: 2, ...} ... - verify: ... acmeCo/tests/two: - ingest: *mySetup - verify: ... This allows all the subsequent tests to re-use the documents from the first ingest step without having to duplicate them. ","version":"Next","tagName":"h3"},{"title":"Web application","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/web-app/","content":"","keywords":"","version":"Next"},{"title":"When to use the web app​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#when-to-use-the-web-app","content":" The web app and flowctl are designed to work together as a complete platform. You can use either, or both, to work on your Data Flows, depending on your preference. With the Flow web app, you can perform most common workflows, including: Creating end-to-end Data Flows: capturing data from source systems and materializing it to destinations.Creating, viewing, and editing individual captures and materializations.Monitor the amount of data being processed by the system.Viewing data collections.Viewing users and permissions.Granting permissions to other users.Authenticating with the flowctl CLI.Manage billing details. Some advanced workflows, like transforming data with derivations, aren't fully available in the web app. Even if you prefer the command line or plan to perform a task that's only available through flowctl, we recommend you begin your work in the web app; it provides a quicker and easier path to create captures and materializations. You can then switch to flowctl to continue working. ","version":"Next","tagName":"h2"},{"title":"Signing in​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#signing-in","content":" You use a Google, Microsoft, or GitHub account to sign into Flow. If you've never used Flow before, you'll be prompted to register before being issued a trial account. If you want to use Flow for production workflows or collaborate with team members, you'll need an organizational account.Contact Estuary to create a new organizational account or join an existing organization. ","version":"Next","tagName":"h2"},{"title":"Navigating the web app​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#navigating-the-web-app","content":" When you log into the web app, you land on the Welcome page. There are four additional pages visible as tabs in the side navigation: Sources (captures), Collections, Destinations (materializations), and Admin. The order of the tabs mirrors the order of a basic Data Flow: graph LR; Capture-->Collection; Collection-->Materialization; While you may choose to use the tabs in this sequence, it's not necessary. All Flow entities exist individually, outside of the context of complete Data Flow. You can use the different pages in the web app to monitor and manage your items in a number of other ways, as described below. ","version":"Next","tagName":"h2"},{"title":"Captures page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#captures-page","content":" The Captures page shows you a table of existing Flow captures to which you have access. The New Capture button is also visible. You use the table to monitor your captures. 1: Select all or deselect all. 2: Enable, Disable, and Delete buttons. These actions will be applied to the selected table rows. Choose Disable to temporarily pause the flow of data, Enable to resume, and Delete to permanently remove the capture(s). 3: Materialize button. When you click this button, you're directed to the Create Materializations page. All the collections of the selected capture(s) will be added to the materialization. 4: Filter captures. Type a catalog prefix, unique capture name, or connector name to return captures that match your query. Capture names follow the pattern prefix/unique-identifier/connector-name, with prefix supporting multiple layers of nesting. You can search for any part of this full capture name. You can also use the * wildcard. For example, if you have a capture called acmeCo/logistics/anvil-locations/source-postgres, you can find it by filtering for acmeCo*source-postgres. 5: Status indicator. Shows the status of the primary task shard that backs this capture. Primary (Green): Data is actively flowing through the capture.Pending (Yellow): The capture is attempting to re-connect. Often, you'll see this after you re-enable the capture as Flow backfills historical data.Failed (Red): The capture has failed with an unrecoverable error.Disabled (Hollow circle): The capture is disabled.Unknown (Black when app is in light mode; white when app is in dark mode): The web app is unable to determine shard status. Usually, this is due to a temporary connection error. 6: Capture name. The full name is shown, including all prefixes. It is also a link to the details page of the capture. 7: Capture type. The icon shows the type of source system data is captured from. 8: Capture statistics. The Data Written column shows the total amount of data, in bytes and in documents, that the capture has written to its associated collections within a configurable time interval. Click the time interval in the header to select from Today, Yesterday, This Week, Last Week, This Month, or Last Month. Note that the time intervals are in UTC. 9: Associated collections. The Writes to column shows all the collections to which the capture writes data. For captures with a large number of collections, there is a chip stating how many collections are hidden. Clicking on this will all you to hover over this column and scroll to view the full list. These are also links to the details page of the collection. 10: Publish time. Hover over this value to see the exact UTC time the capture was last published. 11: Options. Click to open the menu to Edit Specification. ","version":"Next","tagName":"h2"},{"title":"Editing captures and collections​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#editing-captures-and-collections","content":" When you click Edit specification for a capture, you're taken to the Edit Capture page. This page is similar to the Create Capture page as it was filled out just before the capture was published. For detailed steps to edit a capture, see the guide. ","version":"Next","tagName":"h3"},{"title":"Creating a capture​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#creating-a-capture","content":" When you click Create Capture, you're taken to the Create Capture page. In the first view, all available capture connectors are displayed. Select the tile of the system from which you want to capture data to show the full capture form. The form details are specific to the connector you chose. For detailed steps to create a capture, see the guide. After you successfully publish a capture, you're given the option to materialize the collections you just captured. You can proceed to the materialization, or opt to exit to a different page of the web app. ","version":"Next","tagName":"h3"},{"title":"Collections page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#collections-page","content":" The Collections page shows a read-only table of collections to which you have access. The table has nearly all of the same features as the Captures table, with several important distinctions that are called out in the image below. You can use the table to view each collection's specification and see a sample of its data. This can help you verify that collection data was captured as expected and that you'll be able to materialize it how you want, and troubleshoot if necessary. 1: Select all or deselect all. 2: Enable, Disable, and Delete buttons. These actions will be applied to the selected table rows. Choose Disable to temporarily pause the flow of data, Enable to resume, and Delete to permanently remove the collection(s). 3: Filter collections by name. Type a catalog prefix, unique collection name to return collections that match your query. 4: Status indicator. If the collection does not contain a derivation, the indicator should always show green, and hover text will say "Collection." In the event that the server cannot be reached, the indicator will show "Unknown" status (black in light mode and white in dark mode). If the collection contains a derivation, the status of the derivation's primary task shard will be indicated: Primary (Green): Data is actively flowing through the derivation.Pending (Yellow): The derivation is attempting to re-connect.Failed (Red): The derivation has failed with an unrecoverable error.Disabled (Hollow circle): The derivation is disabled.Unknown (Black when app is in light mode; white when app is in dark mode): The web app is unable to determine shard status. Usually, this is due to a temporary connection error. 5: Collection name. The full name is shown, including all prefixes. It is also a link to the details page of the collection. 6: Collection statistics. The Data Written column shows the total amount of data, in bytes and in documents, that has been written to each collection from its associated capture or derivation within a configurable time interval. Click the time interval in the header to select from Today, Yesterday, This Week, Last Week, This Month, or Last Month. Note that the time intervals are in UTC. 7: Publish time. Hover over this value to see the exact UTC time the collection was last published. ","version":"Next","tagName":"h2"},{"title":"Materializations page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#materializations-page","content":" The Materializations page shows you a table of existing Flow materializations to which you have access. The New Materialization button is also visible. You use the table to monitor your materializations. It's nearly identical to the table on the Captures page, with a few exceptions. 1: Select all or deselect all. 2: Enable, Disable, and Delete buttons. These actions will be applied to the selected table rows. Choose Disable to temporarily pause the flow of data, Enable to resume, and Delete to permanently remove the materialization(s). 3: Filter materializations by name. Type a catalog prefix, unique materialization name, or connector name to return materializations that match your query. Materialization names follow the pattern prefix/unique-identifier/connector-name, with prefix supporting multiple layers of nesting. You can search for any part of this full materialization name. You can also use the * wildcard. For example, if you have a materialization called acmeCo/anvil-locations/materialize-mysql, you can find it by filtering for acmeCo*mysql. 4: Status indicator. Shows the status of the primary task shard that backs this materialization. Primary (Green): Data is actively flowing through the materialization.Pending (Yellow): The materialization is attempting to re-connect. Often, you'll see this after you re-enable the materialization as Flow backfills historical data.Failed (Red): The materialization has failed with an unrecoverable error.Disabled (Hollow circle): The materialization is disabled.Unknown (Black when app is in light mode; white when app is in dark mode): The web app is unable to determine shard status. Usually, this is due to a temporary connection error. 5: Materialization name. The full name is shown, including all prefixes. It is also a link to the details page of the materialization. 6: Materialization type. The icon shows the type of destination system data is materialized to. 7: Materialization statistics. The Data Read column shows the total amount of data, in bytes and in documents, that the materialization has read from its associated collections within a configurable time interval. Click the time interval in the header to select from Today, Yesterday, This Week, Last Week, This Month, or Last Month. Note that the time intervals are in UTC. 8: Associated collections. The Reads from column shows all the collections from which the materialization reads data. For materializations with a large number of collections, there is a chip stating how many collections are hidden. Clicking on this will all you to hover over this column and scroll to view the full list. These are also links to the details page of the collection. 9: Publish time. Hover over this value to see the exact UTC time the materialization was last published. 10: Options. Click to open the menu to Edit Specification. ","version":"Next","tagName":"h2"},{"title":"Editing materializations​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#editing-materializations","content":" When you click Edit specification for a materialization, you're taken to the Edit Materialization page. This page is similar to the Create Materialization page as it was filled out just before the materialization was published. For detailed steps to edit a materialization, see the guide. ","version":"Next","tagName":"h3"},{"title":"Creating a materialization​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#creating-a-materialization","content":" There are three ways to begin creating a materialization: Clicking New Materialization on the Materializations page.Selecting one or more captures from the Captures page and clicking Materialize.Clicking Materialize Collections immediately after publishing a capture. When you initiate the workflow in any of these ways, all available materialization connectors are displayed. Select a connector to reveal the full form with configuration options specific to your desired destination. Fill out the Endpoint Config form and in the Source Collections section use the Collection Selector to map Flow collections to resources in the destination system. Note that if you entered the workflow from the Captures page or after publishing a capture, collections will be pre-populated for you. For detailed steps to create a materialization, see the guide. ","version":"Next","tagName":"h3"},{"title":"Capture Details page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#capture-details-page","content":" When you click on the name of a capture on the captures page you will be taken to the capture details page to view data stats, sharding information, and general details. ","version":"Next","tagName":"h2"},{"title":"Overview Tab​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#overview-tab","content":" 1: The full name of the capture. 2: Capture statistics. The Usage section displays the total amount of data, in bytes and in documents written by the capture, per hour. The number of hours being displayed in the chart can be changed by clicking the time interval in the header to select from 6 hours, 12 hours, 24 hours. 3: The Details section shows different pieces of information about the capture. When it was last updated, when it was created, the connector being used, and the collections to which the capture writes data. 4: Detailed tooltip. You can hover over a section in the graph to see the specific data of that hour. 5: The most recent hour. This will automatically update every 15 seconds with the most recent data and docs. 6: Associated collections. Shows all the collections to which the capture writes data and when clicked will take you to the collection's detail page 7: The Shard Information section shows the full identifier of the shard(s) that back your capture. If there's an error, you'll see an alert identifying the failing shard(s). Use the drop-down to open an expanded view of the failed shard's logs. ","version":"Next","tagName":"h3"},{"title":"Spec Tab​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#spec-tab","content":" In the Spec tab, you can view the specification of the capture itself. ","version":"Next","tagName":"h3"},{"title":"Collection Details page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#collection-details-page","content":" When you click on the name of a collection on the collections page you will be taken to the collection details page to view data stats, sharding information, preview of data, and general details. ","version":"Next","tagName":"h2"},{"title":"Overview Tab​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#overview-tab-1","content":" 1: The full name of the collection. 2: Collection statistics. The Usage section shows the total amount of data, in bytes and in documents passing through a collection, per hour. The number of hours being displayed in the chart can be changed by clicking the time interval in the header to select from 6 hours, 12 hours, 24 hours. 3: The Details section shows different pieces of information about the collection. When it was last updated, when it was created, and the associated collections (if any). 4: Detailed tooltip. You can hover over a section in the graph to see the specific data of that hour. 5: The most recent hour. This will automatically update every 15 seconds with the most recent data and docs. 6: Associated collections. Shows all the collections to which the capture writes data and when clicked will take you to the collection's detail page 7: The Shard Information section (for derivations) shows the full identifier of the shard(s) that back your derivation. If there's an error, you'll see an alert identifying the failing shard(s). Use the drop-down to open an expanded view of the failed shard's logs. 8: The Data Preview section shows a sample of collection documents: the individual JSON files that comprise the collection. Documents are organized by their collection key value. Click a key from the list to view its document. ","version":"Next","tagName":"h3"},{"title":"Spec Tab​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#spec-tab-1","content":" 1: The collection's key of the collection. 2: The collection's schema displayed in a read only table. The table columns can be sorted to more easily find what you need. tip If you need to modify a collection, edit the capture that it came from. ","version":"Next","tagName":"h3"},{"title":"Materialization Details Page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#materialization-details-page","content":" When you click on the name of a materialization on the materializations page you will be taken to the detail page to view data stats, sharding information, and general details. ","version":"Next","tagName":"h2"},{"title":"Overview Tab​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#overview-tab-2","content":" 1: The full name of the materialization. 2: Materialization statistics. The Usage section shows the total amount of data, in bytes and in documents read by a materialization, per hour. The number of hours being displayed in the chart can be changed by clicking the time interval in the header to select from 6 hours, 12 hours, 24 hours. 3: The Details section shows different pieces of information about the materialization. When it was last updated, when it was created, and the associated collections. 4: Detailed tooltip. You can hover over a section in the graph to see the specific data of that hour. 5: The most recent hour. This will automatically update every 15 seconds with the most recent data and docs. 6: Associated collections. Shows all the collections to which the capture writes data and when clicked will take you to the collection's detail page 7: The Shard Information section shows the full identifier of the shard(s) that back your materialization. If there's an error, you'll see an alert identifying the failing shard(s). Use the drop-down to open an expanded view of the failed shard's logs. ","version":"Next","tagName":"h3"},{"title":"Spec Tab​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#spec-tab-2","content":" In the Spec tab, you can view the specification of the materialization itself. ","version":"Next","tagName":"h3"},{"title":"Admin page​","type":1,"pageTitle":"Web application","url":"/pr-preview/pr-1594/concepts/web-app/#admin-page","content":" On the Admin page, you can view users' access grants, your organization's cloud storage locations, and a complete list of connectors. You can also get an access token to authenticate with flowctl and update your cookie preferences. Users​ The Users tab shows you all provisioned access grants on objects to which you also have access. Both users and catalog prefixes can receive access grants. These are split up into two tables called Users and Prefixes. Each access grant has its own row, so a given user or prefix may have multiple rows. For example, if you had read access to foo/ and write access to bar/, you'd have a separate table row in the Users table for each of these capabilities. If users Alice, Bob, and Carol each had write access on foo/, you'd see three more table rows representing these access grants. Taking this a step further, the prefix foo/ could have read access to buz/. You'd see this in the Prefixes table, and it'd signify that everyone who has access to foo/ also inherits read access to buz/. Use the search boxes to filter by username, prefix, or object. Learn more about capabilities and access. Storage Mappings​ The Storage Mappings tab includes a table of the cloud storage locations that back your Flow collections. You're able to view the table if you're an admin. Each top-level Flow prefix is backed by one or more cloud storage bucket that you own. You typically have just one prefix: your organization name, which you provided when configuring your Flow organizational account. If you're a trial user, your prefix is trial/, and this tab isn't applicable to you; your data is stored temporarily in Estuary's cloud storage bucket for your trial period. Learn more about storage mappings. Connectors​ The Connectors tab offers a complete view of all connectors that are currently available through the web application, including both capture and materialization connectors. If a connector you need is missing, you can request it. CLI-API​ The CLI-API tab provides the access token required to authenticate with flowctl. Cookie Preferences​ You use the Cookie Preferences tab to view and modify cookie settings. ","version":"Next","tagName":"h2"},{"title":"Schemas","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/concepts/schemas/","content":"","keywords":"","version":"Next"},{"title":"JSON Schema​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#json-schema","content":" JSON Schemais an expressive open standard for defining the schema and structure of documents. Flow uses it for all schemas defined in Flow specifications. JSON Schema goes well beyond basic type information and can modeltagged unions, recursion, and other complex, real-world composite types. Schemas can also define rich data validations like minimum and maximum values, regular expressions, dates, timestamps, email addresses, and other formats. Together, these features let schemas represent structure as well asexpectations and constraints that are evaluated and must hold true for every collection document before it’s added to the collection. They’re a powerful tool for ensuring end-to-end data quality: for catching data errors and mistakes early, before they can impact your production data products. ","version":"Next","tagName":"h2"},{"title":"Generation​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#generation","content":" When capturing data from an external system, Flow can usually generate suitable JSON schemas on your behalf. Learn more about using connectors For systems like relational databases, Flow will typically generate a complete JSON schema by introspecting the table definition. For systems that store unstructured data, Flow will typically generate a very minimal schema, and will rely on schema inferrence to fill in the details. See continuous schema inferenece for more information. ","version":"Next","tagName":"h3"},{"title":"Translations​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#translations","content":" You must only provide Flow a model of a given dataset one time, as a JSON schema. Having done that, Flow leverages static inference over your schemas to perform many build-time validations of your catalog entities, helping you catch potential problems early. Schema inference is also used to provide translations into other schema flavors: Most projections of a collection are automatically inferred from its schema. Materializations use your projections to create appropriate representations in your endpoint system. A SQL connector will create table definitions with appropriate columns, types, and constraints.Flow generates TypeScript definitions from schemas to provide compile-time type checks of user lambda functions. These checks are immensely helpful for surfacing mismatched expectations around, for example, whether a field could ever be null or is misspelt — which, if not caught, might otherwise fail at runtime. ","version":"Next","tagName":"h3"},{"title":"Annotations​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#annotations","content":" The JSON Schema standard introduces the concept ofannotations, which are keywords that attach metadata to a location within a validated JSON document. For example, title and description can be used to annotate a schema with its meaning: properties: myField: title: My Field description: A description of myField Flow extends JSON Schema with additional annotation keywords, which provide Flow with further instruction for how documents should be processed. In particular, the reduce and default keywords help you define merge behaviors and avoid null values at your destination systems, respectively. What’s especially powerful about annotations is that they respond toconditionals within the schema. Consider a schema validating a positive or negative number: type: number oneOf: - exclusiveMinimum: 0 description: A positive number. - exclusiveMaximum: 0 description: A negative number. - const: 0 description: Zero. Here, the activated description of this schema location depends on whether the integer is positive, negative, or zero. ","version":"Next","tagName":"h3"},{"title":"Writing schemas​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#writing-schemas","content":" Your schema can be quite permissive or as strict as you wish. There are a few things to know, however. The top-level type must be object. Flow adds a bit of metadata to each of your documents under the _meta property, which can only be done with a top-level object. Any fields that are part of the collection's key must provably exist in any document that validates against the schema. Put another way, every document within a collection must include all of the fields of the collection's key, and the schema must guarantee that. For example, the following collection schema would be invalid because the id field, which is used as its key, is not required, so it might not actually exist in all documents: collections: acmeCo/whoops: schema: type: object required: [value] properties: id: {type: integer} value: {type: string} key: [/id] To fix the above schema, change required to [id, value]. Learn more of how schemas can be expressed within collections. ","version":"Next","tagName":"h2"},{"title":"Organization​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#organization","content":" JSON schema has a $ref keyword which is used to reference a schema stored elsewhere. Flow resolves $ref as a relative URL of the current file, and also supportsJSON fragment pointersfor referencing a specific schema within a larger schema document, such as ../my/widget.schema.yaml#/path/to/schema. It's recommended to use references in order to organize your schemas for reuse. $ref can also be used in combination with other schema keywords to further refine a base schema. Here's an example that uses references to organize and further tighten the constraints of a reused base schema: flow.yamlschemas.yaml collections: acmeCo/coordinates: key: [/id] schema: schemas.yaml#/definitions/coordinate acmeCo/integer-coordinates: key: [/id] schema: schemas.yaml#/definitions/integer-coordinate acmeCo/positive-coordinates: key: [/id] schema: # Compose a restriction that `x` & `y` must be positive. $ref: schemas.yaml#/definitions/coordinate properties: x: {exclusiveMinimum: 0} y: {exclusiveMinimum: 0} tip You can write your JSON schemas as either YAML or JSON across any number of files, all referenced from Flow catalog files or other schemas. Schema references are always resolved as URLs relative to the current file, but you can also use absolute URLs to a third-party schema likeschemastore.org. ","version":"Next","tagName":"h3"},{"title":"Write and read schemas​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#write-and-read-schemas","content":" In some cases, you may want to impose different constraints to data that is being added (written) to the collection and data that is exiting (read from) the collection. For example, you may need to start capturing data now from a source system; say, a pub-sub system with short-lived historical data support or an HTTP endpoint, but don't know or don't control the endpoint's schema. You can capture the data with a permissive write schema, and impose a stricter read schema on the data as you need to perform a derivation or materialization. You can safely experiment with the read schema at your convenience, knowing the data has already been captured. To achieve this, edit the collection, re-naming the standard schema to writeSchema and adding a readSchema. Make sure that the field used as the collection key is defined in both schemas. You can either perform this manually, or use Flow's Schema Inference tool to infer a read schema. Schema Inference is available in the web app when you edit a capture or materialization and create a materialization. Before separating your write and read schemas, have the following in mind: The write schema comes from the capture connector that produced the collection and shouldn't be modified. Always apply your schema changes to the read schema. Separate read and write schemas are typically useful for collections that come from a source system with a flat or loosely defined data structure, such as cloud storage or pub-sub systems. Collections sourced from databases and most SaaS systems come with an explicitly defined data structure and shouldn't need a different read schema. If you're using standard projections, you must only define them in the read schema. However, if your projections are logical partitions, you must define them in both schemas. Here's a simple example in which you don't know how purchase prices are formatted when capturing them, but find out later that number is the appropriate data type: collections: purchases: writeSchema: type: object title: Store price as strings description: Not sure if prices are formatted as numbers or strings. properties: id: { type: integer} price: {type: [string, number]} readSchema: type: object title: Prices as numbers properties: id: { type: integer} price: {type: number} key: [/id] ","version":"Next","tagName":"h2"},{"title":"Reductions​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#reductions","content":" Flow collections have keys, and multiple documents may be added to collections that share a common key. When this happens, Flow will opportunistically merge all such documents into a single representative document for that key through a process known as reduction. Flow's default is simply to retain the most recent document of a given key, which is often the behavior that you're after. Schema reduce annotations allow for far more powerful behaviors. The Flow runtime performs reductions frequently and continuously to reduce the overall movement and cost of data transfer and storage. A torrent of input collection documents can often become a trickle of reduced updates that must be stored or materialized into your endpoints. info Flow never delays processing in order to batch or combine more documents, as some systems do (commonly known as micro-batches, or time-based polling). Every document is processed as quickly as possible, from end to end. Instead Flow uses optimistic transaction pipelining to do as much useful work as possible, while it awaits the commit of a previous transaction. This natural back-pressure affords plenty of opportunity for data reductions while minimizing latency. ","version":"Next","tagName":"h2"},{"title":"reduce annotations​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#reduce-annotations","content":" Reduction behaviors are defined by reduceJSON schema annotationswithin your document schemas. These annotations provide Flow with the specific reduction strategies to use at your various document locations. If you're familiar with the map and reduce primitives present in Python, Javascript, and many other languages, this should feel familiar. When multiple documents map into a collection with a common key, Flow reduces them on your behalf by using your reduce annotations. Here's an example that sums an integer: type: integer reduce: { strategy: sum } # 1, 2, -1 => 2 Or deeply merges a map: type: object reduce: { strategy: merge } # {"a": "b"}, {"c": "d"} => {"a": "b", "c": "d"} Learn more in thereduction strategiesreference documentation. Reductions and collection keys​ Reduction annotations change the common patterns for how you think about collection keys. Suppose you are building a reporting fact table over events of your business. Today you would commonly consider a unique event ID to be its natural key. You would load all events into your warehouse and perform query-time aggregation. When that becomes too slow, you periodically refresh materialized views for fast-but-stale queries. With Flow, you instead use a collection key of your fact table dimensions, and use reduce annotations to define your metric aggregations. A materialization of the collection then maintains a database table which is keyed on your dimensions, so that queries are both fast and up to date. Composition with conditionals​ Like any other JSON Schema annotation,reduce annotations respond to schema conditionals. Here we compose append and lastWriteWins strategies to reduce an appended array which can also be cleared: type: array oneOf: # If the array is non-empty, reduce by appending its items. - minItems: 1 reduce: { strategy: append } # Otherwise, if the array is empty, reset the reduced array to be empty. - maxItems: 0 reduce: { strategy: lastWriteWins } # [1, 2], [3, 4, 5] => [1, 2, 3, 4, 5] # [1, 2], [], [3, 4, 5] => [3, 4, 5] # [1, 2], [3, 4, 5], [] => [] You can combine schema conditionals with annotations to buildrich behaviors. ","version":"Next","tagName":"h3"},{"title":"Continuous schema inference​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#continuous-schema-inference","content":" Flow automatically infers a JSON schema for every captured collection. This schema is updated automatically as data is captured. For some systems, like relational databases, Flow is able to determine a complete JSON schema for each collection up front, before even starting the capture. But many other systems are not able to provide detailed and accurate information about the data before it's captured. Often, this is because the source system data is unstructured or loosely structured. For these systems, the schema can only be known after the data is captured. Continuous schema inference is most useful in these scenarios. For example, say you're capturing from MongoDB. MongoDB documents must all have an _id field, but that is essentially the only requirement. You can't know what other fields may exist on MongoDB documents until you've read them. When you set up a capture from MongoDB using the Flow web app, the collection specifications will look something like this: key: [ /_id ] writeSchema: type: object properties: _id: { type: string } required: [ _id ] readSchema: allOf: - $ref: flow://write-schema - $ref: flow://inferred-schema Note that this spec uses separate read and write schemas. The writeSchema is extremely permissive, and only requires an _id property with a string value. The readSchema references flow://inferred-schema, which expands to the current inferred schema when the collection is published. info Note that $ref: flow://write-schema expands to the current writeSchema. Whenever you use $ref: flow://inferred-schema, you should always include the flow://write-schema as well, so that you don't need to repeat any fields that are defined in the writeSchema or wait for those fields to be observed by schema inference. When you first publish a collection using the inferred schema, flow://inferred-schema expands to a special placeholder schema that rejects all documents. This is to ensure that a non-placeholder inferred schema has been published before allowing any documents to be materialized. Once data is captured to the collection, the inferred schema immediately updates to strictly and minimally describe the captured. Because the effective readSchema is only ever updated when the collection is published, the best option is usually to use the inferred schema in conjunction with autoDiscover. ","version":"Next","tagName":"h2"},{"title":"default annotations​","type":1,"pageTitle":"Schemas","url":"/pr-preview/pr-1594/concepts/schemas/#default-annotations","content":" You can use default annotations to prevent null values from being materialized to your endpoint system. When this annotation is absent for a non-required field, missing values in that field are materialized as null. When the annotation is present, missing values are materialized with the field's default value: collections: acmeCo/coyotes: schema: type: object required: [id] properties: id: {type: integer} anvils_dropped: {type: integer} reduce: {strategy: sum } default: 0 key: [/id] default annotations are only used for materializations; they're ignored by captures and derivations. If your collection has both a write and read schema, make sure you add this annotation to the read schema. ","version":"Next","tagName":"h2"},{"title":"Registration and setup","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/installation/","content":"","keywords":"","version":"Next"},{"title":"Get started with the Flow web application​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#get-started-with-the-flow-web-application","content":" To start using Flow for free, visit the web application. See what the free tier includes on the Pricing page. When you register for Flow, your account will use Flow's secure cloud storage bucket to store your data. Data in Flow's cloud storage bucket is deleted 30 days after collection. For production use cases, you should configure your own cloud storage bucket to use with Flow. ","version":"Next","tagName":"h2"},{"title":"Get started with the Flow CLI​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#get-started-with-the-flow-cli","content":" After your account has been activated through the web app, you can begin to work with your data flows from the command line. This is not required, but it enables more advanced workflows or might simply be your preference. Flow has a single binary, flowctl. flowctl is available for: Linux x86-64. All distributions are supported.MacOS 11 (Big Sur) or later. Both Intel and M1 chips are supported. To install, copy and paste the appropriate script below into your terminal. This will download flowctl, make it executable, and add it to your PATH. For Linux: sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-x86_64-linux' && sudo chmod +x /usr/local/bin/flowctl For Mac: sudo curl -o /usr/local/bin/flowctl -L 'https://github.com/estuary/flow/releases/latest/download/flowctl-multiarch-macos' && sudo chmod +x /usr/local/bin/flowctl Alternatively, Mac users can install with Homebrew: brew tap estuary/flowctl brew install flowctl flowctl isn't currently available for Windows. For Windows users, we recommend running the Linux version inside WSL, or using a remote development environment. The flowctl source files are also on GitHub here. Once you've installed flowctl and are ready to begin working, authenticate your session using an access token. Ensure that you have an Estuary account and have signed into the Flow web app before. In the terminal of your local development environment, run: flowctl auth login In a browser window, the web app opens to the CLI-API tab. Copy the access token. Return to the terminal, paste the access token, and press Enter. The token will expire after a predetermined duration. Repeat this process to re-authenticate. Learn more about using flowctl. ","version":"Next","tagName":"h2"},{"title":"Configuring your cloud storage bucket for use with Flow​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#configuring-your-cloud-storage-bucket-for-use-with-flow","content":" New Flow accounts are connected to Flow's secure cloud storage bucket to store collection data. To switch to your own bucket, choose a cloud provider and complete the setup steps: Google Cloud Storage Amazon S3 Azure Blob Storage Once you're done, get in touch. ","version":"Next","tagName":"h2"},{"title":"Google Cloud Storage buckets​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#google-cloud-storage-buckets","content":" You'll need to grant Estuary Flow access to your GCS bucket. Create a bucket to use with Flow, if you haven't already. Follow the steps to add a principal to a bucket level policy. As you do so: For the principal, enter flow-258@helpful-kingdom-273219.iam.gserviceaccount.com Select the roles/storage.admin role. ","version":"Next","tagName":"h3"},{"title":"Amazon S3 buckets​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#amazon-s3-buckets","content":" You'll need to grant Estuary Flow access to your S3 bucket. Create a bucket to use with Flow, if you haven't already. Follow the steps to add a bucket policy, pasting the policy below. Be sure to replace YOUR-S3-BUCKET with the actual name of your bucket. { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUsersToAccessObjectsUnderPrefix", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::789740162118:user/flow-aws" }, "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], "Resource": "arn:aws:s3:::YOUR-S3-BUCKET/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::789740162118:user/flow-aws" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::YOUR-S3-BUCKET" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::789740162118:user/flow-aws" }, "Action": "s3:GetBucketPolicy", "Resource": "arn:aws:s3:::YOUR-S3-BUCKET" } ] } ","version":"Next","tagName":"h3"},{"title":"Azure Blob Storage​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#azure-blob-storage","content":" You'll need to grant Estuary Flow access to your storage account and container. You'll also need to provide some identifying information. Create an Azure Blob Storage container to use with Flow, if you haven't already. Gather the following information. You'll need this when you contact us to complete setup. Your Azure AD tenant ID. You can find this in the Azure Active Directory page. Your Azure Blob Storage account ID. You can find this in the Storage Accounts page. Your Azure Blob Storage container ID. You can find this inside your storage account. You'll grant Flow access to your storage resources by connecting to Estuary'sAzure application. Add Estuary's Azure application to your tenant. Grant the application access to your storage account via theStorage Blob Data Owner IAM role. Inside your storage account's Access Control (IAM) tab, click Add Role Assignment. Search for Storage Blob Data Owner and select it. On the next page, make sure User, group, or service principal is selected, then click + Select Members. You must search for the exact name of the application, otherwise it won't show up: Estuary Storage Mappings Prod Once you've selected the application, finish granting the role. For more help, see the Azure docs. ","version":"Next","tagName":"h3"},{"title":"Add the Bucket​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#add-the-bucket","content":" If your bucket is for Google Cloud Storage or AWS S3, you can add it yourself. Once you've finished the above steps, head to "Admin", "Settings" then "Configure Cloud Storage" and enter the relevant information there and we'll start to use your bucket for all data going forward. If your bucket is for Azure, send support@estuary.dev an email with the name of the storage bucket and any other information you gathered per the steps above. Let us know whether you want to use this storage bucket to for your whole Flow account, or just a specific prefix. We'll be in touch when it's done! ","version":"Next","tagName":"h3"},{"title":"Self-hosting Flow​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#self-hosting-flow","content":" The Flow runtime is available under the Business Source License. It's possible to self-host Flow using a cloud provider of your choice. Beta Setup for self-hosting is not covered in this documentation, and full support is not guaranteed at this time. We recommend using the hosted version of Flow for the best experience. If you'd still like to self-host, refer to the GitHub repository or the Estuary Slack. ","version":"Next","tagName":"h2"},{"title":"What's next?​","type":1,"pageTitle":"Registration and setup","url":"/pr-preview/pr-1594/getting-started/installation/#whats-next","content":" Start using Flow with these recommended resources. Create your first data flow: Follow this guide to create your first data flow in the Flow web app, while learning essential flow concepts. High level concepts: Start here to learn more about important Flow terms. ","version":"Next","tagName":"h2"},{"title":"Flow tutorials","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/tutorials/","content":"Flow tutorials Flow tutorials are complete learning experiences that help you get to know Flow using sample data. You'll find these helpful if: You're a new user looking for practice before you implement production Data Flows. You'd rather learn the Flow concepts in a hands-on setting. If you're looking for more streamlined guidance for your own use case, check out the user guides.","keywords":"","version":"Next"},{"title":"Create a real-time materialized view in PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#prerequisites","content":" An Estuary Flow account. If you don't have one, visit the Flow web app to register for free. A GitLab, GitHub, or BitBucket account. You'll use this to log into GitPod, the cloud development environment integrated with Flow. Alternatively, you can complete this tutorial using a local development environment. In that case, you'll need to install flowctl locally. Note that the steps you'll need to take will be different. Refer to this guide for help. A Postgres database set up to allow connections from Flow. Amazon RDS, Amazon Aurora, Google Cloud SQL, Azure Database for PostgreSQL, and self-hosted databases are supported. ","version":"Next","tagName":"h2"},{"title":"Introduction​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#introduction","content":" Materialized views in Postgres give you a powerful way narrow down a huge dataset into a compact one that you can easily monitor. But if your data is updating in real-time, traditional materialized views introduce latency. They're batch workflows — the query is run at a set interval. To get around this, you'll need to perform a real-time transformation elsewhere. Flow derivations are a great way to do this. For this example, you'll use Estuary's public data collection of recent changes to Wikipedia, captured from the Wikimedia Foundation's event stream. The raw dataset is quite large. It captures every change to the platform — about 30 per second — and includes various properties. Written to a Postgres table, it quickly grows to an size that's very expensive to query. First, you'll scope the raw data down to a small fact table with a derivation. You'll then materialize both the raw and transformed datasets to your Postgres instance and compare performance. ","version":"Next","tagName":"h2"},{"title":"Loading the Wikipedia Demo​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#loading-the-wikipedia-demo","content":" Navigate to the Live Demo page and click on See the capture. After accepting the pop up, Estuary will populate your Sources, Collections and Destinations with the Wikipedia Demo tasks. ","version":"Next","tagName":"h2"},{"title":"Check out the source data​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#check-out-the-source-data","content":" Got the the collections page of the Flow web app. Search for demo/wikipedia/recentchange and click on its name. On the Collection Details page, click the Spec tab. The collection schema has many fields. Because Wikipedia sees a lot of edits, this would yield a large, unwieldy table in Postgres. Tip To save on performance, you can also perform this tutorial using the smaller demo/wikipedia/recentchange-sampled collection. Apart from the collection name, all other steps are the same. Learn more about Flow collections and schemas. Now you'll create the derivation. A derivation is a new collection that's defined by a transformation. First, you'll define the collection's schema. Then, you'll write the transformation to shape the data to that schema. ","version":"Next","tagName":"h2"},{"title":"Add a derivation to transform data​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#add-a-derivation-to-transform-data","content":" You'll write your derivation using a cloud development environment integrated in the Flow web app. Go back to the collections page and click the New Transformation button. Set the source collection to the raw Wikipedia data. Search for and select demo/wikipedia/recentchange. Set the transformation language to SQL. Give the derivation a name. From the dropdown, choose the name of your catalog prefix and append a unique name, for example yourprefix/wikipedia/user-fact-table. Click Proceed to GitPod to create your development environment. Sign in with one of the available account types. On the New Workspace screen, keep the Context URL option selected and click Continue. A GitPod development environment opens. A stubbed-out derivation with a SQL transformation has already been created for you. Next, you'll locate and open the source files. Each slash-delimited prefix of your derivation name has become a folder. Open the nested folders to locate a flow.yaml file. Following the example above, you'd open the folders called yourprefix, then wikipedia, to find the correct flow.yaml file. Its contents look like this: collections: yourprefix/wikipedia/user-fact-table: schema: properties: your_key: type: string required: - your_key type: object key: - /your_key derive: using: sqlite: migrations: - user-fact-table.migration.0.sql transforms: - name: recentchange source: demo/wikipedia/recentchange shuffle: any lambda: user-fact-table.lambda.recentchange.sql Your first order of business is to replace the placeholder schema and collection key. As we saw earlier, the source collection's schema and key caused every Wikipedia event to generate a new document. You'll fix that here. Replace the existing schema and key stanzas with the following: schema: properties: edits_this_day: reduce: strategy: sum type: integer date: format: date type: string user: type: string reduce: strategy: merge required: - user - date - edits_this_day type: object key: - /user - /date The new schema contains reduction annotations. These sum the changes made by a given user on a given date. The collection is now keyed on each unique combination of user ID and date. It has just three fields: the user, date, and the number of changes made by that user on that date. Next, you'll add the transformation. In the transforms stanza, give the transformation a new name to differentiate it from the name of the source collection. For example: transforms: - name: dailychangesbyuser Update the shuffle key. Since we're working with a large dataset, this ensures that each user is processed by the same task shard. This way, you'll prevent Flow from creating multiple counts for a given user and date combination. Learn more about shuffles. shuffle: { key: [ /user ] } Now, the transform needs is the SQL lambda function — the function that will shape the source data to fit the new schema. Flow has created another file to contain it. Open the file called user-fact-table.lambda.recentchange.sql. Replace its contents with select $user, 1 as edits_this_day, date($meta$dt) as date where $user is not null; This creates the edits_this_day field we referenced earlier, and starts the counter at 1. It converts the timestamp into a simplified date format. Finally, it filters out null users (which occasionally occur in the Wikipedia data stream and would violate your schema). All pieces of the derivation are in place. Double check your files against these samples: flow.yamluser-fact-table.lambda.recentchange.sql --- collections: yourprefix/wikipedia/user-fact-table: schema: properties: edits_this_day: reduce: strategy: sum type: integer date: format: date type: string user: type: string reduce: strategy: merge required: - user - date - edits_this_day type: object key: - /user - /date derive: using: sqlite: migrations: - user-fact-table.migration.0.sql transforms: - name: dailychangesbyuser source: demo/wikipedia/recentchange shuffle: { key: [ /user ] } lambda: user-fact-table.lambda.recentchange.sql Run the derivation locally and preview its output: flowctl preview --source flow.yaml In your terminal, you'll see JSON documents that look like: {"date":"2023-07-18","edits_this_day":3,"user":"WMrapids"} This looks right: it includes the correctly formatted date, the number of edits, and the username. You're ready to publish. Stop the local derivation with Ctrl-C. Publish the derivation: flowctl catalog publish --source flow.yaml The message Publish successful means you're all set. Your transformation will continue in real time based on the raw dataset, which is also updating in real time. You're free to close your GitPod. ","version":"Next","tagName":"h2"},{"title":"Create the continuous materialized view​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#create-the-continuous-materialized-view","content":" Now, you'll materialize your new fact table to Postgres. You'll also materialize the source dataset to compare performance. Go to the Destinations page in the Flow web app. Click New Materialization. Find the PostgreSQL and click Materialization. Add a unique name for the materialization, for example, yourprefix/yourname-materialized-views-demo. Fill out the Basic Config with: A username and password for the Postgres instance. Your database host and port. The database name (if in doubt, use the default, postgres). See the connector documentation if you need help finding these properties. In the Source Collections browser, search for and add the collection demo/wikipedia/recentchange and name the corresponding Postgres Table wikipedia_raw. Also search for and add the collection you just derived, (for example, yourprefix/wikipedia/user-fact-table). Name the corresponding Postgres table wikipedia_data_by_user. Click Next to test the connection. Click Save and Publish. ","version":"Next","tagName":"h2"},{"title":"Explore the results​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#explore-the-results","content":" In your Postgres client of choice, note the size of each table and how they quickly change. Try running some basic queries against both and compare performance. See the blog post for ideas. Once you're satisfied, and to prevent continual resource use, disable or delete your materialization from theDestinations page. ","version":"Next","tagName":"h2"},{"title":"Resources​","type":1,"pageTitle":"Create a real-time materialized view in PostgreSQL","url":"/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/#resources","content":" About derivations ","version":"Next","tagName":"h2"},{"title":"Create your first dataflow with Amazon S3 and Snowflake","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Create your first dataflow with Amazon S3 and Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/#prerequisites","content":" You'll need: An Estuary Flow account. If you don't have one, visit the Flow web app to register for free. A Snowflake free trial account (or a full account). Snowflake trials are valid for 30 days. ","version":"Next","tagName":"h2"},{"title":"Introduction​","type":1,"pageTitle":"Create your first dataflow with Amazon S3 and Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/#introduction","content":" The data​ New York City hosts the United States' largest bike share program, Citi Bike. Citi Bike shares ride data in CSV format with the public, including the starting and ending times and locations for every ride. They upload new data monthly to their Amazon S3 bucket as a zipped CSV file. In this scenario, let's imagine you're interested in urban bike safety, or perhaps you plan to open a bike store and entice Citi Bike renters to buy their own bikes. You'd like to access the Citi Bike data in your Snowflake data warehouse. From there, you plan to use your data analytics platform of choice to explore the data, and perhaps integrate it with business intelligence apps. You can use Estuary Flow to build a real-time Data Flow that will capture all the new data from Citi Bike as soon as it appears, convert it to Snowflake's format, and land the data in your warehouse. Estuary Flow​ In Estuary Flow, you create Data Flows to connect data source and destination systems. The simplest Data Flow comprises three types of entities: A data capture, which ingests data from the source. In this case, you'll capture from Amazon S3. One or more collections, which Flow uses to store that data inside a cloud-backed data lake A materialization, to push the data to an external destination. In this case, you'll materialize to a Snowflake data warehouse. graph LR; Capture-->Collection; Collection-->Materialization; For the capture and materialization to work, they need to integrate with outside systems: in this case, S3 and Snowflake, but many other systems can be used. To accomplish this, Flow uses connectors. Connectors are plug-in components that interface between Flow and an outside system. Today, you'll use Flow's S3 capture connector and Snowflake materialization connector. You'll start by creating your capture. ","version":"Next","tagName":"h2"},{"title":"Capture Citi Bike data from S3​","type":1,"pageTitle":"Create your first dataflow with Amazon S3 and Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/#capture-citi-bike-data-from-s3","content":" Go to the Flow web app at dashboard.estuary.dev and sign in. Click the Sources tab and choose New Capture All of the available capture connectors — representing the possible data sources — appear as tiles. Find the Amazon S3 tile and click Capture. A form appears with the properties required for an S3 capture. Every connector requires different properties to configure. First, you'll name your capture. Click inside the Name box. Names of entities in Flow must be unique. They're organized by prefixes, similar to paths in a file system. You'll see one or more prefixes pertaining to your organization. These prefixes represent the namespaces of Flow to which you have access. Click your prefix from the dropdown and append a unique name after it. For example, myOrg/yourname/citibiketutorial. Next, fill out the required properties for S3. AWS Access Key ID and AWS Secret Access Key: The bucket is public, so you can leave these fields blank. AWS Region: us-east-1 Bucket: tripdata Prefix: The storage bucket isn't organized by prefixes, so leave this blank. Match Keys: 2022 The Citi Bike storage bucket has been around for a while. Some of the older datasets have incorrect file extensions or contain data in different formats. By selecting a subset of files from the year 2022, you'll make things easier to manage for the purposes of this tutorial. (In a real-world use case, you'd likely reconcile the different schemas of the various data formats using a derivation.Derivations are a more advanced Flow skill.) Click Next. Flow uses the configuration you provided to initiate a connection with S3. It generates a list of collections that will store the data inside Flow. In this case, there's just one collection from the bucket. Once this process completes, you can move on to the next step. If there's an error, go back and check your configuration. Click Save and Publish. Flow deploys, or publishes, your capture, including your change to the schema. You'll see a notification when the this is complete. A subset of data from the Citi Bike tripdata bucket has been captured to a Flow collection. Now, you can materialize that data to Snowflake. Click Materialize Collections. ","version":"Next","tagName":"h2"},{"title":"Prepare Snowflake to use with Flow​","type":1,"pageTitle":"Create your first dataflow with Amazon S3 and Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/#prepare-snowflake-to-use-with-flow","content":" Before you can materialize from Flow to Snowflake, you need to complete some setup steps. Leave the Flow web app open. In a new window or tab, go to your Snowflake console. If you're a new trial user, you should have received instructions by email. For additional help in this section, see the Snowflake documentation. Create a new SQL worksheet if you don't have one open. This provides an interface where you can run queries. Paste the follow script into the console, changing the value for estuary_password from secret to a strong password): set database_name = 'ESTUARY_DB'; set warehouse_name = 'ESTUARY_WH'; set estuary_role = 'ESTUARY_ROLE'; set estuary_user = 'ESTUARY_USER'; set estuary_password = 'secret'; set estuary_schema = 'ESTUARY_SCHEMA'; -- create role and schema for Estuary create role if not exists identifier($estuary_role); grant role identifier($estuary_role) to role SYSADMIN; -- Create snowflake DB create database if not exists identifier($database_name); use database identifier($database_name); create schema if not exists identifier($estuary_schema); -- create a user for Estuary create user if not exists identifier($estuary_user) password = $estuary_password default_role = $estuary_role default_warehouse = $warehouse_name; grant role identifier($estuary_role) to user identifier($estuary_user); grant all on schema identifier($estuary_schema) to identifier($estuary_role); -- create a warehouse for estuary create warehouse if not exists identifier($warehouse_name) warehouse_size = xsmall warehouse_type = standard auto_suspend = 60 auto_resume = true initially_suspended = true; -- grant Estuary role access to warehouse grant USAGE on warehouse identifier($warehouse_name) to role identifier($estuary_role); -- grant Estuary access to database grant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role); -- change role to ACCOUNTADMIN for STORAGE INTEGRATION support to Estuary (only needed for Snowflake on GCP) use role ACCOUNTADMIN; grant CREATE INTEGRATION on account to role identifier($estuary_role); use role sysadmin; COMMIT; Click the drop-down arrow next to the Run button and click Run All. Snowflake runs all the queries and is ready to use with Flow. Return to the Flow web application. ","version":"Next","tagName":"h2"},{"title":"Materialize your Flow collection to Snowflake​","type":1,"pageTitle":"Create your first dataflow with Amazon S3 and Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/#materialize-your-flow-collection-to-snowflake","content":" You were directed to the Materializations page. All of the available materialization connectors — representing the possible data destinations — are shown as tiles. Find the Snowflake tile and click Materialization. A new form appears with the properties required to materialize to Snowflake. Click inside the Name box. Click your prefix from the dropdown and append a unique name after it. For example, myOrg/yourname/citibiketutorial. Next, fill out the required properties for Snowflake (most of these come from the script you just ran). Host URL: This is the URL you use to log into Snowflake. If you recently signed up for a trial, it should be in your email. Omit the protocol from the beginning. For example, ACCOUNTID.region.cloudprovider.snowflakecomputing.com or orgname-accountname.snowflakecomputing.com. Learn more about account identifiers and host URLs. Account: Your account identifier. This is part of the Host URL. Using the previous examples, it would be ACCOUNTID or accountname. User: ESTUARY_USER Password: secret (Substitute the password you set in the script.) Database: ESTUARY_DB Schema: ESTUARY_SCHEMA Warehouse: ESTUARY_WH Role: ESTUARY_ROLE Scroll down to view the Source Collections section and change the default name in the Table field to CitiBikeData or another name of your choosing. Every Flow collection is defined by one or more schemas. Because S3 is a cloud storage bucket, the schema used to ingest the data is quite permissive. You'll add a more detailed schema for Flow to use to materialize the data to Snowflake. This will ensure that each field from the source CSV is mapped to a column in the Snowflake table. With the collection still selected, click its Collection tab. Then, click Schema Inference. Flow examines the data and automatically generates a new readSchema. Scroll through and note the differences between this and the original schema, renamed writeSchema. Click Apply Inferred Schema. Click Next. Flow uses the configuration you provided to initiate a connection with Snowflake and generate a specification with details of the materialization. Once this process completes, you can move on to the next step. If there's an error, go back and check your configuration. Click Save and Publish. Flow publishes the materialization. Return to the Snowflake console and expand ESTUARY_DB and ESTUARY_SCHEMA. You'll find the materialized table there. ","version":"Next","tagName":"h2"},{"title":"Conclusion​","type":1,"pageTitle":"Create your first dataflow with Amazon S3 and Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/#conclusion","content":" You've created a complete Data Flow that ingests the Citi Bike CSV files from an Amazon S3 bucket and materializes them into your Snowflake database. When Citi Bike uploads new data, it'll be reflected in Snowflake in near-real-time, so long as you don't disable your capture or materialization. Data warehouses like Snowflake are designed to power data analytics. From here, you can begin any number of analytical workflows. Want to learn more?​ For more information on the connectors you used today, see the pages on S3 and Snowflake. You can create a Data Flow using any combination of supported connectors with a similar process to the one you followed in this tutorial. For a more generalized procedure, see the guide to create a Data Flow. ","version":"Next","tagName":"h2"},{"title":"Real-time CDC with MongoDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/","content":"","keywords":"","version":"Next"},{"title":"Video tutorial​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#video-tutorial","content":" ","version":"Next","tagName":"h2"},{"title":"What is CDC?​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#what-is-cdc","content":" CDC, or Change Data Capture, is a method used to track and capture changes made to data in a database. It enables the real-time capture of insertions, updates, and deletions, providing a continuous stream of changes. This stream of data is invaluable for keeping downstream systems synchronized and up-to-date with the source database, facilitating real-time analytics, replication, and data integration. In essence, CDC allows organizations to capture and react to data changes as they occur, ensuring data accuracy and timeliness across their systems. Optionally, if you are interested in the intricacies of change data capture, head over to this article, where we explain the theory behind it - this is not a requirement for this tutorial, so if you want to dive in head first, keep on reading! ","version":"Next","tagName":"h2"},{"title":"Understanding Change Events in MongoDB​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#understanding-change-events-in-mongodb","content":" Change events in MongoDB are notifications triggered by modifications to the database's data, configuration, or structure through a mechanism called change streams. Change Streams in MongoDB are a convenient way for CDC, enabling real-time monitoring of data changes without having to directly interact with the underlying oplog. CDC processes leverage Change Streams to subscribe to data changes, capturing detailed events promptly as insertions, updates, or deletions occur. This approach ensures efficient data propagation to downstream systems, scalability for high-throughput environments, and robust error handling for operations. MongoDB supports various types of change events, each catering to different aspects of database operations. For data synchronization, the following three events are the only ones that matter: Insert Events: Triggered when new documents are inserted into a collection. Update Events: Fired upon modifications to existing documents, including field updates and replacements. Delete Events: Signaled when documents are removed from a collection. In MongoDB, if you delete a key from a document, the corresponding change event that gets fired is an "update" event. This may seem counterintuitive at first, but in MongoDB, updates are atomic operations that can modify specific fields within a document, including removing keys. So, when a key is deleted from a document, MongoDB interprets it as an update operation where the specific field (i.e., the key) is being removed, resulting in an "update" event being generated in the oplog. ","version":"Next","tagName":"h2"},{"title":"Introduction to Estuary Flow​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#introduction-to-estuary-flow","content":" Estuary is the best tool for integrating CDC streams from MongoDB. Here are a few reasons why: Unlike ELT vendors, Estuary does streaming CDC and incremental snapshots, not full snapshots or batch change data extraction. This puts less of a load on the source database and lowers latency. Estuary also extracts exactly-and-only-once. As it streams snapshots and changes data it also stores it as a collection for later reuse, such as for backfilling or stream replay. ELT vendors require you to re-extract every time to want to resend the data or restart a change data stream. Estuary supports both real-time and batch. Its streaming latency is within 100ms, and it always extracts in real-time. But it supports any latency from real-time to hours or days for destinations. Estuary guarantees change data is delivered exactly once. Estuary can also maintain type I and type II slowly changing dimensions directly into a target. Estuary streaming has 50MB/sec per connection per table throughput rates, which is 5-10x any other benchmarks for CDC. It also scales horizontally to increase throughput. Time to build a real-time CDC pipeline! ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#prerequisites","content":" To follow along with the tutorial, you’ll need the following: An Estuary Flow account. If you haven’t yet, sign up for free here. A fully-managed MongoDB Capture connector is ready for you to get started. A MongoDB Atlas cluster: This tutorial uses Atlas as the source database, but Estuary supports other types of MongoDB deployments as well. ","version":"Next","tagName":"h2"},{"title":"Setting up MongoDB​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#setting-up-mongodb","content":" To prepare MongoDB for Estuary Flow, you need to ensure the following prerequisites are met: ","version":"Next","tagName":"h2"},{"title":"Credentials​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#credentials","content":" Obtain the necessary credentials for connecting to your MongoDB instance and database. This includes credentials for authentication purposes, typically a username and password. ","version":"Next","tagName":"h3"},{"title":"Read Access​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#read-access","content":" Ensure that you have read access to the MongoDB database(s) from which you intend to capture data. MongoDB utilizes Role-Based Access Control (RBAC), so make sure your user account has the appropriate permissions to read data. In MongoDB Atlas, any of the built-in Roles will work for the tutorial, but Flow needs at least read permissions over the data you wish to capture if you wish to set up more granular, restricted permissions. ","version":"Next","tagName":"h3"},{"title":"Configuration Considerations​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#configuration-considerations","content":" If you haven't already, make sure you deploy a Replica Set-type MongoDB cluster. Change streams require a replica set in order to work. A replica set is a group of MongoDB deployments that maintain the same data set. If you are working following along with a fresh MongoDB Atlas project, you shouldn’t need to configure anything manually for this, as the default free-tier instance is a cluster of 3 replicas. To learn more about replica sets, see the Replication Introduction in the MongoDB manual. Ensure that Estuary's IP addresses are allowlisted to allow access. We’ll show you how to do this in the next section. ","version":"Next","tagName":"h3"},{"title":"Configure MongoDB​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#configure-mongodb","content":" Let’s start by provisioning our database. As you can see, for this tutorial, you can just deploy an M0-category cluster, which is free to use. After the cluster has finished provisioning, we’ll need to make sure that Estuary Flow is able to connect to the database. For this, the only requirement with MongoDB Atlas is allowlisting the Estuary Flow IP addresses. Navigate to the “Network Access” page using the left hand sidebar, and using the “Add new IP address” button, create the list entry which enables the communication between the two services. Next, find your connection string by navigating to the mongosh setup page by clicking the “Connect” button on the database overview section, then choosing the “Shell” option. You’re not going to set up mongosh for this tutorial, but this is the easiest way to get ahold of the connection string we’ll be using. Copy the connection string and head over to your Estuary Flow dashboard to continue the tutorial. ","version":"Next","tagName":"h3"},{"title":"Setting up Estuary Flow​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#setting-up-estuary-flow","content":" On the dashboard, create a new capture by navigating to the “Sources” menu using the sidebar, then pressing the “New Capture” button. In the list of available connectors, search for “MongoDB”, then press “Capture”. Pressing this button will bring you to the connector configuration page, where you’ll be able to provision your fully managed real-time Data Flow. ","version":"Next","tagName":"h2"},{"title":"MongoDB Capture Configuration​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#mongodb-capture-configuration","content":" As a first step, in the Capture Details section, name your capture and optionally add a description for it. Once you are finished, step down to the second configuration section, called “Endpoint Config”. Here you have to use the address for the database you took a note of in the MongoDB setup section, along with your username and password which you configured when setting up MongoDB Atlas. If your user has access to all databases, ensure that in your MongoDB address, you specify the ?authSource=admin parameter in the connection address. In this case, authentication is performed through your admin database. As for the "Database" option, feel free to leave it empty, that way the automated discovery process of Flow will make sure every available database is ready for data extraction. After you press the blue “Next” button in the top right corner, Flow will automatically crawl through the connection to discover available resources. Next up, you’ll see the third, and final configuration section, where you are able to view and choose from all the databases and collections which are discovered by Flow. ","version":"Next","tagName":"h3"},{"title":"Documents and Collections​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#documents-and-collections","content":" Before we initialize the connector, let’s talk a little bit about how incoming data is represented in Flow. The documents of your flows are stored in collections: real-time data lakes of JSON documents in cloud storage. Keep in mind, these are not the same documents and collections as the ones in MongoDB, only the names are similar, but we are talking about separate systems. Collections being stored in an object storage mean that once you start capturing data, you won’t have to worry about it not being available to replay – object stores such as S3 can be configured to cheaply store data forever. See docs page for more information about documents. To see how Flow parsed the incoming records, click on the “Collection” tab on the UI. When you set up a capture from MongoDB using the Flow web app, the underlying collection specifications will look something like this: key: [ /_id ] writeSchema: type: object properties: _id: { type: string } required: [ _id ] readSchema: allOf: - $ref: flow://write-schema - $ref: flow://inferred-schema This specification uses separate read and write schemas. The writeSchema is extremely permissive, and only requires an _id property with a string value. The readSchema references flow://inferred-schema, which expands to the current inferred schema when the collection is published. MongoDB documents have a mandatory _id field that is used as the key of the collection. But that is essentially the only requirement. You can't know what other fields may exist on MongoDB documents until you've read them. On the UI, for this reason, only three fields are visible initially in the collection schema tab. ","version":"Next","tagName":"h3"},{"title":"Automating schema evolution​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#automating-schema-evolution","content":" In addition to selecting the collections for capture, this interface provides access to three settings that govern schema evolution. In a NoSQL database environment like MongoDB, schema alterations are frequent occurrences. Manually synchronizing source and destination schemas can end up being a lot of maintenance. To help with this, Estuary introduces a more sophisticated schema evolution strategy. With Estuary Flow, teams can opt to suspend the Data Flow using data contracts, automate the update of the target schema with the new MongoDB schema, or create a new table in the destination to maintain separation between old and new schemas. Details can be found in our schema evolution docs. Schema evolutions serve to prevent errors stemming from discrepancies between specifications in a number of ways: Materializations will automatically apply backward-compatible schema changes, like adding a new column. This doesn't require re-backfilling the target tables or re-creating the Flow collection. For more complex scenarios, the evolution adjusts the affected materialization bindings to increment their backfill counter, prompting the materialization process to reconstruct the resource (such as a database table) and backfill it from the offset. In instances where necessary, such as when the collection key or logical partitioning undergoes changes, the evolution generates a completely new collection with a numerical suffix (e.g., _v2). This new collection initializes as empty and undergoes backfilling from the source. Moreover, the evolution updates all captures and materializations referencing the old collection to point to the new collection, incrementing their backfill counters accordingly. This method is more intricate and is only invoked when essential alterations are identified. In these scenarios, the names of destination resources remain unaltered. For instance, a materialization to Postgres would drop and re-establish the affected tables with their original names. ","version":"Next","tagName":"h3"},{"title":"Publishing the Capture​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#publishing-the-capture","content":" To finalize the connector configuration and kick it off, press the “Save and Publish” button. Flow will test, save and publish your capture. You’ll see a similar screen if everything went well or if there were any issues setting up the connector, you’ll see detailed error messages instead. During the initial database snapshot – which is triggered automatically – the connector seamlessly captures change events by continuously monitoring change streams while concurrently executing collection scans to backfill pre-existing documents. Following the initial snapshot, the connector perpetually monitors change streams to capture all subsequent changes in real-time. Incremental backfills in the MongoDB connector follow a straightforward approach to ensure comprehensive data capture with minimal latency. Initially, all tracked change streams are synchronized to maintain data integrity. Then, a targeted backfilling effort occurs across MongoDB collections until all are up to date. Continuous monitoring via change streams ensures ongoing data capture and means there is no need to pause replication during an ongoing backfill. In the event of a pause in the connector's process, it resumes capturing change events from the point of interruption. However, the connector's ability to accomplish this depends on the size of the replica set oplog. In certain scenarios where the pause duration is significant enough for the oplog to purge old change events, the connector may necessitate redoing the backfill to maintain data consistency. To ensure reliable data capture, it is recommended to adjust the oplog size or set a minimum retention period. A recommended minimum retention period of at least 24 hours is sufficient for most cases. ","version":"Next","tagName":"h3"},{"title":"Real-time CDC​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#real-time-cdc","content":" Let’s head over to the collections page to see our arriving documents. Looks like all of the selected MongoDB collections have been fully replicated into Flow by the initial backfill. Let’s take a look at the movies collection to see what details Flow can tell us about the documents. You can see some statistics about the integration throughput and you can also take a look at the actual documents in a preview window. You can also check out the generated specification, which is the Flow’s behind-the-scenes declarative way of representing the Collection resource. For the movies collection, this is what it looks like: { "writeSchema": { "type": "object", "required": ["_id"], "properties": { "_id": { "type": "string" }, "_meta": { "$schema": "http://json-schema.org/draft/2020-12/schema", "properties": { "op": { "type": "string", "enum": ["c", "u", "d"], "title": "Change Operation", "description": "Change operation type: 'c' Create/Insert 'u' Update 'd' Delete." } }, "type": "object" } }, "x-infer-schema": true }, "readSchema": { "allOf": [ { "$ref": "flow://write-schema" }, { "$ref": "flow://inferred-schema" } ] }, "key": ["/_id"] } You can see the flexible readSchema configuration in action we mentioned above. You can use the preview window on the collections “Overview” page to quickly test how change events propagate from MongoDB. Head over to the MongoDB Atlas UI and insert a new document into the movies collection. Here’s a sample JSON (describing non-existent but very intriguing movie) you can copy paste into the pop-up modal to spare you the trouble. { "title": "Dataflow", "fullplot": "In a near-future world driven by data, a team of maverick engineers and programmers set out to revolutionize the way information is processed and transmitted. As they delve deeper into the complexities of real-time data streaming, they uncover dark secrets and face moral dilemmas that threaten to unravel their ambitious project.", "plot": "A team of brilliant engineers embark on a groundbreaking project to develop a real-time data streaming platform, but they soon discover unexpected challenges and threats lurking in the digital realm.", "genres": ["Drama", "Sci-Fi", "Thriller"], "runtime": 135, "cast": [ "Emily Blunt", "Michael B. Jordan", "Idris Elba", "Zendaya", "Oscar Isaac" ], "poster": "https://example.com/posters/real-time-data-streaming.jpg", "languages": ["English"], "released": 1739808000000, "directors": ["Christopher Nolan"], "rated": "PG-13", "awards": { "wins": 3, "nominations": 8, "text": "3 wins, 8 nominations" }, "lastupdated": "2024-04-30 10:15:00.000000", "year": 2024, "imdb": { "rating": 8.5, "votes": 15234, "id": 1001 }, "countries": ["USA", "United Kingdom"], "type": "movie", "tomatoes": { "viewer": { "rating": 4.2, "numReviews": 3856, "meter": 82 }, "fresh": 34, "critic": { "rating": 8.0, "numReviews": 22, "meter": 91 }, "rotten": 2, "lastUpdated": 1739894400000 }, "num_mflix_comments": 120 } After you insert the document, check out the collection preview on the Flow UI to verify it has indeed arrived. The process for updating and deleting collections in MongoDB works similarly. ","version":"Next","tagName":"h2"},{"title":"Wrapping up​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#wrapping-up","content":" In this tutorial, you set up a MongoDB Change Data Capture (CDC) integration using Estuary Flow. Throughout the process, you learned about the technical nuances of capturing and synchronizing data changes from MongoDB collections in real-time. Key takeaways from this tutorial: MongoDB's document-based approach and schema flexibility present unique challenges and opportunities for Change Data Capture workflows. You explored the prerequisites and configuration settings required to establish a seamless connection between MongoDB and Estuary, ensuring efficient data capture and synchronization. Estuary's schema evolution capabilities enable data teams to manage schema changes effectively, ensuring data consistency and integrity across source and destination systems. You learned how Flow continuously monitors MongoDB change streams and executes backfilling processes to capture changes accurately, even in the event of interruptions or schema alterations. ","version":"Next","tagName":"h2"},{"title":"Next Steps​","type":1,"pageTitle":"Real-time CDC with MongoDB","url":"/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/#next-steps","content":" That’s it! You should have everything you need to know to create your own data pipeline for capturing change events from MongoDB! Now try it out on your own CloudSQL database or other sources. If you want to learn more, make sure you read through the Estuary documentation. You’ll find instructions on how to use other connectors here. There are more tutorials here. Also, don’t forget to join the Estuary Slack Community! ","version":"Next","tagName":"h2"},{"title":"Flow user guides","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/","content":"Flow user guides In this section, you'll find step-by-step guides that walk you through common Flow tasks. These guides are designed to help you work with Data Flows in production — we assume you have your own data and are familiar with your source and destination systems. You might be here to get your data moving with Flow as quickly as possible, reshape your collection with a derivation, or create a secure connection to your database. If you'd prefer a tailored learning experience with sample data, check out the Flow tutorials.","keywords":"","version":"Next"},{"title":"Create a basic Data Flow","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/create-dataflow/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Create a basic Data Flow","url":"/pr-preview/pr-1594/guides/create-dataflow/#prerequisites","content":" This guide is intended for new Flow users and briefly introduces Flow's key concepts. Though it's not required, you may find it helpful to read the high level concepts documentation for more detail before you begin. ","version":"Next","tagName":"h2"},{"title":"Introduction​","type":1,"pageTitle":"Create a basic Data Flow","url":"/pr-preview/pr-1594/guides/create-dataflow/#introduction","content":" In Estuary Flow, you create Data Flows to connect data source and destination systems. The simplest Data Flow comprises three types of entities: A data capture, which ingests data from an external sourceOne or more collections, which store that data in a cloud-backed data lakeA materialization, to push the data to an external destination The capture and materialization each rely on a connector. A connector is a plug-in component that interfaces between Flow and whatever data system you need to connect to. Here, we'll walk through how to leverage various connectors, configure them, and deploy your Data Flow. ","version":"Next","tagName":"h2"},{"title":"Create a capture​","type":1,"pageTitle":"Create a basic Data Flow","url":"/pr-preview/pr-1594/guides/create-dataflow/#create-a-capture","content":" You'll first create a capture to connect to your data source system. This process will create one or more collections in Flow, which you can then materialize to another system. Go to the Flow web application at dashboard.estuary.dev and sign in using the credentials provided by your Estuary account manager. Click the Sources tab and choose New Capture. Choose the appropriate Connector for your desired data source. A form appears with the properties required for that connector. A documentation page with details about that connector appears in the side panel. You can also browse the connectors reference in your browser. Type a name for your capture. Your capture name must begin with a prefix to which you have access. In the Name field, click the drop-down arrow and select an available prefix. Append a unique capture name after the / to create the full name, for example acmeCo/myFirstCapture. Fill out the required properties and click Next. Flow uses the provided information to initiate a connection to the source system. It identifies one or more data resources — these may be tables, data streams, or something else, depending on the connector. These are each mapped to a collection. The Output Collections browser appears, showing this list of available collections. You can decide which ones you want to capture. Look over the list of available collections. All are selected by default. You can remove collections you don't want to capture, change collection names, and for some connectors, modify other properties. tip Narrow down a large list of available collections by typing in the Search Bindings box. If you're unsure which collections you want to keep or remove, you can look at their schemas. In the Output Collections browser, select a collection and click the Collection tab to view its schema and collection key. . For many source systems, you'll notice that the collection schemas are quite permissive. You'll have the option to apply more restrictive schemas later, when you materialize the collections. If you made any changes to output collections, click Next again. Once you're satisfied with the configuration, click Save and Publish. You'll see a notification when the capture publishes successfully. Click Materialize collections to continue. ","version":"Next","tagName":"h2"},{"title":"Create a materialization​","type":1,"pageTitle":"Create a basic Data Flow","url":"/pr-preview/pr-1594/guides/create-dataflow/#create-a-materialization","content":" Now that you've captured data into one or more collections, you can materialize it to a destination. Find the tile for your desired data destination and click Materialization. The page populates with the properties required for that connector. More details are on each connector are provided in the connectors reference. Choose a unique name for your materialization like you did when naming your capture; for example, acmeCo/myFirstMaterialization. Fill out the required properties in the Endpoint Configuration. Click Next. Flow initiates a connection with the destination system. The Endpoint Config has collapsed and the Source Collections browser is now prominent. It shows each collection you captured previously. All of them will be mapped to a resource in the destination. Again, these may be tables, data streams, or something else. When you publish the Data Flow, Flow will create these new resources in the destination. Now's your chance to make changes to the collections before you materialize them. Optionally remove some collections or add additional collections. Type in the Search Collections box to find a collection. To remove a collection, click the x in its table row. You can also click the Remove All button. Optionally apply a stricter schema to each collection to use for the materialization. Depending on the data source, you may have captured data with a fairly permissive schema. You can tighten up the schema so it'll materialize to your destination in the correct shape. (This isn't necessary for database and SaaS data sources, so the option won't be available.) Choose a collection from the list and click its Collection tab. Click Schema Inference. The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for the materialization. Review the new schema and click Apply Inferred Schema. You can exert even more control over the output data structure using the Field Selector on the Config tab.Learn how. If you've made any changes to source fields, click Next again. Click Save and publish. You'll see a notification when the full Data Flow publishes successfully. ","version":"Next","tagName":"h2"},{"title":"What's next?​","type":1,"pageTitle":"Create a basic Data Flow","url":"/pr-preview/pr-1594/guides/create-dataflow/#whats-next","content":" Now that you've deployed your first Data Flow, you can explore more possibilities. Read the high level concepts to better understand how Flow works and what's possible. Create more complex Data Flows by mixing and matching collections in your captures and materializations. For example: Materialize the same collection to multiple destinations. If a capture produces multiple collections, materialize each one to a different destination. Materialize collections that came from different sources to the same destination. Advanced users can modify collection schemas, apply data reductions, or transform data with a derivation ","version":"Next","tagName":"h2"},{"title":"Configure connections with SSH tunneling","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/connect-network/","content":"","keywords":"","version":"Next"},{"title":"General setup​","type":1,"pageTitle":"Configure connections with SSH tunneling","url":"/pr-preview/pr-1594/guides/connect-network/#general-setup","content":" Activate an SSH implementation on a server, if you don't have one already. Consult the documentation for your server's operating system and/or cloud service provider, as the steps will vary. Configure the server to your organization's standards, or reference the SSH documentation for basic configuration options. Referencing the config files and shell output, collect the following information: The SSH user, which will be used to log into the SSH server, for example, sshuser. You may choose to create a new user for this workflow.The SSH endpoint for the SSH server, formatted as ssh://user@hostname[:port]. This may look like the any of following: ssh://sshuser@ec2-198-21-98-1.compute-1.amazonaws.comssh://sshuser@198.21.98.1ssh://sshuser@198.21.98.1:22 Hint The SSH default port is 22. Depending on where your server is hosted, you may not be required to specify a port, but we recommend specifying :22 in all cases to ensure a connection can be made. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key Taken together, these configuration details would allow you to log into the SSH server from your local machine. They'll allow the connector to do the same. Configure your internal network to allow the SSH server to access your capture or materialization endpoint. To grant external access to the SSH server, it's essential to configure your network settings accordingly. The approach you take will be dictated by your organization's IT policies. One recommended step is to allowlist the Estuary IP addresses. This ensures that connections from this specific IP are permitted through your network's firewall or security measures. ","version":"Next","tagName":"h2"},{"title":"Setup for AWS​","type":1,"pageTitle":"Configure connections with SSH tunneling","url":"/pr-preview/pr-1594/guides/connect-network/#setup-for-aws","content":" To allow SSH tunneling to a database instance hosted on AWS, you'll need to create a virtual computing environment, or instance, in Amazon EC2. Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key Import your SSH key into AWS. Launch a new instance in EC2. During setup: Configure the security group to allow SSH connection from anywhere.When selecting a key pair, choose the key you just imported. Connect to the instance, setting the user name to ec2-user. Find and note the instance's public DNS. This will be formatted like: ec2-198-21-98-1.compute-1.amazonaws.com. ","version":"Next","tagName":"h2"},{"title":"Setup for Google Cloud​","type":1,"pageTitle":"Configure connections with SSH tunneling","url":"/pr-preview/pr-1594/guides/connect-network/#setup-for-google-cloud","content":" To allow SSH tunneling to a database instance hosted on Google Cloud, you must set up a virtual machine (VM). Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key If your Google login differs from your local username, generate a key that includes your Google email address as a comment: ssh-keygen -m PEM -t rsa -C user@domain.com Create and start a new VM in GCP, choosing an image that supports OS Login. Add your public key to the VM. Reserve an external IP address and connect it to the VM during setup. Note the generated address. ","version":"Next","tagName":"h2"},{"title":"Setup for Azure​","type":1,"pageTitle":"Configure connections with SSH tunneling","url":"/pr-preview/pr-1594/guides/connect-network/#setup-for-azure","content":" To allow SSH tunneling to a database instance hosted on Azure, you'll need to create a virtual machine (VM) in the same virtual network as your endpoint database. Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key Create and connect to a VM in a virtual network, and add the endpoint database to the network. Create a new virtual network and subnet. Create a Linux or Windows VM within the virtual network, directing the SSH public key source to the public key you generated previously. Note the VM's public IP; you'll need this later. Create a service endpoint for your database in the same virtual network as your VM. Instructions for Azure Database For PostgreSQL can be found here; note that instructions for other database engines may be different. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Configure connections with SSH tunneling","url":"/pr-preview/pr-1594/guides/connect-network/#configuration","content":" After you've completed the prerequisites, you should have the following parameters: SSH Endpoint / sshEndpoint: the remote SSH server's hostname, or public IP address, formatted as ssh://user@hostname[:port] The SSH default port is 22. Depending on where your server is hosted, you may not be required to specify a port, but we recommend specifying :22 in all cases to ensure a connection can be made. Private Key / privateKey: the contents of the SSH private key file Use these to add SSH tunneling to your capture or materialization definition, either by filling in the corresponding fields in the web app, or by working with the YAML directly. Reference the Connectors page for a YAML sample. ","version":"Next","tagName":"h2"},{"title":"Customize materialized fields","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/customize-materialization-fields/","content":"","keywords":"","version":"Next"},{"title":"Capture desired fields and generate projections​","type":1,"pageTitle":"Customize materialized fields","url":"/pr-preview/pr-1594/guides/customize-materialization-fields/#capture-desired-fields-and-generate-projections","content":" Any field you eventually want to materialize must be included in the collection's schema. It's ok if the field is nested in the JSON structure; you'll flatten the structure with projections. caution In this workflow, you'll edit a collection. This change can impact other downstream materializations and derivations. Use caution and be mindful of any edit's consequences before publishing. ","version":"Next","tagName":"h2"},{"title":"Captured collections​","type":1,"pageTitle":"Customize materialized fields","url":"/pr-preview/pr-1594/guides/customize-materialization-fields/#captured-collections","content":" If the collection you're using was captured directly, follow these steps. Go to the Captures page of the Flow web app and locate the capture that produced the collection. Click the Options button and choose Edit Specification. Under Output Collections, choose the binding that corresponds to the collection. Then, click the Collection tab. In the list of fields, look for the fields you want to materialize. If they're present and correctly named, you can skip toincluding them in the materialization. hint: Compare the field name and pointer. For nested pointers, you'll probably want to change the field name to omit slashes. If your desired fields aren't present or need to be re-named, edit the collection schema manually: Click Edit. Add missing fields to the schema in the correct location based on the source data structure. Click Close. Generate projections for new or incorrectly named fields. If available, click the Schema Inference button. The Schema Inference Window appears. Flow cleans up your schema and adds projections for new fields. Manually change the names of projected fields. These names will be used by the materialization and shown in the endpoint system as column names or the equivalent. Click Next. info Schema Inference isn't available for all capture types. You can also add projections manually with flowctl. Refer to the guide to editing with flowctl andhow to format projections. Repeat steps 3 through 6 with other collections, if necessary. Click Save and Publish. ","version":"Next","tagName":"h3"},{"title":"Derived collections​","type":1,"pageTitle":"Customize materialized fields","url":"/pr-preview/pr-1594/guides/customize-materialization-fields/#derived-collections","content":" If the collection you're using came from a derivation, follow these steps. Pull the derived collection's specification locally using flowctl. flowctl catalog pull-specs --name <yourOrg/full/collectionName> Review the collection's schema to see if the fields of interest are included. If they're present, you can skip toincluding them in the materialization. If your desired fields aren't present or are incorrectly named, add any missing fields to the schema in the correct location based on the source data structure. Use schema inference to generate projections for the fields. flowctl preview --infer-schema --source <full\\path\\to\\flow.yaml> --collection <yourOrg/full/collectionName> Review the updated schema. Manually change the names of projected fields. These names will be used by the materialization and shown in the endpoint system as column names or the equivalent. Re-publish the collection specification. ","version":"Next","tagName":"h3"},{"title":"Include desired fields in your materialization​","type":1,"pageTitle":"Customize materialized fields","url":"/pr-preview/pr-1594/guides/customize-materialization-fields/#include-desired-fields-in-your-materialization","content":" Now that all your fields are present in the collection schema as projections, you can choose which ones to include in the materialization. Every included field will be mapped to a table column or equivalent in the endpoint system. If you haven't created the materialization, begin the process. Pause once you've selected the collections to materialize. If your materialization already exists, navigate to the edit materialization page. In the Collection Selector, choose the collection whose output fields you want to change. Click its Collection tab. Review the listed field. In most cases, Flow automatically detects all fields to materialize, projected or otherwise. However, a projected field may still be missing, or you may want to exclude other fields. If you want to make changes, click Edit. Use the editor to add the fields stanza to the collection's binding specification. Learn more about configuring fields and view a sample specification. Choose whether to start with Flow's recommended fields. Under fields, set recommended to true or false. If you choose true, you can exclude fields later. Use include to add missing projections, or exclude to remove fields. Click Close. Repeat steps 2 through 8 with other collections, if necessary. Click Save and Publish. The named, included fields will be reflected in the endpoint system. ","version":"Next","tagName":"h2"},{"title":"PostgreSQL CDC streaming to Snowflake","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/","content":"","keywords":"","version":"Next"},{"title":"Introduction​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#introduction","content":" In this tutorial, we'll set up a streaming CDC pipeline from PostgreSQL to Snowflake using Estuary Flow. By the end, you’ll have learned everything you need to know about building a pipeline on your own. You'll use Flow's PostgreSQL capture connector and Snowflake materialization connector to set up an end-to-end CDC pipeline in three steps: First, you’ll ingest change event data from a PostgreSQL database, using a table filled with generated realistic product data. Then, you’ll learn how to configure Flow to persist data as collections while maintaining data integrity. And finally, you will see how you can materialize these collections in Snowflake to make them ready for analytics! By the end of this tutorial, you'll have established a robust and efficient data pipeline with near real-time replication of data from PostgreSQL to Snowflake. Before you get started, make sure you do two things. Sign up for Estuary Flow here. It’s simple, fast and free. Make sure you also join the Estuary Slack Community. Don’t struggle. Just ask a question. ","version":"Next","tagName":"h2"},{"title":"What is CDC?​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#what-is-cdc","content":" CDC, or Change Data Capture, is a method used to track and capture changes made to data in a database. It enables the real-time capture of insertions, updates, and deletions, providing a continuous stream of changes. This stream of change data is invaluable for keeping downstream systems synchronized and up-to-date with the source database, facilitating real-time analytics, replication, and data integration. In essence, CDC allows organizations to capture and react to data changes as they occur, ensuring data accuracy and timeliness across their systems. CDC provides a lower-latency, lower-load way to extract data. It’s also often the only way to capture every change as well as deletes, which are harder to track with batch-based extraction. If you are interested in the intricacies of change data capture, head over to this article, where we explain the theory behind it - this is not a requirement for this tutorial, so if you want to dive in head first, keep on reading! ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#prerequisites","content":" This tutorial will assume you have access to the following things: Docker: for convenience, we are providing a docker compose definition which will allow you to spin up a database and a fake data generator service in about 5 seconds! ngrok: Flow is a fully managed service. Because the database used in this tutorial will be running on your machine, you’ll need something to expose it to the internet. ngrok is a lightweight tool that does just that. Snowflake account: The target data warehouse for our flow is Snowflake. In order to follow along with the tutorial, a trial account is perfectly fine. ","version":"Next","tagName":"h2"},{"title":"Step 1. Set up source database​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#step-1-set-up-source-database","content":" ","version":"Next","tagName":"h2"},{"title":"PostgreSQL setup​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#postgresql-setup","content":" As this tutorial is focused on CDC replication from PostgreSQL, we’ll need a database. We recommend you create this database first, so you can learn Flow more easily. Then try these steps on your own database. Let’s take a look at what we are working with! Save the below yaml snippet as a file called docker-compose.yml. This docker-compose.yml file contains the service definitions for the PostgreSQL database and the mock data generator service. Since V2, compose is integrated into your base Docker package, there’s no need to download any separate tooling! docker-compose.yml services: postgres: image: postgres:latest container_name: postgres_cdc hostname: postgres_cdc restart: unless-stopped user: postgres environment: POSTGRES_USER: postgres POSTGRES_DB: postgres POSTGRES_PASSWORD: postgres command: - "postgres" - "-c" - "wal_level=logical" healthcheck: test: ["CMD-SHELL", "sh -c 'pg_isready -U flow_capture -d postgres'"] interval: 5s timeout: 10s retries: 120 volumes: - ./init.sql:/docker-entrypoint-initdb.d/init.sql ports: - "5432:5432" datagen: image: materialize/datagen container_name: datagen restart: unless-stopped environment: POSTGRES_HOST: postgres_cdc POSTGRES_PORT: 5432 POSTGRES_DB: postgres POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres entrypoint: "datagen -s /app/schemas/products.sql -n 10000 -f postgres -w 1000" depends_on: postgres: condition: service_healthy volumes: - ./schemas/products.sql:/app/schemas/products.sql Don’t be alarmed by all these Docker configurations, they are made to be reproducible on any machine, so you don’t have to worry about modifying anything in them! Before you spin up the database, let’s take a quick look at what exactly you can expect to happen. Next up, create a folder called schemas and paste the below SQL DDL into a file called products.sql. This file contains the schema of the demo data. This file defines the schema via a create table statement, but the actual table creation happens in the init.sql file, this is just a quirk of the Datagen data generator tool. products.sql CREATE TABLE "public"."products" ( "id" int PRIMARY KEY, "name" varchar COMMENT 'faker.internet.userName()', "merchant_id" int NOT NULL COMMENT 'faker.datatype.number()', "price" int COMMENT 'faker.datatype.number()', "status" varchar COMMENT 'faker.datatype.boolean()', "created_at" timestamp DEFAULT (now()) ); If you take a closer look at the schema definition, you can see that in the COMMENT attribute we define Python snippets which actually tell Datagen how to generate fake data for those fields! Finally, create the init.sql file, which contains the database-level requirements to enable Flow to stream CDC data. init.sql CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION; GRANT pg_read_all_data TO flow_capture; CREATE TABLE products ( "id" int PRIMARY KEY, "name" varchar COMMENT 'faker.internet.userName()', "merchant_id" int NOT NULL COMMENT 'faker.datatype.number()', "price" int COMMENT 'faker.datatype.number()', "status" varchar COMMENT 'faker.datatype.boolean()', "created_at" timestamp DEFAULT (now()) ); CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, public.products; In the init.sql file, you create the products table and all the database objects Flow requires for real-time CDC streaming. ","version":"Next","tagName":"h3"},{"title":"Configuring PostgreSQL for CDC​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#configuring-postgresql-for-cdc","content":" To enable CDC replication in PostgreSQL, several database objects need to be created and configured. These objects facilitate the capture and propagation of data changes to downstream systems. Let's examine each object and its significance in the context of CDC replication: CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION; This user is dedicated to the CDC replication process. It is granted the necessary permissions to read all data from the database, allowing it to capture changes across tables efficiently. In a production environment, make sure you use a more secure password than what is in the example. GRANT pg_read_all_data TO flow_capture; Granting the pg_read_all_data privilege to the flow_capture user ensures that it can access and read data from all tables in the database, essential for capturing changes. pg_read_all_data is used for convenience, but is not a hard requirement, since it is possible to grant a more granular set of permissions. For more details check out the connector docs. CREATE TABLE products (...) The source tables, such as the products table in this example, contain the data whose changes we want to capture and replicate. It is recommended for tables to have a primary key defined, although not a hard requirement for CDC. CREATE TABLE IF NOT EXISTS public.flow_watermarks (...) The flow_watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; The flow_capture user needs full privileges on the flow_watermarks table to insert, update, and query metadata related to the replication process. CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, public.products; A publication defines a set of tables whose changes will be replicated. In this case, the flow_publication publication includes the public.flow_watermarks and public.products tables. These commands configure the flow_publication publication to publish changes via partition root and add the specified tables to the publication. By setting publish_via_partition_root to true, the publication ensures that updates to partitioned tables are correctly captured and replicated. The table in this tutorial is not partitioned, but we recommend always setting publish_via_partition_root when creating a publication. These objects form the backbone of a robust CDC replication setup, ensuring data consistency and integrity across systems. After the initial setup, you will not have to touch these objects in the future, unless you wish to start ingesting change events from a new table. With that out of the way, you’re ready to start the source database. In order to initialize Postgres and the fake data generator service, all you have to do is execute the following (to free up your current terminal, use the -d flag so the containers run in a daemonized background process): docker compose up After a few seconds, you should see that both services are up and running. The postgres_cdc service should print the following on the terminal: postgres_cdc | LOG: database system is ready to accept connections While the datagen service will be a little bit more spammy, as it prints every record it generates, but don’t be alarmed, this is enough for us to verify that both are up and running. Let’s see how we can expose the database so Flow can connect to it. ","version":"Next","tagName":"h3"},{"title":"Expose the database to the internet via ngrok​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#expose-the-database-to-the-internet-via-ngrok","content":" As mentioned above, the next step is to make the database available for other services. To do this in one quick command, we can use ngrok, a free CLI tool that enables tunneling of services. In our case we only want to expose the port 5432 and only the tcp protocol. ngrok tcp 5432 You should immediately be greeted with a screen that contains the public URL for the tunnel we just started! In the example above, the public URL 5.tcp.eu.ngrok.io:14407 is mapped to localhost:5432, which is the address of the Postgres database. Don’t close this window while working on the tutorial as this is required to keep the connections between Flow and the database alive. Before we jump into setting up the replication, you can quickly verify the data being properly generated by connecting to the database and peeking into the products table, as shown below: ~ psql -h 5.tcp.eu.ngrok.io -p 14407 -U postgres -d postgres Password for user postgres: psql (16.2) Type "help" for help. postgres=# \\d List of relations Schema | Name | Type | Owner --------+-----------------+-------+---------- public | flow_watermarks | table | postgres public | products | table | postgres (2 rows) postgres=# select count(*) from products; count ------- 2637 (1 row) postgres=# select count(*) from products; count ------- 2642 (1 row) By executing a count(*) statement a few seconds apart you are able to verify that data is in fact being written into the table. ","version":"Next","tagName":"h3"},{"title":"Step 2. Set up a Capture​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#step-2-set-up-a-capture","content":" Good news, the hard part is over! Smooth sailing from here on out. Head over to your Flow dashboard (if you haven’t registered yet, you can do so here.) and create a new Capture. A capture is how Flow ingests data from an external source. Every Data Flow starts with a Capture. Go to the sources page by clicking on the Sources on the left hand side of your screen, then click on + New Capture Configure the connection to the database based on the information we gathered in the previous step and press Next. On the following page, we can configure how our incoming data should be represented in Flow as collections. As a quick refresher, let’s recap how Flow represents data on a high level. Documents The documents of your flows are stored in collections: real-time data lakes of JSON documents in cloud storage. Documents being backed by an object storage mean that once you start capturing data, you won’t have to worry about it not being available to replay – object stores such as S3 can be configured to cheaply store data forever. See docs page for more information. Schemas Flow documents and collections always have an associated schema that defines the structure, representation, and constraints of your documents. In most cases, Flow generates a functioning schema on your behalf during the discovery phase of capture, which has already automatically happened - that’s why you’re able to take a peek into the structure of the incoming data! To see how Flow parsed the incoming records, click on the Collection tab and verify the inferred schema looks correct. Before you advance to the next step, let’s take a look at the other configuration options we have here. You’ll see three toggles, all turned on by default: Automatically keep schemas up to date Automatically add new source collections Breaking changes re-version collections All of these settings relate to how Flow handles schema evolution, so let’s take a quick detour to explain them from a high-level perspective. Estuary Flow's schema evolution feature seamlessly handles updates to dataset structures within a Data Flow, ensuring uninterrupted operation. Collection specifications define each dataset, including key, schema, and partitions. When specs change, schema evolution automatically updates associated components to maintain compatibility. It addresses breaking changes by updating materializations or recreating collections with new names, preventing disruptions. Common causes of breaking changes include modifications to collection schemas, which require updates to materializations. Overall, schema evolution streamlines adaptation to structural changes, maintaining smooth data flow within the system. For more information, check out the dedicated documentation page for schema evolution. For the sake of this tutorial, feel free to leave everything at its default setting and press Next again, then Save and Publish to deploy the connector and kick off a backfill. ","version":"Next","tagName":"h2"},{"title":"Step 3. Set up a Materialization​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#step-3-set-up-a-materialization","content":" Similarly to the source side, we’ll need to set up some initial configuration in Snowflake to allow Flow to materialize collections into a table. Preparing Snowflake for use with Estuary Flow involves the following steps: 1. Keep the Flow web app open and open a new tab or window to access your Snowflake console. 3. Create a new SQL worksheet. This provides a platform to execute queries. 4. Paste the provided script into the SQL console, adjusting the value for estuary_password to a strong password. set database_name = 'ESTUARY_DB'; set warehouse_name = 'ESTUARY_WH'; set estuary_role = 'ESTUARY_ROLE'; set estuary_user = 'ESTUARY_USER'; set estuary_password = 'secret'; set estuary_schema = 'ESTUARY_SCHEMA'; -- create role and schema for Estuary create role if not exists identifier($estuary_role); grant role identifier($estuary_role) to role SYSADMIN; -- Create snowflake DB create database if not exists identifier($database_name); use database identifier($database_name); create schema if not exists identifier($estuary_schema); -- create a user for Estuary create user if not exists identifier($estuary_user) password = $estuary_password default_role = $estuary_role default_warehouse = $warehouse_name; grant role identifier($estuary_role) to user identifier($estuary_user); grant all on schema identifier($estuary_schema) to identifier($estuary_role); -- create a warehouse for estuary create warehouse if not exists identifier($warehouse_name) warehouse_size = xsmall warehouse_type = standard auto_suspend = 60 auto_resume = true initially_suspended = true; -- grant Estuary role access to warehouse grant USAGE on warehouse identifier($warehouse_name) to role identifier($estuary_role); -- grant Estuary access to database grant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role); -- change role to ACCOUNTADMIN for STORAGE INTEGRATION support to Estuary (only needed for Snowflake on GCP) use role ACCOUNTADMIN; grant CREATE INTEGRATION on account to role identifier($estuary_role); use role sysadmin; COMMIT; 5. Execute all the queries by clicking the drop-down arrow next to the Run button and selecting "Run All." 6. Snowflake will process the queries, setting up the necessary roles, databases, schemas, users, and warehouses for Estuary Flow. 7. Once the setup is complete, return to the Flow web application to continue with the integration process. Back in Flow, head over to the Destinations page, where you can create a new Materialization. Choose Snowflake and start filling out the connection details based on the values inside the script you executed in the previous step. If you haven’t changed anything, this is how the connector configuration should look like: You can grab your Snowflake host URL and account identifier by navigating to these two little buttons on the Snowflake UI. If you scroll down to the Advanced Options section, you will be able to configure the "Update Delay" parameter. If you leave this parameter unset, the default value of 30 minutes will be used. The Update Delay parameter in Estuary materializations offers a flexible approach to data ingestion scheduling. It represents the amount of time the system will wait before it begins materializing the latest data. For example, if an update delay is set to 2 hours, the materialization task will pause for 2 hours before processing the latest available data. This delay ensures that data is not pulled in immediately after it becomes available, allowing your Snowflake warehouse to go idle and be suspended in between updates, which can significantly reduce the number of credits consumed. After the connection details are in place, the next step is to link the capture we just created to Flow is able to see collections we are loading data into from Postgres. You can achieve this by clicking on the “Source from Capture” button, and selecting the name of the capture from the table. After pressing continue, you are met with a few configuration options, but for now, feel free to press Next, then Save and Publish in the top right corner, the defaults will work perfectly fine for this tutorial. A successful deployment will look something like this: And that’s pretty much it, you’ve successfully published a real-time CDC pipeline. Let’s check out Snowflake to see how the data looks. Looks like the data is arriving as expected, and the schema of the table is properly configured by the connector based on the types of the original table in Postgres. To get a feel for how the data flow works; head over to the collection details page on the Flow web UI to see your changes immediately. On the Snowflake end, they will be materialized after the next update. Based on your configuration of the "Update Delay" parameter when setting up the Snowflake Materialization, you might have to wait until the configured amount of time passes for your changes to make it to the destination. ","version":"Next","tagName":"h2"},{"title":"Party time!​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#party-time","content":" Congratulations! 🎉 You've successfully set up a CDC pipeline from PostgreSQL to Snowflake using Estuary Flow. In just a few minutes, you've learned how to configure log-based CDC replication, handle schema evolution, and deploy a robust data integration solution. Take a moment to celebrate your achievement! You've not only gained valuable technical knowledge but also demonstrated the agility and efficiency of modern data engineering practices. With your newfound skills, you're well-equipped to tackle complex data challenges and drive innovation in your organization. ","version":"Next","tagName":"h2"},{"title":"Clean up​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#clean-up","content":" After every party, it’s customary to clean up after ourselves. After you are done exploring the flow, make sure to remove any resources which you won’t use anymore! Postgres Simply stop the Docker containers & terminate the ngrok process. This will terminate both the database process and the tunnel which exposed it to the internet. Snowflake To clean up resources in Snowflake use the following SQL script. snowflake_cleanup.sql -- Revoke all privileges from Estuary role revoke all privileges on schema ESTUARY_SCHEMA from role ESTUARY_ROLE; revoke all privileges on database ESTUARY_DB from role ESTUARY_ROLE; -- Drop the warehouse drop warehouse if exists ESTUARY_WH; -- Drop the role and user drop user if exists ESTUARY_USER; drop role if exists ESTUARY_ROLE; -- Drop the schema and database drop schema if exists ESTUARY_SCHEMA; drop database if exists ESTUARY_DB; Flow In the UI, disable or delete any resources you don’t wish to keep. ","version":"Next","tagName":"h2"},{"title":"Next Steps​","type":1,"pageTitle":"PostgreSQL CDC streaming to Snowflake","url":"/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/#next-steps","content":" That’s it! You should have everything you need to know to create your own data pipeline for loading data into Snowflake!  Now try it out on your own PostgreSQL database or other sources. If you want to learn more, make sure you read through the Estuary documentation. You’ll find instructions on how to use other connectors here. There are more tutorials here.  Also, don’t forget to join the Estuary Slack Community! ","version":"Next","tagName":"h2"},{"title":"Connecting to Estuary Flow from Kafka using Dekaf","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/","content":"","keywords":"","version":"Next"},{"title":"Overview​","type":1,"pageTitle":"Connecting to Estuary Flow from Kafka using Dekaf","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/#overview","content":" Collections represent datasets within Estuary Flow. All captured documents are written to a collection, and all materialized documents are read from a collection.Dekaf enables you to interact with these collections as though they were Kafka topics, providing seamless integration with existing Kafka-based tools and workflows. ","version":"Next","tagName":"h2"},{"title":"Key Features​","type":1,"pageTitle":"Connecting to Estuary Flow from Kafka using Dekaf","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/#key-features","content":" Kafka Topic Emulation: Access Estuary Flow collections as if they were Kafka topics.Schema Registry Emulation: Manage and retrieve schemas assigned to Estuary Flow collections, emulating Confluent's Schema Registry. ","version":"Next","tagName":"h2"},{"title":"Connection Details​","type":1,"pageTitle":"Connecting to Estuary Flow from Kafka using Dekaf","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/#connection-details","content":" To connect to Estuary Flow via Dekaf, you need the following connection details: Broker Address: dekaf.estuary.devSchema Registry Address: https://dekaf.estuary.devSecurity Protocol: SASL_SSLSASL Mechanism: PLAINSASL Username: {}SASL Password: Estuary Refresh Token (Generate your token in the Estuary Admin Dashboard)Schema Registry Username: {}Schema Registry Password: The same Estuary Refresh Token as above ","version":"Next","tagName":"h2"},{"title":"How to Connect to Dekaf​","type":1,"pageTitle":"Connecting to Estuary Flow from Kafka using Dekaf","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/#how-to-connect-to-dekaf","content":" ","version":"Next","tagName":"h2"},{"title":"1. Generate an Estuary Refresh Token:​","type":1,"pageTitle":"Connecting to Estuary Flow from Kafka using Dekaf","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/#1-generate-an-estuary-refresh-token","content":" Log in to the Estuary Admin Dashboard.Navigate to the section where you can generate tokens.Generate a new refresh token and note it down securely. ","version":"Next","tagName":"h3"},{"title":"2. Set Up Your Kafka Client​","type":1,"pageTitle":"Connecting to Estuary Flow from Kafka using Dekaf","url":"/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/#2-set-up-your-kafka-client","content":" Configure your Kafka client using the connection details provided. Example Kafka Client Configuration​ Below is an example configuration for a Kafka client using Python’s kafka-python library: from kafka import KafkaConsumer # Configuration details conf = { 'bootstrap_servers': 'dekaf.estuary.dev:9092', 'security_protocol': 'SASL_SSL', 'sasl_mechanism': 'PLAIN', 'sasl_plain_username': '{}', 'sasl_plain_password': 'Your_Estuary_Refresh_Token', 'group_id': 'your_group_id', 'auto_offset_reset': 'earliest' } # Create Consumer instance consumer = KafkaConsumer( 'your_topic_name', bootstrap_servers=conf['bootstrap_servers'], security_protocol=conf['security_protocol'], sasl_mechanism=conf['sasl_mechanism'], sasl_plain_username=conf['sasl_plain_username'], sasl_plain_password=conf['sasl_plain_password'], group_id=conf['group_id'], auto_offset_reset=conf['auto_offset_reset'], enable_auto_commit=True, value_deserializer=lambda x: x.decode('utf-8') ) # Poll for messages try: for msg in consumer: print(f"Received message: {msg.value}") except KeyboardInterrupt: pass finally: consumer.close() You can also use kcat (formerly known as kafkacat) to test reading messages from an Estuary Flow collection as if it were a Kafka topic. kcat -C \\ -X broker.address.family=v4 \\ -X security.protocol=SASL_SSL \\ -X sasl.mechanism=PLAIN \\ -X sasl.username="{}" \\ -X sasl.password="Your_Estuary_Refresh_Token" \\ -b dekaf.estuary.dev:9092 \\ -t "full/nameof/estuarycolletion" \\ -p 0 \\ -o beginning \\ -s avro \\ -r https://{}:{Your_Estuary_Refresh_Token}@dekaf.estuary.dev ","version":"Next","tagName":"h3"},{"title":"How to transform data using SQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/derivation_tutorial_sql/","content":"","keywords":"","version":"Next"},{"title":"Introduction​","type":1,"pageTitle":"How to transform data using SQL","url":"/pr-preview/pr-1594/guides/derivation_tutorial_sql/#introduction","content":" This tutorial will show you how to implement a stateless transformation using SQL. You’ll learn how to implement a flow that transforms events coming from the live, real-time Wikipedia API. ","version":"Next","tagName":"h2"},{"title":"Setting up your development environment​","type":1,"pageTitle":"How to transform data using SQL","url":"/pr-preview/pr-1594/guides/derivation_tutorial_sql/#setting-up-your-development-environment","content":" In order to implement transformations through derivations, you’ll need to set up your development environment. You’ll need a text editor and flowtcl, the CLI-tool for Flow installed on your machine. Check out the docs page on installation instructions. Before continuing, sign in to the Estuary Flow dashboard, make sure you enable access to the Wikipedia demo. Using flowtcl, quickly verify you are able to view the demo collections used in this guide. Execute the below command to display the documents in the demo/wikipedia/recentchange-sampled collection: ::note This collection is a 3% sample of the enormous demo/wikipedia/recentchange collection which contains millions of documents. Since the purpose of this tutorial is to demonstrate a proof of concept, we avoid publishing a derivation that processes hundreds of gigabytes of data. ::: flowctl collections read --collection demo/wikipedia/recentchange-sampled --uncommitted If you see a stream of JSON documents on your terminal, you’re all good - feel free to cancel the process by pressing C^C. Examine a sample JSON that lives in the demo collection, as this is the data you’ll be using as the input for our derivation. { "$schema": "/mediawiki/recentchange/1.0.0", "_meta": { "file": "recentchange", "offset": 12837, "uuid": "f8f07d87-f5bf-11ee-8401-4fdf95f7b91a" }, "bot": false, "comment": "[[:File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg]] added to category", "id": 2468434138, "meta": { "domain": "commons.wikimedia.org", "dt": "2024-04-08T15:52:13Z", "id": "d9e8698f-4eac-4262-a451-b7ca247e401c", "offset": 5008568732, "partition": 0, "request_id": "b5372124-63fa-45e1-b35e-86784f1692bc", "stream": "mediawiki.recentchange", "topic": "eqiad.mediawiki.recentchange", "uri": "https://commons.wikimedia.org/wiki/Category:Jetons" }, "namespace": 14, "notify_url": "https://commons.wikimedia.org/w/index.php?diff=866807860&oldid=861559382&rcid=2468434138", "parsedcomment": "<a href=\\"/wiki/File:Jeton._Ordinaire_des_guerres_-_btv1b10405460g_(1_of_2).jpg\\" title=\\"File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg\\">File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg</a> added to category", "server_name": "commons.wikimedia.org", "server_script_path": "/w", "server_url": "https://commons.wikimedia.org", "timestamp": 1712591533, "title": "Category:Jetons", "title_url": "https://commons.wikimedia.org/wiki/Category:Jetons", "type": "categorize", "user": "DenghiùComm", "wiki": "commonswiki" } The transformation in this tutorial will make use of the length, bot and user_id fields to calculate how many lines a given non-bot user has modified on a day. { ... "user_id": "User" "bot": 0 "length": 1253 ... } ","version":"Next","tagName":"h2"},{"title":"Writing the derivation​","type":1,"pageTitle":"How to transform data using SQL","url":"/pr-preview/pr-1594/guides/derivation_tutorial_sql/#writing-the-derivation","content":" Set up your folder structure so you can organize the resources required for the derivation. Create a working directory to follow along, and inside, create a flow.yaml file. Inside your flow.yaml file, add the following contents: --- collections: Dani/derivation-tutorial/edits-by-users: schema: type: object properties: user_id: type: string date: format: date type: string total_edits: reduce: strategy: sum type: number total_new_lines: reduce: strategy: sum type: number reduce: strategy: merge required: - date - user_id key: - /date - /user_id derive: using: sqlite: {} transforms: - name: edits_by_users source: demo/wikipedia/recentchange-sampled shuffle: any lambda: | select $user as user_id, substr($meta$dt,1,10) as date, 1 as total_edits, coalesce($length$new - $length$old, 0) as total_new_lines where $type = 'edit' and $user is not null and $bot = 0;   The Flow consists of just one collection, which is what you define here, called edits-by-users. Let’s go over this in a bit more detail. First of all, the collection needs a schema. The schema of the incoming data (also called the “write” schema) is already defined by the demo, you only have to define the schema of the documents the transformation will output, which is the “read” schema. In the flow.yaml file, the schema is defined in-line with the rest of the configuration. schema: type: object properties: user_id: type: string date: format: date type: string total_edits: reduce: strategy: sum type: number total_new_lines: reduce: strategy: sum type: number reduce: strategy: merge required: - date - user_id As you can see, this schema includes less fields than what is available in the incoming documents, this is expected, but if you wish to include more, this is where you would add them first. The user_id and date fields do not contain any modifications, but the other two have their reduction strategy defined as well to be sum. This strategy reduces two numbers or integers by adding their values. To learn more about how reduction strategies work, check out the documentation page. Moving on, the next section in the yaml file defines the key of the documents. key: - /date - /user_id Every Flow collection must declare a key which is used to group its documents. Keys are specified as an array of JSON pointers to document locations. The important detail here is to know that a collection key instructs Flow how documents of a collection are to be reduced, such as while being materialized to an endpoint. The final section is where you specify that this collection is derived from another collection. derive: using: sqlite: {} transforms: - name: edits_by_users source: demo/wikipedia/recentchange-sampled shuffle: any lambda: | select $user as user_id, substr($meta$dt,1,10) as date, 1 as total_edits, coalesce($length$new - $length$old, 0) as total_new_lines where $type = 'edit' and $user is not null and $bot = 0; Here you define the SQL statement that gets executed on the documents of the source collection. The source: demo/wikipedia/recentchange-sampled property lets Flow know that the source collection is the demo collection from mentioned at in the beginning of the tutorial while shuffle tells Flow how to colocate documents while processing, which in this case is set to any, meaning source documents can be processed by any available compute. The SQL is straightforward select $user as user_id, substr($meta$dt,1,10) as date, 1 as total_edits, coalesce($length$new - $length$old, 0) as total_new_lines where $type = 'edit' and $user is not null and $bot = 0 We select the user_id, parse the event date and calculate the amount of line changes. We also select 1 for the value of total_edits, this is important because during the reduction phase, due to having selected sum as the strategy, these values will get added together to form the total number of edits in the result. We also filter out non-edit events, bot users or events without a user_id to have a somewhat clean dataset. ","version":"Next","tagName":"h2"},{"title":"Verify​","type":1,"pageTitle":"How to transform data using SQL","url":"/pr-preview/pr-1594/guides/derivation_tutorial_sql/#verify","content":" You can use flowctl to quickly verify your derivation before publishing it. Use the preview command to get an idea of the resulting collections. flowctl preview --source flow.yaml --name Dani/derivation-tutorial/edits-by-users {"date":"2024-04-08","total_edits":3,"total_new_lines":110,"user_id":"Renamerr"} {"date":"2024-04-08","total_edits":1,"total_new_lines":769,"user_id":"Sebring12Hrs"} {"date":"2024-04-08","total_edits":5,"total_new_lines":3360,"user_id":"Sic19"} {"date":"2024-04-08","total_edits":1,"total_new_lines":82,"user_id":"Simeon"} ^C As you can see, the output format matches the defined schema. The last step would be to publish your derivation to Flow, which you can also do using flowctl. Publishing the derivation will initialize the transformation on the live, real-time Wikipedia stream, make sure to delete it after completing the tutorial. flowctl catalog publish --source flow.yaml After successfully publishing your derivation, head over to the Collections page on the Web UI and you will be able to see your derivation in action! ","version":"Next","tagName":"h2"},{"title":"Wrapping up​","type":1,"pageTitle":"How to transform data using SQL","url":"/pr-preview/pr-1594/guides/derivation_tutorial_sql/#wrapping-up","content":" In this guide you learned how to write your first stateless SQL derivation to filter data in a collection. ","version":"Next","tagName":"h2"},{"title":"flowctl guides","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/flowctl/","content":"flowctl guides The guides in this section cover common workflows using the Estuary Flow CLI, flowctl. Learn how to edit published Flow entities, create derivations, and more. To get to know flowctl, see the concepts page.","keywords":"","version":"Next"},{"title":"Edit Data Flows in the web app","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/edit-data-flows/","content":"","keywords":"","version":"Next"},{"title":"Edit a capture​","type":1,"pageTitle":"Edit Data Flows in the web app","url":"/pr-preview/pr-1594/guides/edit-data-flows/#edit-a-capture","content":" Go to the Sources page of the web app. Locate the capture you'd like to edit. Click the Options button in its table row, then click Edit specification. The Edit Capture page opens. Edit the connection to the destination system, if desired. You can either update fields in the Endpoint Config section or manually update the JSON in the Advanced Specification Editor. caution You may have to re-authenticate with the source system. Be sure to have current credentials on hand before editing the endpoint configuration. Use the Output Collections browser to add or remove collections from the capture, if desired. To refresh your connection with the source and see an updated list of possible collections, click the Refresh button, but be aware that it will overwrite all existing collection selections. Use the Schema Inference tool, if desired. This option is available for source systems with permissive schemas, such as NoSQL databases and cloud storage. Flow can help you tighten up the schema to be used for downstream tasks in your Data Flow. In the Output Collections browser, choose a collection and click its Collection tab. Click Schema Inference The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for downstream tasks like materializations and derivations. Review the new schema and click Apply Inferred Schema. When you're done making changes, click Next. Click Save and Publish. Editing a capture only affects how it will work going forward. Data that was captured before editing will reflect the original configuration. Edit a materialization To edit a materialization: Go to the Destinations page of the web app. Locate the materialization you'd like to edit. Click the Options button in its table row, then click Edit specification. The Edit Materialization page opens. Edit the connection to the destination system, if desired. You can either update fields in the Endpoint Config section or manually update the JSON in the Advanced Specification Editor. caution You may have to re-authenticate with the destination system. Be sure to have current credentials on hand before editing the endpoint configuration. Use the Source Collections browser to add or remove collections from the materialization, if desired. Optionally apply a stricter schema to each collection to use for the materialization. This option is available for collections captured from source systems with permissive schemas, such as NoSQL databases and cloud storage. Flow can help you tighten up the schema to be used for downstream tasks in your Data Flow. In the Source Collections browser, choose a collection and click its Collection tab. Click Schema Inference The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for the materialization. Review the new schema and click Apply Inferred Schema. When you're done making changes, click Next. Click Save and Publish. Editing a materialization only affects how it will work going forward. Data that was materialized before editing will reflect the original configuration. ","version":"Next","tagName":"h2"},{"title":"Advanced editing​","type":1,"pageTitle":"Edit Data Flows in the web app","url":"/pr-preview/pr-1594/guides/edit-data-flows/#advanced-editing","content":" For more fine-grain control over editing, you can use flowctl and work directly on specification files in your local environment.View the tutorial. ","version":"Next","tagName":"h2"},{"title":"Edit a draft created in the web app","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Edit a draft created in the web app","url":"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/#prerequisites","content":" To complete this workflow, you need: An Estuary account flowctl installed locally ","version":"Next","tagName":"h2"},{"title":"Identify the draft and pull it locally​","type":1,"pageTitle":"Edit a draft created in the web app","url":"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/#identify-the-draft-and-pull-it-locally","content":" Drafts aren't currently visible in the Flow web app, but you can get a list with flowctl. Authorize flowctl. Go to the CLI-API tab of the web app and copy your access token. Run flowctl auth token --token <paste-token-here> Run flowctl draft list flowctl outputs a table of all the drafts to which you have access, from oldest to newest. Use the name and timestamp to find the draft you're looking for. Each draft has an ID, and most have a name in the Details column. Note the # of Specs column. For drafts created in the web app, materialization drafts will always contain one specification. A number higher than 1 indicates a capture with its associated collections. Copy the draft ID. Select the draft: flowctl draft select --id <paste-id-here>. Pull the draft source files to your working directory: flowctl draft develop. Browse the source files. The source files and their directory structure will look slightly different depending on the draft. Regardless, there will always be a top-level file called flow.yaml that imports all other YAML files, which you'll find in a subdirectory named for your catalog prefix. These, in turn, contain the specifications you'll want to edit. ","version":"Next","tagName":"h2"},{"title":"Edit the draft and publish​","type":1,"pageTitle":"Edit a draft created in the web app","url":"/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/#edit-the-draft-and-publish","content":" Next, you'll make changes to the specification(s), test, and publish the draft. Open the YAML files that contain the specification you want to edit. Make changes. For guidance on how to construct Flow specifications, see the documentation for the entity type: CapturesCollectionsMaterializations When you're done, sync the local work to the global draft: flowctl draft author --source flow.yaml. Specifying the top-level flow.yaml file as the source ensures that all entities in the draft are imported. Publish the draft: flowctl draft publish Once this operation completes successfully, check to verify if the entity or entities are live. You can: Go to the appropriate tab in the Flow web app. Run flowctl catalog list, filtering by --name, --prefix, or entity type, for example --capture. If you're not satisfied with the published entities, you can continue to edit them. See the other guides for help: Edit in the web app.Edit with flowctl. ","version":"Next","tagName":"h2"},{"title":"Create a derivation with flowctl","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Create a derivation with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/#prerequisites","content":" A Flow account and access to the web app. If you don't have an account yet, go to the web app to register for free. An existing Flow collection. Typically, you create this through a capture in the Flow web application. If you need help, see the guide to create a Data Flow. A development environment to work with flowctl. Choose between: GitPod, the cloud development environment integrated with Flow. GitPod comes ready for derivation writing, with stubbed out files and flowctl installed. You'll need a GitLab, GitHub, or BitBucket account to log in. Your local development environment. Install flowctl locally ","version":"Next","tagName":"h2"},{"title":"Get started with GitPod​","type":1,"pageTitle":"Create a derivation with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/#get-started-with-gitpod","content":" You'll write your derivation using GitPod, a cloud development environment integrated in the Flow web app. Navigate to the Collections page in Flow. Click on the New Transformation button. The Derive A New Collection pop-up window appears. In the Available Collections dropdown, select the collection you want to use as the source. For example, if your organization is acmeCo, you might choose the acmeCo/resources/anvils collection. Set the transformation language to either SQL and TypeScript. SQL transformations can be a more approachable place to start if you're new to derivations. TypeScript transformations can provide more resiliency against failures through static type checking. Give your derivation a name. From the dropdown, choose the name of your catalog prefix and append a unique name, for example acmeCo/resources/anvil-status. Click Proceed to GitPod to create your development environment. Sign in with one of the available account types. On the New Workspace screen, keep the Context URL option selected and click Continue. A GitPod development environment opens. A stubbed-out derivation with a transformation has already been created for you in the language you chose. Next, you'll locate and open the source files. Each slash-delimited prefix of your derivation name has become a folder. Open the nested folders to find the flow.yaml file with the derivation specification. Following the example above, you'd open the folders called acmeCo, then resources to find the correct flow.yaml file. The file contains a placeholder collection specification and schema for the derivation. In the same folder, you'll also find supplementary TypeScript or SQL files you'll need for your transformation. Continue with SQL Continue with TypeScript Authentication When you first connect to GitPod, you will have already authenticated Flow, but if you leave GitPod opened for too long, you may have to reauthenticate Flow. To do this: Go to the CLI-API tab of the web app and copy your access token. Run flowctl auth token --token <paste-token-here> in the GitPod terminal. ","version":"Next","tagName":"h2"},{"title":"Add a SQL derivation in GitPod​","type":1,"pageTitle":"Create a derivation with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/#add-a-sql-derivation-in-gitpod","content":" If you chose SQL as your transformation language, follow these steps. Along with the derivation's flow.yaml you found in the previous steps, there are two other files: A lambda file. This is where you'll write your first SQL transformation. Its name follows the pattern derivation-name.lambda.source-collection-name.sql. Using the example above, it'd be called anvil-status.lambda.anvils.sql. A migrations file. Migrations allow you to leverage other features of the sqlite database that backs your derivation by creating tables, indices, views, and more. Its name follows the pattern derivation-name.migration.0.sql. Using the example above, it'd be called anvil-status.migration.0.sql. Open the flow.yaml file for your derivation. It looks something like this: collections: acmeCo/resources/anvil-status: schema: properties: your_key: type: string required: - your_key type: object key: - /your_key derive: using: sqlite: migrations: - anvil-status.migration.0.sql transforms: - name: anvils source: acmeCo/resources/anvils shuffle: any lambda: anvil-status.lambda.anvils.sql Note the stubbed out schema and key. Write the schema you'd like your derivation to conform to and specify its collection key. Keep in mind: The source collection's schema. The transformation required to get from the source schema to the new schema. Give the transform a unique name (by default, it's the name of the source collection). In the lambda file, write your SQL transformation. Tip For help writing your derivation, start with these examples: Continuous materialized view tutorialAcme Bank examples The main derivations page includes many other examples and in-depth explanations of how derivations work. If necessary, open the migration file and write your migration. Preview the derivation locally. flowctl preview --source flow.yaml If the preview output appears as expected, publish the derivation. flowctl catalog publish --source flow.yaml The derivation you created is now live and ready for further use. You can access it from the web application and materialize it to a destination, just as you would any other Flow collection. ","version":"Next","tagName":"h2"},{"title":"Add a TypeScript derivation in GitPod​","type":1,"pageTitle":"Create a derivation with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/#add-a-typescript-derivation-in-gitpod","content":" If you chose TypeScript as your transformation language, follow these steps. Along with the derivation's flow.yaml you found in the previous steps, there's another file for the TypeScript transformation. It follows the naming convention derivation-name.ts. Using the example above, it'd be called anvil-status.ts. Open the flow.yaml file for your derivation. It looks something like this: collections: acmeCo/resources/anvil-status: schema: properties: your_key: type: string required: - your_key type: object key: - /your_key derive: using: typescript: module: anvil-status.ts transforms: - name: anvils source: acmeCo/resources/anvils shuffle: any Note the stubbed out schema and key. Write the schema you'd like your derivation to conform to and specify the collection key. Keep in mind: The source collection's schema. The transformation required to get from the source schema to the new schema. Give the transform a unique name (by default, it's the name of the source collection). In the TypeScript file, write your transformation. Tip For help writing a TypeScript derivation, start with this example. The main derivations page includes many other examples and in-depth explanations of how derivations work. Preview the derivation locally. flowctl preview --source flow.yaml If the preview output appears how you'd expect, publish the derivation. flowctl catalog publish --source flow.yaml The derivation you created is now live and ready for further use. You can access it from the web application and materialize it to a destination, just as you would any other Flow collection. ","version":"Next","tagName":"h2"},{"title":"Create a derivation locally​","type":1,"pageTitle":"Create a derivation with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/#create-a-derivation-locally","content":" Creating a derivation locally is largely the same as using GitPod, but has some extra steps. Those extra steps are explained here, but you'll find more useful context in the sections above. Authorize flowctl. Go to the CLI-API tab of the web app and copy your access token. Run flowctl auth token --token <paste-token-here> in your local environment. Locate the source collection for your derivation. Check the web app's Collections. All published entities to which you have access are listed and can be searched. Run flowctl catalog list --collections. This command returns a complete list of collections to which you have access. You can refine by specifying a --prefix. Pull the source collection locally using the full collection name. flowctl catalog pull-specs --name acmeCo/resources/anvils The source files are written to your current working directory. Each slash-delimited prefix of your collection name has become a folder. Open the nested folders to find the flow.yaml file with the collection specification. Following the example above, you'd open the folders called acmeCo, then resources to find the correct flow.yaml file. The file contains the source collection specification and schema. Add the derivation as a second collection in the flow.yaml file. Write the schema you'd like your derivation to conform to and specify the collection key. Reference the source collection's schema, and keep in mind the transformation required to get from the source schema to the new schema. Add the derive stanza. See examples for SQL and TypeScript above. Give your transform a a unique name. Stub out the SQL or TypeScript files for your transform. flowctl generate --source flow.yaml Locate the generated file, likely in the same subdirectory as the flow.yaml file you've been working in. Write your transformation. Preview the derivation locally. flowctl preview --source flow.yaml If the preview output appears how you'd expect, publish the derivation. flowctl catalog publish --source flow.yaml The derivation you created is now live and ready for further use. You can access it from the web application and materialize it to a destination, just as you would any other Flow collection. ","version":"Next","tagName":"h2"},{"title":"Updating an existing derivation​","type":1,"pageTitle":"Create a derivation with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/create-derivation/#updating-an-existing-derivation","content":" Derivations are applied on a go-forward basis only. If you would like to make an update to an existing derivation (for example, adding columns to the derived collection), you can add a new transform by changing the name of your existing transform to a new name, and at the same time updating your lambda or TypeScript module. From the Flow's perspective, this is equivalent to deleting the old transform and adding a new one. This will backfill over the source collection again with the updated SQL statement. ","version":"Next","tagName":"h2"},{"title":"Edit a Flow specification locally","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Edit a Flow specification locally","url":"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/#prerequisites","content":" To complete this workflow, you need: An Estuary account flowctl installed locally One or more published Flow entities. (To edit unpublished drafts, use this guide.) ","version":"Next","tagName":"h2"},{"title":"Pull specifications locally​","type":1,"pageTitle":"Edit a Flow specification locally","url":"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/#pull-specifications-locally","content":" Every entity (including active tasks, like captures and materializations, and static collections) has a globally unique name in the Flow catalog. For example, a given Data Flow may comprise: A capture, myOrg/marketing/leads, which writes to...Two collections, myOrg/marketing/emailList and myOrg/marketing/socialMedia, which are materialized as part of...A materialization, myOrg/marketing/contacts. Using these names, you'll identify and pull the relevant specifications for editing. Authorize flowctl. Go to the CLI-API tab of the web app and copy your access token. Run flowctl auth token --token <paste-token-here> Determine which entities you need to pull from the catalog. You can: Check the web app's Sources, Collections, and Destinations pages. All published entities to which you have access are listed and can be searched. Run flowctl catalog list. This command returns a complete list of entities to which you have access. You can refine by specifying a --prefix and filter by entity type: --captures, --collections, --materializations, or --tests. From the above example, flowctl catalog list --prefix myOrg/marketing --captures --materializations would returnmyOrg/marketing/leads and myOrg/marketing/contacts. Pull the specifications you need by running flowctl catalog pull-specs: Pull one or more specifications by name, for example: flowctl catalog pull-specs --name myOrg/marketing/emailList Pull a group of specifications by prefix or type filter, for example: flowctl catalog pull-specs --prefix myOrg/marketing --collections The source files are written to your current working directory. Browse the source files. flowctl pulls specifications into subdirectories organized by entity name, and specifications sharing a catalog prefix are written to the same YAML file. Regardless of what you pull, there is always a top-level file called flow.yaml that imports all other nested YAML files. These, in turn, contain the entities' specifications. ","version":"Next","tagName":"h2"},{"title":"Edit source files and re-publish specifications​","type":1,"pageTitle":"Edit a Flow specification locally","url":"/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/#edit-source-files-and-re-publish-specifications","content":" Next, you'll complete your edits, test that they were performed correctly, and re-publish everything. Open the YAML files that contain the specification you want to edit. Make changes. For guidance on how to construct Flow specifications, see the documentation for the task type: CapturesCollectionsMaterializationsDerivationsTests When you're done, you can test your changes:flowctl catalog test --source flow.yaml You'll almost always use the top-level flow.yaml file as the source here because it imports all other Flow specifications in your working directory. Once the test has passed, you can publish your specifications. Re-publish all the specifications you pulled: flowctl catalog publish --source flow.yaml Again you'll almost always want to use the top-level flow.yaml file. If you want to publish only certain specifications, you can provide a path to a different file. Return to the web app or use flowctl catalog list to check the status of the entities you just published. Their publication time will be updated to reflect the work you just did. If you're not satisfied with the results of your edits, repeat the process iteratively until you are. ","version":"Next","tagName":"h2"},{"title":"Implementing Derivations for AcmeBank","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/","content":"","keywords":"","version":"Next"},{"title":"Filtering Large Transfers​","type":1,"pageTitle":"Implementing Derivations for AcmeBank","url":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/#filtering-large-transfers","content":" note This section introduces SQLite derivations, SQL lambda blocks and $parameters. Your compliance department has reached out, and they require an understanding of the last large transfer (if any) made by each user account. You create a SQL derivation to help them out. The transfers collection is keyed on the transfer /id, so you'll need to re-key your derivation on the /sender account. You also need to filter out transfers that aren't large enough. Putting this all together: last-large-send.flow.yamllast-large-send-test.flow.yaml collections: acmeBank/last-large-send: schema: transfers.schema.yaml key: [/sender] derive: using: sqlite: {} transforms: - name: filterTransfers source: acmeBank/transfers shuffle: any lambda: SELECT $id, $sender, $recipient, $amount WHERE $amount > 100; derive: using: sqlite: {} tells Flow that collectionacmeBank/last-large-send is derived using Flow's SQLite derivation connector. This derivation has just one transform, which sources from the transfers collection. As source documents become available, they're evaluated by the SQL lambdaand its SELECT output is published to the derived collection. Your SQL queries access locations of source documents through $parameter bindings. The compliance department then materializes this collection to their preferred destination, for an always up-to-date view indexed by each account. ","version":"Next","tagName":"h2"},{"title":"Finding New Account Pairs​","type":1,"pageTitle":"Implementing Derivations for AcmeBank","url":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/#finding-new-account-pairs","content":" note This section introduces SQLite migrations and internal task tables. The fraud team needs your help: they have a new process they must run the first time some sending account sends funds to a receiving account. They would like to see only those transfers which reflect a new account pair of (sender, recipient). To tackle this you need to know which account pairs have been seen before. SQLite derivations run within the context of a persistent, managed SQLite database. You can apply database migrations that create whatever tables, triggers, or views you might need. Then, the statements of your SQL lambda code can INSERT, UPDATE, or DELETEfrom those tables, query from them, or any other operation supported by SQLite. The tables and other schema you create through your migrations are the internal state of your task. first-send.flow.yamlfirst-send-test.flow.yaml collections: acmeBank/first-send: schema: transfers.schema.yaml key: [/id] derive: using: sqlite: migrations: - CREATE TABLE seen_pairs ( sender TEXT NOT NULL, recipient TEXT NOT NULL, PRIMARY KEY (sender, recipient) ); transforms: - name: fromTransfers source: acmeBank/transfers shuffle: key: [/sender, /recipient] lambda: INSERT INTO seen_pairs (sender, recipient) VALUES ($sender, $recipient) ON CONFLICT DO NOTHING RETURNING $id, $sender, $recipient, $amount; This time, the derivation attempts to INSERT into the seen_pairs table, and uses SQLite's RETURNINGsyntax to only publish documents for rows which were successfully inserted. You can evolve the internal SQLite tables of your derivation as needed, by appending SQL blocks which perform a database migration to the migrations array. Any migrations appended to the list are automatically applied by Flow. ","version":"Next","tagName":"h2"},{"title":"Grouped Windows of Transfers​","type":1,"pageTitle":"Implementing Derivations for AcmeBank","url":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/#grouped-windows-of-transfers","content":" note This section introduces delayed reads, and applies them to implement a custom window policy. The fraud team is back, and now needs to know the othertransfers which an account has made in the last day. They want you to enrich each transfer with the grouping of all transfers initiated by that account in the prior 24 hours. You may have encountered "windowing" in other tools for stream processing. Some systems even require that you define a window policy in order to function. Flow does not use windows, but sometimes you do want a time-bound grouping of recent events. All collection documents contain a wall-clock timestamp of when they were published. The transforms of a derivation will generally process source documents in ascending wall-time order. You can augment this behavior by using a read delay to refine the relative order in which source documents are read, which is useful for implementing arbitrary window policies: grouped.flow.yamlenrichAndAddToWindow.sqlgrouped-test.flow.yaml collections: acmeBank/grouped-transfers: schema: # Enrich transfer with a window of *other* transfers. $ref: transfers.schema.yaml required: [window] properties: window: { type: array } key: [/id] derive: using: sqlite: migrations: - CREATE TABLE transfers ( id INTEGER PRIMARY KEY NOT NULL, sender TEXT NOT NULL, recipient TEXT NOT NULL, amount REAL NOT NULL ); CREATE INDEX idx_transfers_sender ON transfers (sender); transforms: - name: enrichAndAddToWindow source: acmeBank/transfers shuffle: { key: [/sender] } lambda: enrichAndAddToWindow.sql - name: removeFromWindow source: acmeBank/transfers shuffle: { key: [/sender] } readDelay: 24h lambda: DELETE FROM transfers WHERE id = $id; ","version":"Next","tagName":"h2"},{"title":"Approving Transfers​","type":1,"pageTitle":"Implementing Derivations for AcmeBank","url":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/#approving-transfers","content":" note This section expands usage of SQLite task tables and introduces a recursive data flow. Your users don't always check if they have sufficient funds before starting a transfer, and account overdrafts are becoming common. The product team has tapped you to fix this by enriching each transfer with an approve or deny outcome based on the account balance of the sender. To do this, you first need to track the sender's current account balance. Clearly an account balance is debited when it's used to sends funds. It's also credited when it receives funds. But there's a catch: an account can only be credited for funds received from approved transfers! This implies you need a collection of transfer outcomes in order to derive your collection of transfer outcomes 🤯. This is an example of a self-referential, recursive data-flow. You may have used tools which require that data flow in a Directed Acyclic Graph (DAG). Flow does not require that your data flows are acyclic, and it also supports a derivation that reads from itself, which lets you tackle this task: outcomes.flow.yamldebitSender.sqloutcomes-test.flow.yaml collections: acmeBank/transfer-outcomes: schema: # Enrich transfer schema with outcome and the sender's balance. $ref: transfers.schema.yaml required: [outcome, sender_balance] properties: outcome: description: Transfer was approved, or denied for insufficient funds. enum: [approve, deny] sender_balance: { type: number } key: [/id] derive: using: sqlite: migrations: - CREATE TABLE current_balances ( account TEXT PRIMARY KEY NOT NULL, balance REAL NOT NULL ); transforms: - name: debitSender source: acmeBank/transfers # Shuffle on the sender, as we'll debit their balance. shuffle: { key: [/sender] } lambda: debitSender.sql - name: creditRecipient # When a transfer is approved, we've debited the sender but still need to # credit the recipient. Read approved transfers from ourselves to do so. source: name: acmeBank/transfer-outcomes partitions: include: outcome: [approve] shuffle: { key: [/recipient] } lambda: INSERT INTO current_balances (account, balance) VALUES ($recipient, $amount) ON CONFLICT DO UPDATE SET balance = balance + $amount; # Partition output based on the transfer outcome. projections: outcome: location: /outcome partition: true ","version":"Next","tagName":"h2"},{"title":"Current Account Balances​","type":1,"pageTitle":"Implementing Derivations for AcmeBank","url":"/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/#current-account-balances","content":" note This section introduces TypeScript derivations and reduction annotations. Your product team is back, and they want a database table keyed by account that contains its up-to-date current balance. As shown in the previous section, you could create a task table which aggregates each account balance, and then SELECT the current balance after every transfer. For most use cases, this is a great place to start. For interest and variety, you'll solve this problem using TypeScript. TypeScript derivations require a module which you write. You don't know how to write that module yet, so first implement the derivation specification in balances.flow.yaml. Next run the flowctl generate command, which generates two files: A module stub for you to fill out.A file of TypeScript interfaces which are used by your module. balances.flow.yamlModule StubInterfaces collections: acmeBank/balances: schema: balances.schema.yaml key: [/user] derive: using: typescript: module: balances.ts transforms: - name: fromOutcomes source: name: acmeBank/transfer-outcomes partitions: include: outcome: [approve] shuffle: any Next fill out the body of your TypeScript module and write a test: balances.tsbalances-test.flow.yaml import { IDerivation, Document, SourceFromOutcomes } from 'flow/acmeBank/balances.ts'; // Implementation for derivation acmeBank/balances. export class Derivation extends IDerivation { fromOutcomes(read: { doc: SourceFromOutcomes }): Document[] { const doc = read.doc; return [ // Debit the sender. { user: doc.sender, balance: -doc.amount }, // Credit the recipient. { user: doc.recipient, balance: doc.amount }, ]; } } One piece is still missing. Your TypeScript module is publishing the change in account balance for each transfer. That's not the same thing as the current balance for each account. You can ask Flow to sum up the balance changes into a current account balance through reduction annotations. Here's the balances schema, with reduce annotations for summing the account balance: type: object required: [user, balance] reduce: { strategy: merge } properties: user: { type: string } balance: type: number reduce: { strategy: sum } This section has more moving parts that the previous SQL-based examples. You might be wondering, why bother? Fair question! This is just an illustrative example, after all. While they're more verbose, TypeScript derivations do have certain advantages: TypeScript derivations are strongly typed, and those checks often catch meaningful bugs and defects before they're deployed. Your derivation modules also play nicely with VSCode and other developer tooling.TypeScript derivations can use third-party libraries, as well as your native code compiled to WASM.TypeScript can be easier when working with nested or complex document structures. Reduction annotations also have some benefits over task state (like SQLite tables): Internal task state is managed by Flow. If it grows to be large (say, you have a lot of accounts), then your task must be scaled and could require performance tuning. Reduction annotations, on the other hand, require no internal state and are extremely efficient.Certain aggregations, such as recursive merging of tree-like structures, are much simpler to express through reduction annotations vs implementing yourself. [See "Where to Accumulate?" for more discussion]../../concepts/derivations.md(#where-to-accumulate). ","version":"Next","tagName":"h2"},{"title":"Troubleshoot a task with flowctl","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Troubleshoot a task with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/#prerequisites","content":" To complete this workflow, you need: An Estuary account flowctl installed locally ","version":"Next","tagName":"h2"},{"title":"Print task logs​","type":1,"pageTitle":"Troubleshoot a task with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/#print-task-logs","content":" Authorize flowctl. Go to the CLI-API tab of the web app and copy your access token. Run flowctl auth token --token <paste-token-here> Identify the name of the failing task in the web app; for example myOrg/marketing/leads. Use the tables on the Captures or Materializations pages of the web app to do so. Run flowctl logs --task <task-name>. You have several options to get more specific. For example: flowctl logs --task myOrg/marketing/leads --follow — If the task hasn't failed, continuously print logs as they're generated. flowctl logs --task myOrg/marketing/leads --since 1h — Print logs from approximately the last hour. The actual output window is approximate and may somewhat exceed this time boundary. You may use any time, for example 10m and 1d. ","version":"Next","tagName":"h2"},{"title":"Change log level​","type":1,"pageTitle":"Troubleshoot a task with flowctl","url":"/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/#change-log-level","content":" If your logs aren't providing enough detail, you can change the log level. Flow offers several log levels. From least to most detailed, these are: errorwarninfo (default)debugtrace Follow the guide to edit a specification with flowctl. Working in your local specification file, add the shards stanza to the capture or materialization specification: myOrg/marketing/leads: shards: logLevel: debug endpoint: {} Finish the workflow as described, re-publishing the task. Learn more about working with logs ","version":"Next","tagName":"h2"},{"title":"System-specific Data Flows","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/","content":"System-specific Data Flows The guides in this section cover popular Estuary Flow use cases. Each guide walks you through the process of capturing data from a specific source system and materializing it to a specific destination. These are supplemental to the main guide to create a Data Flow. If you don't see your exact Data Flow here, use the main guide and the connector referenceto mix and match your required source and destination systems.","keywords":"","version":"Next"},{"title":"Google Cloud Firestore to Snowflake","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud Firestore to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/#prerequisites","content":" You'll need: (Recommended) understanding of the basic Flow concepts. Access to the Flow web application through an Estuary account. If you don't have one, visit the web app to register for free. A Firestore database that contains the data you'd like to move to Snowflake. You create this as part of a Google Firebase project. A Google service account with: Read access to your Firestore database, via roles/datastore.viewer. You can assign this role when you create the service account, or add it to an existing service account. A generated JSON service account key for the account. A Snowflake account with: A target database, schema, and virtual warehouse; and a user with a role assigned that grants the appropriate access levels to these resources.You can use a script to quickly create all of these items. Have these details on hand for setup with Flow. The account identifier and host URL noted. The URL is formatted using the account identifier. For example, you might have the account identifier orgname-accountname.snowflakecomputing.com. ","version":"Next","tagName":"h2"},{"title":"Introduction​","type":1,"pageTitle":"Google Cloud Firestore to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/#introduction","content":" In Estuary Flow, you create Data Flows to transfer data from source systems to destination systems in real time. In this use case, your source is an Google Cloud Firestore NoSQL database and your destination is a Snowflake data warehouse. After following this guide, you'll have a Data Flow that comprises: A capture, which ingests data from FirestoreSeveral collection, cloud-backed copies of Firestore collections in the Flow systemA materialization, which pushes the collections to Snowflake The capture and materialization rely on plug-in components called connectors. We'll walk through how to configure the Firestore and Snowflake connectors to integrate these systems with Flow. ","version":"Next","tagName":"h2"},{"title":"Capture from Firestore​","type":1,"pageTitle":"Google Cloud Firestore to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/#capture-from-firestore","content":" You'll first create a capture to connect to your Firestore database, which will yield one Flow collection for each Firestore collection in your database. Go to the Flow web application at dashboard.estuary.dev and sign in using the credentials provided by your Estuary account manager. Click the Sources tab and choose New Capture. Find the Google Firestore tile and click Capture. A form appears with the properties required for a Firestore capture. Type a name for your capture. Your capture name must begin with a prefix to which you have access. In the Name field, use the drop-down to select your prefix. Append a unique capture name after the / to create the full name, for example, acmeCo/myFirestoreCapture. Fill out the required properties for Firestore. Database: Flow can autodetect the database name, but you may optionally specify it here. This is helpful if the service account used has access to multiple Firebase projects. Your database name usually follows the format projects/$PROJECTID/databases/(default). Credentials: The JSON service account key created per the prerequisites. Click Next. Flow uses the provided configuration to initiate a connection with Firestore. It maps each available Firestore collection to a possible Flow collection. It also generates minimal schemas for each collection. You can use the Source Collections browser to remove or modify collections. You'll have the chance to tighten up each collection's JSON schema later, when you materialize to Snowflake. tip If you make any changes to collections, click Next again. Once you're satisfied with the collections to be captured, click Save and Publish. You'll see a notification when the capture publishes successfully. The data currently in your Firestore database has been captured, and future updates to it will be captured continuously. Click Materialize Collections to continue. ","version":"Next","tagName":"h2"},{"title":"Materialize to Snowflake​","type":1,"pageTitle":"Google Cloud Firestore to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/#materialize-to-snowflake","content":" Next, you'll add a Snowflake materialization to connect the captured data to its destination: your data warehouse. Locate the Snowflake tile and click Materialization. A form appears with the properties required for a Snowflake materialization. Choose a unique name for your materialization like you did when naming your capture; for example, acmeCo/mySnowflakeMaterialization. Fill out the required properties for Snowflake (you should have most of these handy from the prerequisites). Host URLAccountUserPasswordDatabaseSchemaWarehouse: optionalRole: optional Click Next. Flow uses the provided configuration to initiate a connection to Snowflake. You'll be notified if there's an error. In that case, fix the configuration form or Snowflake setup as needed and click Next to try again. Once the connection is successful, the Endpoint Config collapses and the Source Collections browser becomes prominent. It shows the collections you captured previously. Each of them will be mapped to a Snowflake table. In the Source Collections browser, optionally change the name in the Table field for each collection. These will be the names of the output tables in Snowflake. For each table, choose whether to enable delta updates. For each collection, apply a stricter schema to be used for the materialization. Firestore has a flat data structure. To materialize data effectively from Firestore to Snowflake, you should apply a schema can translate to a table structure. Flow's Schema Inference tool can help. In the Source Collections browser, choose a collection and click its Collection tab. Click Schema Inference The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for the materialization. Review the new schema and click Apply Inferred Schema. Click Next to apply the changes you made to collections. Click Save and Publish. You'll see a notification when the full Data Flow publishes successfully. ","version":"Next","tagName":"h2"},{"title":"What's next?​","type":1,"pageTitle":"Google Cloud Firestore to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/#whats-next","content":" Your Data Flow has been deployed, and will run continuously until it's stopped. Updates in your Firestore database will be reflected in your Snowflake table as they occur. You can advance your Data Flow by adding a derivation. Derivations are real-time data transformations. See the guide to create a derivation. ","version":"Next","tagName":"h2"},{"title":"How to join two collections (TypeScript)","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/","content":"","keywords":"","version":"Next"},{"title":"Introduction​","type":1,"pageTitle":"How to join two collections (TypeScript)","url":"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/#introduction","content":" This tutorial will show you how to implement a stateless transformation using TypeScript. You’ll learn how to implement a flow that matches orders to customers in real-time. ","version":"Next","tagName":"h2"},{"title":"Setting up your development environment​","type":1,"pageTitle":"How to join two collections (TypeScript)","url":"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/#setting-up-your-development-environment","content":" The data sources used in this tutorial are available in two Google Sheets. This one for the orders and this one for the customers. Make a copy of each so you’ll be able to test out the pipeline by adding, editing or removing records. Customers table sample customer_id\temail\tname\tphone 101\tcustomer1@email.com\tJohn Doe\t123-456-7890 102\tcustomer2@email.com\tJane Smith\t987-654-3210 103\tcustomer3@email.com\tAlex Lee\t555-123-4567 Orders table sample order_id\tcustomer_id\torder_date\ttotal_amount 1\t101\t2024-05-10 8:00:00\t50 2\t102\t2024-05-09 12:00:00\t75.5 3\t103\t2024-05-08 15:30:00\t100.25 As you can see, both tables contain a field called customer_id. This is what we’re going to use as the key in our join operation. One customer can have multiple orders, but one order can only belong to one customer. There are also some customers without any orders. Let’s say you want to see all customers and all of their orders in the results. This means, you’ll be looking to implement a full outer join. To create the collections in Estuary Flow, head over to the dashboard and create a new Google Sheet capture. Give it a name and add one of the previously copied sheet’s URL as the “Spreadsheet Link”. Repeat this process for the other sheet, which should leave you with 2 collections. You can take a look into each via the data preview window on the Collections page to verify that the sample data has already landed in Flow. In order to implement transformations through derivations, you’ll need to set up your development environment. You’ll need a text editor and flowtcl, the CLI-tool for Flow installed on your machine. Check out the docs page on installation instructions. To verify that you’re able to access Flow via flowctl, see if you can execute these commands successfully to view documents in your collections. flowctl collections read --collection <your_collection_id> --uncommitted {"_meta":{"uuid":"9790e50e-0ed3-11ef-8401-6d9be407e4b8"},"customer_id":"101","order_date":"2024-05-10 8:00:00","order_id":"1","row_id":203,"total_amount":"50"} {"_meta":{"uuid":"9790e50e-0ed3-11ef-8801-6d9be407e4b8"},"customer_id":"102","order_date":"2024-05-09 12:00:00","order_id":"2","row_id":204,"total_amount":"75.5"} {"_meta":{"uuid":"9790e50e-0ed3-11ef-8c01-6d9be407e4b8"},"customer_id":"103","order_date":"2024-05-08 15:30:00","order_id":"3","row_id":205,"total_amount":"100.25"} {"_meta":{"uuid":"9790e50e-0ed3-11ef-9001-6d9be407e4b8"},"customer_id":"101","order_date":"2024-05-07 10:00:00","order_id":"4","row_id":206,"total_amount":"25.75"} {"_meta":{"uuid":"9790e50e-0ed3-11ef-9401-6d9be407e4b8"},"customer_id":"103","order_date":"2024-05-06 14:45:00","order_id":"5","row_id":207,"total_amount":"60.2"} {"_meta":{"uuid":"9790e50e-0ed3-11ef-9801-6d9be407e4b8"},"customer_id":"102","order_date":"2024-05-05 11:20:00","order_id":"6","row_id":208,"total_amount":"45.9"} {"_meta":{"uuid":"9790e50e-0ed3-11ef-9c01-6d9be407e4b8"},"customer_id":"104","order_date":"2024-05-04 9:30:00","order_id":"7","row_id":209,"total_amount":"80.1"} If you see something similar, you’re good to continue! ","version":"Next","tagName":"h2"},{"title":"Writing the derivation​","type":1,"pageTitle":"How to join two collections (TypeScript)","url":"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/#writing-the-derivation","content":" Set up your folder structure so you can organize the resources required for the derivation. Create a working directory to follow along, and inside, create a flow.yaml file. Inside your flow.yaml file, add the following contents: collections: Dani/join-tutorial-typescript/customers_with_orders: schema: description: >- A document that represents the joined result of orders with customer information type: object properties: customer_id: type: string email: type: string name: type: string phone: type: string orders: type: array items: $ref: orders.schema.yaml reduce: strategy: merge key: - /order_id required: - customer_id reduce: strategy: merge key: - /customer_id derive: using: typescript: module: full-outer-join.flow.ts transforms: - name: fromOrders source: name: Dani/join-tutorial-orders/Sheet1_v2 shuffle: key: - /customer_id - name: fromCustomers source: name: Dani/join-tutorial-customers/Sheet1 shuffle: key: - /customer_id Let’s take a look at this in a bit more detail. Essentially, we define one collection which it’s a derivation that is the result of two transformations. In the schema definition, we specify what structure we want the documents of the result collection to take on. Dani/join-tutorial-typescript/customers_with_orders: schema: description: >- A document that represents the joined result of orders with customer information type: object properties: customer_id: type: string email: type: string name: type: string phone: type: string orders: type: array items: $ref: orders.schema.yaml reduce: strategy: merge key: - /order_id required: - customer_id reduce: strategy: merge key: - /customer_id Because you are going to implement a 1-to-many join using the two source collections, it’s important to pay attention to what reduction strategy Flow uses. There are two merge strategies defined here, one for the customers_with_orders collection and for the nested orders array.  Merge reduces the left-hand side and right-hand side by recursively reducing shared document locations. The LHS and RHS must either both be objects, or both be arrays. For the nested merge, you have to define a key, which is one or more JSON pointers that are relative to the reduced location. If both sides are arrays and a merge key is present, then a deep sorted merge of the respective items is done, as ordered by the key. In this case, setting it to order_id will cause the reduction to collect all orders for a given customer. The items in the nested array of orders are defined by the schema in a separate file, to which we refer to using $ref: orders.schema.yaml. The derivation details are defined in the next section of the yaml: derive: using: typescript: module: full-outer-join.flow.ts transforms: - name: fromOrders source: name: Dani/join-tutorial-orders/Sheet1_v2 shuffle: key: - /customer_id - name: fromCustomers source: name: Dani/join-tutorial-customers/Sheet1 shuffle: key: - /customer_id This tells flow that the transformation code is defined in a TypeScript file called full-outer-join.flow.ts (which doesn’t exist – yet!) and that there are in fact two transformations that it expects, one for each source collection. Shuffles let Flow identify the shard that should process a particular source document, in order to co-locate that processing with other documents it may need to know about. Both transformations shuffle data on the same key. An important detail is that if a derivation has more than one transformation, the shuffle keys of all transformations must align with one another in terms of the extracted key types (string vs integer) as well as the number of components in a composite key. Let’s generate the scaffolding for the derivation using flowctl. flowctl generate --source flow.yaml This command will create a few new files in your current working directory. ➜ tree . ├── deno.json ├── flow.yaml ├── flow_generated │ └── typescript │ └── Dani │ └── join-tutorial-typescript │ └── customers_with_orders.ts ├── full-outer-join.flow.ts └── orders.schema.yaml 5 directories, 5 files The folder flow_generated along with the deno.json file are two things you won’t have to modify during this tutorial. If you take a look at file that flowtcl generated under flow_generated/typescript/<your_working_directory>/<your_prefix>/customers_with_orders.ts you can see the types you are able to use in your transformations. // Generated for published documents of derived collection customers_with_orders. export type Document = /* A document that represents the joined result of orders with customer information */ { customer_id: string; email?: string; name?: string; orders?: unknown[]; phone?: string; }; // Generated for read documents of sourced collection Sheet1. export type SourceFromOrders = { customer_id?: string; order_date?: string; order_id?: string; row_id: number; total_amount?: string; }; // Generated for read documents of sourced collection Sheet1. export type SourceFromCustomers = { customer_id?: string; email?: string; name?: string; phone?: string; row_id: number; }; Now, the actual transformation code will live in the following file: full-outer-join.flow.ts. Take a look at its contents. import { IDerivation, Document, SourceFromOrders, SourceFromCustomers } from 'flow/Dani/join-tutorial-typescript/customers_with_orders.ts'; // Implementation for derivation Dani/join-tutorial-typescript/customers_with_orders. export class Derivation extends IDerivation { fromOrders(_read: { doc: SourceFromOrders }): Document[] { throw new Error("Not implemented"); } fromCustomers(_read: { doc: SourceFromCustomers }): Document[] { throw new Error("Not implemented"); } } Helpfully, flowctl provides two skeleton functions. Update the function body to implement the filter functionality. Modify the Derivation class like this: import { IDerivation, Document, SourceFromOrders, SourceFromCustomers } from 'flow/Dani/join-tutorial-typescript/customers_with_orders.ts'; // Implementation for derivation Dani/join-tutorial-typescript/customers_with_orders. export class Derivation extends IDerivation { fromOrders(_read: { doc: SourceFromOrders }): Document[] { return [{ customer_id: _read.doc.customer_id || "", orders: [_read.doc], }]; } fromCustomers(_read: { doc: SourceFromCustomers }): Document[] { return [{ customer_id: _read.doc.customer_id || "", email: _read.doc.email, name: _read.doc.name, phone: _read.doc.phone }]; } } As you can see here, all we do is return the fields we need from each document, there’s no code required to define the actual “join” – all the heavy lifting is done in the reduction phase during materialization by the Flow runtime based on the schema you defined earlier. Publish the derivation using flowctl: flowctl catalog publish --source flow.yaml After it’s successfully published, head over to the Flow dashboard to see the new collection. If you take a look at the preview window at the bottom of the page, you might notice that the documents are not yet in their final, reduced form. As mentioned earlier, the reduction happens during materialization. Let's create one to show the results! Head over to the materialization creation page, search for Google Sheets and configure a new connector. Create a fresh Google Sheet and copy its URL as the Spreadsheet Link. In the third configuration step, select the derivation you created as the source collection. After everything looks good, press the “Save and Publish” button in the top-right corner to provision your materialization connector. And that’s it! Go check out the sheet you created to store the results. You should see all orders associated with their respective customer in the nested array. To test the data flow, head over to the source “Orders” sheet, and add a new order for a customer. After a few seconds, you should see the new order added to the array of existing orders of the customer. Take a few minutes to play around with different actions as well; deleting an order, adding a customer, editing details of either entity. ","version":"Next","tagName":"h2"},{"title":"Wrapping up​","type":1,"pageTitle":"How to join two collections (TypeScript)","url":"/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/#wrapping-up","content":" In this guide you learned how to write a TypeScript derivation to join two collections. After finishing with the tutorial, don’t forget to delete resources you don’t need anymore. ","version":"Next","tagName":"h2"},{"title":"Amazon S3 to Snowflake","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon S3 to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/#prerequisites","content":" You'll need: (Recommended) understanding of the basic Flow concepts. Access to the Flow web application through an Estuary account. If you don't have one, visit the web app to register for free. An S3 bucket that contains the data you'd like to move to Snowflake. For public buckets, verify that the access policy allows anonymous reads. For buckets accessed by a user account, you'll need the AWS access key and secret access key for the user. See the AWS blog for help finding these credentials. A Snowflake account with: A target database, schema, and virtual warehouse; and a user with a role assigned that grants the appropriate access levels to these resources.You can use a script to quickly create all of these items. Have these details on hand for setup with Flow. The account identifier and host URL noted. The URL is formatted using the account identifier. For example, you might have the account identifier orgname-accountname.snowflakecomputing.com. ","version":"Next","tagName":"h2"},{"title":"Introduction​","type":1,"pageTitle":"Amazon S3 to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/#introduction","content":" In Estuary Flow, you create Data Flows to transfer data from source systems to destination systems in real time. In this use case, your source is an Amazon S3 bucket and your destination is a Snowflake data warehouse. After following this guide, you'll have a Data Flow that comprises: A capture, which ingests data from S3A collection, a cloud-backed copy of that data in the Flow systemA materialization, which pushes the data to Snowflake The capture and materialization rely on plug-in components called connectors. We'll walk through how to configure the S3 and Snowflake connectors to integrate these systems with Flow. ","version":"Next","tagName":"h2"},{"title":"Capture from S3​","type":1,"pageTitle":"Amazon S3 to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/#capture-from-s3","content":" You'll first create a capture to connect to your S3 bucket, which will yield one or more Flow collections. Go to the Flow web application at dashboard.estuary.dev and sign in using the credentials provided by your Estuary account manager. Click the Sources tab and choose New Capture. Find the Amazon S3 tile and click Capture. A form appears with the properties required for an S3 capture. Type a name for your capture. Your capture name must begin with a prefix to which you have access. In the Name field, use the drop-down to select your prefix. Append a unique capture name after the / to create the full name, for example, acmeCo/myS3Capture. Fill out the required properties for S3. AWS Access Key ID and AWS Secret Access Key: Required for private buckets. AWS Region and Bucket: These are listed in your S3 console. Prefix: You might organize your S3 bucket using prefixes, which emulate a directory structure. To capture only from a specific prefix, add it here. Match Keys: Filters to apply to the objects in the S3 bucket. If provided, only data whose absolute path matches the filter will be captured. For example, *\\.json will only capture JSON file. See the S3 connector documentation for information on advanced fields and parser settings. (You're unlikely to need these for most use cases.) Click Next. Flow uses the provided configuration to initiate a connection to S3. It generates a permissive schema and details of the Flow collection that will store the data from S3. You'll have the chance to tighten up each collection's JSON schema later, when you materialize to Snowflake. Click Save and publish. You'll see a notification when the capture publishes successfully. The data currently in your S3 bucket has been captured, and future updates to it will be captured continuously. Click Materialize Collections to continue. ","version":"Next","tagName":"h2"},{"title":"Materialize to Snowflake​","type":1,"pageTitle":"Amazon S3 to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/#materialize-to-snowflake","content":" Next, you'll add a Snowflake materialization to connect the captured data to its destination: your data warehouse. Locate the Snowflake tile and click Materialization. A form appears with the properties required for a Snowflake materialization. Choose a unique name for your materialization like you did when naming your capture; for example, acmeCo/mySnowflakeMaterialization. Fill out the required properties for Snowflake (you should have most of these handy from the prerequisites). Host URLAccountUserPasswordDatabaseSchemaWarehouse: optionalRole: optional Click Next. Flow uses the provided configuration to initiate a connection to Snowflake. You'll be notified if there's an error. In that case, fix the configuration form or Snowflake setup as needed and click Next to try again. Once the connection is successful, the Endpoint Config collapses and the Source Collections browser becomes prominent. It shows the collection you captured previously, which will be mapped to a Snowflake table. In the Collection Selector, optionally change the name in the Table field. This will be the name of the output table in Snowflake. Choose whether to enable delta updates. Apply a stricter schema to the collection for the materialization. S3 has a flat data structure. To materialize this data effectively to Snowflake, you should apply a schema that can translate to a table structure. Flow's Schema Inference tool can help. In the Source Collections browser, click the collection's Collection tab. Click Schema Inference The Schema Inference window appears. Flow scans the data in your collection and infers a new schema, called the readSchema, to use for the materialization. Review the new schema and click Apply Inferred Schema. Click Next to apply the changes you made to the collection. Click Save and Publish. You'll see a notification when the full Data Flow publishes successfully. ","version":"Next","tagName":"h2"},{"title":"What's next?​","type":1,"pageTitle":"Amazon S3 to Snowflake","url":"/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/#whats-next","content":" Your Data Flow has been deployed, and will run continuously until it's stopped. Updates in your S3 bucket will be reflected in your Snowflake table as they occur. You can advance your Data Flow by adding a derivation. Derivations are real-time data transformations. See the guide to create a derivation. ","version":"Next","tagName":"h2"},{"title":"Schema evolution","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/schema-evolution/","content":"","keywords":"","version":"Next"},{"title":"Introduction​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/guides/schema-evolution/#introduction","content":" Flow collections serve not only as your real-time data storage, but also as a contract between tasks that produce and consume their data. Captures are producers, materializations are consumers, and derivations can act as either. This contract helps prevent data loss and error in your Data Flows, and is defined in terms of the collection specification, or spec, which includes: The JSON schemaThe collection keyProjections, if any There are many reasons a collection spec might change. Often, it's due to a change in the source data. Regardless, you'll need to make changes to downstream tasks — most often, materializations — to avoid errors. ","version":"Next","tagName":"h2"},{"title":"Schema evolution scenarios​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/guides/schema-evolution/#schema-evolution-scenarios","content":" This guide is broken down into sections for different common scenarios, depending on which properties of the collection spec have changed. The key pointers have changedThe logical partitioning configuration has changedThe schema (or readSchema if defined separately) has changed A new field is addedA field's data type has changedA field was removed info There are a variety of reasons why these properties may change, and also different mechanisms for detecting changes in source data. In general, it doesn't matter why the collection spec has changed, only what has changed. However, AutoDiscovers are able to handle some of these scenarios automatically. Where applicable, AutoDiscover behavior will be called out under each section. ","version":"Next","tagName":"h2"},{"title":"Re-creating a collection​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/guides/schema-evolution/#re-creating-a-collection","content":" Scenario: the key pointer or logical partitioning configurations have changed. The key of a Flow collection cannot be changed after the collection is created. The same is true of the logical partitioning, which also cannot be changed after the collection is created. If you need to change either of those parts of a collection spec, you'll need to create a new collection and update the bindings of any captures or materializations that reference the old collection. Web app workflow If you're working in the Flow web app, you'll see an error message and an option to re-create the collection as shown in the example below. Click Apply to re-create the collection and update any tasks that reference the old collection with the new name. flowctl workflow: If you're working with flowctl, you'll need to re-create the collection manually in your flow.yaml file. You must also update any captures or materializations that reference it. For example, say you have a data flow defined by the following specs: captures: acmeCo/inventory/source-postgres: endpoint: connector: image: ghcr.io/estuary/source-postgres:v1 config: encrypted-pg-config.sops.yaml bindings: - resource: namespace: public stream: anvils mode: Normal target: acmeCo/inventory/anvils collections: acmeCo/inventory/anvils: key: [/sku] schema: type: object properties: sku: { type: string } warehouse_id: { type: string } quantity: { type: integer } required: [sku, warehouse_id, quantity] materializations: acmeCo/data-warehouse/materialize-snowflake: endpoint: connector: image: ghcr.io/estuary/materialize-snowflake:v1 config: encrypted-snowflake-config.sops.yaml bindings: - source: acmeCo/inventory/anvils resource: table: anvils schema: inventory To change the collection key, you would update the YAML like so. Note the capture target, collection name, and materialization source. captures: acmeCo/inventory/source-postgres: endpoint: connector: image: ghcr.io/estuary/source-postgres:v1 config: encrypted-pg-config.sops.yaml bindings: - resource: namespace: public stream: anvils mode: Normal backfill: 1 target: acmeCo/inventory/anvils_v2 collections: acmeCo/inventory/anvils_v2: key: [/sku] schema: type: object properties: sku: { type: string } warehouse_id: { type: string } quantity: { type: integer } required: [sku, warehouse_id, quantity] materializations: acmeCo/data-warehouse/materialize-snowflake: endpoint: connector: image: ghcr.io/estuary/materialize-snowflake:v1 config: encrypted-snowflake-config.sops.yaml bindings: - source: acmeCo/inventory/anvils_v2 backfill: 1 resource: table: anvils schema: inventory The existing acmeCo/inventory/anvils collection will not be modified and will remain in place, but won't update because no captures are writing to it. Also note the addition of the backfill property. If the backfill property already exists, just increment its value. For the materialization, this will ensure that the destination table in Snowflake gets dropped and re-created, and that the materialization will backfill it from the beginning. In the capture, it similarly causes it to start over from the beginning, writing the captured data into the new collection. Auto-Discovers: If you enabled the option to Automatically keep schemas up to date (autoDiscover) and selected Breaking change re-versions collections (evolveIncompatibleCollections) for the capture, this evolution would be performed automatically. ","version":"Next","tagName":"h3"},{"title":"A new field is added​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/guides/schema-evolution/#a-new-field-is-added","content":" Scenario: this is one way in which the schema can change. When a new field appears in the collection schema, it may automatically be added to any materializations that use recommended fields. Recommended fields are enabled by default in each binding. See the materialization docs for more info about how to enable or disable recommended fields. When recommended fields are enabled, new fields are added automatically if they meet the criteria for the particular materialization connector. For example, scalar fields (strings, numbers, and booleans) are considered "recommended" fields when materializing to database tables. If your materialization binding is set to recommended: false, or if the new field is not recommended, you can manually add it to the materialization. To manually add a field: In the Flow web app, edit the materialization, find the affected binding, and click Show Fields.Using flowctl, add the field to fields.include in the materialization specification as shown here. info Newly added fields will not be set for rows that have already been materialized. If you want to ensure that all rows have the new field, just increment the backfill counter in the affected binding to have it re-start from the beginning. ","version":"Next","tagName":"h3"},{"title":"A field's data type has changed​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/guides/schema-evolution/#a-fields-data-type-has-changed","content":" Scenario: this is one way in which the schema can change. When a field's data type has changed, the effect on your materialization depends on the specific connector you're using. warning Note that these restrictions only apply to fields that are actively being materialized. If a field is excluded from your materialization, either explicitly or because it's not recommended, then the data types may change in any way. Regardless of whether the field is materialized or not, it must still pass schema validation tests. Therefore, you must still make sure existing data remains valid against the new schema. For example, if you changed excluded_field: { type: string } to type: integer while there was existing data with string values, your materialization would fail due to a schema validation error. Database and data warehouse materializations tend to be somewhat restrictive about changing column types. They typically only allow dropping NOT NULL constraints. This means that you can safely change a schema to make a required field optional, or to add null as a possible type, and the materialization will continue to work normally. Most other types of changes will require materializing into a new table. The best way to find out whether a change is acceptable to a given connector is to run test or attempt to re-publish. Failed attempts to publish won't affect any tasks that are already running. Web app workflow If you're working in the Flow web app, and attempt to publish a change that's unacceptable to the connector, you'll see an error message and an offer to increment the necessary backfill counters, or, in rare cases, to re-create the collection. Click Apply to to accept this solution and continue to publish. flowctl workflow If you test or attempt to publish a change that's unacceptable to the connector, you'll see an error message pointing to the field that's changed. In most cases, you can work around the issue by manually updating the materialization to materialize into a new table. For example, say you have a data flow defined by the following specs: collections: acmeCo/inventory/anvils: key: [/sku] schema: type: object properties: sku: { type: string } quantity: { type: integer } description: { type: string } required: [sku, quantity] materializations: acmeCo/data-warehouse/materialize-snowflake: endpoint: connector: image: ghcr.io/estuary/materialize-snowflake:v1 config: encrypted-snowflake-config.sops.yaml bindings: - source: acmeCo/inventory/anvils backfill: 3 resource: table: anvils schema: inventory Let's say the type of description was broadened to allow object values in addition to string. You'd update your specs as follows: collections: acmeCo/inventory/anvils: key: [/sku] schema: type: object properties: sku: { type: string } quantity: { type: integer } description: { type: [string, object] } required: [sku, quantity] materializations: acmeCo/data-warehouse/materialize-snowflake: endpoint: connector: image: ghcr.io/estuary/materialize-snowflake:v1 config: encrypted-snowflake-config.sops.yaml bindings: - source: acmeCo/inventory/anvils backfill: 4 resource: table: anvils schema: inventory Note that the only change was to increment the backfill counter. If the previous binding spec did not specify backfill, then just add backfill: 1. This works because the type is broadened, so existing values will still validate against the new schema. If this were not the case, then you'd likely need to re-create the whole collection. Auto-Discovers: If you enabled the option to Automatically keep schemas up to date (autoDiscover) and selected Breaking change re-versions collections (evolveIncompatibleCollections) for the capture, this evolution would be performed automatically. ","version":"Next","tagName":"h3"},{"title":"A field was removed​","type":1,"pageTitle":"Schema evolution","url":"/pr-preview/pr-1594/guides/schema-evolution/#a-field-was-removed","content":" Scenario: this is one way in which the schema can change. Removing fields is generally allowed by all connectors, and does not require new tables or collections. Note that for database materializations, the existing column will not be dropped, and will just be ignored by the materialization going forward. A NOT NULL constraint would be removed from that column, but it will otherwise be left in place. ","version":"Next","tagName":"h3"},{"title":"How to transform data using TypeScript","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/","content":"","keywords":"","version":"Next"},{"title":"Introduction​","type":1,"pageTitle":"How to transform data using TypeScript","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/#introduction","content":" This tutorial will show you how to implement a stateless transformation using TypeScript. You’ll learn how to implement a flow that filters events coming from the live, real-time Wikipedia API. ","version":"Next","tagName":"h2"},{"title":"Setting up your development environment​","type":1,"pageTitle":"How to transform data using TypeScript","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/#setting-up-your-development-environment","content":" In order to implement transformations through derivations, you’ll need to set up your development environment. You’ll need a text editor and flowtcl, the CLI-tool for Flow installed on your machine. Check out the docs page on installation instructions. Before continuing, sign in to the Estuary Flow dashboard, make sure you enable access to the Wikipedia demo. Using flowtcl, quickly verify you are able to view the demo collections used in this guide. Execute the below command to display the documents in the demo/wikipedia/recentchange-sampled collection: ::note This collection is a 3% sample of the enormous demo/wikipedia/recentchange collection which contains millions of documents. Since the purpose of this tutorial is to demonstrate a proof of concept, we avoid publishing a derivation that processes hundreds of gigabytes of data. ::: flowctl collections read --collection demo/wikipedia/recentchange-sampled --uncommitted If you see a stream of JSON documents on your terminal, you’re all good - feel free to cancel the process by pressing C^C. Examine a sample JSON that lives in the demo collection, as this is the data you’ll be using as the input for our derivation. { "$schema": "/mediawiki/recentchange/1.0.0", "_meta": { "file": "recentchange", "offset": 12837, "uuid": "f8f07d87-f5bf-11ee-8401-4fdf95f7b91a" }, "bot": false, "comment": "[[:File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg]] added to category", "id": 2468434138, "meta": { "domain": "commons.wikimedia.org", "dt": "2024-04-08T15:52:13Z", "id": "d9e8698f-4eac-4262-a451-b7ca247e401c", "offset": 5008568732, "partition": 0, "request_id": "b5372124-63fa-45e1-b35e-86784f1692bc", "stream": "mediawiki.recentchange", "topic": "eqiad.mediawiki.recentchange", "uri": "https://commons.wikimedia.org/wiki/Category:Jetons" }, "namespace": 14, "notify_url": "https://commons.wikimedia.org/w/index.php?diff=866807860&oldid=861559382&rcid=2468434138", "parsedcomment": "<a href=\\"/wiki/File:Jeton._Ordinaire_des_guerres_-_btv1b10405460g_(1_of_2).jpg\\" title=\\"File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg\\">File:Jeton. Ordinaire des guerres - btv1b10405460g (1 of 2).jpg</a> added to category", "server_name": "commons.wikimedia.org", "server_script_path": "/w", "server_url": "https://commons.wikimedia.org", "timestamp": 1712591533, "title": "Category:Jetons", "title_url": "https://commons.wikimedia.org/wiki/Category:Jetons", "type": "categorize", "user": "DenghiùComm", "wiki": "commonswiki" } There’s a bunch of fields available, but as mentioned earlier, the scope of the transformation for this tutorial is limited to only one field, which lives nested inside the meta object. { ... "meta": { ... "domain": "commons.wikimedia.org", ... }, ... } This field is composed of the various wikipedia domains that are used to serve different sites of the organization. This is what you’ll use as the base of the filter derivation. Let's say that the goal is to only keep events that originate from the English-language wikipedia page, which is running under the domain en.wikipedia.org. ","version":"Next","tagName":"h2"},{"title":"Writing the derivation​","type":1,"pageTitle":"How to transform data using TypeScript","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/#writing-the-derivation","content":" Set up your folder structure so you can organize the resources required for the derivation. Create a working directory to follow along, and inside, create a flow.yaml file. Inside your flow.yaml file, add the following contents: --- collections: Dani/derivation-tutorial/recentchange-filtered-typescript: schema: recentchange-filtered.schema.yaml key: - /_meta/file - /_meta/offset derive: using: typescript: module: recentchange-filtered.ts transforms: - name: filter_values_typescript source: demo/wikipedia/recentchange-sampled shuffle: any   The Flow consists of just one collection, which is what you define here, called Dani/derivation-tutorial/recentchange-filtered-typescript. Let’s go over this in a bit more detail. First of all, the collection needs a schema. The schema of the incoming data (also called the “write” schema) is already defined by the demo, you only have to define the schema of the documents the transformation will output, which is the “read” schema. Let’s define what the final documents will look like. --- $schema: "http://json-schema.org/draft-07/schema#" properties: _meta: properties: file: type: string offset: type: integer uuid: type: string required: - file - offset type: object domain: type: string title: type: string user: type: string type: object Save this schema as recentchange-filtered.schema.yaml next to your flow.yaml file. As you can see, this schema definition includes a lot less fields than what is available in the incoming documents, this is expected, but if you wish to include more, this is where you would add them first. In the collection yaml definition, the next section defines the key of the documents. key: - /_meta/file - /_meta/offset Every Flow collection must declare a key which is used to group its documents. Keys are specified as an array of JSON pointers to document locations. The important detail here is to know that a collection key instructs Flow how documents of a collection are to be reduced, such as while being materialized to an endpoint. For this tutorial, you are just going to reuse the key definition of the base collection. The final section is where you specify that this collection is derived from another collection. derive: using: typescript: module: recentchange-filtered.ts transforms: - name: filter_values_typescript source: demo/wikipedia/recentchange-sampled shuffle: any Here you configure the name of the Typescript file that will contain the code for the actual transformation (don’t worry about the file not existing yet!) and give a name to the transformation.  The source: demo/wikipedia/recentchange-sampled property lets Flow know that the source collection is the demo collection from mentioned at in the beginning of the tutorial while shuffle tells Flow how to colocate documents while processing, which in this case is set to any, meaning source documents can be processed by any available compute. Alright, the configuration required for the derivation is in place, all that’s left is to write some TypeScript! ","version":"Next","tagName":"h2"},{"title":"The transformation code​","type":1,"pageTitle":"How to transform data using TypeScript","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/#the-transformation-code","content":" The next step is to use flowctl to generate TypeScript stubs you can use as aid when writing the transformation code. Execute the following command: flowctl generate --source flow.yaml If everything went well, you’ll see a bunch of new files that flowctl generated for you in your working directory. ➜ tree . ├── deno.json ├── flow.yaml ├── flow_generated │ └── typescript │ └── Dani │ └── derivation-tutorial │ └── recentchange-filtered-typescript.ts ├── recentchange-filtered.schema.yaml └── recentchange-filtered.ts 5 directories, 5 files The folder flow_generated along with the deno.json file are two things you won’t have to modify during this tutorial. If you take a look at file that flowtcl generated under flow_generated/typescript/<your_working_directory>/<your_prefix>/recentchange-filtered-typescript.ts you can see the types you are able to use in your transformations. // Generated for published documents of derived collection Dani/derivation-tutorial/recentchange-filtered-typescript. export type Document = { "_meta"?: { file: string; offset: number; uuid?: string; }; domain?: string; title?: string; user?: string; }; Now, the actual transformation code will live in the following file: recentchange-filtered.ts. Take a look at the default contents. import { IDerivation, Document, SourceFilterValuesTypescript } from 'flow/Dani/derivation-tutorial/recentchange-filtered-typescript.ts'; // Implementation for derivation Dani/derivation-tutorial/recentchange-filtered-typescript. export class Derivation extends IDerivation { filterValuesTypescript(_read: { doc: SourceFilterValuesTypescript }): Document[] { throw new Error("Not implemented"); } } Helpfully, flowctl provides a skeleton function. Update the function body to implement the filter functionality. export class Derivation extends IDerivation { filterValuesTypescript(_read: { doc: SourceFilterValuesTypescript }): Document[] { if (_read.doc.meta?.domain == 'en.wikipedia.org') { return [{ "_meta": { "file": _read.doc._meta.file, "offset": _read.doc._meta.offset, "uuid": _read.doc._meta.uuid, }, "domain": _read.doc.meta.domain, "title": _read.doc.title, "user": _read.doc.user }]; } else { return [] } } } As you can see, only documents which contain the “en.wikipedia.org” domain are being returned, in addition to discarding most fields from the incoming record, and just keeping the ones defined in the collection schema. ","version":"Next","tagName":"h2"},{"title":"Verify​","type":1,"pageTitle":"How to transform data using TypeScript","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/#verify","content":" You can use flowctl to quickly verify your derivation before publishing it. Use the preview command to get an idea of the resulting collections. ➜ flowctl preview --source flow.yaml --name Dani/derivation-tutorial/recentchange-filtered-typescript {"_meta":{"file":"recentchange","offset":13757,"uuid":"079296fe-f5c0-11ee-9401-4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"Adoption","user":"JustBeCool"} {"_meta":{"file":"recentchange","offset":13772,"uuid":"082ae4fc-f5c0-11ee-8801-4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"Wikipedia:Teahouse","user":"Subanark"} {"_meta":{"file":"recentchange","offset":13774,"uuid":"082ae4fc-f5c0-11ee-9001-4fdf95f7b91a"},"domain":"en.wikipedia.org","title":"Islandia, New York","user":"204.116.28.102"} ^C As you can see, the output format matches the defined schema. The last step would be to publish your derivation to Flow, which you can also do using flowctl. Publishing the derivation will initialize the transformation on the live, real-time Wikipedia stream, make sure to delete it after completing the tutorial. flowctl catalog publish --source flow.yaml After successfully publishing your derivation, head over to the Collections page on the Web UI and you will be able to see your derivation in action! ","version":"Next","tagName":"h2"},{"title":"Wrapping up​","type":1,"pageTitle":"How to transform data using TypeScript","url":"/pr-preview/pr-1594/guides/transform_data_using_typescript/#wrapping-up","content":" In this guide you learned how to write your first stateless TypeScript derivation to filter data in a collection. ","version":"Next","tagName":"h2"},{"title":"Comparisons","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/overview/comparisons/","content":"","keywords":"","version":"Next"},{"title":"Apache Beam and Google Cloud Dataflow​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#apache-beam-and-google-cloud-dataflow","content":" Flow’s most apt comparison is to Apache Beam. You may use a variety of runners (processing engines) for your Beam deployment. One of the most popular, Google Cloud Dataflow, is a more robust redistribution under an additional SDK. Regardless of how you use Beam, there’s a lot of conceptual overlap with Flow. This makes Beam and Flow alternatives rather than complementary technologies, but there are key differences. Like Beam, Flow’s primary primitive is a collection. You build a processing graph (called a pipeline in Beam and a Data Flow in Flow) by relating multiple collections together through procedural transformations, or lambdas. As with Beam, Flow’s runtime performs automatic data shuffles and is designed to allow fully automatic scaling. Also like Beam, collections have associated schemas. Unlike Beam, Flow doesn’t distinguish between batch and streaming contexts. Flow unifies these paradigms under a single collection concept, allowing you to seamlessly work with both data types. Also, while Beam allows you the option to define combine operators, Flow’s runtime always applies combine operators. These are built using the declared semantics of the document’s schema, which makes it much more efficient and cost-effective to work with streaming data. Finally, Flow allows stateful stream-to-stream joins without the windowing semantics imposed by Beam. Notably, Flow’s modeling of state – via its per-key register concept – is substantially more powerful than Beam's per-key-and-window model. For example, registers can trivially model the cumulative lifetime value of a customer. ","version":"Next","tagName":"h2"},{"title":"Kafka​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#kafka","content":" Flow inhabits a different space than Kafka does by itself. Kafka is an infrastructure that supports streaming applications running elsewhere. Flow is an opinionated framework for working with real-time data. You might think of Flow as an analog to an opinionated bundling of several important features from the broader Kafka ecosystem. Flow is built on Gazette, a highly-scalable streaming broker similar to log-oriented pub/sub systems. Thus, Kafka is more directly comparable to Gazette. Flow also uses Gazette’s consumer framework, which has similarities to Kafka consumers. Both manage scale-out execution contexts for consumer tasks, offer durable local task stores, and provide exactly-once semantics. Journals in Gazette and Flow are roughly analogous to Kafka partitions. Each journal is a single append-only log. Gazette has no native notion of a topic, but instead supports label-based selection of subsets of journals, which tends to be more flexible. Gazette journals store data in contiguous chunks called fragments, which typically live in cloud storage. Each journal can have its own separate storage configuration, which Flow leverages to allow users to bring their own cloud storage buckets. Another unique feature of Gazette is its ability to serve reads of historical data by providing clients with pre-signed cloud storage URLs, which enables it to serve many readers very efficiently. Generally, Flow users don't need to know or care much about Gazette and its architecture, since Flow provides a higher-level interface over groups of journals, called collections. Flow collections are somewhat similar to Kafka streams, but with some important differences. Collections always store JSON and must have an associated JSON schema. Collections also support automatic logical and physical partitioning. Each collection is backed by one or more journals, depending on the partitioning. Flow tasks are most similar to Kafka stream processors, but are more opinionated. Tasks fall into one of three categories: captures, derivations, and materializations. Tasks may also have more than one process, which Flow calls shards, to allow for parallel processing. Tasks and shards are fully managed by Flow. This includes transactional state management and zero-downtime splitting of shards, which enables turnkey scaling. See how Flow compares to popular stream processing platforms that use Kafka: Flow vs Confluent feature and pricing breakdownFlow vs Debezium feature and pricing breakdown ","version":"Next","tagName":"h2"},{"title":"Spark​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#spark","content":" Spark can be described as a batch engine with stream processing add-ons, where Flow is fundamentally a streaming system that is able to easily integrate with batch systems. You can think of a Flow collection as a set of RDDs with common associated metadata. In Spark, you can save an RDD to a variety of external systems, like cloud storage or a database. Likewise, you can load from a variety of external systems to create an RDD. Finally, you can transform one RDD into another. You use Flow collections in a similar manner. They represent a logical dataset, which you can materialize to push the data into some external system like cloud storage or a database. You can also create a collection that is derived by applying stateful transformations to one or more source collections. Unlike Spark RDDs, Flow collections are backed by one or more unbounded append-only logs. Therefore, you don't create a new collection each time data arrives; you simply append to the existing one. Collections can be partitioned and can support extremely large volumes of data. Spark's processing primitives, applications, jobs, and tasks, don't translate perfectly to Flow, but we can make some useful analogies. This is partly because Spark is not very opinionated about what an application does. Your Spark application could read data from cloud storage, then transform it, then write the results out to a database. The closest analog to a Spark application in Flow is the Data Flow. A Data Flow is a composition of Flow tasks, which are quite different from tasks in Spark. In Flow, a task is a logical unit of work that does one of capture (ingest), derive (transform), or materialize (write results to an external system). What Spark calls a task is actually closer to a Flow shard. In Flow, a task is a logical unit of work, and shards represent the potentially numerous processes that actually carry out that work. Shards are the unit of parallelism in Flow, and you can easily split them for turnkey scaling. Composing Flow tasks is also a little different than composing Spark jobs. Flow tasks always produce and/or consume data in collections, instead of piping data directly from one shard to another. This is because every task in Flow is transactional and, to the greatest degree possible, fault-tolerant. This design also affords painless backfills of historical data when you want to add new transformations or materializations. ","version":"Next","tagName":"h2"},{"title":"Hadoop, HDFS, and Hive​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#hadoop-hdfs-and-hive","content":" There are many different ways to use Hadoop, HDFS, and the ecosystem of related projects, several of which are useful comparisons to Flow. To gain an understanding of Flow's processing model for derivations, see this blog post about MapReduce in Flow. HDFS is sometimes used as a system of record for analytics data, typically paired with an orchestration system for analytics jobs. If you do this, you likely export datasets from your source systems into HDFS. Then, you use some other tool to coordinate running various MapReduce jobs, often indirectly through systems like Hive. For this use case, the best way of describing Flow is that it completely changes the paradigm. In Flow, you always append data to existing collections, rather than creating a new one each time a job is run. In fact, Flow has no notion of a job like there is in Hadoop. Flow tasks run continuously and everything stays up to date in real time, so there's never a need for outside orchestration or coordination. Put simply, Flow collections are log-like, and files in HDFS typically store table-like data. This blog post explores those differences in greater depth. To make this more concrete, imagine a hypothetical example of a workflow in the Hadoop world where you export data from a source system, perform some transformations, and then run some Hive queries. In Flow, you instead define a capture of data from the source, which runs continuously and keeps a collection up to date with the latest data from the source. Then you transform the data with Flow derivations, which again apply the transformations incrementally and in real time. While you could actually use tools like Hive to directly query data from Flow collections — the layout of collection data in cloud storage is intentionally compatible with this — you could also materialize a view of your transformation results to any database, which is also kept up to date in real time. ","version":"Next","tagName":"h2"},{"title":"Fivetran, Airbyte, and other ELT solutions​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#fivetran-airbyte-and-other-elt-solutions","content":" Tools like Fivetran and Airbyte are purpose-built to move data from one place to another. These ELT tools typically model sources and destinations, and run regularly scheduled jobs to export from the source directly to the destination. Flow models things differently. Instead of modeling the world in terms of independent scheduled jobs that copy data from source to destination, Data Flows model a directed graph ofcaptures (reads from sources),derivations (transforms), andmaterializations (writes to destinations). Collectively, these are called tasks. Tasks in Flow are only indirectly linked. Captures read data from a source and output to collections. Flow collections store all the data in cloud storage, with configurable retention for historical data. You can then materialize each collection to any number of destination systems. Each one will be kept up to date in real time, and new materializations can automatically backfill all your historical data. Collections in Flow always have an associated JSON schema, and they use that to ensure the validity of all collection data. Tasks are also transactional and generally guarantee end-to-end exactly-once processing (so long as the endpoint system can accommodate them). Like Airbyte, Flow uses connectors for interacting with external systems in captures and materializations. For captures, Flow integrates the Airbyte specification, so all Airbyte source connectors can be used with Flow. For materializations, Flow uses its own protocol which is not compatible with the Airbyte spec. In either case, the usage of connectors is pretty similar. In terms of technical capabilities, Flow can do everything that these tools can and more. Both Fivetran and Airbyte both currently have graphical interfaces that make them much easier for non-technical users to configure. Flow, too, is focused on empowering non-technical users through its web application. At the same time, it Flow offers declarative YAML for configuration, which works excellently in a GitOps workflow. Flow vs Fivetran feature and pricing breakdown. ","version":"Next","tagName":"h2"},{"title":"dbt​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#dbt","content":" dbt is a tool that enables data analysts and engineers to transform data in their warehouses more effectively. In addition to – and perhaps more important than – its transform capability, dbt brought an entirely new workflow for working with data: one that prioritizes version control, testing, local development, documentation, composition, and re-use. Like dbt, Flow uses a declarative model and tooling, but the similarities end there. dbt is a tool for defining transformations, which are executed within your analytics warehouse. Flow is a tool for delivering data to that warehouse, as well as continuous operational transforms that are applied everywhere else. These two tools can make lots of sense to use together. First, Flow brings timely, accurate data to the warehouse. Within the warehouse, analysts can use tools like dbt to explore the data. The Flow pipeline is then ideally suited to productionize important insights as materialized views or by pushing to another destination. Put another way, Flow is a complete ELT platform, but you might choose to perform and manage more complex transformations in a separate, dedicated tool like dbt. While Flow and dbt don’t interact directly, both offer easy integration through your data warehouse. ","version":"Next","tagName":"h2"},{"title":"Materialize, Rockset, ksqlDB, and other real-time databases​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#materialize-rockset-ksqldb-and-other-real-time-databases","content":" Modern real-time databases like Materialize, Rockset, and ksqlDB consume streams of data, oftentimes from Kafka brokers, and can keep SQL views up to date in real time. These real-time databases have a lot of conceptual overlap with Flow. The biggest difference is that Flow can materialize this same type of incrementally updated view into any database, regardless of whether that database has real-time capabilities or not. However, this doesn't mean that Flow should replace these systems in your stack. In fact, it can be optimal to use Flow to feed data into them. Flow adds real-time data capture and materialization options that many real-time databases don't support. Once data has arrived in the database, you have access to real-time SQL analysis and other analytical tools not native to Flow. For further explanation, read the section below on OLAP databases. ","version":"Next","tagName":"h2"},{"title":"Snowflake, BigQuery, and other OLAP databases​","type":1,"pageTitle":"Comparisons","url":"/pr-preview/pr-1594/overview/comparisons/#snowflake-bigquery-and-other-olap-databases","content":" Flow differs from OLAP databases mainly in that it's not a database. Flow has no query interface, and no plans to add one. Instead, Flow allows you to use the query interfaces of any database by materializing views into it. Flow is similar to OLAP databases in that it can be the source of truth for all analytics data (though it's also capable enough to handle operational workloads). Instead of schemas and tables, Flow defines collections. These collections are conceptually similar to database tables in the sense that they are containers for data with an associated (primary) key. Under the hood, Flow collections are each backed by append-only logs, where each document in the log represents a delta update for a given key. Collections can be easily materialized into a variety of external systems, such as Snowflake or BigQuery. This creates a table in your OLAP database that is continuously kept up to date with the collection. With Flow, there's no need to schedule exports to these systems, and thus no need to orchestrate the timing of those exports. You can also materialize a given collection into multiple destination systems, so you can always use whichever system is best for the type of queries you want to run. Like Snowflake, Flow uses inexpensive cloud storage for all collection data. It even lets you bring your own storage bucket, so you're always in control. Unlike data warehouses, Flow is able to directly capture data from source systems, and continuously and incrementally keep everything up to date. A common pattern is to use Flow to capture data from multiple different sources and materialize it into a data warehouse. Flow can also help you avoid expenses associated with queries you frequently pull from a data warehouse by keeping an up-to-date view of them where you want it. Because of Flow’s exactly-once processing guarantees, these materialized views are always correct, consistent, and fault-tolerant. ","version":"Next","tagName":"h2"},{"title":"Who should use Flow?","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/overview/who-should-use-flow/","content":"","keywords":"","version":"Next"},{"title":"How Flow can help​","type":1,"pageTitle":"Who should use Flow?","url":"/pr-preview/pr-1594/overview/who-should-use-flow/#how-flow-can-help","content":" These unique Flow features can help you solve the problems listed above. ","version":"Next","tagName":"h2"},{"title":"Fully integrated pipelines​","type":1,"pageTitle":"Who should use Flow?","url":"/pr-preview/pr-1594/overview/who-should-use-flow/#fully-integrated-pipelines","content":" With Flow, you can build, test, and evolve pipelines that continuously capture, transform, and materialize data across all of your systems. With one tool, you can power workflows that have historically required you to first piece together services, then integrate and operate them in-house to meet your needs. To achieve comparable capabilities to Flow you would need: A low-latency streaming system, such as AWS KinesisData lake build-out, such as Kinesis Firehose to S3Custom ETL application development, such as Spark, Flink, or AWS λSupplemental data stores for intermediate transformation statesETL job management and execution, such as a self-hosting or Google Cloud DataflowCustom reconciliation of historical vs streaming datasets, including onerous backfills of new streaming applications from historical data Flow dramatically simplifies this inherent complexity. It saves you time and costs, catches mistakes before they hit production, and keeps your data fresh across all the places you use it. With both a UI-forward web application and a powerful CLI , more types of professionals can contribute to what would otherwise require a highly specialized set of technical skills. ","version":"Next","tagName":"h3"},{"title":"Efficient architecture​","type":1,"pageTitle":"Who should use Flow?","url":"/pr-preview/pr-1594/overview/who-should-use-flow/#efficient-architecture","content":" Flow mixes a variety of architectural techniques to deliver high throughput, avoid latency, and minimize operating costs. These include: Leveraging reductions to reduce the amount of data that must be ingested, stored, and processed, often dramaticallyExecuting transformations predominantly in-memoryOptimistic pipelining and vectorization of internal remote procedure calls (RPCs) and operationsA cloud-native design that optimizes for public cloud pricing models Flow also makes it easy to materialize focused data views directly into your warehouse, so you don't need to repeatedly query the much larger source datasets. This can dramatically lower warehouse costs. ","version":"Next","tagName":"h3"},{"title":"Powerful transformations​","type":1,"pageTitle":"Who should use Flow?","url":"/pr-preview/pr-1594/overview/who-should-use-flow/#powerful-transformations","content":" With Flow, you can build pipelines that join a current event with an event that happened days, weeks, even years in the past. Flow can model arbitrary stream-to-stream joins without the windowing constraints imposed by other systems, which limit how far back in time you can join. Flow transforms data in durable micro-transactions, meaning that an outcome, once committed, won't be silently re-ordered or changed due to a crash or machine failure. This makes Flow uniquely suited for operational workflows, like assigning a dynamic amount of available inventory to a stream of requests — decisions that, once made, should not be forgotten. You can also evolve transformations as business requirements change, enriching them with new datasets or behaviors without needing to re-compute from scratch. ","version":"Next","tagName":"h3"},{"title":"Data integrity​","type":1,"pageTitle":"Who should use Flow?","url":"/pr-preview/pr-1594/overview/who-should-use-flow/#data-integrity","content":" Flow is architected to ensure that your data is accurate and that changes don't break pipelines. It supports strong schematization, durable transactions with exactly-once semantics, and easy end-to-end testing. Required JSON schemas ensure that only clean, consistent data is ingested into Flow or written to external systems. If a document violates its schema, Flow pauses the pipeline, giving you a chance to fix the error.Schemas can encode constraints, like that a latitude value must be between +90 and -90 degrees, or that a field must be a valid email address.Flow can project JSON schema into other flavors, like TypeScript types or SQL tables. Strong type checking catches bugs before they're applied to production.Flow's declarative tests verify the integrated, end-to-end behavior of data flows. ","version":"Next","tagName":"h3"},{"title":"Dynamic scaling​","type":1,"pageTitle":"Who should use Flow?","url":"/pr-preview/pr-1594/overview/who-should-use-flow/#dynamic-scaling","content":" The Flow runtime scales from a single process up to a large Kubernetes cluster for high-volume production deployments. Processing tasks are quickly reassigned upon any machine failure for high availability. Each process can also be scaled independently, at any time, and without downtime. This is unique to Flow. Comparable systems require that an arbitrary data partitioning be decided upfront, a crucial performance knob that's awkward and expensive to change. Instead, Flow can repeatedly split a running task into two new tasks, each half the size, without stopping it or impacting its downstream uses. ","version":"Next","tagName":"h3"},{"title":"Allowlisting IP Addresses for Estuary Flow","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/allow-ip-addresses/","content":"","keywords":"","version":"Next"},{"title":"IP Addresses to Allowlist​","type":1,"pageTitle":"Allowlisting IP Addresses for Estuary Flow","url":"/pr-preview/pr-1594/reference/allow-ip-addresses/#ip-addresses-to-allowlist","content":" Ensure that the following IP addresses are allowlisted on both the source and destination systems that interact with Estuary Flow: 34.121.207.12835.226.75.13534.68.62.148 ","version":"Next","tagName":"h2"},{"title":"Authorizing users and authenticating with Flow","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/authentication/","content":"","keywords":"","version":"Next"},{"title":"Subjects, objects, and inherited capabilities​","type":1,"pageTitle":"Authorizing users and authenticating with Flow","url":"/pr-preview/pr-1594/reference/authentication/#subjects-objects-and-inherited-capabilities","content":" The entity to which you grant a capability is called the subject, and the entity over which access is granted is called the object. The subject can be either a user or a prefix, and the object is always a prefix. This allows subjects to inherit nested capabilities, so long as they are granted admin. For example, user X of Acme Co has admin access to the acmeCo/ prefix, and user Y has write access. A third party has granted acmeCo/ read access to shared data at outside-org/acmeCo-share/. User X automatically inherits read access to outside-org/acmeCo-share/, but user Y does not. ","version":"Next","tagName":"h2"},{"title":"Default authorization settings​","type":1,"pageTitle":"Authorizing users and authenticating with Flow","url":"/pr-preview/pr-1594/reference/authentication/#default-authorization-settings","content":" When you first sign up to use Flow, your organization is provisioned a prefix, and your username is granted admin access to the prefix. Your prefix is granted write access to itself and read access to its logs, which are stored under a unique sub-prefix of the global ops/ prefix. Using the same example, say user X signs up on behalf of their company, AcmeCo. User X is automatically granted admin access to the acmeCo/ prefix.acmeCo/, in turn, has write access to acmeCo/ and read access to ops/acmeCo/. As more users and prefixes are added, admins can provision capabilities using the CLI. ","version":"Next","tagName":"h2"},{"title":"Authenticating Flow in the web app​","type":1,"pageTitle":"Authorizing users and authenticating with Flow","url":"/pr-preview/pr-1594/reference/authentication/#authenticating-flow-in-the-web-app","content":" You must sign in to begin a new session using the Flow web application. For the duration of the session, you'll be able to perform actions depending on the capabilities granted to the user profile. You can view the capabilities currently provisioned in your organization on the Admin tab. ","version":"Next","tagName":"h2"},{"title":"Authenticating Flow using the CLI​","type":1,"pageTitle":"Authorizing users and authenticating with Flow","url":"/pr-preview/pr-1594/reference/authentication/#authenticating-flow-using-the-cli","content":" You can use the flowctl CLI to work with your organization's catalogs and drafts in your local development environment. To authenticate a local development session using the CLI, do the following: Ensure that you have an Estuary account and have signed into the Flow web app before. In the terminal of your local development environment, run: flowctl auth login In a browser window, the web app opens to the CLI-API tab. Copy the access token. Return to the terminal, paste the access token, and press Enter. The token will expire after a predetermined duration. Repeat this process to re-authenticate. ","version":"Next","tagName":"h2"},{"title":"Provisioning capabilities​","type":1,"pageTitle":"Authorizing users and authenticating with Flow","url":"/pr-preview/pr-1594/reference/authentication/#provisioning-capabilities","content":" As an admin, you can provision capabilities using the CLI with the subcommands of flowctl auth roles. For example: flowctl auth roles list returns a list of all currently provisioned capabilities flowctl auth roles grant --object-role=acmeCo/ --capability=admin --subject-user-id=userZ grants user Z admin access to acmeCo flowctl auth roles revoke --object-role=outside-org/acmeCo-share/ --capability=read --subject-role=acmeCo/ would be used by an admin of outside-orgto revoke acmeCo/'s read access to outside-org/acmeCo-share/. You can find detailed help for all subcommands using the --help or -h flag. ","version":"Next","tagName":"h2"},{"title":"Configuring task shards","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Configuring-task-shards/","content":"","keywords":"","version":"Next"},{"title":"Properties​","type":1,"pageTitle":"Configuring task shards","url":"/pr-preview/pr-1594/reference/Configuring-task-shards/#properties","content":" Property\tTitle\tDescription\tType/disable\tDisable\tDisable processing of the task's shards.\tBoolean /logLevel\tLog level\tLog levels may currently be "error", "warn", "info", "debug", or "trace". If not set, the effective log level is "info".\tString /maxTxnDuration\tMaximum transaction duration\tThis duration upper-bounds the amount of time during which a transaction may process documents before it must initiate a commit. Note that it may take some additional time for the commit to complete after it is initiated. The shard may run for less time if there aren't additional ready documents for it to process. If not set, the maximum duration defaults to one second for captures and derivations, and 5 minutes for materializations.\tString /minTxnDuration\tMinimum transaction duration\tThis duration lower-bounds the amount of time during which a transaction must process documents before it must flush and commit. It may run for more time if additional documents are available. The default value is zero seconds.\tString For more information about these controls and when you might need to use them, see: TransactionsLog level ","version":"Next","tagName":"h2"},{"title":"Sample​","type":1,"pageTitle":"Configuring task shards","url":"/pr-preview/pr-1594/reference/Configuring-task-shards/#sample","content":" materializations: acmeCo/snowflake-materialization: endpoint: connector: config: account: acmeCo database: acmeCo_db password: secret cloud_provider: aws region: us-east-1 schema: acmeCo_flow_schema user: snowflake_user warehouse: acmeCo_warehouse image: ghcr.io/estuary/materialize-snowflake:dev bindings: - resource: table: anvils source: acmeCo/anvils shards: logLevel: debug minTxnDuration: 30s maxTxnDuration: 4m ","version":"Next","tagName":"h2"},{"title":"Connectors","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/","content":"Connectors A current list and configuration details for Estuary's connectors can be found on the following pages: Capture connectorsMaterialization connectorsDekaf integrations You can learn more about how connectors work and how to use them in their conceptual documentation.","keywords":"","version":"Next"},{"title":"Aircall","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#prerequisites","content":" To set up the Aircall connector, you need the following prerequisite: Access Token: An access token acting as a bearer token is required for the connector to work. You can find the access token in the settings of Aircall. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#setup","content":" Follow the steps below to set up the Aircall connector. Obtain an Aircall access token from the Aircall settings. ","version":"Next","tagName":"h2"},{"title":"Set up the Aircall connector in Estuary Flow​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#set-up-the-aircall-connector-in-estuary-flow","content":" Log into your Estuary Flow account.In the left navigation bar, click on "Captures". In the top-left corner, click "Connector Search".Enter the name for the Aircall connector and select "Aircall" from the dropdown.Fill out the following endpoint configurations: api_id: The auto-generated ID.api_token: The access token obtained from Aircall settings.start_date: Date filter for eligible streams. Enter the desired start date. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Aircall source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_id\tAPI ID\tApp ID found at settings\tstring\tRequired /api_token\tAPI Token\tApp token found at settings\tstring\tRequired /start_date\tStart Date\tDate time filter for incremental filter, Specify which date to extract from.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Aircall project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#sample","content":" { "properties": { "start_date": { "default": "2023-01-01T00:00:00.000Z", "format": null } } } ","version":"Next","tagName":"h3"},{"title":"Supported Streams​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#supported-streams","content":" The Aircall connector supports the following streams: callscompanycontactsnumberstagsuser_availablityusersteamswebhooks ","version":"Next","tagName":"h2"},{"title":"API Method Example​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#api-method-example","content":" An example of an API method call for Aircall: GET https://api.aircall.io/v1/numbers ","version":"Next","tagName":"h2"},{"title":"Performance Considerations​","type":1,"pageTitle":"Aircall","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/#performance-considerations","content":" The Aircall API currently uses v1. The connector defaults to using v1. ","version":"Next","tagName":"h2"},{"title":"Airtable","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Airtable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/#prerequisites","content":" An active Airtable account ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Airtable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Airtable source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Airtable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/#properties","content":" Endpoint​ The following properties reflect the API Key authentication method. Property\tTitle\tDescription\tType\tRequired/Default/api_key\tAPI Key\tAPI Key\tstring\tRequired /access_token\tPersonal Access Token\tThe Personal Access Token for the Airtable account.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Airtable project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Airtable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-airtable:dev config: access_token: <secret> api_key: <secret> bindings: - resource: stream: users syncMode: full_refresh target: ${PREFIX}/users {...} ","version":"Next","tagName":"h3"},{"title":"Capture connectors","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/","content":"","keywords":"","version":"Next"},{"title":"Available capture connectors​","type":1,"pageTitle":"Capture connectors","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/#available-capture-connectors","content":" ","version":"Next","tagName":"h2"},{"title":"Estuary connectors​","type":1,"pageTitle":"Capture connectors","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/#estuary-connectors","content":" These connectors are created by Estuary. We prioritize high-scale technology systems for development. All Estuary connectors capture data in real time, as it appears in the source system AlloyDB ConfigurationPackage - ghcr.io/estuary/source-alloydb:dev Alpaca ConfigurationPackage - ghcr.io/estuary/source-alpaca:dev Amazon Dynamodb ConfigurationPackage - ghcr.io/estuary/source-dynamodb:dev Amazon Kinesis ConfigurationPackage — ghcr.io/estuary/source-kinesis:dev Amazon RDS SQL Server ConfigurationPackage - ghcr.io/estuary/source-amazon-rds-sqlserver Amazon S3 ConfigurationPackage — ghcr.io/estuary/source-s3:dev Apache Kafka ConfigurationPackage — ghcr.io/estuary/source-kafka:dev Azure Blob Storage ConfigurationPackage — ghcr.io/estuary/azure-blob-storage:dev Azure SQL Server ConfigurationPackage - ghcr.io/estuary/source-azure-sqlserver:dev BigQuery ConfigurationPackage — ghcr.io/estuary/source-bigquery-batch:dev Dropbox ConfigurationPackage - ghcr.io/estuary/source-dropbox:dev Google Cloud Storage ConfigurationPackage — ghcr.io/estuary/source-gcs:dev Google Firestore ConfigurationPackage - ghcr.io/estuary/source-firestore:dev Google Cloud Pub/Sub ConfigurationPackage — ghcr.io/estuary/source-google-pubsub:dev Google Cloud SQL Server ConfigurationPackage - ghcr.io/estuary/source-google-cloud-sql-sqlserver:md HTTP file ConfigurationPackage - ghcr.io/estuary/source-http-file:dev HTTP ingest (webhook) ConfigurationPackage - ghcr.io/estuary/source-http-ingest:dev Hubspot (Real-Time) ConfigurationPackage - ghcr.io/estuary/source-hubspot-native:dev MariaDB ConfigurationPackage - ghcr.io/estuary/source-mariadb:dev Microsoft SQL Server ConfigurationPackage - ghcr.io/estuary/source-sqlserver:dev MongoDB ConfigurationPackage - ghcr.io/estuary/source-mongodb:dev MySQL ConfigurationPackage - ghcr.io/estuary/source-mysql:dev Pendo ConfigurationPackage - ghcr.io/estuary/source-pendo:dev PostgreSQL ConfigurationPackage — ghcr.io/estuary/source-postgres:dev Salesforce (for real-time data) ConfigurationPackage - ghcr.io/estuary/source-salesforce-next:dev SFTP ConfigurationPackage - ghcr.io/estuary/source-sftp:dev Snowflake ConfigurationPackage - ghcr.io/estuary/source-snowflake:dev ","version":"Next","tagName":"h3"},{"title":"Third party connectors​","type":1,"pageTitle":"Capture connectors","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/#third-party-connectors","content":" Estuary supports open-source connectors from third parties. These connectors operate in a batch fashion, capturing data in increments. When you run these connectors in Flow, you'll get as close to real time as possible within the limitations set by the connector itself. Typically, we enable SaaS connectors from third parties to allow more diverse data flows. All the third-party connectors available currently were created by Airbyte. The versions made available in Flow have been adapted for compatibility. Airtable ConfigurationPackage - ghrc.io/estuary/source-airtable.dev Amazon Ads ConfigurationPackage - ghrc.io/estuary/source-amazon-ads.dev Amplitude ConfigurationPackage - ghcr.io/estuary/source-amplitude:dev Bing Ads ConfigurationPackage - ghcr.io/estuary/source-bing-ads:dev Braintree ConfigurationPackage - ghcr.io/estuary/source-braintree:dev Braze ConfigurationPackage - ghcr.io/estuary/source-braze:dev Chargebee ConfigurationPackage - ghrc.io/estuary/source-chargebee.dev Exchange Rates API ConfigurationPackage - ghcr.io/estuary/source-exchange-rates:dev Facebook Marketing ConfigurationPackage - ghcr.io/estuary/source-facebook-marketing:dev Freshdesk ConfigurationPackage - ghcr.io/estuary/source-freshdesk:dev GitHub ConfigurationPackage - ghcr.io/estuary/source-github:dev Gladly ConfigurationPackage - ghrc.io/estuary/source-gladly.dev Google Ads ConfigurationPackage - ghcr.io/estuary/source-google-ads:dev Google Analytics 4 ConfigurationPackage - ghcr.io/estuary/source-google-analytics-data-api:dev Google Universal Analytics ConfigurationPackage - ghcr.io/estuary/source-google-analytics-ua:dev Google Search Console ConfigurationPackage - ghcr.io/estuary/source-google-search-console:dev Google Sheets ConfigurationPackage - ghcr.io/estuary/source-google-sheets:dev Greenhouse ConfigurationPackage - ghrc.io/estuary/source-greenhouse.dev Harvest ConfigurationPackage - ghcr.io/estuary/source-harvest:dev Hubspot ConfigurationPackage - ghcr.io/estuary/source-hubspot:dev Instagram ConfigurationPackage - ghcr.io/estuary/source-instagram:dev Intercom ConfigurationPackage - ghcr.io/estuary/source-intercom:dev Iterable ConfigurationPackage - ghrc.io/estuary/source-iterable.dev Jira ConfigurationPackage - ghrc.io/estuary/source-jira.dev Klaviyo ConfigurationPackage - ghrc.io/estuary/source-klaviyo.dev LinkedIn Ads ConfigurationPackage - ghcr.io/estuary/source-linkedin-ads:dev LinkedIn Pages ConfigurationPackage - ghcr.io/estuary/source-linkedin-pages:4985746 Mailchimp ConfigurationPackage - ghcr.io/estuary/source-mailchimp:dev Marketo ConfigurationPackage - ghrc.io/estuary/source-marketo.dev MixPanel ConfigurationPackage - ghrc.io/estuary/source-mixpanel.dev NetSuite ConfigurationPackage - ghcr.io/estuary/source-netsuite:dev Notion ConfigurationPackage - ghcr.io/estuary/source-notion:dev Paypal Transaction ConfigurationPackage - ghrc.io/estuary/source-paypal-transaction.dev Recharge ConfigurationPackage - ghcr.io/estuary/source-recharge:dev Salesforce (For historical data) ConfigurationPackage - ghcr.io/estuary/source-salesforce:dev SendGrid ConfigurationPackage - ghcr.io/estuary/source-sendgrid:dev Sentry ConfigurationPackage - ghcr.io/estuary/source-sentry:dev Slack ConfigurationPackage - ghcr.io/estuary/source-slack:dev Snapchat ConfigurationPackage - ghcr.io/estuary/source-snapchat:dev Stripe ConfigurationPackage - ghcr.io/estuary/source-stripe:dev SurveyMonkey ConfigurationPackage - ghcr.io/estuary/source-surveymonkey:dev Twilio ConfigurationPackage - ghcr.io/estuary/source-twilio:dev Zendesk Chat ConfigurationPackage - ghcr.io/estuary/source-zendesk-chat:dev Zendesk Support ConfigurationPackage - ghcr.io/estuary/source-zendesk-support:dev ","version":"Next","tagName":"h3"},{"title":"AlloyDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/#prerequisites","content":" You'll need a AlloyDB database setup with the following: Logical decoding enabledUser role with REPLICATION attributeA replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. Optional; if none exist, one will be created by the connector.If you wish to run multiple captures from the same database, each must have its own slot. You can create these slots yourself, or by specifying a name other than the default in the advanced configuration. A publication. This represents the set of tables for which change events will be reported. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. You'll also need a virtual machine to connect securely to the instance via SSH tunnelling (AlloyDB doesn't support IP allowlisting). ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/#setup","content":" To meet the prerequisites, complete these steps. Set the alloydb.logical_decoding flag to on to enable logical replication on your AlloyDB instance. In your psql client, connect to your instance and issue the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table and publication. CREATE USER flow_capture WITH REPLICATION IN ROLE alloydbsuperuser LOGIN PASSWORD 'secret'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture; CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication FOR ALL TABLES; Follow the instructions to create a virtual machine for SSH tunnelingin the same Google Cloud project as your instance. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/#backfills-and-performance-considerations","content":" When the a AlloyDB capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/#properties","content":" Endpoint​ The SSH config section is required for this connector. You'll fill in the database address with a localhost IP address, and specify your VM's IP address as the SSH address. See the table below and the sample config. Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired, "postgres" /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/publicationName\tPublication Name\tThe name of the PostgreSQL publication to replicate from.\tstring\t"flow_publication" /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/slotName\tSlot Name\tThe name of the PostgreSQL replication slot to replicate from.\tstring\t"flow_slot" /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"public.flow_watermarks" networkTunnel\tNetwork Tunnel\tConnect to your system through an SSH server that acts as a bastion host for your network.\tObject networkTunnel/sshForwarding\tSSH Forwarding Object networkTunnel/sshForwarding/sshEndpoint\tSSH Endpoint\tEndpoint of the remote SSH server (in this case, your Google Cloud VM) that supports tunneling (in the form of ssh://user@address).\tString networkTunnel/sshForwarding/privateKey\tSSH Private Key\tPrivate key to connect to the remote SSH server.\tString\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/instance of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-alloydb:dev" config: address: "127.0.0.1:5432" database: "postgres" user: "flow_capture" password: "secret" networkTunnel: sshForwarding: sshEndpoint: ssh://sshUser@vm-ip-address privateKey: |2 -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCJO7G6R+kv2MMS8Suw21sk2twHg8Vog0fjimEWJEwyAfFM/Toi EJ6r5RTaSvN++/+MPWUll7sUdOOBZr6ErLKLHEt7uXxusAzOjMxFKZpEARMcjwHY v/tN1A2OYU0qay1DOwknEE0i+/Bvf8lMS7VDjHmwRaBtRed/+iAQHf128QIDAQAB AoGAGoOUBP+byAjDN8esv1DCPU6jsDf/Tf//RbEYrOR6bDb/3fYW4zn+zgtGih5t CR268+dwwWCdXohu5DNrn8qV/Awk7hWp18mlcNyO0skT84zvippe+juQMK4hDQNi ywp8mDvKQwpOuzw6wNEitcGDuACx5U/1JEGGmuIRGx2ST5kCQQDsstfWDcYqbdhr 5KemOPpu80OtBYzlgpN0iVP/6XW1e5FCRp2ofQKZYXVwu5txKIakjYRruUiiZTza QeXRPbp3AkEAlGx6wMe1l9UtAAlkgCFYbuxM+eRD4Gg5qLYFpKNsoINXTnlfDry5 +1NkuyiQDjzOSPiLZ4Abpf+a+myjOuNL1wJBAOwkdM6aCVT1J9BkW5mrCLY+PgtV GT80KTY/d6091fBMKhxL5SheJ4SsRYVFtguL2eA7S5xJSpyxkadRzR0Wj3sCQAvA bxO2fE1SRqbbF4cBnOPjd9DNXwZ0miQejWHUwrQO0inXeExNaxhYKQCcnJNUAy1J 6JfAT/AbxeSQF3iBKK8CQAt5r/LLEM1/8ekGOvBh8MAQpWBW771QzHUN84SiUd/q xR9mfItngPwYJ9d/pTO7u9ZUPHEoat8Ave4waB08DsI= -----END RSA PRIVATE KEY----- bindings: - resource: stream: ${TABLE_NAME} namespace: ${TABLE_NAMESPACE} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Alpaca","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/","content":"","keywords":"","version":"Next"},{"title":"Real-time and historical trade data​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#real-time-and-historical-trade-data","content":" The Alpaca Market Data API comprises multiple APIs for stock trades, including the Trades REST API for historical trade data and websocket streaming via the Data API for real-time trade data. Historical trade data is available from the Alpaca Market Data API starting 01-01-2016. As such, the connector configuration requires a start date for the backfill to be on or after 01-01-2016. This connector uses both APIs to capture historical and real-time data in parallel. It uses the Trades API to perform a historical backfill starting from the start date you specify and stopping when it reaches the present. At the same time, the connector uses websocket streaming to initiate a real-time stream of trade data starting at the present moment and continuing indefinitely until you stop the capture process. As a result, you'll get data from a historical time period you specify, as well as the lowest-latency possible updates of new trade data, but there will be some overlap in the two data streams. See limitations to learn more about reconciling historical and real-time data. ","version":"Next","tagName":"h2"},{"title":"Supported data resources​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#supported-data-resources","content":" Alpaca supports over 8000 stocks and EFTs. You simply supply a list of symbols to Flow when you configure the connector. To check whether Alpaca supports a symbol, you can use the Alpaca Broker API. You can use this connector to capture data from up to 20 stock symbols into Flow collections in a single capture (to add more than 20, set up multiple captures). For a given capture, data from all symbols is captured to a single collection. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#prerequisites","content":" To use this connector, you'll need: An Alpaca account. To access complete stock data in real-time, you'll need the Unlimited plan. To access a smaller sample of trade data with a 15-minute delay, you can use a Free plan, making sure to set Feed to iex and choose the Free Plan option when configuring the connector. Your Alpaca API Key ID and Secret Key. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Alpaca source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/disable_backfill\tDisable Historical Data Backfill\tDisables historical data backfill via the historical data API. Data will only be collected via streaming.\tboolean /advanced/disable_real_time\tDisable Real-Time Streaming\tDisables real-time streaming via the websocket API. Data will only be collected via the backfill mechanism.\tboolean /advanced/is_free_plan\tFree Plan\tSet this if you are using a free plan. Delays data by 15 minutes.\tboolean /advanced/max_backfill_interval\tMaximum Backfill Interval\tThe largest time interval that will be requested for backfills. Using smaller intervals may be useful when tracking many symbols. Must be a valid Go duration string.\tstring /advanced/min_backfill_interval\tMinimum Backfill Interval\tThe smallest time interval that will be requested for backfills after the initial backfill is complete. Must be a valid Go duration string.\tstring /advanced/stop_date\tStop Date\tStop backfilling historical data at this date.\tstring /api_key_id\tAlpaca API Key ID\tYour Alpaca API key ID.\tstring\tRequired /api_secret_key\tAlpaca API Secret Key\tYour Alpaca API Secret key.\tstring\tRequired /feed\tFeed\tThe feed to pull market data from. Choose from iex or sip; set iex if using a free plan.\tstring\tRequired /start_date\tStart Date\tGet trades starting at this date. Has no effect if changed after the capture has started. Must be no earlier than 2016-01-01T00:00:00Z.\tstring\tRequired /symbols\tSymbols\tComma separated list of symbols to monitor.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tName\tUnique name for this binding. Cannot be changed once set.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-alpaca:dev" config: api_key_id: <SECRET> api_secret_key: <SECRET> feed: iex start_date: 2022-11-01T00:00:00Z symbols: AAPL,MSFT,AMZN,TSLA,GOOGL,GOOG,NVDA,BRK.B,META,UNH advanced: is_free_plan: true bindings: - resource: name: trades target: ${PREFIX}/${CAPTURE_NAME}/trades ","version":"Next","tagName":"h3"},{"title":"Limitations​","type":1,"pageTitle":"Alpaca","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/#limitations","content":" Capturing data for more than 20 symbols in a single capture could result in API errors.​ If you need to capture data for more than 20 symbols, we recommend splitting them between two captures. Support for a larger number of symbols in a single capture is planned for a future release. Separate historical and real-time data streams will result in some duplicate trade documents.​ As discussed above, the connector captures historical and real-time data in two different streams. As the historical data stream catches up to the present, it will overlap with the beginning of the real-time data stream, resulting in some duplicated documents. These will have identical properties from Alpaca, but different metadata from Flow. There are several ways to resolve this: If you plan to materialize to an endpoint for which standard (non-delta) updates are supported, Flow will resolve the duplicates during the materialization process. Unless otherwise specified in their documentation page, materialization connectors run in standard updates mode. If a connector supports both modes, it will default to standard updates. If you plan to materialize to an endpoint for which delta updates is the only option, ensure that the endpoint system supports the equivalent of lastWriteWins reductions. ","version":"Next","tagName":"h2"},{"title":"Amazon Ads","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#supported-data-resources","content":" The following data resources are supported: ProfilesSponsored brands ad groupsSponsored brands campaignsSponsored brands keywordsSponsored brands report streamSponsored brands video report streamSponsored display ad groupsSponsored display ad campaignsSponsored display product ads Sponsored display report streamSponsored display targetingsSponsored product ad groupsSponsored product adsSponsored product campaignsSponsored product keywordsSponsored product negative keywordsSponsored product targetingsSponsored product report stream By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#prerequisites","content":" This connector uses OAuth2 to authenticate with Amazon. You can do this in the Flow web app, or configure manually if you're using the flowctl CLI. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Amazon in the Flow web app​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#using-oauth2-to-authenticate-with-amazon-in-the-flow-web-app","content":" You'll need an Amazon user account with access to the Amazon Ads account from which you wish to capture data. You'll use these credentials to sign in. ","version":"Next","tagName":"h3"},{"title":"Authenticating manually using the CLI​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#authenticating-manually-using-the-cli","content":" When you configure this connector manually, you provide the same credentials that OAuth2 would automatically fetch if you used the web app. These are: Client IDClient secretRefresh token To obtain these credentials: Complete the Amazon Ads API onboarding process. Retrieve your client ID and client secret. Retrieve a refresh token. ","version":"Next","tagName":"h3"},{"title":"Selecting data region and profiles​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#selecting-data-region-and-profiles","content":" When you configure the endpoint for this connector, you must choose an Amazon region from which to capture data. Optionally, you may also select profiles from which to capture data. The region must be one of: NA (North America)EU (European Union)FE (Far East) These represent the three URL endpoints provided by Amazon through which you can access the marketing API. Each region encompasses multiple Amazon marketplaces, which are broken down by country. See the Amazon docs for details. If you run your Amazon ads in multiple marketplaces, you may have separate profiles for each. If this is the case, you can specify the profiles from which you wish to capture data by supplying their profile IDs. Be sure to specify only profiles that correspond to marketplaces within the region you chose. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Amazon Ads source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials object\tRequired /credentials/auth_type\tAuth Type\tSet to oauth2.0 for manual integration (in this method, you're re-creating the same credentials of the OAuth user interface, but doing so manually)\tstring /credentials/client_id\tClient ID\tThe client ID of your Amazon Ads developer application.\tstring\tRequired /credentials/client_secret\tClient Secret\tThe client secret of your Amazon Ads developer application.\tstring\tRequired /credentials/refresh_token\tRefresh Token\tAmazon Ads refresh token.\tstring\tRequired /profiles\tProfile IDs (Optional)\tProfile IDs you want to fetch data for.\tarray /region\tRegion *\tRegion to pull data from (EU/NA/FE).\tstring\t"NA" /report_generation_max_retries\tReport Generation Maximum Retries *\tMaximum retries the connector will attempt for fetching report data.\tinteger\t5 /report_wait_timeout\tReport Wait Timeout *\tTimeout duration in minutes for reports.\tinteger\t60 /start_date\tStart Date (Optional)\tThe start date for collecting reports, in YYYY-MM-DD format. This should not be more than 60 days in the past.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tAmazon Ads resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-amazon-ads:dev config: credentials: auth_type: oauth2.0 client_id: amzn1.application-oa2-client.XXXXXXXXX client_secret: <secret> refresh_token: Atzr|XXXXXXXXXXXX region: NA report_generation_max_retries: 5 report_wait_timeout: 60 start_date: 2022-03-01 bindings: - resource: stream: profiles syncMode: full_refresh target: ${PREFIX}/profiles {} ","version":"Next","tagName":"h3"},{"title":"Amazon Kinesis","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon Kinesis","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/#prerequisites","content":" To use this connector, you'll need: One or more Amazon Kinesis streams. For a given capture, all streams must: Contain JSON data onlyBe in the same AWS region An IAM user with the following permissions: ListShards on all resourcesGetRecords on all streams usedGetShardIterator on all streams usedDescribeStream on all streams usedDescribeStreamSummary on all streams used These permissions should be specified with the kinesis: prefix in an IAM policy document. For more details and examples, see Controlling Access to Amazon Kinesis Data in the Amazon docs. The AWS access key and secret access key for the user. See the AWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon Kinesis","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Amazon Kinesis source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon Kinesis","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/awsAccessKeyId\tAWS access key ID\tPart of the AWS credentials that will be used to connect to Kinesis.\tstring\tRequired, "example-aws-access-key-id" /awsSecretAccessKey\tAWS secret access key\tPart of the AWS credentials that will be used to connect to Kinesis.\tstring\tRequired, "example-aws-secret-access-key" /endpoint\tAWS endpoint\tThe AWS endpoint URI to connect to, useful if you're capturing from a kinesis-compatible API that isn't provided by AWS.\tstring /region\tAWS region\tThe name of the AWS region where the Kinesis stream is located.\tstring\tRequired, "us-east-1" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tStream name.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon Kinesis","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-kinesis:dev config: awsAccessKeyId: "example-aws-access-key-id" awsSecretAccessKey: "example-aws-secret-access-key" region: "us-east-1" bindings: - resource: stream: ${STREAM_NAME} target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each Kinesis stream. Learn more about capture definitions.. ","version":"Next","tagName":"h3"},{"title":"Amazon DynamoDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/#prerequisites","content":" To use this connector, you'll need: One or more DynamoDB tables with DynamoDB streams enabled. To enable DynamoDB streams for a table: Select the table in the AWS consoleGo to the Exports and streams tabClick Turn on in the DynamoDB stream details sectionSelect New and old images for the View typeClick Turn on stream An IAM user with the following permissions: ListTables on all resourcesDescribeTable on all resourcesDescribeStream on all resourcesScan on all tables usedGetRecords on all streams usedGetShardIterator on all streams used These permissions should be specified with the dynamodb: prefix in an IAM policy document. For more details and examples, see Using identity-based policies with Amazon DynamoDB in the Amazon docs. The AWS access key and secret access key for the user. See the AWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the DynamoDB source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/awsAccessKeyId\tAccess Key ID\tAWS Access Key ID for capturing from DynamoDB tables.\tstring\tRequired /awsSecretAccessKey\tSecret Access Key\tAWS Secret Access Key for capturing from DynamoDB tables.\tstring\tRequired /region\tAWS Region\tThe name of the AWS region where the DynamoDB tables are located.\tstring\tRequired advanced/backfillSegments\tBackfill Table Segments\tNumber of segments to use for backfill table scans. Has no effect if changed after the backfill has started.\tinteger advanced/endpoint\tAWS Endpoint\tThe AWS endpoint URI to connect to. Use if you're capturing from a compatible API that isn't provided by AWS.\tstring advanced/scanLimit\tScan Limit\tLimit the number of items to evaluate for each table backfill scan request.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable Name\tThe name of the table to be captured.\tstring\tRequired /rcuAllocation\tRCU Allocation\tRead capacity units the capture will attempt to consume during the table backfill. Leave blank to automatically determine based on the provisioned capacity of the table.\tinteger\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-dynamodb:dev config: awsAccessKeyId: "example-aws-access-key-id" awsSecretAccessKey: "example-aws-secret-access-key" region: "us-east-1" bindings: - resource: table: ${TABLE_NAME} target: ${PREFIX}/${COLLECTION_NAME} Your capture definition may be more complex, with additional bindings for each DynamoDB table. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Amazon Redshift","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/#prerequisites","content":" To use this connector, you'll need: Access credentials for connecting to your Amazon Redshift cluster.Properly configured IAM roles for the necessary permissions. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/#configuration","content":" You can configure the Redshift source connector either through the Flow web app or by directly editing the Flow specification file. For more information on using this connector, see our guide on connectors. The values and specification sample below provide configuration details that are specific to the Amazon Redshift source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/host\tHost\tHostname or IP address of your Redshift cluster.\tstring\tRequired /port\tPort\tPort number for the cluster.\tinteger\tDefault /database\tDatabase Name\tName of the database to capture data from.\tstring\tRequired /user\tUser\tDatabase user with necessary permissions.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /schemas\tSchemas\tList of schemas to include.\tstring /jdbc_params\tJDBC URL Params\tAdditional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable Name\tName of the table to capture.\tstring\tRequired /cursor_field\tUser-defined Cursor\tField for incremental syncs. Uses ascending values to ensure queries are sequential.\tstring or integer\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-redshift:dev config: host: "example-redshift-cluster.us-east-2.redshift.amazonaws.com" port: 5439 database: "sample_db" user: "sample_user" password: "sample_password" schemas: "public" jdbc_params: "key1=value1&key2=value2&key3=value3" bindings: - resource: table: users cursor_field: cursor target: ${PREFIX}/users ","version":"Next","tagName":"h3"},{"title":"Amazon SQS","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#prerequisites","content":" AWS IAM Access KeyAWS IAM Secret KeyAWS SQS Queue ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#setup","content":" Follow these steps to set up the Amazon SQS connector: Create AWS IAM KeysCreate an SQS QueueEnter a Primary Key and Cursor Field using the standard form editor. Note that these values currently have to be a string or timestamp. note If Delete Messages After Read is false, the IAM User only requires sqs:ReceiveMessage permission in the AWS IAM Policy.If Delete Messages After Read is true, both sqs:ReceiveMessage and sqs:DeleteMessage permissions are needed in the AWS IAM Policy. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the AmazonSQS source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/queue_url\tQueue URL\tURL of the SQS Queue\tstring\tRequired /region\tAWS Region\tAWS Region of the SQS Queue\tstring\tRequired /access_key\tAWS IAM Access Key ID\tThe Access Key ID of the AWS IAM Role to use for pulling messages\tstring /secret_key\tAWS IAM Secret Key\tThe Secret Key of the AWS IAM Role to use for pulling messages\tstring /delete_messages\tDelete Messages After Read\tDelete messages from the SQS Queue after reading them\tboolean\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Amazon SQS project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#sample","content":" { "properties": { "queue_url": { "order": 0 }, "region": { "order": 1 }, "access_key": { "order": 2 }, "secret_key": { "order": 3 }, "delete_messages": { "order": 4 } } } ","version":"Next","tagName":"h3"},{"title":"Performance Considerations​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#performance-considerations","content":" Consider the following performance aspects: Max Batch Size: Set the maximum number of messages to consume in a single poll.Max Wait Time: Define the maximum time (in seconds) to poll for messages before committing a batch.Message Visibility Timeout: Determine how long a message should be hidden from other consumers after being read. ","version":"Next","tagName":"h3"},{"title":"Data Loss Warning​","type":1,"pageTitle":"Amazon SQS","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/#data-loss-warning","content":" When enabling Delete Messages After Read, messages are deleted from the SQS Queue after being read. However, there is no guarantee that the downstream destination has committed or persisted the message. Exercise caution before enabling this option to avoid permanent message loss. ","version":"Next","tagName":"h3"},{"title":"Amazon S3","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#prerequisites","content":" You can use this connector to capture data from an entire S3 bucket or for a prefix within a bucket. This bucket or prefix must be either be: Publicly accessible and allowing anonymous reads. Accessible via a root or IAM user. In either case, you'll need an access policy. Policies in AWS are JSON objects that define permissions. You attach them to resources, which include both IAM users and S3 buckets. See the steps below to set up access. ","version":"Next","tagName":"h2"},{"title":"Setup: Public buckets​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#setup-public-buckets","content":" For a public buckets, the bucket access policy must allow anonymous reads on the whole bucket or a specific prefix. Create a bucket policy using the templates below. Anonymous reads policy - Full bucketAnonymous reads policy - Specific prefix { "Version": "2012-10-17", "Statement": [ { "Sid": "BucketAnonymousRead", "Effect": "Allow", "Principal": "*", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::EXAMPLE_BUCKET" ] }, { "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::EXAMPLE_BUCKET/*" ] } ] } Add the policy to your bucket. Paste over the existing policy and resolve any errors or warnings before saving. Confirm that the Block public access setting on the bucket is disabled. ","version":"Next","tagName":"h3"},{"title":"Setup: Accessing with a user account​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#setup-accessing-with-a-user-account","content":" For buckets accessed by a user account, you'll need the AWS access key and secret access key for the user. You'll also need to apply an access policy to the user to grant access to the specific bucket or prefix. Create an IAM user if you don't yet have one to use with Flow. Note the user's access key and secret access key. See the AWS blog for help finding these credentials. Create an IAM policy using the templates below. IAM user access policy - Full bucketIAM user access policy - Specific prefix { "Version": "2012-10-17", "Statement": [ { "Sid": "UserAccessFullBucket", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::EXAMPLE_BUCKET" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::EXAMPLE_BUCKET/*" ] } ] } Add the policy to AWS. Attach the policy to the IAM user. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the S3 source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/advanced Options for advanced users. You should not typically need to modify these.\tobject /advanced/ascendingKeys\tAscending Keys\tImprove sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors.\tboolean\tfalse /advanced/endpoint\tAWS Endpoint\tThe AWS endpoint URI to connect to. Use if you're capturing from a S3-compatible API that isn't provided by AWS\tstring /awsAccessKeyId\tAWS Access Key ID\tPart of the AWS credentials that will be used to connect to S3. Required unless the bucket is public and allows anonymous listings and reads.\tstring /awsSecretAccessKey\tAWS Secret Access Key\tPart of the AWS credentials that will be used to connect to S3. Required unless the bucket is public and allows anonymous listings and reads.\tstring /bucket\tBucket\tName of the S3 bucket\tstring\tRequired /matchKeys\tMatch Keys\tFilter applied to all object keys under the prefix. If provided, only objects whose absolute path matches this regex will be read. For example, you can use ".*\\.json" to only capture json files.\tstring /parser\tParser Configuration\tConfigures how files are parsed (optional, see below)\tobject /parser/compression\tCompression\tDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.\tnull, string\tnull /parser/format\tFormat\tDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.\tobject\t{"type":"auto"} /parser/format/type\tType string /prefix\tPrefix\tPrefix within the bucket to capture from. Use this to limit the data in your capture.\tstring /region\tAWS Region\tThe name of the AWS region where the S3 bucket is located. "us-east-1" is a popular default you can try, if you're unsure what to put here.\tstring\tRequired, "us-east-1" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tPrefix\tPath to dataset in the bucket, formatted as bucket-name/prefix-name.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-s3:dev config: bucket: "my-bucket" parser: compression: zip format: type: csv config: delimiter: "," encoding: UTF-8 errorThreshold: 5 headers: [ID, username, first_name, last_name] lineEnding: "\\\\r" quote: "\\"" region: "us-east-1" bindings: - resource: stream: my-bucket/${PREFIX} target: ${PREFIX}/${COLLECTION_NAME} Your capture definition may be more complex, with additional bindings for different S3 prefixes within the same bucket. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Advanced: Parsing cloud storage data​","type":1,"pageTitle":"Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/#advanced-parsing-cloud-storage-data","content":" Cloud storage platforms like S3 can support a wider variety of file types than other data source systems. For each of these file types, Flow must parse and translate data into collections with defined fields and JSON schemas. By default, the parser will automatically detect the type and shape of the data in your bucket, so you won't need to change the parser configuration for most captures. However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector. The parser configuration includes: Compression: Specify how the bucket contents are compressed. If no compression type is specified, the connector will try to determine the compression type automatically. Options are: zipgzipzstdnone Format: Specify the data format, which determines how it will be parsed. Options are: Auto: If no format is specified, the connector will try to determine it automatically.AvroCSVJSONProtobufW3C Extended Log info At this time, Flow only supports S3 captures with data of a single file type. Support for multiple file types, which can be configured on a per-binding basis, will be added in the future. For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type. CSV configuration​ CSV files include several additional properties that are important to the parser. In most cases, Flow is able to automatically determine the correct values, but you may need to specify for unusual datasets. These properties are: Delimiter. Options are: Comma (",")Pipe ("|")Space ("0x20")Semicolon (";")Tab ("0x09")Vertical tab ("0x0B")Unit separator ("0x1F")SOH ("0x01")Auto Encoding type, specified by its WHATWG label. Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture. Escape characters. Options are: Backslash ("\\\\")Disable escapes ("")Auto Optionally, a list of column Headers, if not already included in the first row of the CSV file. If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file. Line ending values CRLF ("\\\\r\\\\n") (Windows)CR ("\\\\r")LF ("\\\\n")Record Separator ("0x1E")Auto Quote character Double Quote ("\\"")Single Quote (")Disable Quoting ("")Auto The sample specification above includes these fields. ","version":"Next","tagName":"h3"},{"title":"Amplitude","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Amplitude","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/#supported-data-resources","content":" The following data resources are supported through the Amplitude APIs: Active User CountsAnnotationsAverage Session LengthCohortsEvents By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Amplitude","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/#prerequisites","content":" An Amplitude project with an API Key and Secret Key ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amplitude","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Amplitude source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amplitude","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_key\tAPI Key\tAmplitude API Key.\tstring\tRequired /secret_key\tSecret Key\tAmplitude Secret Key.\tstring\tRequired /start_date\tReplication Start Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Amplitude project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amplitude","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-amplitude:dev config: api_key: <secret> secret_key: <secret> start_date: 2022-06-18T00:00:00Z bindings: - resource: stream: cohorts syncMode: full_refresh target: ${PREFIX}/cohorts - resource: stream: annotations syncMode: full_refresh target: ${PREFIX}/annotations - resource: stream: events syncMode: incremental target: ${PREFIX}/events - resource: stream: active_users syncMode: incremental target: ${PREFIX}/activeusers - resource: stream: average_session_length syncMode: incremental target: ${PREFIX}/averagesessionlength ","version":"Next","tagName":"h3"},{"title":"Apache Kafka","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/","content":"","keywords":"","version":"Next"},{"title":"Supported data types​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#supported-data-types","content":" This connector supports Kafka messages that contain JSON data. Flow collections store data as JSON. Before deploying this connector, you should modify schema(s)of the Flow collection(s) you're creating to reflect the structure of your JSON Kafka messages. At this time, the connector does not support other data types in Kafka messages. Beta Support for Avro Kafka messages will be added soon. For more information, contact the Estuary team. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#prerequisites","content":" A Kafka cluster with: bootstrap.servers configured so that clients may connect via the desired host and portAn authentication mechanism of choice set up (highly recommended for production environments)Connection security enabled with TLS (highly recommended for production environments) ","version":"Next","tagName":"h2"},{"title":"Authentication and connection security​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#authentication-and-connection-security","content":" Neither authentication nor connection security are enabled by default in your Kafka cluster, but both are important considerations. Similarly, Flow's Kafka connectors do not strictly require authentication or connection security mechanisms. You may choose to omit them for local development and testing; however, both are strongly encouraged for production environments. A wide variety of authentication methods is available in Kafka clusters. Flow supports SASL/SCRAM-SHA-256, SASL/SCRAM-SHA-512, and SASL/PLAIN. Behavior using other authentication methods is not guaranteed. When authentication details are not provided, the client connection will attempt to use PLAINTEXT (insecure) protocol. If you don't already have authentication enabled on your cluster, Estuary recommends either of listed SASL/SCRAM methods. With SCRAM, you set up a username and password, making it analogous to the traditional authentication mechanisms you use in other applications. For connection security, Estuary recommends that you enable TLS encryption for your SASL mechanism of choice, as well as all other components of your cluster. Note that because TLS replaced now-deprecated SSL encryption, Kafka still uses the acronym "SSL" to refer to TLS encryption. See Confluent's documentation for details. Beta TLS encryption is currently the only supported connection security mechanism for this connector. Other connection security methods may be enabled in the future. ","version":"Next","tagName":"h3"},{"title":"AWS Managed Streaming Kafka (MSK)​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#aws-managed-streaming-kafka-msk","content":" If using AWS Managed Streaming for Apache Kafka (MSK), you can use IAM authentication with our connector. Read more about IAM authentication with MSK in AWS docs: IAM access control. Additionally, you want to make sure that your VPC configuration allows inbound and outbound requests to Estuary Flow IP addresses. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Apache Kafka source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/bootstrap_servers\tBootstrap servers\tThe initial servers in the Kafka cluster to connect to, separated by commas. The Kafka client will be informed of the rest of the cluster nodes by connecting to one of these nodes.\tstring\tRequired /tls\tTLS\tTLS connection settings.\tstring\t"system_certificates" /credentials\tCredentials\tConnection details used to authenticate a client connection to Kafka via SASL.\tnull, object /credentials/auth_type\tAuthentication type\tOne of UserPassword for SASL or AWS for IAM authentication\tstring /credentials/mechanism\tSASL Mechanism\tSASL mechanism describing how to exchange and authenticate client servers.\tstring /credentials/password\tPassword\tPassword, if applicable for the authentication mechanism chosen.\tstring /credentials/username\tUsername\tUsername, if applicable for the authentication mechanism chosen.\tstring /credentials/aws_access_key_id\tAWS Access Key ID\tSupply if using auth_type: AWS\tstring /credentials/aws_secret_access_key\tAWS Secret Access Key\tSupply if using auth_type: AWS\tstring /credentials/region\tAWS Region\tSupply if using auth_type: AWS\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tKafka topic name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Apache Kafka","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/#sample","content":" User and password authentication (SASL): captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-kafka:dev config: bootstrap_servers: localhost:9093 tls: system_certificates credentials: auth_type: UserPassword mechanism: SCRAM-SHA-512 username: bruce.wayne password: definitely-not-batman bindings: - resource: stream: ${TOPIC_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} AWS IAM authentication: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-kafka:dev config: bootstrap_servers: localhost:9093 tls: system_certificates credentials: auth_type: AWS aws_access_key_id: AK... aws_secret_access_key: secret region: us-east-1 bindings: - resource: stream: ${TOPIC_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each Kafka topic. Learn more about capture definitions.. ","version":"Next","tagName":"h3"},{"title":"Azure Blob Storage","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#prerequisites","content":" You will need the following values to authenticate to Azure and an active subscription Subscription IDClient IDClient SecretTenant ID ","version":"Next","tagName":"h2"},{"title":"Setup a Microsoft Entra application​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#setup-a-microsoft-entra-application","content":" These values can be obtained from the portal, here's the instructions: Get Subscription ID Login into your Azure account Select Subscriptions in the left sidebar Select whichever subscription is neededClick on OverviewCopy the Subscription ID Get Client ID / Client Secret / Tenant ID Go to Azure Active Directory, then select App registrations.Click New registration, fill out the required fields like Name and Supported account types.Click Register to create the new app registration.After registration, note down the Application (client) ID value.Go to Certificates & secrets and click New client secret. Fill in a Description, choose a Secret value type and length, then click Add to save the secret. A pop-up will appear with your new client secret value; copy it immediately as you won't be able to view it again.Go back to Overview page and copy the Directory (tenant) ID under Properties.Your service principal is now created, and you have its Application (client) ID, Directory (tenant) ID, and a client secret key. Use these values when configuring your application or service to interact with Azure services that require authentication through AAD. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Azure Blob Storage source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/advanced Options for advanced users. You should not typically need to modify these.\tobject /advanced/ascendingKeys\tAscending Keys\tImprove sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors.\tboolean\tfalse /credentials\tCredentials\tAzure credentials used to authenticate with Azure Blob Storage.\tobject /credentials/storageAccountName\tStorage Account Name\tThe name of the Azure Blob Storage account.\tstring\tRequired. /credentials/azureClientID\tAzure Client ID\tThe client ID used to authenticate with Azure Blob Storage.\tstring\tRequired if using OAuth2 /credentials/azureClientSecret\tAzure Client Secret\tThe client secret used to authenticate with Azure Blob Storage.\tstring\tRequired if using OAuth2 /credentials/azureTenantID\tAzure Tenant ID\tThe ID of the Azure tenant where the Azure Blob Storage account is located.\tstring\tRequired if using OAuth2 /credentials/azureSubscriptionID\tAzure Subscription ID\tThe ID of the Azure subscription that contains the Azure Blob Storage account.\tstring\tRequired if using OAuth2 /credentials/ConnectionString\tConnection String\tThe connection string used to authenticate with Azure Blob Storage.\tstring\tRequired if using the Connection String authentication. /containerName\tContainer Name\tThe name of the Azure Blob Storage container to read from.\tstring\tRequired. /matchKeys\tMatch Keys\tFilter applied to all object keys under the prefix. If provided, only objects whose absolute path matches this regex will be read. For example, you can use ".*\\.json" to only capture json files.\tstring\t Bindings​ Property\tTitle\tTitle\tType\tRequired/Default/stream\tContainer\tThe container name\tstring\trequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-azure-blob-storage:dev" config: containerName: example credentials: azureClientID: e2889d31-aaaa-bbbb-cccc-85bb5a33d7a5 azureClientSecret: just-a-secret azureSubscriptionID: f1a5bc81-aaaa-bbbb-cccc-b926c154ecc7 azureTenantID: d494a2c6-aaaa-bbbb-cccc-ef1e5eaa64a6 storageAccountName: example parser: compression: zip format: type: csv config: delimiter: "," encoding: UTF-8 errorThreshold: 5 headers: [ID, username, first_name, last_name] lineEnding: "\\\\r" quote: "\\"" bindings: - resource: stream: example target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Advanced: Parsing cloud storage data​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#advanced-parsing-cloud-storage-data","content":" Cloud storage platforms like Azure Blob Storage can support a wider variety of file types than other data source systems. For each of these file types, Flow must parse and translate data into collections with defined fields and JSON schemas. By default, the parser will automatically detect the type and shape of the data in your bucket, so you won't need to change the parser configuration for most captures. However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector. The parser configuration includes: Compression: Specify how the bucket contents are compressed. If no compression type is specified, the connector will try to determine the compression type automatically. Options are: zipgzipzstdnone Format: Specify the data format, which determines how it will be parsed. Options are: Auto: If no format is specified, the connector will try to determine it automatically.AvroCSVJSONProtobufW3C Extended Log info At this time, Flow only supports S3 captures with data of a single file type. Support for multiple file types, which can be configured on a per-binding basis, will be added in the future. For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type. ","version":"Next","tagName":"h3"},{"title":"CSV configuration​","type":1,"pageTitle":"Azure Blob Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/#csv-configuration","content":" CSV files include several additional properties that are important to the parser. In most cases, Flow is able to automatically determine the correct values, but you may need to specify for unusual datasets. These properties are: Delimiter. Options are: Comma (",")Pipe ("|")Space ("0x20")Semicolon (";")Tab ("0x09")Vertical tab ("0x0B")Unit separator ("0x1F")SOH ("0x01")Auto Encoding type, specified by its WHATWG label. Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture. Escape characters. Options are: Backslash ("\\\\")Disable escapes ("")Auto Optionally, a list of column Headers, if not already included in the first row of the CSV file. If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file. Line ending values CRLF ("\\\\r\\\\n") (Windows)CR ("\\\\r")LF ("\\\\n")Record Separator ("0x1E")Auto Quote character Double Quote ("\\"")Single Quote (")Disable Quoting ("")Auto The sample specification above includes these fields. ","version":"Next","tagName":"h3"},{"title":"Bing Ads","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#supported-data-resources","content":" The following data resources are supported: AccountsAccount performance reports: hourly, daily, weekly, and monthly (four resources)Ad groupsAd group performance reports: hourly, daily, weekly, and monthly (four resources)AdsAd performance reports: hourly, daily, weekly, and monthly (four resources).Budget summary reportCampaignsCampaign performance reports: hourly, daily, weekly, and monthly (four resources).Keyword performance reports: hourly, daily, weekly, and monthly (four resources). By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#prerequisites","content":" This connector uses OAuth2 to authenticate with Microsoft. You can do this in the Flow web app, or configure manually if you're using the flowctl CLI. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Microsoft in the Flow web app​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#using-oauth2-to-authenticate-with-microsoft-in-the-flow-web-app","content":" You'll need: User credentials with access to the Bing Ads account. A developer token associated with the user. ","version":"Next","tagName":"h3"},{"title":"Authenticating manually using the CLI​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#authenticating-manually-using-the-cli","content":" You'll need: A registered Bing Ads application with the following credentials retrieved: Client ID Client Secret Refresh Token To set get these items, complete the following steps: Register your Bing Ads Application in the Azure Portal. During setup, note the client_id and client_secret. Get a user access token. Redeem the user authorization code for OAuth tokens, and note the refresh_token. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Bing Ads source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials object\tRequired /credentials/auth_method\tAuthentication method\tSet to oauth2.0\tString\toauth2.0 /credentials/client_id\tClient ID\tThe Client ID of your Microsoft Advertising developer application.\tString\tRequired /credentials/client_secret\tClient Secret\tThe Client Secret of your Microsoft Advertising developer application.\tString\tRequired /credentials/refresh_token\tRefresh Token\tRefresh Token to renew the expired Access Token.\tString\tRequired /developer_token\tDeveloper Token\tDeveloper token associated with user.\tString\tRequired /reports_start_date\tCredentials\tThe start date from which to begin replicating report data. Any data generated before this date will not be replicated in reports. This is a UTC date in YYYY-MM-DD format.\tString\tRequired, 2020-01-01 /tenant_id\tCredentials\tThe Tenant ID of your Microsoft Advertising developer application. Set this to common unless you know you need a different value.\tString\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tBing Ads resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Bing Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-bing-ads:dev config: credentials: auth_type: oauth2.0 client_id: 6731de76-14a6-49ae-97bc-6eba6914391e client_secret: <secret> refresh_token: <token> developer_token: <token> reports_start_date: 2020-01-01 tenant_id: common bindings: - resource: stream: accounts syncMode: full_refresh target: ${PREFIX}/accounts {} ","version":"Next","tagName":"h3"},{"title":"Braintree","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Braintree","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/#supported-data-resources","content":" The following data resources are supported through the Braintree APIs: CustomersDiscountsDisputesTransactionsMerchant AccountsPlansSubscriptions By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Braintree","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/#prerequisites","content":" To set up the Braintree source connector, you'll need Braintree's: Public KeyEnvironmentMerchant IDPrivate Key We recommend creating a restricted, read-only key specifically for Estuary access. This will allow you to control which resources Estuary should be able to access. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Braintree","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Braintree source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Braintree","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/environment\tEnvironment\tEnvironment specifies where the data will come from.\tstring\tRequired /merchant_id\tMerchant ID\tThe unique identifier for your entire gateway account.\tstring\tRequired /private_key\tPrivate Key\tBraintree Private Key.\tstring\tRequired /public_key\tPublic Key\tBraintree Public Key.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tDefault Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Braintree project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Braintree","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-braintree:dev config: environment: Development merchant_id: <id> private_key: <key> public_key: <key> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: customers syncMode: full_refresh target: ${PREFIX}/customers {...} ","version":"Next","tagName":"h3"},{"title":"Chargebee","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Chargebee","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/#supported-data-resources","content":" The following data resources are supported through the Chargebee APIs: SubscriptionsCustomersInvoicesOrdersPlansAddonsItemsItem PricesAttached Items By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Chargebee","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/#prerequisites","content":" To set up the Chargebee source connector, you'll need the Chargebee API key and the Product Catalog version. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Chargebee","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Chargebee source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Chargebee","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/site_api_key\tAPI Key\tChargebee API Key.\tstring\tRequired /site\tSite\tThe site prefix for your Chargebee instance.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired /product_catalog\tProduct Catalog\tProduct Catalog version of your Chargebee site. Instructions on how to find your version you may find under 'API Version' section in the Chargebee docs.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Chargebee project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Chargebee","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-chargebee:dev config: site_api_key: <secret> site: <your site> start_date: 2017-01-25T00:00:00Z product_catalog: <your product catalog> bindings: - resource: stream: items syncMode: full_refresh target: ${PREFIX}/items {...} ","version":"Next","tagName":"h3"},{"title":"Braze","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Braze","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/#supported-data-resources","content":" The following data resources are supported through the Braze APIs: campaignscampaigns_analyticscanvasescanvases_analyticseventsevents_analyticskpi_daily_new_userskpi_daily_active_userskpi_daily_app_uninstallscardscards_analyticssegmentssegments_analytics By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Braze","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/#prerequisites","content":" It is required to have an account on Braze to provide us with URL and Rest API Key during set up. Rest API Key could be found on Braze Dashboard -> Developer Console tab -> API Settings -> Rest API KeysURL could be found on Braze Dashboard -> Manage Settings -> Settings tab -> Your App name -> SDK Endpoint ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Braze","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Braze source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Braze","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_key\tBraze REST API Key\tBraze API Key.\tstring\tRequired /start_date\tStart Date\tRows after this date will be synced.\tstring\tRequired /url\tURL\tBraze REST API endpoint.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Braze project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Braze","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-braze:dev config: api_key: <key> start_date: 2017-01-25T00:00:00Z url: <url> bindings: - resource: stream: events syncMode: full_refresh target: ${PREFIX}/events {...} ","version":"Next","tagName":"h3"},{"title":"Confluence","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Confluence","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/#supported-data-resources","content":" When you configure the connector, you specify your email, api and domain name From your selection, the following data resources are captured: ","version":"Next","tagName":"h2"},{"title":"resources​","type":1,"pageTitle":"Confluence","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/#resources","content":" AuditBlog PostsGroupPagesSpace Each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h3"},{"title":"Prerequisites​","type":1,"pageTitle":"Confluence","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/#prerequisites","content":" Atlassian API TokenYour Confluence domain nameYour Confluence login email ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Confluence","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector. Create an API Token For detailed instructions on creating an Atlassian API Token, please refer to the official documentation. Set up the Confluence connector in Estuary Flow Log into Estuary Flow and click "Captures".Select "Create Capture" search for and click on "Confluence"Enter a Capture NameIn the "API Token" field, enter your Atlassian API TokenIn the "Domain Name" field, enter your Confluence Domain nameIn the "Email" field, enter your Confluence login emailClick "Save and Publish" ","version":"Next","tagName":"h2"},{"title":"Sample​","type":1,"pageTitle":"Confluence","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-confluence:dev config: credentials: api_token: PAT Credentials domain_name: estuary1.atlassian.net email: dave@estuary.dev bindings: - resource: stream: audit syncMode: full_refresh target: ${PREFIX}/audit {...} ","version":"Next","tagName":"h3"},{"title":"BigQuery Batch Query Connector","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#prerequisites","content":" To use this connector, you will need the following prerequisites: A Google Cloud Project with BigQuery enabledA Google Cloud Service Account with the "BigQuery User" and "BigQuery Data Viewer" roles in your GCP projectA Service Account Key to authenticate into your Service Account See the setup guide for more information about how to create the required resources. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#setup","content":" Follow the steps below to set up the BigQuery connector. ","version":"Next","tagName":"h2"},{"title":"Service Account​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#service-account","content":" To sync data from BigQuery, you need credentials for a Service Account with the "BigQuery User" and "BigQuery Data Viewer" roles. These roles grant the necessary permissions to run BigQuery jobs, discover tables within the dataset, and read the contents of those tables. It is recommended to create a dedicated Service Account to facilitate permission management and auditing. However, if you already have a Service Account with the correct permissions, you can use it. Here's how to provision a suitable service account: Follow Google Cloud Platform's instructions for Creating a Service Account.Note down the ID of the service account you just created. Service Account IDs typically follow the format <account-name>@<project-name>.iam.gserviceaccount.com.Follow Google Cloud Platform's instructions for Granting IAM Roles to the new service account. The "principal" email address should be the ID of the service account you just created, and the roles granted should be "BigQuery User" and "BigQuery Data Viewer". ","version":"Next","tagName":"h3"},{"title":"Service Account Key​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#service-account-key","content":" Service Account Keys are used to authenticate as Google Service Accounts. To be able to utilize the permissions granted to the Service Account in the previous step, you'll need to provide its Service Account Key when creating the capture. It is a good practice, though not required, to create a new key for Flow even if you're reusing a preexisting account. To create a new key for a service account, follow Google Cloud Platform's instructions for Creating a Service Account Key. Be sure to create the key in JSON format. Once the linked instructions have been followed you should have a key file, which will need to be uploaded to Flow when setting up your capture. ","version":"Next","tagName":"h3"},{"title":"Set up the BigQuery connector in Estuary Flow​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#set-up-the-bigquery-connector-in-estuary-flow","content":" Log into your Estuary Flow account.In the left navigation bar, click on "Sources". In the top-left corner, click "New Capture".Locate and select the "BigQuery" connector.Enter a name and optional description for the capture task.Enter the Project ID and Dataset name that you intend to capture from, and paste or upload the service account key in the appropriate field.Click the "Next" button and wait while the connector automatically discovers the available tables in the specified project and dataset.Select the tables you wish to capture from the bindings list.For each binding you selected, you will likely wish to specify cursor columns and a shorter "Poll Interval" setting. Otherwise the default behavior will be to recapture the entire contents of the table, once per day.Once you are satisfied with your binding selection, click the "Save and Publish" button. ","version":"Next","tagName":"h3"},{"title":"Specifying Cursor Columns​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#specifying-cursor-columns","content":" This connector operates by periodically executing a SELECT * FROM table query and outputting the resulting rows as JSON documents into a Flow collection. In some cases doing this once or twice a day is entirely sufficient, but when working with larger tables (or if a faster update rate is desired) it pays to manually configure cursor columns. The cursor must be a column (or ordered tuple of columns) which is expected to strictly increase for newly added or updated rows. Common examples of suitable cursors include: Update timestamps, which are often the best choice if available since they can often be used to identify changed rows as well as new insertions.Creation timestamps, which can be used to identify newly added rows in append-only datasets but won't help to identify changes to preexisting rows.Monotonically increasing IDs, which are another way of identifying newly added rows but often don't help with update detection. When a cursor is specified, the update query will take the form SELECT * FROM $table WHERE $cursorName > $lastCursorValue ORDER BY $cursorNameand the capture connector will keep track of the highest observed cursor value between polling intervals. If multiple cursor columns are specified, they will be treated as an ordered tuple of columns which collectively form the cursor, and the obvious lexicographic tuple ordering will apply. Once you have specified a suitable cursor for a table, you will likely want to lower the polling interval for that binding. The default polling interval is "24h" to keep data volumes low, but once a cursor is specified there is usually no downside to frequent polling, so you may wish to lower the interval to "5m" or even "5s" for that table. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the BigQuery source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/project_id\tProject ID\tThe GCP project ID for the project containing the source BigQuery dataset\tstring\tRequired /dataset\tDataset\tThe BigQuery dataset to discover tables within\tstring\tRequired /credentials_json\tCredentials JSON\tThe contents of your Service Account Key JSON file\tstring\tRequired /advanced/poll\tPoll Interval\tHow often to poll bindings (may be overridden for a specific binding)\tstring\t"24h" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tName\tA name which uniquely identifies this binding.\tstring\tRequired /cursor\tCursor\tThe column name(s) which should be used as the incremental capture cursor\tarray\t[] /template\tTemplate\tThe query (template) which will be executed every polling interval\tstring\tRequired /poll\tPoll Interval\tOverride the global polling interval for this binding.\tstring\t"" ","version":"Next","tagName":"h3"},{"title":"Query Templates​","type":1,"pageTitle":"BigQuery Batch Query Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/#query-templates","content":" The query template property of a binding defines what query will be executed against the database, given inputs describing the configured cursor columns and whether any prior cursor state exists. The default template implements the behavior described inspecifying cursor columns. In principle you are free to modify this template to implement whatever query you need. You could for instance create a new binding which queries a view, or which performs a more complex analytics query. However this should not be combined with table auto-discovery in a single capture, as this can produce some counterintuitive results. Instead create two separate capture tasks from the same database, one for autodiscovered tables and a separate one with the setting "Automatically Add New Collections" disabled for your custom bindings. ","version":"Next","tagName":"h3"},{"title":"Datadog HTTP Ingest (Webhook)","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/","content":"","keywords":"","version":"Next"},{"title":"Usage​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#usage","content":" This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific system or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source. This is useful primarily if you want to test out Flow or see how your webhook data will come over. To begin, use the web app to create a capture. Once published, the confirmation dialog displays a unique URL for your public endpoint. You're now ready to send data to Flow. ","version":"Next","tagName":"h2"},{"title":"Send sample data to Flow​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#send-sample-data-to-flow","content":" After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture. Expand POST or PUT and click Try it out to send some example JSON documents using the UI. You can also copy the provided curl commands to send data via the command line. After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture. Click Details to view the data preview. ","version":"Next","tagName":"h3"},{"title":"Configure a Datadog webhook​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#configure-a-datadog-webhook","content":" In the Datadog Cloud Monitoring Platform, navigate to the Integrations tab and click on the Integrations option in the dropdown. Using the search bar, search for the Webhook Integration and install it. Within the Webhook Integration configuration, select new Webhook and enter in the following information: Field\tValue\tDescriptionName\tyour-webhook\tThe name of your webhook within Datadog URL\thttps://your-unique-webhook-url/webhook-data\tThe unique Estuary URL created for ingesting webhook data In the Datadog Cloud Monitoring Platform, navigate to Monitors/New Monitor and select Metric for the type. Define the alert conditions and under Notify your team select @your-webhook from the dropdown. ","version":"Next","tagName":"h3"},{"title":"Webhook URLs​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#webhook-urls","content":" To determine the full URL, start with the base URL from the Flow web app (for example https://abc123-8080.us-central1.v1.estuary-data.dev), and then append the path. The path will be whatever is in the paths endpoint configuration field (/webhook-data by default). For example, your full webhook URL would be https://<your-unique-hostname>/webhook-data. You can add additional paths to paths, and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you're editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to /my-webhook.json, then the full URL for that binding would be https://<your-unique-hostname>/my-webhook.json. Any URL query parameters that are sent on the request will be captured and serialized under /_meta/query/* the in documents. For example, a webhook request that's sent to /webhook-data?testKey=testValue would result in a document like: { "_meta": { "webhookId": "...", "query": { "testKey": "testValue" }, ... } ... } ","version":"Next","tagName":"h3"},{"title":"Authentication​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#authentication","content":" The connector can optionally require each request to present an authentication token as part of an Authorization: Bearer HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an Authorization header with the value of your token. For example, if you use an auth token value of mySecretToken, then the header on each request must be Authorization: Bearer mySecretToken. If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection. We recommend using authentication whenever possible. ","version":"Next","tagName":"h3"},{"title":"Webhook signature verification​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#webhook-signature-verification","content":" This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact support@estuary.dev and let us know. ","version":"Next","tagName":"h3"},{"title":"Endpoint Configuration​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#endpoint-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tEndpointConfig object\tRequired /require_auth_token Optional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections.\tnull, string\tnull /paths\tURL Paths\tList of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.\tnull, string\tnull ","version":"Next","tagName":"h2"},{"title":"Resource configuration​","type":1,"pageTitle":"Datadog HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/#resource-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tResourceConfig object\tRequired /idFromHeader Set the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`.\tnull, string /path The URL path to use for adding documents to this binding. Defaults to the name of the collection.\tnull, string /stream The name of the binding, which is used as a merge key when doing Discovers.\tnull, string\t ","version":"Next","tagName":"h2"},{"title":"Exchange Rates API","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Exchange Rates API","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/#prerequisites","content":" An API key generated through an Exchange Rate API account. After you sign up, your API key can be found on your account page. You may use the free account, but note that you'll be limited to the default base currency, EUR. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Exchange Rates API","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Exchange Rates source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Exchange Rates API","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/access_key\tAccess key\tYour API access key. The key is case sensitive.\tstring\tRequired /base\tBase currency\tISO reference currency. See the documentation. Free plan doesn't support Source Currency Switching, default base currency is EUR\tstring\tEUR /ignore_weekends\tIgnore weekends\tIgnore weekends? (Exchanges don't run on weekends)\tboolean\ttrue /start_date\tStart date\tThe date in the format YYYY-MM-DD. Data will begin from this date.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tData stream from which Flow captures data. Always set to exchange_rates.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Exchange Rates API","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-exchange-rates:dev config: base: EUR access_key: <secret> start_date: 2022-01-01 ignore_weekends: true bindings: - resource: stream: exchange_rates syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} This capture definition should only have one binding, as exchange_rates is the only available data stream. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Dropbox","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/","content":"","keywords":"","version":"Next"},{"title":"Supported data types​","type":1,"pageTitle":"Dropbox","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/#supported-data-types","content":" This connector automatically captures the data within the specified Dropbox folder into a single Flow collection. The following file types are supported: AvroCSVJSONProtobufW3C Extended Log The following compression methods are supported: ZIPGZIPZSTD By default, Flow automatically detects the file type and compression method. If necessary, you can specify the correct file type, compression, and other properties (CSV only) using the optional parser configuration. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Dropbox","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/#prerequisites","content":" To use this connector, make sure you have an active Dropbox account. Authentication is handled using OAuth2 in the Flow web app. Note: This connector is designed for files located in a specific Dropbox folder. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Dropbox","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/#configuration","content":" You configure the Dropbox source connector in the Flow web app. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Dropbox source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Dropbox","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/path\tPath\tThe path to the Dropbox folder to read from. For example, "/my_folder".\tstring\tRequired /matchKeys\tMatch Keys\tFilter applied to all object keys under the prefix. If provided, only objects whose absolute path matches this regex will be read. For example, you can use .*\\.json to only capture JSON files.\tobject /credentials\tCredentials\tOAuth2 credentials for Dropbox. These are automatically handled by the Web UI.\tobject\tRequired /advanced\tAdvanced\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/ascendingKeys\tAscending Keys\tImprove sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors.\tboolean\tfalse /parser\tParser Configuration\tConfigures how files are parsed (optional, see below)\tobject /parser/compression\tCompression\tDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.\tnull, string\tnull /parser/format\tFormat\tDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.\tobject\t{"type":"auto"} /parser/format/type\tType string\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tPath\tThe path to the Dropbox folder.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Dropbox","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-http-file:dev config: path: "/my_folder" matchKeys: ".*\\.json" bindings: - resource: stream: /my_folder target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Advanced: Parsing Dropbox files​","type":1,"pageTitle":"Dropbox","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/#advanced-parsing-dropbox-files","content":" Dropbox folders can contain a variety of file types. For each file type, Flow must parse and translate data into collections with defined fields and JSON schemas. By default, the parser will automatically detect the type and shape of the data in the Dropbox folder, so you won't need to change the parser configuration for most captures. However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector. The parser configuration includes: Compression: Specify how the data is compressed. If no compression type is specified, the connector will try to determine the compression type automatically. Options are: zipgzipzstdnone Format: Specify the data format, which determines how it will be parsed. If no file type is specified, the connector will try to determine the file type automatically Options are: AvroCSVJSONProtobufW3C Extended Log CSV configuration​ CSV files include several additional properties that are important to the parser. In most cases, Flow is able to automatically determine the correct values, but you may need to specify for unusual datasets. These properties are: Delimiter. Options are: Comma (",")Pipe ("|")Space ("0x20")Semicolon (";")Tab ("0x09")Vertical tab ("0x0B")Unit separator ("0x1F")SOH ("0x01")Auto Encoding type, specified by its WHATWG label. Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture. Escape characters. Options are: Backslash ("\\\\")Disable escapes ("")Auto Optionally, a list of column Headers, if not already included in the first row of the CSV file. If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file. Line ending values CRLF ("\\\\r\\\\n") (Windows)CR ("\\\\r")LF ("\\\\n")Record Separator ("0x1E")Auto Quote character Double Quote ("\\"")Single Quote (")Disable Quoting ("")Auto ","version":"Next","tagName":"h3"},{"title":"Freshdesk","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Freshdesk","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/#supported-data-resources","content":" The following data resources are supported: AgentsBusiness hoursCanned response foldersCanned responsesCompaniesContactsConversationsDiscussion categoriesDiscussion commentsDiscussion forumsDiscussion topicsEmail configsEmail mailboxesGroupsProductsRolesSatisfaction ratingsScenario automationsSettingsSkillsSLA policiesSolution articlesSolution categoriesSolution foldersSurveysTicket fieldsTicketsTime entries By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Freshdesk","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/#prerequisites","content":" To use this connector, you'll need: Your Freshdesk account URLYour Freshdesk API key ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Freshdesk","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Freshdesk source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Freshdesk","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_key\tAPI Key\tFreshdesk API Key.\tstring\tRequired /domain\tDomain\tFreshdesk domain\tstring\tRequired /requests_per_minute\tRequests per minute\tThe number of requests per minute that this source is allowed to use. There is a rate limit of 50 requests per minute per app per account.\tinteger /start_date\tStart Date\tUTC date and time. Any data created after this date will be replicated. If this parameter is not set, all data will be replicated.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource from the Freshdesk API from which a collection is captured.\tstring\tRequired /syncMode\tSync mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Freshdesk","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-freshdesk:dev config: api_key: xxxxxxxxxxxxxxxx domain: acmesupport.freshdesk.com bindings: - resource: stream: agents syncMode: incremental target: ${PREFIX}/agents {...} ","version":"Next","tagName":"h3"},{"title":"Facebook Marketing","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#supported-data-resources","content":" The following data resources are supported: AdsAd activitiesAd creativesAd insightsBusiness ad accountsCampaignsImagesVideos By default, each resource associated with your Facebook Business account is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#prerequisites","content":" There are two ways to authenticate with Facebook when capturing data into Flow: signing in with OAuth2, and manually supplying an access token. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the manual method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Signing in with OAuth2​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#signing-in-with-oauth2","content":" To use OAuth2 in the Flow web app, you'll need A Facebook Business account and its Ad Account ID. ","version":"Next","tagName":"h3"},{"title":"Configuring manually with an access token​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#configuring-manually-with-an-access-token","content":" To configure manually with an access token, you'll need: A Facebook Business account, and its Ad Account ID.A Facebook app with: The Marketing API enabled.A Marketing API access token generated.Access upgrade from Standard Access (the default) to Advanced Access. This allows a sufficient rate limit to support the connector. Follow the steps below to meet these requirements. Setup​ Find your Facebook Ad Account ID. In Meta for Developers, create a new app of the type Business. On your new app's dashboard, click the button to set up the Marketing API. On the Marketing API Tools tab, generate a Marketing API access token with all available permissions (ads_management, ads_read, read_insights, and business_management). Request Advanced Access for your app. Specifically request the Advanced Access to the following: The feature Ads Management Standard Access The permission ads_read The permission ads_management Once your request is approved, you'll have a high enough rate limit to proceed with running the connector. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Facebook Marketing source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#properties","content":" Endpoint​ By default, this connector captures all data associated with your Business Ad Account. You can refine the data you capture from Facebook Marketing using the optional Custom Insights configuration. You're able to specify certain fields to capture and apply data breakdowns.Breakdowns are a feature of the Facebook Marketing Insights API that allows you to group API output by common metrics.Action breakdownsare a subset of breakdowns that must be specified separately. Property\tTitle\tDescription\tType\tRequired/Default/access_token\tAccess Token\tThe value of the access token generated.\tstring\tRequired /account_id\tAccount ID\tThe Facebook Ad account ID to use when pulling data from the Facebook Marketing API.\tstring\tRequired for manual authentication only /custom_insights\tCustom Insights\tA list which contains insights entries. Each entry must have a name and can contains fields, breakdowns or action_breakdowns\tarray /custom_insights/-/action_breakdowns\tAction Breakdowns\tA list of chosen action_breakdowns to apply\tarray\t[] /custom_insights/-/action_breakdowns/-\tValidActionBreakdowns\tGeneric enumeration. Derive from this class to define new enumerations.\tstring /custom_insights/-/breakdowns\tBreakdowns\tA list of chosen breakdowns to apply\tarray\t[] /custom_insights/-/breakdowns/-\tValidBreakdowns\tGeneric enumeration. Derive from this class to define new enumerations.\tstring /custom_insights/-/end_date\tEnd Date\tThe date until which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this date will be replicated. Not setting this option will result in always syncing the latest data.\tstring /custom_insights/-/fields\tFields\tA list of chosen fields to capture\tarray\t[] /custom_insights/-/fields/-\tValidEnums\tGeneric enumeration. Derive from this class to define new enumerations.\tstring /custom_insights/-/name\tName\tThe name of the insight\tstring /custom_insights/-/start_date\tStart Date\tThe date from which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z.\tstring /custom_insights/-/time_increment\tTime Increment\tTime window in days by which to aggregate statistics. The sync will be chunked into N day intervals, where N is the number of days you specified. For example, if you set this value to 7, then all statistics will be reported as 7-day aggregates by starting from the start_date. If the start and end dates are October 1st and October 30th, then the connector will output 5 records: 01 - 06, 07 - 13, 14 - 20, 21 - 27, and 28 - 30 (3 days only).\tinteger\t1 /end_date\tEnd Date\tThe date until which you'd like to capture data, in the format YYYY-MM-DDT00:00:00Z. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the latest data.\tstring /fetch_thumbnail_images\tFetch Thumbnail Images\tIn each Ad Creative, fetch the thumbnail_url and store the result in thumbnail_data_url\tboolean\tfalse /include_deleted\tInclude Deleted\tInclude data from deleted Campaigns, Ads, and AdSets\tboolean\tfalse /insights_lookback_window\tInsights Lookback Window\tThe attribution window\tinteger\t28 /max_batch_size\tMaximum size of Batched Requests\tMaximum batch size used when sending batch requests to Facebook API. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.\tinteger\t50 /page_size\tPage Size of Requests\tPage size used when sending requests to Facebook API to specify number of records per page when response has pagination. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.\tinteger\t25 /start_date\tStart Date\tThe date from which you'd like to begin capturing data, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Facebook Marketing account from which collections are captured.\tstring\tRequired /syncMode\tSync mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Facebook Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-facebook-marketing:dev config: access_token: <secret> account_id: 000000000000000 start_date: 2022-03-01T00:00:00Z custom_insights: - name: my-custom-insight fields: [ad_id, account_currency] breakdowns: [device_platform] action_breakdowns: [action_type] start_date: 2022-03-01T00:00:00Z bindings: - resource: stream: ad_account syncMode: incremental target: ${PREFIX}/ad_account - resource: stream: ad_sets syncMode: incremental target: ${PREFIX}/ad_sets - resource: stream: ads_insights syncMode: incremental target: ${PREFIX}/ads_insights - resource: stream: ads_insights_age_and_gender syncMode: incremental target: ${PREFIX}/ads_insights_age_and_gender - resource: stream: ads_insights_country syncMode: incremental target: ${PREFIX}/ads_insights_country - resource: stream: ads_insights_region syncMode: incremental target: ${PREFIX}/ads_insights_region - resource: stream: ads_insights_dma syncMode: incremental target: ${PREFIX}/ads_insights_dma - resource: stream: ads_insights_platform_and_device syncMode: incremental target: ${PREFIX}/ads_insights_platform_and_device - resource: stream: ads_insights_action_type syncMode: incremental target: ${PREFIX}/ads_insights_action_type - resource: stream: campaigns syncMode: incremental target: ${PREFIX}/campaigns - resource: stream: activities syncMode: incremental target: ${PREFIX}/activities - resource: stream: ads syncMode: incremental target: ${PREFIX}/ads - resource: stream: ad_creatives syncMode: full_refresh target: ${PREFIX}/ad_creatives Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"GitLab","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#supported-data-resources","content":" When you configure the connector, you may a list of GitLab Groups or Projects from which to capture data. From your selection, the following data resources are captured: ","version":"Next","tagName":"h2"},{"title":"Resources​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#resources","content":" BranchesCommitsIssuesGroup Issue BoardsPipelinesJobsProjectsProject MilestonesProject Merge RequestsUsersGroupsGroup MilestonesGroup and Project MembersTagsReleasesGroup LabelsProject LabelsEpics(only available for GitLab Ultimate and GitLab.com Gold accounts)Epic Issues (only available for GitLab Ultimate and GitLab.com Gold accounts) Each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h3"},{"title":"Prerequisites​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#prerequisites","content":" There are two ways to authenticate with GitLab when capturing data into Flow: using OAuth2, and manually, by generating a personal access token. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the access token method is the only supported method using the command line. Which authentication method you choose depends on the policies of your organization. Github has special organization settings that need to be enabled in order for users to be able to access repos that are part of an organization. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with GitLab in the Flow web app​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#using-oauth2-to-authenticate-with-gitlab-in-the-flow-web-app","content":" A GitLab user account with access to the repositories of interest, and which is a member of organizations of interest. How to add a member. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually using personal access token​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#configuring-the-connector-specification-manually-using-personal-access-token","content":" A GitLab user account with access to all entities of interest. A GitLab personal access token). ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#setup","content":" Complete authentication using Oauth or a PATSelect your start date in the format 2023-08-31T00:00:00Optionally select Groups and Projects ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"GitLab","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-gitlab:dev config: credentials: option_title: PAT Credentials personal_access_token: {secret} groups: estuary.dev projects: estuary/flow start_date: 2022-01-01T00:00:00Z bindings: - resource: stream: branches syncMode: full_refresh target: ${PREFIX}/assignees {...} ","version":"Next","tagName":"h3"},{"title":"GitHub","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#supported-data-resources","content":" When you configure the connector, you specify a list of GitHub organizations and/or repositories from which to capture data. From your selection, the following data resources are captured: Full refresh (batch) resources\tIncremental (real-time supported) resourcesAssignees\tComments Branches\tCommit comment reactions Collaborators\tCommit comments Issue labels\tCommits Pull request commits\tDeployments Tags\tEvents Team members\tIssue comment reactions Team memberships\tIssue events Teams\tIssue milestones Users\tIssue reactions Issues Project cards Project columns Projects Pull request comment reactions Pull request stats Pull requests Releases Repositories Review comments Reviews Stargazers Workflow runs Workflows Each resource is mapped to a Flow collection through a separate binding. info The /start_date field is not applicable to the following resources: AssigneesBranchesCollaboratorsIssue labelsOrganizationsPull request commitsPull request statsRepositoriesTagsTeamsUsers ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#prerequisites","content":" There are two ways to authenticate with GitHub when capturing data into Flow: using OAuth2, and manually, by generating a personal access token. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the access token method is the only supported method using the command line. Which authentication method you choose depends on the policies of your organization. Github has special organization settings that need to be enabled in order for users to be able to access repos that are part of an organization. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with GitHub in the Flow web app​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#using-oauth2-to-authenticate-with-github-in-the-flow-web-app","content":" A GitHub user account with access to the repositories of interest, and which is a member of organizations of interest. User may need to request access in Github under the user's personal settings (not the organization settings) by going to Applications then Authorized OAuth Apps on Github. Click the app or the image next to the app and request access under "Organization access". After a user has made the request, the organization administrator can grant access on the "Third-party application access policy" page. See additional details on this Github doc. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually using personal access token​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#configuring-the-connector-specification-manually-using-personal-access-token","content":" A GitHub user account with access to the repositories of interest, and which is a member of organizations of interest. A GitHub personal access token. You may use multiple tokens to balance the load on your API quota. User may need to get the organization's administrator to grant access under "Third-party Access" then "Personal access tokens". ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the GitHub source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so some of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/branch\tBranch (Optional)\tSpace-delimited list of GitHub repository branches to pull commits for, e.g. `estuary/flow/your-branch`. If no branches are specified for a repository, the default branch will be pulled.\tstring /credentials\tAuthentication\tChoose how to authenticate to GitHub\tobject\tRequired /credentials/option_title\tAuthentication method\tSet to PAT Credentials for manual authentication\tstring /credentials/personal_access_token\tAccess token\tPersonal access token, used for manual authentication. You may include multiple access tokens as a comma separated list. /page_size_for_large_streams\tPage size for large streams (Optional)\tThe Github connector captures from several resources with a large amount of data. The page size of such resources depends on the size of your repository. We recommended that you specify values between 10 and 30.\tinteger\t10 /repository\tGitHub Repositories\tSpace-delimited list of GitHub organizations/repositories, e.g. `estuary/flow` for a single repository, `estuary/*` to get all repositories from an organization and `estuary/flow estuary/another-repo` for multiple repositories.\tstring\tRequired /start_date\tStart date\tThe date from which you'd like to replicate data from GitHub in the format YYYY-MM-DDT00:00:00Z. For the resources that support this configuration, only data generated on or after the start date will be replicated. This field doesn't apply to all resources.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tGitHub resource from which collection is captured.\tstring\tRequired /syncMode\tSync mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"GitHub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-github:dev config: credentials: option_title: PAT Credentials personal_access_token: {secret} page_size_for_large_streams: 10 repository: estuary/flow start_date: 2022-01-01T00:00:00Z bindings: - resource: stream: assignees syncMode: full_refresh target: ${PREFIX}/assignees {...} ","version":"Next","tagName":"h3"},{"title":"Gladly","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Gladly","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/#supported-data-resources","content":" This connector can be used to sync the following Event entity types from Gladly: AGENT_AVAILABILITYAGENT_STATUSCONTACTCONVERSATIONCUSTOMERPAYMENT_REQUESTTASK By default, each entity type is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Gladly","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/#prerequisites","content":" To set up the Gladly source connector, you'll need a Gladly account with an API token. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Gladly","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Gladly source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Gladly","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/organization\tOrganization\tOrganization to Request Data From\tstring\tRequired /agentEmail\tAgent Email\tAgent Email Address to use for Authentication\tstring\tRequired /apiToken\tAPI Token\tAPI Token to use for Authentication\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tName\tName of this resource\tstring\tRequired /interval\tInterval\tInterval between updates for this resource\tstring\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Gladly","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-gladly:dev config: organization: agentEmail: apiToken: <secret> bindings: - resource: name: AgentAvailabilityEvents interval: PT30S target: ${PREFIX}/AgentAvailabilityEvents {...} ","version":"Next","tagName":"h3"},{"title":"Google Cloud Storage","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/#prerequisites","content":" To use this connector, either your GCS bucket must be public, or you must have access via a Google service account. For public buckets, verify that objects in the bucket are publicly readable.For buckets accessed by a Google Service Account: Ensure that the user has been assigned a role with read access.Create a JSON service account key. Google's Application Default Credentials will use this file for authentication. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the GCS source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/advanced Options for advanced users. You should not typically need to modify these.\tobject /advanced/ascendingKeys\tAscending Keys\tImprove sync speeds by listing files from the end of the last sync, rather than listing the entire bucket prefix. This requires that you write objects in ascending lexicographic order, such as an RFC-3339 timestamp, so that key ordering matches modification time ordering. If data is not ordered correctly, using ascending keys could cause errors.\tboolean\tfalse /bucket\tBucket\tName of the Google Cloud Storage bucket\tstring\tRequired /googleCredentials\tGoogle Service Account\tService account JSON key to use as Application Default Credentials\tstring /matchKeys\tMatch Keys\tFilter applied to all object keys under the prefix. If provided, only objects whose key (relative to the prefix) matches this regex will be read. For example, you can use ".*\\.json" to only capture json files.\tstring /parser\tParser Configuration\tConfigures how files are parsed\tobject /parser/compression\tCompression\tDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.\tnull, string\tnull /parser/format\tFormat\tDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.\tobject\t{"type":"auto"} /parser/format/type\tType string /prefix\tPrefix\tPrefix within the bucket to capture from. Use this to limit the data in your capture.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tPrefix\tPath to dataset in the bucket, formatted as bucket-name/prefix-name\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-gcs:dev config: bucket: my-bucket googleCredentials: "type": "service_account", "project_id": "project-id", "private_key_id": "key-id", "private_key": "-----BEGIN PRIVATE KEY-----\\nprivate-key\\n-----END PRIVATE KEY-----\\n", "client_email": "service-account-email", "client_id": "client-id", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email" parser: compression: zip format: type: csv config: delimiter: "," encoding: UTF-8 errorThreshold: 5 headers: [ID, username, first_name, last_name] lineEnding: "\\\\r" quote: "\\"" bindings: - resource: stream: my-bucket/${PREFIX} target: ${PREFIX}/${COLLECTION_NAME} Your capture definition may be more complex, with additional bindings for different GCS prefixes within the same bucket. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Advanced: Parsing cloud storage data​","type":1,"pageTitle":"Google Cloud Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/#advanced-parsing-cloud-storage-data","content":" Cloud storage platforms like GCS can support a wider variety of file types than other data source systems. For each of these file types, Flow must parse and translate data into collections with defined fields and JSON schemas. By default, the parser will automatically detect the type and shape of the data in your bucket, so you won't need to change the parser configuration for most captures. However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector. The parser configuration includes: Compression: Specify how the bucket contents are compressed. If no compression type is specified, the connector will try to determine the compression type automatically. Options are: zipgzipzstdnone Format: Specify the data format, which determines how it will be parsed. Options are: Auto: If no format is specified, the connector will try to determine it automatically.AvroCSVJSONProtobufW3C Extended Log info At this time, Flow only supports GCS captures with data of a single file type. Support for multiple file types, which can be configured on a per-binding basis, will be added in the future. For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type. CSV configuration​ CSV files include several additional properties that are important to the parser. In most cases, Flow is able to automatically determine the correct values, but you may need to specify for unusual datasets. These properties are: Delimiter. Options are: Comma (",")Pipe ("|")Space ("0x20")Semicolon (";")Tab ("0x09")Vertical tab ("0x0B")Unit separator ("0x1F")SOH ("0x01")Auto Encoding type, specified by its WHATWG label. Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture. Escape characters. Options are: Backslash ("\\\\")Disable escapes ("")Auto Optionally, a list of column Headers, if not already included in the first row of the CSV file. If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file. Line ending values CRLF ("\\\\r\\\\n") (Windows)CR ("\\\\r")LF ("\\\\n")Record Separator ("0x1E")Auto Quote character Double Quote ("\\"")Single Quote (")Disable Quoting ("")Auto The sample specification above includes these fields. ","version":"Next","tagName":"h3"},{"title":"Advanced: Configure Google service account impersonation​","type":1,"pageTitle":"Google Cloud Storage","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/#advanced-configure-google-service-account-impersonation","content":" As part of your Google IAM management, you may have configured one service account to impersonate another service account. You may find this useful when you want to easily control access to multiple service accounts with only one set of keys. If necessary, you can configure this authorization model for a GCS capture in Flow using the GitOps workflow. To do so, you'll enable sops encryption and impersonate the target account with JSON credentials. Before you begin, make sure you're familiar with how to encrypt credentials in Flow using sops. Use the following sample as a guide to add the credentials JSON to the capture's endpoint configuration. The sample uses the encrypted suffix feature of sops to encrypt only the sensitive credentials, but you may choose to encrypt the entire configuration. config: bucket: <bucket-name> googleCredentials_sops: # URL containing the account to impersonate and the associated project service_account_impersonation_url: https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<target-account>@<project>.iam.gserviceaccount.com:generateAccessToken # Credentials for the account that has been configured to impersonate the target. source_credentials: # In addition to the listed fields, copy and paste the rest of your JSON key file as your normally would # for the `googleCredentials` field client_email: <origin-account>@<anotherproject>.iam.gserviceaccount.com token_uri: https://oauth2.googleapis.com/token type: service_account type: impersonated_service_account ","version":"Next","tagName":"h3"},{"title":"Google Ads","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#supported-data-resources","content":" The following data resources are supported. Resources ending in _report represent legacy resources from the Google Adwords API. ad_group_adsad_group_ad_labelad_groupsad_group_labelcampaignscampaign_labelsclick_viewcustomergeographic_viewkeyword_viewuser_location_viewaccount_performance_reportad_performance_reportdisplay_keyword_performance_reportdisplay_topics_performance_reportshopping_performance_report By default, each resource is mapped to a Flow collection through a separate binding. You may also generate custom resources using GAQL queries. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#prerequisites","content":" There are two ways to authenticate with Google when capturing data into Flow: using OAuth2, and manually, using tokens and secret credentials. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the manual method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Customer Id & Login Customer Id​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#customer-id--login-customer-id","content":" The Login Customer Id setting refers to your MCC Google Ads account Id. One can easily find this number by accessing their Google Ads Dashboard and look to the far right corner of their screen. Example: In the above example, my login_customer_id would be 1234567890. The Customer Id setting refers to your Client Accounts under a MCC account. One can easily find this number by accessing their Google Ads Dashboard and look to the far left corner of their screen, after selecting a client account. Example: In the above example, my customer_id would be 9876543210. Multiple Customer Ids​ This Source allows for multiple Customer Ids to be selected. To allow this, simply add your customer_id followed by a comma. Example: Customer1 = 1234567890 Customer2 = 9876543210 customer_id = 1234567890,9876543210 ","version":"Next","tagName":"h3"},{"title":"Using OAuth2 to authenticate with Google in the Flow web app​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#using-oauth2-to-authenticate-with-google-in-the-flow-web-app","content":" One or more Google Ads accounts. Note each account's customer ID A Google Account that has access to the Google Ads account(s). This account may be a manager account. If so, ensure that it is linked to each Google Ads account and make note of its customer ID. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#configuring-the-connector-specification-manually","content":" One or more Google Ads accounts. Note each account's customer ID A Google Ads manager account that has been linked to each Google Ads account A Google Ads developer token. Your Google Ads manager account must be configured prior to applying for a developer token. caution Developer token applications are independently reviewed by Google and may take one or more days to be approved. Be sure to carefully review Google's requirements before submitting an application. A refresh token, which fetches a new developer tokens for you as the previous token expires. A generated Client ID and Client Secret, used for authentication. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the Flow specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Ads source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/conversion_window_days\tConversion Window (Optional)\tA conversion window is the period of time after an ad interaction (such as an ad click or video view) during which a conversion, such as a purchase, is recorded in Google Ads. For more information, see Google's docs.\tinteger\t14 /credentials\tGoogle Credentials object\tRequired /credentials/client_id\tClient ID\tThe Client ID of your Google Ads developer application.\tstring\tRequired /credentials/client_secret\tClient Secret\tThe Client Secret of your Google Ads developer application.\tstring\tRequired /credentials/developer_token\tDeveloper Token\tDeveloper token granted by Google to use their APIs.\tstring\tRequired /credentials/refresh_token\tRefresh Token\tThe token for obtaining a new access token.\tstring\tRequired /custom_queries\tCustom GAQL Queries (Optional) array /custom_queries/-/query\tCustom Query\tA custom defined GAQL query for building the report. Should not contain segments.date expression. See Google's query builder for more information.\tstring /custom_queries/-/table_name\tDestination Table Name\tThe table name in your destination database for chosen query.\tstring /customer_id\tCustomer ID(s)\tComma separated list of (client) customer IDs. Each customer ID must be specified as a 10-digit number without dashes. More instruction on how to find this value in our docs. Metrics streams like AdGroupAdReport cannot be requested for a manager account.\tstring\tRequired /end_date\tEnd Date (Optional)\tUTC date in the format 2017-01-25. Any data after this date will not be replicated.\tstring /login_customer_id\tLogin Customer ID for Managed Accounts (Optional)\tIf your access to the customer account is through a manager account, this field is required and must be set to the customer ID of the manager account (10-digit number without dashes).\tstring /start_date\tStart Date\tUTC date in the format 2017-01-25. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tGoogle Ad resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-google-ads:dev config: conversion_window_days: 7 credentials: client_id: {secret_client_ID} client_secret: {secret_secret} developer_token: {access_token} refresh_token: {refresh_token} customer_id: 0123456789, 1234567890 login_customer_id: 0987654321 end_date: 2022-01-01 start_date: 2020-01-01 custom_queries: - query: SELECT campaign.id, campaign.name, campaign.status FROM campaign ORDER BY campaign.id table_name: campaigns_custom bindings: - resource: stream: campaign syncMode: incremental target: ${PREFIX}/campaign {...} ","version":"Next","tagName":"h3"},{"title":"Custom queries​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#custom-queries","content":" You can create custom resources using Google Analytics Query Language (GAQL) queries. Each generated resource will be mapped to a Flow collection. For help generating a valid query, see Google's query builder documentation. If a query fails to validate against a given Google Ads account, it will be skipped. ","version":"Next","tagName":"h2"},{"title":"Stream Limitations​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#stream-limitations","content":" ","version":"Next","tagName":"h2"},{"title":"ClickView​","type":1,"pageTitle":"Google Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/#clickview","content":" Due to Google Ads API limitations, ClickView stream queries are executed with a time range limited to one day. Also, data can only be requested for periods 90 days before the time of the request. In pratical terms, this means that you can only search ClickView data limited to 3 months ago, anything before this is not returned. For more information, check Google's Ads API documentation ","version":"Next","tagName":"h3"},{"title":"Google Drive","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Drive","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/#prerequisites","content":" To use this connector, make sure you have the following: An active Google Drive account with access credentials.Properly configured permissions for your Google Drive resources. Note: This connector is designed specifically for .csv files located in a specified Google Drive folder. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Google Drive","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/#configuration","content":" You can set up the Google Drive source connector either through the Flow web app or by editing the Flow specification file directly. For more information on setting up this connector, refer to our guide on using connectors. The values and specification sample below provide configuration details specific to the Google Drive connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Drive","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials\tJSON file containing authentication credentials for Google Drive.\tfile\tRequired ","version":"Next","tagName":"h3"},{"title":"Bindings​","type":1,"pageTitle":"Google Drive","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/#bindings","content":" Property\tTitle\tDescription\tType\tRequired/Default/file_id\tFile ID\tUnique identifier of the Google Drive file.\tstring\tRequired /path\tPath\tPath to the file or directory in Google Drive.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Drive","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-google-drive:dev config: credentials: /path/to/your/credentials.json bindings: - resource: file_id: "your_google_drive_file_id" path: "/path/in/google/drive" target: ${PREFIX}/target_name ","version":"Next","tagName":"h3"},{"title":"Google Analytics UA","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#supported-data-resources","content":" The following data resources are captured to Flow collections by default: Website overviewTraffic sourcesPagesLocationsMonthly active usersFour weekly active usersTwo weekly active usersWeekly active usersDaily active usersDevices Each resource is mapped to a Flow collection through a separate binding. You can also configure custom reports. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#prerequisites","content":" There are two ways to authenticate with Google when capturing data from a Google Analytics view: using OAuth2, and manually, by generating a service account key. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the service account key method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Google in the Flow web app​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#using-oauth2-to-authenticate-with-google-in-the-flow-web-app","content":" The View ID for your Google Analytics account. You can find this using Google's Account Explorer tool. Your Google account username and password. ","version":"Next","tagName":"h3"},{"title":"Authenticating manually with a service account key​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#authenticating-manually-with-a-service-account-key","content":" The View ID for your Google Analytics account. You can find this using Google's Account Explorer tool. Google Analytics and Google Analytics Reporting APIs enabled on your Google account. A Google service account with: A JSON key generated.Access to the source Google Analytics view. Follow the steps below to meet these prerequisites: Enable the Google Analytics and Google Analytics Reporting APIs for the Google project with which your Analytics view is associated. (Unless you actively develop with Google Cloud, you'll likely just have one option). Create a service account and generate a JSON keyDuring setup, grant the account the Viewer role on your project. You'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector. Add the service account to the Google Analytics view. Grant the account Viewer permissions (formerly known as Read & Analyze permissions). ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Analytics source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#properties","content":" Endpoint​ The following properties reflect the Service Account Key authentication method. If you're working in the Flow web app, you'll use OAuth2, so some of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials\tCredentials for the service\tobject /credentials/auth_type\tAuthentication Type\tAuthentication method. Set to Service for manual configuration, or use OAuth in the web app.\tstring\tRequired credentials/credentials_json\tService Account Credentials\tContents of the JSON key file generated during setup.\tstring\tRequired /custom_reports\tCustom Reports (Optional)\tA JSON array describing the custom reports you want to sync from GA.\tstring /start_date\tStart Date\tThe date in the format YYYY-MM-DD. Any data before this date will not be replicated.\tstring\tRequired /view_id\tView ID\tThe ID for the Google Analytics View you want to fetch data from. This can be found from the Google Analytics Account Explorer: https://ga-dev-tools.appspot.com/account-explorer/\tstring\tRequired /window_in_days\tWindow in days (Optional)\tThe amount of days each stream slice would consist of beginning from start_date. Bigger the value - faster the fetch. (Min=1, as for a Day; Max=364, as for a Year).\tinteger\t1 Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tData resource from the Google Analytics view.\tstring\tRequired /syncMode\tSync Mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Custom reports​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#custom-reports","content":" You can include data beyond the default data resources with Custom Reports. These replicate the functionality of Custom Reports in the Google Analytics Web console. To do so, fill out the Custom Reports property with a JSON array as a string with the following schema: [{"name": string, "dimensions": [string], "metrics": [string]}] You may specify default Google Analytics dimensions and metrics from the table below, or custom dimensions and metrics you've previously defined. Each custom report may contain up to 7 unique dimensions and 10 unique metrics. You must include the ga:date dimension for proper data flow. Supported GA dimensions\tSupported GA metricsga:browser\tga:14dayUsers ga:city\tga:1dayUsers ga:continent\tga:28dayUsers ga:country\tga:30dayUsers ga:date\tga:7dayUsers ga:deviceCategory\tga:avgSessionDuration ga:hostname\tga:avgTimeOnPage ga:medium\tga:bounceRate ga:metro\tga:entranceRate ga:operatingSystem\tga:entrances ga:pagePath\tga:exits ga:region\tga:newUsers ga:socialNetwork\tga:pageviews ga:source\tga:pageviewsPerSession ga:subContinent\tga:sessions ga:sessionsPerUser ga:uniquePageviews ga:users ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#sample","content":" This sample reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-google-analytics-v4:dev config: view_id: 000000000 start_date: 2022-03-01 credentials: auth_type: service credentials_json: <secret> window_in_days: 1 bindings: - resource: stream: daily_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: devices syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: four_weekly_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: locations syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: monthly_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: pages syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: traffic_sources syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: two_weekly_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: website_overview syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: weekly_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Performance considerations​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#performance-considerations","content":" ","version":"Next","tagName":"h2"},{"title":"Data sampling​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#data-sampling","content":" The Google Analytics Reporting API enforces compute thresholds for ad-hoc queries and reports. If a threshold is exceeded, the API will apply sampling to limit the number of sessions analyzed for the specified time range. These thresholds can be found here. If your account is on the Analytics 360 tier, you're less likely to run into these limitations. For Analytics Standard accounts, you can avoid sampling by keeping the window_in_days parameter set to its default value, 1. This makes it less likely that you will exceed the threshold. When sampling occurs, a warning is written to the capture log. ","version":"Next","tagName":"h3"},{"title":"Processing latency​","type":1,"pageTitle":"Google Analytics UA","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/#processing-latency","content":" Data in Google Analytics reports may continue to update up to 48 hours after it appears. To ensure data correctness, each time it reads from Google Analytics, this connector automatically applies a lookback window of 2 days prior to its last read. This allows it to double-check and correct for any changes in reports resulting from latent data updates. This mechanism relies on the isDataGolden flag in the Google Analytics Reporting API. ","version":"Next","tagName":"h3"},{"title":"Google Analytics 4","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#supported-data-resources","content":" The following data resources are supported: Daily active usersDevicesFour-weekly active usersLocationsPagesTraffic sourcesWebsite overviewWeekly active users Each is fetched as a report and mapped to a Flow collection through a separate binding. You can also capture custom reports. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#prerequisites","content":" To use this connector, you'll need: The Google Analytics Data API enabled on your Google project with which your Analytics property is associated. (Unless you actively develop with Google Cloud, you'll likely just have one option). Your Google Analytics 4 property ID. There are two ways to authenticate this connector with Google: Directly with Google using OAuth through the Flow web app. You'll only need your username and password. Manually, by generating a service account key. Using this method, there are more prerequisites. ","version":"Next","tagName":"h2"},{"title":"Authenticating manually with a service account key​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#authenticating-manually-with-a-service-account-key","content":" In addition to the above prerequisites, you'll need a Google service account with: A JSON key generated. Access to the Google Analytics 4 property. To set this up: Create a service account and generate a JSON key. During setup, grant the account the Viewer role on your project. You'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector. Add the service account to the Google Analytics property. Grant the account Viewer permissions. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing a specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Analytics 4 source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#properties","content":" Endpoint​ The following properties reflect the manual authentication method. If you authenticate directly with Google in the Flow web app, some of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials\tCredentials for the service\tobject /credentials/auth_type\tAuthentication Method\tSet to Service for manual authentication.\tstring /credentials/credentials_json\tService Account Credentials\tContents of the JSON key file generated during setup.\tstring /custom_reports\tCustom Reports (Optional)\tA JSON array describing the custom reports you want to sync from Google Analytics. Learn more about custom reports.\tstring /date_ranges_start_date\tDate Range Start Date\tThe start date. One of the values <N>daysago, yesterday, today or in the format YYYY-MM-DD.\tstring\tRequired /property_id\tProperty ID\tA Google Analytics GA4 property identifier whose events are tracked.\tstring\tRequired /window_in_days\tData request time increment in days (Optional)\tThe time increment used by the connector when requesting data from the Google Analytics API. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364. See data sampling for details.\tinteger\t1 Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tData resource from Google Analytics.\tstring\tRequired /syncMode\tSync Mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Custom reports​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#custom-reports","content":" You can include data beyond the default data resources with Custom Reports. These replicate the functionality of Custom Reports in the Google Analytics Web console. Fill out the Custom Reports property with a JSON array as a string with the following schema: [{"name": "<report-name>", "dimensions": ["<dimension-name>", ...], "metrics": ["<metric-name>", ...]}] Segments and filters are also supported. When using segments, you must include the ga:segment dimension: [{"name": "<report-name>", "dimensions": ["ga:segment", "<other-dimension-name>", ...], "metrics": ["<metric-name>", ...], "segments": "<segment-id>", "filter": "<filter-expression>"}] ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#sample","content":" This sample reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-google-analytics-data-api:dev config: credentials: auth_type: Service credentials_json: <secret> date_ranges_start_date: 2023-01-01 property_id: 000000000 window_in_days: 1 bindings: - resource: stream: daily_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: devices syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: four_weekly_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: locations syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: pages syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: traffic_sources syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: website_overview syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: weekly_active_users syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Performance considerations​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#performance-considerations","content":" ","version":"Next","tagName":"h2"},{"title":"Data sampling​","type":1,"pageTitle":"Google Analytics 4","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/#data-sampling","content":" The Google Analytics Data API enforces compute thresholds for ad-hoc queries and reports. If a threshold is exceeded, the API will apply sampling to limit the number of sessions analyzed for the specified time range. These thresholds can be found here. If your account is on the Analytics 360 tier, you're less likely to run into these limitations. For Analytics Standard accounts, you can avoid sampling by keeping the window_in_days parameter set to its default value, 1. This makes it less likely that you will exceed the threshold. ","version":"Next","tagName":"h3"},{"title":"Google Firestore","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/","content":"","keywords":"","version":"Next"},{"title":"Data model​","type":1,"pageTitle":"Google Firestore","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/#data-model","content":" Firestore is a NoSQL database. Its data model consists of documents (lightweight records that contain mappings of fields and values) organized in collections. Collections are organized hierarchically. A given document in a collection can, in turn, be associated with a subcollection. For example, you might have a collection called users, which contains two documents, alice and bob. Each document has a subcollection called messages (for example, users/alice/messages), which contain more documents (for example, users/alice/messages/1). users ├── alice │ └── messages │ ├── 1 │ └── 2 └── bob └── messages └── 1 The connector works by identifying documents associated with a particular sequence of Firestore collection names, regardless of documents that split the hierarchy. These document groupings are mapped to Flow collections using a path in the pattern collection/*/subcollection. In this example, we'd end up with users and users/*/messages Flow collections, with the latter contain messages from both users. The /_meta/path property for each document contains its full, original path, so we'd still know which messages were Alice's and which were Bob's. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Firestore","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/#prerequisites","content":" You'll need: A Google service account with: Read access to your Firestore database, via roles/datastore.viewer. You can assign this role when you create the service account, or add it to an existing service account. A generated JSON service account key for the account. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Google Firestore","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the Flow specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Firestore source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Firestore","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/googleCredentials\tCredentials\tGoogle Cloud Service Account JSON credentials.\tstring\tRequired /database\tDatabase\tOptional name of the database to capture from. Leave blank to autodetect. Typically "projects/$PROJECTID/databases/(default)".\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/backfillMode\tBackfill Mode\tConfigures the handling of data already in the collection. See below for details or just stick with 'async'\tstring\tRequired /path\tPath to Collection\tSupports parent/*/nested to capture all nested collections of parent's children\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Firestore","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-firestore:dev config: googleCredentials: "type": "service_account", "project_id": "project-id", "private_key_id": "key-id", "private_key": "-----BEGIN PRIVATE KEY-----\\nprivate-key\\n-----END PRIVATE KEY-----\\n", "client_email": "service-account-email", "client_id": "client-id", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email" bindings: - resource: #The below `path` will capture all Firestore documents that match the pattern #`orgs/<orgID>/runs/<runID>/runResults/<runResultID>/queryResults`. #See the Data Model section above for details. path: orgs/*/runs/*/runResults/*/queryResults backfillMode: async target: ${PREFIX}/orgs_runs_runResults_queryResults - resource: path: orgs/*/runs/*/runResults backfillMode: async target: ${PREFIX}/orgs_runs_runResults - resource: path: orgs/*/runs backfillMode: async target: ${PREFIX}/orgs_runs - resource: path: orgs backfillMode: async target: ${PREFIX}/orgs ","version":"Next","tagName":"h3"},{"title":"Backfill mode​","type":1,"pageTitle":"Google Firestore","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/#backfill-mode","content":" In each captured collection's binding configuration, you can choose whether and how to backfill historical data. There are three options: none: Skip preexisting data in the Firestore collection. Capture only new documents and changes to existing documents that occur after the capture is published. async: Use two threads to capture data. The first captures new documents, as with none. The second progressively ingests historical data in chunks. This mode is most reliable for Firestore collections of all sizes but provides slightly weaker guarantees against data duplication. The connector uses a reduction to reconcile changes to the same document found on the parallel threads. The version with the most recent timestamp the document metadata will be preserved ({"strategy": "maximize", "key": "/_meta/mtime"}). For most collections, this produces an accurate copy of your Firestore collections in Flow. sync: Request that Firestore stream all changes to the collection since its creation, in order. This mode provides the strongest guarantee against duplicated data, but can cause errors for large datasets. Firestore may terminate the process if the backfill of historical data has not completed within about ten minutes, forcing the capture to restart from the beginning. If this happens once it is likely to recur continuously. If left unattended for an extended time this can result in a massive number of read operations and a correspondingly large bill from Firestore. This mode should only be used when somebody can keep an eye on the backfill and shut it down if it has not completed within half an hour at most, and on relatively small collections. 100,000 documents or fewer should generally be safe, although this can vary depending on the average document size in the collection. If you're unsure which backfill mode to use, choose async. ","version":"Next","tagName":"h2"},{"title":"Google Cloud Pub/Sub","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#prerequisites","content":" To use this connector, you will need the following prerequisites: A Google Cloud Project with Pub/Sub enabledA Google Cloud Service Account with the "Pub/Sub Editor" roles in your GCP projectA Service Account Key to authenticate into your Service Account See the setup guide for more information about how to create the required resources. ","version":"Next","tagName":"h2"},{"title":"Service Account​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#service-account","content":" To sync data from Pub/Sub, you need credentials for a Service Account with the "Pub/Sub Editor" role. This role grants the necessary permissions to discover topics, create subscriptions to those topics, and read messages from the subscriptions. It is recommended to create a dedicated Service Account to facilitate permission management and auditing. However, if you already have a Service Account with the correct permissions, you can use it. Here's how to provision a suitable service account: Follow Google Cloud Platform's instructions for Creating a Service Account.Note down the ID of the service account you just created. Service Account IDs typically follow the format<account-name>@<project-name>.iam.gserviceaccount.com.Follow Google Cloud Platform's instructions for Granting IAM Rolesto the new service account. The "principal" email address should be the ID of the service account you just created, and the role granted should be "Pub/Sub Editor". ","version":"Next","tagName":"h3"},{"title":"Service Account Key​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#service-account-key","content":" Service Account Keys are used to authenticate as Google Service Accounts. To be able to utilize the permissions granted to the Service Account in the previous step, you'll need to provide its Service Account Key when creating the capture. It is a good practice, though not required, to create a new key for Flow even if you're reusing a preexisting account. To create a new key for a service account, follow Google Cloud Platform's instructions for Creating a Service Account Key. Be sure to create the key in JSON format. Once the linked instructions have been followed you should have a key file, which will need to be uploaded to Flow when setting up your capture. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. Seeconnectors to learn more about using connectors. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/projectId\tProject ID\tGoogle Cloud Project ID that contains the PubSub topics.\tstring\tRequired /credentialsJson\tService Account JSON\tGoogle Cloud Service Account JSON credentials to use for authentication.\tstring\tRequired /subscriptionPrefix\tSubscription Prefix\tPrefix to prepend to the PubSub topics subscription names.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/topic\tTopic\tName of the PubSub topic to subscribe to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"At-Least-Once Message Capture​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#at-least-once-message-capture","content":" Received messages are acknowledged to Pub/Sub after they have been durably committed to your Flow collection. After Pub/Sub receives acknowledgement of messages, it will not attempt to re-deliver messages to subscribers if subscriptions are created with "exactly-once delivery", which this connector does set when it creates subscriptions. Occasionally messages will be captured to your Flow collection more than once if the connector is restarted after it has durably committed the document to the collection but before it has acknowledged the message to Pub/Sub. In this way the committing of the message to your Flow collection is considered a "side effect" of processing the message, and Pub/Sub does not provide guarantees around exactly-once side effects. If you materialize the collections using standard updates, duplicate documents will automatically be de-duplicated in the destination based on the ID of the documents. Materializations that use delta updates need to consider the potential for more than one document with the same ID. ","version":"Next","tagName":"h3"},{"title":"Message Format​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/#message-format","content":" Currently only messages with data in JSON format can be processed. Data in other formats will cause errors with the capture connector. Support for other formats is planned - reach out to support@estuary.dev if your use case requires processing data in a different format. ","version":"Next","tagName":"h3"},{"title":"Google Search Console","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#supported-data-resources","content":" The following data resources are supported: Search analytics: all fields This resource contains all data in for your search analytics, and can be large. The following five collections come from queries applied to this dataset. Search analytics by countrySearch analytics by dateSearch analytics by deviceSearch analytics by pageSearch analytics by querySitemapsSites By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Custom reports​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#custom-reports","content":" In addition to the resources listed above, you can add custom reports created with the Google Analytics Search Console integration. You add these to the endpoint configuration in the format {"name": "<report-name>", "dimensions": ["<dimension-name>", ...]}. Each report is mapped to an additional Flow collection. caution Custom reports involve an integration with Google Universal Analytics, which Google will deprecate in July 2023. ","version":"Next","tagName":"h3"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#prerequisites","content":" There are two ways to authenticate with Google when capturing data from Google Search Console: using OAuth2, and manually, by generating a service account key. Their prerequisites differ. OAuth2 is recommended for simplicity in the Flow web app; the service account key method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Google in the Flow web app​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#using-oauth2-to-authenticate-with-google-in-the-flow-web-app","content":" You'll need: Google credentials with Owner access on the Google Search Console property. This can be a user account or a service account. You'll use these credentials to log in to Google in the Flow web app. ","version":"Next","tagName":"h3"},{"title":"Authenticating manually with a service account key​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#authenticating-manually-with-a-service-account-key","content":" You'll need: A Google service account with: A JSON key generated.Access to the Google Search Console view through the API. Follow the steps below to meet these prerequisites: Create a service account and generate a JSON keyYou'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector. Set up domain-wide delegation for the service account. During this process, grant the https://www.googleapis.com/auth/webmasters.readonly OAuth scope. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Search Console source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tAuthentication object\tRequired /credentials/auth_type\tAuthentication Type\tSet to Service for manual authentication\tstring\tRequired /credentials/service_account_info\tService Account JSON Key\tThe JSON key of the service account to use for authorization.\tRequired /credentials/email\tAdmin Email\tThe email of your Google Workspace administrator. This is likely the account used during setup. /custom_reports\tCustom Reports (Optional)\tA JSON array describing the custom reports you want to sync from Google Search Console.\tstring /end_date\tEnd Date\tUTC date in the format 2017-01-25. Any data after this date will not be replicated. Must be greater or equal to the start date field.\tstring /site_urls\tWebsite URL\tThe URLs of the website properties attached to your GSC account.\tarray\tRequired /start_date\tStart Date\tUTC date in the format 2017-01-25. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tGoogle Search Consol resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Search Console","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-google-search-console:dev config: credentials: auth_type: Service service_account_info: <secret> email: admin@yourdomain.com site_urls: https://yourdomain.com start_date: 2022-03-01 bindings: - resource: stream: sites syncMode: full_refresh target: ${PREFIX}/sites {} ","version":"Next","tagName":"h3"},{"title":"Google Sheets","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#prerequisites","content":" There are two ways to authenticate with Google when capturing data from a Sheet: using OAuth2, and manually,by generating a service account key. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the service account key method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Google in the Flow web app​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#using-oauth2-to-authenticate-with-google-in-the-flow-web-app","content":" A link to a Google spreadsheet. Simply copy the link from your browser. Your Google account username and password. ","version":"Next","tagName":"h3"},{"title":"Spreadsheet Formatting​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#spreadsheet-formatting","content":" For a more efficient usage, the connector expects a few basic formatting rules inside each spreadsheet: The first row must be frozen and contain header names for each column. If the first row is not frozen or does not contain header names, header names will be set using high-case alphabet letters (A,B,C,D...Z). Sheet is not a image sheet or contains images.Sheet is not empty. If a Sheet is empty, the connector will not break and wait for changes inside the Sheet. When new data arrives, you will be prompted by flow to allow for schema changes. Sheet does not contain formulaValue inside any cell. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#configuring-the-connector-specification-manually","content":" A link to a Google spreadsheet. Simply copy the link from your browser. Google Sheets and Google Drive APIs enabled on your Google account. A Google service account with: A JSON key generated.Access to the source spreadsheet. Follow the steps below to meet these prerequisites: Enable the Google Sheets and Google Drive APIs for the Google project with which your spreadsheet is associated. (Unless you actively develop with Google Cloud, you'll likely just have one option). Create a service account and generate a JSON key. During setup, grant the account the Viewer role on your project. You'll copy the contents of the downloaded key file into the Service Account Credentials parameter when you configure the connector. Share your Google spreadsheet with the service account. You may either share the sheet so that anyone with the link can view it, or share explicitly with the service account's email address. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Google Sheets source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#properties","content":" Endpoint​ The following properties reflect the Service Account Key authentication method. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials\tGoogle API Credentials for connecting to Google Sheets and Google Drive APIs\tobject\tRequired /credentials/auth_type\tAuthentication Type\tAuthentication method. Set to Service.\tstring\tRequired credentials/service_account_info\tService Account Credentials\tContents of the JSON key file generated during setup.\tstring\tRequired /spreadsheet_id\tSpreadsheet Link\tThe link to your spreadsheet.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tSheet\tEach sheet in your Google Sheets document.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to full_refresh.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-google-sheets:dev config: credentials: auth_type: Service service_account_info: <secret> spreadsheet_id: https://docs.google.com/spreadsheets/... bindings: - resource: stream: Sheet1 syncMode: full_refresh target: ${PREFIX}/${COLLECTION_NAME} Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Greenhouse","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Greenhouse","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/#supported-data-resources","content":" The following data resources are supported through the Greenhouse APIs: Activity FeedApplicationsApplications InterviewsApprovalsCandidatesClose ReasonsCustom FieldsDegreesDepartmentsDisciplinesEEOCEmail TemplatesInterviewsJob PostsJob StagesJobsJob OpeningsJobs StagesOffersOfficesProspect PoolsRejection ReasonsSchoolsScorecardsSourcesTagsUsersUser PermissionsUser Roles By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Greenhouse","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/#prerequisites","content":" To set up the Greenhouse source connector, you'll need the Harvest API key with permissions to the resources Estuary Flow should be able to access. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Greenhouse","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Greenhouse source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Greenhouse","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/apikey\tAPI Key\tThe value of the Greenhouse API Key generated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Greenhouse project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Greenhouse","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-greenhouse:dev config: apikey: <secret> bindings: - resource: stream: applications syncMode: full_refresh target: ${PREFIX}/applications {...} ","version":"Next","tagName":"h3"},{"title":"Harvest","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Harvest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/#supported-data-resources","content":" The following data resources are supported through the Harvest APIs: Client ContactsClientsCompanyInvoice MessagesInvoice PaymentsInvoicesInvoice Item CategoriesEstimate MessagesEstimatesEstimate Item CategoriesExpensesExpense CategoriesTasksTime EntriesProject User AssignmentsProject Task AssignmentsProjectsRolesUser Billable RatesUser Cost RatesUser Project AssignmentsExpense ReportsUninvoiced ReportTime ReportsProject Budget ReportBy default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Harvest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/#prerequisites","content":" To set up the Harvest source connector, you'll need the Harvest Account ID and API key. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Harvest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Harvest source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Harvest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/account_id\tAccount ID\tHarvest account ID. Required for all Harvest requests in pair with Personal Access Token.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired /end_date\tEnd Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tDefault Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Harvest project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Harvest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-harvest:dev config: account_id: <account id> start_date: 2017-01-25T00:00:00Z end_date: 2020-01-25T00:00:00Z bindings: - resource: stream: clients syncMode: incremental target: ${PREFIX}/clients {...} ","version":"Next","tagName":"h3"},{"title":"HTTP File","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/","content":"","keywords":"","version":"Next"},{"title":"Supported data types​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#supported-data-types","content":" This connector automatically captures the data hosted at the specified URL into a single Flow collection. The following file types are supported: AvroCSVJSONProtobufW3C Extended Log The following compression methods are supported: ZIPGZIPZSTD By default, Flow automatically detects the file type and compression method. If necessary, you can specify the correct file type, compression, and other properties (CSV only) using the optional parser configuration. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#prerequisites","content":" To use this connector, you'll need the URL to an HTTP endpoint that hosts data of one of the supported types. The HTTP endpoint must support HEAD HTTP requests, and the response to this request must include a Last-Modified header. tip You can send a test HEAD request using Curl with the -I parameter, for example:curl -I https://my-site.com/my_hosted_dataset.json.zipUse this online tool to easily do so in your browser. Some HTTP endpoints require credentials for access. If this is the case, have your username and password ready. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the HTTP file source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials\tUser credentials, if required to access the data at the HTTP URL.\tobject /credentials/password\tPassword\tPassword, if required to access the HTTP endpoint.\tstring /credentials/user\tUser\tUsername, if required to access the HTTP endpoint.\tstring /headers\tHeaders object /headers/items\tAdditional HTTP Headers\tAdditional HTTP headers when requesting the file. These are uncommon.\tarray /headers/items/-/key\tHeader Key string /headers/items/-/value\tHeader Value string /parser\tParser Configuration\tConfigures how files are parsed\tobject /parser/compression\tCompression\tDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.\tnull, string\tnull /parser/format\tFormat\tDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.\tobject\t{"type":"auto"} /parser/format/type\tType string /url\tHTTP File URL\tA valid HTTP url for downloading the source file.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tName of the dataset\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-http-file:dev config: url: https://my-site.com/my_hosted_dataset.json.zip parser: compression: zip format: type: csv config: delimiter: "," encoding: UTF-8 errorThreshold: 5 headers: [ID, username, first_name, last_name] lineEnding: "\\\\r" quote: "\\"" bindings: - resource: stream: my_hosted_dataset.json.zip target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Advanced: Parsing HTTP-hosted data​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#advanced-parsing-http-hosted-data","content":" HTTP endpoints can support a variety of file types. For each file type, Flow must parse and translate data into collections with defined fields and JSON schemas. By default, the parser will automatically detect the type and shape of the data at the HTTP endpoint, so you won't need to change the parser configuration for most captures. However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector. The parser configuration includes: Compression: Specify how the data is compressed. If no compression type is specified, the connector will try to determine the compression type automatically. Options are: zipgzipzstdnone Format: Specify the data format, which determines how it will be parsed. If no file type is specified, the connector will try to determine the file type automatically Options are: AvroCSVJSONProtobufW3C Extended Log CSV configuration​ CSV files include several additional properties that are important to the parser. In most cases, Flow is able to automatically determine the correct values, but you may need to specify for unusual datasets. These properties are: Delimiter. Options are: Comma (",")Pipe ("|")Space ("0x20")Semicolon (";")Tab ("0x09")Vertical tab ("0x0B")Unit separator ("0x1F")SOH ("0x01")Auto Encoding type, specified by its WHATWG label. Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture. Escape characters. Options are: Backslash ("\\\\")Disable escapes ("")Auto Optionally, a list of column Headers, if not already included in the first row of the CSV file. If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file. Line ending values CRLF ("\\\\r\\\\n") (Windows)CR ("\\\\r")LF ("\\\\n")Record Separator ("0x1E")Auto Quote character Double Quote ("\\"")Single Quote (")Disable Quoting ("")Auto The sample specification above includes these fields. ","version":"Next","tagName":"h3"},{"title":"Advanced: Using HTTP headers​","type":1,"pageTitle":"HTTP File","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/#advanced-using-http-headers","content":" For data accessed through certain APIs, you may need to send headers as part of your HTTP request. This is uncommon, and is supported by the optional Headers configuration. This configuration section is encrypted with sops, so you can safely include secretes such as API keys. See the source data's API documentation for headers that may be required for your capture. ","version":"Next","tagName":"h3"},{"title":"HubSpot ( Real-Time )","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/","content":"","keywords":"","version":"Next"},{"title":"Supported HubSpot Resources​","type":1,"pageTitle":"HubSpot ( Real-Time )","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/#supported-hubspot-resources","content":" The connector automatically discovers bindings for the following HubSpot resources: CompaniesContactsCustom ObjectsDealsEngagementsEmail EventsPropertiesTickets Updates for Email Events and Custom Objects may be delayed by up to 5 minutes due to eventual consistency of the HubSpot API. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"HubSpot ( Real-Time )","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/#prerequisites","content":" There are two ways to authenticate with HubSpot when capturing data: using OAuth2, or with a private app access token. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with HubSpot in the Flow web app​","type":1,"pageTitle":"HubSpot ( Real-Time )","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/#using-oauth2-to-authenticate-with-hubspot-in-the-flow-web-app","content":" A HubSpot account ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"HubSpot ( Real-Time )","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/#configuring-the-connector-specification-manually","content":" A HubSpot account The access token for an appropriately configured private app on the Hubspot account. Setup​ To create a private app in HubSpot and generate its access token, do the following. Ensure that your HubSpot user account has super admin privileges. In HubSpot, create a new private app. Name the app "Estuary Flow," or choose another name that is memorable to you. Grant the new app Read access for all available scopes. Copy the access token for use in the connector configuration. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"HubSpot ( Real-Time )","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the HubSpot Real-Time connector. Endpoint​ The following properties reflect the access token authentication method. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tPrivate Application\tAuthenticate with a private app access token\tobject\tRequired /credentials/access_token\tAccess Token\tHubSpot Access token.\tstring\tRequired /credentials/credentials_title\tCredentials\tName of the credentials set\tstring\tRequired, "Private App Credentials" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tData resource\tName of the data resource.\tstring\tRequired /interval\tInterval\tInterval between data syncs\tstring\t ","version":"Next","tagName":"h2"},{"title":"Sample​","type":1,"pageTitle":"HubSpot ( Real-Time )","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-hubspot-native:dev config: credentials_title: Private App Credentials access_token: <secret> bindings: - resource: name: companies target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Hubspot","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#supported-data-resources","content":" By default, each resource associated with your Hubspot account is mapped to a Flow collection through a separate binding. The following data resources are supported for all subscription levels: CampaignsCompaniesContact ListsContactsContacts List MembershipsDeal PipelinesDealsEmail EventsEngagementsEngagements CallsEngagements EmailsEngagements MeetingsEngagements NotesEngagements TasksFormsForm SubmissionsLine ItemsOwnersProductsProperty HistoryQuotesSubscription ChangesTicketsTicket Pipelines The following data resources are supported for pro accounts (set Subscription type to pro in the configuration): Feedback SubmissionsMarketing EmailsWorkflows ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#prerequisites","content":" There are two ways to authenticate with Hubspot when capturing data: using OAuth2 or with a private app access token. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the access token method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Hubspot in the Flow web app​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#using-oauth2-to-authenticate-with-hubspot-in-the-flow-web-app","content":" A Hubspot account ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#configuring-the-connector-specification-manually","content":" A Hubspot account The access token for an appropriately configured private app on the Hubspot account. Setup​ To create a private app in Hubspot and generate its access token, do the following. Ensure that your Hubspot user account has super admin privileges. In Hubspot, create a new private app. Name the app "Estuary Flow," or choose another name that is memorable to you. Grant the new app Read access for all available scopes. Copy the access token for use in the connector configuration. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Hubspot source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#properties","content":" Endpoint​ The following properties reflect the access token authentication method. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tPrivate Application\tAuthenticate with a private app access token\tobject\tRequired /credentials/access_token\tAccess Token\tHubSpot Access token.\tstring\tRequired /credentials/credentials_title\tCredentials\tName of the credentials set\tstring\tRequired, "Private App Credentials" /start_date\tStart Date\tUTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired /subscription_type\tYour HubSpot account subscription type\tSome streams are only available to certain subscription packages, we use this information to select which streams to pull data from.\tstring\t"starter" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tData resource\tName of the data resource.\tstring\tRequired /syncMode\tSync Mode\tConnection method\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Hubspot","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-hubspot:dev config: credentials: credentials_title: Private App Credentials access_token: <secret> bindings: - resource: stream: companies syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your configuration will have many more bindings representing all supported resourcesin your Hubspot account. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"HTTP Ingest (Webhook)","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/","content":"","keywords":"","version":"Next"},{"title":"Usage​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#usage","content":" This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific system or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source. This is useful primarily if you want to test out Flow or see how your webhook data will come over. To begin, use the web app to create a capture. Once published, the confirmation dialog displays a unique URL for your public endpoint. By default, this will accept webhook requests at https://<your-public-endpoint>/webhook-data, but you can customize the path, or even capture from multiple URL paths if you like. You're now ready to send data to Flow. ","version":"Next","tagName":"h2"},{"title":"Send sample data to Flow​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#send-sample-data-to-flow","content":" After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture. Expand POST or PUT and click Try it out to send some example JSON documents using the UI. You can also copy the provided curl commands to send data via the command line. After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture. Click Details to view the data preview. ","version":"Next","tagName":"h3"},{"title":"Webhook URLs​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#webhook-urls","content":" To configure a webhook in another service, such as Github, Shopify, or Segment, you'll need to paste a webhook URL into the configuration of their service. To determine the full URL, start with the base URL from the Flow web app (for example https://abc123-8080.us-central1.v1.estuary-data.dev), and then append the path. The path will be whatever is in the paths endpoint configuration field (/webhook-data by default). For example, your full webhook URL would be https://<your-unique-hostname>/webhook-data. You can add additional paths to paths, and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you're editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to /my-webhook.json, then the full URL for that binding would be https://<your-unique-hostname>/my-webhook.json. Any URL query parameters that are sent on the request will be captured and serialized under /_meta/query/* the in documents. For example, a webhook request that's sent to /webhook-data?testKey=testValue would result in a document like: { "_meta": { "webhookId": "...", "query": { "testKey": "testValue" }, ... } ... } ","version":"Next","tagName":"h3"},{"title":"Webhook IDs​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#webhook-ids","content":" Webhook delivery is typically "at least once". This means that webhooks from common services such as Github, Segment, Shopify, etc. may sometimes be sent multiple times. In order to prevent problems due to duplicate processing of webhooks, these services typically provide either an HTTP header or a field within each document that serves as a unique ID for each webhook event. This can be used to deduplicate the events in your webhook-data collection. The key of the discovered webhook-data collection is /_meta/webhookId. By default, this value is generated automatically by the connector, and no-deduplication will be performed. You can set the idFromHeader option in the resource configuration to have the connector automatically assign the value of the given HTTP header to the /_meta/webhookId property. Doing so means that a materialization of the webhook-data collection will automatically deduplicate the webhook events. Here's a table with some common webhook services and headers that they use: Service\tValue to use for idFromHeaderGithub\tX-Github-Event Shopify\tX-Shopify-Webhook-Id Zendesk\tx-zendesk-webhook-id Jira\tX-Atlassian-Webhook-Identifier ","version":"Next","tagName":"h3"},{"title":"Custom collection IDs​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#custom-collection-ids","content":" Some webhooks don't pass a deduplication ID as part of the HTTP headers. That's fine, and you can still easily deduplicate the events. To do so, you'll just need to customize the schema and key of your webhook-data collection, or bind the webhook to an existing collection that already has the correct schema and key. Just set the key to the field(s) within the webhook payload that uniquely identify the event. For example, to capture webhooks from Segment, you'll want to set the key to ["/messageId"], and ensure that the schema requires that property to exist and be a string. ","version":"Next","tagName":"h3"},{"title":"Authentication​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#authentication","content":" The connector can optionally require each request to present an authentication token as part of an Authorization: Bearer HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an Authorization header with the value of your token. For example, if you use an auth token value of mySecretToken, then the header on each request must be Authorization: Bearer mySecretToken. If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection. We recommend using authentication whenever possible. ","version":"Next","tagName":"h3"},{"title":"Webhook signature verification​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#webhook-signature-verification","content":" This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact support@estuary.dev and let us know. ","version":"Next","tagName":"h3"},{"title":"Endpoint Configuration​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#endpoint-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tEndpointConfig object\tRequired /require_auth_token\tAuthentication token\tOptional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections.\tnull, string\tnull /paths\tURL Paths\tList of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.\tnull, string\tnull List of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment. ","version":"Next","tagName":"h2"},{"title":"Resource configuration​","type":1,"pageTitle":"HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/#resource-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tResourceConfig object\tRequired /idFromHeader Set the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`.\tnull, string /path The URL path to use for adding documents to this binding. Defaults to the name of the collection.\tnull, string /stream The name of the binding, which is used as a merge key when doing Discovers.\tnull, string\t ","version":"Next","tagName":"h2"},{"title":"Instagram","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Instagram","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/#supported-data-resources","content":" The following data resources are supported through the Instagram APIs: For more information, see the Instagram Graph API and Instagram Insights API documentation. UserUser InsightsMediaMedia InsightsStoriesStory Insights By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Instagram","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/#prerequisites","content":" Meta for Developers accountInstagram business account to your Facebook pageInstagram Graph API to your Facebook appFacebook OAuth ReferenceFacebook ad account ID number ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Instagram","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Instagram source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Instagram","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/client_id\tClient ID\tThe Client ID of your Instagram developer application.\tstring\tRequired /client_secret\tClient Secret\tThe Client Secret of your Instagram developer application.\tstring\tRequired /access_token\tAccess Token\tThe value of the access token generated with instagram_basic, instagram_manage_insights, pages_show_list, pages_read_engagement, Instagram Public Content Access permissions.\tstring\tRequired /start_date\tReplication Start Date\tUTC date and time in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Instagram project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Instagram","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-instagram:dev config: client_id: <your client ID> client_secret: <secret> access_token: <secret> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: stories syncMode: full_refresh target: ${PREFIX}/stories {...} ","version":"Next","tagName":"h3"},{"title":"Intercom HTTP Ingest (Webhook)","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/","content":"","keywords":"","version":"Next"},{"title":"Usage​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#usage","content":" This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific system or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source. This is useful primarily if you want to test out Flow or see how your webhook data will come over. To begin, use the web app to create a capture. Once published, the confirmation dialog displays a unique URL for your public endpoint. You're now ready to send data to Flow. ","version":"Next","tagName":"h2"},{"title":"Send sample data to Flow​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#send-sample-data-to-flow","content":" After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture. Expand POST or PUT and click Try it out to send some example JSON documents using the UI. You can also copy the provided curl commands to send data via the command line. After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture. Click Details to view the data preview. ","version":"Next","tagName":"h3"},{"title":"Configure a Intercom webhook​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#configure-a-intercom-webhook","content":" Navigate to your App in your Developer Hub and select the Webhooks from the configuration options Under Endpoint URL enter in the unique URL generated for your Estuary Webhook endpoint in the format https://<your-webhook-url>/webhook-data Configure the Topics section to trigger on your preferred webhook events and click save. Optionally, you can select Send a test request to preview how the data would be ingested into Estuary. ","version":"Next","tagName":"h3"},{"title":"Webhook URLs​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#webhook-urls","content":" To determine the full URL, start with the base URL from the Flow web app (for example https://abc123-8080.us-central1.v1.estuary-data.dev), and then append the path. The path will be whatever is in the paths endpoint configuration field (/webhook-data by default). For example, your full webhook URL would be https://<your-unique-hostname>/webhook-data. You can add additional paths to paths, and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you're editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to /my-webhook.json, then the full URL for that binding would be https://<your-unique-hostname>/my-webhook.json. Any URL query parameters that are sent on the request will be captured and serialized under /_meta/query/* the in documents. For example, a webhook request that's sent to /webhook-data?testKey=testValue would result in a document like: { "_meta": { "webhookId": "...", "query": { "testKey": "testValue" }, ... } ... } ","version":"Next","tagName":"h3"},{"title":"Authentication​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#authentication","content":" The connector can optionally require each request to present an authentication token as part of an Authorization: Bearer HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an Authorization header with the value of your token. For example, if you use an auth token value of mySecretToken, then the header on each request must be Authorization: Bearer mySecretToken. If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection. We recommend using authentication whenever possible. ","version":"Next","tagName":"h3"},{"title":"Webhook signature verification​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#webhook-signature-verification","content":" This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact support@estuary.dev and let us know. ","version":"Next","tagName":"h3"},{"title":"Endpoint Configuration​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#endpoint-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tEndpointConfig object\tRequired /require_auth_token Optional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections.\tnull, string\tnull /paths\tURL Paths\tList of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.\tnull, string\tnull ","version":"Next","tagName":"h2"},{"title":"Resource configuration​","type":1,"pageTitle":"Intercom HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/#resource-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tResourceConfig object\tRequired /idFromHeader Set the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`.\tnull, string /path The URL path to use for adding documents to this binding. Defaults to the name of the collection.\tnull, string\t ","version":"Next","tagName":"h2"},{"title":"Intercom","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Intercom","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/#supported-data-resources","content":" The following data resources are supported through the Intercom API: AdminsCompaniesCompany attributesCompany segmentsContactsContact attributesConversationsConversation partsSegmentsTagsTeams By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Intercom","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/#prerequisites","content":" There are two ways to authenticate with Intercom: In the Flow web app, you sign in directly. You'll need the username and password associated with a user with full permissions on your Intercom workspace. Using the flowctl CLI, you configure authentication manually. You'll need the access token for you Intercom account. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Intercom","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Intercom source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Intercom","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/#properties","content":" Endpoint​ The properties in the table below reflect manual authentication using the CLI. In the Flow web app, you'll sign in directly and won't need the access token. Property\tTitle\tDescription\tType\tRequired/Default/access_token\tAccess token\tAccess token for making authenticated requests.\tstring\tRequired /start_date\tStart date\tUTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource from Intercom from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Intercom","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/#sample","content":" The sample below reflects manual authentication in the CLI. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-intercom:dev config: access_token: <secret> start_date: 2022-06-18T00:00:00Z bindings: - resource: stream: admins syncMode: full_refresh target: ${PREFIX}/admins - resource: stream: companies syncMode: incremental target: ${PREFIX}/companies - resource: stream: company_segments syncMode: incremental target: ${PREFIX}/companysegments - resource: stream: conversations syncMode: incremental target: ${PREFIX}/conversations - resource: stream: conversation_parts syncMode: incremental target: ${PREFIX}/conversationparts - resource: stream: contacts syncMode: incremental target: ${PREFIX}/contacts - resource: stream: company_attributes syncMode: full_refresh target: ${PREFIX}/companyattributes - resource: stream: contact_attributes syncMode: full_refresh target: ${PREFIX}/contactattributes - resource: stream: segments syncMode: incremental target: ${PREFIX}/segments - resource: stream: tags syncMode: full_refresh target: ${PREFIX}/tags - resource: stream: teams syncMode: full_refresh target: ${PREFIX}/teams ","version":"Next","tagName":"h3"},{"title":"Jira HTTP Ingest (Webhook)","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/","content":"","keywords":"","version":"Next"},{"title":"Usage​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#usage","content":" This connector is distinct from all other capture connectors in that it's not designed to pull data from a specific system or endpoint. It requires no endpoint-specific configuration, and can accept any and all valid JSON objects from any source. This is useful primarily if you want to test out Flow or see how your webhook data will come over. To begin, use the web app to create a capture. Once published, the confirmation dialog displays a unique URL for your public endpoint. You're now ready to send data to Flow. ","version":"Next","tagName":"h2"},{"title":"Send sample data to Flow​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#send-sample-data-to-flow","content":" After publishing the capture, click the endpoint link from the confirmation dialog to open the Swagger UI page for your capture. Expand POST or PUT and click Try it out to send some example JSON documents using the UI. You can also copy the provided curl commands to send data via the command line. After sending data, go to the Collections page of the Flow web app and find the collection associated with your capture. Click Details to view the data preview. ","version":"Next","tagName":"h3"},{"title":"Configure a Jira webhook​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#configure-a-jira-webhook","content":" In the Jira Administration console press the . key to bring up Jira's search. Search for Webhooks. Click on a Create a WebHook and in the url section input the url that was generated after publishing a capture in Flow. See the Webhook URLs section below for more information on the structure of your URL. Review Jira's documentation on configuring a webhook for more information. ","version":"Next","tagName":"h3"},{"title":"Webhook URLs​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#webhook-urls","content":" To determine the full URL, start with the base URL from the Flow web app (for example https://abc123-8080.us-central1.v1.estuary-data.dev), and then append the path. The path will be whatever is in the paths endpoint configuration field (/webhook-data by default). For example, your full webhook URL would be https://<your-unique-hostname>/webhook-data. You can add additional paths to paths, and the connector will accept webhook requests on each of them. Each path will correspond to a separate binding. If you're editing the capture via the UI, click the "re-fresh" button after editing the URL paths in the endpoint config to see the resulting collections in the bindings editor. For example, if you set the path to /my-webhook.json, then the full URL for that binding would be https://<your-unique-hostname>/my-webhook.json. Any URL query parameters that are sent on the request will be captured and serialized under /_meta/query/* the in documents. For example, a webhook request that's sent to /webhook-data?testKey=testValue would result in a document like: { "_meta": { "webhookId": "...", "query": { "testKey": "testValue" }, ... } ... } ","version":"Next","tagName":"h3"},{"title":"Authentication​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#authentication","content":" The connector can optionally require each request to present an authentication token as part of an Authorization: Bearer HTTP header. To enable authentication, generate a secret and paste it into the "Require Auth Token" field. We recommend using a password manager to generate these values, but keep in mind that not all systems will be able to send values with certain special characters, so you may want to disable special characters when you generate the secret. If you enable authentication, then each incoming request must have an Authorization header with the value of your token. For example, if you use an auth token value of mySecretToken, then the header on each request must be Authorization: Bearer mySecretToken. If you don't enable authentication, then anyone who knows the URL will be able to publish data to your collection. We recommend using authentication whenever possible. ","version":"Next","tagName":"h3"},{"title":"Webhook signature verification​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#webhook-signature-verification","content":" This connector does not yet support webhook signature verification. If this is a requirement for your use case, please contact support@estuary.dev and let us know. ","version":"Next","tagName":"h3"},{"title":"Endpoint Configuration​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#endpoint-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tEndpointConfig object\tRequired /require_auth_token Optional bearer token to authenticate webhook requests. WARNING: If this is empty or unset, then anyone who knows the URL of the connector will be able to write data to your collections.\tnull, string\tnull /paths\tURL Paths\tList of URL paths to accept requests at. Discovery will return a separate collection for each given path. Paths must be provided without any percent encoding, and should not include any query parameters or fragment.\tnull, string\tnull ","version":"Next","tagName":"h2"},{"title":"Resource configuration​","type":1,"pageTitle":"Jira HTTP Ingest (Webhook)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/#resource-configuration","content":" Property\tTitle\tDescription\tType\tRequired/Default****\tResourceConfig object\tRequired /idFromHeader Set the /_meta/webhookId from the given HTTP header in each request. If not set, then a random id will be generated automatically. If set, then each request will be required to have the header, and the header value will be used as the value of `/_meta/webhookId`.\tnull, string /path The URL path to use for adding documents to this binding. Defaults to the name of the collection.\tnull, string /stream The name of the binding, which is used as a merge key when doing Discovers.\tnull, string\t ","version":"Next","tagName":"h2"},{"title":"Iterable","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Iterable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/#supported-data-resources","content":" The following data resources are supported through the Iterable APIs: CampaignsCampaign MetricsChannelsEmail BounceEmail ClickEmail ComplaintEmail OpenEmail SendEmail Send SkipEmail SubscribeEmail UnsubscribeEventsListsList UsersMessage TypesMetadataTemplatesUsersPushSendPushSendSkipPushOpenPushUninstallPushBounceWebPushSendWebPushClickWebPushSendSkipInAppSendInAppOpenInAppClickInAppCloseInAppDeleteInAppDeliveryInAppSendSkipInboxSessionInboxMessageImpressionSmsSendSmsBounceSmsClickSmsReceivedSmsSendSkipSmsUsageInfoPurchaseCustomEventHostedUnsubscribeClick By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Iterable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/#prerequisites","content":" To set up the Iterable source connector, you'll need the Iterable Server-side API Key with standard permissions. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Iterable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Iterable source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Iterable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/apikey\tAPI Key\tThe value of the Iterable API Key generated.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Iterable project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Iterable","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-iterable:dev config: apikey: <secret> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: purchase syncMode: full_refresh target: ${PREFIX}/purchase {...} ","version":"Next","tagName":"h3"},{"title":"Klaviyo","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Klaviyo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/#supported-data-resources","content":" This connector can be used to sync the following tables from Klaviyo: CampaignsEventsGlobalExclusionsListsMetricsFlowsProfiles By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Klaviyo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/#prerequisites","content":" To set up the Klaviyo source connector, you'll need the Klaviyo Private API key. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Klaviyo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Klaviyo source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Klaviyo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_key\tAPI Key\tThe value of the Klaviyo API Key generated.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Klaviyo project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Klaviyo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-klaviyo:dev config: api_key: <secret> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: lists syncMode: full_refresh target: ${PREFIX}/lists {...} ","version":"Next","tagName":"h3"},{"title":"Jira","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Jira","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/#supported-data-resources","content":" The following data resources are supported through the Jira APIs: Application rolesAvatarsBoardsDashboardsFiltersFilter sharingGroupsIssue fieldsIssue field configurationsIssue custom field contextsIssue link typesIssue navigator settingsIssue notification schemesIssue prioritiesIssue propertiesIssue remote linksIssue resolutionsIssue security schemesIssue type schemesIssue type screen schemesIssue votesIssue watchersJira settingsLabelsPermissionsPermission schemesProjectsProject avatarsProject categoriesProject componentsProject emailProject permission schemesProject typesProject versionsScreensScreen tabsScreen tab fieldsScreen schemesSprintsTime trackingUsersUsersGroupsDetailedWorkflowsWorkflow schemesWorkflow statusesWorkflow status categoriesBoard issuesIssue commentsIssue worklogsIssuesSprint issuesBy default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Jira","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/#prerequisites","content":" API Token: You can create an API token following these steps from JiraDomainEmail ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Jira","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Jira source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Jira","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_token\tAPI Token\tJira API Token is used for Authorization to your account by BasicAuth.\tstring\tRequired /domain\tDomain\tThe Domain for your Jira account, e.g. estuary.atlassian.net, estuary.jira.com, jira.your-domain.com\tstring\tRequired /email\tEmail\tThe user email for your Jira account which you used to generate the API token. This field is used for Authorization to your account by BasicAuth.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Jira project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Jira","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-jira:dev config: api_token: <token> domain: <domain> email: <email> bindings: - resource: stream: issues syncMode: incremental target: ${PREFIX}/issues {...} ","version":"Next","tagName":"h3"},{"title":"LinkedIn Ads","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#supported-data-resources","content":" The following data resources are supported: AccountsAccount usersCampaign groupsCampaignsCreativesAdDirectSponsoredContents (Video ads)Ad analytics by campaignAd analytics by creative By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#prerequisites","content":" There are two ways to authenticate with LinkedIn when capturing data into Flow: using OAuth2, and manually, by creating a developer application. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the developer application method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with LinkedIn in the Flow web app​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#using-oauth2-to-authenticate-with-linkedin-in-the-flow-web-app","content":" One or more LinkedIn Ad Accounts with active campaigns. A LinkedIn user with access to the Ad Accounts from which you want to capture data. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#configuring-the-connector-specification-manually","content":" To configure without using OAuth, you'll need to create an application using the LinkedIn Marketing API, and generate its access token. Setup​ Create a marketing application on LinkedIn Developers.Apply to the LinkedIn Developer Program.Generate your access token. caution LinkedIn access tokens expire in 60 days. You must manually update your capture configuration to continue to capture data from LinkedIn. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the capture specification. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the LinkedIn Ads source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so some of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/account_ids\tAccount IDs (Optional)\tA space-separated list of the account IDs from which to capture data. Leave empty if you want to capture data from all linked accounts.\tarray\t[] /credentials\tAuthentication object /credentials/auth_method\tAuthentication method\tSet to access_token to authenticate manually.\tstring /credentials/access_token\tAccess token\tAccess token generated from your LinkedIn Developers app.\tstring /start_date\tStart date\tUTC date in the format 2020-09-17. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tLinkedIn Ads stream from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"LinkedIn Ads","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-linkedin-ads:dev config: account_ids: - 000000000 - 111111111 credentials: auth_method: access_token access_token: {secret} start_date: 2022-01-01 bindings: - resource: stream: campaigns syncMode: incremental target: ${PREFIX}/campaign {...} ","version":"Next","tagName":"h3"},{"title":"LinkedIn Pages","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#prerequisites","content":" An existing LinkedIn Account The API user account should be assigned the ADMIN role and the following permissions for the API endpoints. Endpoints such as: Organization Lookup API, Follower Statistics and Share Statistics require these permissions: r_organization_social: Read the organization's posts, comments, reactions, etc.rw_organization_admin: Write and read the organization's pages and read reporting data. ","version":"Next","tagName":"h2"},{"title":"Authentication​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#authentication","content":" This connector's authentication can be configured by either passing a LinkedIn access token or using Oauth to connect to your source. Oauth requires the additional setup of verifying your application with LinkedIn in order to use the required scopes. You can see more details about the Community Management App Review in LinkedIn's Docs. info LinkedIn access tokens expire in 60 days. You must manually update your capture configuration to continue to capture data from LinkedIn. Refresh tokens expire after 365 days from their creation date. If you receive a 401 invalid token response error, it means that the access token has expired and you need to generate a new token. You can see more details about it in LinkedIn's Docs. ","version":"Next","tagName":"h3"},{"title":"Access Token Authentication​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#access-token-authentication","content":" Go to the LinkedIn Developers' OAuth Token Tools and click Create tokenYour app will need the r_organization_social and rw_organization_admin scopes:Click "Request access token" and save the token. ","version":"Next","tagName":"h3"},{"title":"Oauth Authentication​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#oauth-authentication","content":" Create a LinkedIn OAuth App​ Create a LinkedIn Page if you don't have one.Create a developer application in LinkedIn's Developer Portal.Ensure your application complies with the Restricted Uses of LinkedIn Marketing APIs and Data.Apply to the Community Management API under the Products tab of your LinkedIn app and complete the form.Save your client_id and client_secret from the Auth tab. Create a Refresh Token​ Go to the LinkedIn Developers' OAuth Token Tools and click Create tokenYour app will need the r_organization_social and rw_organization_admin scopes:Click "Request access token" and save the token. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the LinkedIn Pages source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#properties","content":" Property\tTitle\tDescription\tType\tRequired/Default/organization_id\tOrganization ID\tYour unique organization's id, found in the url of your bussiness' Organization Page\tstring\tRequired /client_id\tClient ID\tYour Oauth app's client id.\tstring\tRequired /client_secret\tClient Secret\tYour Oauth app's client secret.\tstring\tRequired /refresh_token\tRefresh Token\tThe token value generated using the LinkedIn Developers OAuth Token Tools.\tstring\tRequired /access_token\tAccess Token\tThe token value generated using the LinkedIn Developers OAuth Token Tools.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Supported Streams​","type":1,"pageTitle":"LinkedIn Pages","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/#supported-streams","content":" Organization LookupFollower StatisticsShare StatisticsTotal Follower Count ","version":"Next","tagName":"h2"},{"title":"Mailchimp","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Mailchimp","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/#prerequisites","content":" There are two ways to authenticate with MailChimp when capturing data: using OAuth2, and manually, with an API key. Their prerequisites differ. OAuth is recommended for simplicity in the Flow web app; the API key method is the only supported method using the command line. ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Mailchimp in the Flow web app​","type":1,"pageTitle":"Mailchimp","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/#using-oauth2-to-authenticate-with-mailchimp-in-the-flow-web-app","content":" A Mailchimp account ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"Mailchimp","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/#configuring-the-connector-specification-manually","content":" A Mailchimp account A Mailchimp API key ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Mailchimp","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Mailchimp source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Mailchimp","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/#properties","content":" Endpoint​ The following properties reflect the API Key authentication method. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tAuthentication\tAuthentication Type and Details\tobject\tRequired /credentials/auth_type\tAuthentication Type\tAuthentication type. Set to apikey.\tstring\tRequired /credentials/apikey\tAPI Key\tYour Mailchimp API key\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tResource\tMailchimp lists, campaigns, or email_activity\tstring\tRequired /syncMode\tSync Mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Mailchimp","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mailchimp:dev config: credentials: auth_type: apikey apikey: <secret> bindings: - resource: stream: lists syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: campaigns syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} - resource: stream: email_activity syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Marketo","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Marketo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/#supported-data-resources","content":" This connector can be used to sync the following tables from Marketo: activities_X where X is an activity type contains information about lead activities of the type X. For example, activities_send_email contains information about lead activities related to the activity type send_email. See the Marketo docs for a detailed explanation of what each column means.activity_types. Contains metadata about activity types. See the Marketo docs for a detailed explanation of columns.campaigns. Contains info about your Marketo campaigns. Marketo docs.leads. Contains info about your Marketo leads. Marketo docs.lists. Contains info about your Marketo static lists. Marketo docs.programs. Contains info about your Marketo programs. Marketo docs. By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Marketo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/#prerequisites","content":" (Optional) allowlist the Estuary IP addresses if neededAn API-only Marketo User RoleAn Estuary Marketo API-only userA Marketo API Custom ServiceMarketo Client ID & Client SecretMarketo Base URL ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Marketo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Marketo source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Marketo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/client_id\tClient ID\tThe Client ID of your Marketo developer application.\tstring\tRequired /client_secret\tClient Secret\tThe Client Secret of your Marketo developer application.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired /domain_url\tDomain URL\tYour Marketo Base URL.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Marketo project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Marketo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-marketo:dev config: client_id: <secret> client_secret: <secret> start_date: 2017-01-25T00:00:00Z domain_url: <your domain URL> bindings: - resource: stream: leads syncMode: full_refresh target: ${PREFIX}/leads {...} ","version":"Next","tagName":"h3"},{"title":"MixPanel","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"MixPanel","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/#supported-data-resources","content":" The following data resources are supported through the MixPanel APIs: ExportEngageFunnelsRevenueAnnotationsCohortsCohort Members By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"MixPanel","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/#prerequisites","content":" To set up the Mixpanel source connector, you'll need a Mixpanel Service Account and it's Project ID, the Project Timezone, and the Project region (US or EU). ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MixPanel","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MixPanel source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MixPanel","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/project_id\tProject ID\tYour project ID number. See the docs for more information on how to obtain this.\tinteger\tRequired /attribution_window\tAttribution Window\tA period of time for attributing results to ads and the lookback period after those actions occur during which ad results are counted. Default attribution window is 5 days.\tinteger\tDefault /project_timezone\tProject Timezone\tTime zone in which integer date times are stored. The project timezone may be found in the project settings in the Mixpanel console\tstring\tDefault /select_properties_by_default\tSelect Properties By Default\tboolean\tDefault /start_date\tStart Date\tThe date in the format YYYY-MM-DD. Any data before this date will not be replicated. If this option is not set, the connector will replicate data from up to one year ago by default.\tstring\tRequired /end_date\tEnd Date\tThe date in the format YYYY-MM-DD. Any data after this date will not be replicated. Left empty to always sync to most recent date.\tstring\tDefault /region\tRegion\tThe region of mixpanel domain instance either US or EU.\tstring\tDefault /date_window_size\tDate slicing window\tDefines window size in days, that used to slice through data. You can reduce it, if amount of data in each window is too big for your environment.\tinteger\tDefault Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your MixPanel project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MixPanel","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mixpanel:dev config: credentials: auth_type: ServiceAccount secret: {secret} username: {your_username} project_id: 1234567 attribution_window: 5 project_timezone: US/Pacific select_properties_by_default: true start_date: 2017-01-25T00:00:00Z end_date: 2019-01-25T00:00:00Z region: US date_window_size: 30 bindings: - resource: stream: annotations syncMode: full_refresh target: ${PREFIX}/annotations {...} ","version":"Next","tagName":"h3"},{"title":"MariaDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#prerequisites","content":" To use this connector, you'll need a MariaDB database setup with the following. binlog_formatsystem variable set to ROW.Binary log expiration period set to at least 30 days (2592000 seconds) if at all possible. This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures. MariaDB's default value is 0 (no expiration). A watermarks table. The watermarks table is a small "scratch space" to which the connector occasionally writes a small amount of data (a UUID, specifically) to ensure accuracy when backfilling preexisting table contents. The default name is "flow.watermarks", but this can be overridden in config.json. A database user with appropriate permissions: REPLICATION CLIENT and REPLICATION SLAVE privileges.Permission to insert, update, and delete on the watermarks table.Permission to read the tables being captured.Permission to read from information_schema tables, if automatic discovery is used. If the table(s) to be captured include columns of type DATETIME, the time_zone system variable must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default. Configuration Tip To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see configure connections with SSH tunneling. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#setup","content":" ","version":"Next","tagName":"h2"},{"title":"Self Hosted MariaDB​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#self-hosted-mariadb","content":" To meet these requirements, do the following: Create the watermarks table. This table can have any name and be in any database, so long as the capture's config.json file is modified accordingly. CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table. The SELECT permission can be restricted to just the tables that need to be captured, but automatic discovery requires information_schema access as well. CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Configure the binary log to retain data for 30 days, if previously set lower. SET PERSIST binlog_expire_logs_seconds = 2592000; Configure the database's time zone. See below for more information. SET PERSIST time_zone = '-05:00' ","version":"Next","tagName":"h3"},{"title":"Azure Database for MariaDB​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#azure-database-for-mariadb","content":" You can use this connector for MariaDB instances on Azure Database for MariaDB using the following setup instructions. Allow connections to the database from the Estuary Flow IP address. Create a new firewall rulethat grants access to the Estuary Flow IP addresses. info Alternatively, you can allow secure connections via SSH tunneling. To do so: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networksfor additional details and a sample. Set the binlog_expire_logs_seconds server perameterto 2592000. Using your preferred MariaDB client, create the watermarks table. tip Your username must be specified in the format username@servername. CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table. The SELECT permission can be restricted to just the tables that need to be captured, but automatic discovery requires information_schema access as well. CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Note the instance's host under Server name, and the port under Connection Strings (usually 3306). Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Setting the MariaDB time zone​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#setting-the-mariadb-time-zone","content":" MariaDB's time_zone server system variable is set to SYSTEM by default. Flow is not able to detect your time zone when it's set this way, so you must explicitly set the variable for your database. If you intend to capture tables including columns of the type DATETIME, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert the column to RFC3339 format. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. Specify a named timezone in IANA timezone format. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MariaDB docs. Capture Timezone Configuration If you are unable to set the time_zone in the database and need to capture tables with DATETIME columns, the capture can be configured to assume a time zone using the timezone configuration property (see below). The timezone configuration property can be set as a numerical offset or IANA timezone format. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#backfills-and-performance-considerations","content":" When the a MariaDB capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MariaDB source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /user\tLogin User\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tLogin Password\tPassword for the specified database user.\tstring\tRequired /timezone\tTimezone\tTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced/watermarks_table\tWatermarks Table Name\tThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"flow.watermarks" /advanced/dbname\tDatabase Name\tThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.\tstring\t"mysql" /advanced/node_id\tNode ID\tNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.\tinteger /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t131072 /advanced/skip_binlog_retention_check\tSkip Binlog Retention Sanity Check\tBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.\tboolean\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe database in which the table resides.\tstring\tRequired /stream\tStream\tName of the table to be captured from the database.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired info When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions. Tables in the MariaDB system databases information_schema, mysql, and performance_schema will not be discovered. You can add bindings for such tables manually. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mariadb:dev config: address: "127.0.0.1:3306" user: "flow_capture" password: "secret" bindings: - resource: namespace: ${TABLE_NAMESPACE} stream: ${TABLE_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Troubleshooting Capture Errors​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#troubleshooting-capture-errors","content":" The source-mariadb connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations: ","version":"Next","tagName":"h2"},{"title":"Unsupported Operations​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#unsupported-operations","content":" If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured. In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety). In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did. ","version":"Next","tagName":"h3"},{"title":"Data Manipulation Queries​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#data-manipulation-queries","content":" If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section. Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it. ","version":"Next","tagName":"h3"},{"title":"Unhandled Queries​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#unhandled-queries","content":" If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand. In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog. ","version":"Next","tagName":"h3"},{"title":"Metadata Errors​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#metadata-errors","content":" If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes. This should never happen, and most likely means that the binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety). ","version":"Next","tagName":"h3"},{"title":"Insufficient Binlog Retention​","type":1,"pageTitle":"MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/#insufficient-binlog-retention","content":" If your capture fails with a "binlog retention period is too short" error, it is informing you that the MariaDB binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from. (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.) The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety. ","version":"Next","tagName":"h3"},{"title":"Amazon RDS for MariaDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#prerequisites","content":" To use this connector, you'll need a MariaDB database setup with the following. binlog_formatsystem variable set to ROW.Binary log expiration period set to at least 30 days (2592000 seconds) if at all possible. This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures. MariaDB's default value is 0 (no expiration). A watermarks table. The watermarks table is a small "scratch space" to which the connector occasionally writes a small amount of data (a UUID, specifically) to ensure accuracy when backfilling preexisting table contents. The default name is "flow.watermarks", but this can be overridden in config.json. A database user with appropriate permissions: REPLICATION CLIENT and REPLICATION SLAVE privileges.Permission to insert, update, and delete on the watermarks table.Permission to read the tables being captured.Permission to read from information_schema tables, if automatic discovery is used. If the table(s) to be captured include columns of type DATETIME, the time_zone system variable must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#setup","content":" Allow connections to the database from the Estuary Flow IP address. Modify the database, setting Public accessibility to Yes. Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database. Refer to the steps in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. info Alternatively, you can allow secure connections via SSH tunneling. To do so: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networksfor additional details and a sample. Create a RDS parameter group to enable replication in MariaDB. Create a parameter group. Create a unique name and description and set the following properties: Family: mariadb10.6Type: DB Parameter group Modify the new parameter group and update the following parameters: binlog_format: ROWbinlog_row_metadata: FULLread_only: 0 If using the primary instance (not recommended), associate the parameter groupwith the database and set Backup Retention Period to 7 days. Reboot the database to allow the changes to take effect. Create a read replica with the new parameter group applied (recommended). Create a read replicaof your MariaDB database. Modify the replicaand set the following: DB parameter group: choose the parameter group you created previouslyBackup retention period: 7 daysPublic access: Publicly accessible Reboot the replica to allow the changes to take effect. Switch to your MariaDB client. Run the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table: CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Run the following command to set the binary log retention to 7 days, the maximum value which RDS MariaDB permits: CALL mysql.rds_set_configuration('binlog retention hours', 168); In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#backfills-and-performance-considerations","content":" When the a MariaDB capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MariaDB source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /user\tLogin User\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tLogin Password\tPassword for the specified database user.\tstring\tRequired /timezone\tTimezone\tTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced/watermarks_table\tWatermarks Table Name\tThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"flow.watermarks" /advanced/dbname\tDatabase Name\tThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.\tstring\t"mysql" /advanced/node_id\tNode ID\tNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.\tinteger /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t131072 /advanced/skip_binlog_retention_check\tSkip Binlog Retention Sanity Check\tBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.\tboolean\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe database in which the table resides.\tstring\tRequired /stream\tStream\tName of the table to be captured from the database.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired info When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions. Tables in the MariaDB system databases information_schema, mysql, and performance_schema will not be discovered. You can add bindings for such tables manually. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mariadb:dev config: address: "127.0.0.1:3306" user: "flow_capture" password: "secret" bindings: - resource: namespace: ${TABLE_NAMESPACE} stream: ${TABLE_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Troubleshooting Capture Errors​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#troubleshooting-capture-errors","content":" The source-amazon-rds-mariadb connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations: ","version":"Next","tagName":"h2"},{"title":"Unsupported Operations​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#unsupported-operations","content":" If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured. In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety). In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did. ","version":"Next","tagName":"h3"},{"title":"Data Manipulation Queries​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#data-manipulation-queries","content":" If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section. Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it. ","version":"Next","tagName":"h3"},{"title":"Unhandled Queries​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#unhandled-queries","content":" If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand. In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog. ","version":"Next","tagName":"h3"},{"title":"Metadata Errors​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#metadata-errors","content":" If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes. This should never happen, and most likely means that the binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety). ","version":"Next","tagName":"h3"},{"title":"Insufficient Binlog Retention​","type":1,"pageTitle":"Amazon RDS for MariaDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/#insufficient-binlog-retention","content":" If your capture fails with a "binlog retention period is too short" error, it is informing you that the MariaDB binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from. (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.) The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety. ","version":"Next","tagName":"h3"},{"title":"MongoDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/","content":"","keywords":"","version":"Next"},{"title":"Data model​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#data-model","content":" MongoDB is a NoSQL database. Its data model consists ofdocuments (lightweight records that contain mappings of fields and values) organized incollections. MongoDB documents have a mandatory _id field that is used as the key of the collection. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#prerequisites","content":" You'll need: Credentials for connecting to your MongoDB instance and database Read access to your MongoDB database(s), see Role-Based Access Control for more information. Configuration Tip If you are using a user with access to all databases, then in your mongodb address, you must specify?authSource=admin parameter so that authentication is done through your admin database. ReplicaSet enabled on your database, see Deploy a Replica Set. If you are using MongoDB Atlas, or your MongoDB provider requires allowlisting of IPs, you need toallowlist the Estuary IP addresses. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the Flow specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MongoDB source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tHost and port of the database. Optionally can specify scheme for the URL such as mongodb+srv://host.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /database\tDatabase\tOptional comma-separated list of the databases to discover. If not provided will discover all available databases in the instance.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tDatabase name\tstring\tRequired /collection\tStream\tCollection name\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mongodb:dev config: address: "mongo:27017" password: "flow" user: "flow" bindings: - resource: collection: users database: test target: ${PREFIX}/users ","version":"Next","tagName":"h3"},{"title":"SSH Tunneling​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#ssh-tunneling","content":" As an alternative to connecting to your MongoDB instance directly, you can allow secure connections via SSH tunneling. To do so: Refer to the guide to configure an SSH server on the cloud platform of your choice. Configure your connector as described in the configuration section above, with the addition of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networks for additional details and a sample. ","version":"Next","tagName":"h2"},{"title":"Backfill and real-time updates​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#backfill-and-real-time-updates","content":" When performing the initial database snapshot, the connector continuously reads from change streams to capture change events while executing collection scans to backfill pre-existing documents. After the initial snapshot, the connector continues to read from the change streams indefinitely to capture all changes going forward. If the connector's process is paused for a while, it will attempt to resume capturing change events from where it left off, however the connector's ability to do this depends on the size of thereplica set oplog, and in certain circumstances, when the pause has been long enough for the oplog to have evicted old change events, the connector will need to re-do the backfill to ensure data consistency. In these cases it is necessary to resize your oplogor set a minimum retention periodfor your oplog to be able to reliably capture data. The recommended minimum retention period is at least 24 hours, but we recommend higher values to improve reliability. ","version":"Next","tagName":"h2"},{"title":"Change Event Pre- and Post-Images​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/#change-event-pre--and-post-images","content":" Captured documents for change events from update operations will always include a full post-image, since the change stream is configured with the { fullDocument: 'updateLookup' }setting. Pre-images for update, replace, and delete operations will be captured if they are available. For these pre-images to be captured, the source MongoDB collection must have changeStreamPreAndPostImages enabled. See the official MongoDB documentationfor more information on how to enable this setting. ","version":"Next","tagName":"h2"},{"title":"MySQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/","content":"","keywords":"","version":"Next"},{"title":"Supported platforms​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#supported-platforms","content":" This connector supports MySQL on major cloud providers, as well as self-hosted instances. Setup instructions are provided for the following platforms: Self-hosted MySQLAmazon RDSAmazon AuroraGoogle Cloud SQLAzure Database for MySQL ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#prerequisites","content":" To use this connector, you'll need a MySQL database setup with the following. binlog_formatsystem variable set to ROW (the default value).Binary log expiration period set to MySQL's default value of 30 days (2592000 seconds) if at all possible. This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures. A watermarks table. The watermarks table is a small "scratch space" to which the connector occasionally writes a small amount of data (a UUID, specifically) to ensure accuracy when backfilling preexisting table contents. The default name is "flow.watermarks", but this can be overridden in config.json.The watermark table will only ever have one row per capture from that database and that row is updated once per 50k rows scanned in each table during the initial backfill for MySQL databases.As each table backfills, the previous watermark record will be replaced. After the initial backfill, watermark records are updated approximately once per minute. At no time does a watermark table have more than one record. A database user with appropriate permissions: REPLICATION CLIENT and REPLICATION SLAVE privileges.Permission to insert, update, and delete on the watermarks table.Permission to read the tables being captured.Permission to read from information_schema tables, if automatic discovery is used. If the table(s) to be captured include columns of type DATETIME, the time_zone system variable must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default. Configuration Tip To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see configure connections with SSH tunneling. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#setup","content":" To meet these requirements, follow the steps for your hosting type. Self-hosted MySQLAmazon RDSAmazon AuroraGoogle Cloud SQLAzure Database for MySQL ","version":"Next","tagName":"h2"},{"title":"Self-hosted MySQL​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#self-hosted-mysql","content":" Create the watermarks table. This table can have any name and be in any database, so long as the capture's config.json file is modified accordingly. CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table. The SELECT permission can be restricted to just the tables that need to be captured, but automatic discovery requires information_schema access as well. CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' COMMENT 'User account for Flow MySQL data capture'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Configure the binary log to retain data for the default MySQL setting of 30 days, if previously set lower. SET PERSIST binlog_expire_logs_seconds = 2592000; Configure the database's time zone. See below for more information. SET PERSIST time_zone = '-05:00' ","version":"Next","tagName":"h3"},{"title":"Amazon Aurora​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#amazon-aurora","content":" You must apply some of the settings to the entire Aurora DB cluster, and others to a database instance within the cluster. For each step, take note of which entity you're working with. Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the instance, choosing Publicly accessible in the Connectivity settings.Edit the VPC security group associated with your instance, or create a new VPC security group and associate it with the instance as described in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Create a RDS parameter group to enable replication on your Aurora DB cluster. Create a parameter group. Create a unique name and description and set the following properties: Family: aurora-mysql8.0Type: DB ClusterParameter group Modify the new parameter group and update the following parameters: binlog_format: ROWbinlog_row_metadata: FULLread_only: 0 Associate the parameter groupwith the DB cluster. While you're modifying the cluster, also set Backup Retention Period to 7 days. Reboot the cluster to allow the changes to take effect. Switch to your MySQL client. Run the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table: CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' COMMENT 'User account for Flow MySQL data capture'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Run the following command to set the binary log retention to 7 days, the maximum value Aurora permits: CALL mysql.rds_set_configuration('binlog retention hours', 168); In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Azure Database for MySQL​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#azure-database-for-mysql","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Create a new firewall rule that grants access to the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Set the binlog_expire_logs_seconds server perameterto 2592000. Using MySQL workbench or your preferred client, create the watermarks table. tip Your username must be specified in the format username@servername. CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table. The SELECT permission can be restricted to just the tables that need to be captured, but automatic discovery requires information_schema access as well. CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' COMMENT 'User account for Flow MySQL data capture'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Note the instance's host under Server name, and the port under Connection Strings (usually 3306). Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Setting the MySQL time zone​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#setting-the-mysql-time-zone","content":" MySQL's time_zone server system variable is set to SYSTEM by default. If you intend to capture tables including columns of the type DATETIME, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert the column to RFC3339 format. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted Specify a named timezone in IANA timezone format. If you're using Amazon Aurora, create or modify the DB cluster parameter groupassociated with your MySQL database.Set the time_zone parameter to the correct value. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs. Capture Timezone Configuration If you are unable to set the time_zone in the database and need to capture tables with DATETIME columns, the capture can be configured to assume a time zone using the timezone configuration property (see below). The timezone configuration property can be set as a numerical offset or IANA timezone format. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#backfills-and-performance-considerations","content":" When the a MySQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MySQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /user\tLogin User\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tLogin Password\tPassword for the specified database user.\tstring\tRequired /timezone\tTimezone\tTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced/watermarks_table\tWatermarks Table Name\tThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"flow.watermarks" /advanced/dbname\tDatabase Name\tThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.\tstring\t"mysql" /advanced/node_id\tNode ID\tNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.\tinteger /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t131072 /advanced/skip_binlog_retention_check\tSkip Binlog Retention Sanity Check\tBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.\tboolean\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe database/schema in which the table resides.\tstring\tRequired /stream\tStream\tName of the table to be captured from the database.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired info When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions. Tables in the MySQL system schemas information_schema, mysql, performance_schema, and sys will not be discovered. You can add bindings for such tables manually. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mysql:dev config: address: "127.0.0.1:3306" user: "flow_capture" password: "secret" bindings: - resource: namespace: ${TABLE_NAMESPACE} stream: ${TABLE_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Troubleshooting Capture Errors​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#troubleshooting-capture-errors","content":" The source-mysql connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations: ","version":"Next","tagName":"h2"},{"title":"Unsupported Operations​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#unsupported-operations","content":" If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured. In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety). In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did. ","version":"Next","tagName":"h3"},{"title":"Data Manipulation Queries​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#data-manipulation-queries","content":" If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the MySQL binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section. Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it. ","version":"Next","tagName":"h3"},{"title":"Unhandled Queries​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#unhandled-queries","content":" If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand. In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog. ","version":"Next","tagName":"h3"},{"title":"Metadata Errors​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#metadata-errors","content":" If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes. This should never happen, and most likely means that the MySQL binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety). ","version":"Next","tagName":"h3"},{"title":"Insufficient Binlog Retention​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#insufficient-binlog-retention","content":" If your capture fails with a "binlog retention period is too short" error, it is informing you that the MySQL binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from. (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.) The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety. ","version":"Next","tagName":"h3"},{"title":"Empty Collection Key​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/#empty-collection-key","content":" Every Flow collection must declare a key which is used to group its documents. When testing your capture, if you encounter an error indicating collection key cannot be empty, you will need to either add a key to the table in your source, or manually edit the generated specification and specify keys for the collection before publishing to the catalog as documented here. ","version":"Next","tagName":"h3"},{"title":"Google Cloud SQL for MySQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#prerequisites","content":" To use this connector, you'll need a MySQL database setup with the following. binlog_formatsystem variable set to ROW (the default value).Binary log expiration period set to MySQL's default value of 30 days (2592000 seconds) if at all possible. This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures. A watermarks table. The watermarks table is a small "scratch space" to which the connector occasionally writes a small amount of data (a UUID, specifically) to ensure accuracy when backfilling preexisting table contents. The default name is "flow.watermarks", but this can be overridden in config.json. A database user with appropriate permissions: REPLICATION CLIENT and REPLICATION SLAVE privileges.Permission to insert, update, and delete on the watermarks table.Permission to read the tables being captured.Permission to read from information_schema tables, if automatic discovery is used. If the table(s) to be captured include columns of type DATETIME, the time_zone system variable must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#setup","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Enable public IP on your database and add Estuary Flow IP addresses as authorized IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Set the instance's binlog_expire_logs_seconds flagto 2592000. Using Google Cloud Shell or your preferred client, create the watermarks table. CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); Create the flow_capture user with replication permission, the ability to read all tables, and the ability to read and write the watermarks table. The SELECT permission can be restricted to just the tables that need to be captured, but automatic discovery requires information_schema access as well. CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' COMMENT 'User account for Flow MySQL data capture'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 3306. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Setting the MySQL time zone​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#setting-the-mysql-time-zone","content":" MySQL's time_zone server system variable is set to SYSTEM by default. If you intend to capture tables including columns of the type DATETIME, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert the column to RFC3339 format. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted Specify a named timezone in IANA timezone format. If you're using Amazon Aurora, create or modify the DB cluster parameter groupassociated with your MySQL database.Set the time_zone parameter to the correct value. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs. Capture Timezone Configuration If you are unable to set the time_zone in the database and need to capture tables with DATETIME columns, the capture can be configured to assume a time zone using the timezone configuration property (see below). The timezone configuration property can be set as a numerical offset or IANA timezone format. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#backfills-and-performance-considerations","content":" When the a MySQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MySQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /user\tLogin User\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tLogin Password\tPassword for the specified database user.\tstring\tRequired /timezone\tTimezone\tTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced/watermarks_table\tWatermarks Table Name\tThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"flow.watermarks" /advanced/dbname\tDatabase Name\tThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.\tstring\t"mysql" /advanced/node_id\tNode ID\tNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.\tinteger /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t131072 /advanced/skip_binlog_retention_check\tSkip Binlog Retention Sanity Check\tBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.\tboolean\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe database/schema in which the table resides.\tstring\tRequired /stream\tStream\tName of the table to be captured from the database.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired info When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions. Tables in the MySQL system schemas information_schema, mysql, performance_schema, and sys will not be discovered. You can add bindings for such tables manually. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mysql:dev config: address: "127.0.0.1:3306" user: "flow_capture" password: "secret" bindings: - resource: namespace: ${TABLE_NAMESPACE} stream: ${TABLE_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Troubleshooting Capture Errors​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#troubleshooting-capture-errors","content":" The source-mysql connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations: ","version":"Next","tagName":"h2"},{"title":"Unsupported Operations​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#unsupported-operations","content":" If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured. In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety). In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did. ","version":"Next","tagName":"h3"},{"title":"Data Manipulation Queries​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#data-manipulation-queries","content":" If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the MySQL binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section. Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it. ","version":"Next","tagName":"h3"},{"title":"Unhandled Queries​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#unhandled-queries","content":" If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand. In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog. ","version":"Next","tagName":"h3"},{"title":"Metadata Errors​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#metadata-errors","content":" If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes. This should never happen, and most likely means that the MySQL binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety). ","version":"Next","tagName":"h3"},{"title":"Insufficient Binlog Retention​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#insufficient-binlog-retention","content":" If your capture fails with a "binlog retention period is too short" error, it is informing you that the MySQL binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from. (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.) The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety. ","version":"Next","tagName":"h3"},{"title":"Empty Collection Key​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/#empty-collection-key","content":" Every Flow collection must declare a key which is used to group its documents. When testing your capture, if you encounter an error indicating collection key cannot be empty, you will need to either add a key to the table in your source, or manually edit the generated specification and specify keys for the collection before publishing to the catalog as documented here. ","version":"Next","tagName":"h3"},{"title":"MySQL Batch Query Connector","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch/","content":"MySQL Batch Query Connector This connector captures data from MySQL into Flow collections by periodically executing queries and translating the results into JSON documents. We recommend using our MySQL CDC Connectorinstead where possible. Using CDC provides lower latency data capture, delete and update events, and usually has a smaller impact on the source database. However there are some circumstances where this might not be feasible. Perhaps you need to capture from a managed MySQL instance which doesn't support logical replication. Or perhaps you need to capture the contents of a view or the result of an ad-hoc query. That's the sort of situation this connector is intended for. The number one caveat you need to be aware of when using this connector is that it will periodically execute its update query over and over. The default polling interval is set to 24 hours to minimize the impact of this behavior, but even then it could mean a lot of duplicated data being processed depending on the size of your tables. If the dataset has a natural cursor which could be used to identify only new or updated rows, this should be specified by editing the Cursor property of the binding. Common examples of suitable cursors include: Update timestamps, which are usually the best choice if available since they can be used to identify all changed rows, not just updates.Creation timestamps, which can be used to identify newly added rows in append-only datasets but can't be used to identify updates.Serially increasing IDs can also be used to identify newly added rows.","keywords":"","version":"Next"},{"title":"Amazon RDS for MySQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#prerequisites","content":" To use this connector, you'll need a MySQL database setup with the following. binlog_formatsystem variable set to ROW (the default value).Binary log expiration period set to MySQL's default value of 30 days (2592000 seconds) if at all possible. This value may be set lower if necessary, but we strongly discourage going below 7 days as this may increase the likelihood of unrecoverable failures. A watermarks table. The watermarks table is a small "scratch space" to which the connector occasionally writes a small amount of data (a UUID, specifically) to ensure accuracy when backfilling preexisting table contents. The default name is "flow.watermarks", but this can be overridden in config.json. A database user with appropriate permissions: REPLICATION CLIENT and REPLICATION SLAVE privileges.Permission to insert, update, and delete on the watermarks table.Permission to read the tables being captured.Permission to read from information_schema tables, if automatic discovery is used. If the table(s) to be captured include columns of type DATETIME, the time_zone system variable must be set to an IANA zone name or numerical offset or the capture configured with a timezone to use by default. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#setup","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the database, setting Public accessibility to Yes.Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database as described in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Create a RDS parameter group to enable replication in MySQL. Create a parameter group. Create a unique name and description and set the following properties: Family: mysql8.0Type: DB Parameter group Modify the new parameter group and update the following parameters: binlog_format: ROWbinlog_row_metadata: FULLread_only: 0 If using the primary instance (not recommended), associate the parameter groupwith the database and set Backup Retention Period to 7 days. Reboot the database to allow the changes to take effect. Create a read replica with the new parameter group applied (recommended). Create a read replicaof your MySQL database. Modify the replicaand set the following: DB parameter group: choose the parameter group you created previouslyBackup retention period: 7 daysPublic access: Publicly accessible Reboot the replica to allow the changes to take effect. Switch to your MySQL client. Run the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table: CREATE DATABASE IF NOT EXISTS flow; CREATE TABLE IF NOT EXISTS flow.watermarks (slot INTEGER PRIMARY KEY, watermark TEXT); CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret' COMMENT 'User account for Flow MySQL data capture'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'flow_capture'; GRANT SELECT ON *.* TO 'flow_capture'; GRANT INSERT, UPDATE, DELETE ON flow.watermarks TO 'flow_capture'; Run the following command to set the binary log retention to 7 days, the maximum value which RDS MySQL permits: CALL mysql.rds_set_configuration('binlog retention hours', 168); In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Setting the MySQL time zone​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#setting-the-mysql-time-zone","content":" MySQL's time_zone server system variable is set to SYSTEM by default. If you intend to capture tables including columns of the type DATETIME, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert the column to RFC3339 format. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted Specify a named timezone in IANA timezone format. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs. Capture Timezone Configuration If you are unable to set the time_zone in the database and need to capture tables with DATETIME columns, the capture can be configured to assume a time zone using the timezone configuration property (see below). The timezone configuration property can be set as a numerical offset or IANA timezone format. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#backfills-and-performance-considerations","content":" When the a MySQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the MySQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /user\tLogin User\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tLogin Password\tPassword for the specified database user.\tstring\tRequired /timezone\tTimezone\tTimezone to use when capturing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read and columns with type datetime are being captured. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced/watermarks_table\tWatermarks Table Name\tThe name of the table used for watermark writes. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"flow.watermarks" /advanced/dbname\tDatabase Name\tThe name of database to connect to. In general this shouldn't matter. The connector can discover and capture from all databases it's authorized to access.\tstring\t"mysql" /advanced/node_id\tNode ID\tNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.\tinteger /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t131072 /advanced/skip_binlog_retention_check\tSkip Binlog Retention Sanity Check\tBypasses the 'dangerously short binlog retention' sanity check at startup. Only do this if you understand the danger and have a specific need.\tboolean\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe database/schema in which the table resides.\tstring\tRequired /stream\tStream\tName of the table to be captured from the database.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired info When you configure this connector in the web application, the automatic discovery process sets up a binding for most tables it finds in your database, but there are exceptions. Tables in the MySQL system schemas information_schema, mysql, performance_schema, and sys will not be discovered. You can add bindings for such tables manually. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-mysql:dev config: address: "127.0.0.1:3306" user: "flow_capture" password: "secret" bindings: - resource: namespace: ${TABLE_NAMESPACE} stream: ${TABLE_NAME} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Troubleshooting Capture Errors​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#troubleshooting-capture-errors","content":" The source-mysql connector is designed to halt immediately if something wrong or unexpected happens, instead of continuing on and potentially outputting incorrect data. What follows is a non-exhaustive list of some potential failure modes, and what action should be taken to fix these situations: ","version":"Next","tagName":"h2"},{"title":"Unsupported Operations​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#unsupported-operations","content":" If your capture is failing with an "unsupported operation {ALTER,DROP,TRUNCATE,etc} TABLE" error, this indicates that such an operation has taken place impacting a table which is currently being captured. In the case of DROP TABLE and other destructive operations this is not supported, and can only be resolved by removing the offending table(s) from the capture bindings list, after which you may recreate the capture if desired (causing the latest state of the table to be recaptured in its entirety). In the case of ALTER TABLE we currently support table alterations to add or drop columns from a table. This error indicates that whatever alteration took place is not currently supported. Practically speaking the immediate resolution is the same as for a DROP or TRUNCATE TABLE, but if you frequently perform schema migrations it may be worth reaching out to see if we can add support for whatever table alteration you just did. ","version":"Next","tagName":"h3"},{"title":"Data Manipulation Queries​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#data-manipulation-queries","content":" If your capture is failing with an "unsupported DML query" error, this means that an INSERT, UPDATE, DELETE or other data manipulation query is present in the MySQL binlog. This should generally not happen if binlog_format = 'ROW' as described in the Prerequisites section. Resolving this error requires fixing the binlog_format system variable, and then either tearing down and recreating the entire capture so that it restarts at a later point in the binlog, or in the case of an INSERT/DELETE query it may suffice to remove the capture binding for the offending table and then re-add it. ","version":"Next","tagName":"h3"},{"title":"Unhandled Queries​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#unhandled-queries","content":" If your capture is failing with an "unhandled query" error, some SQL query is present in the binlog which the connector does not (currently) understand. In general, this error suggests that the connector should be modified to at least recognize this type of query, and most likely categorize it as either an unsupported DML Query, an unsupported Table Operation, or something that can safely be ignored. Until such a fix is made the capture cannot proceed, and you will need to tear down and recreate the entire capture so that it restarts from a later point in the binlog. ","version":"Next","tagName":"h3"},{"title":"Metadata Errors​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#metadata-errors","content":" If your capture is failing with a "metadata error" then something has gone badly wrong with the capture's tracking of table metadata, such as column names or datatypes. This should never happen, and most likely means that the MySQL binlog itself is corrupt in some way. If this occurs, it can be resolved by removing the offending table(s) from the capture bindings list and then recreating the capture (generally into a new collection, as this process will cause the table to be re-captured in its entirety). ","version":"Next","tagName":"h3"},{"title":"Insufficient Binlog Retention​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#insufficient-binlog-retention","content":" If your capture fails with a "binlog retention period is too short" error, it is informing you that the MySQL binlog retention period is set to a dangerously low value, and your capture would risk unrecoverable failure if it were paused or the server became unreachable for a nontrivial amount of time, such that the database expired a binlog segment that the capture was still reading from. (If this were to happen, then change events would be permanently lost and that particular capture would never be able to make progress without potentially producing incorrect data. Thus the capture would need to be torn down and recreated so that each table could be re-captured in its entirety, starting with a complete backfill of current contents.) The "binlog retention period is too short" error should normally be fixed by setting binlog_expire_logs_seconds = 2592000 as described in the Prerequisites section (and when running on a managed cloud platform additional steps may be required, refer to the managed cloud setup instructions above). However, advanced users who understand the risks can use the skip_binlog_retention_check configuration option to disable this safety. ","version":"Next","tagName":"h3"},{"title":"Empty Collection Key​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/#empty-collection-key","content":" Every Flow collection must declare a key which is used to group its documents. When testing your capture, if you encounter an error indicating collection key cannot be empty, you will need to either add a key to the table in your source, or manually edit the generated specification and specify keys for the collection before publishing to the catalog as documented here. ","version":"Next","tagName":"h3"},{"title":"NetSuite SuiteAnalytics Connect","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"NetSuite SuiteAnalytics Connect","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/#supported-data-resources","content":" Flow discovers all of the tables to which you grant access during setup, including Transactions, Reports, Lists, and Setup. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"NetSuite SuiteAnalytics Connect","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/#prerequisites","content":" Oracle NetSuite accountAllowed access to all Account permissions optionsA new integration with token-based authenticationA custom role with access to objects you want to capture. See setup.A new user assigned to the custom roleAccess token generated for the custom role ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"NetSuite SuiteAnalytics Connect","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/#setup","content":" Create a NetSuite account Create an account on the Oracle NetSuite portal. Confirm your email address. Set up your NetSuite account Find your Realm, or Account ID. You'll use this to connect with Flow. In your NetSuite portal, go to Setup > Company > Company Information. Copy your Account ID. If you have a production account, it will look like 2345678. If you're using a sandbox, it'll look like 2345678_SB2. Create a NetSuite integration to obtain a Consumer Key and Consumer Secret. Navigate to Setup > Integration > Manage Integrations > New. Give the integration a name, for example, estuary-rest-integration. Make sure the State option is enabled. In the Authentication section, check the Token-Based Authentication checkbox. Save your changes. Your Consumer Key and Consumer Secret will be shown once. Copy them to a safe place. Set up a role for use with Flow. Go to Setup > Users/Roles > Manage Roles > New. Give the role a name, for example, estuary-integration-role. Scroll to the Permissions section. (IMPORTANT) Click Transactions and add all the dropdown entities with either full or view access level. (IMPORTANT) Click Reports and add all the dropdown entities with either full or view access level. (IMPORTANT) Click Lists and add all the dropdown entities with either full or view access level. (IMPORTANT) Click Setup an add all the dropdown entities with either full or view access level. To allow your custom role to reflect future changes, be sure to edit these parameters again when you rename or customize any NetSuite object. Set up user for use with Flow. Go to Setup > Users/Roles > Manage Users. Find the user you want to give access to use with Flow. In the Name column, click the user's name. Then, click the Edit button. Find the Access tab. From the dropdown list, select role you created previously; for example, estuary-integration-role. Save your changes. Generate an access token. Go to Setup > Users/Roles > Access Tokens > New. Select an Application Name. Under User, select the user you assigned the role previously. Under Role, select the role you assigned to the user previously. Under Token Name, give a descriptive name to the token you are creating, for example estuary-rest-integration-token. Save your changes. Your Token ID and Token Secret will be shown once. Copy them to a safe place. You now have a properly configured account with the correct permissions and all the information you need to connect with Flow: Realm (Account ID)Consumer KeyConsumer SecretToken IDToken Secret info You can also authenticate with a username and password, but a consumer/token is recommended for security. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"NetSuite SuiteAnalytics Connect","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the NetSuite source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"NetSuite SuiteAnalytics Connect","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default`/account\tNetsuite Account ID\tNetsuite realm/Account ID e.g. 2344535, as for production or 2344535_SB1, as for the sandbox\tstring\tRequired /role_id\tRole ID\tThe ID of the role you created. Defaults to 3, which is the ID of the administrator role.\tint\t3 /suiteanalytics_data_source\tData Source\tWhich NetSuite data source to use. Options are NetSuite.com, or NetSuite2.com\tstring\tRequired /authentication\tAuthentication Details\tCredentials to access your NetSuite account\tobject\tRequired Token/Consumer Authentication​ Property\tTitle\tDescription\tType\tRequired/Default/authentication/consumer_key\tConsumer Key\tConsumer key associated with your integration.\tstring\tRequired /authentication/consumer_secret\tConsumer Secret\tConsumer secret associated with your integration.\tstring\tRequired /authentication/token_key\tToken Key\tAccess token key\tstring\tRequired /authentication/token_secret\tToken Secret\tAccess token secret\tstring\tRequired Username/Password Authentication​ Property\tTitle\tDescription\tType\tRequired/Default/authentication/username\tUsername\tYour NetSuite account's email/username\tstring\tRequired /authentication/password\tPassword\tYour NetSuite account's password.\tstring\tRequired Advanced Config options​ Property\tTitle\tDescription\tType\tRequired/Default/advanced/connection_limit\tConnection Limit\tThe maximum number of concurrent data streams to attempt at once.\tint\t10 Connections /advanced/task_limit\tTask Limit\tThe maximum number of concurrent tasks to run at once. A task is either a backfill or incremental load. Backfills can load multiple chunks in parallel, so this must be strictly <= /advanced/connection_limit\tint\t5 Tasks /advanced/start_date\tStart Date\tThe date that we should attempt to start backfilling from. If not provided, backfill from the beginning.\tdate\tNot Required Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tName\tThe name of the table this binding refers to\tstring\tRequired /interval\tInterval\tHow frequently to check for incremental changes\tISO8601 Duration\tPT1H (1 Hour) /log_cursor\tLog Cursor\tA date-time column to use for incremental capture of modifications.\tString\tRequired (Automatically Discovered) /page_cursor\tPage Cursor\tAn indexed, non-NULL integer column to use for ordered table backfills. Does not need to be unique, but should have high cardinality.\tString\tRequired (Automatically Discovered) /concurrency\tConcurrency\tMaximum number of concurrent connections to use for backfilling.\tint\t1 Connection /query_limit\tQuery Limit\tMaximum number of rows to fetch in a query. Will be divided between all connections if /concurrency > 1\tint\t100,000 Rows /query_timeout\tQuery Timeout\tTimeout for queries. Typically left as the default as some tables just take a very long time to respond.\tISO8601 Duration\tPT10M (10 Minutes) /associations\tAssociations\tList of associated tables for which related data should be loaded.\tArray[TableAssociation]\t[] /associations/[n]/child_table_name\tForeign Table Name\tThe name of the "foreign" table that should be associated with the "parent" binding containing this association\tString\tRequired /associations/[n]/parent_join_column_name\tParent Join Column\tThe name of the column on the "parent" table to be used as the join key\tString\tRequired /associations/[n]/child_join_column_name\tForeign Join Column\tThe name of the column on the "foreign" table to be used as the join key\tString\tRequired /associations/[n]/load_during_backfill\tLoad During Backfill\tWhether or not to load associated documents during backfill\tBoolean\tFalse /associations/[n]/load_during_incremental\tLoad During Incremental\tWhether or not to load associated documents during incremental loads\tBoolean\tTrue ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"NetSuite SuiteAnalytics Connect","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-netsuite-v2:v3 config: account: "12345678" authentication: auth_type: token consumer_key: xxx consumer_secret_sops: xxx token_id: xxx token_secret_sops: xxx connection_type: suiteanalytics role_id: 3 suiteanalytics_data_source: NetSuite2.com advanced: connection_limit: 20 cursor_fields: [] enable_auto_cursor: false resource_tracing: false start_date: null task_limit: 10 bindings: - resource: associations: - child_join_column_name: transaction child_table_name: TransactionAccountingLine parent_join_column_name: id load_during_backfill: false load_during_incremental: true interval: PT5M name: transaction page_cursor: id query_limit: 100000 concurrency: 1 query_timeout: PT10M log_cursor: lastmodifieddate target: ${PREFIX}/${CAPTURE_NAME}/transaction {...} ","version":"Next","tagName":"h3"},{"title":"NetSuite SuiteTalk REST","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/","content":"","keywords":"","version":"Next"},{"title":"SuiteAnalytics vs SuiteQL via REST API​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#suiteanalytics-vs-suiteql-via-rest-api","content":" These two different connection modes have some key differences: ","version":"Next","tagName":"h2"},{"title":"SuiteAnalytics Connect​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#suiteanalytics-connect","content":" Requires the SuiteAnalytics Connect feature to be purchased on your NetSuite accountCan inspect which tables (standard & custom) exist in your accountCan inspect the exact data types specified on these table columnsThis means you can connect to any table in your account and all fields (booleans, date, and datetimes) are properly formatted in Estuary ","version":"Next","tagName":"h3"},{"title":"SuiteQL via REST API​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#suiteql-via-rest-api","content":" Custom tables are not supported without manual workSome standard tables may not yet be supported and will require additional work from the Estuary teamDatetime values are represented as dates without the time specification (this is a limitation of the REST API)Data types on custom columns may not be properly representedYou are repsonsible for determining the right set of permissions to grant the connector, which can often be complicated and unintuitive ","version":"Next","tagName":"h3"},{"title":"Prerequisites​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#prerequisites","content":" Oracle NetSuite accountAllowed access to all Account permissions optionsA new integration with token-based authenticationA custom role with access to objects you want to capture or a purchased SuiteAnalytics Module. See setup.A new user assigned to the custom roleAccess token generated for the custom role ","version":"Next","tagName":"h2"},{"title":"General Setup​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#general-setup","content":" Set up required features on your NetSuite account Find your Account ID (also know as the "Realm"). You'll use this to connect with Flow. In your NetSuite portal, go to Setup > Company > Company Information. Copy your Account ID. If you have a production account, it will look like 2345678. If you're using a sandbox, it'll look like 2345678_SB2. Enable the required features. Navigate to Setup > Company > Enable Features. Click the SuiteCloud tab. In the Manage Authentication section, check the checkbox labeled TOKEN-BASED AUTHENTICATION. If you are using the SuiteQL connection, in the SuiteTalk (Web Services) section, check the checkbox labeled REST WEB SERVICES. Save your changes. If you are using SuiteAnalytics Connect, navigate to Setup > Company > Analytics > Connectivity and check the checkbox labeled SuiteAnalytics Connect. Save your changes. Create a NetSuite integration to obtain a Consumer Key and Consumer Secret. Navigate to Setup > Integration > Manage Integrations > New. Give the integration a name, for example, estuary-netsuite-integration. Make sure the State option is enabled. In the Authentication section, check the Token-Based Authentication checkbox. Save your changes. Your Consumer Key and Consumer Secret will be shown once. Copy them to a safe place. They will never show up again and will be key to the integration working properly. If you are using the SuiteQL over REST API connection, Set up a role for use with Flow. Go to Setup > Users/Roles > Manage Roles > New. Give the role a name, for example, estuary-integration-role. The easiest thing to do here is to click "Core Administrative Permissions". If you want to scope down the permissions given to the connector (which you should) you'll have to determine which permissions are necessary. This can get tricky because many different settings can expand the required permissions (for instance, a custom script on a record could require additional permissions). Scroll to the Permissions section. (IMPORTANT) Click Transactions and add all the dropdown entities with either full or view access level. Find Transaction (IMPORTANT) Click Setup an add the following entities with either full or view access level. Log in using Access TokensREST Web ServicesUser Access Tokens To allow your custom role to reflect future changes, be sure to edit these parameters again when you rename or customize any NetSuite object. If you are using SuiteAnalytics Connect you don't need a custom role. Instead, you can use the bundled "Data Warehouse Integrator" Set up user for use with the connector. Go to Setup > Users/Roles > Manage Users. Find the user you want to give access to use with Flow. In the Name column, click the user's name. Then, click the Edit button. Find the Access tab. From the dropdown list, select either role you created previously (e.g. estuary-integration-role) or the Data Warehouse Integrator role if you are using SuiteAnalytics Connect. Save your changes. Generate an access token. Go to Setup > Users/Roles > Access Tokens > New. Select the Application Name you created earlier. Under User, select the user you assigned the role previously. Under Role, select the role you assigned to the user previously. Under Token Name, give a descriptive name to the token you are creating, for example estuary-rest-integration-token. Save your changes. Your Token ID and Token Secret will be shown once. Copy them to a safe place. You now have a properly configured account with the correct permissions and all the information you need to connect with Flow: Account ID (Realm)Consumer KeyConsumer SecretToken IDToken Secret ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the NetSuite source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/account_id\tRealm\tNetsuite realm e.g. 2344535, as for production or 2344535_SB1, as for the sandbox\tstring\tRequired /start_date\tToken Secret\tThe date to start collecting data from\tdate\tRequired /consumer_key\tConsumer Key\tConsumer key associated with your integration.\tstring\tRequired /consumer_secret\tConsumer Secret\tConsumer secret associated with your integration.\tstring\tRequired /token_key\tToken Key\tAccess token key\tstring\tRequired /token_secret\tToken Secret\tAccess token secret\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your NetSuite project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"NetSuite SuiteTalk REST","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-netsuite:dev config: account_id: <your account id> consumer_key: <key> consumer_secret: <secret> token_key: <key> token_secret: <secret> start_date: "2023-11-01T00:00:00Z" bindings: - resource: stream: Transaction target: ${PREFIX}/Transaction {...} ","version":"Next","tagName":"h3"},{"title":"Notion","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#supported-data-resources","content":" The following data resources are supported: BlocksCommentsDatabasesPagesUsers By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#prerequisites","content":" To use this connector, you'll need a Notion account with an integration created to connect with Flow. Before you create your integration, choose how you'll authenticate with Notion. There are two ways: using OAuth to sign in directly in the web app, or manually, using an access token. OAuth is recommended in the web app; only manual configuration is supported when using the CLI. ","version":"Next","tagName":"h2"},{"title":"Setup for OAuth authentication​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#setup-for-oauth-authentication","content":" Go to your integrations page and create a new integration. On the new integration's Secrets page, change the integration type to Public. Fill in the required fields. Redirect URIs: http://dashboard.estuary.devWebsite homepage: http://dashboard.estuary.devPrivacy policy: https://www.estuary.dev/privacy-policy/Terms of use: https://www.estuary.dev/terms/ ","version":"Next","tagName":"h3"},{"title":"Setup for manual authentication​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#setup-for-manual-authentication","content":" Go to your integrations page and create a new internal integration. Notion integrations are internal by default. During setup, change User Capabilitiesfrom No user information (the default) to Read user information without email address. Copy the generated token for use in the connector configuration. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Notion source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tAuthenticate using\tPick an authentication method.\tobject\tRequired /credentials/auth_type\tAuthentication type\tSet to token for manual authentication\tstring\tRequired /credentials/token\tAccess Token\tNotion API access token\tstring /start_date\tStart Date\tUTC date and time in the format YYYY-MM-DDTHH:MM:SS.000Z. Any data generated before this date will not be replicated. If left blank, the start date will be set to 2 years before the present date.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tNotion resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tSync this resource incrementally, or fully refresh it every run\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Notion","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-notion:dev config: credentials: auth_type: token token: {secret} start_date: 2021-01-25T00:00:00Z bindings: - resource: stream: blocks syncMode: incremental target: ${PREFIX}/blocks {...} ","version":"Next","tagName":"h3"},{"title":"OracleDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#prerequisites","content":" Oracle 11g or aboveAllow connections from Estuary Flow to your Oracle database (if they exist in separate VPCs)Create a dedicated read-only Estuary Flow user with access to all tables needed for replication ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#setup","content":" Follow the steps below to set up the OracleDB connector. ","version":"Next","tagName":"h2"},{"title":"Create a Dedicated User​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#create-a-dedicated-user","content":" Creating a dedicated database user with read-only access is recommended for better permission control and auditing. To create the user, run the following commands against your database: CREATE USER estuary_flow_user IDENTIFIED BY <your_password_here>; GRANT CREATE SESSION TO estuary_flow_user; Next, grant the user read-only access to the relevant tables. The simplest way is to grant read access to all tables in the schema as follows: GRANT SELECT ANY TABLE TO estuary_flow_user; Alternatively, you can be more granular and grant access to specific tables in different schemas: GRANT SELECT ON "<schema_a>"."<table_1>" TO estuary_flow_user; GRANT SELECT ON "<schema_b>"."<table_2>" TO estuary_flow_user; Create a watermarks table: CREATE TABLE estuary_flow_user.FLOW_WATERMARKS(SLOT varchar(1000) PRIMARY KEY, WATERMARK varchar(4000)); Finally you need to grant the user access to use logminer, read metadata from the database and write to the watermarks table: GRANT SELECT_CATALOG_ROLE TO estuary_flow_user; GRANT EXECUTE_CATALOG_ROLE TO estuary_flow_user; GRANT SELECT ON V$DATABASE TO estuary_flow_user; GRANT SELECT ANY TABLE TO estuary_flow_user; GRANT SELECT ON V$LOG TO estuary_flow_user; GRANT LOGMINING TO estuary_flow_user; GRANT INSERT, UPDATE ON estuary_flow_user.FLOW_WATERMARKS TO estuary_flow_user; Enable supplemental logging: For normal instances use: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; For Amazon RDS instances use: BEGIN rdsadmin.rdsadmin_util.alter_supplemental_logging(p_action => 'ADD', p_type => 'ALL'); end; Your database user should now be ready for use with Estuary Flow. ","version":"Next","tagName":"h3"},{"title":"Include Schemas for Discovery​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#include-schemas-for-discovery","content":" In your Oracle configuration, you can specify the schemas that Flow should look at when discovering tables. The schema names are case-sensitive. If the user does not have access to a certain schema, no tables from that schema will be discovered. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the OracleDB source connector. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /user\tUsername\tThe database user to authenticate as.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /database\tDatabase\tLogical database name to capture from. Defaults to ORCL.\tstring\tRequired /historyMode\tHistory Mode\tCapture change events without reducing them to a final state.\tboolean\tfalse /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.table' form.\tstring\t&lt;USER&gt;.FLOW_WATERMARKS /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t50000 /advanced/incremental_chunk_size\tIncremental Chunk Size\tThe number of rows which should be fetched from the database in a single incremental query.\tinteger\t10000 /advanced/incremental_scn_range\tIncremental SCN Range\tThe SCN range captured at every iteration.\tinteger\t50000 /advanced/dictionary_mode\tDictionary Mode\tHow should dictionaries be used in Logminer: one of online or extract. When using online mode schema changes to the table may break the capture but resource usage is limited. When using extract mode schema changes are handled gracefully but more resources of your database (including disk) are used by the process. Defaults to extract.\tstring\textract /advanced/discover_schemas\tDiscover Schemas\tIf this is specified only tables in the selected schema(s) will be automatically discovered. Omit all entries to discover tables from all schemas.\tstring /advanced/node_id\tNode ID\tNode ID for the capture. Each node in a replication cluster must have a unique 32-bit ID. The specific value doesn't matter so long as it is unique. If unset or zero the connector will pick a value.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe owner/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-oracle:dev config: address: database-1.ukqdmzdqvvsz.us-east-2.rds.amazonaws.com:1521 user: "flow_capture" password: secret database: ORCL historyMode: false advanced: incremental_scn_range: 50000 dictionary_mode: extract networkTunnel: sshForwarding: privateKey: -----BEGIN RSA PRIVATE KEY-----\\n... sshEndpoint: ssh://ec2-user@19.220.21.33:22 bindings: - resource: namespace: ${TABLE_NAMESPACE} stream: ${TABLE_NAME} target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Dictionary Modes​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#dictionary-modes","content":" Oracle writes redo log files using triplet object ID, data object ID and object versions to identify different objects in the database, rather than their name. This applies to table names as well as column names. When reading data from the redo log files using Logminer, a "dictionary" is used to translate the object identification data into user-facing names of those objects. When interacting with the database directly an online dictionary, which is essentially the latest dictionary that knows how to translate currently existing table and column names is used by the database and by Logminer, however when capturing historical data, it is possible that the names of these objects or even their identifiers have changed (due to an ALTER TABLE statement for example). In these instances the online dictionary will be insufficient for translating the object identifiers into names and Logminer will complain about a dictionary mismatch. To resolve this issue, it is possible to extract a dictionary into the redo log files themselves, so that when there are schema changes, Logminer can automatically handle using the appropriate dictionary for the time period an event is from. This operation however uses CPU and RAM, as well as consuming disk over time. Using Estuary's Oracle connector you get to choose which mode to operate it: To extract the dictionary into the redo log files, the extract mode can be used (this is the default mode). Be aware that this mode leads to more resource usage (CPU, RAM and disk).To always use the online dictionary, the online mode can be used. This mode is more efficient, but it cannot handle schema changes in tables, so only use this mode with caution and when table schemas are known not to change. ","version":"Next","tagName":"h3"},{"title":"Incremental SCN Range and Events Rate​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#incremental-scn-range-and-events-rate","content":" At every iteration, the connector fetches changes in a specific SCN (System Change Number) range, this is roughly equivalent to a specific time range. Depending on how many events happen on the captured tables in a database (by default, a 50,000 range is captured in each iteration), the advanced.incremental_scn_range option can be updated to fit your needs: If the database processes a large amount of events per unit of time, the connector and/or the database may experience resource shortages while trying to process the data. For example you may see the error PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT which indicates that the memory usage of the database instance has hit a limit. This can happen if too many events are being processed in one iteration. In these cases we recommend lowering the SCN range until the database and the connector are able to handle the load.If the database does not have many events per time unit, a higher value can help with faster processing, although this is usually not necessary. ","version":"Next","tagName":"h3"},{"title":"Troubleshooting​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#troubleshooting","content":" If you see the following error when trying to connect: ORA-01950: no privileges on tablespace 'USERS' The SQL command below may resolve the issue: ALTER USER estuary_flow_user QUOTA UNLIMITED ON USERS; ","version":"Next","tagName":"h2"},{"title":"Known Limitations​","type":1,"pageTitle":"OracleDB","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/#known-limitations","content":" Table and column names longer than 30 characters are not supported by Logminer, and thus they are also not supported by this connector. ","version":"Next","tagName":"h2"},{"title":"OracleDB (Flashback)","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#prerequisites","content":" Oracle 11g or aboveAllow connections from Estuary Flow to your Oracle database (if they exist in separate VPCs)Create a dedicated read-only Estuary Flow user with access to all tables needed for replication ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#setup","content":" Follow the steps below to set up the OracleDB connector. ","version":"Next","tagName":"h2"},{"title":"Create a Dedicated User​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#create-a-dedicated-user","content":" Creating a dedicated database user with read-only access is recommended for better permission control and auditing. To create the user, run the following commands against your database: CREATE USER estuary_flow_user IDENTIFIED BY <your_password_here>; GRANT CREATE SESSION TO estuary_flow_user; Next, grant the user read-only access to the relevant tables. The simplest way is to grant read access to all tables in the schema as follows: GRANT SELECT ANY TABLE TO estuary_flow_user; Alternatively, you can be more granular and grant access to specific tables in different schemas: GRANT SELECT ON "<schema_a>"."<table_1>" TO estuary_flow_user; GRANT SELECT ON "<schema_b>"."<table_2>" TO estuary_flow_user; Finally you need to grant the user access to read metadata from the database: GRANT SELECT_CATALOG_ROLE TO estuary_flow_user; Your database user should now be ready for use with Estuary Flow. ","version":"Next","tagName":"h3"},{"title":"Include Schemas for Discovery​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#include-schemas-for-discovery","content":" In your Oracle configuration, you can specify the schemas that Flow should look at when discovering tables. The schema names are case-sensitive and will default to the upper-cased user if empty. If the user does not have access to the configured schemas, no tables will be discovered. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the OracleDB Flashback source connector. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe connection string for connecting to the database, either in the format of host:port/SID or a connect descriptor such as (address=(protocol=tcps)(host=...)...)\tstring\tRequired /credentials\tCredentials\tCredentials for authenticating with the database. Wallet and Username & Password authentication are supported.\tobject /credentials/credentials_title\tCredentials Title\tAuthentication method to use, one of "Wallet" or "Username & Password"\tstring\tRequired /credentials/username\tUsername\tThe username which is used to access the database.\tstring\tRequired /credentials/password\tPassword\tThe password associated with the username.\tstring\tRequired /credentials/tnsnames\ttnsnames\tThe tnsnames.ora file from the wallet.\tstring /credentials/ewallet\tewallet\tThe ewallet.pem file from the wallet.\tstring /credentials/wallet_password\tWallet Password\tPassword of the wallet, if protected.\tstring /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t50000 /advanced/skip_flashback_retention_checks\tSkip Flashback Retention Checks\tSkip Flashback retention checks. Use this cautiously as we cannot guarantee consistency if Flashback retention is not sufficient.\tinteger\tfalse /advanced/default_interval\tDefault Interval\tDefault interval between updates for all resources. Can be overwritten by each resource.\tinteger\tPT5M Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tName\tThe table name\tstring\tRequired /schema\tSchema\tIn Oracle tables reside in a schema that points to the user that owns the table.\tstring\tRequired /interval\tInterval\tInterval between updates for this resource\tstring\tPT5M ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"OracleDB (Flashback)","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-oracle-flashback:dev config: address: "database-1.ukqdmzdqvvsz.us-east-2.rds.amazonaws.com:1521/ORCL" user: "flow_capture" credentials: credentials_title: Username & Password username: ADMIN password: secret networkTunnel: sshForwarding: privateKey: -----BEGIN RSA PRIVATE KEY-----\\n... sshEndpoint: ssh://ec2-user@19.220.21.33:22 bindings: - resource: name: ${TABLE_NAME} schema: ${TABLE_NAMESPACE} interval: PT5M target: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Paypal Transaction","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Paypal Transaction","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/#supported-data-resources","content":" The following data resources are supported through the Paypal APIs: TransactionsBalances By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Paypal Transaction","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/#prerequisites","content":" The Paypal Transaction API is used to get the history of transactions for a PayPal account. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Paypal Transaction","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Paypal Transaction source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Paypal Transaction","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/client_id\tClient ID\tThe Client ID of your Paypal developer application.\tstring\tRequired /client_secret\tClient Secret\tThe Client Secret of your Paypal developer application.\tstring\tRequired /is_sandbox\tSandbox\tCheckbox to indicate whether it is a sandbox environment or not\tboolean\tfalse /refresh_token\tRefresh token\tThe key to refresh the expired access token.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Paypal Transaction project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Paypal Transaction","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-paypal-transaction:dev config: client_id: <secret> client_secret: <secret> is_sandbox: false refresh_token: <secret> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: transactions syncMode: full_refresh target: ${PREFIX}/transactions {...} ","version":"Next","tagName":"h3"},{"title":"Pendo","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Pendo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/#supported-data-resources","content":" The following data resources are supported through the Pendo API: FeatureGuidePageReportPageEventsFeatureEventsTrackEventsGuideEventsPollEvents By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Pendo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/#prerequisites","content":" A Pendo account with the integration feature enabled.A Pendo API key ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Pendo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification files. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Pendo source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Pendo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/credentials/access_token\tAPI Key\tYour Pendo API key.\tstring\tRequired /startDate\tReplication Start Date\tUTC date and time in the format "YYYY-MM-DDTHH:MM:SSZ". Data prior to this date will not be replicated.\tstring\t1 hour before the current time Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/name\tData resource\tResource in Pendo from which collections are captured.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Pendo","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-pendo:dev config: credentials: access_token: <secret> bindings: - resource: name: Feature target: ${PREFIX}/Feature - resource: name: Guide target: ${PREFIX}/Guide - resource: name: Page target: ${PREFIX}/Page - resource: name: Report target: ${PREFIX}/Report - resource: name: PageEvents target: ${PREFIX}/PageEvents - resource: name: FeatureEvents target: ${PREFIX}/FeatureEvents - resource: name: TrackEvents target: ${PREFIX}/TrackEvents - resource: name: GuideEvents target: ${PREFIX}/GuideEvents - resource: name: PollEvents target: ${PREFIX}/PollEvents ","version":"Next","tagName":"h3"},{"title":"Pinterest","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#prerequisites","content":" To set up the Pinterest source connector, you'll need the following prerequisites: Pinterest App ID and secret keyRefresh Token ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#setup","content":" Follow the steps below to set up the Pinterest source connector. Log into your Estuary Flow account.Navigate to the "Captures" sectionFor the "Start Date," provide the date in YYYY-MM-DD format. Data added on and after this date will be replicated.Next, go to "Authorization Method"Authenticate your Pinterest account using OAuth2.0 or an Access Token. The OAuth2.0 authorization method is selected by default. For "Client ID" and "Client Secret," enter your Pinterest App ID and secret key. For the "Refresh Token," enter your Pinterest Refresh Token. Click "Set up source." ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Pinterest source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/start_date\tStart Date\tA date in the format YYYY-MM-DD. If you have not set a date, it would be defaulted to latest allowed date by api (89 days from today).\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Pinterest project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#sample","content":" { "required": ["start_date", "credentials"], "properties": { "start_date": { "pattern_descriptor": null }, "credentials": { "discriminator": { "propertyName": "auth_method" }, "oneOf": [ { "title": "OAuth2.0", "type": "object", "x-oauth2-provider": "pinterest", "properties": { "auth_method": { "const": "oauth2.0", "order": 0, "type": "string", "default": "oauth2.0" }, "client_id": { "airbyte_secret": true, "description": "The Client ID of your OAuth application", "title": "Client ID", "type": "string" }, "client_secret": { "airbyte_secret": true, "description": "The Client Secret of your OAuth application.", "title": "Client Secret", "type": "string" }, "refresh_token": { "airbyte_secret": true, "description": "Refresh Token to obtain new Access Token, when it's expired.", "title": "Refresh Token", "type": "string" } }, "required": [ "auth_method", "refresh_token" ] }, { "title": "Access Token", "type": "object", "properties": { "access_token": { "airbyte_secret": true, "description": "The Access Token to make authenticated requests.", "title": "Access Token", "type": "string" }, "auth_method": { "const": "access_token", "order": 0, "type": "string", "default": "access_token" } }, "required": [ "auth_method", "access_token" ] } ] } } } ","version":"Next","tagName":"h3"},{"title":"Supported Streams​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#supported-streams","content":" The Pinterest source connector supports the following streams: Account analytics (Incremental)Boards (Full table)Board sections (Full table)Pins on board section (Full table)Pins on board (Full table)Ad accounts (Full table)Ad account analytics (Incremental)Campaigns (Incremental)Campaign analytics (Incremental)Ad groups (Incremental)Ad group analytics (Incremental)Ads (Incremental)Ad analytics (Incremental) ","version":"Next","tagName":"h2"},{"title":"Performance Considerations​","type":1,"pageTitle":"Pinterest","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/#performance-considerations","content":" The Pinterest API imposes certain rate limits for the connector. Please take note of the following limits: Analytics streams: 300 calls per day per userAd accounts streams (Campaigns, Ad groups, Ads): 1000 calls per minute per user per appBoards streams: 10 calls per second per user per app note For any additional information or troubleshooting, refer to the official Pinterest API documentation. ","version":"Next","tagName":"h2"},{"title":"Amazon RDS for PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#supported-versions-and-platforms","content":" This connector supports PostgreSQL versions 10.0 and later on major cloud platforms. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#prerequisites","content":" You'll need a PostgreSQL database setup with the following: Logical replication enabled — wal_level=logicalUser role with REPLICATION attributeA replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. Optional; if none exist, one will be created by the connector.If you wish to run multiple captures from the same database, each must have its own slot. You can create these slots yourself, or by specifying a name other than the default in the advanced configuration. A publication. This represents the set of tables for which change events will be reported. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#setup","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the database, setting Public accessibility to Yes.Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database as described in the Amazon documentation.Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Enable logical replication on your RDS PostgreSQL instance. Create a parameter group. Create a unique name and description and set the following properties: Family: postgres13Type: DB Parameter group Modify the new parameter group and set rds.logical_replication=1. Associate the parameter group with the database. Reboot the database to allow the new parameter group to take effect. In the PostgreSQL client, connect to your instance and run the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table and publication. CREATE USER flow_capture WITH PASSWORD 'secret'; GRANT rds_replication TO flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture; CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>; where <other_tables> lists all tables that will be captured from. The publish_via_partition_rootsetting is recommended (because most users will want changes to a partitioned table to be captured under the name of the root table) but is not required. In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#backfills-and-performance-considerations","content":" When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired, "postgres" /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/publicationName\tPublication Name\tThe name of the PostgreSQL publication to replicate from.\tstring\t"flow_publication" /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/slotName\tSlot Name\tThe name of the PostgreSQL replication slot to replicate from.\tstring\t"flow_slot" /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"public.flow_watermarks" /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired SSL Mode​ Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-postgres:dev" config: address: "localhost:5432" database: "postgres" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: ${TABLE_NAMESPACE} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"TOASTed values​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#toasted-values","content":" PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. If your tables contain values that exceed the limit, those values can't be stored directly. PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to store them separately. TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. As a result, the connector emits a row update with the a value omitted, which might cause unexpected results in downstream catalog tasks if adjustments are not made. The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflowor use the Flow UI to create your capture. It uses merge reductionsto fill in the previous known TOASTed value in cases when that value is omitted from a row update. However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically: When you materialize the captured data to another system using a connector that requires delta updatesWhen you perform a derivation that uses TOASTed values ","version":"Next","tagName":"h2"},{"title":"Troubleshooting​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#troubleshooting","content":" If you encounter an issue that you suspect is due to TOASTed values, try the following: Ensure your collection's schema is using the merge reduction strategy.Set REPLICA IDENTITY to FULL for the table. This circumvents the problem by forcing the WAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated.Contact Estuary support for assistance. ","version":"Next","tagName":"h3"},{"title":"Publications​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/#publications","content":" It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using: CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true); Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes. ","version":"Next","tagName":"h2"},{"title":"PostgreSQL Batch Query Connector","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch/","content":"PostgreSQL Batch Query Connector This connector captures data from Postgres into Flow collections by periodically executing queries and translating the results into JSON documents. We recommend using our PostgreSQL CDC Connector instead if possible. Using CDC provides lower latency data capture, delete and update events, and usually has a smaller impact on the source database. However there are some circumstances where this might not be feasible. Perhaps you need to capture from a managed PostgreSQL instance which doesn't support logical replication. Or perhaps you need to capture the contents of a view or the result of an ad-hoc query. That's the sort of situation this connector is intended for. The number one caveat you need to be aware of when using this connector is that it will periodically execute its update query over and over. At the default polling interval of 5 minutes, a naive SELECT * FROM foo query against a 100 MiB view will produce 30 GiB/day of ingested data, most of it duplicated. This is why the connector's autodiscovery logic only returns ordinary tables of data, because in that particular case we can use the xmin system column as a cursor and ask the database to SELECT xmin, * FROM foo WHERE xmin::text::bigint > $1;. If you start editing these queries or manually adding capture bindings for views or to run ad-hoc queries, you need to either have some way of restricting the query to "just the new rows since last time" or else have your polling interval set high enough that the data rate<DatasetSize> / <PollingInterval> is an amount of data you're willing to deal with.","keywords":"","version":"Next"},{"title":"PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#supported-versions-and-platforms","content":" This connector supports PostgreSQL versions 10.0 and later on major cloud platforms, as well as self-hosted instances. Setup instructions are provided for the following platforms: Self-hosted PostgreSQLAmazon RDSAmazon AuroraGoogle Cloud SQLAzure Database for PostgreSQL ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#prerequisites","content":" You'll need a PostgreSQL database setup with the following: Logical replication enabled — wal_level=logicalUser role with REPLICATION attributeA replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. Optional; if none exist, one will be created by the connector.If you wish to run multiple captures from the same database, each must have its own slot. You can create these slots yourself, or by specifying a name other than the default in the advanced configuration. A publication. This represents the set of tables for which change events will be reported. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. Configuration Tip To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see configure connections with SSH tunneling. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#setup","content":" To meet these requirements, follow the steps for your hosting type. Self-hosted PostgreSQLAmazon RDSAmazon AuroraGoogle Cloud SQLAzure Database for PostgreSQLSupabase ","version":"Next","tagName":"h2"},{"title":"Self-hosted PostgreSQL​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#self-hosted-postgresql","content":" The simplest way to meet the above prerequisites is to change the WAL level and have the connector use a database superuser role. For a more restricted setup, create a new user with just the required permissions as detailed in the following steps: Connect to your instance and create a new user and password: CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION; Assign the appropriate role. If using PostgreSQL v14 or later: GRANT pg_read_all_data TO flow_capture; If using an earlier version: ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA public, <other_schema> TO flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA information_schema, pg_catalog TO flow_capture; where <other_schema> lists all schemas that will be captured from. info If an even more restricted set of permissions is desired, you can also grant SELECT on just the specific table(s) which should be captured from. The ‘information_schema’ and ‘pg_catalog’ access is required for stream auto-discovery, but not for capturing already configured streams. Create the watermarks table, grant privileges, and create publication: CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>; where <other_tables> lists all tables that will be captured from. The publish_via_partition_rootsetting is recommended (because most users will want changes to a partitioned table to be captured under the name of the root table) but is not required. Set WAL level to logical: ALTER SYSTEM SET wal_level = logical; Restart PostgreSQL to allow the WAL level change to take effect. ","version":"Next","tagName":"h3"},{"title":"Amazon Aurora​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#amazon-aurora","content":" You must apply some of the settings to the entire Aurora DB cluster, and others to a database instance within the cluster. For each step, take note of which entity you're working with. Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the instance, choosing Publicly accessible in the Connectivity settings.Edit the VPC security group associated with your instance, or create a new VPC security group and associate it with the instance as described in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Enable logical replication on your Aurora DB cluster. Create a parameter group. Create a unique name and description and set the following properties: Family: aurora-postgresql13, or substitute the version of Aurora PostgreSQL used for your cluster.Type: DB Cluster Parameter group Modify the new parameter group and set rds.logical_replication=1. Associate the parameter group with the DB cluster. Reboot the cluster to allow the new parameter group to take effect. In the PostgreSQL client, connect to your instance and run the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table and publication. CREATE USER flow_capture WITH PASSWORD 'secret'; GRANT rds_replication TO flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture; CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>; where <other_tables> lists all tables that will be captured from. The publish_via_partition_rootsetting is recommended (because most users will want changes to a partitioned table to be captured under the name of the root table) but is not required. In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Azure Database for PostgreSQL​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#azure-database-for-postgresql","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Create a new firewall rule that grants access to the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your Azure PostgreSQL instance's support parameters, set replication to logical to enable logical replication. In the PostgreSQL client, connect to your instance and run the following commands to create a new user for the capture with appropriate permissions. CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION; If using PostgreSQL v14 or later: GRANT pg_read_all_data TO flow_capture; If using an earlier version: ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA public, <others> TO flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA information_schema, pg_catalog TO flow_capture; where <others> lists all schemas that will be captured from. info If an even more restricted set of permissions is desired, you can also grant SELECT on just the specific table(s) which should be captured from. The ‘information_schema’ and ‘pg_catalog’ access is required for stream auto-discovery, but not for capturing already configured streams. Set up the watermarks table and publication. ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA public, <others> TO flow_capture; GRANT SELECT ON information_schema.columns, information_schema.tables, pg_catalog.pg_attribute, pg_catalog.pg_class, pg_catalog.pg_index, pg_catalog.pg_namespace TO flow_capture; CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>; Note the following important items for configuration: Find the instance's host under Server Name, and the port under Connection Strings (usually 5432). Together, you'll use the host:port as the address property when you configure the connector.Format user as username@databasename; for example, flow_capture@myazuredb. ","version":"Next","tagName":"h3"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#backfills-and-performance-considerations","content":" When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector. ","version":"Next","tagName":"h2"},{"title":"WAL Retention and Tuning Parameters​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#wal-retention-and-tuning-parameters","content":" Postgres logical replication works by reading change events from the writeahead log, reordering WAL events in memory on the server, and sending them to the client in the order that transactions were committed. The replication slot used by the capture is essentially a cursor into that logical sequence of changes. Because of how Postgres reorders WAL events into atomic transactions, there are two distinct LSNs which matter when it comes to WAL retention. The confirmed_flush_lsnproperty of a replication slot represents the latest event in the WAL which has been sent to and confirmed by the client. However there may be some number of uncommitted changes prior to this point in the WAL which are still relevant and will be sent to the client in later transactions. Thus there is also a restart_lsn property which represents the point in the WAL from which logical decoding must resume in the future if the replication connection is closed and restarted. The server cannot clean up old WAL files so long as there are active replication slots whose restart_lsn position requires them. There are two ways that restart_lsn might get stuck at a particular point in the WAL: When a capture is deleted, disabled, or repeatedly failing for other reasons, it is not able to advance the confirmed_flush_lsn and thus restart_lsn cannot advance either.When a long-running transaction is open on the server the restart_lsn of a replication slot may be unable to advance even though confirmed_flush_lsn is. By default Postgres will retain an unbounded amount of WAL data and fill up the entire disk if a replication slot stops advancing. There are two ways to address this: When deleting a capture, make sure that the replication slot is also successfully deleted. You can list replication slots with the query SELECT * FROM pg_replication_slots and can drop the replication slot manually with pg_drop_replication_slot('flow_slot'). The database setting max_slot_wal_keep_size can be used to bound the maximum amount of WAL data which a replication slot can force the database to retain. This setting defaults to -1 (unlimited) but should be set on production databases to protect them from unbounded WAL retention filling up the entire disk.Proper sizing of this setting is complex for reasons discussed below, but a value of 50GB should be enough for many databases. When the max_slot_wal_keep_size limit is exceeded, Postgres will terminate any active replication connections using that slot and invalidate the replication slot so that it can no longer be used. If Postgres invalidates the replication slot, the Flow capture using that slot will fail and manual intervention will be required to restart the capture and re-backfill all tables. Setting too low of a limit for max_slot_wal_keep_size can cause additional failures in the presence of long-running transactions. Even when a client is actively receiving and acknowledging replication events, a long-running transaction can cause the restart_lsnof the replication slot to remain stuck until that transaction commits. Thus the value ofmax_slot_wal_keep_size needs to be set high enough to avoid this happening. The precise value depends on the overall change rate of your database and worst-case transaction open time, but there is no downside to using a larger value provided you have enough free disk space. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired, "postgres" /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/publicationName\tPublication Name\tThe name of the PostgreSQL publication to replicate from.\tstring\t"flow_publication" /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/slotName\tSlot Name\tThe name of the PostgreSQL replication slot to replicate from.\tstring\t"flow_slot" /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"public.flow_watermarks" /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired SSL Mode​ Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-postgres:dev" config: address: "localhost:5432" database: "postgres" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: ${TABLE_NAMESPACE} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"TOASTed values​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#toasted-values","content":" PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. If your tables contain values that exceed the limit, those values can't be stored directly. PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to store them separately. TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. As a result, the connector emits a row update with the a value omitted, which might cause unexpected results in downstream catalog tasks if adjustments are not made. The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflowor use the Flow UI to create your capture. It uses merge reductionsto fill in the previous known TOASTed value in cases when that value is omitted from a row update. However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically: When you materialize the captured data to another system using a connector that requires delta updatesWhen you perform a derivation that uses TOASTed values ","version":"Next","tagName":"h2"},{"title":"Troubleshooting​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#troubleshooting","content":" If you encounter an issue that you suspect is due to TOASTed values, try the following: Ensure your collection's schema is using the merge reduction strategy.Set REPLICA IDENTITY to FULL for the table. This circumvents the problem by forcing the WAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated.Contact Estuary support for assistance. ","version":"Next","tagName":"h3"},{"title":"Publications​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/#publications","content":" It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using: CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true); Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes. ","version":"Next","tagName":"h2"},{"title":"Google Cloud SQL for PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#supported-versions-and-platforms","content":" This connector supports PostgreSQL versions 10.0 and later. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#prerequisites","content":" You'll need a PostgreSQL database setup with the following: Logical replication enabled — wal_level=logicalUser role with REPLICATION attributeA replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. Optional; if none exist, one will be created by the connector.If you wish to run multiple captures from the same database, each must have its own slot. You can create these slots yourself, or by specifying a name other than the default in the advanced configuration. A publication. This represents the set of tables for which change events will be reported. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#setup","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Enable public IP on your database and add the Estuary Flow IP addresses as authorized IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. On Google Cloud, navigate to your instance's Overview page. Click "Edit configuration". Scroll down to the Flags section. Click "ADD FLAG". Set the cloudsql.logical_decoding flag to on to enable logical replication on your Cloud SQL PostgreSQL instance. In your PostgreSQL client, connect to your instance and issue the following commands to create a new user for the capture with appropriate permissions, and set up the watermarks table and publication. CREATE USER flow_capture WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'secret'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO flow_capture; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO flow_capture; CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>; where <other_tables> lists all tables that will be captured from. The publish_via_partition_rootsetting is recommended (because most users will want changes to a partitioned table to be captured under the name of the root table) but is not required. In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 5432. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#backfills-and-performance-considerations","content":" When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired, "postgres" /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/publicationName\tPublication Name\tThe name of the PostgreSQL publication to replicate from.\tstring\t"flow_publication" /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/slotName\tSlot Name\tThe name of the PostgreSQL replication slot to replicate from.\tstring\t"flow_slot" /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"public.flow_watermarks" /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-postgres:dev" config: address: "localhost:5432" database: "postgres" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: ${TABLE_NAMESPACE} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"TOASTed values​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#toasted-values","content":" PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. If your tables contain values that exceed the limit, those values can't be stored directly. PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to store them separately. TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. As a result, the connector emits a row update with the a value omitted, which might cause unexpected results in downstream catalog tasks if adjustments are not made. The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflowor use the Flow UI to create your capture. It uses merge reductionsto fill in the previous known TOASTed value in cases when that value is omitted from a row update. However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically: When you materialize the captured data to another system using a connector that requires delta updatesWhen you perform a derivation that uses TOASTed values ","version":"Next","tagName":"h2"},{"title":"Troubleshooting​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#troubleshooting","content":" If you encounter an issue that you suspect is due to TOASTed values, try the following: Ensure your collection's schema is using the merge reduction strategy.Set REPLICA IDENTITY to FULL for the table. This circumvents the problem by forcing the WAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated.Contact Estuary support for assistance. ","version":"Next","tagName":"h3"},{"title":"Publications​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/#publications","content":" It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using: CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true); Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes. ","version":"Next","tagName":"h2"},{"title":"Neon PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#prerequisites","content":" An Estuary Flow account (start free, no credit card required)A Neon account ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#setup","content":" ","version":"Next","tagName":"h2"},{"title":"1. Enable Logical Replication in Neon​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#1-enable-logical-replication-in-neon","content":" Enabling logical replication modifies the Postgres wal_level configuration parameter, changing it from replica to logical for all databases in your Neon project. Once the wal_level setting is changed to logical, it cannot be reverted. Enabling logical replication also restarts all computes in your Neon project, meaning active connections will be dropped and have to reconnect. To enable logical replication in Neon: Select your project in the Neon Console.On the Neon Dashboard, select Project settings.Select Beta.Click Enable to enable logical replication. You can verify that logical replication is enabled by running the following query from the Neon SQL Editor: SHOW wal_level; wal_level ----------- logical ","version":"Next","tagName":"h3"},{"title":"2. Create a Postgres Role for Replication​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#2-create-a-postgres-role-for-replication","content":" It is recommended that you create a dedicated Postgres role for replicating data. The role must have the REPLICATION privilege. The default Postgres role created with your Neon project and roles created using the Neon Console, CLI, or API are granted membership in the neon_superuser role, which has the required REPLICATION privilege. To create a role in the Neon Console: Navigate to the Neon Console.Select a project.Select Roles.Select the branch where you want to create the role.Click New Role.In the role creation dialog, specify a role name.Click Create. The role is created and you are provided with the password for the role. The following CLI command creates a role. To view the CLI documentation for this command, see Neon CLI commands — roles. neon roles create --name <role> The following Neon API method creates a role. To view the API documentation for this method, refer to the Neon API reference. curl 'https://console.neon.tech/api/v2/projects/hidden-cell-763301/branches/br-blue-tooth-671580/roles' \\ -H 'Accept: application/json' \\ -H "Authorization: Bearer $NEON_API_KEY" \\ -H 'Content-Type: application/json' \\ -d '{ "role": { "name": "cdc_role" } }' | jq ","version":"Next","tagName":"h3"},{"title":"3. Grant Schema Access to Your Postgres Role​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#3-grant-schema-access-to-your-postgres-role","content":" If your replication role does not own the schemas and tables you are replicating from, make sure to grant access. Run these commands for each schema: GRANT USAGE ON SCHEMA public TO cdc_role; GRANT SELECT ON ALL TABLES IN SCHEMA public TO cdc_role; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO cdc_role; Granting SELECT ON ALL TABLES IN SCHEMA instead of naming the specific tables avoids having to add privileges later if you add tables to your publication. ","version":"Next","tagName":"h3"},{"title":"4. Create a Publication​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#4-create-a-publication","content":" Create a publication with the name estuary_publication. Include all the tables you would like to ingest into Estuary Flow. CREATE PUBLICATION flow_publication FOR TABLE <tbl1, tbl2, tbl3>; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); The publish_via_partition_rootsetting is recommended (because most users will want changes to a partitioned table to be captured under the name of the root table) but is not required. Refer to the Postgres docs if you need to add or remove tables from your publication. Alternatively, you also can create a publication FOR ALL TABLES. Upon start-up, the Estuary Flow connector for Postgres will automatically create the replication slot required for ingesting data change events from Postgres. The slot's name will be prefixed with estuary_, followed by a unique identifier. To prevent storage bloat, Neon automatically removes inactive replication slots after a period of time if there are other active replication slots. If you have or intend on having more than one replication slot, please see Unused replication slots to learn more. ","version":"Next","tagName":"h3"},{"title":"Allow Inbound Traffic​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#allow-inbound-traffic","content":" If you are using Neon's IP Allow feature to limit the IP addresses that can connect to Neon, you will need to allow inbound traffic from Estuary Flow's IP addresses. Refer to the Estuary Flow documentation for the list of IPs that need to be allowlisted for the Estuary Flow region of your account. For information about configuring allowed IPs in Neon, see Configure IP Allow. ","version":"Next","tagName":"h2"},{"title":"Create a Postgres Source Connector in Estuary Flow​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#create-a-postgres-source-connector-in-estuary-flow","content":" In the Estuary Flow web UI, select Sources from the left navigation bar and click New Capture. In the connector catalog, choose Neon PostgreSQL and click Connect. Enter the connection details for your Neon database. You can get these details from your Neon connection string, which you'll find in the Connection Details widget on the Dashboard of your Neon project. Your connection string will look like this: postgres://alex:AbC123dEf@ep-cool-darkness-123456.us-east-2.aws.neon.tech/dbname?sslmode=require Enter the details for your connection string into the source connector fields. Based on the sample connection string above, the values would be specified as shown below. Your values will differ. Name: Name of the Capture connectorServer Address: ep-cool-darkness-123456.us-east-2.aws.neon.tech:5432User: cdc_rolePassword: Click Add a new secret..., then specify a name for that secret and AbC123dEf as its valueDatabase: dbname Click Next. Estuary Flow will now scan the source database for all the tables that can be replicated. Select one or more table(s) by checking the checkbox next to their name. Optionally, you can change the name of the destination name for each table. You can also take a look at the schema of each stream by clicking on the Collection tab. Click Save and Publish to provision the connector and kick off the automated backfill process. ","version":"Next","tagName":"h2"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#backfills-and-performance-considerations","content":" When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired, "postgres" /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/publicationName\tPublication Name\tThe name of the PostgreSQL publication to replicate from.\tstring\t"flow_publication" /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/slotName\tSlot Name\tThe name of the PostgreSQL replication slot to replicate from.\tstring\t"flow_slot" /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"public.flow_watermarks" /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-postgres:dev" config: address: "localhost:5432" database: "postgres" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: ${TABLE_NAMESPACE} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"TOASTed values​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#toasted-values","content":" PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. If your tables contain values that exceed the limit, those values can't be stored directly. PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to store them separately. TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. As a result, the connector emits a row update with the a value omitted, which might cause unexpected results in downstream catalog tasks if adjustments are not made. The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflowor use the Flow UI to create your capture. It uses merge reductionsto fill in the previous known TOASTed value in cases when that value is omitted from a row update. However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically: When you materialize the captured data to another system using a connector that requires delta updatesWhen you perform a derivation that uses TOASTed values ","version":"Next","tagName":"h2"},{"title":"Troubleshooting​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#troubleshooting","content":" If you encounter an issue that you suspect is due to TOASTed values, try the following: Ensure your collection's schema is using the merge reduction strategy.Set REPLICA IDENTITY to FULL for the table. This circumvents the problem by forcing the WAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated.Contact Estuary support for assistance. ","version":"Next","tagName":"h3"},{"title":"Publications​","type":1,"pageTitle":"Neon PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/#publications","content":" It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using: CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true); Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes. ","version":"Next","tagName":"h2"},{"title":"Recharge","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Recharge","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/#supported-data-resources","content":" The following data resources are supported through the Recharge APIs: AddressesChargesCollectionsCustomersDiscountsMetafieldsOnetimesOrdersProductsShopSubscriptions By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Recharge","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/#prerequisites","content":" Recharge Access Token for authentication. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Recharge","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Recharge source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Recharge","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/access_token\tAccess Token\tThe value of the Access Token generated.\tstring\tRequired /start_date\tStart Date\tThe date from which you'd like to replicate data for Recharge API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Recharge project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Recharge","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-recharge:dev config: access_token: <secret> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: addresses syncMode: full_refresh target: ${PREFIX}/addresses {...} ","version":"Next","tagName":"h3"},{"title":"Supabase","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#supported-versions-and-platforms","content":" This connector supports all Supabase PostgreSQL instances. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#prerequisites","content":" You'll need a Supabase PostgreSQL database setup with the following: A Supabase IPv4 address and direct connection hostname which bypasses the Supabase connection pooler. See Direct Database Connection for details.Logical replication enabled — wal_level=logicalUser role with REPLICATION attributeA replication slot. This represents a “cursor” into the PostgreSQL write-ahead log from which change events can be read. Optional; if none exist, one will be created by the connector.If you wish to run multiple captures from the same database, each must have its own slot. You can create these slots yourself, or by specifying a name other than the default in the advanced configuration. A publication. This represents the set of tables for which change events will be reported. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. In more restricted setups, this must be created manually, but can be created automatically if the connector has suitable permissions. Configuration Tip To configure this connector to capture data from databases hosted on your internal network, you must set up SSH tunneling. For more specific instructions on setup, see configure connections with SSH tunneling. ","version":"Next","tagName":"h2"},{"title":"Direct Database Connection​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#direct-database-connection","content":" By default, Supabase guides users into connecting to their database through aConnection Pooler. Connection poolers are helpful for many applications, but unfortunately the pooler does not support the CDC replication features that this connector relies on. This capture connector requires a direct connection address for your database. This address can be found by navigating to Settings > Database in the Supabase dashboard and then making sure that the Display connection pooler checkbox isunchecked so that the appropriate connection information is shown for a direct connection. You will also need to configure a dedicated IPv4 addressfor your database, if you have not already done so. This can be configured under Project Settings > Add Ons > Dedicated IPv4 addressin the Supabase dashboard. ","version":"Next","tagName":"h3"},{"title":"Setup​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#setup","content":" The simplest way to meet the above prerequisites is to change the WAL level and have the connector use a database superuser role. For a more restricted setup, create a new user with just the required permissions as detailed in the following steps: Connect to your instance and create a new user and password: CREATE USER flow_capture WITH PASSWORD 'secret' REPLICATION; Assign the appropriate role. If using PostgreSQL v14 or later: GRANT pg_read_all_data TO flow_capture; If using an earlier version: ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES to flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA public, <other_schema> TO flow_capture; GRANT SELECT ON ALL TABLES IN SCHEMA information_schema, pg_catalog TO flow_capture; where <other_schema> lists all schemas that will be captured from. info If an even more restricted set of permissions is desired, you can also grant SELECT on just the specific table(s) which should be captured from. The ‘information_schema’ and ‘pg_catalog’ access is required for stream auto-discovery, but not for capturing already configured streams. Create the watermarks table, grant privileges, and create publication: CREATE TABLE IF NOT EXISTS public.flow_watermarks (slot TEXT PRIMARY KEY, watermark TEXT); GRANT ALL PRIVILEGES ON TABLE public.flow_watermarks TO flow_capture; CREATE PUBLICATION flow_publication; ALTER PUBLICATION flow_publication SET (publish_via_partition_root = true); ALTER PUBLICATION flow_publication ADD TABLE public.flow_watermarks, <other_tables>; where <other_tables> lists all tables that will be captured from. The publish_via_partition_rootsetting is recommended (because most users will want changes to a partitioned table to be captured under the name of the root table) but is not required. Set WAL level to logical: ALTER SYSTEM SET wal_level = logical; Restart PostgreSQL to allow the WAL level change to take effect. ","version":"Next","tagName":"h2"},{"title":"Backfills and performance considerations​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#backfills-and-performance-considerations","content":" When the a PostgreSQL capture is initiated, by default, the connector first backfills, or captures the targeted tables in their current state. It then transitions to capturing change events on an ongoing basis. This is desirable in most cases, as in ensures that a complete view of your tables is captured into Flow. However, you may find it appropriate to skip the backfill, especially for extremely large tables. In this case, you may turn of backfilling on a per-table basis. See properties for details. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the PostgreSQL source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired, "postgres" /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/publicationName\tPublication Name\tThe name of the PostgreSQL publication to replicate from.\tstring\t"flow_publication" /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/slotName\tSlot Name\tThe name of the PostgreSQL replication slot to replicate from.\tstring\t"flow_slot" /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"public.flow_watermarks" /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /syncMode\tSync mode\tConnection method. Always set to incremental.\tstring\tRequired SSL Mode​ Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#sample","content":" A minimal capture definition will look like the following: captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-postgres:dev" config: address: "localhost:5432" database: "postgres" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: ${TABLE_NAMESPACE} syncMode: incremental target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"TOASTed values​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#toasted-values","content":" PostgreSQL has a hard page size limit, usually 8 KB, for performance reasons. If your tables contain values that exceed the limit, those values can't be stored directly. PostgreSQL uses TOAST (The Oversized-Attribute Storage Technique) to store them separately. TOASTed values can sometimes present a challenge for systems that rely on the PostgreSQL write-ahead log (WAL), like this connector. If a change event occurs on a row that contains a TOASTed value, but the TOASTed value itself is unchanged, it is omitted from the WAL. As a result, the connector emits a row update with the a value omitted, which might cause unexpected results in downstream catalog tasks if adjustments are not made. The PostgreSQL connector handles TOASTed values for you when you follow the standard discovery workflowor use the Flow UI to create your capture. It uses merge reductionsto fill in the previous known TOASTed value in cases when that value is omitted from a row update. However, due to the event-driven nature of certain tasks in Flow, it's still possible to see unexpected results in your data flow, specifically: When you materialize the captured data to another system using a connector that requires delta updatesWhen you perform a derivation that uses TOASTed values ","version":"Next","tagName":"h2"},{"title":"Troubleshooting​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#troubleshooting","content":" If you encounter an issue that you suspect is due to TOASTed values, try the following: Ensure your collection's schema is using the merge reduction strategy.Set REPLICA IDENTITY to FULL for the table. This circumvents the problem by forcing the WAL to record all values regardless of size. However, this can have performance impacts on your database and must be carefully evaluated.Contact Estuary support for assistance. ","version":"Next","tagName":"h3"},{"title":"Publications​","type":1,"pageTitle":"Supabase","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/#publications","content":" It is recommended that the publication used by the capture only contain the tables that will be captured. In some cases it may be desirable to create this publication for all tables in the database instead of specific tables, for example using: CREATE PUBLICATION flow_publication FOR ALL TABLES WITH (publish_via_partition_root = true); Caution must be used if creating the publication in this way as all existing tables (even those not part of the capture) will be included in it, and if any of them do not have a primary key they will no longer be able to process updates or deletes. ","version":"Next","tagName":"h2"},{"title":"Salesforce","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/","content":"","keywords":"","version":"Next"},{"title":"Overview​","type":1,"pageTitle":"Salesforce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/#overview","content":" The Estuary Salesforce Connector facilitates seamless integration between Salesforce and Estuary's data processing framework. With this connector, users can effortlessly sync data from Salesforce objects into Estuary Flow collections. There are two primary types of connectors available: the Realtime Connector and the Historical Connector. ","version":"Next","tagName":"h2"},{"title":"Salesforce Historical Data​","type":1,"pageTitle":"Salesforce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/#salesforce-historical-data","content":" The Historical Data Connector is designed to capture data from Salesforce objects into Flow collections using batch processing methods. This connector is particularly suited for synchronizing historical Salesforce data. By leveraging batch processing capabilities, it efficiently retrieves and syncs large volumes of historical data, ensuring comprehensive integration with Estuary's data processing workflows. ","version":"Next","tagName":"h2"},{"title":"Salesforce Real Time Data​","type":1,"pageTitle":"Salesforce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/#salesforce-real-time-data","content":" The Real-time Connector provides a mechanism to capture data from Salesforce objects into Flow collections in real time. It utilizes the Salesforce PushTopic API, which enables the streaming of data changes from Salesforce to Estuary. Leveraging the real-time capabilities of the PushTopic API, this connector ensures that updates and modifications in Salesforce objects are promptly reflected in the corresponding Estuary Flow collections. ","version":"Next","tagName":"h2"},{"title":"Running Both Connectors in Parallel​","type":1,"pageTitle":"Salesforce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/#running-both-connectors-in-parallel","content":" To combine the capabilities of both connectors, users can create two separate captures: one using the Historical Connector to capture historical data, and the other using the Realtime Connector to capture real-time updates. Both captures can be configured to point to the same Flow collection, effectively merging historical and real-time data within the same destination. This approach provides a comprehensive solution, allowing users to maintain an up-to-date representation of their Salesforce data while also preserving historical context. By seamlessly integrating historical and real-time data updates, users can leverage the combined power of batch processing and real-time streaming for enhanced data analysis and insights. For help using both connectors in parallel, contact Estuary's support team. ","version":"Next","tagName":"h2"},{"title":"SendGrid","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"SendGrid","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/#supported-data-resources","content":" The following data resources are supported through the SendGrid APIs: CampaignsListsContactsStats automationsSegmentsSingle SendsTemplatesGlobal suppressionSuppression groupsSuppression group membersBlocksBouncesInvalid emailsSpam reports By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"SendGrid","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/#prerequisites","content":" SendGrid API Key for authentication. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"SendGrid","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SendGrid source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"SendGrid","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/apikey\tSendgrid API key\tThe value of the SendGrid API Key generated.\tstring\tRequired /start_date\tStart Date\tThe date from which you'd like to replicate data for SendGrid API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your SendGrid project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"SendGrid","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-sendgrid:dev config: apikey: <secret> start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: blocks syncMode: incremental target: ${PREFIX}/blocks {...} ","version":"Next","tagName":"h3"},{"title":"Salesforce — Real-time data","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#supported-data-resources","content":" This connector can capture the following Salesforce standard objects, if present in your account: AccountContactUserOpportunityFilledHistoryLeadHistoryOpportunityCampaignCaseContactLineItemEntitlementLeadLiveChatTranscriptMessagingSessionQuoteQuoteLineItemServiceAppointmentServiceContractTaskUserServicePresenceWorkOrderWorkOrderLineItem Because most Salesforce accounts contain large volumes of data, you may only want to capture a subset of the available objects. There are several ways to control this: Create a dedicated Salesforce user with access only to the objects you'd like to capture. During capture creation in the web application, remove the bindings for objects you don't want to capture. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#prerequisites","content":" ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Salesforce in the Flow web app​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#using-oauth2-to-authenticate-with-salesforce-in-the-flow-web-app","content":" If you're using the Flow web app, you'll be prompted to authenticate with Salesforce using OAuth. You'll need the following: A Salesforce organization on the Enterprise tier, or with an equivalent API request allocation. Salesforce user credentials. We recommend creating a dedicated read-only Salesforce user. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#configuring-the-connector-specification-manually","content":" If you're working with flowctl and writing specifications in a local development environment, you'll need to manually supply OAuth credentials. You'll need: The items required to set up with OAuth2. A Salesforce developer application with a generated client ID, client secret, and refresh token. See setup steps. ","version":"Next","tagName":"h3"},{"title":"Setup​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#setup","content":" Create a read-only Salesforce user​ Creating a dedicated read-only Salesforce user is a simple way to specify which objects Flow will capture. While signed in as an administrator, create a new profile by cloning the standard Minimum Access profile. Edit the new profile's permissions. Grant it read access to all the standard and custom objects you'd like to capture with Flow. Create a new user, applying the profile you just created. You'll use this user's email address and password to authenticate Salesforce in Flow. Create a developer application and generate authorization tokens​ To manually write a capture specification for Salesforce, you need to create and configure a developer application. Through this process, you'll obtain the client ID, client secret, and refresh token. Create a new developer application. a. When selecting Scopes for your app, select Manage user data via APIs (api), Perform requests at any time (refresh_token, offline_access), and Manage user data via Web browsers (web). Edit the app to ensure that Permitted users is set to All users may self-authorize. Locate the Consumer Key and Consumer Secret. These are equivalent to the client id and client secret, respectively. Follow the Salesforce Web Server Flow. The final POST response will include your refresh token. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the real-time Salesforce source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so you won't need the /credentials values listed here. Property\tTitle\tDescription\tType\tRequired/Default/credentials object\tRequired /credentials/client_id\tClient ID\tThe Salesforce Client ID, also known as a Consumer Key, for your developer application.\tstring\tRequired /credentials/client_secret\tClient Secret\tThe Salesforce Client Secret, also known as a Consumer Secret, for your developer application.\tstring\tRequired /credentials/refresh_token\tRefresh Token\tThe refresh token generated by your developer application.\tstring\tRequired /is_sandbox\tSandbox\tWhether you're using a Salesforce Sandbox.\tboolean\tfalse Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tSalesforce object from which a collection is captured.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Salesforce — Real-time data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-salesforce-next:dev config: credentials: client_id: {your_client_id} client_secret: {secret} refresh_token: {XXXXXXXX} is_sandbox: false bindings: - resource: stream: WorkOrder target: ${PREFIX}/WorkOrder - resource: stream: WorkOrderLineItem target: ${PREFIX}/WorkOrderLineItem ","version":"Next","tagName":"h3"},{"title":"Sentry","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Sentry","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/#supported-data-resources","content":" The following data resources are supported through the Sentry APIs: EventsIssuesProjectsReleases By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Sentry","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/#prerequisites","content":" To set up the Sentry source connector, you'll need the Sentry project name, authentication token, and organization. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Sentry","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Sentry source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Sentry","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/auth_token\tAuth Token\tAuth Token generated in Sentry\tstring\tRequired /organization\tOrganization\tThe slug of the organization the groups belong to.\tstring\tRequired /project\tProject\tThe name (slug) of the Project you want to sync.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Sentry project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Sentry","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-sentry:dev config: auth_token: <secret> organization: <your organization> project: <your project> bindings: - resource: stream: events syncMode: full_refresh target: ${PREFIX}/events {...} ","version":"Next","tagName":"h3"},{"title":"Salesforce — Historical data","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#supported-data-resources","content":" This connector can capture the following Salesforce standard objects, if present in your account: AccountContactUserOpportunityFilledHistoryLeadHistoryOpportunityCampaignCaseContactLineItemEntitlementLeadLiveChatTranscriptMessagingSessionQuoteQuoteLineItemServiceAppointmentServiceContractTaskUserServicePresenceWorkOrderWorkOrderLineItem The Salesforce connector has the ability to capture all standard Salesforce objects as well as custom objects. All available objects will appear after connecting to Salesforce. Because most Salesforce accounts contain large volumes of data, you may only want to capture a subset of the available objects. There are several ways to control this: Create a dedicated Salesforce user with access only to the objects you'd like to capture. Apply a filter when you configure the connector. If you don't apply a filter, the connector captures all objects available to the user. During capture creation in the web application, remove the bindings for objects you don't want to capture. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#prerequisites","content":" ","version":"Next","tagName":"h2"},{"title":"Using OAuth2 to authenticate with Salesforce in the Flow web app​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#using-oauth2-to-authenticate-with-salesforce-in-the-flow-web-app","content":" If you're using the Flow web app, you'll be prompted to authenticate with Salesforce using OAuth. You'll need the following: A Salesforce organization on the Enterprise tier, or with an equivalent API request allocation. Salesforce user credentials. We recommend creating a dedicated read-only Salesforce user. ","version":"Next","tagName":"h3"},{"title":"Configuring the connector specification manually​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#configuring-the-connector-specification-manually","content":" If you're working with flowctl and writing specifications in a local development environment, you'll need to manually supply OAuth credentials. You'll need: The items required to set up with OAuth2. A Salesforce developer application with a generated client ID, client secret, and refresh token. See setup steps. ","version":"Next","tagName":"h3"},{"title":"Setup​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#setup","content":" Create a read-only Salesforce user​ Creating a dedicated read-only Salesforce user is a simple way to specify which objects Flow will capture. This is useful if you have a large amount of data in your Salesforce organization. While signed in as an administrator, create a new profile by cloning the standard Minimum Access profile. Edit the new profile's permissions. Grant it read access to all the standard and custom objects you'd like to capture with Flow. Create a new user, applying the profile you just created. You'll use this user's email address and password to authenticate Salesforce in Flow. Create a developer application and generate authorization tokens​ To manually write a capture specification for Salesforce, you need to create and configure a developer application. Through this process, you'll obtain the client ID, client secret, and refresh token. Create a new developer application. a. When selecting Scopes for your app, select Manage user data via APIs (api), Perform requests at any time (refresh_token, offline_access), and Manage user data via Web browsers (web). Edit the app to ensure that Permitted users is set to All users may self-authorize. Locate the Consumer Key and Consumer Secret. These are equivalent to the client id and client secret, respectively. Follow the Salesforce Web Server Flow. The final POST response will include your refresh token. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the Flow specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the batch Salesforce source connector. ","version":"Next","tagName":"h2"},{"title":"Formula Fields​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#formula-fields","content":" Estuary is able to capture Salesforce formula fields, however, regular full syncs must be configured in order to ensure up to date formula fields. Given the batch processing of this connector, if formula field values are updated in between syncs, Estuary will not be aware of any changes. In order to ensure data freshness, it is recommended that you configure your capture to regularly initiate full refreshes of your source. Once a historical backfill is complete, updated formula field values will be reflected within Estuary. ","version":"Next","tagName":"h3"},{"title":"Slowly Changing Dimensions Type 2​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#slowly-changing-dimensions-type-2","content":" Estuary is capable of capturing a stream of your Salesforce data as it changes through a feature called Delta Updates. To read more about how Delta Updates works visit our docs. ","version":"Next","tagName":"h3"},{"title":"Merging Real Time and Batch Data​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#merging-real-time-and-batch-data","content":" Estuary offers connectors for both batch and real time capture. It is possible to create collections that reflect both batch and real time data capture using the following steps: Create a new capture using the batch capture connector. Create a new capture using the real time capture connector. Both captures should share the same namespace in order to write to the same collection. For example, you would end up with a batch connector named Tenant/Salesforce/source-salesforce and a real time capture named Tenant/Salesforce/source-salesforce-real-time. If configured correctly, both captures will read data into the same collections that are titled Tenant/Salesforce/your-stream. Estuary should automatically merge your documents, ensuring that duplicates are not produced when pulling from two captures with the same source. Before continuing, it is important to make sure that a reduction strategy has been implemented for your collections. This step requires using flowctl, please visit our documentation for more information. Pull down your active specifications into your local environment using the command flowctl catalog pull-specs --prefix Tenant/Salesforce This command will generate a folder for each subtree of your tenant. Using the above example tenant, you would end up with a top level folder structure named Tenant and a sub folder named Salesforce. Within the sub folder for your Salesforce capture you will find yaml specification files for your each of your collections that follow the naming convention BindingName.schema.yaml. For each newly created collection, make sure that it contains the following reduction strategy: --- type: object additionalProperties: true properties: Id: type: - string ... required: - Id # Your collection must include this line. If missing, please add below reduce: strategy: merge If the above line was missing you must also run the command flowctl catalog publish --source flow.yaml at the root level of your local folder structure to publish the changes to Flow. ","version":"Next","tagName":"h3"},{"title":"Properties​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so you won't need the /credentials values listed here. Property\tTitle\tDescription\tType\tRequired/Default/credentials object\tRequired /credentials/auth_type\tAuthorization type\tSet to Client\tstring /credentials/client_id\tClient ID\tThe Salesforce Client ID, also known as a Consumer Key, for your developer application.\tstring\tRequired /credentials/client_secret\tClient Secret\tThe Salesforce Client Secret, also known as a Consumer Secret, for your developer application.\tstring\tRequired /credentials/refresh_token\tRefresh Token\tThe refresh token generated by your developer application.\tstring\tRequired /is_sandbox\tSandbox\tWhether you're using a Salesforce Sandbox.\tboolean\tfalse /start_date\tStart Date\tStart date in the format YYYY-MM-DD. Data added on and after this date will be captured. If this field is blank, all data will be captured.\tstring /streams_criteria\tFilter Salesforce Objects (Optional)\tFilter Salesforce objects for capture.\tarray /streams_criteria/-/criteria\tSearch criteria\tPossible criteria are "starts with", "ends with", "contains", "exacts", "starts not with", "ends not with", "not contains", and "not exacts".\tstring\t"contains" /streams_criteria/-/value\tSearch value\tSearch term used with the selected criterion to filter objects.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/cursorField\tCursor field\tField used as a cursor to track data replication; typically a timestamp field.\tarray, null /stream\tStream\tSalesforce object from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Salesforce — Historical data","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-salesforce:dev config: credentials: auth_type: Client client_id: {your_client_id} client_secret: {secret} refresh_token: {XXXXXXXX} is_sandbox: false start_date: 2022-01-01 streams_criteria: - criteria: "starts with" value: "Work" bindings: - resource: cursorField: [SystemModstamp] stream: WorkOrder syncMode: incremental target: ${PREFIX}/WorkOrder - resource: cursorField: [SystemModstamp] stream: WorkOrderLineItem syncMode: incremental target: ${PREFIX}/WorkOrderLineItem ","version":"Next","tagName":"h3"},{"title":"Slack","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/#supported-data-resources","content":" The following data resources are supported through the Slack APIs: Channels (Conversations)Channel Members (Conversation Members)Messages (Conversation History)UsersThreads (Conversation Replies)User GroupsFilesRemote Files By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/#prerequisites","content":" Slack workspace URL or API token for authentication. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Slack source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/join_channels\tJoin Channels\tWhether to join all channels\tboolean\ttrue /lookback_window\tThreads Lookback window (Days)\tHow far into the past to look for messages in threads.\tinteger\tRequired /start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Slack project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-slack:dev config: credentials: auth_type: OAuth access_token: {secret} client_id: {your_client_id} client_secret: {secret} join_channels: true lookback_window: 7 start_date: 2017-01-25T00:00:00Z bindings: - resource: stream: channel_members syncMode: full_refresh target: ${PREFIX}/channel_members {...} ","version":"Next","tagName":"h3"},{"title":"SFTP","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"SFTP","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/#prerequisites","content":" You'll need an SFTP server that can accept connections from the Estuary Flow IP addresses using password authentication. ","version":"Next","tagName":"h2"},{"title":"Subdirectories and Symbolic Links​","type":1,"pageTitle":"SFTP","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/#subdirectories-and-symbolic-links","content":" The connector must be configured with a Directory to capture files from. It will also descend into and capture files in normal subdirectories of the configured Directory. Symbolic links to files are captured from the referent files. Symbolic links to subdirectories are not captured, although the configured Directory may itself be a symbolic link. ","version":"Next","tagName":"h2"},{"title":"File Capturing Order​","type":1,"pageTitle":"SFTP","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/#file-capturing-order","content":" The standard mode of operation for the connector is to capture files according to their modification time. All files available on the server will initially be captured, and on an on-going basis new files that are added to the server are captured incrementally. New files added to the server are captured based on their modification time: If the connector finds a file with a more recent modification time than any previously observed, it will be captured. This means that any actions that update the modification time of a file on the server may cause it to be re-captured. For symbolic links to files the modification time of referent file is used, not of the symbolic link. Alternatively, the advanced option Ascending Keys may be set. In this mode of operation the connector processes files strictly based on their path. New files are captured if they have a path lexically greater than any previously captured file. Lexical ordering considers the full path of the file. As an example, consider a directory structure like the following with a data file initially in the directory /root/b/: /root/ a/ b/data.csv c/ In the normal mode of operation (Ascending Keys not set) the path /root/b/data.csv will initially be captured. Any added files will be captured by the connector on an on-going basis as they have increasingly more recent modification times.With Ascending Keys set the path /root/b/data.csv will initially be captured, but after that only added files in a higher lexical order will be captured: Any file added to the directory /root/a/ will not be captured, becuase /root/a/ comes before /root/b/.Any file added to the directory /root/c/ will captured, because /root/c/ comes after /root/b/.A file added to the directory /root/b/ may be captured if its name comes after data.csv.This ordering applies on an on-going basis. If a file is added to /root/c/, after that only files with a higher lexical ordering than that file to be captured. Setting Ascending Keys is only recommended if you have strict control over the naming of files and can ensure they are added in increasing lexical ordering. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"SFTP","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SFTP source connector. Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tHost and port of the SFTP server. Example: myserver.com:22\tstring\tRequired /username\tUsername\tUsername for authentication.\tstring\tRequired /password\tPassword\tPassword for authentication. Only one of Password or SSHKey must be provided.\tstring /sshKey\tSSH Key\tSSH Key for authentication. Only one of Password or SSHKey must be provided.\tstring /directory\tDirectory\tDirectory to capture files from. All files in this directory and any subdirectories will be included.\tstring\tRequired /matchFiles\tMatch Files Regex\tFilter applied to all file names in the directory. If provided, only files whose path (relative to the directory) matches this regex will be captured. For example, you can use .*\\.json to only capture json files.\tstring /advanced Options for advanced users. You should not typically need to modify these.\tobject /advanced/ascendingKeys\tAscending Keys\tMay improve sync speeds by listing files from the end of the last sync, rather than listing all files in the configured directory. This requires that you write files in ascending lexicographic order, such as an RFC-3339 timestamp, so that lexical path ordering matches modification time ordering.\tboolean\tfalse /parser\tParser Configuration\tConfigures how files are parsed (optional, see below)\tobject /parser/compression\tCompression\tDetermines how to decompress the contents. The default, 'Auto', will try to determine the compression automatically.\tnull, string\tnull /parser/format\tFormat\tDetermines how to parse the contents. The default, 'Auto', will try to determine the format automatically based on the file extension or MIME type, if available.\tobject\t{"type":"auto"} Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tPrefix\tPath to the captured directory.\tstring\tRequired ","version":"Next","tagName":"h2"},{"title":"Sample​","type":1,"pageTitle":"SFTP","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/#sample","content":" captures: ${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-sftp:dev" config: address: myserver.com:22 username: <SECRET> password: <SECRET> directory: /data parser: compression: zip format: type: csv config: delimiter: "," encoding: UTF-8 errorThreshold: 5 headers: [ID, username, first_name, last_name] lineEnding: "\\\\r" quote: '"' bindings: - resource: stream: /data target: ${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Advanced: Parsing SFTP Files​","type":1,"pageTitle":"SFTP","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/#advanced-parsing-sftp-files","content":" SFTP servers can support a wider variety of file types than other data source systems. For each of these file types, Flow must parse and translate data into collections with defined fields and JSON schemas. By default, the parser will automatically detect the type and shape of the data in your bucket, so you won't need to change the parser configuration for most captures. However, the automatic detection may be incorrect in some cases. To fix or prevent this, you can provide explicit information in the parser configuration, which is part of the endpoint configuration for this connector. The parser configuration includes: Compression: Specify how the bucket contents are compressed. If no compression type is specified, the connector will try to determine the compression type automatically. Options are: zipgzipzstdnone Format: Specify the data format, which determines how it will be parsed. Options are: Auto: If no format is specified, the connector will try to determine it automatically.AvroCSVJSONProtobufW3C Extended Log info At this time, Flow only supports SFTP captures with data of a single file type. Support for multiple file types, which can be configured on a per-binding basis, will be added in the future. For now, use a prefix in the endpoint configuration to limit the scope of each capture to data of a single file type. CSV configuration​ CSV files include several additional properties that are important to the parser. In most cases, Flow is able to automatically determine the correct values, but you may need to specify for unusual datasets. These properties are: Delimiter. Options are: Comma (",")Pipe ("|")Space ("0x20")Semicolon (";")Tab ("0x09")Vertical tab ("0x0B")Unit separator ("0x1F")SOH ("0x01")Auto Encoding type, specified by its WHATWG label. Optionally, an Error threshold, as an acceptable percentage of errors. If set to a number greater than zero, malformed rows that fall within the threshold will be excluded from the capture. Escape characters. Options are: Backslash ("\\\\")Disable escapes ("")Auto Optionally, a list of column Headers, if not already included in the first row of the CSV file. If any headers are provided, it is assumed that the provided list of headers is complete and authoritative. The first row of your CSV file will be assumed to be data (not headers), and you must provide a header value for every column in the file. Line ending values CRLF ("\\\\r\\\\n") (Windows)CR ("\\\\r")LF ("\\\\n")Record Separator ("0x1E")Auto Quote character Double Quote ("\\"")Single Quote (")Disable Quoting ("")Auto The sample specification above includes these fields. ","version":"Next","tagName":"h3"},{"title":"Snapchat Marketing","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Snapchat Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/#supported-data-resources","content":" This connector can be used to sync the following tables from Snapchat: AdaccountsAdsAdsquadsCampaignsCreativesMediaOrganizationsSegmentsAdaccountsStatsHourlyAdaccountsStatsDailyAdaccountsStatsLifetimeAdsStatsHourlyAdsStatsDailyAdsStatsHourlyAdsStatsDailyAdsStatsLifetimeAdsquadsStatsDailyAdsquadsStatsLifetimeCampaignsStatsHourlyCampaignsStatsDailyCampaignsStatsLifetime By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Snapchat Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/#prerequisites","content":" A Snapchat Marketing account with permission to access data from accounts you want to sync. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Snapchat Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Snapchat source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Snapchat Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/start_date\tStart Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tDefault /end_date\tEnd Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Snapchat project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Snapchat Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-snapchat:dev config: start_date: 2017-01-25T00:00:00Z end_date: 2018-01-25T00:00:00Z bindings: - resource: stream: lists syncMode: full_refresh target: ${PREFIX}/lists {...} ","version":"Next","tagName":"h3"},{"title":"Snowflake CDC Connector","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#prerequisites","content":" To use this connector, you'll need: A Snowflake account that includes: A target database containing the tables you want to capture from.A virtual warehouse which the connector can use to execute queries.A schema which will hold streams and staging tables managed by the connector. The default name for this schema is ESTUARY_STAGING unless overridden in the capture's advanced configuration.A user with access grants for these resources, as well as authorization to read from the desired source tables, and to create streams and transient tables in the staging schema based on the source tables. The host URL for your Snowflake account. This is formatted using your Snowflake account identifier, and might look something like sg31386.snowflakecomputing.com or df98701.us-central1.gcp.snowflakecomputing.com. See the script below for details. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#setup","content":" To set up a user account and warehouse for use with the Snowflake CDC connector, copy and paste the following script into the Snowflake SQL editor. Modify the variable declarations in the first few lines to set the password and optionally customize the names involved. set database_name = 'SOURCE_DB'; -- The database to capture from set warehouse_name = 'ESTUARY_WH'; -- The warehouse to execute queries in set estuary_user = 'ESTUARY_USER'; -- The name of the capture user set estuary_password = 'secret'; -- The password of the capture user set estuary_role = 'ESTUARY_ROLE'; -- A role for the capture user's permissions -- Create a role and user for Estuary create role if not exists identifier($estuary_role); grant role identifier($estuary_role) to role SYSADMIN; create user if not exists identifier($estuary_user) password = $estuary_password default_role = $estuary_role default_warehouse = $warehouse_name; grant role identifier($estuary_role) to user identifier($estuary_user); -- Create a warehouse for Estuary and grant access to it create warehouse if not exists identifier($warehouse_name) warehouse_size = xsmall warehouse_type = standard auto_suspend = 60 auto_resume = true initially_suspended = true; grant USAGE on warehouse identifier($warehouse_name) to role identifier($estuary_role); -- Grant Estuary access to read from all tables in the database and to create a staging schema grant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role); grant USAGE on future schemas in database identifier($database_name) to role identifier($estuary_role); grant USAGE on all schemas in database identifier($database_name) to role identifier($estuary_role); grant SELECT on future tables in database identifier($database_name) to role identifier($estuary_role); grant SELECT on all tables in database identifier($database_name) to role identifier($estuary_role); commit; Be sure to run the entire script with the "Run All" option. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#configuration","content":" You can configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Snowflake CDC source connector. ","version":"Next","tagName":"h2"},{"title":"Endpoint Properties​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#endpoint-properties","content":" Property\tTitle\tDescription\tType\tRequired/Default/host\tHost URL\tThe Snowflake Host used for the connection. Example: orgname-accountname.snowflakecomputing.com (do not include the protocol).\tstring\tRequired /account\tAccount\tThe Snowflake account identifier\tstring\tRequired /database\tDatabase\tThe name of the Snowflake database to capture from\tstring\tRequired /user\tUser\tThe Snowflake user login name\tstring\tRequired /password\tPassword\tThe password for the specified login user\tstring\tRequired /warehouse\tWarehouse\tThe Snowflake virtual warehouse used to execute queries. The default warehouse for the user will be used if this is blank.\tstring /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/flowSchema\tFlow Schema\tThe schema in which Flow will create and manage its streams and staging tables.\tstring\tESTUARY_STAGING ","version":"Next","tagName":"h3"},{"title":"Binding Properties​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#binding-properties","content":" Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tThe name of the table to capture\tstring\tRequired /schema\tSchema\tThe schema in which the table resides\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Polling Interval​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#polling-interval","content":" Keeping a Snowflake compute warehouse active 24/7 can be prohibitively expensive for many users, so the Snowflake CDC connector is designed to poll for changes at a configurable interval, at which time it will capture into Flow all new changes since the previous execution. This polling interval is set to 5 minutes by default, in an attempt to strike a balance between cost savings while still providing "good enough" capture latency for most streaming uses. The interval may be configured by editing the task spec interval property as described here. Specifying a smaller interval can provide even lower capture latencies but is likely to incur higher costs for Snowflake warehouse usage. A higher interval will reduce Snowflake costs by allowing the warehouse to be idle for longer, in cases where it's okay for the captured data to lag the source dataset by a few hours. Note that regardless of the polling interval the output collections will contain an accurate representation of the source tables up to some moment in time, the interval merely controls how frequent and fine-grained the updates are. ","version":"Next","tagName":"h3"},{"title":"Sample Configuration​","type":1,"pageTitle":"Snowflake CDC Connector","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/#sample-configuration","content":" captures: ${prefix}/source-snowflake: endpoint: connector: image: ghcr.io/estuary/source-snowflake:v1 config: host: cf22902.us-central1.gcp.snowflakecomputing.com account: cf22902 database: SOURCE_DB user: ESTUARY_USER password: secret bindings: - resource: schema: ${schema_name} table: ${table_name} target: ${prefix}/collection_name interval: 30m ","version":"Next","tagName":"h3"},{"title":"Microsoft SQL Server","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#supported-versions-and-platforms","content":" This connector will work on both hosted deployments and all major cloud providers. It is designed for databases using any version of SQL Server which has CDC support, and is regularly tested against SQL Server 2017 and up. Setup instructions are provided for the following platforms: Self-hosted SQL ServerAzure SQL DatabaseAmazon RDS for SQL ServerGoogle Cloud SQL for SQL Server ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#prerequisites","content":" To capture change events from SQL Server tables using this connector, you need: For each table to be captured, a primary key should be specified in the database. If a table doesn't have a primary key, you must manually specify a key in the associated Flow collection definition while creating the capture.See detailed steps. CDC enabledon the database and the individual tables to be captured. (This creates change tables in the database, from which the connector reads.) A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. A user role with: SELECT permissions on the CDC schema and the schemas that contain tables to be captured.Access to the change tables created as part of the SQL Server CDC process.SELECT, INSERT, and UPDATE permissions on the watermarks table ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#setup","content":" To meet these requirements, follow the steps for your hosting type. Self-hosted SQL ServerAzure SQL DatabaseAmazon RDS for SQL Server)Google Cloud SQL for SQL Server ","version":"Next","tagName":"h2"},{"title":"Self-hosted SQL Server​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#self-hosted-sql-server","content":" Connect to the server and issue the following commands: USE <database>; -- Enable CDC for the database. EXEC sys.sp_cdc_enable_db; -- Create user and password for use with the connector. CREATE LOGIN flow_capture WITH PASSWORD = 'secret'; CREATE USER flow_capture FOR LOGIN flow_capture; -- Grant the user permissions on the CDC schema and schemas with data. -- This assumes all tables to be captured are in the default schema, `dbo`. -- Add similar queries for any other schemas that contain tables you want to capture. GRANT SELECT ON SCHEMA :: dbo TO flow_capture; GRANT SELECT ON SCHEMA :: cdc TO flow_capture; -- Create the watermarks table and grant permissions. CREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT); GRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture; -- Enable CDC on tables. The below query enables CDC the watermarks table ONLY. -- You should add similar query for all other tables you intend to capture. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture'; Allow secure connection to Estuary Flow from your hosting environment. Either: Set up an SSH server for tunneling. When you fill out the endpoint configuration, include the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networksfor additional details and a sample. Allowlist the Estuary IP addresses in your firewall rules. ","version":"Next","tagName":"h3"},{"title":"Azure SQL Database​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#azure-sql-database","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Create a new firewall rule that grants access to the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Enable CDC for the database. EXEC sys.sp_cdc_enable_db; -- Create user and password for use with the connector. CREATE LOGIN flow_capture WITH PASSWORD = 'secret'; CREATE USER flow_capture FOR LOGIN flow_capture; -- Grant the user permissions on the CDC schema and schemas with data. -- This assumes all tables to be captured are in the default schema, `dbo`. -- Add similar queries for any other schemas that contain tables you want to capture. GRANT SELECT ON SCHEMA :: dbo TO flow_capture; GRANT SELECT ON SCHEMA :: cdc TO flow_capture; -- Create the watermarks table and grant permissions. CREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT); GRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture; -- Enable CDC on tables. The below query enables CDC the watermarks table ONLY. -- You should add similar query for all other tables you intend to capture. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture'; Note the following important items for configuration: Find the instance's host under Server Name. The port is always 1433. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SQL Server source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"dbo.flow_watermarks" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /primary_key\tPrimary Key Columns\tarray\tThe columns which together form the primary key of the table.\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-sqlserver:dev" config: address: "<host>:1433" database: "my_db" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: dbo primary_key: ["id"] target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Specifying Flow collection keys​","type":1,"pageTitle":"Microsoft SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/#specifying-flow-collection-keys","content":" Every Flow collection must have a key. As long as your SQL Server tables have a primary key specified, the connector will set the corresponding collection's key accordingly. In cases where a SQL Server table you want to capture doesn't have a primary key, you can manually add it to the collection definition during the capture creation workflow. After you input the endpoint configuration and click Next, the tables in your database have been mapped to Flow collections. Click each collection's Specification tab and identify a collection where "key": [ ], is empty. Click inside the empty key value in the editor and input the name of column in the table to use as the key, formatted as a JSON pointer. For example "key": ["/foo"], Make sure the key field is required, not nullable, and of an allowed type. Make any other necessary changes to the collection specification to accommodate this. Repeat with other missing collection keys, if necessary. Save and publish the capture as usual. ","version":"Next","tagName":"h2"},{"title":"Amazon RDS for SQL Server","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#supported-versions-and-platforms","content":" This connector designed for databases using any version of SQL Server which has CDC support, and is regularly tested against SQL Server 2017 and up. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#prerequisites","content":" To capture change events from SQL Server tables using this connector, you need: For each table to be captured, a primary key should be specified in the database. If a table doesn't have a primary key, you must manually specify a key in the associated Flow collection definition while creating the capture.See detailed steps. CDC enabledon the database and the individual tables to be captured. (This creates change tables in the database, from which the connector reads.) A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. A user role with: SELECT permissions on the CDC schema and the schemas that contain tables to be captured.Access to the change tables created as part of the SQL Server CDC process.SELECT, INSERT, and UPDATE permissions on the watermarks table To meet these requirements, follow the steps for your hosting type. Self-hosted SQL ServerAzure SQL DatabaseAmazon RDS for SQL ServerGoogle Cloud SQL for SQL Server ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#setup","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the database, setting Public accessibility to Yes.Edit the VPC security group associated with your database, or create a new VPC security group and associate it with the database as described in the Amazon documentation.Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Enable CDC for the database. EXEC msdb.dbo.rds_cdc_enable_db; -- Create user and password for use with the connector. CREATE LOGIN flow_capture WITH PASSWORD = 'secret'; CREATE USER flow_capture FOR LOGIN flow_capture; -- Grant the user permissions on the CDC schema and schemas with data. -- This assumes all tables to be captured are in the default schema, `dbo`. -- Add similar queries for any other schemas that contain tables you want to capture. GRANT SELECT ON SCHEMA :: dbo TO flow_capture; GRANT SELECT ON SCHEMA :: cdc TO flow_capture; -- Create the watermarks table and grant permissions. CREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT); GRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture; -- Enable CDC on tables. The below query enables CDC the watermarks table ONLY. -- You should add similar query for all other tables you intend to capture. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture'; In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SQL Server source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"dbo.flow_watermarks" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /primary_key\tPrimary Key Columns\tarray\tThe columns which together form the primary key of the table.\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-sqlserver:dev" config: address: "<host>:1433" database: "my_db" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: dbo primary_key: ["id"] target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Specifying Flow collection keys​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/#specifying-flow-collection-keys","content":" Every Flow collection must have a key. As long as your SQL Server tables have a primary key specified, the connector will set the corresponding collection's key accordingly. In cases where a SQL Server table you want to capture doesn't have a primary key, you can manually add it to the collection definition during the capture creation workflow. After you input the endpoint configuration and click Next, the tables in your database have been mapped to Flow collections. Click each collection's Specification tab and identify a collection where "key": [ ], is empty. Click inside the empty key value in the editor and input the name of column in the table to use as the key, formatted as a JSON pointer. For example "key": ["/foo"], Make sure the key field is required, not nullable, and of an allowed type. Make any other necessary changes to the collection specification to accommodate this. Repeat with other missing collection keys, if necessary. Save and publish the capture as usual. ","version":"Next","tagName":"h2"},{"title":"Google Cloud SQL for SQL Server","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/","content":"","keywords":"","version":"Next"},{"title":"Supported versions and platforms​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#supported-versions-and-platforms","content":" This connector is designed for databases using any version of SQL Server which has CDC support, and is regularly tested against SQL Server 2017 and up. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#prerequisites","content":" To capture change events from SQL Server tables using this connector, you need: For each table to be captured, a primary key should be specified in the database. If a table doesn't have a primary key, you must manually specify a key in the associated Flow collection definition while creating the capture.See detailed steps. CDC enabledon the database and the individual tables to be captured. (This creates change tables in the database, from which the connector reads.) A watermarks table. The watermarks table is a small “scratch space” to which the connector occasionally writes a small amount of data to ensure accuracy when backfilling preexisting table contents. A user role with: SELECT permissions on the CDC schema and the schemas that contain tables to be captured.Access to the change tables created as part of the SQL Server CDC process.SELECT, INSERT, and UPDATE permissions on the watermarks table ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#setup","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Enable public IP on your database and add the Estuary Flow IP addresses as authorized IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Enable CDC for the database. EXEC msdb.dbo.gcloudsql_cdc_enable_db '<database>'; -- Create user and password for use with the connector. CREATE LOGIN flow_capture WITH PASSWORD = 'Secret123!'; CREATE USER flow_capture FOR LOGIN flow_capture; -- Grant the user permissions on the CDC schema and schemas with data. -- This assumes all tables to be captured are in the default schema, `dbo`. -- Add similar queries for any other schemas that contain tables you want to capture. GRANT SELECT ON SCHEMA :: dbo TO flow_capture; GRANT SELECT ON SCHEMA :: cdc TO flow_capture; -- Create the watermarks table and grant permissions. CREATE TABLE dbo.flow_watermarks(slot INTEGER PRIMARY KEY, watermark TEXT); GRANT SELECT, INSERT, UPDATE ON dbo.flow_watermarks TO flow_capture; -- Enable CDC on tables. The below query enables CDC the watermarks table ONLY. -- You should add similar query for all other tables you intend to capture. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'flow_watermarks', @role_name = 'flow_capture'; In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 1433. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SQL Server source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tServer Address\tThe host or host:port at which the database can be reached.\tstring\tRequired /database\tDatabase\tLogical database name to capture from.\tstring\tRequired /user\tUser\tThe database user to authenticate as.\tstring\tRequired, "flow_capture" /password\tPassword\tPassword for the specified database user.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/backfill_chunk_size\tBackfill Chunk Size\tThe number of rows which should be fetched from the database in a single backfill query.\tinteger\t4096 /advanced/skip_backfills\tSkip Backfills\tA comma-separated list of fully-qualified table names which should not be backfilled.\tstring /advanced/watermarksTable\tWatermarks Table\tThe name of the table used for watermark writes during backfills. Must be fully-qualified in '<schema>.<table>' form.\tstring\t"dbo.flow_watermarks" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tNamespace\tThe namespace/schema of the table.\tstring\tRequired /stream\tStream\tTable name.\tstring\tRequired /primary_key\tPrimary Key Columns\tarray\tThe columns which together form the primary key of the table.\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: "ghcr.io/estuary/source-sqlserver:dev" config: address: "<host>:1433" database: "my_db" user: "flow_capture" password: "secret" bindings: - resource: stream: ${TABLE_NAME} namespace: dbo primary_key: ["id"] target: ${PREFIX}/${COLLECTION_NAME} Your capture definition will likely be more complex, with additional bindings for each table in the source database. Learn more about capture definitions. ","version":"Next","tagName":"h3"},{"title":"Specifying Flow collection keys​","type":1,"pageTitle":"Google Cloud SQL for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/#specifying-flow-collection-keys","content":" Every Flow collection must have a key. As long as your SQL Server tables have a primary key specified, the connector will set the corresponding collection's key accordingly. In cases where a SQL Server table you want to capture doesn't have a primary key, you can manually add it to the collection definition during the capture creation workflow. After you input the endpoint configuration and click Next, the tables in your database have been mapped to Flow collections. Click each collection's Specification tab and identify a collection where "key": [ ], is empty. Click inside the empty key value in the editor and input the name of column in the table to use as the key, formatted as a JSON pointer. For example "key": ["/foo"], Make sure the key field is required, not nullable, and of an allowed type. Make any other necessary changes to the collection specification to accommodate this. Repeat with other missing collection keys, if necessary. Save and publish the capture as usual. ","version":"Next","tagName":"h2"},{"title":"Survey Monkey","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#supported-data-resources","content":" The following data resources are supported: SurveysSurvey pagesSurvey questionsSurvey responses By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#prerequisites","content":" You'll need to configure a SurveyMonkey private app to integrate with Flow. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#setup","content":" Go to your your SurveyMonkey apps page and create a new private app.Set the following required scopes: View surveysView responses Deploy the app. This requires a paid SurveyMonkey plan; otherwise, the app will be deleted in 90 days. Once the app is set up, there are two ways to authenticate SurveyMonkey in Flow: using OAuth in the web app, or using an access token with the flowctl CLI. OAuth authentication in the web app​ You'll need the username and password of a SurveyMonkey user that is part of the teamfor which the private app was created. Manual authentication with flowctl​ Note the client ID, secret, and access token for the private app you created. You'll use these in the connector configuration. ","version":"Next","tagName":"h3"},{"title":"Performance considerations​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#performance-considerations","content":" The SurveyMonkey API imposes call limits of 500 per day and 120 per minute. This connector uses caching to avoid exceeding these limits. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the SurveyMonkey source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method. If you're working in the Flow web app, you'll use OAuth2, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tCredentials\tCredentials for the service\tobject\tRequired /credentials/access_token\tAccess Token\tAccess Token for your SurveyMonkey private app.\tstring\tRequired /credentials/client_id\tClient ID\tClient ID associated with your SurveyMonkey private app.\tstring\tRequired /credentials/client_secret\tClient Secret\tClient secret associated with your SurveyMonkey private app.\tstring\tRequired /start_date\tStart Date\tUTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired /survey_ids\tSurvey Monkey survey IDs\tIDs of the surveys from which you'd like to replicate data. If left empty, data from all boards to which you have access will be replicated.\tarray\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tSurveyMonkey resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Survey Monkey","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/#sample","content":" This sample specification reflects the manual authentication method. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-surveymonkey:dev config: credentials: access_token: {secret} client_id: XXXXXXXXXXXXXXXX client_secret: {secret} start_date: 2021-01-25T00:00:00Z bindings: - resource: stream: surveys syncMode: incremental target: ${PREFIX}/surveys {...} ","version":"Next","tagName":"h3"},{"title":"Stripe","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Stripe","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/#supported-data-resources","content":" The following data resources are supported through the Stripe API: Balance transactionsBank accountsChargesCheckout sessionsCheckout sessions line itemsCouponsCustomer balance transactionsCustomersDisputesEventsInvoice itemsInvoice line itemsInvoicesPayment intentsPayoutsPlansProductsPromotion codesRefundsSubscription itemsSubscriptionsTransfers By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Stripe","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/#prerequisites","content":" Account ID of your Stripe account.Secret key for the Stripe API. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Stripe","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Stripe source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Stripe","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/account_id\tAccount ID\tYour Stripe account ID (starts with 'acct_', find yours here https://dashboard.stripe.com/settings/account\tstring\tRequired /client_secret\tSecret Key\tStripe API key (usually starts with 'sk_live_'; find yours here https://dashboard.stripe.com/apikeys\tstring\tRequired /lookback_window_days\tLookback Window in days (Optional)\tWhen set, the connector will always re-export data from the past N days, where N is the value set here. This is useful if your data is frequently updated after creation.\tinteger\t0 /start_date\tReplication start date\tUTC date and time in the format 2017-01-25T00:00:00Z. Only data generated after this date will be replicated.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource from Stripe from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Choosing your start date and lookback window​","type":1,"pageTitle":"Stripe","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/#choosing-your-start-date-and-lookback-window","content":" The connector will continually capture data beginning on the Replication start date you choose. However, some data from the Stripe API is mutable; for example, a draft invoice can be completed at a later date than it was created. To account for this, it's useful to set the Lookback Window. When this is set, at a given point in time, the connector will not only look for new data; it will also capture changes made to data within the window. For example, if you start the connector with the start date of 2022-06-06T00:00:00Z (June 6) and the lookback window of 3, the connector will begin to capture data starting from June 3. As time goes on while the capture remains active, the lookback window rolls forward along with the current timestamp. On June 10, the connector will continue to monitor data starting from June 7 and capture any changes to that data, and so on. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Stripe","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-stripe:dev config: account_id: 00000000 client_secret: <secret> start_date: 2022-06-18T00:00:00Z bindings: - resource: stream: balance_transactions syncMode: incremental target: ${PREFIX}/balancetransactions - resource: stream: bank_accounts syncMode: full_refresh target: ${PREFIX}/bankaccounts - resource: stream: charges syncMode: incremental target: ${PREFIX}/charges - resource: stream: checkout_sessions syncMode: incremental target: ${PREFIX}/checkoutsessions - resource: stream: checkout_sessions_line_items syncMode: incremental target: ${PREFIX}/checkoutsessionslineitems - resource: stream: coupons syncMode: incremental target: ${PREFIX}/coupons - resource: stream: customer_balance_transactions syncMode: full_refresh target: ${PREFIX}/customerbalancetransactions - resource: stream: customers syncMode: incremental target: ${PREFIX}/customers - resource: stream: disputes syncMode: incremental target: ${PREFIX}/disputes - resource: stream: events syncMode: incremental target: ${PREFIX}/events - resource: stream: invoice_items syncMode: incremental target: ${PREFIX}/invoice_items - resource: stream: invoice_line_items syncMode: full_refresh target: ${PREFIX}/invoicelineitems - resource: stream: invoices syncMode: incremental target: ${PREFIX}/invoices - resource: stream: payment_intents syncMode: incremental target: ${PREFIX}/paymentintents - resource: stream: payouts syncMode: incremental target: ${PREFIX}/payouts - resource: stream: plans syncMode: incremental target: ${PREFIX}/plans - resource: stream: products syncMode: incremental target: ${PREFIX}/products - resource: stream: promotion_codes syncMode: incremental target: ${PREFIX}/promotioncodes - resource: stream: refunds syncMode: incremental target: ${PREFIX}/refunds - resource: stream: subscription_items syncMode: full_refresh target: ${PREFIX}/subscriptionitems - resource: stream: subscriptions syncMode: incremental target: ${PREFIX}/subscriptions - resource: stream: transfers syncMode: incremental target: ${PREFIX}/transfers ","version":"Next","tagName":"h3"},{"title":"TikTok Marketing","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#supported-data-resources","content":" The following data resources are supported: Resource\tProduction\tSandboxAdvertisers\tX\tX Ad Groups\tX\tX Ads\tX\tX Campaigns\tX\tX Ads Reports Hourly\tX\tX Ads Reports Daily\tX\tX Ads Reports Lifetime\tX\tX Advertisers Reports Hourly\tX Advertisers Reports Daily\tX Advertisers Reports Lifetime\tX Ad Groups Reports Hourly\tX\tX Ad Groups Reports Daily\tX\tX Ad Groups Reports Lifetime\tX\tX Campaigns Reports Hourly\tX\tX Campaigns Reports Daily\tX\tX Campaigns Reports Lifetime\tX\tX Advertisers Audience Reports Hourly\tX Advertisers Audience Reports Daily\tX Advertisers Audience Reports Lifetime\tX Ad Group Audience Reports Hourly\tX\tX Ad Group Audience Reports Daily\tX\tX Ads Audience Reports Hourly\tX\tX Ads Audience Reports Daily\tX\tX Campaigns Audience Reports By Country Hourly\tX\tX Campaigns Audience Reports By Country Daily\tX\tX By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#prerequisites","content":" Prerequisites differ depending on whether you have a production or sandboxTikTok for Business account, and on whether you'll use the Flow web app or the flowctl CLI. ","version":"Next","tagName":"h2"},{"title":"OAuth authentication in the web app (production accounts)​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#oauth-authentication-in-the-web-app-production-accounts","content":" If you have a TikTok marketing account in production and will use the Flow web app, you'll be able to quickly log in using OAuth. You'll need: A TikTok for Business account with one or more active campaigns. Note the username and password used to sign into this account ","version":"Next","tagName":"h3"},{"title":"Sandbox access token authentication in the web app or CLI​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#sandbox-access-token-authentication-in-the-web-app-or-cli","content":" If you're working in a Sandbox TikTok for Business account, you'll authenticate with an access token in both the web app and CLI. You'll need: A TikTok for Business account. A Sandbox account created under an existingdeveloper application. Generate an access token and note the advertiser ID for the Sandbox. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the TikTok Marketing source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#properties","content":" Endpoint​ The properties in the table below reflect the manual authentication method for Sandbox accounts. If you're using a production account, you'll use OAuth2 to authenticate in the Flow web app, so many of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tAuthentication Method\tAuthentication method\tobject\tRequired /credentials/auth_type\tAuthentication type\tSet to sandbox_access_token to manually authenticate a Sandbox.\tstring\tRequired /credentials/advertiser_id\tAdvertiser ID\tThe Advertiser ID generated for the developer's Sandbox application.\tstring /credentials/access_token\tAccess Token\tThe long-term authorized access token.\tstring /end_date\tEnd Date\tThe date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DD. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the data till the current date.\tstring /report_granularity\tReport Aggregation Granularity\tThe granularity used for aggregating performance data in reports. Choose DAY, LIFETIME, or HOUR.\tstring /start_date\tStart Date\tReplication Start Date\tThe Start Date in format: YYYY-MM-DD. Any data before this date will not be replicated. If this parameter is not set, all data will be replicated.\tstring Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tTikTok resource from which a collection is captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#sample","content":" This sample specification reflects the access token method for Sandbox accounts. captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-tiktok-marketing:dev config: credentials: auth_type: sandbox_access_token access_token: {secret} advertiser_id: {secret} end_date: 2022-01-01 report_granularity: DAY start_date: 2020-01-01 bindings: - resource: stream: campaigns syncMode: incremental target: ${PREFIX}/campaigns {...} ","version":"Next","tagName":"h3"},{"title":"Report aggregation​","type":1,"pageTitle":"TikTok Marketing","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/#report-aggregation","content":" Many of the resources this connector supports are reports. Data in these reports is aggregated into rows based on the granularity you select in the configuration. You can choose hourly, daily, or lifetime granularity. For example, if you choose daily granularity, the report will contain one row for each day. ","version":"Next","tagName":"h2"},{"title":"WooCommerce","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#prerequisites","content":" To set up the WooCommerce source connector with: you need: WooCommerce 3.5+WordPress 4.4+Pretty permalinks in Settings > Permalinks so that the custom endpoints are supported. e.g. /%year%/%monthnum%/%day%/%postname%/A new API key with read permissions and access to Customer key and Customer Secret. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#setup","content":" Follow the steps below to set up the WooCommerce source connector. ","version":"Next","tagName":"h2"},{"title":"Set up WooCommerce​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#set-up-woocommerce","content":" Generate a new Rest API key.Obtain Customer key and Customer Secret. ","version":"Next","tagName":"h3"},{"title":"Set up the WooCommerce connector in Estuary Flow​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#set-up-the-woocommerce-connector-in-estuary-flow","content":" Log into your Estuary Flow account.In the left navigation bar, click on "Captures". In the top-left corner, click "Connector Search".Enter the name for the WooCommerce connector and select "WooCommerce" from the dropdown.Fill in "Customer key" and "Customer Secret" with the data from Step 1 of this guide.Fill in "Shop Name". For example, if your shop URL is https://EXAMPLE.com, the shop name is 'EXAMPLE.com'.Choose the start date you want to start syncing data from. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the WooCommerce source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/customer_key\tCustomer Key\tCustomer Key for API in WooCommerce shop\tstring\tRequired /customer_secret\tCustomer Secret\tCustomer Secret for API in WooCommerce shop\tstring\tRequired /shop_name\tShop Name\tThe name of the store.\tstring\tRequired /start_date\tStart Date\tThe date you would like to replicate data from. Format: YYYY-MM-DD\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your WooCommerce project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#sample","content":" { "properties": { } } ","version":"Next","tagName":"h3"},{"title":"Supported Streams​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#supported-streams","content":" The WooCommerce source connector in Estuary Flow supports the following streams: Coupons (Incremental)Customers (Incremental)Orders (Incremental)Order notesPayment gatewaysProduct attribute termsProduct attributesProduct categoriesProduct reviews (Incremental)Product shipping classesProduct tagsProduct variationsProducts (Incremental)RefundsShipping methodsShipping zone locationsShipping zone methodsShipping zonesSystem status toolsTax classesTax rates ","version":"Next","tagName":"h2"},{"title":"Connector-Specific Features & Highlights​","type":1,"pageTitle":"WooCommerce","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/#connector-specific-features--highlights","content":" Useful links: WooCommerce Rest API Docs. ","version":"Next","tagName":"h2"},{"title":"YouTube Analytics","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"YouTube Analytics","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/#supported-data-resources","content":" The following data resources are supported through the YouTube Analytics APIs: channel_annotations_a1channel_basic_a2channel_cards_a1channel_combined_a2channel_demographics_a1channel_device_os_a2channel_end_screens_a1channel_playback_location_a2channel_province_a2channel_sharing_service_a1channel_subtitles_a2channel_traffic_source_a2playlist_basic_a1playlist_combined_a1playlist_device_os_a1playlist_playback_location_a1playlist_province_a1playlist_traffic_source_a1 By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"YouTube Analytics","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the YouTube Analytics source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"YouTube Analytics","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/client_id\tClient ID\tYour Client ID\tstring\tRequired /client_secret\tSecret Key\tYour Client Secret\tstring\tRequired /refresh_token\tRefresh Token\tYour Refresh Token\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your YouTube Analytics project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"YouTube Analytics","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-youtube-analytics:dev config: credentials: auth_type: OAuth bindings: - resource: stream: channel_annotations_a1 syncMode: incremental target: ${PREFIX}/channel_annotations_a1 {...} ","version":"Next","tagName":"h3"},{"title":"Zendesk Chat","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Zendesk Chat","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/#supported-data-resources","content":" The following data resources are supported through the Zendesk API: AccountsAgentsAgent TimelinesChatsShortcutsTriggersBansDepartmentsGoalsSkillsRolesRouting Settings By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Zendesk Chat","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/#prerequisites","content":" A Zendesk Account with permission to access data from accounts you want to sync.An Access Token. We recommend creating a restricted, read-only key specifically for Estuary access to allow you to control which resources Estuary should be able to access. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Zendesk Chat","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification files. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Zendesk Chat source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Zendesk Chat","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/start_date\tStart Date\tThe date from which you would like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.\tstring\tRequired /subdomain\tSubdomain\tThis is your Zendesk subdomain that can be found in your account URL.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource in Zendesk from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Zendesk Chat","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-zendesk-chat:dev config: credentials: access_token: <secret> credentials: access_token start_date: 2022-03-01T00:00:00Z subdomain: my_subdomain bindings: - resource: stream: accounts syncMode: full_refresh target: ${PREFIX}/accounts ","version":"Next","tagName":"h3"},{"title":"Twilio","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Twilio","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/#supported-data-resources","content":" The following data resources are supported through the Twilio APIs: AccountsAddressesAlertsApplicationsAvailable Phone Number CountriesAvailable Phone Numbers LocalAvailable Phone Numbers MobileAvailable Phone Numbers Toll FreeCallsConference ParticipantsConferencesConversationsConversation MessagesConversation ParticipantsDependent Phone NumbersExecutionsIncoming Phone NumbersFlowsKeysMessage MediaMessagesOutgoing Caller IdsQueuesRecordingsTranscriptionsUsage RecordsUsage Triggers By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Twilio","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/#prerequisites","content":" Twilio Auth Token for authentication. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Twilio","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Twilio source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Twilio","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/account_sid\tAccount ID\tTwilio account SID\tstring\tRequired /auth_token\tAuth Token\tTwilio Auth Token.\tstring\tRequired /start_date\tReplication Start Date\tUTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.\tstring\tRequired /lookback_window\tLookback window\tHow far into the past to look for records. (in minutes)\tinteger\tDefault Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource of your Twilio project from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Twilio","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-twilio:dev config: account_sid: <your account ID> auth_token: <secret> start_date: 2017-01-25T00:00:00Z lookback_window: 7 bindings: - resource: stream: accounts syncMode: full_refresh target: ${PREFIX}/accounts {...} ","version":"Next","tagName":"h3"},{"title":"Dekaf integrations","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/dekaf/","content":"","keywords":"","version":"Next"},{"title":"Available Dekaf integrations​","type":1,"pageTitle":"Dekaf integrations","url":"/pr-preview/pr-1594/reference/Connectors/dekaf/#available-dekaf-integrations","content":" Tinybird ","version":"Next","tagName":"h2"},{"title":"Tinybird","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Tinybird","url":"/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird/#prerequisites","content":" An Estuary account & collectionA Tinybird account & Workspace Connecting Estuary Flow to Tinybird Create a new access token to use for the Tinybird connection. You can do this from the Estuary Admin Dashboard.In your Tinybird Workspace, create a new Data Source and use the Kafka Connector. To configure the connection details, use the following settings. Bootstrap servers: dekaf.estuary.devSASL Mechanism: PLAINSASL Username: {}SASL Password: Estuary Refresh Token (Generate your token in the Estuary Admin Dashboard) Tick the Decode Avro messages with Schema Register box, and use the following settings: URL: https://dekaf.estuary.devUsername: {}Password: The same Estuary Refresh Token as above Click Next and you will see a list of topics. These topics are the collections you have in Estuary. Select the collection you want to ingest into Tinybird, and click Next. Configure your consumer group as needed. Finally, you will see a preview of the Data Source schema. Feel free to make any modifications as required, then click Create Data Source. This will complete the connection with Tinybird, and new data from the Estuary Flow collection will arrive in your Tinybird Data Source in real-time. ","version":"Next","tagName":"h2"},{"title":"Materialization connectors","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/","content":"","keywords":"","version":"Next"},{"title":"Available materialization connectors​","type":1,"pageTitle":"Materialization connectors","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/#available-materialization-connectors","content":" AlloyDB ConfigurationPackage - ghcr.io/estuary/materialize-alloydb:dev Amazon DynamoDB ConfigurationPackage - ghcr.io/estuary/materialize-dynamodb:dev Amazon Redshift ConfigurationPackage - ghcr.io/estuary/materialize-redshift:dev Amazon SQL Server ConfigurationPackage - ghcr.io/estuary/materialize-amazon-rds-sqlserver:dev Apache Iceberg Tables in S3 ConfigurationPackage — ghcr.io/estuary/materialize-s3-iceberg:dev Apache Parquet Files in GCS ConfigurationPackage — ghcr.io/estuary/materialize-gcs-parquet:dev Apache Parquet Files in S3 ConfigurationPackage — ghcr.io/estuary/materialize-s3-parquet:dev Azure SQL Server Configuration CSV Files in GCS ConfigurationPackage — ghcr.io/estuary/materialize-gcs-csv:dev CSV Files in S3 ConfigurationPackage — ghcr.io/estuary/materialize-s3-csv:dev Databricks ConfigurationPackage — ghcr.io/estuary/materialize-databricks:dev Elasticsearch ConfigurationPackage — ghcr.io/estuary/materialize-elasticsearch:dev Firebolt ConfigurationPackage - ghcr.io/estuary/materialize-firebolt:dev Google BigQuery ConfigurationPackage — ghcr.io/estuary/materialize-bigquery:dev Google Cloud Pub/Sub ConfigurationPackage - ghcr.io/estuary/materialize-google-pubsub:dev Google Cloud SQL Server ConfigurationPackage = ghcr.io/estuary/materialize-google-cloud-sql-sqlserver:dev MongoDB ConfigurationPackage - ghcr.io/estuary/materialize-mongodb:dev MotherDuck ConfigurationPackage - ghcr.io/estuary/materialize-motherduck:dev MySQL ConfigurationPackage - ghcr.io/estuary/materialize-mysql:dev Pinecone ConfigurationPackage — ghcr.io/estuary/materialize-pinecone:dev PostgreSQL ConfigurationPackage — ghcr.io/estuary/materialize-postgres:dev Rockset ConfigurationPackage — ghcr.io/estuary/materialize-rockset:dev Snowflake ConfigurationPackage — ghcr.io/estuary/materialize-snowflake:dev SQLite ConfigurationPackage — ghcr.io/estuary/materialize-sqlite:dev SQL Server ConfigurationPackage - ghcr.io/estuary/materialize-sqlserver:dev TimescaleDB ConfigurationPackage - ghcr.io/estuary/materialize-timescaledb:dev ","version":"Next","tagName":"h2"},{"title":"Amazon DynamoDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/#prerequisites","content":" To use this connector, you'll need: An IAM user with the followingpermissions: BatchGetItem on all resourcesBatchWriteItem on all resourcesCreateTable on all resources These permissions should be specified with the dynamodb: prefix in an IAM policy document. For more details and examples, see Using identity-based policies with Amazon DynamoDBin the Amazon docs. The AWS access key and secret access key for the user. See the AWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Collection Requirements​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/#collection-requirements","content":" Materialized collections can have at most 2 collection keys. By default, the materialized tables will include the collection keys as the DynamoDB partition key and sort key, and the root document. The root document is materialized as "flow_document" unless an alternate projection is configured for the source collection. Additional fields may be included, but DynamoDB has a 400KB size limit on an individual row so selecting too many fields of a collection with large documents will cause errors if the row size exceeds that. The root document is materialized as a DynamoDB Map type, and the fields of the document must be valid DynamoDB Map keys. To resolve issues with collections with more than 2 keys, excessively large documents, or incompatible field names, use a derivation to derive a new collection and materialize that collection instead. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the DynamoDB materialization connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/awsAccessKeyId\tAccess Key ID\tAWS Access Key ID for materializing to DynamoDB.\tstring\tRequired /awsSecretAccessKey\tSecret Access Key\tAWS Secret Access Key for materializing to DynamoDB.\tstring\tRequired /region\tAWS Region\tRegion of the materialized tables.\tstring\tRequired advanced/endpoint\tAWS Endpoint\tThe AWS endpoint URI to connect to. Use if you're materializing to a compatible API that isn't provided by AWS.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable Name\tThe name of the table to be materialized to.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates. Default is false.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon DynamoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/#sample","content":" materializations: ${PREFIX}/${MATERIALIZATION_NAME}: endpoint: connector: image: ghcr.io/estuary/materialize-dynamodb:dev config: awsAccessKeyId: "example-aws-access-key-id" awsSecretAccessKey: "example-aws-secret-access-key" region: "us-east-1" bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Zendesk Support","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/","content":"","keywords":"","version":"Next"},{"title":"Supported data resources​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#supported-data-resources","content":" The following data resources are supported through the Zendesk API: Account attributesAttribute definitionsAudit logsBrandsCustom rolesGroup membershipsGroupsMacrosOrganizationsOrganization membershipsPostsPost commentsPost comment votesPost votesSatisfaction ratingsSchedulesSLA policiesTagsTicket auditsTicket commentsTicket fieldsTicket formsTicket metricsTicket metric eventsTicket skipsTicketsUsers By default, each resource is mapped to a Flow collection through a separate binding. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#prerequisites","content":" There are two different ways to authenticate with Zendesk Support when capturing data into Flow: using OAuth2 or providing an API token. The prerequisites for both authentication methods are listed below. ","version":"Next","tagName":"h2"},{"title":"OAuth2 authentication​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#oauth2-authentication","content":" Subdomain of your Zendesk URL. In the URL https://MY_SUBDOMAIN.zendesk.com/, MY_SUBDOMAIN is the subdomain. ","version":"Next","tagName":"h3"},{"title":"API token authentication​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#api-token-authentication","content":" Subdomain of your Zendesk URL. In the URL https://MY_SUBDOMAIN.zendesk.com/, MY_SUBDOMAIN is the subdomain.Email address associated with your Zendesk account.A Zendesk API token. See the Zendesk docs to enable tokens and generate a new token. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the catalog specification files. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Zendesk Support source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/credentials/credentials\tCredentials method\tType of credentials used. Set to api_token or oauth2.0.\tstring\tRequired /credentials/api_token\tAPI Token\tThe value of the API token generated.\tstring\tRequired for API token authentication /credentials/email\tEmail\tThe user email for your Zendesk account.\tstring\tRequired for API token authentication /credentials/client_id\tOAuth Client ID\tThe OAuth app's client ID.\tstring\tRequired for OAuth2 authentication /credentials/client_secret\tOAuth Client Secret\tThe OAuth app's client secret.\tstring\tRequired for OAuth2 authentication /credentials/access_token\tAccess Token\tThe access token received from the OAuth app.\tstring\tRequired for OAuth2 authentication /start_date\tStart Date\tThe date from which you'd like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.\tstring\tRequired /subdomain\tSubdomain\tThis is your Zendesk subdomain that can be found in your account URL. For example, in https://MY_SUBDOMAIN.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/stream\tStream\tResource in Zendesk from which collections are captured.\tstring\tRequired /syncMode\tSync Mode\tConnection method.\tstring\tRequired cursorField\tCursor Field\tField to use as a cursor when paginating through results. Required when syncMode is incremental.\tstring\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Zendesk Support","url":"/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/#sample","content":" captures: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/source-zendesk-support:dev config: credentials: api_token: <secret> credentials: api_token email: user@domain.com start_date: 2022-03-01T00:00:00Z subdomain: my_subdomain bindings: - resource: stream: account_attributes syncMode: full_refresh target: ${PREFIX}/accountattributes - resource: stream: attribute_definitions syncMode: full_refresh target: ${PREFIX}/attributedefinitions - resource: stream: audit_logs syncMode: incremental cursorField: - created_at target: ${PREFIX}/auditlogs - resource: stream: brands syncMode: full_refresh target: ${PREFIX}/brands - resource: stream: custom_roles syncMode: full_refresh target: ${PREFIX}/customroles - resource: stream: group_memberships syncMode: incremental cursorField: - updated_at target: ${PREFIX}/groupmemberships - resource: stream: groups syncMode: incremental cursorField: - updated_at target: ${PREFIX}/groups - resource: stream: macros syncMode: incremental cursorField: - updated_at target: ${PREFIX}/macros - resource: stream: organizations syncMode: incremental cursorField: - updated_at target: ${PREFIX}/organizations - resource: stream: organization_memberships syncMode: incremental cursorField: - updated_at target: ${PREFIX}/organizationmemberships - resource: stream: posts syncMode: incremental cursorField: - updated_at target: ${PREFIX}/posts - resource: stream: post_comments syncMode: full_refresh target: ${PREFIX}/postcomments - resource: stream: post_comment_votes syncMode: full_refresh target: ${PREFIX}/postcommentvotes - resource: stream: post_votes syncMode: full_refresh target: ${PREFIX}/postvotes - resource: stream: satisfaction_ratings syncMode: incremental cursorField: - updated_at target: ${PREFIX}/satisfactionratings - resource: stream: schedules syncMode: full_refresh target: ${PREFIX}/schedules - resource: stream: sla_policies syncMode: full_refresh target: ${PREFIX}/slapoliciies - resource: stream: tags syncMode: full_refresh target: ${PREFIX}/tags - resource: stream: ticket_audits syncMode: incremental cursorField: - created_at target: ${PREFIX}/ticketaudits - resource: stream: ticket_comments syncMode: incremental cursorField: - created_at target: ${PREFIX}/ticketcomments - resource: stream: ticket_fields syncMode: incremental cursorField: - updated_at target: ${PREFIX}/ticketfields - resource: stream: ticket_forms syncMode: incremental cursorField: - updated_at target: ${PREFIX}/ticketforms - resource: stream: ticket_metrics syncMode: incremental cursorField: - updated_at target: ${PREFIX}/ticketmetrics - resource: stream: ticket_metric_events syncMode: incremental cursorField: - time target: ${PREFIX}/ticketmetricevents - resource: stream: ticket_skips syncMode: incremental cursorField: - updated_at target: ${PREFIX}/ticketskips - resource: stream: tickets syncMode: incremental cursorField: - after_cursor target: ${PREFIX}/tickets - resource: stream: users syncMode: incremental cursorField: - after_cursor target: ${PREFIX}/users ","version":"Next","tagName":"h3"},{"title":"AlloyDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/#prerequisites","content":" To use this connector, you'll need: An AlloyDB database to which to materialize, and user credentials. The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.A virtual machine to connect securely to the instance via SSH tunneling. (AlloyDB doesn't support IP allowlisting.) Follow the instructions to create a virtual machine for SSH tunnelingin the same Google Cloud project as your instance. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a AlloyDB materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/#properties","content":" Endpoint​ The SSH config section is required for this connector. You'll fill in the database address with a localhost IP address, and specify your VM's IP address as the SSH address. See the table below and the sample config. Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring /address\tAddress\tHost and port. Set to 127.0.0.1:5432 to enable SSH tunneling.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /schema\tDatabase Schema\tDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables\tstring\t"public" /user\tUser\tDatabase user to connect as.\tstring\tRequired networkTunnel\tNetwork Tunnel\tConnect to your system through an SSH server that acts as a bastion host for your network.\tObject networkTunnel/sshForwarding\tSSH Forwarding Object networkTunnel/sshForwarding/sshEndpoint\tSSH Endpoint\tEndpoint of the remote SSH server (in this case, your Google Cloud VM) that supports tunneling (in the form of ssh://user@address.\tString networkTunnel/sshForwarding/privateKey\tSSH Private Key\tPrivate key to connect to the remote SSH server.\tString\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/additional_table_create_sql\tAdditional Table Create SQL\tAdditional SQL statement(s) to be run in the same transaction that creates the table.\tstring /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse /schema\tAlternative Schema\tAlternative schema for this table (optional). Overrides schema set in endpoint configuration.\tstring /table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-alloydb:dev config: database: postgres address: 127.0.0.1:5432 password: flow user: flow networkTunnel: sshForwarding: sshEndpoint: ssh://sshUser@<vm-ip-address> privateKey: |2 -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCJO7G6R+kv2MMS8Suw21sk2twHg8Vog0fjimEWJEwyAfFM/Toi EJ6r5RTaSvN++/+MPWUll7sUdOOBZr6ErLKLHEt7uXxusAzOjMxFKZpEARMcjwHY v/tN1A2OYU0qay1DOwknEE0i+/Bvf8lMS7VDjHmwRaBtRed/+iAQHf128QIDAQAB AoGAGoOUBP+byAjDN8esv1DCPU6jsDf/Tf//RbEYrOR6bDb/3fYW4zn+zgtGih5t CR268+dwwWCdXohu5DNrn8qV/Awk7hWp18mlcNyO0skT84zvippe+juQMK4hDQNi ywp8mDvKQwpOuzw6wNEitcGDuACx5U/1JEGGmuIRGx2ST5kCQQDsstfWDcYqbdhr 5KemOPpu80OtBYzlgpN0iVP/6XW1e5FCRp2ofQKZYXVwu5txKIakjYRruUiiZTza QeXRPbp3AkEAlGx6wMe1l9UtAAlkgCFYbuxM+eRD4Gg5qLYFpKNsoINXTnlfDry5 +1NkuyiQDjzOSPiLZ4Abpf+a+myjOuNL1wJBAOwkdM6aCVT1J9BkW5mrCLY+PgtV GT80KTY/d6091fBMKhxL5SheJ4SsRYVFtguL2eA7S5xJSpyxkadRzR0Wj3sCQAvA bxO2fE1SRqbbF4cBnOPjd9DNXwZ0miQejWHUwrQO0inXeExNaxhYKQCcnJNUAy1J 6JfAT/AbxeSQF3iBKK8CQAt5r/LLEM1/8ekGOvBh8MAQpWBW771QzHUN84SiUd/q xR9mfItngPwYJ9d/pTO7u9ZUPHEoat8Ave4waB08DsI= -----END RSA PRIVATE KEY----- bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Reserved words​","type":1,"pageTitle":"AlloyDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/#reserved-words","content":" PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation. These reserve words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words abs\tcurrent_transform_group_for_type\tindicator\torder\tsqlexception absolute\tcurrent_user\tinitial\tout\tsqlstate acos\tcursor\tinitially\touter\tsqlwarning action\tcycle\tinner\toutput\tsqrt add\tdatalink\tinout\tover\tstart all\tdate\tinput\toverlaps\tstatic allocate\tday\tinsensitive\toverlay\tstddev_pop alter\tdeallocate\tinsert\tpad\tstddev_samp analyse\tdec\tint\tparameter\tsubmultiset analyze\tdecfloat\tinteger\tpartial\tsubset and\tdecimal\tintersect\tpartition\tsubstring any\tdeclare\tintersection\tpattern\tsubstring_regex are\tdefault\tinterval\tper\tsucceeds array\tdeferrable\tinto\tpercent\tsum array_agg\tdeferred\tis\tpercentile_cont\tsymmetric array_max_cardinality\tdefine\tisnull\tpercentile_disc\tsystem as\tdelete\tisolation\tpercent_rank\tsystem_time asc\tdense_rank\tjoin\tperiod\tsystem_user asensitive\tderef\tjson_array\tpermute\ttable asin\tdesc\tjson_arrayagg\tplacing\ttablesample assertion\tdescribe\tjson_exists\tportion\ttan asymmetric\tdescriptor\tjson_object\tposition\ttanh at\tdeterministic\tjson_objectagg\tposition_regex\ttemporary atan\tdiagnostics\tjson_query\tpower\tthen atomic\tdisconnect\tjson_table\tprecedes\ttime authorization\tdistinct\tjson_table_primitive\tprecision\ttimestamp avg\tdlnewcopy\tjson_value\tprepare\ttimezone_hour begin\tdlpreviouscopy\tkey\tpreserve\ttimezone_minute begin_frame\tdlurlcomplete\tlag\tprimary\tto begin_partition\tdlurlcompleteonly\tlanguage\tprior\ttrailing between\tdlurlcompletewrite\tlarge\tprivileges\ttransaction bigint\tdlurlpath\tlast\tprocedure\ttranslate binary\tdlurlpathonly\tlast_value\tptf\ttranslate_regex bit\tdlurlpathwrite\tlateral\tpublic\ttranslation bit_length\tdlurlscheme\tlead\trange\ttreat blob\tdlurlserver\tleading\trank\ttrigger boolean\tdlvalue\tleft\tread\ttrim both\tdo\tlevel\treads\ttrim_array by\tdomain\tlike\treal\ttrue call\tdouble\tlike_regex\trecursive\ttruncate called\tdrop\tlimit\tref\tuescape cardinality\tdynamic\tlistagg\treferences\tunion cascade\teach\tln\treferencing\tunique cascaded\telement\tlocal\tregr_avgx\tunknown case\telse\tlocaltime\tregr_avgy\tunmatched cast\tempty\tlocaltimestamp\tregr_count\tunnest catalog\tend\tlog\tregr_intercept\tupdate ceil\tend-exec\tlog10\tregr_r2\tupper ceiling\tend_frame\tlower\tregr_slope\tusage char\tend_partition\tmatch\tregr_sxx\tuser character\tequals\tmatches\tregr_sxy\tusing character_length\tescape\tmatch_number\tregr_syy\tvalue char_length\tevery\tmatch_recognize\trelative\tvalues check\texcept\tmax\trelease\tvalue_of classifier\texception\tmeasures\trestrict\tvarbinary clob\texec\tmember\tresult\tvarchar close\texecute\tmerge\treturn\tvariadic coalesce\texists\tmethod\treturning\tvarying collate\texp\tmin\treturns\tvar_pop collation\texternal\tminute\trevoke\tvar_samp collect\textract\tmod\tright\tverbose column\tfalse\tmodifies\trollback\tversioning commit\tfetch\tmodule\trollup\tview concurrently\tfilter\tmonth\trow\twhen condition\tfirst\tmultiset\trows\twhenever connect\tfirst_value\tnames\trow_number\twhere connection\tfloat\tnational\trunning\twidth_bucket constraint\tfloor\tnatural\tsavepoint\twindow constraints\tfor\tnchar\tschema\twith contains\tforeign\tnclob\tscope\twithin continue\tfound\tnew\tscroll\twithout convert\tframe_row\tnext\tsearch\twork copy\tfree\tno\tsecond\twrite corr\tfreeze\tnone\tsection\txml corresponding\tfrom\tnormalize\tseek\txmlagg cos\tfull\tnot\tselect\txmlattributes cosh\tfunction\tnotnull\tsensitive\txmlbinary count\tfusion\tnth_value\tsession\txmlcast covar_pop\tget\tntile\tsession_user\txmlcomment covar_samp\tglobal\tnull\tset\txmlconcat create\tgo\tnullif\tshow\txmldocument cross\tgoto\tnumeric\tsimilar\txmlelement cube\tgrant\toccurrences_regex\tsin\txmlexists cume_dist\tgroup\toctet_length\tsinh\txmlforest current\tgrouping\tof\tsize\txmliterate current_catalog\tgroups\toffset\tskip\txmlnamespaces current_date\thaving\told\tsmallint\txmlparse current_default_transform_group\thold\tomit\tsome\txmlpi current_path\thour\ton\tspace\txmlquery current_role\tidentity\tone\tspecific\txmlserialize current_row\tilike\tonly\tspecifictype\txmltable current_schema\timmediate\topen\tsql\txmltext current_time\timport\toption\tsqlcode\txmlvalidate current_timestamp\tin\tor\tsqlerror\tyear ","version":"Next","tagName":"h2"},{"title":"CSV Files in Amazon S3","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"CSV Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/#prerequisites","content":" To use this connector, you'll need: An S3 bucket to write files to. See this guide for instructions on setting up a new S3 bucket.An AWS root or IAM user with thes3:PutObject permission for the S3 bucket. For this user, you'll need the access key and secret access key. See the AWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"CSV Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/#configuration","content":" Use the below properties to configure the materialization, which will direct one or more of your Flow collections to your bucket. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"CSV Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/bucket\tBucket\tBucket to store materialized objects.\tstring\tRequired /awsAccessKeyId\tAWS Access Key ID\tAccess Key ID for writing data to the bucket.\tstring\tRequired /awsSecretAccessKey\tAWS Secret Access key\tSecret Access Key for writing data to the bucket.\tstring\tRequired /region\tRegion\tRegion of the bucket to write to.\tstring\tRequired /uploadInterval\tUpload Interval\tFrequency at which files will be uploaded.\tstring\t5m /prefix\tPrefix\tOptional prefix that will be used to store objects.\tstring /fileSizeLimit\tFile Size Limit\tApproximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank.\tinteger /endpoint\tCustom S3 Endpoint\tThe S3 endpoint URI to connect to. Use if you're materializing to a compatible API that isn't provided by AWS. Should normally be left blank.\tstring /csvConfig/delimiter\tDelimiter\tCharacter to separate columns within a row. Defaults to a comma if blank. Must be a single character with a byte length of 1.\tinteger /csvConfig/nullString\tNull String\tString to use to represent NULL values. Defaults to an empty string if blank.\tinteger /csvConfig/skipHeaders\tSkip Headers\tDo not write headers to files.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/path\tPath\tThe path that objects will be materialized to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"CSV Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-s3-csv:dev" config: bucket: bucket awsAccessKeyId: <access_key_id> awsSecretAccessKey: <secret_access_key> region: us-east-2 uploadInterval: 5m bindings: - resource: path: ${COLLECTION_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"File Names​","type":1,"pageTitle":"CSV Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/#file-names","content":" Materialized files are named with monotonically increasing integer values, padded with leading 0's so they remain lexically sortable. For example, a set of files may be materialized like this for a given collection: bucket/prefix/path/v0000000000/00000000000000000000.csv bucket/prefix/path/v0000000000/00000000000000000001.csv bucket/prefix/path/v0000000000/00000000000000000002.csv Here the values for bucket and prefix are from your endpoint configuration. The path is specific to the binding configuration. v0000000000 represents the current backfill counterfor binding and will be increased if the binding is re-backfilled, along with the file names starting back over from 0. ","version":"Next","tagName":"h2"},{"title":"Eventual Consistency​","type":1,"pageTitle":"CSV Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/#eventual-consistency","content":" In rare circumstances, recently materialized files may be re-written by files with the same name if the materialization shard is interrupted in the middle of processing a Flow transaction and the transaction must be re-started. Files that were committed as part of a completed transaction will never be re-written. In this way, eventually all collection data will be written to files effectively-once, although inconsistencies are possible when accessing the most recently written data. ","version":"Next","tagName":"h2"},{"title":"Amazon Redshift","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#prerequisites","content":" To use this connector, you'll need: A Redshift cluster accessible either directly or using an SSH tunnel. The user configured to connect to Redshift must have at least "create table" permissions for the configured schema. The connector will create new tables in the database per your specification. Tables created manually in advance are not supported. See setup for more information.An S3 bucket for staging temporary files. For best performance the bucket should be in the same region as your Redshift cluster. See this guide for instructions on setting up a new S3 bucket.An AWS root or IAM user with read and write accessto the S3 bucket. For this user, you'll need the access key and secret access key. See theAWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#configuration","content":" Use the below properties to configure an Amazon Redshift materialization, which will direct one or more of your Flow collections to your desired tables in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tHost and port of the database. Example: red-shift-cluster-name.account.us-east-2.redshift.amazonaws.com:5439\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /database\tDatabase\tName of the logical database to materialize to. The materialization will attempt to connect to the default database for the provided user if omitted.\tstring /schema\tDatabase Schema\tDatabase schema for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables.\tstring\t"public" /awsAccessKeyId\tAccess Key ID\tAWS Access Key ID for reading and writing data to the S3 staging bucket.\tstring\tRequired /awsSecretAccessKey\tSecret Access Key\tAWS Secret Access Key for reading and writing data to the S3 staging bucket.\tstring\tRequired /bucket\tS3 Staging Bucket\tName of the S3 bucket to use for staging data loads.\tstring\tRequired /region\tRegion\tRegion of the S3 staging bucket. For optimal performance this should be in the same region as the Redshift database cluster.\tstring\tRequired /bucketPath\tBucket Path\tA prefix that will be used to store objects in S3.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tName of the database table.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates. Default is false.\tboolean\tfalse /schema\tAlternative Schema\tAlternative schema for this table (optional).\tstring\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-redshift:dev" config: address: "redshift-cluster.account.us-east-2.redshift.amazonaws.com:5439" user: user password: password database: db awsAccessKeyId: access_key_id awsSecretAccessKey: secret_access_key bucket: my-bucket region: us-east-2 bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Sync Schedule​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#sync-schedule","content":" This connector supports configuring a schedule for sync frequency. You can read about how to configure this here. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#setup","content":" You must configure your cluster to allow connections from Estuary. This can be accomplished by making your cluster accessible over the internet for theEstuary Flow IP addresses, or using an SSH tunnel. Connecting to the S3 staging bucket does not use the network tunnel and connects over HTTPS only. Instructions for making a cluster accessible over the internet can be foundhere. When using this option, database connections are made over SSL only. For allowing secure connections via SSH tunneling: Refer to the guide to configure an SSH server on using an AWS EC2 instance. Configure your connector as described in the configuration section above, with the additional of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networks for additional details and a sample. ","version":"Next","tagName":"h2"},{"title":"Naming Conventions​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#naming-conventions","content":" Redshift has requirements for names and identifiers and this connector will automatically apply quoting when needed. All table identifiers and column identifiers (corresponding to Flow collection fields) are treated as lowercase, unless theenable_case_sensitive_identifierconfiguration is enabled on the cluster being materialized to. Table names for bindings must be unique on a case-insensitive basis, as well as field names of the source collection. If any names are not unique on a case-insensitive basis (ex: myField vs. MyField) the materialization will fail to apply. If necessary, you can add projections to your collection specification to change field names. ","version":"Next","tagName":"h2"},{"title":"Performance considerations​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#performance-considerations","content":" For best performance there should at most one Redshift materialization active per Redshift schema. Additional collections to be materialized should be added as bindings to this single materialization rather than creating a separate materialization for each collection. In order to achieve exactly-once processing of collection documents, the materialization creates and uses metadata tables located in the schema configured by the endpoint schema property. To commit a transaction, a table-level lock is acquired on these metadata tables. If there are multiple materializations using the same metadata tables, they will need to take turns acquiring these locks. This locking behavior prevents "serializable isolation violation" errors in the case of multiple materializations sharing the same metadata tables at the expense of allowing only a single materialization to be actively committing a transaction. ","version":"Next","tagName":"h2"},{"title":"Maximum record size​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#maximum-record-size","content":" The maximum size of a single input document is 4 MB. Attempting to materialize collections with documents larger than 4 MB will result in an error. To materialize this data you can use aderivation to create a derived collection with smaller documents, or exclude fields containing excessive amounts of data by customizing the materialized fields. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Amazon Redshift","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Apache Iceberg Tables in Amazon S3","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#prerequisites","content":" To use this connector, you'll need: An S3 bucket to write files to. See this guide for instructions on setting up a new S3 bucket.An AWS root or IAM user with access to AWS Glue. See this guide for instructions on setting up IAM permissions for a user to access AWS Glue. Make sure to select Read and write access for your bucket to enable the connector to write data.For this user, you'll need the access key and secret access key. See the AWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#configuration","content":" Use the below properties to configure the materialization, which will direct one or more of your Flow collections to your tables. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/aws_access_key_id\tAWS Access Key ID\tAccess Key ID for accessing AWS services.\tstring\tRequired /aws_secret_access_key\tAWS Secret Access key\tSecret Access Key for accessing AWS services.\tstring\tRequired /bucket\tBucket\tThe S3 bucket to write data files to.\tstring\tRequired /prefix\tPrefix\tOptional prefix that will be used to store objects.\tstring /region\tRegion\tAWS Region.\tstring\tRequired /namespace\tNamespace\tNamespace for bound collection tables (unless overridden within the binding resource configuration).\tstring\tRequired /upload_interval\tUpload Interval\tFrequency at which files will be uploaded. Must be a valid ISO8601 duration string no greater than 4 hours.\tstring\tPT5M Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tName of the database table.\tstring\tRequired /namespace\tAlternative Namespace\tAlternative namespace for this table (optional).\tstring /delta_updates\tDelta Updates\tShould updates to this table be done via delta updates. Currently this connector only supports delta updates.\tbool\ttrue ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-s3-iceberg:dev" config: aws_access_key_id: <access_key_id> aws_secret_access_key: <secret_access_key> bucket: bucket region: us-east-2 namespace: namespace upload_interval: PT5M bindings: - resource: table: ${COLLECTION_NAME} delta_updates: true source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Iceberg Column Types​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#iceberg-column-types","content":" Flow collection fields are written to Iceberg table columns based on the data type of the field. Iceberg V2 primitive type columns are created for these Flow collection fields: Collection Field Data Type\tIceberg Column Typearray\tstring object\tstring boolean\tboolean integer\tlong number\tdouble string with {contentEncoding: base64}\tbinary string with {format: date-time}\ttimestamptz (with microsecond precision) string with {format: date}\tdate string with {format: integer}\tlong string with {format: number}\tdouble string (all others)\tstring Flow collection fields with {type: string, format: time} and {type: string, format: uuid} are materialized as string columns rather than time and uuid columns for compatibility with Apache Spark. Nested types are not currently supported. ","version":"Next","tagName":"h2"},{"title":"Table Maintenance​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#table-maintenance","content":" To ensure optimal query performance, you should conduct regular maintenance for your materialized tables since the connector will not perform this maintenance automatically (support for automatic table maintenance is planned). If you're using the AWS Glue catalog, you can enable automatic data file compaction by followingthis guide. ","version":"Next","tagName":"h2"},{"title":"At-Least-Once Semantics​","type":1,"pageTitle":"Apache Iceberg Tables in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/#at-least-once-semantics","content":" In rare cases, it may be possible for documents from a source collection to be appended to a target table more than once. Users of materialized tables should take this possibility into consideration when querying these tables. ","version":"Next","tagName":"h2"},{"title":"Apache Parquet Files in Amazon S3","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#prerequisites","content":" To use this connector, you'll need: An S3 bucket to write files to. See this guide for instructions on setting up a new S3 bucket.An AWS root or IAM user with thes3:PutObject permission for the S3 bucket. For this user, you'll need the access key and secret access key. See the AWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#configuration","content":" Use the below properties to configure the materialization, which will direct one or more of your Flow collections to your bucket. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/bucket\tBucket\tBucket to store materialized objects.\tstring\tRequired /awsAccessKeyId\tAWS Access Key ID\tAccess Key ID for writing data to the bucket.\tstring\tRequired /awsSecretAccessKey\tAWS Secret Access key\tSecret Access Key for writing data to the bucket.\tstring\tRequired /region\tRegion\tRegion of the bucket to write to.\tstring\tRequired /uploadInterval\tUpload Interval\tFrequency at which files will be uploaded.\tstring\t5m /prefix\tPrefix\tOptional prefix that will be used to store objects.\tstring /fileSizeLimit\tFile Size Limit\tApproximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank.\tinteger /endpoint\tCustom S3 Endpoint\tThe S3 endpoint URI to connect to. Use if you're materializing to a compatible API that isn't provided by AWS. Should normally be left blank.\tstring /parquetConfig/rowGroupRowLimit\tRow Group Row Limit\tMaximum number of rows in a row group. Defaults to 1000000 if blank.\tinteger /parquetConfig/rowGroupByteLimit\tRow Group Byte Limit\tApproximate maximum number of bytes in a row group. Defaults to 536870912 (512 MiB) if blank.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/path\tPath\tThe path that objects will be materialized to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-s3-parquet:dev" config: bucket: bucket awsAccessKeyId: <access_key_id> awsSecretAccessKey: <secret_access_key> region: us-east-2 uploadInterval: 5m bindings: - resource: path: ${COLLECTION_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Parquet Data Types​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#parquet-data-types","content":" Flow collection fields are written to Parquet files based on the data type of the field. Depending on the field data type, the Parquet data type may be a primitive Parquet type, or a primitive Parquet type extended by alogical Parquet type. Collection Field Data Type\tParquet Data Type\tarray\tJSON (extends BYTE_ARRAY) object\tJSON (extends BYTE_ARRAY) boolean\tBOOLEAN integer\tINT64 number\tDOUBLE string with {contentEncoding: base64}\tBYTE_ARRAY string with {format: date}\tDATE (extends BYTE_ARRAY) string with {format: date-time}\tTIMESTAMP (extends INT64, UTC adjusted with microsecond precision) string with {format: time}\tTIME (extends INT64, UTC adjusted with microsecond precision) string with {format: date}\tDATE (extends INT32) string with {format: duration}\tINTERVAL (extends FIXED_LEN_BYTE_ARRAY with a length of 12) string with {format: uuid}\tUUID (extends FIXED_LEN_BYTE_ARRAY with a length of 16) string (all others)\tSTRING (extends BYTE_ARRAY)\t ","version":"Next","tagName":"h2"},{"title":"File Names​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#file-names","content":" Materialized files are named with monotonically increasing integer values, padded with leading 0's so they remain lexically sortable. For example, a set of files may be materialized like this for a given collection: bucket/prefix/path/v0000000000/00000000000000000000.parquet bucket/prefix/path/v0000000000/00000000000000000001.parquet bucket/prefix/path/v0000000000/00000000000000000002.parquet Here the values for bucket and prefix are from your endpoint configuration. The path is specific to the binding configuration. v0000000000 represents the current backfill counterfor binding and will be increased if the binding is re-backfilled, along with the file names starting back over from 0. ","version":"Next","tagName":"h2"},{"title":"Eventual Consistency​","type":1,"pageTitle":"Apache Parquet Files in Amazon S3","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/#eventual-consistency","content":" In rare circumstances, recently materialized files may be re-written by files with the same name if the materialization shard is interrupted in the middle of processing a Flow transaction and the transaction must be re-started. Files that were committed as part of a completed transaction will never be re-written. In this way, eventually all collection data will be written to files effectively-once, although inconsistencies are possible when accessing the most recently written data. ","version":"Next","tagName":"h2"},{"title":"Google BigQuery","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#prerequisites","content":" To use this connector, you'll need: A new Google Cloud Storage bucket in the same region as the BigQuery destination dataset. A Google Cloud service account with a key file generated and the following roles: roles/bigquery.dataEditor on the destination datasetroles/bigquery.jobUser on the project with which the BigQuery destination dataset is associatedroles/storage.objectAdminon the GCS bucket created above See Setup for detailed steps to set up your service account. tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#setup","content":" To configure your service account, complete the following steps. Log into the Google Cloud console and create a service account. During account creation: Grant the user access to the project.Grant the user roles roles/bigquery.dataEditor, roles/bigquery.jobUser, and roles/storage.objectAdmin.Click Done. Select the new service account from the list of service accounts. On the Keys tab, click Add key and create a new JSON key. The key is automatically downloaded. You'll use it to configure the connector. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a BigQuery materialization, which will direct one or more of your Flow collections to your desired tables within a BigQuery dataset. A BigQuery dataset is the top-level container within a project, and comprises multiple tables. You can think of a dataset as somewhat analogous to a schema in a relational database. For a complete introduction to resource organization in Bigquery, see the BigQuery docs. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/project_id\tProject ID\tThe project ID for the Google Cloud Storage bucket and BigQuery dataset.\tString\tRequired /credentials_json\tService Account JSON\tThe JSON credentials of the service account to use for authorization.\tString\tRequired /region\tRegion\tThe GCS region.\tString\tRequired /dataset\tDataset\tBigQuery dataset for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables.\tString\tRequired /bucket\tBucket\tName of the GCS bucket.\tString\tRequired /bucket_path\tBucket path\tBase path within the GCS bucket. Also called "Folder" in the GCS console.\tString /billing_project_id\tBilling project ID\tThe project ID to which these operations are billed in BigQuery. Typically, you want this to be the same as project_id (the default).\tString\tSame as project_id To learn more about project billing, see the BigQuery docs. Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable in the BigQuery dataset to store materialized result in.\tstring\tRequired /dataset\tTable\tAlternative dataset for this table. Must be located in the region set in the endpoint configuration.\tstring /delta_updates\tDelta updates.\tWhether to use standard or delta updates\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: project_id: our-bigquery-project dataset: materialized-data region: US bucket: our-gcs-bucket bucket_path: bucket-path/ credentials_json: <secret> image: ghcr.io/estuary/materialize-bigquery:dev bindings: - resource: table: ${table_name} source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Sync Schedule​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#sync-schedule","content":" This connector supports configuring a schedule for sync frequency. You can read about how to configure this here. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. Enabling delta updates will prevent Flow from querying for documents in your BigQuery table, which can reduce latency and costs for large datasets. If you're certain that all events will have unique keys, enabling delta updates is a simple way to improve performance with no effect on the output. However, enabling delta updates is not suitable for all workflows, as the resulting table in BigQuery won't be fully reduced. You can enable delta updates on a per-binding basis: bindings: - resource: table: ${table_name} delta_updates: true source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h2"},{"title":"Table Partitioning​","type":1,"pageTitle":"Google BigQuery","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/#table-partitioning","content":" Tables are automatically created withclustering based on the Flow collection primary keys. Tables are not created with any other partitioning, but pre-existing partitioned tables can be materialized to. It isn't possible to alter the partitioning of an existing table, but you can convert an existing table to one with partitioning by creating a new table and copying the data from the existing table into it. This can be done to tables that the connector is materializing to, as long as the materializing task is temporarily disabled while doing the conversion. To convert an existing materialized table to one with different partitioning: Pause your materialization by disabling it from the UI or editing the task specification with the CLI.Create a new table with the partitioning you want from the data in the existing table: create table <your_dataset>.<your_schema>.<your_table>_copy partition by <your_partitioning> as select * from <your_dataset>.<your_schema>.<your_table>; Verify that the data in <your_table>_copy looks good, then drop the original table: drop table <your_dataset>.<your_schema>.<your_table>; "Rename" <your_table>_copy back to <your_table> by copying it as a new table with the original name of <your_table>: create table <your_dataset>.<your_schema>.<your_table> copy <your_dataset>.<your_schema>.<your_table>_copy; Verify that the data in <your_table> looks good, then drop the <your_table>_copy table: drop table <your_dataset>.<your_schema>.<your_table>_copy; Re-enable the materialization to continue materializing data to the now partitioned table. ","version":"Next","tagName":"h2"},{"title":"Databricks","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#prerequisites","content":" To use this connector, you'll need: A Databricks account that includes: A unity catalogA SQL WarehouseA schema — a logical grouping of tables in a catalogA user with a role assigned that grants the appropriate access levels to these resources. At least one Flow collection tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#setup","content":" You need to first create a SQL Warehouse if you don't already have one in your account. See Databricks documentation on configuring a Databricks SQL Warehouse. After creating a SQL Warehouse, you can find the details necessary for connecting to it under the Connection Details tab. In order to save on costs, we recommend that you set the Auto Stop parameter for your SQL warehouse to the minimum available. Estuary's Databricks connector automatically delays updates to the destination according to the configured Sync Schedule (see configuration details below), with a default delay value of 30 minutes. You also need an access token for your user to be used by our connector, see the respective documentation from Databricks on how to create an access token. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Databricks materialization, which will direct one or more of your Flow collections to new Databricks tables. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tHost and port of the SQL warehouse (in the form of host[:port]). Port 443 is used as the default if no specific port is provided.\tstring\tRequired /http_path\tHTTP Path\tHTTP path of your SQL warehouse\tstring\tRequired /catalog_name\tCatalog Name\tName of your Unity Catalog\tstring\tRequired /schema_name\tSchema Name\tDefault schema to materialize to\tstring\tdefault schema is used /credentials\tCredentials\tAuthentication credentials\tobject /credentials/auth_type\tRole\tAuthentication type, set to PAT for personal access token\tstring\tRequired /credentials/personal_access_token\tRole\tPersonal Access Token\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name\tstring\tRequired /schema\tAlternative Schema\tAlternative schema for this table\tstring\tRequired /delta_updates\tDelta updates\tWhether to use standard or delta updates\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: address: dbc-abcdefgh-a12b.cloud.databricks.com catalog_name: main http_path: /sql/1.0/warehouses/abcd123efgh4567 schema_name: default credentials: auth_type: PAT personal_access_token: secret image: ghcr.io/estuary/materialize-databricks:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: table: ${table_name} schema: default source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Sync Schedule​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#sync-schedule","content":" This connector supports configuring a schedule for sync frequency. You can read about how to configure this here. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. Enabling delta updates will prevent Flow from querying for documents in your Databricks table, which can reduce latency and costs for large datasets. If you're certain that all events will have unique keys, enabling delta updates is a simple way to improve performance with no effect on the output. However, enabling delta updates is not suitable for all workflows, as the resulting table in Databricks won't be fully reduced. You can enable delta updates on a per-binding basis: bindings: - resource: table: ${table_name} schema: default delta_updates: true source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Databricks","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/#reserved-words","content":" Databricks has a list of reserved words that must be quoted in order to be used as an identifier. Flow automatically quotes fields that are in the reserved words list. You can find this list in Databricks's documentation here and in the table below. caution In Databricks, objects created with quoted identifiers must always be referenced exactly as created, including the quotes. Otherwise, SQL statements and queries can result in errors. See the Databricks docs. Reserved words\tANTI EXCEPT\tFULL INNER\tINTERSECT JOIN\tLATERAL LEFT\tMINUS NATURAL\tON RIGHT\tSEMI SEMI\tUSING NULL\tDEFAULT TRUE\tFALSE CROSS\t ","version":"Next","tagName":"h2"},{"title":"Elasticsearch","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#prerequisites","content":" To use this connector, you'll need: An Elastic cluster with a known endpointThe role used to connect to Elasticsearch must have at least the following privileges (see Elastic's documentation on defining roles and security privileges): Cluster privilege of monitorFor each index to be created: read, write, view_index_metadata, and create_index. When creating Index privileges, you can use a wildcard "*" to grant the privileges to all indices. At least one Flow collection tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure an Elasticsearch materialization, which will direct the contents of these Flow collections into Elasticsearch indices. Authentication You can authenticate to Elasticsearch using either a username and password, or using an API key. The connector will automatically create an Elasticsearch index for each binding of the materialization with index mappings for each selected field of the binding. It uses the last component of the collection name as the name of the index by default. You can customize the name of the index using the index property in the resource configuration for each binding. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/endpoint\tEndpoint\tEndpoint host or URL. Must start with http:// or https://. If using Elastic Cloud this follows the format https://CLUSTER_ID.REGION.CLOUD_PLATFORM.DOMAIN:PORT\tstring\tRequired /credentials object\tRequired /credentials/username\tUsername\tUsername to use for authenticating with Elasticsearch.\tstring /credentials/password\tPassword\tPassword to use for authenticating with Elasticsearch.\tstring /credentials/apiKey\tAPI Key\tAPI key for authenticating with the Elasticsearch API. Must be the 'encoded' API key credentials, which is the Base64-encoding of the UTF-8 representation of the id and api_key joined by a colon (:).\tstring advanced/number_of_replicas\tIndex Replicas\tThe number of replicas to create new indices with. Leave blank to use the cluster default.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/index\tindex\tName of the Elasticsearch index to store the materialization results.\tstring\tRequired /delta_updates\tDelta updates\tWhether to use standard or delta updates.\tboolean\tfalse /number_of_shards\tNumber of shards\tThe number of shards to create the index with. Leave blank to use the cluster default.\tinteger\t1 ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#sample","content":" materializations: PREFIX/mat_name: endpoint: connector: # Path to the latest version of the connector, provided as a Docker image image: ghcr.io/estuary/materialize-elasticsearch:dev config: endpoint: https://ec47fc4d2c53414e1307e85726d4b9bb.us-east-1.aws.found.io:9243 credentials: username: flow_user password: secret # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: index: my-elasticsearch-index source: PREFIX/source_collection ","version":"Next","tagName":"h3"},{"title":"Setup​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#setup","content":" You must configure your Elasticsearch cluster to allow connections from Estuary. It may be necessary to allowlist the Estuary IP addresses. Alternatively, you can allow secure connections via SSH tunneling. To do so: Refer to the guide to configure an SSH server on the cloud platform of your choice. Configure your connector as described in the configuration section above, with the addition of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networks for additional details and a sample. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#delta-updates","content":" This connector supports both standard and delta updates. You must choose an option for each binding. Learn more about delta updates and the implications of using each update type. ","version":"Next","tagName":"h2"},{"title":"Keyword Fields​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#keyword-fields","content":" Collection fields with type: string will have keyword index mappings created for them if they are part of the collection key, and text mappings for them if they are not part of the collection key. To materialize a collection field with type: string as a keyword mapping instead of a textmapping, configure the field selection for the binding to indicate which fields should having keyword mappings created for them using the key and value of "keyword": true. This can be changed by updating the JSON in the Advanced Specification Editor in the web app or by using flowctl to edit the specification directly, seeedit a materialization for more details. An example JSON configuration for a binding that materializes stringField as a keyword mapping is shown below: { "bindings": [ { "resource": { "index": "my-elasticsearch-index" }, "source": "PREFIX/source_collection", "fields": { "include": { "stringField": { "keyword": true } }, "recommended": true } } ] } ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Elasticsearch","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V3: 2023-08-21​ Index mappings will now be created based on the selected fields of the materialization. Previously only dynamic runtime mappings were created, and the entire root document was always materialized. Moved "number of replicas" configuration for new indices to an advanced, optional, endpoint-level configuration. The "number of shards" resource configuration is now optional. ","version":"Next","tagName":"h2"},{"title":"Firebolt","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#prerequisites","content":" To use this connector, you'll need: A Firebolt database with at least one engine The engine must be started before creating the materialization.It's important that the engine stays up throughout the lifetime of the materialization. To ensure this is the case, select Edit Engine on your engine. In the engine settings, set Auto-stop engine after to Always On. An S3 bucket where JSON documents will be stored prior to loading The bucket must be in a supported AWS region matching your Firebolt database.The bucket may be public, or may be accessible by an IAM user. To configure your IAM user, see the steps below. At least one Flow collection tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#setup","content":" For non-public buckets, you'll need to configure access in AWS IAM. Follow the Firebolt documentation to set up an IAM policy and role, and add it to the external table definition. Create a new IAM user. During setup: Choose Programmatic (access key) access. This ensures that an access key ID and secret access key are generated. You'll use these to configure the connector. On the Permissions page, choose Attach existing policies directly and attach the policy you created in step 1. After creating the user, download the IAM credentials file. Take note of the access key ID and secret access key and use them to configure the connector. See the Amazon docs if you lose your credentials. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Firebolt materialization, which will direct Flow data to your desired Firebolt tables via an external table. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/aws_key_id\tAWS key ID\tAWS access key ID for accessing the S3 bucket.\tstring /aws_region\tAWS region\tAWS region the bucket is in.\tstring /aws_secret_key\tAWS secret access key\tAWS secret key for accessing the S3 bucket.\tstring /database\tDatabase\tName of the Firebolt database.\tstring\tRequired /engine_url\tEngine URL\tEngine URL of the Firebolt database, in the format: <engine-name>.<organization>.<region>.app.firebolt.io.\tstring\tRequired /password\tPassword\tFirebolt password.\tstring\tRequired /s3_bucket\tS3 bucket\tName of S3 bucket where the intermediate files for external table will be stored.\tstring\tRequired /s3_prefix\tS3 prefix\tA prefix for files stored in the bucket.\tstring /username\tUsername\tFirebolt username.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tName of the Firebolt table to store materialized results in. The external table will be named after this table with an _external suffix.\tstring\tRequired /table_type\tTable type\tType of the Firebolt table to store materialized results in. See the Firebolt docs for more details.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: database: my-db engine_url: my-db-my-engine-name.my-organization.us-east-1.app.firebolt.io password: secret # For public S3 buckets, only the bucket name is required s3_bucket: my-bucket username: firebolt-user # Path to the latest version of the connector, provided as a Docker image image: ghcr.io/estuary/materialize-firebolt:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: table: table-name table_type: fact source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#delta-updates","content":" Firebolt is an insert-only system; it doesn't support updates or deletes. Because of this, the Firebolt connector operates only in delta updates mode. Firebolt stores all deltas — the unmerged collection documents — directly. In some cases, this will affect how materialized views look in Firebolt compared to other systems that use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Firebolt","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/#reserved-words","content":" Firebolt has a list of reserved words, which my not be used in identifiers. Collections with field names that include a reserved word will automatically be quoted as part of a Firebolt materialization. Reserved words all\tfalse\tor alter\tfetch\torder and\tfirst\touter array\tfloat\tover between\tfrom\tpartition bigint\tfull\tprecision bool\tgenerate\tprepare boolean\tgroup\tprimary both\thaving\tquarter case\tif\tright cast\tilike\trow char\tin\trows concat\tinner\tsample copy\tinsert\tselect create\tint\tset cross\tinteger\tshow current_date\tintersect\ttext current_timestamp\tinterval\ttime database\tis\ttimestamp date\tisnull\ttop datetime\tjoin\ttrailing decimal\tjoin_type\ttrim delete\tleading\ttrue describe\tleft\ttruncate distinct\tlike\tunion double\tlimit\tunknown_char doublecolon\tlimit_distinct\tunnest dow\tlocaltimestamp\tunterminated_string doy\tlong\tupdate drop\tnatural\tusing empty_identifier\tnext\tvarchar epoch\tnot\tweek except\tnull\twhen execute\tnumeric\twhere exists\toffset\twith explain\ton extract\tonly\t ","version":"Next","tagName":"h2"},{"title":"CSV Files in Google GCS","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"CSV Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/#prerequisites","content":" To use this connector, you'll need: A GCS bucket to write files to. See this guide for instructions on setting up a new GCS bucket.A Google Cloud service accountwith roles/storage.objectCreatorfor the GCS bucket created above.A key file for the service account. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"CSV Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/#configuration","content":" Use the below properties to configure the materialization, which will direct one or more of your Flow collections to your bucket. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"CSV Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/bucket\tBucket\tBucket to store materialized objects.\tstring\tRequired /credentialsJson\tService Account JSON\tThe JSON credentials of the service account to use for authorization.\tstring\tRequired /uploadInterval\tUpload Interval\tFrequency at which files will be uploaded.\tstring\t5m /prefix\tPrefix\tOptional prefix that will be used to store objects.\tstring /fileSizeLimit\tFile Size Limit\tApproximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank.\tinteger /csvConfig/delimiter\tDelimiter\tCharacter to separate columns within a row. Defaults to a comma if blank. Must be a single character with a byte length of 1.\tinteger /csvConfig/nullString\tNull String\tString to use to represent NULL values. Defaults to an empty string if blank.\tinteger /csvConfig/skipHeaders\tSkip Headers\tDo not write headers to files.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/path\tPath\tThe path that objects will be materialized to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"CSV Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-gcs-csv:dev" config: bucket: bucket credentialsJson: <credentialsJson> uploadInterval: 5m bindings: - resource: path: ${COLLECTION_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"File Names​","type":1,"pageTitle":"CSV Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/#file-names","content":" Materialized files are named with monotonically increasing integer values, padded with leading 0's so they remain lexically sortable. For example, a set of files may be materialized like this for a given collection: bucket/prefix/path/v0000000000/00000000000000000000.csv bucket/prefix/path/v0000000000/00000000000000000001.csv bucket/prefix/path/v0000000000/00000000000000000002.csv Here the values for bucket and prefix are from your endpoint configuration. The path is specific to the binding configuration. v0000000000 represents the current backfill counterfor binding and will be increased if the binding is re-backfilled, along with the file names starting back over from 0. ","version":"Next","tagName":"h2"},{"title":"Eventual Consistency​","type":1,"pageTitle":"CSV Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/#eventual-consistency","content":" In rare circumstances, recently materialized files may be re-written by files with the same name if the materialization shard is interrupted in the middle of processing a Flow transaction and the transaction must be re-started. Files that were committed as part of a completed transaction will never be re-written. In this way, eventually all collection data will be written to files effectively-once, although inconsistencies are possible when accessing the most recently written data. ","version":"Next","tagName":"h2"},{"title":"Apache Parquet Files in Google GCS","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#prerequisites","content":" To use this connector, you'll need: A GCS bucket to write files to. See this guide for instructions on setting up a new GCS bucket.A Google Cloud service accountwith roles/storage.objectCreatorfor the GCS bucket created above.A key file for the service account. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#configuration","content":" Use the below properties to configure the materialization, which will direct one or more of your Flow collections to your bucket. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/bucket\tBucket\tBucket to store materialized objects.\tstring\tRequired /credentialsJson\tService Account JSON\tThe JSON credentials of the service account to use for authorization.\tstring\tRequired /uploadInterval\tUpload Interval\tFrequency at which files will be uploaded.\tstring\t5m /prefix\tPrefix\tOptional prefix that will be used to store objects.\tstring /fileSizeLimit\tFile Size Limit\tApproximate maximum size of materialized files in bytes. Defaults to 10737418240 (10 GiB) if blank.\tinteger /parquetConfig/rowGroupRowLimit\tRow Group Row Limit\tMaximum number of rows in a row group. Defaults to 1000000 if blank.\tinteger /parquetConfig/rowGroupByteLimit\tRow Group Byte Limit\tApproximate maximum number of bytes in a row group. Defaults to 536870912 (512 MiB) if blank.\tinteger\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/path\tPath\tThe path that objects will be materialized to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-gcs-parquet:dev" config: bucket: bucket credentialsJson: <credentialsJson> uploadInterval: 5m bindings: - resource: path: ${COLLECTION_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Parquet Data Types​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#parquet-data-types","content":" Flow collection fields are written to Parquet files based on the data type of the field. Depending on the field data type, the Parquet data type may be a primitive Parquet type, or a primitive Parquet type extended by alogical Parquet type. Collection Field Data Type\tParquet Data Type\tarray\tJSON (extends BYTE_ARRAY) object\tJSON (extends BYTE_ARRAY) boolean\tBOOLEAN integer\tINT64 number\tDOUBLE string with {contentEncoding: base64}\tBYTE_ARRAY string with {format: date}\tDATE (extends BYTE_ARRAY) string with {format: date-time}\tTIMESTAMP (extends INT64, UTC adjusted with microsecond precision) string with {format: time}\tTIME (extends INT64, UTC adjusted with microsecond precision) string with {format: date}\tDATE (extends INT32) string with {format: duration}\tINTERVAL (extends FIXED_LEN_BYTE_ARRAY with a length of 12) string with {format: uuid}\tUUID (extends FIXED_LEN_BYTE_ARRAY with a length of 16) string (all others)\tSTRING (extends BYTE_ARRAY)\t ","version":"Next","tagName":"h2"},{"title":"File Names​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#file-names","content":" Materialized files are named with monotonically increasing integer values, padded with leading 0's so they remain lexically sortable. For example, a set of files may be materialized like this for a given collection: bucket/prefix/path/v0000000000/00000000000000000000.parquet bucket/prefix/path/v0000000000/00000000000000000001.parquet bucket/prefix/path/v0000000000/00000000000000000002.parquet Here the values for bucket and prefix are from your endpoint configuration. The path is specific to the binding configuration. v0000000000 represents the current backfill counterfor binding and will be increased if the binding is re-backfilled, along with the file names starting back over from 0. ","version":"Next","tagName":"h2"},{"title":"Eventual Consistency​","type":1,"pageTitle":"Apache Parquet Files in Google GCS","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/#eventual-consistency","content":" In rare circumstances, recently materialized files may be re-written by files with the same name if the materialization shard is interrupted in the middle of processing a Flow transaction and the transaction must be re-started. Files that were committed as part of a completed transaction will never be re-written. In this way, eventually all collection data will be written to files effectively-once, although inconsistencies are possible when accessing the most recently written data. ","version":"Next","tagName":"h2"},{"title":"Google Cloud Pub/Sub","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#prerequisites","content":" To use this connector, you'll need: A Google Cloud project with the Google Pub/Sub API enabled.Access to the project. Different items are required to configure access using OAuth in the Flow web app (recommended), and configuring manually.At least one Flow collection to materialize. tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"OAuth authentication using the Flow web app​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#oauth-authentication-using-the-flow-web-app","content":" OAuth is the simplest authentication method, and is supported in the Flow web app. You'll need: A Google account with the role roles/pubsub.editoror equivalent for the Google Cloud project. See the Google IAM documentation to learn about granting roles. You'll supply this account's username and password to authenticate. ","version":"Next","tagName":"h3"},{"title":"Manual authentication​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#manual-authentication","content":" Manual authentication is the only method supported when using flowctl to develop locally. You'll need: A Google service account with the role roles/pubsub.editoror equivalent for the Google Cloud project. See the Google IAM documentation to learn about granting roles. A JSON key for the service account. See the Google documentation for help creating a new service account and generating its key. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Google Cloud Pub/Sub materialization, which will direct one or more of your Flow collections to your desired Pub/Sub topics. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/credentials\tAuthentication\tCredentials used to authenticate with Google.\tarray, boolean, null, number, object, string\tRequired /credentials/auth_type\tAuthentication type\tSet to Service for manual authentication, or use OAuth in the web app.\tstring /credentials/credentials_json\tService Account JSON\tThe JSON key of the service account to use for authorization, if configuring manually.\tstring /project_id\tGoogle Cloud Project ID\tName of the project containing the PubSub topics for this materialization.\tstring\tRequired Bindings​ caution PubSub topics need a default subscription; otherwise, delivered messages will be lost. Leave Create with Default Subscription set to the default, true, unless you have a specific reason not to do so. Property\tTitle\tDescription\tType\tRequired/Default/create_default_subscription\tCreate with Default Subscription\tCreate a default subscription when creating the topic. Will be created as "<topic>-sub". Has no effect if the topic already exists.\tboolean\tRequired, true identifier\tResource Binding Identifier\tOptional identifier for the resource binding if creating a multiplex topic. Included as "identifier" attribute in published messages if specified.\tstring /topic\tTopic Name\tName of the topic to publish materialized results to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#sample","content":" This sample reflects the manual authentication method using the CLI. materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: credentials: auth_type: Service credentials_json: {secret} project_id: my_google_cloud_project bindings: - resource: create_default_subscription: true topic: my_new_topic source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Multiplex topics​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#multiplex-topics","content":" You can materialize multiple Flow collections to the same Pub/Sub topic. This is known as a multiplex topic. You do so by adding the optional identifier field to the binding configuration. When materializing to a multiplex topic, ensure that: The bindings you want to combine have the same topic name.Each binding pulls from a different Flow collectionEach binding has a unique identifier. It can be anything you'd like. The binding configuration will look similar to: bindings: - resource: identifier: one topic: multiplex-topic source: ${PREFIX}/source_collection_one - resource: identifier: two topic: multiplex-topic source: ${PREFIX}/source_collection_two ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#delta-updates","content":" Because Google Cloud Pub/Sub is a write-only event-streaming system, this connector uses only delta updates. ","version":"Next","tagName":"h2"},{"title":"Message ordering​","type":1,"pageTitle":"Google Cloud Pub/Sub","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/#message-ordering","content":" Google Cloud Pub/Sub manages message ordering using ordering keys. This connector sets the ordering key of published messages using the Flow collection keyof the documents being being published. Messages are published in order, on a per-key basis. ","version":"Next","tagName":"h2"},{"title":"HTTP Webhook","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"HTTP Webhook","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/#prerequisites","content":" To use this materialization connector, you’ll need the following: A server or service that can accept HTTP requests at the target endpoint.At least one Flow collection. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"HTTP Webhook","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/#configuration","content":" The Webhooks connector is available for use in the Flow web application. To learn more about connectors and setting them up, visit our guide on using connectors. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"HTTP Webhook","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/#properties","content":" ","version":"Next","tagName":"h2"},{"title":"Endpoint​","type":1,"pageTitle":"HTTP Webhook","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/#endpoint","content":" Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tThe URL of the endpoint to send data to.\tstring\tRequired /method\tHTTP Method\tHTTP method to use (e.g., POST or PUT).\tstring\tdefault: POST /headers\tHeaders\tAdditional headers to include in the HTTP request.\tobject\t ","version":"Next","tagName":"h3"},{"title":"Bindings​","type":1,"pageTitle":"HTTP Webhook","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/#bindings","content":" Property\tTitle\tDescription\tType\tRequired/Default/relativePath\tRelative Path\tThe relative path on the server where data will be sent.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"HTTP Webhook","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/#sample","content":" bindings: - source: ProductionData/orders/orderDetails resource: relativePath: webhook/estuary endpoint: connector: image: ghcr.io/estuary/materialize-webhook:v1 config: address: http://192.168.1.100:3000/ method: POST headers: Content-Type: application/json Authorization: Bearer <your_token> ","version":"Next","tagName":"h2"},{"title":"Google Sheets","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/#prerequisites","content":" To use this connector, you'll need: At least one Flow collection. If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. caution For performance reasons, this connector is limited to 1 million cells per materialized sheet. If a bound collection has more than 1 million unique keys, the materialization will fail. If you plan to materialize a collection with an unbounded number of keys, you should first use a derivation to summarize it into a collection with a bounded set of keys. The URL of a Google spreadsheet that does not contain the output of a prior Flow materialization. caution Materializing data to a spreadsheet that already contains the output of another Flow materialization can result in an error. Use a new spreadsheet for each materialization, or completely clear the output of prior materializations from the spreadsheet before you continue. There are two ways to authenticate with Google when using this connector: signing in with Google through OAuth in the web app, and configuring manually with a Google service account key. OAuth is simpler, and is recommended when using the web app. Only manual configuration is supported using the CLI. Additional prerequisites depend on the authentication method you choose. ","version":"Next","tagName":"h2"},{"title":"OAuth authentication using the Flow web app​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/#oauth-authentication-using-the-flow-web-app","content":" You'll need: The username and password of a Google account with edit access to the destination spreadsheet. ","version":"Next","tagName":"h3"},{"title":"Manual authentication​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/#manual-authentication","content":" You'll need: Google Sheets and Google Drive APIs enabled on your Google account. A Google service account with: A JSON key generated.Edit access to the destination spreadsheet. Follow the steps below to meet these prerequisites: Enable the Google Sheets and Google Drive APIs for the Google project with which your spreadsheet is associated. (Unless you actively develop with Google Cloud, you'll likely just have one option). Create a service account and generate a JSON key. During setup, grant the account the Editor role on your project. You'll copy the contents of the downloaded key file into the Service Account JSON parameter when you configure the connector. Share your Google spreadsheet with the service account, granting edit access. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Google Sheets materialization. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/#properties","content":" Endpoint​ The following properties reflect the manual authentication method. If you're working in the Flow web app, you can use OAuth, so some of these properties aren't required. Property\tTitle\tDescription\tType\tRequired/Default/credentials\tAuthentication\tCredentials used to authenticate with Google.\tarray, boolean, null, number, object, string\tRequired /credentials/auth_type\tAuthentication type\tSet to Service for manual authentication, or use OAuth in the web app.\tstring /credentials/credentials_json\tService Account JSON\tThe JSON key of the service account to use for authorization, when using the Service authentication method.\tstring\tRequired /spreadsheetURL\tSpreadsheet URL\tURL of the spreadsheet to materialize into, which is shared with the service account.\tstring\tRequired Bindings​ Configure a separate binding for each collection you want to materialize to a sheet. Note that the connector will add an addition column to the beginning of each sheet; this is to track the internal state of the data. Property\tTitle\tDescription\tType\tRequired/Default/sheet\tSheet Name\tName of the spreadsheet sheet to materialize into\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Sheets","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/#sample","content":" This sample reflects the manual authentication method using the CLI. materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: credentials: auth_type: Service credentials_json: <secret> spreadsheetURL: `https://docs.google.com/spreadsheets/d/<your_spreadsheet_ID>/edit image: ghcr.io/estuary/materialize-google-sheets:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: sheet: my_sheet source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"MongoDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/","content":"","keywords":"","version":"Next"},{"title":"Data model​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#data-model","content":" MongoDB is a NoSQL database. Its data modelconsists of documents (lightweight records that contain mappings of fields and values) organized in collections. MongoDB documents have a mandatory_id field that is used as the key of the collection. ","version":"Next","tagName":"h2"},{"title":"Prerequisites​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#prerequisites","content":" You'll need: Credentials for connecting to your MongoDB instance and database. Read and write access to your MongoDB database and desired collections. See Role-Based Access Control for more information. If you are using MongoDB Atlas, or your MongoDB provider requires allowlisting of IPs, you need to allowlist the Estuary IP addresses. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#configuration","content":" You configure connectors either in the Flow web app, or by directly editing the Flow specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Firestore source connector. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tHost and port of the database. Optionally can specify scheme for the URL such as mongodb+srv://host.\tstring\tRequired /database\tDatabase\tName of the database to capture from.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/collection\tStream\tCollection name\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#sample","content":" materializations: ${PREFIX}/${CAPTURE_NAME}: endpoint: connector: image: ghcr.io/estuary/materialize-mongodb:dev config: address: "mongo:27017" database: "test" password: "flow" user: "flow" bindings: - resource: collection: users database: test source: ${PREFIX}/users ","version":"Next","tagName":"h3"},{"title":"SSH Tunneling​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#ssh-tunneling","content":" As an alternative to connecting to your MongoDB instance directly, you can allow secure connections via SSH tunneling. To do so: Refer to the guide to configure an SSH server on the cloud platform of your choice. Configure your connector as described in the configuration section above, with the addition of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networks for additional details and a sample. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"MongoDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"MotherDuck","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"MotherDuck","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/#prerequisites","content":" To use this connector, you'll need: A MotherDuck account and Service Token.An S3 bucket for staging temporary files. See this guide for instructions on setting up a new S3 bucket.An AWS root or IAM user with read and write accessto the S3 bucket. For this user, you'll need the access key and secret access key. See theAWS blog for help finding these credentials. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MotherDuck","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/#configuration","content":" Use the below properties to configure MotherDuck materialization, which will direct one or more of your Flow collections to your desired tables in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MotherDuck","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/token\tMotherDuck Service Token\tService token for authenticating with MotherDuck.\tstring\tRequired /database\tDatabase\tThe database to materialize to.\tstring\tRequired /schema\tDatabase Schema\tDatabase schema for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables.\tstring\tRequired /bucket\tS3 Staging Bucket\tName of the S3 bucket to use for staging data loads.\tstring\tRequired /awsAccessKeyId\tAccess Key ID\tAWS Access Key ID for reading and writing data to the S3 staging bucket.\tstring\tRequired /awsSecretAccessKey\tSecret Access Key\tAWS Secret Access Key for reading and writing data to the S3 staging bucket.\tstring\tRequired /bucketPath\tBucket Path\tA prefix that will be used to store objects in S3.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tName of the database table.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean /schema\tAlternative Schema\tAlternative schema for this table (optional).\tstring\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MotherDuck","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-motherduck:dev" config: token: <motherduck_service_token> database: my_db schema: main bucket: my_bucket awsAccessKeyId: <access_key_id> awsSecretAccessKey: <secret_access_key> bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"MotherDuck","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. Enabling delta updates will prevent Flow from querying for documents in your MotherDuck table, which can reduce latency and costs for large datasets. If you're certain that all events will have unique keys, enabling delta updates is a simple way to improve performance with no effect on the output. However, enabling delta updates is not suitable for all workflows, as the resulting table in MotherDuck won't be fully reduced. You can enable delta updates on a per-binding basis: bindings: - resource: table: ${table_name} delta_updates: true source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h2"},{"title":"MySQL HeatWave","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#prerequisites","content":" To use this materialization connector, you’ll need the following: A MySQL HeatWave database and the appropriate user credentials.At least one Flow collection. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#configuration","content":" Select one or more of your Flow collections to start using this connector. The configuration properties below will help you to materialize your collections into tables in MySQL HeatWave. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#properties","content":" ","version":"Next","tagName":"h2"},{"title":"Endpoint​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#endpoint","content":" Property\tTitle\tDescription\tType\tRequired/Default/address\tAddress\tHost and port of the database. If only the host is specified, the port will default to 3306.\tstring\tRequired /database\tDatabase\tName of the logical database to send data to.\tstring\tRequired /user\tUser\tUsername for authentication.\tstring\tRequired /password\tPassword\tPassword for authentication.\tstring\tRequired /timezone\tTimezone\tTimezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read.\tstring\t ","version":"Next","tagName":"h3"},{"title":"Advanced: SSL Mode​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#advanced-ssl-mode","content":" Configuring the SSL mode strengthens security when transferring data to Oracle MySQL HeatWave. Here are the possible values for SSL mode: disabled: Establishes an unencrypted connection with the server.preferred: Initiates the SSL connection only if prompted by the server.required: Establishes an SSL connection but doesn’t verify the server’s certificate.verify_ca: Connects via SSL connection and verifies the server’s certificate against the provided SSL Server CA, without validating the server's hostname. SSL Server CA is mandatory for this mode.verify_identity: Ensures an SSL connection, and verifies both the server's certificate and hostname. This is the highest level of security. SSL Server CA is required for this mode. ","version":"Next","tagName":"h3"},{"title":"Bindings​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#bindings","content":" Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tThe name of the table to send data to.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#sample","content":" materializations: ${PREFIX}/${MAT_NAME}: endpoint: connector: image: ghcr.io/estuary/materialize-mysql-heatwave:dev config: database: flow address: localhost:5432 password: secret user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h2"},{"title":"MySQL HeatWave on Oracle Cloud Infrastructure​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#mysql-heatwave-on-oracle-cloud-infrastructure","content":" This connector supports cloud-based MySQL HeatWave instances hosted on Oracle Cloud Infrastructure (OCI). ","version":"Next","tagName":"h2"},{"title":"SSH Tunneling (Required)​","type":1,"pageTitle":"MySQL HeatWave","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/#ssh-tunneling-required","content":" You are also required to configure SSH tunneling by providing the following: SSH Endpoint: Enter the endpoint of the remote SSH server that supports tunneling (formatted as ssh://user@hostname[:port]).SSH Private Key: Input the full RSA Private Key for SSH connection. ","version":"Next","tagName":"h3"},{"title":"Pinecone","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Pinecone","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/#prerequisites","content":" To use this connector, you'll need: A Pinecone account with an API Key for authentication.An OpenAI account with an API Key for authentication.A Pinecone Index created to store materialized vector embeddings. When using the embedding model text-embedding-ada-002 (recommended), the index must have Dimensions set to 1536. ","version":"Next","tagName":"h2"},{"title":"Embedding Input​","type":1,"pageTitle":"Pinecone","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/#embedding-input","content":" The materialization creates a vector embedding for each collection document. Its structure is based on the collection fields. By default, fields of a single scalar type are including in the embedding: strings, integers, numbers, and booleans. You can include additional array or object type fields using projected fields. The text generated for the embedding has this structure, with field names and their values separated by newlines: stringField: stringValue intField: 3 numberField: 1.2 boolField: false ","version":"Next","tagName":"h2"},{"title":"Pinecone Record Metadata​","type":1,"pageTitle":"Pinecone","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/#pinecone-record-metadata","content":" Pinecone supports metadata fields associated with stored vectors that can be used when performingvector queries. This materialization will include the materialized document as a JSON string in the metadata field flow_document to enable retrieval of the document from vectors returned by Pinecone queries. Pinecone indexes all metadata fields by default. To manage memory usage of the index, use selective metadata indexing to exclude the flow_document metadata field. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Pinecone","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/index\tPinecone Index\tPinecone index for this materialization. Must already exist and have appropriate dimensions for the embedding model used.\tstring\tRequired /environment\tPinecone Environment\tCloud region for your Pinecone project. Example: us-central1-gcp\tstring\tRequired /pineconeApiKey\tPinecone API Key\tPinecone API key used for authentication.\tstring\tRequired /openAiApiKey\tOpenAI API Key\tOpenAI API key used for authentication.\tstring\tRequired /embeddingModel\tEmbedding Model ID\tEmbedding model ID for generating OpenAI bindings. The default text-embedding-ada-002 is recommended.\tstring\t"text-embedding-ada-002" /advanced Options for advanced users. You should not typically need to modify these.\tobject /advaned/openAiOrg\tOpenAI Organization\tOptional organization name for OpenAI requests. Use this if you belong to multiple organizations to specify which organization is used for API requests.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/namespace\tPinecone Namespace\tName of the Pinecone namespace that this collection will materialize vectors into.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Pinecone","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: "ghcr.io/estuary/materialize-pinecone:dev" config: index: your-index environment: us-central1-gcp pineconeApiKey: <YOUR_PINECONE_API_KEY> openAiApiKey: <YOUR_OPENAI_API_KEY> bindings: - resource: namespace: your-namespace source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta Updates​","type":1,"pageTitle":"Pinecone","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/#delta-updates","content":" This connector operates only in delta updates mode. Pinecone upserts vectors based on their id. The idfor materialized vectors is based on the Flow Collection key. For collections with a a top-level reduction strategy ofmerge and a strategy oflastWriteWins for all nested values (this is also the default), collections will be materialized "effectively once", with any updated Flow documents replacing vectors in the Pinecone index if they have the same key. ","version":"Next","tagName":"h2"},{"title":"MySQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#prerequisites","content":" To use this connector, you'll need: A MySQL database to which to materialize, and user credentials. MySQL versions 5.7 and later are supportedThe connector will create new tables in the database per your specification, so user credentials must have access to create new tables.The local_infile global variable must be enabled. You can enable this setting by running SET GLOBAL local_infile = true in your database. At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#setup","content":" To meet these requirements, follow the steps for your hosting type. Amazon RDSGoogle Cloud SQLAzure Database for MySQL In addition to standard MySQL, this connector supports cloud-based MySQL instances. Google Cloud Platform, Amazon Web Service, and Microsoft Azure are currently supported. You may use other cloud platforms, but Estuary doesn't guarantee performance. To connect securely, you can either enable direct access for Flows's IP or use an SSH tunnel. ","version":"Next","tagName":"h2"},{"title":"Azure Database for MySQL​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#azure-database-for-mysql","content":" You must configure your database to allow connections from Estuary. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. Connect Directly With Azure Database For MySQL: Create a new firewall rule that grants access to the Estuary Flow IP addresses Connect With SSH Tunneling: Follow the instructions for setting up an SSH connection to Azure Database. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a MySQL materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring\tRequired /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 3306.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired /timezone\tTimezone\tTimezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring /advanced/ssl_server_ca\tSSL Server CA\tOptional server certificate authority to use when connecting with custom SSL mode\tstring /advanced/ssl_client_cert\tSSL Client Certificate\tOptional client certificate to use when connecting with custom SSL mode.\tstring /advanced/ssl_client_key\tSSL Client Key\tOptional client key to use when connecting with custom SSL mode.\tstring\t ","version":"Next","tagName":"h3"},{"title":"Setting the MySQL time zone​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#setting-the-mysql-time-zone","content":" MySQL's time_zone server system variable is set to SYSTEM by default. If you intend to materialize collections including fields of with format: date-time or format: time, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert datetimes to the appropriate timezone when materializing. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted Specify a named timezone in IANA timezone format. If you're using Amazon Aurora, create or modify the DB cluster parameter groupassociated with your MySQL database.Set the time_zone parameter to the correct value. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs. Materialize Timezone Configuration If you are unable to set the time_zone in the database and need to materialize collections with date-time or time fields, the materialization can be configured to assume a time zone using the timezone configuration property (see above). The timezone configuration property can be set as a numerical offset or IANA timezone format. SSL Mode​ Possible values: disabled: A plain unencrypted connection is established with the serverpreferred: Only use SSL connection if the server asks for itrequired: Connect using an SSL connection, but do not verify the server's certificate.verify_ca: Connect using an SSL connection, and verify the server's certificate against the given SSL Server CA, but does not verify the server's hostname. This option is most commonly used when connecting to an IP address which does not have a hostname to be verified. When using this mode, SSL Server CA must be provided.verify_identity: Connect using an SSL connection, verify the server's certificate and the server's hostname. This is the most secure option. When using this mode, SSL Server CA must be provided. Optionally, SSL Client Certificate and Key can be provided if necessary to authorize the client. Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-mysql:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"MySQL on managed cloud platforms​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#mysql-on-managed-cloud-platforms","content":" In addition to standard MySQL, this connector supports cloud-based MySQL instances. To connect securely, you can either enable direct access for Flows's IP or use an SSH tunnel. Google Cloud Platform, Amazon Web Service, and Microsoft Azure are currently supported. You may use other cloud platforms, but Estuary doesn't guarantee performance. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#setup-1","content":" You must configure your database to allow connections from Estuary. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. Connect directly with Amazon RDS or Amazon Aurora: Edit the VPC security group associated with your database instance, or create a new VPC security group and associate it with the database instance. Modify the instance, choosing Publicly accessible in the Connectivity settings. Per the steps in the Amazon documentation, create a new inbound rule and a new outbound rule that allow all traffic from the IP addresses ``. Connect directly with Google Cloud SQL: Enable public IP on your database and add Estuary Flow IP addresses as authorized IP addresses. See the instructions below to use SSH Tunneling instead of enabling public access. Connect with SSH tunneling Refer to the guide to configure an SSH server on the cloud platform of your choice. Configure your connector as described in the configuration section above, with the additional of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networksfor additional details and a sample. Configuration Tip To configure the connector, you must specify the database address in the formathost:port. (You can also supply host only; the connector will use the port 3306 by default, which is correct in many cases.) You can find the host and port in the following locations in each platform's console: Amazon RDS and Amazon Aurora: host as Endpoint; port as Port.Google Cloud SQL: host as Private IP Address; port is always 3306. You may need to configure private IP on your database.Azure Database: host as Server Name; port under Connection Strings (usually 3306). ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Date & times​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#date--times","content":" Date and time fields that are part of collections, which specify a format: date-time for the field, are automatically converted to UTC and persisted as UTC DATETIME in MySQL. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#reserved-words","content":" MySQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words in the official MySQL documentation. These reserved words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words accessible\tclone\tdescribe\tfloat\tint account\tclose\tdescription\tfloat4\tint1 action\tcoalesce\tdes_key_file\tfloat8\tint2 active\tcode\tdeterministic\tflush\tint3 add\tcollate\tdiagnostics\tfollowing\tint4 admin\tcollation\tdirectory\tfollows\tint8 after\tcolumn\tdisable\tfor\tinteger against\tcolumns\tdiscard\tforce\tintersect aggregate\tcolumn_format\tdisk\tforeign\tinterval algorithm\tcolumn_name\tdistinct\tformat\tinto all\tcomment\tdistinctrow\tfound\tinvisible alter\tcommit\tdiv\tfrom\tinvoker always\tcommitted\tdo\tfull\tio analyse\tcompact\tdouble\tfulltext\tio_after_gtid analyze\tcompletion\tdrop\tfunction\tio_before_gti and\tcomponent\tdual\tgeneral\tio_thread any\tcompressed\tdumpfile\tgenerate\tipc array\tcompression\tduplicate\tgenerated\tis as\tconcurrent\tdynamic\tgeomcollectio\tisolation asc\tcondition\teach\tgeometry\tissuer ascii\tconnection\telse\tgeometrycolle\titerate asensitive\tconsistent\telseif\tget\tjoin at\tconstraint\tempty\tget_format\tjson attribute\tconstraint_ca\tenable\tget_master_pu\tjson_table authenticatio\tconstraint_na\tenclosed\tget_source_pu\tjson_value autoextend_si\tconstraint_sc\tencryption\tglobal\tkey auto_incremen\tcontains\tend\tgrant\tkeyring avg\tcontext\tends\tgrants\tkeys avg_row_lengt\tcontinue\tenforced\tgroup\tkey_block_siz backup\tconvert\tengine\tgrouping\tkill before\tcpu\tengines\tgroups\tlag begin\tcreate\tengine_attrib\tgroup_replica\tlanguage between\tcross\tenum\tgtid_only\tlast bigint\tcube\terror\thandler\tlast_value binary\tcume_dist\terrors\thash\tlateral binlog\tcurrent\tescape\thaving\tlead bit\tcurrent_date\tescaped\thelp\tleading blob\tcurrent_time\tevent\thigh_priority\tleave block\tcurrent_times\tevents\thistogram\tleaves bool\tcurrent_user\tevery\thistory\tleft boolean\tcursor\texcept\thost\tless both\tcursor_name\texchange\thosts\tlevel btree\tdata\texclude\thour\tlike buckets\tdatabase\texecute\thour_microsec\tlimit bulk\tdatabases\texists\thour_minute\tlinear by\tdatafile\texit\thour_second\tlines byte\tdate\texpansion\tidentified\tlinestring cache\tdatetime\texpire\tif\tlist call\tday\texplain\tignore\tload cascade\tday_hour\texport\tignore_server\tlocal cascaded\tday_microseco\textended\timport\tlocaltime case\tday_minute\textent_size\tin\tlocaltimestam catalog_name\tday_second\tfactor\tinactive\tlock chain\tdeallocate\tfailedlogin\tindex\tlocked challenge_res\tdec\tfalse\tindexes\tlocks change\tdecimal\tfast\tinfile\tlogfile changed\tdeclare\tfaults\tinitial\tlogs channel\tdefault\tfetch\tinitial_size\tlong char\tdefault_auth\tfields\tinitiate\tlongblob character\tdefiner\tfile\tinner\tlongtext charset\tdefinition\tfile_block_si\tinout\tloop check\tdelayed\tfilter\tinsensitive\tlow_priority checksum\tdelay_key_wri\tfinish\tinsert\tmaster cipher\tdelete\tfirst\tinsert_method\tmaster_auto_p class_origin\tdense_rank\tfirst_value\tinstall\tmaster_bind client\tdesc\tfixed\tinstance\tmaster_compre master_connec\tnever\tpreserve\trestrict\tsource_host master_delay\tnew\tprev\tresume\tsource_log_fi master_heartb\tnext\tprimary\tretain\tsource_log_po master_host\tno\tprivileges\treturn\tsource_passwo master_log_fi\tnodegroup\tprivilege_che\treturned_sqls\tsource_port master_log_po\tnone\tprocedure\treturning\tsource_public master_passwo\tnot\tprocess\treturns\tsourceretry master_port\tnowait\tprocesslist\treuse\tsource_ssl master_public\tno_wait\tprofile\treverse\tsource_ssl_ca masterretry\tno_write_to_b\tprofiles\trevoke\tsource_ssl_ca master_server\tnth_value\tproxy\tright\tsource_ssl_ce master_ssl\tntile\tpurge\trlike\tsource_ssl_ci master_ssl_ca\tnull\tquarter\trole\tsource_ssl_cr master_ssl_ca\tnulls\tquery\trollback\tsource_ssl_cr master_ssl_ce\tnumber\tquick\trollup\tsource_ssl_ke master_ssl_ci\tnumeric\trandom\trotate\tsource_ssl_ve master_ssl_cr\tnvarchar\trange\troutine\tsource_tls_ci master_ssl_cr\tof\trank\trow\tsource_tls_ve master_ssl_ke\toff\tread\trows\tsource_user master_ssl_ve\toffset\treads\trow_count\tsource_zstd_c master_tls_ci\toj\tread_only\trow_format\tspatial master_tls_ve\told\tread_write\trow_number\tspecific master_user\ton\treal\trtree\tsql master_zstd_c\tone\trebuild\tsavepoint\tsqlexception match\tonly\trecover\tschedule\tsqlstate maxvalue\topen\trecursive\tschema\tsqlwarning max_connectio\toptimize\tredofile\tschemas\tsql_after_gti max_queries_p\toptimizer_cos\tredo_buffer_s\tschema_name\tsql_after_mts max_rows\toption\tredundant\tsecond\tsql_before_gt max_size\toptional\treference\tsecondary\tsql_big_resul max_updates_p\toptionally\treferences\tsecondary_eng\tsql_buffer_re max_user_conn\toptions\tregexp\tsecondary_eng\tsql_cache medium\tor\tregistration\tsecondary_loa\tsql_calc_foun mediumblob\torder\trelay\tsecondary_unl\tsql_no_cache mediumint\tordinality\trelaylog\tsecond_micros\tsql_small_res mediumtext\torganization\trelay_log_fil\tsecurity\tsql_thread member\tothers\trelay_log_pos\tselect\tsql_tsi_day memory\tout\trelay_thread\tsensitive\tsql_tsi_hour merge\touter\trelease\tseparator\tsql_tsi_minut message_text\toutfile\treload\tserial\tsql_tsi_month microsecond\tover\tremote\tserializable\tsql_tsi_quart middleint\towner\tremove\tserver\tsql_tsi_secon migrate\tpack_keys\trename\tsession\tsql_tsi_week minute\tpage\treorganize\tset\tsql_tsi_year minute_micros\tparser\trepair\tshare\tsrid minute_second\tpartial\trepeat\tshow\tssl min_rows\tpartition\trepeatable\tshutdown\tstacked mod\tpartitioning\treplace\tsignal\tstart mode\tpartitions\treplica\tsigned\tstarting modifies\tpassword\treplicas\tsimple\tstarts modify\tpassword_lock\treplicatedo\tskip\tstats_auto_re month\tpath\treplicatedo\tslave\tstats_persist multilinestri\tpercent_rank\treplicate_ign\tslow\tstatssample multipoint\tpersist\treplicate_ign\tsmallint\tstatus multipolygon\tpersist_only\treplicate_rew\tsnapshot\tstop mutex\tphase\treplicate_wil\tsocket\tstorage mysql_errno\tplugin\treplicate_wil\tsome\tstored name\tplugins\treplication\tsoname\tstraight_join names\tplugin_dir\trequire\tsounds\tstream national\tpoint\trequire_row_f\tsource\tstring natural\tpolygon\treset\tsource_auto_p\tsubclass_orig nchar\tport\tresignal\tsource_bind\tsubject ndb\tprecedes\tresource\tsource_compre\tsubpartition ndbcluster\tpreceding\trespect\tsource_connec\tsubpartitions nested\tprecision\trestart\tsource_delay\tsuper network_names\tprepare\trestore\tsource_heartb\tsuspend swaps\ttimestampdiff\tundo_buffer_s\tutc_date\twhen switches\ttinyblob\tunicode\tutc_time\twhere system\ttinyint\tuninstall\tutc_timestamp\twhile table\ttinytext\tunion\tvalidation\twindow tables\ttls\tunique\tvalue\twith tablespace\tto\tunknown\tvalues\twithout table_checksu\ttrailing\tunlock\tvarbinary\twork table_name\ttransaction\tunregister\tvarchar\twrapper temporary\ttrigger\tunsigned\tvarcharacter\twrite temptable\ttriggers\tuntil\tvariables\tx509 terminated\ttrue\tupdate\tvarying\txa text\ttruncate\tupgrade\tvcpu\txid than\ttype\turl\tview\txml then\ttypes\tusage\tvirtual\txor thread_priori\tunbounded\tuse\tvisible\tyear ties\tuncommitted\tuser\twait\tyear_month time\tundefined\tuser_resource\twarnings\tzerofill timestamp\tundo\tuse_frm\tweek\tzone timestampadd\tundofile\tusing\tweight_string\t ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V1: 2023-08-21​ First version ","version":"Next","tagName":"h2"},{"title":"Google Cloud SQL for MySQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#prerequisites","content":" To use this connector, you'll need: A MySQL database to which to materialize, and user credentials. MySQL versions 5.7 and later are supportedThe connector will create new tables in the database per your specification, so user credentials must have access to create new tables.The local_infile global variable must be enabled. You can enable this setting by running SET GLOBAL local_infile = true in your database. At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#setup","content":" ","version":"Next","tagName":"h2"},{"title":"Conenecting Directly to Google Cloud SQL​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#conenecting-directly-to-google-cloud-sql","content":" Enable public IP on your database and add the Estuary Flow IP addresses as authorized IP addresses. ","version":"Next","tagName":"h3"},{"title":"Connect With SSH Tunneling​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#connect-with-ssh-tunneling","content":" To allow SSH tunneling to a database instance hosted on Google Cloud, you must set up a virtual machine (VM). Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key If your Google login differs from your local username, generate a key that includes your Google email address as a comment: ssh-keygen -m PEM -t rsa -C user@domain.com Create and start a new VM in GCP, choosing an image that supports OS Login. Add your public key to the VM. Reserve an external IP address and connect it to the VM during setup. Note the generated address. Configuration Tip To configure the connector, you must specify the database address in the formathost:port. (You can also supply host only; the connector will use the port 3306 by default, which is correct in many cases.) You can find the host and port in the following locations in each platform's console: ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a MySQL materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring\tRequired /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 3306.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired /timezone\tTimezone\tTimezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring /advanced/ssl_server_ca\tSSL Server CA\tOptional server certificate authority to use when connecting with custom SSL mode\tstring /advanced/ssl_client_cert\tSSL Client Certificate\tOptional client certificate to use when connecting with custom SSL mode.\tstring /advanced/ssl_client_key\tSSL Client Key\tOptional client key to use when connecting with custom SSL mode.\tstring\t ","version":"Next","tagName":"h3"},{"title":"Setting the MySQL time zone​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#setting-the-mysql-time-zone","content":" MySQL's time_zone server system variable is set to SYSTEM by default. If you intend to materialize collections including fields of with format: date-time or format: time, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert datetimes to the appropriate timezone when materializing. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted Specify a named timezone in IANA timezone format. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs. Materialize Timezone Configuration If you are unable to set the time_zone in the database and need to materialize collections with date-time or time fields, the materialization can be configured to assume a time zone using the timezone configuration property (see above). The timezone configuration property can be set as a numerical offset or IANA timezone format. SSL Mode​ Possible values: disabled: A plain unencrypted connection is established with the serverpreferred: Only use SSL connection if the server asks for itrequired: Connect using an SSL connection, but do not verify the server's certificate.verify_ca: Connect using an SSL connection, and verify the server's certificate against the given SSL Server CA, but does not verify the server's hostname. This option is most commonly used when connecting to an IP address which does not have a hostname to be verified. When using this mode, SSL Server CA must be provided.verify_identity: Connect using an SSL connection, verify the server's certificate and the server's hostname. This is the most secure option. When using this mode, SSL Server CA must be provided. Optionally, SSL Client Certificate and Key can be provided if necessary to authorize the client. Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-mysql:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Setup​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#setup-1","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Enable public IP on your database and add the Estuary Flow IP addresses as authorized IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. Configure your connector as described in the configuration section above, with the additional of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networksfor additional details and a sample. Configuration Tip To configure the connector, you must specify the database address in the formathost:port. (You can also supply host only; the connector will use the port 3306 by default, which is correct in many cases.) You can find the host host in the GCP console as "Private IP Address". The pport is always 3306. You may need to configure private IP on your database. Create the flow_materialize user with All privileges on your database. This user will need the ability to create and update the flow_materializations table. CREATE USER IF NOT EXISTS flow_materialize IDENTIFIED BY 'secret' COMMENT 'User account for Flow MySQL data materialization'; GRANT ALL PRIVELEGES ON <database>.* TO 'flow_materialize'; In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 3306. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Date & times​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#date--times","content":" Date and time fields that are part of collections, which specify a format: date-time for the field, are automatically converted to UTC and persisted as UTC DATETIME in MySQL. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#reserved-words","content":" MySQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words in the official MySQL documentation. These reserved words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words accessible\tclone\tdescribe\tfloat\tint account\tclose\tdescription\tfloat4\tint1 action\tcoalesce\tdes_key_file\tfloat8\tint2 active\tcode\tdeterministic\tflush\tint3 add\tcollate\tdiagnostics\tfollowing\tint4 admin\tcollation\tdirectory\tfollows\tint8 after\tcolumn\tdisable\tfor\tinteger against\tcolumns\tdiscard\tforce\tintersect aggregate\tcolumn_format\tdisk\tforeign\tinterval algorithm\tcolumn_name\tdistinct\tformat\tinto all\tcomment\tdistinctrow\tfound\tinvisible alter\tcommit\tdiv\tfrom\tinvoker always\tcommitted\tdo\tfull\tio analyse\tcompact\tdouble\tfulltext\tio_after_gtid analyze\tcompletion\tdrop\tfunction\tio_before_gti and\tcomponent\tdual\tgeneral\tio_thread any\tcompressed\tdumpfile\tgenerate\tipc array\tcompression\tduplicate\tgenerated\tis as\tconcurrent\tdynamic\tgeomcollectio\tisolation asc\tcondition\teach\tgeometry\tissuer ascii\tconnection\telse\tgeometrycolle\titerate asensitive\tconsistent\telseif\tget\tjoin at\tconstraint\tempty\tget_format\tjson attribute\tconstraint_ca\tenable\tget_master_pu\tjson_table authenticatio\tconstraint_na\tenclosed\tget_source_pu\tjson_value autoextend_si\tconstraint_sc\tencryption\tglobal\tkey auto_incremen\tcontains\tend\tgrant\tkeyring avg\tcontext\tends\tgrants\tkeys avg_row_lengt\tcontinue\tenforced\tgroup\tkey_block_siz backup\tconvert\tengine\tgrouping\tkill before\tcpu\tengines\tgroups\tlag begin\tcreate\tengine_attrib\tgroup_replica\tlanguage between\tcross\tenum\tgtid_only\tlast bigint\tcube\terror\thandler\tlast_value binary\tcume_dist\terrors\thash\tlateral binlog\tcurrent\tescape\thaving\tlead bit\tcurrent_date\tescaped\thelp\tleading blob\tcurrent_time\tevent\thigh_priority\tleave block\tcurrent_times\tevents\thistogram\tleaves bool\tcurrent_user\tevery\thistory\tleft boolean\tcursor\texcept\thost\tless both\tcursor_name\texchange\thosts\tlevel btree\tdata\texclude\thour\tlike buckets\tdatabase\texecute\thour_microsec\tlimit bulk\tdatabases\texists\thour_minute\tlinear by\tdatafile\texit\thour_second\tlines byte\tdate\texpansion\tidentified\tlinestring cache\tdatetime\texpire\tif\tlist call\tday\texplain\tignore\tload cascade\tday_hour\texport\tignore_server\tlocal cascaded\tday_microseco\textended\timport\tlocaltime case\tday_minute\textent_size\tin\tlocaltimestam catalog_name\tday_second\tfactor\tinactive\tlock chain\tdeallocate\tfailedlogin\tindex\tlocked challenge_res\tdec\tfalse\tindexes\tlocks change\tdecimal\tfast\tinfile\tlogfile changed\tdeclare\tfaults\tinitial\tlogs channel\tdefault\tfetch\tinitial_size\tlong char\tdefault_auth\tfields\tinitiate\tlongblob character\tdefiner\tfile\tinner\tlongtext charset\tdefinition\tfile_block_si\tinout\tloop check\tdelayed\tfilter\tinsensitive\tlow_priority checksum\tdelay_key_wri\tfinish\tinsert\tmaster cipher\tdelete\tfirst\tinsert_method\tmaster_auto_p class_origin\tdense_rank\tfirst_value\tinstall\tmaster_bind client\tdesc\tfixed\tinstance\tmaster_compre master_connec\tnever\tpreserve\trestrict\tsource_host master_delay\tnew\tprev\tresume\tsource_log_fi master_heartb\tnext\tprimary\tretain\tsource_log_po master_host\tno\tprivileges\treturn\tsource_passwo master_log_fi\tnodegroup\tprivilege_che\treturned_sqls\tsource_port master_log_po\tnone\tprocedure\treturning\tsource_public master_passwo\tnot\tprocess\treturns\tsourceretry master_port\tnowait\tprocesslist\treuse\tsource_ssl master_public\tno_wait\tprofile\treverse\tsource_ssl_ca masterretry\tno_write_to_b\tprofiles\trevoke\tsource_ssl_ca master_server\tnth_value\tproxy\tright\tsource_ssl_ce master_ssl\tntile\tpurge\trlike\tsource_ssl_ci master_ssl_ca\tnull\tquarter\trole\tsource_ssl_cr master_ssl_ca\tnulls\tquery\trollback\tsource_ssl_cr master_ssl_ce\tnumber\tquick\trollup\tsource_ssl_ke master_ssl_ci\tnumeric\trandom\trotate\tsource_ssl_ve master_ssl_cr\tnvarchar\trange\troutine\tsource_tls_ci master_ssl_cr\tof\trank\trow\tsource_tls_ve master_ssl_ke\toff\tread\trows\tsource_user master_ssl_ve\toffset\treads\trow_count\tsource_zstd_c master_tls_ci\toj\tread_only\trow_format\tspatial master_tls_ve\told\tread_write\trow_number\tspecific master_user\ton\treal\trtree\tsql master_zstd_c\tone\trebuild\tsavepoint\tsqlexception match\tonly\trecover\tschedule\tsqlstate maxvalue\topen\trecursive\tschema\tsqlwarning max_connectio\toptimize\tredofile\tschemas\tsql_after_gti max_queries_p\toptimizer_cos\tredo_buffer_s\tschema_name\tsql_after_mts max_rows\toption\tredundant\tsecond\tsql_before_gt max_size\toptional\treference\tsecondary\tsql_big_resul max_updates_p\toptionally\treferences\tsecondary_eng\tsql_buffer_re max_user_conn\toptions\tregexp\tsecondary_eng\tsql_cache medium\tor\tregistration\tsecondary_loa\tsql_calc_foun mediumblob\torder\trelay\tsecondary_unl\tsql_no_cache mediumint\tordinality\trelaylog\tsecond_micros\tsql_small_res mediumtext\torganization\trelay_log_fil\tsecurity\tsql_thread member\tothers\trelay_log_pos\tselect\tsql_tsi_day memory\tout\trelay_thread\tsensitive\tsql_tsi_hour merge\touter\trelease\tseparator\tsql_tsi_minut message_text\toutfile\treload\tserial\tsql_tsi_month microsecond\tover\tremote\tserializable\tsql_tsi_quart middleint\towner\tremove\tserver\tsql_tsi_secon migrate\tpack_keys\trename\tsession\tsql_tsi_week minute\tpage\treorganize\tset\tsql_tsi_year minute_micros\tparser\trepair\tshare\tsrid minute_second\tpartial\trepeat\tshow\tssl min_rows\tpartition\trepeatable\tshutdown\tstacked mod\tpartitioning\treplace\tsignal\tstart mode\tpartitions\treplica\tsigned\tstarting modifies\tpassword\treplicas\tsimple\tstarts modify\tpassword_lock\treplicatedo\tskip\tstats_auto_re month\tpath\treplicatedo\tslave\tstats_persist multilinestri\tpercent_rank\treplicate_ign\tslow\tstatssample multipoint\tpersist\treplicate_ign\tsmallint\tstatus multipolygon\tpersist_only\treplicate_rew\tsnapshot\tstop mutex\tphase\treplicate_wil\tsocket\tstorage mysql_errno\tplugin\treplicate_wil\tsome\tstored name\tplugins\treplication\tsoname\tstraight_join names\tplugin_dir\trequire\tsounds\tstream national\tpoint\trequire_row_f\tsource\tstring natural\tpolygon\treset\tsource_auto_p\tsubclass_orig nchar\tport\tresignal\tsource_bind\tsubject ndb\tprecedes\tresource\tsource_compre\tsubpartition ndbcluster\tpreceding\trespect\tsource_connec\tsubpartitions nested\tprecision\trestart\tsource_delay\tsuper network_names\tprepare\trestore\tsource_heartb\tsuspend swaps\ttimestampdiff\tundo_buffer_s\tutc_date\twhen switches\ttinyblob\tunicode\tutc_time\twhere system\ttinyint\tuninstall\tutc_timestamp\twhile table\ttinytext\tunion\tvalidation\twindow tables\ttls\tunique\tvalue\twith tablespace\tto\tunknown\tvalues\twithout table_checksu\ttrailing\tunlock\tvarbinary\twork table_name\ttransaction\tunregister\tvarchar\twrapper temporary\ttrigger\tunsigned\tvarcharacter\twrite temptable\ttriggers\tuntil\tvariables\tx509 terminated\ttrue\tupdate\tvarying\txa text\ttruncate\tupgrade\tvcpu\txid than\ttype\turl\tview\txml then\ttypes\tusage\tvirtual\txor thread_priori\tunbounded\tuse\tvisible\tyear ties\tuncommitted\tuser\twait\tyear_month time\tundefined\tuser_resource\twarnings\tzerofill timestamp\tundo\tuse_frm\tweek\tzone timestampadd\tundofile\tusing\tweight_string\t ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Google Cloud SQL for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V1: 2023-08-21​ First version ","version":"Next","tagName":"h2"},{"title":"PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#prerequisites","content":" To use this connector, you'll need: A Postgres database to which to materialize, and user credentials. The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#setup","content":" To meet these requirements, follow the steps for your hosting type. Amazon RDSGoogle Cloud SQLAzure Database for PostgreSQL In addition to standard PostgreSQL, this connector supports cloud-based PostgreSQL instances. Google Cloud Platform, Amazon Web Service, and Microsoft Azure are currently supported. You may use other cloud platforms, but Estuary doesn't guarantee performance. To connect securely, you can either enable direct access for Flows's IP or use an SSH tunnel. Configuration Tip To configure the connector, you must specify the database address in the format host:port. (You can also supply host only; the connector will use the port 5432 by default, which is correct in many cases.) You can find the host and port in the following locations in each platform's console: Amazon RDS and Amazon Aurora: host as Endpoint; port as Port.Google Cloud SQL: host as Private IP Address; port is always 5432. You may need to configure private IP on your database.Azure Database: host as Server Name; port under Connection Strings (usually 5432).TimescaleDB: host as Host; port as Port. ","version":"Next","tagName":"h2"},{"title":"Azure Database for PostgreSQL​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#azure-database-for-postgresql","content":" Connect Directly With Azure Database For PostgreSQL: Create a new firewall rule that grants access to the Estuary Flow IP addresses. Connect With SSH Tunneling: Follow the instructions for setting up an SSH connection to Azure Database. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Postgres materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 5432.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /schema\tDatabase Schema\tDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables\tstring\t"public" /user\tUser\tDatabase user to connect as.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/additional_table_create_sql\tAdditional Table Create SQL\tAdditional SQL statement(s) to be run in the same transaction that creates the table.\tstring /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse /schema\tAlternative Schema\tAlternative schema for this table (optional). Overrides schema set in endpoint configuration.\tstring /table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired SSL Mode​ Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-postgres:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#reserved-words","content":" PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation. These reserve words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words abs\tcurrent_transform_group_for_type\tindicator\torder\tsqlexception absolute\tcurrent_user\tinitial\tout\tsqlstate acos\tcursor\tinitially\touter\tsqlwarning action\tcycle\tinner\toutput\tsqrt add\tdatalink\tinout\tover\tstart all\tdate\tinput\toverlaps\tstatic allocate\tday\tinsensitive\toverlay\tstddev_pop alter\tdeallocate\tinsert\tpad\tstddev_samp analyse\tdec\tint\tparameter\tsubmultiset analyze\tdecfloat\tinteger\tpartial\tsubset and\tdecimal\tintersect\tpartition\tsubstring any\tdeclare\tintersection\tpattern\tsubstring_regex are\tdefault\tinterval\tper\tsucceeds array\tdeferrable\tinto\tpercent\tsum array_agg\tdeferred\tis\tpercentile_cont\tsymmetric array_max_cardinality\tdefine\tisnull\tpercentile_disc\tsystem as\tdelete\tisolation\tpercent_rank\tsystem_time asc\tdense_rank\tjoin\tperiod\tsystem_user asensitive\tderef\tjson_array\tpermute\ttable asin\tdesc\tjson_arrayagg\tplacing\ttablesample assertion\tdescribe\tjson_exists\tportion\ttan asymmetric\tdescriptor\tjson_object\tposition\ttanh at\tdeterministic\tjson_objectagg\tposition_regex\ttemporary atan\tdiagnostics\tjson_query\tpower\tthen atomic\tdisconnect\tjson_table\tprecedes\ttime authorization\tdistinct\tjson_table_primitive\tprecision\ttimestamp avg\tdlnewcopy\tjson_value\tprepare\ttimezone_hour begin\tdlpreviouscopy\tkey\tpreserve\ttimezone_minute begin_frame\tdlurlcomplete\tlag\tprimary\tto begin_partition\tdlurlcompleteonly\tlanguage\tprior\ttrailing between\tdlurlcompletewrite\tlarge\tprivileges\ttransaction bigint\tdlurlpath\tlast\tprocedure\ttranslate binary\tdlurlpathonly\tlast_value\tptf\ttranslate_regex bit\tdlurlpathwrite\tlateral\tpublic\ttranslation bit_length\tdlurlscheme\tlead\trange\ttreat blob\tdlurlserver\tleading\trank\ttrigger boolean\tdlvalue\tleft\tread\ttrim both\tdo\tlevel\treads\ttrim_array by\tdomain\tlike\treal\ttrue call\tdouble\tlike_regex\trecursive\ttruncate called\tdrop\tlimit\tref\tuescape cardinality\tdynamic\tlistagg\treferences\tunion cascade\teach\tln\treferencing\tunique cascaded\telement\tlocal\tregr_avgx\tunknown case\telse\tlocaltime\tregr_avgy\tunmatched cast\tempty\tlocaltimestamp\tregr_count\tunnest catalog\tend\tlog\tregr_intercept\tupdate ceil\tend-exec\tlog10\tregr_r2\tupper ceiling\tend_frame\tlower\tregr_slope\tusage char\tend_partition\tmatch\tregr_sxx\tuser character\tequals\tmatches\tregr_sxy\tusing character_length\tescape\tmatch_number\tregr_syy\tvalue char_length\tevery\tmatch_recognize\trelative\tvalues check\texcept\tmax\trelease\tvalue_of classifier\texception\tmeasures\trestrict\tvarbinary clob\texec\tmember\tresult\tvarchar close\texecute\tmerge\treturn\tvariadic coalesce\texists\tmethod\treturning\tvarying collate\texp\tmin\treturns\tvar_pop collation\texternal\tminute\trevoke\tvar_samp collect\textract\tmod\tright\tverbose column\tfalse\tmodifies\trollback\tversioning commit\tfetch\tmodule\trollup\tview concurrently\tfilter\tmonth\trow\twhen condition\tfirst\tmultiset\trows\twhenever connect\tfirst_value\tnames\trow_number\twhere connection\tfloat\tnational\trunning\twidth_bucket constraint\tfloor\tnatural\tsavepoint\twindow constraints\tfor\tnchar\tschema\twith contains\tforeign\tnclob\tscope\twithin continue\tfound\tnew\tscroll\twithout convert\tframe_row\tnext\tsearch\twork copy\tfree\tno\tsecond\twrite corr\tfreeze\tnone\tsection\txml corresponding\tfrom\tnormalize\tseek\txmlagg cos\tfull\tnot\tselect\txmlattributes cosh\tfunction\tnotnull\tsensitive\txmlbinary count\tfusion\tnth_value\tsession\txmlcast covar_pop\tget\tntile\tsession_user\txmlcomment covar_samp\tglobal\tnull\tset\txmlconcat create\tgo\tnullif\tshow\txmldocument cross\tgoto\tnumeric\tsimilar\txmlelement cube\tgrant\toccurrences_regex\tsin\txmlexists cume_dist\tgroup\toctet_length\tsinh\txmlforest current\tgrouping\tof\tsize\txmliterate current_catalog\tgroups\toffset\tskip\txmlnamespaces current_date\thaving\told\tsmallint\txmlparse current_default_transform_group\thold\tomit\tsome\txmlpi current_path\thour\ton\tspace\txmlquery current_role\tidentity\tone\tspecific\txmlserialize current_row\tilike\tonly\tspecifictype\txmltable current_schema\timmediate\topen\tsql\txmltext current_time\timport\toption\tsqlcode\txmlvalidate current_timestamp\tin\tor\tsqlerror\tyear ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V4: 2022-11-30​ This version includes breaking changes to materialized table columns. These provide more consistent column names and types, but tables created from previous versions of the connector may not be compatible with this version. Capitalization is now preserved when fields in Flow are converted to Postgres column names. Previously, fields containing uppercase letters were converted to lowercase. Field names and values of types date, duration, ipv4, ipv6, macaddr, macaddr8, and time are now converted into their corresponding Postgres types. Previously, only date-time was converted, and all others were materialized as strings. ","version":"Next","tagName":"h2"},{"title":"Amazon RDS for MySQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#prerequisites","content":" To use this connector, you'll need: A MySQL database to which to materialize, and user credentials. MySQL versions 5.7 and later are supportedThe connector will create new tables in the database per your specification, so user credentials must have access to create new tables.The local_infile global variable must be enabled. You can enable this setting by running SET GLOBAL local_infile = true in your database. At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#setup","content":" You must configure your database to allow connections from Estuary. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. ","version":"Next","tagName":"h2"},{"title":"Connecting Directly With Amazon RDS​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#connecting-directly-with-amazon-rds","content":" Edit the VPC security group associated with your database instance, or create a new VPC security group and associate it with the database instance. Modify the instance, choosing Publicly accessible in the Connectivity settings. Per the steps in the Amazon documentation, create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. ","version":"Next","tagName":"h3"},{"title":"Connect With SSH Tunneling​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#connect-with-ssh-tunneling","content":" To allow SSH tunneling to a database instance hosted on AWS, you'll need to create a virtual computing environment, or instance, in Amazon EC2. Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key Import your SSH key into AWS. Launch a new instance in EC2. During setup: Configure the security group to allow SSH connection from anywhere.When selecting a key pair, choose the key you just imported. Connect to the instance, setting the user name to ec2-user. Find and note the instance's public DNS. This will be formatted like: ec2-198-21-98-1.compute-1.amazonaws.com. Connect with SSH tunneling Refer to the guide to configure an SSH server on the cloud platform of your choice. Configure your connector as described in the configuration section above, with the additional of the networkTunnel stanza to enable the SSH tunnel, if using. See Connecting to endpoints on secure networksfor additional details and a sample. Configuration Tip To configure the connector, you must specify the database address in the formathost:port. (You can also supply host only; the connector will use the port 3306 by default, which is correct in many cases.) You can find the host and port in the following locations in each platform's console: Amazon RDS: host as Endpoint; port as Port. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a MySQL materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring\tRequired /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 3306.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired /timezone\tTimezone\tTimezone to use when materializing datetime columns. Should normally be left blank to use the database's 'time_zone' system variable. Only required if the 'time_zone' system variable cannot be read. Must be a valid IANA time zone name or +HH:MM offset. Takes precedence over the 'time_zone' system variable if both are set.\tstring /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring /advanced/ssl_server_ca\tSSL Server CA\tOptional server certificate authority to use when connecting with custom SSL mode\tstring /advanced/ssl_client_cert\tSSL Client Certificate\tOptional client certificate to use when connecting with custom SSL mode.\tstring /advanced/ssl_client_key\tSSL Client Key\tOptional client key to use when connecting with custom SSL mode.\tstring\t ","version":"Next","tagName":"h3"},{"title":"Setting the MySQL time zone​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#setting-the-mysql-time-zone","content":" MySQL's time_zone server system variable is set to SYSTEM by default. If you intend to materialize collections including fields of with format: date-time or format: time, and time_zone is set to SYSTEM, Flow won't be able to detect the time zone and convert datetimes to the appropriate timezone when materializing. To avoid this, you must explicitly set the time zone for your database. You can: Specify a numerical offset from UTC. For MySQL version 8.0.19 or higher, values from -13:59 to +14:00, inclusive, are permitted.Prior to MySQL 8.0.19, values from -12:59 to +13:00, inclusive, are permitted Specify a named timezone in IANA timezone format. If you're using Amazon Aurora, create or modify the DB cluster parameter groupassociated with your MySQL database.Set the time_zone parameter to the correct value. For example, if you're located in New Jersey, USA, you could set time_zone to -05:00 or -04:00, depending on the time of year. Because this region observes daylight savings time, you'd be responsible for changing the offset. Alternatively, you could set time_zone to America/New_York, and time changes would occur automatically. If using IANA time zones, your database must include time zone tables. Learn more in the MySQL docs. Materialize Timezone Configuration If you are unable to set the time_zone in the database and need to materialize collections with date-time or time fields, the materialization can be configured to assume a time zone using the timezone configuration property (see above). The timezone configuration property can be set as a numerical offset or IANA timezone format. SSL Mode​ Possible values: disabled: A plain unencrypted connection is established with the serverpreferred: Only use SSL connection if the server asks for itrequired: Connect using an SSL connection, but do not verify the server's certificate.verify_ca: Connect using an SSL connection, and verify the server's certificate against the given SSL Server CA, but does not verify the server's hostname. This option is most commonly used when connecting to an IP address which does not have a hostname to be verified. When using this mode, SSL Server CA must be provided.verify_identity: Connect using an SSL connection, verify the server's certificate and the server's hostname. This is the most secure option. When using this mode, SSL Server CA must be provided. Optionally, SSL Client Certificate and Key can be provided if necessary to authorize the client. Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-mysql:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Date & times​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#date--times","content":" Date and time fields that are part of collections, which specify a format: date-time for the field, are automatically converted to UTC and persisted as UTC DATETIME in MySQL. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#reserved-words","content":" MySQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words in the official MySQL documentation. These reserved words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words accessible\tclone\tdescribe\tfloat\tint account\tclose\tdescription\tfloat4\tint1 action\tcoalesce\tdes_key_file\tfloat8\tint2 active\tcode\tdeterministic\tflush\tint3 add\tcollate\tdiagnostics\tfollowing\tint4 admin\tcollation\tdirectory\tfollows\tint8 after\tcolumn\tdisable\tfor\tinteger against\tcolumns\tdiscard\tforce\tintersect aggregate\tcolumn_format\tdisk\tforeign\tinterval algorithm\tcolumn_name\tdistinct\tformat\tinto all\tcomment\tdistinctrow\tfound\tinvisible alter\tcommit\tdiv\tfrom\tinvoker always\tcommitted\tdo\tfull\tio analyse\tcompact\tdouble\tfulltext\tio_after_gtid analyze\tcompletion\tdrop\tfunction\tio_before_gti and\tcomponent\tdual\tgeneral\tio_thread any\tcompressed\tdumpfile\tgenerate\tipc array\tcompression\tduplicate\tgenerated\tis as\tconcurrent\tdynamic\tgeomcollectio\tisolation asc\tcondition\teach\tgeometry\tissuer ascii\tconnection\telse\tgeometrycolle\titerate asensitive\tconsistent\telseif\tget\tjoin at\tconstraint\tempty\tget_format\tjson attribute\tconstraint_ca\tenable\tget_master_pu\tjson_table authenticatio\tconstraint_na\tenclosed\tget_source_pu\tjson_value autoextend_si\tconstraint_sc\tencryption\tglobal\tkey auto_incremen\tcontains\tend\tgrant\tkeyring avg\tcontext\tends\tgrants\tkeys avg_row_lengt\tcontinue\tenforced\tgroup\tkey_block_siz backup\tconvert\tengine\tgrouping\tkill before\tcpu\tengines\tgroups\tlag begin\tcreate\tengine_attrib\tgroup_replica\tlanguage between\tcross\tenum\tgtid_only\tlast bigint\tcube\terror\thandler\tlast_value binary\tcume_dist\terrors\thash\tlateral binlog\tcurrent\tescape\thaving\tlead bit\tcurrent_date\tescaped\thelp\tleading blob\tcurrent_time\tevent\thigh_priority\tleave block\tcurrent_times\tevents\thistogram\tleaves bool\tcurrent_user\tevery\thistory\tleft boolean\tcursor\texcept\thost\tless both\tcursor_name\texchange\thosts\tlevel btree\tdata\texclude\thour\tlike buckets\tdatabase\texecute\thour_microsec\tlimit bulk\tdatabases\texists\thour_minute\tlinear by\tdatafile\texit\thour_second\tlines byte\tdate\texpansion\tidentified\tlinestring cache\tdatetime\texpire\tif\tlist call\tday\texplain\tignore\tload cascade\tday_hour\texport\tignore_server\tlocal cascaded\tday_microseco\textended\timport\tlocaltime case\tday_minute\textent_size\tin\tlocaltimestam catalog_name\tday_second\tfactor\tinactive\tlock chain\tdeallocate\tfailedlogin\tindex\tlocked challenge_res\tdec\tfalse\tindexes\tlocks change\tdecimal\tfast\tinfile\tlogfile changed\tdeclare\tfaults\tinitial\tlogs channel\tdefault\tfetch\tinitial_size\tlong char\tdefault_auth\tfields\tinitiate\tlongblob character\tdefiner\tfile\tinner\tlongtext charset\tdefinition\tfile_block_si\tinout\tloop check\tdelayed\tfilter\tinsensitive\tlow_priority checksum\tdelay_key_wri\tfinish\tinsert\tmaster cipher\tdelete\tfirst\tinsert_method\tmaster_auto_p class_origin\tdense_rank\tfirst_value\tinstall\tmaster_bind client\tdesc\tfixed\tinstance\tmaster_compre master_connec\tnever\tpreserve\trestrict\tsource_host master_delay\tnew\tprev\tresume\tsource_log_fi master_heartb\tnext\tprimary\tretain\tsource_log_po master_host\tno\tprivileges\treturn\tsource_passwo master_log_fi\tnodegroup\tprivilege_che\treturned_sqls\tsource_port master_log_po\tnone\tprocedure\treturning\tsource_public master_passwo\tnot\tprocess\treturns\tsourceretry master_port\tnowait\tprocesslist\treuse\tsource_ssl master_public\tno_wait\tprofile\treverse\tsource_ssl_ca masterretry\tno_write_to_b\tprofiles\trevoke\tsource_ssl_ca master_server\tnth_value\tproxy\tright\tsource_ssl_ce master_ssl\tntile\tpurge\trlike\tsource_ssl_ci master_ssl_ca\tnull\tquarter\trole\tsource_ssl_cr master_ssl_ca\tnulls\tquery\trollback\tsource_ssl_cr master_ssl_ce\tnumber\tquick\trollup\tsource_ssl_ke master_ssl_ci\tnumeric\trandom\trotate\tsource_ssl_ve master_ssl_cr\tnvarchar\trange\troutine\tsource_tls_ci master_ssl_cr\tof\trank\trow\tsource_tls_ve master_ssl_ke\toff\tread\trows\tsource_user master_ssl_ve\toffset\treads\trow_count\tsource_zstd_c master_tls_ci\toj\tread_only\trow_format\tspatial master_tls_ve\told\tread_write\trow_number\tspecific master_user\ton\treal\trtree\tsql master_zstd_c\tone\trebuild\tsavepoint\tsqlexception match\tonly\trecover\tschedule\tsqlstate maxvalue\topen\trecursive\tschema\tsqlwarning max_connectio\toptimize\tredofile\tschemas\tsql_after_gti max_queries_p\toptimizer_cos\tredo_buffer_s\tschema_name\tsql_after_mts max_rows\toption\tredundant\tsecond\tsql_before_gt max_size\toptional\treference\tsecondary\tsql_big_resul max_updates_p\toptionally\treferences\tsecondary_eng\tsql_buffer_re max_user_conn\toptions\tregexp\tsecondary_eng\tsql_cache medium\tor\tregistration\tsecondary_loa\tsql_calc_foun mediumblob\torder\trelay\tsecondary_unl\tsql_no_cache mediumint\tordinality\trelaylog\tsecond_micros\tsql_small_res mediumtext\torganization\trelay_log_fil\tsecurity\tsql_thread member\tothers\trelay_log_pos\tselect\tsql_tsi_day memory\tout\trelay_thread\tsensitive\tsql_tsi_hour merge\touter\trelease\tseparator\tsql_tsi_minut message_text\toutfile\treload\tserial\tsql_tsi_month microsecond\tover\tremote\tserializable\tsql_tsi_quart middleint\towner\tremove\tserver\tsql_tsi_secon migrate\tpack_keys\trename\tsession\tsql_tsi_week minute\tpage\treorganize\tset\tsql_tsi_year minute_micros\tparser\trepair\tshare\tsrid minute_second\tpartial\trepeat\tshow\tssl min_rows\tpartition\trepeatable\tshutdown\tstacked mod\tpartitioning\treplace\tsignal\tstart mode\tpartitions\treplica\tsigned\tstarting modifies\tpassword\treplicas\tsimple\tstarts modify\tpassword_lock\treplicatedo\tskip\tstats_auto_re month\tpath\treplicatedo\tslave\tstats_persist multilinestri\tpercent_rank\treplicate_ign\tslow\tstatssample multipoint\tpersist\treplicate_ign\tsmallint\tstatus multipolygon\tpersist_only\treplicate_rew\tsnapshot\tstop mutex\tphase\treplicate_wil\tsocket\tstorage mysql_errno\tplugin\treplicate_wil\tsome\tstored name\tplugins\treplication\tsoname\tstraight_join names\tplugin_dir\trequire\tsounds\tstream national\tpoint\trequire_row_f\tsource\tstring natural\tpolygon\treset\tsource_auto_p\tsubclass_orig nchar\tport\tresignal\tsource_bind\tsubject ndb\tprecedes\tresource\tsource_compre\tsubpartition ndbcluster\tpreceding\trespect\tsource_connec\tsubpartitions nested\tprecision\trestart\tsource_delay\tsuper network_names\tprepare\trestore\tsource_heartb\tsuspend swaps\ttimestampdiff\tundo_buffer_s\tutc_date\twhen switches\ttinyblob\tunicode\tutc_time\twhere system\ttinyint\tuninstall\tutc_timestamp\twhile table\ttinytext\tunion\tvalidation\twindow tables\ttls\tunique\tvalue\twith tablespace\tto\tunknown\tvalues\twithout table_checksu\ttrailing\tunlock\tvarbinary\twork table_name\ttransaction\tunregister\tvarchar\twrapper temporary\ttrigger\tunsigned\tvarcharacter\twrite temptable\ttriggers\tuntil\tvariables\tx509 terminated\ttrue\tupdate\tvarying\txa text\ttruncate\tupgrade\tvcpu\txid than\ttype\turl\tview\txml then\ttypes\tusage\tvirtual\txor thread_priori\tunbounded\tuse\tvisible\tyear ties\tuncommitted\tuser\twait\tyear_month time\tundefined\tuser_resource\twarnings\tzerofill timestamp\tundo\tuse_frm\tweek\tzone timestampadd\tundofile\tusing\tweight_string\t ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Amazon RDS for MySQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V1: 2023-08-21​ First version ","version":"Next","tagName":"h2"},{"title":"Amazon RDS for PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#prerequisites","content":" To use this connector, you'll need: A Postgres database to which to materialize, and user credentials. The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#setup","content":" You must configure your database to allow connections from Estuary. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. ","version":"Next","tagName":"h2"},{"title":"Connect Directly With Amazon RDS or Amazon Aurora​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#connect-directly-with-amazon-rds-or-amazon-aurora","content":" Edit the VPC security group associated with your database instance, or create a new VPC security group and associate it with the database instance. Modify the instance, choosing Publicly accessible in the Connectivity settings. See the instructions below to use SSH Tunneling instead of enabling public access. Refer to the steps in the Amazon documentation. Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. ","version":"Next","tagName":"h3"},{"title":"Connect With SSH Tunneling​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#connect-with-ssh-tunneling","content":" To allow SSH tunneling to a database instance hosted on AWS, you'll need to create a virtual computing environment, or instance, in Amazon EC2. Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key Import your SSH key into AWS. Launch a new instance in EC2. During setup: Configure the security group to allow SSH connection from anywhere.When selecting a key pair, choose the key you just imported. Connect to the instance, setting the user name to ec2-user. Find and note the instance's public DNS. This will be formatted like: ec2-198-21-98-1.compute-1.amazonaws.com. Configuration Tip To configure the connector, you must specify the database address in the format host:port. (You can also supply host only; the connector will use the port 5432 by default, which is correct in many cases.) You can find the host and port in the following locations in each platform's console: Amazon RDS: host as Endpoint; port as Port. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Postgres materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 5432.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /schema\tDatabase Schema\tDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables\tstring\t"public" /user\tUser\tDatabase user to connect as.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/additional_table_create_sql\tAdditional Table Create SQL\tAdditional SQL statement(s) to be run in the same transaction that creates the table.\tstring /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse /schema\tAlternative Schema\tAlternative schema for this table (optional). Overrides schema set in endpoint configuration.\tstring /table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired SSL Mode​ Certain managed PostgreSQL implementations may require you to explicitly set the SSL Mode to connect with Flow. One example is Neon, which requires the setting verify-full. Check your managed PostgreSQL's documentation for details if you encounter errors related to the SSL mode configuration. ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-postgres:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#reserved-words","content":" PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation. These reserve words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words abs\tcurrent_transform_group_for_type\tindicator\torder\tsqlexception absolute\tcurrent_user\tinitial\tout\tsqlstate acos\tcursor\tinitially\touter\tsqlwarning action\tcycle\tinner\toutput\tsqrt add\tdatalink\tinout\tover\tstart all\tdate\tinput\toverlaps\tstatic allocate\tday\tinsensitive\toverlay\tstddev_pop alter\tdeallocate\tinsert\tpad\tstddev_samp analyse\tdec\tint\tparameter\tsubmultiset analyze\tdecfloat\tinteger\tpartial\tsubset and\tdecimal\tintersect\tpartition\tsubstring any\tdeclare\tintersection\tpattern\tsubstring_regex are\tdefault\tinterval\tper\tsucceeds array\tdeferrable\tinto\tpercent\tsum array_agg\tdeferred\tis\tpercentile_cont\tsymmetric array_max_cardinality\tdefine\tisnull\tpercentile_disc\tsystem as\tdelete\tisolation\tpercent_rank\tsystem_time asc\tdense_rank\tjoin\tperiod\tsystem_user asensitive\tderef\tjson_array\tpermute\ttable asin\tdesc\tjson_arrayagg\tplacing\ttablesample assertion\tdescribe\tjson_exists\tportion\ttan asymmetric\tdescriptor\tjson_object\tposition\ttanh at\tdeterministic\tjson_objectagg\tposition_regex\ttemporary atan\tdiagnostics\tjson_query\tpower\tthen atomic\tdisconnect\tjson_table\tprecedes\ttime authorization\tdistinct\tjson_table_primitive\tprecision\ttimestamp avg\tdlnewcopy\tjson_value\tprepare\ttimezone_hour begin\tdlpreviouscopy\tkey\tpreserve\ttimezone_minute begin_frame\tdlurlcomplete\tlag\tprimary\tto begin_partition\tdlurlcompleteonly\tlanguage\tprior\ttrailing between\tdlurlcompletewrite\tlarge\tprivileges\ttransaction bigint\tdlurlpath\tlast\tprocedure\ttranslate binary\tdlurlpathonly\tlast_value\tptf\ttranslate_regex bit\tdlurlpathwrite\tlateral\tpublic\ttranslation bit_length\tdlurlscheme\tlead\trange\ttreat blob\tdlurlserver\tleading\trank\ttrigger boolean\tdlvalue\tleft\tread\ttrim both\tdo\tlevel\treads\ttrim_array by\tdomain\tlike\treal\ttrue call\tdouble\tlike_regex\trecursive\ttruncate called\tdrop\tlimit\tref\tuescape cardinality\tdynamic\tlistagg\treferences\tunion cascade\teach\tln\treferencing\tunique cascaded\telement\tlocal\tregr_avgx\tunknown case\telse\tlocaltime\tregr_avgy\tunmatched cast\tempty\tlocaltimestamp\tregr_count\tunnest catalog\tend\tlog\tregr_intercept\tupdate ceil\tend-exec\tlog10\tregr_r2\tupper ceiling\tend_frame\tlower\tregr_slope\tusage char\tend_partition\tmatch\tregr_sxx\tuser character\tequals\tmatches\tregr_sxy\tusing character_length\tescape\tmatch_number\tregr_syy\tvalue char_length\tevery\tmatch_recognize\trelative\tvalues check\texcept\tmax\trelease\tvalue_of classifier\texception\tmeasures\trestrict\tvarbinary clob\texec\tmember\tresult\tvarchar close\texecute\tmerge\treturn\tvariadic coalesce\texists\tmethod\treturning\tvarying collate\texp\tmin\treturns\tvar_pop collation\texternal\tminute\trevoke\tvar_samp collect\textract\tmod\tright\tverbose column\tfalse\tmodifies\trollback\tversioning commit\tfetch\tmodule\trollup\tview concurrently\tfilter\tmonth\trow\twhen condition\tfirst\tmultiset\trows\twhenever connect\tfirst_value\tnames\trow_number\twhere connection\tfloat\tnational\trunning\twidth_bucket constraint\tfloor\tnatural\tsavepoint\twindow constraints\tfor\tnchar\tschema\twith contains\tforeign\tnclob\tscope\twithin continue\tfound\tnew\tscroll\twithout convert\tframe_row\tnext\tsearch\twork copy\tfree\tno\tsecond\twrite corr\tfreeze\tnone\tsection\txml corresponding\tfrom\tnormalize\tseek\txmlagg cos\tfull\tnot\tselect\txmlattributes cosh\tfunction\tnotnull\tsensitive\txmlbinary count\tfusion\tnth_value\tsession\txmlcast covar_pop\tget\tntile\tsession_user\txmlcomment covar_samp\tglobal\tnull\tset\txmlconcat create\tgo\tnullif\tshow\txmldocument cross\tgoto\tnumeric\tsimilar\txmlelement cube\tgrant\toccurrences_regex\tsin\txmlexists cume_dist\tgroup\toctet_length\tsinh\txmlforest current\tgrouping\tof\tsize\txmliterate current_catalog\tgroups\toffset\tskip\txmlnamespaces current_date\thaving\told\tsmallint\txmlparse current_default_transform_group\thold\tomit\tsome\txmlpi current_path\thour\ton\tspace\txmlquery current_role\tidentity\tone\tspecific\txmlserialize current_row\tilike\tonly\tspecifictype\txmltable current_schema\timmediate\topen\tsql\txmltext current_time\timport\toption\tsqlcode\txmlvalidate current_timestamp\tin\tor\tsqlerror\tyear ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Amazon RDS for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V4: 2022-11-30​ This version includes breaking changes to materialized table columns. These provide more consistent column names and types, but tables created from previous versions of the connector may not be compatible with this version. Capitalization is now preserved when fields in Flow are converted to Postgres column names. Previously, fields containing uppercase letters were converted to lowercase. Field names and values of types date, duration, ipv4, ipv6, macaddr, macaddr8, and time are now converted into their corresponding Postgres types. Previously, only date-time was converted, and all others were materialized as strings. ","version":"Next","tagName":"h2"},{"title":"Google Cloud SQL for PostgreSQL","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#prerequisites","content":" To use this connector, you'll need: A Postgres database to which to materialize, and user credentials. The connector will create new tables in the database per your specification. Tables created manually in advance are not supported.At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#setup","content":" You must configure your database to allow connections from Estuary. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. ","version":"Next","tagName":"h2"},{"title":"Conenecting Directly to Google Cloud SQL​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#conenecting-directly-to-google-cloud-sql","content":" Enable public IP on your database and add the Estuary Flow IP addresses as authorized IP addresses. ","version":"Next","tagName":"h3"},{"title":"Connect With SSH Tunneling​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#connect-with-ssh-tunneling","content":" To allow SSH tunneling to a database instance hosted on Google Cloud, you must set up a virtual machine (VM). Begin by finding your public SSH key on your local machine. In the .ssh subdirectory of your user home directory, look for the PEM file that contains the private SSH key. Check that it starts with -----BEGIN RSA PRIVATE KEY-----, which indicates it is an RSA-based file. If no such file exists, generate one using the command: ssh-keygen -m PEM -t rsa If a PEM file exists, but starts with -----BEGIN OPENSSH PRIVATE KEY-----, convert it with the command: ssh-keygen -p -N "" -m pem -f /path/to/key If your Google login differs from your local username, generate a key that includes your Google email address as a comment: ssh-keygen -m PEM -t rsa -C user@domain.com Create and start a new VM in GCP, choosing an image that supports OS Login. Add your public key to the VM. Reserve an external IP address and connect it to the VM during setup. Note the generated address. Configuration Tip To configure the connector, you must specify the database address in the format host:port. (You can also supply host only; the connector will use the port 5432 by default, which is correct in many cases.) You can find the host and port in the following location: Host as Private IP Address; port is always 5432. You may need to configure private IP on your database. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Postgres materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 5432.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /schema\tDatabase Schema\tDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables\tstring\t"public" /user\tUser\tDatabase user to connect as.\tstring\tRequired /advanced\tAdvanced Options\tOptions for advanced users. You should not typically need to modify these.\tobject /advanced/sslmode\tSSL Mode\tOverrides SSL connection behavior by setting the 'sslmode' parameter.\tstring\t Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/additional_table_create_sql\tAdditional Table Create SQL\tAdditional SQL statement(s) to be run in the same transaction that creates the table.\tstring /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse /schema\tAlternative Schema\tAlternative schema for this table (optional). Overrides schema set in endpoint configuration.\tstring /table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-postgres:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#reserved-words","content":" PostgreSQL has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation. These reserve words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words abs\tcurrent_transform_group_for_type\tindicator\torder\tsqlexception absolute\tcurrent_user\tinitial\tout\tsqlstate acos\tcursor\tinitially\touter\tsqlwarning action\tcycle\tinner\toutput\tsqrt add\tdatalink\tinout\tover\tstart all\tdate\tinput\toverlaps\tstatic allocate\tday\tinsensitive\toverlay\tstddev_pop alter\tdeallocate\tinsert\tpad\tstddev_samp analyse\tdec\tint\tparameter\tsubmultiset analyze\tdecfloat\tinteger\tpartial\tsubset and\tdecimal\tintersect\tpartition\tsubstring any\tdeclare\tintersection\tpattern\tsubstring_regex are\tdefault\tinterval\tper\tsucceeds array\tdeferrable\tinto\tpercent\tsum array_agg\tdeferred\tis\tpercentile_cont\tsymmetric array_max_cardinality\tdefine\tisnull\tpercentile_disc\tsystem as\tdelete\tisolation\tpercent_rank\tsystem_time asc\tdense_rank\tjoin\tperiod\tsystem_user asensitive\tderef\tjson_array\tpermute\ttable asin\tdesc\tjson_arrayagg\tplacing\ttablesample assertion\tdescribe\tjson_exists\tportion\ttan asymmetric\tdescriptor\tjson_object\tposition\ttanh at\tdeterministic\tjson_objectagg\tposition_regex\ttemporary atan\tdiagnostics\tjson_query\tpower\tthen atomic\tdisconnect\tjson_table\tprecedes\ttime authorization\tdistinct\tjson_table_primitive\tprecision\ttimestamp avg\tdlnewcopy\tjson_value\tprepare\ttimezone_hour begin\tdlpreviouscopy\tkey\tpreserve\ttimezone_minute begin_frame\tdlurlcomplete\tlag\tprimary\tto begin_partition\tdlurlcompleteonly\tlanguage\tprior\ttrailing between\tdlurlcompletewrite\tlarge\tprivileges\ttransaction bigint\tdlurlpath\tlast\tprocedure\ttranslate binary\tdlurlpathonly\tlast_value\tptf\ttranslate_regex bit\tdlurlpathwrite\tlateral\tpublic\ttranslation bit_length\tdlurlscheme\tlead\trange\ttreat blob\tdlurlserver\tleading\trank\ttrigger boolean\tdlvalue\tleft\tread\ttrim both\tdo\tlevel\treads\ttrim_array by\tdomain\tlike\treal\ttrue call\tdouble\tlike_regex\trecursive\ttruncate called\tdrop\tlimit\tref\tuescape cardinality\tdynamic\tlistagg\treferences\tunion cascade\teach\tln\treferencing\tunique cascaded\telement\tlocal\tregr_avgx\tunknown case\telse\tlocaltime\tregr_avgy\tunmatched cast\tempty\tlocaltimestamp\tregr_count\tunnest catalog\tend\tlog\tregr_intercept\tupdate ceil\tend-exec\tlog10\tregr_r2\tupper ceiling\tend_frame\tlower\tregr_slope\tusage char\tend_partition\tmatch\tregr_sxx\tuser character\tequals\tmatches\tregr_sxy\tusing character_length\tescape\tmatch_number\tregr_syy\tvalue char_length\tevery\tmatch_recognize\trelative\tvalues check\texcept\tmax\trelease\tvalue_of classifier\texception\tmeasures\trestrict\tvarbinary clob\texec\tmember\tresult\tvarchar close\texecute\tmerge\treturn\tvariadic coalesce\texists\tmethod\treturning\tvarying collate\texp\tmin\treturns\tvar_pop collation\texternal\tminute\trevoke\tvar_samp collect\textract\tmod\tright\tverbose column\tfalse\tmodifies\trollback\tversioning commit\tfetch\tmodule\trollup\tview concurrently\tfilter\tmonth\trow\twhen condition\tfirst\tmultiset\trows\twhenever connect\tfirst_value\tnames\trow_number\twhere connection\tfloat\tnational\trunning\twidth_bucket constraint\tfloor\tnatural\tsavepoint\twindow constraints\tfor\tnchar\tschema\twith contains\tforeign\tnclob\tscope\twithin continue\tfound\tnew\tscroll\twithout convert\tframe_row\tnext\tsearch\twork copy\tfree\tno\tsecond\twrite corr\tfreeze\tnone\tsection\txml corresponding\tfrom\tnormalize\tseek\txmlagg cos\tfull\tnot\tselect\txmlattributes cosh\tfunction\tnotnull\tsensitive\txmlbinary count\tfusion\tnth_value\tsession\txmlcast covar_pop\tget\tntile\tsession_user\txmlcomment covar_samp\tglobal\tnull\tset\txmlconcat create\tgo\tnullif\tshow\txmldocument cross\tgoto\tnumeric\tsimilar\txmlelement cube\tgrant\toccurrences_regex\tsin\txmlexists cume_dist\tgroup\toctet_length\tsinh\txmlforest current\tgrouping\tof\tsize\txmliterate current_catalog\tgroups\toffset\tskip\txmlnamespaces current_date\thaving\told\tsmallint\txmlparse current_default_transform_group\thold\tomit\tsome\txmlpi current_path\thour\ton\tspace\txmlquery current_role\tidentity\tone\tspecific\txmlserialize current_row\tilike\tonly\tspecifictype\txmltable current_schema\timmediate\topen\tsql\txmltext current_time\timport\toption\tsqlcode\txmlvalidate current_timestamp\tin\tor\tsqlerror\tyear ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Google Cloud SQL for PostgreSQL","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V4: 2022-11-30​ This version includes breaking changes to materialized table columns. These provide more consistent column names and types, but tables created from previous versions of the connector may not be compatible with this version. Capitalization is now preserved when fields in Flow are converted to Postgres column names. Previously, fields containing uppercase letters were converted to lowercase. Field names and values of types date, duration, ipv4, ipv6, macaddr, macaddr8, and time are now converted into their corresponding Postgres types. Previously, only date-time was converted, and all others were materialized as strings. ","version":"Next","tagName":"h2"},{"title":"Rockset","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Rockset","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/#prerequisites","content":" To use this connector, you'll need: A Rockset API key generated The API key must have the Member or Admin role. A Rockset workspace Optional; if none exist, one will be created by the connector. A Rockset collection Optional; if none exist, one will be created by the connector. At least one Flow collection tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Rockset","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Rockset materialization, which will direct one or more of your Flow collections to your desired Rockset collections. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Rockset","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/api_key\tRockset API Key\tThe key used to authenticate to the Rockset API. Must have role of admin or member.\tstring\tRequired /region_base_url\tRegion Base URL\tThe base URL to connect to your Rockset deployment. Example: api.usw2a1.rockset.com (do not include the protocol). See supported options and how to find yours.\tstring\tRequired Bindings​ The binding configuration includes the optional Advanced collection settings section. These settings can help optimize your output Rockset collections: Clustering fields: You can specify clustering fields for your Rockset collection's columnar index to help optimize specific query patterns. See the Rockset docs for more information.Retention period: Amount of time before data is purged, in seconds. A low value will keep the amount of data indexed in Rockset smaller. Property\tTitle\tDescription\tType\tRequired/Default/advancedCollectionSettings\tAdvanced Collection Settings object /advancedCollectionSettings/clustering_key\tClustering Key\tList of clustering fields\tarray /advancedCollectionSettings/clustering_key/-/field_name\tField Name\tThe name of a field\tstring /advancedCollectionSettings/retention_secs\tRetention Period\tNumber of seconds after which data is purged based on event time\tinteger /collection\tRockset Collection\tThe name of the Rockset collection (will be created if it does not exist)\tstring\tRequired /workspace\tWorkspace\tThe name of the Rockset workspace (will be created if it does not exist)\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Rockset","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: region_base_url: api.usw2a1.rockset.com api_key: supersecret # Path to the latest version of the connector, provided as a Docker image image: ghcr.io/estuary/materialize-rockset:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: workspace: ${namespace_name} collection: ${table_name} source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Delta updates and reduction strategies​","type":1,"pageTitle":"Rockset","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/#delta-updates-and-reduction-strategies","content":" The Rockset connector operates only in delta updates mode. This means that Rockset, rather than Flow, performs the document merge. In some cases, this will affect how materialized views look in Rockset compared to other systems that use standard updates. Rockset merges documents by the key defined in the Flow collection schema, and always uses the semantics of RFC 7396 - JSON merge. This differs from how Flow would reduce documents, most notably in that Rockset will not honor any reduction strategies defined in your Flow schema. For consistent output of a given collection across Rockset and other materialization endpoints, it's important that that collection's reduction annotations in Flow mirror Rockset's semantics. To accomplish this, ensure that your collection schema has the following data reductions defined in its schema: A top-level reduction strategy of mergeA strategy of lastWriteWins for all nested values (this is the default) ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Rockset","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V2: 2022-12-06​ Region Base URL was added and is now required as part of the endpoint configuration.Event Time fields and the Insert Only option were removed from the advanced collection settings. ","version":"Next","tagName":"h2"},{"title":"Slack","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/#prerequisites","content":" To use this connector, ensure you have the following: An active Slack workspace with appropriate permissions.Slack credentials and access token for authentication.At least one Flow collection. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/#configuration","content":" The Slack connector is available for use in the Flow web application. To learn more about connectors and how to set them up, read our guide on using connectors. Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/access_token\tAccess Token\tThe Slack API access token for authentication.\tstring\tRequired /client_id\tClient ID\tClient ID for authentication.\tstring\tRequired /client_secret\tClient Secret\tThe Slack API client secret.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/source\tSource\tSource data in Flow to be sent to Slack.\tstring\tRequired /channel\tChannel\tThe ID of the Slack channel to send messages to.\tstring\tRequired /display_name\tDisplay Name\tThe display name for the sender in Slack.\tstring /logo_emoji\tLogo Emoji\tThe emoji to be used.\tstring\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Slack","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/#sample","content":" materializations: ${PREFIX}/${MATERIALIZATION_NAME}: endpoint: connector: image: ghcr.io/estuary/materialize-slack:dev config: credentials: auth_type: OAuth access_token: {secret} client_id: {your_client_id} client_secret: {secret} bindings: - source: ${PREFIX}/source_name resource: channel: "id: C05A95LJHSL" sender_config: display_name: Task Monitor logo_emoji: ":eyes:" ","version":"Next","tagName":"h3"},{"title":"SQLite","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"SQLite","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/#prerequisites","content":" To use this connector, you'll need: At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"SQLite","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/#configuration","content":" This materialization requires no configuration, and all you need to do is choose a collection to materialize. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"SQLite","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/#properties","content":" Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"SQLite","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-sqlite:dev config: {} bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"SQLite","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/#delta-updates","content":" This connector does not support delta updates at the moment. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"SQLite","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/#reserved-words","content":" SQLite has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official SQlite documentation. These reserve words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words\tabort\tintersect action\tinto add\tis after\tisnull all\tjoin alter\tkey always\tlast analyze\tleft and\tlike as\tlimit asc\tmatch attach\tmaterialized autoincrement\tnatural before\tno begin\tnot between\tnothing by\tnotnull cascade\tnull case\tnulls cast\tof check\toffset collate\ton column\tor commit\torder conflict\tothers constraint\touter create\tover cross\tpartition current\tplan current_date\tpragma current_time\tpreceding current_timestamp\tprimary database\tquery default\traise deferrable\trange deferred\trecursive delete\treferences desc\tregexp detach\treindex distinct\trelease do\trename drop\treplace each\trestrict else\treturning end\tright escape\trollback except\trow exclude\trows exclusive\tsavepoint exists\tselect explain\tset fail\ttable filter\ttemp first\ttemporary following\tthen for\tties foreign\tto from\ttransaction full\ttrigger generated\tunbounded glob\tunion group\tunique groups\tupdate having\tusing if\tvacuum ignore\tvalues immediate\tview in\tvirtual index\twhen indexed\twhere initially\twindow inner\twith insert\twithout instead\t ","version":"Next","tagName":"h2"},{"title":"Amazon RDS for SQL Server","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#prerequisites","content":" To use this connector, you'll need: A SQLServer database to which to materialize, and user credentials. SQLServer 2017 and later are supportedThe connector will create new tables in the database per your specification, so user credentials must have access to create new tables. At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup Amazon RDS for SQL Server​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#setup-amazon-rds-for-sql-server","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the database, setting Public accessibility to Yes.Edit the VPC security group associated with your database, or create a new VPC security group and associate it as described in the Amazon documentation.Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Create user and password for use with the connector. CREATE LOGIN flow_materialize WITH PASSWORD = 'secret'; CREATE USER flow_materialize FOR LOGIN flow_materialize; -- Grant control on the database to flow_materialize GRANT CONTROL ON DATABASE::<database> TO flow_materialize; In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Connecting to SQLServer​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#connecting-to-sqlserver","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Modify the database, setting Public accessibility to Yes.Edit the VPC security group associated with your database, or create a new VPC security group and associate it as described in the Amazon documentation.Create a new inbound rule and a new outbound rule that allow all traffic from the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Create user and password for use with the connector. CREATE LOGIN flow_materialize WITH PASSWORD = 'Secret123!'; CREATE USER flow_materialize FOR LOGIN flow_materialize; -- Grant control on the database to flow_materialize GRANT CONTROL ON DATABASE::<database> TO flow_materialize; In the RDS console, note the instance's Endpoint and Port. You'll need these for the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a SQLServer materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring\tRequired /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 3306.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-sqlserver:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#reserved-words","content":" SQLServer has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words in the official SQLServer documentation. These reserved words are listed in the table below. Flow automatically quotes fields that are in this list. | Reserved words | | | | | | -------------- | ------------- | ------------- | ------------- | ------------- | ----- | | absolute | connect | else | intersect | on | | action | connection | end | intersection | only | | ada | constraint | end-exec | interval | open | | add | constraints | equals | into | opendatasourc | | admin | constructor | errlvl | is | openquery | | after | contains | escape | isolation | openrowset | | aggregate | containstable | every | iterate | openxml | | alias | continue | except | join | operation | | all | convert | exception | key | option | | allocate | corr | exec | kill | or | | alter | corresponding | execute | language | order | | and | count | exists | large | ordinality | | any | covar_pop | exit | last | out | | are | covar_samp | external | lateral | outer | | array | create | extract | leading | output | | as | cross | false | left | over | | asc | cube | fetch | less | overlaps | | asensitive | cume_dist | file | level | overlay | | assertion | current | fillfactor | like | pad | | asymmetric | current_catal | filter | like_regex | parameter | | at | current_date | first | limit | parameters | | atomic | current_defau | float | lineno | partial | | authorization | current_path | for | ln | partition | | avg | current_role | foreign | load | pascal | | backup | current_schem | fortran | local | path | | before | current_time | found | localtime | percent | | begin | current_times | free | localtimestam | percent_rank | | between | current_trans | freetext | locator | percentile_co | | binary | current_user | freetexttable | lower | percentile_di | | bit | cursor | from | map | pivot | | bit_length | cycle | full | match | plan | | blob | data | fulltexttable | max | position | | boolean | database | function | member | position_rege | | both | date | fusion | merge | postfix | | breadth | day | general | method | precision | | break | dbcc | get | min | prefix | | browse | deallocate | global | minute | preorder | | bulk | dec | go | mod | prepare | | by | decimal | goto | modifies | preserve | | call | declare | grant | modify | primary | | called | default | group | module | print | | cardinality | deferrable | grouping | month | prior | | cascade | deferred | having | multiset | privileges | | cascaded | delete | hold | names | proc | | case | deny | holdlock | national | procedure | | cast | depth | host | natural | public | | catalog | deref | hour | nchar | raiserror | | char | desc | identity | nclob | range | | char_length | describe | identity_inse | new | read | | character | descriptor | identitycol | next | reads | | character_len | destroy | if | no | readtext | | check | destructor | ignore | nocheck | real | | checkpoint | deterministic | immediate | nonclustered | reconfigure | | class | diagnostics | in | none | recursive | | clob | dictionary | include | normalize | ref | | close | disconnect | index | not | references | | clustered | disk | indicator | null | referencing | | coalesce | distinct | initialize | nullif | regr_avgx | | collate | distributed | initially | numeric | regr_avgy | | collation | domain | inner | object | regr_count | | collect | double | inout | occurrences_r | regr_intercep | | column | drop | input | octet_length | regr_r2 | | commit | dump | insensitive | of | regr_slope | | completion | dynamic | insert | off | regr_sxx | | compute | each | int | offsets | regr_sxy | | condition | element | integer | old | regr_syy | | relative | semanticsimil | structure | truncate | window | | release | semanticsimil | submultiset | try_convert | with | | replication | sensitive | substring | tsequal | within | group | | restore | sequence | substring_reg | uescape | within | | restrict | session | sum | under | without | | result | session_user | symmetric | union | work | | return | set | system | unique | write | | returns | sets | system_user | unknown | writetext | | revert | setuser | table | unnest | xmlagg | | revoke | shutdown | tablesample | unpivot | xmlattributes | | right | similar | temporary | update | xmlbinary | | role | size | terminate | updatetext | xmlcast | | rollback | smallint | textsize | upper | xmlcomment | | rollup | some | than | usage | xmlconcat | | routine | space | then | use | xmldocument | | row | specific | time | user | xmlelement | | rowcount | specifictype | timestamp | using | xmlexists | | rowguidcol | sql | timezone_hour | value | xmlforest | | rows | sqlca | timezone_minu | values | xmliterate | | rule | sqlcode | to | var_pop | xmlnamespaces | | save | sqlerror | top | var_samp | xmlparse | | savepoint | sqlexception | trailing | varchar | xmlpi | | schema | sqlstate | tran | variable | xmlquery | | scope | sqlwarning | transaction | varying | xmlserialize | | scroll | start | translate | view | xmltable | | search | state | translate_reg | waitfor | xmltext | | second | statement | translation | when | xmlvalidate | | section | static | treat | whenever | year | | securityaudit | statistics | trigger | where | zone | | select | stddev_pop | trim | while | | semantickeyph | stddev_samp | true | width_bucket | ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Amazon RDS for SQL Server","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V1: 2023-09-01​ First version ","version":"Next","tagName":"h2"},{"title":"Snowflake","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#prerequisites","content":" To use this connector, you'll need: A Snowflake account that includes: A target database, to which you'll materialize dataA schema — a logical grouping of database objects — within the target databaseA virtual warehouseA user with a role assigned that grants the appropriate access levels to these resources. See the script below for details. Know your Snowflake account's host URL. This is formatted using your Snowflake account identifier, for example, orgname-accountname.snowflakecomputing.com.At least one Flow collection tip If you haven't yet captured your data from its external source, start at the beginning of the guide to create a dataflow. You'll be referred back to this connector-specific documentation at the appropriate steps. ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#setup","content":" To meet the prerequisites, copy and paste the following script into the Snowflake SQL editor, replacing the variable names in the first six lines. If you'd like to use an existing database, warehouse, and/or schema, be sure to setdatabase_name, warehouse_name, and estuary_schema accordingly. If you specify a new name, the script will create the item for you. You can set estuary_role, estuary_user, and estuary_password to whatever you'd like. Check the All Queries check box, and click Run. set database_name = 'ESTUARY_DB'; set warehouse_name = 'ESTUARY_WH'; set estuary_role = 'ESTUARY_ROLE'; set estuary_user = 'ESTUARY_USER'; set estuary_password = 'secret'; set estuary_schema = 'ESTUARY_SCHEMA'; -- create role and schema for Estuary create role if not exists identifier($estuary_role); grant role identifier($estuary_role) to role SYSADMIN; -- Create snowflake DB create database if not exists identifier($database_name); use database identifier($database_name); create schema if not exists identifier($estuary_schema); -- create a user for Estuary create user if not exists identifier($estuary_user) password = $estuary_password default_role = $estuary_role default_warehouse = $warehouse_name; grant role identifier($estuary_role) to user identifier($estuary_user); grant all on schema identifier($estuary_schema) to identifier($estuary_role); -- create a warehouse for estuary create warehouse if not exists identifier($warehouse_name) warehouse_size = xsmall warehouse_type = standard auto_suspend = 60 auto_resume = true initially_suspended = true; -- grant Estuary role access to warehouse grant USAGE on warehouse identifier($warehouse_name) to role identifier($estuary_role); -- grant Estuary access to database grant CREATE SCHEMA, MONITOR, USAGE on database identifier($database_name) to role identifier($estuary_role); -- change role to ACCOUNTADMIN for STORAGE INTEGRATION support to Estuary (only needed for Snowflake on GCP) use role ACCOUNTADMIN; grant CREATE INTEGRATION on account to role identifier($estuary_role); use role sysadmin; COMMIT; ","version":"Next","tagName":"h3"},{"title":"Key-pair Authentication & Snowpipe​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#key-pair-authentication--snowpipe","content":" In order to enable use of Snowpipe for delta updates bindings, you need to authenticate using key-pair authentication, also known as JWT authentication. To set up your user for key-pair authentication, first generate a key-pair in your shell: # generate a private key openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt # generate a public key openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub # read the public key and copy it to clipboard cat rsa_key.pub -----BEGIN PUBLIC KEY----- MIIBIj... -----END PUBLIC KEY----- Then assign the public key with your Snowflake user using these SQL commands: ALTER USER $estuary_user SET RSA_PUBLIC_KEY='MIIBIjANBgkqh...' Verify the public key fingerprint in Snowflake matches the one you have locally: DESC USER $estuary_user; SELECT TRIM((SELECT "value" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE "property" = 'RSA_PUBLIC_KEY_FP'), 'SHA256:'); Then compare with the local version: openssl rsa -pubin -in rsa_key.pub -outform DER | openssl dgst -sha256 -binary | openssl enc -base64 Now you can use the generated private key when configuring your Snowflake connector. Once you have key-pair authentication enabled, delta updates bindings will use Snowpipe for loading data. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Snowflake materialization, which will direct one or more of your Flow collections to new Snowflake tables. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/host\tHost (Account URL)\tThe Snowflake Host used for the connection. Example: orgname-accountname.snowflakecomputing.com (do not include the protocol).\tstring\tRequired /database\tDatabase\tName of the Snowflake database to which to materialize\tstring\tRequired /schema\tSchema\tDatabase schema for bound collection tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables\tstring\tRequired /warehouse\tWarehouse\tName of the data warehouse that contains the database\tstring /role\tRole\tRole assigned to the user\tstring /account\tAccount\tThe Snowflake account identifier\tstring /credentials\tCredentials\tCredentials for authentication\tobject\tRequired /credentials/auth_type\tAuthentication type\tOne of user_password or jwt\tstring\tRequired /credentials/user\tUser\tSnowflake username\tstring\tRequired /credentials/password\tPassword\tRequired if using user_password authentication\tstring\tRequired /credentials/privateKey\tPrivate Key\tRequired if using jwt authentication\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name\tstring\tRequired /schema\tAlternative Schema\tAlternative schema for this table\tstring /delta_updates\tDelta updates\tWhether to use standard or delta updates\tboolean\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#sample","content":" User and password authentication: materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: database: acmeCo_db host: orgname-accountname.snowflakecomputing.com schema: acmeCo_flow_schema warehouse: acmeCo_warehouse credentials: auth_type: user_pasword user: snowflake_user password: secret image: ghcr.io/estuary/materialize-snowflake:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: table: ${table_name} source: ${PREFIX}/${source_collection} Key-pair authentication: materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: database: acmeCo_db host: orgname-accountname.snowflakecomputing.com schema: acmeCo_flow_schema warehouse: acmeCo_warehouse credentials: auth_type: jwt user: snowflake_user privateKey: | -----BEGIN PRIVATE KEY----- MIIEv.... ... ... ... ... ... -----END PRIVATE KEY----- image: ghcr.io/estuary/materialize-snowflake:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: table: ${table_name} source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Sync Schedule​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#sync-schedule","content":" This connector supports configuring a schedule for sync frequency. You can read about how to configure this here. Snowflake compute is priced per second of activity, with a minimum of 60 seconds. Inactive warehouses don't incur charges. To keep costs down, you'll want to minimize your warehouse's active time. To accomplish this, we recommend a two-pronged approach: Configure your Snowflake warehouse to auto-suspend after 60 seconds. This ensures that after each transaction completes, you'll only be charged for one minute of compute, Snowflake's smallest granularity. Use a query like the one shown below, being sure to substitute your warehouse name: ALTER WAREHOUSE ESTUARY_WH SET auto_suspend = 60; Configure the materialization's Sync Schedule based on your requirements for data freshness. ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. Enabling delta updates will prevent Flow from querying for documents in your Snowflake table, which can reduce latency and costs for large datasets. If you're certain that all events will have unique keys, enabling delta updates is a simple way to improve performance with no effect on the output. However, enabling delta updates is not suitable for all workflows, as the resulting table in Snowflake won't be fully reduced. You can enable delta updates on a per-binding basis: bindings: - resource: table: ${table_name} delta_updates: true source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h2"},{"title":"Performance considerations​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#performance-considerations","content":" ","version":"Next","tagName":"h2"},{"title":"Optimizing performance for standard updates​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#optimizing-performance-for-standard-updates","content":" When using standard updates for a large dataset, the collection key you choose can have a significant impact on materialization performance and efficiency. Snowflake uses micro partitions to physically arrange data within tables. Each micro partition includes metadata, such as the minimum and maximum values for each column. If you choose a collection key that takes advantage of this metadata to help Snowflake prune irrelevant micro partitions, you'll see dramatically better performance. For example, if you materialize a collection with a key of /user_id, it will tend to perform far worse than a materialization of /date, /user_id. This is because most materializations tend to be roughly chronological over time, and that means that data is written to Snowflake in roughly /date order. This means that updates of keys /date, /user_id will need to physically read far fewer rows as compared to a key like /user_id, because those rows will tend to live in the same micro-partitions, and Snowflake is able to cheaply prune micro-partitions that aren't relevant to the transaction. ","version":"Next","tagName":"h3"},{"title":"Snowpipe​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#snowpipe","content":" Snowpipe allows for loading data into target tables without waking up the warehouse, which can be cheaper and more performant. Snowpipe can be used for delta updates bindings, and it requires configuring your authentication using a private key. Instructions for configuring key-pair authentication can be found in this page: Key-pair Authentication & Snowpipe ","version":"Next","tagName":"h3"},{"title":"Timestamp Data Type Mapping​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#timestamp-data-type-mapping","content":" Flow materializes timestamp data types as either TIMESTAMP_LTZ orTIMESTAMP_TZ columns in Snowflake. TIMESTAMP_LTZ is used unless the Snowflake TIMESTAMP_TYPE_MAPPING configuration is set to TIMESTAMP_TZ, which will cause Flow to use TIMESTAMP_TZ columns. Flow never creates columns as TIMESTAMP_NTZ. See Snowflake documentation on TIMESTAMP_TYPE_MAPPING for more information. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Snowflake","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/#reserved-words","content":" Snowflake has a list of reserved words that must be quoted in order to be used as an identifier. Flow automatically quotes fields that are in the reserved words list. You can find this list in Snowflake's documentation here and in the table below. caution In Snowflake, objects created with quoted identifiers must always be referenced exactly as created, including the quotes. Otherwise, SQL statements and queries can result in errors. See the Snowflake docs. Reserved words account\tfrom\tqualify all\tfull\tregexp alter\tgrant\trevoke and\tgroup\tright any\tgscluster\trlike as\thaving\trow between\tilike\trows by\tin\tsample case\tincrement\tschema cast\tinner\tselect check\tinsert\tset column\tintersect\tsome connect\tinto\tstart connection\tis\ttable constraint\tissue\ttablesample create\tjoin\tthen cross\tlateral\tto current\tleft\ttrigger current_date\tlike\ttrue current_time\tlocaltime\ttry_cast current_timestamp\tlocaltimestamp\tunion current_user\tminus\tunique database\tnatural\tupdate delete\tnot\tusing distinct\tnull\tvalues drop\tof\tview else\ton\twhen exists\tor\twhenever false\torder\twhere following\torganization\twith for ","version":"Next","tagName":"h2"},{"title":"Google Cloud SQL for SQLServer","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#prerequisites","content":" To use this connector, you'll need: A SQLServer database to which to materialize, and user credentials. SQLServer 2017 and later are supportedThe connector will create new tables in the database per your specification, so user credentials must have access to create new tables. At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup Google Cloud SQL for SQL Server​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#setup-google-cloud-sql-for-sql-server","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Enable public IP on your database and add Estuary Flow IP addresses as authorized IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Create user and password for use with the connector. CREATE LOGIN flow_materialize WITH PASSWORD = 'secret'; CREATE USER flow_materialize FOR LOGIN flow_materialize; -- Grant control on the database to flow_materialize GRANT CONTROL ON DATABASE::<database> TO flow_materialize; In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 1433. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Connecting to SQLServer​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#connecting-to-sqlserver","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Enable public IP on your database and add Estuary Flow IP addresses as authorized IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Create user and password for use with the connector. CREATE LOGIN flow_materialize WITH PASSWORD = 'Secret123!'; CREATE USER flow_materialize FOR LOGIN flow_materialize; -- Grant control on the database to flow_materialize GRANT CONTROL ON DATABASE::<database> TO flow_materialize; In the Cloud Console, note the instance's host under Public IP Address. Its port will always be 1433. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a SQLServer materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring\tRequired /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 1433.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-sqlserver:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#reserved-words","content":" SQLServer has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words in the official SQLServer documentation. These reserved words are listed in the table below. Flow automatically quotes fields that are in this list. | Reserved words | | | | | | -------------- | ------------- | ------------- | ------------- | ------------- | ----- | | absolute | connect | else | intersect | on | | action | connection | end | intersection | only | | ada | constraint | end-exec | interval | open | | add | constraints | equals | into | opendatasourc | | admin | constructor | errlvl | is | openquery | | after | contains | escape | isolation | openrowset | | aggregate | containstable | every | iterate | openxml | | alias | continue | except | join | operation | | all | convert | exception | key | option | | allocate | corr | exec | kill | or | | alter | corresponding | execute | language | order | | and | count | exists | large | ordinality | | any | covar_pop | exit | last | out | | are | covar_samp | external | lateral | outer | | array | create | extract | leading | output | | as | cross | false | left | over | | asc | cube | fetch | less | overlaps | | asensitive | cume_dist | file | level | overlay | | assertion | current | fillfactor | like | pad | | asymmetric | current_catal | filter | like_regex | parameter | | at | current_date | first | limit | parameters | | atomic | current_defau | float | lineno | partial | | authorization | current_path | for | ln | partition | | avg | current_role | foreign | load | pascal | | backup | current_schem | fortran | local | path | | before | current_time | found | localtime | percent | | begin | current_times | free | localtimestam | percent_rank | | between | current_trans | freetext | locator | percentile_co | | binary | current_user | freetexttable | lower | percentile_di | | bit | cursor | from | map | pivot | | bit_length | cycle | full | match | plan | | blob | data | fulltexttable | max | position | | boolean | database | function | member | position_rege | | both | date | fusion | merge | postfix | | breadth | day | general | method | precision | | break | dbcc | get | min | prefix | | browse | deallocate | global | minute | preorder | | bulk | dec | go | mod | prepare | | by | decimal | goto | modifies | preserve | | call | declare | grant | modify | primary | | called | default | group | module | print | | cardinality | deferrable | grouping | month | prior | | cascade | deferred | having | multiset | privileges | | cascaded | delete | hold | names | proc | | case | deny | holdlock | national | procedure | | cast | depth | host | natural | public | | catalog | deref | hour | nchar | raiserror | | char | desc | identity | nclob | range | | char_length | describe | identity_inse | new | read | | character | descriptor | identitycol | next | reads | | character_len | destroy | if | no | readtext | | check | destructor | ignore | nocheck | real | | checkpoint | deterministic | immediate | nonclustered | reconfigure | | class | diagnostics | in | none | recursive | | clob | dictionary | include | normalize | ref | | close | disconnect | index | not | references | | clustered | disk | indicator | null | referencing | | coalesce | distinct | initialize | nullif | regr_avgx | | collate | distributed | initially | numeric | regr_avgy | | collation | domain | inner | object | regr_count | | collect | double | inout | occurrences_r | regr_intercep | | column | drop | input | octet_length | regr_r2 | | commit | dump | insensitive | of | regr_slope | | completion | dynamic | insert | off | regr_sxx | | compute | each | int | offsets | regr_sxy | | condition | element | integer | old | regr_syy | | relative | semanticsimil | structure | truncate | window | | release | semanticsimil | submultiset | try_convert | with | | replication | sensitive | substring | tsequal | within | group | | restore | sequence | substring_reg | uescape | within | | restrict | session | sum | under | without | | result | session_user | symmetric | union | work | | return | set | system | unique | write | | returns | sets | system_user | unknown | writetext | | revert | setuser | table | unnest | xmlagg | | revoke | shutdown | tablesample | unpivot | xmlattributes | | right | similar | temporary | update | xmlbinary | | role | size | terminate | updatetext | xmlcast | | rollback | smallint | textsize | upper | xmlcomment | | rollup | some | than | usage | xmlconcat | | routine | space | then | use | xmldocument | | row | specific | time | user | xmlelement | | rowcount | specifictype | timestamp | using | xmlexists | | rowguidcol | sql | timezone_hour | value | xmlforest | | rows | sqlca | timezone_minu | values | xmliterate | | rule | sqlcode | to | var_pop | xmlnamespaces | | save | sqlerror | top | var_samp | xmlparse | | savepoint | sqlexception | trailing | varchar | xmlpi | | schema | sqlstate | tran | variable | xmlquery | | scope | sqlwarning | transaction | varying | xmlserialize | | scroll | start | translate | view | xmltable | | search | state | translate_reg | waitfor | xmltext | | second | statement | translation | when | xmlvalidate | | section | static | treat | whenever | year | | securityaudit | statistics | trigger | where | zone | | select | stddev_pop | trim | while | | semantickeyph | stddev_samp | true | width_bucket | ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Google Cloud SQL for SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V1: 2023-09-01​ First version ","version":"Next","tagName":"h2"},{"title":"Microsoft SQLServer","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#prerequisites","content":" To use this connector, you'll need: A SQLServer database to which to materialize, and user credentials. SQLServer 2017 and later are supportedThe connector will create new tables in the database per your specification, so user credentials must have access to create new tables. At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#setup","content":" To meet these requirements, follow the steps for your hosting type. Self-hosted SQL ServerAzure SQL DatabaseAmazon RDS for SQL ServerGoogle Cloud SQL for SQL Server ","version":"Next","tagName":"h2"},{"title":"Self-hosted SQL Server​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#self-hosted-sql-server","content":" Connect to the server and issue the following commands: USE <database>; -- Create user and password for use with the connector. CREATE LOGIN flow_materialize WITH PASSWORD = 'secret'; CREATE USER flow_materialize FOR LOGIN flow_materialize; -- Grant control on the database to flow_materialize GRANT CONTROL ON DATABASE::<database> TO flow_materialize; Allow secure connection to Estuary Flow from your hosting environment. Either: Set up an SSH server for tunneling. When you fill out the endpoint configuration, include the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networksfor additional details and a sample. Allowlist the Estuary IP addresses in your firewall rules. ","version":"Next","tagName":"h3"},{"title":"Azure SQL Database​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#azure-sql-database","content":" Allow connections between the database and Estuary Flow. There are two ways to do this: by granting direct access to Flow's IP or by creating an SSH tunnel. To allow direct access: Create a new firewall rule that grants access to the Estuary Flow IP addresses. To allow secure connections via SSH tunneling: Follow the guide to configure an SSH server for tunnelingWhen you configure your connector as described in the configuration section above, including the additional networkTunnel configuration to enable the SSH tunnel. See Connecting to endpoints on secure networks for additional details and a sample. In your SQL client, connect to your instance as the default sqlserver user and issue the following commands. USE <database>; -- Create user and password for use with the connector. CREATE LOGIN flow_materialize WITH PASSWORD = 'secret'; CREATE USER flow_materialize FOR LOGIN flow_materialize; -- Grant control on the database to flow_materialize GRANT CONTROL ON DATABASE::<database> TO flow_materialize; Note the following important items for configuration: Find the instance's host under Server Name. The port is always 1433. Together, you'll use the host:port as the address property when you configure the connector. ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a SQLServer materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring\tRequired /address\tAddress\tHost and port of the database. If only the host is specified, port will default to 3306.\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /user\tUser\tDatabase user to connect as.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-sqlserver:dev config: database: flow address: localhost:5432 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Delta updates​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#reserved-words","content":" SQLServer has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words in the official SQLServer documentation. These reserved words are listed in the table below. Flow automatically quotes fields that are in this list. | Reserved words | | | | | | -------------- | ------------- | ------------- | ------------- | ------------- | ----- | | absolute | connect | else | intersect | on | | action | connection | end | intersection | only | | ada | constraint | end-exec | interval | open | | add | constraints | equals | into | opendatasourc | | admin | constructor | errlvl | is | openquery | | after | contains | escape | isolation | openrowset | | aggregate | containstable | every | iterate | openxml | | alias | continue | except | join | operation | | all | convert | exception | key | option | | allocate | corr | exec | kill | or | | alter | corresponding | execute | language | order | | and | count | exists | large | ordinality | | any | covar_pop | exit | last | out | | are | covar_samp | external | lateral | outer | | array | create | extract | leading | output | | as | cross | false | left | over | | asc | cube | fetch | less | overlaps | | asensitive | cume_dist | file | level | overlay | | assertion | current | fillfactor | like | pad | | asymmetric | current_catal | filter | like_regex | parameter | | at | current_date | first | limit | parameters | | atomic | current_defau | float | lineno | partial | | authorization | current_path | for | ln | partition | | avg | current_role | foreign | load | pascal | | backup | current_schem | fortran | local | path | | before | current_time | found | localtime | percent | | begin | current_times | free | localtimestam | percent_rank | | between | current_trans | freetext | locator | percentile_co | | binary | current_user | freetexttable | lower | percentile_di | | bit | cursor | from | map | pivot | | bit_length | cycle | full | match | plan | | blob | data | fulltexttable | max | position | | boolean | database | function | member | position_rege | | both | date | fusion | merge | postfix | | breadth | day | general | method | precision | | break | dbcc | get | min | prefix | | browse | deallocate | global | minute | preorder | | bulk | dec | go | mod | prepare | | by | decimal | goto | modifies | preserve | | call | declare | grant | modify | primary | | called | default | group | module | print | | cardinality | deferrable | grouping | month | prior | | cascade | deferred | having | multiset | privileges | | cascaded | delete | hold | names | proc | | case | deny | holdlock | national | procedure | | cast | depth | host | natural | public | | catalog | deref | hour | nchar | raiserror | | char | desc | identity | nclob | range | | char_length | describe | identity_inse | new | read | | character | descriptor | identitycol | next | reads | | character_len | destroy | if | no | readtext | | check | destructor | ignore | nocheck | real | | checkpoint | deterministic | immediate | nonclustered | reconfigure | | class | diagnostics | in | none | recursive | | clob | dictionary | include | normalize | ref | | close | disconnect | index | not | references | | clustered | disk | indicator | null | referencing | | coalesce | distinct | initialize | nullif | regr_avgx | | collate | distributed | initially | numeric | regr_avgy | | collation | domain | inner | object | regr_count | | collect | double | inout | occurrences_r | regr_intercep | | column | drop | input | octet_length | regr_r2 | | commit | dump | insensitive | of | regr_slope | | completion | dynamic | insert | off | regr_sxx | | compute | each | int | offsets | regr_sxy | | condition | element | integer | old | regr_syy | | relative | semanticsimil | structure | truncate | window | | release | semanticsimil | submultiset | try_convert | with | | replication | sensitive | substring | tsequal | within | group | | restore | sequence | substring_reg | uescape | within | | restrict | session | sum | under | without | | result | session_user | symmetric | union | work | | return | set | system | unique | write | | returns | sets | system_user | unknown | writetext | | revert | setuser | table | unnest | xmlagg | | revoke | shutdown | tablesample | unpivot | xmlattributes | | right | similar | temporary | update | xmlbinary | | role | size | terminate | updatetext | xmlcast | | rollback | smallint | textsize | upper | xmlcomment | | rollup | some | than | usage | xmlconcat | | routine | space | then | use | xmldocument | | row | specific | time | user | xmlelement | | rowcount | specifictype | timestamp | using | xmlexists | | rowguidcol | sql | timezone_hour | value | xmlforest | | rows | sqlca | timezone_minu | values | xmliterate | | rule | sqlcode | to | var_pop | xmlnamespaces | | save | sqlerror | top | var_samp | xmlparse | | savepoint | sqlexception | trailing | varchar | xmlpi | | schema | sqlstate | tran | variable | xmlquery | | scope | sqlwarning | transaction | varying | xmlserialize | | scroll | start | translate | view | xmltable | | search | state | translate_reg | waitfor | xmltext | | second | statement | translation | when | xmlvalidate | | section | static | treat | whenever | year | | securityaudit | statistics | trigger | where | zone | | select | stddev_pop | trim | while | | semantickeyph | stddev_samp | true | width_bucket | ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"Microsoft SQLServer","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V1: 2023-09-01​ First version ","version":"Next","tagName":"h2"},{"title":"Starburst","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#prerequisites","content":" To use this connector, you'll need: A Starburst Galaxy account (To create one: Staburst Galaxy start that includes: A running cluster containing an Amazon S3 catalogA schema which is a logical grouping of tablesStorage on S3 for temporary data with awsAccessKeyId and awsSecretAccessKey which should correspond to used catalogA user with a role assigned that grants access to create, modify, drop tables in specified Amazon S3 catalog At least one Flow collection ","version":"Next","tagName":"h2"},{"title":"Setup​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#setup","content":" To get host go to your Cluster -> Connection info -> Other clients (Connect clients) There is also need to grant access to temporary storage (Roles and privileges -> Select specific role -> Privileges -> Add privilege -> Location). "Create schema and table in location" should be selected. Doc ","version":"Next","tagName":"h3"},{"title":"Configuration​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a Starburst materialization, which will direct one or more of your Flow collections to new Starburst tables. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/host\tHost and optional port string\tRequired /catalog\tCatalog Name\tGalaxy catalog Catalog\tstring\tRequired /schema\tSchema Name\tDefault schema to materialize to\tstring\tRequired /account\tAccount\tGalaxy account name\tstring\tRequired /password\tPassword\tGalaxy account password\tstring\tRequired /awsAccessKeyId\tAWS Access Key ID string\tRequired /awsSecretAccessKey\tAWS Secret Access Key string\tRequired /region\tAWS Region\tRegion of AWS storage\tstring\tRequired /bucket\tBucket name string\tRequired /bucketPath\tBucket path\tA prefix that will be used to store objects in S3.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/table\tTable\tTable name\tstring\tRequired /schema\tAlternative Schema\tAlternative schema for this table\tstring\t ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: config: host: HOST:PORT account: ACCOUNT password: PASSWORD catalog: CATALOG_NAME schema: SCHEMA_NAME awsAccessKeyId: AWS_ACCESS_KEY_ID awsSecretAccessKey: AWS_SECRET_KEY_ID region: REGION bucket: BUCKET bucketPath: BUCKET_PATH image: ghcr.io/estuary/materialize-starburst:dev # If you have multiple collections you need to materialize, add a binding for each one # to ensure complete data flow-through bindings: - resource: table: ${table_name} schema: default source: ${PREFIX}/${source_collection} ","version":"Next","tagName":"h3"},{"title":"Sync Schedule​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#sync-schedule","content":" This connector supports configuring a schedule for sync frequency. You can read about how to configure this here. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"Starburst","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/#reserved-words","content":" Starburst Galaxy has a list of reserved words that must be quoted in order to be used as an identifier. Flow automatically quotes fields that are in the reserved words list. You can find this list in Trino's documentation here and in the table below. caution In Starburst Galaxy, objects created with quoted identifiers must always be referenced exactly as created, including the quotes. Otherwise, SQL statements and queries can result in errors. See the Trino docs. Reserved words CUBE\tINSERT\tTABLE CURRENT_CATALOG\tINTERSECT\tTHEN CURRENT_DATE\tINTO\tTRIM CURRENT_PATH\tIS\tTRUE CURRENT_ROLE\tJOIN\tUESCAPE CURRENT_SCHEMA\tJSON_ARRAY\tUNION CURRENT_TIME\tJSON_EXISTS\tUNNEST CURRENT_TIMESTAMP\tJSON_OBJECT\tUSING CURRENT_USER\tJSON_QUERY\tVALUES DEALLOCATE\tJSON_TABLE\tWHEN DELETE\tJSON_VALUE\tWHERE DESCRIBE\tLEFT\tWITH DISTINCT\tLIKE DROP\tLISTAGG ELSE\tLOCALTIME END\tLOCALTIMESTAMP ESCAPE\tNATURAL EXCEPT\tNORMALIZE EXECUTE\tNOT EXISTS\tNULL\t ","version":"Next","tagName":"h2"},{"title":"TimescaleDB","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/","content":"","keywords":"","version":"Next"},{"title":"Prerequisites​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#prerequisites","content":" To use this connector, you'll need: A TimescaleDB database to which to materialize. Know your user credentials, and the host and port. If using Timescale Cloud, this information is available on your console, on the Connection info pane. At least one Flow collection. ","version":"Next","tagName":"h2"},{"title":"Configuration​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#configuration","content":" To use this connector, begin with data in one or more Flow collections. Use the below properties to configure a TimescaleDB materialization, which will direct one or more of your Flow collections to your desired tables, or views, in the database. The connector will create new tables in the database per your specification. Tables created manually in advance are not supported. ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#properties","content":" Endpoint​ Property\tTitle\tDescription\tType\tRequired/Default/database\tDatabase\tName of the logical database to materialize to.\tstring /address\tAddress\tHost and port of the database\tstring\tRequired /password\tPassword\tPassword for the specified database user.\tstring\tRequired /schema\tDatabase Schema\tDatabase schema to use for materialized tables (unless overridden within the binding resource configuration) as well as associated materialization metadata tables\tstring\t"public" /user\tUser\tDatabase user to connect as.\tstring\tRequired Bindings​ Property\tTitle\tDescription\tType\tRequired/Default/additional_table_create_sql\tAdditional Table Create SQL\tAdditional SQL statement(s) to be run in the same transaction that creates the table. Useful for creating Hypertables.\tstring /delta_updates\tDelta Update\tShould updates to this table be done via delta updates.\tboolean\tfalse /schema\tAlternative Schema\tAlternative schema for this table (optional). Overrides schema set in endpoint configuration.\tstring /table\tTable\tTable name to materialize to. It will be created by the connector, unless the connector has previously created it.\tstring\tRequired ","version":"Next","tagName":"h3"},{"title":"Sample​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#sample","content":" materializations: ${PREFIX}/${mat_name}: endpoint: connector: image: ghcr.io/estuary/materialize-timescaledb:dev config: database: flow address: xxxxxxxxxx.xxxxxxxxxx.tsdb.cloud.timescale.com:01234 password: flow user: flow bindings: - resource: table: ${TABLE_NAME} source: ${PREFIX}/${COLLECTION_NAME} ","version":"Next","tagName":"h3"},{"title":"Creating TimescaleDB hypertables​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#creating-timescaledb-hypertables","content":" Hypertables are PostgreSQL tables in TimescaleDB optimized for time-series data. They exist alongside regular PostgreSQL tables. You can add Hypertables to your materialization on a per-binding basis by adding the optional /additional_table_create_sql field to each binding configuration. Your SQL statement should take the following format: SELECT create_hypertable('table', 'timestamp_column'); Where 'table' matches the value for the field /table in that binding, and 'timestamp_column' is the name of the table column containing its time values. For example, materializing the Flow collection acmeCo/my_time_series would produce a table called 'my_time_series'. Assuming its timestamp value is in the field 'time', the binding configuration would look like: bindings: - resource: additional_table_create_sql: 'SELECT create_hypertable('my_time_series', 'time');' table: my_time_series source: acmeCo/my_time_series ","version":"Next","tagName":"h2"},{"title":"Delta updates​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#delta-updates","content":" This connector supports both standard (merge) and delta updates. The default is to use standard updates. ","version":"Next","tagName":"h2"},{"title":"Reserved words​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#reserved-words","content":" PostgreSQL (and thus TimescaleDB) has a list of reserved words that must be quoted in order to be used as an identifier. Flow considers all the reserved words that are marked as "reserved" in any of the columns in the official PostgreSQL documentation. These reserve words are listed in the table below. Flow automatically quotes fields that are in this list. Reserved words abs\tcurrent_transform_group_for_type\tindicator\torder\tsqlexception absolute\tcurrent_user\tinitial\tout\tsqlstate acos\tcursor\tinitially\touter\tsqlwarning action\tcycle\tinner\toutput\tsqrt add\tdatalink\tinout\tover\tstart all\tdate\tinput\toverlaps\tstatic allocate\tday\tinsensitive\toverlay\tstddev_pop alter\tdeallocate\tinsert\tpad\tstddev_samp analyse\tdec\tint\tparameter\tsubmultiset analyze\tdecfloat\tinteger\tpartial\tsubset and\tdecimal\tintersect\tpartition\tsubstring any\tdeclare\tintersection\tpattern\tsubstring_regex are\tdefault\tinterval\tper\tsucceeds array\tdeferrable\tinto\tpercent\tsum array_agg\tdeferred\tis\tpercentile_cont\tsymmetric array_max_cardinality\tdefine\tisnull\tpercentile_disc\tsystem as\tdelete\tisolation\tpercent_rank\tsystem_time asc\tdense_rank\tjoin\tperiod\tsystem_user asensitive\tderef\tjson_array\tpermute\ttable asin\tdesc\tjson_arrayagg\tplacing\ttablesample assertion\tdescribe\tjson_exists\tportion\ttan asymmetric\tdescriptor\tjson_object\tposition\ttanh at\tdeterministic\tjson_objectagg\tposition_regex\ttemporary atan\tdiagnostics\tjson_query\tpower\tthen atomic\tdisconnect\tjson_table\tprecedes\ttime authorization\tdistinct\tjson_table_primitive\tprecision\ttimestamp avg\tdlnewcopy\tjson_value\tprepare\ttimezone_hour begin\tdlpreviouscopy\tkey\tpreserve\ttimezone_minute begin_frame\tdlurlcomplete\tlag\tprimary\tto begin_partition\tdlurlcompleteonly\tlanguage\tprior\ttrailing between\tdlurlcompletewrite\tlarge\tprivileges\ttransaction bigint\tdlurlpath\tlast\tprocedure\ttranslate binary\tdlurlpathonly\tlast_value\tptf\ttranslate_regex bit\tdlurlpathwrite\tlateral\tpublic\ttranslation bit_length\tdlurlscheme\tlead\trange\ttreat blob\tdlurlserver\tleading\trank\ttrigger boolean\tdlvalue\tleft\tread\ttrim both\tdo\tlevel\treads\ttrim_array by\tdomain\tlike\treal\ttrue call\tdouble\tlike_regex\trecursive\ttruncate called\tdrop\tlimit\tref\tuescape cardinality\tdynamic\tlistagg\treferences\tunion cascade\teach\tln\treferencing\tunique cascaded\telement\tlocal\tregr_avgx\tunknown case\telse\tlocaltime\tregr_avgy\tunmatched cast\tempty\tlocaltimestamp\tregr_count\tunnest catalog\tend\tlog\tregr_intercept\tupdate ceil\tend-exec\tlog10\tregr_r2\tupper ceiling\tend_frame\tlower\tregr_slope\tusage char\tend_partition\tmatch\tregr_sxx\tuser character\tequals\tmatches\tregr_sxy\tusing character_length\tescape\tmatch_number\tregr_syy\tvalue char_length\tevery\tmatch_recognize\trelative\tvalues check\texcept\tmax\trelease\tvalue_of classifier\texception\tmeasures\trestrict\tvarbinary clob\texec\tmember\tresult\tvarchar close\texecute\tmerge\treturn\tvariadic coalesce\texists\tmethod\treturning\tvarying collate\texp\tmin\treturns\tvar_pop collation\texternal\tminute\trevoke\tvar_samp collect\textract\tmod\tright\tverbose column\tfalse\tmodifies\trollback\tversioning commit\tfetch\tmodule\trollup\tview concurrently\tfilter\tmonth\trow\twhen condition\tfirst\tmultiset\trows\twhenever connect\tfirst_value\tnames\trow_number\twhere connection\tfloat\tnational\trunning\twidth_bucket constraint\tfloor\tnatural\tsavepoint\twindow constraints\tfor\tnchar\tschema\twith contains\tforeign\tnclob\tscope\twithin continue\tfound\tnew\tscroll\twithout convert\tframe_row\tnext\tsearch\twork copy\tfree\tno\tsecond\twrite corr\tfreeze\tnone\tsection\txml corresponding\tfrom\tnormalize\tseek\txmlagg cos\tfull\tnot\tselect\txmlattributes cosh\tfunction\tnotnull\tsensitive\txmlbinary count\tfusion\tnth_value\tsession\txmlcast covar_pop\tget\tntile\tsession_user\txmlcomment covar_samp\tglobal\tnull\tset\txmlconcat create\tgo\tnullif\tshow\txmldocument cross\tgoto\tnumeric\tsimilar\txmlelement cube\tgrant\toccurrences_regex\tsin\txmlexists cume_dist\tgroup\toctet_length\tsinh\txmlforest current\tgrouping\tof\tsize\txmliterate current_catalog\tgroups\toffset\tskip\txmlnamespaces current_date\thaving\told\tsmallint\txmlparse current_default_transform_group\thold\tomit\tsome\txmlpi current_path\thour\ton\tspace\txmlquery current_role\tidentity\tone\tspecific\txmlserialize current_row\tilike\tonly\tspecifictype\txmltable current_schema\timmediate\topen\tsql\txmltext current_time\timport\toption\tsqlcode\txmlvalidate current_timestamp\tin\tor\tsqlerror\tyear ","version":"Next","tagName":"h2"},{"title":"Changelog​","type":1,"pageTitle":"TimescaleDB","url":"/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/#changelog","content":" The changelog includes a list of breaking changes made to this connector. Backwards-compatible changes are not listed. Proceed with caution when editing materializations created with previous versions of this connector; editing always upgrades your materialization to the latest connector version. V4: 2022-11-30​ This version includes breaking changes to materialized table columns. These provide more consistent column names and types, but tables created from previous versions of the connector may not be compatible with this version. Capitalization is now preserved when fields in Flow are converted to Postgres (TimescaleDB) column names. Previously, fields containing uppercase letters were converted to lowercase. Field names and values of types date, duration, ipv4, ipv6, macaddr, macaddr8, and time are now converted into their corresponding Postgres (TimescaleDB) types. Previously, only date-time was converted, and all others were materialized as strings. ","version":"Next","tagName":"h2"},{"title":"Materialization Protocol","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/","content":"","keywords":"","version":"Next"},{"title":"Sequence Diagram​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#sequence-diagram","content":" As a convention and to reduce ambiguity, message types from the Runtime are named in an imperative fashion (Load), while responses from the driver always have a past-tense name (Loaded): sequenceDiagram Runtime->>Driver: Open{MaterializationSpec, driverCP} Note right of Driver: Connect to endpoint.<br/>Optionally fetch last-committed<br/>runtime checkpoint. Driver->>Runtime: Opened{runtimeCP} Note over Runtime, Driver: One-time initialization ☝️.<br/> 👇 Repeats for each transaction. Note left of Runtime: Prior txn commits<br/>to recovery log. Note right of Driver: Prior txn commits to DB<br/>(where applicable). Runtime->>Driver: Acknowledge Note right of Runtime: Acknowledged MAY be sent<br/>before Acknowledge. Note right of Driver: MAY perform an idempotent<br/>apply of last txn. Note left of Runtime: Runtime does NOT await<br/>Acknowledged before<br/>proceeding to send Load. Driver->>Runtime: Acknowledged Note left of Runtime: Runtime may now finalize<br/>a pipelined transaction. Note over Runtime, Driver: End of Acknowledge phase. Runtime->>Driver: Load<A> Note left of Runtime: Load keys may<br/> not exist (yet). Runtime->>Driver: Load<B> Note right of Driver: MAY evaluate Load immediately,<br/>or stage for deferred retrieval. Driver->>Runtime: Loaded<A> Runtime->>Driver: Load<C> Runtime->>Driver: Flush Driver->>Runtime: Loaded<C> Note right of Driver: Omits Loaded for keys<br/>that don't exist. Driver->>Runtime: Flushed Note left of Runtime: All existing keys<br/>have been retrieved. Note over Runtime, Driver: End of Load phase. Runtime->>Driver: Store<X> Runtime->>Driver: Store<Y> Runtime->>Driver: Store<Z> Runtime->>Driver: StartCommit{runtimeCP} Note right of Driver: * Completes all Store processing.<br/>* MAY include runtimeCP in DB txn. Note right of Driver: Commit to DB<br/>now underway. Driver->>Runtime: StartedCommit{driverCP} Note left of Runtime: Begins commit to<br/> recovery log. Note over Runtime, Driver: End of Store phase. Loops around<br/>to Acknowledge <=> Acknowledged. ","version":"Next","tagName":"h2"},{"title":"Exactly-Once Semantics​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#exactly-once-semantics","content":" The central tenant of transactional materializations is this: there is a consumption checkpoint, and there is a state of the view. As the materialization progresses, both the checkpoint and the view state will change. Updates to the checkpoint and to the view state MUST always commit together, in the exact same transaction. Flow materialization tasks have a backing transactional recovery log, which is capable of durable commits that update both the checkpoint and also a (reasonably small) driver-defined state. More on driver states later. Many interesting endpoint systems are also fully transactional in nature. When implementing a materialization driver, the first question an implementor must answer is: whose commit is authoritative? Flow's recovery log, or the materialized system? This protocol supports either. ","version":"Next","tagName":"h2"},{"title":"Common Implementation Patterns​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#common-implementation-patterns","content":" There are a few common implementation patterns for materializations. The choice of pattern depends on the transaction capabilities of the remote endpoint. ","version":"Next","tagName":"h2"},{"title":"Remote Store is Authoritative​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#remote-store-is-authoritative","content":" In this pattern, the remote store (for example, a database) persists view states and the Flow consumption checkpoints which those views reflect. There are many such checkpoints: one per task split, and in this pattern the Flow recovery log is effectively ignored. Typically this workflow runs in the context of a synchronous BEGIN/COMMITtransaction, which updates table states and a Flow checkpoint together. The transaction need be scoped only to the store phase of this workflow, as the materialization protocol requires only read-committed isolation semantics. Flow is a distributed system, and an important consideration is the effect of a "zombie" assignment of a materialization task, which can race a newly-promoted assignment of that same task. Fencing is a technique which uses the transactional capabilities of a store to "fence off" an older zombie assignment, such that it's prevented from committing further transactions. This avoids a failure mode where: New assignment N recovers a checkpoint at Ti.Zombie assignment Z commits another transaction at Ti+1.N beings processing from Ti, inadvertently duplicating the effects of Ti+1. When a remote store is authoritative, it must implement fencing behavior. As a sketch, the store can maintain a nonce value alongside the checkpoint of each task split. The nonce is updated on each open of this RPC, and each commit transaction then verifies that the nonce has not been changed. In the future, if another RPC opens and updates the nonce, it fences off this instance of the task split and prevents it from committing further transactions. ","version":"Next","tagName":"h3"},{"title":"Recovery Log with Non-Transactional Store​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#recovery-log-with-non-transactional-store","content":" In this pattern, the runtime's recovery log persists the Flow checkpoint and handles fencing semantics. During the Load and Store phases, the driver directly manipulates a non-transactional store or API, such as a key/value store. Note that this pattern is at-least-once. A transaction may fail part-way through and be restarted, causing its effects to be partially or fully replayed. Care must be taken if the collection's schema has reduction annotations such assum, as those reductions may be applied more than once due to a partially completed, but ultimately failed transaction. If the collection's schema is last-write-wins, this mode still provides effectively-once behavior. Collections which aren't last-write-wins can be turned into last-write-wins through the use of derivations. ","version":"Next","tagName":"h3"},{"title":"Recovery Log with Idempotent Apply​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#recovery-log-with-idempotent-apply","content":" In this pattern the recovery log is authoritative, but the driver uses external stable storage to stage the effects of a transaction -- rather than directly applying them to the store -- such that those effects can be idempotently applied after the transaction commits. This allows stores which feature a weaker transaction guarantee to still be used in an exactly-once way, so long as they support an idempotent apply operation. Driver checkpoints can facilitate this pattern. For example, a driver might generate a unique filename in S3 and reference it in its prepared checkpoint, which is committed to the recovery log. During the "store" phase, it writes to this S3 file. After the transaction commits, it tells the store of the new file to incorporate. The store must handle idempotency, by applying the effects of the unique file just once, even if told of the file multiple times. A related extension of this pattern is for the driver to embed a Flow checkpoint into its driver checkpoint. Doing so allows the driver to express an intention to restart from an older alternative checkpoint, as compared to the most recent committed checkpoint of the recovery log. As mentioned above, it's crucial that store states and checkpoints commit together. While seemingly bending that rule, this pattern is consistent with it because, on commit, the semantic contents of the store include BOTH its base state, as well as the staged idempotent update. The store just may not know it yet, but eventually it must because of the retried idempotent apply. Note the driver must therefore ensure that staged updates are fully applied before returning Loaded responses, in order to provide the correct read-committed semantics required by the Flow runtime. ","version":"Next","tagName":"h3"},{"title":"Push-only Endpoints & Delta Updates​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#push-only-endpoints--delta-updates","content":" Some systems, such as APIs, Webhooks, and Pub/Sub, are push-only in nature. Flow materializations can run in a "delta updates" mode, where loads are always skipped and Flow does not attempt to store fully-reduced documents. Instead, during the store phase, the runtime sends delta updates which reflect the combined roll-up of collection documents processed only within this transaction. To illustrate the meaning of a delta update, consider documents which are simple counters, having a collection schema that uses a sum reduction strategy. Without delta updates, Flow would reduce documents -1, 3, and 2 by sum to arrive at document 4, which is stored. The next transaction, document 4 is loaded and reduced with 6, -7, and -1 to arrive at a new stored document 2. This document, 2, represents the full reduction of the collection documents materialized thus far. Compare to delta updates mode: collection documents -1, 3, and 2 are combined to store a delta-update document of 4. The next transaction starts anew, and 6, -7, and -1 combine to arrive at a delta-update document of -2. These delta updates are a windowed combine over documents seen in the current transaction only, and unlike before are not a full reduction of the document. If delta updates were written to pub/sub, note that a subscriber could further reduce over each delta update to recover the fully reduced document of 2. Note that many use cases require only lastWriteWins reduction behavior, and for these use cases delta updates does the "right thing" by trivially re-writing each document with its most recent version. This matches the behavior of Kafka Connect, for example. ","version":"Next","tagName":"h3"},{"title":"Protocol Phases​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#protocol-phases","content":" ","version":"Next","tagName":"h2"},{"title":"Acknowledge​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#acknowledge","content":" Acknowledge and Acknowledged are always the first messages sent every transaction, including the very first transaction of an RPC. The Runtime sendsAcknowledge to indicate that the last transaction has committed to the recovery log. The Driver sends Acknowledged to indicate that its endpoint transaction has committed. Acknowledge and Acknowledged are not ordered. Acknowledged may be sent before Acknowledge and vice versa. The Runtime does not wait for Acknowledged before sending Load messages. In most cases the Driver should simply not read these Load messages until it has completed its own commit and sent its own Acknowledged. A Driver MAY instead process its commit and acknowledgment in the background while actively reading Load messages. It MUST NOT evaluate Loads yet, as this could otherwise be a violation of read-committed semantics, but it MAY stage them for deferred evaluation. This is recommended for Drivers that have very long commit and/or acknowledgement operations. While a background commit progresses the Flow runtime will optimistically pipeline the next transaction, processing documents and preparing for when the Driver sendsAcknowledged. Drivers following the "Recovery Log with Idempotent Apply" pattern must take care to properly handle the very first acknowledgement phase of an RPC. At startup, a driver cannot know if the last commit has been acknowledged. For example, a previous RPC invocation may have failed immediately after commit but prior to acknowledgement. The Driver must thus idempotent-ly apply or re-apply changes staged by a prior Driver invocation, and reply with Acknowledged only once done. Drivers with transactional semantics SHOULD send Acknowledged immediately after a previous, started commit completes. Drivers with at-least-once semantics SHOULD send Acknowledged immediately after sending StartedCommit. ","version":"Next","tagName":"h3"},{"title":"Load​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#load","content":" Zero or more Load messages are sent by the Runtime with documents to fetch. A given document key will appear at most once in a transaction, and will not be repeated across Load messages. Drivers may immediately evaluate each Load and respond, or may queue many keys to load and defer their evaluation. The Runtime does not await any individualLoad requests. After the previous transaction has fully completed, and the driver has sentAcknowledged to the Runtime, the current transaction may begin to close. The Runtime indicates this by sending a Flush message, which is NEVER sent before Acknowledged is received. Acknowledged is thus an important signal as to when the Runtime may begin to finalize an optimistic, pipelined transaction. On reading Flush, Drivers must process all remaining Load messages, including any deferred evaluations, and send all Loaded responses prior to sending its own Flushed response. This signals to the Runtime that all documents which can be loaded have been loaded, and the transaction proceeds to the Store phase. Materialization bindings which are processing in delta-updates mode will never receive a Load message, but will receive a Flush and must still respond withFlushed. ","version":"Next","tagName":"h3"},{"title":"Store​","type":1,"pageTitle":"Materialization Protocol","url":"/pr-preview/pr-1594/reference/Connectors/materialization-protocol/#store","content":" Zero or more Store messages are sent by the Runtime to the Driver, indicating keys, documents, and extracted fields to store. No response is required of the Driver for these messages. Once all documents have been stored, the Runtime sends a StartCommit message which carries its opaque runtime checkpoint. Drivers implementing the "Remote Store is Authoritative" pattern must include the runtime checkpoint in its current transaction, for retrieval in a future Open of a new transactions RPC. Other driver patterns MAY ignore this checkpoint. On reading StartCommit the driver ensures that all Store messages have been processed. It begins to commit its own transaction (where applicable), and then responds with StartedCommit which contain an update to the driver's checkpoint. On the Runtime's receipt of StartedCommit, the Runtime now knows that allStore messages have been fully processed. It preserves the updated Driver checkpoint in its recovery log and begins to commit. From here, the protocol loops back around to the Acknowledge phase. ","version":"Next","tagName":"h3"},{"title":"Editing considerations","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/editing/","content":"","keywords":"","version":"Next"},{"title":"How to edit Flow entities​","type":1,"pageTitle":"Editing considerations","url":"/pr-preview/pr-1594/reference/editing/#how-to-edit-flow-entities","content":" In the Flow web app, you can edit captures and materializations, and use the Schema Inference tool to edit collection schemas. Editing captures and associated collectionsEditing materializations and associated collections With flowctl, you can edit captures, materializations, collections, derivations, and tests. You do this by pulling the desired specification locally, editing, and re-publishing. Editing with flowctl ","version":"Next","tagName":"h2"},{"title":"Endpoint configuration changes​","type":1,"pageTitle":"Editing considerations","url":"/pr-preview/pr-1594/reference/editing/#endpoint-configuration-changes","content":" A common reason to edit a capture or materialization to fix a broken endpoint configuration: for example, if a database is now accessed through a different port. Changes that prevent Flow from finding the source system immediately cause the capture or materialization to fail. By contrast, certain credential changes might not cause issues unless you attempt to edit the capture or materialization. Because Flow tasks run continuously, the connector doesn't have to re-authenticate and an outdated credential won't cause failure. Editing, however, requires the task to re-start, so you'll need to provide current credentials to the endpoint configuration. Before editing, take note of any changed credentials, even if the task is still running successfully. ","version":"Next","tagName":"h2"},{"title":"Managing connector updates​","type":1,"pageTitle":"Editing considerations","url":"/pr-preview/pr-1594/reference/editing/#managing-connector-updates","content":" Connectors are updated periodically. In some cases, required fields are added or removed. When you edit a capture or materialization, you'll need to update the configuration to comply with the current connector version. You may need to change a property's formatting or add a new field. Additionally, certain updates to capture connectors can affect the way available collections are named. After editing, the connector may map a data resource to new collection with a different name. For example, say you have capture that writes to a collection called post/fruity_pebbles/nutritionFacts. You begin to edit the capture using the latest version of the connector. The connector detects the same set of nutrition facts data, but maps it to a collection called post/fruity_pebbles/nutrition-facts. If you continue to publish the edited capture, both collections will persist, but new data will be written to the new collection. Before editing, check if a connector has been updated: Go to the Admin tab and view the list of connectors. Each tile shows the date it was last updated.Check the connector's documentation. Pertinent updates, if any, are noted in the Changelog section. ","version":"Next","tagName":"h2"},{"title":"Considerations for name changes​","type":1,"pageTitle":"Editing considerations","url":"/pr-preview/pr-1594/reference/editing/#considerations-for-name-changes","content":" You're not able to change the name of a capture or materialization after you create it. You're also unable to manually change the names of collections; however, connector updates can cause collection names to change, as discussed above. It is possible to manually change the names of destination resources (tables or analogous data storage units to which collections are written) when editing a materialization. You should avoid doing so unless you want to route future data to a new location. If you do this, a new resource with that name will be created and the old resource will continue to exist. Historical data will may not be backfilled into the new resource, depending on the connector used. ","version":"Next","tagName":"h2"},{"title":"Materialization sync schedule","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/materialization-sync-schedule/","content":"","keywords":"","version":"Next"},{"title":"How transactions are used to sync data to a destination​","type":1,"pageTitle":"Materialization sync schedule","url":"/pr-preview/pr-1594/reference/materialization-sync-schedule/#how-transactions-are-used-to-sync-data-to-a-destination","content":" Estuary Flow processes data intransactions. Materialization connectors use the materialization protocol to process transactions and sync data to the destination. When a materialization is caught up to its source collections, it runs frequent small transactions to keep the destination up to date. In this case every new transaction contains the latest data that needs updated. But when a materialization is backfilling its source collections, it runs larger transactions to efficiently load the data in bulk to the destination and catch up to the latest changes. The sync schedule is configured in terms of these transactions: For less frequent updates, processing of additional transactions is delayed by some amount of time. This extra delay is only applied when the materialization is fully caught up - backfills always run as fast as possible. And while a transaction is delayed, Estuary Flow will continue batching and combining new documents so that the next transaction contains all of the latest data. You can read about how continuous materialization works for more background information. ","version":"Next","tagName":"h2"},{"title":"Configuring a sync schedule​","type":1,"pageTitle":"Materialization sync schedule","url":"/pr-preview/pr-1594/reference/materialization-sync-schedule/#configuring-a-sync-schedule","content":" A materialization can be configured to run on a fixed schedule 24/7 or it can have a faster sync schedule during certain times of the day and on certain days of the week. The following options are available for configuring the sync schedule: Property\tTitle\tDescription\tType/syncFrequency\tSync Frequency\tFrequency at which transactions are executed when the materialization is fully caught up and streaming changes. May be enabled only for certain time periods and days of the week if configured below; otherwise it is effective 24/7. Defaults to 30 minutes if unset.\tstring /timezone\tTimezone\tTimezone applicable to sync time windows and active days. Must be a valid IANA time zone name or +HH:MM offset.\tstring /fastSyncStartTime\tFast Sync Start Time\tTime of day that transactions begin executing at the configured Sync Frequency. Prior to this time transactions will be executed more slowly. Must be in the form of '09:00'.\tstring /fastSyncStopTime\tFast Sync Stop Time\tTime of day that transactions stop executing at the configured Sync Frequency. After this time transactions will be executed more slowly. Must be in the form of '17:00'.\tstring /fastSyncEnabledDays\tFast Sync Enabled Days\tDays of the week that the configured Sync Frequency is active. On days that are not enabled, transactions will be executed more slowly for the entire day. Examples: 'M-F' (Monday through Friday, inclusive), 'M,W,F' (Monday, Wednesday, and Friday), 'Su-T,Th-S' (Sunday through Tuesday, inclusive; Thursday through Saturday, inclusive). All days are enabled if unset.\tstring warning Changes to a materialization's specification are only applied after the materialization task has completed and acknowledged all of its outstanding transactions. This means that if a task is running with a 4 hour sync frequency, it may take up to 8 hours for a change to the specification to take effect: 4 hours for the "current" transaction to complete and be acknowledged, and another 4 hours for the next "pipelined" commit to complete and be acknowledged. If you are making changes to a materialization with a Sync Scheduleconfigured and would like those changes to take effect immediately, you can disable and then re-enable the materialization. Example: Sync data on a fixed schedule​ To use the same schedule for syncing data 24/7, set the value of Sync Frequency only and leave the other inputs empty. For example, you might set aSync Frequency of 15m to always have you destination sync every 15 minutes instead of the default 30 minutes. tip If you want the materialization to always push updated data as fast as possible, use a Sync Frequency of 0s. Example: Sync data faster during certain times of the day​ If you only care about having the most-up-to-date data possible during certain times of the day, you can set a start and stop time for that time period. The value you set for Sync Frequency will be used during that time period; otherwise syncs will be performed every 4 hours. The Fast Sync Start Time and Fast Sync Stop Time values must be set as 24-hour times, and you must provide a value for Timezone that this time window should use. Timezones must either be a valid IANA time zone name or a +HH:MMoffset. Providing a time zone name will ensure local factors like daylight savings time are considered for the schedule, whereas an offset timezone is always relative to UTC. An example configuration data syncs data as fast as possible between the hours of 9:00AM and 5:00PM in the Eastern Time Zone (ET) would use these values: Sync Frequency: 0sTimezone: America/New_YorkFast Sync Start Time: 09:00Fast Sync Stop Time: 17:00 Example: Sync data faster only on certain days of the week​ You can also set certain days of the week that the fast sync is active. On all other days, data will be sync'd more slowly all day. To enable this, set values for Sync Frequency, Timezone, Fast Sync Start Time, and Fast Sync Stop Time as you would for syncing data faster during certain times of the day, and also provide a value for Fast Sync Enabled Days. Fast Sync Enabled Days is a range of days, where the days of the week are abbreviated as (Su)nday, (M)onday, (T)uesday, (W)ednesday, (Th)ursday,(F)riday, (S)aturday. Here are some examples of valid inputs for Fast Sync Enabled Days: M-F to enable fast sync on Monday through Friday.Su, T, Th, S to enable fast sync on Sunday, Tuesday, Thursday, and Saturday.Su-M,Th-S to enable fast sync on Thursday through Monday. Note that the days of the week must be listed in order, so Th-M will not work. ","version":"Next","tagName":"h2"},{"title":"Timing of syncs​","type":1,"pageTitle":"Materialization sync schedule","url":"/pr-preview/pr-1594/reference/materialization-sync-schedule/#timing-of-syncs","content":" In technical terms, timing of syncs is controlled by the materialization connector sending a transaction acknowledgement to the Flow runtime a computed times. Practically this means that at these times the prior transaction will complete and have its statistics recorded, and the next transaction will begin. This timing is computed so that it occurs at predictable instants in time. As a hypothetical example, if you have set a Sync Frequency of 15m, transaction acknowledgements might be sent at times like 00:00, 00:15, 00:30, 00:45and so on, where each acknowledgement is sent at a multiple of the Sync Frequency relative to the hour. This means that if the materialization task shard restarts and completes its first transaction at 00:13, it will run its next transaction at 00:15 rather than00:28. In actuality these computed points in time have some amount ofjitter applied to them to avoid overwhelming the system at common intervals, so setting a Sync Frequency to a specific value will ensure that transactions are predictably acknowledged that often, but makes no assumptions about precisely what time instants the acknowledgements will occur. info The jitter value is deterministic based on the compute resource for the destination system from the materialization's endpoint configuration. How this compute resource is identified various for different systems, but is usually something like "account_name" + "warehouse_Name". This means that separate materialization use the same compute resource will synchronize their usage of that compute resource if they have the same Sync Schedule configured. ","version":"Next","tagName":"h2"},{"title":"Notifications","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/notifications/","content":"","keywords":"","version":"Next"},{"title":"Data Movement Alerts​","type":1,"pageTitle":"Notifications","url":"/pr-preview/pr-1594/reference/notifications/#data-movement-alerts","content":" When navigating to the main view of a capture or a materialization, a user can select an interval for tracking zero data movement. Under the Nofitification Settiings card, select a time interval from the dropdown labeled Interval. There is no need to save, but you must also have already configured notifications in order for the alert to take into effect. If you are not yet subscribed to notifications, a pop up will appear prompting you to set up a subscribing by clicking on CLICK HERE. If your task does not receive any new documents with the selected timeframe, an email will be sent to any email addresses that are subscribed to this tenant. ","version":"Next","tagName":"h2"},{"title":"Billing Alerts​","type":1,"pageTitle":"Notifications","url":"/pr-preview/pr-1594/reference/notifications/#billing-alerts","content":" Billing alerts are automatically subscribed to when a user inputs their email into the Organization Notifications table. Alerts will be sent out for the following events: Free Tier Started: A tenenat has transitioned into the free trialFree Trial Ending: Five days are remaining in a tenant's free trialFree Trial Ended: A tenant's free trial has endedProvided Payment Method: A valid payment method has been provided for a tenant ","version":"Next","tagName":"h2"},{"title":"Properties​","type":1,"pageTitle":"Notifications","url":"/pr-preview/pr-1594/reference/notifications/#properties","content":" Property\tTitle\tDescription\tType/catalogPrefix\tPrefix\tSubscribe to notifications for this tenant\tstring /email\tEmail\tAlert the following email with all notifications\tstring ","version":"Next","tagName":"h2"},{"title":"Reduction strategies","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/","content":"","keywords":"","version":"Next"},{"title":"Reduction guarantees​","type":1,"pageTitle":"Reduction strategies","url":"/pr-preview/pr-1594/reference/reduction-strategies/#reduction-guarantees","content":" In Flow, documents that share the same collection key and are written to the same logical partition have a total order, meaning that one document is universally understood to have been written before the other. This isn't true of documents of the same key written to different logical partitions. These documents can be considered “mostly” ordered: Flow uses timestamps to understand the relative ordering of these documents, and while this largely produces the desired outcome, small amounts of re-ordering are possible and even likely. Flow guarantees exactly-once semantics within derived collections and materializations (so long as the target system supports transactions), and a document reduction will be applied exactly one time. Flow does not guarantee that documents are reduced in sequential order, directly into a base document. For example, documents of a single Flow capture transaction are combined together into one document per collection key at capture time – and that document may be again combined with still others, and so on until a final reduction into the base document occurs. Taken together, these total-order and exactly-once guarantees mean that reduction strategies must be associative [as in (2 + 3) + 4 = 2 + (3 + 4) ], but need not be commutative [ 2 + 3 = 3 + 2 ] or idempotent [ S u S = S ]. They expand the palette of strategies that can be implemented, and allow for more efficient implementations as compared to, for example CRDTs. In this documentation, we’ll refer to the “left-hand side” (LHS) as the preceding document and the “right-hand side” (RHS) as the following one. Keep in mind that both the LHS and RHS may themselves represent a combination of still more ordered documents because, for example, reductions are applied associatively. ","version":"Next","tagName":"h3"},{"title":"Organizing a Flow catalog","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/organizing-catalogs/","content":"","keywords":"","version":"Next"},{"title":"import​","type":1,"pageTitle":"Organizing a Flow catalog","url":"/pr-preview/pr-1594/reference/organizing-catalogs/#import","content":" Flow's import directive can help you easily handle all of these scenarios while keeping your catalogs well organized. Each catalog spec file may import any number of other files, and each import may refer to either relative or an absolute URL. When you use import in a catalog spec, you're conceptually bringing the entirety of another catalog — as well as the schemas and typescript files it uses — into your catalog. Imports are also transitive, so when you import another catalog, you're also importing everything that other catalog has imported. This allows you to keep your catalogs organized, and is flexible enough to support collaboration between separate teams and organizations. Perhaps the best way of explaining this is with some examples. Example: Organizing collections​ Let's look at a relatively simple case in which you want to organize your collections into multiple catalog files. Say you work for Acme Corp on the team that's introducing Flow. You might start with the collections and directory structure below: acme/customers/customerInfo acme/products/info/manufacturers acme/products/info/skus acme/products/inventory acme/sales/pending acme/sales/complete acme ├── flow.yaml ├── customers │ ├── flow.ts │ ├── flow.yaml │ └── schemas.yaml ├── products │ ├── flow.yaml │ ├── info │ │ ├── flow.ts │ │ ├── flow.yaml │ │ └── schemas.yaml │ └── inventory │ ├── flow.ts │ ├── flow.yaml │ └── schemas.yaml schemas.yaml └── sales ├── flow.ts ├── flow.yaml └── schemas.yaml It's immediately clear where each of the given collections is defined, since the directory names match the path segments in the collection names. This is not required by theflowctl CLI, but is strongly recommended, since it makes your catalogs more readable and maintainable. Each directory contains a catalog spec (flow.yaml), which will import all of the catalogs from child directories. So, the top-level catalog spec, acme/flow.yaml, might look something like this: import: - customers/flow.yaml - products/flow.yaml - sales/flow.yaml This type of layout has a number of other advantages. During development, you can easily work with a subset of collections using, for example, flowctl test --source acme/products/flow.yaml to run only the tests for product-related collections. It also allows other imports to be more granular. For example, you might want a derivation under sales to read from acme/products/info. Since info has a separate catalog spec, acme/sales/flow.yaml can import acme/products/info/flow.yaml without creating a dependency on the inventory collection. Example: Separate environments​ It's common to use separate environments for tiers like development, staging, and production. Flow catalog specs often necessarily include endpoint configuration for external systems that will hold materialized views. Let's say you want your production environment to materialize views to Snowflake, but you want to develop locally on SQLite. We might modify the Acme example slightly to account for this. acme ├── dev.flow.yaml ├── prod.flow.yaml ... the remainder is the same as above Each of the top-level catalog specs might import all of the collections and define an endpoint called ourMaterializationEndpoint that points to the desired system. The import block might be the same for each system, but each file may use a different configuration for the endpoint, which is used by any materializations that reference it. Our configuration for our development environment will look like: dev.flow.yaml import: - customers/flow.yaml - products/flow.yaml - sales/flow.yaml ourMaterializationEndpoint: # dev.flow.yaml sqlite: path: dev-materializations.db While production will look like: prod.flow.yaml import: - customers/flow.yaml - products/flow.yaml - sales/flow.yaml endpoints: snowflake: account: acme_production role: admin schema: snowflake.com/acmeProd user: importantAdmin password: abc123 warehouse: acme_production When we test the draft locally, we'll work with dev.flow.yaml, but we'll publish prod.flow.yaml. Everything will continue to work because in our development environment we'll be binding collections to our local SQLite DB and in production we'll use Snowflake. Example: Cross-team collaboration​ When working across teams, it's common for one team to provide a data product for another to reference and use. Flow is designed for cross-team collaboration, allowing teams and users to reference each other's full catalog or schema. Again using the Acme example, let's imagine we have two teams. Team Web is responsible for Acme's website, and Team User is responsible for providing a view of Acme customers that's always up to date. Since Acme wants a responsive site that provides a good customer experience, Team Web needs to pull the most up-to-date information from Team User at any point. Let's look at Team User's collections: teamUser.flow.yaml import: - userProfile.flow.yaml Which references: userProfile.flow.yaml collection: userProfile: schema: -"/userProfile/schema" key: [/id] Team User references files in their directory, which they actively manage in both their import and schema sections. If Team Web wants to access user data (and they have access), they can use a relative path or a URL-based path given that Team User publishes their data to a URL for access: teamWeb.flow.yaml import: -http://www.acme.com/teamUser#userProfile.flow.yaml -webStuff.flow.yaml Now Team Web has direct access to collections (referenced by their name) to build derived collections on top of. They can also directly import schemas: webStuff.flow.yaml collection: webStuff: schema: -http://acme.com/teamUser#userProfile/#schema key: [/id] ","version":"Next","tagName":"h3"},{"title":"Global namespace​","type":1,"pageTitle":"Organizing a Flow catalog","url":"/pr-preview/pr-1594/reference/organizing-catalogs/#global-namespace","content":" Every Flow collection has a name, and that name must be unique within a running Flow system. Flow collections should be thought of as existing within a global namespace. Keeping names globally unique makes it easy to import catalogs from other teams, or even other organizations, without having naming conflicts or ambiguities. For example, imagine your catalog for the inside sales team has a collection just named customers. If you later try to import a catalog from the outside sales team that also contains a customers collection, 💥 there's a collision. A better collection name would be acme/inside-sales/customers. This allows a catalog to include customer data from separate teams, and also separate organizations. Learn more about the Flow namespace. ","version":"Next","tagName":"h3"},{"title":"firstWriteWins and lastWriteWins","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins/","content":"firstWriteWins and lastWriteWins firstWriteWins always takes the first value seen at the annotated location. Likewise, lastWriteWins always takes the last. Schemas that don’t have an explicit reduce annotation default to lastWriteWins behavior. collections: - name: example/reductions/fww-lww schema: type: object reduce: { strategy: merge } properties: key: { type: string } fww: { reduce: { strategy: firstWriteWins } } lww: { reduce: { strategy: lastWriteWins } } required: [key] key: [/key] tests: "Expect we can track first- and list-written values": - ingest: collection: example/reductions/fww-lww documents: - { key: "key", fww: "one", lww: "one" } - { key: "key", fww: "two", lww: "two" } - verify: collection: example/reductions/fww-lww documents: - { key: "key", fww: "one", lww: "two" } ","keywords":"","version":"Next"},{"title":"append","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/append/","content":"append append works with arrays, and extends the left-hand array with items from the right-hand side. collections: - name: example/reductions/append schema: type: object reduce: { strategy: merge } properties: key: { type: string } value: # Append only works with type "array". # Others will throw an error at build time. type: array reduce: { strategy: append } required: [key] key: [/key] tests: "Expect we can append arrays": - ingest: collection: example/reductions/append documents: - { key: "key", value: [1, 2] } - { key: "key", value: [3, null, "abc"] } - verify: collection: example/reductions/append documents: - { key: "key", value: [1, 2, 3, null, "abc"] } The right-hand side must always be an array. The left-hand side may be null, in which case the reduction is treated as a no-op and its result remains null. This can be combined with schema conditionals to toggle whether reduction-reduction should be done or not.","keywords":"","version":"Next"},{"title":"Composing with conditionals","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals/","content":"Composing with conditionals Reduction strategies are JSON Schema annotations. As such, their applicability at a given document location can be controlled through the use of conditional keywords within the schema, like oneOf or if/then/else. This means Flow’s built-in strategies can be combined with schema conditionals to construct a wider variety of custom reduction behaviors. For example, here’s a reset-able counter: collections: - name: example/reductions/sum-reset schema: type: object properties: key: { type: string } value: { type: number } required: [key] # Use oneOf to express a tagged union over "action". oneOf: # When action = reset, reduce by taking this document. - properties: { action: { const: reset } } reduce: { strategy: lastWriteWins } # When action = sum, reduce by summing "value". Keep the LHS "action", # preserving a LHS "reset", so that resets are properly associative. - properties: action: const: sum reduce: { strategy: firstWriteWins } value: { reduce: { strategy: sum } } reduce: { strategy: merge } key: [/key] tests: "Expect we can sum or reset numbers": - ingest: collection: example/reductions/sum-reset documents: - { key: "key", action: sum, value: 5 } - { key: "key", action: sum, value: -1.2 } - verify: collection: example/reductions/sum-reset documents: - { key: "key", value: 3.8 } - ingest: collection: example/reductions/sum-reset documents: - { key: "key", action: reset, value: 0 } - { key: "key", action: sum, value: 1.3 } - verify: collection: example/reductions/sum-reset documents: - { key: "key", value: 1.3 } ","keywords":"","version":"Next"},{"title":"sum","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/sum/","content":"sum sum reduces two numbers or integers by adding their values. collections: - name: example/reductions/sum schema: type: object reduce: { strategy: merge } properties: key: { type: string } value: # Sum only works with types "number" or "integer". # Others will throw an error at build time. type: number reduce: { strategy: sum } required: [key] key: [/key] tests: "Expect we can sum two numbers": - ingest: collection: example/reductions/sum documents: - { key: "key", value: 5 } - { key: "key", value: -1.2 } - verify: collection: example/reductions/sum documents: - { key: "key", value: 3.8 } ","keywords":"","version":"Next"},{"title":"merge","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/merge/","content":"merge merge reduces the left-hand side and right-hand side by recursively reducing shared document locations. The LHS and RHS must either both be objects, or both be arrays. If both sides are objects, merge performs a deep merge of each property. If LHS and RHS are both arrays, items at each index of both sides are merged together, extending the shorter of the two sides by taking items off the longer: collections: - name: example/reductions/merge schema: type: object reduce: { strategy: merge } properties: key: { type: string } value: # Merge only works with types "array" or "object". # Others will throw an error at build time. type: [array, object] reduce: { strategy: merge } # Deeply merge sub-locations (items or properties) by summing them. items: type: number reduce: { strategy: sum } additionalProperties: type: number reduce: { strategy: sum } required: [key] key: [/key] tests: "Expect we can merge arrays by index": - ingest: collection: example/reductions/merge documents: - { key: "key", value: [1, 1] } - { key: "key", value: [2, 2, 2] } - verify: collection: example/reductions/merge documents: - { key: "key", value: [3, 3, 2] } "Expect we can merge objects by property": - ingest: collection: example/reductions/merge documents: - { key: "key", value: { "a": 1, "b": 1 } } - { key: "key", value: { "a": 1, "c": 1 } } - verify: collection: example/reductions/merge documents: - { key: "key", value: { "a": 2, "b": 1, "c": 1 } } Merge may also take a key, which is one or more JSON pointers that are relative to the reduced location. If both sides are arrays and a merge key is present, then a deep sorted merge of the respective items is done, as ordered by the key. Arrays must be pre-sorted and de-duplicated by the key, and merge itself always maintains this invariant. Note that you can use a key of [“”] for natural item ordering, such as merging sorted arrays of scalars. collections: - name: example/reductions/merge-key schema: type: object reduce: { strategy: merge } properties: key: { type: string } value: type: array reduce: strategy: merge key: [/k] items: { reduce: { strategy: firstWriteWins } } required: [key] key: [/key] tests: "Expect we can merge sorted arrays": - ingest: collection: example/reductions/merge-key documents: - { key: "key", value: [{ k: "a", v: 1 }, { k: "b", v: 1 }] } - { key: "key", value: [{ k: "a", v: 2 }, { k: "c", v: 2 }] } - verify: collection: example/reductions/merge-key documents: - { key: "key", value: [{ k: "a", v: 1 }, { k: "b", v: 1 }, { k: "c", v: 2 }], } As with append, the LHS of merge may be null, in which case the reduction is treated as a no-op and its result remains null.","keywords":"","version":"Next"},{"title":"Working with logs and statistics","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/working-logs-stats/","content":"","keywords":"","version":"Next"},{"title":"Accessing logs and statistics​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#accessing-logs-and-statistics","content":" You can access logs and statistics in the Flow web app, by materializing them to an external endpoint, or from the command line. ","version":"Next","tagName":"h2"},{"title":"Logs and statistics in the Flow web app​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#logs-and-statistics-in-the-flow-web-app","content":" You can view a subset of logs and statistics for individual tasks in the Flow web app. Logs​ After you publish a new capture or materialization, a pop-up window appears that displays the task's logs. Once you close the window, you can't regain access to the full logs in the web app. For a complete view of logs, use flowctl or materialize the logs collection to an outside system. However, if a task fails, you can view the logs associated with the error(s) that caused the failure. In the Details view of the published capture or materialization, click the name of its shard to display the logs. Statistics​ Two statistics are shown for each capture, collection, and materialization: Bytes Written or Read. This corresponds to the bytesTotal property of the stats collection.Docs Written or Read. This corresponds to the docsTotal property of the stats collection. These fields have slightly different meanings for each Flow entity type: For captures, Bytes Written and Docs Written represent the total data written across all of the capture's associated collections.For collections, Bytes Written and Docs Written represent the data written to the collection from its associated capture or derivation.For materializations, Bytes Read and Docs Read represent the total data read from all of the materialization's associated collections. ","version":"Next","tagName":"h3"},{"title":"Accessing logs and statistics from the command line​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#accessing-logs-and-statistics-from-the-command-line","content":" The flowctl logs and flowctl stats subcommands allow you to print logs and stats, respectively, from the command line. This method allows more flexibility and is ideal for debugging. You can retrieve logs and stats for any published Flow task. For example: flowctl logs --task acmeCo/anvils/capture-one flowctl stats --task acmeCo/anvils/capture-one --uncommitted Beta The --uncommitted flag is currently required for flowctl stats. This means that all statistics are read, regardless of whether they are about a successfully committed transaction, or a transaction that was rolled back or uncommitted. In the future, committed reads will be the default. Printing logs or stats since a specific time​ To limit output, you can retrieve logs are stats starting at a specific time in the past. For example: flowctl stats --task acmeCo/anvils/materialization-one --since 1h ...will retrieve stats from approximately the last hour. The actual start time will always be at the previous fragment boundary, so it can be significantly before the requested time period. Additional options for flowctl logs and flowctl stats can be accessed through command-line help. ","version":"Next","tagName":"h3"},{"title":"Accessing logs or stats by materialization​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#accessing-logs-or-stats-by-materialization","content":" You can materialize your logs or stats collections to an external system. This is typically the preferred method if you’d like to continuously work with or monitor logs or statistics. You can materialize the logs or statistics for all tasks, or select a subset of tasks using a partition selector (the logs and stats collections are partitioned on tasks). caution Be sure to add a partition selector to exclude the logs and statistics of the materialization itself. Otherwise, you could trigger an infinite loop in which the connector materializes its own logs and statistics, collects logs and statistic on that event, and so on. acmeCo/anvils/logs: endpoint: connector: image: ghcr.io/estuary/materialize-webhook:dev config: address: my.webhook.com bindings: - resource: relativePath: /log/wordcount source: ops/acmeCo/logs # Exclude the logs of this materialization to avoid an infinite loop. partitions: exclude: name: ['acmeCo/anvils/logs'] ","version":"Next","tagName":"h3"},{"title":"Available statistics​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#available-statistics","content":" Available statistics include information about the amount of data in inputs and outputs of each transaction. They also include temporal information about the transaction. Statistics vary by task type (capture, materialization, or derivation). A thorough knowledge of Flow's advanced concepts is necessary to effectively leverage these statistics. stats collection documents include the following properties. ","version":"Next","tagName":"h2"},{"title":"Shard information​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#shard-information","content":" A stats document begins with data about the shard processing the transaction. Each processing shard is uniquely identified by the combination of its name, keyBegin, and rClockBegin. This information is important for tasks with multiple shards: it allows you to determine whether data throughput is evenly distributed amongst those shards. Property\tDescription\tData Type\tApplicable Task Type/shard\tFlow shard information\tobject\tAll /shard/kind\tThe type of catalog task. One of "capture", "derivation", or "materialization"\tstring\tAll /shard/name\tThe name of the catalog task (without the task type prefix)\tstring\tAll /shard/keyBegin\tWith rClockBegin, this comprises the shard ID. The inclusive beginning of the shard's assigned key range.\tstring\tAll /shard/rClockBegin\tWith keyBegin, this comprises the shard ID. The inclusive beginning of the shard's assigned rClock range.\tstring\tAll ","version":"Next","tagName":"h3"},{"title":"Transaction information​","type":1,"pageTitle":"Working with logs and statistics","url":"/pr-preview/pr-1594/reference/working-logs-stats/#transaction-information","content":" stats documents include information about a transaction: its inputs and outputs, the amount of data processed, and the time taken. You can use this information to ensure that your Flow tasks are running efficiently, and that the amount of data processed matches your expectations. Property\tDescription\tData Type\tApplicable Task Type/ts\tTimestamp corresponding to the start of the transaction, rounded to the nearest minute\tstring\tAll /openSecondsTotal\tTotal time that the transaction was open before starting to commit\tnumber\tAll /txnCount\tTotal number of transactions represented by this stats document. Used for reduction.\tinteger\tAll /capture\tCapture stats, organized by collection\tobject\tCapture /materialize\tMaterialization stats, organized by collection\tobject\tMaterialization /derive\tDerivation statistics\tobject\tDerivation /<task-type>/<collection-name>/right/\tInput documents from a the task's source\tobject\tCapture, materialization /<task-type>/<collection-name>/left/\tInput documents from an external destination; used for reduced updates in materializations\tobject\tMaterialization /<task-type>/<collection-name>/out/\tOutput documents from the transaction\tobject\tAll /<task-type>/{}/docsTotal\tTotal number of documents\tinteger\tAll /<task-type>/{}/bytesTotal\tTotal number of bytes representing the JSON encoded documents\tinteger\tAll /derivations/transforms/transformStats\tStats for a specific transform of a derivation, which will have an update, publish, or both\tobject\tDerivation /derivations/transforms/transformStats/input\tThe input documents that were fed into this transform\tobject\tDerivation /derivations/transforms/transformStats/update\tThe outputs from update lambda invocations, which were combined into registers\tobject\tDerivation /derivations/transforms/transformStats/publish\tThe outputs from publish lambda invocations.\tobject\tDerivation /derivations/registers/createdTotal\tThe total number of new register keys that were created\tinteger\tDerivation ","version":"Next","tagName":"h3"},{"title":"minimize and maximize","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize/","content":"minimize and maximize minimize and maximize reduce by taking the smallest or largest seen value, respectively. collections: - name: example/reductions/min-max schema: type: object reduce: { strategy: merge } properties: key: { type: string } min: { reduce: { strategy: minimize } } max: { reduce: { strategy: maximize } } required: [key] key: [/key] tests: "Expect we can min/max values": - ingest: collection: example/reductions/min-max documents: - { key: "key", min: 32, max: "abc" } - { key: "key", min: 42, max: "def" } - verify: collection: example/reductions/min-max documents: - { key: "key", min: 32, max: "def" } minimize and maximize can also take a key, which is one or more JSON pointers that are relative to the reduced location. Keys make it possible to minimize and maximize over complex types by ordering over an extracted composite key. In the event that a right-hand side document key equals the current left-hand side minimum or maximum, the documents are deeply merged. This can be used to, for example, track not just the minimum value but also the number of times it’s been seen: collections: - name: example/reductions/min-max-key schema: type: object reduce: { strategy: merge } properties: key: { type: string } min: $anchor: min-max-value type: array items: - type: string - type: number reduce: { strategy: sum } reduce: strategy: minimize key: [/0] max: $ref: "#min-max-value" reduce: strategy: maximize key: [/0] required: [key] key: [/key] tests: "Expect we can min/max values using a key extractor": - ingest: collection: example/reductions/min-max-key documents: - { key: "key", min: ["a", 1], max: ["a", 1] } - { key: "key", min: ["c", 2], max: ["c", 2] } - { key: "key", min: ["b", 3], max: ["b", 3] } - { key: "key", min: ["a", 4], max: ["a", 4] } - verify: collection: example/reductions/min-max-key documents: # Min of equal keys ["a", 1] and ["a", 4] => ["a", 5]. - { key: "key", min: ["a", 5], max: ["c", 2] } ","keywords":"","version":"Next"},{"title":"set","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/reduction-strategies/set/","content":"set set interprets the document location as an update to a set. The location must be an object having only “add", “intersect", and “remove” properties. Any single “add", “intersect", or “remove” is always allowed. A document with “intersect” and “add” is allowed, and is interpreted as applying the intersection to the left-hand side set, followed by a union with the additions. A document with “remove” and “add” is also allowed, and is interpreted as applying the removals to the base set, followed by a union with the additions. “remove” and “intersect” within the same document are prohibited. Set additions are deeply merged. This makes sets behave like associative maps, where the “value” of a set member can be updated by adding it to the set again, with a reducible update. Sets may be objects, in which case the object property serves as the set item key: collections: - name: example/reductions/set schema: type: object reduce: { strategy: merge } properties: key: { type: string } value: # Sets are always represented as an object. type: object reduce: { strategy: set } # Schema for "add", "intersect", and "remove" properties # (each a map of keys and their associated sums): additionalProperties: type: object additionalProperties: type: number reduce: { strategy: sum } # Flow requires that all parents of locations with a reduce # annotation also have one themselves. # This strategy therefore must (currently) be here, but is ignored. reduce: { strategy: lastWriteWins } required: [key] key: [/key] tests: "Expect we can apply set operations to incrementally build associative maps": - ingest: collection: example/reductions/set documents: - { key: "key", value: { "add": { "a": 1, "b": 1, "c": 1 } } } - { key: "key", value: { "remove": { "b": 0 } } } - { key: "key", value: { "add": { "a": 1, "d": 1 } } } - verify: collection: example/reductions/set documents: - { key: "key", value: { "add": { "a": 2, "c": 1, "d": 1 } } } - ingest: collection: example/reductions/set documents: - { key: "key", value: { "intersect": { "a": 0, "d": 0 } } } - { key: "key", value: { "add": { "a": 1, "e": 1 } } } - verify: collection: example/reductions/set documents: - { key: "key", value: { "add": { "a": 3, "d": 1, "e": 1 } } } Sets can also be sorted arrays, which are ordered using a provide key extractor. Keys are given as one or more JSON pointers, each relative to the item. As with merge, arrays must be pre-sorted and de-duplicated by the key, and set reductions always maintain this invariant. Use a key extractor of [“”] to apply the natural ordering of scalar values. Whether array or object types are used, the type must always be consistent across the “add” / “intersect” / “remove” terms of both sides of the reduction. collections: - name: example/reductions/set-array schema: type: object reduce: { strategy: merge } properties: key: { type: string } value: # Sets are always represented as an object. type: object reduce: strategy: set key: [/0] # Schema for "add", "intersect", & "remove" properties # (each a sorted array of [key, sum] 2-tuples): additionalProperties: type: array # Flow requires that all parents of locations with a reduce # annotation also have one themselves. # This strategy therefore must (currently) be here, but is ignored. reduce: { strategy: lastWriteWins } # Schema for contained [key, sum] 2-tuples: items: type: array items: - type: string - type: number reduce: { strategy: sum } reduce: { strategy: merge } required: [key] key: [/key] tests: ? "Expect we can apply operations of sorted-array sets to incrementally build associative maps" : - ingest: collection: example/reductions/set-array documents: - { key: "key", value: { "add": [["a", 1], ["b", 1], ["c", 1]] } } - { key: "key", value: { "remove": [["b", 0]] } } - { key: "key", value: { "add": [["a", 1], ["d", 1]] } } - verify: collection: example/reductions/set-array documents: - { key: "key", value: { "add": [["a", 2], ["c", 1], ["d", 1]] } } - ingest: collection: example/reductions/set-array documents: - { key: "key", value: { "intersect": [["a", 0], ["d", 0]] } } - { key: "key", value: { "add": [["a", 1], ["e", 1]] } } - verify: collection: example/reductions/set-array documents: - { key: "key", value: { "add": [["a", 3], ["d", 1], ["e", 1]] } } ","keywords":"","version":"Next"},{"title":"Time Travel","type":0,"sectionRef":"#","url":"/pr-preview/pr-1594/reference/time-travel/","content":"","keywords":"","version":"Next"},{"title":"How to configure time travel​","type":1,"pageTitle":"Time Travel","url":"/pr-preview/pr-1594/reference/time-travel/#how-to-configure-time-travel","content":" In the Flow web app, either navigate to an existing materialization or create a new one. Under Source Collections scroll to the bottom of a Resource Configuration for a specific collection. If you are working with a new materialization, you must link a collection to the materialization before continuing. You'll find two optional date-time fields for implementing time travel: notBefore and notAfter. Click on either field to open a date/time picker that you can use to set the values. It's not mandatory to select values for both fields for time travel to take effect. However, selecting values for both fields will ensure that only data meeting both criteria is materialized. In other words, new data must fall before the notAfter date and after the notBefore date to be included in the materialization. ","version":"Next","tagName":"h2"},{"title":"Specification​","type":1,"pageTitle":"Time Travel","url":"/pr-preview/pr-1594/reference/time-travel/#specification","content":" Alternatively, both fields can be defined in the Flow specification file with the following format: materializations: # The name of the materialization. acmeCo/example/database-views: # Endpoint defines how to connect to the destination of the materialization. # Required, type: object endpoint: # This endpoint uses a connector provided as a Docker image. connector: # Docker image that implements the materialization connector. image: ghcr.io/estuary/materialize-mysql:dev # File that provides the connector's required configuration. # Configuration may also be presented inline. config: path/to//connector-config.yaml bindings: - # Source collection read by this binding. # Required, type: object or string source: # Name of the collection to be read. # Required. name: acmeCo/example/collection # Lower bound date-time for documents which should be processed. # Source collection documents published before this date-time are filtered. # `notBefore` is *only* a filter. Updating its value will not cause Flow # to re-process documents that have already been read. # Optional. Default is to process all documents. notBefore: 2023-01-23T01:00:00Z # Upper bound date-time for documents which should be processed. # Source collection documents published after this date-time are filtered. # Like `notBefore`, `notAfter` is *only* a filter. Updating its value will # not cause Flow to re-process documents that have already been read. # Optional. Default is to process all documents. notAfter: 2023-01-23T02:00:00Z ","version":"Next","tagName":"h3"},{"title":"Properties​","type":1,"pageTitle":"Time Travel","url":"/pr-preview/pr-1594/reference/time-travel/#properties","content":" Property\tTitle\tDescription\tType/notBefore\tNot Before\tOnly include date before this time\tdate-time /notAfter\tNot After\tOnly include data after this time\tdate-time ","version":"Next","tagName":"h2"}],"options":{"excludeRoutes":["blog/**/*"],"id":"default"}} \ No newline at end of file diff --git a/pr-preview/pr-1594/sitemap.xml b/pr-preview/pr-1594/sitemap.xml deleted file mode 100644 index fb3f627e2a..0000000000 --- a/pr-preview/pr-1594/sitemap.xml +++ /dev/null @@ -1 +0,0 @@ -https://docs.estuary.dev/pr-preview/pr-1594/example-markdown/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/example/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/advanced/evolutions/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/advanced/journals/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/advanced/logs-stats/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/advanced/projections/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/advanced/shards/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/captures/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/catalogs/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/collections/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/connectors/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/derivations/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/flowctl/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/import/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/materialization/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/schemas/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/storage-mappings/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/tests/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/concepts/web-app/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/getting-started/installation/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/getting-started/tutorials/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/getting-started/tutorials/continuous-materialized-view/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/getting-started/tutorials/dataflow-s3-snowflake/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/getting-started/tutorials/derivations_acmebank/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/getting-started/tutorials/postgresql_cdc_to_snowflake/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/getting-started/tutorials/real_time_cdc_with_mongodb/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/connect-network/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/create-dataflow/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/customize-materialization-fields/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/dekaf_reading_collections_from_kafka/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/derivation_tutorial_sql/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/edit-data-flows/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/flowctl/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/flowctl/create-derivation/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/flowctl/edit-draft-from-webapp/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/flowctl/edit-specification-locally/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/flowctl/troubleshoot-task/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/howto_join_two_collections_typescript/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/schema-evolution/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/system-specific-dataflows/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/system-specific-dataflows/firestore-to-dwh/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/system-specific-dataflows/s3-to-snowflake/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/guides/transform_data_using_typescript/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/overview/comparisons/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/overview/who-should-use-flow/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/allow-ip-addresses/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/authentication/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Configuring-task-shards/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/aircall/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/airtable/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/alloydb/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/alpaca/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-ads/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-dynamodb/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-kinesis/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-redshift/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-s3/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/amazon-sqs/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/amplitude/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/apache-kafka/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/azure-blob-storage/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/bigquery-batch/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/bing-ads/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/braintree/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/braze/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/chargebee/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/confluence/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/datadog-ingest/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/dropbox/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/exchange-rates/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/facebook-marketing/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/freshdesk/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/gcs/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/github/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/gitlab/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/gladly/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-ads/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics-4/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-analytics/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-drive/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-firestore/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-pubsub/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-search-console/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/google-sheets/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/greenhouse/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/harvest/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-file/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/http-ingest/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot-real-time/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/hubspot/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/instagram/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom-ingest/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/intercom/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/iterable/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira-ingest/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/jira/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/klaviyo/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-ads/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/linkedin-pages/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/mailchimp/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/MariaDB/amazon-rds-mariadb/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/marketo/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/mixpanel/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/mongodb/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/amazon-rds-mysql/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/google-cloud-sql-mysql/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/MySQL/mysql-batch/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suiteanalytics/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/netsuite-suitetalk/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/notion/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/OracleDB/flashback/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/paypal-transaction/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/pendo/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/pinterest/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/amazon-rds-postgres/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/google-cloud-sql-postgres/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/neon-postgres/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/postgres-batch/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/PostgreSQL/Supabase/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/recharge/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-historical-data/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/Salesforce/salesforce-real-time/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/sendgrid/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/sentry/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/sftp/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/slack/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/snapchat/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/snowflake/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/amazon-rds-sqlserver/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/SQLServer/google-cloud-sql-sqlserver/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/stripe/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/survey-monkey/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/tiktok/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/twilio/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/woocommerce/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/youtube-analytics/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-chat/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/capture-connectors/zendesk-support/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/dekaf/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/dekaf/dekaf-tinybird/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/alloydb/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-dynamodb/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-redshift/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-csv/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-iceberg/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/amazon-s3-parquet/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/BigQuery/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/databricks/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Elasticsearch/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Firebolt/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-csv/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-gcs-parquet/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/google-pubsub/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Google-sheets/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/http-webhook/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mongodb/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/motherduck/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/mysql-heatwave/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/amazon-rds-mysql/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/MySQL/google-cloud-sql-mysql/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/pinecone/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/amazon-rds-postgres/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/PostgreSQL/google-cloud-sql-postgres/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Rockset/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/slack/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/Snowflake/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLite/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/amazon-rds-sqlserver/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/SQLServer/google-cloud-sql-sqlserver/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/starburst/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-connectors/timescaledb/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/Connectors/materialization-protocol/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/editing/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/materialization-sync-schedule/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/notifications/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/organizing-catalogs/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/reduction-strategies/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/reduction-strategies/append/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/reduction-strategies/composing-with-conditionals/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/reduction-strategies/firstwritewins-and-lastwritewins/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/reduction-strategies/merge/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/reduction-strategies/minimize-and-maximize/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/reduction-strategies/set/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/reduction-strategies/sum/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/time-travel/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/reference/working-logs-stats/weekly0.5https://docs.estuary.dev/pr-preview/pr-1594/weekly0.5 \ No newline at end of file

      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